diff --git a/.github/workflows/build-report.yml b/.github/workflows/build-report.yml deleted file mode 100644 index 9c2f33843..000000000 --- a/.github/workflows/build-report.yml +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright © 2024 Cask Data, Inc. -# 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. - -# This workflow will build a Java project with Maven -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven -# Note: Any changes to this workflow would be used only after merging into develop -name: Build Unit Tests Report - -on: - workflow_run: - workflows: - - Build with unit tests - types: - - completed - -permissions: - actions: read # Allows reading workflow run information - statuses: write # Required if the action updates commit statuses - checks: write # Required if it updates GitHub Checks API - -jobs: - build: - runs-on: ubuntu-latest - - if: ${{ github.event.workflow_run.conclusion != 'skipped' }} - - steps: - # Pinned 1.0.0 version - - uses: marocchino/action-workflow_run-status@54b6e87d6cb552fc5f36dbe9a722a6048725917a - - - name: Download artifact - uses: actions/download-artifact@v4 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - run-id: ${{ github.event.workflow_run.id }} - path: artifacts/ - - - name: Surefire Report - # Pinned 3.5.2 version - uses: mikepenz/action-junit-report@16a9560bd02f11e7e3bf6b3e2ef6bba6c9d07c32 - if: always() - with: - report_paths: '**/target/surefire-reports/TEST-*.xml' - github_token: ${{ secrets.GITHUB_TOKEN }} - detailed_summary: true - commit: ${{ github.event.workflow_run.head_sha }} - check_name: Build Test Report - diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index c4d80553c..000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright © 2021 Cask Data, Inc. -# 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. - -# This workflow will build a Java project with Maven -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven -# Note: Any changes to this workflow would be used only after merging into develop -name: Build with unit tests - -on: - push: - branches: [ develop, release/** ] - pull_request: - branches: [ develop, release/** ] - types: [opened, synchronize, reopened, labeled] - -jobs: - build: - runs-on: k8s-runner-build - - # We allow builds: - # 1) When it's a merge into a branch - # 2) For PRs that are labeled as build and - # - It's a code change - # - A build label was just added - # A bit complex, but prevents builds when other labels are manipulated - if: > - github.event_name == 'push' - || (contains(github.event.pull_request.labels.*.name, 'build') - && (github.event.action != 'labeled' || github.event.label.name == 'build') - ) - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.workflow_run.head_sha }} - - name: Cache - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ github.workflow }}-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven-${{ github.workflow }} - - name: Build with Maven - run: mvn clean test -fae -T 2 -B -V -DcloudBuild -Dmaven.wagon.http.retryHandler.count=3 -Dmaven.wagon.httpconnectionManager.ttlSeconds=25 - - name: Archive build artifacts - uses: actions/upload-artifact@v4 - if: always() - with: - name: reports-${{ github.run_id }} - path: | - **/target/rat.txt - **/target/surefire-reports/* - diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml deleted file mode 100644 index 199225ef8..000000000 --- a/.github/workflows/e2e.yml +++ /dev/null @@ -1,99 +0,0 @@ -# Copyright © 2023 Cask Data, Inc. -# 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. - -# This workflow will build a Java project with Maven -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven -# Note: Any changes to this workflow would be used only after merging into develop -name: Build e2e tests - -on: - push: - branches: [ develop ] - pull_request: - branches: [ develop ] - types: [ opened, synchronize, reopened ] - workflow_dispatch: - -jobs: - build: - runs-on: k8s-runner-e2e - # We allow builds: - # 1) When triggered manually - # 2) When it's a merge into a branch - # 3) For PRs that are labeled as build and - # - It's a code change - # - A build label was just added - # A bit complex, but prevents builds when other labels are manipulated - if: > - github.event_name == 'workflow_dispatch' - || github.event_name == 'push' - || github.event_name == 'pull_request' - strategy: - matrix: - module: [wrangler-transform] - fail-fast: false - - steps: - # Pinned 1.0.0 version - - uses: actions/checkout@v4 - with: - path: plugin - submodules: 'recursive' - ref: ${{ github.event.workflow_run.head_sha }} - - - uses: dorny/paths-filter@b2feaf19c27470162a626bd6fa8438ae5b263721 - if: github.event_name != 'workflow_dispatch' && github.event_name != 'push' - id: filter - with: - working-directory: plugin - filters: | - e2e-test: - - '${{ matrix.module }}/**/e2e-test/**' - - - name: Checkout e2e test repo - uses: actions/checkout@v4 - with: - repository: cdapio/cdap-e2e-tests - path: e2e - - - name: Cache - uses: actions/cache@v4 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ github.workflow }}-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven-${{ github.workflow }} - - - name: Run required e2e tests - if: github.event_name != 'workflow_dispatch' && github.event_name != 'push' && steps.filter.outputs.e2e-test == 'false' - run: python3 e2e/src/main/scripts/run_e2e_test.py --module ${{ matrix.module }} --testRunner TestRunnerRequired.java - - - name: Run all e2e tests - if: github.event_name == 'workflow_dispatch' || github.event_name == 'push' || steps.filter.outputs.e2e-test == 'true' - run: python3 e2e/src/main/scripts/run_e2e_test.py --module ${{ matrix.module }} - - - name: Upload debug files - uses: actions/upload-artifact@v4 - if: always() - with: - name: Debug files - ${{ matrix.module }} - path: ./**/target/e2e-debug - - - name: Upload files to GCS - uses: google-github-actions/upload-cloud-storage@v2 - if: always() - with: - path: ./plugin - destination: e2e-tests-cucumber-reports/${{ github.event.repository.name }}/${{ github.ref }} - glob: '**/target/cucumber-reports/**' - - name: Cucumber Report URL - if: always() - run: echo "https://storage.googleapis.com/e2e-tests-cucumber-reports/${{ github.event.repository.name }}/${{ github.ref }}/plugin/${{ matrix.module }}/target/cucumber-reports/advanced-reports/cucumber-html-reports/overview-features.html" diff --git a/.gitignore b/.gitignore index 5a9b182d3..b37ae2766 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,5 @@ release.properties # Remove dev directory. dev + +/node_modules \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index a0c1f5e6a..000000000 --- a/LICENSE +++ /dev/null @@ -1,176 +0,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 - columns, trademarks, service marks, or product columns of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS diff --git a/README.md b/README.md index 4aa6eeb3a..6d3ae87e3 100644 --- a/README.md +++ b/README.md @@ -1,218 +1,142 @@ -# Data Prep - -![cm-available](https://cdap-users.herokuapp.com/assets/cm-available.svg) -![cdap-transform](https://cdap-users.herokuapp.com/assets/cdap-transform.svg) -[![Build Status](https://travis-ci.org/cdapio/hydrator-plugins.svg?branch=develop)](https://travis-ci.org/cdapio/hydrator-plugins) -[![Coverity Scan Build Status](https://scan.coverity.com/projects/11434/badge.svg)](https://scan.coverity.com/projects/hydrator-wrangler-transform) -[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.cdap.wrangler/wrangler-core/badge.svg)](https://maven-badges.herokuapp.com/maven-central/io.cdap.wrangler/wrangler-core) -[![Javadoc](https://javadoc-emblem.rhcloud.com/doc/io.cdap.wrangler/wrangler-core/badge.svg)](http://www.javadoc.io/doc/io.cdap.wrangler/wrangler-core) -[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) -[![Join CDAP community](https://cdap-users.herokuapp.com/badge.svg?t=wrangler)](https://cdap-users.herokuapp.com?t=1) - -A collection of libraries, a pipeline plugin, and a CDAP service for performing data -cleansing, transformation, and filtering using a set of data manipulation instructions -(directives). These instructions are either generated using an interative visual tool or -are manually created. - - * Data Prep defines few concepts that might be useful if you are just getting started with it. Learn about them [here](wrangler-docs/concepts.md) - * The Data Prep Transform is [separately documented](wrangler-transform/wrangler-docs/data-prep-transform.md). - * [Data Prep Cheatsheet](wrangler-docs/cheatsheet.md) - -## New Features - -More [here](wrangler-docs/upcoming-features.md) on upcoming features. - - * **User Defined Directives, also known as UDD**, allow you to create custom functions to transform records within CDAP DataPrep or a.k.a Wrangler. CDAP comes with a comprehensive library of functions. There are however some omissions, and some specific cases for which UDDs are the solution. Additional information on how you can build your custom directives [here](wrangler-docs/custom-directive.md). - * Migrating directives from version 1.0 to version 2.0 [here](wrangler-docs/directive-migration.md) - * Information about Grammar [here](wrangler-docs/grammar/grammar-info.md) - * Various `TokenType` supported by system [here](../api/src/main/java/io/cdap/wrangler/api/parser/TokenType.java) - * Custom Directive Implementation Internals [here](wrangler-docs/udd-internal.md) - - * A new capability that allows CDAP Administrators to **restrict the directives** that are accessible to their users. -More information on configuring can be found [here](wrangler-docs/exclusion-and-aliasing.md) - -## Demo Videos and Recipes - -Videos and Screencasts are best way to learn, so we have compiled simple, short screencasts that shows some of the features of Data Prep. Additional videos can be found [here](https://www.youtube.com/playlist?list=PLhmsf-NvXKJn-neqefOrcl4n7zU4TWmIr) - -### Videos - - * [SCREENCAST] [Creating Lookup Dataset and Joining](https://www.youtube.com/watch?v=Nc1b0rsELHQ) - * [SCREENCAST] [Restricted Directives](https://www.youtube.com/watch?v=71EcMQU714U) - * [SCREENCAST] [Parse Excel files in CDAP](https://www.youtube.com/watch?v=su5L1noGlEk) - * [SCREENCAST] [Parse File As AVRO File](https://www.youtube.com/watch?v=tmwAw4dKUNc) - * [SCREENCAST] [Parsing Binary Coded AVRO Messages](https://www.youtube.com/watch?v=Ix_lPo-PDJY) - * [SCREENCAST] [Parsing Binary Coded AVRO Messages & Protobuf messages using schema registry](https://www.youtube.com/watch?v=LVLIdWnUX1k) - * [SCREENCAST] [Quantize a column - Digitize](https://www.youtube.com/watch?v=VczkYX5SRtY) - * [SCREENCAST] [Data Cleansing capability with send-to-error directive](https://www.youtube.com/watch?v=aZd5H8hIjDc) - * [SCREENCAST] [Building Data Prep from the GitHub source](https://youtu.be/pGGjKU04Y38) - * [VOICE-OVER] [End-to-End Demo Video](https://youtu.be/AnhF0qRmn24) - * [SCREENCAST] [Ingesting into Kudu](https://www.youtube.com/watch?v=KBW7a38vlUM) - * [SCREENCAST] [Realtime HL7 CCDA XML from Kafka into Time Parititioned Parquet](https://youtu.be/0fqNmnOnD-0) - * [SCREENCAST] [Parsing JSON file](https://youtu.be/vwnctcGDflE) - * [SCREENCAST] [Flattening arrays](https://youtu.be/SemHxgBYIsY) - * [SCREENCAST] [Data cleansing with send-to-error directive](https://www.youtube.com/watch?v=aZd5H8hIjDc) - * [SCREENCAST] [Publishing to Kafka](https://www.youtube.com/watch?v=xdc8pvvlI48) - * [SCREENCAST] [Fixed length to JSON](https://www.youtube.com/watch?v=3AXu4m1swuM) - -### Recipes - - * [Parsing Apache Log Files](wrangler-demos/parsing-apache-log-files.md) - * [Parsing CSV Files and Extracting Column Values](wrangler-demos/parsing-csv-extracting-column-values.md) - * [Parsing HL7 CCDA XML Files](wrangler-demos/parsing-hl7-ccda-xml-files.md) - -## Available Directives - -These directives are currently available: - -| Directive | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------- | -| **Parsers** | | -| [JSON Path](wrangler-docs/directives/json-path.md) | Uses a DSL (a JSON path expression) for parsing JSON records | -| [Parse as AVRO](wrangler-docs/directives/parse-as-avro.md) | Parsing an AVRO encoded message - either as binary or json | -| [Parse as AVRO File](wrangler-docs/directives/parse-as-avro-file.md) | Parsing an AVRO data file | -| [Parse as CSV](wrangler-docs/directives/parse-as-csv.md) | Parsing an input record as comma-separated values | -| [Parse as Date](wrangler-docs/directives/parse-as-date.md) | Parsing dates using natural language processing | -| [Parse as Excel](wrangler-docs/directives/parse-as-excel.md) | Parsing excel file. | -| [Parse as Fixed Length](wrangler-docs/directives/parse-as-fixed-length.md) | Parses as a fixed length record with specified widths | -| [Parse as HL7](wrangler-docs/directives/parse-as-hl7.md) | Parsing Health Level 7 Version 2 (HL7 V2) messages | -| [Parse as JSON](wrangler-docs/directives/parse-as-json.md) | Parsing a JSON object | -| [Parse as Log](wrangler-docs/directives/parse-as-log.md) | Parses access log files as from Apache HTTPD and nginx servers | -| [Parse as Protobuf](wrangler-docs/directives/parse-as-log.md) | Parses an Protobuf encoded in-memory message using descriptor | -| [Parse as Simple Date](wrangler-docs/directives/parse-as-simple-date.md) | Parses date strings | -| [Parse XML To JSON](wrangler-docs/directives/parse-xml-to-json.md) | Parses an XML document into a JSON structure | -| [Parse as Currency](wrangler-docs/directives/parse-as-currency.md) | Parses a string representation of currency into a number. | -| [Parse as Datetime](wrangler-docs/directives/parse-as-datetime.md) | Parses strings with datetime values to CDAP datetime type | -| **Output Formatters** | | -| [Write as CSV](wrangler-docs/directives/write-as-csv.md) | Converts a record into CSV format | -| [Write as JSON](wrangler-docs/directives/write-as-json-map.md) | Converts the record into a JSON map | -| [Write JSON Object](wrangler-docs/directives/write-as-json-object.md) | Composes a JSON object based on the fields specified. | -| [Format as Currency](wrangler-docs/directives/format-as-currency.md) | Formats a number as currency as specified by locale. | -| **Transformations** | | -| [Changing Case](wrangler-docs/directives/changing-case.md) | Changes the case of column values | -| [Cut Character](wrangler-docs/directives/cut-character.md) | Selects parts of a string value | -| [Set Column](wrangler-docs/directives/set-column.md) | Sets the column value to the result of an expression execution | -| [Find and Replace](wrangler-docs/directives/find-and-replace.md) | Transforms string column values using a "sed"-like expression | -| [Index Split](wrangler-docs/directives/index-split.md) | (_Deprecated_) | -| [Invoke HTTP](wrangler-docs/directives/invoke-http.md) | Invokes an HTTP Service (_Experimental_, potentially slow) | -| [Quantization](wrangler-docs/directives/quantize.md) | Quantizes a column based on specified ranges | -| [Regex Group Extractor](wrangler-docs/directives/extract-regex-groups.md) | Extracts the data from a regex group into its own column | -| [Setting Character Set](wrangler-docs/directives/set-charset.md) | Sets the encoding and then converts the data to a UTF-8 String | -| [Setting Record Delimiter](wrangler-docs/directives/set-record-delim.md) | Sets the record delimiter | -| [Split by Separator](wrangler-docs/directives/split-by-separator.md) | Splits a column based on a separator into two columns | -| [Split Email Address](wrangler-docs/directives/split-email.md) | Splits an email ID into an account and its domain | -| [Split URL](wrangler-docs/directives/split-url.md) | Splits a URL into its constituents | -| [Text Distance (Fuzzy String Match)](wrangler-docs/directives/text-distance.md) | Measures the difference between two sequences of characters | -| [Text Metric (Fuzzy String Match)](wrangler-docs/directives/text-metric.md) | Measures the difference between two sequences of characters | -| [URL Decode](wrangler-docs/directives/url-decode.md) | Decodes from the `application/x-www-form-urlencoded` MIME format | -| [URL Encode](wrangler-docs/directives/url-encode.md) | Encodes to the `application/x-www-form-urlencoded` MIME format | -| [Trim](wrangler-docs/directives/trim.md) | Functions for trimming white spaces around string data | -| **Encoders and Decoders** | | -| [Decode](wrangler-docs/directives/decode.md) | Decodes a column value as one of `base32`, `base64`, or `hex` | -| [Encode](wrangler-docs/directives/encode.md) | Encodes a column value as one of `base32`, `base64`, or `hex` | -| **Unique ID** | | -| [UUID Generation](wrangler-docs/directives/generate-uuid.md) | Generates a universally unique identifier (UUID) .Recommended to use with Wrangler version 4.4.0 and above due to an important bug fix [CDAP-17732](https://cdap.atlassian.net/browse/CDAP-17732) | -| **Date Transformations** | | -| [Diff Date](wrangler-docs/directives/diff-date.md) | Calculates the difference between two dates | -| [Format Date](wrangler-docs/directives/format-date.md) | Custom patterns for date-time formatting | -| [Format Unix Timestamp](wrangler-docs/directives/format-unix-timestamp.md) | Formats a UNIX timestamp as a date | -| **DateTime Transformations** | | -| [Current DateTime](wrangler-docs/directives/current-datetime.md) | Generates the current datetime using the given zone or UTC by default| -| [Datetime To Timestamp](wrangler-docs/directives/datetime-to-timestamp.md) | Converts a datetime value to timestamp with the given zone | -| [Format Datetime](wrangler-docs/directives/format-datetime.md) | Formats a datetime value to custom date time pattern strings | -| [Timestamp To Datetime](wrangler-docs/directives/timestamp-to-datetime.md) | Converts a timestamp value to datetime | -| **Lookups** | | -| [Catalog Lookup](wrangler-docs/directives/catalog-lookup.md) | Static catalog lookup of ICD-9, ICD-10-2016, ICD-10-2017 codes | -| [Table Lookup](wrangler-docs/directives/table-lookup.md) | Performs lookups into Table datasets | -| **Hashing & Masking** | | -| [Message Digest or Hash](wrangler-docs/directives/hash.md) | Generates a message digest | -| [Mask Number](wrangler-docs/directives/mask-number.md) | Applies substitution masking on the column values | -| [Mask Shuffle](wrangler-docs/directives/mask-shuffle.md) | Applies shuffle masking on the column values | -| **Row Operations** | | -| [Filter Row if Matched](wrangler-docs/directives/filter-row-if-matched.md) | Filters rows that match a pattern for a column | -| [Filter Row if True](wrangler-docs/directives/filter-row-if-true.md) | Filters rows if the condition is true. | -| [Filter Row Empty of Null](wrangler-docs/directives/filter-empty-or-null.md) | Filters rows that are empty of null. | -| [Flatten](wrangler-docs/directives/flatten.md) | Separates the elements in a repeated field | -| [Fail on condition](wrangler-docs/directives/fail.md) | Fails processing when the condition is evaluated to true. | -| [Send to Error](wrangler-docs/directives/send-to-error.md) | Filtering of records to an error collector | -| [Send to Error And Continue](wrangler-docs/directives/send-to-error-and-continue.md) | Filtering of records to an error collector and continues processing | -| [Split to Rows](wrangler-docs/directives/split-to-rows.md) | Splits based on a separator into multiple records | -| **Column Operations** | | -| [Change Column Case](wrangler-docs/directives/change-column-case.md) | Changes column names to either lowercase or uppercase | -| [Changing Case](wrangler-docs/directives/changing-case.md) | Change the case of column values | -| [Cleanse Column Names](wrangler-docs/directives/cleanse-column-names.md) | Sanatizes column names, following specific rules | -| [Columns Replace](wrangler-docs/directives/columns-replace.md) | Alters column names in bulk | -| [Copy](wrangler-docs/directives/copy.md) | Copies values from a source column into a destination column | -| [Drop Column](wrangler-docs/directives/drop.md) | Drops a column in a record | -| [Fill Null or Empty Columns](wrangler-docs/directives/fill-null-or-empty.md) | Fills column value with a fixed value if null or empty | -| [Keep Columns](wrangler-docs/directives/keep.md) | Keeps specified columns from the record | -| [Merge Columns](wrangler-docs/directives/merge.md) | Merges two columns by inserting a third column | -| [Rename Column](wrangler-docs/directives/rename.md) | Renames an existing column in the record | -| [Set Column Header](wrangler-docs/directives/set-headers.md) | Sets the names of columns, in the order they are specified | -| [Split to Columns](wrangler-docs/directives/split-to-columns.md) | Splits a column based on a separator into multiple columns | -| [Swap Columns](wrangler-docs/directives/swap.md) | Swaps column names of two columns | -| [Set Column Data Type](wrangler-docs/directives/set-type.md) | Convert data type of a column | -| **NLP** | | -| [Stemming Tokenized Words](wrangler-docs/directives/stemming.md) | Applies the Porter stemmer algorithm for English words | -| **Transient Aggregators & Setters** | | -| [Increment Variable](wrangler-docs/directives/increment-variable.md) | Increments a transient variable with a record of processing. | -| [Set Variable](wrangler-docs/directives/set-variable.md) | Sets a transient variable with a record of processing. | -| **Functions** | | -| [Data Quality](wrangler-docs/functions/dq-functions.md) | Data quality check functions. Checks for date, time, etc. | -| [Date Manipulations](wrangler-docs/functions/date-functions.md) | Functions that can manipulate date | -| [DDL](wrangler-docs/functions/ddl-functions.md) | Functions that can manipulate definition of data | -| [JSON](wrangler-docs/functions/json-functions.md) | Functions that can be useful in transforming your data | -| [Types](wrangler-docs/functions/type-functions.md) | Functions for detecting the type of data | - -## Performance - -Initial performance tests show that with a set of directives of high complexity for -transforming data, *DataPrep* is able to process at about ~106K records per second. The -rates below are specified as *records/second*. - -| Directive Complexity | Column Count | Records | Size | Mean Rate | -| -------------------- | :----------: | ---------: | -------------: | --------: | -| High (167 Directives) | 426 | 127,946,398 | 82,677,845,324 | 106,367.27 | -| High (167 Directives) | 426 | 511,785,592 | 330,711,381,296 | 105,768.93 | - - -## Contact - -### Mailing Lists - -CDAP User Group and Development Discussions: - -* [cdap-user@googlegroups.com](https://groups.google.com/d/forum/cdap-user) - -The *cdap-user* mailing list is primarily for users using the product to develop -applications or building plugins for appplications. You can expect questions from -users, release announcements, and any other discussions that we think will be helpful -to the users. - -### IRC Channel - -CDAP IRC Channel: [#cdap on irc.freenode.net](http://webchat.freenode.net?channels=%23cdap) - -### Slack Team - -CDAP Users on Slack: [cdap-users team](https://cdap-users.herokuapp.com) - - -## License and Trademarks - -Copyright © 2016-2019 Cask Data, Inc. - -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. - -Cask is a trademark of Cask Data, Inc. All rights reserved. - -Apache, Apache HBase, and HBase are trademarks of The Apache Software Foundation. Used with -permission. No endorsement by The Apache Software Foundation is implied by the use of these marks. +# ZeoTap Bidirectional ClickHouse & Flat File Data Ingestion Tool + +This web application facilitates data ingestion between ClickHouse database and flat files. It supports bidirectional data flow, column selection, and multi-table joins. + +## Features + +- **Bidirectional Data Flow:** + - ClickHouse -> Flat File + - Flat File -> ClickHouse + +- **ClickHouse Integration:** + - Connect using Host, Port, Database, User + - JWT Token-based authentication + - Support for both HTTP and HTTPS connections + +- **Flat File Integration:** + - Support for CSV files + - Configurable delimiters + - Header detection + +- **Schema Discovery & Column Selection:** + - View available tables and columns + - Select specific columns for ingestion + - Preserve data types + +- **Multi-Table Join (Bonus Feature):** + - Select multiple tables + - Specify JOIN conditions + - Combined data export + +- **Additional Features:** + - Data preview before ingestion + - Record count reporting + - Error handling + +## Project Structure + +The project is divided into two main parts: + +1. **Backend (Java + Spring Boot):** + - REST API for data ingestion operations + - ClickHouse connectivity using JDBC + - CSV file handling + - Multi-table JOIN support + +2. **Frontend (Next.js + React):** + - User interface for configuring connections + - Table/column selection interface + - Data preview functionality + - Progress reporting + +## Setup and Installation + +### Prerequisites + +- Java 17+ +- Node.js 16+ +- npm 8+ +- ClickHouse database (local or remote) + +### Backend Setup + +1. Navigate to the backend directory: + ```bash + cd backend + ``` + +2. Build the project: + ```bash + ./mvnw clean package + ``` + +3. Run the application: + ```bash + java -jar target/data-ingestion-tool-0.0.1-SNAPSHOT.jar + ``` + +### Frontend Setup + +1. Navigate to the frontend directory: + ```bash + cd frontend + ``` + +2. Install dependencies: + ```bash + npm install + ``` + +3. Run the development server: + ```bash + npm run dev + ``` + +4. Access the application at http://localhost:3000 + +## Usage Guide + +1. **Select Source and Target:** + - Choose between ClickHouse → Flat File or Flat File → ClickHouse + +2. **Configure Source:** + - For ClickHouse: Provide connection details and JWT token + - For Flat File: Upload a CSV file and configure delimiter settings + +3. **Configure Target:** + - For ClickHouse: Provide connection details + - For Flat File: Specify file name and delimiter preferences + +4. **Select Columns:** + - Choose specific tables and columns to include + - For multi-table ingestion, configure JOIN conditions + +5. **Preview Data:** + - Review a sample of the data before proceeding + +6. **Start Ingestion:** + - Begin the data transfer process + - View progress and completion status + +7. **Download Results:** + - For Flat File targets, download the generated file + - See total record count and processing summary + +## Testing + +The application can be tested with: + +- ClickHouse example datasets (`uk_price_paid`, `ontime`) +- Any CSV file with proper formatting + +## Security Considerations + +- JWT tokens are used for secure authentication with ClickHouse +- File uploads are validated for security +- No sensitive information is logged + +## License + +This project is proprietary and confidential. + +Copyright © 2025 ZeoTap. All rights reserved. \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index c13abd11a..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,8 +0,0 @@ -# Security Policy - -## Reporting a Vulnerability - -To report a security issue, please use [https://g.co/vulnz](https://g.co/vulnz). -We use g.co/vulnz for our intake, and do coordination and disclosure here on -GitHub (including using GitHub Security Advisory). The Google Security Team will -respond within 5 working days of your report on g.co/vulnz. diff --git a/backend/pom.xml b/backend/pom.xml new file mode 100644 index 000000000..96fe07634 --- /dev/null +++ b/backend/pom.xml @@ -0,0 +1,102 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.5 + + + com.zeotap + data-ingestion-tool + 0.0.1-SNAPSHOT + data-ingestion-tool + Bidirectional ClickHouse & Flat File Data Ingestion Tool + + + 17 + 0.4.6 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-validation + + + + + com.clickhouse + clickhouse-jdbc + ${clickhouse.jdbc.version} + http + + + + + commons-io + commons-io + 2.11.0 + + + + + com.opencsv + opencsv + 5.7.1 + + + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + runtime + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + runtime + + + + org.projectlombok + lombok + true + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/DataIngestionApplication.java b/backend/src/main/java/com/zeotap/dataingestion/DataIngestionApplication.java new file mode 100644 index 000000000..43f39f0ab --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/DataIngestionApplication.java @@ -0,0 +1,29 @@ +package com.zeotap.dataingestion; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@SpringBootApplication +public class DataIngestionApplication { + + public static void main(String[] args) { + SpringApplication.run(DataIngestionApplication.class, args); + } + + @Bean + public WebMvcConfigurer corsConfigurer() { + return new WebMvcConfigurer() { + @Override + public void addCorsMappings(CorsRegistry registry) { + // Allow frontend to access the API + registry.addMapping("/api/**") + .allowedOrigins("http://localhost:3000") + .allowedMethods("GET", "POST", "PUT", "DELETE") + .allowCredentials(true); + } + }; + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/controller/ClickHouseController.java b/backend/src/main/java/com/zeotap/dataingestion/controller/ClickHouseController.java new file mode 100644 index 000000000..88ae703a9 --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/controller/ClickHouseController.java @@ -0,0 +1,52 @@ +package com.zeotap.dataingestion.controller; + +import com.zeotap.dataingestion.model.ClickHouseConfig; +import com.zeotap.dataingestion.model.TableInfo; +import com.zeotap.dataingestion.service.ClickHouseService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/clickhouse") +@RequiredArgsConstructor +@Slf4j +public class ClickHouseController { + + private final ClickHouseService clickHouseService; + + @PostMapping("/test-connection") + public ResponseEntity> testConnection(@RequestBody ClickHouseConfig config) { + Map response = new HashMap<>(); + boolean success = clickHouseService.testConnection(config); + + response.put("success", success); + if (success) { + response.put("message", "Successfully connected to ClickHouse"); + } else { + response.put("message", "Failed to connect to ClickHouse. Please check your configuration."); + } + + return ResponseEntity.ok(response); + } + + @PostMapping("/tables") + public ResponseEntity> getTables(@RequestBody ClickHouseConfig config) { + try { + List tables = clickHouseService.getAllTables(config); + return ResponseEntity.ok(tables); + } catch (SQLException e) { + log.error("Error fetching tables", e); + return ResponseEntity.badRequest().build(); + } + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/controller/DataIngestionController.java b/backend/src/main/java/com/zeotap/dataingestion/controller/DataIngestionController.java new file mode 100644 index 000000000..94de7ed3c --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/controller/DataIngestionController.java @@ -0,0 +1,52 @@ +package com.zeotap.dataingestion.controller; + +import com.opencsv.exceptions.CsvValidationException; +import com.zeotap.dataingestion.model.IngestionRequest; +import com.zeotap.dataingestion.model.IngestionResponse; +import com.zeotap.dataingestion.service.DataIngestionService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/ingestion") +@RequiredArgsConstructor +@Slf4j +public class DataIngestionController { + + private final DataIngestionService dataIngestionService; + + @PostMapping("/ingest") + public ResponseEntity ingestData(@RequestBody IngestionRequest request) { + log.info("Received ingestion request: {}", request); + IngestionResponse response = dataIngestionService.ingestData(request); + return ResponseEntity.ok(response); + } + + @PostMapping("/preview") + public ResponseEntity> previewData(@RequestBody IngestionRequest request) { + Map response = new HashMap<>(); + + try { + List previewData = dataIngestionService.previewData(request, 100); + response.put("success", true); + response.put("data", previewData); + return ResponseEntity.ok(response); + } catch (SQLException | IOException | CsvValidationException e) { + log.error("Error generating preview", e); + response.put("success", false); + response.put("message", "Error generating preview: " + e.getMessage()); + return ResponseEntity.badRequest().body(response); + } + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/controller/FileController.java b/backend/src/main/java/com/zeotap/dataingestion/controller/FileController.java new file mode 100644 index 000000000..5d70a7787 --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/controller/FileController.java @@ -0,0 +1,90 @@ +package com.zeotap.dataingestion.controller; + +import com.opencsv.exceptions.CsvValidationException; +import com.zeotap.dataingestion.model.FlatFileConfig; +import com.zeotap.dataingestion.model.TableInfo; +import com.zeotap.dataingestion.service.FlatFileService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.Resource; +import org.springframework.core.io.UrlResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api") +@RequiredArgsConstructor +@Slf4j +public class FileController { + + private final FlatFileService flatFileService; + + @Value("${app.upload.dir}") + private String uploadDir; + + @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity> uploadFile( + @RequestParam("file") MultipartFile file, + @RequestParam("delimiter") String delimiter, + @RequestParam("hasHeader") boolean hasHeader) { + + Map response = new HashMap<>(); + + try { + FlatFileConfig config = new FlatFileConfig(); + config.setDelimiter(delimiter); + config.setHasHeader(hasHeader); + + TableInfo tableInfo = flatFileService.processUploadedFile(file, config); + + response.put("success", true); + response.put("message", "File uploaded successfully"); + response.put("filePath", config.getFilePath()); + response.put("schema", tableInfo); + + return ResponseEntity.ok(response); + } catch (IOException | CsvValidationException e) { + log.error("Error processing uploaded file", e); + response.put("success", false); + response.put("message", "Error processing file: " + e.getMessage()); + return ResponseEntity.badRequest().body(response); + } + } + + @GetMapping("/download/{fileName:.+}") + public ResponseEntity downloadFile(@PathVariable String fileName) { + try { + Path filePath = Paths.get(uploadDir).resolve(fileName); + Resource resource = new UrlResource(filePath.toUri()); + + if (resource.exists() && resource.isReadable()) { + return ResponseEntity.ok() + .contentType(MediaType.APPLICATION_OCTET_STREAM) + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"") + .body(resource); + } else { + return ResponseEntity.notFound().build(); + } + } catch (MalformedURLException e) { + log.error("Error downloading file", e); + return ResponseEntity.badRequest().build(); + } + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/model/ClickHouseConfig.java b/backend/src/main/java/com/zeotap/dataingestion/model/ClickHouseConfig.java new file mode 100644 index 000000000..82364c4a0 --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/model/ClickHouseConfig.java @@ -0,0 +1,13 @@ +package com.zeotap.dataingestion.model; + +import lombok.Data; + +@Data +public class ClickHouseConfig { + private String host; + private int port; + private String database; + private String user; + private String jwtToken; + private boolean secure; // Whether to use HTTPS or HTTP +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/model/FlatFileConfig.java b/backend/src/main/java/com/zeotap/dataingestion/model/FlatFileConfig.java new file mode 100644 index 000000000..0a6ac09a1 --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/model/FlatFileConfig.java @@ -0,0 +1,11 @@ +package com.zeotap.dataingestion.model; + +import lombok.Data; + +@Data +public class FlatFileConfig { + private String delimiter; + private boolean hasHeader; + private String filePath; // For uploading to ClickHouse + private String fileName; // For exporting from ClickHouse +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/model/IngestionRequest.java b/backend/src/main/java/com/zeotap/dataingestion/model/IngestionRequest.java new file mode 100644 index 000000000..505e0c84c --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/model/IngestionRequest.java @@ -0,0 +1,20 @@ +package com.zeotap.dataingestion.model; + +import lombok.Data; + +import java.util.List; + +@Data +public class IngestionRequest { + private String source; // "clickhouse" or "flatfile" + private String target; // "clickhouse" or "flatfile" + + private ClickHouseConfig clickHouseConfig; + private FlatFileConfig flatFileConfig; + + private List tables; // Selected tables with columns + + // For multi-table join (bonus feature) + private String joinCondition; + private boolean useJoin; +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/model/IngestionResponse.java b/backend/src/main/java/com/zeotap/dataingestion/model/IngestionResponse.java new file mode 100644 index 000000000..12b07eab7 --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/model/IngestionResponse.java @@ -0,0 +1,17 @@ +package com.zeotap.dataingestion.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class IngestionResponse { + private boolean success; + private String message; + private long totalRecords; + private String fileName; // For flat file ingestion +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/model/TableColumn.java b/backend/src/main/java/com/zeotap/dataingestion/model/TableColumn.java new file mode 100644 index 000000000..23fcd3bd8 --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/model/TableColumn.java @@ -0,0 +1,14 @@ +package com.zeotap.dataingestion.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TableColumn { + private String name; + private String type; + private boolean selected; // Whether the column is selected for ingestion +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/model/TableInfo.java b/backend/src/main/java/com/zeotap/dataingestion/model/TableInfo.java new file mode 100644 index 000000000..0e1e001a0 --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/model/TableInfo.java @@ -0,0 +1,16 @@ +package com.zeotap.dataingestion.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class TableInfo { + private String name; + private List columns; + private boolean selected; // For multi-table functionality +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/service/ClickHouseService.java b/backend/src/main/java/com/zeotap/dataingestion/service/ClickHouseService.java new file mode 100644 index 000000000..6db40ae51 --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/service/ClickHouseService.java @@ -0,0 +1,168 @@ +package com.zeotap.dataingestion.service; + +import com.zeotap.dataingestion.model.ClickHouseConfig; +import com.zeotap.dataingestion.model.TableColumn; +import com.zeotap.dataingestion.model.TableInfo; +import com.zeotap.dataingestion.util.ClickHouseUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +@Slf4j +public class ClickHouseService { + + private final ClickHouseUtil clickHouseUtil; + + /** + * Tests connection to the ClickHouse database + */ + public boolean testConnection(ClickHouseConfig config) { + try (Connection connection = clickHouseUtil.createConnection(config)) { + return connection.isValid(5); // Test if the connection is valid with 5 second timeout + } catch (SQLException e) { + log.error("Failed to connect to ClickHouse", e); + return false; + } + } + + /** + * Gets all tables from the ClickHouse database + */ + public List getAllTables(ClickHouseConfig config) throws SQLException { + try (Connection connection = clickHouseUtil.createConnection(config)) { + return clickHouseUtil.getAllTablesInfo(connection); + } + } + + /** + * Gets a preview of data from a ClickHouse table + */ + public List previewData(ClickHouseConfig config, List tables, String joinCondition, boolean useJoin, int limit) throws SQLException { + try (Connection connection = clickHouseUtil.createConnection(config)) { + String sql = clickHouseUtil.buildQuery(tables, joinCondition, useJoin) + " LIMIT " + limit; + List result = new ArrayList<>(); + + try (Statement statement = connection.createStatement(); + ResultSet rs = statement.executeQuery(sql)) { + + int columnCount = rs.getMetaData().getColumnCount(); + + // Add header row with column names + String[] header = new String[columnCount]; + for (int i = 1; i <= columnCount; i++) { + header[i - 1] = rs.getMetaData().getColumnName(i); + } + result.add(header); + + // Add data rows + while (rs.next()) { + String[] row = new String[columnCount]; + for (int i = 1; i <= columnCount; i++) { + row[i - 1] = rs.getString(i); + } + result.add(row); + } + } + + return result; + } + } + + /** + * Executes a query and returns all results + */ + public List executeQuery(ClickHouseConfig config, String query) throws SQLException { + try (Connection connection = clickHouseUtil.createConnection(config); + Statement statement = connection.createStatement(); + ResultSet rs = statement.executeQuery(query)) { + + List result = new ArrayList<>(); + int columnCount = rs.getMetaData().getColumnCount(); + + // Add header row with column names + String[] header = new String[columnCount]; + for (int i = 1; i <= columnCount; i++) { + header[i - 1] = rs.getMetaData().getColumnName(i); + } + result.add(header); + + // Add data rows + while (rs.next()) { + String[] row = new String[columnCount]; + for (int i = 1; i <= columnCount; i++) { + row[i - 1] = rs.getString(i); + } + result.add(row); + } + + return result; + } + } + + /** + * Inserts data into a ClickHouse table + */ + public int insertData(ClickHouseConfig config, String tableName, List columns, List data) throws SQLException { + try (Connection connection = clickHouseUtil.createConnection(config)) { + // Check if the table exists, create if not + clickHouseUtil.createTable(connection, tableName, columns); + + List columnsToInsert = new ArrayList<>(); + for (TableColumn column : columns) { + if (column.isSelected()) { + columnsToInsert.add(column.getName()); + } + } + + StringBuilder sqlBuilder = new StringBuilder("INSERT INTO ") + .append(tableName) + .append(" (") + .append(String.join(", ", columnsToInsert)) + .append(") VALUES (") + .append("?, ".repeat(columnsToInsert.size() - 1)) + .append("?)"); + + String sql = sqlBuilder.toString(); + int headerOffset = 0; + + // If the first row is a header, skip it + if (data.size() > 0 && data.get(0).length == columnsToInsert.size()) { + headerOffset = 1; + } + + int rowsInserted = 0; + try (PreparedStatement ps = connection.prepareStatement(sql)) { + // Batch insert for better performance + for (int i = headerOffset; i < data.size(); i++) { + String[] row = data.get(i); + + for (int j = 0; j < columnsToInsert.size(); j++) { + ps.setString(j + 1, j < row.length ? row[j] : null); + } + + ps.addBatch(); + rowsInserted++; + + // Execute in batches of 1000 + if (i % 1000 == 0) { + ps.executeBatch(); + } + } + + ps.executeBatch(); // Execute remaining items + } + + return rowsInserted; + } + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/service/DataIngestionService.java b/backend/src/main/java/com/zeotap/dataingestion/service/DataIngestionService.java new file mode 100644 index 000000000..6e9a0ab90 --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/service/DataIngestionService.java @@ -0,0 +1,153 @@ +package com.zeotap.dataingestion.service; + +import com.opencsv.exceptions.CsvValidationException; +import com.zeotap.dataingestion.model.ClickHouseConfig; +import com.zeotap.dataingestion.model.FlatFileConfig; +import com.zeotap.dataingestion.model.IngestionRequest; +import com.zeotap.dataingestion.model.IngestionResponse; +import com.zeotap.dataingestion.model.TableColumn; +import com.zeotap.dataingestion.model.TableInfo; +import com.zeotap.dataingestion.util.ClickHouseUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +@Slf4j +public class DataIngestionService { + + private final ClickHouseService clickHouseService; + private final FlatFileService flatFileService; + private final ClickHouseUtil clickHouseUtil; + + /** + * Performs data ingestion based on the request + */ + public IngestionResponse ingestData(IngestionRequest request) { + try { + // Extract source and target from the request + String source = request.getSource(); + String target = request.getTarget(); + + if ("clickhouse".equalsIgnoreCase(source) && "flatfile".equalsIgnoreCase(target)) { + return ingestFromClickHouseToFlatFile(request); + } else if ("flatfile".equalsIgnoreCase(source) && "clickhouse".equalsIgnoreCase(target)) { + return ingestFromFlatFileToClickHouse(request); + } else { + return IngestionResponse.builder() + .success(false) + .message("Invalid source or target. Must be 'clickhouse' or 'flatfile'.") + .build(); + } + } catch (Exception e) { + log.error("Error during data ingestion", e); + return IngestionResponse.builder() + .success(false) + .message("Error during ingestion: " + e.getMessage()) + .build(); + } + } + + /** + * Ingest data from ClickHouse to Flat File + */ + private IngestionResponse ingestFromClickHouseToFlatFile(IngestionRequest request) throws SQLException, IOException { + ClickHouseConfig clickHouseConfig = request.getClickHouseConfig(); + FlatFileConfig flatFileConfig = request.getFlatFileConfig(); + List tables = request.getTables(); + String joinCondition = request.getJoinCondition(); + boolean useJoin = request.isUseJoin(); + + // Build the SQL query based on selected tables and columns + String query = clickHouseUtil.buildQuery(tables, joinCondition, useJoin); + + // Execute the query + List data = clickHouseService.executeQuery(clickHouseConfig, query); + + // Write data to CSV file + String filePath = flatFileService.writeData(data, flatFileConfig); + String downloadLink = flatFileService.createDownloadLink(filePath); + + return IngestionResponse.builder() + .success(true) + .message("Successfully exported data to " + filePath) + .totalRecords(data.size() - 1) // Subtract header row + .fileName(downloadLink) + .build(); + } + + /** + * Ingest data from Flat File to ClickHouse + */ + private IngestionResponse ingestFromFlatFileToClickHouse(IngestionRequest request) throws SQLException, IOException, CsvValidationException { + ClickHouseConfig clickHouseConfig = request.getClickHouseConfig(); + FlatFileConfig flatFileConfig = request.getFlatFileConfig(); + List tables = request.getTables(); + + if (tables == null || tables.isEmpty() || !tables.get(0).isSelected()) { + return IngestionResponse.builder() + .success(false) + .message("No table selected for ingestion") + .build(); + } + + TableInfo tableInfo = tables.get(0); + String tableName = tableInfo.getName(); + List columns = tableInfo.getColumns(); + + // Get selected column indices + List selectedColumnIndices = new ArrayList<>(); + for (int i = 0; i < columns.size(); i++) { + if (columns.get(i).isSelected()) { + selectedColumnIndices.add(i); + } + } + + // Read data from flat file + List data = flatFileService.readData(flatFileConfig.getFilePath(), flatFileConfig, selectedColumnIndices); + + // Filter columns to only selected ones + List selectedColumns = columns.stream() + .filter(TableColumn::isSelected) + .collect(Collectors.toList()); + + // Insert data into ClickHouse + int rowsInserted = clickHouseService.insertData(clickHouseConfig, tableName, selectedColumns, data); + + return IngestionResponse.builder() + .success(true) + .message("Successfully imported " + rowsInserted + " records to table " + tableName) + .totalRecords(rowsInserted) + .build(); + } + + /** + * Get a preview of the data to be ingested + */ + public List previewData(IngestionRequest request, int limit) throws SQLException, IOException, CsvValidationException { + String source = request.getSource(); + + if ("clickhouse".equalsIgnoreCase(source)) { + return clickHouseService.previewData( + request.getClickHouseConfig(), + request.getTables(), + request.getJoinCondition(), + request.isUseJoin(), + limit); + } else if ("flatfile".equalsIgnoreCase(source)) { + return flatFileService.previewData( + request.getFlatFileConfig().getFilePath(), + request.getFlatFileConfig(), + limit); + } else { + throw new IllegalArgumentException("Invalid source: " + source); + } + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/service/FlatFileService.java b/backend/src/main/java/com/zeotap/dataingestion/service/FlatFileService.java new file mode 100644 index 000000000..b8d7888e9 --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/service/FlatFileService.java @@ -0,0 +1,92 @@ +package com.zeotap.dataingestion.service; + +import com.opencsv.exceptions.CsvValidationException; +import com.zeotap.dataingestion.model.FlatFileConfig; +import com.zeotap.dataingestion.model.TableInfo; +import com.zeotap.dataingestion.util.FlatFileUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +@Slf4j +public class FlatFileService { + + private final FlatFileUtil flatFileUtil; + + /** + * Saves an uploaded file and extracts its schema + */ + public TableInfo processUploadedFile(MultipartFile file, FlatFileConfig config) throws IOException, CsvValidationException { + String filePath = flatFileUtil.saveUploadedFile(file); + config.setFilePath(filePath); + return flatFileUtil.extractSchema(filePath, config); + } + + /** + * Gets a preview of data from a flat file + */ + public List previewData(String filePath, FlatFileConfig config, int limit) throws IOException, CsvValidationException { + List allData = flatFileUtil.readFromCSV(filePath, config); + + // Return only up to the limit + List preview = new ArrayList<>(); + int count = 0; + for (String[] row : allData) { + preview.add(row); + count++; + if (count >= limit) { + break; + } + } + + return preview; + } + + /** + * Reads data from a flat file, optionally filtering by selected columns + */ + public List readData(String filePath, FlatFileConfig config, List selectedColumnIndices) throws IOException, CsvValidationException { + List allData = flatFileUtil.readFromCSV(filePath, config); + + // If no column selection, return all data + if (selectedColumnIndices == null || selectedColumnIndices.isEmpty()) { + return allData; + } + + // Filter data by selected columns + List filteredData = new ArrayList<>(); + for (String[] row : allData) { + String[] filteredRow = new String[selectedColumnIndices.size()]; + for (int i = 0; i < selectedColumnIndices.size(); i++) { + int columnIndex = selectedColumnIndices.get(i); + if (columnIndex < row.length) { + filteredRow[i] = row[columnIndex]; + } + } + filteredData.add(filteredRow); + } + + return filteredData; + } + + /** + * Writes data to a flat file + */ + public String writeData(List data, FlatFileConfig config) throws IOException { + return flatFileUtil.writeToCSV(data, config); + } + + /** + * Creates a download link for the exported file + */ + public String createDownloadLink(String filePath) { + return flatFileUtil.createDownloadLink(filePath); + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/util/ClickHouseUtil.java b/backend/src/main/java/com/zeotap/dataingestion/util/ClickHouseUtil.java new file mode 100644 index 000000000..48d49cf1d --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/util/ClickHouseUtil.java @@ -0,0 +1,188 @@ +package com.zeotap.dataingestion.util; + +import com.clickhouse.client.ClickHouseNode; +import com.clickhouse.client.ClickHouseProtocol; +import com.clickhouse.jdbc.ClickHouseDataSource; +import com.zeotap.dataingestion.model.ClickHouseConfig; +import com.zeotap.dataingestion.model.TableColumn; +import com.zeotap.dataingestion.model.TableInfo; +import org.springframework.stereotype.Component; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +@Component +public class ClickHouseUtil { + + /** + * Creates a ClickHouse JDBC connection with JWT token authentication + */ + public Connection createConnection(ClickHouseConfig config) throws SQLException { + Properties properties = new Properties(); + properties.setProperty("user", config.getUser()); + + // Use JWT token for authentication if provided + if (config.getJwtToken() != null && !config.getJwtToken().isEmpty()) { + properties.setProperty("token", config.getJwtToken()); + properties.setProperty("auth", "Bearer"); + } + + // Build the JDBC URL + String protocol = config.isSecure() ? "https" : "http"; + String jdbcUrl = String.format("jdbc:clickhouse:%s://%s:%d/%s", + protocol, config.getHost(), config.getPort(), config.getDatabase()); + + ClickHouseDataSource dataSource = new ClickHouseDataSource(jdbcUrl, properties); + return dataSource.getConnection(); + } + + /** + * Gets a list of all tables in the ClickHouse database + */ + public List getTableNames(Connection connection) throws SQLException { + List tableNames = new ArrayList<>(); + DatabaseMetaData metaData = connection.getMetaData(); + + try (ResultSet tables = metaData.getTables(null, null, "%", new String[]{"TABLE"})) { + while (tables.next()) { + tableNames.add(tables.getString("TABLE_NAME")); + } + } + + return tableNames; + } + + /** + * Gets the column information for a specific table + */ + public TableInfo getTableInfo(Connection connection, String tableName) throws SQLException { + List columns = new ArrayList<>(); + DatabaseMetaData metaData = connection.getMetaData(); + + try (ResultSet columnsRs = metaData.getColumns(null, null, tableName, "%")) { + while (columnsRs.next()) { + String columnName = columnsRs.getString("COLUMN_NAME"); + String columnType = columnsRs.getString("TYPE_NAME"); + + TableColumn column = new TableColumn(columnName, columnType, true); + columns.add(column); + } + } + + return new TableInfo(tableName, columns, false); + } + + /** + * Gets all tables with their column information + */ + public List getAllTablesInfo(Connection connection) throws SQLException { + List tableInfos = new ArrayList<>(); + List tableNames = getTableNames(connection); + + for (String tableName : tableNames) { + TableInfo tableInfo = getTableInfo(connection, tableName); + tableInfos.add(tableInfo); + } + + return tableInfos; + } + + /** + * Builds a SQL query based on selected tables and columns + */ + public String buildQuery(List tables, String joinCondition, boolean useJoin) { + StringBuilder sql = new StringBuilder("SELECT "); + List selectedColumns = new ArrayList<>(); + + // If we're joining multiple tables, we need to prefix columns with table names + boolean isMultiTable = tables.stream().filter(TableInfo::isSelected).count() > 1; + + for (TableInfo table : tables) { + if (!table.isSelected()) continue; + + for (TableColumn column : table.getColumns()) { + if (column.isSelected()) { + if (isMultiTable) { + selectedColumns.add(String.format("%s.%s", table.getName(), column.getName())); + } else { + selectedColumns.add(column.getName()); + } + } + } + } + + sql.append(String.join(", ", selectedColumns)); + sql.append(" FROM "); + + if (!useJoin || tables.stream().filter(TableInfo::isSelected).count() <= 1) { + // Single table query + sql.append(tables.stream() + .filter(TableInfo::isSelected) + .findFirst() + .map(TableInfo::getName) + .orElse("")); + } else { + // Multi-table query with join + List tableNames = tables.stream() + .filter(TableInfo::isSelected) + .map(TableInfo::getName) + .toList(); + + sql.append(tableNames.get(0)); + sql.append(" JOIN "); + sql.append(String.join(" JOIN ", tableNames.subList(1, tableNames.size()))); + + if (joinCondition != null && !joinCondition.isEmpty()) { + sql.append(" ON ").append(joinCondition); + } + } + + return sql.toString(); + } + + /** + * Creates a table in ClickHouse based on column definitions + */ + public void createTable(Connection connection, String tableName, List columns) throws SQLException { + StringBuilder sql = new StringBuilder("CREATE TABLE IF NOT EXISTS ") + .append(tableName) + .append(" ("); + + List columnDefinitions = new ArrayList<>(); + for (TableColumn column : columns) { + columnDefinitions.add(column.getName() + " " + mapToClickHouseType(column.getType())); + } + + sql.append(String.join(", ", columnDefinitions)) + .append(") ENGINE = MergeTree() ORDER BY tuple()"); + + try (Statement statement = connection.createStatement()) { + statement.execute(sql.toString()); + } + } + + /** + * Maps common data types to ClickHouse types + */ + private String mapToClickHouseType(String type) { + // Simplistic mapping, can be expanded based on requirements + type = type.toUpperCase(); + return switch (type) { + case "VARCHAR", "STRING", "TEXT", "CHAR" -> "String"; + case "INT", "INTEGER", "INT32" -> "Int32"; + case "BIGINT", "INT64" -> "Int64"; + case "FLOAT", "FLOAT32" -> "Float32"; + case "DOUBLE", "FLOAT64" -> "Float64"; + case "BOOLEAN", "BOOL" -> "UInt8"; + case "DATE" -> "Date"; + case "DATETIME" -> "DateTime"; + default -> "String"; // Default to String for unknown types + }; + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/zeotap/dataingestion/util/FlatFileUtil.java b/backend/src/main/java/com/zeotap/dataingestion/util/FlatFileUtil.java new file mode 100644 index 000000000..5d5a96906 --- /dev/null +++ b/backend/src/main/java/com/zeotap/dataingestion/util/FlatFileUtil.java @@ -0,0 +1,142 @@ +package com.zeotap.dataingestion.util; + +import com.opencsv.CSVParserBuilder; +import com.opencsv.CSVReader; +import com.opencsv.CSVReaderBuilder; +import com.opencsv.CSVWriter; +import com.opencsv.exceptions.CsvValidationException; +import com.zeotap.dataingestion.model.FlatFileConfig; +import com.zeotap.dataingestion.model.TableColumn; +import com.zeotap.dataingestion.model.TableInfo; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Component +public class FlatFileUtil { + + @Value("${app.upload.dir}") + private String uploadDir; + + /** + * Saves an uploaded file to the temporary directory + */ + public String saveUploadedFile(MultipartFile file) throws IOException { + Path dirPath = Paths.get(uploadDir); + if (!Files.exists(dirPath)) { + Files.createDirectories(dirPath); + } + + String fileName = file.getOriginalFilename(); + Path filePath = dirPath.resolve(fileName); + + file.transferTo(filePath.toFile()); + return filePath.toString(); + } + + /** + * Extracts schema information from a flat file + */ + public TableInfo extractSchema(String filePath, FlatFileConfig config) throws IOException, CsvValidationException { + char delimiter = config.getDelimiter().charAt(0); + + try (CSVReader reader = new CSVReaderBuilder(new FileReader(filePath)) + .withCSVParser(new CSVParserBuilder().withSeparator(delimiter).build()) + .build()) { + + String[] header; + if (config.isHasHeader()) { + header = reader.readNext(); + } else { + // If no header, read first row and generate column names + header = reader.readNext(); + for (int i = 0; i < header.length; i++) { + header[i] = "column" + (i + 1); + } + } + + List columns = new ArrayList<>(); + for (String columnName : header) { + // Default to String type for all columns from flat file + TableColumn column = new TableColumn(columnName, "String", true); + columns.add(column); + } + + return new TableInfo("imported_data", columns, true); + } + } + + /** + * Writes data to a CSV file + */ + public String writeToCSV(List data, FlatFileConfig config) throws IOException { + Path dirPath = Paths.get(uploadDir); + if (!Files.exists(dirPath)) { + Files.createDirectories(dirPath); + } + + String fileName = config.getFileName(); + if (fileName == null || fileName.isEmpty()) { + fileName = "export_" + System.currentTimeMillis() + ".csv"; + } + + Path filePath = dirPath.resolve(fileName); + + try (CSVWriter writer = new CSVWriter(new FileWriter(filePath.toFile()), + config.getDelimiter().charAt(0), + CSVWriter.DEFAULT_QUOTE_CHARACTER, + CSVWriter.DEFAULT_ESCAPE_CHARACTER, + CSVWriter.DEFAULT_LINE_END)) { + + writer.writeAll(data); + } + + return filePath.toString(); + } + + /** + * Reads data from a CSV file + */ + public List readFromCSV(String filePath, FlatFileConfig config) throws IOException, CsvValidationException { + char delimiter = config.getDelimiter().charAt(0); + + try (CSVReader reader = new CSVReaderBuilder(new FileReader(filePath)) + .withCSVParser(new CSVParserBuilder().withSeparator(delimiter).build()) + .build()) { + + List data = new ArrayList<>(); + String[] nextLine; + while ((nextLine = reader.readNext()) != null) { + data.add(nextLine); + } + + return data; + } + } + + /** + * Gets the file path for a multipart file + */ + public File getFile(MultipartFile file) throws IOException { + return new File(saveUploadedFile(file)); + } + + /** + * Creates a download link for a file + */ + public String createDownloadLink(String filePath) { + File file = new File(filePath); + return "/api/download/" + file.getName(); + } +} \ No newline at end of file diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties new file mode 100644 index 000000000..2f8fcf85f --- /dev/null +++ b/backend/src/main/resources/application.properties @@ -0,0 +1,12 @@ +# Server configuration +server.port=8080 + +# Logging +logging.level.com.zeotap=DEBUG + +# File upload settings +spring.servlet.multipart.max-file-size=100MB +spring.servlet.multipart.max-request-size=100MB + +# Temporary file location for uploads +app.upload.dir=${java.io.tmpdir}/data-ingestion/uploads/ \ No newline at end of file diff --git a/checkstyle.xml b/checkstyle.xml deleted file mode 100644 index 6544e1e5b..000000000 --- a/checkstyle.xml +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/frontend/.next/app-build-manifest.json b/frontend/.next/app-build-manifest.json new file mode 100644 index 000000000..e43b4628e --- /dev/null +++ b/frontend/.next/app-build-manifest.json @@ -0,0 +1,15 @@ +{ + "pages": { + "/page": [ + "static/chunks/webpack.js", + "static/chunks/main-app.js", + "static/chunks/app/page.js" + ], + "/layout": [ + "static/chunks/webpack.js", + "static/chunks/main-app.js", + "static/css/app/layout.css", + "static/chunks/app/layout.js" + ] + } +} \ No newline at end of file diff --git a/frontend/.next/build-manifest.json b/frontend/.next/build-manifest.json new file mode 100644 index 000000000..b4e9156a7 --- /dev/null +++ b/frontend/.next/build-manifest.json @@ -0,0 +1,30 @@ +{ + "polyfillFiles": [ + "static/chunks/polyfills.js" + ], + "devFiles": [ + "static/chunks/react-refresh.js" + ], + "ampDevFiles": [], + "lowPriorityFiles": [ + "static/development/_buildManifest.js", + "static/development/_ssgManifest.js" + ], + "rootMainFiles": [ + "static/chunks/webpack.js", + "static/chunks/main-app.js" + ], + "pages": { + "/_app": [ + "static/chunks/webpack.js", + "static/chunks/main.js", + "static/chunks/pages/_app.js" + ], + "/_error": [ + "static/chunks/webpack.js", + "static/chunks/main.js", + "static/chunks/pages/_error.js" + ] + }, + "ampFirstPages": [] +} \ No newline at end of file diff --git a/frontend/.next/cache/webpack/client-development/0.pack.gz b/frontend/.next/cache/webpack/client-development/0.pack.gz new file mode 100644 index 000000000..6afdebb81 Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/0.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/1.pack.gz b/frontend/.next/cache/webpack/client-development/1.pack.gz new file mode 100644 index 000000000..098398955 Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/1.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/10.pack.gz b/frontend/.next/cache/webpack/client-development/10.pack.gz new file mode 100644 index 000000000..e6df661b0 Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/10.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/11.pack.gz b/frontend/.next/cache/webpack/client-development/11.pack.gz new file mode 100644 index 000000000..383edb18b Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/11.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/12.pack.gz b/frontend/.next/cache/webpack/client-development/12.pack.gz new file mode 100644 index 000000000..63c43fda0 Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/12.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/13.pack.gz b/frontend/.next/cache/webpack/client-development/13.pack.gz new file mode 100644 index 000000000..f1de8d375 Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/13.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/14.pack.gz b/frontend/.next/cache/webpack/client-development/14.pack.gz new file mode 100644 index 000000000..bf21905d0 Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/14.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/2.pack.gz b/frontend/.next/cache/webpack/client-development/2.pack.gz new file mode 100644 index 000000000..5a624b31f Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/2.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/3.pack.gz b/frontend/.next/cache/webpack/client-development/3.pack.gz new file mode 100644 index 000000000..3a75dac99 Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/3.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/4.pack.gz b/frontend/.next/cache/webpack/client-development/4.pack.gz new file mode 100644 index 000000000..bfa311067 Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/4.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/5.pack.gz b/frontend/.next/cache/webpack/client-development/5.pack.gz new file mode 100644 index 000000000..561815e0f Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/5.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/6.pack.gz b/frontend/.next/cache/webpack/client-development/6.pack.gz new file mode 100644 index 000000000..599b1aa4e Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/6.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/7.pack.gz b/frontend/.next/cache/webpack/client-development/7.pack.gz new file mode 100644 index 000000000..5f2e01ba2 Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/7.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/8.pack.gz b/frontend/.next/cache/webpack/client-development/8.pack.gz new file mode 100644 index 000000000..aa785ba20 Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/8.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/9.pack.gz b/frontend/.next/cache/webpack/client-development/9.pack.gz new file mode 100644 index 000000000..0fef2712f Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/9.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/index.pack.gz b/frontend/.next/cache/webpack/client-development/index.pack.gz new file mode 100644 index 000000000..c9501a0fe Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/index.pack.gz differ diff --git a/frontend/.next/cache/webpack/client-development/index.pack.gz.old b/frontend/.next/cache/webpack/client-development/index.pack.gz.old new file mode 100644 index 000000000..58f97930a Binary files /dev/null and b/frontend/.next/cache/webpack/client-development/index.pack.gz.old differ diff --git a/frontend/.next/cache/webpack/server-development/0.pack.gz b/frontend/.next/cache/webpack/server-development/0.pack.gz new file mode 100644 index 000000000..b21101a97 Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/0.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/1.pack.gz b/frontend/.next/cache/webpack/server-development/1.pack.gz new file mode 100644 index 000000000..b59ce5c25 Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/1.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/10.pack.gz b/frontend/.next/cache/webpack/server-development/10.pack.gz new file mode 100644 index 000000000..14bcafb41 Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/10.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/2.pack.gz b/frontend/.next/cache/webpack/server-development/2.pack.gz new file mode 100644 index 000000000..af704afea Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/2.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/3.pack.gz b/frontend/.next/cache/webpack/server-development/3.pack.gz new file mode 100644 index 000000000..21de3c0be Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/3.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/4.pack.gz b/frontend/.next/cache/webpack/server-development/4.pack.gz new file mode 100644 index 000000000..98ceb627c Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/4.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/5.pack.gz b/frontend/.next/cache/webpack/server-development/5.pack.gz new file mode 100644 index 000000000..ba411c010 Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/5.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/6.pack.gz b/frontend/.next/cache/webpack/server-development/6.pack.gz new file mode 100644 index 000000000..0fdc9840b Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/6.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/7.pack.gz b/frontend/.next/cache/webpack/server-development/7.pack.gz new file mode 100644 index 000000000..9a5f168e0 Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/7.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/8.pack.gz b/frontend/.next/cache/webpack/server-development/8.pack.gz new file mode 100644 index 000000000..ed486d518 Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/8.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/9.pack.gz b/frontend/.next/cache/webpack/server-development/9.pack.gz new file mode 100644 index 000000000..14b9b59be Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/9.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/index.pack.gz b/frontend/.next/cache/webpack/server-development/index.pack.gz new file mode 100644 index 000000000..e1a3dab0c Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/index.pack.gz differ diff --git a/frontend/.next/cache/webpack/server-development/index.pack.gz.old b/frontend/.next/cache/webpack/server-development/index.pack.gz.old new file mode 100644 index 000000000..c408292d4 Binary files /dev/null and b/frontend/.next/cache/webpack/server-development/index.pack.gz.old differ diff --git a/frontend/.next/package.json b/frontend/.next/package.json new file mode 100644 index 000000000..7156107e3 --- /dev/null +++ b/frontend/.next/package.json @@ -0,0 +1 @@ +{"type": "commonjs"} \ No newline at end of file diff --git a/frontend/.next/react-loadable-manifest.json b/frontend/.next/react-loadable-manifest.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/frontend/.next/react-loadable-manifest.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/frontend/.next/server/_error.js b/frontend/.next/server/_error.js new file mode 100644 index 000000000..77d59b47c --- /dev/null +++ b/frontend/.next/server/_error.js @@ -0,0 +1,76 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(() => { +var exports = {}; +exports.id = "/_error"; +exports.ids = ["/_error"]; +exports.modules = { + +/***/ "./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!": +/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D! ***! + \*******************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getServerSideProps: () => (/* binding */ getServerSideProps),\n/* harmony export */ getStaticPaths: () => (/* binding */ getStaticPaths),\n/* harmony export */ getStaticProps: () => (/* binding */ getStaticProps),\n/* harmony export */ reportWebVitals: () => (/* binding */ reportWebVitals),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ unstable_getServerProps: () => (/* binding */ unstable_getServerProps),\n/* harmony export */ unstable_getServerSideProps: () => (/* binding */ unstable_getServerSideProps),\n/* harmony export */ unstable_getStaticParams: () => (/* binding */ unstable_getStaticParams),\n/* harmony export */ unstable_getStaticPaths: () => (/* binding */ unstable_getStaticPaths),\n/* harmony export */ unstable_getStaticProps: () => (/* binding */ unstable_getStaticProps)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/pages/module.compiled */ \"./node_modules/next/dist/server/future/route-modules/pages/module.compiled.js\");\n/* harmony import */ var next_dist_server_future_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/build/templates/helpers */ \"./node_modules/next/dist/build/templates/helpers.js\");\n/* harmony import */ var next_dist_pages_document__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/pages/_document */ \"./node_modules/next/dist/pages/_document.js\");\n/* harmony import */ var next_dist_pages_document__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_pages_document__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var next_dist_pages_app__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! next/dist/pages/_app */ \"./node_modules/next/dist/pages/_app.js\");\n/* harmony import */ var next_dist_pages_app__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(next_dist_pages_app__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./node_modules\\next\\dist\\pages\\_error.js */ \"./node_modules/next/dist/pages/_error.js\");\n/* harmony import */ var _node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n// Import the app and document modules.\n\n\n// Import the userland code.\n\n// Re-export the component (should be the default export).\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__, \"default\"));\n// Re-export methods.\nconst getStaticProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__, \"getStaticProps\");\nconst getStaticPaths = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__, \"getStaticPaths\");\nconst getServerSideProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__, \"getServerSideProps\");\nconst config = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__, \"config\");\nconst reportWebVitals = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__, \"reportWebVitals\");\n// Re-export legacy methods.\nconst unstable_getStaticProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__, \"unstable_getStaticProps\");\nconst unstable_getStaticPaths = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__, \"unstable_getStaticPaths\");\nconst unstable_getStaticParams = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__, \"unstable_getStaticParams\");\nconst unstable_getServerProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__, \"unstable_getServerProps\");\nconst unstable_getServerSideProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(_node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__, \"unstable_getServerSideProps\");\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_future_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0__.PagesRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.PAGES,\n page: \"/_error\",\n pathname: \"/_error\",\n // The following aren't used in production.\n bundlePath: \"\",\n filename: \"\"\n },\n components: {\n App: (next_dist_pages_app__WEBPACK_IMPORTED_MODULE_4___default()),\n Document: (next_dist_pages_document__WEBPACK_IMPORTED_MODULE_3___default())\n },\n userland: _node_modules_next_dist_pages_error_js__WEBPACK_IMPORTED_MODULE_5__\n});\n\n//# sourceMappingURL=pages.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LXJvdXRlLWxvYWRlci9pbmRleC5qcz9raW5kPVBBR0VTJnBhZ2U9JTJGX2Vycm9yJnByZWZlcnJlZFJlZ2lvbj0mYWJzb2x1dGVQYWdlUGF0aD0uJTJGbm9kZV9tb2R1bGVzJTVDbmV4dCU1Q2Rpc3QlNUNwYWdlcyU1Q19lcnJvci5qcyZhYnNvbHV0ZUFwcFBhdGg9bmV4dCUyRmRpc3QlMkZwYWdlcyUyRl9hcHAmYWJzb2x1dGVEb2N1bWVudFBhdGg9bmV4dCUyRmRpc3QlMkZwYWdlcyUyRl9kb2N1bWVudCZtaWRkbGV3YXJlQ29uZmlnQmFzZTY0PWUzMCUzRCEiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUErRjtBQUNoQztBQUNMO0FBQzFEO0FBQ2lEO0FBQ1Y7QUFDdkM7QUFDeUU7QUFDekU7QUFDQSxpRUFBZSx3RUFBSyxDQUFDLG1FQUFRLFlBQVksRUFBQztBQUMxQztBQUNPLHVCQUF1Qix3RUFBSyxDQUFDLG1FQUFRO0FBQ3JDLHVCQUF1Qix3RUFBSyxDQUFDLG1FQUFRO0FBQ3JDLDJCQUEyQix3RUFBSyxDQUFDLG1FQUFRO0FBQ3pDLGVBQWUsd0VBQUssQ0FBQyxtRUFBUTtBQUM3Qix3QkFBd0Isd0VBQUssQ0FBQyxtRUFBUTtBQUM3QztBQUNPLGdDQUFnQyx3RUFBSyxDQUFDLG1FQUFRO0FBQzlDLGdDQUFnQyx3RUFBSyxDQUFDLG1FQUFRO0FBQzlDLGlDQUFpQyx3RUFBSyxDQUFDLG1FQUFRO0FBQy9DLGdDQUFnQyx3RUFBSyxDQUFDLG1FQUFRO0FBQzlDLG9DQUFvQyx3RUFBSyxDQUFDLG1FQUFRO0FBQ3pEO0FBQ08sd0JBQXdCLHlHQUFnQjtBQUMvQztBQUNBLGNBQWMseUVBQVM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFdBQVc7QUFDWCxnQkFBZ0I7QUFDaEIsS0FBSztBQUNMLFlBQVk7QUFDWixDQUFDOztBQUVEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8/MThlNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYWdlc1JvdXRlTW9kdWxlIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLW1vZHVsZXMvcGFnZXMvbW9kdWxlLmNvbXBpbGVkXCI7XG5pbXBvcnQgeyBSb3V0ZUtpbmQgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUta2luZFwiO1xuaW1wb3J0IHsgaG9pc3QgfSBmcm9tIFwibmV4dC9kaXN0L2J1aWxkL3RlbXBsYXRlcy9oZWxwZXJzXCI7XG4vLyBJbXBvcnQgdGhlIGFwcCBhbmQgZG9jdW1lbnQgbW9kdWxlcy5cbmltcG9ydCBEb2N1bWVudCBmcm9tIFwibmV4dC9kaXN0L3BhZ2VzL19kb2N1bWVudFwiO1xuaW1wb3J0IEFwcCBmcm9tIFwibmV4dC9kaXN0L3BhZ2VzL19hcHBcIjtcbi8vIEltcG9ydCB0aGUgdXNlcmxhbmQgY29kZS5cbmltcG9ydCAqIGFzIHVzZXJsYW5kIGZyb20gXCIuL25vZGVfbW9kdWxlc1xcXFxuZXh0XFxcXGRpc3RcXFxccGFnZXNcXFxcX2Vycm9yLmpzXCI7XG4vLyBSZS1leHBvcnQgdGhlIGNvbXBvbmVudCAoc2hvdWxkIGJlIHRoZSBkZWZhdWx0IGV4cG9ydCkuXG5leHBvcnQgZGVmYXVsdCBob2lzdCh1c2VybGFuZCwgXCJkZWZhdWx0XCIpO1xuLy8gUmUtZXhwb3J0IG1ldGhvZHMuXG5leHBvcnQgY29uc3QgZ2V0U3RhdGljUHJvcHMgPSBob2lzdCh1c2VybGFuZCwgXCJnZXRTdGF0aWNQcm9wc1wiKTtcbmV4cG9ydCBjb25zdCBnZXRTdGF0aWNQYXRocyA9IGhvaXN0KHVzZXJsYW5kLCBcImdldFN0YXRpY1BhdGhzXCIpO1xuZXhwb3J0IGNvbnN0IGdldFNlcnZlclNpZGVQcm9wcyA9IGhvaXN0KHVzZXJsYW5kLCBcImdldFNlcnZlclNpZGVQcm9wc1wiKTtcbmV4cG9ydCBjb25zdCBjb25maWcgPSBob2lzdCh1c2VybGFuZCwgXCJjb25maWdcIik7XG5leHBvcnQgY29uc3QgcmVwb3J0V2ViVml0YWxzID0gaG9pc3QodXNlcmxhbmQsIFwicmVwb3J0V2ViVml0YWxzXCIpO1xuLy8gUmUtZXhwb3J0IGxlZ2FjeSBtZXRob2RzLlxuZXhwb3J0IGNvbnN0IHVuc3RhYmxlX2dldFN0YXRpY1Byb3BzID0gaG9pc3QodXNlcmxhbmQsIFwidW5zdGFibGVfZ2V0U3RhdGljUHJvcHNcIik7XG5leHBvcnQgY29uc3QgdW5zdGFibGVfZ2V0U3RhdGljUGF0aHMgPSBob2lzdCh1c2VybGFuZCwgXCJ1bnN0YWJsZV9nZXRTdGF0aWNQYXRoc1wiKTtcbmV4cG9ydCBjb25zdCB1bnN0YWJsZV9nZXRTdGF0aWNQYXJhbXMgPSBob2lzdCh1c2VybGFuZCwgXCJ1bnN0YWJsZV9nZXRTdGF0aWNQYXJhbXNcIik7XG5leHBvcnQgY29uc3QgdW5zdGFibGVfZ2V0U2VydmVyUHJvcHMgPSBob2lzdCh1c2VybGFuZCwgXCJ1bnN0YWJsZV9nZXRTZXJ2ZXJQcm9wc1wiKTtcbmV4cG9ydCBjb25zdCB1bnN0YWJsZV9nZXRTZXJ2ZXJTaWRlUHJvcHMgPSBob2lzdCh1c2VybGFuZCwgXCJ1bnN0YWJsZV9nZXRTZXJ2ZXJTaWRlUHJvcHNcIik7XG4vLyBDcmVhdGUgYW5kIGV4cG9ydCB0aGUgcm91dGUgbW9kdWxlIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbmV4cG9ydCBjb25zdCByb3V0ZU1vZHVsZSA9IG5ldyBQYWdlc1JvdXRlTW9kdWxlKHtcbiAgICBkZWZpbml0aW9uOiB7XG4gICAgICAgIGtpbmQ6IFJvdXRlS2luZC5QQUdFUyxcbiAgICAgICAgcGFnZTogXCIvX2Vycm9yXCIsXG4gICAgICAgIHBhdGhuYW1lOiBcIi9fZXJyb3JcIixcbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmVuJ3QgdXNlZCBpbiBwcm9kdWN0aW9uLlxuICAgICAgICBidW5kbGVQYXRoOiBcIlwiLFxuICAgICAgICBmaWxlbmFtZTogXCJcIlxuICAgIH0sXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBBcHAsXG4gICAgICAgIERvY3VtZW50XG4gICAgfSxcbiAgICB1c2VybGFuZFxufSk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhZ2VzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!\n"); + +/***/ }), + +/***/ "next/dist/compiled/next-server/pages.runtime.dev.js": +/*!**********************************************************************!*\ + !*** external "next/dist/compiled/next-server/pages.runtime.dev.js" ***! + \**********************************************************************/ +/***/ ((module) => { + +module.exports = require("next/dist/compiled/next-server/pages.runtime.dev.js"); + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "react" ***! + \************************/ +/***/ ((module) => { + +module.exports = require("react"); + +/***/ }), + +/***/ "react/jsx-runtime": +/*!************************************!*\ + !*** external "react/jsx-runtime" ***! + \************************************/ +/***/ ((module) => { + +module.exports = require("react/jsx-runtime"); + +/***/ }), + +/***/ "path": +/*!***********************!*\ + !*** external "path" ***! + \***********************/ +/***/ ((module) => { + +module.exports = require("path"); + +/***/ }) + +}; +; + +// load runtime +var __webpack_require__ = require("../webpack-runtime.js"); +__webpack_require__.C(exports); +var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/@swc"], () => (__webpack_exec__("./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"))); +module.exports = __webpack_exports__; + +})(); \ No newline at end of file diff --git a/frontend/.next/server/app-paths-manifest.json b/frontend/.next/server/app-paths-manifest.json new file mode 100644 index 000000000..e234c2edb --- /dev/null +++ b/frontend/.next/server/app-paths-manifest.json @@ -0,0 +1,3 @@ +{ + "/page": "app/page.js" +} \ No newline at end of file diff --git a/frontend/.next/server/app/_not-found_client-reference-manifest.js b/frontend/.next/server/app/_not-found_client-reference-manifest.js new file mode 100644 index 000000000..babe0f416 --- /dev/null +++ b/frontend/.next/server/app/_not-found_client-reference-manifest.js @@ -0,0 +1 @@ +globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_not-found"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/page.tsx":{"*":{"id":"(ssr)/./app/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/layout.tsx":{"*":{"id":"(ssr)/./app/layout.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\static-generation-searchparams-bailout-provider.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\static-generation-searchparams-bailout-provider.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page.tsx":{"id":"(app-pages-browser)/./app/page.tsx","name":"*","chunks":["app/page","static/chunks/app/page.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx":{"id":"(app-pages-browser)/./app/layout.tsx","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false}},"entryCSSFiles":{"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page":[],"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout":["static/css/app/layout.css"],"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\not-found":[]}} \ No newline at end of file diff --git a/frontend/.next/server/app/not-found.js b/frontend/.next/server/app/not-found.js new file mode 100644 index 000000000..0c7098f57 --- /dev/null +++ b/frontend/.next/server/app/not-found.js @@ -0,0 +1,184 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(() => { +var exports = {}; +exports.id = "app/not-found"; +exports.ids = ["app/not-found"]; +exports.modules = { + +/***/ "./action-async-storage.external": +/*!****************************************************************************!*\ + !*** external "next/dist/client/components/action-async-storage.external" ***! + \****************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/action-async-storage.external"); + +/***/ }), + +/***/ "../../client/components/action-async-storage.external": +/*!*******************************************************************************!*\ + !*** external "next/dist/client/components/action-async-storage.external.js" ***! + \*******************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/action-async-storage.external.js"); + +/***/ }), + +/***/ "./request-async-storage.external": +/*!*****************************************************************************!*\ + !*** external "next/dist/client/components/request-async-storage.external" ***! + \*****************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/request-async-storage.external"); + +/***/ }), + +/***/ "../../client/components/request-async-storage.external": +/*!********************************************************************************!*\ + !*** external "next/dist/client/components/request-async-storage.external.js" ***! + \********************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/request-async-storage.external.js"); + +/***/ }), + +/***/ "./static-generation-async-storage.external": +/*!***************************************************************************************!*\ + !*** external "next/dist/client/components/static-generation-async-storage.external" ***! + \***************************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/static-generation-async-storage.external"); + +/***/ }), + +/***/ "../../client/components/static-generation-async-storage.external": +/*!******************************************************************************************!*\ + !*** external "next/dist/client/components/static-generation-async-storage.external.js" ***! + \******************************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/static-generation-async-storage.external.js"); + +/***/ }), + +/***/ "next/dist/compiled/next-server/app-page.runtime.dev.js": +/*!*************************************************************************!*\ + !*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***! + \*************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fnot-found&page=%2Fnot-found&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!": +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fnot-found&page=%2Fnot-found&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlobalError: () => (/* reexport default from dynamic */ next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default.a),\n/* harmony export */ __next_app__: () => (/* binding */ __next_app__),\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ pages: () => (/* binding */ pages),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ tree: () => (/* binding */ tree)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-page/module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?9d97\");\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/client/components/error-boundary */ \"(rsc)/./node_modules/next/dist/client/components/error-boundary.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/server/app-render/entry-base */ \"(rsc)/./node_modules/next/dist/server/app-render/entry-base.js\");\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__) if([\"default\",\"tree\",\"pages\",\"GlobalError\",\"originalPathname\",\"__next_app__\",\"routeModule\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\"TURBOPACK { transition: next-ssr }\";\n\n\n// We inject the tree and pages here so that we can use them in the route\n// module.\nconst tree = {\n children: [\n '',\n {\n children: [\n '__DEFAULT__',\n {},\n {\n defaultPage: [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/parallel-route-default */ \"(rsc)/./node_modules/next/dist/client/components/parallel-route-default.js\", 23)), \"next/dist/client/components/parallel-route-default\"],\n }\n ]\n },\n {\n 'layout': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/layout.tsx */ \"(rsc)/./app/layout.tsx\")), \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\"],\n'not-found': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/not-found-error */ \"(rsc)/./node_modules/next/dist/client/components/not-found-error.js\", 23)), \"next/dist/client/components/not-found-error\"],\n \n }\n ]\n }.children;\nconst pages = [];\n\n\nconst __next_app_require__ = __webpack_require__\nconst __next_app_load_chunk__ = () => Promise.resolve()\nconst originalPathname = \"/not-found\";\nconst __next_app__ = {\n require: __next_app_require__,\n loadChunk: __next_app_load_chunk__\n};\n\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppPageRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_PAGE,\n page: \"/not-found\",\n pathname: \"/not-found\",\n // The following aren't used in production.\n bundlePath: \"\",\n filename: \"\",\n appPaths: []\n },\n userland: {\n loaderTree: tree\n }\n});\n\n//# sourceMappingURL=app-page.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIuanM/bmFtZT1hcHAlMkZub3QtZm91bmQmcGFnZT0lMkZub3QtZm91bmQmYXBwUGF0aHM9JnBhZ2VQYXRoPW5vZGVfbW9kdWxlcyUyRm5leHQlMkZkaXN0JTJGY2xpZW50JTJGY29tcG9uZW50cyUyRm5vdC1mb3VuZC1lcnJvci5qcyZhcHBEaXI9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJTVDYXBwJnBhZ2VFeHRlbnNpb25zPXRzeCZwYWdlRXh0ZW5zaW9ucz10cyZwYWdlRXh0ZW5zaW9ucz1qc3gmcGFnZUV4dGVuc2lvbnM9anMmcm9vdERpcj1DJTNBJTVDVXNlcnMlNUNIQVJTSElUJTIwQkFHR0ElNUNEZXNrdG9wJTVDWmVvVGFwMi4wJTVDZnJvbnRlbmQmaXNEZXY9dHJ1ZSZ0c2NvbmZpZ1BhdGg9dHNjb25maWcuanNvbiZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JnByZWZlcnJlZFJlZ2lvbj0mbWlkZGxld2FyZUNvbmZpZz1lMzAlM0QhIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxhQUFhLHNCQUFzQjtBQUNpRTtBQUNyQztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsZ0NBQWdDLHdPQUF1RjtBQUN2SDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EseUJBQXlCLDRJQUE0RztBQUNySSxvQkFBb0IsME5BQWdGO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUN1QjtBQUM2RDtBQUNwRiw2QkFBNkIsbUJBQW1CO0FBQ2hEO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUN1RDtBQUN2RDtBQUNPLHdCQUF3Qiw4R0FBa0I7QUFDakQ7QUFDQSxjQUFjLHlFQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8/Mjc1MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcIlRVUkJPUEFDSyB7IHRyYW5zaXRpb246IG5leHQtc3NyIH1cIjtcbmltcG9ydCB7IEFwcFBhZ2VSb3V0ZU1vZHVsZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1wYWdlL21vZHVsZS5jb21waWxlZFwiO1xuaW1wb3J0IHsgUm91dGVLaW5kIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLWtpbmRcIjtcbi8vIFdlIGluamVjdCB0aGUgdHJlZSBhbmQgcGFnZXMgaGVyZSBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlbSBpbiB0aGUgcm91dGVcbi8vIG1vZHVsZS5cbmNvbnN0IHRyZWUgPSB7XG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICcnLFxuICAgICAgICB7XG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgJ19fREVGQVVMVF9fJyxcbiAgICAgICAgICB7fSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZWZhdWx0UGFnZTogWygpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3BhcmFsbGVsLXJvdXRlLWRlZmF1bHRcIiksIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3BhcmFsbGVsLXJvdXRlLWRlZmF1bHRcIl0sXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICdsYXlvdXQnOiBbKCkgPT4gaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJDOlxcXFxVc2Vyc1xcXFxIQVJTSElUIEJBR0dBXFxcXERlc2t0b3BcXFxcWmVvVGFwMi4wXFxcXGZyb250ZW5kXFxcXGFwcFxcXFxsYXlvdXQudHN4XCIpLCBcIkM6XFxcXFVzZXJzXFxcXEhBUlNISVQgQkFHR0FcXFxcRGVza3RvcFxcXFxaZW9UYXAyLjBcXFxcZnJvbnRlbmRcXFxcYXBwXFxcXGxheW91dC50c3hcIl0sXG4nbm90LWZvdW5kJzogWygpID0+IGltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvclwiKSwgXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yXCJdLFxuICAgICAgICBcbiAgICAgIH1cbiAgICAgIF1cbiAgICAgIH0uY2hpbGRyZW47XG5jb25zdCBwYWdlcyA9IFtdO1xuZXhwb3J0IHsgdHJlZSwgcGFnZXMgfTtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2xvYmFsRXJyb3IgfSBmcm9tIFwibmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5XCI7XG5jb25zdCBfX25leHRfYXBwX3JlcXVpcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX19cbmNvbnN0IF9fbmV4dF9hcHBfbG9hZF9jaHVua19fID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKClcbmV4cG9ydCBjb25zdCBvcmlnaW5hbFBhdGhuYW1lID0gXCIvbm90LWZvdW5kXCI7XG5leHBvcnQgY29uc3QgX19uZXh0X2FwcF9fID0ge1xuICAgIHJlcXVpcmU6IF9fbmV4dF9hcHBfcmVxdWlyZV9fLFxuICAgIGxvYWRDaHVuazogX19uZXh0X2FwcF9sb2FkX2NodW5rX19cbn07XG5leHBvcnQgKiBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL2VudHJ5LWJhc2VcIjtcbi8vIENyZWF0ZSBhbmQgZXhwb3J0IHRoZSByb3V0ZSBtb2R1bGUgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuZXhwb3J0IGNvbnN0IHJvdXRlTW9kdWxlID0gbmV3IEFwcFBhZ2VSb3V0ZU1vZHVsZSh7XG4gICAgZGVmaW5pdGlvbjoge1xuICAgICAgICBraW5kOiBSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIHBhZ2U6IFwiL25vdC1mb3VuZFwiLFxuICAgICAgICBwYXRobmFtZTogXCIvbm90LWZvdW5kXCIsXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgaW4gcHJvZHVjdGlvbi5cbiAgICAgICAgYnVuZGxlUGF0aDogXCJcIixcbiAgICAgICAgZmlsZW5hbWU6IFwiXCIsXG4gICAgICAgIGFwcFBhdGhzOiBbXVxuICAgIH0sXG4gICAgdXNlcmxhbmQ6IHtcbiAgICAgICAgbG9hZGVyVHJlZTogdHJlZVxuICAgIH1cbn0pO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtcGFnZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fnot-found&page=%2Fnot-found&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=true!": +/*!*************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=true! ***! + \*************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/layout.tsx */ \"(ssr)/./app/layout.tsx\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJTVDYXBwJTVDbGF5b3V0LnRzeCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLz9kZmY2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxhcHBcXFxcbGF5b3V0LnRzeFwiKSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=true!\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=true!": +/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=true! ***! + \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/app-router.js */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/error-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/layout-router.js */ \"(ssr)/./node_modules/next/dist/client/components/layout-router.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/not-found-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/render-from-template-context.js */ \"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js */ \"(ssr)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js\", 23))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJTVDbm9kZV9tb2R1bGVzJTVDbmV4dCU1Q2Rpc3QlNUNjbGllbnQlNUNjb21wb25lbnRzJTVDYXBwLXJvdXRlci5qcyZtb2R1bGVzPUMlM0ElNUNVc2VycyU1Q0hBUlNISVQlMjBCQUdHQSU1Q0Rlc2t0b3AlNUNaZW9UYXAyLjAlNUNmcm9udGVuZCU1Q25vZGVfbW9kdWxlcyU1Q25leHQlNUNkaXN0JTVDY2xpZW50JTVDY29tcG9uZW50cyU1Q2Vycm9yLWJvdW5kYXJ5LmpzJm1vZHVsZXM9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJTVDbm9kZV9tb2R1bGVzJTVDbmV4dCU1Q2Rpc3QlNUNjbGllbnQlNUNjb21wb25lbnRzJTVDbGF5b3V0LXJvdXRlci5qcyZtb2R1bGVzPUMlM0ElNUNVc2VycyU1Q0hBUlNISVQlMjBCQUdHQSU1Q0Rlc2t0b3AlNUNaZW9UYXAyLjAlNUNmcm9udGVuZCU1Q25vZGVfbW9kdWxlcyU1Q25leHQlNUNkaXN0JTVDY2xpZW50JTVDY29tcG9uZW50cyU1Q25vdC1mb3VuZC1ib3VuZGFyeS5qcyZtb2R1bGVzPUMlM0ElNUNVc2VycyU1Q0hBUlNISVQlMjBCQUdHQSU1Q0Rlc2t0b3AlNUNaZW9UYXAyLjAlNUNmcm9udGVuZCU1Q25vZGVfbW9kdWxlcyU1Q25leHQlNUNkaXN0JTVDY2xpZW50JTVDY29tcG9uZW50cyU1Q3JlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanMmbW9kdWxlcz1DJTNBJTVDVXNlcnMlNUNIQVJTSElUJTIwQkFHR0ElNUNEZXNrdG9wJTVDWmVvVGFwMi4wJTVDZnJvbnRlbmQlNUNub2RlX21vZHVsZXMlNUNuZXh0JTVDZGlzdCU1Q2NsaWVudCU1Q2NvbXBvbmVudHMlNUNzdGF0aWMtZ2VuZXJhdGlvbi1zZWFyY2hwYXJhbXMtYmFpbG91dC1wcm92aWRlci5qcyZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsa09BQXdKO0FBQ3hKLDBPQUE0SjtBQUM1Six3T0FBMko7QUFDM0osa1BBQWdLO0FBQ2hLLHNRQUEwSztBQUMxSyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvP2UwZTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJDOlxcXFxVc2Vyc1xcXFxIQVJTSElUIEJBR0dBXFxcXERlc2t0b3BcXFxcWmVvVGFwMi4wXFxcXGZyb250ZW5kXFxcXG5vZGVfbW9kdWxlc1xcXFxuZXh0XFxcXGRpc3RcXFxcY2xpZW50XFxcXGNvbXBvbmVudHNcXFxcYXBwLXJvdXRlci5qc1wiKTtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxub2RlX21vZHVsZXNcXFxcbmV4dFxcXFxkaXN0XFxcXGNsaWVudFxcXFxjb21wb25lbnRzXFxcXGVycm9yLWJvdW5kYXJ5LmpzXCIpO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJDOlxcXFxVc2Vyc1xcXFxIQVJTSElUIEJBR0dBXFxcXERlc2t0b3BcXFxcWmVvVGFwMi4wXFxcXGZyb250ZW5kXFxcXG5vZGVfbW9kdWxlc1xcXFxuZXh0XFxcXGRpc3RcXFxcY2xpZW50XFxcXGNvbXBvbmVudHNcXFxcbGF5b3V0LXJvdXRlci5qc1wiKTtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxub2RlX21vZHVsZXNcXFxcbmV4dFxcXFxkaXN0XFxcXGNsaWVudFxcXFxjb21wb25lbnRzXFxcXG5vdC1mb3VuZC1ib3VuZGFyeS5qc1wiKTtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxub2RlX21vZHVsZXNcXFxcbmV4dFxcXFxkaXN0XFxcXGNsaWVudFxcXFxjb21wb25lbnRzXFxcXHJlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanNcIik7XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIkM6XFxcXFVzZXJzXFxcXEhBUlNISVQgQkFHR0FcXFxcRGVza3RvcFxcXFxaZW9UYXAyLjBcXFxcZnJvbnRlbmRcXFxcbm9kZV9tb2R1bGVzXFxcXG5leHRcXFxcZGlzdFxcXFxjbGllbnRcXFxcY29tcG9uZW50c1xcXFxzdGF0aWMtZ2VuZXJhdGlvbi1zZWFyY2hwYXJhbXMtYmFpbG91dC1wcm92aWRlci5qc1wiKSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=true!\n"); + +/***/ }), + +/***/ "(ssr)/./app/layout.tsx": +/*!************************!*\ + !*** ./app/layout.tsx ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RootLayout)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/font/google/target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"} */ \"(ssr)/./node_modules/next/font/google/target.css?{\\\"path\\\":\\\"app\\\\\\\\layout.tsx\\\",\\\"import\\\":\\\"Inter\\\",\\\"arguments\\\":[{\\\"subsets\\\":[\\\"latin\\\"]}],\\\"variableName\\\":\\\"inter\\\"}\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _styles_globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../styles/globals.css */ \"(ssr)/./styles/globals.css\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n// Metadata needs to be exported from a server component, so this won't work in a client component\n// Moving this to a separate file or removing it for now\nconst metadata = {\n title: \"ZeoTap Data Ingestion Tool\",\n description: \"Bidirectional ClickHouse & Flat File Data Ingestion Tool\"\n};\nfunction RootLayout({ children }) {\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n // Function to handle home button click - will navigate to the home page\n const handleHomeClick = ()=>{\n router.push(\"/\");\n router.refresh(); // Force a refresh to reset state\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"en\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"head\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"title\", {\n children: metadata.title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 34,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"meta\", {\n name: \"description\",\n content: metadata.description\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 35,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 33,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n className: (next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default().className),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"bg-gradient-to-r from-primary to-accent text-white shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between py-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-shrink-0 w-10 h-10 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-primary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 45,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 46,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 44,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 43,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-bold tracking-tight\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 50,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-medium text-blue-100\",\n children: \"Data Ingestion Tool\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 51,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 49,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 42,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex items-center space-x-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium text-blue-100\",\n children: \"Bidirectional ClickHouse & Flat File Data Ingestion\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 55,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"px-4 py-2 bg-white text-primary rounded-md text-sm font-medium hover:bg-blue-50 transition-colors flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 61,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 60,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 56,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 54,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"md:hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"text-white hover:text-blue-100 flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 72,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 71,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 41,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 40,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 39,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"container mx-auto py-8 px-4\",\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 80,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"footer\", {\n className: \"bg-secondary text-white p-4 mt-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col md:flex-row justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2 mb-4 md:mb-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 text-secondary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 87,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 88,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 86,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 85,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 91,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 84,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n children: [\n \"\\xa9 \",\n new Date().getFullYear(),\n \" ZeoTap | Data Ingestion Tool\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 93,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-4 mt-4 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 97,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 96,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 95,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 102,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 101,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 100,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 94,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 83,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 82,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 81,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 38,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 37,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 32,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9hcHAvbGF5b3V0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFNQTtBQUp5QjtBQUVhO0FBSTVDLGtHQUFrRztBQUNsRyx3REFBd0Q7QUFDeEQsTUFBTUUsV0FBVztJQUNmQyxPQUFPO0lBQ1BDLGFBQWE7QUFDZjtBQUVlLFNBQVNDLFdBQVcsRUFDakNDLFFBQVEsRUFHUjtJQUNBLE1BQU1DLFNBQVNOLDBEQUFTQTtJQUV4Qix3RUFBd0U7SUFDeEUsTUFBTU8sa0JBQWtCO1FBQ3RCRCxPQUFPRSxJQUFJLENBQUM7UUFDWkYsT0FBT0csT0FBTyxJQUFJLGlDQUFpQztJQUNyRDtJQUVBLHFCQUNFLDhEQUFDQztRQUFLQyxNQUFLOzswQkFDVCw4REFBQ0M7O2tDQUNDLDhEQUFDVjtrQ0FBT0QsU0FBU0MsS0FBSzs7Ozs7O2tDQUN0Qiw4REFBQ1c7d0JBQUtDLE1BQUs7d0JBQWNDLFNBQVNkLFNBQVNFLFdBQVc7Ozs7Ozs7Ozs7OzswQkFFeEQsOERBQUNhO2dCQUFLQyxXQUFXbEIsMkpBQWU7MEJBQzlCLDRFQUFDbUI7b0JBQUlELFdBQVU7O3NDQUNiLDhEQUFDRTs0QkFBT0YsV0FBVTtzQ0FDaEIsNEVBQUNDO2dDQUFJRCxXQUFVOzBDQUNiLDRFQUFDQztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUNDOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ0M7b0RBQUlELFdBQVU7OERBQ2IsNEVBQUNHO3dEQUFJSCxXQUFVO3dEQUF1QkksU0FBUTt3REFBWUMsTUFBSzt3REFBT0MsT0FBTTs7MEVBQzFFLDhEQUFDQztnRUFBS0MsR0FBRTtnRUFBd0JILE1BQUs7Ozs7OzswRUFDckMsOERBQUNFO2dFQUFLQyxHQUFFO2dFQUFzQkgsTUFBSztnRUFBZUksU0FBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7OERBRzlELDhEQUFDUjs7c0VBQ0MsOERBQUNTOzREQUFHVixXQUFVO3NFQUFvQzs7Ozs7O3NFQUNsRCw4REFBQ1c7NERBQUVYLFdBQVU7c0VBQW9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7c0RBR3JELDhEQUFDQzs0Q0FBSUQsV0FBVTs7OERBQ2IsOERBQUNZO29EQUFLWixXQUFVOzhEQUFvQzs7Ozs7OzhEQUNwRCw4REFBQ2E7b0RBQ0NDLFNBQVN4QjtvREFDVFUsV0FBVTs7c0VBRVYsOERBQUNHOzREQUFJSCxXQUFVOzREQUFlSyxNQUFLOzREQUFPVSxRQUFPOzREQUFlWCxTQUFROzREQUFZRSxPQUFNO3NFQUN4Riw0RUFBQ0M7Z0VBQUtTLGVBQWM7Z0VBQVFDLGdCQUFlO2dFQUFRQyxhQUFZO2dFQUFJVixHQUFFOzs7Ozs7Ozs7Ozt3REFDakU7Ozs7Ozs7Ozs7Ozs7c0RBSVYsOERBQUNQOzRDQUFJRCxXQUFVO3NEQUNiLDRFQUFDYTtnREFDQ0MsU0FBU3hCO2dEQUNUVSxXQUFVOztrRUFFViw4REFBQ0c7d0RBQUlILFdBQVU7d0RBQWVLLE1BQUs7d0RBQU9VLFFBQU87d0RBQWVYLFNBQVE7d0RBQVlFLE9BQU07a0VBQ3hGLDRFQUFDQzs0REFBS1MsZUFBYzs0REFBUUMsZ0JBQWU7NERBQVFDLGFBQVk7NERBQUlWLEdBQUU7Ozs7Ozs7Ozs7O29EQUNqRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FPaEIsOERBQUNXOzRCQUFLbkIsV0FBVTtzQ0FBK0JaOzs7Ozs7c0NBQy9DLDhEQUFDZ0M7NEJBQU9wQixXQUFVO3NDQUNoQiw0RUFBQ0M7Z0NBQUlELFdBQVU7MENBQ2IsNEVBQUNDO29DQUFJRCxXQUFVOztzREFDYiw4REFBQ0M7NENBQUlELFdBQVU7OzhEQUNiLDhEQUFDQztvREFBSUQsV0FBVTs4REFDYiw0RUFBQ0c7d0RBQUlILFdBQVU7d0RBQXlCSSxTQUFRO3dEQUFZQyxNQUFLO3dEQUFPQyxPQUFNOzswRUFDNUUsOERBQUNDO2dFQUFLQyxHQUFFO2dFQUF3QkgsTUFBSzs7Ozs7OzBFQUNyQyw4REFBQ0U7Z0VBQUtDLEdBQUU7Z0VBQXNCSCxNQUFLO2dFQUFlSSxTQUFROzs7Ozs7Ozs7Ozs7Ozs7Ozs4REFHOUQsOERBQUNHO29EQUFLWixXQUFVOzhEQUFjOzs7Ozs7Ozs7Ozs7c0RBRWhDLDhEQUFDVzs0Q0FBRVgsV0FBVTs7Z0RBQVU7Z0RBQVEsSUFBSXFCLE9BQU9DLFdBQVc7Z0RBQUc7Ozs7Ozs7c0RBQ3hELDhEQUFDckI7NENBQUlELFdBQVU7OzhEQUNiLDhEQUFDdUI7b0RBQUVDLE1BQUs7b0RBQUl4QixXQUFVOzhEQUNwQiw0RUFBQ0c7d0RBQUlILFdBQVU7d0RBQVVLLE1BQUs7d0RBQWVELFNBQVE7d0RBQVlxQixlQUFZO2tFQUMzRSw0RUFBQ2xCOzREQUFLbUIsVUFBUzs0REFBVWxCLEdBQUU7NERBQW10Qm1CLFVBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7OERBRzN2Qiw4REFBQ0o7b0RBQUVDLE1BQUs7b0RBQUl4QixXQUFVOzhEQUNwQiw0RUFBQ0c7d0RBQUlILFdBQVU7d0RBQVVLLE1BQUs7d0RBQWVELFNBQVE7d0RBQVlxQixlQUFZO2tFQUMzRSw0RUFBQ2xCOzREQUFLQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVzlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL2FwcC9sYXlvdXQudHN4Pzk5ODgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xyXG5cclxuaW1wb3J0IHR5cGUgeyBNZXRhZGF0YSB9IGZyb20gJ25leHQnO1xyXG5pbXBvcnQgeyBJbnRlciB9IGZyb20gJ25leHQvZm9udC9nb29nbGUnO1xyXG5pbXBvcnQgJy4uL3N0eWxlcy9nbG9iYWxzLmNzcyc7XHJcbmltcG9ydCBMaW5rIGZyb20gJ25leHQvbGluayc7XHJcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJ25leHQvbmF2aWdhdGlvbic7XHJcblxyXG5jb25zdCBpbnRlciA9IEludGVyKHsgc3Vic2V0czogWydsYXRpbiddIH0pO1xyXG5cclxuLy8gTWV0YWRhdGEgbmVlZHMgdG8gYmUgZXhwb3J0ZWQgZnJvbSBhIHNlcnZlciBjb21wb25lbnQsIHNvIHRoaXMgd29uJ3Qgd29yayBpbiBhIGNsaWVudCBjb21wb25lbnRcclxuLy8gTW92aW5nIHRoaXMgdG8gYSBzZXBhcmF0ZSBmaWxlIG9yIHJlbW92aW5nIGl0IGZvciBub3dcclxuY29uc3QgbWV0YWRhdGEgPSB7XHJcbiAgdGl0bGU6ICdaZW9UYXAgRGF0YSBJbmdlc3Rpb24gVG9vbCcsXHJcbiAgZGVzY3JpcHRpb246ICdCaWRpcmVjdGlvbmFsIENsaWNrSG91c2UgJiBGbGF0IEZpbGUgRGF0YSBJbmdlc3Rpb24gVG9vbCcsXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSb290TGF5b3V0KHtcclxuICBjaGlsZHJlbixcclxufTogUmVhZG9ubHk8e1xyXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XHJcbn0+KSB7XHJcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XHJcblxyXG4gIC8vIEZ1bmN0aW9uIHRvIGhhbmRsZSBob21lIGJ1dHRvbiBjbGljayAtIHdpbGwgbmF2aWdhdGUgdG8gdGhlIGhvbWUgcGFnZVxyXG4gIGNvbnN0IGhhbmRsZUhvbWVDbGljayA9ICgpID0+IHtcclxuICAgIHJvdXRlci5wdXNoKCcvJyk7XHJcbiAgICByb3V0ZXIucmVmcmVzaCgpOyAvLyBGb3JjZSBhIHJlZnJlc2ggdG8gcmVzZXQgc3RhdGVcclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGh0bWwgbGFuZz1cImVuXCI+XHJcbiAgICAgIDxoZWFkPlxyXG4gICAgICAgIDx0aXRsZT57bWV0YWRhdGEudGl0bGV9PC90aXRsZT5cclxuICAgICAgICA8bWV0YSBuYW1lPVwiZGVzY3JpcHRpb25cIiBjb250ZW50PXttZXRhZGF0YS5kZXNjcmlwdGlvbn0gLz5cclxuICAgICAgPC9oZWFkPlxyXG4gICAgICA8Ym9keSBjbGFzc05hbWU9e2ludGVyLmNsYXNzTmFtZX0+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4taC1zY3JlZW4gYmctZ3JheS01MFwiPlxyXG4gICAgICAgICAgPGhlYWRlciBjbGFzc05hbWU9XCJiZy1ncmFkaWVudC10by1yIGZyb20tcHJpbWFyeSB0by1hY2NlbnQgdGV4dC13aGl0ZSBzaGFkb3ctbGdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXIgbXgtYXV0byBweC00XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHktNFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LXNocmluay0wIHctMTAgaC0xMCBiZy13aGl0ZSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNiBoLTYgdGV4dC1wcmltYXJ5XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiAxOUwyMSAxMkwxMiA1VjE5WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE5TDEyIDEyTDMgNVYxOVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgb3BhY2l0eT1cIjAuNVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LWJvbGQgdHJhY2tpbmctdGlnaHRcIj5aZW9UYXA8L2gxPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1ibHVlLTEwMFwiPkRhdGEgSW5nZXN0aW9uIFRvb2w8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBtZDpmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTZcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWJsdWUtMTAwXCI+QmlkaXJlY3Rpb25hbCBDbGlja0hvdXNlICYgRmxhdCBGaWxlIERhdGEgSW5nZXN0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUhvbWVDbGlja31cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC00IHB5LTIgYmctd2hpdGUgdGV4dC1wcmltYXJ5IHJvdW5kZWQtbWQgdGV4dC1zbSBmb250LW1lZGl1bSBob3ZlcjpiZy1ibHVlLTUwIHRyYW5zaXRpb24tY29sb3JzIGZsZXggaXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNCBtci0xXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPVwiMlwiIGQ9XCJNMyAxMmwyLTJtMCAwbDctNyA3IDdtLTctN3YxNFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICBIb21lXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1kOmhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlSG9tZUNsaWNrfVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgaG92ZXI6dGV4dC1ibHVlLTEwMCBmbGV4IGl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTUgbXItMVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD1cIjJcIiBkPVwiTTMgMTJsMi0ybTAgMGw3LTcgNyA3bS03LTd2MTRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgSG9tZVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgPG1haW4gY2xhc3NOYW1lPVwiY29udGFpbmVyIG14LWF1dG8gcHktOCBweC00XCI+e2NoaWxkcmVufTwvbWFpbj5cclxuICAgICAgICAgIDxmb290ZXIgY2xhc3NOYW1lPVwiYmctc2Vjb25kYXJ5IHRleHQtd2hpdGUgcC00IG10LThcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXIgbXgtYXV0b1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBtZDpmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiBtYi00IG1kOm1iLTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTggaC04IGJnLXdoaXRlIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy00IGgtNCB0ZXh0LXNlY29uZGFyeVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgMTlMMjEgMTJMMTIgNVYxOVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAxOUwxMiAxMkwzIDVWMTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIG9wYWNpdHk9XCIwLjVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj5aZW9UYXA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc21cIj4mY29weTsge25ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKX0gWmVvVGFwIHwgRGF0YSBJbmdlc3Rpb24gVG9vbDwvcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzcGFjZS14LTQgbXQtNCBtZDptdC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSBob3Zlcjp0ZXh0LWJsdWUtMTAwIHRyYW5zaXRpb24tY29sb3JzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGxSdWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIgMkM2LjQ3NyAyIDIgNi40ODQgMiAxMi4wMTdjMCA0LjQyNSAyLjg2NSA4LjE4IDYuODM5IDkuNTA0LjUuMDkyLjY4Mi0uMjE3LjY4Mi0uNDgzIDAtLjIzNy0uMDA4LS44NjgtLjAxMy0xLjcwMy0yLjc4Mi42MDUtMy4zNjktMS4zNDMtMy4zNjktMS4zNDMtLjQ1NC0xLjE1OC0xLjExLTEuNDY2LTEuMTEtMS40NjYtLjkwOC0uNjIuMDY5LS42MDguMDY5LS42MDggMS4wMDMuMDcgMS41MzEgMS4wMzIgMS41MzEgMS4wMzIuODkyIDEuNTMgMi4zNDEgMS4wODggMi45MS44MzIuMDkyLS42NDcuMzUtMS4wODguNjM2LTEuMzM4LTIuMjItLjI1My00LjU1NS0xLjExMy00LjU1NS00Ljk1MSAwLTEuMDkzLjM5LTEuOTg4IDEuMDI5LTIuNjg4LS4xMDMtLjI1My0uNDQ2LTEuMjcyLjA5OC0yLjY1IDAgMCAuODQtLjI3IDIuNzUgMS4wMjZBOS41NjQgOS41NjQgMCAwMTEyIDYuODQ0Yy44NS4wMDQgMS43MDUuMTE1IDIuNTA0LjMzNyAxLjkwOS0xLjI5NiAyLjc0Ny0xLjAyNyAyLjc0Ny0xLjAyNy41NDYgMS4zNzkuMjAyIDIuMzk4LjEgMi42NTEuNjQuNyAxLjAyOCAxLjU5NSAxLjAyOCAyLjY4OCAwIDMuODQ4LTIuMzM5IDQuNjk1LTQuNTY2IDQuOTQzLjM1OS4zMDkuNjc4LjkyLjY3OCAxLjg1NSAwIDEuMzM4LS4wMTIgMi40MTktLjAxMiAyLjc0NyAwIC4yNjguMTguNTguNjg4LjQ4MkExMC4wMTkgMTAuMDE5IDAgMDAyMiAxMi4wMTdDMjIgNi40ODQgMTcuNTIyIDIgMTIgMnpcIiBjbGlwUnVsZT1cImV2ZW5vZGRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSBob3Zlcjp0ZXh0LWJsdWUtMTAwIHRyYW5zaXRpb24tY29sb3JzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yOSAyMC4yNTFjNy41NDcgMCAxMS42NzUtNi4yNTMgMTEuNjc1LTExLjY3NSAwLS4xNzggMC0uMzU1LS4wMTItLjUzQTguMzQ4IDguMzQ4IDAgMDAyMiA1LjkyYTguMTkgOC4xOSAwIDAxLTIuMzU3LjY0NiA0LjExOCA0LjExOCAwIDAwMS44MDQtMi4yNyA4LjIyNCA4LjIyNCAwIDAxLTIuNjA1Ljk5NiA0LjEwNyA0LjEwNyAwIDAwLTYuOTkzIDMuNzQzIDExLjY1IDExLjY1IDAgMDEtOC40NTctNC4yODcgNC4xMDYgNC4xMDYgMCAwMDEuMjcgNS40NzdBNC4wNzIgNC4wNzIgMCAwMTIuOCA5LjcxM3YuMDUyYTQuMTA1IDQuMTA1IDAgMDAzLjI5MiA0LjAyMiA0LjA5NSA0LjA5NSAwIDAxLTEuODUzLjA3IDQuMTA4IDQuMTA4IDAgMDAzLjgzNCAyLjg1QTguMjMzIDguMjMzIDAgMDEyIDE4LjQwN2ExMS42MTYgMTEuNjE2IDAgMDA2LjI5IDEuODRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Zvb3Rlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9ib2R5PlxyXG4gICAgPC9odG1sPlxyXG4gICk7XHJcbn0gIl0sIm5hbWVzIjpbImludGVyIiwidXNlUm91dGVyIiwibWV0YWRhdGEiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiUm9vdExheW91dCIsImNoaWxkcmVuIiwicm91dGVyIiwiaGFuZGxlSG9tZUNsaWNrIiwicHVzaCIsInJlZnJlc2giLCJodG1sIiwibGFuZyIsImhlYWQiLCJtZXRhIiwibmFtZSIsImNvbnRlbnQiLCJib2R5IiwiY2xhc3NOYW1lIiwiZGl2IiwiaGVhZGVyIiwic3ZnIiwidmlld0JveCIsImZpbGwiLCJ4bWxucyIsInBhdGgiLCJkIiwib3BhY2l0eSIsImgxIiwicCIsInNwYW4iLCJidXR0b24iLCJvbkNsaWNrIiwic3Ryb2tlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJtYWluIiwiZm9vdGVyIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwiYSIsImhyZWYiLCJhcmlhLWhpZGRlbiIsImZpbGxSdWxlIiwiY2xpcFJ1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./app/layout.tsx\n"); + +/***/ }), + +/***/ "(ssr)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"75479a21999c\");\nif (false) {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9zdHlsZXMvZ2xvYmFscy5jc3MiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlFQUFlLGNBQWM7QUFDN0IsSUFBSSxLQUFVLEVBQUUsRUFBdUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vc3R5bGVzL2dsb2JhbHMuY3NzP2VkMDEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI3NTQ3OWEyMTk5OWNcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./styles/globals.css\n"); + +/***/ }), + +/***/ "(rsc)/./app/layout.tsx": +/*!************************!*\ + !*** ./app/layout.tsx ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ $$typeof: () => (/* binding */ $$typeof), +/* harmony export */ __esModule: () => (/* binding */ __esModule), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js"); + +const proxy = (0,next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__.createProxy)(String.raw`C:\Users\HARSHIT BAGGA\Desktop\ZeoTap2.0\frontend\app\layout.tsx`) + +// Accessing the __esModule property and exporting $$typeof are required here. +// The __esModule getter forces the proxy target to create the default export +// and the $$typeof value is for rendering logic to determine if the module +// is a client boundary. +const { __esModule, $$typeof } = proxy; +const __default__ = proxy.default; + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__default__); + +/***/ }) + +}; +; + +// load runtime +var __webpack_require__ = require("../webpack-runtime.js"); +__webpack_require__.C(exports); +var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/@swc"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fnot-found&page=%2Fnot-found&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"))); +module.exports = __webpack_exports__; + +})(); \ No newline at end of file diff --git a/frontend/.next/server/app/not-found_client-reference-manifest.js b/frontend/.next/server/app/not-found_client-reference-manifest.js new file mode 100644 index 000000000..f3d5181e1 --- /dev/null +++ b/frontend/.next/server/app/not-found_client-reference-manifest.js @@ -0,0 +1 @@ +globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/not-found"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/page.tsx":{"*":{"id":"(ssr)/./app/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/layout.tsx":{"*":{"id":"(ssr)/./app/layout.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\static-generation-searchparams-bailout-provider.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\static-generation-searchparams-bailout-provider.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page.tsx":{"id":"(app-pages-browser)/./app/page.tsx","name":"*","chunks":["app/page","static/chunks/app/page.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx":{"id":"(app-pages-browser)/./app/layout.tsx","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false}},"entryCSSFiles":{"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page":[],"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout":["static/css/app/layout.css"],"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\not-found":[]}} \ No newline at end of file diff --git a/frontend/.next/server/app/page.js b/frontend/.next/server/app/page.js new file mode 100644 index 000000000..5617d60d0 --- /dev/null +++ b/frontend/.next/server/app/page.js @@ -0,0 +1,454 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(() => { +var exports = {}; +exports.id = "app/page"; +exports.ids = ["app/page"]; +exports.modules = { + +/***/ "./action-async-storage.external": +/*!****************************************************************************!*\ + !*** external "next/dist/client/components/action-async-storage.external" ***! + \****************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/action-async-storage.external"); + +/***/ }), + +/***/ "../../client/components/action-async-storage.external": +/*!*******************************************************************************!*\ + !*** external "next/dist/client/components/action-async-storage.external.js" ***! + \*******************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/action-async-storage.external.js"); + +/***/ }), + +/***/ "./request-async-storage.external": +/*!*****************************************************************************!*\ + !*** external "next/dist/client/components/request-async-storage.external" ***! + \*****************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/request-async-storage.external"); + +/***/ }), + +/***/ "../../client/components/request-async-storage.external": +/*!********************************************************************************!*\ + !*** external "next/dist/client/components/request-async-storage.external.js" ***! + \********************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/request-async-storage.external.js"); + +/***/ }), + +/***/ "./static-generation-async-storage.external": +/*!***************************************************************************************!*\ + !*** external "next/dist/client/components/static-generation-async-storage.external" ***! + \***************************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/static-generation-async-storage.external"); + +/***/ }), + +/***/ "../../client/components/static-generation-async-storage.external": +/*!******************************************************************************************!*\ + !*** external "next/dist/client/components/static-generation-async-storage.external.js" ***! + \******************************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/client/components/static-generation-async-storage.external.js"); + +/***/ }), + +/***/ "next/dist/compiled/next-server/app-page.runtime.dev.js": +/*!*************************************************************************!*\ + !*** external "next/dist/compiled/next-server/app-page.runtime.dev.js" ***! + \*************************************************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("next/dist/compiled/next-server/app-page.runtime.dev.js"); + +/***/ }), + +/***/ "assert": +/*!*************************!*\ + !*** external "assert" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("assert"); + +/***/ }), + +/***/ "crypto": +/*!*************************!*\ + !*** external "crypto" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("crypto"); + +/***/ }), + +/***/ "events": +/*!*************************!*\ + !*** external "events" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("events"); + +/***/ }), + +/***/ "fs": +/*!*********************!*\ + !*** external "fs" ***! + \*********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("fs"); + +/***/ }), + +/***/ "http": +/*!***********************!*\ + !*** external "http" ***! + \***********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("http"); + +/***/ }), + +/***/ "https": +/*!************************!*\ + !*** external "https" ***! + \************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("https"); + +/***/ }), + +/***/ "os": +/*!*********************!*\ + !*** external "os" ***! + \*********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("os"); + +/***/ }), + +/***/ "path": +/*!***********************!*\ + !*** external "path" ***! + \***********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("path"); + +/***/ }), + +/***/ "stream": +/*!*************************!*\ + !*** external "stream" ***! + \*************************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("stream"); + +/***/ }), + +/***/ "tty": +/*!**********************!*\ + !*** external "tty" ***! + \**********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("tty"); + +/***/ }), + +/***/ "url": +/*!**********************!*\ + !*** external "url" ***! + \**********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("url"); + +/***/ }), + +/***/ "util": +/*!***********************!*\ + !*** external "util" ***! + \***********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("util"); + +/***/ }), + +/***/ "zlib": +/*!***********************!*\ + !*** external "zlib" ***! + \***********************/ +/***/ ((module) => { + +"use strict"; +module.exports = require("zlib"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!": +/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! ***! + \************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GlobalError: () => (/* reexport default from dynamic */ next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default.a),\n/* harmony export */ __next_app__: () => (/* binding */ __next_app__),\n/* harmony export */ originalPathname: () => (/* binding */ originalPathname),\n/* harmony export */ pages: () => (/* binding */ pages),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ tree: () => (/* binding */ tree)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/app-page/module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?9d97\");\n/* harmony import */ var next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"(rsc)/./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/client/components/error-boundary */ \"(rsc)/./node_modules/next/dist/client/components/error-boundary.js\");\n/* harmony import */ var next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_dist_client_components_error_boundary__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/server/app-render/entry-base */ \"(rsc)/./node_modules/next/dist/server/app-render/entry-base.js\");\n/* harmony import */ var next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__) if([\"default\",\"tree\",\"pages\",\"GlobalError\",\"originalPathname\",\"__next_app__\",\"routeModule\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => next_dist_server_app_render_entry_base__WEBPACK_IMPORTED_MODULE_3__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\"TURBOPACK { transition: next-ssr }\";\n\n\n// We inject the tree and pages here so that we can use them in the route\n// module.\nconst tree = {\n children: [\n '',\n {\n children: ['__PAGE__', {}, {\n page: [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/page.tsx */ \"(rsc)/./app/page.tsx\")), \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\"],\n \n }]\n },\n {\n 'layout': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/layout.tsx */ \"(rsc)/./app/layout.tsx\")), \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\"],\n'not-found': [() => Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! next/dist/client/components/not-found-error */ \"(rsc)/./node_modules/next/dist/client/components/not-found-error.js\", 23)), \"next/dist/client/components/not-found-error\"],\n \n }\n ]\n }.children;\nconst pages = [\"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\"];\n\n\nconst __next_app_require__ = __webpack_require__\nconst __next_app_load_chunk__ = () => Promise.resolve()\nconst originalPathname = \"/page\";\nconst __next_app__ = {\n require: __next_app_require__,\n loadChunk: __next_app_load_chunk__\n};\n\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_future_route_modules_app_page_module_compiled__WEBPACK_IMPORTED_MODULE_0__.AppPageRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.APP_PAGE,\n page: \"/page\",\n pathname: \"/\",\n // The following aren't used in production.\n bundlePath: \"\",\n filename: \"\",\n appPaths: []\n },\n userland: {\n loaderTree: tree\n }\n});\n\n//# sourceMappingURL=app-page.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWFwcC1sb2FkZXIuanM/bmFtZT1hcHAlMkZwYWdlJnBhZ2U9JTJGcGFnZSZhcHBQYXRocz0lMkZwYWdlJnBhZ2VQYXRoPXByaXZhdGUtbmV4dC1hcHAtZGlyJTJGcGFnZS50c3gmYXBwRGlyPUMlM0ElNUNVc2VycyU1Q0hBUlNISVQlMjBCQUdHQSU1Q0Rlc2t0b3AlNUNaZW9UYXAyLjAlNUNmcm9udGVuZCU1Q2FwcCZwYWdlRXh0ZW5zaW9ucz10c3gmcGFnZUV4dGVuc2lvbnM9dHMmcGFnZUV4dGVuc2lvbnM9anN4JnBhZ2VFeHRlbnNpb25zPWpzJnJvb3REaXI9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJmlzRGV2PXRydWUmdHNjb25maWdQYXRoPXRzY29uZmlnLmpzb24mYmFzZVBhdGg9JmFzc2V0UHJlZml4PSZuZXh0Q29uZmlnT3V0cHV0PSZwcmVmZXJyZWRSZWdpb249Jm1pZGRsZXdhcmVDb25maWc9ZTMwJTNEISIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsYUFBYSxzQkFBc0I7QUFDaUU7QUFDckM7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLHVCQUF1Qix3SUFBMEc7QUFDakk7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EseUJBQXlCLDRJQUE0RztBQUNySSxvQkFBb0IsME5BQWdGO0FBQ3BHO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUN1QjtBQUM2RDtBQUNwRiw2QkFBNkIsbUJBQW1CO0FBQ2hEO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUN1RDtBQUN2RDtBQUNPLHdCQUF3Qiw4R0FBa0I7QUFDakQ7QUFDQSxjQUFjLHlFQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8/NmI4MSJdLCJzb3VyY2VzQ29udGVudCI6WyJcIlRVUkJPUEFDSyB7IHRyYW5zaXRpb246IG5leHQtc3NyIH1cIjtcbmltcG9ydCB7IEFwcFBhZ2VSb3V0ZU1vZHVsZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1wYWdlL21vZHVsZS5jb21waWxlZFwiO1xuaW1wb3J0IHsgUm91dGVLaW5kIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLWtpbmRcIjtcbi8vIFdlIGluamVjdCB0aGUgdHJlZSBhbmQgcGFnZXMgaGVyZSBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlbSBpbiB0aGUgcm91dGVcbi8vIG1vZHVsZS5cbmNvbnN0IHRyZWUgPSB7XG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICcnLFxuICAgICAgICB7XG4gICAgICAgIGNoaWxkcmVuOiBbJ19fUEFHRV9fJywge30sIHtcbiAgICAgICAgICBwYWdlOiBbKCkgPT4gaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJDOlxcXFxVc2Vyc1xcXFxIQVJTSElUIEJBR0dBXFxcXERlc2t0b3BcXFxcWmVvVGFwMi4wXFxcXGZyb250ZW5kXFxcXGFwcFxcXFxwYWdlLnRzeFwiKSwgXCJDOlxcXFxVc2Vyc1xcXFxIQVJTSElUIEJBR0dBXFxcXERlc2t0b3BcXFxcWmVvVGFwMi4wXFxcXGZyb250ZW5kXFxcXGFwcFxcXFxwYWdlLnRzeFwiXSxcbiAgICAgICAgICBcbiAgICAgICAgfV1cbiAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgJ2xheW91dCc6IFsoKSA9PiBpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIkM6XFxcXFVzZXJzXFxcXEhBUlNISVQgQkFHR0FcXFxcRGVza3RvcFxcXFxaZW9UYXAyLjBcXFxcZnJvbnRlbmRcXFxcYXBwXFxcXGxheW91dC50c3hcIiksIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxhcHBcXFxcbGF5b3V0LnRzeFwiXSxcbidub3QtZm91bmQnOiBbKCkgPT4gaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yXCIpLCBcIm5leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9ub3QtZm91bmQtZXJyb3JcIl0sXG4gICAgICAgIFxuICAgICAgfVxuICAgICAgXVxuICAgICAgfS5jaGlsZHJlbjtcbmNvbnN0IHBhZ2VzID0gW1wiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxhcHBcXFxccGFnZS50c3hcIl07XG5leHBvcnQgeyB0cmVlLCBwYWdlcyB9O1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHbG9iYWxFcnJvciB9IGZyb20gXCJuZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnlcIjtcbmNvbnN0IF9fbmV4dF9hcHBfcmVxdWlyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfX1xuY29uc3QgX19uZXh0X2FwcF9sb2FkX2NodW5rX18gPSAoKSA9PiBQcm9taXNlLnJlc29sdmUoKVxuZXhwb3J0IGNvbnN0IG9yaWdpbmFsUGF0aG5hbWUgPSBcIi9wYWdlXCI7XG5leHBvcnQgY29uc3QgX19uZXh0X2FwcF9fID0ge1xuICAgIHJlcXVpcmU6IF9fbmV4dF9hcHBfcmVxdWlyZV9fLFxuICAgIGxvYWRDaHVuazogX19uZXh0X2FwcF9sb2FkX2NodW5rX19cbn07XG5leHBvcnQgKiBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL2VudHJ5LWJhc2VcIjtcbi8vIENyZWF0ZSBhbmQgZXhwb3J0IHRoZSByb3V0ZSBtb2R1bGUgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuZXhwb3J0IGNvbnN0IHJvdXRlTW9kdWxlID0gbmV3IEFwcFBhZ2VSb3V0ZU1vZHVsZSh7XG4gICAgZGVmaW5pdGlvbjoge1xuICAgICAgICBraW5kOiBSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIHBhZ2U6IFwiL3BhZ2VcIixcbiAgICAgICAgcGF0aG5hbWU6IFwiL1wiLFxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIGluIHByb2R1Y3Rpb24uXG4gICAgICAgIGJ1bmRsZVBhdGg6IFwiXCIsXG4gICAgICAgIGZpbGVuYW1lOiBcIlwiLFxuICAgICAgICBhcHBQYXRoczogW11cbiAgICB9LFxuICAgIHVzZXJsYW5kOiB7XG4gICAgICAgIGxvYWRlclRyZWU6IHRyZWVcbiAgICB9XG59KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXBhZ2UuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=true!": +/*!*************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=true! ***! + \*************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/layout.tsx */ \"(ssr)/./app/layout.tsx\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJTVDYXBwJTVDbGF5b3V0LnRzeCZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLz9kZmY2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxhcHBcXFxcbGF5b3V0LnRzeFwiKSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=true!\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=true!": +/*!***********************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=true! ***! + \***********************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/page.tsx */ \"(ssr)/./app/page.tsx\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJTVDYXBwJTVDcGFnZS50c3gmc2VydmVyPXRydWUhIiwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8/NzdiYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIkM6XFxcXFVzZXJzXFxcXEhBUlNISVQgQkFHR0FcXFxcRGVza3RvcFxcXFxaZW9UYXAyLjBcXFxcZnJvbnRlbmRcXFxcYXBwXFxcXHBhZ2UudHN4XCIpIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=true!\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=true!": +/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=true! ***! + \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +eval("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/app-router.js */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/error-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/layout-router.js */ \"(ssr)/./node_modules/next/dist/client/components/layout-router.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/not-found-boundary.js */ \"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/render-from-template-context.js */ \"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js */ \"(ssr)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js\", 23))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1jbGllbnQtZW50cnktbG9hZGVyLmpzP21vZHVsZXM9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJTVDbm9kZV9tb2R1bGVzJTVDbmV4dCU1Q2Rpc3QlNUNjbGllbnQlNUNjb21wb25lbnRzJTVDYXBwLXJvdXRlci5qcyZtb2R1bGVzPUMlM0ElNUNVc2VycyU1Q0hBUlNISVQlMjBCQUdHQSU1Q0Rlc2t0b3AlNUNaZW9UYXAyLjAlNUNmcm9udGVuZCU1Q25vZGVfbW9kdWxlcyU1Q25leHQlNUNkaXN0JTVDY2xpZW50JTVDY29tcG9uZW50cyU1Q2Vycm9yLWJvdW5kYXJ5LmpzJm1vZHVsZXM9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJTVDbm9kZV9tb2R1bGVzJTVDbmV4dCU1Q2Rpc3QlNUNjbGllbnQlNUNjb21wb25lbnRzJTVDbGF5b3V0LXJvdXRlci5qcyZtb2R1bGVzPUMlM0ElNUNVc2VycyU1Q0hBUlNISVQlMjBCQUdHQSU1Q0Rlc2t0b3AlNUNaZW9UYXAyLjAlNUNmcm9udGVuZCU1Q25vZGVfbW9kdWxlcyU1Q25leHQlNUNkaXN0JTVDY2xpZW50JTVDY29tcG9uZW50cyU1Q25vdC1mb3VuZC1ib3VuZGFyeS5qcyZtb2R1bGVzPUMlM0ElNUNVc2VycyU1Q0hBUlNISVQlMjBCQUdHQSU1Q0Rlc2t0b3AlNUNaZW9UYXAyLjAlNUNmcm9udGVuZCU1Q25vZGVfbW9kdWxlcyU1Q25leHQlNUNkaXN0JTVDY2xpZW50JTVDY29tcG9uZW50cyU1Q3JlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanMmbW9kdWxlcz1DJTNBJTVDVXNlcnMlNUNIQVJTSElUJTIwQkFHR0ElNUNEZXNrdG9wJTVDWmVvVGFwMi4wJTVDZnJvbnRlbmQlNUNub2RlX21vZHVsZXMlNUNuZXh0JTVDZGlzdCU1Q2NsaWVudCU1Q2NvbXBvbmVudHMlNUNzdGF0aWMtZ2VuZXJhdGlvbi1zZWFyY2hwYXJhbXMtYmFpbG91dC1wcm92aWRlci5qcyZzZXJ2ZXI9dHJ1ZSEiLCJtYXBwaW5ncyI6IkFBQUEsa09BQXdKO0FBQ3hKLDBPQUE0SjtBQUM1Six3T0FBMko7QUFDM0osa1BBQWdLO0FBQ2hLLHNRQUEwSztBQUMxSyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvP2UwZTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJDOlxcXFxVc2Vyc1xcXFxIQVJTSElUIEJBR0dBXFxcXERlc2t0b3BcXFxcWmVvVGFwMi4wXFxcXGZyb250ZW5kXFxcXG5vZGVfbW9kdWxlc1xcXFxuZXh0XFxcXGRpc3RcXFxcY2xpZW50XFxcXGNvbXBvbmVudHNcXFxcYXBwLXJvdXRlci5qc1wiKTtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxub2RlX21vZHVsZXNcXFxcbmV4dFxcXFxkaXN0XFxcXGNsaWVudFxcXFxjb21wb25lbnRzXFxcXGVycm9yLWJvdW5kYXJ5LmpzXCIpO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJDOlxcXFxVc2Vyc1xcXFxIQVJTSElUIEJBR0dBXFxcXERlc2t0b3BcXFxcWmVvVGFwMi4wXFxcXGZyb250ZW5kXFxcXG5vZGVfbW9kdWxlc1xcXFxuZXh0XFxcXGRpc3RcXFxcY2xpZW50XFxcXGNvbXBvbmVudHNcXFxcbGF5b3V0LXJvdXRlci5qc1wiKTtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxub2RlX21vZHVsZXNcXFxcbmV4dFxcXFxkaXN0XFxcXGNsaWVudFxcXFxjb21wb25lbnRzXFxcXG5vdC1mb3VuZC1ib3VuZGFyeS5qc1wiKTtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxub2RlX21vZHVsZXNcXFxcbmV4dFxcXFxkaXN0XFxcXGNsaWVudFxcXFxjb21wb25lbnRzXFxcXHJlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanNcIik7XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIkM6XFxcXFVzZXJzXFxcXEhBUlNISVQgQkFHR0FcXFxcRGVza3RvcFxcXFxaZW9UYXAyLjBcXFxcZnJvbnRlbmRcXFxcbm9kZV9tb2R1bGVzXFxcXG5leHRcXFxcZGlzdFxcXFxjbGllbnRcXFxcY29tcG9uZW50c1xcXFxzdGF0aWMtZ2VuZXJhdGlvbi1zZWFyY2hwYXJhbXMtYmFpbG91dC1wcm92aWRlci5qc1wiKSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=true!\n"); + +/***/ }), + +/***/ "(ssr)/./app/layout.tsx": +/*!************************!*\ + !*** ./app/layout.tsx ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ RootLayout)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/font/google/target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"} */ \"(ssr)/./node_modules/next/font/google/target.css?{\\\"path\\\":\\\"app\\\\\\\\layout.tsx\\\",\\\"import\\\":\\\"Inter\\\",\\\"arguments\\\":[{\\\"subsets\\\":[\\\"latin\\\"]}],\\\"variableName\\\":\\\"inter\\\"}\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _styles_globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../styles/globals.css */ \"(ssr)/./styles/globals.css\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(ssr)/./node_modules/next/dist/api/navigation.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n// Metadata needs to be exported from a server component, so this won't work in a client component\n// Moving this to a separate file or removing it for now\nconst metadata = {\n title: \"ZeoTap Data Ingestion Tool\",\n description: \"Bidirectional ClickHouse & Flat File Data Ingestion Tool\"\n};\nfunction RootLayout({ children }) {\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n // Function to handle home button click - will navigate to the home page\n const handleHomeClick = ()=>{\n router.push(\"/\");\n router.refresh(); // Force a refresh to reset state\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"en\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"head\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"title\", {\n children: metadata.title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 34,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"meta\", {\n name: \"description\",\n content: metadata.description\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 35,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 33,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n className: (next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default().className),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"bg-gradient-to-r from-primary to-accent text-white shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between py-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-shrink-0 w-10 h-10 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-primary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 45,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 46,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 44,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 43,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-bold tracking-tight\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 50,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-medium text-blue-100\",\n children: \"Data Ingestion Tool\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 51,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 49,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 42,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex items-center space-x-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium text-blue-100\",\n children: \"Bidirectional ClickHouse & Flat File Data Ingestion\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 55,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"px-4 py-2 bg-white text-primary rounded-md text-sm font-medium hover:bg-blue-50 transition-colors flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 61,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 60,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 56,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 54,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"md:hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"text-white hover:text-blue-100 flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 72,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 71,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 41,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 40,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 39,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"container mx-auto py-8 px-4\",\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 80,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"footer\", {\n className: \"bg-secondary text-white p-4 mt-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col md:flex-row justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2 mb-4 md:mb-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 text-secondary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 87,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 88,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 86,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 85,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 91,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 84,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n children: [\n \"\\xa9 \",\n new Date().getFullYear(),\n \" ZeoTap | Data Ingestion Tool\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 93,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-4 mt-4 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"https://github.com/harshit1634\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 97,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 96,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 95,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 102,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 101,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 100,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 94,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 83,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 82,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 81,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 38,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 37,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 32,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9hcHAvbGF5b3V0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQVFNQTtBQUp5QjtBQUVhO0FBSTVDLGtHQUFrRztBQUNsRyx3REFBd0Q7QUFDeEQsTUFBTUUsV0FBVztJQUNmQyxPQUFPO0lBQ1BDLGFBQWE7QUFDZjtBQUVlLFNBQVNDLFdBQVcsRUFDakNDLFFBQVEsRUFHUjtJQUNBLE1BQU1DLFNBQVNOLDBEQUFTQTtJQUV4Qix3RUFBd0U7SUFDeEUsTUFBTU8sa0JBQWtCO1FBQ3RCRCxPQUFPRSxJQUFJLENBQUM7UUFDWkYsT0FBT0csT0FBTyxJQUFJLGlDQUFpQztJQUNyRDtJQUVBLHFCQUNFLDhEQUFDQztRQUFLQyxNQUFLOzswQkFDVCw4REFBQ0M7O2tDQUNDLDhEQUFDVjtrQ0FBT0QsU0FBU0MsS0FBSzs7Ozs7O2tDQUN0Qiw4REFBQ1c7d0JBQUtDLE1BQUs7d0JBQWNDLFNBQVNkLFNBQVNFLFdBQVc7Ozs7Ozs7Ozs7OzswQkFFeEQsOERBQUNhO2dCQUFLQyxXQUFXbEIsMkpBQWU7MEJBQzlCLDRFQUFDbUI7b0JBQUlELFdBQVU7O3NDQUNiLDhEQUFDRTs0QkFBT0YsV0FBVTtzQ0FDaEIsNEVBQUNDO2dDQUFJRCxXQUFVOzBDQUNiLDRFQUFDQztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUNDOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ0M7b0RBQUlELFdBQVU7OERBQ2IsNEVBQUNHO3dEQUFJSCxXQUFVO3dEQUF1QkksU0FBUTt3REFBWUMsTUFBSzt3REFBT0MsT0FBTTs7MEVBQzFFLDhEQUFDQztnRUFBS0MsR0FBRTtnRUFBd0JILE1BQUs7Ozs7OzswRUFDckMsOERBQUNFO2dFQUFLQyxHQUFFO2dFQUFzQkgsTUFBSztnRUFBZUksU0FBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7OERBRzlELDhEQUFDUjs7c0VBQ0MsOERBQUNTOzREQUFHVixXQUFVO3NFQUFvQzs7Ozs7O3NFQUNsRCw4REFBQ1c7NERBQUVYLFdBQVU7c0VBQW9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7c0RBR3JELDhEQUFDQzs0Q0FBSUQsV0FBVTs7OERBQ2IsOERBQUNZO29EQUFLWixXQUFVOzhEQUFvQzs7Ozs7OzhEQUNwRCw4REFBQ2E7b0RBQ0NDLFNBQVN4QjtvREFDVFUsV0FBVTs7c0VBRVYsOERBQUNHOzREQUFJSCxXQUFVOzREQUFlSyxNQUFLOzREQUFPVSxRQUFPOzREQUFlWCxTQUFROzREQUFZRSxPQUFNO3NFQUN4Riw0RUFBQ0M7Z0VBQUtTLGVBQWM7Z0VBQVFDLGdCQUFlO2dFQUFRQyxhQUFZO2dFQUFJVixHQUFFOzs7Ozs7Ozs7Ozt3REFDakU7Ozs7Ozs7Ozs7Ozs7c0RBSVYsOERBQUNQOzRDQUFJRCxXQUFVO3NEQUNiLDRFQUFDYTtnREFDQ0MsU0FBU3hCO2dEQUNUVSxXQUFVOztrRUFFViw4REFBQ0c7d0RBQUlILFdBQVU7d0RBQWVLLE1BQUs7d0RBQU9VLFFBQU87d0RBQWVYLFNBQVE7d0RBQVlFLE9BQU07a0VBQ3hGLDRFQUFDQzs0REFBS1MsZUFBYzs0REFBUUMsZ0JBQWU7NERBQVFDLGFBQVk7NERBQUlWLEdBQUU7Ozs7Ozs7Ozs7O29EQUNqRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FPaEIsOERBQUNXOzRCQUFLbkIsV0FBVTtzQ0FBK0JaOzs7Ozs7c0NBQy9DLDhEQUFDZ0M7NEJBQU9wQixXQUFVO3NDQUNoQiw0RUFBQ0M7Z0NBQUlELFdBQVU7MENBQ2IsNEVBQUNDO29DQUFJRCxXQUFVOztzREFDYiw4REFBQ0M7NENBQUlELFdBQVU7OzhEQUNiLDhEQUFDQztvREFBSUQsV0FBVTs4REFDYiw0RUFBQ0c7d0RBQUlILFdBQVU7d0RBQXlCSSxTQUFRO3dEQUFZQyxNQUFLO3dEQUFPQyxPQUFNOzswRUFDNUUsOERBQUNDO2dFQUFLQyxHQUFFO2dFQUF3QkgsTUFBSzs7Ozs7OzBFQUNyQyw4REFBQ0U7Z0VBQUtDLEdBQUU7Z0VBQXNCSCxNQUFLO2dFQUFlSSxTQUFROzs7Ozs7Ozs7Ozs7Ozs7Ozs4REFHOUQsOERBQUNHO29EQUFLWixXQUFVOzhEQUFjOzs7Ozs7Ozs7Ozs7c0RBRWhDLDhEQUFDVzs0Q0FBRVgsV0FBVTs7Z0RBQVU7Z0RBQVEsSUFBSXFCLE9BQU9DLFdBQVc7Z0RBQUc7Ozs7Ozs7c0RBQ3hELDhEQUFDckI7NENBQUlELFdBQVU7OzhEQUNiLDhEQUFDdUI7b0RBQUVDLE1BQUs7b0RBQWlDQyxRQUFPO29EQUFTQyxLQUFJO29EQUFzQjFCLFdBQVU7OERBQzNGLDRFQUFDRzt3REFBSUgsV0FBVTt3REFBVUssTUFBSzt3REFBZUQsU0FBUTt3REFBWXVCLGVBQVk7a0VBQzNFLDRFQUFDcEI7NERBQUtxQixVQUFTOzREQUFVcEIsR0FBRTs0REFBbXRCcUIsVUFBUzs7Ozs7Ozs7Ozs7Ozs7Ozs4REFHM3ZCLDhEQUFDTjtvREFBRUMsTUFBSztvREFBSXhCLFdBQVU7OERBQ3BCLDRFQUFDRzt3REFBSUgsV0FBVTt3REFBVUssTUFBSzt3REFBZUQsU0FBUTt3REFBWXVCLGVBQVk7a0VBQzNFLDRFQUFDcEI7NERBQUtDLEdBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXOUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vYXBwL2xheW91dC50c3g/OTk4OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XHJcblxyXG5pbXBvcnQgdHlwZSB7IE1ldGFkYXRhIH0gZnJvbSAnbmV4dCc7XHJcbmltcG9ydCB7IEludGVyIH0gZnJvbSAnbmV4dC9mb250L2dvb2dsZSc7XHJcbmltcG9ydCAnLi4vc3R5bGVzL2dsb2JhbHMuY3NzJztcclxuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJztcclxuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJztcclxuXHJcbmNvbnN0IGludGVyID0gSW50ZXIoeyBzdWJzZXRzOiBbJ2xhdGluJ10gfSk7XHJcblxyXG4vLyBNZXRhZGF0YSBuZWVkcyB0byBiZSBleHBvcnRlZCBmcm9tIGEgc2VydmVyIGNvbXBvbmVudCwgc28gdGhpcyB3b24ndCB3b3JrIGluIGEgY2xpZW50IGNvbXBvbmVudFxyXG4vLyBNb3ZpbmcgdGhpcyB0byBhIHNlcGFyYXRlIGZpbGUgb3IgcmVtb3ZpbmcgaXQgZm9yIG5vd1xyXG5jb25zdCBtZXRhZGF0YSA9IHtcclxuICB0aXRsZTogJ1plb1RhcCBEYXRhIEluZ2VzdGlvbiBUb29sJyxcclxuICBkZXNjcmlwdGlvbjogJ0JpZGlyZWN0aW9uYWwgQ2xpY2tIb3VzZSAmIEZsYXQgRmlsZSBEYXRhIEluZ2VzdGlvbiBUb29sJyxcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJvb3RMYXlvdXQoe1xyXG4gIGNoaWxkcmVuLFxyXG59OiBSZWFkb25seTx7XHJcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcclxufT4pIHtcclxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIGhvbWUgYnV0dG9uIGNsaWNrIC0gd2lsbCBuYXZpZ2F0ZSB0byB0aGUgaG9tZSBwYWdlXHJcbiAgY29uc3QgaGFuZGxlSG9tZUNsaWNrID0gKCkgPT4ge1xyXG4gICAgcm91dGVyLnB1c2goJy8nKTtcclxuICAgIHJvdXRlci5yZWZyZXNoKCk7IC8vIEZvcmNlIGEgcmVmcmVzaCB0byByZXNldCBzdGF0ZVxyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8aHRtbCBsYW5nPVwiZW5cIj5cclxuICAgICAgPGhlYWQ+XHJcbiAgICAgICAgPHRpdGxlPnttZXRhZGF0YS50aXRsZX08L3RpdGxlPlxyXG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9e21ldGFkYXRhLmRlc2NyaXB0aW9ufSAvPlxyXG4gICAgICA8L2hlYWQ+XHJcbiAgICAgIDxib2R5IGNsYXNzTmFtZT17aW50ZXIuY2xhc3NOYW1lfT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ncmF5LTUwXCI+XHJcbiAgICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cImJnLWdyYWRpZW50LXRvLXIgZnJvbS1wcmltYXJ5IHRvLWFjY2VudCB0ZXh0LXdoaXRlIHNoYWRvdy1sZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvIHB4LTRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweS00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTAgdy0xMCBoLTEwIGJnLXdoaXRlIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNiB0ZXh0LXByaW1hcnlcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDE5TDIxIDEyTDEyIDVWMTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMTlMMTIgMTJMMyA1VjE5WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBvcGFjaXR5PVwiMC41XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtYm9sZCB0cmFja2luZy10aWdodFwiPlplb1RhcDwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWJsdWUtMTAwXCI+RGF0YSBJbmdlc3Rpb24gVG9vbDwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNlwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS0xMDBcIj5CaWRpcmVjdGlvbmFsIENsaWNrSG91c2UgJiBGbGF0IEZpbGUgRGF0YSBJbmdlc3Rpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlSG9tZUNsaWNrfVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTQgcHktMiBiZy13aGl0ZSB0ZXh0LXByaW1hcnkgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGhvdmVyOmJnLWJsdWUtNTAgdHJhbnNpdGlvbi1jb2xvcnMgZmxleCBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00IG1yLTFcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9XCIyXCIgZD1cIk0zIDEybDItMm0wIDBsNy03IDcgN20tNy03djE0XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIEhvbWVcclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWQ6aGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVIb21lQ2xpY2t9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSBob3Zlcjp0ZXh0LWJsdWUtMTAwIGZsZXggaXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNSBtci0xXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPVwiMlwiIGQ9XCJNMyAxMmwyLTJtMCAwbDctNyA3IDdtLTctN3YxNFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICBIb21lXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICA8bWFpbiBjbGFzc05hbWU9XCJjb250YWluZXIgbXgtYXV0byBweS04IHB4LTRcIj57Y2hpbGRyZW59PC9tYWluPlxyXG4gICAgICAgICAgPGZvb3RlciBjbGFzc05hbWU9XCJiZy1zZWNvbmRhcnkgdGV4dC13aGl0ZSBwLTQgbXQtOFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIG1kOmZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIG1iLTQgbWQ6bWItMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctOCBoLTggYmctd2hpdGUgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00IHRleHQtc2Vjb25kYXJ5XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiAxOUwyMSAxMkwxMiA1VjE5WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE5TDEyIDEyTDMgNVYxOVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgb3BhY2l0eT1cIjAuNVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPlplb1RhcDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbVwiPiZjb3B5OyB7bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpfSBaZW9UYXAgfCBEYXRhIEluZ2VzdGlvbiBUb29sPC9wPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNwYWNlLXgtNCBtdC00IG1kOm10LTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9oYXJzaGl0MTYzNFwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIGhvdmVyOnRleHQtYmx1ZS0xMDAgdHJhbnNpdGlvbi1jb2xvcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbFJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMiAyQzYuNDc3IDIgMiA2LjQ4NCAyIDEyLjAxN2MwIDQuNDI1IDIuODY1IDguMTggNi44MzkgOS41MDQuNS4wOTIuNjgyLS4yMTcuNjgyLS40ODMgMC0uMjM3LS4wMDgtLjg2OC0uMDEzLTEuNzAzLTIuNzgyLjYwNS0zLjM2OS0xLjM0My0zLjM2OS0xLjM0My0uNDU0LTEuMTU4LTEuMTEtMS40NjYtMS4xMS0xLjQ2Ni0uOTA4LS42Mi4wNjktLjYwOC4wNjktLjYwOCAxLjAwMy4wNyAxLjUzMSAxLjAzMiAxLjUzMSAxLjAzMi44OTIgMS41MyAyLjM0MSAxLjA4OCAyLjkxLjgzMi4wOTItLjY0Ny4zNS0xLjA4OC42MzYtMS4zMzgtMi4yMi0uMjUzLTQuNTU1LTEuMTEzLTQuNTU1LTQuOTUxIDAtMS4wOTMuMzktMS45ODggMS4wMjktMi42ODgtLjEwMy0uMjUzLS40NDYtMS4yNzIuMDk4LTIuNjUgMCAwIC44NC0uMjcgMi43NSAxLjAyNkE5LjU2NCA5LjU2NCAwIDAxMTIgNi44NDRjLjg1LjAwNCAxLjcwNS4xMTUgMi41MDQuMzM3IDEuOTA5LTEuMjk2IDIuNzQ3LTEuMDI3IDIuNzQ3LTEuMDI3LjU0NiAxLjM3OS4yMDIgMi4zOTguMSAyLjY1MS42NC43IDEuMDI4IDEuNTk1IDEuMDI4IDIuNjg4IDAgMy44NDgtMi4zMzkgNC42OTUtNC41NjYgNC45NDMuMzU5LjMwOS42NzguOTIuNjc4IDEuODU1IDAgMS4zMzgtLjAxMiAyLjQxOS0uMDEyIDIuNzQ3IDAgLjI2OC4xOC41OC42ODguNDgyQTEwLjAxOSAxMC4wMTkgMCAwMDIyIDEyLjAxN0MyMiA2LjQ4NCAxNy41MjIgMiAxMiAyelwiIGNsaXBSdWxlPVwiZXZlbm9kZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIGhvdmVyOnRleHQtYmx1ZS0xMDAgdHJhbnNpdGlvbi1jb2xvcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjI5IDIwLjI1MWM3LjU0NyAwIDExLjY3NS02LjI1MyAxMS42NzUtMTEuNjc1IDAtLjE3OCAwLS4zNTUtLjAxMi0uNTNBOC4zNDggOC4zNDggMCAwMDIyIDUuOTJhOC4xOSA4LjE5IDAgMDEtMi4zNTcuNjQ2IDQuMTE4IDQuMTE4IDAgMDAxLjgwNC0yLjI3IDguMjI0IDguMjI0IDAgMDEtMi42MDUuOTk2IDQuMTA3IDQuMTA3IDAgMDAtNi45OTMgMy43NDMgMTEuNjUgMTEuNjUgMCAwMS04LjQ1Ny00LjI4NyA0LjEwNiA0LjEwNiAwIDAwMS4yNyA1LjQ3N0E0LjA3MiA0LjA3MiAwIDAxMi44IDkuNzEzdi4wNTJhNC4xMDUgNC4xMDUgMCAwMDMuMjkyIDQuMDIyIDQuMDk1IDQuMDk1IDAgMDEtMS44NTMuMDcgNC4xMDggNC4xMDggMCAwMDMuODM0IDIuODVBOC4yMzMgOC4yMzMgMCAwMTIgMTguNDA3YTExLjYxNiAxMS42MTYgMCAwMDYuMjkgMS44NFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9vdGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2JvZHk+XHJcbiAgICA8L2h0bWw+XHJcbiAgKTtcclxufSAiXSwibmFtZXMiOlsiaW50ZXIiLCJ1c2VSb3V0ZXIiLCJtZXRhZGF0YSIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJSb290TGF5b3V0IiwiY2hpbGRyZW4iLCJyb3V0ZXIiLCJoYW5kbGVIb21lQ2xpY2siLCJwdXNoIiwicmVmcmVzaCIsImh0bWwiLCJsYW5nIiwiaGVhZCIsIm1ldGEiLCJuYW1lIiwiY29udGVudCIsImJvZHkiLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJzdmciLCJ2aWV3Qm94IiwiZmlsbCIsInhtbG5zIiwicGF0aCIsImQiLCJvcGFjaXR5IiwiaDEiLCJwIiwic3BhbiIsImJ1dHRvbiIsIm9uQ2xpY2siLCJzdHJva2UiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsIm1haW4iLCJmb290ZXIiLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJhIiwiaHJlZiIsInRhcmdldCIsInJlbCIsImFyaWEtaGlkZGVuIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./app/layout.tsx\n"); + +/***/ }), + +/***/ "(ssr)/./app/page.tsx": +/*!**********************!*\ + !*** ./app/page.tsx ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Home)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ClickHouseForm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ClickHouseForm */ \"(ssr)/./components/ClickHouseForm.tsx\");\n/* harmony import */ var _components_FlatFileForm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/FlatFileForm */ \"(ssr)/./components/FlatFileForm.tsx\");\n/* harmony import */ var _components_TableSelection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/TableSelection */ \"(ssr)/./components/TableSelection.tsx\");\n/* harmony import */ var _components_DataPreview__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/DataPreview */ \"(ssr)/./components/DataPreview.tsx\");\n/* harmony import */ var _components_IngestionResults__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/IngestionResults */ \"(ssr)/./components/IngestionResults.tsx\");\n/* harmony import */ var _components_StatusIndicator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/StatusIndicator */ \"(ssr)/./components/StatusIndicator.tsx\");\n/* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/lib/api */ \"(ssr)/./lib/api.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\n\n\n\n\n\n\n\nvar Step;\n// Step enum\n(function(Step) {\n Step[Step[\"SourceSelection\"] = 1] = \"SourceSelection\";\n Step[Step[\"SourceConfiguration\"] = 2] = \"SourceConfiguration\";\n Step[Step[\"TargetConfiguration\"] = 3] = \"TargetConfiguration\";\n Step[Step[\"SchemaSelection\"] = 4] = \"SchemaSelection\";\n Step[Step[\"Preview\"] = 5] = \"Preview\";\n Step[Step[\"Results\"] = 6] = \"Results\";\n})(Step || (Step = {}));\nfunction Home() {\n // State\n const [currentStep, setCurrentStep] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(1);\n const [source, setSource] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [target, setTarget] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [clickHouseConfig, setClickHouseConfig] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n host: \"\",\n port: 8123,\n database: \"\",\n user: \"\",\n jwtToken: \"\",\n secure: false\n });\n const [flatFileConfig, setFlatFileConfig] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n delimiter: \",\",\n hasHeader: true,\n filePath: \"\",\n fileName: \"\"\n });\n const [tables, setTables] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [joinCondition, setJoinCondition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [useJoin, setUseJoin] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [previewData, setPreviewData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [isLoading, setIsLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [ingestionResults, setIngestionResults] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"idle\");\n const [statusMessage, setStatusMessage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // Effect to track status changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (isLoading) {\n if (currentStep === 2 || currentStep === 3) {\n setStatus(\"connecting\");\n setStatusMessage(\"Connecting to the data source...\");\n } else if (currentStep === 4) {\n setStatus(\"fetching\");\n setStatusMessage(\"Fetching schema information...\");\n } else if (currentStep === 5) {\n setStatus(\"fetching\");\n setStatusMessage(\"Generating data preview...\");\n } else if (currentStep === 6) {\n setStatus(\"ingesting\");\n setStatusMessage(\"Ingesting data between sources...\");\n }\n } else if (error) {\n setStatus(\"error\");\n setStatusMessage(error);\n } else if (currentStep === 6 && ingestionResults) {\n setStatus(\"completed\");\n setStatusMessage(ingestionResults.message || \"Operation completed successfully\");\n } else {\n setStatus(\"idle\");\n setStatusMessage(\"\");\n }\n }, [\n isLoading,\n error,\n currentStep,\n ingestionResults\n ]);\n // Handlers\n const handleSourceSelection = (selectedSource)=>{\n setSource(selectedSource);\n setTarget(selectedSource === \"clickhouse\" ? \"flatfile\" : \"clickhouse\");\n setCurrentStep(2);\n };\n const handleClickHouseConfigSubmit = async (config)=>{\n try {\n setIsLoading(true);\n setError(\"\");\n // Test connection\n const testResult = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].testClickHouseConnection(config);\n if (!testResult.success) {\n throw new Error(testResult.message);\n }\n // Save config\n setClickHouseConfig(config);\n // If ClickHouse is the source, fetch tables\n if (source === \"clickhouse\") {\n const tables = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getClickHouseTables(config);\n setTables(tables);\n setCurrentStep(4);\n } else {\n // ClickHouse is the target\n setCurrentStep(3);\n }\n } catch (err) {\n setError(err.message || \"Failed to connect to ClickHouse\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleFlatFileConfigSubmit = async (config, file)=>{\n try {\n setIsLoading(true);\n setError(\"\");\n // If file upload is required (when flat file is the source)\n if (source === \"flatfile\" && file) {\n const uploadResult = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].uploadFile(file, config.delimiter, config.hasHeader);\n if (!uploadResult.success) {\n throw new Error(uploadResult.message);\n }\n // Set config with file path\n setFlatFileConfig({\n ...config,\n filePath: uploadResult.filePath\n });\n // Set schema information\n setTables([\n uploadResult.schema\n ]);\n setCurrentStep(4);\n } else {\n // Just store the config (flat file is the target)\n setFlatFileConfig(config);\n setCurrentStep(source === \"clickhouse\" ? 4 : 3);\n }\n } catch (err) {\n setError(err.message || \"Failed to process flat file\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleTableSelection = (selectedTables, useJoinOption, joinConditionText)=>{\n setTables(selectedTables);\n setUseJoin(useJoinOption);\n setJoinCondition(joinConditionText);\n setCurrentStep(5);\n // Generate a preview\n generatePreview(selectedTables, useJoinOption, joinConditionText);\n };\n const generatePreview = async (selectedTables, useJoinOption, joinConditionText)=>{\n try {\n setIsLoading(true);\n setError(\"\");\n const request = {\n source: source,\n target: target,\n clickHouseConfig: source === \"clickhouse\" ? clickHouseConfig : target === \"clickhouse\" ? clickHouseConfig : undefined,\n flatFileConfig: source === \"flatfile\" ? flatFileConfig : target === \"flatfile\" ? flatFileConfig : undefined,\n tables: selectedTables,\n joinCondition: joinConditionText,\n useJoin: useJoinOption\n };\n const previewResult = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].previewData(request);\n if (!previewResult.success) {\n throw new Error(previewResult.message);\n }\n setPreviewData(previewResult.data);\n } catch (err) {\n setError(err.message || \"Failed to generate preview\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleStartIngestion = async ()=>{\n try {\n setIsLoading(true);\n setError(\"\");\n const request = {\n source: source,\n target: target,\n clickHouseConfig: source === \"clickhouse\" ? clickHouseConfig : target === \"clickhouse\" ? clickHouseConfig : undefined,\n flatFileConfig: source === \"flatfile\" ? flatFileConfig : target === \"flatfile\" ? flatFileConfig : undefined,\n tables,\n joinCondition,\n useJoin\n };\n const response = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].ingestData(request);\n setIngestionResults(response);\n setCurrentStep(6);\n } catch (err) {\n setError(err.message || \"Ingestion failed\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleReset = ()=>{\n setCurrentStep(1);\n setSource(\"\");\n setTarget(\"\");\n setTables([]);\n setJoinCondition(\"\");\n setUseJoin(false);\n setPreviewData([]);\n setIngestionResults(null);\n setError(\"\");\n };\n // Helper functions for the UI\n const getStepName = (step)=>{\n switch(step){\n case 1:\n return \"Source Selection\";\n case 2:\n return \"Source Config\";\n case 3:\n return \"Target Config\";\n case 4:\n return \"Column Selection\";\n case 5:\n return \"Preview\";\n case 6:\n return \"Results\";\n default:\n return \"\";\n }\n };\n // Function to check if a step is accessible for navigation\n const canNavigateToStep = (step)=>{\n // Always allow going to initial step\n if (step === 1) return true;\n // Don't allow going back to completed steps after results\n if (currentStep === 6) return false;\n // Only allow going to steps that have been completed or are the current one\n if (step <= currentStep) return true;\n return false;\n };\n // Function to handle step navigation when clicking on the progress indicator\n const handleStepClick = (step)=>{\n if (!canNavigateToStep(step)) return;\n // If loading, don't allow navigation\n if (isLoading) return;\n setCurrentStep(step);\n };\n // Render different steps\n const renderStep = ()=>{\n switch(currentStep){\n case 1:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-semibold mb-6\",\n children: \"Select Data Source and Target\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 267,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col space-y-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 gap-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: `btn ${source === \"clickhouse\" ? \"btn-primary\" : \"btn-secondary\"} p-6 text-center transition-all transform hover:scale-105`,\n onClick: ()=>handleSourceSelection(\"clickhouse\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center mb-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-10 w-10\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 276,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 275,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 274,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium\",\n children: \"ClickHouse to Flat File\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 279,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm opacity-90\",\n children: \"Export data from ClickHouse database to a flat file (CSV)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 280,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 270,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: `btn ${source === \"flatfile\" ? \"btn-primary\" : \"btn-secondary\"} p-6 text-center transition-all transform hover:scale-105`,\n onClick: ()=>handleSourceSelection(\"flatfile\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center mb-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-10 w-10\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 288,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 287,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 286,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium\",\n children: \"Flat File to ClickHouse\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 291,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm opacity-90\",\n children: \"Import data from a flat file (CSV) to ClickHouse database\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 292,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 282,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 269,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 268,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 266,\n columnNumber: 11\n }, this);\n case 2:\n return source === \"clickhouse\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ClickHouseForm__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onSubmit: handleClickHouseConfigSubmit,\n initialValues: clickHouseConfig,\n isLoading: isLoading,\n title: \"ClickHouse Source Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 301,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_FlatFileForm__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onSubmit: handleFlatFileConfigSubmit,\n initialValues: flatFileConfig,\n requireFile: true,\n isLoading: isLoading,\n title: \"Flat File Source Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 308,\n columnNumber: 11\n }, this);\n case 3:\n return target === \"clickhouse\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ClickHouseForm__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onSubmit: handleClickHouseConfigSubmit,\n initialValues: clickHouseConfig,\n isLoading: isLoading,\n title: \"ClickHouse Target Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 319,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_FlatFileForm__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onSubmit: handleFlatFileConfigSubmit,\n initialValues: flatFileConfig,\n requireFile: false,\n isLoading: isLoading,\n title: \"Flat File Target Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 326,\n columnNumber: 11\n }, this);\n case 4:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_TableSelection__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n tables: tables,\n onSubmit: handleTableSelection,\n isMultiTableEnabled: source === \"clickhouse\",\n isLoading: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 337,\n columnNumber: 11\n }, this);\n case 5:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_DataPreview__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n data: previewData,\n onStartIngestion: handleStartIngestion,\n onBack: ()=>setCurrentStep(4),\n isLoading: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 347,\n columnNumber: 11\n }, this);\n case 6:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_IngestionResults__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n results: ingestionResults,\n onReset: handleReset\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 357,\n columnNumber: 11\n }, this);\n default:\n return null;\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ol\", {\n className: \"flex items-center justify-center w-full\",\n children: Object.values(Step).filter((step)=>typeof step === \"number\").map((step)=>{\n const isNavigable = canNavigateToStep(step);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n className: `flex items-center ${currentStep >= step ? \"text-primary\" : \"text-gray-400\"}`,\n onClick: ()=>handleStepClick(step),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `flex flex-col items-center ${isNavigable ? \"cursor-pointer hover:opacity-80\" : \"\"}`,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `flex items-center justify-center w-10 h-10 rounded-full ${currentStep > step ? \"bg-primary text-white\" : currentStep === step ? \"bg-primary text-white ring-4 ring-blue-100\" : \"bg-gray-200\"}`,\n children: step\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 382,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs mt-1\",\n children: getStepName(step)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 389,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 381,\n columnNumber: 17\n }, this),\n step < Object.keys(Step).length / 2 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `w-16 h-1 mx-2 ${currentStep > step ? \"bg-primary\" : \"bg-gray-200\"}`\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 392,\n columnNumber: 19\n }, this)\n ]\n }, step, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 376,\n columnNumber: 15\n }, this);\n })\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 372,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 371,\n columnNumber: 7\n }, this),\n (status !== \"idle\" || error) && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_StatusIndicator__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n status: status,\n message: statusMessage\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 402,\n columnNumber: 9\n }, this),\n renderStep()\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 369,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9hcHAvcGFnZS50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUU0QztBQUNhO0FBQ0o7QUFDSTtBQUNOO0FBQ1U7QUFDRjtBQUN1RDs7QUFFbEgsWUFBWTtVQUNQUzs7Ozs7OztHQUFBQSxTQUFBQTtBQVNVLFNBQVNDO0lBQ3RCLFFBQVE7SUFDUixNQUFNLENBQUNDLGFBQWFDLGVBQWUsR0FBR1osK0NBQVFBO0lBQzlDLE1BQU0sQ0FBQ2EsUUFBUUMsVUFBVSxHQUFHZCwrQ0FBUUEsQ0FBaUM7SUFDckUsTUFBTSxDQUFDZSxRQUFRQyxVQUFVLEdBQUdoQiwrQ0FBUUEsQ0FBaUM7SUFDckUsTUFBTSxDQUFDaUIsa0JBQWtCQyxvQkFBb0IsR0FBR2xCLCtDQUFRQSxDQUFtQjtRQUN6RW1CLE1BQU07UUFDTkMsTUFBTTtRQUNOQyxVQUFVO1FBQ1ZDLE1BQU07UUFDTkMsVUFBVTtRQUNWQyxRQUFRO0lBQ1Y7SUFDQSxNQUFNLENBQUNDLGdCQUFnQkMsa0JBQWtCLEdBQUcxQiwrQ0FBUUEsQ0FBaUI7UUFDbkUyQixXQUFXO1FBQ1hDLFdBQVc7UUFDWEMsVUFBVTtRQUNWQyxVQUFVO0lBQ1o7SUFDQSxNQUFNLENBQUNDLFFBQVFDLFVBQVUsR0FBR2hDLCtDQUFRQSxDQUFjLEVBQUU7SUFDcEQsTUFBTSxDQUFDaUMsZUFBZUMsaUJBQWlCLEdBQUdsQywrQ0FBUUEsQ0FBUztJQUMzRCxNQUFNLENBQUNtQyxTQUFTQyxXQUFXLEdBQUdwQywrQ0FBUUEsQ0FBVTtJQUNoRCxNQUFNLENBQUNxQyxhQUFhQyxlQUFlLEdBQUd0QywrQ0FBUUEsQ0FBYSxFQUFFO0lBQzdELE1BQU0sQ0FBQ3VDLFdBQVdDLGFBQWEsR0FBR3hDLCtDQUFRQSxDQUFVO0lBQ3BELE1BQU0sQ0FBQ3lDLE9BQU9DLFNBQVMsR0FBRzFDLCtDQUFRQSxDQUFTO0lBQzNDLE1BQU0sQ0FBQzJDLGtCQUFrQkMsb0JBQW9CLEdBQUc1QywrQ0FBUUEsQ0FBMkI7SUFDbkYsTUFBTSxDQUFDNkMsUUFBUUMsVUFBVSxHQUFHOUMsK0NBQVFBLENBQTJFO0lBQy9HLE1BQU0sQ0FBQytDLGVBQWVDLGlCQUFpQixHQUFHaEQsK0NBQVFBLENBQVM7SUFFM0QsaUNBQWlDO0lBQ2pDQyxnREFBU0EsQ0FBQztRQUNSLElBQUlzQyxXQUFXO1lBQ2IsSUFBSTVCLHFCQUE0Q0EsbUJBQTBDO2dCQUN4Rm1DLFVBQVU7Z0JBQ1ZFLGlCQUFpQjtZQUNuQixPQUFPLElBQUlyQyxtQkFBc0M7Z0JBQy9DbUMsVUFBVTtnQkFDVkUsaUJBQWlCO1lBQ25CLE9BQU8sSUFBSXJDLG1CQUE4QjtnQkFDdkNtQyxVQUFVO2dCQUNWRSxpQkFBaUI7WUFDbkIsT0FBTyxJQUFJckMsbUJBQThCO2dCQUN2Q21DLFVBQVU7Z0JBQ1ZFLGlCQUFpQjtZQUNuQjtRQUNGLE9BQU8sSUFBSVAsT0FBTztZQUNoQkssVUFBVTtZQUNWRSxpQkFBaUJQO1FBQ25CLE9BQU8sSUFBSTlCLHFCQUFnQ2dDLGtCQUFrQjtZQUMzREcsVUFBVTtZQUNWRSxpQkFBaUJMLGlCQUFpQk0sT0FBTyxJQUFJO1FBQy9DLE9BQU87WUFDTEgsVUFBVTtZQUNWRSxpQkFBaUI7UUFDbkI7SUFDRixHQUFHO1FBQUNUO1FBQVdFO1FBQU85QjtRQUFhZ0M7S0FBaUI7SUFFcEQsV0FBVztJQUNYLE1BQU1PLHdCQUF3QixDQUFDQztRQUM3QnJDLFVBQVVxQztRQUNWbkMsVUFBVW1DLG1CQUFtQixlQUFlLGFBQWE7UUFDekR2QztJQUNGO0lBRUEsTUFBTXdDLCtCQUErQixPQUFPQztRQUMxQyxJQUFJO1lBQ0ZiLGFBQWE7WUFDYkUsU0FBUztZQUVULGtCQUFrQjtZQUNsQixNQUFNWSxhQUFhLE1BQU05QyxnREFBR0EsQ0FBQytDLHdCQUF3QixDQUFDRjtZQUN0RCxJQUFJLENBQUNDLFdBQVdFLE9BQU8sRUFBRTtnQkFDdkIsTUFBTSxJQUFJQyxNQUFNSCxXQUFXTCxPQUFPO1lBQ3BDO1lBRUEsY0FBYztZQUNkL0Isb0JBQW9CbUM7WUFFcEIsNENBQTRDO1lBQzVDLElBQUl4QyxXQUFXLGNBQWM7Z0JBQzNCLE1BQU1rQixTQUFTLE1BQU12QixnREFBR0EsQ0FBQ2tELG1CQUFtQixDQUFDTDtnQkFDN0NyQixVQUFVRDtnQkFDVm5CO1lBQ0YsT0FBTztnQkFDTCwyQkFBMkI7Z0JBQzNCQTtZQUNGO1FBQ0YsRUFBRSxPQUFPK0MsS0FBVTtZQUNqQmpCLFNBQVNpQixJQUFJVixPQUFPLElBQUk7UUFDMUIsU0FBVTtZQUNSVCxhQUFhO1FBQ2Y7SUFDRjtJQUVBLE1BQU1vQiw2QkFBNkIsT0FBT1AsUUFBd0JRO1FBQ2hFLElBQUk7WUFDRnJCLGFBQWE7WUFDYkUsU0FBUztZQUVULDREQUE0RDtZQUM1RCxJQUFJN0IsV0FBVyxjQUFjZ0QsTUFBTTtnQkFDakMsTUFBTUMsZUFBZSxNQUFNdEQsZ0RBQUdBLENBQUN1RCxVQUFVLENBQUNGLE1BQU1SLE9BQU8xQixTQUFTLEVBQUUwQixPQUFPekIsU0FBUztnQkFDbEYsSUFBSSxDQUFDa0MsYUFBYU4sT0FBTyxFQUFFO29CQUN6QixNQUFNLElBQUlDLE1BQU1LLGFBQWFiLE9BQU87Z0JBQ3RDO2dCQUVBLDRCQUE0QjtnQkFDNUJ2QixrQkFBa0I7b0JBQ2hCLEdBQUcyQixNQUFNO29CQUNUeEIsVUFBVWlDLGFBQWFqQyxRQUFRO2dCQUNqQztnQkFFQSx5QkFBeUI7Z0JBQ3pCRyxVQUFVO29CQUFDOEIsYUFBYUUsTUFBTTtpQkFBQztnQkFDL0JwRDtZQUNGLE9BQU87Z0JBQ0wsa0RBQWtEO2dCQUNsRGMsa0JBQWtCMkI7Z0JBQ2xCekMsZUFBZUMsV0FBVztZQUM1QjtRQUNGLEVBQUUsT0FBTzhDLEtBQVU7WUFDakJqQixTQUFTaUIsSUFBSVYsT0FBTyxJQUFJO1FBQzFCLFNBQVU7WUFDUlQsYUFBYTtRQUNmO0lBQ0Y7SUFFQSxNQUFNeUIsdUJBQXVCLENBQUNDLGdCQUE2QkMsZUFBd0JDO1FBQ2pGcEMsVUFBVWtDO1FBQ1Y5QixXQUFXK0I7UUFDWGpDLGlCQUFpQmtDO1FBQ2pCeEQ7UUFFQSxxQkFBcUI7UUFDckJ5RCxnQkFBZ0JILGdCQUFnQkMsZUFBZUM7SUFDakQ7SUFFQSxNQUFNQyxrQkFBa0IsT0FBT0gsZ0JBQTZCQyxlQUF3QkM7UUFDbEYsSUFBSTtZQUNGNUIsYUFBYTtZQUNiRSxTQUFTO1lBRVQsTUFBTTRCLFVBQTRCO2dCQUNoQ3pELFFBQVFBO2dCQUNSRSxRQUFRQTtnQkFDUkUsa0JBQWtCSixXQUFXLGVBQWVJLG1CQUFtQkYsV0FBVyxlQUFlRSxtQkFBbUJzRDtnQkFDNUc5QyxnQkFBZ0JaLFdBQVcsYUFBYVksaUJBQWlCVixXQUFXLGFBQWFVLGlCQUFpQjhDO2dCQUNsR3hDLFFBQVFtQztnQkFDUmpDLGVBQWVtQztnQkFDZmpDLFNBQVNnQztZQUNYO1lBRUEsTUFBTUssZ0JBQWdCLE1BQU1oRSxnREFBR0EsQ0FBQzZCLFdBQVcsQ0FBQ2lDO1lBQzVDLElBQUksQ0FBQ0UsY0FBY2hCLE9BQU8sRUFBRTtnQkFDMUIsTUFBTSxJQUFJQyxNQUFNZSxjQUFjdkIsT0FBTztZQUN2QztZQUVBWCxlQUFla0MsY0FBY0MsSUFBSTtRQUNuQyxFQUFFLE9BQU9kLEtBQVU7WUFDakJqQixTQUFTaUIsSUFBSVYsT0FBTyxJQUFJO1FBQzFCLFNBQVU7WUFDUlQsYUFBYTtRQUNmO0lBQ0Y7SUFFQSxNQUFNa0MsdUJBQXVCO1FBQzNCLElBQUk7WUFDRmxDLGFBQWE7WUFDYkUsU0FBUztZQUVULE1BQU00QixVQUE0QjtnQkFDaEN6RCxRQUFRQTtnQkFDUkUsUUFBUUE7Z0JBQ1JFLGtCQUFrQkosV0FBVyxlQUFlSSxtQkFBbUJGLFdBQVcsZUFBZUUsbUJBQW1Cc0Q7Z0JBQzVHOUMsZ0JBQWdCWixXQUFXLGFBQWFZLGlCQUFpQlYsV0FBVyxhQUFhVSxpQkFBaUI4QztnQkFDbEd4QztnQkFDQUU7Z0JBQ0FFO1lBQ0Y7WUFFQSxNQUFNd0MsV0FBVyxNQUFNbkUsZ0RBQUdBLENBQUNvRSxVQUFVLENBQUNOO1lBQ3RDMUIsb0JBQW9CK0I7WUFDcEIvRDtRQUNGLEVBQUUsT0FBTytDLEtBQVU7WUFDakJqQixTQUFTaUIsSUFBSVYsT0FBTyxJQUFJO1FBQzFCLFNBQVU7WUFDUlQsYUFBYTtRQUNmO0lBQ0Y7SUFFQSxNQUFNcUMsY0FBYztRQUNsQmpFO1FBQ0FFLFVBQVU7UUFDVkUsVUFBVTtRQUNWZ0IsVUFBVSxFQUFFO1FBQ1pFLGlCQUFpQjtRQUNqQkUsV0FBVztRQUNYRSxlQUFlLEVBQUU7UUFDakJNLG9CQUFvQjtRQUNwQkYsU0FBUztJQUNYO0lBRUEsOEJBQThCO0lBQzlCLE1BQU1vQyxjQUFjLENBQUNDO1FBQ25CLE9BQVFBO1lBQ047Z0JBQTJCLE9BQU87WUFDbEM7Z0JBQStCLE9BQU87WUFDdEM7Z0JBQStCLE9BQU87WUFDdEM7Z0JBQTJCLE9BQU87WUFDbEM7Z0JBQW1CLE9BQU87WUFDMUI7Z0JBQW1CLE9BQU87WUFDMUI7Z0JBQVMsT0FBTztRQUNsQjtJQUNGO0lBRUEsMkRBQTJEO0lBQzNELE1BQU1DLG9CQUFvQixDQUFDRDtRQUN6QixxQ0FBcUM7UUFDckMsSUFBSUEsWUFBK0IsT0FBTztRQUUxQywwREFBMEQ7UUFDMUQsSUFBSXBFLG1CQUE4QixPQUFPO1FBRXpDLDRFQUE0RTtRQUM1RSxJQUFJb0UsUUFBUXBFLGFBQWEsT0FBTztRQUVoQyxPQUFPO0lBQ1Q7SUFFQSw2RUFBNkU7SUFDN0UsTUFBTXNFLGtCQUFrQixDQUFDRjtRQUN2QixJQUFJLENBQUNDLGtCQUFrQkQsT0FBTztRQUU5QixxQ0FBcUM7UUFDckMsSUFBSXhDLFdBQVc7UUFFZjNCLGVBQWVtRTtJQUNqQjtJQUVBLHlCQUF5QjtJQUN6QixNQUFNRyxhQUFhO1FBQ2pCLE9BQVF2RTtZQUNOO2dCQUNFLHFCQUNFLDhEQUFDd0U7b0JBQUlDLFdBQVU7O3NDQUNiLDhEQUFDQzs0QkFBR0QsV0FBVTtzQ0FBNkI7Ozs7OztzQ0FDM0MsOERBQUNEOzRCQUFJQyxXQUFVO3NDQUNiLDRFQUFDRDtnQ0FBSUMsV0FBVTs7a0RBQ2IsOERBQUNFO3dDQUNDRixXQUFXLENBQUMsSUFBSSxFQUFFdkUsV0FBVyxlQUFlLGdCQUFnQixnQkFBZ0IseURBQXlELENBQUM7d0NBQ3RJMEUsU0FBUyxJQUFNckMsc0JBQXNCOzswREFFckMsOERBQUNpQztnREFBSUMsV0FBVTswREFDYiw0RUFBQ0k7b0RBQUlDLE9BQU07b0RBQTZCTCxXQUFVO29EQUFZTSxNQUFLO29EQUFPQyxTQUFRO29EQUFZQyxRQUFPOzhEQUNuRyw0RUFBQ0M7d0RBQUtDLGVBQWM7d0RBQVFDLGdCQUFlO3dEQUFRQyxhQUFhO3dEQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzBEQUd6RSw4REFBQ0M7Z0RBQUdkLFdBQVU7MERBQXNCOzs7Ozs7MERBQ3BDLDhEQUFDZTtnREFBRWYsV0FBVTswREFBMEI7Ozs7Ozs7Ozs7OztrREFFekMsOERBQUNFO3dDQUNDRixXQUFXLENBQUMsSUFBSSxFQUFFdkUsV0FBVyxhQUFhLGdCQUFnQixnQkFBZ0IseURBQXlELENBQUM7d0NBQ3BJMEUsU0FBUyxJQUFNckMsc0JBQXNCOzswREFFckMsOERBQUNpQztnREFBSUMsV0FBVTswREFDYiw0RUFBQ0k7b0RBQUlDLE9BQU07b0RBQTZCTCxXQUFVO29EQUFZTSxNQUFLO29EQUFPQyxTQUFRO29EQUFZQyxRQUFPOzhEQUNuRyw0RUFBQ0M7d0RBQUtDLGVBQWM7d0RBQVFDLGdCQUFlO3dEQUFRQyxhQUFhO3dEQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzBEQUd6RSw4REFBQ0M7Z0RBQUdkLFdBQVU7MERBQXNCOzs7Ozs7MERBQ3BDLDhEQUFDZTtnREFBRWYsV0FBVTswREFBMEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBT25EO2dCQUNFLE9BQU92RSxXQUFXLDZCQUNoQiw4REFBQ1gsa0VBQWNBO29CQUNia0csVUFBVWhEO29CQUNWaUQsZUFBZXBGO29CQUNmc0IsV0FBV0E7b0JBQ1grRCxPQUFNOzs7Ozt5Q0FHUiw4REFBQ25HLGdFQUFZQTtvQkFDWGlHLFVBQVV4QztvQkFDVnlDLGVBQWU1RTtvQkFDZjhFLGFBQWE7b0JBQ2JoRSxXQUFXQTtvQkFDWCtELE9BQU07Ozs7OztZQUlaO2dCQUNFLE9BQU92RixXQUFXLDZCQUNoQiw4REFBQ2Isa0VBQWNBO29CQUNia0csVUFBVWhEO29CQUNWaUQsZUFBZXBGO29CQUNmc0IsV0FBV0E7b0JBQ1grRCxPQUFNOzs7Ozt5Q0FHUiw4REFBQ25HLGdFQUFZQTtvQkFDWGlHLFVBQVV4QztvQkFDVnlDLGVBQWU1RTtvQkFDZjhFLGFBQWE7b0JBQ2JoRSxXQUFXQTtvQkFDWCtELE9BQU07Ozs7OztZQUlaO2dCQUNFLHFCQUNFLDhEQUFDbEcsa0VBQWNBO29CQUNiMkIsUUFBUUE7b0JBQ1JxRSxVQUFVbkM7b0JBQ1Z1QyxxQkFBcUIzRixXQUFXO29CQUNoQzBCLFdBQVdBOzs7Ozs7WUFJakI7Z0JBQ0UscUJBQ0UsOERBQUNsQywrREFBV0E7b0JBQ1ZvRSxNQUFNcEM7b0JBQ05vRSxrQkFBa0IvQjtvQkFDbEJnQyxRQUFRLElBQU05RjtvQkFDZDJCLFdBQVdBOzs7Ozs7WUFJakI7Z0JBQ0UscUJBQ0UsOERBQUNqQyxvRUFBZ0JBO29CQUNmcUcsU0FBU2hFO29CQUNUaUUsU0FBUy9COzs7Ozs7WUFJZjtnQkFDRSxPQUFPO1FBQ1g7SUFDRjtJQUVBLHFCQUNFLDhEQUFDTTs7MEJBRUMsOERBQUNBO2dCQUFJQyxXQUFVOzBCQUNiLDRFQUFDeUI7b0JBQUd6QixXQUFVOzhCQUNYMEIsT0FBT0MsTUFBTSxDQUFDdEcsTUFBTXVHLE1BQU0sQ0FBQ2pDLENBQUFBLE9BQVEsT0FBT0EsU0FBUyxVQUFVa0MsR0FBRyxDQUFDLENBQUNsQzt3QkFDakUsTUFBTW1DLGNBQWNsQyxrQkFBa0JEO3dCQUN0QyxxQkFDRSw4REFBQ29DOzRCQUVDL0IsV0FBVyxDQUFDLGtCQUFrQixFQUFFekUsZUFBZW9FLE9BQU8saUJBQWlCLGdCQUFnQixDQUFDOzRCQUN4RlEsU0FBUyxJQUFNTixnQkFBZ0JGOzs4Q0FFL0IsOERBQUNJO29DQUFJQyxXQUFXLENBQUMsMkJBQTJCLEVBQUU4QixjQUFjLG9DQUFvQyxHQUFHLENBQUM7O3NEQUNsRyw4REFBQ0U7NENBQUtoQyxXQUFXLENBQUMsd0RBQXdELEVBQ3hFekUsY0FBY29FLE9BQU8sMEJBQ3JCcEUsZ0JBQWdCb0UsT0FBTywrQ0FDdkIsY0FDRCxDQUFDO3NEQUNDQTs7Ozs7O3NEQUVILDhEQUFDcUM7NENBQUtoQyxXQUFVO3NEQUFnQk4sWUFBWUM7Ozs7Ozs7Ozs7OztnQ0FFN0NBLE9BQU8rQixPQUFPTyxJQUFJLENBQUM1RyxNQUFNNkcsTUFBTSxHQUFHLG1CQUNqQyw4REFBQ25DO29DQUFJQyxXQUFXLENBQUMsY0FBYyxFQUFFekUsY0FBY29FLE9BQU8sZUFBZSxjQUFjLENBQUM7Ozs7Ozs7MkJBZmpGQTs7Ozs7b0JBbUJYOzs7Ozs7Ozs7OztZQUtGbEMsQ0FBQUEsV0FBVyxVQUFVSixLQUFJLG1CQUN6Qiw4REFBQ2xDLG1FQUFlQTtnQkFBQ3NDLFFBQVFBO2dCQUFRSSxTQUFTRjs7Ozs7O1lBSTNDbUM7Ozs7Ozs7QUFHUCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9hcHAvcGFnZS50c3g/NzYwMyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XHJcblxyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgQ2xpY2tIb3VzZUZvcm0gZnJvbSAnQC9jb21wb25lbnRzL0NsaWNrSG91c2VGb3JtJztcclxuaW1wb3J0IEZsYXRGaWxlRm9ybSBmcm9tICdAL2NvbXBvbmVudHMvRmxhdEZpbGVGb3JtJztcclxuaW1wb3J0IFRhYmxlU2VsZWN0aW9uIGZyb20gJ0AvY29tcG9uZW50cy9UYWJsZVNlbGVjdGlvbic7XHJcbmltcG9ydCBEYXRhUHJldmlldyBmcm9tICdAL2NvbXBvbmVudHMvRGF0YVByZXZpZXcnO1xyXG5pbXBvcnQgSW5nZXN0aW9uUmVzdWx0cyBmcm9tICdAL2NvbXBvbmVudHMvSW5nZXN0aW9uUmVzdWx0cyc7XHJcbmltcG9ydCBTdGF0dXNJbmRpY2F0b3IgZnJvbSAnQC9jb21wb25lbnRzL1N0YXR1c0luZGljYXRvcic7XHJcbmltcG9ydCBhcGksIHsgQ2xpY2tIb3VzZUNvbmZpZywgRmxhdEZpbGVDb25maWcsIEluZ2VzdGlvblJlcXVlc3QsIFRhYmxlSW5mbywgSW5nZXN0aW9uUmVzcG9uc2UgfSBmcm9tICdAL2xpYi9hcGknO1xyXG5cclxuLy8gU3RlcCBlbnVtXHJcbmVudW0gU3RlcCB7XHJcbiAgU291cmNlU2VsZWN0aW9uID0gMSxcclxuICBTb3VyY2VDb25maWd1cmF0aW9uLFxyXG4gIFRhcmdldENvbmZpZ3VyYXRpb24sXHJcbiAgU2NoZW1hU2VsZWN0aW9uLFxyXG4gIFByZXZpZXcsXHJcbiAgUmVzdWx0c1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIb21lKCkge1xyXG4gIC8vIFN0YXRlXHJcbiAgY29uc3QgW2N1cnJlbnRTdGVwLCBzZXRDdXJyZW50U3RlcF0gPSB1c2VTdGF0ZTxTdGVwPihTdGVwLlNvdXJjZVNlbGVjdGlvbik7XHJcbiAgY29uc3QgW3NvdXJjZSwgc2V0U291cmNlXSA9IHVzZVN0YXRlPCdjbGlja2hvdXNlJyB8ICdmbGF0ZmlsZScgfCAnJz4oJycpO1xyXG4gIGNvbnN0IFt0YXJnZXQsIHNldFRhcmdldF0gPSB1c2VTdGF0ZTwnY2xpY2tob3VzZScgfCAnZmxhdGZpbGUnIHwgJyc+KCcnKTtcclxuICBjb25zdCBbY2xpY2tIb3VzZUNvbmZpZywgc2V0Q2xpY2tIb3VzZUNvbmZpZ10gPSB1c2VTdGF0ZTxDbGlja0hvdXNlQ29uZmlnPih7XHJcbiAgICBob3N0OiAnJyxcclxuICAgIHBvcnQ6IDgxMjMsXHJcbiAgICBkYXRhYmFzZTogJycsXHJcbiAgICB1c2VyOiAnJyxcclxuICAgIGp3dFRva2VuOiAnJyxcclxuICAgIHNlY3VyZTogZmFsc2VcclxuICB9KTtcclxuICBjb25zdCBbZmxhdEZpbGVDb25maWcsIHNldEZsYXRGaWxlQ29uZmlnXSA9IHVzZVN0YXRlPEZsYXRGaWxlQ29uZmlnPih7XHJcbiAgICBkZWxpbWl0ZXI6ICcsJyxcclxuICAgIGhhc0hlYWRlcjogdHJ1ZSxcclxuICAgIGZpbGVQYXRoOiAnJyxcclxuICAgIGZpbGVOYW1lOiAnJ1xyXG4gIH0pO1xyXG4gIGNvbnN0IFt0YWJsZXMsIHNldFRhYmxlc10gPSB1c2VTdGF0ZTxUYWJsZUluZm9bXT4oW10pO1xyXG4gIGNvbnN0IFtqb2luQ29uZGl0aW9uLCBzZXRKb2luQ29uZGl0aW9uXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpO1xyXG4gIGNvbnN0IFt1c2VKb2luLCBzZXRVc2VKb2luXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcclxuICBjb25zdCBbcHJldmlld0RhdGEsIHNldFByZXZpZXdEYXRhXSA9IHVzZVN0YXRlPHN0cmluZ1tdW10+KFtdKTtcclxuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XHJcbiAgY29uc3QgW2luZ2VzdGlvblJlc3VsdHMsIHNldEluZ2VzdGlvblJlc3VsdHNdID0gdXNlU3RhdGU8SW5nZXN0aW9uUmVzcG9uc2UgfCBudWxsPihudWxsKTtcclxuICBjb25zdCBbc3RhdHVzLCBzZXRTdGF0dXNdID0gdXNlU3RhdGU8J2lkbGUnIHwgJ2Nvbm5lY3RpbmcnIHwgJ2ZldGNoaW5nJyB8ICdpbmdlc3RpbmcnIHwgJ2NvbXBsZXRlZCcgfCAnZXJyb3InPignaWRsZScpO1xyXG4gIGNvbnN0IFtzdGF0dXNNZXNzYWdlLCBzZXRTdGF0dXNNZXNzYWdlXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpO1xyXG5cclxuICAvLyBFZmZlY3QgdG8gdHJhY2sgc3RhdHVzIGNoYW5nZXNcclxuICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgaWYgKGlzTG9hZGluZykge1xyXG4gICAgICBpZiAoY3VycmVudFN0ZXAgPT09IFN0ZXAuU291cmNlQ29uZmlndXJhdGlvbiB8fCBjdXJyZW50U3RlcCA9PT0gU3RlcC5UYXJnZXRDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgc2V0U3RhdHVzKCdjb25uZWN0aW5nJyk7XHJcbiAgICAgICAgc2V0U3RhdHVzTWVzc2FnZSgnQ29ubmVjdGluZyB0byB0aGUgZGF0YSBzb3VyY2UuLi4nKTtcclxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50U3RlcCA9PT0gU3RlcC5TY2hlbWFTZWxlY3Rpb24pIHtcclxuICAgICAgICBzZXRTdGF0dXMoJ2ZldGNoaW5nJyk7XHJcbiAgICAgICAgc2V0U3RhdHVzTWVzc2FnZSgnRmV0Y2hpbmcgc2NoZW1hIGluZm9ybWF0aW9uLi4uJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFN0ZXAgPT09IFN0ZXAuUHJldmlldykge1xyXG4gICAgICAgIHNldFN0YXR1cygnZmV0Y2hpbmcnKTtcclxuICAgICAgICBzZXRTdGF0dXNNZXNzYWdlKCdHZW5lcmF0aW5nIGRhdGEgcHJldmlldy4uLicpO1xyXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGVwID09PSBTdGVwLlJlc3VsdHMpIHtcclxuICAgICAgICBzZXRTdGF0dXMoJ2luZ2VzdGluZycpO1xyXG4gICAgICAgIHNldFN0YXR1c01lc3NhZ2UoJ0luZ2VzdGluZyBkYXRhIGJldHdlZW4gc291cmNlcy4uLicpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGVycm9yKSB7XHJcbiAgICAgIHNldFN0YXR1cygnZXJyb3InKTtcclxuICAgICAgc2V0U3RhdHVzTWVzc2FnZShlcnJvcik7XHJcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGVwID09PSBTdGVwLlJlc3VsdHMgJiYgaW5nZXN0aW9uUmVzdWx0cykge1xyXG4gICAgICBzZXRTdGF0dXMoJ2NvbXBsZXRlZCcpO1xyXG4gICAgICBzZXRTdGF0dXNNZXNzYWdlKGluZ2VzdGlvblJlc3VsdHMubWVzc2FnZSB8fCAnT3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFN0YXR1cygnaWRsZScpO1xyXG4gICAgICBzZXRTdGF0dXNNZXNzYWdlKCcnKTtcclxuICAgIH1cclxuICB9LCBbaXNMb2FkaW5nLCBlcnJvciwgY3VycmVudFN0ZXAsIGluZ2VzdGlvblJlc3VsdHNdKTtcclxuXHJcbiAgLy8gSGFuZGxlcnNcclxuICBjb25zdCBoYW5kbGVTb3VyY2VTZWxlY3Rpb24gPSAoc2VsZWN0ZWRTb3VyY2U6ICdjbGlja2hvdXNlJyB8ICdmbGF0ZmlsZScpID0+IHtcclxuICAgIHNldFNvdXJjZShzZWxlY3RlZFNvdXJjZSk7XHJcbiAgICBzZXRUYXJnZXQoc2VsZWN0ZWRTb3VyY2UgPT09ICdjbGlja2hvdXNlJyA/ICdmbGF0ZmlsZScgOiAnY2xpY2tob3VzZScpO1xyXG4gICAgc2V0Q3VycmVudFN0ZXAoU3RlcC5Tb3VyY2VDb25maWd1cmF0aW9uKTtcclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVDbGlja0hvdXNlQ29uZmlnU3VibWl0ID0gYXN5bmMgKGNvbmZpZzogQ2xpY2tIb3VzZUNvbmZpZykgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xyXG4gICAgICBzZXRFcnJvcignJyk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBUZXN0IGNvbm5lY3Rpb25cclxuICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IGF3YWl0IGFwaS50ZXN0Q2xpY2tIb3VzZUNvbm5lY3Rpb24oY29uZmlnKTtcclxuICAgICAgaWYgKCF0ZXN0UmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGVzdFJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2F2ZSBjb25maWdcclxuICAgICAgc2V0Q2xpY2tIb3VzZUNvbmZpZyhjb25maWcpO1xyXG5cclxuICAgICAgLy8gSWYgQ2xpY2tIb3VzZSBpcyB0aGUgc291cmNlLCBmZXRjaCB0YWJsZXNcclxuICAgICAgaWYgKHNvdXJjZSA9PT0gJ2NsaWNraG91c2UnKSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVzID0gYXdhaXQgYXBpLmdldENsaWNrSG91c2VUYWJsZXMoY29uZmlnKTtcclxuICAgICAgICBzZXRUYWJsZXModGFibGVzKTtcclxuICAgICAgICBzZXRDdXJyZW50U3RlcChTdGVwLlNjaGVtYVNlbGVjdGlvbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gQ2xpY2tIb3VzZSBpcyB0aGUgdGFyZ2V0XHJcbiAgICAgICAgc2V0Q3VycmVudFN0ZXAoU3RlcC5UYXJnZXRDb25maWd1cmF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjb25uZWN0IHRvIENsaWNrSG91c2UnKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlRmxhdEZpbGVDb25maWdTdWJtaXQgPSBhc3luYyAoY29uZmlnOiBGbGF0RmlsZUNvbmZpZywgZmlsZT86IEZpbGUpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHNldElzTG9hZGluZyh0cnVlKTtcclxuICAgICAgc2V0RXJyb3IoJycpO1xyXG5cclxuICAgICAgLy8gSWYgZmlsZSB1cGxvYWQgaXMgcmVxdWlyZWQgKHdoZW4gZmxhdCBmaWxlIGlzIHRoZSBzb3VyY2UpXHJcbiAgICAgIGlmIChzb3VyY2UgPT09ICdmbGF0ZmlsZScgJiYgZmlsZSkge1xyXG4gICAgICAgIGNvbnN0IHVwbG9hZFJlc3VsdCA9IGF3YWl0IGFwaS51cGxvYWRGaWxlKGZpbGUsIGNvbmZpZy5kZWxpbWl0ZXIsIGNvbmZpZy5oYXNIZWFkZXIpO1xyXG4gICAgICAgIGlmICghdXBsb2FkUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcih1cGxvYWRSZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXQgY29uZmlnIHdpdGggZmlsZSBwYXRoXHJcbiAgICAgICAgc2V0RmxhdEZpbGVDb25maWcoe1xyXG4gICAgICAgICAgLi4uY29uZmlnLFxyXG4gICAgICAgICAgZmlsZVBhdGg6IHVwbG9hZFJlc3VsdC5maWxlUGF0aFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBTZXQgc2NoZW1hIGluZm9ybWF0aW9uXHJcbiAgICAgICAgc2V0VGFibGVzKFt1cGxvYWRSZXN1bHQuc2NoZW1hXSk7XHJcbiAgICAgICAgc2V0Q3VycmVudFN0ZXAoU3RlcC5TY2hlbWFTZWxlY3Rpb24pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEp1c3Qgc3RvcmUgdGhlIGNvbmZpZyAoZmxhdCBmaWxlIGlzIHRoZSB0YXJnZXQpXHJcbiAgICAgICAgc2V0RmxhdEZpbGVDb25maWcoY29uZmlnKTtcclxuICAgICAgICBzZXRDdXJyZW50U3RlcChzb3VyY2UgPT09ICdjbGlja2hvdXNlJyA/IFN0ZXAuU2NoZW1hU2VsZWN0aW9uIDogU3RlcC5UYXJnZXRDb25maWd1cmF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBwcm9jZXNzIGZsYXQgZmlsZScpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVUYWJsZVNlbGVjdGlvbiA9IChzZWxlY3RlZFRhYmxlczogVGFibGVJbmZvW10sIHVzZUpvaW5PcHRpb246IGJvb2xlYW4sIGpvaW5Db25kaXRpb25UZXh0OiBzdHJpbmcpID0+IHtcclxuICAgIHNldFRhYmxlcyhzZWxlY3RlZFRhYmxlcyk7XHJcbiAgICBzZXRVc2VKb2luKHVzZUpvaW5PcHRpb24pO1xyXG4gICAgc2V0Sm9pbkNvbmRpdGlvbihqb2luQ29uZGl0aW9uVGV4dCk7XHJcbiAgICBzZXRDdXJyZW50U3RlcChTdGVwLlByZXZpZXcpO1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIGEgcHJldmlld1xyXG4gICAgZ2VuZXJhdGVQcmV2aWV3KHNlbGVjdGVkVGFibGVzLCB1c2VKb2luT3B0aW9uLCBqb2luQ29uZGl0aW9uVGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZ2VuZXJhdGVQcmV2aWV3ID0gYXN5bmMgKHNlbGVjdGVkVGFibGVzOiBUYWJsZUluZm9bXSwgdXNlSm9pbk9wdGlvbjogYm9vbGVhbiwgam9pbkNvbmRpdGlvblRleHQ6IHN0cmluZykgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xyXG4gICAgICBzZXRFcnJvcignJyk7XHJcblxyXG4gICAgICBjb25zdCByZXF1ZXN0OiBJbmdlc3Rpb25SZXF1ZXN0ID0ge1xyXG4gICAgICAgIHNvdXJjZTogc291cmNlIGFzICdjbGlja2hvdXNlJyB8ICdmbGF0ZmlsZScsXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQgYXMgJ2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJyxcclxuICAgICAgICBjbGlja0hvdXNlQ29uZmlnOiBzb3VyY2UgPT09ICdjbGlja2hvdXNlJyA/IGNsaWNrSG91c2VDb25maWcgOiB0YXJnZXQgPT09ICdjbGlja2hvdXNlJyA/IGNsaWNrSG91c2VDb25maWcgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgZmxhdEZpbGVDb25maWc6IHNvdXJjZSA9PT0gJ2ZsYXRmaWxlJyA/IGZsYXRGaWxlQ29uZmlnIDogdGFyZ2V0ID09PSAnZmxhdGZpbGUnID8gZmxhdEZpbGVDb25maWcgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGFibGVzOiBzZWxlY3RlZFRhYmxlcyxcclxuICAgICAgICBqb2luQ29uZGl0aW9uOiBqb2luQ29uZGl0aW9uVGV4dCxcclxuICAgICAgICB1c2VKb2luOiB1c2VKb2luT3B0aW9uXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCBwcmV2aWV3UmVzdWx0ID0gYXdhaXQgYXBpLnByZXZpZXdEYXRhKHJlcXVlc3QpO1xyXG4gICAgICBpZiAoIXByZXZpZXdSZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcmV2aWV3UmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzZXRQcmV2aWV3RGF0YShwcmV2aWV3UmVzdWx0LmRhdGEpO1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgc2V0RXJyb3IoZXJyLm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBnZW5lcmF0ZSBwcmV2aWV3Jyk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZVN0YXJ0SW5nZXN0aW9uID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xyXG4gICAgICBzZXRFcnJvcignJyk7XHJcblxyXG4gICAgICBjb25zdCByZXF1ZXN0OiBJbmdlc3Rpb25SZXF1ZXN0ID0ge1xyXG4gICAgICAgIHNvdXJjZTogc291cmNlIGFzICdjbGlja2hvdXNlJyB8ICdmbGF0ZmlsZScsXHJcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQgYXMgJ2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJyxcclxuICAgICAgICBjbGlja0hvdXNlQ29uZmlnOiBzb3VyY2UgPT09ICdjbGlja2hvdXNlJyA/IGNsaWNrSG91c2VDb25maWcgOiB0YXJnZXQgPT09ICdjbGlja2hvdXNlJyA/IGNsaWNrSG91c2VDb25maWcgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgZmxhdEZpbGVDb25maWc6IHNvdXJjZSA9PT0gJ2ZsYXRmaWxlJyA/IGZsYXRGaWxlQ29uZmlnIDogdGFyZ2V0ID09PSAnZmxhdGZpbGUnID8gZmxhdEZpbGVDb25maWcgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgdGFibGVzLFxyXG4gICAgICAgIGpvaW5Db25kaXRpb24sXHJcbiAgICAgICAgdXNlSm9pblxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuaW5nZXN0RGF0YShyZXF1ZXN0KTtcclxuICAgICAgc2V0SW5nZXN0aW9uUmVzdWx0cyhyZXNwb25zZSk7XHJcbiAgICAgIHNldEN1cnJlbnRTdGVwKFN0ZXAuUmVzdWx0cyk7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSB8fCAnSW5nZXN0aW9uIGZhaWxlZCcpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVSZXNldCA9ICgpID0+IHtcclxuICAgIHNldEN1cnJlbnRTdGVwKFN0ZXAuU291cmNlU2VsZWN0aW9uKTtcclxuICAgIHNldFNvdXJjZSgnJyk7XHJcbiAgICBzZXRUYXJnZXQoJycpO1xyXG4gICAgc2V0VGFibGVzKFtdKTtcclxuICAgIHNldEpvaW5Db25kaXRpb24oJycpO1xyXG4gICAgc2V0VXNlSm9pbihmYWxzZSk7XHJcbiAgICBzZXRQcmV2aWV3RGF0YShbXSk7XHJcbiAgICBzZXRJbmdlc3Rpb25SZXN1bHRzKG51bGwpO1xyXG4gICAgc2V0RXJyb3IoJycpO1xyXG4gIH07XHJcblxyXG4gIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBVSVxyXG4gIGNvbnN0IGdldFN0ZXBOYW1lID0gKHN0ZXA6IFN0ZXApID0+IHtcclxuICAgIHN3aXRjaCAoc3RlcCkge1xyXG4gICAgICBjYXNlIFN0ZXAuU291cmNlU2VsZWN0aW9uOiByZXR1cm4gJ1NvdXJjZSBTZWxlY3Rpb24nO1xyXG4gICAgICBjYXNlIFN0ZXAuU291cmNlQ29uZmlndXJhdGlvbjogcmV0dXJuICdTb3VyY2UgQ29uZmlnJztcclxuICAgICAgY2FzZSBTdGVwLlRhcmdldENvbmZpZ3VyYXRpb246IHJldHVybiAnVGFyZ2V0IENvbmZpZyc7XHJcbiAgICAgIGNhc2UgU3RlcC5TY2hlbWFTZWxlY3Rpb246IHJldHVybiAnQ29sdW1uIFNlbGVjdGlvbic7XHJcbiAgICAgIGNhc2UgU3RlcC5QcmV2aWV3OiByZXR1cm4gJ1ByZXZpZXcnO1xyXG4gICAgICBjYXNlIFN0ZXAuUmVzdWx0czogcmV0dXJuICdSZXN1bHRzJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8vIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgc3RlcCBpcyBhY2Nlc3NpYmxlIGZvciBuYXZpZ2F0aW9uXHJcbiAgY29uc3QgY2FuTmF2aWdhdGVUb1N0ZXAgPSAoc3RlcDogU3RlcCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgLy8gQWx3YXlzIGFsbG93IGdvaW5nIHRvIGluaXRpYWwgc3RlcFxyXG4gICAgaWYgKHN0ZXAgPT09IFN0ZXAuU291cmNlU2VsZWN0aW9uKSByZXR1cm4gdHJ1ZTtcclxuICAgIFxyXG4gICAgLy8gRG9uJ3QgYWxsb3cgZ29pbmcgYmFjayB0byBjb21wbGV0ZWQgc3RlcHMgYWZ0ZXIgcmVzdWx0c1xyXG4gICAgaWYgKGN1cnJlbnRTdGVwID09PSBTdGVwLlJlc3VsdHMpIHJldHVybiBmYWxzZTtcclxuICAgIFxyXG4gICAgLy8gT25seSBhbGxvdyBnb2luZyB0byBzdGVwcyB0aGF0IGhhdmUgYmVlbiBjb21wbGV0ZWQgb3IgYXJlIHRoZSBjdXJyZW50IG9uZVxyXG4gICAgaWYgKHN0ZXAgPD0gY3VycmVudFN0ZXApIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIHN0ZXAgbmF2aWdhdGlvbiB3aGVuIGNsaWNraW5nIG9uIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3JcclxuICBjb25zdCBoYW5kbGVTdGVwQ2xpY2sgPSAoc3RlcDogU3RlcCkgPT4ge1xyXG4gICAgaWYgKCFjYW5OYXZpZ2F0ZVRvU3RlcChzdGVwKSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICAvLyBJZiBsb2FkaW5nLCBkb24ndCBhbGxvdyBuYXZpZ2F0aW9uXHJcbiAgICBpZiAoaXNMb2FkaW5nKSByZXR1cm47XHJcbiAgICBcclxuICAgIHNldEN1cnJlbnRTdGVwKHN0ZXApO1xyXG4gIH07XHJcblxyXG4gIC8vIFJlbmRlciBkaWZmZXJlbnQgc3RlcHNcclxuICBjb25zdCByZW5kZXJTdGVwID0gKCkgPT4ge1xyXG4gICAgc3dpdGNoIChjdXJyZW50U3RlcCkge1xyXG4gICAgICBjYXNlIFN0ZXAuU291cmNlU2VsZWN0aW9uOlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRcIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteGwgZm9udC1zZW1pYm9sZCBtYi02XCI+U2VsZWN0IERhdGEgU291cmNlIGFuZCBUYXJnZXQ8L2gyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgc3BhY2UteS00XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC02XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGJ0biAke3NvdXJjZSA9PT0gJ2NsaWNraG91c2UnID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tc2Vjb25kYXJ5J30gcC02IHRleHQtY2VudGVyIHRyYW5zaXRpb24tYWxsIHRyYW5zZm9ybSBob3ZlcjpzY2FsZS0xMDVgfVxyXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTb3VyY2VTZWxlY3Rpb24oJ2NsaWNraG91c2UnKX1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3NOYW1lPVwiaC0xMCB3LTEwXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9ezJ9IGQ9XCJNNSA4aDE0TTUgOGEyIDIgMCAxMTAtNGgxNGEyIDIgMCAxMTAgNE01IDh2MTBhMiAyIDAgMDAyIDJoMTBhMiAyIDAgMDAyLTJWOG0tOSA0aDRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW1cIj5DbGlja0hvdXNlIHRvIEZsYXQgRmlsZTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSBvcGFjaXR5LTkwXCI+RXhwb3J0IGRhdGEgZnJvbSBDbGlja0hvdXNlIGRhdGFiYXNlIHRvIGEgZmxhdCBmaWxlIChDU1YpPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGJ0biAke3NvdXJjZSA9PT0gJ2ZsYXRmaWxlJyA/ICdidG4tcHJpbWFyeScgOiAnYnRuLXNlY29uZGFyeSd9IHAtNiB0ZXh0LWNlbnRlciB0cmFuc2l0aW9uLWFsbCB0cmFuc2Zvcm0gaG92ZXI6c2NhbGUtMTA1YH1cclxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU291cmNlU2VsZWN0aW9uKCdmbGF0ZmlsZScpfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzc05hbWU9XCJoLTEwIHctMTBcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk05IDEyaDZtLTYgNGg2bTIgNUg3YTIgMiAwIDAxLTItMlY1YTIgMiAwIDAxMi0yaDUuNTg2YTEgMSAwIDAxLjcwNy4yOTNsNS40MTQgNS40MTRhMSAxIDAgMDEuMjkzLjcwN1YxOWEyIDIgMCAwMS0yIDJ6XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtXCI+RmxhdCBGaWxlIHRvIENsaWNrSG91c2U8L2gzPlxyXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIHRleHQtc20gb3BhY2l0eS05MFwiPkltcG9ydCBkYXRhIGZyb20gYSBmbGF0IGZpbGUgKENTVikgdG8gQ2xpY2tIb3VzZSBkYXRhYmFzZTwvcD5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICBjYXNlIFN0ZXAuU291cmNlQ29uZmlndXJhdGlvbjpcclxuICAgICAgICByZXR1cm4gc291cmNlID09PSAnY2xpY2tob3VzZScgPyAoXHJcbiAgICAgICAgICA8Q2xpY2tIb3VzZUZvcm0gXHJcbiAgICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVDbGlja0hvdXNlQ29uZmlnU3VibWl0fSBcclxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlcz17Y2xpY2tIb3VzZUNvbmZpZ30gXHJcbiAgICAgICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgICB0aXRsZT1cIkNsaWNrSG91c2UgU291cmNlIENvbmZpZ3VyYXRpb25cIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApIDogKFxyXG4gICAgICAgICAgPEZsYXRGaWxlRm9ybSBcclxuICAgICAgICAgICAgb25TdWJtaXQ9e2hhbmRsZUZsYXRGaWxlQ29uZmlnU3VibWl0fSBcclxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlcz17ZmxhdEZpbGVDb25maWd9XHJcbiAgICAgICAgICAgIHJlcXVpcmVGaWxlPXt0cnVlfVxyXG4gICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cclxuICAgICAgICAgICAgdGl0bGU9XCJGbGF0IEZpbGUgU291cmNlIENvbmZpZ3VyYXRpb25cIiBcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgU3RlcC5UYXJnZXRDb25maWd1cmF0aW9uOlxyXG4gICAgICAgIHJldHVybiB0YXJnZXQgPT09ICdjbGlja2hvdXNlJyA/IChcclxuICAgICAgICAgIDxDbGlja0hvdXNlRm9ybSBcclxuICAgICAgICAgICAgb25TdWJtaXQ9e2hhbmRsZUNsaWNrSG91c2VDb25maWdTdWJtaXR9IFxyXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzPXtjbGlja0hvdXNlQ29uZmlnfSBcclxuICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICAgIHRpdGxlPVwiQ2xpY2tIb3VzZSBUYXJnZXQgQ29uZmlndXJhdGlvblwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICkgOiAoXHJcbiAgICAgICAgICA8RmxhdEZpbGVGb3JtIFxyXG4gICAgICAgICAgICBvblN1Ym1pdD17aGFuZGxlRmxhdEZpbGVDb25maWdTdWJtaXR9IFxyXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzPXtmbGF0RmlsZUNvbmZpZ31cclxuICAgICAgICAgICAgcmVxdWlyZUZpbGU9e2ZhbHNlfVxyXG4gICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cclxuICAgICAgICAgICAgdGl0bGU9XCJGbGF0IEZpbGUgVGFyZ2V0IENvbmZpZ3VyYXRpb25cIiBcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgU3RlcC5TY2hlbWFTZWxlY3Rpb246XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxUYWJsZVNlbGVjdGlvbiBcclxuICAgICAgICAgICAgdGFibGVzPXt0YWJsZXN9IFxyXG4gICAgICAgICAgICBvblN1Ym1pdD17aGFuZGxlVGFibGVTZWxlY3Rpb259XHJcbiAgICAgICAgICAgIGlzTXVsdGlUYWJsZUVuYWJsZWQ9e3NvdXJjZSA9PT0gJ2NsaWNraG91c2UnfSBcclxuICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICBjYXNlIFN0ZXAuUHJldmlldzpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPERhdGFQcmV2aWV3IFxyXG4gICAgICAgICAgICBkYXRhPXtwcmV2aWV3RGF0YX0gXHJcbiAgICAgICAgICAgIG9uU3RhcnRJbmdlc3Rpb249e2hhbmRsZVN0YXJ0SW5nZXN0aW9ufVxyXG4gICAgICAgICAgICBvbkJhY2s9eygpID0+IHNldEN1cnJlbnRTdGVwKFN0ZXAuU2NoZW1hU2VsZWN0aW9uKX1cclxuICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICBjYXNlIFN0ZXAuUmVzdWx0czpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPEluZ2VzdGlvblJlc3VsdHMgXHJcbiAgICAgICAgICAgIHJlc3VsdHM9e2luZ2VzdGlvblJlc3VsdHN9IFxyXG4gICAgICAgICAgICBvblJlc2V0PXtoYW5kbGVSZXNldH1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXY+XHJcbiAgICAgIHsvKiBQcm9ncmVzcyBpbmRpY2F0b3IgKi99XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItOFwiPlxyXG4gICAgICAgIDxvbCBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LWZ1bGxcIj5cclxuICAgICAgICAgIHtPYmplY3QudmFsdWVzKFN0ZXApLmZpbHRlcihzdGVwID0+IHR5cGVvZiBzdGVwID09PSAnbnVtYmVyJykubWFwKChzdGVwKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzTmF2aWdhYmxlID0gY2FuTmF2aWdhdGVUb1N0ZXAoc3RlcCBhcyBTdGVwKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICA8bGkgXHJcbiAgICAgICAgICAgICAgICBrZXk9e3N0ZXB9IFxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmxleCBpdGVtcy1jZW50ZXIgJHtjdXJyZW50U3RlcCA+PSBzdGVwID8gJ3RleHQtcHJpbWFyeScgOiAndGV4dC1ncmF5LTQwMCd9YH1cclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVN0ZXBDbGljayhzdGVwIGFzIFN0ZXApfVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgJHtpc05hdmlnYWJsZSA/ICdjdXJzb3ItcG9pbnRlciBob3ZlcjpvcGFjaXR5LTgwJyA6ICcnfWB9PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2BmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB3LTEwIGgtMTAgcm91bmRlZC1mdWxsICR7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ZXAgPiBzdGVwID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZScgOiBcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RlcCA9PT0gc3RlcCA/ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUgcmluZy00IHJpbmctYmx1ZS0xMDAnIDogXHJcbiAgICAgICAgICAgICAgICAgICAgJ2JnLWdyYXktMjAwJ1xyXG4gICAgICAgICAgICAgICAgICB9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAge3N0ZXB9XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyBtdC0xXCI+e2dldFN0ZXBOYW1lKHN0ZXAgYXMgU3RlcCl9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB7c3RlcCA8IE9iamVjdC5rZXlzKFN0ZXApLmxlbmd0aCAvIDIgJiYgKFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YHctMTYgaC0xIG14LTIgJHtjdXJyZW50U3RlcCA+IHN0ZXAgPyAnYmctcHJpbWFyeScgOiAnYmctZ3JheS0yMDAnfWB9PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSl9XHJcbiAgICAgICAgPC9vbD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICB7LyogU3RhdHVzIGluZGljYXRvciAqL31cclxuICAgICAgeyhzdGF0dXMgIT09ICdpZGxlJyB8fCBlcnJvcikgJiYgKFxyXG4gICAgICAgIDxTdGF0dXNJbmRpY2F0b3Igc3RhdHVzPXtzdGF0dXN9IG1lc3NhZ2U9e3N0YXR1c01lc3NhZ2V9IC8+XHJcbiAgICAgICl9XHJcblxyXG4gICAgICB7LyogQ3VycmVudCBzdGVwIGNvbnRlbnQgKi99XHJcbiAgICAgIHtyZW5kZXJTdGVwKCl9XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsIkNsaWNrSG91c2VGb3JtIiwiRmxhdEZpbGVGb3JtIiwiVGFibGVTZWxlY3Rpb24iLCJEYXRhUHJldmlldyIsIkluZ2VzdGlvblJlc3VsdHMiLCJTdGF0dXNJbmRpY2F0b3IiLCJhcGkiLCJTdGVwIiwiSG9tZSIsImN1cnJlbnRTdGVwIiwic2V0Q3VycmVudFN0ZXAiLCJzb3VyY2UiLCJzZXRTb3VyY2UiLCJ0YXJnZXQiLCJzZXRUYXJnZXQiLCJjbGlja0hvdXNlQ29uZmlnIiwic2V0Q2xpY2tIb3VzZUNvbmZpZyIsImhvc3QiLCJwb3J0IiwiZGF0YWJhc2UiLCJ1c2VyIiwiand0VG9rZW4iLCJzZWN1cmUiLCJmbGF0RmlsZUNvbmZpZyIsInNldEZsYXRGaWxlQ29uZmlnIiwiZGVsaW1pdGVyIiwiaGFzSGVhZGVyIiwiZmlsZVBhdGgiLCJmaWxlTmFtZSIsInRhYmxlcyIsInNldFRhYmxlcyIsImpvaW5Db25kaXRpb24iLCJzZXRKb2luQ29uZGl0aW9uIiwidXNlSm9pbiIsInNldFVzZUpvaW4iLCJwcmV2aWV3RGF0YSIsInNldFByZXZpZXdEYXRhIiwiaXNMb2FkaW5nIiwic2V0SXNMb2FkaW5nIiwiZXJyb3IiLCJzZXRFcnJvciIsImluZ2VzdGlvblJlc3VsdHMiLCJzZXRJbmdlc3Rpb25SZXN1bHRzIiwic3RhdHVzIiwic2V0U3RhdHVzIiwic3RhdHVzTWVzc2FnZSIsInNldFN0YXR1c01lc3NhZ2UiLCJtZXNzYWdlIiwiaGFuZGxlU291cmNlU2VsZWN0aW9uIiwic2VsZWN0ZWRTb3VyY2UiLCJoYW5kbGVDbGlja0hvdXNlQ29uZmlnU3VibWl0IiwiY29uZmlnIiwidGVzdFJlc3VsdCIsInRlc3RDbGlja0hvdXNlQ29ubmVjdGlvbiIsInN1Y2Nlc3MiLCJFcnJvciIsImdldENsaWNrSG91c2VUYWJsZXMiLCJlcnIiLCJoYW5kbGVGbGF0RmlsZUNvbmZpZ1N1Ym1pdCIsImZpbGUiLCJ1cGxvYWRSZXN1bHQiLCJ1cGxvYWRGaWxlIiwic2NoZW1hIiwiaGFuZGxlVGFibGVTZWxlY3Rpb24iLCJzZWxlY3RlZFRhYmxlcyIsInVzZUpvaW5PcHRpb24iLCJqb2luQ29uZGl0aW9uVGV4dCIsImdlbmVyYXRlUHJldmlldyIsInJlcXVlc3QiLCJ1bmRlZmluZWQiLCJwcmV2aWV3UmVzdWx0IiwiZGF0YSIsImhhbmRsZVN0YXJ0SW5nZXN0aW9uIiwicmVzcG9uc2UiLCJpbmdlc3REYXRhIiwiaGFuZGxlUmVzZXQiLCJnZXRTdGVwTmFtZSIsInN0ZXAiLCJjYW5OYXZpZ2F0ZVRvU3RlcCIsImhhbmRsZVN0ZXBDbGljayIsInJlbmRlclN0ZXAiLCJkaXYiLCJjbGFzc05hbWUiLCJoMiIsImJ1dHRvbiIsIm9uQ2xpY2siLCJzdmciLCJ4bWxucyIsImZpbGwiLCJ2aWV3Qm94Iiwic3Ryb2tlIiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsImgzIiwicCIsIm9uU3VibWl0IiwiaW5pdGlhbFZhbHVlcyIsInRpdGxlIiwicmVxdWlyZUZpbGUiLCJpc011bHRpVGFibGVFbmFibGVkIiwib25TdGFydEluZ2VzdGlvbiIsIm9uQmFjayIsInJlc3VsdHMiLCJvblJlc2V0Iiwib2wiLCJPYmplY3QiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJtYXAiLCJpc05hdmlnYWJsZSIsImxpIiwic3BhbiIsImtleXMiLCJsZW5ndGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./app/page.tsx\n"); + +/***/ }), + +/***/ "(ssr)/./components/ClickHouseForm.tsx": +/*!***************************************!*\ + !*** ./components/ClickHouseForm.tsx ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\nconst ClickHouseForm = ({ onSubmit, initialValues, isLoading, title })=>{\n const [config, setConfig] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialValues);\n const [validation, setValidation] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const handleChange = (e)=>{\n const { name, value, type, checked } = e.target;\n const newValue = type === \"checkbox\" ? checked : value;\n const newConfig = {\n ...config,\n [name]: type === \"number\" ? Number(value) : newValue\n };\n setConfig(newConfig);\n // Clear validation error when field is updated\n if (validation[name]) {\n setValidation((prev)=>({\n ...prev,\n [name]: \"\"\n }));\n }\n };\n const validateForm = ()=>{\n const errors = {};\n if (!config.host.trim()) {\n errors.host = \"Host is required\";\n }\n if (!config.port || config.port <= 0) {\n errors.port = \"Port must be a positive number\";\n }\n if (!config.database.trim()) {\n errors.database = \"Database is required\";\n }\n if (!config.user.trim()) {\n errors.user = \"Username is required\";\n }\n if (!config.jwtToken.trim()) {\n errors.jwtToken = \"JWT token is required\";\n }\n setValidation(errors);\n return Object.keys(errors).length === 0;\n };\n const handleSubmit = (e)=>{\n e.preventDefault();\n if (validateForm()) {\n onSubmit(config);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white shadow-lg rounded-lg p-6 max-w-xl mx-auto transition-all duration-300 hover:shadow-xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-2xl font-semibold mb-6 text-primary\",\n children: title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 65,\n columnNumber: 7\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n className: \"space-y-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 gap-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"label\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `label-text font-medium ${validation.host ? \"text-red-600\" : \"\"}`,\n children: \"Host\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 72,\n columnNumber: 15\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 71,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n name: \"host\",\n value: config.host,\n onChange: handleChange,\n placeholder: \"localhost\",\n className: `input ${validation.host ? \"border-red-500 bg-red-50\" : \"border-gray-300\"} w-full rounded-md p-2 focus:outline-none focus:ring-2 ${validation.host ? \"focus:ring-red-500\" : \"focus:ring-primary\"}`,\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 74,\n columnNumber: 13\n }, undefined),\n validation.host && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-600 text-sm mt-1 font-medium\",\n children: validation.host\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 83,\n columnNumber: 33\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 70,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"label\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `label-text font-medium ${validation.port ? \"text-red-600\" : \"\"}`,\n children: \"Port\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 89,\n columnNumber: 15\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 88,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n name: \"port\",\n value: config.port,\n onChange: handleChange,\n placeholder: \"8123\",\n className: `input ${validation.port ? \"border-red-500 bg-red-50\" : \"border-gray-300\"} w-full rounded-md p-2 focus:outline-none focus:ring-2 ${validation.port ? \"focus:ring-red-500\" : \"focus:ring-primary\"}`,\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 91,\n columnNumber: 13\n }, undefined),\n validation.port && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-600 text-sm mt-1 font-medium\",\n children: validation.port\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 100,\n columnNumber: 33\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 87,\n columnNumber: 11\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 68,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"label\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `label-text font-medium ${validation.database ? \"text-red-600\" : \"\"}`,\n children: \"Database\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 107,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 106,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n name: \"database\",\n value: config.database,\n onChange: handleChange,\n placeholder: \"default\",\n className: `input ${validation.database ? \"border-red-500 bg-red-50\" : \"border-gray-300\"} w-full rounded-md p-2 focus:outline-none focus:ring-2 ${validation.database ? \"focus:ring-red-500\" : \"focus:ring-primary\"}`,\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 109,\n columnNumber: 11\n }, undefined),\n validation.database && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-600 text-sm mt-1 font-medium\",\n children: validation.database\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 118,\n columnNumber: 35\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 105,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"label\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `label-text font-medium ${validation.user ? \"text-red-600\" : \"\"}`,\n children: \"Username\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 124,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 123,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n name: \"user\",\n value: config.user,\n onChange: handleChange,\n placeholder: \"default\",\n className: `input ${validation.user ? \"border-red-500 bg-red-50\" : \"border-gray-300\"} w-full rounded-md p-2 focus:outline-none focus:ring-2 ${validation.user ? \"focus:ring-red-500\" : \"focus:ring-primary\"}`,\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 126,\n columnNumber: 11\n }, undefined),\n validation.user && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-600 text-sm mt-1 font-medium\",\n children: validation.user\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 135,\n columnNumber: 31\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 122,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"label\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: `label-text font-medium ${validation.jwtToken ? \"text-red-600\" : \"\"}`,\n children: \"JWT Token\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 141,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 140,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"password\",\n name: \"jwtToken\",\n value: config.jwtToken,\n onChange: handleChange,\n placeholder: \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n className: `input ${validation.jwtToken ? \"border-red-500 bg-red-50\" : \"border-gray-300\"} w-full rounded-md p-2 focus:outline-none focus:ring-2 ${validation.jwtToken ? \"focus:ring-red-500\" : \"focus:ring-primary\"}`,\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 143,\n columnNumber: 11\n }, undefined),\n validation.jwtToken && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-600 text-sm mt-1 font-medium\",\n children: validation.jwtToken\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 152,\n columnNumber: 35\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 139,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"cursor-pointer label justify-start gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n name: \"secure\",\n checked: config.secure,\n onChange: handleChange,\n className: \"checkbox checkbox-primary\",\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 158,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label-text\",\n children: \"Use HTTPS\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 166,\n columnNumber: 13\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 157,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 156,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"btn btn-primary w-full\",\n disabled: isLoading,\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"loading loading-spinner loading-sm mr-2\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 178,\n columnNumber: 17\n }, undefined),\n \"Connecting...\"\n ]\n }, void 0, true) : \"Connect\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 171,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 170,\n columnNumber: 9\n }, undefined),\n Object.keys(validation).length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 p-3 bg-red-50 border border-red-200 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"h-5 w-5 text-red-500 mr-2\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 191,\n columnNumber: 17\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 190,\n columnNumber: 15\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-600 font-medium\",\n children: \"Please fix the errors before continuing\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 193,\n columnNumber: 15\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 189,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 188,\n columnNumber: 11\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 67,\n columnNumber: 7\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 64,\n columnNumber: 5\n }, undefined);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ClickHouseForm);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL0NsaWNrSG91c2VGb3JtLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFd0M7QUFVeEMsTUFBTUUsaUJBQWdELENBQUMsRUFBRUMsUUFBUSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsS0FBSyxFQUFFO0lBQ2xHLE1BQU0sQ0FBQ0MsUUFBUUMsVUFBVSxHQUFHUCwrQ0FBUUEsQ0FBbUJHO0lBQ3ZELE1BQU0sQ0FBQ0ssWUFBWUMsY0FBYyxHQUFHVCwrQ0FBUUEsQ0FBeUIsQ0FBQztJQUV0RSxNQUFNVSxlQUFlLENBQUNDO1FBQ3BCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFLEdBQUdKLEVBQUVLLE1BQU07UUFDL0MsTUFBTUMsV0FBV0gsU0FBUyxhQUFhQyxVQUFVRjtRQUNqRCxNQUFNSyxZQUFZO1lBQUUsR0FBR1osTUFBTTtZQUFFLENBQUNNLEtBQUssRUFBRUUsU0FBUyxXQUFXSyxPQUFPTixTQUFTSTtRQUFTO1FBQ3BGVixVQUFVVztRQUVWLCtDQUErQztRQUMvQyxJQUFJVixVQUFVLENBQUNJLEtBQUssRUFBRTtZQUNwQkgsY0FBY1csQ0FBQUEsT0FBUztvQkFBRSxHQUFHQSxJQUFJO29CQUFFLENBQUNSLEtBQUssRUFBRTtnQkFBRztRQUMvQztJQUNGO0lBRUEsTUFBTVMsZUFBZTtRQUNuQixNQUFNQyxTQUFpQyxDQUFDO1FBRXhDLElBQUksQ0FBQ2hCLE9BQU9pQixJQUFJLENBQUNDLElBQUksSUFBSTtZQUN2QkYsT0FBT0MsSUFBSSxHQUFHO1FBQ2hCO1FBRUEsSUFBSSxDQUFDakIsT0FBT21CLElBQUksSUFBSW5CLE9BQU9tQixJQUFJLElBQUksR0FBRztZQUNwQ0gsT0FBT0csSUFBSSxHQUFHO1FBQ2hCO1FBRUEsSUFBSSxDQUFDbkIsT0FBT29CLFFBQVEsQ0FBQ0YsSUFBSSxJQUFJO1lBQzNCRixPQUFPSSxRQUFRLEdBQUc7UUFDcEI7UUFFQSxJQUFJLENBQUNwQixPQUFPcUIsSUFBSSxDQUFDSCxJQUFJLElBQUk7WUFDdkJGLE9BQU9LLElBQUksR0FBRztRQUNoQjtRQUVBLElBQUksQ0FBQ3JCLE9BQU9zQixRQUFRLENBQUNKLElBQUksSUFBSTtZQUMzQkYsT0FBT00sUUFBUSxHQUFHO1FBQ3BCO1FBRUFuQixjQUFjYTtRQUNkLE9BQU9PLE9BQU9DLElBQUksQ0FBQ1IsUUFBUVMsTUFBTSxLQUFLO0lBQ3hDO0lBRUEsTUFBTUMsZUFBZSxDQUFDckI7UUFDcEJBLEVBQUVzQixjQUFjO1FBQ2hCLElBQUlaLGdCQUFnQjtZQUNsQm5CLFNBQVNJO1FBQ1g7SUFDRjtJQUVBLHFCQUNFLDhEQUFDNEI7UUFBSUMsV0FBVTs7MEJBQ2IsOERBQUNDO2dCQUFHRCxXQUFVOzBCQUE0QzlCOzs7Ozs7MEJBRTFELDhEQUFDZ0M7Z0JBQUtuQyxVQUFVOEI7Z0JBQWNHLFdBQVU7O2tDQUN0Qyw4REFBQ0Q7d0JBQUlDLFdBQVU7OzBDQUViLDhEQUFDRDtnQ0FBSUMsV0FBVTs7a0RBQ2IsOERBQUNHO3dDQUFNSCxXQUFVO2tEQUNmLDRFQUFDSTs0Q0FBS0osV0FBVyxDQUFDLHVCQUF1QixFQUFFM0IsV0FBV2UsSUFBSSxHQUFHLGlCQUFpQixHQUFHLENBQUM7c0RBQUU7Ozs7Ozs7Ozs7O2tEQUV0Riw4REFBQ2lCO3dDQUNDMUIsTUFBSzt3Q0FDTEYsTUFBSzt3Q0FDTEMsT0FBT1AsT0FBT2lCLElBQUk7d0NBQ2xCa0IsVUFBVS9CO3dDQUNWZ0MsYUFBWTt3Q0FDWlAsV0FBVyxDQUFDLE1BQU0sRUFBRTNCLFdBQVdlLElBQUksR0FBRyw2QkFBNkIsa0JBQWtCLHVEQUF1RCxFQUFFZixXQUFXZSxJQUFJLEdBQUcsdUJBQXVCLHFCQUFxQixDQUFDO3dDQUM3TW9CLFVBQVV2Qzs7Ozs7O29DQUVYSSxXQUFXZSxJQUFJLGtCQUFJLDhEQUFDcUI7d0NBQUVULFdBQVU7a0RBQXlDM0IsV0FBV2UsSUFBSTs7Ozs7Ozs7Ozs7OzBDQUkzRiw4REFBQ1c7Z0NBQUlDLFdBQVU7O2tEQUNiLDhEQUFDRzt3Q0FBTUgsV0FBVTtrREFDZiw0RUFBQ0k7NENBQUtKLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRTNCLFdBQVdpQixJQUFJLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQztzREFBRTs7Ozs7Ozs7Ozs7a0RBRXRGLDhEQUFDZTt3Q0FDQzFCLE1BQUs7d0NBQ0xGLE1BQUs7d0NBQ0xDLE9BQU9QLE9BQU9tQixJQUFJO3dDQUNsQmdCLFVBQVUvQjt3Q0FDVmdDLGFBQVk7d0NBQ1pQLFdBQVcsQ0FBQyxNQUFNLEVBQUUzQixXQUFXaUIsSUFBSSxHQUFHLDZCQUE2QixrQkFBa0IsdURBQXVELEVBQUVqQixXQUFXaUIsSUFBSSxHQUFHLHVCQUF1QixxQkFBcUIsQ0FBQzt3Q0FDN01rQixVQUFVdkM7Ozs7OztvQ0FFWEksV0FBV2lCLElBQUksa0JBQUksOERBQUNtQjt3Q0FBRVQsV0FBVTtrREFBeUMzQixXQUFXaUIsSUFBSTs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQUs3Riw4REFBQ1M7d0JBQUlDLFdBQVU7OzBDQUNiLDhEQUFDRztnQ0FBTUgsV0FBVTswQ0FDZiw0RUFBQ0k7b0NBQUtKLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRTNCLFdBQVdrQixRQUFRLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQzs4Q0FBRTs7Ozs7Ozs7Ozs7MENBRTFGLDhEQUFDYztnQ0FDQzFCLE1BQUs7Z0NBQ0xGLE1BQUs7Z0NBQ0xDLE9BQU9QLE9BQU9vQixRQUFRO2dDQUN0QmUsVUFBVS9CO2dDQUNWZ0MsYUFBWTtnQ0FDWlAsV0FBVyxDQUFDLE1BQU0sRUFBRTNCLFdBQVdrQixRQUFRLEdBQUcsNkJBQTZCLGtCQUFrQix1REFBdUQsRUFBRWxCLFdBQVdrQixRQUFRLEdBQUcsdUJBQXVCLHFCQUFxQixDQUFDO2dDQUNyTmlCLFVBQVV2Qzs7Ozs7OzRCQUVYSSxXQUFXa0IsUUFBUSxrQkFBSSw4REFBQ2tCO2dDQUFFVCxXQUFVOzBDQUF5QzNCLFdBQVdrQixRQUFROzs7Ozs7Ozs7Ozs7a0NBSW5HLDhEQUFDUTt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNHO2dDQUFNSCxXQUFVOzBDQUNmLDRFQUFDSTtvQ0FBS0osV0FBVyxDQUFDLHVCQUF1QixFQUFFM0IsV0FBV21CLElBQUksR0FBRyxpQkFBaUIsR0FBRyxDQUFDOzhDQUFFOzs7Ozs7Ozs7OzswQ0FFdEYsOERBQUNhO2dDQUNDMUIsTUFBSztnQ0FDTEYsTUFBSztnQ0FDTEMsT0FBT1AsT0FBT3FCLElBQUk7Z0NBQ2xCYyxVQUFVL0I7Z0NBQ1ZnQyxhQUFZO2dDQUNaUCxXQUFXLENBQUMsTUFBTSxFQUFFM0IsV0FBV21CLElBQUksR0FBRyw2QkFBNkIsa0JBQWtCLHVEQUF1RCxFQUFFbkIsV0FBV21CLElBQUksR0FBRyx1QkFBdUIscUJBQXFCLENBQUM7Z0NBQzdNZ0IsVUFBVXZDOzs7Ozs7NEJBRVhJLFdBQVdtQixJQUFJLGtCQUFJLDhEQUFDaUI7Z0NBQUVULFdBQVU7MENBQXlDM0IsV0FBV21CLElBQUk7Ozs7Ozs7Ozs7OztrQ0FJM0YsOERBQUNPO3dCQUFJQyxXQUFVOzswQ0FDYiw4REFBQ0c7Z0NBQU1ILFdBQVU7MENBQ2YsNEVBQUNJO29DQUFLSixXQUFXLENBQUMsdUJBQXVCLEVBQUUzQixXQUFXb0IsUUFBUSxHQUFHLGlCQUFpQixHQUFHLENBQUM7OENBQUU7Ozs7Ozs7Ozs7OzBDQUUxRiw4REFBQ1k7Z0NBQ0MxQixNQUFLO2dDQUNMRixNQUFLO2dDQUNMQyxPQUFPUCxPQUFPc0IsUUFBUTtnQ0FDdEJhLFVBQVUvQjtnQ0FDVmdDLGFBQVk7Z0NBQ1pQLFdBQVcsQ0FBQyxNQUFNLEVBQUUzQixXQUFXb0IsUUFBUSxHQUFHLDZCQUE2QixrQkFBa0IsdURBQXVELEVBQUVwQixXQUFXb0IsUUFBUSxHQUFHLHVCQUF1QixxQkFBcUIsQ0FBQztnQ0FDck5lLFVBQVV2Qzs7Ozs7OzRCQUVYSSxXQUFXb0IsUUFBUSxrQkFBSSw4REFBQ2dCO2dDQUFFVCxXQUFVOzBDQUF5QzNCLFdBQVdvQixRQUFROzs7Ozs7Ozs7Ozs7a0NBSW5HLDhEQUFDTTt3QkFBSUMsV0FBVTtrQ0FDYiw0RUFBQ0c7NEJBQU1ILFdBQVU7OzhDQUNmLDhEQUFDSztvQ0FDQzFCLE1BQUs7b0NBQ0xGLE1BQUs7b0NBQ0xHLFNBQVNULE9BQU91QyxNQUFNO29DQUN0QkosVUFBVS9CO29DQUNWeUIsV0FBVTtvQ0FDVlEsVUFBVXZDOzs7Ozs7OENBRVosOERBQUNtQztvQ0FBS0osV0FBVTs4Q0FBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBSWpDLDhEQUFDRDt3QkFBSUMsV0FBVTtrQ0FDYiw0RUFBQ1c7NEJBQ0NoQyxNQUFLOzRCQUNMcUIsV0FBVTs0QkFDVlEsVUFBVXZDO3NDQUVUQSwwQkFDQzs7a0RBQ0UsOERBQUNtQzt3Q0FBS0osV0FBVTs7Ozs7O29DQUFpRDs7K0NBSW5FOzs7Ozs7Ozs7OztvQkFLTE4sT0FBT0MsSUFBSSxDQUFDdEIsWUFBWXVCLE1BQU0sR0FBRyxtQkFDaEMsOERBQUNHO3dCQUFJQyxXQUFVO2tDQUNiLDRFQUFDRDs0QkFBSUMsV0FBVTs7OENBQ2IsOERBQUNZO29DQUFJWixXQUFVO29DQUE0QmEsTUFBSztvQ0FBT0MsUUFBTztvQ0FBZUMsU0FBUTtvQ0FBWUMsT0FBTTs4Q0FDckcsNEVBQUNDO3dDQUFLQyxlQUFjO3dDQUFRQyxnQkFBZTt3Q0FBUUMsYUFBWTt3Q0FBSUMsR0FBRTs7Ozs7Ozs7Ozs7OENBRXZFLDhEQUFDakI7b0NBQUtKLFdBQVU7OENBQTJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU96RDtBQUVBLGlFQUFlbEMsY0FBY0EsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9jb21wb25lbnRzL0NsaWNrSG91c2VGb3JtLnRzeD82NjhlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcclxuXHJcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgQ2xpY2tIb3VzZUNvbmZpZyB9IGZyb20gJ0AvbGliL2FwaSc7XHJcblxyXG5pbnRlcmZhY2UgQ2xpY2tIb3VzZUZvcm1Qcm9wcyB7XHJcbiAgb25TdWJtaXQ6IChjb25maWc6IENsaWNrSG91c2VDb25maWcpID0+IHZvaWQ7XHJcbiAgaW5pdGlhbFZhbHVlczogQ2xpY2tIb3VzZUNvbmZpZztcclxuICBpc0xvYWRpbmc6IGJvb2xlYW47XHJcbiAgdGl0bGU6IHN0cmluZztcclxufVxyXG5cclxuY29uc3QgQ2xpY2tIb3VzZUZvcm06IFJlYWN0LkZDPENsaWNrSG91c2VGb3JtUHJvcHM+ID0gKHsgb25TdWJtaXQsIGluaXRpYWxWYWx1ZXMsIGlzTG9hZGluZywgdGl0bGUgfSkgPT4ge1xyXG4gIGNvbnN0IFtjb25maWcsIHNldENvbmZpZ10gPSB1c2VTdGF0ZTxDbGlja0hvdXNlQ29uZmlnPihpbml0aWFsVmFsdWVzKTtcclxuICBjb25zdCBbdmFsaWRhdGlvbiwgc2V0VmFsaWRhdGlvbl0gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSk7XHJcblxyXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xyXG4gICAgY29uc3QgeyBuYW1lLCB2YWx1ZSwgdHlwZSwgY2hlY2tlZCB9ID0gZS50YXJnZXQ7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHR5cGUgPT09ICdjaGVja2JveCcgPyBjaGVja2VkIDogdmFsdWU7XHJcbiAgICBjb25zdCBuZXdDb25maWcgPSB7IC4uLmNvbmZpZywgW25hbWVdOiB0eXBlID09PSAnbnVtYmVyJyA/IE51bWJlcih2YWx1ZSkgOiBuZXdWYWx1ZSB9O1xyXG4gICAgc2V0Q29uZmlnKG5ld0NvbmZpZyk7XHJcbiAgICBcclxuICAgIC8vIENsZWFyIHZhbGlkYXRpb24gZXJyb3Igd2hlbiBmaWVsZCBpcyB1cGRhdGVkXHJcbiAgICBpZiAodmFsaWRhdGlvbltuYW1lXSkge1xyXG4gICAgICBzZXRWYWxpZGF0aW9uKHByZXYgPT4gKHsgLi4ucHJldiwgW25hbWVdOiAnJyB9KSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgdmFsaWRhdGVGb3JtID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgZXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICBcclxuICAgIGlmICghY29uZmlnLmhvc3QudHJpbSgpKSB7XHJcbiAgICAgIGVycm9ycy5ob3N0ID0gJ0hvc3QgaXMgcmVxdWlyZWQnO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoIWNvbmZpZy5wb3J0IHx8IGNvbmZpZy5wb3J0IDw9IDApIHtcclxuICAgICAgZXJyb3JzLnBvcnQgPSAnUG9ydCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJztcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKCFjb25maWcuZGF0YWJhc2UudHJpbSgpKSB7XHJcbiAgICAgIGVycm9ycy5kYXRhYmFzZSA9ICdEYXRhYmFzZSBpcyByZXF1aXJlZCc7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICghY29uZmlnLnVzZXIudHJpbSgpKSB7XHJcbiAgICAgIGVycm9ycy51c2VyID0gJ1VzZXJuYW1lIGlzIHJlcXVpcmVkJztcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKCFjb25maWcuand0VG9rZW4udHJpbSgpKSB7XHJcbiAgICAgIGVycm9ycy5qd3RUb2tlbiA9ICdKV1QgdG9rZW4gaXMgcmVxdWlyZWQnO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzZXRWYWxpZGF0aW9uKGVycm9ycyk7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPT09IDA7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKHZhbGlkYXRlRm9ybSgpKSB7XHJcbiAgICAgIG9uU3VibWl0KGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctd2hpdGUgc2hhZG93LWxnIHJvdW5kZWQtbGcgcC02IG1heC13LXhsIG14LWF1dG8gdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGhvdmVyOnNoYWRvdy14bFwiPlxyXG4gICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1zZW1pYm9sZCBtYi02IHRleHQtcHJpbWFyeVwiPnt0aXRsZX08L2gyPlxyXG4gICAgICBcclxuICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gY2xhc3NOYW1lPVwic3BhY2UteS02XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC02XCI+XHJcbiAgICAgICAgICB7LyogSG9zdCAqL31cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJsYWJlbFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGxhYmVsLXRleHQgZm9udC1tZWRpdW0gJHt2YWxpZGF0aW9uLmhvc3QgPyAndGV4dC1yZWQtNjAwJyA6ICcnfWB9Pkhvc3Q8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICBuYW1lPVwiaG9zdFwiXHJcbiAgICAgICAgICAgICAgdmFsdWU9e2NvbmZpZy5ob3N0fVxyXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJsb2NhbGhvc3RcIlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YGlucHV0ICR7dmFsaWRhdGlvbi5ob3N0ID8gJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC01MCcgOiAnYm9yZGVyLWdyYXktMzAwJ30gdy1mdWxsIHJvdW5kZWQtbWQgcC0yIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgJHt2YWxpZGF0aW9uLmhvc3QgPyAnZm9jdXM6cmluZy1yZWQtNTAwJyA6ICdmb2N1czpyaW5nLXByaW1hcnknfWB9XHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAge3ZhbGlkYXRpb24uaG9zdCAmJiA8cCBjbGFzc05hbWU9XCJ0ZXh0LXJlZC02MDAgdGV4dC1zbSBtdC0xIGZvbnQtbWVkaXVtXCI+e3ZhbGlkYXRpb24uaG9zdH08L3A+fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHsvKiBQb3J0ICovfVxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgbGFiZWwtdGV4dCBmb250LW1lZGl1bSAke3ZhbGlkYXRpb24ucG9ydCA/ICd0ZXh0LXJlZC02MDAnIDogJyd9YH0+UG9ydDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgbmFtZT1cInBvcnRcIlxyXG4gICAgICAgICAgICAgIHZhbHVlPXtjb25maWcucG9ydH1cclxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiODEyM1wiXHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgaW5wdXQgJHt2YWxpZGF0aW9uLnBvcnQgPyAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTUwJyA6ICdib3JkZXItZ3JheS0zMDAnfSB3LWZ1bGwgcm91bmRlZC1tZCBwLTIgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiAke3ZhbGlkYXRpb24ucG9ydCA/ICdmb2N1czpyaW5nLXJlZC01MDAnIDogJ2ZvY3VzOnJpbmctcHJpbWFyeSd9YH1cclxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB7dmFsaWRhdGlvbi5wb3J0ICYmIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTYwMCB0ZXh0LXNtIG10LTEgZm9udC1tZWRpdW1cIj57dmFsaWRhdGlvbi5wb3J0fTwvcD59XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgey8qIERhdGFiYXNlICovfVxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwibGFiZWxcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgbGFiZWwtdGV4dCBmb250LW1lZGl1bSAke3ZhbGlkYXRpb24uZGF0YWJhc2UgPyAndGV4dC1yZWQtNjAwJyA6ICcnfWB9PkRhdGFiYXNlPC9zcGFuPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJkYXRhYmFzZVwiXHJcbiAgICAgICAgICAgIHZhbHVlPXtjb25maWcuZGF0YWJhc2V9XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZGVmYXVsdFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YGlucHV0ICR7dmFsaWRhdGlvbi5kYXRhYmFzZSA/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtNTAnIDogJ2JvcmRlci1ncmF5LTMwMCd9IHctZnVsbCByb3VuZGVkLW1kIHAtMiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yICR7dmFsaWRhdGlvbi5kYXRhYmFzZSA/ICdmb2N1czpyaW5nLXJlZC01MDAnIDogJ2ZvY3VzOnJpbmctcHJpbWFyeSd9YH1cclxuICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICB7dmFsaWRhdGlvbi5kYXRhYmFzZSAmJiA8cCBjbGFzc05hbWU9XCJ0ZXh0LXJlZC02MDAgdGV4dC1zbSBtdC0xIGZvbnQtbWVkaXVtXCI+e3ZhbGlkYXRpb24uZGF0YWJhc2V9PC9wPn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICB7LyogVXNlciAqL31cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImxhYmVsXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGxhYmVsLXRleHQgZm9udC1tZWRpdW0gJHt2YWxpZGF0aW9uLnVzZXIgPyAndGV4dC1yZWQtNjAwJyA6ICcnfWB9PlVzZXJuYW1lPC9zcGFuPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJ1c2VyXCJcclxuICAgICAgICAgICAgdmFsdWU9e2NvbmZpZy51c2VyfVxyXG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImRlZmF1bHRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2BpbnB1dCAke3ZhbGlkYXRpb24udXNlciA/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtNTAnIDogJ2JvcmRlci1ncmF5LTMwMCd9IHctZnVsbCByb3VuZGVkLW1kIHAtMiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yICR7dmFsaWRhdGlvbi51c2VyID8gJ2ZvY3VzOnJpbmctcmVkLTUwMCcgOiAnZm9jdXM6cmluZy1wcmltYXJ5J31gfVxyXG4gICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIHt2YWxpZGF0aW9uLnVzZXIgJiYgPHAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNjAwIHRleHQtc20gbXQtMSBmb250LW1lZGl1bVwiPnt2YWxpZGF0aW9uLnVzZXJ9PC9wPn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICB7LyogSldUIFRva2VuICovfVxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwibGFiZWxcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgbGFiZWwtdGV4dCBmb250LW1lZGl1bSAke3ZhbGlkYXRpb24uand0VG9rZW4gPyAndGV4dC1yZWQtNjAwJyA6ICcnfWB9PkpXVCBUb2tlbjwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgbmFtZT1cImp3dFRva2VuXCJcclxuICAgICAgICAgICAgdmFsdWU9e2NvbmZpZy5qd3RUb2tlbn1cclxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuLi5cIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9e2BpbnB1dCAke3ZhbGlkYXRpb24uand0VG9rZW4gPyAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTUwJyA6ICdib3JkZXItZ3JheS0zMDAnfSB3LWZ1bGwgcm91bmRlZC1tZCBwLTIgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiAke3ZhbGlkYXRpb24uand0VG9rZW4gPyAnZm9jdXM6cmluZy1yZWQtNTAwJyA6ICdmb2N1czpyaW5nLXByaW1hcnknfWB9XHJcbiAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAge3ZhbGlkYXRpb24uand0VG9rZW4gJiYgPHAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNjAwIHRleHQtc20gbXQtMSBmb250LW1lZGl1bVwiPnt2YWxpZGF0aW9uLmp3dFRva2VufTwvcD59XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgey8qIFNlY3VyZSAqL31cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImN1cnNvci1wb2ludGVyIGxhYmVsIGp1c3RpZnktc3RhcnQgZ2FwLTJcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICBuYW1lPVwic2VjdXJlXCJcclxuICAgICAgICAgICAgICBjaGVja2VkPXtjb25maWcuc2VjdXJlfVxyXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY2hlY2tib3ggY2hlY2tib3gtcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibGFiZWwtdGV4dFwiPlVzZSBIVFRQUzwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC04XCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgdy1mdWxsXCJcclxuICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge2lzTG9hZGluZyA/IChcclxuICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibG9hZGluZyBsb2FkaW5nLXNwaW5uZXIgbG9hZGluZy1zbSBtci0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgQ29ubmVjdGluZy4uLlxyXG4gICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICdDb25uZWN0J1xyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAge09iamVjdC5rZXlzKHZhbGlkYXRpb24pLmxlbmd0aCA+IDAgJiYgKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IHAtMyBiZy1yZWQtNTAgYm9yZGVyIGJvcmRlci1yZWQtMjAwIHJvdW5kZWQtbWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwiaC01IHctNSB0ZXh0LXJlZC01MDAgbXItMlwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD1cIjJcIiBkPVwiTTEyIDh2NG0wIDRoLjAxTTIxIDEyYTkgOSAwIDExLTE4IDAgOSA5IDAgMDExOCAwelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJlZC02MDAgZm9udC1tZWRpdW1cIj5QbGVhc2UgZml4IHRoZSBlcnJvcnMgYmVmb3JlIGNvbnRpbnVpbmc8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IENsaWNrSG91c2VGb3JtOyAiXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VTdGF0ZSIsIkNsaWNrSG91c2VGb3JtIiwib25TdWJtaXQiLCJpbml0aWFsVmFsdWVzIiwiaXNMb2FkaW5nIiwidGl0bGUiLCJjb25maWciLCJzZXRDb25maWciLCJ2YWxpZGF0aW9uIiwic2V0VmFsaWRhdGlvbiIsImhhbmRsZUNoYW5nZSIsImUiLCJuYW1lIiwidmFsdWUiLCJ0eXBlIiwiY2hlY2tlZCIsInRhcmdldCIsIm5ld1ZhbHVlIiwibmV3Q29uZmlnIiwiTnVtYmVyIiwicHJldiIsInZhbGlkYXRlRm9ybSIsImVycm9ycyIsImhvc3QiLCJ0cmltIiwicG9ydCIsImRhdGFiYXNlIiwidXNlciIsImp3dFRva2VuIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImhhbmRsZVN1Ym1pdCIsInByZXZlbnREZWZhdWx0IiwiZGl2IiwiY2xhc3NOYW1lIiwiaDIiLCJmb3JtIiwibGFiZWwiLCJzcGFuIiwiaW5wdXQiLCJvbkNoYW5nZSIsInBsYWNlaG9sZGVyIiwiZGlzYWJsZWQiLCJwIiwic2VjdXJlIiwiYnV0dG9uIiwic3ZnIiwiZmlsbCIsInN0cm9rZSIsInZpZXdCb3giLCJ4bWxucyIsInBhdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsImQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/ClickHouseForm.tsx\n"); + +/***/ }), + +/***/ "(ssr)/./components/DataPreview.tsx": +/*!************************************!*\ + !*** ./components/DataPreview.tsx ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ DataPreview)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\nfunction DataPreview({ data, onStartIngestion, onBack, isLoading }) {\n const [page, setPage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(1);\n const rowsPerPage = 10;\n // Calculate total pages\n const totalPages = Math.ceil((data.length - 1) / rowsPerPage); // Subtract header row\n // Get header row (first row)\n const headerRow = data.length > 0 ? data[0] : [];\n // Get current page's data\n const startIndex = 1 + (page - 1) * rowsPerPage; // Skip header row\n const endIndex = Math.min(startIndex + rowsPerPage, data.length);\n const currentPageData = data.slice(startIndex, endIndex);\n const goToPage = (newPage)=>{\n setPage(Math.max(1, Math.min(newPage, totalPages)));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-semibold mb-6\",\n children: \"Data Preview\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 38,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n \"Showing first 100 records (preview). Total records: \",\n data.length > 1 ? data.length - 1 : 0\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 41,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 40,\n columnNumber: 7\n }, this),\n data.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"py-8 text-center text-gray-500\",\n children: \"No data available for preview.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 47,\n columnNumber: 9\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto rounded-lg border border-gray-200\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full divide-y divide-gray-200\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n className: \"bg-gray-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n children: headerRow.map((header, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\",\n children: header\n }, index, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 57,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 55,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 54,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n className: \"bg-white divide-y divide-gray-200\",\n children: currentPageData.map((row, rowIndex)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: rowIndex % 2 === 0 ? \"bg-white\" : \"bg-gray-50\",\n children: row.map((cell, cellIndex)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-6 py-4 whitespace-nowrap text-sm text-gray-500\",\n children: cell || /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-300\",\n children: \"null\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 71,\n columnNumber: 34\n }, this)\n }, cellIndex, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 70,\n columnNumber: 23\n }, this))\n }, rowIndex, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 68,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 66,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 53,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 52,\n columnNumber: 11\n }, this),\n totalPages > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"px-3 py-1 border border-gray-300 rounded-md text-sm\",\n onClick: ()=>goToPage(page - 1),\n disabled: page === 1,\n children: \"Previous\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 82,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n \"Page \",\n page,\n \" of \",\n totalPages\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 89,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"px-3 py-1 border border-gray-300 rounded-md text-sm\",\n onClick: ()=>goToPage(page + 1),\n disabled: page === totalPages,\n children: \"Next\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 92,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 81,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 flex justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"btn bg-gray-500 hover:bg-gray-600\",\n onClick: onBack,\n disabled: isLoading,\n children: \"Back\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 105,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"btn btn-primary\",\n onClick: onStartIngestion,\n disabled: isLoading || data.length <= 1,\n children: isLoading ? \"Processing...\" : \"Start Ingestion\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 113,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 104,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 37,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL0RhdGFQcmV2aWV3LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFaUM7QUFTbEIsU0FBU0MsWUFBWSxFQUNsQ0MsSUFBSSxFQUNKQyxnQkFBZ0IsRUFDaEJDLE1BQU0sRUFDTkMsU0FBUyxFQUNRO0lBQ2pCLE1BQU0sQ0FBQ0MsTUFBTUMsUUFBUSxHQUFHUCwrQ0FBUUEsQ0FBQztJQUNqQyxNQUFNUSxjQUFjO0lBRXBCLHdCQUF3QjtJQUN4QixNQUFNQyxhQUFhQyxLQUFLQyxJQUFJLENBQUMsQ0FBQ1QsS0FBS1UsTUFBTSxHQUFHLEtBQUtKLGNBQWMsc0JBQXNCO0lBRXJGLDZCQUE2QjtJQUM3QixNQUFNSyxZQUFZWCxLQUFLVSxNQUFNLEdBQUcsSUFBSVYsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBRWhELDBCQUEwQjtJQUMxQixNQUFNWSxhQUFhLElBQUksQ0FBQ1IsT0FBTyxLQUFLRSxhQUFhLGtCQUFrQjtJQUNuRSxNQUFNTyxXQUFXTCxLQUFLTSxHQUFHLENBQUNGLGFBQWFOLGFBQWFOLEtBQUtVLE1BQU07SUFDL0QsTUFBTUssa0JBQWtCZixLQUFLZ0IsS0FBSyxDQUFDSixZQUFZQztJQUUvQyxNQUFNSSxXQUFXLENBQUNDO1FBQ2hCYixRQUFRRyxLQUFLVyxHQUFHLENBQUMsR0FBR1gsS0FBS00sR0FBRyxDQUFDSSxTQUFTWDtJQUN4QztJQUVBLHFCQUNFLDhEQUFDYTtRQUFJQyxXQUFVOzswQkFDYiw4REFBQ0M7Z0JBQUdELFdBQVU7MEJBQTZCOzs7Ozs7MEJBRTNDLDhEQUFDRDtnQkFBSUMsV0FBVTswQkFDYiw0RUFBQ0U7b0JBQUtGLFdBQVU7O3dCQUF3Qjt3QkFDZXJCLEtBQUtVLE1BQU0sR0FBRyxJQUFJVixLQUFLVSxNQUFNLEdBQUcsSUFBSTs7Ozs7Ozs7Ozs7O1lBSTVGVixLQUFLVSxNQUFNLEtBQUssa0JBQ2YsOERBQUNVO2dCQUFJQyxXQUFVOzBCQUFpQzs7Ozs7cUNBSWhEOztrQ0FDRSw4REFBQ0Q7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNHOzRCQUFNSCxXQUFVOzs4Q0FDZiw4REFBQ0k7b0NBQU1KLFdBQVU7OENBQ2YsNEVBQUNLO2tEQUNFZixVQUFVZ0IsR0FBRyxDQUFDLENBQUNDLFFBQVFDLHNCQUN0Qiw4REFBQ0M7Z0RBRUNULFdBQVU7MERBRVRPOytDQUhJQzs7Ozs7Ozs7Ozs7Ozs7OzhDQVFiLDhEQUFDRTtvQ0FBTVYsV0FBVTs4Q0FDZE4sZ0JBQWdCWSxHQUFHLENBQUMsQ0FBQ0ssS0FBS0MseUJBQ3pCLDhEQUFDUDs0Q0FBa0JMLFdBQVdZLFdBQVcsTUFBTSxJQUFJLGFBQWE7c0RBQzdERCxJQUFJTCxHQUFHLENBQUMsQ0FBQ08sTUFBTUMsMEJBQ2QsOERBQUNDO29EQUFtQmYsV0FBVTs4REFDM0JhLHNCQUFRLDhEQUFDWDt3REFBS0YsV0FBVTtrRUFBZ0I7Ozs7OzttREFEbENjOzs7OzsyQ0FGSkY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFZaEIxQixhQUFhLG1CQUNaLDhEQUFDYTt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNnQjtnQ0FDQ2hCLFdBQVU7Z0NBQ1ZpQixTQUFTLElBQU1yQixTQUFTYixPQUFPO2dDQUMvQm1DLFVBQVVuQyxTQUFTOzBDQUNwQjs7Ozs7OzBDQUdELDhEQUFDbUI7Z0NBQUtGLFdBQVU7O29DQUF3QjtvQ0FDaENqQjtvQ0FBSztvQ0FBS0c7Ozs7Ozs7MENBRWxCLDhEQUFDOEI7Z0NBQ0NoQixXQUFVO2dDQUNWaUIsU0FBUyxJQUFNckIsU0FBU2IsT0FBTztnQ0FDL0JtQyxVQUFVbkMsU0FBU0c7MENBQ3BCOzs7Ozs7Ozs7Ozs7OzswQkFRVCw4REFBQ2E7Z0JBQUlDLFdBQVU7O2tDQUNiLDhEQUFDZ0I7d0JBQ0NHLE1BQUs7d0JBQ0xuQixXQUFVO3dCQUNWaUIsU0FBU3BDO3dCQUNUcUMsVUFBVXBDO2tDQUNYOzs7Ozs7a0NBR0QsOERBQUNrQzt3QkFDQ0csTUFBSzt3QkFDTG5CLFdBQVU7d0JBQ1ZpQixTQUFTckM7d0JBQ1RzQyxVQUFVcEMsYUFBYUgsS0FBS1UsTUFBTSxJQUFJO2tDQUVyQ1AsWUFBWSxrQkFBa0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUt6QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9jb21wb25lbnRzL0RhdGFQcmV2aWV3LnRzeD8zNGJlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcclxuXHJcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xyXG5cclxuaW50ZXJmYWNlIERhdGFQcmV2aWV3UHJvcHMge1xyXG4gIGRhdGE6IHN0cmluZ1tdW107XHJcbiAgb25TdGFydEluZ2VzdGlvbjogKCkgPT4gdm9pZDtcclxuICBvbkJhY2s6ICgpID0+IHZvaWQ7XHJcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEYXRhUHJldmlldyh7XHJcbiAgZGF0YSxcclxuICBvblN0YXJ0SW5nZXN0aW9uLFxyXG4gIG9uQmFjayxcclxuICBpc0xvYWRpbmdcclxufTogRGF0YVByZXZpZXdQcm9wcykge1xyXG4gIGNvbnN0IFtwYWdlLCBzZXRQYWdlXSA9IHVzZVN0YXRlKDEpO1xyXG4gIGNvbnN0IHJvd3NQZXJQYWdlID0gMTA7XHJcbiAgXHJcbiAgLy8gQ2FsY3VsYXRlIHRvdGFsIHBhZ2VzXHJcbiAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbCgoZGF0YS5sZW5ndGggLSAxKSAvIHJvd3NQZXJQYWdlKTsgLy8gU3VidHJhY3QgaGVhZGVyIHJvd1xyXG4gIFxyXG4gIC8vIEdldCBoZWFkZXIgcm93IChmaXJzdCByb3cpXHJcbiAgY29uc3QgaGVhZGVyUm93ID0gZGF0YS5sZW5ndGggPiAwID8gZGF0YVswXSA6IFtdO1xyXG4gIFxyXG4gIC8vIEdldCBjdXJyZW50IHBhZ2UncyBkYXRhXHJcbiAgY29uc3Qgc3RhcnRJbmRleCA9IDEgKyAocGFnZSAtIDEpICogcm93c1BlclBhZ2U7IC8vIFNraXAgaGVhZGVyIHJvd1xyXG4gIGNvbnN0IGVuZEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCArIHJvd3NQZXJQYWdlLCBkYXRhLmxlbmd0aCk7XHJcbiAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gZGF0YS5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XHJcbiAgXHJcbiAgY29uc3QgZ29Ub1BhZ2UgPSAobmV3UGFnZTogbnVtYmVyKSA9PiB7XHJcbiAgICBzZXRQYWdlKE1hdGgubWF4KDEsIE1hdGgubWluKG5ld1BhZ2UsIHRvdGFsUGFnZXMpKSk7XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZFwiPlxyXG4gICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LXNlbWlib2xkIG1iLTZcIj5EYXRhIFByZXZpZXc8L2gyPlxyXG4gICAgICBcclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XHJcbiAgICAgICAgICBTaG93aW5nIGZpcnN0IDEwMCByZWNvcmRzIChwcmV2aWV3KS4gVG90YWwgcmVjb3Jkczoge2RhdGEubGVuZ3RoID4gMSA/IGRhdGEubGVuZ3RoIC0gMSA6IDB9XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgXHJcbiAgICAgIHtkYXRhLmxlbmd0aCA9PT0gMCA/IChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB5LTggdGV4dC1jZW50ZXIgdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgTm8gZGF0YSBhdmFpbGFibGUgZm9yIHByZXZpZXcuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICkgOiAoXHJcbiAgICAgICAgPD5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwib3ZlcmZsb3cteC1hdXRvIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTIwMFwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwibWluLXctZnVsbCBkaXZpZGUteSBkaXZpZGUtZ3JheS0yMDBcIj5cclxuICAgICAgICAgICAgICA8dGhlYWQgY2xhc3NOYW1lPVwiYmctZ3JheS01MFwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICB7aGVhZGVyUm93Lm1hcCgoaGVhZGVyLCBpbmRleCkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBcclxuICAgICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtNiBweS0zIHRleHQtbGVmdCB0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDAgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7aGVhZGVyfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgIDx0Ym9keSBjbGFzc05hbWU9XCJiZy13aGl0ZSBkaXZpZGUteSBkaXZpZGUtZ3JheS0yMDBcIj5cclxuICAgICAgICAgICAgICAgIHtjdXJyZW50UGFnZURhdGEubWFwKChyb3csIHJvd0luZGV4KSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgIDx0ciBrZXk9e3Jvd0luZGV4fSBjbGFzc05hbWU9e3Jvd0luZGV4ICUgMiA9PT0gMCA/ICdiZy13aGl0ZScgOiAnYmctZ3JheS01MCd9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtyb3cubWFwKChjZWxsLCBjZWxsSW5kZXgpID0+IChcclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBrZXk9e2NlbGxJbmRleH0gY2xhc3NOYW1lPVwicHgtNiBweS00IHdoaXRlc3BhY2Utbm93cmFwIHRleHQtc20gdGV4dC1ncmF5LTUwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2VsbCB8fCA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktMzAwXCI+bnVsbDwvc3Bhbj59XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB7dG90YWxQYWdlcyA+IDEgJiYgKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtMyBweS0xIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1tZCB0ZXh0LXNtXCJcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGdvVG9QYWdlKHBhZ2UgLSAxKX1cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwYWdlID09PSAxfVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIFByZXZpb3VzXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XHJcbiAgICAgICAgICAgICAgICBQYWdlIHtwYWdlfSBvZiB7dG90YWxQYWdlc31cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtMyBweS0xIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1tZCB0ZXh0LXNtXCJcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGdvVG9QYWdlKHBhZ2UgKyAxKX1cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtwYWdlID09PSB0b3RhbFBhZ2VzfVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIE5leHRcclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApfVxyXG4gICAgICAgIDwvPlxyXG4gICAgICApfVxyXG4gICAgICBcclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IGZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYmctZ3JheS01MDAgaG92ZXI6YmctZ3JheS02MDBcIlxyXG4gICAgICAgICAgb25DbGljaz17b25CYWNrfVxyXG4gICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cclxuICAgICAgICA+XHJcbiAgICAgICAgICBCYWNrXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgb25DbGljaz17b25TdGFydEluZ2VzdGlvbn1cclxuICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmcgfHwgZGF0YS5sZW5ndGggPD0gMX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7aXNMb2FkaW5nID8gJ1Byb2Nlc3NpbmcuLi4nIDogJ1N0YXJ0IEluZ2VzdGlvbid9XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufSAiXSwibmFtZXMiOlsidXNlU3RhdGUiLCJEYXRhUHJldmlldyIsImRhdGEiLCJvblN0YXJ0SW5nZXN0aW9uIiwib25CYWNrIiwiaXNMb2FkaW5nIiwicGFnZSIsInNldFBhZ2UiLCJyb3dzUGVyUGFnZSIsInRvdGFsUGFnZXMiLCJNYXRoIiwiY2VpbCIsImxlbmd0aCIsImhlYWRlclJvdyIsInN0YXJ0SW5kZXgiLCJlbmRJbmRleCIsIm1pbiIsImN1cnJlbnRQYWdlRGF0YSIsInNsaWNlIiwiZ29Ub1BhZ2UiLCJuZXdQYWdlIiwibWF4IiwiZGl2IiwiY2xhc3NOYW1lIiwiaDIiLCJzcGFuIiwidGFibGUiLCJ0aGVhZCIsInRyIiwibWFwIiwiaGVhZGVyIiwiaW5kZXgiLCJ0aCIsInRib2R5Iiwicm93Iiwicm93SW5kZXgiLCJjZWxsIiwiY2VsbEluZGV4IiwidGQiLCJidXR0b24iLCJvbkNsaWNrIiwiZGlzYWJsZWQiLCJ0eXBlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/DataPreview.tsx\n"); + +/***/ }), + +/***/ "(ssr)/./components/FlatFileForm.tsx": +/*!*************************************!*\ + !*** ./components/FlatFileForm.tsx ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FlatFileForm)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\nfunction FlatFileForm({ onSubmit, initialValues, requireFile, isLoading, title }) {\n const [config, setConfig] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialValues);\n const [file, setFile] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [validation, setValidation] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const [isDragActive, setIsDragActive] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const fileInputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const handleChange = (e)=>{\n const { name, value, type } = e.target;\n setConfig({\n ...config,\n [name]: type === \"checkbox\" ? e.target.checked : value\n });\n // Clear validation error when field is updated\n if (validation[name]) {\n setValidation((prev)=>({\n ...prev,\n [name]: \"\"\n }));\n }\n };\n const handleFileChange = (e)=>{\n if (e.target.files && e.target.files.length > 0) {\n setFile(e.target.files[0]);\n if (validation[\"file\"]) {\n setValidation((prev)=>({\n ...prev,\n \"file\": \"\"\n }));\n }\n }\n };\n const handleDragEnter = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n setIsDragActive(true);\n }, []);\n const handleDragLeave = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n setIsDragActive(false);\n }, []);\n const handleDragOver = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n }, []);\n const handleDrop = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n setIsDragActive(false);\n if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n const droppedFile = e.dataTransfer.files[0];\n // Check if file is CSV or TXT\n if (droppedFile.name.endsWith(\".csv\") || droppedFile.name.endsWith(\".txt\")) {\n setFile(droppedFile);\n if (validation[\"file\"]) {\n setValidation((prev)=>({\n ...prev,\n \"file\": \"\"\n }));\n }\n } else {\n setValidation((prev)=>({\n ...prev,\n \"file\": \"Only CSV and TXT files are supported\"\n }));\n }\n }\n }, [\n validation\n ]);\n const openFileSelector = ()=>{\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n const validateForm = ()=>{\n const errors = {};\n if (requireFile && !file) {\n errors.file = \"Please select a file to upload\";\n }\n if (!requireFile && (!config.fileName || !config.fileName.trim())) {\n errors.fileName = \"File name is required for export\";\n }\n setValidation(errors);\n return Object.keys(errors).length === 0;\n };\n const handleSubmit = (e)=>{\n e.preventDefault();\n if (validateForm()) {\n onSubmit(config, file || undefined);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white shadow-lg rounded-lg p-6 max-w-xl mx-auto transition-all duration-300 hover:shadow-xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-2xl font-semibold mb-6 text-primary\",\n children: title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 119,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n className: \"space-y-6\",\n children: [\n requireFile && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: `block text-sm font-medium ${validation.file ? \"text-red-600\" : \"text-gray-700\"} mb-2`,\n children: \"Upload File\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 123,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `border-2 border-dashed rounded-lg p-6 transition-colors ${isDragActive ? \"border-primary bg-blue-50\" : file ? \"border-green-400 bg-green-50\" : validation.file ? \"border-red-300 bg-red-50\" : \"border-gray-300 hover:border-gray-400\"}`,\n onDragEnter: handleDragEnter,\n onDragLeave: handleDragLeave,\n onDragOver: handleDragOver,\n onDrop: handleDrop,\n onClick: openFileSelector,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"file\",\n id: \"file\",\n name: \"file\",\n ref: fileInputRef,\n className: \"hidden\",\n accept: \".csv,.txt\",\n onChange: handleFileChange,\n required: requireFile\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 143,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: !file ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: `mx-auto h-12 w-12 ${validation.file ? \"text-red-400\" : \"text-gray-400\"}`,\n stroke: \"currentColor\",\n fill: \"none\",\n viewBox: \"0 0 48 48\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M28 8H12a4 4 0 00-4 4v20m32-12v8m0 0v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-4l-3.172-3.172a4 4 0 00-5.656 0L28 28M8 32l9.172-9.172a4 4 0 015.656 0L28 28m0 0l4 4m4-24h8m-4-4v8m-12 4h.02\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 158,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 157,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-gray-600\",\n children: isDragActive ? \"Drop your file here\" : \"Drag and drop your file here, or click to browse\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 165,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-gray-500\",\n children: \"Supported formats: CSV, TXT\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 168,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"h-8 w-8 text-green-500\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 175,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 174,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-left\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm font-medium text-gray-900\",\n children: file.name\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 178,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-gray-500\",\n children: [\n (file.size / 1024).toFixed(2),\n \" KB • Click to change\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 179,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 177,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 173,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 154,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 127,\n columnNumber: 13\n }, this),\n validation.file && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-red-600 font-medium\",\n children: validation.file\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 187,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 122,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"delimiter\",\n className: \"block text-sm font-medium text-gray-700 mb-1\",\n children: \"Delimiter\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"delimiter\",\n name: \"delimiter\",\n className: \"block w-full rounded-md border-gray-300 shadow-sm focus:border-primary focus:ring-primary\",\n value: config.delimiter,\n onChange: handleChange,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \",\",\n children: \"Comma (,)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 204,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \";\",\n children: \"Semicolon (;)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 205,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"\\\\t\",\n children: \"Tab (\\\\t)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 206,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"|\",\n children: \"Pipe (|)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 207,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n id: \"hasHeader\",\n name: \"hasHeader\",\n className: \"h-4 w-4 text-primary focus:ring-primary border-gray-300 rounded\",\n checked: config.hasHeader,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 212,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"hasHeader\",\n className: \"ml-2 block text-sm text-gray-700\",\n children: \"File has header row\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 220,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 211,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n !requireFile && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"fileName\",\n className: `block text-sm font-medium ${validation.fileName ? \"text-red-600\" : \"text-gray-700\"} mb-1`,\n children: \"Export File Name\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 228,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n id: \"fileName\",\n name: \"fileName\",\n className: `block w-full ${validation.fileName ? \"border-red-500 bg-red-50\" : \"border-gray-300\"} rounded-md shadow-sm focus:outline-none focus:ring-2 ${validation.fileName ? \"focus:ring-red-500\" : \"focus:ring-primary\"}`,\n placeholder: \"export.csv\",\n value: config.fileName,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 231,\n columnNumber: 13\n }, this),\n validation.fileName ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-sm text-red-600 font-medium\",\n children: validation.fileName\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 241,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-sm text-gray-500\",\n children: \"Leave empty to generate automatically.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 243,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 227,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"btn btn-primary px-6 py-2 rounded-md text-white font-medium transition-colors\",\n disabled: isLoading,\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"loading loading-spinner loading-sm mr-2\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n \"Processing...\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 257,\n columnNumber: 15\n }, this) : requireFile ? \"Upload & Process\" : \"Continue\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 250,\n columnNumber: 9\n }, this),\n Object.keys(validation).length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 p-3 bg-red-50 border border-red-200 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"h-5 w-5 text-red-500 mr-2\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 269,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 268,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-600 font-medium\",\n children: \"Please fix the errors before continuing\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 271,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 267,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 266,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 120,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 118,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL0ZsYXRGaWxlRm9ybS50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRXNEO0FBV3ZDLFNBQVNHLGFBQWEsRUFDbkNDLFFBQVEsRUFDUkMsYUFBYSxFQUNiQyxXQUFXLEVBQ1hDLFNBQVMsRUFDVEMsS0FBSyxFQUNhO0lBQ2xCLE1BQU0sQ0FBQ0MsUUFBUUMsVUFBVSxHQUFHViwrQ0FBUUEsQ0FBaUJLO0lBQ3JELE1BQU0sQ0FBQ00sTUFBTUMsUUFBUSxHQUFHWiwrQ0FBUUEsQ0FBYztJQUM5QyxNQUFNLENBQUNhLFlBQVlDLGNBQWMsR0FBR2QsK0NBQVFBLENBQXlCLENBQUM7SUFDdEUsTUFBTSxDQUFDZSxjQUFjQyxnQkFBZ0IsR0FBR2hCLCtDQUFRQSxDQUFVO0lBQzFELE1BQU1pQixlQUFlaEIsNkNBQU1BLENBQW1CO0lBRTlDLE1BQU1pQixlQUFlLENBQUNDO1FBQ3BCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRSxHQUFHSCxFQUFFSSxNQUFNO1FBRXRDYixVQUFVO1lBQ1IsR0FBR0QsTUFBTTtZQUNULENBQUNXLEtBQUssRUFBRUUsU0FBUyxhQUFhLEVBQUdDLE1BQU0sQ0FBc0JDLE9BQU8sR0FBR0g7UUFDekU7UUFFQSwrQ0FBK0M7UUFDL0MsSUFBSVIsVUFBVSxDQUFDTyxLQUFLLEVBQUU7WUFDcEJOLGNBQWNXLENBQUFBLE9BQVM7b0JBQUUsR0FBR0EsSUFBSTtvQkFBRSxDQUFDTCxLQUFLLEVBQUU7Z0JBQUc7UUFDL0M7SUFDRjtJQUVBLE1BQU1NLG1CQUFtQixDQUFDUDtRQUN4QixJQUFJQSxFQUFFSSxNQUFNLENBQUNJLEtBQUssSUFBSVIsRUFBRUksTUFBTSxDQUFDSSxLQUFLLENBQUNDLE1BQU0sR0FBRyxHQUFHO1lBQy9DaEIsUUFBUU8sRUFBRUksTUFBTSxDQUFDSSxLQUFLLENBQUMsRUFBRTtZQUN6QixJQUFJZCxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUN0QkMsY0FBY1csQ0FBQUEsT0FBUzt3QkFBRSxHQUFHQSxJQUFJO3dCQUFFLFFBQVE7b0JBQUc7WUFDL0M7UUFDRjtJQUNGO0lBRUEsTUFBTUksa0JBQWtCM0Isa0RBQVdBLENBQUMsQ0FBQ2lCO1FBQ25DQSxFQUFFVyxjQUFjO1FBQ2hCWCxFQUFFWSxlQUFlO1FBQ2pCZixnQkFBZ0I7SUFDbEIsR0FBRyxFQUFFO0lBRUwsTUFBTWdCLGtCQUFrQjlCLGtEQUFXQSxDQUFDLENBQUNpQjtRQUNuQ0EsRUFBRVcsY0FBYztRQUNoQlgsRUFBRVksZUFBZTtRQUNqQmYsZ0JBQWdCO0lBQ2xCLEdBQUcsRUFBRTtJQUVMLE1BQU1pQixpQkFBaUIvQixrREFBV0EsQ0FBQyxDQUFDaUI7UUFDbENBLEVBQUVXLGNBQWM7UUFDaEJYLEVBQUVZLGVBQWU7SUFDbkIsR0FBRyxFQUFFO0lBRUwsTUFBTUcsYUFBYWhDLGtEQUFXQSxDQUFDLENBQUNpQjtRQUM5QkEsRUFBRVcsY0FBYztRQUNoQlgsRUFBRVksZUFBZTtRQUNqQmYsZ0JBQWdCO1FBRWhCLElBQUlHLEVBQUVnQixZQUFZLENBQUNSLEtBQUssSUFBSVIsRUFBRWdCLFlBQVksQ0FBQ1IsS0FBSyxDQUFDQyxNQUFNLEdBQUcsR0FBRztZQUMzRCxNQUFNUSxjQUFjakIsRUFBRWdCLFlBQVksQ0FBQ1IsS0FBSyxDQUFDLEVBQUU7WUFDM0MsOEJBQThCO1lBQzlCLElBQUlTLFlBQVloQixJQUFJLENBQUNpQixRQUFRLENBQUMsV0FBV0QsWUFBWWhCLElBQUksQ0FBQ2lCLFFBQVEsQ0FBQyxTQUFTO2dCQUMxRXpCLFFBQVF3QjtnQkFDUixJQUFJdkIsVUFBVSxDQUFDLE9BQU8sRUFBRTtvQkFDdEJDLGNBQWNXLENBQUFBLE9BQVM7NEJBQUUsR0FBR0EsSUFBSTs0QkFBRSxRQUFRO3dCQUFHO2dCQUMvQztZQUNGLE9BQU87Z0JBQ0xYLGNBQWNXLENBQUFBLE9BQVM7d0JBQ3JCLEdBQUdBLElBQUk7d0JBQ1AsUUFBUTtvQkFDVjtZQUNGO1FBQ0Y7SUFDRixHQUFHO1FBQUNaO0tBQVc7SUFFZixNQUFNeUIsbUJBQW1CO1FBQ3ZCLElBQUlyQixhQUFhc0IsT0FBTyxFQUFFO1lBQ3hCdEIsYUFBYXNCLE9BQU8sQ0FBQ0MsS0FBSztRQUM1QjtJQUNGO0lBRUEsTUFBTUMsZUFBZTtRQUNuQixNQUFNQyxTQUFpQyxDQUFDO1FBRXhDLElBQUlwQyxlQUFlLENBQUNLLE1BQU07WUFDeEIrQixPQUFPL0IsSUFBSSxHQUFHO1FBQ2hCO1FBRUEsSUFBSSxDQUFDTCxlQUFnQixFQUFDRyxPQUFPa0MsUUFBUSxJQUFJLENBQUNsQyxPQUFPa0MsUUFBUSxDQUFDQyxJQUFJLEVBQUMsR0FBSTtZQUNqRUYsT0FBT0MsUUFBUSxHQUFHO1FBQ3BCO1FBRUE3QixjQUFjNEI7UUFDZCxPQUFPRyxPQUFPQyxJQUFJLENBQUNKLFFBQVFkLE1BQU0sS0FBSztJQUN4QztJQUVBLE1BQU1tQixlQUFlLENBQUM1QjtRQUNwQkEsRUFBRVcsY0FBYztRQUNoQixJQUFJVyxnQkFBZ0I7WUFDbEJyQyxTQUFTSyxRQUFRRSxRQUFRcUM7UUFDM0I7SUFDRjtJQUVBLHFCQUNFLDhEQUFDQztRQUFJQyxXQUFVOzswQkFDYiw4REFBQ0M7Z0JBQUdELFdBQVU7MEJBQTRDMUM7Ozs7OzswQkFDMUQsOERBQUM0QztnQkFBS2hELFVBQVUyQztnQkFBY0csV0FBVTs7b0JBQ3JDNUMsNkJBQ0MsOERBQUMyQzt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNHO2dDQUFNSCxXQUFXLENBQUMsMEJBQTBCLEVBQUVyQyxXQUFXRixJQUFJLEdBQUcsaUJBQWlCLGdCQUFnQixLQUFLLENBQUM7MENBQUU7Ozs7OzswQ0FJMUcsOERBQUNzQztnQ0FDQ0MsV0FBVyxDQUFDLHdEQUF3RCxFQUNsRW5DLGVBQ0ksOEJBQ0FKLE9BQ0UsaUNBQ0FFLFdBQVdGLElBQUksR0FDYiw2QkFDQSx3Q0FDVCxDQUFDO2dDQUNGMkMsYUFBYXpCO2dDQUNiMEIsYUFBYXZCO2dDQUNid0IsWUFBWXZCO2dDQUNad0IsUUFBUXZCO2dDQUNSd0IsU0FBU3BCOztrREFFVCw4REFBQ3FCO3dDQUNDckMsTUFBSzt3Q0FDTHNDLElBQUc7d0NBQ0h4QyxNQUFLO3dDQUNMeUMsS0FBSzVDO3dDQUNMaUMsV0FBVTt3Q0FDVlksUUFBTzt3Q0FDUEMsVUFBVXJDO3dDQUNWc0MsVUFBVTFEOzs7Ozs7a0RBR1osOERBQUMyQzt3Q0FBSUMsV0FBVTtrREFDWixDQUFDdkMscUJBQ0E7OzhEQUNFLDhEQUFDc0Q7b0RBQUlmLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRXJDLFdBQVdGLElBQUksR0FBRyxpQkFBaUIsZ0JBQWdCLENBQUM7b0RBQUV1RCxRQUFPO29EQUFlQyxNQUFLO29EQUFPQyxTQUFRO29EQUFZQyxlQUFZOzhEQUMzSiw0RUFBQ0M7d0RBQ0NDLEdBQUU7d0RBQ0ZDLGFBQVk7d0RBQ1pDLGVBQWM7d0RBQ2RDLGdCQUFlOzs7Ozs7Ozs7Ozs4REFHbkIsOERBQUNDO29EQUFFekIsV0FBVTs4REFDVm5DLGVBQWUsd0JBQXdCOzs7Ozs7OERBRTFDLDhEQUFDNEQ7b0RBQUV6QixXQUFVOzhEQUE2Qjs7Ozs7Ozt5RUFLNUMsOERBQUNEOzRDQUFJQyxXQUFVOzs4REFDYiw4REFBQ2U7b0RBQUlmLFdBQVU7b0RBQXlCa0IsU0FBUTtvREFBWUQsTUFBSzs4REFDL0QsNEVBQUNHO3dEQUFLTSxVQUFTO3dEQUFVTCxHQUFFO3dEQUF3SU0sVUFBUzs7Ozs7Ozs7Ozs7OERBRTlLLDhEQUFDNUI7b0RBQUlDLFdBQVU7O3NFQUNiLDhEQUFDeUI7NERBQUV6QixXQUFVO3NFQUFxQ3ZDLEtBQUtTLElBQUk7Ozs7OztzRUFDM0QsOERBQUN1RDs0REFBRXpCLFdBQVU7O2dFQUEwQnZDLENBQUFBLEtBQUttRSxJQUFJLEdBQUcsSUFBRyxFQUFHQyxPQUFPLENBQUM7Z0VBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs0QkFPN0VsRSxXQUFXRixJQUFJLGtCQUNkLDhEQUFDZ0U7Z0NBQUV6QixXQUFVOzBDQUF5Q3JDLFdBQVdGLElBQUk7Ozs7Ozs7Ozs7OztrQ0FLM0UsOERBQUNzQzt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNEOztrREFDQyw4REFBQ0k7d0NBQU0yQixTQUFRO3dDQUFZOUIsV0FBVTtrREFBK0M7Ozs7OztrREFHcEYsOERBQUMrQjt3Q0FDQ3JCLElBQUc7d0NBQ0h4QyxNQUFLO3dDQUNMOEIsV0FBVTt3Q0FDVjdCLE9BQU9aLE9BQU95RSxTQUFTO3dDQUN2Qm5CLFVBQVU3Qzs7MERBRVYsOERBQUNpRTtnREFBTzlELE9BQU07MERBQUk7Ozs7OzswREFDbEIsOERBQUM4RDtnREFBTzlELE9BQU07MERBQUk7Ozs7OzswREFDbEIsOERBQUM4RDtnREFBTzlELE9BQU07MERBQUs7Ozs7OzswREFDbkIsOERBQUM4RDtnREFBTzlELE9BQU07MERBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQ0FJdEIsOERBQUM0QjtnQ0FBSUMsV0FBVTs7a0RBQ2IsOERBQUNTO3dDQUNDckMsTUFBSzt3Q0FDTHNDLElBQUc7d0NBQ0h4QyxNQUFLO3dDQUNMOEIsV0FBVTt3Q0FDVjFCLFNBQVNmLE9BQU8yRSxTQUFTO3dDQUN6QnJCLFVBQVU3Qzs7Ozs7O2tEQUVaLDhEQUFDbUM7d0NBQU0yQixTQUFRO3dDQUFZOUIsV0FBVTtrREFBbUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFNM0UsQ0FBQzVDLDZCQUNBLDhEQUFDMkM7d0JBQUlDLFdBQVU7OzBDQUNiLDhEQUFDRztnQ0FBTTJCLFNBQVE7Z0NBQVc5QixXQUFXLENBQUMsMEJBQTBCLEVBQUVyQyxXQUFXOEIsUUFBUSxHQUFHLGlCQUFpQixnQkFBZ0IsS0FBSyxDQUFDOzBDQUFFOzs7Ozs7MENBR2pJLDhEQUFDZ0I7Z0NBQ0NyQyxNQUFLO2dDQUNMc0MsSUFBRztnQ0FDSHhDLE1BQUs7Z0NBQ0w4QixXQUFXLENBQUMsYUFBYSxFQUFFckMsV0FBVzhCLFFBQVEsR0FBRyw2QkFBNkIsa0JBQWtCLHNEQUFzRCxFQUFFOUIsV0FBVzhCLFFBQVEsR0FBRyx1QkFBdUIscUJBQXFCLENBQUM7Z0NBQzNOMEMsYUFBWTtnQ0FDWmhFLE9BQU9aLE9BQU9rQyxRQUFRO2dDQUN0Qm9CLFVBQVU3Qzs7Ozs7OzRCQUVYTCxXQUFXOEIsUUFBUSxpQkFDbEIsOERBQUNnQztnQ0FBRXpCLFdBQVU7MENBQXlDckMsV0FBVzhCLFFBQVE7Ozs7O3FEQUV6RSw4REFBQ2dDO2dDQUFFekIsV0FBVTswQ0FBNkI7Ozs7Ozs7Ozs7OztrQ0FPaEQsOERBQUNEO3dCQUFJQyxXQUFVO2tDQUNiLDRFQUFDb0M7NEJBQ0NoRSxNQUFLOzRCQUNMNEIsV0FBVTs0QkFDVnFDLFVBQVVoRjtzQ0FFVEEsMEJBQ0MsOERBQUMwQztnQ0FBSUMsV0FBVTs7a0RBQ2IsOERBQUNzQzt3Q0FBS3RDLFdBQVU7Ozs7OztvQ0FBaUQ7Ozs7Ozt1Q0FHakU1QyxjQUFjLHFCQUFxQjs7Ozs7Ozs7Ozs7b0JBSTFDdUMsT0FBT0MsSUFBSSxDQUFDakMsWUFBWWUsTUFBTSxHQUFHLG1CQUNoQyw4REFBQ3FCO3dCQUFJQyxXQUFVO2tDQUNiLDRFQUFDRDs0QkFBSUMsV0FBVTs7OENBQ2IsOERBQUNlO29DQUFJZixXQUFVO29DQUE0QmlCLE1BQUs7b0NBQU9ELFFBQU87b0NBQWVFLFNBQVE7b0NBQVlxQixPQUFNOzhDQUNyRyw0RUFBQ25CO3dDQUFLRyxlQUFjO3dDQUFRQyxnQkFBZTt3Q0FBUUYsYUFBWTt3Q0FBSUQsR0FBRTs7Ozs7Ozs7Ozs7OENBRXZFLDhEQUFDaUI7b0NBQUt0QyxXQUFVOzhDQUEyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPekQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vY29tcG9uZW50cy9GbGF0RmlsZUZvcm0udHN4Pzg1NmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xyXG5cclxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IEZsYXRGaWxlQ29uZmlnIH0gZnJvbSAnQC9saWIvYXBpJztcclxuXHJcbmludGVyZmFjZSBGbGF0RmlsZUZvcm1Qcm9wcyB7XHJcbiAgb25TdWJtaXQ6IChjb25maWc6IEZsYXRGaWxlQ29uZmlnLCBmaWxlPzogRmlsZSkgPT4gdm9pZDtcclxuICBpbml0aWFsVmFsdWVzOiBGbGF0RmlsZUNvbmZpZztcclxuICByZXF1aXJlRmlsZTogYm9vbGVhbjtcclxuICBpc0xvYWRpbmc6IGJvb2xlYW47XHJcbiAgdGl0bGU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRmxhdEZpbGVGb3JtKHtcclxuICBvblN1Ym1pdCxcclxuICBpbml0aWFsVmFsdWVzLFxyXG4gIHJlcXVpcmVGaWxlLFxyXG4gIGlzTG9hZGluZyxcclxuICB0aXRsZVxyXG59OiBGbGF0RmlsZUZvcm1Qcm9wcykge1xyXG4gIGNvbnN0IFtjb25maWcsIHNldENvbmZpZ10gPSB1c2VTdGF0ZTxGbGF0RmlsZUNvbmZpZz4oaW5pdGlhbFZhbHVlcyk7XHJcbiAgY29uc3QgW2ZpbGUsIHNldEZpbGVdID0gdXNlU3RhdGU8RmlsZSB8IG51bGw+KG51bGwpO1xyXG4gIGNvbnN0IFt2YWxpZGF0aW9uLCBzZXRWYWxpZGF0aW9uXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KTtcclxuICBjb25zdCBbaXNEcmFnQWN0aXZlLCBzZXRJc0RyYWdBY3RpdmVdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudD4pID0+IHtcclxuICAgIGNvbnN0IHsgbmFtZSwgdmFsdWUsIHR5cGUgfSA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBcclxuICAgIHNldENvbmZpZyh7XHJcbiAgICAgIC4uLmNvbmZpZyxcclxuICAgICAgW25hbWVdOiB0eXBlID09PSAnY2hlY2tib3gnID8gKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQgOiB2YWx1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2xlYXIgdmFsaWRhdGlvbiBlcnJvciB3aGVuIGZpZWxkIGlzIHVwZGF0ZWRcclxuICAgIGlmICh2YWxpZGF0aW9uW25hbWVdKSB7XHJcbiAgICAgIHNldFZhbGlkYXRpb24ocHJldiA9PiAoeyAuLi5wcmV2LCBbbmFtZV06ICcnIH0pKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XHJcbiAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBzZXRGaWxlKGUudGFyZ2V0LmZpbGVzWzBdKTtcclxuICAgICAgaWYgKHZhbGlkYXRpb25bJ2ZpbGUnXSkge1xyXG4gICAgICAgIHNldFZhbGlkYXRpb24ocHJldiA9PiAoeyAuLi5wcmV2LCAnZmlsZSc6ICcnIH0pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZURyYWdFbnRlciA9IHVzZUNhbGxiYWNrKChlOiBSZWFjdC5EcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgc2V0SXNEcmFnQWN0aXZlKHRydWUpO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlRHJhZ0xlYXZlID0gdXNlQ2FsbGJhY2soKGU6IFJlYWN0LkRyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBzZXRJc0RyYWdBY3RpdmUoZmFsc2UpO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlRHJhZ092ZXIgPSB1c2VDYWxsYmFjaygoZTogUmVhY3QuRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9LCBbXSk7XHJcblxyXG4gIGNvbnN0IGhhbmRsZURyb3AgPSB1c2VDYWxsYmFjaygoZTogUmVhY3QuRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHNldElzRHJhZ0FjdGl2ZShmYWxzZSk7XHJcbiAgICBcclxuICAgIGlmIChlLmRhdGFUcmFuc2Zlci5maWxlcyAmJiBlLmRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGRyb3BwZWRGaWxlID0gZS5kYXRhVHJhbnNmZXIuZmlsZXNbMF07XHJcbiAgICAgIC8vIENoZWNrIGlmIGZpbGUgaXMgQ1NWIG9yIFRYVFxyXG4gICAgICBpZiAoZHJvcHBlZEZpbGUubmFtZS5lbmRzV2l0aCgnLmNzdicpIHx8IGRyb3BwZWRGaWxlLm5hbWUuZW5kc1dpdGgoJy50eHQnKSkge1xyXG4gICAgICAgIHNldEZpbGUoZHJvcHBlZEZpbGUpO1xyXG4gICAgICAgIGlmICh2YWxpZGF0aW9uWydmaWxlJ10pIHtcclxuICAgICAgICAgIHNldFZhbGlkYXRpb24ocHJldiA9PiAoeyAuLi5wcmV2LCAnZmlsZSc6ICcnIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0VmFsaWRhdGlvbihwcmV2ID0+ICh7IFxyXG4gICAgICAgICAgLi4ucHJldiwgXHJcbiAgICAgICAgICAnZmlsZSc6ICdPbmx5IENTViBhbmQgVFhUIGZpbGVzIGFyZSBzdXBwb3J0ZWQnIFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sIFt2YWxpZGF0aW9uXSk7XHJcblxyXG4gIGNvbnN0IG9wZW5GaWxlU2VsZWN0b3IgPSAoKSA9PiB7XHJcbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQuY2xpY2soKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCB2YWxpZGF0ZUZvcm0gPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIFxyXG4gICAgaWYgKHJlcXVpcmVGaWxlICYmICFmaWxlKSB7XHJcbiAgICAgIGVycm9ycy5maWxlID0gJ1BsZWFzZSBzZWxlY3QgYSBmaWxlIHRvIHVwbG9hZCc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFyZXF1aXJlRmlsZSAmJiAoIWNvbmZpZy5maWxlTmFtZSB8fCAhY29uZmlnLmZpbGVOYW1lLnRyaW0oKSkpIHtcclxuICAgICAgZXJyb3JzLmZpbGVOYW1lID0gJ0ZpbGUgbmFtZSBpcyByZXF1aXJlZCBmb3IgZXhwb3J0JztcclxuICAgIH1cclxuICAgIFxyXG4gICAgc2V0VmFsaWRhdGlvbihlcnJvcnMpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID09PSAwO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICh2YWxpZGF0ZUZvcm0oKSkge1xyXG4gICAgICBvblN1Ym1pdChjb25maWcsIGZpbGUgfHwgdW5kZWZpbmVkKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSBzaGFkb3ctbGcgcm91bmRlZC1sZyBwLTYgbWF4LXcteGwgbXgtYXV0byB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgaG92ZXI6c2hhZG93LXhsXCI+XHJcbiAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIG1iLTYgdGV4dC1wcmltYXJ5XCI+e3RpdGxlfTwvaDI+XHJcbiAgICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXR9IGNsYXNzTmFtZT1cInNwYWNlLXktNlwiPlxyXG4gICAgICAgIHtyZXF1aXJlRmlsZSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17YGJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gJHt2YWxpZGF0aW9uLmZpbGUgPyAndGV4dC1yZWQtNjAwJyA6ICd0ZXh0LWdyYXktNzAwJ30gbWItMmB9PlxyXG4gICAgICAgICAgICAgIFVwbG9hZCBGaWxlXHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YGJvcmRlci0yIGJvcmRlci1kYXNoZWQgcm91bmRlZC1sZyBwLTYgdHJhbnNpdGlvbi1jb2xvcnMgJHtcclxuICAgICAgICAgICAgICAgIGlzRHJhZ0FjdGl2ZSBcclxuICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgYmctYmx1ZS01MCcgXHJcbiAgICAgICAgICAgICAgICAgIDogZmlsZSBcclxuICAgICAgICAgICAgICAgICAgICA/ICdib3JkZXItZ3JlZW4tNDAwIGJnLWdyZWVuLTUwJyBcclxuICAgICAgICAgICAgICAgICAgICA6IHZhbGlkYXRpb24uZmlsZSBcclxuICAgICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1yZWQtMzAwIGJnLXJlZC01MCdcclxuICAgICAgICAgICAgICAgICAgICAgIDogJ2JvcmRlci1ncmF5LTMwMCBob3Zlcjpib3JkZXItZ3JheS00MDAnXHJcbiAgICAgICAgICAgICAgfWB9XHJcbiAgICAgICAgICAgICAgb25EcmFnRW50ZXI9e2hhbmRsZURyYWdFbnRlcn1cclxuICAgICAgICAgICAgICBvbkRyYWdMZWF2ZT17aGFuZGxlRHJhZ0xlYXZlfVxyXG4gICAgICAgICAgICAgIG9uRHJhZ092ZXI9e2hhbmRsZURyYWdPdmVyfVxyXG4gICAgICAgICAgICAgIG9uRHJvcD17aGFuZGxlRHJvcH1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXtvcGVuRmlsZVNlbGVjdG9yfVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICBpZD1cImZpbGVcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cImZpbGVcIlxyXG4gICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgYWNjZXB0PVwiLmNzdiwudHh0XCJcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ9e3JlcXVpcmVGaWxlfVxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgeyFmaWxlID8gKFxyXG4gICAgICAgICAgICAgICAgICA8PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPXtgbXgtYXV0byBoLTEyIHctMTIgJHt2YWxpZGF0aW9uLmZpbGUgPyAndGV4dC1yZWQtNDAwJyA6ICd0ZXh0LWdyYXktNDAwJ31gfSBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgNDggNDhcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTI4IDhIMTJhNCA0IDAgMDAtNCA0djIwbTMyLTEydjhtMCAwdjhhNCA0IDAgMDEtNCA0SDEyYTQgNCAwIDAxLTQtNHYtNG0zMi00bC0zLjE3Mi0zLjE3MmE0IDQgMCAwMC01LjY1NiAwTDI4IDI4TTggMzJsOS4xNzItOS4xNzJhNCA0IDAgMDE1LjY1NiAwTDI4IDI4bTAgMGw0IDRtNC0yNGg4bS00LTR2OG0tMTIgNGguMDJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9XCIyXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LWdyYXktNjAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7aXNEcmFnQWN0aXZlID8gJ0Ryb3AgeW91ciBmaWxlIGhlcmUnIDogJ0RyYWcgYW5kIGRyb3AgeW91ciBmaWxlIGhlcmUsIG9yIGNsaWNrIHRvIGJyb3dzZSd9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0ZWQgZm9ybWF0czogQ1NWLCBUWFRcclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvPlxyXG4gICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cImgtOCB3LTggdGV4dC1ncmVlbi01MDBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbFJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjcwNy05LjI5M2ExIDEgMCAwMC0xLjQxNC0xLjQxNEw5IDEwLjU4NiA3LjcwNyA5LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNGwyIDJhMSAxIDAgMDAxLjQxNCAwbDQtNHpcIiBjbGlwUnVsZT1cImV2ZW5vZGRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDBcIj57ZmlsZS5uYW1lfTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ncmF5LTUwMFwiPnsoZmlsZS5zaXplIC8gMTAyNCkudG9GaXhlZCgyKX0gS0Ig4oCiIENsaWNrIHRvIGNoYW5nZTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHt2YWxpZGF0aW9uLmZpbGUgJiYgKFxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSB0ZXh0LXJlZC02MDAgZm9udC1tZWRpdW1cIj57dmFsaWRhdGlvbi5maWxlfTwvcD5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMSBtZDpncmlkLWNvbHMtMiBnYXAtNCBtYi02XCI+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImRlbGltaXRlclwiIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgRGVsaW1pdGVyXHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxzZWxlY3RcclxuICAgICAgICAgICAgICBpZD1cImRlbGltaXRlclwiXHJcbiAgICAgICAgICAgICAgbmFtZT1cImRlbGltaXRlclwiXHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmxvY2sgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyLWdyYXktMzAwIHNoYWRvdy1zbSBmb2N1czpib3JkZXItcHJpbWFyeSBmb2N1czpyaW5nLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgIHZhbHVlPXtjb25maWcuZGVsaW1pdGVyfVxyXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiLFwiPkNvbW1hICgsKTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI7XCI+U2VtaWNvbG9uICg7KTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcXHRcIj5UYWIgKFxcdCk8L29wdGlvbj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwifFwiPlBpcGUgKHwpPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgIGlkPVwiaGFzSGVhZGVyXCJcclxuICAgICAgICAgICAgICBuYW1lPVwiaGFzSGVhZGVyXCJcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTQgdy00IHRleHQtcHJpbWFyeSBmb2N1czpyaW5nLXByaW1hcnkgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWRcIlxyXG4gICAgICAgICAgICAgIGNoZWNrZWQ9e2NvbmZpZy5oYXNIZWFkZXJ9XHJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJoYXNIZWFkZXJcIiBjbGFzc05hbWU9XCJtbC0yIGJsb2NrIHRleHQtc20gdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICAgIEZpbGUgaGFzIGhlYWRlciByb3dcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICB7IXJlcXVpcmVGaWxlICYmIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImZpbGVOYW1lXCIgY2xhc3NOYW1lPXtgYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSAke3ZhbGlkYXRpb24uZmlsZU5hbWUgPyAndGV4dC1yZWQtNjAwJyA6ICd0ZXh0LWdyYXktNzAwJ30gbWItMWB9PlxyXG4gICAgICAgICAgICAgIEV4cG9ydCBGaWxlIE5hbWVcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIGlkPVwiZmlsZU5hbWVcIlxyXG4gICAgICAgICAgICAgIG5hbWU9XCJmaWxlTmFtZVwiXHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYmxvY2sgdy1mdWxsICR7dmFsaWRhdGlvbi5maWxlTmFtZSA/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtNTAnIDogJ2JvcmRlci1ncmF5LTMwMCd9IHJvdW5kZWQtbWQgc2hhZG93LXNtIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgJHt2YWxpZGF0aW9uLmZpbGVOYW1lID8gJ2ZvY3VzOnJpbmctcmVkLTUwMCcgOiAnZm9jdXM6cmluZy1wcmltYXJ5J31gfVxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZXhwb3J0LmNzdlwiXHJcbiAgICAgICAgICAgICAgdmFsdWU9e2NvbmZpZy5maWxlTmFtZX1cclxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB7dmFsaWRhdGlvbi5maWxlTmFtZSA/IChcclxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0xIHRleHQtc20gdGV4dC1yZWQtNjAwIGZvbnQtbWVkaXVtXCI+e3ZhbGlkYXRpb24uZmlsZU5hbWV9PC9wPlxyXG4gICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgICAgICAgICBMZWF2ZSBlbXB0eSB0byBnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBqdXN0aWZ5LWVuZFwiPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5IHB4LTYgcHktMiByb3VuZGVkLW1kIHRleHQtd2hpdGUgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnNcIlxyXG4gICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7aXNMb2FkaW5nID8gKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxvYWRpbmcgbG9hZGluZy1zcGlubmVyIGxvYWRpbmctc20gbXItMlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIFByb2Nlc3NpbmcuLi5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKSA6IHJlcXVpcmVGaWxlID8gJ1VwbG9hZCAmIFByb2Nlc3MnIDogJ0NvbnRpbnVlJ31cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICB7T2JqZWN0LmtleXModmFsaWRhdGlvbikubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgcC0zIGJnLXJlZC01MCBib3JkZXIgYm9yZGVyLXJlZC0yMDAgcm91bmRlZC1tZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJoLTUgdy01IHRleHQtcmVkLTUwMCBtci0yXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPVwiMlwiIGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmVkLTYwMCBmb250LW1lZGl1bVwiPlBsZWFzZSBmaXggdGhlIGVycm9ycyBiZWZvcmUgY29udGludWluZzwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUNhbGxiYWNrIiwiRmxhdEZpbGVGb3JtIiwib25TdWJtaXQiLCJpbml0aWFsVmFsdWVzIiwicmVxdWlyZUZpbGUiLCJpc0xvYWRpbmciLCJ0aXRsZSIsImNvbmZpZyIsInNldENvbmZpZyIsImZpbGUiLCJzZXRGaWxlIiwidmFsaWRhdGlvbiIsInNldFZhbGlkYXRpb24iLCJpc0RyYWdBY3RpdmUiLCJzZXRJc0RyYWdBY3RpdmUiLCJmaWxlSW5wdXRSZWYiLCJoYW5kbGVDaGFuZ2UiLCJlIiwibmFtZSIsInZhbHVlIiwidHlwZSIsInRhcmdldCIsImNoZWNrZWQiLCJwcmV2IiwiaGFuZGxlRmlsZUNoYW5nZSIsImZpbGVzIiwibGVuZ3RoIiwiaGFuZGxlRHJhZ0VudGVyIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJoYW5kbGVEcmFnTGVhdmUiLCJoYW5kbGVEcmFnT3ZlciIsImhhbmRsZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJkcm9wcGVkRmlsZSIsImVuZHNXaXRoIiwib3BlbkZpbGVTZWxlY3RvciIsImN1cnJlbnQiLCJjbGljayIsInZhbGlkYXRlRm9ybSIsImVycm9ycyIsImZpbGVOYW1lIiwidHJpbSIsIk9iamVjdCIsImtleXMiLCJoYW5kbGVTdWJtaXQiLCJ1bmRlZmluZWQiLCJkaXYiLCJjbGFzc05hbWUiLCJoMiIsImZvcm0iLCJsYWJlbCIsIm9uRHJhZ0VudGVyIiwib25EcmFnTGVhdmUiLCJvbkRyYWdPdmVyIiwib25Ecm9wIiwib25DbGljayIsImlucHV0IiwiaWQiLCJyZWYiLCJhY2NlcHQiLCJvbkNoYW5nZSIsInJlcXVpcmVkIiwic3ZnIiwic3Ryb2tlIiwiZmlsbCIsInZpZXdCb3giLCJhcmlhLWhpZGRlbiIsInBhdGgiLCJkIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJwIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSIsInNpemUiLCJ0b0ZpeGVkIiwiaHRtbEZvciIsInNlbGVjdCIsImRlbGltaXRlciIsIm9wdGlvbiIsImhhc0hlYWRlciIsInBsYWNlaG9sZGVyIiwiYnV0dG9uIiwiZGlzYWJsZWQiLCJzcGFuIiwieG1sbnMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/FlatFileForm.tsx\n"); + +/***/ }), + +/***/ "(ssr)/./components/IngestionResults.tsx": +/*!*****************************************!*\ + !*** ./components/IngestionResults.tsx ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ IngestionResults)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \nfunction IngestionResults({ results, onReset }) {\n if (!results) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-semibold mb-6\",\n children: \"No Results Yet\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 17,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-500\",\n children: \"No ingestion results available.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 18,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"btn btn-primary\",\n onClick: onReset,\n children: \"Start Over\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 20,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 19,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 16,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `card ${results.success ? \"border-green-200\" : \"border-red-200\"}`,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `w-12 h-12 rounded-full flex items-center justify-center ${results.success ? \"bg-green-100 text-green-600\" : \"bg-red-100 text-red-600\"}`,\n children: results.success ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-6 w-6\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 40,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 39,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-6 w-6\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 44,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 43,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 35,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-semibold ml-4\",\n children: results.success ? \"Ingestion Completed Successfully\" : \"Ingestion Failed\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 48,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 34,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6 p-4 bg-gray-50 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-700\",\n children: results.message\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 54,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 53,\n columnNumber: 7\n }, this),\n results.success && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium\",\n children: \"Summary\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 60,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 59,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-blue-50 p-4 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-700\",\n children: \"Total Records Processed:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 64,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold\",\n children: results.totalRecords.toLocaleString()\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 65,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 63,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 62,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 58,\n columnNumber: 9\n }, this),\n results.success && results.fileName && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium\",\n children: \"Download\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 74,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 73,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-green-50 p-4 rounded-lg flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-700\",\n children: \"File available for download:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 77,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: results.fileName,\n className: \"btn btn-primary text-sm\",\n download: true,\n children: \"Download File\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 78,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 76,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 72,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"btn btn-accent\",\n onClick: onReset,\n children: \"Start New Ingestion\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 90,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 89,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 33,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL0luZ2VzdGlvblJlc3VsdHMudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFTZSxTQUFTQSxpQkFBaUIsRUFDdkNDLE9BQU8sRUFDUEMsT0FBTyxFQUNlO0lBQ3RCLElBQUksQ0FBQ0QsU0FBUztRQUNaLHFCQUNFLDhEQUFDRTtZQUFJQyxXQUFVOzs4QkFDYiw4REFBQ0M7b0JBQUdELFdBQVU7OEJBQTZCOzs7Ozs7OEJBQzNDLDhEQUFDRTtvQkFBRUYsV0FBVTs4QkFBZ0I7Ozs7Ozs4QkFDN0IsOERBQUNEO29CQUFJQyxXQUFVOzhCQUNiLDRFQUFDRzt3QkFDQ0MsTUFBSzt3QkFDTEosV0FBVTt3QkFDVkssU0FBU1A7a0NBQ1Y7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBTVQ7SUFFQSxxQkFDRSw4REFBQ0M7UUFBSUMsV0FBVyxDQUFDLEtBQUssRUFBRUgsUUFBUVMsT0FBTyxHQUFHLHFCQUFxQixpQkFBaUIsQ0FBQzs7MEJBQy9FLDhEQUFDUDtnQkFBSUMsV0FBVTs7a0NBQ2IsOERBQUNEO3dCQUFJQyxXQUFXLENBQUMsd0RBQXdELEVBQ3ZFSCxRQUFRUyxPQUFPLEdBQUcsZ0NBQWdDLDBCQUNuRCxDQUFDO2tDQUNDVCxRQUFRUyxPQUFPLGlCQUNkLDhEQUFDQzs0QkFBSUMsT0FBTTs0QkFBNkJSLFdBQVU7NEJBQVVTLE1BQUs7NEJBQU9DLFNBQVE7NEJBQVlDLFFBQU87c0NBQ2pHLDRFQUFDQztnQ0FBS0MsZUFBYztnQ0FBUUMsZ0JBQWU7Z0NBQVFDLGFBQWE7Z0NBQUdDLEdBQUU7Ozs7Ozs7Ozs7aURBR3ZFLDhEQUFDVDs0QkFBSUMsT0FBTTs0QkFBNkJSLFdBQVU7NEJBQVVTLE1BQUs7NEJBQU9DLFNBQVE7NEJBQVlDLFFBQU87c0NBQ2pHLDRFQUFDQztnQ0FBS0MsZUFBYztnQ0FBUUMsZ0JBQWU7Z0NBQVFDLGFBQWE7Z0NBQUdDLEdBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBSTNFLDhEQUFDZjt3QkFBR0QsV0FBVTtrQ0FDWEgsUUFBUVMsT0FBTyxHQUFHLHFDQUFxQzs7Ozs7Ozs7Ozs7OzBCQUk1RCw4REFBQ1A7Z0JBQUlDLFdBQVU7MEJBQ2IsNEVBQUNFO29CQUFFRixXQUFVOzhCQUFpQkgsUUFBUW9CLE9BQU87Ozs7Ozs7Ozs7O1lBRzlDcEIsUUFBUVMsT0FBTyxrQkFDZCw4REFBQ1A7Z0JBQUlDLFdBQVU7O2tDQUNiLDhEQUFDRDt3QkFBSUMsV0FBVTtrQ0FDYiw0RUFBQ2tCOzRCQUFHbEIsV0FBVTtzQ0FBc0I7Ozs7Ozs7Ozs7O2tDQUV0Qyw4REFBQ0Q7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNEOzRCQUFJQyxXQUFVOzs4Q0FDYiw4REFBQ21CO29DQUFLbkIsV0FBVTs4Q0FBZ0I7Ozs7Ozs4Q0FDaEMsOERBQUNtQjtvQ0FBS25CLFdBQVU7OENBQWlCSCxRQUFRdUIsWUFBWSxDQUFDQyxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZQU0zRXhCLFFBQVFTLE9BQU8sSUFBSVQsUUFBUXlCLFFBQVEsa0JBQ2xDLDhEQUFDdkI7Z0JBQUlDLFdBQVU7O2tDQUNiLDhEQUFDRDt3QkFBSUMsV0FBVTtrQ0FDYiw0RUFBQ2tCOzRCQUFHbEIsV0FBVTtzQ0FBc0I7Ozs7Ozs7Ozs7O2tDQUV0Qyw4REFBQ0Q7d0JBQUlDLFdBQVU7OzBDQUNiLDhEQUFDbUI7Z0NBQUtuQixXQUFVOzBDQUFnQjs7Ozs7OzBDQUNoQyw4REFBQ3VCO2dDQUNDQyxNQUFNM0IsUUFBUXlCLFFBQVE7Z0NBQ3RCdEIsV0FBVTtnQ0FDVnlCLFFBQVE7MENBQ1Q7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFPUCw4REFBQzFCO2dCQUFJQyxXQUFVOzBCQUNiLDRFQUFDRztvQkFDQ0MsTUFBSztvQkFDTEosV0FBVTtvQkFDVkssU0FBU1A7OEJBQ1Y7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTVQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vY29tcG9uZW50cy9Jbmdlc3Rpb25SZXN1bHRzLnRzeD84MWI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcclxuXHJcbmltcG9ydCB7IEluZ2VzdGlvblJlc3BvbnNlIH0gZnJvbSAnQC9saWIvYXBpJztcclxuXHJcbmludGVyZmFjZSBJbmdlc3Rpb25SZXN1bHRzUHJvcHMge1xyXG4gIHJlc3VsdHM6IEluZ2VzdGlvblJlc3BvbnNlIHwgbnVsbDtcclxuICBvblJlc2V0OiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJbmdlc3Rpb25SZXN1bHRzKHtcclxuICByZXN1bHRzLFxyXG4gIG9uUmVzZXRcclxufTogSW5nZXN0aW9uUmVzdWx0c1Byb3BzKSB7XHJcbiAgaWYgKCFyZXN1bHRzKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRcIj5cclxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LXNlbWlib2xkIG1iLTZcIj5ObyBSZXN1bHRzIFlldDwvaDI+XHJcbiAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMFwiPk5vIGluZ2VzdGlvbiByZXN1bHRzIGF2YWlsYWJsZS48L3A+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02XCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtvblJlc2V0fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBTdGFydCBPdmVyXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPXtgY2FyZCAke3Jlc3VsdHMuc3VjY2VzcyA/ICdib3JkZXItZ3JlZW4tMjAwJyA6ICdib3JkZXItcmVkLTIwMCd9YH0+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgbWItNlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgdy0xMiBoLTEyIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciAke1xyXG4gICAgICAgICAgcmVzdWx0cy5zdWNjZXNzID8gJ2JnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTYwMCcgOiAnYmctcmVkLTEwMCB0ZXh0LXJlZC02MDAnXHJcbiAgICAgICAgfWB9PlxyXG4gICAgICAgICAge3Jlc3VsdHMuc3VjY2VzcyA/IChcclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3NOYW1lPVwiaC02IHctNlwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk01IDEzbDQgNEwxOSA3XCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzc05hbWU9XCJoLTYgdy02XCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteGwgZm9udC1zZW1pYm9sZCBtbC00XCI+XHJcbiAgICAgICAgICB7cmVzdWx0cy5zdWNjZXNzID8gJ0luZ2VzdGlvbiBDb21wbGV0ZWQgU3VjY2Vzc2Z1bGx5JyA6ICdJbmdlc3Rpb24gRmFpbGVkJ31cclxuICAgICAgICA8L2gyPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNiBwLTQgYmctZ3JheS01MCByb3VuZGVkLWxnXCI+XHJcbiAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTcwMFwiPntyZXN1bHRzLm1lc3NhZ2V9PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIHtyZXN1bHRzLnN1Y2Nlc3MgJiYgKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtXCI+U3VtbWFyeTwvaDM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctYmx1ZS01MCBwLTQgcm91bmRlZC1sZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTcwMFwiPlRvdGFsIFJlY29yZHMgUHJvY2Vzc2VkOjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkXCI+e3Jlc3VsdHMudG90YWxSZWNvcmRzLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG5cclxuICAgICAge3Jlc3VsdHMuc3VjY2VzcyAmJiByZXN1bHRzLmZpbGVOYW1lICYmIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bVwiPkRvd25sb2FkPC9oMz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1ncmVlbi01MCBwLTQgcm91bmRlZC1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTcwMFwiPkZpbGUgYXZhaWxhYmxlIGZvciBkb3dubG9hZDo8L3NwYW4+XHJcbiAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgaHJlZj17cmVzdWx0cy5maWxlTmFtZX1cclxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1zbVwiXHJcbiAgICAgICAgICAgICAgZG93bmxvYWRcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIERvd25sb2FkIEZpbGVcclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTZcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tYWNjZW50XCJcclxuICAgICAgICAgIG9uQ2xpY2s9e29uUmVzZXR9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgU3RhcnQgTmV3IEluZ2VzdGlvblxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn0gIl0sIm5hbWVzIjpbIkluZ2VzdGlvblJlc3VsdHMiLCJyZXN1bHRzIiwib25SZXNldCIsImRpdiIsImNsYXNzTmFtZSIsImgyIiwicCIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwic3VjY2VzcyIsInN2ZyIsInhtbG5zIiwiZmlsbCIsInZpZXdCb3giLCJzdHJva2UiLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwibWVzc2FnZSIsImgzIiwic3BhbiIsInRvdGFsUmVjb3JkcyIsInRvTG9jYWxlU3RyaW5nIiwiZmlsZU5hbWUiLCJhIiwiaHJlZiIsImRvd25sb2FkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/IngestionResults.tsx\n"); + +/***/ }), + +/***/ "(ssr)/./components/StatusIndicator.tsx": +/*!****************************************!*\ + !*** ./components/StatusIndicator.tsx ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ StatusIndicator)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\nfunction StatusIndicator({ status, message }) {\n const getStatusColor = ()=>{\n switch(status){\n case \"idle\":\n return \"bg-gray-100 border-gray-200\";\n case \"connecting\":\n return \"bg-blue-50 border-blue-200\";\n case \"fetching\":\n return \"bg-blue-50 border-blue-300\";\n case \"ingesting\":\n return \"bg-yellow-50 border-yellow-200\";\n case \"completed\":\n return \"bg-green-50 border-green-200\";\n case \"error\":\n return \"bg-red-50 border-red-200\";\n default:\n return \"bg-gray-100 border-gray-200\";\n }\n };\n const getTextColor = ()=>{\n switch(status){\n case \"idle\":\n return \"text-gray-700\";\n case \"connecting\":\n return \"text-blue-700\";\n case \"fetching\":\n return \"text-blue-700\";\n case \"ingesting\":\n return \"text-yellow-700\";\n case \"completed\":\n return \"text-green-700\";\n case \"error\":\n return \"text-red-700\";\n default:\n return \"text-gray-700\";\n }\n };\n const getStatusText = ()=>{\n switch(status){\n case \"idle\":\n return \"Ready\";\n case \"connecting\":\n return \"Connecting...\";\n case \"fetching\":\n return \"Fetching Data...\";\n case \"ingesting\":\n return \"Processing Data...\";\n case \"completed\":\n return \"Completed\";\n case \"error\":\n return \"Error\";\n default:\n return \"Ready\";\n }\n };\n const getStatusIcon = ()=>{\n switch(status){\n case \"idle\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-gray-200 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-6 w-6 text-gray-600\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm1-11a1 1 0 10-2 0v3.586L7.707 9.293a1 1 0 00-1.414 1.414l3 3a1 1 0 001.414 0l3-3a1 1 0 00-1.414-1.414L11 10.586V7z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 55,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 54,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 53,\n columnNumber: 11\n }, this);\n case \"connecting\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-blue-200 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"animate-spin h-6 w-6 text-blue-600\",\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n className: \"opacity-25\",\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n stroke: \"currentColor\",\n strokeWidth: \"4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 63,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n className: \"opacity-75\",\n fill: \"currentColor\",\n d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 64,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 62,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 61,\n columnNumber: 11\n }, this);\n case \"fetching\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-blue-300 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"animate-spin h-6 w-6 text-blue-700\",\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n className: \"opacity-25\",\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n stroke: \"currentColor\",\n strokeWidth: \"4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 72,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n className: \"opacity-75\",\n fill: \"currentColor\",\n d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 73,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 71,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 70,\n columnNumber: 11\n }, this);\n case \"ingesting\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-yellow-200 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"animate-pulse h-6 w-6 text-yellow-700\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 81,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 80,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 79,\n columnNumber: 11\n }, this);\n case \"completed\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-green-200 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-6 w-6 text-green-700\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 89,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 88,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 87,\n columnNumber: 11\n }, this);\n case \"error\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-red-200 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-6 w-6 text-red-700\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 97,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 96,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 95,\n columnNumber: 11\n }, this);\n default:\n return null;\n }\n };\n const getProgressBarWidth = ()=>{\n switch(status){\n case \"idle\":\n return \"w-0\";\n case \"connecting\":\n return \"w-1/4\";\n case \"fetching\":\n return \"w-1/2\";\n case \"ingesting\":\n return \"w-3/4\";\n case \"completed\":\n return \"w-full\";\n case \"error\":\n return \"w-full\";\n default:\n return \"w-0\";\n }\n };\n const getProgressBarColor = ()=>{\n switch(status){\n case \"idle\":\n return \"bg-gray-300\";\n case \"connecting\":\n return \"bg-blue-400\";\n case \"fetching\":\n return \"bg-blue-500\";\n case \"ingesting\":\n return \"bg-yellow-500\";\n case \"completed\":\n return \"bg-green-500\";\n case \"error\":\n return \"bg-red-500\";\n default:\n return \"bg-gray-300\";\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `${getStatusColor()} border rounded-lg p-5 mb-6 transition-all duration-300 shadow-sm hover:shadow-md`,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-shrink-0\",\n children: getStatusIcon()\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 133,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"ml-4 flex-grow\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: `text-base font-medium ${getTextColor()}`,\n children: getStatusText()\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 137,\n columnNumber: 11\n }, this),\n message && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-sm text-gray-700 max-w-prose\",\n children: message\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 139,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 136,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 132,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 w-full bg-gray-200 rounded-full h-2 overflow-hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: `${getProgressBarColor()} h-2 rounded-full transition-all duration-700 ease-in-out ${getProgressBarWidth()}`\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 147,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 146,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 131,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL1N0YXR1c0luZGljYXRvci50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRTBCO0FBU1gsU0FBU0MsZ0JBQWdCLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxFQUF3QjtJQUMvRSxNQUFNQyxpQkFBaUI7UUFDckIsT0FBUUY7WUFDTixLQUFLO2dCQUFRLE9BQU87WUFDcEIsS0FBSztnQkFBYyxPQUFPO1lBQzFCLEtBQUs7Z0JBQVksT0FBTztZQUN4QixLQUFLO2dCQUFhLE9BQU87WUFDekIsS0FBSztnQkFBYSxPQUFPO1lBQ3pCLEtBQUs7Z0JBQVMsT0FBTztZQUNyQjtnQkFBUyxPQUFPO1FBQ2xCO0lBQ0Y7SUFFQSxNQUFNRyxlQUFlO1FBQ25CLE9BQVFIO1lBQ04sS0FBSztnQkFBUSxPQUFPO1lBQ3BCLEtBQUs7Z0JBQWMsT0FBTztZQUMxQixLQUFLO2dCQUFZLE9BQU87WUFDeEIsS0FBSztnQkFBYSxPQUFPO1lBQ3pCLEtBQUs7Z0JBQWEsT0FBTztZQUN6QixLQUFLO2dCQUFTLE9BQU87WUFDckI7Z0JBQVMsT0FBTztRQUNsQjtJQUNGO0lBRUEsTUFBTUksZ0JBQWdCO1FBQ3BCLE9BQVFKO1lBQ04sS0FBSztnQkFBUSxPQUFPO1lBQ3BCLEtBQUs7Z0JBQWMsT0FBTztZQUMxQixLQUFLO2dCQUFZLE9BQU87WUFDeEIsS0FBSztnQkFBYSxPQUFPO1lBQ3pCLEtBQUs7Z0JBQWEsT0FBTztZQUN6QixLQUFLO2dCQUFTLE9BQU87WUFDckI7Z0JBQVMsT0FBTztRQUNsQjtJQUNGO0lBRUEsTUFBTUssZ0JBQWdCO1FBQ3BCLE9BQVFMO1lBQ04sS0FBSztnQkFDSCxxQkFDRSw4REFBQ007b0JBQUlDLFdBQVU7OEJBQ2IsNEVBQUNDO3dCQUFJQyxPQUFNO3dCQUE2QkYsV0FBVTt3QkFBd0JHLFNBQVE7d0JBQVlDLE1BQUs7a0NBQ2pHLDRFQUFDQzs0QkFBS0MsVUFBUzs0QkFBVUMsR0FBRTs0QkFBdUpDLFVBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7WUFJbk0sS0FBSztnQkFDSCxxQkFDRSw4REFBQ1Q7b0JBQUlDLFdBQVU7OEJBQ2IsNEVBQUNDO3dCQUFJRCxXQUFVO3dCQUFxQ0UsT0FBTTt3QkFBNkJFLE1BQUs7d0JBQU9ELFNBQVE7OzBDQUN6Ryw4REFBQ007Z0NBQU9ULFdBQVU7Z0NBQWFVLElBQUc7Z0NBQUtDLElBQUc7Z0NBQUtDLEdBQUU7Z0NBQUtDLFFBQU87Z0NBQWVDLGFBQVk7Ozs7OzswQ0FDeEYsOERBQUNUO2dDQUFLTCxXQUFVO2dDQUFhSSxNQUFLO2dDQUFlRyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OztZQUkzRCxLQUFLO2dCQUNILHFCQUNFLDhEQUFDUjtvQkFBSUMsV0FBVTs4QkFDYiw0RUFBQ0M7d0JBQUlELFdBQVU7d0JBQXFDRSxPQUFNO3dCQUE2QkUsTUFBSzt3QkFBT0QsU0FBUTs7MENBQ3pHLDhEQUFDTTtnQ0FBT1QsV0FBVTtnQ0FBYVUsSUFBRztnQ0FBS0MsSUFBRztnQ0FBS0MsR0FBRTtnQ0FBS0MsUUFBTztnQ0FBZUMsYUFBWTs7Ozs7OzBDQUN4Riw4REFBQ1Q7Z0NBQUtMLFdBQVU7Z0NBQWFJLE1BQUs7Z0NBQWVHLEdBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBSTNELEtBQUs7Z0JBQ0gscUJBQ0UsOERBQUNSO29CQUFJQyxXQUFVOzhCQUNiLDRFQUFDQzt3QkFBSUQsV0FBVTt3QkFBd0NFLE9BQU07d0JBQTZCQyxTQUFRO3dCQUFZQyxNQUFLO2tDQUNqSCw0RUFBQ0M7NEJBQUtDLFVBQVM7NEJBQVVDLEdBQUU7NEJBQXdMQyxVQUFTOzs7Ozs7Ozs7Ozs7Ozs7O1lBSXBPLEtBQUs7Z0JBQ0gscUJBQ0UsOERBQUNUO29CQUFJQyxXQUFVOzhCQUNiLDRFQUFDQzt3QkFBSUMsT0FBTTt3QkFBNkJGLFdBQVU7d0JBQXlCRyxTQUFRO3dCQUFZQyxNQUFLO2tDQUNsRyw0RUFBQ0M7NEJBQUtDLFVBQVM7NEJBQVVDLEdBQUU7NEJBQXdJQyxVQUFTOzs7Ozs7Ozs7Ozs7Ozs7O1lBSXBMLEtBQUs7Z0JBQ0gscUJBQ0UsOERBQUNUO29CQUFJQyxXQUFVOzhCQUNiLDRFQUFDQzt3QkFBSUMsT0FBTTt3QkFBNkJGLFdBQVU7d0JBQXVCRyxTQUFRO3dCQUFZQyxNQUFLO2tDQUNoRyw0RUFBQ0M7NEJBQUtDLFVBQVM7NEJBQVVDLEdBQUU7NEJBQW9IQyxVQUFTOzs7Ozs7Ozs7Ozs7Ozs7O1lBSWhLO2dCQUNFLE9BQU87UUFDWDtJQUNGO0lBRUEsTUFBTU8sc0JBQXNCO1FBQzFCLE9BQVF0QjtZQUNOLEtBQUs7Z0JBQVEsT0FBTztZQUNwQixLQUFLO2dCQUFjLE9BQU87WUFDMUIsS0FBSztnQkFBWSxPQUFPO1lBQ3hCLEtBQUs7Z0JBQWEsT0FBTztZQUN6QixLQUFLO2dCQUFhLE9BQU87WUFDekIsS0FBSztnQkFBUyxPQUFPO1lBQ3JCO2dCQUFTLE9BQU87UUFDbEI7SUFDRjtJQUVBLE1BQU11QixzQkFBc0I7UUFDMUIsT0FBUXZCO1lBQ04sS0FBSztnQkFBUSxPQUFPO1lBQ3BCLEtBQUs7Z0JBQWMsT0FBTztZQUMxQixLQUFLO2dCQUFZLE9BQU87WUFDeEIsS0FBSztnQkFBYSxPQUFPO1lBQ3pCLEtBQUs7Z0JBQWEsT0FBTztZQUN6QixLQUFLO2dCQUFTLE9BQU87WUFDckI7Z0JBQVMsT0FBTztRQUNsQjtJQUNGO0lBRUEscUJBQ0UsOERBQUNNO1FBQUlDLFdBQVcsQ0FBQyxFQUFFTCxpQkFBaUIsaUZBQWlGLENBQUM7OzBCQUNwSCw4REFBQ0k7Z0JBQUlDLFdBQVU7O2tDQUNiLDhEQUFDRDt3QkFBSUMsV0FBVTtrQ0FDWkY7Ozs7OztrQ0FFSCw4REFBQ0M7d0JBQUlDLFdBQVU7OzBDQUNiLDhEQUFDaUI7Z0NBQUdqQixXQUFXLENBQUMsc0JBQXNCLEVBQUVKLGVBQWUsQ0FBQzswQ0FBR0M7Ozs7Ozs0QkFDMURILHlCQUNDLDhEQUFDSztnQ0FBSUMsV0FBVTswQ0FDWk47Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFNVCw4REFBQ0s7Z0JBQUlDLFdBQVU7MEJBQ2IsNEVBQUNEO29CQUNDQyxXQUFXLENBQUMsRUFBRWdCLHNCQUFzQiwwREFBMEQsRUFBRUQsc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS2pJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL2NvbXBvbmVudHMvU3RhdHVzSW5kaWNhdG9yLnRzeD9mM2E0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcclxuXHJcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XHJcblxyXG50eXBlIFN0YXR1c1R5cGUgPSAnaWRsZScgfCAnY29ubmVjdGluZycgfCAnZmV0Y2hpbmcnIHwgJ2luZ2VzdGluZycgfCAnY29tcGxldGVkJyB8ICdlcnJvcic7XHJcblxyXG5pbnRlcmZhY2UgU3RhdHVzSW5kaWNhdG9yUHJvcHMge1xyXG4gIHN0YXR1czogU3RhdHVzVHlwZTtcclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdGF0dXNJbmRpY2F0b3IoeyBzdGF0dXMsIG1lc3NhZ2UgfTogU3RhdHVzSW5kaWNhdG9yUHJvcHMpIHtcclxuICBjb25zdCBnZXRTdGF0dXNDb2xvciA9ICgpID0+IHtcclxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgJ2lkbGUnOiByZXR1cm4gJ2JnLWdyYXktMTAwIGJvcmRlci1ncmF5LTIwMCc7XHJcbiAgICAgIGNhc2UgJ2Nvbm5lY3RpbmcnOiByZXR1cm4gJ2JnLWJsdWUtNTAgYm9yZGVyLWJsdWUtMjAwJztcclxuICAgICAgY2FzZSAnZmV0Y2hpbmcnOiByZXR1cm4gJ2JnLWJsdWUtNTAgYm9yZGVyLWJsdWUtMzAwJztcclxuICAgICAgY2FzZSAnaW5nZXN0aW5nJzogcmV0dXJuICdiZy15ZWxsb3ctNTAgYm9yZGVyLXllbGxvdy0yMDAnO1xyXG4gICAgICBjYXNlICdjb21wbGV0ZWQnOiByZXR1cm4gJ2JnLWdyZWVuLTUwIGJvcmRlci1ncmVlbi0yMDAnO1xyXG4gICAgICBjYXNlICdlcnJvcic6IHJldHVybiAnYmctcmVkLTUwIGJvcmRlci1yZWQtMjAwJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdiZy1ncmF5LTEwMCBib3JkZXItZ3JheS0yMDAnO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGdldFRleHRDb2xvciA9ICgpID0+IHtcclxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgJ2lkbGUnOiByZXR1cm4gJ3RleHQtZ3JheS03MDAnO1xyXG4gICAgICBjYXNlICdjb25uZWN0aW5nJzogcmV0dXJuICd0ZXh0LWJsdWUtNzAwJztcclxuICAgICAgY2FzZSAnZmV0Y2hpbmcnOiByZXR1cm4gJ3RleHQtYmx1ZS03MDAnO1xyXG4gICAgICBjYXNlICdpbmdlc3RpbmcnOiByZXR1cm4gJ3RleHQteWVsbG93LTcwMCc7XHJcbiAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6IHJldHVybiAndGV4dC1ncmVlbi03MDAnO1xyXG4gICAgICBjYXNlICdlcnJvcic6IHJldHVybiAndGV4dC1yZWQtNzAwJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICd0ZXh0LWdyYXktNzAwJztcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBnZXRTdGF0dXNUZXh0ID0gKCkgPT4ge1xyXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgY2FzZSAnaWRsZSc6IHJldHVybiAnUmVhZHknO1xyXG4gICAgICBjYXNlICdjb25uZWN0aW5nJzogcmV0dXJuICdDb25uZWN0aW5nLi4uJztcclxuICAgICAgY2FzZSAnZmV0Y2hpbmcnOiByZXR1cm4gJ0ZldGNoaW5nIERhdGEuLi4nO1xyXG4gICAgICBjYXNlICdpbmdlc3RpbmcnOiByZXR1cm4gJ1Byb2Nlc3NpbmcgRGF0YS4uLic7XHJcbiAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6IHJldHVybiAnQ29tcGxldGVkJztcclxuICAgICAgY2FzZSAnZXJyb3InOiByZXR1cm4gJ0Vycm9yJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdSZWFkeSc7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZ2V0U3RhdHVzSWNvbiA9ICgpID0+IHtcclxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgJ2lkbGUnOlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtMiBiZy1ncmF5LTIwMCByb3VuZGVkLWZ1bGxcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3NOYW1lPVwiaC02IHctNiB0ZXh0LWdyYXktNjAwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBmaWxsUnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTEtMTFhMSAxIDAgMTAtMiAwdjMuNTg2TDcuNzA3IDkuMjkzYTEgMSAwIDAwLTEuNDE0IDEuNDE0bDMgM2ExIDEgMCAwMDEuNDE0IDBsMy0zYTEgMSAwIDAwLTEuNDE0LTEuNDE0TDExIDEwLjU4NlY3elwiIGNsaXBSdWxlPVwiZXZlbm9kZFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSAnY29ubmVjdGluZyc6XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0yIGJnLWJsdWUtMjAwIHJvdW5kZWQtZnVsbFwiPlxyXG4gICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cImFuaW1hdGUtc3BpbiBoLTYgdy02IHRleHQtYmx1ZS02MDBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XHJcbiAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzc05hbWU9XCJvcGFjaXR5LTI1XCIgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2VXaWR0aD1cIjRcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICA8cGF0aCBjbGFzc05hbWU9XCJvcGFjaXR5LTc1XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNCAxMmE4IDggMCAwMTgtOFYwQzUuMzczIDAgMCA1LjM3MyAwIDEyaDR6bTIgNS4yOTFBNy45NjIgNy45NjIgMCAwMTQgMTJIMGMwIDMuMDQyIDEuMTM1IDUuODI0IDMgNy45MzhsMy0yLjY0N3pcIj48L3BhdGg+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSAnZmV0Y2hpbmcnOlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtMiBiZy1ibHVlLTMwMCByb3VuZGVkLWZ1bGxcIj5cclxuICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJhbmltYXRlLXNwaW4gaC02IHctNiB0ZXh0LWJsdWUtNzAwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3NOYW1lPVwib3BhY2l0eS0yNVwiIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlV2lkdGg9XCI0XCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgPHBhdGggY2xhc3NOYW1lPVwib3BhY2l0eS03NVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTQgMTJhOCA4IDAgMDE4LThWMEM1LjM3MyAwIDAgNS4zNzMgMCAxMmg0em0yIDUuMjkxQTcuOTYyIDcuOTYyIDAgMDE0IDEySDBjMCAzLjA0MiAxLjEzNSA1LjgyNCAzIDcuOTM4bDMtMi42NDd6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgJ2luZ2VzdGluZyc6XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0yIGJnLXllbGxvdy0yMDAgcm91bmRlZC1mdWxsXCI+XHJcbiAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwiYW5pbWF0ZS1wdWxzZSBoLTYgdy02IHRleHQteWVsbG93LTcwMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgIDxwYXRoIGZpbGxSdWxlPVwiZXZlbm9kZFwiIGQ9XCJNMyAxN2ExIDEgMCAwMTEtMWgxMmExIDEgMCAxMTAgMkg0YTEgMSAwIDAxLTEtMXptMy4yOTMtNy43MDdhMSAxIDAgMDExLjQxNCAwTDkgMTAuNTg2VjNhMSAxIDAgMTEyIDB2Ny41ODZsMS4yOTMtMS4yOTNhMSAxIDAgMTExLjQxNCAxLjQxNGwtMyAzYTEgMSAwIDAxLTEuNDE0IDBsLTMtM2ExIDEgMCAwMTAtMS40MTR6XCIgY2xpcFJ1bGU9XCJldmVub2RkXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICBjYXNlICdjb21wbGV0ZWQnOlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtMiBiZy1ncmVlbi0yMDAgcm91bmRlZC1mdWxsXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtNiB3LTYgdGV4dC1ncmVlbi03MDBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgIDxwYXRoIGZpbGxSdWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMy43MDctOS4yOTNhMSAxIDAgMDAtMS40MTQtMS40MTRMOSAxMC41ODYgNy43MDcgOS4yOTNhMSAxIDAgMDAtMS40MTQgMS40MTRsMiAyYTEgMSAwIDAwMS40MTQgMGw0LTR6XCIgY2xpcFJ1bGU9XCJldmVub2RkXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICBjYXNlICdlcnJvcic6XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0yIGJnLXJlZC0yMDAgcm91bmRlZC1mdWxsXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtNiB3LTYgdGV4dC1yZWQtNzAwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBmaWxsUnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tNyA0YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptLTEtOWExIDEgMCAwMC0xIDF2NGExIDEgMCAxMDIgMFY2YTEgMSAwIDAwLTEtMXpcIiBjbGlwUnVsZT1cImV2ZW5vZGRcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZ2V0UHJvZ3Jlc3NCYXJXaWR0aCA9ICgpID0+IHtcclxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgJ2lkbGUnOiByZXR1cm4gJ3ctMCc7XHJcbiAgICAgIGNhc2UgJ2Nvbm5lY3RpbmcnOiByZXR1cm4gJ3ctMS80JztcclxuICAgICAgY2FzZSAnZmV0Y2hpbmcnOiByZXR1cm4gJ3ctMS8yJztcclxuICAgICAgY2FzZSAnaW5nZXN0aW5nJzogcmV0dXJuICd3LTMvNCc7XHJcbiAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6IHJldHVybiAndy1mdWxsJztcclxuICAgICAgY2FzZSAnZXJyb3InOiByZXR1cm4gJ3ctZnVsbCc7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAndy0wJztcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBnZXRQcm9ncmVzc0JhckNvbG9yID0gKCkgPT4ge1xyXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgY2FzZSAnaWRsZSc6IHJldHVybiAnYmctZ3JheS0zMDAnO1xyXG4gICAgICBjYXNlICdjb25uZWN0aW5nJzogcmV0dXJuICdiZy1ibHVlLTQwMCc7XHJcbiAgICAgIGNhc2UgJ2ZldGNoaW5nJzogcmV0dXJuICdiZy1ibHVlLTUwMCc7XHJcbiAgICAgIGNhc2UgJ2luZ2VzdGluZyc6IHJldHVybiAnYmcteWVsbG93LTUwMCc7XHJcbiAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6IHJldHVybiAnYmctZ3JlZW4tNTAwJztcclxuICAgICAgY2FzZSAnZXJyb3InOiByZXR1cm4gJ2JnLXJlZC01MDAnO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ2JnLWdyYXktMzAwJztcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9e2Ake2dldFN0YXR1c0NvbG9yKCl9IGJvcmRlciByb3VuZGVkLWxnIHAtNSBtYi02IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBzaGFkb3ctc20gaG92ZXI6c2hhZG93LW1kYH0+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgbWItMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC1zaHJpbmstMFwiPlxyXG4gICAgICAgICAge2dldFN0YXR1c0ljb24oKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1sLTQgZmxleC1ncm93XCI+XHJcbiAgICAgICAgICA8aDMgY2xhc3NOYW1lPXtgdGV4dC1iYXNlIGZvbnQtbWVkaXVtICR7Z2V0VGV4dENvbG9yKCl9YH0+e2dldFN0YXR1c1RleHQoKX08L2gzPlxyXG4gICAgICAgICAge21lc3NhZ2UgJiYgKFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTEgdGV4dC1zbSB0ZXh0LWdyYXktNzAwIG1heC13LXByb3NlXCI+XHJcbiAgICAgICAgICAgICAge21lc3NhZ2V9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTMgdy1mdWxsIGJnLWdyYXktMjAwIHJvdW5kZWQtZnVsbCBoLTIgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgPGRpdiBcclxuICAgICAgICAgIGNsYXNzTmFtZT17YCR7Z2V0UHJvZ3Jlc3NCYXJDb2xvcigpfSBoLTIgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTcwMCBlYXNlLWluLW91dCAke2dldFByb2dyZXNzQmFyV2lkdGgoKX1gfVxyXG4gICAgICAgID48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJSZWFjdCIsIlN0YXR1c0luZGljYXRvciIsInN0YXR1cyIsIm1lc3NhZ2UiLCJnZXRTdGF0dXNDb2xvciIsImdldFRleHRDb2xvciIsImdldFN0YXR1c1RleHQiLCJnZXRTdGF0dXNJY29uIiwiZGl2IiwiY2xhc3NOYW1lIiwic3ZnIiwieG1sbnMiLCJ2aWV3Qm94IiwiZmlsbCIsInBhdGgiLCJmaWxsUnVsZSIsImQiLCJjbGlwUnVsZSIsImNpcmNsZSIsImN4IiwiY3kiLCJyIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJnZXRQcm9ncmVzc0JhcldpZHRoIiwiZ2V0UHJvZ3Jlc3NCYXJDb2xvciIsImgzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./components/StatusIndicator.tsx\n"); + +/***/ }), + +/***/ "(ssr)/./components/TableSelection.tsx": +/*!***************************************!*\ + !*** ./components/TableSelection.tsx ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TableSelection)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\");\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\nfunction TableSelection({ tables, onSubmit, isMultiTableEnabled, isLoading }) {\n const [selectedTables, setSelectedTables] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(tables.map((table)=>({\n ...table,\n selected: table.selected || false\n })));\n const [useJoin, setUseJoin] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [joinCondition, setJoinCondition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const handleTableSelectionChange = (tableIndex, selected)=>{\n const updatedTables = [\n ...selectedTables\n ];\n updatedTables[tableIndex].selected = selected;\n setSelectedTables(updatedTables);\n };\n const handleColumnSelectionChange = (tableIndex, columnIndex, selected)=>{\n const updatedTables = [\n ...selectedTables\n ];\n updatedTables[tableIndex].columns[columnIndex].selected = selected;\n setSelectedTables(updatedTables);\n };\n const handleSubmit = (e)=>{\n e.preventDefault();\n onSubmit(selectedTables, useJoin, joinCondition);\n };\n const toggleSelectAll = (tableIndex, selected)=>{\n const updatedTables = [\n ...selectedTables\n ];\n updatedTables[tableIndex].columns.forEach((col)=>{\n col.selected = selected;\n });\n setSelectedTables(updatedTables);\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-semibold mb-6\",\n children: \"Select Tables and Columns\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 52,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n children: [\n selectedTables.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center py-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-500\",\n children: \"No tables available.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 56,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 55,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-6\",\n children: [\n selectedTables.map((table, tableIndex)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-gray-200 rounded-lg p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center mb-4\",\n children: [\n isMultiTableEnabled && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n id: `table-${tableIndex}`,\n className: \"h-4 w-4 text-primary focus:ring-primary border-gray-300 rounded\",\n checked: table.selected,\n onChange: (e)=>handleTableSelectionChange(tableIndex, e.target.checked)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 64,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: `text-lg font-medium ${isMultiTableEnabled ? \"ml-2\" : \"\"}`,\n children: table.name\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 72,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"ml-auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"text-sm text-primary hover:text-blue-700\",\n onClick: ()=>toggleSelectAll(tableIndex, true),\n children: \"Select All\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 76,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"mx-2 text-gray-300\",\n children: \"|\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 83,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"text-sm text-primary hover:text-blue-700\",\n onClick: ()=>toggleSelectAll(tableIndex, false),\n children: \"Clear All\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 84,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 75,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 62,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3\",\n children: table.columns.map((column, colIndex)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n id: `column-${tableIndex}-${colIndex}`,\n className: \"h-4 w-4 text-primary focus:ring-primary border-gray-300 rounded\",\n checked: column.selected,\n onChange: (e)=>handleColumnSelectionChange(tableIndex, colIndex, e.target.checked)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 97,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: `column-${tableIndex}-${colIndex}`,\n className: \"ml-2 text-sm text-gray-700\",\n children: [\n column.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-gray-400\",\n children: [\n \"(\",\n column.type,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 105,\n columnNumber: 39\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 104,\n columnNumber: 23\n }, this)\n ]\n }, colIndex, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 96,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 94,\n columnNumber: 17\n }, this)\n ]\n }, tableIndex, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 61,\n columnNumber: 15\n }, this)),\n isMultiTableEnabled && selectedTables.filter((t)=>t.selected).length > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 border border-blue-200 bg-blue-50 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n id: \"useJoin\",\n className: \"h-4 w-4 text-primary focus:ring-primary border-gray-300 rounded\",\n checked: useJoin,\n onChange: (e)=>setUseJoin(e.target.checked)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 116,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"useJoin\",\n className: \"ml-2 text-sm font-medium text-gray-700\",\n children: \"Use JOIN for multiple tables\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 123,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 115,\n columnNumber: 17\n }, this),\n useJoin && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"joinCondition\",\n className: \"block text-sm font-medium text-gray-700 mb-1\",\n children: \"JOIN Condition\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 130,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n id: \"joinCondition\",\n className: \"form-input\",\n placeholder: \"e.g., table1.id = table2.table1_id\",\n value: joinCondition,\n onChange: (e)=>setJoinCondition(e.target.value)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 133,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-gray-500\",\n children: \"Specify the JOIN condition between tables.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 141,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 129,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 114,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 59,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"btn btn-primary\",\n disabled: isLoading || selectedTables.length === 0 || !selectedTables.some((t)=>t.selected || !isMultiTableEnabled),\n children: isLoading ? \"Processing...\" : \"Preview Data\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 152,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 151,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 53,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 51,\n columnNumber: 5\n }, this);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9jb21wb25lbnRzL1RhYmxlU2VsZWN0aW9uLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFaUM7QUFVbEIsU0FBU0MsZUFBZSxFQUNyQ0MsTUFBTSxFQUNOQyxRQUFRLEVBQ1JDLG1CQUFtQixFQUNuQkMsU0FBUyxFQUNXO0lBQ3BCLE1BQU0sQ0FBQ0MsZ0JBQWdCQyxrQkFBa0IsR0FBR1AsK0NBQVFBLENBQ2xERSxPQUFPTSxHQUFHLENBQUNDLENBQUFBLFFBQVU7WUFBRSxHQUFHQSxLQUFLO1lBQUVDLFVBQVVELE1BQU1DLFFBQVEsSUFBSTtRQUFNO0lBRXJFLE1BQU0sQ0FBQ0MsU0FBU0MsV0FBVyxHQUFHWiwrQ0FBUUEsQ0FBVTtJQUNoRCxNQUFNLENBQUNhLGVBQWVDLGlCQUFpQixHQUFHZCwrQ0FBUUEsQ0FBUztJQUUzRCxNQUFNZSw2QkFBNkIsQ0FBQ0MsWUFBb0JOO1FBQ3RELE1BQU1PLGdCQUFnQjtlQUFJWDtTQUFlO1FBQ3pDVyxhQUFhLENBQUNELFdBQVcsQ0FBQ04sUUFBUSxHQUFHQTtRQUNyQ0gsa0JBQWtCVTtJQUNwQjtJQUVBLE1BQU1DLDhCQUE4QixDQUFDRixZQUFvQkcsYUFBcUJUO1FBQzVFLE1BQU1PLGdCQUFnQjtlQUFJWDtTQUFlO1FBQ3pDVyxhQUFhLENBQUNELFdBQVcsQ0FBQ0ksT0FBTyxDQUFDRCxZQUFZLENBQUNULFFBQVEsR0FBR0E7UUFDMURILGtCQUFrQlU7SUFDcEI7SUFFQSxNQUFNSSxlQUFlLENBQUNDO1FBQ3BCQSxFQUFFQyxjQUFjO1FBQ2hCcEIsU0FBU0csZ0JBQWdCSyxTQUFTRTtJQUNwQztJQUVBLE1BQU1XLGtCQUFrQixDQUFDUixZQUFvQk47UUFDM0MsTUFBTU8sZ0JBQWdCO2VBQUlYO1NBQWU7UUFDekNXLGFBQWEsQ0FBQ0QsV0FBVyxDQUFDSSxPQUFPLENBQUNLLE9BQU8sQ0FBQ0MsQ0FBQUE7WUFDeENBLElBQUloQixRQUFRLEdBQUdBO1FBQ2pCO1FBQ0FILGtCQUFrQlU7SUFDcEI7SUFFQSxxQkFDRSw4REFBQ1U7UUFBSUMsV0FBVTs7MEJBQ2IsOERBQUNDO2dCQUFHRCxXQUFVOzBCQUE2Qjs7Ozs7OzBCQUMzQyw4REFBQ0U7Z0JBQUszQixVQUFVa0I7O29CQUNiZixlQUFleUIsTUFBTSxLQUFLLGtCQUN6Qiw4REFBQ0o7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNJOzRCQUFFSixXQUFVO3NDQUFnQjs7Ozs7Ozs7Ozs2Q0FHL0IsOERBQUNEO3dCQUFJQyxXQUFVOzs0QkFDWnRCLGVBQWVFLEdBQUcsQ0FBQyxDQUFDQyxPQUFPTywyQkFDMUIsOERBQUNXO29DQUFxQkMsV0FBVTs7c0RBQzlCLDhEQUFDRDs0Q0FBSUMsV0FBVTs7Z0RBQ1p4QixxQ0FDQyw4REFBQzZCO29EQUNDQyxNQUFLO29EQUNMQyxJQUFJLENBQUMsTUFBTSxFQUFFbkIsV0FBVyxDQUFDO29EQUN6QlksV0FBVTtvREFDVlEsU0FBUzNCLE1BQU1DLFFBQVE7b0RBQ3ZCMkIsVUFBVSxDQUFDZixJQUFNUCwyQkFBMkJDLFlBQVlNLEVBQUVnQixNQUFNLENBQUNGLE9BQU87Ozs7Ozs4REFHNUUsOERBQUNHO29EQUFHWCxXQUFXLENBQUMsb0JBQW9CLEVBQUV4QixzQkFBc0IsU0FBUyxHQUFHLENBQUM7OERBQ3RFSyxNQUFNK0IsSUFBSTs7Ozs7OzhEQUViLDhEQUFDYjtvREFBSUMsV0FBVTs7c0VBQ2IsOERBQUNhOzREQUNDUCxNQUFLOzREQUNMTixXQUFVOzREQUNWYyxTQUFTLElBQU1sQixnQkFBZ0JSLFlBQVk7c0VBQzVDOzs7Ozs7c0VBR0QsOERBQUMyQjs0REFBS2YsV0FBVTtzRUFBcUI7Ozs7OztzRUFDckMsOERBQUNhOzREQUNDUCxNQUFLOzREQUNMTixXQUFVOzREQUNWYyxTQUFTLElBQU1sQixnQkFBZ0JSLFlBQVk7c0VBQzVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7c0RBTUwsOERBQUNXOzRDQUFJQyxXQUFVO3NEQUNabkIsTUFBTVcsT0FBTyxDQUFDWixHQUFHLENBQUMsQ0FBQ29DLFFBQVFDLHlCQUMxQiw4REFBQ2xCO29EQUFtQkMsV0FBVTs7c0VBQzVCLDhEQUFDSzs0REFDQ0MsTUFBSzs0REFDTEMsSUFBSSxDQUFDLE9BQU8sRUFBRW5CLFdBQVcsQ0FBQyxFQUFFNkIsU0FBUyxDQUFDOzREQUN0Q2pCLFdBQVU7NERBQ1ZRLFNBQVNRLE9BQU9sQyxRQUFROzREQUN4QjJCLFVBQVUsQ0FBQ2YsSUFBTUosNEJBQTRCRixZQUFZNkIsVUFBVXZCLEVBQUVnQixNQUFNLENBQUNGLE9BQU87Ozs7OztzRUFFckYsOERBQUNVOzREQUFNQyxTQUFTLENBQUMsT0FBTyxFQUFFL0IsV0FBVyxDQUFDLEVBQUU2QixTQUFTLENBQUM7NERBQUVqQixXQUFVOztnRUFDM0RnQixPQUFPSixJQUFJO2dFQUFDOzhFQUFDLDhEQUFDRztvRUFBS2YsV0FBVTs7d0VBQXdCO3dFQUFFZ0IsT0FBT1YsSUFBSTt3RUFBQzs7Ozs7Ozs7Ozs7Ozs7bURBVDlEVzs7Ozs7Ozs7Ozs7bUNBbkNON0I7Ozs7OzRCQW9EWFosdUJBQXVCRSxlQUFlMEMsTUFBTSxDQUFDQyxDQUFBQSxJQUFLQSxFQUFFdkMsUUFBUSxFQUFFcUIsTUFBTSxHQUFHLG1CQUN0RSw4REFBQ0o7Z0NBQUlDLFdBQVU7O2tEQUNiLDhEQUFDRDt3Q0FBSUMsV0FBVTs7MERBQ2IsOERBQUNLO2dEQUNDQyxNQUFLO2dEQUNMQyxJQUFHO2dEQUNIUCxXQUFVO2dEQUNWUSxTQUFTekI7Z0RBQ1QwQixVQUFVLENBQUNmLElBQU1WLFdBQVdVLEVBQUVnQixNQUFNLENBQUNGLE9BQU87Ozs7OzswREFFOUMsOERBQUNVO2dEQUFNQyxTQUFRO2dEQUFVbkIsV0FBVTswREFBeUM7Ozs7Ozs7Ozs7OztvQ0FLN0VqQix5QkFDQyw4REFBQ2dCO3dDQUFJQyxXQUFVOzswREFDYiw4REFBQ2tCO2dEQUFNQyxTQUFRO2dEQUFnQm5CLFdBQVU7MERBQStDOzs7Ozs7MERBR3hGLDhEQUFDSztnREFDQ0MsTUFBSztnREFDTEMsSUFBRztnREFDSFAsV0FBVTtnREFDVnNCLGFBQVk7Z0RBQ1pDLE9BQU90QztnREFDUHdCLFVBQVUsQ0FBQ2YsSUFBTVIsaUJBQWlCUSxFQUFFZ0IsTUFBTSxDQUFDYSxLQUFLOzs7Ozs7MERBRWxELDhEQUFDbkI7Z0RBQUVKLFdBQVU7MERBQTZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBVXRELDhEQUFDRDt3QkFBSUMsV0FBVTtrQ0FDYiw0RUFBQ2E7NEJBQ0NQLE1BQUs7NEJBQ0xOLFdBQVU7NEJBQ1Z3QixVQUFVL0MsYUFBYUMsZUFBZXlCLE1BQU0sS0FBSyxLQUFLLENBQUN6QixlQUFlK0MsSUFBSSxDQUFDSixDQUFBQSxJQUFLQSxFQUFFdkMsUUFBUSxJQUFJLENBQUNOO3NDQUU5RkMsWUFBWSxrQkFBa0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTTNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL2NvbXBvbmVudHMvVGFibGVTZWxlY3Rpb24udHN4PzM0M2EiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xyXG5cclxuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IFRhYmxlSW5mbyB9IGZyb20gJ0AvbGliL2FwaSc7XHJcblxyXG5pbnRlcmZhY2UgVGFibGVTZWxlY3Rpb25Qcm9wcyB7XHJcbiAgdGFibGVzOiBUYWJsZUluZm9bXTtcclxuICBvblN1Ym1pdDogKHRhYmxlczogVGFibGVJbmZvW10sIHVzZUpvaW46IGJvb2xlYW4sIGpvaW5Db25kaXRpb246IHN0cmluZykgPT4gdm9pZDtcclxuICBpc011bHRpVGFibGVFbmFibGVkOiBib29sZWFuO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGFibGVTZWxlY3Rpb24oe1xyXG4gIHRhYmxlcyxcclxuICBvblN1Ym1pdCxcclxuICBpc011bHRpVGFibGVFbmFibGVkLFxyXG4gIGlzTG9hZGluZ1xyXG59OiBUYWJsZVNlbGVjdGlvblByb3BzKSB7XHJcbiAgY29uc3QgW3NlbGVjdGVkVGFibGVzLCBzZXRTZWxlY3RlZFRhYmxlc10gPSB1c2VTdGF0ZTxUYWJsZUluZm9bXT4oXHJcbiAgICB0YWJsZXMubWFwKHRhYmxlID0+ICh7IC4uLnRhYmxlLCBzZWxlY3RlZDogdGFibGUuc2VsZWN0ZWQgfHwgZmFsc2UgfSkpXHJcbiAgKTtcclxuICBjb25zdCBbdXNlSm9pbiwgc2V0VXNlSm9pbl0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XHJcbiAgY29uc3QgW2pvaW5Db25kaXRpb24sIHNldEpvaW5Db25kaXRpb25dID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XHJcblxyXG4gIGNvbnN0IGhhbmRsZVRhYmxlU2VsZWN0aW9uQ2hhbmdlID0gKHRhYmxlSW5kZXg6IG51bWJlciwgc2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHVwZGF0ZWRUYWJsZXMgPSBbLi4uc2VsZWN0ZWRUYWJsZXNdO1xyXG4gICAgdXBkYXRlZFRhYmxlc1t0YWJsZUluZGV4XS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xyXG4gICAgc2V0U2VsZWN0ZWRUYWJsZXModXBkYXRlZFRhYmxlcyk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlQ29sdW1uU2VsZWN0aW9uQ2hhbmdlID0gKHRhYmxlSW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlciwgc2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgIGNvbnN0IHVwZGF0ZWRUYWJsZXMgPSBbLi4uc2VsZWN0ZWRUYWJsZXNdO1xyXG4gICAgdXBkYXRlZFRhYmxlc1t0YWJsZUluZGV4XS5jb2x1bW5zW2NvbHVtbkluZGV4XS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xyXG4gICAgc2V0U2VsZWN0ZWRUYWJsZXModXBkYXRlZFRhYmxlcyk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgb25TdWJtaXQoc2VsZWN0ZWRUYWJsZXMsIHVzZUpvaW4sIGpvaW5Db25kaXRpb24pO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHRvZ2dsZVNlbGVjdEFsbCA9ICh0YWJsZUluZGV4OiBudW1iZXIsIHNlbGVjdGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB1cGRhdGVkVGFibGVzID0gWy4uLnNlbGVjdGVkVGFibGVzXTtcclxuICAgIHVwZGF0ZWRUYWJsZXNbdGFibGVJbmRleF0uY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgIGNvbC5zZWxlY3RlZCA9IHNlbGVjdGVkO1xyXG4gICAgfSk7XHJcbiAgICBzZXRTZWxlY3RlZFRhYmxlcyh1cGRhdGVkVGFibGVzKTtcclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkXCI+XHJcbiAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgbWItNlwiPlNlbGVjdCBUYWJsZXMgYW5kIENvbHVtbnM8L2gyPlxyXG4gICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cclxuICAgICAgICB7c2VsZWN0ZWRUYWJsZXMubGVuZ3RoID09PSAwID8gKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBweS04XCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtZ3JheS01MDBcIj5ObyB0YWJsZXMgYXZhaWxhYmxlLjwvcD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICkgOiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNlwiPlxyXG4gICAgICAgICAgICB7c2VsZWN0ZWRUYWJsZXMubWFwKCh0YWJsZSwgdGFibGVJbmRleCkgPT4gKFxyXG4gICAgICAgICAgICAgIDxkaXYga2V5PXt0YWJsZUluZGV4fSBjbGFzc05hbWU9XCJib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgcC00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAge2lzTXVsdGlUYWJsZUVuYWJsZWQgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgdGFibGUtJHt0YWJsZUluZGV4fWB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTQgdy00IHRleHQtcHJpbWFyeSBmb2N1czpyaW5nLXByaW1hcnkgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17dGFibGUuc2VsZWN0ZWR9XHJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVRhYmxlU2VsZWN0aW9uQ2hhbmdlKHRhYmxlSW5kZXgsIGUudGFyZ2V0LmNoZWNrZWQpfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9e2B0ZXh0LWxnIGZvbnQtbWVkaXVtICR7aXNNdWx0aVRhYmxlRW5hYmxlZCA/ICdtbC0yJyA6ICcnfWB9PlxyXG4gICAgICAgICAgICAgICAgICAgIHt0YWJsZS5uYW1lfVxyXG4gICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1sLWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1wcmltYXJ5IGhvdmVyOnRleHQtYmx1ZS03MDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlU2VsZWN0QWxsKHRhYmxlSW5kZXgsIHRydWUpfVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBBbGxcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJteC0yIHRleHQtZ3JheS0zMDBcIj58PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LXByaW1hcnkgaG92ZXI6dGV4dC1ibHVlLTcwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0b2dnbGVTZWxlY3RBbGwodGFibGVJbmRleCwgZmFsc2UpfVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIENsZWFyIEFsbFxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMSBzbTpncmlkLWNvbHMtMiBtZDpncmlkLWNvbHMtMyBsZzpncmlkLWNvbHMtNCBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgICB7dGFibGUuY29sdW1ucy5tYXAoKGNvbHVtbiwgY29sSW5kZXgpID0+IChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17Y29sSW5kZXh9IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2Bjb2x1bW4tJHt0YWJsZUluZGV4fS0ke2NvbEluZGV4fWB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC1wcmltYXJ5IGZvY3VzOnJpbmctcHJpbWFyeSBib3JkZXItZ3JheS0zMDAgcm91bmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2NvbHVtbi5zZWxlY3RlZH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDb2x1bW5TZWxlY3Rpb25DaGFuZ2UodGFibGVJbmRleCwgY29sSW5kZXgsIGUudGFyZ2V0LmNoZWNrZWQpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPXtgY29sdW1uLSR7dGFibGVJbmRleH0tJHtjb2xJbmRleH1gfSBjbGFzc05hbWU9XCJtbC0yIHRleHQtc20gdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1uLm5hbWV9IDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ncmF5LTQwMFwiPih7Y29sdW1uLnR5cGV9KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICkpfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICkpfVxyXG5cclxuICAgICAgICAgICAge2lzTXVsdGlUYWJsZUVuYWJsZWQgJiYgc2VsZWN0ZWRUYWJsZXMuZmlsdGVyKHQgPT4gdC5zZWxlY3RlZCkubGVuZ3RoID4gMSAmJiAoXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IHAtNCBib3JkZXIgYm9yZGVyLWJsdWUtMjAwIGJnLWJsdWUtNTAgcm91bmRlZC1sZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ1c2VKb2luXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTQgdy00IHRleHQtcHJpbWFyeSBmb2N1czpyaW5nLXByaW1hcnkgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3VzZUpvaW59XHJcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRVc2VKb2luKGUudGFyZ2V0LmNoZWNrZWQpfVxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cInVzZUpvaW5cIiBjbGFzc05hbWU9XCJtbC0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFVzZSBKT0lOIGZvciBtdWx0aXBsZSB0YWJsZXNcclxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB7dXNlSm9pbiAmJiAoXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiam9pbkNvbmRpdGlvblwiIGNsYXNzTmFtZT1cImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBKT0lOIENvbmRpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImpvaW5Db25kaXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4sIHRhYmxlMS5pZCA9IHRhYmxlMi50YWJsZTFfaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2pvaW5Db25kaXRpb259XHJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEpvaW5Db25kaXRpb24oZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgdGhlIEpPSU4gY29uZGl0aW9uIGJldHdlZW4gdGFibGVzLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02IGZsZXgganVzdGlmeS1lbmRcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmcgfHwgc2VsZWN0ZWRUYWJsZXMubGVuZ3RoID09PSAwIHx8ICFzZWxlY3RlZFRhYmxlcy5zb21lKHQgPT4gdC5zZWxlY3RlZCB8fCAhaXNNdWx0aVRhYmxlRW5hYmxlZCl9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtpc0xvYWRpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnUHJldmlldyBEYXRhJ31cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsIlRhYmxlU2VsZWN0aW9uIiwidGFibGVzIiwib25TdWJtaXQiLCJpc011bHRpVGFibGVFbmFibGVkIiwiaXNMb2FkaW5nIiwic2VsZWN0ZWRUYWJsZXMiLCJzZXRTZWxlY3RlZFRhYmxlcyIsIm1hcCIsInRhYmxlIiwic2VsZWN0ZWQiLCJ1c2VKb2luIiwic2V0VXNlSm9pbiIsImpvaW5Db25kaXRpb24iLCJzZXRKb2luQ29uZGl0aW9uIiwiaGFuZGxlVGFibGVTZWxlY3Rpb25DaGFuZ2UiLCJ0YWJsZUluZGV4IiwidXBkYXRlZFRhYmxlcyIsImhhbmRsZUNvbHVtblNlbGVjdGlvbkNoYW5nZSIsImNvbHVtbkluZGV4IiwiY29sdW1ucyIsImhhbmRsZVN1Ym1pdCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInRvZ2dsZVNlbGVjdEFsbCIsImZvckVhY2giLCJjb2wiLCJkaXYiLCJjbGFzc05hbWUiLCJoMiIsImZvcm0iLCJsZW5ndGgiLCJwIiwiaW5wdXQiLCJ0eXBlIiwiaWQiLCJjaGVja2VkIiwib25DaGFuZ2UiLCJ0YXJnZXQiLCJoMyIsIm5hbWUiLCJidXR0b24iLCJvbkNsaWNrIiwic3BhbiIsImNvbHVtbiIsImNvbEluZGV4IiwibGFiZWwiLCJodG1sRm9yIiwiZmlsdGVyIiwidCIsInBsYWNlaG9sZGVyIiwidmFsdWUiLCJkaXNhYmxlZCIsInNvbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./components/TableSelection.tsx\n"); + +/***/ }), + +/***/ "(ssr)/./lib/api.ts": +/*!********************!*\ + !*** ./lib/api.ts ***! + \********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ \"(ssr)/./node_modules/axios/lib/axios.js\");\n\n// API client\nconst api = {\n // ClickHouse endpoints\n testClickHouseConnection: async (config)=>{\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(\"/api/clickhouse/test-connection\", config);\n return response.data;\n },\n getClickHouseTables: async (config)=>{\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(\"/api/clickhouse/tables\", config);\n return response.data;\n },\n // File endpoints\n uploadFile: async (file, delimiter, hasHeader)=>{\n const formData = new FormData();\n formData.append(\"file\", file);\n formData.append(\"delimiter\", delimiter);\n formData.append(\"hasHeader\", hasHeader.toString());\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(\"/api/upload\", formData, {\n headers: {\n \"Content-Type\": \"multipart/form-data\"\n }\n });\n return response.data;\n },\n // Ingestion endpoints\n ingestData: async (request)=>{\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(\"/api/ingestion/ingest\", request);\n return response.data;\n },\n previewData: async (request)=>{\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(\"/api/ingestion/preview\", request);\n return response.data;\n },\n // Download endpoint\n getDownloadUrl: (fileName)=>{\n return `/api/download/${fileName}`;\n }\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (api);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9saWIvYXBpLnRzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTBCO0FBZ0QxQixhQUFhO0FBQ2IsTUFBTUMsTUFBTTtJQUNWLHVCQUF1QjtJQUN2QkMsMEJBQTBCLE9BQU9DO1FBQy9CLE1BQU1DLFdBQVcsTUFBTUosNkNBQUtBLENBQUNLLElBQUksQ0FBQyxtQ0FBbUNGO1FBQ3JFLE9BQU9DLFNBQVNFLElBQUk7SUFDdEI7SUFFQUMscUJBQXFCLE9BQU9KO1FBQzFCLE1BQU1DLFdBQVcsTUFBTUosNkNBQUtBLENBQUNLLElBQUksQ0FBYywwQkFBMEJGO1FBQ3pFLE9BQU9DLFNBQVNFLElBQUk7SUFDdEI7SUFFQSxpQkFBaUI7SUFDakJFLFlBQVksT0FBT0MsTUFBWUMsV0FBbUJDO1FBQ2hELE1BQU1DLFdBQVcsSUFBSUM7UUFDckJELFNBQVNFLE1BQU0sQ0FBQyxRQUFRTDtRQUN4QkcsU0FBU0UsTUFBTSxDQUFDLGFBQWFKO1FBQzdCRSxTQUFTRSxNQUFNLENBQUMsYUFBYUgsVUFBVUksUUFBUTtRQUUvQyxNQUFNWCxXQUFXLE1BQU1KLDZDQUFLQSxDQUFDSyxJQUFJLENBQUMsZUFBZU8sVUFBVTtZQUN6REksU0FBUztnQkFDUCxnQkFBZ0I7WUFDbEI7UUFDRjtRQUVBLE9BQU9aLFNBQVNFLElBQUk7SUFDdEI7SUFFQSxzQkFBc0I7SUFDdEJXLFlBQVksT0FBT0M7UUFDakIsTUFBTWQsV0FBVyxNQUFNSiw2Q0FBS0EsQ0FBQ0ssSUFBSSxDQUFvQix5QkFBeUJhO1FBQzlFLE9BQU9kLFNBQVNFLElBQUk7SUFDdEI7SUFFQWEsYUFBYSxPQUFPRDtRQUNsQixNQUFNZCxXQUFXLE1BQU1KLDZDQUFLQSxDQUFDSyxJQUFJLENBQUMsMEJBQTBCYTtRQUM1RCxPQUFPZCxTQUFTRSxJQUFJO0lBQ3RCO0lBRUEsb0JBQW9CO0lBQ3BCYyxnQkFBZ0IsQ0FBQ0M7UUFDZixPQUFPLENBQUMsY0FBYyxFQUFFQSxTQUFTLENBQUM7SUFDcEM7QUFDRjtBQUVBLGlFQUFlcEIsR0FBR0EsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9saWIvYXBpLnRzPzY4YTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcclxuXHJcbi8vIFR5cGVzXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpY2tIb3VzZUNvbmZpZyB7XHJcbiAgaG9zdDogc3RyaW5nO1xyXG4gIHBvcnQ6IG51bWJlcjtcclxuICBkYXRhYmFzZTogc3RyaW5nO1xyXG4gIHVzZXI6IHN0cmluZztcclxuICBqd3RUb2tlbjogc3RyaW5nO1xyXG4gIHNlY3VyZTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGbGF0RmlsZUNvbmZpZyB7XHJcbiAgZGVsaW1pdGVyOiBzdHJpbmc7XHJcbiAgaGFzSGVhZGVyOiBib29sZWFuO1xyXG4gIGZpbGVQYXRoPzogc3RyaW5nO1xyXG4gIGZpbGVOYW1lPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29sdW1uIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlSW5mbyB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGNvbHVtbnM6IFRhYmxlQ29sdW1uW107XHJcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW5nZXN0aW9uUmVxdWVzdCB7XHJcbiAgc291cmNlOiAnY2xpY2tob3VzZScgfCAnZmxhdGZpbGUnO1xyXG4gIHRhcmdldDogJ2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJztcclxuICBjbGlja0hvdXNlQ29uZmlnPzogQ2xpY2tIb3VzZUNvbmZpZztcclxuICBmbGF0RmlsZUNvbmZpZz86IEZsYXRGaWxlQ29uZmlnO1xyXG4gIHRhYmxlczogVGFibGVJbmZvW107XHJcbiAgam9pbkNvbmRpdGlvbj86IHN0cmluZztcclxuICB1c2VKb2luOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdGlvblJlc3BvbnNlIHtcclxuICBzdWNjZXNzOiBib29sZWFuO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICB0b3RhbFJlY29yZHM6IG51bWJlcjtcclxuICBmaWxlTmFtZT86IHN0cmluZztcclxufVxyXG5cclxuLy8gQVBJIGNsaWVudFxyXG5jb25zdCBhcGkgPSB7XHJcbiAgLy8gQ2xpY2tIb3VzZSBlbmRwb2ludHNcclxuICB0ZXN0Q2xpY2tIb3VzZUNvbm5lY3Rpb246IGFzeW5jIChjb25maWc6IENsaWNrSG91c2VDb25maWcpID0+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdCgnL2FwaS9jbGlja2hvdXNlL3Rlc3QtY29ubmVjdGlvbicsIGNvbmZpZyk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcclxuICB9LFxyXG4gIFxyXG4gIGdldENsaWNrSG91c2VUYWJsZXM6IGFzeW5jIChjb25maWc6IENsaWNrSG91c2VDb25maWcpID0+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdDxUYWJsZUluZm9bXT4oJy9hcGkvY2xpY2tob3VzZS90YWJsZXMnLCBjb25maWcpO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XHJcbiAgfSxcclxuICBcclxuICAvLyBGaWxlIGVuZHBvaW50c1xyXG4gIHVwbG9hZEZpbGU6IGFzeW5jIChmaWxlOiBGaWxlLCBkZWxpbWl0ZXI6IHN0cmluZywgaGFzSGVhZGVyOiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2RlbGltaXRlcicsIGRlbGltaXRlcik7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2hhc0hlYWRlcicsIGhhc0hlYWRlci50b1N0cmluZygpKTtcclxuICAgIFxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KCcvYXBpL3VwbG9hZCcsIGZvcm1EYXRhLCB7XHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gIH0sXHJcbiAgXHJcbiAgLy8gSW5nZXN0aW9uIGVuZHBvaW50c1xyXG4gIGluZ2VzdERhdGE6IGFzeW5jIChyZXF1ZXN0OiBJbmdlc3Rpb25SZXF1ZXN0KSA9PiB7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8SW5nZXN0aW9uUmVzcG9uc2U+KCcvYXBpL2luZ2VzdGlvbi9pbmdlc3QnLCByZXF1ZXN0KTtcclxuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gIH0sXHJcbiAgXHJcbiAgcHJldmlld0RhdGE6IGFzeW5jIChyZXF1ZXN0OiBJbmdlc3Rpb25SZXF1ZXN0KSA9PiB7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoJy9hcGkvaW5nZXN0aW9uL3ByZXZpZXcnLCByZXF1ZXN0KTtcclxuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gIH0sXHJcbiAgXHJcbiAgLy8gRG93bmxvYWQgZW5kcG9pbnRcclxuICBnZXREb3dubG9hZFVybDogKGZpbGVOYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIHJldHVybiBgL2FwaS9kb3dubG9hZC8ke2ZpbGVOYW1lfWA7XHJcbiAgfSxcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGFwaTsgIl0sIm5hbWVzIjpbImF4aW9zIiwiYXBpIiwidGVzdENsaWNrSG91c2VDb25uZWN0aW9uIiwiY29uZmlnIiwicmVzcG9uc2UiLCJwb3N0IiwiZGF0YSIsImdldENsaWNrSG91c2VUYWJsZXMiLCJ1cGxvYWRGaWxlIiwiZmlsZSIsImRlbGltaXRlciIsImhhc0hlYWRlciIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJ0b1N0cmluZyIsImhlYWRlcnMiLCJpbmdlc3REYXRhIiwicmVxdWVzdCIsInByZXZpZXdEYXRhIiwiZ2V0RG93bmxvYWRVcmwiLCJmaWxlTmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./lib/api.ts\n"); + +/***/ }), + +/***/ "(ssr)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"75479a21999c\");\nif (false) {}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9zdHlsZXMvZ2xvYmFscy5jc3MiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlFQUFlLGNBQWM7QUFDN0IsSUFBSSxLQUFVLEVBQUUsRUFBdUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vc3R5bGVzL2dsb2JhbHMuY3NzP2VkMDEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI3NTQ3OWEyMTk5OWNcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./styles/globals.css\n"); + +/***/ }), + +/***/ "(rsc)/./app/layout.tsx": +/*!************************!*\ + !*** ./app/layout.tsx ***! + \************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ $$typeof: () => (/* binding */ $$typeof), +/* harmony export */ __esModule: () => (/* binding */ __esModule), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js"); + +const proxy = (0,next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__.createProxy)(String.raw`C:\Users\HARSHIT BAGGA\Desktop\ZeoTap2.0\frontend\app\layout.tsx`) + +// Accessing the __esModule property and exporting $$typeof are required here. +// The __esModule getter forces the proxy target to create the default export +// and the $$typeof value is for rendering logic to determine if the module +// is a client boundary. +const { __esModule, $$typeof } = proxy; +const __default__ = proxy.default; + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__default__); + +/***/ }), + +/***/ "(rsc)/./app/page.tsx": +/*!**********************!*\ + !*** ./app/page.tsx ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ $$typeof: () => (/* binding */ $$typeof), +/* harmony export */ __esModule: () => (/* binding */ __esModule), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js"); + +const proxy = (0,next_dist_build_webpack_loaders_next_flight_loader_module_proxy__WEBPACK_IMPORTED_MODULE_0__.createProxy)(String.raw`C:\Users\HARSHIT BAGGA\Desktop\ZeoTap2.0\frontend\app\page.tsx`) + +// Accessing the __esModule property and exporting $$typeof are required here. +// The __esModule getter forces the proxy target to create the default export +// and the $$typeof value is for rendering logic to determine if the module +// is a client boundary. +const { __esModule, $$typeof } = proxy; +const __default__ = proxy.default; + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__default__); + +/***/ }) + +}; +; + +// load runtime +var __webpack_require__ = require("../webpack-runtime.js"); +__webpack_require__.C(exports); +var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/@swc","vendor-chunks/axios","vendor-chunks/asynckit","vendor-chunks/math-intrinsics","vendor-chunks/es-errors","vendor-chunks/call-bind-apply-helpers","vendor-chunks/debug","vendor-chunks/get-proto","vendor-chunks/mime-db","vendor-chunks/has-symbols","vendor-chunks/gopd","vendor-chunks/function-bind","vendor-chunks/form-data","vendor-chunks/follow-redirects","vendor-chunks/supports-color","vendor-chunks/proxy-from-env","vendor-chunks/ms","vendor-chunks/mime-types","vendor-chunks/hasown","vendor-chunks/has-tostringtag","vendor-chunks/has-flag","vendor-chunks/get-intrinsic","vendor-chunks/es-set-tostringtag","vendor-chunks/es-object-atoms","vendor-chunks/es-define-property","vendor-chunks/dunder-proto","vendor-chunks/delayed-stream","vendor-chunks/combined-stream"], () => (__webpack_exec__("(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"))); +module.exports = __webpack_exports__; + +})(); \ No newline at end of file diff --git a/frontend/.next/server/app/page_client-reference-manifest.js b/frontend/.next/server/app/page_client-reference-manifest.js new file mode 100644 index 000000000..9b5eedfea --- /dev/null +++ b/frontend/.next/server/app/page_client-reference-manifest.js @@ -0,0 +1 @@ +globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/page"]={"moduleLoading":{"prefix":"/_next/","crossOrigin":null},"ssrModuleMapping":{"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js":{"*":{"id":"(ssr)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/page.tsx":{"*":{"id":"(ssr)/./app/page.tsx","name":"*","chunks":[],"async":false}},"(app-pages-browser)/./app/layout.tsx":{"*":{"id":"(ssr)/./app/layout.tsx","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\app-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\error-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\layout-router.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\not-found-boundary.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\render-from-template-context.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\static-generation-searchparams-bailout-provider.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\esm\\client\\components\\static-generation-searchparams-bailout-provider.js":{"id":"(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js","name":"*","chunks":["app-pages-internals","static/chunks/app-pages-internals.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page.tsx":{"id":"(app-pages-browser)/./app/page.tsx","name":"*","chunks":["app/page","static/chunks/app/page.js"],"async":false},"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx":{"id":"(app-pages-browser)/./app/layout.tsx","name":"*","chunks":["app/layout","static/chunks/app/layout.js"],"async":false}},"entryCSSFiles":{"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page":[],"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout":["static/css/app/layout.css"]}} \ No newline at end of file diff --git a/frontend/.next/server/middleware-build-manifest.js b/frontend/.next/server/middleware-build-manifest.js new file mode 100644 index 000000000..c0e86adfb --- /dev/null +++ b/frontend/.next/server/middleware-build-manifest.js @@ -0,0 +1 @@ +self.__BUILD_MANIFEST={"polyfillFiles":["static/chunks/polyfills.js"],"devFiles":["static/chunks/react-refresh.js"],"ampDevFiles":[],"lowPriorityFiles":["static/development/_buildManifest.js","static/development/_ssgManifest.js"],"rootMainFiles":["static/chunks/webpack.js","static/chunks/main-app.js"],"pages":{"/_app":["static/chunks/webpack.js","static/chunks/main.js","static/chunks/pages/_app.js"],"/_error":["static/chunks/webpack.js","static/chunks/main.js","static/chunks/pages/_error.js"]},"ampFirstPages":[]} \ No newline at end of file diff --git a/frontend/.next/server/middleware-manifest.json b/frontend/.next/server/middleware-manifest.json new file mode 100644 index 000000000..57712aad3 --- /dev/null +++ b/frontend/.next/server/middleware-manifest.json @@ -0,0 +1,6 @@ +{ + "sortedMiddleware": [], + "middleware": {}, + "functions": {}, + "version": 2 +} \ No newline at end of file diff --git a/frontend/.next/server/middleware-react-loadable-manifest.js b/frontend/.next/server/middleware-react-loadable-manifest.js new file mode 100644 index 000000000..ca34f09f9 --- /dev/null +++ b/frontend/.next/server/middleware-react-loadable-manifest.js @@ -0,0 +1 @@ +self.__REACT_LOADABLE_MANIFEST="{}" \ No newline at end of file diff --git a/frontend/.next/server/next-font-manifest.js b/frontend/.next/server/next-font-manifest.js new file mode 100644 index 000000000..5cc97ebd0 --- /dev/null +++ b/frontend/.next/server/next-font-manifest.js @@ -0,0 +1 @@ +self.__NEXT_FONT_MANIFEST="{\"pages\":{},\"app\":{},\"appUsingSizeAdjust\":false,\"pagesUsingSizeAdjust\":false}" \ No newline at end of file diff --git a/frontend/.next/server/next-font-manifest.json b/frontend/.next/server/next-font-manifest.json new file mode 100644 index 000000000..25f78e72b --- /dev/null +++ b/frontend/.next/server/next-font-manifest.json @@ -0,0 +1 @@ +{"pages":{},"app":{},"appUsingSizeAdjust":false,"pagesUsingSizeAdjust":false} \ No newline at end of file diff --git a/frontend/.next/server/pages-manifest.json b/frontend/.next/server/pages-manifest.json new file mode 100644 index 000000000..a679766a2 --- /dev/null +++ b/frontend/.next/server/pages-manifest.json @@ -0,0 +1,5 @@ +{ + "/_app": "pages/_app.js", + "/_error": "pages/_error.js", + "/_document": "pages/_document.js" +} \ No newline at end of file diff --git a/frontend/.next/server/pages/_app.js b/frontend/.next/server/pages/_app.js new file mode 100644 index 000000000..bdff33716 --- /dev/null +++ b/frontend/.next/server/pages/_app.js @@ -0,0 +1,46 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(() => { +var exports = {}; +exports.id = "pages/_app"; +exports.ids = ["pages/_app"]; +exports.modules = { + +/***/ "react": +/*!************************!*\ + !*** external "react" ***! + \************************/ +/***/ ((module) => { + +module.exports = require("react"); + +/***/ }), + +/***/ "react/jsx-runtime": +/*!************************************!*\ + !*** external "react/jsx-runtime" ***! + \************************************/ +/***/ ((module) => { + +module.exports = require("react/jsx-runtime"); + +/***/ }) + +}; +; + +// load runtime +var __webpack_require__ = require("../webpack-runtime.js"); +__webpack_require__.C(exports); +var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/@swc"], () => (__webpack_exec__("./node_modules/next/dist/pages/_app.js"))); +module.exports = __webpack_exports__; + +})(); \ No newline at end of file diff --git a/frontend/.next/server/pages/_document.js b/frontend/.next/server/pages/_document.js new file mode 100644 index 000000000..a0748c06c --- /dev/null +++ b/frontend/.next/server/pages/_document.js @@ -0,0 +1,66 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(() => { +var exports = {}; +exports.id = "pages/_document"; +exports.ids = ["pages/_document"]; +exports.modules = { + +/***/ "next/dist/compiled/next-server/pages.runtime.dev.js": +/*!**********************************************************************!*\ + !*** external "next/dist/compiled/next-server/pages.runtime.dev.js" ***! + \**********************************************************************/ +/***/ ((module) => { + +module.exports = require("next/dist/compiled/next-server/pages.runtime.dev.js"); + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "react" ***! + \************************/ +/***/ ((module) => { + +module.exports = require("react"); + +/***/ }), + +/***/ "react/jsx-runtime": +/*!************************************!*\ + !*** external "react/jsx-runtime" ***! + \************************************/ +/***/ ((module) => { + +module.exports = require("react/jsx-runtime"); + +/***/ }), + +/***/ "path": +/*!***********************!*\ + !*** external "path" ***! + \***********************/ +/***/ ((module) => { + +module.exports = require("path"); + +/***/ }) + +}; +; + +// load runtime +var __webpack_require__ = require("../webpack-runtime.js"); +__webpack_require__.C(exports); +var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/@swc"], () => (__webpack_exec__("./node_modules/next/dist/pages/_document.js"))); +module.exports = __webpack_exports__; + +})(); \ No newline at end of file diff --git a/frontend/.next/server/pages/_error.js b/frontend/.next/server/pages/_error.js new file mode 100644 index 000000000..9a2ebc288 --- /dev/null +++ b/frontend/.next/server/pages/_error.js @@ -0,0 +1,76 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(() => { +var exports = {}; +exports.id = "pages/_error"; +exports.ids = ["pages/_error"]; +exports.modules = { + +/***/ "./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!": +/*!*********************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D! ***! + \*********************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getServerSideProps: () => (/* binding */ getServerSideProps),\n/* harmony export */ getStaticPaths: () => (/* binding */ getStaticPaths),\n/* harmony export */ getStaticProps: () => (/* binding */ getStaticProps),\n/* harmony export */ reportWebVitals: () => (/* binding */ reportWebVitals),\n/* harmony export */ routeModule: () => (/* binding */ routeModule),\n/* harmony export */ unstable_getServerProps: () => (/* binding */ unstable_getServerProps),\n/* harmony export */ unstable_getServerSideProps: () => (/* binding */ unstable_getServerSideProps),\n/* harmony export */ unstable_getStaticParams: () => (/* binding */ unstable_getStaticParams),\n/* harmony export */ unstable_getStaticPaths: () => (/* binding */ unstable_getStaticPaths),\n/* harmony export */ unstable_getStaticProps: () => (/* binding */ unstable_getStaticProps)\n/* harmony export */ });\n/* harmony import */ var next_dist_server_future_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/dist/server/future/route-modules/pages/module.compiled */ \"./node_modules/next/dist/server/future/route-modules/pages/module.compiled.js\");\n/* harmony import */ var next_dist_server_future_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(next_dist_server_future_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! next/dist/server/future/route-kind */ \"./node_modules/next/dist/server/future/route-kind.js\");\n/* harmony import */ var next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/dist/build/templates/helpers */ \"./node_modules/next/dist/build/templates/helpers.js\");\n/* harmony import */ var next_dist_pages_document__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/dist/pages/_document */ \"./node_modules/next/dist/pages/_document.js\");\n/* harmony import */ var next_dist_pages_document__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_dist_pages_document__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var next_dist_pages_app__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! next/dist/pages/_app */ \"./node_modules/next/dist/pages/_app.js\");\n/* harmony import */ var next_dist_pages_app__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(next_dist_pages_app__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! next/dist/pages/_error */ \"./node_modules/next/dist/pages/_error.js\");\n/* harmony import */ var next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n// Import the app and document modules.\n\n\n// Import the userland code.\n\n// Re-export the component (should be the default export).\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__, \"default\"));\n// Re-export methods.\nconst getStaticProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__, \"getStaticProps\");\nconst getStaticPaths = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__, \"getStaticPaths\");\nconst getServerSideProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__, \"getServerSideProps\");\nconst config = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__, \"config\");\nconst reportWebVitals = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__, \"reportWebVitals\");\n// Re-export legacy methods.\nconst unstable_getStaticProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__, \"unstable_getStaticProps\");\nconst unstable_getStaticPaths = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__, \"unstable_getStaticPaths\");\nconst unstable_getStaticParams = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__, \"unstable_getStaticParams\");\nconst unstable_getServerProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__, \"unstable_getServerProps\");\nconst unstable_getServerSideProps = (0,next_dist_build_templates_helpers__WEBPACK_IMPORTED_MODULE_2__.hoist)(next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__, \"unstable_getServerSideProps\");\n// Create and export the route module that will be consumed.\nconst routeModule = new next_dist_server_future_route_modules_pages_module_compiled__WEBPACK_IMPORTED_MODULE_0__.PagesRouteModule({\n definition: {\n kind: next_dist_server_future_route_kind__WEBPACK_IMPORTED_MODULE_1__.RouteKind.PAGES,\n page: \"/_error\",\n pathname: \"/_error\",\n // The following aren't used in production.\n bundlePath: \"\",\n filename: \"\"\n },\n components: {\n App: (next_dist_pages_app__WEBPACK_IMPORTED_MODULE_4___default()),\n Document: (next_dist_pages_document__WEBPACK_IMPORTED_MODULE_3___default())\n },\n userland: next_dist_pages_error__WEBPACK_IMPORTED_MODULE_5__\n});\n\n//# sourceMappingURL=pages.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LXJvdXRlLWxvYWRlci9pbmRleC5qcz9raW5kPVBBR0VTJnBhZ2U9JTJGX2Vycm9yJnByZWZlcnJlZFJlZ2lvbj0mYWJzb2x1dGVQYWdlUGF0aD1uZXh0JTJGZGlzdCUyRnBhZ2VzJTJGX2Vycm9yJmFic29sdXRlQXBwUGF0aD1uZXh0JTJGZGlzdCUyRnBhZ2VzJTJGX2FwcCZhYnNvbHV0ZURvY3VtZW50UGF0aD1uZXh0JTJGZGlzdCUyRnBhZ2VzJTJGX2RvY3VtZW50Jm1pZGRsZXdhcmVDb25maWdCYXNlNjQ9ZTMwJTNEISIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQStGO0FBQ2hDO0FBQ0w7QUFDMUQ7QUFDaUQ7QUFDVjtBQUN2QztBQUNtRDtBQUNuRDtBQUNBLGlFQUFlLHdFQUFLLENBQUMsa0RBQVEsWUFBWSxFQUFDO0FBQzFDO0FBQ08sdUJBQXVCLHdFQUFLLENBQUMsa0RBQVE7QUFDckMsdUJBQXVCLHdFQUFLLENBQUMsa0RBQVE7QUFDckMsMkJBQTJCLHdFQUFLLENBQUMsa0RBQVE7QUFDekMsZUFBZSx3RUFBSyxDQUFDLGtEQUFRO0FBQzdCLHdCQUF3Qix3RUFBSyxDQUFDLGtEQUFRO0FBQzdDO0FBQ08sZ0NBQWdDLHdFQUFLLENBQUMsa0RBQVE7QUFDOUMsZ0NBQWdDLHdFQUFLLENBQUMsa0RBQVE7QUFDOUMsaUNBQWlDLHdFQUFLLENBQUMsa0RBQVE7QUFDL0MsZ0NBQWdDLHdFQUFLLENBQUMsa0RBQVE7QUFDOUMsb0NBQW9DLHdFQUFLLENBQUMsa0RBQVE7QUFDekQ7QUFDTyx3QkFBd0IseUdBQWdCO0FBQy9DO0FBQ0EsY0FBYyx5RUFBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsV0FBVztBQUNYLGdCQUFnQjtBQUNoQixLQUFLO0FBQ0wsWUFBWTtBQUNaLENBQUM7O0FBRUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLz8wZDk4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhZ2VzUm91dGVNb2R1bGUgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9wYWdlcy9tb2R1bGUuY29tcGlsZWRcIjtcbmltcG9ydCB7IFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1raW5kXCI7XG5pbXBvcnQgeyBob2lzdCB9IGZyb20gXCJuZXh0L2Rpc3QvYnVpbGQvdGVtcGxhdGVzL2hlbHBlcnNcIjtcbi8vIEltcG9ydCB0aGUgYXBwIGFuZCBkb2N1bWVudCBtb2R1bGVzLlxuaW1wb3J0IERvY3VtZW50IGZyb20gXCJuZXh0L2Rpc3QvcGFnZXMvX2RvY3VtZW50XCI7XG5pbXBvcnQgQXBwIGZyb20gXCJuZXh0L2Rpc3QvcGFnZXMvX2FwcFwiO1xuLy8gSW1wb3J0IHRoZSB1c2VybGFuZCBjb2RlLlxuaW1wb3J0ICogYXMgdXNlcmxhbmQgZnJvbSBcIm5leHQvZGlzdC9wYWdlcy9fZXJyb3JcIjtcbi8vIFJlLWV4cG9ydCB0aGUgY29tcG9uZW50IChzaG91bGQgYmUgdGhlIGRlZmF1bHQgZXhwb3J0KS5cbmV4cG9ydCBkZWZhdWx0IGhvaXN0KHVzZXJsYW5kLCBcImRlZmF1bHRcIik7XG4vLyBSZS1leHBvcnQgbWV0aG9kcy5cbmV4cG9ydCBjb25zdCBnZXRTdGF0aWNQcm9wcyA9IGhvaXN0KHVzZXJsYW5kLCBcImdldFN0YXRpY1Byb3BzXCIpO1xuZXhwb3J0IGNvbnN0IGdldFN0YXRpY1BhdGhzID0gaG9pc3QodXNlcmxhbmQsIFwiZ2V0U3RhdGljUGF0aHNcIik7XG5leHBvcnQgY29uc3QgZ2V0U2VydmVyU2lkZVByb3BzID0gaG9pc3QodXNlcmxhbmQsIFwiZ2V0U2VydmVyU2lkZVByb3BzXCIpO1xuZXhwb3J0IGNvbnN0IGNvbmZpZyA9IGhvaXN0KHVzZXJsYW5kLCBcImNvbmZpZ1wiKTtcbmV4cG9ydCBjb25zdCByZXBvcnRXZWJWaXRhbHMgPSBob2lzdCh1c2VybGFuZCwgXCJyZXBvcnRXZWJWaXRhbHNcIik7XG4vLyBSZS1leHBvcnQgbGVnYWN5IG1ldGhvZHMuXG5leHBvcnQgY29uc3QgdW5zdGFibGVfZ2V0U3RhdGljUHJvcHMgPSBob2lzdCh1c2VybGFuZCwgXCJ1bnN0YWJsZV9nZXRTdGF0aWNQcm9wc1wiKTtcbmV4cG9ydCBjb25zdCB1bnN0YWJsZV9nZXRTdGF0aWNQYXRocyA9IGhvaXN0KHVzZXJsYW5kLCBcInVuc3RhYmxlX2dldFN0YXRpY1BhdGhzXCIpO1xuZXhwb3J0IGNvbnN0IHVuc3RhYmxlX2dldFN0YXRpY1BhcmFtcyA9IGhvaXN0KHVzZXJsYW5kLCBcInVuc3RhYmxlX2dldFN0YXRpY1BhcmFtc1wiKTtcbmV4cG9ydCBjb25zdCB1bnN0YWJsZV9nZXRTZXJ2ZXJQcm9wcyA9IGhvaXN0KHVzZXJsYW5kLCBcInVuc3RhYmxlX2dldFNlcnZlclByb3BzXCIpO1xuZXhwb3J0IGNvbnN0IHVuc3RhYmxlX2dldFNlcnZlclNpZGVQcm9wcyA9IGhvaXN0KHVzZXJsYW5kLCBcInVuc3RhYmxlX2dldFNlcnZlclNpZGVQcm9wc1wiKTtcbi8vIENyZWF0ZSBhbmQgZXhwb3J0IHRoZSByb3V0ZSBtb2R1bGUgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuZXhwb3J0IGNvbnN0IHJvdXRlTW9kdWxlID0gbmV3IFBhZ2VzUm91dGVNb2R1bGUoe1xuICAgIGRlZmluaXRpb246IHtcbiAgICAgICAga2luZDogUm91dGVLaW5kLlBBR0VTLFxuICAgICAgICBwYWdlOiBcIi9fZXJyb3JcIixcbiAgICAgICAgcGF0aG5hbWU6IFwiL19lcnJvclwiLFxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGFyZW4ndCB1c2VkIGluIHByb2R1Y3Rpb24uXG4gICAgICAgIGJ1bmRsZVBhdGg6IFwiXCIsXG4gICAgICAgIGZpbGVuYW1lOiBcIlwiXG4gICAgfSxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIEFwcCxcbiAgICAgICAgRG9jdW1lbnRcbiAgICB9LFxuICAgIHVzZXJsYW5kXG59KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFnZXMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!\n"); + +/***/ }), + +/***/ "next/dist/compiled/next-server/pages.runtime.dev.js": +/*!**********************************************************************!*\ + !*** external "next/dist/compiled/next-server/pages.runtime.dev.js" ***! + \**********************************************************************/ +/***/ ((module) => { + +module.exports = require("next/dist/compiled/next-server/pages.runtime.dev.js"); + +/***/ }), + +/***/ "react": +/*!************************!*\ + !*** external "react" ***! + \************************/ +/***/ ((module) => { + +module.exports = require("react"); + +/***/ }), + +/***/ "react/jsx-runtime": +/*!************************************!*\ + !*** external "react/jsx-runtime" ***! + \************************************/ +/***/ ((module) => { + +module.exports = require("react/jsx-runtime"); + +/***/ }), + +/***/ "path": +/*!***********************!*\ + !*** external "path" ***! + \***********************/ +/***/ ((module) => { + +module.exports = require("path"); + +/***/ }) + +}; +; + +// load runtime +var __webpack_require__ = require("../webpack-runtime.js"); +__webpack_require__.C(exports); +var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +var __webpack_exports__ = __webpack_require__.X(0, ["vendor-chunks/next","vendor-chunks/@swc"], () => (__webpack_exec__("./node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"))); +module.exports = __webpack_exports__; + +})(); \ No newline at end of file diff --git a/frontend/.next/server/server-reference-manifest.js b/frontend/.next/server/server-reference-manifest.js new file mode 100644 index 000000000..8637e3e4c --- /dev/null +++ b/frontend/.next/server/server-reference-manifest.js @@ -0,0 +1 @@ +self.__RSC_SERVER_MANIFEST="{\n \"node\": {},\n \"edge\": {},\n \"encryptionKey\": \"LG16KOqwxySzQzRGJ5f4znAKwY+0sGjKxvWqLpLqzvw=\"\n}" \ No newline at end of file diff --git a/frontend/.next/server/server-reference-manifest.json b/frontend/.next/server/server-reference-manifest.json new file mode 100644 index 000000000..d4f6cb4f3 --- /dev/null +++ b/frontend/.next/server/server-reference-manifest.json @@ -0,0 +1,5 @@ +{ + "node": {}, + "edge": {}, + "encryptionKey": "LG16KOqwxySzQzRGJ5f4znAKwY+0sGjKxvWqLpLqzvw=" +} \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/@swc.js b/frontend/.next/server/vendor-chunks/@swc.js new file mode 100644 index 000000000..6bf63fbd0 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/@swc.js @@ -0,0 +1,95 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/@swc"; +exports.ids = ["vendor-chunks/@swc"]; +exports.modules = { + +/***/ "./node_modules/@swc/helpers/cjs/_interop_require_default.cjs": +/*!********************************************************************!*\ + !*** ./node_modules/@swc/helpers/cjs/_interop_require_default.cjs ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +eval("\n\nexports._ = exports._interop_require_default = _interop_require_default;\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2Nqcy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuY2pzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFNBQVMsR0FBRyxnQ0FBZ0M7QUFDNUM7QUFDQSwyQ0FBMkM7QUFDM0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9janMvX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0LmNqcz8wOGZmIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl8gPSBleHBvcnRzLl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdDtcbmZ1bmN0aW9uIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/cjs/_interop_require_default.cjs\n"); + +/***/ }), + +/***/ "./node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs": +/*!*********************************************************************!*\ + !*** ./node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +eval("\n\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nexports._ = exports._interop_require_wildcard = _interop_require_wildcard;\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2Nqcy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLmNqcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFNBQVMsR0FBRyxpQ0FBaUM7QUFDN0M7QUFDQTtBQUNBLHVGQUF1Rjs7QUFFdkY7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvY2pzL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuY2pzPzZkY2UiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkge1xuICAgIGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcblxuICAgIHZhciBjYWNoZUJhYmVsSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgdmFyIGNhY2hlTm9kZUludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbihub2RlSW50ZXJvcCkge1xuICAgICAgICByZXR1cm4gbm9kZUludGVyb3AgPyBjYWNoZU5vZGVJbnRlcm9wIDogY2FjaGVCYWJlbEludGVyb3A7XG4gICAgfSkobm9kZUludGVyb3ApO1xufVxuZXhwb3J0cy5fID0gZXhwb3J0cy5faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZDtcbmZ1bmN0aW9uIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQob2JqLCBub2RlSW50ZXJvcCkge1xuICAgIGlmICghbm9kZUludGVyb3AgJiYgb2JqICYmIG9iai5fX2VzTW9kdWxlKSByZXR1cm4gb2JqO1xuICAgIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB7IGRlZmF1bHQ6IG9iaiB9O1xuXG4gICAgdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTtcblxuICAgIGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgcmV0dXJuIGNhY2hlLmdldChvYmopO1xuXG4gICAgdmFyIG5ld09iaiA9IHt9O1xuICAgIHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKGtleSAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpO1xuICAgICAgICAgICAgZWxzZSBuZXdPYmpba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG5cbiAgICBpZiAoY2FjaGUpIGNhY2hlLnNldChvYmosIG5ld09iaik7XG5cbiAgICByZXR1cm4gbmV3T2JqO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _class_private_field_loose_base),\n/* harmony export */ _class_private_field_loose_base: () => (/* binding */ _class_private_field_loose_base)\n/* harmony export */ });\nfunction _class_private_field_loose_base(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError(\"attempted to use private field on non-instance\");\n }\n\n return receiver;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNnRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlLmpzPzI5MWUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UocmVjZWl2ZXIsIHByaXZhdGVLZXkpIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNlaXZlciwgcHJpdmF0ZUtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY2VpdmVyO1xufVxuZXhwb3J0IHsgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZSBhcyBfIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _class_private_field_loose_key),\n/* harmony export */ _class_private_field_loose_key: () => (/* binding */ _class_private_field_loose_key)\n/* harmony export */ });\nvar id = 0;\n\nfunction _class_private_field_loose_key(name) {\n return \"__private_\" + id++ + \"_\" + name;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFFTztBQUNQO0FBQ0E7QUFDK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5LmpzPzY0NDIiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGlkID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleShuYW1lKSB7XG4gICAgcmV0dXJuIFwiX19wcml2YXRlX1wiICsgaWQrKyArIFwiX1wiICsgbmFtZTtcbn1cbmV4cG9ydCB7IF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleSBhcyBfIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_interop_require_default.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _interop_require_default),\n/* harmony export */ _interop_require_default: () => (/* binding */ _interop_require_default)\n/* harmony export */ });\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQLDJDQUEyQztBQUMzQztBQUN5QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuanM/MTZhNyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9O1xufVxuZXhwb3J0IHsgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js": +/*!********************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_interop_require_wildcard.js ***! + \********************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _interop_require_wildcard),\n/* harmony export */ _interop_require_wildcard: () => (/* binding */ _interop_require_wildcard)\n/* harmony export */ });\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0EsdUZBQXVGOztBQUV2Rjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDMEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5qcz85ZmZlIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkge1xuICAgIGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcblxuICAgIHZhciBjYWNoZUJhYmVsSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgdmFyIGNhY2hlTm9kZUludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbihub2RlSW50ZXJvcCkge1xuICAgICAgICByZXR1cm4gbm9kZUludGVyb3AgPyBjYWNoZU5vZGVJbnRlcm9wIDogY2FjaGVCYWJlbEludGVyb3A7XG4gICAgfSkobm9kZUludGVyb3ApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQob2JqLCBub2RlSW50ZXJvcCkge1xuICAgIGlmICghbm9kZUludGVyb3AgJiYgb2JqICYmIG9iai5fX2VzTW9kdWxlKSByZXR1cm4gb2JqO1xuICAgIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB7IGRlZmF1bHQ6IG9iaiB9O1xuXG4gICAgdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTtcblxuICAgIGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgcmV0dXJuIGNhY2hlLmdldChvYmopO1xuXG4gICAgdmFyIG5ld09iaiA9IHt9O1xuICAgIHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKGtleSAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpO1xuICAgICAgICAgICAgZWxzZSBuZXdPYmpba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG5cbiAgICBpZiAoY2FjaGUpIGNhY2hlLnNldChvYmosIG5ld09iaik7XG5cbiAgICByZXR1cm4gbmV3T2JqO1xufVxuZXhwb3J0IHsgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCBhcyBfIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _tagged_template_literal_loose),\n/* harmony export */ _tagged_template_literal_loose: () => (/* binding */ _tagged_template_literal_loose)\n/* harmony export */ });\nfunction _tagged_template_literal_loose(strings, raw) {\n if (!raw) raw = strings.slice(0);\n\n strings.raw = raw;\n\n return strings;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQOztBQUVBOztBQUVBO0FBQ0E7QUFDK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlLmpzP2UwMDgiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZShzdHJpbmdzLCByYXcpIHtcbiAgICBpZiAoIXJhdykgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTtcblxuICAgIHN0cmluZ3MucmF3ID0gcmF3O1xuXG4gICAgcmV0dXJuIHN0cmluZ3M7XG59XG5leHBvcnQgeyBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UgYXMgXyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/@swc/helpers/esm/_interop_require_default.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_interop_require_default.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: () => (/* binding */ _interop_require_default),\n/* harmony export */ _interop_require_default: () => (/* binding */ _interop_require_default)\n/* harmony export */ });\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQLDJDQUEyQztBQUMzQztBQUN5QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuanM/MTI4MSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9O1xufVxuZXhwb3J0IHsgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/@swc/helpers/esm/_interop_require_default.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/asynckit.js b/frontend/.next/server/vendor-chunks/asynckit.js new file mode 100644 index 000000000..8030c9109 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/asynckit.js @@ -0,0 +1,114 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/asynckit"; +exports.ids = ["vendor-chunks/asynckit"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/asynckit/index.js": +/*!****************************************!*\ + !*** ./node_modules/asynckit/index.js ***! + \****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("module.exports =\n{\n parallel : __webpack_require__(/*! ./parallel.js */ \"(ssr)/./node_modules/asynckit/parallel.js\"),\n serial : __webpack_require__(/*! ./serial.js */ \"(ssr)/./node_modules/asynckit/serial.js\"),\n serialOrdered : __webpack_require__(/*! ./serialOrdered.js */ \"(ssr)/./node_modules/asynckit/serialOrdered.js\")\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLGdFQUFlO0FBQ3pDLGtCQUFrQixtQkFBTyxDQUFDLDREQUFhO0FBQ3ZDLGtCQUFrQixtQkFBTyxDQUFDLDBFQUFvQjtBQUM5QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvaW5kZXguanM/Y2UyYyJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG57XG4gIHBhcmFsbGVsICAgICAgOiByZXF1aXJlKCcuL3BhcmFsbGVsLmpzJyksXG4gIHNlcmlhbCAgICAgICAgOiByZXF1aXJlKCcuL3NlcmlhbC5qcycpLFxuICBzZXJpYWxPcmRlcmVkIDogcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJylcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/asynckit/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/asynckit/lib/abort.js": +/*!********************************************!*\ + !*** ./node_modules/asynckit/lib/abort.js ***! + \********************************************/ +/***/ ((module) => { + +eval("// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == 'function')\n {\n this.jobs[key]();\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2Fib3J0LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYWJvcnQuanM/YmMwOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYWJvcnQ7XG5cbi8qKlxuICogQWJvcnRzIGxlZnRvdmVyIGFjdGl2ZSBqb2JzXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gYWJvcnQoc3RhdGUpXG57XG4gIE9iamVjdC5rZXlzKHN0YXRlLmpvYnMpLmZvckVhY2goY2xlYW4uYmluZChzdGF0ZSkpO1xuXG4gIC8vIHJlc2V0IGxlZnRvdmVyIGpvYnNcbiAgc3RhdGUuam9icyA9IHt9O1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBsZWZ0b3ZlciBqb2IgYnkgaW52b2tpbmcgYWJvcnQgZnVuY3Rpb24gZm9yIHRoZSBwcm92aWRlZCBqb2IgaWRcbiAqXG4gKiBAdGhpcyAgc3RhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0ga2V5IC0gam9iIGlkIHRvIGFib3J0XG4gKi9cbmZ1bmN0aW9uIGNsZWFuKGtleSlcbntcbiAgaWYgKHR5cGVvZiB0aGlzLmpvYnNba2V5XSA9PSAnZnVuY3Rpb24nKVxuICB7XG4gICAgdGhpcy5qb2JzW2tleV0oKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/asynckit/lib/abort.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/asynckit/lib/async.js": +/*!********************************************!*\ + !*** ./node_modules/asynckit/lib/async.js ***! + \********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("var defer = __webpack_require__(/*! ./defer.js */ \"(ssr)/./node_modules/asynckit/lib/defer.js\");\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2FzeW5jLmpzIiwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQyw4REFBWTs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsVUFBVTtBQUN2QixhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsaUJBQWlCOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2FzeW5jLmpzPzlmZWUiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGRlZmVyID0gcmVxdWlyZSgnLi9kZWZlci5qcycpO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gYXN5bmM7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBjYWxsYmFjayBhc3luY2hyb25vdXNseVxuICogZXZlbiBpZiBjYWxsYmFjayBpdHNlbGYgaXMgbm90XG4gKlxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGNhbGxiYWNrIHRvIGludm9rZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGF1Z21lbnRlZCBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBhc3luYyhjYWxsYmFjaylcbntcbiAgdmFyIGlzQXN5bmMgPSBmYWxzZTtcblxuICAvLyBjaGVjayBpZiBhc3luYyBoYXBwZW5lZFxuICBkZWZlcihmdW5jdGlvbigpIHsgaXNBc3luYyA9IHRydWU7IH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBhc3luY19jYWxsYmFjayhlcnIsIHJlc3VsdClcbiAge1xuICAgIGlmIChpc0FzeW5jKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIGRlZmVyKGZ1bmN0aW9uIG5leHRUaWNrX2NhbGxiYWNrKClcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/asynckit/lib/async.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/asynckit/lib/defer.js": +/*!********************************************!*\ + !*** ./node_modules/asynckit/lib/defer.js ***! + \********************************************/ +/***/ ((module) => { + +eval("module.exports = defer;\n\n/**\n * Runs provided function on next iteration of the event loop\n *\n * @param {function} fn - function to run\n */\nfunction defer(fn)\n{\n var nextTick = typeof setImmediate == 'function'\n ? setImmediate\n : (\n typeof process == 'object' && typeof process.nextTick == 'function'\n ? process.nextTick\n : null\n );\n\n if (nextTick)\n {\n nextTick(fn);\n }\n else\n {\n setTimeout(fn, 0);\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2RlZmVyLmpzIiwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9kZWZlci5qcz9lMjQ4Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZGVmZXI7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBmdW5jdGlvbiBvbiBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcFxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gZnVuY3Rpb24gdG8gcnVuXG4gKi9cbmZ1bmN0aW9uIGRlZmVyKGZuKVxue1xuICB2YXIgbmV4dFRpY2sgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09ICdmdW5jdGlvbidcbiAgICA/IHNldEltbWVkaWF0ZVxuICAgIDogKFxuICAgICAgdHlwZW9mIHByb2Nlc3MgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm9jZXNzLm5leHRUaWNrXG4gICAgICA6IG51bGxcbiAgICApO1xuXG4gIGlmIChuZXh0VGljaylcbiAge1xuICAgIG5leHRUaWNrKGZuKTtcbiAgfVxuICBlbHNlXG4gIHtcbiAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/asynckit/lib/defer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/asynckit/lib/iterate.js": +/*!**********************************************!*\ + !*** ./node_modules/asynckit/lib/iterate.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("var async = __webpack_require__(/*! ./async.js */ \"(ssr)/./node_modules/asynckit/lib/async.js\")\n , abort = __webpack_require__(/*! ./abort.js */ \"(ssr)/./node_modules/asynckit/lib/abort.js\")\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don't repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don't process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2l0ZXJhdGUuanMiLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLDhEQUFZO0FBQ2hDLFlBQVksbUJBQU8sQ0FBQyw4REFBWTtBQUNoQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLFVBQVU7QUFDckIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxVQUFVO0FBQ3ZCLGFBQWEsZUFBZTtBQUM1QixhQUFhLE9BQU87QUFDcEIsYUFBYSxVQUFVO0FBQ3ZCLGFBQWEsZ0JBQWdCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9pdGVyYXRlLmpzPzE2ZjgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFzeW5jID0gcmVxdWlyZSgnLi9hc3luYy5qcycpXG4gICwgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gaXRlcmF0ZTtcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVhY2ggam9iIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IGpvYiBzdGF0dXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqL1xuZnVuY3Rpb24gaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGNhbGxiYWNrKVxue1xuICAvLyBzdG9yZSBjdXJyZW50IGluZGV4XG4gIHZhciBrZXkgPSBzdGF0ZVsna2V5ZWRMaXN0J10gPyBzdGF0ZVsna2V5ZWRMaXN0J11bc3RhdGUuaW5kZXhdIDogc3RhdGUuaW5kZXg7XG5cbiAgc3RhdGUuam9ic1trZXldID0gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGxpc3Rba2V5XSwgZnVuY3Rpb24oZXJyb3IsIG91dHB1dClcbiAge1xuICAgIC8vIGRvbid0IHJlcGVhdCB5b3Vyc2VsZlxuICAgIC8vIHNraXAgc2Vjb25kYXJ5IGNhbGxiYWNrc1xuICAgIGlmICghKGtleSBpbiBzdGF0ZS5qb2JzKSlcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgam9ic1xuICAgIGRlbGV0ZSBzdGF0ZS5qb2JzW2tleV07XG5cbiAgICBpZiAoZXJyb3IpXG4gICAge1xuICAgICAgLy8gZG9uJ3QgcHJvY2VzcyByZXN0IG9mIHRoZSByZXN1bHRzXG4gICAgICAvLyBzdG9wIHN0aWxsIGFjdGl2ZSBqb2JzXG4gICAgICAvLyBhbmQgcmVzZXQgdGhlIGxpc3RcbiAgICAgIGFib3J0KHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIHN0YXRlLnJlc3VsdHNba2V5XSA9IG91dHB1dDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gc2FsdmFnZWQgcmVzdWx0c1xuICAgIGNhbGxiYWNrKGVycm9yLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGpvYiBlbGVtZW50XG4gKlxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIGludm9rZVxuICogQHBhcmFtICAge3N0cmluZ3xudW1iZXJ9IGtleSAtIGtleS9pbmRleCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgbGlzdCBvZiBqb2JzXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGl0ZW0gLSBqb2IgZGVzY3JpcHRpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIGFmdGVyIGl0ZXJhdG9yIGlzIGRvbmUgd2l0aCB0aGUgam9iXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb258bWl4ZWR9IC0gam9iIGFib3J0IGZ1bmN0aW9uIG9yIHNvbWV0aGluZyBlbHNlXG4gKi9cbmZ1bmN0aW9uIHJ1bkpvYihpdGVyYXRvciwga2V5LCBpdGVtLCBjYWxsYmFjaylcbntcbiAgdmFyIGFib3J0ZXI7XG5cbiAgLy8gYWxsb3cgc2hvcnRjdXQgaWYgaXRlcmF0b3IgZXhwZWN0cyBvbmx5IHR3byBhcmd1bWVudHNcbiAgaWYgKGl0ZXJhdG9yLmxlbmd0aCA9PSAyKVxuICB7XG4gICAgYWJvcnRlciA9IGl0ZXJhdG9yKGl0ZW0sIGFzeW5jKGNhbGxiYWNrKSk7XG4gIH1cbiAgLy8gb3RoZXJ3aXNlIGdvIHdpdGggZnVsbCB0aHJlZSBhcmd1bWVudHNcbiAgZWxzZVxuICB7XG4gICAgYWJvcnRlciA9IGl0ZXJhdG9yKGl0ZW0sIGtleSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuXG4gIHJldHVybiBhYm9ydGVyO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/asynckit/lib/iterate.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/asynckit/lib/state.js": +/*!********************************************!*\ + !*** ./node_modules/asynckit/lib/state.js ***! + \********************************************/ +/***/ ((module) => { + +eval("// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it's values\n // sort object's keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL3N0YXRlLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGNBQWM7QUFDM0IsYUFBYSxlQUFlO0FBQzVCO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvc3RhdGUuanM/N2VlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBUElcbm1vZHVsZS5leHBvcnRzID0gc3RhdGU7XG5cbi8qKlxuICogQ3JlYXRlcyBpbml0aWFsIHN0YXRlIG9iamVjdFxuICogZm9yIGl0ZXJhdGlvbiBvdmVyIGxpc3RcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gbGlzdCB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbnxudWxsfSBzb3J0TWV0aG9kIC0gZnVuY3Rpb24gdG8gdXNlIGZvciBrZXlzIHNvcnQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBgbnVsbGAgdG8ga2VlcCB0aGVtIGFzIGlzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAtIGluaXRpYWwgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHN0YXRlKGxpc3QsIHNvcnRNZXRob2QpXG57XG4gIHZhciBpc05hbWVkTGlzdCA9ICFBcnJheS5pc0FycmF5KGxpc3QpXG4gICAgLCBpbml0U3RhdGUgPVxuICAgIHtcbiAgICAgIGluZGV4ICAgIDogMCxcbiAgICAgIGtleWVkTGlzdDogaXNOYW1lZExpc3QgfHwgc29ydE1ldGhvZCA/IE9iamVjdC5rZXlzKGxpc3QpIDogbnVsbCxcbiAgICAgIGpvYnMgICAgIDoge30sXG4gICAgICByZXN1bHRzICA6IGlzTmFtZWRMaXN0ID8ge30gOiBbXSxcbiAgICAgIHNpemUgICAgIDogaXNOYW1lZExpc3QgPyBPYmplY3Qua2V5cyhsaXN0KS5sZW5ndGggOiBsaXN0Lmxlbmd0aFxuICAgIH1cbiAgICA7XG5cbiAgaWYgKHNvcnRNZXRob2QpXG4gIHtcbiAgICAvLyBzb3J0IGFycmF5IGtleXMgYmFzZWQgb24gaXQncyB2YWx1ZXNcbiAgICAvLyBzb3J0IG9iamVjdCdzIGtleXMganVzdCBvbiBvd24gbWVyaXRcbiAgICBpbml0U3RhdGUua2V5ZWRMaXN0LnNvcnQoaXNOYW1lZExpc3QgPyBzb3J0TWV0aG9kIDogZnVuY3Rpb24oYSwgYilcbiAgICB7XG4gICAgICByZXR1cm4gc29ydE1ldGhvZChsaXN0W2FdLCBsaXN0W2JdKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBpbml0U3RhdGU7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/asynckit/lib/state.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/asynckit/lib/terminator.js": +/*!*************************************************!*\ + !*** ./node_modules/asynckit/lib/terminator.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("var abort = __webpack_require__(/*! ./abort.js */ \"(ssr)/./node_modules/asynckit/lib/abort.js\")\n , async = __webpack_require__(/*! ./async.js */ \"(ssr)/./node_modules/asynckit/lib/async.js\")\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL3Rlcm1pbmF0b3IuanMiLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLDhEQUFZO0FBQ2hDLFlBQVksbUJBQU8sQ0FBQyw4REFBWTtBQUNoQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi90ZXJtaW5hdG9yLmpzPzJiMzYiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGFib3J0ID0gcmVxdWlyZSgnLi9hYm9ydC5qcycpXG4gICwgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gdGVybWluYXRvcjtcblxuLyoqXG4gKiBUZXJtaW5hdGVzIGpvYnMgaW4gdGhlIGF0dGFjaGVkIHN0YXRlIGNvbnRleHRcbiAqXG4gKiBAdGhpcyAgQXN5bmNLaXRTdGF0ZSNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gZmluYWwgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRlcm1pbmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHRlcm1pbmF0b3IoY2FsbGJhY2spXG57XG4gIGlmICghT2JqZWN0LmtleXModGhpcy5qb2JzKS5sZW5ndGgpXG4gIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBmYXN0IGZvcndhcmQgaXRlcmF0aW9uIGluZGV4XG4gIHRoaXMuaW5kZXggPSB0aGlzLnNpemU7XG5cbiAgLy8gYWJvcnQgam9ic1xuICBhYm9ydCh0aGlzKTtcblxuICAvLyBzZW5kIGJhY2sgcmVzdWx0cyB3ZSBoYXZlIHNvIGZhclxuICBhc3luYyhjYWxsYmFjaykobnVsbCwgdGhpcy5yZXN1bHRzKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/asynckit/lib/terminator.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/asynckit/parallel.js": +/*!*******************************************!*\ + !*** ./node_modules/asynckit/parallel.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("var iterate = __webpack_require__(/*! ./lib/iterate.js */ \"(ssr)/./node_modules/asynckit/lib/iterate.js\")\n , initState = __webpack_require__(/*! ./lib/state.js */ \"(ssr)/./node_modules/asynckit/lib/state.js\")\n , terminator = __webpack_require__(/*! ./lib/terminator.js */ \"(ssr)/./node_modules/asynckit/lib/terminator.js\")\n ;\n\n// Public API\nmodule.exports = parallel;\n\n/**\n * Runs iterator over provided array elements in parallel\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction parallel(list, iterator, callback)\n{\n var state = initState(list);\n\n while (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, function(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n // looks like it's the last one\n if (Object.keys(state.jobs).length === 0)\n {\n callback(null, state.results);\n return;\n }\n });\n\n state.index++;\n }\n\n return terminator.bind(state, callback);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvcGFyYWxsZWwuanMiLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsc0VBQWtCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLGtFQUFnQjtBQUN6QyxpQkFBaUIsbUJBQU8sQ0FBQyw0RUFBcUI7QUFDOUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGNBQWM7QUFDM0IsYUFBYSxVQUFVO0FBQ3ZCLGFBQWEsVUFBVTtBQUN2QixhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9wYXJhbGxlbC5qcz8wNzc0Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBpdGVyYXRlICAgID0gcmVxdWlyZSgnLi9saWIvaXRlcmF0ZS5qcycpXG4gICwgaW5pdFN0YXRlICA9IHJlcXVpcmUoJy4vbGliL3N0YXRlLmpzJylcbiAgLCB0ZXJtaW5hdG9yID0gcmVxdWlyZSgnLi9saWIvdGVybWluYXRvci5qcycpXG4gIDtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBwYXJhbGxlbDtcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgYXJyYXkgZWxlbWVudHMgaW4gcGFyYWxsZWxcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBwYXJhbGxlbChsaXN0LCBpdGVyYXRvciwgY2FsbGJhY2spXG57XG4gIHZhciBzdGF0ZSA9IGluaXRTdGF0ZShsaXN0KTtcblxuICB3aGlsZSAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAge1xuICAgIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbihlcnJvciwgcmVzdWx0KVxuICAgIHtcbiAgICAgIGlmIChlcnJvcilcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gbG9va3MgbGlrZSBpdCdzIHRoZSBsYXN0IG9uZVxuICAgICAgaWYgKE9iamVjdC5rZXlzKHN0YXRlLmpvYnMpLmxlbmd0aCA9PT0gMClcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdGUucmVzdWx0cyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YXRlLmluZGV4Kys7XG4gIH1cblxuICByZXR1cm4gdGVybWluYXRvci5iaW5kKHN0YXRlLCBjYWxsYmFjayk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/asynckit/parallel.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/asynckit/serial.js": +/*!*****************************************!*\ + !*** ./node_modules/asynckit/serial.js ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("var serialOrdered = __webpack_require__(/*! ./serialOrdered.js */ \"(ssr)/./node_modules/asynckit/serialOrdered.js\");\n\n// Public API\nmodule.exports = serial;\n\n/**\n * Runs iterator over provided array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serial(list, iterator, callback)\n{\n return serialOrdered(list, iterator, null, callback);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsLmpzIiwibWFwcGluZ3MiOiJBQUFBLG9CQUFvQixtQkFBTyxDQUFDLDBFQUFvQjs7QUFFaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGNBQWM7QUFDM0IsYUFBYSxVQUFVO0FBQ3ZCLGFBQWEsVUFBVTtBQUN2QixhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsLmpzP2IzNTciXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHNlcmlhbE9yZGVyZWQgPSByZXF1aXJlKCcuL3NlcmlhbE9yZGVyZWQuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzZXJpYWw7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGFycmF5IGVsZW1lbnRzIGluIHNlcmllc1xuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbChsaXN0LCBpdGVyYXRvciwgY2FsbGJhY2spXG57XG4gIHJldHVybiBzZXJpYWxPcmRlcmVkKGxpc3QsIGl0ZXJhdG9yLCBudWxsLCBjYWxsYmFjayk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/asynckit/serial.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/asynckit/serialOrdered.js": +/*!************************************************!*\ + !*** ./node_modules/asynckit/serialOrdered.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("var iterate = __webpack_require__(/*! ./lib/iterate.js */ \"(ssr)/./node_modules/asynckit/lib/iterate.js\")\n , initState = __webpack_require__(/*! ./lib/state.js */ \"(ssr)/./node_modules/asynckit/lib/state.js\")\n , terminator = __webpack_require__(/*! ./lib/terminator.js */ \"(ssr)/./node_modules/asynckit/lib/terminator.js\")\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state['keyedList'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvc2VyaWFsT3JkZXJlZC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxpQkFBaUIsbUJBQU8sQ0FBQyxzRUFBa0I7QUFDM0MsaUJBQWlCLG1CQUFPLENBQUMsa0VBQWdCO0FBQ3pDLGlCQUFpQixtQkFBTyxDQUFDLDRFQUFxQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIseUJBQXlCOztBQUV6QjtBQUNBO0FBQ0E7QUFDQSxhQUFhLGNBQWM7QUFDM0IsYUFBYSxVQUFVO0FBQ3ZCLGFBQWEsVUFBVTtBQUN2QixhQUFhLFVBQVU7QUFDdkIsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L3NlcmlhbE9yZGVyZWQuanM/YmFhMSJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXRlcmF0ZSAgICA9IHJlcXVpcmUoJy4vbGliL2l0ZXJhdGUuanMnKVxuICAsIGluaXRTdGF0ZSAgPSByZXF1aXJlKCcuL2xpYi9zdGF0ZS5qcycpXG4gICwgdGVybWluYXRvciA9IHJlcXVpcmUoJy4vbGliL3Rlcm1pbmF0b3IuanMnKVxuICA7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gc2VyaWFsT3JkZXJlZDtcbi8vIHNvcnRpbmcgaGVscGVyc1xubW9kdWxlLmV4cG9ydHMuYXNjZW5kaW5nICA9IGFzY2VuZGluZztcbm1vZHVsZS5leHBvcnRzLmRlc2NlbmRpbmcgPSBkZXNjZW5kaW5nO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBzb3J0ZWQgYXJyYXkgZWxlbWVudHMgaW4gc2VyaWVzXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IHNvcnRNZXRob2QgLSBjdXN0b20gc29ydCBmdW5jdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbE9yZGVyZWQobGlzdCwgaXRlcmF0b3IsIHNvcnRNZXRob2QsIGNhbGxiYWNrKVxue1xuICB2YXIgc3RhdGUgPSBpbml0U3RhdGUobGlzdCwgc29ydE1ldGhvZCk7XG5cbiAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uIGl0ZXJhdG9ySGFuZGxlcihlcnJvciwgcmVzdWx0KVxuICB7XG4gICAgaWYgKGVycm9yKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0YXRlLmluZGV4Kys7XG5cbiAgICAvLyBhcmUgd2UgdGhlcmUgeWV0P1xuICAgIGlmIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICAgIHtcbiAgICAgIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBpdGVyYXRvckhhbmRsZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRvbmUgaGVyZVxuICAgIGNhbGxiYWNrKG51bGwsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcblxuICByZXR1cm4gdGVybWluYXRvci5iaW5kKHN0YXRlLCBjYWxsYmFjayk7XG59XG5cbi8qXG4gKiAtLSBTb3J0IG1ldGhvZHNcbiAqL1xuXG4vKipcbiAqIHNvcnQgaGVscGVyIHRvIHNvcnQgYXJyYXkgZWxlbWVudHMgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpXG57XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGRlc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGEgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSAgIHttaXhlZH0gYiAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHJldHVybnMge251bWJlcn0gLSBjb21wYXJpc29uIHJlc3VsdFxuICovXG5mdW5jdGlvbiBkZXNjZW5kaW5nKGEsIGIpXG57XG4gIHJldHVybiAtMSAqIGFzY2VuZGluZyhhLCBiKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/asynckit/serialOrdered.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/axios.js b/frontend/.next/server/vendor-chunks/axios.js new file mode 100644 index 000000000..a3471be91 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/axios.js @@ -0,0 +1,555 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/axios"; +exports.ids = ["vendor-chunks/axios"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/axios/lib/adapters/adapters.js": +/*!*****************************************************!*\ + !*** ./node_modules/axios/lib/adapters/adapters.js ***! + \*****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _http_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./http.js */ \"(ssr)/./node_modules/axios/lib/adapters/http.js\");\n/* harmony import */ var _xhr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xhr.js */ \"(ssr)/./node_modules/axios/lib/adapters/xhr.js\");\n/* harmony import */ var _fetch_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fetch.js */ \"(ssr)/./node_modules/axios/lib/adapters/fetch.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n\n\n\n\n\n\nconst knownAdapters = {\n http: _http_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n xhr: _xhr_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n fetch: _fetch_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n}\n\n_utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => _utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isFunction(adapter) || adapter === null || adapter === false;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n getAdapter: (adapters) => {\n adapters = _utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"](`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"](\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFnQztBQUNJO0FBQ0Y7QUFDSTtBQUNTOztBQUUvQztBQUNBLFFBQVEsZ0RBQVc7QUFDbkIsT0FBTywrQ0FBVTtBQUNqQixTQUFTLGlEQUFZO0FBQ3JCOztBQUVBLGlEQUFLO0FBQ0w7QUFDQTtBQUNBLHlDQUF5QyxNQUFNO0FBQy9DLE1BQU07QUFDTjtBQUNBO0FBQ0EsOENBQThDLE1BQU07QUFDcEQ7QUFDQSxDQUFDOztBQUVELHNDQUFzQyxPQUFPOztBQUU3QyxzQ0FBc0MsaURBQUs7O0FBRTNDLGlFQUFlO0FBQ2Y7QUFDQSxlQUFlLGlEQUFLOztBQUVwQixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0IsWUFBWTtBQUNoQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsMkRBQVUscUJBQXFCLEdBQUc7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlDQUF5QyxJQUFJO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGdCQUFnQiwyREFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcz8zOTcxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaHR0cEFkYXB0ZXIgZnJvbSAnLi9odHRwLmpzJztcbmltcG9ydCB4aHJBZGFwdGVyIGZyb20gJy4veGhyLmpzJztcbmltcG9ydCBmZXRjaEFkYXB0ZXIgZnJvbSAnLi9mZXRjaC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiBmZXRjaEFkYXB0ZXJcbn1cblxudXRpbHMuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgICAgbGV0IGlkO1xuXG4gICAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/adapters/adapters.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/adapters/fetch.js": +/*!**************************************************!*\ + !*** ./node_modules/axios/lib/adapters/fetch.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../platform/index.js */ \"(ssr)/./node_modules/axios/lib/platform/index.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _helpers_composeSignals_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/composeSignals.js */ \"(ssr)/./node_modules/axios/lib/helpers/composeSignals.js\");\n/* harmony import */ var _helpers_trackStream_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../helpers/trackStream.js */ \"(ssr)/./node_modules/axios/lib/helpers/trackStream.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n/* harmony import */ var _helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../helpers/progressEventReducer.js */ \"(ssr)/./node_modules/axios/lib/helpers/progressEventReducer.js\");\n/* harmony import */ var _helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/resolveConfig.js */ \"(ssr)/./node_modules/axios/lib/helpers/resolveConfig.js\");\n/* harmony import */ var _core_settle_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../core/settle.js */ \"(ssr)/./node_modules/axios/lib/core/settle.js\");\n\n\n\n\n\n\n\n\n\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](`Response type '${type}' is not supported`, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isBlob(body)) {\n return body.size;\n }\n\n if(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isSpecCompliantForm(body)) {\n const _request = new Request(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isArrayBufferView(body) || _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = (0,_helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = (0,_helpers_composeSignals_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventDecorator)(\n requestContentLength,\n (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventReducer)((0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.asyncDecorator)(onUploadProgress))\n );\n\n data = (0,_helpers_trackStream_js__WEBPACK_IMPORTED_MODULE_6__.trackStream)(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventDecorator)(\n responseContentLength,\n (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventReducer)((0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.asyncDecorator)(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n (0,_helpers_trackStream_js__WEBPACK_IMPORTED_MODULE_6__.trackStream)(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n (0,_core_settle_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(resolve, reject, {\n data: responseData,\n headers: _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Network Error', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].from(err, err && err.code, config, request);\n }\n}));\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2ZldGNoLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBNEM7QUFDWjtBQUNlO0FBQ1c7QUFDSjtBQUNIO0FBQzZEO0FBQ3hEO0FBQ2pCOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHFDQUFxQywwREFBUTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0EsYUFBYSxpREFBSzs7O0FBR2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkNBQTJDLGlEQUFLO0FBQ2hEO0FBQ0Esa0JBQWtCLDJEQUFVLG1CQUFtQixLQUFLLHFCQUFxQiwyREFBVTtBQUNuRixPQUFPO0FBQ1AsR0FBRztBQUNILENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSyxpREFBSztBQUNWO0FBQ0E7O0FBRUEsS0FBSyxpREFBSztBQUNWLGlDQUFpQywwREFBUTtBQUN6QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSyxpREFBSyw0QkFBNEIsaURBQUs7QUFDM0M7QUFDQTs7QUFFQSxLQUFLLGlEQUFLO0FBQ1Y7QUFDQTs7QUFFQSxLQUFLLGlEQUFLO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGlEQUFLOztBQUV0QjtBQUNBOztBQUVBLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEVBQUUscUVBQWE7O0FBRW5COztBQUVBLHVCQUF1QixzRUFBYzs7QUFFckM7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDs7QUFFQSxVQUFVLGlEQUFLO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyx3RkFBc0I7QUFDMUQ7QUFDQSxVQUFVLHNGQUFvQixDQUFDLGdGQUFjO0FBQzdDOztBQUVBLGVBQWUsb0VBQVc7QUFDMUI7QUFDQTs7QUFFQSxTQUFTLGlEQUFLO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOztBQUVQLG9DQUFvQyxpREFBSzs7QUFFekMsd0RBQXdELHdGQUFzQjtBQUM5RTtBQUNBLFFBQVEsc0ZBQW9CLENBQUMsZ0ZBQWM7QUFDM0M7O0FBRUE7QUFDQSxRQUFRLG9FQUFXO0FBQ25CO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBOztBQUVBLHVDQUF1QyxpREFBSzs7QUFFNUM7O0FBRUE7QUFDQSxNQUFNLDJEQUFNO0FBQ1o7QUFDQSxpQkFBaUIsNkRBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0EsWUFBWSwyREFBVSxrQkFBa0IsMkRBQVU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLDJEQUFVO0FBQ3BCO0FBQ0EsQ0FBQyxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9mZXRjaC5qcz9mYzc1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcbmltcG9ydCBjb21wb3NlU2lnbmFscyBmcm9tIFwiLi4vaGVscGVycy9jb21wb3NlU2lnbmFscy5qc1wiO1xuaW1wb3J0IHt0cmFja1N0cmVhbX0gZnJvbSBcIi4uL2hlbHBlcnMvdHJhY2tTdHJlYW0uanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQge3Byb2dyZXNzRXZlbnRSZWR1Y2VyLCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yLCBhc3luY0RlY29yYXRvcn0gZnJvbSBcIi4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanNcIjtcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gXCIuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanNcIjtcbmltcG9ydCBzZXR0bGUgZnJvbSBcIi4uL2NvcmUvc2V0dGxlLmpzXCI7XG5cbmNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlcXVlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlc3BvbnNlID09PSAnZnVuY3Rpb24nO1xuY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSAnZnVuY3Rpb24nO1xuXG4vLyB1c2VkIG9ubHkgaW5zaWRlIHRoZSBmZXRjaCBhZGFwdGVyXG5jb25zdCBlbmNvZGVUZXh0ID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID9cbiAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgYXN5bmMgKHN0cikgPT4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKHN0cikuYXJyYXlCdWZmZXIoKSlcbik7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmNvbnN0IHN1cHBvcnRzUmVxdWVzdFN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiYgdGVzdCgoKSA9PiB7XG4gIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZ2V0IGR1cGxleCgpIHtcbiAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAnaGFsZic7XG4gICAgfSxcbiAgfSkuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gIHJldHVybiBkdXBsZXhBY2Nlc3NlZCAmJiAhaGFzQ29udGVudFR5cGU7XG59KTtcblxuY29uc3QgREVGQVVMVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0O1xuXG5jb25zdCBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJlxuICB0ZXN0KCgpID0+IHV0aWxzLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cblxuY29uc3QgcmVzb2x2ZXJzID0ge1xuICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KVxufTtcblxuaXNGZXRjaFN1cHBvcnRlZCAmJiAoKChyZXMpID0+IHtcbiAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAhcmVzb2x2ZXJzW3R5cGVdICYmIChyZXNvbHZlcnNbdHlwZV0gPSB1dGlscy5pc0Z1bmN0aW9uKHJlc1t0eXBlXSkgPyAocmVzKSA9PiByZXNbdHlwZV0oKSA6XG4gICAgICAoXywgY29uZmlnKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBSZXNwb25zZSB0eXBlICcke3R5cGV9JyBpcyBub3Qgc3VwcG9ydGVkYCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQsIGNvbmZpZyk7XG4gICAgICB9KVxuICB9KTtcbn0pKG5ldyBSZXNwb25zZSkpO1xuXG5jb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYodXRpbHMuaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICBjb25zdCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5LFxuICAgIH0pO1xuICAgIHJldHVybiAoYXdhaXQgX3JlcXVlc3QuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpIHx8IHV0aWxzLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoYm9keSkpIHtcbiAgICBib2R5ID0gYm9keSArICcnO1xuICB9XG5cbiAgaWYodXRpbHMuaXNTdHJpbmcoYm9keSkpIHtcbiAgICByZXR1cm4gKGF3YWl0IGVuY29kZVRleHQoYm9keSkpLmJ5dGVMZW5ndGg7XG4gIH1cbn1cblxuY29uc3QgcmVzb2x2ZUJvZHlMZW5ndGggPSBhc3luYyAoaGVhZGVycywgYm9keSkgPT4ge1xuICBjb25zdCBsZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihoZWFkZXJzLmdldENvbnRlbnRMZW5ndGgoKSk7XG5cbiAgcmV0dXJuIGxlbmd0aCA9PSBudWxsID8gZ2V0Qm9keUxlbmd0aChib2R5KSA6IGxlbmd0aDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNGZXRjaFN1cHBvcnRlZCAmJiAoYXN5bmMgKGNvbmZpZykgPT4ge1xuICBsZXQge1xuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgZGF0YSxcbiAgICBzaWduYWwsXG4gICAgY2FuY2VsVG9rZW4sXG4gICAgdGltZW91dCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICByZXNwb25zZVR5cGUsXG4gICAgaGVhZGVycyxcbiAgICB3aXRoQ3JlZGVudGlhbHMgPSAnc2FtZS1vcmlnaW4nLFxuICAgIGZldGNoT3B0aW9uc1xuICB9ID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuXG4gIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSA/IChyZXNwb25zZVR5cGUgKyAnJykudG9Mb3dlckNhc2UoKSA6ICd0ZXh0JztcblxuICBsZXQgY29tcG9zZWRTaWduYWwgPSBjb21wb3NlU2lnbmFscyhbc2lnbmFsLCBjYW5jZWxUb2tlbiAmJiBjYW5jZWxUb2tlbi50b0Fib3J0U2lnbmFsKCldLCB0aW1lb3V0KTtcblxuICBsZXQgcmVxdWVzdDtcblxuICBjb25zdCB1bnN1YnNjcmliZSA9IGNvbXBvc2VkU2lnbmFsICYmIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlICYmICgoKSA9PiB7XG4gICAgICBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSgpO1xuICB9KTtcblxuICBsZXQgcmVxdWVzdENvbnRlbnRMZW5ndGg7XG5cbiAgdHJ5IHtcbiAgICBpZiAoXG4gICAgICBvblVwbG9hZFByb2dyZXNzICYmIHN1cHBvcnRzUmVxdWVzdFN0cmVhbSAmJiBtZXRob2QgIT09ICdnZXQnICYmIG1ldGhvZCAhPT0gJ2hlYWQnICYmXG4gICAgICAocmVxdWVzdENvbnRlbnRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKSkgIT09IDBcbiAgICApIHtcbiAgICAgIGxldCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgZHVwbGV4OiBcImhhbGZcIlxuICAgICAgfSk7XG5cbiAgICAgIGxldCBjb250ZW50VHlwZUhlYWRlcjtcblxuICAgICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgJiYgKGNvbnRlbnRUeXBlSGVhZGVyID0gX3JlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpKSkge1xuICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKVxuICAgICAgfVxuXG4gICAgICBpZiAoX3JlcXVlc3QuYm9keSkge1xuICAgICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvblVwbG9hZFByb2dyZXNzKSlcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCBmbHVzaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscy5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHMgPyAnaW5jbHVkZScgOiAnb21pdCc7XG4gICAgfVxuXG4gICAgLy8gQ2xvdWRmbGFyZSBXb3JrZXJzIHRocm93cyB3aGVuIGNyZWRlbnRpYWxzIGFyZSBkZWZpbmVkXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jbG91ZGZsYXJlL3dvcmtlcmQvaXNzdWVzLzkwMlxuICAgIGNvbnN0IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPSBcImNyZWRlbnRpYWxzXCIgaW4gUmVxdWVzdC5wcm90b3R5cGU7XG4gICAgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgc2lnbmFsOiBjb21wb3NlZFNpZ25hbCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLm5vcm1hbGl6ZSgpLnRvSlNPTigpLFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIGR1cGxleDogXCJoYWxmXCIsXG4gICAgICBjcmVkZW50aWFsczogaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA/IHdpdGhDcmVkZW50aWFscyA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCk7XG5cbiAgICBjb25zdCBpc1N0cmVhbVJlc3BvbnNlID0gc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJyB8fCByZXNwb25zZVR5cGUgPT09ICdyZXNwb25zZScpO1xuXG4gICAgaWYgKHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCAoaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSkpKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge307XG5cbiAgICAgIFsnc3RhdHVzJywgJ3N0YXR1c1RleHQnLCAnaGVhZGVycyddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRMZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG5cbiAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgcmVzcG9uc2VDb250ZW50TGVuZ3RoLFxuICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlKVxuICAgICAgKSB8fCBbXTtcblxuICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgIHRyYWNrU3RyZWFtKHJlc3BvbnNlLmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgKCkgPT4ge1xuICAgICAgICAgIGZsdXNoICYmIGZsdXNoKCk7XG4gICAgICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcblxuICAgIGxldCByZXNwb25zZURhdGEgPSBhd2FpdCByZXNvbHZlcnNbdXRpbHMuZmluZEtleShyZXNvbHZlcnMsIHJlc3BvbnNlVHlwZSkgfHwgJ3RleHQnXShyZXNwb25zZSwgY29uZmlnKTtcblxuICAgICFpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIGhlYWRlcnM6IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9KVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgbmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpLFxuICAgICAgICB7XG4gICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnJcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgfVxufSk7XG5cblxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/adapters/fetch.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/adapters/http.js": +/*!*************************************************!*\ + !*** ./node_modules/axios/lib/adapters/http.js ***! + \*************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ __setProxy: () => (/* binding */ __setProxy),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _core_settle_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./../core/settle.js */ \"(ssr)/./node_modules/axios/lib/core/settle.js\");\n/* harmony import */ var _core_buildFullPath_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../core/buildFullPath.js */ \"(ssr)/./node_modules/axios/lib/core/buildFullPath.js\");\n/* harmony import */ var _helpers_buildURL_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./../helpers/buildURL.js */ \"(ssr)/./node_modules/axios/lib/helpers/buildURL.js\");\n/* harmony import */ var proxy_from_env__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! proxy-from-env */ \"(ssr)/./node_modules/proxy-from-env/index.js\");\n/* harmony import */ var http__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! http */ \"http\");\n/* harmony import */ var https__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! https */ \"https\");\n/* harmony import */ var util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! util */ \"util\");\n/* harmony import */ var follow_redirects__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! follow-redirects */ \"(ssr)/./node_modules/follow-redirects/index.js\");\n/* harmony import */ var zlib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! zlib */ \"zlib\");\n/* harmony import */ var _env_data_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../env/data.js */ \"(ssr)/./node_modules/axios/lib/env/data.js\");\n/* harmony import */ var _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../defaults/transitional.js */ \"(ssr)/./node_modules/axios/lib/defaults/transitional.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../cancel/CanceledError.js */ \"(ssr)/./node_modules/axios/lib/cancel/CanceledError.js\");\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../platform/index.js */ \"(ssr)/./node_modules/axios/lib/platform/index.js\");\n/* harmony import */ var _helpers_fromDataURI_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../helpers/fromDataURI.js */ \"(ssr)/./node_modules/axios/lib/helpers/fromDataURI.js\");\n/* harmony import */ var stream__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! stream */ \"stream\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n/* harmony import */ var _helpers_AxiosTransformStream_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../helpers/AxiosTransformStream.js */ \"(ssr)/./node_modules/axios/lib/helpers/AxiosTransformStream.js\");\n/* harmony import */ var events__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! events */ \"events\");\n/* harmony import */ var _helpers_formDataToStream_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../helpers/formDataToStream.js */ \"(ssr)/./node_modules/axios/lib/helpers/formDataToStream.js\");\n/* harmony import */ var _helpers_readBlob_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../helpers/readBlob.js */ \"(ssr)/./node_modules/axios/lib/helpers/readBlob.js\");\n/* harmony import */ var _helpers_ZlibHeaderTransformStream_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../helpers/ZlibHeaderTransformStream.js */ \"(ssr)/./node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js\");\n/* harmony import */ var _helpers_callbackify_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../helpers/callbackify.js */ \"(ssr)/./node_modules/axios/lib/helpers/callbackify.js\");\n/* harmony import */ var _helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../helpers/progressEventReducer.js */ \"(ssr)/./node_modules/axios/lib/helpers/progressEventReducer.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst zlibOptions = {\n flush: zlib__WEBPACK_IMPORTED_MODULE_5__.constants.Z_SYNC_FLUSH,\n finishFlush: zlib__WEBPACK_IMPORTED_MODULE_5__.constants.Z_SYNC_FLUSH\n};\n\nconst brotliOptions = {\n flush: zlib__WEBPACK_IMPORTED_MODULE_5__.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib__WEBPACK_IMPORTED_MODULE_5__.constants.BROTLI_OPERATION_FLUSH\n}\n\nconst isBrotliSupported = _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isFunction(zlib__WEBPACK_IMPORTED_MODULE_5__.createBrotliDecompress);\n\nconst {http: httpFollow, https: httpsFollow} = follow_redirects__WEBPACK_IMPORTED_MODULE_4__;\n\nconst isHttps = /https:?/;\n\nconst supportedProtocols = _platform_index_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"].protocols.map(protocol => {\n return protocol + ':';\n});\n\nconst flushOnFinish = (stream, [throttled, flush]) => {\n stream\n .on('end', flush)\n .on('error', flush);\n\n return throttled;\n}\n\n/**\n * If the proxy or config beforeRedirects functions are defined, call them with the options\n * object.\n *\n * @param {Object} options - The options object that was passed to the request.\n *\n * @returns {Object}\n */\nfunction dispatchBeforeRedirect(options, responseDetails) {\n if (options.beforeRedirects.proxy) {\n options.beforeRedirects.proxy(options);\n }\n if (options.beforeRedirects.config) {\n options.beforeRedirects.config(options, responseDetails);\n }\n}\n\n/**\n * If the proxy or config afterRedirects functions are defined, call them with the options\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} configProxy configuration from Axios options object\n * @param {string} location\n *\n * @returns {http.ClientRequestArgs}\n */\nfunction setProxy(options, configProxy, location) {\n let proxy = configProxy;\n if (!proxy && proxy !== false) {\n const proxyUrl = proxy_from_env__WEBPACK_IMPORTED_MODULE_0__.getProxyForUrl(location);\n if (proxyUrl) {\n proxy = new URL(proxyUrl);\n }\n }\n if (proxy) {\n // Basic proxy authorization\n if (proxy.username) {\n proxy.auth = (proxy.username || '') + ':' + (proxy.password || '');\n }\n\n if (proxy.auth) {\n // Support proxy auth object form\n if (proxy.auth.username || proxy.auth.password) {\n proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || '');\n }\n const base64 = Buffer\n .from(proxy.auth, 'utf8')\n .toString('base64');\n options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n }\n\n options.headers.host = options.hostname + (options.port ? ':' + options.port : '');\n const proxyHost = proxy.hostname || proxy.host;\n options.hostname = proxyHost;\n // Replace 'host' since options is not a URL object\n options.host = proxyHost;\n options.port = proxy.port;\n options.path = location;\n if (proxy.protocol) {\n options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`;\n }\n }\n\n options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {\n // Configure proxy for redirected request, passing the original config proxy to apply\n // the exact same logic as if the redirected request was performed by axios directly.\n setProxy(redirectOptions, configProxy, redirectOptions.href);\n };\n}\n\nconst isHttpAdapterSupported = typeof process !== 'undefined' && _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].kindOf(process) === 'process';\n\n// temporary hotfix\n\nconst wrapAsync = (asyncExecutor) => {\n return new Promise((resolve, reject) => {\n let onDone;\n let isDone;\n\n const done = (value, isRejected) => {\n if (isDone) return;\n isDone = true;\n onDone && onDone(value, isRejected);\n }\n\n const _resolve = (value) => {\n done(value);\n resolve(value);\n };\n\n const _reject = (reason) => {\n done(reason, true);\n reject(reason);\n }\n\n asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject);\n })\n};\n\nconst resolveFamily = ({address, family}) => {\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isString(address)) {\n throw TypeError('address must be a string');\n }\n return ({\n address,\n family: family || (address.indexOf('.') < 0 ? 6 : 4)\n });\n}\n\nconst buildAddressEntry = (address, family) => resolveFamily(_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isObject(address) ? address : {address, family});\n\n/*eslint consistent-return:0*/\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isHttpAdapterSupported && function httpAdapter(config) {\n return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {\n let {data, lookup, family} = config;\n const {responseType, responseEncoding} = config;\n const method = config.method.toUpperCase();\n let isDone;\n let rejected = false;\n let req;\n\n if (lookup) {\n const _lookup = (0,_helpers_callbackify_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(lookup, (value) => _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isArray(value) ? value : [value]);\n // hotfix to support opt.all option which is required for node 20.x\n lookup = (hostname, opt, cb) => {\n _lookup(hostname, opt, (err, arg0, arg1) => {\n if (err) {\n return cb(err);\n }\n\n const addresses = _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];\n\n opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);\n });\n }\n }\n\n // temporary internal emitter until the AxiosRequest class will be implemented\n const emitter = new events__WEBPACK_IMPORTED_MODULE_7__.EventEmitter();\n\n const onFinished = () => {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(abort);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', abort);\n }\n\n emitter.removeAllListeners();\n }\n\n onDone((value, isRejected) => {\n isDone = true;\n if (isRejected) {\n rejected = true;\n onFinished();\n }\n });\n\n function abort(reason) {\n emitter.emit('abort', !reason || reason.type ? new _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"](null, config, req) : reason);\n }\n\n emitter.once('abort', reject);\n\n if (config.cancelToken || config.signal) {\n config.cancelToken && config.cancelToken.subscribe(abort);\n if (config.signal) {\n config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort);\n }\n }\n\n // Parse url\n const fullPath = (0,_core_buildFullPath_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(config.baseURL, config.url, config.allowAbsoluteUrls);\n const parsed = new URL(fullPath, _platform_index_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"].hasBrowserEnv ? _platform_index_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"].origin : undefined);\n const protocol = parsed.protocol || supportedProtocols[0];\n\n if (protocol === 'data:') {\n let convertedData;\n\n if (method !== 'GET') {\n return (0,_core_settle_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(resolve, reject, {\n status: 405,\n statusText: 'method not allowed',\n headers: {},\n config\n });\n }\n\n try {\n convertedData = (0,_helpers_fromDataURI_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(config.url, responseType === 'blob', {\n Blob: config.env && config.env.Blob\n });\n } catch (err) {\n throw _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].from(err, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].ERR_BAD_REQUEST, config);\n }\n\n if (responseType === 'text') {\n convertedData = convertedData.toString(responseEncoding);\n\n if (!responseEncoding || responseEncoding === 'utf8') {\n convertedData = _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].stripBOM(convertedData);\n }\n } else if (responseType === 'stream') {\n convertedData = stream__WEBPACK_IMPORTED_MODULE_6__.Readable.from(convertedData);\n }\n\n return (0,_core_settle_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(resolve, reject, {\n data: convertedData,\n status: 200,\n statusText: 'OK',\n headers: new _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"](),\n config\n });\n }\n\n if (supportedProtocols.indexOf(protocol) === -1) {\n return reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"](\n 'Unsupported protocol ' + protocol,\n _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].ERR_BAD_REQUEST,\n config\n ));\n }\n\n const headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"].from(config.headers).normalize();\n\n // Set User-Agent (required by some servers)\n // See https://github.com/axios/axios/issues/69\n // User-Agent is specified; handle case where no UA header is desired\n // Only set header if it hasn't been set in config\n headers.set('User-Agent', 'axios/' + _env_data_js__WEBPACK_IMPORTED_MODULE_17__.VERSION, false);\n\n const {onUploadProgress, onDownloadProgress} = config;\n const maxRate = config.maxRate;\n let maxUploadRate = undefined;\n let maxDownloadRate = undefined;\n\n // support for spec compliant FormData objects\n if (_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isSpecCompliantForm(data)) {\n const userBoundary = headers.getContentType(/boundary=([-_\\w\\d]{10,70})/i);\n\n data = (0,_helpers_formDataToStream_js__WEBPACK_IMPORTED_MODULE_18__[\"default\"])(data, (formHeaders) => {\n headers.set(formHeaders);\n }, {\n tag: `axios-${_env_data_js__WEBPACK_IMPORTED_MODULE_17__.VERSION}-boundary`,\n boundary: userBoundary && userBoundary[1] || undefined\n });\n // support for https://www.npmjs.com/package/form-data api\n } else if (_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isFormData(data) && _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isFunction(data.getHeaders)) {\n headers.set(data.getHeaders());\n\n if (!headers.hasContentLength()) {\n try {\n const knownLength = await util__WEBPACK_IMPORTED_MODULE_3__.promisify(data.getLength).call(data);\n Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);\n /*eslint no-empty:0*/\n } catch (e) {\n }\n }\n } else if (_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isBlob(data) || _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isFile(data)) {\n data.size && headers.setContentType(data.type || 'application/octet-stream');\n headers.setContentLength(data.size || 0);\n data = stream__WEBPACK_IMPORTED_MODULE_6__.Readable.from((0,_helpers_readBlob_js__WEBPACK_IMPORTED_MODULE_19__[\"default\"])(data));\n } else if (data && !_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isStream(data)) {\n if (Buffer.isBuffer(data)) {\n // Nothing to do...\n } else if (_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isArrayBuffer(data)) {\n data = Buffer.from(new Uint8Array(data));\n } else if (_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isString(data)) {\n data = Buffer.from(data, 'utf-8');\n } else {\n return reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"](\n 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].ERR_BAD_REQUEST,\n config\n ));\n }\n\n // Add Content-Length header if data exists\n headers.setContentLength(data.length, false);\n\n if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {\n return reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"](\n 'Request body larger than maxBodyLength limit',\n _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].ERR_BAD_REQUEST,\n config\n ));\n }\n }\n\n const contentLength = _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].toFiniteNumber(headers.getContentLength());\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isArray(maxRate)) {\n maxUploadRate = maxRate[0];\n maxDownloadRate = maxRate[1];\n } else {\n maxUploadRate = maxDownloadRate = maxRate;\n }\n\n if (data && (onUploadProgress || maxUploadRate)) {\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isStream(data)) {\n data = stream__WEBPACK_IMPORTED_MODULE_6__.Readable.from(data, {objectMode: false});\n }\n\n data = stream__WEBPACK_IMPORTED_MODULE_6__.pipeline([data, new _helpers_AxiosTransformStream_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"]({\n maxRate: _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].toFiniteNumber(maxUploadRate)\n })], _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].noop);\n\n onUploadProgress && data.on('progress', flushOnFinish(\n data,\n (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_21__.progressEventDecorator)(\n contentLength,\n (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_21__.progressEventReducer)((0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_21__.asyncDecorator)(onUploadProgress), false, 3)\n )\n ));\n }\n\n // HTTP basic authentication\n let auth = undefined;\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password || '';\n auth = username + ':' + password;\n }\n\n if (!auth && parsed.username) {\n const urlUsername = parsed.username;\n const urlPassword = parsed.password;\n auth = urlUsername + ':' + urlPassword;\n }\n\n auth && headers.delete('authorization');\n\n let path;\n\n try {\n path = (0,_helpers_buildURL_js__WEBPACK_IMPORTED_MODULE_22__[\"default\"])(\n parsed.pathname + parsed.search,\n config.params,\n config.paramsSerializer\n ).replace(/^\\?/, '');\n } catch (err) {\n const customErr = new Error(err.message);\n customErr.config = config;\n customErr.url = config.url;\n customErr.exists = true;\n return reject(customErr);\n }\n\n headers.set(\n 'Accept-Encoding',\n 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false\n );\n\n const options = {\n path,\n method: method,\n headers: headers.toJSON(),\n agents: { http: config.httpAgent, https: config.httpsAgent },\n auth,\n protocol,\n family,\n beforeRedirect: dispatchBeforeRedirect,\n beforeRedirects: {}\n };\n\n // cacheable-lookup integration hotfix\n !_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isUndefined(lookup) && (options.lookup = lookup);\n\n if (config.socketPath) {\n options.socketPath = config.socketPath;\n } else {\n options.hostname = parsed.hostname.startsWith(\"[\") ? parsed.hostname.slice(1, -1) : parsed.hostname;\n options.port = parsed.port;\n setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);\n }\n\n let transport;\n const isHttpsRequest = isHttps.test(options.protocol);\n options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n if (config.transport) {\n transport = config.transport;\n } else if (config.maxRedirects === 0) {\n transport = isHttpsRequest ? https__WEBPACK_IMPORTED_MODULE_2__ : http__WEBPACK_IMPORTED_MODULE_1__;\n } else {\n if (config.maxRedirects) {\n options.maxRedirects = config.maxRedirects;\n }\n if (config.beforeRedirect) {\n options.beforeRedirects.config = config.beforeRedirect;\n }\n transport = isHttpsRequest ? httpsFollow : httpFollow;\n }\n\n if (config.maxBodyLength > -1) {\n options.maxBodyLength = config.maxBodyLength;\n } else {\n // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited\n options.maxBodyLength = Infinity;\n }\n\n if (config.insecureHTTPParser) {\n options.insecureHTTPParser = config.insecureHTTPParser;\n }\n\n // Create the request\n req = transport.request(options, function handleResponse(res) {\n if (req.destroyed) return;\n\n const streams = [res];\n\n const responseLength = +res.headers['content-length'];\n\n if (onDownloadProgress || maxDownloadRate) {\n const transformStream = new _helpers_AxiosTransformStream_js__WEBPACK_IMPORTED_MODULE_20__[\"default\"]({\n maxRate: _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].toFiniteNumber(maxDownloadRate)\n });\n\n onDownloadProgress && transformStream.on('progress', flushOnFinish(\n transformStream,\n (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_21__.progressEventDecorator)(\n responseLength,\n (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_21__.progressEventReducer)((0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_21__.asyncDecorator)(onDownloadProgress), true, 3)\n )\n ));\n\n streams.push(transformStream);\n }\n\n // decompress the response body transparently if required\n let responseStream = res;\n\n // return the last request in case of redirects\n const lastRequest = res.req || req;\n\n // if decompress disabled we should not decompress\n if (config.decompress !== false && res.headers['content-encoding']) {\n // if no content, but headers still say that it is encoded,\n // remove the header not confuse downstream operations\n if (method === 'HEAD' || res.statusCode === 204) {\n delete res.headers['content-encoding'];\n }\n\n switch ((res.headers['content-encoding'] || '').toLowerCase()) {\n /*eslint default-case:0*/\n case 'gzip':\n case 'x-gzip':\n case 'compress':\n case 'x-compress':\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib__WEBPACK_IMPORTED_MODULE_5__.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'deflate':\n streams.push(new _helpers_ZlibHeaderTransformStream_js__WEBPACK_IMPORTED_MODULE_23__[\"default\"]());\n\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib__WEBPACK_IMPORTED_MODULE_5__.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'br':\n if (isBrotliSupported) {\n streams.push(zlib__WEBPACK_IMPORTED_MODULE_5__.createBrotliDecompress(brotliOptions));\n delete res.headers['content-encoding'];\n }\n }\n }\n\n responseStream = streams.length > 1 ? stream__WEBPACK_IMPORTED_MODULE_6__.pipeline(streams, _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].noop) : streams[0];\n\n const offListeners = stream__WEBPACK_IMPORTED_MODULE_6__.finished(responseStream, () => {\n offListeners();\n onFinished();\n });\n\n const response = {\n status: res.statusCode,\n statusText: res.statusMessage,\n headers: new _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"](res.headers),\n config,\n request: lastRequest\n };\n\n if (responseType === 'stream') {\n response.data = responseStream;\n (0,_core_settle_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(resolve, reject, response);\n } else {\n const responseBuffer = [];\n let totalResponseBytes = 0;\n\n responseStream.on('data', function handleStreamData(chunk) {\n responseBuffer.push(chunk);\n totalResponseBytes += chunk.length;\n\n // make sure the content length is not over the maxContentLength if specified\n if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n // stream.destroy() emit aborted event before calling reject() on Node.js v16\n rejected = true;\n responseStream.destroy();\n reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"]('maxContentLength size of ' + config.maxContentLength + ' exceeded',\n _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].ERR_BAD_RESPONSE, config, lastRequest));\n }\n });\n\n responseStream.on('aborted', function handlerStreamAborted() {\n if (rejected) {\n return;\n }\n\n const err = new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"](\n 'stream has been aborted',\n _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].ERR_BAD_RESPONSE,\n config,\n lastRequest\n );\n responseStream.destroy(err);\n reject(err);\n });\n\n responseStream.on('error', function handleStreamError(err) {\n if (req.destroyed) return;\n reject(_core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].from(err, null, config, lastRequest));\n });\n\n responseStream.on('end', function handleStreamEnd() {\n try {\n let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);\n if (responseType !== 'arraybuffer') {\n responseData = responseData.toString(responseEncoding);\n if (!responseEncoding || responseEncoding === 'utf8') {\n responseData = _utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].stripBOM(responseData);\n }\n }\n response.data = responseData;\n } catch (err) {\n return reject(_core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].from(err, null, config, response.request, response));\n }\n (0,_core_settle_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(resolve, reject, response);\n });\n }\n\n emitter.once('abort', err => {\n if (!responseStream.destroyed) {\n responseStream.emit('error', err);\n responseStream.destroy();\n }\n });\n });\n\n emitter.once('abort', err => {\n reject(err);\n req.destroy(err);\n });\n\n // Handle errors\n req.on('error', function handleRequestError(err) {\n // @todo remove\n // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return;\n reject(_core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].from(err, null, config, req));\n });\n\n // set tcp keep alive to prevent drop connection by peer\n req.on('socket', function handleRequestSocket(socket) {\n // default interval of sending ack packet is 1 minute\n socket.setKeepAlive(true, 1000 * 60);\n });\n\n // Handle request timeout\n if (config.timeout) {\n // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n const timeout = parseInt(config.timeout, 10);\n\n if (Number.isNaN(timeout)) {\n reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"](\n 'error trying to parse `config.timeout` to int',\n _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].ERR_BAD_OPTION_VALUE,\n config,\n req\n ));\n\n return;\n }\n\n // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n // And then these socket which be hang up will devouring CPU little by little.\n // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n req.setTimeout(timeout, function handleRequestTimeout() {\n if (isDone) return;\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_24__[\"default\"];\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"](\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].ETIMEDOUT : _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].ECONNABORTED,\n config,\n req\n ));\n abort();\n });\n }\n\n\n // Send the request\n if (_utils_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].isStream(data)) {\n let ended = false;\n let errored = false;\n\n data.on('end', () => {\n ended = true;\n });\n\n data.once('error', err => {\n errored = true;\n req.destroy(err);\n });\n\n data.on('close', () => {\n if (!ended && !errored) {\n abort(new _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]('Request stream has been aborted', config, req));\n }\n });\n\n data.pipe(req);\n } else {\n req.end(data);\n }\n });\n});\n\nconst __setProxy = setProxy;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2h0dHAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWE7O0FBRXFCO0FBQ087QUFDWTtBQUNMO0FBQ047QUFDbEI7QUFDRTtBQUNGO0FBQ3VCO0FBQ3ZCO0FBQ2U7QUFDd0I7QUFDaEI7QUFDUTtBQUNYO0FBQ1E7QUFDeEI7QUFDdUI7QUFDbUI7QUFDbEM7QUFDMEI7QUFDaEI7QUFDa0M7QUFDNUI7QUFDNEQ7O0FBRWhIO0FBQ0EsU0FBUywyQ0FBYztBQUN2QixlQUFlLDJDQUFjO0FBQzdCOztBQUVBO0FBQ0EsU0FBUywyQ0FBYztBQUN2QixlQUFlLDJDQUFjO0FBQzdCOztBQUVBLDBCQUEwQixpREFBSyxZQUFZLHdEQUEyQjs7QUFFdEUsT0FBTyxzQ0FBc0MsRUFBRSw2Q0FBZTs7QUFFOUQ7O0FBRUEsMkJBQTJCLDBEQUFRO0FBQ25DO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiwwREFBMkI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsZUFBZTtBQUMzRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBaUUsaURBQUs7O0FBRXRFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsd0JBQXdCLGdCQUFnQjtBQUN4QyxPQUFPLGlEQUFLO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSw2REFBNkQsaURBQUssZ0NBQWdDLGdCQUFnQjs7QUFFbEg7QUFDQSxpRUFBZTtBQUNmO0FBQ0EsU0FBUyxzQkFBc0I7QUFDL0IsV0FBVyxnQ0FBZ0M7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0Isb0VBQVcsb0JBQW9CLGlEQUFLO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsaURBQUs7O0FBRWpDO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsZ0RBQVk7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSx5REFBeUQsaUVBQWE7QUFDdEU7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLG1FQUFhO0FBQ2xDLHFDQUFxQywwREFBUSxpQkFBaUIsMERBQVE7QUFDdEU7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGVBQWUsNERBQU07QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBLHdCQUF3QixvRUFBVztBQUNuQztBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1IsY0FBYyw0REFBVSxXQUFXLDREQUFVO0FBQzdDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEIsaURBQUs7QUFDL0I7QUFDQSxRQUFRO0FBQ1Isd0JBQXdCLDRDQUFlO0FBQ3ZDOztBQUVBLGFBQWEsNERBQU07QUFDbkI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDhEQUFZO0FBQ2pDO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0Esd0JBQXdCLDREQUFVO0FBQ2xDO0FBQ0EsUUFBUSw0REFBVTtBQUNsQjtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDhEQUFZOztBQUVoQztBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0EseUNBQXlDLGtEQUFPOztBQUVoRCxXQUFXLHNDQUFzQztBQUNqRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLGlEQUFLO0FBQ2Isc0VBQXNFLE1BQU07O0FBRTVFLGFBQWEseUVBQWdCO0FBQzdCO0FBQ0EsT0FBTztBQUNQLHNCQUFzQixrREFBTyxDQUFDO0FBQzlCO0FBQ0EsT0FBTztBQUNQO0FBQ0EsTUFBTSxTQUFTLGlEQUFLLHFCQUFxQixpREFBSztBQUM5Qzs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DLDJDQUFjO0FBQ2xEO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE1BQU0sU0FBUyxpREFBSyxpQkFBaUIsaURBQUs7QUFDMUM7QUFDQTtBQUNBLGFBQWEsNENBQWUsTUFBTSxpRUFBUTtBQUMxQyxNQUFNLGtCQUFrQixpREFBSztBQUM3QjtBQUNBO0FBQ0EsUUFBUSxTQUFTLGlEQUFLO0FBQ3RCO0FBQ0EsUUFBUSxTQUFTLGlEQUFLO0FBQ3RCO0FBQ0EsUUFBUTtBQUNSLDBCQUEwQiw0REFBVTtBQUNwQztBQUNBLFVBQVUsNERBQVU7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEIsNERBQVU7QUFDcEM7QUFDQSxVQUFVLDREQUFVO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQixpREFBSzs7QUFFL0IsUUFBUSxpREFBSztBQUNiO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBLFdBQVcsaURBQUs7QUFDaEIsZUFBZSw0Q0FBZSxhQUFhLGtCQUFrQjtBQUM3RDs7QUFFQSxhQUFhLDRDQUFlLFlBQVkseUVBQW9CO0FBQzVELGlCQUFpQixpREFBSztBQUN0QixPQUFPLElBQUksaURBQUs7O0FBRWhCO0FBQ0E7QUFDQSxRQUFRLHlGQUFzQjtBQUM5QjtBQUNBLFVBQVUsdUZBQW9CLENBQUMsaUZBQWM7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxhQUFhLGlFQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrREFBa0Q7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSyxpREFBSzs7QUFFVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sbUNBQW1DLGtDQUFLLEdBQUcsaUNBQUk7QUFDL0MsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLG9DQUFvQyx5RUFBb0I7QUFDeEQsbUJBQW1CLGlEQUFLO0FBQ3hCLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLFVBQVUseUZBQXNCO0FBQ2hDO0FBQ0EsWUFBWSx1RkFBb0IsQ0FBQyxpRkFBYztBQUMvQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDZDQUFnQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsOEVBQXlCOztBQUVwRDtBQUNBLHVCQUF1Qiw2Q0FBZ0I7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsd0RBQTJCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRDQUE0Qyw0Q0FBZSxVQUFVLGlEQUFLOztBQUUxRSwyQkFBMkIsNENBQWU7QUFDMUM7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDhEQUFZO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSw0REFBTTtBQUNkLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDREQUFVO0FBQ2pDLGNBQWMsNERBQVU7QUFDeEI7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQiw0REFBVTtBQUNwQztBQUNBLFlBQVksNERBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLGlCQUFpQiw0REFBVTtBQUMzQixTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixpREFBSztBQUNwQztBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osMEJBQTBCLDREQUFVO0FBQ3BDO0FBQ0EsVUFBVSw0REFBTTtBQUNoQixTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDREQUFVO0FBQ3ZCLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLDREQUFVO0FBQzdCO0FBQ0EsVUFBVSw0REFBVTtBQUNwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELGtFQUFvQjtBQUN4RTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsNERBQVU7QUFDN0I7QUFDQSw2Q0FBNkMsNERBQVUsYUFBYSw0REFBVTtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7O0FBR0E7QUFDQSxRQUFRLGlEQUFLO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxvQkFBb0IsaUVBQWE7QUFDakM7QUFDQSxPQUFPOztBQUVQO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFTSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2h0dHAuanM/YWRmYiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBzZXR0bGUgZnJvbSAnLi8uLi9jb3JlL3NldHRsZS5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuLi9jb3JlL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4vLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgcHJveHlGcm9tRW52IGZyb20gJ3Byb3h5LWZyb20tZW52JztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJztcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnO1xuaW1wb3J0IGZvbGxvd1JlZGlyZWN0cyBmcm9tICdmb2xsb3ctcmVkaXJlY3RzJztcbmltcG9ydCB6bGliIGZyb20gJ3psaWInO1xuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZyb21EYXRhVVJJIGZyb20gJy4uL2hlbHBlcnMvZnJvbURhdGFVUkkuanMnO1xuaW1wb3J0IHN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgQXhpb3NUcmFuc2Zvcm1TdHJlYW0gZnJvbSAnLi4vaGVscGVycy9BeGlvc1RyYW5zZm9ybVN0cmVhbS5qcyc7XG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCBmb3JtRGF0YVRvU3RyZWFtIGZyb20gXCIuLi9oZWxwZXJzL2Zvcm1EYXRhVG9TdHJlYW0uanNcIjtcbmltcG9ydCByZWFkQmxvYiBmcm9tIFwiLi4vaGVscGVycy9yZWFkQmxvYi5qc1wiO1xuaW1wb3J0IFpsaWJIZWFkZXJUcmFuc2Zvcm1TdHJlYW0gZnJvbSAnLi4vaGVscGVycy9abGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtLmpzJztcbmltcG9ydCBjYWxsYmFja2lmeSBmcm9tIFwiLi4vaGVscGVycy9jYWxsYmFja2lmeS5qc1wiO1xuaW1wb3J0IHtwcm9ncmVzc0V2ZW50UmVkdWNlciwgcHJvZ3Jlc3NFdmVudERlY29yYXRvciwgYXN5bmNEZWNvcmF0b3J9IGZyb20gXCIuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzXCI7XG5cbmNvbnN0IHpsaWJPcHRpb25zID0ge1xuICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICBmaW5pc2hGbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNIXG59O1xuXG5jb25zdCBicm90bGlPcHRpb25zID0ge1xuICBmbHVzaDogemxpYi5jb25zdGFudHMuQlJPVExJX09QRVJBVElPTl9GTFVTSCxcbiAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLkJST1RMSV9PUEVSQVRJT05fRkxVU0hcbn1cblxuY29uc3QgaXNCcm90bGlTdXBwb3J0ZWQgPSB1dGlscy5pc0Z1bmN0aW9uKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcyk7XG5cbmNvbnN0IHtodHRwOiBodHRwRm9sbG93LCBodHRwczogaHR0cHNGb2xsb3d9ID0gZm9sbG93UmVkaXJlY3RzO1xuXG5jb25zdCBpc0h0dHBzID0gL2h0dHBzOj8vO1xuXG5jb25zdCBzdXBwb3J0ZWRQcm90b2NvbHMgPSBwbGF0Zm9ybS5wcm90b2NvbHMubWFwKHByb3RvY29sID0+IHtcbiAgcmV0dXJuIHByb3RvY29sICsgJzonO1xufSk7XG5cbmNvbnN0IGZsdXNoT25GaW5pc2ggPSAoc3RyZWFtLCBbdGhyb3R0bGVkLCBmbHVzaF0pID0+IHtcbiAgc3RyZWFtXG4gICAgLm9uKCdlbmQnLCBmbHVzaClcbiAgICAub24oJ2Vycm9yJywgZmx1c2gpO1xuXG4gIHJldHVybiB0aHJvdHRsZWQ7XG59XG5cbi8qKlxuICogSWYgdGhlIHByb3h5IG9yIGNvbmZpZyBiZWZvcmVSZWRpcmVjdHMgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLCBjYWxsIHRoZW0gd2l0aCB0aGUgb3B0aW9uc1xuICogb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT59XG4gKi9cbmZ1bmN0aW9uIGRpc3BhdGNoQmVmb3JlUmVkaXJlY3Qob3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzKSB7XG4gIGlmIChvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5wcm94eSkge1xuICAgIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3RzLnByb3h5KG9wdGlvbnMpO1xuICB9XG4gIGlmIChvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcpIHtcbiAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcob3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzKTtcbiAgfVxufVxuXG4vKipcbiAqIElmIHRoZSBwcm94eSBvciBjb25maWcgYWZ0ZXJSZWRpcmVjdHMgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLCBjYWxsIHRoZW0gd2l0aCB0aGUgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc30gb3B0aW9uc1xuICogQHBhcmFtIHtBeGlvc1Byb3h5Q29uZmlnfSBjb25maWdQcm94eSBjb25maWd1cmF0aW9uIGZyb20gQXhpb3Mgb3B0aW9ucyBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvblxuICpcbiAqIEByZXR1cm5zIHtodHRwLkNsaWVudFJlcXVlc3RBcmdzfVxuICovXG5mdW5jdGlvbiBzZXRQcm94eShvcHRpb25zLCBjb25maWdQcm94eSwgbG9jYXRpb24pIHtcbiAgbGV0IHByb3h5ID0gY29uZmlnUHJveHk7XG4gIGlmICghcHJveHkgJiYgcHJveHkgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgcHJveHlVcmwgPSBwcm94eUZyb21FbnYuZ2V0UHJveHlGb3JVcmwobG9jYXRpb24pO1xuICAgIGlmIChwcm94eVVybCkge1xuICAgICAgcHJveHkgPSBuZXcgVVJMKHByb3h5VXJsKTtcbiAgICB9XG4gIH1cbiAgaWYgKHByb3h5KSB7XG4gICAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICAgIGlmIChwcm94eS51c2VybmFtZSkge1xuICAgICAgcHJveHkuYXV0aCA9IChwcm94eS51c2VybmFtZSB8fCAnJykgKyAnOicgKyAocHJveHkucGFzc3dvcmQgfHwgJycpO1xuICAgIH1cblxuICAgIGlmIChwcm94eS5hdXRoKSB7XG4gICAgICAvLyBTdXBwb3J0IHByb3h5IGF1dGggb2JqZWN0IGZvcm1cbiAgICAgIGlmIChwcm94eS5hdXRoLnVzZXJuYW1lIHx8IHByb3h5LmF1dGgucGFzc3dvcmQpIHtcbiAgICAgICAgcHJveHkuYXV0aCA9IChwcm94eS5hdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChwcm94eS5hdXRoLnBhc3N3b3JkIHx8ICcnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhc2U2NCA9IEJ1ZmZlclxuICAgICAgICAuZnJvbShwcm94eS5hdXRoLCAndXRmOCcpXG4gICAgICAgIC50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICBvcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICsgYmFzZTY0O1xuICAgIH1cblxuICAgIG9wdGlvbnMuaGVhZGVycy5ob3N0ID0gb3B0aW9ucy5ob3N0bmFtZSArIChvcHRpb25zLnBvcnQgPyAnOicgKyBvcHRpb25zLnBvcnQgOiAnJyk7XG4gICAgY29uc3QgcHJveHlIb3N0ID0gcHJveHkuaG9zdG5hbWUgfHwgcHJveHkuaG9zdDtcbiAgICBvcHRpb25zLmhvc3RuYW1lID0gcHJveHlIb3N0O1xuICAgIC8vIFJlcGxhY2UgJ2hvc3QnIHNpbmNlIG9wdGlvbnMgaXMgbm90IGEgVVJMIG9iamVjdFxuICAgIG9wdGlvbnMuaG9zdCA9IHByb3h5SG9zdDtcbiAgICBvcHRpb25zLnBvcnQgPSBwcm94eS5wb3J0O1xuICAgIG9wdGlvbnMucGF0aCA9IGxvY2F0aW9uO1xuICAgIGlmIChwcm94eS5wcm90b2NvbCkge1xuICAgICAgb3B0aW9ucy5wcm90b2NvbCA9IHByb3h5LnByb3RvY29sLmluY2x1ZGVzKCc6JykgPyBwcm94eS5wcm90b2NvbCA6IGAke3Byb3h5LnByb3RvY29sfTpgO1xuICAgIH1cbiAgfVxuXG4gIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3RzLnByb3h5ID0gZnVuY3Rpb24gYmVmb3JlUmVkaXJlY3QocmVkaXJlY3RPcHRpb25zKSB7XG4gICAgLy8gQ29uZmlndXJlIHByb3h5IGZvciByZWRpcmVjdGVkIHJlcXVlc3QsIHBhc3NpbmcgdGhlIG9yaWdpbmFsIGNvbmZpZyBwcm94eSB0byBhcHBseVxuICAgIC8vIHRoZSBleGFjdCBzYW1lIGxvZ2ljIGFzIGlmIHRoZSByZWRpcmVjdGVkIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZCBieSBheGlvcyBkaXJlY3RseS5cbiAgICBzZXRQcm94eShyZWRpcmVjdE9wdGlvbnMsIGNvbmZpZ1Byb3h5LCByZWRpcmVjdE9wdGlvbnMuaHJlZik7XG4gIH07XG59XG5cbmNvbnN0IGlzSHR0cEFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdXRpbHMua2luZE9mKHByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG5cbi8vIHRlbXBvcmFyeSBob3RmaXhcblxuY29uc3Qgd3JhcEFzeW5jID0gKGFzeW5jRXhlY3V0b3IpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgb25Eb25lO1xuICAgIGxldCBpc0RvbmU7XG5cbiAgICBjb25zdCBkb25lID0gKHZhbHVlLCBpc1JlamVjdGVkKSA9PiB7XG4gICAgICBpZiAoaXNEb25lKSByZXR1cm47XG4gICAgICBpc0RvbmUgPSB0cnVlO1xuICAgICAgb25Eb25lICYmIG9uRG9uZSh2YWx1ZSwgaXNSZWplY3RlZCk7XG4gICAgfVxuXG4gICAgY29uc3QgX3Jlc29sdmUgPSAodmFsdWUpID0+IHtcbiAgICAgIGRvbmUodmFsdWUpO1xuICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IF9yZWplY3QgPSAocmVhc29uKSA9PiB7XG4gICAgICBkb25lKHJlYXNvbiwgdHJ1ZSk7XG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9XG5cbiAgICBhc3luY0V4ZWN1dG9yKF9yZXNvbHZlLCBfcmVqZWN0LCAob25Eb25lSGFuZGxlcikgPT4gKG9uRG9uZSA9IG9uRG9uZUhhbmRsZXIpKS5jYXRjaChfcmVqZWN0KTtcbiAgfSlcbn07XG5cbmNvbnN0IHJlc29sdmVGYW1pbHkgPSAoe2FkZHJlc3MsIGZhbWlseX0pID0+IHtcbiAgaWYgKCF1dGlscy5pc1N0cmluZyhhZGRyZXNzKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignYWRkcmVzcyBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cbiAgcmV0dXJuICh7XG4gICAgYWRkcmVzcyxcbiAgICBmYW1pbHk6IGZhbWlseSB8fCAoYWRkcmVzcy5pbmRleE9mKCcuJykgPCAwID8gNiA6IDQpXG4gIH0pO1xufVxuXG5jb25zdCBidWlsZEFkZHJlc3NFbnRyeSA9IChhZGRyZXNzLCBmYW1pbHkpID0+IHJlc29sdmVGYW1pbHkodXRpbHMuaXNPYmplY3QoYWRkcmVzcykgPyBhZGRyZXNzIDoge2FkZHJlc3MsIGZhbWlseX0pO1xuXG4vKmVzbGludCBjb25zaXN0ZW50LXJldHVybjowKi9cbmV4cG9ydCBkZWZhdWx0IGlzSHR0cEFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gaHR0cEFkYXB0ZXIoY29uZmlnKSB7XG4gIHJldHVybiB3cmFwQXN5bmMoYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2hIdHRwUmVxdWVzdChyZXNvbHZlLCByZWplY3QsIG9uRG9uZSkge1xuICAgIGxldCB7ZGF0YSwgbG9va3VwLCBmYW1pbHl9ID0gY29uZmlnO1xuICAgIGNvbnN0IHtyZXNwb25zZVR5cGUsIHJlc3BvbnNlRW5jb2Rpbmd9ID0gY29uZmlnO1xuICAgIGNvbnN0IG1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgICBsZXQgaXNEb25lO1xuICAgIGxldCByZWplY3RlZCA9IGZhbHNlO1xuICAgIGxldCByZXE7XG5cbiAgICBpZiAobG9va3VwKSB7XG4gICAgICBjb25zdCBfbG9va3VwID0gY2FsbGJhY2tpZnkobG9va3VwLCAodmFsdWUpID0+IHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKTtcbiAgICAgIC8vIGhvdGZpeCB0byBzdXBwb3J0IG9wdC5hbGwgb3B0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBub2RlIDIwLnhcbiAgICAgIGxvb2t1cCA9IChob3N0bmFtZSwgb3B0LCBjYikgPT4ge1xuICAgICAgICBfbG9va3VwKGhvc3RuYW1lLCBvcHQsIChlcnIsIGFyZzAsIGFyZzEpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhZGRyZXNzZXMgPSB1dGlscy5pc0FycmF5KGFyZzApID8gYXJnMC5tYXAoYWRkciA9PiBidWlsZEFkZHJlc3NFbnRyeShhZGRyKSkgOiBbYnVpbGRBZGRyZXNzRW50cnkoYXJnMCwgYXJnMSldO1xuXG4gICAgICAgICAgb3B0LmFsbCA/IGNiKGVyciwgYWRkcmVzc2VzKSA6IGNiKGVyciwgYWRkcmVzc2VzWzBdLmFkZHJlc3MsIGFkZHJlc3Nlc1swXS5mYW1pbHkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0ZW1wb3JhcnkgaW50ZXJuYWwgZW1pdHRlciB1bnRpbCB0aGUgQXhpb3NSZXF1ZXN0IGNsYXNzIHdpbGwgYmUgaW1wbGVtZW50ZWRcbiAgICBjb25zdCBlbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgY29uc3Qgb25GaW5pc2hlZCA9ICgpID0+IHtcbiAgICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGFib3J0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0KTtcbiAgICAgIH1cblxuICAgICAgZW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICBvbkRvbmUoKHZhbHVlLCBpc1JlamVjdGVkKSA9PiB7XG4gICAgICBpc0RvbmUgPSB0cnVlO1xuICAgICAgaWYgKGlzUmVqZWN0ZWQpIHtcbiAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICBvbkZpbmlzaGVkKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhYm9ydChyZWFzb24pIHtcbiAgICAgIGVtaXR0ZXIuZW1pdCgnYWJvcnQnLCAhcmVhc29uIHx8IHJlYXNvbi50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXEpIDogcmVhc29uKTtcbiAgICB9XG5cbiAgICBlbWl0dGVyLm9uY2UoJ2Fib3J0JywgcmVqZWN0KTtcblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4gfHwgY29uZmlnLnNpZ25hbCkge1xuICAgICAgY29uZmlnLmNhbmNlbFRva2VuICYmIGNvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYWJvcnQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gYWJvcnQoKSA6IGNvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdXJsXG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsLCBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMpO1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwoZnVsbFBhdGgsIHBsYXRmb3JtLmhhc0Jyb3dzZXJFbnYgPyBwbGF0Zm9ybS5vcmlnaW4gOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VkLnByb3RvY29sIHx8IHN1cHBvcnRlZFByb3RvY29sc1swXTtcblxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2RhdGE6Jykge1xuICAgICAgbGV0IGNvbnZlcnRlZERhdGE7XG5cbiAgICAgIGlmIChtZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHJldHVybiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgICAgc3RhdHVzOiA0MDUsXG4gICAgICAgICAgc3RhdHVzVGV4dDogJ21ldGhvZCBub3QgYWxsb3dlZCcsXG4gICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb252ZXJ0ZWREYXRhID0gZnJvbURhdGFVUkkoY29uZmlnLnVybCwgcmVzcG9uc2VUeXBlID09PSAnYmxvYicsIHtcbiAgICAgICAgICBCbG9iOiBjb25maWcuZW52ICYmIGNvbmZpZy5lbnYuQmxvYlxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIGNvbnZlcnRlZERhdGEgPSBjb252ZXJ0ZWREYXRhLnRvU3RyaW5nKHJlc3BvbnNlRW5jb2RpbmcpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2VFbmNvZGluZyB8fCByZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICBjb252ZXJ0ZWREYXRhID0gdXRpbHMuc3RyaXBCT00oY29udmVydGVkRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJykge1xuICAgICAgICBjb252ZXJ0ZWREYXRhID0gc3RyZWFtLlJlYWRhYmxlLmZyb20oY29udmVydGVkRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgIGRhdGE6IGNvbnZlcnRlZERhdGEsXG4gICAgICAgIHN0YXR1czogMjAwLFxuICAgICAgICBzdGF0dXNUZXh0OiAnT0snLFxuICAgICAgICBoZWFkZXJzOiBuZXcgQXhpb3NIZWFkZXJzKCksXG4gICAgICAgIGNvbmZpZ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnRlZFByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wsXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULFxuICAgICAgICBjb25maWdcbiAgICAgICkpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG5cbiAgICAvLyBTZXQgVXNlci1BZ2VudCAocmVxdWlyZWQgYnkgc29tZSBzZXJ2ZXJzKVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgLy8gVXNlci1BZ2VudCBpcyBzcGVjaWZpZWQ7IGhhbmRsZSBjYXNlIHdoZXJlIG5vIFVBIGhlYWRlciBpcyBkZXNpcmVkXG4gICAgLy8gT25seSBzZXQgaGVhZGVyIGlmIGl0IGhhc24ndCBiZWVuIHNldCBpbiBjb25maWdcbiAgICBoZWFkZXJzLnNldCgnVXNlci1BZ2VudCcsICdheGlvcy8nICsgVkVSU0lPTiwgZmFsc2UpO1xuXG4gICAgY29uc3Qge29uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzc30gPSBjb25maWc7XG4gICAgY29uc3QgbWF4UmF0ZSA9IGNvbmZpZy5tYXhSYXRlO1xuICAgIGxldCBtYXhVcGxvYWRSYXRlID0gdW5kZWZpbmVkO1xuICAgIGxldCBtYXhEb3dubG9hZFJhdGUgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBzdXBwb3J0IGZvciBzcGVjIGNvbXBsaWFudCBGb3JtRGF0YSBvYmplY3RzXG4gICAgaWYgKHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZGF0YSkpIHtcbiAgICAgIGNvbnN0IHVzZXJCb3VuZGFyeSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoL2JvdW5kYXJ5PShbLV9cXHdcXGRdezEwLDcwfSkvaSk7XG5cbiAgICAgIGRhdGEgPSBmb3JtRGF0YVRvU3RyZWFtKGRhdGEsIChmb3JtSGVhZGVycykgPT4ge1xuICAgICAgICBoZWFkZXJzLnNldChmb3JtSGVhZGVycyk7XG4gICAgICB9LCB7XG4gICAgICAgIHRhZzogYGF4aW9zLSR7VkVSU0lPTn0tYm91bmRhcnlgLFxuICAgICAgICBib3VuZGFyeTogdXNlckJvdW5kYXJ5ICYmIHVzZXJCb3VuZGFyeVsxXSB8fCB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAgLy8gc3VwcG9ydCBmb3IgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZm9ybS1kYXRhIGFwaVxuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGRhdGEuZ2V0SGVhZGVycykpIHtcbiAgICAgIGhlYWRlcnMuc2V0KGRhdGEuZ2V0SGVhZGVycygpKTtcblxuICAgICAgaWYgKCFoZWFkZXJzLmhhc0NvbnRlbnRMZW5ndGgoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGtub3duTGVuZ3RoID0gYXdhaXQgdXRpbC5wcm9taXNpZnkoZGF0YS5nZXRMZW5ndGgpLmNhbGwoZGF0YSk7XG4gICAgICAgICAgTnVtYmVyLmlzRmluaXRlKGtub3duTGVuZ3RoKSAmJiBrbm93bkxlbmd0aCA+PSAwICYmIGhlYWRlcnMuc2V0Q29udGVudExlbmd0aChrbm93bkxlbmd0aCk7XG4gICAgICAgICAgLyplc2xpbnQgbm8tZW1wdHk6MCovXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNCbG9iKGRhdGEpIHx8IHV0aWxzLmlzRmlsZShkYXRhKSkge1xuICAgICAgZGF0YS5zaXplICYmIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoZGF0YS50eXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudExlbmd0aChkYXRhLnNpemUgfHwgMCk7XG4gICAgICBkYXRhID0gc3RyZWFtLlJlYWRhYmxlLmZyb20ocmVhZEJsb2IoZGF0YSkpO1xuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiAhdXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkby4uLlxuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAndXRmLTgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ0RhdGEgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gbXVzdCBiZSBhIHN0cmluZywgYW4gQXJyYXlCdWZmZXIsIGEgQnVmZmVyLCBvciBhIFN0cmVhbScsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgICkpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgQ29udGVudC1MZW5ndGggaGVhZGVyIGlmIGRhdGEgZXhpc3RzXG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRMZW5ndGgoZGF0YS5sZW5ndGgsIGZhbHNlKTtcblxuICAgICAgaWYgKGNvbmZpZy5tYXhCb2R5TGVuZ3RoID4gLTEgJiYgZGF0YS5sZW5ndGggPiBjb25maWcubWF4Qm9keUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW4gbWF4Qm9keUxlbmd0aCBsaW1pdCcsXG4gICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgICkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihoZWFkZXJzLmdldENvbnRlbnRMZW5ndGgoKSk7XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShtYXhSYXRlKSkge1xuICAgICAgbWF4VXBsb2FkUmF0ZSA9IG1heFJhdGVbMF07XG4gICAgICBtYXhEb3dubG9hZFJhdGUgPSBtYXhSYXRlWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXhVcGxvYWRSYXRlID0gbWF4RG93bmxvYWRSYXRlID0gbWF4UmF0ZTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiAob25VcGxvYWRQcm9ncmVzcyB8fCBtYXhVcGxvYWRSYXRlKSkge1xuICAgICAgaWYgKCF1dGlscy5pc1N0cmVhbShkYXRhKSkge1xuICAgICAgICBkYXRhID0gc3RyZWFtLlJlYWRhYmxlLmZyb20oZGF0YSwge29iamVjdE1vZGU6IGZhbHNlfSk7XG4gICAgICB9XG5cbiAgICAgIGRhdGEgPSBzdHJlYW0ucGlwZWxpbmUoW2RhdGEsIG5ldyBBeGlvc1RyYW5zZm9ybVN0cmVhbSh7XG4gICAgICAgIG1heFJhdGU6IHV0aWxzLnRvRmluaXRlTnVtYmVyKG1heFVwbG9hZFJhdGUpXG4gICAgICB9KV0sIHV0aWxzLm5vb3ApO1xuXG4gICAgICBvblVwbG9hZFByb2dyZXNzICYmIGRhdGEub24oJ3Byb2dyZXNzJywgZmx1c2hPbkZpbmlzaChcbiAgICAgICAgZGF0YSxcbiAgICAgICAgcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpLCBmYWxzZSwgMylcbiAgICAgICAgKVxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGxldCBhdXRoID0gdW5kZWZpbmVkO1xuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgY29uc3QgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgfHwgJyc7XG4gICAgICBhdXRoID0gdXNlcm5hbWUgKyAnOicgKyBwYXNzd29yZDtcbiAgICB9XG5cbiAgICBpZiAoIWF1dGggJiYgcGFyc2VkLnVzZXJuYW1lKSB7XG4gICAgICBjb25zdCB1cmxVc2VybmFtZSA9IHBhcnNlZC51c2VybmFtZTtcbiAgICAgIGNvbnN0IHVybFBhc3N3b3JkID0gcGFyc2VkLnBhc3N3b3JkO1xuICAgICAgYXV0aCA9IHVybFVzZXJuYW1lICsgJzonICsgdXJsUGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgYXV0aCAmJiBoZWFkZXJzLmRlbGV0ZSgnYXV0aG9yaXphdGlvbicpO1xuXG4gICAgbGV0IHBhdGg7XG5cbiAgICB0cnkge1xuICAgICAgcGF0aCA9IGJ1aWxkVVJMKFxuICAgICAgICBwYXJzZWQucGF0aG5hbWUgKyBwYXJzZWQuc2VhcmNoLFxuICAgICAgICBjb25maWcucGFyYW1zLFxuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplclxuICAgICAgKS5yZXBsYWNlKC9eXFw/LywgJycpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgY3VzdG9tRXJyID0gbmV3IEVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgIGN1c3RvbUVyci5jb25maWcgPSBjb25maWc7XG4gICAgICBjdXN0b21FcnIudXJsID0gY29uZmlnLnVybDtcbiAgICAgIGN1c3RvbUVyci5leGlzdHMgPSB0cnVlO1xuICAgICAgcmV0dXJuIHJlamVjdChjdXN0b21FcnIpO1xuICAgIH1cblxuICAgIGhlYWRlcnMuc2V0KFxuICAgICAgJ0FjY2VwdC1FbmNvZGluZycsXG4gICAgICAnZ3ppcCwgY29tcHJlc3MsIGRlZmxhdGUnICsgKGlzQnJvdGxpU3VwcG9ydGVkID8gJywgYnInIDogJycpLCBmYWxzZVxuICAgICAgKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBwYXRoLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLnRvSlNPTigpLFxuICAgICAgYWdlbnRzOiB7IGh0dHA6IGNvbmZpZy5odHRwQWdlbnQsIGh0dHBzOiBjb25maWcuaHR0cHNBZ2VudCB9LFxuICAgICAgYXV0aCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgZmFtaWx5LFxuICAgICAgYmVmb3JlUmVkaXJlY3Q6IGRpc3BhdGNoQmVmb3JlUmVkaXJlY3QsXG4gICAgICBiZWZvcmVSZWRpcmVjdHM6IHt9XG4gICAgfTtcblxuICAgIC8vIGNhY2hlYWJsZS1sb29rdXAgaW50ZWdyYXRpb24gaG90Zml4XG4gICAgIXV0aWxzLmlzVW5kZWZpbmVkKGxvb2t1cCkgJiYgKG9wdGlvbnMubG9va3VwID0gbG9va3VwKTtcblxuICAgIGlmIChjb25maWcuc29ja2V0UGF0aCkge1xuICAgICAgb3B0aW9ucy5zb2NrZXRQYXRoID0gY29uZmlnLnNvY2tldFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwYXJzZWQuaG9zdG5hbWUuc3RhcnRzV2l0aChcIltcIikgPyBwYXJzZWQuaG9zdG5hbWUuc2xpY2UoMSwgLTEpIDogcGFyc2VkLmhvc3RuYW1lO1xuICAgICAgb3B0aW9ucy5wb3J0ID0gcGFyc2VkLnBvcnQ7XG4gICAgICBzZXRQcm94eShvcHRpb25zLCBjb25maWcucHJveHksIHByb3RvY29sICsgJy8vJyArIHBhcnNlZC5ob3N0bmFtZSArIChwYXJzZWQucG9ydCA/ICc6JyArIHBhcnNlZC5wb3J0IDogJycpICsgb3B0aW9ucy5wYXRoKTtcbiAgICB9XG5cbiAgICBsZXQgdHJhbnNwb3J0O1xuICAgIGNvbnN0IGlzSHR0cHNSZXF1ZXN0ID0gaXNIdHRwcy50ZXN0KG9wdGlvbnMucHJvdG9jb2wpO1xuICAgIG9wdGlvbnMuYWdlbnQgPSBpc0h0dHBzUmVxdWVzdCA/IGNvbmZpZy5odHRwc0FnZW50IDogY29uZmlnLmh0dHBBZ2VudDtcbiAgICBpZiAoY29uZmlnLnRyYW5zcG9ydCkge1xuICAgICAgdHJhbnNwb3J0ID0gY29uZmlnLnRyYW5zcG9ydDtcbiAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMgPT09IDApIHtcbiAgICAgIHRyYW5zcG9ydCA9IGlzSHR0cHNSZXF1ZXN0ID8gaHR0cHMgOiBodHRwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29uZmlnLm1heFJlZGlyZWN0cykge1xuICAgICAgICBvcHRpb25zLm1heFJlZGlyZWN0cyA9IGNvbmZpZy5tYXhSZWRpcmVjdHM7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLmJlZm9yZVJlZGlyZWN0KSB7XG4gICAgICAgIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3RzLmNvbmZpZyA9IGNvbmZpZy5iZWZvcmVSZWRpcmVjdDtcbiAgICAgIH1cbiAgICAgIHRyYW5zcG9ydCA9IGlzSHR0cHNSZXF1ZXN0ID8gaHR0cHNGb2xsb3cgOiBodHRwRm9sbG93O1xuICAgIH1cblxuICAgIGlmIChjb25maWcubWF4Qm9keUxlbmd0aCA+IC0xKSB7XG4gICAgICBvcHRpb25zLm1heEJvZHlMZW5ndGggPSBjb25maWcubWF4Qm9keUxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9sbG93LXJlZGlyZWN0cyBkb2VzIG5vdCBza2lwIGNvbXBhcmlzb24sIHNvIGl0IHNob3VsZCBhbHdheXMgc3VjY2VlZCBmb3IgYXhpb3MgLTEgdW5saW1pdGVkXG4gICAgICBvcHRpb25zLm1heEJvZHlMZW5ndGggPSBJbmZpbml0eTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmluc2VjdXJlSFRUUFBhcnNlcikge1xuICAgICAgb3B0aW9ucy5pbnNlY3VyZUhUVFBQYXJzZXIgPSBjb25maWcuaW5zZWN1cmVIVFRQUGFyc2VyO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgcmVxdWVzdFxuICAgIHJlcSA9IHRyYW5zcG9ydC5yZXF1ZXN0KG9wdGlvbnMsIGZ1bmN0aW9uIGhhbmRsZVJlc3BvbnNlKHJlcykge1xuICAgICAgaWYgKHJlcS5kZXN0cm95ZWQpIHJldHVybjtcblxuICAgICAgY29uc3Qgc3RyZWFtcyA9IFtyZXNdO1xuXG4gICAgICBjb25zdCByZXNwb25zZUxlbmd0aCA9ICtyZXMuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXTtcblxuICAgICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCBtYXhEb3dubG9hZFJhdGUpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtU3RyZWFtID0gbmV3IEF4aW9zVHJhbnNmb3JtU3RyZWFtKHtcbiAgICAgICAgICBtYXhSYXRlOiB1dGlscy50b0Zpbml0ZU51bWJlcihtYXhEb3dubG9hZFJhdGUpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9uRG93bmxvYWRQcm9ncmVzcyAmJiB0cmFuc2Zvcm1TdHJlYW0ub24oJ3Byb2dyZXNzJywgZmx1c2hPbkZpbmlzaChcbiAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0sXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICAgIHJlc3BvbnNlTGVuZ3RoLFxuICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSwgMylcbiAgICAgICAgICApXG4gICAgICAgICkpO1xuXG4gICAgICAgIHN0cmVhbXMucHVzaCh0cmFuc2Zvcm1TdHJlYW0pO1xuICAgICAgfVxuXG4gICAgICAvLyBkZWNvbXByZXNzIHRoZSByZXNwb25zZSBib2R5IHRyYW5zcGFyZW50bHkgaWYgcmVxdWlyZWRcbiAgICAgIGxldCByZXNwb25zZVN0cmVhbSA9IHJlcztcblxuICAgICAgLy8gcmV0dXJuIHRoZSBsYXN0IHJlcXVlc3QgaW4gY2FzZSBvZiByZWRpcmVjdHNcbiAgICAgIGNvbnN0IGxhc3RSZXF1ZXN0ID0gcmVzLnJlcSB8fCByZXE7XG5cbiAgICAgIC8vIGlmIGRlY29tcHJlc3MgZGlzYWJsZWQgd2Ugc2hvdWxkIG5vdCBkZWNvbXByZXNzXG4gICAgICBpZiAoY29uZmlnLmRlY29tcHJlc3MgIT09IGZhbHNlICYmIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10pIHtcbiAgICAgICAgLy8gaWYgbm8gY29udGVudCwgYnV0IGhlYWRlcnMgc3RpbGwgc2F5IHRoYXQgaXQgaXMgZW5jb2RlZCxcbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBoZWFkZXIgbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgIGlmIChtZXRob2QgPT09ICdIRUFEJyB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMjA0KSB7XG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKChyZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddIHx8ICcnKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIC8qZXNsaW50IGRlZmF1bHQtY2FzZTowKi9cbiAgICAgICAgY2FzZSAnZ3ppcCc6XG4gICAgICAgIGNhc2UgJ3gtZ3ppcCc6XG4gICAgICAgIGNhc2UgJ2NvbXByZXNzJzpcbiAgICAgICAgY2FzZSAneC1jb21wcmVzcyc6XG4gICAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbXMucHVzaCh6bGliLmNyZWF0ZVVuemlwKHpsaWJPcHRpb25zKSk7XG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RlZmxhdGUnOlxuICAgICAgICAgIHN0cmVhbXMucHVzaChuZXcgWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbSgpKTtcblxuICAgICAgICAgIC8vIGFkZCB0aGUgdW56aXBwZXIgdG8gdGhlIGJvZHkgc3RyZWFtIHByb2Nlc3NpbmcgcGlwZWxpbmVcbiAgICAgICAgICBzdHJlYW1zLnB1c2goemxpYi5jcmVhdGVVbnppcCh6bGliT3B0aW9ucykpO1xuXG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBjb250ZW50LWVuY29kaW5nIGluIG9yZGVyIHRvIG5vdCBjb25mdXNlIGRvd25zdHJlYW0gb3BlcmF0aW9uc1xuICAgICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdicic6XG4gICAgICAgICAgaWYgKGlzQnJvdGxpU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICBzdHJlYW1zLnB1c2goemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzKGJyb3RsaU9wdGlvbnMpKTtcbiAgICAgICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXNwb25zZVN0cmVhbSA9IHN0cmVhbXMubGVuZ3RoID4gMSA/IHN0cmVhbS5waXBlbGluZShzdHJlYW1zLCB1dGlscy5ub29wKSA6IHN0cmVhbXNbMF07XG5cbiAgICAgIGNvbnN0IG9mZkxpc3RlbmVycyA9IHN0cmVhbS5maW5pc2hlZChyZXNwb25zZVN0cmVhbSwgKCkgPT4ge1xuICAgICAgICBvZmZMaXN0ZW5lcnMoKTtcbiAgICAgICAgb25GaW5pc2hlZCgpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXMuc3RhdHVzTWVzc2FnZSxcbiAgICAgICAgaGVhZGVyczogbmV3IEF4aW9zSGVhZGVycyhyZXMuaGVhZGVycyksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdDogbGFzdFJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEgPSByZXNwb25zZVN0cmVhbTtcbiAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCdWZmZXIgPSBbXTtcbiAgICAgICAgbGV0IHRvdGFsUmVzcG9uc2VCeXRlcyA9IDA7XG5cbiAgICAgICAgcmVzcG9uc2VTdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1EYXRhKGNodW5rKSB7XG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIucHVzaChjaHVuayk7XG4gICAgICAgICAgdG90YWxSZXNwb25zZUJ5dGVzICs9IGNodW5rLmxlbmd0aDtcblxuICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgY29udGVudCBsZW5ndGggaXMgbm90IG92ZXIgdGhlIG1heENvbnRlbnRMZW5ndGggaWYgc3BlY2lmaWVkXG4gICAgICAgICAgaWYgKGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoID4gLTEgJiYgdG90YWxSZXNwb25zZUJ5dGVzID4gY29uZmlnLm1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIHN0cmVhbS5kZXN0cm95KCkgZW1pdCBhYm9ydGVkIGV2ZW50IGJlZm9yZSBjYWxsaW5nIHJlamVjdCgpIG9uIE5vZGUuanMgdjE2XG4gICAgICAgICAgICByZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgICByZXNwb25zZVN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ21heENvbnRlbnRMZW5ndGggc2l6ZSBvZiAnICsgY29uZmlnLm1heENvbnRlbnRMZW5ndGggKyAnIGV4Y2VlZGVkJyxcbiAgICAgICAgICAgICAgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCBjb25maWcsIGxhc3RSZXF1ZXN0KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXNwb25zZVN0cmVhbS5vbignYWJvcnRlZCcsIGZ1bmN0aW9uIGhhbmRsZXJTdHJlYW1BYm9ydGVkKCkge1xuICAgICAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICAgJ3N0cmVhbSBoYXMgYmVlbiBhYm9ydGVkJyxcbiAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSxcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIGxhc3RSZXF1ZXN0XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXNwb25zZVN0cmVhbS5kZXN0cm95KGVycik7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVycm9yKGVycikge1xuICAgICAgICAgIGlmIChyZXEuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgbGFzdFJlcXVlc3QpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzcG9uc2VTdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIGhhbmRsZVN0cmVhbUVuZCgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlQnVmZmVyLmxlbmd0aCA9PT0gMSA/IHJlc3BvbnNlQnVmZmVyWzBdIDogQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2VUeXBlICE9PSAnYXJyYXlidWZmZXInKSB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlRGF0YS50b1N0cmluZyhyZXNwb25zZUVuY29kaW5nKTtcbiAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZUVuY29kaW5nIHx8IHJlc3BvbnNlRW5jb2RpbmcgPT09ICd1dGY4Jykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlRGF0YSA9IHV0aWxzLnN0cmlwQk9NKHJlc3BvbnNlRGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVzcG9uc2UucmVxdWVzdCwgcmVzcG9uc2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZW1pdHRlci5vbmNlKCdhYm9ydCcsIGVyciA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2VTdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgIHJlc3BvbnNlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlbWl0dGVyLm9uY2UoJ2Fib3J0JywgZXJyID0+IHtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgICAgcmVxLmRlc3Ryb3koZXJyKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEVycm9yKGVycikge1xuICAgICAgLy8gQHRvZG8gcmVtb3ZlXG4gICAgICAvLyBpZiAocmVxLmFib3J0ZWQgJiYgZXJyLmNvZGUgIT09IEF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUykgcmV0dXJuO1xuICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVxKSk7XG4gICAgfSk7XG5cbiAgICAvLyBzZXQgdGNwIGtlZXAgYWxpdmUgdG8gcHJldmVudCBkcm9wIGNvbm5lY3Rpb24gYnkgcGVlclxuICAgIHJlcS5vbignc29ja2V0JywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFNvY2tldChzb2NrZXQpIHtcbiAgICAgIC8vIGRlZmF1bHQgaW50ZXJ2YWwgb2Ygc2VuZGluZyBhY2sgcGFja2V0IGlzIDEgbWludXRlXG4gICAgICBzb2NrZXQuc2V0S2VlcEFsaXZlKHRydWUsIDEwMDAgKiA2MCk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVxdWVzdCB0aW1lb3V0XG4gICAgaWYgKGNvbmZpZy50aW1lb3V0KSB7XG4gICAgICAvLyBUaGlzIGlzIGZvcmNpbmcgYSBpbnQgdGltZW91dCB0byBhdm9pZCBwcm9ibGVtcyBpZiB0aGUgYHJlcWAgaW50ZXJmYWNlIGRvZXNuJ3QgaGFuZGxlIG90aGVyIHR5cGVzLlxuICAgICAgY29uc3QgdGltZW91dCA9IHBhcnNlSW50KGNvbmZpZy50aW1lb3V0LCAxMCk7XG5cbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odGltZW91dCkpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdlcnJvciB0cnlpbmcgdG8gcGFyc2UgYGNvbmZpZy50aW1lb3V0YCB0byBpbnQnLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcVxuICAgICAgICApKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWV0aW1lLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSB2ZXJ5IHNsb3csIGFuZCBkb2VzIG5vdCByZXNwb25kLCB0aGUgY29ubmVjdCBldmVudCB3aWxsIGJlIGJsb2NrIGJ5IGV2ZW50IGxvb3Agc3lzdGVtLlxuICAgICAgLy8gQW5kIHRpbWVyIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQsIGFuZCBhYm9ydCgpIHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgY29ubmVjdGlvbiwgdGhlbiBnZXQgXCJzb2NrZXQgaGFuZyB1cFwiIGFuZCBjb2RlIEVDT05OUkVTRVQuXG4gICAgICAvLyBBdCB0aGlzIHRpbWUsIGlmIHdlIGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdCwgbm9kZWpzIHdpbGwgaGFuZyB1cCBzb21lIHNvY2tldCBvbiBiYWNrZ3JvdW5kLiBhbmQgdGhlIG51bWJlciB3aWxsIHVwIGFuZCB1cC5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZXNlIHNvY2tldCB3aGljaCBiZSBoYW5nIHVwIHdpbGwgZGV2b3VyaW5nIENQVSBsaXR0bGUgYnkgbGl0dGxlLlxuICAgICAgLy8gQ2xpZW50UmVxdWVzdC5zZXRUaW1lb3V0IHdpbGwgYmUgZmlyZWQgb24gdGhlIHNwZWNpZnkgbWlsbGlzZWNvbmRzLCBhbmQgY2FuIG1ha2Ugc3VyZSB0aGF0IGFib3J0KCkgd2lsbCBiZSBmaXJlZCBhZnRlciBjb25uZWN0LlxuICAgICAgcmVxLnNldFRpbWVvdXQodGltZW91dCwgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFRpbWVvdXQoKSB7XG4gICAgICAgIGlmIChpc0RvbmUpIHJldHVybjtcbiAgICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICAgIGlmIChjb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcVxuICAgICAgICApKTtcbiAgICAgICAgYWJvcnQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIGlmICh1dGlscy5pc1N0cmVhbShkYXRhKSkge1xuICAgICAgbGV0IGVuZGVkID0gZmFsc2U7XG4gICAgICBsZXQgZXJyb3JlZCA9IGZhbHNlO1xuXG4gICAgICBkYXRhLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGVuZGVkID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBkYXRhLm9uY2UoJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgIHJlcS5kZXN0cm95KGVycik7XG4gICAgICB9KTtcblxuICAgICAgZGF0YS5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIGlmICghZW5kZWQgJiYgIWVycm9yZWQpIHtcbiAgICAgICAgICBhYm9ydChuZXcgQ2FuY2VsZWRFcnJvcignUmVxdWVzdCBzdHJlYW0gaGFzIGJlZW4gYWJvcnRlZCcsIGNvbmZpZywgcmVxKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBkYXRhLnBpcGUocmVxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxLmVuZChkYXRhKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgX19zZXRQcm94eSA9IHNldFByb3h5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/adapters/http.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/adapters/xhr.js": +/*!************************************************!*\ + !*** ./node_modules/axios/lib/adapters/xhr.js ***! + \************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _core_settle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../core/settle.js */ \"(ssr)/./node_modules/axios/lib/core/settle.js\");\n/* harmony import */ var _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../defaults/transitional.js */ \"(ssr)/./node_modules/axios/lib/defaults/transitional.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../cancel/CanceledError.js */ \"(ssr)/./node_modules/axios/lib/cancel/CanceledError.js\");\n/* harmony import */ var _helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../helpers/parseProtocol.js */ \"(ssr)/./node_modules/axios/lib/helpers/parseProtocol.js\");\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../platform/index.js */ \"(ssr)/./node_modules/axios/lib/platform/index.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n/* harmony import */ var _helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../helpers/progressEventReducer.js */ \"(ssr)/./node_modules/axios/lib/helpers/progressEventReducer.js\");\n/* harmony import */ var _helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers/resolveConfig.js */ \"(ssr)/./node_modules/axios/lib/helpers/resolveConfig.js\");\n\n\n\n\n\n\n\n\n\n\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = (0,_helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(config);\n let requestData = _config.data;\n const requestHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n (0,_core_settle_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('Request aborted', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('Network Error', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"](\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ETIMEDOUT : _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n _utils_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_6__.progressEventReducer)(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_6__.progressEventReducer)(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"](null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = (0,_helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(_config.url);\n\n if (protocol && _platform_index_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"].protocols.indexOf(protocol) === -1) {\n reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('Unsupported protocol ' + protocol + ':', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFrQztBQUNPO0FBQ3NCO0FBQ2hCO0FBQ1E7QUFDQztBQUNaO0FBQ087QUFDcUI7QUFDaEI7O0FBRXhEOztBQUVBLGlFQUFlO0FBQ2Y7QUFDQSxvQkFBb0IscUVBQWE7QUFDakM7QUFDQSwyQkFBMkIsNkRBQVk7QUFDdkMsU0FBUyxvREFBb0Q7QUFDN0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DO0FBQ3BDLHdDQUF3Qzs7QUFFeEM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsNkRBQVk7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sMkRBQU07QUFDWjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsMkRBQVUsb0JBQW9CLDJEQUFVOztBQUV6RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsMkRBQVUsa0JBQWtCLDJEQUFVOztBQUV2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELGlFQUFvQjtBQUN2RTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsMkRBQVU7QUFDM0I7QUFDQSwyQ0FBMkMsMkRBQVUsYUFBYSwyREFBVTtBQUM1RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLGlEQUFLO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxTQUFTLGlEQUFLO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDLHNGQUFvQjtBQUNoRTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0Msc0ZBQW9COztBQUU1RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGdFQUFhO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixxRUFBYTs7QUFFbEMsb0JBQW9CLDBEQUFRO0FBQzVCLGlCQUFpQiwyREFBVSwyQ0FBMkMsMkRBQVU7QUFDaEY7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzPzMxYmEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLy4uL2NvcmUvc2V0dGxlLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQge3Byb2dyZXNzRXZlbnRSZWR1Y2VyfSBmcm9tICcuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzJztcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gXCIuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanNcIjtcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBjb25zdCBfY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IF9jb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzc30gPSBfY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGxldCB1cGxvYWRUaHJvdHRsZWQsIGRvd25sb2FkVGhyb3R0bGVkO1xuICAgIGxldCBmbHVzaFVwbG9hZCwgZmx1c2hEb3dubG9hZDtcblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBmbHVzaFVwbG9hZCAmJiBmbHVzaFVwbG9hZCgpOyAvLyBmbHVzaCBldmVudHNcbiAgICAgIGZsdXNoRG93bmxvYWQgJiYgZmx1c2hEb3dubG9hZCgpOyAvLyBmbHVzaCBldmVudHNcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuXG4gICAgICBfY29uZmlnLnNpZ25hbCAmJiBfY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oX2NvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgX2NvbmZpZy51cmwsIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBfY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKF9jb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IF9jb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAoW2Rvd25sb2FkVGhyb3R0bGVkLCBmbHVzaERvd25sb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGRvd25sb2FkVGhyb3R0bGVkKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmIChvblVwbG9hZFByb2dyZXNzICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICAoW3VwbG9hZFRocm90dGxlZCwgZmx1c2hVcGxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25VcGxvYWRQcm9ncmVzcykpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHVwbG9hZFRocm90dGxlZCk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbHVzaFVwbG9hZCk7XG4gICAgfVxuXG4gICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/adapters/xhr.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/axios.js": +/*!*****************************************!*\ + !*** ./node_modules/axios/lib/axios.js ***! + \*****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _helpers_bind_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/bind.js */ \"(ssr)/./node_modules/axios/lib/helpers/bind.js\");\n/* harmony import */ var _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/Axios.js */ \"(ssr)/./node_modules/axios/lib/core/Axios.js\");\n/* harmony import */ var _core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./core/mergeConfig.js */ \"(ssr)/./node_modules/axios/lib/core/mergeConfig.js\");\n/* harmony import */ var _defaults_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./defaults/index.js */ \"(ssr)/./node_modules/axios/lib/defaults/index.js\");\n/* harmony import */ var _helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./helpers/formDataToJSON.js */ \"(ssr)/./node_modules/axios/lib/helpers/formDataToJSON.js\");\n/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./cancel/CanceledError.js */ \"(ssr)/./node_modules/axios/lib/cancel/CanceledError.js\");\n/* harmony import */ var _cancel_CancelToken_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./cancel/CancelToken.js */ \"(ssr)/./node_modules/axios/lib/cancel/CancelToken.js\");\n/* harmony import */ var _cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./cancel/isCancel.js */ \"(ssr)/./node_modules/axios/lib/cancel/isCancel.js\");\n/* harmony import */ var _env_data_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./env/data.js */ \"(ssr)/./node_modules/axios/lib/env/data.js\");\n/* harmony import */ var _helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./helpers/toFormData.js */ \"(ssr)/./node_modules/axios/lib/helpers/toFormData.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./core/AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _helpers_spread_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./helpers/spread.js */ \"(ssr)/./node_modules/axios/lib/helpers/spread.js\");\n/* harmony import */ var _helpers_isAxiosError_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./helpers/isAxiosError.js */ \"(ssr)/./node_modules/axios/lib/helpers/isAxiosError.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./core/AxiosHeaders.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n/* harmony import */ var _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./adapters/adapters.js */ \"(ssr)/./node_modules/axios/lib/adapters/adapters.js\");\n/* harmony import */ var _helpers_HttpStatusCode_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./helpers/HttpStatusCode.js */ \"(ssr)/./node_modules/axios/lib/helpers/HttpStatusCode.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](defaultConfig);\n const instance = (0,_helpers_bind_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_core_Axios_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype.request, context);\n\n // Copy axios.prototype to instance\n _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].extend(instance, _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance((0,_core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(_defaults_index_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n\n// Expose Cancel & CancelToken\naxios.CanceledError = _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\naxios.CancelToken = _cancel_CancelToken_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\naxios.isCancel = _cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\naxios.VERSION = _env_data_js__WEBPACK_IMPORTED_MODULE_8__.VERSION;\naxios.toFormData = _helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"];\n\n// Expose AxiosError class\naxios.AxiosError = _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"];\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = _helpers_spread_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\n\n// Expose isAxiosError\naxios.isAxiosError = _helpers_isAxiosError_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"];\n\n// Expose mergeConfig\naxios.mergeConfig = _core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n\naxios.AxiosHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"];\n\naxios.formToJSON = thing => (0,_helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(_utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getAdapter;\n\naxios.HttpStatusCode = _helpers_HttpStatusCode_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"];\n\naxios.default = axios;\n\n// this module should only have a default export\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (axios);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFhOztBQUVrQjtBQUNNO0FBQ0Q7QUFDWTtBQUNMO0FBQ2M7QUFDSDtBQUNKO0FBQ047QUFDTjtBQUNXO0FBQ0g7QUFDTDtBQUNZO0FBQ0g7QUFDSjtBQUNXOztBQUV6RDtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLHNCQUFzQixzREFBSztBQUMzQixtQkFBbUIsNERBQUksQ0FBQyxzREFBSzs7QUFFN0I7QUFDQSxFQUFFLGlEQUFLLGtCQUFrQixzREFBSyxzQkFBc0IsaUJBQWlCOztBQUVyRTtBQUNBLEVBQUUsaURBQUssa0NBQWtDLGlCQUFpQjs7QUFFMUQ7QUFDQTtBQUNBLDBCQUEwQixnRUFBVztBQUNyQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsNkJBQTZCLDBEQUFROztBQUVyQztBQUNBLGNBQWMsc0RBQUs7O0FBRW5CO0FBQ0Esc0JBQXNCLGdFQUFhO0FBQ25DLG9CQUFvQiw4REFBVztBQUMvQixpQkFBaUIsMkRBQVE7QUFDekIsZ0JBQWdCLGlEQUFPO0FBQ3ZCLG1CQUFtQiw4REFBVTs7QUFFN0I7QUFDQSxtQkFBbUIsNERBQVU7O0FBRTdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSwyREFBTTs7QUFFckI7QUFDQSxxQkFBcUIsaUVBQVk7O0FBRWpDO0FBQ0Esb0JBQW9CLDREQUFXOztBQUUvQixxQkFBcUIsOERBQVk7O0FBRWpDLDRCQUE0Qix1RUFBYyxDQUFDLGlEQUFLOztBQUVoRCxtQkFBbUIsOERBQVE7O0FBRTNCLHVCQUF1QixtRUFBYzs7QUFFckM7O0FBRUE7QUFDQSxpRUFBZSxLQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanM/N2JiYSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHNwcmVhZCBmcm9tICcuL2hlbHBlcnMvc3ByZWFkLmpzJztcbmltcG9ydCBpc0F4aW9zRXJyb3IgZnJvbSAnLi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/axios.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/cancel/CancelToken.js": +/*!******************************************************!*\ + !*** ./node_modules/axios/lib/cancel/CancelToken.js ***! + \******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _CanceledError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CanceledError.js */ \"(ssr)/./node_modules/axios/lib/cancel/CanceledError.js\");\n\n\n\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new _CanceledError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CancelToken);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFhOztBQUVrQzs7QUFFL0M7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlCQUF5Qix5REFBYTtBQUN0QztBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanM/MjlhMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vQ2FuY2VsZWRFcnJvci5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgdG9BYm9ydFNpZ25hbCgpIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgYWJvcnQgPSAoZXJyKSA9PiB7XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVycik7XG4gICAgfTtcblxuICAgIHRoaXMuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIGNvbnRyb2xsZXIuc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdGhpcy51bnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICByZXR1cm4gY29udHJvbGxlci5zaWduYWw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxUb2tlbjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/cancel/CancelToken.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/cancel/CanceledError.js": +/*!********************************************************!*\ + !*** ./node_modules/axios/lib/cancel/CanceledError.js ***! + \********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n\n\n\n\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, message == null ? 'canceled' : message, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\n_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].inherits(CanceledError, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {\n __CANCEL__: true\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CanceledError);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFhOztBQUVrQztBQUNmOztBQUVoQztBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQjtBQUNBLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxFQUFFLDJEQUFVLG9EQUFvRCwyREFBVTtBQUMxRTtBQUNBOztBQUVBLGlEQUFLLHlCQUF5QiwyREFBVTtBQUN4QztBQUNBLENBQUM7O0FBRUQsaUVBQWUsYUFBYSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanM/NWU1MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsZWRFcnJvcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/cancel/CanceledError.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/cancel/isCancel.js": +/*!***************************************************!*\ + !*** ./node_modules/axios/lib/cancel/isCancel.js ***! + \***************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ isCancel)\n/* harmony export */ });\n\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWE7O0FBRUU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzPzYwNmUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/cancel/isCancel.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/core/Axios.js": +/*!**********************************************!*\ + !*** ./node_modules/axios/lib/core/Axios.js ***! + \**********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _helpers_buildURL_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../helpers/buildURL.js */ \"(ssr)/./node_modules/axios/lib/helpers/buildURL.js\");\n/* harmony import */ var _InterceptorManager_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./InterceptorManager.js */ \"(ssr)/./node_modules/axios/lib/core/InterceptorManager.js\");\n/* harmony import */ var _dispatchRequest_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dispatchRequest.js */ \"(ssr)/./node_modules/axios/lib/core/dispatchRequest.js\");\n/* harmony import */ var _mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mergeConfig.js */ \"(ssr)/./node_modules/axios/lib/core/mergeConfig.js\");\n/* harmony import */ var _buildFullPath_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./buildFullPath.js */ \"(ssr)/./node_modules/axios/lib/core/buildFullPath.js\");\n/* harmony import */ var _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers/validator.js */ \"(ssr)/./node_modules/axios/lib/helpers/validator.js\");\n/* harmony import */ var _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AxiosHeaders.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n\n\n\n\n\n\n\n\n\n\n\nconst validators = _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new _InterceptorManager_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](),\n response: new _InterceptorManager_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = (0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && _utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].merge(\n headers.common,\n headers[config.method]\n );\n\n headers && _utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [_dispatchRequest_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = _dispatchRequest_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = (0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this.defaults, config);\n const fullPath = (0,_buildFullPath_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(config.baseURL, config.url, config.allowAbsoluteUrls);\n return (0,_helpers_buildURL_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\n_utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request((0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\n_utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request((0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Axios);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQWE7O0FBRXFCO0FBQ1k7QUFDVztBQUNOO0FBQ1I7QUFDSTtBQUNDO0FBQ0g7O0FBRTdDLG1CQUFtQiw2REFBUzs7QUFFNUI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsOERBQWtCO0FBQ3JDLG9CQUFvQiw4REFBa0I7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGVBQWU7QUFDNUIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQSxhQUFhLDJEQUFXOztBQUV4QixXQUFXLHlDQUF5Qzs7QUFFcEQ7QUFDQSxNQUFNLDZEQUFTO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0EsVUFBVSxpREFBSztBQUNmO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixRQUFRLDZEQUFTO0FBQ2pCO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQSxJQUFJLDZEQUFTO0FBQ2I7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxpREFBSztBQUN6QztBQUNBO0FBQ0E7O0FBRUEsZUFBZSxpREFBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQix3REFBWTs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLDJEQUFlO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLDJEQUFlO0FBQy9CLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLDJEQUFXO0FBQ3hCLHFCQUFxQiw2REFBYTtBQUNsQyxXQUFXLGdFQUFRO0FBQ25CO0FBQ0E7O0FBRUE7QUFDQSxpREFBSztBQUNMO0FBQ0E7QUFDQSx3QkFBd0IsMkRBQVcsYUFBYTtBQUNoRDtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsaURBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCLDJEQUFXLGFBQWE7QUFDbEQ7QUFDQTtBQUNBO0FBQ0EsVUFBVSxJQUFJO0FBQ2Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRCxpRUFBZSxLQUFLLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzPzhkYmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teSA9IHt9O1xuXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZHVtbXkpIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHNcbiAgICBpZiAoY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMuYWxsb3dBYnNvbHV0ZVVybHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzID0gdGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhjb25maWcsIHtcbiAgICAgIGJhc2VVcmw6IHZhbGlkYXRvcnMuc3BlbGxpbmcoJ2Jhc2VVUkwnKSxcbiAgICAgIHdpdGhYc3JmVG9rZW46IHZhbGlkYXRvcnMuc3BlbGxpbmcoJ3dpdGhYU1JGVG9rZW4nKVxuICAgIH0sIHRydWUpO1xuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGhlYWRlcnMgJiYgdXRpbHMuZm9yRWFjaChcbiAgICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgICAgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsLCBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/core/Axios.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/core/AxiosError.js": +/*!***************************************************!*\ + !*** ./node_modules/axios/lib/core/AxiosError.js ***! + \***************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n\n\n\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\n_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AxiosError);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFhOztBQUVtQjs7QUFFaEM7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlEQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsaURBQUs7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLENBQUM7O0FBRUQ7QUFDQSxrREFBa0QsWUFBWTs7QUFFOUQ7QUFDQTtBQUNBOztBQUVBLEVBQUUsaURBQUs7QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanM/ZmFhMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgaWYgKHJlc3BvbnNlKSB7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzID8gcmVzcG9uc2Uuc3RhdHVzIDogbnVsbDtcbiAgfVxufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1c1xuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zRXJyb3I7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/core/AxiosError.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/core/AxiosHeaders.js": +/*!*****************************************************!*\ + !*** ./node_modules/axios/lib/core/AxiosHeaders.js ***! + \*****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _helpers_parseHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/parseHeaders.js */ \"(ssr)/./node_modules/axios/lib/helpers/parseHeaders.js\");\n\n\n\n\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(value)) return;\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders((0,_helpers_parseHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(header), valueOrRewrite);\n } else if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(this, (value, header) => {\n const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\n_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\n_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].freezeMethods(AxiosHeaders);\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AxiosHeaders);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFhOztBQUVtQjtBQUNzQjs7QUFFdEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsaURBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCLG1CQUFtQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLE1BQU0saURBQUs7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPLGlEQUFLOztBQUVaLE1BQU0saURBQUs7QUFDWDtBQUNBOztBQUVBLE1BQU0saURBQUs7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSx1QkFBdUIsaURBQUs7O0FBRTVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixpREFBSzs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLGlEQUFLOztBQUVYLFFBQVEsaURBQUs7QUFDYjtBQUNBLE1BQU0sUUFBUSxpREFBSztBQUNuQixpQkFBaUIsb0VBQVk7QUFDN0IsTUFBTSxTQUFTLGlEQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixpREFBSzs7QUFFdkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFlBQVksaURBQUs7QUFDakI7QUFDQTs7QUFFQSxZQUFZLGlEQUFLO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixpREFBSzs7QUFFdkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLGlEQUFLOztBQUV6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsaURBQUs7QUFDYjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSxpREFBSztBQUNULGtCQUFrQixpREFBSzs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSSxpREFBSztBQUNULHNFQUFzRSxpREFBSztBQUMzRSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksaURBQUs7O0FBRVQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsaURBQUssNkNBQTZDLE1BQU07QUFDeEQsb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQsaURBQUs7O0FBRUwsaUVBQWUsWUFBWSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanM/YTA0NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgcGFyc2VIZWFkZXJzIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzJztcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlciAmJiBTdHJpbmcoaGVhZGVyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlci50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSArIGFjY2Vzc29yTmFtZSwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSlcbiAgICB9IGVsc2UgaWYodXRpbHMuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG5cbiAgICAgICAgaWYgKCFwYXJzZXIpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyc2VyID09PSB0cnVlKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlVG9rZW5zKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgcmV0dXJuICEhKGtleSAmJiB0aGlzW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlcikpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkZWxldGUoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGRlbGV0ZUhlYWRlcihfaGVhZGVyKSB7XG4gICAgICBfaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoX2hlYWRlcikge1xuICAgICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsICcpIDogdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbaGVhZGVyLCB2YWx1ZV0pID0+IGhlYWRlciArICc6ICcgKyB2YWx1ZSkuam9pbignXFxuJyk7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoWydDb250ZW50LVR5cGUnLCAnQ29udGVudC1MZW5ndGgnLCAnQWNjZXB0JywgJ0FjY2VwdC1FbmNvZGluZycsICdVc2VyLUFnZW50JywgJ0F1dGhvcml6YXRpb24nXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscy5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zSGVhZGVycztcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/core/AxiosHeaders.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/core/InterceptorManager.js": +/*!***********************************************************!*\ + !*** ./node_modules/axios/lib/core/InterceptorManager.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n\n\n\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InterceptorManager);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWE7O0FBRXFCOztBQUVsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFVBQVU7QUFDdkIsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0EsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsVUFBVTtBQUN2QjtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsSUFBSSxpREFBSztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLGlFQUFlLGtCQUFrQixFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanM/NzkyNiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/core/InterceptorManager.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/core/buildFullPath.js": +/*!******************************************************!*\ + !*** ./node_modules/axios/lib/core/buildFullPath.js ***! + \******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ buildFullPath)\n/* harmony export */ });\n/* harmony import */ var _helpers_isAbsoluteURL_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers/isAbsoluteURL.js */ \"(ssr)/./node_modules/axios/lib/helpers/isAbsoluteURL.js\");\n/* harmony import */ var _helpers_combineURLs_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/combineURLs.js */ \"(ssr)/./node_modules/axios/lib/helpers/combineURLs.js\");\n\n\n\n\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !(0,_helpers_isAbsoluteURL_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return (0,_helpers_combineURLs_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(baseURL, requestedURL);\n }\n return requestedURL;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBYTs7QUFFMkM7QUFDSjs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDZTtBQUNmLHVCQUF1QixxRUFBYTtBQUNwQztBQUNBLFdBQVcsbUVBQVc7QUFDdEI7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzP2E5MmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgaXNBYnNvbHV0ZVVSTCBmcm9tICcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMnO1xuaW1wb3J0IGNvbWJpbmVVUkxzIGZyb20gJy4uL2hlbHBlcnMvY29tYmluZVVSTHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwsIGFsbG93QWJzb2x1dGVVcmxzKSB7XG4gIGxldCBpc1JlbGF0aXZlVXJsID0gIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKTtcbiAgaWYgKGJhc2VVUkwgJiYgKGlzUmVsYXRpdmVVcmwgfHwgYWxsb3dBYnNvbHV0ZVVybHMgPT0gZmFsc2UpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/core/buildFullPath.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/core/dispatchRequest.js": +/*!********************************************************!*\ + !*** ./node_modules/axios/lib/core/dispatchRequest.js ***! + \********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ dispatchRequest)\n/* harmony export */ });\n/* harmony import */ var _transformData_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transformData.js */ \"(ssr)/./node_modules/axios/lib/core/transformData.js\");\n/* harmony import */ var _cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../cancel/isCancel.js */ \"(ssr)/./node_modules/axios/lib/cancel/isCancel.js\");\n/* harmony import */ var _defaults_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../defaults/index.js */ \"(ssr)/./node_modules/axios/lib/defaults/index.js\");\n/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cancel/CanceledError.js */ \"(ssr)/./node_modules/axios/lib/cancel/CanceledError.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n/* harmony import */ var _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../adapters/adapters.js */ \"(ssr)/./node_modules/axios/lib/adapters/adapters.js\");\n\n\n\n\n\n\n\n\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(config.headers);\n\n // Transform request data\n config.data = _transformData_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getAdapter(config.adapter || _defaults_index_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = _transformData_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!(0,_cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = _transformData_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBYTs7QUFFa0M7QUFDRjtBQUNEO0FBQ1c7QUFDSjtBQUNKOztBQUUvQztBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWMsZ0VBQWE7QUFDM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDZTtBQUNmOztBQUVBLG1CQUFtQiw2REFBWTs7QUFFL0I7QUFDQSxnQkFBZ0IseURBQWE7QUFDN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsNkRBQVEsOEJBQThCLDBEQUFROztBQUVoRTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLHlEQUFhO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qiw2REFBWTs7QUFFbkM7QUFDQSxHQUFHO0FBQ0gsU0FBUywrREFBUTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCLHlEQUFhO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLDZEQUFZO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcz84MTBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRyYW5zZm9ybURhdGEgZnJvbSAnLi90cmFuc2Zvcm1EYXRhLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gXCIuLi9hZGFwdGVycy9hZGFwdGVycy5qc1wiO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/core/dispatchRequest.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/core/mergeConfig.js": +/*!****************************************************!*\ + !*** ./node_modules/axios/lib/core/mergeConfig.js ***! + \****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ mergeConfig)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AxiosHeaders.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n\n\n\n\n\nconst headersToObject = (thing) => thing instanceof _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isPlainObject(target) && _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isPlainObject(source)) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].merge.call({caseless}, target, source);\n } else if (_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isPlainObject(source)) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].merge({}, source);\n } else if (_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvbWVyZ2VDb25maWcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWE7O0FBRW1CO0FBQ2E7O0FBRTdDLG9EQUFvRCx3REFBWSxLQUFLLFdBQVc7O0FBRWhGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxpREFBSywwQkFBMEIsaURBQUs7QUFDNUMsYUFBYSxpREFBSyxhQUFhLFNBQVM7QUFDeEMsTUFBTSxTQUFTLGlEQUFLO0FBQ3BCLGFBQWEsaURBQUssU0FBUztBQUMzQixNQUFNLFNBQVMsaURBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsaURBQUs7QUFDZDtBQUNBLE1BQU0sVUFBVSxpREFBSztBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsaURBQUs7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsaURBQUs7QUFDZDtBQUNBLE1BQU0sVUFBVSxpREFBSztBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUUsaURBQUsscUNBQXFDO0FBQzVDO0FBQ0E7QUFDQSxLQUFLLGlEQUFLO0FBQ1YsR0FBRzs7QUFFSDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcz82YmU3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vQXhpb3NIZWFkZXJzLmpzXCI7XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMgPyB7IC4uLnRoaW5nIH0gOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIHByb3AsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBwcm9wICwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgcHJvcCAsIGNhc2VsZXNzKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgcHJvcCAsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYiAsIHByb3ApID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYikscHJvcCwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/core/mergeConfig.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/core/settle.js": +/*!***********************************************!*\ + !*** ./node_modules/axios/lib/core/settle.js ***! + \***********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ settle)\n/* harmony export */ });\n/* harmony import */ var _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n\n\n\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](\n 'Request failed with status code ' + response.status,\n [_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ERR_BAD_REQUEST, _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWE7O0FBRTRCOztBQUV6QztBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLGVBQWUsc0RBQVU7QUFDekI7QUFDQSxPQUFPLHNEQUFVLGtCQUFrQixzREFBVTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcz9mMmZhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9BeGlvc0Vycm9yLmpzJztcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyZXNwb25zZS5zdGF0dXMgLyAxMDApIC0gNF0sXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/core/settle.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/core/transformData.js": +/*!******************************************************!*\ + !*** ./node_modules/axios/lib/core/transformData.js ***! + \******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ transformData)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _defaults_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../defaults/index.js */ \"(ssr)/./node_modules/axios/lib/defaults/index.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n\n\n\n\n\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || _defaults_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n const context = response || config;\n const headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(context.headers);\n let data = context.data;\n\n _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWE7O0FBRXFCO0FBQ1U7QUFDTzs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxnQkFBZ0I7QUFDM0IsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsYUFBYSxHQUFHO0FBQ2hCO0FBQ2U7QUFDZix5QkFBeUIsMERBQVE7QUFDakM7QUFDQSxrQkFBa0IsNkRBQVk7QUFDOUI7O0FBRUEsRUFBRSxpREFBSztBQUNQO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzPzI1YzAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/core/transformData.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/defaults/index.js": +/*!**************************************************!*\ + !*** ./node_modules/axios/lib/defaults/index.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _transitional_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transitional.js */ \"(ssr)/./node_modules/axios/lib/defaults/transitional.js\");\n/* harmony import */ var _helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/toFormData.js */ \"(ssr)/./node_modules/axios/lib/helpers/toFormData.js\");\n/* harmony import */ var _helpers_toURLEncodedForm_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/toURLEncodedForm.js */ \"(ssr)/./node_modules/axios/lib/helpers/toURLEncodedForm.js\");\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../platform/index.js */ \"(ssr)/./node_modules/axios/lib/platform/index.js\");\n/* harmony import */ var _helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers/formDataToJSON.js */ \"(ssr)/./node_modules/axios/lib/helpers/formDataToJSON.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: _transitional_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(data);\n\n if (isObjectPayload && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify((0,_helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(data)) : data;\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArrayBuffer(data) ||\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBuffer(data) ||\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isStream(data) ||\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFile(data) ||\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBlob(data) ||\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isReadableStream(data)\n ) {\n return data;\n }\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArrayBufferView(data)) {\n return data.buffer;\n }\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return (0,_helpers_toURLEncodedForm_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(data, this.formSerializer).toString();\n }\n\n if ((isFileList = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return (0,_helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isResponse(data) || _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isReadableStream(data)) {\n return data;\n }\n\n if (data && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].from(e, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: _platform_index_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].classes.FormData,\n Blob: _platform_index_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\n_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQWE7O0FBRW1CO0FBQ2U7QUFDTTtBQUNIO0FBQ1k7QUFDbEI7QUFDYzs7QUFFMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEtBQUs7QUFDaEIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsVUFBVTtBQUNyQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0EsTUFBTSxpREFBSztBQUNYO0FBQ0E7QUFDQSxhQUFhLGlEQUFLO0FBQ2xCLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsZ0JBQWdCLHdEQUFvQjs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGlEQUFLOztBQUVqQywyQkFBMkIsaURBQUs7QUFDaEM7QUFDQTs7QUFFQSx1QkFBdUIsaURBQUs7O0FBRTVCO0FBQ0EsaURBQWlELHNFQUFjO0FBQy9EOztBQUVBLFFBQVEsaURBQUs7QUFDYixNQUFNLGlEQUFLO0FBQ1gsTUFBTSxpREFBSztBQUNYLE1BQU0saURBQUs7QUFDWCxNQUFNLGlEQUFLO0FBQ1gsTUFBTSxpREFBSztBQUNYO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaURBQUs7QUFDYjtBQUNBO0FBQ0EsUUFBUSxpREFBSztBQUNiLGdFQUFnRTtBQUNoRTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxlQUFlLHdFQUFnQjtBQUMvQjs7QUFFQSx3QkFBd0IsaURBQUs7QUFDN0I7O0FBRUEsZUFBZSxrRUFBVTtBQUN6Qix3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsaURBQUsscUJBQXFCLGlEQUFLO0FBQ3ZDO0FBQ0E7O0FBRUEsZ0JBQWdCLGlEQUFLO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0Esa0JBQWtCLDJEQUFVLFNBQVMsMkRBQVU7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLDBEQUFRO0FBQ3RCLFVBQVUsMERBQVE7QUFDbEIsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpREFBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRCxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcz84NmQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJywgJ2ZldGNoJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHV0aWxzLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/defaults/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/defaults/transitional.js": +/*!*********************************************************!*\ + !*** ./node_modules/axios/lib/defaults/transitional.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWE7O0FBRWIsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanM/YWQ1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/defaults/transitional.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/env/data.js": +/*!********************************************!*\ + !*** ./node_modules/axios/lib/env/data.js ***! + \********************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ VERSION: () => (/* binding */ VERSION)\n/* harmony export */ });\nconst VERSION = \"1.8.4\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzPzI5ZDgiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjEuOC40XCI7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/env/data.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/AxiosTransformStream.js": +/*!****************************************************************!*\ + !*** ./node_modules/axios/lib/helpers/AxiosTransformStream.js ***! + \****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var stream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! stream */ \"stream\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n\n\n\n\n\nconst kInternals = Symbol('internals');\n\nclass AxiosTransformStream extends stream__WEBPACK_IMPORTED_MODULE_0__.Transform{\n constructor(options) {\n options = _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].toFlatObject(options, {\n maxRate: 0,\n chunkSize: 64 * 1024,\n minChunkSize: 100,\n timeWindow: 500,\n ticksRate: 2,\n samplesCount: 15\n }, null, (prop, source) => {\n return !_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(source[prop]);\n });\n\n super({\n readableHighWaterMark: options.chunkSize\n });\n\n const internals = this[kInternals] = {\n timeWindow: options.timeWindow,\n chunkSize: options.chunkSize,\n maxRate: options.maxRate,\n minChunkSize: options.minChunkSize,\n bytesSeen: 0,\n isCaptured: false,\n notifiedBytesLoaded: 0,\n ts: Date.now(),\n bytes: 0,\n onReadCallback: null\n };\n\n this.on('newListener', event => {\n if (event === 'progress') {\n if (!internals.isCaptured) {\n internals.isCaptured = true;\n }\n }\n });\n }\n\n _read(size) {\n const internals = this[kInternals];\n\n if (internals.onReadCallback) {\n internals.onReadCallback();\n }\n\n return super._read(size);\n }\n\n _transform(chunk, encoding, callback) {\n const internals = this[kInternals];\n const maxRate = internals.maxRate;\n\n const readableHighWaterMark = this.readableHighWaterMark;\n\n const timeWindow = internals.timeWindow;\n\n const divider = 1000 / timeWindow;\n const bytesThreshold = (maxRate / divider);\n const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0;\n\n const pushChunk = (_chunk, _callback) => {\n const bytes = Buffer.byteLength(_chunk);\n internals.bytesSeen += bytes;\n internals.bytes += bytes;\n\n internals.isCaptured && this.emit('progress', internals.bytesSeen);\n\n if (this.push(_chunk)) {\n process.nextTick(_callback);\n } else {\n internals.onReadCallback = () => {\n internals.onReadCallback = null;\n process.nextTick(_callback);\n };\n }\n }\n\n const transformChunk = (_chunk, _callback) => {\n const chunkSize = Buffer.byteLength(_chunk);\n let chunkRemainder = null;\n let maxChunkSize = readableHighWaterMark;\n let bytesLeft;\n let passed = 0;\n\n if (maxRate) {\n const now = Date.now();\n\n if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) {\n internals.ts = now;\n bytesLeft = bytesThreshold - internals.bytes;\n internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;\n passed = 0;\n }\n\n bytesLeft = bytesThreshold - internals.bytes;\n }\n\n if (maxRate) {\n if (bytesLeft <= 0) {\n // next time window\n return setTimeout(() => {\n _callback(null, _chunk);\n }, timeWindow - passed);\n }\n\n if (bytesLeft < maxChunkSize) {\n maxChunkSize = bytesLeft;\n }\n }\n\n if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) {\n chunkRemainder = _chunk.subarray(maxChunkSize);\n _chunk = _chunk.subarray(0, maxChunkSize);\n }\n\n pushChunk(_chunk, chunkRemainder ? () => {\n process.nextTick(_callback, null, chunkRemainder);\n } : _callback);\n };\n\n transformChunk(chunk, function transformNextChunk(err, _chunk) {\n if (err) {\n return callback(err);\n }\n\n if (_chunk) {\n transformChunk(_chunk, transformNextChunk);\n } else {\n callback(null);\n }\n });\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AxiosTransformStream);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NUcmFuc2Zvcm1TdHJlYW0uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWE7O0FBRWU7QUFDSTs7QUFFaEM7O0FBRUEsbUNBQW1DLDZDQUFnQjtBQUNuRDtBQUNBLGNBQWMsaURBQUs7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGNBQWMsaURBQUs7QUFDbkIsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsaUVBQWUsb0JBQW9CLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVHJhbnNmb3JtU3RyZWFtLmpzPzYyMWUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jb25zdCBrSW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuY2xhc3MgQXhpb3NUcmFuc2Zvcm1TdHJlYW0gZXh0ZW5kcyBzdHJlYW0uVHJhbnNmb3Jte1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgICBtYXhSYXRlOiAwLFxuICAgICAgY2h1bmtTaXplOiA2NCAqIDEwMjQsXG4gICAgICBtaW5DaHVua1NpemU6IDEwMCxcbiAgICAgIHRpbWVXaW5kb3c6IDUwMCxcbiAgICAgIHRpY2tzUmF0ZTogMixcbiAgICAgIHNhbXBsZXNDb3VudDogMTVcbiAgICB9LCBudWxsLCAocHJvcCwgc291cmNlKSA9PiB7XG4gICAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtwcm9wXSk7XG4gICAgfSk7XG5cbiAgICBzdXBlcih7XG4gICAgICByZWFkYWJsZUhpZ2hXYXRlck1hcms6IG9wdGlvbnMuY2h1bmtTaXplXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzW2tJbnRlcm5hbHNdID0ge1xuICAgICAgdGltZVdpbmRvdzogb3B0aW9ucy50aW1lV2luZG93LFxuICAgICAgY2h1bmtTaXplOiBvcHRpb25zLmNodW5rU2l6ZSxcbiAgICAgIG1heFJhdGU6IG9wdGlvbnMubWF4UmF0ZSxcbiAgICAgIG1pbkNodW5rU2l6ZTogb3B0aW9ucy5taW5DaHVua1NpemUsXG4gICAgICBieXRlc1NlZW46IDAsXG4gICAgICBpc0NhcHR1cmVkOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkQnl0ZXNMb2FkZWQ6IDAsXG4gICAgICB0czogRGF0ZS5ub3coKSxcbiAgICAgIGJ5dGVzOiAwLFxuICAgICAgb25SZWFkQ2FsbGJhY2s6IG51bGxcbiAgICB9O1xuXG4gICAgdGhpcy5vbignbmV3TGlzdGVuZXInLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgICAgaWYgKCFpbnRlcm5hbHMuaXNDYXB0dXJlZCkge1xuICAgICAgICAgIGludGVybmFscy5pc0NhcHR1cmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgX3JlYWQoc2l6ZSkge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNba0ludGVybmFsc107XG5cbiAgICBpZiAoaW50ZXJuYWxzLm9uUmVhZENhbGxiYWNrKSB7XG4gICAgICBpbnRlcm5hbHMub25SZWFkQ2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuX3JlYWQoc2l6ZSk7XG4gIH1cblxuICBfdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzW2tJbnRlcm5hbHNdO1xuICAgIGNvbnN0IG1heFJhdGUgPSBpbnRlcm5hbHMubWF4UmF0ZTtcblxuICAgIGNvbnN0IHJlYWRhYmxlSGlnaFdhdGVyTWFyayA9IHRoaXMucmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuXG4gICAgY29uc3QgdGltZVdpbmRvdyA9IGludGVybmFscy50aW1lV2luZG93O1xuXG4gICAgY29uc3QgZGl2aWRlciA9IDEwMDAgLyB0aW1lV2luZG93O1xuICAgIGNvbnN0IGJ5dGVzVGhyZXNob2xkID0gKG1heFJhdGUgLyBkaXZpZGVyKTtcbiAgICBjb25zdCBtaW5DaHVua1NpemUgPSBpbnRlcm5hbHMubWluQ2h1bmtTaXplICE9PSBmYWxzZSA/IE1hdGgubWF4KGludGVybmFscy5taW5DaHVua1NpemUsIGJ5dGVzVGhyZXNob2xkICogMC4wMSkgOiAwO1xuXG4gICAgY29uc3QgcHVzaENodW5rID0gKF9jaHVuaywgX2NhbGxiYWNrKSA9PiB7XG4gICAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5ieXRlTGVuZ3RoKF9jaHVuayk7XG4gICAgICBpbnRlcm5hbHMuYnl0ZXNTZWVuICs9IGJ5dGVzO1xuICAgICAgaW50ZXJuYWxzLmJ5dGVzICs9IGJ5dGVzO1xuXG4gICAgICBpbnRlcm5hbHMuaXNDYXB0dXJlZCAmJiB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgaW50ZXJuYWxzLmJ5dGVzU2Vlbik7XG5cbiAgICAgIGlmICh0aGlzLnB1c2goX2NodW5rKSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKF9jYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcm5hbHMub25SZWFkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgaW50ZXJuYWxzLm9uUmVhZENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKF9jYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmb3JtQ2h1bmsgPSAoX2NodW5rLCBfY2FsbGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKF9jaHVuayk7XG4gICAgICBsZXQgY2h1bmtSZW1haW5kZXIgPSBudWxsO1xuICAgICAgbGV0IG1heENodW5rU2l6ZSA9IHJlYWRhYmxlSGlnaFdhdGVyTWFyaztcbiAgICAgIGxldCBieXRlc0xlZnQ7XG4gICAgICBsZXQgcGFzc2VkID0gMDtcblxuICAgICAgaWYgKG1heFJhdGUpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICBpZiAoIWludGVybmFscy50cyB8fCAocGFzc2VkID0gKG5vdyAtIGludGVybmFscy50cykpID49IHRpbWVXaW5kb3cpIHtcbiAgICAgICAgICBpbnRlcm5hbHMudHMgPSBub3c7XG4gICAgICAgICAgYnl0ZXNMZWZ0ID0gYnl0ZXNUaHJlc2hvbGQgLSBpbnRlcm5hbHMuYnl0ZXM7XG4gICAgICAgICAgaW50ZXJuYWxzLmJ5dGVzID0gYnl0ZXNMZWZ0IDwgMCA/IC1ieXRlc0xlZnQgOiAwO1xuICAgICAgICAgIHBhc3NlZCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBieXRlc0xlZnQgPSBieXRlc1RocmVzaG9sZCAtIGludGVybmFscy5ieXRlcztcbiAgICAgIH1cblxuICAgICAgaWYgKG1heFJhdGUpIHtcbiAgICAgICAgaWYgKGJ5dGVzTGVmdCA8PSAwKSB7XG4gICAgICAgICAgLy8gbmV4dCB0aW1lIHdpbmRvd1xuICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIF9jYWxsYmFjayhudWxsLCBfY2h1bmspO1xuICAgICAgICAgIH0sIHRpbWVXaW5kb3cgLSBwYXNzZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ5dGVzTGVmdCA8IG1heENodW5rU2l6ZSkge1xuICAgICAgICAgIG1heENodW5rU2l6ZSA9IGJ5dGVzTGVmdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF4Q2h1bmtTaXplICYmIGNodW5rU2l6ZSA+IG1heENodW5rU2l6ZSAmJiAoY2h1bmtTaXplIC0gbWF4Q2h1bmtTaXplKSA+IG1pbkNodW5rU2l6ZSkge1xuICAgICAgICBjaHVua1JlbWFpbmRlciA9IF9jaHVuay5zdWJhcnJheShtYXhDaHVua1NpemUpO1xuICAgICAgICBfY2h1bmsgPSBfY2h1bmsuc3ViYXJyYXkoMCwgbWF4Q2h1bmtTaXplKTtcbiAgICAgIH1cblxuICAgICAgcHVzaENodW5rKF9jaHVuaywgY2h1bmtSZW1haW5kZXIgPyAoKSA9PiB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soX2NhbGxiYWNrLCBudWxsLCBjaHVua1JlbWFpbmRlcik7XG4gICAgICB9IDogX2NhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgdHJhbnNmb3JtQ2h1bmsoY2h1bmssIGZ1bmN0aW9uIHRyYW5zZm9ybU5leHRDaHVuayhlcnIsIF9jaHVuaykge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jaHVuaykge1xuICAgICAgICB0cmFuc2Zvcm1DaHVuayhfY2h1bmssIHRyYW5zZm9ybU5leHRDaHVuayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBeGlvc1RyYW5zZm9ybVN0cmVhbTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/AxiosTransformStream.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js": +/*!****************************************************************!*\ + !*** ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js ***! + \****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _toFormData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toFormData.js */ \"(ssr)/./node_modules/axios/lib/helpers/toFormData.js\");\n\n\n\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && (0,_toFormData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AxiosURLSearchParams);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBYTs7QUFFNEI7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscUJBQXFCO0FBQ2hDLFdBQVcscUJBQXFCO0FBQ2hDO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLDBEQUFVO0FBQ3RCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsaUVBQWUsb0JBQW9CLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzPzU3ZjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlKTtcbiAgfSA6IGVuY29kZTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/HttpStatusCode.js": +/*!**********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/HttpStatusCode.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HttpStatusCode);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQsaUVBQWUsY0FBYyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcz84OTQyIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBIdHRwU3RhdHVzQ29kZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/HttpStatusCode.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js": +/*!*********************************************************************!*\ + !*** ./node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var stream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! stream */ \"stream\");\n\n\n\n\nclass ZlibHeaderTransformStream extends stream__WEBPACK_IMPORTED_MODULE_0__.Transform {\n __transform(chunk, encoding, callback) {\n this.push(chunk);\n callback();\n }\n\n _transform(chunk, encoding, callback) {\n if (chunk.length !== 0) {\n this._transform = this.__transform;\n\n // Add Default Compression headers if no zlib headers are present\n if (chunk[0] !== 120) { // Hex: 78\n const header = Buffer.alloc(2);\n header[0] = 120; // Hex: 78\n header[1] = 156; // Hex: 9C \n this.push(header, encoding);\n }\n }\n\n this.__transform(chunk, encoding, callback);\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ZlibHeaderTransformStream);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFhOztBQUVlOztBQUU1Qix3Q0FBd0MsNkNBQWdCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBLHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFDekI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5QkFBeUIsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbS5qcz83MWExIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgc3RyZWFtIGZyb20gXCJzdHJlYW1cIjtcblxuY2xhc3MgWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbSBleHRlbmRzIHN0cmVhbS5UcmFuc2Zvcm0ge1xuICBfX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5wdXNoKGNodW5rKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNodW5rLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtID0gdGhpcy5fX3RyYW5zZm9ybTtcblxuICAgICAgLy8gQWRkIERlZmF1bHQgQ29tcHJlc3Npb24gaGVhZGVycyBpZiBubyB6bGliIGhlYWRlcnMgYXJlIHByZXNlbnRcbiAgICAgIGlmIChjaHVua1swXSAhPT0gMTIwKSB7IC8vIEhleDogNzhcbiAgICAgICAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmFsbG9jKDIpO1xuICAgICAgICBoZWFkZXJbMF0gPSAxMjA7IC8vIEhleDogNzhcbiAgICAgICAgaGVhZGVyWzFdID0gMTU2OyAvLyBIZXg6IDlDIFxuICAgICAgICB0aGlzLnB1c2goaGVhZGVyLCBlbmNvZGluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBabGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/bind.js": +/*!************************************************!*\ + !*** ./node_modules/axios/lib/helpers/bind.js ***! + \************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ bind)\n/* harmony export */ });\n\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWE7O0FBRUU7QUFDZjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcz9jNWE1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/bind.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/buildURL.js": +/*!****************************************************!*\ + !*** ./node_modules/axios/lib/helpers/buildURL.js ***! + \****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ buildURL)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _helpers_AxiosURLSearchParams_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/AxiosURLSearchParams.js */ \"(ssr)/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\");\n\n\n\n\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isURLSearchParams(params) ?\n params.toString() :\n new _helpers_AxiosURLSearchParams_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWE7O0FBRW1CO0FBQ3NDOztBQUV0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsb0JBQW9CO0FBQy9CO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxpREFBSztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osdUJBQXVCLGlEQUFLO0FBQzVCO0FBQ0EsVUFBVSx3RUFBb0I7QUFDOUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzP2Y5ZjIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7PyhvYmplY3R8RnVuY3Rpb24pfSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIHNlcmlhbGl6ZTogb3B0aW9uc1xuICAgIH07XG4gIH0gXG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/buildURL.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/callbackify.js": +/*!*******************************************************!*\ + !*** ./node_modules/axios/lib/helpers/callbackify.js ***! + \*******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n\n\nconst callbackify = (fn, reducer) => {\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isAsyncFn(fn) ? function (...args) {\n const cb = args.pop();\n fn.apply(this, args).then((value) => {\n try {\n reducer ? cb(null, ...reducer(value)) : cb(null, value);\n } catch (err) {\n cb(err);\n }\n }, cb);\n } : fn;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (callbackify);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY2FsbGJhY2tpZnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBZ0M7O0FBRWhDO0FBQ0EsU0FBUyxpREFBSztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKOztBQUVBLGlFQUFlLFdBQVcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY2FsbGJhY2tpZnkuanM/MGIwNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmNvbnN0IGNhbGxiYWNraWZ5ID0gKGZuLCByZWR1Y2VyKSA9PiB7XG4gIHJldHVybiB1dGlscy5pc0FzeW5jRm4oZm4pID8gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBjYiA9IGFyZ3MucG9wKCk7XG4gICAgZm4uYXBwbHkodGhpcywgYXJncykudGhlbigodmFsdWUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlZHVjZXIgPyBjYihudWxsLCAuLi5yZWR1Y2VyKHZhbHVlKSkgOiBjYihudWxsLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH1cbiAgICB9LCBjYik7XG4gIH0gOiBmbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2FsbGJhY2tpZnk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/callbackify.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/combineURLs.js": +/*!*******************************************************!*\ + !*** ./node_modules/axios/lib/helpers/combineURLs.js ***! + \*******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ combineURLs)\n/* harmony export */ });\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcz83ZTcwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/combineURLs.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/composeSignals.js": +/*!**********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/composeSignals.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../cancel/CanceledError.js */ \"(ssr)/./node_modules/axios/lib/cancel/CanceledError.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n\n\n\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? err : new _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](`timeout ${timeout} of ms exceeded`, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].asap(unsubscribe);\n\n return signal;\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (composeSignals);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tcG9zZVNpZ25hbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUF1RDtBQUNSO0FBQ2Y7O0FBRWhDO0FBQ0EsU0FBUyxRQUFROztBQUVqQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsMkRBQVUsYUFBYSxnRUFBYTtBQUM1RTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsMkRBQVUsWUFBWSxTQUFTLGlCQUFpQiwyREFBVTtBQUM1RSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsV0FBVyxRQUFROztBQUVuQiwrQkFBK0IsaURBQUs7O0FBRXBDO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxjQUFjLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzP2Y1OGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSBcIi4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzXCI7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGNvbnN0IHtsZW5ndGh9ID0gKHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXSk7XG5cbiAgaWYgKHRpbWVvdXQgfHwgbGVuZ3RoKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBsZXQgYWJvcnRlZDtcblxuICAgIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IGVyciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogdGhpcy5yZWFzb247XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciA/IGVyciA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGltZXIgPSB0aW1lb3V0ICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKVxuICAgIH0sIHRpbWVvdXQpXG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICAgIGlmIChzaWduYWxzKSB7XG4gICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgICAgc2lnbmFsLnVuc3Vic2NyaWJlID8gc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpIDogc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzaWduYWxzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gICAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gICAgc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdXRpbHMuYXNhcCh1bnN1YnNjcmliZSk7XG5cbiAgICByZXR1cm4gc2lnbmFsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VTaWduYWxzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/composeSignals.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/cookies.js": +/*!***************************************************!*\ + !*** ./node_modules/axios/lib/helpers/cookies.js ***! + \***************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../platform/index.js */ \"(ssr)/./node_modules/axios/lib/platform/index.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isString(path) && cookie.push('path=' + path);\n\n _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29va2llcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBa0M7QUFDVTs7QUFFNUMsaUVBQWUsMERBQVE7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0saURBQUs7O0FBRVgsTUFBTSxpREFBSzs7QUFFWCxNQUFNLGlEQUFLOztBQUVYOztBQUVBLHVDQUF1QztBQUN2QyxLQUFLOztBQUVMO0FBQ0EsMERBQTBELHdCQUF3QjtBQUNsRjtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzPzM4MWYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhwYXRoKSAmJiBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/cookies.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/formDataToJSON.js": +/*!**********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/formDataToJSON.js ***! + \**********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n\n\n\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(target) ? target.length : name;\n\n if (isLast) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFormData(formData) && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(formData.entries)) {\n const obj = {};\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (formDataToJSON);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBYTs7QUFFbUI7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxpREFBSztBQUNkO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLFNBQVM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLDRCQUE0QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLGlEQUFLOztBQUV6QjtBQUNBLFVBQVUsaURBQUs7QUFDZjtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMEJBQTBCLGlEQUFLO0FBQy9CO0FBQ0E7O0FBRUE7O0FBRUEsa0JBQWtCLGlEQUFLO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxNQUFNLGlEQUFLLHlCQUF5QixpREFBSztBQUN6Qzs7QUFFQSxJQUFJLGlEQUFLO0FBQ1Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpRUFBZSxjQUFjLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzPzRkNTAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/formDataToJSON.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/formDataToStream.js": +/*!************************************************************!*\ + !*** ./node_modules/axios/lib/helpers/formDataToStream.js ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! util */ \"util\");\n/* harmony import */ var stream__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! stream */ \"stream\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _readBlob_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./readBlob.js */ \"(ssr)/./node_modules/axios/lib/helpers/readBlob.js\");\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../platform/index.js */ \"(ssr)/./node_modules/axios/lib/platform/index.js\");\n\n\n\n\n\n\nconst BOUNDARY_ALPHABET = _platform_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ALPHABET.ALPHA_DIGIT + '-_';\n\nconst textEncoder = typeof TextEncoder === 'function' ? new TextEncoder() : new util__WEBPACK_IMPORTED_MODULE_0__.TextEncoder();\n\nconst CRLF = '\\r\\n';\nconst CRLF_BYTES = textEncoder.encode(CRLF);\nconst CRLF_BYTES_COUNT = 2;\n\nclass FormDataPart {\n constructor(name, value) {\n const {escapeName} = this.constructor;\n const isStringValue = _utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isString(value);\n\n let headers = `Content-Disposition: form-data; name=\"${escapeName(name)}\"${\n !isStringValue && value.name ? `; filename=\"${escapeName(value.name)}\"` : ''\n }${CRLF}`;\n\n if (isStringValue) {\n value = textEncoder.encode(String(value).replace(/\\r?\\n|\\r\\n?/g, CRLF));\n } else {\n headers += `Content-Type: ${value.type || \"application/octet-stream\"}${CRLF}`\n }\n\n this.headers = textEncoder.encode(headers + CRLF);\n\n this.contentLength = isStringValue ? value.byteLength : value.size;\n\n this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;\n\n this.name = name;\n this.value = value;\n }\n\n async *encode(){\n yield this.headers;\n\n const {value} = this;\n\n if(_utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isTypedArray(value)) {\n yield value;\n } else {\n yield* (0,_readBlob_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(value);\n }\n\n yield CRLF_BYTES;\n }\n\n static escapeName(name) {\n return String(name).replace(/[\\r\\n\"]/g, (match) => ({\n '\\r' : '%0D',\n '\\n' : '%0A',\n '\"' : '%22',\n }[match]));\n }\n}\n\nconst formDataToStream = (form, headersHandler, options) => {\n const {\n tag = 'form-data-boundary',\n size = 25,\n boundary = tag + '-' + _platform_index_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].generateString(size, BOUNDARY_ALPHABET)\n } = options || {};\n\n if(!_utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isFormData(form)) {\n throw TypeError('FormData instance required');\n }\n\n if (boundary.length < 1 || boundary.length > 70) {\n throw Error('boundary must be 10-70 characters long')\n }\n\n const boundaryBytes = textEncoder.encode('--' + boundary + CRLF);\n const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF + CRLF);\n let contentLength = footerBytes.byteLength;\n\n const parts = Array.from(form.entries()).map(([name, value]) => {\n const part = new FormDataPart(name, value);\n contentLength += part.size;\n return part;\n });\n\n contentLength += boundaryBytes.byteLength * parts.length;\n\n contentLength = _utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].toFiniteNumber(contentLength);\n\n const computedHeaders = {\n 'Content-Type': `multipart/form-data; boundary=${boundary}`\n }\n\n if (Number.isFinite(contentLength)) {\n computedHeaders['Content-Length'] = contentLength;\n }\n\n headersHandler && headersHandler(computedHeaders);\n\n return stream__WEBPACK_IMPORTED_MODULE_1__.Readable.from((async function *() {\n for(const part of parts) {\n yield boundaryBytes;\n yield* part.encode();\n }\n\n yield footerBytes;\n })());\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (formDataToStream);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb1N0cmVhbS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBd0I7QUFDUTtBQUNBO0FBQ0s7QUFDTzs7QUFFNUMsMEJBQTBCLDBEQUFROztBQUVsQyxnRkFBZ0YsNkNBQWdCOztBQUVoRztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QiwwQkFBMEIsaURBQUs7O0FBRS9CLG1EQUFtRCxRQUFRLGlCQUFpQjtBQUM1RSx3Q0FBd0MsWUFBWSx1QkFBdUI7QUFDM0UsS0FBSyxFQUFFLEtBQUs7O0FBRVo7QUFDQTtBQUNBLE1BQU07QUFDTixrQ0FBa0MseUNBQXlDLEVBQUUsS0FBSztBQUNsRjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxXQUFXLE9BQU87O0FBRWxCLE9BQU8saURBQUs7QUFDWjtBQUNBLE1BQU07QUFDTixhQUFhLHdEQUFRO0FBQ3JCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDBEQUFRO0FBQ25DLElBQUk7O0FBRUosTUFBTSxpREFBSztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUEsa0JBQWtCLGlEQUFLOztBQUV2QjtBQUNBLDBDQUEwQyxXQUFXLFNBQVM7QUFDOUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVMsNENBQVE7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUEsaUVBQWUsZ0JBQWdCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9TdHJlYW0uanM/NzJjNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXRpbCBmcm9tICd1dGlsJztcbmltcG9ydCB7UmVhZGFibGV9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgcmVhZEJsb2IgZnJvbSBcIi4vcmVhZEJsb2IuanNcIjtcbmltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcblxuY29uc3QgQk9VTkRBUllfQUxQSEFCRVQgPSBwbGF0Zm9ybS5BTFBIQUJFVC5BTFBIQV9ESUdJVCArICctXyc7XG5cbmNvbnN0IHRleHRFbmNvZGVyID0gdHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID8gbmV3IFRleHRFbmNvZGVyKCkgOiBuZXcgdXRpbC5UZXh0RW5jb2RlcigpO1xuXG5jb25zdCBDUkxGID0gJ1xcclxcbic7XG5jb25zdCBDUkxGX0JZVEVTID0gdGV4dEVuY29kZXIuZW5jb2RlKENSTEYpO1xuY29uc3QgQ1JMRl9CWVRFU19DT1VOVCA9IDI7XG5cbmNsYXNzIEZvcm1EYXRhUGFydCB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3Qge2VzY2FwZU5hbWV9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBjb25zdCBpc1N0cmluZ1ZhbHVlID0gdXRpbHMuaXNTdHJpbmcodmFsdWUpO1xuXG4gICAgbGV0IGhlYWRlcnMgPSBgQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiJHtlc2NhcGVOYW1lKG5hbWUpfVwiJHtcbiAgICAgICFpc1N0cmluZ1ZhbHVlICYmIHZhbHVlLm5hbWUgPyBgOyBmaWxlbmFtZT1cIiR7ZXNjYXBlTmFtZSh2YWx1ZS5uYW1lKX1cImAgOiAnJ1xuICAgIH0ke0NSTEZ9YDtcblxuICAgIGlmIChpc1N0cmluZ1ZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IHRleHRFbmNvZGVyLmVuY29kZShTdHJpbmcodmFsdWUpLnJlcGxhY2UoL1xccj9cXG58XFxyXFxuPy9nLCBDUkxGKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlcnMgKz0gYENvbnRlbnQtVHlwZTogJHt2YWx1ZS50eXBlIHx8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCJ9JHtDUkxGfWBcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnMgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoaGVhZGVycyArIENSTEYpO1xuXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gaXNTdHJpbmdWYWx1ZSA/IHZhbHVlLmJ5dGVMZW5ndGggOiB2YWx1ZS5zaXplO1xuXG4gICAgdGhpcy5zaXplID0gdGhpcy5oZWFkZXJzLmJ5dGVMZW5ndGggKyB0aGlzLmNvbnRlbnRMZW5ndGggKyBDUkxGX0JZVEVTX0NPVU5UO1xuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBhc3luYyAqZW5jb2RlKCl7XG4gICAgeWllbGQgdGhpcy5oZWFkZXJzO1xuXG4gICAgY29uc3Qge3ZhbHVlfSA9IHRoaXM7XG5cbiAgICBpZih1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICB5aWVsZCB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgeWllbGQqIHJlYWRCbG9iKHZhbHVlKTtcbiAgICB9XG5cbiAgICB5aWVsZCBDUkxGX0JZVEVTO1xuICB9XG5cbiAgc3RhdGljIGVzY2FwZU5hbWUobmFtZSkge1xuICAgICAgcmV0dXJuIFN0cmluZyhuYW1lKS5yZXBsYWNlKC9bXFxyXFxuXCJdL2csIChtYXRjaCkgPT4gKHtcbiAgICAgICAgJ1xccicgOiAnJTBEJyxcbiAgICAgICAgJ1xcbicgOiAnJTBBJyxcbiAgICAgICAgJ1wiJyA6ICclMjInLFxuICAgICAgfVttYXRjaF0pKTtcbiAgfVxufVxuXG5jb25zdCBmb3JtRGF0YVRvU3RyZWFtID0gKGZvcm0sIGhlYWRlcnNIYW5kbGVyLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0YWcgPSAnZm9ybS1kYXRhLWJvdW5kYXJ5JyxcbiAgICBzaXplID0gMjUsXG4gICAgYm91bmRhcnkgPSB0YWcgKyAnLScgKyBwbGF0Zm9ybS5nZW5lcmF0ZVN0cmluZyhzaXplLCBCT1VOREFSWV9BTFBIQUJFVClcbiAgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYoIXV0aWxzLmlzRm9ybURhdGEoZm9ybSkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0Zvcm1EYXRhIGluc3RhbmNlIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoYm91bmRhcnkubGVuZ3RoIDwgMSB8fCBib3VuZGFyeS5sZW5ndGggPiA3MCkge1xuICAgIHRocm93IEVycm9yKCdib3VuZGFyeSBtdXN0IGJlIDEwLTcwIGNoYXJhY3RlcnMgbG9uZycpXG4gIH1cblxuICBjb25zdCBib3VuZGFyeUJ5dGVzID0gdGV4dEVuY29kZXIuZW5jb2RlKCctLScgKyBib3VuZGFyeSArIENSTEYpO1xuICBjb25zdCBmb290ZXJCeXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZSgnLS0nICsgYm91bmRhcnkgKyAnLS0nICsgQ1JMRiArIENSTEYpO1xuICBsZXQgY29udGVudExlbmd0aCA9IGZvb3RlckJ5dGVzLmJ5dGVMZW5ndGg7XG5cbiAgY29uc3QgcGFydHMgPSBBcnJheS5mcm9tKGZvcm0uZW50cmllcygpKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICBjb25zdCBwYXJ0ID0gbmV3IEZvcm1EYXRhUGFydChuYW1lLCB2YWx1ZSk7XG4gICAgY29udGVudExlbmd0aCArPSBwYXJ0LnNpemU7XG4gICAgcmV0dXJuIHBhcnQ7XG4gIH0pO1xuXG4gIGNvbnRlbnRMZW5ndGggKz0gYm91bmRhcnlCeXRlcy5ieXRlTGVuZ3RoICogcGFydHMubGVuZ3RoO1xuXG4gIGNvbnRlbnRMZW5ndGggPSB1dGlscy50b0Zpbml0ZU51bWJlcihjb250ZW50TGVuZ3RoKTtcblxuICBjb25zdCBjb21wdXRlZEhlYWRlcnMgPSB7XG4gICAgJ0NvbnRlbnQtVHlwZSc6IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke2JvdW5kYXJ5fWBcbiAgfVxuXG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoY29udGVudExlbmd0aCkpIHtcbiAgICBjb21wdXRlZEhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBjb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgaGVhZGVyc0hhbmRsZXIgJiYgaGVhZGVyc0hhbmRsZXIoY29tcHV0ZWRIZWFkZXJzKTtcblxuICByZXR1cm4gUmVhZGFibGUuZnJvbSgoYXN5bmMgZnVuY3Rpb24gKigpIHtcbiAgICBmb3IoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgeWllbGQgYm91bmRhcnlCeXRlcztcbiAgICAgIHlpZWxkKiBwYXJ0LmVuY29kZSgpO1xuICAgIH1cblxuICAgIHlpZWxkIGZvb3RlckJ5dGVzO1xuICB9KSgpKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9TdHJlYW07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/formDataToStream.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/fromDataURI.js": +/*!*******************************************************!*\ + !*** ./node_modules/axios/lib/helpers/fromDataURI.js ***! + \*******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ fromDataURI)\n/* harmony export */ });\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _parseProtocol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parseProtocol.js */ \"(ssr)/./node_modules/axios/lib/helpers/parseProtocol.js\");\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../platform/index.js */ \"(ssr)/./node_modules/axios/lib/platform/index.js\");\n\n\n\n\n\n\nconst DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\\s\\S]*)$/;\n\n/**\n * Parse data uri to a Buffer or Blob\n *\n * @param {String} uri\n * @param {?Boolean} asBlob\n * @param {?Object} options\n * @param {?Function} options.Blob\n *\n * @returns {Buffer|Blob}\n */\nfunction fromDataURI(uri, asBlob, options) {\n const _Blob = options && options.Blob || _platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].classes.Blob;\n const protocol = (0,_parseProtocol_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(uri);\n\n if (asBlob === undefined && _Blob) {\n asBlob = true;\n }\n\n if (protocol === 'data') {\n uri = protocol.length ? uri.slice(protocol.length + 1) : uri;\n\n const match = DATA_URL_PATTERN.exec(uri);\n\n if (!match) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Invalid URL', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ERR_INVALID_URL);\n }\n\n const mime = match[1];\n const isBase64 = match[2];\n const body = match[3];\n const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8');\n\n if (asBlob) {\n if (!_Blob) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Blob is not supported', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ERR_NOT_SUPPORT);\n }\n\n return new _Blob([buffer], {type: mime});\n }\n\n return buffer;\n }\n\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Unsupported protocol ' + protocol, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ERR_NOT_SUPPORT);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZnJvbURhdGFVUkkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFhOztBQUVrQztBQUNBO0FBQ0g7O0FBRTVDLGtDQUFrQyxJQUFJLFFBQVEsR0FBRzs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxXQUFXO0FBQ3RCO0FBQ0EsYUFBYTtBQUNiO0FBQ2U7QUFDZiwyQ0FBMkMsMERBQVE7QUFDbkQsbUJBQW1CLDZEQUFhOztBQUVoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGdCQUFnQiwyREFBVSxnQkFBZ0IsMkRBQVU7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQiwyREFBVSwwQkFBMEIsMkRBQVU7QUFDaEU7O0FBRUEsa0NBQWtDLFdBQVc7QUFDN0M7O0FBRUE7QUFDQTs7QUFFQSxZQUFZLDJEQUFVLHFDQUFxQywyREFBVTtBQUNyRSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZnJvbURhdGFVUkkuanM/MDBlYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgcGFyc2VQcm90b2NvbCBmcm9tICcuL3BhcnNlUHJvdG9jb2wuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuY29uc3QgREFUQV9VUkxfUEFUVEVSTiA9IC9eKD86KFteO10rKTspPyg/OlteO10rOyk/KGJhc2U2NHwpLChbXFxzXFxTXSopJC87XG5cbi8qKlxuICogUGFyc2UgZGF0YSB1cmkgdG8gYSBCdWZmZXIgb3IgQmxvYlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmlcbiAqIEBwYXJhbSB7P0Jvb2xlYW59IGFzQmxvYlxuICogQHBhcmFtIHs/T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gb3B0aW9ucy5CbG9iXG4gKlxuICogQHJldHVybnMge0J1ZmZlcnxCbG9ifVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmcm9tRGF0YVVSSSh1cmksIGFzQmxvYiwgb3B0aW9ucykge1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5CbG9iIHx8IHBsYXRmb3JtLmNsYXNzZXMuQmxvYjtcbiAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKHVyaSk7XG5cbiAgaWYgKGFzQmxvYiA9PT0gdW5kZWZpbmVkICYmIF9CbG9iKSB7XG4gICAgYXNCbG9iID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm90b2NvbCA9PT0gJ2RhdGEnKSB7XG4gICAgdXJpID0gcHJvdG9jb2wubGVuZ3RoID8gdXJpLnNsaWNlKHByb3RvY29sLmxlbmd0aCArIDEpIDogdXJpO1xuXG4gICAgY29uc3QgbWF0Y2ggPSBEQVRBX1VSTF9QQVRURVJOLmV4ZWModXJpKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdJbnZhbGlkIFVSTCcsIEF4aW9zRXJyb3IuRVJSX0lOVkFMSURfVVJMKTtcbiAgICB9XG5cbiAgICBjb25zdCBtaW1lID0gbWF0Y2hbMV07XG4gICAgY29uc3QgaXNCYXNlNjQgPSBtYXRjaFsyXTtcbiAgICBjb25zdCBib2R5ID0gbWF0Y2hbM107XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZGVjb2RlVVJJQ29tcG9uZW50KGJvZHkpLCBpc0Jhc2U2NCA/ICdiYXNlNjQnIDogJ3V0ZjgnKTtcblxuICAgIGlmIChhc0Jsb2IpIHtcbiAgICAgIGlmICghX0Jsb2IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZCcsIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JUKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBfQmxvYihbYnVmZmVyXSwge3R5cGU6IG1pbWV9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/fromDataURI.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/isAbsoluteURL.js": +/*!*********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ isAbsoluteURL)\n/* harmony export */ });\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzP2U2ZTgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/isAbsoluteURL.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/isAxiosError.js": +/*!********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***! + \********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ isAxiosError)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n\n\n\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(payload) && (payload.isAxiosError === true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWE7O0FBRXFCOztBQUVsQztBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNlO0FBQ2YsU0FBUyxpREFBSztBQUNkIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanM/YzVmNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/isAxiosError.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/isURLSameOrigin.js": +/*!***********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***! + \***********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../platform/index.js */ \"(ssr)/./node_modules/axios/lib/platform/index.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, _platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].origin),\n _platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].navigator && /(msie|trident)/i.test(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].navigator.userAgent)\n) : () => true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTRDOztBQUU1QyxpRUFBZSwwREFBUTtBQUN2QixxQkFBcUIsMERBQVE7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsVUFBVSwwREFBUTtBQUNsQixFQUFFLDBEQUFRLHFDQUFxQywwREFBUTtBQUN2RCxjQUFjLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcz9hN2I3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/ICgob3JpZ2luLCBpc01TSUUpID0+ICh1cmwpID0+IHtcbiAgdXJsID0gbmV3IFVSTCh1cmwsIHBsYXRmb3JtLm9yaWdpbik7XG5cbiAgcmV0dXJuIChcbiAgICBvcmlnaW4ucHJvdG9jb2wgPT09IHVybC5wcm90b2NvbCAmJlxuICAgIG9yaWdpbi5ob3N0ID09PSB1cmwuaG9zdCAmJlxuICAgIChpc01TSUUgfHwgb3JpZ2luLnBvcnQgPT09IHVybC5wb3J0KVxuICApO1xufSkoXG4gIG5ldyBVUkwocGxhdGZvcm0ub3JpZ2luKSxcbiAgcGxhdGZvcm0ubmF2aWdhdG9yICYmIC8obXNpZXx0cmlkZW50KS9pLnRlc3QocGxhdGZvcm0ubmF2aWdhdG9yLnVzZXJBZ2VudClcbikgOiAoKSA9PiB0cnVlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/isURLSameOrigin.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/parseHeaders.js": +/*!********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***! + \********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n\n\n\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWE7O0FBRXFCOztBQUVsQztBQUNBO0FBQ0EsMEJBQTBCLGlEQUFLO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQSxpRUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzPzE3NTYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/parseHeaders.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/parseProtocol.js": +/*!*********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/parseProtocol.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ parseProtocol)\n/* harmony export */ });\n\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWE7O0FBRUU7QUFDZiwwQkFBMEIsS0FBSztBQUMvQjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzP2Y5Y2YiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/parseProtocol.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/progressEventReducer.js": +/*!****************************************************************!*\ + !*** ./node_modules/axios/lib/helpers/progressEventReducer.js ***! + \****************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ asyncDecorator: () => (/* binding */ asyncDecorator),\n/* harmony export */ progressEventDecorator: () => (/* binding */ progressEventDecorator),\n/* harmony export */ progressEventReducer: () => (/* binding */ progressEventReducer)\n/* harmony export */ });\n/* harmony import */ var _speedometer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./speedometer.js */ \"(ssr)/./node_modules/axios/lib/helpers/speedometer.js\");\n/* harmony import */ var _throttle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./throttle.js */ \"(ssr)/./node_modules/axios/lib/helpers/throttle.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n\n\n\n\nconst progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = (0,_speedometer_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(50, 250);\n\n return (0,_throttle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nconst progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nconst asyncDecorator = (fn) => (...args) => _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].asap(() => fn(...args));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQTJDO0FBQ047QUFDTDs7QUFFekI7QUFDUDtBQUNBLHVCQUF1QiwyREFBVzs7QUFFbEMsU0FBUyx3REFBUTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFTyw0Q0FBNEMsaURBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzPzQyNWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNwZWVkb21ldGVyIGZyb20gXCIuL3NwZWVkb21ldGVyLmpzXCI7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSBcIi4vdGhyb3R0bGUuanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbCxcbiAgICAgIFtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXTogdHJ1ZVxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFsobG9hZGVkKSA9PiB0aHJvdHRsZWRbMF0oe1xuICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgdG90YWwsXG4gICAgbG9hZGVkXG4gIH0pLCB0aHJvdHRsZWRbMV1dO1xufVxuXG5leHBvcnQgY29uc3QgYXN5bmNEZWNvcmF0b3IgPSAoZm4pID0+ICguLi5hcmdzKSA9PiB1dGlscy5hc2FwKCgpID0+IGZuKC4uLmFyZ3MpKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/progressEventReducer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/readBlob.js": +/*!****************************************************!*\ + !*** ./node_modules/axios/lib/helpers/readBlob.js ***! + \****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst {asyncIterator} = Symbol;\n\nconst readBlob = async function* (blob) {\n if (blob.stream) {\n yield* blob.stream()\n } else if (blob.arrayBuffer) {\n yield await blob.arrayBuffer()\n } else if (blob[asyncIterator]) {\n yield* blob[asyncIterator]();\n } else {\n yield blob;\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (readBlob);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcmVhZEJsb2IuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sZUFBZTs7QUFFdEI7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3JlYWRCbG9iLmpzPzQ1NDYiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qge2FzeW5jSXRlcmF0b3J9ID0gU3ltYm9sO1xuXG5jb25zdCByZWFkQmxvYiA9IGFzeW5jIGZ1bmN0aW9uKiAoYmxvYikge1xuICBpZiAoYmxvYi5zdHJlYW0pIHtcbiAgICB5aWVsZCogYmxvYi5zdHJlYW0oKVxuICB9IGVsc2UgaWYgKGJsb2IuYXJyYXlCdWZmZXIpIHtcbiAgICB5aWVsZCBhd2FpdCBibG9iLmFycmF5QnVmZmVyKClcbiAgfSBlbHNlIGlmIChibG9iW2FzeW5jSXRlcmF0b3JdKSB7XG4gICAgeWllbGQqIGJsb2JbYXN5bmNJdGVyYXRvcl0oKTtcbiAgfSBlbHNlIHtcbiAgICB5aWVsZCBibG9iO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlYWRCbG9iO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/readBlob.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/resolveConfig.js": +/*!*********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/resolveConfig.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../platform/index.js */ \"(ssr)/./node_modules/axios/lib/platform/index.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _isURLSameOrigin_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isURLSameOrigin.js */ \"(ssr)/./node_modules/axios/lib/helpers/isURLSameOrigin.js\");\n/* harmony import */ var _cookies_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./cookies.js */ \"(ssr)/./node_modules/axios/lib/helpers/cookies.js\");\n/* harmony import */ var _core_buildFullPath_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/buildFullPath.js */ \"(ssr)/./node_modules/axios/lib/core/buildFullPath.js\");\n/* harmony import */ var _core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/mergeConfig.js */ \"(ssr)/./node_modules/axios/lib/core/mergeConfig.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n/* harmony import */ var _buildURL_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./buildURL.js */ \"(ssr)/./node_modules/axios/lib/helpers/buildURL.js\");\n\n\n\n\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((config) => {\n const newConfig = (0,_core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(headers);\n\n newConfig.url = (0,_buildURL_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_core_buildFullPath_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].isFormData(data)) {\n if (_platform_index_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].hasStandardBrowserEnv || _platform_index_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (_platform_index_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].hasStandardBrowserEnv) {\n withXSRFToken && _utils_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && (0,_isURLSameOrigin_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && _cookies_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n});\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBNEM7QUFDWjtBQUNtQjtBQUNoQjtBQUNrQjtBQUNKO0FBQ0U7QUFDZDs7QUFFckMsaUVBQWU7QUFDZixvQkFBb0IsZ0VBQVcsR0FBRzs7QUFFbEMsT0FBTyxvRUFBb0U7O0FBRTNFLGdDQUFnQyw2REFBWTs7QUFFNUMsa0JBQWtCLHdEQUFRLENBQUMsa0VBQWE7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNLGlEQUFLO0FBQ1gsUUFBUSwwREFBUSwwQkFBMEIsMERBQVE7QUFDbEQseUNBQXlDO0FBQ3pDLE1BQU07QUFDTjtBQUNBLGtFQUFrRTtBQUNsRSxnRkFBZ0Y7QUFDaEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSwwREFBUTtBQUNkLHFCQUFxQixpREFBSzs7QUFFMUIscURBQXFELCtEQUFlO0FBQ3BFO0FBQ0EsNERBQTRELG1EQUFPOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qcz9jZDI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwbGF0Zm9ybSBmcm9tIFwiLi4vcGxhdGZvcm0vaW5kZXguanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcbmltcG9ydCBpc1VSTFNhbWVPcmlnaW4gZnJvbSBcIi4vaXNVUkxTYW1lT3JpZ2luLmpzXCI7XG5pbXBvcnQgY29va2llcyBmcm9tIFwiLi9jb29raWVzLmpzXCI7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tIFwiLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzXCI7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSBcIi4uL2NvcmUvbWVyZ2VDb25maWcuanNcIjtcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSBcIi4vYnVpbGRVUkwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGNvbmZpZykgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICBsZXQge2RhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aH0gPSBuZXdDb25maWc7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oaGVhZGVycyk7XG5cbiAgbmV3Q29uZmlnLnVybCA9IGJ1aWxkVVJMKGJ1aWxkRnVsbFBhdGgobmV3Q29uZmlnLmJhc2VVUkwsIG5ld0NvbmZpZy51cmwsIG5ld0NvbmZpZy5hbGxvd0Fic29sdXRlVXJscyksIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcblxuICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gIGlmIChhdXRoKSB7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArXG4gICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgucGFzc3dvcmQpKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUodW5kZWZpbmVkKTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpKSAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBbdHlwZSwgLi4udG9rZW5zXSA9IGNvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKS5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoW3R5cGUgfHwgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAuLi50b2tlbnNdLmpvaW4oJzsgJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscy5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTtcblxuICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4obmV3Q29uZmlnLnVybCkpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn1cblxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/resolveConfig.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/speedometer.js": +/*!*******************************************************!*\ + !*** ./node_modules/axios/lib/helpers/speedometer.js ***! + \*******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (speedometer);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFhOztBQUViO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSxXQUFXLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzPzVjZWYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGVlZG9tZXRlcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/speedometer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/spread.js": +/*!**************************************************!*\ + !*** ./node_modules/axios/lib/helpers/spread.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ spread)\n/* harmony export */ });\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanM/YTAzZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/spread.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/throttle.js": +/*!****************************************************!*\ + !*** ./node_modules/axios/lib/helpers/throttle.js ***! + \****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (throttle);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpRUFBZSxRQUFRLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Rocm90dGxlLmpzP2JmYjgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBsZXQgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCBsYXN0QXJncztcbiAgbGV0IHRpbWVyO1xuXG4gIGNvbnN0IGludm9rZSA9IChhcmdzLCBub3cgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgdGltZXN0YW1wID0gbm93O1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9XG5cbiAgY29uc3QgdGhyb3R0bGVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHBhc3NlZCA9IG5vdyAtIHRpbWVzdGFtcDtcbiAgICBpZiAoIHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncylcbiAgICAgICAgfSwgdGhyZXNob2xkIC0gcGFzc2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBmbHVzaCA9ICgpID0+IGxhc3RBcmdzICYmIGludm9rZShsYXN0QXJncyk7XG5cbiAgcmV0dXJuIFt0aHJvdHRsZWQsIGZsdXNoXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGhyb3R0bGU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/throttle.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/toFormData.js": +/*!******************************************************!*\ + !*** ./node_modules/axios/lib/helpers/toFormData.js ***! + \******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _platform_node_classes_FormData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../platform/node/classes/FormData.js */ \"(ssr)/./node_modules/axios/lib/platform/node/classes/FormData.js\");\n\n\n\n\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\n\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isPlainObject(thing) || _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toFlatObject(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (_platform_node_classes_FormData_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isSpecCompliantForm(formData);\n\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBlob(value)) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Blob is not supported. Use a Buffer instead.');\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArrayBuffer(value) || _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(value) && isFlatArray(value)) ||\n ((_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFileList(value) || _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].endsWith(key, '[]')) && (arr = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(value, function each(el, key) {\n const result = !(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(el) || el === null) && visitor.call(\n formData, el, _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toFormData);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWE7O0FBRW1CO0FBQ2U7QUFDL0M7QUFDb0U7O0FBRXBFO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUyxpREFBSyx5QkFBeUIsaURBQUs7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxTQUFTLGlEQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTLGlEQUFLO0FBQ2Q7O0FBRUEsbUJBQW1CLGlEQUFLLGNBQWMsaURBQUssSUFBSTtBQUMvQztBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsUUFBUTtBQUNuQixXQUFXLHFCQUFxQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8saURBQUs7QUFDWjtBQUNBOztBQUVBO0FBQ0EsOEJBQThCLDBFQUFnQjs7QUFFOUM7QUFDQSxZQUFZLGlEQUFLO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLFlBQVksaURBQUs7QUFDakIsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsaURBQUs7O0FBRWhDLE9BQU8saURBQUs7QUFDWjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsUUFBUSxpREFBSztBQUNiO0FBQ0E7O0FBRUEsb0JBQW9CLGlEQUFLO0FBQ3pCLGdCQUFnQiwyREFBVTtBQUMxQjs7QUFFQSxRQUFRLGlEQUFLLHlCQUF5QixpREFBSztBQUMzQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxHQUFHO0FBQ2hCLGFBQWEsZUFBZTtBQUM1QixhQUFhLHNCQUFzQjtBQUNuQyxZQUFZO0FBQ1o7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxpREFBSyxrQkFBa0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsU0FBUyxpREFBSztBQUNkLFVBQVUsaURBQUssc0JBQXNCLGlEQUFLLGdDQUFnQyxpREFBSztBQUMvRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLGlEQUFLO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxRQUFRLGlEQUFLOztBQUViO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxJQUFJLGlEQUFLO0FBQ1QsdUJBQXVCLGlEQUFLO0FBQzVCLHNCQUFzQixpREFBSztBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUEsT0FBTyxpREFBSztBQUNaO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxpRUFBZSxVQUFVLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanM/Nzc5YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuLy8gdGVtcG9yYXJ5IGhvdGZpeCB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzIHVudGlsIEF4aW9zVVJMU2VhcmNoUGFyYW1zIGlzIHJlZmFjdG9yZWRcbmltcG9ydCBQbGF0Zm9ybUZvcm1EYXRhIGZyb20gJy4uL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKFBsYXRmb3JtRm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/toFormData.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/toURLEncodedForm.js": +/*!************************************************************!*\ + !*** ./node_modules/axios/lib/helpers/toURLEncodedForm.js ***! + \************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ toURLEncodedForm)\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.js */ \"(ssr)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _toFormData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toFormData.js */ \"(ssr)/./node_modules/axios/lib/helpers/toFormData.js\");\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../platform/index.js */ \"(ssr)/./node_modules/axios/lib/platform/index.js\");\n\n\n\n\n\n\nfunction toURLEncodedForm(data, options) {\n return (0,_toFormData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(data, new _platform_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (_platform_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isNode && _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWE7O0FBRW1CO0FBQ1M7QUFDRzs7QUFFN0I7QUFDZixTQUFTLDBEQUFVLFdBQVcsMERBQVE7QUFDdEM7QUFDQSxVQUFVLDBEQUFRLFdBQVcsaURBQUs7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanM/Nzc0OSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/toURLEncodedForm.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/trackStream.js": +/*!*******************************************************!*\ + !*** ./node_modules/axios/lib/helpers/trackStream.js ***! + \*******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ readBytes: () => (/* binding */ readBytes),\n/* harmony export */ streamChunk: () => (/* binding */ streamChunk),\n/* harmony export */ trackStream: () => (/* binding */ trackStream)\n/* harmony export */ });\n\nconst streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nconst readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nconst trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdHJhY2tTdHJlYW0uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsYUFBYSxhQUFhO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWE7O0FBRTVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdHJhY2tTdHJlYW0uanM/N2ZjMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmV4cG9ydCBjb25zdCBzdHJlYW1DaHVuayA9IGZ1bmN0aW9uKiAoY2h1bmssIGNodW5rU2l6ZSkge1xuICBsZXQgbGVuID0gY2h1bmsuYnl0ZUxlbmd0aDtcblxuICBpZiAoIWNodW5rU2l6ZSB8fCBsZW4gPCBjaHVua1NpemUpIHtcbiAgICB5aWVsZCBjaHVuaztcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgbGV0IGVuZDtcblxuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgZW5kID0gcG9zICsgY2h1bmtTaXplO1xuICAgIHlpZWxkIGNodW5rLnNsaWNlKHBvcywgZW5kKTtcbiAgICBwb3MgPSBlbmQ7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRTdHJlYW0oaXRlcmFibGUpKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKGNodW5rLCBjaHVua1NpemUpO1xuICB9XG59XG5cbmNvbnN0IHJlYWRTdHJlYW0gPSBhc3luYyBmdW5jdGlvbiogKHN0cmVhbSkge1xuICBpZiAoc3RyZWFtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgIHlpZWxkKiBzdHJlYW07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICB0cnkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB5aWVsZCB2YWx1ZTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcmVhZGVyLmNhbmNlbCgpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSByZWFkQnl0ZXMoc3RyZWFtLCBjaHVua1NpemUpO1xuXG4gIGxldCBieXRlcyA9IDA7XG4gIGxldCBkb25lO1xuICBsZXQgX29uRmluaXNoID0gKGUpID0+IHtcbiAgICBpZiAoIWRvbmUpIHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgb25GaW5pc2ggJiYgb25GaW5pc2goZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICBfb25GaW5pc2goKTtcbiAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxlbiA9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChvblByb2dyZXNzKSB7XG4gICAgICAgICAgbGV0IGxvYWRlZEJ5dGVzID0gYnl0ZXMgKz0gbGVuO1xuICAgICAgICAgIG9uUHJvZ3Jlc3MobG9hZGVkQnl0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIF9vbkZpbmlzaChlcnIpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSxcbiAgICBjYW5jZWwocmVhc29uKSB7XG4gICAgICBfb25GaW5pc2gocmVhc29uKTtcbiAgICAgIHJldHVybiBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAyXG4gIH0pXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/trackStream.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/helpers/validator.js": +/*!*****************************************************!*\ + !*** ./node_modules/axios/lib/helpers/validator.js ***! + \*****************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _env_data_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../env/data.js */ \"(ssr)/./node_modules/axios/lib/env/data.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(ssr)/./node_modules/axios/lib/core/AxiosError.js\");\n\n\n\n\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + _env_data_js__WEBPACK_IMPORTED_MODULE_0__.VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('options must be an object', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('option ' + opt + ' must be ' + result, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('Unknown option ' + opt, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ERR_BAD_OPTION);\n }\n }\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n assertOptions,\n validators\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFhOztBQUUwQjtBQUNROztBQUUvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1CQUFtQjtBQUM5QixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpREFBTztBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkRBQVU7QUFDMUI7QUFDQSxRQUFRLDJEQUFVO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixLQUFLLDZCQUE2QixnQkFBZ0I7QUFDdEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQSxjQUFjLDJEQUFVLDhCQUE4QiwyREFBVTtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwyREFBVSx5Q0FBeUMsMkRBQVU7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMkRBQVUsMEJBQTBCLDJEQUFVO0FBQzlEO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZTtBQUNmO0FBQ0E7QUFDQSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcz9iNGY2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxudmFsaWRhdG9ycy5zcGVsbGluZyA9IGZ1bmN0aW9uIHNwZWxsaW5nKGNvcnJlY3RTcGVsbGluZykge1xuICByZXR1cm4gKHZhbHVlLCBvcHQpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihgJHtvcHR9IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7Y29ycmVjdFNwZWxsaW5nfWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yc1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/helpers/validator.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/platform/common/utils.js": +/*!*********************************************************!*\ + !*** ./node_modules/axios/lib/platform/common/utils.js ***! + \*********************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ hasBrowserEnv: () => (/* binding */ hasBrowserEnv),\n/* harmony export */ hasStandardBrowserEnv: () => (/* binding */ hasStandardBrowserEnv),\n/* harmony export */ hasStandardBrowserWebWorkerEnv: () => (/* binding */ hasStandardBrowserWebWorkerEnv),\n/* harmony export */ navigator: () => (/* binding */ _navigator),\n/* harmony export */ origin: () => (/* binding */ origin)\n/* harmony export */ });\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2NvbW1vbi91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQVFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzPzA0MzIiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IF9uYXZpZ2F0b3IgPSB0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJiBuYXZpZ2F0b3IgfHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gaGFzQnJvd3NlckVudiAmJlxuICAoIV9uYXZpZ2F0b3IgfHwgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKF9uYXZpZ2F0b3IucHJvZHVjdCkgPCAwKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBfbmF2aWdhdG9yIGFzIG5hdmlnYXRvcixcbiAgb3JpZ2luXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/platform/common/utils.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/platform/index.js": +/*!**************************************************!*\ + !*** ./node_modules/axios/lib/platform/index.js ***! + \**************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node/index.js */ \"(ssr)/./node_modules/axios/lib/platform/node/index.js\");\n/* harmony import */ var _common_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common/utils.js */ \"(ssr)/./node_modules/axios/lib/platform/common/utils.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n ..._common_utils_js__WEBPACK_IMPORTED_MODULE_0__,\n ..._node_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1QztBQUNJOztBQUUzQyxpRUFBZTtBQUNmLEtBQUssNkNBQUs7QUFDVixLQUFLLHNEQUFRO0FBQ2IsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2luZGV4LmpzPzc4NTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4vbm9kZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2NvbW1vbi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtXG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/platform/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/platform/node/classes/FormData.js": +/*!******************************************************************!*\ + !*** ./node_modules/axios/lib/platform/node/classes/FormData.js ***! + \******************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var form_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! form-data */ \"(ssr)/./node_modules/form-data/lib/form_data.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (form_data__WEBPACK_IMPORTED_MODULE_0__);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFpQzs7QUFFakMsaUVBQWUsc0NBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcz84NmQyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuXG5leHBvcnQgZGVmYXVsdCBGb3JtRGF0YTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/platform/node/classes/FormData.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/platform/node/classes/URLSearchParams.js": +/*!*************************************************************************!*\ + !*** ./node_modules/axios/lib/platform/node/classes/URLSearchParams.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! url */ \"url\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (url__WEBPACK_IMPORTED_MODULE_0__.URLSearchParams);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBYTs7QUFFUztBQUN0QixpRUFBZSxnREFBbUIsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanM/NDdkNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmV4cG9ydCBkZWZhdWx0IHVybC5VUkxTZWFyY2hQYXJhbXM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/platform/node/classes/URLSearchParams.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/platform/node/index.js": +/*!*******************************************************!*\ + !*** ./node_modules/axios/lib/platform/node/index.js ***! + \*******************************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! crypto */ \"crypto\");\n/* harmony import */ var _classes_URLSearchParams_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./classes/URLSearchParams.js */ \"(ssr)/./node_modules/axios/lib/platform/node/classes/URLSearchParams.js\");\n/* harmony import */ var _classes_FormData_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./classes/FormData.js */ \"(ssr)/./node_modules/axios/lib/platform/node/classes/FormData.js\");\n\n\n\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n const randomValues = new Uint32Array(size);\n crypto__WEBPACK_IMPORTED_MODULE_0__.randomFillSync(randomValues);\n for (let i = 0; i < size; i++) {\n str += alphabet[randomValues[i] % length];\n }\n\n return str;\n}\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n isNode: true,\n classes: {\n URLSearchParams: _classes_URLSearchParams_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n FormData: _classes_FormData_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n Blob: typeof Blob !== 'undefined' && Blob || null\n },\n ALPHABET,\n generateString,\n protocols: [ 'http', 'https', 'file', 'data' ]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL25vZGUvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE0QjtBQUM4QjtBQUNkOztBQUU1Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTLFFBQVE7QUFDakI7QUFDQSxFQUFFLGtEQUFxQjtBQUN2QixrQkFBa0IsVUFBVTtBQUM1QjtBQUNBOztBQUVBO0FBQ0E7OztBQUdBLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQixZQUFZO0FBQ1o7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vbm9kZS9pbmRleC5qcz84OTliIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnXG5cbmNvbnN0IEFMUEhBID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIGNvbnN0IHJhbmRvbVZhbHVlcyA9IG5ldyBVaW50MzJBcnJheShzaXplKTtcbiAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKHJhbmRvbVZhbHVlcyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W3JhbmRvbVZhbHVlc1tpXSAlIGxlbmd0aF07XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNOb2RlOiB0cnVlLFxuICBjbGFzc2VzOiB7XG4gICAgVVJMU2VhcmNoUGFyYW1zLFxuICAgIEZvcm1EYXRhLFxuICAgIEJsb2I6IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iIHx8IG51bGxcbiAgfSxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBwcm90b2NvbHM6IFsgJ2h0dHAnLCAnaHR0cHMnLCAnZmlsZScsICdkYXRhJyBdXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/platform/node/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/axios/lib/utils.js": +/*!*****************************************!*\ + !*** ./node_modules/axios/lib/utils.js ***! + \*****************************************/ +/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _helpers_bind_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/bind.js */ \"(ssr)/./node_modules/axios/lib/helpers/bind.js\");\n\n\n\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = (0,_helpers_bind_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWE7O0FBRXdCOztBQUVyQzs7QUFFQSxPQUFPLFVBQVU7QUFDakIsT0FBTyxnQkFBZ0I7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0EsT0FBTyxTQUFTOztBQUVoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLFVBQVU7QUFDckI7QUFDQSxXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiO0FBQ0EsMkJBQTJCLG9CQUFvQixJQUFJO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLE9BQU87QUFDdkM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixTQUFTLEdBQUcsU0FBUztBQUM1Qyw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0EsU0FBUyxVQUFVO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sa0NBQWtDO0FBQ2xDLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxXQUFXLFNBQVM7QUFDcEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsZ0NBQWdDLFdBQVcsSUFBSTtBQUMvQztBQUNBO0FBQ0EsZUFBZSw0REFBSTtBQUNuQixNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUcsR0FBRyxXQUFXO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLFVBQVU7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCLGVBQWU7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQyxhQUFhO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFdBQVcsY0FBYztBQUM1QixDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3V0aWxzLmpzPzgwN2IiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn1cblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSA9ICt2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn1cblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG4vLyBvcmlnaW5hbCBjb2RlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGlnaXRhbEJyYWluSlMvQXhpb3NQcm9taXNlL2Jsb2IvMTZkZWFiMTM3MTBlYzA5Nzc5OTIyMTMxZjNmYTU5NTQzMjBmODNhYi9saWIvdXRpbHMuanMjTDExLUwzNFxuXG5jb25zdCBfc2V0SW1tZWRpYXRlID0gKChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQsIHBvc3RNZXNzYWdlU3VwcG9ydGVkKSA9PiB7XG4gIGlmIChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICB9XG5cbiAgcmV0dXJuIHBvc3RNZXNzYWdlU3VwcG9ydGVkID8gKCh0b2tlbiwgY2FsbGJhY2tzKSA9PiB7XG4gICAgX2dsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoe3NvdXJjZSwgZGF0YX0pID0+IHtcbiAgICAgIGlmIChzb3VyY2UgPT09IF9nbG9iYWwgJiYgZGF0YSA9PT0gdG9rZW4pIHtcbiAgICAgICAgY2FsbGJhY2tzLmxlbmd0aCAmJiBjYWxsYmFja3Muc2hpZnQoKSgpO1xuICAgICAgfVxuICAgIH0sIGZhbHNlKTtcblxuICAgIHJldHVybiAoY2IpID0+IHtcbiAgICAgIGNhbGxiYWNrcy5wdXNoKGNiKTtcbiAgICAgIF9nbG9iYWwucG9zdE1lc3NhZ2UodG9rZW4sIFwiKlwiKTtcbiAgICB9XG4gIH0pKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCwgW10pIDogKGNiKSA9PiBzZXRUaW1lb3V0KGNiKTtcbn0pKFxuICB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nLFxuICBpc0Z1bmN0aW9uKF9nbG9iYWwucG9zdE1lc3NhZ2UpXG4pO1xuXG5jb25zdCBhc2FwID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrICE9PSAndW5kZWZpbmVkJyA/XG4gIHF1ZXVlTWljcm90YXNrLmJpbmQoX2dsb2JhbCkgOiAoIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5leHRUaWNrIHx8IF9zZXRJbW1lZGlhdGUpO1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKipcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlLFxuICBzZXRJbW1lZGlhdGU6IF9zZXRJbW1lZGlhdGUsXG4gIGFzYXBcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/axios/lib/utils.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/call-bind-apply-helpers.js b/frontend/.next/server/vendor-chunks/call-bind-apply-helpers.js new file mode 100644 index 000000000..91f3bb09a --- /dev/null +++ b/frontend/.next/server/vendor-chunks/call-bind-apply-helpers.js @@ -0,0 +1,65 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/call-bind-apply-helpers"; +exports.ids = ["vendor-chunks/call-bind-apply-helpers"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/call-bind-apply-helpers/actualApply.js": +/*!*************************************************************!*\ + !*** ./node_modules/call-bind-apply-helpers/actualApply.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar bind = __webpack_require__(/*! function-bind */ \"(ssr)/./node_modules/function-bind/index.js\");\n\nvar $apply = __webpack_require__(/*! ./functionApply */ \"(ssr)/./node_modules/call-bind-apply-helpers/functionApply.js\");\nvar $call = __webpack_require__(/*! ./functionCall */ \"(ssr)/./node_modules/call-bind-apply-helpers/functionCall.js\");\nvar $reflectApply = __webpack_require__(/*! ./reflectApply */ \"(ssr)/./node_modules/call-bind-apply-helpers/reflectApply.js\");\n\n/** @type {import('./actualApply')} */\nmodule.exports = $reflectApply || bind.call($call, $apply);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvYWN0dWFsQXBwbHkuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsV0FBVyxtQkFBTyxDQUFDLGtFQUFlOztBQUVsQyxhQUFhLG1CQUFPLENBQUMsc0ZBQWlCO0FBQ3RDLFlBQVksbUJBQU8sQ0FBQyxvRkFBZ0I7QUFDcEMsb0JBQW9CLG1CQUFPLENBQUMsb0ZBQWdCOztBQUU1QyxXQUFXLHlCQUF5QjtBQUNwQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvYWN0dWFsQXBwbHkuanM/M2FkZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG52YXIgJGFwcGx5ID0gcmVxdWlyZSgnLi9mdW5jdGlvbkFwcGx5Jyk7XG52YXIgJGNhbGwgPSByZXF1aXJlKCcuL2Z1bmN0aW9uQ2FsbCcpO1xudmFyICRyZWZsZWN0QXBwbHkgPSByZXF1aXJlKCcuL3JlZmxlY3RBcHBseScpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9hY3R1YWxBcHBseScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSAkcmVmbGVjdEFwcGx5IHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/call-bind-apply-helpers/actualApply.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/call-bind-apply-helpers/functionApply.js": +/*!***************************************************************!*\ + !*** ./node_modules/call-bind-apply-helpers/functionApply.js ***! + \***************************************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./functionApply')} */\nmodule.exports = Function.prototype.apply;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25BcHBseS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLDJCQUEyQjtBQUN0QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25BcHBseS5qcz8zNGYyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vZnVuY3Rpb25BcHBseScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/call-bind-apply-helpers/functionApply.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/call-bind-apply-helpers/functionCall.js": +/*!**************************************************************!*\ + !*** ./node_modules/call-bind-apply-helpers/functionCall.js ***! + \**************************************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./functionCall')} */\nmodule.exports = Function.prototype.call;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25DYWxsLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsMEJBQTBCO0FBQ3JDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9mdW5jdGlvbkNhbGwuanM/OTgwZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2Z1bmN0aW9uQ2FsbCcpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/call-bind-apply-helpers/functionCall.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/call-bind-apply-helpers/index.js": +/*!*******************************************************!*\ + !*** ./node_modules/call-bind-apply-helpers/index.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar bind = __webpack_require__(/*! function-bind */ \"(ssr)/./node_modules/function-bind/index.js\");\nvar $TypeError = __webpack_require__(/*! es-errors/type */ \"(ssr)/./node_modules/es-errors/type.js\");\n\nvar $call = __webpack_require__(/*! ./functionCall */ \"(ssr)/./node_modules/call-bind-apply-helpers/functionCall.js\");\nvar $actualApply = __webpack_require__(/*! ./actualApply */ \"(ssr)/./node_modules/call-bind-apply-helpers/actualApply.js\");\n\n/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */\nmodule.exports = function callBindBasic(args) {\n\tif (args.length < 1 || typeof args[0] !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\treturn $actualApply(bind, $call, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsV0FBVyxtQkFBTyxDQUFDLGtFQUFlO0FBQ2xDLGlCQUFpQixtQkFBTyxDQUFDLDhEQUFnQjs7QUFFekMsWUFBWSxtQkFBTyxDQUFDLG9GQUFnQjtBQUNwQyxtQkFBbUIsbUJBQU8sQ0FBQyxrRkFBZTs7QUFFMUMsV0FBVyx1RUFBdUU7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9pbmRleC5qcz9iOGFjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG5cbnZhciAkY2FsbCA9IHJlcXVpcmUoJy4vZnVuY3Rpb25DYWxsJyk7XG52YXIgJGFjdHVhbEFwcGx5ID0gcmVxdWlyZSgnLi9hY3R1YWxBcHBseScpO1xuXG4vKiogQHR5cGUgeyhhcmdzOiBbRnVuY3Rpb24sIHRoaXNBcmc/OiB1bmtub3duLCAuLi5hcmdzOiB1bmtub3duW11dKSA9PiBGdW5jdGlvbn0gVE9ETyBGSVhNRSwgZmluZCBhIHdheSB0byB1c2UgaW1wb3J0KCcuJykgKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmRCYXNpYyhhcmdzKSB7XG5cdGlmIChhcmdzLmxlbmd0aCA8IDEgfHwgdHlwZW9mIGFyZ3NbMF0gIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYSBmdW5jdGlvbiBpcyByZXF1aXJlZCcpO1xuXHR9XG5cdHJldHVybiAkYWN0dWFsQXBwbHkoYmluZCwgJGNhbGwsIGFyZ3MpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/call-bind-apply-helpers/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/call-bind-apply-helpers/reflectApply.js": +/*!**************************************************************!*\ + !*** ./node_modules/call-bind-apply-helpers/reflectApply.js ***! + \**************************************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./reflectApply')} */\nmodule.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvcmVmbGVjdEFwcGx5LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsMEJBQTBCO0FBQ3JDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9yZWZsZWN0QXBwbHkuanM/YzMxZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3JlZmxlY3RBcHBseScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgUmVmbGVjdCAmJiBSZWZsZWN0LmFwcGx5O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/call-bind-apply-helpers/reflectApply.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/combined-stream.js b/frontend/.next/server/vendor-chunks/combined-stream.js new file mode 100644 index 000000000..f61930544 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/combined-stream.js @@ -0,0 +1,24 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/combined-stream"; +exports.ids = ["vendor-chunks/combined-stream"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/combined-stream/lib/combined_stream.js": +/*!*************************************************************!*\ + !*** ./node_modules/combined-stream/lib/combined_stream.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("var util = __webpack_require__(/*! util */ \"util\");\nvar Stream = (__webpack_require__(/*! stream */ \"stream\").Stream);\nvar DelayedStream = __webpack_require__(/*! delayed-stream */ \"(ssr)/./node_modules/delayed-stream/lib/delayed_stream.js\");\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n this._insideLoop = false;\n this._pendingNext = false;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== 'function')\n && (typeof stream !== 'string')\n && (typeof stream !== 'boolean')\n && (typeof stream !== 'number')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on('data', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n\n if (this._insideLoop) {\n this._pendingNext = true;\n return; // defer call\n }\n\n this._insideLoop = true;\n try {\n do {\n this._pendingNext = false;\n this._realGetNext();\n } while (this._pendingNext);\n } finally {\n this._insideLoop = false;\n }\n};\n\nCombinedStream.prototype._realGetNext = function() {\n var stream = this._streams.shift();\n\n\n if (typeof stream == 'undefined') {\n this.end();\n return;\n }\n\n if (typeof stream !== 'function') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('data', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n this._pipeNext(stream);\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on('end', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on('error', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit('data', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();\n this.emit('pause');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();\n this.emit('resume');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit('end');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit('close');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit('error', err);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvY29tYmluZWQtc3RyZWFtL2xpYi9jb21iaW5lZF9zdHJlYW0uanMiLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLGtCQUFNO0FBQ3pCLGFBQWEsb0RBQXdCO0FBQ3JDLG9CQUFvQixtQkFBTyxDQUFDLGlGQUFnQjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixXQUFXO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9jb21iaW5lZC1zdHJlYW0vbGliL2NvbWJpbmVkX3N0cmVhbS5qcz9kMThlIl0sInNvdXJjZXNDb250ZW50IjpbInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBEZWxheWVkU3RyZWFtID0gcmVxdWlyZSgnZGVsYXllZC1zdHJlYW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb21iaW5lZFN0cmVhbTtcbmZ1bmN0aW9uIENvbWJpbmVkU3RyZWFtKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICB0aGlzLmRhdGFTaXplID0gMDtcbiAgdGhpcy5tYXhEYXRhU2l6ZSA9IDIgKiAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbXMgPSB0cnVlO1xuXG4gIHRoaXMuX3JlbGVhc2VkID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG4gIHRoaXMuX2luc2lkZUxvb3AgPSBmYWxzZTtcbiAgdGhpcy5fcGVuZGluZ05leHQgPSBmYWxzZTtcbn1cbnV0aWwuaW5oZXJpdHMoQ29tYmluZWRTdHJlYW0sIFN0cmVhbSk7XG5cbkNvbWJpbmVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIGNvbWJpbmVkU3RyZWFtID0gbmV3IHRoaXMoKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICBjb21iaW5lZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkU3RyZWFtO1xufTtcblxuQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHJldHVybiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ3N0cmluZycpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdib29sZWFuJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ251bWJlcicpXG4gICAgJiYgKCFCdWZmZXIuaXNCdWZmZXIoc3RyZWFtKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcblxuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgaWYgKCEoc3RyZWFtIGluc3RhbmNlb2YgRGVsYXllZFN0cmVhbSkpIHtcbiAgICAgIHZhciBuZXdTdHJlYW0gPSBEZWxheWVkU3RyZWFtLmNyZWF0ZShzdHJlYW0sIHtcbiAgICAgICAgbWF4RGF0YVNpemU6IEluZmluaXR5LFxuICAgICAgICBwYXVzZVN0cmVhbTogdGhpcy5wYXVzZVN0cmVhbXMsXG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIHRoaXMuX2NoZWNrRGF0YVNpemUuYmluZCh0aGlzKSk7XG4gICAgICBzdHJlYW0gPSBuZXdTdHJlYW07XG4gICAgfVxuXG4gICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG5cbiAgICBpZiAodGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX3N0cmVhbXMucHVzaChzdHJlYW0pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgb3B0aW9ucykge1xuICBTdHJlYW0ucHJvdG90eXBlLnBpcGUuY2FsbCh0aGlzLCBkZXN0LCBvcHRpb25zKTtcbiAgdGhpcy5yZXN1bWUoKTtcbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2dldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG5cbiAgaWYgKHRoaXMuX2luc2lkZUxvb3ApIHtcbiAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IHRydWU7XG4gICAgcmV0dXJuOyAvLyBkZWZlciBjYWxsXG4gIH1cblxuICB0aGlzLl9pbnNpZGVMb29wID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBkbyB7XG4gICAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVhbEdldE5leHQoKTtcbiAgICB9IHdoaWxlICh0aGlzLl9wZW5kaW5nTmV4dCk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3JlYWxHZXROZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdHJlYW0gPSB0aGlzLl9zdHJlYW1zLnNoaWZ0KCk7XG5cblxuICBpZiAodHlwZW9mIHN0cmVhbSA9PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMuZW5kKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9waXBlTmV4dChzdHJlYW0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXRTdHJlYW0gPSBzdHJlYW07XG4gIGdldFN0cmVhbShmdW5jdGlvbihzdHJlYW0pIHtcbiAgICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gICAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuX2hhbmRsZUVycm9ycyhzdHJlYW0pO1xuICAgIH1cblxuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3BpcGVOZXh0ID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBzdHJlYW07XG5cbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgc3RyZWFtLm9uKCdlbmQnLCB0aGlzLl9nZXROZXh0LmJpbmQodGhpcykpO1xuICAgIHN0cmVhbS5waXBlKHRoaXMsIHtlbmQ6IGZhbHNlfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gc3RyZWFtO1xuICB0aGlzLndyaXRlKHZhbHVlKTtcbiAgdGhpcy5fZ2V0TmV4dCgpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFcnJvcnMgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgc2VsZi5fZW1pdEVycm9yKGVycik7XG4gIH0pO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICB0aGlzLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMucGF1c2VTdHJlYW1zKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSgpO1xuICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5fZ2V0TmV4dCgpO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUpID09ICdmdW5jdGlvbicpIHRoaXMuX2N1cnJlbnRTdHJlYW0ucmVzdW1lKCk7XG4gIHRoaXMuZW1pdCgncmVzdW1lJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnZW5kJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl91cGRhdGVEYXRhU2l6ZSgpO1xuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nO1xuICB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fdXBkYXRlRGF0YVNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9zdHJlYW1zLmZvckVhY2goZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgaWYgKCFzdHJlYW0uZGF0YVNpemUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZWxmLmRhdGFTaXplICs9IHN0cmVhbS5kYXRhU2l6ZTtcbiAgfSk7XG5cbiAgaWYgKHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZSkge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZTtcbiAgfVxufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9lbWl0RXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/combined-stream/lib/combined_stream.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/debug.js b/frontend/.next/server/vendor-chunks/debug.js new file mode 100644 index 000000000..f047e92c5 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/debug.js @@ -0,0 +1,54 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/debug"; +exports.ids = ["vendor-chunks/debug"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/debug/src/browser.js": +/*!*******************************************!*\ + !*** ./node_modules/debug/src/browser.js ***! + \*******************************************/ +/***/ ((module, exports, __webpack_require__) => { + +eval("/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = __webpack_require__(/*! ./common */ \"(ssr)/./node_modules/debug/src/common.js\")(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjtBQUNsQixZQUFZO0FBQ1osWUFBWTtBQUNaLGlCQUFpQjtBQUNqQixlQUFlO0FBQ2YsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDRDQUE0Qzs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDBEQUFVOztBQUVuQyxPQUFPLFlBQVk7O0FBRW5CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcz9lOTZhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuZXhwb3J0cy5kZXN0cm95ID0gKCgpID0+IHtcblx0bGV0IHdhcm5lZCA9IGZhbHNlO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKCF3YXJuZWQpIHtcblx0XHRcdHdhcm5lZCA9IHRydWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcblx0JyMwMDAwQ0MnLFxuXHQnIzAwMDBGRicsXG5cdCcjMDAzM0NDJyxcblx0JyMwMDMzRkYnLFxuXHQnIzAwNjZDQycsXG5cdCcjMDA2NkZGJyxcblx0JyMwMDk5Q0MnLFxuXHQnIzAwOTlGRicsXG5cdCcjMDBDQzAwJyxcblx0JyMwMENDMzMnLFxuXHQnIzAwQ0M2NicsXG5cdCcjMDBDQzk5Jyxcblx0JyMwMENDQ0MnLFxuXHQnIzAwQ0NGRicsXG5cdCcjMzMwMENDJyxcblx0JyMzMzAwRkYnLFxuXHQnIzMzMzNDQycsXG5cdCcjMzMzM0ZGJyxcblx0JyMzMzY2Q0MnLFxuXHQnIzMzNjZGRicsXG5cdCcjMzM5OUNDJyxcblx0JyMzMzk5RkYnLFxuXHQnIzMzQ0MwMCcsXG5cdCcjMzNDQzMzJyxcblx0JyMzM0NDNjYnLFxuXHQnIzMzQ0M5OScsXG5cdCcjMzNDQ0NDJyxcblx0JyMzM0NDRkYnLFxuXHQnIzY2MDBDQycsXG5cdCcjNjYwMEZGJyxcblx0JyM2NjMzQ0MnLFxuXHQnIzY2MzNGRicsXG5cdCcjNjZDQzAwJyxcblx0JyM2NkNDMzMnLFxuXHQnIzk5MDBDQycsXG5cdCcjOTkwMEZGJyxcblx0JyM5OTMzQ0MnLFxuXHQnIzk5MzNGRicsXG5cdCcjOTlDQzAwJyxcblx0JyM5OUNDMzMnLFxuXHQnI0NDMDAwMCcsXG5cdCcjQ0MwMDMzJyxcblx0JyNDQzAwNjYnLFxuXHQnI0NDMDA5OScsXG5cdCcjQ0MwMENDJyxcblx0JyNDQzAwRkYnLFxuXHQnI0NDMzMwMCcsXG5cdCcjQ0MzMzMzJyxcblx0JyNDQzMzNjYnLFxuXHQnI0NDMzM5OScsXG5cdCcjQ0MzM0NDJyxcblx0JyNDQzMzRkYnLFxuXHQnI0NDNjYwMCcsXG5cdCcjQ0M2NjMzJyxcblx0JyNDQzk5MDAnLFxuXHQnI0NDOTkzMycsXG5cdCcjQ0NDQzAwJyxcblx0JyNDQ0NDMzMnLFxuXHQnI0ZGMDAwMCcsXG5cdCcjRkYwMDMzJyxcblx0JyNGRjAwNjYnLFxuXHQnI0ZGMDA5OScsXG5cdCcjRkYwMENDJyxcblx0JyNGRjAwRkYnLFxuXHQnI0ZGMzMwMCcsXG5cdCcjRkYzMzMzJyxcblx0JyNGRjMzNjYnLFxuXHQnI0ZGMzM5OScsXG5cdCcjRkYzM0NDJyxcblx0JyNGRjMzRkYnLFxuXHQnI0ZGNjYwMCcsXG5cdCcjRkY2NjMzJyxcblx0JyNGRjk5MDAnLFxuXHQnI0ZGOTkzMycsXG5cdCcjRkZDQzAwJyxcblx0JyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcblx0Ly8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2Vcblx0Ly8gZXhwbGljaXRseVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgKHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgd2luZG93LnByb2Nlc3MuX19ud2pzKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRsZXQgbTtcblxuXHQvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuXHQvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmV0dXJuLWFzc2lnblxuXHRyZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcblx0XHQvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG5cdFx0KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcblx0XHQvLyBJcyBmaXJlZm94ID49IHYzMT9cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiAobSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pKSAmJiBwYXJzZUludChtWzFdLCAxMCkgPj0gMzEpIHx8XG5cdFx0Ly8gRG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSk7XG59XG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGFyZ3NbMF0gPSAodGhpcy51c2VDb2xvcnMgPyAnJWMnIDogJycpICtcblx0XHR0aGlzLm5hbWVzcGFjZSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyAlYycgOiAnICcpICtcblx0XHRhcmdzWzBdICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnJWMgJyA6ICcgJykgK1xuXHRcdCcrJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cblx0aWYgKCF0aGlzLnVzZUNvbG9ycykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuXHRhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKTtcblxuXHQvLyBUaGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuXHQvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG5cdC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuXHRsZXQgaW5kZXggPSAwO1xuXHRsZXQgbGFzdEMgPSAwO1xuXHRhcmdzWzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZywgbWF0Y2ggPT4ge1xuXHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpbmRleCsrO1xuXHRcdGlmIChtYXRjaCA9PT0gJyVjJykge1xuXHRcdFx0Ly8gV2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgKmxhc3QqICVjXG5cdFx0XHQvLyAodGhlIHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgdGhlaXIgb3duKVxuXHRcdFx0bGFzdEMgPSBpbmRleDtcblx0XHR9XG5cdH0pO1xuXG5cdGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmRlYnVnKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICogSWYgYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhdmFpbGFibGUsIGZhbGxzIGJhY2tcbiAqIHRvIGBjb25zb2xlLmxvZ2AuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZXhwb3J0cy5sb2cgPSBjb25zb2xlLmRlYnVnIHx8IGNvbnNvbGUubG9nIHx8ICgoKSA9PiB7fSk7XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0dHJ5IHtcblx0XHRpZiAobmFtZXNwYWNlcykge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnNldEl0ZW0oJ2RlYnVnJywgbmFtZXNwYWNlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZCgpIHtcblx0bGV0IHI7XG5cdHRyeSB7XG5cdFx0ciA9IGV4cG9ydHMuc3RvcmFnZS5nZXRJdGVtKCdkZWJ1ZycpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxuXG5cdC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcblx0aWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG5cdFx0ciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuXHR9XG5cblx0cmV0dXJuIHI7XG59XG5cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCkge1xuXHR0cnkge1xuXHRcdC8vIFRWTUxLaXQgKEFwcGxlIFRWIEpTIFJ1bnRpbWUpIGRvZXMgbm90IGhhdmUgYSB3aW5kb3cgb2JqZWN0LCBqdXN0IGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHRcblx0XHQvLyBUaGUgQnJvd3NlciBhbHNvIGhhcyBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0LlxuXHRcdHJldHVybiBsb2NhbFN0b3JhZ2U7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uICh2KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnJvci5tZXNzYWdlO1xuXHR9XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/debug/src/browser.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/debug/src/common.js": +/*!******************************************!*\ + !*** ./node_modules/debug/src/common.js ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = __webpack_require__(/*! ms */ \"(ssr)/./node_modules/ms/index.js\");\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(' ', ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQU8sQ0FBQyw0Q0FBSTtBQUNwQzs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLGVBQWU7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQVE7QUFDcEIsWUFBWSxRQUFRO0FBQ3BCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxLQUFLLDZCQUE2QjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvY29tbW9uLmpzPzU1OWUiXSwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBkZWJ1ZyBpbnN0YW5jZSB0byBiZSBjb2xvcmVkXG5cdCogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuXHRcdGxldCBoYXNoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXNwYWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcblx0XHRcdGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuXHR9XG5cdGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG5cblx0LyoqXG5cdCogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQHJldHVybiB7RnVuY3Rpb259XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cdFx0bGV0IHByZXZUaW1lO1xuXHRcdGxldCBlbmFibGVPdmVycmlkZSA9IG51bGw7XG5cdFx0bGV0IG5hbWVzcGFjZXNDYWNoZTtcblx0XHRsZXQgZW5hYmxlZENhY2hlO1xuXG5cdFx0ZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuXHRcdFx0Ly8gRGlzYWJsZWQ/XG5cdFx0XHRpZiAoIWRlYnVnLmVuYWJsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZWxmID0gZGVidWc7XG5cblx0XHRcdC8vIFNldCBgZGlmZmAgdGltZXN0YW1wXG5cdFx0XHRjb25zdCBjdXJyID0gTnVtYmVyKG5ldyBEYXRlKCkpO1xuXHRcdFx0Y29uc3QgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuXHRcdFx0c2VsZi5kaWZmID0gbXM7XG5cdFx0XHRzZWxmLnByZXYgPSBwcmV2VGltZTtcblx0XHRcdHNlbGYuY3VyciA9IGN1cnI7XG5cdFx0XHRwcmV2VGltZSA9IGN1cnI7XG5cblx0XHRcdGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXJnc1swXSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJU9cblx0XHRcdFx0YXJncy51bnNoaWZ0KCclTycpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuXHRcdFx0bGV0IGluZGV4ID0gMDtcblx0XHRcdGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCAobWF0Y2gsIGZvcm1hdCkgPT4ge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG5cdFx0XHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0XHRcdHJldHVybiAnJSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXHRcdFx0XHRpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGNvbnN0IHZhbCA9IGFyZ3NbaW5kZXhdO1xuXHRcdFx0XHRcdG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuXHRcdFx0XHRcdC8vIE5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0aW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQXBwbHkgZW52LXNwZWNpZmljIGZvcm1hdHRpbmcgKGNvbG9ycywgZXRjLilcblx0XHRcdGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcblxuXHRcdFx0Y29uc3QgbG9nRm4gPSBzZWxmLmxvZyB8fCBjcmVhdGVEZWJ1Zy5sb2c7XG5cdFx0XHRsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcblx0XHR9XG5cblx0XHRkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG5cdFx0ZGVidWcudXNlQ29sb3JzID0gY3JlYXRlRGVidWcudXNlQ29sb3JzKCk7XG5cdFx0ZGVidWcuY29sb3IgPSBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuXHRcdGRlYnVnLmV4dGVuZCA9IGV4dGVuZDtcblx0XHRkZWJ1Zy5kZXN0cm95ID0gY3JlYXRlRGVidWcuZGVzdHJveTsgLy8gWFhYIFRlbXBvcmFyeS4gV2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVidWcsICdlbmFibGVkJywge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGVuYWJsZU92ZXJyaWRlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVuYWJsZU92ZXJyaWRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuYW1lc3BhY2VzQ2FjaGUgIT09IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMpIHtcblx0XHRcdFx0XHRuYW1lc3BhY2VzQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzO1xuXHRcdFx0XHRcdGVuYWJsZWRDYWNoZSA9IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbmFibGVkQ2FjaGU7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXHRcdGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKVxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoJyAnLCAnLCcpXG5cdFx0XHQuc3BsaXQoJywnKVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKTtcblxuXHRcdGZvciAoY29uc3QgbnMgb2Ygc3BsaXQpIHtcblx0XHRcdGlmIChuc1swXSA9PT0gJy0nKSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLnNraXBzLnB1c2gobnMuc2xpY2UoMSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3RyaW5nIG1hdGNoZXMgYSBuYW1lc3BhY2UgdGVtcGxhdGUsIGhvbm9yaW5nXG5cdCAqIGFzdGVyaXNrcyBhcyB3aWxkY2FyZHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hcblx0ICogQHBhcmFtIHtTdHJpbmd9IHRlbXBsYXRlXG5cdCAqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCAqL1xuXHRmdW5jdGlvbiBtYXRjaGVzVGVtcGxhdGUoc2VhcmNoLCB0ZW1wbGF0ZSkge1xuXHRcdGxldCBzZWFyY2hJbmRleCA9IDA7XG5cdFx0bGV0IHRlbXBsYXRlSW5kZXggPSAwO1xuXHRcdGxldCBzdGFySW5kZXggPSAtMTtcblx0XHRsZXQgbWF0Y2hJbmRleCA9IDA7XG5cblx0XHR3aGlsZSAoc2VhcmNoSW5kZXggPCBzZWFyY2gubGVuZ3RoKSB7XG5cdFx0XHRpZiAodGVtcGxhdGVJbmRleCA8IHRlbXBsYXRlLmxlbmd0aCAmJiAodGVtcGxhdGVbdGVtcGxhdGVJbmRleF0gPT09IHNlYXJjaFtzZWFyY2hJbmRleF0gfHwgdGVtcGxhdGVbdGVtcGxhdGVJbmRleF0gPT09ICcqJykpIHtcblx0XHRcdFx0Ly8gTWF0Y2ggY2hhcmFjdGVyIG9yIHByb2NlZWQgd2l0aCB3aWxkY2FyZFxuXHRcdFx0XHRpZiAodGVtcGxhdGVbdGVtcGxhdGVJbmRleF0gPT09ICcqJykge1xuXHRcdFx0XHRcdHN0YXJJbmRleCA9IHRlbXBsYXRlSW5kZXg7XG5cdFx0XHRcdFx0bWF0Y2hJbmRleCA9IHNlYXJjaEluZGV4O1xuXHRcdFx0XHRcdHRlbXBsYXRlSW5kZXgrKzsgLy8gU2tpcCB0aGUgJyonXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2VhcmNoSW5kZXgrKztcblx0XHRcdFx0XHR0ZW1wbGF0ZUluZGV4Kys7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoc3RhckluZGV4ICE9PSAtMSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5lZ2F0ZWQtY29uZGl0aW9uXG5cdFx0XHRcdC8vIEJhY2t0cmFjayB0byB0aGUgbGFzdCAnKicgYW5kIHRyeSB0byBtYXRjaCBtb3JlIGNoYXJhY3RlcnNcblx0XHRcdFx0dGVtcGxhdGVJbmRleCA9IHN0YXJJbmRleCArIDE7XG5cdFx0XHRcdG1hdGNoSW5kZXgrKztcblx0XHRcdFx0c2VhcmNoSW5kZXggPSBtYXRjaEluZGV4O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBObyBtYXRjaFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSB0cmFpbGluZyAnKicgaW4gdGVtcGxhdGVcblx0XHR3aGlsZSAodGVtcGxhdGVJbmRleCA8IHRlbXBsYXRlLmxlbmd0aCAmJiB0ZW1wbGF0ZVt0ZW1wbGF0ZUluZGV4XSA9PT0gJyonKSB7XG5cdFx0XHR0ZW1wbGF0ZUluZGV4Kys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRlbXBsYXRlSW5kZXggPT09IHRlbXBsYXRlLmxlbmd0aDtcblx0fVxuXG5cdC8qKlxuXHQqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuXHQqXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZGlzYWJsZSgpIHtcblx0XHRjb25zdCBuYW1lc3BhY2VzID0gW1xuXHRcdFx0Li4uY3JlYXRlRGVidWcubmFtZXMsXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAobmFtZXNwYWNlID0+ICctJyArIG5hbWVzcGFjZSlcblx0XHRdLmpvaW4oJywnKTtcblx0XHRjcmVhdGVEZWJ1Zy5lbmFibGUoJycpO1xuXHRcdHJldHVybiBuYW1lc3BhY2VzO1xuXHR9XG5cblx0LyoqXG5cdCogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVcblx0KiBAcmV0dXJuIHtCb29sZWFufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuXHRcdGZvciAoY29uc3Qgc2tpcCBvZiBjcmVhdGVEZWJ1Zy5za2lwcykge1xuXHRcdFx0aWYgKG1hdGNoZXNUZW1wbGF0ZShuYW1lLCBza2lwKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBucyBvZiBjcmVhdGVEZWJ1Zy5uYW1lcykge1xuXHRcdFx0aWYgKG1hdGNoZXNUZW1wbGF0ZShuYW1lLCBucykpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29lcmNlIGB2YWxgLlxuXHQqXG5cdCogQHBhcmFtIHtNaXhlZH0gdmFsXG5cdCogQHJldHVybiB7TWl4ZWR9XG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcblx0XHRpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG5cdFx0fVxuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHQvKipcblx0KiBYWFggRE8gTk9UIFVTRS4gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdHViIGZ1bmN0aW9uLlxuXHQqIFhYWCBJdCBXSUxMIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblx0Ki9cblx0ZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0fVxuXG5cdGNyZWF0ZURlYnVnLmVuYWJsZShjcmVhdGVEZWJ1Zy5sb2FkKCkpO1xuXG5cdHJldHVybiBjcmVhdGVEZWJ1Zztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXR1cDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/debug/src/common.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/debug/src/index.js": +/*!*****************************************!*\ + !*** ./node_modules/debug/src/index.js ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || false === true || process.__nwjs) {\n\tmodule.exports = __webpack_require__(/*! ./browser.js */ \"(ssr)/./node_modules/debug/src/browser.js\");\n} else {\n\tmodule.exports = __webpack_require__(/*! ./node.js */ \"(ssr)/./node_modules/debug/src/node.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFFQUFxRSxLQUFlO0FBQ3BGLENBQUMscUdBQXdDO0FBQ3pDLEVBQUU7QUFDRixDQUFDLCtGQUFxQztBQUN0QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzPzNlNmIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZXRlY3QgRWxlY3Ryb24gcmVuZGVyZXIgLyBud2pzIHByb2Nlc3MsIHdoaWNoIGlzIG5vZGUsIGJ1dCB3ZSBzaG91bGRcbiAqIHRyZWF0IGFzIGEgYnJvd3Nlci5cbiAqL1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCBwcm9jZXNzLmJyb3dzZXIgPT09IHRydWUgfHwgcHJvY2Vzcy5fX253anMpIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Jyb3dzZXIuanMnKTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9ub2RlLmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/debug/src/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/debug/src/node.js": +/*!****************************************!*\ + !*** ./node_modules/debug/src/node.js ***! + \****************************************/ +/***/ ((module, exports, __webpack_require__) => { + +eval("/**\n * Module dependencies.\n */\n\nconst tty = __webpack_require__(/*! tty */ \"tty\");\nconst util = __webpack_require__(/*! util */ \"util\");\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = __webpack_require__(/*! supports-color */ \"(ssr)/./node_modules/supports-color/index.js\");\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = __webpack_require__(/*! ./common */ \"(ssr)/./node_modules/debug/src/common.js\")(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL25vZGUuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxnQkFBSztBQUN6QixhQUFhLG1CQUFPLENBQUMsa0JBQU07O0FBRTNCO0FBQ0E7QUFDQTs7QUFFQSxZQUFZO0FBQ1osV0FBVztBQUNYLGtCQUFrQjtBQUNsQixZQUFZO0FBQ1osWUFBWTtBQUNaLGlCQUFpQjtBQUNqQixlQUFlO0FBQ2YsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGNBQWM7O0FBRWQ7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG1CQUFPLENBQUMsb0VBQWdCOztBQUUvQztBQUNBLEVBQUUsY0FBYztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsNkRBQTZEO0FBQzdEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQyxJQUFJOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLDRCQUE0Qjs7QUFFcEM7QUFDQTtBQUNBLGlEQUFpRCxFQUFFO0FBQ25ELHNCQUFzQixXQUFXLElBQUksTUFBTTs7QUFFM0M7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQVE7QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQywwREFBVTs7QUFFbkMsT0FBTyxZQUFZOztBQUVuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcz81NWM4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdFdpdGhPcHRpb25zKClgIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMgYW5kIHdyaXRlcyB0byBzdGRlcnIuXG4gKi9cblxuZnVuY3Rpb24gbG9nKC4uLmFyZ3MpIHtcblx0cmV0dXJuIHByb2Nlc3Muc3RkZXJyLndyaXRlKHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoZXhwb3J0cy5pbnNwZWN0T3B0cywgLi4uYXJncykgKyAnXFxuJyk7XG59XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRwcm9jZXNzLmVudi5ERUJVRyA9IG5hbWVzcGFjZXM7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgeW91IHNldCBhIHByb2Nlc3MuZW52IGZpZWxkIHRvIG51bGwgb3IgdW5kZWZpbmVkLCBpdCBnZXRzIGNhc3QgdG8gdGhlXG5cdFx0Ly8gc3RyaW5nICdudWxsJyBvciAndW5kZWZpbmVkJy4gSnVzdCBkZWxldGUgaW5zdGVhZC5cblx0XHRkZWxldGUgcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRyZXR1cm4gcHJvY2Vzcy5lbnYuREVCVUc7XG59XG5cbi8qKlxuICogSW5pdCBsb2dpYyBmb3IgYGRlYnVnYCBpbnN0YW5jZXMuXG4gKlxuICogQ3JlYXRlIGEgbmV3IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGluIGNhc2UgYHVzZUNvbG9yc2AgaXMgc2V0XG4gKiBkaWZmZXJlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGBkZWJ1Z2AgaW5zdGFuY2UuXG4gKi9cblxuZnVuY3Rpb24gaW5pdChkZWJ1Zykge1xuXHRkZWJ1Zy5pbnNwZWN0T3B0cyA9IHt9O1xuXG5cdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLmluc3BlY3RPcHRzKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZGVidWcuaW5zcGVjdE9wdHNba2V5c1tpXV0gPSBleHBvcnRzLmluc3BlY3RPcHRzW2tleXNbaV1dO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVvIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbCBvbiBhIHNpbmdsZSBsaW5lLlxuICovXG5cbmZvcm1hdHRlcnMubyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cylcblx0XHQuc3BsaXQoJ1xcbicpXG5cdFx0Lm1hcChzdHIgPT4gc3RyLnRyaW0oKSlcblx0XHQuam9pbignICcpO1xufTtcblxuLyoqXG4gKiBNYXAgJU8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsb3dpbmcgbXVsdGlwbGUgbGluZXMgaWYgbmVlZGVkLlxuICovXG5cbmZvcm1hdHRlcnMuTyA9IGZ1bmN0aW9uICh2KSB7XG5cdHRoaXMuaW5zcGVjdE9wdHMuY29sb3JzID0gdGhpcy51c2VDb2xvcnM7XG5cdHJldHVybiB1dGlsLmluc3BlY3QodiwgdGhpcy5pbnNwZWN0T3B0cyk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/debug/src/node.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/delayed-stream.js b/frontend/.next/server/vendor-chunks/delayed-stream.js new file mode 100644 index 000000000..fb94af953 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/delayed-stream.js @@ -0,0 +1,24 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/delayed-stream"; +exports.ids = ["vendor-chunks/delayed-stream"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/delayed-stream/lib/delayed_stream.js": +/*!***********************************************************!*\ + !*** ./node_modules/delayed-stream/lib/delayed_stream.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("var Stream = (__webpack_require__(/*! stream */ \"stream\").Stream);\nvar util = __webpack_require__(/*! util */ \"util\");\n\nmodule.exports = DelayedStream;\nfunction DelayedStream() {\n this.source = null;\n this.dataSize = 0;\n this.maxDataSize = 1024 * 1024;\n this.pauseStream = true;\n\n this._maxDataSizeExceeded = false;\n this._released = false;\n this._bufferedEvents = [];\n}\nutil.inherits(DelayedStream, Stream);\n\nDelayedStream.create = function(source, options) {\n var delayedStream = new this();\n\n options = options || {};\n for (var option in options) {\n delayedStream[option] = options[option];\n }\n\n delayedStream.source = source;\n\n var realEmit = source.emit;\n source.emit = function() {\n delayedStream._handleEmit(arguments);\n return realEmit.apply(source, arguments);\n };\n\n source.on('error', function() {});\n if (delayedStream.pauseStream) {\n source.pause();\n }\n\n return delayedStream;\n};\n\nObject.defineProperty(DelayedStream.prototype, 'readable', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this.source.readable;\n }\n});\n\nDelayedStream.prototype.setEncoding = function() {\n return this.source.setEncoding.apply(this.source, arguments);\n};\n\nDelayedStream.prototype.resume = function() {\n if (!this._released) {\n this.release();\n }\n\n this.source.resume();\n};\n\nDelayedStream.prototype.pause = function() {\n this.source.pause();\n};\n\nDelayedStream.prototype.release = function() {\n this._released = true;\n\n this._bufferedEvents.forEach(function(args) {\n this.emit.apply(this, args);\n }.bind(this));\n this._bufferedEvents = [];\n};\n\nDelayedStream.prototype.pipe = function() {\n var r = Stream.prototype.pipe.apply(this, arguments);\n this.resume();\n return r;\n};\n\nDelayedStream.prototype._handleEmit = function(args) {\n if (this._released) {\n this.emit.apply(this, args);\n return;\n }\n\n if (args[0] === 'data') {\n this.dataSize += args[1].length;\n this._checkIfMaxDataSizeExceeded();\n }\n\n this._bufferedEvents.push(args);\n};\n\nDelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {\n if (this._maxDataSizeExceeded) {\n return;\n }\n\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n this._maxDataSizeExceeded = true;\n var message =\n 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'\n this.emit('error', new Error(message));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZGVsYXllZC1zdHJlYW0vbGliL2RlbGF5ZWRfc3RyZWFtLmpzIiwibWFwcGluZ3MiOiJBQUFBLGFBQWEsb0RBQXdCO0FBQ3JDLFdBQVcsbUJBQU8sQ0FBQyxrQkFBTTs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZGVsYXllZC1zdHJlYW0vbGliL2RlbGF5ZWRfc3RyZWFtLmpzPzk0ZGMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERlbGF5ZWRTdHJlYW07XG5mdW5jdGlvbiBEZWxheWVkU3RyZWFtKCkge1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMTAyNCAqIDEwMjQ7XG4gIHRoaXMucGF1c2VTdHJlYW0gPSB0cnVlO1xuXG4gIHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQgPSBmYWxzZTtcbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMgPSBbXTtcbn1cbnV0aWwuaW5oZXJpdHMoRGVsYXllZFN0cmVhbSwgU3RyZWFtKTtcblxuRGVsYXllZFN0cmVhbS5jcmVhdGUgPSBmdW5jdGlvbihzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGRlbGF5ZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGRlbGF5ZWRTdHJlYW1bb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxuXG4gIGRlbGF5ZWRTdHJlYW0uc291cmNlID0gc291cmNlO1xuXG4gIHZhciByZWFsRW1pdCA9IHNvdXJjZS5lbWl0O1xuICBzb3VyY2UuZW1pdCA9IGZ1bmN0aW9uKCkge1xuICAgIGRlbGF5ZWRTdHJlYW0uX2hhbmRsZUVtaXQoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gcmVhbEVtaXQuYXBwbHkoc291cmNlLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHNvdXJjZS5vbignZXJyb3InLCBmdW5jdGlvbigpIHt9KTtcbiAgaWYgKGRlbGF5ZWRTdHJlYW0ucGF1c2VTdHJlYW0pIHtcbiAgICBzb3VyY2UucGF1c2UoKTtcbiAgfVxuXG4gIHJldHVybiBkZWxheWVkU3RyZWFtO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KERlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLCAncmVhZGFibGUnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2UucmVhZGFibGU7XG4gIH1cbn0pO1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5zZXRFbmNvZGluZyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5zb3VyY2Uuc2V0RW5jb2RpbmcuYXBwbHkodGhpcy5zb3VyY2UsIGFyZ3VtZW50cyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMucmVsZWFzZSgpO1xuICB9XG5cbiAgdGhpcy5zb3VyY2UucmVzdW1lKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnNvdXJjZS5wYXVzZSgpO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihhcmdzKSB7XG4gICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9LmJpbmQodGhpcykpO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICB2YXIgciA9IFN0cmVhbS5wcm90b3R5cGUucGlwZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gcjtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFbWl0ID0gZnVuY3Rpb24oYXJncykge1xuICBpZiAodGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFyZ3NbMF0gPT09ICdkYXRhJykge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gYXJnc1sxXS5sZW5ndGg7XG4gICAgdGhpcy5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQoKTtcbiAgfVxuXG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzLnB1c2goYXJncyk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tJZk1heERhdGFTaXplRXhjZWVkZWQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IHRydWU7XG4gIHZhciBtZXNzYWdlID1cbiAgICAnRGVsYXllZFN0cmVhbSNtYXhEYXRhU2l6ZSBvZiAnICsgdGhpcy5tYXhEYXRhU2l6ZSArICcgYnl0ZXMgZXhjZWVkZWQuJ1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/delayed-stream/lib/delayed_stream.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/dunder-proto.js b/frontend/.next/server/vendor-chunks/dunder-proto.js new file mode 100644 index 000000000..3b9909624 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/dunder-proto.js @@ -0,0 +1,25 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/dunder-proto"; +exports.ids = ["vendor-chunks/dunder-proto"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/dunder-proto/get.js": +/*!******************************************!*\ + !*** ./node_modules/dunder-proto/get.js ***! + \******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar callBind = __webpack_require__(/*! call-bind-apply-helpers */ \"(ssr)/./node_modules/call-bind-apply-helpers/index.js\");\nvar gOPD = __webpack_require__(/*! gopd */ \"(ssr)/./node_modules/gopd/index.js\");\n\nvar hasProtoAccessor;\ntry {\n\t// eslint-disable-next-line no-extra-parens, no-proto\n\thasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;\n} catch (e) {\n\tif (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {\n\t\tthrow e;\n\t}\n}\n\n// eslint-disable-next-line no-extra-parens\nvar desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));\n\nvar $Object = Object;\nvar $getPrototypeOf = $Object.getPrototypeOf;\n\n/** @type {import('./get')} */\nmodule.exports = desc && typeof desc.get === 'function'\n\t? callBind([desc.get])\n\t: typeof $getPrototypeOf === 'function'\n\t\t? /** @type {import('./get')} */ function getDunder(value) {\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\treturn $getPrototypeOf(value == null ? value : $Object(value));\n\t\t}\n\t\t: false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZHVuZGVyLXByb3RvL2dldC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixlQUFlLG1CQUFPLENBQUMsc0ZBQXlCO0FBQ2hELFdBQVcsbUJBQU8sQ0FBQyxnREFBTTs7QUFFekI7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLHNDQUFzQztBQUN2RSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyRUFBMkUsK0JBQStCOztBQUUxRztBQUNBOztBQUVBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9kdW5kZXItcHJvdG8vZ2V0LmpzPzZkMmIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQtYXBwbHktaGVscGVycycpO1xudmFyIGdPUEQgPSByZXF1aXJlKCdnb3BkJyk7XG5cbnZhciBoYXNQcm90b0FjY2Vzc29yO1xudHJ5IHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dHJhLXBhcmVucywgbm8tcHJvdG9cblx0aGFzUHJvdG9BY2Nlc3NvciA9IC8qKiBAdHlwZSB7eyBfX3Byb3RvX18/OiB0eXBlb2YgQXJyYXkucHJvdG90eXBlIH19ICovIChbXSkuX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGU7XG59IGNhdGNoIChlKSB7XG5cdGlmICghZSB8fCB0eXBlb2YgZSAhPT0gJ29iamVjdCcgfHwgISgnY29kZScgaW4gZSkgfHwgZS5jb2RlICE9PSAnRVJSX1BST1RPX0FDQ0VTUycpIHtcblx0XHR0aHJvdyBlO1xuXHR9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRyYS1wYXJlbnNcbnZhciBkZXNjID0gISFoYXNQcm90b0FjY2Vzc29yICYmIGdPUEQgJiYgZ09QRChPYmplY3QucHJvdG90eXBlLCAvKiogQHR5cGUge2tleW9mIHR5cGVvZiBPYmplY3QucHJvdG90eXBlfSAqLyAoJ19fcHJvdG9fXycpKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgJGdldFByb3RvdHlwZU9mID0gJE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vZ2V0Jyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGRlc2MgJiYgdHlwZW9mIGRlc2MuZ2V0ID09PSAnZnVuY3Rpb24nXG5cdD8gY2FsbEJpbmQoW2Rlc2MuZ2V0XSlcblx0OiB0eXBlb2YgJGdldFByb3RvdHlwZU9mID09PSAnZnVuY3Rpb24nXG5cdFx0PyAvKiogQHR5cGUge2ltcG9ydCgnLi9nZXQnKX0gKi8gZnVuY3Rpb24gZ2V0RHVuZGVyKHZhbHVlKSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRyZXR1cm4gJGdldFByb3RvdHlwZU9mKHZhbHVlID09IG51bGwgPyB2YWx1ZSA6ICRPYmplY3QodmFsdWUpKTtcblx0XHR9XG5cdFx0OiBmYWxzZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/dunder-proto/get.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/es-define-property.js b/frontend/.next/server/vendor-chunks/es-define-property.js new file mode 100644 index 000000000..36174b70b --- /dev/null +++ b/frontend/.next/server/vendor-chunks/es-define-property.js @@ -0,0 +1,25 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/es-define-property"; +exports.ids = ["vendor-chunks/es-define-property"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/es-define-property/index.js": +/*!**************************************************!*\ + !*** ./node_modules/es-define-property/index.js ***! + \**************************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('.')} */\nvar $defineProperty = Object.defineProperty || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZXMtZGVmaW5lLXByb3BlcnR5L2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsYUFBYTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUyxVQUFVO0FBQ3ZDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZXMtZGVmaW5lLXByb3BlcnR5L2luZGV4LmpzPzRmNDUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBmYWxzZTtcbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0dHJ5IHtcblx0XHQkZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyB2YWx1ZTogMSB9KTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGRlZmluZVByb3BlcnR5XG5cdFx0JGRlZmluZVByb3BlcnR5ID0gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSAkZGVmaW5lUHJvcGVydHk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/es-define-property/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/es-errors.js b/frontend/.next/server/vendor-chunks/es-errors.js new file mode 100644 index 000000000..b6a065dff --- /dev/null +++ b/frontend/.next/server/vendor-chunks/es-errors.js @@ -0,0 +1,85 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/es-errors"; +exports.ids = ["vendor-chunks/es-errors"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/es-errors/eval.js": +/*!****************************************!*\ + !*** ./node_modules/es-errors/eval.js ***! + \****************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL2V2YWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsV0FBVyxrQkFBa0I7QUFDN0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9ldmFsLmpzP2YxZjMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9ldmFsJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IEV2YWxFcnJvcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/es-errors/eval.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/es-errors/index.js": +/*!*****************************************!*\ + !*** ./node_modules/es-errors/index.js ***! + \*****************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('.')} */\nmodule.exports = Error;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsYUFBYTtBQUN4QiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL2luZGV4LmpzPzhmMmUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBFcnJvcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/es-errors/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/es-errors/range.js": +/*!*****************************************!*\ + !*** ./node_modules/es-errors/range.js ***! + \*****************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3JhbmdlLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsbUJBQW1CO0FBQzlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvcmFuZ2UuanM/ZjVhMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3JhbmdlJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFJhbmdlRXJyb3I7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/es-errors/range.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/es-errors/ref.js": +/*!***************************************!*\ + !*** ./node_modules/es-errors/ref.js ***! + \***************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3JlZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLGlCQUFpQjtBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3JlZi5qcz9mOGRjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vcmVmJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFJlZmVyZW5jZUVycm9yO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/es-errors/ref.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/es-errors/syntax.js": +/*!******************************************!*\ + !*** ./node_modules/es-errors/syntax.js ***! + \******************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3N5bnRheC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG9CQUFvQjtBQUMvQiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3N5bnRheC5qcz8yZGRmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vc3ludGF4Jyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRheEVycm9yO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/es-errors/syntax.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/es-errors/type.js": +/*!****************************************!*\ + !*** ./node_modules/es-errors/type.js ***! + \****************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3R5cGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsV0FBVyxrQkFBa0I7QUFDN0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy90eXBlLmpzPzZkYjAiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi90eXBlJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFR5cGVFcnJvcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/es-errors/type.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/es-errors/uri.js": +/*!***************************************!*\ + !*** ./node_modules/es-errors/uri.js ***! + \***************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3VyaS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLGlCQUFpQjtBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3VyaS5qcz8wNDBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vdXJpJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFVSSUVycm9yO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/es-errors/uri.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/es-object-atoms.js b/frontend/.next/server/vendor-chunks/es-object-atoms.js new file mode 100644 index 000000000..302ba96f8 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/es-object-atoms.js @@ -0,0 +1,25 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/es-object-atoms"; +exports.ids = ["vendor-chunks/es-object-atoms"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/es-object-atoms/index.js": +/*!***********************************************!*\ + !*** ./node_modules/es-object-atoms/index.js ***! + \***********************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('.')} */\nmodule.exports = Object;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZXMtb2JqZWN0LWF0b21zL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsYUFBYTtBQUN4QiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZXMtb2JqZWN0LWF0b21zL2luZGV4LmpzPzNmNGMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Q7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/es-object-atoms/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/es-set-tostringtag.js b/frontend/.next/server/vendor-chunks/es-set-tostringtag.js new file mode 100644 index 000000000..150631767 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/es-set-tostringtag.js @@ -0,0 +1,25 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/es-set-tostringtag"; +exports.ids = ["vendor-chunks/es-set-tostringtag"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/es-set-tostringtag/index.js": +/*!**************************************************!*\ + !*** ./node_modules/es-set-tostringtag/index.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar GetIntrinsic = __webpack_require__(/*! get-intrinsic */ \"(ssr)/./node_modules/get-intrinsic/index.js\");\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasToStringTag = __webpack_require__(/*! has-tostringtag/shams */ \"(ssr)/./node_modules/has-tostringtag/shams.js\")();\nvar hasOwn = __webpack_require__(/*! hasown */ \"(ssr)/./node_modules/hasown/index.js\");\nvar $TypeError = __webpack_require__(/*! es-errors/type */ \"(ssr)/./node_modules/es-errors/type.js\");\n\nvar toStringTag = hasToStringTag ? Symbol.toStringTag : null;\n\n/** @type {import('.')} */\nmodule.exports = function setToStringTag(object, value) {\n\tvar overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;\n\tvar nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;\n\tif (\n\t\t(typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean')\n\t\t|| (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean')\n\t) {\n\t\tthrow new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans');\n\t}\n\tif (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) {\n\t\tif ($defineProperty) {\n\t\t\t$defineProperty(object, toStringTag, {\n\t\t\t\tconfigurable: !nonConfigurable,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: value,\n\t\t\t\twritable: false\n\t\t\t});\n\t\t} else {\n\t\t\tobject[toStringTag] = value; // eslint-disable-line no-param-reassign\n\t\t}\n\t}\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZXMtc2V0LXRvc3RyaW5ndGFnL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLGtFQUFlOztBQUUxQzs7QUFFQSxxQkFBcUIsbUJBQU8sQ0FBQyw0RUFBdUI7QUFDcEQsYUFBYSxtQkFBTyxDQUFDLG9EQUFRO0FBQzdCLGlCQUFpQixtQkFBTyxDQUFDLDhEQUFnQjs7QUFFekM7O0FBRUEsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLElBQUk7QUFDSixnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9lcy1zZXQtdG9zdHJpbmd0YWcvaW5kZXguanM/YjQzZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG5cbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnaGFzb3duJyk7XG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG5cbnZhciB0b1N0cmluZ1RhZyA9IGhhc1RvU3RyaW5nVGFnID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogbnVsbDtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2V0VG9TdHJpbmdUYWcob2JqZWN0LCB2YWx1ZSkge1xuXHR2YXIgb3ZlcnJpZGVJZlNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmICEhYXJndW1lbnRzWzJdICYmIGFyZ3VtZW50c1syXS5mb3JjZTtcblx0dmFyIG5vbkNvbmZpZ3VyYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmICEhYXJndW1lbnRzWzJdICYmIGFyZ3VtZW50c1syXS5ub25Db25maWd1cmFibGU7XG5cdGlmIChcblx0XHQodHlwZW9mIG92ZXJyaWRlSWZTZXQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvdmVycmlkZUlmU2V0ICE9PSAnYm9vbGVhbicpXG5cdFx0fHwgKHR5cGVvZiBub25Db25maWd1cmFibGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBub25Db25maWd1cmFibGUgIT09ICdib29sZWFuJylcblx0KSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2lmIHByb3ZpZGVkLCB0aGUgYG92ZXJyaWRlSWZTZXRgIGFuZCBgbm9uQ29uZmlndXJhYmxlYCBvcHRpb25zIG11c3QgYmUgYm9vbGVhbnMnKTtcblx0fVxuXHRpZiAodG9TdHJpbmdUYWcgJiYgKG92ZXJyaWRlSWZTZXQgfHwgIWhhc093bihvYmplY3QsIHRvU3RyaW5nVGFnKSkpIHtcblx0XHRpZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0XHQkZGVmaW5lUHJvcGVydHkob2JqZWN0LCB0b1N0cmluZ1RhZywge1xuXHRcdFx0XHRjb25maWd1cmFibGU6ICFub25Db25maWd1cmFibGUsXG5cdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9iamVjdFt0b1N0cmluZ1RhZ10gPSB2YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdH1cblx0fVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/es-set-tostringtag/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/follow-redirects.js b/frontend/.next/server/vendor-chunks/follow-redirects.js new file mode 100644 index 000000000..a26303c80 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/follow-redirects.js @@ -0,0 +1,34 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/follow-redirects"; +exports.ids = ["vendor-chunks/follow-redirects"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/follow-redirects/debug.js": +/*!************************************************!*\ + !*** ./node_modules/follow-redirects/debug.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("var debug;\n\nmodule.exports = function () {\n if (!debug) {\n try {\n /* eslint global-require: off */\n debug = __webpack_require__(/*! debug */ \"(ssr)/./node_modules/debug/src/index.js\")(\"follow-redirects\");\n }\n catch (error) { /* */ }\n if (typeof debug !== \"function\") {\n debug = function () { /* */ };\n }\n }\n debug.apply(null, arguments);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZm9sbG93LXJlZGlyZWN0cy9kZWJ1Zy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxzREFBTztBQUM3QjtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZm9sbG93LXJlZGlyZWN0cy9kZWJ1Zy5qcz80ZGE3Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBkZWJ1ZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghZGVidWcpIHtcbiAgICB0cnkge1xuICAgICAgLyogZXNsaW50IGdsb2JhbC1yZXF1aXJlOiBvZmYgKi9cbiAgICAgIGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiZm9sbG93LXJlZGlyZWN0c1wiKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IC8qICovIH1cbiAgICBpZiAodHlwZW9mIGRlYnVnICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGRlYnVnID0gZnVuY3Rpb24gKCkgeyAvKiAqLyB9O1xuICAgIH1cbiAgfVxuICBkZWJ1Zy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/follow-redirects/debug.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/follow-redirects/index.js": +/*!************************************************!*\ + !*** ./node_modules/follow-redirects/index.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("var url = __webpack_require__(/*! url */ \"url\");\nvar URL = url.URL;\nvar http = __webpack_require__(/*! http */ \"http\");\nvar https = __webpack_require__(/*! https */ \"https\");\nvar Writable = (__webpack_require__(/*! stream */ \"stream\").Writable);\nvar assert = __webpack_require__(/*! assert */ \"assert\");\nvar debug = __webpack_require__(/*! ./debug */ \"(ssr)/./node_modules/follow-redirects/debug.js\");\n\n// Preventive platform detection\n// istanbul ignore next\n(function detectUnsupportedEnvironment() {\n var looksLikeNode = typeof process !== \"undefined\";\n var looksLikeBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n var looksLikeV8 = isFunction(Error.captureStackTrace);\n if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) {\n console.warn(\"The follow-redirects package should be excluded from browser builds.\");\n }\n}());\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n assert(new URL(\"\"));\n}\ncatch (error) {\n useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n \"auth\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"hash\",\n];\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n eventHandlers[event] = function (arg1, arg2, arg3) {\n this._redirectable.emit(event, arg1, arg2, arg3);\n };\n});\n\n// Error types with codes\nvar InvalidUrlError = createErrorType(\n \"ERR_INVALID_URL\",\n \"Invalid URL\",\n TypeError\n);\nvar RedirectionError = createErrorType(\n \"ERR_FR_REDIRECTION_FAILURE\",\n \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"Maximum number of redirects exceeded\",\n RedirectionError\n);\nvar MaxBodyLengthExceededError = createErrorType(\n \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n \"ERR_STREAM_WRITE_AFTER_END\",\n \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n this._sanitizeOptions(options);\n this._options = options;\n this._ended = false;\n this._ending = false;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on(\"response\", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n try {\n self._processResponse(response);\n }\n catch (cause) {\n self.emit(\"error\", cause instanceof RedirectionError ?\n cause : new RedirectionError({ cause: cause }));\n }\n };\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n destroyRequest(this._currentRequest);\n this._currentRequest.abort();\n this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n destroyRequest(this._currentRequest, error);\n destroy.call(this, error);\n return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Writing is not allowed if end has been called\n if (this._ending) {\n throw new WriteAfterEndError();\n }\n\n // Validate input and shift parameters if necessary\n if (!isString(data) && !isBuffer(data)) {\n throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n }\n if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn't invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don't exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit(\"error\", new MaxBodyLengthExceededError());\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (isFunction(data)) {\n callback = data;\n data = encoding = null;\n }\n else if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Write data if needed and end\n if (!data) {\n this._ended = this._ending = true;\n this._currentRequest.end(null, null, callback);\n }\n else {\n var self = this;\n var currentRequest = this._currentRequest;\n this.write(data, encoding, function () {\n self._ended = true;\n currentRequest.end(null, null, callback);\n });\n this._ending = true;\n }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n var self = this;\n\n // Destroys the socket on timeout\n function destroyOnTimeout(socket) {\n socket.setTimeout(msecs);\n socket.removeListener(\"timeout\", socket.destroy);\n socket.addListener(\"timeout\", socket.destroy);\n }\n\n // Sets up a timer to trigger a timeout event\n function startTimer(socket) {\n if (self._timeout) {\n clearTimeout(self._timeout);\n }\n self._timeout = setTimeout(function () {\n self.emit(\"timeout\");\n clearTimer();\n }, msecs);\n destroyOnTimeout(socket);\n }\n\n // Stops a timeout from triggering\n function clearTimer() {\n // Clear the timeout\n if (self._timeout) {\n clearTimeout(self._timeout);\n self._timeout = null;\n }\n\n // Clean up all attached listeners\n self.removeListener(\"abort\", clearTimer);\n self.removeListener(\"error\", clearTimer);\n self.removeListener(\"response\", clearTimer);\n self.removeListener(\"close\", clearTimer);\n if (callback) {\n self.removeListener(\"timeout\", callback);\n }\n if (!self.socket) {\n self._currentRequest.removeListener(\"socket\", startTimer);\n }\n }\n\n // Attach callback if passed\n if (callback) {\n this.on(\"timeout\", callback);\n }\n\n // Start the timer if or when the socket is opened\n if (this.socket) {\n startTimer(this.socket);\n }\n else {\n this._currentRequest.once(\"socket\", startTimer);\n }\n\n // Clean up on events\n this.on(\"socket\", destroyOnTimeout);\n this.on(\"abort\", clearTimer);\n this.on(\"error\", clearTimer);\n this.on(\"response\", clearTimer);\n this.on(\"close\", clearTimer);\n\n return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n \"flushHeaders\", \"getHeader\",\n \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n // Ensure headers are always present\n if (!options.headers) {\n options.headers = {};\n }\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf(\"?\");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n throw new TypeError(\"Unsupported protocol \" + protocol);\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.slice(0, -1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request and set up its event handlers\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n request._redirectable = this;\n for (var event of events) {\n request.on(event, eventHandlers[event]);\n }\n\n // RFC7230§5.3.1: When making a request directly to an origin server, […]\n // a client MUST send only the absolute path […] as the request-target.\n this._currentUrl = /^\\//.test(this._options.path) ?\n url.format(this._options) :\n // When making a request to a proxy, […]\n // a client MUST send the target URI in absolute-form […].\n this._options.path;\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end\n var i = 0;\n var self = this;\n var buffers = this._requestBodyBuffers;\n (function writeNext(error) {\n // Only write if this request has not been redirected yet\n // istanbul ignore else\n if (request === self._currentRequest) {\n // Report any write errors\n // istanbul ignore if\n if (error) {\n self.emit(\"error\", error);\n }\n // Write the next buffer if there are still left\n else if (i < buffers.length) {\n var buffer = buffers[i++];\n // istanbul ignore else\n if (!request.finished) {\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n }\n // End the request if `end` has been called on us\n else if (self._ended) {\n request.end();\n }\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n var statusCode = response.statusCode;\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: statusCode,\n });\n }\n\n // RFC7231§6.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n\n // If the response is not a redirect; return it as-is\n var location = response.headers.location;\n if (!location || this._options.followRedirects === false ||\n statusCode < 300 || statusCode >= 400) {\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit(\"response\", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n return;\n }\n\n // The response is a redirect, so abort the current request\n destroyRequest(this._currentRequest);\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n\n // RFC7231§6.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., \"infinite\" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n throw new TooManyRedirectsError();\n }\n\n // Store the request headers if applicable\n var requestHeaders;\n var beforeRedirect = this._options.beforeRedirect;\n if (beforeRedirect) {\n requestHeaders = Object.assign({\n // The Host header was set by nativeProtocol.request\n Host: response.req.getHeader(\"host\"),\n }, this._options.headers);\n }\n\n // RFC7231§6.4: Automatic redirection needs to done with\n // care for methods not known to be safe, […]\n // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change\n // the request method from POST to GET for the subsequent request.\n var method = this._options.method;\n if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n // RFC7231§6.4.4: The 303 (See Other) status code indicates that\n // the server is redirecting the user agent to a different resource […]\n // A user agent can perform a retrieval request targeting that URI\n // (a GET or HEAD request if using HTTP) […]\n (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n this._options.method = \"GET\";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n removeMatchingHeaders(/^content-/i, this._options.headers);\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n // If the redirect is relative, carry over the host of the last request\n var currentUrlParts = parseUrl(this._currentUrl);\n var currentHost = currentHostHeader || currentUrlParts.host;\n var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n // Create the redirected request\n var redirectUrl = resolveUrl(location, currentUrl);\n debug(\"redirecting to\", redirectUrl.href);\n this._isRedirect = true;\n spreadUrlObject(redirectUrl, this._options);\n\n // Drop confidential headers when redirecting to a less secure protocol\n // or to a different domain that is not a superdomain\n if (redirectUrl.protocol !== currentUrlParts.protocol &&\n redirectUrl.protocol !== \"https:\" ||\n redirectUrl.host !== currentHost &&\n !isSubdomain(redirectUrl.host, currentHost)) {\n removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n }\n\n // Evaluate the beforeRedirect callback\n if (isFunction(beforeRedirect)) {\n var responseDetails = {\n headers: response.headers,\n statusCode: statusCode,\n };\n var requestDetails = {\n url: currentUrl,\n method: method,\n headers: requestHeaders,\n };\n beforeRedirect(this._options, responseDetails, requestDetails);\n this._sanitizeOptions(this._options);\n }\n\n // Perform the redirected request\n this._performRequest();\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + \":\";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n function request(input, options, callback) {\n // Parse parameters, ensuring that input is an object\n if (isURL(input)) {\n input = spreadUrlObject(input);\n }\n else if (isString(input)) {\n input = spreadUrlObject(parseUrl(input));\n }\n else {\n callback = options;\n options = validateUrl(input);\n input = { protocol: protocol };\n }\n if (isFunction(options)) {\n callback = options;\n options = null;\n }\n\n // Set defaults\n options = Object.assign({\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, input, options);\n options.nativeProtocols = nativeProtocols;\n if (!isString(options.host) && !isString(options.hostname)) {\n options.hostname = \"::1\";\n }\n\n assert.equal(options.protocol, protocol, \"protocol mismatch\");\n debug(\"options\", options);\n return new RedirectableRequest(options, callback);\n }\n\n // Executes a GET request, following redirects\n function get(input, options, callback) {\n var wrappedRequest = wrappedProtocol.request(input, options, callback);\n wrappedRequest.end();\n return wrappedRequest;\n }\n\n // Expose the properties on the wrapped protocol\n Object.defineProperties(wrappedProtocol, {\n request: { value: request, configurable: true, enumerable: true, writable: true },\n get: { value: get, configurable: true, enumerable: true, writable: true },\n });\n });\n return exports;\n}\n\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n var parsed;\n // istanbul ignore else\n if (useNativeURL) {\n parsed = new URL(input);\n }\n else {\n // Ensure the URL is valid and absolute\n parsed = validateUrl(url.parse(input));\n if (!isString(parsed.protocol)) {\n throw new InvalidUrlError({ input });\n }\n }\n return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n // istanbul ignore next\n return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n var spread = target || {};\n for (var key of preservedUrlFields) {\n spread[key] = urlObject[key];\n }\n\n // Fix IPv6 hostname\n if (spread.hostname.startsWith(\"[\")) {\n spread.hostname = spread.hostname.slice(1, -1);\n }\n // Ensure port is a number\n if (spread.port !== \"\") {\n spread.port = Number(spread.port);\n }\n // Concatenate path\n spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n return spread;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n var lastValue;\n for (var header in headers) {\n if (regex.test(header)) {\n lastValue = headers[header];\n delete headers[header];\n }\n }\n return (lastValue === null || typeof lastValue === \"undefined\") ?\n undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n // Create constructor\n function CustomError(properties) {\n // istanbul ignore else\n if (isFunction(Error.captureStackTrace)) {\n Error.captureStackTrace(this, this.constructor);\n }\n Object.assign(this, properties || {});\n this.code = code;\n this.message = this.cause ? message + \": \" + this.cause.message : message;\n }\n\n // Attach constructor and set default properties\n CustomError.prototype = new (baseClass || Error)();\n Object.defineProperties(CustomError.prototype, {\n constructor: {\n value: CustomError,\n enumerable: false,\n },\n name: {\n value: \"Error [\" + code + \"]\",\n enumerable: false,\n },\n });\n return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n for (var event of events) {\n request.removeListener(event, eventHandlers[event]);\n }\n request.on(\"error\", noop);\n request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n assert(isString(subdomain) && isString(domain));\n var dot = subdomain.length - domain.length - 1;\n return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n return URL && value instanceof URL;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZm9sbG93LXJlZGlyZWN0cy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsZ0JBQUs7QUFDdkI7QUFDQSxXQUFXLG1CQUFPLENBQUMsa0JBQU07QUFDekIsWUFBWSxtQkFBTyxDQUFDLG9CQUFPO0FBQzNCLGVBQWUsc0RBQTBCO0FBQ3pDLGFBQWEsbUJBQU8sQ0FBQyxzQkFBUTtBQUM3QixZQUFZLG1CQUFPLENBQUMsK0RBQVM7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsY0FBYztBQUNyRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGdDQUFnQztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsd0NBQXdDO0FBQy9ELEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxtQkFBbUI7O0FBRW5FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsc0VBQXNFO0FBQ3ZGLGFBQWEsa0VBQWtFO0FBQy9FLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdDQUFnQyw0QkFBNEI7QUFDNUQ7QUFDQTtBQUNBLGdDQUFnQyw0QkFBNEI7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDBCQUEwQjtBQUNsRCxtQkFBbUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvaW5kZXguanM/NjAzNCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdXJsID0gcmVxdWlyZShcInVybFwiKTtcbnZhciBVUkwgPSB1cmwuVVJMO1xudmFyIGh0dHAgPSByZXF1aXJlKFwiaHR0cFwiKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoXCJodHRwc1wiKTtcbnZhciBXcml0YWJsZSA9IHJlcXVpcmUoXCJzdHJlYW1cIikuV3JpdGFibGU7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcbnZhciBkZWJ1ZyA9IHJlcXVpcmUoXCIuL2RlYnVnXCIpO1xuXG4vLyBQcmV2ZW50aXZlIHBsYXRmb3JtIGRldGVjdGlvblxuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbihmdW5jdGlvbiBkZXRlY3RVbnN1cHBvcnRlZEVudmlyb25tZW50KCkge1xuICB2YXIgbG9va3NMaWtlTm9kZSA9IHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiO1xuICB2YXIgbG9va3NMaWtlQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuICB2YXIgbG9va3NMaWtlVjggPSBpc0Z1bmN0aW9uKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKTtcbiAgaWYgKCFsb29rc0xpa2VOb2RlICYmIChsb29rc0xpa2VCcm93c2VyIHx8ICFsb29rc0xpa2VWOCkpIHtcbiAgICBjb25zb2xlLndhcm4oXCJUaGUgZm9sbG93LXJlZGlyZWN0cyBwYWNrYWdlIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIGJyb3dzZXIgYnVpbGRzLlwiKTtcbiAgfVxufSgpKTtcblxuLy8gV2hldGhlciB0byB1c2UgdGhlIG5hdGl2ZSBVUkwgb2JqZWN0IG9yIHRoZSBsZWdhY3kgdXJsIG1vZHVsZVxudmFyIHVzZU5hdGl2ZVVSTCA9IGZhbHNlO1xudHJ5IHtcbiAgYXNzZXJ0KG5ldyBVUkwoXCJcIikpO1xufVxuY2F0Y2ggKGVycm9yKSB7XG4gIHVzZU5hdGl2ZVVSTCA9IGVycm9yLmNvZGUgPT09IFwiRVJSX0lOVkFMSURfVVJMXCI7XG59XG5cbi8vIFVSTCBmaWVsZHMgdG8gcHJlc2VydmUgaW4gY29weSBvcGVyYXRpb25zXG52YXIgcHJlc2VydmVkVXJsRmllbGRzID0gW1xuICBcImF1dGhcIixcbiAgXCJob3N0XCIsXG4gIFwiaG9zdG5hbWVcIixcbiAgXCJocmVmXCIsXG4gIFwicGF0aFwiLFxuICBcInBhdGhuYW1lXCIsXG4gIFwicG9ydFwiLFxuICBcInByb3RvY29sXCIsXG4gIFwicXVlcnlcIixcbiAgXCJzZWFyY2hcIixcbiAgXCJoYXNoXCIsXG5dO1xuXG4vLyBDcmVhdGUgaGFuZGxlcnMgdGhhdCBwYXNzIGV2ZW50cyBmcm9tIG5hdGl2ZSByZXF1ZXN0c1xudmFyIGV2ZW50cyA9IFtcImFib3J0XCIsIFwiYWJvcnRlZFwiLCBcImNvbm5lY3RcIiwgXCJlcnJvclwiLCBcInNvY2tldFwiLCBcInRpbWVvdXRcIl07XG52YXIgZXZlbnRIYW5kbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnRIYW5kbGVyc1tldmVudF0gPSBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHRoaXMuX3JlZGlyZWN0YWJsZS5lbWl0KGV2ZW50LCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgfTtcbn0pO1xuXG4vLyBFcnJvciB0eXBlcyB3aXRoIGNvZGVzXG52YXIgSW52YWxpZFVybEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9JTlZBTElEX1VSTFwiLFxuICBcIkludmFsaWQgVVJMXCIsXG4gIFR5cGVFcnJvclxuKTtcbnZhciBSZWRpcmVjdGlvbkVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9SRURJUkVDVElPTl9GQUlMVVJFXCIsXG4gIFwiUmVkaXJlY3RlZCByZXF1ZXN0IGZhaWxlZFwiXG4pO1xudmFyIFRvb01hbnlSZWRpcmVjdHNFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTXCIsXG4gIFwiTWF4aW11bSBudW1iZXIgb2YgcmVkaXJlY3RzIGV4Y2VlZGVkXCIsXG4gIFJlZGlyZWN0aW9uRXJyb3Jcbik7XG52YXIgTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX01BWF9CT0RZX0xFTkdUSF9FWENFRURFRFwiLFxuICBcIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0XCJcbik7XG52YXIgV3JpdGVBZnRlckVuZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EXCIsXG4gIFwid3JpdGUgYWZ0ZXIgZW5kXCJcbik7XG5cbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG52YXIgZGVzdHJveSA9IFdyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95IHx8IG5vb3A7XG5cbi8vIEFuIEhUVFAoUykgcmVxdWVzdCB0aGF0IGNhbiBiZSByZWRpcmVjdGVkXG5mdW5jdGlvbiBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVxdWVzdFxuICBXcml0YWJsZS5jYWxsKHRoaXMpO1xuICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLl9lbmRlZCA9IGZhbHNlO1xuICB0aGlzLl9lbmRpbmcgPSBmYWxzZTtcbiAgdGhpcy5fcmVkaXJlY3RDb3VudCA9IDA7XG4gIHRoaXMuX3JlZGlyZWN0cyA9IFtdO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCA9IDA7XG4gIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuXG4gIC8vIEF0dGFjaCBhIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAocmVzcG9uc2VDYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJyZXNwb25zZVwiLCByZXNwb25zZUNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIHJlc3BvbnNlcyBvZiBuYXRpdmUgcmVxdWVzdHNcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNlbGYuX3Byb2Nlc3NSZXNwb25zZShyZXNwb25zZSk7XG4gICAgfVxuICAgIGNhdGNoIChjYXVzZSkge1xuICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgY2F1c2UgaW5zdGFuY2VvZiBSZWRpcmVjdGlvbkVycm9yID9cbiAgICAgICAgY2F1c2UgOiBuZXcgUmVkaXJlY3Rpb25FcnJvcih7IGNhdXNlOiBjYXVzZSB9KSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFBlcmZvcm0gdGhlIGZpcnN0IHJlcXVlc3RcbiAgdGhpcy5fcGVyZm9ybVJlcXVlc3QoKTtcbn1cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXcml0YWJsZS5wcm90b3R5cGUpO1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgZGVzdHJveVJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QpO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5hYm9ydCgpO1xuICB0aGlzLmVtaXQoXCJhYm9ydFwiKTtcbn07XG5cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgZGVzdHJveVJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QsIGVycm9yKTtcbiAgZGVzdHJveS5jYWxsKHRoaXMsIGVycm9yKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBXcml0ZXMgYnVmZmVyZWQgZGF0YSB0byB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIC8vIFdyaXRpbmcgaXMgbm90IGFsbG93ZWQgaWYgZW5kIGhhcyBiZWVuIGNhbGxlZFxuICBpZiAodGhpcy5fZW5kaW5nKSB7XG4gICAgdGhyb3cgbmV3IFdyaXRlQWZ0ZXJFbmRFcnJvcigpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgaW5wdXQgYW5kIHNoaWZ0IHBhcmFtZXRlcnMgaWYgbmVjZXNzYXJ5XG4gIGlmICghaXNTdHJpbmcoZGF0YSkgJiYgIWlzQnVmZmVyKGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImRhdGEgc2hvdWxkIGJlIGEgc3RyaW5nLCBCdWZmZXIgb3IgVWludDhBcnJheVwiKTtcbiAgfVxuICBpZiAoaXNGdW5jdGlvbihlbmNvZGluZykpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIC8vIElnbm9yZSBlbXB0eSBidWZmZXJzLCBzaW5jZSB3cml0aW5nIHRoZW0gZG9lc24ndCBpbnZva2UgdGhlIGNhbGxiYWNrXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMjIwNjZcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgLy8gT25seSB3cml0ZSB3aGVuIHdlIGRvbid0IGV4Y2VlZCB0aGUgbWF4aW11bSBib2R5IGxlbmd0aFxuICBpZiAodGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggKyBkYXRhLmxlbmd0aCA8PSB0aGlzLl9vcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMucHVzaCh7IGRhdGE6IGRhdGEsIGVuY29kaW5nOiBlbmNvZGluZyB9KTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC53cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spO1xuICB9XG4gIC8vIEVycm9yIHdoZW4gd2UgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGVsc2Uge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvcigpKTtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cbn07XG5cbi8vIEVuZHMgdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gU2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICBjYWxsYmFjayA9IGRhdGE7XG4gICAgZGF0YSA9IGVuY29kaW5nID0gbnVsbDtcbiAgfVxuICBlbHNlIGlmIChpc0Z1bmN0aW9uKGVuY29kaW5nKSkge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gV3JpdGUgZGF0YSBpZiBuZWVkZWQgYW5kIGVuZFxuICBpZiAoIWRhdGEpIHtcbiAgICB0aGlzLl9lbmRlZCA9IHRoaXMuX2VuZGluZyA9IHRydWU7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGN1cnJlbnRSZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3Q7XG4gICAgdGhpcy53cml0ZShkYXRhLCBlbmNvZGluZywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fZW5kZWQgPSB0cnVlO1xuICAgICAgY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLl9lbmRpbmcgPSB0cnVlO1xuICB9XG59O1xuXG4vLyBTZXRzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnNldEhlYWRlcihuYW1lLCB2YWx1ZSk7XG59O1xuXG4vLyBDbGVhcnMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnJlbW92ZUhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV07XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnJlbW92ZUhlYWRlcihuYW1lKTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lb3V0IGZvciBhbGwgdW5kZXJseWluZyByZXF1ZXN0c1xuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChtc2VjcywgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIERlc3Ryb3lzIHRoZSBzb2NrZXQgb24gdGltZW91dFxuICBmdW5jdGlvbiBkZXN0cm95T25UaW1lb3V0KHNvY2tldCkge1xuICAgIHNvY2tldC5zZXRUaW1lb3V0KG1zZWNzKTtcbiAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgICBzb2NrZXQuYWRkTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgfVxuXG4gIC8vIFNldHMgdXAgYSB0aW1lciB0byB0cmlnZ2VyIGEgdGltZW91dCBldmVudFxuICBmdW5jdGlvbiBzdGFydFRpbWVyKHNvY2tldCkge1xuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgfVxuICAgIHNlbGYuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZW1pdChcInRpbWVvdXRcIik7XG4gICAgICBjbGVhclRpbWVyKCk7XG4gICAgfSwgbXNlY3MpO1xuICAgIGRlc3Ryb3lPblRpbWVvdXQoc29ja2V0KTtcbiAgfVxuXG4gIC8vIFN0b3BzIGEgdGltZW91dCBmcm9tIHRyaWdnZXJpbmdcbiAgZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcbiAgICAvLyBDbGVhciB0aGUgdGltZW91dFxuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgICBzZWxmLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCBhbGwgYXR0YWNoZWQgbGlzdGVuZXJzXG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImFib3J0XCIsIGNsZWFyVGltZXIpO1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCBjbGVhclRpbWVyKTtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwicmVzcG9uc2VcIiwgY2xlYXJUaW1lcik7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIGNsZWFyVGltZXIpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcInRpbWVvdXRcIiwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBpZiAoIXNlbGYuc29ja2V0KSB7XG4gICAgICBzZWxmLl9jdXJyZW50UmVxdWVzdC5yZW1vdmVMaXN0ZW5lcihcInNvY2tldFwiLCBzdGFydFRpbWVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBBdHRhY2ggY2FsbGJhY2sgaWYgcGFzc2VkXG4gIGlmIChjYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJ0aW1lb3V0XCIsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFN0YXJ0IHRoZSB0aW1lciBpZiBvciB3aGVuIHRoZSBzb2NrZXQgaXMgb3BlbmVkXG4gIGlmICh0aGlzLnNvY2tldCkge1xuICAgIHN0YXJ0VGltZXIodGhpcy5zb2NrZXQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0Lm9uY2UoXCJzb2NrZXRcIiwgc3RhcnRUaW1lcik7XG4gIH1cblxuICAvLyBDbGVhbiB1cCBvbiBldmVudHNcbiAgdGhpcy5vbihcInNvY2tldFwiLCBkZXN0cm95T25UaW1lb3V0KTtcbiAgdGhpcy5vbihcImFib3J0XCIsIGNsZWFyVGltZXIpO1xuICB0aGlzLm9uKFwiZXJyb3JcIiwgY2xlYXJUaW1lcik7XG4gIHRoaXMub24oXCJyZXNwb25zZVwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbihcImNsb3NlXCIsIGNsZWFyVGltZXIpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gUHJveHkgYWxsIG90aGVyIHB1YmxpYyBDbGllbnRSZXF1ZXN0IG1ldGhvZHNcbltcbiAgXCJmbHVzaEhlYWRlcnNcIiwgXCJnZXRIZWFkZXJcIixcbiAgXCJzZXROb0RlbGF5XCIsIFwic2V0U29ja2V0S2VlcEFsaXZlXCIsXG5dLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICBSZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbbWV0aG9kXShhLCBiKTtcbiAgfTtcbn0pO1xuXG4vLyBQcm94eSBhbGwgcHVibGljIENsaWVudFJlcXVlc3QgcHJvcGVydGllc1xuW1wiYWJvcnRlZFwiLCBcImNvbm5lY3Rpb25cIiwgXCJzb2NrZXRcIl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLCBwcm9wZXJ0eSwge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbcHJvcGVydHldOyB9LFxuICB9KTtcbn0pO1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fc2FuaXRpemVPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgLy8gRW5zdXJlIGhlYWRlcnMgYXJlIGFsd2F5cyBwcmVzZW50XG4gIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgb3B0aW9ucy5oZWFkZXJzID0ge307XG4gIH1cblxuICAvLyBTaW5jZSBodHRwLnJlcXVlc3QgdHJlYXRzIGhvc3QgYXMgYW4gYWxpYXMgb2YgaG9zdG5hbWUsXG4gIC8vIGJ1dCB0aGUgdXJsIG1vZHVsZSBpbnRlcnByZXRzIGhvc3QgYXMgaG9zdG5hbWUgcGx1cyBwb3J0LFxuICAvLyBlbGltaW5hdGUgdGhlIGhvc3QgcHJvcGVydHkgdG8gYXZvaWQgY29uZnVzaW9uLlxuICBpZiAob3B0aW9ucy5ob3N0KSB7XG4gICAgLy8gVXNlIGhvc3RuYW1lIGlmIHNldCwgYmVjYXVzZSBpdCBoYXMgcHJlY2VkZW5jZVxuICAgIGlmICghb3B0aW9ucy5ob3N0bmFtZSkge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IG9wdGlvbnMuaG9zdDtcbiAgICB9XG4gICAgZGVsZXRlIG9wdGlvbnMuaG9zdDtcbiAgfVxuXG4gIC8vIENvbXBsZXRlIHRoZSBVUkwgb2JqZWN0IHdoZW4gbmVjZXNzYXJ5XG4gIGlmICghb3B0aW9ucy5wYXRobmFtZSAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICB2YXIgc2VhcmNoUG9zID0gb3B0aW9ucy5wYXRoLmluZGV4T2YoXCI/XCIpO1xuICAgIGlmIChzZWFyY2hQb3MgPCAwKSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKDAsIHNlYXJjaFBvcyk7XG4gICAgICBvcHRpb25zLnNlYXJjaCA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoc2VhcmNoUG9zKTtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gRXhlY3V0ZXMgdGhlIG5leHQgbmF0aXZlIHJlcXVlc3QgKGluaXRpYWwgb3IgcmVkaXJlY3QpXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcGVyZm9ybVJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIExvYWQgdGhlIG5hdGl2ZSBwcm90b2NvbFxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLnByb3RvY29sO1xuICB2YXIgbmF0aXZlUHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLm5hdGl2ZVByb3RvY29sc1twcm90b2NvbF07XG4gIGlmICghbmF0aXZlUHJvdG9jb2wpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgXCIgKyBwcm90b2NvbCk7XG4gIH1cblxuICAvLyBJZiBzcGVjaWZpZWQsIHVzZSB0aGUgYWdlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdG9jb2xcbiAgLy8gKEhUVFAgYW5kIEhUVFBTIHVzZSBkaWZmZXJlbnQgdHlwZXMgb2YgYWdlbnRzKVxuICBpZiAodGhpcy5fb3B0aW9ucy5hZ2VudHMpIHtcbiAgICB2YXIgc2NoZW1lID0gcHJvdG9jb2wuc2xpY2UoMCwgLTEpO1xuICAgIHRoaXMuX29wdGlvbnMuYWdlbnQgPSB0aGlzLl9vcHRpb25zLmFnZW50c1tzY2hlbWVdO1xuICB9XG5cbiAgLy8gQ3JlYXRlIHRoZSBuYXRpdmUgcmVxdWVzdCBhbmQgc2V0IHVwIGl0cyBldmVudCBoYW5kbGVyc1xuICB2YXIgcmVxdWVzdCA9IHRoaXMuX2N1cnJlbnRSZXF1ZXN0ID1cbiAgICAgICAgbmF0aXZlUHJvdG9jb2wucmVxdWVzdCh0aGlzLl9vcHRpb25zLCB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlKTtcbiAgcmVxdWVzdC5fcmVkaXJlY3RhYmxlID0gdGhpcztcbiAgZm9yICh2YXIgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgcmVxdWVzdC5vbihldmVudCwgZXZlbnRIYW5kbGVyc1tldmVudF0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMMKnNS4zLjE6IFdoZW4gbWFraW5nIGEgcmVxdWVzdCBkaXJlY3RseSB0byBhbiBvcmlnaW4gc2VydmVyLCBb4oCmXVxuICAvLyBhIGNsaWVudCBNVVNUIHNlbmQgb25seSB0aGUgYWJzb2x1dGUgcGF0aCBb4oCmXSBhcyB0aGUgcmVxdWVzdC10YXJnZXQuXG4gIHRoaXMuX2N1cnJlbnRVcmwgPSAvXlxcLy8udGVzdCh0aGlzLl9vcHRpb25zLnBhdGgpID9cbiAgICB1cmwuZm9ybWF0KHRoaXMuX29wdGlvbnMpIDpcbiAgICAvLyBXaGVuIG1ha2luZyBhIHJlcXVlc3QgdG8gYSBwcm94eSwgW+KApl1cbiAgICAvLyBhIGNsaWVudCBNVVNUIHNlbmQgdGhlIHRhcmdldCBVUkkgaW4gYWJzb2x1dGUtZm9ybSBb4oCmXS5cbiAgICB0aGlzLl9vcHRpb25zLnBhdGg7XG5cbiAgLy8gRW5kIGEgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIC8vIChUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGJlIGVuZGVkIGV4cGxpY2l0bHkgd2l0aCBSZWRpcmVjdGFibGVSZXF1ZXN0I2VuZClcbiAgaWYgKHRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBlbnRpdHkgYW5kIGVuZFxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnM7XG4gICAgKGZ1bmN0aW9uIHdyaXRlTmV4dChlcnJvcikge1xuICAgICAgLy8gT25seSB3cml0ZSBpZiB0aGlzIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHJlZGlyZWN0ZWQgeWV0XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgaWYgKHJlcXVlc3QgPT09IHNlbGYuX2N1cnJlbnRSZXF1ZXN0KSB7XG4gICAgICAgIC8vIFJlcG9ydCBhbnkgd3JpdGUgZXJyb3JzXG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV3JpdGUgdGhlIG5leHQgYnVmZmVyIGlmIHRoZXJlIGFyZSBzdGlsbCBsZWZ0XG4gICAgICAgIGVsc2UgaWYgKGkgPCBidWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzW2krK107XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2VcbiAgICAgICAgICBpZiAoIXJlcXVlc3QuZmluaXNoZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Qud3JpdGUoYnVmZmVyLmRhdGEsIGJ1ZmZlci5lbmNvZGluZywgd3JpdGVOZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5kIHRoZSByZXF1ZXN0IGlmIGBlbmRgIGhhcyBiZWVuIGNhbGxlZCBvbiB1c1xuICAgICAgICBlbHNlIGlmIChzZWxmLl9lbmRlZCkge1xuICAgICAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KCkpO1xuICB9XG59O1xuXG4vLyBQcm9jZXNzZXMgYSByZXNwb25zZSBmcm9tIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcHJvY2Vzc1Jlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIC8vIFN0b3JlIHRoZSByZWRpcmVjdGVkIHJlc3BvbnNlXG4gIHZhciBzdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcbiAgaWYgKHRoaXMuX29wdGlvbnMudHJhY2tSZWRpcmVjdHMpIHtcbiAgICB0aGlzLl9yZWRpcmVjdHMucHVzaCh7XG4gICAgICB1cmw6IHRoaXMuX2N1cnJlbnRVcmwsXG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogVGhlIDN4eCAoUmVkaXJlY3Rpb24pIGNsYXNzIG9mIHN0YXR1cyBjb2RlIGluZGljYXRlc1xuICAvLyB0aGF0IGZ1cnRoZXIgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuIGJ5IHRoZSB1c2VyIGFnZW50IGluIG9yZGVyIHRvXG4gIC8vIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIElmIGEgTG9jYXRpb24gaGVhZGVyIGZpZWxkIGlzIHByb3ZpZGVkLFxuICAvLyB0aGUgdXNlciBhZ2VudCBNQVkgYXV0b21hdGljYWxseSByZWRpcmVjdCBpdHMgcmVxdWVzdCB0byB0aGUgVVJJXG4gIC8vIHJlZmVyZW5jZWQgYnkgdGhlIExvY2F0aW9uIGZpZWxkIHZhbHVlLFxuICAvLyBldmVuIGlmIHRoZSBzcGVjaWZpYyBzdGF0dXMgY29kZSBpcyBub3QgdW5kZXJzdG9vZC5cblxuICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbm90IGEgcmVkaXJlY3Q7IHJldHVybiBpdCBhcy1pc1xuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIWxvY2F0aW9uIHx8IHRoaXMuX29wdGlvbnMuZm9sbG93UmVkaXJlY3RzID09PSBmYWxzZSB8fFxuICAgICAgc3RhdHVzQ29kZSA8IDMwMCB8fCBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgIHJlc3BvbnNlLnJlc3BvbnNlVXJsID0gdGhpcy5fY3VycmVudFVybDtcbiAgICByZXNwb25zZS5yZWRpcmVjdHMgPSB0aGlzLl9yZWRpcmVjdHM7XG4gICAgdGhpcy5lbWl0KFwicmVzcG9uc2VcIiwgcmVzcG9uc2UpO1xuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgcmVzcG9uc2UgaXMgYSByZWRpcmVjdCwgc28gYWJvcnQgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICBkZXN0cm95UmVxdWVzdCh0aGlzLl9jdXJyZW50UmVxdWVzdCk7XG4gIC8vIERpc2NhcmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVzcG9uc2UgdG8gYXZvaWQgd2FpdGluZyBmb3IgZGF0YVxuICByZXNwb25zZS5kZXN0cm95KCk7XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBBIGNsaWVudCBTSE9VTEQgZGV0ZWN0IGFuZCBpbnRlcnZlbmVcbiAgLy8gaW4gY3ljbGljYWwgcmVkaXJlY3Rpb25zIChpLmUuLCBcImluZmluaXRlXCIgcmVkaXJlY3Rpb24gbG9vcHMpLlxuICBpZiAoKyt0aGlzLl9yZWRpcmVjdENvdW50ID4gdGhpcy5fb3B0aW9ucy5tYXhSZWRpcmVjdHMpIHtcbiAgICB0aHJvdyBuZXcgVG9vTWFueVJlZGlyZWN0c0Vycm9yKCk7XG4gIH1cblxuICAvLyBTdG9yZSB0aGUgcmVxdWVzdCBoZWFkZXJzIGlmIGFwcGxpY2FibGVcbiAgdmFyIHJlcXVlc3RIZWFkZXJzO1xuICB2YXIgYmVmb3JlUmVkaXJlY3QgPSB0aGlzLl9vcHRpb25zLmJlZm9yZVJlZGlyZWN0O1xuICBpZiAoYmVmb3JlUmVkaXJlY3QpIHtcbiAgICByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgLy8gVGhlIEhvc3QgaGVhZGVyIHdhcyBzZXQgYnkgbmF0aXZlUHJvdG9jb2wucmVxdWVzdFxuICAgICAgSG9zdDogcmVzcG9uc2UucmVxLmdldEhlYWRlcihcImhvc3RcIiksXG4gICAgfSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogQXV0b21hdGljIHJlZGlyZWN0aW9uIG5lZWRzIHRvIGRvbmUgd2l0aFxuICAvLyBjYXJlIGZvciBtZXRob2RzIG5vdCBrbm93biB0byBiZSBzYWZlLCBb4oCmXVxuICAvLyBSRkM3MjMxwqc2LjQuMuKAkzM6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGEgdXNlciBhZ2VudCBNQVkgY2hhbmdlXG4gIC8vIHRoZSByZXF1ZXN0IG1ldGhvZCBmcm9tIFBPU1QgdG8gR0VUIGZvciB0aGUgc3Vic2VxdWVudCByZXF1ZXN0LlxuICB2YXIgbWV0aG9kID0gdGhpcy5fb3B0aW9ucy5tZXRob2Q7XG4gIGlmICgoc3RhdHVzQ29kZSA9PT0gMzAxIHx8IHN0YXR1c0NvZGUgPT09IDMwMikgJiYgdGhpcy5fb3B0aW9ucy5tZXRob2QgPT09IFwiUE9TVFwiIHx8XG4gICAgICAvLyBSRkM3MjMxwqc2LjQuNDogVGhlIDMwMyAoU2VlIE90aGVyKSBzdGF0dXMgY29kZSBpbmRpY2F0ZXMgdGhhdFxuICAgICAgLy8gdGhlIHNlcnZlciBpcyByZWRpcmVjdGluZyB0aGUgdXNlciBhZ2VudCB0byBhIGRpZmZlcmVudCByZXNvdXJjZSBb4oCmXVxuICAgICAgLy8gQSB1c2VyIGFnZW50IGNhbiBwZXJmb3JtIGEgcmV0cmlldmFsIHJlcXVlc3QgdGFyZ2V0aW5nIHRoYXQgVVJJXG4gICAgICAvLyAoYSBHRVQgb3IgSEVBRCByZXF1ZXN0IGlmIHVzaW5nIEhUVFApIFvigKZdXG4gICAgICAoc3RhdHVzQ29kZSA9PT0gMzAzKSAmJiAhL14oPzpHRVR8SEVBRCkkLy50ZXN0KHRoaXMuX29wdGlvbnMubWV0aG9kKSkge1xuICAgIHRoaXMuX29wdGlvbnMubWV0aG9kID0gXCJHRVRcIjtcbiAgICAvLyBEcm9wIGEgcG9zc2libGUgZW50aXR5IGFuZCBoZWFkZXJzIHJlbGF0ZWQgdG8gaXRcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL15jb250ZW50LS9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgLy8gRHJvcCB0aGUgSG9zdCBoZWFkZXIsIGFzIHRoZSByZWRpcmVjdCBtaWdodCBsZWFkIHRvIGEgZGlmZmVyZW50IGhvc3RcbiAgdmFyIGN1cnJlbnRIb3N0SGVhZGVyID0gcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eaG9zdCQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcblxuICAvLyBJZiB0aGUgcmVkaXJlY3QgaXMgcmVsYXRpdmUsIGNhcnJ5IG92ZXIgdGhlIGhvc3Qgb2YgdGhlIGxhc3QgcmVxdWVzdFxuICB2YXIgY3VycmVudFVybFBhcnRzID0gcGFyc2VVcmwodGhpcy5fY3VycmVudFVybCk7XG4gIHZhciBjdXJyZW50SG9zdCA9IGN1cnJlbnRIb3N0SGVhZGVyIHx8IGN1cnJlbnRVcmxQYXJ0cy5ob3N0O1xuICB2YXIgY3VycmVudFVybCA9IC9eXFx3KzovLnRlc3QobG9jYXRpb24pID8gdGhpcy5fY3VycmVudFVybCA6XG4gICAgdXJsLmZvcm1hdChPYmplY3QuYXNzaWduKGN1cnJlbnRVcmxQYXJ0cywgeyBob3N0OiBjdXJyZW50SG9zdCB9KSk7XG5cbiAgLy8gQ3JlYXRlIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgdmFyIHJlZGlyZWN0VXJsID0gcmVzb2x2ZVVybChsb2NhdGlvbiwgY3VycmVudFVybCk7XG4gIGRlYnVnKFwicmVkaXJlY3RpbmcgdG9cIiwgcmVkaXJlY3RVcmwuaHJlZik7XG4gIHRoaXMuX2lzUmVkaXJlY3QgPSB0cnVlO1xuICBzcHJlYWRVcmxPYmplY3QocmVkaXJlY3RVcmwsIHRoaXMuX29wdGlvbnMpO1xuXG4gIC8vIERyb3AgY29uZmlkZW50aWFsIGhlYWRlcnMgd2hlbiByZWRpcmVjdGluZyB0byBhIGxlc3Mgc2VjdXJlIHByb3RvY29sXG4gIC8vIG9yIHRvIGEgZGlmZmVyZW50IGRvbWFpbiB0aGF0IGlzIG5vdCBhIHN1cGVyZG9tYWluXG4gIGlmIChyZWRpcmVjdFVybC5wcm90b2NvbCAhPT0gY3VycmVudFVybFBhcnRzLnByb3RvY29sICYmXG4gICAgIHJlZGlyZWN0VXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiIHx8XG4gICAgIHJlZGlyZWN0VXJsLmhvc3QgIT09IGN1cnJlbnRIb3N0ICYmXG4gICAgICFpc1N1YmRvbWFpbihyZWRpcmVjdFVybC5ob3N0LCBjdXJyZW50SG9zdCkpIHtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL14oPzooPzpwcm94eS0pP2F1dGhvcml6YXRpb258Y29va2llKSQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIEV2YWx1YXRlIHRoZSBiZWZvcmVSZWRpcmVjdCBjYWxsYmFja1xuICBpZiAoaXNGdW5jdGlvbihiZWZvcmVSZWRpcmVjdCkpIHtcbiAgICB2YXIgcmVzcG9uc2VEZXRhaWxzID0ge1xuICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUsXG4gICAgfTtcbiAgICB2YXIgcmVxdWVzdERldGFpbHMgPSB7XG4gICAgICB1cmw6IGN1cnJlbnRVcmwsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgIH07XG4gICAgYmVmb3JlUmVkaXJlY3QodGhpcy5fb3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzLCByZXF1ZXN0RGV0YWlscyk7XG4gICAgdGhpcy5fc2FuaXRpemVPcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuICB9XG5cbiAgLy8gUGVyZm9ybSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59O1xuXG4vLyBXcmFwcyB0aGUga2V5L3ZhbHVlIG9iamVjdCBvZiBwcm90b2NvbHMgd2l0aCByZWRpcmVjdCBmdW5jdGlvbmFsaXR5XG5mdW5jdGlvbiB3cmFwKHByb3RvY29scykge1xuICAvLyBEZWZhdWx0IHNldHRpbmdzXG4gIHZhciBleHBvcnRzID0ge1xuICAgIG1heFJlZGlyZWN0czogMjEsXG4gICAgbWF4Qm9keUxlbmd0aDogMTAgKiAxMDI0ICogMTAyNCxcbiAgfTtcblxuICAvLyBXcmFwIGVhY2ggcHJvdG9jb2xcbiAgdmFyIG5hdGl2ZVByb3RvY29scyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm90b2NvbHMpLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZSkge1xuICAgIHZhciBwcm90b2NvbCA9IHNjaGVtZSArIFwiOlwiO1xuICAgIHZhciBuYXRpdmVQcm90b2NvbCA9IG5hdGl2ZVByb3RvY29sc1twcm90b2NvbF0gPSBwcm90b2NvbHNbc2NoZW1lXTtcbiAgICB2YXIgd3JhcHBlZFByb3RvY29sID0gZXhwb3J0c1tzY2hlbWVdID0gT2JqZWN0LmNyZWF0ZShuYXRpdmVQcm90b2NvbCk7XG5cbiAgICAvLyBFeGVjdXRlcyBhIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiByZXF1ZXN0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgLy8gUGFyc2UgcGFyYW1ldGVycywgZW5zdXJpbmcgdGhhdCBpbnB1dCBpcyBhbiBvYmplY3RcbiAgICAgIGlmIChpc1VSTChpbnB1dCkpIHtcbiAgICAgICAgaW5wdXQgPSBzcHJlYWRVcmxPYmplY3QoaW5wdXQpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoaW5wdXQpKSB7XG4gICAgICAgIGlucHV0ID0gc3ByZWFkVXJsT2JqZWN0KHBhcnNlVXJsKGlucHV0KSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdmFsaWRhdGVVcmwoaW5wdXQpO1xuICAgICAgICBpbnB1dCA9IHsgcHJvdG9jb2w6IHByb3RvY29sIH07XG4gICAgICB9XG4gICAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgbWF4UmVkaXJlY3RzOiBleHBvcnRzLm1heFJlZGlyZWN0cyxcbiAgICAgICAgbWF4Qm9keUxlbmd0aDogZXhwb3J0cy5tYXhCb2R5TGVuZ3RoLFxuICAgICAgfSwgaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5uYXRpdmVQcm90b2NvbHMgPSBuYXRpdmVQcm90b2NvbHM7XG4gICAgICBpZiAoIWlzU3RyaW5nKG9wdGlvbnMuaG9zdCkgJiYgIWlzU3RyaW5nKG9wdGlvbnMuaG9zdG5hbWUpKSB7XG4gICAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBcIjo6MVwiO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQuZXF1YWwob3B0aW9ucy5wcm90b2NvbCwgcHJvdG9jb2wsIFwicHJvdG9jb2wgbWlzbWF0Y2hcIik7XG4gICAgICBkZWJ1ZyhcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gbmV3IFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGVzIGEgR0VUIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiBnZXQoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgd3JhcHBlZFJlcXVlc3QgPSB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgd3JhcHBlZFJlcXVlc3QuZW5kKCk7XG4gICAgICByZXR1cm4gd3JhcHBlZFJlcXVlc3Q7XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB3cmFwcGVkIHByb3RvY29sXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3JhcHBlZFByb3RvY29sLCB7XG4gICAgICByZXF1ZXN0OiB7IHZhbHVlOiByZXF1ZXN0LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgICBnZXQ6IHsgdmFsdWU6IGdldCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IC8qIGVtcHR5ICovIH1cblxuZnVuY3Rpb24gcGFyc2VVcmwoaW5wdXQpIHtcbiAgdmFyIHBhcnNlZDtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2VcbiAgaWYgKHVzZU5hdGl2ZVVSTCkge1xuICAgIHBhcnNlZCA9IG5ldyBVUkwoaW5wdXQpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIEVuc3VyZSB0aGUgVVJMIGlzIHZhbGlkIGFuZCBhYnNvbHV0ZVxuICAgIHBhcnNlZCA9IHZhbGlkYXRlVXJsKHVybC5wYXJzZShpbnB1dCkpO1xuICAgIGlmICghaXNTdHJpbmcocGFyc2VkLnByb3RvY29sKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRVcmxFcnJvcih7IGlucHV0IH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVXJsKHJlbGF0aXZlLCBiYXNlKSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gIHJldHVybiB1c2VOYXRpdmVVUkwgPyBuZXcgVVJMKHJlbGF0aXZlLCBiYXNlKSA6IHBhcnNlVXJsKHVybC5yZXNvbHZlKGJhc2UsIHJlbGF0aXZlKSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVXJsKGlucHV0KSB7XG4gIGlmICgvXlxcWy8udGVzdChpbnB1dC5ob3N0bmFtZSkgJiYgIS9eXFxbWzowLTlhLWZdK1xcXSQvaS50ZXN0KGlucHV0Lmhvc3RuYW1lKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkVXJsRXJyb3IoeyBpbnB1dDogaW5wdXQuaHJlZiB8fCBpbnB1dCB9KTtcbiAgfVxuICBpZiAoL15cXFsvLnRlc3QoaW5wdXQuaG9zdCkgJiYgIS9eXFxbWzowLTlhLWZdK1xcXSg6XFxkKyk/JC9pLnRlc3QoaW5wdXQuaG9zdCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFVybEVycm9yKHsgaW5wdXQ6IGlucHV0LmhyZWYgfHwgaW5wdXQgfSk7XG4gIH1cbiAgcmV0dXJuIGlucHV0O1xufVxuXG5mdW5jdGlvbiBzcHJlYWRVcmxPYmplY3QodXJsT2JqZWN0LCB0YXJnZXQpIHtcbiAgdmFyIHNwcmVhZCA9IHRhcmdldCB8fCB7fTtcbiAgZm9yICh2YXIga2V5IG9mIHByZXNlcnZlZFVybEZpZWxkcykge1xuICAgIHNwcmVhZFtrZXldID0gdXJsT2JqZWN0W2tleV07XG4gIH1cblxuICAvLyBGaXggSVB2NiBob3N0bmFtZVxuICBpZiAoc3ByZWFkLmhvc3RuYW1lLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgc3ByZWFkLmhvc3RuYW1lID0gc3ByZWFkLmhvc3RuYW1lLnNsaWNlKDEsIC0xKTtcbiAgfVxuICAvLyBFbnN1cmUgcG9ydCBpcyBhIG51bWJlclxuICBpZiAoc3ByZWFkLnBvcnQgIT09IFwiXCIpIHtcbiAgICBzcHJlYWQucG9ydCA9IE51bWJlcihzcHJlYWQucG9ydCk7XG4gIH1cbiAgLy8gQ29uY2F0ZW5hdGUgcGF0aFxuICBzcHJlYWQucGF0aCA9IHNwcmVhZC5zZWFyY2ggPyBzcHJlYWQucGF0aG5hbWUgKyBzcHJlYWQuc2VhcmNoIDogc3ByZWFkLnBhdGhuYW1lO1xuXG4gIHJldHVybiBzcHJlYWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU1hdGNoaW5nSGVhZGVycyhyZWdleCwgaGVhZGVycykge1xuICB2YXIgbGFzdFZhbHVlO1xuICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgIGlmIChyZWdleC50ZXN0KGhlYWRlcikpIHtcbiAgICAgIGxhc3RWYWx1ZSA9IGhlYWRlcnNbaGVhZGVyXTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuICB9XG4gIHJldHVybiAobGFzdFZhbHVlID09PSBudWxsIHx8IHR5cGVvZiBsYXN0VmFsdWUgPT09IFwidW5kZWZpbmVkXCIpID9cbiAgICB1bmRlZmluZWQgOiBTdHJpbmcobGFzdFZhbHVlKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yVHlwZShjb2RlLCBtZXNzYWdlLCBiYXNlQ2xhc3MpIHtcbiAgLy8gQ3JlYXRlIGNvbnN0cnVjdG9yXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKHByb3BlcnRpZXMpIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgIGlmIChpc0Z1bmN0aW9uKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgcHJvcGVydGllcyB8fCB7fSk7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB0aGlzLm1lc3NhZ2UgPSB0aGlzLmNhdXNlID8gbWVzc2FnZSArIFwiOiBcIiArIHRoaXMuY2F1c2UubWVzc2FnZSA6IG1lc3NhZ2U7XG4gIH1cblxuICAvLyBBdHRhY2ggY29uc3RydWN0b3IgYW5kIHNldCBkZWZhdWx0IHByb3BlcnRpZXNcbiAgQ3VzdG9tRXJyb3IucHJvdG90eXBlID0gbmV3IChiYXNlQ2xhc3MgfHwgRXJyb3IpKCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEN1c3RvbUVycm9yLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogQ3VzdG9tRXJyb3IsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgIG5hbWU6IHtcbiAgICAgIHZhbHVlOiBcIkVycm9yIFtcIiArIGNvZGUgKyBcIl1cIixcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0sXG4gIH0pO1xuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3lSZXF1ZXN0KHJlcXVlc3QsIGVycm9yKSB7XG4gIGZvciAodmFyIGV2ZW50IG9mIGV2ZW50cykge1xuICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGV2ZW50SGFuZGxlcnNbZXZlbnRdKTtcbiAgfVxuICByZXF1ZXN0Lm9uKFwiZXJyb3JcIiwgbm9vcCk7XG4gIHJlcXVlc3QuZGVzdHJveShlcnJvcik7XG59XG5cbmZ1bmN0aW9uIGlzU3ViZG9tYWluKHN1YmRvbWFpbiwgZG9tYWluKSB7XG4gIGFzc2VydChpc1N0cmluZyhzdWJkb21haW4pICYmIGlzU3RyaW5nKGRvbWFpbikpO1xuICB2YXIgZG90ID0gc3ViZG9tYWluLmxlbmd0aCAtIGRvbWFpbi5sZW5ndGggLSAxO1xuICByZXR1cm4gZG90ID4gMCAmJiBzdWJkb21haW5bZG90XSA9PT0gXCIuXCIgJiYgc3ViZG9tYWluLmVuZHNXaXRoKGRvbWFpbik7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIChcImxlbmd0aFwiIGluIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNVUkwodmFsdWUpIHtcbiAgcmV0dXJuIFVSTCAmJiB2YWx1ZSBpbnN0YW5jZW9mIFVSTDtcbn1cblxuLy8gRXhwb3J0c1xubW9kdWxlLmV4cG9ydHMgPSB3cmFwKHsgaHR0cDogaHR0cCwgaHR0cHM6IGh0dHBzIH0pO1xubW9kdWxlLmV4cG9ydHMud3JhcCA9IHdyYXA7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/follow-redirects/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/form-data.js b/frontend/.next/server/vendor-chunks/form-data.js new file mode 100644 index 000000000..8c8830ab0 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/form-data.js @@ -0,0 +1,34 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/form-data"; +exports.ids = ["vendor-chunks/form-data"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/form-data/lib/form_data.js": +/*!*************************************************!*\ + !*** ./node_modules/form-data/lib/form_data.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("var CombinedStream = __webpack_require__(/*! combined-stream */ \"(ssr)/./node_modules/combined-stream/lib/combined_stream.js\");\nvar util = __webpack_require__(/*! util */ \"util\");\nvar path = __webpack_require__(/*! path */ \"path\");\nvar http = __webpack_require__(/*! http */ \"http\");\nvar https = __webpack_require__(/*! https */ \"https\");\nvar parseUrl = (__webpack_require__(/*! url */ \"url\").parse);\nvar fs = __webpack_require__(/*! fs */ \"fs\");\nvar Stream = (__webpack_require__(/*! stream */ \"stream\").Stream);\nvar mime = __webpack_require__(/*! mime-types */ \"(ssr)/./node_modules/mime-types/index.js\");\nvar asynckit = __webpack_require__(/*! asynckit */ \"(ssr)/./node_modules/asynckit/index.js\");\nvar setToStringTag = __webpack_require__(/*! es-set-tostringtag */ \"(ssr)/./node_modules/es-set-tostringtag/index.js\");\nvar populate = __webpack_require__(/*! ./populate.js */ \"(ssr)/./node_modules/form-data/lib/populate.js\");\n\n// Public API\nmodule.exports = FormData;\n\n// make it a Stream\nutil.inherits(FormData, CombinedStream);\n\n/**\n * Create readable \"multipart/form-data\" streams.\n * Can be used to submit forms\n * and file uploads to other web applications.\n *\n * @constructor\n * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream\n */\nfunction FormData(options) {\n if (!(this instanceof FormData)) {\n return new FormData(options);\n }\n\n this._overheadLength = 0;\n this._valueLength = 0;\n this._valuesToMeasure = [];\n\n CombinedStream.call(this);\n\n options = options || {};\n for (var option in options) {\n this[option] = options[option];\n }\n}\n\nFormData.LINE_BREAK = '\\r\\n';\nFormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';\n\nFormData.prototype.append = function(field, value, options) {\n\n options = options || {};\n\n // allow filename as single option\n if (typeof options == 'string') {\n options = {filename: options};\n }\n\n var append = CombinedStream.prototype.append.bind(this);\n\n // all that streamy business can't handle numbers\n if (typeof value == 'number') {\n value = '' + value;\n }\n\n // https://github.com/felixge/node-form-data/issues/38\n if (Array.isArray(value)) {\n // Please convert your array into string\n // the way web server expects it\n this._error(new Error('Arrays are not supported.'));\n return;\n }\n\n var header = this._multiPartHeader(field, value, options);\n var footer = this._multiPartFooter();\n\n append(header);\n append(value);\n append(footer);\n\n // pass along options.knownLength\n this._trackLength(header, value, options);\n};\n\nFormData.prototype._trackLength = function(header, value, options) {\n var valueLength = 0;\n\n // used w/ getLengthSync(), when length is known.\n // e.g. for streaming directly from a remote server,\n // w/ a known file a size, and not wanting to wait for\n // incoming file to finish to get its size.\n if (options.knownLength != null) {\n valueLength += +options.knownLength;\n } else if (Buffer.isBuffer(value)) {\n valueLength = value.length;\n } else if (typeof value === 'string') {\n valueLength = Buffer.byteLength(value);\n }\n\n this._valueLength += valueLength;\n\n // @check why add CRLF? does this account for custom/multiple CRLFs?\n this._overheadLength +=\n Buffer.byteLength(header) +\n FormData.LINE_BREAK.length;\n\n // empty or either doesn't have path or not an http response or not a stream\n if (!value || ( !value.path && !(value.readable && Object.prototype.hasOwnProperty.call(value, 'httpVersion')) && !(value instanceof Stream))) {\n return;\n }\n\n // no need to bother with the length\n if (!options.knownLength) {\n this._valuesToMeasure.push(value);\n }\n};\n\nFormData.prototype._lengthRetriever = function(value, callback) {\n if (Object.prototype.hasOwnProperty.call(value, 'fd')) {\n\n // take read range into a account\n // `end` = Infinity –> read file till the end\n //\n // TODO: Looks like there is bug in Node fs.createReadStream\n // it doesn't respect `end` options without `start` options\n // Fix it when node fixes it.\n // https://github.com/joyent/node/issues/7819\n if (value.end != undefined && value.end != Infinity && value.start != undefined) {\n\n // when end specified\n // no need to calculate range\n // inclusive, starts with 0\n callback(null, value.end + 1 - (value.start ? value.start : 0));\n\n // not that fast snoopy\n } else {\n // still need to fetch file size from fs\n fs.stat(value.path, function(err, stat) {\n\n var fileSize;\n\n if (err) {\n callback(err);\n return;\n }\n\n // update final size based on the range options\n fileSize = stat.size - (value.start ? value.start : 0);\n callback(null, fileSize);\n });\n }\n\n // or http response\n } else if (Object.prototype.hasOwnProperty.call(value, 'httpVersion')) {\n callback(null, +value.headers['content-length']);\n\n // or request stream http://github.com/mikeal/request\n } else if (Object.prototype.hasOwnProperty.call(value, 'httpModule')) {\n // wait till response come back\n value.on('response', function(response) {\n value.pause();\n callback(null, +response.headers['content-length']);\n });\n value.resume();\n\n // something else\n } else {\n callback('Unknown stream');\n }\n};\n\nFormData.prototype._multiPartHeader = function(field, value, options) {\n // custom header specified (as string)?\n // it becomes responsible for boundary\n // (e.g. to handle extra CRLFs on .NET servers)\n if (typeof options.header == 'string') {\n return options.header;\n }\n\n var contentDisposition = this._getContentDisposition(value, options);\n var contentType = this._getContentType(value, options);\n\n var contents = '';\n var headers = {\n // add custom disposition as third element or keep it two elements if not\n 'Content-Disposition': ['form-data', 'name=\"' + field + '\"'].concat(contentDisposition || []),\n // if no content type. allow it to be empty array\n 'Content-Type': [].concat(contentType || [])\n };\n\n // allow custom headers.\n if (typeof options.header == 'object') {\n populate(headers, options.header);\n }\n\n var header;\n for (var prop in headers) {\n if (Object.prototype.hasOwnProperty.call(headers, prop)) {\n header = headers[prop];\n\n // skip nullish headers.\n if (header == null) {\n continue;\n }\n\n // convert all headers to arrays.\n if (!Array.isArray(header)) {\n header = [header];\n }\n\n // add non-empty headers.\n if (header.length) {\n contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;\n }\n }\n }\n\n return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;\n};\n\nFormData.prototype._getContentDisposition = function(value, options) {\n\n var filename\n , contentDisposition\n ;\n\n if (typeof options.filepath === 'string') {\n // custom filepath for relative paths\n filename = path.normalize(options.filepath).replace(/\\\\/g, '/');\n } else if (options.filename || value.name || value.path) {\n // custom filename take precedence\n // formidable and the browser add a name property\n // fs- and request- streams have path property\n filename = path.basename(options.filename || value.name || value.path);\n } else if (value.readable && Object.prototype.hasOwnProperty.call(value, 'httpVersion')) {\n // or try http response\n filename = path.basename(value.client._httpMessage.path || '');\n }\n\n if (filename) {\n contentDisposition = 'filename=\"' + filename + '\"';\n }\n\n return contentDisposition;\n};\n\nFormData.prototype._getContentType = function(value, options) {\n\n // use custom content-type above all\n var contentType = options.contentType;\n\n // or try `name` from formidable, browser\n if (!contentType && value.name) {\n contentType = mime.lookup(value.name);\n }\n\n // or try `path` from fs-, request- streams\n if (!contentType && value.path) {\n contentType = mime.lookup(value.path);\n }\n\n // or if it's http-reponse\n if (!contentType && value.readable && Object.prototype.hasOwnProperty.call(value, 'httpVersion')) {\n contentType = value.headers['content-type'];\n }\n\n // or guess it from the filepath or filename\n if (!contentType && (options.filepath || options.filename)) {\n contentType = mime.lookup(options.filepath || options.filename);\n }\n\n // fallback to the default content type if `value` is not simple value\n if (!contentType && typeof value == 'object') {\n contentType = FormData.DEFAULT_CONTENT_TYPE;\n }\n\n return contentType;\n};\n\nFormData.prototype._multiPartFooter = function() {\n return function(next) {\n var footer = FormData.LINE_BREAK;\n\n var lastPart = (this._streams.length === 0);\n if (lastPart) {\n footer += this._lastBoundary();\n }\n\n next(footer);\n }.bind(this);\n};\n\nFormData.prototype._lastBoundary = function() {\n return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;\n};\n\nFormData.prototype.getHeaders = function(userHeaders) {\n var header;\n var formHeaders = {\n 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()\n };\n\n for (header in userHeaders) {\n if (Object.prototype.hasOwnProperty.call(userHeaders, header)) {\n formHeaders[header.toLowerCase()] = userHeaders[header];\n }\n }\n\n return formHeaders;\n};\n\nFormData.prototype.setBoundary = function(boundary) {\n this._boundary = boundary;\n};\n\nFormData.prototype.getBoundary = function() {\n if (!this._boundary) {\n this._generateBoundary();\n }\n\n return this._boundary;\n};\n\nFormData.prototype.getBuffer = function() {\n var dataBuffer = new Buffer.alloc(0);\n var boundary = this.getBoundary();\n\n // Create the form content. Add Line breaks to the end of data.\n for (var i = 0, len = this._streams.length; i < len; i++) {\n if (typeof this._streams[i] !== 'function') {\n\n // Add content to the buffer.\n if(Buffer.isBuffer(this._streams[i])) {\n dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);\n }else {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);\n }\n\n // Add break after content.\n if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {\n dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );\n }\n }\n }\n\n // Add the footer and return the Buffer object.\n return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );\n};\n\nFormData.prototype._generateBoundary = function() {\n // This generates a 50 character boundary similar to those used by Firefox.\n // They are optimized for boyer-moore parsing.\n var boundary = '--------------------------';\n for (var i = 0; i < 24; i++) {\n boundary += Math.floor(Math.random() * 10).toString(16);\n }\n\n this._boundary = boundary;\n};\n\n// Note: getLengthSync DOESN'T calculate streams length\n// As workaround one can calculate file size manually\n// and add it as knownLength option\nFormData.prototype.getLengthSync = function() {\n var knownLength = this._overheadLength + this._valueLength;\n\n // Don't get confused, there are 3 \"internal\" streams for each keyval pair\n // so it basically checks if there is any value added to the form\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n // https://github.com/form-data/form-data/issues/40\n if (!this.hasKnownLength()) {\n // Some async length retrievers are present\n // therefore synchronous length calculation is false.\n // Please use getLength(callback) to get proper length\n this._error(new Error('Cannot calculate proper length in synchronous way.'));\n }\n\n return knownLength;\n};\n\n// Public API to check if length of added values is known\n// https://github.com/form-data/form-data/issues/196\n// https://github.com/form-data/form-data/issues/262\nFormData.prototype.hasKnownLength = function() {\n var hasKnownLength = true;\n\n if (this._valuesToMeasure.length) {\n hasKnownLength = false;\n }\n\n return hasKnownLength;\n};\n\nFormData.prototype.getLength = function(cb) {\n var knownLength = this._overheadLength + this._valueLength;\n\n if (this._streams.length) {\n knownLength += this._lastBoundary().length;\n }\n\n if (!this._valuesToMeasure.length) {\n process.nextTick(cb.bind(this, null, knownLength));\n return;\n }\n\n asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {\n if (err) {\n cb(err);\n return;\n }\n\n values.forEach(function(length) {\n knownLength += length;\n });\n\n cb(null, knownLength);\n });\n};\n\nFormData.prototype.submit = function(params, cb) {\n var request\n , options\n , defaults = {method: 'post'}\n ;\n\n // parse provided url if it's string\n // or treat it as options object\n if (typeof params == 'string') {\n\n params = parseUrl(params);\n options = populate({\n port: params.port,\n path: params.pathname,\n host: params.hostname,\n protocol: params.protocol\n }, defaults);\n\n // use custom params\n } else {\n\n options = populate(params, defaults);\n // if no port provided use default one\n if (!options.port) {\n options.port = options.protocol == 'https:' ? 443 : 80;\n }\n }\n\n // put that good code in getHeaders to some use\n options.headers = this.getHeaders(params.headers);\n\n // https if specified, fallback to http in any other case\n if (options.protocol == 'https:') {\n request = https.request(options);\n } else {\n request = http.request(options);\n }\n\n // get content length and fire away\n this.getLength(function(err, length) {\n if (err && err !== 'Unknown stream') {\n this._error(err);\n return;\n }\n\n // add content length\n if (length) {\n request.setHeader('Content-Length', length);\n }\n\n this.pipe(request);\n if (cb) {\n var onResponse;\n\n var callback = function (error, responce) {\n request.removeListener('error', callback);\n request.removeListener('response', onResponse);\n\n return cb.call(this, error, responce);\n };\n\n onResponse = callback.bind(this, null);\n\n request.on('error', callback);\n request.on('response', onResponse);\n }\n }.bind(this));\n\n return request;\n};\n\nFormData.prototype._error = function(err) {\n if (!this.error) {\n this.error = err;\n this.pause();\n this.emit('error', err);\n }\n};\n\nFormData.prototype.toString = function () {\n return '[object FormData]';\n};\nsetToStringTag(FormData, 'FormData');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9mb3JtX2RhdGEuanMiLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCLG1CQUFPLENBQUMsb0ZBQWlCO0FBQzlDLFdBQVcsbUJBQU8sQ0FBQyxrQkFBTTtBQUN6QixXQUFXLG1CQUFPLENBQUMsa0JBQU07QUFDekIsV0FBVyxtQkFBTyxDQUFDLGtCQUFNO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxvQkFBTztBQUMzQixlQUFlLDZDQUFvQjtBQUNuQyxTQUFTLG1CQUFPLENBQUMsY0FBSTtBQUNyQixhQUFhLG9EQUF3QjtBQUNyQyxXQUFXLG1CQUFPLENBQUMsNERBQVk7QUFDL0IsZUFBZSxtQkFBTyxDQUFDLHdEQUFVO0FBQ2pDLHFCQUFxQixtQkFBTyxDQUFDLDRFQUFvQjtBQUNqRCxlQUFlLG1CQUFPLENBQUMscUVBQWU7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4QyxTQUFTO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvZm9ybV9kYXRhLmpzPzE0MTMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIENvbWJpbmVkU3RyZWFtID0gcmVxdWlyZSgnY29tYmluZWQtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBtaW1lID0gcmVxdWlyZSgnbWltZS10eXBlcycpO1xudmFyIGFzeW5ja2l0ID0gcmVxdWlyZSgnYXN5bmNraXQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2VzLXNldC10b3N0cmluZ3RhZycpO1xudmFyIHBvcHVsYXRlID0gcmVxdWlyZSgnLi9wb3B1bGF0ZS5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1EYXRhO1xuXG4vLyBtYWtlIGl0IGEgU3RyZWFtXG51dGlsLmluaGVyaXRzKEZvcm1EYXRhLCBDb21iaW5lZFN0cmVhbSk7XG5cbi8qKlxuICogQ3JlYXRlIHJlYWRhYmxlIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIHN0cmVhbXMuXG4gKiBDYW4gYmUgdXNlZCB0byBzdWJtaXQgZm9ybXNcbiAqIGFuZCBmaWxlIHVwbG9hZHMgdG8gb3RoZXIgd2ViIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUHJvcGVydGllcyB0byBiZSBhZGRlZC9vdmVycmlkZW4gZm9yIEZvcm1EYXRhIGFuZCBDb21iaW5lZFN0cmVhbVxuICovXG5mdW5jdGlvbiBGb3JtRGF0YShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICByZXR1cm4gbmV3IEZvcm1EYXRhKG9wdGlvbnMpO1xuICB9XG5cbiAgdGhpcy5fb3ZlcmhlYWRMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZUxlbmd0aCA9IDA7XG4gIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSA9IFtdO1xuXG4gIENvbWJpbmVkU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgdGhpc1tvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG59XG5cbkZvcm1EYXRhLkxJTkVfQlJFQUsgPSAnXFxyXFxuJztcbkZvcm1EYXRhLkRFRkFVTFRfQ09OVEVOVF9UWVBFID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBhbGxvdyBmaWxlbmFtZSBhcyBzaW5nbGUgb3B0aW9uXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSB7ZmlsZW5hbWU6IG9wdGlvbnN9O1xuICB9XG5cbiAgdmFyIGFwcGVuZCA9IENvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQuYmluZCh0aGlzKTtcblxuICAvLyBhbGwgdGhhdCBzdHJlYW15IGJ1c2luZXNzIGNhbid0IGhhbmRsZSBudW1iZXJzXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICB2YWx1ZSA9ICcnICsgdmFsdWU7XG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmVsaXhnZS9ub2RlLWZvcm0tZGF0YS9pc3N1ZXMvMzhcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUGxlYXNlIGNvbnZlcnQgeW91ciBhcnJheSBpbnRvIHN0cmluZ1xuICAgIC8vIHRoZSB3YXkgd2ViIHNlcnZlciBleHBlY3RzIGl0XG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoZWFkZXIgPSB0aGlzLl9tdWx0aVBhcnRIZWFkZXIoZmllbGQsIHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGZvb3RlciA9IHRoaXMuX211bHRpUGFydEZvb3RlcigpO1xuXG4gIGFwcGVuZChoZWFkZXIpO1xuICBhcHBlbmQodmFsdWUpO1xuICBhcHBlbmQoZm9vdGVyKTtcblxuICAvLyBwYXNzIGFsb25nIG9wdGlvbnMua25vd25MZW5ndGhcbiAgdGhpcy5fdHJhY2tMZW5ndGgoaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX3RyYWNrTGVuZ3RoID0gZnVuY3Rpb24oaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdmFsdWVMZW5ndGggPSAwO1xuXG4gIC8vIHVzZWQgdy8gZ2V0TGVuZ3RoU3luYygpLCB3aGVuIGxlbmd0aCBpcyBrbm93bi5cbiAgLy8gZS5nLiBmb3Igc3RyZWFtaW5nIGRpcmVjdGx5IGZyb20gYSByZW1vdGUgc2VydmVyLFxuICAvLyB3LyBhIGtub3duIGZpbGUgYSBzaXplLCBhbmQgbm90IHdhbnRpbmcgdG8gd2FpdCBmb3JcbiAgLy8gaW5jb21pbmcgZmlsZSB0byBmaW5pc2ggdG8gZ2V0IGl0cyBzaXplLlxuICBpZiAob3B0aW9ucy5rbm93bkxlbmd0aCAhPSBudWxsKSB7XG4gICAgdmFsdWVMZW5ndGggKz0gK29wdGlvbnMua25vd25MZW5ndGg7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgfVxuXG4gIHRoaXMuX3ZhbHVlTGVuZ3RoICs9IHZhbHVlTGVuZ3RoO1xuXG4gIC8vIEBjaGVjayB3aHkgYWRkIENSTEY/IGRvZXMgdGhpcyBhY2NvdW50IGZvciBjdXN0b20vbXVsdGlwbGUgQ1JMRnM/XG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoICs9XG4gICAgQnVmZmVyLmJ5dGVMZW5ndGgoaGVhZGVyKSArXG4gICAgRm9ybURhdGEuTElORV9CUkVBSy5sZW5ndGg7XG5cbiAgLy8gZW1wdHkgb3IgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBwYXRoIG9yIG5vdCBhbiBodHRwIHJlc3BvbnNlIG9yIG5vdCBhIHN0cmVhbVxuICBpZiAoIXZhbHVlIHx8ICggIXZhbHVlLnBhdGggJiYgISh2YWx1ZS5yZWFkYWJsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdodHRwVmVyc2lvbicpKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgU3RyZWFtKSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBubyBuZWVkIHRvIGJvdGhlciB3aXRoIHRoZSBsZW5ndGhcbiAgaWYgKCFvcHRpb25zLmtub3duTGVuZ3RoKSB7XG4gICAgdGhpcy5fdmFsdWVzVG9NZWFzdXJlLnB1c2godmFsdWUpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2xlbmd0aFJldHJpZXZlciA9IGZ1bmN0aW9uKHZhbHVlLCBjYWxsYmFjaykge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnZmQnKSkge1xuXG4gICAgLy8gdGFrZSByZWFkIHJhbmdlIGludG8gYSBhY2NvdW50XG4gICAgLy8gYGVuZGAgPSBJbmZpbml0eSDigJM+IHJlYWQgZmlsZSB0aWxsIHRoZSBlbmRcbiAgICAvL1xuICAgIC8vIFRPRE86IExvb2tzIGxpa2UgdGhlcmUgaXMgYnVnIGluIE5vZGUgZnMuY3JlYXRlUmVhZFN0cmVhbVxuICAgIC8vIGl0IGRvZXNuJ3QgcmVzcGVjdCBgZW5kYCBvcHRpb25zIHdpdGhvdXQgYHN0YXJ0YCBvcHRpb25zXG4gICAgLy8gRml4IGl0IHdoZW4gbm9kZSBmaXhlcyBpdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzc4MTlcbiAgICBpZiAodmFsdWUuZW5kICE9IHVuZGVmaW5lZCAmJiB2YWx1ZS5lbmQgIT0gSW5maW5pdHkgJiYgdmFsdWUuc3RhcnQgIT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgIC8vIHdoZW4gZW5kIHNwZWNpZmllZFxuICAgICAgLy8gbm8gbmVlZCB0byBjYWxjdWxhdGUgcmFuZ2VcbiAgICAgIC8vIGluY2x1c2l2ZSwgc3RhcnRzIHdpdGggMFxuICAgICAgY2FsbGJhY2sobnVsbCwgdmFsdWUuZW5kICsgMSAtICh2YWx1ZS5zdGFydCA/IHZhbHVlLnN0YXJ0IDogMCkpO1xuXG4gICAgLy8gbm90IHRoYXQgZmFzdCBzbm9vcHlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc3RpbGwgbmVlZCB0byBmZXRjaCBmaWxlIHNpemUgZnJvbSBmc1xuICAgICAgZnMuc3RhdCh2YWx1ZS5wYXRoLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcblxuICAgICAgICB2YXIgZmlsZVNpemU7XG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIGZpbmFsIHNpemUgYmFzZWQgb24gdGhlIHJhbmdlIG9wdGlvbnNcbiAgICAgICAgZmlsZVNpemUgPSBzdGF0LnNpemUgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApO1xuICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlU2l6ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgLy8gb3IgaHR0cCByZXNwb25zZVxuICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjYWxsYmFjayhudWxsLCArdmFsdWUuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG5cbiAgLy8gb3IgcmVxdWVzdCBzdHJlYW0gaHR0cDovL2dpdGh1Yi5jb20vbWlrZWFsL3JlcXVlc3RcbiAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdodHRwTW9kdWxlJykpIHtcbiAgICAvLyB3YWl0IHRpbGwgcmVzcG9uc2UgY29tZSBiYWNrXG4gICAgdmFsdWUub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgIHZhbHVlLnBhdXNlKCk7XG4gICAgICBjYWxsYmFjayhudWxsLCArcmVzcG9uc2UuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG4gICAgfSk7XG4gICAgdmFsdWUucmVzdW1lKCk7XG5cbiAgLy8gc29tZXRoaW5nIGVsc2VcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygnVW5rbm93biBzdHJlYW0nKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRIZWFkZXIgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gY3VzdG9tIGhlYWRlciBzcGVjaWZpZWQgKGFzIHN0cmluZyk/XG4gIC8vIGl0IGJlY29tZXMgcmVzcG9uc2libGUgZm9yIGJvdW5kYXJ5XG4gIC8vIChlLmcuIHRvIGhhbmRsZSBleHRyYSBDUkxGcyBvbiAuTkVUIHNlcnZlcnMpXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5oZWFkZXI7XG4gIH1cblxuICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gdGhpcy5fZ2V0Q29udGVudERpc3Bvc2l0aW9uKHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGNvbnRlbnRUeXBlID0gdGhpcy5fZ2V0Q29udGVudFR5cGUodmFsdWUsIG9wdGlvbnMpO1xuXG4gIHZhciBjb250ZW50cyA9ICcnO1xuICB2YXIgaGVhZGVycyAgPSB7XG4gICAgLy8gYWRkIGN1c3RvbSBkaXNwb3NpdGlvbiBhcyB0aGlyZCBlbGVtZW50IG9yIGtlZXAgaXQgdHdvIGVsZW1lbnRzIGlmIG5vdFxuICAgICdDb250ZW50LURpc3Bvc2l0aW9uJzogWydmb3JtLWRhdGEnLCAnbmFtZT1cIicgKyBmaWVsZCArICdcIiddLmNvbmNhdChjb250ZW50RGlzcG9zaXRpb24gfHwgW10pLFxuICAgIC8vIGlmIG5vIGNvbnRlbnQgdHlwZS4gYWxsb3cgaXQgdG8gYmUgZW1wdHkgYXJyYXlcbiAgICAnQ29udGVudC1UeXBlJzogW10uY29uY2F0KGNvbnRlbnRUeXBlIHx8IFtdKVxuICB9O1xuXG4gIC8vIGFsbG93IGN1c3RvbSBoZWFkZXJzLlxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdvYmplY3QnKSB7XG4gICAgcG9wdWxhdGUoaGVhZGVycywgb3B0aW9ucy5oZWFkZXIpO1xuICB9XG5cbiAgdmFyIGhlYWRlcjtcbiAgZm9yICh2YXIgcHJvcCBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoZWFkZXJzLCBwcm9wKSkge1xuICAgICAgaGVhZGVyID0gaGVhZGVyc1twcm9wXTtcblxuICAgICAgLy8gc2tpcCBudWxsaXNoIGhlYWRlcnMuXG4gICAgICBpZiAoaGVhZGVyID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnZlcnQgYWxsIGhlYWRlcnMgdG8gYXJyYXlzLlxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgICAgaGVhZGVyID0gW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBub24tZW1wdHkgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXIubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRlbnRzICs9IHByb3AgKyAnOiAnICsgaGVhZGVyLmpvaW4oJzsgJykgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgRm9ybURhdGEuTElORV9CUkVBSyArIGNvbnRlbnRzICsgRm9ybURhdGEuTElORV9CUkVBSztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2V0Q29udGVudERpc3Bvc2l0aW9uID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICB2YXIgZmlsZW5hbWVcbiAgICAsIGNvbnRlbnREaXNwb3NpdGlvblxuICAgIDtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsZXBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gY3VzdG9tIGZpbGVwYXRoIGZvciByZWxhdGl2ZSBwYXRoc1xuICAgIGZpbGVuYW1lID0gcGF0aC5ub3JtYWxpemUob3B0aW9ucy5maWxlcGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZmlsZW5hbWUgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5wYXRoKSB7XG4gICAgLy8gY3VzdG9tIGZpbGVuYW1lIHRha2UgcHJlY2VkZW5jZVxuICAgIC8vIGZvcm1pZGFibGUgYW5kIHRoZSBicm93c2VyIGFkZCBhIG5hbWUgcHJvcGVydHlcbiAgICAvLyBmcy0gYW5kIHJlcXVlc3QtIHN0cmVhbXMgaGF2ZSBwYXRoIHByb3BlcnR5XG4gICAgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKG9wdGlvbnMuZmlsZW5hbWUgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5wYXRoKTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5yZWFkYWJsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdodHRwVmVyc2lvbicpKSB7XG4gICAgLy8gb3IgdHJ5IGh0dHAgcmVzcG9uc2VcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUodmFsdWUuY2xpZW50Ll9odHRwTWVzc2FnZS5wYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGlmIChmaWxlbmFtZSkge1xuICAgIGNvbnRlbnREaXNwb3NpdGlvbiA9ICdmaWxlbmFtZT1cIicgKyBmaWxlbmFtZSArICdcIic7XG4gIH1cblxuICByZXR1cm4gY29udGVudERpc3Bvc2l0aW9uO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50VHlwZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgLy8gdXNlIGN1c3RvbSBjb250ZW50LXR5cGUgYWJvdmUgYWxsXG4gIHZhciBjb250ZW50VHlwZSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG5cbiAgLy8gb3IgdHJ5IGBuYW1lYCBmcm9tIGZvcm1pZGFibGUsIGJyb3dzZXJcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5uYW1lKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5uYW1lKTtcbiAgfVxuXG4gIC8vIG9yIHRyeSBgcGF0aGAgZnJvbSBmcy0sIHJlcXVlc3QtIHN0cmVhbXNcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5wYXRoKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5wYXRoKTtcbiAgfVxuXG4gIC8vIG9yIGlmIGl0J3MgaHR0cC1yZXBvbnNlXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUucmVhZGFibGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnaHR0cFZlcnNpb24nKSkge1xuICAgIGNvbnRlbnRUeXBlID0gdmFsdWUuaGVhZGVyc1snY29udGVudC10eXBlJ107XG4gIH1cblxuICAvLyBvciBndWVzcyBpdCBmcm9tIHRoZSBmaWxlcGF0aCBvciBmaWxlbmFtZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlmIGB2YWx1ZWAgaXMgbm90IHNpbXBsZSB2YWx1ZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIGNvbnRlbnRUeXBlID0gRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEU7XG4gIH1cblxuICByZXR1cm4gY29udGVudFR5cGU7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEZvb3RlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZnVuY3Rpb24obmV4dCkge1xuICAgIHZhciBmb290ZXIgPSBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuXG4gICAgdmFyIGxhc3RQYXJ0ID0gKHRoaXMuX3N0cmVhbXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAobGFzdFBhcnQpIHtcbiAgICAgIGZvb3RlciArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKTtcbiAgICB9XG5cbiAgICBuZXh0KGZvb3Rlcik7XG4gIH0uYmluZCh0aGlzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGFzdEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgJy0tJyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0SGVhZGVycyA9IGZ1bmN0aW9uKHVzZXJIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXI7XG4gIHZhciBmb3JtSGVhZGVycyA9IHtcbiAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyB0aGlzLmdldEJvdW5kYXJ5KClcbiAgfTtcblxuICBmb3IgKGhlYWRlciBpbiB1c2VySGVhZGVycykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodXNlckhlYWRlcnMsIGhlYWRlcikpIHtcbiAgICAgIGZvcm1IZWFkZXJzW2hlYWRlci50b0xvd2VyQ2FzZSgpXSA9IHVzZXJIZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvcm1IZWFkZXJzO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24oYm91bmRhcnkpIHtcbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX2JvdW5kYXJ5KSB7XG4gICAgdGhpcy5fZ2VuZXJhdGVCb3VuZGFyeSgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2JvdW5kYXJ5O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZGF0YUJ1ZmZlciA9IG5ldyBCdWZmZXIuYWxsb2MoMCk7XG4gIHZhciBib3VuZGFyeSA9IHRoaXMuZ2V0Qm91bmRhcnkoKTtcblxuICAvLyBDcmVhdGUgdGhlIGZvcm0gY29udGVudC4gQWRkIExpbmUgYnJlYWtzIHRvIHRoZSBlbmQgb2YgZGF0YS5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3N0cmVhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgLy8gQWRkIGNvbnRlbnQgdG8gdGhlIGJ1ZmZlci5cbiAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9zdHJlYW1zW2ldKSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIHRoaXMuX3N0cmVhbXNbaV1dKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9zdHJlYW1zW2ldKV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYnJlYWsgYWZ0ZXIgY29udGVudC5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ3N0cmluZycgfHwgdGhpcy5fc3RyZWFtc1tpXS5zdWJzdHJpbmcoIDIsIGJvdW5kYXJ5Lmxlbmd0aCArIDIgKSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbShGb3JtRGF0YS5MSU5FX0JSRUFLKV0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGZvb3RlciBhbmQgcmV0dXJuIHRoZSBCdWZmZXIgb2JqZWN0LlxuICByZXR1cm4gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX2xhc3RCb3VuZGFyeSgpKV0gKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2VuZXJhdGVCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGlzIGdlbmVyYXRlcyBhIDUwIGNoYXJhY3RlciBib3VuZGFyeSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnkgRmlyZWZveC5cbiAgLy8gVGhleSBhcmUgb3B0aW1pemVkIGZvciBib3llci1tb29yZSBwYXJzaW5nLlxuICB2YXIgYm91bmRhcnkgPSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBib3VuZGFyeSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkudG9TdHJpbmcoMTYpO1xuICB9XG5cbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbi8vIE5vdGU6IGdldExlbmd0aFN5bmMgRE9FU04nVCBjYWxjdWxhdGUgc3RyZWFtcyBsZW5ndGhcbi8vIEFzIHdvcmthcm91bmQgb25lIGNhbiBjYWxjdWxhdGUgZmlsZSBzaXplIG1hbnVhbGx5XG4vLyBhbmQgYWRkIGl0IGFzIGtub3duTGVuZ3RoIG9wdGlvblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aFN5bmMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICAvLyBEb24ndCBnZXQgY29uZnVzZWQsIHRoZXJlIGFyZSAzIFwiaW50ZXJuYWxcIiBzdHJlYW1zIGZvciBlYWNoIGtleXZhbCBwYWlyXG4gIC8vIHNvIGl0IGJhc2ljYWxseSBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbHVlIGFkZGVkIHRvIHRoZSBmb3JtXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy80MFxuICBpZiAoIXRoaXMuaGFzS25vd25MZW5ndGgoKSkge1xuICAgIC8vIFNvbWUgYXN5bmMgbGVuZ3RoIHJldHJpZXZlcnMgYXJlIHByZXNlbnRcbiAgICAvLyB0aGVyZWZvcmUgc3luY2hyb25vdXMgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZhbHNlLlxuICAgIC8vIFBsZWFzZSB1c2UgZ2V0TGVuZ3RoKGNhbGxiYWNrKSB0byBnZXQgcHJvcGVyIGxlbmd0aFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9wZXIgbGVuZ3RoIGluIHN5bmNocm9ub3VzIHdheS4nKSk7XG4gIH1cblxuICByZXR1cm4ga25vd25MZW5ndGg7XG59O1xuXG4vLyBQdWJsaWMgQVBJIHRvIGNoZWNrIGlmIGxlbmd0aCBvZiBhZGRlZCB2YWx1ZXMgaXMga25vd25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8xOTZcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8yNjJcbkZvcm1EYXRhLnByb3RvdHlwZS5oYXNLbm93bkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaGFzS25vd25MZW5ndGggPSB0cnVlO1xuXG4gIGlmICh0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgaGFzS25vd25MZW5ndGggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNLbm93bkxlbmd0aDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbihjYikge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IuYmluZCh0aGlzLCBudWxsLCBrbm93bkxlbmd0aCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5ja2l0LnBhcmFsbGVsKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSwgdGhpcy5fbGVuZ3RoUmV0cmlldmVyLCBmdW5jdGlvbihlcnIsIHZhbHVlcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICBrbm93bkxlbmd0aCArPSBsZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYihudWxsLCBrbm93bkxlbmd0aCk7XG4gIH0pO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2IpIHtcbiAgdmFyIHJlcXVlc3RcbiAgICAsIG9wdGlvbnNcbiAgICAsIGRlZmF1bHRzID0ge21ldGhvZDogJ3Bvc3QnfVxuICAgIDtcblxuICAvLyBwYXJzZSBwcm92aWRlZCB1cmwgaWYgaXQncyBzdHJpbmdcbiAgLy8gb3IgdHJlYXQgaXQgYXMgb3B0aW9ucyBvYmplY3RcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gJ3N0cmluZycpIHtcblxuICAgIHBhcmFtcyA9IHBhcnNlVXJsKHBhcmFtcyk7XG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHtcbiAgICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgICAgcGF0aDogcGFyYW1zLnBhdGhuYW1lLFxuICAgICAgaG9zdDogcGFyYW1zLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2w6IHBhcmFtcy5wcm90b2NvbFxuICAgIH0sIGRlZmF1bHRzKTtcblxuICAvLyB1c2UgY3VzdG9tIHBhcmFtc1xuICB9IGVsc2Uge1xuXG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHBhcmFtcywgZGVmYXVsdHMpO1xuICAgIC8vIGlmIG5vIHBvcnQgcHJvdmlkZWQgdXNlIGRlZmF1bHQgb25lXG4gICAgaWYgKCFvcHRpb25zLnBvcnQpIHtcbiAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICB9XG4gIH1cblxuICAvLyBwdXQgdGhhdCBnb29kIGNvZGUgaW4gZ2V0SGVhZGVycyB0byBzb21lIHVzZVxuICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMocGFyYW1zLmhlYWRlcnMpO1xuXG4gIC8vIGh0dHBzIGlmIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gaHR0cCBpbiBhbnkgb3RoZXIgY2FzZVxuICBpZiAob3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6Jykge1xuICAgIHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QgPSBodHRwLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH1cblxuICAvLyBnZXQgY29udGVudCBsZW5ndGggYW5kIGZpcmUgYXdheVxuICB0aGlzLmdldExlbmd0aChmdW5jdGlvbihlcnIsIGxlbmd0aCkge1xuICAgIGlmIChlcnIgJiYgZXJyICE9PSAnVW5rbm93biBzdHJlYW0nKSB7XG4gICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZCBjb250ZW50IGxlbmd0aFxuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5waXBlKHJlcXVlc3QpO1xuICAgIGlmIChjYikge1xuICAgICAgdmFyIG9uUmVzcG9uc2U7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIChlcnJvciwgcmVzcG9uY2UpIHtcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBjYWxsYmFjayk7XG4gICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG5cbiAgICAgICAgcmV0dXJuIGNiLmNhbGwodGhpcywgZXJyb3IsIHJlc3BvbmNlKTtcbiAgICAgIH07XG5cbiAgICAgIG9uUmVzcG9uc2UgPSBjYWxsYmFjay5iaW5kKHRoaXMsIG51bGwpO1xuXG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgICAgIHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xuXG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICBpZiAoIXRoaXMuZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyO1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ1tvYmplY3QgRm9ybURhdGFdJztcbn07XG5zZXRUb1N0cmluZ1RhZyhGb3JtRGF0YSwgJ0Zvcm1EYXRhJyk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/form-data/lib/form_data.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/form-data/lib/populate.js": +/*!************************************************!*\ + !*** ./node_modules/form-data/lib/populate.js ***! + \************************************************/ +/***/ ((module) => { + +eval("// populates missing values\nmodule.exports = function(dst, src) {\n\n Object.keys(src).forEach(function(prop)\n {\n dst[prop] = dst[prop] || src[prop];\n });\n\n return dst;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9wb3B1bGF0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9wb3B1bGF0ZS5qcz9mZDE5Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIHBvcHVsYXRlcyBtaXNzaW5nIHZhbHVlc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkc3QsIHNyYykge1xuXG4gIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbihwcm9wKVxuICB7XG4gICAgZHN0W3Byb3BdID0gZHN0W3Byb3BdIHx8IHNyY1twcm9wXTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRzdDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/form-data/lib/populate.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/function-bind.js b/frontend/.next/server/vendor-chunks/function-bind.js new file mode 100644 index 000000000..7b2771fdc --- /dev/null +++ b/frontend/.next/server/vendor-chunks/function-bind.js @@ -0,0 +1,35 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/function-bind"; +exports.ids = ["vendor-chunks/function-bind"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/function-bind/implementation.js": +/*!******************************************************!*\ + !*** ./node_modules/function-bind/implementation.js ***! + \******************************************************/ +/***/ ((module) => { + +eval("\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0E7QUFDQSxvQkFBb0IsY0FBYztBQUNsQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFDQUFxQyxvQkFBb0I7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7O0FBRUEsaUZBQWlGLHNDQUFzQzs7QUFFdkg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanM/ODQ2NSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbnZhciBjb25jYXR0eSA9IGZ1bmN0aW9uIGNvbmNhdHR5KGEsIGIpIHtcbiAgICB2YXIgYXJyID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgYXJyW2ldID0gYVtpXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGFycltqICsgYS5sZW5ndGhdID0gYltqXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyO1xufTtcblxudmFyIHNsaWN5ID0gZnVuY3Rpb24gc2xpY3koYXJyTGlrZSwgb2Zmc2V0KSB7XG4gICAgdmFyIGFyciA9IFtdO1xuICAgIGZvciAodmFyIGkgPSBvZmZzZXQgfHwgMCwgaiA9IDA7IGkgPCBhcnJMaWtlLmxlbmd0aDsgaSArPSAxLCBqICs9IDEpIHtcbiAgICAgICAgYXJyW2pdID0gYXJyTGlrZVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn07XG5cbnZhciBqb2lueSA9IGZ1bmN0aW9uIChhcnIsIGpvaW5lcikge1xuICAgIHZhciBzdHIgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBzdHIgKz0gYXJyW2ldO1xuICAgICAgICBpZiAoaSArIDEgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdHIgKz0gam9pbmVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQodGhhdCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHRvU3RyLmFwcGx5KHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY3koYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgY29uY2F0dHkoYXJncywgYXJndW1lbnRzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgY29uY2F0dHkoYXJncywgYXJndW1lbnRzKVxuICAgICAgICApO1xuXG4gICAgfTtcblxuICAgIHZhciBib3VuZExlbmd0aCA9IG1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzW2ldID0gJyQnICsgaTtcbiAgICB9XG5cbiAgICBib3VuZCA9IEZ1bmN0aW9uKCdiaW5kZXInLCAncmV0dXJuIGZ1bmN0aW9uICgnICsgam9pbnkoYm91bmRBcmdzLCAnLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/function-bind/implementation.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/function-bind/index.js": +/*!*********************************************!*\ + !*** ./node_modules/function-bind/index.js ***! + \*********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar implementation = __webpack_require__(/*! ./implementation */ \"(ssr)/./node_modules/function-bind/implementation.js\");\n\nmodule.exports = Function.prototype.bind || implementation;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyw4RUFBa0I7O0FBRS9DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2luZGV4LmpzPzc4YjgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgaW1wbGVtZW50YXRpb247XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/function-bind/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/get-intrinsic.js b/frontend/.next/server/vendor-chunks/get-intrinsic.js new file mode 100644 index 000000000..4acae2eab --- /dev/null +++ b/frontend/.next/server/vendor-chunks/get-intrinsic.js @@ -0,0 +1,25 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/get-intrinsic"; +exports.ids = ["vendor-chunks/get-intrinsic"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/get-intrinsic/index.js": +/*!*********************************************!*\ + !*** ./node_modules/get-intrinsic/index.js ***! + \*********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar undefined;\n\nvar $Object = __webpack_require__(/*! es-object-atoms */ \"(ssr)/./node_modules/es-object-atoms/index.js\");\n\nvar $Error = __webpack_require__(/*! es-errors */ \"(ssr)/./node_modules/es-errors/index.js\");\nvar $EvalError = __webpack_require__(/*! es-errors/eval */ \"(ssr)/./node_modules/es-errors/eval.js\");\nvar $RangeError = __webpack_require__(/*! es-errors/range */ \"(ssr)/./node_modules/es-errors/range.js\");\nvar $ReferenceError = __webpack_require__(/*! es-errors/ref */ \"(ssr)/./node_modules/es-errors/ref.js\");\nvar $SyntaxError = __webpack_require__(/*! es-errors/syntax */ \"(ssr)/./node_modules/es-errors/syntax.js\");\nvar $TypeError = __webpack_require__(/*! es-errors/type */ \"(ssr)/./node_modules/es-errors/type.js\");\nvar $URIError = __webpack_require__(/*! es-errors/uri */ \"(ssr)/./node_modules/es-errors/uri.js\");\n\nvar abs = __webpack_require__(/*! math-intrinsics/abs */ \"(ssr)/./node_modules/math-intrinsics/abs.js\");\nvar floor = __webpack_require__(/*! math-intrinsics/floor */ \"(ssr)/./node_modules/math-intrinsics/floor.js\");\nvar max = __webpack_require__(/*! math-intrinsics/max */ \"(ssr)/./node_modules/math-intrinsics/max.js\");\nvar min = __webpack_require__(/*! math-intrinsics/min */ \"(ssr)/./node_modules/math-intrinsics/min.js\");\nvar pow = __webpack_require__(/*! math-intrinsics/pow */ \"(ssr)/./node_modules/math-intrinsics/pow.js\");\nvar round = __webpack_require__(/*! math-intrinsics/round */ \"(ssr)/./node_modules/math-intrinsics/round.js\");\nvar sign = __webpack_require__(/*! math-intrinsics/sign */ \"(ssr)/./node_modules/math-intrinsics/sign.js\");\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = __webpack_require__(/*! gopd */ \"(ssr)/./node_modules/gopd/index.js\");\nvar $defineProperty = __webpack_require__(/*! es-define-property */ \"(ssr)/./node_modules/es-define-property/index.js\");\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = __webpack_require__(/*! has-symbols */ \"(ssr)/./node_modules/has-symbols/index.js\")();\n\nvar getProto = __webpack_require__(/*! get-proto */ \"(ssr)/./node_modules/get-proto/index.js\");\nvar $ObjectGPO = __webpack_require__(/*! get-proto/Object.getPrototypeOf */ \"(ssr)/./node_modules/get-proto/Object.getPrototypeOf.js\");\nvar $ReflectGPO = __webpack_require__(/*! get-proto/Reflect.getPrototypeOf */ \"(ssr)/./node_modules/get-proto/Reflect.getPrototypeOf.js\");\n\nvar $apply = __webpack_require__(/*! call-bind-apply-helpers/functionApply */ \"(ssr)/./node_modules/call-bind-apply-helpers/functionApply.js\");\nvar $call = __webpack_require__(/*! call-bind-apply-helpers/functionCall */ \"(ssr)/./node_modules/call-bind-apply-helpers/functionCall.js\");\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': $Object,\n\t'%Object.getOwnPropertyDescriptor%': $gOPD,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,\n\n\t'%Function.prototype.call%': $call,\n\t'%Function.prototype.apply%': $apply,\n\t'%Object.defineProperty%': $defineProperty,\n\t'%Object.getPrototypeOf%': $ObjectGPO,\n\t'%Math.abs%': abs,\n\t'%Math.floor%': floor,\n\t'%Math.max%': max,\n\t'%Math.min%': min,\n\t'%Math.pow%': pow,\n\t'%Math.round%': round,\n\t'%Math.sign%': sign,\n\t'%Reflect.getPrototypeOf%': $ReflectGPO\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = __webpack_require__(/*! function-bind */ \"(ssr)/./node_modules/function-bind/index.js\");\nvar hasOwn = __webpack_require__(/*! hasown */ \"(ssr)/./node_modules/hasown/index.js\");\nvar $concat = bind.call($call, Array.prototype.concat);\nvar $spliceApply = bind.call($apply, Array.prototype.splice);\nvar $replace = bind.call($call, String.prototype.replace);\nvar $strSlice = bind.call($call, String.prototype.slice);\nvar $exec = bind.call($call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjs7QUFFQSxjQUFjLG1CQUFPLENBQUMsc0VBQWlCOztBQUV2QyxhQUFhLG1CQUFPLENBQUMsMERBQVc7QUFDaEMsaUJBQWlCLG1CQUFPLENBQUMsOERBQWdCO0FBQ3pDLGtCQUFrQixtQkFBTyxDQUFDLGdFQUFpQjtBQUMzQyxzQkFBc0IsbUJBQU8sQ0FBQyw0REFBZTtBQUM3QyxtQkFBbUIsbUJBQU8sQ0FBQyxrRUFBa0I7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsOERBQWdCO0FBQ3pDLGdCQUFnQixtQkFBTyxDQUFDLDREQUFlOztBQUV2QyxVQUFVLG1CQUFPLENBQUMsd0VBQXFCO0FBQ3ZDLFlBQVksbUJBQU8sQ0FBQyw0RUFBdUI7QUFDM0MsVUFBVSxtQkFBTyxDQUFDLHdFQUFxQjtBQUN2QyxVQUFVLG1CQUFPLENBQUMsd0VBQXFCO0FBQ3ZDLFVBQVUsbUJBQU8sQ0FBQyx3RUFBcUI7QUFDdkMsWUFBWSxtQkFBTyxDQUFDLDRFQUF1QjtBQUMzQyxXQUFXLG1CQUFPLENBQUMsMEVBQXNCOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsOENBQThDO0FBQ2hGLEdBQUc7QUFDSDs7QUFFQSxZQUFZLG1CQUFPLENBQUMsZ0RBQU07QUFDMUIsc0JBQXNCLG1CQUFPLENBQUMsNEVBQW9COztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLDhEQUFhOztBQUV0QyxlQUFlLG1CQUFPLENBQUMsMERBQVc7QUFDbEMsaUJBQWlCLG1CQUFPLENBQUMsZ0dBQWlDO0FBQzFELGtCQUFrQixtQkFBTyxDQUFDLGtHQUFrQzs7QUFFNUQsYUFBYSxtQkFBTyxDQUFDLDRHQUF1QztBQUM1RCxZQUFZLG1CQUFPLENBQUMsMEdBQXNDOztBQUUxRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRCxHQUFHO0FBQ0gsZ0RBQWdEO0FBQ2hELEdBQUc7QUFDSCxzREFBc0Q7QUFDdEQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxtQkFBTyxDQUFDLGtFQUFlO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyxvREFBUTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0Isa0JBQWtCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcz85Nzc2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRPYmplY3QgPSByZXF1aXJlKCdlcy1vYmplY3QtYXRvbXMnKTtcblxudmFyICRFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycycpO1xudmFyICRFdmFsRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvZXZhbCcpO1xudmFyICRSYW5nZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3JhbmdlJyk7XG52YXIgJFJlZmVyZW5jZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3JlZicpO1xudmFyICRTeW50YXhFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9zeW50YXgnKTtcbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcbnZhciAkVVJJRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdXJpJyk7XG5cbnZhciBhYnMgPSByZXF1aXJlKCdtYXRoLWludHJpbnNpY3MvYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCdtYXRoLWludHJpbnNpY3MvZmxvb3InKTtcbnZhciBtYXggPSByZXF1aXJlKCdtYXRoLWludHJpbnNpY3MvbWF4Jyk7XG52YXIgbWluID0gcmVxdWlyZSgnbWF0aC1pbnRyaW5zaWNzL21pbicpO1xudmFyIHBvdyA9IHJlcXVpcmUoJ21hdGgtaW50cmluc2ljcy9wb3cnKTtcbnZhciByb3VuZCA9IHJlcXVpcmUoJ21hdGgtaW50cmluc2ljcy9yb3VuZCcpO1xudmFyIHNpZ24gPSByZXF1aXJlKCdtYXRoLWludHJpbnNpY3Mvc2lnbicpO1xuXG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gcmVxdWlyZSgnZ29wZCcpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJ2VzLWRlZmluZS1wcm9wZXJ0eScpO1xuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IHJlcXVpcmUoJ2dldC1wcm90bycpO1xudmFyICRPYmplY3RHUE8gPSByZXF1aXJlKCdnZXQtcHJvdG8vT2JqZWN0LmdldFByb3RvdHlwZU9mJyk7XG52YXIgJFJlZmxlY3RHUE8gPSByZXF1aXJlKCdnZXQtcHJvdG8vUmVmbGVjdC5nZXRQcm90b3R5cGVPZicpO1xuXG52YXIgJGFwcGx5ID0gcmVxdWlyZSgnY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25BcHBseScpO1xudmFyICRjYWxsID0gcmVxdWlyZSgnY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvZnVuY3Rpb25DYWxsJyk7XG5cbnZhciBuZWVkc0V2YWwgPSB7fTtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8oVWludDhBcnJheSk7XG5cbnZhciBJTlRSSU5TSUNTID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdCclQWdncmVnYXRlRXJyb3IlJzogdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFnZ3JlZ2F0ZUVycm9yLFxuXHQnJUFycmF5JSc6IEFycmF5LFxuXHQnJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogbmVlZHNFdmFsLFxuXHQnJUF0b21pY3MlJzogdHlwZW9mIEF0b21pY3MgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXRvbWljcyxcblx0JyVCaWdJbnQlJzogdHlwZW9mIEJpZ0ludCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQsXG5cdCclQmlnSW50NjRBcnJheSUnOiB0eXBlb2YgQmlnSW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQ2NEFycmF5LFxuXHQnJUJpZ1VpbnQ2NEFycmF5JSc6IHR5cGVvZiBCaWdVaW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdVaW50NjRBcnJheSxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6ICRFcnJvcixcblx0JyVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJUV2YWxFcnJvciUnOiAkRXZhbEVycm9yLFxuXHQnJUZsb2F0MTZBcnJheSUnOiB0eXBlb2YgRmxvYXQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MTZBcnJheSxcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzIHx8ICFnZXRQcm90byA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBNYXAoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJU1hdGglJzogTWF0aCxcblx0JyVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJU9iamVjdCUnOiAkT2JqZWN0LFxuXHQnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJzogJGdPUEQsXG5cdCclcGFyc2VGbG9hdCUnOiBwYXJzZUZsb2F0LFxuXHQnJXBhcnNlSW50JSc6IHBhcnNlSW50LFxuXHQnJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCclUmFuZ2VFcnJvciUnOiAkUmFuZ2VFcnJvcixcblx0JyVSZWZlcmVuY2VFcnJvciUnOiAkUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzIHx8ICFnZXRQcm90byA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyVTdHJpbmclJzogU3RyaW5nLFxuXHQnJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90bygnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJVN5bnRheEVycm9yJSc6ICRTeW50YXhFcnJvcixcblx0JyVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyVUeXBlZEFycmF5JSc6IFR5cGVkQXJyYXksXG5cdCclVHlwZUVycm9yJSc6ICRUeXBlRXJyb3IsXG5cdCclVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCclVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJVVSSUVycm9yJSc6ICRVUklFcnJvcixcblx0JyVXZWFrTWFwJSc6IHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtNYXAsXG5cdCclV2Vha1JlZiUnOiB0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrUmVmLFxuXHQnJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldCxcblxuXHQnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJSc6ICRjYWxsLFxuXHQnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnOiAkYXBwbHksXG5cdCclT2JqZWN0LmRlZmluZVByb3BlcnR5JSc6ICRkZWZpbmVQcm9wZXJ0eSxcblx0JyVPYmplY3QuZ2V0UHJvdG90eXBlT2YlJzogJE9iamVjdEdQTyxcblx0JyVNYXRoLmFicyUnOiBhYnMsXG5cdCclTWF0aC5mbG9vciUnOiBmbG9vcixcblx0JyVNYXRoLm1heCUnOiBtYXgsXG5cdCclTWF0aC5taW4lJzogbWluLFxuXHQnJU1hdGgucG93JSc6IHBvdyxcblx0JyVNYXRoLnJvdW5kJSc6IHJvdW5kLFxuXHQnJU1hdGguc2lnbiUnOiBzaWduLFxuXHQnJVJlZmxlY3QuZ2V0UHJvdG90eXBlT2YlJzogJFJlZmxlY3RHUE9cbn07XG5cbmlmIChnZXRQcm90bykge1xuXHR0cnkge1xuXHRcdG51bGwuZXJyb3I7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zaGFkb3dyZWFsbS9wdWxsLzM4NCNpc3N1ZWNvbW1lbnQtMTM2NDI2NDIyOVxuXHRcdHZhciBlcnJvclByb3RvID0gZ2V0UHJvdG8oZ2V0UHJvdG8oZSkpO1xuXHRcdElOVFJJTlNJQ1NbJyVFcnJvci5wcm90b3R5cGUlJ10gPSBlcnJvclByb3RvO1xuXHR9XG59XG5cbnZhciBkb0V2YWwgPSBmdW5jdGlvbiBkb0V2YWwobmFtZSkge1xuXHR2YXIgdmFsdWU7XG5cdGlmIChuYW1lID09PSAnJUFzeW5jRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJykge1xuXHRcdHZhbHVlID0gZ2V0RXZhbGxlZENvbnN0cnVjdG9yKCdhc3luYyBmdW5jdGlvbiogKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jR2VuZXJhdG9yJScpIHtcblx0XHR2YXIgZm4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpO1xuXHRcdGlmIChmbikge1xuXHRcdFx0dmFsdWUgPSBmbi5wcm90b3R5cGU7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnKSB7XG5cdFx0dmFyIGdlbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yJScpO1xuXHRcdGlmIChnZW4gJiYgZ2V0UHJvdG8pIHtcblx0XHRcdHZhbHVlID0gZ2V0UHJvdG8oZ2VuLnByb3RvdHlwZSk7XG5cdFx0fVxuXHR9XG5cblx0SU5UUklOU0lDU1tuYW1lXSA9IHZhbHVlO1xuXG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbnZhciBMRUdBQ1lfQUxJQVNFUyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHQnJUFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b3R5cGUlJzogWydBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvX2VudHJpZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZW50cmllcyddLFxuXHQnJUFycmF5UHJvdG9fZm9yRWFjaCUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdmb3JFYWNoJ10sXG5cdCclQXJyYXlQcm90b19rZXlzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2tleXMnXSxcblx0JyVBcnJheVByb3RvX3ZhbHVlcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICd2YWx1ZXMnXSxcblx0JyVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSc6IFsnQXN5bmNGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVCb29sZWFuUHJvdG90eXBlJSc6IFsnQm9vbGVhbicsICdwcm90b3R5cGUnXSxcblx0JyVEYXRhVmlld1Byb3RvdHlwZSUnOiBbJ0RhdGFWaWV3JywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGVQcm90b3R5cGUlJzogWydEYXRlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUVycm9yUHJvdG90eXBlJSc6IFsnRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRXZhbEVycm9yUHJvdG90eXBlJSc6IFsnRXZhbEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0MzJBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDY0QXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDY0QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRnVuY3Rpb25Qcm90b3R5cGUlJzogWydGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3IlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3JQcm90b3R5cGUlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclSW50OEFycmF5UHJvdG90eXBlJSc6IFsnSW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDE2QXJyYXlQcm90b3R5cGUlJzogWydJbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDMyQXJyYXlQcm90b3R5cGUlJzogWydJbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUpTT05QYXJzZSUnOiBbJ0pTT04nLCAncGFyc2UnXSxcblx0JyVKU09OU3RyaW5naWZ5JSc6IFsnSlNPTicsICdzdHJpbmdpZnknXSxcblx0JyVNYXBQcm90b3R5cGUlJzogWydNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclTnVtYmVyUHJvdG90eXBlJSc6IFsnTnVtYmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJU9iamVjdFByb3RvdHlwZSUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnXSxcblx0JyVPYmpQcm90b190b1N0cmluZyUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndG9TdHJpbmcnXSxcblx0JyVPYmpQcm90b192YWx1ZU9mJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd2YWx1ZU9mJ10sXG5cdCclUHJvbWlzZVByb3RvdHlwZSUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJ10sXG5cdCclUHJvbWlzZVByb3RvX3RoZW4lJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZScsICd0aGVuJ10sXG5cdCclUHJvbWlzZV9hbGwlJzogWydQcm9taXNlJywgJ2FsbCddLFxuXHQnJVByb21pc2VfcmVqZWN0JSc6IFsnUHJvbWlzZScsICdyZWplY3QnXSxcblx0JyVQcm9taXNlX3Jlc29sdmUlJzogWydQcm9taXNlJywgJ3Jlc29sdmUnXSxcblx0JyVSYW5nZUVycm9yUHJvdG90eXBlJSc6IFsnUmFuZ2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUnOiBbJ1JlZmVyZW5jZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZ0V4cFByb3RvdHlwZSUnOiBbJ1JlZ0V4cCcsICdwcm90b3R5cGUnXSxcblx0JyVTZXRQcm90b3R5cGUlJzogWydTZXQnLCAncHJvdG90eXBlJ10sXG5cdCclU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydTaGFyZWRBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVTdHJpbmdQcm90b3R5cGUlJzogWydTdHJpbmcnLCAncHJvdG90eXBlJ10sXG5cdCclU3ltYm9sUHJvdG90eXBlJSc6IFsnU3ltYm9sJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bnRheEVycm9yUHJvdG90eXBlJSc6IFsnU3ludGF4RXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZWRBcnJheVByb3RvdHlwZSUnOiBbJ1R5cGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZUVycm9yUHJvdG90eXBlJSc6IFsnVHlwZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4QXJyYXlQcm90b3R5cGUlJzogWydVaW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhDbGFtcGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDE2QXJyYXlQcm90b3R5cGUlJzogWydVaW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVSSUVycm9yUHJvdG90eXBlJSc6IFsnVVJJRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha01hcFByb3RvdHlwZSUnOiBbJ1dlYWtNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha1NldFByb3RvdHlwZSUnOiBbJ1dlYWtTZXQnLCAncHJvdG90eXBlJ11cbn07XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJ2hhc293bicpO1xudmFyICRjb25jYXQgPSBiaW5kLmNhbGwoJGNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbCgkYXBwbHksIEFycmF5LnByb3RvdHlwZS5zcGxpY2UpO1xudmFyICRyZXBsYWNlID0gYmluZC5jYWxsKCRjYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyICRzdHJTbGljZSA9IGJpbmQuY2FsbCgkY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG52YXIgJGV4ZWMgPSBiaW5kLmNhbGwoJGNhbGwsIFJlZ0V4cC5wcm90b3R5cGUuZXhlYyk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0aWYgKCRleGVjKC9eJT9bXiVdKiU/JC8sIG5hbWUpID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZScpO1xuXHR9XG5cdHZhciBwYXJ0cyA9IHN0cmluZ1RvUGF0aChuYW1lKTtcblx0dmFyIGludHJpbnNpY0Jhc2VOYW1lID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzWzBdIDogJyc7XG5cblx0dmFyIGludHJpbnNpYyA9IGdldEJhc2VJbnRyaW5zaWMoJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJScsIGFsbG93TWlzc2luZyk7XG5cdHZhciBpbnRyaW5zaWNSZWFsTmFtZSA9IGludHJpbnNpYy5uYW1lO1xuXHR2YXIgdmFsdWUgPSBpbnRyaW5zaWMudmFsdWU7XG5cdHZhciBza2lwRnVydGhlckNhY2hpbmcgPSBmYWxzZTtcblxuXHR2YXIgYWxpYXMgPSBpbnRyaW5zaWMuYWxpYXM7XG5cdGlmIChhbGlhcykge1xuXHRcdGludHJpbnNpY0Jhc2VOYW1lID0gYWxpYXNbMF07XG5cdFx0JHNwbGljZUFwcGx5KHBhcnRzLCAkY29uY2F0KFswLCAxXSwgYWxpYXMpKTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAxLCBpc093biA9IHRydWU7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdHZhciBwYXJ0ID0gcGFydHNbaV07XG5cdFx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHBhcnQsIDAsIDEpO1xuXHRcdHZhciBsYXN0ID0gJHN0clNsaWNlKHBhcnQsIC0xKTtcblx0XHRpZiAoXG5cdFx0XHQoXG5cdFx0XHRcdChmaXJzdCA9PT0gJ1wiJyB8fCBmaXJzdCA9PT0gXCInXCIgfHwgZmlyc3QgPT09ICdgJylcblx0XHRcdFx0fHwgKGxhc3QgPT09ICdcIicgfHwgbGFzdCA9PT0gXCInXCIgfHwgbGFzdCA9PT0gJ2AnKVxuXHRcdFx0KVxuXHRcdFx0JiYgZmlyc3QgIT09IGxhc3Rcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Byb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMnKTtcblx0XHR9XG5cdFx0aWYgKHBhcnQgPT09ICdjb25zdHJ1Y3RvcicgfHwgIWlzT3duKSB7XG5cdFx0XHRza2lwRnVydGhlckNhY2hpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGludHJpbnNpY0Jhc2VOYW1lICs9ICcuJyArIHBhcnQ7XG5cdFx0aW50cmluc2ljUmVhbE5hbWUgPSAnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJztcblxuXHRcdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljUmVhbE5hbWUpKSB7XG5cdFx0XHR2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0aWYgKCEocGFydCBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKCFhbGxvd01pc3NpbmcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYmFzZSBpbnRyaW5zaWMgZm9yICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdm9pZCB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoJGdPUEQgJiYgKGkgKyAxKSA+PSBwYXJ0cy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGRlc2MgPSAkZ09QRCh2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdGlzT3duID0gISFkZXNjO1xuXG5cdFx0XHRcdC8vIEJ5IGNvbnZlbnRpb24sIHdoZW4gYSBkYXRhIHByb3BlcnR5IGlzIGNvbnZlcnRlZCB0byBhbiBhY2Nlc3NvclxuXHRcdFx0XHQvLyBwcm9wZXJ0eSB0byBlbXVsYXRlIGEgZGF0YSBwcm9wZXJ0eSB0aGF0IGRvZXMgbm90IHN1ZmZlciBmcm9tXG5cdFx0XHRcdC8vIHRoZSBvdmVycmlkZSBtaXN0YWtlLCB0aGF0IGFjY2Vzc29yJ3MgZ2V0dGVyIGlzIG1hcmtlZCB3aXRoXG5cdFx0XHRcdC8vIGFuIGBvcmlnaW5hbFZhbHVlYCBwcm9wZXJ0eS4gSGVyZSwgd2hlbiB3ZSBkZXRlY3QgdGhpcywgd2Vcblx0XHRcdFx0Ly8gdXBob2xkIHRoZSBpbGx1c2lvbiBieSBwcmV0ZW5kaW5nIHRvIHNlZSB0aGF0IG9yaWdpbmFsIGRhdGFcblx0XHRcdFx0Ly8gcHJvcGVydHksIGkuZS4sIHJldHVybmluZyB0aGUgdmFsdWUgcmF0aGVyIHRoYW4gdGhlIGdldHRlclxuXHRcdFx0XHQvLyBpdHNlbGYuXG5cdFx0XHRcdGlmIChpc093biAmJiAnZ2V0JyBpbiBkZXNjICYmICEoJ29yaWdpbmFsVmFsdWUnIGluIGRlc2MuZ2V0KSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVzYy5nZXQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXNPd24gPSBoYXNPd24odmFsdWUsIHBhcnQpO1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPd24gJiYgIXNraXBGdXJ0aGVyQ2FjaGluZykge1xuXHRcdFx0XHRJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/get-intrinsic/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/get-proto.js b/frontend/.next/server/vendor-chunks/get-proto.js new file mode 100644 index 000000000..6592fa9b0 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/get-proto.js @@ -0,0 +1,45 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/get-proto"; +exports.ids = ["vendor-chunks/get-proto"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/get-proto/Object.getPrototypeOf.js": +/*!*********************************************************!*\ + !*** ./node_modules/get-proto/Object.getPrototypeOf.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar $Object = __webpack_require__(/*! es-object-atoms */ \"(ssr)/./node_modules/es-object-atoms/index.js\");\n\n/** @type {import('./Object.getPrototypeOf')} */\nmodule.exports = $Object.getPrototypeOf || null;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZ2V0LXByb3RvL09iamVjdC5nZXRQcm90b3R5cGVPZi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixjQUFjLG1CQUFPLENBQUMsc0VBQWlCOztBQUV2QyxXQUFXLG1DQUFtQztBQUM5QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvZ2V0LXByb3RvL09iamVjdC5nZXRQcm90b3R5cGVPZi5qcz8yNDQ2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyICRPYmplY3QgPSByZXF1aXJlKCdlcy1vYmplY3QtYXRvbXMnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vT2JqZWN0LmdldFByb3RvdHlwZU9mJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgbnVsbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/get-proto/Object.getPrototypeOf.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/get-proto/Reflect.getPrototypeOf.js": +/*!**********************************************************!*\ + !*** ./node_modules/get-proto/Reflect.getPrototypeOf.js ***! + \**********************************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./Reflect.getPrototypeOf')} */\nmodule.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZ2V0LXByb3RvL1JlZmxlY3QuZ2V0UHJvdG90eXBlT2YuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsV0FBVyxvQ0FBb0M7QUFDL0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2dldC1wcm90by9SZWZsZWN0LmdldFByb3RvdHlwZU9mLmpzPzZkNmUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9SZWZsZWN0LmdldFByb3RvdHlwZU9mJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9ICh0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgUmVmbGVjdC5nZXRQcm90b3R5cGVPZikgfHwgbnVsbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/get-proto/Reflect.getPrototypeOf.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/get-proto/index.js": +/*!*****************************************!*\ + !*** ./node_modules/get-proto/index.js ***! + \*****************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar reflectGetProto = __webpack_require__(/*! ./Reflect.getPrototypeOf */ \"(ssr)/./node_modules/get-proto/Reflect.getPrototypeOf.js\");\nvar originalGetProto = __webpack_require__(/*! ./Object.getPrototypeOf */ \"(ssr)/./node_modules/get-proto/Object.getPrototypeOf.js\");\n\nvar getDunderProto = __webpack_require__(/*! dunder-proto/get */ \"(ssr)/./node_modules/dunder-proto/get.js\");\n\n/** @type {import('.')} */\nmodule.exports = reflectGetProto\n\t? function getProto(O) {\n\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\treturn reflectGetProto(O);\n\t}\n\t: originalGetProto\n\t\t? function getProto(O) {\n\t\t\tif (!O || (typeof O !== 'object' && typeof O !== 'function')) {\n\t\t\t\tthrow new TypeError('getProto: not an object');\n\t\t\t}\n\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\treturn originalGetProto(O);\n\t\t}\n\t\t: getDunderProto\n\t\t\t? function getProto(O) {\n\t\t\t\t// @ts-expect-error TS can't narrow inside a closure, for some reason\n\t\t\t\treturn getDunderProto(O);\n\t\t\t}\n\t\t\t: null;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZ2V0LXByb3RvL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLHNCQUFzQixtQkFBTyxDQUFDLDBGQUEwQjtBQUN4RCx1QkFBdUIsbUJBQU8sQ0FBQyx3RkFBeUI7O0FBRXhELHFCQUFxQixtQkFBTyxDQUFDLGtFQUFrQjs7QUFFL0MsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9nZXQtcHJvdG8vaW5kZXguanM/ZTU2OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciByZWZsZWN0R2V0UHJvdG8gPSByZXF1aXJlKCcuL1JlZmxlY3QuZ2V0UHJvdG90eXBlT2YnKTtcbnZhciBvcmlnaW5hbEdldFByb3RvID0gcmVxdWlyZSgnLi9PYmplY3QuZ2V0UHJvdG90eXBlT2YnKTtcblxudmFyIGdldER1bmRlclByb3RvID0gcmVxdWlyZSgnZHVuZGVyLXByb3RvL2dldCcpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSByZWZsZWN0R2V0UHJvdG9cblx0PyBmdW5jdGlvbiBnZXRQcm90byhPKSB7XG5cdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBUUyBjYW4ndCBuYXJyb3cgaW5zaWRlIGEgY2xvc3VyZSwgZm9yIHNvbWUgcmVhc29uXG5cdFx0cmV0dXJuIHJlZmxlY3RHZXRQcm90byhPKTtcblx0fVxuXHQ6IG9yaWdpbmFsR2V0UHJvdG9cblx0XHQ/IGZ1bmN0aW9uIGdldFByb3RvKE8pIHtcblx0XHRcdGlmICghTyB8fCAodHlwZW9mIE8gIT09ICdvYmplY3QnICYmIHR5cGVvZiBPICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdnZXRQcm90bzogbm90IGFuIG9iamVjdCcpO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciBUUyBjYW4ndCBuYXJyb3cgaW5zaWRlIGEgY2xvc3VyZSwgZm9yIHNvbWUgcmVhc29uXG5cdFx0XHRyZXR1cm4gb3JpZ2luYWxHZXRQcm90byhPKTtcblx0XHR9XG5cdFx0OiBnZXREdW5kZXJQcm90b1xuXHRcdFx0PyBmdW5jdGlvbiBnZXRQcm90byhPKSB7XG5cdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVFMgY2FuJ3QgbmFycm93IGluc2lkZSBhIGNsb3N1cmUsIGZvciBzb21lIHJlYXNvblxuXHRcdFx0XHRyZXR1cm4gZ2V0RHVuZGVyUHJvdG8oTyk7XG5cdFx0XHR9XG5cdFx0XHQ6IG51bGw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/get-proto/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/gopd.js b/frontend/.next/server/vendor-chunks/gopd.js new file mode 100644 index 000000000..05f538192 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/gopd.js @@ -0,0 +1,35 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/gopd"; +exports.ids = ["vendor-chunks/gopd"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/gopd/gOPD.js": +/*!***********************************!*\ + !*** ./node_modules/gopd/gOPD.js ***! + \***********************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./gOPD')} */\nmodule.exports = Object.getOwnPropertyDescriptor;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZ29wZC9nT1BELmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsa0JBQWtCO0FBQzdCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9nb3BkL2dPUEQuanM/OTI1YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2dPUEQnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/gopd/gOPD.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/gopd/index.js": +/*!************************************!*\ + !*** ./node_modules/gopd/index.js ***! + \************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\n/** @type {import('.')} */\nvar $gOPD = __webpack_require__(/*! ./gOPD */ \"(ssr)/./node_modules/gopd/gOPD.js\");\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvZ29wZC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLGFBQWE7QUFDeEIsWUFBWSxtQkFBTyxDQUFDLGlEQUFROztBQUU1QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL2dvcGQvaW5kZXguanM/MDZlNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG52YXIgJGdPUEQgPSByZXF1aXJlKCcuL2dPUEQnKTtcblxuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoW10sICdsZW5ndGgnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGdPUERcblx0XHQkZ09QRCA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSAkZ09QRDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/gopd/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/has-flag.js b/frontend/.next/server/vendor-chunks/has-flag.js new file mode 100644 index 000000000..d56f6cb61 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/has-flag.js @@ -0,0 +1,25 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/has-flag"; +exports.ids = ["vendor-chunks/has-flag"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/has-flag/index.js": +/*!****************************************!*\ + !*** ./node_modules/has-flag/index.js ***! + \****************************************/ +/***/ ((module) => { + +eval("\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvaGFzLWZsYWcvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9oYXMtZmxhZy9pbmRleC5qcz8zOTYzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndiA9IHByb2Nlc3MuYXJndikgPT4ge1xuXHRjb25zdCBwcmVmaXggPSBmbGFnLnN0YXJ0c1dpdGgoJy0nKSA/ICcnIDogKGZsYWcubGVuZ3RoID09PSAxID8gJy0nIDogJy0tJyk7XG5cdGNvbnN0IHBvc2l0aW9uID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBhcmd2LmluZGV4T2YoJy0tJyk7XG5cdHJldHVybiBwb3NpdGlvbiAhPT0gLTEgJiYgKHRlcm1pbmF0b3JQb3NpdGlvbiA9PT0gLTEgfHwgcG9zaXRpb24gPCB0ZXJtaW5hdG9yUG9zaXRpb24pO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/has-flag/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/has-symbols.js b/frontend/.next/server/vendor-chunks/has-symbols.js new file mode 100644 index 000000000..dd15f2394 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/has-symbols.js @@ -0,0 +1,35 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/has-symbols"; +exports.ids = ["vendor-chunks/has-symbols"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/has-symbols/index.js": +/*!*******************************************!*\ + !*** ./node_modules/has-symbols/index.js ***! + \*******************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = __webpack_require__(/*! ./shams */ \"(ssr)/./node_modules/has-symbols/shams.js\");\n\n/** @type {import('.')} */\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQSxvQkFBb0IsbUJBQU8sQ0FBQywwREFBUzs7QUFFckMsV0FBVyxhQUFhO0FBQ3hCO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMsMENBQTBDOztBQUUxQztBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcz9kZTA5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzTmF0aXZlU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBvcmlnU3ltYm9sKCdmb28nKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sKCdiYXInKSAhPT0gJ3N5bWJvbCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0cmV0dXJuIGhhc1N5bWJvbFNoYW0oKTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/has-symbols/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/has-symbols/shams.js": +/*!*******************************************!*\ + !*** ./node_modules/has-symbols/shams.js ***! + \*******************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./shams')} */\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\t/** @type {{ [k in symbol]?: unknown }} */\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\t// eslint-disable-next-line no-extra-parens\n\t\tvar descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsV0FBVyxtQkFBbUI7QUFDOUI7QUFDQTtBQUNBLDJGQUEyRjtBQUMzRiw0Q0FBNEM7O0FBRTVDLGNBQWMsMkJBQTJCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQzs7QUFFaEMsa0VBQWtFO0FBQ2xFLHFFQUFxRTs7QUFFckU7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQSx1Q0FBdUM7O0FBRXZDLDJEQUEyRDtBQUMzRCwrREFBK0Q7O0FBRS9EO0FBQ0E7QUFDQSxzQkFBc0IsZ0JBQWdCO0FBQ3RDLDJFQUEyRTs7QUFFM0UseUdBQXlHOztBQUV6RztBQUNBLDZDQUE2Qzs7QUFFN0MsOERBQThEOztBQUU5RDtBQUNBO0FBQ0EsOEJBQThCLG9CQUFvQjtBQUNsRCx1RUFBdUU7QUFDdkU7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanM/ZjM0NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3NoYW1zJyl9ICovXG4vKiBlc2xpbnQgY29tcGxleGl0eTogWzIsIDE4XSwgbWF4LXN0YXRlbWVudHM6IFsyLCAzM10gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJykgeyByZXR1cm4gdHJ1ZTsgfVxuXG5cdC8qKiBAdHlwZSB7eyBbayBpbiBzeW1ib2xdPzogdW5rbm93biB9fSAqL1xuXHR2YXIgb2JqID0ge307XG5cdHZhciBzeW0gPSBTeW1ib2woJ3Rlc3QnKTtcblx0dmFyIHN5bU9iaiA9IE9iamVjdChzeW0pO1xuXHRpZiAodHlwZW9mIHN5bSA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW1PYmopICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL29iamVjdC5hc3NpZ24vaXNzdWVzLzE3XG5cdC8vIGlmIChzeW0gaW5zdGFuY2VvZiBTeW1ib2wpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJSZWZsZWN0aW9uL2dldC1vd24tcHJvcGVydHktc3ltYm9scy9pc3N1ZXMvNFxuXHQvLyBpZiAoIShzeW1PYmogaW5zdGFuY2VvZiBTeW1ib2wpKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIGlmICh0eXBlb2YgU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gaWYgKFN0cmluZyhzeW0pICE9PSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltVmFsID0gNDI7XG5cdG9ialtzeW1dID0gc3ltVmFsO1xuXHRmb3IgKHZhciBfIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tdW5yZWFjaGFibGUtbG9vcFxuXHRpZiAodHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaik7XG5cdGlmIChzeW1zLmxlbmd0aCAhPT0gMSB8fCBzeW1zWzBdICE9PSBzeW0pIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRyYS1wYXJlbnNcblx0XHR2YXIgZGVzY3JpcHRvciA9IC8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqLyAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHN5bSkpO1xuXHRcdGlmIChkZXNjcmlwdG9yLnZhbHVlICE9PSBzeW1WYWwgfHwgZGVzY3JpcHRvci5lbnVtZXJhYmxlICE9PSB0cnVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/has-symbols/shams.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/has-tostringtag.js b/frontend/.next/server/vendor-chunks/has-tostringtag.js new file mode 100644 index 000000000..5211b3155 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/has-tostringtag.js @@ -0,0 +1,25 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/has-tostringtag"; +exports.ids = ["vendor-chunks/has-tostringtag"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/has-tostringtag/shams.js": +/*!***********************************************!*\ + !*** ./node_modules/has-tostringtag/shams.js ***! + \***********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar hasSymbols = __webpack_require__(/*! has-symbols/shams */ \"(ssr)/./node_modules/has-symbols/shams.js\");\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvaGFzLXRvc3RyaW5ndGFnL3NoYW1zLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLGlCQUFpQixtQkFBTyxDQUFDLG9FQUFtQjs7QUFFNUMsV0FBVyxhQUFhO0FBQ3hCO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvaGFzLXRvc3RyaW5ndGFnL3NoYW1zLmpzP2ZmM2IiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzL3NoYW1zJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1RvU3RyaW5nVGFnU2hhbXMoKSB7XG5cdHJldHVybiBoYXNTeW1ib2xzKCkgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/has-tostringtag/shams.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/hasown.js b/frontend/.next/server/vendor-chunks/hasown.js new file mode 100644 index 000000000..e4a03b776 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/hasown.js @@ -0,0 +1,25 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/hasown"; +exports.ids = ["vendor-chunks/hasown"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/hasown/index.js": +/*!**************************************!*\ + !*** ./node_modules/hasown/index.js ***! + \**************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = __webpack_require__(/*! function-bind */ \"(ssr)/./node_modules/function-bind/index.js\");\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvaGFzb3duL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQSxXQUFXLG1CQUFPLENBQUMsa0VBQWU7O0FBRWxDLFdBQVcsYUFBYTtBQUN4QiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvaGFzb3duL2luZGV4LmpzP2VkNjgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xudmFyICRoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChjYWxsLCAkaGFzT3duKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/hasown/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/math-intrinsics.js b/frontend/.next/server/vendor-chunks/math-intrinsics.js new file mode 100644 index 000000000..4ab96cec0 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/math-intrinsics.js @@ -0,0 +1,95 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/math-intrinsics"; +exports.ids = ["vendor-chunks/math-intrinsics"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/math-intrinsics/abs.js": +/*!*********************************************!*\ + !*** ./node_modules/math-intrinsics/abs.js ***! + \*********************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./abs')} */\nmodule.exports = Math.abs;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL2Ficy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLGlCQUFpQjtBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL2Ficy5qcz82MTVjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vYWJzJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguYWJzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/math-intrinsics/abs.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/math-intrinsics/floor.js": +/*!***********************************************!*\ + !*** ./node_modules/math-intrinsics/floor.js ***! + \***********************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./floor')} */\nmodule.exports = Math.floor;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL2Zsb29yLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsbUJBQW1CO0FBQzlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3MvZmxvb3IuanM/MjZiOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2Zsb29yJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZmxvb3I7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/math-intrinsics/floor.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/math-intrinsics/isNaN.js": +/*!***********************************************!*\ + !*** ./node_modules/math-intrinsics/isNaN.js ***! + \***********************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./isNaN')} */\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL2lzTmFOLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsbUJBQW1CO0FBQzlCO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL2lzTmFOLmpzPzVmZDIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9pc05hTicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gaXNOYU4oYSkge1xuXHRyZXR1cm4gYSAhPT0gYTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/math-intrinsics/isNaN.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/math-intrinsics/max.js": +/*!*********************************************!*\ + !*** ./node_modules/math-intrinsics/max.js ***! + \*********************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./max')} */\nmodule.exports = Math.max;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL21heC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLGlCQUFpQjtBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL21heC5qcz8zYmI5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vbWF4Jyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubWF4O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/math-intrinsics/max.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/math-intrinsics/min.js": +/*!*********************************************!*\ + !*** ./node_modules/math-intrinsics/min.js ***! + \*********************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./min')} */\nmodule.exports = Math.min;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL21pbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLGlCQUFpQjtBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL21pbi5qcz8yYmFkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vbWluJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubWluO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/math-intrinsics/min.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/math-intrinsics/pow.js": +/*!*********************************************!*\ + !*** ./node_modules/math-intrinsics/pow.js ***! + \*********************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./pow')} */\nmodule.exports = Math.pow;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL3Bvdy5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLGlCQUFpQjtBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL3Bvdy5qcz9hMDc5Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vcG93Jyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgucG93O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/math-intrinsics/pow.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/math-intrinsics/round.js": +/*!***********************************************!*\ + !*** ./node_modules/math-intrinsics/round.js ***! + \***********************************************/ +/***/ ((module) => { + +eval("\n\n/** @type {import('./round')} */\nmodule.exports = Math.round;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL3JvdW5kLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLFdBQVcsbUJBQW1CO0FBQzlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3Mvcm91bmQuanM/YzE4ZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3JvdW5kJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgucm91bmQ7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/math-intrinsics/round.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/math-intrinsics/sign.js": +/*!**********************************************!*\ + !*** ./node_modules/math-intrinsics/sign.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\n\nvar $isNaN = __webpack_require__(/*! ./isNaN */ \"(ssr)/./node_modules/math-intrinsics/isNaN.js\");\n\n/** @type {import('./sign')} */\nmodule.exports = function sign(number) {\n\tif ($isNaN(number) || number === 0) {\n\t\treturn number;\n\t}\n\treturn number < 0 ? -1 : +1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL3NpZ24uanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsYUFBYSxtQkFBTyxDQUFDLDhEQUFTOztBQUU5QixXQUFXLGtCQUFrQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21hdGgtaW50cmluc2ljcy9zaWduLmpzPzllODEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJGlzTmFOID0gcmVxdWlyZSgnLi9pc05hTicpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9zaWduJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNpZ24obnVtYmVyKSB7XG5cdGlmICgkaXNOYU4obnVtYmVyKSB8fCBudW1iZXIgPT09IDApIHtcblx0XHRyZXR1cm4gbnVtYmVyO1xuXHR9XG5cdHJldHVybiBudW1iZXIgPCAwID8gLTEgOiArMTtcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/math-intrinsics/sign.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/mime-db.js b/frontend/.next/server/vendor-chunks/mime-db.js new file mode 100644 index 000000000..8cc8b7386 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/mime-db.js @@ -0,0 +1,35 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/mime-db"; +exports.ids = ["vendor-chunks/mime-db"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/mime-db/index.js": +/*!***************************************!*\ + !*** ./node_modules/mime-db/index.js ***! + \***************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015-2022 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = __webpack_require__(/*! ./db.json */ \"(ssr)/./node_modules/mime-db/db.json\")\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbWltZS1kYi9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDZGQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbWltZS1kYi9pbmRleC5qcz9iMjA1Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogbWltZS1kYlxuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNS0yMDIyIERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kYi5qc29uJylcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/mime-db/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/mime-db/db.json": +/*!**************************************!*\ + !*** ./node_modules/mime-db/db.json ***! + \**************************************/ +/***/ ((module) => { + +"use strict"; +module.exports = JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/city+json":{"source":"iana","compressible":true},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true,"extensions":["cpl"]},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dash-patch+xml":{"source":"iana","compressible":true,"extensions":["mpp"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true,"extensions":["mpf"]},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/oblivious-dns-message":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana","extensions":["asc"]},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.eclipse.ditto+json":{"source":"iana","compressible":true},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eu.kasparian.car+json":{"source":"iana","compressible":true},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.familysearch.gedcom+zip":{"source":"iana","compressible":false},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hl7cda+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hl7v2+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxar.archive.3tz+zip":{"source":"iana","compressible":false},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.syft+json":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true,"extensions":["wif"]},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana","extensions":["avci"]},"image/avcs":{"source":"iana","extensions":["avcs"]},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}'); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/mime-types.js b/frontend/.next/server/vendor-chunks/mime-types.js new file mode 100644 index 000000000..39e0f8510 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/mime-types.js @@ -0,0 +1,25 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/mime-types"; +exports.ids = ["vendor-chunks/mime-types"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/mime-types/index.js": +/*!******************************************!*\ + !*** ./node_modules/mime-types/index.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +eval("/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = __webpack_require__(/*! mime-db */ \"(ssr)/./node_modules/mime-db/index.js\")\nvar extname = (__webpack_require__(/*! path */ \"path\").extname)\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbWltZS10eXBlcy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxtQkFBTyxDQUFDLHNEQUFTO0FBQzFCLGNBQWMsaURBQXVCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsU0FBUztBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlO0FBQ2YsZ0JBQWdCLEtBQUs7QUFDckIsbUJBQW1CO0FBQ25CLGlCQUFpQjtBQUNqQixrQkFBa0I7QUFDbEIsY0FBYztBQUNkLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9taW1lLXR5cGVzL2luZGV4LmpzPzM3MDEiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBtaW1lLXR5cGVzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGIgPSByZXF1aXJlKCdtaW1lLWRiJylcbnZhciBleHRuYW1lID0gcmVxdWlyZSgncGF0aCcpLmV4dG5hbWVcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgRVhUUkFDVF9UWVBFX1JFR0VYUCA9IC9eXFxzKihbXjtcXHNdKikoPzo7fFxcc3wkKS9cbnZhciBURVhUX1RZUEVfUkVHRVhQID0gL150ZXh0XFwvL2lcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNoYXJzZXQgPSBjaGFyc2V0XG5leHBvcnRzLmNoYXJzZXRzID0geyBsb29rdXA6IGNoYXJzZXQgfVxuZXhwb3J0cy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG5leHBvcnRzLmV4dGVuc2lvbiA9IGV4dGVuc2lvblxuZXhwb3J0cy5leHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuZXhwb3J0cy5sb29rdXAgPSBsb29rdXBcbmV4cG9ydHMudHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbi8vIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zL3R5cGVzIG1hcHNcbnBvcHVsYXRlTWFwcyhleHBvcnRzLmV4dGVuc2lvbnMsIGV4cG9ydHMudHlwZXMpXG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGNoYXJzZXQgZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjaGFyc2V0ICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcbiAgdmFyIG1pbWUgPSBtYXRjaCAmJiBkYlttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmIChtaW1lICYmIG1pbWUuY2hhcnNldCkge1xuICAgIHJldHVybiBtaW1lLmNoYXJzZXRcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdGV4dC8qIHRvIHV0Zi04XG4gIGlmIChtYXRjaCAmJiBURVhUX1RZUEVfUkVHRVhQLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bGwgQ29udGVudC1UeXBlIGhlYWRlciBnaXZlbiBhIE1JTUUgdHlwZSBvciBleHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY29udGVudFR5cGUgKHN0cikge1xuICAvLyBUT0RPOiBzaG91bGQgdGhpcyBldmVuIGJlIGluIHRoaXMgbW9kdWxlP1xuICBpZiAoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIG1pbWUgPSBzdHIuaW5kZXhPZignLycpID09PSAtMVxuICAgID8gZXhwb3J0cy5sb29rdXAoc3RyKVxuICAgIDogc3RyXG5cbiAgaWYgKCFtaW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgY29udGVudC10eXBlIG9yIG90aGVyIG1vZHVsZVxuICBpZiAobWltZS5pbmRleE9mKCdjaGFyc2V0JykgPT09IC0xKSB7XG4gICAgdmFyIGNoYXJzZXQgPSBleHBvcnRzLmNoYXJzZXQobWltZSlcbiAgICBpZiAoY2hhcnNldCkgbWltZSArPSAnOyBjaGFyc2V0PScgKyBjaGFyc2V0LnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIHJldHVybiBtaW1lXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGV4dGVuc2lvbiAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG5cbiAgLy8gZ2V0IGV4dGVuc2lvbnNcbiAgdmFyIGV4dHMgPSBtYXRjaCAmJiBleHBvcnRzLmV4dGVuc2lvbnNbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXh0c1swXVxufVxuXG4vKipcbiAqIExvb2t1cCB0aGUgTUlNRSB0eXBlIGZvciBhIGZpbGUgcGF0aC9leHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGxvb2t1cCAocGF0aCkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBnZXQgdGhlIGV4dGVuc2lvbiAoXCJleHRcIiBvciBcIi5leHRcIiBvciBmdWxsIHBhdGgpXG4gIHZhciBleHRlbnNpb24gPSBleHRuYW1lKCd4LicgKyBwYXRoKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnN1YnN0cigxKVxuXG4gIGlmICghZXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy50eXBlc1tleHRlbnNpb25dIHx8IGZhbHNlXG59XG5cbi8qKlxuICogUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMgYW5kIHR5cGVzIG1hcHMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBvcHVsYXRlTWFwcyAoZXh0ZW5zaW9ucywgdHlwZXMpIHtcbiAgLy8gc291cmNlIHByZWZlcmVuY2UgKGxlYXN0IC0+IG1vc3QpXG4gIHZhciBwcmVmZXJlbmNlID0gWyduZ2lueCcsICdhcGFjaGUnLCB1bmRlZmluZWQsICdpYW5hJ11cblxuICBPYmplY3Qua2V5cyhkYikuZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoTWltZVR5cGUgKHR5cGUpIHtcbiAgICB2YXIgbWltZSA9IGRiW3R5cGVdXG4gICAgdmFyIGV4dHMgPSBtaW1lLmV4dGVuc2lvbnNcblxuICAgIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIG1pbWUgLT4gZXh0ZW5zaW9uc1xuICAgIGV4dGVuc2lvbnNbdHlwZV0gPSBleHRzXG5cbiAgICAvLyBleHRlbnNpb24gLT4gbWltZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dHNbaV1cblxuICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0pIHtcbiAgICAgICAgdmFyIGZyb20gPSBwcmVmZXJlbmNlLmluZGV4T2YoZGJbdHlwZXNbZXh0ZW5zaW9uXV0uc291cmNlKVxuICAgICAgICB2YXIgdG8gPSBwcmVmZXJlbmNlLmluZGV4T2YobWltZS5zb3VyY2UpXG5cbiAgICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0gIT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nICYmXG4gICAgICAgICAgKGZyb20gPiB0byB8fCAoZnJvbSA9PT0gdG8gJiYgdHlwZXNbZXh0ZW5zaW9uXS5zdWJzdHIoMCwgMTIpID09PSAnYXBwbGljYXRpb24vJykpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGUgcmVtYXBwaW5nXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzZXQgdGhlIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgICB0eXBlc1tleHRlbnNpb25dID0gdHlwZVxuICAgIH1cbiAgfSlcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/mime-types/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/ms.js b/frontend/.next/server/vendor-chunks/ms.js new file mode 100644 index 000000000..45448cffc --- /dev/null +++ b/frontend/.next/server/vendor-chunks/ms.js @@ -0,0 +1,24 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/ms"; +exports.ids = ["vendor-chunks/ms"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/ms/index.js": +/*!**********************************!*\ + !*** ./node_modules/ms/index.js ***! + \**********************************/ +/***/ ((module) => { + +eval("/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbXMvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQixXQUFXLFFBQVE7QUFDbkIsWUFBWSxPQUFPO0FBQ25CLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzPzc5NDUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIZWxwZXJzLlxuICovXG5cbnZhciBzID0gMTAwMDtcbnZhciBtID0gcyAqIDYwO1xudmFyIGggPSBtICogNjA7XG52YXIgZCA9IGggKiAyNDtcbnZhciB3ID0gZCAqIDc7XG52YXIgeSA9IGQgKiAzNjUuMjU7XG5cbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/ms/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/next.js b/frontend/.next/server/vendor-chunks/next.js new file mode 100644 index 000000000..f3dd747fe --- /dev/null +++ b/frontend/.next/server/vendor-chunks/next.js @@ -0,0 +1,2318 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/next"; +exports.ids = ["vendor-chunks/next"]; +exports.modules = { + +/***/ "./node_modules/next/dist/build/templates/helpers.js": +/*!***********************************************************!*\ + !*** ./node_modules/next/dist/build/templates/helpers.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("/**\n * Hoists a name from a module or promised module.\n *\n * @param module the module to hoist the name from\n * @param name the name to hoist\n * @returns the value on the module (or promised module)\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hoist\", ({\n enumerable: true,\n get: function() {\n return hoist;\n }\n}));\nfunction hoist(module, name) {\n // If the name is available in the module, return it.\n if (name in module) {\n return module[name];\n }\n // If a property called `then` exists, assume it's a promise and\n // return a promise that resolves to the name.\n if (\"then\" in module && typeof module.then === \"function\") {\n return module.then((mod)=>hoist(mod, name));\n }\n // If we're trying to hoise the default export, and the module is a function,\n // return the module itself.\n if (typeof module === \"function\" && name === \"default\") {\n return module;\n }\n // Otherwise, return undefined.\n return undefined;\n}\n\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3RlbXBsYXRlcy9oZWxwZXJzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQWlCO0FBQ2pCLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLHlDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3RlbXBsYXRlcy9oZWxwZXJzLmpzP2IyODciXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIb2lzdHMgYSBuYW1lIGZyb20gYSBtb2R1bGUgb3IgcHJvbWlzZWQgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBtb2R1bGUgdGhlIG1vZHVsZSB0byBob2lzdCB0aGUgbmFtZSBmcm9tXG4gKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSB0byBob2lzdFxuICogQHJldHVybnMgdGhlIHZhbHVlIG9uIHRoZSBtb2R1bGUgKG9yIHByb21pc2VkIG1vZHVsZSlcbiAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhvaXN0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBob2lzdDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGhvaXN0KG1vZHVsZSwgbmFtZSkge1xuICAgIC8vIElmIHRoZSBuYW1lIGlzIGF2YWlsYWJsZSBpbiB0aGUgbW9kdWxlLCByZXR1cm4gaXQuXG4gICAgaWYgKG5hbWUgaW4gbW9kdWxlKSB7XG4gICAgICAgIHJldHVybiBtb2R1bGVbbmFtZV07XG4gICAgfVxuICAgIC8vIElmIGEgcHJvcGVydHkgY2FsbGVkIGB0aGVuYCBleGlzdHMsIGFzc3VtZSBpdCdzIGEgcHJvbWlzZSBhbmRcbiAgICAvLyByZXR1cm4gYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5hbWUuXG4gICAgaWYgKFwidGhlblwiIGluIG1vZHVsZSAmJiB0eXBlb2YgbW9kdWxlLnRoZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gbW9kdWxlLnRoZW4oKG1vZCk9PmhvaXN0KG1vZCwgbmFtZSkpO1xuICAgIH1cbiAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gaG9pc2UgdGhlIGRlZmF1bHQgZXhwb3J0LCBhbmQgdGhlIG1vZHVsZSBpcyBhIGZ1bmN0aW9uLFxuICAgIC8vIHJldHVybiB0aGUgbW9kdWxlIGl0c2VsZi5cbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJmdW5jdGlvblwiICYmIG5hbWUgPT09IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/templates/helpers.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/pages/_app.js": +/*!**********************************************!*\ + !*** ./node_modules/next/dist/pages/_app.js ***! + \**********************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return App;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/cjs/_interop_require_default.cjs\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"react/jsx-runtime\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"react\"));\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\n/**\n * `App` component is used for initialize of pages. It allows for overwriting and full control of the `page` initialization.\n * This allows for keeping state between navigation, custom error handling, injecting additional data.\n */ async function appGetInitialProps(param) {\n let { Component, ctx } = param;\n const pageProps = await (0, _utils.loadGetInitialProps)(Component, ctx);\n return {\n pageProps\n };\n}\nclass App extends _react.default.Component {\n render() {\n const { Component, pageProps } = this.props;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {\n ...pageProps\n });\n }\n}\nApp.origGetInitialProps = appGetInitialProps;\nApp.getInitialProps = appGetInitialProps;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=_app.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19hcHAuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsNkdBQXlDO0FBQ2xGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLDRDQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gseUJBQXlCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLG9CQUFPO0FBQ3ZFLE1BQU1JLFNBQVNKLG1CQUFPQSxDQUFDLHlFQUFxQjtBQUM1Qzs7O0NBR0MsR0FBRyxlQUFlSyxtQkFBbUJDLEtBQUs7SUFDdkMsSUFBSSxFQUFFQyxTQUFTLEVBQUVDLEdBQUcsRUFBRSxHQUFHRjtJQUN6QixNQUFNRyxZQUFZLE1BQU0sQ0FBQyxHQUFHTCxPQUFPTSxtQkFBbUIsRUFBRUgsV0FBV0M7SUFDbkUsT0FBTztRQUNIQztJQUNKO0FBQ0o7QUFDQSxNQUFNWCxZQUFZSSxPQUFPUyxPQUFPLENBQUNKLFNBQVM7SUFDdENLLFNBQVM7UUFDTCxNQUFNLEVBQUVMLFNBQVMsRUFBRUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDSSxLQUFLO1FBQzNDLE9BQXFCLFdBQUgsR0FBSSxJQUFHWixZQUFZYSxHQUFHLEVBQUVQLFdBQVc7WUFDakQsR0FBR0UsU0FBUztRQUNoQjtJQUNKO0FBQ0o7QUFDQVgsSUFBSWlCLG1CQUFtQixHQUFHVjtBQUMxQlAsSUFBSWtCLGVBQWUsR0FBR1g7QUFFdEIsSUFBSSxDQUFDLE9BQU9YLFFBQVFpQixPQUFPLEtBQUssY0FBZSxPQUFPakIsUUFBUWlCLE9BQU8sS0FBSyxZQUFZakIsUUFBUWlCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2pCLFFBQVFpQixPQUFPLENBQUNNLFVBQVUsS0FBSyxhQUFhO0lBQ3JLekIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRaUIsT0FBTyxFQUFFLGNBQWM7UUFBRWhCLE9BQU87SUFBSztJQUNuRUgsT0FBTzBCLE1BQU0sQ0FBQ3hCLFFBQVFpQixPQUFPLEVBQUVqQjtJQUMvQnlCLE9BQU96QixPQUFPLEdBQUdBLFFBQVFpQixPQUFPO0FBQ2xDLEVBRUEsZ0NBQWdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvcGFnZXMvX2FwcC5qcz85NjFkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQXBwO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX3V0aWxzID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvdXRpbHNcIik7XG4vKipcbiAqIGBBcHBgIGNvbXBvbmVudCBpcyB1c2VkIGZvciBpbml0aWFsaXplIG9mIHBhZ2VzLiBJdCBhbGxvd3MgZm9yIG92ZXJ3cml0aW5nIGFuZCBmdWxsIGNvbnRyb2wgb2YgdGhlIGBwYWdlYCBpbml0aWFsaXphdGlvbi5cbiAqIFRoaXMgYWxsb3dzIGZvciBrZWVwaW5nIHN0YXRlIGJldHdlZW4gbmF2aWdhdGlvbiwgY3VzdG9tIGVycm9yIGhhbmRsaW5nLCBpbmplY3RpbmcgYWRkaXRpb25hbCBkYXRhLlxuICovIGFzeW5jIGZ1bmN0aW9uIGFwcEdldEluaXRpYWxQcm9wcyhwYXJhbSkge1xuICAgIGxldCB7IENvbXBvbmVudCwgY3R4IH0gPSBwYXJhbTtcbiAgICBjb25zdCBwYWdlUHJvcHMgPSBhd2FpdCAoMCwgX3V0aWxzLmxvYWRHZXRJbml0aWFsUHJvcHMpKENvbXBvbmVudCwgY3R4KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwYWdlUHJvcHNcbiAgICB9O1xufVxuY2xhc3MgQXBwIGV4dGVuZHMgX3JlYWN0LmRlZmF1bHQuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgQ29tcG9uZW50LCBwYWdlUHJvcHMgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKENvbXBvbmVudCwge1xuICAgICAgICAgICAgLi4ucGFnZVByb3BzXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkFwcC5vcmlnR2V0SW5pdGlhbFByb3BzID0gYXBwR2V0SW5pdGlhbFByb3BzO1xuQXBwLmdldEluaXRpYWxQcm9wcyA9IGFwcEdldEluaXRpYWxQcm9wcztcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X2FwcC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQXBwIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl91dGlscyIsImFwcEdldEluaXRpYWxQcm9wcyIsInBhcmFtIiwiQ29tcG9uZW50IiwiY3R4IiwicGFnZVByb3BzIiwibG9hZEdldEluaXRpYWxQcm9wcyIsImRlZmF1bHQiLCJyZW5kZXIiLCJwcm9wcyIsImpzeCIsIm9yaWdHZXRJbml0aWFsUHJvcHMiLCJnZXRJbml0aWFsUHJvcHMiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/pages/_app.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/pages/_document.js": +/*!***************************************************!*\ + !*** ./node_modules/next/dist/pages/_document.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Head: function() {\n return Head;\n },\n NextScript: function() {\n return NextScript;\n },\n Html: function() {\n return Html;\n },\n Main: function() {\n return Main;\n },\n /**\n * `Document` component handles the initial `document` markup and renders only on the server side.\n * Commonly used for implementing server side rendering for `css-in-js` libraries.\n */ default: function() {\n return Document;\n }\n});\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"react/jsx-runtime\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(/*! react */ \"react\"));\nconst _constants = __webpack_require__(/*! ../shared/lib/constants */ \"./node_modules/next/dist/shared/lib/constants.js\");\nconst _getpagefiles = __webpack_require__(/*! ../server/get-page-files */ \"./node_modules/next/dist/server/get-page-files.js\");\nconst _htmlescape = __webpack_require__(/*! ../server/htmlescape */ \"./node_modules/next/dist/server/htmlescape.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default(__webpack_require__(/*! ../lib/is-error */ \"./node_modules/next/dist/lib/is-error.js\"));\nconst _htmlcontextsharedruntime = __webpack_require__(/*! ../shared/lib/html-context.shared-runtime */ \"./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/html-context.js\");\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n return {\n default: obj\n };\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n for(var key in obj){\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\n/** Set of pages that have triggered a large data warning on production mode. */ const largePageDataWarnings = new Set();\nfunction getDocumentFiles(buildManifest, pathname, inAmpMode) {\n const sharedFiles = (0, _getpagefiles.getPageFiles)(buildManifest, \"/_app\");\n const pageFiles = true && inAmpMode ? [] : (0, _getpagefiles.getPageFiles)(buildManifest, pathname);\n return {\n sharedFiles,\n pageFiles,\n allFiles: [\n ...new Set([\n ...sharedFiles,\n ...pageFiles\n ])\n ]\n };\n}\nfunction getPolyfillScripts(context, props) {\n // polyfills.js has to be rendered as nomodule without async\n // It also has to be the first script to load\n const { assetPrefix, buildManifest, assetQueryString, disableOptimizedLoading, crossOrigin } = context;\n return buildManifest.polyfillFiles.filter((polyfill)=>polyfill.endsWith(\".js\") && !polyfill.endsWith(\".module.js\")).map((polyfill)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n defer: !disableOptimizedLoading,\n nonce: props.nonce,\n crossOrigin: props.crossOrigin || crossOrigin,\n noModule: true,\n src: `${assetPrefix}/_next/${polyfill}${assetQueryString}`\n }, polyfill));\n}\nfunction hasComponentProps(child) {\n return !!child && !!child.props;\n}\nfunction AmpStyles({ styles }) {\n if (!styles) return null;\n // try to parse styles from fragment for backwards compat\n const curStyles = Array.isArray(styles) ? styles : [];\n if (styles.props && // @ts-ignore Property 'props' does not exist on type ReactElement\n Array.isArray(styles.props.children)) {\n const hasStyles = (el)=>{\n var _el_props_dangerouslySetInnerHTML, _el_props;\n return el == null ? void 0 : (_el_props = el.props) == null ? void 0 : (_el_props_dangerouslySetInnerHTML = _el_props.dangerouslySetInnerHTML) == null ? void 0 : _el_props_dangerouslySetInnerHTML.__html;\n };\n // @ts-ignore Property 'props' does not exist on type ReactElement\n styles.props.children.forEach((child)=>{\n if (Array.isArray(child)) {\n child.forEach((el)=>hasStyles(el) && curStyles.push(el));\n } else if (hasStyles(child)) {\n curStyles.push(child);\n }\n });\n }\n /* Add custom styles before AMP styles to prevent accidental overrides */ return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n \"amp-custom\": \"\",\n dangerouslySetInnerHTML: {\n __html: curStyles.map((style)=>style.props.dangerouslySetInnerHTML.__html).join(\"\").replace(/\\/\\*# sourceMappingURL=.*\\*\\//g, \"\").replace(/\\/\\*@ sourceURL=.*?\\*\\//g, \"\")\n }\n });\n}\nfunction getDynamicChunks(context, props, files) {\n const { dynamicImports, assetPrefix, isDevelopment, assetQueryString, disableOptimizedLoading, crossOrigin } = context;\n return dynamicImports.map((file)=>{\n if (!file.endsWith(\".js\") || files.allFiles.includes(file)) return null;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n async: !isDevelopment && disableOptimizedLoading,\n defer: !disableOptimizedLoading,\n src: `${assetPrefix}/_next/${encodeURI(file)}${assetQueryString}`,\n nonce: props.nonce,\n crossOrigin: props.crossOrigin || crossOrigin\n }, file);\n });\n}\nfunction getScripts(context, props, files) {\n var _buildManifest_lowPriorityFiles;\n const { assetPrefix, buildManifest, isDevelopment, assetQueryString, disableOptimizedLoading, crossOrigin } = context;\n const normalScripts = files.allFiles.filter((file)=>file.endsWith(\".js\"));\n const lowPriorityScripts = (_buildManifest_lowPriorityFiles = buildManifest.lowPriorityFiles) == null ? void 0 : _buildManifest_lowPriorityFiles.filter((file)=>file.endsWith(\".js\"));\n return [\n ...normalScripts,\n ...lowPriorityScripts\n ].map((file)=>{\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n src: `${assetPrefix}/_next/${encodeURI(file)}${assetQueryString}`,\n nonce: props.nonce,\n async: !isDevelopment && disableOptimizedLoading,\n defer: !disableOptimizedLoading,\n crossOrigin: props.crossOrigin || crossOrigin\n }, file);\n });\n}\nfunction getPreNextWorkerScripts(context, props) {\n const { assetPrefix, scriptLoader, crossOrigin, nextScriptWorkers } = context;\n // disable `nextScriptWorkers` in edge runtime\n if (!nextScriptWorkers || \"nodejs\" === \"edge\") return null;\n try {\n let { partytownSnippet } = require(\"@builder.io/partytown/integration\");\n const children = Array.isArray(props.children) ? props.children : [\n props.children\n ];\n // Check to see if the user has defined their own Partytown configuration\n const userDefinedConfig = children.find((child)=>{\n var _child_props_dangerouslySetInnerHTML, _child_props;\n return hasComponentProps(child) && (child == null ? void 0 : (_child_props = child.props) == null ? void 0 : (_child_props_dangerouslySetInnerHTML = _child_props.dangerouslySetInnerHTML) == null ? void 0 : _child_props_dangerouslySetInnerHTML.__html.length) && \"data-partytown-config\" in child.props;\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n !userDefinedConfig && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n \"data-partytown-config\": \"\",\n dangerouslySetInnerHTML: {\n __html: `\n partytown = {\n lib: \"${assetPrefix}/_next/static/~partytown/\"\n };\n `\n }\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n \"data-partytown\": \"\",\n dangerouslySetInnerHTML: {\n __html: partytownSnippet()\n }\n }),\n (scriptLoader.worker || []).map((file, index)=>{\n const { strategy, src, children: scriptChildren, dangerouslySetInnerHTML, ...scriptProps } = file;\n let srcProps = {};\n if (src) {\n // Use external src if provided\n srcProps.src = src;\n } else if (dangerouslySetInnerHTML && dangerouslySetInnerHTML.__html) {\n // Embed inline script if provided with dangerouslySetInnerHTML\n srcProps.dangerouslySetInnerHTML = {\n __html: dangerouslySetInnerHTML.__html\n };\n } else if (scriptChildren) {\n // Embed inline script if provided with children\n srcProps.dangerouslySetInnerHTML = {\n __html: typeof scriptChildren === \"string\" ? scriptChildren : Array.isArray(scriptChildren) ? scriptChildren.join(\"\") : \"\"\n };\n } else {\n throw new Error(\"Invalid usage of next/script. Did you forget to include a src attribute or an inline script? https://nextjs.org/docs/messages/invalid-script\");\n }\n return /*#__PURE__*/ (0, _react.createElement)(\"script\", {\n ...srcProps,\n ...scriptProps,\n type: \"text/partytown\",\n key: src || index,\n nonce: props.nonce,\n \"data-nscript\": \"worker\",\n crossOrigin: props.crossOrigin || crossOrigin\n });\n })\n ]\n });\n } catch (err) {\n if ((0, _iserror.default)(err) && err.code !== \"MODULE_NOT_FOUND\") {\n console.warn(`Warning: ${err.message}`);\n }\n return null;\n }\n}\nfunction getPreNextScripts(context, props) {\n const { scriptLoader, disableOptimizedLoading, crossOrigin } = context;\n const webWorkerScripts = getPreNextWorkerScripts(context, props);\n const beforeInteractiveScripts = (scriptLoader.beforeInteractive || []).filter((script)=>script.src).map((file, index)=>{\n const { strategy, ...scriptProps } = file;\n return /*#__PURE__*/ (0, _react.createElement)(\"script\", {\n ...scriptProps,\n key: scriptProps.src || index,\n defer: scriptProps.defer ?? !disableOptimizedLoading,\n nonce: props.nonce,\n \"data-nscript\": \"beforeInteractive\",\n crossOrigin: props.crossOrigin || crossOrigin\n });\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n webWorkerScripts,\n beforeInteractiveScripts\n ]\n });\n}\nfunction getHeadHTMLProps(props) {\n const { crossOrigin, nonce, ...restProps } = props;\n // This assignment is necessary for additional type checking to avoid unsupported attributes in \n const headProps = restProps;\n return headProps;\n}\nfunction getAmpPath(ampPath, asPath) {\n return ampPath || `${asPath}${asPath.includes(\"?\") ? \"&\" : \"?\"}amp=1`;\n}\nfunction getNextFontLinkTags(nextFontManifest, dangerousAsPath, assetPrefix = \"\") {\n if (!nextFontManifest) {\n return {\n preconnect: null,\n preload: null\n };\n }\n const appFontsEntry = nextFontManifest.pages[\"/_app\"];\n const pageFontsEntry = nextFontManifest.pages[dangerousAsPath];\n const preloadedFontFiles = [\n ...appFontsEntry ?? [],\n ...pageFontsEntry ?? []\n ];\n // If no font files should preload but there's an entry for the path, add a preconnect tag.\n const preconnectToSelf = !!(preloadedFontFiles.length === 0 && (appFontsEntry || pageFontsEntry));\n return {\n preconnect: preconnectToSelf ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n \"data-next-font\": nextFontManifest.pagesUsingSizeAdjust ? \"size-adjust\" : \"\",\n rel: \"preconnect\",\n href: \"/\",\n crossOrigin: \"anonymous\"\n }) : null,\n preload: preloadedFontFiles ? preloadedFontFiles.map((fontFile)=>{\n const ext = /\\.(woff|woff2|eot|ttf|otf)$/.exec(fontFile)[1];\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"preload\",\n href: `${assetPrefix}/_next/${encodeURI(fontFile)}`,\n as: \"font\",\n type: `font/${ext}`,\n crossOrigin: \"anonymous\",\n \"data-next-font\": fontFile.includes(\"-s\") ? \"size-adjust\" : \"\"\n }, fontFile);\n }) : null\n };\n}\nclass Head extends _react.default.Component {\n static #_ = this.contextType = _htmlcontextsharedruntime.HtmlContext;\n getCssLinks(files) {\n const { assetPrefix, assetQueryString, dynamicImports, crossOrigin, optimizeCss, optimizeFonts } = this.context;\n const cssFiles = files.allFiles.filter((f)=>f.endsWith(\".css\"));\n const sharedFiles = new Set(files.sharedFiles);\n // Unmanaged files are CSS files that will be handled directly by the\n // webpack runtime (`mini-css-extract-plugin`).\n let unmangedFiles = new Set([]);\n let dynamicCssFiles = Array.from(new Set(dynamicImports.filter((file)=>file.endsWith(\".css\"))));\n if (dynamicCssFiles.length) {\n const existing = new Set(cssFiles);\n dynamicCssFiles = dynamicCssFiles.filter((f)=>!(existing.has(f) || sharedFiles.has(f)));\n unmangedFiles = new Set(dynamicCssFiles);\n cssFiles.push(...dynamicCssFiles);\n }\n let cssLinkElements = [];\n cssFiles.forEach((file)=>{\n const isSharedFile = sharedFiles.has(file);\n if (!optimizeCss) {\n cssLinkElements.push(/*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n nonce: this.props.nonce,\n rel: \"preload\",\n href: `${assetPrefix}/_next/${encodeURI(file)}${assetQueryString}`,\n as: \"style\",\n crossOrigin: this.props.crossOrigin || crossOrigin\n }, `${file}-preload`));\n }\n const isUnmanagedFile = unmangedFiles.has(file);\n cssLinkElements.push(/*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n nonce: this.props.nonce,\n rel: \"stylesheet\",\n href: `${assetPrefix}/_next/${encodeURI(file)}${assetQueryString}`,\n crossOrigin: this.props.crossOrigin || crossOrigin,\n \"data-n-g\": isUnmanagedFile ? undefined : isSharedFile ? \"\" : undefined,\n \"data-n-p\": isUnmanagedFile ? undefined : isSharedFile ? undefined : \"\"\n }, file));\n });\n if (false) {}\n return cssLinkElements.length === 0 ? null : cssLinkElements;\n }\n getPreloadDynamicChunks() {\n const { dynamicImports, assetPrefix, assetQueryString, crossOrigin } = this.context;\n return dynamicImports.map((file)=>{\n if (!file.endsWith(\".js\")) {\n return null;\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"preload\",\n href: `${assetPrefix}/_next/${encodeURI(file)}${assetQueryString}`,\n as: \"script\",\n nonce: this.props.nonce,\n crossOrigin: this.props.crossOrigin || crossOrigin\n }, file);\n }) // Filter out nulled scripts\n .filter(Boolean);\n }\n getPreloadMainLinks(files) {\n const { assetPrefix, assetQueryString, scriptLoader, crossOrigin } = this.context;\n const preloadFiles = files.allFiles.filter((file)=>{\n return file.endsWith(\".js\");\n });\n return [\n ...(scriptLoader.beforeInteractive || []).map((file)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n nonce: this.props.nonce,\n rel: \"preload\",\n href: file.src,\n as: \"script\",\n crossOrigin: this.props.crossOrigin || crossOrigin\n }, file.src)),\n ...preloadFiles.map((file)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n nonce: this.props.nonce,\n rel: \"preload\",\n href: `${assetPrefix}/_next/${encodeURI(file)}${assetQueryString}`,\n as: \"script\",\n crossOrigin: this.props.crossOrigin || crossOrigin\n }, file))\n ];\n }\n getBeforeInteractiveInlineScripts() {\n const { scriptLoader } = this.context;\n const { nonce, crossOrigin } = this.props;\n return (scriptLoader.beforeInteractive || []).filter((script)=>!script.src && (script.dangerouslySetInnerHTML || script.children)).map((file, index)=>{\n const { strategy, children, dangerouslySetInnerHTML, src, ...scriptProps } = file;\n let html = \"\";\n if (dangerouslySetInnerHTML && dangerouslySetInnerHTML.__html) {\n html = dangerouslySetInnerHTML.__html;\n } else if (children) {\n html = typeof children === \"string\" ? children : Array.isArray(children) ? children.join(\"\") : \"\";\n }\n return /*#__PURE__*/ (0, _react.createElement)(\"script\", {\n ...scriptProps,\n dangerouslySetInnerHTML: {\n __html: html\n },\n key: scriptProps.id || index,\n nonce: nonce,\n \"data-nscript\": \"beforeInteractive\",\n crossOrigin: crossOrigin || undefined\n });\n });\n }\n getDynamicChunks(files) {\n return getDynamicChunks(this.context, this.props, files);\n }\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props);\n }\n getScripts(files) {\n return getScripts(this.context, this.props, files);\n }\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props);\n }\n makeStylesheetInert(node) {\n return _react.default.Children.map(node, (c)=>{\n var _c_props, _c_props1;\n if ((c == null ? void 0 : c.type) === \"link\" && (c == null ? void 0 : (_c_props = c.props) == null ? void 0 : _c_props.href) && _constants.OPTIMIZED_FONT_PROVIDERS.some(({ url })=>{\n var _c_props_href, _c_props;\n return c == null ? void 0 : (_c_props = c.props) == null ? void 0 : (_c_props_href = _c_props.href) == null ? void 0 : _c_props_href.startsWith(url);\n })) {\n const newProps = {\n ...c.props || {},\n \"data-href\": c.props.href,\n href: undefined\n };\n return /*#__PURE__*/ _react.default.cloneElement(c, newProps);\n } else if (c == null ? void 0 : (_c_props1 = c.props) == null ? void 0 : _c_props1.children) {\n const newProps = {\n ...c.props || {},\n children: this.makeStylesheetInert(c.props.children)\n };\n return /*#__PURE__*/ _react.default.cloneElement(c, newProps);\n }\n return c;\n // @types/react bug. Returned value from .map will not be `null` if you pass in `[null]`\n }).filter(Boolean);\n }\n render() {\n const { styles, ampPath, inAmpMode, hybridAmp, canonicalBase, __NEXT_DATA__, dangerousAsPath, headTags, unstable_runtimeJS, unstable_JsPreload, disableOptimizedLoading, optimizeCss, optimizeFonts, assetPrefix, nextFontManifest } = this.context;\n const disableRuntimeJS = unstable_runtimeJS === false;\n const disableJsPreload = unstable_JsPreload === false || !disableOptimizedLoading;\n this.context.docComponentsRendered.Head = true;\n let { head } = this.context;\n let cssPreloads = [];\n let otherHeadElements = [];\n if (head) {\n head.forEach((c)=>{\n let metaTag;\n if (this.context.strictNextHead) {\n metaTag = /*#__PURE__*/ _react.default.createElement(\"meta\", {\n name: \"next-head\",\n content: \"1\"\n });\n }\n if (c && c.type === \"link\" && c.props[\"rel\"] === \"preload\" && c.props[\"as\"] === \"style\") {\n metaTag && cssPreloads.push(metaTag);\n cssPreloads.push(c);\n } else {\n if (c) {\n if (metaTag && (c.type !== \"meta\" || !c.props[\"charSet\"])) {\n otherHeadElements.push(metaTag);\n }\n otherHeadElements.push(c);\n }\n }\n });\n head = cssPreloads.concat(otherHeadElements);\n }\n let children = _react.default.Children.toArray(this.props.children).filter(Boolean);\n // show a warning if Head contains (only in development)\n if (true) {\n children = _react.default.Children.map(children, (child)=>{\n var _child_props;\n const isReactHelmet = child == null ? void 0 : (_child_props = child.props) == null ? void 0 : _child_props[\"data-react-helmet\"];\n if (!isReactHelmet) {\n var _child_props1;\n if ((child == null ? void 0 : child.type) === \"title\") {\n console.warn(\"Warning: <title> should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-title\");\n } else if ((child == null ? void 0 : child.type) === \"meta\" && (child == null ? void 0 : (_child_props1 = child.props) == null ? void 0 : _child_props1.name) === \"viewport\") {\n console.warn(\"Warning: viewport meta tags should not be used in _document.js's <Head>. https://nextjs.org/docs/messages/no-document-viewport-meta\");\n }\n }\n return child;\n // @types/react bug. Returned value from .map will not be `null` if you pass in `[null]`\n });\n if (this.props.crossOrigin) console.warn(\"Warning: `Head` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated\");\n }\n if (false) {}\n let hasAmphtmlRel = false;\n let hasCanonicalRel = false;\n // show warning and remove conflicting amp head tags\n head = _react.default.Children.map(head || [], (child)=>{\n if (!child) return child;\n const { type, props } = child;\n if ( true && inAmpMode) {\n let badProp = \"\";\n if (type === \"meta\" && props.name === \"viewport\") {\n badProp = 'name=\"viewport\"';\n } else if (type === \"link\" && props.rel === \"canonical\") {\n hasCanonicalRel = true;\n } else if (type === \"script\") {\n // only block if\n // 1. it has a src and isn't pointing to ampproject's CDN\n // 2. it is using dangerouslySetInnerHTML without a type or\n // a type of text/javascript\n if (props.src && props.src.indexOf(\"ampproject\") < -1 || props.dangerouslySetInnerHTML && (!props.type || props.type === \"text/javascript\")) {\n badProp = \"<script\";\n Object.keys(props).forEach((prop)=>{\n badProp += ` ${prop}=\"${props[prop]}\"`;\n });\n badProp += \"/>\";\n }\n }\n if (badProp) {\n console.warn(`Found conflicting amp tag \"${child.type}\" with conflicting prop ${badProp} in ${__NEXT_DATA__.page}. https://nextjs.org/docs/messages/conflicting-amp-tag`);\n return null;\n }\n } else {\n // non-amp mode\n if (type === \"link\" && props.rel === \"amphtml\") {\n hasAmphtmlRel = true;\n }\n }\n return child;\n // @types/react bug. Returned value from .map will not be `null` if you pass in `[null]`\n });\n const files = getDocumentFiles(this.context.buildManifest, this.context.__NEXT_DATA__.page, true && inAmpMode);\n const nextFontLinkTags = getNextFontLinkTags(nextFontManifest, dangerousAsPath, assetPrefix);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"head\", {\n ...getHeadHTMLProps(this.props),\n children: [\n this.context.isDevelopment && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n \"data-next-hide-fouc\": true,\n \"data-ampdevmode\": true && inAmpMode ? \"true\" : undefined,\n dangerouslySetInnerHTML: {\n __html: `body{display:none}`\n }\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"noscript\", {\n \"data-next-hide-fouc\": true,\n \"data-ampdevmode\": true && inAmpMode ? \"true\" : undefined,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n __html: `body{display:block}`\n }\n })\n })\n ]\n }),\n head,\n this.context.strictNextHead ? null : /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"next-head-count\",\n content: _react.default.Children.count(head || []).toString()\n }),\n children,\n optimizeFonts && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"next-font-preconnect\"\n }),\n nextFontLinkTags.preconnect,\n nextFontLinkTags.preload,\n true && inAmpMode && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"viewport\",\n content: \"width=device-width,minimum-scale=1,initial-scale=1\"\n }),\n !hasCanonicalRel && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"canonical\",\n href: canonicalBase + (__webpack_require__(/*! ../server/utils */ \"./node_modules/next/dist/server/utils.js\").cleanAmpPath)(dangerousAsPath)\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"preload\",\n as: \"script\",\n href: \"https://cdn.ampproject.org/v0.js\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(AmpStyles, {\n styles: styles\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n \"amp-boilerplate\": \"\",\n dangerouslySetInnerHTML: {\n __html: `body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}`\n }\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"noscript\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n \"amp-boilerplate\": \"\",\n dangerouslySetInnerHTML: {\n __html: `body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}`\n }\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n async: true,\n src: \"https://cdn.ampproject.org/v0.js\"\n })\n ]\n }),\n !( true && inAmpMode) && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n !hasAmphtmlRel && hybridAmp && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"amphtml\",\n href: canonicalBase + getAmpPath(ampPath, dangerousAsPath)\n }),\n this.getBeforeInteractiveInlineScripts(),\n !optimizeCss && this.getCssLinks(files),\n !optimizeCss && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"noscript\", {\n \"data-n-css\": this.props.nonce ?? \"\"\n }),\n !disableRuntimeJS && !disableJsPreload && this.getPreloadDynamicChunks(),\n !disableRuntimeJS && !disableJsPreload && this.getPreloadMainLinks(files),\n !disableOptimizedLoading && !disableRuntimeJS && this.getPolyfillScripts(),\n !disableOptimizedLoading && !disableRuntimeJS && this.getPreNextScripts(),\n !disableOptimizedLoading && !disableRuntimeJS && this.getDynamicChunks(files),\n !disableOptimizedLoading && !disableRuntimeJS && this.getScripts(files),\n optimizeCss && this.getCssLinks(files),\n optimizeCss && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"noscript\", {\n \"data-n-css\": this.props.nonce ?? \"\"\n }),\n this.context.isDevelopment && // this element is used to mount development styles so the\n // ordering matches production\n // (by default, style-loader injects at the bottom of <head />)\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"noscript\", {\n id: \"__next_css__DO_NOT_USE__\"\n }),\n styles || null\n ]\n }),\n /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, {}, ...headTags || [])\n ]\n });\n }\n}\nfunction handleDocumentScriptLoaderItems(scriptLoader, __NEXT_DATA__, props) {\n var _children_find_props, _children_find, _children_find_props1, _children_find1;\n if (!props.children) return;\n const scriptLoaderItems = [];\n const children = Array.isArray(props.children) ? props.children : [\n props.children\n ];\n const headChildren = (_children_find = children.find((child)=>child.type === Head)) == null ? void 0 : (_children_find_props = _children_find.props) == null ? void 0 : _children_find_props.children;\n const bodyChildren = (_children_find1 = children.find((child)=>child.type === \"body\")) == null ? void 0 : (_children_find_props1 = _children_find1.props) == null ? void 0 : _children_find_props1.children;\n // Scripts with beforeInteractive can be placed inside Head or <body> so children of both needs to be traversed\n const combinedChildren = [\n ...Array.isArray(headChildren) ? headChildren : [\n headChildren\n ],\n ...Array.isArray(bodyChildren) ? bodyChildren : [\n bodyChildren\n ]\n ];\n _react.default.Children.forEach(combinedChildren, (child)=>{\n var _child_type;\n if (!child) return;\n // When using the `next/script` component, register it in script loader.\n if ((_child_type = child.type) == null ? void 0 : _child_type.__nextScript) {\n if (child.props.strategy === \"beforeInteractive\") {\n scriptLoader.beforeInteractive = (scriptLoader.beforeInteractive || []).concat([\n {\n ...child.props\n }\n ]);\n return;\n } else if ([\n \"lazyOnload\",\n \"afterInteractive\",\n \"worker\"\n ].includes(child.props.strategy)) {\n scriptLoaderItems.push(child.props);\n return;\n }\n }\n });\n __NEXT_DATA__.scriptLoader = scriptLoaderItems;\n}\nclass NextScript extends _react.default.Component {\n static #_ = this.contextType = _htmlcontextsharedruntime.HtmlContext;\n getDynamicChunks(files) {\n return getDynamicChunks(this.context, this.props, files);\n }\n getPreNextScripts() {\n return getPreNextScripts(this.context, this.props);\n }\n getScripts(files) {\n return getScripts(this.context, this.props, files);\n }\n getPolyfillScripts() {\n return getPolyfillScripts(this.context, this.props);\n }\n static getInlineScriptSource(context) {\n const { __NEXT_DATA__, largePageDataBytes } = context;\n try {\n const data = JSON.stringify(__NEXT_DATA__);\n if (largePageDataWarnings.has(__NEXT_DATA__.page)) {\n return (0, _htmlescape.htmlEscapeJsonString)(data);\n }\n const bytes = false ? 0 : Buffer.from(data).byteLength;\n const prettyBytes = (__webpack_require__(/*! ../lib/pretty-bytes */ \"./node_modules/next/dist/lib/pretty-bytes.js\")[\"default\"]);\n if (largePageDataBytes && bytes > largePageDataBytes) {\n if (false) {}\n console.warn(`Warning: data for page \"${__NEXT_DATA__.page}\"${__NEXT_DATA__.page === context.dangerousAsPath ? \"\" : ` (path \"${context.dangerousAsPath}\")`} is ${prettyBytes(bytes)} which exceeds the threshold of ${prettyBytes(largePageDataBytes)}, this amount of data can reduce performance.\\nSee more info here: https://nextjs.org/docs/messages/large-page-data`);\n }\n return (0, _htmlescape.htmlEscapeJsonString)(data);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.message.indexOf(\"circular structure\") !== -1) {\n throw new Error(`Circular structure in \"getInitialProps\" result of page \"${__NEXT_DATA__.page}\". https://nextjs.org/docs/messages/circular-structure`);\n }\n throw err;\n }\n }\n render() {\n const { assetPrefix, inAmpMode, buildManifest, unstable_runtimeJS, docComponentsRendered, assetQueryString, disableOptimizedLoading, crossOrigin } = this.context;\n const disableRuntimeJS = unstable_runtimeJS === false;\n docComponentsRendered.NextScript = true;\n if ( true && inAmpMode) {\n if (false) {}\n const ampDevFiles = [\n ...buildManifest.devFiles,\n ...buildManifest.polyfillFiles,\n ...buildManifest.ampDevFiles\n ];\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n disableRuntimeJS ? null : /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n id: \"__NEXT_DATA__\",\n type: \"application/json\",\n nonce: this.props.nonce,\n crossOrigin: this.props.crossOrigin || crossOrigin,\n dangerouslySetInnerHTML: {\n __html: NextScript.getInlineScriptSource(this.context)\n },\n \"data-ampdevmode\": true\n }),\n ampDevFiles.map((file)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n src: `${assetPrefix}/_next/${file}${assetQueryString}`,\n nonce: this.props.nonce,\n crossOrigin: this.props.crossOrigin || crossOrigin,\n \"data-ampdevmode\": true\n }, file))\n ]\n });\n }\n if (true) {\n if (this.props.crossOrigin) console.warn(\"Warning: `NextScript` attribute `crossOrigin` is deprecated. https://nextjs.org/docs/messages/doc-crossorigin-deprecated\");\n }\n const files = getDocumentFiles(this.context.buildManifest, this.context.__NEXT_DATA__.page, true && inAmpMode);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n !disableRuntimeJS && buildManifest.devFiles ? buildManifest.devFiles.map((file)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n src: `${assetPrefix}/_next/${encodeURI(file)}${assetQueryString}`,\n nonce: this.props.nonce,\n crossOrigin: this.props.crossOrigin || crossOrigin\n }, file)) : null,\n disableRuntimeJS ? null : /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n id: \"__NEXT_DATA__\",\n type: \"application/json\",\n nonce: this.props.nonce,\n crossOrigin: this.props.crossOrigin || crossOrigin,\n dangerouslySetInnerHTML: {\n __html: NextScript.getInlineScriptSource(this.context)\n }\n }),\n disableOptimizedLoading && !disableRuntimeJS && this.getPolyfillScripts(),\n disableOptimizedLoading && !disableRuntimeJS && this.getPreNextScripts(),\n disableOptimizedLoading && !disableRuntimeJS && this.getDynamicChunks(files),\n disableOptimizedLoading && !disableRuntimeJS && this.getScripts(files)\n ]\n });\n }\n}\nfunction Html(props) {\n const { inAmpMode, docComponentsRendered, locale, scriptLoader, __NEXT_DATA__ } = (0, _htmlcontextsharedruntime.useHtmlContext)();\n docComponentsRendered.Html = true;\n handleDocumentScriptLoaderItems(scriptLoader, __NEXT_DATA__, props);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"html\", {\n ...props,\n lang: props.lang || locale || undefined,\n amp: true && inAmpMode ? \"\" : undefined,\n \"data-ampdevmode\": true && inAmpMode && \"development\" !== \"production\" ? \"\" : undefined\n });\n}\nfunction Main() {\n const { docComponentsRendered } = (0, _htmlcontextsharedruntime.useHtmlContext)();\n docComponentsRendered.Main = true;\n // @ts-ignore\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"next-js-internal-body-render-target\", {});\n}\nclass Document extends _react.default.Component {\n /**\n * `getInitialProps` hook returns the context object with the addition of `renderPage`.\n * `renderPage` callback executes `React` rendering logic synchronously to support server-rendering wrappers\n */ static getInitialProps(ctx) {\n return ctx.defaultGetInitialProps(ctx);\n }\n render() {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(Html, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"body\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Main, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(NextScript, {})\n ]\n })\n ]\n });\n }\n}\n// Add a special property to the built-in `Document` component so later we can\n// identify if a user customized `Document` is used or not.\nconst InternalFunctionDocument = function InternalFunctionDocument() {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(Html, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"body\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Main, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(NextScript, {})\n ]\n })\n ]\n });\n};\nDocument[_constants.NEXT_BUILTIN_DOCUMENT] = InternalFunctionDocument; //# sourceMappingURL=_document.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19kb2N1bWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQU1OO0FBQ0EsU0FBU00sUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVosT0FBT0MsY0FBYyxDQUFDVSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFSLFNBQVM7SUFDYkcsTUFBTTtRQUNGLE9BQU9BO0lBQ1g7SUFDQUMsWUFBWTtRQUNSLE9BQU9BO0lBQ1g7SUFDQUMsTUFBTTtRQUNGLE9BQU9BO0lBQ1g7SUFDQUMsTUFBTTtRQUNGLE9BQU9BO0lBQ1g7SUFDQTs7O0NBR0gsR0FBR0MsU0FBUztRQUNMLE9BQU9PO0lBQ1g7QUFDSjtBQUNBLE1BQU1DLGNBQWNDLG1CQUFPQSxDQUFDLDRDQUFtQjtBQUMvQyxNQUFNQyxTQUFTLFdBQVcsR0FBR0MsMEJBQTBCRixtQkFBT0EsQ0FBQyxvQkFBTztBQUN0RSxNQUFNRyxhQUFhSCxtQkFBT0EsQ0FBQyxpRkFBeUI7QUFDcEQsTUFBTUksZ0JBQWdCSixtQkFBT0EsQ0FBQyxtRkFBMEI7QUFDeEQsTUFBTUssY0FBY0wsbUJBQU9BLENBQUMsMkVBQXNCO0FBQ2xELE1BQU1NLFdBQVcsV0FBVyxHQUFHQyx5QkFBeUJQLG1CQUFPQSxDQUFDLGlFQUFpQjtBQUNqRixNQUFNUSw0QkFBNEJSLG1CQUFPQSxDQUFDLCtJQUEyQztBQUNyRixTQUFTTyx5QkFBeUJFLEdBQUc7SUFDakMsT0FBT0EsT0FBT0EsSUFBSUMsVUFBVSxHQUFHRCxNQUFNO1FBQ2pDbEIsU0FBU2tCO0lBQ2I7QUFDSjtBQUNBLFNBQVNFLHlCQUF5QkMsV0FBVztJQUN6QyxJQUFJLE9BQU9DLFlBQVksWUFBWSxPQUFPO0lBQzFDLElBQUlDLG9CQUFvQixJQUFJRDtJQUM1QixJQUFJRSxtQkFBbUIsSUFBSUY7SUFDM0IsT0FBTyxDQUFDRiwyQkFBMkIsU0FBU0MsV0FBVztRQUNuRCxPQUFPQSxjQUFjRyxtQkFBbUJEO0lBQzVDLEdBQUdGO0FBQ1A7QUFDQSxTQUFTViwwQkFBMEJPLEdBQUcsRUFBRUcsV0FBVztJQUMvQyxJQUFJLENBQUNBLGVBQWVILE9BQU9BLElBQUlDLFVBQVUsRUFBRTtRQUN2QyxPQUFPRDtJQUNYO0lBQ0EsSUFBSUEsUUFBUSxRQUFRLE9BQU9BLFFBQVEsWUFBWSxPQUFPQSxRQUFRLFlBQVk7UUFDdEUsT0FBTztZQUNIbEIsU0FBU2tCO1FBQ2I7SUFDSjtJQUNBLElBQUlPLFFBQVFMLHlCQUF5QkM7SUFDckMsSUFBSUksU0FBU0EsTUFBTUMsR0FBRyxDQUFDUixNQUFNO1FBQ3pCLE9BQU9PLE1BQU1uQixHQUFHLENBQUNZO0lBQ3JCO0lBQ0EsSUFBSVMsU0FBUyxDQUFDO0lBQ2QsSUFBSUMsd0JBQXdCckMsT0FBT0MsY0FBYyxJQUFJRCxPQUFPc0Msd0JBQXdCO0lBQ3BGLElBQUksSUFBSUMsT0FBT1osSUFBSTtRQUNmLElBQUlZLFFBQVEsYUFBYXZDLE9BQU93QyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDZixLQUFLWSxNQUFNO1lBQ3JFLElBQUlJLE9BQU9OLHdCQUF3QnJDLE9BQU9zQyx3QkFBd0IsQ0FBQ1gsS0FBS1ksT0FBTztZQUMvRSxJQUFJSSxRQUFTQSxDQUFBQSxLQUFLNUIsR0FBRyxJQUFJNEIsS0FBS0MsR0FBRyxHQUFHO2dCQUNoQzVDLE9BQU9DLGNBQWMsQ0FBQ21DLFFBQVFHLEtBQUtJO1lBQ3ZDLE9BQU87Z0JBQ0hQLE1BQU0sQ0FBQ0csSUFBSSxHQUFHWixHQUFHLENBQUNZLElBQUk7WUFDMUI7UUFDSjtJQUNKO0lBQ0FILE9BQU8zQixPQUFPLEdBQUdrQjtJQUNqQixJQUFJTyxPQUFPO1FBQ1BBLE1BQU1VLEdBQUcsQ0FBQ2pCLEtBQUtTO0lBQ25CO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLDhFQUE4RSxHQUFHLE1BQU1TLHdCQUF3QixJQUFJQztBQUNuSCxTQUFTQyxpQkFBaUJDLGFBQWEsRUFBRUMsUUFBUSxFQUFFQyxTQUFTO0lBQ3hELE1BQU1DLGNBQWMsQ0FBQyxHQUFHN0IsY0FBYzhCLFlBQVksRUFBRUosZUFBZTtJQUNuRSxNQUFNSyxZQUFZQyxLQUFtQyxJQUFJSixZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUc1QixjQUFjOEIsWUFBWSxFQUFFSixlQUFlQztJQUN6SCxPQUFPO1FBQ0hFO1FBQ0FFO1FBQ0FJLFVBQVU7ZUFDSCxJQUFJWCxJQUFJO21CQUNKSzttQkFDQUU7YUFDTjtTQUNKO0lBQ0w7QUFDSjtBQUNBLFNBQVNLLG1CQUFtQkMsT0FBTyxFQUFFQyxLQUFLO0lBQ3RDLDREQUE0RDtJQUM1RCw2Q0FBNkM7SUFDN0MsTUFBTSxFQUFFQyxXQUFXLEVBQUViLGFBQWEsRUFBRWMsZ0JBQWdCLEVBQUVDLHVCQUF1QixFQUFFQyxXQUFXLEVBQUUsR0FBR0w7SUFDL0YsT0FBT1gsY0FBY2lCLGFBQWEsQ0FBQ0MsTUFBTSxDQUFDLENBQUNDLFdBQVdBLFNBQVNDLFFBQVEsQ0FBQyxVQUFVLENBQUNELFNBQVNDLFFBQVEsQ0FBQyxlQUFlQyxHQUFHLENBQUMsQ0FBQ0YsV0FBeUIsV0FBSCxHQUFJLElBQUdsRCxZQUFZcUQsR0FBRyxFQUFFLFVBQVU7WUFDektDLE9BQU8sQ0FBQ1I7WUFDUlMsT0FBT1osTUFBTVksS0FBSztZQUNsQlIsYUFBYUosTUFBTUksV0FBVyxJQUFJQTtZQUNsQ1MsVUFBVTtZQUNWQyxLQUFLLENBQUMsRUFBRWIsWUFBWSxPQUFPLEVBQUVNLFNBQVMsRUFBRUwsaUJBQWlCLENBQUM7UUFDOUQsR0FBR0s7QUFDWDtBQUNBLFNBQVNRLGtCQUFrQkMsS0FBSztJQUM1QixPQUFPLENBQUMsQ0FBQ0EsU0FBUyxDQUFDLENBQUNBLE1BQU1oQixLQUFLO0FBQ25DO0FBQ0EsU0FBU2lCLFVBQVUsRUFBRUMsTUFBTSxFQUFFO0lBQ3pCLElBQUksQ0FBQ0EsUUFBUSxPQUFPO0lBQ3BCLHlEQUF5RDtJQUN6RCxNQUFNQyxZQUFZQyxNQUFNQyxPQUFPLENBQUNILFVBQVVBLFNBQVMsRUFBRTtJQUNyRCxJQUNBQSxPQUFPbEIsS0FBSyxJQUFJLGtFQUFrRTtJQUNsRm9CLE1BQU1DLE9BQU8sQ0FBQ0gsT0FBT2xCLEtBQUssQ0FBQ3NCLFFBQVEsR0FBRztRQUNsQyxNQUFNQyxZQUFZLENBQUNDO1lBQ2YsSUFBSUMsbUNBQW1DQztZQUN2QyxPQUFPRixNQUFNLE9BQU8sS0FBSyxJQUFJLENBQUNFLFlBQVlGLEdBQUd4QixLQUFLLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQ3lCLG9DQUFvQ0MsVUFBVUMsdUJBQXVCLEtBQUssT0FBTyxLQUFLLElBQUlGLGtDQUFrQ0csTUFBTTtRQUM5TTtRQUNBLGtFQUFrRTtRQUNsRVYsT0FBT2xCLEtBQUssQ0FBQ3NCLFFBQVEsQ0FBQ08sT0FBTyxDQUFDLENBQUNiO1lBQzNCLElBQUlJLE1BQU1DLE9BQU8sQ0FBQ0wsUUFBUTtnQkFDdEJBLE1BQU1hLE9BQU8sQ0FBQyxDQUFDTCxLQUFLRCxVQUFVQyxPQUFPTCxVQUFVVyxJQUFJLENBQUNOO1lBQ3hELE9BQU8sSUFBSUQsVUFBVVAsUUFBUTtnQkFDekJHLFVBQVVXLElBQUksQ0FBQ2Q7WUFDbkI7UUFDSjtJQUNKO0lBQ0EsdUVBQXVFLEdBQUcsT0FBcUIsV0FBSCxHQUFJLElBQUczRCxZQUFZcUQsR0FBRyxFQUFFLFNBQVM7UUFDekgsY0FBYztRQUNkaUIseUJBQXlCO1lBQ3JCQyxRQUFRVCxVQUFVVixHQUFHLENBQUMsQ0FBQ3NCLFFBQVFBLE1BQU0vQixLQUFLLENBQUMyQix1QkFBdUIsQ0FBQ0MsTUFBTSxFQUFFSSxJQUFJLENBQUMsSUFBSUMsT0FBTyxDQUFDLGtDQUFrQyxJQUFJQSxPQUFPLENBQUMsNEJBQTRCO1FBQzFLO0lBQ0o7QUFDSjtBQUNBLFNBQVNDLGlCQUFpQm5DLE9BQU8sRUFBRUMsS0FBSyxFQUFFbUMsS0FBSztJQUMzQyxNQUFNLEVBQUVDLGNBQWMsRUFBRW5DLFdBQVcsRUFBRW9DLGFBQWEsRUFBRW5DLGdCQUFnQixFQUFFQyx1QkFBdUIsRUFBRUMsV0FBVyxFQUFFLEdBQUdMO0lBQy9HLE9BQU9xQyxlQUFlM0IsR0FBRyxDQUFDLENBQUM2QjtRQUN2QixJQUFJLENBQUNBLEtBQUs5QixRQUFRLENBQUMsVUFBVTJCLE1BQU10QyxRQUFRLENBQUMwQyxRQUFRLENBQUNELE9BQU8sT0FBTztRQUNuRSxPQUFxQixXQUFILEdBQUksSUFBR2pGLFlBQVlxRCxHQUFHLEVBQUUsVUFBVTtZQUNoRDhCLE9BQU8sQ0FBQ0gsaUJBQWlCbEM7WUFDekJRLE9BQU8sQ0FBQ1I7WUFDUlcsS0FBSyxDQUFDLEVBQUViLFlBQVksT0FBTyxFQUFFd0MsVUFBVUgsTUFBTSxFQUFFcEMsaUJBQWlCLENBQUM7WUFDakVVLE9BQU9aLE1BQU1ZLEtBQUs7WUFDbEJSLGFBQWFKLE1BQU1JLFdBQVcsSUFBSUE7UUFDdEMsR0FBR2tDO0lBQ1A7QUFDSjtBQUNBLFNBQVNJLFdBQVczQyxPQUFPLEVBQUVDLEtBQUssRUFBRW1DLEtBQUs7SUFDckMsSUFBSVE7SUFDSixNQUFNLEVBQUUxQyxXQUFXLEVBQUViLGFBQWEsRUFBRWlELGFBQWEsRUFBRW5DLGdCQUFnQixFQUFFQyx1QkFBdUIsRUFBRUMsV0FBVyxFQUFFLEdBQUdMO0lBQzlHLE1BQU02QyxnQkFBZ0JULE1BQU10QyxRQUFRLENBQUNTLE1BQU0sQ0FBQyxDQUFDZ0MsT0FBT0EsS0FBSzlCLFFBQVEsQ0FBQztJQUNsRSxNQUFNcUMscUJBQXFCLENBQUNGLGtDQUFrQ3ZELGNBQWMwRCxnQkFBZ0IsS0FBSyxPQUFPLEtBQUssSUFBSUgsZ0NBQWdDckMsTUFBTSxDQUFDLENBQUNnQyxPQUFPQSxLQUFLOUIsUUFBUSxDQUFDO0lBQzlLLE9BQU87V0FDQW9DO1dBQ0FDO0tBQ04sQ0FBQ3BDLEdBQUcsQ0FBQyxDQUFDNkI7UUFDSCxPQUFxQixXQUFILEdBQUksSUFBR2pGLFlBQVlxRCxHQUFHLEVBQUUsVUFBVTtZQUNoREksS0FBSyxDQUFDLEVBQUViLFlBQVksT0FBTyxFQUFFd0MsVUFBVUgsTUFBTSxFQUFFcEMsaUJBQWlCLENBQUM7WUFDakVVLE9BQU9aLE1BQU1ZLEtBQUs7WUFDbEI0QixPQUFPLENBQUNILGlCQUFpQmxDO1lBQ3pCUSxPQUFPLENBQUNSO1lBQ1JDLGFBQWFKLE1BQU1JLFdBQVcsSUFBSUE7UUFDdEMsR0FBR2tDO0lBQ1A7QUFDSjtBQUNBLFNBQVNTLHdCQUF3QmhELE9BQU8sRUFBRUMsS0FBSztJQUMzQyxNQUFNLEVBQUVDLFdBQVcsRUFBRStDLFlBQVksRUFBRTVDLFdBQVcsRUFBRTZDLGlCQUFpQixFQUFFLEdBQUdsRDtJQUN0RSw4Q0FBOEM7SUFDOUMsSUFBSSxDQUFDa0QscUJBQXFCdkQsUUFBd0IsS0FBSyxRQUFRLE9BQU87SUFDdEUsSUFBSTtRQUNBLElBQUksRUFBRXdELGdCQUFnQixFQUFFLEdBQUdDLE9BQXVCQSxDQUFDO1FBQ25ELE1BQU03QixXQUFXRixNQUFNQyxPQUFPLENBQUNyQixNQUFNc0IsUUFBUSxJQUFJdEIsTUFBTXNCLFFBQVEsR0FBRztZQUM5RHRCLE1BQU1zQixRQUFRO1NBQ2pCO1FBQ0QseUVBQXlFO1FBQ3pFLE1BQU04QixvQkFBb0I5QixTQUFTK0IsSUFBSSxDQUFDLENBQUNyQztZQUNyQyxJQUFJc0Msc0NBQXNDQztZQUMxQyxPQUFPeEMsa0JBQWtCQyxVQUFXQSxDQUFBQSxTQUFTLE9BQU8sS0FBSyxJQUFJLENBQUN1QyxlQUFldkMsTUFBTWhCLEtBQUssS0FBSyxPQUFPLEtBQUssSUFBSSxDQUFDc0QsdUNBQXVDQyxhQUFhNUIsdUJBQXVCLEtBQUssT0FBTyxLQUFLLElBQUkyQixxQ0FBcUMxQixNQUFNLENBQUM0QixNQUFNLEtBQUssMkJBQTJCeEMsTUFBTWhCLEtBQUs7UUFDL1M7UUFDQSxPQUFxQixXQUFILEdBQUksSUFBRzNDLFlBQVlvRyxJQUFJLEVBQUVwRyxZQUFZcUcsUUFBUSxFQUFFO1lBQzdEcEMsVUFBVTtnQkFDTixDQUFDOEIscUJBQW1DLFdBQUgsR0FBSSxJQUFHL0YsWUFBWXFELEdBQUcsRUFBRSxVQUFVO29CQUMvRCx5QkFBeUI7b0JBQ3pCaUIseUJBQXlCO3dCQUNyQkMsUUFBUSxDQUFDOztvQkFFYixFQUFFM0IsWUFBWTs7VUFFeEIsQ0FBQztvQkFDUztnQkFDSjtnQkFDQSxXQUFXLEdBQUksSUFBRzVDLFlBQVlxRCxHQUFHLEVBQUUsVUFBVTtvQkFDekMsa0JBQWtCO29CQUNsQmlCLHlCQUF5Qjt3QkFDckJDLFFBQVFzQjtvQkFDWjtnQkFDSjtnQkFDQ0YsQ0FBQUEsYUFBYVcsTUFBTSxJQUFJLEVBQUUsRUFBRWxELEdBQUcsQ0FBQyxDQUFDNkIsTUFBTXNCO29CQUNuQyxNQUFNLEVBQUVDLFFBQVEsRUFBRS9DLEdBQUcsRUFBRVEsVUFBVXdDLGNBQWMsRUFBRW5DLHVCQUF1QixFQUFFLEdBQUdvQyxhQUFhLEdBQUd6QjtvQkFDN0YsSUFBSTBCLFdBQVcsQ0FBQztvQkFDaEIsSUFBSWxELEtBQUs7d0JBQ0wsK0JBQStCO3dCQUMvQmtELFNBQVNsRCxHQUFHLEdBQUdBO29CQUNuQixPQUFPLElBQUlhLDJCQUEyQkEsd0JBQXdCQyxNQUFNLEVBQUU7d0JBQ2xFLCtEQUErRDt3QkFDL0RvQyxTQUFTckMsdUJBQXVCLEdBQUc7NEJBQy9CQyxRQUFRRCx3QkFBd0JDLE1BQU07d0JBQzFDO29CQUNKLE9BQU8sSUFBSWtDLGdCQUFnQjt3QkFDdkIsZ0RBQWdEO3dCQUNoREUsU0FBU3JDLHVCQUF1QixHQUFHOzRCQUMvQkMsUUFBUSxPQUFPa0MsbUJBQW1CLFdBQVdBLGlCQUFpQjFDLE1BQU1DLE9BQU8sQ0FBQ3lDLGtCQUFrQkEsZUFBZTlCLElBQUksQ0FBQyxNQUFNO3dCQUM1SDtvQkFDSixPQUFPO3dCQUNILE1BQU0sSUFBSWlDLE1BQU07b0JBQ3BCO29CQUNBLE9BQXFCLFdBQUgsR0FBSSxJQUFHMUcsT0FBTzJHLGFBQWEsRUFBRSxVQUFVO3dCQUNyRCxHQUFHRixRQUFRO3dCQUNYLEdBQUdELFdBQVc7d0JBQ2RJLE1BQU07d0JBQ054RixLQUFLbUMsT0FBTzhDO3dCQUNaaEQsT0FBT1osTUFBTVksS0FBSzt3QkFDbEIsZ0JBQWdCO3dCQUNoQlIsYUFBYUosTUFBTUksV0FBVyxJQUFJQTtvQkFDdEM7Z0JBQ0o7YUFDSDtRQUNMO0lBQ0osRUFBRSxPQUFPZ0UsS0FBSztRQUNWLElBQUksQ0FBQyxHQUFHeEcsU0FBU2YsT0FBTyxFQUFFdUgsUUFBUUEsSUFBSUMsSUFBSSxLQUFLLG9CQUFvQjtZQUMvREMsUUFBUUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFSCxJQUFJSSxPQUFPLENBQUMsQ0FBQztRQUMxQztRQUNBLE9BQU87SUFDWDtBQUNKO0FBQ0EsU0FBU0Msa0JBQWtCMUUsT0FBTyxFQUFFQyxLQUFLO0lBQ3JDLE1BQU0sRUFBRWdELFlBQVksRUFBRTdDLHVCQUF1QixFQUFFQyxXQUFXLEVBQUUsR0FBR0w7SUFDL0QsTUFBTTJFLG1CQUFtQjNCLHdCQUF3QmhELFNBQVNDO0lBQzFELE1BQU0yRSwyQkFBMkIsQ0FBQzNCLGFBQWE0QixpQkFBaUIsSUFBSSxFQUFFLEVBQUV0RSxNQUFNLENBQUMsQ0FBQ3VFLFNBQVNBLE9BQU8vRCxHQUFHLEVBQUVMLEdBQUcsQ0FBQyxDQUFDNkIsTUFBTXNCO1FBQzVHLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdFLGFBQWEsR0FBR3pCO1FBQ3JDLE9BQXFCLFdBQUgsR0FBSSxJQUFHL0UsT0FBTzJHLGFBQWEsRUFBRSxVQUFVO1lBQ3JELEdBQUdILFdBQVc7WUFDZHBGLEtBQUtvRixZQUFZakQsR0FBRyxJQUFJOEM7WUFDeEJqRCxPQUFPb0QsWUFBWXBELEtBQUssSUFBSSxDQUFDUjtZQUM3QlMsT0FBT1osTUFBTVksS0FBSztZQUNsQixnQkFBZ0I7WUFDaEJSLGFBQWFKLE1BQU1JLFdBQVcsSUFBSUE7UUFDdEM7SUFDSjtJQUNBLE9BQXFCLFdBQUgsR0FBSSxJQUFHL0MsWUFBWW9HLElBQUksRUFBRXBHLFlBQVlxRyxRQUFRLEVBQUU7UUFDN0RwQyxVQUFVO1lBQ05vRDtZQUNBQztTQUNIO0lBQ0w7QUFDSjtBQUNBLFNBQVNHLGlCQUFpQjlFLEtBQUs7SUFDM0IsTUFBTSxFQUFFSSxXQUFXLEVBQUVRLEtBQUssRUFBRSxHQUFHbUUsV0FBVyxHQUFHL0U7SUFDN0Msc0dBQXNHO0lBQ3RHLE1BQU1nRixZQUFZRDtJQUNsQixPQUFPQztBQUNYO0FBQ0EsU0FBU0MsV0FBV0MsT0FBTyxFQUFFQyxNQUFNO0lBQy9CLE9BQU9ELFdBQVcsQ0FBQyxFQUFFQyxPQUFPLEVBQUVBLE9BQU81QyxRQUFRLENBQUMsT0FBTyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ3pFO0FBQ0EsU0FBUzZDLG9CQUFvQkMsZ0JBQWdCLEVBQUVDLGVBQWUsRUFBRXJGLGNBQWMsRUFBRTtJQUM1RSxJQUFJLENBQUNvRixrQkFBa0I7UUFDbkIsT0FBTztZQUNIRSxZQUFZO1lBQ1pDLFNBQVM7UUFDYjtJQUNKO0lBQ0EsTUFBTUMsZ0JBQWdCSixpQkFBaUJLLEtBQUssQ0FBQyxRQUFRO0lBQ3JELE1BQU1DLGlCQUFpQk4saUJBQWlCSyxLQUFLLENBQUNKLGdCQUFnQjtJQUM5RCxNQUFNTSxxQkFBcUI7V0FDcEJILGlCQUFpQixFQUFFO1dBQ25CRSxrQkFBa0IsRUFBRTtLQUMxQjtJQUNELDJGQUEyRjtJQUMzRixNQUFNRSxtQkFBbUIsQ0FBQyxDQUFFRCxDQUFBQSxtQkFBbUJwQyxNQUFNLEtBQUssS0FBTWlDLENBQUFBLGlCQUFpQkUsY0FBYSxDQUFDO0lBQy9GLE9BQU87UUFDSEosWUFBWU0sbUJBQWlDLFdBQUgsR0FBSSxJQUFHeEksWUFBWXFELEdBQUcsRUFBRSxRQUFRO1lBQ3RFLGtCQUFrQjJFLGlCQUFpQlMsb0JBQW9CLEdBQUcsZ0JBQWdCO1lBQzFFQyxLQUFLO1lBQ0xDLE1BQU07WUFDTjVGLGFBQWE7UUFDakIsS0FBSztRQUNMb0YsU0FBU0kscUJBQXFCQSxtQkFBbUJuRixHQUFHLENBQUMsQ0FBQ3dGO1lBQ2xELE1BQU1DLE1BQU0sOEJBQThCQyxJQUFJLENBQUNGLFNBQVMsQ0FBQyxFQUFFO1lBQzNELE9BQXFCLFdBQUgsR0FBSSxJQUFHNUksWUFBWXFELEdBQUcsRUFBRSxRQUFRO2dCQUM5Q3FGLEtBQUs7Z0JBQ0xDLE1BQU0sQ0FBQyxFQUFFL0YsWUFBWSxPQUFPLEVBQUV3QyxVQUFVd0QsVUFBVSxDQUFDO2dCQUNuREcsSUFBSTtnQkFDSmpDLE1BQU0sQ0FBQyxLQUFLLEVBQUUrQixJQUFJLENBQUM7Z0JBQ25COUYsYUFBYTtnQkFDYixrQkFBa0I2RixTQUFTMUQsUUFBUSxDQUFDLFFBQVEsZ0JBQWdCO1lBQ2hFLEdBQUcwRDtRQUNQLEtBQUs7SUFDVDtBQUNKO0FBQ0EsTUFBTXhKLGFBQWFjLE9BQU9WLE9BQU8sQ0FBQ3dKLFNBQVM7SUFDdkMsT0FBTyxDQUFDQyxDQUFDLEdBQUcsSUFBSSxDQUFDQyxXQUFXLEdBQUd6SSwwQkFBMEIwSSxXQUFXLENBQUM7SUFDckVDLFlBQVl0RSxLQUFLLEVBQUU7UUFDZixNQUFNLEVBQUVsQyxXQUFXLEVBQUVDLGdCQUFnQixFQUFFa0MsY0FBYyxFQUFFaEMsV0FBVyxFQUFFc0csV0FBVyxFQUFFQyxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUM1RyxPQUFPO1FBQy9HLE1BQU02RyxXQUFXekUsTUFBTXRDLFFBQVEsQ0FBQ1MsTUFBTSxDQUFDLENBQUN1RyxJQUFJQSxFQUFFckcsUUFBUSxDQUFDO1FBQ3ZELE1BQU1qQixjQUFjLElBQUlMLElBQUlpRCxNQUFNNUMsV0FBVztRQUM3QyxxRUFBcUU7UUFDckUsK0NBQStDO1FBQy9DLElBQUl1SCxnQkFBZ0IsSUFBSTVILElBQUksRUFBRTtRQUM5QixJQUFJNkgsa0JBQWtCM0YsTUFBTTRGLElBQUksQ0FBQyxJQUFJOUgsSUFBSWtELGVBQWU5QixNQUFNLENBQUMsQ0FBQ2dDLE9BQU9BLEtBQUs5QixRQUFRLENBQUM7UUFDckYsSUFBSXVHLGdCQUFnQnZELE1BQU0sRUFBRTtZQUN4QixNQUFNeUQsV0FBVyxJQUFJL0gsSUFBSTBIO1lBQ3pCRyxrQkFBa0JBLGdCQUFnQnpHLE1BQU0sQ0FBQyxDQUFDdUcsSUFBSSxDQUFFSSxDQUFBQSxTQUFTMUksR0FBRyxDQUFDc0ksTUFBTXRILFlBQVloQixHQUFHLENBQUNzSSxFQUFDO1lBQ3BGQyxnQkFBZ0IsSUFBSTVILElBQUk2SDtZQUN4QkgsU0FBUzlFLElBQUksSUFBSWlGO1FBQ3JCO1FBQ0EsSUFBSUcsa0JBQWtCLEVBQUU7UUFDeEJOLFNBQVMvRSxPQUFPLENBQUMsQ0FBQ1M7WUFDZCxNQUFNNkUsZUFBZTVILFlBQVloQixHQUFHLENBQUMrRDtZQUNyQyxJQUFJLENBQUNvRSxhQUFhO2dCQUNkUSxnQkFBZ0JwRixJQUFJLENBQWUsV0FBSCxHQUFJLElBQUd6RSxZQUFZcUQsR0FBRyxFQUFFLFFBQVE7b0JBQzVERSxPQUFPLElBQUksQ0FBQ1osS0FBSyxDQUFDWSxLQUFLO29CQUN2Qm1GLEtBQUs7b0JBQ0xDLE1BQU0sQ0FBQyxFQUFFL0YsWUFBWSxPQUFPLEVBQUV3QyxVQUFVSCxNQUFNLEVBQUVwQyxpQkFBaUIsQ0FBQztvQkFDbEVrRyxJQUFJO29CQUNKaEcsYUFBYSxJQUFJLENBQUNKLEtBQUssQ0FBQ0ksV0FBVyxJQUFJQTtnQkFDM0MsR0FBRyxDQUFDLEVBQUVrQyxLQUFLLFFBQVEsQ0FBQztZQUN4QjtZQUNBLE1BQU04RSxrQkFBa0JOLGNBQWN2SSxHQUFHLENBQUMrRDtZQUMxQzRFLGdCQUFnQnBGLElBQUksQ0FBZSxXQUFILEdBQUksSUFBR3pFLFlBQVlxRCxHQUFHLEVBQUUsUUFBUTtnQkFDNURFLE9BQU8sSUFBSSxDQUFDWixLQUFLLENBQUNZLEtBQUs7Z0JBQ3ZCbUYsS0FBSztnQkFDTEMsTUFBTSxDQUFDLEVBQUUvRixZQUFZLE9BQU8sRUFBRXdDLFVBQVVILE1BQU0sRUFBRXBDLGlCQUFpQixDQUFDO2dCQUNsRUUsYUFBYSxJQUFJLENBQUNKLEtBQUssQ0FBQ0ksV0FBVyxJQUFJQTtnQkFDdkMsWUFBWWdILGtCQUFrQkMsWUFBWUYsZUFBZSxLQUFLRTtnQkFDOUQsWUFBWUQsa0JBQWtCQyxZQUFZRixlQUFlRSxZQUFZO1lBQ3pFLEdBQUcvRTtRQUNQO1FBQ0EsSUFBSTVDLEtBQXVEaUgsRUFBRSxFQUU1RDtRQUNELE9BQU9PLGdCQUFnQjFELE1BQU0sS0FBSyxJQUFJLE9BQU8wRDtJQUNqRDtJQUNBSywwQkFBMEI7UUFDdEIsTUFBTSxFQUFFbkYsY0FBYyxFQUFFbkMsV0FBVyxFQUFFQyxnQkFBZ0IsRUFBRUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDTCxPQUFPO1FBQ25GLE9BQU9xQyxlQUFlM0IsR0FBRyxDQUFDLENBQUM2QjtZQUN2QixJQUFJLENBQUNBLEtBQUs5QixRQUFRLENBQUMsUUFBUTtnQkFDdkIsT0FBTztZQUNYO1lBQ0EsT0FBcUIsV0FBSCxHQUFJLElBQUduRCxZQUFZcUQsR0FBRyxFQUFFLFFBQVE7Z0JBQzlDcUYsS0FBSztnQkFDTEMsTUFBTSxDQUFDLEVBQUUvRixZQUFZLE9BQU8sRUFBRXdDLFVBQVVILE1BQU0sRUFBRXBDLGlCQUFpQixDQUFDO2dCQUNsRWtHLElBQUk7Z0JBQ0p4RixPQUFPLElBQUksQ0FBQ1osS0FBSyxDQUFDWSxLQUFLO2dCQUN2QlIsYUFBYSxJQUFJLENBQUNKLEtBQUssQ0FBQ0ksV0FBVyxJQUFJQTtZQUMzQyxHQUFHa0M7UUFDUCxHQUFFLDRCQUE0QjtTQUM3QmhDLE1BQU0sQ0FBQ2tIO0lBQ1o7SUFDQUMsb0JBQW9CdEYsS0FBSyxFQUFFO1FBQ3ZCLE1BQU0sRUFBRWxDLFdBQVcsRUFBRUMsZ0JBQWdCLEVBQUU4QyxZQUFZLEVBQUU1QyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUNMLE9BQU87UUFDakYsTUFBTTJILGVBQWV2RixNQUFNdEMsUUFBUSxDQUFDUyxNQUFNLENBQUMsQ0FBQ2dDO1lBQ3hDLE9BQU9BLEtBQUs5QixRQUFRLENBQUM7UUFDekI7UUFDQSxPQUFPO2VBQ0EsQ0FBQ3dDLGFBQWE0QixpQkFBaUIsSUFBSSxFQUFFLEVBQUVuRSxHQUFHLENBQUMsQ0FBQzZCLE9BQXFCLFdBQUgsR0FBSSxJQUFHakYsWUFBWXFELEdBQUcsRUFBRSxRQUFRO29CQUN6RkUsT0FBTyxJQUFJLENBQUNaLEtBQUssQ0FBQ1ksS0FBSztvQkFDdkJtRixLQUFLO29CQUNMQyxNQUFNMUQsS0FBS3hCLEdBQUc7b0JBQ2RzRixJQUFJO29CQUNKaEcsYUFBYSxJQUFJLENBQUNKLEtBQUssQ0FBQ0ksV0FBVyxJQUFJQTtnQkFDM0MsR0FBR2tDLEtBQUt4QixHQUFHO2VBQ1o0RyxhQUFhakgsR0FBRyxDQUFDLENBQUM2QixPQUFxQixXQUFILEdBQUksSUFBR2pGLFlBQVlxRCxHQUFHLEVBQUUsUUFBUTtvQkFDL0RFLE9BQU8sSUFBSSxDQUFDWixLQUFLLENBQUNZLEtBQUs7b0JBQ3ZCbUYsS0FBSztvQkFDTEMsTUFBTSxDQUFDLEVBQUUvRixZQUFZLE9BQU8sRUFBRXdDLFVBQVVILE1BQU0sRUFBRXBDLGlCQUFpQixDQUFDO29CQUNsRWtHLElBQUk7b0JBQ0poRyxhQUFhLElBQUksQ0FBQ0osS0FBSyxDQUFDSSxXQUFXLElBQUlBO2dCQUMzQyxHQUFHa0M7U0FDVjtJQUNMO0lBQ0FxRixvQ0FBb0M7UUFDaEMsTUFBTSxFQUFFM0UsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDakQsT0FBTztRQUNyQyxNQUFNLEVBQUVhLEtBQUssRUFBRVIsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDSixLQUFLO1FBQ3pDLE9BQU8sQ0FBQ2dELGFBQWE0QixpQkFBaUIsSUFBSSxFQUFFLEVBQUV0RSxNQUFNLENBQUMsQ0FBQ3VFLFNBQVMsQ0FBQ0EsT0FBTy9ELEdBQUcsSUFBSytELENBQUFBLE9BQU9sRCx1QkFBdUIsSUFBSWtELE9BQU92RCxRQUFRLEdBQUdiLEdBQUcsQ0FBQyxDQUFDNkIsTUFBTXNCO1lBQzFJLE1BQU0sRUFBRUMsUUFBUSxFQUFFdkMsUUFBUSxFQUFFSyx1QkFBdUIsRUFBRWIsR0FBRyxFQUFFLEdBQUdpRCxhQUFhLEdBQUd6QjtZQUM3RSxJQUFJc0YsT0FBTztZQUNYLElBQUlqRywyQkFBMkJBLHdCQUF3QkMsTUFBTSxFQUFFO2dCQUMzRGdHLE9BQU9qRyx3QkFBd0JDLE1BQU07WUFDekMsT0FBTyxJQUFJTixVQUFVO2dCQUNqQnNHLE9BQU8sT0FBT3RHLGFBQWEsV0FBV0EsV0FBV0YsTUFBTUMsT0FBTyxDQUFDQyxZQUFZQSxTQUFTVSxJQUFJLENBQUMsTUFBTTtZQUNuRztZQUNBLE9BQXFCLFdBQUgsR0FBSSxJQUFHekUsT0FBTzJHLGFBQWEsRUFBRSxVQUFVO2dCQUNyRCxHQUFHSCxXQUFXO2dCQUNkcEMseUJBQXlCO29CQUNyQkMsUUFBUWdHO2dCQUNaO2dCQUNBakosS0FBS29GLFlBQVk4RCxFQUFFLElBQUlqRTtnQkFDdkJoRCxPQUFPQTtnQkFDUCxnQkFBZ0I7Z0JBQ2hCUixhQUFhQSxlQUFlVixTQUErQjtZQUMvRDtRQUNKO0lBQ0o7SUFDQXdDLGlCQUFpQkMsS0FBSyxFQUFFO1FBQ3BCLE9BQU9ELGlCQUFpQixJQUFJLENBQUNuQyxPQUFPLEVBQUUsSUFBSSxDQUFDQyxLQUFLLEVBQUVtQztJQUN0RDtJQUNBc0Msb0JBQW9CO1FBQ2hCLE9BQU9BLGtCQUFrQixJQUFJLENBQUMxRSxPQUFPLEVBQUUsSUFBSSxDQUFDQyxLQUFLO0lBQ3JEO0lBQ0EwQyxXQUFXUCxLQUFLLEVBQUU7UUFDZCxPQUFPTyxXQUFXLElBQUksQ0FBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUNDLEtBQUssRUFBRW1DO0lBQ2hEO0lBQ0FyQyxxQkFBcUI7UUFDakIsT0FBT0EsbUJBQW1CLElBQUksQ0FBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQ0MsS0FBSztJQUN0RDtJQUNBc0gsb0JBQW9CUyxJQUFJLEVBQUU7UUFDdEIsT0FBT3hLLE9BQU9WLE9BQU8sQ0FBQ21MLFFBQVEsQ0FBQ3ZILEdBQUcsQ0FBQ3NILE1BQU0sQ0FBQ0U7WUFDdEMsSUFBSUMsVUFBVUM7WUFDZCxJQUFJLENBQUNGLEtBQUssT0FBTyxLQUFLLElBQUlBLEVBQUU5RCxJQUFJLE1BQU0sVUFBVzhELENBQUFBLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQ0MsV0FBV0QsRUFBRWpJLEtBQUssS0FBSyxPQUFPLEtBQUssSUFBSWtJLFNBQVNsQyxJQUFJLEtBQUt2SSxXQUFXMkssd0JBQXdCLENBQUNDLElBQUksQ0FBQyxDQUFDLEVBQUVDLEdBQUcsRUFBRTtnQkFDN0ssSUFBSUMsZUFBZUw7Z0JBQ25CLE9BQU9ELEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQ0MsV0FBV0QsRUFBRWpJLEtBQUssS0FBSyxPQUFPLEtBQUssSUFBSSxDQUFDdUksZ0JBQWdCTCxTQUFTbEMsSUFBSSxLQUFLLE9BQU8sS0FBSyxJQUFJdUMsY0FBY0MsVUFBVSxDQUFDRjtZQUNwSixJQUFJO2dCQUNBLE1BQU1HLFdBQVc7b0JBQ2IsR0FBR1IsRUFBRWpJLEtBQUssSUFBSSxDQUFDLENBQUM7b0JBQ2hCLGFBQWFpSSxFQUFFakksS0FBSyxDQUFDZ0csSUFBSTtvQkFDekJBLE1BQU1xQjtnQkFDVjtnQkFDQSxPQUFPLFdBQVcsR0FBRzlKLE9BQU9WLE9BQU8sQ0FBQzZMLFlBQVksQ0FBQ1QsR0FBR1E7WUFDeEQsT0FBTyxJQUFJUixLQUFLLE9BQU8sS0FBSyxJQUFJLENBQUNFLFlBQVlGLEVBQUVqSSxLQUFLLEtBQUssT0FBTyxLQUFLLElBQUltSSxVQUFVN0csUUFBUSxFQUFFO2dCQUN6RixNQUFNbUgsV0FBVztvQkFDYixHQUFHUixFQUFFakksS0FBSyxJQUFJLENBQUMsQ0FBQztvQkFDaEJzQixVQUFVLElBQUksQ0FBQ2dHLG1CQUFtQixDQUFDVyxFQUFFakksS0FBSyxDQUFDc0IsUUFBUTtnQkFDdkQ7Z0JBQ0EsT0FBTyxXQUFXLEdBQUcvRCxPQUFPVixPQUFPLENBQUM2TCxZQUFZLENBQUNULEdBQUdRO1lBQ3hEO1lBQ0EsT0FBT1I7UUFDWCx3RkFBd0Y7UUFDeEYsR0FBRzNILE1BQU0sQ0FBQ2tIO0lBQ2Q7SUFDQW1CLFNBQVM7UUFDTCxNQUFNLEVBQUV6SCxNQUFNLEVBQUVnRSxPQUFPLEVBQUU1RixTQUFTLEVBQUVzSixTQUFTLEVBQUVDLGFBQWEsRUFBRUMsYUFBYSxFQUFFeEQsZUFBZSxFQUFFeUQsUUFBUSxFQUFFQyxrQkFBa0IsRUFBRUMsa0JBQWtCLEVBQUU5SSx1QkFBdUIsRUFBRXVHLFdBQVcsRUFBRUMsYUFBYSxFQUFFMUcsV0FBVyxFQUFFb0YsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLENBQUN0RixPQUFPO1FBQ25QLE1BQU1tSixtQkFBbUJGLHVCQUF1QjtRQUNoRCxNQUFNRyxtQkFBbUJGLHVCQUF1QixTQUFTLENBQUM5STtRQUMxRCxJQUFJLENBQUNKLE9BQU8sQ0FBQ3FKLHFCQUFxQixDQUFDM00sSUFBSSxHQUFHO1FBQzFDLElBQUksRUFBRTRNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQ3RKLE9BQU87UUFDM0IsSUFBSXVKLGNBQWMsRUFBRTtRQUNwQixJQUFJQyxvQkFBb0IsRUFBRTtRQUMxQixJQUFJRixNQUFNO1lBQ05BLEtBQUt4SCxPQUFPLENBQUMsQ0FBQ29HO2dCQUNWLElBQUl1QjtnQkFDSixJQUFJLElBQUksQ0FBQ3pKLE9BQU8sQ0FBQzBKLGNBQWMsRUFBRTtvQkFDN0JELFVBQVUsV0FBVyxHQUFHak0sT0FBT1YsT0FBTyxDQUFDcUgsYUFBYSxDQUFDLFFBQVE7d0JBQ3pEakgsTUFBTTt3QkFDTnlNLFNBQVM7b0JBQ2I7Z0JBQ0o7Z0JBQ0EsSUFBSXpCLEtBQUtBLEVBQUU5RCxJQUFJLEtBQUssVUFBVThELEVBQUVqSSxLQUFLLENBQUMsTUFBTSxLQUFLLGFBQWFpSSxFQUFFakksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTO29CQUNyRndKLFdBQVdGLFlBQVl4SCxJQUFJLENBQUMwSDtvQkFDNUJGLFlBQVl4SCxJQUFJLENBQUNtRztnQkFDckIsT0FBTztvQkFDSCxJQUFJQSxHQUFHO3dCQUNILElBQUl1QixXQUFZdkIsQ0FBQUEsRUFBRTlELElBQUksS0FBSyxVQUFVLENBQUM4RCxFQUFFakksS0FBSyxDQUFDLFVBQVUsR0FBRzs0QkFDdkR1SixrQkFBa0J6SCxJQUFJLENBQUMwSDt3QkFDM0I7d0JBQ0FELGtCQUFrQnpILElBQUksQ0FBQ21HO29CQUMzQjtnQkFDSjtZQUNKO1lBQ0FvQixPQUFPQyxZQUFZSyxNQUFNLENBQUNKO1FBQzlCO1FBQ0EsSUFBSWpJLFdBQVcvRCxPQUFPVixPQUFPLENBQUNtTCxRQUFRLENBQUM0QixPQUFPLENBQUMsSUFBSSxDQUFDNUosS0FBSyxDQUFDc0IsUUFBUSxFQUFFaEIsTUFBTSxDQUFDa0g7UUFDM0UsZ0VBQWdFO1FBQ2hFLElBQUk5SCxJQUFxQyxFQUFFO1lBQ3ZDNEIsV0FBVy9ELE9BQU9WLE9BQU8sQ0FBQ21MLFFBQVEsQ0FBQ3ZILEdBQUcsQ0FBQ2EsVUFBVSxDQUFDTjtnQkFDOUMsSUFBSXVDO2dCQUNKLE1BQU1zRyxnQkFBZ0I3SSxTQUFTLE9BQU8sS0FBSyxJQUFJLENBQUN1QyxlQUFldkMsTUFBTWhCLEtBQUssS0FBSyxPQUFPLEtBQUssSUFBSXVELFlBQVksQ0FBQyxvQkFBb0I7Z0JBQ2hJLElBQUksQ0FBQ3NHLGVBQWU7b0JBQ2hCLElBQUlDO29CQUNKLElBQUksQ0FBQzlJLFNBQVMsT0FBTyxLQUFLLElBQUlBLE1BQU1tRCxJQUFJLE1BQU0sU0FBUzt3QkFDbkRHLFFBQVFDLElBQUksQ0FBQztvQkFDakIsT0FBTyxJQUFJLENBQUN2RCxTQUFTLE9BQU8sS0FBSyxJQUFJQSxNQUFNbUQsSUFBSSxNQUFNLFVBQVUsQ0FBQ25ELFNBQVMsT0FBTyxLQUFLLElBQUksQ0FBQzhJLGdCQUFnQjlJLE1BQU1oQixLQUFLLEtBQUssT0FBTyxLQUFLLElBQUk4SixjQUFjN00sSUFBSSxNQUFNLFlBQVk7d0JBQzFLcUgsUUFBUUMsSUFBSSxDQUFDO29CQUNqQjtnQkFDSjtnQkFDQSxPQUFPdkQ7WUFDWCx3RkFBd0Y7WUFDeEY7WUFDQSxJQUFJLElBQUksQ0FBQ2hCLEtBQUssQ0FBQ0ksV0FBVyxFQUFFa0UsUUFBUUMsSUFBSSxDQUFDO1FBQzdDO1FBQ0EsSUFBSTdFLEtBQTRHLEVBQUksRUFFbkg7UUFDRCxJQUFJcUssZ0JBQWdCO1FBQ3BCLElBQUlDLGtCQUFrQjtRQUN0QixvREFBb0Q7UUFDcERYLE9BQU85TCxPQUFPVixPQUFPLENBQUNtTCxRQUFRLENBQUN2SCxHQUFHLENBQUM0SSxRQUFRLEVBQUUsRUFBRSxDQUFDckk7WUFDNUMsSUFBSSxDQUFDQSxPQUFPLE9BQU9BO1lBQ25CLE1BQU0sRUFBRW1ELElBQUksRUFBRW5FLEtBQUssRUFBRSxHQUFHZ0I7WUFDeEIsSUFBSXRCLEtBQW1DLElBQUlKLFdBQVc7Z0JBQ2xELElBQUkySyxVQUFVO2dCQUNkLElBQUk5RixTQUFTLFVBQVVuRSxNQUFNL0MsSUFBSSxLQUFLLFlBQVk7b0JBQzlDZ04sVUFBVTtnQkFDZCxPQUFPLElBQUk5RixTQUFTLFVBQVVuRSxNQUFNK0YsR0FBRyxLQUFLLGFBQWE7b0JBQ3JEaUUsa0JBQWtCO2dCQUN0QixPQUFPLElBQUk3RixTQUFTLFVBQVU7b0JBQzFCLGdCQUFnQjtvQkFDaEIseURBQXlEO29CQUN6RCwyREFBMkQ7b0JBQzNELDRCQUE0QjtvQkFDNUIsSUFBSW5FLE1BQU1jLEdBQUcsSUFBSWQsTUFBTWMsR0FBRyxDQUFDb0osT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUtsSyxNQUFNMkIsdUJBQXVCLElBQUssRUFBQzNCLE1BQU1tRSxJQUFJLElBQUluRSxNQUFNbUUsSUFBSSxLQUFLLGlCQUFnQixHQUFJO3dCQUN6SThGLFVBQVU7d0JBQ1Y3TixPQUFPK04sSUFBSSxDQUFDbkssT0FBTzZCLE9BQU8sQ0FBQyxDQUFDdUk7NEJBQ3hCSCxXQUFXLENBQUMsQ0FBQyxFQUFFRyxLQUFLLEVBQUUsRUFBRXBLLEtBQUssQ0FBQ29LLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQzFDO3dCQUNBSCxXQUFXO29CQUNmO2dCQUNKO2dCQUNBLElBQUlBLFNBQVM7b0JBQ1QzRixRQUFRQyxJQUFJLENBQUMsQ0FBQywyQkFBMkIsRUFBRXZELE1BQU1tRCxJQUFJLENBQUMsd0JBQXdCLEVBQUU4RixRQUFRLElBQUksRUFBRW5CLGNBQWN1QixJQUFJLENBQUMsc0RBQXNELENBQUM7b0JBQ3hLLE9BQU87Z0JBQ1g7WUFDSixPQUFPO2dCQUNILGVBQWU7Z0JBQ2YsSUFBSWxHLFNBQVMsVUFBVW5FLE1BQU0rRixHQUFHLEtBQUssV0FBVztvQkFDNUNnRSxnQkFBZ0I7Z0JBQ3BCO1lBQ0o7WUFDQSxPQUFPL0k7UUFDWCx3RkFBd0Y7UUFDeEY7UUFDQSxNQUFNbUIsUUFBUWhELGlCQUFpQixJQUFJLENBQUNZLE9BQU8sQ0FBQ1gsYUFBYSxFQUFFLElBQUksQ0FBQ1csT0FBTyxDQUFDK0ksYUFBYSxDQUFDdUIsSUFBSSxFQUFFM0ssS0FBbUMsSUFBSUo7UUFDbkksTUFBTWdMLG1CQUFtQmxGLG9CQUFvQkMsa0JBQWtCQyxpQkFBaUJyRjtRQUNoRixPQUFxQixXQUFILEdBQUksSUFBRzVDLFlBQVlvRyxJQUFJLEVBQUUsUUFBUTtZQUMvQyxHQUFHcUIsaUJBQWlCLElBQUksQ0FBQzlFLEtBQUssQ0FBQztZQUMvQnNCLFVBQVU7Z0JBQ04sSUFBSSxDQUFDdkIsT0FBTyxDQUFDc0MsYUFBYSxJQUFrQixXQUFILEdBQUksSUFBR2hGLFlBQVlvRyxJQUFJLEVBQUVwRyxZQUFZcUcsUUFBUSxFQUFFO29CQUNwRnBDLFVBQVU7d0JBQ04sV0FBVyxHQUFJLElBQUdqRSxZQUFZcUQsR0FBRyxFQUFFLFNBQVM7NEJBQ3hDLHVCQUF1Qjs0QkFDdkIsbUJBQW1CaEIsS0FBbUMsSUFBSUosWUFBWSxTQUFTK0g7NEJBQy9FMUYseUJBQXlCO2dDQUNyQkMsUUFBUSxDQUFDLGtCQUFrQixDQUFDOzRCQUNoQzt3QkFDSjt3QkFDQSxXQUFXLEdBQUksSUFBR3ZFLFlBQVlxRCxHQUFHLEVBQUUsWUFBWTs0QkFDM0MsdUJBQXVCOzRCQUN2QixtQkFBbUJoQixLQUFtQyxJQUFJSixZQUFZLFNBQVMrSDs0QkFDL0UvRixVQUF3QixXQUFILEdBQUksSUFBR2pFLFlBQVlxRCxHQUFHLEVBQUUsU0FBUztnQ0FDbERpQix5QkFBeUI7b0NBQ3JCQyxRQUFRLENBQUMsbUJBQW1CLENBQUM7Z0NBQ2pDOzRCQUNKO3dCQUNKO3FCQUNIO2dCQUNMO2dCQUNBeUg7Z0JBQ0EsSUFBSSxDQUFDdEosT0FBTyxDQUFDMEosY0FBYyxHQUFHLE9BQXFCLFdBQUgsR0FBSSxJQUFHcE0sWUFBWXFELEdBQUcsRUFBRSxRQUFRO29CQUM1RXpELE1BQU07b0JBQ055TSxTQUFTbk0sT0FBT1YsT0FBTyxDQUFDbUwsUUFBUSxDQUFDdUMsS0FBSyxDQUFDbEIsUUFBUSxFQUFFLEVBQUVtQixRQUFRO2dCQUMvRDtnQkFDQWxKO2dCQUNBcUYsaUJBQStCLFdBQUgsR0FBSSxJQUFHdEosWUFBWXFELEdBQUcsRUFBRSxRQUFRO29CQUN4RHpELE1BQU07Z0JBQ1Y7Z0JBQ0FxTixpQkFBaUIvRSxVQUFVO2dCQUMzQitFLGlCQUFpQjlFLE9BQU87Z0JBQ3hCOUYsS0FBbUMsSUFBSUosYUFBMkIsV0FBSCxHQUFJLElBQUdqQyxZQUFZb0csSUFBSSxFQUFFcEcsWUFBWXFHLFFBQVEsRUFBRTtvQkFDMUdwQyxVQUFVO3dCQUNOLFdBQVcsR0FBSSxJQUFHakUsWUFBWXFELEdBQUcsRUFBRSxRQUFROzRCQUN2Q3pELE1BQU07NEJBQ055TSxTQUFTO3dCQUNiO3dCQUNBLENBQUNNLG1CQUFpQyxXQUFILEdBQUksSUFBRzNNLFlBQVlxRCxHQUFHLEVBQUUsUUFBUTs0QkFDM0RxRixLQUFLOzRCQUNMQyxNQUFNNkMsZ0JBQWdCdkwscUdBQXVDLENBQUNnSTt3QkFDbEU7d0JBQ0EsV0FBVyxHQUFJLElBQUdqSSxZQUFZcUQsR0FBRyxFQUFFLFFBQVE7NEJBQ3ZDcUYsS0FBSzs0QkFDTEssSUFBSTs0QkFDSkosTUFBTTt3QkFDVjt3QkFDQSxXQUFXLEdBQUksSUFBRzNJLFlBQVlxRCxHQUFHLEVBQUVPLFdBQVc7NEJBQzFDQyxRQUFRQTt3QkFDWjt3QkFDQSxXQUFXLEdBQUksSUFBRzdELFlBQVlxRCxHQUFHLEVBQUUsU0FBUzs0QkFDeEMsbUJBQW1COzRCQUNuQmlCLHlCQUF5QjtnQ0FDckJDLFFBQVEsQ0FBQyxzbEJBQXNsQixDQUFDOzRCQUNwbUI7d0JBQ0o7d0JBQ0EsV0FBVyxHQUFJLElBQUd2RSxZQUFZcUQsR0FBRyxFQUFFLFlBQVk7NEJBQzNDWSxVQUF3QixXQUFILEdBQUksSUFBR2pFLFlBQVlxRCxHQUFHLEVBQUUsU0FBUztnQ0FDbEQsbUJBQW1CO2dDQUNuQmlCLHlCQUF5QjtvQ0FDckJDLFFBQVEsQ0FBQyxrRkFBa0YsQ0FBQztnQ0FDaEc7NEJBQ0o7d0JBQ0o7d0JBQ0EsV0FBVyxHQUFJLElBQUd2RSxZQUFZcUQsR0FBRyxFQUFFLFVBQVU7NEJBQ3pDOEIsT0FBTzs0QkFDUDFCLEtBQUs7d0JBQ1Q7cUJBQ0g7Z0JBQ0w7Z0JBQ0EsQ0FBRXBCLENBQUFBLEtBQW1DLElBQUlKLFNBQVEsS0FBb0IsV0FBSCxHQUFJLElBQUdqQyxZQUFZb0csSUFBSSxFQUFFcEcsWUFBWXFHLFFBQVEsRUFBRTtvQkFDN0dwQyxVQUFVO3dCQUNOLENBQUN5SSxpQkFBaUJuQixhQUEyQixXQUFILEdBQUksSUFBR3ZMLFlBQVlxRCxHQUFHLEVBQUUsUUFBUTs0QkFDdEVxRixLQUFLOzRCQUNMQyxNQUFNNkMsZ0JBQWdCNUQsV0FBV0MsU0FBU0k7d0JBQzlDO3dCQUNBLElBQUksQ0FBQ3FDLGlDQUFpQzt3QkFDdEMsQ0FBQ2pCLGVBQWUsSUFBSSxDQUFDRCxXQUFXLENBQUN0RTt3QkFDakMsQ0FBQ3VFLGVBQTZCLFdBQUgsR0FBSSxJQUFHckosWUFBWXFELEdBQUcsRUFBRSxZQUFZOzRCQUMzRCxjQUFjLElBQUksQ0FBQ1YsS0FBSyxDQUFDWSxLQUFLLElBQUk7d0JBQ3RDO3dCQUNBLENBQUNzSSxvQkFBb0IsQ0FBQ0Msb0JBQW9CLElBQUksQ0FBQzVCLHVCQUF1Qjt3QkFDdEUsQ0FBQzJCLG9CQUFvQixDQUFDQyxvQkFBb0IsSUFBSSxDQUFDMUIsbUJBQW1CLENBQUN0Rjt3QkFDbkUsQ0FBQ2hDLDJCQUEyQixDQUFDK0ksb0JBQW9CLElBQUksQ0FBQ3BKLGtCQUFrQjt3QkFDeEUsQ0FBQ0ssMkJBQTJCLENBQUMrSSxvQkFBb0IsSUFBSSxDQUFDekUsaUJBQWlCO3dCQUN2RSxDQUFDdEUsMkJBQTJCLENBQUMrSSxvQkFBb0IsSUFBSSxDQUFDaEgsZ0JBQWdCLENBQUNDO3dCQUN2RSxDQUFDaEMsMkJBQTJCLENBQUMrSSxvQkFBb0IsSUFBSSxDQUFDeEcsVUFBVSxDQUFDUDt3QkFDakV1RSxlQUFlLElBQUksQ0FBQ0QsV0FBVyxDQUFDdEU7d0JBQ2hDdUUsZUFBNkIsV0FBSCxHQUFJLElBQUdySixZQUFZcUQsR0FBRyxFQUFFLFlBQVk7NEJBQzFELGNBQWMsSUFBSSxDQUFDVixLQUFLLENBQUNZLEtBQUssSUFBSTt3QkFDdEM7d0JBQ0EsSUFBSSxDQUFDYixPQUFPLENBQUNzQyxhQUFhLElBR1osMERBSDBFO3dCQUN4Riw4QkFBOEI7d0JBQzlCLCtEQUErRDt3QkFDL0QsV0FBVyxHQUFJLElBQUdoRixZQUFZcUQsR0FBRyxFQUFFLFlBQVk7NEJBQzNDbUgsSUFBSTt3QkFDUjt3QkFDQTNHLFVBQVU7cUJBQ2I7Z0JBQ0w7Z0JBQ0EsV0FBVyxHQUFHM0QsT0FBT1YsT0FBTyxDQUFDcUgsYUFBYSxDQUFDM0csT0FBT1YsT0FBTyxDQUFDNkcsUUFBUSxFQUFFLENBQUMsTUFBTXFGLFlBQVksRUFBRTthQUM1RjtRQUNMO0lBQ0o7QUFDSjtBQUNBLFNBQVMyQixnQ0FBZ0MxSCxZQUFZLEVBQUU4RixhQUFhLEVBQUU5SSxLQUFLO0lBQ3ZFLElBQUkySyxzQkFBc0JDLGdCQUFnQkMsdUJBQXVCQztJQUNqRSxJQUFJLENBQUM5SyxNQUFNc0IsUUFBUSxFQUFFO0lBQ3JCLE1BQU15SixvQkFBb0IsRUFBRTtJQUM1QixNQUFNekosV0FBV0YsTUFBTUMsT0FBTyxDQUFDckIsTUFBTXNCLFFBQVEsSUFBSXRCLE1BQU1zQixRQUFRLEdBQUc7UUFDOUR0QixNQUFNc0IsUUFBUTtLQUNqQjtJQUNELE1BQU0wSixlQUFlLENBQUNKLGlCQUFpQnRKLFNBQVMrQixJQUFJLENBQUMsQ0FBQ3JDLFFBQVFBLE1BQU1tRCxJQUFJLEtBQUsxSCxLQUFJLEtBQU0sT0FBTyxLQUFLLElBQUksQ0FBQ2tPLHVCQUF1QkMsZUFBZTVLLEtBQUssS0FBSyxPQUFPLEtBQUssSUFBSTJLLHFCQUFxQnJKLFFBQVE7SUFDck0sTUFBTTJKLGVBQWUsQ0FBQ0gsa0JBQWtCeEosU0FBUytCLElBQUksQ0FBQyxDQUFDckMsUUFBUUEsTUFBTW1ELElBQUksS0FBSyxPQUFNLEtBQU0sT0FBTyxLQUFLLElBQUksQ0FBQzBHLHdCQUF3QkMsZ0JBQWdCOUssS0FBSyxLQUFLLE9BQU8sS0FBSyxJQUFJNkssc0JBQXNCdkosUUFBUTtJQUMzTSwrR0FBK0c7SUFDL0csTUFBTTRKLG1CQUFtQjtXQUNsQjlKLE1BQU1DLE9BQU8sQ0FBQzJKLGdCQUFnQkEsZUFBZTtZQUM1Q0E7U0FDSDtXQUNFNUosTUFBTUMsT0FBTyxDQUFDNEosZ0JBQWdCQSxlQUFlO1lBQzVDQTtTQUNIO0tBQ0o7SUFDRDFOLE9BQU9WLE9BQU8sQ0FBQ21MLFFBQVEsQ0FBQ25HLE9BQU8sQ0FBQ3FKLGtCQUFrQixDQUFDbEs7UUFDL0MsSUFBSW1LO1FBQ0osSUFBSSxDQUFDbkssT0FBTztRQUNaLHdFQUF3RTtRQUN4RSxJQUFJLENBQUNtSyxjQUFjbkssTUFBTW1ELElBQUksS0FBSyxPQUFPLEtBQUssSUFBSWdILFlBQVlDLFlBQVksRUFBRTtZQUN4RSxJQUFJcEssTUFBTWhCLEtBQUssQ0FBQzZELFFBQVEsS0FBSyxxQkFBcUI7Z0JBQzlDYixhQUFhNEIsaUJBQWlCLEdBQUcsQ0FBQzVCLGFBQWE0QixpQkFBaUIsSUFBSSxFQUFFLEVBQUUrRSxNQUFNLENBQUM7b0JBQzNFO3dCQUNJLEdBQUczSSxNQUFNaEIsS0FBSztvQkFDbEI7aUJBQ0g7Z0JBQ0Q7WUFDSixPQUFPLElBQUk7Z0JBQ1A7Z0JBQ0E7Z0JBQ0E7YUFDSCxDQUFDdUMsUUFBUSxDQUFDdkIsTUFBTWhCLEtBQUssQ0FBQzZELFFBQVEsR0FBRztnQkFDOUJrSCxrQkFBa0JqSixJQUFJLENBQUNkLE1BQU1oQixLQUFLO2dCQUNsQztZQUNKO1FBQ0o7SUFDSjtJQUNBOEksY0FBYzlGLFlBQVksR0FBRytIO0FBQ2pDO0FBQ0EsTUFBTXJPLG1CQUFtQmEsT0FBT1YsT0FBTyxDQUFDd0osU0FBUztJQUM3QyxPQUFPLENBQUNDLENBQUMsR0FBRyxJQUFJLENBQUNDLFdBQVcsR0FBR3pJLDBCQUEwQjBJLFdBQVcsQ0FBQztJQUNyRXRFLGlCQUFpQkMsS0FBSyxFQUFFO1FBQ3BCLE9BQU9ELGlCQUFpQixJQUFJLENBQUNuQyxPQUFPLEVBQUUsSUFBSSxDQUFDQyxLQUFLLEVBQUVtQztJQUN0RDtJQUNBc0Msb0JBQW9CO1FBQ2hCLE9BQU9BLGtCQUFrQixJQUFJLENBQUMxRSxPQUFPLEVBQUUsSUFBSSxDQUFDQyxLQUFLO0lBQ3JEO0lBQ0EwQyxXQUFXUCxLQUFLLEVBQUU7UUFDZCxPQUFPTyxXQUFXLElBQUksQ0FBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUNDLEtBQUssRUFBRW1DO0lBQ2hEO0lBQ0FyQyxxQkFBcUI7UUFDakIsT0FBT0EsbUJBQW1CLElBQUksQ0FBQ0MsT0FBTyxFQUFFLElBQUksQ0FBQ0MsS0FBSztJQUN0RDtJQUNBLE9BQU9xTCxzQkFBc0J0TCxPQUFPLEVBQUU7UUFDbEMsTUFBTSxFQUFFK0ksYUFBYSxFQUFFd0Msa0JBQWtCLEVBQUUsR0FBR3ZMO1FBQzlDLElBQUk7WUFDQSxNQUFNd0wsT0FBT0MsS0FBS0MsU0FBUyxDQUFDM0M7WUFDNUIsSUFBSTdKLHNCQUFzQlYsR0FBRyxDQUFDdUssY0FBY3VCLElBQUksR0FBRztnQkFDL0MsT0FBTyxDQUFDLEdBQUcxTSxZQUFZK04sb0JBQW9CLEVBQUVIO1lBQ2pEO1lBQ0EsTUFBTUksUUFBUWpNLE1BQW1DLEdBQUcsQ0FBZ0QsR0FBR3NNLE9BQU9oRixJQUFJLENBQUN1RSxNQUFNUSxVQUFVO1lBQ25JLE1BQU1FLGNBQWMzTywyR0FBc0M7WUFDMUQsSUFBSWdPLHNCQUFzQkssUUFBUUwsb0JBQW9CO2dCQUNsRCxJQUFJNUwsS0FBcUMsRUFBRSxFQUUxQztnQkFDRDRFLFFBQVFDLElBQUksQ0FBQyxDQUFDLHdCQUF3QixFQUFFdUUsY0FBY3VCLElBQUksQ0FBQyxDQUFDLEVBQUV2QixjQUFjdUIsSUFBSSxLQUFLdEssUUFBUXVGLGVBQWUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFdkYsUUFBUXVGLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUyRyxZQUFZTixPQUFPLGdDQUFnQyxFQUFFTSxZQUFZWCxvQkFBb0IsbUhBQW1ILENBQUM7WUFDOVc7WUFDQSxPQUFPLENBQUMsR0FBRzNOLFlBQVkrTixvQkFBb0IsRUFBRUg7UUFDakQsRUFBRSxPQUFPbkgsS0FBSztZQUNWLElBQUksQ0FBQyxHQUFHeEcsU0FBU2YsT0FBTyxFQUFFdUgsUUFBUUEsSUFBSUksT0FBTyxDQUFDMEYsT0FBTyxDQUFDLDBCQUEwQixDQUFDLEdBQUc7Z0JBQ2hGLE1BQU0sSUFBSWpHLE1BQU0sQ0FBQyx3REFBd0QsRUFBRTZFLGNBQWN1QixJQUFJLENBQUMsc0RBQXNELENBQUM7WUFDeko7WUFDQSxNQUFNakc7UUFDVjtJQUNKO0lBQ0F1RSxTQUFTO1FBQ0wsTUFBTSxFQUFFMUksV0FBVyxFQUFFWCxTQUFTLEVBQUVGLGFBQWEsRUFBRTRKLGtCQUFrQixFQUFFSSxxQkFBcUIsRUFBRWxKLGdCQUFnQixFQUFFQyx1QkFBdUIsRUFBRUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDTCxPQUFPO1FBQ2pLLE1BQU1tSixtQkFBbUJGLHVCQUF1QjtRQUNoREksc0JBQXNCMU0sVUFBVSxHQUFHO1FBQ25DLElBQUlnRCxLQUFtQyxJQUFJSixXQUFXO1lBQ2xELElBQUlJLEtBQXFDLEVBQUUsRUFFMUM7WUFDRCxNQUFNeU0sY0FBYzttQkFDYi9NLGNBQWNnTixRQUFRO21CQUN0QmhOLGNBQWNpQixhQUFhO21CQUMzQmpCLGNBQWMrTSxXQUFXO2FBQy9CO1lBQ0QsT0FBcUIsV0FBSCxHQUFJLElBQUc5TyxZQUFZb0csSUFBSSxFQUFFcEcsWUFBWXFHLFFBQVEsRUFBRTtnQkFDN0RwQyxVQUFVO29CQUNONEgsbUJBQW1CLE9BQXFCLFdBQUgsR0FBSSxJQUFHN0wsWUFBWXFELEdBQUcsRUFBRSxVQUFVO3dCQUNuRW1ILElBQUk7d0JBQ0oxRCxNQUFNO3dCQUNOdkQsT0FBTyxJQUFJLENBQUNaLEtBQUssQ0FBQ1ksS0FBSzt3QkFDdkJSLGFBQWEsSUFBSSxDQUFDSixLQUFLLENBQUNJLFdBQVcsSUFBSUE7d0JBQ3ZDdUIseUJBQXlCOzRCQUNyQkMsUUFBUWxGLFdBQVcyTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUN0TCxPQUFPO3dCQUN6RDt3QkFDQSxtQkFBbUI7b0JBQ3ZCO29CQUNBb00sWUFBWTFMLEdBQUcsQ0FBQyxDQUFDNkIsT0FBcUIsV0FBSCxHQUFJLElBQUdqRixZQUFZcUQsR0FBRyxFQUFFLFVBQVU7NEJBQzdESSxLQUFLLENBQUMsRUFBRWIsWUFBWSxPQUFPLEVBQUVxQyxLQUFLLEVBQUVwQyxpQkFBaUIsQ0FBQzs0QkFDdERVLE9BQU8sSUFBSSxDQUFDWixLQUFLLENBQUNZLEtBQUs7NEJBQ3ZCUixhQUFhLElBQUksQ0FBQ0osS0FBSyxDQUFDSSxXQUFXLElBQUlBOzRCQUN2QyxtQkFBbUI7d0JBQ3ZCLEdBQUdrQztpQkFDVjtZQUNMO1FBQ0o7UUFDQSxJQUFJNUMsSUFBcUMsRUFBRTtZQUN2QyxJQUFJLElBQUksQ0FBQ00sS0FBSyxDQUFDSSxXQUFXLEVBQUVrRSxRQUFRQyxJQUFJLENBQUM7UUFDN0M7UUFDQSxNQUFNcEMsUUFBUWhELGlCQUFpQixJQUFJLENBQUNZLE9BQU8sQ0FBQ1gsYUFBYSxFQUFFLElBQUksQ0FBQ1csT0FBTyxDQUFDK0ksYUFBYSxDQUFDdUIsSUFBSSxFQUFFM0ssS0FBbUMsSUFBSUo7UUFDbkksT0FBcUIsV0FBSCxHQUFJLElBQUdqQyxZQUFZb0csSUFBSSxFQUFFcEcsWUFBWXFHLFFBQVEsRUFBRTtZQUM3RHBDLFVBQVU7Z0JBQ04sQ0FBQzRILG9CQUFvQjlKLGNBQWNnTixRQUFRLEdBQUdoTixjQUFjZ04sUUFBUSxDQUFDM0wsR0FBRyxDQUFDLENBQUM2QixPQUFxQixXQUFILEdBQUksSUFBR2pGLFlBQVlxRCxHQUFHLEVBQUUsVUFBVTt3QkFDdEhJLEtBQUssQ0FBQyxFQUFFYixZQUFZLE9BQU8sRUFBRXdDLFVBQVVILE1BQU0sRUFBRXBDLGlCQUFpQixDQUFDO3dCQUNqRVUsT0FBTyxJQUFJLENBQUNaLEtBQUssQ0FBQ1ksS0FBSzt3QkFDdkJSLGFBQWEsSUFBSSxDQUFDSixLQUFLLENBQUNJLFdBQVcsSUFBSUE7b0JBQzNDLEdBQUdrQyxTQUFTO2dCQUNoQjRHLG1CQUFtQixPQUFxQixXQUFILEdBQUksSUFBRzdMLFlBQVlxRCxHQUFHLEVBQUUsVUFBVTtvQkFDbkVtSCxJQUFJO29CQUNKMUQsTUFBTTtvQkFDTnZELE9BQU8sSUFBSSxDQUFDWixLQUFLLENBQUNZLEtBQUs7b0JBQ3ZCUixhQUFhLElBQUksQ0FBQ0osS0FBSyxDQUFDSSxXQUFXLElBQUlBO29CQUN2Q3VCLHlCQUF5Qjt3QkFDckJDLFFBQVFsRixXQUFXMk8scUJBQXFCLENBQUMsSUFBSSxDQUFDdEwsT0FBTztvQkFDekQ7Z0JBQ0o7Z0JBQ0FJLDJCQUEyQixDQUFDK0ksb0JBQW9CLElBQUksQ0FBQ3BKLGtCQUFrQjtnQkFDdkVLLDJCQUEyQixDQUFDK0ksb0JBQW9CLElBQUksQ0FBQ3pFLGlCQUFpQjtnQkFDdEV0RSwyQkFBMkIsQ0FBQytJLG9CQUFvQixJQUFJLENBQUNoSCxnQkFBZ0IsQ0FBQ0M7Z0JBQ3RFaEMsMkJBQTJCLENBQUMrSSxvQkFBb0IsSUFBSSxDQUFDeEcsVUFBVSxDQUFDUDthQUNuRTtRQUNMO0lBQ0o7QUFDSjtBQUNBLFNBQVN4RixLQUFLcUQsS0FBSztJQUNmLE1BQU0sRUFBRVYsU0FBUyxFQUFFOEoscUJBQXFCLEVBQUVpRCxNQUFNLEVBQUVySixZQUFZLEVBQUU4RixhQUFhLEVBQUUsR0FBRyxDQUFDLEdBQUdoTCwwQkFBMEJ3TyxjQUFjO0lBQzlIbEQsc0JBQXNCek0sSUFBSSxHQUFHO0lBQzdCK04sZ0NBQWdDMUgsY0FBYzhGLGVBQWU5STtJQUM3RCxPQUFxQixXQUFILEdBQUksSUFBRzNDLFlBQVlxRCxHQUFHLEVBQUUsUUFBUTtRQUM5QyxHQUFHVixLQUFLO1FBQ1J1TSxNQUFNdk0sTUFBTXVNLElBQUksSUFBSUYsVUFBVWhGO1FBQzlCbUYsS0FBSzlNLEtBQW1DLElBQUlKLFlBQVksS0FBSytIO1FBQzdELG1CQUFtQjNILEtBQW1DLElBQUlKLGFBQWFJLGtCQUF5QixlQUFlLEtBQUsySDtJQUN4SDtBQUNKO0FBQ0EsU0FBU3pLO0lBQ0wsTUFBTSxFQUFFd00scUJBQXFCLEVBQUUsR0FBRyxDQUFDLEdBQUd0TCwwQkFBMEJ3TyxjQUFjO0lBQzlFbEQsc0JBQXNCeE0sSUFBSSxHQUFHO0lBQzdCLGFBQWE7SUFDYixPQUFxQixXQUFILEdBQUksSUFBR1MsWUFBWXFELEdBQUcsRUFBRSx1Q0FBdUMsQ0FBQztBQUN0RjtBQUNBLE1BQU10RCxpQkFBaUJHLE9BQU9WLE9BQU8sQ0FBQ3dKLFNBQVM7SUFDM0M7OztHQUdELEdBQUcsT0FBT29HLGdCQUFnQkMsR0FBRyxFQUFFO1FBQzFCLE9BQU9BLElBQUlDLHNCQUFzQixDQUFDRDtJQUN0QztJQUNBL0QsU0FBUztRQUNMLE9BQXFCLFdBQUgsR0FBSSxJQUFHdEwsWUFBWW9HLElBQUksRUFBRTlHLE1BQU07WUFDN0MyRSxVQUFVO2dCQUNOLFdBQVcsR0FBSSxJQUFHakUsWUFBWXFELEdBQUcsRUFBRWpFLE1BQU0sQ0FBQztnQkFDMUMsV0FBVyxHQUFJLElBQUdZLFlBQVlvRyxJQUFJLEVBQUUsUUFBUTtvQkFDeENuQyxVQUFVO3dCQUNOLFdBQVcsR0FBSSxJQUFHakUsWUFBWXFELEdBQUcsRUFBRTlELE1BQU0sQ0FBQzt3QkFDMUMsV0FBVyxHQUFJLElBQUdTLFlBQVlxRCxHQUFHLEVBQUVoRSxZQUFZLENBQUM7cUJBQ25EO2dCQUNMO2FBQ0g7UUFDTDtJQUNKO0FBQ0o7QUFDQSw4RUFBOEU7QUFDOUUsMkRBQTJEO0FBQzNELE1BQU1rUSwyQkFBMkIsU0FBU0E7SUFDdEMsT0FBcUIsV0FBSCxHQUFJLElBQUd2UCxZQUFZb0csSUFBSSxFQUFFOUcsTUFBTTtRQUM3QzJFLFVBQVU7WUFDTixXQUFXLEdBQUksSUFBR2pFLFlBQVlxRCxHQUFHLEVBQUVqRSxNQUFNLENBQUM7WUFDMUMsV0FBVyxHQUFJLElBQUdZLFlBQVlvRyxJQUFJLEVBQUUsUUFBUTtnQkFDeENuQyxVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHakUsWUFBWXFELEdBQUcsRUFBRTlELE1BQU0sQ0FBQztvQkFDMUMsV0FBVyxHQUFJLElBQUdTLFlBQVlxRCxHQUFHLEVBQUVoRSxZQUFZLENBQUM7aUJBQ25EO1lBQ0w7U0FDSDtJQUNMO0FBQ0o7QUFDQVUsUUFBUSxDQUFDSyxXQUFXb1AscUJBQXFCLENBQUMsR0FBR0QsMEJBRTdDLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19kb2N1bWVudC5qcz8zYjhjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSGVhZDogbnVsbCxcbiAgICBOZXh0U2NyaXB0OiBudWxsLFxuICAgIEh0bWw6IG51bGwsXG4gICAgTWFpbjogbnVsbCxcbiAgICBkZWZhdWx0OiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIEhlYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSGVhZDtcbiAgICB9LFxuICAgIE5leHRTY3JpcHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTmV4dFNjcmlwdDtcbiAgICB9LFxuICAgIEh0bWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSHRtbDtcbiAgICB9LFxuICAgIE1haW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTWFpbjtcbiAgICB9LFxuICAgIC8qKlxuICogYERvY3VtZW50YCBjb21wb25lbnQgaGFuZGxlcyB0aGUgaW5pdGlhbCBgZG9jdW1lbnRgIG1hcmt1cCBhbmQgcmVuZGVycyBvbmx5IG9uIHRoZSBzZXJ2ZXIgc2lkZS5cbiAqIENvbW1vbmx5IHVzZWQgZm9yIGltcGxlbWVudGluZyBzZXJ2ZXIgc2lkZSByZW5kZXJpbmcgZm9yIGBjc3MtaW4tanNgIGxpYnJhcmllcy5cbiAqLyBkZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIERvY3VtZW50O1xuICAgIH1cbn0pO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9jb25zdGFudHNcIik7XG5jb25zdCBfZ2V0cGFnZWZpbGVzID0gcmVxdWlyZShcIi4uL3NlcnZlci9nZXQtcGFnZS1maWxlc1wiKTtcbmNvbnN0IF9odG1sZXNjYXBlID0gcmVxdWlyZShcIi4uL3NlcnZlci9odG1sZXNjYXBlXCIpO1xuY29uc3QgX2lzZXJyb3IgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdChyZXF1aXJlKFwiLi4vbGliL2lzLWVycm9yXCIpKTtcbmNvbnN0IF9odG1sY29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9odG1sLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5mdW5jdGlvbiBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHtcbiAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgfTtcbn1cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkge1xuICAgIGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY2FjaGVCYWJlbEludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuICAgIHZhciBjYWNoZU5vZGVJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTtcbiAgICByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uKG5vZGVJbnRlcm9wKSB7XG4gICAgICAgIHJldHVybiBub2RlSW50ZXJvcCA/IGNhY2hlTm9kZUludGVyb3AgOiBjYWNoZUJhYmVsSW50ZXJvcDtcbiAgICB9KShub2RlSW50ZXJvcCk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkKG9iaiwgbm9kZUludGVyb3ApIHtcbiAgICBpZiAoIW5vZGVJbnRlcm9wICYmIG9iaiAmJiBvYmouX19lc01vZHVsZSkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTtcbiAgICBpZiAoY2FjaGUgJiYgY2FjaGUuaGFzKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldChvYmopO1xuICAgIH1cbiAgICB2YXIgbmV3T2JqID0ge307XG4gICAgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIGZvcih2YXIga2V5IGluIG9iail7XG4gICAgICAgIGlmIChrZXkgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICAgIGNhY2hlLnNldChvYmosIG5ld09iaik7XG4gICAgfVxuICAgIHJldHVybiBuZXdPYmo7XG59XG4vKiogU2V0IG9mIHBhZ2VzIHRoYXQgaGF2ZSB0cmlnZ2VyZWQgYSBsYXJnZSBkYXRhIHdhcm5pbmcgb24gcHJvZHVjdGlvbiBtb2RlLiAqLyBjb25zdCBsYXJnZVBhZ2VEYXRhV2FybmluZ3MgPSBuZXcgU2V0KCk7XG5mdW5jdGlvbiBnZXREb2N1bWVudEZpbGVzKGJ1aWxkTWFuaWZlc3QsIHBhdGhuYW1lLCBpbkFtcE1vZGUpIHtcbiAgICBjb25zdCBzaGFyZWRGaWxlcyA9ICgwLCBfZ2V0cGFnZWZpbGVzLmdldFBhZ2VGaWxlcykoYnVpbGRNYW5pZmVzdCwgXCIvX2FwcFwiKTtcbiAgICBjb25zdCBwYWdlRmlsZXMgPSBwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgIT09IFwiZWRnZVwiICYmIGluQW1wTW9kZSA/IFtdIDogKDAsIF9nZXRwYWdlZmlsZXMuZ2V0UGFnZUZpbGVzKShidWlsZE1hbmlmZXN0LCBwYXRobmFtZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2hhcmVkRmlsZXMsXG4gICAgICAgIHBhZ2VGaWxlcyxcbiAgICAgICAgYWxsRmlsZXM6IFtcbiAgICAgICAgICAgIC4uLm5ldyBTZXQoW1xuICAgICAgICAgICAgICAgIC4uLnNoYXJlZEZpbGVzLFxuICAgICAgICAgICAgICAgIC4uLnBhZ2VGaWxlc1xuICAgICAgICAgICAgXSlcbiAgICAgICAgXVxuICAgIH07XG59XG5mdW5jdGlvbiBnZXRQb2x5ZmlsbFNjcmlwdHMoY29udGV4dCwgcHJvcHMpIHtcbiAgICAvLyBwb2x5ZmlsbHMuanMgaGFzIHRvIGJlIHJlbmRlcmVkIGFzIG5vbW9kdWxlIHdpdGhvdXQgYXN5bmNcbiAgICAvLyBJdCBhbHNvIGhhcyB0byBiZSB0aGUgZmlyc3Qgc2NyaXB0IHRvIGxvYWRcbiAgICBjb25zdCB7IGFzc2V0UHJlZml4LCBidWlsZE1hbmlmZXN0LCBhc3NldFF1ZXJ5U3RyaW5nLCBkaXNhYmxlT3B0aW1pemVkTG9hZGluZywgY3Jvc3NPcmlnaW4gfSA9IGNvbnRleHQ7XG4gICAgcmV0dXJuIGJ1aWxkTWFuaWZlc3QucG9seWZpbGxGaWxlcy5maWx0ZXIoKHBvbHlmaWxsKT0+cG9seWZpbGwuZW5kc1dpdGgoXCIuanNcIikgJiYgIXBvbHlmaWxsLmVuZHNXaXRoKFwiLm1vZHVsZS5qc1wiKSkubWFwKChwb2x5ZmlsbCk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzY3JpcHRcIiwge1xuICAgICAgICAgICAgZGVmZXI6ICFkaXNhYmxlT3B0aW1pemVkTG9hZGluZyxcbiAgICAgICAgICAgIG5vbmNlOiBwcm9wcy5ub25jZSxcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBwcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpbixcbiAgICAgICAgICAgIG5vTW9kdWxlOiB0cnVlLFxuICAgICAgICAgICAgc3JjOiBgJHthc3NldFByZWZpeH0vX25leHQvJHtwb2x5ZmlsbH0ke2Fzc2V0UXVlcnlTdHJpbmd9YFxuICAgICAgICB9LCBwb2x5ZmlsbCkpO1xufVxuZnVuY3Rpb24gaGFzQ29tcG9uZW50UHJvcHMoY2hpbGQpIHtcbiAgICByZXR1cm4gISFjaGlsZCAmJiAhIWNoaWxkLnByb3BzO1xufVxuZnVuY3Rpb24gQW1wU3R5bGVzKHsgc3R5bGVzIH0pIHtcbiAgICBpZiAoIXN0eWxlcykgcmV0dXJuIG51bGw7XG4gICAgLy8gdHJ5IHRvIHBhcnNlIHN0eWxlcyBmcm9tIGZyYWdtZW50IGZvciBiYWNrd2FyZHMgY29tcGF0XG4gICAgY29uc3QgY3VyU3R5bGVzID0gQXJyYXkuaXNBcnJheShzdHlsZXMpID8gc3R5bGVzIDogW107XG4gICAgaWYgKC8vIEB0cy1pZ25vcmUgUHJvcGVydHkgJ3Byb3BzJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlIFJlYWN0RWxlbWVudFxuICAgIHN0eWxlcy5wcm9wcyAmJiAvLyBAdHMtaWdub3JlIFByb3BlcnR5ICdwcm9wcycgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSBSZWFjdEVsZW1lbnRcbiAgICBBcnJheS5pc0FycmF5KHN0eWxlcy5wcm9wcy5jaGlsZHJlbikpIHtcbiAgICAgICAgY29uc3QgaGFzU3R5bGVzID0gKGVsKT0+e1xuICAgICAgICAgICAgdmFyIF9lbF9wcm9wc19kYW5nZXJvdXNseVNldElubmVySFRNTCwgX2VsX3Byb3BzO1xuICAgICAgICAgICAgcmV0dXJuIGVsID09IG51bGwgPyB2b2lkIDAgOiAoX2VsX3Byb3BzID0gZWwucHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiAoX2VsX3Byb3BzX2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0gX2VsX3Byb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSA9PSBudWxsID8gdm9pZCAwIDogX2VsX3Byb3BzX2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbDtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBQcm9wZXJ0eSAncHJvcHMnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgUmVhY3RFbGVtZW50XG4gICAgICAgIHN0eWxlcy5wcm9wcy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCk9PntcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgIGNoaWxkLmZvckVhY2goKGVsKT0+aGFzU3R5bGVzKGVsKSAmJiBjdXJTdHlsZXMucHVzaChlbCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNTdHlsZXMoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgY3VyU3R5bGVzLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyogQWRkIGN1c3RvbSBzdHlsZXMgYmVmb3JlIEFNUCBzdHlsZXMgdG8gcHJldmVudCBhY2NpZGVudGFsIG92ZXJyaWRlcyAqLyByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInN0eWxlXCIsIHtcbiAgICAgICAgXCJhbXAtY3VzdG9tXCI6IFwiXCIsXG4gICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7XG4gICAgICAgICAgICBfX2h0bWw6IGN1clN0eWxlcy5tYXAoKHN0eWxlKT0+c3R5bGUucHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sKS5qb2luKFwiXCIpLnJlcGxhY2UoL1xcL1xcKiMgc291cmNlTWFwcGluZ1VSTD0uKlxcKlxcLy9nLCBcIlwiKS5yZXBsYWNlKC9cXC9cXCpAIHNvdXJjZVVSTD0uKj9cXCpcXC8vZywgXCJcIilcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZnVuY3Rpb24gZ2V0RHluYW1pY0NodW5rcyhjb250ZXh0LCBwcm9wcywgZmlsZXMpIHtcbiAgICBjb25zdCB7IGR5bmFtaWNJbXBvcnRzLCBhc3NldFByZWZpeCwgaXNEZXZlbG9wbWVudCwgYXNzZXRRdWVyeVN0cmluZywgZGlzYWJsZU9wdGltaXplZExvYWRpbmcsIGNyb3NzT3JpZ2luIH0gPSBjb250ZXh0O1xuICAgIHJldHVybiBkeW5hbWljSW1wb3J0cy5tYXAoKGZpbGUpPT57XG4gICAgICAgIGlmICghZmlsZS5lbmRzV2l0aChcIi5qc1wiKSB8fCBmaWxlcy5hbGxGaWxlcy5pbmNsdWRlcyhmaWxlKSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic2NyaXB0XCIsIHtcbiAgICAgICAgICAgIGFzeW5jOiAhaXNEZXZlbG9wbWVudCAmJiBkaXNhYmxlT3B0aW1pemVkTG9hZGluZyxcbiAgICAgICAgICAgIGRlZmVyOiAhZGlzYWJsZU9wdGltaXplZExvYWRpbmcsXG4gICAgICAgICAgICBzcmM6IGAke2Fzc2V0UHJlZml4fS9fbmV4dC8ke2VuY29kZVVSSShmaWxlKX0ke2Fzc2V0UXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICAgIG5vbmNlOiBwcm9wcy5ub25jZSxcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBwcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpblxuICAgICAgICB9LCBmaWxlKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGdldFNjcmlwdHMoY29udGV4dCwgcHJvcHMsIGZpbGVzKSB7XG4gICAgdmFyIF9idWlsZE1hbmlmZXN0X2xvd1ByaW9yaXR5RmlsZXM7XG4gICAgY29uc3QgeyBhc3NldFByZWZpeCwgYnVpbGRNYW5pZmVzdCwgaXNEZXZlbG9wbWVudCwgYXNzZXRRdWVyeVN0cmluZywgZGlzYWJsZU9wdGltaXplZExvYWRpbmcsIGNyb3NzT3JpZ2luIH0gPSBjb250ZXh0O1xuICAgIGNvbnN0IG5vcm1hbFNjcmlwdHMgPSBmaWxlcy5hbGxGaWxlcy5maWx0ZXIoKGZpbGUpPT5maWxlLmVuZHNXaXRoKFwiLmpzXCIpKTtcbiAgICBjb25zdCBsb3dQcmlvcml0eVNjcmlwdHMgPSAoX2J1aWxkTWFuaWZlc3RfbG93UHJpb3JpdHlGaWxlcyA9IGJ1aWxkTWFuaWZlc3QubG93UHJpb3JpdHlGaWxlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9idWlsZE1hbmlmZXN0X2xvd1ByaW9yaXR5RmlsZXMuZmlsdGVyKChmaWxlKT0+ZmlsZS5lbmRzV2l0aChcIi5qc1wiKSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4ubm9ybWFsU2NyaXB0cyxcbiAgICAgICAgLi4ubG93UHJpb3JpdHlTY3JpcHRzXG4gICAgXS5tYXAoKGZpbGUpPT57XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic2NyaXB0XCIsIHtcbiAgICAgICAgICAgIHNyYzogYCR7YXNzZXRQcmVmaXh9L19uZXh0LyR7ZW5jb2RlVVJJKGZpbGUpfSR7YXNzZXRRdWVyeVN0cmluZ31gLFxuICAgICAgICAgICAgbm9uY2U6IHByb3BzLm5vbmNlLFxuICAgICAgICAgICAgYXN5bmM6ICFpc0RldmVsb3BtZW50ICYmIGRpc2FibGVPcHRpbWl6ZWRMb2FkaW5nLFxuICAgICAgICAgICAgZGVmZXI6ICFkaXNhYmxlT3B0aW1pemVkTG9hZGluZyxcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBwcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpblxuICAgICAgICB9LCBmaWxlKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGdldFByZU5leHRXb3JrZXJTY3JpcHRzKGNvbnRleHQsIHByb3BzKSB7XG4gICAgY29uc3QgeyBhc3NldFByZWZpeCwgc2NyaXB0TG9hZGVyLCBjcm9zc09yaWdpbiwgbmV4dFNjcmlwdFdvcmtlcnMgfSA9IGNvbnRleHQ7XG4gICAgLy8gZGlzYWJsZSBgbmV4dFNjcmlwdFdvcmtlcnNgIGluIGVkZ2UgcnVudGltZVxuICAgIGlmICghbmV4dFNjcmlwdFdvcmtlcnMgfHwgcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FID09PSBcImVkZ2VcIikgcmV0dXJuIG51bGw7XG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHsgcGFydHl0b3duU25pcHBldCB9ID0gX19ub25fd2VicGFja19yZXF1aXJlX18oXCJAYnVpbGRlci5pby9wYXJ0eXRvd24vaW50ZWdyYXRpb25cIik7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuaXNBcnJheShwcm9wcy5jaGlsZHJlbikgPyBwcm9wcy5jaGlsZHJlbiA6IFtcbiAgICAgICAgICAgIHByb3BzLmNoaWxkcmVuXG4gICAgICAgIF07XG4gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBoYXMgZGVmaW5lZCB0aGVpciBvd24gUGFydHl0b3duIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uc3QgdXNlckRlZmluZWRDb25maWcgPSBjaGlsZHJlbi5maW5kKChjaGlsZCk9PntcbiAgICAgICAgICAgIHZhciBfY2hpbGRfcHJvcHNfZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsIF9jaGlsZF9wcm9wcztcbiAgICAgICAgICAgIHJldHVybiBoYXNDb21wb25lbnRQcm9wcyhjaGlsZCkgJiYgKGNoaWxkID09IG51bGwgPyB2b2lkIDAgOiAoX2NoaWxkX3Byb3BzID0gY2hpbGQucHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiAoX2NoaWxkX3Byb3BzX2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MID0gX2NoaWxkX3Byb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSA9PSBudWxsID8gdm9pZCAwIDogX2NoaWxkX3Byb3BzX2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbC5sZW5ndGgpICYmIFwiZGF0YS1wYXJ0eXRvd24tY29uZmlnXCIgaW4gY2hpbGQucHJvcHM7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgIXVzZXJEZWZpbmVkQ29uZmlnICYmIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzY3JpcHRcIiwge1xuICAgICAgICAgICAgICAgICAgICBcImRhdGEtcGFydHl0b3duLWNvbmZpZ1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBgXG4gICAgICAgICAgICBwYXJ0eXRvd24gPSB7XG4gICAgICAgICAgICAgIGxpYjogXCIke2Fzc2V0UHJlZml4fS9fbmV4dC9zdGF0aWMvfnBhcnR5dG93bi9cIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic2NyaXB0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXBhcnR5dG93blwiOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBwYXJ0eXRvd25TbmlwcGV0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIChzY3JpcHRMb2FkZXIud29ya2VyIHx8IFtdKS5tYXAoKGZpbGUsIGluZGV4KT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHN0cmF0ZWd5LCBzcmMsIGNoaWxkcmVuOiBzY3JpcHRDaGlsZHJlbiwgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwsIC4uLnNjcmlwdFByb3BzIH0gPSBmaWxlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgc3JjUHJvcHMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGV4dGVybmFsIHNyYyBpZiBwcm92aWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHJvcHMuc3JjID0gc3JjO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1iZWQgaW5saW5lIHNjcmlwdCBpZiBwcm92aWRlZCB3aXRoIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2h0bWw6IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1iZWQgaW5saW5lIHNjcmlwdCBpZiBwcm92aWRlZCB3aXRoIGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmNQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2h0bWw6IHR5cGVvZiBzY3JpcHRDaGlsZHJlbiA9PT0gXCJzdHJpbmdcIiA/IHNjcmlwdENoaWxkcmVuIDogQXJyYXkuaXNBcnJheShzY3JpcHRDaGlsZHJlbikgPyBzY3JpcHRDaGlsZHJlbi5qb2luKFwiXCIpIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdXNhZ2Ugb2YgbmV4dC9zY3JpcHQuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgYSBzcmMgYXR0cmlidXRlIG9yIGFuIGlubGluZSBzY3JpcHQ/IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2ludmFsaWQtc2NyaXB0XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfcmVhY3QuY3JlYXRlRWxlbWVudCkoXCJzY3JpcHRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3JjUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5zY3JpcHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dC9wYXJ0eXRvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogc3JjIHx8IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9uY2U6IHByb3BzLm5vbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLW5zY3JpcHRcIjogXCJ3b3JrZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBwcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCgwLCBfaXNlcnJvci5kZWZhdWx0KShlcnIpICYmIGVyci5jb2RlICE9PSBcIk1PRFVMRV9OT1RfRk9VTkRcIikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFByZU5leHRTY3JpcHRzKGNvbnRleHQsIHByb3BzKSB7XG4gICAgY29uc3QgeyBzY3JpcHRMb2FkZXIsIGRpc2FibGVPcHRpbWl6ZWRMb2FkaW5nLCBjcm9zc09yaWdpbiB9ID0gY29udGV4dDtcbiAgICBjb25zdCB3ZWJXb3JrZXJTY3JpcHRzID0gZ2V0UHJlTmV4dFdvcmtlclNjcmlwdHMoY29udGV4dCwgcHJvcHMpO1xuICAgIGNvbnN0IGJlZm9yZUludGVyYWN0aXZlU2NyaXB0cyA9IChzY3JpcHRMb2FkZXIuYmVmb3JlSW50ZXJhY3RpdmUgfHwgW10pLmZpbHRlcigoc2NyaXB0KT0+c2NyaXB0LnNyYykubWFwKChmaWxlLCBpbmRleCk9PntcbiAgICAgICAgY29uc3QgeyBzdHJhdGVneSwgLi4uc2NyaXB0UHJvcHMgfSA9IGZpbGU7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfcmVhY3QuY3JlYXRlRWxlbWVudCkoXCJzY3JpcHRcIiwge1xuICAgICAgICAgICAgLi4uc2NyaXB0UHJvcHMsXG4gICAgICAgICAgICBrZXk6IHNjcmlwdFByb3BzLnNyYyB8fCBpbmRleCxcbiAgICAgICAgICAgIGRlZmVyOiBzY3JpcHRQcm9wcy5kZWZlciA/PyAhZGlzYWJsZU9wdGltaXplZExvYWRpbmcsXG4gICAgICAgICAgICBub25jZTogcHJvcHMubm9uY2UsXG4gICAgICAgICAgICBcImRhdGEtbnNjcmlwdFwiOiBcImJlZm9yZUludGVyYWN0aXZlXCIsXG4gICAgICAgICAgICBjcm9zc09yaWdpbjogcHJvcHMuY3Jvc3NPcmlnaW4gfHwgY3Jvc3NPcmlnaW5cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICB3ZWJXb3JrZXJTY3JpcHRzLFxuICAgICAgICAgICAgYmVmb3JlSW50ZXJhY3RpdmVTY3JpcHRzXG4gICAgICAgIF1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGdldEhlYWRIVE1MUHJvcHMocHJvcHMpIHtcbiAgICBjb25zdCB7IGNyb3NzT3JpZ2luLCBub25jZSwgLi4ucmVzdFByb3BzIH0gPSBwcm9wcztcbiAgICAvLyBUaGlzIGFzc2lnbm1lbnQgaXMgbmVjZXNzYXJ5IGZvciBhZGRpdGlvbmFsIHR5cGUgY2hlY2tpbmcgdG8gYXZvaWQgdW5zdXBwb3J0ZWQgYXR0cmlidXRlcyBpbiA8aGVhZD5cbiAgICBjb25zdCBoZWFkUHJvcHMgPSByZXN0UHJvcHM7XG4gICAgcmV0dXJuIGhlYWRQcm9wcztcbn1cbmZ1bmN0aW9uIGdldEFtcFBhdGgoYW1wUGF0aCwgYXNQYXRoKSB7XG4gICAgcmV0dXJuIGFtcFBhdGggfHwgYCR7YXNQYXRofSR7YXNQYXRoLmluY2x1ZGVzKFwiP1wiKSA/IFwiJlwiIDogXCI/XCJ9YW1wPTFgO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEZvbnRMaW5rVGFncyhuZXh0Rm9udE1hbmlmZXN0LCBkYW5nZXJvdXNBc1BhdGgsIGFzc2V0UHJlZml4ID0gXCJcIikge1xuICAgIGlmICghbmV4dEZvbnRNYW5pZmVzdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJlY29ubmVjdDogbnVsbCxcbiAgICAgICAgICAgIHByZWxvYWQ6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgYXBwRm9udHNFbnRyeSA9IG5leHRGb250TWFuaWZlc3QucGFnZXNbXCIvX2FwcFwiXTtcbiAgICBjb25zdCBwYWdlRm9udHNFbnRyeSA9IG5leHRGb250TWFuaWZlc3QucGFnZXNbZGFuZ2Vyb3VzQXNQYXRoXTtcbiAgICBjb25zdCBwcmVsb2FkZWRGb250RmlsZXMgPSBbXG4gICAgICAgIC4uLmFwcEZvbnRzRW50cnkgPz8gW10sXG4gICAgICAgIC4uLnBhZ2VGb250c0VudHJ5ID8/IFtdXG4gICAgXTtcbiAgICAvLyBJZiBubyBmb250IGZpbGVzIHNob3VsZCBwcmVsb2FkIGJ1dCB0aGVyZSdzIGFuIGVudHJ5IGZvciB0aGUgcGF0aCwgYWRkIGEgcHJlY29ubmVjdCB0YWcuXG4gICAgY29uc3QgcHJlY29ubmVjdFRvU2VsZiA9ICEhKHByZWxvYWRlZEZvbnRGaWxlcy5sZW5ndGggPT09IDAgJiYgKGFwcEZvbnRzRW50cnkgfHwgcGFnZUZvbnRzRW50cnkpKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcmVjb25uZWN0OiBwcmVjb25uZWN0VG9TZWxmID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImxpbmtcIiwge1xuICAgICAgICAgICAgXCJkYXRhLW5leHQtZm9udFwiOiBuZXh0Rm9udE1hbmlmZXN0LnBhZ2VzVXNpbmdTaXplQWRqdXN0ID8gXCJzaXplLWFkanVzdFwiIDogXCJcIixcbiAgICAgICAgICAgIHJlbDogXCJwcmVjb25uZWN0XCIsXG4gICAgICAgICAgICBocmVmOiBcIi9cIixcbiAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiXG4gICAgICAgIH0pIDogbnVsbCxcbiAgICAgICAgcHJlbG9hZDogcHJlbG9hZGVkRm9udEZpbGVzID8gcHJlbG9hZGVkRm9udEZpbGVzLm1hcCgoZm9udEZpbGUpPT57XG4gICAgICAgICAgICBjb25zdCBleHQgPSAvXFwuKHdvZmZ8d29mZjJ8ZW90fHR0ZnxvdGYpJC8uZXhlYyhmb250RmlsZSlbMV07XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImxpbmtcIiwge1xuICAgICAgICAgICAgICAgIHJlbDogXCJwcmVsb2FkXCIsXG4gICAgICAgICAgICAgICAgaHJlZjogYCR7YXNzZXRQcmVmaXh9L19uZXh0LyR7ZW5jb2RlVVJJKGZvbnRGaWxlKX1gLFxuICAgICAgICAgICAgICAgIGFzOiBcImZvbnRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBgZm9udC8ke2V4dH1gLFxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiLFxuICAgICAgICAgICAgICAgIFwiZGF0YS1uZXh0LWZvbnRcIjogZm9udEZpbGUuaW5jbHVkZXMoXCItc1wiKSA/IFwic2l6ZS1hZGp1c3RcIiA6IFwiXCJcbiAgICAgICAgICAgIH0sIGZvbnRGaWxlKTtcbiAgICAgICAgfSkgOiBudWxsXG4gICAgfTtcbn1cbmNsYXNzIEhlYWQgZXh0ZW5kcyBfcmVhY3QuZGVmYXVsdC5Db21wb25lbnQge1xuICAgIHN0YXRpYyAjXyA9IHRoaXMuY29udGV4dFR5cGUgPSBfaHRtbGNvbnRleHRzaGFyZWRydW50aW1lLkh0bWxDb250ZXh0O1xuICAgIGdldENzc0xpbmtzKGZpbGVzKSB7XG4gICAgICAgIGNvbnN0IHsgYXNzZXRQcmVmaXgsIGFzc2V0UXVlcnlTdHJpbmcsIGR5bmFtaWNJbXBvcnRzLCBjcm9zc09yaWdpbiwgb3B0aW1pemVDc3MsIG9wdGltaXplRm9udHMgfSA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgY29uc3QgY3NzRmlsZXMgPSBmaWxlcy5hbGxGaWxlcy5maWx0ZXIoKGYpPT5mLmVuZHNXaXRoKFwiLmNzc1wiKSk7XG4gICAgICAgIGNvbnN0IHNoYXJlZEZpbGVzID0gbmV3IFNldChmaWxlcy5zaGFyZWRGaWxlcyk7XG4gICAgICAgIC8vIFVubWFuYWdlZCBmaWxlcyBhcmUgQ1NTIGZpbGVzIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGRpcmVjdGx5IGJ5IHRoZVxuICAgICAgICAvLyB3ZWJwYWNrIHJ1bnRpbWUgKGBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbmApLlxuICAgICAgICBsZXQgdW5tYW5nZWRGaWxlcyA9IG5ldyBTZXQoW10pO1xuICAgICAgICBsZXQgZHluYW1pY0Nzc0ZpbGVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGR5bmFtaWNJbXBvcnRzLmZpbHRlcigoZmlsZSk9PmZpbGUuZW5kc1dpdGgoXCIuY3NzXCIpKSkpO1xuICAgICAgICBpZiAoZHluYW1pY0Nzc0ZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBuZXcgU2V0KGNzc0ZpbGVzKTtcbiAgICAgICAgICAgIGR5bmFtaWNDc3NGaWxlcyA9IGR5bmFtaWNDc3NGaWxlcy5maWx0ZXIoKGYpPT4hKGV4aXN0aW5nLmhhcyhmKSB8fCBzaGFyZWRGaWxlcy5oYXMoZikpKTtcbiAgICAgICAgICAgIHVubWFuZ2VkRmlsZXMgPSBuZXcgU2V0KGR5bmFtaWNDc3NGaWxlcyk7XG4gICAgICAgICAgICBjc3NGaWxlcy5wdXNoKC4uLmR5bmFtaWNDc3NGaWxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNzc0xpbmtFbGVtZW50cyA9IFtdO1xuICAgICAgICBjc3NGaWxlcy5mb3JFYWNoKChmaWxlKT0+e1xuICAgICAgICAgICAgY29uc3QgaXNTaGFyZWRGaWxlID0gc2hhcmVkRmlsZXMuaGFzKGZpbGUpO1xuICAgICAgICAgICAgaWYgKCFvcHRpbWl6ZUNzcykge1xuICAgICAgICAgICAgICAgIGNzc0xpbmtFbGVtZW50cy5wdXNoKC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJsaW5rXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgbm9uY2U6IHRoaXMucHJvcHMubm9uY2UsXG4gICAgICAgICAgICAgICAgICAgIHJlbDogXCJwcmVsb2FkXCIsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IGAke2Fzc2V0UHJlZml4fS9fbmV4dC8ke2VuY29kZVVSSShmaWxlKX0ke2Fzc2V0UXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICAgICAgICAgICAgYXM6IFwic3R5bGVcIixcbiAgICAgICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHRoaXMucHJvcHMuY3Jvc3NPcmlnaW4gfHwgY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgICAgICB9LCBgJHtmaWxlfS1wcmVsb2FkYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXNVbm1hbmFnZWRGaWxlID0gdW5tYW5nZWRGaWxlcy5oYXMoZmlsZSk7XG4gICAgICAgICAgICBjc3NMaW5rRWxlbWVudHMucHVzaCgvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibGlua1wiLCB7XG4gICAgICAgICAgICAgICAgbm9uY2U6IHRoaXMucHJvcHMubm9uY2UsXG4gICAgICAgICAgICAgICAgcmVsOiBcInN0eWxlc2hlZXRcIixcbiAgICAgICAgICAgICAgICBocmVmOiBgJHthc3NldFByZWZpeH0vX25leHQvJHtlbmNvZGVVUkkoZmlsZSl9JHthc3NldFF1ZXJ5U3RyaW5nfWAsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHRoaXMucHJvcHMuY3Jvc3NPcmlnaW4gfHwgY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgICAgXCJkYXRhLW4tZ1wiOiBpc1VubWFuYWdlZEZpbGUgPyB1bmRlZmluZWQgOiBpc1NoYXJlZEZpbGUgPyBcIlwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFwiZGF0YS1uLXBcIjogaXNVbm1hbmFnZWRGaWxlID8gdW5kZWZpbmVkIDogaXNTaGFyZWRGaWxlID8gdW5kZWZpbmVkIDogXCJcIlxuICAgICAgICAgICAgfSwgZmlsZSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcImRldmVsb3BtZW50XCIgJiYgb3B0aW1pemVGb250cykge1xuICAgICAgICAgICAgY3NzTGlua0VsZW1lbnRzID0gdGhpcy5tYWtlU3R5bGVzaGVldEluZXJ0KGNzc0xpbmtFbGVtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNzc0xpbmtFbGVtZW50cy5sZW5ndGggPT09IDAgPyBudWxsIDogY3NzTGlua0VsZW1lbnRzO1xuICAgIH1cbiAgICBnZXRQcmVsb2FkRHluYW1pY0NodW5rcygpIHtcbiAgICAgICAgY29uc3QgeyBkeW5hbWljSW1wb3J0cywgYXNzZXRQcmVmaXgsIGFzc2V0UXVlcnlTdHJpbmcsIGNyb3NzT3JpZ2luIH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIHJldHVybiBkeW5hbWljSW1wb3J0cy5tYXAoKGZpbGUpPT57XG4gICAgICAgICAgICBpZiAoIWZpbGUuZW5kc1dpdGgoXCIuanNcIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibGlua1wiLCB7XG4gICAgICAgICAgICAgICAgcmVsOiBcInByZWxvYWRcIixcbiAgICAgICAgICAgICAgICBocmVmOiBgJHthc3NldFByZWZpeH0vX25leHQvJHtlbmNvZGVVUkkoZmlsZSl9JHthc3NldFF1ZXJ5U3RyaW5nfWAsXG4gICAgICAgICAgICAgICAgYXM6IFwic2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgbm9uY2U6IHRoaXMucHJvcHMubm9uY2UsXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHRoaXMucHJvcHMuY3Jvc3NPcmlnaW4gfHwgY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgIH0sIGZpbGUpO1xuICAgICAgICB9KS8vIEZpbHRlciBvdXQgbnVsbGVkIHNjcmlwdHNcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICB9XG4gICAgZ2V0UHJlbG9hZE1haW5MaW5rcyhmaWxlcykge1xuICAgICAgICBjb25zdCB7IGFzc2V0UHJlZml4LCBhc3NldFF1ZXJ5U3RyaW5nLCBzY3JpcHRMb2FkZXIsIGNyb3NzT3JpZ2luIH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IHByZWxvYWRGaWxlcyA9IGZpbGVzLmFsbEZpbGVzLmZpbHRlcigoZmlsZSk9PntcbiAgICAgICAgICAgIHJldHVybiBmaWxlLmVuZHNXaXRoKFwiLmpzXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLihzY3JpcHRMb2FkZXIuYmVmb3JlSW50ZXJhY3RpdmUgfHwgW10pLm1hcCgoZmlsZSk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJsaW5rXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgbm9uY2U6IHRoaXMucHJvcHMubm9uY2UsXG4gICAgICAgICAgICAgICAgICAgIHJlbDogXCJwcmVsb2FkXCIsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IGZpbGUuc3JjLFxuICAgICAgICAgICAgICAgICAgICBhczogXCJzY3JpcHRcIixcbiAgICAgICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IHRoaXMucHJvcHMuY3Jvc3NPcmlnaW4gfHwgY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgICAgICB9LCBmaWxlLnNyYykpLFxuICAgICAgICAgICAgLi4ucHJlbG9hZEZpbGVzLm1hcCgoZmlsZSk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJsaW5rXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgbm9uY2U6IHRoaXMucHJvcHMubm9uY2UsXG4gICAgICAgICAgICAgICAgICAgIHJlbDogXCJwcmVsb2FkXCIsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IGAke2Fzc2V0UHJlZml4fS9fbmV4dC8ke2VuY29kZVVSSShmaWxlKX0ke2Fzc2V0UXVlcnlTdHJpbmd9YCxcbiAgICAgICAgICAgICAgICAgICAgYXM6IFwic2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiB0aGlzLnByb3BzLmNyb3NzT3JpZ2luIHx8IGNyb3NzT3JpZ2luXG4gICAgICAgICAgICAgICAgfSwgZmlsZSkpXG4gICAgICAgIF07XG4gICAgfVxuICAgIGdldEJlZm9yZUludGVyYWN0aXZlSW5saW5lU2NyaXB0cygpIHtcbiAgICAgICAgY29uc3QgeyBzY3JpcHRMb2FkZXIgfSA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgY29uc3QgeyBub25jZSwgY3Jvc3NPcmlnaW4gfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHJldHVybiAoc2NyaXB0TG9hZGVyLmJlZm9yZUludGVyYWN0aXZlIHx8IFtdKS5maWx0ZXIoKHNjcmlwdCk9PiFzY3JpcHQuc3JjICYmIChzY3JpcHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgfHwgc2NyaXB0LmNoaWxkcmVuKSkubWFwKChmaWxlLCBpbmRleCk9PntcbiAgICAgICAgICAgIGNvbnN0IHsgc3RyYXRlZ3ksIGNoaWxkcmVuLCBkYW5nZXJvdXNseVNldElubmVySFRNTCwgc3JjLCAuLi5zY3JpcHRQcm9wcyB9ID0gZmlsZTtcbiAgICAgICAgICAgIGxldCBodG1sID0gXCJcIjtcbiAgICAgICAgICAgIGlmIChkYW5nZXJvdXNseVNldElubmVySFRNTCAmJiBkYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwpIHtcbiAgICAgICAgICAgICAgICBodG1sID0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGh0bWwgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgPyBjaGlsZHJlbiA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4uam9pbihcIlwiKSA6IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX3JlYWN0LmNyZWF0ZUVsZW1lbnQpKFwic2NyaXB0XCIsIHtcbiAgICAgICAgICAgICAgICAuLi5zY3JpcHRQcm9wcyxcbiAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuICAgICAgICAgICAgICAgICAgICBfX2h0bWw6IGh0bWxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGtleTogc2NyaXB0UHJvcHMuaWQgfHwgaW5kZXgsXG4gICAgICAgICAgICAgICAgbm9uY2U6IG5vbmNlLFxuICAgICAgICAgICAgICAgIFwiZGF0YS1uc2NyaXB0XCI6IFwiYmVmb3JlSW50ZXJhY3RpdmVcIixcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogY3Jvc3NPcmlnaW4gfHwgcHJvY2Vzcy5lbnYuX19ORVhUX0NST1NTX09SSUdJTlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXREeW5hbWljQ2h1bmtzKGZpbGVzKSB7XG4gICAgICAgIHJldHVybiBnZXREeW5hbWljQ2h1bmtzKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcywgZmlsZXMpO1xuICAgIH1cbiAgICBnZXRQcmVOZXh0U2NyaXB0cygpIHtcbiAgICAgICAgcmV0dXJuIGdldFByZU5leHRTY3JpcHRzKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcyk7XG4gICAgfVxuICAgIGdldFNjcmlwdHMoZmlsZXMpIHtcbiAgICAgICAgcmV0dXJuIGdldFNjcmlwdHModGhpcy5jb250ZXh0LCB0aGlzLnByb3BzLCBmaWxlcyk7XG4gICAgfVxuICAgIGdldFBvbHlmaWxsU2NyaXB0cygpIHtcbiAgICAgICAgcmV0dXJuIGdldFBvbHlmaWxsU2NyaXB0cyh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMpO1xuICAgIH1cbiAgICBtYWtlU3R5bGVzaGVldEluZXJ0KG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIF9yZWFjdC5kZWZhdWx0LkNoaWxkcmVuLm1hcChub2RlLCAoYyk9PntcbiAgICAgICAgICAgIHZhciBfY19wcm9wcywgX2NfcHJvcHMxO1xuICAgICAgICAgICAgaWYgKChjID09IG51bGwgPyB2b2lkIDAgOiBjLnR5cGUpID09PSBcImxpbmtcIiAmJiAoYyA9PSBudWxsID8gdm9pZCAwIDogKF9jX3Byb3BzID0gYy5wcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jX3Byb3BzLmhyZWYpICYmIF9jb25zdGFudHMuT1BUSU1JWkVEX0ZPTlRfUFJPVklERVJTLnNvbWUoKHsgdXJsIH0pPT57XG4gICAgICAgICAgICAgICAgdmFyIF9jX3Byb3BzX2hyZWYsIF9jX3Byb3BzO1xuICAgICAgICAgICAgICAgIHJldHVybiBjID09IG51bGwgPyB2b2lkIDAgOiAoX2NfcHJvcHMgPSBjLnByb3BzKSA9PSBudWxsID8gdm9pZCAwIDogKF9jX3Byb3BzX2hyZWYgPSBfY19wcm9wcy5ocmVmKSA9PSBudWxsID8gdm9pZCAwIDogX2NfcHJvcHNfaHJlZi5zdGFydHNXaXRoKHVybCk7XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Byb3BzID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jLnByb3BzIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgICBcImRhdGEtaHJlZlwiOiBjLnByb3BzLmhyZWYsXG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gX3JlYWN0LmRlZmF1bHQuY2xvbmVFbGVtZW50KGMsIG5ld1Byb3BzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBudWxsID8gdm9pZCAwIDogKF9jX3Byb3BzMSA9IGMucHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfY19wcm9wczEuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uYy5wcm9wcyB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMubWFrZVN0eWxlc2hlZXRJbmVydChjLnByb3BzLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gX3JlYWN0LmRlZmF1bHQuY2xvbmVFbGVtZW50KGMsIG5ld1Byb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAvLyBAdHlwZXMvcmVhY3QgYnVnLiBSZXR1cm5lZCB2YWx1ZSBmcm9tIC5tYXAgd2lsbCBub3QgYmUgYG51bGxgIGlmIHlvdSBwYXNzIGluIGBbbnVsbF1gXG4gICAgICAgIH0pLmZpbHRlcihCb29sZWFuKTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IHN0eWxlcywgYW1wUGF0aCwgaW5BbXBNb2RlLCBoeWJyaWRBbXAsIGNhbm9uaWNhbEJhc2UsIF9fTkVYVF9EQVRBX18sIGRhbmdlcm91c0FzUGF0aCwgaGVhZFRhZ3MsIHVuc3RhYmxlX3J1bnRpbWVKUywgdW5zdGFibGVfSnNQcmVsb2FkLCBkaXNhYmxlT3B0aW1pemVkTG9hZGluZywgb3B0aW1pemVDc3MsIG9wdGltaXplRm9udHMsIGFzc2V0UHJlZml4LCBuZXh0Rm9udE1hbmlmZXN0IH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGRpc2FibGVSdW50aW1lSlMgPSB1bnN0YWJsZV9ydW50aW1lSlMgPT09IGZhbHNlO1xuICAgICAgICBjb25zdCBkaXNhYmxlSnNQcmVsb2FkID0gdW5zdGFibGVfSnNQcmVsb2FkID09PSBmYWxzZSB8fCAhZGlzYWJsZU9wdGltaXplZExvYWRpbmc7XG4gICAgICAgIHRoaXMuY29udGV4dC5kb2NDb21wb25lbnRzUmVuZGVyZWQuSGVhZCA9IHRydWU7XG4gICAgICAgIGxldCB7IGhlYWQgfSA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgbGV0IGNzc1ByZWxvYWRzID0gW107XG4gICAgICAgIGxldCBvdGhlckhlYWRFbGVtZW50cyA9IFtdO1xuICAgICAgICBpZiAoaGVhZCkge1xuICAgICAgICAgICAgaGVhZC5mb3JFYWNoKChjKT0+e1xuICAgICAgICAgICAgICAgIGxldCBtZXRhVGFnO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQuc3RyaWN0TmV4dEhlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0YVRhZyA9IC8qI19fUFVSRV9fKi8gX3JlYWN0LmRlZmF1bHQuY3JlYXRlRWxlbWVudChcIm1ldGFcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJuZXh0LWhlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYyAmJiBjLnR5cGUgPT09IFwibGlua1wiICYmIGMucHJvcHNbXCJyZWxcIl0gPT09IFwicHJlbG9hZFwiICYmIGMucHJvcHNbXCJhc1wiXSA9PT0gXCJzdHlsZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGFUYWcgJiYgY3NzUHJlbG9hZHMucHVzaChtZXRhVGFnKTtcbiAgICAgICAgICAgICAgICAgICAgY3NzUHJlbG9hZHMucHVzaChjKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGFUYWcgJiYgKGMudHlwZSAhPT0gXCJtZXRhXCIgfHwgIWMucHJvcHNbXCJjaGFyU2V0XCJdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVySGVhZEVsZW1lbnRzLnB1c2gobWV0YVRhZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBvdGhlckhlYWRFbGVtZW50cy5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBoZWFkID0gY3NzUHJlbG9hZHMuY29uY2F0KG90aGVySGVhZEVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2hpbGRyZW4gPSBfcmVhY3QuZGVmYXVsdC5DaGlsZHJlbi50b0FycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgLy8gc2hvdyBhIHdhcm5pbmcgaWYgSGVhZCBjb250YWlucyA8dGl0bGU+IChvbmx5IGluIGRldmVsb3BtZW50KVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IF9yZWFjdC5kZWZhdWx0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkKT0+e1xuICAgICAgICAgICAgICAgIHZhciBfY2hpbGRfcHJvcHM7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWFjdEhlbG1ldCA9IGNoaWxkID09IG51bGwgPyB2b2lkIDAgOiAoX2NoaWxkX3Byb3BzID0gY2hpbGQucHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfY2hpbGRfcHJvcHNbXCJkYXRhLXJlYWN0LWhlbG1ldFwiXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzUmVhY3RIZWxtZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9jaGlsZF9wcm9wczE7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoY2hpbGQgPT0gbnVsbCA/IHZvaWQgMCA6IGNoaWxkLnR5cGUpID09PSBcInRpdGxlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIldhcm5pbmc6IDx0aXRsZT4gc2hvdWxkIG5vdCBiZSB1c2VkIGluIF9kb2N1bWVudC5qcydzIDxIZWFkPi4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbm8tZG9jdW1lbnQtdGl0bGVcIik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNoaWxkID09IG51bGwgPyB2b2lkIDAgOiBjaGlsZC50eXBlKSA9PT0gXCJtZXRhXCIgJiYgKGNoaWxkID09IG51bGwgPyB2b2lkIDAgOiAoX2NoaWxkX3Byb3BzMSA9IGNoaWxkLnByb3BzKSA9PSBudWxsID8gdm9pZCAwIDogX2NoaWxkX3Byb3BzMS5uYW1lKSA9PT0gXCJ2aWV3cG9ydFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJXYXJuaW5nOiB2aWV3cG9ydCBtZXRhIHRhZ3Mgc2hvdWxkIG5vdCBiZSB1c2VkIGluIF9kb2N1bWVudC5qcydzIDxIZWFkPi4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbm8tZG9jdW1lbnQtdmlld3BvcnQtbWV0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICAvLyBAdHlwZXMvcmVhY3QgYnVnLiBSZXR1cm5lZCB2YWx1ZSBmcm9tIC5tYXAgd2lsbCBub3QgYmUgYG51bGxgIGlmIHlvdSBwYXNzIGluIGBbbnVsbF1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmNyb3NzT3JpZ2luKSBjb25zb2xlLndhcm4oXCJXYXJuaW5nOiBgSGVhZGAgYXR0cmlidXRlIGBjcm9zc09yaWdpbmAgaXMgZGVwcmVjYXRlZC4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZG9jLWNyb3Nzb3JpZ2luLWRlcHJlY2F0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcImRldmVsb3BtZW50XCIgJiYgb3B0aW1pemVGb250cyAmJiAhKHByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSAhPT0gXCJlZGdlXCIgJiYgaW5BbXBNb2RlKSkge1xuICAgICAgICAgICAgY2hpbGRyZW4gPSB0aGlzLm1ha2VTdHlsZXNoZWV0SW5lcnQoY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBoYXNBbXBodG1sUmVsID0gZmFsc2U7XG4gICAgICAgIGxldCBoYXNDYW5vbmljYWxSZWwgPSBmYWxzZTtcbiAgICAgICAgLy8gc2hvdyB3YXJuaW5nIGFuZCByZW1vdmUgY29uZmxpY3RpbmcgYW1wIGhlYWQgdGFnc1xuICAgICAgICBoZWFkID0gX3JlYWN0LmRlZmF1bHQuQ2hpbGRyZW4ubWFwKGhlYWQgfHwgW10sIChjaGlsZCk9PntcbiAgICAgICAgICAgIGlmICghY2hpbGQpIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgcHJvcHMgfSA9IGNoaWxkO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSAhPT0gXCJlZGdlXCIgJiYgaW5BbXBNb2RlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGJhZFByb3AgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBcIm1ldGFcIiAmJiBwcm9wcy5uYW1lID09PSBcInZpZXdwb3J0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFkUHJvcCA9ICduYW1lPVwidmlld3BvcnRcIic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcImxpbmtcIiAmJiBwcm9wcy5yZWwgPT09IFwiY2Fub25pY2FsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2Fub25pY2FsUmVsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwic2NyaXB0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBibG9jayBpZlxuICAgICAgICAgICAgICAgICAgICAvLyAxLiBpdCBoYXMgYSBzcmMgYW5kIGlzbid0IHBvaW50aW5nIHRvIGFtcHByb2plY3QncyBDRE5cbiAgICAgICAgICAgICAgICAgICAgLy8gMi4gaXQgaXMgdXNpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgd2l0aG91dCBhIHR5cGUgb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gYSB0eXBlIG9mIHRleHQvamF2YXNjcmlwdFxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuc3JjICYmIHByb3BzLnNyYy5pbmRleE9mKFwiYW1wcHJvamVjdFwiKSA8IC0xIHx8IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmICghcHJvcHMudHlwZSB8fCBwcm9wcy50eXBlID09PSBcInRleHQvamF2YXNjcmlwdFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFkUHJvcCA9IFwiPHNjcmlwdFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goKHByb3ApPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkUHJvcCArPSBgICR7cHJvcH09XCIke3Byb3BzW3Byb3BdfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFkUHJvcCArPSBcIi8+XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJhZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBGb3VuZCBjb25mbGljdGluZyBhbXAgdGFnIFwiJHtjaGlsZC50eXBlfVwiIHdpdGggY29uZmxpY3RpbmcgcHJvcCAke2JhZFByb3B9IGluICR7X19ORVhUX0RBVEFfXy5wYWdlfS4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvY29uZmxpY3RpbmctYW1wLXRhZ2ApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIG5vbi1hbXAgbW9kZVxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBcImxpbmtcIiAmJiBwcm9wcy5yZWwgPT09IFwiYW1waHRtbFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0FtcGh0bWxSZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgLy8gQHR5cGVzL3JlYWN0IGJ1Zy4gUmV0dXJuZWQgdmFsdWUgZnJvbSAubWFwIHdpbGwgbm90IGJlIGBudWxsYCBpZiB5b3UgcGFzcyBpbiBgW251bGxdYFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZmlsZXMgPSBnZXREb2N1bWVudEZpbGVzKHRoaXMuY29udGV4dC5idWlsZE1hbmlmZXN0LCB0aGlzLmNvbnRleHQuX19ORVhUX0RBVEFfXy5wYWdlLCBwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgIT09IFwiZWRnZVwiICYmIGluQW1wTW9kZSk7XG4gICAgICAgIGNvbnN0IG5leHRGb250TGlua1RhZ3MgPSBnZXROZXh0Rm9udExpbmtUYWdzKG5leHRGb250TWFuaWZlc3QsIGRhbmdlcm91c0FzUGF0aCwgYXNzZXRQcmVmaXgpO1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJoZWFkXCIsIHtcbiAgICAgICAgICAgIC4uLmdldEhlYWRIVE1MUHJvcHModGhpcy5wcm9wcyksXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5pc0RldmVsb3BtZW50ICYmIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3R5bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1uZXh0LWhpZGUtZm91Y1wiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1hbXBkZXZtb2RlXCI6IHByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSAhPT0gXCJlZGdlXCIgJiYgaW5BbXBNb2RlID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBgYm9keXtkaXNwbGF5Om5vbmV9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcIm5vc2NyaXB0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtbmV4dC1oaWRlLWZvdWNcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtYW1wZGV2bW9kZVwiOiBwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgIT09IFwiZWRnZVwiICYmIGluQW1wTW9kZSA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3R5bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBgYm9keXtkaXNwbGF5OmJsb2NrfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaGVhZCxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuc3RyaWN0TmV4dEhlYWQgPyBudWxsIDogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcIm1ldGFcIiwge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm5leHQtaGVhZC1jb3VudFwiLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBfcmVhY3QuZGVmYXVsdC5DaGlsZHJlbi5jb3VudChoZWFkIHx8IFtdKS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgb3B0aW1pemVGb250cyAmJiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibWV0YVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibmV4dC1mb250LXByZWNvbm5lY3RcIlxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5leHRGb250TGlua1RhZ3MucHJlY29ubmVjdCxcbiAgICAgICAgICAgICAgICBuZXh0Rm9udExpbmtUYWdzLnByZWxvYWQsXG4gICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FICE9PSBcImVkZ2VcIiAmJiBpbkFtcE1vZGUgJiYgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJtZXRhXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInZpZXdwb3J0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCJ3aWR0aD1kZXZpY2Utd2lkdGgsbWluaW11bS1zY2FsZT0xLGluaXRpYWwtc2NhbGU9MVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICFoYXNDYW5vbmljYWxSZWwgJiYgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImxpbmtcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbDogXCJjYW5vbmljYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBjYW5vbmljYWxCYXNlICsgcmVxdWlyZShcIi4uL3NlcnZlci91dGlsc1wiKS5jbGVhbkFtcFBhdGgoZGFuZ2Vyb3VzQXNQYXRoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibGlua1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsOiBcInByZWxvYWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhczogXCJzY3JpcHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vY2RuLmFtcHByb2plY3Qub3JnL3YwLmpzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShBbXBTdHlsZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXM6IHN0eWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3R5bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1wLWJvaWxlcnBsYXRlXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBgYm9keXstd2Via2l0LWFuaW1hdGlvbjotYW1wLXN0YXJ0IDhzIHN0ZXBzKDEsZW5kKSAwcyAxIG5vcm1hbCBib3RoOy1tb3otYW5pbWF0aW9uOi1hbXAtc3RhcnQgOHMgc3RlcHMoMSxlbmQpIDBzIDEgbm9ybWFsIGJvdGg7LW1zLWFuaW1hdGlvbjotYW1wLXN0YXJ0IDhzIHN0ZXBzKDEsZW5kKSAwcyAxIG5vcm1hbCBib3RoO2FuaW1hdGlvbjotYW1wLXN0YXJ0IDhzIHN0ZXBzKDEsZW5kKSAwcyAxIG5vcm1hbCBib3RofUAtd2Via2l0LWtleWZyYW1lcyAtYW1wLXN0YXJ0e2Zyb217dmlzaWJpbGl0eTpoaWRkZW59dG97dmlzaWJpbGl0eTp2aXNpYmxlfX1ALW1vei1rZXlmcmFtZXMgLWFtcC1zdGFydHtmcm9te3Zpc2liaWxpdHk6aGlkZGVufXRve3Zpc2liaWxpdHk6dmlzaWJsZX19QC1tcy1rZXlmcmFtZXMgLWFtcC1zdGFydHtmcm9te3Zpc2liaWxpdHk6aGlkZGVufXRve3Zpc2liaWxpdHk6dmlzaWJsZX19QC1vLWtleWZyYW1lcyAtYW1wLXN0YXJ0e2Zyb217dmlzaWJpbGl0eTpoaWRkZW59dG97dmlzaWJpbGl0eTp2aXNpYmxlfX1Aa2V5ZnJhbWVzIC1hbXAtc3RhcnR7ZnJvbXt2aXNpYmlsaXR5OmhpZGRlbn10b3t2aXNpYmlsaXR5OnZpc2libGV9fWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJub3NjcmlwdFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzdHlsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1wLWJvaWxlcnBsYXRlXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2h0bWw6IGBib2R5ey13ZWJraXQtYW5pbWF0aW9uOm5vbmU7LW1vei1hbmltYXRpb246bm9uZTstbXMtYW5pbWF0aW9uOm5vbmU7YW5pbWF0aW9uOm5vbmV9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInNjcmlwdFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBcImh0dHBzOi8vY2RuLmFtcHByb2plY3Qub3JnL3YwLmpzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAhKHByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSAhPT0gXCJlZGdlXCIgJiYgaW5BbXBNb2RlKSAmJiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgIWhhc0FtcGh0bWxSZWwgJiYgaHlicmlkQW1wICYmIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJsaW5rXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw6IFwiYW1waHRtbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IGNhbm9uaWNhbEJhc2UgKyBnZXRBbXBQYXRoKGFtcFBhdGgsIGRhbmdlcm91c0FzUGF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRCZWZvcmVJbnRlcmFjdGl2ZUlubGluZVNjcmlwdHMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICFvcHRpbWl6ZUNzcyAmJiB0aGlzLmdldENzc0xpbmtzKGZpbGVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICFvcHRpbWl6ZUNzcyAmJiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibm9zY3JpcHRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1uLWNzc1wiOiB0aGlzLnByb3BzLm5vbmNlID8/IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgIWRpc2FibGVSdW50aW1lSlMgJiYgIWRpc2FibGVKc1ByZWxvYWQgJiYgdGhpcy5nZXRQcmVsb2FkRHluYW1pY0NodW5rcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgIWRpc2FibGVSdW50aW1lSlMgJiYgIWRpc2FibGVKc1ByZWxvYWQgJiYgdGhpcy5nZXRQcmVsb2FkTWFpbkxpbmtzKGZpbGVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICFkaXNhYmxlT3B0aW1pemVkTG9hZGluZyAmJiAhZGlzYWJsZVJ1bnRpbWVKUyAmJiB0aGlzLmdldFBvbHlmaWxsU2NyaXB0cygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgIWRpc2FibGVPcHRpbWl6ZWRMb2FkaW5nICYmICFkaXNhYmxlUnVudGltZUpTICYmIHRoaXMuZ2V0UHJlTmV4dFNjcmlwdHMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICFkaXNhYmxlT3B0aW1pemVkTG9hZGluZyAmJiAhZGlzYWJsZVJ1bnRpbWVKUyAmJiB0aGlzLmdldER5bmFtaWNDaHVua3MoZmlsZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgIWRpc2FibGVPcHRpbWl6ZWRMb2FkaW5nICYmICFkaXNhYmxlUnVudGltZUpTICYmIHRoaXMuZ2V0U2NyaXB0cyhmaWxlcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZUNzcyAmJiB0aGlzLmdldENzc0xpbmtzKGZpbGVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplQ3NzICYmIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJub3NjcmlwdFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLW4tY3NzXCI6IHRoaXMucHJvcHMubm9uY2UgPz8gXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuaXNEZXZlbG9wbWVudCAmJiAvLyB0aGlzIGVsZW1lbnQgaXMgdXNlZCB0byBtb3VudCBkZXZlbG9wbWVudCBzdHlsZXMgc28gdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmRlcmluZyBtYXRjaGVzIHByb2R1Y3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIChieSBkZWZhdWx0LCBzdHlsZS1sb2FkZXIgaW5qZWN0cyBhdCB0aGUgYm90dG9tIG9mIDxoZWFkIC8+KVxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcIm5vc2NyaXB0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJfX25leHRfY3NzX19ET19OT1RfVVNFX19cIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXMgfHwgbnVsbFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyBfcmVhY3QuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF9yZWFjdC5kZWZhdWx0LkZyYWdtZW50LCB7fSwgLi4uaGVhZFRhZ3MgfHwgW10pXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGhhbmRsZURvY3VtZW50U2NyaXB0TG9hZGVySXRlbXMoc2NyaXB0TG9hZGVyLCBfX05FWFRfREFUQV9fLCBwcm9wcykge1xuICAgIHZhciBfY2hpbGRyZW5fZmluZF9wcm9wcywgX2NoaWxkcmVuX2ZpbmQsIF9jaGlsZHJlbl9maW5kX3Byb3BzMSwgX2NoaWxkcmVuX2ZpbmQxO1xuICAgIGlmICghcHJvcHMuY2hpbGRyZW4pIHJldHVybjtcbiAgICBjb25zdCBzY3JpcHRMb2FkZXJJdGVtcyA9IFtdO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuaXNBcnJheShwcm9wcy5jaGlsZHJlbikgPyBwcm9wcy5jaGlsZHJlbiA6IFtcbiAgICAgICAgcHJvcHMuY2hpbGRyZW5cbiAgICBdO1xuICAgIGNvbnN0IGhlYWRDaGlsZHJlbiA9IChfY2hpbGRyZW5fZmluZCA9IGNoaWxkcmVuLmZpbmQoKGNoaWxkKT0+Y2hpbGQudHlwZSA9PT0gSGVhZCkpID09IG51bGwgPyB2b2lkIDAgOiAoX2NoaWxkcmVuX2ZpbmRfcHJvcHMgPSBfY2hpbGRyZW5fZmluZC5wcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9jaGlsZHJlbl9maW5kX3Byb3BzLmNoaWxkcmVuO1xuICAgIGNvbnN0IGJvZHlDaGlsZHJlbiA9IChfY2hpbGRyZW5fZmluZDEgPSBjaGlsZHJlbi5maW5kKChjaGlsZCk9PmNoaWxkLnR5cGUgPT09IFwiYm9keVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IChfY2hpbGRyZW5fZmluZF9wcm9wczEgPSBfY2hpbGRyZW5fZmluZDEucHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfY2hpbGRyZW5fZmluZF9wcm9wczEuY2hpbGRyZW47XG4gICAgLy8gU2NyaXB0cyB3aXRoIGJlZm9yZUludGVyYWN0aXZlIGNhbiBiZSBwbGFjZWQgaW5zaWRlIEhlYWQgb3IgPGJvZHk+IHNvIGNoaWxkcmVuIG9mIGJvdGggbmVlZHMgdG8gYmUgdHJhdmVyc2VkXG4gICAgY29uc3QgY29tYmluZWRDaGlsZHJlbiA9IFtcbiAgICAgICAgLi4uQXJyYXkuaXNBcnJheShoZWFkQ2hpbGRyZW4pID8gaGVhZENoaWxkcmVuIDogW1xuICAgICAgICAgICAgaGVhZENoaWxkcmVuXG4gICAgICAgIF0sXG4gICAgICAgIC4uLkFycmF5LmlzQXJyYXkoYm9keUNoaWxkcmVuKSA/IGJvZHlDaGlsZHJlbiA6IFtcbiAgICAgICAgICAgIGJvZHlDaGlsZHJlblxuICAgICAgICBdXG4gICAgXTtcbiAgICBfcmVhY3QuZGVmYXVsdC5DaGlsZHJlbi5mb3JFYWNoKGNvbWJpbmVkQ2hpbGRyZW4sIChjaGlsZCk9PntcbiAgICAgICAgdmFyIF9jaGlsZF90eXBlO1xuICAgICAgICBpZiAoIWNoaWxkKSByZXR1cm47XG4gICAgICAgIC8vIFdoZW4gdXNpbmcgdGhlIGBuZXh0L3NjcmlwdGAgY29tcG9uZW50LCByZWdpc3RlciBpdCBpbiBzY3JpcHQgbG9hZGVyLlxuICAgICAgICBpZiAoKF9jaGlsZF90eXBlID0gY2hpbGQudHlwZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jaGlsZF90eXBlLl9fbmV4dFNjcmlwdCkge1xuICAgICAgICAgICAgaWYgKGNoaWxkLnByb3BzLnN0cmF0ZWd5ID09PSBcImJlZm9yZUludGVyYWN0aXZlXCIpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHRMb2FkZXIuYmVmb3JlSW50ZXJhY3RpdmUgPSAoc2NyaXB0TG9hZGVyLmJlZm9yZUludGVyYWN0aXZlIHx8IFtdKS5jb25jYXQoW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZC5wcm9wc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChbXG4gICAgICAgICAgICAgICAgXCJsYXp5T25sb2FkXCIsXG4gICAgICAgICAgICAgICAgXCJhZnRlckludGVyYWN0aXZlXCIsXG4gICAgICAgICAgICAgICAgXCJ3b3JrZXJcIlxuICAgICAgICAgICAgXS5pbmNsdWRlcyhjaGlsZC5wcm9wcy5zdHJhdGVneSkpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHRMb2FkZXJJdGVtcy5wdXNoKGNoaWxkLnByb3BzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBfX05FWFRfREFUQV9fLnNjcmlwdExvYWRlciA9IHNjcmlwdExvYWRlckl0ZW1zO1xufVxuY2xhc3MgTmV4dFNjcmlwdCBleHRlbmRzIF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudCB7XG4gICAgc3RhdGljICNfID0gdGhpcy5jb250ZXh0VHlwZSA9IF9odG1sY29udGV4dHNoYXJlZHJ1bnRpbWUuSHRtbENvbnRleHQ7XG4gICAgZ2V0RHluYW1pY0NodW5rcyhmaWxlcykge1xuICAgICAgICByZXR1cm4gZ2V0RHluYW1pY0NodW5rcyh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMsIGZpbGVzKTtcbiAgICB9XG4gICAgZ2V0UHJlTmV4dFNjcmlwdHMoKSB7XG4gICAgICAgIHJldHVybiBnZXRQcmVOZXh0U2NyaXB0cyh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMpO1xuICAgIH1cbiAgICBnZXRTY3JpcHRzKGZpbGVzKSB7XG4gICAgICAgIHJldHVybiBnZXRTY3JpcHRzKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcywgZmlsZXMpO1xuICAgIH1cbiAgICBnZXRQb2x5ZmlsbFNjcmlwdHMoKSB7XG4gICAgICAgIHJldHVybiBnZXRQb2x5ZmlsbFNjcmlwdHModGhpcy5jb250ZXh0LCB0aGlzLnByb3BzKTtcbiAgICB9XG4gICAgc3RhdGljIGdldElubGluZVNjcmlwdFNvdXJjZShjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHsgX19ORVhUX0RBVEFfXywgbGFyZ2VQYWdlRGF0YUJ5dGVzIH0gPSBjb250ZXh0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KF9fTkVYVF9EQVRBX18pO1xuICAgICAgICAgICAgaWYgKGxhcmdlUGFnZURhdGFXYXJuaW5ncy5oYXMoX19ORVhUX0RBVEFfXy5wYWdlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX2h0bWxlc2NhcGUuaHRtbEVzY2FwZUpzb25TdHJpbmcpKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSBwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgPT09IFwiZWRnZVwiID8gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGRhdGEpLmJ1ZmZlci5ieXRlTGVuZ3RoIDogQnVmZmVyLmZyb20oZGF0YSkuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHByZXR0eUJ5dGVzID0gcmVxdWlyZShcIi4uL2xpYi9wcmV0dHktYnl0ZXNcIikuZGVmYXVsdDtcbiAgICAgICAgICAgIGlmIChsYXJnZVBhZ2VEYXRhQnl0ZXMgJiYgYnl0ZXMgPiBsYXJnZVBhZ2VEYXRhQnl0ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhcmdlUGFnZURhdGFXYXJuaW5ncy5hZGQoX19ORVhUX0RBVEFfXy5wYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBkYXRhIGZvciBwYWdlIFwiJHtfX05FWFRfREFUQV9fLnBhZ2V9XCIke19fTkVYVF9EQVRBX18ucGFnZSA9PT0gY29udGV4dC5kYW5nZXJvdXNBc1BhdGggPyBcIlwiIDogYCAocGF0aCBcIiR7Y29udGV4dC5kYW5nZXJvdXNBc1BhdGh9XCIpYH0gaXMgJHtwcmV0dHlCeXRlcyhieXRlcyl9IHdoaWNoIGV4Y2VlZHMgdGhlIHRocmVzaG9sZCBvZiAke3ByZXR0eUJ5dGVzKGxhcmdlUGFnZURhdGFCeXRlcyl9LCB0aGlzIGFtb3VudCBvZiBkYXRhIGNhbiByZWR1Y2UgcGVyZm9ybWFuY2UuXFxuU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9sYXJnZS1wYWdlLWRhdGFgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoMCwgX2h0bWxlc2NhcGUuaHRtbEVzY2FwZUpzb25TdHJpbmcpKGRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICgoMCwgX2lzZXJyb3IuZGVmYXVsdCkoZXJyKSAmJiBlcnIubWVzc2FnZS5pbmRleE9mKFwiY2lyY3VsYXIgc3RydWN0dXJlXCIpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgc3RydWN0dXJlIGluIFwiZ2V0SW5pdGlhbFByb3BzXCIgcmVzdWx0IG9mIHBhZ2UgXCIke19fTkVYVF9EQVRBX18ucGFnZX1cIi4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvY2lyY3VsYXItc3RydWN0dXJlYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGFzc2V0UHJlZml4LCBpbkFtcE1vZGUsIGJ1aWxkTWFuaWZlc3QsIHVuc3RhYmxlX3J1bnRpbWVKUywgZG9jQ29tcG9uZW50c1JlbmRlcmVkLCBhc3NldFF1ZXJ5U3RyaW5nLCBkaXNhYmxlT3B0aW1pemVkTG9hZGluZywgY3Jvc3NPcmlnaW4gfSA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgY29uc3QgZGlzYWJsZVJ1bnRpbWVKUyA9IHVuc3RhYmxlX3J1bnRpbWVKUyA9PT0gZmFsc2U7XG4gICAgICAgIGRvY0NvbXBvbmVudHNSZW5kZXJlZC5OZXh0U2NyaXB0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSAhPT0gXCJlZGdlXCIgJiYgaW5BbXBNb2RlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbXBEZXZGaWxlcyA9IFtcbiAgICAgICAgICAgICAgICAuLi5idWlsZE1hbmlmZXN0LmRldkZpbGVzLFxuICAgICAgICAgICAgICAgIC4uLmJ1aWxkTWFuaWZlc3QucG9seWZpbGxGaWxlcyxcbiAgICAgICAgICAgICAgICAuLi5idWlsZE1hbmlmZXN0LmFtcERldkZpbGVzXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJ1bnRpbWVKUyA/IG51bGwgOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic2NyaXB0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIl9fTkVYVF9EQVRBX19cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9uY2U6IHRoaXMucHJvcHMubm9uY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogdGhpcy5wcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBOZXh0U2NyaXB0LmdldElubGluZVNjcmlwdFNvdXJjZSh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWFtcGRldm1vZGVcIjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgYW1wRGV2RmlsZXMubWFwKChmaWxlKT0+LyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInNjcmlwdFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiBgJHthc3NldFByZWZpeH0vX25leHQvJHtmaWxlfSR7YXNzZXRRdWVyeVN0cmluZ31gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmNlOiB0aGlzLnByb3BzLm5vbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiB0aGlzLnByb3BzLmNyb3NzT3JpZ2luIHx8IGNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1hbXBkZXZtb2RlXCI6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZpbGUpKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmNyb3NzT3JpZ2luKSBjb25zb2xlLndhcm4oXCJXYXJuaW5nOiBgTmV4dFNjcmlwdGAgYXR0cmlidXRlIGBjcm9zc09yaWdpbmAgaXMgZGVwcmVjYXRlZC4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZG9jLWNyb3Nzb3JpZ2luLWRlcHJlY2F0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsZXMgPSBnZXREb2N1bWVudEZpbGVzKHRoaXMuY29udGV4dC5idWlsZE1hbmlmZXN0LCB0aGlzLmNvbnRleHQuX19ORVhUX0RBVEFfXy5wYWdlLCBwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgIT09IFwiZWRnZVwiICYmIGluQW1wTW9kZSk7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAhZGlzYWJsZVJ1bnRpbWVKUyAmJiBidWlsZE1hbmlmZXN0LmRldkZpbGVzID8gYnVpbGRNYW5pZmVzdC5kZXZGaWxlcy5tYXAoKGZpbGUpPT4vKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic2NyaXB0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogYCR7YXNzZXRQcmVmaXh9L19uZXh0LyR7ZW5jb2RlVVJJKGZpbGUpfSR7YXNzZXRRdWVyeVN0cmluZ31gLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9uY2U6IHRoaXMucHJvcHMubm9uY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogdGhpcy5wcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpblxuICAgICAgICAgICAgICAgICAgICB9LCBmaWxlKSkgOiBudWxsLFxuICAgICAgICAgICAgICAgIGRpc2FibGVSdW50aW1lSlMgPyBudWxsIDogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInNjcmlwdFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIl9fTkVYVF9EQVRBX19cIixcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgIG5vbmNlOiB0aGlzLnByb3BzLm5vbmNlLFxuICAgICAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogdGhpcy5wcm9wcy5jcm9zc09yaWdpbiB8fCBjcm9zc09yaWdpbixcbiAgICAgICAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9faHRtbDogTmV4dFNjcmlwdC5nZXRJbmxpbmVTY3JpcHRTb3VyY2UodGhpcy5jb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGlzYWJsZU9wdGltaXplZExvYWRpbmcgJiYgIWRpc2FibGVSdW50aW1lSlMgJiYgdGhpcy5nZXRQb2x5ZmlsbFNjcmlwdHMoKSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlT3B0aW1pemVkTG9hZGluZyAmJiAhZGlzYWJsZVJ1bnRpbWVKUyAmJiB0aGlzLmdldFByZU5leHRTY3JpcHRzKCksXG4gICAgICAgICAgICAgICAgZGlzYWJsZU9wdGltaXplZExvYWRpbmcgJiYgIWRpc2FibGVSdW50aW1lSlMgJiYgdGhpcy5nZXREeW5hbWljQ2h1bmtzKGZpbGVzKSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlT3B0aW1pemVkTG9hZGluZyAmJiAhZGlzYWJsZVJ1bnRpbWVKUyAmJiB0aGlzLmdldFNjcmlwdHMoZmlsZXMpXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIEh0bWwocHJvcHMpIHtcbiAgICBjb25zdCB7IGluQW1wTW9kZSwgZG9jQ29tcG9uZW50c1JlbmRlcmVkLCBsb2NhbGUsIHNjcmlwdExvYWRlciwgX19ORVhUX0RBVEFfXyB9ID0gKDAsIF9odG1sY29udGV4dHNoYXJlZHJ1bnRpbWUudXNlSHRtbENvbnRleHQpKCk7XG4gICAgZG9jQ29tcG9uZW50c1JlbmRlcmVkLkh0bWwgPSB0cnVlO1xuICAgIGhhbmRsZURvY3VtZW50U2NyaXB0TG9hZGVySXRlbXMoc2NyaXB0TG9hZGVyLCBfX05FWFRfREFUQV9fLCBwcm9wcyk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJodG1sXCIsIHtcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIGxhbmc6IHByb3BzLmxhbmcgfHwgbG9jYWxlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgYW1wOiBwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgIT09IFwiZWRnZVwiICYmIGluQW1wTW9kZSA/IFwiXCIgOiB1bmRlZmluZWQsXG4gICAgICAgIFwiZGF0YS1hbXBkZXZtb2RlXCI6IHByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSAhPT0gXCJlZGdlXCIgJiYgaW5BbXBNb2RlICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFwiXCIgOiB1bmRlZmluZWRcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIE1haW4oKSB7XG4gICAgY29uc3QgeyBkb2NDb21wb25lbnRzUmVuZGVyZWQgfSA9ICgwLCBfaHRtbGNvbnRleHRzaGFyZWRydW50aW1lLnVzZUh0bWxDb250ZXh0KSgpO1xuICAgIGRvY0NvbXBvbmVudHNSZW5kZXJlZC5NYWluID0gdHJ1ZTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJuZXh0LWpzLWludGVybmFsLWJvZHktcmVuZGVyLXRhcmdldFwiLCB7fSk7XG59XG5jbGFzcyBEb2N1bWVudCBleHRlbmRzIF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudCB7XG4gICAgLyoqXG4gICAqIGBnZXRJbml0aWFsUHJvcHNgIGhvb2sgcmV0dXJucyB0aGUgY29udGV4dCBvYmplY3Qgd2l0aCB0aGUgYWRkaXRpb24gb2YgYHJlbmRlclBhZ2VgLlxuICAgKiBgcmVuZGVyUGFnZWAgY2FsbGJhY2sgZXhlY3V0ZXMgYFJlYWN0YCByZW5kZXJpbmcgbG9naWMgc3luY2hyb25vdXNseSB0byBzdXBwb3J0IHNlcnZlci1yZW5kZXJpbmcgd3JhcHBlcnNcbiAgICovIHN0YXRpYyBnZXRJbml0aWFsUHJvcHMoY3R4KSB7XG4gICAgICAgIHJldHVybiBjdHguZGVmYXVsdEdldEluaXRpYWxQcm9wcyhjdHgpO1xuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShIdG1sLCB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoSGVhZCwge30pLFxuICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiYm9keVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKE1haW4sIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoTmV4dFNjcmlwdCwge30pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICB9XG59XG4vLyBBZGQgYSBzcGVjaWFsIHByb3BlcnR5IHRvIHRoZSBidWlsdC1pbiBgRG9jdW1lbnRgIGNvbXBvbmVudCBzbyBsYXRlciB3ZSBjYW5cbi8vIGlkZW50aWZ5IGlmIGEgdXNlciBjdXN0b21pemVkIGBEb2N1bWVudGAgaXMgdXNlZCBvciBub3QuXG5jb25zdCBJbnRlcm5hbEZ1bmN0aW9uRG9jdW1lbnQgPSBmdW5jdGlvbiBJbnRlcm5hbEZ1bmN0aW9uRG9jdW1lbnQoKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKEh0bWwsIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoSGVhZCwge30pLFxuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJib2R5XCIsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKE1haW4sIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShOZXh0U2NyaXB0LCB7fSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59O1xuRG9jdW1lbnRbX2NvbnN0YW50cy5ORVhUX0JVSUxUSU5fRE9DVU1FTlRdID0gSW50ZXJuYWxGdW5jdGlvbkRvY3VtZW50O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1fZG9jdW1lbnQuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiSGVhZCIsIk5leHRTY3JpcHQiLCJIdG1sIiwiTWFpbiIsImRlZmF1bHQiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJEb2N1bWVudCIsIl9qc3hydW50aW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJfY29uc3RhbnRzIiwiX2dldHBhZ2VmaWxlcyIsIl9odG1sZXNjYXBlIiwiX2lzZXJyb3IiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJfaHRtbGNvbnRleHRzaGFyZWRydW50aW1lIiwib2JqIiwiX19lc01vZHVsZSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsImNhY2hlIiwiaGFzIiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsImxhcmdlUGFnZURhdGFXYXJuaW5ncyIsIlNldCIsImdldERvY3VtZW50RmlsZXMiLCJidWlsZE1hbmlmZXN0IiwicGF0aG5hbWUiLCJpbkFtcE1vZGUiLCJzaGFyZWRGaWxlcyIsImdldFBhZ2VGaWxlcyIsInBhZ2VGaWxlcyIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1JVTlRJTUUiLCJhbGxGaWxlcyIsImdldFBvbHlmaWxsU2NyaXB0cyIsImNvbnRleHQiLCJwcm9wcyIsImFzc2V0UHJlZml4IiwiYXNzZXRRdWVyeVN0cmluZyIsImRpc2FibGVPcHRpbWl6ZWRMb2FkaW5nIiwiY3Jvc3NPcmlnaW4iLCJwb2x5ZmlsbEZpbGVzIiwiZmlsdGVyIiwicG9seWZpbGwiLCJlbmRzV2l0aCIsIm1hcCIsImpzeCIsImRlZmVyIiwibm9uY2UiLCJub01vZHVsZSIsInNyYyIsImhhc0NvbXBvbmVudFByb3BzIiwiY2hpbGQiLCJBbXBTdHlsZXMiLCJzdHlsZXMiLCJjdXJTdHlsZXMiLCJBcnJheSIsImlzQXJyYXkiLCJjaGlsZHJlbiIsImhhc1N0eWxlcyIsImVsIiwiX2VsX3Byb3BzX2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX2VsX3Byb3BzIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJmb3JFYWNoIiwicHVzaCIsInN0eWxlIiwiam9pbiIsInJlcGxhY2UiLCJnZXREeW5hbWljQ2h1bmtzIiwiZmlsZXMiLCJkeW5hbWljSW1wb3J0cyIsImlzRGV2ZWxvcG1lbnQiLCJmaWxlIiwiaW5jbHVkZXMiLCJhc3luYyIsImVuY29kZVVSSSIsImdldFNjcmlwdHMiLCJfYnVpbGRNYW5pZmVzdF9sb3dQcmlvcml0eUZpbGVzIiwibm9ybWFsU2NyaXB0cyIsImxvd1ByaW9yaXR5U2NyaXB0cyIsImxvd1ByaW9yaXR5RmlsZXMiLCJnZXRQcmVOZXh0V29ya2VyU2NyaXB0cyIsInNjcmlwdExvYWRlciIsIm5leHRTY3JpcHRXb3JrZXJzIiwicGFydHl0b3duU25pcHBldCIsIl9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fIiwidXNlckRlZmluZWRDb25maWciLCJmaW5kIiwiX2NoaWxkX3Byb3BzX2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX2NoaWxkX3Byb3BzIiwibGVuZ3RoIiwianN4cyIsIkZyYWdtZW50Iiwid29ya2VyIiwiaW5kZXgiLCJzdHJhdGVneSIsInNjcmlwdENoaWxkcmVuIiwic2NyaXB0UHJvcHMiLCJzcmNQcm9wcyIsIkVycm9yIiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJlcnIiLCJjb2RlIiwiY29uc29sZSIsIndhcm4iLCJtZXNzYWdlIiwiZ2V0UHJlTmV4dFNjcmlwdHMiLCJ3ZWJXb3JrZXJTY3JpcHRzIiwiYmVmb3JlSW50ZXJhY3RpdmVTY3JpcHRzIiwiYmVmb3JlSW50ZXJhY3RpdmUiLCJzY3JpcHQiLCJnZXRIZWFkSFRNTFByb3BzIiwicmVzdFByb3BzIiwiaGVhZFByb3BzIiwiZ2V0QW1wUGF0aCIsImFtcFBhdGgiLCJhc1BhdGgiLCJnZXROZXh0Rm9udExpbmtUYWdzIiwibmV4dEZvbnRNYW5pZmVzdCIsImRhbmdlcm91c0FzUGF0aCIsInByZWNvbm5lY3QiLCJwcmVsb2FkIiwiYXBwRm9udHNFbnRyeSIsInBhZ2VzIiwicGFnZUZvbnRzRW50cnkiLCJwcmVsb2FkZWRGb250RmlsZXMiLCJwcmVjb25uZWN0VG9TZWxmIiwicGFnZXNVc2luZ1NpemVBZGp1c3QiLCJyZWwiLCJocmVmIiwiZm9udEZpbGUiLCJleHQiLCJleGVjIiwiYXMiLCJDb21wb25lbnQiLCJfIiwiY29udGV4dFR5cGUiLCJIdG1sQ29udGV4dCIsImdldENzc0xpbmtzIiwib3B0aW1pemVDc3MiLCJvcHRpbWl6ZUZvbnRzIiwiY3NzRmlsZXMiLCJmIiwidW5tYW5nZWRGaWxlcyIsImR5bmFtaWNDc3NGaWxlcyIsImZyb20iLCJleGlzdGluZyIsImNzc0xpbmtFbGVtZW50cyIsImlzU2hhcmVkRmlsZSIsImlzVW5tYW5hZ2VkRmlsZSIsInVuZGVmaW5lZCIsIm1ha2VTdHlsZXNoZWV0SW5lcnQiLCJnZXRQcmVsb2FkRHluYW1pY0NodW5rcyIsIkJvb2xlYW4iLCJnZXRQcmVsb2FkTWFpbkxpbmtzIiwicHJlbG9hZEZpbGVzIiwiZ2V0QmVmb3JlSW50ZXJhY3RpdmVJbmxpbmVTY3JpcHRzIiwiaHRtbCIsImlkIiwiX19ORVhUX0NST1NTX09SSUdJTiIsIm5vZGUiLCJDaGlsZHJlbiIsImMiLCJfY19wcm9wcyIsIl9jX3Byb3BzMSIsIk9QVElNSVpFRF9GT05UX1BST1ZJREVSUyIsInNvbWUiLCJ1cmwiLCJfY19wcm9wc19ocmVmIiwic3RhcnRzV2l0aCIsIm5ld1Byb3BzIiwiY2xvbmVFbGVtZW50IiwicmVuZGVyIiwiaHlicmlkQW1wIiwiY2Fub25pY2FsQmFzZSIsIl9fTkVYVF9EQVRBX18iLCJoZWFkVGFncyIsInVuc3RhYmxlX3J1bnRpbWVKUyIsInVuc3RhYmxlX0pzUHJlbG9hZCIsImRpc2FibGVSdW50aW1lSlMiLCJkaXNhYmxlSnNQcmVsb2FkIiwiZG9jQ29tcG9uZW50c1JlbmRlcmVkIiwiaGVhZCIsImNzc1ByZWxvYWRzIiwib3RoZXJIZWFkRWxlbWVudHMiLCJtZXRhVGFnIiwic3RyaWN0TmV4dEhlYWQiLCJjb250ZW50IiwiY29uY2F0IiwidG9BcnJheSIsImlzUmVhY3RIZWxtZXQiLCJfY2hpbGRfcHJvcHMxIiwiaGFzQW1waHRtbFJlbCIsImhhc0Nhbm9uaWNhbFJlbCIsImJhZFByb3AiLCJpbmRleE9mIiwia2V5cyIsInByb3AiLCJwYWdlIiwibmV4dEZvbnRMaW5rVGFncyIsImNvdW50IiwidG9TdHJpbmciLCJjbGVhbkFtcFBhdGgiLCJoYW5kbGVEb2N1bWVudFNjcmlwdExvYWRlckl0ZW1zIiwiX2NoaWxkcmVuX2ZpbmRfcHJvcHMiLCJfY2hpbGRyZW5fZmluZCIsIl9jaGlsZHJlbl9maW5kX3Byb3BzMSIsIl9jaGlsZHJlbl9maW5kMSIsInNjcmlwdExvYWRlckl0ZW1zIiwiaGVhZENoaWxkcmVuIiwiYm9keUNoaWxkcmVuIiwiY29tYmluZWRDaGlsZHJlbiIsIl9jaGlsZF90eXBlIiwiX19uZXh0U2NyaXB0IiwiZ2V0SW5saW5lU2NyaXB0U291cmNlIiwibGFyZ2VQYWdlRGF0YUJ5dGVzIiwiZGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJodG1sRXNjYXBlSnNvblN0cmluZyIsImJ5dGVzIiwiVGV4dEVuY29kZXIiLCJlbmNvZGUiLCJidWZmZXIiLCJieXRlTGVuZ3RoIiwiQnVmZmVyIiwicHJldHR5Qnl0ZXMiLCJhZGQiLCJhbXBEZXZGaWxlcyIsImRldkZpbGVzIiwibG9jYWxlIiwidXNlSHRtbENvbnRleHQiLCJsYW5nIiwiYW1wIiwiZ2V0SW5pdGlhbFByb3BzIiwiY3R4IiwiZGVmYXVsdEdldEluaXRpYWxQcm9wcyIsIkludGVybmFsRnVuY3Rpb25Eb2N1bWVudCIsIk5FWFRfQlVJTFRJTl9ET0NVTUVOVCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/pages/_document.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/pages/_error.js": +/*!************************************************!*\ + !*** ./node_modules/next/dist/pages/_error.js ***! + \************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return Error;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/cjs/_interop_require_default.cjs\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"react/jsx-runtime\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"react\"));\nconst _head = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/head */ \"./node_modules/next/dist/shared/lib/head.js\"));\nconst statusCodes = {\n 400: \"Bad Request\",\n 404: \"This page could not be found\",\n 405: \"Method Not Allowed\",\n 500: \"Internal Server Error\"\n};\nfunction _getInitialProps(param) {\n let { res, err } = param;\n const statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404;\n return {\n statusCode\n };\n}\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: \"100vh\",\n textAlign: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n desc: {\n lineHeight: \"48px\"\n },\n h1: {\n display: \"inline-block\",\n margin: \"0 20px 0 0\",\n paddingRight: 23,\n fontSize: 24,\n fontWeight: 500,\n verticalAlign: \"top\"\n },\n h2: {\n fontSize: 14,\n fontWeight: 400,\n lineHeight: \"28px\"\n },\n wrap: {\n display: \"inline-block\"\n }\n};\nclass Error extends _react.default.Component {\n render() {\n const { statusCode, withDarkMode = true } = this.props;\n const title = this.props.title || statusCodes[statusCode] || \"An unexpected error has occurred\";\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n style: styles.error,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_head.default, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: statusCode ? statusCode + \": \" + title : \"Application error: a client-side exception has occurred\"\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n style: styles.desc,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n /* CSS minified from\n body { margin: 0; color: #000; background: #fff; }\n .next-error-h1 {\n border-right: 1px solid rgba(0, 0, 0, .3);\n }\n\n ${\n withDarkMode\n ? `@media (prefers-color-scheme: dark) {\n body { color: #fff; background: #000; }\n .next-error-h1 {\n border-right: 1px solid rgba(255, 255, 255, .3);\n }\n }`\n : ''\n }\n */ __html: \"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\" + (withDarkMode ? \"@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\" : \"\")\n }\n }),\n statusCode ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n className: \"next-error-h1\",\n style: styles.h1,\n children: statusCode\n }) : null,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.wrap,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"h2\", {\n style: styles.h2,\n children: [\n this.props.title || statusCode ? title : /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: \"Application error: a client-side exception has occurred (see the browser console for more information)\"\n }),\n \".\"\n ]\n })\n })\n ]\n })\n ]\n });\n }\n}\nError.displayName = \"ErrorPage\";\nError.getInitialProps = _getInitialProps;\nError.origGetInitialProps = _getInitialProps;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=_error.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyw2R0FBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsNENBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsb0JBQU87QUFDdkUsTUFBTUksUUFBUSxXQUFXLEdBQUdMLHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyx1RUFBb0I7QUFDbkYsTUFBTUssY0FBYztJQUNoQixLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0FBQ1Q7QUFDQSxTQUFTQyxpQkFBaUJDLEtBQUs7SUFDM0IsSUFBSSxFQUFFQyxHQUFHLEVBQUVDLEdBQUcsRUFBRSxHQUFHRjtJQUNuQixNQUFNRyxhQUFhRixPQUFPQSxJQUFJRSxVQUFVLEdBQUdGLElBQUlFLFVBQVUsR0FBR0QsTUFBTUEsSUFBSUMsVUFBVSxHQUFHO0lBQ25GLE9BQU87UUFDSEE7SUFDSjtBQUNKO0FBQ0EsTUFBTUMsU0FBUztJQUNYQyxPQUFPO1FBQ0gsMEZBQTBGO1FBQzFGQyxZQUFZO1FBQ1pDLFFBQVE7UUFDUkMsV0FBVztRQUNYQyxTQUFTO1FBQ1RDLGVBQWU7UUFDZkMsWUFBWTtRQUNaQyxnQkFBZ0I7SUFDcEI7SUFDQUMsTUFBTTtRQUNGQyxZQUFZO0lBQ2hCO0lBQ0FDLElBQUk7UUFDQU4sU0FBUztRQUNUTyxRQUFRO1FBQ1JDLGNBQWM7UUFDZEMsVUFBVTtRQUNWQyxZQUFZO1FBQ1pDLGVBQWU7SUFDbkI7SUFDQUMsSUFBSTtRQUNBSCxVQUFVO1FBQ1ZDLFlBQVk7UUFDWkwsWUFBWTtJQUNoQjtJQUNBUSxNQUFNO1FBQ0ZiLFNBQVM7SUFDYjtBQUNKO0FBQ0EsTUFBTWxCLGNBQWNJLE9BQU80QixPQUFPLENBQUNDLFNBQVM7SUFDeENDLFNBQVM7UUFDTCxNQUFNLEVBQUV0QixVQUFVLEVBQUV1QixlQUFlLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQ0MsS0FBSztRQUN0RCxNQUFNQyxRQUFRLElBQUksQ0FBQ0QsS0FBSyxDQUFDQyxLQUFLLElBQUk5QixXQUFXLENBQUNLLFdBQVcsSUFBSTtRQUM3RCxPQUFxQixXQUFILEdBQUksSUFBR1QsWUFBWW1DLElBQUksRUFBRSxPQUFPO1lBQzlDQyxPQUFPMUIsT0FBT0MsS0FBSztZQUNuQjBCLFVBQVU7Z0JBQ04sV0FBVyxHQUFJLElBQUdyQyxZQUFZc0MsR0FBRyxFQUFFbkMsTUFBTTBCLE9BQU8sRUFBRTtvQkFDOUNRLFVBQXdCLFdBQUgsR0FBSSxJQUFHckMsWUFBWXNDLEdBQUcsRUFBRSxTQUFTO3dCQUNsREQsVUFBVTVCLGFBQWFBLGFBQWEsT0FBT3lCLFFBQVE7b0JBQ3ZEO2dCQUNKO2dCQUNBLFdBQVcsR0FBSSxJQUFHbEMsWUFBWW1DLElBQUksRUFBRSxPQUFPO29CQUN2Q0MsT0FBTzFCLE9BQU9TLElBQUk7b0JBQ2xCa0IsVUFBVTt3QkFDTixXQUFXLEdBQUksSUFBR3JDLFlBQVlzQyxHQUFHLEVBQUUsU0FBUzs0QkFDeENDLHlCQUF5QjtnQ0FDckI7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFnQmpCLEdBQUdDLFFBQVEsbUdBQW9HUixDQUFBQSxlQUFlLG9JQUFvSSxFQUFDOzRCQUN0UDt3QkFDSjt3QkFDQXZCLGFBQTJCLFdBQUgsR0FBSSxJQUFHVCxZQUFZc0MsR0FBRyxFQUFFLE1BQU07NEJBQ2xERyxXQUFXOzRCQUNYTCxPQUFPMUIsT0FBT1csRUFBRTs0QkFDaEJnQixVQUFVNUI7d0JBQ2QsS0FBSzt3QkFDTCxXQUFXLEdBQUksSUFBR1QsWUFBWXNDLEdBQUcsRUFBRSxPQUFPOzRCQUN0Q0YsT0FBTzFCLE9BQU9rQixJQUFJOzRCQUNsQlMsVUFBd0IsV0FBSCxHQUFJLElBQUdyQyxZQUFZbUMsSUFBSSxFQUFFLE1BQU07Z0NBQ2hEQyxPQUFPMUIsT0FBT2lCLEVBQUU7Z0NBQ2hCVSxVQUFVO29DQUNOLElBQUksQ0FBQ0osS0FBSyxDQUFDQyxLQUFLLElBQUl6QixhQUFheUIsUUFBc0IsV0FBSCxHQUFJLElBQUdsQyxZQUFZc0MsR0FBRyxFQUFFdEMsWUFBWTBDLFFBQVEsRUFBRTt3Q0FDOUZMLFVBQVU7b0NBQ2Q7b0NBQ0E7aUNBQ0g7NEJBQ0w7d0JBQ0o7cUJBQ0g7Z0JBQ0w7YUFDSDtRQUNMO0lBQ0o7QUFDSjtBQUNBeEMsTUFBTThDLFdBQVcsR0FBRztBQUNwQjlDLE1BQU0rQyxlQUFlLEdBQUd2QztBQUN4QlIsTUFBTWdELG1CQUFtQixHQUFHeEM7QUFFNUIsSUFBSSxDQUFDLE9BQU9aLFFBQVFvQyxPQUFPLEtBQUssY0FBZSxPQUFPcEMsUUFBUW9DLE9BQU8sS0FBSyxZQUFZcEMsUUFBUW9DLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3BDLFFBQVFvQyxPQUFPLENBQUNpQixVQUFVLEtBQUssYUFBYTtJQUNyS3ZELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW9DLE9BQU8sRUFBRSxjQUFjO1FBQUVuQyxPQUFPO0lBQUs7SUFDbkVILE9BQU93RCxNQUFNLENBQUN0RCxRQUFRb0MsT0FBTyxFQUFFcEM7SUFDL0J1RCxPQUFPdkQsT0FBTyxHQUFHQSxRQUFRb0MsT0FBTztBQUNsQyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19lcnJvci5qcz8xOGYyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfaGVhZCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4uL3NoYXJlZC9saWIvaGVhZFwiKSk7XG5jb25zdCBzdGF0dXNDb2RlcyA9IHtcbiAgICA0MDA6IFwiQmFkIFJlcXVlc3RcIixcbiAgICA0MDQ6IFwiVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZFwiLFxuICAgIDQwNTogXCJNZXRob2QgTm90IEFsbG93ZWRcIixcbiAgICA1MDA6IFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCJcbn07XG5mdW5jdGlvbiBfZ2V0SW5pdGlhbFByb3BzKHBhcmFtKSB7XG4gICAgbGV0IHsgcmVzLCBlcnIgfSA9IHBhcmFtO1xuICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXMgJiYgcmVzLnN0YXR1c0NvZGUgPyByZXMuc3RhdHVzQ29kZSA6IGVyciA/IGVyci5zdGF0dXNDb2RlIDogNDA0O1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGVcbiAgICB9O1xufVxuY29uc3Qgc3R5bGVzID0ge1xuICAgIGVycm9yOiB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvbW9kZXJuLW5vcm1hbGl6ZS9ibG9iL21haW4vbW9kZXJuLW5vcm1hbGl6ZS5jc3MjTDM4LUw1MlxuICAgICAgICBmb250RmFtaWx5OiAnc3lzdGVtLXVpLFwiU2Vnb2UgVUlcIixSb2JvdG8sSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWYsXCJBcHBsZSBDb2xvciBFbW9qaVwiLFwiU2Vnb2UgVUkgRW1vamlcIicsXG4gICAgICAgIGhlaWdodDogXCIxMDB2aFwiLFxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIlxuICAgIH0sXG4gICAgZGVzYzoge1xuICAgICAgICBsaW5lSGVpZ2h0OiBcIjQ4cHhcIlxuICAgIH0sXG4gICAgaDE6IHtcbiAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIixcbiAgICAgICAgbWFyZ2luOiBcIjAgMjBweCAwIDBcIixcbiAgICAgICAgcGFkZGluZ1JpZ2h0OiAyMyxcbiAgICAgICAgZm9udFNpemU6IDI0LFxuICAgICAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgICAgIHZlcnRpY2FsQWxpZ246IFwidG9wXCJcbiAgICB9LFxuICAgIGgyOiB7XG4gICAgICAgIGZvbnRTaXplOiAxNCxcbiAgICAgICAgZm9udFdlaWdodDogNDAwLFxuICAgICAgICBsaW5lSGVpZ2h0OiBcIjI4cHhcIlxuICAgIH0sXG4gICAgd3JhcDoge1xuICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiXG4gICAgfVxufTtcbmNsYXNzIEVycm9yIGV4dGVuZHMgX3JlYWN0LmRlZmF1bHQuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgd2l0aERhcmtNb2RlID0gdHJ1ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnByb3BzLnRpdGxlIHx8IHN0YXR1c0NvZGVzW3N0YXR1c0NvZGVdIHx8IFwiQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJyZWRcIjtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIHN0eWxlOiBzdHlsZXMuZXJyb3IsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2hlYWQuZGVmYXVsdCwge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInRpdGxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBzdGF0dXNDb2RlID8gc3RhdHVzQ29kZSArIFwiOiBcIiArIHRpdGxlIDogXCJBcHBsaWNhdGlvbiBlcnJvcjogYSBjbGllbnQtc2lkZSBleGNlcHRpb24gaGFzIG9jY3VycmVkXCJcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBzdHlsZXMuZGVzYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzdHlsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ1NTIG1pbmlmaWVkIGZyb21cbiAgICAgICAgICAgICAgICBib2R5IHsgbWFyZ2luOiAwOyBjb2xvcjogIzAwMDsgYmFja2dyb3VuZDogI2ZmZjsgfVxuICAgICAgICAgICAgICAgIC5uZXh0LWVycm9yLWgxIHtcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgLjMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICB3aXRoRGFya01vZGVcbiAgICAgICAgICAgICAgICAgICAgPyBgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgICAgICAgICAgYm9keSB7IGNvbG9yOiAjZmZmOyBiYWNrZ3JvdW5kOiAjMDAwOyB9XG4gICAgICAgICAgICAgICAgICAubmV4dC1lcnJvci1oMSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAqLyBfX2h0bWw6IFwiYm9keXtjb2xvcjojMDAwO2JhY2tncm91bmQ6I2ZmZjttYXJnaW46MH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfVwiICsgKHdpdGhEYXJrTW9kZSA/IFwiQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXtib2R5e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojMDAwfS5uZXh0LWVycm9yLWgxe2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMyl9fVwiIDogXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGUgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiaDFcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJuZXh0LWVycm9yLWgxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy5oMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogc3RhdHVzQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy53cmFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImgyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy5oMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudGl0bGUgfHwgc3RhdHVzQ29kZSA/IHRpdGxlIDogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIkFwcGxpY2F0aW9uIGVycm9yOiBhIGNsaWVudC1zaWRlIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQgKHNlZSB0aGUgYnJvd3NlciBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkVycm9yLmRpc3BsYXlOYW1lID0gXCJFcnJvclBhZ2VcIjtcbkVycm9yLmdldEluaXRpYWxQcm9wcyA9IF9nZXRJbml0aWFsUHJvcHM7XG5FcnJvci5vcmlnR2V0SW5pdGlhbFByb3BzID0gX2dldEluaXRpYWxQcm9wcztcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X2Vycm9yLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJFcnJvciIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfaGVhZCIsInN0YXR1c0NvZGVzIiwiX2dldEluaXRpYWxQcm9wcyIsInBhcmFtIiwicmVzIiwiZXJyIiwic3RhdHVzQ29kZSIsInN0eWxlcyIsImVycm9yIiwiZm9udEZhbWlseSIsImhlaWdodCIsInRleHRBbGlnbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiZGVzYyIsImxpbmVIZWlnaHQiLCJoMSIsIm1hcmdpbiIsInBhZGRpbmdSaWdodCIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsInZlcnRpY2FsQWxpZ24iLCJoMiIsIndyYXAiLCJkZWZhdWx0IiwiQ29tcG9uZW50IiwicmVuZGVyIiwid2l0aERhcmtNb2RlIiwicHJvcHMiLCJ0aXRsZSIsImpzeHMiLCJzdHlsZSIsImNoaWxkcmVuIiwianN4IiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJjbGFzc05hbWUiLCJGcmFnbWVudCIsImRpc3BsYXlOYW1lIiwiZ2V0SW5pdGlhbFByb3BzIiwib3JpZ0dldEluaXRpYWxQcm9wcyIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/pages/_error.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/amp-mode.js": +/*!*******************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/amp-mode.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isInAmpMode\", ({\n enumerable: true,\n get: function() {\n return isInAmpMode;\n }\n}));\nfunction isInAmpMode(param) {\n let { ampFirst = false, hybrid = false, hasQuery = false } = param === void 0 ? {} : param;\n return ampFirst || hybrid && hasQuery;\n} //# sourceMappingURL=amp-mode.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYW1wLW1vZGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILCtDQUE4QztJQUMxQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLFlBQVlDLEtBQUs7SUFDdEIsSUFBSSxFQUFFQyxXQUFXLEtBQUssRUFBRUMsU0FBUyxLQUFLLEVBQUVDLFdBQVcsS0FBSyxFQUFFLEdBQUdILFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSUE7SUFDckYsT0FBT0MsWUFBWUMsVUFBVUM7QUFDakMsRUFFQSxvQ0FBb0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2FtcC1tb2RlLmpzPzYyMzEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0luQW1wTW9kZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNJbkFtcE1vZGU7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBpc0luQW1wTW9kZShwYXJhbSkge1xuICAgIGxldCB7IGFtcEZpcnN0ID0gZmFsc2UsIGh5YnJpZCA9IGZhbHNlLCBoYXNRdWVyeSA9IGZhbHNlIH0gPSBwYXJhbSA9PT0gdm9pZCAwID8ge30gOiBwYXJhbTtcbiAgICByZXR1cm4gYW1wRmlyc3QgfHwgaHlicmlkICYmIGhhc1F1ZXJ5O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbXAtbW9kZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaXNJbkFtcE1vZGUiLCJwYXJhbSIsImFtcEZpcnN0IiwiaHlicmlkIiwiaGFzUXVlcnkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/amp-mode.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/constants.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/constants.js ***! + \********************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n MODERN_BROWSERSLIST_TARGET: function() {\n return _modernbrowserslisttarget.default;\n },\n COMPILER_NAMES: function() {\n return COMPILER_NAMES;\n },\n INTERNAL_HEADERS: function() {\n return INTERNAL_HEADERS;\n },\n COMPILER_INDEXES: function() {\n return COMPILER_INDEXES;\n },\n PHASE_EXPORT: function() {\n return PHASE_EXPORT;\n },\n PHASE_PRODUCTION_BUILD: function() {\n return PHASE_PRODUCTION_BUILD;\n },\n PHASE_PRODUCTION_SERVER: function() {\n return PHASE_PRODUCTION_SERVER;\n },\n PHASE_DEVELOPMENT_SERVER: function() {\n return PHASE_DEVELOPMENT_SERVER;\n },\n PHASE_TEST: function() {\n return PHASE_TEST;\n },\n PHASE_INFO: function() {\n return PHASE_INFO;\n },\n PAGES_MANIFEST: function() {\n return PAGES_MANIFEST;\n },\n APP_PATHS_MANIFEST: function() {\n return APP_PATHS_MANIFEST;\n },\n APP_PATH_ROUTES_MANIFEST: function() {\n return APP_PATH_ROUTES_MANIFEST;\n },\n BUILD_MANIFEST: function() {\n return BUILD_MANIFEST;\n },\n APP_BUILD_MANIFEST: function() {\n return APP_BUILD_MANIFEST;\n },\n FUNCTIONS_CONFIG_MANIFEST: function() {\n return FUNCTIONS_CONFIG_MANIFEST;\n },\n SUBRESOURCE_INTEGRITY_MANIFEST: function() {\n return SUBRESOURCE_INTEGRITY_MANIFEST;\n },\n NEXT_FONT_MANIFEST: function() {\n return NEXT_FONT_MANIFEST;\n },\n EXPORT_MARKER: function() {\n return EXPORT_MARKER;\n },\n EXPORT_DETAIL: function() {\n return EXPORT_DETAIL;\n },\n PRERENDER_MANIFEST: function() {\n return PRERENDER_MANIFEST;\n },\n ROUTES_MANIFEST: function() {\n return ROUTES_MANIFEST;\n },\n IMAGES_MANIFEST: function() {\n return IMAGES_MANIFEST;\n },\n SERVER_FILES_MANIFEST: function() {\n return SERVER_FILES_MANIFEST;\n },\n DEV_CLIENT_PAGES_MANIFEST: function() {\n return DEV_CLIENT_PAGES_MANIFEST;\n },\n MIDDLEWARE_MANIFEST: function() {\n return MIDDLEWARE_MANIFEST;\n },\n DEV_MIDDLEWARE_MANIFEST: function() {\n return DEV_MIDDLEWARE_MANIFEST;\n },\n REACT_LOADABLE_MANIFEST: function() {\n return REACT_LOADABLE_MANIFEST;\n },\n FONT_MANIFEST: function() {\n return FONT_MANIFEST;\n },\n SERVER_DIRECTORY: function() {\n return SERVER_DIRECTORY;\n },\n CONFIG_FILES: function() {\n return CONFIG_FILES;\n },\n BUILD_ID_FILE: function() {\n return BUILD_ID_FILE;\n },\n BLOCKED_PAGES: function() {\n return BLOCKED_PAGES;\n },\n CLIENT_PUBLIC_FILES_PATH: function() {\n return CLIENT_PUBLIC_FILES_PATH;\n },\n CLIENT_STATIC_FILES_PATH: function() {\n return CLIENT_STATIC_FILES_PATH;\n },\n STRING_LITERAL_DROP_BUNDLE: function() {\n return STRING_LITERAL_DROP_BUNDLE;\n },\n NEXT_BUILTIN_DOCUMENT: function() {\n return NEXT_BUILTIN_DOCUMENT;\n },\n BARREL_OPTIMIZATION_PREFIX: function() {\n return BARREL_OPTIMIZATION_PREFIX;\n },\n CLIENT_REFERENCE_MANIFEST: function() {\n return CLIENT_REFERENCE_MANIFEST;\n },\n SERVER_REFERENCE_MANIFEST: function() {\n return SERVER_REFERENCE_MANIFEST;\n },\n MIDDLEWARE_BUILD_MANIFEST: function() {\n return MIDDLEWARE_BUILD_MANIFEST;\n },\n MIDDLEWARE_REACT_LOADABLE_MANIFEST: function() {\n return MIDDLEWARE_REACT_LOADABLE_MANIFEST;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN_APP;\n },\n APP_CLIENT_INTERNALS: function() {\n return APP_CLIENT_INTERNALS;\n },\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH: function() {\n return CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH;\n },\n CLIENT_STATIC_FILES_RUNTIME_AMP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_AMP;\n },\n CLIENT_STATIC_FILES_RUNTIME_WEBPACK: function() {\n return CLIENT_STATIC_FILES_RUNTIME_WEBPACK;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\n },\n EDGE_RUNTIME_WEBPACK: function() {\n return EDGE_RUNTIME_WEBPACK;\n },\n STATIC_PROPS_ID: function() {\n return STATIC_PROPS_ID;\n },\n SERVER_PROPS_ID: function() {\n return SERVER_PROPS_ID;\n },\n GOOGLE_FONT_PROVIDER: function() {\n return GOOGLE_FONT_PROVIDER;\n },\n OPTIMIZED_FONT_PROVIDERS: function() {\n return OPTIMIZED_FONT_PROVIDERS;\n },\n DEFAULT_SERIF_FONT: function() {\n return DEFAULT_SERIF_FONT;\n },\n DEFAULT_SANS_SERIF_FONT: function() {\n return DEFAULT_SANS_SERIF_FONT;\n },\n STATIC_STATUS_PAGES: function() {\n return STATIC_STATUS_PAGES;\n },\n TRACE_OUTPUT_VERSION: function() {\n return TRACE_OUTPUT_VERSION;\n },\n TURBO_TRACE_DEFAULT_MEMORY_LIMIT: function() {\n return TURBO_TRACE_DEFAULT_MEMORY_LIMIT;\n },\n RSC_MODULE_TYPES: function() {\n return RSC_MODULE_TYPES;\n },\n EDGE_UNSUPPORTED_NODE_APIS: function() {\n return EDGE_UNSUPPORTED_NODE_APIS;\n },\n SYSTEM_ENTRYPOINTS: function() {\n return SYSTEM_ENTRYPOINTS;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/cjs/_interop_require_default.cjs\");\nconst _modernbrowserslisttarget = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./modern-browserslist-target */ \"./node_modules/next/dist/shared/lib/modern-browserslist-target.js\"));\nconst COMPILER_NAMES = {\n client: \"client\",\n server: \"server\",\n edgeServer: \"edge-server\"\n};\nconst INTERNAL_HEADERS = [\n \"x-invoke-error\",\n \"x-invoke-output\",\n \"x-invoke-path\",\n \"x-invoke-query\",\n \"x-invoke-status\",\n \"x-middleware-invoke\"\n];\nconst COMPILER_INDEXES = {\n [COMPILER_NAMES.client]: 0,\n [COMPILER_NAMES.server]: 1,\n [COMPILER_NAMES.edgeServer]: 2\n};\nconst PHASE_EXPORT = \"phase-export\";\nconst PHASE_PRODUCTION_BUILD = \"phase-production-build\";\nconst PHASE_PRODUCTION_SERVER = \"phase-production-server\";\nconst PHASE_DEVELOPMENT_SERVER = \"phase-development-server\";\nconst PHASE_TEST = \"phase-test\";\nconst PHASE_INFO = \"phase-info\";\nconst PAGES_MANIFEST = \"pages-manifest.json\";\nconst APP_PATHS_MANIFEST = \"app-paths-manifest.json\";\nconst APP_PATH_ROUTES_MANIFEST = \"app-path-routes-manifest.json\";\nconst BUILD_MANIFEST = \"build-manifest.json\";\nconst APP_BUILD_MANIFEST = \"app-build-manifest.json\";\nconst FUNCTIONS_CONFIG_MANIFEST = \"functions-config-manifest.json\";\nconst SUBRESOURCE_INTEGRITY_MANIFEST = \"subresource-integrity-manifest\";\nconst NEXT_FONT_MANIFEST = \"next-font-manifest\";\nconst EXPORT_MARKER = \"export-marker.json\";\nconst EXPORT_DETAIL = \"export-detail.json\";\nconst PRERENDER_MANIFEST = \"prerender-manifest.json\";\nconst ROUTES_MANIFEST = \"routes-manifest.json\";\nconst IMAGES_MANIFEST = \"images-manifest.json\";\nconst SERVER_FILES_MANIFEST = \"required-server-files.json\";\nconst DEV_CLIENT_PAGES_MANIFEST = \"_devPagesManifest.json\";\nconst MIDDLEWARE_MANIFEST = \"middleware-manifest.json\";\nconst DEV_MIDDLEWARE_MANIFEST = \"_devMiddlewareManifest.json\";\nconst REACT_LOADABLE_MANIFEST = \"react-loadable-manifest.json\";\nconst FONT_MANIFEST = \"font-manifest.json\";\nconst SERVER_DIRECTORY = \"server\";\nconst CONFIG_FILES = [\n \"next.config.js\",\n \"next.config.mjs\"\n];\nconst BUILD_ID_FILE = \"BUILD_ID\";\nconst BLOCKED_PAGES = [\n \"/_document\",\n \"/_app\",\n \"/_error\"\n];\nconst CLIENT_PUBLIC_FILES_PATH = \"public\";\nconst CLIENT_STATIC_FILES_PATH = \"static\";\nconst STRING_LITERAL_DROP_BUNDLE = \"__NEXT_DROP_CLIENT_FILE__\";\nconst NEXT_BUILTIN_DOCUMENT = \"__NEXT_BUILTIN_DOCUMENT__\";\nconst BARREL_OPTIMIZATION_PREFIX = \"__barrel_optimize__\";\nconst CLIENT_REFERENCE_MANIFEST = \"client-reference-manifest\";\nconst SERVER_REFERENCE_MANIFEST = \"server-reference-manifest\";\nconst MIDDLEWARE_BUILD_MANIFEST = \"middleware-build-manifest\";\nconst MIDDLEWARE_REACT_LOADABLE_MANIFEST = \"middleware-react-loadable-manifest\";\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN = \"main\";\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = \"\" + CLIENT_STATIC_FILES_RUNTIME_MAIN + \"-app\";\nconst APP_CLIENT_INTERNALS = \"app-pages-internals\";\nconst CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = \"react-refresh\";\nconst CLIENT_STATIC_FILES_RUNTIME_AMP = \"amp\";\nconst CLIENT_STATIC_FILES_RUNTIME_WEBPACK = \"webpack\";\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS = \"polyfills\";\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(CLIENT_STATIC_FILES_RUNTIME_POLYFILLS);\nconst EDGE_RUNTIME_WEBPACK = \"edge-runtime-webpack\";\nconst STATIC_PROPS_ID = \"__N_SSG\";\nconst SERVER_PROPS_ID = \"__N_SSP\";\nconst GOOGLE_FONT_PROVIDER = \"https://fonts.googleapis.com/\";\nconst OPTIMIZED_FONT_PROVIDERS = [\n {\n url: GOOGLE_FONT_PROVIDER,\n preconnect: \"https://fonts.gstatic.com\"\n },\n {\n url: \"https://use.typekit.net\",\n preconnect: \"https://use.typekit.net\"\n }\n];\nconst DEFAULT_SERIF_FONT = {\n name: \"Times New Roman\",\n xAvgCharWidth: 821,\n azAvgWidth: 854.3953488372093,\n unitsPerEm: 2048\n};\nconst DEFAULT_SANS_SERIF_FONT = {\n name: \"Arial\",\n xAvgCharWidth: 904,\n azAvgWidth: 934.5116279069767,\n unitsPerEm: 2048\n};\nconst STATIC_STATUS_PAGES = [\n \"/500\"\n];\nconst TRACE_OUTPUT_VERSION = 1;\nconst TURBO_TRACE_DEFAULT_MEMORY_LIMIT = 6000;\nconst RSC_MODULE_TYPES = {\n client: \"client\",\n server: \"server\"\n};\nconst EDGE_UNSUPPORTED_NODE_APIS = [\n \"clearImmediate\",\n \"setImmediate\",\n \"BroadcastChannel\",\n \"ByteLengthQueuingStrategy\",\n \"CompressionStream\",\n \"CountQueuingStrategy\",\n \"DecompressionStream\",\n \"DomException\",\n \"MessageChannel\",\n \"MessageEvent\",\n \"MessagePort\",\n \"ReadableByteStreamController\",\n \"ReadableStreamBYOBRequest\",\n \"ReadableStreamDefaultController\",\n \"TransformStreamDefaultController\",\n \"WritableStreamDefaultController\"\n];\nconst SYSTEM_ENTRYPOINTS = new Set([\n CLIENT_STATIC_FILES_RUNTIME_MAIN,\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH,\n CLIENT_STATIC_FILES_RUNTIME_AMP,\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP\n]);\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=constants.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBZ0VOO0FBQ0EsU0FBU2dFLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUl0RSxPQUFPQyxjQUFjLENBQUNvRSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFsRSxTQUFTO0lBQ2JHLDRCQUE0QjtRQUN4QixPQUFPcUUsMEJBQTBCQyxPQUFPO0lBQzVDO0lBQ0FyRSxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLGtCQUFrQjtRQUNkLE9BQU9BO0lBQ1g7SUFDQUMsa0JBQWtCO1FBQ2QsT0FBT0E7SUFDWDtJQUNBQyxjQUFjO1FBQ1YsT0FBT0E7SUFDWDtJQUNBQyx3QkFBd0I7UUFDcEIsT0FBT0E7SUFDWDtJQUNBQyx5QkFBeUI7UUFDckIsT0FBT0E7SUFDWDtJQUNBQywwQkFBMEI7UUFDdEIsT0FBT0E7SUFDWDtJQUNBQyxZQUFZO1FBQ1IsT0FBT0E7SUFDWDtJQUNBQyxZQUFZO1FBQ1IsT0FBT0E7SUFDWDtJQUNBQyxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLG9CQUFvQjtRQUNoQixPQUFPQTtJQUNYO0lBQ0FDLDBCQUEwQjtRQUN0QixPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7SUFDQUMsMkJBQTJCO1FBQ3ZCLE9BQU9BO0lBQ1g7SUFDQUMsZ0NBQWdDO1FBQzVCLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7SUFDQUMsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7SUFDQUMsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0lBQ0FDLHVCQUF1QjtRQUNuQixPQUFPQTtJQUNYO0lBQ0FDLDJCQUEyQjtRQUN2QixPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLGVBQWU7UUFDWCxPQUFPQTtJQUNYO0lBQ0FDLGtCQUFrQjtRQUNkLE9BQU9BO0lBQ1g7SUFDQUMsY0FBYztRQUNWLE9BQU9BO0lBQ1g7SUFDQUMsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsMEJBQTBCO1FBQ3RCLE9BQU9BO0lBQ1g7SUFDQUMsMEJBQTBCO1FBQ3RCLE9BQU9BO0lBQ1g7SUFDQUMsNEJBQTRCO1FBQ3hCLE9BQU9BO0lBQ1g7SUFDQUMsdUJBQXVCO1FBQ25CLE9BQU9BO0lBQ1g7SUFDQUMsNEJBQTRCO1FBQ3hCLE9BQU9BO0lBQ1g7SUFDQUMsMkJBQTJCO1FBQ3ZCLE9BQU9BO0lBQ1g7SUFDQUMsMkJBQTJCO1FBQ3ZCLE9BQU9BO0lBQ1g7SUFDQUMsMkJBQTJCO1FBQ3ZCLE9BQU9BO0lBQ1g7SUFDQUMsb0NBQW9DO1FBQ2hDLE9BQU9BO0lBQ1g7SUFDQUMsa0NBQWtDO1FBQzlCLE9BQU9BO0lBQ1g7SUFDQUMsc0NBQXNDO1FBQ2xDLE9BQU9BO0lBQ1g7SUFDQUMsc0JBQXNCO1FBQ2xCLE9BQU9BO0lBQ1g7SUFDQUMsMkNBQTJDO1FBQ3ZDLE9BQU9BO0lBQ1g7SUFDQUMsaUNBQWlDO1FBQzdCLE9BQU9BO0lBQ1g7SUFDQUMscUNBQXFDO1FBQ2pDLE9BQU9BO0lBQ1g7SUFDQUMsdUNBQXVDO1FBQ25DLE9BQU9BO0lBQ1g7SUFDQUMsOENBQThDO1FBQzFDLE9BQU9BO0lBQ1g7SUFDQUMsc0JBQXNCO1FBQ2xCLE9BQU9BO0lBQ1g7SUFDQUMsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0lBQ0FDLHNCQUFzQjtRQUNsQixPQUFPQTtJQUNYO0lBQ0FDLDBCQUEwQjtRQUN0QixPQUFPQTtJQUNYO0lBQ0FDLG9CQUFvQjtRQUNoQixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLHNCQUFzQjtRQUNsQixPQUFPQTtJQUNYO0lBQ0FDLGtDQUFrQztRQUM5QixPQUFPQTtJQUNYO0lBQ0FDLGtCQUFrQjtRQUNkLE9BQU9BO0lBQ1g7SUFDQUMsNEJBQTRCO1FBQ3hCLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1TLDJCQUEyQkMsbUJBQU9BLENBQUMsNkdBQXlDO0FBQ2xGLE1BQU1ILDRCQUE0QixXQUFXLEdBQUdFLHlCQUF5QkUsQ0FBQyxDQUFDRCxtQkFBT0EsQ0FBQyx1R0FBOEI7QUFDakgsTUFBTXZFLGlCQUFpQjtJQUNuQnlFLFFBQVE7SUFDUkMsUUFBUTtJQUNSQyxZQUFZO0FBQ2hCO0FBQ0EsTUFBTTFFLG1CQUFtQjtJQUNyQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDSDtBQUNELE1BQU1DLG1CQUFtQjtJQUNyQixDQUFDRixlQUFleUUsTUFBTSxDQUFDLEVBQUU7SUFDekIsQ0FBQ3pFLGVBQWUwRSxNQUFNLENBQUMsRUFBRTtJQUN6QixDQUFDMUUsZUFBZTJFLFVBQVUsQ0FBQyxFQUFFO0FBQ2pDO0FBQ0EsTUFBTXhFLGVBQWU7QUFDckIsTUFBTUMseUJBQXlCO0FBQy9CLE1BQU1DLDBCQUEwQjtBQUNoQyxNQUFNQywyQkFBMkI7QUFDakMsTUFBTUMsYUFBYTtBQUNuQixNQUFNQyxhQUFhO0FBQ25CLE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyxxQkFBcUI7QUFDM0IsTUFBTUMsMkJBQTJCO0FBQ2pDLE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyxxQkFBcUI7QUFDM0IsTUFBTUMsNEJBQTRCO0FBQ2xDLE1BQU1DLGlDQUFpQztBQUN2QyxNQUFNQyxxQkFBcUI7QUFDM0IsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyxxQkFBcUI7QUFDM0IsTUFBTUMsa0JBQWtCO0FBQ3hCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyx3QkFBd0I7QUFDOUIsTUFBTUMsNEJBQTRCO0FBQ2xDLE1BQU1DLHNCQUFzQjtBQUM1QixNQUFNQywwQkFBMEI7QUFDaEMsTUFBTUMsMEJBQTBCO0FBQ2hDLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyxtQkFBbUI7QUFDekIsTUFBTUMsZUFBZTtJQUNqQjtJQUNBO0NBQ0g7QUFDRCxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsZ0JBQWdCO0lBQ2xCO0lBQ0E7SUFDQTtDQUNIO0FBQ0QsTUFBTUMsMkJBQTJCO0FBQ2pDLE1BQU1DLDJCQUEyQjtBQUNqQyxNQUFNQyw2QkFBNkI7QUFDbkMsTUFBTUMsd0JBQXdCO0FBQzlCLE1BQU1DLDZCQUE2QjtBQUNuQyxNQUFNQyw0QkFBNEI7QUFDbEMsTUFBTUMsNEJBQTRCO0FBQ2xDLE1BQU1DLDRCQUE0QjtBQUNsQyxNQUFNQyxxQ0FBcUM7QUFDM0MsTUFBTUMsbUNBQW1DO0FBQ3pDLE1BQU1DLHVDQUF1QyxLQUFLRCxtQ0FBbUM7QUFDckYsTUFBTUUsdUJBQXVCO0FBQzdCLE1BQU1DLDRDQUE0QztBQUNsRCxNQUFNQyxrQ0FBa0M7QUFDeEMsTUFBTUMsc0NBQXNDO0FBQzVDLE1BQU1DLHdDQUF3QztBQUM5QyxNQUFNQywrQ0FBK0M0QixPQUFPN0I7QUFDNUQsTUFBTUUsdUJBQXVCO0FBQzdCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyxrQkFBa0I7QUFDeEIsTUFBTUMsdUJBQXVCO0FBQzdCLE1BQU1DLDJCQUEyQjtJQUM3QjtRQUNJd0IsS0FBS3pCO1FBQ0wwQixZQUFZO0lBQ2hCO0lBQ0E7UUFDSUQsS0FBSztRQUNMQyxZQUFZO0lBQ2hCO0NBQ0g7QUFDRCxNQUFNeEIscUJBQXFCO0lBQ3ZCVyxNQUFNO0lBQ05jLGVBQWU7SUFDZkMsWUFBWTtJQUNaQyxZQUFZO0FBQ2hCO0FBQ0EsTUFBTTFCLDBCQUEwQjtJQUM1QlUsTUFBTTtJQUNOYyxlQUFlO0lBQ2ZDLFlBQVk7SUFDWkMsWUFBWTtBQUNoQjtBQUNBLE1BQU16QixzQkFBc0I7SUFDeEI7Q0FDSDtBQUNELE1BQU1DLHVCQUF1QjtBQUM3QixNQUFNQyxtQ0FBbUM7QUFDekMsTUFBTUMsbUJBQW1CO0lBQ3JCYyxRQUFRO0lBQ1JDLFFBQVE7QUFDWjtBQUNBLE1BQU1kLDZCQUE2QjtJQUMvQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNIO0FBQ0QsTUFBTUMscUJBQXFCLElBQUlxQixJQUFJO0lBQy9CekM7SUFDQUc7SUFDQUM7SUFDQUg7Q0FDSDtBQUVELElBQUksQ0FBQyxPQUFPOUMsUUFBUXlFLE9BQU8sS0FBSyxjQUFlLE9BQU96RSxRQUFReUUsT0FBTyxLQUFLLFlBQVl6RSxRQUFReUUsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPekUsUUFBUXlFLE9BQU8sQ0FBQ2MsVUFBVSxLQUFLLGFBQWE7SUFDckt6RixPQUFPQyxjQUFjLENBQUNDLFFBQVF5RSxPQUFPLEVBQUUsY0FBYztRQUFFeEUsT0FBTztJQUFLO0lBQ25FSCxPQUFPMEYsTUFBTSxDQUFDeEYsUUFBUXlFLE9BQU8sRUFBRXpFO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVF5RSxPQUFPO0FBQ2xDLEVBRUEscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9jb25zdGFudHMuanM/ODhkNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUOiBudWxsLFxuICAgIENPTVBJTEVSX05BTUVTOiBudWxsLFxuICAgIElOVEVSTkFMX0hFQURFUlM6IG51bGwsXG4gICAgQ09NUElMRVJfSU5ERVhFUzogbnVsbCxcbiAgICBQSEFTRV9FWFBPUlQ6IG51bGwsXG4gICAgUEhBU0VfUFJPRFVDVElPTl9CVUlMRDogbnVsbCxcbiAgICBQSEFTRV9QUk9EVUNUSU9OX1NFUlZFUjogbnVsbCxcbiAgICBQSEFTRV9ERVZFTE9QTUVOVF9TRVJWRVI6IG51bGwsXG4gICAgUEhBU0VfVEVTVDogbnVsbCxcbiAgICBQSEFTRV9JTkZPOiBudWxsLFxuICAgIFBBR0VTX01BTklGRVNUOiBudWxsLFxuICAgIEFQUF9QQVRIU19NQU5JRkVTVDogbnVsbCxcbiAgICBBUFBfUEFUSF9ST1VURVNfTUFOSUZFU1Q6IG51bGwsXG4gICAgQlVJTERfTUFOSUZFU1Q6IG51bGwsXG4gICAgQVBQX0JVSUxEX01BTklGRVNUOiBudWxsLFxuICAgIEZVTkNUSU9OU19DT05GSUdfTUFOSUZFU1Q6IG51bGwsXG4gICAgU1VCUkVTT1VSQ0VfSU5URUdSSVRZX01BTklGRVNUOiBudWxsLFxuICAgIE5FWFRfRk9OVF9NQU5JRkVTVDogbnVsbCxcbiAgICBFWFBPUlRfTUFSS0VSOiBudWxsLFxuICAgIEVYUE9SVF9ERVRBSUw6IG51bGwsXG4gICAgUFJFUkVOREVSX01BTklGRVNUOiBudWxsLFxuICAgIFJPVVRFU19NQU5JRkVTVDogbnVsbCxcbiAgICBJTUFHRVNfTUFOSUZFU1Q6IG51bGwsXG4gICAgU0VSVkVSX0ZJTEVTX01BTklGRVNUOiBudWxsLFxuICAgIERFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1Q6IG51bGwsXG4gICAgTUlERExFV0FSRV9NQU5JRkVTVDogbnVsbCxcbiAgICBERVZfTUlERExFV0FSRV9NQU5JRkVTVDogbnVsbCxcbiAgICBSRUFDVF9MT0FEQUJMRV9NQU5JRkVTVDogbnVsbCxcbiAgICBGT05UX01BTklGRVNUOiBudWxsLFxuICAgIFNFUlZFUl9ESVJFQ1RPUlk6IG51bGwsXG4gICAgQ09ORklHX0ZJTEVTOiBudWxsLFxuICAgIEJVSUxEX0lEX0ZJTEU6IG51bGwsXG4gICAgQkxPQ0tFRF9QQUdFUzogbnVsbCxcbiAgICBDTElFTlRfUFVCTElDX0ZJTEVTX1BBVEg6IG51bGwsXG4gICAgQ0xJRU5UX1NUQVRJQ19GSUxFU19QQVRIOiBudWxsLFxuICAgIFNUUklOR19MSVRFUkFMX0RST1BfQlVORExFOiBudWxsLFxuICAgIE5FWFRfQlVJTFRJTl9ET0NVTUVOVDogbnVsbCxcbiAgICBCQVJSRUxfT1BUSU1JWkFUSU9OX1BSRUZJWDogbnVsbCxcbiAgICBDTElFTlRfUkVGRVJFTkNFX01BTklGRVNUOiBudWxsLFxuICAgIFNFUlZFUl9SRUZFUkVOQ0VfTUFOSUZFU1Q6IG51bGwsXG4gICAgTUlERExFV0FSRV9CVUlMRF9NQU5JRkVTVDogbnVsbCxcbiAgICBNSURETEVXQVJFX1JFQUNUX0xPQURBQkxFX01BTklGRVNUOiBudWxsLFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOOiBudWxsLFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOX0FQUDogbnVsbCxcbiAgICBBUFBfQ0xJRU5UX0lOVEVSTkFMUzogbnVsbCxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUkVBQ1RfUkVGUkVTSDogbnVsbCxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QOiBudWxsLFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9XRUJQQUNLOiBudWxsLFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFM6IG51bGwsXG4gICAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMU19TWU1CT0w6IG51bGwsXG4gICAgRURHRV9SVU5USU1FX1dFQlBBQ0s6IG51bGwsXG4gICAgU1RBVElDX1BST1BTX0lEOiBudWxsLFxuICAgIFNFUlZFUl9QUk9QU19JRDogbnVsbCxcbiAgICBHT09HTEVfRk9OVF9QUk9WSURFUjogbnVsbCxcbiAgICBPUFRJTUlaRURfRk9OVF9QUk9WSURFUlM6IG51bGwsXG4gICAgREVGQVVMVF9TRVJJRl9GT05UOiBudWxsLFxuICAgIERFRkFVTFRfU0FOU19TRVJJRl9GT05UOiBudWxsLFxuICAgIFNUQVRJQ19TVEFUVVNfUEFHRVM6IG51bGwsXG4gICAgVFJBQ0VfT1VUUFVUX1ZFUlNJT046IG51bGwsXG4gICAgVFVSQk9fVFJBQ0VfREVGQVVMVF9NRU1PUllfTElNSVQ6IG51bGwsXG4gICAgUlNDX01PRFVMRV9UWVBFUzogbnVsbCxcbiAgICBFREdFX1VOU1VQUE9SVEVEX05PREVfQVBJUzogbnVsbCxcbiAgICBTWVNURU1fRU5UUllQT0lOVFM6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX21vZGVybmJyb3dzZXJzbGlzdHRhcmdldC5kZWZhdWx0O1xuICAgIH0sXG4gICAgQ09NUElMRVJfTkFNRVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQ09NUElMRVJfTkFNRVM7XG4gICAgfSxcbiAgICBJTlRFUk5BTF9IRUFERVJTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIElOVEVSTkFMX0hFQURFUlM7XG4gICAgfSxcbiAgICBDT01QSUxFUl9JTkRFWEVTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENPTVBJTEVSX0lOREVYRVM7XG4gICAgfSxcbiAgICBQSEFTRV9FWFBPUlQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUEhBU0VfRVhQT1JUO1xuICAgIH0sXG4gICAgUEhBU0VfUFJPRFVDVElPTl9CVUlMRDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQSEFTRV9QUk9EVUNUSU9OX0JVSUxEO1xuICAgIH0sXG4gICAgUEhBU0VfUFJPRFVDVElPTl9TRVJWRVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUEhBU0VfUFJPRFVDVElPTl9TRVJWRVI7XG4gICAgfSxcbiAgICBQSEFTRV9ERVZFTE9QTUVOVF9TRVJWRVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUEhBU0VfREVWRUxPUE1FTlRfU0VSVkVSO1xuICAgIH0sXG4gICAgUEhBU0VfVEVTVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQSEFTRV9URVNUO1xuICAgIH0sXG4gICAgUEhBU0VfSU5GTzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQSEFTRV9JTkZPO1xuICAgIH0sXG4gICAgUEFHRVNfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUEFHRVNfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBBUFBfUEFUSFNfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQVBQX1BBVEhTX01BTklGRVNUO1xuICAgIH0sXG4gICAgQVBQX1BBVEhfUk9VVEVTX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFQUF9QQVRIX1JPVVRFU19NQU5JRkVTVDtcbiAgICB9LFxuICAgIEJVSUxEX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEJVSUxEX01BTklGRVNUO1xuICAgIH0sXG4gICAgQVBQX0JVSUxEX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFQUF9CVUlMRF9NQU5JRkVTVDtcbiAgICB9LFxuICAgIEZVTkNUSU9OU19DT05GSUdfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRlVOQ1RJT05TX0NPTkZJR19NQU5JRkVTVDtcbiAgICB9LFxuICAgIFNVQlJFU09VUkNFX0lOVEVHUklUWV9NQU5JRkVTVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTVUJSRVNPVVJDRV9JTlRFR1JJVFlfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBORVhUX0ZPTlRfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9GT05UX01BTklGRVNUO1xuICAgIH0sXG4gICAgRVhQT1JUX01BUktFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBFWFBPUlRfTUFSS0VSO1xuICAgIH0sXG4gICAgRVhQT1JUX0RFVEFJTDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBFWFBPUlRfREVUQUlMO1xuICAgIH0sXG4gICAgUFJFUkVOREVSX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBSRVJFTkRFUl9NQU5JRkVTVDtcbiAgICB9LFxuICAgIFJPVVRFU19NQU5JRkVTVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBST1VURVNfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBJTUFHRVNfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSU1BR0VTX01BTklGRVNUO1xuICAgIH0sXG4gICAgU0VSVkVSX0ZJTEVTX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNFUlZFUl9GSUxFU19NQU5JRkVTVDtcbiAgICB9LFxuICAgIERFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gREVWX0NMSUVOVF9QQUdFU19NQU5JRkVTVDtcbiAgICB9LFxuICAgIE1JRERMRVdBUkVfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTUlERExFV0FSRV9NQU5JRkVTVDtcbiAgICB9LFxuICAgIERFVl9NSURETEVXQVJFX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIERFVl9NSURETEVXQVJFX01BTklGRVNUO1xuICAgIH0sXG4gICAgUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBGT05UX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEZPTlRfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBTRVJWRVJfRElSRUNUT1JZOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNFUlZFUl9ESVJFQ1RPUlk7XG4gICAgfSxcbiAgICBDT05GSUdfRklMRVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQ09ORklHX0ZJTEVTO1xuICAgIH0sXG4gICAgQlVJTERfSURfRklMRTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBCVUlMRF9JRF9GSUxFO1xuICAgIH0sXG4gICAgQkxPQ0tFRF9QQUdFUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBCTE9DS0VEX1BBR0VTO1xuICAgIH0sXG4gICAgQ0xJRU5UX1BVQkxJQ19GSUxFU19QQVRIOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENMSUVOVF9QVUJMSUNfRklMRVNfUEFUSDtcbiAgICB9LFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUEFUSDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDTElFTlRfU1RBVElDX0ZJTEVTX1BBVEg7XG4gICAgfSxcbiAgICBTVFJJTkdfTElURVJBTF9EUk9QX0JVTkRMRTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTVFJJTkdfTElURVJBTF9EUk9QX0JVTkRMRTtcbiAgICB9LFxuICAgIE5FWFRfQlVJTFRJTl9ET0NVTUVOVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0JVSUxUSU5fRE9DVU1FTlQ7XG4gICAgfSxcbiAgICBCQVJSRUxfT1BUSU1JWkFUSU9OX1BSRUZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBCQVJSRUxfT1BUSU1JWkFUSU9OX1BSRUZJWDtcbiAgICB9LFxuICAgIENMSUVOVF9SRUZFUkVOQ0VfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQ0xJRU5UX1JFRkVSRU5DRV9NQU5JRkVTVDtcbiAgICB9LFxuICAgIFNFUlZFUl9SRUZFUkVOQ0VfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU0VSVkVSX1JFRkVSRU5DRV9NQU5JRkVTVDtcbiAgICB9LFxuICAgIE1JRERMRVdBUkVfQlVJTERfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTUlERExFV0FSRV9CVUlMRF9NQU5JRkVTVDtcbiAgICB9LFxuICAgIE1JRERMRVdBUkVfUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTUlERExFV0FSRV9SRUFDVF9MT0FEQUJMRV9NQU5JRkVTVDtcbiAgICB9LFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOO1xuICAgIH0sXG4gICAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU5fQVBQOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOX0FQUDtcbiAgICB9LFxuICAgIEFQUF9DTElFTlRfSU5URVJOQUxTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFQUF9DTElFTlRfSU5URVJOQUxTO1xuICAgIH0sXG4gICAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1JFQUNUX1JFRlJFU0g6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1JFQUNUX1JFRlJFU0g7XG4gICAgfSxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9BTVA7XG4gICAgfSxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfV0VCUEFDSzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfV0VCUEFDSztcbiAgICB9LFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMUztcbiAgICB9LFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFNfU1lNQk9MOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFNfU1lNQk9MO1xuICAgIH0sXG4gICAgRURHRV9SVU5USU1FX1dFQlBBQ0s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRURHRV9SVU5USU1FX1dFQlBBQ0s7XG4gICAgfSxcbiAgICBTVEFUSUNfUFJPUFNfSUQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1RBVElDX1BST1BTX0lEO1xuICAgIH0sXG4gICAgU0VSVkVSX1BST1BTX0lEOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNFUlZFUl9QUk9QU19JRDtcbiAgICB9LFxuICAgIEdPT0dMRV9GT05UX1BST1ZJREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEdPT0dMRV9GT05UX1BST1ZJREVSO1xuICAgIH0sXG4gICAgT1BUSU1JWkVEX0ZPTlRfUFJPVklERVJTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE9QVElNSVpFRF9GT05UX1BST1ZJREVSUztcbiAgICB9LFxuICAgIERFRkFVTFRfU0VSSUZfRk9OVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBERUZBVUxUX1NFUklGX0ZPTlQ7XG4gICAgfSxcbiAgICBERUZBVUxUX1NBTlNfU0VSSUZfRk9OVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBERUZBVUxUX1NBTlNfU0VSSUZfRk9OVDtcbiAgICB9LFxuICAgIFNUQVRJQ19TVEFUVVNfUEFHRVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1RBVElDX1NUQVRVU19QQUdFUztcbiAgICB9LFxuICAgIFRSQUNFX09VVFBVVF9WRVJTSU9OOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFRSQUNFX09VVFBVVF9WRVJTSU9OO1xuICAgIH0sXG4gICAgVFVSQk9fVFJBQ0VfREVGQVVMVF9NRU1PUllfTElNSVQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gVFVSQk9fVFJBQ0VfREVGQVVMVF9NRU1PUllfTElNSVQ7XG4gICAgfSxcbiAgICBSU0NfTU9EVUxFX1RZUEVTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19NT0RVTEVfVFlQRVM7XG4gICAgfSxcbiAgICBFREdFX1VOU1VQUE9SVEVEX05PREVfQVBJUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBFREdFX1VOU1VQUE9SVEVEX05PREVfQVBJUztcbiAgICB9LFxuICAgIFNZU1RFTV9FTlRSWVBPSU5UUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTWVNURU1fRU5UUllQT0lOVFM7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX21vZGVybmJyb3dzZXJzbGlzdHRhcmdldCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4vbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXRcIikpO1xuY29uc3QgQ09NUElMRVJfTkFNRVMgPSB7XG4gICAgY2xpZW50OiBcImNsaWVudFwiLFxuICAgIHNlcnZlcjogXCJzZXJ2ZXJcIixcbiAgICBlZGdlU2VydmVyOiBcImVkZ2Utc2VydmVyXCJcbn07XG5jb25zdCBJTlRFUk5BTF9IRUFERVJTID0gW1xuICAgIFwieC1pbnZva2UtZXJyb3JcIixcbiAgICBcIngtaW52b2tlLW91dHB1dFwiLFxuICAgIFwieC1pbnZva2UtcGF0aFwiLFxuICAgIFwieC1pbnZva2UtcXVlcnlcIixcbiAgICBcIngtaW52b2tlLXN0YXR1c1wiLFxuICAgIFwieC1taWRkbGV3YXJlLWludm9rZVwiXG5dO1xuY29uc3QgQ09NUElMRVJfSU5ERVhFUyA9IHtcbiAgICBbQ09NUElMRVJfTkFNRVMuY2xpZW50XTogMCxcbiAgICBbQ09NUElMRVJfTkFNRVMuc2VydmVyXTogMSxcbiAgICBbQ09NUElMRVJfTkFNRVMuZWRnZVNlcnZlcl06IDJcbn07XG5jb25zdCBQSEFTRV9FWFBPUlQgPSBcInBoYXNlLWV4cG9ydFwiO1xuY29uc3QgUEhBU0VfUFJPRFVDVElPTl9CVUlMRCA9IFwicGhhc2UtcHJvZHVjdGlvbi1idWlsZFwiO1xuY29uc3QgUEhBU0VfUFJPRFVDVElPTl9TRVJWRVIgPSBcInBoYXNlLXByb2R1Y3Rpb24tc2VydmVyXCI7XG5jb25zdCBQSEFTRV9ERVZFTE9QTUVOVF9TRVJWRVIgPSBcInBoYXNlLWRldmVsb3BtZW50LXNlcnZlclwiO1xuY29uc3QgUEhBU0VfVEVTVCA9IFwicGhhc2UtdGVzdFwiO1xuY29uc3QgUEhBU0VfSU5GTyA9IFwicGhhc2UtaW5mb1wiO1xuY29uc3QgUEFHRVNfTUFOSUZFU1QgPSBcInBhZ2VzLW1hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IEFQUF9QQVRIU19NQU5JRkVTVCA9IFwiYXBwLXBhdGhzLW1hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IEFQUF9QQVRIX1JPVVRFU19NQU5JRkVTVCA9IFwiYXBwLXBhdGgtcm91dGVzLW1hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IEJVSUxEX01BTklGRVNUID0gXCJidWlsZC1tYW5pZmVzdC5qc29uXCI7XG5jb25zdCBBUFBfQlVJTERfTUFOSUZFU1QgPSBcImFwcC1idWlsZC1tYW5pZmVzdC5qc29uXCI7XG5jb25zdCBGVU5DVElPTlNfQ09ORklHX01BTklGRVNUID0gXCJmdW5jdGlvbnMtY29uZmlnLW1hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IFNVQlJFU09VUkNFX0lOVEVHUklUWV9NQU5JRkVTVCA9IFwic3VicmVzb3VyY2UtaW50ZWdyaXR5LW1hbmlmZXN0XCI7XG5jb25zdCBORVhUX0ZPTlRfTUFOSUZFU1QgPSBcIm5leHQtZm9udC1tYW5pZmVzdFwiO1xuY29uc3QgRVhQT1JUX01BUktFUiA9IFwiZXhwb3J0LW1hcmtlci5qc29uXCI7XG5jb25zdCBFWFBPUlRfREVUQUlMID0gXCJleHBvcnQtZGV0YWlsLmpzb25cIjtcbmNvbnN0IFBSRVJFTkRFUl9NQU5JRkVTVCA9IFwicHJlcmVuZGVyLW1hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IFJPVVRFU19NQU5JRkVTVCA9IFwicm91dGVzLW1hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IElNQUdFU19NQU5JRkVTVCA9IFwiaW1hZ2VzLW1hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IFNFUlZFUl9GSUxFU19NQU5JRkVTVCA9IFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIjtcbmNvbnN0IERFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1QgPSBcIl9kZXZQYWdlc01hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IE1JRERMRVdBUkVfTUFOSUZFU1QgPSBcIm1pZGRsZXdhcmUtbWFuaWZlc3QuanNvblwiO1xuY29uc3QgREVWX01JRERMRVdBUkVfTUFOSUZFU1QgPSBcIl9kZXZNaWRkbGV3YXJlTWFuaWZlc3QuanNvblwiO1xuY29uc3QgUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1QgPSBcInJlYWN0LWxvYWRhYmxlLW1hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IEZPTlRfTUFOSUZFU1QgPSBcImZvbnQtbWFuaWZlc3QuanNvblwiO1xuY29uc3QgU0VSVkVSX0RJUkVDVE9SWSA9IFwic2VydmVyXCI7XG5jb25zdCBDT05GSUdfRklMRVMgPSBbXG4gICAgXCJuZXh0LmNvbmZpZy5qc1wiLFxuICAgIFwibmV4dC5jb25maWcubWpzXCJcbl07XG5jb25zdCBCVUlMRF9JRF9GSUxFID0gXCJCVUlMRF9JRFwiO1xuY29uc3QgQkxPQ0tFRF9QQUdFUyA9IFtcbiAgICBcIi9fZG9jdW1lbnRcIixcbiAgICBcIi9fYXBwXCIsXG4gICAgXCIvX2Vycm9yXCJcbl07XG5jb25zdCBDTElFTlRfUFVCTElDX0ZJTEVTX1BBVEggPSBcInB1YmxpY1wiO1xuY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19QQVRIID0gXCJzdGF0aWNcIjtcbmNvbnN0IFNUUklOR19MSVRFUkFMX0RST1BfQlVORExFID0gXCJfX05FWFRfRFJPUF9DTElFTlRfRklMRV9fXCI7XG5jb25zdCBORVhUX0JVSUxUSU5fRE9DVU1FTlQgPSBcIl9fTkVYVF9CVUlMVElOX0RPQ1VNRU5UX19cIjtcbmNvbnN0IEJBUlJFTF9PUFRJTUlaQVRJT05fUFJFRklYID0gXCJfX2JhcnJlbF9vcHRpbWl6ZV9fXCI7XG5jb25zdCBDTElFTlRfUkVGRVJFTkNFX01BTklGRVNUID0gXCJjbGllbnQtcmVmZXJlbmNlLW1hbmlmZXN0XCI7XG5jb25zdCBTRVJWRVJfUkVGRVJFTkNFX01BTklGRVNUID0gXCJzZXJ2ZXItcmVmZXJlbmNlLW1hbmlmZXN0XCI7XG5jb25zdCBNSURETEVXQVJFX0JVSUxEX01BTklGRVNUID0gXCJtaWRkbGV3YXJlLWJ1aWxkLW1hbmlmZXN0XCI7XG5jb25zdCBNSURETEVXQVJFX1JFQUNUX0xPQURBQkxFX01BTklGRVNUID0gXCJtaWRkbGV3YXJlLXJlYWN0LWxvYWRhYmxlLW1hbmlmZXN0XCI7XG5jb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTiA9IFwibWFpblwiO1xuY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU5fQVBQID0gXCJcIiArIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOICsgXCItYXBwXCI7XG5jb25zdCBBUFBfQ0xJRU5UX0lOVEVSTkFMUyA9IFwiYXBwLXBhZ2VzLWludGVybmFsc1wiO1xuY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1JFQUNUX1JFRlJFU0ggPSBcInJlYWN0LXJlZnJlc2hcIjtcbmNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9BTVAgPSBcImFtcFwiO1xuY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1dFQlBBQ0sgPSBcIndlYnBhY2tcIjtcbmNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFMgPSBcInBvbHlmaWxsc1wiO1xuY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMU19TWU1CT0wgPSBTeW1ib2woQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMUyk7XG5jb25zdCBFREdFX1JVTlRJTUVfV0VCUEFDSyA9IFwiZWRnZS1ydW50aW1lLXdlYnBhY2tcIjtcbmNvbnN0IFNUQVRJQ19QUk9QU19JRCA9IFwiX19OX1NTR1wiO1xuY29uc3QgU0VSVkVSX1BST1BTX0lEID0gXCJfX05fU1NQXCI7XG5jb25zdCBHT09HTEVfRk9OVF9QUk9WSURFUiA9IFwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9cIjtcbmNvbnN0IE9QVElNSVpFRF9GT05UX1BST1ZJREVSUyA9IFtcbiAgICB7XG4gICAgICAgIHVybDogR09PR0xFX0ZPTlRfUFJPVklERVIsXG4gICAgICAgIHByZWNvbm5lY3Q6IFwiaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbVwiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHVybDogXCJodHRwczovL3VzZS50eXBla2l0Lm5ldFwiLFxuICAgICAgICBwcmVjb25uZWN0OiBcImh0dHBzOi8vdXNlLnR5cGVraXQubmV0XCJcbiAgICB9XG5dO1xuY29uc3QgREVGQVVMVF9TRVJJRl9GT05UID0ge1xuICAgIG5hbWU6IFwiVGltZXMgTmV3IFJvbWFuXCIsXG4gICAgeEF2Z0NoYXJXaWR0aDogODIxLFxuICAgIGF6QXZnV2lkdGg6IDg1NC4zOTUzNDg4MzcyMDkzLFxuICAgIHVuaXRzUGVyRW06IDIwNDhcbn07XG5jb25zdCBERUZBVUxUX1NBTlNfU0VSSUZfRk9OVCA9IHtcbiAgICBuYW1lOiBcIkFyaWFsXCIsXG4gICAgeEF2Z0NoYXJXaWR0aDogOTA0LFxuICAgIGF6QXZnV2lkdGg6IDkzNC41MTE2Mjc5MDY5NzY3LFxuICAgIHVuaXRzUGVyRW06IDIwNDhcbn07XG5jb25zdCBTVEFUSUNfU1RBVFVTX1BBR0VTID0gW1xuICAgIFwiLzUwMFwiXG5dO1xuY29uc3QgVFJBQ0VfT1VUUFVUX1ZFUlNJT04gPSAxO1xuY29uc3QgVFVSQk9fVFJBQ0VfREVGQVVMVF9NRU1PUllfTElNSVQgPSA2MDAwO1xuY29uc3QgUlNDX01PRFVMRV9UWVBFUyA9IHtcbiAgICBjbGllbnQ6IFwiY2xpZW50XCIsXG4gICAgc2VydmVyOiBcInNlcnZlclwiXG59O1xuY29uc3QgRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVMgPSBbXG4gICAgXCJjbGVhckltbWVkaWF0ZVwiLFxuICAgIFwic2V0SW1tZWRpYXRlXCIsXG4gICAgXCJCcm9hZGNhc3RDaGFubmVsXCIsXG4gICAgXCJCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5XCIsXG4gICAgXCJDb21wcmVzc2lvblN0cmVhbVwiLFxuICAgIFwiQ291bnRRdWV1aW5nU3RyYXRlZ3lcIixcbiAgICBcIkRlY29tcHJlc3Npb25TdHJlYW1cIixcbiAgICBcIkRvbUV4Y2VwdGlvblwiLFxuICAgIFwiTWVzc2FnZUNoYW5uZWxcIixcbiAgICBcIk1lc3NhZ2VFdmVudFwiLFxuICAgIFwiTWVzc2FnZVBvcnRcIixcbiAgICBcIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJcIixcbiAgICBcIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3RcIixcbiAgICBcIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJcIixcbiAgICBcIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyXCIsXG4gICAgXCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyXCJcbl07XG5jb25zdCBTWVNURU1fRU5UUllQT0lOVFMgPSBuZXcgU2V0KFtcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTixcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUkVBQ1RfUkVGUkVTSCxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QLFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOX0FQUFxuXSk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJNT0RFUk5fQlJPV1NFUlNMSVNUX1RBUkdFVCIsIkNPTVBJTEVSX05BTUVTIiwiSU5URVJOQUxfSEVBREVSUyIsIkNPTVBJTEVSX0lOREVYRVMiLCJQSEFTRV9FWFBPUlQiLCJQSEFTRV9QUk9EVUNUSU9OX0JVSUxEIiwiUEhBU0VfUFJPRFVDVElPTl9TRVJWRVIiLCJQSEFTRV9ERVZFTE9QTUVOVF9TRVJWRVIiLCJQSEFTRV9URVNUIiwiUEhBU0VfSU5GTyIsIlBBR0VTX01BTklGRVNUIiwiQVBQX1BBVEhTX01BTklGRVNUIiwiQVBQX1BBVEhfUk9VVEVTX01BTklGRVNUIiwiQlVJTERfTUFOSUZFU1QiLCJBUFBfQlVJTERfTUFOSUZFU1QiLCJGVU5DVElPTlNfQ09ORklHX01BTklGRVNUIiwiU1VCUkVTT1VSQ0VfSU5URUdSSVRZX01BTklGRVNUIiwiTkVYVF9GT05UX01BTklGRVNUIiwiRVhQT1JUX01BUktFUiIsIkVYUE9SVF9ERVRBSUwiLCJQUkVSRU5ERVJfTUFOSUZFU1QiLCJST1VURVNfTUFOSUZFU1QiLCJJTUFHRVNfTUFOSUZFU1QiLCJTRVJWRVJfRklMRVNfTUFOSUZFU1QiLCJERVZfQ0xJRU5UX1BBR0VTX01BTklGRVNUIiwiTUlERExFV0FSRV9NQU5JRkVTVCIsIkRFVl9NSURETEVXQVJFX01BTklGRVNUIiwiUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1QiLCJGT05UX01BTklGRVNUIiwiU0VSVkVSX0RJUkVDVE9SWSIsIkNPTkZJR19GSUxFUyIsIkJVSUxEX0lEX0ZJTEUiLCJCTE9DS0VEX1BBR0VTIiwiQ0xJRU5UX1BVQkxJQ19GSUxFU19QQVRIIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19QQVRIIiwiU1RSSU5HX0xJVEVSQUxfRFJPUF9CVU5ETEUiLCJORVhUX0JVSUxUSU5fRE9DVU1FTlQiLCJCQVJSRUxfT1BUSU1JWkFUSU9OX1BSRUZJWCIsIkNMSUVOVF9SRUZFUkVOQ0VfTUFOSUZFU1QiLCJTRVJWRVJfUkVGRVJFTkNFX01BTklGRVNUIiwiTUlERExFV0FSRV9CVUlMRF9NQU5JRkVTVCIsIk1JRERMRVdBUkVfUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1QiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTiIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOX0FQUCIsIkFQUF9DTElFTlRfSU5URVJOQUxTIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1JFQUNUX1JFRlJFU0giLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1dFQlBBQ0siLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMU19TWU1CT0wiLCJFREdFX1JVTlRJTUVfV0VCUEFDSyIsIlNUQVRJQ19QUk9QU19JRCIsIlNFUlZFUl9QUk9QU19JRCIsIkdPT0dMRV9GT05UX1BST1ZJREVSIiwiT1BUSU1JWkVEX0ZPTlRfUFJPVklERVJTIiwiREVGQVVMVF9TRVJJRl9GT05UIiwiREVGQVVMVF9TQU5TX1NFUklGX0ZPTlQiLCJTVEFUSUNfU1RBVFVTX1BBR0VTIiwiVFJBQ0VfT1VUUFVUX1ZFUlNJT04iLCJUVVJCT19UUkFDRV9ERUZBVUxUX01FTU9SWV9MSU1JVCIsIlJTQ19NT0RVTEVfVFlQRVMiLCJFREdFX1VOU1VQUE9SVEVEX05PREVfQVBJUyIsIlNZU1RFTV9FTlRSWVBPSU5UUyIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9tb2Rlcm5icm93c2Vyc2xpc3R0YXJnZXQiLCJkZWZhdWx0IiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl8iLCJjbGllbnQiLCJzZXJ2ZXIiLCJlZGdlU2VydmVyIiwiU3ltYm9sIiwidXJsIiwicHJlY29ubmVjdCIsInhBdmdDaGFyV2lkdGgiLCJhekF2Z1dpZHRoIiwidW5pdHNQZXJFbSIsIlNldCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/constants.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/head.js": +/*!***************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/head.js ***! + \***************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n defaultHead: function() {\n return defaultHead;\n },\n default: function() {\n return _default;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/cjs/_interop_require_default.cjs\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"react/jsx-runtime\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"react\"));\nconst _sideeffect = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./side-effect */ \"./node_modules/next/dist/shared/lib/side-effect.js\"));\nconst _ampcontextsharedruntime = __webpack_require__(/*! ./amp-context.shared-runtime */ \"./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/amp-context.js\");\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ./head-manager-context.shared-runtime */ \"./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/head-manager-context.js\");\nconst _ampmode = __webpack_require__(/*! ./amp-mode */ \"./node_modules/next/dist/shared/lib/amp-mode.js\");\nconst _warnonce = __webpack_require__(/*! ./utils/warn-once */ \"./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nfunction defaultHead(inAmpMode) {\n if (inAmpMode === void 0) inAmpMode = false;\n const head = [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n charSet: \"utf-8\"\n })\n ];\n if (!inAmpMode) {\n head.push(/*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"viewport\",\n content: \"width=device-width\"\n }));\n }\n return head;\n}\nfunction onlyReactElement(list, child) {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === \"string\" || typeof child === \"number\") {\n return list;\n }\n // Adds support for React.Fragment\n if (child.type === _react.default.Fragment) {\n return list.concat(_react.default.Children.toArray(child.props.children).reduce((fragmentList, fragmentChild)=>{\n if (typeof fragmentChild === \"string\" || typeof fragmentChild === \"number\") {\n return fragmentList;\n }\n return fragmentList.concat(fragmentChild);\n }, []));\n }\n return list.concat(child);\n}\nconst METATYPES = [\n \"name\",\n \"httpEquiv\",\n \"charSet\",\n \"itemProp\"\n];\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like <title/>\n Also adds support for deduplicated `key` properties\n*/ function unique() {\n const keys = new Set();\n const tags = new Set();\n const metaTypes = new Set();\n const metaCategories = {};\n return (h)=>{\n let isUnique = true;\n let hasKey = false;\n if (h.key && typeof h.key !== \"number\" && h.key.indexOf(\"$\") > 0) {\n hasKey = true;\n const key = h.key.slice(h.key.indexOf(\"$\") + 1);\n if (keys.has(key)) {\n isUnique = false;\n } else {\n keys.add(key);\n }\n }\n // eslint-disable-next-line default-case\n switch(h.type){\n case \"title\":\n case \"base\":\n if (tags.has(h.type)) {\n isUnique = false;\n } else {\n tags.add(h.type);\n }\n break;\n case \"meta\":\n for(let i = 0, len = METATYPES.length; i < len; i++){\n const metatype = METATYPES[i];\n if (!h.props.hasOwnProperty(metatype)) continue;\n if (metatype === \"charSet\") {\n if (metaTypes.has(metatype)) {\n isUnique = false;\n } else {\n metaTypes.add(metatype);\n }\n } else {\n const category = h.props[metatype];\n const categories = metaCategories[metatype] || new Set();\n if ((metatype !== \"name\" || !hasKey) && categories.has(category)) {\n isUnique = false;\n } else {\n categories.add(category);\n metaCategories[metatype] = categories;\n }\n }\n }\n break;\n }\n return isUnique;\n };\n}\n/**\n *\n * @param headChildrenElements List of children of <Head>\n */ function reduceComponents(headChildrenElements, props) {\n const { inAmpMode } = props;\n return headChildrenElements.reduce(onlyReactElement, []).reverse().concat(defaultHead(inAmpMode).reverse()).filter(unique()).reverse().map((c, i)=>{\n const key = c.key || i;\n if (false) {}\n if (true) {\n // omit JSON-LD structured data snippets from the warning\n if (c.type === \"script\" && c.props[\"type\"] !== \"application/ld+json\") {\n const srcMessage = c.props[\"src\"] ? '<script> tag with src=\"' + c.props[\"src\"] + '\"' : \"inline <script>\";\n (0, _warnonce.warnOnce)(\"Do not add <script> tags using next/head (see \" + srcMessage + \"). Use next/script instead. \\nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component\");\n } else if (c.type === \"link\" && c.props[\"rel\"] === \"stylesheet\") {\n (0, _warnonce.warnOnce)('Do not add stylesheets using next/head (see <link rel=\"stylesheet\"> tag with href=\"' + c.props[\"href\"] + '\"). Use Document instead. \\nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component');\n }\n }\n return /*#__PURE__*/ _react.default.cloneElement(c, {\n key\n });\n });\n}\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */ function Head(param) {\n let { children } = param;\n const ampState = (0, _react.useContext)(_ampcontextsharedruntime.AmpStateContext);\n const headManager = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, {\n reduceComponentsToState: reduceComponents,\n headManager: headManager,\n inAmpMode: (0, _ampmode.isInAmpMode)(ampState),\n children: children\n });\n}\nconst _default = Head;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=head.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaGVhZC5qcyIsIm1hcHBpbmdzIjoicURBRWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLGFBQWE7UUFDVCxPQUFPQTtJQUNYO0lBQ0FDLFNBQVM7UUFDTCxPQUFPTztJQUNYO0FBQ0o7QUFDQSxNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLDZHQUF5QztBQUNsRixNQUFNQyw0QkFBNEJELG1CQUFPQSxDQUFDLCtHQUEwQztBQUNwRixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyw0Q0FBbUI7QUFDL0MsTUFBTUcsU0FBUyxXQUFXLEdBQUdGLDBCQUEwQkcsQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxvQkFBTztBQUN4RSxNQUFNSyxjQUFjLFdBQVcsR0FBR04seUJBQXlCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLHlFQUFlO0FBQ3BGLE1BQU1NLDJCQUEyQk4sbUJBQU9BLENBQUMsaUlBQThCO0FBQ3ZFLE1BQU1PLG1DQUFtQ1AsbUJBQU9BLENBQUMsbUpBQXVDO0FBQ3hGLE1BQU1RLFdBQVdSLG1CQUFPQSxDQUFDLG1FQUFZO0FBQ3JDLE1BQU1TLFlBQVlULG1CQUFPQSxDQUFDLGlGQUFtQjtBQUM3QyxTQUFTVixZQUFZb0IsU0FBUztJQUMxQixJQUFJQSxjQUFjLEtBQUssR0FBR0EsWUFBWTtJQUN0QyxNQUFNQyxPQUFPO1FBQ1QsV0FBVyxHQUFJLElBQUdULFlBQVlVLEdBQUcsRUFBRSxRQUFRO1lBQ3ZDQyxTQUFTO1FBQ2I7S0FDSDtJQUNELElBQUksQ0FBQ0gsV0FBVztRQUNaQyxLQUFLRyxJQUFJLENBQWUsV0FBSCxHQUFJLElBQUdaLFlBQVlVLEdBQUcsRUFBRSxRQUFRO1lBQ2pEakIsTUFBTTtZQUNOb0IsU0FBUztRQUNiO0lBQ0o7SUFDQSxPQUFPSjtBQUNYO0FBQ0EsU0FBU0ssaUJBQWlCQyxJQUFJLEVBQUVDLEtBQUs7SUFDakMsOEZBQThGO0lBQzlGLElBQUksT0FBT0EsVUFBVSxZQUFZLE9BQU9BLFVBQVUsVUFBVTtRQUN4RCxPQUFPRDtJQUNYO0lBQ0Esa0NBQWtDO0lBQ2xDLElBQUlDLE1BQU1DLElBQUksS0FBS2hCLE9BQU9aLE9BQU8sQ0FBQzZCLFFBQVEsRUFBRTtRQUN4QyxPQUFPSCxLQUFLSSxNQUFNLENBQ2xCbEIsT0FBT1osT0FBTyxDQUFDK0IsUUFBUSxDQUFDQyxPQUFPLENBQUNMLE1BQU1NLEtBQUssQ0FBQ0MsUUFBUSxFQUFFQyxNQUFNLENBQzVELENBQUNDLGNBQWNDO1lBQ1gsSUFBSSxPQUFPQSxrQkFBa0IsWUFBWSxPQUFPQSxrQkFBa0IsVUFBVTtnQkFDeEUsT0FBT0Q7WUFDWDtZQUNBLE9BQU9BLGFBQWFOLE1BQU0sQ0FBQ087UUFDL0IsR0FBRyxFQUFFO0lBQ1Q7SUFDQSxPQUFPWCxLQUFLSSxNQUFNLENBQUNIO0FBQ3ZCO0FBQ0EsTUFBTVcsWUFBWTtJQUNkO0lBQ0E7SUFDQTtJQUNBO0NBQ0g7QUFDRDs7OztBQUlBLEdBQUcsU0FBU0M7SUFDUixNQUFNQyxPQUFPLElBQUlDO0lBQ2pCLE1BQU1DLE9BQU8sSUFBSUQ7SUFDakIsTUFBTUUsWUFBWSxJQUFJRjtJQUN0QixNQUFNRyxpQkFBaUIsQ0FBQztJQUN4QixPQUFPLENBQUNDO1FBQ0osSUFBSUMsV0FBVztRQUNmLElBQUlDLFNBQVM7UUFDYixJQUFJRixFQUFFRyxHQUFHLElBQUksT0FBT0gsRUFBRUcsR0FBRyxLQUFLLFlBQVlILEVBQUVHLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sR0FBRztZQUM5REYsU0FBUztZQUNULE1BQU1DLE1BQU1ILEVBQUVHLEdBQUcsQ0FBQ0UsS0FBSyxDQUFDTCxFQUFFRyxHQUFHLENBQUNDLE9BQU8sQ0FBQyxPQUFPO1lBQzdDLElBQUlULEtBQUtXLEdBQUcsQ0FBQ0gsTUFBTTtnQkFDZkYsV0FBVztZQUNmLE9BQU87Z0JBQ0hOLEtBQUtZLEdBQUcsQ0FBQ0o7WUFDYjtRQUNKO1FBQ0Esd0NBQXdDO1FBQ3hDLE9BQU9ILEVBQUVqQixJQUFJO1lBQ1QsS0FBSztZQUNMLEtBQUs7Z0JBQ0QsSUFBSWMsS0FBS1MsR0FBRyxDQUFDTixFQUFFakIsSUFBSSxHQUFHO29CQUNsQmtCLFdBQVc7Z0JBQ2YsT0FBTztvQkFDSEosS0FBS1UsR0FBRyxDQUFDUCxFQUFFakIsSUFBSTtnQkFDbkI7Z0JBQ0E7WUFDSixLQUFLO2dCQUNELElBQUksSUFBSXlCLElBQUksR0FBR0MsTUFBTWhCLFVBQVVpQixNQUFNLEVBQUVGLElBQUlDLEtBQUtELElBQUk7b0JBQ2hELE1BQU1HLFdBQVdsQixTQUFTLENBQUNlLEVBQUU7b0JBQzdCLElBQUksQ0FBQ1IsRUFBRVosS0FBSyxDQUFDd0IsY0FBYyxDQUFDRCxXQUFXO29CQUN2QyxJQUFJQSxhQUFhLFdBQVc7d0JBQ3hCLElBQUliLFVBQVVRLEdBQUcsQ0FBQ0ssV0FBVzs0QkFDekJWLFdBQVc7d0JBQ2YsT0FBTzs0QkFDSEgsVUFBVVMsR0FBRyxDQUFDSTt3QkFDbEI7b0JBQ0osT0FBTzt3QkFDSCxNQUFNRSxXQUFXYixFQUFFWixLQUFLLENBQUN1QixTQUFTO3dCQUNsQyxNQUFNRyxhQUFhZixjQUFjLENBQUNZLFNBQVMsSUFBSSxJQUFJZjt3QkFDbkQsSUFBSSxDQUFDZSxhQUFhLFVBQVUsQ0FBQ1QsTUFBSyxLQUFNWSxXQUFXUixHQUFHLENBQUNPLFdBQVc7NEJBQzlEWixXQUFXO3dCQUNmLE9BQU87NEJBQ0hhLFdBQVdQLEdBQUcsQ0FBQ007NEJBQ2ZkLGNBQWMsQ0FBQ1ksU0FBUyxHQUFHRzt3QkFDL0I7b0JBQ0o7Z0JBQ0o7Z0JBQ0E7UUFDUjtRQUNBLE9BQU9iO0lBQ1g7QUFDSjtBQUNBOzs7Q0FHQyxHQUFHLFNBQVNjLGlCQUFpQkMsb0JBQW9CLEVBQUU1QixLQUFLO0lBQ3JELE1BQU0sRUFBRWQsU0FBUyxFQUFFLEdBQUdjO0lBQ3RCLE9BQU80QixxQkFBcUIxQixNQUFNLENBQUNWLGtCQUFrQixFQUFFLEVBQUVxQyxPQUFPLEdBQUdoQyxNQUFNLENBQUMvQixZQUFZb0IsV0FBVzJDLE9BQU8sSUFBSUMsTUFBTSxDQUFDeEIsVUFBVXVCLE9BQU8sR0FBR0UsR0FBRyxDQUFDLENBQUNDLEdBQUdaO1FBQzNJLE1BQU1MLE1BQU1pQixFQUFFakIsR0FBRyxJQUFJSztRQUNyQixJQUFJYSxLQUF5Ri9DLEVBQUUsRUFlOUY7UUFDRCxJQUFJK0MsSUFBc0MsRUFBRTtZQUN4Qyx5REFBeUQ7WUFDekQsSUFBSUQsRUFBRXJDLElBQUksS0FBSyxZQUFZcUMsRUFBRWhDLEtBQUssQ0FBQyxPQUFPLEtBQUssdUJBQXVCO2dCQUNsRSxNQUFNMEMsYUFBYVYsRUFBRWhDLEtBQUssQ0FBQyxNQUFNLEdBQUcsNEJBQTRCZ0MsRUFBRWhDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTTtnQkFDdEYsSUFBR2YsVUFBVTBELFFBQVEsRUFBRSxtREFBbURELGFBQWE7WUFDNUYsT0FBTyxJQUFJVixFQUFFckMsSUFBSSxLQUFLLFVBQVVxQyxFQUFFaEMsS0FBSyxDQUFDLE1BQU0sS0FBSyxjQUFjO2dCQUM1RCxJQUFHZixVQUFVMEQsUUFBUSxFQUFFLHdGQUF3RlgsRUFBRWhDLEtBQUssQ0FBQyxPQUFPLEdBQUc7WUFDdEk7UUFDSjtRQUNBLE9BQU8sV0FBVyxHQUFHckIsT0FBT1osT0FBTyxDQUFDMEUsWUFBWSxDQUFDVCxHQUFHO1lBQ2hEakI7UUFDSjtJQUNKO0FBQ0o7QUFDQTs7O0NBR0MsR0FBRyxTQUFTNkIsS0FBS0MsS0FBSztJQUNuQixJQUFJLEVBQUU1QyxRQUFRLEVBQUUsR0FBRzRDO0lBQ25CLE1BQU1DLFdBQVcsQ0FBQyxHQUFHbkUsT0FBT29FLFVBQVUsRUFBRWpFLHlCQUF5QmtFLGVBQWU7SUFDaEYsTUFBTUMsY0FBYyxDQUFDLEdBQUd0RSxPQUFPb0UsVUFBVSxFQUFFaEUsaUNBQWlDbUUsa0JBQWtCO0lBQzlGLE9BQXFCLFdBQUgsR0FBSSxJQUFHeEUsWUFBWVUsR0FBRyxFQUFFUCxZQUFZZCxPQUFPLEVBQUU7UUFDM0RvRix5QkFBeUJ4QjtRQUN6QnNCLGFBQWFBO1FBQ2IvRCxXQUFXLENBQUMsR0FBR0YsU0FBU29FLFdBQVcsRUFBRU47UUFDckM3QyxVQUFVQTtJQUNkO0FBQ0o7QUFDQSxNQUFNM0IsV0FBV3NFO0FBRWpCLElBQUksQ0FBQyxPQUFPakYsUUFBUUksT0FBTyxLQUFLLGNBQWUsT0FBT0osUUFBUUksT0FBTyxLQUFLLFlBQVlKLFFBQVFJLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT0osUUFBUUksT0FBTyxDQUFDc0YsVUFBVSxLQUFLLGFBQWE7SUFDcks1RixPQUFPQyxjQUFjLENBQUNDLFFBQVFJLE9BQU8sRUFBRSxjQUFjO1FBQUVILE9BQU87SUFBSztJQUNuRUgsT0FBTzZGLE1BQU0sQ0FBQzNGLFFBQVFJLE9BQU8sRUFBRUo7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUUksT0FBTztBQUNsQyxFQUVBLGdDQUFnQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaGVhZC5qcz9mYjVkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGRlZmF1bHRIZWFkOiBudWxsLFxuICAgIGRlZmF1bHQ6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZGVmYXVsdEhlYWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdEhlYWQ7XG4gICAgfSxcbiAgICBkZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9kZWZhdWx0O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9zaWRlZWZmZWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi9zaWRlLWVmZmVjdFwiKSk7XG5jb25zdCBfYW1wY29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi9hbXAtY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmNvbnN0IF9oZWFkbWFuYWdlcmNvbnRleHRzaGFyZWRydW50aW1lID0gcmVxdWlyZShcIi4vaGVhZC1tYW5hZ2VyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5jb25zdCBfYW1wbW9kZSA9IHJlcXVpcmUoXCIuL2FtcC1tb2RlXCIpO1xuY29uc3QgX3dhcm5vbmNlID0gcmVxdWlyZShcIi4vdXRpbHMvd2Fybi1vbmNlXCIpO1xuZnVuY3Rpb24gZGVmYXVsdEhlYWQoaW5BbXBNb2RlKSB7XG4gICAgaWYgKGluQW1wTW9kZSA9PT0gdm9pZCAwKSBpbkFtcE1vZGUgPSBmYWxzZTtcbiAgICBjb25zdCBoZWFkID0gW1xuICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibWV0YVwiLCB7XG4gICAgICAgICAgICBjaGFyU2V0OiBcInV0Zi04XCJcbiAgICAgICAgfSlcbiAgICBdO1xuICAgIGlmICghaW5BbXBNb2RlKSB7XG4gICAgICAgIGhlYWQucHVzaCgvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibWV0YVwiLCB7XG4gICAgICAgICAgICBuYW1lOiBcInZpZXdwb3J0XCIsXG4gICAgICAgICAgICBjb250ZW50OiBcIndpZHRoPWRldmljZS13aWR0aFwiXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWQ7XG59XG5mdW5jdGlvbiBvbmx5UmVhY3RFbGVtZW50KGxpc3QsIGNoaWxkKSB7XG4gICAgLy8gUmVhY3QgY2hpbGRyZW4gY2FuIGJlIFwic3RyaW5nXCIgb3IgXCJudW1iZXJcIiBpbiB0aGlzIGNhc2Ugd2UgaWdub3JlIHRoZW0gZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAgICBpZiAodHlwZW9mIGNoaWxkID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBjaGlsZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG4gICAgLy8gQWRkcyBzdXBwb3J0IGZvciBSZWFjdC5GcmFnbWVudFxuICAgIGlmIChjaGlsZC50eXBlID09PSBfcmVhY3QuZGVmYXVsdC5GcmFnbWVudCkge1xuICAgICAgICByZXR1cm4gbGlzdC5jb25jYXQoLy8gQHRzLWV4cGVjdC1lcnJvciBAdHlwZXMvcmVhY3QgZG9lcyBub3QgcmVtb3ZlIGZyYWdtZW50cyBidXQgdGhpcyBjb3VsZCBhbHNvIHJldHVybiBSZWFjdFBvcnRhbFtdXG4gICAgICAgIF9yZWFjdC5kZWZhdWx0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGQucHJvcHMuY2hpbGRyZW4pLnJlZHVjZSgvLyBAdHMtZXhwZWN0LWVycm9yIEB0eXBlcy9yZWFjdCBkb2VzIG5vdCByZW1vdmUgZnJhZ21lbnRzIGJ1dCB0aGlzIGNvdWxkIGFsc28gcmV0dXJuIFJlYWN0UG9ydGFsW11cbiAgICAgICAgKGZyYWdtZW50TGlzdCwgZnJhZ21lbnRDaGlsZCk9PntcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZnJhZ21lbnRDaGlsZCA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgZnJhZ21lbnRDaGlsZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudExpc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnRMaXN0LmNvbmNhdChmcmFnbWVudENoaWxkKTtcbiAgICAgICAgfSwgW10pKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KGNoaWxkKTtcbn1cbmNvbnN0IE1FVEFUWVBFUyA9IFtcbiAgICBcIm5hbWVcIixcbiAgICBcImh0dHBFcXVpdlwiLFxuICAgIFwiY2hhclNldFwiLFxuICAgIFwiaXRlbVByb3BcIlxuXTtcbi8qXG4gcmV0dXJucyBhIGZ1bmN0aW9uIGZvciBmaWx0ZXJpbmcgaGVhZCBjaGlsZCBlbGVtZW50c1xuIHdoaWNoIHNob3VsZG4ndCBiZSBkdXBsaWNhdGVkLCBsaWtlIDx0aXRsZS8+XG4gQWxzbyBhZGRzIHN1cHBvcnQgZm9yIGRlZHVwbGljYXRlZCBga2V5YCBwcm9wZXJ0aWVzXG4qLyBmdW5jdGlvbiB1bmlxdWUoKSB7XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCB0YWdzID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IG1ldGFUeXBlcyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBtZXRhQ2F0ZWdvcmllcyA9IHt9O1xuICAgIHJldHVybiAoaCk9PntcbiAgICAgICAgbGV0IGlzVW5pcXVlID0gdHJ1ZTtcbiAgICAgICAgbGV0IGhhc0tleSA9IGZhbHNlO1xuICAgICAgICBpZiAoaC5rZXkgJiYgdHlwZW9mIGgua2V5ICE9PSBcIm51bWJlclwiICYmIGgua2V5LmluZGV4T2YoXCIkXCIpID4gMCkge1xuICAgICAgICAgICAgaGFzS2V5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGgua2V5LnNsaWNlKGgua2V5LmluZGV4T2YoXCIkXCIpICsgMSk7XG4gICAgICAgICAgICBpZiAoa2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGlzVW5pcXVlID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGtleXMuYWRkKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxuICAgICAgICBzd2l0Y2goaC50eXBlKXtcbiAgICAgICAgICAgIGNhc2UgXCJ0aXRsZVwiOlxuICAgICAgICAgICAgY2FzZSBcImJhc2VcIjpcbiAgICAgICAgICAgICAgICBpZiAodGFncy5oYXMoaC50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBpc1VuaXF1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhZ3MuYWRkKGgudHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAwLCBsZW4gPSBNRVRBVFlQRVMubGVuZ3RoOyBpIDwgbGVuOyBpKyspe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhdHlwZSA9IE1FVEFUWVBFU1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoLnByb3BzLmhhc093blByb3BlcnR5KG1ldGF0eXBlKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXRhdHlwZSA9PT0gXCJjaGFyU2V0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRhVHlwZXMuaGFzKG1ldGF0eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVW5pcXVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFUeXBlcy5hZGQobWV0YXR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSBoLnByb3BzW21ldGF0eXBlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBtZXRhQ2F0ZWdvcmllc1ttZXRhdHlwZV0gfHwgbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtZXRhdHlwZSAhPT0gXCJuYW1lXCIgfHwgIWhhc0tleSkgJiYgY2F0ZWdvcmllcy5oYXMoY2F0ZWdvcnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNVbmlxdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFDYXRlZ29yaWVzW21ldGF0eXBlXSA9IGNhdGVnb3JpZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzVW5pcXVlO1xuICAgIH07XG59XG4vKipcbiAqXG4gKiBAcGFyYW0gaGVhZENoaWxkcmVuRWxlbWVudHMgTGlzdCBvZiBjaGlsZHJlbiBvZiA8SGVhZD5cbiAqLyBmdW5jdGlvbiByZWR1Y2VDb21wb25lbnRzKGhlYWRDaGlsZHJlbkVsZW1lbnRzLCBwcm9wcykge1xuICAgIGNvbnN0IHsgaW5BbXBNb2RlIH0gPSBwcm9wcztcbiAgICByZXR1cm4gaGVhZENoaWxkcmVuRWxlbWVudHMucmVkdWNlKG9ubHlSZWFjdEVsZW1lbnQsIFtdKS5yZXZlcnNlKCkuY29uY2F0KGRlZmF1bHRIZWFkKGluQW1wTW9kZSkucmV2ZXJzZSgpKS5maWx0ZXIodW5pcXVlKCkpLnJldmVyc2UoKS5tYXAoKGMsIGkpPT57XG4gICAgICAgIGNvbnN0IGtleSA9IGMua2V5IHx8IGk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJkZXZlbG9wbWVudFwiICYmIHByb2Nlc3MuZW52Ll9fTkVYVF9PUFRJTUlaRV9GT05UUyAmJiAhaW5BbXBNb2RlKSB7XG4gICAgICAgICAgICBpZiAoYy50eXBlID09PSBcImxpbmtcIiAmJiBjLnByb3BzW1wiaHJlZlwiXSAmJiAvLyBUT0RPKHByYXRlZWtiaEApOiBSZXBsYWNlIHRoaXMgd2l0aCBjb25zdCBmcm9tIGBjb25zdGFudHNgIHdoZW4gdGhlIHRyZWUgc2hha2luZyB3b3Jrcy5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzXCIsXG4gICAgICAgICAgICAgICAgXCJodHRwczovL3VzZS50eXBla2l0Lm5ldC9cIlxuICAgICAgICAgICAgXS5zb21lKCh1cmwpPT5jLnByb3BzW1wiaHJlZlwiXS5zdGFydHNXaXRoKHVybCkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmMucHJvcHMgfHwge31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG5ld1Byb3BzW1wiZGF0YS1ocmVmXCJdID0gbmV3UHJvcHNbXCJocmVmXCJdO1xuICAgICAgICAgICAgICAgIG5ld1Byb3BzW1wiaHJlZlwiXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBhdHRyaWJ1dGUgdG8gbWFrZSBpdCBlYXN5IHRvIGlkZW50aWZ5IG9wdGltaXplZCB0YWdzXG4gICAgICAgICAgICAgICAgbmV3UHJvcHNbXCJkYXRhLW9wdGltaXplZC1mb250c1wiXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gX3JlYWN0LmRlZmF1bHQuY2xvbmVFbGVtZW50KGMsIG5ld1Byb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICAgICAgLy8gb21pdCBKU09OLUxEIHN0cnVjdHVyZWQgZGF0YSBzbmlwcGV0cyBmcm9tIHRoZSB3YXJuaW5nXG4gICAgICAgICAgICBpZiAoYy50eXBlID09PSBcInNjcmlwdFwiICYmIGMucHJvcHNbXCJ0eXBlXCJdICE9PSBcImFwcGxpY2F0aW9uL2xkK2pzb25cIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNyY01lc3NhZ2UgPSBjLnByb3BzW1wic3JjXCJdID8gJzxzY3JpcHQ+IHRhZyB3aXRoIHNyYz1cIicgKyBjLnByb3BzW1wic3JjXCJdICsgJ1wiJyA6IFwiaW5saW5lIDxzY3JpcHQ+XCI7XG4gICAgICAgICAgICAgICAgKDAsIF93YXJub25jZS53YXJuT25jZSkoXCJEbyBub3QgYWRkIDxzY3JpcHQ+IHRhZ3MgdXNpbmcgbmV4dC9oZWFkIChzZWUgXCIgKyBzcmNNZXNzYWdlICsgXCIpLiBVc2UgbmV4dC9zY3JpcHQgaW5zdGVhZC4gXFxuU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uby1zY3JpcHQtdGFncy1pbi1oZWFkLWNvbXBvbmVudFwiKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYy50eXBlID09PSBcImxpbmtcIiAmJiBjLnByb3BzW1wicmVsXCJdID09PSBcInN0eWxlc2hlZXRcIikge1xuICAgICAgICAgICAgICAgICgwLCBfd2Fybm9uY2Uud2Fybk9uY2UpKCdEbyBub3QgYWRkIHN0eWxlc2hlZXRzIHVzaW5nIG5leHQvaGVhZCAoc2VlIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIj4gdGFnIHdpdGggaHJlZj1cIicgKyBjLnByb3BzW1wiaHJlZlwiXSArICdcIikuIFVzZSBEb2N1bWVudCBpbnN0ZWFkLiBcXG5TZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25vLXN0eWxlc2hlZXRzLWluLWhlYWQtY29tcG9uZW50Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gX3JlYWN0LmRlZmF1bHQuY2xvbmVFbGVtZW50KGMsIHtcbiAgICAgICAgICAgIGtleVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaW5qZWN0cyBlbGVtZW50cyB0byBgPGhlYWQ+YCBvZiB5b3VyIHBhZ2UuXG4gKiBUbyBhdm9pZCBkdXBsaWNhdGVkIGB0YWdzYCBpbiBgPGhlYWQ+YCB5b3UgY2FuIHVzZSB0aGUgYGtleWAgcHJvcGVydHksIHdoaWNoIHdpbGwgbWFrZSBzdXJlIGV2ZXJ5IHRhZyBpcyBvbmx5IHJlbmRlcmVkIG9uY2UuXG4gKi8gZnVuY3Rpb24gSGVhZChwYXJhbSkge1xuICAgIGxldCB7IGNoaWxkcmVuIH0gPSBwYXJhbTtcbiAgICBjb25zdCBhbXBTdGF0ZSA9ICgwLCBfcmVhY3QudXNlQ29udGV4dCkoX2FtcGNvbnRleHRzaGFyZWRydW50aW1lLkFtcFN0YXRlQ29udGV4dCk7XG4gICAgY29uc3QgaGVhZE1hbmFnZXIgPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKF9oZWFkbWFuYWdlcmNvbnRleHRzaGFyZWRydW50aW1lLkhlYWRNYW5hZ2VyQ29udGV4dCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX3NpZGVlZmZlY3QuZGVmYXVsdCwge1xuICAgICAgICByZWR1Y2VDb21wb25lbnRzVG9TdGF0ZTogcmVkdWNlQ29tcG9uZW50cyxcbiAgICAgICAgaGVhZE1hbmFnZXI6IGhlYWRNYW5hZ2VyLFxuICAgICAgICBpbkFtcE1vZGU6ICgwLCBfYW1wbW9kZS5pc0luQW1wTW9kZSkoYW1wU3RhdGUpLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbn1cbmNvbnN0IF9kZWZhdWx0ID0gSGVhZDtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVhZC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJkZWZhdWx0SGVhZCIsImRlZmF1bHQiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZGVmYXVsdCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX3NpZGVlZmZlY3QiLCJfYW1wY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfaGVhZG1hbmFnZXJjb250ZXh0c2hhcmVkcnVudGltZSIsIl9hbXBtb2RlIiwiX3dhcm5vbmNlIiwiaW5BbXBNb2RlIiwiaGVhZCIsImpzeCIsImNoYXJTZXQiLCJwdXNoIiwiY29udGVudCIsIm9ubHlSZWFjdEVsZW1lbnQiLCJsaXN0IiwiY2hpbGQiLCJ0eXBlIiwiRnJhZ21lbnQiLCJjb25jYXQiLCJDaGlsZHJlbiIsInRvQXJyYXkiLCJwcm9wcyIsImNoaWxkcmVuIiwicmVkdWNlIiwiZnJhZ21lbnRMaXN0IiwiZnJhZ21lbnRDaGlsZCIsIk1FVEFUWVBFUyIsInVuaXF1ZSIsImtleXMiLCJTZXQiLCJ0YWdzIiwibWV0YVR5cGVzIiwibWV0YUNhdGVnb3JpZXMiLCJoIiwiaXNVbmlxdWUiLCJoYXNLZXkiLCJrZXkiLCJpbmRleE9mIiwic2xpY2UiLCJoYXMiLCJhZGQiLCJpIiwibGVuIiwibGVuZ3RoIiwibWV0YXR5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhdGVnb3J5IiwiY2F0ZWdvcmllcyIsInJlZHVjZUNvbXBvbmVudHMiLCJoZWFkQ2hpbGRyZW5FbGVtZW50cyIsInJldmVyc2UiLCJmaWx0ZXIiLCJtYXAiLCJjIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9PUFRJTUlaRV9GT05UUyIsInNvbWUiLCJ1cmwiLCJzdGFydHNXaXRoIiwibmV3UHJvcHMiLCJ1bmRlZmluZWQiLCJjbG9uZUVsZW1lbnQiLCJzcmNNZXNzYWdlIiwid2Fybk9uY2UiLCJIZWFkIiwicGFyYW0iLCJhbXBTdGF0ZSIsInVzZUNvbnRleHQiLCJBbXBTdGF0ZUNvbnRleHQiLCJoZWFkTWFuYWdlciIsIkhlYWRNYW5hZ2VyQ29udGV4dCIsInJlZHVjZUNvbXBvbmVudHNUb1N0YXRlIiwiaXNJbkFtcE1vZGUiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/head.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/is-plain-object.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/is-plain-object.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getObjectClassLabel: function() {\n return getObjectClassLabel;\n },\n isPlainObject: function() {\n return isPlainObject;\n }\n});\nfunction getObjectClassLabel(value) {\n return Object.prototype.toString.call(value);\n}\nfunction isPlainObject(value) {\n if (getObjectClassLabel(value) !== \"[object Object]\") {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n /**\n * this used to be previously:\n *\n * `return prototype === null || prototype === Object.prototype`\n *\n * but Edge Runtime expose Object from vm, being that kind of type-checking wrongly fail.\n *\n * It was changed to the current implementation since it's resilient to serialization.\n */ return prototype === null || prototype.hasOwnProperty(\"isPrototypeOf\");\n} //# sourceMappingURL=is-plain-object.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaXMtcGxhaW4tb2JqZWN0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxxQkFBcUI7UUFDakIsT0FBT0E7SUFDWDtJQUNBQyxlQUFlO1FBQ1gsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsU0FBU0Qsb0JBQW9CRixLQUFLO0lBQzlCLE9BQU9ILE9BQU9hLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJLENBQUNaO0FBQzFDO0FBQ0EsU0FBU0csY0FBY0gsS0FBSztJQUN4QixJQUFJRSxvQkFBb0JGLFdBQVcsbUJBQW1CO1FBQ2xELE9BQU87SUFDWDtJQUNBLE1BQU1VLFlBQVliLE9BQU9nQixjQUFjLENBQUNiO0lBQ3hDOzs7Ozs7OztHQVFELEdBQUcsT0FBT1UsY0FBYyxRQUFRQSxVQUFVSSxjQUFjLENBQUM7QUFDNUQsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2lzLXBsYWluLW9iamVjdC5qcz8zNzQzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZ2V0T2JqZWN0Q2xhc3NMYWJlbDogbnVsbCxcbiAgICBpc1BsYWluT2JqZWN0OiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGdldE9iamVjdENsYXNzTGFiZWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0T2JqZWN0Q2xhc3NMYWJlbDtcbiAgICB9LFxuICAgIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNQbGFpbk9iamVjdDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGdldE9iamVjdENsYXNzTGFiZWwodmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICBpZiAoZ2V0T2JqZWN0Q2xhc3NMYWJlbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgIC8qKlxuICAgKiB0aGlzIHVzZWQgdG8gYmUgcHJldmlvdXNseTpcbiAgICpcbiAgICogYHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlYFxuICAgKlxuICAgKiBidXQgRWRnZSBSdW50aW1lIGV4cG9zZSBPYmplY3QgZnJvbSB2bSwgYmVpbmcgdGhhdCBraW5kIG9mIHR5cGUtY2hlY2tpbmcgd3JvbmdseSBmYWlsLlxuICAgKlxuICAgKiBJdCB3YXMgY2hhbmdlZCB0byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzaW5jZSBpdCdzIHJlc2lsaWVudCB0byBzZXJpYWxpemF0aW9uLlxuICAgKi8gcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUuaGFzT3duUHJvcGVydHkoXCJpc1Byb3RvdHlwZU9mXCIpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1wbGFpbi1vYmplY3QuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiZ2V0T2JqZWN0Q2xhc3NMYWJlbCIsImlzUGxhaW5PYmplY3QiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJnZXRQcm90b3R5cGVPZiIsImhhc093blByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/is-plain-object.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/modern-browserslist-target.js": +/*!*************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/modern-browserslist-target.js ***! + \*************************************************************************/ +/***/ ((module) => { + +"use strict"; +eval("// Note: This file is JS because it's used by the taskfile-swc.js file, which is JS.\n// Keep file changes in sync with the corresponding `.d.ts` files.\n/**\n * These are the browser versions that support all of the following:\n * static import: https://caniuse.com/es6-module\n * dynamic import: https://caniuse.com/es6-module-dynamic-import\n * import.meta: https://caniuse.com/mdn-javascript_operators_import_meta\n */ \nconst MODERN_BROWSERSLIST_TARGET = [\n \"chrome 64\",\n \"edge 79\",\n \"firefox 67\",\n \"opera 51\",\n \"safari 12\"\n];\nmodule.exports = MODERN_BROWSERSLIST_TARGET; //# sourceMappingURL=modern-browserslist-target.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQuanMiLCJtYXBwaW5ncyI6IkFBQUEsb0ZBQW9GO0FBQ3BGLGtFQUFrRTtBQUNsRTs7Ozs7Q0FLQyxHQUFnQjtBQUNqQixNQUFNQSw2QkFBNkI7SUFDL0I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNIO0FBQ0RDLE9BQU9DLE9BQU8sR0FBR0YsNEJBRWpCLHNEQUFzRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQuanM/YmUyOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOb3RlOiBUaGlzIGZpbGUgaXMgSlMgYmVjYXVzZSBpdCdzIHVzZWQgYnkgdGhlIHRhc2tmaWxlLXN3Yy5qcyBmaWxlLCB3aGljaCBpcyBKUy5cbi8vIEtlZXAgZmlsZSBjaGFuZ2VzIGluIHN5bmMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBgLmQudHNgIGZpbGVzLlxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIGJyb3dzZXIgdmVyc2lvbnMgdGhhdCBzdXBwb3J0IGFsbCBvZiB0aGUgZm9sbG93aW5nOlxuICogc3RhdGljIGltcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS9lczYtbW9kdWxlXG4gKiBkeW5hbWljIGltcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS9lczYtbW9kdWxlLWR5bmFtaWMtaW1wb3J0XG4gKiBpbXBvcnQubWV0YTogaHR0cHM6Ly9jYW5pdXNlLmNvbS9tZG4tamF2YXNjcmlwdF9vcGVyYXRvcnNfaW1wb3J0X21ldGFcbiAqLyBcInVzZSBzdHJpY3RcIjtcbmNvbnN0IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUID0gW1xuICAgIFwiY2hyb21lIDY0XCIsXG4gICAgXCJlZGdlIDc5XCIsXG4gICAgXCJmaXJlZm94IDY3XCIsXG4gICAgXCJvcGVyYSA1MVwiLFxuICAgIFwic2FmYXJpIDEyXCJcbl07XG5tb2R1bGUuZXhwb3J0cyA9IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1tb2Rlcm4tYnJvd3NlcnNsaXN0LXRhcmdldC5qcy5tYXAiXSwibmFtZXMiOlsiTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/modern-browserslist-target.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js": +/*!******************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"denormalizePagePath\", ({\n enumerable: true,\n get: function() {\n return denormalizePagePath;\n }\n}));\nconst _utils = __webpack_require__(/*! ../router/utils */ \"./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _normalizepathsep = __webpack_require__(/*! ./normalize-path-sep */ \"./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\");\nfunction denormalizePagePath(page) {\n let _page = (0, _normalizepathsep.normalizePathSep)(page);\n return _page.startsWith(\"/index/\") && !(0, _utils.isDynamicRoute)(_page) ? _page.slice(6) : _page !== \"/index\" ? _page : \"/\";\n} //# sourceMappingURL=denormalize-page-path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsdURBQXNEO0lBQ2xESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsU0FBU0MsbUJBQU9BLENBQUMsa0ZBQWlCO0FBQ3hDLE1BQU1DLG9CQUFvQkQsbUJBQU9BLENBQUMsaUdBQXNCO0FBQ3hELFNBQVNGLG9CQUFvQkksSUFBSTtJQUM3QixJQUFJQyxRQUFRLENBQUMsR0FBR0Ysa0JBQWtCRyxnQkFBZ0IsRUFBRUY7SUFDcEQsT0FBT0MsTUFBTUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUdOLE9BQU9PLGNBQWMsRUFBRUgsU0FBU0EsTUFBTUksS0FBSyxDQUFDLEtBQUtKLFVBQVUsV0FBV0EsUUFBUTtBQUM3SCxFQUVBLGlEQUFpRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aC5qcz9kZTBmIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVub3JtYWxpemVQYWdlUGF0aFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGVub3JtYWxpemVQYWdlUGF0aDtcbiAgICB9XG59KTtcbmNvbnN0IF91dGlscyA9IHJlcXVpcmUoXCIuLi9yb3V0ZXIvdXRpbHNcIik7XG5jb25zdCBfbm9ybWFsaXplcGF0aHNlcCA9IHJlcXVpcmUoXCIuL25vcm1hbGl6ZS1wYXRoLXNlcFwiKTtcbmZ1bmN0aW9uIGRlbm9ybWFsaXplUGFnZVBhdGgocGFnZSkge1xuICAgIGxldCBfcGFnZSA9ICgwLCBfbm9ybWFsaXplcGF0aHNlcC5ub3JtYWxpemVQYXRoU2VwKShwYWdlKTtcbiAgICByZXR1cm4gX3BhZ2Uuc3RhcnRzV2l0aChcIi9pbmRleC9cIikgJiYgISgwLCBfdXRpbHMuaXNEeW5hbWljUm91dGUpKF9wYWdlKSA/IF9wYWdlLnNsaWNlKDYpIDogX3BhZ2UgIT09IFwiL2luZGV4XCIgPyBfcGFnZSA6IFwiL1wiO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZW5vcm1hbGl6ZS1wYWdlLXBhdGguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImRlbm9ybWFsaXplUGFnZVBhdGgiLCJfdXRpbHMiLCJyZXF1aXJlIiwiX25vcm1hbGl6ZXBhdGhzZXAiLCJwYWdlIiwiX3BhZ2UiLCJub3JtYWxpemVQYXRoU2VwIiwic3RhcnRzV2l0aCIsImlzRHluYW1pY1JvdXRlIiwic2xpY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ensureLeadingSlash\", ({\n enumerable: true,\n get: function() {\n return ensureLeadingSlash;\n }\n}));\nfunction ensureLeadingSlash(path) {\n return path.startsWith(\"/\") ? path : \"/\" + path;\n} //# sourceMappingURL=ensure-leading-slash.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUFnQjtBQUNqQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLG1CQUFtQkMsSUFBSTtJQUM1QixPQUFPQSxLQUFLQyxVQUFVLENBQUMsT0FBT0QsT0FBTyxNQUFNQTtBQUMvQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoLmpzP2NmMzIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3IgYSBnaXZlbiBwYWdlIHBhdGgsIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZXJlIGlzIGEgbGVhZGluZyBzbGFzaC5cbiAqIElmIHRoZXJlIGlzIG5vdCBhIGxlYWRpbmcgc2xhc2gsIG9uZSBpcyBhZGRlZCwgb3RoZXJ3aXNlIGl0IGlzIG5vb3AuXG4gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbnN1cmVMZWFkaW5nU2xhc2hcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGVuc3VyZUxlYWRpbmdTbGFzaDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGVuc3VyZUxlYWRpbmdTbGFzaChwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogXCIvXCIgKyBwYXRoO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnN1cmUtbGVhZGluZy1zbGFzaC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZW5zdXJlTGVhZGluZ1NsYXNoIiwicGF0aCIsInN0YXJ0c1dpdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/page-path/normalize-page-path.js": +/*!****************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/page-path/normalize-page-path.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePagePath\", ({\n enumerable: true,\n get: function() {\n return normalizePagePath;\n }\n}));\nconst _ensureleadingslash = __webpack_require__(/*! ./ensure-leading-slash */ \"./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _utils = __webpack_require__(/*! ../router/utils */ \"./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _utils1 = __webpack_require__(/*! ../utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nfunction normalizePagePath(page) {\n const normalized = /^\\/index(\\/|$)/.test(page) && !(0, _utils.isDynamicRoute)(page) ? \"/index\" + page : page === \"/\" ? \"/index\" : (0, _ensureleadingslash.ensureLeadingSlash)(page);\n if (true) {\n const { posix } = __webpack_require__(/*! path */ \"path\");\n const resolvedPage = posix.normalize(normalized);\n if (resolvedPage !== normalized) {\n throw new _utils1.NormalizeError(\"Requested and resolved page mismatch: \" + normalized + \" \" + resolvedPage);\n }\n }\n return normalized;\n} //# sourceMappingURL=normalize-page-path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL25vcm1hbGl6ZS1wYWdlLXBhdGguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHFEQUFvRDtJQUNoREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHNCQUFzQkMsbUJBQU9BLENBQUMscUdBQXdCO0FBQzVELE1BQU1DLFNBQVNELG1CQUFPQSxDQUFDLGtGQUFpQjtBQUN4QyxNQUFNRSxVQUFVRixtQkFBT0EsQ0FBQyw4REFBVTtBQUNsQyxTQUFTRixrQkFBa0JLLElBQUk7SUFDM0IsTUFBTUMsYUFBYSxpQkFBaUJDLElBQUksQ0FBQ0YsU0FBUyxDQUFDLENBQUMsR0FBR0YsT0FBT0ssY0FBYyxFQUFFSCxRQUFRLFdBQVdBLE9BQU9BLFNBQVMsTUFBTSxXQUFXLENBQUMsR0FBR0osb0JBQW9CUSxrQkFBa0IsRUFBRUo7SUFDOUssSUFBSUssSUFBbUMsRUFBRTtRQUNyQyxNQUFNLEVBQUVHLEtBQUssRUFBRSxHQUFHWCxtQkFBT0EsQ0FBQyxrQkFBTTtRQUNoQyxNQUFNWSxlQUFlRCxNQUFNRSxTQUFTLENBQUNUO1FBQ3JDLElBQUlRLGlCQUFpQlIsWUFBWTtZQUM3QixNQUFNLElBQUlGLFFBQVFZLGNBQWMsQ0FBQywyQ0FBMkNWLGFBQWEsTUFBTVE7UUFDbkc7SUFDSjtJQUNBLE9BQU9SO0FBQ1gsRUFFQSwrQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3BhZ2UtcGF0aC9ub3JtYWxpemUtcGFnZS1wYXRoLmpzP2YzZDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJub3JtYWxpemVQYWdlUGF0aFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplUGFnZVBhdGg7XG4gICAgfVxufSk7XG5jb25zdCBfZW5zdXJlbGVhZGluZ3NsYXNoID0gcmVxdWlyZShcIi4vZW5zdXJlLWxlYWRpbmctc2xhc2hcIik7XG5jb25zdCBfdXRpbHMgPSByZXF1aXJlKFwiLi4vcm91dGVyL3V0aWxzXCIpO1xuY29uc3QgX3V0aWxzMSA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhZ2VQYXRoKHBhZ2UpIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gL15cXC9pbmRleChcXC98JCkvLnRlc3QocGFnZSkgJiYgISgwLCBfdXRpbHMuaXNEeW5hbWljUm91dGUpKHBhZ2UpID8gXCIvaW5kZXhcIiArIHBhZ2UgOiBwYWdlID09PSBcIi9cIiA/IFwiL2luZGV4XCIgOiAoMCwgX2Vuc3VyZWxlYWRpbmdzbGFzaC5lbnN1cmVMZWFkaW5nU2xhc2gpKHBhZ2UpO1xuICAgIGlmIChwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgIT09IFwiZWRnZVwiKSB7XG4gICAgICAgIGNvbnN0IHsgcG9zaXggfSA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuICAgICAgICBjb25zdCByZXNvbHZlZFBhZ2UgPSBwb3NpeC5ub3JtYWxpemUobm9ybWFsaXplZCk7XG4gICAgICAgIGlmIChyZXNvbHZlZFBhZ2UgIT09IG5vcm1hbGl6ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbHMxLk5vcm1hbGl6ZUVycm9yKFwiUmVxdWVzdGVkIGFuZCByZXNvbHZlZCBwYWdlIG1pc21hdGNoOiBcIiArIG5vcm1hbGl6ZWQgKyBcIiBcIiArIHJlc29sdmVkUGFnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vcm1hbGl6ZS1wYWdlLXBhdGguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIm5vcm1hbGl6ZVBhZ2VQYXRoIiwiX2Vuc3VyZWxlYWRpbmdzbGFzaCIsInJlcXVpcmUiLCJfdXRpbHMiLCJfdXRpbHMxIiwicGFnZSIsIm5vcm1hbGl6ZWQiLCJ0ZXN0IiwiaXNEeW5hbWljUm91dGUiLCJlbnN1cmVMZWFkaW5nU2xhc2giLCJwcm9jZXNzIiwiZW52IiwiTkVYVF9SVU5USU1FIiwicG9zaXgiLCJyZXNvbHZlZFBhZ2UiLCJub3JtYWxpemUiLCJOb3JtYWxpemVFcnJvciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/normalize-page-path.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js": +/*!***************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("/**\n * For a given page path, this function ensures that there is no backslash\n * escaping slashes in the path. Example:\n * - `foo\\/bar\\/baz` -> `foo/bar/baz`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathSep\", ({\n enumerable: true,\n get: function() {\n return normalizePathSep;\n }\n}));\nfunction normalizePathSep(path) {\n return path.replace(/\\\\/g, \"/\");\n} //# sourceMappingURL=normalize-path-sep.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL25vcm1hbGl6ZS1wYXRoLXNlcC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7OztDQUlDLEdBQWdCO0FBQ2pCQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsb0RBQW1EO0lBQy9DSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0EsaUJBQWlCQyxJQUFJO0lBQzFCLE9BQU9BLEtBQUtDLE9BQU8sQ0FBQyxPQUFPO0FBQy9CLEVBRUEsOENBQThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9wYWdlLXBhdGgvbm9ybWFsaXplLXBhdGgtc2VwLmpzP2JhYjgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3IgYSBnaXZlbiBwYWdlIHBhdGgsIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZXJlIGlzIG5vIGJhY2tzbGFzaFxuICogZXNjYXBpbmcgc2xhc2hlcyBpbiB0aGUgcGF0aC4gRXhhbXBsZTpcbiAqICAtIGBmb29cXC9iYXJcXC9iYXpgIC0+IGBmb28vYmFyL2JhemBcbiAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vcm1hbGl6ZVBhdGhTZXBcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVBhdGhTZXA7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBub3JtYWxpemVQYXRoU2VwKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9ybWFsaXplLXBhdGgtc2VwLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJub3JtYWxpemVQYXRoU2VwIiwicGF0aCIsInJlcGxhY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/app-paths.js": +/*!*********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/app-paths.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n normalizeAppPath: function() {\n return normalizeAppPath;\n },\n normalizeRscURL: function() {\n return normalizeRscURL;\n }\n});\nconst _ensureleadingslash = __webpack_require__(/*! ../../page-path/ensure-leading-slash */ \"./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _segment = __webpack_require__(/*! ../../segment */ \"./node_modules/next/dist/shared/lib/segment.js\");\nfunction normalizeAppPath(route) {\n return (0, _ensureleadingslash.ensureLeadingSlash)(route.split(\"/\").reduce((pathname, segment, index, segments)=>{\n // Empty segments are ignored.\n if (!segment) {\n return pathname;\n }\n // Groups are ignored.\n if ((0, _segment.isGroupSegment)(segment)) {\n return pathname;\n }\n // Parallel segments are ignored.\n if (segment[0] === \"@\") {\n return pathname;\n }\n // The last segment (if it's a leaf) should be ignored.\n if ((segment === \"page\" || segment === \"route\") && index === segments.length - 1) {\n return pathname;\n }\n return pathname + \"/\" + segment;\n }, \"\"));\n}\nfunction normalizeRscURL(url) {\n return url.replace(/\\.rsc($|\\?)/, \"$1\");\n} //# sourceMappingURL=app-paths.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRocy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsa0JBQWtCO1FBQ2QsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxzQkFBc0JDLG1CQUFPQSxDQUFDLG1IQUFzQztBQUMxRSxNQUFNQyxXQUFXRCxtQkFBT0EsQ0FBQyxxRUFBZTtBQUN4QyxTQUFTVCxpQkFBaUJXLEtBQUs7SUFDM0IsT0FBTyxDQUFDLEdBQUdILG9CQUFvQkksa0JBQWtCLEVBQUVELE1BQU1FLEtBQUssQ0FBQyxLQUFLQyxNQUFNLENBQUMsQ0FBQ0MsVUFBVUMsU0FBU0MsT0FBT0M7UUFDbEcsOEJBQThCO1FBQzlCLElBQUksQ0FBQ0YsU0FBUztZQUNWLE9BQU9EO1FBQ1g7UUFDQSxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLEdBQUdMLFNBQVNTLGNBQWMsRUFBRUgsVUFBVTtZQUN2QyxPQUFPRDtRQUNYO1FBQ0EsaUNBQWlDO1FBQ2pDLElBQUlDLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSztZQUNwQixPQUFPRDtRQUNYO1FBQ0EsdURBQXVEO1FBQ3ZELElBQUksQ0FBQ0MsWUFBWSxVQUFVQSxZQUFZLE9BQU0sS0FBTUMsVUFBVUMsU0FBU0UsTUFBTSxHQUFHLEdBQUc7WUFDOUUsT0FBT0w7UUFDWDtRQUNBLE9BQU9BLFdBQVcsTUFBTUM7SUFDNUIsR0FBRztBQUNQO0FBQ0EsU0FBU2YsZ0JBQWdCb0IsR0FBRztJQUN4QixPQUFPQSxJQUFJQyxPQUFPLENBQUMsZUFDbkI7QUFDSixFQUVBLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRocy5qcz83ZTUyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbm9ybWFsaXplQXBwUGF0aDogbnVsbCxcbiAgICBub3JtYWxpemVSc2NVUkw6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgbm9ybWFsaXplQXBwUGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVBcHBQYXRoO1xuICAgIH0sXG4gICAgbm9ybWFsaXplUnNjVVJMOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJzY1VSTDtcbiAgICB9XG59KTtcbmNvbnN0IF9lbnN1cmVsZWFkaW5nc2xhc2ggPSByZXF1aXJlKFwiLi4vLi4vcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoXCIpO1xuY29uc3QgX3NlZ21lbnQgPSByZXF1aXJlKFwiLi4vLi4vc2VnbWVudFwiKTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFwcFBhdGgocm91dGUpIHtcbiAgICByZXR1cm4gKDAsIF9lbnN1cmVsZWFkaW5nc2xhc2guZW5zdXJlTGVhZGluZ1NsYXNoKShyb3V0ZS5zcGxpdChcIi9cIikucmVkdWNlKChwYXRobmFtZSwgc2VnbWVudCwgaW5kZXgsIHNlZ21lbnRzKT0+e1xuICAgICAgICAvLyBFbXB0eSBzZWdtZW50cyBhcmUgaWdub3JlZC5cbiAgICAgICAgaWYgKCFzZWdtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR3JvdXBzIGFyZSBpZ25vcmVkLlxuICAgICAgICBpZiAoKDAsIF9zZWdtZW50LmlzR3JvdXBTZWdtZW50KShzZWdtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBhcmFsbGVsIHNlZ21lbnRzIGFyZSBpZ25vcmVkLlxuICAgICAgICBpZiAoc2VnbWVudFswXSA9PT0gXCJAXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRobmFtZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgbGFzdCBzZWdtZW50IChpZiBpdCdzIGEgbGVhZikgc2hvdWxkIGJlIGlnbm9yZWQuXG4gICAgICAgIGlmICgoc2VnbWVudCA9PT0gXCJwYWdlXCIgfHwgc2VnbWVudCA9PT0gXCJyb3V0ZVwiKSAmJiBpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRobmFtZSArIFwiL1wiICsgc2VnbWVudDtcbiAgICB9LCBcIlwiKSk7XG59XG5mdW5jdGlvbiBub3JtYWxpemVSc2NVUkwodXJsKSB7XG4gICAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXC5yc2MoJHxcXD8pLywgLy8gJDEgZW5zdXJlcyBgP2AgaXMgcHJlc2VydmVkXG4gICAgXCIkMVwiKTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXBhdGhzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIm5vcm1hbGl6ZUFwcFBhdGgiLCJub3JtYWxpemVSc2NVUkwiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZW5zdXJlbGVhZGluZ3NsYXNoIiwicmVxdWlyZSIsIl9zZWdtZW50Iiwicm91dGUiLCJlbnN1cmVMZWFkaW5nU2xhc2giLCJzcGxpdCIsInJlZHVjZSIsInBhdGhuYW1lIiwic2VnbWVudCIsImluZGV4Iiwic2VnbWVudHMiLCJpc0dyb3VwU2VnbWVudCIsImxlbmd0aCIsInVybCIsInJlcGxhY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/app-paths.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/index.js": +/*!*****************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/index.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getSortedRoutes: function() {\n return _sortedroutes.getSortedRoutes;\n },\n isDynamicRoute: function() {\n return _isdynamic.isDynamicRoute;\n }\n});\nconst _sortedroutes = __webpack_require__(/*! ./sorted-routes */ \"./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\");\nconst _isdynamic = __webpack_require__(/*! ./is-dynamic */ \"./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\"); //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxpQkFBaUI7UUFDYixPQUFPUSxjQUFjUixlQUFlO0lBQ3hDO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9RLFdBQVdSLGNBQWM7SUFDcEM7QUFDSjtBQUNBLE1BQU1PLGdCQUFnQkUsbUJBQU9BLENBQUMsMEZBQWlCO0FBQy9DLE1BQU1ELGFBQWFDLG1CQUFPQSxDQUFDLG9GQUFjLEdBRXpDLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2luZGV4LmpzP2Y1MjUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBnZXRTb3J0ZWRSb3V0ZXM6IG51bGwsXG4gICAgaXNEeW5hbWljUm91dGU6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZ2V0U29ydGVkUm91dGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zb3J0ZWRyb3V0ZXMuZ2V0U29ydGVkUm91dGVzO1xuICAgIH0sXG4gICAgaXNEeW5hbWljUm91dGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2lzZHluYW1pYy5pc0R5bmFtaWNSb3V0ZTtcbiAgICB9XG59KTtcbmNvbnN0IF9zb3J0ZWRyb3V0ZXMgPSByZXF1aXJlKFwiLi9zb3J0ZWQtcm91dGVzXCIpO1xuY29uc3QgX2lzZHluYW1pYyA9IHJlcXVpcmUoXCIuL2lzLWR5bmFtaWNcIik7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsImdldFNvcnRlZFJvdXRlcyIsImlzRHluYW1pY1JvdXRlIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX3NvcnRlZHJvdXRlcyIsIl9pc2R5bmFtaWMiLCJyZXF1aXJlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/index.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isDynamicRoute\", ({\n enumerable: true,\n get: function() {\n return isDynamicRoute;\n }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"./node_modules/next/dist/server/future/helpers/interception-routes.js\");\n// Identify /[param]/ in route string\nconst TEST_ROUTE = /\\/\\[[^/]+?\\](?=\\/|$)/;\nfunction isDynamicRoute(route) {\n if ((0, _interceptionroutes.isInterceptionRouteAppPath)(route)) {\n route = (0, _interceptionroutes.extractInterceptionRouteInformation)(route).interceptedRoute;\n }\n return TEST_ROUTE.test(route);\n} //# sourceMappingURL=is-dynamic.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWR5bmFtaWMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGtEQUFpRDtJQUM3Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHNCQUFzQkMsbUJBQU9BLENBQUMsb0lBQXVEO0FBQzNGLHFDQUFxQztBQUNyQyxNQUFNQyxhQUFhO0FBQ25CLFNBQVNILGVBQWVJLEtBQUs7SUFDekIsSUFBSSxDQUFDLEdBQUdILG9CQUFvQkksMEJBQTBCLEVBQUVELFFBQVE7UUFDNURBLFFBQVEsQ0FBQyxHQUFHSCxvQkFBb0JLLG1DQUFtQyxFQUFFRixPQUFPRyxnQkFBZ0I7SUFDaEc7SUFDQSxPQUFPSixXQUFXSyxJQUFJLENBQUNKO0FBQzNCLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy5qcz80NmY5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNEeW5hbWljUm91dGVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzRHluYW1pY1JvdXRlO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyY2VwdGlvbnJvdXRlcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9zZXJ2ZXIvZnV0dXJlL2hlbHBlcnMvaW50ZXJjZXB0aW9uLXJvdXRlc1wiKTtcbi8vIElkZW50aWZ5IC9bcGFyYW1dLyBpbiByb3V0ZSBzdHJpbmdcbmNvbnN0IFRFU1RfUk9VVEUgPSAvXFwvXFxbW14vXSs/XFxdKD89XFwvfCQpLztcbmZ1bmN0aW9uIGlzRHluYW1pY1JvdXRlKHJvdXRlKSB7XG4gICAgaWYgKCgwLCBfaW50ZXJjZXB0aW9ucm91dGVzLmlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoKShyb3V0ZSkpIHtcbiAgICAgICAgcm91dGUgPSAoMCwgX2ludGVyY2VwdGlvbnJvdXRlcy5leHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbikocm91dGUpLmludGVyY2VwdGVkUm91dGU7XG4gICAgfVxuICAgIHJldHVybiBURVNUX1JPVVRFLnRlc3Qocm91dGUpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1keW5hbWljLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJpc0R5bmFtaWNSb3V0ZSIsIl9pbnRlcmNlcHRpb25yb3V0ZXMiLCJyZXF1aXJlIiwiVEVTVF9ST1VURSIsInJvdXRlIiwiaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgiLCJleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbiIsImludGVyY2VwdGVkUm91dGUiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js": +/*!*************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSortedRoutes\", ({\n enumerable: true,\n get: function() {\n return getSortedRoutes;\n }\n}));\nclass UrlNode {\n insert(urlPath) {\n this._insert(urlPath.split(\"/\").filter(Boolean), [], false);\n }\n smoosh() {\n return this._smoosh();\n }\n _smoosh(prefix) {\n if (prefix === void 0) prefix = \"/\";\n const childrenPaths = [\n ...this.children.keys()\n ].sort();\n if (this.slugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[]\"), 1);\n }\n if (this.restSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[...]\"), 1);\n }\n if (this.optionalRestSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[[...]]\"), 1);\n }\n const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(\"\" + prefix + c + \"/\")).reduce((prev, curr)=>[\n ...prev,\n ...curr\n ], []);\n if (this.slugName !== null) {\n routes.push(...this.children.get(\"[]\")._smoosh(prefix + \"[\" + this.slugName + \"]/\"));\n }\n if (!this.placeholder) {\n const r = prefix === \"/\" ? \"/\" : prefix.slice(0, -1);\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot define a route with the same specificity as a optional catch-all route (\"' + r + '\" and \"' + r + \"[[...\" + this.optionalRestSlugName + ']]\").');\n }\n routes.unshift(r);\n }\n if (this.restSlugName !== null) {\n routes.push(...this.children.get(\"[...]\")._smoosh(prefix + \"[...\" + this.restSlugName + \"]/\"));\n }\n if (this.optionalRestSlugName !== null) {\n routes.push(...this.children.get(\"[[...]]\")._smoosh(prefix + \"[[...\" + this.optionalRestSlugName + \"]]/\"));\n }\n return routes;\n }\n _insert(urlPaths, slugNames, isCatchAll) {\n if (urlPaths.length === 0) {\n this.placeholder = false;\n return;\n }\n if (isCatchAll) {\n throw new Error(\"Catch-all must be the last part of the URL.\");\n }\n // The next segment in the urlPaths list\n let nextSegment = urlPaths[0];\n // Check if the segment matches `[something]`\n if (nextSegment.startsWith(\"[\") && nextSegment.endsWith(\"]\")) {\n // Strip `[` and `]`, leaving only `something`\n let segmentName = nextSegment.slice(1, -1);\n let isOptional = false;\n if (segmentName.startsWith(\"[\") && segmentName.endsWith(\"]\")) {\n // Strip optional `[` and `]`, leaving only `something`\n segmentName = segmentName.slice(1, -1);\n isOptional = true;\n }\n if (segmentName.startsWith(\"...\")) {\n // Strip `...`, leaving only `something`\n segmentName = segmentName.substring(3);\n isCatchAll = true;\n }\n if (segmentName.startsWith(\"[\") || segmentName.endsWith(\"]\")) {\n throw new Error(\"Segment names may not start or end with extra brackets ('\" + segmentName + \"').\");\n }\n if (segmentName.startsWith(\".\")) {\n throw new Error(\"Segment names may not start with erroneous periods ('\" + segmentName + \"').\");\n }\n function handleSlug(previousSlug, nextSlug) {\n if (previousSlug !== null) {\n // If the specific segment already has a slug but the slug is not `something`\n // This prevents collisions like:\n // pages/[post]/index.js\n // pages/[id]/index.js\n // Because currently multiple dynamic params on the same segment level are not supported\n if (previousSlug !== nextSlug) {\n // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n throw new Error(\"You cannot use different slug names for the same dynamic path ('\" + previousSlug + \"' !== '\" + nextSlug + \"').\");\n }\n }\n slugNames.forEach((slug)=>{\n if (slug === nextSlug) {\n throw new Error('You cannot have the same slug name \"' + nextSlug + '\" repeat within a single dynamic path');\n }\n if (slug.replace(/\\W/g, \"\") === nextSegment.replace(/\\W/g, \"\")) {\n throw new Error('You cannot have the slug names \"' + slug + '\" and \"' + nextSlug + '\" differ only by non-word symbols within a single dynamic path');\n }\n });\n slugNames.push(nextSlug);\n }\n if (isCatchAll) {\n if (isOptional) {\n if (this.restSlugName != null) {\n throw new Error('You cannot use both an required and optional catch-all route at the same level (\"[...' + this.restSlugName + ']\" and \"' + urlPaths[0] + '\" ).');\n }\n handleSlug(this.optionalRestSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.optionalRestSlugName = segmentName;\n // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n nextSegment = \"[[...]]\";\n } else {\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot use both an optional and required catch-all route at the same level (\"[[...' + this.optionalRestSlugName + ']]\" and \"' + urlPaths[0] + '\").');\n }\n handleSlug(this.restSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.restSlugName = segmentName;\n // nextSegment is overwritten to [...] so that it can later be sorted specifically\n nextSegment = \"[...]\";\n }\n } else {\n if (isOptional) {\n throw new Error('Optional route parameters are not yet supported (\"' + urlPaths[0] + '\").');\n }\n handleSlug(this.slugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.slugName = segmentName;\n // nextSegment is overwritten to [] so that it can later be sorted specifically\n nextSegment = \"[]\";\n }\n }\n // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n if (!this.children.has(nextSegment)) {\n this.children.set(nextSegment, new UrlNode());\n }\n this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll);\n }\n constructor(){\n this.placeholder = true;\n this.children = new Map();\n this.slugName = null;\n this.restSlugName = null;\n this.optionalRestSlugName = null;\n }\n}\nfunction getSortedRoutes(normalizedPages) {\n // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n // Only 1 dynamic segment per nesting level\n // So in the case that is test/integration/dynamic-routing it'll be this:\n // pages/[post]/comments.js\n // pages/blog/[post]/comment/[id].js\n // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n // So in this case `UrlNode` created here has `this.slugName === 'post'`\n // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n // Instead what has to be passed through is the upwards path's dynamic names\n const root = new UrlNode();\n // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n normalizedPages.forEach((pagePath)=>root.insert(pagePath));\n // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n return root.smoosh();\n} //# sourceMappingURL=sorted-routes.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3NvcnRlZC1yb3V0ZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILG1EQUFrRDtJQUM5Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DO0lBQ0ZDLE9BQU9DLE9BQU8sRUFBRTtRQUNaLElBQUksQ0FBQ0MsT0FBTyxDQUFDRCxRQUFRRSxLQUFLLENBQUMsS0FBS0MsTUFBTSxDQUFDQyxVQUFVLEVBQUUsRUFBRTtJQUN6RDtJQUNBQyxTQUFTO1FBQ0wsT0FBTyxJQUFJLENBQUNDLE9BQU87SUFDdkI7SUFDQUEsUUFBUUMsTUFBTSxFQUFFO1FBQ1osSUFBSUEsV0FBVyxLQUFLLEdBQUdBLFNBQVM7UUFDaEMsTUFBTUMsZ0JBQWdCO2VBQ2YsSUFBSSxDQUFDQyxRQUFRLENBQUNDLElBQUk7U0FDeEIsQ0FBQ0MsSUFBSTtRQUNOLElBQUksSUFBSSxDQUFDQyxRQUFRLEtBQUssTUFBTTtZQUN4QkosY0FBY0ssTUFBTSxDQUFDTCxjQUFjTSxPQUFPLENBQUMsT0FBTztRQUN0RDtRQUNBLElBQUksSUFBSSxDQUFDQyxZQUFZLEtBQUssTUFBTTtZQUM1QlAsY0FBY0ssTUFBTSxDQUFDTCxjQUFjTSxPQUFPLENBQUMsVUFBVTtRQUN6RDtRQUNBLElBQUksSUFBSSxDQUFDRSxvQkFBb0IsS0FBSyxNQUFNO1lBQ3BDUixjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxZQUFZO1FBQzNEO1FBQ0EsTUFBTUcsU0FBU1QsY0FBY1UsR0FBRyxDQUFDLENBQUNDLElBQUksSUFBSSxDQUFDVixRQUFRLENBQUNiLEdBQUcsQ0FBQ3VCLEdBQUdiLE9BQU8sQ0FBQyxLQUFLQyxTQUFTWSxJQUFJLE1BQU1DLE1BQU0sQ0FBQyxDQUFDQyxNQUFNQyxPQUFPO21CQUNyR0Q7bUJBQ0FDO2FBQ04sRUFBRSxFQUFFO1FBQ1QsSUFBSSxJQUFJLENBQUNWLFFBQVEsS0FBSyxNQUFNO1lBQ3hCSyxPQUFPTSxJQUFJLElBQUksSUFBSSxDQUFDZCxRQUFRLENBQUNiLEdBQUcsQ0FBQyxNQUFNVSxPQUFPLENBQUNDLFNBQVMsTUFBTSxJQUFJLENBQUNLLFFBQVEsR0FBRztRQUNsRjtRQUNBLElBQUksQ0FBQyxJQUFJLENBQUNZLFdBQVcsRUFBRTtZQUNuQixNQUFNQyxJQUFJbEIsV0FBVyxNQUFNLE1BQU1BLE9BQU9tQixLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ2xELElBQUksSUFBSSxDQUFDVixvQkFBb0IsSUFBSSxNQUFNO2dCQUNuQyxNQUFNLElBQUlXLE1BQU0seUZBQXlGRixJQUFJLFlBQVlBLElBQUksVUFBVSxJQUFJLENBQUNULG9CQUFvQixHQUFHO1lBQ3ZLO1lBQ0FDLE9BQU9XLE9BQU8sQ0FBQ0g7UUFDbkI7UUFDQSxJQUFJLElBQUksQ0FBQ1YsWUFBWSxLQUFLLE1BQU07WUFDNUJFLE9BQU9NLElBQUksSUFBSSxJQUFJLENBQUNkLFFBQVEsQ0FBQ2IsR0FBRyxDQUFDLFNBQVNVLE9BQU8sQ0FBQ0MsU0FBUyxTQUFTLElBQUksQ0FBQ1EsWUFBWSxHQUFHO1FBQzVGO1FBQ0EsSUFBSSxJQUFJLENBQUNDLG9CQUFvQixLQUFLLE1BQU07WUFDcENDLE9BQU9NLElBQUksSUFBSSxJQUFJLENBQUNkLFFBQVEsQ0FBQ2IsR0FBRyxDQUFDLFdBQVdVLE9BQU8sQ0FBQ0MsU0FBUyxVQUFVLElBQUksQ0FBQ1Msb0JBQW9CLEdBQUc7UUFDdkc7UUFDQSxPQUFPQztJQUNYO0lBQ0FoQixRQUFRNEIsUUFBUSxFQUFFQyxTQUFTLEVBQUVDLFVBQVUsRUFBRTtRQUNyQyxJQUFJRixTQUFTRyxNQUFNLEtBQUssR0FBRztZQUN2QixJQUFJLENBQUNSLFdBQVcsR0FBRztZQUNuQjtRQUNKO1FBQ0EsSUFBSU8sWUFBWTtZQUNaLE1BQU0sSUFBSUosTUFBTTtRQUNwQjtRQUNBLHdDQUF3QztRQUN4QyxJQUFJTSxjQUFjSixRQUFRLENBQUMsRUFBRTtRQUM3Qiw2Q0FBNkM7UUFDN0MsSUFBSUksWUFBWUMsVUFBVSxDQUFDLFFBQVFELFlBQVlFLFFBQVEsQ0FBQyxNQUFNO1lBQzFELDhDQUE4QztZQUM5QyxJQUFJQyxjQUFjSCxZQUFZUCxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3hDLElBQUlXLGFBQWE7WUFDakIsSUFBSUQsWUFBWUYsVUFBVSxDQUFDLFFBQVFFLFlBQVlELFFBQVEsQ0FBQyxNQUFNO2dCQUMxRCx1REFBdUQ7Z0JBQ3ZEQyxjQUFjQSxZQUFZVixLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUNwQ1csYUFBYTtZQUNqQjtZQUNBLElBQUlELFlBQVlGLFVBQVUsQ0FBQyxRQUFRO2dCQUMvQix3Q0FBd0M7Z0JBQ3hDRSxjQUFjQSxZQUFZRSxTQUFTLENBQUM7Z0JBQ3BDUCxhQUFhO1lBQ2pCO1lBQ0EsSUFBSUssWUFBWUYsVUFBVSxDQUFDLFFBQVFFLFlBQVlELFFBQVEsQ0FBQyxNQUFNO2dCQUMxRCxNQUFNLElBQUlSLE1BQU0sOERBQThEUyxjQUFjO1lBQ2hHO1lBQ0EsSUFBSUEsWUFBWUYsVUFBVSxDQUFDLE1BQU07Z0JBQzdCLE1BQU0sSUFBSVAsTUFBTSwwREFBMERTLGNBQWM7WUFDNUY7WUFDQSxTQUFTRyxXQUFXQyxZQUFZLEVBQUVDLFFBQVE7Z0JBQ3RDLElBQUlELGlCQUFpQixNQUFNO29CQUN2Qiw2RUFBNkU7b0JBQzdFLGlDQUFpQztvQkFDakMsd0JBQXdCO29CQUN4QixzQkFBc0I7b0JBQ3RCLHdGQUF3RjtvQkFDeEYsSUFBSUEsaUJBQWlCQyxVQUFVO3dCQUMzQix3SEFBd0g7d0JBQ3hILE1BQU0sSUFBSWQsTUFBTSxxRUFBcUVhLGVBQWUsWUFBWUMsV0FBVztvQkFDL0g7Z0JBQ0o7Z0JBQ0FYLFVBQVVZLE9BQU8sQ0FBQyxDQUFDQztvQkFDZixJQUFJQSxTQUFTRixVQUFVO3dCQUNuQixNQUFNLElBQUlkLE1BQU0seUNBQXlDYyxXQUFXO29CQUN4RTtvQkFDQSxJQUFJRSxLQUFLQyxPQUFPLENBQUMsT0FBTyxRQUFRWCxZQUFZVyxPQUFPLENBQUMsT0FBTyxLQUFLO3dCQUM1RCxNQUFNLElBQUlqQixNQUFNLHFDQUFxQ2dCLE9BQU8sWUFBWUYsV0FBVztvQkFDdkY7Z0JBQ0o7Z0JBQ0FYLFVBQVVQLElBQUksQ0FBQ2tCO1lBQ25CO1lBQ0EsSUFBSVYsWUFBWTtnQkFDWixJQUFJTSxZQUFZO29CQUNaLElBQUksSUFBSSxDQUFDdEIsWUFBWSxJQUFJLE1BQU07d0JBQzNCLE1BQU0sSUFBSVksTUFBTSwwRkFBMEYsSUFBSSxDQUFDWixZQUFZLEdBQUcsYUFBYWMsUUFBUSxDQUFDLEVBQUUsR0FBRztvQkFDN0o7b0JBQ0FVLFdBQVcsSUFBSSxDQUFDdkIsb0JBQW9CLEVBQUVvQjtvQkFDdEMsNkRBQTZEO29CQUM3RCxJQUFJLENBQUNwQixvQkFBb0IsR0FBR29CO29CQUM1QixvRkFBb0Y7b0JBQ3BGSCxjQUFjO2dCQUNsQixPQUFPO29CQUNILElBQUksSUFBSSxDQUFDakIsb0JBQW9CLElBQUksTUFBTTt3QkFDbkMsTUFBTSxJQUFJVyxNQUFNLDJGQUEyRixJQUFJLENBQUNYLG9CQUFvQixHQUFHLGNBQWNhLFFBQVEsQ0FBQyxFQUFFLEdBQUc7b0JBQ3ZLO29CQUNBVSxXQUFXLElBQUksQ0FBQ3hCLFlBQVksRUFBRXFCO29CQUM5Qiw2REFBNkQ7b0JBQzdELElBQUksQ0FBQ3JCLFlBQVksR0FBR3FCO29CQUNwQixrRkFBa0Y7b0JBQ2xGSCxjQUFjO2dCQUNsQjtZQUNKLE9BQU87Z0JBQ0gsSUFBSUksWUFBWTtvQkFDWixNQUFNLElBQUlWLE1BQU0sdURBQXVERSxRQUFRLENBQUMsRUFBRSxHQUFHO2dCQUN6RjtnQkFDQVUsV0FBVyxJQUFJLENBQUMzQixRQUFRLEVBQUV3QjtnQkFDMUIsNkRBQTZEO2dCQUM3RCxJQUFJLENBQUN4QixRQUFRLEdBQUd3QjtnQkFDaEIsK0VBQStFO2dCQUMvRUgsY0FBYztZQUNsQjtRQUNKO1FBQ0EsaUZBQWlGO1FBQ2pGLElBQUksQ0FBQyxJQUFJLENBQUN4QixRQUFRLENBQUNvQyxHQUFHLENBQUNaLGNBQWM7WUFDakMsSUFBSSxDQUFDeEIsUUFBUSxDQUFDcUMsR0FBRyxDQUFDYixhQUFhLElBQUluQztRQUN2QztRQUNBLElBQUksQ0FBQ1csUUFBUSxDQUFDYixHQUFHLENBQUNxQyxhQUFhaEMsT0FBTyxDQUFDNEIsU0FBU0gsS0FBSyxDQUFDLElBQUlJLFdBQVdDO0lBQ3pFO0lBQ0FnQixhQUFhO1FBQ1QsSUFBSSxDQUFDdkIsV0FBVyxHQUFHO1FBQ25CLElBQUksQ0FBQ2YsUUFBUSxHQUFHLElBQUl1QztRQUNwQixJQUFJLENBQUNwQyxRQUFRLEdBQUc7UUFDaEIsSUFBSSxDQUFDRyxZQUFZLEdBQUc7UUFDcEIsSUFBSSxDQUFDQyxvQkFBb0IsR0FBRztJQUNoQztBQUNKO0FBQ0EsU0FBU25CLGdCQUFnQm9ELGVBQWU7SUFDcEMsa0ZBQWtGO0lBQ2xGLDRFQUE0RTtJQUM1RSwyQ0FBMkM7SUFDM0MseUVBQXlFO0lBQ3pFLDJCQUEyQjtJQUMzQixvQ0FBb0M7SUFDcEMsOEVBQThFO0lBQzlFLHdFQUF3RTtJQUN4RSxnSEFBZ0g7SUFDaEgsNEVBQTRFO0lBQzVFLE1BQU1DLE9BQU8sSUFBSXBEO0lBQ2pCLDZGQUE2RjtJQUM3Rm1ELGdCQUFnQlAsT0FBTyxDQUFDLENBQUNTLFdBQVdELEtBQUtuRCxNQUFNLENBQUNvRDtJQUNoRCw0R0FBNEc7SUFDNUcsT0FBT0QsS0FBSzdDLE1BQU07QUFDdEIsRUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9zb3J0ZWQtcm91dGVzLmpzPzJmNzgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTb3J0ZWRSb3V0ZXNcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFNvcnRlZFJvdXRlcztcbiAgICB9XG59KTtcbmNsYXNzIFVybE5vZGUge1xuICAgIGluc2VydCh1cmxQYXRoKSB7XG4gICAgICAgIHRoaXMuX2luc2VydCh1cmxQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksIFtdLCBmYWxzZSk7XG4gICAgfVxuICAgIHNtb29zaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Ntb29zaCgpO1xuICAgIH1cbiAgICBfc21vb3NoKHByZWZpeCkge1xuICAgICAgICBpZiAocHJlZml4ID09PSB2b2lkIDApIHByZWZpeCA9IFwiL1wiO1xuICAgICAgICBjb25zdCBjaGlsZHJlblBhdGhzID0gW1xuICAgICAgICAgICAgLi4udGhpcy5jaGlsZHJlbi5rZXlzKClcbiAgICAgICAgXS5zb3J0KCk7XG4gICAgICAgIGlmICh0aGlzLnNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjaGlsZHJlblBhdGhzLnNwbGljZShjaGlsZHJlblBhdGhzLmluZGV4T2YoXCJbXVwiKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjaGlsZHJlblBhdGhzLnNwbGljZShjaGlsZHJlblBhdGhzLmluZGV4T2YoXCJbLi4uXVwiKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuUGF0aHMuc3BsaWNlKGNoaWxkcmVuUGF0aHMuaW5kZXhPZihcIltbLi4uXV1cIiksIDEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdXRlcyA9IGNoaWxkcmVuUGF0aHMubWFwKChjKT0+dGhpcy5jaGlsZHJlbi5nZXQoYykuX3Ntb29zaChcIlwiICsgcHJlZml4ICsgYyArIFwiL1wiKSkucmVkdWNlKChwcmV2LCBjdXJyKT0+W1xuICAgICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgICAgLi4uY3VyclxuICAgICAgICAgICAgXSwgW10pO1xuICAgICAgICBpZiAodGhpcy5zbHVnTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcm91dGVzLnB1c2goLi4udGhpcy5jaGlsZHJlbi5nZXQoXCJbXVwiKS5fc21vb3NoKHByZWZpeCArIFwiW1wiICsgdGhpcy5zbHVnTmFtZSArIFwiXS9cIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5wbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgY29uc3QgciA9IHByZWZpeCA9PT0gXCIvXCIgPyBcIi9cIiA6IHByZWZpeC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IGRlZmluZSBhIHJvdXRlIHdpdGggdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgYSBvcHRpb25hbCBjYXRjaC1hbGwgcm91dGUgKFwiJyArIHIgKyAnXCIgYW5kIFwiJyArIHIgKyBcIltbLi4uXCIgKyB0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICsgJ11dXCIpLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm91dGVzLnVuc2hpZnQocik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICByb3V0ZXMucHVzaCguLi50aGlzLmNoaWxkcmVuLmdldChcIlsuLi5dXCIpLl9zbW9vc2gocHJlZml4ICsgXCJbLi4uXCIgKyB0aGlzLnJlc3RTbHVnTmFtZSArIFwiXS9cIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICByb3V0ZXMucHVzaCguLi50aGlzLmNoaWxkcmVuLmdldChcIltbLi4uXV1cIikuX3Ntb29zaChwcmVmaXggKyBcIltbLi4uXCIgKyB0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICsgXCJdXS9cIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3V0ZXM7XG4gICAgfVxuICAgIF9pbnNlcnQodXJsUGF0aHMsIHNsdWdOYW1lcywgaXNDYXRjaEFsbCkge1xuICAgICAgICBpZiAodXJsUGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ2F0Y2hBbGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhdGNoLWFsbCBtdXN0IGJlIHRoZSBsYXN0IHBhcnQgb2YgdGhlIFVSTC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIG5leHQgc2VnbWVudCBpbiB0aGUgdXJsUGF0aHMgbGlzdFxuICAgICAgICBsZXQgbmV4dFNlZ21lbnQgPSB1cmxQYXRoc1swXTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNlZ21lbnQgbWF0Y2hlcyBgW3NvbWV0aGluZ11gXG4gICAgICAgIGlmIChuZXh0U2VnbWVudC5zdGFydHNXaXRoKFwiW1wiKSAmJiBuZXh0U2VnbWVudC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAgICAgICAgIC8vIFN0cmlwIGBbYCBhbmQgYF1gLCBsZWF2aW5nIG9ubHkgYHNvbWV0aGluZ2BcbiAgICAgICAgICAgIGxldCBzZWdtZW50TmFtZSA9IG5leHRTZWdtZW50LnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgIGxldCBpc09wdGlvbmFsID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VnbWVudE5hbWUuc3RhcnRzV2l0aChcIltcIikgJiYgc2VnbWVudE5hbWUuZW5kc1dpdGgoXCJdXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gU3RyaXAgb3B0aW9uYWwgYFtgIGFuZCBgXWAsIGxlYXZpbmcgb25seSBgc29tZXRoaW5nYFxuICAgICAgICAgICAgICAgIHNlZ21lbnROYW1lID0gc2VnbWVudE5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlZ21lbnROYW1lLnN0YXJ0c1dpdGgoXCIuLi5cIikpIHtcbiAgICAgICAgICAgICAgICAvLyBTdHJpcCBgLi4uYCwgbGVhdmluZyBvbmx5IGBzb21ldGhpbmdgXG4gICAgICAgICAgICAgICAgc2VnbWVudE5hbWUgPSBzZWdtZW50TmFtZS5zdWJzdHJpbmcoMyk7XG4gICAgICAgICAgICAgICAgaXNDYXRjaEFsbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VnbWVudE5hbWUuc3RhcnRzV2l0aChcIltcIikgfHwgc2VnbWVudE5hbWUuZW5kc1dpdGgoXCJdXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VnbWVudCBuYW1lcyBtYXkgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIGV4dHJhIGJyYWNrZXRzICgnXCIgKyBzZWdtZW50TmFtZSArIFwiJykuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlZ21lbnROYW1lLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VnbWVudCBuYW1lcyBtYXkgbm90IHN0YXJ0IHdpdGggZXJyb25lb3VzIHBlcmlvZHMgKCdcIiArIHNlZ21lbnROYW1lICsgXCInKS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVTbHVnKHByZXZpb3VzU2x1ZywgbmV4dFNsdWcpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTbHVnICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzcGVjaWZpYyBzZWdtZW50IGFscmVhZHkgaGFzIGEgc2x1ZyBidXQgdGhlIHNsdWcgaXMgbm90IGBzb21ldGhpbmdgXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgY29sbGlzaW9ucyBsaWtlOlxuICAgICAgICAgICAgICAgICAgICAvLyBwYWdlcy9bcG9zdF0vaW5kZXguanNcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFnZXMvW2lkXS9pbmRleC5qc1xuICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIGN1cnJlbnRseSBtdWx0aXBsZSBkeW5hbWljIHBhcmFtcyBvbiB0aGUgc2FtZSBzZWdtZW50IGxldmVsIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1NsdWcgIT09IG5leHRTbHVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGVycm9yIHNlZW1zIHRvIGJlIGNvbmZ1c2luZyBmb3IgdXNlcnMsIG5lZWRzIGFuIGVycm9yIGxpbmssIHRoZSBkZXNjcmlwdGlvbiBjYW4gYmUgYmFzZWQgb24gYWJvdmUgY29tbWVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBjYW5ub3QgdXNlIGRpZmZlcmVudCBzbHVnIG5hbWVzIGZvciB0aGUgc2FtZSBkeW5hbWljIHBhdGggKCdcIiArIHByZXZpb3VzU2x1ZyArIFwiJyAhPT0gJ1wiICsgbmV4dFNsdWcgKyBcIicpLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzbHVnTmFtZXMuZm9yRWFjaCgoc2x1Zyk9PntcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNsdWcgPT09IG5leHRTbHVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBzbHVnIG5hbWUgXCInICsgbmV4dFNsdWcgKyAnXCIgcmVwZWF0IHdpdGhpbiBhIHNpbmdsZSBkeW5hbWljIHBhdGgnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2x1Zy5yZXBsYWNlKC9cXFcvZywgXCJcIikgPT09IG5leHRTZWdtZW50LnJlcGxhY2UoL1xcVy9nLCBcIlwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IGhhdmUgdGhlIHNsdWcgbmFtZXMgXCInICsgc2x1ZyArICdcIiBhbmQgXCInICsgbmV4dFNsdWcgKyAnXCIgZGlmZmVyIG9ubHkgYnkgbm9uLXdvcmQgc3ltYm9scyB3aXRoaW4gYSBzaW5nbGUgZHluYW1pYyBwYXRoJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzbHVnTmFtZXMucHVzaChuZXh0U2x1Zyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDYXRjaEFsbCkge1xuICAgICAgICAgICAgICAgIGlmIChpc09wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc3RTbHVnTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgdXNlIGJvdGggYW4gcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGNhdGNoLWFsbCByb3V0ZSBhdCB0aGUgc2FtZSBsZXZlbCAoXCJbLi4uJyArIHRoaXMucmVzdFNsdWdOYW1lICsgJ11cIiBhbmQgXCInICsgdXJsUGF0aHNbMF0gKyAnXCIgKS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTbHVnKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUsIHNlZ21lbnROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2x1Z05hbWUgaXMga2VwdCBhcyBpdCBjYW4gb25seSBiZSBvbmUgcGFydGljdWxhciBzbHVnTmFtZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lID0gc2VnbWVudE5hbWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5leHRTZWdtZW50IGlzIG92ZXJ3cml0dGVuIHRvIFtbLi4uXV0gc28gdGhhdCBpdCBjYW4gbGF0ZXIgYmUgc29ydGVkIHNwZWNpZmljYWxseVxuICAgICAgICAgICAgICAgICAgICBuZXh0U2VnbWVudCA9IFwiW1suLi5dXVwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhbm5vdCB1c2UgYm90aCBhbiBvcHRpb25hbCBhbmQgcmVxdWlyZWQgY2F0Y2gtYWxsIHJvdXRlIGF0IHRoZSBzYW1lIGxldmVsIChcIltbLi4uJyArIHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgKyAnXV1cIiBhbmQgXCInICsgdXJsUGF0aHNbMF0gKyAnXCIpLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNsdWcodGhpcy5yZXN0U2x1Z05hbWUsIHNlZ21lbnROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2x1Z05hbWUgaXMga2VwdCBhcyBpdCBjYW4gb25seSBiZSBvbmUgcGFydGljdWxhciBzbHVnTmFtZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RTbHVnTmFtZSA9IHNlZ21lbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICAvLyBuZXh0U2VnbWVudCBpcyBvdmVyd3JpdHRlbiB0byBbLi4uXSBzbyB0aGF0IGl0IGNhbiBsYXRlciBiZSBzb3J0ZWQgc3BlY2lmaWNhbGx5XG4gICAgICAgICAgICAgICAgICAgIG5leHRTZWdtZW50ID0gXCJbLi4uXVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcHRpb25hbCByb3V0ZSBwYXJhbWV0ZXJzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCAoXCInICsgdXJsUGF0aHNbMF0gKyAnXCIpLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoYW5kbGVTbHVnKHRoaXMuc2x1Z05hbWUsIHNlZ21lbnROYW1lKTtcbiAgICAgICAgICAgICAgICAvLyBzbHVnTmFtZSBpcyBrZXB0IGFzIGl0IGNhbiBvbmx5IGJlIG9uZSBwYXJ0aWN1bGFyIHNsdWdOYW1lXG4gICAgICAgICAgICAgICAgdGhpcy5zbHVnTmFtZSA9IHNlZ21lbnROYW1lO1xuICAgICAgICAgICAgICAgIC8vIG5leHRTZWdtZW50IGlzIG92ZXJ3cml0dGVuIHRvIFtdIHNvIHRoYXQgaXQgY2FuIGxhdGVyIGJlIHNvcnRlZCBzcGVjaWZpY2FsbHlcbiAgICAgICAgICAgICAgICBuZXh0U2VnbWVudCA9IFwiW11cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGlzIFVybE5vZGUgZG9lc24ndCBoYXZlIHRoZSBuZXh0U2VnbWVudCB5ZXQgd2UgY3JlYXRlIGEgbmV3IGNoaWxkIFVybE5vZGVcbiAgICAgICAgaWYgKCF0aGlzLmNoaWxkcmVuLmhhcyhuZXh0U2VnbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KG5leHRTZWdtZW50LCBuZXcgVXJsTm9kZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkcmVuLmdldChuZXh0U2VnbWVudCkuX2luc2VydCh1cmxQYXRocy5zbGljZSgxKSwgc2x1Z05hbWVzLCBpc0NhdGNoQWxsKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuc2x1Z05hbWUgPSBudWxsO1xuICAgICAgICB0aGlzLnJlc3RTbHVnTmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgPSBudWxsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFNvcnRlZFJvdXRlcyhub3JtYWxpemVkUGFnZXMpIHtcbiAgICAvLyBGaXJzdCB0aGUgVXJsTm9kZSBpcyBjcmVhdGVkLCBhbmQgZXZlcnkgVXJsTm9kZSBjYW4gaGF2ZSBvbmx5IDEgZHluYW1pYyBzZWdtZW50XG4gICAgLy8gRWcgeW91IGNhbid0IGhhdmUgcGFnZXMvW3Bvc3RdL2FiYy5qcyBhbmQgcGFnZXMvW2hlbGxvXS9zb21ldGhpbmctZWxzZS5qc1xuICAgIC8vIE9ubHkgMSBkeW5hbWljIHNlZ21lbnQgcGVyIG5lc3RpbmcgbGV2ZWxcbiAgICAvLyBTbyBpbiB0aGUgY2FzZSB0aGF0IGlzIHRlc3QvaW50ZWdyYXRpb24vZHluYW1pYy1yb3V0aW5nIGl0J2xsIGJlIHRoaXM6XG4gICAgLy8gcGFnZXMvW3Bvc3RdL2NvbW1lbnRzLmpzXG4gICAgLy8gcGFnZXMvYmxvZy9bcG9zdF0vY29tbWVudC9baWRdLmpzXG4gICAgLy8gQm90aCBhcmUgZmluZSBiZWNhdXNlIGBwYWdlcy9bcG9zdF1gIGFuZCBgcGFnZXMvYmxvZ2AgYXJlIG9uIHRoZSBzYW1lIGxldmVsXG4gICAgLy8gU28gaW4gdGhpcyBjYXNlIGBVcmxOb2RlYCBjcmVhdGVkIGhlcmUgaGFzIGB0aGlzLnNsdWdOYW1lID09PSAncG9zdCdgXG4gICAgLy8gQW5kIHNpbmNlIHlvdXIgUFIgcGFzc2VkIHRocm91Z2ggYHNsdWdOYW1lYCBhcyBhbiBhcnJheSBiYXNpY2FsbHkgaXQnZCBpbmNsdWRpbmcgaXQgaW4gdG9vIG1hbnkgcG9zc2liaWxpdGllc1xuICAgIC8vIEluc3RlYWQgd2hhdCBoYXMgdG8gYmUgcGFzc2VkIHRocm91Z2ggaXMgdGhlIHVwd2FyZHMgcGF0aCdzIGR5bmFtaWMgbmFtZXNcbiAgICBjb25zdCByb290ID0gbmV3IFVybE5vZGUoKTtcbiAgICAvLyBIZXJlIHRoZSBgcm9vdGAgZ2V0cyBpbmplY3RlZCBtdWx0aXBsZSBwYXRocywgYW5kIGluc2VydCB3aWxsIGJyZWFrIHRoZW0gdXAgaW50byBzdWJsZXZlbHNcbiAgICBub3JtYWxpemVkUGFnZXMuZm9yRWFjaCgocGFnZVBhdGgpPT5yb290Lmluc2VydChwYWdlUGF0aCkpO1xuICAgIC8vIFNtb29zaCB3aWxsIHRoZW4gc29ydCB0aG9zZSBzdWJsZXZlbHMgdXAgdG8gdGhlIHBvaW50IHdoZXJlIHlvdSBnZXQgdGhlIGNvcnJlY3Qgcm91dGUgZGVmaW5pdGlvbiBwcmlvcml0eVxuICAgIHJldHVybiByb290LnNtb29zaCgpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zb3J0ZWQtcm91dGVzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJnZXRTb3J0ZWRSb3V0ZXMiLCJVcmxOb2RlIiwiaW5zZXJ0IiwidXJsUGF0aCIsIl9pbnNlcnQiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzbW9vc2giLCJfc21vb3NoIiwicHJlZml4IiwiY2hpbGRyZW5QYXRocyIsImNoaWxkcmVuIiwia2V5cyIsInNvcnQiLCJzbHVnTmFtZSIsInNwbGljZSIsImluZGV4T2YiLCJyZXN0U2x1Z05hbWUiLCJvcHRpb25hbFJlc3RTbHVnTmFtZSIsInJvdXRlcyIsIm1hcCIsImMiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsInB1c2giLCJwbGFjZWhvbGRlciIsInIiLCJzbGljZSIsIkVycm9yIiwidW5zaGlmdCIsInVybFBhdGhzIiwic2x1Z05hbWVzIiwiaXNDYXRjaEFsbCIsImxlbmd0aCIsIm5leHRTZWdtZW50Iiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic2VnbWVudE5hbWUiLCJpc09wdGlvbmFsIiwic3Vic3RyaW5nIiwiaGFuZGxlU2x1ZyIsInByZXZpb3VzU2x1ZyIsIm5leHRTbHVnIiwiZm9yRWFjaCIsInNsdWciLCJyZXBsYWNlIiwiaGFzIiwic2V0IiwiY29uc3RydWN0b3IiLCJNYXAiLCJub3JtYWxpemVkUGFnZXMiLCJyb290IiwicGFnZVBhdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/segment.js": +/*!******************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/segment.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n isGroupSegment: function() {\n return isGroupSegment;\n },\n PAGE_SEGMENT_KEY: function() {\n return PAGE_SEGMENT_KEY;\n },\n DEFAULT_SEGMENT_KEY: function() {\n return DEFAULT_SEGMENT_KEY;\n }\n});\nfunction isGroupSegment(segment) {\n // Use array[0] for performant purpose\n return segment[0] === \"(\" && segment.endsWith(\")\");\n}\nconst PAGE_SEGMENT_KEY = \"__PAGE__\";\nconst DEFAULT_SEGMENT_KEY = \"__DEFAULT__\"; //# sourceMappingURL=segment.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvc2VnbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUlOO0FBQ0EsU0FBU0ksUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVYsT0FBT0MsY0FBYyxDQUFDUSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFOLFNBQVM7SUFDYkcsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtJQUNBQyxrQkFBa0I7UUFDZCxPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxTQUFTRixlQUFlUyxPQUFPO0lBQzNCLHNDQUFzQztJQUN0QyxPQUFPQSxPQUFPLENBQUMsRUFBRSxLQUFLLE9BQU9BLFFBQVFDLFFBQVEsQ0FBQztBQUNsRDtBQUNBLE1BQU1ULG1CQUFtQjtBQUN6QixNQUFNQyxzQkFBc0IsZUFFNUIsbUNBQW1DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zZWdtZW50LmpzP2ZmNzIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBpc0dyb3VwU2VnbWVudDogbnVsbCxcbiAgICBQQUdFX1NFR01FTlRfS0VZOiBudWxsLFxuICAgIERFRkFVTFRfU0VHTUVOVF9LRVk6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgaXNHcm91cFNlZ21lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNHcm91cFNlZ21lbnQ7XG4gICAgfSxcbiAgICBQQUdFX1NFR01FTlRfS0VZOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBBR0VfU0VHTUVOVF9LRVk7XG4gICAgfSxcbiAgICBERUZBVUxUX1NFR01FTlRfS0VZOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0VHTUVOVF9LRVk7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBpc0dyb3VwU2VnbWVudChzZWdtZW50KSB7XG4gICAgLy8gVXNlIGFycmF5WzBdIGZvciBwZXJmb3JtYW50IHB1cnBvc2VcbiAgICByZXR1cm4gc2VnbWVudFswXSA9PT0gXCIoXCIgJiYgc2VnbWVudC5lbmRzV2l0aChcIilcIik7XG59XG5jb25zdCBQQUdFX1NFR01FTlRfS0VZID0gXCJfX1BBR0VfX1wiO1xuY29uc3QgREVGQVVMVF9TRUdNRU5UX0tFWSA9IFwiX19ERUZBVUxUX19cIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VnbWVudC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJpc0dyb3VwU2VnbWVudCIsIlBBR0VfU0VHTUVOVF9LRVkiLCJERUZBVUxUX1NFR01FTlRfS0VZIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic2VnbWVudCIsImVuZHNXaXRoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/segment.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/side-effect.js": +/*!**********************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/side-effect.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return SideEffect;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"react\");\nconst isServer = \"undefined\" === \"undefined\";\nconst useClientOnlyLayoutEffect = isServer ? ()=>{} : _react.useLayoutEffect;\nconst useClientOnlyEffect = isServer ? ()=>{} : _react.useEffect;\nfunction SideEffect(props) {\n const { headManager, reduceComponentsToState } = props;\n function emitChange() {\n if (headManager && headManager.mountedInstances) {\n const headElements = _react.Children.toArray(Array.from(headManager.mountedInstances).filter(Boolean));\n headManager.updateHead(reduceComponentsToState(headElements, props));\n }\n }\n if (isServer) {\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n emitChange();\n }\n useClientOnlyLayoutEffect(()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n return ()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.delete(props.children);\n };\n });\n // We need to call `updateHead` method whenever the `SideEffect` is trigger in all\n // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s\n // being rendered, we only trigger the method from the last one.\n // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`\n // singleton in the layout effect pass, and actually trigger it in the effect pass.\n useClientOnlyLayoutEffect(()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n return ()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n };\n });\n useClientOnlyEffect(()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n return ()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n };\n });\n return null;\n} //# sourceMappingURL=side-effect.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvc2lkZS1lZmZlY3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLFNBQVNDLG1CQUFPQSxDQUFDLG9CQUFPO0FBQzlCLE1BQU1DLFdBQVcsZ0JBQWtCO0FBQ25DLE1BQU1DLDRCQUE0QkQsV0FBVyxLQUFLLElBQUlGLE9BQU9JLGVBQWU7QUFDNUUsTUFBTUMsc0JBQXNCSCxXQUFXLEtBQUssSUFBSUYsT0FBT00sU0FBUztBQUNoRSxTQUFTUCxXQUFXUSxLQUFLO0lBQ3JCLE1BQU0sRUFBRUMsV0FBVyxFQUFFQyx1QkFBdUIsRUFBRSxHQUFHRjtJQUNqRCxTQUFTRztRQUNMLElBQUlGLGVBQWVBLFlBQVlHLGdCQUFnQixFQUFFO1lBQzdDLE1BQU1DLGVBQWVaLE9BQU9hLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDQyxNQUFNQyxJQUFJLENBQUNSLFlBQVlHLGdCQUFnQixFQUFFTSxNQUFNLENBQUNDO1lBQzdGVixZQUFZVyxVQUFVLENBQUNWLHdCQUF3QkcsY0FBY0w7UUFDakU7SUFDSjtJQUNBLElBQUlMLFVBQVU7UUFDVixJQUFJa0I7UUFDSlosZUFBZSxPQUFPLEtBQUssSUFBSSxDQUFDWSxnQ0FBZ0NaLFlBQVlHLGdCQUFnQixLQUFLLE9BQU8sS0FBSyxJQUFJUyw4QkFBOEJDLEdBQUcsQ0FBQ2QsTUFBTWUsUUFBUTtRQUNqS1o7SUFDSjtJQUNBUCwwQkFBMEI7UUFDdEIsSUFBSWlCO1FBQ0paLGVBQWUsT0FBTyxLQUFLLElBQUksQ0FBQ1ksZ0NBQWdDWixZQUFZRyxnQkFBZ0IsS0FBSyxPQUFPLEtBQUssSUFBSVMsOEJBQThCQyxHQUFHLENBQUNkLE1BQU1lLFFBQVE7UUFDakssT0FBTztZQUNILElBQUlGO1lBQ0paLGVBQWUsT0FBTyxLQUFLLElBQUksQ0FBQ1ksZ0NBQWdDWixZQUFZRyxnQkFBZ0IsS0FBSyxPQUFPLEtBQUssSUFBSVMsOEJBQThCRyxNQUFNLENBQUNoQixNQUFNZSxRQUFRO1FBQ3hLO0lBQ0o7SUFDQSxrRkFBa0Y7SUFDbEYsb0ZBQW9GO0lBQ3BGLGdFQUFnRTtJQUNoRSxxRkFBcUY7SUFDckYsbUZBQW1GO0lBQ25GbkIsMEJBQTBCO1FBQ3RCLElBQUlLLGFBQWE7WUFDYkEsWUFBWWdCLGNBQWMsR0FBR2Q7UUFDakM7UUFDQSxPQUFPO1lBQ0gsSUFBSUYsYUFBYTtnQkFDYkEsWUFBWWdCLGNBQWMsR0FBR2Q7WUFDakM7UUFDSjtJQUNKO0lBQ0FMLG9CQUFvQjtRQUNoQixJQUFJRyxlQUFlQSxZQUFZZ0IsY0FBYyxFQUFFO1lBQzNDaEIsWUFBWWdCLGNBQWM7WUFDMUJoQixZQUFZZ0IsY0FBYyxHQUFHO1FBQ2pDO1FBQ0EsT0FBTztZQUNILElBQUloQixlQUFlQSxZQUFZZ0IsY0FBYyxFQUFFO2dCQUMzQ2hCLFlBQVlnQixjQUFjO2dCQUMxQmhCLFlBQVlnQixjQUFjLEdBQUc7WUFDakM7UUFDSjtJQUNKO0lBQ0EsT0FBTztBQUNYLEVBRUEsdUNBQXVDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zaWRlLWVmZmVjdC5qcz80MDhjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU2lkZUVmZmVjdDtcbiAgICB9XG59KTtcbmNvbnN0IF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmNvbnN0IGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIjtcbmNvbnN0IHVzZUNsaWVudE9ubHlMYXlvdXRFZmZlY3QgPSBpc1NlcnZlciA/ICgpPT57fSA6IF9yZWFjdC51c2VMYXlvdXRFZmZlY3Q7XG5jb25zdCB1c2VDbGllbnRPbmx5RWZmZWN0ID0gaXNTZXJ2ZXIgPyAoKT0+e30gOiBfcmVhY3QudXNlRWZmZWN0O1xuZnVuY3Rpb24gU2lkZUVmZmVjdChwcm9wcykge1xuICAgIGNvbnN0IHsgaGVhZE1hbmFnZXIsIHJlZHVjZUNvbXBvbmVudHNUb1N0YXRlIH0gPSBwcm9wcztcbiAgICBmdW5jdGlvbiBlbWl0Q2hhbmdlKCkge1xuICAgICAgICBpZiAoaGVhZE1hbmFnZXIgJiYgaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlcykge1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW1lbnRzID0gX3JlYWN0LkNoaWxkcmVuLnRvQXJyYXkoQXJyYXkuZnJvbShoZWFkTWFuYWdlci5tb3VudGVkSW5zdGFuY2VzKS5maWx0ZXIoQm9vbGVhbikpO1xuICAgICAgICAgICAgaGVhZE1hbmFnZXIudXBkYXRlSGVhZChyZWR1Y2VDb21wb25lbnRzVG9TdGF0ZShoZWFkRWxlbWVudHMsIHByb3BzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICAgIHZhciBfaGVhZE1hbmFnZXJfbW91bnRlZEluc3RhbmNlcztcbiAgICAgICAgaGVhZE1hbmFnZXIgPT0gbnVsbCA/IHZvaWQgMCA6IChfaGVhZE1hbmFnZXJfbW91bnRlZEluc3RhbmNlcyA9IGhlYWRNYW5hZ2VyLm1vdW50ZWRJbnN0YW5jZXMpID09IG51bGwgPyB2b2lkIDAgOiBfaGVhZE1hbmFnZXJfbW91bnRlZEluc3RhbmNlcy5hZGQocHJvcHMuY2hpbGRyZW4pO1xuICAgICAgICBlbWl0Q2hhbmdlKCk7XG4gICAgfVxuICAgIHVzZUNsaWVudE9ubHlMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgdmFyIF9oZWFkTWFuYWdlcl9tb3VudGVkSW5zdGFuY2VzO1xuICAgICAgICBoZWFkTWFuYWdlciA9PSBudWxsID8gdm9pZCAwIDogKF9oZWFkTWFuYWdlcl9tb3VudGVkSW5zdGFuY2VzID0gaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9oZWFkTWFuYWdlcl9tb3VudGVkSW5zdGFuY2VzLmFkZChwcm9wcy5jaGlsZHJlbik7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgdmFyIF9oZWFkTWFuYWdlcl9tb3VudGVkSW5zdGFuY2VzO1xuICAgICAgICAgICAgaGVhZE1hbmFnZXIgPT0gbnVsbCA/IHZvaWQgMCA6IChfaGVhZE1hbmFnZXJfbW91bnRlZEluc3RhbmNlcyA9IGhlYWRNYW5hZ2VyLm1vdW50ZWRJbnN0YW5jZXMpID09IG51bGwgPyB2b2lkIDAgOiBfaGVhZE1hbmFnZXJfbW91bnRlZEluc3RhbmNlcy5kZWxldGUocHJvcHMuY2hpbGRyZW4pO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIC8vIFdlIG5lZWQgdG8gY2FsbCBgdXBkYXRlSGVhZGAgbWV0aG9kIHdoZW5ldmVyIHRoZSBgU2lkZUVmZmVjdGAgaXMgdHJpZ2dlciBpbiBhbGxcbiAgICAvLyBsaWZlLWN5Y2xlczogbW91bnQsIHVwZGF0ZSwgdW5tb3VudC4gSG93ZXZlciwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGBTaWRlRWZmZWN0YHNcbiAgICAvLyBiZWluZyByZW5kZXJlZCwgd2Ugb25seSB0cmlnZ2VyIHRoZSBtZXRob2QgZnJvbSB0aGUgbGFzdCBvbmUuXG4gICAgLy8gVGhpcyBpcyBlbnN1cmVkIGJ5IGtlZXBpbmcgdGhlIGxhc3QgdW5mbHVzaGVkIGB1cGRhdGVIZWFkYCBpbiB0aGUgYF9wZW5kaW5nVXBkYXRlYFxuICAgIC8vIHNpbmdsZXRvbiBpbiB0aGUgbGF5b3V0IGVmZmVjdCBwYXNzLCBhbmQgYWN0dWFsbHkgdHJpZ2dlciBpdCBpbiB0aGUgZWZmZWN0IHBhc3MuXG4gICAgdXNlQ2xpZW50T25seUxheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoaGVhZE1hbmFnZXIpIHtcbiAgICAgICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlID0gZW1pdENoYW5nZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmIChoZWFkTWFuYWdlcikge1xuICAgICAgICAgICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlID0gZW1pdENoYW5nZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICB1c2VDbGllbnRPbmx5RWZmZWN0KCgpPT57XG4gICAgICAgIGlmIChoZWFkTWFuYWdlciAmJiBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSkge1xuICAgICAgICAgICAgaGVhZE1hbmFnZXIuX3BlbmRpbmdVcGRhdGUoKTtcbiAgICAgICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmIChoZWFkTWFuYWdlciAmJiBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgaGVhZE1hbmFnZXIuX3BlbmRpbmdVcGRhdGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBudWxsO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaWRlLWVmZmVjdC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiU2lkZUVmZmVjdCIsIl9yZWFjdCIsInJlcXVpcmUiLCJpc1NlcnZlciIsInVzZUNsaWVudE9ubHlMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VDbGllbnRPbmx5RWZmZWN0IiwidXNlRWZmZWN0IiwicHJvcHMiLCJoZWFkTWFuYWdlciIsInJlZHVjZUNvbXBvbmVudHNUb1N0YXRlIiwiZW1pdENoYW5nZSIsIm1vdW50ZWRJbnN0YW5jZXMiLCJoZWFkRWxlbWVudHMiLCJDaGlsZHJlbiIsInRvQXJyYXkiLCJBcnJheSIsImZyb20iLCJmaWx0ZXIiLCJCb29sZWFuIiwidXBkYXRlSGVhZCIsIl9oZWFkTWFuYWdlcl9tb3VudGVkSW5zdGFuY2VzIiwiYWRkIiwiY2hpbGRyZW4iLCJkZWxldGUiLCJfcGVuZGluZ1VwZGF0ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/side-effect.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/utils.js": +/*!****************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/utils.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n WEB_VITALS: function() {\n return WEB_VITALS;\n },\n execOnce: function() {\n return execOnce;\n },\n isAbsoluteUrl: function() {\n return isAbsoluteUrl;\n },\n getLocationOrigin: function() {\n return getLocationOrigin;\n },\n getURL: function() {\n return getURL;\n },\n getDisplayName: function() {\n return getDisplayName;\n },\n isResSent: function() {\n return isResSent;\n },\n normalizeRepeatedSlashes: function() {\n return normalizeRepeatedSlashes;\n },\n loadGetInitialProps: function() {\n return loadGetInitialProps;\n },\n SP: function() {\n return SP;\n },\n ST: function() {\n return ST;\n },\n DecodeError: function() {\n return DecodeError;\n },\n NormalizeError: function() {\n return NormalizeError;\n },\n PageNotFoundError: function() {\n return PageNotFoundError;\n },\n MissingStaticPage: function() {\n return MissingStaticPage;\n },\n MiddlewareNotFoundError: function() {\n return MiddlewareNotFoundError;\n },\n stringifyError: function() {\n return stringifyError;\n }\n});\nconst WEB_VITALS = [\n \"CLS\",\n \"FCP\",\n \"FID\",\n \"INP\",\n \"LCP\",\n \"TTFB\"\n];\nfunction execOnce(fn) {\n let used = false;\n let result;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!used) {\n used = true;\n result = fn(...args);\n }\n return result;\n };\n}\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nconst isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);\nfunction getLocationOrigin() {\n const { protocol, hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? \":\" + port : \"\");\n}\nfunction getURL() {\n const { href } = window.location;\n const origin = getLocationOrigin();\n return href.substring(origin.length);\n}\nfunction getDisplayName(Component) {\n return typeof Component === \"string\" ? Component : Component.displayName || Component.name || \"Unknown\";\n}\nfunction isResSent(res) {\n return res.finished || res.headersSent;\n}\nfunction normalizeRepeatedSlashes(url) {\n const urlParts = url.split(\"?\");\n const urlNoQuery = urlParts[0];\n return urlNoQuery // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, \"/\").replace(/\\/\\/+/g, \"/\") + (urlParts[1] ? \"?\" + urlParts.slice(1).join(\"?\") : \"\");\n}\nasync function loadGetInitialProps(App, ctx) {\n if (true) {\n var _App_prototype;\n if ((_App_prototype = App.prototype) == null ? void 0 : _App_prototype.getInitialProps) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.';\n throw new Error(message);\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || ctx.ctx && ctx.ctx.res;\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)\n };\n }\n return {};\n }\n const props = await App.getInitialProps(ctx);\n if (res && isResSent(res)) {\n return props;\n }\n if (!props) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" should resolve to an object. But found \"' + props + '\" instead.';\n throw new Error(message);\n }\n if (true) {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\"\" + getDisplayName(App) + \" returned an empty object from `getInitialProps`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps\");\n }\n }\n return props;\n}\nconst SP = typeof performance !== \"undefined\";\nconst ST = SP && [\n \"mark\",\n \"measure\",\n \"getEntriesByName\"\n].every((method)=>typeof performance[method] === \"function\");\nclass DecodeError extends Error {\n}\nclass NormalizeError extends Error {\n}\nclass PageNotFoundError extends Error {\n constructor(page){\n super();\n this.code = \"ENOENT\";\n this.name = \"PageNotFoundError\";\n this.message = \"Cannot find module for page: \" + page;\n }\n}\nclass MissingStaticPage extends Error {\n constructor(page, message){\n super();\n this.message = \"Failed to load static file for page: \" + page + \" \" + message;\n }\n}\nclass MiddlewareNotFoundError extends Error {\n constructor(){\n super();\n this.code = \"ENOENT\";\n this.message = \"Cannot find the middleware module\";\n }\n}\nfunction stringifyError(error) {\n return JSON.stringify({\n message: error.message,\n stack: error.stack\n });\n} //# sourceMappingURL=utils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FrQk47QUFDQSxTQUFTa0IsUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSXhCLE9BQU9DLGNBQWMsQ0FBQ3NCLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUXBCLFNBQVM7SUFDYkcsWUFBWTtRQUNSLE9BQU9BO0lBQ1g7SUFDQUMsVUFBVTtRQUNOLE9BQU9BO0lBQ1g7SUFDQUMsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxRQUFRO1FBQ0osT0FBT0E7SUFDWDtJQUNBQyxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLFdBQVc7UUFDUCxPQUFPQTtJQUNYO0lBQ0FDLDBCQUEwQjtRQUN0QixPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLElBQUk7UUFDQSxPQUFPQTtJQUNYO0lBQ0FDLElBQUk7UUFDQSxPQUFPQTtJQUNYO0lBQ0FDLGFBQWE7UUFDVCxPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7SUFDQUMsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxtQkFBbUI7UUFDZixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1oQixhQUFhO0lBQ2Y7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0g7QUFDRCxTQUFTQyxTQUFTc0IsRUFBRTtJQUNoQixJQUFJQyxPQUFPO0lBQ1gsSUFBSUM7SUFDSixPQUFPO1FBQ0gsSUFBSSxJQUFJQyxPQUFPQyxVQUFVQyxNQUFNLEVBQUVDLE9BQU8sSUFBSUMsTUFBTUosT0FBT0ssT0FBTyxHQUFHQSxPQUFPTCxNQUFNSyxPQUFPO1lBQ25GRixJQUFJLENBQUNFLEtBQUssR0FBR0osU0FBUyxDQUFDSSxLQUFLO1FBQ2hDO1FBQ0EsSUFBSSxDQUFDUCxNQUFNO1lBQ1BBLE9BQU87WUFDUEMsU0FBU0YsTUFBTU07UUFDbkI7UUFDQSxPQUFPSjtJQUNYO0FBQ0o7QUFDQSwwREFBMEQ7QUFDMUQsZ0VBQWdFO0FBQ2hFLE1BQU1PLHFCQUFxQjtBQUMzQixNQUFNOUIsZ0JBQWdCLENBQUMrQixNQUFNRCxtQkFBbUJFLElBQUksQ0FBQ0Q7QUFDckQsU0FBUzlCO0lBQ0wsTUFBTSxFQUFFZ0MsUUFBUSxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRSxHQUFHQyxPQUFPQyxRQUFRO0lBQ3BELE9BQU9KLFdBQVcsT0FBT0MsV0FBWUMsQ0FBQUEsT0FBTyxNQUFNQSxPQUFPLEVBQUM7QUFDOUQ7QUFDQSxTQUFTakM7SUFDTCxNQUFNLEVBQUVvQyxJQUFJLEVBQUUsR0FBR0YsT0FBT0MsUUFBUTtJQUNoQyxNQUFNRSxTQUFTdEM7SUFDZixPQUFPcUMsS0FBS0UsU0FBUyxDQUFDRCxPQUFPYixNQUFNO0FBQ3ZDO0FBQ0EsU0FBU3ZCLGVBQWVzQyxTQUFTO0lBQzdCLE9BQU8sT0FBT0EsY0FBYyxXQUFXQSxZQUFZQSxVQUFVQyxXQUFXLElBQUlELFVBQVV2QixJQUFJLElBQUk7QUFDbEc7QUFDQSxTQUFTZCxVQUFVdUMsR0FBRztJQUNsQixPQUFPQSxJQUFJQyxRQUFRLElBQUlELElBQUlFLFdBQVc7QUFDMUM7QUFDQSxTQUFTeEMseUJBQXlCMEIsR0FBRztJQUNqQyxNQUFNZSxXQUFXZixJQUFJZ0IsS0FBSyxDQUFDO0lBQzNCLE1BQU1DLGFBQWFGLFFBQVEsQ0FBQyxFQUFFO0lBQzlCLE9BQU9FLFdBQVUsNERBQTREO0lBQzdFLDBDQUEwQztLQUN6Q0MsT0FBTyxDQUFDLE9BQU8sS0FBS0EsT0FBTyxDQUFDLFVBQVUsT0FBUUgsQ0FBQUEsUUFBUSxDQUFDLEVBQUUsR0FBRyxNQUFNQSxTQUFTSSxLQUFLLENBQUMsR0FBR0MsSUFBSSxDQUFDLE9BQU8sRUFBQztBQUN0RztBQUNBLGVBQWU3QyxvQkFBb0I4QyxHQUFHLEVBQUVDLEdBQUc7SUFDdkMsSUFBSUMsSUFBcUMsRUFBRTtRQUN2QyxJQUFJQztRQUNKLElBQUksQ0FBQ0EsaUJBQWlCSCxJQUFJSSxTQUFTLEtBQUssT0FBTyxLQUFLLElBQUlELGVBQWVFLGVBQWUsRUFBRTtZQUNwRixNQUFNQyxVQUFVLE1BQU12RCxlQUFlaUQsT0FBTztZQUM1QyxNQUFNLElBQUlPLE1BQU1EO1FBQ3BCO0lBQ0o7SUFDQSxpREFBaUQ7SUFDakQsTUFBTWYsTUFBTVUsSUFBSVYsR0FBRyxJQUFJVSxJQUFJQSxHQUFHLElBQUlBLElBQUlBLEdBQUcsQ0FBQ1YsR0FBRztJQUM3QyxJQUFJLENBQUNTLElBQUlLLGVBQWUsRUFBRTtRQUN0QixJQUFJSixJQUFJQSxHQUFHLElBQUlBLElBQUlaLFNBQVMsRUFBRTtZQUMxQiwrQkFBK0I7WUFDL0IsT0FBTztnQkFDSG1CLFdBQVcsTUFBTXRELG9CQUFvQitDLElBQUlaLFNBQVMsRUFBRVksSUFBSUEsR0FBRztZQUMvRDtRQUNKO1FBQ0EsT0FBTyxDQUFDO0lBQ1o7SUFDQSxNQUFNUSxRQUFRLE1BQU1ULElBQUlLLGVBQWUsQ0FBQ0o7SUFDeEMsSUFBSVYsT0FBT3ZDLFVBQVV1QyxNQUFNO1FBQ3ZCLE9BQU9rQjtJQUNYO0lBQ0EsSUFBSSxDQUFDQSxPQUFPO1FBQ1IsTUFBTUgsVUFBVSxNQUFNdkQsZUFBZWlELE9BQU8saUVBQWlFUyxRQUFRO1FBQ3JILE1BQU0sSUFBSUYsTUFBTUQ7SUFDcEI7SUFDQSxJQUFJSixJQUFxQyxFQUFFO1FBQ3ZDLElBQUk3RCxPQUFPcUUsSUFBSSxDQUFDRCxPQUFPbkMsTUFBTSxLQUFLLEtBQUssQ0FBQzJCLElBQUlBLEdBQUcsRUFBRTtZQUM3Q1UsUUFBUUMsSUFBSSxDQUFDLEtBQUs3RCxlQUFlaUQsT0FBTztRQUM1QztJQUNKO0lBQ0EsT0FBT1M7QUFDWDtBQUNBLE1BQU10RCxLQUFLLE9BQU8wRCxnQkFBZ0I7QUFDbEMsTUFBTXpELEtBQUtELE1BQU07SUFDYjtJQUNBO0lBQ0E7Q0FDSCxDQUFDMkQsS0FBSyxDQUFDLENBQUNDLFNBQVMsT0FBT0YsV0FBVyxDQUFDRSxPQUFPLEtBQUs7QUFDakQsTUFBTTFELG9CQUFvQmtEO0FBQzFCO0FBQ0EsTUFBTWpELHVCQUF1QmlEO0FBQzdCO0FBQ0EsTUFBTWhELDBCQUEwQmdEO0lBQzVCUyxZQUFZQyxJQUFJLENBQUM7UUFDYixLQUFLO1FBQ0wsSUFBSSxDQUFDQyxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUNwRCxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUN3QyxPQUFPLEdBQUcsa0NBQWtDVztJQUNyRDtBQUNKO0FBQ0EsTUFBTXpELDBCQUEwQitDO0lBQzVCUyxZQUFZQyxJQUFJLEVBQUVYLE9BQU8sQ0FBQztRQUN0QixLQUFLO1FBQ0wsSUFBSSxDQUFDQSxPQUFPLEdBQUcsMENBQTBDVyxPQUFPLE1BQU1YO0lBQzFFO0FBQ0o7QUFDQSxNQUFNN0MsZ0NBQWdDOEM7SUFDbENTLGFBQWE7UUFDVCxLQUFLO1FBQ0wsSUFBSSxDQUFDRSxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUNaLE9BQU8sR0FBRztJQUNuQjtBQUNKO0FBQ0EsU0FBUzVDLGVBQWV5RCxLQUFLO0lBQ3pCLE9BQU9DLEtBQUtDLFNBQVMsQ0FBQztRQUNsQmYsU0FBU2EsTUFBTWIsT0FBTztRQUN0QmdCLE9BQU9ILE1BQU1HLEtBQUs7SUFDdEI7QUFDSixFQUVBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMuanM/ZTdmZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFdFQl9WSVRBTFM6IG51bGwsXG4gICAgZXhlY09uY2U6IG51bGwsXG4gICAgaXNBYnNvbHV0ZVVybDogbnVsbCxcbiAgICBnZXRMb2NhdGlvbk9yaWdpbjogbnVsbCxcbiAgICBnZXRVUkw6IG51bGwsXG4gICAgZ2V0RGlzcGxheU5hbWU6IG51bGwsXG4gICAgaXNSZXNTZW50OiBudWxsLFxuICAgIG5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlczogbnVsbCxcbiAgICBsb2FkR2V0SW5pdGlhbFByb3BzOiBudWxsLFxuICAgIFNQOiBudWxsLFxuICAgIFNUOiBudWxsLFxuICAgIERlY29kZUVycm9yOiBudWxsLFxuICAgIE5vcm1hbGl6ZUVycm9yOiBudWxsLFxuICAgIFBhZ2VOb3RGb3VuZEVycm9yOiBudWxsLFxuICAgIE1pc3NpbmdTdGF0aWNQYWdlOiBudWxsLFxuICAgIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yOiBudWxsLFxuICAgIHN0cmluZ2lmeUVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIFdFQl9WSVRBTFM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gV0VCX1ZJVEFMUztcbiAgICB9LFxuICAgIGV4ZWNPbmNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4ZWNPbmNlO1xuICAgIH0sXG4gICAgaXNBYnNvbHV0ZVVybDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0Fic29sdXRlVXJsO1xuICAgIH0sXG4gICAgZ2V0TG9jYXRpb25PcmlnaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0TG9jYXRpb25PcmlnaW47XG4gICAgfSxcbiAgICBnZXRVUkw6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0VVJMO1xuICAgIH0sXG4gICAgZ2V0RGlzcGxheU5hbWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzcGxheU5hbWU7XG4gICAgfSxcbiAgICBpc1Jlc1NlbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNSZXNTZW50O1xuICAgIH0sXG4gICAgbm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcztcbiAgICB9LFxuICAgIGxvYWRHZXRJbml0aWFsUHJvcHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbG9hZEdldEluaXRpYWxQcm9wcztcbiAgICB9LFxuICAgIFNQOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNQO1xuICAgIH0sXG4gICAgU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1Q7XG4gICAgfSxcbiAgICBEZWNvZGVFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBEZWNvZGVFcnJvcjtcbiAgICB9LFxuICAgIE5vcm1hbGl6ZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5vcm1hbGl6ZUVycm9yO1xuICAgIH0sXG4gICAgUGFnZU5vdEZvdW5kRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUGFnZU5vdEZvdW5kRXJyb3I7XG4gICAgfSxcbiAgICBNaXNzaW5nU3RhdGljUGFnZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNaXNzaW5nU3RhdGljUGFnZTtcbiAgICB9LFxuICAgIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yO1xuICAgIH0sXG4gICAgc3RyaW5naWZ5RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5RXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBXRUJfVklUQUxTID0gW1xuICAgIFwiQ0xTXCIsXG4gICAgXCJGQ1BcIixcbiAgICBcIkZJRFwiLFxuICAgIFwiSU5QXCIsXG4gICAgXCJMQ1BcIixcbiAgICBcIlRURkJcIlxuXTtcbmZ1bmN0aW9uIGV4ZWNPbmNlKGZuKSB7XG4gICAgbGV0IHVzZWQgPSBmYWxzZTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXVzZWQpIHtcbiAgICAgICAgICAgIHVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmVzdWx0ID0gZm4oLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xufVxuLy8gU2NoZW1lOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMVxuLy8gQWJzb2x1dGUgVVJMOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuM1xuY29uc3QgQUJTT0xVVEVfVVJMX1JFR0VYID0gL15bYS16QS1aXVthLXpBLVpcXGQrXFwtLl0qPzovO1xuY29uc3QgaXNBYnNvbHV0ZVVybCA9ICh1cmwpPT5BQlNPTFVURV9VUkxfUkVHRVgudGVzdCh1cmwpO1xuZnVuY3Rpb24gZ2V0TG9jYXRpb25PcmlnaW4oKSB7XG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICByZXR1cm4gcHJvdG9jb2wgKyBcIi8vXCIgKyBob3N0bmFtZSArIChwb3J0ID8gXCI6XCIgKyBwb3J0IDogXCJcIik7XG59XG5mdW5jdGlvbiBnZXRVUkwoKSB7XG4gICAgY29uc3QgeyBocmVmIH0gPSB3aW5kb3cubG9jYXRpb247XG4gICAgY29uc3Qgb3JpZ2luID0gZ2V0TG9jYXRpb25PcmlnaW4oKTtcbiAgICByZXR1cm4gaHJlZi5zdWJzdHJpbmcob3JpZ2luLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBnZXREaXNwbGF5TmFtZShDb21wb25lbnQpIHtcbiAgICByZXR1cm4gdHlwZW9mIENvbXBvbmVudCA9PT0gXCJzdHJpbmdcIiA/IENvbXBvbmVudCA6IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCBcIlVua25vd25cIjtcbn1cbmZ1bmN0aW9uIGlzUmVzU2VudChyZXMpIHtcbiAgICByZXR1cm4gcmVzLmZpbmlzaGVkIHx8IHJlcy5oZWFkZXJzU2VudDtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyh1cmwpIHtcbiAgICBjb25zdCB1cmxQYXJ0cyA9IHVybC5zcGxpdChcIj9cIik7XG4gICAgY29uc3QgdXJsTm9RdWVyeSA9IHVybFBhcnRzWzBdO1xuICAgIHJldHVybiB1cmxOb1F1ZXJ5Ly8gZmlyc3Qgd2UgcmVwbGFjZSBhbnkgbm9uLWVuY29kZWQgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkXG4gICAgLy8gdGhlbiBub3JtYWxpemUgcmVwZWF0ZWQgZm9yd2FyZCBzbGFzaGVzXG4gICAgLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpLnJlcGxhY2UoL1xcL1xcLysvZywgXCIvXCIpICsgKHVybFBhcnRzWzFdID8gXCI/XCIgKyB1cmxQYXJ0cy5zbGljZSgxKS5qb2luKFwiP1wiKSA6IFwiXCIpO1xufVxuYXN5bmMgZnVuY3Rpb24gbG9hZEdldEluaXRpYWxQcm9wcyhBcHAsIGN0eCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgdmFyIF9BcHBfcHJvdG90eXBlO1xuICAgICAgICBpZiAoKF9BcHBfcHJvdG90eXBlID0gQXBwLnByb3RvdHlwZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9BcHBfcHJvdG90eXBlLmdldEluaXRpYWxQcm9wcykge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdcIicgKyBnZXREaXNwbGF5TmFtZShBcHApICsgJy5nZXRJbml0aWFsUHJvcHMoKVwiIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kIC0gdmlzaXQgaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZ2V0LWluaXRpYWwtcHJvcHMtYXMtYW4taW5zdGFuY2UtbWV0aG9kIGZvciBtb3JlIGluZm9ybWF0aW9uLic7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gd2hlbiBjYWxsZWQgZnJvbSBfYXBwIGBjdHhgIGlzIG5lc3RlZCBpbiBgY3R4YFxuICAgIGNvbnN0IHJlcyA9IGN0eC5yZXMgfHwgY3R4LmN0eCAmJiBjdHguY3R4LnJlcztcbiAgICBpZiAoIUFwcC5nZXRJbml0aWFsUHJvcHMpIHtcbiAgICAgICAgaWYgKGN0eC5jdHggJiYgY3R4LkNvbXBvbmVudCkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBwYWdlUHJvcHMgZGVmYXVsdFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwYWdlUHJvcHM6IGF3YWl0IGxvYWRHZXRJbml0aWFsUHJvcHMoY3R4LkNvbXBvbmVudCwgY3R4LmN0eClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBwcm9wcyA9IGF3YWl0IEFwcC5nZXRJbml0aWFsUHJvcHMoY3R4KTtcbiAgICBpZiAocmVzICYmIGlzUmVzU2VudChyZXMpKSB7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG4gICAgaWYgKCFwcm9wcykge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gJ1wiJyArIGdldERpc3BsYXlOYW1lKEFwcCkgKyAnLmdldEluaXRpYWxQcm9wcygpXCIgc2hvdWxkIHJlc29sdmUgdG8gYW4gb2JqZWN0LiBCdXQgZm91bmQgXCInICsgcHJvcHMgKyAnXCIgaW5zdGVhZC4nO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGggPT09IDAgJiYgIWN0eC5jdHgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlwiICsgZ2V0RGlzcGxheU5hbWUoQXBwKSArIFwiIHJldHVybmVkIGFuIGVtcHR5IG9iamVjdCBmcm9tIGBnZXRJbml0aWFsUHJvcHNgLiBUaGlzIGRlLW9wdGltaXplcyBhbmQgcHJldmVudHMgYXV0b21hdGljIHN0YXRpYyBvcHRpbWl6YXRpb24uIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2VtcHR5LW9iamVjdC1nZXRJbml0aWFsUHJvcHNcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BzO1xufVxuY29uc3QgU1AgPSB0eXBlb2YgcGVyZm9ybWFuY2UgIT09IFwidW5kZWZpbmVkXCI7XG5jb25zdCBTVCA9IFNQICYmIFtcbiAgICBcIm1hcmtcIixcbiAgICBcIm1lYXN1cmVcIixcbiAgICBcImdldEVudHJpZXNCeU5hbWVcIlxuXS5ldmVyeSgobWV0aG9kKT0+dHlwZW9mIHBlcmZvcm1hbmNlW21ldGhvZF0gPT09IFwiZnVuY3Rpb25cIik7XG5jbGFzcyBEZWNvZGVFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbmNsYXNzIE5vcm1hbGl6ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuY2xhc3MgUGFnZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocGFnZSl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29kZSA9IFwiRU5PRU5UXCI7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUGFnZU5vdEZvdW5kRXJyb3JcIjtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gXCJDYW5ub3QgZmluZCBtb2R1bGUgZm9yIHBhZ2U6IFwiICsgcGFnZTtcbiAgICB9XG59XG5jbGFzcyBNaXNzaW5nU3RhdGljUGFnZSBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihwYWdlLCBtZXNzYWdlKXtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gXCJGYWlsZWQgdG8gbG9hZCBzdGF0aWMgZmlsZSBmb3IgcGFnZTogXCIgKyBwYWdlICsgXCIgXCIgKyBtZXNzYWdlO1xuICAgIH1cbn1cbmNsYXNzIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29kZSA9IFwiRU5PRU5UXCI7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IFwiQ2Fubm90IGZpbmQgdGhlIG1pZGRsZXdhcmUgbW9kdWxlXCI7XG4gICAgfVxufVxuZnVuY3Rpb24gc3RyaW5naWZ5RXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2tcbiAgICB9KTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiV0VCX1ZJVEFMUyIsImV4ZWNPbmNlIiwiaXNBYnNvbHV0ZVVybCIsImdldExvY2F0aW9uT3JpZ2luIiwiZ2V0VVJMIiwiZ2V0RGlzcGxheU5hbWUiLCJpc1Jlc1NlbnQiLCJub3JtYWxpemVSZXBlYXRlZFNsYXNoZXMiLCJsb2FkR2V0SW5pdGlhbFByb3BzIiwiU1AiLCJTVCIsIkRlY29kZUVycm9yIiwiTm9ybWFsaXplRXJyb3IiLCJQYWdlTm90Rm91bmRFcnJvciIsIk1pc3NpbmdTdGF0aWNQYWdlIiwiTWlkZGxld2FyZU5vdEZvdW5kRXJyb3IiLCJzdHJpbmdpZnlFcnJvciIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsImZuIiwidXNlZCIsInJlc3VsdCIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiQUJTT0xVVEVfVVJMX1JFR0VYIiwidXJsIiwidGVzdCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwb3J0Iiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwib3JpZ2luIiwic3Vic3RyaW5nIiwiQ29tcG9uZW50IiwiZGlzcGxheU5hbWUiLCJyZXMiLCJmaW5pc2hlZCIsImhlYWRlcnNTZW50IiwidXJsUGFydHMiLCJzcGxpdCIsInVybE5vUXVlcnkiLCJyZXBsYWNlIiwic2xpY2UiLCJqb2luIiwiQXBwIiwiY3R4IiwicHJvY2VzcyIsIl9BcHBfcHJvdG90eXBlIiwicHJvdG90eXBlIiwiZ2V0SW5pdGlhbFByb3BzIiwibWVzc2FnZSIsIkVycm9yIiwicGFnZVByb3BzIiwicHJvcHMiLCJrZXlzIiwiY29uc29sZSIsIndhcm4iLCJwZXJmb3JtYW5jZSIsImV2ZXJ5IiwibWV0aG9kIiwiY29uc3RydWN0b3IiLCJwYWdlIiwiY29kZSIsImVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YWNrIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/utils.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/utils/warn-once.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/utils/warn-once.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"warnOnce\", ({\n enumerable: true,\n get: function() {\n return warnOnce;\n }\n}));\nlet warnOnce = (_)=>{};\nif (true) {\n const warnings = new Set();\n warnOnce = (msg)=>{\n if (!warnings.has(msg)) {\n console.warn(msg);\n }\n warnings.add(msg);\n };\n} //# sourceMappingURL=warn-once.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMvd2Fybi1vbmNlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw0Q0FBMkM7SUFDdkNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixJQUFJQSxXQUFXLENBQUNDLEtBQUs7QUFDckIsSUFBSUMsSUFBcUMsRUFBRTtJQUN2QyxNQUFNQyxXQUFXLElBQUlDO0lBQ3JCSixXQUFXLENBQUNLO1FBQ1IsSUFBSSxDQUFDRixTQUFTRyxHQUFHLENBQUNELE1BQU07WUFDcEJFLFFBQVFDLElBQUksQ0FBQ0g7UUFDakI7UUFDQUYsU0FBU00sR0FBRyxDQUFDSjtJQUNqQjtBQUNKLEVBRUEscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UuanM/NzM5NSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndhcm5PbmNlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB3YXJuT25jZTtcbiAgICB9XG59KTtcbmxldCB3YXJuT25jZSA9IChfKT0+e307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgY29uc3Qgd2FybmluZ3MgPSBuZXcgU2V0KCk7XG4gICAgd2Fybk9uY2UgPSAobXNnKT0+e1xuICAgICAgICBpZiAoIXdhcm5pbmdzLmhhcyhtc2cpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4obXNnKTtcbiAgICAgICAgfVxuICAgICAgICB3YXJuaW5ncy5hZGQobXNnKTtcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD13YXJuLW9uY2UuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIndhcm5PbmNlIiwiXyIsInByb2Nlc3MiLCJ3YXJuaW5ncyIsIlNldCIsIm1zZyIsImhhcyIsImNvbnNvbGUiLCJ3YXJuIiwiYWRkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/utils/warn-once.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/lib/is-error.js": +/*!************************************************!*\ + !*** ./node_modules/next/dist/lib/is-error.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return isError;\n },\n getProperError: function() {\n return getProperError;\n }\n});\nconst _isplainobject = __webpack_require__(/*! ../shared/lib/is-plain-object */ \"./node_modules/next/dist/shared/lib/is-plain-object.js\");\nfunction isError(err) {\n return typeof err === \"object\" && err !== null && \"name\" in err && \"message\" in err;\n}\nfunction getProperError(err) {\n if (isError(err)) {\n return err;\n }\n if (true) {\n // provide better error for case where `throw undefined`\n // is called in development\n if (typeof err === \"undefined\") {\n return new Error(\"An undefined error was thrown, \" + \"see here for more info: https://nextjs.org/docs/messages/threw-undefined\");\n }\n if (err === null) {\n return new Error(\"A null error was thrown, \" + \"see here for more info: https://nextjs.org/docs/messages/threw-undefined\");\n }\n }\n return new Error((0, _isplainobject.isPlainObject)(err) ? JSON.stringify(err) : err + \"\");\n}\n\n//# sourceMappingURL=is-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9pcy1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FHTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCx1QkFBdUIsbUJBQU8sQ0FBQyw2RkFBK0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXNDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvaXMtZXJyb3IuanM/MTc4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgZ2V0UHJvcGVyRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0Vycm9yO1xuICAgIH0sXG4gICAgZ2V0UHJvcGVyRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0UHJvcGVyRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfaXNwbGFpbm9iamVjdCA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2lzLXBsYWluLW9iamVjdFwiKTtcbmZ1bmN0aW9uIGlzRXJyb3IoZXJyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIgJiYgZXJyICE9PSBudWxsICYmIFwibmFtZVwiIGluIGVyciAmJiBcIm1lc3NhZ2VcIiBpbiBlcnI7XG59XG5mdW5jdGlvbiBnZXRQcm9wZXJFcnJvcihlcnIpIHtcbiAgICBpZiAoaXNFcnJvcihlcnIpKSB7XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgIC8vIHByb3ZpZGUgYmV0dGVyIGVycm9yIGZvciBjYXNlIHdoZXJlIGB0aHJvdyB1bmRlZmluZWRgXG4gICAgICAgIC8vIGlzIGNhbGxlZCBpbiBkZXZlbG9wbWVudFxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkFuIHVuZGVmaW5lZCBlcnJvciB3YXMgdGhyb3duLCBcIiArIFwic2VlIGhlcmUgZm9yIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvdGhyZXctdW5kZWZpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIG51bGwgZXJyb3Igd2FzIHRocm93biwgXCIgKyBcInNlZSBoZXJlIGZvciBtb3JlIGluZm86IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3RocmV3LXVuZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEVycm9yKCgwLCBfaXNwbGFpbm9iamVjdC5pc1BsYWluT2JqZWN0KShlcnIpID8gSlNPTi5zdHJpbmdpZnkoZXJyKSA6IGVyciArIFwiXCIpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1lcnJvci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/lib/is-error.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/lib/pretty-bytes.js": +/*!****************************************************!*\ + !*** ./node_modules/next/dist/lib/pretty-bytes.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("/*\nMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return prettyBytes;\n }\n}));\nconst UNITS = [\n \"B\",\n \"kB\",\n \"MB\",\n \"GB\",\n \"TB\",\n \"PB\",\n \"EB\",\n \"ZB\",\n \"YB\"\n];\n/*\nFormats the given number using `Number#toLocaleString`.\n- If locale is a string, the value is expected to be a locale-key (for example: `de`).\n- If locale is true, the system default locale is used for translation.\n- If no value for locale is specified, the number is returned unmodified.\n*/ const toLocaleString = (number, locale)=>{\n let result = number;\n if (typeof locale === \"string\") {\n result = number.toLocaleString(locale);\n } else if (locale === true) {\n result = number.toLocaleString();\n }\n return result;\n};\nfunction prettyBytes(number, options) {\n if (!Number.isFinite(number)) {\n throw new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n }\n options = Object.assign({}, options);\n if (options.signed && number === 0) {\n return \" 0 B\";\n }\n const isNegative = number < 0;\n const prefix = isNegative ? \"-\" : options.signed ? \"+\" : \"\";\n if (isNegative) {\n number = -number;\n }\n if (number < 1) {\n const numberString = toLocaleString(number, options.locale);\n return prefix + numberString + \" B\";\n }\n const exponent = Math.min(Math.floor(Math.log10(number) / 3), UNITS.length - 1);\n number = Number((number / Math.pow(1000, exponent)).toPrecision(3));\n const numberString = toLocaleString(number, options.locale);\n const unit = UNITS[exponent];\n return prefix + numberString + \" \" + unit;\n}\n\n//# sourceMappingURL=pretty-bytes.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9wcmV0dHktYnl0ZXMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEdBQWdCO0FBQ2hCLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLDJDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELGNBQWMsSUFBSSxPQUFPO0FBQ3RGO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9wcmV0dHktYnl0ZXMuanM/ZmYzMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSBTaW5kcmUgU29yaHVzIDxzaW5kcmVzb3JodXNAZ21haWwuY29tPiAoc2luZHJlc29yaHVzLmNvbSlcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwcmV0dHlCeXRlcztcbiAgICB9XG59KTtcbmNvbnN0IFVOSVRTID0gW1xuICAgIFwiQlwiLFxuICAgIFwia0JcIixcbiAgICBcIk1CXCIsXG4gICAgXCJHQlwiLFxuICAgIFwiVEJcIixcbiAgICBcIlBCXCIsXG4gICAgXCJFQlwiLFxuICAgIFwiWkJcIixcbiAgICBcIllCXCJcbl07XG4vKlxuRm9ybWF0cyB0aGUgZ2l2ZW4gbnVtYmVyIHVzaW5nIGBOdW1iZXIjdG9Mb2NhbGVTdHJpbmdgLlxuLSBJZiBsb2NhbGUgaXMgYSBzdHJpbmcsIHRoZSB2YWx1ZSBpcyBleHBlY3RlZCB0byBiZSBhIGxvY2FsZS1rZXkgKGZvciBleGFtcGxlOiBgZGVgKS5cbi0gSWYgbG9jYWxlIGlzIHRydWUsIHRoZSBzeXN0ZW0gZGVmYXVsdCBsb2NhbGUgaXMgdXNlZCBmb3IgdHJhbnNsYXRpb24uXG4tIElmIG5vIHZhbHVlIGZvciBsb2NhbGUgaXMgc3BlY2lmaWVkLCB0aGUgbnVtYmVyIGlzIHJldHVybmVkIHVubW9kaWZpZWQuXG4qLyBjb25zdCB0b0xvY2FsZVN0cmluZyA9IChudW1iZXIsIGxvY2FsZSk9PntcbiAgICBsZXQgcmVzdWx0ID0gbnVtYmVyO1xuICAgIGlmICh0eXBlb2YgbG9jYWxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJlc3VsdCA9IG51bWJlci50b0xvY2FsZVN0cmluZyhsb2NhbGUpO1xuICAgIH0gZWxzZSBpZiAobG9jYWxlID09PSB0cnVlKSB7XG4gICAgICAgIHJlc3VsdCA9IG51bWJlci50b0xvY2FsZVN0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbmZ1bmN0aW9uIHByZXR0eUJ5dGVzKG51bWJlciwgb3B0aW9ucykge1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBmaW5pdGUgbnVtYmVyLCBnb3QgJHt0eXBlb2YgbnVtYmVyfTogJHtudW1iZXJ9YCk7XG4gICAgfVxuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5zaWduZWQgJiYgbnVtYmVyID09PSAwKSB7XG4gICAgICAgIHJldHVybiBcIiAwIEJcIjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWdhdGl2ZSA9IG51bWJlciA8IDA7XG4gICAgY29uc3QgcHJlZml4ID0gaXNOZWdhdGl2ZSA/IFwiLVwiIDogb3B0aW9ucy5zaWduZWQgPyBcIitcIiA6IFwiXCI7XG4gICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgbnVtYmVyID0gLW51bWJlcjtcbiAgICB9XG4gICAgaWYgKG51bWJlciA8IDEpIHtcbiAgICAgICAgY29uc3QgbnVtYmVyU3RyaW5nID0gdG9Mb2NhbGVTdHJpbmcobnVtYmVyLCBvcHRpb25zLmxvY2FsZSk7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBudW1iZXJTdHJpbmcgKyBcIiBCXCI7XG4gICAgfVxuICAgIGNvbnN0IGV4cG9uZW50ID0gTWF0aC5taW4oTWF0aC5mbG9vcihNYXRoLmxvZzEwKG51bWJlcikgLyAzKSwgVU5JVFMubGVuZ3RoIC0gMSk7XG4gICAgbnVtYmVyID0gTnVtYmVyKChudW1iZXIgLyBNYXRoLnBvdygxMDAwLCBleHBvbmVudCkpLnRvUHJlY2lzaW9uKDMpKTtcbiAgICBjb25zdCBudW1iZXJTdHJpbmcgPSB0b0xvY2FsZVN0cmluZyhudW1iZXIsIG9wdGlvbnMubG9jYWxlKTtcbiAgICBjb25zdCB1bml0ID0gVU5JVFNbZXhwb25lbnRdO1xuICAgIHJldHVybiBwcmVmaXggKyBudW1iZXJTdHJpbmcgKyBcIiBcIiArIHVuaXQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZXR0eS1ieXRlcy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/lib/pretty-bytes.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/server/future/helpers/interception-routes.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/helpers/interception-routes.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n INTERCEPTION_ROUTE_MARKERS: function() {\n return INTERCEPTION_ROUTE_MARKERS;\n },\n isInterceptionRouteAppPath: function() {\n return isInterceptionRouteAppPath;\n },\n extractInterceptionRouteInformation: function() {\n return extractInterceptionRouteInformation;\n }\n});\nconst _apppaths = __webpack_require__(/*! ../../../shared/lib/router/utils/app-paths */ \"./node_modules/next/dist/shared/lib/router/utils/app-paths.js\");\nconst INTERCEPTION_ROUTE_MARKERS = [\n \"(..)(..)\",\n \"(.)\",\n \"(..)\",\n \"(...)\"\n];\nfunction isInterceptionRouteAppPath(path) {\n // TODO-APP: add more serious validation\n return path.split(\"/\").find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined;\n}\nfunction extractInterceptionRouteInformation(path) {\n let interceptingRoute, marker, interceptedRoute;\n for (const segment of path.split(\"/\")){\n marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n if (marker) {\n [interceptingRoute, interceptedRoute] = path.split(marker, 2);\n break;\n }\n }\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(`Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`);\n }\n interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n ;\n switch(marker){\n case \"(.)\":\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === \"/\") {\n interceptedRoute = `/${interceptedRoute}`;\n } else {\n interceptedRoute = interceptingRoute + \"/\" + interceptedRoute;\n }\n break;\n case \"(..)\":\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === \"/\") {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`);\n }\n interceptedRoute = interceptingRoute.split(\"/\").slice(0, -1).concat(interceptedRoute).join(\"/\");\n break;\n case \"(...)\":\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = \"/\" + interceptedRoute;\n break;\n case \"(..)(..)\":\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n const splitInterceptingRoute = interceptingRoute.split(\"/\");\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`);\n }\n interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join(\"/\");\n break;\n default:\n throw new Error(\"Invariant: unexpected marker\");\n }\n return {\n interceptingRoute,\n interceptedRoute\n };\n}\n\n//# sourceMappingURL=interception-routes.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvaGVscGVycy9pbnRlcmNlcHRpb24tcm91dGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUlMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsa0JBQWtCLG1CQUFPLENBQUMsaUhBQTRDO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsS0FBSztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxpQkFBaUI7QUFDeEQsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxLQUFLO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsS0FBSztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9oZWxwZXJzL2ludGVyY2VwdGlvbi1yb3V0ZXMuanM/MzVjYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTOiBudWxsLFxuICAgIGlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoOiBudWxsLFxuICAgIGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTO1xuICAgIH0sXG4gICAgaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGg7XG4gICAgfSxcbiAgICBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbjtcbiAgICB9XG59KTtcbmNvbnN0IF9hcHBwYXRocyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hcHAtcGF0aHNcIik7XG5jb25zdCBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyA9IFtcbiAgICBcIiguLikoLi4pXCIsXG4gICAgXCIoLilcIixcbiAgICBcIiguLilcIixcbiAgICBcIiguLi4pXCJcbl07XG5mdW5jdGlvbiBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aChwYXRoKSB7XG4gICAgLy8gVE9ETy1BUFA6IGFkZCBtb3JlIHNlcmlvdXMgdmFsaWRhdGlvblxuICAgIHJldHVybiBwYXRoLnNwbGl0KFwiL1wiKS5maW5kKChzZWdtZW50KT0+SU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSk9PnNlZ21lbnQuc3RhcnRzV2l0aChtKSkpICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbihwYXRoKSB7XG4gICAgbGV0IGludGVyY2VwdGluZ1JvdXRlLCBtYXJrZXIsIGludGVyY2VwdGVkUm91dGU7XG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHBhdGguc3BsaXQoXCIvXCIpKXtcbiAgICAgICAgbWFya2VyID0gSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSk9PnNlZ21lbnQuc3RhcnRzV2l0aChtKSk7XG4gICAgICAgIGlmIChtYXJrZXIpIHtcbiAgICAgICAgICAgIFtpbnRlcmNlcHRpbmdSb3V0ZSwgaW50ZXJjZXB0ZWRSb3V0ZV0gPSBwYXRoLnNwbGl0KG1hcmtlciwgMik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWludGVyY2VwdGluZ1JvdXRlIHx8ICFtYXJrZXIgfHwgIWludGVyY2VwdGVkUm91dGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gTXVzdCBiZSBpbiB0aGUgZm9ybWF0IC88aW50ZXJjZXB0aW5nIHJvdXRlPi8oLi58Li4ufC4uKSguLikvPGludGVyY2VwdGVkIHJvdXRlPmApO1xuICAgIH1cbiAgICBpbnRlcmNlcHRpbmdSb3V0ZSA9ICgwLCBfYXBwcGF0aHMubm9ybWFsaXplQXBwUGF0aCkoaW50ZXJjZXB0aW5nUm91dGUpIC8vIG5vcm1hbGl6ZSB0aGUgcGF0aCwgZS5nLiAvKGJsb2cpL2ZlZWQgLT4gL2ZlZWRcbiAgICA7XG4gICAgc3dpdGNoKG1hcmtlcil7XG4gICAgICAgIGNhc2UgXCIoLilcIjpcbiAgICAgICAgICAgIC8vICguKSBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgbWF0Y2ggd2l0aCBzaWJsaW5nIHJvdXRlcywgc28gd2UganVzdCBuZWVkIHRvIGFwcGVuZCB0aGUgaW50ZXJjZXB0ZWQgcm91dGUgdG8gdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgICAgICAgaWYgKGludGVyY2VwdGluZ1JvdXRlID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIGludGVyY2VwdGVkUm91dGUgPSBgLyR7aW50ZXJjZXB0ZWRSb3V0ZX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnRlcmNlcHRlZFJvdXRlID0gaW50ZXJjZXB0aW5nUm91dGUgKyBcIi9cIiArIGludGVyY2VwdGVkUm91dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIiguLilcIjpcbiAgICAgICAgICAgIC8vICguLikgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIG1hdGNoIGF0IG9uZSBsZXZlbCB1cCwgc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG4gICAgICAgICAgICBpZiAoaW50ZXJjZXB0aW5nUm91dGUgPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pIG1hcmtlciBhdCB0aGUgcm9vdCBsZXZlbCwgdXNlICguKSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSkuY29uY2F0KGludGVyY2VwdGVkUm91dGUpLmpvaW4oXCIvXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIoLi4uKVwiOlxuICAgICAgICAgICAgLy8gKC4uLikgd2lsbCBtYXRjaCB0aGUgcm91dGUgc2VnbWVudCBpbiB0aGUgcm9vdCBkaXJlY3RvcnksIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSByb290IGRpcmVjdG9yeSB0byBwcmVwZW5kIHRoZSBpbnRlcmNlcHRlZCByb3V0ZVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IFwiL1wiICsgaW50ZXJjZXB0ZWRSb3V0ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiKC4uKSguLilcIjpcbiAgICAgICAgICAgIC8vICguLikoLi4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCBhdCB0d28gbGV2ZWxzIHVwLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCB0d28gc2VnbWVudHMgb2YgdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgICAgICAgY29uc3Qgc3BsaXRJbnRlcmNlcHRpbmdSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChzcGxpdEludGVyY2VwdGluZ1JvdXRlLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pKC4uKSBtYXJrZXIgYXQgdGhlIHJvb3QgbGV2ZWwgb3Igb25lIGxldmVsIHVwLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IHNwbGl0SW50ZXJjZXB0aW5nUm91dGUuc2xpY2UoMCwgLTIpLmNvbmNhdChpbnRlcmNlcHRlZFJvdXRlKS5qb2luKFwiL1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YXJpYW50OiB1bmV4cGVjdGVkIG1hcmtlclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW50ZXJjZXB0aW5nUm91dGUsXG4gICAgICAgIGludGVyY2VwdGVkUm91dGVcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcmNlcHRpb24tcm91dGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/future/helpers/interception-routes.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/server/future/route-kind.js": +/*!************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-kind.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RouteKind\", ({\n enumerable: true,\n get: function() {\n return RouteKind;\n }\n}));\nvar RouteKind;\n(function(RouteKind) {\n RouteKind[/**\n * `PAGES` represents all the React pages that are under `pages/`.\n */ \"PAGES\"] = \"PAGES\";\n RouteKind[/**\n * `PAGES_API` represents all the API routes under `pages/api/`.\n */ \"PAGES_API\"] = \"PAGES_API\";\n RouteKind[/**\n * `APP_PAGE` represents all the React pages that are under `app/` with the\n * filename of `page.{j,t}s{,x}`.\n */ \"APP_PAGE\"] = \"APP_PAGE\";\n RouteKind[/**\n * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the\n * filename of `route.{j,t}s{,x}`.\n */ \"APP_ROUTE\"] = \"APP_ROUTE\";\n})(RouteKind || (RouteKind = {}));\n\n//# sourceMappingURL=route-kind.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUta2luZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLDZDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLElBQUksRUFBRSxHQUFHO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixJQUFJLEVBQUUsR0FBRztBQUNsQztBQUNBLENBQUMsOEJBQThCOztBQUUvQiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUta2luZC5qcz8zOTc5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUm91dGVLaW5kXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSb3V0ZUtpbmQ7XG4gICAgfVxufSk7XG52YXIgUm91dGVLaW5kO1xuKGZ1bmN0aW9uKFJvdXRlS2luZCkge1xuICAgIFJvdXRlS2luZFsvKipcbiAgICogYFBBR0VTYCByZXByZXNlbnRzIGFsbCB0aGUgUmVhY3QgcGFnZXMgdGhhdCBhcmUgdW5kZXIgYHBhZ2VzL2AuXG4gICAqLyBcIlBBR0VTXCJdID0gXCJQQUdFU1wiO1xuICAgIFJvdXRlS2luZFsvKipcbiAgICogYFBBR0VTX0FQSWAgcmVwcmVzZW50cyBhbGwgdGhlIEFQSSByb3V0ZXMgdW5kZXIgYHBhZ2VzL2FwaS9gLlxuICAgKi8gXCJQQUdFU19BUElcIl0gPSBcIlBBR0VTX0FQSVwiO1xuICAgIFJvdXRlS2luZFsvKipcbiAgICogYEFQUF9QQUdFYCByZXByZXNlbnRzIGFsbCB0aGUgUmVhY3QgcGFnZXMgdGhhdCBhcmUgdW5kZXIgYGFwcC9gIHdpdGggdGhlXG4gICAqIGZpbGVuYW1lIG9mIGBwYWdlLntqLHR9c3sseH1gLlxuICAgKi8gXCJBUFBfUEFHRVwiXSA9IFwiQVBQX1BBR0VcIjtcbiAgICBSb3V0ZUtpbmRbLyoqXG4gICAqIGBBUFBfUk9VVEVgIHJlcHJlc2VudHMgYWxsIHRoZSBBUEkgcm91dGVzIGFuZCBtZXRhZGF0YSByb3V0ZXMgdGhhdCBhcmUgdW5kZXIgYGFwcC9gIHdpdGggdGhlXG4gICAqIGZpbGVuYW1lIG9mIGByb3V0ZS57aix0fXN7LHh9YC5cbiAgICovIFwiQVBQX1JPVVRFXCJdID0gXCJBUFBfUk9VVEVcIjtcbn0pKFJvdXRlS2luZCB8fCAoUm91dGVLaW5kID0ge30pKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGUta2luZC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/future/route-kind.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/server/future/route-modules/pages/module.compiled.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/pages/module.compiled.js ***! + \*************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nif (false) {} else {\n if (true) {\n module.exports = __webpack_require__(/*! next/dist/compiled/next-server/pages.runtime.dev.js */ \"next/dist/compiled/next-server/pages.runtime.dev.js\");\n } else {}\n}\n\n//# sourceMappingURL=module.compiled.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9wYWdlcy9tb2R1bGUuY29tcGlsZWQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixJQUFJLEtBQW1DLEVBQUUsRUFFeEMsQ0FBQztBQUNGLFFBQVEsSUFBc0M7QUFDOUMsUUFBUSxzSkFBK0U7QUFDdkYsTUFBTSxLQUFLLEVBSU47QUFDTDs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9wYWdlcy9tb2R1bGUuY29tcGlsZWQuanM/YmE0ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbmlmIChwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgPT09IFwiZWRnZVwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9wYWdlcy9tb2R1bGUuanNcIik7XG59IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9uZXh0LXNlcnZlci9wYWdlcy5ydW50aW1lLmRldi5qc1wiKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1zZXJ2ZXIvcGFnZXMtdHVyYm8ucnVudGltZS5wcm9kLmpzXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9uZXh0LXNlcnZlci9wYWdlcy5ydW50aW1lLnByb2QuanNcIik7XG4gICAgfVxufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1tb2R1bGUuY29tcGlsZWQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/future/route-modules/pages/module.compiled.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/amp-context.js": +/*!***************************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/amp-context.js ***! + \***************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"./node_modules/next/dist/server/future/route-modules/pages/module.compiled.js\").vendored.contexts.AmpContext;\n\n//# sourceMappingURL=amp-context.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9wYWdlcy92ZW5kb3JlZC9jb250ZXh0cy9hbXAtY29udGV4dC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLCtLQUFpRjs7QUFFakYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLW1vZHVsZXMvcGFnZXMvdmVuZG9yZWQvY29udGV4dHMvYW1wLWNvbnRleHQuanM/YTA1NSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL21vZHVsZS5jb21waWxlZFwiKS52ZW5kb3JlZFtcImNvbnRleHRzXCJdLkFtcENvbnRleHQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFtcC1jb250ZXh0LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/amp-context.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/head-manager-context.js": +/*!************************************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/head-manager-context.js ***! + \************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"./node_modules/next/dist/server/future/route-modules/pages/module.compiled.js\").vendored.contexts.HeadManagerContext;\n\n//# sourceMappingURL=head-manager-context.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9wYWdlcy92ZW5kb3JlZC9jb250ZXh0cy9oZWFkLW1hbmFnZXItY29udGV4dC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHVMQUF5Rjs7QUFFekYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLW1vZHVsZXMvcGFnZXMvdmVuZG9yZWQvY29udGV4dHMvaGVhZC1tYW5hZ2VyLWNvbnRleHQuanM/YWRjOSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL21vZHVsZS5jb21waWxlZFwiKS52ZW5kb3JlZFtcImNvbnRleHRzXCJdLkhlYWRNYW5hZ2VyQ29udGV4dDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVhZC1tYW5hZ2VyLWNvbnRleHQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/head-manager-context.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/html-context.js": +/*!****************************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/html-context.js ***! + \****************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"./node_modules/next/dist/server/future/route-modules/pages/module.compiled.js\").vendored.contexts.HtmlContext;\n\n//# sourceMappingURL=html-context.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9wYWdlcy92ZW5kb3JlZC9jb250ZXh0cy9odG1sLWNvbnRleHQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixnTEFBa0Y7O0FBRWxGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL3BhZ2VzL3ZlbmRvcmVkL2NvbnRleHRzL2h0bWwtY29udGV4dC5qcz80ZTg1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbW9kdWxlLmNvbXBpbGVkXCIpLnZlbmRvcmVkW1wiY29udGV4dHNcIl0uSHRtbENvbnRleHQ7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0bWwtY29udGV4dC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/html-context.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/server/get-page-files.js": +/*!*********************************************************!*\ + !*** ./node_modules/next/dist/server/get-page-files.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getPageFiles\", ({\n enumerable: true,\n get: function() {\n return getPageFiles;\n }\n}));\nconst _denormalizepagepath = __webpack_require__(/*! ../shared/lib/page-path/denormalize-page-path */ \"./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\");\nconst _normalizepagepath = __webpack_require__(/*! ../shared/lib/page-path/normalize-page-path */ \"./node_modules/next/dist/shared/lib/page-path/normalize-page-path.js\");\nfunction getPageFiles(buildManifest, page) {\n const normalizedPage = (0, _denormalizepagepath.denormalizePagePath)((0, _normalizepagepath.normalizePagePath)(page));\n let files = buildManifest.pages[normalizedPage];\n if (!files) {\n console.warn(`Could not find files for ${normalizedPage} in .next/build-manifest.json`);\n return [];\n }\n return files;\n}\n\n//# sourceMappingURL=get-page-files.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9nZXQtcGFnZS1maWxlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLGdEQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGLDZCQUE2QixtQkFBTyxDQUFDLDZIQUErQztBQUNwRiwyQkFBMkIsbUJBQU8sQ0FBQyx5SEFBNkM7QUFDaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsZ0JBQWdCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2dldC1wYWdlLWZpbGVzLmpzP2M4NmIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRQYWdlRmlsZXNcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhZ2VGaWxlcztcbiAgICB9XG59KTtcbmNvbnN0IF9kZW5vcm1hbGl6ZXBhZ2VwYXRoID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcGFnZS1wYXRoL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aFwiKTtcbmNvbnN0IF9ub3JtYWxpemVwYWdlcGF0aCA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3BhZ2UtcGF0aC9ub3JtYWxpemUtcGFnZS1wYXRoXCIpO1xuZnVuY3Rpb24gZ2V0UGFnZUZpbGVzKGJ1aWxkTWFuaWZlc3QsIHBhZ2UpIHtcbiAgICBjb25zdCBub3JtYWxpemVkUGFnZSA9ICgwLCBfZGVub3JtYWxpemVwYWdlcGF0aC5kZW5vcm1hbGl6ZVBhZ2VQYXRoKSgoMCwgX25vcm1hbGl6ZXBhZ2VwYXRoLm5vcm1hbGl6ZVBhZ2VQYXRoKShwYWdlKSk7XG4gICAgbGV0IGZpbGVzID0gYnVpbGRNYW5pZmVzdC5wYWdlc1tub3JtYWxpemVkUGFnZV07XG4gICAgaWYgKCFmaWxlcykge1xuICAgICAgICBjb25zb2xlLndhcm4oYENvdWxkIG5vdCBmaW5kIGZpbGVzIGZvciAke25vcm1hbGl6ZWRQYWdlfSBpbiAubmV4dC9idWlsZC1tYW5pZmVzdC5qc29uYCk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGVzO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXQtcGFnZS1maWxlcy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/get-page-files.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/server/htmlescape.js": +/*!*****************************************************!*\ + !*** ./node_modules/next/dist/server/htmlescape.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("// This utility is based on https://github.com/zertosh/htmlescape\n// License: https://github.com/zertosh/htmlescape/blob/0527ca7156a524d256101bb310a9f970f63078ad/LICENSE\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ESCAPE_REGEX: function() {\n return ESCAPE_REGEX;\n },\n htmlEscapeJsonString: function() {\n return htmlEscapeJsonString;\n }\n});\nconst ESCAPE_LOOKUP = {\n \"&\": \"\\\\u0026\",\n \">\": \"\\\\u003e\",\n \"<\": \"\\\\u003c\",\n \"\\u2028\": \"\\\\u2028\",\n \"\\u2029\": \"\\\\u2029\"\n};\nconst ESCAPE_REGEX = /[&><\\u2028\\u2029]/g;\nfunction htmlEscapeJsonString(str) {\n return str.replace(ESCAPE_REGEX, (match)=>ESCAPE_LOOKUP[match]);\n}\n\n//# sourceMappingURL=htmlescape.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9odG1sZXNjYXBlLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FHTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2h0bWxlc2NhcGUuanM/ZDIxNiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIHV0aWxpdHkgaXMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3plcnRvc2gvaHRtbGVzY2FwZVxuLy8gTGljZW5zZTogaHR0cHM6Ly9naXRodWIuY29tL3plcnRvc2gvaHRtbGVzY2FwZS9ibG9iLzA1MjdjYTcxNTZhNTI0ZDI1NjEwMWJiMzEwYTlmOTcwZjYzMDc4YWQvTElDRU5TRVxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBFU0NBUEVfUkVHRVg6IG51bGwsXG4gICAgaHRtbEVzY2FwZUpzb25TdHJpbmc6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgRVNDQVBFX1JFR0VYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEVTQ0FQRV9SRUdFWDtcbiAgICB9LFxuICAgIGh0bWxFc2NhcGVKc29uU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGh0bWxFc2NhcGVKc29uU3RyaW5nO1xuICAgIH1cbn0pO1xuY29uc3QgRVNDQVBFX0xPT0tVUCA9IHtcbiAgICBcIiZcIjogXCJcXFxcdTAwMjZcIixcbiAgICBcIj5cIjogXCJcXFxcdTAwM2VcIixcbiAgICBcIjxcIjogXCJcXFxcdTAwM2NcIixcbiAgICBcIlxcdTIwMjhcIjogXCJcXFxcdTIwMjhcIixcbiAgICBcIlxcdTIwMjlcIjogXCJcXFxcdTIwMjlcIlxufTtcbmNvbnN0IEVTQ0FQRV9SRUdFWCA9IC9bJj48XFx1MjAyOFxcdTIwMjldL2c7XG5mdW5jdGlvbiBodG1sRXNjYXBlSnNvblN0cmluZyhzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoRVNDQVBFX1JFR0VYLCAobWF0Y2gpPT5FU0NBUEVfTE9PS1VQW21hdGNoXSk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh0bWxlc2NhcGUuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/htmlescape.js\n"); + +/***/ }), + +/***/ "./node_modules/next/dist/server/utils.js": +/*!************************************************!*\ + !*** ./node_modules/next/dist/server/utils.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n isBlockedPage: function() {\n return isBlockedPage;\n },\n cleanAmpPath: function() {\n return cleanAmpPath;\n },\n debounce: function() {\n return debounce;\n }\n});\nconst _constants = __webpack_require__(/*! ../shared/lib/constants */ \"./node_modules/next/dist/shared/lib/constants.js\");\nfunction isBlockedPage(page) {\n return _constants.BLOCKED_PAGES.includes(page);\n}\nfunction cleanAmpPath(pathname) {\n if (pathname.match(/\\?amp=(y|yes|true|1)/)) {\n pathname = pathname.replace(/\\?amp=(y|yes|true|1)&?/, \"?\");\n }\n if (pathname.match(/&=(y|yes|true|1)/)) {\n pathname = pathname.replace(/&=(y|yes|true|1)/, \"\");\n }\n pathname = pathname.replace(/\\?$/, \"\");\n return pathname;\n}\nfunction debounce(fn, ms, maxWait = Infinity) {\n let timeoutId;\n // The time the debouncing function was first called during this debounce queue.\n let startTime = 0;\n // The time the debouncing function was last called.\n let lastCall = 0;\n // The arguments and this context of the last call to the debouncing function.\n let args, context;\n // A helper used to that either invokes the debounced function, or\n // reschedules the timer if a more recent call was made.\n function run() {\n const now = Date.now();\n const diff = lastCall + ms - now;\n // If the diff is non-positive, then we've waited at least `ms`\n // milliseconds since the last call. Or if we've waited for longer than the\n // max wait time, we must call the debounced function.\n if (diff <= 0 || startTime + maxWait >= now) {\n // It's important to clear the timeout id before invoking the debounced\n // function, in case the function calls the debouncing function again.\n timeoutId = undefined;\n fn.apply(context, args);\n } else {\n // Else, a new call was made after the original timer was scheduled. We\n // didn't clear the timeout (doing so is very slow), so now we need to\n // reschedule the timer for the time difference.\n timeoutId = setTimeout(run, diff);\n }\n }\n return function(...passedArgs) {\n // The arguments and this context of the most recent call are saved so the\n // debounced function can be invoked with them later.\n args = passedArgs;\n context = this;\n // Instead of constantly clearing and scheduling a timer, we record the\n // time of the last call. If a second call comes in before the timer fires,\n // then we'll reschedule in the run function. Doing this is considerably\n // faster.\n lastCall = Date.now();\n // Only schedule a new timer if we're not currently waiting.\n if (timeoutId === undefined) {\n startTime = lastCall;\n timeoutId = setTimeout(run, ms);\n }\n };\n}\n\n//# sourceMappingURL=utils.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci91dGlscy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FJTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFtQixtQkFBTyxDQUFDLGlGQUF5QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL3V0aWxzLmpzPzFjNTgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBpc0Jsb2NrZWRQYWdlOiBudWxsLFxuICAgIGNsZWFuQW1wUGF0aDogbnVsbCxcbiAgICBkZWJvdW5jZTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBpc0Jsb2NrZWRQYWdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzQmxvY2tlZFBhZ2U7XG4gICAgfSxcbiAgICBjbGVhbkFtcFBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY2xlYW5BbXBQYXRoO1xuICAgIH0sXG4gICAgZGVib3VuY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGVib3VuY2U7XG4gICAgfVxufSk7XG5jb25zdCBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvY29uc3RhbnRzXCIpO1xuZnVuY3Rpb24gaXNCbG9ja2VkUGFnZShwYWdlKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuQkxPQ0tFRF9QQUdFUy5pbmNsdWRlcyhwYWdlKTtcbn1cbmZ1bmN0aW9uIGNsZWFuQW1wUGF0aChwYXRobmFtZSkge1xuICAgIGlmIChwYXRobmFtZS5tYXRjaCgvXFw/YW1wPSh5fHllc3x0cnVlfDEpLykpIHtcbiAgICAgICAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9cXD9hbXA9KHl8eWVzfHRydWV8MSkmPy8sIFwiP1wiKTtcbiAgICB9XG4gICAgaWYgKHBhdGhuYW1lLm1hdGNoKC8mYW1wPSh5fHllc3x0cnVlfDEpLykpIHtcbiAgICAgICAgcGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC8mYW1wPSh5fHllc3x0cnVlfDEpLywgXCJcIik7XG4gICAgfVxuICAgIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvXFw/JC8sIFwiXCIpO1xuICAgIHJldHVybiBwYXRobmFtZTtcbn1cbmZ1bmN0aW9uIGRlYm91bmNlKGZuLCBtcywgbWF4V2FpdCA9IEluZmluaXR5KSB7XG4gICAgbGV0IHRpbWVvdXRJZDtcbiAgICAvLyBUaGUgdGltZSB0aGUgZGVib3VuY2luZyBmdW5jdGlvbiB3YXMgZmlyc3QgY2FsbGVkIGR1cmluZyB0aGlzIGRlYm91bmNlIHF1ZXVlLlxuICAgIGxldCBzdGFydFRpbWUgPSAwO1xuICAgIC8vIFRoZSB0aW1lIHRoZSBkZWJvdW5jaW5nIGZ1bmN0aW9uIHdhcyBsYXN0IGNhbGxlZC5cbiAgICBsZXQgbGFzdENhbGwgPSAwO1xuICAgIC8vIFRoZSBhcmd1bWVudHMgYW5kIHRoaXMgY29udGV4dCBvZiB0aGUgbGFzdCBjYWxsIHRvIHRoZSBkZWJvdW5jaW5nIGZ1bmN0aW9uLlxuICAgIGxldCBhcmdzLCBjb250ZXh0O1xuICAgIC8vIEEgaGVscGVyIHVzZWQgdG8gdGhhdCBlaXRoZXIgaW52b2tlcyB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uLCBvclxuICAgIC8vIHJlc2NoZWR1bGVzIHRoZSB0aW1lciBpZiBhIG1vcmUgcmVjZW50IGNhbGwgd2FzIG1hZGUuXG4gICAgZnVuY3Rpb24gcnVuKCkge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBkaWZmID0gbGFzdENhbGwgKyBtcyAtIG5vdztcbiAgICAgICAgLy8gSWYgdGhlIGRpZmYgaXMgbm9uLXBvc2l0aXZlLCB0aGVuIHdlJ3ZlIHdhaXRlZCBhdCBsZWFzdCBgbXNgXG4gICAgICAgIC8vIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgbGFzdCBjYWxsLiBPciBpZiB3ZSd2ZSB3YWl0ZWQgZm9yIGxvbmdlciB0aGFuIHRoZVxuICAgICAgICAvLyBtYXggd2FpdCB0aW1lLCB3ZSBtdXN0IGNhbGwgdGhlIGRlYm91bmNlZCBmdW5jdGlvbi5cbiAgICAgICAgaWYgKGRpZmYgPD0gMCB8fCBzdGFydFRpbWUgKyBtYXhXYWl0ID49IG5vdykge1xuICAgICAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gY2xlYXIgdGhlIHRpbWVvdXQgaWQgYmVmb3JlIGludm9raW5nIHRoZSBkZWJvdW5jZWRcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uLCBpbiBjYXNlIHRoZSBmdW5jdGlvbiBjYWxscyB0aGUgZGVib3VuY2luZyBmdW5jdGlvbiBhZ2Fpbi5cbiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRWxzZSwgYSBuZXcgY2FsbCB3YXMgbWFkZSBhZnRlciB0aGUgb3JpZ2luYWwgdGltZXIgd2FzIHNjaGVkdWxlZC4gV2VcbiAgICAgICAgICAgIC8vIGRpZG4ndCBjbGVhciB0aGUgdGltZW91dCAoZG9pbmcgc28gaXMgdmVyeSBzbG93KSwgc28gbm93IHdlIG5lZWQgdG9cbiAgICAgICAgICAgIC8vIHJlc2NoZWR1bGUgdGhlIHRpbWVyIGZvciB0aGUgdGltZSBkaWZmZXJlbmNlLlxuICAgICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChydW4sIGRpZmYpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiguLi5wYXNzZWRBcmdzKSB7XG4gICAgICAgIC8vIFRoZSBhcmd1bWVudHMgYW5kIHRoaXMgY29udGV4dCBvZiB0aGUgbW9zdCByZWNlbnQgY2FsbCBhcmUgc2F2ZWQgc28gdGhlXG4gICAgICAgIC8vIGRlYm91bmNlZCBmdW5jdGlvbiBjYW4gYmUgaW52b2tlZCB3aXRoIHRoZW0gbGF0ZXIuXG4gICAgICAgIGFyZ3MgPSBwYXNzZWRBcmdzO1xuICAgICAgICBjb250ZXh0ID0gdGhpcztcbiAgICAgICAgLy8gSW5zdGVhZCBvZiBjb25zdGFudGx5IGNsZWFyaW5nIGFuZCBzY2hlZHVsaW5nIGEgdGltZXIsIHdlIHJlY29yZCB0aGVcbiAgICAgICAgLy8gdGltZSBvZiB0aGUgbGFzdCBjYWxsLiBJZiBhIHNlY29uZCBjYWxsIGNvbWVzIGluIGJlZm9yZSB0aGUgdGltZXIgZmlyZXMsXG4gICAgICAgIC8vIHRoZW4gd2UnbGwgcmVzY2hlZHVsZSBpbiB0aGUgcnVuIGZ1bmN0aW9uLiBEb2luZyB0aGlzIGlzIGNvbnNpZGVyYWJseVxuICAgICAgICAvLyBmYXN0ZXIuXG4gICAgICAgIGxhc3RDYWxsID0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gT25seSBzY2hlZHVsZSBhIG5ldyB0aW1lciBpZiB3ZSdyZSBub3QgY3VycmVudGx5IHdhaXRpbmcuXG4gICAgICAgIGlmICh0aW1lb3V0SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3RhcnRUaW1lID0gbGFzdENhbGw7XG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KHJ1biwgbXMpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/utils.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/font/google/target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"}": +/*!*********************************************************************************************************************************************************!*\ + !*** ./node_modules/next/font/google/target.css?{"path":"app\\layout.tsx","import":"Inter","arguments":[{"subsets":["latin"]}],"variableName":"inter"} ***! + \*********************************************************************************************************************************************************/ +/***/ ((module) => { + +eval("// Exports\nmodule.exports = {\n\t\"style\": {\"fontFamily\":\"'__Inter_d65c78', '__Inter_Fallback_d65c78'\",\"fontStyle\":\"normal\"},\n\t\"className\": \"__className_d65c78\"\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9mb250L2dvb2dsZS90YXJnZXQuY3NzP3tcInBhdGhcIjpcImFwcFxcXFxsYXlvdXQudHN4XCIsXCJpbXBvcnRcIjpcIkludGVyXCIsXCJhcmd1bWVudHNcIjpbe1wic3Vic2V0c1wiOltcImxhdGluXCJdfV0sXCJ2YXJpYWJsZU5hbWVcIjpcImludGVyXCJ9IiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxXQUFXLGdGQUFnRjtBQUMzRjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2ZvbnQvZ29vZ2xlL3RhcmdldC5jc3M/MWI5NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBFeHBvcnRzXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0XCJzdHlsZVwiOiB7XCJmb250RmFtaWx5XCI6XCInX19JbnRlcl9kNjVjNzgnLCAnX19JbnRlcl9GYWxsYmFja19kNjVjNzgnXCIsXCJmb250U3R5bGVcIjpcIm5vcm1hbFwifSxcblx0XCJjbGFzc05hbWVcIjogXCJfX2NsYXNzTmFtZV9kNjVjNzhcIlxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/font/google/target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"}\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/api/navigation.js": +/*!**************************************************!*\ + !*** ./node_modules/next/dist/api/navigation.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(ssr)/./node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2FwaS9uYXZpZ2F0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFnRDs7QUFFaEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9hcGkvbmF2aWdhdGlvbi5qcz9mOTQ3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuLi9jbGllbnQvY29tcG9uZW50cy9uYXZpZ2F0aW9uXCI7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5hdmlnYXRpb24uanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/api/navigation.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/add-base-path.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/client/add-base-path.js ***! + \********************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addBasePath\", ({\n enumerable: true,\n get: function() {\n return addBasePath;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ../shared/lib/router/utils/add-path-prefix */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(ssr)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst basePath = false || \"\";\nfunction addBasePath(path, required) {\n return (0, _normalizetrailingslash.normalizePathTrailingSlash)( false ? 0 : (0, _addpathprefix.addPathPrefix)(path, basePath));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=add-base-path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9hZGQtYmFzZS1wYXRoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwrQ0FBOEM7SUFDMUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQkFBaUJDLG1CQUFPQSxDQUFDLDZIQUE0QztBQUMzRSxNQUFNQywwQkFBMEJELG1CQUFPQSxDQUFDLHFHQUE0QjtBQUNwRSxNQUFNRSxXQUFXQyxNQUFrQyxJQUFJO0FBQ3ZELFNBQVNMLFlBQVlRLElBQUksRUFBRUMsUUFBUTtJQUMvQixPQUFPLENBQUMsR0FBR04sd0JBQXdCTywwQkFBMEIsRUFBRUwsTUFBdURJLEdBQUdELENBQUlBLEdBQUcsQ0FBQyxHQUFHUCxlQUFlVyxhQUFhLEVBQUVKLE1BQU1KO0FBQzVLO0FBRUEsSUFBSSxDQUFDLE9BQU9SLFFBQVFpQixPQUFPLEtBQUssY0FBZSxPQUFPakIsUUFBUWlCLE9BQU8sS0FBSyxZQUFZakIsUUFBUWlCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2pCLFFBQVFpQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLcEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRaUIsT0FBTyxFQUFFLGNBQWM7UUFBRWhCLE9BQU87SUFBSztJQUNuRUgsT0FBT3FCLE1BQU0sQ0FBQ25CLFFBQVFpQixPQUFPLEVBQUVqQjtJQUMvQm9CLE9BQU9wQixPQUFPLEdBQUdBLFFBQVFpQixPQUFPO0FBQ2xDLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1iYXNlLXBhdGguanM/NjEzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFkZEJhc2VQYXRoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhZGRCYXNlUGF0aDtcbiAgICB9XG59KTtcbmNvbnN0IF9hZGRwYXRocHJlZml4ID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1wYXRoLXByZWZpeFwiKTtcbmNvbnN0IF9ub3JtYWxpemV0cmFpbGluZ3NsYXNoID0gcmVxdWlyZShcIi4vbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoXCIpO1xuY29uc3QgYmFzZVBhdGggPSBwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIIHx8IFwiXCI7XG5mdW5jdGlvbiBhZGRCYXNlUGF0aChwYXRoLCByZXF1aXJlZCkge1xuICAgIHJldHVybiAoMCwgX25vcm1hbGl6ZXRyYWlsaW5nc2xhc2gubm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2gpKHByb2Nlc3MuZW52Ll9fTkVYVF9NQU5VQUxfQ0xJRU5UX0JBU0VfUEFUSCAmJiAhcmVxdWlyZWQgPyBwYXRoIDogKDAsIF9hZGRwYXRocHJlZml4LmFkZFBhdGhQcmVmaXgpKHBhdGgsIGJhc2VQYXRoKSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZC1iYXNlLXBhdGguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImFkZEJhc2VQYXRoIiwiX2FkZHBhdGhwcmVmaXgiLCJyZXF1aXJlIiwiX25vcm1hbGl6ZXRyYWlsaW5nc2xhc2giLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsInJlcXVpcmVkIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJfX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEgiLCJhZGRQYXRoUHJlZml4IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/add-base-path.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/app-call-server.js": +/*!**********************************************************!*\ + !*** ./node_modules/next/dist/client/app-call-server.js ***! + \**********************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"callServer\", ({\n enumerable: true,\n get: function() {\n return callServer;\n }\n}));\nconst _approuter = __webpack_require__(/*! ./components/app-router */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\");\nasync function callServer(actionId, actionArgs) {\n const actionDispatcher = (0, _approuter.getServerActionDispatcher)();\n if (!actionDispatcher) {\n throw new Error(\"Invariant: missing action dispatcher.\");\n }\n return new Promise((resolve, reject)=>{\n actionDispatcher({\n actionId,\n actionArgs,\n resolve,\n reject\n });\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-call-server.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9hcHAtY2FsbC1zZXJ2ZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDhDQUE2QztJQUN6Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGFBQWFDLG1CQUFPQSxDQUFDLCtGQUF5QjtBQUNwRCxlQUFlRixXQUFXRyxRQUFRLEVBQUVDLFVBQVU7SUFDMUMsTUFBTUMsbUJBQW1CLENBQUMsR0FBR0osV0FBV0sseUJBQXlCO0lBQ2pFLElBQUksQ0FBQ0Qsa0JBQWtCO1FBQ25CLE1BQU0sSUFBSUUsTUFBTTtJQUNwQjtJQUNBLE9BQU8sSUFBSUMsUUFBUSxDQUFDQyxTQUFTQztRQUN6QkwsaUJBQWlCO1lBQ2JGO1lBQ0FDO1lBQ0FLO1lBQ0FDO1FBQ0o7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9kLFFBQVFlLE9BQU8sS0FBSyxjQUFlLE9BQU9mLFFBQVFlLE9BQU8sS0FBSyxZQUFZZixRQUFRZSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9mLFFBQVFlLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktsQixPQUFPQyxjQUFjLENBQUNDLFFBQVFlLE9BQU8sRUFBRSxjQUFjO1FBQUVkLE9BQU87SUFBSztJQUNuRUgsT0FBT21CLE1BQU0sQ0FBQ2pCLFFBQVFlLE9BQU8sRUFBRWY7SUFDL0JrQixPQUFPbEIsT0FBTyxHQUFHQSxRQUFRZSxPQUFPO0FBQ2xDLEVBRUEsMkNBQTJDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1jYWxsLXNlcnZlci5qcz9mM2YyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2FsbFNlcnZlclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY2FsbFNlcnZlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9hcHByb3V0ZXIgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL2FwcC1yb3V0ZXJcIik7XG5hc3luYyBmdW5jdGlvbiBjYWxsU2VydmVyKGFjdGlvbklkLCBhY3Rpb25BcmdzKSB7XG4gICAgY29uc3QgYWN0aW9uRGlzcGF0Y2hlciA9ICgwLCBfYXBwcm91dGVyLmdldFNlcnZlckFjdGlvbkRpc3BhdGNoZXIpKCk7XG4gICAgaWYgKCFhY3Rpb25EaXNwYXRjaGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFyaWFudDogbWlzc2luZyBhY3Rpb24gZGlzcGF0Y2hlci5cIik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgICBhY3Rpb25EaXNwYXRjaGVyKHtcbiAgICAgICAgICAgIGFjdGlvbklkLFxuICAgICAgICAgICAgYWN0aW9uQXJncyxcbiAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICByZWplY3RcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC1jYWxsLXNlcnZlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiY2FsbFNlcnZlciIsIl9hcHByb3V0ZXIiLCJyZXF1aXJlIiwiYWN0aW9uSWQiLCJhY3Rpb25BcmdzIiwiYWN0aW9uRGlzcGF0Y2hlciIsImdldFNlcnZlckFjdGlvbkRpc3BhdGNoZXIiLCJFcnJvciIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/app-call-server.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/app-router-announcer.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/app-router-announcer.js ***! + \**************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"AppRouterAnnouncer\", ({\n enumerable: true,\n get: function() {\n return AppRouterAnnouncer;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\nconst _reactdom = __webpack_require__(/*! react-dom */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-dom.js\");\nconst ANNOUNCER_TYPE = \"next-route-announcer\";\nconst ANNOUNCER_ID = \"__next-route-announcer__\";\nfunction getAnnouncerNode() {\n var _existingAnnouncer_shadowRoot;\n const existingAnnouncer = document.getElementsByName(ANNOUNCER_TYPE)[0];\n if (existingAnnouncer == null ? void 0 : (_existingAnnouncer_shadowRoot = existingAnnouncer.shadowRoot) == null ? void 0 : _existingAnnouncer_shadowRoot.childNodes[0]) {\n return existingAnnouncer.shadowRoot.childNodes[0];\n } else {\n const container = document.createElement(ANNOUNCER_TYPE);\n container.style.cssText = \"position:absolute\";\n const announcer = document.createElement(\"div\");\n announcer.ariaLive = \"assertive\";\n announcer.id = ANNOUNCER_ID;\n announcer.role = \"alert\";\n announcer.style.cssText = \"position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal\";\n // Use shadow DOM here to avoid any potential CSS bleed\n const shadow = container.attachShadow({\n mode: \"open\"\n });\n shadow.appendChild(announcer);\n document.body.appendChild(container);\n return announcer;\n }\n}\nfunction AppRouterAnnouncer(param) {\n let { tree } = param;\n const [portalNode, setPortalNode] = (0, _react.useState)(null);\n (0, _react.useEffect)(()=>{\n const announcer = getAnnouncerNode();\n setPortalNode(announcer);\n return ()=>{\n const container = document.getElementsByTagName(ANNOUNCER_TYPE)[0];\n if (container == null ? void 0 : container.isConnected) {\n document.body.removeChild(container);\n }\n };\n }, []);\n const [routeAnnouncement, setRouteAnnouncement] = (0, _react.useState)(\"\");\n const previousTitle = (0, _react.useRef)();\n (0, _react.useEffect)(()=>{\n let currentTitle = \"\";\n if (document.title) {\n currentTitle = document.title;\n } else {\n const pageHeader = document.querySelector(\"h1\");\n if (pageHeader) {\n currentTitle = pageHeader.innerText || pageHeader.textContent || \"\";\n }\n }\n // Only announce the title change, but not for the first load because screen\n // readers do that automatically.\n if (previousTitle.current !== undefined && previousTitle.current !== currentTitle) {\n setRouteAnnouncement(currentTitle);\n }\n previousTitle.current = currentTitle;\n }, [\n tree\n ]);\n return portalNode ? /*#__PURE__*/ (0, _reactdom.createPortal)(routeAnnouncement, portalNode) : null;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router-announcer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXItYW5ub3VuY2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxzREFBcUQ7SUFDakRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxTQUFTQyxtQkFBT0EsQ0FBQyx3R0FBTztBQUM5QixNQUFNQyxZQUFZRCxtQkFBT0EsQ0FBQyxnSEFBVztBQUNyQyxNQUFNRSxpQkFBaUI7QUFDdkIsTUFBTUMsZUFBZTtBQUNyQixTQUFTQztJQUNMLElBQUlDO0lBQ0osTUFBTUMsb0JBQW9CQyxTQUFTQyxpQkFBaUIsQ0FBQ04sZUFBZSxDQUFDLEVBQUU7SUFDdkUsSUFBSUkscUJBQXFCLE9BQU8sS0FBSyxJQUFJLENBQUNELGdDQUFnQ0Msa0JBQWtCRyxVQUFVLEtBQUssT0FBTyxLQUFLLElBQUlKLDhCQUE4QkssVUFBVSxDQUFDLEVBQUUsRUFBRTtRQUNwSyxPQUFPSixrQkFBa0JHLFVBQVUsQ0FBQ0MsVUFBVSxDQUFDLEVBQUU7SUFDckQsT0FBTztRQUNILE1BQU1DLFlBQVlKLFNBQVNLLGFBQWEsQ0FBQ1Y7UUFDekNTLFVBQVVFLEtBQUssQ0FBQ0MsT0FBTyxHQUFHO1FBQzFCLE1BQU1DLFlBQVlSLFNBQVNLLGFBQWEsQ0FBQztRQUN6Q0csVUFBVUMsUUFBUSxHQUFHO1FBQ3JCRCxVQUFVRSxFQUFFLEdBQUdkO1FBQ2ZZLFVBQVVHLElBQUksR0FBRztRQUNqQkgsVUFBVUYsS0FBSyxDQUFDQyxPQUFPLEdBQUc7UUFDMUIsdURBQXVEO1FBQ3ZELE1BQU1LLFNBQVNSLFVBQVVTLFlBQVksQ0FBQztZQUNsQ0MsTUFBTTtRQUNWO1FBQ0FGLE9BQU9HLFdBQVcsQ0FBQ1A7UUFDbkJSLFNBQVNnQixJQUFJLENBQUNELFdBQVcsQ0FBQ1g7UUFDMUIsT0FBT0k7SUFDWDtBQUNKO0FBQ0EsU0FBU2pCLG1CQUFtQjBCLEtBQUs7SUFDN0IsSUFBSSxFQUFFQyxJQUFJLEVBQUUsR0FBR0Q7SUFDZixNQUFNLENBQUNFLFlBQVlDLGNBQWMsR0FBRyxDQUFDLEdBQUc1QixPQUFPNkIsUUFBUSxFQUFFO0lBQ3hELElBQUc3QixPQUFPOEIsU0FBUyxFQUFFO1FBQ2xCLE1BQU1kLFlBQVlYO1FBQ2xCdUIsY0FBY1o7UUFDZCxPQUFPO1lBQ0gsTUFBTUosWUFBWUosU0FBU3VCLG9CQUFvQixDQUFDNUIsZUFBZSxDQUFDLEVBQUU7WUFDbEUsSUFBSVMsYUFBYSxPQUFPLEtBQUssSUFBSUEsVUFBVW9CLFdBQVcsRUFBRTtnQkFDcER4QixTQUFTZ0IsSUFBSSxDQUFDUyxXQUFXLENBQUNyQjtZQUM5QjtRQUNKO0lBQ0osR0FBRyxFQUFFO0lBQ0wsTUFBTSxDQUFDc0IsbUJBQW1CQyxxQkFBcUIsR0FBRyxDQUFDLEdBQUduQyxPQUFPNkIsUUFBUSxFQUFFO0lBQ3ZFLE1BQU1PLGdCQUFnQixDQUFDLEdBQUdwQyxPQUFPcUMsTUFBTTtJQUN0QyxJQUFHckMsT0FBTzhCLFNBQVMsRUFBRTtRQUNsQixJQUFJUSxlQUFlO1FBQ25CLElBQUk5QixTQUFTK0IsS0FBSyxFQUFFO1lBQ2hCRCxlQUFlOUIsU0FBUytCLEtBQUs7UUFDakMsT0FBTztZQUNILE1BQU1DLGFBQWFoQyxTQUFTaUMsYUFBYSxDQUFDO1lBQzFDLElBQUlELFlBQVk7Z0JBQ1pGLGVBQWVFLFdBQVdFLFNBQVMsSUFBSUYsV0FBV0csV0FBVyxJQUFJO1lBQ3JFO1FBQ0o7UUFDQSw0RUFBNEU7UUFDNUUsaUNBQWlDO1FBQ2pDLElBQUlQLGNBQWNRLE9BQU8sS0FBS0MsYUFBYVQsY0FBY1EsT0FBTyxLQUFLTixjQUFjO1lBQy9FSCxxQkFBcUJHO1FBQ3pCO1FBQ0FGLGNBQWNRLE9BQU8sR0FBR047SUFDNUIsR0FBRztRQUNDWjtLQUNIO0lBQ0QsT0FBT0MsYUFBMkIsV0FBSCxHQUFJLElBQUd6QixVQUFVNEMsWUFBWSxFQUFFWixtQkFBbUJQLGNBQWM7QUFDbkc7QUFFQSxJQUFJLENBQUMsT0FBT2hDLFFBQVFvRCxPQUFPLEtBQUssY0FBZSxPQUFPcEQsUUFBUW9ELE9BQU8sS0FBSyxZQUFZcEQsUUFBUW9ELE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3BELFFBQVFvRCxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdkQsT0FBT0MsY0FBYyxDQUFDQyxRQUFRb0QsT0FBTyxFQUFFLGNBQWM7UUFBRW5ELE9BQU87SUFBSztJQUNuRUgsT0FBT3dELE1BQU0sQ0FBQ3RELFFBQVFvRCxPQUFPLEVBQUVwRDtJQUMvQnVELE9BQU92RCxPQUFPLEdBQUdBLFFBQVFvRCxPQUFPO0FBQ2xDLEVBRUEsZ0RBQWdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci1hbm5vdW5jZXIuanM/NmUwMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFwcFJvdXRlckFubm91bmNlclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQXBwUm91dGVyQW5ub3VuY2VyO1xuICAgIH1cbn0pO1xuY29uc3QgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuY29uc3QgX3JlYWN0ZG9tID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcbmNvbnN0IEFOTk9VTkNFUl9UWVBFID0gXCJuZXh0LXJvdXRlLWFubm91bmNlclwiO1xuY29uc3QgQU5OT1VOQ0VSX0lEID0gXCJfX25leHQtcm91dGUtYW5ub3VuY2VyX19cIjtcbmZ1bmN0aW9uIGdldEFubm91bmNlck5vZGUoKSB7XG4gICAgdmFyIF9leGlzdGluZ0Fubm91bmNlcl9zaGFkb3dSb290O1xuICAgIGNvbnN0IGV4aXN0aW5nQW5ub3VuY2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoQU5OT1VOQ0VSX1RZUEUpWzBdO1xuICAgIGlmIChleGlzdGluZ0Fubm91bmNlciA9PSBudWxsID8gdm9pZCAwIDogKF9leGlzdGluZ0Fubm91bmNlcl9zaGFkb3dSb290ID0gZXhpc3RpbmdBbm5vdW5jZXIuc2hhZG93Um9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9leGlzdGluZ0Fubm91bmNlcl9zaGFkb3dSb290LmNoaWxkTm9kZXNbMF0pIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nQW5ub3VuY2VyLnNoYWRvd1Jvb3QuY2hpbGROb2Rlc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KEFOTk9VTkNFUl9UWVBFKTtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlXCI7XG4gICAgICAgIGNvbnN0IGFubm91bmNlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGFubm91bmNlci5hcmlhTGl2ZSA9IFwiYXNzZXJ0aXZlXCI7XG4gICAgICAgIGFubm91bmNlci5pZCA9IEFOTk9VTkNFUl9JRDtcbiAgICAgICAgYW5ub3VuY2VyLnJvbGUgPSBcImFsZXJ0XCI7XG4gICAgICAgIGFubm91bmNlci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O3BhZGRpbmc6MDt3aWR0aDoxcHg7Y2xpcDpyZWN0KDAgMCAwIDApO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7d29yZC13cmFwOm5vcm1hbFwiO1xuICAgICAgICAvLyBVc2Ugc2hhZG93IERPTSBoZXJlIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgQ1NTIGJsZWVkXG4gICAgICAgIGNvbnN0IHNoYWRvdyA9IGNvbnRhaW5lci5hdHRhY2hTaGFkb3coe1xuICAgICAgICAgICAgbW9kZTogXCJvcGVuXCJcbiAgICAgICAgfSk7XG4gICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChhbm5vdW5jZXIpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgIHJldHVybiBhbm5vdW5jZXI7XG4gICAgfVxufVxuZnVuY3Rpb24gQXBwUm91dGVyQW5ub3VuY2VyKHBhcmFtKSB7XG4gICAgbGV0IHsgdHJlZSB9ID0gcGFyYW07XG4gICAgY29uc3QgW3BvcnRhbE5vZGUsIHNldFBvcnRhbE5vZGVdID0gKDAsIF9yZWFjdC51c2VTdGF0ZSkobnVsbCk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGNvbnN0IGFubm91bmNlciA9IGdldEFubm91bmNlck5vZGUoKTtcbiAgICAgICAgc2V0UG9ydGFsTm9kZShhbm5vdW5jZXIpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKEFOTk9VTkNFUl9UWVBFKVswXTtcbiAgICAgICAgICAgIGlmIChjb250YWluZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRhaW5lci5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgW3JvdXRlQW5ub3VuY2VtZW50LCBzZXRSb3V0ZUFubm91bmNlbWVudF0gPSAoMCwgX3JlYWN0LnVzZVN0YXRlKShcIlwiKTtcbiAgICBjb25zdCBwcmV2aW91c1RpdGxlID0gKDAsIF9yZWFjdC51c2VSZWYpKCk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGxldCBjdXJyZW50VGl0bGUgPSBcIlwiO1xuICAgICAgICBpZiAoZG9jdW1lbnQudGl0bGUpIHtcbiAgICAgICAgICAgIGN1cnJlbnRUaXRsZSA9IGRvY3VtZW50LnRpdGxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFnZUhlYWRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJoMVwiKTtcbiAgICAgICAgICAgIGlmIChwYWdlSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFRpdGxlID0gcGFnZUhlYWRlci5pbm5lclRleHQgfHwgcGFnZUhlYWRlci50ZXh0Q29udGVudCB8fCBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE9ubHkgYW5ub3VuY2UgdGhlIHRpdGxlIGNoYW5nZSwgYnV0IG5vdCBmb3IgdGhlIGZpcnN0IGxvYWQgYmVjYXVzZSBzY3JlZW5cbiAgICAgICAgLy8gcmVhZGVycyBkbyB0aGF0IGF1dG9tYXRpY2FsbHkuXG4gICAgICAgIGlmIChwcmV2aW91c1RpdGxlLmN1cnJlbnQgIT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c1RpdGxlLmN1cnJlbnQgIT09IGN1cnJlbnRUaXRsZSkge1xuICAgICAgICAgICAgc2V0Um91dGVBbm5vdW5jZW1lbnQoY3VycmVudFRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c1RpdGxlLmN1cnJlbnQgPSBjdXJyZW50VGl0bGU7XG4gICAgfSwgW1xuICAgICAgICB0cmVlXG4gICAgXSk7XG4gICAgcmV0dXJuIHBvcnRhbE5vZGUgPyAvKiNfX1BVUkVfXyovICgwLCBfcmVhY3Rkb20uY3JlYXRlUG9ydGFsKShyb3V0ZUFubm91bmNlbWVudCwgcG9ydGFsTm9kZSkgOiBudWxsO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtcm91dGVyLWFubm91bmNlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQXBwUm91dGVyQW5ub3VuY2VyIiwiX3JlYWN0IiwicmVxdWlyZSIsIl9yZWFjdGRvbSIsIkFOTk9VTkNFUl9UWVBFIiwiQU5OT1VOQ0VSX0lEIiwiZ2V0QW5ub3VuY2VyTm9kZSIsIl9leGlzdGluZ0Fubm91bmNlcl9zaGFkb3dSb290IiwiZXhpc3RpbmdBbm5vdW5jZXIiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlOYW1lIiwic2hhZG93Um9vdCIsImNoaWxkTm9kZXMiLCJjb250YWluZXIiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJjc3NUZXh0IiwiYW5ub3VuY2VyIiwiYXJpYUxpdmUiLCJpZCIsInJvbGUiLCJzaGFkb3ciLCJhdHRhY2hTaGFkb3ciLCJtb2RlIiwiYXBwZW5kQ2hpbGQiLCJib2R5IiwicGFyYW0iLCJ0cmVlIiwicG9ydGFsTm9kZSIsInNldFBvcnRhbE5vZGUiLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiaXNDb25uZWN0ZWQiLCJyZW1vdmVDaGlsZCIsInJvdXRlQW5ub3VuY2VtZW50Iiwic2V0Um91dGVBbm5vdW5jZW1lbnQiLCJwcmV2aW91c1RpdGxlIiwidXNlUmVmIiwiY3VycmVudFRpdGxlIiwidGl0bGUiLCJwYWdlSGVhZGVyIiwicXVlcnlTZWxlY3RvciIsImlubmVyVGV4dCIsInRleHRDb250ZW50IiwiY3VycmVudCIsInVuZGVmaW5lZCIsImNyZWF0ZVBvcnRhbCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/app-router-announcer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/app-router-headers.js": +/*!************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/app-router-headers.js ***! + \************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RSC_HEADER: function() {\n return RSC_HEADER;\n },\n ACTION: function() {\n return ACTION;\n },\n NEXT_ROUTER_STATE_TREE: function() {\n return NEXT_ROUTER_STATE_TREE;\n },\n NEXT_ROUTER_PREFETCH_HEADER: function() {\n return NEXT_ROUTER_PREFETCH_HEADER;\n },\n NEXT_URL: function() {\n return NEXT_URL;\n },\n RSC_CONTENT_TYPE_HEADER: function() {\n return RSC_CONTENT_TYPE_HEADER;\n },\n RSC_VARY_HEADER: function() {\n return RSC_VARY_HEADER;\n },\n FLIGHT_PARAMETERS: function() {\n return FLIGHT_PARAMETERS;\n },\n NEXT_RSC_UNION_QUERY: function() {\n return NEXT_RSC_UNION_QUERY;\n },\n NEXT_DID_POSTPONE_HEADER: function() {\n return NEXT_DID_POSTPONE_HEADER;\n }\n});\nconst RSC_HEADER = \"RSC\";\nconst ACTION = \"Next-Action\";\nconst NEXT_ROUTER_STATE_TREE = \"Next-Router-State-Tree\";\nconst NEXT_ROUTER_PREFETCH_HEADER = \"Next-Router-Prefetch\";\nconst NEXT_URL = \"Next-Url\";\nconst RSC_CONTENT_TYPE_HEADER = \"text/x-component\";\nconst RSC_VARY_HEADER = RSC_HEADER + \", \" + NEXT_ROUTER_STATE_TREE + \", \" + NEXT_ROUTER_PREFETCH_HEADER + \", \" + NEXT_URL;\nconst FLIGHT_PARAMETERS = [\n [\n RSC_HEADER\n ],\n [\n NEXT_ROUTER_STATE_TREE\n ],\n [\n NEXT_ROUTER_PREFETCH_HEADER\n ]\n];\nconst NEXT_RSC_UNION_QUERY = \"_rsc\";\nconst NEXT_DID_POSTPONE_HEADER = \"x-nextjs-postponed\";\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router-headers.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXItaGVhZGVycy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQVdOO0FBQ0EsU0FBU1csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSWpCLE9BQU9DLGNBQWMsQ0FBQ2UsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRYixTQUFTO0lBQ2JHLFlBQVk7UUFDUixPQUFPQTtJQUNYO0lBQ0FDLFFBQVE7UUFDSixPQUFPQTtJQUNYO0lBQ0FDLHdCQUF3QjtRQUNwQixPQUFPQTtJQUNYO0lBQ0FDLDZCQUE2QjtRQUN6QixPQUFPQTtJQUNYO0lBQ0FDLFVBQVU7UUFDTixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLGlCQUFpQjtRQUNiLE9BQU9BO0lBQ1g7SUFDQUMsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxzQkFBc0I7UUFDbEIsT0FBT0E7SUFDWDtJQUNBQywwQkFBMEI7UUFDdEIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTVQsYUFBYTtBQUNuQixNQUFNQyxTQUFTO0FBQ2YsTUFBTUMseUJBQXlCO0FBQy9CLE1BQU1DLDhCQUE4QjtBQUNwQyxNQUFNQyxXQUFXO0FBQ2pCLE1BQU1DLDBCQUEwQjtBQUNoQyxNQUFNQyxrQkFBa0JOLGFBQWEsT0FBT0UseUJBQXlCLE9BQU9DLDhCQUE4QixPQUFPQztBQUNqSCxNQUFNRyxvQkFBb0I7SUFDdEI7UUFDSVA7S0FDSDtJQUNEO1FBQ0lFO0tBQ0g7SUFDRDtRQUNJQztLQUNIO0NBQ0o7QUFDRCxNQUFNSyx1QkFBdUI7QUFDN0IsTUFBTUMsMkJBQTJCO0FBRWpDLElBQUksQ0FBQyxPQUFPWixRQUFRbUIsT0FBTyxLQUFLLGNBQWUsT0FBT25CLFFBQVFtQixPQUFPLEtBQUssWUFBWW5CLFFBQVFtQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9uQixRQUFRbUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3RCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW1CLE9BQU8sRUFBRSxjQUFjO1FBQUVsQixPQUFPO0lBQUs7SUFDbkVILE9BQU91QixNQUFNLENBQUNyQixRQUFRbUIsT0FBTyxFQUFFbkI7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUW1CLE9BQU87QUFDbEMsRUFFQSw4Q0FBOEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLWhlYWRlcnMuanM/MzU2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFJTQ19IRUFERVI6IG51bGwsXG4gICAgQUNUSU9OOiBudWxsLFxuICAgIE5FWFRfUk9VVEVSX1NUQVRFX1RSRUU6IG51bGwsXG4gICAgTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSOiBudWxsLFxuICAgIE5FWFRfVVJMOiBudWxsLFxuICAgIFJTQ19DT05URU5UX1RZUEVfSEVBREVSOiBudWxsLFxuICAgIFJTQ19WQVJZX0hFQURFUjogbnVsbCxcbiAgICBGTElHSFRfUEFSQU1FVEVSUzogbnVsbCxcbiAgICBORVhUX1JTQ19VTklPTl9RVUVSWTogbnVsbCxcbiAgICBORVhUX0RJRF9QT1NUUE9ORV9IRUFERVI6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgUlNDX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfSEVBREVSO1xuICAgIH0sXG4gICAgQUNUSU9OOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTjtcbiAgICB9LFxuICAgIE5FWFRfUk9VVEVSX1NUQVRFX1RSRUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9ST1VURVJfU1RBVEVfVFJFRTtcbiAgICB9LFxuICAgIE5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVI7XG4gICAgfSxcbiAgICBORVhUX1VSTDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX1VSTDtcbiAgICB9LFxuICAgIFJTQ19DT05URU5UX1RZUEVfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19DT05URU5UX1RZUEVfSEVBREVSO1xuICAgIH0sXG4gICAgUlNDX1ZBUllfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19WQVJZX0hFQURFUjtcbiAgICB9LFxuICAgIEZMSUdIVF9QQVJBTUVURVJTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEZMSUdIVF9QQVJBTUVURVJTO1xuICAgIH0sXG4gICAgTkVYVF9SU0NfVU5JT05fUVVFUlk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9SU0NfVU5JT05fUVVFUlk7XG4gICAgfSxcbiAgICBORVhUX0RJRF9QT1NUUE9ORV9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSO1xuICAgIH1cbn0pO1xuY29uc3QgUlNDX0hFQURFUiA9IFwiUlNDXCI7XG5jb25zdCBBQ1RJT04gPSBcIk5leHQtQWN0aW9uXCI7XG5jb25zdCBORVhUX1JPVVRFUl9TVEFURV9UUkVFID0gXCJOZXh0LVJvdXRlci1TdGF0ZS1UcmVlXCI7XG5jb25zdCBORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVIgPSBcIk5leHQtUm91dGVyLVByZWZldGNoXCI7XG5jb25zdCBORVhUX1VSTCA9IFwiTmV4dC1VcmxcIjtcbmNvbnN0IFJTQ19DT05URU5UX1RZUEVfSEVBREVSID0gXCJ0ZXh0L3gtY29tcG9uZW50XCI7XG5jb25zdCBSU0NfVkFSWV9IRUFERVIgPSBSU0NfSEVBREVSICsgXCIsIFwiICsgTkVYVF9ST1VURVJfU1RBVEVfVFJFRSArIFwiLCBcIiArIE5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUiArIFwiLCBcIiArIE5FWFRfVVJMO1xuY29uc3QgRkxJR0hUX1BBUkFNRVRFUlMgPSBbXG4gICAgW1xuICAgICAgICBSU0NfSEVBREVSXG4gICAgXSxcbiAgICBbXG4gICAgICAgIE5FWFRfUk9VVEVSX1NUQVRFX1RSRUVcbiAgICBdLFxuICAgIFtcbiAgICAgICAgTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSXG4gICAgXVxuXTtcbmNvbnN0IE5FWFRfUlNDX1VOSU9OX1FVRVJZID0gXCJfcnNjXCI7XG5jb25zdCBORVhUX0RJRF9QT1NUUE9ORV9IRUFERVIgPSBcIngtbmV4dGpzLXBvc3Rwb25lZFwiO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtcm91dGVyLWhlYWRlcnMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiUlNDX0hFQURFUiIsIkFDVElPTiIsIk5FWFRfUk9VVEVSX1NUQVRFX1RSRUUiLCJORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVIiLCJORVhUX1VSTCIsIlJTQ19DT05URU5UX1RZUEVfSEVBREVSIiwiUlNDX1ZBUllfSEVBREVSIiwiRkxJR0hUX1BBUkFNRVRFUlMiLCJORVhUX1JTQ19VTklPTl9RVUVSWSIsIk5FWFRfRElEX1BPU1RQT05FX0hFQURFUiIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/app-router-headers.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/app-router.js": +/*!****************************************************************!*\ + !*** ./node_modules/next/dist/client/components/app-router.js ***! + \****************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getServerActionDispatcher: function() {\n return getServerActionDispatcher;\n },\n urlToUrlWithoutFlightMarker: function() {\n return urlToUrlWithoutFlightMarker;\n },\n createEmptyCacheNode: function() {\n return createEmptyCacheNode;\n },\n default: function() {\n return AppRouter;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer/router-reducer-types */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _createhreffromurl = __webpack_require__(/*! ./router-reducer/create-href-from-url */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/hooks-client-context.js\");\nconst _usereducerwithdevtools = __webpack_require__(/*! ./use-reducer-with-devtools */ \"(ssr)/./node_modules/next/dist/client/components/use-reducer-with-devtools.js\");\nconst _errorboundary = __webpack_require__(/*! ./error-boundary */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\");\nconst _createinitialrouterstate = __webpack_require__(/*! ./router-reducer/create-initial-router-state */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js\");\nconst _isbot = __webpack_require__(/*! ../../shared/lib/router/utils/is-bot */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\nconst _addbasepath = __webpack_require__(/*! ../add-base-path */ \"(ssr)/./node_modules/next/dist/client/add-base-path.js\");\nconst _approuterannouncer = __webpack_require__(/*! ./app-router-announcer */ \"(ssr)/./node_modules/next/dist/client/components/app-router-announcer.js\");\nconst _redirectboundary = __webpack_require__(/*! ./redirect-boundary */ \"(ssr)/./node_modules/next/dist/client/components/redirect-boundary.js\");\nconst _findheadincache = __webpack_require__(/*! ./router-reducer/reducers/find-head-in-cache */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js\");\nconst _infinitepromise = __webpack_require__(/*! ./infinite-promise */ \"(ssr)/./node_modules/next/dist/client/components/infinite-promise.js\");\nconst _approuterheaders = __webpack_require__(/*! ./app-router-headers */ \"(ssr)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _removebasepath = __webpack_require__(/*! ../remove-base-path */ \"(ssr)/./node_modules/next/dist/client/remove-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../has-base-path */ \"(ssr)/./node_modules/next/dist/client/has-base-path.js\");\nconst isServer = \"undefined\" === \"undefined\";\n// Ensure the initialParallelRoutes are not combined because of double-rendering in the browser with Strict Mode.\nlet initialParallelRoutes = isServer ? null : new Map();\nlet globalServerActionDispatcher = null;\nfunction getServerActionDispatcher() {\n return globalServerActionDispatcher;\n}\nconst globalMutable = {};\nfunction urlToUrlWithoutFlightMarker(url) {\n const urlWithoutFlightParameters = new URL(url, location.origin);\n urlWithoutFlightParameters.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);\n if (false) {}\n return urlWithoutFlightParameters;\n}\nfunction isExternalURL(url) {\n return url.origin !== window.location.origin;\n}\nfunction HistoryUpdater(param) {\n let { appRouterState, sync } = param;\n (0, _react.useInsertionEffect)(()=>{\n const { tree, pushRef, canonicalUrl } = appRouterState;\n const historyState = {\n ...pushRef.preserveCustomHistoryState ? window.history.state : {},\n // Identifier is shortened intentionally.\n // __NA is used to identify if the history entry can be handled by the app-router.\n // __N is used to identify if the history entry can be handled by the old router.\n __NA: true,\n __PRIVATE_NEXTJS_INTERNALS_TREE: tree\n };\n if (pushRef.pendingPush && // Skip pushing an additional history entry if the canonicalUrl is the same as the current url.\n // This mirrors the browser behavior for normal navigation.\n (0, _createhreffromurl.createHrefFromUrl)(new URL(window.location.href)) !== canonicalUrl) {\n // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry.\n pushRef.pendingPush = false;\n window.history.pushState(historyState, \"\", canonicalUrl);\n } else {\n window.history.replaceState(historyState, \"\", canonicalUrl);\n }\n sync(appRouterState);\n }, [\n appRouterState,\n sync\n ]);\n return null;\n}\nfunction createEmptyCacheNode() {\n return {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n parallelRoutes: new Map(),\n lazyDataResolved: false\n };\n}\nfunction useServerActionDispatcher(dispatch) {\n const serverActionDispatcher = (0, _react.useCallback)((actionPayload)=>{\n (0, _react.startTransition)(()=>{\n dispatch({\n ...actionPayload,\n type: _routerreducertypes.ACTION_SERVER_ACTION\n });\n });\n }, [\n dispatch\n ]);\n globalServerActionDispatcher = serverActionDispatcher;\n}\n/**\n * Server response that only patches the cache and tree.\n */ function useChangeByServerResponse(dispatch) {\n return (0, _react.useCallback)((previousTree, flightData, overrideCanonicalUrl)=>{\n (0, _react.startTransition)(()=>{\n dispatch({\n type: _routerreducertypes.ACTION_SERVER_PATCH,\n flightData,\n previousTree,\n overrideCanonicalUrl\n });\n });\n }, [\n dispatch\n ]);\n}\nfunction useNavigate(dispatch) {\n return (0, _react.useCallback)((href, navigateType, shouldScroll)=>{\n const url = new URL((0, _addbasepath.addBasePath)(href), location.href);\n return dispatch({\n type: _routerreducertypes.ACTION_NAVIGATE,\n url,\n isExternalUrl: isExternalURL(url),\n locationSearch: location.search,\n shouldScroll: shouldScroll != null ? shouldScroll : true,\n navigateType\n });\n }, [\n dispatch\n ]);\n}\nfunction copyNextJsInternalHistoryState(data) {\n if (data == null) data = {};\n const currentState = window.history.state;\n const __NA = currentState == null ? void 0 : currentState.__NA;\n if (__NA) {\n data.__NA = __NA;\n }\n const __PRIVATE_NEXTJS_INTERNALS_TREE = currentState == null ? void 0 : currentState.__PRIVATE_NEXTJS_INTERNALS_TREE;\n if (__PRIVATE_NEXTJS_INTERNALS_TREE) {\n data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE;\n }\n return data;\n}\nfunction Head(param) {\n let { headCacheNode } = param;\n // If this segment has a `prefetchHead`, it's the statically prefetched data.\n // We should use that on initial render instead of `head`. Then we'll switch\n // to `head` when the dynamic response streams in.\n const head = headCacheNode !== null ? headCacheNode.head : null;\n const prefetchHead = headCacheNode !== null ? headCacheNode.prefetchHead : null;\n // If no prefetch data is available, then we go straight to rendering `head`.\n const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head;\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n //\n // @ts-expect-error The second argument to `useDeferredValue` is only\n // available in the experimental builds. When its disabled, it will always\n // return `head`.\n return (0, _react.useDeferredValue)(head, resolvedPrefetchRsc);\n}\n/**\n * The global router that wraps the application components.\n */ function Router(param) {\n let { buildId, initialHead, initialTree, initialCanonicalUrl, initialSeedData, assetPrefix, missingSlots } = param;\n const initialState = (0, _react.useMemo)(()=>(0, _createinitialrouterstate.createInitialRouterState)({\n buildId,\n initialSeedData,\n initialCanonicalUrl,\n initialTree,\n initialParallelRoutes,\n isServer,\n location: !isServer ? window.location : null,\n initialHead\n }), [\n buildId,\n initialSeedData,\n initialCanonicalUrl,\n initialTree,\n initialHead\n ]);\n const [reducerState, dispatch, sync] = (0, _usereducerwithdevtools.useReducerWithReduxDevtools)(initialState);\n (0, _react.useEffect)(()=>{\n // Ensure initialParallelRoutes is cleaned up from memory once it's used.\n initialParallelRoutes = null;\n }, []);\n const { canonicalUrl } = (0, _usereducerwithdevtools.useUnwrapState)(reducerState);\n // Add memoized pathname/query for useSearchParams and usePathname.\n const { searchParams, pathname } = (0, _react.useMemo)(()=>{\n const url = new URL(canonicalUrl, true ? \"http://n\" : 0);\n return {\n // This is turned into a readonly class in `useSearchParams`\n searchParams: url.searchParams,\n pathname: (0, _hasbasepath.hasBasePath)(url.pathname) ? (0, _removebasepath.removeBasePath)(url.pathname) : url.pathname\n };\n }, [\n canonicalUrl\n ]);\n const changeByServerResponse = useChangeByServerResponse(dispatch);\n const navigate = useNavigate(dispatch);\n useServerActionDispatcher(dispatch);\n /**\n * The app router that is exposed through `useRouter`. It's only concerned with dispatching actions to the reducer, does not hold state.\n */ const appRouter = (0, _react.useMemo)(()=>{\n const routerInstance = {\n back: ()=>window.history.back(),\n forward: ()=>window.history.forward(),\n prefetch: (href, options)=>{\n // Don't prefetch for bots as they don't navigate.\n // Don't prefetch during development (improves compilation performance)\n if ((0, _isbot.isBot)(window.navigator.userAgent) || \"development\" === \"development\") {\n return;\n }\n const url = new URL((0, _addbasepath.addBasePath)(href), window.location.href);\n // External urls can't be prefetched in the same way.\n if (isExternalURL(url)) {\n return;\n }\n (0, _react.startTransition)(()=>{\n var _options_kind;\n dispatch({\n type: _routerreducertypes.ACTION_PREFETCH,\n url,\n kind: (_options_kind = options == null ? void 0 : options.kind) != null ? _options_kind : _routerreducertypes.PrefetchKind.FULL\n });\n });\n },\n replace: (href, options)=>{\n if (options === void 0) options = {};\n (0, _react.startTransition)(()=>{\n var _options_scroll;\n navigate(href, \"replace\", (_options_scroll = options.scroll) != null ? _options_scroll : true);\n });\n },\n push: (href, options)=>{\n if (options === void 0) options = {};\n (0, _react.startTransition)(()=>{\n var _options_scroll;\n navigate(href, \"push\", (_options_scroll = options.scroll) != null ? _options_scroll : true);\n });\n },\n refresh: ()=>{\n (0, _react.startTransition)(()=>{\n dispatch({\n type: _routerreducertypes.ACTION_REFRESH,\n origin: window.location.origin\n });\n });\n },\n // @ts-ignore we don't want to expose this method at all\n fastRefresh: ()=>{\n if (false) {} else {\n (0, _react.startTransition)(()=>{\n dispatch({\n type: _routerreducertypes.ACTION_FAST_REFRESH,\n origin: window.location.origin\n });\n });\n }\n }\n };\n return routerInstance;\n }, [\n dispatch,\n navigate\n ]);\n (0, _react.useEffect)(()=>{\n // Exists for debugging purposes. Don't use in application code.\n if (window.next) {\n window.next.router = appRouter;\n }\n }, [\n appRouter\n ]);\n if (true) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { cache, prefetchCache, tree } = (0, _usereducerwithdevtools.useUnwrapState)(reducerState);\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n (0, _react.useEffect)(()=>{\n // Add `window.nd` for debugging purposes.\n // This is not meant for use in applications as concurrent rendering will affect the cache/tree/router.\n // @ts-ignore this is for debugging\n window.nd = {\n router: appRouter,\n cache,\n prefetchCache,\n tree\n };\n }, [\n appRouter,\n cache,\n prefetchCache,\n tree\n ]);\n }\n (0, _react.useEffect)(()=>{\n // If the app is restored from bfcache, it's possible that\n // pushRef.mpaNavigation is true, which would mean that any re-render of this component\n // would trigger the mpa navigation logic again from the lines below.\n // This will restore the router to the initial state in the event that the app is restored from bfcache.\n function handlePageShow(event) {\n var _window_history_state;\n if (!event.persisted || !((_window_history_state = window.history.state) == null ? void 0 : _window_history_state.__PRIVATE_NEXTJS_INTERNALS_TREE)) {\n return;\n }\n dispatch({\n type: _routerreducertypes.ACTION_RESTORE,\n url: new URL(window.location.href),\n tree: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE\n });\n }\n window.addEventListener(\"pageshow\", handlePageShow);\n return ()=>{\n window.removeEventListener(\"pageshow\", handlePageShow);\n };\n }, [\n dispatch\n ]);\n // When mpaNavigation flag is set do a hard navigation to the new url.\n // Infinitely suspend because we don't actually want to rerender any child\n // components with the new URL and any entangled state updates shouldn't\n // commit either (eg: useTransition isPending should stay true until the page\n // unloads).\n //\n // This is a side effect in render. Don't try this at home, kids. It's\n // probably safe because we know this is a singleton component and it's never\n // in <Offscreen>. At least I hope so. (It will run twice in dev strict mode,\n // but that's... fine?)\n const { pushRef } = (0, _usereducerwithdevtools.useUnwrapState)(reducerState);\n if (pushRef.mpaNavigation) {\n // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL\n if (globalMutable.pendingMpaPath !== canonicalUrl) {\n const location1 = window.location;\n if (pushRef.pendingPush) {\n location1.assign(canonicalUrl);\n } else {\n location1.replace(canonicalUrl);\n }\n globalMutable.pendingMpaPath = canonicalUrl;\n }\n // TODO-APP: Should we listen to navigateerror here to catch failed\n // navigations somehow? And should we call window.stop() if a SPA navigation\n // should interrupt an MPA one?\n (0, _react.use)((0, _infinitepromise.createInfinitePromise)());\n }\n (0, _react.useEffect)(()=>{\n const originalPushState = window.history.pushState.bind(window.history);\n const originalReplaceState = window.history.replaceState.bind(window.history);\n // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values.\n const applyUrlFromHistoryPushReplace = (url)=>{\n var _window_history_state;\n const href = window.location.href;\n const tree = (_window_history_state = window.history.state) == null ? void 0 : _window_history_state.__PRIVATE_NEXTJS_INTERNALS_TREE;\n (0, _react.startTransition)(()=>{\n dispatch({\n type: _routerreducertypes.ACTION_RESTORE,\n url: new URL(url != null ? url : href, href),\n tree\n });\n });\n };\n /**\n * Patch pushState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */ window.history.pushState = function pushState(data, _unused, url) {\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if ((data == null ? void 0 : data.__NA) || (data == null ? void 0 : data._N)) {\n return originalPushState(data, _unused, url);\n }\n data = copyNextJsInternalHistoryState(data);\n if (url) {\n applyUrlFromHistoryPushReplace(url);\n }\n return originalPushState(data, _unused, url);\n };\n /**\n * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */ window.history.replaceState = function replaceState(data, _unused, url) {\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if ((data == null ? void 0 : data.__NA) || (data == null ? void 0 : data._N)) {\n return originalReplaceState(data, _unused, url);\n }\n data = copyNextJsInternalHistoryState(data);\n if (url) {\n applyUrlFromHistoryPushReplace(url);\n }\n return originalReplaceState(data, _unused, url);\n };\n /**\n * Handle popstate event, this is used to handle back/forward in the browser.\n * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page.\n * That case can happen when the old router injected the history entry.\n */ const onPopState = (param)=>{\n let { state } = param;\n if (!state) {\n // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case.\n return;\n }\n // This case happens when the history entry was pushed by the `pages` router.\n if (!state.__NA) {\n window.location.reload();\n return;\n }\n // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously\n // Without startTransition works if the cache is there for this path\n (0, _react.startTransition)(()=>{\n dispatch({\n type: _routerreducertypes.ACTION_RESTORE,\n url: new URL(window.location.href),\n tree: state.__PRIVATE_NEXTJS_INTERNALS_TREE\n });\n });\n };\n // Register popstate event to call onPopstate.\n window.addEventListener(\"popstate\", onPopState);\n return ()=>{\n window.history.pushState = originalPushState;\n window.history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", onPopState);\n };\n }, [\n dispatch\n ]);\n const { cache, tree, nextUrl, focusAndScrollRef } = (0, _usereducerwithdevtools.useUnwrapState)(reducerState);\n const matchingHead = (0, _react.useMemo)(()=>{\n return (0, _findheadincache.findHeadInCache)(cache, tree[1]);\n }, [\n cache,\n tree\n ]);\n let head;\n if (matchingHead !== null) {\n // The head is wrapped in an extra component so we can use\n // `useDeferredValue` to swap between the prefetched and final versions of\n // the head. (This is what LayoutRouter does for segment data, too.)\n //\n // The `key` is used to remount the component whenever the head moves to\n // a different segment.\n const [headCacheNode, headKey] = matchingHead;\n head = /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {\n headCacheNode: headCacheNode\n }, headKey);\n } else {\n head = null;\n }\n let content = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_redirectboundary.RedirectBoundary, {\n children: [\n head,\n cache.rsc,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuterannouncer.AppRouterAnnouncer, {\n tree: tree\n })\n ]\n });\n if (true) {\n if (false) {}\n const HotReloader = (__webpack_require__(/*! ./react-dev-overlay/hot-reloader-client */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/hot-reloader-client.js\")[\"default\"]);\n content = /*#__PURE__*/ (0, _jsxruntime.jsx)(HotReloader, {\n assetPrefix: assetPrefix,\n children: content\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(HistoryUpdater, {\n appRouterState: (0, _usereducerwithdevtools.useUnwrapState)(reducerState),\n sync: sync\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathnameContext.Provider, {\n value: pathname,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, {\n value: searchParams,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.GlobalLayoutRouterContext.Provider, {\n value: {\n buildId,\n changeByServerResponse,\n tree,\n focusAndScrollRef,\n nextUrl\n },\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, {\n value: appRouter,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.LayoutRouterContext.Provider, {\n value: {\n childNodes: cache.parallelRoutes,\n tree,\n // Root node always has `url`\n // Provided in AppTreeContext to ensure it can be overwritten in layout-router\n url: canonicalUrl\n },\n children: content\n })\n })\n })\n })\n })\n ]\n });\n}\nfunction AppRouter(props) {\n const { globalErrorComponent, ...rest } = props;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.ErrorBoundary, {\n errorComponent: globalErrorComponent,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Router, {\n ...rest\n })\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXIuanMiLCJtYXBwaW5ncyI6InFEQUVhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBS047QUFDQSxTQUFTSyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJWCxPQUFPQyxjQUFjLENBQUNTLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUVAsU0FBUztJQUNiRywyQkFBMkI7UUFDdkIsT0FBT0E7SUFDWDtJQUNBQyw2QkFBNkI7UUFDekIsT0FBT0E7SUFDWDtJQUNBQyxzQkFBc0I7UUFDbEIsT0FBT0E7SUFDWDtJQUNBQyxTQUFTO1FBQ0wsT0FBT087SUFDWDtBQUNKO0FBQ0EsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTUksaUNBQWlDSixtQkFBT0EsQ0FBQyx1S0FBb0Q7QUFDbkcsTUFBTUssc0JBQXNCTCxtQkFBT0EsQ0FBQyxzSUFBdUM7QUFDM0UsTUFBTU0scUJBQXFCTixtQkFBT0EsQ0FBQyxzSUFBdUM7QUFDMUUsTUFBTU8sbUNBQW1DUCxtQkFBT0EsQ0FBQywyS0FBc0Q7QUFDdkcsTUFBTVEsMEJBQTBCUixtQkFBT0EsQ0FBQyxrSEFBNkI7QUFDckUsTUFBTVMsaUJBQWlCVCxtQkFBT0EsQ0FBQyw0RkFBa0I7QUFDakQsTUFBTVUsNEJBQTRCVixtQkFBT0EsQ0FBQyxvSkFBOEM7QUFDeEYsTUFBTVcsU0FBU1gsbUJBQU9BLENBQUMsOEdBQXNDO0FBQzdELE1BQU1ZLGVBQWVaLG1CQUFPQSxDQUFDLGdGQUFrQjtBQUMvQyxNQUFNYSxzQkFBc0JiLG1CQUFPQSxDQUFDLHdHQUF3QjtBQUM1RCxNQUFNYyxvQkFBb0JkLG1CQUFPQSxDQUFDLGtHQUFxQjtBQUN2RCxNQUFNZSxtQkFBbUJmLG1CQUFPQSxDQUFDLG9KQUE4QztBQUMvRSxNQUFNZ0IsbUJBQW1CaEIsbUJBQU9BLENBQUMsZ0dBQW9CO0FBQ3JELE1BQU1pQixvQkFBb0JqQixtQkFBT0EsQ0FBQyxvR0FBc0I7QUFDeEQsTUFBTWtCLGtCQUFrQmxCLG1CQUFPQSxDQUFDLHNGQUFxQjtBQUNyRCxNQUFNbUIsZUFBZW5CLG1CQUFPQSxDQUFDLGdGQUFrQjtBQUMvQyxNQUFNb0IsV0FBVyxnQkFBa0I7QUFDbkMsaUhBQWlIO0FBQ2pILElBQUlDLHdCQUF3QkQsV0FBVyxPQUFPLElBQUlFO0FBQ2xELElBQUlDLCtCQUErQjtBQUNuQyxTQUFTbkM7SUFDTCxPQUFPbUM7QUFDWDtBQUNBLE1BQU1DLGdCQUFnQixDQUFDO0FBQ3ZCLFNBQVNuQyw0QkFBNEJvQyxHQUFHO0lBQ3BDLE1BQU1DLDZCQUE2QixJQUFJQyxJQUFJRixLQUFLRyxTQUFTQyxNQUFNO0lBQy9ESCwyQkFBMkJJLFlBQVksQ0FBQ0MsTUFBTSxDQUFDZCxrQkFBa0JlLG9CQUFvQjtJQUNyRixJQUFJQyxLQUFxQyxFQUFFLEVBTzFDO0lBQ0QsT0FBT1A7QUFDWDtBQUNBLFNBQVNjLGNBQWNmLEdBQUc7SUFDdEIsT0FBT0EsSUFBSUksTUFBTSxLQUFLWSxPQUFPYixRQUFRLENBQUNDLE1BQU07QUFDaEQ7QUFDQSxTQUFTYSxlQUFlQyxLQUFLO0lBQ3pCLElBQUksRUFBRUMsY0FBYyxFQUFFQyxJQUFJLEVBQUUsR0FBR0Y7SUFDOUIsSUFBR3pDLE9BQU80QyxrQkFBa0IsRUFBRTtRQUMzQixNQUFNLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxZQUFZLEVBQUUsR0FBR0w7UUFDeEMsTUFBTU0sZUFBZTtZQUNqQixHQUFHRixRQUFRRywwQkFBMEIsR0FBR1YsT0FBT1csT0FBTyxDQUFDQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLHlDQUF5QztZQUN6QyxrRkFBa0Y7WUFDbEYsaUZBQWlGO1lBQ2pGQyxNQUFNO1lBQ05DLGlDQUFpQ1I7UUFDckM7UUFDQSxJQUFJQyxRQUFRUSxXQUFXLElBRXZCLCtGQUYwSDtRQUMxSCwyREFBMkQ7UUFDMUQsSUFBR2xELG1CQUFtQm1ELGlCQUFpQixFQUFFLElBQUk5QixJQUFJYyxPQUFPYixRQUFRLENBQUM4QixJQUFJLE9BQU9ULGNBQWM7WUFDdkYscUpBQXFKO1lBQ3JKRCxRQUFRUSxXQUFXLEdBQUc7WUFDdEJmLE9BQU9XLE9BQU8sQ0FBQ08sU0FBUyxDQUFDVCxjQUFjLElBQUlEO1FBQy9DLE9BQU87WUFDSFIsT0FBT1csT0FBTyxDQUFDUSxZQUFZLENBQUNWLGNBQWMsSUFBSUQ7UUFDbEQ7UUFDQUosS0FBS0Q7SUFDVCxHQUFHO1FBQ0NBO1FBQ0FDO0tBQ0g7SUFDRCxPQUFPO0FBQ1g7QUFDQSxTQUFTdkQ7SUFDTCxPQUFPO1FBQ0h1RSxVQUFVO1FBQ1ZDLEtBQUs7UUFDTEMsYUFBYTtRQUNiQyxnQkFBZ0IsSUFBSTFDO1FBQ3BCMkMsa0JBQWtCO0lBQ3RCO0FBQ0o7QUFDQSxTQUFTQywwQkFBMEJDLFFBQVE7SUFDdkMsTUFBTUMseUJBQXlCLENBQUMsR0FBR2xFLE9BQU9tRSxXQUFXLEVBQUUsQ0FBQ0M7UUFDbkQsSUFBR3BFLE9BQU9xRSxlQUFlLEVBQUU7WUFDeEJKLFNBQVM7Z0JBQ0wsR0FBR0csYUFBYTtnQkFDaEJFLE1BQU1uRSxvQkFBb0JvRSxvQkFBb0I7WUFDbEQ7UUFDSjtJQUNKLEdBQUc7UUFDQ047S0FDSDtJQUNENUMsK0JBQStCNkM7QUFDbkM7QUFDQTs7Q0FFQyxHQUFHLFNBQVNNLDBCQUEwQlAsUUFBUTtJQUMzQyxPQUFPLENBQUMsR0FBR2pFLE9BQU9tRSxXQUFXLEVBQUUsQ0FBQ00sY0FBY0MsWUFBWUM7UUFDckQsSUFBRzNFLE9BQU9xRSxlQUFlLEVBQUU7WUFDeEJKLFNBQVM7Z0JBQ0xLLE1BQU1uRSxvQkFBb0J5RSxtQkFBbUI7Z0JBQzdDRjtnQkFDQUQ7Z0JBQ0FFO1lBQ0o7UUFDSjtJQUNKLEdBQUc7UUFDQ1Y7S0FDSDtBQUNMO0FBQ0EsU0FBU1ksWUFBWVosUUFBUTtJQUN6QixPQUFPLENBQUMsR0FBR2pFLE9BQU9tRSxXQUFXLEVBQUUsQ0FBQ1gsTUFBTXNCLGNBQWNDO1FBQ2hELE1BQU14RCxNQUFNLElBQUlFLElBQUksQ0FBQyxHQUFHZixhQUFhc0UsV0FBVyxFQUFFeEIsT0FBTzlCLFNBQVM4QixJQUFJO1FBQ3RFLE9BQU9TLFNBQVM7WUFDWkssTUFBTW5FLG9CQUFvQjhFLGVBQWU7WUFDekMxRDtZQUNBMkQsZUFBZTVDLGNBQWNmO1lBQzdCNEQsZ0JBQWdCekQsU0FBUzBELE1BQU07WUFDL0JMLGNBQWNBLGdCQUFnQixPQUFPQSxlQUFlO1lBQ3BERDtRQUNKO0lBQ0osR0FBRztRQUNDYjtLQUNIO0FBQ0w7QUFDQSxTQUFTb0IsK0JBQStCQyxJQUFJO0lBQ3hDLElBQUlBLFFBQVEsTUFBTUEsT0FBTyxDQUFDO0lBQzFCLE1BQU1DLGVBQWVoRCxPQUFPVyxPQUFPLENBQUNDLEtBQUs7SUFDekMsTUFBTUMsT0FBT21DLGdCQUFnQixPQUFPLEtBQUssSUFBSUEsYUFBYW5DLElBQUk7SUFDOUQsSUFBSUEsTUFBTTtRQUNOa0MsS0FBS2xDLElBQUksR0FBR0E7SUFDaEI7SUFDQSxNQUFNQyxrQ0FBa0NrQyxnQkFBZ0IsT0FBTyxLQUFLLElBQUlBLGFBQWFsQywrQkFBK0I7SUFDcEgsSUFBSUEsaUNBQWlDO1FBQ2pDaUMsS0FBS2pDLCtCQUErQixHQUFHQTtJQUMzQztJQUNBLE9BQU9pQztBQUNYO0FBQ0EsU0FBU0UsS0FBSy9DLEtBQUs7SUFDZixJQUFJLEVBQUVnRCxhQUFhLEVBQUUsR0FBR2hEO0lBQ3hCLDZFQUE2RTtJQUM3RSw0RUFBNEU7SUFDNUUsa0RBQWtEO0lBQ2xELE1BQU1pRCxPQUFPRCxrQkFBa0IsT0FBT0EsY0FBY0MsSUFBSSxHQUFHO0lBQzNELE1BQU1DLGVBQWVGLGtCQUFrQixPQUFPQSxjQUFjRSxZQUFZLEdBQUc7SUFDM0UsNkVBQTZFO0lBQzdFLE1BQU1DLHNCQUFzQkQsaUJBQWlCLE9BQU9BLGVBQWVEO0lBQ25FLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0Usc0NBQXNDO0lBQ3RDLEVBQUU7SUFDRixxRUFBcUU7SUFDckUsMEVBQTBFO0lBQzFFLGlCQUFpQjtJQUNqQixPQUFPLENBQUMsR0FBRzFGLE9BQU82RixnQkFBZ0IsRUFBRUgsTUFBTUU7QUFDOUM7QUFDQTs7Q0FFQyxHQUFHLFNBQVNFLE9BQU9yRCxLQUFLO0lBQ3JCLElBQUksRUFBRXNELE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxXQUFXLEVBQUVDLG1CQUFtQixFQUFFQyxlQUFlLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFLEdBQUc1RDtJQUM3RyxNQUFNNkQsZUFBZSxDQUFDLEdBQUd0RyxPQUFPdUcsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHL0YsMEJBQTBCZ0csd0JBQXdCLEVBQUU7WUFDN0ZUO1lBQ0FJO1lBQ0FEO1lBQ0FEO1lBQ0E5RTtZQUNBRDtZQUNBUSxVQUFVLENBQUNSLFdBQVdxQixPQUFPYixRQUFRLEdBQUc7WUFDeENzRTtRQUNKLElBQUk7UUFDSkQ7UUFDQUk7UUFDQUQ7UUFDQUQ7UUFDQUQ7S0FDSDtJQUNELE1BQU0sQ0FBQ1MsY0FBY3hDLFVBQVV0QixLQUFLLEdBQUcsQ0FBQyxHQUFHckMsd0JBQXdCb0csMkJBQTJCLEVBQUVKO0lBQy9GLElBQUd0RyxPQUFPMkcsU0FBUyxFQUFFO1FBQ2xCLHlFQUF5RTtRQUN6RXhGLHdCQUF3QjtJQUM1QixHQUFHLEVBQUU7SUFDTCxNQUFNLEVBQUU0QixZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUd6Qyx3QkFBd0JzRyxjQUFjLEVBQUVIO0lBQ3JFLG1FQUFtRTtJQUNuRSxNQUFNLEVBQUU3RSxZQUFZLEVBQUVNLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBR2xDLE9BQU91RyxPQUFPLEVBQUU7UUFDbkQsTUFBTWhGLE1BQU0sSUFBSUUsSUFBSXNCLGNBQWMsS0FBNkIsR0FBRyxhQUFhUixDQUFvQjtRQUNuRyxPQUFPO1lBQ0gsNERBQTREO1lBQzVEWCxjQUFjTCxJQUFJSyxZQUFZO1lBQzlCTSxVQUFVLENBQUMsR0FBR2pCLGFBQWE0RixXQUFXLEVBQUV0RixJQUFJVyxRQUFRLElBQUksQ0FBQyxHQUFHbEIsZ0JBQWdCOEYsY0FBYyxFQUFFdkYsSUFBSVcsUUFBUSxJQUFJWCxJQUFJVyxRQUFRO1FBQzVIO0lBQ0osR0FBRztRQUNDYTtLQUNIO0lBQ0QsTUFBTWdFLHlCQUF5QnZDLDBCQUEwQlA7SUFDekQsTUFBTStDLFdBQVduQyxZQUFZWjtJQUM3QkQsMEJBQTBCQztJQUMxQjs7R0FFRCxHQUFHLE1BQU1nRCxZQUFZLENBQUMsR0FBR2pILE9BQU91RyxPQUFPLEVBQUU7UUFDcEMsTUFBTVcsaUJBQWlCO1lBQ25CQyxNQUFNLElBQUk1RSxPQUFPVyxPQUFPLENBQUNpRSxJQUFJO1lBQzdCQyxTQUFTLElBQUk3RSxPQUFPVyxPQUFPLENBQUNrRSxPQUFPO1lBQ25DQyxVQUFVLENBQUM3RCxNQUFNOEQ7Z0JBQ2Isa0RBQWtEO2dCQUNsRCx1RUFBdUU7Z0JBQ3ZFLElBQUksQ0FBQyxHQUFHN0csT0FBTzhHLEtBQUssRUFBRWhGLE9BQU9pRixTQUFTLENBQUNDLFNBQVMsS0FBSzFGLGtCQUF5QixlQUFlO29CQUN6RjtnQkFDSjtnQkFDQSxNQUFNUixNQUFNLElBQUlFLElBQUksQ0FBQyxHQUFHZixhQUFhc0UsV0FBVyxFQUFFeEIsT0FBT2pCLE9BQU9iLFFBQVEsQ0FBQzhCLElBQUk7Z0JBQzdFLHFEQUFxRDtnQkFDckQsSUFBSWxCLGNBQWNmLE1BQU07b0JBQ3BCO2dCQUNKO2dCQUNDLElBQUd2QixPQUFPcUUsZUFBZSxFQUFFO29CQUN4QixJQUFJcUQ7b0JBQ0p6RCxTQUFTO3dCQUNMSyxNQUFNbkUsb0JBQW9Cd0gsZUFBZTt3QkFDekNwRzt3QkFDQXFHLE1BQU0sQ0FBQ0YsZ0JBQWdCSixXQUFXLE9BQU8sS0FBSyxJQUFJQSxRQUFRTSxJQUFJLEtBQUssT0FBT0YsZ0JBQWdCdkgsb0JBQW9CMEgsWUFBWSxDQUFDQyxJQUFJO29CQUNuSTtnQkFDSjtZQUNKO1lBQ0FDLFNBQVMsQ0FBQ3ZFLE1BQU04RDtnQkFDWixJQUFJQSxZQUFZLEtBQUssR0FBR0EsVUFBVSxDQUFDO2dCQUNsQyxJQUFHdEgsT0FBT3FFLGVBQWUsRUFBRTtvQkFDeEIsSUFBSTJEO29CQUNKaEIsU0FBU3hELE1BQU0sV0FBVyxDQUFDd0Usa0JBQWtCVixRQUFRVyxNQUFNLEtBQUssT0FBT0Qsa0JBQWtCO2dCQUM3RjtZQUNKO1lBQ0FFLE1BQU0sQ0FBQzFFLE1BQU04RDtnQkFDVCxJQUFJQSxZQUFZLEtBQUssR0FBR0EsVUFBVSxDQUFDO2dCQUNsQyxJQUFHdEgsT0FBT3FFLGVBQWUsRUFBRTtvQkFDeEIsSUFBSTJEO29CQUNKaEIsU0FBU3hELE1BQU0sUUFBUSxDQUFDd0Usa0JBQWtCVixRQUFRVyxNQUFNLEtBQUssT0FBT0Qsa0JBQWtCO2dCQUMxRjtZQUNKO1lBQ0FHLFNBQVM7Z0JBQ0osSUFBR25JLE9BQU9xRSxlQUFlLEVBQUU7b0JBQ3hCSixTQUFTO3dCQUNMSyxNQUFNbkUsb0JBQW9CaUksY0FBYzt3QkFDeEN6RyxRQUFRWSxPQUFPYixRQUFRLENBQUNDLE1BQU07b0JBQ2xDO2dCQUNKO1lBQ0o7WUFDQSx3REFBd0Q7WUFDeEQwRyxhQUFhO2dCQUNULElBQUl0RyxLQUFzQyxFQUFFLEVBRTNDLE1BQU07b0JBQ0YsSUFBRy9CLE9BQU9xRSxlQUFlLEVBQUU7d0JBQ3hCSixTQUFTOzRCQUNMSyxNQUFNbkUsb0JBQW9Cb0ksbUJBQW1COzRCQUM3QzVHLFFBQVFZLE9BQU9iLFFBQVEsQ0FBQ0MsTUFBTTt3QkFDbEM7b0JBQ0o7Z0JBQ0o7WUFDSjtRQUNKO1FBQ0EsT0FBT3VGO0lBQ1gsR0FBRztRQUNDakQ7UUFDQStDO0tBQ0g7SUFDQSxJQUFHaEgsT0FBTzJHLFNBQVMsRUFBRTtRQUNsQixnRUFBZ0U7UUFDaEUsSUFBSXBFLE9BQU9pRyxJQUFJLEVBQUU7WUFDYmpHLE9BQU9pRyxJQUFJLENBQUNDLE1BQU0sR0FBR3hCO1FBQ3pCO0lBQ0osR0FBRztRQUNDQTtLQUNIO0lBQ0QsSUFBSWxGLElBQXFDLEVBQUU7UUFDdkMsc0RBQXNEO1FBQ3RELE1BQU0sRUFBRTJHLEtBQUssRUFBRUMsYUFBYSxFQUFFOUYsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHdkMsd0JBQXdCc0csY0FBYyxFQUFFSDtRQUNuRiw0RkFBNEY7UUFDNUYsc0RBQXNEO1FBQ3JELElBQUd6RyxPQUFPMkcsU0FBUyxFQUFFO1lBQ2xCLDBDQUEwQztZQUMxQyx1R0FBdUc7WUFDdkcsbUNBQW1DO1lBQ25DcEUsT0FBT3FHLEVBQUUsR0FBRztnQkFDUkgsUUFBUXhCO2dCQUNSeUI7Z0JBQ0FDO2dCQUNBOUY7WUFDSjtRQUNKLEdBQUc7WUFDQ29FO1lBQ0F5QjtZQUNBQztZQUNBOUY7U0FDSDtJQUNMO0lBQ0MsSUFBRzdDLE9BQU8yRyxTQUFTLEVBQUU7UUFDbEIsMERBQTBEO1FBQzFELHVGQUF1RjtRQUN2RixxRUFBcUU7UUFDckUsd0dBQXdHO1FBQ3hHLFNBQVNrQyxlQUFlQyxLQUFLO1lBQ3pCLElBQUlDO1lBQ0osSUFBSSxDQUFDRCxNQUFNRSxTQUFTLElBQUksQ0FBRSxFQUFDRCx3QkFBd0J4RyxPQUFPVyxPQUFPLENBQUNDLEtBQUssS0FBSyxPQUFPLEtBQUssSUFBSTRGLHNCQUFzQjFGLCtCQUErQixHQUFHO2dCQUNoSjtZQUNKO1lBQ0FZLFNBQVM7Z0JBQ0xLLE1BQU1uRSxvQkFBb0I4SSxjQUFjO2dCQUN4QzFILEtBQUssSUFBSUUsSUFBSWMsT0FBT2IsUUFBUSxDQUFDOEIsSUFBSTtnQkFDakNYLE1BQU1OLE9BQU9XLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDRSwrQkFBK0I7WUFDOUQ7UUFDSjtRQUNBZCxPQUFPMkcsZ0JBQWdCLENBQUMsWUFBWUw7UUFDcEMsT0FBTztZQUNIdEcsT0FBTzRHLG1CQUFtQixDQUFDLFlBQVlOO1FBQzNDO0lBQ0osR0FBRztRQUNDNUU7S0FDSDtJQUNELHNFQUFzRTtJQUN0RSwwRUFBMEU7SUFDMUUsd0VBQXdFO0lBQ3hFLDZFQUE2RTtJQUM3RSxZQUFZO0lBQ1osRUFBRTtJQUNGLHNFQUFzRTtJQUN0RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLHVCQUF1QjtJQUN2QixNQUFNLEVBQUVuQixPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUd4Qyx3QkFBd0JzRyxjQUFjLEVBQUVIO0lBQ2hFLElBQUkzRCxRQUFRc0csYUFBYSxFQUFFO1FBQ3ZCLGdIQUFnSDtRQUNoSCxJQUFJOUgsY0FBYytILGNBQWMsS0FBS3RHLGNBQWM7WUFDL0MsTUFBTXVHLFlBQVkvRyxPQUFPYixRQUFRO1lBQ2pDLElBQUlvQixRQUFRUSxXQUFXLEVBQUU7Z0JBQ3JCZ0csVUFBVUMsTUFBTSxDQUFDeEc7WUFDckIsT0FBTztnQkFDSHVHLFVBQVV2QixPQUFPLENBQUNoRjtZQUN0QjtZQUNBekIsY0FBYytILGNBQWMsR0FBR3RHO1FBQ25DO1FBQ0EsbUVBQW1FO1FBQ25FLDRFQUE0RTtRQUM1RSwrQkFBK0I7UUFDOUIsSUFBRy9DLE9BQU93SixHQUFHLEVBQUUsQ0FBQyxHQUFHMUksaUJBQWlCMkkscUJBQXFCO0lBQzlEO0lBQ0MsSUFBR3pKLE9BQU8yRyxTQUFTLEVBQUU7UUFDbEIsTUFBTStDLG9CQUFvQm5ILE9BQU9XLE9BQU8sQ0FBQ08sU0FBUyxDQUFDa0csSUFBSSxDQUFDcEgsT0FBT1csT0FBTztRQUN0RSxNQUFNMEcsdUJBQXVCckgsT0FBT1csT0FBTyxDQUFDUSxZQUFZLENBQUNpRyxJQUFJLENBQUNwSCxPQUFPVyxPQUFPO1FBQzVFLHdKQUF3SjtRQUN4SixNQUFNMkcsaUNBQWlDLENBQUN0STtZQUNwQyxJQUFJd0g7WUFDSixNQUFNdkYsT0FBT2pCLE9BQU9iLFFBQVEsQ0FBQzhCLElBQUk7WUFDakMsTUFBTVgsT0FBTyxDQUFDa0csd0JBQXdCeEcsT0FBT1csT0FBTyxDQUFDQyxLQUFLLEtBQUssT0FBTyxLQUFLLElBQUk0RixzQkFBc0IxRiwrQkFBK0I7WUFDbkksSUFBR3JELE9BQU9xRSxlQUFlLEVBQUU7Z0JBQ3hCSixTQUFTO29CQUNMSyxNQUFNbkUsb0JBQW9COEksY0FBYztvQkFDeEMxSCxLQUFLLElBQUlFLElBQUlGLE9BQU8sT0FBT0EsTUFBTWlDLE1BQU1BO29CQUN2Q1g7Z0JBQ0o7WUFDSjtRQUNKO1FBQ0E7Ozs7S0FJSCxHQUFHTixPQUFPVyxPQUFPLENBQUNPLFNBQVMsR0FBRyxTQUFTQSxVQUFVNkIsSUFBSSxFQUFFd0UsT0FBTyxFQUFFdkksR0FBRztZQUM1RCxxRUFBcUU7WUFDckUsSUFBSSxDQUFDK0QsUUFBUSxPQUFPLEtBQUssSUFBSUEsS0FBS2xDLElBQUksS0FBTWtDLENBQUFBLFFBQVEsT0FBTyxLQUFLLElBQUlBLEtBQUt5RSxFQUFFLEdBQUc7Z0JBQzFFLE9BQU9MLGtCQUFrQnBFLE1BQU13RSxTQUFTdkk7WUFDNUM7WUFDQStELE9BQU9ELCtCQUErQkM7WUFDdEMsSUFBSS9ELEtBQUs7Z0JBQ0xzSSwrQkFBK0J0STtZQUNuQztZQUNBLE9BQU9tSSxrQkFBa0JwRSxNQUFNd0UsU0FBU3ZJO1FBQzVDO1FBQ0E7Ozs7S0FJSCxHQUFHZ0IsT0FBT1csT0FBTyxDQUFDUSxZQUFZLEdBQUcsU0FBU0EsYUFBYTRCLElBQUksRUFBRXdFLE9BQU8sRUFBRXZJLEdBQUc7WUFDbEUscUVBQXFFO1lBQ3JFLElBQUksQ0FBQytELFFBQVEsT0FBTyxLQUFLLElBQUlBLEtBQUtsQyxJQUFJLEtBQU1rQyxDQUFBQSxRQUFRLE9BQU8sS0FBSyxJQUFJQSxLQUFLeUUsRUFBRSxHQUFHO2dCQUMxRSxPQUFPSCxxQkFBcUJ0RSxNQUFNd0UsU0FBU3ZJO1lBQy9DO1lBQ0ErRCxPQUFPRCwrQkFBK0JDO1lBQ3RDLElBQUkvRCxLQUFLO2dCQUNMc0ksK0JBQStCdEk7WUFDbkM7WUFDQSxPQUFPcUkscUJBQXFCdEUsTUFBTXdFLFNBQVN2STtRQUMvQztRQUNBOzs7O0tBSUgsR0FBRyxNQUFNeUksYUFBYSxDQUFDdkg7WUFDaEIsSUFBSSxFQUFFVSxLQUFLLEVBQUUsR0FBR1Y7WUFDaEIsSUFBSSxDQUFDVSxPQUFPO2dCQUNSLCtJQUErSTtnQkFDL0k7WUFDSjtZQUNBLDZFQUE2RTtZQUM3RSxJQUFJLENBQUNBLE1BQU1DLElBQUksRUFBRTtnQkFDYmIsT0FBT2IsUUFBUSxDQUFDdUksTUFBTTtnQkFDdEI7WUFDSjtZQUNBLGdIQUFnSDtZQUNoSCxvRUFBb0U7WUFDbkUsSUFBR2pLLE9BQU9xRSxlQUFlLEVBQUU7Z0JBQ3hCSixTQUFTO29CQUNMSyxNQUFNbkUsb0JBQW9COEksY0FBYztvQkFDeEMxSCxLQUFLLElBQUlFLElBQUljLE9BQU9iLFFBQVEsQ0FBQzhCLElBQUk7b0JBQ2pDWCxNQUFNTSxNQUFNRSwrQkFBK0I7Z0JBQy9DO1lBQ0o7UUFDSjtRQUNBLDhDQUE4QztRQUM5Q2QsT0FBTzJHLGdCQUFnQixDQUFDLFlBQVljO1FBQ3BDLE9BQU87WUFDSHpILE9BQU9XLE9BQU8sQ0FBQ08sU0FBUyxHQUFHaUc7WUFDM0JuSCxPQUFPVyxPQUFPLENBQUNRLFlBQVksR0FBR2tHO1lBQzlCckgsT0FBTzRHLG1CQUFtQixDQUFDLFlBQVlhO1FBQzNDO0lBQ0osR0FBRztRQUNDL0Y7S0FDSDtJQUNELE1BQU0sRUFBRXlFLEtBQUssRUFBRTdGLElBQUksRUFBRXFILE9BQU8sRUFBRUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEdBQUc3Six3QkFBd0JzRyxjQUFjLEVBQUVIO0lBQ2hHLE1BQU0yRCxlQUFlLENBQUMsR0FBR3BLLE9BQU91RyxPQUFPLEVBQUU7UUFDckMsT0FBTyxDQUFDLEdBQUcxRixpQkFBaUJ3SixlQUFlLEVBQUUzQixPQUFPN0YsSUFBSSxDQUFDLEVBQUU7SUFDL0QsR0FBRztRQUNDNkY7UUFDQTdGO0tBQ0g7SUFDRCxJQUFJNkM7SUFDSixJQUFJMEUsaUJBQWlCLE1BQU07UUFDdkIsMERBQTBEO1FBQzFELDBFQUEwRTtRQUMxRSxvRUFBb0U7UUFDcEUsRUFBRTtRQUNGLHdFQUF3RTtRQUN4RSx1QkFBdUI7UUFDdkIsTUFBTSxDQUFDM0UsZUFBZTZFLFFBQVEsR0FBR0Y7UUFDakMxRSxPQUFxQixXQUFILEdBQUksSUFBRzNGLFlBQVl3SyxHQUFHLEVBQUUvRSxNQUFNO1lBQzVDQyxlQUFlQTtRQUNuQixHQUFHNkU7SUFDUCxPQUFPO1FBQ0g1RSxPQUFPO0lBQ1g7SUFDQSxJQUFJOEUsVUFBd0IsV0FBSCxHQUFJLElBQUd6SyxZQUFZMEssSUFBSSxFQUFFN0osa0JBQWtCOEosZ0JBQWdCLEVBQUU7UUFDbEZDLFVBQVU7WUFDTmpGO1lBQ0FnRCxNQUFNOUUsR0FBRztZQUNULFdBQVcsR0FBSSxJQUFHN0QsWUFBWXdLLEdBQUcsRUFBRTVKLG9CQUFvQmlLLGtCQUFrQixFQUFFO2dCQUN2RS9ILE1BQU1BO1lBQ1Y7U0FDSDtJQUNMO0lBQ0EsSUFBSWQsSUFBcUMsRUFBRTtRQUN2QyxJQUFJLEtBQTZCLEVBQUUsRUFRbEM7UUFDRCxNQUFNaUosY0FBY2xMLDRLQUEwRDtRQUM5RTBLLFVBQXdCLFdBQUgsR0FBSSxJQUFHekssWUFBWXdLLEdBQUcsRUFBRVMsYUFBYTtZQUN0RDVFLGFBQWFBO1lBQ2J1RSxVQUFVSDtRQUNkO0lBQ0o7SUFDQSxPQUFxQixXQUFILEdBQUksSUFBR3pLLFlBQVkwSyxJQUFJLEVBQUUxSyxZQUFZa0wsUUFBUSxFQUFFO1FBQzdETixVQUFVO1lBQ04sV0FBVyxHQUFJLElBQUc1SyxZQUFZd0ssR0FBRyxFQUFFL0gsZ0JBQWdCO2dCQUMvQ0UsZ0JBQWdCLENBQUMsR0FBR3BDLHdCQUF3QnNHLGNBQWMsRUFBRUg7Z0JBQzVEOUQsTUFBTUE7WUFDVjtZQUNBLFdBQVcsR0FBSSxJQUFHNUMsWUFBWXdLLEdBQUcsRUFBRWxLLGlDQUFpQzZLLGVBQWUsQ0FBQ0gsUUFBUSxFQUFFO2dCQUMxRi9MLE9BQU9rRDtnQkFDUHlJLFVBQXdCLFdBQUgsR0FBSSxJQUFHNUssWUFBWXdLLEdBQUcsRUFBRWxLLGlDQUFpQzhLLG1CQUFtQixDQUFDSixRQUFRLEVBQUU7b0JBQ3hHL0wsT0FBTzRDO29CQUNQK0ksVUFBd0IsV0FBSCxHQUFJLElBQUc1SyxZQUFZd0ssR0FBRyxFQUFFckssK0JBQStCa0wseUJBQXlCLENBQUNMLFFBQVEsRUFBRTt3QkFDNUcvTCxPQUFPOzRCQUNIK0c7NEJBQ0FnQjs0QkFDQWxFOzRCQUNBc0g7NEJBQ0FEO3dCQUNKO3dCQUNBUyxVQUF3QixXQUFILEdBQUksSUFBRzVLLFlBQVl3SyxHQUFHLEVBQUVySywrQkFBK0JtTCxnQkFBZ0IsQ0FBQ04sUUFBUSxFQUFFOzRCQUNuRy9MLE9BQU9pSTs0QkFDUDBELFVBQXdCLFdBQUgsR0FBSSxJQUFHNUssWUFBWXdLLEdBQUcsRUFBRXJLLCtCQUErQm9MLG1CQUFtQixDQUFDUCxRQUFRLEVBQUU7Z0NBQ3RHL0wsT0FBTztvQ0FDSHVNLFlBQVk3QyxNQUFNNUUsY0FBYztvQ0FDaENqQjtvQ0FDQSw2QkFBNkI7b0NBQzdCLDhFQUE4RTtvQ0FDOUV0QixLQUFLd0I7Z0NBQ1Q7Z0NBQ0E0SCxVQUFVSDs0QkFDZDt3QkFDSjtvQkFDSjtnQkFDSjtZQUNKO1NBQ0g7SUFDTDtBQUNKO0FBQ0EsU0FBUzVLLFVBQVU0TCxLQUFLO0lBQ3BCLE1BQU0sRUFBRUMsb0JBQW9CLEVBQUUsR0FBR0MsTUFBTSxHQUFHRjtJQUMxQyxPQUFxQixXQUFILEdBQUksSUFBR3pMLFlBQVl3SyxHQUFHLEVBQUVoSyxlQUFlb0wsYUFBYSxFQUFFO1FBQ3BFQyxnQkFBZ0JIO1FBQ2hCZCxVQUF3QixXQUFILEdBQUksSUFBRzVLLFlBQVl3SyxHQUFHLEVBQUV6RSxRQUFRO1lBQ2pELEdBQUc0RixJQUFJO1FBQ1g7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU8zTSxRQUFRTSxPQUFPLEtBQUssY0FBZSxPQUFPTixRQUFRTSxPQUFPLEtBQUssWUFBWU4sUUFBUU0sT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPTixRQUFRTSxPQUFPLENBQUN3TSxVQUFVLEtBQUssYUFBYTtJQUNyS2hOLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUU0sT0FBTyxFQUFFLGNBQWM7UUFBRUwsT0FBTztJQUFLO0lBQ25FSCxPQUFPMEssTUFBTSxDQUFDeEssUUFBUU0sT0FBTyxFQUFFTjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRTSxPQUFPO0FBQ2xDLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci5qcz80MTU5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGdldFNlcnZlckFjdGlvbkRpc3BhdGNoZXI6IG51bGwsXG4gICAgdXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyOiBudWxsLFxuICAgIGNyZWF0ZUVtcHR5Q2FjaGVOb2RlOiBudWxsLFxuICAgIGRlZmF1bHQ6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZ2V0U2VydmVyQWN0aW9uRGlzcGF0Y2hlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyO1xuICAgIH0sXG4gICAgdXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlcjtcbiAgICB9LFxuICAgIGNyZWF0ZUVtcHR5Q2FjaGVOb2RlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Q2FjaGVOb2RlO1xuICAgIH0sXG4gICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBcHBSb3V0ZXI7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5jb25zdCBfcm91dGVycmVkdWNlcnR5cGVzID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXNcIik7XG5jb25zdCBfY3JlYXRlaHJlZmZyb211cmwgPSByZXF1aXJlKFwiLi9yb3V0ZXItcmVkdWNlci9jcmVhdGUtaHJlZi1mcm9tLXVybFwiKTtcbmNvbnN0IF9ob29rc2NsaWVudGNvbnRleHRzaGFyZWRydW50aW1lID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvaG9va3MtY2xpZW50LWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5jb25zdCBfdXNlcmVkdWNlcndpdGhkZXZ0b29scyA9IHJlcXVpcmUoXCIuL3VzZS1yZWR1Y2VyLXdpdGgtZGV2dG9vbHNcIik7XG5jb25zdCBfZXJyb3Jib3VuZGFyeSA9IHJlcXVpcmUoXCIuL2Vycm9yLWJvdW5kYXJ5XCIpO1xuY29uc3QgX2NyZWF0ZWluaXRpYWxyb3V0ZXJzdGF0ZSA9IHJlcXVpcmUoXCIuL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1pbml0aWFsLXJvdXRlci1zdGF0ZVwiKTtcbmNvbnN0IF9pc2JvdCA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1ib3RcIik7XG5jb25zdCBfYWRkYmFzZXBhdGggPSByZXF1aXJlKFwiLi4vYWRkLWJhc2UtcGF0aFwiKTtcbmNvbnN0IF9hcHByb3V0ZXJhbm5vdW5jZXIgPSByZXF1aXJlKFwiLi9hcHAtcm91dGVyLWFubm91bmNlclwiKTtcbmNvbnN0IF9yZWRpcmVjdGJvdW5kYXJ5ID0gcmVxdWlyZShcIi4vcmVkaXJlY3QtYm91bmRhcnlcIik7XG5jb25zdCBfZmluZGhlYWRpbmNhY2hlID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZmluZC1oZWFkLWluLWNhY2hlXCIpO1xuY29uc3QgX2luZmluaXRlcHJvbWlzZSA9IHJlcXVpcmUoXCIuL2luZmluaXRlLXByb21pc2VcIik7XG5jb25zdCBfYXBwcm91dGVyaGVhZGVycyA9IHJlcXVpcmUoXCIuL2FwcC1yb3V0ZXItaGVhZGVyc1wiKTtcbmNvbnN0IF9yZW1vdmViYXNlcGF0aCA9IHJlcXVpcmUoXCIuLi9yZW1vdmUtYmFzZS1wYXRoXCIpO1xuY29uc3QgX2hhc2Jhc2VwYXRoID0gcmVxdWlyZShcIi4uL2hhcy1iYXNlLXBhdGhcIik7XG5jb25zdCBpc1NlcnZlciA9IHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCI7XG4vLyBFbnN1cmUgdGhlIGluaXRpYWxQYXJhbGxlbFJvdXRlcyBhcmUgbm90IGNvbWJpbmVkIGJlY2F1c2Ugb2YgZG91YmxlLXJlbmRlcmluZyBpbiB0aGUgYnJvd3NlciB3aXRoIFN0cmljdCBNb2RlLlxubGV0IGluaXRpYWxQYXJhbGxlbFJvdXRlcyA9IGlzU2VydmVyID8gbnVsbCA6IG5ldyBNYXAoKTtcbmxldCBnbG9iYWxTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyID0gbnVsbDtcbmZ1bmN0aW9uIGdldFNlcnZlckFjdGlvbkRpc3BhdGNoZXIoKSB7XG4gICAgcmV0dXJuIGdsb2JhbFNlcnZlckFjdGlvbkRpc3BhdGNoZXI7XG59XG5jb25zdCBnbG9iYWxNdXRhYmxlID0ge307XG5mdW5jdGlvbiB1cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXIodXJsKSB7XG4gICAgY29uc3QgdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMgPSBuZXcgVVJMKHVybCwgbG9jYXRpb24ub3JpZ2luKTtcbiAgICB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycy5zZWFyY2hQYXJhbXMuZGVsZXRlKF9hcHByb3V0ZXJoZWFkZXJzLk5FWFRfUlNDX1VOSU9OX1FVRVJZKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ09ORklHX09VVFBVVCA9PT0gXCJleHBvcnRcIiAmJiB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycy5wYXRobmFtZS5lbmRzV2l0aChcIi50eHRcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcGF0aG5hbWUgfSA9IHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzO1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gcGF0aG5hbWUuZW5kc1dpdGgoXCIvaW5kZXgudHh0XCIpID8gMTAgOiA0O1xuICAgICAgICAgICAgLy8gU2xpY2Ugb2ZmIGAvaW5kZXgudHh0YCBvciBgLnR4dGAgZnJvbSB0aGUgZW5kIG9mIHRoZSBwYXRobmFtZVxuICAgICAgICAgICAgdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMucGF0aG5hbWUgPSBwYXRobmFtZS5zbGljZSgwLCAtbGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBpc0V4dGVybmFsVVJMKHVybCkge1xuICAgIHJldHVybiB1cmwub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xufVxuZnVuY3Rpb24gSGlzdG9yeVVwZGF0ZXIocGFyYW0pIHtcbiAgICBsZXQgeyBhcHBSb3V0ZXJTdGF0ZSwgc3luYyB9ID0gcGFyYW07XG4gICAgKDAsIF9yZWFjdC51c2VJbnNlcnRpb25FZmZlY3QpKCgpPT57XG4gICAgICAgIGNvbnN0IHsgdHJlZSwgcHVzaFJlZiwgY2Fub25pY2FsVXJsIH0gPSBhcHBSb3V0ZXJTdGF0ZTtcbiAgICAgICAgY29uc3QgaGlzdG9yeVN0YXRlID0ge1xuICAgICAgICAgICAgLi4ucHVzaFJlZi5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSA/IHdpbmRvdy5oaXN0b3J5LnN0YXRlIDoge30sXG4gICAgICAgICAgICAvLyBJZGVudGlmaWVyIGlzIHNob3J0ZW5lZCBpbnRlbnRpb25hbGx5LlxuICAgICAgICAgICAgLy8gX19OQSBpcyB1c2VkIHRvIGlkZW50aWZ5IGlmIHRoZSBoaXN0b3J5IGVudHJ5IGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBhcHAtcm91dGVyLlxuICAgICAgICAgICAgLy8gX19OIGlzIHVzZWQgdG8gaWRlbnRpZnkgaWYgdGhlIGhpc3RvcnkgZW50cnkgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIG9sZCByb3V0ZXIuXG4gICAgICAgICAgICBfX05BOiB0cnVlLFxuICAgICAgICAgICAgX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRTogdHJlZVxuICAgICAgICB9O1xuICAgICAgICBpZiAocHVzaFJlZi5wZW5kaW5nUHVzaCAmJiAvLyBTa2lwIHB1c2hpbmcgYW4gYWRkaXRpb25hbCBoaXN0b3J5IGVudHJ5IGlmIHRoZSBjYW5vbmljYWxVcmwgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgdXJsLlxuICAgICAgICAvLyBUaGlzIG1pcnJvcnMgdGhlIGJyb3dzZXIgYmVoYXZpb3IgZm9yIG5vcm1hbCBuYXZpZ2F0aW9uLlxuICAgICAgICAoMCwgX2NyZWF0ZWhyZWZmcm9tdXJsLmNyZWF0ZUhyZWZGcm9tVXJsKShuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSkgIT09IGNhbm9uaWNhbFVybCkge1xuICAgICAgICAgICAgLy8gVGhpcyBpbnRlbnRpb25hbGx5IG11dGF0ZXMgUmVhY3Qgc3RhdGUsIHB1c2hSZWYgaXMgb3ZlcndyaXR0ZW4gdG8gZW5zdXJlIGFkZGl0aW9uYWwgcHVzaC9yZXBsYWNlIGNhbGxzIGRvIG5vdCB0cmlnZ2VyIGFuIGFkZGl0aW9uYWwgaGlzdG9yeSBlbnRyeS5cbiAgICAgICAgICAgIHB1c2hSZWYucGVuZGluZ1B1c2ggPSBmYWxzZTtcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShoaXN0b3J5U3RhdGUsIFwiXCIsIGNhbm9uaWNhbFVybCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoaGlzdG9yeVN0YXRlLCBcIlwiLCBjYW5vbmljYWxVcmwpO1xuICAgICAgICB9XG4gICAgICAgIHN5bmMoYXBwUm91dGVyU3RhdGUpO1xuICAgIH0sIFtcbiAgICAgICAgYXBwUm91dGVyU3RhdGUsXG4gICAgICAgIHN5bmNcbiAgICBdKTtcbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUVtcHR5Q2FjaGVOb2RlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICByc2M6IG51bGwsXG4gICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpLFxuICAgICAgICBsYXp5RGF0YVJlc29sdmVkOiBmYWxzZVxuICAgIH07XG59XG5mdW5jdGlvbiB1c2VTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyKGRpc3BhdGNoKSB7XG4gICAgY29uc3Qgc2VydmVyQWN0aW9uRGlzcGF0Y2hlciA9ICgwLCBfcmVhY3QudXNlQ2FsbGJhY2spKChhY3Rpb25QYXlsb2FkKT0+e1xuICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAuLi5hY3Rpb25QYXlsb2FkLFxuICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1NFUlZFUl9BQ1RJT05cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9LCBbXG4gICAgICAgIGRpc3BhdGNoXG4gICAgXSk7XG4gICAgZ2xvYmFsU2VydmVyQWN0aW9uRGlzcGF0Y2hlciA9IHNlcnZlckFjdGlvbkRpc3BhdGNoZXI7XG59XG4vKipcbiAqIFNlcnZlciByZXNwb25zZSB0aGF0IG9ubHkgcGF0Y2hlcyB0aGUgY2FjaGUgYW5kIHRyZWUuXG4gKi8gZnVuY3Rpb24gdXNlQ2hhbmdlQnlTZXJ2ZXJSZXNwb25zZShkaXNwYXRjaCkge1xuICAgIHJldHVybiAoMCwgX3JlYWN0LnVzZUNhbGxiYWNrKSgocHJldmlvdXNUcmVlLCBmbGlnaHREYXRhLCBvdmVycmlkZUNhbm9uaWNhbFVybCk9PntcbiAgICAgICAgKDAsIF9yZWFjdC5zdGFydFRyYW5zaXRpb24pKCgpPT57XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fU0VSVkVSX1BBVENILFxuICAgICAgICAgICAgICAgIGZsaWdodERhdGEsXG4gICAgICAgICAgICAgICAgcHJldmlvdXNUcmVlLFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlQ2Fub25pY2FsVXJsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSwgW1xuICAgICAgICBkaXNwYXRjaFxuICAgIF0pO1xufVxuZnVuY3Rpb24gdXNlTmF2aWdhdGUoZGlzcGF0Y2gpIHtcbiAgICByZXR1cm4gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKGhyZWYsIG5hdmlnYXRlVHlwZSwgc2hvdWxkU2Nyb2xsKT0+e1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKCgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKGhyZWYpLCBsb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX05BVklHQVRFLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgaXNFeHRlcm5hbFVybDogaXNFeHRlcm5hbFVSTCh1cmwpLFxuICAgICAgICAgICAgbG9jYXRpb25TZWFyY2g6IGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgICAgIHNob3VsZFNjcm9sbDogc2hvdWxkU2Nyb2xsICE9IG51bGwgPyBzaG91bGRTY3JvbGwgOiB0cnVlLFxuICAgICAgICAgICAgbmF2aWdhdGVUeXBlXG4gICAgICAgIH0pO1xuICAgIH0sIFtcbiAgICAgICAgZGlzcGF0Y2hcbiAgICBdKTtcbn1cbmZ1bmN0aW9uIGNvcHlOZXh0SnNJbnRlcm5hbEhpc3RvcnlTdGF0ZShkYXRhKSB7XG4gICAgaWYgKGRhdGEgPT0gbnVsbCkgZGF0YSA9IHt9O1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnN0YXRlO1xuICAgIGNvbnN0IF9fTkEgPSBjdXJyZW50U3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IGN1cnJlbnRTdGF0ZS5fX05BO1xuICAgIGlmIChfX05BKSB7XG4gICAgICAgIGRhdGEuX19OQSA9IF9fTkE7XG4gICAgfVxuICAgIGNvbnN0IF9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUgPSBjdXJyZW50U3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IGN1cnJlbnRTdGF0ZS5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFO1xuICAgIGlmIChfX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFKSB7XG4gICAgICAgIGRhdGEuX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRSA9IF9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUU7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24gSGVhZChwYXJhbSkge1xuICAgIGxldCB7IGhlYWRDYWNoZU5vZGUgfSA9IHBhcmFtO1xuICAgIC8vIElmIHRoaXMgc2VnbWVudCBoYXMgYSBgcHJlZmV0Y2hIZWFkYCwgaXQncyB0aGUgc3RhdGljYWxseSBwcmVmZXRjaGVkIGRhdGEuXG4gICAgLy8gV2Ugc2hvdWxkIHVzZSB0aGF0IG9uIGluaXRpYWwgcmVuZGVyIGluc3RlYWQgb2YgYGhlYWRgLiBUaGVuIHdlJ2xsIHN3aXRjaFxuICAgIC8vIHRvIGBoZWFkYCB3aGVuIHRoZSBkeW5hbWljIHJlc3BvbnNlIHN0cmVhbXMgaW4uXG4gICAgY29uc3QgaGVhZCA9IGhlYWRDYWNoZU5vZGUgIT09IG51bGwgPyBoZWFkQ2FjaGVOb2RlLmhlYWQgOiBudWxsO1xuICAgIGNvbnN0IHByZWZldGNoSGVhZCA9IGhlYWRDYWNoZU5vZGUgIT09IG51bGwgPyBoZWFkQ2FjaGVOb2RlLnByZWZldGNoSGVhZCA6IG51bGw7XG4gICAgLy8gSWYgbm8gcHJlZmV0Y2ggZGF0YSBpcyBhdmFpbGFibGUsIHRoZW4gd2UgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIGBoZWFkYC5cbiAgICBjb25zdCByZXNvbHZlZFByZWZldGNoUnNjID0gcHJlZmV0Y2hIZWFkICE9PSBudWxsID8gcHJlZmV0Y2hIZWFkIDogaGVhZDtcbiAgICAvLyBXZSB1c2UgYHVzZURlZmVycmVkVmFsdWVgIHRvIGhhbmRsZSBzd2l0Y2hpbmcgYmV0d2VlbiB0aGUgcHJlZmV0Y2hlZCBhbmRcbiAgICAvLyBmaW5hbCB2YWx1ZXMuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgcmV0dXJuZWQgb24gaW5pdGlhbCByZW5kZXIsIHRoZW4gaXRcbiAgICAvLyByZS1yZW5kZXJzIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50LlxuICAgIC8vXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGB1c2VEZWZlcnJlZFZhbHVlYCBpcyBvbmx5XG4gICAgLy8gYXZhaWxhYmxlIGluIHRoZSBleHBlcmltZW50YWwgYnVpbGRzLiBXaGVuIGl0cyBkaXNhYmxlZCwgaXQgd2lsbCBhbHdheXNcbiAgICAvLyByZXR1cm4gYGhlYWRgLlxuICAgIHJldHVybiAoMCwgX3JlYWN0LnVzZURlZmVycmVkVmFsdWUpKGhlYWQsIHJlc29sdmVkUHJlZmV0Y2hSc2MpO1xufVxuLyoqXG4gKiBUaGUgZ2xvYmFsIHJvdXRlciB0aGF0IHdyYXBzIHRoZSBhcHBsaWNhdGlvbiBjb21wb25lbnRzLlxuICovIGZ1bmN0aW9uIFJvdXRlcihwYXJhbSkge1xuICAgIGxldCB7IGJ1aWxkSWQsIGluaXRpYWxIZWFkLCBpbml0aWFsVHJlZSwgaW5pdGlhbENhbm9uaWNhbFVybCwgaW5pdGlhbFNlZWREYXRhLCBhc3NldFByZWZpeCwgbWlzc2luZ1Nsb3RzIH0gPSBwYXJhbTtcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSAoMCwgX3JlYWN0LnVzZU1lbW8pKCgpPT4oMCwgX2NyZWF0ZWluaXRpYWxyb3V0ZXJzdGF0ZS5jcmVhdGVJbml0aWFsUm91dGVyU3RhdGUpKHtcbiAgICAgICAgICAgIGJ1aWxkSWQsXG4gICAgICAgICAgICBpbml0aWFsU2VlZERhdGEsXG4gICAgICAgICAgICBpbml0aWFsQ2Fub25pY2FsVXJsLFxuICAgICAgICAgICAgaW5pdGlhbFRyZWUsXG4gICAgICAgICAgICBpbml0aWFsUGFyYWxsZWxSb3V0ZXMsXG4gICAgICAgICAgICBpc1NlcnZlcixcbiAgICAgICAgICAgIGxvY2F0aW9uOiAhaXNTZXJ2ZXIgPyB3aW5kb3cubG9jYXRpb24gOiBudWxsLFxuICAgICAgICAgICAgaW5pdGlhbEhlYWRcbiAgICAgICAgfSksIFtcbiAgICAgICAgYnVpbGRJZCxcbiAgICAgICAgaW5pdGlhbFNlZWREYXRhLFxuICAgICAgICBpbml0aWFsQ2Fub25pY2FsVXJsLFxuICAgICAgICBpbml0aWFsVHJlZSxcbiAgICAgICAgaW5pdGlhbEhlYWRcbiAgICBdKTtcbiAgICBjb25zdCBbcmVkdWNlclN0YXRlLCBkaXNwYXRjaCwgc3luY10gPSAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlUmVkdWNlcldpdGhSZWR1eERldnRvb2xzKShpbml0aWFsU3RhdGUpO1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICAvLyBFbnN1cmUgaW5pdGlhbFBhcmFsbGVsUm91dGVzIGlzIGNsZWFuZWQgdXAgZnJvbSBtZW1vcnkgb25jZSBpdCdzIHVzZWQuXG4gICAgICAgIGluaXRpYWxQYXJhbGxlbFJvdXRlcyA9IG51bGw7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IHsgY2Fub25pY2FsVXJsIH0gPSAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlVW53cmFwU3RhdGUpKHJlZHVjZXJTdGF0ZSk7XG4gICAgLy8gQWRkIG1lbW9pemVkIHBhdGhuYW1lL3F1ZXJ5IGZvciB1c2VTZWFyY2hQYXJhbXMgYW5kIHVzZVBhdGhuYW1lLlxuICAgIGNvbnN0IHsgc2VhcmNoUGFyYW1zLCBwYXRobmFtZSB9ID0gKDAsIF9yZWFjdC51c2VNZW1vKSgoKT0+e1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGNhbm9uaWNhbFVybCwgdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwiaHR0cDovL25cIiA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdHVybmVkIGludG8gYSByZWFkb25seSBjbGFzcyBpbiBgdXNlU2VhcmNoUGFyYW1zYFxuICAgICAgICAgICAgc2VhcmNoUGFyYW1zOiB1cmwuc2VhcmNoUGFyYW1zLFxuICAgICAgICAgICAgcGF0aG5hbWU6ICgwLCBfaGFzYmFzZXBhdGguaGFzQmFzZVBhdGgpKHVybC5wYXRobmFtZSkgPyAoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKSh1cmwucGF0aG5hbWUpIDogdXJsLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBjYW5vbmljYWxVcmxcbiAgICBdKTtcbiAgICBjb25zdCBjaGFuZ2VCeVNlcnZlclJlc3BvbnNlID0gdXNlQ2hhbmdlQnlTZXJ2ZXJSZXNwb25zZShkaXNwYXRjaCk7XG4gICAgY29uc3QgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZShkaXNwYXRjaCk7XG4gICAgdXNlU2VydmVyQWN0aW9uRGlzcGF0Y2hlcihkaXNwYXRjaCk7XG4gICAgLyoqXG4gICAqIFRoZSBhcHAgcm91dGVyIHRoYXQgaXMgZXhwb3NlZCB0aHJvdWdoIGB1c2VSb3V0ZXJgLiBJdCdzIG9ubHkgY29uY2VybmVkIHdpdGggZGlzcGF0Y2hpbmcgYWN0aW9ucyB0byB0aGUgcmVkdWNlciwgZG9lcyBub3QgaG9sZCBzdGF0ZS5cbiAgICovIGNvbnN0IGFwcFJvdXRlciA9ICgwLCBfcmVhY3QudXNlTWVtbykoKCk9PntcbiAgICAgICAgY29uc3Qgcm91dGVySW5zdGFuY2UgPSB7XG4gICAgICAgICAgICBiYWNrOiAoKT0+d2luZG93Lmhpc3RvcnkuYmFjaygpLFxuICAgICAgICAgICAgZm9yd2FyZDogKCk9PndpbmRvdy5oaXN0b3J5LmZvcndhcmQoKSxcbiAgICAgICAgICAgIHByZWZldGNoOiAoaHJlZiwgb3B0aW9ucyk9PntcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBwcmVmZXRjaCBmb3IgYm90cyBhcyB0aGV5IGRvbid0IG5hdmlnYXRlLlxuICAgICAgICAgICAgICAgIC8vIERvbid0IHByZWZldGNoIGR1cmluZyBkZXZlbG9wbWVudCAoaW1wcm92ZXMgY29tcGlsYXRpb24gcGVyZm9ybWFuY2UpXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBfaXNib3QuaXNCb3QpKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCgoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKShocmVmKSwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgICAgICAgICAgIC8vIEV4dGVybmFsIHVybHMgY2FuJ3QgYmUgcHJlZmV0Y2hlZCBpbiB0aGUgc2FtZSB3YXkuXG4gICAgICAgICAgICAgICAgaWYgKGlzRXh0ZXJuYWxVUkwodXJsKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgICAgICAgICB2YXIgX29wdGlvbnNfa2luZDtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fUFJFRkVUQ0gsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kOiAoX29wdGlvbnNfa2luZCA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMua2luZCkgIT0gbnVsbCA/IF9vcHRpb25zX2tpbmQgOiBfcm91dGVycmVkdWNlcnR5cGVzLlByZWZldGNoS2luZC5GVUxMXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcGxhY2U6IChocmVmLCBvcHRpb25zKT0+e1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9vcHRpb25zX3Njcm9sbDtcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGUoaHJlZiwgXCJyZXBsYWNlXCIsIChfb3B0aW9uc19zY3JvbGwgPSBvcHRpb25zLnNjcm9sbCkgIT0gbnVsbCA/IF9vcHRpb25zX3Njcm9sbCA6IHRydWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHB1c2g6IChocmVmLCBvcHRpb25zKT0+e1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9vcHRpb25zX3Njcm9sbDtcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGUoaHJlZiwgXCJwdXNoXCIsIChfb3B0aW9uc19zY3JvbGwgPSBvcHRpb25zLnNjcm9sbCkgIT0gbnVsbCA/IF9vcHRpb25zX3Njcm9sbCA6IHRydWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlZnJlc2g6ICgpPT57XG4gICAgICAgICAgICAgICAgKDAsIF9yZWFjdC5zdGFydFRyYW5zaXRpb24pKCgpPT57XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1JFRlJFU0gsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSB3ZSBkb24ndCB3YW50IHRvIGV4cG9zZSB0aGlzIG1ldGhvZCBhdCBhbGxcbiAgICAgICAgICAgIGZhc3RSZWZyZXNoOiAoKT0+e1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhc3RSZWZyZXNoIGNhbiBvbmx5IGJlIHVzZWQgaW4gZGV2ZWxvcG1lbnQgbW9kZS4gUGxlYXNlIHVzZSByZWZyZXNoIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX0ZBU1RfUkVGUkVTSCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByb3V0ZXJJbnN0YW5jZTtcbiAgICB9LCBbXG4gICAgICAgIGRpc3BhdGNoLFxuICAgICAgICBuYXZpZ2F0ZVxuICAgIF0pO1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICAvLyBFeGlzdHMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gRG9uJ3QgdXNlIGluIGFwcGxpY2F0aW9uIGNvZGUuXG4gICAgICAgIGlmICh3aW5kb3cubmV4dCkge1xuICAgICAgICAgICAgd2luZG93Lm5leHQucm91dGVyID0gYXBwUm91dGVyO1xuICAgICAgICB9XG4gICAgfSwgW1xuICAgICAgICBhcHBSb3V0ZXJcbiAgICBdKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgICAgICBjb25zdCB7IGNhY2hlLCBwcmVmZXRjaENhY2hlLCB0cmVlIH0gPSAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlVW53cmFwU3RhdGUpKHJlZHVjZXJTdGF0ZSk7XG4gICAgICAgIC8vIFRoaXMgaG9vayBpcyBpbiBhIGNvbmRpdGlvbmFsIGJ1dCB0aGF0IGlzIG9rIGJlY2F1c2UgYHByb2Nlc3MuZW52Lk5PREVfRU5WYCBuZXZlciBjaGFuZ2VzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgICAgICAoMCwgX3JlYWN0LnVzZUVmZmVjdCkoKCk9PntcbiAgICAgICAgICAgIC8vIEFkZCBgd2luZG93Lm5kYCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgbWVhbnQgZm9yIHVzZSBpbiBhcHBsaWNhdGlvbnMgYXMgY29uY3VycmVudCByZW5kZXJpbmcgd2lsbCBhZmZlY3QgdGhlIGNhY2hlL3RyZWUvcm91dGVyLlxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSB0aGlzIGlzIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgICAgIHdpbmRvdy5uZCA9IHtcbiAgICAgICAgICAgICAgICByb3V0ZXI6IGFwcFJvdXRlcixcbiAgICAgICAgICAgICAgICBjYWNoZSxcbiAgICAgICAgICAgICAgICBwcmVmZXRjaENhY2hlLFxuICAgICAgICAgICAgICAgIHRyZWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtcbiAgICAgICAgICAgIGFwcFJvdXRlcixcbiAgICAgICAgICAgIGNhY2hlLFxuICAgICAgICAgICAgcHJlZmV0Y2hDYWNoZSxcbiAgICAgICAgICAgIHRyZWVcbiAgICAgICAgXSk7XG4gICAgfVxuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICAvLyBJZiB0aGUgYXBwIGlzIHJlc3RvcmVkIGZyb20gYmZjYWNoZSwgaXQncyBwb3NzaWJsZSB0aGF0XG4gICAgICAgIC8vIHB1c2hSZWYubXBhTmF2aWdhdGlvbiBpcyB0cnVlLCB3aGljaCB3b3VsZCBtZWFuIHRoYXQgYW55IHJlLXJlbmRlciBvZiB0aGlzIGNvbXBvbmVudFxuICAgICAgICAvLyB3b3VsZCB0cmlnZ2VyIHRoZSBtcGEgbmF2aWdhdGlvbiBsb2dpYyBhZ2FpbiBmcm9tIHRoZSBsaW5lcyBiZWxvdy5cbiAgICAgICAgLy8gVGhpcyB3aWxsIHJlc3RvcmUgdGhlIHJvdXRlciB0byB0aGUgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgYXBwIGlzIHJlc3RvcmVkIGZyb20gYmZjYWNoZS5cbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUGFnZVNob3coZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBfd2luZG93X2hpc3Rvcnlfc3RhdGU7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnBlcnNpc3RlZCB8fCAhKChfd2luZG93X2hpc3Rvcnlfc3RhdGUgPSB3aW5kb3cuaGlzdG9yeS5zdGF0ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3dfaGlzdG9yeV9zdGF0ZS5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9SRVNUT1JFLFxuICAgICAgICAgICAgICAgIHVybDogbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksXG4gICAgICAgICAgICAgICAgdHJlZTogd2luZG93Lmhpc3Rvcnkuc3RhdGUuX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlc2hvd1wiLCBoYW5kbGVQYWdlU2hvdyk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwYWdlc2hvd1wiLCBoYW5kbGVQYWdlU2hvdyk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBkaXNwYXRjaFxuICAgIF0pO1xuICAgIC8vIFdoZW4gbXBhTmF2aWdhdGlvbiBmbGFnIGlzIHNldCBkbyBhIGhhcmQgbmF2aWdhdGlvbiB0byB0aGUgbmV3IHVybC5cbiAgICAvLyBJbmZpbml0ZWx5IHN1c3BlbmQgYmVjYXVzZSB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlcmVuZGVyIGFueSBjaGlsZFxuICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgbmV3IFVSTCBhbmQgYW55IGVudGFuZ2xlZCBzdGF0ZSB1cGRhdGVzIHNob3VsZG4ndFxuICAgIC8vIGNvbW1pdCBlaXRoZXIgKGVnOiB1c2VUcmFuc2l0aW9uIGlzUGVuZGluZyBzaG91bGQgc3RheSB0cnVlIHVudGlsIHRoZSBwYWdlXG4gICAgLy8gdW5sb2FkcykuXG4gICAgLy9cbiAgICAvLyBUaGlzIGlzIGEgc2lkZSBlZmZlY3QgaW4gcmVuZGVyLiBEb24ndCB0cnkgdGhpcyBhdCBob21lLCBraWRzLiBJdCdzXG4gICAgLy8gcHJvYmFibHkgc2FmZSBiZWNhdXNlIHdlIGtub3cgdGhpcyBpcyBhIHNpbmdsZXRvbiBjb21wb25lbnQgYW5kIGl0J3MgbmV2ZXJcbiAgICAvLyBpbiA8T2Zmc2NyZWVuPi4gQXQgbGVhc3QgSSBob3BlIHNvLiAoSXQgd2lsbCBydW4gdHdpY2UgaW4gZGV2IHN0cmljdCBtb2RlLFxuICAgIC8vIGJ1dCB0aGF0J3MuLi4gZmluZT8pXG4gICAgY29uc3QgeyBwdXNoUmVmIH0gPSAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlVW53cmFwU3RhdGUpKHJlZHVjZXJTdGF0ZSk7XG4gICAgaWYgKHB1c2hSZWYubXBhTmF2aWdhdGlvbikge1xuICAgICAgICAvLyBpZiB0aGVyZSdzIGEgcmUtcmVuZGVyLCB3ZSBkb24ndCB3YW50IHRvIHRyaWdnZXIgYW5vdGhlciByZWRpcmVjdCBpZiBvbmUgaXMgYWxyZWFkeSBpbiBmbGlnaHQgdG8gdGhlIHNhbWUgVVJMXG4gICAgICAgIGlmIChnbG9iYWxNdXRhYmxlLnBlbmRpbmdNcGFQYXRoICE9PSBjYW5vbmljYWxVcmwpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uMSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgICAgICAgIGlmIChwdXNoUmVmLnBlbmRpbmdQdXNoKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24xLmFzc2lnbihjYW5vbmljYWxVcmwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjEucmVwbGFjZShjYW5vbmljYWxVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2xvYmFsTXV0YWJsZS5wZW5kaW5nTXBhUGF0aCA9IGNhbm9uaWNhbFVybDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPLUFQUDogU2hvdWxkIHdlIGxpc3RlbiB0byBuYXZpZ2F0ZWVycm9yIGhlcmUgdG8gY2F0Y2ggZmFpbGVkXG4gICAgICAgIC8vIG5hdmlnYXRpb25zIHNvbWVob3c/IEFuZCBzaG91bGQgd2UgY2FsbCB3aW5kb3cuc3RvcCgpIGlmIGEgU1BBIG5hdmlnYXRpb25cbiAgICAgICAgLy8gc2hvdWxkIGludGVycnVwdCBhbiBNUEEgb25lP1xuICAgICAgICAoMCwgX3JlYWN0LnVzZSkoKDAsIF9pbmZpbml0ZXByb21pc2UuY3JlYXRlSW5maW5pdGVQcm9taXNlKSgpKTtcbiAgICB9XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUHVzaFN0YXRlID0gd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlLmJpbmQod2luZG93Lmhpc3RvcnkpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcGxhY2VTdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZS5iaW5kKHdpbmRvdy5oaXN0b3J5KTtcbiAgICAgICAgLy8gRW5zdXJlIHRoZSBjYW5vbmljYWwgVVJMIGluIHRoZSBOZXh0LmpzIFJvdXRlciBpcyB1cGRhdGVkIHdoZW4gdGhlIFVSTCBpcyBjaGFuZ2VkIHNvIHRoYXQgYHVzZVBhdGhuYW1lYCBhbmQgYHVzZVNlYXJjaFBhcmFtc2AgaG9sZCB0aGUgcHVzaGVkIHZhbHVlcy5cbiAgICAgICAgY29uc3QgYXBwbHlVcmxGcm9tSGlzdG9yeVB1c2hSZXBsYWNlID0gKHVybCk9PntcbiAgICAgICAgICAgIHZhciBfd2luZG93X2hpc3Rvcnlfc3RhdGU7XG4gICAgICAgICAgICBjb25zdCBocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICAgICAgICBjb25zdCB0cmVlID0gKF93aW5kb3dfaGlzdG9yeV9zdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnN0YXRlKSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvd19oaXN0b3J5X3N0YXRlLl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUU7XG4gICAgICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1JFU1RPUkUsXG4gICAgICAgICAgICAgICAgICAgIHVybDogbmV3IFVSTCh1cmwgIT0gbnVsbCA/IHVybCA6IGhyZWYsIGhyZWYpLFxuICAgICAgICAgICAgICAgICAgICB0cmVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICogUGF0Y2ggcHVzaFN0YXRlIHRvIGVuc3VyZSBleHRlcm5hbCBjaGFuZ2VzIHRvIHRoZSBoaXN0b3J5IGFyZSByZWZsZWN0ZWQgaW4gdGhlIE5leHQuanMgUm91dGVyLlxuICAgICAqIEVuc3VyZXMgTmV4dC5qcyBpbnRlcm5hbCBoaXN0b3J5IHN0YXRlIGlzIGNvcGllZCB0byB0aGUgbmV3IGhpc3RvcnkgZW50cnkuXG4gICAgICogRW5zdXJlcyB1c2VQYXRobmFtZSBhbmQgdXNlU2VhcmNoUGFyYW1zIGhvbGQgdGhlIG5ld2x5IHByb3ZpZGVkIHVybC5cbiAgICAgKi8gd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlID0gZnVuY3Rpb24gcHVzaFN0YXRlKGRhdGEsIF91bnVzZWQsIHVybCkge1xuICAgICAgICAgICAgLy8gQXZvaWQgYSBsb29wIHdoZW4gTmV4dC5qcyBpbnRlcm5hbHMgdHJpZ2dlciBwdXNoU3RhdGUvcmVwbGFjZVN0YXRlXG4gICAgICAgICAgICBpZiAoKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuX19OQSkgfHwgKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuX04pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUHVzaFN0YXRlKGRhdGEsIF91bnVzZWQsIHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gY29weU5leHRKc0ludGVybmFsSGlzdG9yeVN0YXRlKGRhdGEpO1xuICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgIGFwcGx5VXJsRnJvbUhpc3RvcnlQdXNoUmVwbGFjZSh1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUHVzaFN0YXRlKGRhdGEsIF91bnVzZWQsIHVybCk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAqIFBhdGNoIHJlcGxhY2VTdGF0ZSB0byBlbnN1cmUgZXh0ZXJuYWwgY2hhbmdlcyB0byB0aGUgaGlzdG9yeSBhcmUgcmVmbGVjdGVkIGluIHRoZSBOZXh0LmpzIFJvdXRlci5cbiAgICAgKiBFbnN1cmVzIE5leHQuanMgaW50ZXJuYWwgaGlzdG9yeSBzdGF0ZSBpcyBjb3BpZWQgdG8gdGhlIG5ldyBoaXN0b3J5IGVudHJ5LlxuICAgICAqIEVuc3VyZXMgdXNlUGF0aG5hbWUgYW5kIHVzZVNlYXJjaFBhcmFtcyBob2xkIHRoZSBuZXdseSBwcm92aWRlZCB1cmwuXG4gICAgICovIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSA9IGZ1bmN0aW9uIHJlcGxhY2VTdGF0ZShkYXRhLCBfdW51c2VkLCB1cmwpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkIGEgbG9vcCB3aGVuIE5leHQuanMgaW50ZXJuYWxzIHRyaWdnZXIgcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZVxuICAgICAgICAgICAgaWYgKChkYXRhID09IG51bGwgPyB2b2lkIDAgOiBkYXRhLl9fTkEpIHx8IChkYXRhID09IG51bGwgPyB2b2lkIDAgOiBkYXRhLl9OKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFJlcGxhY2VTdGF0ZShkYXRhLCBfdW51c2VkLCB1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YSA9IGNvcHlOZXh0SnNJbnRlcm5hbEhpc3RvcnlTdGF0ZShkYXRhKTtcbiAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgICBhcHBseVVybEZyb21IaXN0b3J5UHVzaFJlcGxhY2UodXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFJlcGxhY2VTdGF0ZShkYXRhLCBfdW51c2VkLCB1cmwpO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgKiBIYW5kbGUgcG9wc3RhdGUgZXZlbnQsIHRoaXMgaXMgdXNlZCB0byBoYW5kbGUgYmFjay9mb3J3YXJkIGluIHRoZSBicm93c2VyLlxuICAgICAqIEJ5IGRlZmF1bHQgZGlzcGF0Y2hlcyBBQ1RJT05fUkVTVE9SRSwgaG93ZXZlciBpZiB0aGUgaGlzdG9yeSBlbnRyeSB3YXMgbm90IHB1c2hlZC9yZXBsYWNlZCBieSBhcHAtcm91dGVyIGl0IHdpbGwgcmVsb2FkIHRoZSBwYWdlLlxuICAgICAqIFRoYXQgY2FzZSBjYW4gaGFwcGVuIHdoZW4gdGhlIG9sZCByb3V0ZXIgaW5qZWN0ZWQgdGhlIGhpc3RvcnkgZW50cnkuXG4gICAgICovIGNvbnN0IG9uUG9wU3RhdGUgPSAocGFyYW0pPT57XG4gICAgICAgICAgICBsZXQgeyBzdGF0ZSB9ID0gcGFyYW07XG4gICAgICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETy1BUFA6IHRoaXMgY2FzZSBvbmx5IGhhcHBlbnMgd2hlbiBwdXNoU3RhdGUvcmVwbGFjZVN0YXRlIHdhcyBjYWxsZWQgb3V0c2lkZSBvZiBOZXh0LmpzLiBJdCBzaG91bGQgcHJvYmFibHkgcmVsb2FkIHRoZSBwYWdlIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGlzIGNhc2UgaGFwcGVucyB3aGVuIHRoZSBoaXN0b3J5IGVudHJ5IHdhcyBwdXNoZWQgYnkgdGhlIGBwYWdlc2Agcm91dGVyLlxuICAgICAgICAgICAgaWYgKCFzdGF0ZS5fX05BKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRPRE8tQVBQOiBJZGVhbGx5IHRoZSBiYWNrIGJ1dHRvbiBzaG91bGQgbm90IHVzZSBzdGFydFRyYW5zaXRpb24gYXMgaXQgc2hvdWxkIGFwcGx5IHRoZSB1cGRhdGVzIHN5bmNocm9ub3VzbHlcbiAgICAgICAgICAgIC8vIFdpdGhvdXQgc3RhcnRUcmFuc2l0aW9uIHdvcmtzIGlmIHRoZSBjYWNoZSBpcyB0aGVyZSBmb3IgdGhpcyBwYXRoXG4gICAgICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1JFU1RPUkUsXG4gICAgICAgICAgICAgICAgICAgIHVybDogbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksXG4gICAgICAgICAgICAgICAgICAgIHRyZWU6IHN0YXRlLl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBSZWdpc3RlciBwb3BzdGF0ZSBldmVudCB0byBjYWxsIG9uUG9wc3RhdGUuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgb25Qb3BTdGF0ZSk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlID0gb3JpZ2luYWxQdXNoU3RhdGU7XG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUgPSBvcmlnaW5hbFJlcGxhY2VTdGF0ZTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgb25Qb3BTdGF0ZSk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBkaXNwYXRjaFxuICAgIF0pO1xuICAgIGNvbnN0IHsgY2FjaGUsIHRyZWUsIG5leHRVcmwsIGZvY3VzQW5kU2Nyb2xsUmVmIH0gPSAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlVW53cmFwU3RhdGUpKHJlZHVjZXJTdGF0ZSk7XG4gICAgY29uc3QgbWF0Y2hpbmdIZWFkID0gKDAsIF9yZWFjdC51c2VNZW1vKSgoKT0+e1xuICAgICAgICByZXR1cm4gKDAsIF9maW5kaGVhZGluY2FjaGUuZmluZEhlYWRJbkNhY2hlKShjYWNoZSwgdHJlZVsxXSk7XG4gICAgfSwgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAgdHJlZVxuICAgIF0pO1xuICAgIGxldCBoZWFkO1xuICAgIGlmIChtYXRjaGluZ0hlYWQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhlIGhlYWQgaXMgd3JhcHBlZCBpbiBhbiBleHRyYSBjb21wb25lbnQgc28gd2UgY2FuIHVzZVxuICAgICAgICAvLyBgdXNlRGVmZXJyZWRWYWx1ZWAgdG8gc3dhcCBiZXR3ZWVuIHRoZSBwcmVmZXRjaGVkIGFuZCBmaW5hbCB2ZXJzaW9ucyBvZlxuICAgICAgICAvLyB0aGUgaGVhZC4gKFRoaXMgaXMgd2hhdCBMYXlvdXRSb3V0ZXIgZG9lcyBmb3Igc2VnbWVudCBkYXRhLCB0b28uKVxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgYGtleWAgaXMgdXNlZCB0byByZW1vdW50IHRoZSBjb21wb25lbnQgd2hlbmV2ZXIgdGhlIGhlYWQgbW92ZXMgdG9cbiAgICAgICAgLy8gYSBkaWZmZXJlbnQgc2VnbWVudC5cbiAgICAgICAgY29uc3QgW2hlYWRDYWNoZU5vZGUsIGhlYWRLZXldID0gbWF0Y2hpbmdIZWFkO1xuICAgICAgICBoZWFkID0gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShIZWFkLCB7XG4gICAgICAgICAgICBoZWFkQ2FjaGVOb2RlOiBoZWFkQ2FjaGVOb2RlXG4gICAgICAgIH0sIGhlYWRLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWQgPSBudWxsO1xuICAgIH1cbiAgICBsZXQgY29udGVudCA9IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9yZWRpcmVjdGJvdW5kYXJ5LlJlZGlyZWN0Qm91bmRhcnksIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIGhlYWQsXG4gICAgICAgICAgICBjYWNoZS5yc2MsXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9hcHByb3V0ZXJhbm5vdW5jZXIuQXBwUm91dGVyQW5ub3VuY2VyLCB7XG4gICAgICAgICAgICAgICAgdHJlZTogdHJlZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IERldlJvb3ROb3RGb3VuZEJvdW5kYXJ5ID0gcmVxdWlyZShcIi4vZGV2LXJvb3Qtbm90LWZvdW5kLWJvdW5kYXJ5XCIpLkRldlJvb3ROb3RGb3VuZEJvdW5kYXJ5O1xuICAgICAgICAgICAgY29udGVudCA9IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoRGV2Um9vdE5vdEZvdW5kQm91bmRhcnksIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuTWlzc2luZ1Nsb3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtaXNzaW5nU2xvdHMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjb250ZW50XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEhvdFJlbG9hZGVyID0gcmVxdWlyZShcIi4vcmVhY3QtZGV2LW92ZXJsYXkvaG90LXJlbG9hZGVyLWNsaWVudFwiKS5kZWZhdWx0O1xuICAgICAgICBjb250ZW50ID0gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShIb3RSZWxvYWRlciwge1xuICAgICAgICAgICAgYXNzZXRQcmVmaXg6IGFzc2V0UHJlZml4LFxuICAgICAgICAgICAgY2hpbGRyZW46IGNvbnRlbnRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShIaXN0b3J5VXBkYXRlciwge1xuICAgICAgICAgICAgICAgIGFwcFJvdXRlclN0YXRlOiAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlVW53cmFwU3RhdGUpKHJlZHVjZXJTdGF0ZSksXG4gICAgICAgICAgICAgICAgc3luYzogc3luY1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9ob29rc2NsaWVudGNvbnRleHRzaGFyZWRydW50aW1lLlBhdGhuYW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBwYXRobmFtZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfaG9va3NjbGllbnRjb250ZXh0c2hhcmVkcnVudGltZS5TZWFyY2hQYXJhbXNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5HbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuQXBwUm91dGVyQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhcHBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lLkxheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZXM6IGNhY2hlLnBhcmFsbGVsUm91dGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJvb3Qgbm9kZSBhbHdheXMgaGFzIGB1cmxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm92aWRlZCBpbiBBcHBUcmVlQ29udGV4dCB0byBlbnN1cmUgaXQgY2FuIGJlIG92ZXJ3cml0dGVuIGluIGxheW91dC1yb3V0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogY2Fub25pY2FsVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIEFwcFJvdXRlcihwcm9wcykge1xuICAgIGNvbnN0IHsgZ2xvYmFsRXJyb3JDb21wb25lbnQsIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9lcnJvcmJvdW5kYXJ5LkVycm9yQm91bmRhcnksIHtcbiAgICAgICAgZXJyb3JDb21wb25lbnQ6IGdsb2JhbEVycm9yQ29tcG9uZW50LFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShSb3V0ZXIsIHtcbiAgICAgICAgICAgIC4uLnJlc3RcbiAgICAgICAgfSlcbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXJvdXRlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJnZXRTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyIiwidXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyIiwiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJkZWZhdWx0IiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQXBwUm91dGVyIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfcm91dGVycmVkdWNlcnR5cGVzIiwiX2NyZWF0ZWhyZWZmcm9tdXJsIiwiX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfdXNlcmVkdWNlcndpdGhkZXZ0b29scyIsIl9lcnJvcmJvdW5kYXJ5IiwiX2NyZWF0ZWluaXRpYWxyb3V0ZXJzdGF0ZSIsIl9pc2JvdCIsIl9hZGRiYXNlcGF0aCIsIl9hcHByb3V0ZXJhbm5vdW5jZXIiLCJfcmVkaXJlY3Rib3VuZGFyeSIsIl9maW5kaGVhZGluY2FjaGUiLCJfaW5maW5pdGVwcm9taXNlIiwiX2FwcHJvdXRlcmhlYWRlcnMiLCJfcmVtb3ZlYmFzZXBhdGgiLCJfaGFzYmFzZXBhdGgiLCJpc1NlcnZlciIsImluaXRpYWxQYXJhbGxlbFJvdXRlcyIsIk1hcCIsImdsb2JhbFNlcnZlckFjdGlvbkRpc3BhdGNoZXIiLCJnbG9iYWxNdXRhYmxlIiwidXJsIiwidXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMiLCJVUkwiLCJsb2NhdGlvbiIsIm9yaWdpbiIsInNlYXJjaFBhcmFtcyIsImRlbGV0ZSIsIk5FWFRfUlNDX1VOSU9OX1FVRVJZIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9DT05GSUdfT1VUUFVUIiwicGF0aG5hbWUiLCJlbmRzV2l0aCIsImxlbmd0aCIsInNsaWNlIiwiaXNFeHRlcm5hbFVSTCIsIndpbmRvdyIsIkhpc3RvcnlVcGRhdGVyIiwicGFyYW0iLCJhcHBSb3V0ZXJTdGF0ZSIsInN5bmMiLCJ1c2VJbnNlcnRpb25FZmZlY3QiLCJ0cmVlIiwicHVzaFJlZiIsImNhbm9uaWNhbFVybCIsImhpc3RvcnlTdGF0ZSIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiaGlzdG9yeSIsInN0YXRlIiwiX19OQSIsIl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUiLCJwZW5kaW5nUHVzaCIsImNyZWF0ZUhyZWZGcm9tVXJsIiwiaHJlZiIsInB1c2hTdGF0ZSIsInJlcGxhY2VTdGF0ZSIsImxhenlEYXRhIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJwYXJhbGxlbFJvdXRlcyIsImxhenlEYXRhUmVzb2x2ZWQiLCJ1c2VTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyIiwiZGlzcGF0Y2giLCJzZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyIiwidXNlQ2FsbGJhY2siLCJhY3Rpb25QYXlsb2FkIiwic3RhcnRUcmFuc2l0aW9uIiwidHlwZSIsIkFDVElPTl9TRVJWRVJfQUNUSU9OIiwidXNlQ2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSIsInByZXZpb3VzVHJlZSIsImZsaWdodERhdGEiLCJvdmVycmlkZUNhbm9uaWNhbFVybCIsIkFDVElPTl9TRVJWRVJfUEFUQ0giLCJ1c2VOYXZpZ2F0ZSIsIm5hdmlnYXRlVHlwZSIsInNob3VsZFNjcm9sbCIsImFkZEJhc2VQYXRoIiwiQUNUSU9OX05BVklHQVRFIiwiaXNFeHRlcm5hbFVybCIsImxvY2F0aW9uU2VhcmNoIiwic2VhcmNoIiwiY29weU5leHRKc0ludGVybmFsSGlzdG9yeVN0YXRlIiwiZGF0YSIsImN1cnJlbnRTdGF0ZSIsIkhlYWQiLCJoZWFkQ2FjaGVOb2RlIiwiaGVhZCIsInByZWZldGNoSGVhZCIsInJlc29sdmVkUHJlZmV0Y2hSc2MiLCJ1c2VEZWZlcnJlZFZhbHVlIiwiUm91dGVyIiwiYnVpbGRJZCIsImluaXRpYWxIZWFkIiwiaW5pdGlhbFRyZWUiLCJpbml0aWFsQ2Fub25pY2FsVXJsIiwiaW5pdGlhbFNlZWREYXRhIiwiYXNzZXRQcmVmaXgiLCJtaXNzaW5nU2xvdHMiLCJpbml0aWFsU3RhdGUiLCJ1c2VNZW1vIiwiY3JlYXRlSW5pdGlhbFJvdXRlclN0YXRlIiwicmVkdWNlclN0YXRlIiwidXNlUmVkdWNlcldpdGhSZWR1eERldnRvb2xzIiwidXNlRWZmZWN0IiwidXNlVW53cmFwU3RhdGUiLCJoYXNCYXNlUGF0aCIsInJlbW92ZUJhc2VQYXRoIiwiY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSIsIm5hdmlnYXRlIiwiYXBwUm91dGVyIiwicm91dGVySW5zdGFuY2UiLCJiYWNrIiwiZm9yd2FyZCIsInByZWZldGNoIiwib3B0aW9ucyIsImlzQm90IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiX29wdGlvbnNfa2luZCIsIkFDVElPTl9QUkVGRVRDSCIsImtpbmQiLCJQcmVmZXRjaEtpbmQiLCJGVUxMIiwicmVwbGFjZSIsIl9vcHRpb25zX3Njcm9sbCIsInNjcm9sbCIsInB1c2giLCJyZWZyZXNoIiwiQUNUSU9OX1JFRlJFU0giLCJmYXN0UmVmcmVzaCIsIkVycm9yIiwiQUNUSU9OX0ZBU1RfUkVGUkVTSCIsIm5leHQiLCJyb3V0ZXIiLCJjYWNoZSIsInByZWZldGNoQ2FjaGUiLCJuZCIsImhhbmRsZVBhZ2VTaG93IiwiZXZlbnQiLCJfd2luZG93X2hpc3Rvcnlfc3RhdGUiLCJwZXJzaXN0ZWQiLCJBQ1RJT05fUkVTVE9SRSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibXBhTmF2aWdhdGlvbiIsInBlbmRpbmdNcGFQYXRoIiwibG9jYXRpb24xIiwiYXNzaWduIiwidXNlIiwiY3JlYXRlSW5maW5pdGVQcm9taXNlIiwib3JpZ2luYWxQdXNoU3RhdGUiLCJiaW5kIiwib3JpZ2luYWxSZXBsYWNlU3RhdGUiLCJhcHBseVVybEZyb21IaXN0b3J5UHVzaFJlcGxhY2UiLCJfdW51c2VkIiwiX04iLCJvblBvcFN0YXRlIiwicmVsb2FkIiwibmV4dFVybCIsImZvY3VzQW5kU2Nyb2xsUmVmIiwibWF0Y2hpbmdIZWFkIiwiZmluZEhlYWRJbkNhY2hlIiwiaGVhZEtleSIsImpzeCIsImNvbnRlbnQiLCJqc3hzIiwiUmVkaXJlY3RCb3VuZGFyeSIsImNoaWxkcmVuIiwiQXBwUm91dGVyQW5ub3VuY2VyIiwiRGV2Um9vdE5vdEZvdW5kQm91bmRhcnkiLCJNaXNzaW5nU2xvdENvbnRleHQiLCJQcm92aWRlciIsIkhvdFJlbG9hZGVyIiwiRnJhZ21lbnQiLCJQYXRobmFtZUNvbnRleHQiLCJTZWFyY2hQYXJhbXNDb250ZXh0IiwiR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCIsIkFwcFJvdXRlckNvbnRleHQiLCJMYXlvdXRSb3V0ZXJDb250ZXh0IiwiY2hpbGROb2RlcyIsInByb3BzIiwiZ2xvYmFsRXJyb3JDb21wb25lbnQiLCJyZXN0IiwiRXJyb3JCb3VuZGFyeSIsImVycm9yQ29tcG9uZW50IiwiX19lc01vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/app-router.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/bailout-to-client-rendering.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/bailout-to-client-rendering.js ***! + \*********************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"bailoutToClientRendering\", ({\n enumerable: true,\n get: function() {\n return bailoutToClientRendering;\n }\n}));\nconst _bailouttocsr = __webpack_require__(/*! ../../shared/lib/lazy-dynamic/bailout-to-csr */ \"(ssr)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nconst _staticgenerationasyncstorageexternal = __webpack_require__(/*! ./static-generation-async-storage.external */ \"./static-generation-async-storage.external\");\nfunction bailoutToClientRendering(reason) {\n const staticGenerationStore = _staticgenerationasyncstorageexternal.staticGenerationAsyncStorage.getStore();\n if (staticGenerationStore == null ? void 0 : staticGenerationStore.forceStatic) return;\n if (staticGenerationStore == null ? void 0 : staticGenerationStore.isStaticGeneration) throw new _bailouttocsr.BailoutToCSRError(reason);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=bailout-to-client-rendering.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2JhaWxvdXQtdG8tY2xpZW50LXJlbmRlcmluZy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsNERBQTJEO0lBQ3ZESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsZ0JBQWdCQyxtQkFBT0EsQ0FBQyw4SEFBOEM7QUFDNUUsTUFBTUMsd0NBQXdDRCxtQkFBT0EsQ0FBQyw4RkFBNEM7QUFDbEcsU0FBU0YseUJBQXlCSSxNQUFNO0lBQ3BDLE1BQU1DLHdCQUF3QkYsc0NBQXNDRyw0QkFBNEIsQ0FBQ0MsUUFBUTtJQUN6RyxJQUFJRix5QkFBeUIsT0FBTyxLQUFLLElBQUlBLHNCQUFzQkcsV0FBVyxFQUFFO0lBQ2hGLElBQUlILHlCQUF5QixPQUFPLEtBQUssSUFBSUEsc0JBQXNCSSxrQkFBa0IsRUFBRSxNQUFNLElBQUlSLGNBQWNTLGlCQUFpQixDQUFDTjtBQUNySTtBQUVBLElBQUksQ0FBQyxPQUFPUixRQUFRZSxPQUFPLEtBQUssY0FBZSxPQUFPZixRQUFRZSxPQUFPLEtBQUssWUFBWWYsUUFBUWUsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPZixRQUFRZSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLbEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRZSxPQUFPLEVBQUUsY0FBYztRQUFFZCxPQUFPO0lBQUs7SUFDbkVILE9BQU9tQixNQUFNLENBQUNqQixRQUFRZSxPQUFPLEVBQUVmO0lBQy9Ca0IsT0FBT2xCLE9BQU8sR0FBR0EsUUFBUWUsT0FBTztBQUNsQyxFQUVBLHVEQUF1RCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2JhaWxvdXQtdG8tY2xpZW50LXJlbmRlcmluZy5qcz9iMTc3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmFpbG91dFRvQ2xpZW50UmVuZGVyaW5nXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBiYWlsb3V0VG9DbGllbnRSZW5kZXJpbmc7XG4gICAgfVxufSk7XG5jb25zdCBfYmFpbG91dHRvY3NyID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvbGF6eS1keW5hbWljL2JhaWxvdXQtdG8tY3NyXCIpO1xuY29uc3QgX3N0YXRpY2dlbmVyYXRpb25hc3luY3N0b3JhZ2VleHRlcm5hbCA9IHJlcXVpcmUoXCIuL3N0YXRpYy1nZW5lcmF0aW9uLWFzeW5jLXN0b3JhZ2UuZXh0ZXJuYWxcIik7XG5mdW5jdGlvbiBiYWlsb3V0VG9DbGllbnRSZW5kZXJpbmcocmVhc29uKSB7XG4gICAgY29uc3Qgc3RhdGljR2VuZXJhdGlvblN0b3JlID0gX3N0YXRpY2dlbmVyYXRpb25hc3luY3N0b3JhZ2VleHRlcm5hbC5zdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgaWYgKHN0YXRpY0dlbmVyYXRpb25TdG9yZSA9PSBudWxsID8gdm9pZCAwIDogc3RhdGljR2VuZXJhdGlvblN0b3JlLmZvcmNlU3RhdGljKSByZXR1cm47XG4gICAgaWYgKHN0YXRpY0dlbmVyYXRpb25TdG9yZSA9PSBudWxsID8gdm9pZCAwIDogc3RhdGljR2VuZXJhdGlvblN0b3JlLmlzU3RhdGljR2VuZXJhdGlvbikgdGhyb3cgbmV3IF9iYWlsb3V0dG9jc3IuQmFpbG91dFRvQ1NSRXJyb3IocmVhc29uKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFpbG91dC10by1jbGllbnQtcmVuZGVyaW5nLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJiYWlsb3V0VG9DbGllbnRSZW5kZXJpbmciLCJfYmFpbG91dHRvY3NyIiwicmVxdWlyZSIsIl9zdGF0aWNnZW5lcmF0aW9uYXN5bmNzdG9yYWdlZXh0ZXJuYWwiLCJyZWFzb24iLCJzdGF0aWNHZW5lcmF0aW9uU3RvcmUiLCJzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlIiwiZ2V0U3RvcmUiLCJmb3JjZVN0YXRpYyIsImlzU3RhdGljR2VuZXJhdGlvbiIsIkJhaWxvdXRUb0NTUkVycm9yIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/bailout-to-client-rendering.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/client-hook-in-server-component-error.js": +/*!*******************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/client-hook-in-server-component-error.js ***! + \*******************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"clientHookInServerComponentError\", ({\n enumerable: true,\n get: function() {\n return clientHookInServerComponentError;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nfunction clientHookInServerComponentError(hookName) {\n if (true) {\n // If useState is undefined we're in a server component\n if (!_react.default.useState) {\n throw new Error(\"\" + hookName + ' only works in Client Components. Add the \"use client\" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/react-client-hook-in-server-component');\n }\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=client-hook-in-server-component-error.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2NsaWVudC1ob29rLWluLXNlcnZlci1jb21wb25lbnQtZXJyb3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILG9FQUFtRTtJQUMvREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsa0hBQXlDO0FBQ2xGLE1BQU1DLFNBQVMsV0FBVyxHQUFHRix5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsd0dBQU87QUFDdkUsU0FBU0YsaUNBQWlDSyxRQUFRO0lBQzlDLElBQUlDLElBQXFDLEVBQUU7UUFDdkMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQ0gsT0FBT0ksT0FBTyxDQUFDQyxRQUFRLEVBQUU7WUFDMUIsTUFBTSxJQUFJQyxNQUFNLEtBQUtKLFdBQVc7UUFDcEM7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9ULFFBQVFXLE9BQU8sS0FBSyxjQUFlLE9BQU9YLFFBQVFXLE9BQU8sS0FBSyxZQUFZWCxRQUFRVyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9YLFFBQVFXLE9BQU8sQ0FBQ0csVUFBVSxLQUFLLGFBQWE7SUFDcktoQixPQUFPQyxjQUFjLENBQUNDLFFBQVFXLE9BQU8sRUFBRSxjQUFjO1FBQUVWLE9BQU87SUFBSztJQUNuRUgsT0FBT2lCLE1BQU0sQ0FBQ2YsUUFBUVcsT0FBTyxFQUFFWDtJQUMvQmdCLE9BQU9oQixPQUFPLEdBQUdBLFFBQVFXLE9BQU87QUFDbEMsRUFFQSxpRUFBaUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9jbGllbnQtaG9vay1pbi1zZXJ2ZXItY29tcG9uZW50LWVycm9yLmpzPzNkYWEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjbGllbnRIb29rSW5TZXJ2ZXJDb21wb25lbnRFcnJvclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY2xpZW50SG9va0luU2VydmVyQ29tcG9uZW50RXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuZnVuY3Rpb24gY2xpZW50SG9va0luU2VydmVyQ29tcG9uZW50RXJyb3IoaG9va05hbWUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIC8vIElmIHVzZVN0YXRlIGlzIHVuZGVmaW5lZCB3ZSdyZSBpbiBhIHNlcnZlciBjb21wb25lbnRcbiAgICAgICAgaWYgKCFfcmVhY3QuZGVmYXVsdC51c2VTdGF0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXCIgKyBob29rTmFtZSArICcgb25seSB3b3JrcyBpbiBDbGllbnQgQ29tcG9uZW50cy4gQWRkIHRoZSBcInVzZSBjbGllbnRcIiBkaXJlY3RpdmUgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSB0byB1c2UgaXQuIFJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvcmVhY3QtY2xpZW50LWhvb2staW4tc2VydmVyLWNvbXBvbmVudCcpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jbGllbnQtaG9vay1pbi1zZXJ2ZXItY29tcG9uZW50LWVycm9yLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJjbGllbnRIb29rSW5TZXJ2ZXJDb21wb25lbnRFcnJvciIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfcmVhY3QiLCJfIiwiaG9va05hbWUiLCJwcm9jZXNzIiwiZGVmYXVsdCIsInVzZVN0YXRlIiwiRXJyb3IiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/client-hook-in-server-component-error.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/error-boundary.js": +/*!********************************************************************!*\ + !*** ./node_modules/next/dist/client/components/error-boundary.js ***! + \********************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ErrorBoundaryHandler: function() {\n return ErrorBoundaryHandler;\n },\n GlobalError: function() {\n return GlobalError;\n },\n // Exported so that the import signature in the loaders can be identical to user\n // supplied custom global error signatures.\n default: function() {\n return _default;\n },\n ErrorBoundary: function() {\n return ErrorBoundary;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _navigation = __webpack_require__(/*! ./navigation */ \"(ssr)/./node_modules/next/dist/client/components/navigation.js\");\nconst _isnextroutererror = __webpack_require__(/*! ./is-next-router-error */ \"(ssr)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: \"100vh\",\n textAlign: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n text: {\n fontSize: \"14px\",\n fontWeight: 400,\n lineHeight: \"28px\",\n margin: \"0 8px\"\n }\n};\n// if we are revalidating we want to re-throw the error so the\n// function crashes so we can maintain our previous cache\n// instead of caching the error page\nfunction HandleISRError(param) {\n let { error } = param;\n if (typeof fetch.__nextGetStaticStore === \"function\") {\n var _fetch___nextGetStaticStore;\n const store = (_fetch___nextGetStaticStore = fetch.__nextGetStaticStore()) == null ? void 0 : _fetch___nextGetStaticStore.getStore();\n if ((store == null ? void 0 : store.isRevalidate) || (store == null ? void 0 : store.isStaticGeneration)) {\n console.error(error);\n throw error;\n }\n }\n return null;\n}\nclass ErrorBoundaryHandler extends _react.default.Component {\n static getDerivedStateFromError(error) {\n if ((0, _isnextroutererror.isNextRouterError)(error)) {\n // Re-throw if an expected internal Next.js router error occurs\n // this means it should be handled by a different boundary (such as a NotFound boundary in a parent segment)\n throw error;\n }\n return {\n error\n };\n }\n static getDerivedStateFromProps(props, state) {\n /**\n * Handles reset of the error boundary when a navigation happens.\n * Ensures the error boundary does not stay enabled when navigating to a new page.\n * Approach of setState in render is safe as it checks the previous pathname and then overrides\n * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */ if (props.pathname !== state.previousPathname && state.error) {\n return {\n error: null,\n previousPathname: props.pathname\n };\n }\n return {\n error: state.error,\n previousPathname: props.pathname\n };\n }\n render() {\n if (this.state.error) {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(HandleISRError, {\n error: this.state.error\n }),\n this.props.errorStyles,\n this.props.errorScripts,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(this.props.errorComponent, {\n error: this.state.error,\n reset: this.reset\n })\n ]\n });\n }\n return this.props.children;\n }\n constructor(props){\n super(props);\n this.reset = ()=>{\n this.setState({\n error: null\n });\n };\n this.state = {\n error: null,\n previousPathname: this.props.pathname\n };\n }\n}\nfunction GlobalError(param) {\n let { error } = param;\n const digest = error == null ? void 0 : error.digest;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"html\", {\n id: \"__next_error__\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"head\", {}),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"body\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(HandleISRError, {\n error: error\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.error,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n style: styles.text,\n children: \"Application error: a \" + (digest ? \"server\" : \"client\") + \"-side exception has occurred (see the \" + (digest ? \"server logs\" : \"browser console\") + \" for more information).\"\n }),\n digest ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n style: styles.text,\n children: \"Digest: \" + digest\n }) : null\n ]\n })\n })\n ]\n })\n ]\n });\n}\nconst _default = GlobalError;\nfunction ErrorBoundary(param) {\n let { errorComponent, errorStyles, errorScripts, children } = param;\n const pathname = (0, _navigation.usePathname)();\n if (errorComponent) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorBoundaryHandler, {\n pathname: pathname,\n errorComponent: errorComponent,\n errorStyles: errorStyles,\n errorScripts: errorScripts,\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=error-boundary.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5LmpzIiwibWFwcGluZ3MiOiJxREFFYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUtOO0FBQ0EsU0FBU0ssUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVgsT0FBT0MsY0FBYyxDQUFDUyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFQLFNBQVM7SUFDYkcsc0JBQXNCO1FBQ2xCLE9BQU9BO0lBQ1g7SUFDQUMsYUFBYTtRQUNULE9BQU9BO0lBQ1g7SUFDQSxnRkFBZ0Y7SUFDaEYsMkNBQTJDO0lBQzNDQyxTQUFTO1FBQ0wsT0FBT1E7SUFDWDtJQUNBUCxlQUFlO1FBQ1gsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTVEsMkJBQTJCQyxtQkFBT0EsQ0FBQyxrSEFBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDdkUsTUFBTUksY0FBY0osbUJBQU9BLENBQUMsb0ZBQWM7QUFDMUMsTUFBTUsscUJBQXFCTCxtQkFBT0EsQ0FBQyx3R0FBd0I7QUFDM0QsTUFBTU0sU0FBUztJQUNYQyxPQUFPO1FBQ0gsMEZBQTBGO1FBQzFGQyxZQUFZO1FBQ1pDLFFBQVE7UUFDUkMsV0FBVztRQUNYQyxTQUFTO1FBQ1RDLGVBQWU7UUFDZkMsWUFBWTtRQUNaQyxnQkFBZ0I7SUFDcEI7SUFDQUMsTUFBTTtRQUNGQyxVQUFVO1FBQ1ZDLFlBQVk7UUFDWkMsWUFBWTtRQUNaQyxRQUFRO0lBQ1o7QUFDSjtBQUNBLDhEQUE4RDtBQUM5RCx5REFBeUQ7QUFDekQsb0NBQW9DO0FBQ3BDLFNBQVNDLGVBQWVDLEtBQUs7SUFDekIsSUFBSSxFQUFFZCxLQUFLLEVBQUUsR0FBR2M7SUFDaEIsSUFBSSxPQUFPQyxNQUFNQyxvQkFBb0IsS0FBSyxZQUFZO1FBQ2xELElBQUlDO1FBQ0osTUFBTUMsUUFBUSxDQUFDRCw4QkFBOEJGLE1BQU1DLG9CQUFvQixFQUFDLEtBQU0sT0FBTyxLQUFLLElBQUlDLDRCQUE0QkUsUUFBUTtRQUNsSSxJQUFJLENBQUNELFNBQVMsT0FBTyxLQUFLLElBQUlBLE1BQU1FLFlBQVksS0FBTUYsQ0FBQUEsU0FBUyxPQUFPLEtBQUssSUFBSUEsTUFBTUcsa0JBQWtCLEdBQUc7WUFDdEdDLFFBQVF0QixLQUFLLENBQUNBO1lBQ2QsTUFBTUE7UUFDVjtJQUNKO0lBQ0EsT0FBTztBQUNYO0FBQ0EsTUFBTW5CLDZCQUE2QmMsT0FBT1osT0FBTyxDQUFDd0MsU0FBUztJQUN2RCxPQUFPQyx5QkFBeUJ4QixLQUFLLEVBQUU7UUFDbkMsSUFBSSxDQUFDLEdBQUdGLG1CQUFtQjJCLGlCQUFpQixFQUFFekIsUUFBUTtZQUNsRCwrREFBK0Q7WUFDL0QsNEdBQTRHO1lBQzVHLE1BQU1BO1FBQ1Y7UUFDQSxPQUFPO1lBQ0hBO1FBQ0o7SUFDSjtJQUNBLE9BQU8wQix5QkFBeUJDLEtBQUssRUFBRUMsS0FBSyxFQUFFO1FBQzFDOzs7OztLQUtILEdBQUcsSUFBSUQsTUFBTUUsUUFBUSxLQUFLRCxNQUFNRSxnQkFBZ0IsSUFBSUYsTUFBTTVCLEtBQUssRUFBRTtZQUMxRCxPQUFPO2dCQUNIQSxPQUFPO2dCQUNQOEIsa0JBQWtCSCxNQUFNRSxRQUFRO1lBQ3BDO1FBQ0o7UUFDQSxPQUFPO1lBQ0g3QixPQUFPNEIsTUFBTTVCLEtBQUs7WUFDbEI4QixrQkFBa0JILE1BQU1FLFFBQVE7UUFDcEM7SUFDSjtJQUNBRSxTQUFTO1FBQ0wsSUFBSSxJQUFJLENBQUNILEtBQUssQ0FBQzVCLEtBQUssRUFBRTtZQUNsQixPQUFxQixXQUFILEdBQUksSUFBR04sWUFBWXNDLElBQUksRUFBRXRDLFlBQVl1QyxRQUFRLEVBQUU7Z0JBQzdEQyxVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHeEMsWUFBWXlDLEdBQUcsRUFBRXRCLGdCQUFnQjt3QkFDL0NiLE9BQU8sSUFBSSxDQUFDNEIsS0FBSyxDQUFDNUIsS0FBSztvQkFDM0I7b0JBQ0EsSUFBSSxDQUFDMkIsS0FBSyxDQUFDUyxXQUFXO29CQUN0QixJQUFJLENBQUNULEtBQUssQ0FBQ1UsWUFBWTtvQkFDdkIsV0FBVyxHQUFJLElBQUczQyxZQUFZeUMsR0FBRyxFQUFFLElBQUksQ0FBQ1IsS0FBSyxDQUFDVyxjQUFjLEVBQUU7d0JBQzFEdEMsT0FBTyxJQUFJLENBQUM0QixLQUFLLENBQUM1QixLQUFLO3dCQUN2QnVDLE9BQU8sSUFBSSxDQUFDQSxLQUFLO29CQUNyQjtpQkFDSDtZQUNMO1FBQ0o7UUFDQSxPQUFPLElBQUksQ0FBQ1osS0FBSyxDQUFDTyxRQUFRO0lBQzlCO0lBQ0FNLFlBQVliLEtBQUssQ0FBQztRQUNkLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNZLEtBQUssR0FBRztZQUNULElBQUksQ0FBQ0UsUUFBUSxDQUFDO2dCQUNWekMsT0FBTztZQUNYO1FBQ0o7UUFDQSxJQUFJLENBQUM0QixLQUFLLEdBQUc7WUFDVDVCLE9BQU87WUFDUDhCLGtCQUFrQixJQUFJLENBQUNILEtBQUssQ0FBQ0UsUUFBUTtRQUN6QztJQUNKO0FBQ0o7QUFDQSxTQUFTL0MsWUFBWWdDLEtBQUs7SUFDdEIsSUFBSSxFQUFFZCxLQUFLLEVBQUUsR0FBR2M7SUFDaEIsTUFBTTRCLFNBQVMxQyxTQUFTLE9BQU8sS0FBSyxJQUFJQSxNQUFNMEMsTUFBTTtJQUNwRCxPQUFxQixXQUFILEdBQUksSUFBR2hELFlBQVlzQyxJQUFJLEVBQUUsUUFBUTtRQUMvQ1csSUFBSTtRQUNKVCxVQUFVO1lBQ04sV0FBVyxHQUFJLElBQUd4QyxZQUFZeUMsR0FBRyxFQUFFLFFBQVEsQ0FBQztZQUM1QyxXQUFXLEdBQUksSUFBR3pDLFlBQVlzQyxJQUFJLEVBQUUsUUFBUTtnQkFDeENFLFVBQVU7b0JBQ04sV0FBVyxHQUFJLElBQUd4QyxZQUFZeUMsR0FBRyxFQUFFdEIsZ0JBQWdCO3dCQUMvQ2IsT0FBT0E7b0JBQ1g7b0JBQ0EsV0FBVyxHQUFJLElBQUdOLFlBQVl5QyxHQUFHLEVBQUUsT0FBTzt3QkFDdENTLE9BQU83QyxPQUFPQyxLQUFLO3dCQUNuQmtDLFVBQXdCLFdBQUgsR0FBSSxJQUFHeEMsWUFBWXNDLElBQUksRUFBRSxPQUFPOzRCQUNqREUsVUFBVTtnQ0FDTixXQUFXLEdBQUksSUFBR3hDLFlBQVl5QyxHQUFHLEVBQUUsTUFBTTtvQ0FDckNTLE9BQU83QyxPQUFPUyxJQUFJO29DQUNsQjBCLFVBQVUsMEJBQTJCUSxDQUFBQSxTQUFTLFdBQVcsUUFBTyxJQUFLLDJDQUE0Q0EsQ0FBQUEsU0FBUyxnQkFBZ0IsaUJBQWdCLElBQUs7Z0NBQ25LO2dDQUNBQSxTQUF1QixXQUFILEdBQUksSUFBR2hELFlBQVl5QyxHQUFHLEVBQUUsS0FBSztvQ0FDN0NTLE9BQU83QyxPQUFPUyxJQUFJO29DQUNsQjBCLFVBQVUsYUFBYVE7Z0NBQzNCLEtBQUs7NkJBQ1I7d0JBQ0w7b0JBQ0o7aUJBQ0g7WUFDTDtTQUNIO0lBQ0w7QUFDSjtBQUNBLE1BQU1uRCxXQUFXVDtBQUNqQixTQUFTRSxjQUFjOEIsS0FBSztJQUN4QixJQUFJLEVBQUV3QixjQUFjLEVBQUVGLFdBQVcsRUFBRUMsWUFBWSxFQUFFSCxRQUFRLEVBQUUsR0FBR3BCO0lBQzlELE1BQU1lLFdBQVcsQ0FBQyxHQUFHaEMsWUFBWWdELFdBQVc7SUFDNUMsSUFBSVAsZ0JBQWdCO1FBQ2hCLE9BQXFCLFdBQUgsR0FBSSxJQUFHNUMsWUFBWXlDLEdBQUcsRUFBRXRELHNCQUFzQjtZQUM1RGdELFVBQVVBO1lBQ1ZTLGdCQUFnQkE7WUFDaEJGLGFBQWFBO1lBQ2JDLGNBQWNBO1lBQ2RILFVBQVVBO1FBQ2Q7SUFDSjtJQUNBLE9BQXFCLFdBQUgsR0FBSSxJQUFHeEMsWUFBWXlDLEdBQUcsRUFBRXpDLFlBQVl1QyxRQUFRLEVBQUU7UUFDNURDLFVBQVVBO0lBQ2Q7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPeEQsUUFBUUssT0FBTyxLQUFLLGNBQWUsT0FBT0wsUUFBUUssT0FBTyxLQUFLLFlBQVlMLFFBQVFLLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT0wsUUFBUUssT0FBTyxDQUFDK0QsVUFBVSxLQUFLLGFBQWE7SUFDckt0RSxPQUFPQyxjQUFjLENBQUNDLFFBQVFLLE9BQU8sRUFBRSxjQUFjO1FBQUVKLE9BQU87SUFBSztJQUNuRUgsT0FBT3VFLE1BQU0sQ0FBQ3JFLFFBQVFLLE9BQU8sRUFBRUw7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUUssT0FBTztBQUNsQyxFQUVBLDBDQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5LmpzPzc2OTciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgRXJyb3JCb3VuZGFyeUhhbmRsZXI6IG51bGwsXG4gICAgR2xvYmFsRXJyb3I6IG51bGwsXG4gICAgZGVmYXVsdDogbnVsbCxcbiAgICBFcnJvckJvdW5kYXJ5OiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIEVycm9yQm91bmRhcnlIYW5kbGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEVycm9yQm91bmRhcnlIYW5kbGVyO1xuICAgIH0sXG4gICAgR2xvYmFsRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gR2xvYmFsRXJyb3I7XG4gICAgfSxcbiAgICAvLyBFeHBvcnRlZCBzbyB0aGF0IHRoZSBpbXBvcnQgc2lnbmF0dXJlIGluIHRoZSBsb2FkZXJzIGNhbiBiZSBpZGVudGljYWwgdG8gdXNlclxuICAgIC8vIHN1cHBsaWVkIGN1c3RvbSBnbG9iYWwgZXJyb3Igc2lnbmF0dXJlcy5cbiAgICBkZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9kZWZhdWx0O1xuICAgIH0sXG4gICAgRXJyb3JCb3VuZGFyeTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBFcnJvckJvdW5kYXJ5O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX25hdmlnYXRpb24gPSByZXF1aXJlKFwiLi9uYXZpZ2F0aW9uXCIpO1xuY29uc3QgX2lzbmV4dHJvdXRlcmVycm9yID0gcmVxdWlyZShcIi4vaXMtbmV4dC1yb3V0ZXItZXJyb3JcIik7XG5jb25zdCBzdHlsZXMgPSB7XG4gICAgZXJyb3I6IHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9tb2Rlcm4tbm9ybWFsaXplL2Jsb2IvbWFpbi9tb2Rlcm4tbm9ybWFsaXplLmNzcyNMMzgtTDUyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdzeXN0ZW0tdWksXCJTZWdvZSBVSVwiLFJvYm90byxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZixcIkFwcGxlIENvbG9yIEVtb2ppXCIsXCJTZWdvZSBVSSBFbW9qaVwiJyxcbiAgICAgICAgaGVpZ2h0OiBcIjEwMHZoXCIsXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiXG4gICAgfSxcbiAgICB0ZXh0OiB7XG4gICAgICAgIGZvbnRTaXplOiBcIjE0cHhcIixcbiAgICAgICAgZm9udFdlaWdodDogNDAwLFxuICAgICAgICBsaW5lSGVpZ2h0OiBcIjI4cHhcIixcbiAgICAgICAgbWFyZ2luOiBcIjAgOHB4XCJcbiAgICB9XG59O1xuLy8gaWYgd2UgYXJlIHJldmFsaWRhdGluZyB3ZSB3YW50IHRvIHJlLXRocm93IHRoZSBlcnJvciBzbyB0aGVcbi8vIGZ1bmN0aW9uIGNyYXNoZXMgc28gd2UgY2FuIG1haW50YWluIG91ciBwcmV2aW91cyBjYWNoZVxuLy8gaW5zdGVhZCBvZiBjYWNoaW5nIHRoZSBlcnJvciBwYWdlXG5mdW5jdGlvbiBIYW5kbGVJU1JFcnJvcihwYXJhbSkge1xuICAgIGxldCB7IGVycm9yIH0gPSBwYXJhbTtcbiAgICBpZiAodHlwZW9mIGZldGNoLl9fbmV4dEdldFN0YXRpY1N0b3JlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdmFyIF9mZXRjaF9fX25leHRHZXRTdGF0aWNTdG9yZTtcbiAgICAgICAgY29uc3Qgc3RvcmUgPSAoX2ZldGNoX19fbmV4dEdldFN0YXRpY1N0b3JlID0gZmV0Y2guX19uZXh0R2V0U3RhdGljU3RvcmUoKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9mZXRjaF9fX25leHRHZXRTdGF0aWNTdG9yZS5nZXRTdG9yZSgpO1xuICAgICAgICBpZiAoKHN0b3JlID09IG51bGwgPyB2b2lkIDAgOiBzdG9yZS5pc1JldmFsaWRhdGUpIHx8IChzdG9yZSA9PSBudWxsID8gdm9pZCAwIDogc3RvcmUuaXNTdGF0aWNHZW5lcmF0aW9uKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmNsYXNzIEVycm9yQm91bmRhcnlIYW5kbGVyIGV4dGVuZHMgX3JlYWN0LmRlZmF1bHQuQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKSB7XG4gICAgICAgIGlmICgoMCwgX2lzbmV4dHJvdXRlcmVycm9yLmlzTmV4dFJvdXRlckVycm9yKShlcnJvcikpIHtcbiAgICAgICAgICAgIC8vIFJlLXRocm93IGlmIGFuIGV4cGVjdGVkIGludGVybmFsIE5leHQuanMgcm91dGVyIGVycm9yIG9jY3Vyc1xuICAgICAgICAgICAgLy8gdGhpcyBtZWFucyBpdCBzaG91bGQgYmUgaGFuZGxlZCBieSBhIGRpZmZlcmVudCBib3VuZGFyeSAoc3VjaCBhcyBhIE5vdEZvdW5kIGJvdW5kYXJ5IGluIGEgcGFyZW50IHNlZ21lbnQpXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICAgICAgLyoqXG4gICAgICogSGFuZGxlcyByZXNldCBvZiB0aGUgZXJyb3IgYm91bmRhcnkgd2hlbiBhIG5hdmlnYXRpb24gaGFwcGVucy5cbiAgICAgKiBFbnN1cmVzIHRoZSBlcnJvciBib3VuZGFyeSBkb2VzIG5vdCBzdGF5IGVuYWJsZWQgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2UuXG4gICAgICogQXBwcm9hY2ggb2Ygc2V0U3RhdGUgaW4gcmVuZGVyIGlzIHNhZmUgYXMgaXQgY2hlY2tzIHRoZSBwcmV2aW91cyBwYXRobmFtZSBhbmQgdGhlbiBvdmVycmlkZXNcbiAgICAgKiBpdCBhcyBvdXRsaW5lZCBpbiBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlU3RhdGUjc3RvcmluZy1pbmZvcm1hdGlvbi1mcm9tLXByZXZpb3VzLXJlbmRlcnNcbiAgICAgKi8gaWYgKHByb3BzLnBhdGhuYW1lICE9PSBzdGF0ZS5wcmV2aW91c1BhdGhuYW1lICYmIHN0YXRlLmVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvcjogc3RhdGUuZXJyb3IsXG4gICAgICAgICAgICBwcmV2aW91c1BhdGhuYW1lOiBwcm9wcy5wYXRobmFtZVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKEhhbmRsZUlTUkVycm9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdGhpcy5zdGF0ZS5lcnJvclxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5lcnJvclN0eWxlcyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5lcnJvclNjcmlwdHMsXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkodGhpcy5wcm9wcy5lcnJvckNvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHRoaXMuc3RhdGUuZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldDogdGhpcy5yZXNldFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5yZXNldCA9ICgpPT57XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHRoaXMucHJvcHMucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBHbG9iYWxFcnJvcihwYXJhbSkge1xuICAgIGxldCB7IGVycm9yIH0gPSBwYXJhbTtcbiAgICBjb25zdCBkaWdlc3QgPSBlcnJvciA9PSBudWxsID8gdm9pZCAwIDogZXJyb3IuZGlnZXN0O1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImh0bWxcIiwge1xuICAgICAgICBpZDogXCJfX25leHRfZXJyb3JfX1wiLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImhlYWRcIiwge30pLFxuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJib2R5XCIsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKEhhbmRsZUlTUkVycm9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy5lcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImgyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBzdHlsZXMudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIkFwcGxpY2F0aW9uIGVycm9yOiBhIFwiICsgKGRpZ2VzdCA/IFwic2VydmVyXCIgOiBcImNsaWVudFwiKSArIFwiLXNpZGUgZXhjZXB0aW9uIGhhcyBvY2N1cnJlZCAoc2VlIHRoZSBcIiArIChkaWdlc3QgPyBcInNlcnZlciBsb2dzXCIgOiBcImJyb3dzZXIgY29uc29sZVwiKSArIFwiIGZvciBtb3JlIGluZm9ybWF0aW9uKS5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnZXN0ID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiRGlnZXN0OiBcIiArIGRpZ2VzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn1cbmNvbnN0IF9kZWZhdWx0ID0gR2xvYmFsRXJyb3I7XG5mdW5jdGlvbiBFcnJvckJvdW5kYXJ5KHBhcmFtKSB7XG4gICAgbGV0IHsgZXJyb3JDb21wb25lbnQsIGVycm9yU3R5bGVzLCBlcnJvclNjcmlwdHMsIGNoaWxkcmVuIH0gPSBwYXJhbTtcbiAgICBjb25zdCBwYXRobmFtZSA9ICgwLCBfbmF2aWdhdGlvbi51c2VQYXRobmFtZSkoKTtcbiAgICBpZiAoZXJyb3JDb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoRXJyb3JCb3VuZGFyeUhhbmRsZXIsIHtcbiAgICAgICAgICAgIHBhdGhuYW1lOiBwYXRobmFtZSxcbiAgICAgICAgICAgIGVycm9yQ29tcG9uZW50OiBlcnJvckNvbXBvbmVudCxcbiAgICAgICAgICAgIGVycm9yU3R5bGVzOiBlcnJvclN0eWxlcyxcbiAgICAgICAgICAgIGVycm9yU2NyaXB0czogZXJyb3JTY3JpcHRzLFxuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXJyb3ItYm91bmRhcnkuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiRXJyb3JCb3VuZGFyeUhhbmRsZXIiLCJHbG9iYWxFcnJvciIsImRlZmF1bHQiLCJFcnJvckJvdW5kYXJ5IiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2RlZmF1bHQiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX25hdmlnYXRpb24iLCJfaXNuZXh0cm91dGVyZXJyb3IiLCJzdHlsZXMiLCJlcnJvciIsImZvbnRGYW1pbHkiLCJoZWlnaHQiLCJ0ZXh0QWxpZ24iLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsInRleHQiLCJmb250U2l6ZSIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0IiwibWFyZ2luIiwiSGFuZGxlSVNSRXJyb3IiLCJwYXJhbSIsImZldGNoIiwiX19uZXh0R2V0U3RhdGljU3RvcmUiLCJfZmV0Y2hfX19uZXh0R2V0U3RhdGljU3RvcmUiLCJzdG9yZSIsImdldFN0b3JlIiwiaXNSZXZhbGlkYXRlIiwiaXNTdGF0aWNHZW5lcmF0aW9uIiwiY29uc29sZSIsIkNvbXBvbmVudCIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImlzTmV4dFJvdXRlckVycm9yIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwicHJvcHMiLCJzdGF0ZSIsInBhdGhuYW1lIiwicHJldmlvdXNQYXRobmFtZSIsInJlbmRlciIsImpzeHMiLCJGcmFnbWVudCIsImNoaWxkcmVuIiwianN4IiwiZXJyb3JTdHlsZXMiLCJlcnJvclNjcmlwdHMiLCJlcnJvckNvbXBvbmVudCIsInJlc2V0IiwiY29uc3RydWN0b3IiLCJzZXRTdGF0ZSIsImRpZ2VzdCIsImlkIiwic3R5bGUiLCJ1c2VQYXRobmFtZSIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/error-boundary.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/hooks-server-context.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/hooks-server-context.js ***! + \**************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DynamicServerError: function() {\n return DynamicServerError;\n },\n isDynamicServerError: function() {\n return isDynamicServerError;\n }\n});\nconst DYNAMIC_ERROR_CODE = \"DYNAMIC_SERVER_USAGE\";\nclass DynamicServerError extends Error {\n constructor(description){\n super(\"Dynamic server usage: \" + description);\n this.description = description;\n this.digest = DYNAMIC_ERROR_CODE;\n }\n}\nfunction isDynamicServerError(err) {\n if (typeof err !== \"object\" || err === null || !(\"digest\" in err) || typeof err.digest !== \"string\") {\n return false;\n }\n return err.digest === DYNAMIC_ERROR_CODE;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hooks-server-context.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2hvb2tzLXNlcnZlci1jb250ZXh0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxvQkFBb0I7UUFDaEIsT0FBT0E7SUFDWDtJQUNBQyxzQkFBc0I7UUFDbEIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8scUJBQXFCO0FBQzNCLE1BQU1SLDJCQUEyQlM7SUFDN0JDLFlBQVlDLFdBQVcsQ0FBQztRQUNwQixLQUFLLENBQUMsMkJBQTJCQTtRQUNqQyxJQUFJLENBQUNBLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxNQUFNLEdBQUdKO0lBQ2xCO0FBQ0o7QUFDQSxTQUFTUCxxQkFBcUJZLEdBQUc7SUFDN0IsSUFBSSxPQUFPQSxRQUFRLFlBQVlBLFFBQVEsUUFBUSxDQUFFLGFBQVlBLEdBQUUsS0FBTSxPQUFPQSxJQUFJRCxNQUFNLEtBQUssVUFBVTtRQUNqRyxPQUFPO0lBQ1g7SUFDQSxPQUFPQyxJQUFJRCxNQUFNLEtBQUtKO0FBQzFCO0FBRUEsSUFBSSxDQUFDLE9BQU9YLFFBQVFpQixPQUFPLEtBQUssY0FBZSxPQUFPakIsUUFBUWlCLE9BQU8sS0FBSyxZQUFZakIsUUFBUWlCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2pCLFFBQVFpQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLcEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRaUIsT0FBTyxFQUFFLGNBQWM7UUFBRWhCLE9BQU87SUFBSztJQUNuRUgsT0FBT3FCLE1BQU0sQ0FBQ25CLFFBQVFpQixPQUFPLEVBQUVqQjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRaUIsT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2hvb2tzLXNlcnZlci1jb250ZXh0LmpzPzAwOWEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBEeW5hbWljU2VydmVyRXJyb3I6IG51bGwsXG4gICAgaXNEeW5hbWljU2VydmVyRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgRHluYW1pY1NlcnZlckVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIER5bmFtaWNTZXJ2ZXJFcnJvcjtcbiAgICB9LFxuICAgIGlzRHluYW1pY1NlcnZlckVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzRHluYW1pY1NlcnZlckVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgRFlOQU1JQ19FUlJPUl9DT0RFID0gXCJEWU5BTUlDX1NFUlZFUl9VU0FHRVwiO1xuY2xhc3MgRHluYW1pY1NlcnZlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGRlc2NyaXB0aW9uKXtcbiAgICAgICAgc3VwZXIoXCJEeW5hbWljIHNlcnZlciB1c2FnZTogXCIgKyBkZXNjcmlwdGlvbik7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5kaWdlc3QgPSBEWU5BTUlDX0VSUk9SX0NPREU7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNEeW5hbWljU2VydmVyRXJyb3IoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBlcnIgIT09IFwib2JqZWN0XCIgfHwgZXJyID09PSBudWxsIHx8ICEoXCJkaWdlc3RcIiBpbiBlcnIpIHx8IHR5cGVvZiBlcnIuZGlnZXN0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGVyci5kaWdlc3QgPT09IERZTkFNSUNfRVJST1JfQ09ERTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3Mtc2VydmVyLWNvbnRleHQuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiRHluYW1pY1NlcnZlckVycm9yIiwiaXNEeW5hbWljU2VydmVyRXJyb3IiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJEWU5BTUlDX0VSUk9SX0NPREUiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwiZGVzY3JpcHRpb24iLCJkaWdlc3QiLCJlcnIiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/hooks-server-context.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/infinite-promise.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/client/components/infinite-promise.js ***! + \**********************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("/**\n * Used to cache in createInfinitePromise\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createInfinitePromise\", ({\n enumerable: true,\n get: function() {\n return createInfinitePromise;\n }\n}));\nlet infinitePromise;\nfunction createInfinitePromise() {\n if (!infinitePromise) {\n // Only create the Promise once\n infinitePromise = new Promise(()=>{\n // This is used to debug when the rendering is never updated.\n // setTimeout(() => {\n // infinitePromise = new Error('Infinite promise')\n // resolve()\n // }, 5000)\n });\n }\n return infinitePromise;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=infinite-promise.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2luZmluaXRlLXByb21pc2UuanMiLCJtYXBwaW5ncyI6IkFBQUE7O0NBRUMsR0FBZ0I7QUFDakJBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx5REFBd0Q7SUFDcERJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixJQUFJQztBQUNKLFNBQVNEO0lBQ0wsSUFBSSxDQUFDQyxpQkFBaUI7UUFDbEIsK0JBQStCO1FBQy9CQSxrQkFBa0IsSUFBSUMsUUFBUTtRQUM5Qiw2REFBNkQ7UUFDN0QscUJBQXFCO1FBQ3JCLG9EQUFvRDtRQUNwRCxjQUFjO1FBQ2QsV0FBVztRQUNYO0lBQ0o7SUFDQSxPQUFPRDtBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU9MLFFBQVFPLE9BQU8sS0FBSyxjQUFlLE9BQU9QLFFBQVFPLE9BQU8sS0FBSyxZQUFZUCxRQUFRTyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9QLFFBQVFPLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktWLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUU8sT0FBTyxFQUFFLGNBQWM7UUFBRU4sT0FBTztJQUFLO0lBQ25FSCxPQUFPVyxNQUFNLENBQUNULFFBQVFPLE9BQU8sRUFBRVA7SUFDL0JVLE9BQU9WLE9BQU8sR0FBR0EsUUFBUU8sT0FBTztBQUNsQyxFQUVBLDRDQUE0QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2luZmluaXRlLXByb21pc2UuanM/NzJmZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVzZWQgdG8gY2FjaGUgaW4gY3JlYXRlSW5maW5pdGVQcm9taXNlXG4gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbmZpbml0ZVByb21pc2VcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUluZmluaXRlUHJvbWlzZTtcbiAgICB9XG59KTtcbmxldCBpbmZpbml0ZVByb21pc2U7XG5mdW5jdGlvbiBjcmVhdGVJbmZpbml0ZVByb21pc2UoKSB7XG4gICAgaWYgKCFpbmZpbml0ZVByb21pc2UpIHtcbiAgICAgICAgLy8gT25seSBjcmVhdGUgdGhlIFByb21pc2Ugb25jZVxuICAgICAgICBpbmZpbml0ZVByb21pc2UgPSBuZXcgUHJvbWlzZSgoKT0+e1xuICAgICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gZGVidWcgd2hlbiB0aGUgcmVuZGVyaW5nIGlzIG5ldmVyIHVwZGF0ZWQuXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgIGluZmluaXRlUHJvbWlzZSA9IG5ldyBFcnJvcignSW5maW5pdGUgcHJvbWlzZScpXG4gICAgICAgIC8vICAgcmVzb2x2ZSgpXG4gICAgICAgIC8vIH0sIDUwMDApXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaW5maW5pdGVQcm9taXNlO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmZpbml0ZS1wcm9taXNlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJjcmVhdGVJbmZpbml0ZVByb21pc2UiLCJpbmZpbml0ZVByb21pc2UiLCJQcm9taXNlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/infinite-promise.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/is-next-router-error.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/is-next-router-error.js ***! + \**************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isNextRouterError\", ({\n enumerable: true,\n get: function() {\n return isNextRouterError;\n }\n}));\nconst _notfound = __webpack_require__(/*! ./not-found */ \"(ssr)/./node_modules/next/dist/client/components/not-found.js\");\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(ssr)/./node_modules/next/dist/client/components/redirect.js\");\nfunction isNextRouterError(error) {\n return error && error.digest && ((0, _redirect.isRedirectError)(error) || (0, _notfound.isNotFoundError)(error));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=is-next-router-error.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2lzLW5leHQtcm91dGVyLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxxREFBb0Q7SUFDaERJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxZQUFZQyxtQkFBT0EsQ0FBQyxrRkFBYTtBQUN2QyxNQUFNQyxZQUFZRCxtQkFBT0EsQ0FBQyxnRkFBWTtBQUN0QyxTQUFTRixrQkFBa0JJLEtBQUs7SUFDNUIsT0FBT0EsU0FBU0EsTUFBTUMsTUFBTSxJQUFLLEVBQUMsR0FBR0YsVUFBVUcsZUFBZSxFQUFFRixVQUFVLENBQUMsR0FBR0gsVUFBVU0sZUFBZSxFQUFFSCxNQUFLO0FBQ2xIO0FBRUEsSUFBSSxDQUFDLE9BQU9SLFFBQVFZLE9BQU8sS0FBSyxjQUFlLE9BQU9aLFFBQVFZLE9BQU8sS0FBSyxZQUFZWixRQUFRWSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9aLFFBQVFZLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktmLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUVksT0FBTyxFQUFFLGNBQWM7UUFBRVgsT0FBTztJQUFLO0lBQ25FSCxPQUFPZ0IsTUFBTSxDQUFDZCxRQUFRWSxPQUFPLEVBQUVaO0lBQy9CZSxPQUFPZixPQUFPLEdBQUdBLFFBQVFZLE9BQU87QUFDbEMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9pcy1uZXh0LXJvdXRlci1lcnJvci5qcz9kOTA3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOZXh0Um91dGVyRXJyb3JcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzTmV4dFJvdXRlckVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgX25vdGZvdW5kID0gcmVxdWlyZShcIi4vbm90LWZvdW5kXCIpO1xuY29uc3QgX3JlZGlyZWN0ID0gcmVxdWlyZShcIi4vcmVkaXJlY3RcIik7XG5mdW5jdGlvbiBpc05leHRSb3V0ZXJFcnJvcihlcnJvcikge1xuICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5kaWdlc3QgJiYgKCgwLCBfcmVkaXJlY3QuaXNSZWRpcmVjdEVycm9yKShlcnJvcikgfHwgKDAsIF9ub3Rmb3VuZC5pc05vdEZvdW5kRXJyb3IpKGVycm9yKSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzLW5leHQtcm91dGVyLWVycm9yLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJpc05leHRSb3V0ZXJFcnJvciIsIl9ub3Rmb3VuZCIsInJlcXVpcmUiLCJfcmVkaXJlY3QiLCJlcnJvciIsImRpZ2VzdCIsImlzUmVkaXJlY3RFcnJvciIsImlzTm90Rm91bmRFcnJvciIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/is-next-router-error.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/layout-router.js": +/*!*******************************************************************!*\ + !*** ./node_modules/next/dist/client/components/layout-router.js ***! + \*******************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return OuterLayoutRouter;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _reactdom = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-dom.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js\");\nconst _fetchserverresponse = __webpack_require__(/*! ./router-reducer/fetch-server-response */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _infinitepromise = __webpack_require__(/*! ./infinite-promise */ \"(ssr)/./node_modules/next/dist/client/components/infinite-promise.js\");\nconst _errorboundary = __webpack_require__(/*! ./error-boundary */ \"(ssr)/./node_modules/next/dist/client/components/error-boundary.js\");\nconst _matchsegments = __webpack_require__(/*! ./match-segments */ \"(ssr)/./node_modules/next/dist/client/components/match-segments.js\");\nconst _handlesmoothscroll = __webpack_require__(/*! ../../shared/lib/router/utils/handle-smooth-scroll */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\");\nconst _redirectboundary = __webpack_require__(/*! ./redirect-boundary */ \"(ssr)/./node_modules/next/dist/client/components/redirect-boundary.js\");\nconst _notfoundboundary = __webpack_require__(/*! ./not-found-boundary */ \"(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\");\nconst _getsegmentvalue = __webpack_require__(/*! ./router-reducer/reducers/get-segment-value */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./router-reducer/create-router-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\n/**\n * Add refetch marker to router state at the point of the current layout segment.\n * This ensures the response returned is not further down than the current layout segment.\n */ function walkAddRefetch(segmentPathToWalk, treeToRecreate) {\n if (segmentPathToWalk) {\n const [segment, parallelRouteKey] = segmentPathToWalk;\n const isLast = segmentPathToWalk.length === 2;\n if ((0, _matchsegments.matchSegment)(treeToRecreate[0], segment)) {\n if (treeToRecreate[1].hasOwnProperty(parallelRouteKey)) {\n if (isLast) {\n const subTree = walkAddRefetch(undefined, treeToRecreate[1][parallelRouteKey]);\n return [\n treeToRecreate[0],\n {\n ...treeToRecreate[1],\n [parallelRouteKey]: [\n subTree[0],\n subTree[1],\n subTree[2],\n \"refetch\"\n ]\n }\n ];\n }\n return [\n treeToRecreate[0],\n {\n ...treeToRecreate[1],\n [parallelRouteKey]: walkAddRefetch(segmentPathToWalk.slice(2), treeToRecreate[1][parallelRouteKey])\n }\n ];\n }\n }\n }\n return treeToRecreate;\n}\n// TODO-APP: Replace with new React API for finding dom nodes without a `ref` when available\n/**\n * Wraps ReactDOM.findDOMNode with additional logic to hide React Strict Mode warning\n */ function findDOMNode(instance) {\n // Tree-shake for server bundle\n if (true) return null;\n // Only apply strict mode warning when not in production\n if (true) {\n const originalConsoleError = console.error;\n try {\n console.error = function() {\n for(var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++){\n messages[_key] = arguments[_key];\n }\n // Ignore strict mode warning for the findDomNode call below\n if (!messages[0].includes(\"Warning: %s is deprecated in StrictMode.\")) {\n originalConsoleError(...messages);\n }\n };\n return _reactdom.default.findDOMNode(instance);\n } finally{\n console.error = originalConsoleError;\n }\n }\n return _reactdom.default.findDOMNode(instance);\n}\nconst rectProperties = [\n \"bottom\",\n \"height\",\n \"left\",\n \"right\",\n \"top\",\n \"width\",\n \"x\",\n \"y\"\n];\n/**\n * Check if a HTMLElement is hidden or fixed/sticky position\n */ function shouldSkipElement(element) {\n // we ignore fixed or sticky positioned elements since they'll likely pass the \"in-viewport\" check\n // and will result in a situation we bail on scroll because of something like a fixed nav,\n // even though the actual page content is offscreen\n if ([\n \"sticky\",\n \"fixed\"\n ].includes(getComputedStyle(element).position)) {\n if (true) {\n console.warn(\"Skipping auto-scroll behavior due to `position: sticky` or `position: fixed` on element:\", element);\n }\n return true;\n }\n // Uses `getBoundingClientRect` to check if the element is hidden instead of `offsetParent`\n // because `offsetParent` doesn't consider document/body\n const rect = element.getBoundingClientRect();\n return rectProperties.every((item)=>rect[item] === 0);\n}\n/**\n * Check if the top corner of the HTMLElement is in the viewport.\n */ function topOfElementInViewport(element, viewportHeight) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.top <= viewportHeight;\n}\n/**\n * Find the DOM node for a hash fragment.\n * If `top` the page has to scroll to the top of the page. This mirrors the browser's behavior.\n * If the hash fragment is an id, the page has to scroll to the element with that id.\n * If the hash fragment is a name, the page has to scroll to the first element with that name.\n */ function getHashFragmentDomNode(hashFragment) {\n // If the hash fragment is `top` the page has to scroll to the top of the page.\n if (hashFragment === \"top\") {\n return document.body;\n }\n var _document_getElementById;\n // If the hash fragment is an id, the page has to scroll to the element with that id.\n return (_document_getElementById = document.getElementById(hashFragment)) != null ? _document_getElementById : document.getElementsByName(hashFragment)[0];\n}\nclass InnerScrollAndFocusHandler extends _react.default.Component {\n componentDidMount() {\n this.handlePotentialScroll();\n }\n componentDidUpdate() {\n // Because this property is overwritten in handlePotentialScroll it's fine to always run it when true as it'll be set to false for subsequent renders.\n if (this.props.focusAndScrollRef.apply) {\n this.handlePotentialScroll();\n }\n }\n render() {\n return this.props.children;\n }\n constructor(...args){\n super(...args);\n this.handlePotentialScroll = ()=>{\n // Handle scroll and focus, it's only applied once in the first useEffect that triggers that changed.\n const { focusAndScrollRef, segmentPath } = this.props;\n if (focusAndScrollRef.apply) {\n // segmentPaths is an array of segment paths that should be scrolled to\n // if the current segment path is not in the array, the scroll is not applied\n // unless the array is empty, in which case the scroll is always applied\n if (focusAndScrollRef.segmentPaths.length !== 0 && !focusAndScrollRef.segmentPaths.some((scrollRefSegmentPath)=>segmentPath.every((segment, index)=>(0, _matchsegments.matchSegment)(segment, scrollRefSegmentPath[index])))) {\n return;\n }\n let domNode = null;\n const hashFragment = focusAndScrollRef.hashFragment;\n if (hashFragment) {\n domNode = getHashFragmentDomNode(hashFragment);\n }\n // `findDOMNode` is tricky because it returns just the first child if the component is a fragment.\n // This already caused a bug where the first child was a <link/> in head.\n if (!domNode) {\n domNode = findDOMNode(this);\n }\n // If there is no DOM node this layout-router level is skipped. It'll be handled higher-up in the tree.\n if (!(domNode instanceof Element)) {\n return;\n }\n // Verify if the element is a HTMLElement and if we want to consider it for scroll behavior.\n // If the element is skipped, try to select the next sibling and try again.\n while(!(domNode instanceof HTMLElement) || shouldSkipElement(domNode)){\n // No siblings found that match the criteria are found, so handle scroll higher up in the tree instead.\n if (domNode.nextElementSibling === null) {\n return;\n }\n domNode = domNode.nextElementSibling;\n }\n // State is mutated to ensure that the focus and scroll is applied only once.\n focusAndScrollRef.apply = false;\n focusAndScrollRef.hashFragment = null;\n focusAndScrollRef.segmentPaths = [];\n (0, _handlesmoothscroll.handleSmoothScroll)(()=>{\n // In case of hash scroll, we only need to scroll the element into view\n if (hashFragment) {\n domNode.scrollIntoView();\n return;\n }\n // Store the current viewport height because reading `clientHeight` causes a reflow,\n // and it won't change during this function.\n const htmlElement = document.documentElement;\n const viewportHeight = htmlElement.clientHeight;\n // If the element's top edge is already in the viewport, exit early.\n if (topOfElementInViewport(domNode, viewportHeight)) {\n return;\n }\n // Otherwise, try scrolling go the top of the document to be backward compatible with pages\n // scrollIntoView() called on `<html/>` element scrolls horizontally on chrome and firefox (that shouldn't happen)\n // We could use it to scroll horizontally following RTL but that also seems to be broken - it will always scroll left\n // scrollLeft = 0 also seems to ignore RTL and manually checking for RTL is too much hassle so we will scroll just vertically\n htmlElement.scrollTop = 0;\n // Scroll to domNode if domNode is not in viewport when scrolled to top of document\n if (!topOfElementInViewport(domNode, viewportHeight)) {\n domNode.scrollIntoView();\n }\n }, {\n // We will force layout by querying domNode position\n dontForceLayout: true,\n onlyHashChange: focusAndScrollRef.onlyHashChange\n });\n // Mutate after scrolling so that it can be read by `handleSmoothScroll`\n focusAndScrollRef.onlyHashChange = false;\n // Set focus on the element\n domNode.focus();\n }\n };\n }\n}\nfunction ScrollAndFocusHandler(param) {\n let { segmentPath, children } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n if (!context) {\n throw new Error(\"invariant global layout router not mounted\");\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(InnerScrollAndFocusHandler, {\n segmentPath: segmentPath,\n focusAndScrollRef: context.focusAndScrollRef,\n children: children\n });\n}\n/**\n * InnerLayoutRouter handles rendering the provided segment based on the cache.\n */ function InnerLayoutRouter(param) {\n let { parallelRouterKey, url, childNodes, segmentPath, tree, // isActive,\n cacheKey } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n if (!context) {\n throw new Error(\"invariant global layout router not mounted\");\n }\n const { buildId, changeByServerResponse, tree: fullTree } = context;\n // Read segment path from the parallel router cache node.\n let childNode = childNodes.get(cacheKey);\n // When data is not available during rendering client-side we need to fetch\n // it from the server.\n if (childNode === undefined) {\n const newLazyCacheNode = {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n head: null,\n parallelRoutes: new Map(),\n lazyDataResolved: false\n };\n /**\n * Flight data fetch kicked off during render and put into the cache.\n */ childNode = newLazyCacheNode;\n childNodes.set(cacheKey, newLazyCacheNode);\n }\n // `rsc` represents the renderable node for this segment.\n // If this segment has a `prefetchRsc`, it's the statically prefetched data.\n // We should use that on initial render instead of `rsc`. Then we'll switch\n // to `rsc` when the dynamic response streams in.\n //\n // If no prefetch data is available, then we go straight to rendering `rsc`.\n const resolvedPrefetchRsc = childNode.prefetchRsc !== null ? childNode.prefetchRsc : childNode.rsc;\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n //\n // @ts-expect-error The second argument to `useDeferredValue` is only\n // available in the experimental builds. When its disabled, it will always\n // return `rsc`.\n const rsc = (0, _react.useDeferredValue)(childNode.rsc, resolvedPrefetchRsc);\n // `rsc` is either a React node or a promise for a React node, except we\n // special case `null` to represent that this segment's data is missing. If\n // it's a promise, we need to unwrap it so we can determine whether or not the\n // data is missing.\n const resolvedRsc = typeof rsc === \"object\" && rsc !== null && typeof rsc.then === \"function\" ? (0, _react.use)(rsc) : rsc;\n if (!resolvedRsc) {\n // The data for this segment is not available, and there's no pending\n // navigation that will be able to fulfill it. We need to fetch more from\n // the server and patch the cache.\n // Check if there's already a pending request.\n let lazyData = childNode.lazyData;\n if (lazyData === null) {\n /**\n * Router state with refetch marker added\n */ // TODO-APP: remove ''\n const refetchTree = walkAddRefetch([\n \"\",\n ...segmentPath\n ], fullTree);\n childNode.lazyData = lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(url, location.origin), refetchTree, context.nextUrl, buildId);\n childNode.lazyDataResolved = false;\n }\n /**\n * Flight response data\n */ // When the data has not resolved yet `use` will suspend here.\n const [flightData, overrideCanonicalUrl] = (0, _react.use)(lazyData);\n if (!childNode.lazyDataResolved) {\n // setTimeout is used to start a new transition during render, this is an intentional hack around React.\n setTimeout(()=>{\n (0, _react.startTransition)(()=>{\n changeByServerResponse(fullTree, flightData, overrideCanonicalUrl);\n });\n });\n // It's important that we mark this as resolved, in case this branch is replayed, we don't want to continously re-apply\n // the patch to the tree.\n childNode.lazyDataResolved = true;\n }\n // Suspend infinitely as `changeByServerResponse` will cause a different part of the tree to be rendered.\n (0, _react.use)((0, _infinitepromise.createInfinitePromise)());\n }\n // If we get to this point, then we know we have something we can render.\n const subtree = /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.LayoutRouterContext.Provider, {\n value: {\n tree: tree[1][parallelRouterKey],\n childNodes: childNode.parallelRoutes,\n // TODO-APP: overriding of url for parallel routes\n url: url\n },\n children: resolvedRsc\n });\n // Ensure root layout is not wrapped in a div as the root layout renders `<html>`\n return subtree;\n}\n/**\n * Renders suspense boundary with the provided \"loading\" property as the fallback.\n * If no loading property is provided it renders the children without a suspense boundary.\n */ function LoadingBoundary(param) {\n let { children, loading, loadingStyles, loadingScripts, hasLoading } = param;\n if (hasLoading) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Suspense, {\n fallback: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n loadingStyles,\n loadingScripts,\n loading\n ]\n }),\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\nfunction OuterLayoutRouter(param) {\n let { parallelRouterKey, segmentPath, error, errorStyles, errorScripts, templateStyles, templateScripts, loading, loadingStyles, loadingScripts, hasLoading, template, notFound, notFoundStyles, styles } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.LayoutRouterContext);\n if (!context) {\n throw new Error(\"invariant expected layout router to be mounted\");\n }\n const { childNodes, tree, url } = context;\n // Get the current parallelRouter cache node\n let childNodesForParallelRouter = childNodes.get(parallelRouterKey);\n // If the parallel router cache node does not exist yet, create it.\n // This writes to the cache when there is no item in the cache yet. It never *overwrites* existing cache items which is why it's safe in concurrent mode.\n if (!childNodesForParallelRouter) {\n childNodesForParallelRouter = new Map();\n childNodes.set(parallelRouterKey, childNodesForParallelRouter);\n }\n // Get the active segment in the tree\n // The reason arrays are used in the data format is that these are transferred from the server to the browser so it's optimized to save bytes.\n const treeSegment = tree[1][parallelRouterKey][0];\n // If segment is an array it's a dynamic route and we want to read the dynamic route value as the segment to get from the cache.\n const currentChildSegmentValue = (0, _getsegmentvalue.getSegmentValue)(treeSegment);\n /**\n * Decides which segments to keep rendering, all segments that are not active will be wrapped in `<Offscreen>`.\n */ // TODO-APP: Add handling of `<Offscreen>` when it's available.\n const preservedSegments = [\n treeSegment\n ];\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n styles,\n preservedSegments.map((preservedSegment)=>{\n const preservedSegmentValue = (0, _getsegmentvalue.getSegmentValue)(preservedSegment);\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(preservedSegment);\n return(/*\n - Error boundary\n - Only renders error boundary if error component is provided.\n - Rendered for each segment to ensure they have their own error state.\n - Loading boundary\n - Only renders suspense boundary if loading components is provided.\n - Rendered for each segment to ensure they have their own loading state.\n - Passed to the router during rendering to ensure it can be immediately rendered when suspending on a Flight fetch.\n */ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_approutercontextsharedruntime.TemplateContext.Provider, {\n value: /*#__PURE__*/ (0, _jsxruntime.jsx)(ScrollAndFocusHandler, {\n segmentPath: segmentPath,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.ErrorBoundary, {\n errorComponent: error,\n errorStyles: errorStyles,\n errorScripts: errorScripts,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(LoadingBoundary, {\n hasLoading: hasLoading,\n loading: loading,\n loadingStyles: loadingStyles,\n loadingScripts: loadingScripts,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_notfoundboundary.NotFoundBoundary, {\n notFound: notFound,\n notFoundStyles: notFoundStyles,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_redirectboundary.RedirectBoundary, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(InnerLayoutRouter, {\n parallelRouterKey: parallelRouterKey,\n url: url,\n tree: tree,\n childNodes: childNodesForParallelRouter,\n segmentPath: segmentPath,\n cacheKey: cacheKey,\n isActive: currentChildSegmentValue === preservedSegmentValue\n })\n })\n })\n })\n })\n }),\n children: [\n templateStyles,\n templateScripts,\n template\n ]\n }, (0, _createroutercachekey.createRouterCacheKey)(preservedSegment, true)));\n })\n ]\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=layout-router.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2xheW91dC1yb3V0ZXIuanMiLCJtYXBwaW5ncyI6InFEQUVhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FHZTtJQUNYSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxrSEFBeUM7QUFDbEYsTUFBTUMsNEJBQTRCRCxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUUsY0FBY0YsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1HLFNBQVMsV0FBVyxHQUFHRiwwQkFBMEJHLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTUssWUFBWSxXQUFXLEdBQUdOLHlCQUF5QkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxnSEFBVztBQUM5RSxNQUFNTSxpQ0FBaUNOLG1CQUFPQSxDQUFDLHVLQUFvRDtBQUNuRyxNQUFNTyx1QkFBdUJQLG1CQUFPQSxDQUFDLHdJQUF3QztBQUM3RSxNQUFNUSxtQkFBbUJSLG1CQUFPQSxDQUFDLGdHQUFvQjtBQUNyRCxNQUFNUyxpQkFBaUJULG1CQUFPQSxDQUFDLDRGQUFrQjtBQUNqRCxNQUFNVSxpQkFBaUJWLG1CQUFPQSxDQUFDLDRGQUFrQjtBQUNqRCxNQUFNVyxzQkFBc0JYLG1CQUFPQSxDQUFDLDBJQUFvRDtBQUN4RixNQUFNWSxvQkFBb0JaLG1CQUFPQSxDQUFDLGtHQUFxQjtBQUN2RCxNQUFNYSxvQkFBb0JiLG1CQUFPQSxDQUFDLG9HQUFzQjtBQUN4RCxNQUFNYyxtQkFBbUJkLG1CQUFPQSxDQUFDLGtKQUE2QztBQUM5RSxNQUFNZSx3QkFBd0JmLG1CQUFPQSxDQUFDLDRJQUEwQztBQUNoRjs7O0NBR0MsR0FBRyxTQUFTZ0IsZUFBZUMsaUJBQWlCLEVBQUVDLGNBQWM7SUFDekQsSUFBSUQsbUJBQW1CO1FBQ25CLE1BQU0sQ0FBQ0UsU0FBU0MsaUJBQWlCLEdBQUdIO1FBQ3BDLE1BQU1JLFNBQVNKLGtCQUFrQkssTUFBTSxLQUFLO1FBQzVDLElBQUksQ0FBQyxHQUFHWixlQUFlYSxZQUFZLEVBQUVMLGNBQWMsQ0FBQyxFQUFFLEVBQUVDLFVBQVU7WUFDOUQsSUFBSUQsY0FBYyxDQUFDLEVBQUUsQ0FBQ00sY0FBYyxDQUFDSixtQkFBbUI7Z0JBQ3BELElBQUlDLFFBQVE7b0JBQ1IsTUFBTUksVUFBVVQsZUFBZVUsV0FBV1IsY0FBYyxDQUFDLEVBQUUsQ0FBQ0UsaUJBQWlCO29CQUM3RSxPQUFPO3dCQUNIRixjQUFjLENBQUMsRUFBRTt3QkFDakI7NEJBQ0ksR0FBR0EsY0FBYyxDQUFDLEVBQUU7NEJBQ3BCLENBQUNFLGlCQUFpQixFQUFFO2dDQUNoQkssT0FBTyxDQUFDLEVBQUU7Z0NBQ1ZBLE9BQU8sQ0FBQyxFQUFFO2dDQUNWQSxPQUFPLENBQUMsRUFBRTtnQ0FDVjs2QkFDSDt3QkFDTDtxQkFDSDtnQkFDTDtnQkFDQSxPQUFPO29CQUNIUCxjQUFjLENBQUMsRUFBRTtvQkFDakI7d0JBQ0ksR0FBR0EsY0FBYyxDQUFDLEVBQUU7d0JBQ3BCLENBQUNFLGlCQUFpQixFQUFFSixlQUFlQyxrQkFBa0JVLEtBQUssQ0FBQyxJQUFJVCxjQUFjLENBQUMsRUFBRSxDQUFDRSxpQkFBaUI7b0JBQ3RHO2lCQUNIO1lBQ0w7UUFDSjtJQUNKO0lBQ0EsT0FBT0Y7QUFDWDtBQUNBLDRGQUE0RjtBQUM1Rjs7Q0FFQyxHQUFHLFNBQVNVLFlBQVlDLFFBQVE7SUFDN0IsK0JBQStCO0lBQy9CLElBQUksSUFBNkIsRUFBRSxPQUFPO0lBQzFDLHdEQUF3RDtJQUN4RCxJQUFJQyxJQUFxQyxFQUFFO1FBQ3ZDLE1BQU1DLHVCQUF1QkMsUUFBUUMsS0FBSztRQUMxQyxJQUFJO1lBQ0FELFFBQVFDLEtBQUssR0FBRztnQkFDWixJQUFJLElBQUlDLE9BQU9DLFVBQVViLE1BQU0sRUFBRWMsV0FBVyxJQUFJQyxNQUFNSCxPQUFPSSxPQUFPLEdBQUdBLE9BQU9KLE1BQU1JLE9BQU87b0JBQ3ZGRixRQUFRLENBQUNFLEtBQUssR0FBR0gsU0FBUyxDQUFDRyxLQUFLO2dCQUNwQztnQkFDQSw0REFBNEQ7Z0JBQzVELElBQUksQ0FBQ0YsUUFBUSxDQUFDLEVBQUUsQ0FBQ0csUUFBUSxDQUFDLDZDQUE2QztvQkFDbkVSLHdCQUF3Qks7Z0JBQzVCO1lBQ0o7WUFDQSxPQUFPL0IsVUFBVW1DLE9BQU8sQ0FBQ1osV0FBVyxDQUFDQztRQUN6QyxTQUFTO1lBQ0xHLFFBQVFDLEtBQUssR0FBR0Y7UUFDcEI7SUFDSjtJQUNBLE9BQU8xQixVQUFVbUMsT0FBTyxDQUFDWixXQUFXLENBQUNDO0FBQ3pDO0FBQ0EsTUFBTVksaUJBQWlCO0lBQ25CO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDSDtBQUNEOztDQUVDLEdBQUcsU0FBU0Msa0JBQWtCQyxPQUFPO0lBQ2xDLGtHQUFrRztJQUNsRywwRkFBMEY7SUFDMUYsbURBQW1EO0lBQ25ELElBQUk7UUFDQTtRQUNBO0tBQ0gsQ0FBQ0osUUFBUSxDQUFDSyxpQkFBaUJELFNBQVNFLFFBQVEsR0FBRztRQUM1QyxJQUFJZixJQUFzQyxFQUFFO1lBQ3hDRSxRQUFRYyxJQUFJLENBQUMsNEZBQTRGSDtRQUM3RztRQUNBLE9BQU87SUFDWDtJQUNBLDJGQUEyRjtJQUMzRix3REFBd0Q7SUFDeEQsTUFBTUksT0FBT0osUUFBUUsscUJBQXFCO0lBQzFDLE9BQU9QLGVBQWVRLEtBQUssQ0FBQyxDQUFDQyxPQUFPSCxJQUFJLENBQUNHLEtBQUssS0FBSztBQUN2RDtBQUNBOztDQUVDLEdBQUcsU0FBU0MsdUJBQXVCUixPQUFPLEVBQUVTLGNBQWM7SUFDdkQsTUFBTUwsT0FBT0osUUFBUUsscUJBQXFCO0lBQzFDLE9BQU9ELEtBQUtNLEdBQUcsSUFBSSxLQUFLTixLQUFLTSxHQUFHLElBQUlEO0FBQ3hDO0FBQ0E7Ozs7O0NBS0MsR0FBRyxTQUFTRSx1QkFBdUJDLFlBQVk7SUFDNUMsK0VBQStFO0lBQy9FLElBQUlBLGlCQUFpQixPQUFPO1FBQ3hCLE9BQU9DLFNBQVNDLElBQUk7SUFDeEI7SUFDQSxJQUFJQztJQUNKLHFGQUFxRjtJQUNyRixPQUFPLENBQUNBLDJCQUEyQkYsU0FBU0csY0FBYyxDQUFDSixhQUFZLEtBQU0sT0FBT0csMkJBQ3BGRixTQUFTSSxpQkFBaUIsQ0FBQ0wsYUFBYSxDQUFDLEVBQUU7QUFDL0M7QUFDQSxNQUFNTSxtQ0FBbUMxRCxPQUFPcUMsT0FBTyxDQUFDc0IsU0FBUztJQUM3REMsb0JBQW9CO1FBQ2hCLElBQUksQ0FBQ0MscUJBQXFCO0lBQzlCO0lBQ0FDLHFCQUFxQjtRQUNqQixzSkFBc0o7UUFDdEosSUFBSSxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssRUFBRTtZQUNwQyxJQUFJLENBQUNKLHFCQUFxQjtRQUM5QjtJQUNKO0lBQ0FLLFNBQVM7UUFDTCxPQUFPLElBQUksQ0FBQ0gsS0FBSyxDQUFDSSxRQUFRO0lBQzlCO0lBQ0FDLFlBQVksR0FBR0MsSUFBSSxDQUFDO1FBQ2hCLEtBQUssSUFBSUE7UUFDVCxJQUFJLENBQUNSLHFCQUFxQixHQUFHO1lBQ3pCLHFHQUFxRztZQUNyRyxNQUFNLEVBQUVHLGlCQUFpQixFQUFFTSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUNQLEtBQUs7WUFDckQsSUFBSUMsa0JBQWtCQyxLQUFLLEVBQUU7Z0JBQ3pCLHVFQUF1RTtnQkFDdkUsNkVBQTZFO2dCQUM3RSx3RUFBd0U7Z0JBQ3hFLElBQUlELGtCQUFrQk8sWUFBWSxDQUFDcEQsTUFBTSxLQUFLLEtBQUssQ0FBQzZDLGtCQUFrQk8sWUFBWSxDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsdUJBQXVCSCxZQUFZeEIsS0FBSyxDQUFDLENBQUM5QixTQUFTMEQsUUFBUSxDQUFDLEdBQUduRSxlQUFlYSxZQUFZLEVBQUVKLFNBQVN5RCxvQkFBb0IsQ0FBQ0MsTUFBTSxLQUFLO29CQUMxTjtnQkFDSjtnQkFDQSxJQUFJQyxVQUFVO2dCQUNkLE1BQU12QixlQUFlWSxrQkFBa0JaLFlBQVk7Z0JBQ25ELElBQUlBLGNBQWM7b0JBQ2R1QixVQUFVeEIsdUJBQXVCQztnQkFDckM7Z0JBQ0Esa0dBQWtHO2dCQUNsRyx5RUFBeUU7Z0JBQ3pFLElBQUksQ0FBQ3VCLFNBQVM7b0JBQ1ZBLFVBQVVsRCxZQUFZLElBQUk7Z0JBQzlCO2dCQUNBLHVHQUF1RztnQkFDdkcsSUFBSSxDQUFFa0QsQ0FBQUEsbUJBQW1CQyxPQUFNLEdBQUk7b0JBQy9CO2dCQUNKO2dCQUNBLDRGQUE0RjtnQkFDNUYsMkVBQTJFO2dCQUMzRSxNQUFNLENBQUVELENBQUFBLG1CQUFtQkUsV0FBVSxLQUFNdEMsa0JBQWtCb0MsU0FBUztvQkFDbEUsdUdBQXVHO29CQUN2RyxJQUFJQSxRQUFRRyxrQkFBa0IsS0FBSyxNQUFNO3dCQUNyQztvQkFDSjtvQkFDQUgsVUFBVUEsUUFBUUcsa0JBQWtCO2dCQUN4QztnQkFDQSw2RUFBNkU7Z0JBQzdFZCxrQkFBa0JDLEtBQUssR0FBRztnQkFDMUJELGtCQUFrQlosWUFBWSxHQUFHO2dCQUNqQ1ksa0JBQWtCTyxZQUFZLEdBQUcsRUFBRTtnQkFDbEMsSUFBRy9ELG9CQUFvQnVFLGtCQUFrQixFQUFFO29CQUN4Qyx1RUFBdUU7b0JBQ3ZFLElBQUkzQixjQUFjO3dCQUNkdUIsUUFBUUssY0FBYzt3QkFDdEI7b0JBQ0o7b0JBQ0Esb0ZBQW9GO29CQUNwRiw0Q0FBNEM7b0JBQzVDLE1BQU1DLGNBQWM1QixTQUFTNkIsZUFBZTtvQkFDNUMsTUFBTWpDLGlCQUFpQmdDLFlBQVlFLFlBQVk7b0JBQy9DLG9FQUFvRTtvQkFDcEUsSUFBSW5DLHVCQUF1QjJCLFNBQVMxQixpQkFBaUI7d0JBQ2pEO29CQUNKO29CQUNBLDJGQUEyRjtvQkFDM0Ysa0hBQWtIO29CQUNsSCxxSEFBcUg7b0JBQ3JILDZIQUE2SDtvQkFDN0hnQyxZQUFZRyxTQUFTLEdBQUc7b0JBQ3hCLG1GQUFtRjtvQkFDbkYsSUFBSSxDQUFDcEMsdUJBQXVCMkIsU0FBUzFCLGlCQUFpQjt3QkFDbEQwQixRQUFRSyxjQUFjO29CQUMxQjtnQkFDSixHQUFHO29CQUNDLG9EQUFvRDtvQkFDcERLLGlCQUFpQjtvQkFDakJDLGdCQUFnQnRCLGtCQUFrQnNCLGNBQWM7Z0JBQ3BEO2dCQUNBLHdFQUF3RTtnQkFDeEV0QixrQkFBa0JzQixjQUFjLEdBQUc7Z0JBQ25DLDJCQUEyQjtnQkFDM0JYLFFBQVFZLEtBQUs7WUFDakI7UUFDSjtJQUNKO0FBQ0o7QUFDQSxTQUFTQyxzQkFBc0JDLEtBQUs7SUFDaEMsSUFBSSxFQUFFbkIsV0FBVyxFQUFFSCxRQUFRLEVBQUUsR0FBR3NCO0lBQ2hDLE1BQU1DLFVBQVUsQ0FBQyxHQUFHMUYsT0FBTzJGLFVBQVUsRUFBRXhGLCtCQUErQnlGLHlCQUF5QjtJQUMvRixJQUFJLENBQUNGLFNBQVM7UUFDVixNQUFNLElBQUlHLE1BQU07SUFDcEI7SUFDQSxPQUFxQixXQUFILEdBQUksSUFBRzlGLFlBQVkrRixHQUFHLEVBQUVwQyw0QkFBNEI7UUFDbEVZLGFBQWFBO1FBQ2JOLG1CQUFtQjBCLFFBQVExQixpQkFBaUI7UUFDNUNHLFVBQVVBO0lBQ2Q7QUFDSjtBQUNBOztDQUVDLEdBQUcsU0FBUzRCLGtCQUFrQk4sS0FBSztJQUNoQyxJQUFJLEVBQUVPLGlCQUFpQixFQUFFQyxHQUFHLEVBQUVDLFVBQVUsRUFBRTVCLFdBQVcsRUFBRTZCLElBQUksRUFDM0QsWUFBWTtJQUNaQyxRQUFRLEVBQUUsR0FBR1g7SUFDYixNQUFNQyxVQUFVLENBQUMsR0FBRzFGLE9BQU8yRixVQUFVLEVBQUV4RiwrQkFBK0J5Rix5QkFBeUI7SUFDL0YsSUFBSSxDQUFDRixTQUFTO1FBQ1YsTUFBTSxJQUFJRyxNQUFNO0lBQ3BCO0lBQ0EsTUFBTSxFQUFFUSxPQUFPLEVBQUVDLHNCQUFzQixFQUFFSCxNQUFNSSxRQUFRLEVBQUUsR0FBR2I7SUFDNUQseURBQXlEO0lBQ3pELElBQUljLFlBQVlOLFdBQVd4RyxHQUFHLENBQUMwRztJQUMvQiwyRUFBMkU7SUFDM0Usc0JBQXNCO0lBQ3RCLElBQUlJLGNBQWNqRixXQUFXO1FBQ3pCLE1BQU1rRixtQkFBbUI7WUFDckJDLFVBQVU7WUFDVkMsS0FBSztZQUNMQyxhQUFhO1lBQ2JDLE1BQU07WUFDTkMsZ0JBQWdCLElBQUlDO1lBQ3BCQyxrQkFBa0I7UUFDdEI7UUFDQTs7S0FFSCxHQUFHUixZQUFZQztRQUNaUCxXQUFXZSxHQUFHLENBQUNiLFVBQVVLO0lBQzdCO0lBQ0EseURBQXlEO0lBQ3pELDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsaURBQWlEO0lBQ2pELEVBQUU7SUFDRiw0RUFBNEU7SUFDNUUsTUFBTVMsc0JBQXNCVixVQUFVSSxXQUFXLEtBQUssT0FBT0osVUFBVUksV0FBVyxHQUFHSixVQUFVRyxHQUFHO0lBQ2xHLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0Usc0NBQXNDO0lBQ3RDLEVBQUU7SUFDRixxRUFBcUU7SUFDckUsMEVBQTBFO0lBQzFFLGdCQUFnQjtJQUNoQixNQUFNQSxNQUFNLENBQUMsR0FBRzNHLE9BQU9tSCxnQkFBZ0IsRUFBRVgsVUFBVUcsR0FBRyxFQUFFTztJQUN4RCx3RUFBd0U7SUFDeEUsMkVBQTJFO0lBQzNFLDhFQUE4RTtJQUM5RSxtQkFBbUI7SUFDbkIsTUFBTUUsY0FBYyxPQUFPVCxRQUFRLFlBQVlBLFFBQVEsUUFBUSxPQUFPQSxJQUFJVSxJQUFJLEtBQUssYUFBYSxDQUFDLEdBQUdySCxPQUFPc0gsR0FBRyxFQUFFWCxPQUFPQTtJQUN2SCxJQUFJLENBQUNTLGFBQWE7UUFDZCxxRUFBcUU7UUFDckUseUVBQXlFO1FBQ3pFLGtDQUFrQztRQUNsQyw4Q0FBOEM7UUFDOUMsSUFBSVYsV0FBV0YsVUFBVUUsUUFBUTtRQUNqQyxJQUFJQSxhQUFhLE1BQU07WUFDbkI7O09BRUwsR0FBRyxzQkFBc0I7WUFDcEIsTUFBTWEsY0FBYzFHLGVBQWU7Z0JBQy9CO21CQUNHeUQ7YUFDTixFQUFFaUM7WUFDSEMsVUFBVUUsUUFBUSxHQUFHQSxXQUFXLENBQUMsR0FBR3RHLHFCQUFxQm9ILG1CQUFtQixFQUFFLElBQUlDLElBQUl4QixLQUFLeUIsU0FBU0MsTUFBTSxHQUFHSixhQUFhN0IsUUFBUWtDLE9BQU8sRUFBRXZCO1lBQzNJRyxVQUFVUSxnQkFBZ0IsR0FBRztRQUNqQztRQUNBOztLQUVILEdBQUcsOERBQThEO1FBQzlELE1BQU0sQ0FBQ2EsWUFBWUMscUJBQXFCLEdBQUcsQ0FBQyxHQUFHOUgsT0FBT3NILEdBQUcsRUFBRVo7UUFDM0QsSUFBSSxDQUFDRixVQUFVUSxnQkFBZ0IsRUFBRTtZQUM3Qix3R0FBd0c7WUFDeEdlLFdBQVc7Z0JBQ04sSUFBRy9ILE9BQU9nSSxlQUFlLEVBQUU7b0JBQ3hCMUIsdUJBQXVCQyxVQUFVc0IsWUFBWUM7Z0JBQ2pEO1lBQ0o7WUFDQSx1SEFBdUg7WUFDdkgseUJBQXlCO1lBQ3pCdEIsVUFBVVEsZ0JBQWdCLEdBQUc7UUFDakM7UUFDQSx5R0FBeUc7UUFDeEcsSUFBR2hILE9BQU9zSCxHQUFHLEVBQUUsQ0FBQyxHQUFHakgsaUJBQWlCNEgscUJBQXFCO0lBQzlEO0lBQ0EseUVBQXlFO0lBQ3pFLE1BQU1DLFVBQ1EsV0FBSCxHQUFJLElBQUduSSxZQUFZK0YsR0FBRyxFQUFFM0YsK0JBQStCZ0ksbUJBQW1CLENBQUNDLFFBQVEsRUFBRTtRQUM1RjVJLE9BQU87WUFDSDJHLE1BQU1BLElBQUksQ0FBQyxFQUFFLENBQUNILGtCQUFrQjtZQUNoQ0UsWUFBWU0sVUFBVU0sY0FBYztZQUNwQyxrREFBa0Q7WUFDbERiLEtBQUtBO1FBQ1Q7UUFDQTlCLFVBQVVpRDtJQUNkO0lBQ0EsaUZBQWlGO0lBQ2pGLE9BQU9jO0FBQ1g7QUFDQTs7O0NBR0MsR0FBRyxTQUFTRyxnQkFBZ0I1QyxLQUFLO0lBQzlCLElBQUksRUFBRXRCLFFBQVEsRUFBRW1FLE9BQU8sRUFBRUMsYUFBYSxFQUFFQyxjQUFjLEVBQUVDLFVBQVUsRUFBRSxHQUFHaEQ7SUFDdkUsSUFBSWdELFlBQVk7UUFDWixPQUFxQixXQUFILEdBQUksSUFBRzFJLFlBQVkrRixHQUFHLEVBQUU5RixPQUFPMEksUUFBUSxFQUFFO1lBQ3ZEQyxVQUF3QixXQUFILEdBQUksSUFBRzVJLFlBQVk2SSxJQUFJLEVBQUU3SSxZQUFZOEksUUFBUSxFQUFFO2dCQUNoRTFFLFVBQVU7b0JBQ05vRTtvQkFDQUM7b0JBQ0FGO2lCQUNIO1lBQ0w7WUFDQW5FLFVBQVVBO1FBQ2Q7SUFDSjtJQUNBLE9BQXFCLFdBQUgsR0FBSSxJQUFHcEUsWUFBWStGLEdBQUcsRUFBRS9GLFlBQVk4SSxRQUFRLEVBQUU7UUFDNUQxRSxVQUFVQTtJQUNkO0FBQ0o7QUFDQSxTQUFTeEUsa0JBQWtCOEYsS0FBSztJQUM1QixJQUFJLEVBQUVPLGlCQUFpQixFQUFFMUIsV0FBVyxFQUFFeEMsS0FBSyxFQUFFZ0gsV0FBVyxFQUFFQyxZQUFZLEVBQUVDLGNBQWMsRUFBRUMsZUFBZSxFQUFFWCxPQUFPLEVBQUVDLGFBQWEsRUFBRUMsY0FBYyxFQUFFQyxVQUFVLEVBQUVTLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyxjQUFjLEVBQUVDLE1BQU0sRUFBRSxHQUFHNUQ7SUFDNU0sTUFBTUMsVUFBVSxDQUFDLEdBQUcxRixPQUFPMkYsVUFBVSxFQUFFeEYsK0JBQStCZ0ksbUJBQW1CO0lBQ3pGLElBQUksQ0FBQ3pDLFNBQVM7UUFDVixNQUFNLElBQUlHLE1BQU07SUFDcEI7SUFDQSxNQUFNLEVBQUVLLFVBQVUsRUFBRUMsSUFBSSxFQUFFRixHQUFHLEVBQUUsR0FBR1A7SUFDbEMsNENBQTRDO0lBQzVDLElBQUk0RCw4QkFBOEJwRCxXQUFXeEcsR0FBRyxDQUFDc0c7SUFDakQsbUVBQW1FO0lBQ25FLHlKQUF5SjtJQUN6SixJQUFJLENBQUNzRCw2QkFBNkI7UUFDOUJBLDhCQUE4QixJQUFJdkM7UUFDbENiLFdBQVdlLEdBQUcsQ0FBQ2pCLG1CQUFtQnNEO0lBQ3RDO0lBQ0EscUNBQXFDO0lBQ3JDLDhJQUE4STtJQUM5SSxNQUFNQyxjQUFjcEQsSUFBSSxDQUFDLEVBQUUsQ0FBQ0gsa0JBQWtCLENBQUMsRUFBRTtJQUNqRCxnSUFBZ0k7SUFDaEksTUFBTXdELDJCQUEyQixDQUFDLEdBQUc3SSxpQkFBaUI4SSxlQUFlLEVBQUVGO0lBQ3ZFOztHQUVELEdBQUcsK0RBQStEO0lBQ2pFLE1BQU1HLG9CQUFvQjtRQUN0Qkg7S0FDSDtJQUNELE9BQXFCLFdBQUgsR0FBSSxJQUFHeEosWUFBWTZJLElBQUksRUFBRTdJLFlBQVk4SSxRQUFRLEVBQUU7UUFDN0QxRSxVQUFVO1lBQ05rRjtZQUNBSyxrQkFBa0JDLEdBQUcsQ0FBQyxDQUFDQztnQkFDbkIsTUFBTUMsd0JBQXdCLENBQUMsR0FBR2xKLGlCQUFpQjhJLGVBQWUsRUFBRUc7Z0JBQ3BFLE1BQU14RCxXQUFXLENBQUMsR0FBR3hGLHNCQUFzQmtKLG9CQUFvQixFQUFFRjtnQkFDakUsT0FRVzs7Ozs7Ozs7VUFBakIsR0FBRyxXQUFXLEdBQUksSUFBRzdKLFlBQVk2SSxJQUFJLEVBQUV6SSwrQkFBK0I0SixlQUFlLENBQUMzQixRQUFRLEVBQUU7b0JBQ3RGNUksT0FBcUIsV0FBSCxHQUFJLElBQUdPLFlBQVkrRixHQUFHLEVBQUVOLHVCQUF1Qjt3QkFDN0RsQixhQUFhQTt3QkFDYkgsVUFBd0IsV0FBSCxHQUFJLElBQUdwRSxZQUFZK0YsR0FBRyxFQUFFeEYsZUFBZTBKLGFBQWEsRUFBRTs0QkFDdkVDLGdCQUFnQm5JOzRCQUNoQmdILGFBQWFBOzRCQUNiQyxjQUFjQTs0QkFDZDVFLFVBQXdCLFdBQUgsR0FBSSxJQUFHcEUsWUFBWStGLEdBQUcsRUFBRXVDLGlCQUFpQjtnQ0FDMURJLFlBQVlBO2dDQUNaSCxTQUFTQTtnQ0FDVEMsZUFBZUE7Z0NBQ2ZDLGdCQUFnQkE7Z0NBQ2hCckUsVUFBd0IsV0FBSCxHQUFJLElBQUdwRSxZQUFZK0YsR0FBRyxFQUFFcEYsa0JBQWtCd0osZ0JBQWdCLEVBQUU7b0NBQzdFZixVQUFVQTtvQ0FDVkMsZ0JBQWdCQTtvQ0FDaEJqRixVQUF3QixXQUFILEdBQUksSUFBR3BFLFlBQVkrRixHQUFHLEVBQUVyRixrQkFBa0IwSixnQkFBZ0IsRUFBRTt3Q0FDN0VoRyxVQUF3QixXQUFILEdBQUksSUFBR3BFLFlBQVkrRixHQUFHLEVBQUVDLG1CQUFtQjs0Q0FDNURDLG1CQUFtQkE7NENBQ25CQyxLQUFLQTs0Q0FDTEUsTUFBTUE7NENBQ05ELFlBQVlvRDs0Q0FDWmhGLGFBQWFBOzRDQUNiOEIsVUFBVUE7NENBQ1ZnRSxVQUFVWiw2QkFBNkJLO3dDQUMzQztvQ0FDSjtnQ0FDSjs0QkFDSjt3QkFDSjtvQkFDSjtvQkFDQTFGLFVBQVU7d0JBQ042RTt3QkFDQUM7d0JBQ0FDO3FCQUNIO2dCQUNMLEdBQUcsQ0FBQyxHQUFHdEksc0JBQXNCa0osb0JBQW9CLEVBQUVGLGtCQUFrQjtZQUN6RTtTQUNIO0lBQ0w7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPckssUUFBUThDLE9BQU8sS0FBSyxjQUFlLE9BQU85QyxRQUFROEMsT0FBTyxLQUFLLFlBQVk5QyxRQUFROEMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPOUMsUUFBUThDLE9BQU8sQ0FBQ2dJLFVBQVUsS0FBSyxhQUFhO0lBQ3JLaEwsT0FBT0MsY0FBYyxDQUFDQyxRQUFROEMsT0FBTyxFQUFFLGNBQWM7UUFBRTdDLE9BQU87SUFBSztJQUNuRUgsT0FBT2lMLE1BQU0sQ0FBQy9LLFFBQVE4QyxPQUFPLEVBQUU5QztJQUMvQmdMLE9BQU9oTCxPQUFPLEdBQUdBLFFBQVE4QyxPQUFPO0FBQ2xDLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbGF5b3V0LXJvdXRlci5qcz8wYmZhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAvKipcbiAqIE91dGVyTGF5b3V0Um91dGVyIGhhbmRsZXMgdGhlIGN1cnJlbnQgc2VnbWVudCBhcyB3ZWxsIGFzIDxPZmZzY3JlZW4+IHJlbmRlcmluZyBvZiBvdGhlciBzZWdtZW50cy5cbiAqIEl0IGNhbiBiZSByZW5kZXJlZCBuZXh0IHRvIGVhY2ggb3RoZXIgd2l0aCBhIGRpZmZlcmVudCBgcGFyYWxsZWxSb3V0ZXJLZXlgLCBhbGxvd2luZyBmb3IgUGFyYWxsZWwgcm91dGVzLlxuICovIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gT3V0ZXJMYXlvdXRSb3V0ZXI7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX3JlYWN0ZG9tID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcbmNvbnN0IF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmNvbnN0IF9mZXRjaHNlcnZlcnJlc3BvbnNlID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXIvZmV0Y2gtc2VydmVyLXJlc3BvbnNlXCIpO1xuY29uc3QgX2luZmluaXRlcHJvbWlzZSA9IHJlcXVpcmUoXCIuL2luZmluaXRlLXByb21pc2VcIik7XG5jb25zdCBfZXJyb3Jib3VuZGFyeSA9IHJlcXVpcmUoXCIuL2Vycm9yLWJvdW5kYXJ5XCIpO1xuY29uc3QgX21hdGNoc2VnbWVudHMgPSByZXF1aXJlKFwiLi9tYXRjaC1zZWdtZW50c1wiKTtcbmNvbnN0IF9oYW5kbGVzbW9vdGhzY3JvbGwgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaGFuZGxlLXNtb290aC1zY3JvbGxcIik7XG5jb25zdCBfcmVkaXJlY3Rib3VuZGFyeSA9IHJlcXVpcmUoXCIuL3JlZGlyZWN0LWJvdW5kYXJ5XCIpO1xuY29uc3QgX25vdGZvdW5kYm91bmRhcnkgPSByZXF1aXJlKFwiLi9ub3QtZm91bmQtYm91bmRhcnlcIik7XG5jb25zdCBfZ2V0c2VnbWVudHZhbHVlID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZ2V0LXNlZ21lbnQtdmFsdWVcIik7XG5jb25zdCBfY3JlYXRlcm91dGVyY2FjaGVrZXkgPSByZXF1aXJlKFwiLi9yb3V0ZXItcmVkdWNlci9jcmVhdGUtcm91dGVyLWNhY2hlLWtleVwiKTtcbi8qKlxuICogQWRkIHJlZmV0Y2ggbWFya2VyIHRvIHJvdXRlciBzdGF0ZSBhdCB0aGUgcG9pbnQgb2YgdGhlIGN1cnJlbnQgbGF5b3V0IHNlZ21lbnQuXG4gKiBUaGlzIGVuc3VyZXMgdGhlIHJlc3BvbnNlIHJldHVybmVkIGlzIG5vdCBmdXJ0aGVyIGRvd24gdGhhbiB0aGUgY3VycmVudCBsYXlvdXQgc2VnbWVudC5cbiAqLyBmdW5jdGlvbiB3YWxrQWRkUmVmZXRjaChzZWdtZW50UGF0aFRvV2FsaywgdHJlZVRvUmVjcmVhdGUpIHtcbiAgICBpZiAoc2VnbWVudFBhdGhUb1dhbGspIHtcbiAgICAgICAgY29uc3QgW3NlZ21lbnQsIHBhcmFsbGVsUm91dGVLZXldID0gc2VnbWVudFBhdGhUb1dhbGs7XG4gICAgICAgIGNvbnN0IGlzTGFzdCA9IHNlZ21lbnRQYXRoVG9XYWxrLmxlbmd0aCA9PT0gMjtcbiAgICAgICAgaWYgKCgwLCBfbWF0Y2hzZWdtZW50cy5tYXRjaFNlZ21lbnQpKHRyZWVUb1JlY3JlYXRlWzBdLCBzZWdtZW50KSkge1xuICAgICAgICAgICAgaWYgKHRyZWVUb1JlY3JlYXRlWzFdLmhhc093blByb3BlcnR5KHBhcmFsbGVsUm91dGVLZXkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTGFzdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJUcmVlID0gd2Fsa0FkZFJlZmV0Y2godW5kZWZpbmVkLCB0cmVlVG9SZWNyZWF0ZVsxXVtwYXJhbGxlbFJvdXRlS2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlVG9SZWNyZWF0ZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50cmVlVG9SZWNyZWF0ZVsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyYWxsZWxSb3V0ZUtleV06IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViVHJlZVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViVHJlZVsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViVHJlZVsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWZldGNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHRyZWVUb1JlY3JlYXRlWzBdLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50cmVlVG9SZWNyZWF0ZVsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJhbGxlbFJvdXRlS2V5XTogd2Fsa0FkZFJlZmV0Y2goc2VnbWVudFBhdGhUb1dhbGsuc2xpY2UoMiksIHRyZWVUb1JlY3JlYXRlWzFdW3BhcmFsbGVsUm91dGVLZXldKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJlZVRvUmVjcmVhdGU7XG59XG4vLyBUT0RPLUFQUDogUmVwbGFjZSB3aXRoIG5ldyBSZWFjdCBBUEkgZm9yIGZpbmRpbmcgZG9tIG5vZGVzIHdpdGhvdXQgYSBgcmVmYCB3aGVuIGF2YWlsYWJsZVxuLyoqXG4gKiBXcmFwcyBSZWFjdERPTS5maW5kRE9NTm9kZSB3aXRoIGFkZGl0aW9uYWwgbG9naWMgdG8gaGlkZSBSZWFjdCBTdHJpY3QgTW9kZSB3YXJuaW5nXG4gKi8gZnVuY3Rpb24gZmluZERPTU5vZGUoaW5zdGFuY2UpIHtcbiAgICAvLyBUcmVlLXNoYWtlIGZvciBzZXJ2ZXIgYnVuZGxlXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBudWxsO1xuICAgIC8vIE9ubHkgYXBwbHkgc3RyaWN0IG1vZGUgd2FybmluZyB3aGVuIG5vdCBpbiBwcm9kdWN0aW9uXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWVzc2FnZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElnbm9yZSBzdHJpY3QgbW9kZSB3YXJuaW5nIGZvciB0aGUgZmluZERvbU5vZGUgY2FsbCBiZWxvd1xuICAgICAgICAgICAgICAgIGlmICghbWVzc2FnZXNbMF0uaW5jbHVkZXMoXCJXYXJuaW5nOiAlcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsQ29uc29sZUVycm9yKC4uLm1lc3NhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIF9yZWFjdGRvbS5kZWZhdWx0LmZpbmRET01Ob2RlKGluc3RhbmNlKTtcbiAgICAgICAgfSBmaW5hbGx5e1xuICAgICAgICAgICAgY29uc29sZS5lcnJvciA9IG9yaWdpbmFsQ29uc29sZUVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfcmVhY3Rkb20uZGVmYXVsdC5maW5kRE9NTm9kZShpbnN0YW5jZSk7XG59XG5jb25zdCByZWN0UHJvcGVydGllcyA9IFtcbiAgICBcImJvdHRvbVwiLFxuICAgIFwiaGVpZ2h0XCIsXG4gICAgXCJsZWZ0XCIsXG4gICAgXCJyaWdodFwiLFxuICAgIFwidG9wXCIsXG4gICAgXCJ3aWR0aFwiLFxuICAgIFwieFwiLFxuICAgIFwieVwiXG5dO1xuLyoqXG4gKiBDaGVjayBpZiBhIEhUTUxFbGVtZW50IGlzIGhpZGRlbiBvciBmaXhlZC9zdGlja3kgcG9zaXRpb25cbiAqLyBmdW5jdGlvbiBzaG91bGRTa2lwRWxlbWVudChlbGVtZW50KSB7XG4gICAgLy8gd2UgaWdub3JlIGZpeGVkIG9yIHN0aWNreSBwb3NpdGlvbmVkIGVsZW1lbnRzIHNpbmNlIHRoZXknbGwgbGlrZWx5IHBhc3MgdGhlIFwiaW4tdmlld3BvcnRcIiBjaGVja1xuICAgIC8vIGFuZCB3aWxsIHJlc3VsdCBpbiBhIHNpdHVhdGlvbiB3ZSBiYWlsIG9uIHNjcm9sbCBiZWNhdXNlIG9mIHNvbWV0aGluZyBsaWtlIGEgZml4ZWQgbmF2LFxuICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBhY3R1YWwgcGFnZSBjb250ZW50IGlzIG9mZnNjcmVlblxuICAgIGlmIChbXG4gICAgICAgIFwic3RpY2t5XCIsXG4gICAgICAgIFwiZml4ZWRcIlxuICAgIF0uaW5jbHVkZXMoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlNraXBwaW5nIGF1dG8tc2Nyb2xsIGJlaGF2aW9yIGR1ZSB0byBgcG9zaXRpb246IHN0aWNreWAgb3IgYHBvc2l0aW9uOiBmaXhlZGAgb24gZWxlbWVudDpcIiwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIFVzZXMgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGAgdG8gY2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgaGlkZGVuIGluc3RlYWQgb2YgYG9mZnNldFBhcmVudGBcbiAgICAvLyBiZWNhdXNlIGBvZmZzZXRQYXJlbnRgIGRvZXNuJ3QgY29uc2lkZXIgZG9jdW1lbnQvYm9keVxuICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiByZWN0UHJvcGVydGllcy5ldmVyeSgoaXRlbSk9PnJlY3RbaXRlbV0gPT09IDApO1xufVxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdG9wIGNvcm5lciBvZiB0aGUgSFRNTEVsZW1lbnQgaXMgaW4gdGhlIHZpZXdwb3J0LlxuICovIGZ1bmN0aW9uIHRvcE9mRWxlbWVudEluVmlld3BvcnQoZWxlbWVudCwgdmlld3BvcnRIZWlnaHQpIHtcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gcmVjdC50b3AgPj0gMCAmJiByZWN0LnRvcCA8PSB2aWV3cG9ydEhlaWdodDtcbn1cbi8qKlxuICogRmluZCB0aGUgRE9NIG5vZGUgZm9yIGEgaGFzaCBmcmFnbWVudC5cbiAqIElmIGB0b3BgIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIHRvcCBvZiB0aGUgcGFnZS4gVGhpcyBtaXJyb3JzIHRoZSBicm93c2VyJ3MgYmVoYXZpb3IuXG4gKiBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhbiBpZCwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCB3aXRoIHRoYXQgaWQuXG4gKiBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhIG5hbWUsIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIGZpcnN0IGVsZW1lbnQgd2l0aCB0aGF0IG5hbWUuXG4gKi8gZnVuY3Rpb24gZ2V0SGFzaEZyYWdtZW50RG9tTm9kZShoYXNoRnJhZ21lbnQpIHtcbiAgICAvLyBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBgdG9wYCB0aGUgcGFnZSBoYXMgdG8gc2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIHBhZ2UuXG4gICAgaWYgKGhhc2hGcmFnbWVudCA9PT0gXCJ0b3BcIikge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbiAgICB9XG4gICAgdmFyIF9kb2N1bWVudF9nZXRFbGVtZW50QnlJZDtcbiAgICAvLyBJZiB0aGUgaGFzaCBmcmFnbWVudCBpcyBhbiBpZCwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZWxlbWVudCB3aXRoIHRoYXQgaWQuXG4gICAgcmV0dXJuIChfZG9jdW1lbnRfZ2V0RWxlbWVudEJ5SWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoYXNoRnJhZ21lbnQpKSAhPSBudWxsID8gX2RvY3VtZW50X2dldEVsZW1lbnRCeUlkIDogLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYSBuYW1lLCB0aGUgcGFnZSBoYXMgdG8gc2Nyb2xsIHRvIHRoZSBmaXJzdCBlbGVtZW50IHdpdGggdGhhdCBuYW1lLlxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGhhc2hGcmFnbWVudClbMF07XG59XG5jbGFzcyBJbm5lclNjcm9sbEFuZEZvY3VzSGFuZGxlciBleHRlbmRzIF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudCB7XG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlUG90ZW50aWFsU2Nyb2xsKCk7XG4gICAgfVxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgICAgLy8gQmVjYXVzZSB0aGlzIHByb3BlcnR5IGlzIG92ZXJ3cml0dGVuIGluIGhhbmRsZVBvdGVudGlhbFNjcm9sbCBpdCdzIGZpbmUgdG8gYWx3YXlzIHJ1biBpdCB3aGVuIHRydWUgYXMgaXQnbGwgYmUgc2V0IHRvIGZhbHNlIGZvciBzdWJzZXF1ZW50IHJlbmRlcnMuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmZvY3VzQW5kU2Nyb2xsUmVmLmFwcGx5KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvdGVudGlhbFNjcm9sbCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVQb3RlbnRpYWxTY3JvbGwgPSAoKT0+e1xuICAgICAgICAgICAgLy8gSGFuZGxlIHNjcm9sbCBhbmQgZm9jdXMsIGl0J3Mgb25seSBhcHBsaWVkIG9uY2UgaW4gdGhlIGZpcnN0IHVzZUVmZmVjdCB0aGF0IHRyaWdnZXJzIHRoYXQgY2hhbmdlZC5cbiAgICAgICAgICAgIGNvbnN0IHsgZm9jdXNBbmRTY3JvbGxSZWYsIHNlZ21lbnRQYXRoIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICAgICAgaWYgKGZvY3VzQW5kU2Nyb2xsUmVmLmFwcGx5KSB7XG4gICAgICAgICAgICAgICAgLy8gc2VnbWVudFBhdGhzIGlzIGFuIGFycmF5IG9mIHNlZ21lbnQgcGF0aHMgdGhhdCBzaG91bGQgYmUgc2Nyb2xsZWQgdG9cbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBzZWdtZW50IHBhdGggaXMgbm90IGluIHRoZSBhcnJheSwgdGhlIHNjcm9sbCBpcyBub3QgYXBwbGllZFxuICAgICAgICAgICAgICAgIC8vIHVubGVzcyB0aGUgYXJyYXkgaXMgZW1wdHksIGluIHdoaWNoIGNhc2UgdGhlIHNjcm9sbCBpcyBhbHdheXMgYXBwbGllZFxuICAgICAgICAgICAgICAgIGlmIChmb2N1c0FuZFNjcm9sbFJlZi5zZWdtZW50UGF0aHMubGVuZ3RoICE9PSAwICYmICFmb2N1c0FuZFNjcm9sbFJlZi5zZWdtZW50UGF0aHMuc29tZSgoc2Nyb2xsUmVmU2VnbWVudFBhdGgpPT5zZWdtZW50UGF0aC5ldmVyeSgoc2VnbWVudCwgaW5kZXgpPT4oMCwgX21hdGNoc2VnbWVudHMubWF0Y2hTZWdtZW50KShzZWdtZW50LCBzY3JvbGxSZWZTZWdtZW50UGF0aFtpbmRleF0pKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgZG9tTm9kZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzaEZyYWdtZW50ID0gZm9jdXNBbmRTY3JvbGxSZWYuaGFzaEZyYWdtZW50O1xuICAgICAgICAgICAgICAgIGlmIChoYXNoRnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZSA9IGdldEhhc2hGcmFnbWVudERvbU5vZGUoaGFzaEZyYWdtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYGZpbmRET01Ob2RlYCBpcyB0cmlja3kgYmVjYXVzZSBpdCByZXR1cm5zIGp1c3QgdGhlIGZpcnN0IGNoaWxkIGlmIHRoZSBjb21wb25lbnQgaXMgYSBmcmFnbWVudC5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGFscmVhZHkgY2F1c2VkIGEgYnVnIHdoZXJlIHRoZSBmaXJzdCBjaGlsZCB3YXMgYSA8bGluay8+IGluIGhlYWQuXG4gICAgICAgICAgICAgICAgaWYgKCFkb21Ob2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBmaW5kRE9NTm9kZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gRE9NIG5vZGUgdGhpcyBsYXlvdXQtcm91dGVyIGxldmVsIGlzIHNraXBwZWQuIEl0J2xsIGJlIGhhbmRsZWQgaGlnaGVyLXVwIGluIHRoZSB0cmVlLlxuICAgICAgICAgICAgICAgIGlmICghKGRvbU5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFZlcmlmeSBpZiB0aGUgZWxlbWVudCBpcyBhIEhUTUxFbGVtZW50IGFuZCBpZiB3ZSB3YW50IHRvIGNvbnNpZGVyIGl0IGZvciBzY3JvbGwgYmVoYXZpb3IuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgc2tpcHBlZCwgdHJ5IHRvIHNlbGVjdCB0aGUgbmV4dCBzaWJsaW5nIGFuZCB0cnkgYWdhaW4uXG4gICAgICAgICAgICAgICAgd2hpbGUoIShkb21Ob2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHx8IHNob3VsZFNraXBFbGVtZW50KGRvbU5vZGUpKXtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gc2libGluZ3MgZm91bmQgdGhhdCBtYXRjaCB0aGUgY3JpdGVyaWEgYXJlIGZvdW5kLCBzbyBoYW5kbGUgc2Nyb2xsIGhpZ2hlciB1cCBpbiB0aGUgdHJlZSBpbnN0ZWFkLlxuICAgICAgICAgICAgICAgICAgICBpZiAoZG9tTm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlID0gZG9tTm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0YXRlIGlzIG11dGF0ZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvY3VzIGFuZCBzY3JvbGwgaXMgYXBwbGllZCBvbmx5IG9uY2UuXG4gICAgICAgICAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWYuYXBwbHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb2N1c0FuZFNjcm9sbFJlZi5oYXNoRnJhZ21lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLnNlZ21lbnRQYXRocyA9IFtdO1xuICAgICAgICAgICAgICAgICgwLCBfaGFuZGxlc21vb3Roc2Nyb2xsLmhhbmRsZVNtb290aFNjcm9sbCkoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBoYXNoIHNjcm9sbCwgd2Ugb25seSBuZWVkIHRvIHNjcm9sbCB0aGUgZWxlbWVudCBpbnRvIHZpZXdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc2hGcmFnbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9tTm9kZS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IHZpZXdwb3J0IGhlaWdodCBiZWNhdXNlIHJlYWRpbmcgYGNsaWVudEhlaWdodGAgY2F1c2VzIGEgcmVmbG93LFxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgaXQgd29uJ3QgY2hhbmdlIGR1cmluZyB0aGlzIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBodG1sRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50J3MgdG9wIGVkZ2UgaXMgYWxyZWFkeSBpbiB0aGUgdmlld3BvcnQsIGV4aXQgZWFybHkuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0b3BPZkVsZW1lbnRJblZpZXdwb3J0KGRvbU5vZGUsIHZpZXdwb3J0SGVpZ2h0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdHJ5IHNjcm9sbGluZyBnbyB0aGUgdG9wIG9mIHRoZSBkb2N1bWVudCB0byBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggcGFnZXNcbiAgICAgICAgICAgICAgICAgICAgLy8gc2Nyb2xsSW50b1ZpZXcoKSBjYWxsZWQgb24gYDxodG1sLz5gIGVsZW1lbnQgc2Nyb2xscyBob3Jpem9udGFsbHkgb24gY2hyb21lIGFuZCBmaXJlZm94ICh0aGF0IHNob3VsZG4ndCBoYXBwZW4pXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIHVzZSBpdCB0byBzY3JvbGwgaG9yaXpvbnRhbGx5IGZvbGxvd2luZyBSVEwgYnV0IHRoYXQgYWxzbyBzZWVtcyB0byBiZSBicm9rZW4gLSBpdCB3aWxsIGFsd2F5cyBzY3JvbGwgbGVmdFxuICAgICAgICAgICAgICAgICAgICAvLyBzY3JvbGxMZWZ0ID0gMCBhbHNvIHNlZW1zIHRvIGlnbm9yZSBSVEwgYW5kIG1hbnVhbGx5IGNoZWNraW5nIGZvciBSVEwgaXMgdG9vIG11Y2ggaGFzc2xlIHNvIHdlIHdpbGwgc2Nyb2xsIGp1c3QgdmVydGljYWxseVxuICAgICAgICAgICAgICAgICAgICBodG1sRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICAgICAgICAgICAgICAvLyBTY3JvbGwgdG8gZG9tTm9kZSBpZiBkb21Ob2RlIGlzIG5vdCBpbiB2aWV3cG9ydCB3aGVuIHNjcm9sbGVkIHRvIHRvcCBvZiBkb2N1bWVudFxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRvcE9mRWxlbWVudEluVmlld3BvcnQoZG9tTm9kZSwgdmlld3BvcnRIZWlnaHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb21Ob2RlLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgZm9yY2UgbGF5b3V0IGJ5IHF1ZXJ5aW5nIGRvbU5vZGUgcG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgZG9udEZvcmNlTGF5b3V0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBvbmx5SGFzaENoYW5nZTogZm9jdXNBbmRTY3JvbGxSZWYub25seUhhc2hDaGFuZ2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBNdXRhdGUgYWZ0ZXIgc2Nyb2xsaW5nIHNvIHRoYXQgaXQgY2FuIGJlIHJlYWQgYnkgYGhhbmRsZVNtb290aFNjcm9sbGBcbiAgICAgICAgICAgICAgICBmb2N1c0FuZFNjcm9sbFJlZi5vbmx5SGFzaENoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIFNldCBmb2N1cyBvbiB0aGUgZWxlbWVudFxuICAgICAgICAgICAgICAgIGRvbU5vZGUuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBTY3JvbGxBbmRGb2N1c0hhbmRsZXIocGFyYW0pIHtcbiAgICBsZXQgeyBzZWdtZW50UGF0aCwgY2hpbGRyZW4gfSA9IHBhcmFtO1xuICAgIGNvbnN0IGNvbnRleHQgPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5HbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0KTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YXJpYW50IGdsb2JhbCBsYXlvdXQgcm91dGVyIG5vdCBtb3VudGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShJbm5lclNjcm9sbEFuZEZvY3VzSGFuZGxlciwge1xuICAgICAgICBzZWdtZW50UGF0aDogc2VnbWVudFBhdGgsXG4gICAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmOiBjb250ZXh0LmZvY3VzQW5kU2Nyb2xsUmVmLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbn1cbi8qKlxuICogSW5uZXJMYXlvdXRSb3V0ZXIgaGFuZGxlcyByZW5kZXJpbmcgdGhlIHByb3ZpZGVkIHNlZ21lbnQgYmFzZWQgb24gdGhlIGNhY2hlLlxuICovIGZ1bmN0aW9uIElubmVyTGF5b3V0Um91dGVyKHBhcmFtKSB7XG4gICAgbGV0IHsgcGFyYWxsZWxSb3V0ZXJLZXksIHVybCwgY2hpbGROb2Rlcywgc2VnbWVudFBhdGgsIHRyZWUsIC8vIFRPRE8tQVBQOiBpbXBsZW1lbnQgYDxPZmZzY3JlZW4+YCB3aGVuIGF2YWlsYWJsZS5cbiAgICAvLyBpc0FjdGl2ZSxcbiAgICBjYWNoZUtleSB9ID0gcGFyYW07XG4gICAgY29uc3QgY29udGV4dCA9ICgwLCBfcmVhY3QudXNlQ29udGV4dCkoX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lLkdsb2JhbExheW91dFJvdXRlckNvbnRleHQpO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhcmlhbnQgZ2xvYmFsIGxheW91dCByb3V0ZXIgbm90IG1vdW50ZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHsgYnVpbGRJZCwgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSwgdHJlZTogZnVsbFRyZWUgfSA9IGNvbnRleHQ7XG4gICAgLy8gUmVhZCBzZWdtZW50IHBhdGggZnJvbSB0aGUgcGFyYWxsZWwgcm91dGVyIGNhY2hlIG5vZGUuXG4gICAgbGV0IGNoaWxkTm9kZSA9IGNoaWxkTm9kZXMuZ2V0KGNhY2hlS2V5KTtcbiAgICAvLyBXaGVuIGRhdGEgaXMgbm90IGF2YWlsYWJsZSBkdXJpbmcgcmVuZGVyaW5nIGNsaWVudC1zaWRlIHdlIG5lZWQgdG8gZmV0Y2hcbiAgICAvLyBpdCBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgaWYgKGNoaWxkTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG5ld0xhenlDYWNoZU5vZGUgPSB7XG4gICAgICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgICAgIHJzYzogbnVsbCxcbiAgICAgICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICAgICAgaGVhZDogbnVsbCxcbiAgICAgICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICAgICAgICBsYXp5RGF0YVJlc29sdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgKiBGbGlnaHQgZGF0YSBmZXRjaCBraWNrZWQgb2ZmIGR1cmluZyByZW5kZXIgYW5kIHB1dCBpbnRvIHRoZSBjYWNoZS5cbiAgICAgKi8gY2hpbGROb2RlID0gbmV3TGF6eUNhY2hlTm9kZTtcbiAgICAgICAgY2hpbGROb2Rlcy5zZXQoY2FjaGVLZXksIG5ld0xhenlDYWNoZU5vZGUpO1xuICAgIH1cbiAgICAvLyBgcnNjYCByZXByZXNlbnRzIHRoZSByZW5kZXJhYmxlIG5vZGUgZm9yIHRoaXMgc2VnbWVudC5cbiAgICAvLyBJZiB0aGlzIHNlZ21lbnQgaGFzIGEgYHByZWZldGNoUnNjYCwgaXQncyB0aGUgc3RhdGljYWxseSBwcmVmZXRjaGVkIGRhdGEuXG4gICAgLy8gV2Ugc2hvdWxkIHVzZSB0aGF0IG9uIGluaXRpYWwgcmVuZGVyIGluc3RlYWQgb2YgYHJzY2AuIFRoZW4gd2UnbGwgc3dpdGNoXG4gICAgLy8gdG8gYHJzY2Agd2hlbiB0aGUgZHluYW1pYyByZXNwb25zZSBzdHJlYW1zIGluLlxuICAgIC8vXG4gICAgLy8gSWYgbm8gcHJlZmV0Y2ggZGF0YSBpcyBhdmFpbGFibGUsIHRoZW4gd2UgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIGByc2NgLlxuICAgIGNvbnN0IHJlc29sdmVkUHJlZmV0Y2hSc2MgPSBjaGlsZE5vZGUucHJlZmV0Y2hSc2MgIT09IG51bGwgPyBjaGlsZE5vZGUucHJlZmV0Y2hSc2MgOiBjaGlsZE5vZGUucnNjO1xuICAgIC8vIFdlIHVzZSBgdXNlRGVmZXJyZWRWYWx1ZWAgdG8gaGFuZGxlIHN3aXRjaGluZyBiZXR3ZWVuIHRoZSBwcmVmZXRjaGVkIGFuZFxuICAgIC8vIGZpbmFsIHZhbHVlcy4gVGhlIHNlY29uZCBhcmd1bWVudCBpcyByZXR1cm5lZCBvbiBpbml0aWFsIHJlbmRlciwgdGhlbiBpdFxuICAgIC8vIHJlLXJlbmRlcnMgd2l0aCB0aGUgZmlyc3QgYXJndW1lbnQuXG4gICAgLy9cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYHVzZURlZmVycmVkVmFsdWVgIGlzIG9ubHlcbiAgICAvLyBhdmFpbGFibGUgaW4gdGhlIGV4cGVyaW1lbnRhbCBidWlsZHMuIFdoZW4gaXRzIGRpc2FibGVkLCBpdCB3aWxsIGFsd2F5c1xuICAgIC8vIHJldHVybiBgcnNjYC5cbiAgICBjb25zdCByc2MgPSAoMCwgX3JlYWN0LnVzZURlZmVycmVkVmFsdWUpKGNoaWxkTm9kZS5yc2MsIHJlc29sdmVkUHJlZmV0Y2hSc2MpO1xuICAgIC8vIGByc2NgIGlzIGVpdGhlciBhIFJlYWN0IG5vZGUgb3IgYSBwcm9taXNlIGZvciBhIFJlYWN0IG5vZGUsIGV4Y2VwdCB3ZVxuICAgIC8vIHNwZWNpYWwgY2FzZSBgbnVsbGAgdG8gcmVwcmVzZW50IHRoYXQgdGhpcyBzZWdtZW50J3MgZGF0YSBpcyBtaXNzaW5nLiBJZlxuICAgIC8vIGl0J3MgYSBwcm9taXNlLCB3ZSBuZWVkIHRvIHVud3JhcCBpdCBzbyB3ZSBjYW4gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZVxuICAgIC8vIGRhdGEgaXMgbWlzc2luZy5cbiAgICBjb25zdCByZXNvbHZlZFJzYyA9IHR5cGVvZiByc2MgPT09IFwib2JqZWN0XCIgJiYgcnNjICE9PSBudWxsICYmIHR5cGVvZiByc2MudGhlbiA9PT0gXCJmdW5jdGlvblwiID8gKDAsIF9yZWFjdC51c2UpKHJzYykgOiByc2M7XG4gICAgaWYgKCFyZXNvbHZlZFJzYykge1xuICAgICAgICAvLyBUaGUgZGF0YSBmb3IgdGhpcyBzZWdtZW50IGlzIG5vdCBhdmFpbGFibGUsIGFuZCB0aGVyZSdzIG5vIHBlbmRpbmdcbiAgICAgICAgLy8gbmF2aWdhdGlvbiB0aGF0IHdpbGwgYmUgYWJsZSB0byBmdWxmaWxsIGl0LiBXZSBuZWVkIHRvIGZldGNoIG1vcmUgZnJvbVxuICAgICAgICAvLyB0aGUgc2VydmVyIGFuZCBwYXRjaCB0aGUgY2FjaGUuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYWxyZWFkeSBhIHBlbmRpbmcgcmVxdWVzdC5cbiAgICAgICAgbGV0IGxhenlEYXRhID0gY2hpbGROb2RlLmxhenlEYXRhO1xuICAgICAgICBpZiAobGF6eURhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICogUm91dGVyIHN0YXRlIHdpdGggcmVmZXRjaCBtYXJrZXIgYWRkZWRcbiAgICAgICAqLyAvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgICBjb25zdCByZWZldGNoVHJlZSA9IHdhbGtBZGRSZWZldGNoKFtcbiAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgICAgIC4uLnNlZ21lbnRQYXRoXG4gICAgICAgICAgICBdLCBmdWxsVHJlZSk7XG4gICAgICAgICAgICBjaGlsZE5vZGUubGF6eURhdGEgPSBsYXp5RGF0YSA9ICgwLCBfZmV0Y2hzZXJ2ZXJyZXNwb25zZS5mZXRjaFNlcnZlclJlc3BvbnNlKShuZXcgVVJMKHVybCwgbG9jYXRpb24ub3JpZ2luKSwgcmVmZXRjaFRyZWUsIGNvbnRleHQubmV4dFVybCwgYnVpbGRJZCk7XG4gICAgICAgICAgICBjaGlsZE5vZGUubGF6eURhdGFSZXNvbHZlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAqIEZsaWdodCByZXNwb25zZSBkYXRhXG4gICAgICovIC8vIFdoZW4gdGhlIGRhdGEgaGFzIG5vdCByZXNvbHZlZCB5ZXQgYHVzZWAgd2lsbCBzdXNwZW5kIGhlcmUuXG4gICAgICAgIGNvbnN0IFtmbGlnaHREYXRhLCBvdmVycmlkZUNhbm9uaWNhbFVybF0gPSAoMCwgX3JlYWN0LnVzZSkobGF6eURhdGEpO1xuICAgICAgICBpZiAoIWNoaWxkTm9kZS5sYXp5RGF0YVJlc29sdmVkKSB7XG4gICAgICAgICAgICAvLyBzZXRUaW1lb3V0IGlzIHVzZWQgdG8gc3RhcnQgYSBuZXcgdHJhbnNpdGlvbiBkdXJpbmcgcmVuZGVyLCB0aGlzIGlzIGFuIGludGVudGlvbmFsIGhhY2sgYXJvdW5kIFJlYWN0LlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VCeVNlcnZlclJlc3BvbnNlKGZ1bGxUcmVlLCBmbGlnaHREYXRhLCBvdmVycmlkZUNhbm9uaWNhbFVybCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgd2UgbWFyayB0aGlzIGFzIHJlc29sdmVkLCBpbiBjYXNlIHRoaXMgYnJhbmNoIGlzIHJlcGxheWVkLCB3ZSBkb24ndCB3YW50IHRvIGNvbnRpbm91c2x5IHJlLWFwcGx5XG4gICAgICAgICAgICAvLyB0aGUgcGF0Y2ggdG8gdGhlIHRyZWUuXG4gICAgICAgICAgICBjaGlsZE5vZGUubGF6eURhdGFSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3VzcGVuZCBpbmZpbml0ZWx5IGFzIGBjaGFuZ2VCeVNlcnZlclJlc3BvbnNlYCB3aWxsIGNhdXNlIGEgZGlmZmVyZW50IHBhcnQgb2YgdGhlIHRyZWUgdG8gYmUgcmVuZGVyZWQuXG4gICAgICAgICgwLCBfcmVhY3QudXNlKSgoMCwgX2luZmluaXRlcHJvbWlzZS5jcmVhdGVJbmZpbml0ZVByb21pc2UpKCkpO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBnZXQgdG8gdGhpcyBwb2ludCwgdGhlbiB3ZSBrbm93IHdlIGhhdmUgc29tZXRoaW5nIHdlIGNhbiByZW5kZXIuXG4gICAgY29uc3Qgc3VidHJlZSA9IC8vIFRoZSBsYXlvdXQgcm91dGVyIGNvbnRleHQgbmFycm93cyBkb3duIHRyZWUgYW5kIGNoaWxkTm9kZXMgYXQgZWFjaCBsZXZlbC5cbiAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5MYXlvdXRSb3V0ZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0cmVlOiB0cmVlWzFdW3BhcmFsbGVsUm91dGVyS2V5XSxcbiAgICAgICAgICAgIGNoaWxkTm9kZXM6IGNoaWxkTm9kZS5wYXJhbGxlbFJvdXRlcyxcbiAgICAgICAgICAgIC8vIFRPRE8tQVBQOiBvdmVycmlkaW5nIG9mIHVybCBmb3IgcGFyYWxsZWwgcm91dGVzXG4gICAgICAgICAgICB1cmw6IHVybFxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogcmVzb2x2ZWRSc2NcbiAgICB9KTtcbiAgICAvLyBFbnN1cmUgcm9vdCBsYXlvdXQgaXMgbm90IHdyYXBwZWQgaW4gYSBkaXYgYXMgdGhlIHJvb3QgbGF5b3V0IHJlbmRlcnMgYDxodG1sPmBcbiAgICByZXR1cm4gc3VidHJlZTtcbn1cbi8qKlxuICogUmVuZGVycyBzdXNwZW5zZSBib3VuZGFyeSB3aXRoIHRoZSBwcm92aWRlZCBcImxvYWRpbmdcIiBwcm9wZXJ0eSBhcyB0aGUgZmFsbGJhY2suXG4gKiBJZiBubyBsb2FkaW5nIHByb3BlcnR5IGlzIHByb3ZpZGVkIGl0IHJlbmRlcnMgdGhlIGNoaWxkcmVuIHdpdGhvdXQgYSBzdXNwZW5zZSBib3VuZGFyeS5cbiAqLyBmdW5jdGlvbiBMb2FkaW5nQm91bmRhcnkocGFyYW0pIHtcbiAgICBsZXQgeyBjaGlsZHJlbiwgbG9hZGluZywgbG9hZGluZ1N0eWxlcywgbG9hZGluZ1NjcmlwdHMsIGhhc0xvYWRpbmcgfSA9IHBhcmFtO1xuICAgIGlmIChoYXNMb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9yZWFjdC5TdXNwZW5zZSwge1xuICAgICAgICAgICAgZmFsbGJhY2s6IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1N0eWxlcyxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1NjcmlwdHMsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG59XG5mdW5jdGlvbiBPdXRlckxheW91dFJvdXRlcihwYXJhbSkge1xuICAgIGxldCB7IHBhcmFsbGVsUm91dGVyS2V5LCBzZWdtZW50UGF0aCwgZXJyb3IsIGVycm9yU3R5bGVzLCBlcnJvclNjcmlwdHMsIHRlbXBsYXRlU3R5bGVzLCB0ZW1wbGF0ZVNjcmlwdHMsIGxvYWRpbmcsIGxvYWRpbmdTdHlsZXMsIGxvYWRpbmdTY3JpcHRzLCBoYXNMb2FkaW5nLCB0ZW1wbGF0ZSwgbm90Rm91bmQsIG5vdEZvdW5kU3R5bGVzLCBzdHlsZXMgfSA9IHBhcmFtO1xuICAgIGNvbnN0IGNvbnRleHQgPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5MYXlvdXRSb3V0ZXJDb250ZXh0KTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YXJpYW50IGV4cGVjdGVkIGxheW91dCByb3V0ZXIgdG8gYmUgbW91bnRlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBjaGlsZE5vZGVzLCB0cmVlLCB1cmwgfSA9IGNvbnRleHQ7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHBhcmFsbGVsUm91dGVyIGNhY2hlIG5vZGVcbiAgICBsZXQgY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyID0gY2hpbGROb2Rlcy5nZXQocGFyYWxsZWxSb3V0ZXJLZXkpO1xuICAgIC8vIElmIHRoZSBwYXJhbGxlbCByb3V0ZXIgY2FjaGUgbm9kZSBkb2VzIG5vdCBleGlzdCB5ZXQsIGNyZWF0ZSBpdC5cbiAgICAvLyBUaGlzIHdyaXRlcyB0byB0aGUgY2FjaGUgd2hlbiB0aGVyZSBpcyBubyBpdGVtIGluIHRoZSBjYWNoZSB5ZXQuIEl0IG5ldmVyICpvdmVyd3JpdGVzKiBleGlzdGluZyBjYWNoZSBpdGVtcyB3aGljaCBpcyB3aHkgaXQncyBzYWZlIGluIGNvbmN1cnJlbnQgbW9kZS5cbiAgICBpZiAoIWNoaWxkTm9kZXNGb3JQYXJhbGxlbFJvdXRlcikge1xuICAgICAgICBjaGlsZE5vZGVzRm9yUGFyYWxsZWxSb3V0ZXIgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNoaWxkTm9kZXMuc2V0KHBhcmFsbGVsUm91dGVyS2V5LCBjaGlsZE5vZGVzRm9yUGFyYWxsZWxSb3V0ZXIpO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIGFjdGl2ZSBzZWdtZW50IGluIHRoZSB0cmVlXG4gICAgLy8gVGhlIHJlYXNvbiBhcnJheXMgYXJlIHVzZWQgaW4gdGhlIGRhdGEgZm9ybWF0IGlzIHRoYXQgdGhlc2UgYXJlIHRyYW5zZmVycmVkIGZyb20gdGhlIHNlcnZlciB0byB0aGUgYnJvd3NlciBzbyBpdCdzIG9wdGltaXplZCB0byBzYXZlIGJ5dGVzLlxuICAgIGNvbnN0IHRyZWVTZWdtZW50ID0gdHJlZVsxXVtwYXJhbGxlbFJvdXRlcktleV1bMF07XG4gICAgLy8gSWYgc2VnbWVudCBpcyBhbiBhcnJheSBpdCdzIGEgZHluYW1pYyByb3V0ZSBhbmQgd2Ugd2FudCB0byByZWFkIHRoZSBkeW5hbWljIHJvdXRlIHZhbHVlIGFzIHRoZSBzZWdtZW50IHRvIGdldCBmcm9tIHRoZSBjYWNoZS5cbiAgICBjb25zdCBjdXJyZW50Q2hpbGRTZWdtZW50VmFsdWUgPSAoMCwgX2dldHNlZ21lbnR2YWx1ZS5nZXRTZWdtZW50VmFsdWUpKHRyZWVTZWdtZW50KTtcbiAgICAvKipcbiAgICogRGVjaWRlcyB3aGljaCBzZWdtZW50cyB0byBrZWVwIHJlbmRlcmluZywgYWxsIHNlZ21lbnRzIHRoYXQgYXJlIG5vdCBhY3RpdmUgd2lsbCBiZSB3cmFwcGVkIGluIGA8T2Zmc2NyZWVuPmAuXG4gICAqLyAvLyBUT0RPLUFQUDogQWRkIGhhbmRsaW5nIG9mIGA8T2Zmc2NyZWVuPmAgd2hlbiBpdCdzIGF2YWlsYWJsZS5cbiAgICBjb25zdCBwcmVzZXJ2ZWRTZWdtZW50cyA9IFtcbiAgICAgICAgdHJlZVNlZ21lbnRcbiAgICBdO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgc3R5bGVzLFxuICAgICAgICAgICAgcHJlc2VydmVkU2VnbWVudHMubWFwKChwcmVzZXJ2ZWRTZWdtZW50KT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXNlcnZlZFNlZ21lbnRWYWx1ZSA9ICgwLCBfZ2V0c2VnbWVudHZhbHVlLmdldFNlZ21lbnRWYWx1ZSkocHJlc2VydmVkU2VnbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FjaGVLZXkgPSAoMCwgX2NyZWF0ZXJvdXRlcmNhY2hla2V5LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShwcmVzZXJ2ZWRTZWdtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4oLypcbiAgICAgICAgICAgIC0gRXJyb3IgYm91bmRhcnlcbiAgICAgICAgICAgICAgLSBPbmx5IHJlbmRlcnMgZXJyb3IgYm91bmRhcnkgaWYgZXJyb3IgY29tcG9uZW50IGlzIHByb3ZpZGVkLlxuICAgICAgICAgICAgICAtIFJlbmRlcmVkIGZvciBlYWNoIHNlZ21lbnQgdG8gZW5zdXJlIHRoZXkgaGF2ZSB0aGVpciBvd24gZXJyb3Igc3RhdGUuXG4gICAgICAgICAgICAtIExvYWRpbmcgYm91bmRhcnlcbiAgICAgICAgICAgICAgLSBPbmx5IHJlbmRlcnMgc3VzcGVuc2UgYm91bmRhcnkgaWYgbG9hZGluZyBjb21wb25lbnRzIGlzIHByb3ZpZGVkLlxuICAgICAgICAgICAgICAtIFJlbmRlcmVkIGZvciBlYWNoIHNlZ21lbnQgdG8gZW5zdXJlIHRoZXkgaGF2ZSB0aGVpciBvd24gbG9hZGluZyBzdGF0ZS5cbiAgICAgICAgICAgICAgLSBQYXNzZWQgdG8gdGhlIHJvdXRlciBkdXJpbmcgcmVuZGVyaW5nIHRvIGVuc3VyZSBpdCBjYW4gYmUgaW1tZWRpYXRlbHkgcmVuZGVyZWQgd2hlbiBzdXNwZW5kaW5nIG9uIGEgRmxpZ2h0IGZldGNoLlxuICAgICAgICAgICovIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5UZW1wbGF0ZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoU2Nyb2xsQW5kRm9jdXNIYW5kbGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50UGF0aDogc2VnbWVudFBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfZXJyb3Jib3VuZGFyeS5FcnJvckJvdW5kYXJ5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb21wb25lbnQ6IGVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yU3R5bGVzOiBlcnJvclN0eWxlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclNjcmlwdHM6IGVycm9yU2NyaXB0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShMb2FkaW5nQm91bmRhcnksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTG9hZGluZzogaGFzTG9hZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogbG9hZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1N0eWxlczogbG9hZGluZ1N0eWxlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1NjcmlwdHM6IGxvYWRpbmdTY3JpcHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfbm90Zm91bmRib3VuZGFyeS5Ob3RGb3VuZEJvdW5kYXJ5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RGb3VuZDogbm90Rm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RGb3VuZFN0eWxlczogbm90Rm91bmRTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfcmVkaXJlY3Rib3VuZGFyeS5SZWRpcmVjdEJvdW5kYXJ5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoSW5uZXJMYXlvdXRSb3V0ZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXJLZXk6IHBhcmFsbGVsUm91dGVyS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZTogdHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlczogY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50UGF0aDogc2VnbWVudFBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5OiBjYWNoZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU6IGN1cnJlbnRDaGlsZFNlZ21lbnRWYWx1ZSA9PT0gcHJlc2VydmVkU2VnbWVudFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVNjcmlwdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSwgKDAsIF9jcmVhdGVyb3V0ZXJjYWNoZWtleS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkocHJlc2VydmVkU2VnbWVudCwgdHJ1ZSkpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGF5b3V0LXJvdXRlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiT3V0ZXJMYXlvdXRSb3V0ZXIiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9yZWFjdGRvbSIsIl9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSIsIl9mZXRjaHNlcnZlcnJlc3BvbnNlIiwiX2luZmluaXRlcHJvbWlzZSIsIl9lcnJvcmJvdW5kYXJ5IiwiX21hdGNoc2VnbWVudHMiLCJfaGFuZGxlc21vb3Roc2Nyb2xsIiwiX3JlZGlyZWN0Ym91bmRhcnkiLCJfbm90Zm91bmRib3VuZGFyeSIsIl9nZXRzZWdtZW50dmFsdWUiLCJfY3JlYXRlcm91dGVyY2FjaGVrZXkiLCJ3YWxrQWRkUmVmZXRjaCIsInNlZ21lbnRQYXRoVG9XYWxrIiwidHJlZVRvUmVjcmVhdGUiLCJzZWdtZW50IiwicGFyYWxsZWxSb3V0ZUtleSIsImlzTGFzdCIsImxlbmd0aCIsIm1hdGNoU2VnbWVudCIsImhhc093blByb3BlcnR5Iiwic3ViVHJlZSIsInVuZGVmaW5lZCIsInNsaWNlIiwiZmluZERPTU5vZGUiLCJpbnN0YW5jZSIsInByb2Nlc3MiLCJvcmlnaW5hbENvbnNvbGVFcnJvciIsImNvbnNvbGUiLCJlcnJvciIsIl9sZW4iLCJhcmd1bWVudHMiLCJtZXNzYWdlcyIsIkFycmF5IiwiX2tleSIsImluY2x1ZGVzIiwiZGVmYXVsdCIsInJlY3RQcm9wZXJ0aWVzIiwic2hvdWxkU2tpcEVsZW1lbnQiLCJlbGVtZW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInBvc2l0aW9uIiwid2FybiIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJldmVyeSIsIml0ZW0iLCJ0b3BPZkVsZW1lbnRJblZpZXdwb3J0Iiwidmlld3BvcnRIZWlnaHQiLCJ0b3AiLCJnZXRIYXNoRnJhZ21lbnREb21Ob2RlIiwiaGFzaEZyYWdtZW50IiwiZG9jdW1lbnQiLCJib2R5IiwiX2RvY3VtZW50X2dldEVsZW1lbnRCeUlkIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRFbGVtZW50c0J5TmFtZSIsIklubmVyU2Nyb2xsQW5kRm9jdXNIYW5kbGVyIiwiQ29tcG9uZW50IiwiY29tcG9uZW50RGlkTW91bnQiLCJoYW5kbGVQb3RlbnRpYWxTY3JvbGwiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcm9wcyIsImZvY3VzQW5kU2Nyb2xsUmVmIiwiYXBwbHkiLCJyZW5kZXIiLCJjaGlsZHJlbiIsImNvbnN0cnVjdG9yIiwiYXJncyIsInNlZ21lbnRQYXRoIiwic2VnbWVudFBhdGhzIiwic29tZSIsInNjcm9sbFJlZlNlZ21lbnRQYXRoIiwiaW5kZXgiLCJkb21Ob2RlIiwiRWxlbWVudCIsIkhUTUxFbGVtZW50IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiaGFuZGxlU21vb3RoU2Nyb2xsIiwic2Nyb2xsSW50b1ZpZXciLCJodG1sRWxlbWVudCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudEhlaWdodCIsInNjcm9sbFRvcCIsImRvbnRGb3JjZUxheW91dCIsIm9ubHlIYXNoQ2hhbmdlIiwiZm9jdXMiLCJTY3JvbGxBbmRGb2N1c0hhbmRsZXIiLCJwYXJhbSIsImNvbnRleHQiLCJ1c2VDb250ZXh0IiwiR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCIsIkVycm9yIiwianN4IiwiSW5uZXJMYXlvdXRSb3V0ZXIiLCJwYXJhbGxlbFJvdXRlcktleSIsInVybCIsImNoaWxkTm9kZXMiLCJ0cmVlIiwiY2FjaGVLZXkiLCJidWlsZElkIiwiY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSIsImZ1bGxUcmVlIiwiY2hpbGROb2RlIiwibmV3TGF6eUNhY2hlTm9kZSIsImxhenlEYXRhIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJoZWFkIiwicGFyYWxsZWxSb3V0ZXMiLCJNYXAiLCJsYXp5RGF0YVJlc29sdmVkIiwic2V0IiwicmVzb2x2ZWRQcmVmZXRjaFJzYyIsInVzZURlZmVycmVkVmFsdWUiLCJyZXNvbHZlZFJzYyIsInRoZW4iLCJ1c2UiLCJyZWZldGNoVHJlZSIsImZldGNoU2VydmVyUmVzcG9uc2UiLCJVUkwiLCJsb2NhdGlvbiIsIm9yaWdpbiIsIm5leHRVcmwiLCJmbGlnaHREYXRhIiwib3ZlcnJpZGVDYW5vbmljYWxVcmwiLCJzZXRUaW1lb3V0Iiwic3RhcnRUcmFuc2l0aW9uIiwiY3JlYXRlSW5maW5pdGVQcm9taXNlIiwic3VidHJlZSIsIkxheW91dFJvdXRlckNvbnRleHQiLCJQcm92aWRlciIsIkxvYWRpbmdCb3VuZGFyeSIsImxvYWRpbmciLCJsb2FkaW5nU3R5bGVzIiwibG9hZGluZ1NjcmlwdHMiLCJoYXNMb2FkaW5nIiwiU3VzcGVuc2UiLCJmYWxsYmFjayIsImpzeHMiLCJGcmFnbWVudCIsImVycm9yU3R5bGVzIiwiZXJyb3JTY3JpcHRzIiwidGVtcGxhdGVTdHlsZXMiLCJ0ZW1wbGF0ZVNjcmlwdHMiLCJ0ZW1wbGF0ZSIsIm5vdEZvdW5kIiwibm90Rm91bmRTdHlsZXMiLCJzdHlsZXMiLCJjaGlsZE5vZGVzRm9yUGFyYWxsZWxSb3V0ZXIiLCJ0cmVlU2VnbWVudCIsImN1cnJlbnRDaGlsZFNlZ21lbnRWYWx1ZSIsImdldFNlZ21lbnRWYWx1ZSIsInByZXNlcnZlZFNlZ21lbnRzIiwibWFwIiwicHJlc2VydmVkU2VnbWVudCIsInByZXNlcnZlZFNlZ21lbnRWYWx1ZSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwiVGVtcGxhdGVDb250ZXh0IiwiRXJyb3JCb3VuZGFyeSIsImVycm9yQ29tcG9uZW50IiwiTm90Rm91bmRCb3VuZGFyeSIsIlJlZGlyZWN0Qm91bmRhcnkiLCJpc0FjdGl2ZSIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/layout-router.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/match-segments.js": +/*!********************************************************************!*\ + !*** ./node_modules/next/dist/client/components/match-segments.js ***! + \********************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n matchSegment: function() {\n return matchSegment;\n },\n canSegmentBeOverridden: function() {\n return canSegmentBeOverridden;\n }\n});\nconst _getsegmentparam = __webpack_require__(/*! ../../server/app-render/get-segment-param */ \"(ssr)/./node_modules/next/dist/server/app-render/get-segment-param.js\");\nconst matchSegment = (existingSegment, segment)=>{\n // segment is either Array or string\n if (typeof existingSegment === \"string\") {\n if (typeof segment === \"string\") {\n // Common case: segment is just a string\n return existingSegment === segment;\n }\n return false;\n }\n if (typeof segment === \"string\") {\n return false;\n }\n return existingSegment[0] === segment[0] && existingSegment[1] === segment[1];\n};\nconst canSegmentBeOverridden = (existingSegment, segment)=>{\n var _getSegmentParam;\n if (Array.isArray(existingSegment) || !Array.isArray(segment)) {\n return false;\n }\n return ((_getSegmentParam = (0, _getsegmentparam.getSegmentParam)(existingSegment)) == null ? void 0 : _getSegmentParam.param) === segment[0];\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=match-segments.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL21hdGNoLXNlZ21lbnRzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxjQUFjO1FBQ1YsT0FBT0E7SUFDWDtJQUNBQyx3QkFBd0I7UUFDcEIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sbUJBQW1CQyxtQkFBT0EsQ0FBQyx3SEFBMkM7QUFDNUUsTUFBTVQsZUFBZSxDQUFDVSxpQkFBaUJDO0lBQ25DLG9DQUFvQztJQUNwQyxJQUFJLE9BQU9ELG9CQUFvQixVQUFVO1FBQ3JDLElBQUksT0FBT0MsWUFBWSxVQUFVO1lBQzdCLHdDQUF3QztZQUN4QyxPQUFPRCxvQkFBb0JDO1FBQy9CO1FBQ0EsT0FBTztJQUNYO0lBQ0EsSUFBSSxPQUFPQSxZQUFZLFVBQVU7UUFDN0IsT0FBTztJQUNYO0lBQ0EsT0FBT0QsZUFBZSxDQUFDLEVBQUUsS0FBS0MsT0FBTyxDQUFDLEVBQUUsSUFBSUQsZUFBZSxDQUFDLEVBQUUsS0FBS0MsT0FBTyxDQUFDLEVBQUU7QUFDakY7QUFDQSxNQUFNVix5QkFBeUIsQ0FBQ1MsaUJBQWlCQztJQUM3QyxJQUFJQztJQUNKLElBQUlDLE1BQU1DLE9BQU8sQ0FBQ0osb0JBQW9CLENBQUNHLE1BQU1DLE9BQU8sQ0FBQ0gsVUFBVTtRQUMzRCxPQUFPO0lBQ1g7SUFDQSxPQUFPLENBQUMsQ0FBQ0MsbUJBQW1CLENBQUMsR0FBR0osaUJBQWlCTyxlQUFlLEVBQUVMLGdCQUFlLEtBQU0sT0FBTyxLQUFLLElBQUlFLGlCQUFpQkksS0FBSyxNQUFNTCxPQUFPLENBQUMsRUFBRTtBQUNqSjtBQUVBLElBQUksQ0FBQyxPQUFPZCxRQUFRb0IsT0FBTyxLQUFLLGNBQWUsT0FBT3BCLFFBQVFvQixPQUFPLEtBQUssWUFBWXBCLFFBQVFvQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9wQixRQUFRb0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3ZCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW9CLE9BQU8sRUFBRSxjQUFjO1FBQUVuQixPQUFPO0lBQUs7SUFDbkVILE9BQU93QixNQUFNLENBQUN0QixRQUFRb0IsT0FBTyxFQUFFcEI7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUW9CLE9BQU87QUFDbEMsRUFFQSwwQ0FBMEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9tYXRjaC1zZWdtZW50cy5qcz9iY2IxIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbWF0Y2hTZWdtZW50OiBudWxsLFxuICAgIGNhblNlZ21lbnRCZU92ZXJyaWRkZW46IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgbWF0Y2hTZWdtZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoU2VnbWVudDtcbiAgICB9LFxuICAgIGNhblNlZ21lbnRCZU92ZXJyaWRkZW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY2FuU2VnbWVudEJlT3ZlcnJpZGRlbjtcbiAgICB9XG59KTtcbmNvbnN0IF9nZXRzZWdtZW50cGFyYW0gPSByZXF1aXJlKFwiLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvZ2V0LXNlZ21lbnQtcGFyYW1cIik7XG5jb25zdCBtYXRjaFNlZ21lbnQgPSAoZXhpc3RpbmdTZWdtZW50LCBzZWdtZW50KT0+e1xuICAgIC8vIHNlZ21lbnQgaXMgZWl0aGVyIEFycmF5IG9yIHN0cmluZ1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmdTZWdtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VnbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gQ29tbW9uIGNhc2U6IHNlZ21lbnQgaXMganVzdCBhIHN0cmluZ1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nU2VnbWVudCA9PT0gc2VnbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc2VnbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZ1NlZ21lbnRbMF0gPT09IHNlZ21lbnRbMF0gJiYgZXhpc3RpbmdTZWdtZW50WzFdID09PSBzZWdtZW50WzFdO1xufTtcbmNvbnN0IGNhblNlZ21lbnRCZU92ZXJyaWRkZW4gPSAoZXhpc3RpbmdTZWdtZW50LCBzZWdtZW50KT0+e1xuICAgIHZhciBfZ2V0U2VnbWVudFBhcmFtO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nU2VnbWVudCkgfHwgIUFycmF5LmlzQXJyYXkoc2VnbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKChfZ2V0U2VnbWVudFBhcmFtID0gKDAsIF9nZXRzZWdtZW50cGFyYW0uZ2V0U2VnbWVudFBhcmFtKShleGlzdGluZ1NlZ21lbnQpKSA9PSBudWxsID8gdm9pZCAwIDogX2dldFNlZ21lbnRQYXJhbS5wYXJhbSkgPT09IHNlZ21lbnRbMF07XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXRjaC1zZWdtZW50cy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJtYXRjaFNlZ21lbnQiLCJjYW5TZWdtZW50QmVPdmVycmlkZGVuIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2dldHNlZ21lbnRwYXJhbSIsInJlcXVpcmUiLCJleGlzdGluZ1NlZ21lbnQiLCJzZWdtZW50IiwiX2dldFNlZ21lbnRQYXJhbSIsIkFycmF5IiwiaXNBcnJheSIsImdldFNlZ21lbnRQYXJhbSIsInBhcmFtIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/match-segments.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/navigation.js": +/*!****************************************************************!*\ + !*** ./node_modules/next/dist/client/components/navigation.js ***! + \****************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ReadonlyURLSearchParams: function() {\n return ReadonlyURLSearchParams;\n },\n useSearchParams: function() {\n return useSearchParams;\n },\n usePathname: function() {\n return usePathname;\n },\n ServerInsertedHTMLContext: function() {\n return _serverinsertedhtmlsharedruntime.ServerInsertedHTMLContext;\n },\n useServerInsertedHTML: function() {\n return _serverinsertedhtmlsharedruntime.useServerInsertedHTML;\n },\n useRouter: function() {\n return useRouter;\n },\n useParams: function() {\n return useParams;\n },\n useSelectedLayoutSegments: function() {\n return useSelectedLayoutSegments;\n },\n useSelectedLayoutSegment: function() {\n return useSelectedLayoutSegment;\n },\n redirect: function() {\n return _redirect.redirect;\n },\n permanentRedirect: function() {\n return _redirect.permanentRedirect;\n },\n RedirectType: function() {\n return _redirect.RedirectType;\n },\n notFound: function() {\n return _notfound.notFound;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/hooks-client-context.js\");\nconst _clienthookinservercomponenterror = __webpack_require__(/*! ./client-hook-in-server-component-error */ \"(ssr)/./node_modules/next/dist/client/components/client-hook-in-server-component-error.js\");\nconst _getsegmentvalue = __webpack_require__(/*! ./router-reducer/reducers/get-segment-value */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\");\nconst _segment = __webpack_require__(/*! ../../shared/lib/segment */ \"(ssr)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _serverinsertedhtmlsharedruntime = __webpack_require__(/*! ../../shared/lib/server-inserted-html.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/server-inserted-html.js\");\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(ssr)/./node_modules/next/dist/client/components/redirect.js\");\nconst _notfound = __webpack_require__(/*! ./not-found */ \"(ssr)/./node_modules/next/dist/client/components/not-found.js\");\nconst INTERNAL_URLSEARCHPARAMS_INSTANCE = Symbol(\"internal for urlsearchparams readonly\");\nfunction readonlyURLSearchParamsError() {\n return new Error(\"ReadonlyURLSearchParams cannot be modified\");\n}\nclass ReadonlyURLSearchParams {\n [Symbol.iterator]() {\n return this[INTERNAL_URLSEARCHPARAMS_INSTANCE][Symbol.iterator]();\n }\n append() {\n throw readonlyURLSearchParamsError();\n }\n delete() {\n throw readonlyURLSearchParamsError();\n }\n set() {\n throw readonlyURLSearchParamsError();\n }\n sort() {\n throw readonlyURLSearchParamsError();\n }\n constructor(urlSearchParams){\n this[INTERNAL_URLSEARCHPARAMS_INSTANCE] = urlSearchParams;\n this.entries = urlSearchParams.entries.bind(urlSearchParams);\n this.forEach = urlSearchParams.forEach.bind(urlSearchParams);\n this.get = urlSearchParams.get.bind(urlSearchParams);\n this.getAll = urlSearchParams.getAll.bind(urlSearchParams);\n this.has = urlSearchParams.has.bind(urlSearchParams);\n this.keys = urlSearchParams.keys.bind(urlSearchParams);\n this.values = urlSearchParams.values.bind(urlSearchParams);\n this.toString = urlSearchParams.toString.bind(urlSearchParams);\n this.size = urlSearchParams.size;\n }\n}\nfunction useSearchParams() {\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"useSearchParams\");\n const searchParams = (0, _react.useContext)(_hooksclientcontextsharedruntime.SearchParamsContext);\n // In the case where this is `null`, the compat types added in\n // `next-env.d.ts` will add a new overload that changes the return type to\n // include `null`.\n const readonlySearchParams = (0, _react.useMemo)(()=>{\n if (!searchParams) {\n // When the router is not ready in pages, we won't have the search params\n // available.\n return null;\n }\n return new ReadonlyURLSearchParams(searchParams);\n }, [\n searchParams\n ]);\n if (true) {\n // AsyncLocalStorage should not be included in the client bundle.\n const { bailoutToClientRendering } = __webpack_require__(/*! ./bailout-to-client-rendering */ \"(ssr)/./node_modules/next/dist/client/components/bailout-to-client-rendering.js\");\n // TODO-APP: handle dynamic = 'force-static' here and on the client\n bailoutToClientRendering(\"useSearchParams()\");\n }\n return readonlySearchParams;\n}\nfunction usePathname() {\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"usePathname\");\n // In the case where this is `null`, the compat types added in `next-env.d.ts`\n // will add a new overload that changes the return type to include `null`.\n return (0, _react.useContext)(_hooksclientcontextsharedruntime.PathnameContext);\n}\nfunction useRouter() {\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"useRouter\");\n const router = (0, _react.useContext)(_approutercontextsharedruntime.AppRouterContext);\n if (router === null) {\n throw new Error(\"invariant expected app router to be mounted\");\n }\n return router;\n}\n// this function performs a depth-first search of the tree to find the selected\n// params\nfunction getSelectedParams(tree, params) {\n if (params === void 0) params = {};\n const parallelRoutes = tree[1];\n for (const parallelRoute of Object.values(parallelRoutes)){\n const segment = parallelRoute[0];\n const isDynamicParameter = Array.isArray(segment);\n const segmentValue = isDynamicParameter ? segment[1] : segment;\n if (!segmentValue || segmentValue.startsWith(_segment.PAGE_SEGMENT_KEY)) continue;\n // Ensure catchAll and optional catchall are turned into an array\n const isCatchAll = isDynamicParameter && (segment[2] === \"c\" || segment[2] === \"oc\");\n if (isCatchAll) {\n params[segment[0]] = segment[1].split(\"/\");\n } else if (isDynamicParameter) {\n params[segment[0]] = segment[1];\n }\n params = getSelectedParams(parallelRoute, params);\n }\n return params;\n}\nfunction useParams() {\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"useParams\");\n const globalLayoutRouter = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n const pathParams = (0, _react.useContext)(_hooksclientcontextsharedruntime.PathParamsContext);\n return (0, _react.useMemo)(()=>{\n // When it's under app router\n if (globalLayoutRouter == null ? void 0 : globalLayoutRouter.tree) {\n return getSelectedParams(globalLayoutRouter.tree);\n }\n // When it's under client side pages router\n return pathParams;\n }, [\n globalLayoutRouter == null ? void 0 : globalLayoutRouter.tree,\n pathParams\n ]);\n}\n// TODO-APP: handle parallel routes\n/**\n * Get the canonical parameters from the current level to the leaf node.\n */ function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first, segmentPath) {\n if (first === void 0) first = true;\n if (segmentPath === void 0) segmentPath = [];\n let node;\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey];\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1];\n var _parallelRoutes_children;\n node = (_parallelRoutes_children = parallelRoutes.children) != null ? _parallelRoutes_children : Object.values(parallelRoutes)[0];\n }\n if (!node) return segmentPath;\n const segment = node[0];\n const segmentValue = (0, _getsegmentvalue.getSegmentValue)(segment);\n if (!segmentValue || segmentValue.startsWith(_segment.PAGE_SEGMENT_KEY)) {\n return segmentPath;\n }\n segmentPath.push(segmentValue);\n return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath);\n}\nfunction useSelectedLayoutSegments(parallelRouteKey) {\n if (parallelRouteKey === void 0) parallelRouteKey = \"children\";\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"useSelectedLayoutSegments\");\n const { tree } = (0, _react.useContext)(_approutercontextsharedruntime.LayoutRouterContext);\n return getSelectedLayoutSegmentPath(tree, parallelRouteKey);\n}\nfunction useSelectedLayoutSegment(parallelRouteKey) {\n if (parallelRouteKey === void 0) parallelRouteKey = \"children\";\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"useSelectedLayoutSegment\");\n const selectedLayoutSegments = useSelectedLayoutSegments(parallelRouteKey);\n if (selectedLayoutSegments.length === 0) {\n return null;\n }\n return selectedLayoutSegments[0];\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=navigation.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FjTjtBQUNBLFNBQVNjLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlwQixPQUFPQyxjQUFjLENBQUNrQixRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFoQixTQUFTO0lBQ2JHLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLGlCQUFpQjtRQUNiLE9BQU9BO0lBQ1g7SUFDQUMsYUFBYTtRQUNULE9BQU9BO0lBQ1g7SUFDQUMsMkJBQTJCO1FBQ3ZCLE9BQU9nQixpQ0FBaUNoQix5QkFBeUI7SUFDckU7SUFDQUMsdUJBQXVCO1FBQ25CLE9BQU9lLGlDQUFpQ2YscUJBQXFCO0lBQ2pFO0lBQ0FDLFdBQVc7UUFDUCxPQUFPQTtJQUNYO0lBQ0FDLFdBQVc7UUFDUCxPQUFPQTtJQUNYO0lBQ0FDLDJCQUEyQjtRQUN2QixPQUFPQTtJQUNYO0lBQ0FDLDBCQUEwQjtRQUN0QixPQUFPQTtJQUNYO0lBQ0FDLFVBQVU7UUFDTixPQUFPVyxVQUFVWCxRQUFRO0lBQzdCO0lBQ0FDLG1CQUFtQjtRQUNmLE9BQU9VLFVBQVVWLGlCQUFpQjtJQUN0QztJQUNBQyxjQUFjO1FBQ1YsT0FBT1MsVUFBVVQsWUFBWTtJQUNqQztJQUNBQyxVQUFVO1FBQ04sT0FBT1MsVUFBVVQsUUFBUTtJQUM3QjtBQUNKO0FBQ0EsTUFBTVUsU0FBU0MsbUJBQU9BLENBQUMsd0dBQU87QUFDOUIsTUFBTUMsaUNBQWlDRCxtQkFBT0EsQ0FBQyx1S0FBb0Q7QUFDbkcsTUFBTUUsbUNBQW1DRixtQkFBT0EsQ0FBQywyS0FBc0Q7QUFDdkcsTUFBTUcsb0NBQW9DSCxtQkFBT0EsQ0FBQywwSUFBeUM7QUFDM0YsTUFBTUksbUJBQW1CSixtQkFBT0EsQ0FBQyxrSkFBNkM7QUFDOUUsTUFBTUssV0FBV0wsbUJBQU9BLENBQUMsc0ZBQTBCO0FBQ25ELE1BQU1KLG1DQUFtQ0ksbUJBQU9BLENBQUMsMktBQXNEO0FBQ3ZHLE1BQU1ILFlBQVlHLG1CQUFPQSxDQUFDLGdGQUFZO0FBQ3RDLE1BQU1GLFlBQVlFLG1CQUFPQSxDQUFDLGtGQUFhO0FBQ3ZDLE1BQU1NLG9DQUFvQ0MsT0FBTztBQUNqRCxTQUFTQztJQUNMLE9BQU8sSUFBSUMsTUFBTTtBQUNyQjtBQUNBLE1BQU1oQztJQUNGLENBQUM4QixPQUFPRyxRQUFRLENBQUMsR0FBRztRQUNoQixPQUFPLElBQUksQ0FBQ0osa0NBQWtDLENBQUNDLE9BQU9HLFFBQVEsQ0FBQztJQUNuRTtJQUNBQyxTQUFTO1FBQ0wsTUFBTUg7SUFDVjtJQUNBSSxTQUFTO1FBQ0wsTUFBTUo7SUFDVjtJQUNBSyxNQUFNO1FBQ0YsTUFBTUw7SUFDVjtJQUNBTSxPQUFPO1FBQ0gsTUFBTU47SUFDVjtJQUNBTyxZQUFZQyxlQUFlLENBQUM7UUFDeEIsSUFBSSxDQUFDVixrQ0FBa0MsR0FBR1U7UUFDMUMsSUFBSSxDQUFDQyxPQUFPLEdBQUdELGdCQUFnQkMsT0FBTyxDQUFDQyxJQUFJLENBQUNGO1FBQzVDLElBQUksQ0FBQ0csT0FBTyxHQUFHSCxnQkFBZ0JHLE9BQU8sQ0FBQ0QsSUFBSSxDQUFDRjtRQUM1QyxJQUFJLENBQUNyQixHQUFHLEdBQUdxQixnQkFBZ0JyQixHQUFHLENBQUN1QixJQUFJLENBQUNGO1FBQ3BDLElBQUksQ0FBQ0ksTUFBTSxHQUFHSixnQkFBZ0JJLE1BQU0sQ0FBQ0YsSUFBSSxDQUFDRjtRQUMxQyxJQUFJLENBQUNLLEdBQUcsR0FBR0wsZ0JBQWdCSyxHQUFHLENBQUNILElBQUksQ0FBQ0Y7UUFDcEMsSUFBSSxDQUFDTSxJQUFJLEdBQUdOLGdCQUFnQk0sSUFBSSxDQUFDSixJQUFJLENBQUNGO1FBQ3RDLElBQUksQ0FBQ08sTUFBTSxHQUFHUCxnQkFBZ0JPLE1BQU0sQ0FBQ0wsSUFBSSxDQUFDRjtRQUMxQyxJQUFJLENBQUNRLFFBQVEsR0FBR1IsZ0JBQWdCUSxRQUFRLENBQUNOLElBQUksQ0FBQ0Y7UUFDOUMsSUFBSSxDQUFDUyxJQUFJLEdBQUdULGdCQUFnQlMsSUFBSTtJQUNwQztBQUNKO0FBQ0EsU0FBUy9DO0lBQ0osSUFBR3lCLGtDQUFrQ3VCLGdDQUFnQyxFQUFFO0lBQ3hFLE1BQU1DLGVBQWUsQ0FBQyxHQUFHNUIsT0FBTzZCLFVBQVUsRUFBRTFCLGlDQUFpQzJCLG1CQUFtQjtJQUNoRyw4REFBOEQ7SUFDOUQsMEVBQTBFO0lBQzFFLGtCQUFrQjtJQUNsQixNQUFNQyx1QkFBdUIsQ0FBQyxHQUFHL0IsT0FBT2dDLE9BQU8sRUFBRTtRQUM3QyxJQUFJLENBQUNKLGNBQWM7WUFDZix5RUFBeUU7WUFDekUsYUFBYTtZQUNiLE9BQU87UUFDWDtRQUNBLE9BQU8sSUFBSWxELHdCQUF3QmtEO0lBQ3ZDLEdBQUc7UUFDQ0E7S0FDSDtJQUNELElBQUksSUFBNkIsRUFBRTtRQUMvQixpRUFBaUU7UUFDakUsTUFBTSxFQUFFSyx3QkFBd0IsRUFBRSxHQUFHaEMsbUJBQU9BLENBQUMsc0hBQStCO1FBQzVFLG1FQUFtRTtRQUNuRWdDLHlCQUF5QjtJQUM3QjtJQUNBLE9BQU9GO0FBQ1g7QUFDQSxTQUFTbkQ7SUFDSixJQUFHd0Isa0NBQWtDdUIsZ0NBQWdDLEVBQUU7SUFDeEUsOEVBQThFO0lBQzlFLDBFQUEwRTtJQUMxRSxPQUFPLENBQUMsR0FBRzNCLE9BQU82QixVQUFVLEVBQUUxQixpQ0FBaUMrQixlQUFlO0FBQ2xGO0FBQ0EsU0FBU25EO0lBQ0osSUFBR3FCLGtDQUFrQ3VCLGdDQUFnQyxFQUFFO0lBQ3hFLE1BQU1RLFNBQVMsQ0FBQyxHQUFHbkMsT0FBTzZCLFVBQVUsRUFBRTNCLCtCQUErQmtDLGdCQUFnQjtJQUNyRixJQUFJRCxXQUFXLE1BQU07UUFDakIsTUFBTSxJQUFJekIsTUFBTTtJQUNwQjtJQUNBLE9BQU95QjtBQUNYO0FBQ0EsK0VBQStFO0FBQy9FLFNBQVM7QUFDVCxTQUFTRSxrQkFBa0JDLElBQUksRUFBRUMsTUFBTTtJQUNuQyxJQUFJQSxXQUFXLEtBQUssR0FBR0EsU0FBUyxDQUFDO0lBQ2pDLE1BQU1DLGlCQUFpQkYsSUFBSSxDQUFDLEVBQUU7SUFDOUIsS0FBSyxNQUFNRyxpQkFBaUJwRSxPQUFPbUQsTUFBTSxDQUFDZ0IsZ0JBQWdCO1FBQ3RELE1BQU1FLFVBQVVELGFBQWEsQ0FBQyxFQUFFO1FBQ2hDLE1BQU1FLHFCQUFxQkMsTUFBTUMsT0FBTyxDQUFDSDtRQUN6QyxNQUFNSSxlQUFlSCxxQkFBcUJELE9BQU8sQ0FBQyxFQUFFLEdBQUdBO1FBQ3ZELElBQUksQ0FBQ0ksZ0JBQWdCQSxhQUFhQyxVQUFVLENBQUN6QyxTQUFTMEMsZ0JBQWdCLEdBQUc7UUFDekUsaUVBQWlFO1FBQ2pFLE1BQU1DLGFBQWFOLHNCQUF1QkQsQ0FBQUEsT0FBTyxDQUFDLEVBQUUsS0FBSyxPQUFPQSxPQUFPLENBQUMsRUFBRSxLQUFLLElBQUc7UUFDbEYsSUFBSU8sWUFBWTtZQUNaVixNQUFNLENBQUNHLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBR0EsT0FBTyxDQUFDLEVBQUUsQ0FBQ1EsS0FBSyxDQUFDO1FBQzFDLE9BQU8sSUFBSVAsb0JBQW9CO1lBQzNCSixNQUFNLENBQUNHLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBR0EsT0FBTyxDQUFDLEVBQUU7UUFDbkM7UUFDQUgsU0FBU0Ysa0JBQWtCSSxlQUFlRjtJQUM5QztJQUNBLE9BQU9BO0FBQ1g7QUFDQSxTQUFTdkQ7SUFDSixJQUFHb0Isa0NBQWtDdUIsZ0NBQWdDLEVBQUU7SUFDeEUsTUFBTXdCLHFCQUFxQixDQUFDLEdBQUduRCxPQUFPNkIsVUFBVSxFQUFFM0IsK0JBQStCa0QseUJBQXlCO0lBQzFHLE1BQU1DLGFBQWEsQ0FBQyxHQUFHckQsT0FBTzZCLFVBQVUsRUFBRTFCLGlDQUFpQ21ELGlCQUFpQjtJQUM1RixPQUFPLENBQUMsR0FBR3RELE9BQU9nQyxPQUFPLEVBQUU7UUFDdkIsNkJBQTZCO1FBQzdCLElBQUltQixzQkFBc0IsT0FBTyxLQUFLLElBQUlBLG1CQUFtQmIsSUFBSSxFQUFFO1lBQy9ELE9BQU9ELGtCQUFrQmMsbUJBQW1CYixJQUFJO1FBQ3BEO1FBQ0EsMkNBQTJDO1FBQzNDLE9BQU9lO0lBQ1gsR0FBRztRQUNDRixzQkFBc0IsT0FBTyxLQUFLLElBQUlBLG1CQUFtQmIsSUFBSTtRQUM3RGU7S0FDSDtBQUNMO0FBQ0EsbUNBQW1DO0FBQ25DOztDQUVDLEdBQUcsU0FBU0UsNkJBQTZCakIsSUFBSSxFQUFFa0IsZ0JBQWdCLEVBQUVDLEtBQUssRUFBRUMsV0FBVztJQUNoRixJQUFJRCxVQUFVLEtBQUssR0FBR0EsUUFBUTtJQUM5QixJQUFJQyxnQkFBZ0IsS0FBSyxHQUFHQSxjQUFjLEVBQUU7SUFDNUMsSUFBSUM7SUFDSixJQUFJRixPQUFPO1FBQ1Asa0VBQWtFO1FBQ2xFRSxPQUFPckIsSUFBSSxDQUFDLEVBQUUsQ0FBQ2tCLGlCQUFpQjtJQUNwQyxPQUFPO1FBQ0gsb0dBQW9HO1FBQ3BHLE1BQU1oQixpQkFBaUJGLElBQUksQ0FBQyxFQUFFO1FBQzlCLElBQUlzQjtRQUNKRCxPQUFPLENBQUNDLDJCQUEyQnBCLGVBQWVxQixRQUFRLEtBQUssT0FBT0QsMkJBQTJCdkYsT0FBT21ELE1BQU0sQ0FBQ2dCLGVBQWUsQ0FBQyxFQUFFO0lBQ3JJO0lBQ0EsSUFBSSxDQUFDbUIsTUFBTSxPQUFPRDtJQUNsQixNQUFNaEIsVUFBVWlCLElBQUksQ0FBQyxFQUFFO0lBQ3ZCLE1BQU1iLGVBQWUsQ0FBQyxHQUFHekMsaUJBQWlCeUQsZUFBZSxFQUFFcEI7SUFDM0QsSUFBSSxDQUFDSSxnQkFBZ0JBLGFBQWFDLFVBQVUsQ0FBQ3pDLFNBQVMwQyxnQkFBZ0IsR0FBRztRQUNyRSxPQUFPVTtJQUNYO0lBQ0FBLFlBQVlLLElBQUksQ0FBQ2pCO0lBQ2pCLE9BQU9TLDZCQUE2QkksTUFBTUgsa0JBQWtCLE9BQU9FO0FBQ3ZFO0FBQ0EsU0FBU3pFLDBCQUEwQnVFLGdCQUFnQjtJQUMvQyxJQUFJQSxxQkFBcUIsS0FBSyxHQUFHQSxtQkFBbUI7SUFDbkQsSUFBR3BELGtDQUFrQ3VCLGdDQUFnQyxFQUFFO0lBQ3hFLE1BQU0sRUFBRVcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHdEMsT0FBTzZCLFVBQVUsRUFBRTNCLCtCQUErQjhELG1CQUFtQjtJQUMxRixPQUFPVCw2QkFBNkJqQixNQUFNa0I7QUFDOUM7QUFDQSxTQUFTdEUseUJBQXlCc0UsZ0JBQWdCO0lBQzlDLElBQUlBLHFCQUFxQixLQUFLLEdBQUdBLG1CQUFtQjtJQUNuRCxJQUFHcEQsa0NBQWtDdUIsZ0NBQWdDLEVBQUU7SUFDeEUsTUFBTXNDLHlCQUF5QmhGLDBCQUEwQnVFO0lBQ3pELElBQUlTLHVCQUF1QkMsTUFBTSxLQUFLLEdBQUc7UUFDckMsT0FBTztJQUNYO0lBQ0EsT0FBT0Qsc0JBQXNCLENBQUMsRUFBRTtBQUNwQztBQUVBLElBQUksQ0FBQyxPQUFPMUYsUUFBUTRGLE9BQU8sS0FBSyxjQUFlLE9BQU81RixRQUFRNEYsT0FBTyxLQUFLLFlBQVk1RixRQUFRNEYsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPNUYsUUFBUTRGLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcksvRixPQUFPQyxjQUFjLENBQUNDLFFBQVE0RixPQUFPLEVBQUUsY0FBYztRQUFFM0YsT0FBTztJQUFLO0lBQ25FSCxPQUFPZ0csTUFBTSxDQUFDOUYsUUFBUTRGLE9BQU8sRUFBRTVGO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVE0RixPQUFPO0FBQ2xDLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbmF2aWdhdGlvbi5qcz8zNDgyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXM6IG51bGwsXG4gICAgdXNlU2VhcmNoUGFyYW1zOiBudWxsLFxuICAgIHVzZVBhdGhuYW1lOiBudWxsLFxuICAgIFNlcnZlckluc2VydGVkSFRNTENvbnRleHQ6IG51bGwsXG4gICAgdXNlU2VydmVySW5zZXJ0ZWRIVE1MOiBudWxsLFxuICAgIHVzZVJvdXRlcjogbnVsbCxcbiAgICB1c2VQYXJhbXM6IG51bGwsXG4gICAgdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50czogbnVsbCxcbiAgICB1c2VTZWxlY3RlZExheW91dFNlZ21lbnQ6IG51bGwsXG4gICAgcmVkaXJlY3Q6IG51bGwsXG4gICAgcGVybWFuZW50UmVkaXJlY3Q6IG51bGwsXG4gICAgUmVkaXJlY3RUeXBlOiBudWxsLFxuICAgIG5vdEZvdW5kOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zO1xuICAgIH0sXG4gICAgdXNlU2VhcmNoUGFyYW1zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZVNlYXJjaFBhcmFtcztcbiAgICB9LFxuICAgIHVzZVBhdGhuYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZVBhdGhuYW1lO1xuICAgIH0sXG4gICAgU2VydmVySW5zZXJ0ZWRIVE1MQ29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc2VydmVyaW5zZXJ0ZWRodG1sc2hhcmVkcnVudGltZS5TZXJ2ZXJJbnNlcnRlZEhUTUxDb250ZXh0O1xuICAgIH0sXG4gICAgdXNlU2VydmVySW5zZXJ0ZWRIVE1MOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zZXJ2ZXJpbnNlcnRlZGh0bWxzaGFyZWRydW50aW1lLnVzZVNlcnZlckluc2VydGVkSFRNTDtcbiAgICB9LFxuICAgIHVzZVJvdXRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VSb3V0ZXI7XG4gICAgfSxcbiAgICB1c2VQYXJhbXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXNlUGFyYW1zO1xuICAgIH0sXG4gICAgdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50czogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzO1xuICAgIH0sXG4gICAgdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZVNlbGVjdGVkTGF5b3V0U2VnbWVudDtcbiAgICB9LFxuICAgIHJlZGlyZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9yZWRpcmVjdC5yZWRpcmVjdDtcbiAgICB9LFxuICAgIHBlcm1hbmVudFJlZGlyZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9yZWRpcmVjdC5wZXJtYW5lbnRSZWRpcmVjdDtcbiAgICB9LFxuICAgIFJlZGlyZWN0VHlwZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfcmVkaXJlY3QuUmVkaXJlY3RUeXBlO1xuICAgIH0sXG4gICAgbm90Rm91bmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX25vdGZvdW5kLm5vdEZvdW5kO1xuICAgIH1cbn0pO1xuY29uc3QgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuY29uc3QgX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2xpYi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmNvbnN0IF9jbGllbnRob29raW5zZXJ2ZXJjb21wb25lbnRlcnJvciA9IHJlcXVpcmUoXCIuL2NsaWVudC1ob29rLWluLXNlcnZlci1jb21wb25lbnQtZXJyb3JcIik7XG5jb25zdCBfZ2V0c2VnbWVudHZhbHVlID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZ2V0LXNlZ21lbnQtdmFsdWVcIik7XG5jb25zdCBfc2VnbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL3NlZ21lbnRcIik7XG5jb25zdCBfc2VydmVyaW5zZXJ0ZWRodG1sc2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL3NlcnZlci1pbnNlcnRlZC1odG1sLnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX3JlZGlyZWN0ID0gcmVxdWlyZShcIi4vcmVkaXJlY3RcIik7XG5jb25zdCBfbm90Zm91bmQgPSByZXF1aXJlKFwiLi9ub3QtZm91bmRcIik7XG5jb25zdCBJTlRFUk5BTF9VUkxTRUFSQ0hQQVJBTVNfSU5TVEFOQ0UgPSBTeW1ib2woXCJpbnRlcm5hbCBmb3IgdXJsc2VhcmNocGFyYW1zIHJlYWRvbmx5XCIpO1xuZnVuY3Rpb24gcmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNFcnJvcigpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKFwiUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMgY2Fubm90IGJlIG1vZGlmaWVkXCIpO1xufVxuY2xhc3MgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMge1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tJTlRFUk5BTF9VUkxTRUFSQ0hQQVJBTVNfSU5TVEFOQ0VdW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgYXBwZW5kKCkge1xuICAgICAgICB0aHJvdyByZWFkb25seVVSTFNlYXJjaFBhcmFtc0Vycm9yKCk7XG4gICAgfVxuICAgIGRlbGV0ZSgpIHtcbiAgICAgICAgdGhyb3cgcmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNFcnJvcigpO1xuICAgIH1cbiAgICBzZXQoKSB7XG4gICAgICAgIHRocm93IHJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zRXJyb3IoKTtcbiAgICB9XG4gICAgc29ydCgpIHtcbiAgICAgICAgdGhyb3cgcmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNFcnJvcigpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih1cmxTZWFyY2hQYXJhbXMpe1xuICAgICAgICB0aGlzW0lOVEVSTkFMX1VSTFNFQVJDSFBBUkFNU19JTlNUQU5DRV0gPSB1cmxTZWFyY2hQYXJhbXM7XG4gICAgICAgIHRoaXMuZW50cmllcyA9IHVybFNlYXJjaFBhcmFtcy5lbnRyaWVzLmJpbmQodXJsU2VhcmNoUGFyYW1zKTtcbiAgICAgICAgdGhpcy5mb3JFYWNoID0gdXJsU2VhcmNoUGFyYW1zLmZvckVhY2guYmluZCh1cmxTZWFyY2hQYXJhbXMpO1xuICAgICAgICB0aGlzLmdldCA9IHVybFNlYXJjaFBhcmFtcy5nZXQuYmluZCh1cmxTZWFyY2hQYXJhbXMpO1xuICAgICAgICB0aGlzLmdldEFsbCA9IHVybFNlYXJjaFBhcmFtcy5nZXRBbGwuYmluZCh1cmxTZWFyY2hQYXJhbXMpO1xuICAgICAgICB0aGlzLmhhcyA9IHVybFNlYXJjaFBhcmFtcy5oYXMuYmluZCh1cmxTZWFyY2hQYXJhbXMpO1xuICAgICAgICB0aGlzLmtleXMgPSB1cmxTZWFyY2hQYXJhbXMua2V5cy5iaW5kKHVybFNlYXJjaFBhcmFtcyk7XG4gICAgICAgIHRoaXMudmFsdWVzID0gdXJsU2VhcmNoUGFyYW1zLnZhbHVlcy5iaW5kKHVybFNlYXJjaFBhcmFtcyk7XG4gICAgICAgIHRoaXMudG9TdHJpbmcgPSB1cmxTZWFyY2hQYXJhbXMudG9TdHJpbmcuYmluZCh1cmxTZWFyY2hQYXJhbXMpO1xuICAgICAgICB0aGlzLnNpemUgPSB1cmxTZWFyY2hQYXJhbXMuc2l6ZTtcbiAgICB9XG59XG5mdW5jdGlvbiB1c2VTZWFyY2hQYXJhbXMoKSB7XG4gICAgKDAsIF9jbGllbnRob29raW5zZXJ2ZXJjb21wb25lbnRlcnJvci5jbGllbnRIb29rSW5TZXJ2ZXJDb21wb25lbnRFcnJvcikoXCJ1c2VTZWFyY2hQYXJhbXNcIik7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfaG9va3NjbGllbnRjb250ZXh0c2hhcmVkcnVudGltZS5TZWFyY2hQYXJhbXNDb250ZXh0KTtcbiAgICAvLyBJbiB0aGUgY2FzZSB3aGVyZSB0aGlzIGlzIGBudWxsYCwgdGhlIGNvbXBhdCB0eXBlcyBhZGRlZCBpblxuICAgIC8vIGBuZXh0LWVudi5kLnRzYCB3aWxsIGFkZCBhIG5ldyBvdmVybG9hZCB0aGF0IGNoYW5nZXMgdGhlIHJldHVybiB0eXBlIHRvXG4gICAgLy8gaW5jbHVkZSBgbnVsbGAuXG4gICAgY29uc3QgcmVhZG9ubHlTZWFyY2hQYXJhbXMgPSAoMCwgX3JlYWN0LnVzZU1lbW8pKCgpPT57XG4gICAgICAgIGlmICghc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgICAgICAvLyBXaGVuIHRoZSByb3V0ZXIgaXMgbm90IHJlYWR5IGluIHBhZ2VzLCB3ZSB3b24ndCBoYXZlIHRoZSBzZWFyY2ggcGFyYW1zXG4gICAgICAgICAgICAvLyBhdmFpbGFibGUuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zKHNlYXJjaFBhcmFtcyk7XG4gICAgfSwgW1xuICAgICAgICBzZWFyY2hQYXJhbXNcbiAgICBdKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBBc3luY0xvY2FsU3RvcmFnZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBjbGllbnQgYnVuZGxlLlxuICAgICAgICBjb25zdCB7IGJhaWxvdXRUb0NsaWVudFJlbmRlcmluZyB9ID0gcmVxdWlyZShcIi4vYmFpbG91dC10by1jbGllbnQtcmVuZGVyaW5nXCIpO1xuICAgICAgICAvLyBUT0RPLUFQUDogaGFuZGxlIGR5bmFtaWMgPSAnZm9yY2Utc3RhdGljJyBoZXJlIGFuZCBvbiB0aGUgY2xpZW50XG4gICAgICAgIGJhaWxvdXRUb0NsaWVudFJlbmRlcmluZyhcInVzZVNlYXJjaFBhcmFtcygpXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVhZG9ubHlTZWFyY2hQYXJhbXM7XG59XG5mdW5jdGlvbiB1c2VQYXRobmFtZSgpIHtcbiAgICAoMCwgX2NsaWVudGhvb2tpbnNlcnZlcmNvbXBvbmVudGVycm9yLmNsaWVudEhvb2tJblNlcnZlckNvbXBvbmVudEVycm9yKShcInVzZVBhdGhuYW1lXCIpO1xuICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoaXMgaXMgYG51bGxgLCB0aGUgY29tcGF0IHR5cGVzIGFkZGVkIGluIGBuZXh0LWVudi5kLnRzYFxuICAgIC8vIHdpbGwgYWRkIGEgbmV3IG92ZXJsb2FkIHRoYXQgY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgdG8gaW5jbHVkZSBgbnVsbGAuXG4gICAgcmV0dXJuICgwLCBfcmVhY3QudXNlQ29udGV4dCkoX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUuUGF0aG5hbWVDb250ZXh0KTtcbn1cbmZ1bmN0aW9uIHVzZVJvdXRlcigpIHtcbiAgICAoMCwgX2NsaWVudGhvb2tpbnNlcnZlcmNvbXBvbmVudGVycm9yLmNsaWVudEhvb2tJblNlcnZlckNvbXBvbmVudEVycm9yKShcInVzZVJvdXRlclwiKTtcbiAgICBjb25zdCByb3V0ZXIgPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5BcHBSb3V0ZXJDb250ZXh0KTtcbiAgICBpZiAocm91dGVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFyaWFudCBleHBlY3RlZCBhcHAgcm91dGVyIHRvIGJlIG1vdW50ZWRcIik7XG4gICAgfVxuICAgIHJldHVybiByb3V0ZXI7XG59XG4vLyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIG9mIHRoZSB0cmVlIHRvIGZpbmQgdGhlIHNlbGVjdGVkXG4vLyBwYXJhbXNcbmZ1bmN0aW9uIGdldFNlbGVjdGVkUGFyYW1zKHRyZWUsIHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMgPT09IHZvaWQgMCkgcGFyYW1zID0ge307XG4gICAgY29uc3QgcGFyYWxsZWxSb3V0ZXMgPSB0cmVlWzFdO1xuICAgIGZvciAoY29uc3QgcGFyYWxsZWxSb3V0ZSBvZiBPYmplY3QudmFsdWVzKHBhcmFsbGVsUm91dGVzKSl7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBwYXJhbGxlbFJvdXRlWzBdO1xuICAgICAgICBjb25zdCBpc0R5bmFtaWNQYXJhbWV0ZXIgPSBBcnJheS5pc0FycmF5KHNlZ21lbnQpO1xuICAgICAgICBjb25zdCBzZWdtZW50VmFsdWUgPSBpc0R5bmFtaWNQYXJhbWV0ZXIgPyBzZWdtZW50WzFdIDogc2VnbWVudDtcbiAgICAgICAgaWYgKCFzZWdtZW50VmFsdWUgfHwgc2VnbWVudFZhbHVlLnN0YXJ0c1dpdGgoX3NlZ21lbnQuUEFHRV9TRUdNRU5UX0tFWSkpIGNvbnRpbnVlO1xuICAgICAgICAvLyBFbnN1cmUgY2F0Y2hBbGwgYW5kIG9wdGlvbmFsIGNhdGNoYWxsIGFyZSB0dXJuZWQgaW50byBhbiBhcnJheVxuICAgICAgICBjb25zdCBpc0NhdGNoQWxsID0gaXNEeW5hbWljUGFyYW1ldGVyICYmIChzZWdtZW50WzJdID09PSBcImNcIiB8fCBzZWdtZW50WzJdID09PSBcIm9jXCIpO1xuICAgICAgICBpZiAoaXNDYXRjaEFsbCkge1xuICAgICAgICAgICAgcGFyYW1zW3NlZ21lbnRbMF1dID0gc2VnbWVudFsxXS5zcGxpdChcIi9cIik7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEeW5hbWljUGFyYW1ldGVyKSB7XG4gICAgICAgICAgICBwYXJhbXNbc2VnbWVudFswXV0gPSBzZWdtZW50WzFdO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtcyA9IGdldFNlbGVjdGVkUGFyYW1zKHBhcmFsbGVsUm91dGUsIHBhcmFtcyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG59XG5mdW5jdGlvbiB1c2VQYXJhbXMoKSB7XG4gICAgKDAsIF9jbGllbnRob29raW5zZXJ2ZXJjb21wb25lbnRlcnJvci5jbGllbnRIb29rSW5TZXJ2ZXJDb21wb25lbnRFcnJvcikoXCJ1c2VQYXJhbXNcIik7XG4gICAgY29uc3QgZ2xvYmFsTGF5b3V0Um91dGVyID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCk7XG4gICAgY29uc3QgcGF0aFBhcmFtcyA9ICgwLCBfcmVhY3QudXNlQ29udGV4dCkoX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUuUGF0aFBhcmFtc0NvbnRleHQpO1xuICAgIHJldHVybiAoMCwgX3JlYWN0LnVzZU1lbW8pKCgpPT57XG4gICAgICAgIC8vIFdoZW4gaXQncyB1bmRlciBhcHAgcm91dGVyXG4gICAgICAgIGlmIChnbG9iYWxMYXlvdXRSb3V0ZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGdsb2JhbExheW91dFJvdXRlci50cmVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRQYXJhbXMoZ2xvYmFsTGF5b3V0Um91dGVyLnRyZWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gaXQncyB1bmRlciBjbGllbnQgc2lkZSBwYWdlcyByb3V0ZXJcbiAgICAgICAgcmV0dXJuIHBhdGhQYXJhbXM7XG4gICAgfSwgW1xuICAgICAgICBnbG9iYWxMYXlvdXRSb3V0ZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGdsb2JhbExheW91dFJvdXRlci50cmVlLFxuICAgICAgICBwYXRoUGFyYW1zXG4gICAgXSk7XG59XG4vLyBUT0RPLUFQUDogaGFuZGxlIHBhcmFsbGVsIHJvdXRlc1xuLyoqXG4gKiBHZXQgdGhlIGNhbm9uaWNhbCBwYXJhbWV0ZXJzIGZyb20gdGhlIGN1cnJlbnQgbGV2ZWwgdG8gdGhlIGxlYWYgbm9kZS5cbiAqLyBmdW5jdGlvbiBnZXRTZWxlY3RlZExheW91dFNlZ21lbnRQYXRoKHRyZWUsIHBhcmFsbGVsUm91dGVLZXksIGZpcnN0LCBzZWdtZW50UGF0aCkge1xuICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwKSBmaXJzdCA9IHRydWU7XG4gICAgaWYgKHNlZ21lbnRQYXRoID09PSB2b2lkIDApIHNlZ21lbnRQYXRoID0gW107XG4gICAgbGV0IG5vZGU7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYWxsZWwgcm91dGUga2V5IG9uIHRoZSBmaXJzdCBwYXJhbGxlbCByb3V0ZVxuICAgICAgICBub2RlID0gdHJlZVsxXVtwYXJhbGxlbFJvdXRlS2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBZnRlciBmaXJzdCBwYXJhbGxlbCByb3V0ZSBwcmVmZXIgY2hpbGRyZW4sIGlmIHRoZXJlJ3Mgbm8gY2hpbGRyZW4gcGljayB0aGUgZmlyc3QgcGFyYWxsZWwgcm91dGUuXG4gICAgICAgIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gdHJlZVsxXTtcbiAgICAgICAgdmFyIF9wYXJhbGxlbFJvdXRlc19jaGlsZHJlbjtcbiAgICAgICAgbm9kZSA9IChfcGFyYWxsZWxSb3V0ZXNfY2hpbGRyZW4gPSBwYXJhbGxlbFJvdXRlcy5jaGlsZHJlbikgIT0gbnVsbCA/IF9wYXJhbGxlbFJvdXRlc19jaGlsZHJlbiA6IE9iamVjdC52YWx1ZXMocGFyYWxsZWxSb3V0ZXMpWzBdO1xuICAgIH1cbiAgICBpZiAoIW5vZGUpIHJldHVybiBzZWdtZW50UGF0aDtcbiAgICBjb25zdCBzZWdtZW50ID0gbm9kZVswXTtcbiAgICBjb25zdCBzZWdtZW50VmFsdWUgPSAoMCwgX2dldHNlZ21lbnR2YWx1ZS5nZXRTZWdtZW50VmFsdWUpKHNlZ21lbnQpO1xuICAgIGlmICghc2VnbWVudFZhbHVlIHx8IHNlZ21lbnRWYWx1ZS5zdGFydHNXaXRoKF9zZWdtZW50LlBBR0VfU0VHTUVOVF9LRVkpKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50UGF0aDtcbiAgICB9XG4gICAgc2VnbWVudFBhdGgucHVzaChzZWdtZW50VmFsdWUpO1xuICAgIHJldHVybiBnZXRTZWxlY3RlZExheW91dFNlZ21lbnRQYXRoKG5vZGUsIHBhcmFsbGVsUm91dGVLZXksIGZhbHNlLCBzZWdtZW50UGF0aCk7XG59XG5mdW5jdGlvbiB1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzKHBhcmFsbGVsUm91dGVLZXkpIHtcbiAgICBpZiAocGFyYWxsZWxSb3V0ZUtleSA9PT0gdm9pZCAwKSBwYXJhbGxlbFJvdXRlS2V5ID0gXCJjaGlsZHJlblwiO1xuICAgICgwLCBfY2xpZW50aG9va2luc2VydmVyY29tcG9uZW50ZXJyb3IuY2xpZW50SG9va0luU2VydmVyQ29tcG9uZW50RXJyb3IpKFwidXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50c1wiKTtcbiAgICBjb25zdCB7IHRyZWUgfSA9ICgwLCBfcmVhY3QudXNlQ29udGV4dCkoX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lLkxheW91dFJvdXRlckNvbnRleHQpO1xuICAgIHJldHVybiBnZXRTZWxlY3RlZExheW91dFNlZ21lbnRQYXRoKHRyZWUsIHBhcmFsbGVsUm91dGVLZXkpO1xufVxuZnVuY3Rpb24gdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50KHBhcmFsbGVsUm91dGVLZXkpIHtcbiAgICBpZiAocGFyYWxsZWxSb3V0ZUtleSA9PT0gdm9pZCAwKSBwYXJhbGxlbFJvdXRlS2V5ID0gXCJjaGlsZHJlblwiO1xuICAgICgwLCBfY2xpZW50aG9va2luc2VydmVyY29tcG9uZW50ZXJyb3IuY2xpZW50SG9va0luU2VydmVyQ29tcG9uZW50RXJyb3IpKFwidXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50XCIpO1xuICAgIGNvbnN0IHNlbGVjdGVkTGF5b3V0U2VnbWVudHMgPSB1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzKHBhcmFsbGVsUm91dGVLZXkpO1xuICAgIGlmIChzZWxlY3RlZExheW91dFNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkTGF5b3V0U2VnbWVudHNbMF07XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5hdmlnYXRpb24uanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VQYXRobmFtZSIsIlNlcnZlckluc2VydGVkSFRNTENvbnRleHQiLCJ1c2VTZXJ2ZXJJbnNlcnRlZEhUTUwiLCJ1c2VSb3V0ZXIiLCJ1c2VQYXJhbXMiLCJ1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzIiwidXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50IiwicmVkaXJlY3QiLCJwZXJtYW5lbnRSZWRpcmVjdCIsIlJlZGlyZWN0VHlwZSIsIm5vdEZvdW5kIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX3NlcnZlcmluc2VydGVkaHRtbHNoYXJlZHJ1bnRpbWUiLCJfcmVkaXJlY3QiLCJfbm90Zm91bmQiLCJfcmVhY3QiLCJyZXF1aXJlIiwiX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lIiwiX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfY2xpZW50aG9va2luc2VydmVyY29tcG9uZW50ZXJyb3IiLCJfZ2V0c2VnbWVudHZhbHVlIiwiX3NlZ21lbnQiLCJJTlRFUk5BTF9VUkxTRUFSQ0hQQVJBTVNfSU5TVEFOQ0UiLCJTeW1ib2wiLCJyZWFkb25seVVSTFNlYXJjaFBhcmFtc0Vycm9yIiwiRXJyb3IiLCJpdGVyYXRvciIsImFwcGVuZCIsImRlbGV0ZSIsInNldCIsInNvcnQiLCJjb25zdHJ1Y3RvciIsInVybFNlYXJjaFBhcmFtcyIsImVudHJpZXMiLCJiaW5kIiwiZm9yRWFjaCIsImdldEFsbCIsImhhcyIsImtleXMiLCJ2YWx1ZXMiLCJ0b1N0cmluZyIsInNpemUiLCJjbGllbnRIb29rSW5TZXJ2ZXJDb21wb25lbnRFcnJvciIsInNlYXJjaFBhcmFtcyIsInVzZUNvbnRleHQiLCJTZWFyY2hQYXJhbXNDb250ZXh0IiwicmVhZG9ubHlTZWFyY2hQYXJhbXMiLCJ1c2VNZW1vIiwiYmFpbG91dFRvQ2xpZW50UmVuZGVyaW5nIiwiUGF0aG5hbWVDb250ZXh0Iiwicm91dGVyIiwiQXBwUm91dGVyQ29udGV4dCIsImdldFNlbGVjdGVkUGFyYW1zIiwidHJlZSIsInBhcmFtcyIsInBhcmFsbGVsUm91dGVzIiwicGFyYWxsZWxSb3V0ZSIsInNlZ21lbnQiLCJpc0R5bmFtaWNQYXJhbWV0ZXIiLCJBcnJheSIsImlzQXJyYXkiLCJzZWdtZW50VmFsdWUiLCJzdGFydHNXaXRoIiwiUEFHRV9TRUdNRU5UX0tFWSIsImlzQ2F0Y2hBbGwiLCJzcGxpdCIsImdsb2JhbExheW91dFJvdXRlciIsIkdsb2JhbExheW91dFJvdXRlckNvbnRleHQiLCJwYXRoUGFyYW1zIiwiUGF0aFBhcmFtc0NvbnRleHQiLCJnZXRTZWxlY3RlZExheW91dFNlZ21lbnRQYXRoIiwicGFyYWxsZWxSb3V0ZUtleSIsImZpcnN0Iiwic2VnbWVudFBhdGgiLCJub2RlIiwiX3BhcmFsbGVsUm91dGVzX2NoaWxkcmVuIiwiY2hpbGRyZW4iLCJnZXRTZWdtZW50VmFsdWUiLCJwdXNoIiwiTGF5b3V0Um91dGVyQ29udGV4dCIsInNlbGVjdGVkTGF5b3V0U2VnbWVudHMiLCJsZW5ndGgiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/navigation.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js": +/*!************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/not-found-boundary.js ***! + \************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"NotFoundBoundary\", ({\n enumerable: true,\n get: function() {\n return NotFoundBoundary;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _navigation = __webpack_require__(/*! ./navigation */ \"(ssr)/./node_modules/next/dist/client/components/navigation.js\");\nconst _notfound = __webpack_require__(/*! ./not-found */ \"(ssr)/./node_modules/next/dist/client/components/not-found.js\");\nconst _warnonce = __webpack_require__(/*! ../../shared/lib/utils/warn-once */ \"(ssr)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js\");\nclass NotFoundErrorBoundary extends _react.default.Component {\n componentDidCatch() {\n if ( true && // A missing children slot is the typical not-found case, so no need to warn\n !this.props.missingSlots.has(\"children\")) {\n let warningMessage = \"No default component was found for a parallel route rendered on this page. Falling back to nearest NotFound boundary.\\n\" + \"Learn more: https://nextjs.org/docs/app/building-your-application/routing/parallel-routes#defaultjs\\n\\n\";\n if (this.props.missingSlots.size > 0) {\n const formattedSlots = Array.from(this.props.missingSlots).sort((a, b)=>a.localeCompare(b)).map((slot)=>\"@\" + slot).join(\", \");\n warningMessage += \"Missing slots: \" + formattedSlots;\n }\n (0, _warnonce.warnOnce)(warningMessage);\n }\n }\n static getDerivedStateFromError(error) {\n if ((0, _notfound.isNotFoundError)(error)) {\n return {\n notFoundTriggered: true\n };\n }\n // Re-throw if error is not for 404\n throw error;\n }\n static getDerivedStateFromProps(props, state) {\n /**\n * Handles reset of the error boundary when a navigation happens.\n * Ensures the error boundary does not stay enabled when navigating to a new page.\n * Approach of setState in render is safe as it checks the previous pathname and then overrides\n * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */ if (props.pathname !== state.previousPathname && state.notFoundTriggered) {\n return {\n notFoundTriggered: false,\n previousPathname: props.pathname\n };\n }\n return {\n notFoundTriggered: state.notFoundTriggered,\n previousPathname: props.pathname\n };\n }\n render() {\n if (this.state.notFoundTriggered) {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"robots\",\n content: \"noindex\"\n }),\n true && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"next-error\",\n content: \"not-found\"\n }),\n this.props.notFoundStyles,\n this.props.notFound\n ]\n });\n }\n return this.props.children;\n }\n constructor(props){\n super(props);\n this.state = {\n notFoundTriggered: !!props.asNotFound,\n previousPathname: props.pathname\n };\n }\n}\nfunction NotFoundBoundary(param) {\n let { notFound, notFoundStyles, asNotFound, children } = param;\n const pathname = (0, _navigation.usePathname)();\n const missingSlots = (0, _react.useContext)(_approutercontextsharedruntime.MissingSlotContext);\n return notFound ? /*#__PURE__*/ (0, _jsxruntime.jsx)(NotFoundErrorBoundary, {\n pathname: pathname,\n notFound: notFound,\n notFoundStyles: notFoundStyles,\n asNotFound: asNotFound,\n missingSlots: missingSlots,\n children: children\n }) : /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=not-found-boundary.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1ib3VuZGFyeS5qcyIsIm1hcHBpbmdzIjoicURBRWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILG9EQUFtRDtJQUMvQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDRCQUE0QkMsbUJBQU9BLENBQUMsb0hBQTBDO0FBQ3BGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLGdJQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gsMEJBQTBCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLHdHQUFPO0FBQ3hFLE1BQU1JLGNBQWNKLG1CQUFPQSxDQUFDLG9GQUFjO0FBQzFDLE1BQU1LLFlBQVlMLG1CQUFPQSxDQUFDLGtGQUFhO0FBQ3ZDLE1BQU1NLFlBQVlOLG1CQUFPQSxDQUFDLHNHQUFrQztBQUM1RCxNQUFNTyxpQ0FBaUNQLG1CQUFPQSxDQUFDLHVLQUFvRDtBQUNuRyxNQUFNUSw4QkFBOEJOLE9BQU9PLE9BQU8sQ0FBQ0MsU0FBUztJQUN4REMsb0JBQW9CO1FBQ2hCLElBQUlDLEtBQXNDLElBQUksNEVBQTRFO1FBQzFILENBQUMsSUFBSSxDQUFDQyxLQUFLLENBQUNDLFlBQVksQ0FBQ0MsR0FBRyxDQUFDLGFBQWE7WUFDdEMsSUFBSUMsaUJBQWlCLDRIQUE0SDtZQUNqSixJQUFJLElBQUksQ0FBQ0gsS0FBSyxDQUFDQyxZQUFZLENBQUNHLElBQUksR0FBRyxHQUFHO2dCQUNsQyxNQUFNQyxpQkFBaUJDLE1BQU1DLElBQUksQ0FBQyxJQUFJLENBQUNQLEtBQUssQ0FBQ0MsWUFBWSxFQUFFTyxJQUFJLENBQUMsQ0FBQ0MsR0FBR0MsSUFBSUQsRUFBRUUsYUFBYSxDQUFDRCxJQUFJRSxHQUFHLENBQUMsQ0FBQ0MsT0FBTyxNQUFNQSxNQUFNQyxJQUFJLENBQUM7Z0JBQ3pIWCxrQkFBa0Isb0JBQW9CRTtZQUMxQztZQUNDLElBQUdaLFVBQVVzQixRQUFRLEVBQUVaO1FBQzVCO0lBQ0o7SUFDQSxPQUFPYSx5QkFBeUJDLEtBQUssRUFBRTtRQUNuQyxJQUFJLENBQUMsR0FBR3pCLFVBQVUwQixlQUFlLEVBQUVELFFBQVE7WUFDdkMsT0FBTztnQkFDSEUsbUJBQW1CO1lBQ3ZCO1FBQ0o7UUFDQSxtQ0FBbUM7UUFDbkMsTUFBTUY7SUFDVjtJQUNBLE9BQU9HLHlCQUF5QnBCLEtBQUssRUFBRXFCLEtBQUssRUFBRTtRQUMxQzs7Ozs7S0FLSCxHQUFHLElBQUlyQixNQUFNc0IsUUFBUSxLQUFLRCxNQUFNRSxnQkFBZ0IsSUFBSUYsTUFBTUYsaUJBQWlCLEVBQUU7WUFDdEUsT0FBTztnQkFDSEEsbUJBQW1CO2dCQUNuQkksa0JBQWtCdkIsTUFBTXNCLFFBQVE7WUFDcEM7UUFDSjtRQUNBLE9BQU87WUFDSEgsbUJBQW1CRSxNQUFNRixpQkFBaUI7WUFDMUNJLGtCQUFrQnZCLE1BQU1zQixRQUFRO1FBQ3BDO0lBQ0o7SUFDQUUsU0FBUztRQUNMLElBQUksSUFBSSxDQUFDSCxLQUFLLENBQUNGLGlCQUFpQixFQUFFO1lBQzlCLE9BQXFCLFdBQUgsR0FBSSxJQUFHL0IsWUFBWXFDLElBQUksRUFBRXJDLFlBQVlzQyxRQUFRLEVBQUU7Z0JBQzdEQyxVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHdkMsWUFBWXdDLEdBQUcsRUFBRSxRQUFRO3dCQUN2Q0MsTUFBTTt3QkFDTkMsU0FBUztvQkFDYjtvQkFoRXBCLEtBaUUwRCxJQUFrQixXQUFILEdBQUksSUFBRzFDLFlBQVl3QyxHQUFHLEVBQUUsUUFBUTt3QkFDakZDLE1BQU07d0JBQ05DLFNBQVM7b0JBQ2I7b0JBQ0EsSUFBSSxDQUFDOUIsS0FBSyxDQUFDK0IsY0FBYztvQkFDekIsSUFBSSxDQUFDL0IsS0FBSyxDQUFDZ0MsUUFBUTtpQkFDdEI7WUFDTDtRQUNKO1FBQ0EsT0FBTyxJQUFJLENBQUNoQyxLQUFLLENBQUMyQixRQUFRO0lBQzlCO0lBQ0FNLFlBQVlqQyxLQUFLLENBQUM7UUFDZCxLQUFLLENBQUNBO1FBQ04sSUFBSSxDQUFDcUIsS0FBSyxHQUFHO1lBQ1RGLG1CQUFtQixDQUFDLENBQUNuQixNQUFNa0MsVUFBVTtZQUNyQ1gsa0JBQWtCdkIsTUFBTXNCLFFBQVE7UUFDcEM7SUFDSjtBQUNKO0FBQ0EsU0FBU3JDLGlCQUFpQmtELEtBQUs7SUFDM0IsSUFBSSxFQUFFSCxRQUFRLEVBQUVELGNBQWMsRUFBRUcsVUFBVSxFQUFFUCxRQUFRLEVBQUUsR0FBR1E7SUFDekQsTUFBTWIsV0FBVyxDQUFDLEdBQUcvQixZQUFZNkMsV0FBVztJQUM1QyxNQUFNbkMsZUFBZSxDQUFDLEdBQUdaLE9BQU9nRCxVQUFVLEVBQUUzQywrQkFBK0I0QyxrQkFBa0I7SUFDN0YsT0FBT04sV0FBeUIsV0FBSCxHQUFJLElBQUc1QyxZQUFZd0MsR0FBRyxFQUFFakMsdUJBQXVCO1FBQ3hFMkIsVUFBVUE7UUFDVlUsVUFBVUE7UUFDVkQsZ0JBQWdCQTtRQUNoQkcsWUFBWUE7UUFDWmpDLGNBQWNBO1FBQ2QwQixVQUFVQTtJQUNkLEtBQW1CLFdBQUgsR0FBSSxJQUFHdkMsWUFBWXdDLEdBQUcsRUFBRXhDLFlBQVlzQyxRQUFRLEVBQUU7UUFDMURDLFVBQVVBO0lBQ2Q7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPOUMsUUFBUWUsT0FBTyxLQUFLLGNBQWUsT0FBT2YsUUFBUWUsT0FBTyxLQUFLLFlBQVlmLFFBQVFlLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2YsUUFBUWUsT0FBTyxDQUFDMkMsVUFBVSxLQUFLLGFBQWE7SUFDcks1RCxPQUFPQyxjQUFjLENBQUNDLFFBQVFlLE9BQU8sRUFBRSxjQUFjO1FBQUVkLE9BQU87SUFBSztJQUNuRUgsT0FBTzZELE1BQU0sQ0FBQzNELFFBQVFlLE9BQU8sRUFBRWY7SUFDL0I0RCxPQUFPNUQsT0FBTyxHQUFHQSxRQUFRZSxPQUFPO0FBQ2xDLEVBRUEsOENBQThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWJvdW5kYXJ5LmpzPzMyYzkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTm90Rm91bmRCb3VuZGFyeVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTm90Rm91bmRCb3VuZGFyeTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9uYXZpZ2F0aW9uID0gcmVxdWlyZShcIi4vbmF2aWdhdGlvblwiKTtcbmNvbnN0IF9ub3Rmb3VuZCA9IHJlcXVpcmUoXCIuL25vdC1mb3VuZFwiKTtcbmNvbnN0IF93YXJub25jZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL3V0aWxzL3dhcm4tb25jZVwiKTtcbmNvbnN0IF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmNsYXNzIE5vdEZvdW5kRXJyb3JCb3VuZGFyeSBleHRlbmRzIF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudCB7XG4gICAgY29tcG9uZW50RGlkQ2F0Y2goKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiICYmIC8vIEEgbWlzc2luZyBjaGlsZHJlbiBzbG90IGlzIHRoZSB0eXBpY2FsIG5vdC1mb3VuZCBjYXNlLCBzbyBubyBuZWVkIHRvIHdhcm5cbiAgICAgICAgIXRoaXMucHJvcHMubWlzc2luZ1Nsb3RzLmhhcyhcImNoaWxkcmVuXCIpKSB7XG4gICAgICAgICAgICBsZXQgd2FybmluZ01lc3NhZ2UgPSBcIk5vIGRlZmF1bHQgY29tcG9uZW50IHdhcyBmb3VuZCBmb3IgYSBwYXJhbGxlbCByb3V0ZSByZW5kZXJlZCBvbiB0aGlzIHBhZ2UuIEZhbGxpbmcgYmFjayB0byBuZWFyZXN0IE5vdEZvdW5kIGJvdW5kYXJ5LlxcblwiICsgXCJMZWFybiBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL3BhcmFsbGVsLXJvdXRlcyNkZWZhdWx0anNcXG5cXG5cIjtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLm1pc3NpbmdTbG90cy5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFNsb3RzID0gQXJyYXkuZnJvbSh0aGlzLnByb3BzLm1pc3NpbmdTbG90cykuc29ydCgoYSwgYik9PmEubG9jYWxlQ29tcGFyZShiKSkubWFwKChzbG90KT0+XCJAXCIgKyBzbG90KS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2UgKz0gXCJNaXNzaW5nIHNsb3RzOiBcIiArIGZvcm1hdHRlZFNsb3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKDAsIF93YXJub25jZS53YXJuT25jZSkod2FybmluZ01lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKCgwLCBfbm90Zm91bmQuaXNOb3RGb3VuZEVycm9yKShlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbm90Rm91bmRUcmlnZ2VyZWQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmUtdGhyb3cgaWYgZXJyb3IgaXMgbm90IGZvciA0MDRcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICAgIC8qKlxuICAgICAqIEhhbmRsZXMgcmVzZXQgb2YgdGhlIGVycm9yIGJvdW5kYXJ5IHdoZW4gYSBuYXZpZ2F0aW9uIGhhcHBlbnMuXG4gICAgICogRW5zdXJlcyB0aGUgZXJyb3IgYm91bmRhcnkgZG9lcyBub3Qgc3RheSBlbmFibGVkIHdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlLlxuICAgICAqIEFwcHJvYWNoIG9mIHNldFN0YXRlIGluIHJlbmRlciBpcyBzYWZlIGFzIGl0IGNoZWNrcyB0aGUgcHJldmlvdXMgcGF0aG5hbWUgYW5kIHRoZW4gb3ZlcnJpZGVzXG4gICAgICogaXQgYXMgb3V0bGluZWQgaW4gaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVN0YXRlI3N0b3JpbmctaW5mb3JtYXRpb24tZnJvbS1wcmV2aW91cy1yZW5kZXJzXG4gICAgICovIGlmIChwcm9wcy5wYXRobmFtZSAhPT0gc3RhdGUucHJldmlvdXNQYXRobmFtZSAmJiBzdGF0ZS5ub3RGb3VuZFRyaWdnZXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBub3RGb3VuZFRyaWdnZXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vdEZvdW5kVHJpZ2dlcmVkOiBzdGF0ZS5ub3RGb3VuZFRyaWdnZXJlZCxcbiAgICAgICAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUubm90Rm91bmRUcmlnZ2VyZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJtZXRhXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicm9ib3RzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIm5vaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiAmJiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibWV0YVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm5leHQtZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwibm90LWZvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubm90Rm91bmRTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubm90Rm91bmRcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBub3RGb3VuZFRyaWdnZXJlZDogISFwcm9wcy5hc05vdEZvdW5kLFxuICAgICAgICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBOb3RGb3VuZEJvdW5kYXJ5KHBhcmFtKSB7XG4gICAgbGV0IHsgbm90Rm91bmQsIG5vdEZvdW5kU3R5bGVzLCBhc05vdEZvdW5kLCBjaGlsZHJlbiB9ID0gcGFyYW07XG4gICAgY29uc3QgcGF0aG5hbWUgPSAoMCwgX25hdmlnYXRpb24udXNlUGF0aG5hbWUpKCk7XG4gICAgY29uc3QgbWlzc2luZ1Nsb3RzID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuTWlzc2luZ1Nsb3RDb250ZXh0KTtcbiAgICByZXR1cm4gbm90Rm91bmQgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKE5vdEZvdW5kRXJyb3JCb3VuZGFyeSwge1xuICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgICAgIG5vdEZvdW5kOiBub3RGb3VuZCxcbiAgICAgICAgbm90Rm91bmRTdHlsZXM6IG5vdEZvdW5kU3R5bGVzLFxuICAgICAgICBhc05vdEZvdW5kOiBhc05vdEZvdW5kLFxuICAgICAgICBtaXNzaW5nU2xvdHM6IG1pc3NpbmdTbG90cyxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkgOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub3QtZm91bmQtYm91bmRhcnkuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIk5vdEZvdW5kQm91bmRhcnkiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9uYXZpZ2F0aW9uIiwiX25vdGZvdW5kIiwiX3dhcm5vbmNlIiwiX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lIiwiTm90Rm91bmRFcnJvckJvdW5kYXJ5IiwiZGVmYXVsdCIsIkNvbXBvbmVudCIsImNvbXBvbmVudERpZENhdGNoIiwicHJvY2VzcyIsInByb3BzIiwibWlzc2luZ1Nsb3RzIiwiaGFzIiwid2FybmluZ01lc3NhZ2UiLCJzaXplIiwiZm9ybWF0dGVkU2xvdHMiLCJBcnJheSIsImZyb20iLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFwIiwic2xvdCIsImpvaW4iLCJ3YXJuT25jZSIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImVycm9yIiwiaXNOb3RGb3VuZEVycm9yIiwibm90Rm91bmRUcmlnZ2VyZWQiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJzdGF0ZSIsInBhdGhuYW1lIiwicHJldmlvdXNQYXRobmFtZSIsInJlbmRlciIsImpzeHMiLCJGcmFnbWVudCIsImNoaWxkcmVuIiwianN4IiwibmFtZSIsImNvbnRlbnQiLCJub3RGb3VuZFN0eWxlcyIsIm5vdEZvdW5kIiwiY29uc3RydWN0b3IiLCJhc05vdEZvdW5kIiwicGFyYW0iLCJ1c2VQYXRobmFtZSIsInVzZUNvbnRleHQiLCJNaXNzaW5nU2xvdENvbnRleHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/not-found-boundary.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/not-found.js": +/*!***************************************************************!*\ + !*** ./node_modules/next/dist/client/components/not-found.js ***! + \***************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n notFound: function() {\n return notFound;\n },\n isNotFoundError: function() {\n return isNotFoundError;\n }\n});\nconst NOT_FOUND_ERROR_CODE = \"NEXT_NOT_FOUND\";\nfunction notFound() {\n // eslint-disable-next-line no-throw-literal\n const error = new Error(NOT_FOUND_ERROR_CODE);\n error.digest = NOT_FOUND_ERROR_CODE;\n throw error;\n}\nfunction isNotFoundError(error) {\n if (typeof error !== \"object\" || error === null || !(\"digest\" in error)) {\n return false;\n }\n return error.digest === NOT_FOUND_ERROR_CODE;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=not-found.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsVUFBVTtRQUNOLE9BQU9BO0lBQ1g7SUFDQUMsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sdUJBQXVCO0FBQzdCLFNBQVNSO0lBQ0wsNENBQTRDO0lBQzVDLE1BQU1TLFFBQVEsSUFBSUMsTUFBTUY7SUFDeEJDLE1BQU1FLE1BQU0sR0FBR0g7SUFDZixNQUFNQztBQUNWO0FBQ0EsU0FBU1IsZ0JBQWdCUSxLQUFLO0lBQzFCLElBQUksT0FBT0EsVUFBVSxZQUFZQSxVQUFVLFFBQVEsQ0FBRSxhQUFZQSxLQUFJLEdBQUk7UUFDckUsT0FBTztJQUNYO0lBQ0EsT0FBT0EsTUFBTUUsTUFBTSxLQUFLSDtBQUM1QjtBQUVBLElBQUksQ0FBQyxPQUFPWCxRQUFRZSxPQUFPLEtBQUssY0FBZSxPQUFPZixRQUFRZSxPQUFPLEtBQUssWUFBWWYsUUFBUWUsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPZixRQUFRZSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLbEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRZSxPQUFPLEVBQUUsY0FBYztRQUFFZCxPQUFPO0lBQUs7SUFDbkVILE9BQU9tQixNQUFNLENBQUNqQixRQUFRZSxPQUFPLEVBQUVmO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVFlLE9BQU87QUFDbEMsRUFFQSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9ub3QtZm91bmQuanM/NDIwMyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIG5vdEZvdW5kOiBudWxsLFxuICAgIGlzTm90Rm91bmRFcnJvcjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBub3RGb3VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBub3RGb3VuZDtcbiAgICB9LFxuICAgIGlzTm90Rm91bmRFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc05vdEZvdW5kRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBOT1RfRk9VTkRfRVJST1JfQ09ERSA9IFwiTkVYVF9OT1RfRk9VTkRcIjtcbmZ1bmN0aW9uIG5vdEZvdW5kKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoTk9UX0ZPVU5EX0VSUk9SX0NPREUpO1xuICAgIGVycm9yLmRpZ2VzdCA9IE5PVF9GT1VORF9FUlJPUl9DT0RFO1xuICAgIHRocm93IGVycm9yO1xufVxuZnVuY3Rpb24gaXNOb3RGb3VuZEVycm9yKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciAhPT0gXCJvYmplY3RcIiB8fCBlcnJvciA9PT0gbnVsbCB8fCAhKFwiZGlnZXN0XCIgaW4gZXJyb3IpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yLmRpZ2VzdCA9PT0gTk9UX0ZPVU5EX0VSUk9SX0NPREU7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vdC1mb3VuZC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJub3RGb3VuZCIsImlzTm90Rm91bmRFcnJvciIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIk5PVF9GT1VORF9FUlJPUl9DT0RFIiwiZXJyb3IiLCJFcnJvciIsImRpZ2VzdCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/not-found.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/promise-queue.js": +/*!*******************************************************************!*\ + !*** ./node_modules/next/dist/client/components/promise-queue.js ***! + \*******************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/*\n This is a simple promise queue that allows you to limit the number of concurrent promises\n that are running at any given time. It's used to limit the number of concurrent\n prefetch requests that are being made to the server but could be used for other\n things as well.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"PromiseQueue\", ({\n enumerable: true,\n get: function() {\n return PromiseQueue;\n }\n}));\nconst _class_private_field_loose_base = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_base */ \"(ssr)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\");\nconst _class_private_field_loose_key = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_key */ \"(ssr)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\");\nvar _maxConcurrency = /*#__PURE__*/ _class_private_field_loose_key._(\"_maxConcurrency\"), _runningCount = /*#__PURE__*/ _class_private_field_loose_key._(\"_runningCount\"), _queue = /*#__PURE__*/ _class_private_field_loose_key._(\"_queue\"), _processNext = /*#__PURE__*/ _class_private_field_loose_key._(\"_processNext\");\nclass PromiseQueue {\n enqueue(promiseFn) {\n let taskResolve;\n let taskReject;\n const taskPromise = new Promise((resolve, reject)=>{\n taskResolve = resolve;\n taskReject = reject;\n });\n const task = async ()=>{\n try {\n _class_private_field_loose_base._(this, _runningCount)[_runningCount]++;\n const result = await promiseFn();\n taskResolve(result);\n } catch (error) {\n taskReject(error);\n } finally{\n _class_private_field_loose_base._(this, _runningCount)[_runningCount]--;\n _class_private_field_loose_base._(this, _processNext)[_processNext]();\n }\n };\n const enqueueResult = {\n promiseFn: taskPromise,\n task\n };\n // wonder if we should take a LIFO approach here\n _class_private_field_loose_base._(this, _queue)[_queue].push(enqueueResult);\n _class_private_field_loose_base._(this, _processNext)[_processNext]();\n return taskPromise;\n }\n bump(promiseFn) {\n const index = _class_private_field_loose_base._(this, _queue)[_queue].findIndex((item)=>item.promiseFn === promiseFn);\n if (index > -1) {\n const bumpedItem = _class_private_field_loose_base._(this, _queue)[_queue].splice(index, 1)[0];\n _class_private_field_loose_base._(this, _queue)[_queue].unshift(bumpedItem);\n _class_private_field_loose_base._(this, _processNext)[_processNext](true);\n }\n }\n constructor(maxConcurrency = 5){\n Object.defineProperty(this, _processNext, {\n value: processNext\n });\n Object.defineProperty(this, _maxConcurrency, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _runningCount, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _queue, {\n writable: true,\n value: void 0\n });\n _class_private_field_loose_base._(this, _maxConcurrency)[_maxConcurrency] = maxConcurrency;\n _class_private_field_loose_base._(this, _runningCount)[_runningCount] = 0;\n _class_private_field_loose_base._(this, _queue)[_queue] = [];\n }\n}\nfunction processNext(forced) {\n if (forced === void 0) forced = false;\n if ((_class_private_field_loose_base._(this, _runningCount)[_runningCount] < _class_private_field_loose_base._(this, _maxConcurrency)[_maxConcurrency] || forced) && _class_private_field_loose_base._(this, _queue)[_queue].length > 0) {\n var _class_private_field_loose_base__queue_shift;\n (_class_private_field_loose_base__queue_shift = _class_private_field_loose_base._(this, _queue)[_queue].shift()) == null ? void 0 : _class_private_field_loose_base__queue_shift.task();\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=promise-queue.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3Byb21pc2UtcXVldWUuanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0FBS0EsR0FBZ0I7QUFDaEJBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxnREFBK0M7SUFDM0NJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxrQ0FBa0NDLG1CQUFPQSxDQUFDLGdJQUFnRDtBQUNoRyxNQUFNQyxpQ0FBaUNELG1CQUFPQSxDQUFDLDhIQUErQztBQUM5RixJQUFJRSxrQkFBa0IsV0FBVyxHQUFHRCwrQkFBK0JFLENBQUMsQ0FBQyxvQkFBb0JDLGdCQUFnQixXQUFXLEdBQUdILCtCQUErQkUsQ0FBQyxDQUFDLGtCQUFrQkUsU0FBUyxXQUFXLEdBQUdKLCtCQUErQkUsQ0FBQyxDQUFDLFdBQVdHLGVBQWUsV0FBVyxHQUFHTCwrQkFBK0JFLENBQUMsQ0FBQztBQUMzUyxNQUFNTDtJQUNGUyxRQUFRQyxTQUFTLEVBQUU7UUFDZixJQUFJQztRQUNKLElBQUlDO1FBQ0osTUFBTUMsY0FBYyxJQUFJQyxRQUFRLENBQUNDLFNBQVNDO1lBQ3RDTCxjQUFjSTtZQUNkSCxhQUFhSTtRQUNqQjtRQUNBLE1BQU1DLE9BQU87WUFDVCxJQUFJO2dCQUNBaEIsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFQyxjQUFjLENBQUNBLGNBQWM7Z0JBQ3JFLE1BQU1ZLFNBQVMsTUFBTVI7Z0JBQ3JCQyxZQUFZTztZQUNoQixFQUFFLE9BQU9DLE9BQU87Z0JBQ1pQLFdBQVdPO1lBQ2YsU0FBUztnQkFDTGxCLGdDQUFnQ0ksQ0FBQyxDQUFDLElBQUksRUFBRUMsY0FBYyxDQUFDQSxjQUFjO2dCQUNyRUwsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFRyxhQUFhLENBQUNBLGFBQWE7WUFDdkU7UUFDSjtRQUNBLE1BQU1ZLGdCQUFnQjtZQUNsQlYsV0FBV0c7WUFDWEk7UUFDSjtRQUNBLGdEQUFnRDtRQUNoRGhCLGdDQUFnQ0ksQ0FBQyxDQUFDLElBQUksRUFBRUUsT0FBTyxDQUFDQSxPQUFPLENBQUNjLElBQUksQ0FBQ0Q7UUFDN0RuQixnQ0FBZ0NJLENBQUMsQ0FBQyxJQUFJLEVBQUVHLGFBQWEsQ0FBQ0EsYUFBYTtRQUNuRSxPQUFPSztJQUNYO0lBQ0FTLEtBQUtaLFNBQVMsRUFBRTtRQUNaLE1BQU1hLFFBQVF0QixnQ0FBZ0NJLENBQUMsQ0FBQyxJQUFJLEVBQUVFLE9BQU8sQ0FBQ0EsT0FBTyxDQUFDaUIsU0FBUyxDQUFDLENBQUNDLE9BQU9BLEtBQUtmLFNBQVMsS0FBS0E7UUFDM0csSUFBSWEsUUFBUSxDQUFDLEdBQUc7WUFDWixNQUFNRyxhQUFhekIsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFRSxPQUFPLENBQUNBLE9BQU8sQ0FBQ29CLE1BQU0sQ0FBQ0osT0FBTyxFQUFFLENBQUMsRUFBRTtZQUM5RnRCLGdDQUFnQ0ksQ0FBQyxDQUFDLElBQUksRUFBRUUsT0FBTyxDQUFDQSxPQUFPLENBQUNxQixPQUFPLENBQUNGO1lBQ2hFekIsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFRyxhQUFhLENBQUNBLGFBQWEsQ0FBQztRQUN4RTtJQUNKO0lBQ0FxQixZQUFZQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNCcEMsT0FBT0MsY0FBYyxDQUFDLElBQUksRUFBRWEsY0FBYztZQUN0Q1gsT0FBT2tDO1FBQ1g7UUFDQXJDLE9BQU9DLGNBQWMsQ0FBQyxJQUFJLEVBQUVTLGlCQUFpQjtZQUN6QzRCLFVBQVU7WUFDVm5DLE9BQU8sS0FBSztRQUNoQjtRQUNBSCxPQUFPQyxjQUFjLENBQUMsSUFBSSxFQUFFVyxlQUFlO1lBQ3ZDMEIsVUFBVTtZQUNWbkMsT0FBTyxLQUFLO1FBQ2hCO1FBQ0FILE9BQU9DLGNBQWMsQ0FBQyxJQUFJLEVBQUVZLFFBQVE7WUFDaEN5QixVQUFVO1lBQ1ZuQyxPQUFPLEtBQUs7UUFDaEI7UUFDQUksZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFRCxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLEdBQUcwQjtRQUM1RTdCLGdDQUFnQ0ksQ0FBQyxDQUFDLElBQUksRUFBRUMsY0FBYyxDQUFDQSxjQUFjLEdBQUc7UUFDeEVMLGdDQUFnQ0ksQ0FBQyxDQUFDLElBQUksRUFBRUUsT0FBTyxDQUFDQSxPQUFPLEdBQUcsRUFBRTtJQUNoRTtBQUNKO0FBQ0EsU0FBU3dCLFlBQVlFLE1BQU07SUFDdkIsSUFBSUEsV0FBVyxLQUFLLEdBQUdBLFNBQVM7SUFDaEMsSUFBSSxDQUFDaEMsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFQyxjQUFjLENBQUNBLGNBQWMsR0FBR0wsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFRCxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLElBQUk2QixNQUFLLEtBQU1oQyxnQ0FBZ0NJLENBQUMsQ0FBQyxJQUFJLEVBQUVFLE9BQU8sQ0FBQ0EsT0FBTyxDQUFDMkIsTUFBTSxHQUFHLEdBQUc7UUFDck8sSUFBSUM7UUFDSEEsQ0FBQUEsK0NBQStDbEMsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFRSxPQUFPLENBQUNBLE9BQU8sQ0FBQzZCLEtBQUssRUFBQyxLQUFNLE9BQU8sS0FBSyxJQUFJRCw2Q0FBNkNsQixJQUFJO0lBQ3pMO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT3JCLFFBQVF5QyxPQUFPLEtBQUssY0FBZSxPQUFPekMsUUFBUXlDLE9BQU8sS0FBSyxZQUFZekMsUUFBUXlDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3pDLFFBQVF5QyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLNUMsT0FBT0MsY0FBYyxDQUFDQyxRQUFReUMsT0FBTyxFQUFFLGNBQWM7UUFBRXhDLE9BQU87SUFBSztJQUNuRUgsT0FBTzZDLE1BQU0sQ0FBQzNDLFFBQVF5QyxPQUFPLEVBQUV6QztJQUMvQjRDLE9BQU81QyxPQUFPLEdBQUdBLFFBQVF5QyxPQUFPO0FBQ2xDLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcHJvbWlzZS1xdWV1ZS5qcz84MTY3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgVGhpcyBpcyBhIHNpbXBsZSBwcm9taXNlIHF1ZXVlIHRoYXQgYWxsb3dzIHlvdSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgcHJvbWlzZXNcbiAgICB0aGF0IGFyZSBydW5uaW5nIGF0IGFueSBnaXZlbiB0aW1lLiBJdCdzIHVzZWQgdG8gbGltaXQgdGhlIG51bWJlciBvZiBjb25jdXJyZW50XG4gICAgcHJlZmV0Y2ggcmVxdWVzdHMgdGhhdCBhcmUgYmVpbmcgbWFkZSB0byB0aGUgc2VydmVyIGJ1dCBjb3VsZCBiZSB1c2VkIGZvciBvdGhlclxuICAgIHRoaW5ncyBhcyB3ZWxsLlxuKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQcm9taXNlUXVldWVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2VRdWV1ZTtcbiAgICB9XG59KTtcbmNvbnN0IF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZVwiKTtcbmNvbnN0IF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleSA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9fY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXlcIik7XG52YXIgX21heENvbmN1cnJlbmN5ID0gLyojX19QVVJFX18qLyBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXkuXyhcIl9tYXhDb25jdXJyZW5jeVwiKSwgX3J1bm5pbmdDb3VudCA9IC8qI19fUFVSRV9fKi8gX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5Ll8oXCJfcnVubmluZ0NvdW50XCIpLCBfcXVldWUgPSAvKiNfX1BVUkVfXyovIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleS5fKFwiX3F1ZXVlXCIpLCBfcHJvY2Vzc05leHQgPSAvKiNfX1BVUkVfXyovIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleS5fKFwiX3Byb2Nlc3NOZXh0XCIpO1xuY2xhc3MgUHJvbWlzZVF1ZXVlIHtcbiAgICBlbnF1ZXVlKHByb21pc2VGbikge1xuICAgICAgICBsZXQgdGFza1Jlc29sdmU7XG4gICAgICAgIGxldCB0YXNrUmVqZWN0O1xuICAgICAgICBjb25zdCB0YXNrUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgICAgICB0YXNrUmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB0YXNrUmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdGFzayA9IGFzeW5jICgpPT57XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuXyh0aGlzLCBfcnVubmluZ0NvdW50KVtfcnVubmluZ0NvdW50XSsrO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2VGbigpO1xuICAgICAgICAgICAgICAgIHRhc2tSZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRhc2tSZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSBmaW5hbGx5e1xuICAgICAgICAgICAgICAgIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuXyh0aGlzLCBfcnVubmluZ0NvdW50KVtfcnVubmluZ0NvdW50XS0tO1xuICAgICAgICAgICAgICAgIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuXyh0aGlzLCBfcHJvY2Vzc05leHQpW19wcm9jZXNzTmV4dF0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZW5xdWV1ZVJlc3VsdCA9IHtcbiAgICAgICAgICAgIHByb21pc2VGbjogdGFza1Byb21pc2UsXG4gICAgICAgICAgICB0YXNrXG4gICAgICAgIH07XG4gICAgICAgIC8vIHdvbmRlciBpZiB3ZSBzaG91bGQgdGFrZSBhIExJRk8gYXBwcm9hY2ggaGVyZVxuICAgICAgICBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlLl8odGhpcywgX3F1ZXVlKVtfcXVldWVdLnB1c2goZW5xdWV1ZVJlc3VsdCk7XG4gICAgICAgIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuXyh0aGlzLCBfcHJvY2Vzc05leHQpW19wcm9jZXNzTmV4dF0oKTtcbiAgICAgICAgcmV0dXJuIHRhc2tQcm9taXNlO1xuICAgIH1cbiAgICBidW1wKHByb21pc2VGbikge1xuICAgICAgICBjb25zdCBpbmRleCA9IF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuXyh0aGlzLCBfcXVldWUpW19xdWV1ZV0uZmluZEluZGV4KChpdGVtKT0+aXRlbS5wcm9taXNlRm4gPT09IHByb21pc2VGbik7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBidW1wZWRJdGVtID0gX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9xdWV1ZSlbX3F1ZXVlXS5zcGxpY2UoaW5kZXgsIDEpWzBdO1xuICAgICAgICAgICAgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9xdWV1ZSlbX3F1ZXVlXS51bnNoaWZ0KGJ1bXBlZEl0ZW0pO1xuICAgICAgICAgICAgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9wcm9jZXNzTmV4dClbX3Byb2Nlc3NOZXh0XSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihtYXhDb25jdXJyZW5jeSA9IDUpe1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgX3Byb2Nlc3NOZXh0LCB7XG4gICAgICAgICAgICB2YWx1ZTogcHJvY2Vzc05leHRcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBfbWF4Q29uY3VycmVuY3ksIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIF9ydW5uaW5nQ291bnQsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIF9xdWV1ZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlLl8odGhpcywgX21heENvbmN1cnJlbmN5KVtfbWF4Q29uY3VycmVuY3ldID0gbWF4Q29uY3VycmVuY3k7XG4gICAgICAgIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuXyh0aGlzLCBfcnVubmluZ0NvdW50KVtfcnVubmluZ0NvdW50XSA9IDA7XG4gICAgICAgIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuXyh0aGlzLCBfcXVldWUpW19xdWV1ZV0gPSBbXTtcbiAgICB9XG59XG5mdW5jdGlvbiBwcm9jZXNzTmV4dChmb3JjZWQpIHtcbiAgICBpZiAoZm9yY2VkID09PSB2b2lkIDApIGZvcmNlZCA9IGZhbHNlO1xuICAgIGlmICgoX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9ydW5uaW5nQ291bnQpW19ydW5uaW5nQ291bnRdIDwgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9tYXhDb25jdXJyZW5jeSlbX21heENvbmN1cnJlbmN5XSB8fCBmb3JjZWQpICYmIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuXyh0aGlzLCBfcXVldWUpW19xdWV1ZV0ubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZV9fcXVldWVfc2hpZnQ7XG4gICAgICAgIChfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlX19xdWV1ZV9zaGlmdCA9IF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuXyh0aGlzLCBfcXVldWUpW19xdWV1ZV0uc2hpZnQoKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2VfX3F1ZXVlX3NoaWZ0LnRhc2soKTtcbiAgICB9XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByb21pc2UtcXVldWUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIlByb21pc2VRdWV1ZSIsIl9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UiLCJyZXF1aXJlIiwiX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5IiwiX21heENvbmN1cnJlbmN5IiwiXyIsIl9ydW5uaW5nQ291bnQiLCJfcXVldWUiLCJfcHJvY2Vzc05leHQiLCJlbnF1ZXVlIiwicHJvbWlzZUZuIiwidGFza1Jlc29sdmUiLCJ0YXNrUmVqZWN0IiwidGFza1Byb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInRhc2siLCJyZXN1bHQiLCJlcnJvciIsImVucXVldWVSZXN1bHQiLCJwdXNoIiwiYnVtcCIsImluZGV4IiwiZmluZEluZGV4IiwiaXRlbSIsImJ1bXBlZEl0ZW0iLCJzcGxpY2UiLCJ1bnNoaWZ0IiwiY29uc3RydWN0b3IiLCJtYXhDb25jdXJyZW5jeSIsInByb2Nlc3NOZXh0Iiwid3JpdGFibGUiLCJmb3JjZWQiLCJsZW5ndGgiLCJfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlX19xdWV1ZV9zaGlmdCIsInNoaWZ0IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/promise-queue.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/hot-reloader-client.js": +/*!*******************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/hot-reloader-client.js ***! + \*******************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/* module decorator */ module = __webpack_require__.nmd(module);\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return HotReload;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(ssr)/./node_modules/next/dist/compiled/strip-ansi/index.js\"));\nconst _formatwebpackmessages = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../dev/error-overlay/format-webpack-messages */ \"(ssr)/./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js\"));\nconst _navigation = __webpack_require__(/*! ../navigation */ \"(ssr)/./node_modules/next/dist/client/components/navigation.js\");\nconst _erroroverlayreducer = __webpack_require__(/*! ./internal/error-overlay-reducer */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js\");\nconst _parseStack = __webpack_require__(/*! ./internal/helpers/parseStack */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js\");\nconst _ReactDevOverlay = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./internal/ReactDevOverlay */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/ReactDevOverlay.js\"));\nconst _useerrorhandler = __webpack_require__(/*! ./internal/helpers/use-error-handler */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-error-handler.js\");\nconst _usewebsocket = __webpack_require__(/*! ./internal/helpers/use-websocket */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-websocket.js\");\nconst _parsecomponentstack = __webpack_require__(/*! ./internal/helpers/parse-component-stack */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../../../server/dev/hot-reloader-types */ \"(ssr)/./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nlet mostRecentCompilationHash = null;\nlet __nextDevClientId = Math.round(Math.random() * 100 + Date.now());\nlet reloading = false;\nlet startLatency = null;\nfunction onBeforeFastRefresh(dispatcher, hasUpdates) {\n if (hasUpdates) {\n dispatcher.onBeforeRefresh();\n }\n}\nfunction onFastRefresh(dispatcher, sendMessage, updatedModules) {\n let endLatency = Date.now();\n dispatcher.onBuildOk();\n sendMessage(JSON.stringify({\n event: \"client-hmr-latency\",\n id: window.__nextDevClientId,\n startTime: startLatency,\n endTime: endLatency,\n page: window.location.pathname,\n updatedModules,\n // Whether the page (tab) was hidden at the time the event occurred.\n // This can impact the accuracy of the event's timing.\n isPageHidden: document.visibilityState === \"hidden\"\n }));\n if (updatedModules.length > 0) {\n dispatcher.onRefresh();\n }\n}\n// There is a newer version of the code available.\nfunction handleAvailableHash(hash) {\n // Update last known compilation hash.\n mostRecentCompilationHash = hash;\n}\n/**\n * Is there a newer version of this code available?\n * For webpack: Check if the hash changed compared to __webpack_hash__\n * For Turbopack: Always true because it doesn't have __webpack_hash__\n */ function isUpdateAvailable() {\n if (false) {}\n /* globals __webpack_hash__ */ // __webpack_hash__ is the hash of the current compilation.\n // It's a global variable injected by Webpack.\n return mostRecentCompilationHash !== __webpack_require__.h();\n}\n// Webpack disallows updates in other states.\nfunction canApplyUpdates() {\n // @ts-expect-error module.hot exists\n return module.hot.status() === \"idle\";\n}\nfunction afterApplyUpdates(fn) {\n if (canApplyUpdates()) {\n fn();\n } else {\n function handler(status) {\n if (status === \"idle\") {\n // @ts-expect-error module.hot exists\n module.hot.removeStatusHandler(handler);\n fn();\n }\n }\n // @ts-expect-error module.hot exists\n module.hot.addStatusHandler(handler);\n }\n}\nfunction performFullReload(err, sendMessage) {\n const stackTrace = err && (err.stack && err.stack.split(\"\\n\").slice(0, 5).join(\"\\n\") || err.message || err + \"\");\n sendMessage(JSON.stringify({\n event: \"client-full-reload\",\n stackTrace,\n hadRuntimeError: !!_useerrorhandler.RuntimeErrorHandler.hadRuntimeError\n }));\n if (reloading) return;\n reloading = true;\n window.location.reload();\n}\n// Attempt to update code on the fly, fall back to a hard reload.\nfunction tryApplyUpdates(onBeforeUpdate, onHotUpdateSuccess, sendMessage, dispatcher) {\n if (!isUpdateAvailable() || !canApplyUpdates()) {\n dispatcher.onBuildOk();\n return;\n }\n function handleApplyUpdates(err, updatedModules) {\n if (err || _useerrorhandler.RuntimeErrorHandler.hadRuntimeError || !updatedModules) {\n if (err) {\n console.warn(\"[Fast Refresh] performing full reload\\n\\n\" + \"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\\n\" + \"You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\\n\" + \"Consider migrating the non-React component export to a separate file and importing it into both files.\\n\\n\" + \"It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\\n\" + \"Fast Refresh requires at least one parent function component in your React tree.\");\n } else if (_useerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(\"[Fast Refresh] performing full reload because your application had an unrecoverable error\");\n }\n performFullReload(err, sendMessage);\n return;\n }\n const hasUpdates = Boolean(updatedModules.length);\n if (typeof onHotUpdateSuccess === \"function\") {\n // Maybe we want to do something.\n onHotUpdateSuccess(updatedModules);\n }\n if (isUpdateAvailable()) {\n // While we were updating, there was a new update! Do it again.\n tryApplyUpdates(hasUpdates ? ()=>{} : onBeforeUpdate, hasUpdates ? ()=>dispatcher.onBuildOk() : onHotUpdateSuccess, sendMessage, dispatcher);\n } else {\n dispatcher.onBuildOk();\n if (false) {}\n }\n }\n // https://webpack.js.org/api/hot-module-replacement/#check\n // @ts-expect-error module.hot exists\n module.hot.check(/* autoApply */ false).then((updatedModules)=>{\n if (!updatedModules) {\n return null;\n }\n if (typeof onBeforeUpdate === \"function\") {\n const hasUpdates = Boolean(updatedModules.length);\n onBeforeUpdate(hasUpdates);\n }\n // https://webpack.js.org/api/hot-module-replacement/#apply\n // @ts-expect-error module.hot exists\n return module.hot.apply();\n }).then((updatedModules)=>{\n handleApplyUpdates(null, updatedModules);\n }, (err)=>{\n handleApplyUpdates(err, null);\n });\n}\nfunction processMessage(obj, sendMessage, router, dispatcher) {\n if (!(\"action\" in obj)) {\n return;\n }\n function handleErrors(errors) {\n // \"Massage\" webpack messages.\n const formatted = (0, _formatwebpackmessages.default)({\n errors: errors,\n warnings: []\n });\n // Only show the first error.\n dispatcher.onBuildError(formatted.errors[0]);\n // Also log them to the console.\n for(let i = 0; i < formatted.errors.length; i++){\n console.error((0, _stripansi.default)(formatted.errors[i]));\n }\n // Do not attempt to reload now.\n // We will reload on next success instead.\n if (false) {}\n }\n function handleHotUpdate(updatedModules) {\n if (false) {} else {\n tryApplyUpdates(function onBeforeHotUpdate(hasUpdates) {\n onBeforeFastRefresh(dispatcher, hasUpdates);\n }, function onSuccessfulHotUpdate(webpackUpdatedModules) {\n // Only dismiss it when we're sure it's a hot update.\n // Otherwise it would flicker right before the reload.\n onFastRefresh(dispatcher, sendMessage, webpackUpdatedModules);\n }, sendMessage, dispatcher);\n }\n }\n switch(obj.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILDING:\n {\n startLatency = Date.now();\n console.log(\"[Fast Refresh] rebuilding\");\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.FINISH_BUILDING:\n {\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SYNC:\n {\n if (obj.hash) {\n handleAvailableHash(obj.hash);\n }\n const { errors, warnings } = obj;\n // Is undefined when it's a 'built' event\n if (\"versionInfo\" in obj) {\n dispatcher.onVersionInfo(obj.versionInfo);\n }\n const hasErrors = Boolean(errors && errors.length);\n // Compilation with errors (e.g. syntax error or missing modules).\n if (hasErrors) {\n sendMessage(JSON.stringify({\n event: \"client-error\",\n errorCount: errors.length,\n clientId: __nextDevClientId\n }));\n handleErrors(errors);\n return;\n }\n const hasWarnings = Boolean(warnings && warnings.length);\n if (hasWarnings) {\n sendMessage(JSON.stringify({\n event: \"client-warning\",\n warningCount: warnings.length,\n clientId: __nextDevClientId\n }));\n // Print warnings to the console.\n const formattedMessages = (0, _formatwebpackmessages.default)({\n warnings: warnings,\n errors: []\n });\n for(let i = 0; i < formattedMessages.warnings.length; i++){\n if (i === 5) {\n console.warn(\"There were more warnings in other files.\\n\" + \"You can find a complete log in the terminal.\");\n break;\n }\n console.warn((0, _stripansi.default)(formattedMessages.warnings[i]));\n }\n // No early return here as we need to apply modules in the same way between warnings only and compiles without warnings\n }\n sendMessage(JSON.stringify({\n event: \"client-success\",\n clientId: __nextDevClientId\n }));\n if (obj.action === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT) {\n // Handle hot updates\n handleHotUpdate(obj.updatedModules);\n }\n return;\n }\n // TODO-APP: make server component change more granular\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES:\n {\n sendMessage(JSON.stringify({\n event: \"server-component-reload-page\",\n clientId: __nextDevClientId\n }));\n if (_useerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n if (reloading) return;\n reloading = true;\n return window.location.reload();\n }\n (0, _react.startTransition)(()=>{\n // @ts-ignore it exists, it's just hidden\n router.fastRefresh();\n dispatcher.onRefresh();\n });\n if (false) {}\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE:\n {\n sendMessage(JSON.stringify({\n event: \"client-reload-page\",\n clientId: __nextDevClientId\n }));\n if (reloading) return;\n reloading = true;\n return window.location.reload();\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.REMOVED_PAGE:\n {\n // TODO-APP: potentially only refresh if the currently viewed page was removed.\n // @ts-ignore it exists, it's just hidden\n router.fastRefresh();\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.ADDED_PAGE:\n {\n // TODO-APP: potentially only refresh if the currently viewed page was added.\n // @ts-ignore it exists, it's just hidden\n router.fastRefresh();\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR:\n {\n const { errorJSON } = obj;\n if (errorJSON) {\n const { message, stack } = JSON.parse(errorJSON);\n const error = new Error(message);\n error.stack = stack;\n handleErrors([\n error\n ]);\n }\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE:\n {\n return;\n }\n default:\n {}\n }\n}\nfunction HotReload(param) {\n let { assetPrefix, children } = param;\n const [state, dispatch] = (0, _react.useReducer)(_erroroverlayreducer.errorOverlayReducer, _erroroverlayreducer.INITIAL_OVERLAY_STATE);\n const dispatcher = (0, _react.useMemo)(()=>{\n return {\n onBuildOk () {\n dispatch({\n type: _erroroverlayreducer.ACTION_BUILD_OK\n });\n },\n onBuildError (message) {\n dispatch({\n type: _erroroverlayreducer.ACTION_BUILD_ERROR,\n message\n });\n },\n onBeforeRefresh () {\n dispatch({\n type: _erroroverlayreducer.ACTION_BEFORE_REFRESH\n });\n },\n onRefresh () {\n dispatch({\n type: _erroroverlayreducer.ACTION_REFRESH\n });\n },\n onVersionInfo (versionInfo) {\n dispatch({\n type: _erroroverlayreducer.ACTION_VERSION_INFO,\n versionInfo\n });\n }\n };\n }, [\n dispatch\n ]);\n const handleOnUnhandledError = (0, _react.useCallback)((error)=>{\n // Component stack is added to the error in use-error-handler in case there was a hydration errror\n const componentStack = error._componentStack;\n dispatch({\n type: _erroroverlayreducer.ACTION_UNHANDLED_ERROR,\n reason: error,\n frames: (0, _parseStack.parseStack)(error.stack),\n componentStackFrames: componentStack && (0, _parsecomponentstack.parseComponentStack)(componentStack)\n });\n }, []);\n const handleOnUnhandledRejection = (0, _react.useCallback)((reason)=>{\n dispatch({\n type: _erroroverlayreducer.ACTION_UNHANDLED_REJECTION,\n reason: reason,\n frames: (0, _parseStack.parseStack)(reason.stack)\n });\n }, []);\n const handleOnReactError = (0, _react.useCallback)(()=>{\n _useerrorhandler.RuntimeErrorHandler.hadRuntimeError = true;\n }, []);\n (0, _useerrorhandler.useErrorHandler)(handleOnUnhandledError, handleOnUnhandledRejection);\n const webSocketRef = (0, _usewebsocket.useWebsocket)(assetPrefix);\n (0, _usewebsocket.useWebsocketPing)(webSocketRef);\n const sendMessage = (0, _usewebsocket.useSendMessage)(webSocketRef);\n const processTurbopackMessage = (0, _usewebsocket.useTurbopack)(sendMessage);\n const router = (0, _navigation.useRouter)();\n (0, _react.useEffect)(()=>{\n const handler = (event)=>{\n try {\n const obj = JSON.parse(event.data);\n const handledByTurbopack = processTurbopackMessage == null ? void 0 : processTurbopackMessage(obj);\n if (!handledByTurbopack) {\n processMessage(obj, sendMessage, router, dispatcher);\n }\n } catch (err) {\n var _err_stack;\n console.warn(\"[HMR] Invalid message: \" + event.data + \"\\n\" + ((_err_stack = err == null ? void 0 : err.stack) != null ? _err_stack : \"\"));\n }\n };\n const websocket = webSocketRef.current;\n if (websocket) {\n websocket.addEventListener(\"message\", handler);\n }\n return ()=>websocket && websocket.removeEventListener(\"message\", handler);\n }, [\n sendMessage,\n router,\n webSocketRef,\n dispatcher,\n processTurbopackMessage\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_ReactDevOverlay.default, {\n onReactError: handleOnReactError,\n state: state,\n children: children\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hot-reloader-client.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2hvdC1yZWxvYWRlci1jbGllbnQuanMiLCJtYXBwaW5ncyI6IjtBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGtIQUF5QztBQUNsRixNQUFNQyw0QkFBNEJELG1CQUFPQSxDQUFDLG9IQUEwQztBQUNwRixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyxnSUFBbUI7QUFDL0MsTUFBTUcsU0FBUyxXQUFXLEdBQUdGLDBCQUEwQkcsQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyx3R0FBTztBQUN4RSxNQUFNSyxhQUFhLFdBQVcsR0FBR04seUJBQXlCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLGtHQUErQjtBQUNuRyxNQUFNTSx5QkFBeUIsV0FBVyxHQUFHUCx5QkFBeUJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsMklBQWlEO0FBQ2pJLE1BQU1PLGNBQWNQLG1CQUFPQSxDQUFDLHFGQUFlO0FBQzNDLE1BQU1RLHVCQUF1QlIsbUJBQU9BLENBQUMsOElBQWtDO0FBQ3ZFLE1BQU1TLGNBQWNULG1CQUFPQSxDQUFDLHdJQUErQjtBQUMzRCxNQUFNVSxtQkFBbUIsV0FBVyxHQUFHWCx5QkFBeUJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsa0lBQTRCO0FBQ3RHLE1BQU1XLG1CQUFtQlgsbUJBQU9BLENBQUMsc0pBQXNDO0FBQ3ZFLE1BQU1ZLGdCQUFnQlosbUJBQU9BLENBQUMsOElBQWtDO0FBQ2hFLE1BQU1hLHVCQUF1QmIsbUJBQU9BLENBQUMsOEpBQTBDO0FBQy9FLE1BQU1jLG9CQUFvQmQsbUJBQU9BLENBQUMsK0dBQXdDO0FBQzFFLElBQUllLDRCQUE0QjtBQUNoQyxJQUFJQyxvQkFBb0JDLEtBQUtDLEtBQUssQ0FBQ0QsS0FBS0UsTUFBTSxLQUFLLE1BQU1DLEtBQUtDLEdBQUc7QUFDakUsSUFBSUMsWUFBWTtBQUNoQixJQUFJQyxlQUFlO0FBQ25CLFNBQVNDLG9CQUFvQkMsVUFBVSxFQUFFQyxVQUFVO0lBQy9DLElBQUlBLFlBQVk7UUFDWkQsV0FBV0UsZUFBZTtJQUM5QjtBQUNKO0FBQ0EsU0FBU0MsY0FBY0gsVUFBVSxFQUFFSSxXQUFXLEVBQUVDLGNBQWM7SUFDMUQsSUFBSUMsYUFBYVgsS0FBS0MsR0FBRztJQUN6QkksV0FBV08sU0FBUztJQUNwQkgsWUFBWUksS0FBS0MsU0FBUyxDQUFDO1FBQ3ZCQyxPQUFPO1FBQ1BDLElBQUlDLE9BQU9yQixpQkFBaUI7UUFDNUJzQixXQUFXZjtRQUNYZ0IsU0FBU1I7UUFDVFMsTUFBTUgsT0FBT0ksUUFBUSxDQUFDQyxRQUFRO1FBQzlCWjtRQUNBLG9FQUFvRTtRQUNwRSxzREFBc0Q7UUFDdERhLGNBQWNDLFNBQVNDLGVBQWUsS0FBSztJQUMvQztJQUNBLElBQUlmLGVBQWVnQixNQUFNLEdBQUcsR0FBRztRQUMzQnJCLFdBQVdzQixTQUFTO0lBQ3hCO0FBQ0o7QUFDQSxrREFBa0Q7QUFDbEQsU0FBU0Msb0JBQW9CQyxJQUFJO0lBQzdCLHNDQUFzQztJQUN0Q2xDLDRCQUE0QmtDO0FBQ2hDO0FBQ0E7Ozs7Q0FJQyxHQUFHLFNBQVNDO0lBQ1QsSUFBSUMsS0FBcUIsRUFBRSxFQUUxQjtJQUNELDRCQUE0QixHQUFHLDJEQUEyRDtJQUMxRiw4Q0FBOEM7SUFDOUMsT0FBT3BDLDhCQUE4QnVDLHVCQUFnQkE7QUFDekQ7QUFDQSw2Q0FBNkM7QUFDN0MsU0FBU0M7SUFDTCxxQ0FBcUM7SUFDckMsT0FBT0MsT0FBT0MsR0FBRyxDQUFDQyxNQUFNLE9BQU87QUFDbkM7QUFDQSxTQUFTQyxrQkFBa0JDLEVBQUU7SUFDekIsSUFBSUwsbUJBQW1CO1FBQ25CSztJQUNKLE9BQU87UUFDSCxTQUFTQyxRQUFRSCxNQUFNO1lBQ25CLElBQUlBLFdBQVcsUUFBUTtnQkFDbkIscUNBQXFDO2dCQUNyQ0YsT0FBT0MsR0FBRyxDQUFDSyxtQkFBbUIsQ0FBQ0Q7Z0JBQy9CRDtZQUNKO1FBQ0o7UUFDQSxxQ0FBcUM7UUFDckNKLE9BQU9DLEdBQUcsQ0FBQ00sZ0JBQWdCLENBQUNGO0lBQ2hDO0FBQ0o7QUFDQSxTQUFTRyxrQkFBa0JDLEdBQUcsRUFBRXBDLFdBQVc7SUFDdkMsTUFBTXFDLGFBQWFELE9BQVFBLENBQUFBLElBQUlFLEtBQUssSUFBSUYsSUFBSUUsS0FBSyxDQUFDQyxLQUFLLENBQUMsTUFBTUMsS0FBSyxDQUFDLEdBQUcsR0FBR0MsSUFBSSxDQUFDLFNBQVNMLElBQUlNLE9BQU8sSUFBSU4sTUFBTSxFQUFDO0lBQzlHcEMsWUFBWUksS0FBS0MsU0FBUyxDQUFDO1FBQ3ZCQyxPQUFPO1FBQ1ArQjtRQUNBTSxpQkFBaUIsQ0FBQyxDQUFDN0QsaUJBQWlCOEQsbUJBQW1CLENBQUNELGVBQWU7SUFDM0U7SUFDQSxJQUFJbEQsV0FBVztJQUNmQSxZQUFZO0lBQ1plLE9BQU9JLFFBQVEsQ0FBQ2lDLE1BQU07QUFDMUI7QUFDQSxpRUFBaUU7QUFDakUsU0FBU0MsZ0JBQWdCQyxjQUFjLEVBQUVDLGtCQUFrQixFQUFFaEQsV0FBVyxFQUFFSixVQUFVO0lBQ2hGLElBQUksQ0FBQ3lCLHVCQUF1QixDQUFDSyxtQkFBbUI7UUFDNUM5QixXQUFXTyxTQUFTO1FBQ3BCO0lBQ0o7SUFDQSxTQUFTOEMsbUJBQW1CYixHQUFHLEVBQUVuQyxjQUFjO1FBQzNDLElBQUltQyxPQUFPdEQsaUJBQWlCOEQsbUJBQW1CLENBQUNELGVBQWUsSUFBSSxDQUFDMUMsZ0JBQWdCO1lBQ2hGLElBQUltQyxLQUFLO2dCQUNMYyxRQUFRQyxJQUFJLENBQUMsOENBQThDLG1JQUFtSSxxSUFBcUksK0dBQStHLDhIQUE4SDtZQUNwakIsT0FBTyxJQUFJckUsaUJBQWlCOEQsbUJBQW1CLENBQUNELGVBQWUsRUFBRTtnQkFDN0RPLFFBQVFDLElBQUksQ0FBQztZQUNqQjtZQUNBaEIsa0JBQWtCQyxLQUFLcEM7WUFDdkI7UUFDSjtRQUNBLE1BQU1ILGFBQWF1RCxRQUFRbkQsZUFBZWdCLE1BQU07UUFDaEQsSUFBSSxPQUFPK0IsdUJBQXVCLFlBQVk7WUFDMUMsaUNBQWlDO1lBQ2pDQSxtQkFBbUIvQztRQUN2QjtRQUNBLElBQUlvQixxQkFBcUI7WUFDckIsK0RBQStEO1lBQy9EeUIsZ0JBQWdCakQsYUFBYSxLQUFLLElBQUlrRCxnQkFBZ0JsRCxhQUFhLElBQUlELFdBQVdPLFNBQVMsS0FBSzZDLG9CQUFvQmhELGFBQWFKO1FBQ3JJLE9BQU87WUFDSEEsV0FBV08sU0FBUztZQUNwQixJQUFJbUIsS0FBNEIsRUFBRSxFQU9qQztRQUNMO0lBQ0o7SUFDQSwyREFBMkQ7SUFDM0QscUNBQXFDO0lBQ3JDSyxPQUFPQyxHQUFHLENBQUM0QixLQUFLLENBQUMsYUFBYSxHQUFHLE9BQU9DLElBQUksQ0FBQyxDQUFDeEQ7UUFDMUMsSUFBSSxDQUFDQSxnQkFBZ0I7WUFDakIsT0FBTztRQUNYO1FBQ0EsSUFBSSxPQUFPOEMsbUJBQW1CLFlBQVk7WUFDdEMsTUFBTWxELGFBQWF1RCxRQUFRbkQsZUFBZWdCLE1BQU07WUFDaEQ4QixlQUFlbEQ7UUFDbkI7UUFDQSwyREFBMkQ7UUFDM0QscUNBQXFDO1FBQ3JDLE9BQU84QixPQUFPQyxHQUFHLENBQUM4QixLQUFLO0lBQzNCLEdBQUdELElBQUksQ0FBQyxDQUFDeEQ7UUFDTGdELG1CQUFtQixNQUFNaEQ7SUFDN0IsR0FBRyxDQUFDbUM7UUFDQWEsbUJBQW1CYixLQUFLO0lBQzVCO0FBQ0o7QUFDQSxTQUFTdUIsZUFBZUMsR0FBRyxFQUFFNUQsV0FBVyxFQUFFNkQsTUFBTSxFQUFFakUsVUFBVTtJQUN4RCxJQUFJLENBQUUsYUFBWWdFLEdBQUUsR0FBSTtRQUNwQjtJQUNKO0lBQ0EsU0FBU0UsYUFBYUMsTUFBTTtRQUN4Qiw4QkFBOEI7UUFDOUIsTUFBTUMsWUFBWSxDQUFDLEdBQUd2Rix1QkFBdUJ3RixPQUFPLEVBQUU7WUFDbERGLFFBQVFBO1lBQ1JHLFVBQVUsRUFBRTtRQUNoQjtRQUNBLDZCQUE2QjtRQUM3QnRFLFdBQVd1RSxZQUFZLENBQUNILFVBQVVELE1BQU0sQ0FBQyxFQUFFO1FBQzNDLGdDQUFnQztRQUNoQyxJQUFJLElBQUlLLElBQUksR0FBR0EsSUFBSUosVUFBVUQsTUFBTSxDQUFDOUMsTUFBTSxFQUFFbUQsSUFBSTtZQUM1Q2xCLFFBQVFtQixLQUFLLENBQUMsQ0FBQyxHQUFHN0YsV0FBV3lGLE9BQU8sRUFBRUQsVUFBVUQsTUFBTSxDQUFDSyxFQUFFO1FBQzdEO1FBQ0EsZ0NBQWdDO1FBQ2hDLDBDQUEwQztRQUMxQyxJQUFJOUMsS0FBNEIsRUFBRSxFQUtqQztJQUNMO0lBQ0EsU0FBU2dELGdCQUFnQnJFLGNBQWM7UUFDbkMsSUFBSXFCLEtBQXFCLEVBQUUsRUFFMUIsTUFBTTtZQUNId0IsZ0JBQWdCLFNBQVN5QixrQkFBa0IxRSxVQUFVO2dCQUNqREYsb0JBQW9CQyxZQUFZQztZQUNwQyxHQUFHLFNBQVMyRSxzQkFBc0JDLHFCQUFxQjtnQkFDbkQscURBQXFEO2dCQUNyRCxzREFBc0Q7Z0JBQ3REMUUsY0FBY0gsWUFBWUksYUFBYXlFO1lBQzNDLEdBQUd6RSxhQUFhSjtRQUNwQjtJQUNKO0lBQ0EsT0FBT2dFLElBQUljLE1BQU07UUFDYixLQUFLekYsa0JBQWtCMEYsMkJBQTJCLENBQUNDLFFBQVE7WUFDdkQ7Z0JBQ0lsRixlQUFlSCxLQUFLQyxHQUFHO2dCQUN2QjBELFFBQVEyQixHQUFHLENBQUM7Z0JBQ1o7WUFDSjtRQUNKLEtBQUs1RixrQkFBa0IwRiwyQkFBMkIsQ0FBQ0csZUFBZTtZQUM5RDtnQkFDSTtZQUNKO1FBQ0osS0FBSzdGLGtCQUFrQjBGLDJCQUEyQixDQUFDSSxLQUFLO1FBQ3hELEtBQUs5RixrQkFBa0IwRiwyQkFBMkIsQ0FBQ0ssSUFBSTtZQUNuRDtnQkFDSSxJQUFJcEIsSUFBSXhDLElBQUksRUFBRTtvQkFDVkQsb0JBQW9CeUMsSUFBSXhDLElBQUk7Z0JBQ2hDO2dCQUNBLE1BQU0sRUFBRTJDLE1BQU0sRUFBRUcsUUFBUSxFQUFFLEdBQUdOO2dCQUM3Qix5Q0FBeUM7Z0JBQ3pDLElBQUksaUJBQWlCQSxLQUFLO29CQUN0QmhFLFdBQVdxRixhQUFhLENBQUNyQixJQUFJc0IsV0FBVztnQkFDNUM7Z0JBQ0EsTUFBTUMsWUFBWS9CLFFBQVFXLFVBQVVBLE9BQU85QyxNQUFNO2dCQUNqRCxrRUFBa0U7Z0JBQ2xFLElBQUlrRSxXQUFXO29CQUNYbkYsWUFBWUksS0FBS0MsU0FBUyxDQUFDO3dCQUN2QkMsT0FBTzt3QkFDUDhFLFlBQVlyQixPQUFPOUMsTUFBTTt3QkFDekJvRSxVQUFVbEc7b0JBQ2Q7b0JBQ0EyRSxhQUFhQztvQkFDYjtnQkFDSjtnQkFDQSxNQUFNdUIsY0FBY2xDLFFBQVFjLFlBQVlBLFNBQVNqRCxNQUFNO2dCQUN2RCxJQUFJcUUsYUFBYTtvQkFDYnRGLFlBQVlJLEtBQUtDLFNBQVMsQ0FBQzt3QkFDdkJDLE9BQU87d0JBQ1BpRixjQUFjckIsU0FBU2pELE1BQU07d0JBQzdCb0UsVUFBVWxHO29CQUNkO29CQUNBLGlDQUFpQztvQkFDakMsTUFBTXFHLG9CQUFvQixDQUFDLEdBQUcvRyx1QkFBdUJ3RixPQUFPLEVBQUU7d0JBQzFEQyxVQUFVQTt3QkFDVkgsUUFBUSxFQUFFO29CQUNkO29CQUNBLElBQUksSUFBSUssSUFBSSxHQUFHQSxJQUFJb0Isa0JBQWtCdEIsUUFBUSxDQUFDakQsTUFBTSxFQUFFbUQsSUFBSTt3QkFDdEQsSUFBSUEsTUFBTSxHQUFHOzRCQUNUbEIsUUFBUUMsSUFBSSxDQUFDLCtDQUErQzs0QkFDNUQ7d0JBQ0o7d0JBQ0FELFFBQVFDLElBQUksQ0FBQyxDQUFDLEdBQUczRSxXQUFXeUYsT0FBTyxFQUFFdUIsa0JBQWtCdEIsUUFBUSxDQUFDRSxFQUFFO29CQUN0RTtnQkFDSix1SEFBdUg7Z0JBQ3ZIO2dCQUNBcEUsWUFBWUksS0FBS0MsU0FBUyxDQUFDO29CQUN2QkMsT0FBTztvQkFDUCtFLFVBQVVsRztnQkFDZDtnQkFDQSxJQUFJeUUsSUFBSWMsTUFBTSxLQUFLekYsa0JBQWtCMEYsMkJBQTJCLENBQUNJLEtBQUssRUFBRTtvQkFDcEUscUJBQXFCO29CQUNyQlQsZ0JBQWdCVixJQUFJM0QsY0FBYztnQkFDdEM7Z0JBQ0E7WUFDSjtRQUNKLHVEQUF1RDtRQUN2RCxLQUFLaEIsa0JBQWtCMEYsMkJBQTJCLENBQUNjLHdCQUF3QjtZQUN2RTtnQkFDSXpGLFlBQVlJLEtBQUtDLFNBQVMsQ0FBQztvQkFDdkJDLE9BQU87b0JBQ1ArRSxVQUFVbEc7Z0JBQ2Q7Z0JBQ0EsSUFBSUwsaUJBQWlCOEQsbUJBQW1CLENBQUNELGVBQWUsRUFBRTtvQkFDdEQsSUFBSWxELFdBQVc7b0JBQ2ZBLFlBQVk7b0JBQ1osT0FBT2UsT0FBT0ksUUFBUSxDQUFDaUMsTUFBTTtnQkFDakM7Z0JBQ0MsSUFBR3ZFLE9BQU9vSCxlQUFlLEVBQUU7b0JBQ3hCLHlDQUF5QztvQkFDekM3QixPQUFPOEIsV0FBVztvQkFDbEIvRixXQUFXc0IsU0FBUztnQkFDeEI7Z0JBQ0EsSUFBSUksS0FBNEIsRUFBRSxFQUtqQztnQkFDRDtZQUNKO1FBQ0osS0FBS3JDLGtCQUFrQjBGLDJCQUEyQixDQUFDaUIsV0FBVztZQUMxRDtnQkFDSTVGLFlBQVlJLEtBQUtDLFNBQVMsQ0FBQztvQkFDdkJDLE9BQU87b0JBQ1ArRSxVQUFVbEc7Z0JBQ2Q7Z0JBQ0EsSUFBSU0sV0FBVztnQkFDZkEsWUFBWTtnQkFDWixPQUFPZSxPQUFPSSxRQUFRLENBQUNpQyxNQUFNO1lBQ2pDO1FBQ0osS0FBSzVELGtCQUFrQjBGLDJCQUEyQixDQUFDa0IsWUFBWTtZQUMzRDtnQkFDSSwrRUFBK0U7Z0JBQy9FLHlDQUF5QztnQkFDekNoQyxPQUFPOEIsV0FBVztnQkFDbEI7WUFDSjtRQUNKLEtBQUsxRyxrQkFBa0IwRiwyQkFBMkIsQ0FBQ21CLFVBQVU7WUFDekQ7Z0JBQ0ksNkVBQTZFO2dCQUM3RSx5Q0FBeUM7Z0JBQ3pDakMsT0FBTzhCLFdBQVc7Z0JBQ2xCO1lBQ0o7UUFDSixLQUFLMUcsa0JBQWtCMEYsMkJBQTJCLENBQUNvQixZQUFZO1lBQzNEO2dCQUNJLE1BQU0sRUFBRUMsU0FBUyxFQUFFLEdBQUdwQztnQkFDdEIsSUFBSW9DLFdBQVc7b0JBQ1gsTUFBTSxFQUFFdEQsT0FBTyxFQUFFSixLQUFLLEVBQUUsR0FBR2xDLEtBQUs2RixLQUFLLENBQUNEO29CQUN0QyxNQUFNM0IsUUFBUSxJQUFJNkIsTUFBTXhEO29CQUN4QjJCLE1BQU0vQixLQUFLLEdBQUdBO29CQUNkd0IsYUFBYTt3QkFDVE87cUJBQ0g7Z0JBQ0w7Z0JBQ0E7WUFDSjtRQUNKLEtBQUtwRixrQkFBa0IwRiwyQkFBMkIsQ0FBQ3dCLHlCQUF5QjtZQUN4RTtnQkFDSTtZQUNKO1FBQ0o7WUFDSSxDQUFDO0lBQ1Q7QUFDSjtBQUNBLFNBQVNsSSxVQUFVbUksS0FBSztJQUNwQixJQUFJLEVBQUVDLFdBQVcsRUFBRUMsUUFBUSxFQUFFLEdBQUdGO0lBQ2hDLE1BQU0sQ0FBQ0csT0FBT0MsU0FBUyxHQUFHLENBQUMsR0FBR2xJLE9BQU9tSSxVQUFVLEVBQUU5SCxxQkFBcUIrSCxtQkFBbUIsRUFBRS9ILHFCQUFxQmdJLHFCQUFxQjtJQUNySSxNQUFNL0csYUFBYSxDQUFDLEdBQUd0QixPQUFPc0ksT0FBTyxFQUFFO1FBQ25DLE9BQU87WUFDSHpHO2dCQUNJcUcsU0FBUztvQkFDTEssTUFBTWxJLHFCQUFxQm1JLGVBQWU7Z0JBQzlDO1lBQ0o7WUFDQTNDLGNBQWN6QixPQUFPO2dCQUNqQjhELFNBQVM7b0JBQ0xLLE1BQU1sSSxxQkFBcUJvSSxrQkFBa0I7b0JBQzdDckU7Z0JBQ0o7WUFDSjtZQUNBNUM7Z0JBQ0kwRyxTQUFTO29CQUNMSyxNQUFNbEkscUJBQXFCcUkscUJBQXFCO2dCQUNwRDtZQUNKO1lBQ0E5RjtnQkFDSXNGLFNBQVM7b0JBQ0xLLE1BQU1sSSxxQkFBcUJzSSxjQUFjO2dCQUM3QztZQUNKO1lBQ0FoQyxlQUFlQyxXQUFXO2dCQUN0QnNCLFNBQVM7b0JBQ0xLLE1BQU1sSSxxQkFBcUJ1SSxtQkFBbUI7b0JBQzlDaEM7Z0JBQ0o7WUFDSjtRQUNKO0lBQ0osR0FBRztRQUNDc0I7S0FDSDtJQUNELE1BQU1XLHlCQUF5QixDQUFDLEdBQUc3SSxPQUFPOEksV0FBVyxFQUFFLENBQUMvQztRQUNwRCxrR0FBa0c7UUFDbEcsTUFBTWdELGlCQUFpQmhELE1BQU1pRCxlQUFlO1FBQzVDZCxTQUFTO1lBQ0xLLE1BQU1sSSxxQkFBcUI0SSxzQkFBc0I7WUFDakRDLFFBQVFuRDtZQUNSb0QsUUFBUSxDQUFDLEdBQUc3SSxZQUFZOEksVUFBVSxFQUFFckQsTUFBTS9CLEtBQUs7WUFDL0NxRixzQkFBc0JOLGtCQUFrQixDQUFDLEdBQUdySSxxQkFBcUI0SSxtQkFBbUIsRUFBRVA7UUFDMUY7SUFDSixHQUFHLEVBQUU7SUFDTCxNQUFNUSw2QkFBNkIsQ0FBQyxHQUFHdkosT0FBTzhJLFdBQVcsRUFBRSxDQUFDSTtRQUN4RGhCLFNBQVM7WUFDTEssTUFBTWxJLHFCQUFxQm1KLDBCQUEwQjtZQUNyRE4sUUFBUUE7WUFDUkMsUUFBUSxDQUFDLEdBQUc3SSxZQUFZOEksVUFBVSxFQUFFRixPQUFPbEYsS0FBSztRQUNwRDtJQUNKLEdBQUcsRUFBRTtJQUNMLE1BQU15RixxQkFBcUIsQ0FBQyxHQUFHekosT0FBTzhJLFdBQVcsRUFBRTtRQUMvQ3RJLGlCQUFpQjhELG1CQUFtQixDQUFDRCxlQUFlLEdBQUc7SUFDM0QsR0FBRyxFQUFFO0lBQ0osSUFBRzdELGlCQUFpQmtKLGVBQWUsRUFBRWIsd0JBQXdCVTtJQUM5RCxNQUFNSSxlQUFlLENBQUMsR0FBR2xKLGNBQWNtSixZQUFZLEVBQUU3QjtJQUNwRCxJQUFHdEgsY0FBY29KLGdCQUFnQixFQUFFRjtJQUNwQyxNQUFNakksY0FBYyxDQUFDLEdBQUdqQixjQUFjcUosY0FBYyxFQUFFSDtJQUN0RCxNQUFNSSwwQkFBMEIsQ0FBQyxHQUFHdEosY0FBY3VKLFlBQVksRUFBRXRJO0lBQ2hFLE1BQU02RCxTQUFTLENBQUMsR0FBR25GLFlBQVk2SixTQUFTO0lBQ3ZDLElBQUdqSyxPQUFPa0ssU0FBUyxFQUFFO1FBQ2xCLE1BQU14RyxVQUFVLENBQUMxQjtZQUNiLElBQUk7Z0JBQ0EsTUFBTXNELE1BQU14RCxLQUFLNkYsS0FBSyxDQUFDM0YsTUFBTW1JLElBQUk7Z0JBQ2pDLE1BQU1DLHFCQUFxQkwsMkJBQTJCLE9BQU8sS0FBSyxJQUFJQSx3QkFBd0J6RTtnQkFDOUYsSUFBSSxDQUFDOEUsb0JBQW9CO29CQUNyQi9FLGVBQWVDLEtBQUs1RCxhQUFhNkQsUUFBUWpFO2dCQUM3QztZQUNKLEVBQUUsT0FBT3dDLEtBQUs7Z0JBQ1YsSUFBSXVHO2dCQUNKekYsUUFBUUMsSUFBSSxDQUFDLDRCQUE0QjdDLE1BQU1tSSxJQUFJLEdBQUcsT0FBUSxFQUFDRSxhQUFhdkcsT0FBTyxPQUFPLEtBQUssSUFBSUEsSUFBSUUsS0FBSyxLQUFLLE9BQU9xRyxhQUFhLEVBQUM7WUFDMUk7UUFDSjtRQUNBLE1BQU1DLFlBQVlYLGFBQWFZLE9BQU87UUFDdEMsSUFBSUQsV0FBVztZQUNYQSxVQUFVRSxnQkFBZ0IsQ0FBQyxXQUFXOUc7UUFDMUM7UUFDQSxPQUFPLElBQUk0RyxhQUFhQSxVQUFVRyxtQkFBbUIsQ0FBQyxXQUFXL0c7SUFDckUsR0FBRztRQUNDaEM7UUFDQTZEO1FBQ0FvRTtRQUNBckk7UUFDQXlJO0tBQ0g7SUFDRCxPQUFxQixXQUFILEdBQUksSUFBR2hLLFlBQVkySyxHQUFHLEVBQUVuSyxpQkFBaUJvRixPQUFPLEVBQUU7UUFDaEVnRixjQUFjbEI7UUFDZHhCLE9BQU9BO1FBQ1BELFVBQVVBO0lBQ2Q7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPekksUUFBUW9HLE9BQU8sS0FBSyxjQUFlLE9BQU9wRyxRQUFRb0csT0FBTyxLQUFLLFlBQVlwRyxRQUFRb0csT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPcEcsUUFBUW9HLE9BQU8sQ0FBQ2lGLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdkwsT0FBT0MsY0FBYyxDQUFDQyxRQUFRb0csT0FBTyxFQUFFLGNBQWM7UUFBRW5HLE9BQU87SUFBSztJQUNuRUgsT0FBT3dMLE1BQU0sQ0FBQ3RMLFFBQVFvRyxPQUFPLEVBQUVwRztJQUMvQjhELE9BQU85RCxPQUFPLEdBQUdBLFFBQVFvRyxPQUFPO0FBQ2xDLEVBRUEsK0NBQStDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaG90LXJlbG9hZGVyLWNsaWVudC5qcz8wNjhiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSG90UmVsb2FkO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9zdHJpcGFuc2kgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaVwiKSk7XG5jb25zdCBfZm9ybWF0d2VicGFja21lc3NhZ2VzID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vLi4vZGV2L2Vycm9yLW92ZXJsYXkvZm9ybWF0LXdlYnBhY2stbWVzc2FnZXNcIikpO1xuY29uc3QgX25hdmlnYXRpb24gPSByZXF1aXJlKFwiLi4vbmF2aWdhdGlvblwiKTtcbmNvbnN0IF9lcnJvcm92ZXJsYXlyZWR1Y2VyID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvZXJyb3Itb3ZlcmxheS1yZWR1Y2VyXCIpO1xuY29uc3QgX3BhcnNlU3RhY2sgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9oZWxwZXJzL3BhcnNlU3RhY2tcIik7XG5jb25zdCBfUmVhY3REZXZPdmVybGF5ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi9pbnRlcm5hbC9SZWFjdERldk92ZXJsYXlcIikpO1xuY29uc3QgX3VzZWVycm9yaGFuZGxlciA9IHJlcXVpcmUoXCIuL2ludGVybmFsL2hlbHBlcnMvdXNlLWVycm9yLWhhbmRsZXJcIik7XG5jb25zdCBfdXNld2Vic29ja2V0ID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvaGVscGVycy91c2Utd2Vic29ja2V0XCIpO1xuY29uc3QgX3BhcnNlY29tcG9uZW50c3RhY2sgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9oZWxwZXJzL3BhcnNlLWNvbXBvbmVudC1zdGFja1wiKTtcbmNvbnN0IF9ob3RyZWxvYWRlcnR5cGVzID0gcmVxdWlyZShcIi4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzXCIpO1xubGV0IG1vc3RSZWNlbnRDb21waWxhdGlvbkhhc2ggPSBudWxsO1xubGV0IF9fbmV4dERldkNsaWVudElkID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwICsgRGF0ZS5ub3coKSk7XG5sZXQgcmVsb2FkaW5nID0gZmFsc2U7XG5sZXQgc3RhcnRMYXRlbmN5ID0gbnVsbDtcbmZ1bmN0aW9uIG9uQmVmb3JlRmFzdFJlZnJlc2goZGlzcGF0Y2hlciwgaGFzVXBkYXRlcykge1xuICAgIGlmIChoYXNVcGRhdGVzKSB7XG4gICAgICAgIGRpc3BhdGNoZXIub25CZWZvcmVSZWZyZXNoKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gb25GYXN0UmVmcmVzaChkaXNwYXRjaGVyLCBzZW5kTWVzc2FnZSwgdXBkYXRlZE1vZHVsZXMpIHtcbiAgICBsZXQgZW5kTGF0ZW5jeSA9IERhdGUubm93KCk7XG4gICAgZGlzcGF0Y2hlci5vbkJ1aWxkT2soKTtcbiAgICBzZW5kTWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50OiBcImNsaWVudC1obXItbGF0ZW5jeVwiLFxuICAgICAgICBpZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkLFxuICAgICAgICBzdGFydFRpbWU6IHN0YXJ0TGF0ZW5jeSxcbiAgICAgICAgZW5kVGltZTogZW5kTGF0ZW5jeSxcbiAgICAgICAgcGFnZTogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICB1cGRhdGVkTW9kdWxlcyxcbiAgICAgICAgLy8gV2hldGhlciB0aGUgcGFnZSAodGFiKSB3YXMgaGlkZGVuIGF0IHRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnJlZC5cbiAgICAgICAgLy8gVGhpcyBjYW4gaW1wYWN0IHRoZSBhY2N1cmFjeSBvZiB0aGUgZXZlbnQncyB0aW1pbmcuXG4gICAgICAgIGlzUGFnZUhpZGRlbjogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSBcImhpZGRlblwiXG4gICAgfSkpO1xuICAgIGlmICh1cGRhdGVkTW9kdWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRpc3BhdGNoZXIub25SZWZyZXNoKCk7XG4gICAgfVxufVxuLy8gVGhlcmUgaXMgYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBjb2RlIGF2YWlsYWJsZS5cbmZ1bmN0aW9uIGhhbmRsZUF2YWlsYWJsZUhhc2goaGFzaCkge1xuICAgIC8vIFVwZGF0ZSBsYXN0IGtub3duIGNvbXBpbGF0aW9uIGhhc2guXG4gICAgbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCA9IGhhc2g7XG59XG4vKipcbiAqIElzIHRoZXJlIGEgbmV3ZXIgdmVyc2lvbiBvZiB0aGlzIGNvZGUgYXZhaWxhYmxlP1xuICogRm9yIHdlYnBhY2s6IENoZWNrIGlmIHRoZSBoYXNoIGNoYW5nZWQgY29tcGFyZWQgdG8gX193ZWJwYWNrX2hhc2hfX1xuICogRm9yIFR1cmJvcGFjazogQWx3YXlzIHRydWUgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgX193ZWJwYWNrX2hhc2hfX1xuICovIGZ1bmN0aW9uIGlzVXBkYXRlQXZhaWxhYmxlKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5UVVJCT1BBQ0spIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qIGdsb2JhbHMgX193ZWJwYWNrX2hhc2hfXyAqLyAvLyBfX3dlYnBhY2tfaGFzaF9fIGlzIHRoZSBoYXNoIG9mIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uLlxuICAgIC8vIEl0J3MgYSBnbG9iYWwgdmFyaWFibGUgaW5qZWN0ZWQgYnkgV2VicGFjay5cbiAgICByZXR1cm4gbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCAhPT0gX193ZWJwYWNrX2hhc2hfXztcbn1cbi8vIFdlYnBhY2sgZGlzYWxsb3dzIHVwZGF0ZXMgaW4gb3RoZXIgc3RhdGVzLlxuZnVuY3Rpb24gY2FuQXBwbHlVcGRhdGVzKCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbW9kdWxlLmhvdCBleGlzdHNcbiAgICByZXR1cm4gbW9kdWxlLmhvdC5zdGF0dXMoKSA9PT0gXCJpZGxlXCI7XG59XG5mdW5jdGlvbiBhZnRlckFwcGx5VXBkYXRlcyhmbikge1xuICAgIGlmIChjYW5BcHBseVVwZGF0ZXMoKSkge1xuICAgICAgICBmbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSBcImlkbGVcIikge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbW9kdWxlLmhvdCBleGlzdHNcbiAgICAgICAgICAgICAgICBtb2R1bGUuaG90LnJlbW92ZVN0YXR1c0hhbmRsZXIoaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG1vZHVsZS5ob3QgZXhpc3RzXG4gICAgICAgIG1vZHVsZS5ob3QuYWRkU3RhdHVzSGFuZGxlcihoYW5kbGVyKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwZXJmb3JtRnVsbFJlbG9hZChlcnIsIHNlbmRNZXNzYWdlKSB7XG4gICAgY29uc3Qgc3RhY2tUcmFjZSA9IGVyciAmJiAoZXJyLnN0YWNrICYmIGVyci5zdGFjay5zcGxpdChcIlxcblwiKS5zbGljZSgwLCA1KS5qb2luKFwiXFxuXCIpIHx8IGVyci5tZXNzYWdlIHx8IGVyciArIFwiXCIpO1xuICAgIHNlbmRNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZXZlbnQ6IFwiY2xpZW50LWZ1bGwtcmVsb2FkXCIsXG4gICAgICAgIHN0YWNrVHJhY2UsXG4gICAgICAgIGhhZFJ1bnRpbWVFcnJvcjogISFfdXNlZXJyb3JoYW5kbGVyLlJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yXG4gICAgfSkpO1xuICAgIGlmIChyZWxvYWRpbmcpIHJldHVybjtcbiAgICByZWxvYWRpbmcgPSB0cnVlO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbn1cbi8vIEF0dGVtcHQgdG8gdXBkYXRlIGNvZGUgb24gdGhlIGZseSwgZmFsbCBiYWNrIHRvIGEgaGFyZCByZWxvYWQuXG5mdW5jdGlvbiB0cnlBcHBseVVwZGF0ZXMob25CZWZvcmVVcGRhdGUsIG9uSG90VXBkYXRlU3VjY2Vzcywgc2VuZE1lc3NhZ2UsIGRpc3BhdGNoZXIpIHtcbiAgICBpZiAoIWlzVXBkYXRlQXZhaWxhYmxlKCkgfHwgIWNhbkFwcGx5VXBkYXRlcygpKSB7XG4gICAgICAgIGRpc3BhdGNoZXIub25CdWlsZE9rKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlQXBwbHlVcGRhdGVzKGVyciwgdXBkYXRlZE1vZHVsZXMpIHtcbiAgICAgICAgaWYgKGVyciB8fCBfdXNlZXJyb3JoYW5kbGVyLlJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yIHx8ICF1cGRhdGVkTW9kdWxlcykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIltGYXN0IFJlZnJlc2hdIHBlcmZvcm1pbmcgZnVsbCByZWxvYWRcXG5cXG5cIiArIFwiRmFzdCBSZWZyZXNoIHdpbGwgcGVyZm9ybSBhIGZ1bGwgcmVsb2FkIHdoZW4geW91IGVkaXQgYSBmaWxlIHRoYXQncyBpbXBvcnRlZCBieSBtb2R1bGVzIG91dHNpZGUgb2YgdGhlIFJlYWN0IHJlbmRlcmluZyB0cmVlLlxcblwiICsgXCJZb3UgbWlnaHQgaGF2ZSBhIGZpbGUgd2hpY2ggZXhwb3J0cyBhIFJlYWN0IGNvbXBvbmVudCBidXQgYWxzbyBleHBvcnRzIGEgdmFsdWUgdGhhdCBpcyBpbXBvcnRlZCBieSBhIG5vbi1SZWFjdCBjb21wb25lbnQgZmlsZS5cXG5cIiArIFwiQ29uc2lkZXIgbWlncmF0aW5nIHRoZSBub24tUmVhY3QgY29tcG9uZW50IGV4cG9ydCB0byBhIHNlcGFyYXRlIGZpbGUgYW5kIGltcG9ydGluZyBpdCBpbnRvIGJvdGggZmlsZXMuXFxuXFxuXCIgKyBcIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIHBhcmVudCBjb21wb25lbnQgb2YgdGhlIGNvbXBvbmVudCB5b3UgZWRpdGVkIGlzIGEgY2xhc3MgY29tcG9uZW50LCB3aGljaCBkaXNhYmxlcyBGYXN0IFJlZnJlc2guXFxuXCIgKyBcIkZhc3QgUmVmcmVzaCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgcGFyZW50IGZ1bmN0aW9uIGNvbXBvbmVudCBpbiB5b3VyIFJlYWN0IHRyZWUuXCIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfdXNlZXJyb3JoYW5kbGVyLlJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW0Zhc3QgUmVmcmVzaF0gcGVyZm9ybWluZyBmdWxsIHJlbG9hZCBiZWNhdXNlIHlvdXIgYXBwbGljYXRpb24gaGFkIGFuIHVucmVjb3ZlcmFibGUgZXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZXJmb3JtRnVsbFJlbG9hZChlcnIsIHNlbmRNZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNVcGRhdGVzID0gQm9vbGVhbih1cGRhdGVkTW9kdWxlcy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIG9uSG90VXBkYXRlU3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBNYXliZSB3ZSB3YW50IHRvIGRvIHNvbWV0aGluZy5cbiAgICAgICAgICAgIG9uSG90VXBkYXRlU3VjY2Vzcyh1cGRhdGVkTW9kdWxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVXBkYXRlQXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIC8vIFdoaWxlIHdlIHdlcmUgdXBkYXRpbmcsIHRoZXJlIHdhcyBhIG5ldyB1cGRhdGUhIERvIGl0IGFnYWluLlxuICAgICAgICAgICAgdHJ5QXBwbHlVcGRhdGVzKGhhc1VwZGF0ZXMgPyAoKT0+e30gOiBvbkJlZm9yZVVwZGF0ZSwgaGFzVXBkYXRlcyA/ICgpPT5kaXNwYXRjaGVyLm9uQnVpbGRPaygpIDogb25Ib3RVcGRhdGVTdWNjZXNzLCBzZW5kTWVzc2FnZSwgZGlzcGF0Y2hlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaXNwYXRjaGVyLm9uQnVpbGRPaygpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgICAgICAgICAgICBhZnRlckFwcGx5VXBkYXRlcygoKT0+e1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX05FWFRfSE1SX0NCKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19ORVhUX0hNUl9DQiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBodHRwczovL3dlYnBhY2suanMub3JnL2FwaS9ob3QtbW9kdWxlLXJlcGxhY2VtZW50LyNjaGVja1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbW9kdWxlLmhvdCBleGlzdHNcbiAgICBtb2R1bGUuaG90LmNoZWNrKC8qIGF1dG9BcHBseSAqLyBmYWxzZSkudGhlbigodXBkYXRlZE1vZHVsZXMpPT57XG4gICAgICAgIGlmICghdXBkYXRlZE1vZHVsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb25CZWZvcmVVcGRhdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgY29uc3QgaGFzVXBkYXRlcyA9IEJvb2xlYW4odXBkYXRlZE1vZHVsZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIG9uQmVmb3JlVXBkYXRlKGhhc1VwZGF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGh0dHBzOi8vd2VicGFjay5qcy5vcmcvYXBpL2hvdC1tb2R1bGUtcmVwbGFjZW1lbnQvI2FwcGx5XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbW9kdWxlLmhvdCBleGlzdHNcbiAgICAgICAgcmV0dXJuIG1vZHVsZS5ob3QuYXBwbHkoKTtcbiAgICB9KS50aGVuKCh1cGRhdGVkTW9kdWxlcyk9PntcbiAgICAgICAgaGFuZGxlQXBwbHlVcGRhdGVzKG51bGwsIHVwZGF0ZWRNb2R1bGVzKTtcbiAgICB9LCAoZXJyKT0+e1xuICAgICAgICBoYW5kbGVBcHBseVVwZGF0ZXMoZXJyLCBudWxsKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NNZXNzYWdlKG9iaiwgc2VuZE1lc3NhZ2UsIHJvdXRlciwgZGlzcGF0Y2hlcikge1xuICAgIGlmICghKFwiYWN0aW9uXCIgaW4gb2JqKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUVycm9ycyhlcnJvcnMpIHtcbiAgICAgICAgLy8gXCJNYXNzYWdlXCIgd2VicGFjayBtZXNzYWdlcy5cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gKDAsIF9mb3JtYXR3ZWJwYWNrbWVzc2FnZXMuZGVmYXVsdCkoe1xuICAgICAgICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgICAgICAgICB3YXJuaW5nczogW11cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIE9ubHkgc2hvdyB0aGUgZmlyc3QgZXJyb3IuXG4gICAgICAgIGRpc3BhdGNoZXIub25CdWlsZEVycm9yKGZvcm1hdHRlZC5lcnJvcnNbMF0pO1xuICAgICAgICAvLyBBbHNvIGxvZyB0aGVtIHRvIHRoZSBjb25zb2xlLlxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkLmVycm9ycy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCgwLCBfc3RyaXBhbnNpLmRlZmF1bHQpKGZvcm1hdHRlZC5lcnJvcnNbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEbyBub3QgYXR0ZW1wdCB0byByZWxvYWQgbm93LlxuICAgICAgICAvLyBXZSB3aWxsIHJlbG9hZCBvbiBuZXh0IHN1Y2Nlc3MgaW5zdGVhZC5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9fTkVYVF9ITVJfQ0IpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IoZm9ybWF0dGVkLmVycm9yc1swXSk7XG4gICAgICAgICAgICAgICAgc2VsZi5fX05FWFRfSE1SX0NCID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVIb3RVcGRhdGUodXBkYXRlZE1vZHVsZXMpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgICAgICAgICAgb25GYXN0UmVmcmVzaChkaXNwYXRjaGVyLCBzZW5kTWVzc2FnZSwgdXBkYXRlZE1vZHVsZXMgfHwgW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5QXBwbHlVcGRhdGVzKGZ1bmN0aW9uIG9uQmVmb3JlSG90VXBkYXRlKGhhc1VwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBvbkJlZm9yZUZhc3RSZWZyZXNoKGRpc3BhdGNoZXIsIGhhc1VwZGF0ZXMpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gb25TdWNjZXNzZnVsSG90VXBkYXRlKHdlYnBhY2tVcGRhdGVkTW9kdWxlcykge1xuICAgICAgICAgICAgICAgIC8vIE9ubHkgZGlzbWlzcyBpdCB3aGVuIHdlJ3JlIHN1cmUgaXQncyBhIGhvdCB1cGRhdGUuXG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGl0IHdvdWxkIGZsaWNrZXIgcmlnaHQgYmVmb3JlIHRoZSByZWxvYWQuXG4gICAgICAgICAgICAgICAgb25GYXN0UmVmcmVzaChkaXNwYXRjaGVyLCBzZW5kTWVzc2FnZSwgd2VicGFja1VwZGF0ZWRNb2R1bGVzKTtcbiAgICAgICAgICAgIH0sIHNlbmRNZXNzYWdlLCBkaXNwYXRjaGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2gob2JqLmFjdGlvbil7XG4gICAgICAgIGNhc2UgX2hvdHJlbG9hZGVydHlwZXMuSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkJVSUxESU5HOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXJ0TGF0ZW5jeSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJbRmFzdCBSZWZyZXNoXSByZWJ1aWxkaW5nXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5GSU5JU0hfQlVJTERJTkc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX2hvdHJlbG9hZGVydHlwZXMuSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkJVSUxUOlxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TWU5DOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzaCkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVBdmFpbGFibGVIYXNoKG9iai5oYXNoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvcnMsIHdhcm5pbmdzIH0gPSBvYmo7XG4gICAgICAgICAgICAgICAgLy8gSXMgdW5kZWZpbmVkIHdoZW4gaXQncyBhICdidWlsdCcgZXZlbnRcbiAgICAgICAgICAgICAgICBpZiAoXCJ2ZXJzaW9uSW5mb1wiIGluIG9iaikge1xuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyLm9uVmVyc2lvbkluZm8ob2JqLnZlcnNpb25JbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzRXJyb3JzID0gQm9vbGVhbihlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gQ29tcGlsYXRpb24gd2l0aCBlcnJvcnMgKGUuZy4gc3ludGF4IGVycm9yIG9yIG1pc3NpbmcgbW9kdWxlcykuXG4gICAgICAgICAgICAgICAgaWYgKGhhc0Vycm9ycykge1xuICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogXCJjbGllbnQtZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ291bnQ6IGVycm9ycy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJZDogX19uZXh0RGV2Q2xpZW50SWRcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNXYXJuaW5ncyA9IEJvb2xlYW4od2FybmluZ3MgJiYgd2FybmluZ3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzV2FybmluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IFwiY2xpZW50LXdhcm5pbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdDb3VudDogd2FybmluZ3MubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQ6IF9fbmV4dERldkNsaWVudElkXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJpbnQgd2FybmluZ3MgdG8gdGhlIGNvbnNvbGUuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2VzID0gKDAsIF9mb3JtYXR3ZWJwYWNrbWVzc2FnZXMuZGVmYXVsdCkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3M6IHdhcm5pbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBbXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZE1lc3NhZ2VzLndhcm5pbmdzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSA1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVGhlcmUgd2VyZSBtb3JlIHdhcm5pbmdzIGluIG90aGVyIGZpbGVzLlxcblwiICsgXCJZb3UgY2FuIGZpbmQgYSBjb21wbGV0ZSBsb2cgaW4gdGhlIHRlcm1pbmFsLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigoMCwgX3N0cmlwYW5zaS5kZWZhdWx0KShmb3JtYXR0ZWRNZXNzYWdlcy53YXJuaW5nc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm8gZWFybHkgcmV0dXJuIGhlcmUgYXMgd2UgbmVlZCB0byBhcHBseSBtb2R1bGVzIGluIHRoZSBzYW1lIHdheSBiZXR3ZWVuIHdhcm5pbmdzIG9ubHkgYW5kIGNvbXBpbGVzIHdpdGhvdXQgd2FybmluZ3NcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBldmVudDogXCJjbGllbnQtc3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgICAgICBjbGllbnRJZDogX19uZXh0RGV2Q2xpZW50SWRcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5hY3Rpb24gPT09IF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5CVUlMVCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgaG90IHVwZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlSG90VXBkYXRlKG9iai51cGRhdGVkTW9kdWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgLy8gVE9ETy1BUFA6IG1ha2Ugc2VydmVyIGNvbXBvbmVudCBjaGFuZ2UgbW9yZSBncmFudWxhclxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TRVJWRVJfQ09NUE9ORU5UX0NIQU5HRVM6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBldmVudDogXCJzZXJ2ZXItY29tcG9uZW50LXJlbG9hZC1wYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsaWVudElkOiBfX25leHREZXZDbGllbnRJZFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBpZiAoX3VzZWVycm9yaGFuZGxlci5SdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVsb2FkaW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHJlbG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIGl0IGV4aXN0cywgaXQncyBqdXN0IGhpZGRlblxuICAgICAgICAgICAgICAgICAgICByb3V0ZXIuZmFzdFJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlci5vblJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1RFU1RfTU9ERSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX05FWFRfSE1SX0NCKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19ORVhUX0hNUl9DQiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5SRUxPQURfUEFHRTpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBcImNsaWVudC1yZWxvYWQtcGFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGllbnRJZDogX19uZXh0RGV2Q2xpZW50SWRcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlbG9hZGluZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHJlbG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfaG90cmVsb2FkZXJ0eXBlcy5ITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuUkVNT1ZFRF9QQUdFOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8tQVBQOiBwb3RlbnRpYWxseSBvbmx5IHJlZnJlc2ggaWYgdGhlIGN1cnJlbnRseSB2aWV3ZWQgcGFnZSB3YXMgcmVtb3ZlZC5cbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIGl0IGV4aXN0cywgaXQncyBqdXN0IGhpZGRlblxuICAgICAgICAgICAgICAgIHJvdXRlci5mYXN0UmVmcmVzaCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfaG90cmVsb2FkZXJ0eXBlcy5ITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuQURERURfUEFHRTpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPLUFQUDogcG90ZW50aWFsbHkgb25seSByZWZyZXNoIGlmIHRoZSBjdXJyZW50bHkgdmlld2VkIHBhZ2Ugd2FzIGFkZGVkLlxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgaXQgZXhpc3RzLCBpdCdzIGp1c3QgaGlkZGVuXG4gICAgICAgICAgICAgICAgcm91dGVyLmZhc3RSZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TRVJWRVJfRVJST1I6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvckpTT04gfSA9IG9iajtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JKU09OKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IEpTT04ucGFyc2UoZXJyb3JKU09OKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUVycm9ycyhbXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5ERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHt9XG4gICAgfVxufVxuZnVuY3Rpb24gSG90UmVsb2FkKHBhcmFtKSB7XG4gICAgbGV0IHsgYXNzZXRQcmVmaXgsIGNoaWxkcmVuIH0gPSBwYXJhbTtcbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9ICgwLCBfcmVhY3QudXNlUmVkdWNlcikoX2Vycm9yb3ZlcmxheXJlZHVjZXIuZXJyb3JPdmVybGF5UmVkdWNlciwgX2Vycm9yb3ZlcmxheXJlZHVjZXIuSU5JVElBTF9PVkVSTEFZX1NUQVRFKTtcbiAgICBjb25zdCBkaXNwYXRjaGVyID0gKDAsIF9yZWFjdC51c2VNZW1vKSgoKT0+e1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb25CdWlsZE9rICgpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IF9lcnJvcm92ZXJsYXlyZWR1Y2VyLkFDVElPTl9CVUlMRF9PS1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQnVpbGRFcnJvciAobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogX2Vycm9yb3ZlcmxheXJlZHVjZXIuQUNUSU9OX0JVSUxEX0VSUk9SLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25CZWZvcmVSZWZyZXNoICgpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IF9lcnJvcm92ZXJsYXlyZWR1Y2VyLkFDVElPTl9CRUZPUkVfUkVGUkVTSFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVmcmVzaCAoKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBfZXJyb3JvdmVybGF5cmVkdWNlci5BQ1RJT05fUkVGUkVTSFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVmVyc2lvbkluZm8gKHZlcnNpb25JbmZvKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBfZXJyb3JvdmVybGF5cmVkdWNlci5BQ1RJT05fVkVSU0lPTl9JTkZPLFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uSW5mb1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgZGlzcGF0Y2hcbiAgICBdKTtcbiAgICBjb25zdCBoYW5kbGVPblVuaGFuZGxlZEVycm9yID0gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKGVycm9yKT0+e1xuICAgICAgICAvLyBDb21wb25lbnQgc3RhY2sgaXMgYWRkZWQgdG8gdGhlIGVycm9yIGluIHVzZS1lcnJvci1oYW5kbGVyIGluIGNhc2UgdGhlcmUgd2FzIGEgaHlkcmF0aW9uIGVycnJvclxuICAgICAgICBjb25zdCBjb21wb25lbnRTdGFjayA9IGVycm9yLl9jb21wb25lbnRTdGFjaztcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogX2Vycm9yb3ZlcmxheXJlZHVjZXIuQUNUSU9OX1VOSEFORExFRF9FUlJPUixcbiAgICAgICAgICAgIHJlYXNvbjogZXJyb3IsXG4gICAgICAgICAgICBmcmFtZXM6ICgwLCBfcGFyc2VTdGFjay5wYXJzZVN0YWNrKShlcnJvci5zdGFjayksXG4gICAgICAgICAgICBjb21wb25lbnRTdGFja0ZyYW1lczogY29tcG9uZW50U3RhY2sgJiYgKDAsIF9wYXJzZWNvbXBvbmVudHN0YWNrLnBhcnNlQ29tcG9uZW50U3RhY2spKGNvbXBvbmVudFN0YWNrKVxuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgaGFuZGxlT25VbmhhbmRsZWRSZWplY3Rpb24gPSAoMCwgX3JlYWN0LnVzZUNhbGxiYWNrKSgocmVhc29uKT0+e1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBfZXJyb3JvdmVybGF5cmVkdWNlci5BQ1RJT05fVU5IQU5ETEVEX1JFSkVDVElPTixcbiAgICAgICAgICAgIHJlYXNvbjogcmVhc29uLFxuICAgICAgICAgICAgZnJhbWVzOiAoMCwgX3BhcnNlU3RhY2sucGFyc2VTdGFjaykocmVhc29uLnN0YWNrKVxuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgaGFuZGxlT25SZWFjdEVycm9yID0gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKCk9PntcbiAgICAgICAgX3VzZWVycm9yaGFuZGxlci5SdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvciA9IHRydWU7XG4gICAgfSwgW10pO1xuICAgICgwLCBfdXNlZXJyb3JoYW5kbGVyLnVzZUVycm9ySGFuZGxlcikoaGFuZGxlT25VbmhhbmRsZWRFcnJvciwgaGFuZGxlT25VbmhhbmRsZWRSZWplY3Rpb24pO1xuICAgIGNvbnN0IHdlYlNvY2tldFJlZiA9ICgwLCBfdXNld2Vic29ja2V0LnVzZVdlYnNvY2tldCkoYXNzZXRQcmVmaXgpO1xuICAgICgwLCBfdXNld2Vic29ja2V0LnVzZVdlYnNvY2tldFBpbmcpKHdlYlNvY2tldFJlZik7XG4gICAgY29uc3Qgc2VuZE1lc3NhZ2UgPSAoMCwgX3VzZXdlYnNvY2tldC51c2VTZW5kTWVzc2FnZSkod2ViU29ja2V0UmVmKTtcbiAgICBjb25zdCBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZSA9ICgwLCBfdXNld2Vic29ja2V0LnVzZVR1cmJvcGFjaykoc2VuZE1lc3NhZ2UpO1xuICAgIGNvbnN0IHJvdXRlciA9ICgwLCBfbmF2aWdhdGlvbi51c2VSb3V0ZXIpKCk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQpPT57XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlZEJ5VHVyYm9wYWNrID0gcHJvY2Vzc1R1cmJvcGFja01lc3NhZ2UgPT0gbnVsbCA/IHZvaWQgMCA6IHByb2Nlc3NUdXJib3BhY2tNZXNzYWdlKG9iaik7XG4gICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVkQnlUdXJib3BhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc01lc3NhZ2Uob2JqLCBzZW5kTWVzc2FnZSwgcm91dGVyLCBkaXNwYXRjaGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2Vycl9zdGFjaztcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbSE1SXSBJbnZhbGlkIG1lc3NhZ2U6IFwiICsgZXZlbnQuZGF0YSArIFwiXFxuXCIgKyAoKF9lcnJfc3RhY2sgPSBlcnIgPT0gbnVsbCA/IHZvaWQgMCA6IGVyci5zdGFjaykgIT0gbnVsbCA/IF9lcnJfc3RhY2sgOiBcIlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHdlYnNvY2tldCA9IHdlYlNvY2tldFJlZi5jdXJyZW50O1xuICAgICAgICBpZiAod2Vic29ja2V0KSB7XG4gICAgICAgICAgICB3ZWJzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpPT53ZWJzb2NrZXQgJiYgd2Vic29ja2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgIH0sIFtcbiAgICAgICAgc2VuZE1lc3NhZ2UsXG4gICAgICAgIHJvdXRlcixcbiAgICAgICAgd2ViU29ja2V0UmVmLFxuICAgICAgICBkaXNwYXRjaGVyLFxuICAgICAgICBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZVxuICAgIF0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9SZWFjdERldk92ZXJsYXkuZGVmYXVsdCwge1xuICAgICAgICBvblJlYWN0RXJyb3I6IGhhbmRsZU9uUmVhY3RFcnJvcixcbiAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG90LXJlbG9hZGVyLWNsaWVudC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiSG90UmVsb2FkIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfc3RyaXBhbnNpIiwiX2Zvcm1hdHdlYnBhY2ttZXNzYWdlcyIsIl9uYXZpZ2F0aW9uIiwiX2Vycm9yb3ZlcmxheXJlZHVjZXIiLCJfcGFyc2VTdGFjayIsIl9SZWFjdERldk92ZXJsYXkiLCJfdXNlZXJyb3JoYW5kbGVyIiwiX3VzZXdlYnNvY2tldCIsIl9wYXJzZWNvbXBvbmVudHN0YWNrIiwiX2hvdHJlbG9hZGVydHlwZXMiLCJtb3N0UmVjZW50Q29tcGlsYXRpb25IYXNoIiwiX19uZXh0RGV2Q2xpZW50SWQiLCJNYXRoIiwicm91bmQiLCJyYW5kb20iLCJEYXRlIiwibm93IiwicmVsb2FkaW5nIiwic3RhcnRMYXRlbmN5Iiwib25CZWZvcmVGYXN0UmVmcmVzaCIsImRpc3BhdGNoZXIiLCJoYXNVcGRhdGVzIiwib25CZWZvcmVSZWZyZXNoIiwib25GYXN0UmVmcmVzaCIsInNlbmRNZXNzYWdlIiwidXBkYXRlZE1vZHVsZXMiLCJlbmRMYXRlbmN5Iiwib25CdWlsZE9rIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiaWQiLCJ3aW5kb3ciLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwicGFnZSIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJpc1BhZ2VIaWRkZW4iLCJkb2N1bWVudCIsInZpc2liaWxpdHlTdGF0ZSIsImxlbmd0aCIsIm9uUmVmcmVzaCIsImhhbmRsZUF2YWlsYWJsZUhhc2giLCJoYXNoIiwiaXNVcGRhdGVBdmFpbGFibGUiLCJwcm9jZXNzIiwiZW52IiwiVFVSQk9QQUNLIiwiX193ZWJwYWNrX2hhc2hfXyIsImNhbkFwcGx5VXBkYXRlcyIsIm1vZHVsZSIsImhvdCIsInN0YXR1cyIsImFmdGVyQXBwbHlVcGRhdGVzIiwiZm4iLCJoYW5kbGVyIiwicmVtb3ZlU3RhdHVzSGFuZGxlciIsImFkZFN0YXR1c0hhbmRsZXIiLCJwZXJmb3JtRnVsbFJlbG9hZCIsImVyciIsInN0YWNrVHJhY2UiLCJzdGFjayIsInNwbGl0Iiwic2xpY2UiLCJqb2luIiwibWVzc2FnZSIsImhhZFJ1bnRpbWVFcnJvciIsIlJ1bnRpbWVFcnJvckhhbmRsZXIiLCJyZWxvYWQiLCJ0cnlBcHBseVVwZGF0ZXMiLCJvbkJlZm9yZVVwZGF0ZSIsIm9uSG90VXBkYXRlU3VjY2VzcyIsImhhbmRsZUFwcGx5VXBkYXRlcyIsImNvbnNvbGUiLCJ3YXJuIiwiQm9vbGVhbiIsIl9fTkVYVF9URVNUX01PREUiLCJzZWxmIiwiX19ORVhUX0hNUl9DQiIsImNoZWNrIiwidGhlbiIsImFwcGx5IiwicHJvY2Vzc01lc3NhZ2UiLCJvYmoiLCJyb3V0ZXIiLCJoYW5kbGVFcnJvcnMiLCJlcnJvcnMiLCJmb3JtYXR0ZWQiLCJkZWZhdWx0Iiwid2FybmluZ3MiLCJvbkJ1aWxkRXJyb3IiLCJpIiwiZXJyb3IiLCJoYW5kbGVIb3RVcGRhdGUiLCJvbkJlZm9yZUhvdFVwZGF0ZSIsIm9uU3VjY2Vzc2Z1bEhvdFVwZGF0ZSIsIndlYnBhY2tVcGRhdGVkTW9kdWxlcyIsImFjdGlvbiIsIkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUiIsIkJVSUxESU5HIiwibG9nIiwiRklOSVNIX0JVSUxESU5HIiwiQlVJTFQiLCJTWU5DIiwib25WZXJzaW9uSW5mbyIsInZlcnNpb25JbmZvIiwiaGFzRXJyb3JzIiwiZXJyb3JDb3VudCIsImNsaWVudElkIiwiaGFzV2FybmluZ3MiLCJ3YXJuaW5nQ291bnQiLCJmb3JtYXR0ZWRNZXNzYWdlcyIsIlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFUyIsInN0YXJ0VHJhbnNpdGlvbiIsImZhc3RSZWZyZXNoIiwiUkVMT0FEX1BBR0UiLCJSRU1PVkVEX1BBR0UiLCJBRERFRF9QQUdFIiwiU0VSVkVSX0VSUk9SIiwiZXJyb3JKU09OIiwicGFyc2UiLCJFcnJvciIsIkRFVl9QQUdFU19NQU5JRkVTVF9VUERBVEUiLCJwYXJhbSIsImFzc2V0UHJlZml4IiwiY2hpbGRyZW4iLCJzdGF0ZSIsImRpc3BhdGNoIiwidXNlUmVkdWNlciIsImVycm9yT3ZlcmxheVJlZHVjZXIiLCJJTklUSUFMX09WRVJMQVlfU1RBVEUiLCJ1c2VNZW1vIiwidHlwZSIsIkFDVElPTl9CVUlMRF9PSyIsIkFDVElPTl9CVUlMRF9FUlJPUiIsIkFDVElPTl9CRUZPUkVfUkVGUkVTSCIsIkFDVElPTl9SRUZSRVNIIiwiQUNUSU9OX1ZFUlNJT05fSU5GTyIsImhhbmRsZU9uVW5oYW5kbGVkRXJyb3IiLCJ1c2VDYWxsYmFjayIsImNvbXBvbmVudFN0YWNrIiwiX2NvbXBvbmVudFN0YWNrIiwiQUNUSU9OX1VOSEFORExFRF9FUlJPUiIsInJlYXNvbiIsImZyYW1lcyIsInBhcnNlU3RhY2siLCJjb21wb25lbnRTdGFja0ZyYW1lcyIsInBhcnNlQ29tcG9uZW50U3RhY2siLCJoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvbiIsIkFDVElPTl9VTkhBTkRMRURfUkVKRUNUSU9OIiwiaGFuZGxlT25SZWFjdEVycm9yIiwidXNlRXJyb3JIYW5kbGVyIiwid2ViU29ja2V0UmVmIiwidXNlV2Vic29ja2V0IiwidXNlV2Vic29ja2V0UGluZyIsInVzZVNlbmRNZXNzYWdlIiwicHJvY2Vzc1R1cmJvcGFja01lc3NhZ2UiLCJ1c2VUdXJib3BhY2siLCJ1c2VSb3V0ZXIiLCJ1c2VFZmZlY3QiLCJkYXRhIiwiaGFuZGxlZEJ5VHVyYm9wYWNrIiwiX2Vycl9zdGFjayIsIndlYnNvY2tldCIsImN1cnJlbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImpzeCIsIm9uUmVhY3RFcnJvciIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/hot-reloader-client.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/ReactDevOverlay.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/ReactDevOverlay.js ***! + \************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _erroroverlayreducer = __webpack_require__(/*! ./error-overlay-reducer */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js\");\nconst _ShadowPortal = __webpack_require__(/*! ./components/ShadowPortal */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js\");\nconst _BuildError = __webpack_require__(/*! ./container/BuildError */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js\");\nconst _Errors = __webpack_require__(/*! ./container/Errors */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js\");\nconst _RootLayoutError = __webpack_require__(/*! ./container/RootLayoutError */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RootLayoutError.js\");\nconst _parseStack = __webpack_require__(/*! ./helpers/parseStack */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js\");\nconst _Base = __webpack_require__(/*! ./styles/Base */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js\");\nconst _ComponentStyles = __webpack_require__(/*! ./styles/ComponentStyles */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js\");\nconst _CssReset = __webpack_require__(/*! ./styles/CssReset */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js\");\nclass ReactDevOverlay extends _react.PureComponent {\n static getDerivedStateFromError(error) {\n const e = error;\n const event = {\n type: _erroroverlayreducer.ACTION_UNHANDLED_ERROR,\n reason: error,\n frames: (0, _parseStack.parseStack)(e.stack)\n };\n const errorEvent = {\n id: 0,\n event\n };\n return {\n reactError: errorEvent\n };\n }\n componentDidCatch(componentErr) {\n this.props.onReactError(componentErr);\n }\n render() {\n const { state, children } = this.props;\n const { reactError } = this.state;\n const hasBuildError = state.buildError != null;\n const hasRuntimeErrors = Boolean(state.errors.length);\n const rootLayoutMissingTagsError = state.rootLayoutMissingTagsError;\n const isMounted = hasBuildError || hasRuntimeErrors || reactError || rootLayoutMissingTagsError;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n reactError ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"html\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"head\", {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"body\", {})\n ]\n }) : children,\n isMounted ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_ShadowPortal.ShadowPortal, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_CssReset.CssReset, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Base.Base, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_ComponentStyles.ComponentStyles, {}),\n rootLayoutMissingTagsError ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_RootLayoutError.RootLayoutError, {\n missingTags: rootLayoutMissingTagsError.missingTags\n }) : hasBuildError ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_BuildError.BuildError, {\n message: state.buildError,\n versionInfo: state.versionInfo\n }) : reactError ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_Errors.Errors, {\n versionInfo: state.versionInfo,\n initialDisplayState: \"fullscreen\",\n errors: [\n reactError\n ]\n }) : hasRuntimeErrors ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_Errors.Errors, {\n initialDisplayState: \"minimized\",\n errors: state.errors,\n versionInfo: state.versionInfo\n }) : undefined\n ]\n }) : undefined\n ]\n });\n }\n constructor(...args){\n super(...args);\n this.state = {\n reactError: null\n };\n }\n}\nconst _default = ReactDevOverlay;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ReactDevOverlay.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL1JlYWN0RGV2T3ZlcmxheS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTUksdUJBQXVCSixtQkFBT0EsQ0FBQyxxSUFBeUI7QUFDOUQsTUFBTUssZ0JBQWdCTCxtQkFBT0EsQ0FBQyx5SUFBMkI7QUFDekQsTUFBTU0sY0FBY04sbUJBQU9BLENBQUMsbUlBQXdCO0FBQ3BELE1BQU1PLFVBQVVQLG1CQUFPQSxDQUFDLDJIQUFvQjtBQUM1QyxNQUFNUSxtQkFBbUJSLG1CQUFPQSxDQUFDLDZJQUE2QjtBQUM5RCxNQUFNUyxjQUFjVCxtQkFBT0EsQ0FBQywrSEFBc0I7QUFDbEQsTUFBTVUsUUFBUVYsbUJBQU9BLENBQUMsaUhBQWU7QUFDckMsTUFBTVcsbUJBQW1CWCxtQkFBT0EsQ0FBQyx1SUFBMEI7QUFDM0QsTUFBTVksWUFBWVosbUJBQU9BLENBQUMseUhBQW1CO0FBQzdDLE1BQU1hLHdCQUF3QlgsT0FBT1ksYUFBYTtJQUM5QyxPQUFPQyx5QkFBeUJDLEtBQUssRUFBRTtRQUNuQyxNQUFNQyxJQUFJRDtRQUNWLE1BQU1FLFFBQVE7WUFDVkMsTUFBTWYscUJBQXFCZ0Isc0JBQXNCO1lBQ2pEQyxRQUFRTDtZQUNSTSxRQUFRLENBQUMsR0FBR2IsWUFBWWMsVUFBVSxFQUFFTixFQUFFTyxLQUFLO1FBQy9DO1FBQ0EsTUFBTUMsYUFBYTtZQUNmQyxJQUFJO1lBQ0pSO1FBQ0o7UUFDQSxPQUFPO1lBQ0hTLFlBQVlGO1FBQ2hCO0lBQ0o7SUFDQUcsa0JBQWtCQyxZQUFZLEVBQUU7UUFDNUIsSUFBSSxDQUFDQyxLQUFLLENBQUNDLFlBQVksQ0FBQ0Y7SUFDNUI7SUFDQUcsU0FBUztRQUNMLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUNKLEtBQUs7UUFDdEMsTUFBTSxFQUFFSCxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUNNLEtBQUs7UUFDakMsTUFBTUUsZ0JBQWdCRixNQUFNRyxVQUFVLElBQUk7UUFDMUMsTUFBTUMsbUJBQW1CQyxRQUFRTCxNQUFNTSxNQUFNLENBQUNDLE1BQU07UUFDcEQsTUFBTUMsNkJBQTZCUixNQUFNUSwwQkFBMEI7UUFDbkUsTUFBTUMsWUFBWVAsaUJBQWlCRSxvQkFBb0JWLGNBQWNjO1FBQ3JFLE9BQXFCLFdBQUgsR0FBSSxJQUFHeEMsWUFBWTBDLElBQUksRUFBRTFDLFlBQVkyQyxRQUFRLEVBQUU7WUFDN0RWLFVBQVU7Z0JBQ05QLGFBQTJCLFdBQUgsR0FBSSxJQUFHMUIsWUFBWTBDLElBQUksRUFBRSxRQUFRO29CQUNyRFQsVUFBVTt3QkFDTixXQUFXLEdBQUksSUFBR2pDLFlBQVk0QyxHQUFHLEVBQUUsUUFBUSxDQUFDO3dCQUM1QyxXQUFXLEdBQUksSUFBRzVDLFlBQVk0QyxHQUFHLEVBQUUsUUFBUSxDQUFDO3FCQUMvQztnQkFDTCxLQUFLWDtnQkFDTFEsWUFBMEIsV0FBSCxHQUFJLElBQUd6QyxZQUFZMEMsSUFBSSxFQUFFdEMsY0FBY3lDLFlBQVksRUFBRTtvQkFDeEVaLFVBQVU7d0JBQ04sV0FBVyxHQUFJLElBQUdqQyxZQUFZNEMsR0FBRyxFQUFFakMsVUFBVW1DLFFBQVEsRUFBRSxDQUFDO3dCQUN4RCxXQUFXLEdBQUksSUFBRzlDLFlBQVk0QyxHQUFHLEVBQUVuQyxNQUFNc0MsSUFBSSxFQUFFLENBQUM7d0JBQ2hELFdBQVcsR0FBSSxJQUFHL0MsWUFBWTRDLEdBQUcsRUFBRWxDLGlCQUFpQnNDLGVBQWUsRUFBRSxDQUFDO3dCQUN0RVIsNkJBQTJDLFdBQUgsR0FBSSxJQUFHeEMsWUFBWTRDLEdBQUcsRUFBRXJDLGlCQUFpQjBDLGVBQWUsRUFBRTs0QkFDOUZDLGFBQWFWLDJCQUEyQlUsV0FBVzt3QkFDdkQsS0FBS2hCLGdCQUE4QixXQUFILEdBQUksSUFBR2xDLFlBQVk0QyxHQUFHLEVBQUV2QyxZQUFZOEMsVUFBVSxFQUFFOzRCQUM1RUMsU0FBU3BCLE1BQU1HLFVBQVU7NEJBQ3pCa0IsYUFBYXJCLE1BQU1xQixXQUFXO3dCQUNsQyxLQUFLM0IsYUFBMkIsV0FBSCxHQUFJLElBQUcxQixZQUFZNEMsR0FBRyxFQUFFdEMsUUFBUWdELE1BQU0sRUFBRTs0QkFDakVELGFBQWFyQixNQUFNcUIsV0FBVzs0QkFDOUJFLHFCQUFxQjs0QkFDckJqQixRQUFRO2dDQUNKWjs2QkFDSDt3QkFDTCxLQUFLVSxtQkFBaUMsV0FBSCxHQUFJLElBQUdwQyxZQUFZNEMsR0FBRyxFQUFFdEMsUUFBUWdELE1BQU0sRUFBRTs0QkFDdkVDLHFCQUFxQjs0QkFDckJqQixRQUFRTixNQUFNTSxNQUFNOzRCQUNwQmUsYUFBYXJCLE1BQU1xQixXQUFXO3dCQUNsQyxLQUFLRztxQkFDUjtnQkFDTCxLQUFLQTthQUNSO1FBQ0w7SUFDSjtJQUNBQyxZQUFZLEdBQUdDLElBQUksQ0FBQztRQUNoQixLQUFLLElBQUlBO1FBQ1QsSUFBSSxDQUFDMUIsS0FBSyxHQUFHO1lBQ1ROLFlBQVk7UUFDaEI7SUFDSjtBQUNKO0FBQ0EsTUFBTTdCLFdBQVdlO0FBRWpCLElBQUksQ0FBQyxPQUFPbkIsUUFBUWtFLE9BQU8sS0FBSyxjQUFlLE9BQU9sRSxRQUFRa0UsT0FBTyxLQUFLLFlBQVlsRSxRQUFRa0UsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPbEUsUUFBUWtFLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktyRSxPQUFPQyxjQUFjLENBQUNDLFFBQVFrRSxPQUFPLEVBQUUsY0FBYztRQUFFakUsT0FBTztJQUFLO0lBQ25FSCxPQUFPc0UsTUFBTSxDQUFDcEUsUUFBUWtFLE9BQU8sRUFBRWxFO0lBQy9CcUUsT0FBT3JFLE9BQU8sR0FBR0EsUUFBUWtFLE9BQU87QUFDbEMsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9SZWFjdERldk92ZXJsYXkuanM/ZDJjNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9kZWZhdWx0O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX2Vycm9yb3ZlcmxheXJlZHVjZXIgPSByZXF1aXJlKFwiLi9lcnJvci1vdmVybGF5LXJlZHVjZXJcIik7XG5jb25zdCBfU2hhZG93UG9ydGFsID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy9TaGFkb3dQb3J0YWxcIik7XG5jb25zdCBfQnVpbGRFcnJvciA9IHJlcXVpcmUoXCIuL2NvbnRhaW5lci9CdWlsZEVycm9yXCIpO1xuY29uc3QgX0Vycm9ycyA9IHJlcXVpcmUoXCIuL2NvbnRhaW5lci9FcnJvcnNcIik7XG5jb25zdCBfUm9vdExheW91dEVycm9yID0gcmVxdWlyZShcIi4vY29udGFpbmVyL1Jvb3RMYXlvdXRFcnJvclwiKTtcbmNvbnN0IF9wYXJzZVN0YWNrID0gcmVxdWlyZShcIi4vaGVscGVycy9wYXJzZVN0YWNrXCIpO1xuY29uc3QgX0Jhc2UgPSByZXF1aXJlKFwiLi9zdHlsZXMvQmFzZVwiKTtcbmNvbnN0IF9Db21wb25lbnRTdHlsZXMgPSByZXF1aXJlKFwiLi9zdHlsZXMvQ29tcG9uZW50U3R5bGVzXCIpO1xuY29uc3QgX0Nzc1Jlc2V0ID0gcmVxdWlyZShcIi4vc3R5bGVzL0Nzc1Jlc2V0XCIpO1xuY2xhc3MgUmVhY3REZXZPdmVybGF5IGV4dGVuZHMgX3JlYWN0LlB1cmVDb21wb25lbnQge1xuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZSA9IGVycm9yO1xuICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICAgIHR5cGU6IF9lcnJvcm92ZXJsYXlyZWR1Y2VyLkFDVElPTl9VTkhBTkRMRURfRVJST1IsXG4gICAgICAgICAgICByZWFzb246IGVycm9yLFxuICAgICAgICAgICAgZnJhbWVzOiAoMCwgX3BhcnNlU3RhY2sucGFyc2VTdGFjaykoZS5zdGFjaylcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZXJyb3JFdmVudCA9IHtcbiAgICAgICAgICAgIGlkOiAwLFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlYWN0RXJyb3I6IGVycm9yRXZlbnRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29tcG9uZW50RGlkQ2F0Y2goY29tcG9uZW50RXJyKSB7XG4gICAgICAgIHRoaXMucHJvcHMub25SZWFjdEVycm9yKGNvbXBvbmVudEVycik7XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0ZSwgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHsgcmVhY3RFcnJvciB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgY29uc3QgaGFzQnVpbGRFcnJvciA9IHN0YXRlLmJ1aWxkRXJyb3IgIT0gbnVsbDtcbiAgICAgICAgY29uc3QgaGFzUnVudGltZUVycm9ycyA9IEJvb2xlYW4oc3RhdGUuZXJyb3JzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHJvb3RMYXlvdXRNaXNzaW5nVGFnc0Vycm9yID0gc3RhdGUucm9vdExheW91dE1pc3NpbmdUYWdzRXJyb3I7XG4gICAgICAgIGNvbnN0IGlzTW91bnRlZCA9IGhhc0J1aWxkRXJyb3IgfHwgaGFzUnVudGltZUVycm9ycyB8fCByZWFjdEVycm9yIHx8IHJvb3RMYXlvdXRNaXNzaW5nVGFnc0Vycm9yO1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgcmVhY3RFcnJvciA/IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiaHRtbFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiaGVhZFwiLCB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiYm9keVwiLCB7fSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pIDogY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgaXNNb3VudGVkID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX1NoYWRvd1BvcnRhbC5TaGFkb3dQb3J0YWwsIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0Nzc1Jlc2V0LkNzc1Jlc2V0LCB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9CYXNlLkJhc2UsIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0NvbXBvbmVudFN0eWxlcy5Db21wb25lbnRTdHlsZXMsIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RMYXlvdXRNaXNzaW5nVGFnc0Vycm9yID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfUm9vdExheW91dEVycm9yLlJvb3RMYXlvdXRFcnJvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmdUYWdzOiByb290TGF5b3V0TWlzc2luZ1RhZ3NFcnJvci5taXNzaW5nVGFnc1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiBoYXNCdWlsZEVycm9yID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfQnVpbGRFcnJvci5CdWlsZEVycm9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3RhdGUuYnVpbGRFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uSW5mbzogc3RhdGUudmVyc2lvbkluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIDogcmVhY3RFcnJvciA/IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0Vycm9ycy5FcnJvcnMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uSW5mbzogc3RhdGUudmVyc2lvbkluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERpc3BsYXlTdGF0ZTogXCJmdWxsc2NyZWVuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0RXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSA6IGhhc1J1bnRpbWVFcnJvcnMgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9FcnJvcnMuRXJyb3JzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERpc3BsYXlTdGF0ZTogXCJtaW5pbWl6ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IHN0YXRlLmVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uSW5mbzogc3RhdGUudmVyc2lvbkluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgcmVhY3RFcnJvcjogbnVsbFxuICAgICAgICB9O1xuICAgIH1cbn1cbmNvbnN0IF9kZWZhdWx0ID0gUmVhY3REZXZPdmVybGF5O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWFjdERldk92ZXJsYXkuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIl9kZWZhdWx0IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfZXJyb3JvdmVybGF5cmVkdWNlciIsIl9TaGFkb3dQb3J0YWwiLCJfQnVpbGRFcnJvciIsIl9FcnJvcnMiLCJfUm9vdExheW91dEVycm9yIiwiX3BhcnNlU3RhY2siLCJfQmFzZSIsIl9Db21wb25lbnRTdHlsZXMiLCJfQ3NzUmVzZXQiLCJSZWFjdERldk92ZXJsYXkiLCJQdXJlQ29tcG9uZW50IiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiZXJyb3IiLCJlIiwiZXZlbnQiLCJ0eXBlIiwiQUNUSU9OX1VOSEFORExFRF9FUlJPUiIsInJlYXNvbiIsImZyYW1lcyIsInBhcnNlU3RhY2siLCJzdGFjayIsImVycm9yRXZlbnQiLCJpZCIsInJlYWN0RXJyb3IiLCJjb21wb25lbnREaWRDYXRjaCIsImNvbXBvbmVudEVyciIsInByb3BzIiwib25SZWFjdEVycm9yIiwicmVuZGVyIiwic3RhdGUiLCJjaGlsZHJlbiIsImhhc0J1aWxkRXJyb3IiLCJidWlsZEVycm9yIiwiaGFzUnVudGltZUVycm9ycyIsIkJvb2xlYW4iLCJlcnJvcnMiLCJsZW5ndGgiLCJyb290TGF5b3V0TWlzc2luZ1RhZ3NFcnJvciIsImlzTW91bnRlZCIsImpzeHMiLCJGcmFnbWVudCIsImpzeCIsIlNoYWRvd1BvcnRhbCIsIkNzc1Jlc2V0IiwiQmFzZSIsIkNvbXBvbmVudFN0eWxlcyIsIlJvb3RMYXlvdXRFcnJvciIsIm1pc3NpbmdUYWdzIiwiQnVpbGRFcnJvciIsIm1lc3NhZ2UiLCJ2ZXJzaW9uSW5mbyIsIkVycm9ycyIsImluaXRpYWxEaXNwbGF5U3RhdGUiLCJ1bmRlZmluZWQiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/ReactDevOverlay.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js ***! + \***************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CodeFrame\", ({\n enumerable: true,\n get: function() {\n return CodeFrame;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _anser = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/anser */ \"(ssr)/./node_modules/next/dist/compiled/anser/index.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(ssr)/./node_modules/next/dist/compiled/strip-ansi/index.js\"));\nconst _stackframe = __webpack_require__(/*! ../../helpers/stack-frame */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\");\nconst _useopenineditor = __webpack_require__(/*! ../../helpers/use-open-in-editor */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\");\nconst CodeFrame = function CodeFrame(param) {\n let { stackFrame, codeFrame } = param;\n // Strip leading spaces out of the code frame:\n const formattedFrame = _react.useMemo(()=>{\n const lines = codeFrame.split(/\\r?\\n/g);\n const prefixLength = lines.map((line)=>/^>? +\\d+ +\\| [ ]+/.exec((0, _stripansi.default)(line)) === null ? null : /^>? +\\d+ +\\| ( *)/.exec((0, _stripansi.default)(line))).filter(Boolean).map((v)=>v.pop()).reduce((c, n)=>isNaN(c) ? n.length : Math.min(c, n.length), NaN);\n if (prefixLength > 1) {\n const p = \" \".repeat(prefixLength);\n return lines.map((line, a)=>~(a = line.indexOf(\"|\")) ? line.substring(0, a) + line.substring(a).replace(p, \"\") : line).join(\"\\n\");\n }\n return lines.join(\"\\n\");\n }, [\n codeFrame\n ]);\n const decoded = _react.useMemo(()=>{\n return _anser.default.ansiToJson(formattedFrame, {\n json: true,\n use_classes: true,\n remove_empty: true\n });\n }, [\n formattedFrame\n ]);\n const open = (0, _useopenineditor.useOpenInEditor)({\n file: stackFrame.file,\n lineNumber: stackFrame.lineNumber,\n column: stackFrame.column\n });\n // TODO: make the caret absolute\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-codeframe\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"p\", {\n role: \"link\",\n onClick: open,\n tabIndex: 1,\n title: \"Click to open in your editor\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"span\", {\n children: [\n (0, _stackframe.getFrameSource)(stackFrame),\n \" @ \",\n stackFrame.methodName\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n })\n ]\n })\n ]\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"pre\", {\n children: decoded.map((entry, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n style: {\n color: entry.fg ? \"var(--color-\" + entry.fg + \")\" : undefined,\n ...entry.decoration === \"bold\" ? {\n fontWeight: 800\n } : entry.decoration === \"italic\" ? {\n fontStyle: \"italic\"\n } : undefined\n },\n children: entry.content\n }, \"frame-\" + index))\n })\n ]\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CodeFrame.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvQ29kZUZyYW1lL0NvZGVGcmFtZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsNkNBQTRDO0lBQ3hDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxrSEFBeUM7QUFDbEYsTUFBTUMsNEJBQTRCRCxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUUsY0FBY0YsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1HLFNBQVMsV0FBVyxHQUFHSix5QkFBeUJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsd0ZBQTBCO0FBQzFGLE1BQU1LLFNBQVMsV0FBVyxHQUFHSiwwQkFBMEJHLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTU0sYUFBYSxXQUFXLEdBQUdQLHlCQUF5QkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxrR0FBK0I7QUFDbkcsTUFBTU8sY0FBY1AsbUJBQU9BLENBQUMscUlBQTJCO0FBQ3ZELE1BQU1RLG1CQUFtQlIsbUJBQU9BLENBQUMsbUpBQWtDO0FBQ25FLE1BQU1GLFlBQVksU0FBU0EsVUFBVVcsS0FBSztJQUN0QyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFLEdBQUdGO0lBQ2hDLDhDQUE4QztJQUM5QyxNQUFNRyxpQkFBaUJQLE9BQU9RLE9BQU8sQ0FBQztRQUNsQyxNQUFNQyxRQUFRSCxVQUFVSSxLQUFLLENBQUM7UUFDOUIsTUFBTUMsZUFBZUYsTUFBTUcsR0FBRyxDQUFDLENBQUNDLE9BQU8sb0JBQW9CQyxJQUFJLENBQUMsQ0FBQyxHQUFHYixXQUFXYyxPQUFPLEVBQUVGLFdBQVcsT0FBTyxPQUFPLG9CQUFvQkMsSUFBSSxDQUFDLENBQUMsR0FBR2IsV0FBV2MsT0FBTyxFQUFFRixRQUFRRyxNQUFNLENBQUNDLFNBQVNMLEdBQUcsQ0FBQyxDQUFDTSxJQUFJQSxFQUFFQyxHQUFHLElBQUlDLE1BQU0sQ0FBQyxDQUFDQyxHQUFHQyxJQUFJQyxNQUFNRixLQUFLQyxFQUFFRSxNQUFNLEdBQUdDLEtBQUtDLEdBQUcsQ0FBQ0wsR0FBR0MsRUFBRUUsTUFBTSxHQUFHRztRQUN4USxJQUFJaEIsZUFBZSxHQUFHO1lBQ2xCLE1BQU1pQixJQUFJLElBQUlDLE1BQU0sQ0FBQ2xCO1lBQ3JCLE9BQU9GLE1BQU1HLEdBQUcsQ0FBQyxDQUFDQyxNQUFNaUIsSUFBSSxDQUFFQSxDQUFBQSxJQUFJakIsS0FBS2tCLE9BQU8sQ0FBQyxJQUFHLElBQUtsQixLQUFLbUIsU0FBUyxDQUFDLEdBQUdGLEtBQUtqQixLQUFLbUIsU0FBUyxDQUFDRixHQUFHRyxPQUFPLENBQUNMLEdBQUcsTUFBTWYsTUFBTXFCLElBQUksQ0FBQztRQUNoSTtRQUNBLE9BQU96QixNQUFNeUIsSUFBSSxDQUFDO0lBQ3RCLEdBQUc7UUFDQzVCO0tBQ0g7SUFDRCxNQUFNNkIsVUFBVW5DLE9BQU9RLE9BQU8sQ0FBQztRQUMzQixPQUFPVixPQUFPaUIsT0FBTyxDQUFDcUIsVUFBVSxDQUFDN0IsZ0JBQWdCO1lBQzdDOEIsTUFBTTtZQUNOQyxhQUFhO1lBQ2JDLGNBQWM7UUFDbEI7SUFDSixHQUFHO1FBQ0NoQztLQUNIO0lBQ0QsTUFBTWlDLE9BQU8sQ0FBQyxHQUFHckMsaUJBQWlCc0MsZUFBZSxFQUFFO1FBQy9DQyxNQUFNckMsV0FBV3FDLElBQUk7UUFDckJDLFlBQVl0QyxXQUFXc0MsVUFBVTtRQUNqQ0MsUUFBUXZDLFdBQVd1QyxNQUFNO0lBQzdCO0lBQ0EsZ0NBQWdDO0lBQ2hDLE9BQXFCLFdBQUgsR0FBSSxJQUFHL0MsWUFBWWdELElBQUksRUFBRSxPQUFPO1FBQzlDLHlCQUF5QjtRQUN6QkMsVUFBVTtZQUNOLFdBQVcsR0FBSSxJQUFHakQsWUFBWWtELEdBQUcsRUFBRSxPQUFPO2dCQUN0Q0QsVUFBd0IsV0FBSCxHQUFJLElBQUdqRCxZQUFZZ0QsSUFBSSxFQUFFLEtBQUs7b0JBQy9DRyxNQUFNO29CQUNOQyxTQUFTVDtvQkFDVFUsVUFBVTtvQkFDVkMsT0FBTztvQkFDUEwsVUFBVTt3QkFDTixXQUFXLEdBQUksSUFBR2pELFlBQVlnRCxJQUFJLEVBQUUsUUFBUTs0QkFDeENDLFVBQVU7Z0NBQ0wsSUFBRzVDLFlBQVlrRCxjQUFjLEVBQUUvQztnQ0FDaEM7Z0NBQ0FBLFdBQVdnRCxVQUFVOzZCQUN4Qjt3QkFDTDt3QkFDQSxXQUFXLEdBQUksSUFBR3hELFlBQVlnRCxJQUFJLEVBQUUsT0FBTzs0QkFDdkNTLE9BQU87NEJBQ1BDLFNBQVM7NEJBQ1RDLE1BQU07NEJBQ05DLFFBQVE7NEJBQ1JDLGFBQWE7NEJBQ2JDLGVBQWU7NEJBQ2ZDLGdCQUFnQjs0QkFDaEJkLFVBQVU7Z0NBQ04sV0FBVyxHQUFJLElBQUdqRCxZQUFZa0QsR0FBRyxFQUFFLFFBQVE7b0NBQ3ZDYyxHQUFHO2dDQUNQO2dDQUNBLFdBQVcsR0FBSSxJQUFHaEUsWUFBWWtELEdBQUcsRUFBRSxZQUFZO29DQUMzQ2UsUUFBUTtnQ0FDWjtnQ0FDQSxXQUFXLEdBQUksSUFBR2pFLFlBQVlrRCxHQUFHLEVBQUUsUUFBUTtvQ0FDdkNnQixJQUFJO29DQUNKQyxJQUFJO29DQUNKQyxJQUFJO29DQUNKQyxJQUFJO2dDQUNSOzZCQUNIO3dCQUNMO3FCQUNIO2dCQUNMO1lBQ0o7WUFDQSxXQUFXLEdBQUksSUFBR3JFLFlBQVlrRCxHQUFHLEVBQUUsT0FBTztnQkFDdENELFVBQVVYLFFBQVF2QixHQUFHLENBQUMsQ0FBQ3VELE9BQU9DLFFBQXNCLFdBQUgsR0FBSSxJQUFHdkUsWUFBWWtELEdBQUcsRUFBRSxRQUFRO3dCQUN6RXNCLE9BQU87NEJBQ0hDLE9BQU9ILE1BQU1JLEVBQUUsR0FBRyxpQkFBaUJKLE1BQU1JLEVBQUUsR0FBRyxNQUFNQzs0QkFDcEQsR0FBR0wsTUFBTU0sVUFBVSxLQUFLLFNBQVM7Z0NBQzdCQyxZQUFZOzRCQUNoQixJQUFJUCxNQUFNTSxVQUFVLEtBQUssV0FBVztnQ0FDaENFLFdBQVc7NEJBQ2YsSUFBSUgsU0FBUzt3QkFDakI7d0JBQ0ExQixVQUFVcUIsTUFBTVMsT0FBTztvQkFDM0IsR0FBRyxXQUFXUjtZQUN0QjtTQUNIO0lBQ0w7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPL0UsUUFBUTBCLE9BQU8sS0FBSyxjQUFlLE9BQU8xQixRQUFRMEIsT0FBTyxLQUFLLFlBQVkxQixRQUFRMEIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPMUIsUUFBUTBCLE9BQU8sQ0FBQzhELFVBQVUsS0FBSyxhQUFhO0lBQ3JLMUYsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMEIsT0FBTyxFQUFFLGNBQWM7UUFBRXpCLE9BQU87SUFBSztJQUNuRUgsT0FBTzJGLE1BQU0sQ0FBQ3pGLFFBQVEwQixPQUFPLEVBQUUxQjtJQUMvQjBGLE9BQU8xRixPQUFPLEdBQUdBLFFBQVEwQixPQUFPO0FBQ2xDLEVBRUEscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Db2RlRnJhbWUvQ29kZUZyYW1lLmpzP2Y2MjAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb2RlRnJhbWVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENvZGVGcmFtZTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9hbnNlciA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9hbnNlclwiKSk7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX3N0cmlwYW5zaSA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpXCIpKTtcbmNvbnN0IF9zdGFja2ZyYW1lID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvc3RhY2stZnJhbWVcIik7XG5jb25zdCBfdXNlb3BlbmluZWRpdG9yID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvdXNlLW9wZW4taW4tZWRpdG9yXCIpO1xuY29uc3QgQ29kZUZyYW1lID0gZnVuY3Rpb24gQ29kZUZyYW1lKHBhcmFtKSB7XG4gICAgbGV0IHsgc3RhY2tGcmFtZSwgY29kZUZyYW1lIH0gPSBwYXJhbTtcbiAgICAvLyBTdHJpcCBsZWFkaW5nIHNwYWNlcyBvdXQgb2YgdGhlIGNvZGUgZnJhbWU6XG4gICAgY29uc3QgZm9ybWF0dGVkRnJhbWUgPSBfcmVhY3QudXNlTWVtbygoKT0+e1xuICAgICAgICBjb25zdCBsaW5lcyA9IGNvZGVGcmFtZS5zcGxpdCgvXFxyP1xcbi9nKTtcbiAgICAgICAgY29uc3QgcHJlZml4TGVuZ3RoID0gbGluZXMubWFwKChsaW5lKT0+L14+PyArXFxkKyArXFx8IFsgXSsvLmV4ZWMoKDAsIF9zdHJpcGFuc2kuZGVmYXVsdCkobGluZSkpID09PSBudWxsID8gbnVsbCA6IC9ePj8gK1xcZCsgK1xcfCAoICopLy5leGVjKCgwLCBfc3RyaXBhbnNpLmRlZmF1bHQpKGxpbmUpKSkuZmlsdGVyKEJvb2xlYW4pLm1hcCgodik9PnYucG9wKCkpLnJlZHVjZSgoYywgbik9PmlzTmFOKGMpID8gbi5sZW5ndGggOiBNYXRoLm1pbihjLCBuLmxlbmd0aCksIE5hTik7XG4gICAgICAgIGlmIChwcmVmaXhMZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gXCIgXCIucmVwZWF0KHByZWZpeExlbmd0aCk7XG4gICAgICAgICAgICByZXR1cm4gbGluZXMubWFwKChsaW5lLCBhKT0+fihhID0gbGluZS5pbmRleE9mKFwifFwiKSkgPyBsaW5lLnN1YnN0cmluZygwLCBhKSArIGxpbmUuc3Vic3RyaW5nKGEpLnJlcGxhY2UocCwgXCJcIikgOiBsaW5lKS5qb2luKFwiXFxuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIH0sIFtcbiAgICAgICAgY29kZUZyYW1lXG4gICAgXSk7XG4gICAgY29uc3QgZGVjb2RlZCA9IF9yZWFjdC51c2VNZW1vKCgpPT57XG4gICAgICAgIHJldHVybiBfYW5zZXIuZGVmYXVsdC5hbnNpVG9Kc29uKGZvcm1hdHRlZEZyYW1lLCB7XG4gICAgICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICAgICAgdXNlX2NsYXNzZXM6IHRydWUsXG4gICAgICAgICAgICByZW1vdmVfZW1wdHk6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfSwgW1xuICAgICAgICBmb3JtYXR0ZWRGcmFtZVxuICAgIF0pO1xuICAgIGNvbnN0IG9wZW4gPSAoMCwgX3VzZW9wZW5pbmVkaXRvci51c2VPcGVuSW5FZGl0b3IpKHtcbiAgICAgICAgZmlsZTogc3RhY2tGcmFtZS5maWxlLFxuICAgICAgICBsaW5lTnVtYmVyOiBzdGFja0ZyYW1lLmxpbmVOdW1iZXIsXG4gICAgICAgIGNvbHVtbjogc3RhY2tGcmFtZS5jb2x1bW5cbiAgICB9KTtcbiAgICAvLyBUT0RPOiBtYWtlIHRoZSBjYXJldCBhYnNvbHV0ZVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgIFwiZGF0YS1uZXh0anMtY29kZWZyYW1lXCI6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJwXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJsaW5rXCIsXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IG9wZW4sXG4gICAgICAgICAgICAgICAgICAgIHRhYkluZGV4OiAxLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJDbGljayB0byBvcGVuIGluIHlvdXIgZWRpdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfc3RhY2tmcmFtZS5nZXRGcmFtZVNvdXJjZSkoc3RhY2tGcmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIEAgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUubWV0aG9kTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBvbHlsaW5lXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50czogXCIxNSAzIDIxIDMgMjEgOVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibGluZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTogXCIxMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE6IFwiMTRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiBcIjIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MjogXCIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInByZVwiLCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGRlY29kZWQubWFwKChlbnRyeSwgaW5kZXgpPT4vKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlbnRyeS5mZyA/IFwidmFyKC0tY29sb3ItXCIgKyBlbnRyeS5mZyArIFwiKVwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LmRlY29yYXRpb24gPT09IFwiYm9sZFwiID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA4MDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDogZW50cnkuZGVjb3JhdGlvbiA9PT0gXCJpdGFsaWNcIiA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFN0eWxlOiBcIml0YWxpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBlbnRyeS5jb250ZW50XG4gICAgICAgICAgICAgICAgICAgIH0sIFwiZnJhbWUtXCIgKyBpbmRleCkpXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db2RlRnJhbWUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkNvZGVGcmFtZSIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwiX2pzeHJ1bnRpbWUiLCJfYW5zZXIiLCJfIiwiX3JlYWN0IiwiX3N0cmlwYW5zaSIsIl9zdGFja2ZyYW1lIiwiX3VzZW9wZW5pbmVkaXRvciIsInBhcmFtIiwic3RhY2tGcmFtZSIsImNvZGVGcmFtZSIsImZvcm1hdHRlZEZyYW1lIiwidXNlTWVtbyIsImxpbmVzIiwic3BsaXQiLCJwcmVmaXhMZW5ndGgiLCJtYXAiLCJsaW5lIiwiZXhlYyIsImRlZmF1bHQiLCJmaWx0ZXIiLCJCb29sZWFuIiwidiIsInBvcCIsInJlZHVjZSIsImMiLCJuIiwiaXNOYU4iLCJsZW5ndGgiLCJNYXRoIiwibWluIiwiTmFOIiwicCIsInJlcGVhdCIsImEiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwicmVwbGFjZSIsImpvaW4iLCJkZWNvZGVkIiwiYW5zaVRvSnNvbiIsImpzb24iLCJ1c2VfY2xhc3NlcyIsInJlbW92ZV9lbXB0eSIsIm9wZW4iLCJ1c2VPcGVuSW5FZGl0b3IiLCJmaWxlIiwibGluZU51bWJlciIsImNvbHVtbiIsImpzeHMiLCJjaGlsZHJlbiIsImpzeCIsInJvbGUiLCJvbkNsaWNrIiwidGFiSW5kZXgiLCJ0aXRsZSIsImdldEZyYW1lU291cmNlIiwibWV0aG9kTmFtZSIsInhtbG5zIiwidmlld0JveCIsImZpbGwiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsImQiLCJwb2ludHMiLCJ4MSIsInkxIiwieDIiLCJ5MiIsImVudHJ5IiwiaW5kZXgiLCJzdHlsZSIsImNvbG9yIiwiZmciLCJ1bmRlZmluZWQiLCJkZWNvcmF0aW9uIiwiZm9udFdlaWdodCIsImZvbnRTdHlsZSIsImNvbnRlbnQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js ***! + \***********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CodeFrame\", ({\n enumerable: true,\n get: function() {\n return _CodeFrame.CodeFrame;\n }\n}));\nconst _CodeFrame = __webpack_require__(/*! ./CodeFrame */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvQ29kZUZyYW1lL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw2Q0FBNEM7SUFDeENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DLFdBQVdDLFNBQVM7SUFDL0I7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNRCxhQUFhRSxtQkFBT0EsQ0FBQyxrSUFBYTtBQUV4QyxJQUFJLENBQUMsT0FBT04sUUFBUU8sT0FBTyxLQUFLLGNBQWUsT0FBT1AsUUFBUU8sT0FBTyxLQUFLLFlBQVlQLFFBQVFPLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1AsUUFBUU8sT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS1YsT0FBT0MsY0FBYyxDQUFDQyxRQUFRTyxPQUFPLEVBQUUsY0FBYztRQUFFTixPQUFPO0lBQUs7SUFDbkVILE9BQU9XLE1BQU0sQ0FBQ1QsUUFBUU8sT0FBTyxFQUFFUDtJQUMvQlUsT0FBT1YsT0FBTyxHQUFHQSxRQUFRTyxPQUFPO0FBQ2xDLEVBRUEsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Db2RlRnJhbWUvaW5kZXguanM/NzBmOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvZGVGcmFtZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX0NvZGVGcmFtZS5Db2RlRnJhbWU7XG4gICAgfVxufSk7XG5jb25zdCBfQ29kZUZyYW1lID0gcmVxdWlyZShcIi4vQ29kZUZyYW1lXCIpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX0NvZGVGcmFtZSIsIkNvZGVGcmFtZSIsInJlcXVpcmUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js": +/*!************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js ***! + \************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-codeframe] {\\n overflow: auto;\\n border-radius: var(--size-gap-half);\\n background-color: var(--color-ansi-bg);\\n color: var(--color-ansi-fg);\\n }\\n [data-nextjs-codeframe]::selection,\\n [data-nextjs-codeframe] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n [data-nextjs-codeframe] * {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n\\n [data-nextjs-codeframe] > * {\\n margin: 0;\\n padding: calc(var(--size-gap) + var(--size-gap-half))\\n calc(var(--size-gap-double) + var(--size-gap-half));\\n }\\n [data-nextjs-codeframe] > div {\\n display: inline-block;\\n width: auto;\\n min-width: 100%;\\n border-bottom: 1px solid var(--color-ansi-bright-black);\\n }\\n [data-nextjs-codeframe] > div > p {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n cursor: pointer;\\n margin: 0;\\n }\\n [data-nextjs-codeframe] > div > p:hover {\\n text-decoration: underline dotted;\\n }\\n [data-nextjs-codeframe] div > p > svg {\\n width: auto;\\n height: 1em;\\n margin-left: 8px;\\n }\\n [data-nextjs-codeframe] div > pre {\\n overflow: hidden;\\n display: inline-block;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvQ29kZUZyYW1lL3N0eWxlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMENBQXlDO0lBQ3JDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsaUNBQWlDQyxtQkFBT0EsQ0FBQyw4SEFBK0M7QUFDOUYsTUFBTUMsZ0JBQWdCRCxtQkFBT0EsQ0FBQyx5SUFBNkI7QUFDM0QsU0FBU0U7SUFDTCxNQUFNQyxPQUFPSiwrQkFBK0JLLENBQUMsQ0FBQztRQUMxQztLQUNIO0lBQ0RGLGtCQUFrQjtRQUNkLE9BQU9DO0lBQ1g7SUFDQSxPQUFPQTtBQUNYO0FBQ0EsTUFBTUwsU0FBUyxDQUFDLEdBQUdHLGNBQWNJLElBQUksRUFBRUg7QUFFdkMsSUFBSSxDQUFDLE9BQU9SLFFBQVFZLE9BQU8sS0FBSyxjQUFlLE9BQU9aLFFBQVFZLE9BQU8sS0FBSyxZQUFZWixRQUFRWSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9aLFFBQVFZLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktmLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUVksT0FBTyxFQUFFLGNBQWM7UUFBRVgsT0FBTztJQUFLO0lBQ25FSCxPQUFPZ0IsTUFBTSxDQUFDZCxRQUFRWSxPQUFPLEVBQUVaO0lBQy9CZSxPQUFPZixPQUFPLEdBQUdBLFFBQVFZLE9BQU87QUFDbEMsRUFFQSxrQ0FBa0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0NvZGVGcmFtZS9zdHlsZXMuanM/ZGJhYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0eWxlc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgIH1cbn0pO1xuY29uc3QgX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZVwiKTtcbmNvbnN0IF9ub29wdGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9ub29wLXRlbXBsYXRlXCIpO1xuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuXyhbXG4gICAgICAgIFwiXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSB7XFxuICAgIG92ZXJmbG93OiBhdXRvO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zaXplLWdhcC1oYWxmKTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1iZyk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLWZnKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdOjpzZWxlY3Rpb24sXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSAqOjpzZWxlY3Rpb24ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLXNlbGVjdGlvbik7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSAqIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gPiAqIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBwYWRkaW5nOiBjYWxjKHZhcigtLXNpemUtZ2FwKSArIHZhcigtLXNpemUtZ2FwLWhhbGYpKVxcbiAgICAgIGNhbGModmFyKC0tc2l6ZS1nYXAtZG91YmxlKSArIHZhcigtLXNpemUtZ2FwLWhhbGYpKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdID4gZGl2IHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgbWluLXdpZHRoOiAxMDAlO1xcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItYW5zaS1icmlnaHQtYmxhY2spO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gPiBkaXYgPiBwIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdID4gZGl2ID4gcDpob3ZlciB7XFxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdIGRpdiA+IHAgPiBzdmcge1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgaGVpZ2h0OiAxZW07XFxuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSBkaXYgPiBwcmUge1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB9XFxuXCJcbiAgICBdKTtcbiAgICBfdGVtcGxhdGVPYmplY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcbiAgICByZXR1cm4gZGF0YTtcbn1cbmNvbnN0IHN0eWxlcyA9ICgwLCBfbm9vcHRlbXBsYXRlLm5vb3ApKF90ZW1wbGF0ZU9iamVjdCgpKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3R5bGVzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJzdHlsZXMiLCJfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UiLCJyZXF1aXJlIiwiX25vb3B0ZW1wbGF0ZSIsIl90ZW1wbGF0ZU9iamVjdCIsImRhdGEiLCJfIiwibm9vcCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js ***! + \*********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Dialog\", ({\n enumerable: true,\n get: function() {\n return Dialog;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _useonclickoutside = __webpack_require__(/*! ../../hooks/use-on-click-outside */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js\");\nconst Dialog = function Dialog(param) {\n let { children, type, onClose, ...props } = param;\n const [dialog, setDialog] = _react.useState(null);\n const [role, setRole] = _react.useState(typeof document !== \"undefined\" && document.hasFocus() ? \"dialog\" : undefined);\n const onDialog = _react.useCallback((node)=>{\n setDialog(node);\n }, []);\n (0, _useonclickoutside.useOnClickOutside)(dialog, onClose);\n // Make HTMLElements with `role=link` accessible to be triggered by the\n // keyboard, i.e. [Enter].\n _react.useEffect(()=>{\n if (dialog == null) {\n return;\n }\n const root = dialog.getRootNode();\n // Always true, but we do this for TypeScript:\n if (!(root instanceof ShadowRoot)) {\n return;\n }\n const shadowRoot = root;\n function handler(e) {\n const el = shadowRoot.activeElement;\n if (e.key === \"Enter\" && el instanceof HTMLElement && el.getAttribute(\"role\") === \"link\") {\n e.preventDefault();\n e.stopPropagation();\n el.click();\n }\n }\n function handleFocus() {\n // safari will force itself as the active application when a background page triggers any sort of autofocus\n // this is a workaround to only set the dialog role if the document has focus\n setRole(document.hasFocus() ? \"dialog\" : undefined);\n }\n shadowRoot.addEventListener(\"keydown\", handler);\n window.addEventListener(\"focus\", handleFocus);\n window.addEventListener(\"blur\", handleFocus);\n return ()=>{\n shadowRoot.removeEventListener(\"keydown\", handler);\n window.removeEventListener(\"focus\", handleFocus);\n window.removeEventListener(\"blur\", handleFocus);\n };\n }, [\n dialog\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n ref: onDialog,\n \"data-nextjs-dialog\": true,\n tabIndex: -1,\n role: role,\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"],\n \"aria-modal\": \"true\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-banner\": true,\n className: \"banner-\" + type\n }),\n children\n ]\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Dialog.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMENBQXlDO0lBQ3JDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTUkscUJBQXFCSixtQkFBT0EsQ0FBQyxtSkFBa0M7QUFDckUsTUFBTUYsU0FBUyxTQUFTQSxPQUFPTyxLQUFLO0lBQ2hDLElBQUksRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLE9BQU8sRUFBRSxHQUFHQyxPQUFPLEdBQUdKO0lBQzVDLE1BQU0sQ0FBQ0ssUUFBUUMsVUFBVSxHQUFHVCxPQUFPVSxRQUFRLENBQUM7SUFDNUMsTUFBTSxDQUFDQyxNQUFNQyxRQUFRLEdBQUdaLE9BQU9VLFFBQVEsQ0FBQyxPQUFPRyxhQUFhLGVBQWVBLFNBQVNDLFFBQVEsS0FBSyxXQUFXQztJQUM1RyxNQUFNQyxXQUFXaEIsT0FBT2lCLFdBQVcsQ0FBQyxDQUFDQztRQUNqQ1QsVUFBVVM7SUFDZCxHQUFHLEVBQUU7SUFDSixJQUFHaEIsbUJBQW1CaUIsaUJBQWlCLEVBQUVYLFFBQVFGO0lBQ2xELHVFQUF1RTtJQUN2RSwwQkFBMEI7SUFDMUJOLE9BQU9vQixTQUFTLENBQUM7UUFDYixJQUFJWixVQUFVLE1BQU07WUFDaEI7UUFDSjtRQUNBLE1BQU1hLE9BQU9iLE9BQU9jLFdBQVc7UUFDL0IsOENBQThDO1FBQzlDLElBQUksQ0FBRUQsQ0FBQUEsZ0JBQWdCRSxVQUFTLEdBQUk7WUFDL0I7UUFDSjtRQUNBLE1BQU1DLGFBQWFIO1FBQ25CLFNBQVNJLFFBQVFDLENBQUM7WUFDZCxNQUFNQyxLQUFLSCxXQUFXSSxhQUFhO1lBQ25DLElBQUlGLEVBQUVHLEdBQUcsS0FBSyxXQUFXRixjQUFjRyxlQUFlSCxHQUFHSSxZQUFZLENBQUMsWUFBWSxRQUFRO2dCQUN0RkwsRUFBRU0sY0FBYztnQkFDaEJOLEVBQUVPLGVBQWU7Z0JBQ2pCTixHQUFHTyxLQUFLO1lBQ1o7UUFDSjtRQUNBLFNBQVNDO1lBQ0wsMkdBQTJHO1lBQzNHLDZFQUE2RTtZQUM3RXZCLFFBQVFDLFNBQVNDLFFBQVEsS0FBSyxXQUFXQztRQUM3QztRQUNBUyxXQUFXWSxnQkFBZ0IsQ0FBQyxXQUFXWDtRQUN2Q1ksT0FBT0QsZ0JBQWdCLENBQUMsU0FBU0Q7UUFDakNFLE9BQU9ELGdCQUFnQixDQUFDLFFBQVFEO1FBQ2hDLE9BQU87WUFDSFgsV0FBV2MsbUJBQW1CLENBQUMsV0FBV2I7WUFDMUNZLE9BQU9DLG1CQUFtQixDQUFDLFNBQVNIO1lBQ3BDRSxPQUFPQyxtQkFBbUIsQ0FBQyxRQUFRSDtRQUN2QztJQUNKLEdBQUc7UUFDQzNCO0tBQ0g7SUFDRCxPQUFxQixXQUFILEdBQUksSUFBR1QsWUFBWXdDLElBQUksRUFBRSxPQUFPO1FBQzlDQyxLQUFLeEI7UUFDTCxzQkFBc0I7UUFDdEJ5QixVQUFVLENBQUM7UUFDWDlCLE1BQU1BO1FBQ04sbUJBQW1CSixLQUFLLENBQUMsa0JBQWtCO1FBQzNDLG9CQUFvQkEsS0FBSyxDQUFDLG1CQUFtQjtRQUM3QyxjQUFjO1FBQ2RILFVBQVU7WUFDTixXQUFXLEdBQUksSUFBR0wsWUFBWTJDLEdBQUcsRUFBRSxPQUFPO2dCQUN0Qyw2QkFBNkI7Z0JBQzdCQyxXQUFXLFlBQVl0QztZQUMzQjtZQUNBRDtTQUNIO0lBQ0w7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPWixRQUFRb0QsT0FBTyxLQUFLLGNBQWUsT0FBT3BELFFBQVFvRCxPQUFPLEtBQUssWUFBWXBELFFBQVFvRCxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9wRCxRQUFRb0QsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3ZELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW9ELE9BQU8sRUFBRSxjQUFjO1FBQUVuRCxPQUFPO0lBQUs7SUFDbkVILE9BQU93RCxNQUFNLENBQUN0RCxRQUFRb0QsT0FBTyxFQUFFcEQ7SUFDL0J1RCxPQUFPdkQsT0FBTyxHQUFHQSxRQUFRb0QsT0FBTztBQUNsQyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZy5qcz9mZDkzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGlhbG9nXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBEaWFsb2c7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfdXNlb25jbGlja291dHNpZGUgPSByZXF1aXJlKFwiLi4vLi4vaG9va3MvdXNlLW9uLWNsaWNrLW91dHNpZGVcIik7XG5jb25zdCBEaWFsb2cgPSBmdW5jdGlvbiBEaWFsb2cocGFyYW0pIHtcbiAgICBsZXQgeyBjaGlsZHJlbiwgdHlwZSwgb25DbG9zZSwgLi4ucHJvcHMgfSA9IHBhcmFtO1xuICAgIGNvbnN0IFtkaWFsb2csIHNldERpYWxvZ10gPSBfcmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3JvbGUsIHNldFJvbGVdID0gX3JlYWN0LnVzZVN0YXRlKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5oYXNGb2N1cygpID8gXCJkaWFsb2dcIiA6IHVuZGVmaW5lZCk7XG4gICAgY29uc3Qgb25EaWFsb2cgPSBfcmVhY3QudXNlQ2FsbGJhY2soKG5vZGUpPT57XG4gICAgICAgIHNldERpYWxvZyhub2RlKTtcbiAgICB9LCBbXSk7XG4gICAgKDAsIF91c2VvbmNsaWNrb3V0c2lkZS51c2VPbkNsaWNrT3V0c2lkZSkoZGlhbG9nLCBvbkNsb3NlKTtcbiAgICAvLyBNYWtlIEhUTUxFbGVtZW50cyB3aXRoIGByb2xlPWxpbmtgIGFjY2Vzc2libGUgdG8gYmUgdHJpZ2dlcmVkIGJ5IHRoZVxuICAgIC8vIGtleWJvYXJkLCBpLmUuIFtFbnRlcl0uXG4gICAgX3JlYWN0LnVzZUVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoZGlhbG9nID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290ID0gZGlhbG9nLmdldFJvb3ROb2RlKCk7XG4gICAgICAgIC8vIEFsd2F5cyB0cnVlLCBidXQgd2UgZG8gdGhpcyBmb3IgVHlwZVNjcmlwdDpcbiAgICAgICAgaWYgKCEocm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHJvb3Q7XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgY29uc3QgZWwgPSBzaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiAmJiBlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmdldEF0dHJpYnV0ZShcInJvbGVcIikgPT09IFwibGlua1wiKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZWwuY2xpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcbiAgICAgICAgICAgIC8vIHNhZmFyaSB3aWxsIGZvcmNlIGl0c2VsZiBhcyB0aGUgYWN0aXZlIGFwcGxpY2F0aW9uIHdoZW4gYSBiYWNrZ3JvdW5kIHBhZ2UgdHJpZ2dlcnMgYW55IHNvcnQgb2YgYXV0b2ZvY3VzXG4gICAgICAgICAgICAvLyB0aGlzIGlzIGEgd29ya2Fyb3VuZCB0byBvbmx5IHNldCB0aGUgZGlhbG9nIHJvbGUgaWYgdGhlIGRvY3VtZW50IGhhcyBmb2N1c1xuICAgICAgICAgICAgc2V0Um9sZShkb2N1bWVudC5oYXNGb2N1cygpID8gXCJkaWFsb2dcIiA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICAgICAgc2hhZG93Um9vdC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVyKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBoYW5kbGVGb2N1cyk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBoYW5kbGVGb2N1cyk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgc2hhZG93Um9vdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgaGFuZGxlRm9jdXMpO1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGhhbmRsZUZvY3VzKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIGRpYWxvZ1xuICAgIF0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgIHJlZjogb25EaWFsb2csXG4gICAgICAgIFwiZGF0YS1uZXh0anMtZGlhbG9nXCI6IHRydWUsXG4gICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgcm9sZTogcm9sZSxcbiAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogcHJvcHNbXCJhcmlhLWxhYmVsbGVkYnlcIl0sXG4gICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBwcm9wc1tcImFyaWEtZGVzY3JpYmVkYnlcIl0sXG4gICAgICAgIFwiYXJpYS1tb2RhbFwiOiBcInRydWVcIixcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIFwiZGF0YS1uZXh0anMtZGlhbG9nLWJhbm5lclwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiYW5uZXItXCIgKyB0eXBlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgIF1cbiAgICB9KTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURpYWxvZy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiRGlhbG9nIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfdXNlb25jbGlja291dHNpZGUiLCJwYXJhbSIsImNoaWxkcmVuIiwidHlwZSIsIm9uQ2xvc2UiLCJwcm9wcyIsImRpYWxvZyIsInNldERpYWxvZyIsInVzZVN0YXRlIiwicm9sZSIsInNldFJvbGUiLCJkb2N1bWVudCIsImhhc0ZvY3VzIiwidW5kZWZpbmVkIiwib25EaWFsb2ciLCJ1c2VDYWxsYmFjayIsIm5vZGUiLCJ1c2VPbkNsaWNrT3V0c2lkZSIsInVzZUVmZmVjdCIsInJvb3QiLCJnZXRSb290Tm9kZSIsIlNoYWRvd1Jvb3QiLCJzaGFkb3dSb290IiwiaGFuZGxlciIsImUiLCJlbCIsImFjdGl2ZUVsZW1lbnQiLCJrZXkiLCJIVE1MRWxlbWVudCIsImdldEF0dHJpYnV0ZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiY2xpY2siLCJoYW5kbGVGb2N1cyIsImFkZEV2ZW50TGlzdGVuZXIiLCJ3aW5kb3ciLCJyZW1vdmVFdmVudExpc3RlbmVyIiwianN4cyIsInJlZiIsInRhYkluZGV4IiwianN4IiwiY2xhc3NOYW1lIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js": +/*!*************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js ***! + \*************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"DialogBody\", ({\n enumerable: true,\n get: function() {\n return DialogBody;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst DialogBody = function DialogBody(param) {\n let { children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-body\": true,\n className: className,\n children: children\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=DialogBody.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZ0JvZHkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDhDQUE2QztJQUN6Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDRCQUE0QkMsbUJBQU9BLENBQUMsb0hBQTBDO0FBQ3BGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLGdJQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gsMEJBQTBCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLHdHQUFPO0FBQ3hFLE1BQU1GLGFBQWEsU0FBU0EsV0FBV00sS0FBSztJQUN4QyxJQUFJLEVBQUVDLFFBQVEsRUFBRUMsU0FBUyxFQUFFLEdBQUdGO0lBQzlCLE9BQXFCLFdBQUgsR0FBSSxJQUFHSCxZQUFZTSxHQUFHLEVBQUUsT0FBTztRQUM3QywyQkFBMkI7UUFDM0JELFdBQVdBO1FBQ1hELFVBQVVBO0lBQ2Q7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPWCxRQUFRYyxPQUFPLEtBQUssY0FBZSxPQUFPZCxRQUFRYyxPQUFPLEtBQUssWUFBWWQsUUFBUWMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPZCxRQUFRYyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLakIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRYyxPQUFPLEVBQUUsY0FBYztRQUFFYixPQUFPO0lBQUs7SUFDbkVILE9BQU9rQixNQUFNLENBQUNoQixRQUFRYyxPQUFPLEVBQUVkO0lBQy9CaUIsT0FBT2pCLE9BQU8sR0FBR0EsUUFBUWMsT0FBTztBQUNsQyxFQUVBLHNDQUFzQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZ0JvZHkuanM/YTEwYSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRpYWxvZ0JvZHlcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIERpYWxvZ0JvZHk7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBEaWFsb2dCb2R5ID0gZnVuY3Rpb24gRGlhbG9nQm9keShwYXJhbSkge1xuICAgIGxldCB7IGNoaWxkcmVuLCBjbGFzc05hbWUgfSA9IHBhcmFtO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiZGl2XCIsIHtcbiAgICAgICAgXCJkYXRhLW5leHRqcy1kaWFsb2ctYm9keVwiOiB0cnVlLFxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1EaWFsb2dCb2R5LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJEaWFsb2dCb2R5IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJwYXJhbSIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwianN4IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js": +/*!****************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js ***! + \****************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"DialogContent\", ({\n enumerable: true,\n get: function() {\n return DialogContent;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst DialogContent = function DialogContent(param) {\n let { children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-content\": true,\n className: className,\n children: children\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=DialogContent.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZ0NvbnRlbnQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGlEQUFnRDtJQUM1Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDRCQUE0QkMsbUJBQU9BLENBQUMsb0hBQTBDO0FBQ3BGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLGdJQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gsMEJBQTBCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLHdHQUFPO0FBQ3hFLE1BQU1GLGdCQUFnQixTQUFTQSxjQUFjTSxLQUFLO0lBQzlDLElBQUksRUFBRUMsUUFBUSxFQUFFQyxTQUFTLEVBQUUsR0FBR0Y7SUFDOUIsT0FBcUIsV0FBSCxHQUFJLElBQUdILFlBQVlNLEdBQUcsRUFBRSxPQUFPO1FBQzdDLDhCQUE4QjtRQUM5QkQsV0FBV0E7UUFDWEQsVUFBVUE7SUFDZDtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9YLFFBQVFjLE9BQU8sS0FBSyxjQUFlLE9BQU9kLFFBQVFjLE9BQU8sS0FBSyxZQUFZZCxRQUFRYyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9kLFFBQVFjLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktqQixPQUFPQyxjQUFjLENBQUNDLFFBQVFjLE9BQU8sRUFBRSxjQUFjO1FBQUViLE9BQU87SUFBSztJQUNuRUgsT0FBT2tCLE1BQU0sQ0FBQ2hCLFFBQVFjLE9BQU8sRUFBRWQ7SUFDL0JpQixPQUFPakIsT0FBTyxHQUFHQSxRQUFRYyxPQUFPO0FBQ2xDLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9EaWFsb2cvRGlhbG9nQ29udGVudC5qcz85NTM2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGlhbG9nQ29udGVudFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRGlhbG9nQ29udGVudDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IERpYWxvZ0NvbnRlbnQgPSBmdW5jdGlvbiBEaWFsb2dDb250ZW50KHBhcmFtKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4sIGNsYXNzTmFtZSB9ID0gcGFyYW07XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJkaXZcIiwge1xuICAgICAgICBcImRhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XCI6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURpYWxvZ0NvbnRlbnQuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkRpYWxvZ0NvbnRlbnQiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsInBhcmFtIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJqc3giLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js ***! + \***************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"DialogHeader\", ({\n enumerable: true,\n get: function() {\n return DialogHeader;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst DialogHeader = function DialogHeader(param) {\n let { children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-header\": true,\n className: className,\n children: children\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=DialogHeader.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL0RpYWxvZ0hlYWRlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsZ0RBQStDO0lBQzNDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTUYsZUFBZSxTQUFTQSxhQUFhTSxLQUFLO0lBQzVDLElBQUksRUFBRUMsUUFBUSxFQUFFQyxTQUFTLEVBQUUsR0FBR0Y7SUFDOUIsT0FBcUIsV0FBSCxHQUFJLElBQUdILFlBQVlNLEdBQUcsRUFBRSxPQUFPO1FBQzdDLDZCQUE2QjtRQUM3QkQsV0FBV0E7UUFDWEQsVUFBVUE7SUFDZDtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9YLFFBQVFjLE9BQU8sS0FBSyxjQUFlLE9BQU9kLFFBQVFjLE9BQU8sS0FBSyxZQUFZZCxRQUFRYyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9kLFFBQVFjLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktqQixPQUFPQyxjQUFjLENBQUNDLFFBQVFjLE9BQU8sRUFBRSxjQUFjO1FBQUViLE9BQU87SUFBSztJQUNuRUgsT0FBT2tCLE1BQU0sQ0FBQ2hCLFFBQVFjLE9BQU8sRUFBRWQ7SUFDL0JpQixPQUFPakIsT0FBTyxHQUFHQSxRQUFRYyxPQUFPO0FBQ2xDLEVBRUEsd0NBQXdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9EaWFsb2cvRGlhbG9nSGVhZGVyLmpzP2ZiZWYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEaWFsb2dIZWFkZXJcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIERpYWxvZ0hlYWRlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IERpYWxvZ0hlYWRlciA9IGZ1bmN0aW9uIERpYWxvZ0hlYWRlcihwYXJhbSkge1xuICAgIGxldCB7IGNoaWxkcmVuLCBjbGFzc05hbWUgfSA9IHBhcmFtO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiZGl2XCIsIHtcbiAgICAgICAgXCJkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyXCI6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURpYWxvZ0hlYWRlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiRGlhbG9nSGVhZGVyIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJwYXJhbSIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwianN4IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js": +/*!********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js ***! + \********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Dialog: function() {\n return _Dialog.Dialog;\n },\n DialogBody: function() {\n return _DialogBody.DialogBody;\n },\n DialogContent: function() {\n return _DialogContent.DialogContent;\n },\n DialogHeader: function() {\n return _DialogHeader.DialogHeader;\n },\n styles: function() {\n return _styles.styles;\n }\n});\nconst _Dialog = __webpack_require__(/*! ./Dialog */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js\");\nconst _DialogBody = __webpack_require__(/*! ./DialogBody */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js\");\nconst _DialogContent = __webpack_require__(/*! ./DialogContent */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js\");\nconst _DialogHeader = __webpack_require__(/*! ./DialogHeader */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js\");\nconst _styles = __webpack_require__(/*! ./styles */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBTU47QUFDQSxTQUFTTSxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJWixPQUFPQyxjQUFjLENBQUNVLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUVIsU0FBUztJQUNiRyxRQUFRO1FBQ0osT0FBT1csUUFBUVgsTUFBTTtJQUN6QjtJQUNBQyxZQUFZO1FBQ1IsT0FBT1csWUFBWVgsVUFBVTtJQUNqQztJQUNBQyxlQUFlO1FBQ1gsT0FBT1csZUFBZVgsYUFBYTtJQUN2QztJQUNBQyxjQUFjO1FBQ1YsT0FBT1csY0FBY1gsWUFBWTtJQUNyQztJQUNBQyxRQUFRO1FBQ0osT0FBT1csUUFBUVgsTUFBTTtJQUN6QjtBQUNKO0FBQ0EsTUFBTU8sVUFBVUssbUJBQU9BLENBQUMseUhBQVU7QUFDbEMsTUFBTUosY0FBY0ksbUJBQU9BLENBQUMsaUlBQWM7QUFDMUMsTUFBTUgsaUJBQWlCRyxtQkFBT0EsQ0FBQyx1SUFBaUI7QUFDaEQsTUFBTUYsZ0JBQWdCRSxtQkFBT0EsQ0FBQyxxSUFBZ0I7QUFDOUMsTUFBTUQsVUFBVUMsbUJBQU9BLENBQUMseUhBQVU7QUFFbEMsSUFBSSxDQUFDLE9BQU9uQixRQUFRb0IsT0FBTyxLQUFLLGNBQWUsT0FBT3BCLFFBQVFvQixPQUFPLEtBQUssWUFBWXBCLFFBQVFvQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9wQixRQUFRb0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3ZCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW9CLE9BQU8sRUFBRSxjQUFjO1FBQUVuQixPQUFPO0lBQUs7SUFDbkVILE9BQU93QixNQUFNLENBQUN0QixRQUFRb0IsT0FBTyxFQUFFcEI7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUW9CLE9BQU87QUFDbEMsRUFFQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0RpYWxvZy9pbmRleC5qcz8yMzkzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgRGlhbG9nOiBudWxsLFxuICAgIERpYWxvZ0JvZHk6IG51bGwsXG4gICAgRGlhbG9nQ29udGVudDogbnVsbCxcbiAgICBEaWFsb2dIZWFkZXI6IG51bGwsXG4gICAgc3R5bGVzOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIERpYWxvZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfRGlhbG9nLkRpYWxvZztcbiAgICB9LFxuICAgIERpYWxvZ0JvZHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX0RpYWxvZ0JvZHkuRGlhbG9nQm9keTtcbiAgICB9LFxuICAgIERpYWxvZ0NvbnRlbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX0RpYWxvZ0NvbnRlbnQuRGlhbG9nQ29udGVudDtcbiAgICB9LFxuICAgIERpYWxvZ0hlYWRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfRGlhbG9nSGVhZGVyLkRpYWxvZ0hlYWRlcjtcbiAgICB9LFxuICAgIHN0eWxlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc3R5bGVzLnN0eWxlcztcbiAgICB9XG59KTtcbmNvbnN0IF9EaWFsb2cgPSByZXF1aXJlKFwiLi9EaWFsb2dcIik7XG5jb25zdCBfRGlhbG9nQm9keSA9IHJlcXVpcmUoXCIuL0RpYWxvZ0JvZHlcIik7XG5jb25zdCBfRGlhbG9nQ29udGVudCA9IHJlcXVpcmUoXCIuL0RpYWxvZ0NvbnRlbnRcIik7XG5jb25zdCBfRGlhbG9nSGVhZGVyID0gcmVxdWlyZShcIi4vRGlhbG9nSGVhZGVyXCIpO1xuY29uc3QgX3N0eWxlcyA9IHJlcXVpcmUoXCIuL3N0eWxlc1wiKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiRGlhbG9nIiwiRGlhbG9nQm9keSIsIkRpYWxvZ0NvbnRlbnQiLCJEaWFsb2dIZWFkZXIiLCJzdHlsZXMiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfRGlhbG9nIiwiX0RpYWxvZ0JvZHkiLCJfRGlhbG9nQ29udGVudCIsIl9EaWFsb2dIZWFkZXIiLCJfc3R5bGVzIiwicmVxdWlyZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js ***! + \*********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-dialog] {\\n display: flex;\\n flex-direction: column;\\n width: 100%;\\n margin-right: auto;\\n margin-left: auto;\\n outline: none;\\n background: white;\\n border-radius: var(--size-gap);\\n box-shadow: 0 var(--size-gap-half) var(--size-gap-double)\\n rgba(0, 0, 0, 0.25);\\n max-height: calc(100% - 56px);\\n overflow-y: hidden;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n max-height: calc(100% - 15px);\\n }\\n }\\n\\n @media (min-width: 576px) {\\n [data-nextjs-dialog] {\\n max-width: 540px;\\n box-shadow: 0 var(--size-gap) var(--size-gap-quad) rgba(0, 0, 0, 0.25);\\n }\\n }\\n\\n @media (min-width: 768px) {\\n [data-nextjs-dialog] {\\n max-width: 720px;\\n }\\n }\\n\\n @media (min-width: 992px) {\\n [data-nextjs-dialog] {\\n max-width: 960px;\\n }\\n }\\n\\n [data-nextjs-dialog-banner] {\\n position: relative;\\n }\\n [data-nextjs-dialog-banner].banner-warning {\\n border-color: var(--color-ansi-yellow);\\n }\\n [data-nextjs-dialog-banner].banner-error {\\n border-color: var(--color-ansi-red);\\n }\\n\\n [data-nextjs-dialog-banner]::after {\\n z-index: 2;\\n content: '';\\n position: absolute;\\n top: 0;\\n right: 0;\\n width: 100%;\\n /* banner width: */\\n border-top-width: var(--size-gap-half);\\n border-bottom-width: 0;\\n border-top-style: solid;\\n border-bottom-style: solid;\\n border-top-color: inherit;\\n border-bottom-color: transparent;\\n }\\n\\n [data-nextjs-dialog-content] {\\n overflow-y: auto;\\n border: none;\\n margin: 0;\\n /* calc(padding + banner width offset) */\\n padding: calc(var(--size-gap-double) + var(--size-gap-half))\\n var(--size-gap-double);\\n height: 100%;\\n display: flex;\\n flex-direction: column;\\n }\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-header] {\\n flex-shrink: 0;\\n margin-bottom: var(--size-gap-double);\\n }\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-body] {\\n position: relative;\\n flex: 1 1 auto;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL3N0eWxlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMENBQXlDO0lBQ3JDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsaUNBQWlDQyxtQkFBT0EsQ0FBQyw4SEFBK0M7QUFDOUYsTUFBTUMsZ0JBQWdCRCxtQkFBT0EsQ0FBQyx5SUFBNkI7QUFDM0QsU0FBU0U7SUFDTCxNQUFNQyxPQUFPSiwrQkFBK0JLLENBQUMsQ0FBQztRQUMxQztLQUNIO0lBQ0RGLGtCQUFrQjtRQUNkLE9BQU9DO0lBQ1g7SUFDQSxPQUFPQTtBQUNYO0FBQ0EsTUFBTUwsU0FBUyxDQUFDLEdBQUdHLGNBQWNJLElBQUksRUFBRUg7QUFFdkMsSUFBSSxDQUFDLE9BQU9SLFFBQVFZLE9BQU8sS0FBSyxjQUFlLE9BQU9aLFFBQVFZLE9BQU8sS0FBSyxZQUFZWixRQUFRWSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9aLFFBQVFZLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktmLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUVksT0FBTyxFQUFFLGNBQWM7UUFBRVgsT0FBTztJQUFLO0lBQ25FSCxPQUFPZ0IsTUFBTSxDQUFDZCxRQUFRWSxPQUFPLEVBQUVaO0lBQy9CZSxPQUFPZixPQUFPLEdBQUdBLFFBQVFZLE9BQU87QUFDbEMsRUFFQSxrQ0FBa0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0RpYWxvZy9zdHlsZXMuanM/NjhiOSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0eWxlc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgIH1cbn0pO1xuY29uc3QgX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZVwiKTtcbmNvbnN0IF9ub29wdGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9ub29wLXRlbXBsYXRlXCIpO1xuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuXyhbXG4gICAgICAgIFwiXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBvdXRsaW5lOiBub25lO1xcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2l6ZS1nYXApO1xcbiAgICBib3gtc2hhZG93OiAwIHZhcigtLXNpemUtZ2FwLWhhbGYpIHZhcigtLXNpemUtZ2FwLWRvdWJsZSlcXG4gICAgICByZ2JhKDAsIDAsIDAsIDAuMjUpO1xcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA1NnB4KTtcXG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xcbiAgfVxcblxcbiAgQG1lZGlhIChtYXgtaGVpZ2h0OiA4MTJweCkge1xcbiAgICBbZGF0YS1uZXh0anMtZGlhbG9nLW92ZXJsYXldIHtcXG4gICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSAxNXB4KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ddIHtcXG4gICAgICBtYXgtd2lkdGg6IDU0MHB4O1xcbiAgICAgIGJveC1zaGFkb3c6IDAgdmFyKC0tc2l6ZS1nYXApIHZhcigtLXNpemUtZ2FwLXF1YWQpIHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgICBbZGF0YS1uZXh0anMtZGlhbG9nXSB7XFxuICAgICAgbWF4LXdpZHRoOiA3MjBweDtcXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ddIHtcXG4gICAgICBtYXgtd2lkdGg6IDk2MHB4O1xcbiAgICB9XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhbm5lcl0ge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhbm5lcl0uYmFubmVyLXdhcm5pbmcge1xcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWFuc2kteWVsbG93KTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctYmFubmVyXS5iYW5uZXItZXJyb3Ige1xcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktcmVkKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctYmFubmVyXTo6YWZ0ZXIge1xcbiAgICB6LWluZGV4OiAyO1xcbiAgICBjb250ZW50OiAnJztcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDA7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgLyogYmFubmVyIHdpZHRoOiAqL1xcbiAgICBib3JkZXItdG9wLXdpZHRoOiB2YXIoLS1zaXplLWdhcC1oYWxmKTtcXG4gICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcXG4gICAgYm9yZGVyLXRvcC1zdHlsZTogc29saWQ7XFxuICAgIGJvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO1xcbiAgICBib3JkZXItdG9wLWNvbG9yOiBpbmhlcml0O1xcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctY29udGVudF0ge1xcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgLyogY2FsYyhwYWRkaW5nICsgYmFubmVyIHdpZHRoIG9mZnNldCkgKi9cXG4gICAgcGFkZGluZzogY2FsYyh2YXIoLS1zaXplLWdhcC1kb3VibGUpICsgdmFyKC0tc2l6ZS1nYXAtaGFsZikpXFxuICAgICAgdmFyKC0tc2l6ZS1nYXAtZG91YmxlKTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XSA+IFtkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyXSB7XFxuICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLWdhcC1kb3VibGUpO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XSA+IFtkYXRhLW5leHRqcy1kaWFsb2ctYm9keV0ge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGZsZXg6IDEgMSBhdXRvO1xcbiAgfVxcblwiXG4gICAgXSk7XG4gICAgX3RlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIGRhdGE7XG59XG5jb25zdCBzdHlsZXMgPSAoMCwgX25vb3B0ZW1wbGF0ZS5ub29wKShfdGVtcGxhdGVPYmplY3QoKSk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic3R5bGVzIiwiX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlIiwicmVxdWlyZSIsIl9ub29wdGVtcGxhdGUiLCJfdGVtcGxhdGVPYmplY3QiLCJkYXRhIiwiXyIsIm5vb3AiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js": +/*!***************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js ***! + \***************************************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"LeftRightDialogHeader\", ({\n enumerable: true,\n get: function() {\n return LeftRightDialogHeader;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _CloseIcon = __webpack_require__(/*! ../../icons/CloseIcon */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js\");\nconst LeftRightDialogHeader = function LeftRightDialogHeader(param) {\n let { children, className, previous, next, close } = param;\n const buttonLeft = _react.useRef(null);\n const buttonRight = _react.useRef(null);\n const buttonClose = _react.useRef(null);\n const [nav, setNav] = _react.useState(null);\n const onNav = _react.useCallback((el)=>{\n setNav(el);\n }, []);\n _react.useEffect(()=>{\n if (nav == null) {\n return;\n }\n const root = nav.getRootNode();\n const d = self.document;\n function handler(e) {\n if (e.key === \"ArrowLeft\") {\n e.stopPropagation();\n if (buttonLeft.current) {\n buttonLeft.current.focus();\n }\n previous && previous();\n } else if (e.key === \"ArrowRight\") {\n e.stopPropagation();\n if (buttonRight.current) {\n buttonRight.current.focus();\n }\n next && next();\n } else if (e.key === \"Escape\") {\n e.stopPropagation();\n if (root instanceof ShadowRoot) {\n const a = root.activeElement;\n if (a && a !== buttonClose.current && a instanceof HTMLElement) {\n a.blur();\n return;\n }\n }\n if (close) {\n close();\n }\n }\n }\n root.addEventListener(\"keydown\", handler);\n if (root !== d) {\n d.addEventListener(\"keydown\", handler);\n }\n return function() {\n root.removeEventListener(\"keydown\", handler);\n if (root !== d) {\n d.removeEventListener(\"keydown\", handler);\n }\n };\n }, [\n close,\n nav,\n next,\n previous\n ]);\n // Unlock focus for browsers like Firefox, that break all user focus if the\n // currently focused item becomes disabled.\n _react.useEffect(()=>{\n if (nav == null) {\n return;\n }\n const root = nav.getRootNode();\n // Always true, but we do this for TypeScript:\n if (root instanceof ShadowRoot) {\n const a = root.activeElement;\n if (previous == null) {\n if (buttonLeft.current && a === buttonLeft.current) {\n buttonLeft.current.blur();\n }\n } else if (next == null) {\n if (buttonRight.current && a === buttonRight.current) {\n buttonRight.current.blur();\n }\n }\n }\n }, [\n nav,\n next,\n previous\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-dialog-left-right\": true,\n className: className,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"nav\", {\n ref: onNav,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n ref: buttonLeft,\n type: \"button\",\n disabled: previous == null ? true : undefined,\n \"aria-disabled\": previous == null ? true : undefined,\n onClick: previous != null ? previous : undefined,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: \"previous\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M6.99996 1.16666L1.16663 6.99999L6.99996 12.8333M12.8333 6.99999H1.99996H12.8333Z\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n ref: buttonRight,\n type: \"button\",\n disabled: next == null ? true : undefined,\n \"aria-disabled\": next == null ? true : undefined,\n onClick: next != null ? next : undefined,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: \"next\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M6.99996 1.16666L12.8333 6.99999L6.99996 12.8333M1.16663 6.99999H12H1.16663Z\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n })\n }),\n \"\\xa0\",\n children\n ]\n }),\n close ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n \"data-nextjs-errors-dialog-left-right-close-button\": true,\n ref: buttonClose,\n type: \"button\",\n onClick: close,\n \"aria-label\": \"Close\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_CloseIcon.CloseIcon, {})\n })\n }) : null\n ]\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=LeftRightDialogHeader.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvTGVmdFJpZ2h0RGlhbG9nSGVhZGVyL0xlZnRSaWdodERpYWxvZ0hlYWRlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgseURBQXdEO0lBQ3BESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTUksYUFBYUosbUJBQU9BLENBQUMsNkhBQXVCO0FBQ2xELE1BQU1GLHdCQUF3QixTQUFTQSxzQkFBc0JPLEtBQUs7SUFDOUQsSUFBSSxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHTDtJQUNyRCxNQUFNTSxhQUFhVCxPQUFPVSxNQUFNLENBQUM7SUFDakMsTUFBTUMsY0FBY1gsT0FBT1UsTUFBTSxDQUFDO0lBQ2xDLE1BQU1FLGNBQWNaLE9BQU9VLE1BQU0sQ0FBQztJQUNsQyxNQUFNLENBQUNHLEtBQUtDLE9BQU8sR0FBR2QsT0FBT2UsUUFBUSxDQUFDO0lBQ3RDLE1BQU1DLFFBQVFoQixPQUFPaUIsV0FBVyxDQUFDLENBQUNDO1FBQzlCSixPQUFPSTtJQUNYLEdBQUcsRUFBRTtJQUNMbEIsT0FBT21CLFNBQVMsQ0FBQztRQUNiLElBQUlOLE9BQU8sTUFBTTtZQUNiO1FBQ0o7UUFDQSxNQUFNTyxPQUFPUCxJQUFJUSxXQUFXO1FBQzVCLE1BQU1DLElBQUlDLEtBQUtDLFFBQVE7UUFDdkIsU0FBU0MsUUFBUUMsQ0FBQztZQUNkLElBQUlBLEVBQUVDLEdBQUcsS0FBSyxhQUFhO2dCQUN2QkQsRUFBRUUsZUFBZTtnQkFDakIsSUFBSW5CLFdBQVdvQixPQUFPLEVBQUU7b0JBQ3BCcEIsV0FBV29CLE9BQU8sQ0FBQ0MsS0FBSztnQkFDNUI7Z0JBQ0F4QixZQUFZQTtZQUNoQixPQUFPLElBQUlvQixFQUFFQyxHQUFHLEtBQUssY0FBYztnQkFDL0JELEVBQUVFLGVBQWU7Z0JBQ2pCLElBQUlqQixZQUFZa0IsT0FBTyxFQUFFO29CQUNyQmxCLFlBQVlrQixPQUFPLENBQUNDLEtBQUs7Z0JBQzdCO2dCQUNBdkIsUUFBUUE7WUFDWixPQUFPLElBQUltQixFQUFFQyxHQUFHLEtBQUssVUFBVTtnQkFDM0JELEVBQUVFLGVBQWU7Z0JBQ2pCLElBQUlSLGdCQUFnQlcsWUFBWTtvQkFDNUIsTUFBTUMsSUFBSVosS0FBS2EsYUFBYTtvQkFDNUIsSUFBSUQsS0FBS0EsTUFBTXBCLFlBQVlpQixPQUFPLElBQUlHLGFBQWFFLGFBQWE7d0JBQzVERixFQUFFRyxJQUFJO3dCQUNOO29CQUNKO2dCQUNKO2dCQUNBLElBQUkzQixPQUFPO29CQUNQQTtnQkFDSjtZQUNKO1FBQ0o7UUFDQVksS0FBS2dCLGdCQUFnQixDQUFDLFdBQVdYO1FBQ2pDLElBQUlMLFNBQVNFLEdBQUc7WUFDWkEsRUFBRWMsZ0JBQWdCLENBQUMsV0FBV1g7UUFDbEM7UUFDQSxPQUFPO1lBQ0hMLEtBQUtpQixtQkFBbUIsQ0FBQyxXQUFXWjtZQUNwQyxJQUFJTCxTQUFTRSxHQUFHO2dCQUNaQSxFQUFFZSxtQkFBbUIsQ0FBQyxXQUFXWjtZQUNyQztRQUNKO0lBQ0osR0FBRztRQUNDakI7UUFDQUs7UUFDQU47UUFDQUQ7S0FDSDtJQUNELDJFQUEyRTtJQUMzRSwyQ0FBMkM7SUFDM0NOLE9BQU9tQixTQUFTLENBQUM7UUFDYixJQUFJTixPQUFPLE1BQU07WUFDYjtRQUNKO1FBQ0EsTUFBTU8sT0FBT1AsSUFBSVEsV0FBVztRQUM1Qiw4Q0FBOEM7UUFDOUMsSUFBSUQsZ0JBQWdCVyxZQUFZO1lBQzVCLE1BQU1DLElBQUlaLEtBQUthLGFBQWE7WUFDNUIsSUFBSTNCLFlBQVksTUFBTTtnQkFDbEIsSUFBSUcsV0FBV29CLE9BQU8sSUFBSUcsTUFBTXZCLFdBQVdvQixPQUFPLEVBQUU7b0JBQ2hEcEIsV0FBV29CLE9BQU8sQ0FBQ00sSUFBSTtnQkFDM0I7WUFDSixPQUFPLElBQUk1QixRQUFRLE1BQU07Z0JBQ3JCLElBQUlJLFlBQVlrQixPQUFPLElBQUlHLE1BQU1yQixZQUFZa0IsT0FBTyxFQUFFO29CQUNsRGxCLFlBQVlrQixPQUFPLENBQUNNLElBQUk7Z0JBQzVCO1lBQ0o7UUFDSjtJQUNKLEdBQUc7UUFDQ3RCO1FBQ0FOO1FBQ0FEO0tBQ0g7SUFDRCxPQUFxQixXQUFILEdBQUksSUFBR1AsWUFBWXVDLElBQUksRUFBRSxPQUFPO1FBQzlDLGlDQUFpQztRQUNqQ2pDLFdBQVdBO1FBQ1hELFVBQVU7WUFDTixXQUFXLEdBQUksSUFBR0wsWUFBWXVDLElBQUksRUFBRSxPQUFPO2dCQUN2Q0MsS0FBS3ZCO2dCQUNMWixVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHTCxZQUFZeUMsR0FBRyxFQUFFLFVBQVU7d0JBQ3pDRCxLQUFLOUI7d0JBQ0xnQyxNQUFNO3dCQUNOQyxVQUFVcEMsWUFBWSxPQUFPLE9BQU9xQzt3QkFDcEMsaUJBQWlCckMsWUFBWSxPQUFPLE9BQU9xQzt3QkFDM0NDLFNBQVN0QyxZQUFZLE9BQU9BLFdBQVdxQzt3QkFDdkN2QyxVQUF3QixXQUFILEdBQUksSUFBR0wsWUFBWXVDLElBQUksRUFBRSxPQUFPOzRCQUNqRE8sU0FBUzs0QkFDVEMsTUFBTTs0QkFDTkMsT0FBTzs0QkFDUDNDLFVBQVU7Z0NBQ04sV0FBVyxHQUFJLElBQUdMLFlBQVl5QyxHQUFHLEVBQUUsU0FBUztvQ0FDeENwQyxVQUFVO2dDQUNkO2dDQUNBLFdBQVcsR0FBSSxJQUFHTCxZQUFZeUMsR0FBRyxFQUFFLFFBQVE7b0NBQ3ZDbEIsR0FBRztvQ0FDSDBCLFFBQVE7b0NBQ1JDLGFBQWE7b0NBQ2JDLGVBQWU7b0NBQ2ZDLGdCQUFnQjtnQ0FDcEI7NkJBQ0g7d0JBQ0w7b0JBQ0o7b0JBQ0EsV0FBVyxHQUFJLElBQUdwRCxZQUFZeUMsR0FBRyxFQUFFLFVBQVU7d0JBQ3pDRCxLQUFLNUI7d0JBQ0w4QixNQUFNO3dCQUNOQyxVQUFVbkMsUUFBUSxPQUFPLE9BQU9vQzt3QkFDaEMsaUJBQWlCcEMsUUFBUSxPQUFPLE9BQU9vQzt3QkFDdkNDLFNBQVNyQyxRQUFRLE9BQU9BLE9BQU9vQzt3QkFDL0J2QyxVQUF3QixXQUFILEdBQUksSUFBR0wsWUFBWXVDLElBQUksRUFBRSxPQUFPOzRCQUNqRE8sU0FBUzs0QkFDVEMsTUFBTTs0QkFDTkMsT0FBTzs0QkFDUDNDLFVBQVU7Z0NBQ04sV0FBVyxHQUFJLElBQUdMLFlBQVl5QyxHQUFHLEVBQUUsU0FBUztvQ0FDeENwQyxVQUFVO2dDQUNkO2dDQUNBLFdBQVcsR0FBSSxJQUFHTCxZQUFZeUMsR0FBRyxFQUFFLFFBQVE7b0NBQ3ZDbEIsR0FBRztvQ0FDSDBCLFFBQVE7b0NBQ1JDLGFBQWE7b0NBQ2JDLGVBQWU7b0NBQ2ZDLGdCQUFnQjtnQ0FDcEI7NkJBQ0g7d0JBQ0w7b0JBQ0o7b0JBQ0E7b0JBQ0EvQztpQkFDSDtZQUNMO1lBQ0FJLFFBQXNCLFdBQUgsR0FBSSxJQUFHVCxZQUFZeUMsR0FBRyxFQUFFLFVBQVU7Z0JBQ2pELHFEQUFxRDtnQkFDckRELEtBQUszQjtnQkFDTDZCLE1BQU07Z0JBQ05HLFNBQVNwQztnQkFDVCxjQUFjO2dCQUNkSixVQUF3QixXQUFILEdBQUksSUFBR0wsWUFBWXlDLEdBQUcsRUFBRSxRQUFRO29CQUNqRCxlQUFlO29CQUNmcEMsVUFBd0IsV0FBSCxHQUFJLElBQUdMLFlBQVl5QyxHQUFHLEVBQUV0QyxXQUFXa0QsU0FBUyxFQUFFLENBQUM7Z0JBQ3hFO1lBQ0osS0FBSztTQUNSO0lBQ0w7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPNUQsUUFBUTZELE9BQU8sS0FBSyxjQUFlLE9BQU83RCxRQUFRNkQsT0FBTyxLQUFLLFlBQVk3RCxRQUFRNkQsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPN0QsUUFBUTZELE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktoRSxPQUFPQyxjQUFjLENBQUNDLFFBQVE2RCxPQUFPLEVBQUUsY0FBYztRQUFFNUQsT0FBTztJQUFLO0lBQ25FSCxPQUFPaUUsTUFBTSxDQUFDL0QsUUFBUTZELE9BQU8sRUFBRTdEO0lBQy9CZ0UsT0FBT2hFLE9BQU8sR0FBR0EsUUFBUTZELE9BQU87QUFDbEMsRUFFQSxpREFBaUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0xlZnRSaWdodERpYWxvZ0hlYWRlci9MZWZ0UmlnaHREaWFsb2dIZWFkZXIuanM/YjMwNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxlZnRSaWdodERpYWxvZ0hlYWRlclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTGVmdFJpZ2h0RGlhbG9nSGVhZGVyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX0Nsb3NlSWNvbiA9IHJlcXVpcmUoXCIuLi8uLi9pY29ucy9DbG9zZUljb25cIik7XG5jb25zdCBMZWZ0UmlnaHREaWFsb2dIZWFkZXIgPSBmdW5jdGlvbiBMZWZ0UmlnaHREaWFsb2dIZWFkZXIocGFyYW0pIHtcbiAgICBsZXQgeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBwcmV2aW91cywgbmV4dCwgY2xvc2UgfSA9IHBhcmFtO1xuICAgIGNvbnN0IGJ1dHRvbkxlZnQgPSBfcmVhY3QudXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGJ1dHRvblJpZ2h0ID0gX3JlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBidXR0b25DbG9zZSA9IF9yZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW25hdiwgc2V0TmF2XSA9IF9yZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBvbk5hdiA9IF9yZWFjdC51c2VDYWxsYmFjaygoZWwpPT57XG4gICAgICAgIHNldE5hdihlbCk7XG4gICAgfSwgW10pO1xuICAgIF9yZWFjdC51c2VFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKG5hdiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm9vdCA9IG5hdi5nZXRSb290Tm9kZSgpO1xuICAgICAgICBjb25zdCBkID0gc2VsZi5kb2N1bWVudDtcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlcihlKSB7XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiQXJyb3dMZWZ0XCIpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmIChidXR0b25MZWZ0LmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uTGVmdC5jdXJyZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByZXZpb3VzICYmIHByZXZpb3VzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBcIkFycm93UmlnaHRcIikge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKGJ1dHRvblJpZ2h0LmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uUmlnaHQuY3VycmVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0ICYmIG5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmIChyb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhID0gcm9vdC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSAmJiBhICE9PSBidXR0b25DbG9zZS5jdXJyZW50ICYmIGEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5ibHVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlcik7XG4gICAgICAgIGlmIChyb290ICE9PSBkKSB7XG4gICAgICAgICAgICBkLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlcik7XG4gICAgICAgICAgICBpZiAocm9vdCAhPT0gZCkge1xuICAgICAgICAgICAgICAgIGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBjbG9zZSxcbiAgICAgICAgbmF2LFxuICAgICAgICBuZXh0LFxuICAgICAgICBwcmV2aW91c1xuICAgIF0pO1xuICAgIC8vIFVubG9jayBmb2N1cyBmb3IgYnJvd3NlcnMgbGlrZSBGaXJlZm94LCB0aGF0IGJyZWFrIGFsbCB1c2VyIGZvY3VzIGlmIHRoZVxuICAgIC8vIGN1cnJlbnRseSBmb2N1c2VkIGl0ZW0gYmVjb21lcyBkaXNhYmxlZC5cbiAgICBfcmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmIChuYXYgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3QgPSBuYXYuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgLy8gQWx3YXlzIHRydWUsIGJ1dCB3ZSBkbyB0aGlzIGZvciBUeXBlU2NyaXB0OlxuICAgICAgICBpZiAocm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSByb290LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocHJldmlvdXMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChidXR0b25MZWZ0LmN1cnJlbnQgJiYgYSA9PT0gYnV0dG9uTGVmdC5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkxlZnQuY3VycmVudC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoYnV0dG9uUmlnaHQuY3VycmVudCAmJiBhID09PSBidXR0b25SaWdodC5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvblJpZ2h0LmN1cnJlbnQuYmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgbmF2LFxuICAgICAgICBuZXh0LFxuICAgICAgICBwcmV2aW91c1xuICAgIF0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgIFwiZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRcIjogdHJ1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcIm5hdlwiLCB7XG4gICAgICAgICAgICAgICAgcmVmOiBvbk5hdixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogYnV0dG9uTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogcHJldmlvdXMgPT0gbnVsbCA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogcHJldmlvdXMgPT0gbnVsbCA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBwcmV2aW91cyAhPSBudWxsID8gcHJldmlvdXMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDE0IDE0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwidGl0bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwicHJldmlvdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNNi45OTk5NiAxLjE2NjY2TDEuMTY2NjMgNi45OTk5OUw2Ljk5OTk2IDEyLjgzMzNNMTIuODMzMyA2Ljk5OTk5SDEuOTk5OTZIMTIuODMzM1pcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWY6IGJ1dHRvblJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBuZXh0ID09IG51bGwgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IG5leHQgPT0gbnVsbCA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBuZXh0ICE9IG51bGwgPyBuZXh0IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNCAxNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInRpdGxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIm5leHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNNi45OTk5NiAxLjE2NjY2TDEyLjgzMzMgNi45OTk5OUw2Ljk5OTk2IDEyLjgzMzNNMS4xNjY2MyA2Ljk5OTk5SDEySDEuMTY2NjNaXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIFwiXFx4YTBcIixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNsb3NlID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgXCJkYXRhLW5leHRqcy1lcnJvcnMtZGlhbG9nLWxlZnQtcmlnaHQtY2xvc2UtYnV0dG9uXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVmOiBidXR0b25DbG9zZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IGNsb3NlLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBcIkNsb3NlXCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0Nsb3NlSWNvbi5DbG9zZUljb24sIHt9KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KSA6IG51bGxcbiAgICAgICAgXVxuICAgIH0pO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TGVmdFJpZ2h0RGlhbG9nSGVhZGVyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJMZWZ0UmlnaHREaWFsb2dIZWFkZXIiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9DbG9zZUljb24iLCJwYXJhbSIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwicHJldmlvdXMiLCJuZXh0IiwiY2xvc2UiLCJidXR0b25MZWZ0IiwidXNlUmVmIiwiYnV0dG9uUmlnaHQiLCJidXR0b25DbG9zZSIsIm5hdiIsInNldE5hdiIsInVzZVN0YXRlIiwib25OYXYiLCJ1c2VDYWxsYmFjayIsImVsIiwidXNlRWZmZWN0Iiwicm9vdCIsImdldFJvb3ROb2RlIiwiZCIsInNlbGYiLCJkb2N1bWVudCIsImhhbmRsZXIiLCJlIiwia2V5Iiwic3RvcFByb3BhZ2F0aW9uIiwiY3VycmVudCIsImZvY3VzIiwiU2hhZG93Um9vdCIsImEiLCJhY3RpdmVFbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJibHVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJqc3hzIiwicmVmIiwianN4IiwidHlwZSIsImRpc2FibGVkIiwidW5kZWZpbmVkIiwib25DbGljayIsInZpZXdCb3giLCJmaWxsIiwieG1sbnMiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsIkNsb3NlSWNvbiIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js": +/*!***********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js ***! + \***********************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n LeftRightDialogHeader: function() {\n return _LeftRightDialogHeader.LeftRightDialogHeader;\n },\n styles: function() {\n return _styles.styles;\n }\n});\nconst _LeftRightDialogHeader = __webpack_require__(/*! ./LeftRightDialogHeader */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js\");\nconst _styles = __webpack_require__(/*! ./styles */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvTGVmdFJpZ2h0RGlhbG9nSGVhZGVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyx1QkFBdUI7UUFDbkIsT0FBT1EsdUJBQXVCUixxQkFBcUI7SUFDdkQ7SUFDQUMsUUFBUTtRQUNKLE9BQU9RLFFBQVFSLE1BQU07SUFDekI7QUFDSjtBQUNBLE1BQU1PLHlCQUF5QkUsbUJBQU9BLENBQUMsc0tBQXlCO0FBQ2hFLE1BQU1ELFVBQVVDLG1CQUFPQSxDQUFDLHdJQUFVO0FBRWxDLElBQUksQ0FBQyxPQUFPYixRQUFRYyxPQUFPLEtBQUssY0FBZSxPQUFPZCxRQUFRYyxPQUFPLEtBQUssWUFBWWQsUUFBUWMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPZCxRQUFRYyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLakIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRYyxPQUFPLEVBQUUsY0FBYztRQUFFYixPQUFPO0lBQUs7SUFDbkVILE9BQU9rQixNQUFNLENBQUNoQixRQUFRYyxPQUFPLEVBQUVkO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVFjLE9BQU87QUFDbEMsRUFFQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0xlZnRSaWdodERpYWxvZ0hlYWRlci9pbmRleC5qcz8yYWMyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgTGVmdFJpZ2h0RGlhbG9nSGVhZGVyOiBudWxsLFxuICAgIHN0eWxlczogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBMZWZ0UmlnaHREaWFsb2dIZWFkZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX0xlZnRSaWdodERpYWxvZ0hlYWRlci5MZWZ0UmlnaHREaWFsb2dIZWFkZXI7XG4gICAgfSxcbiAgICBzdHlsZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3N0eWxlcy5zdHlsZXM7XG4gICAgfVxufSk7XG5jb25zdCBfTGVmdFJpZ2h0RGlhbG9nSGVhZGVyID0gcmVxdWlyZShcIi4vTGVmdFJpZ2h0RGlhbG9nSGVhZGVyXCIpO1xuY29uc3QgX3N0eWxlcyA9IHJlcXVpcmUoXCIuL3N0eWxlc1wiKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiTGVmdFJpZ2h0RGlhbG9nSGVhZGVyIiwic3R5bGVzIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX0xlZnRSaWdodERpYWxvZ0hlYWRlciIsIl9zdHlsZXMiLCJyZXF1aXJlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js": +/*!************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js ***! + \************************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-dialog-left-right] {\\n display: flex;\\n flex-direction: row;\\n align-content: center;\\n align-items: center;\\n justify-content: space-between;\\n }\\n [data-nextjs-dialog-left-right] > nav {\\n flex: 1;\\n display: flex;\\n align-items: center;\\n margin-right: var(--size-gap);\\n }\\n [data-nextjs-dialog-left-right] > nav > button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n\\n width: calc(var(--size-gap-double) + var(--size-gap));\\n height: calc(var(--size-gap-double) + var(--size-gap));\\n font-size: 0;\\n border: none;\\n background-color: rgba(255, 85, 85, 0.1);\\n color: var(--color-ansi-red);\\n cursor: pointer;\\n transition: background-color 0.25s ease;\\n }\\n [data-nextjs-dialog-left-right] > nav > button > svg {\\n width: auto;\\n height: calc(var(--size-gap) + var(--size-gap-half));\\n }\\n [data-nextjs-dialog-left-right] > nav > button:hover {\\n background-color: rgba(255, 85, 85, 0.2);\\n }\\n [data-nextjs-dialog-left-right] > nav > button:disabled {\\n background-color: rgba(255, 85, 85, 0.1);\\n color: rgba(255, 85, 85, 0.4);\\n cursor: not-allowed;\\n }\\n\\n [data-nextjs-dialog-left-right] > nav > button:first-of-type {\\n border-radius: var(--size-gap-half) 0 0 var(--size-gap-half);\\n margin-right: 1px;\\n }\\n [data-nextjs-dialog-left-right] > nav > button:last-of-type {\\n border-radius: 0 var(--size-gap-half) var(--size-gap-half) 0;\\n }\\n\\n [data-nextjs-dialog-left-right] > button:last-of-type {\\n border: 0;\\n padding: 0;\\n\\n background-color: transparent;\\n appearance: none;\\n\\n opacity: 0.4;\\n transition: opacity 0.25s ease;\\n }\\n [data-nextjs-dialog-left-right] > button:last-of-type:hover {\\n opacity: 0.7;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvTGVmdFJpZ2h0RGlhbG9nSGVhZGVyL3N0eWxlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMENBQXlDO0lBQ3JDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsaUNBQWlDQyxtQkFBT0EsQ0FBQyw4SEFBK0M7QUFDOUYsTUFBTUMsZ0JBQWdCRCxtQkFBT0EsQ0FBQyx5SUFBNkI7QUFDM0QsU0FBU0U7SUFDTCxNQUFNQyxPQUFPSiwrQkFBK0JLLENBQUMsQ0FBQztRQUMxQztLQUNIO0lBQ0RGLGtCQUFrQjtRQUNkLE9BQU9DO0lBQ1g7SUFDQSxPQUFPQTtBQUNYO0FBQ0EsTUFBTUwsU0FBUyxDQUFDLEdBQUdHLGNBQWNJLElBQUksRUFBRUg7QUFFdkMsSUFBSSxDQUFDLE9BQU9SLFFBQVFZLE9BQU8sS0FBSyxjQUFlLE9BQU9aLFFBQVFZLE9BQU8sS0FBSyxZQUFZWixRQUFRWSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9aLFFBQVFZLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktmLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUVksT0FBTyxFQUFFLGNBQWM7UUFBRVgsT0FBTztJQUFLO0lBQ25FSCxPQUFPZ0IsTUFBTSxDQUFDZCxRQUFRWSxPQUFPLEVBQUVaO0lBQy9CZSxPQUFPZixPQUFPLEdBQUdBLFFBQVFZLE9BQU87QUFDbEMsRUFFQSxrQ0FBa0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0xlZnRSaWdodERpYWxvZ0hlYWRlci9zdHlsZXMuanM/ZGI3MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0eWxlc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgIH1cbn0pO1xuY29uc3QgX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZVwiKTtcbmNvbnN0IF9ub29wdGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9ub29wLXRlbXBsYXRlXCIpO1xuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuXyhbXG4gICAgICAgIFwiXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAgYWxpZ24tY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICB9XFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRdID4gbmF2IHtcXG4gICAgZmxleDogMTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLWdhcCk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRdID4gbmF2ID4gYnV0dG9uIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcbiAgICB3aWR0aDogY2FsYyh2YXIoLS1zaXplLWdhcC1kb3VibGUpICsgdmFyKC0tc2l6ZS1nYXApKTtcXG4gICAgaGVpZ2h0OiBjYWxjKHZhcigtLXNpemUtZ2FwLWRvdWJsZSkgKyB2YXIoLS1zaXplLWdhcCkpO1xcbiAgICBmb250LXNpemU6IDA7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDg1LCA4NSwgMC4xKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktcmVkKTtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMjVzIGVhc2U7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRdID4gbmF2ID4gYnV0dG9uID4gc3ZnIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIGhlaWdodDogY2FsYyh2YXIoLS1zaXplLWdhcCkgKyB2YXIoLS1zaXplLWdhcC1oYWxmKSk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRdID4gbmF2ID4gYnV0dG9uOmhvdmVyIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDg1LCA4NSwgMC4yKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBuYXYgPiBidXR0b246ZGlzYWJsZWQge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgODUsIDg1LCAwLjEpO1xcbiAgICBjb2xvcjogcmdiYSgyNTUsIDg1LCA4NSwgMC40KTtcXG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBuYXYgPiBidXR0b246Zmlyc3Qtb2YtdHlwZSB7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXNpemUtZ2FwLWhhbGYpIDAgMCB2YXIoLS1zaXplLWdhcC1oYWxmKTtcXG4gICAgbWFyZ2luLXJpZ2h0OiAxcHg7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRdID4gbmF2ID4gYnV0dG9uOmxhc3Qtb2YtdHlwZSB7XFxuICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tc2l6ZS1nYXAtaGFsZikgdmFyKC0tc2l6ZS1nYXAtaGFsZikgMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBidXR0b246bGFzdC1vZi10eXBlIHtcXG4gICAgYm9yZGVyOiAwO1xcbiAgICBwYWRkaW5nOiAwO1xcblxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgYXBwZWFyYW5jZTogbm9uZTtcXG5cXG4gICAgb3BhY2l0eTogMC40O1xcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzIGVhc2U7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRdID4gYnV0dG9uOmxhc3Qtb2YtdHlwZTpob3ZlciB7XFxuICAgIG9wYWNpdHk6IDAuNztcXG4gIH1cXG5cIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuY29uc3Qgc3R5bGVzID0gKDAsIF9ub29wdGVtcGxhdGUubm9vcCkoX3RlbXBsYXRlT2JqZWN0KCkpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHlsZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInN0eWxlcyIsIl90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSIsInJlcXVpcmUiLCJfbm9vcHRlbXBsYXRlIiwiX3RlbXBsYXRlT2JqZWN0IiwiZGF0YSIsIl8iLCJub29wIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js ***! + \***********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("// @ts-ignore\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Overlay\", ({\n enumerable: true,\n get: function() {\n return Overlay;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _maintaintabfocus = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./maintain--tab-focus */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _bodylocker = __webpack_require__(/*! ./body-locker */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js\");\nconst Overlay = function Overlay(param) {\n let { className, children, fixed } = param;\n _react.useEffect(()=>{\n (0, _bodylocker.lock)();\n return ()=>{\n (0, _bodylocker.unlock)();\n };\n }, []);\n const [overlay, setOverlay] = _react.useState(null);\n const onOverlay = _react.useCallback((el)=>{\n setOverlay(el);\n }, []);\n _react.useEffect(()=>{\n if (overlay == null) {\n return;\n }\n const handle2 = (0, _maintaintabfocus.default)({\n context: overlay\n });\n return ()=>{\n handle2.disengage();\n };\n }, [\n overlay\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-dialog-overlay\": true,\n className: className,\n ref: onOverlay,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-backdrop\": true,\n \"data-nextjs-dialog-backdrop-fixed\": fixed ? true : undefined\n }),\n children\n ]\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Overlay.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LmpzIiwibWFwcGluZ3MiOiJBQUFBLGFBQWE7QUFDQTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxrSEFBeUM7QUFDbEYsTUFBTUMsNEJBQTRCRCxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUUsY0FBY0YsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1HLG9CQUFvQixXQUFXLEdBQUdKLHlCQUF5QkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxvSkFBdUI7QUFDbEcsTUFBTUssU0FBUyxXQUFXLEdBQUdKLDBCQUEwQkcsQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyx3R0FBTztBQUN4RSxNQUFNTSxjQUFjTixtQkFBT0EsQ0FBQyxvSUFBZTtBQUMzQyxNQUFNRixVQUFVLFNBQVNBLFFBQVFTLEtBQUs7SUFDbEMsSUFBSSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFLEdBQUdIO0lBQ3JDRixPQUFPTSxTQUFTLENBQUM7UUFDWixJQUFHTCxZQUFZTSxJQUFJO1FBQ3BCLE9BQU87WUFDRixJQUFHTixZQUFZTyxNQUFNO1FBQzFCO0lBQ0osR0FBRyxFQUFFO0lBQ0wsTUFBTSxDQUFDQyxTQUFTQyxXQUFXLEdBQUdWLE9BQU9XLFFBQVEsQ0FBQztJQUM5QyxNQUFNQyxZQUFZWixPQUFPYSxXQUFXLENBQUMsQ0FBQ0M7UUFDbENKLFdBQVdJO0lBQ2YsR0FBRyxFQUFFO0lBQ0xkLE9BQU9NLFNBQVMsQ0FBQztRQUNiLElBQUlHLFdBQVcsTUFBTTtZQUNqQjtRQUNKO1FBQ0EsTUFBTU0sVUFBVSxDQUFDLEdBQUdqQixrQkFBa0JrQixPQUFPLEVBQUU7WUFDM0NDLFNBQVNSO1FBQ2I7UUFDQSxPQUFPO1lBQ0hNLFFBQVFHLFNBQVM7UUFDckI7SUFDSixHQUFHO1FBQ0NUO0tBQ0g7SUFDRCxPQUFxQixXQUFILEdBQUksSUFBR1osWUFBWXNCLElBQUksRUFBRSxPQUFPO1FBQzlDLDhCQUE4QjtRQUM5QmhCLFdBQVdBO1FBQ1hpQixLQUFLUjtRQUNMUixVQUFVO1lBQ04sV0FBVyxHQUFJLElBQUdQLFlBQVl3QixHQUFHLEVBQUUsT0FBTztnQkFDdEMsK0JBQStCO2dCQUMvQixxQ0FBcUNoQixRQUFRLE9BQU9pQjtZQUN4RDtZQUNBbEI7U0FDSDtJQUNMO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT2YsUUFBUTJCLE9BQU8sS0FBSyxjQUFlLE9BQU8zQixRQUFRMkIsT0FBTyxLQUFLLFlBQVkzQixRQUFRMkIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPM0IsUUFBUTJCLE9BQU8sQ0FBQ08sVUFBVSxLQUFLLGFBQWE7SUFDcktwQyxPQUFPQyxjQUFjLENBQUNDLFFBQVEyQixPQUFPLEVBQUUsY0FBYztRQUFFMUIsT0FBTztJQUFLO0lBQ25FSCxPQUFPcUMsTUFBTSxDQUFDbkMsUUFBUTJCLE9BQU8sRUFBRTNCO0lBQy9Cb0MsT0FBT3BDLE9BQU8sR0FBR0EsUUFBUTJCLE9BQU87QUFDbEMsRUFFQSxtQ0FBbUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS5qcz9hYzIzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT3ZlcmxheVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gT3ZlcmxheTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9tYWludGFpbnRhYmZvY3VzID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi9tYWludGFpbi0tdGFiLWZvY3VzXCIpKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfYm9keWxvY2tlciA9IHJlcXVpcmUoXCIuL2JvZHktbG9ja2VyXCIpO1xuY29uc3QgT3ZlcmxheSA9IGZ1bmN0aW9uIE92ZXJsYXkocGFyYW0pIHtcbiAgICBsZXQgeyBjbGFzc05hbWUsIGNoaWxkcmVuLCBmaXhlZCB9ID0gcGFyYW07XG4gICAgX3JlYWN0LnVzZUVmZmVjdCgoKT0+e1xuICAgICAgICAoMCwgX2JvZHlsb2NrZXIubG9jaykoKTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICAoMCwgX2JvZHlsb2NrZXIudW5sb2NrKSgpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBbb3ZlcmxheSwgc2V0T3ZlcmxheV0gPSBfcmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3Qgb25PdmVybGF5ID0gX3JlYWN0LnVzZUNhbGxiYWNrKChlbCk9PntcbiAgICAgICAgc2V0T3ZlcmxheShlbCk7XG4gICAgfSwgW10pO1xuICAgIF9yZWFjdC51c2VFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKG92ZXJsYXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhbmRsZTIgPSAoMCwgX21haW50YWludGFiZm9jdXMuZGVmYXVsdCkoe1xuICAgICAgICAgICAgY29udGV4dDogb3ZlcmxheVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICBoYW5kbGUyLmRpc2VuZ2FnZSgpO1xuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgb3ZlcmxheVxuICAgIF0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgIFwiZGF0YS1uZXh0anMtZGlhbG9nLW92ZXJsYXlcIjogdHJ1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIHJlZjogb25PdmVybGF5LFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgXCJkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3BcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBcImRhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcC1maXhlZFwiOiBmaXhlZCA/IHRydWUgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgXVxuICAgIH0pO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T3ZlcmxheS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiT3ZlcmxheSIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwiX2pzeHJ1bnRpbWUiLCJfbWFpbnRhaW50YWJmb2N1cyIsIl8iLCJfcmVhY3QiLCJfYm9keWxvY2tlciIsInBhcmFtIiwiY2xhc3NOYW1lIiwiY2hpbGRyZW4iLCJmaXhlZCIsInVzZUVmZmVjdCIsImxvY2siLCJ1bmxvY2siLCJvdmVybGF5Iiwic2V0T3ZlcmxheSIsInVzZVN0YXRlIiwib25PdmVybGF5IiwidXNlQ2FsbGJhY2siLCJlbCIsImhhbmRsZTIiLCJkZWZhdWx0IiwiY29udGV4dCIsImRpc2VuZ2FnZSIsImpzeHMiLCJyZWYiLCJqc3giLCJ1bmRlZmluZWQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js ***! + \***************************************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n lock: function() {\n return lock;\n },\n unlock: function() {\n return unlock;\n }\n});\nlet previousBodyPaddingRight;\nlet previousBodyOverflowSetting;\nlet activeLocks = 0;\nfunction lock() {\n setTimeout(()=>{\n if (activeLocks++ > 0) {\n return;\n }\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n if (scrollBarGap > 0) {\n previousBodyPaddingRight = document.body.style.paddingRight;\n document.body.style.paddingRight = \"\" + scrollBarGap + \"px\";\n }\n previousBodyOverflowSetting = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n });\n}\nfunction unlock() {\n setTimeout(()=>{\n if (activeLocks === 0 || --activeLocks !== 0) {\n return;\n }\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight;\n previousBodyPaddingRight = undefined;\n }\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting;\n previousBodyOverflowSetting = undefined;\n }\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=body-locker.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9ib2R5LWxvY2tlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsTUFBTTtRQUNGLE9BQU9BO0lBQ1g7SUFDQUMsUUFBUTtRQUNKLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLElBQUlPO0FBQ0osSUFBSUM7QUFDSixJQUFJQyxjQUFjO0FBQ2xCLFNBQVNWO0lBQ0xXLFdBQVc7UUFDUCxJQUFJRCxnQkFBZ0IsR0FBRztZQUNuQjtRQUNKO1FBQ0EsTUFBTUUsZUFBZUMsT0FBT0MsVUFBVSxHQUFHQyxTQUFTQyxlQUFlLENBQUNDLFdBQVc7UUFDN0UsSUFBSUwsZUFBZSxHQUFHO1lBQ2xCSiwyQkFBMkJPLFNBQVNHLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxZQUFZO1lBQzNETCxTQUFTRyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsWUFBWSxHQUFHLEtBQUtSLGVBQWU7UUFDM0Q7UUFDQUgsOEJBQThCTSxTQUFTRyxJQUFJLENBQUNDLEtBQUssQ0FBQ0UsUUFBUTtRQUMxRE4sU0FBU0csSUFBSSxDQUFDQyxLQUFLLENBQUNFLFFBQVEsR0FBRztJQUNuQztBQUNKO0FBQ0EsU0FBU3BCO0lBQ0xVLFdBQVc7UUFDUCxJQUFJRCxnQkFBZ0IsS0FBSyxFQUFFQSxnQkFBZ0IsR0FBRztZQUMxQztRQUNKO1FBQ0EsSUFBSUYsNkJBQTZCYyxXQUFXO1lBQ3hDUCxTQUFTRyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsWUFBWSxHQUFHWjtZQUNuQ0EsMkJBQTJCYztRQUMvQjtRQUNBLElBQUliLGdDQUFnQ2EsV0FBVztZQUMzQ1AsU0FBU0csSUFBSSxDQUFDQyxLQUFLLENBQUNFLFFBQVEsR0FBR1o7WUFDL0JBLDhCQUE4QmE7UUFDbEM7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU96QixRQUFRMEIsT0FBTyxLQUFLLGNBQWUsT0FBTzFCLFFBQVEwQixPQUFPLEtBQUssWUFBWTFCLFFBQVEwQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU8xQixRQUFRMEIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzdCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTBCLE9BQU8sRUFBRSxjQUFjO1FBQUV6QixPQUFPO0lBQUs7SUFDbkVILE9BQU84QixNQUFNLENBQUM1QixRQUFRMEIsT0FBTyxFQUFFMUI7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUTBCLE9BQU87QUFDbEMsRUFFQSx1Q0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL092ZXJsYXkvYm9keS1sb2NrZXIuanM/OGQxZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGxvY2s6IG51bGwsXG4gICAgdW5sb2NrOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGxvY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbG9jaztcbiAgICB9LFxuICAgIHVubG9jazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1bmxvY2s7XG4gICAgfVxufSk7XG5sZXQgcHJldmlvdXNCb2R5UGFkZGluZ1JpZ2h0O1xubGV0IHByZXZpb3VzQm9keU92ZXJmbG93U2V0dGluZztcbmxldCBhY3RpdmVMb2NrcyA9IDA7XG5mdW5jdGlvbiBsb2NrKCkge1xuICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgaWYgKGFjdGl2ZUxvY2tzKysgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Nyb2xsQmFyR2FwID0gd2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICAgIGlmIChzY3JvbGxCYXJHYXAgPiAwKSB7XG4gICAgICAgICAgICBwcmV2aW91c0JvZHlQYWRkaW5nUmlnaHQgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodDtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gXCJcIiArIHNjcm9sbEJhckdhcCArIFwicHhcIjtcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c0JvZHlPdmVyZmxvd1NldHRpbmcgPSBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93O1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHVubG9jaygpIHtcbiAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgIGlmIChhY3RpdmVMb2NrcyA9PT0gMCB8fCAtLWFjdGl2ZUxvY2tzICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZpb3VzQm9keVBhZGRpbmdSaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCA9IHByZXZpb3VzQm9keVBhZGRpbmdSaWdodDtcbiAgICAgICAgICAgIHByZXZpb3VzQm9keVBhZGRpbmdSaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldmlvdXNCb2R5T3ZlcmZsb3dTZXR0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBwcmV2aW91c0JvZHlPdmVyZmxvd1NldHRpbmc7XG4gICAgICAgICAgICBwcmV2aW91c0JvZHlPdmVyZmxvd1NldHRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9keS1sb2NrZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwibG9jayIsInVubG9jayIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsInByZXZpb3VzQm9keVBhZGRpbmdSaWdodCIsInByZXZpb3VzQm9keU92ZXJmbG93U2V0dGluZyIsImFjdGl2ZUxvY2tzIiwic2V0VGltZW91dCIsInNjcm9sbEJhckdhcCIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiYm9keSIsInN0eWxlIiwicGFkZGluZ1JpZ2h0Iiwib3ZlcmZsb3ciLCJ1bmRlZmluZWQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js ***! + \*********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Overlay\", ({\n enumerable: true,\n get: function() {\n return _Overlay.Overlay;\n }\n}));\nconst _Overlay = __webpack_require__(/*! ./Overlay */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQyxTQUFTQyxPQUFPO0lBQzNCO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUQsV0FBV0UsbUJBQU9BLENBQUMsNEhBQVc7QUFFcEMsSUFBSSxDQUFDLE9BQU9OLFFBQVFPLE9BQU8sS0FBSyxjQUFlLE9BQU9QLFFBQVFPLE9BQU8sS0FBSyxZQUFZUCxRQUFRTyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9QLFFBQVFPLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktWLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUU8sT0FBTyxFQUFFLGNBQWM7UUFBRU4sT0FBTztJQUFLO0lBQ25FSCxPQUFPVyxNQUFNLENBQUNULFFBQVFPLE9BQU8sRUFBRVA7SUFDL0JVLE9BQU9WLE9BQU8sR0FBR0EsUUFBUU8sT0FBTztBQUNsQyxFQUVBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9pbmRleC5qcz9hODhmIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT3ZlcmxheVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX092ZXJsYXkuT3ZlcmxheTtcbiAgICB9XG59KTtcbmNvbnN0IF9PdmVybGF5ID0gcmVxdWlyZShcIi4vT3ZlcmxheVwiKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIl9PdmVybGF5IiwiT3ZlcmxheSIsInJlcXVpcmUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js": +/*!***********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js ***! + \***********************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/* eslint-disable */ // @ts-nocheck\n// Copied from https://github.com/medialize/ally.js\n// License: MIT\n// Copyright (c) 2015 Rodney Rehm\n//\n// Entrypoint: ally.js/maintain/tab-focus\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _platform = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/platform */ \"(ssr)/./node_modules/next/dist/compiled/platform/platform.js\"));\nconst _cssescape = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/css.escape */ \"(ssr)/./node_modules/next/dist/compiled/css.escape/css.escape.js\"));\n// input may be undefined, selector-tring, Node, NodeList, HTMLCollection, array of Nodes\n// yes, to some extent this is a bad replica of jQuery's constructor function\nfunction nodeArray(input) {\n if (!input) {\n return [];\n }\n if (Array.isArray(input)) {\n return input;\n }\n // instanceof Node - does not work with iframes\n if (input.nodeType !== undefined) {\n return [\n input\n ];\n }\n if (typeof input === \"string\") {\n input = document.querySelectorAll(input);\n }\n if (input.length !== undefined) {\n return [].slice.call(input, 0);\n }\n throw new TypeError(\"unexpected input \" + String(input));\n}\nfunction contextToElement(_ref) {\n var context = _ref.context, _ref$label = _ref.label, label = _ref$label === undefined ? \"context-to-element\" : _ref$label, resolveDocument = _ref.resolveDocument, defaultToDocument = _ref.defaultToDocument;\n var element = nodeArray(context)[0];\n if (resolveDocument && element && element.nodeType === Node.DOCUMENT_NODE) {\n element = element.documentElement;\n }\n if (!element && defaultToDocument) {\n return document.documentElement;\n }\n if (!element) {\n throw new TypeError(label + \" requires valid options.context\");\n }\n if (element.nodeType !== Node.ELEMENT_NODE && element.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n throw new TypeError(label + \" requires options.context to be an Element\");\n }\n return element;\n}\nfunction getShadowHost() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context;\n var element = contextToElement({\n label: \"get/shadow-host\",\n context: context\n });\n // walk up to the root\n var container = null;\n while(element){\n container = element;\n element = element.parentNode;\n }\n // https://developer.mozilla.org/docs/Web/API/Node.nodeType\n // NOTE: Firefox 34 does not expose ShadowRoot.host (but 37 does)\n if (container.nodeType === container.DOCUMENT_FRAGMENT_NODE && container.host) {\n // the root is attached to a fragment node that has a host\n return container.host;\n }\n return null;\n}\nfunction getDocument(node) {\n if (!node) {\n return document;\n }\n if (node.nodeType === Node.DOCUMENT_NODE) {\n return node;\n }\n return node.ownerDocument || document;\n}\nfunction isActiveElement(context) {\n var element = contextToElement({\n label: \"is/active-element\",\n resolveDocument: true,\n context: context\n });\n var _document = getDocument(element);\n if (_document.activeElement === element) {\n return true;\n }\n var shadowHost = getShadowHost({\n context: element\n });\n if (shadowHost && shadowHost.shadowRoot.activeElement === element) {\n return true;\n }\n return false;\n}\n// [elem, elem.parent, elem.parent.parent, …, html]\n// will not contain the shadowRoot (DOCUMENT_FRAGMENT_NODE) and shadowHost\nfunction getParents() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context;\n var list = [];\n var element = contextToElement({\n label: \"get/parents\",\n context: context\n });\n while(element){\n list.push(element);\n // IE does know support parentElement on SVGElement\n element = element.parentNode;\n if (element && element.nodeType !== Node.ELEMENT_NODE) {\n element = null;\n }\n }\n return list;\n}\n// Element.prototype.matches may be available at a different name\n// https://developer.mozilla.org/en/docs/Web/API/Element/matches\nvar names = [\n \"matches\",\n \"webkitMatchesSelector\",\n \"mozMatchesSelector\",\n \"msMatchesSelector\"\n];\nvar name = null;\nfunction findMethodName(element) {\n names.some(function(_name) {\n if (!element[_name]) {\n return false;\n }\n name = _name;\n return true;\n });\n}\nfunction elementMatches(element, selector) {\n if (!name) {\n findMethodName(element);\n }\n return element[name](selector);\n}\n// deep clone of original platform\nvar platform = JSON.parse(JSON.stringify(_platform.default));\n// operating system\nvar os = platform.os.family || \"\";\nvar ANDROID = os === \"Android\";\nvar WINDOWS = os.slice(0, 7) === \"Windows\";\nvar OSX = os === \"OS X\";\nvar IOS = os === \"iOS\";\n// layout\nvar BLINK = platform.layout === \"Blink\";\nvar GECKO = platform.layout === \"Gecko\";\nvar TRIDENT = platform.layout === \"Trident\";\nvar EDGE = platform.layout === \"EdgeHTML\";\nvar WEBKIT = platform.layout === \"WebKit\";\n// browser version (not layout engine version!)\nvar version = parseFloat(platform.version);\nvar majorVersion = Math.floor(version);\nplatform.majorVersion = majorVersion;\nplatform.is = {\n // operating system\n ANDROID: ANDROID,\n WINDOWS: WINDOWS,\n OSX: OSX,\n IOS: IOS,\n // layout\n BLINK: BLINK,\n GECKO: GECKO,\n TRIDENT: TRIDENT,\n EDGE: EDGE,\n WEBKIT: WEBKIT,\n // INTERNET EXPLORERS\n IE9: TRIDENT && majorVersion === 9,\n IE10: TRIDENT && majorVersion === 10,\n IE11: TRIDENT && majorVersion === 11\n};\nfunction before() {\n var data = {\n // remember what had focus to restore after test\n activeElement: document.activeElement,\n // remember scroll positions to restore after test\n windowScrollTop: window.scrollTop,\n windowScrollLeft: window.scrollLeft,\n bodyScrollTop: document.body.scrollTop,\n bodyScrollLeft: document.body.scrollLeft\n };\n // wrap tests in an element hidden from screen readers to prevent them\n // from announcing focus, which can be quite irritating to the user\n var iframe = document.createElement(\"iframe\");\n iframe.setAttribute(\"style\", \"position:absolute; position:fixed; top:0; left:-2px; width:1px; height:1px; overflow:hidden;\");\n iframe.setAttribute(\"aria-live\", \"off\");\n iframe.setAttribute(\"aria-busy\", \"true\");\n iframe.setAttribute(\"aria-hidden\", \"true\");\n document.body.appendChild(iframe);\n var _window = iframe.contentWindow;\n var _document = _window.document;\n _document.open();\n _document.close();\n var wrapper = _document.createElement(\"div\");\n _document.body.appendChild(wrapper);\n data.iframe = iframe;\n data.wrapper = wrapper;\n data.window = _window;\n data.document = _document;\n return data;\n}\n// options.element:\n// {string} element name\n// {function} callback(wrapper, document) to generate an element\n// options.mutate: (optional)\n// {function} callback(element, wrapper, document) to manipulate element prior to focus-test.\n// Can return DOMElement to define focus target (default: element)\n// options.validate: (optional)\n// {function} callback(element, focusTarget, document) to manipulate test-result\nfunction test(data, options) {\n // make sure we operate on a clean slate\n data.wrapper.innerHTML = \"\";\n // create dummy element to test focusability of\n var element = typeof options.element === \"string\" ? data.document.createElement(options.element) : options.element(data.wrapper, data.document);\n // allow callback to further specify dummy element\n // and optionally define element to focus\n var focus = options.mutate && options.mutate(element, data.wrapper, data.document);\n if (!focus && focus !== false) {\n focus = element;\n }\n // element needs to be part of the DOM to be focusable\n !element.parentNode && data.wrapper.appendChild(element);\n // test if the element with invalid tabindex can be focused\n focus && focus.focus && focus.focus();\n // validate test's result\n return options.validate ? options.validate(element, focus, data.document) : data.document.activeElement === focus;\n}\nfunction after(data) {\n // restore focus to what it was before test and cleanup\n if (data.activeElement === document.body) {\n document.activeElement && document.activeElement.blur && document.activeElement.blur();\n if (platform.is.IE10) {\n // IE10 does not redirect focus to <body> when the activeElement is removed\n document.body.focus();\n }\n } else {\n data.activeElement && data.activeElement.focus && data.activeElement.focus();\n }\n document.body.removeChild(data.iframe);\n // restore scroll position\n window.scrollTop = data.windowScrollTop;\n window.scrollLeft = data.windowScrollLeft;\n document.body.scrollTop = data.bodyScrollTop;\n document.body.scrollLeft = data.bodyScrollLeft;\n}\nfunction detectFocus(tests) {\n var data = before();\n var results = {};\n Object.keys(tests).map(function(key) {\n results[key] = test(data, tests[key]);\n });\n after(data);\n return results;\n}\n// this file is overwritten by `npm run build:pre`\nvar version$1 = \"1.4.1\";\n/*\n Facility to cache test results in localStorage.\n\n USAGE:\n cache.get('key');\n cache.set('key', 'value');\n */ function readLocalStorage(key) {\n // allow reading from storage to retrieve previous support results\n // even while the document does not have focus\n var data = void 0;\n try {\n data = window.localStorage && window.localStorage.getItem(key);\n data = data ? JSON.parse(data) : {};\n } catch (e) {\n data = {};\n }\n return data;\n}\nfunction writeLocalStorage(key, value) {\n if (!document.hasFocus()) {\n // if the document does not have focus when tests are executed, focus() may\n // not be handled properly and events may not be dispatched immediately.\n // This can happen when a document is reloaded while Developer Tools have focus.\n try {\n window.localStorage && window.localStorage.removeItem(key);\n } catch (e) {\n // ignore\n }\n return;\n }\n try {\n window.localStorage && window.localStorage.setItem(key, JSON.stringify(value));\n } catch (e) {\n // ignore\n }\n}\nvar userAgent = false || \"\";\nvar cacheKey = \"ally-supports-cache\";\nvar cache = readLocalStorage(cacheKey);\n// update the cache if ally or the user agent changed (newer version, etc)\nif (cache.userAgent !== userAgent || cache.version !== version$1) {\n cache = {};\n}\ncache.userAgent = userAgent;\ncache.version = version$1;\nvar cache$1 = {\n get: function get() {\n return cache;\n },\n set: function set(values) {\n Object.keys(values).forEach(function(key) {\n cache[key] = values[key];\n });\n cache.time = new Date().toISOString();\n writeLocalStorage(cacheKey, cache);\n }\n};\nfunction cssShadowPiercingDeepCombinator() {\n var combinator = void 0;\n // see https://dev.w3.org/csswg/css-scoping-1/#deep-combinator\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1117572\n // https://code.google.com/p/chromium/issues/detail?id=446051\n try {\n document.querySelector(\"html >>> :first-child\");\n combinator = \">>>\";\n } catch (noArrowArrowArrow) {\n try {\n // old syntax supported at least up to Chrome 41\n // https://code.google.com/p/chromium/issues/detail?id=446051\n document.querySelector(\"html /deep/ :first-child\");\n combinator = \"/deep/\";\n } catch (noDeep) {\n combinator = \"\";\n }\n }\n return combinator;\n}\nvar gif = \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\";\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaImgTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-tabindex-test\">' + '<area shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-tabindex-test\" tabindex=\"-1\" alt=\"\" src=\"' + gif + '\">';\n return element.querySelector(\"area\");\n }\n};\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-tabindex-test\">' + '<area href=\"#void\" tabindex=\"-1\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-tabindex-test\" alt=\"\" src=\"' + gif + '\">';\n return false;\n },\n validate: function validate(element, focusTarget, _document) {\n if (platform.is.GECKO) {\n // fixes https://github.com/medialize/ally.js/issues/35\n // Firefox loads the DataURI asynchronously, causing a false-negative\n return true;\n }\n var focus = element.querySelector(\"area\");\n focus.focus();\n return _document.activeElement === focus;\n }\n};\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaWithoutHref = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-area-href-test\">' + '<area shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-area-href-test\" alt=\"\" src=\"' + gif + '\">';\n return element.querySelector(\"area\");\n },\n validate: function validate(element, focusTarget, _document) {\n if (platform.is.GECKO) {\n // fixes https://github.com/medialize/ally.js/issues/35\n // Firefox loads the DataURI asynchronously, causing a false-negative\n return true;\n }\n return _document.activeElement === focusTarget;\n }\n};\nvar focusAudioWithoutControls = {\n name: \"can-focus-audio-without-controls\",\n element: \"audio\",\n mutate: function mutate(element) {\n try {\n // invalid media file can trigger warning in console, data-uri to prevent HTTP request\n element.setAttribute(\"src\", gif);\n } catch (e) {\n // IE9 may throw \"Error: Not implemented\"\n }\n }\n};\nvar invalidGif = \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\";\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusBrokenImageMap = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"broken-image-map-test\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#broken-image-map-test\" alt=\"\" src=\"' + invalidGif + '\">';\n return element.querySelector(\"area\");\n }\n};\n// Children of focusable elements with display:flex are focusable in IE10-11\nvar focusChildrenOfFocusableFlexbox = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"-1\");\n element.setAttribute(\"style\", \"display: -webkit-flex; display: -ms-flexbox; display: flex;\");\n element.innerHTML = '<span style=\"display: block;\">hello</span>';\n return element.querySelector(\"span\");\n }\n};\n// fieldset[tabindex=0][disabled] should not be focusable, but Blink and WebKit disagree\n// @specification https://www.w3.org/TR/html5/disabled-elements.html#concept-element-disabled\n// @browser-issue Chromium https://crbug.com/453847\n// @browser-issue WebKit https://bugs.webkit.org/show_bug.cgi?id=141086\nvar focusFieldsetDisabled = {\n element: \"fieldset\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", 0);\n element.setAttribute(\"disabled\", \"disabled\");\n }\n};\nvar focusFieldset = {\n element: \"fieldset\",\n mutate: function mutate(element) {\n element.innerHTML = \"<legend>legend</legend><p>content</p>\";\n }\n};\n// elements with display:flex are focusable in IE10-11\nvar focusFlexboxContainer = {\n element: \"span\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"display: -webkit-flex; display: -ms-flexbox; display: flex;\");\n element.innerHTML = '<span style=\"display: block;\">hello</span>';\n }\n};\n// form[tabindex=0][disabled] should be focusable as the\n// specification doesn't know the disabled attribute on the form element\n// @specification https://www.w3.org/TR/html5/forms.html#the-form-element\nvar focusFormDisabled = {\n element: \"form\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", 0);\n element.setAttribute(\"disabled\", \"disabled\");\n }\n};\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// fixes https://github.com/medialize/ally.js/issues/20\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-ismap\nvar focusImgIsmap = {\n element: \"a\",\n mutate: function mutate(element) {\n element.href = \"#void\";\n element.innerHTML = '<img ismap src=\"' + gif + '\" alt=\"\">';\n return element.querySelector(\"img\");\n }\n};\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusImgUsemapTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-tabindex-test\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-tabindex-test\" tabindex=\"-1\" alt=\"\" ' + 'src=\"' + gif + '\">';\n return element.querySelector(\"img\");\n }\n};\nvar focusInHiddenIframe = {\n element: function element(wrapper, _document) {\n var iframe = _document.createElement(\"iframe\");\n // iframe must be part of the DOM before accessing the contentWindow is possible\n wrapper.appendChild(iframe);\n // create the iframe's default document (<html><head></head><body></body></html>)\n var iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.close();\n return iframe;\n },\n mutate: function mutate(iframe) {\n iframe.style.visibility = \"hidden\";\n var iframeDocument = iframe.contentWindow.document;\n var input = iframeDocument.createElement(\"input\");\n iframeDocument.body.appendChild(input);\n return input;\n },\n validate: function validate(iframe) {\n var iframeDocument = iframe.contentWindow.document;\n var focus = iframeDocument.querySelector(\"input\");\n return iframeDocument.activeElement === focus;\n }\n};\nvar result = !platform.is.WEBKIT;\nfunction focusInZeroDimensionObject() {\n return result;\n}\n// Firefox allows *any* value and treats invalid values like tabindex=\"-1\"\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\nvar focusInvalidTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"invalid-value\");\n }\n};\nvar focusLabelTabindex = {\n element: \"label\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"-1\");\n },\n validate: function validate(element, focusTarget, _document) {\n // force layout in Chrome 49, otherwise the element won't be focusable\n /* eslint-disable no-unused-vars */ var variableToPreventDeadCodeElimination = element.offsetHeight;\n /* eslint-enable no-unused-vars */ element.focus();\n return _document.activeElement === element;\n }\n};\nvar svg = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtb\" + \"G5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBpZD0ic3ZnIj48dGV4dCB4PSIxMCIgeT0iMjAiIGlkPSJ\" + \"zdmctbGluay10ZXh0Ij50ZXh0PC90ZXh0Pjwvc3ZnPg==\";\n// Note: IE10 on BrowserStack does not like this test\nvar focusObjectSvgHidden = {\n element: \"object\",\n mutate: function mutate(element) {\n element.setAttribute(\"type\", \"image/svg+xml\");\n element.setAttribute(\"data\", svg);\n element.setAttribute(\"width\", \"200\");\n element.setAttribute(\"height\", \"50\");\n element.style.visibility = \"hidden\";\n }\n};\n// Note: IE10 on BrowserStack does not like this test\nvar focusObjectSvg = {\n name: \"can-focus-object-svg\",\n element: \"object\",\n mutate: function mutate(element) {\n element.setAttribute(\"type\", \"image/svg+xml\");\n element.setAttribute(\"data\", svg);\n element.setAttribute(\"width\", \"200\");\n element.setAttribute(\"height\", \"50\");\n },\n validate: function validate(element, focusTarget, _document) {\n if (platform.is.GECKO) {\n // Firefox seems to be handling the object creation asynchronously and thereby produces a false negative test result.\n // Because we know Firefox is able to focus object elements referencing SVGs, we simply cheat by sniffing the user agent string\n return true;\n }\n return _document.activeElement === element;\n }\n};\n// Every Environment except IE9 considers SWF objects focusable\nvar result$1 = !platform.is.IE9;\nfunction focusObjectSwf() {\n return result$1;\n}\nvar focusRedirectImgUsemap = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"focus-redirect-img-usemap\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#focus-redirect-img-usemap\" alt=\"\" ' + 'src=\"' + gif + '\">';\n // focus the <img>, not the <div>\n return element.querySelector(\"img\");\n },\n validate: function validate(element, focusTarget, _document) {\n var target = element.querySelector(\"area\");\n return _document.activeElement === target;\n }\n};\n// see https://jsbin.com/nenirisage/edit?html,js,console,output\nvar focusRedirectLegend = {\n element: \"fieldset\",\n mutate: function mutate(element) {\n element.innerHTML = '<legend>legend</legend><input tabindex=\"-1\"><input tabindex=\"0\">';\n // take care of focus in validate();\n return false;\n },\n validate: function validate(element, focusTarget, _document) {\n var focusable = element.querySelector('input[tabindex=\"-1\"]');\n var tabbable = element.querySelector('input[tabindex=\"0\"]');\n // Firefox requires this test to focus the <fieldset> first, while this is not necessary in\n // https://jsbin.com/nenirisage/edit?html,js,console,output\n element.focus();\n element.querySelector(\"legend\").focus();\n return _document.activeElement === focusable && \"focusable\" || _document.activeElement === tabbable && \"tabbable\" || \"\";\n }\n};\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollBody = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"width: 100px; height: 50px; overflow: auto;\");\n element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n return element.querySelector(\"div\");\n }\n};\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollContainerWithoutOverflow = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"width: 100px; height: 50px;\");\n element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n }\n};\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollContainer = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"width: 100px; height: 50px; overflow: auto;\");\n element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n }\n};\nvar focusSummary = {\n element: \"details\",\n mutate: function mutate(element) {\n element.innerHTML = \"<summary>foo</summary><p>content</p>\";\n return element.firstElementChild;\n }\n};\nfunction makeFocusableForeignObject() {\n // Constructs <foreignObject width=\"30\" height=\"30\"><input type=\"text\"/></foreignObject>\n // without raising a Trusted Types violation\n var foreignObject = document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\");\n foreignObject.width.baseVal.value = 30;\n foreignObject.height.baseVal.value = 30;\n foreignObject.appendChild(document.createElement(\"input\"));\n foreignObject.lastChild.type = \"text\";\n return foreignObject;\n}\nfunction focusSvgForeignObjectHack(element) {\n // Edge13, Edge14: foreignObject focus hack\n // https://jsbin.com/kunehinugi/edit?html,js,output\n // https://jsbin.com/fajagi/3/edit?html,js,output\n var isSvgElement = element.ownerSVGElement || element.nodeName.toLowerCase() === \"svg\";\n if (!isSvgElement) {\n return false;\n }\n // inject and focus an <input> element into the SVG element to receive focus\n var foreignObject = makeFocusableForeignObject();\n element.appendChild(foreignObject);\n var input = foreignObject.querySelector(\"input\");\n input.focus();\n // upon disabling the activeElement, IE and Edge\n // will not shift focus to <body> like all the other\n // browsers, but instead find the first focusable\n // ancestor and shift focus to that\n input.disabled = true;\n // clean up\n element.removeChild(foreignObject);\n return true;\n}\nfunction generate(element) {\n return '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">' + element + \"</svg>\";\n}\nfunction focus(element) {\n if (element.focus) {\n return;\n }\n try {\n HTMLElement.prototype.focus.call(element);\n } catch (e) {\n focusSvgForeignObjectHack(element);\n }\n}\nfunction validate(element, focusTarget, _document) {\n focus(focusTarget);\n return _document.activeElement === focusTarget;\n}\nvar focusSvgFocusableAttribute = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<text focusable=\"true\">a</text>');\n return element.querySelector(\"text\");\n },\n validate: validate\n};\nvar focusSvgTabindexAttribute = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<text tabindex=\"0\">a</text>');\n return element.querySelector(\"text\");\n },\n validate: validate\n};\nvar focusSvgNegativeTabindexAttribute = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<text tabindex=\"-1\">a</text>');\n return element.querySelector(\"text\");\n },\n validate: validate\n};\nvar focusSvgUseTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate([\n '<g id=\"ally-test-target\"><a xlink:href=\"#void\"><text>link</text></a></g>',\n '<use xlink:href=\"#ally-test-target\" x=\"0\" y=\"0\" tabindex=\"-1\" />'\n ].join(\"\"));\n return element.querySelector(\"use\");\n },\n validate: validate\n};\nvar focusSvgForeignobjectTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<foreignObject tabindex=\"-1\"><input type=\"text\" /></foreignObject>');\n // Safari 8's quersSelector() can't identify foreignObject, but getElementyByTagName() can\n return element.querySelector(\"foreignObject\") || element.getElementsByTagName(\"foreignObject\")[0];\n },\n validate: validate\n};\n// Firefox seems to be handling the SVG-document-in-iframe creation asynchronously\n// and thereby produces a false negative test result. Thus the test is pointless\n// and we resort to UA sniffing once again.\n// see http://jsbin.com/vunadohoko/1/edit?js,console,output\nvar result$2 = Boolean(platform.is.GECKO && typeof SVGElement !== \"undefined\" && SVGElement.prototype.focus);\nfunction focusSvgInIframe() {\n return result$2;\n}\nvar focusSvg = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate(\"\");\n return element.firstChild;\n },\n validate: validate\n};\n// Firefox allows *any* value and treats invalid values like tabindex=\"-1\"\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\nvar focusTabindexTrailingCharacters = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"3x\");\n }\n};\nvar focusTable = {\n element: \"table\",\n mutate: function mutate(element, wrapper, _document) {\n // IE9 has a problem replacing TBODY contents with innerHTML.\n // https://stackoverflow.com/a/8097055/515124\n // element.innerHTML = '<tr><td>cell</td></tr>';\n var fragment = _document.createDocumentFragment();\n fragment.innerHTML = \"<tr><td>cell</td></tr>\";\n element.appendChild(fragment);\n }\n};\nvar focusVideoWithoutControls = {\n element: \"video\",\n mutate: function mutate(element) {\n try {\n // invalid media file can trigger warning in console, data-uri to prevent HTTP request\n element.setAttribute(\"src\", gif);\n } catch (e) {\n // IE9 may throw \"Error: Not implemented\"\n }\n }\n};\n// https://jsbin.com/vafaba/3/edit?html,js,console,output\nvar result$3 = platform.is.GECKO || platform.is.TRIDENT || platform.is.EDGE;\nfunction tabsequenceAreaAtImgPosition() {\n return result$3;\n}\nvar testCallbacks = {\n cssShadowPiercingDeepCombinator: cssShadowPiercingDeepCombinator,\n focusInZeroDimensionObject: focusInZeroDimensionObject,\n focusObjectSwf: focusObjectSwf,\n focusSvgInIframe: focusSvgInIframe,\n tabsequenceAreaAtImgPosition: tabsequenceAreaAtImgPosition\n};\nvar testDescriptions = {\n focusAreaImgTabindex: focusAreaImgTabindex,\n focusAreaTabindex: focusAreaTabindex,\n focusAreaWithoutHref: focusAreaWithoutHref,\n focusAudioWithoutControls: focusAudioWithoutControls,\n focusBrokenImageMap: focusBrokenImageMap,\n focusChildrenOfFocusableFlexbox: focusChildrenOfFocusableFlexbox,\n focusFieldsetDisabled: focusFieldsetDisabled,\n focusFieldset: focusFieldset,\n focusFlexboxContainer: focusFlexboxContainer,\n focusFormDisabled: focusFormDisabled,\n focusImgIsmap: focusImgIsmap,\n focusImgUsemapTabindex: focusImgUsemapTabindex,\n focusInHiddenIframe: focusInHiddenIframe,\n focusInvalidTabindex: focusInvalidTabindex,\n focusLabelTabindex: focusLabelTabindex,\n focusObjectSvg: focusObjectSvg,\n focusObjectSvgHidden: focusObjectSvgHidden,\n focusRedirectImgUsemap: focusRedirectImgUsemap,\n focusRedirectLegend: focusRedirectLegend,\n focusScrollBody: focusScrollBody,\n focusScrollContainerWithoutOverflow: focusScrollContainerWithoutOverflow,\n focusScrollContainer: focusScrollContainer,\n focusSummary: focusSummary,\n focusSvgFocusableAttribute: focusSvgFocusableAttribute,\n focusSvgTabindexAttribute: focusSvgTabindexAttribute,\n focusSvgNegativeTabindexAttribute: focusSvgNegativeTabindexAttribute,\n focusSvgUseTabindex: focusSvgUseTabindex,\n focusSvgForeignobjectTabindex: focusSvgForeignobjectTabindex,\n focusSvg: focusSvg,\n focusTabindexTrailingCharacters: focusTabindexTrailingCharacters,\n focusTable: focusTable,\n focusVideoWithoutControls: focusVideoWithoutControls\n};\nfunction executeTests() {\n var results = detectFocus(testDescriptions);\n Object.keys(testCallbacks).forEach(function(key) {\n results[key] = testCallbacks[key]();\n });\n return results;\n}\nvar supportsCache = null;\nfunction _supports() {\n if (supportsCache) {\n return supportsCache;\n }\n supportsCache = cache$1.get();\n if (!supportsCache.time) {\n cache$1.set(executeTests());\n supportsCache = cache$1.get();\n }\n return supportsCache;\n}\nvar supports = void 0;\n// https://www.w3.org/TR/html5/infrastructure.html#rules-for-parsing-integers\n// NOTE: all browsers agree to allow trailing spaces as well\nvar validIntegerPatternNoTrailing = /^\\s*(-|\\+)?[0-9]+\\s*$/;\nvar validIntegerPatternWithTrailing = /^\\s*(-|\\+)?[0-9]+.*$/;\nfunction isValidTabindex(context) {\n if (!supports) {\n supports = _supports();\n }\n var validIntegerPattern = supports.focusTabindexTrailingCharacters ? validIntegerPatternWithTrailing : validIntegerPatternNoTrailing;\n var element = contextToElement({\n label: \"is/valid-tabindex\",\n resolveDocument: true,\n context: context\n });\n // Edge 14 has a capitalization problem on SVG elements,\n // see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9282058/\n var hasTabindex = element.hasAttribute(\"tabindex\");\n var hasTabIndex = element.hasAttribute(\"tabIndex\");\n if (!hasTabindex && !hasTabIndex) {\n return false;\n }\n // older Firefox and Internet Explorer don't support tabindex on SVG elements\n var isSvgElement = element.ownerSVGElement || element.nodeName.toLowerCase() === \"svg\";\n if (isSvgElement && !supports.focusSvgTabindexAttribute) {\n return false;\n }\n // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\n if (supports.focusInvalidTabindex) {\n return true;\n }\n // an element matches the tabindex selector even if its value is invalid\n var tabindex = element.getAttribute(hasTabindex ? \"tabindex\" : \"tabIndex\");\n // IE11 parses tabindex=\"\" as the value \"-32768\"\n // @browser-issue Trident https://connect.microsoft.com/IE/feedback/details/1072965\n if (tabindex === \"-32768\") {\n return false;\n }\n return Boolean(tabindex && validIntegerPattern.test(tabindex));\n}\nfunction tabindexValue(element) {\n if (!isValidTabindex(element)) {\n return null;\n }\n // Edge 14 has a capitalization problem on SVG elements,\n // see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9282058/\n var hasTabindex = element.hasAttribute(\"tabindex\");\n var attributeName = hasTabindex ? \"tabindex\" : \"tabIndex\";\n // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\n var tabindex = parseInt(element.getAttribute(attributeName), 10);\n return isNaN(tabindex) ? -1 : tabindex;\n}\n// this is a shared utility file for focus-relevant.js and tabbable.js\n// separate testing of this file's functions is not necessary,\n// as they're implicitly tested by way of the consumers\nfunction isUserModifyWritable(style) {\n // https://www.w3.org/TR/1999/WD-css3-userint-19990916#user-modify\n // https://github.com/medialize/ally.js/issues/17\n var userModify = style.webkitUserModify || \"\";\n return Boolean(userModify && userModify.indexOf(\"write\") !== -1);\n}\nfunction hasCssOverflowScroll(style) {\n return [\n style.getPropertyValue(\"overflow\"),\n style.getPropertyValue(\"overflow-x\"),\n style.getPropertyValue(\"overflow-y\")\n ].some(function(overflow) {\n return overflow === \"auto\" || overflow === \"scroll\";\n });\n}\nfunction hasCssDisplayFlex(style) {\n return style.display.indexOf(\"flex\") > -1;\n}\nfunction isScrollableContainer(element, nodeName, parentNodeName, parentStyle) {\n if (nodeName !== \"div\" && nodeName !== \"span\") {\n // Internet Explorer advances scrollable containers and bodies to focusable\n // only if the scrollable container is <div> or <span> - this does *not*\n // happen for <section>, <article>, …\n return false;\n }\n if (parentNodeName && parentNodeName !== \"div\" && parentNodeName !== \"span\" && !hasCssOverflowScroll(parentStyle)) {\n return false;\n }\n return element.offsetHeight < element.scrollHeight || element.offsetWidth < element.scrollWidth;\n}\nvar supports$1 = void 0;\nfunction isFocusRelevantRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n flexbox: false,\n scrollable: false,\n shadow: false\n } : _ref$except;\n if (!supports$1) {\n supports$1 = _supports();\n }\n var element = contextToElement({\n label: \"is/focus-relevant\",\n resolveDocument: true,\n context: context\n });\n if (!except.shadow && element.shadowRoot) {\n // a ShadowDOM host receives focus when the focus moves to its content\n return true;\n }\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName === \"input\" && element.type === \"hidden\") {\n // input[type=\"hidden\"] supports.cannot be focused\n return false;\n }\n if (nodeName === \"input\" || nodeName === \"select\" || nodeName === \"button\" || nodeName === \"textarea\") {\n return true;\n }\n if (nodeName === \"legend\" && supports$1.focusRedirectLegend) {\n // specifics filtered in is/focusable\n return true;\n }\n if (nodeName === \"label\") {\n // specifics filtered in is/focusable\n return true;\n }\n if (nodeName === \"area\") {\n // specifics filtered in is/focusable\n return true;\n }\n if (nodeName === \"a\" && element.hasAttribute(\"href\")) {\n return true;\n }\n if (nodeName === \"object\" && element.hasAttribute(\"usemap\")) {\n // object[usemap] is not focusable in any browser\n return false;\n }\n if (nodeName === \"object\") {\n var svgType = element.getAttribute(\"type\");\n if (!supports$1.focusObjectSvg && svgType === \"image/svg+xml\") {\n // object[type=\"image/svg+xml\"] is not focusable in Internet Explorer\n return false;\n } else if (!supports$1.focusObjectSwf && svgType === \"application/x-shockwave-flash\") {\n // object[type=\"application/x-shockwave-flash\"] is not focusable in Internet Explorer 9\n return false;\n }\n }\n if (nodeName === \"iframe\" || nodeName === \"object\") {\n // browsing context containers\n return true;\n }\n if (nodeName === \"embed\" || nodeName === \"keygen\") {\n // embed is considered focus-relevant but not focusable\n // see https://github.com/medialize/ally.js/issues/82\n return true;\n }\n if (element.hasAttribute(\"contenteditable\")) {\n // also see CSS property user-modify below\n return true;\n }\n if (nodeName === \"audio\" && (supports$1.focusAudioWithoutControls || element.hasAttribute(\"controls\"))) {\n return true;\n }\n if (nodeName === \"video\" && (supports$1.focusVideoWithoutControls || element.hasAttribute(\"controls\"))) {\n return true;\n }\n if (supports$1.focusSummary && nodeName === \"summary\") {\n return true;\n }\n var validTabindex = isValidTabindex(element);\n if (nodeName === \"img\" && element.hasAttribute(\"usemap\")) {\n // Gecko, Trident and Edge do not allow an image with an image map and tabindex to be focused,\n // it appears the tabindex is overruled so focus is still forwarded to the <map>\n return validTabindex && supports$1.focusImgUsemapTabindex || supports$1.focusRedirectImgUsemap;\n }\n if (supports$1.focusTable && (nodeName === \"table\" || nodeName === \"td\")) {\n // IE10-11 supports.can focus <table> and <td>\n return true;\n }\n if (supports$1.focusFieldset && nodeName === \"fieldset\") {\n // IE10-11 supports.can focus <fieldset>\n return true;\n }\n var isSvgElement = nodeName === \"svg\";\n var isSvgContent = element.ownerSVGElement;\n var focusableAttribute = element.getAttribute(\"focusable\");\n var tabindex = tabindexValue(element);\n if (nodeName === \"use\" && tabindex !== null && !supports$1.focusSvgUseTabindex) {\n // <use> cannot be made focusable by adding a tabindex attribute anywhere but Blink and WebKit\n return false;\n }\n if (nodeName === \"foreignobject\") {\n // <use> can only be made focusable in Blink and WebKit\n return tabindex !== null && supports$1.focusSvgForeignobjectTabindex;\n }\n if (elementMatches(element, \"svg a\") && element.hasAttribute(\"xlink:href\")) {\n return true;\n }\n if ((isSvgElement || isSvgContent) && element.focus && !supports$1.focusSvgNegativeTabindexAttribute && tabindex < 0) {\n // Firefox 51 and 52 treat any natively tabbable SVG element with\n // tabindex=\"-1\" as tabbable and everything else as inert\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1302340\n return false;\n }\n if (isSvgElement) {\n return validTabindex || supports$1.focusSvg || supports$1.focusSvgInIframe || // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n Boolean(supports$1.focusSvgFocusableAttribute && focusableAttribute && focusableAttribute === \"true\");\n }\n if (isSvgContent) {\n if (supports$1.focusSvgTabindexAttribute && validTabindex) {\n return true;\n }\n if (supports$1.focusSvgFocusableAttribute) {\n // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n return focusableAttribute === \"true\";\n }\n }\n // https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute\n if (validTabindex) {\n return true;\n }\n var style = window.getComputedStyle(element, null);\n if (isUserModifyWritable(style)) {\n return true;\n }\n if (supports$1.focusImgIsmap && nodeName === \"img\" && element.hasAttribute(\"ismap\")) {\n // IE10-11 considers the <img> in <a href><img ismap> focusable\n // https://github.com/medialize/ally.js/issues/20\n var hasLinkParent = getParents({\n context: element\n }).some(function(parent) {\n return parent.nodeName.toLowerCase() === \"a\" && parent.hasAttribute(\"href\");\n });\n if (hasLinkParent) {\n return true;\n }\n }\n // https://github.com/medialize/ally.js/issues/21\n if (!except.scrollable && supports$1.focusScrollContainer) {\n if (supports$1.focusScrollContainerWithoutOverflow) {\n // Internet Explorer does will consider the scrollable area focusable\n // if the element is a <div> or a <span> and it is in fact scrollable,\n // regardless of the CSS overflow property\n if (isScrollableContainer(element, nodeName)) {\n return true;\n }\n } else if (hasCssOverflowScroll(style)) {\n // Firefox requires proper overflow setting, IE does not necessarily\n // https://developer.mozilla.org/docs/Web/CSS/overflow\n return true;\n }\n }\n if (!except.flexbox && supports$1.focusFlexboxContainer && hasCssDisplayFlex(style)) {\n // elements with display:flex are focusable in IE10-11\n return true;\n }\n var parent = element.parentElement;\n if (!except.scrollable && parent) {\n var parentNodeName = parent.nodeName.toLowerCase();\n var parentStyle = window.getComputedStyle(parent, null);\n if (supports$1.focusScrollBody && isScrollableContainer(parent, nodeName, parentNodeName, parentStyle)) {\n // scrollable bodies are focusable Internet Explorer\n // https://github.com/medialize/ally.js/issues/21\n return true;\n }\n // Children of focusable elements with display:flex are focusable in IE10-11\n if (supports$1.focusChildrenOfFocusableFlexbox) {\n if (hasCssDisplayFlex(parentStyle)) {\n return true;\n }\n }\n }\n // NOTE: elements marked as inert are not focusable,\n // but that property is not exposed to the DOM\n // https://www.w3.org/TR/html5/editing.html#inert\n return false;\n}\n// bind exceptions to an iterator callback\nisFocusRelevantRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isFocusRelevant = function isFocusRelevant(context) {\n return isFocusRelevantRules({\n context: context,\n except: except\n });\n };\n isFocusRelevant.rules = isFocusRelevantRules;\n return isFocusRelevant;\n};\n// provide isFocusRelevant(context) as default iterator callback\nvar isFocusRelevant = isFocusRelevantRules.except({});\nfunction findIndex(array, callback) {\n // attempt to use native or polyfilled Array#findIndex first\n if (array.findIndex) {\n return array.findIndex(callback);\n }\n var length = array.length;\n // shortcut if the array is empty\n if (length === 0) {\n return -1;\n }\n // otherwise loop over array\n for(var i = 0; i < length; i++){\n if (callback(array[i], i, array)) {\n return i;\n }\n }\n return -1;\n}\nfunction getContentDocument(node) {\n try {\n // works on <object> and <iframe>\n return node.contentDocument || // works on <object> and <iframe>\n node.contentWindow && node.contentWindow.document || // works on <object> and <iframe> that contain SVG\n node.getSVGDocument && node.getSVGDocument() || null;\n } catch (e) {\n // SecurityError: Failed to read the 'contentDocument' property from 'HTMLObjectElement'\n // also IE may throw member not found exception e.g. on <object type=\"image/png\">\n return null;\n }\n}\nfunction getWindow(node) {\n var _document = getDocument(node);\n return _document.defaultView || window;\n}\nvar shadowPrefix = void 0;\nfunction selectInShadows(selector) {\n if (typeof shadowPrefix !== \"string\") {\n var operator = cssShadowPiercingDeepCombinator();\n if (operator) {\n shadowPrefix = \", html \" + operator + \" \";\n }\n }\n if (!shadowPrefix) {\n return selector;\n }\n return selector + shadowPrefix + selector.replace(/\\s*,\\s*/g, \",\").split(\",\").join(shadowPrefix);\n}\nvar selector = void 0;\nfunction findDocumentHostElement(_window) {\n if (!selector) {\n selector = selectInShadows(\"object, iframe\");\n }\n if (_window._frameElement !== undefined) {\n return _window._frameElement;\n }\n _window._frameElement = null;\n var potentialHosts = _window.parent.document.querySelectorAll(selector);\n [].some.call(potentialHosts, function(element) {\n var _document = getContentDocument(element);\n if (_document !== _window.document) {\n return false;\n }\n _window._frameElement = element;\n return true;\n });\n return _window._frameElement;\n}\nfunction getFrameElement(element) {\n var _window = getWindow(element);\n if (!_window.parent || _window.parent === _window) {\n // if there is no parent browsing context,\n // we're not going to get a frameElement either way\n return null;\n }\n try {\n // see https://developer.mozilla.org/docs/Web/API/Window/frameElement\n // does not work within <embed> anywhere, and not within in <object> in IE\n return _window.frameElement || findDocumentHostElement(_window);\n } catch (e) {\n return null;\n }\n}\n// https://www.w3.org/TR/html5/rendering.html#being-rendered\n// <area> is not rendered, but we *consider* it visible to simplfiy this function's usage\nvar notRenderedElementsPattern = /^(area)$/;\nfunction computedStyle(element, property) {\n return window.getComputedStyle(element, null).getPropertyValue(property);\n}\nfunction notDisplayed(_path) {\n return _path.some(function(element) {\n // display:none is not visible (optimized away at layout)\n return computedStyle(element, \"display\") === \"none\";\n });\n}\nfunction notVisible(_path) {\n // https://github.com/jquery/jquery-ui/blob/master/ui/core.js#L109-L114\n // NOTE: a nested element can reverse visibility:hidden|collapse by explicitly setting visibility:visible\n // NOTE: visibility can be [\"\", \"visible\", \"hidden\", \"collapse\"]\n var hidden = findIndex(_path, function(element) {\n var visibility = computedStyle(element, \"visibility\");\n return visibility === \"hidden\" || visibility === \"collapse\";\n });\n if (hidden === -1) {\n // there is no hidden element\n return false;\n }\n var visible = findIndex(_path, function(element) {\n return computedStyle(element, \"visibility\") === \"visible\";\n });\n if (visible === -1) {\n // there is no visible element (but a hidden element)\n return true;\n }\n if (hidden < visible) {\n // there is a hidden element and it's closer than the first visible element\n return true;\n }\n // there may be a hidden element, but the closest element is visible\n return false;\n}\nfunction collapsedParent(_path) {\n var offset = 1;\n if (_path[0].nodeName.toLowerCase() === \"summary\") {\n offset = 2;\n }\n return _path.slice(offset).some(function(element) {\n // \"content children\" of a closed details element are not visible\n return element.nodeName.toLowerCase() === \"details\" && element.open === false;\n });\n}\nfunction isVisibleRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n notRendered: false,\n cssDisplay: false,\n cssVisibility: false,\n detailsElement: false,\n browsingContext: false\n } : _ref$except;\n var element = contextToElement({\n label: \"is/visible\",\n resolveDocument: true,\n context: context\n });\n var nodeName = element.nodeName.toLowerCase();\n if (!except.notRendered && notRenderedElementsPattern.test(nodeName)) {\n return true;\n }\n var _path = getParents({\n context: element\n });\n // in Internet Explorer <audio> has a default display: none, where others have display: inline\n // but IE allows focusing <audio style=\"display:none\">, but not <div display:none><audio>\n // this is irrelevant to other browsers, as the controls attribute is required to make <audio> focusable\n var isAudioWithoutControls = nodeName === \"audio\" && !element.hasAttribute(\"controls\");\n if (!except.cssDisplay && notDisplayed(isAudioWithoutControls ? _path.slice(1) : _path)) {\n return false;\n }\n if (!except.cssVisibility && notVisible(_path)) {\n return false;\n }\n if (!except.detailsElement && collapsedParent(_path)) {\n return false;\n }\n if (!except.browsingContext) {\n // elements within a browsing context are affected by the\n // browsing context host element's visibility and tabindex\n var frameElement = getFrameElement(element);\n var _isVisible = isVisibleRules.except(except);\n if (frameElement && !_isVisible(frameElement)) {\n return false;\n }\n }\n return true;\n}\n// bind exceptions to an iterator callback\nisVisibleRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isVisible = function isVisible(context) {\n return isVisibleRules({\n context: context,\n except: except\n });\n };\n isVisible.rules = isVisibleRules;\n return isVisible;\n};\n// provide isVisible(context) as default iterator callback\nvar isVisible = isVisibleRules.except({});\nfunction getMapByName(name, _document) {\n // apparently getElementsByName() also considers id attribute in IE & opera\n // https://developer.mozilla.org/docs/Web/API/Document/getElementsByName\n var map = _document.querySelector('map[name=\"' + (0, _cssescape.default)(name) + '\"]');\n return map || null;\n}\nfunction getImageOfArea(element) {\n var map = element.parentElement;\n if (!map.name || map.nodeName.toLowerCase() !== \"map\") {\n return null;\n }\n // NOTE: image maps can also be applied to <object> with image content,\n // but no browser supports this at the moment\n // HTML5 specifies HTMLMapElement.images to be an HTMLCollection of all\n // <img> and <object> referencing the <map> element, but no browser implements this\n // https://www.w3.org/TR/html5/embedded-content-0.html#the-map-element\n // https://developer.mozilla.org/docs/Web/API/HTMLMapElement\n // the image must be valid and loaded for the map to take effect\n var _document = getDocument(element);\n return _document.querySelector('img[usemap=\"#' + (0, _cssescape.default)(map.name) + '\"]') || null;\n}\nvar supports$2 = void 0;\n// https://developer.mozilla.org/docs/Web/HTML/Element/map\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\n// https://github.com/jquery/jquery-ui/blob/master/ui/core.js#L88-L107\nfunction isValidArea(context) {\n if (!supports$2) {\n supports$2 = _supports();\n }\n var element = contextToElement({\n label: \"is/valid-area\",\n context: context\n });\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName !== \"area\") {\n return false;\n }\n var hasTabindex = element.hasAttribute(\"tabindex\");\n if (!supports$2.focusAreaTabindex && hasTabindex) {\n // Blink and WebKit do not consider <area tabindex=\"-1\" href=\"#void\"> focusable\n return false;\n }\n var img = getImageOfArea(element);\n if (!img || !isVisible(img)) {\n return false;\n }\n // Firefox only allows fully loaded images to reference image maps\n // https://stereochro.me/ideas/detecting-broken-images-js\n if (!supports$2.focusBrokenImageMap && (!img.complete || !img.naturalHeight || img.offsetWidth <= 0 || img.offsetHeight <= 0)) {\n return false;\n }\n // Firefox supports.can focus area elements even if they don't have an href attribute\n if (!supports$2.focusAreaWithoutHref && !element.href) {\n // Internet explorer supports.can focus area elements without href if either\n // the area element or the image element has a tabindex attribute\n return supports$2.focusAreaTabindex && hasTabindex || supports$2.focusAreaImgTabindex && img.hasAttribute(\"tabindex\");\n }\n // https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\n var childOfInteractive = getParents({\n context: img\n }).slice(1).some(function(_element) {\n var name = _element.nodeName.toLowerCase();\n return name === \"button\" || name === \"a\";\n });\n if (childOfInteractive) {\n return false;\n }\n return true;\n}\nvar supports$3 = void 0;\n// https://www.w3.org/TR/html5/disabled-elements.html#concept-element-disabled\nvar disabledElementsPattern = void 0;\nvar disabledElements = {\n input: true,\n select: true,\n textarea: true,\n button: true,\n fieldset: true,\n form: true\n};\nfunction isNativeDisabledSupported(context) {\n if (!supports$3) {\n supports$3 = _supports();\n if (supports$3.focusFieldsetDisabled) {\n delete disabledElements.fieldset;\n }\n if (supports$3.focusFormDisabled) {\n delete disabledElements.form;\n }\n disabledElementsPattern = new RegExp(\"^(\" + Object.keys(disabledElements).join(\"|\") + \")$\");\n }\n var element = contextToElement({\n label: \"is/native-disabled-supported\",\n context: context\n });\n var nodeName = element.nodeName.toLowerCase();\n return Boolean(disabledElementsPattern.test(nodeName));\n}\nvar supports$4 = void 0;\nfunction isDisabledFieldset(element) {\n var nodeName = element.nodeName.toLowerCase();\n return nodeName === \"fieldset\" && element.disabled;\n}\nfunction isDisabledForm(element) {\n var nodeName = element.nodeName.toLowerCase();\n return nodeName === \"form\" && element.disabled;\n}\nfunction isDisabled(context) {\n if (!supports$4) {\n supports$4 = _supports();\n }\n var element = contextToElement({\n label: \"is/disabled\",\n context: context\n });\n if (element.hasAttribute(\"data-ally-disabled\")) {\n // treat ally's element/disabled like the DOM native element.disabled\n return true;\n }\n if (!isNativeDisabledSupported(element)) {\n // non-form elements do not support the disabled attribute\n return false;\n }\n if (element.disabled) {\n // the element itself is disabled\n return true;\n }\n var parents = getParents({\n context: element\n });\n if (parents.some(isDisabledFieldset)) {\n // a parental <fieldset> is disabld and inherits the state onto this element\n return true;\n }\n if (!supports$4.focusFormDisabled && parents.some(isDisabledForm)) {\n // a parental <form> is disabld and inherits the state onto this element\n return true;\n }\n return false;\n}\nfunction isOnlyTabbableRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n onlyFocusableBrowsingContext: false,\n visible: false\n } : _ref$except;\n var element = contextToElement({\n label: \"is/only-tabbable\",\n resolveDocument: true,\n context: context\n });\n if (!except.visible && !isVisible(element)) {\n return false;\n }\n if (!except.onlyFocusableBrowsingContext && (platform.is.GECKO || platform.is.TRIDENT || platform.is.EDGE)) {\n var frameElement = getFrameElement(element);\n if (frameElement) {\n if (tabindexValue(frameElement) < 0) {\n // iframe[tabindex=\"-1\"] and object[tabindex=\"-1\"] inherit the\n // tabbable demotion onto elements of their browsing contexts\n return false;\n }\n }\n }\n var nodeName = element.nodeName.toLowerCase();\n var tabindex = tabindexValue(element);\n if (nodeName === \"label\" && platform.is.GECKO) {\n // Firefox cannot focus, but tab to: label[tabindex=0]\n return tabindex !== null && tabindex >= 0;\n }\n // SVG Elements were keyboard focusable but not script focusable before Firefox 51.\n // Firefox 51 added the focus management DOM API (.focus and .blur) to SVGElement,\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=778654\n if (platform.is.GECKO && element.ownerSVGElement && !element.focus) {\n if (nodeName === \"a\" && element.hasAttribute(\"xlink:href\")) {\n // any focusable child of <svg> cannot be focused, but tabbed to\n if (platform.is.GECKO) {\n return true;\n }\n }\n }\n return false;\n}\n// bind exceptions to an iterator callback\nisOnlyTabbableRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isOnlyTabbable = function isOnlyTabbable(context) {\n return isOnlyTabbableRules({\n context: context,\n except: except\n });\n };\n isOnlyTabbable.rules = isOnlyTabbableRules;\n return isOnlyTabbable;\n};\n// provide isOnlyTabbable(context) as default iterator callback\nvar isOnlyTabbable = isOnlyTabbableRules.except({});\nvar supports$5 = void 0;\nfunction isOnlyFocusRelevant(element) {\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName === \"embed\" || nodeName === \"keygen\") {\n // embed is considered focus-relevant but not focusable\n // see https://github.com/medialize/ally.js/issues/82\n return true;\n }\n var _tabindex = tabindexValue(element);\n if (element.shadowRoot && _tabindex === null) {\n // ShadowDOM host elements *may* receive focus\n // even though they are not considered focuable\n return true;\n }\n if (nodeName === \"label\") {\n // <label tabindex=\"0\"> is only tabbable in Firefox, not script-focusable\n // there's no way to make an element focusable other than by adding a tabindex,\n // and focus behavior of the label element seems hard-wired to ignore tabindex\n // in some browsers (like Gecko, Blink and WebKit)\n return !supports$5.focusLabelTabindex || _tabindex === null;\n }\n if (nodeName === \"legend\") {\n return _tabindex === null;\n }\n if (supports$5.focusSvgFocusableAttribute && (element.ownerSVGElement || nodeName === \"svg\")) {\n // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n var focusableAttribute = element.getAttribute(\"focusable\");\n return focusableAttribute && focusableAttribute === \"false\";\n }\n if (nodeName === \"img\" && element.hasAttribute(\"usemap\")) {\n // Gecko, Trident and Edge do not allow an image with an image map and tabindex to be focused,\n // it appears the tabindex is overruled so focus is still forwarded to the <map>\n return _tabindex === null || !supports$5.focusImgUsemapTabindex;\n }\n if (nodeName === \"area\") {\n // all <area>s are considered relevant,\n // but only the valid <area>s are focusable\n return !isValidArea(element);\n }\n return false;\n}\nfunction isFocusableRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n disabled: false,\n visible: false,\n onlyTabbable: false\n } : _ref$except;\n if (!supports$5) {\n supports$5 = _supports();\n }\n var _isOnlyTabbable = isOnlyTabbable.rules.except({\n onlyFocusableBrowsingContext: true,\n visible: except.visible\n });\n var element = contextToElement({\n label: \"is/focusable\",\n resolveDocument: true,\n context: context\n });\n var focusRelevant = isFocusRelevant.rules({\n context: element,\n except: except\n });\n if (!focusRelevant || isOnlyFocusRelevant(element)) {\n return false;\n }\n if (!except.disabled && isDisabled(element)) {\n return false;\n }\n if (!except.onlyTabbable && _isOnlyTabbable(element)) {\n // some elements may be keyboard focusable, but not script focusable\n return false;\n }\n // elements that are not rendered, cannot be focused\n if (!except.visible) {\n var visibilityOptions = {\n context: element,\n except: {}\n };\n if (supports$5.focusInHiddenIframe) {\n // WebKit and Blink can focus content in hidden <iframe> and <object>\n visibilityOptions.except.browsingContext = true;\n }\n if (supports$5.focusObjectSvgHidden) {\n // Blink allows focusing the object element, even if it has visibility: hidden;\n // @browser-issue Blink https://code.google.com/p/chromium/issues/detail?id=586191\n var _nodeName2 = element.nodeName.toLowerCase();\n if (_nodeName2 === \"object\") {\n visibilityOptions.except.cssVisibility = true;\n }\n }\n if (!isVisible.rules(visibilityOptions)) {\n return false;\n }\n }\n var frameElement = getFrameElement(element);\n if (frameElement) {\n var _nodeName = frameElement.nodeName.toLowerCase();\n if (_nodeName === \"object\" && !supports$5.focusInZeroDimensionObject) {\n if (!frameElement.offsetWidth || !frameElement.offsetHeight) {\n // WebKit can not focus content in <object> if it doesn't have dimensions\n return false;\n }\n }\n }\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName === \"svg\" && supports$5.focusSvgInIframe && !frameElement && element.getAttribute(\"tabindex\") === null) {\n return false;\n }\n return true;\n}\n// bind exceptions to an iterator callback\nisFocusableRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isFocusable = function isFocusable(context) {\n return isFocusableRules({\n context: context,\n except: except\n });\n };\n isFocusable.rules = isFocusableRules;\n return isFocusable;\n};\n// provide isFocusRelevant(context) as default iterator callback\nvar isFocusable = isFocusableRules.except({});\nfunction createFilter(condition) {\n // see https://developer.mozilla.org/docs/Web/API/NodeFilter\n var filter = function filter(node) {\n if (node.shadowRoot) {\n // return ShadowRoot elements regardless of them being focusable,\n // so they can be walked recursively later\n return NodeFilter.FILTER_ACCEPT;\n }\n if (condition(node)) {\n // finds elements that could have been found by document.querySelectorAll()\n return NodeFilter.FILTER_ACCEPT;\n }\n return NodeFilter.FILTER_SKIP;\n };\n // IE requires a function, Browsers require {acceptNode: function}\n // see http://www.bennadel.com/blog/2607-finding-html-comment-nodes-in-the-dom-using-treewalker.htm\n filter.acceptNode = filter;\n return filter;\n}\nvar PossiblyFocusableFilter = createFilter(isFocusRelevant);\nfunction queryFocusableStrict() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, strategy = _ref.strategy;\n if (!context) {\n context = document.documentElement;\n }\n var _isFocusable = isFocusable.rules.except({\n onlyTabbable: includeOnlyTabbable\n });\n var _document = getDocument(context);\n // see https://developer.mozilla.org/docs/Web/API/Document/createTreeWalker\n var walker = _document.createTreeWalker(context, NodeFilter.SHOW_ELEMENT, strategy === \"all\" ? PossiblyFocusableFilter : createFilter(_isFocusable), false);\n var list = [];\n while(walker.nextNode()){\n if (walker.currentNode.shadowRoot) {\n if (_isFocusable(walker.currentNode)) {\n list.push(walker.currentNode);\n }\n list = list.concat(queryFocusableStrict({\n context: walker.currentNode.shadowRoot,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n }));\n } else {\n list.push(walker.currentNode);\n }\n }\n // add context if requested and focusable\n if (includeContext) {\n if (strategy === \"all\") {\n if (isFocusRelevant(context)) {\n list.unshift(context);\n }\n } else if (_isFocusable(context)) {\n list.unshift(context);\n }\n }\n return list;\n}\n// NOTE: this selector MUST *never* be used directly,\nvar supports$6 = void 0;\nvar selector$1 = void 0;\nfunction selector$2() {\n if (!supports$6) {\n supports$6 = _supports();\n }\n if (typeof selector$1 === \"string\") {\n return selector$1;\n }\n // https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute\n selector$1 = \"\" + // IE11 supports.can focus <table> and <td>\n (supports$6.focusTable ? \"table, td,\" : \"\") + // IE11 supports.can focus <fieldset>\n (supports$6.focusFieldset ? \"fieldset,\" : \"\") + // Namespace problems of [xlink:href] explained in https://stackoverflow.com/a/23047888/515124\n // svg a[*|href] does not match in IE9, but since we're filtering\n // through is/focusable we can include all <a> from SVG\n \"svg a,\" + // may behave as 'svg, svg *,' in chrome as *every* svg element with a focus event listener is focusable\n // navigational elements\n \"a[href],\" + // validity determined by is/valid-area.js\n \"area[href],\" + // validity determined by is/disabled.js\n \"input, select, textarea, button,\" + // browsing context containers\n \"iframe, object, embed,\" + // interactive content\n \"keygen,\" + (supports$6.focusAudioWithoutControls ? \"audio,\" : \"audio[controls],\") + (supports$6.focusVideoWithoutControls ? \"video,\" : \"video[controls],\") + (supports$6.focusSummary ? \"summary,\" : \"\") + // validity determined by is/valid-tabindex.js\n \"[tabindex],\" + // editing hosts\n \"[contenteditable]\";\n // where ShadowDOM is supported, we also want the shadowed focusable elements (via \">>>\" or \"/deep/\")\n selector$1 = selectInShadows(selector$1);\n return selector$1;\n}\nfunction queryFocusableQuick() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable;\n var _selector = selector$2();\n var elements = context.querySelectorAll(_selector);\n // the selector potentially matches more than really is focusable\n var _isFocusable = isFocusable.rules.except({\n onlyTabbable: includeOnlyTabbable\n });\n var result = [].filter.call(elements, _isFocusable);\n // add context if requested and focusable\n if (includeContext && _isFocusable(context)) {\n result.unshift(context);\n }\n return result;\n}\nfunction queryFocusable() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, _ref$strategy = _ref.strategy, strategy = _ref$strategy === undefined ? \"quick\" : _ref$strategy;\n var element = contextToElement({\n label: \"query/focusable\",\n resolveDocument: true,\n defaultToDocument: true,\n context: context\n });\n var options = {\n context: element,\n includeContext: includeContext,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n };\n if (strategy === \"quick\") {\n return queryFocusableQuick(options);\n } else if (strategy === \"strict\" || strategy === \"all\") {\n return queryFocusableStrict(options);\n }\n throw new TypeError('query/focusable requires option.strategy to be one of [\"quick\", \"strict\", \"all\"]');\n}\nvar supports$7 = void 0;\n// Internet Explorer 11 considers fieldset, table, td focusable, but not tabbable\n// Internet Explorer 11 considers body to have [tabindex=0], but does not allow tabbing to it\nvar focusableElementsPattern = /^(fieldset|table|td|body)$/;\nfunction isTabbableRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n flexbox: false,\n scrollable: false,\n shadow: false,\n visible: false,\n onlyTabbable: false\n } : _ref$except;\n if (!supports$7) {\n supports$7 = _supports();\n }\n var element = contextToElement({\n label: \"is/tabbable\",\n resolveDocument: true,\n context: context\n });\n if (platform.is.BLINK && platform.is.ANDROID && platform.majorVersion > 42) {\n // External keyboard support worked fine in CHrome 42, but stopped working in Chrome 45.\n // The on-screen keyboard does not provide a way to focus the next input element (like iOS does).\n // That leaves us with no option to advance focus by keyboard, ergo nothing is tabbable (keyboard focusable).\n return false;\n }\n var frameElement = getFrameElement(element);\n if (frameElement) {\n if (platform.is.WEBKIT && platform.is.IOS) {\n // iOS only does not consider anything from another browsing context keyboard focusable\n return false;\n }\n // iframe[tabindex=\"-1\"] and object[tabindex=\"-1\"] inherit the\n // tabbable demotion onto elements of their browsing contexts\n if (tabindexValue(frameElement) < 0) {\n return false;\n }\n if (!except.visible && (platform.is.BLINK || platform.is.WEBKIT) && !isVisible(frameElement)) {\n // Blink and WebKit consider elements in hidden browsing contexts focusable, but not tabbable\n return false;\n }\n // Webkit and Blink don't consider anything in <object> tabbable\n // Blink fixed that fixed in Chrome 54, Opera 41\n var frameNodeName = frameElement.nodeName.toLowerCase();\n if (frameNodeName === \"object\") {\n var isFixedBlink = platform.name === \"Chrome\" && platform.majorVersion >= 54 || platform.name === \"Opera\" && platform.majorVersion >= 41;\n if (platform.is.WEBKIT || platform.is.BLINK && !isFixedBlink) {\n return false;\n }\n }\n }\n var nodeName = element.nodeName.toLowerCase();\n var _tabindex = tabindexValue(element);\n var tabindex = _tabindex === null ? null : _tabindex >= 0;\n if (platform.is.EDGE && platform.majorVersion >= 14 && frameElement && element.ownerSVGElement && _tabindex < 0) {\n // Edge 14+ considers <a xlink:href=\"…\" tabindex=\"-1\"> keyboard focusable\n // if the element is in a nested browsing context\n return true;\n }\n var hasTabbableTabindexOrNone = tabindex !== false;\n var hasTabbableTabindex = _tabindex !== null && _tabindex >= 0;\n // NOTE: Firefox 31 considers [contenteditable] to have [tabindex=-1], but allows tabbing to it\n // fixed in Firefox 40 the latest - https://bugzilla.mozilla.org/show_bug.cgi?id=1185657\n if (element.hasAttribute(\"contenteditable\")) {\n // tabbing can still be disabled by explicitly providing [tabindex=\"-1\"]\n return hasTabbableTabindexOrNone;\n }\n if (focusableElementsPattern.test(nodeName) && tabindex !== true) {\n return false;\n }\n if (platform.is.WEBKIT && platform.is.IOS) {\n // iOS only considers a hand full of elements tabbable (keyboard focusable)\n // this holds true even with external keyboards\n var potentiallyTabbable = nodeName === \"input\" && element.type === \"text\" || element.type === \"password\" || nodeName === \"select\" || nodeName === \"textarea\" || element.hasAttribute(\"contenteditable\");\n if (!potentiallyTabbable) {\n var style = window.getComputedStyle(element, null);\n potentiallyTabbable = isUserModifyWritable(style);\n }\n if (!potentiallyTabbable) {\n return false;\n }\n }\n if (nodeName === \"use\" && _tabindex !== null) {\n if (platform.is.BLINK || platform.is.WEBKIT && platform.majorVersion === 9) {\n // In Chrome and Safari 9 the <use> element is keyboard focusable even for tabindex=\"-1\"\n return true;\n }\n }\n if (elementMatches(element, \"svg a\") && element.hasAttribute(\"xlink:href\")) {\n if (hasTabbableTabindexOrNone) {\n // in Trident and Gecko SVGElement does not handle the tabIndex property properly\n return true;\n }\n if (element.focus && !supports$7.focusSvgNegativeTabindexAttribute) {\n // Firefox 51 and 52 treat any natively tabbable SVG element with\n // tabindex=\"-1\" as tabbable and everything else as inert\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1302340\n return true;\n }\n }\n if (nodeName === \"svg\" && supports$7.focusSvgInIframe && hasTabbableTabindexOrNone) {\n return true;\n }\n if (platform.is.TRIDENT || platform.is.EDGE) {\n if (nodeName === \"svg\") {\n if (supports$7.focusSvg) {\n // older Internet Explorers consider <svg> keyboard focusable\n // unless they have focsable=\"false\", but then they wouldn't\n // be focusable and thus not even reach this filter\n return true;\n }\n // elements that have [focusable] are automatically keyboard focusable regardless of the attribute's value\n return element.hasAttribute(\"focusable\") || hasTabbableTabindex;\n }\n if (element.ownerSVGElement) {\n if (supports$7.focusSvgTabindexAttribute && hasTabbableTabindex) {\n return true;\n }\n // elements that have [focusable] are automatically keyboard focusable regardless of the attribute's value\n return element.hasAttribute(\"focusable\");\n }\n }\n if (element.tabIndex === undefined) {\n return Boolean(except.onlyTabbable);\n }\n if (nodeName === \"audio\") {\n if (!element.hasAttribute(\"controls\")) {\n // In Internet Explorer the <audio> element is focusable, but not tabbable, and tabIndex property is wrong\n return false;\n } else if (platform.is.BLINK) {\n // In Chrome <audio controls tabindex=\"-1\"> remains keyboard focusable\n return true;\n }\n }\n if (nodeName === \"video\") {\n if (!element.hasAttribute(\"controls\")) {\n if (platform.is.TRIDENT || platform.is.EDGE) {\n // In Internet Explorer and Edge the <video> element is focusable, but not tabbable, and tabIndex property is wrong\n return false;\n }\n } else if (platform.is.BLINK || platform.is.GECKO) {\n // In Chrome and Firefox <video controls tabindex=\"-1\"> remains keyboard focusable\n return true;\n }\n }\n if (nodeName === \"object\") {\n if (platform.is.BLINK || platform.is.WEBKIT) {\n // In all Blink and WebKit based browsers <embed> and <object> are never keyboard focusable, even with tabindex=\"0\" set\n return false;\n }\n }\n if (nodeName === \"iframe\") {\n // In Internet Explorer all iframes are only focusable\n // In WebKit, Blink and Gecko iframes may be tabbable depending on content.\n // Since we can't reliably investigate iframe documents because of the\n // SameOriginPolicy, we're declaring everything only focusable.\n return false;\n }\n if (!except.scrollable && platform.is.GECKO) {\n // Firefox considers scrollable containers keyboard focusable,\n // even though their tabIndex property is -1\n var _style = window.getComputedStyle(element, null);\n if (hasCssOverflowScroll(_style)) {\n return hasTabbableTabindexOrNone;\n }\n }\n if (platform.is.TRIDENT || platform.is.EDGE) {\n // IE and Edge degrade <area> to script focusable, if the image\n // using the <map> has been given tabindex=\"-1\"\n if (nodeName === \"area\") {\n var img = getImageOfArea(element);\n if (img && tabindexValue(img) < 0) {\n return false;\n }\n }\n var _style2 = window.getComputedStyle(element, null);\n if (isUserModifyWritable(_style2)) {\n // prevent being swallowed by the overzealous isScrollableContainer() below\n return element.tabIndex >= 0;\n }\n if (!except.flexbox && hasCssDisplayFlex(_style2)) {\n if (_tabindex !== null) {\n return hasTabbableTabindex;\n }\n return isFocusRelevantWithoutFlexbox(element) && isTabbableWithoutFlexbox(element);\n }\n // IE considers scrollable containers script focusable only,\n // even though their tabIndex property is 0\n if (isScrollableContainer(element, nodeName)) {\n return false;\n }\n var parent = element.parentElement;\n if (parent) {\n var parentNodeName = parent.nodeName.toLowerCase();\n var parentStyle = window.getComputedStyle(parent, null);\n // IE considers scrollable bodies script focusable only,\n if (isScrollableContainer(parent, nodeName, parentNodeName, parentStyle)) {\n return false;\n }\n // Children of focusable elements with display:flex are focusable in IE10-11,\n // even though their tabIndex property suggests otherwise\n if (hasCssDisplayFlex(parentStyle)) {\n // value of tabindex takes precedence\n return hasTabbableTabindex;\n }\n }\n }\n // https://www.w3.org/WAI/PF/aria-practices/#focus_tabindex\n return element.tabIndex >= 0;\n}\n// bind exceptions to an iterator callback\nisTabbableRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isTabbable = function isTabbable(context) {\n return isTabbableRules({\n context: context,\n except: except\n });\n };\n isTabbable.rules = isTabbableRules;\n return isTabbable;\n};\nvar isFocusRelevantWithoutFlexbox = isFocusRelevant.rules.except({\n flexbox: true\n});\nvar isTabbableWithoutFlexbox = isTabbableRules.except({\n flexbox: true\n});\n// provide isTabbable(context) as default iterator callback\nvar isTabbable = isTabbableRules.except({});\nfunction queryTabbable() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, strategy = _ref.strategy;\n var _isTabbable = isTabbable.rules.except({\n onlyTabbable: includeOnlyTabbable\n });\n return queryFocusable({\n context: context,\n includeContext: includeContext,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n }).filter(_isTabbable);\n}\n// sorts a list of elements according to their order in the DOM\nfunction compareDomPosition(a, b) {\n return a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n}\nfunction sortDomOrder(elements) {\n return elements.sort(compareDomPosition);\n}\nfunction getFirstSuccessorOffset(list, target) {\n // find the first element that comes AFTER the target element\n return findIndex(list, function(element) {\n return target.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_FOLLOWING;\n });\n}\nfunction findInsertionOffsets(list, elements, resolveElement) {\n // instead of mutating the elements list directly, remember position and map\n // to inject later, when we can do this more efficiently\n var insertions = [];\n elements.forEach(function(element) {\n var replace = true;\n var offset = list.indexOf(element);\n if (offset === -1) {\n // element is not in target list\n offset = getFirstSuccessorOffset(list, element);\n replace = false;\n }\n if (offset === -1) {\n // there is no successor in the tabsequence,\n // meaning the image must be the last element\n offset = list.length;\n }\n // allow the consumer to replace the injected element\n var injections = nodeArray(resolveElement ? resolveElement(element) : element);\n if (!injections.length) {\n // we can't inject zero elements\n return;\n }\n insertions.push({\n offset: offset,\n replace: replace,\n elements: injections\n });\n });\n return insertions;\n}\nfunction insertElementsAtOffsets(list, insertions) {\n // remember the number of elements we have already injected\n // so we account for the caused index offset\n var inserted = 0;\n // make sure that we insert the elements in sequence,\n // otherwise the offset compensation won't work\n insertions.sort(function(a, b) {\n return a.offset - b.offset;\n });\n insertions.forEach(function(insertion) {\n // array.splice has an annoying function signature :(\n var remove = insertion.replace ? 1 : 0;\n var args = [\n insertion.offset + inserted,\n remove\n ].concat(insertion.elements);\n list.splice.apply(list, args);\n inserted += insertion.elements.length - remove;\n });\n}\nfunction mergeInDomOrder() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, list = _ref.list, elements = _ref.elements, resolveElement = _ref.resolveElement;\n // operate on a copy so we don't mutate the original array\n var _list = list.slice(0);\n // make sure the elements we're injecting are provided in DOM order\n var _elements = nodeArray(elements).slice(0);\n sortDomOrder(_elements);\n // find the offsets within the target array (list) at which to inject\n // each individual element (from elements)\n var insertions = findInsertionOffsets(_list, _elements, resolveElement);\n // actually inject the elements into the target array at the identified positions\n insertElementsAtOffsets(_list, insertions);\n return _list;\n}\nvar _createClass = function() {\n function defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nvar Maps = function() {\n function Maps(context) {\n _classCallCheck(this, Maps);\n this._document = getDocument(context);\n this.maps = {};\n }\n _createClass(Maps, [\n {\n key: \"getAreasFor\",\n value: function getAreasFor(name) {\n if (!this.maps[name]) {\n // the map is not defined within the context, so we\n // have to go find it elsewhere in the document\n this.addMapByName(name);\n }\n return this.maps[name];\n }\n },\n {\n key: \"addMapByName\",\n value: function addMapByName(name) {\n var map = getMapByName(name, this._document);\n if (!map) {\n // if there is no map, the img[usemap] wasn't doing anything anyway\n return;\n }\n this.maps[map.name] = queryTabbable({\n context: map\n });\n }\n },\n {\n key: \"extractAreasFromList\",\n value: function extractAreasFromList(elements) {\n // remove all <area> elements from the elements list,\n // but put them the map for later retrieval\n return elements.filter(function(element) {\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName !== \"area\") {\n return true;\n }\n var map = element.parentNode;\n if (!this.maps[map.name]) {\n this.maps[map.name] = [];\n }\n this.maps[map.name].push(element);\n return false;\n }, this);\n }\n }\n ]);\n return Maps;\n}();\nfunction sortArea(elements, context) {\n // images - unless they are focusable themselves, likely not\n // part of the elements list, so we'll have to find them and\n // sort them into the elements list manually\n var usemaps = context.querySelectorAll(\"img[usemap]\");\n var maps = new Maps(context);\n // remove all <area> elements from the elements list,\n // but put them the map for later retrieval\n var _elements = maps.extractAreasFromList(elements);\n if (!usemaps.length) {\n // the context does not contain any <area>s so no need\n // to replace anything, just remove any maps\n return _elements;\n }\n return mergeInDomOrder({\n list: _elements,\n elements: usemaps,\n resolveElement: function resolveElement(image) {\n var name = image.getAttribute(\"usemap\").slice(1);\n return maps.getAreasFor(name);\n }\n });\n}\nvar _createClass$1 = function() {\n function defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck$1(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nvar Shadows = function() {\n function Shadows(context, sortElements) {\n _classCallCheck$1(this, Shadows);\n // document context we're working with\n this.context = context;\n // callback that sorts an array of elements\n this.sortElements = sortElements;\n // reference to create unique IDs for each ShadowHost\n this.hostCounter = 1;\n // reference map for child-ShadowHosts of a ShadowHost\n this.inHost = {};\n // reference map for child-ShadowHost of the document\n this.inDocument = [];\n // reference map for ShadowHosts\n this.hosts = {};\n // reference map for tabbable elements of a ShadowHost\n this.elements = {};\n }\n // remember which hosts we have to sort within later\n _createClass$1(Shadows, [\n {\n key: \"_registerHost\",\n value: function _registerHost(host) {\n if (host._sortingId) {\n return;\n }\n // make the ShadowHost identifiable (see cleanup() for undo)\n host._sortingId = \"shadow-\" + this.hostCounter++;\n this.hosts[host._sortingId] = host;\n // hosts may contain other hosts\n var parentHost = getShadowHost({\n context: host\n });\n if (parentHost) {\n this._registerHost(parentHost);\n this._registerHostParent(host, parentHost);\n } else {\n this.inDocument.push(host);\n }\n }\n },\n {\n key: \"_registerHostParent\",\n value: function _registerHostParent(host, parent) {\n if (!this.inHost[parent._sortingId]) {\n this.inHost[parent._sortingId] = [];\n }\n this.inHost[parent._sortingId].push(host);\n }\n },\n {\n key: \"_registerElement\",\n value: function _registerElement(element, host) {\n if (!this.elements[host._sortingId]) {\n this.elements[host._sortingId] = [];\n }\n this.elements[host._sortingId].push(element);\n }\n },\n {\n key: \"extractElements\",\n value: function extractElements(elements) {\n return elements.filter(function(element) {\n var host = getShadowHost({\n context: element\n });\n if (!host) {\n return true;\n }\n this._registerHost(host);\n this._registerElement(element, host);\n return false;\n }, this);\n }\n },\n {\n key: \"sort\",\n value: function sort(elements) {\n var _elements = this._injectHosts(elements);\n _elements = this._replaceHosts(_elements);\n this._cleanup();\n return _elements;\n }\n },\n {\n key: \"_injectHosts\",\n value: function _injectHosts(elements) {\n Object.keys(this.hosts).forEach(function(_sortingId) {\n var _list = this.elements[_sortingId];\n var _elements = this.inHost[_sortingId];\n var _context = this.hosts[_sortingId].shadowRoot;\n this.elements[_sortingId] = this._merge(_list, _elements, _context);\n }, this);\n return this._merge(elements, this.inDocument, this.context);\n }\n },\n {\n key: \"_merge\",\n value: function _merge(list, elements, context) {\n var merged = mergeInDomOrder({\n list: list,\n elements: elements\n });\n return this.sortElements(merged, context);\n }\n },\n {\n key: \"_replaceHosts\",\n value: function _replaceHosts(elements) {\n return mergeInDomOrder({\n list: elements,\n elements: this.inDocument,\n resolveElement: this._resolveHostElement.bind(this)\n });\n }\n },\n {\n key: \"_resolveHostElement\",\n value: function _resolveHostElement(host) {\n var merged = mergeInDomOrder({\n list: this.elements[host._sortingId],\n elements: this.inHost[host._sortingId],\n resolveElement: this._resolveHostElement.bind(this)\n });\n var _tabindex = tabindexValue(host);\n if (_tabindex !== null && _tabindex > -1) {\n return [\n host\n ].concat(merged);\n }\n return merged;\n }\n },\n {\n key: \"_cleanup\",\n value: function _cleanup() {\n // remove those identifers we put on the ShadowHost to avoid using Map()\n Object.keys(this.hosts).forEach(function(key) {\n delete this.hosts[key]._sortingId;\n }, this);\n }\n }\n ]);\n return Shadows;\n}();\nfunction sortShadowed(elements, context, sortElements) {\n var shadows = new Shadows(context, sortElements);\n var _elements = shadows.extractElements(elements);\n if (_elements.length === elements.length) {\n // no shadowed content found, no need to continue\n return sortElements(elements);\n }\n return shadows.sort(_elements);\n}\nfunction sortTabindex(elements) {\n // https://developer.mozilla.org/docs/Web/API/HTMLElement.tabIndex\n // elements with tabIndex \"0\" (including tabbableElements without tabIndex) should be navigated in the order they appear.\n // elements with a positive tabIndex:\n // Elements that have identical tabIndexes should be navigated in the order they appear.\n // Navigation proceeds from the lowest tabIndex to the highest tabIndex.\n // NOTE: sort implementation may be unstable and thus mess up DOM order,\n // that's why we build a map that's being sorted instead. If we were able to rely\n // on a stable sorting algorithm, sortTabindex() could be as simple as\n // elements.sort(function(a, b) { return a.tabIndex - b.tabIndex; });\n // at this time Chrome does not use a stable sorting algorithm\n // see http://blog.rodneyrehm.de/archives/14-Sorting-Were-Doing-It-Wrong.html#stability\n // NOTE: compareDocumentPosition seemed like more overhead than just sorting this with buckets\n // https://developer.mozilla.org/docs/Web/API/Node.compareDocumentPosition\n var map = {};\n var indexes = [];\n var normal = elements.filter(function(element) {\n // in Trident and Gecko SVGElement does not know about the tabIndex property\n var tabIndex = element.tabIndex;\n if (tabIndex === undefined) {\n tabIndex = tabindexValue(element);\n }\n // extract elements that don't need sorting\n if (tabIndex <= 0 || tabIndex === null || tabIndex === undefined) {\n return true;\n }\n if (!map[tabIndex]) {\n // create sortable bucket for dom-order-preservation of elements with the same tabIndex\n map[tabIndex] = [];\n // maintain a list of unique tabIndexes\n indexes.push(tabIndex);\n }\n // sort element into the proper bucket\n map[tabIndex].push(element);\n // element moved to sorting map, so not \"normal\" anymore\n return false;\n });\n // sort the tabindex ascending,\n // then resolve them to their appropriate buckets,\n // then flatten the array of arrays to an array\n var _elements = indexes.sort().map(function(tabIndex) {\n return map[tabIndex];\n }).reduceRight(function(previous, current) {\n return current.concat(previous);\n }, normal);\n return _elements;\n}\nvar supports$8 = void 0;\nfunction moveContextToBeginning(elements, context) {\n var pos = elements.indexOf(context);\n if (pos > 0) {\n var tmp = elements.splice(pos, 1);\n return tmp.concat(elements);\n }\n return elements;\n}\nfunction sortElements(elements, _context) {\n if (supports$8.tabsequenceAreaAtImgPosition) {\n // Some browsers sort <area> in DOM order, some place the <area>s\n // where the <img> referecing them would've been in DOM order.\n // https://github.com/medialize/ally.js/issues/5\n elements = sortArea(elements, _context);\n }\n elements = sortTabindex(elements);\n return elements;\n}\nfunction queryTabsequence() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, strategy = _ref.strategy;\n if (!supports$8) {\n supports$8 = _supports();\n }\n var _context = nodeArray(context)[0] || document.documentElement;\n var elements = queryTabbable({\n context: _context,\n includeContext: includeContext,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n });\n if (document.body.createShadowRoot && platform.is.BLINK) {\n // sort tabindex localized to shadow dom\n // see https://github.com/medialize/ally.js/issues/6\n elements = sortShadowed(elements, _context, sortElements);\n } else {\n elements = sortElements(elements, _context);\n }\n if (includeContext) {\n // if we include the context itself, it has to be the first\n // element of the sequence\n elements = moveContextToBeginning(elements, _context);\n }\n return elements;\n}\n// codes mostly cloned from https://github.com/keithamus/jwerty/blob/master/jwerty.js\n// deliberately not exposing characters like <,.-#* because they vary *wildly*\n// across keyboard layouts and may cause various problems\n// (e.g. \"*\" is \"Shift +\" on a German Mac keyboard)\n// (e.g. \"@\" is \"Alt L\" on a German Mac keyboard)\nvar keycode = {\n // Element Focus\n tab: 9,\n // Navigation\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n pageUp: 33,\n \"page-up\": 33,\n pageDown: 34,\n \"page-down\": 34,\n end: 35,\n home: 36,\n // Action\n enter: 13,\n escape: 27,\n space: 32,\n // Modifier\n shift: 16,\n capsLock: 20,\n \"caps-lock\": 20,\n ctrl: 17,\n alt: 18,\n meta: 91,\n // in firefox: 224\n // on mac (chrome): meta-left=91, meta-right=93\n // on win (IE11): meta-left=91, meta-right=92\n pause: 19,\n // Content Manipulation\n insert: 45,\n delete: 46,\n backspace: 8,\n // the same logical key may be identified through different keyCodes\n _alias: {\n 91: [\n 92,\n 93,\n 224\n ]\n }\n};\n// Function keys (112 - 137)\n// NOTE: not every keyboard knows F13+\nfor(var n = 1; n < 26; n++){\n keycode[\"f\" + n] = n + 111;\n}\n// Number keys (48-57, numpad 96-105)\n// NOTE: not every keyboard knows num-0+\nfor(var _n = 0; _n < 10; _n++){\n var code = _n + 48;\n var numCode = _n + 96;\n keycode[_n] = code;\n keycode[\"num-\" + _n] = numCode;\n keycode._alias[code] = [\n numCode\n ];\n}\n// Latin characters (65 - 90)\nfor(var _n2 = 0; _n2 < 26; _n2++){\n var _code = _n2 + 65;\n var name$1 = String.fromCharCode(_code).toLowerCase();\n keycode[name$1] = _code;\n}\nvar modifier = {\n alt: \"altKey\",\n ctrl: \"ctrlKey\",\n meta: \"metaKey\",\n shift: \"shiftKey\"\n};\nvar modifierSequence = Object.keys(modifier).map(function(name) {\n return modifier[name];\n});\nfunction createExpectedModifiers(ignoreModifiers) {\n var value = ignoreModifiers ? null : false;\n return {\n altKey: value,\n ctrlKey: value,\n metaKey: value,\n shiftKey: value\n };\n}\nfunction resolveModifiers(modifiers) {\n var ignoreModifiers = modifiers.indexOf(\"*\") !== -1;\n var expected = createExpectedModifiers(ignoreModifiers);\n modifiers.forEach(function(token) {\n if (token === \"*\") {\n // we've already covered the all-in operator\n return;\n }\n // we want the modifier pressed\n var value = true;\n var operator = token.slice(0, 1);\n if (operator === \"?\") {\n // we don't care if the modifier is pressed\n value = null;\n } else if (operator === \"!\") {\n // we do not want the modifier pressed\n value = false;\n }\n if (value !== true) {\n // compensate for the modifier's operator\n token = token.slice(1);\n }\n var propertyName = modifier[token];\n if (!propertyName) {\n throw new TypeError('Unknown modifier \"' + token + '\"');\n }\n expected[propertyName] = value;\n });\n return expected;\n}\nfunction resolveKey(key) {\n var code = keycode[key] || parseInt(key, 10);\n if (!code || typeof code !== \"number\" || isNaN(code)) {\n throw new TypeError('Unknown key \"' + key + '\"');\n }\n return [\n code\n ].concat(keycode._alias[code] || []);\n}\nfunction matchModifiers(expected, event) {\n // returns true on match\n return !modifierSequence.some(function(prop) {\n // returns true on mismatch\n return typeof expected[prop] === \"boolean\" && Boolean(event[prop]) !== expected[prop];\n });\n}\nfunction keyBinding(text) {\n return text.split(/\\s+/).map(function(_text) {\n var tokens = _text.split(\"+\");\n var _modifiers = resolveModifiers(tokens.slice(0, -1));\n var _keyCodes = resolveKey(tokens.slice(-1));\n return {\n keyCodes: _keyCodes,\n modifiers: _modifiers,\n matchModifiers: matchModifiers.bind(null, _modifiers)\n };\n });\n}\n// Node.compareDocumentPosition is available since IE9\n// see https://developer.mozilla.org/docs/Web/API/Node.compareDocumentPosition\n// callback returns true when element is contained by parent or is the parent suited for use with Array.some()\n/*\n USAGE:\n var isChildOf = getParentComparator({parent: someNode});\n listOfElements.some(isChildOf)\n*/ function getParentComparator() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, parent = _ref.parent, element = _ref.element, includeSelf = _ref.includeSelf;\n if (parent) {\n return function isChildOf(node) {\n return Boolean(includeSelf && node === parent || parent.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n } else if (element) {\n return function isParentOf(node) {\n return Boolean(includeSelf && element === node || node.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n }\n throw new TypeError(\"util/compare-position#getParentComparator required either options.parent or options.element\");\n}\n// Bug 286933 - Key events in the autocomplete popup should be hidden from page scripts\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=286933\nfunction whenKey() {\n var map = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var bindings = {};\n var context = nodeArray(map.context)[0] || document.documentElement;\n delete map.context;\n var filter = nodeArray(map.filter);\n delete map.filter;\n var mapKeys = Object.keys(map);\n if (!mapKeys.length) {\n throw new TypeError(\"when/key requires at least one option key\");\n }\n var registerBinding = function registerBinding(event) {\n event.keyCodes.forEach(function(code) {\n if (!bindings[code]) {\n bindings[code] = [];\n }\n bindings[code].push(event);\n });\n };\n mapKeys.forEach(function(text) {\n if (typeof map[text] !== \"function\") {\n throw new TypeError('when/key requires option[\"' + text + '\"] to be a function');\n }\n var addCallback = function addCallback(event) {\n event.callback = map[text];\n return event;\n };\n keyBinding(text).map(addCallback).forEach(registerBinding);\n });\n var handleKeyDown = function handleKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (filter.length) {\n // ignore elements within the exempted sub-trees\n var isParentOfElement = getParentComparator({\n element: event.target,\n includeSelf: true\n });\n if (filter.some(isParentOfElement)) {\n return;\n }\n }\n var key = event.keyCode || event.which;\n if (!bindings[key]) {\n return;\n }\n bindings[key].forEach(function(_event) {\n if (!_event.matchModifiers(event)) {\n return;\n }\n _event.callback.call(context, event, disengage);\n });\n };\n context.addEventListener(\"keydown\", handleKeyDown, false);\n var disengage = function disengage() {\n context.removeEventListener(\"keydown\", handleKeyDown, false);\n };\n return {\n disengage: disengage\n };\n}\nfunction _default(param) {\n let { context } = param === void 0 ? {} : param;\n if (!context) {\n context = document.documentElement;\n }\n // Make sure the supports tests are run before intercepting the Tab key,\n // or IE10 and IE11 will fail to process the first Tab key event. Not\n // limiting this warm-up to IE because it may be a problem elsewhere, too.\n queryTabsequence();\n return whenKey({\n // Safari on OSX may require ALT+TAB to reach links,\n // see https://github.com/medialize/ally.js/issues/146\n \"?alt+?shift+tab\": function altShiftTab(event) {\n // we're completely taking over the Tab key handling\n event.preventDefault();\n var sequence = queryTabsequence({\n context: context\n });\n var backward = event.shiftKey;\n var first = sequence[0];\n var last = sequence[sequence.length - 1];\n // wrap around first to last, last to first\n var source = backward ? first : last;\n var target = backward ? last : first;\n if (isActiveElement(source)) {\n target.focus();\n return;\n }\n // find current position in tabsequence\n var currentIndex = void 0;\n var found = sequence.some(function(element, index) {\n if (!isActiveElement(element)) {\n return false;\n }\n currentIndex = index;\n return true;\n });\n if (!found) {\n // redirect to first as we're not in our tabsequence\n first.focus();\n return;\n }\n // shift focus to previous/next element in the sequence\n var offset = backward ? -1 : 1;\n sequence[currentIndex + offset].focus();\n }\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=maintain--tab-focus.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9tYWludGFpbi0tdGFiLWZvY3VzLmpzIiwibWFwcGluZ3MiOiJBQUFBLGtCQUFrQixHQUFHLGNBQWM7QUFDbkMsbURBQW1EO0FBQ25ELGVBQWU7QUFDZixpQ0FBaUM7QUFDakMsRUFBRTtBQUNGLHlDQUF5QztBQUM1QjtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxrSEFBeUM7QUFDbEYsTUFBTUMsWUFBWSxXQUFXLEdBQUdGLHlCQUF5QkcsQ0FBQyxDQUFDRixtQkFBT0EsQ0FBQyxpR0FBNkI7QUFDaEcsTUFBTUcsYUFBYSxXQUFXLEdBQUdKLHlCQUF5QkcsQ0FBQyxDQUFDRixtQkFBT0EsQ0FBQyx1R0FBK0I7QUFDbkcseUZBQXlGO0FBQ3pGLDZFQUE2RTtBQUM3RSxTQUFTSSxVQUFVQyxLQUFLO0lBQ3BCLElBQUksQ0FBQ0EsT0FBTztRQUNSLE9BQU8sRUFBRTtJQUNiO0lBQ0EsSUFBSUMsTUFBTUMsT0FBTyxDQUFDRixRQUFRO1FBQ3RCLE9BQU9BO0lBQ1g7SUFDQSwrQ0FBK0M7SUFDL0MsSUFBSUEsTUFBTUcsUUFBUSxLQUFLQyxXQUFXO1FBQzlCLE9BQU87WUFDSEo7U0FDSDtJQUNMO0lBQ0EsSUFBSSxPQUFPQSxVQUFVLFVBQVU7UUFDM0JBLFFBQVFLLFNBQVNDLGdCQUFnQixDQUFDTjtJQUN0QztJQUNBLElBQUlBLE1BQU1PLE1BQU0sS0FBS0gsV0FBVztRQUM1QixPQUFPLEVBQUUsQ0FBQ0ksS0FBSyxDQUFDQyxJQUFJLENBQUNULE9BQU87SUFDaEM7SUFDQSxNQUFNLElBQUlVLFVBQVUsc0JBQXNCQyxPQUFPWDtBQUNyRDtBQUNBLFNBQVNZLGlCQUFpQkMsSUFBSTtJQUMxQixJQUFJQyxVQUFVRCxLQUFLQyxPQUFPLEVBQUVDLGFBQWFGLEtBQUtHLEtBQUssRUFBRUEsUUFBUUQsZUFBZVgsWUFBWSx1QkFBdUJXLFlBQVlFLGtCQUFrQkosS0FBS0ksZUFBZSxFQUFFQyxvQkFBb0JMLEtBQUtLLGlCQUFpQjtJQUM3TSxJQUFJQyxVQUFVcEIsVUFBVWUsUUFBUSxDQUFDLEVBQUU7SUFDbkMsSUFBSUcsbUJBQW1CRSxXQUFXQSxRQUFRaEIsUUFBUSxLQUFLaUIsS0FBS0MsYUFBYSxFQUFFO1FBQ3ZFRixVQUFVQSxRQUFRRyxlQUFlO0lBQ3JDO0lBQ0EsSUFBSSxDQUFDSCxXQUFXRCxtQkFBbUI7UUFDL0IsT0FBT2IsU0FBU2lCLGVBQWU7SUFDbkM7SUFDQSxJQUFJLENBQUNILFNBQVM7UUFDVixNQUFNLElBQUlULFVBQVVNLFFBQVE7SUFDaEM7SUFDQSxJQUFJRyxRQUFRaEIsUUFBUSxLQUFLaUIsS0FBS0csWUFBWSxJQUFJSixRQUFRaEIsUUFBUSxLQUFLaUIsS0FBS0ksc0JBQXNCLEVBQUU7UUFDNUYsTUFBTSxJQUFJZCxVQUFVTSxRQUFRO0lBQ2hDO0lBQ0EsT0FBT0c7QUFDWDtBQUNBLFNBQVNNO0lBQ0wsSUFBSVosT0FBT2EsVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBR1osVUFBVUQsS0FBS0MsT0FBTztJQUN6RyxJQUFJSyxVQUFVUCxpQkFBaUI7UUFDM0JJLE9BQU87UUFDUEYsU0FBU0E7SUFDYjtJQUNBLHNCQUFzQjtJQUN0QixJQUFJYSxZQUFZO0lBQ2hCLE1BQU1SLFFBQVE7UUFDVlEsWUFBWVI7UUFDWkEsVUFBVUEsUUFBUVMsVUFBVTtJQUNoQztJQUNBLDJEQUEyRDtJQUMzRCxpRUFBaUU7SUFDakUsSUFBSUQsVUFBVXhCLFFBQVEsS0FBS3dCLFVBQVVILHNCQUFzQixJQUFJRyxVQUFVRSxJQUFJLEVBQUU7UUFDM0UsMERBQTBEO1FBQzFELE9BQU9GLFVBQVVFLElBQUk7SUFDekI7SUFDQSxPQUFPO0FBQ1g7QUFDQSxTQUFTQyxZQUFZQyxJQUFJO0lBQ3JCLElBQUksQ0FBQ0EsTUFBTTtRQUNQLE9BQU8xQjtJQUNYO0lBQ0EsSUFBSTBCLEtBQUs1QixRQUFRLEtBQUtpQixLQUFLQyxhQUFhLEVBQUU7UUFDdEMsT0FBT1U7SUFDWDtJQUNBLE9BQU9BLEtBQUtDLGFBQWEsSUFBSTNCO0FBQ2pDO0FBQ0EsU0FBUzRCLGdCQUFnQm5CLE9BQU87SUFDNUIsSUFBSUssVUFBVVAsaUJBQWlCO1FBQzNCSSxPQUFPO1FBQ1BDLGlCQUFpQjtRQUNqQkgsU0FBU0E7SUFDYjtJQUNBLElBQUlvQixZQUFZSixZQUFZWDtJQUM1QixJQUFJZSxVQUFVQyxhQUFhLEtBQUtoQixTQUFTO1FBQ3JDLE9BQU87SUFDWDtJQUNBLElBQUlpQixhQUFhWCxjQUFjO1FBQzNCWCxTQUFTSztJQUNiO0lBQ0EsSUFBSWlCLGNBQWNBLFdBQVdDLFVBQVUsQ0FBQ0YsYUFBYSxLQUFLaEIsU0FBUztRQUMvRCxPQUFPO0lBQ1g7SUFDQSxPQUFPO0FBQ1g7QUFDQSxtREFBbUQ7QUFDbkQsMEVBQTBFO0FBQzFFLFNBQVNtQjtJQUNMLElBQUl6QixPQUFPYSxVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHWixVQUFVRCxLQUFLQyxPQUFPO0lBQ3pHLElBQUl5QixPQUFPLEVBQUU7SUFDYixJQUFJcEIsVUFBVVAsaUJBQWlCO1FBQzNCSSxPQUFPO1FBQ1BGLFNBQVNBO0lBQ2I7SUFDQSxNQUFNSyxRQUFRO1FBQ1ZvQixLQUFLQyxJQUFJLENBQUNyQjtRQUNWLG1EQUFtRDtRQUNuREEsVUFBVUEsUUFBUVMsVUFBVTtRQUM1QixJQUFJVCxXQUFXQSxRQUFRaEIsUUFBUSxLQUFLaUIsS0FBS0csWUFBWSxFQUFFO1lBQ25ESixVQUFVO1FBQ2Q7SUFDSjtJQUNBLE9BQU9vQjtBQUNYO0FBQ0EsaUVBQWlFO0FBQ2pFLGdFQUFnRTtBQUNoRSxJQUFJRSxRQUFRO0lBQ1I7SUFDQTtJQUNBO0lBQ0E7Q0FDSDtBQUNELElBQUlDLE9BQU87QUFDWCxTQUFTQyxlQUFleEIsT0FBTztJQUMzQnNCLE1BQU1HLElBQUksQ0FBQyxTQUFTQyxLQUFLO1FBQ3JCLElBQUksQ0FBQzFCLE9BQU8sQ0FBQzBCLE1BQU0sRUFBRTtZQUNqQixPQUFPO1FBQ1g7UUFDQUgsT0FBT0c7UUFDUCxPQUFPO0lBQ1g7QUFDSjtBQUNBLFNBQVNDLGVBQWUzQixPQUFPLEVBQUU0QixRQUFRO0lBQ3JDLElBQUksQ0FBQ0wsTUFBTTtRQUNQQyxlQUFleEI7SUFDbkI7SUFDQSxPQUFPQSxPQUFPLENBQUN1QixLQUFLLENBQUNLO0FBQ3pCO0FBQ0Esa0NBQWtDO0FBQ2xDLElBQUlDLFdBQVdDLEtBQUtDLEtBQUssQ0FBQ0QsS0FBS0UsU0FBUyxDQUFDdkQsVUFBVXdELE9BQU87QUFDMUQsbUJBQW1CO0FBQ25CLElBQUlDLEtBQUtMLFNBQVNLLEVBQUUsQ0FBQ0MsTUFBTSxJQUFJO0FBQy9CLElBQUlDLFVBQVVGLE9BQU87QUFDckIsSUFBSUcsVUFBVUgsR0FBRzdDLEtBQUssQ0FBQyxHQUFHLE9BQU87QUFDakMsSUFBSWlELE1BQU1KLE9BQU87QUFDakIsSUFBSUssTUFBTUwsT0FBTztBQUNqQixTQUFTO0FBQ1QsSUFBSU0sUUFBUVgsU0FBU1ksTUFBTSxLQUFLO0FBQ2hDLElBQUlDLFFBQVFiLFNBQVNZLE1BQU0sS0FBSztBQUNoQyxJQUFJRSxVQUFVZCxTQUFTWSxNQUFNLEtBQUs7QUFDbEMsSUFBSUcsT0FBT2YsU0FBU1ksTUFBTSxLQUFLO0FBQy9CLElBQUlJLFNBQVNoQixTQUFTWSxNQUFNLEtBQUs7QUFDakMsK0NBQStDO0FBQy9DLElBQUlLLFVBQVVDLFdBQVdsQixTQUFTaUIsT0FBTztBQUN6QyxJQUFJRSxlQUFlQyxLQUFLQyxLQUFLLENBQUNKO0FBQzlCakIsU0FBU21CLFlBQVksR0FBR0E7QUFDeEJuQixTQUFTc0IsRUFBRSxHQUFHO0lBQ1YsbUJBQW1CO0lBQ25CZixTQUFTQTtJQUNUQyxTQUFTQTtJQUNUQyxLQUFLQTtJQUNMQyxLQUFLQTtJQUNMLFNBQVM7SUFDVEMsT0FBT0E7SUFDUEUsT0FBT0E7SUFDUEMsU0FBU0E7SUFDVEMsTUFBTUE7SUFDTkMsUUFBUUE7SUFDUixxQkFBcUI7SUFDckJPLEtBQUtULFdBQVdLLGlCQUFpQjtJQUNqQ0ssTUFBTVYsV0FBV0ssaUJBQWlCO0lBQ2xDTSxNQUFNWCxXQUFXSyxpQkFBaUI7QUFDdEM7QUFDQSxTQUFTTztJQUNMLElBQUlDLE9BQU87UUFDUCxnREFBZ0Q7UUFDaER4QyxlQUFlOUIsU0FBUzhCLGFBQWE7UUFDckMsa0RBQWtEO1FBQ2xEeUMsaUJBQWlCQyxPQUFPQyxTQUFTO1FBQ2pDQyxrQkFBa0JGLE9BQU9HLFVBQVU7UUFDbkNDLGVBQWU1RSxTQUFTNkUsSUFBSSxDQUFDSixTQUFTO1FBQ3RDSyxnQkFBZ0I5RSxTQUFTNkUsSUFBSSxDQUFDRixVQUFVO0lBQzVDO0lBQ0Esc0VBQXNFO0lBQ3RFLG1FQUFtRTtJQUNuRSxJQUFJSSxTQUFTL0UsU0FBU2dGLGFBQWEsQ0FBQztJQUNwQ0QsT0FBT0UsWUFBWSxDQUFDLFNBQVM7SUFDN0JGLE9BQU9FLFlBQVksQ0FBQyxhQUFhO0lBQ2pDRixPQUFPRSxZQUFZLENBQUMsYUFBYTtJQUNqQ0YsT0FBT0UsWUFBWSxDQUFDLGVBQWU7SUFDbkNqRixTQUFTNkUsSUFBSSxDQUFDSyxXQUFXLENBQUNIO0lBQzFCLElBQUlJLFVBQVVKLE9BQU9LLGFBQWE7SUFDbEMsSUFBSXZELFlBQVlzRCxRQUFRbkYsUUFBUTtJQUNoQzZCLFVBQVV3RCxJQUFJO0lBQ2R4RCxVQUFVeUQsS0FBSztJQUNmLElBQUlDLFVBQVUxRCxVQUFVbUQsYUFBYSxDQUFDO0lBQ3RDbkQsVUFBVWdELElBQUksQ0FBQ0ssV0FBVyxDQUFDSztJQUMzQmpCLEtBQUtTLE1BQU0sR0FBR0E7SUFDZFQsS0FBS2lCLE9BQU8sR0FBR0E7SUFDZmpCLEtBQUtFLE1BQU0sR0FBR1c7SUFDZGIsS0FBS3RFLFFBQVEsR0FBRzZCO0lBQ2hCLE9BQU95QztBQUNYO0FBQ0EsbUJBQW1CO0FBQ25CLHlCQUF5QjtBQUN6QixpRUFBaUU7QUFDakUsNkJBQTZCO0FBQzdCLDhGQUE4RjtBQUM5Riw4RUFBOEU7QUFDOUUsK0JBQStCO0FBQy9CLGlGQUFpRjtBQUNqRixTQUFTa0IsS0FBS2xCLElBQUksRUFBRW1CLE9BQU87SUFDdkIsd0NBQXdDO0lBQ3hDbkIsS0FBS2lCLE9BQU8sQ0FBQ0csU0FBUyxHQUFHO0lBQ3pCLCtDQUErQztJQUMvQyxJQUFJNUUsVUFBVSxPQUFPMkUsUUFBUTNFLE9BQU8sS0FBSyxXQUFXd0QsS0FBS3RFLFFBQVEsQ0FBQ2dGLGFBQWEsQ0FBQ1MsUUFBUTNFLE9BQU8sSUFBSTJFLFFBQVEzRSxPQUFPLENBQUN3RCxLQUFLaUIsT0FBTyxFQUFFakIsS0FBS3RFLFFBQVE7SUFDOUksa0RBQWtEO0lBQ2xELHlDQUF5QztJQUN6QyxJQUFJMkYsUUFBUUYsUUFBUUcsTUFBTSxJQUFJSCxRQUFRRyxNQUFNLENBQUM5RSxTQUFTd0QsS0FBS2lCLE9BQU8sRUFBRWpCLEtBQUt0RSxRQUFRO0lBQ2pGLElBQUksQ0FBQzJGLFNBQVNBLFVBQVUsT0FBTztRQUMzQkEsUUFBUTdFO0lBQ1o7SUFDQSxzREFBc0Q7SUFDdEQsQ0FBQ0EsUUFBUVMsVUFBVSxJQUFJK0MsS0FBS2lCLE9BQU8sQ0FBQ0wsV0FBVyxDQUFDcEU7SUFDaEQsMkRBQTJEO0lBQzNENkUsU0FBU0EsTUFBTUEsS0FBSyxJQUFJQSxNQUFNQSxLQUFLO0lBQ25DLHlCQUF5QjtJQUN6QixPQUFPRixRQUFRSSxRQUFRLEdBQUdKLFFBQVFJLFFBQVEsQ0FBQy9FLFNBQVM2RSxPQUFPckIsS0FBS3RFLFFBQVEsSUFBSXNFLEtBQUt0RSxRQUFRLENBQUM4QixhQUFhLEtBQUs2RDtBQUNoSDtBQUNBLFNBQVNHLE1BQU14QixJQUFJO0lBQ2YsdURBQXVEO0lBQ3ZELElBQUlBLEtBQUt4QyxhQUFhLEtBQUs5QixTQUFTNkUsSUFBSSxFQUFFO1FBQ3RDN0UsU0FBUzhCLGFBQWEsSUFBSTlCLFNBQVM4QixhQUFhLENBQUNpRSxJQUFJLElBQUkvRixTQUFTOEIsYUFBYSxDQUFDaUUsSUFBSTtRQUNwRixJQUFJcEQsU0FBU3NCLEVBQUUsQ0FBQ0UsSUFBSSxFQUFFO1lBQ2xCLDJFQUEyRTtZQUMzRW5FLFNBQVM2RSxJQUFJLENBQUNjLEtBQUs7UUFDdkI7SUFDSixPQUFPO1FBQ0hyQixLQUFLeEMsYUFBYSxJQUFJd0MsS0FBS3hDLGFBQWEsQ0FBQzZELEtBQUssSUFBSXJCLEtBQUt4QyxhQUFhLENBQUM2RCxLQUFLO0lBQzlFO0lBQ0EzRixTQUFTNkUsSUFBSSxDQUFDbUIsV0FBVyxDQUFDMUIsS0FBS1MsTUFBTTtJQUNyQywwQkFBMEI7SUFDMUJQLE9BQU9DLFNBQVMsR0FBR0gsS0FBS0MsZUFBZTtJQUN2Q0MsT0FBT0csVUFBVSxHQUFHTCxLQUFLSSxnQkFBZ0I7SUFDekMxRSxTQUFTNkUsSUFBSSxDQUFDSixTQUFTLEdBQUdILEtBQUtNLGFBQWE7SUFDNUM1RSxTQUFTNkUsSUFBSSxDQUFDRixVQUFVLEdBQUdMLEtBQUtRLGNBQWM7QUFDbEQ7QUFDQSxTQUFTbUIsWUFBWUMsS0FBSztJQUN0QixJQUFJNUIsT0FBT0Q7SUFDWCxJQUFJOEIsVUFBVSxDQUFDO0lBQ2ZySCxPQUFPc0gsSUFBSSxDQUFDRixPQUFPRyxHQUFHLENBQUMsU0FBU0MsR0FBRztRQUMvQkgsT0FBTyxDQUFDRyxJQUFJLEdBQUdkLEtBQUtsQixNQUFNNEIsS0FBSyxDQUFDSSxJQUFJO0lBQ3hDO0lBQ0FSLE1BQU14QjtJQUNOLE9BQU82QjtBQUNYO0FBQ0Esa0RBQWtEO0FBQ2xELElBQUlJLFlBQVk7QUFDaEI7Ozs7OztDQU1DLEdBQUcsU0FBU0MsaUJBQWlCRixHQUFHO0lBQzdCLGtFQUFrRTtJQUNsRSw4Q0FBOEM7SUFDOUMsSUFBSWhDLE9BQU8sS0FBSztJQUNoQixJQUFJO1FBQ0FBLE9BQU9FLE9BQU9pQyxZQUFZLElBQUlqQyxPQUFPaUMsWUFBWSxDQUFDQyxPQUFPLENBQUNKO1FBQzFEaEMsT0FBT0EsT0FBTzFCLEtBQUtDLEtBQUssQ0FBQ3lCLFFBQVEsQ0FBQztJQUN0QyxFQUFFLE9BQU9xQyxHQUFHO1FBQ1JyQyxPQUFPLENBQUM7SUFDWjtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxTQUFTc0Msa0JBQWtCTixHQUFHLEVBQUVySCxLQUFLO0lBQ2pDLElBQUksQ0FBQ2UsU0FBUzZHLFFBQVEsSUFBSTtRQUN0QiwyRUFBMkU7UUFDM0Usd0VBQXdFO1FBQ3hFLGdGQUFnRjtRQUNoRixJQUFJO1lBQ0FyQyxPQUFPaUMsWUFBWSxJQUFJakMsT0FBT2lDLFlBQVksQ0FBQ0ssVUFBVSxDQUFDUjtRQUMxRCxFQUFFLE9BQU9LLEdBQUc7UUFDWixTQUFTO1FBQ1Q7UUFDQTtJQUNKO0lBQ0EsSUFBSTtRQUNBbkMsT0FBT2lDLFlBQVksSUFBSWpDLE9BQU9pQyxZQUFZLENBQUNNLE9BQU8sQ0FBQ1QsS0FBSzFELEtBQUtFLFNBQVMsQ0FBQzdEO0lBQzNFLEVBQUUsT0FBTzBILEdBQUc7SUFDWixTQUFTO0lBQ1Q7QUFDSjtBQUNBLElBQUlLLFlBQVksTUFBMkQsSUFBSTtBQUMvRSxJQUFJRSxXQUFXO0FBQ2YsSUFBSUMsUUFBUVgsaUJBQWlCVTtBQUM3QiwwRUFBMEU7QUFDMUUsSUFBSUMsTUFBTUgsU0FBUyxLQUFLQSxhQUFhRyxNQUFNdkQsT0FBTyxLQUFLMkMsV0FBVztJQUM5RFksUUFBUSxDQUFDO0FBQ2I7QUFDQUEsTUFBTUgsU0FBUyxHQUFHQTtBQUNsQkcsTUFBTXZELE9BQU8sR0FBRzJDO0FBQ2hCLElBQUlhLFVBQVU7SUFDVmpJLEtBQUssU0FBU0E7UUFDVixPQUFPZ0k7SUFDWDtJQUNBRSxLQUFLLFNBQVNBLElBQUlDLE1BQU07UUFDcEJ4SSxPQUFPc0gsSUFBSSxDQUFDa0IsUUFBUUMsT0FBTyxDQUFDLFNBQVNqQixHQUFHO1lBQ3BDYSxLQUFLLENBQUNiLElBQUksR0FBR2dCLE1BQU0sQ0FBQ2hCLElBQUk7UUFDNUI7UUFDQWEsTUFBTUssSUFBSSxHQUFHLElBQUlDLE9BQU9DLFdBQVc7UUFDbkNkLGtCQUFrQk0sVUFBVUM7SUFDaEM7QUFDSjtBQUNBLFNBQVNRO0lBQ0wsSUFBSUMsYUFBYSxLQUFLO0lBQ3RCLDhEQUE4RDtJQUM5RCx1REFBdUQ7SUFDdkQsNkRBQTZEO0lBQzdELElBQUk7UUFDQTVILFNBQVM2SCxhQUFhLENBQUM7UUFDdkJELGFBQWE7SUFDakIsRUFBRSxPQUFPRSxtQkFBbUI7UUFDeEIsSUFBSTtZQUNBLGdEQUFnRDtZQUNoRCw2REFBNkQ7WUFDN0Q5SCxTQUFTNkgsYUFBYSxDQUFDO1lBQ3ZCRCxhQUFhO1FBQ2pCLEVBQUUsT0FBT0csUUFBUTtZQUNiSCxhQUFhO1FBQ2pCO0lBQ0o7SUFDQSxPQUFPQTtBQUNYO0FBQ0EsSUFBSUksTUFBTTtBQUNWLHNFQUFzRTtBQUN0RSxJQUFJQyx1QkFBdUI7SUFDdkJuSCxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHLHlDQUF5QyxvREFBb0Qsc0VBQXNFc0MsTUFBTTtRQUM3TCxPQUFPbEgsUUFBUStHLGFBQWEsQ0FBQztJQUNqQztBQUNKO0FBQ0Esc0VBQXNFO0FBQ3RFLElBQUlLLG9CQUFvQjtJQUNwQnBILFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVE0RSxTQUFTLEdBQUcseUNBQXlDLCtFQUErRSx3REFBd0RzQyxNQUFNO1FBQzFNLE9BQU87SUFDWDtJQUNBbkMsVUFBVSxTQUFTQSxTQUFTL0UsT0FBTyxFQUFFcUgsV0FBVyxFQUFFdEcsU0FBUztRQUN2RCxJQUFJYyxTQUFTc0IsRUFBRSxDQUFDVCxLQUFLLEVBQUU7WUFDbkIsdURBQXVEO1lBQ3ZELHFFQUFxRTtZQUNyRSxPQUFPO1FBQ1g7UUFDQSxJQUFJbUMsUUFBUTdFLFFBQVErRyxhQUFhLENBQUM7UUFDbENsQyxNQUFNQSxLQUFLO1FBQ1gsT0FBTzlELFVBQVVDLGFBQWEsS0FBSzZEO0lBQ3ZDO0FBQ0o7QUFDQSxzRUFBc0U7QUFDdEUsSUFBSXlDLHVCQUF1QjtJQUN2QnRILFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVE0RSxTQUFTLEdBQUcsMENBQTBDLG9EQUFvRCx5REFBeURzQyxNQUFNO1FBQ2pMLE9BQU9sSCxRQUFRK0csYUFBYSxDQUFDO0lBQ2pDO0lBQ0FoQyxVQUFVLFNBQVNBLFNBQVMvRSxPQUFPLEVBQUVxSCxXQUFXLEVBQUV0RyxTQUFTO1FBQ3ZELElBQUljLFNBQVNzQixFQUFFLENBQUNULEtBQUssRUFBRTtZQUNuQix1REFBdUQ7WUFDdkQscUVBQXFFO1lBQ3JFLE9BQU87UUFDWDtRQUNBLE9BQU8zQixVQUFVQyxhQUFhLEtBQUtxRztJQUN2QztBQUNKO0FBQ0EsSUFBSUUsNEJBQTRCO0lBQzVCaEcsTUFBTTtJQUNOdkIsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQixJQUFJO1lBQ0Esc0ZBQXNGO1lBQ3RGQSxRQUFRbUUsWUFBWSxDQUFDLE9BQU8rQztRQUNoQyxFQUFFLE9BQU9yQixHQUFHO1FBQ1oseUNBQXlDO1FBQ3pDO0lBQ0o7QUFDSjtBQUNBLElBQUkyQixhQUFhO0FBQ2pCLHVEQUF1RDtBQUN2RCxzRUFBc0U7QUFDdEUsSUFBSUMsc0JBQXNCO0lBQ3RCekgsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUTRFLFNBQVMsR0FBRyxtR0FBbUcsc0RBQXNENEMsYUFBYTtRQUMxTCxPQUFPeEgsUUFBUStHLGFBQWEsQ0FBQztJQUNqQztBQUNKO0FBQ0EsNEVBQTRFO0FBQzVFLElBQUlXLGtDQUFrQztJQUNsQzFILFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVFtRSxZQUFZLENBQUMsWUFBWTtRQUNqQ25FLFFBQVFtRSxZQUFZLENBQUMsU0FBUztRQUM5Qm5FLFFBQVE0RSxTQUFTLEdBQUc7UUFDcEIsT0FBTzVFLFFBQVErRyxhQUFhLENBQUM7SUFDakM7QUFDSjtBQUNBLHdGQUF3RjtBQUN4Riw2RkFBNkY7QUFDN0YsbURBQW1EO0FBQ25ELHVFQUF1RTtBQUN2RSxJQUFJWSx3QkFBd0I7SUFDeEIzSCxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRbUUsWUFBWSxDQUFDLFlBQVk7UUFDakNuRSxRQUFRbUUsWUFBWSxDQUFDLFlBQVk7SUFDckM7QUFDSjtBQUNBLElBQUl5RCxnQkFBZ0I7SUFDaEI1SCxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHO0lBQ3hCO0FBQ0o7QUFDQSxzREFBc0Q7QUFDdEQsSUFBSWlELHdCQUF3QjtJQUN4QjdILFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVFtRSxZQUFZLENBQUMsU0FBUztRQUM5Qm5FLFFBQVE0RSxTQUFTLEdBQUc7SUFDeEI7QUFDSjtBQUNBLHdEQUF3RDtBQUN4RCx3RUFBd0U7QUFDeEUseUVBQXlFO0FBQ3pFLElBQUlrRCxvQkFBb0I7SUFDcEI5SCxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRbUUsWUFBWSxDQUFDLFlBQVk7UUFDakNuRSxRQUFRbUUsWUFBWSxDQUFDLFlBQVk7SUFDckM7QUFDSjtBQUNBLHVEQUF1RDtBQUN2RCx1REFBdUQ7QUFDdkQscUVBQXFFO0FBQ3JFLElBQUk0RCxnQkFBZ0I7SUFDaEIvSCxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRZ0ksSUFBSSxHQUFHO1FBQ2ZoSSxRQUFRNEUsU0FBUyxHQUFHLHFCQUFxQnNDLE1BQU07UUFDL0MsT0FBT2xILFFBQVErRyxhQUFhLENBQUM7SUFDakM7QUFDSjtBQUNBLHVEQUF1RDtBQUN2RCxzRUFBc0U7QUFDdEUsSUFBSWtCLHlCQUF5QjtJQUN6QmpJLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVE0RSxTQUFTLEdBQUcscUdBQXFHLGlFQUFpRSxVQUFVc0MsTUFBTTtRQUMxTSxPQUFPbEgsUUFBUStHLGFBQWEsQ0FBQztJQUNqQztBQUNKO0FBQ0EsSUFBSW1CLHNCQUFzQjtJQUN0QmxJLFNBQVMsU0FBU0EsUUFBUXlFLE9BQU8sRUFBRTFELFNBQVM7UUFDeEMsSUFBSWtELFNBQVNsRCxVQUFVbUQsYUFBYSxDQUFDO1FBQ3JDLGdGQUFnRjtRQUNoRk8sUUFBUUwsV0FBVyxDQUFDSDtRQUNwQixpRkFBaUY7UUFDakYsSUFBSWtFLGlCQUFpQmxFLE9BQU9LLGFBQWEsQ0FBQ3BGLFFBQVE7UUFDbERpSixlQUFlNUQsSUFBSTtRQUNuQjRELGVBQWUzRCxLQUFLO1FBQ3BCLE9BQU9QO0lBQ1g7SUFDQWEsUUFBUSxTQUFTQSxPQUFPYixNQUFNO1FBQzFCQSxPQUFPbUUsS0FBSyxDQUFDQyxVQUFVLEdBQUc7UUFDMUIsSUFBSUYsaUJBQWlCbEUsT0FBT0ssYUFBYSxDQUFDcEYsUUFBUTtRQUNsRCxJQUFJTCxRQUFRc0osZUFBZWpFLGFBQWEsQ0FBQztRQUN6Q2lFLGVBQWVwRSxJQUFJLENBQUNLLFdBQVcsQ0FBQ3ZGO1FBQ2hDLE9BQU9BO0lBQ1g7SUFDQWtHLFVBQVUsU0FBU0EsU0FBU2QsTUFBTTtRQUM5QixJQUFJa0UsaUJBQWlCbEUsT0FBT0ssYUFBYSxDQUFDcEYsUUFBUTtRQUNsRCxJQUFJMkYsUUFBUXNELGVBQWVwQixhQUFhLENBQUM7UUFDekMsT0FBT29CLGVBQWVuSCxhQUFhLEtBQUs2RDtJQUM1QztBQUNKO0FBQ0EsSUFBSXlELFNBQVMsQ0FBQ3pHLFNBQVNzQixFQUFFLENBQUNOLE1BQU07QUFDaEMsU0FBUzBGO0lBQ0wsT0FBT0Q7QUFDWDtBQUNBLDBFQUEwRTtBQUMxRSw0RUFBNEU7QUFDNUUsSUFBSUUsdUJBQXVCO0lBQ3ZCeEksU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUW1FLFlBQVksQ0FBQyxZQUFZO0lBQ3JDO0FBQ0o7QUFDQSxJQUFJc0UscUJBQXFCO0lBQ3JCekksU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUW1FLFlBQVksQ0FBQyxZQUFZO0lBQ3JDO0lBQ0FZLFVBQVUsU0FBU0EsU0FBUy9FLE9BQU8sRUFBRXFILFdBQVcsRUFBRXRHLFNBQVM7UUFDdkQsc0VBQXNFO1FBQ3RFLGlDQUFpQyxHQUFHLElBQUkySCx1Q0FBdUMxSSxRQUFRMkksWUFBWTtRQUNuRyxnQ0FBZ0MsR0FBRzNJLFFBQVE2RSxLQUFLO1FBQ2hELE9BQU85RCxVQUFVQyxhQUFhLEtBQUtoQjtJQUN2QztBQUNKO0FBQ0EsSUFBSTRJLE1BQU0sd0ZBQXdGLHVHQUF1RztBQUN6TSxxREFBcUQ7QUFDckQsSUFBSUMsdUJBQXVCO0lBQ3ZCN0ksU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUW1FLFlBQVksQ0FBQyxRQUFRO1FBQzdCbkUsUUFBUW1FLFlBQVksQ0FBQyxRQUFReUU7UUFDN0I1SSxRQUFRbUUsWUFBWSxDQUFDLFNBQVM7UUFDOUJuRSxRQUFRbUUsWUFBWSxDQUFDLFVBQVU7UUFDL0JuRSxRQUFRb0ksS0FBSyxDQUFDQyxVQUFVLEdBQUc7SUFDL0I7QUFDSjtBQUNBLHFEQUFxRDtBQUNyRCxJQUFJUyxpQkFBaUI7SUFDakJ2SCxNQUFNO0lBQ052QixTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRbUUsWUFBWSxDQUFDLFFBQVE7UUFDN0JuRSxRQUFRbUUsWUFBWSxDQUFDLFFBQVF5RTtRQUM3QjVJLFFBQVFtRSxZQUFZLENBQUMsU0FBUztRQUM5Qm5FLFFBQVFtRSxZQUFZLENBQUMsVUFBVTtJQUNuQztJQUNBWSxVQUFVLFNBQVNBLFNBQVMvRSxPQUFPLEVBQUVxSCxXQUFXLEVBQUV0RyxTQUFTO1FBQ3ZELElBQUljLFNBQVNzQixFQUFFLENBQUNULEtBQUssRUFBRTtZQUNuQixxSEFBcUg7WUFDckgsK0hBQStIO1lBQy9ILE9BQU87UUFDWDtRQUNBLE9BQU8zQixVQUFVQyxhQUFhLEtBQUtoQjtJQUN2QztBQUNKO0FBQ0EsK0RBQStEO0FBQy9ELElBQUkrSSxXQUFXLENBQUNsSCxTQUFTc0IsRUFBRSxDQUFDQyxHQUFHO0FBQy9CLFNBQVM0RjtJQUNMLE9BQU9EO0FBQ1g7QUFDQSxJQUFJRSx5QkFBeUI7SUFDekJqSixTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHLHVHQUF1RyxxREFBcUQsVUFBVXNDLE1BQU07UUFDaE0saUNBQWlDO1FBQ2pDLE9BQU9sSCxRQUFRK0csYUFBYSxDQUFDO0lBQ2pDO0lBQ0FoQyxVQUFVLFNBQVNBLFNBQVMvRSxPQUFPLEVBQUVxSCxXQUFXLEVBQUV0RyxTQUFTO1FBQ3ZELElBQUltSSxTQUFTbEosUUFBUStHLGFBQWEsQ0FBQztRQUNuQyxPQUFPaEcsVUFBVUMsYUFBYSxLQUFLa0k7SUFDdkM7QUFDSjtBQUNBLCtEQUErRDtBQUMvRCxJQUFJQyxzQkFBc0I7SUFDdEJuSixTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHO1FBQ3BCLG9DQUFvQztRQUNwQyxPQUFPO0lBQ1g7SUFDQUcsVUFBVSxTQUFTQSxTQUFTL0UsT0FBTyxFQUFFcUgsV0FBVyxFQUFFdEcsU0FBUztRQUN2RCxJQUFJcUksWUFBWXBKLFFBQVErRyxhQUFhLENBQUM7UUFDdEMsSUFBSXNDLFdBQVdySixRQUFRK0csYUFBYSxDQUFDO1FBQ3JDLDJGQUEyRjtRQUMzRiwyREFBMkQ7UUFDM0QvRyxRQUFRNkUsS0FBSztRQUNiN0UsUUFBUStHLGFBQWEsQ0FBQyxVQUFVbEMsS0FBSztRQUNyQyxPQUFPOUQsVUFBVUMsYUFBYSxLQUFLb0ksYUFBYSxlQUFlckksVUFBVUMsYUFBYSxLQUFLcUksWUFBWSxjQUFjO0lBQ3pIO0FBQ0o7QUFDQSxpREFBaUQ7QUFDakQsSUFBSUMsa0JBQWtCO0lBQ2xCdEosU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUW1FLFlBQVksQ0FBQyxTQUFTO1FBQzlCbkUsUUFBUTRFLFNBQVMsR0FBRztRQUNwQixPQUFPNUUsUUFBUStHLGFBQWEsQ0FBQztJQUNqQztBQUNKO0FBQ0EsaURBQWlEO0FBQ2pELElBQUl3QyxzQ0FBc0M7SUFDdEN2SixTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRbUUsWUFBWSxDQUFDLFNBQVM7UUFDOUJuRSxRQUFRNEUsU0FBUyxHQUFHO0lBQ3hCO0FBQ0o7QUFDQSxpREFBaUQ7QUFDakQsSUFBSTRFLHVCQUF1QjtJQUN2QnhKLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVFtRSxZQUFZLENBQUMsU0FBUztRQUM5Qm5FLFFBQVE0RSxTQUFTLEdBQUc7SUFDeEI7QUFDSjtBQUNBLElBQUk2RSxlQUFlO0lBQ2Z6SixTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHO1FBQ3BCLE9BQU81RSxRQUFRMEosaUJBQWlCO0lBQ3BDO0FBQ0o7QUFDQSxTQUFTQztJQUNMLHdGQUF3RjtJQUN4Riw0Q0FBNEM7SUFDNUMsSUFBSUMsZ0JBQWdCMUssU0FBUzJLLGVBQWUsQ0FBQyw4QkFBOEI7SUFDM0VELGNBQWNFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDNUwsS0FBSyxHQUFHO0lBQ3BDeUwsY0FBY0ksTUFBTSxDQUFDRCxPQUFPLENBQUM1TCxLQUFLLEdBQUc7SUFDckN5TCxjQUFjeEYsV0FBVyxDQUFDbEYsU0FBU2dGLGFBQWEsQ0FBQztJQUNqRDBGLGNBQWNLLFNBQVMsQ0FBQ0MsSUFBSSxHQUFHO0lBQy9CLE9BQU9OO0FBQ1g7QUFDQSxTQUFTTywwQkFBMEJuSyxPQUFPO0lBQ3RDLDJDQUEyQztJQUMzQyxtREFBbUQ7SUFDbkQsaURBQWlEO0lBQ2pELElBQUlvSyxlQUFlcEssUUFBUXFLLGVBQWUsSUFBSXJLLFFBQVFzSyxRQUFRLENBQUNDLFdBQVcsT0FBTztJQUNqRixJQUFJLENBQUNILGNBQWM7UUFDZixPQUFPO0lBQ1g7SUFDQSw0RUFBNEU7SUFDNUUsSUFBSVIsZ0JBQWdCRDtJQUNwQjNKLFFBQVFvRSxXQUFXLENBQUN3RjtJQUNwQixJQUFJL0ssUUFBUStLLGNBQWM3QyxhQUFhLENBQUM7SUFDeENsSSxNQUFNZ0csS0FBSztJQUNYLGdEQUFnRDtJQUNoRCxvREFBb0Q7SUFDcEQsaURBQWlEO0lBQ2pELG1DQUFtQztJQUNuQ2hHLE1BQU0yTCxRQUFRLEdBQUc7SUFDakIsV0FBVztJQUNYeEssUUFBUWtGLFdBQVcsQ0FBQzBFO0lBQ3BCLE9BQU87QUFDWDtBQUNBLFNBQVNhLFNBQVN6SyxPQUFPO0lBQ3JCLE9BQU8sd0ZBQXdGQSxVQUFVO0FBQzdHO0FBQ0EsU0FBUzZFLE1BQU03RSxPQUFPO0lBQ2xCLElBQUlBLFFBQVE2RSxLQUFLLEVBQUU7UUFDZjtJQUNKO0lBQ0EsSUFBSTtRQUNBNkYsWUFBWUMsU0FBUyxDQUFDOUYsS0FBSyxDQUFDdkYsSUFBSSxDQUFDVTtJQUNyQyxFQUFFLE9BQU82RixHQUFHO1FBQ1JzRSwwQkFBMEJuSztJQUM5QjtBQUNKO0FBQ0EsU0FBUytFLFNBQVMvRSxPQUFPLEVBQUVxSCxXQUFXLEVBQUV0RyxTQUFTO0lBQzdDOEQsTUFBTXdDO0lBQ04sT0FBT3RHLFVBQVVDLGFBQWEsS0FBS3FHO0FBQ3ZDO0FBQ0EsSUFBSXVELDZCQUE2QjtJQUM3QjVLLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVE0RSxTQUFTLEdBQUc2RixTQUFTO1FBQzdCLE9BQU96SyxRQUFRK0csYUFBYSxDQUFDO0lBQ2pDO0lBQ0FoQyxVQUFVQTtBQUNkO0FBQ0EsSUFBSThGLDRCQUE0QjtJQUM1QjdLLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVE0RSxTQUFTLEdBQUc2RixTQUFTO1FBQzdCLE9BQU96SyxRQUFRK0csYUFBYSxDQUFDO0lBQ2pDO0lBQ0FoQyxVQUFVQTtBQUNkO0FBQ0EsSUFBSStGLG9DQUFvQztJQUNwQzlLLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVE0RSxTQUFTLEdBQUc2RixTQUFTO1FBQzdCLE9BQU96SyxRQUFRK0csYUFBYSxDQUFDO0lBQ2pDO0lBQ0FoQyxVQUFVQTtBQUNkO0FBQ0EsSUFBSWdHLHNCQUFzQjtJQUN0Qi9LLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVE0RSxTQUFTLEdBQUc2RixTQUFTO1lBQ3pCO1lBQ0E7U0FDSCxDQUFDTyxJQUFJLENBQUM7UUFDUCxPQUFPaEwsUUFBUStHLGFBQWEsQ0FBQztJQUNqQztJQUNBaEMsVUFBVUE7QUFDZDtBQUNBLElBQUlrRyxnQ0FBZ0M7SUFDaENqTCxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHNkYsU0FBUztRQUM3QiwwRkFBMEY7UUFDMUYsT0FBT3pLLFFBQVErRyxhQUFhLENBQUMsb0JBQW9CL0csUUFBUWtMLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLEVBQUU7SUFDckc7SUFDQW5HLFVBQVVBO0FBQ2Q7QUFDQSxrRkFBa0Y7QUFDbEYsZ0ZBQWdGO0FBQ2hGLDJDQUEyQztBQUMzQywyREFBMkQ7QUFDM0QsSUFBSW9HLFdBQVdDLFFBQVF2SixTQUFTc0IsRUFBRSxDQUFDVCxLQUFLLElBQUksT0FBTzJJLGVBQWUsZUFBZUEsV0FBV1YsU0FBUyxDQUFDOUYsS0FBSztBQUMzRyxTQUFTeUc7SUFDTCxPQUFPSDtBQUNYO0FBQ0EsSUFBSUksV0FBVztJQUNYdkwsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUTRFLFNBQVMsR0FBRzZGLFNBQVM7UUFDN0IsT0FBT3pLLFFBQVF3TCxVQUFVO0lBQzdCO0lBQ0F6RyxVQUFVQTtBQUNkO0FBQ0EsMEVBQTBFO0FBQzFFLDRFQUE0RTtBQUM1RSxJQUFJMEcsa0NBQWtDO0lBQ2xDekwsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUW1FLFlBQVksQ0FBQyxZQUFZO0lBQ3JDO0FBQ0o7QUFDQSxJQUFJdUgsYUFBYTtJQUNiMUwsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTyxFQUFFeUUsT0FBTyxFQUFFMUQsU0FBUztRQUMvQyw2REFBNkQ7UUFDN0QsNkNBQTZDO1FBQzdDLGdEQUFnRDtRQUNoRCxJQUFJNEssV0FBVzVLLFVBQVU2SyxzQkFBc0I7UUFDL0NELFNBQVMvRyxTQUFTLEdBQUc7UUFDckI1RSxRQUFRb0UsV0FBVyxDQUFDdUg7SUFDeEI7QUFDSjtBQUNBLElBQUlFLDRCQUE0QjtJQUM1QjdMLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0IsSUFBSTtZQUNBLHNGQUFzRjtZQUN0RkEsUUFBUW1FLFlBQVksQ0FBQyxPQUFPK0M7UUFDaEMsRUFBRSxPQUFPckIsR0FBRztRQUNaLHlDQUF5QztRQUN6QztJQUNKO0FBQ0o7QUFDQSx5REFBeUQ7QUFDekQsSUFBSWlHLFdBQVdqSyxTQUFTc0IsRUFBRSxDQUFDVCxLQUFLLElBQUliLFNBQVNzQixFQUFFLENBQUNSLE9BQU8sSUFBSWQsU0FBU3NCLEVBQUUsQ0FBQ1AsSUFBSTtBQUMzRSxTQUFTbUo7SUFDTCxPQUFPRDtBQUNYO0FBQ0EsSUFBSUUsZ0JBQWdCO0lBQ2hCbkYsaUNBQWlDQTtJQUNqQzBCLDRCQUE0QkE7SUFDNUJTLGdCQUFnQkE7SUFDaEJzQyxrQkFBa0JBO0lBQ2xCUyw4QkFBOEJBO0FBQ2xDO0FBQ0EsSUFBSUUsbUJBQW1CO0lBQ25COUUsc0JBQXNCQTtJQUN0QkMsbUJBQW1CQTtJQUNuQkUsc0JBQXNCQTtJQUN0QkMsMkJBQTJCQTtJQUMzQkUscUJBQXFCQTtJQUNyQkMsaUNBQWlDQTtJQUNqQ0MsdUJBQXVCQTtJQUN2QkMsZUFBZUE7SUFDZkMsdUJBQXVCQTtJQUN2QkMsbUJBQW1CQTtJQUNuQkMsZUFBZUE7SUFDZkUsd0JBQXdCQTtJQUN4QkMscUJBQXFCQTtJQUNyQk0sc0JBQXNCQTtJQUN0QkMsb0JBQW9CQTtJQUNwQkssZ0JBQWdCQTtJQUNoQkQsc0JBQXNCQTtJQUN0Qkksd0JBQXdCQTtJQUN4QkUscUJBQXFCQTtJQUNyQkcsaUJBQWlCQTtJQUNqQkMscUNBQXFDQTtJQUNyQ0Msc0JBQXNCQTtJQUN0QkMsY0FBY0E7SUFDZG1CLDRCQUE0QkE7SUFDNUJDLDJCQUEyQkE7SUFDM0JDLG1DQUFtQ0E7SUFDbkNDLHFCQUFxQkE7SUFDckJFLCtCQUErQkE7SUFDL0JNLFVBQVVBO0lBQ1ZFLGlDQUFpQ0E7SUFDakNDLFlBQVlBO0lBQ1pHLDJCQUEyQkE7QUFDL0I7QUFDQSxTQUFTSztJQUNMLElBQUk3RyxVQUFVRixZQUFZOEc7SUFDMUJqTyxPQUFPc0gsSUFBSSxDQUFDMEcsZUFBZXZGLE9BQU8sQ0FBQyxTQUFTakIsR0FBRztRQUMzQ0gsT0FBTyxDQUFDRyxJQUFJLEdBQUd3RyxhQUFhLENBQUN4RyxJQUFJO0lBQ3JDO0lBQ0EsT0FBT0g7QUFDWDtBQUNBLElBQUk4RyxnQkFBZ0I7QUFDcEIsU0FBU0M7SUFDTCxJQUFJRCxlQUFlO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQSxnQkFBZ0I3RixRQUFRakksR0FBRztJQUMzQixJQUFJLENBQUM4TixjQUFjekYsSUFBSSxFQUFFO1FBQ3JCSixRQUFRQyxHQUFHLENBQUMyRjtRQUNaQyxnQkFBZ0I3RixRQUFRakksR0FBRztJQUMvQjtJQUNBLE9BQU84TjtBQUNYO0FBQ0EsSUFBSUUsV0FBVyxLQUFLO0FBQ3BCLDZFQUE2RTtBQUM3RSw0REFBNEQ7QUFDNUQsSUFBSUMsZ0NBQWdDO0FBQ3BDLElBQUlDLGtDQUFrQztBQUN0QyxTQUFTQyxnQkFBZ0I3TSxPQUFPO0lBQzVCLElBQUksQ0FBQzBNLFVBQVU7UUFDWEEsV0FBV0Q7SUFDZjtJQUNBLElBQUlLLHNCQUFzQkosU0FBU1osK0JBQStCLEdBQUdjLGtDQUFrQ0Q7SUFDdkcsSUFBSXRNLFVBQVVQLGlCQUFpQjtRQUMzQkksT0FBTztRQUNQQyxpQkFBaUI7UUFDakJILFNBQVNBO0lBQ2I7SUFDQSx3REFBd0Q7SUFDeEQsb0ZBQW9GO0lBQ3BGLElBQUkrTSxjQUFjMU0sUUFBUTJNLFlBQVksQ0FBQztJQUN2QyxJQUFJQyxjQUFjNU0sUUFBUTJNLFlBQVksQ0FBQztJQUN2QyxJQUFJLENBQUNELGVBQWUsQ0FBQ0UsYUFBYTtRQUM5QixPQUFPO0lBQ1g7SUFDQSw2RUFBNkU7SUFDN0UsSUFBSXhDLGVBQWVwSyxRQUFRcUssZUFBZSxJQUFJckssUUFBUXNLLFFBQVEsQ0FBQ0MsV0FBVyxPQUFPO0lBQ2pGLElBQUlILGdCQUFnQixDQUFDaUMsU0FBU3hCLHlCQUF5QixFQUFFO1FBQ3JELE9BQU87SUFDWDtJQUNBLDRFQUE0RTtJQUM1RSxJQUFJd0IsU0FBUzdELG9CQUFvQixFQUFFO1FBQy9CLE9BQU87SUFDWDtJQUNBLHdFQUF3RTtJQUN4RSxJQUFJcUUsV0FBVzdNLFFBQVE4TSxZQUFZLENBQUNKLGNBQWMsYUFBYTtJQUMvRCxnREFBZ0Q7SUFDaEQsbUZBQW1GO0lBQ25GLElBQUlHLGFBQWEsVUFBVTtRQUN2QixPQUFPO0lBQ1g7SUFDQSxPQUFPekIsUUFBUXlCLFlBQVlKLG9CQUFvQi9ILElBQUksQ0FBQ21JO0FBQ3hEO0FBQ0EsU0FBU0UsY0FBYy9NLE9BQU87SUFDMUIsSUFBSSxDQUFDd00sZ0JBQWdCeE0sVUFBVTtRQUMzQixPQUFPO0lBQ1g7SUFDQSx3REFBd0Q7SUFDeEQsb0ZBQW9GO0lBQ3BGLElBQUkwTSxjQUFjMU0sUUFBUTJNLFlBQVksQ0FBQztJQUN2QyxJQUFJSyxnQkFBZ0JOLGNBQWMsYUFBYTtJQUMvQyw0RUFBNEU7SUFDNUUsSUFBSUcsV0FBV0ksU0FBU2pOLFFBQVE4TSxZQUFZLENBQUNFLGdCQUFnQjtJQUM3RCxPQUFPRSxNQUFNTCxZQUFZLENBQUMsSUFBSUE7QUFDbEM7QUFDQSxzRUFBc0U7QUFDdEUsOERBQThEO0FBQzlELHVEQUF1RDtBQUN2RCxTQUFTTSxxQkFBcUIvRSxLQUFLO0lBQy9CLGtFQUFrRTtJQUNsRSxpREFBaUQ7SUFDakQsSUFBSWdGLGFBQWFoRixNQUFNaUYsZ0JBQWdCLElBQUk7SUFDM0MsT0FBT2pDLFFBQVFnQyxjQUFjQSxXQUFXRSxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ2xFO0FBQ0EsU0FBU0MscUJBQXFCbkYsS0FBSztJQUMvQixPQUFPO1FBQ0hBLE1BQU1vRixnQkFBZ0IsQ0FBQztRQUN2QnBGLE1BQU1vRixnQkFBZ0IsQ0FBQztRQUN2QnBGLE1BQU1vRixnQkFBZ0IsQ0FBQztLQUMxQixDQUFDL0wsSUFBSSxDQUFDLFNBQVNnTSxRQUFRO1FBQ3BCLE9BQU9BLGFBQWEsVUFBVUEsYUFBYTtJQUMvQztBQUNKO0FBQ0EsU0FBU0Msa0JBQWtCdEYsS0FBSztJQUM1QixPQUFPQSxNQUFNdUYsT0FBTyxDQUFDTCxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQzVDO0FBQ0EsU0FBU00sc0JBQXNCNU4sT0FBTyxFQUFFc0ssUUFBUSxFQUFFdUQsY0FBYyxFQUFFQyxXQUFXO0lBQ3pFLElBQUl4RCxhQUFhLFNBQVNBLGFBQWEsUUFBUTtRQUMzQywyRUFBMkU7UUFDM0Usd0VBQXdFO1FBQ3hFLHFDQUFxQztRQUNyQyxPQUFPO0lBQ1g7SUFDQSxJQUFJdUQsa0JBQWtCQSxtQkFBbUIsU0FBU0EsbUJBQW1CLFVBQVUsQ0FBQ04scUJBQXFCTyxjQUFjO1FBQy9HLE9BQU87SUFDWDtJQUNBLE9BQU85TixRQUFRMkksWUFBWSxHQUFHM0ksUUFBUStOLFlBQVksSUFBSS9OLFFBQVFnTyxXQUFXLEdBQUdoTyxRQUFRaU8sV0FBVztBQUNuRztBQUNBLElBQUlDLGFBQWEsS0FBSztBQUN0QixTQUFTQztJQUNMLElBQUl6TyxPQUFPYSxVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHWixVQUFVRCxLQUFLQyxPQUFPLEVBQUV5TyxjQUFjMU8sS0FBSzJPLE1BQU0sRUFBRUEsU0FBU0QsZ0JBQWdCblAsWUFBWTtRQUN2S3FQLFNBQVM7UUFDVEMsWUFBWTtRQUNaQyxRQUFRO0lBQ1osSUFBSUo7SUFDSixJQUFJLENBQUNGLFlBQVk7UUFDYkEsYUFBYTlCO0lBQ2pCO0lBQ0EsSUFBSXBNLFVBQVVQLGlCQUFpQjtRQUMzQkksT0FBTztRQUNQQyxpQkFBaUI7UUFDakJILFNBQVNBO0lBQ2I7SUFDQSxJQUFJLENBQUMwTyxPQUFPRyxNQUFNLElBQUl4TyxRQUFRa0IsVUFBVSxFQUFFO1FBQ3RDLHNFQUFzRTtRQUN0RSxPQUFPO0lBQ1g7SUFDQSxJQUFJb0osV0FBV3RLLFFBQVFzSyxRQUFRLENBQUNDLFdBQVc7SUFDM0MsSUFBSUQsYUFBYSxXQUFXdEssUUFBUWtLLElBQUksS0FBSyxVQUFVO1FBQ25ELGtEQUFrRDtRQUNsRCxPQUFPO0lBQ1g7SUFDQSxJQUFJSSxhQUFhLFdBQVdBLGFBQWEsWUFBWUEsYUFBYSxZQUFZQSxhQUFhLFlBQVk7UUFDbkcsT0FBTztJQUNYO0lBQ0EsSUFBSUEsYUFBYSxZQUFZNEQsV0FBVy9FLG1CQUFtQixFQUFFO1FBQ3pELHFDQUFxQztRQUNyQyxPQUFPO0lBQ1g7SUFDQSxJQUFJbUIsYUFBYSxTQUFTO1FBQ3RCLHFDQUFxQztRQUNyQyxPQUFPO0lBQ1g7SUFDQSxJQUFJQSxhQUFhLFFBQVE7UUFDckIscUNBQXFDO1FBQ3JDLE9BQU87SUFDWDtJQUNBLElBQUlBLGFBQWEsT0FBT3RLLFFBQVEyTSxZQUFZLENBQUMsU0FBUztRQUNsRCxPQUFPO0lBQ1g7SUFDQSxJQUFJckMsYUFBYSxZQUFZdEssUUFBUTJNLFlBQVksQ0FBQyxXQUFXO1FBQ3pELGlEQUFpRDtRQUNqRCxPQUFPO0lBQ1g7SUFDQSxJQUFJckMsYUFBYSxVQUFVO1FBQ3ZCLElBQUltRSxVQUFVek8sUUFBUThNLFlBQVksQ0FBQztRQUNuQyxJQUFJLENBQUNvQixXQUFXcEYsY0FBYyxJQUFJMkYsWUFBWSxpQkFBaUI7WUFDM0QscUVBQXFFO1lBQ3JFLE9BQU87UUFDWCxPQUFPLElBQUksQ0FBQ1AsV0FBV2xGLGNBQWMsSUFBSXlGLFlBQVksaUNBQWlDO1lBQ2xGLHVGQUF1RjtZQUN2RixPQUFPO1FBQ1g7SUFDSjtJQUNBLElBQUluRSxhQUFhLFlBQVlBLGFBQWEsVUFBVTtRQUNoRCw4QkFBOEI7UUFDOUIsT0FBTztJQUNYO0lBQ0EsSUFBSUEsYUFBYSxXQUFXQSxhQUFhLFVBQVU7UUFDL0MsdURBQXVEO1FBQ3ZELHFEQUFxRDtRQUNyRCxPQUFPO0lBQ1g7SUFDQSxJQUFJdEssUUFBUTJNLFlBQVksQ0FBQyxvQkFBb0I7UUFDekMsMENBQTBDO1FBQzFDLE9BQU87SUFDWDtJQUNBLElBQUlyQyxhQUFhLFdBQVk0RCxDQUFBQSxXQUFXM0cseUJBQXlCLElBQUl2SCxRQUFRMk0sWUFBWSxDQUFDLFdBQVUsR0FBSTtRQUNwRyxPQUFPO0lBQ1g7SUFDQSxJQUFJckMsYUFBYSxXQUFZNEQsQ0FBQUEsV0FBV3JDLHlCQUF5QixJQUFJN0wsUUFBUTJNLFlBQVksQ0FBQyxXQUFVLEdBQUk7UUFDcEcsT0FBTztJQUNYO0lBQ0EsSUFBSXVCLFdBQVd6RSxZQUFZLElBQUlhLGFBQWEsV0FBVztRQUNuRCxPQUFPO0lBQ1g7SUFDQSxJQUFJb0UsZ0JBQWdCbEMsZ0JBQWdCeE07SUFDcEMsSUFBSXNLLGFBQWEsU0FBU3RLLFFBQVEyTSxZQUFZLENBQUMsV0FBVztRQUN0RCw4RkFBOEY7UUFDOUYsZ0ZBQWdGO1FBQ2hGLE9BQU8rQixpQkFBaUJSLFdBQVdqRyxzQkFBc0IsSUFBSWlHLFdBQVdqRixzQkFBc0I7SUFDbEc7SUFDQSxJQUFJaUYsV0FBV3hDLFVBQVUsSUFBS3BCLENBQUFBLGFBQWEsV0FBV0EsYUFBYSxJQUFHLEdBQUk7UUFDdEUsOENBQThDO1FBQzlDLE9BQU87SUFDWDtJQUNBLElBQUk0RCxXQUFXdEcsYUFBYSxJQUFJMEMsYUFBYSxZQUFZO1FBQ3JELHdDQUF3QztRQUN4QyxPQUFPO0lBQ1g7SUFDQSxJQUFJRixlQUFlRSxhQUFhO0lBQ2hDLElBQUlxRSxlQUFlM08sUUFBUXFLLGVBQWU7SUFDMUMsSUFBSXVFLHFCQUFxQjVPLFFBQVE4TSxZQUFZLENBQUM7SUFDOUMsSUFBSUQsV0FBV0UsY0FBYy9NO0lBQzdCLElBQUlzSyxhQUFhLFNBQVN1QyxhQUFhLFFBQVEsQ0FBQ3FCLFdBQVduRCxtQkFBbUIsRUFBRTtRQUM1RSw4RkFBOEY7UUFDOUYsT0FBTztJQUNYO0lBQ0EsSUFBSVQsYUFBYSxpQkFBaUI7UUFDOUIsdURBQXVEO1FBQ3ZELE9BQU91QyxhQUFhLFFBQVFxQixXQUFXakQsNkJBQTZCO0lBQ3hFO0lBQ0EsSUFBSXRKLGVBQWUzQixTQUFTLFlBQVlBLFFBQVEyTSxZQUFZLENBQUMsZUFBZTtRQUN4RSxPQUFPO0lBQ1g7SUFDQSxJQUFJLENBQUN2QyxnQkFBZ0J1RSxZQUFXLEtBQU0zTyxRQUFRNkUsS0FBSyxJQUFJLENBQUNxSixXQUFXcEQsaUNBQWlDLElBQUkrQixXQUFXLEdBQUc7UUFDbEgsaUVBQWlFO1FBQ2pFLHlEQUF5RDtRQUN6RCwyREFBMkQ7UUFDM0QsT0FBTztJQUNYO0lBQ0EsSUFBSXpDLGNBQWM7UUFDZCxPQUFPc0UsaUJBQWlCUixXQUFXM0MsUUFBUSxJQUFJMkMsV0FBVzVDLGdCQUFnQixJQUFJLG1GQUFtRjtRQUNqS0YsUUFBUThDLFdBQVd0RCwwQkFBMEIsSUFBSWdFLHNCQUFzQkEsdUJBQXVCO0lBQ2xHO0lBQ0EsSUFBSUQsY0FBYztRQUNkLElBQUlULFdBQVdyRCx5QkFBeUIsSUFBSTZELGVBQWU7WUFDdkQsT0FBTztRQUNYO1FBQ0EsSUFBSVIsV0FBV3RELDBCQUEwQixFQUFFO1lBQ3ZDLG1GQUFtRjtZQUNuRixPQUFPZ0UsdUJBQXVCO1FBQ2xDO0lBQ0o7SUFDQSxrR0FBa0c7SUFDbEcsSUFBSUYsZUFBZTtRQUNmLE9BQU87SUFDWDtJQUNBLElBQUl0RyxRQUFRMUUsT0FBT21MLGdCQUFnQixDQUFDN08sU0FBUztJQUM3QyxJQUFJbU4scUJBQXFCL0UsUUFBUTtRQUM3QixPQUFPO0lBQ1g7SUFDQSxJQUFJOEYsV0FBV25HLGFBQWEsSUFBSXVDLGFBQWEsU0FBU3RLLFFBQVEyTSxZQUFZLENBQUMsVUFBVTtRQUNqRiwrREFBK0Q7UUFDL0QsaURBQWlEO1FBQ2pELElBQUltQyxnQkFBZ0IzTixXQUFXO1lBQzNCeEIsU0FBU0s7UUFDYixHQUFHeUIsSUFBSSxDQUFDLFNBQVNzTixNQUFNO1lBQ25CLE9BQU9BLE9BQU96RSxRQUFRLENBQUNDLFdBQVcsT0FBTyxPQUFPd0UsT0FBT3BDLFlBQVksQ0FBQztRQUN4RTtRQUNBLElBQUltQyxlQUFlO1lBQ2YsT0FBTztRQUNYO0lBQ0o7SUFDQSxpREFBaUQ7SUFDakQsSUFBSSxDQUFDVCxPQUFPRSxVQUFVLElBQUlMLFdBQVcxRSxvQkFBb0IsRUFBRTtRQUN2RCxJQUFJMEUsV0FBVzNFLG1DQUFtQyxFQUFFO1lBQ2hELHFFQUFxRTtZQUNyRSxzRUFBc0U7WUFDdEUsMENBQTBDO1lBQzFDLElBQUlxRSxzQkFBc0I1TixTQUFTc0ssV0FBVztnQkFDMUMsT0FBTztZQUNYO1FBQ0osT0FBTyxJQUFJaUQscUJBQXFCbkYsUUFBUTtZQUNwQyxvRUFBb0U7WUFDcEUsc0RBQXNEO1lBQ3RELE9BQU87UUFDWDtJQUNKO0lBQ0EsSUFBSSxDQUFDaUcsT0FBT0MsT0FBTyxJQUFJSixXQUFXckcscUJBQXFCLElBQUk2RixrQkFBa0J0RixRQUFRO1FBQ2pGLHNEQUFzRDtRQUN0RCxPQUFPO0lBQ1g7SUFDQSxJQUFJMkcsU0FBUy9PLFFBQVFnUCxhQUFhO0lBQ2xDLElBQUksQ0FBQ1gsT0FBT0UsVUFBVSxJQUFJUSxRQUFRO1FBQzlCLElBQUlsQixpQkFBaUJrQixPQUFPekUsUUFBUSxDQUFDQyxXQUFXO1FBQ2hELElBQUl1RCxjQUFjcEssT0FBT21MLGdCQUFnQixDQUFDRSxRQUFRO1FBQ2xELElBQUliLFdBQVc1RSxlQUFlLElBQUlzRSxzQkFBc0JtQixRQUFRekUsVUFBVXVELGdCQUFnQkMsY0FBYztZQUNwRyxvREFBb0Q7WUFDcEQsaURBQWlEO1lBQ2pELE9BQU87UUFDWDtRQUNBLDRFQUE0RTtRQUM1RSxJQUFJSSxXQUFXeEcsK0JBQStCLEVBQUU7WUFDNUMsSUFBSWdHLGtCQUFrQkksY0FBYztnQkFDaEMsT0FBTztZQUNYO1FBQ0o7SUFDSjtJQUNBLG9EQUFvRDtJQUNwRCw4Q0FBOEM7SUFDOUMsaURBQWlEO0lBQ2pELE9BQU87QUFDWDtBQUNBLDBDQUEwQztBQUMxQ0sscUJBQXFCRSxNQUFNLEdBQUc7SUFDMUIsSUFBSUEsU0FBUzlOLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2xGLElBQUkwTyxrQkFBa0IsU0FBU0EsZ0JBQWdCdFAsT0FBTztRQUNsRCxPQUFPd08scUJBQXFCO1lBQ3hCeE8sU0FBU0E7WUFDVDBPLFFBQVFBO1FBQ1o7SUFDSjtJQUNBWSxnQkFBZ0JDLEtBQUssR0FBR2Y7SUFDeEIsT0FBT2M7QUFDWDtBQUNBLGdFQUFnRTtBQUNoRSxJQUFJQSxrQkFBa0JkLHFCQUFxQkUsTUFBTSxDQUFDLENBQUM7QUFDbkQsU0FBU2MsVUFBVUMsS0FBSyxFQUFFQyxRQUFRO0lBQzlCLDREQUE0RDtJQUM1RCxJQUFJRCxNQUFNRCxTQUFTLEVBQUU7UUFDakIsT0FBT0MsTUFBTUQsU0FBUyxDQUFDRTtJQUMzQjtJQUNBLElBQUlqUSxTQUFTZ1EsTUFBTWhRLE1BQU07SUFDekIsaUNBQWlDO0lBQ2pDLElBQUlBLFdBQVcsR0FBRztRQUNkLE9BQU8sQ0FBQztJQUNaO0lBQ0EsNEJBQTRCO0lBQzVCLElBQUksSUFBSWtRLElBQUksR0FBR0EsSUFBSWxRLFFBQVFrUSxJQUFJO1FBQzNCLElBQUlELFNBQVNELEtBQUssQ0FBQ0UsRUFBRSxFQUFFQSxHQUFHRixRQUFRO1lBQzlCLE9BQU9FO1FBQ1g7SUFDSjtJQUNBLE9BQU8sQ0FBQztBQUNaO0FBQ0EsU0FBU0MsbUJBQW1CM08sSUFBSTtJQUM1QixJQUFJO1FBQ0EsaUNBQWlDO1FBQ2pDLE9BQU9BLEtBQUs0TyxlQUFlLElBQUksaUNBQWlDO1FBQ2hFNU8sS0FBSzBELGFBQWEsSUFBSTFELEtBQUswRCxhQUFhLENBQUNwRixRQUFRLElBQUksa0RBQWtEO1FBQ3ZHMEIsS0FBSzZPLGNBQWMsSUFBSTdPLEtBQUs2TyxjQUFjLE1BQU07SUFDcEQsRUFBRSxPQUFPNUosR0FBRztRQUNSLHdGQUF3RjtRQUN4RixpRkFBaUY7UUFDakYsT0FBTztJQUNYO0FBQ0o7QUFDQSxTQUFTNkosVUFBVTlPLElBQUk7SUFDbkIsSUFBSUcsWUFBWUosWUFBWUM7SUFDNUIsT0FBT0csVUFBVTRPLFdBQVcsSUFBSWpNO0FBQ3BDO0FBQ0EsSUFBSWtNLGVBQWUsS0FBSztBQUN4QixTQUFTQyxnQkFBZ0JqTyxRQUFRO0lBQzdCLElBQUksT0FBT2dPLGlCQUFpQixVQUFVO1FBQ2xDLElBQUlFLFdBQVdqSjtRQUNmLElBQUlpSixVQUFVO1lBQ1ZGLGVBQWUsWUFBWUUsV0FBVztRQUMxQztJQUNKO0lBQ0EsSUFBSSxDQUFDRixjQUFjO1FBQ2YsT0FBT2hPO0lBQ1g7SUFDQSxPQUFPQSxXQUFXZ08sZUFBZWhPLFNBQVNtTyxPQUFPLENBQUMsWUFBWSxLQUFLQyxLQUFLLENBQUMsS0FBS2hGLElBQUksQ0FBQzRFO0FBQ3ZGO0FBQ0EsSUFBSWhPLFdBQVcsS0FBSztBQUNwQixTQUFTcU8sd0JBQXdCNUwsT0FBTztJQUNwQyxJQUFJLENBQUN6QyxVQUFVO1FBQ1hBLFdBQVdpTyxnQkFBZ0I7SUFDL0I7SUFDQSxJQUFJeEwsUUFBUTZMLGFBQWEsS0FBS2pSLFdBQVc7UUFDckMsT0FBT29GLFFBQVE2TCxhQUFhO0lBQ2hDO0lBQ0E3TCxRQUFRNkwsYUFBYSxHQUFHO0lBQ3hCLElBQUlDLGlCQUFpQjlMLFFBQVEwSyxNQUFNLENBQUM3UCxRQUFRLENBQUNDLGdCQUFnQixDQUFDeUM7SUFDOUQsRUFBRSxDQUFDSCxJQUFJLENBQUNuQyxJQUFJLENBQUM2USxnQkFBZ0IsU0FBU25RLE9BQU87UUFDekMsSUFBSWUsWUFBWXdPLG1CQUFtQnZQO1FBQ25DLElBQUllLGNBQWNzRCxRQUFRbkYsUUFBUSxFQUFFO1lBQ2hDLE9BQU87UUFDWDtRQUNBbUYsUUFBUTZMLGFBQWEsR0FBR2xRO1FBQ3hCLE9BQU87SUFDWDtJQUNBLE9BQU9xRSxRQUFRNkwsYUFBYTtBQUNoQztBQUNBLFNBQVNFLGdCQUFnQnBRLE9BQU87SUFDNUIsSUFBSXFFLFVBQVVxTCxVQUFVMVA7SUFDeEIsSUFBSSxDQUFDcUUsUUFBUTBLLE1BQU0sSUFBSTFLLFFBQVEwSyxNQUFNLEtBQUsxSyxTQUFTO1FBQy9DLDBDQUEwQztRQUMxQyxtREFBbUQ7UUFDbkQsT0FBTztJQUNYO0lBQ0EsSUFBSTtRQUNBLHFFQUFxRTtRQUNyRSwwRUFBMEU7UUFDMUUsT0FBT0EsUUFBUWdNLFlBQVksSUFBSUosd0JBQXdCNUw7SUFDM0QsRUFBRSxPQUFPd0IsR0FBRztRQUNSLE9BQU87SUFDWDtBQUNKO0FBQ0EsNERBQTREO0FBQzVELHlGQUF5RjtBQUN6RixJQUFJeUssNkJBQTZCO0FBQ2pDLFNBQVNDLGNBQWN2USxPQUFPLEVBQUV3USxRQUFRO0lBQ3BDLE9BQU85TSxPQUFPbUwsZ0JBQWdCLENBQUM3TyxTQUFTLE1BQU13TixnQkFBZ0IsQ0FBQ2dEO0FBQ25FO0FBQ0EsU0FBU0MsYUFBYUMsS0FBSztJQUN2QixPQUFPQSxNQUFNalAsSUFBSSxDQUFDLFNBQVN6QixPQUFPO1FBQzlCLHlEQUF5RDtRQUN6RCxPQUFPdVEsY0FBY3ZRLFNBQVMsZUFBZTtJQUNqRDtBQUNKO0FBQ0EsU0FBUzJRLFdBQVdELEtBQUs7SUFDckIsdUVBQXVFO0lBQ3ZFLHlHQUF5RztJQUN6RyxnRUFBZ0U7SUFDaEUsSUFBSUUsU0FBU3pCLFVBQVV1QixPQUFPLFNBQVMxUSxPQUFPO1FBQzFDLElBQUlxSSxhQUFha0ksY0FBY3ZRLFNBQVM7UUFDeEMsT0FBT3FJLGVBQWUsWUFBWUEsZUFBZTtJQUNyRDtJQUNBLElBQUl1SSxXQUFXLENBQUMsR0FBRztRQUNmLDZCQUE2QjtRQUM3QixPQUFPO0lBQ1g7SUFDQSxJQUFJQyxVQUFVMUIsVUFBVXVCLE9BQU8sU0FBUzFRLE9BQU87UUFDM0MsT0FBT3VRLGNBQWN2USxTQUFTLGtCQUFrQjtJQUNwRDtJQUNBLElBQUk2USxZQUFZLENBQUMsR0FBRztRQUNoQixxREFBcUQ7UUFDckQsT0FBTztJQUNYO0lBQ0EsSUFBSUQsU0FBU0MsU0FBUztRQUNsQiwyRUFBMkU7UUFDM0UsT0FBTztJQUNYO0lBQ0Esb0VBQW9FO0lBQ3BFLE9BQU87QUFDWDtBQUNBLFNBQVNDLGdCQUFnQkosS0FBSztJQUMxQixJQUFJSyxTQUFTO0lBQ2IsSUFBSUwsS0FBSyxDQUFDLEVBQUUsQ0FBQ3BHLFFBQVEsQ0FBQ0MsV0FBVyxPQUFPLFdBQVc7UUFDL0N3RyxTQUFTO0lBQ2I7SUFDQSxPQUFPTCxNQUFNclIsS0FBSyxDQUFDMFIsUUFBUXRQLElBQUksQ0FBQyxTQUFTekIsT0FBTztRQUM1QyxpRUFBaUU7UUFDakUsT0FBT0EsUUFBUXNLLFFBQVEsQ0FBQ0MsV0FBVyxPQUFPLGFBQWF2SyxRQUFRdUUsSUFBSSxLQUFLO0lBQzVFO0FBQ0o7QUFDQSxTQUFTeU07SUFDTCxJQUFJdFIsT0FBT2EsVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBR1osVUFBVUQsS0FBS0MsT0FBTyxFQUFFeU8sY0FBYzFPLEtBQUsyTyxNQUFNLEVBQUVBLFNBQVNELGdCQUFnQm5QLFlBQVk7UUFDdktnUyxhQUFhO1FBQ2JDLFlBQVk7UUFDWkMsZUFBZTtRQUNmQyxnQkFBZ0I7UUFDaEJDLGlCQUFpQjtJQUNyQixJQUFJakQ7SUFDSixJQUFJcE8sVUFBVVAsaUJBQWlCO1FBQzNCSSxPQUFPO1FBQ1BDLGlCQUFpQjtRQUNqQkgsU0FBU0E7SUFDYjtJQUNBLElBQUkySyxXQUFXdEssUUFBUXNLLFFBQVEsQ0FBQ0MsV0FBVztJQUMzQyxJQUFJLENBQUM4RCxPQUFPNEMsV0FBVyxJQUFJWCwyQkFBMkI1TCxJQUFJLENBQUM0RixXQUFXO1FBQ2xFLE9BQU87SUFDWDtJQUNBLElBQUlvRyxRQUFRdlAsV0FBVztRQUNuQnhCLFNBQVNLO0lBQ2I7SUFDQSw4RkFBOEY7SUFDOUYseUZBQXlGO0lBQ3pGLHdHQUF3RztJQUN4RyxJQUFJc1IseUJBQXlCaEgsYUFBYSxXQUFXLENBQUN0SyxRQUFRMk0sWUFBWSxDQUFDO0lBQzNFLElBQUksQ0FBQzBCLE9BQU82QyxVQUFVLElBQUlULGFBQWFhLHlCQUF5QlosTUFBTXJSLEtBQUssQ0FBQyxLQUFLcVIsUUFBUTtRQUNyRixPQUFPO0lBQ1g7SUFDQSxJQUFJLENBQUNyQyxPQUFPOEMsYUFBYSxJQUFJUixXQUFXRCxRQUFRO1FBQzVDLE9BQU87SUFDWDtJQUNBLElBQUksQ0FBQ3JDLE9BQU8rQyxjQUFjLElBQUlOLGdCQUFnQkosUUFBUTtRQUNsRCxPQUFPO0lBQ1g7SUFDQSxJQUFJLENBQUNyQyxPQUFPZ0QsZUFBZSxFQUFFO1FBQ3pCLHlEQUF5RDtRQUN6RCwwREFBMEQ7UUFDMUQsSUFBSWhCLGVBQWVELGdCQUFnQnBRO1FBQ25DLElBQUl1UixhQUFhUCxlQUFlM0MsTUFBTSxDQUFDQTtRQUN2QyxJQUFJZ0MsZ0JBQWdCLENBQUNrQixXQUFXbEIsZUFBZTtZQUMzQyxPQUFPO1FBQ1g7SUFDSjtJQUNBLE9BQU87QUFDWDtBQUNBLDBDQUEwQztBQUMxQ1csZUFBZTNDLE1BQU0sR0FBRztJQUNwQixJQUFJQSxTQUFTOU4sVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEYsSUFBSWlSLFlBQVksU0FBU0EsVUFBVTdSLE9BQU87UUFDdEMsT0FBT3FSLGVBQWU7WUFDbEJyUixTQUFTQTtZQUNUME8sUUFBUUE7UUFDWjtJQUNKO0lBQ0FtRCxVQUFVdEMsS0FBSyxHQUFHOEI7SUFDbEIsT0FBT1E7QUFDWDtBQUNBLDBEQUEwRDtBQUMxRCxJQUFJQSxZQUFZUixlQUFlM0MsTUFBTSxDQUFDLENBQUM7QUFDdkMsU0FBU29ELGFBQWFsUSxJQUFJLEVBQUVSLFNBQVM7SUFDakMsMkVBQTJFO0lBQzNFLHdFQUF3RTtJQUN4RSxJQUFJd0UsTUFBTXhFLFVBQVVnRyxhQUFhLENBQUMsZUFBZSxDQUFDLEdBQUdwSSxXQUFXc0QsT0FBTyxFQUFFVixRQUFRO0lBQ2pGLE9BQU9nRSxPQUFPO0FBQ2xCO0FBQ0EsU0FBU21NLGVBQWUxUixPQUFPO0lBQzNCLElBQUl1RixNQUFNdkYsUUFBUWdQLGFBQWE7SUFDL0IsSUFBSSxDQUFDekosSUFBSWhFLElBQUksSUFBSWdFLElBQUkrRSxRQUFRLENBQUNDLFdBQVcsT0FBTyxPQUFPO1FBQ25ELE9BQU87SUFDWDtJQUNBLHVFQUF1RTtJQUN2RSw2Q0FBNkM7SUFDN0MsdUVBQXVFO0lBQ3ZFLG1GQUFtRjtJQUNuRix3RUFBd0U7SUFDeEUsOERBQThEO0lBQzlELGdFQUFnRTtJQUNoRSxJQUFJeEosWUFBWUosWUFBWVg7SUFDNUIsT0FBT2UsVUFBVWdHLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHcEksV0FBV3NELE9BQU8sRUFBRXNELElBQUloRSxJQUFJLElBQUksU0FBUztBQUNsRztBQUNBLElBQUlvUSxhQUFhLEtBQUs7QUFDdEIsMERBQTBEO0FBQzFELHNFQUFzRTtBQUN0RSxzRUFBc0U7QUFDdEUsU0FBU0MsWUFBWWpTLE9BQU87SUFDeEIsSUFBSSxDQUFDZ1MsWUFBWTtRQUNiQSxhQUFhdkY7SUFDakI7SUFDQSxJQUFJcE0sVUFBVVAsaUJBQWlCO1FBQzNCSSxPQUFPO1FBQ1BGLFNBQVNBO0lBQ2I7SUFDQSxJQUFJMkssV0FBV3RLLFFBQVFzSyxRQUFRLENBQUNDLFdBQVc7SUFDM0MsSUFBSUQsYUFBYSxRQUFRO1FBQ3JCLE9BQU87SUFDWDtJQUNBLElBQUlvQyxjQUFjMU0sUUFBUTJNLFlBQVksQ0FBQztJQUN2QyxJQUFJLENBQUNnRixXQUFXdkssaUJBQWlCLElBQUlzRixhQUFhO1FBQzlDLCtFQUErRTtRQUMvRSxPQUFPO0lBQ1g7SUFDQSxJQUFJbUYsTUFBTUgsZUFBZTFSO0lBQ3pCLElBQUksQ0FBQzZSLE9BQU8sQ0FBQ0wsVUFBVUssTUFBTTtRQUN6QixPQUFPO0lBQ1g7SUFDQSxrRUFBa0U7SUFDbEUseURBQXlEO0lBQ3pELElBQUksQ0FBQ0YsV0FBV2xLLG1CQUFtQixJQUFLLEVBQUNvSyxJQUFJQyxRQUFRLElBQUksQ0FBQ0QsSUFBSUUsYUFBYSxJQUFJRixJQUFJN0QsV0FBVyxJQUFJLEtBQUs2RCxJQUFJbEosWUFBWSxJQUFJLElBQUk7UUFDM0gsT0FBTztJQUNYO0lBQ0EscUZBQXFGO0lBQ3JGLElBQUksQ0FBQ2dKLFdBQVdySyxvQkFBb0IsSUFBSSxDQUFDdEgsUUFBUWdJLElBQUksRUFBRTtRQUNuRCw0RUFBNEU7UUFDNUUsaUVBQWlFO1FBQ2pFLE9BQU8ySixXQUFXdkssaUJBQWlCLElBQUlzRixlQUFlaUYsV0FBV3hLLG9CQUFvQixJQUFJMEssSUFBSWxGLFlBQVksQ0FBQztJQUM5RztJQUNBLHNFQUFzRTtJQUN0RSxJQUFJcUYscUJBQXFCN1EsV0FBVztRQUNoQ3hCLFNBQVNrUztJQUNiLEdBQUd4UyxLQUFLLENBQUMsR0FBR29DLElBQUksQ0FBQyxTQUFTd1EsUUFBUTtRQUM5QixJQUFJMVEsT0FBTzBRLFNBQVMzSCxRQUFRLENBQUNDLFdBQVc7UUFDeEMsT0FBT2hKLFNBQVMsWUFBWUEsU0FBUztJQUN6QztJQUNBLElBQUl5USxvQkFBb0I7UUFDcEIsT0FBTztJQUNYO0lBQ0EsT0FBTztBQUNYO0FBQ0EsSUFBSUUsYUFBYSxLQUFLO0FBQ3RCLDhFQUE4RTtBQUM5RSxJQUFJQywwQkFBMEIsS0FBSztBQUNuQyxJQUFJQyxtQkFBbUI7SUFDbkJ2VCxPQUFPO0lBQ1B3VCxRQUFRO0lBQ1JDLFVBQVU7SUFDVkMsUUFBUTtJQUNSQyxVQUFVO0lBQ1ZDLE1BQU07QUFDVjtBQUNBLFNBQVNDLDBCQUEwQi9TLE9BQU87SUFDdEMsSUFBSSxDQUFDdVMsWUFBWTtRQUNiQSxhQUFhOUY7UUFDYixJQUFJOEYsV0FBV3ZLLHFCQUFxQixFQUFFO1lBQ2xDLE9BQU95SyxpQkFBaUJJLFFBQVE7UUFDcEM7UUFDQSxJQUFJTixXQUFXcEssaUJBQWlCLEVBQUU7WUFDOUIsT0FBT3NLLGlCQUFpQkssSUFBSTtRQUNoQztRQUNBTiwwQkFBMEIsSUFBSVEsT0FBTyxPQUFPM1UsT0FBT3NILElBQUksQ0FBQzhNLGtCQUFrQnBILElBQUksQ0FBQyxPQUFPO0lBQzFGO0lBQ0EsSUFBSWhMLFVBQVVQLGlCQUFpQjtRQUMzQkksT0FBTztRQUNQRixTQUFTQTtJQUNiO0lBQ0EsSUFBSTJLLFdBQVd0SyxRQUFRc0ssUUFBUSxDQUFDQyxXQUFXO0lBQzNDLE9BQU9hLFFBQVErRyx3QkFBd0J6TixJQUFJLENBQUM0RjtBQUNoRDtBQUNBLElBQUlzSSxhQUFhLEtBQUs7QUFDdEIsU0FBU0MsbUJBQW1CN1MsT0FBTztJQUMvQixJQUFJc0ssV0FBV3RLLFFBQVFzSyxRQUFRLENBQUNDLFdBQVc7SUFDM0MsT0FBT0QsYUFBYSxjQUFjdEssUUFBUXdLLFFBQVE7QUFDdEQ7QUFDQSxTQUFTc0ksZUFBZTlTLE9BQU87SUFDM0IsSUFBSXNLLFdBQVd0SyxRQUFRc0ssUUFBUSxDQUFDQyxXQUFXO0lBQzNDLE9BQU9ELGFBQWEsVUFBVXRLLFFBQVF3SyxRQUFRO0FBQ2xEO0FBQ0EsU0FBU3VJLFdBQVdwVCxPQUFPO0lBQ3ZCLElBQUksQ0FBQ2lULFlBQVk7UUFDYkEsYUFBYXhHO0lBQ2pCO0lBQ0EsSUFBSXBNLFVBQVVQLGlCQUFpQjtRQUMzQkksT0FBTztRQUNQRixTQUFTQTtJQUNiO0lBQ0EsSUFBSUssUUFBUTJNLFlBQVksQ0FBQyx1QkFBdUI7UUFDNUMscUVBQXFFO1FBQ3JFLE9BQU87SUFDWDtJQUNBLElBQUksQ0FBQytGLDBCQUEwQjFTLFVBQVU7UUFDckMsMERBQTBEO1FBQzFELE9BQU87SUFDWDtJQUNBLElBQUlBLFFBQVF3SyxRQUFRLEVBQUU7UUFDbEIsaUNBQWlDO1FBQ2pDLE9BQU87SUFDWDtJQUNBLElBQUl3SSxVQUFVN1IsV0FBVztRQUNyQnhCLFNBQVNLO0lBQ2I7SUFDQSxJQUFJZ1QsUUFBUXZSLElBQUksQ0FBQ29SLHFCQUFxQjtRQUNsQyw0RUFBNEU7UUFDNUUsT0FBTztJQUNYO0lBQ0EsSUFBSSxDQUFDRCxXQUFXOUssaUJBQWlCLElBQUlrTCxRQUFRdlIsSUFBSSxDQUFDcVIsaUJBQWlCO1FBQy9ELHdFQUF3RTtRQUN4RSxPQUFPO0lBQ1g7SUFDQSxPQUFPO0FBQ1g7QUFDQSxTQUFTRztJQUNMLElBQUl2VCxPQUFPYSxVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHWixVQUFVRCxLQUFLQyxPQUFPLEVBQUV5TyxjQUFjMU8sS0FBSzJPLE1BQU0sRUFBRUEsU0FBU0QsZ0JBQWdCblAsWUFBWTtRQUN2S2lVLDhCQUE4QjtRQUM5QnJDLFNBQVM7SUFDYixJQUFJekM7SUFDSixJQUFJcE8sVUFBVVAsaUJBQWlCO1FBQzNCSSxPQUFPO1FBQ1BDLGlCQUFpQjtRQUNqQkgsU0FBU0E7SUFDYjtJQUNBLElBQUksQ0FBQzBPLE9BQU93QyxPQUFPLElBQUksQ0FBQ1csVUFBVXhSLFVBQVU7UUFDeEMsT0FBTztJQUNYO0lBQ0EsSUFBSSxDQUFDcU8sT0FBTzZFLDRCQUE0QixJQUFLclIsQ0FBQUEsU0FBU3NCLEVBQUUsQ0FBQ1QsS0FBSyxJQUFJYixTQUFTc0IsRUFBRSxDQUFDUixPQUFPLElBQUlkLFNBQVNzQixFQUFFLENBQUNQLElBQUksR0FBRztRQUN4RyxJQUFJeU4sZUFBZUQsZ0JBQWdCcFE7UUFDbkMsSUFBSXFRLGNBQWM7WUFDZCxJQUFJdEQsY0FBY3NELGdCQUFnQixHQUFHO2dCQUNqQyw4REFBOEQ7Z0JBQzlELDZEQUE2RDtnQkFDN0QsT0FBTztZQUNYO1FBQ0o7SUFDSjtJQUNBLElBQUkvRixXQUFXdEssUUFBUXNLLFFBQVEsQ0FBQ0MsV0FBVztJQUMzQyxJQUFJc0MsV0FBV0UsY0FBYy9NO0lBQzdCLElBQUlzSyxhQUFhLFdBQVd6SSxTQUFTc0IsRUFBRSxDQUFDVCxLQUFLLEVBQUU7UUFDM0Msc0RBQXNEO1FBQ3RELE9BQU9tSyxhQUFhLFFBQVFBLFlBQVk7SUFDNUM7SUFDQSxtRkFBbUY7SUFDbkYsa0ZBQWtGO0lBQ2xGLDBEQUEwRDtJQUMxRCxJQUFJaEwsU0FBU3NCLEVBQUUsQ0FBQ1QsS0FBSyxJQUFJMUMsUUFBUXFLLGVBQWUsSUFBSSxDQUFDckssUUFBUTZFLEtBQUssRUFBRTtRQUNoRSxJQUFJeUYsYUFBYSxPQUFPdEssUUFBUTJNLFlBQVksQ0FBQyxlQUFlO1lBQ3hELGdFQUFnRTtZQUNoRSxJQUFJOUssU0FBU3NCLEVBQUUsQ0FBQ1QsS0FBSyxFQUFFO2dCQUNuQixPQUFPO1lBQ1g7UUFDSjtJQUNKO0lBQ0EsT0FBTztBQUNYO0FBQ0EsMENBQTBDO0FBQzFDdVEsb0JBQW9CNUUsTUFBTSxHQUFHO0lBQ3pCLElBQUlBLFNBQVM5TixVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNsRixJQUFJNFMsaUJBQWlCLFNBQVNBLGVBQWV4VCxPQUFPO1FBQ2hELE9BQU9zVCxvQkFBb0I7WUFDdkJ0VCxTQUFTQTtZQUNUME8sUUFBUUE7UUFDWjtJQUNKO0lBQ0E4RSxlQUFlakUsS0FBSyxHQUFHK0Q7SUFDdkIsT0FBT0U7QUFDWDtBQUNBLCtEQUErRDtBQUMvRCxJQUFJQSxpQkFBaUJGLG9CQUFvQjVFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELElBQUkrRSxhQUFhLEtBQUs7QUFDdEIsU0FBU0Msb0JBQW9CclQsT0FBTztJQUNoQyxJQUFJc0ssV0FBV3RLLFFBQVFzSyxRQUFRLENBQUNDLFdBQVc7SUFDM0MsSUFBSUQsYUFBYSxXQUFXQSxhQUFhLFVBQVU7UUFDL0MsdURBQXVEO1FBQ3ZELHFEQUFxRDtRQUNyRCxPQUFPO0lBQ1g7SUFDQSxJQUFJZ0osWUFBWXZHLGNBQWMvTTtJQUM5QixJQUFJQSxRQUFRa0IsVUFBVSxJQUFJb1MsY0FBYyxNQUFNO1FBQzFDLDhDQUE4QztRQUM5QywrQ0FBK0M7UUFDL0MsT0FBTztJQUNYO0lBQ0EsSUFBSWhKLGFBQWEsU0FBUztRQUN0Qix5RUFBeUU7UUFDekUsK0VBQStFO1FBQy9FLDhFQUE4RTtRQUM5RSxrREFBa0Q7UUFDbEQsT0FBTyxDQUFDOEksV0FBVzNLLGtCQUFrQixJQUFJNkssY0FBYztJQUMzRDtJQUNBLElBQUloSixhQUFhLFVBQVU7UUFDdkIsT0FBT2dKLGNBQWM7SUFDekI7SUFDQSxJQUFJRixXQUFXeEksMEJBQTBCLElBQUs1SyxDQUFBQSxRQUFRcUssZUFBZSxJQUFJQyxhQUFhLEtBQUksR0FBSTtRQUMxRixtRkFBbUY7UUFDbkYsSUFBSXNFLHFCQUFxQjVPLFFBQVE4TSxZQUFZLENBQUM7UUFDOUMsT0FBTzhCLHNCQUFzQkEsdUJBQXVCO0lBQ3hEO0lBQ0EsSUFBSXRFLGFBQWEsU0FBU3RLLFFBQVEyTSxZQUFZLENBQUMsV0FBVztRQUN0RCw4RkFBOEY7UUFDOUYsZ0ZBQWdGO1FBQ2hGLE9BQU8yRyxjQUFjLFFBQVEsQ0FBQ0YsV0FBV25MLHNCQUFzQjtJQUNuRTtJQUNBLElBQUlxQyxhQUFhLFFBQVE7UUFDckIsdUNBQXVDO1FBQ3ZDLDJDQUEyQztRQUMzQyxPQUFPLENBQUNzSCxZQUFZNVI7SUFDeEI7SUFDQSxPQUFPO0FBQ1g7QUFDQSxTQUFTdVQ7SUFDTCxJQUFJN1QsT0FBT2EsVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBR1osVUFBVUQsS0FBS0MsT0FBTyxFQUFFeU8sY0FBYzFPLEtBQUsyTyxNQUFNLEVBQUVBLFNBQVNELGdCQUFnQm5QLFlBQVk7UUFDdkt1TCxVQUFVO1FBQ1ZxRyxTQUFTO1FBQ1QyQyxjQUFjO0lBQ2xCLElBQUlwRjtJQUNKLElBQUksQ0FBQ2dGLFlBQVk7UUFDYkEsYUFBYWhIO0lBQ2pCO0lBQ0EsSUFBSXFILGtCQUFrQk4sZUFBZWpFLEtBQUssQ0FBQ2IsTUFBTSxDQUFDO1FBQzlDNkUsOEJBQThCO1FBQzlCckMsU0FBU3hDLE9BQU93QyxPQUFPO0lBQzNCO0lBQ0EsSUFBSTdRLFVBQVVQLGlCQUFpQjtRQUMzQkksT0FBTztRQUNQQyxpQkFBaUI7UUFDakJILFNBQVNBO0lBQ2I7SUFDQSxJQUFJK1QsZ0JBQWdCekUsZ0JBQWdCQyxLQUFLLENBQUM7UUFDdEN2UCxTQUFTSztRQUNUcU8sUUFBUUE7SUFDWjtJQUNBLElBQUksQ0FBQ3FGLGlCQUFpQkwsb0JBQW9CclQsVUFBVTtRQUNoRCxPQUFPO0lBQ1g7SUFDQSxJQUFJLENBQUNxTyxPQUFPN0QsUUFBUSxJQUFJdUksV0FBVy9TLFVBQVU7UUFDekMsT0FBTztJQUNYO0lBQ0EsSUFBSSxDQUFDcU8sT0FBT21GLFlBQVksSUFBSUMsZ0JBQWdCelQsVUFBVTtRQUNsRCxvRUFBb0U7UUFDcEUsT0FBTztJQUNYO0lBQ0Esb0RBQW9EO0lBQ3BELElBQUksQ0FBQ3FPLE9BQU93QyxPQUFPLEVBQUU7UUFDakIsSUFBSThDLG9CQUFvQjtZQUNwQmhVLFNBQVNLO1lBQ1RxTyxRQUFRLENBQUM7UUFDYjtRQUNBLElBQUkrRSxXQUFXbEwsbUJBQW1CLEVBQUU7WUFDaEMscUVBQXFFO1lBQ3JFeUwsa0JBQWtCdEYsTUFBTSxDQUFDZ0QsZUFBZSxHQUFHO1FBQy9DO1FBQ0EsSUFBSStCLFdBQVd2SyxvQkFBb0IsRUFBRTtZQUNqQywrRUFBK0U7WUFDL0Usa0ZBQWtGO1lBQ2xGLElBQUkrSyxhQUFhNVQsUUFBUXNLLFFBQVEsQ0FBQ0MsV0FBVztZQUM3QyxJQUFJcUosZUFBZSxVQUFVO2dCQUN6QkQsa0JBQWtCdEYsTUFBTSxDQUFDOEMsYUFBYSxHQUFHO1lBQzdDO1FBQ0o7UUFDQSxJQUFJLENBQUNLLFVBQVV0QyxLQUFLLENBQUN5RSxvQkFBb0I7WUFDckMsT0FBTztRQUNYO0lBQ0o7SUFDQSxJQUFJdEQsZUFBZUQsZ0JBQWdCcFE7SUFDbkMsSUFBSXFRLGNBQWM7UUFDZCxJQUFJd0QsWUFBWXhELGFBQWEvRixRQUFRLENBQUNDLFdBQVc7UUFDakQsSUFBSXNKLGNBQWMsWUFBWSxDQUFDVCxXQUFXN0ssMEJBQTBCLEVBQUU7WUFDbEUsSUFBSSxDQUFDOEgsYUFBYXJDLFdBQVcsSUFBSSxDQUFDcUMsYUFBYTFILFlBQVksRUFBRTtnQkFDekQseUVBQXlFO2dCQUN6RSxPQUFPO1lBQ1g7UUFDSjtJQUNKO0lBQ0EsSUFBSTJCLFdBQVd0SyxRQUFRc0ssUUFBUSxDQUFDQyxXQUFXO0lBQzNDLElBQUlELGFBQWEsU0FBUzhJLFdBQVc5SCxnQkFBZ0IsSUFBSSxDQUFDK0UsZ0JBQWdCclEsUUFBUThNLFlBQVksQ0FBQyxnQkFBZ0IsTUFBTTtRQUNqSCxPQUFPO0lBQ1g7SUFDQSxPQUFPO0FBQ1g7QUFDQSwwQ0FBMEM7QUFDMUN5RyxpQkFBaUJsRixNQUFNLEdBQUc7SUFDdEIsSUFBSUEsU0FBUzlOLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2xGLElBQUl1VCxjQUFjLFNBQVNBLFlBQVluVSxPQUFPO1FBQzFDLE9BQU80VCxpQkFBaUI7WUFDcEI1VCxTQUFTQTtZQUNUME8sUUFBUUE7UUFDWjtJQUNKO0lBQ0F5RixZQUFZNUUsS0FBSyxHQUFHcUU7SUFDcEIsT0FBT087QUFDWDtBQUNBLGdFQUFnRTtBQUNoRSxJQUFJQSxjQUFjUCxpQkFBaUJsRixNQUFNLENBQUMsQ0FBQztBQUMzQyxTQUFTMEYsYUFBYUMsU0FBUztJQUMzQiw0REFBNEQ7SUFDNUQsSUFBSUMsU0FBUyxTQUFTQSxPQUFPclQsSUFBSTtRQUM3QixJQUFJQSxLQUFLTSxVQUFVLEVBQUU7WUFDakIsaUVBQWlFO1lBQ2pFLDBDQUEwQztZQUMxQyxPQUFPZ1QsV0FBV0MsYUFBYTtRQUNuQztRQUNBLElBQUlILFVBQVVwVCxPQUFPO1lBQ2pCLDJFQUEyRTtZQUMzRSxPQUFPc1QsV0FBV0MsYUFBYTtRQUNuQztRQUNBLE9BQU9ELFdBQVdFLFdBQVc7SUFDakM7SUFDQSxrRUFBa0U7SUFDbEUsbUdBQW1HO0lBQ25HSCxPQUFPSSxVQUFVLEdBQUdKO0lBQ3BCLE9BQU9BO0FBQ1g7QUFDQSxJQUFJSywwQkFBMEJQLGFBQWE5RTtBQUMzQyxTQUFTc0Y7SUFDTCxJQUFJN1UsT0FBT2EsVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBR1osVUFBVUQsS0FBS0MsT0FBTyxFQUFFNlUsaUJBQWlCOVUsS0FBSzhVLGNBQWMsRUFBRUMsc0JBQXNCL1UsS0FBSytVLG1CQUFtQixFQUFFQyxXQUFXaFYsS0FBS2dWLFFBQVE7SUFDek4sSUFBSSxDQUFDL1UsU0FBUztRQUNWQSxVQUFVVCxTQUFTaUIsZUFBZTtJQUN0QztJQUNBLElBQUl3VSxlQUFlYixZQUFZNUUsS0FBSyxDQUFDYixNQUFNLENBQUM7UUFDeENtRixjQUFjaUI7SUFDbEI7SUFDQSxJQUFJMVQsWUFBWUosWUFBWWhCO0lBQzVCLDJFQUEyRTtJQUMzRSxJQUFJaVYsU0FBUzdULFVBQVU4VCxnQkFBZ0IsQ0FDdkNsVixTQUNBdVUsV0FBV1ksWUFBWSxFQUN2QkosYUFBYSxRQUFRSiwwQkFBMEJQLGFBQWFZLGVBQzVEO0lBQ0EsSUFBSXZULE9BQU8sRUFBRTtJQUNiLE1BQU13VCxPQUFPRyxRQUFRLEdBQUc7UUFDcEIsSUFBSUgsT0FBT0ksV0FBVyxDQUFDOVQsVUFBVSxFQUFFO1lBQy9CLElBQUl5VCxhQUFhQyxPQUFPSSxXQUFXLEdBQUc7Z0JBQ2xDNVQsS0FBS0MsSUFBSSxDQUFDdVQsT0FBT0ksV0FBVztZQUNoQztZQUNBNVQsT0FBT0EsS0FBSzZULE1BQU0sQ0FBQ1YscUJBQXFCO2dCQUNwQzVVLFNBQVNpVixPQUFPSSxXQUFXLENBQUM5VCxVQUFVO2dCQUN0Q3VULHFCQUFxQkE7Z0JBQ3JCQyxVQUFVQTtZQUNkO1FBQ0osT0FBTztZQUNIdFQsS0FBS0MsSUFBSSxDQUFDdVQsT0FBT0ksV0FBVztRQUNoQztJQUNKO0lBQ0EseUNBQXlDO0lBQ3pDLElBQUlSLGdCQUFnQjtRQUNoQixJQUFJRSxhQUFhLE9BQU87WUFDcEIsSUFBSXpGLGdCQUFnQnRQLFVBQVU7Z0JBQzFCeUIsS0FBSzhULE9BQU8sQ0FBQ3ZWO1lBQ2pCO1FBQ0osT0FBTyxJQUFJZ1YsYUFBYWhWLFVBQVU7WUFDOUJ5QixLQUFLOFQsT0FBTyxDQUFDdlY7UUFDakI7SUFDSjtJQUNBLE9BQU95QjtBQUNYO0FBQ0EscURBQXFEO0FBQ3JELElBQUkrVCxhQUFhLEtBQUs7QUFDdEIsSUFBSUMsYUFBYSxLQUFLO0FBQ3RCLFNBQVNDO0lBQ0wsSUFBSSxDQUFDRixZQUFZO1FBQ2JBLGFBQWEvSTtJQUNqQjtJQUNBLElBQUksT0FBT2dKLGVBQWUsVUFBVTtRQUNoQyxPQUFPQTtJQUNYO0lBQ0Esa0dBQWtHO0lBQ2xHQSxhQUFhLEtBQUssMkNBQTJDO0lBQzVERCxDQUFBQSxXQUFXekosVUFBVSxHQUFHLGVBQWUsRUFBQyxJQUFLLHFDQUFxQztJQUNsRnlKLENBQUFBLFdBQVd2TixhQUFhLEdBQUcsY0FBYyxFQUFDLElBQUssOEZBQThGO0lBQzlJLGlFQUFpRTtJQUNqRSx1REFBdUQ7SUFDdkQsV0FBVyx3R0FBd0c7SUFDbkgsd0JBQXdCO0lBQ3hCLGFBQWEsMENBQTBDO0lBQ3ZELGdCQUFnQix3Q0FBd0M7SUFDeEQscUNBQXFDLDhCQUE4QjtJQUNuRSwyQkFBMkIsc0JBQXNCO0lBQ2pELFlBQWF1TixDQUFBQSxXQUFXNU4seUJBQXlCLEdBQUcsV0FBVyxrQkFBaUIsSUFBTTROLENBQUFBLFdBQVd0Six5QkFBeUIsR0FBRyxXQUFXLGtCQUFpQixJQUFNc0osQ0FBQUEsV0FBVzFMLFlBQVksR0FBRyxhQUFhLEVBQUMsSUFBSyw4Q0FBOEM7SUFDMVAsZ0JBQWdCLGdCQUFnQjtJQUNoQztJQUNBLHFHQUFxRztJQUNyRzJMLGFBQWF2RixnQkFBZ0J1RjtJQUM3QixPQUFPQTtBQUNYO0FBQ0EsU0FBU0U7SUFDTCxJQUFJNVYsT0FBT2EsVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBR1osVUFBVUQsS0FBS0MsT0FBTyxFQUFFNlUsaUJBQWlCOVUsS0FBSzhVLGNBQWMsRUFBRUMsc0JBQXNCL1UsS0FBSytVLG1CQUFtQjtJQUMvTCxJQUFJYyxZQUFZRjtJQUNoQixJQUFJRyxXQUFXN1YsUUFBUVIsZ0JBQWdCLENBQUNvVztJQUN4QyxpRUFBaUU7SUFDakUsSUFBSVosZUFBZWIsWUFBWTVFLEtBQUssQ0FBQ2IsTUFBTSxDQUFDO1FBQ3hDbUYsY0FBY2lCO0lBQ2xCO0lBQ0EsSUFBSW5NLFNBQVMsRUFBRSxDQUFDMkwsTUFBTSxDQUFDM1UsSUFBSSxDQUFDa1csVUFBVWI7SUFDdEMseUNBQXlDO0lBQ3pDLElBQUlILGtCQUFrQkcsYUFBYWhWLFVBQVU7UUFDekMySSxPQUFPNE0sT0FBTyxDQUFDdlY7SUFDbkI7SUFDQSxPQUFPMkk7QUFDWDtBQUNBLFNBQVNtTjtJQUNMLElBQUkvVixPQUFPYSxVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHWixVQUFVRCxLQUFLQyxPQUFPLEVBQUU2VSxpQkFBaUI5VSxLQUFLOFUsY0FBYyxFQUFFQyxzQkFBc0IvVSxLQUFLK1UsbUJBQW1CLEVBQUVpQixnQkFBZ0JoVyxLQUFLZ1YsUUFBUSxFQUFFQSxXQUFXZ0Isa0JBQWtCelcsWUFBWSxVQUFVeVc7SUFDblIsSUFBSTFWLFVBQVVQLGlCQUFpQjtRQUMzQkksT0FBTztRQUNQQyxpQkFBaUI7UUFDakJDLG1CQUFtQjtRQUNuQkosU0FBU0E7SUFDYjtJQUNBLElBQUlnRixVQUFVO1FBQ1ZoRixTQUFTSztRQUNUd1UsZ0JBQWdCQTtRQUNoQkMscUJBQXFCQTtRQUNyQkMsVUFBVUE7SUFDZDtJQUNBLElBQUlBLGFBQWEsU0FBUztRQUN0QixPQUFPWSxvQkFBb0IzUTtJQUMvQixPQUFPLElBQUkrUCxhQUFhLFlBQVlBLGFBQWEsT0FBTztRQUNwRCxPQUFPSCxxQkFBcUI1UDtJQUNoQztJQUNBLE1BQU0sSUFBSXBGLFVBQVU7QUFDeEI7QUFDQSxJQUFJb1csYUFBYSxLQUFLO0FBQ3RCLGlGQUFpRjtBQUNqRiw2RkFBNkY7QUFDN0YsSUFBSUMsMkJBQTJCO0FBQy9CLFNBQVNDO0lBQ0wsSUFBSW5XLE9BQU9hLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUdaLFVBQVVELEtBQUtDLE9BQU8sRUFBRXlPLGNBQWMxTyxLQUFLMk8sTUFBTSxFQUFFQSxTQUFTRCxnQkFBZ0JuUCxZQUFZO1FBQ3ZLcVAsU0FBUztRQUNUQyxZQUFZO1FBQ1pDLFFBQVE7UUFDUnFDLFNBQVM7UUFDVDJDLGNBQWM7SUFDbEIsSUFBSXBGO0lBQ0osSUFBSSxDQUFDdUgsWUFBWTtRQUNiQSxhQUFhdko7SUFDakI7SUFDQSxJQUFJcE0sVUFBVVAsaUJBQWlCO1FBQzNCSSxPQUFPO1FBQ1BDLGlCQUFpQjtRQUNqQkgsU0FBU0E7SUFDYjtJQUNBLElBQUlrQyxTQUFTc0IsRUFBRSxDQUFDWCxLQUFLLElBQUlYLFNBQVNzQixFQUFFLENBQUNmLE9BQU8sSUFBSVAsU0FBU21CLFlBQVksR0FBRyxJQUFJO1FBQ3hFLHdGQUF3RjtRQUN4RixpR0FBaUc7UUFDakcsNkdBQTZHO1FBQzdHLE9BQU87SUFDWDtJQUNBLElBQUlxTixlQUFlRCxnQkFBZ0JwUTtJQUNuQyxJQUFJcVEsY0FBYztRQUNkLElBQUl4TyxTQUFTc0IsRUFBRSxDQUFDTixNQUFNLElBQUloQixTQUFTc0IsRUFBRSxDQUFDWixHQUFHLEVBQUU7WUFDdkMsdUZBQXVGO1lBQ3ZGLE9BQU87UUFDWDtRQUNBLDhEQUE4RDtRQUM5RCw2REFBNkQ7UUFDN0QsSUFBSXdLLGNBQWNzRCxnQkFBZ0IsR0FBRztZQUNqQyxPQUFPO1FBQ1g7UUFDQSxJQUFJLENBQUNoQyxPQUFPd0MsT0FBTyxJQUFLaFAsQ0FBQUEsU0FBU3NCLEVBQUUsQ0FBQ1gsS0FBSyxJQUFJWCxTQUFTc0IsRUFBRSxDQUFDTixNQUFNLEtBQUssQ0FBQzJPLFVBQVVuQixlQUFlO1lBQzFGLDZGQUE2RjtZQUM3RixPQUFPO1FBQ1g7UUFDQSxnRUFBZ0U7UUFDaEUsZ0RBQWdEO1FBQ2hELElBQUl5RixnQkFBZ0J6RixhQUFhL0YsUUFBUSxDQUFDQyxXQUFXO1FBQ3JELElBQUl1TCxrQkFBa0IsVUFBVTtZQUM1QixJQUFJQyxlQUFlbFUsU0FBU04sSUFBSSxLQUFLLFlBQVlNLFNBQVNtQixZQUFZLElBQUksTUFBTW5CLFNBQVNOLElBQUksS0FBSyxXQUFXTSxTQUFTbUIsWUFBWSxJQUFJO1lBQ3RJLElBQUluQixTQUFTc0IsRUFBRSxDQUFDTixNQUFNLElBQUloQixTQUFTc0IsRUFBRSxDQUFDWCxLQUFLLElBQUksQ0FBQ3VULGNBQWM7Z0JBQzFELE9BQU87WUFDWDtRQUNKO0lBQ0o7SUFDQSxJQUFJekwsV0FBV3RLLFFBQVFzSyxRQUFRLENBQUNDLFdBQVc7SUFDM0MsSUFBSStJLFlBQVl2RyxjQUFjL007SUFDOUIsSUFBSTZNLFdBQVd5RyxjQUFjLE9BQU8sT0FBT0EsYUFBYTtJQUN4RCxJQUFJelIsU0FBU3NCLEVBQUUsQ0FBQ1AsSUFBSSxJQUFJZixTQUFTbUIsWUFBWSxJQUFJLE1BQU1xTixnQkFBZ0JyUSxRQUFRcUssZUFBZSxJQUFJaUosWUFBWSxHQUFHO1FBQzdHLHlFQUF5RTtRQUN6RSxpREFBaUQ7UUFDakQsT0FBTztJQUNYO0lBQ0EsSUFBSTBDLDRCQUE0Qm5KLGFBQWE7SUFDN0MsSUFBSW9KLHNCQUFzQjNDLGNBQWMsUUFBUUEsYUFBYTtJQUM3RCwrRkFBK0Y7SUFDL0Ysd0ZBQXdGO0lBQ3hGLElBQUl0VCxRQUFRMk0sWUFBWSxDQUFDLG9CQUFvQjtRQUN6Qyx3RUFBd0U7UUFDeEUsT0FBT3FKO0lBQ1g7SUFDQSxJQUFJSix5QkFBeUJsUixJQUFJLENBQUM0RixhQUFhdUMsYUFBYSxNQUFNO1FBQzlELE9BQU87SUFDWDtJQUNBLElBQUloTCxTQUFTc0IsRUFBRSxDQUFDTixNQUFNLElBQUloQixTQUFTc0IsRUFBRSxDQUFDWixHQUFHLEVBQUU7UUFDdkMsMkVBQTJFO1FBQzNFLCtDQUErQztRQUMvQyxJQUFJMlQsc0JBQXNCNUwsYUFBYSxXQUFXdEssUUFBUWtLLElBQUksS0FBSyxVQUFVbEssUUFBUWtLLElBQUksS0FBSyxjQUFjSSxhQUFhLFlBQVlBLGFBQWEsY0FBY3RLLFFBQVEyTSxZQUFZLENBQUM7UUFDckwsSUFBSSxDQUFDdUoscUJBQXFCO1lBQ3RCLElBQUk5TixRQUFRMUUsT0FBT21MLGdCQUFnQixDQUFDN08sU0FBUztZQUM3Q2tXLHNCQUFzQi9JLHFCQUFxQi9FO1FBQy9DO1FBQ0EsSUFBSSxDQUFDOE4scUJBQXFCO1lBQ3RCLE9BQU87UUFDWDtJQUNKO0lBQ0EsSUFBSTVMLGFBQWEsU0FBU2dKLGNBQWMsTUFBTTtRQUMxQyxJQUFJelIsU0FBU3NCLEVBQUUsQ0FBQ1gsS0FBSyxJQUFJWCxTQUFTc0IsRUFBRSxDQUFDTixNQUFNLElBQUloQixTQUFTbUIsWUFBWSxLQUFLLEdBQUc7WUFDeEUsd0ZBQXdGO1lBQ3hGLE9BQU87UUFDWDtJQUNKO0lBQ0EsSUFBSXJCLGVBQWUzQixTQUFTLFlBQVlBLFFBQVEyTSxZQUFZLENBQUMsZUFBZTtRQUN4RSxJQUFJcUosMkJBQTJCO1lBQzNCLGlGQUFpRjtZQUNqRixPQUFPO1FBQ1g7UUFDQSxJQUFJaFcsUUFBUTZFLEtBQUssSUFBSSxDQUFDOFEsV0FBVzdLLGlDQUFpQyxFQUFFO1lBQ2hFLGlFQUFpRTtZQUNqRSx5REFBeUQ7WUFDekQsMkRBQTJEO1lBQzNELE9BQU87UUFDWDtJQUNKO0lBQ0EsSUFBSVIsYUFBYSxTQUFTcUwsV0FBV3JLLGdCQUFnQixJQUFJMEssMkJBQTJCO1FBQ2hGLE9BQU87SUFDWDtJQUNBLElBQUluVSxTQUFTc0IsRUFBRSxDQUFDUixPQUFPLElBQUlkLFNBQVNzQixFQUFFLENBQUNQLElBQUksRUFBRTtRQUN6QyxJQUFJMEgsYUFBYSxPQUFPO1lBQ3BCLElBQUlxTCxXQUFXcEssUUFBUSxFQUFFO2dCQUNyQiw2REFBNkQ7Z0JBQzdELDREQUE0RDtnQkFDNUQsbURBQW1EO2dCQUNuRCxPQUFPO1lBQ1g7WUFDQSwwR0FBMEc7WUFDMUcsT0FBT3ZMLFFBQVEyTSxZQUFZLENBQUMsZ0JBQWdCc0o7UUFDaEQ7UUFDQSxJQUFJalcsUUFBUXFLLGVBQWUsRUFBRTtZQUN6QixJQUFJc0wsV0FBVzlLLHlCQUF5QixJQUFJb0wscUJBQXFCO2dCQUM3RCxPQUFPO1lBQ1g7WUFDQSwwR0FBMEc7WUFDMUcsT0FBT2pXLFFBQVEyTSxZQUFZLENBQUM7UUFDaEM7SUFDSjtJQUNBLElBQUkzTSxRQUFRbVcsUUFBUSxLQUFLbFgsV0FBVztRQUNoQyxPQUFPbU0sUUFBUWlELE9BQU9tRixZQUFZO0lBQ3RDO0lBQ0EsSUFBSWxKLGFBQWEsU0FBUztRQUN0QixJQUFJLENBQUN0SyxRQUFRMk0sWUFBWSxDQUFDLGFBQWE7WUFDbkMsMEdBQTBHO1lBQzFHLE9BQU87UUFDWCxPQUFPLElBQUk5SyxTQUFTc0IsRUFBRSxDQUFDWCxLQUFLLEVBQUU7WUFDMUIsc0VBQXNFO1lBQ3RFLE9BQU87UUFDWDtJQUNKO0lBQ0EsSUFBSThILGFBQWEsU0FBUztRQUN0QixJQUFJLENBQUN0SyxRQUFRMk0sWUFBWSxDQUFDLGFBQWE7WUFDbkMsSUFBSTlLLFNBQVNzQixFQUFFLENBQUNSLE9BQU8sSUFBSWQsU0FBU3NCLEVBQUUsQ0FBQ1AsSUFBSSxFQUFFO2dCQUN6QyxtSEFBbUg7Z0JBQ25ILE9BQU87WUFDWDtRQUNKLE9BQU8sSUFBSWYsU0FBU3NCLEVBQUUsQ0FBQ1gsS0FBSyxJQUFJWCxTQUFTc0IsRUFBRSxDQUFDVCxLQUFLLEVBQUU7WUFDL0Msa0ZBQWtGO1lBQ2xGLE9BQU87UUFDWDtJQUNKO0lBQ0EsSUFBSTRILGFBQWEsVUFBVTtRQUN2QixJQUFJekksU0FBU3NCLEVBQUUsQ0FBQ1gsS0FBSyxJQUFJWCxTQUFTc0IsRUFBRSxDQUFDTixNQUFNLEVBQUU7WUFDekMsdUhBQXVIO1lBQ3ZILE9BQU87UUFDWDtJQUNKO0lBQ0EsSUFBSXlILGFBQWEsVUFBVTtRQUN2QixzREFBc0Q7UUFDdEQsMkVBQTJFO1FBQzNFLHNFQUFzRTtRQUN0RSwrREFBK0Q7UUFDL0QsT0FBTztJQUNYO0lBQ0EsSUFBSSxDQUFDK0QsT0FBT0UsVUFBVSxJQUFJMU0sU0FBU3NCLEVBQUUsQ0FBQ1QsS0FBSyxFQUFFO1FBQ3pDLDhEQUE4RDtRQUM5RCw0Q0FBNEM7UUFDNUMsSUFBSTBULFNBQVMxUyxPQUFPbUwsZ0JBQWdCLENBQUM3TyxTQUFTO1FBQzlDLElBQUl1TixxQkFBcUI2SSxTQUFTO1lBQzlCLE9BQU9KO1FBQ1g7SUFDSjtJQUNBLElBQUluVSxTQUFTc0IsRUFBRSxDQUFDUixPQUFPLElBQUlkLFNBQVNzQixFQUFFLENBQUNQLElBQUksRUFBRTtRQUN6QywrREFBK0Q7UUFDL0QsK0NBQStDO1FBQy9DLElBQUkwSCxhQUFhLFFBQVE7WUFDckIsSUFBSXVILE1BQU1ILGVBQWUxUjtZQUN6QixJQUFJNlIsT0FBTzlFLGNBQWM4RSxPQUFPLEdBQUc7Z0JBQy9CLE9BQU87WUFDWDtRQUNKO1FBQ0EsSUFBSXdFLFVBQVUzUyxPQUFPbUwsZ0JBQWdCLENBQUM3TyxTQUFTO1FBQy9DLElBQUltTixxQkFBcUJrSixVQUFVO1lBQy9CLDJFQUEyRTtZQUMzRSxPQUFPclcsUUFBUW1XLFFBQVEsSUFBSTtRQUMvQjtRQUNBLElBQUksQ0FBQzlILE9BQU9DLE9BQU8sSUFBSVosa0JBQWtCMkksVUFBVTtZQUMvQyxJQUFJL0MsY0FBYyxNQUFNO2dCQUNwQixPQUFPMkM7WUFDWDtZQUNBLE9BQU9LLDhCQUE4QnRXLFlBQVl1Vyx5QkFBeUJ2VztRQUM5RTtRQUNBLDREQUE0RDtRQUM1RCwyQ0FBMkM7UUFDM0MsSUFBSTROLHNCQUFzQjVOLFNBQVNzSyxXQUFXO1lBQzFDLE9BQU87UUFDWDtRQUNBLElBQUl5RSxTQUFTL08sUUFBUWdQLGFBQWE7UUFDbEMsSUFBSUQsUUFBUTtZQUNSLElBQUlsQixpQkFBaUJrQixPQUFPekUsUUFBUSxDQUFDQyxXQUFXO1lBQ2hELElBQUl1RCxjQUFjcEssT0FBT21MLGdCQUFnQixDQUFDRSxRQUFRO1lBQ2xELHdEQUF3RDtZQUN4RCxJQUFJbkIsc0JBQXNCbUIsUUFBUXpFLFVBQVV1RCxnQkFBZ0JDLGNBQWM7Z0JBQ3RFLE9BQU87WUFDWDtZQUNBLDZFQUE2RTtZQUM3RSx5REFBeUQ7WUFDekQsSUFBSUosa0JBQWtCSSxjQUFjO2dCQUNoQyxxQ0FBcUM7Z0JBQ3JDLE9BQU9tSTtZQUNYO1FBQ0o7SUFDSjtJQUNBLDJEQUEyRDtJQUMzRCxPQUFPalcsUUFBUW1XLFFBQVEsSUFBSTtBQUMvQjtBQUNBLDBDQUEwQztBQUMxQ04sZ0JBQWdCeEgsTUFBTSxHQUFHO0lBQ3JCLElBQUlBLFNBQVM5TixVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNsRixJQUFJaVcsYUFBYSxTQUFTQSxXQUFXN1csT0FBTztRQUN4QyxPQUFPa1csZ0JBQWdCO1lBQ25CbFcsU0FBU0E7WUFDVDBPLFFBQVFBO1FBQ1o7SUFDSjtJQUNBbUksV0FBV3RILEtBQUssR0FBRzJHO0lBQ25CLE9BQU9XO0FBQ1g7QUFDQSxJQUFJRixnQ0FBZ0NySCxnQkFBZ0JDLEtBQUssQ0FBQ2IsTUFBTSxDQUFDO0lBQzdEQyxTQUFTO0FBQ2I7QUFDQSxJQUFJaUksMkJBQTJCVixnQkFBZ0J4SCxNQUFNLENBQUM7SUFDbERDLFNBQVM7QUFDYjtBQUNBLDJEQUEyRDtBQUMzRCxJQUFJa0ksYUFBYVgsZ0JBQWdCeEgsTUFBTSxDQUFDLENBQUM7QUFDekMsU0FBU29JO0lBQ0wsSUFBSS9XLE9BQU9hLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUdaLFVBQVVELEtBQUtDLE9BQU8sRUFBRTZVLGlCQUFpQjlVLEtBQUs4VSxjQUFjLEVBQUVDLHNCQUFzQi9VLEtBQUsrVSxtQkFBbUIsRUFBRUMsV0FBV2hWLEtBQUtnVixRQUFRO0lBQ3pOLElBQUlnQyxjQUFjRixXQUFXdEgsS0FBSyxDQUFDYixNQUFNLENBQUM7UUFDdENtRixjQUFjaUI7SUFDbEI7SUFDQSxPQUFPZ0IsZUFBZTtRQUNsQjlWLFNBQVNBO1FBQ1Q2VSxnQkFBZ0JBO1FBQ2hCQyxxQkFBcUJBO1FBQ3JCQyxVQUFVQTtJQUNkLEdBQUdULE1BQU0sQ0FBQ3lDO0FBQ2Q7QUFDQSwrREFBK0Q7QUFDL0QsU0FBU0MsbUJBQW1CQyxDQUFDLEVBQUVDLENBQUM7SUFDNUIsT0FBT0QsRUFBRUUsdUJBQXVCLENBQUNELEtBQUs1VyxLQUFLOFcsMkJBQTJCLEdBQUcsQ0FBQyxJQUFJO0FBQ2xGO0FBQ0EsU0FBU0MsYUFBYXhCLFFBQVE7SUFDMUIsT0FBT0EsU0FBU3lCLElBQUksQ0FBQ047QUFDekI7QUFDQSxTQUFTTyx3QkFBd0I5VixJQUFJLEVBQUU4SCxNQUFNO0lBQ3pDLDZEQUE2RDtJQUM3RCxPQUFPaUcsVUFBVS9OLE1BQU0sU0FBU3BCLE9BQU87UUFDbkMsT0FBT2tKLE9BQU80Tix1QkFBdUIsQ0FBQzlXLFdBQVdDLEtBQUs4VywyQkFBMkI7SUFDckY7QUFDSjtBQUNBLFNBQVNJLHFCQUFxQi9WLElBQUksRUFBRW9VLFFBQVEsRUFBRTRCLGNBQWM7SUFDeEQsNEVBQTRFO0lBQzVFLHdEQUF3RDtJQUN4RCxJQUFJQyxhQUFhLEVBQUU7SUFDbkI3QixTQUFTL08sT0FBTyxDQUFDLFNBQVN6RyxPQUFPO1FBQzdCLElBQUkrUCxVQUFVO1FBQ2QsSUFBSWdCLFNBQVMzUCxLQUFLa00sT0FBTyxDQUFDdE47UUFDMUIsSUFBSStRLFdBQVcsQ0FBQyxHQUFHO1lBQ2YsZ0NBQWdDO1lBQ2hDQSxTQUFTbUcsd0JBQXdCOVYsTUFBTXBCO1lBQ3ZDK1AsVUFBVTtRQUNkO1FBQ0EsSUFBSWdCLFdBQVcsQ0FBQyxHQUFHO1lBQ2YsNENBQTRDO1lBQzVDLDZDQUE2QztZQUM3Q0EsU0FBUzNQLEtBQUtoQyxNQUFNO1FBQ3hCO1FBQ0EscURBQXFEO1FBQ3JELElBQUlrWSxhQUFhMVksVUFBVXdZLGlCQUFpQkEsZUFBZXBYLFdBQVdBO1FBQ3RFLElBQUksQ0FBQ3NYLFdBQVdsWSxNQUFNLEVBQUU7WUFDcEIsZ0NBQWdDO1lBQ2hDO1FBQ0o7UUFDQWlZLFdBQVdoVyxJQUFJLENBQUM7WUFDWjBQLFFBQVFBO1lBQ1JoQixTQUFTQTtZQUNUeUYsVUFBVThCO1FBQ2Q7SUFDSjtJQUNBLE9BQU9EO0FBQ1g7QUFDQSxTQUFTRSx3QkFBd0JuVyxJQUFJLEVBQUVpVyxVQUFVO0lBQzdDLDJEQUEyRDtJQUMzRCw0Q0FBNEM7SUFDNUMsSUFBSUcsV0FBVztJQUNmLHFEQUFxRDtJQUNyRCwrQ0FBK0M7SUFDL0NILFdBQVdKLElBQUksQ0FBQyxTQUFTTCxDQUFDLEVBQUVDLENBQUM7UUFDekIsT0FBT0QsRUFBRTdGLE1BQU0sR0FBRzhGLEVBQUU5RixNQUFNO0lBQzlCO0lBQ0FzRyxXQUFXNVEsT0FBTyxDQUFDLFNBQVNnUixTQUFTO1FBQ2pDLHFEQUFxRDtRQUNyRCxJQUFJQyxTQUFTRCxVQUFVMUgsT0FBTyxHQUFHLElBQUk7UUFDckMsSUFBSTRILE9BQU87WUFDUEYsVUFBVTFHLE1BQU0sR0FBR3lHO1lBQ25CRTtTQUNILENBQUN6QyxNQUFNLENBQUN3QyxVQUFVakMsUUFBUTtRQUMzQnBVLEtBQUt3VyxNQUFNLENBQUNDLEtBQUssQ0FBQ3pXLE1BQU11VztRQUN4QkgsWUFBWUMsVUFBVWpDLFFBQVEsQ0FBQ3BXLE1BQU0sR0FBR3NZO0lBQzVDO0FBQ0o7QUFDQSxTQUFTSTtJQUNMLElBQUlwWSxPQUFPYSxVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHYSxPQUFPMUIsS0FBSzBCLElBQUksRUFBRW9VLFdBQVc5VixLQUFLOFYsUUFBUSxFQUFFNEIsaUJBQWlCMVgsS0FBSzBYLGNBQWM7SUFDbkssMERBQTBEO0lBQzFELElBQUlXLFFBQVEzVyxLQUFLL0IsS0FBSyxDQUFDO0lBQ3ZCLG1FQUFtRTtJQUNuRSxJQUFJMlksWUFBWXBaLFVBQVU0VyxVQUFVblcsS0FBSyxDQUFDO0lBQzFDMlgsYUFBYWdCO0lBQ2IscUVBQXFFO0lBQ3JFLDBDQUEwQztJQUMxQyxJQUFJWCxhQUFhRixxQkFBcUJZLE9BQU9DLFdBQVdaO0lBQ3hELGlGQUFpRjtJQUNqRkcsd0JBQXdCUSxPQUFPVjtJQUMvQixPQUFPVTtBQUNYO0FBQ0EsSUFBSUUsZUFBZTtJQUNmLFNBQVNDLGlCQUFpQmhQLE1BQU0sRUFBRWlQLEtBQUs7UUFDbkMsSUFBSSxJQUFJN0ksSUFBSSxHQUFHQSxJQUFJNkksTUFBTS9ZLE1BQU0sRUFBRWtRLElBQUk7WUFDakMsSUFBSThJLGFBQWFELEtBQUssQ0FBQzdJLEVBQUU7WUFDekI4SSxXQUFXaGEsVUFBVSxHQUFHZ2EsV0FBV2hhLFVBQVUsSUFBSTtZQUNqRGdhLFdBQVdDLFlBQVksR0FBRztZQUMxQixJQUFJLFdBQVdELFlBQVlBLFdBQVdFLFFBQVEsR0FBRztZQUNqRHRhLE9BQU9DLGNBQWMsQ0FBQ2lMLFFBQVFrUCxXQUFXNVMsR0FBRyxFQUFFNFM7UUFDbEQ7SUFDSjtJQUNBLE9BQU8sU0FBU0csV0FBVyxFQUFFQyxVQUFVLEVBQUVDLFdBQVc7UUFDaEQsSUFBSUQsWUFBWU4saUJBQWlCSyxZQUFZNU4sU0FBUyxFQUFFNk47UUFDeEQsSUFBSUMsYUFBYVAsaUJBQWlCSyxhQUFhRTtRQUMvQyxPQUFPRjtJQUNYO0FBQ0o7QUFDQSxTQUFTRyxnQkFBZ0JDLFFBQVEsRUFBRUosV0FBVztJQUMxQyxJQUFJLENBQUVJLENBQUFBLG9CQUFvQkosV0FBVSxHQUFJO1FBQ3BDLE1BQU0sSUFBSWhaLFVBQVU7SUFDeEI7QUFDSjtBQUNBLElBQUlxWixPQUFPO0lBQ1AsU0FBU0EsS0FBS2paLE9BQU87UUFDakIrWSxnQkFBZ0IsSUFBSSxFQUFFRTtRQUN0QixJQUFJLENBQUM3WCxTQUFTLEdBQUdKLFlBQVloQjtRQUM3QixJQUFJLENBQUNrWixJQUFJLEdBQUcsQ0FBQztJQUNqQjtJQUNBWixhQUFhVyxNQUFNO1FBQ2Y7WUFDSXBULEtBQUs7WUFDTHJILE9BQU8sU0FBUzJhLFlBQVl2WCxJQUFJO2dCQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDc1gsSUFBSSxDQUFDdFgsS0FBSyxFQUFFO29CQUNsQixtREFBbUQ7b0JBQ25ELCtDQUErQztvQkFDL0MsSUFBSSxDQUFDd1gsWUFBWSxDQUFDeFg7Z0JBQ3RCO2dCQUNBLE9BQU8sSUFBSSxDQUFDc1gsSUFBSSxDQUFDdFgsS0FBSztZQUMxQjtRQUNKO1FBQ0E7WUFDSWlFLEtBQUs7WUFDTHJILE9BQU8sU0FBUzRhLGFBQWF4WCxJQUFJO2dCQUM3QixJQUFJZ0UsTUFBTWtNLGFBQWFsUSxNQUFNLElBQUksQ0FBQ1IsU0FBUztnQkFDM0MsSUFBSSxDQUFDd0UsS0FBSztvQkFDTixtRUFBbUU7b0JBQ25FO2dCQUNKO2dCQUNBLElBQUksQ0FBQ3NULElBQUksQ0FBQ3RULElBQUloRSxJQUFJLENBQUMsR0FBR2tWLGNBQWM7b0JBQ2hDOVcsU0FBUzRGO2dCQUNiO1lBQ0o7UUFDSjtRQUNBO1lBQ0lDLEtBQUs7WUFDTHJILE9BQU8sU0FBUzZhLHFCQUFxQnhELFFBQVE7Z0JBQ3pDLHFEQUFxRDtnQkFDckQsMkNBQTJDO2dCQUMzQyxPQUFPQSxTQUFTdkIsTUFBTSxDQUFDLFNBQVNqVSxPQUFPO29CQUNuQyxJQUFJc0ssV0FBV3RLLFFBQVFzSyxRQUFRLENBQUNDLFdBQVc7b0JBQzNDLElBQUlELGFBQWEsUUFBUTt3QkFDckIsT0FBTztvQkFDWDtvQkFDQSxJQUFJL0UsTUFBTXZGLFFBQVFTLFVBQVU7b0JBQzVCLElBQUksQ0FBQyxJQUFJLENBQUNvWSxJQUFJLENBQUN0VCxJQUFJaEUsSUFBSSxDQUFDLEVBQUU7d0JBQ3RCLElBQUksQ0FBQ3NYLElBQUksQ0FBQ3RULElBQUloRSxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUM1QjtvQkFDQSxJQUFJLENBQUNzWCxJQUFJLENBQUN0VCxJQUFJaEUsSUFBSSxDQUFDLENBQUNGLElBQUksQ0FBQ3JCO29CQUN6QixPQUFPO2dCQUNYLEdBQUcsSUFBSTtZQUNYO1FBQ0o7S0FDSDtJQUNELE9BQU80WTtBQUNYO0FBQ0EsU0FBU0ssU0FBU3pELFFBQVEsRUFBRTdWLE9BQU87SUFDL0IsNERBQTREO0lBQzVELDREQUE0RDtJQUM1RCw0Q0FBNEM7SUFDNUMsSUFBSXVaLFVBQVV2WixRQUFRUixnQkFBZ0IsQ0FBQztJQUN2QyxJQUFJMFosT0FBTyxJQUFJRCxLQUFLalo7SUFDcEIscURBQXFEO0lBQ3JELDJDQUEyQztJQUMzQyxJQUFJcVksWUFBWWEsS0FBS0csb0JBQW9CLENBQUN4RDtJQUMxQyxJQUFJLENBQUMwRCxRQUFROVosTUFBTSxFQUFFO1FBQ2pCLHNEQUFzRDtRQUN0RCw0Q0FBNEM7UUFDNUMsT0FBTzRZO0lBQ1g7SUFDQSxPQUFPRixnQkFBZ0I7UUFDbkIxVyxNQUFNNFc7UUFDTnhDLFVBQVUwRDtRQUNWOUIsZ0JBQWdCLFNBQVNBLGVBQWUrQixLQUFLO1lBQ3pDLElBQUk1WCxPQUFPNFgsTUFBTXJNLFlBQVksQ0FBQyxVQUFVek4sS0FBSyxDQUFDO1lBQzlDLE9BQU93WixLQUFLQyxXQUFXLENBQUN2WDtRQUM1QjtJQUNKO0FBQ0o7QUFDQSxJQUFJNlgsaUJBQWlCO0lBQ2pCLFNBQVNsQixpQkFBaUJoUCxNQUFNLEVBQUVpUCxLQUFLO1FBQ25DLElBQUksSUFBSTdJLElBQUksR0FBR0EsSUFBSTZJLE1BQU0vWSxNQUFNLEVBQUVrUSxJQUFJO1lBQ2pDLElBQUk4SSxhQUFhRCxLQUFLLENBQUM3SSxFQUFFO1lBQ3pCOEksV0FBV2hhLFVBQVUsR0FBR2dhLFdBQVdoYSxVQUFVLElBQUk7WUFDakRnYSxXQUFXQyxZQUFZLEdBQUc7WUFDMUIsSUFBSSxXQUFXRCxZQUFZQSxXQUFXRSxRQUFRLEdBQUc7WUFDakR0YSxPQUFPQyxjQUFjLENBQUNpTCxRQUFRa1AsV0FBVzVTLEdBQUcsRUFBRTRTO1FBQ2xEO0lBQ0o7SUFDQSxPQUFPLFNBQVNHLFdBQVcsRUFBRUMsVUFBVSxFQUFFQyxXQUFXO1FBQ2hELElBQUlELFlBQVlOLGlCQUFpQkssWUFBWTVOLFNBQVMsRUFBRTZOO1FBQ3hELElBQUlDLGFBQWFQLGlCQUFpQkssYUFBYUU7UUFDL0MsT0FBT0Y7SUFDWDtBQUNKO0FBQ0EsU0FBU2Msa0JBQWtCVixRQUFRLEVBQUVKLFdBQVc7SUFDNUMsSUFBSSxDQUFFSSxDQUFBQSxvQkFBb0JKLFdBQVUsR0FBSTtRQUNwQyxNQUFNLElBQUloWixVQUFVO0lBQ3hCO0FBQ0o7QUFDQSxJQUFJK1osVUFBVTtJQUNWLFNBQVNBLFFBQVEzWixPQUFPLEVBQUU0WixZQUFZO1FBQ2xDRixrQkFBa0IsSUFBSSxFQUFFQztRQUN4QixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDM1osT0FBTyxHQUFHQTtRQUNmLDJDQUEyQztRQUMzQyxJQUFJLENBQUM0WixZQUFZLEdBQUdBO1FBQ3BCLHFEQUFxRDtRQUNyRCxJQUFJLENBQUNDLFdBQVcsR0FBRztRQUNuQixzREFBc0Q7UUFDdEQsSUFBSSxDQUFDQyxNQUFNLEdBQUcsQ0FBQztRQUNmLHFEQUFxRDtRQUNyRCxJQUFJLENBQUNDLFVBQVUsR0FBRyxFQUFFO1FBQ3BCLGdDQUFnQztRQUNoQyxJQUFJLENBQUNDLEtBQUssR0FBRyxDQUFDO1FBQ2Qsc0RBQXNEO1FBQ3RELElBQUksQ0FBQ25FLFFBQVEsR0FBRyxDQUFDO0lBQ3JCO0lBQ0Esb0RBQW9EO0lBQ3BENEQsZUFBZUUsU0FBUztRQUNwQjtZQUNJOVQsS0FBSztZQUNMckgsT0FBTyxTQUFTeWIsY0FBY2xaLElBQUk7Z0JBQzlCLElBQUlBLEtBQUttWixVQUFVLEVBQUU7b0JBQ2pCO2dCQUNKO2dCQUNBLDREQUE0RDtnQkFDNURuWixLQUFLbVosVUFBVSxHQUFHLFlBQVksSUFBSSxDQUFDTCxXQUFXO2dCQUM5QyxJQUFJLENBQUNHLEtBQUssQ0FBQ2paLEtBQUttWixVQUFVLENBQUMsR0FBR25aO2dCQUM5QixnQ0FBZ0M7Z0JBQ2hDLElBQUlvWixhQUFheFosY0FBYztvQkFDM0JYLFNBQVNlO2dCQUNiO2dCQUNBLElBQUlvWixZQUFZO29CQUNaLElBQUksQ0FBQ0YsYUFBYSxDQUFDRTtvQkFDbkIsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ3JaLE1BQU1vWjtnQkFDbkMsT0FBTztvQkFDSCxJQUFJLENBQUNKLFVBQVUsQ0FBQ3JZLElBQUksQ0FBQ1g7Z0JBQ3pCO1lBQ0o7UUFDSjtRQUNBO1lBQ0k4RSxLQUFLO1lBQ0xySCxPQUFPLFNBQVM0YixvQkFBb0JyWixJQUFJLEVBQUVxTyxNQUFNO2dCQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDMEssTUFBTSxDQUFDMUssT0FBTzhLLFVBQVUsQ0FBQyxFQUFFO29CQUNqQyxJQUFJLENBQUNKLE1BQU0sQ0FBQzFLLE9BQU84SyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUN2QztnQkFDQSxJQUFJLENBQUNKLE1BQU0sQ0FBQzFLLE9BQU84SyxVQUFVLENBQUMsQ0FBQ3hZLElBQUksQ0FBQ1g7WUFDeEM7UUFDSjtRQUNBO1lBQ0k4RSxLQUFLO1lBQ0xySCxPQUFPLFNBQVM2YixpQkFBaUJoYSxPQUFPLEVBQUVVLElBQUk7Z0JBQzFDLElBQUksQ0FBQyxJQUFJLENBQUM4VSxRQUFRLENBQUM5VSxLQUFLbVosVUFBVSxDQUFDLEVBQUU7b0JBQ2pDLElBQUksQ0FBQ3JFLFFBQVEsQ0FBQzlVLEtBQUttWixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUN2QztnQkFDQSxJQUFJLENBQUNyRSxRQUFRLENBQUM5VSxLQUFLbVosVUFBVSxDQUFDLENBQUN4WSxJQUFJLENBQUNyQjtZQUN4QztRQUNKO1FBQ0E7WUFDSXdGLEtBQUs7WUFDTHJILE9BQU8sU0FBUzhiLGdCQUFnQnpFLFFBQVE7Z0JBQ3BDLE9BQU9BLFNBQVN2QixNQUFNLENBQUMsU0FBU2pVLE9BQU87b0JBQ25DLElBQUlVLE9BQU9KLGNBQWM7d0JBQ3JCWCxTQUFTSztvQkFDYjtvQkFDQSxJQUFJLENBQUNVLE1BQU07d0JBQ1AsT0FBTztvQkFDWDtvQkFDQSxJQUFJLENBQUNrWixhQUFhLENBQUNsWjtvQkFDbkIsSUFBSSxDQUFDc1osZ0JBQWdCLENBQUNoYSxTQUFTVTtvQkFDL0IsT0FBTztnQkFDWCxHQUFHLElBQUk7WUFDWDtRQUNKO1FBQ0E7WUFDSThFLEtBQUs7WUFDTHJILE9BQU8sU0FBUzhZLEtBQUt6QixRQUFRO2dCQUN6QixJQUFJd0MsWUFBWSxJQUFJLENBQUNrQyxZQUFZLENBQUMxRTtnQkFDbEN3QyxZQUFZLElBQUksQ0FBQ21DLGFBQWEsQ0FBQ25DO2dCQUMvQixJQUFJLENBQUNvQyxRQUFRO2dCQUNiLE9BQU9wQztZQUNYO1FBQ0o7UUFDQTtZQUNJeFMsS0FBSztZQUNMckgsT0FBTyxTQUFTK2IsYUFBYTFFLFFBQVE7Z0JBQ2pDeFgsT0FBT3NILElBQUksQ0FBQyxJQUFJLENBQUNxVSxLQUFLLEVBQUVsVCxPQUFPLENBQUMsU0FBU29ULFVBQVU7b0JBQy9DLElBQUk5QixRQUFRLElBQUksQ0FBQ3ZDLFFBQVEsQ0FBQ3FFLFdBQVc7b0JBQ3JDLElBQUk3QixZQUFZLElBQUksQ0FBQ3lCLE1BQU0sQ0FBQ0ksV0FBVztvQkFDdkMsSUFBSVEsV0FBVyxJQUFJLENBQUNWLEtBQUssQ0FBQ0UsV0FBVyxDQUFDM1ksVUFBVTtvQkFDaEQsSUFBSSxDQUFDc1UsUUFBUSxDQUFDcUUsV0FBVyxHQUFHLElBQUksQ0FBQ1MsTUFBTSxDQUFDdkMsT0FBT0MsV0FBV3FDO2dCQUM5RCxHQUFHLElBQUk7Z0JBQ1AsT0FBTyxJQUFJLENBQUNDLE1BQU0sQ0FBQzlFLFVBQVUsSUFBSSxDQUFDa0UsVUFBVSxFQUFFLElBQUksQ0FBQy9aLE9BQU87WUFDOUQ7UUFDSjtRQUNBO1lBQ0k2RixLQUFLO1lBQ0xySCxPQUFPLFNBQVNtYyxPQUFPbFosSUFBSSxFQUFFb1UsUUFBUSxFQUFFN1YsT0FBTztnQkFDMUMsSUFBSTRhLFNBQVN6QyxnQkFBZ0I7b0JBQ3pCMVcsTUFBTUE7b0JBQ05vVSxVQUFVQTtnQkFDZDtnQkFDQSxPQUFPLElBQUksQ0FBQytELFlBQVksQ0FBQ2dCLFFBQVE1YTtZQUNyQztRQUNKO1FBQ0E7WUFDSTZGLEtBQUs7WUFDTHJILE9BQU8sU0FBU2djLGNBQWMzRSxRQUFRO2dCQUNsQyxPQUFPc0MsZ0JBQWdCO29CQUNuQjFXLE1BQU1vVTtvQkFDTkEsVUFBVSxJQUFJLENBQUNrRSxVQUFVO29CQUN6QnRDLGdCQUFnQixJQUFJLENBQUNvRCxtQkFBbUIsQ0FBQ0MsSUFBSSxDQUFDLElBQUk7Z0JBQ3REO1lBQ0o7UUFDSjtRQUNBO1lBQ0lqVixLQUFLO1lBQ0xySCxPQUFPLFNBQVNxYyxvQkFBb0I5WixJQUFJO2dCQUNwQyxJQUFJNlosU0FBU3pDLGdCQUFnQjtvQkFDekIxVyxNQUFNLElBQUksQ0FBQ29VLFFBQVEsQ0FBQzlVLEtBQUttWixVQUFVLENBQUM7b0JBQ3BDckUsVUFBVSxJQUFJLENBQUNpRSxNQUFNLENBQUMvWSxLQUFLbVosVUFBVSxDQUFDO29CQUN0Q3pDLGdCQUFnQixJQUFJLENBQUNvRCxtQkFBbUIsQ0FBQ0MsSUFBSSxDQUFDLElBQUk7Z0JBQ3REO2dCQUNBLElBQUluSCxZQUFZdkcsY0FBY3JNO2dCQUM5QixJQUFJNFMsY0FBYyxRQUFRQSxZQUFZLENBQUMsR0FBRztvQkFDdEMsT0FBTzt3QkFDSDVTO3FCQUNILENBQUN1VSxNQUFNLENBQUNzRjtnQkFDYjtnQkFDQSxPQUFPQTtZQUNYO1FBQ0o7UUFDQTtZQUNJL1UsS0FBSztZQUNMckgsT0FBTyxTQUFTaWM7Z0JBQ1osd0VBQXdFO2dCQUN4RXBjLE9BQU9zSCxJQUFJLENBQUMsSUFBSSxDQUFDcVUsS0FBSyxFQUFFbFQsT0FBTyxDQUFDLFNBQVNqQixHQUFHO29CQUN4QyxPQUFPLElBQUksQ0FBQ21VLEtBQUssQ0FBQ25VLElBQUksQ0FBQ3FVLFVBQVU7Z0JBQ3JDLEdBQUcsSUFBSTtZQUNYO1FBQ0o7S0FDSDtJQUNELE9BQU9QO0FBQ1g7QUFDQSxTQUFTb0IsYUFBYWxGLFFBQVEsRUFBRTdWLE9BQU8sRUFBRTRaLFlBQVk7SUFDakQsSUFBSW9CLFVBQVUsSUFBSXJCLFFBQVEzWixTQUFTNFo7SUFDbkMsSUFBSXZCLFlBQVkyQyxRQUFRVixlQUFlLENBQUN6RTtJQUN4QyxJQUFJd0MsVUFBVTVZLE1BQU0sS0FBS29XLFNBQVNwVyxNQUFNLEVBQUU7UUFDdEMsaURBQWlEO1FBQ2pELE9BQU9tYSxhQUFhL0Q7SUFDeEI7SUFDQSxPQUFPbUYsUUFBUTFELElBQUksQ0FBQ2U7QUFDeEI7QUFDQSxTQUFTNEMsYUFBYXBGLFFBQVE7SUFDMUIsa0VBQWtFO0lBQ2xFLHlIQUF5SDtJQUN6SCxxQ0FBcUM7SUFDckMsMEZBQTBGO0lBQzFGLDBFQUEwRTtJQUMxRSx3RUFBd0U7SUFDeEUsaUZBQWlGO0lBQ2pGLHNFQUFzRTtJQUN0RSxxRUFBcUU7SUFDckUsOERBQThEO0lBQzlELHVGQUF1RjtJQUN2Riw4RkFBOEY7SUFDOUYsMEVBQTBFO0lBQzFFLElBQUlqUSxNQUFNLENBQUM7SUFDWCxJQUFJc1YsVUFBVSxFQUFFO0lBQ2hCLElBQUlDLFNBQVN0RixTQUFTdkIsTUFBTSxDQUFDLFNBQVNqVSxPQUFPO1FBQ3pDLDRFQUE0RTtRQUM1RSxJQUFJbVcsV0FBV25XLFFBQVFtVyxRQUFRO1FBQy9CLElBQUlBLGFBQWFsWCxXQUFXO1lBQ3hCa1gsV0FBV3BKLGNBQWMvTTtRQUM3QjtRQUNBLDJDQUEyQztRQUMzQyxJQUFJbVcsWUFBWSxLQUFLQSxhQUFhLFFBQVFBLGFBQWFsWCxXQUFXO1lBQzlELE9BQU87UUFDWDtRQUNBLElBQUksQ0FBQ3NHLEdBQUcsQ0FBQzRRLFNBQVMsRUFBRTtZQUNoQix1RkFBdUY7WUFDdkY1USxHQUFHLENBQUM0USxTQUFTLEdBQUcsRUFBRTtZQUNsQix1Q0FBdUM7WUFDdkMwRSxRQUFReFosSUFBSSxDQUFDOFU7UUFDakI7UUFDQSxzQ0FBc0M7UUFDdEM1USxHQUFHLENBQUM0USxTQUFTLENBQUM5VSxJQUFJLENBQUNyQjtRQUNuQix3REFBd0Q7UUFDeEQsT0FBTztJQUNYO0lBQ0EsK0JBQStCO0lBQy9CLGtEQUFrRDtJQUNsRCwrQ0FBK0M7SUFDL0MsSUFBSWdZLFlBQVk2QyxRQUFRNUQsSUFBSSxHQUFHMVIsR0FBRyxDQUFDLFNBQVM0USxRQUFRO1FBQ2hELE9BQU81USxHQUFHLENBQUM0USxTQUFTO0lBQ3hCLEdBQUc0RSxXQUFXLENBQUMsU0FBU0MsUUFBUSxFQUFFQyxPQUFPO1FBQ3JDLE9BQU9BLFFBQVFoRyxNQUFNLENBQUMrRjtJQUMxQixHQUFHRjtJQUNILE9BQU85QztBQUNYO0FBQ0EsSUFBSWtELGFBQWEsS0FBSztBQUN0QixTQUFTQyx1QkFBdUIzRixRQUFRLEVBQUU3VixPQUFPO0lBQzdDLElBQUl5YixNQUFNNUYsU0FBU2xJLE9BQU8sQ0FBQzNOO0lBQzNCLElBQUl5YixNQUFNLEdBQUc7UUFDVCxJQUFJQyxNQUFNN0YsU0FBU29DLE1BQU0sQ0FBQ3dELEtBQUs7UUFDL0IsT0FBT0MsSUFBSXBHLE1BQU0sQ0FBQ087SUFDdEI7SUFDQSxPQUFPQTtBQUNYO0FBQ0EsU0FBUytELGFBQWEvRCxRQUFRLEVBQUU2RSxRQUFRO0lBQ3BDLElBQUlhLFdBQVduUCw0QkFBNEIsRUFBRTtRQUN6QyxpRUFBaUU7UUFDakUsOERBQThEO1FBQzlELGdEQUFnRDtRQUNoRHlKLFdBQVd5RCxTQUFTekQsVUFBVTZFO0lBQ2xDO0lBQ0E3RSxXQUFXb0YsYUFBYXBGO0lBQ3hCLE9BQU9BO0FBQ1g7QUFDQSxTQUFTOEY7SUFDTCxJQUFJNWIsT0FBT2EsVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBR1osVUFBVUQsS0FBS0MsT0FBTyxFQUFFNlUsaUJBQWlCOVUsS0FBSzhVLGNBQWMsRUFBRUMsc0JBQXNCL1UsS0FBSytVLG1CQUFtQixFQUFFQyxXQUFXaFYsS0FBS2dWLFFBQVE7SUFDek4sSUFBSSxDQUFDd0csWUFBWTtRQUNiQSxhQUFhOU87SUFDakI7SUFDQSxJQUFJaU8sV0FBV3piLFVBQVVlLFFBQVEsQ0FBQyxFQUFFLElBQUlULFNBQVNpQixlQUFlO0lBQ2hFLElBQUlxVixXQUFXaUIsY0FBYztRQUN6QjlXLFNBQVMwYTtRQUNUN0YsZ0JBQWdCQTtRQUNoQkMscUJBQXFCQTtRQUNyQkMsVUFBVUE7SUFDZDtJQUNBLElBQUl4VixTQUFTNkUsSUFBSSxDQUFDd1gsZ0JBQWdCLElBQUkxWixTQUFTc0IsRUFBRSxDQUFDWCxLQUFLLEVBQUU7UUFDckQsd0NBQXdDO1FBQ3hDLG9EQUFvRDtRQUNwRGdULFdBQVdrRixhQUFhbEYsVUFBVTZFLFVBQVVkO0lBQ2hELE9BQU87UUFDSC9ELFdBQVcrRCxhQUFhL0QsVUFBVTZFO0lBQ3RDO0lBQ0EsSUFBSTdGLGdCQUFnQjtRQUNoQiwyREFBMkQ7UUFDM0QsMEJBQTBCO1FBQzFCZ0IsV0FBVzJGLHVCQUF1QjNGLFVBQVU2RTtJQUNoRDtJQUNBLE9BQU83RTtBQUNYO0FBQ0EscUZBQXFGO0FBQ3JGLDhFQUE4RTtBQUM5RSx5REFBeUQ7QUFDekQsbURBQW1EO0FBQ25ELGlEQUFpRDtBQUNqRCxJQUFJZ0csVUFBVTtJQUNWLGdCQUFnQjtJQUNoQkMsS0FBSztJQUNMLGFBQWE7SUFDYkMsTUFBTTtJQUNOQyxJQUFJO0lBQ0pDLE9BQU87SUFDUEMsTUFBTTtJQUNOQyxRQUFRO0lBQ1IsV0FBVztJQUNYQyxVQUFVO0lBQ1YsYUFBYTtJQUNiQyxLQUFLO0lBQ0xDLE1BQU07SUFDTixTQUFTO0lBQ1RDLE9BQU87SUFDUEMsUUFBUTtJQUNSQyxPQUFPO0lBQ1AsV0FBVztJQUNYQyxPQUFPO0lBQ1BDLFVBQVU7SUFDVixhQUFhO0lBQ2JDLE1BQU07SUFDTkMsS0FBSztJQUNMQyxNQUFNO0lBQ04sa0JBQWtCO0lBQ2xCLCtDQUErQztJQUMvQyw2Q0FBNkM7SUFDN0NDLE9BQU87SUFDUCx1QkFBdUI7SUFDdkJDLFFBQVE7SUFDUkMsUUFBUTtJQUNSQyxXQUFXO0lBQ1gsb0VBQW9FO0lBQ3BFQyxRQUFRO1FBQ0osSUFBSTtZQUNBO1lBQ0E7WUFDQTtTQUNIO0lBQ0w7QUFDSjtBQUNBLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsSUFBSSxJQUFJQyxJQUFJLEdBQUdBLElBQUksSUFBSUEsSUFBSTtJQUN2QnZCLE9BQU8sQ0FBQyxNQUFNdUIsRUFBRSxHQUFHQSxJQUFJO0FBQzNCO0FBQ0EscUNBQXFDO0FBQ3JDLHdDQUF3QztBQUN4QyxJQUFJLElBQUlDLEtBQUssR0FBR0EsS0FBSyxJQUFJQSxLQUFLO0lBQzFCLElBQUlDLE9BQU9ELEtBQUs7SUFDaEIsSUFBSUUsVUFBVUYsS0FBSztJQUNuQnhCLE9BQU8sQ0FBQ3dCLEdBQUcsR0FBR0M7SUFDZHpCLE9BQU8sQ0FBQyxTQUFTd0IsR0FBRyxHQUFHRTtJQUN2QjFCLFFBQVFzQixNQUFNLENBQUNHLEtBQUssR0FBRztRQUNuQkM7S0FDSDtBQUNMO0FBQ0EsNkJBQTZCO0FBQzdCLElBQUksSUFBSUMsTUFBTSxHQUFHQSxNQUFNLElBQUlBLE1BQU07SUFDN0IsSUFBSUMsUUFBUUQsTUFBTTtJQUNsQixJQUFJRSxTQUFTN2QsT0FBTzhkLFlBQVksQ0FBQ0YsT0FBTzdTLFdBQVc7SUFDbkRpUixPQUFPLENBQUM2QixPQUFPLEdBQUdEO0FBQ3RCO0FBQ0EsSUFBSUcsV0FBVztJQUNYZixLQUFLO0lBQ0xELE1BQU07SUFDTkUsTUFBTTtJQUNOSixPQUFPO0FBQ1g7QUFDQSxJQUFJbUIsbUJBQW1CeGYsT0FBT3NILElBQUksQ0FBQ2lZLFVBQVVoWSxHQUFHLENBQUMsU0FBU2hFLElBQUk7SUFDMUQsT0FBT2djLFFBQVEsQ0FBQ2hjLEtBQUs7QUFDekI7QUFDQSxTQUFTa2Msd0JBQXdCQyxlQUFlO0lBQzVDLElBQUl2ZixRQUFRdWYsa0JBQWtCLE9BQU87SUFDckMsT0FBTztRQUNIQyxRQUFReGY7UUFDUnlmLFNBQVN6ZjtRQUNUMGYsU0FBUzFmO1FBQ1QyZixVQUFVM2Y7SUFDZDtBQUNKO0FBQ0EsU0FBUzRmLGlCQUFpQkMsU0FBUztJQUMvQixJQUFJTixrQkFBa0JNLFVBQVUxUSxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ2xELElBQUkyUSxXQUFXUix3QkFBd0JDO0lBQ3ZDTSxVQUFVdlgsT0FBTyxDQUFDLFNBQVN5WCxLQUFLO1FBQzVCLElBQUlBLFVBQVUsS0FBSztZQUNmLDRDQUE0QztZQUM1QztRQUNKO1FBQ0EsK0JBQStCO1FBQy9CLElBQUkvZixRQUFRO1FBQ1osSUFBSTJSLFdBQVdvTyxNQUFNN2UsS0FBSyxDQUFDLEdBQUc7UUFDOUIsSUFBSXlRLGFBQWEsS0FBSztZQUNsQiwyQ0FBMkM7WUFDM0MzUixRQUFRO1FBQ1osT0FBTyxJQUFJMlIsYUFBYSxLQUFLO1lBQ3pCLHNDQUFzQztZQUN0QzNSLFFBQVE7UUFDWjtRQUNBLElBQUlBLFVBQVUsTUFBTTtZQUNoQix5Q0FBeUM7WUFDekMrZixRQUFRQSxNQUFNN2UsS0FBSyxDQUFDO1FBQ3hCO1FBQ0EsSUFBSThlLGVBQWVaLFFBQVEsQ0FBQ1csTUFBTTtRQUNsQyxJQUFJLENBQUNDLGNBQWM7WUFDZixNQUFNLElBQUk1ZSxVQUFVLHVCQUF1QjJlLFFBQVE7UUFDdkQ7UUFDQUQsUUFBUSxDQUFDRSxhQUFhLEdBQUdoZ0I7SUFDN0I7SUFDQSxPQUFPOGY7QUFDWDtBQUNBLFNBQVNHLFdBQVc1WSxHQUFHO0lBQ25CLElBQUl5WCxPQUFPekIsT0FBTyxDQUFDaFcsSUFBSSxJQUFJeUgsU0FBU3pILEtBQUs7SUFDekMsSUFBSSxDQUFDeVgsUUFBUSxPQUFPQSxTQUFTLFlBQVkvUCxNQUFNK1AsT0FBTztRQUNsRCxNQUFNLElBQUkxZCxVQUFVLGtCQUFrQmlHLE1BQU07SUFDaEQ7SUFDQSxPQUFPO1FBQ0h5WDtLQUNILENBQUNoSSxNQUFNLENBQUN1RyxRQUFRc0IsTUFBTSxDQUFDRyxLQUFLLElBQUksRUFBRTtBQUN2QztBQUNBLFNBQVNvQixlQUFlSixRQUFRLEVBQUVLLEtBQUs7SUFDbkMsd0JBQXdCO0lBQ3hCLE9BQU8sQ0FBQ2QsaUJBQWlCL2IsSUFBSSxDQUFDLFNBQVM4YyxJQUFJO1FBQ3ZDLDJCQUEyQjtRQUMzQixPQUFPLE9BQU9OLFFBQVEsQ0FBQ00sS0FBSyxLQUFLLGFBQWFuVCxRQUFRa1QsS0FBSyxDQUFDQyxLQUFLLE1BQU1OLFFBQVEsQ0FBQ00sS0FBSztJQUN6RjtBQUNKO0FBQ0EsU0FBU0MsV0FBV0MsSUFBSTtJQUNwQixPQUFPQSxLQUFLek8sS0FBSyxDQUFDLE9BQU96SyxHQUFHLENBQUMsU0FBU21aLEtBQUs7UUFDdkMsSUFBSUMsU0FBU0QsTUFBTTFPLEtBQUssQ0FBQztRQUN6QixJQUFJNE8sYUFBYWIsaUJBQWlCWSxPQUFPdGYsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNuRCxJQUFJd2YsWUFBWVQsV0FBV08sT0FBT3RmLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE9BQU87WUFDSHlmLFVBQVVEO1lBQ1ZiLFdBQVdZO1lBQ1hQLGdCQUFnQkEsZUFBZTVELElBQUksQ0FBQyxNQUFNbUU7UUFDOUM7SUFDSjtBQUNKO0FBQ0Esc0RBQXNEO0FBQ3RELDhFQUE4RTtBQUM5RSw4R0FBOEc7QUFDOUc7Ozs7QUFJQSxHQUFHLFNBQVNHO0lBQ1IsSUFBSXJmLE9BQU9hLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUd3TyxTQUFTclAsS0FBS3FQLE1BQU0sRUFBRS9PLFVBQVVOLEtBQUtNLE9BQU8sRUFBRWdmLGNBQWN0ZixLQUFLc2YsV0FBVztJQUMvSixJQUFJalEsUUFBUTtRQUNSLE9BQU8sU0FBU2tRLFVBQVVyZSxJQUFJO1lBQzFCLE9BQU93SyxRQUFRNFQsZUFBZXBlLFNBQVNtTyxVQUFVQSxPQUFPK0gsdUJBQXVCLENBQUNsVyxRQUFRWCxLQUFLaWYsOEJBQThCO1FBQy9IO0lBQ0osT0FBTyxJQUFJbGYsU0FBUztRQUNoQixPQUFPLFNBQVNtZixXQUFXdmUsSUFBSTtZQUMzQixPQUFPd0ssUUFBUTRULGVBQWVoZixZQUFZWSxRQUFRQSxLQUFLa1csdUJBQXVCLENBQUM5VyxXQUFXQyxLQUFLaWYsOEJBQThCO1FBQ2pJO0lBQ0o7SUFDQSxNQUFNLElBQUkzZixVQUFVO0FBQ3hCO0FBQ0EsdUZBQXVGO0FBQ3ZGLDJFQUEyRTtBQUMzRSxTQUFTNmY7SUFDTCxJQUFJN1osTUFBTWhGLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQy9FLElBQUk4ZSxXQUFXLENBQUM7SUFDaEIsSUFBSTFmLFVBQVVmLFVBQVUyRyxJQUFJNUYsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJVCxTQUFTaUIsZUFBZTtJQUNuRSxPQUFPb0YsSUFBSTVGLE9BQU87SUFDbEIsSUFBSXNVLFNBQVNyVixVQUFVMkcsSUFBSTBPLE1BQU07SUFDakMsT0FBTzFPLElBQUkwTyxNQUFNO0lBQ2pCLElBQUlxTCxVQUFVdGhCLE9BQU9zSCxJQUFJLENBQUNDO0lBQzFCLElBQUksQ0FBQytaLFFBQVFsZ0IsTUFBTSxFQUFFO1FBQ2pCLE1BQU0sSUFBSUcsVUFBVTtJQUN4QjtJQUNBLElBQUlnZ0Isa0JBQWtCLFNBQVNBLGdCQUFnQmpCLEtBQUs7UUFDaERBLE1BQU1RLFFBQVEsQ0FBQ3JZLE9BQU8sQ0FBQyxTQUFTd1csSUFBSTtZQUNoQyxJQUFJLENBQUNvQyxRQUFRLENBQUNwQyxLQUFLLEVBQUU7Z0JBQ2pCb0MsUUFBUSxDQUFDcEMsS0FBSyxHQUFHLEVBQUU7WUFDdkI7WUFDQW9DLFFBQVEsQ0FBQ3BDLEtBQUssQ0FBQzViLElBQUksQ0FBQ2lkO1FBQ3hCO0lBQ0o7SUFDQWdCLFFBQVE3WSxPQUFPLENBQUMsU0FBU2dZLElBQUk7UUFDekIsSUFBSSxPQUFPbFosR0FBRyxDQUFDa1osS0FBSyxLQUFLLFlBQVk7WUFDakMsTUFBTSxJQUFJbGYsVUFBVSwrQkFBK0JrZixPQUFPO1FBQzlEO1FBQ0EsSUFBSWUsY0FBYyxTQUFTQSxZQUFZbEIsS0FBSztZQUN4Q0EsTUFBTWpQLFFBQVEsR0FBRzlKLEdBQUcsQ0FBQ2taLEtBQUs7WUFDMUIsT0FBT0g7UUFDWDtRQUNBRSxXQUFXQyxNQUFNbFosR0FBRyxDQUFDaWEsYUFBYS9ZLE9BQU8sQ0FBQzhZO0lBQzlDO0lBQ0EsSUFBSUUsZ0JBQWdCLFNBQVNBLGNBQWNuQixLQUFLO1FBQzVDLElBQUlBLE1BQU1vQixnQkFBZ0IsRUFBRTtZQUN4QjtRQUNKO1FBQ0EsSUFBSXpMLE9BQU83VSxNQUFNLEVBQUU7WUFDZixnREFBZ0Q7WUFDaEQsSUFBSXVnQixvQkFBb0JaLG9CQUFvQjtnQkFDeEMvZSxTQUFTc2UsTUFBTXBWLE1BQU07Z0JBQ3JCOFYsYUFBYTtZQUNqQjtZQUNBLElBQUkvSyxPQUFPeFMsSUFBSSxDQUFDa2Usb0JBQW9CO2dCQUNoQztZQUNKO1FBQ0o7UUFDQSxJQUFJbmEsTUFBTThZLE1BQU1zQixPQUFPLElBQUl0QixNQUFNdUIsS0FBSztRQUN0QyxJQUFJLENBQUNSLFFBQVEsQ0FBQzdaLElBQUksRUFBRTtZQUNoQjtRQUNKO1FBQ0E2WixRQUFRLENBQUM3WixJQUFJLENBQUNpQixPQUFPLENBQUMsU0FBU3FaLE1BQU07WUFDakMsSUFBSSxDQUFDQSxPQUFPekIsY0FBYyxDQUFDQyxRQUFRO2dCQUMvQjtZQUNKO1lBQ0F3QixPQUFPelEsUUFBUSxDQUFDL1AsSUFBSSxDQUFDSyxTQUFTMmUsT0FBT3lCO1FBQ3pDO0lBQ0o7SUFDQXBnQixRQUFRcWdCLGdCQUFnQixDQUFDLFdBQVdQLGVBQWU7SUFDbkQsSUFBSU0sWUFBWSxTQUFTQTtRQUNyQnBnQixRQUFRc2dCLG1CQUFtQixDQUFDLFdBQVdSLGVBQWU7SUFDMUQ7SUFDQSxPQUFPO1FBQ0hNLFdBQVdBO0lBQ2Y7QUFDSjtBQUNBLFNBQVN6aEIsU0FBUzRoQixLQUFLO0lBQ25CLElBQUksRUFBRXZnQixPQUFPLEVBQUUsR0FBR3VnQixVQUFVLEtBQUssSUFBSSxDQUFDLElBQUlBO0lBQzFDLElBQUksQ0FBQ3ZnQixTQUFTO1FBQ1ZBLFVBQVVULFNBQVNpQixlQUFlO0lBQ3RDO0lBQ0Esd0VBQXdFO0lBQ3hFLHFFQUFxRTtJQUNyRSwwRUFBMEU7SUFDMUVtYjtJQUNBLE9BQU84RCxRQUFRO1FBQ1gsb0RBQW9EO1FBQ3BELHNEQUFzRDtRQUN0RCxtQkFBbUIsU0FBU2UsWUFBWTdCLEtBQUs7WUFDekMsb0RBQW9EO1lBQ3BEQSxNQUFNOEIsY0FBYztZQUNwQixJQUFJQyxXQUFXL0UsaUJBQWlCO2dCQUM1QjNiLFNBQVNBO1lBQ2I7WUFDQSxJQUFJMmdCLFdBQVdoQyxNQUFNUixRQUFRO1lBQzdCLElBQUl5QyxRQUFRRixRQUFRLENBQUMsRUFBRTtZQUN2QixJQUFJRyxPQUFPSCxRQUFRLENBQUNBLFNBQVNqaEIsTUFBTSxHQUFHLEVBQUU7WUFDeEMsMkNBQTJDO1lBQzNDLElBQUlxaEIsU0FBU0gsV0FBV0MsUUFBUUM7WUFDaEMsSUFBSXRYLFNBQVNvWCxXQUFXRSxPQUFPRDtZQUMvQixJQUFJemYsZ0JBQWdCMmYsU0FBUztnQkFDekJ2WCxPQUFPckUsS0FBSztnQkFDWjtZQUNKO1lBQ0EsdUNBQXVDO1lBQ3ZDLElBQUk2YixlQUFlLEtBQUs7WUFDeEIsSUFBSUMsUUFBUU4sU0FBUzVlLElBQUksQ0FBQyxTQUFTekIsT0FBTyxFQUFFNGdCLEtBQUs7Z0JBQzdDLElBQUksQ0FBQzlmLGdCQUFnQmQsVUFBVTtvQkFDM0IsT0FBTztnQkFDWDtnQkFDQTBnQixlQUFlRTtnQkFDZixPQUFPO1lBQ1g7WUFDQSxJQUFJLENBQUNELE9BQU87Z0JBQ1Isb0RBQW9EO2dCQUNwREosTUFBTTFiLEtBQUs7Z0JBQ1g7WUFDSjtZQUNBLHVEQUF1RDtZQUN2RCxJQUFJa00sU0FBU3VQLFdBQVcsQ0FBQyxJQUFJO1lBQzdCRCxRQUFRLENBQUNLLGVBQWUzUCxPQUFPLENBQUNsTSxLQUFLO1FBQ3pDO0lBQ0o7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPM0csUUFBUStELE9BQU8sS0FBSyxjQUFlLE9BQU8vRCxRQUFRK0QsT0FBTyxLQUFLLFlBQVkvRCxRQUFRK0QsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPL0QsUUFBUStELE9BQU8sQ0FBQzRlLFVBQVUsS0FBSyxhQUFhO0lBQ3JLN2lCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUStELE9BQU8sRUFBRSxjQUFjO1FBQUU5RCxPQUFPO0lBQUs7SUFDbkVILE9BQU84aUIsTUFBTSxDQUFDNWlCLFFBQVErRCxPQUFPLEVBQUUvRDtJQUMvQjZpQixPQUFPN2lCLE9BQU8sR0FBR0EsUUFBUStELE9BQU87QUFDbEMsRUFFQSwrQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL092ZXJsYXkvbWFpbnRhaW4tLXRhYi1mb2N1cy5qcz84MjU0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovIC8vIEB0cy1ub2NoZWNrXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanNcbi8vIExpY2Vuc2U6IE1JVFxuLy8gQ29weXJpZ2h0IChjKSAyMDE1IFJvZG5leSBSZWhtXG4vL1xuLy8gRW50cnlwb2ludDogYWxseS5qcy9tYWludGFpbi90YWItZm9jdXNcblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2RlZmF1bHQ7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX3BsYXRmb3JtID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3BsYXRmb3JtXCIpKTtcbmNvbnN0IF9jc3Nlc2NhcGUgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvY3NzLmVzY2FwZVwiKSk7XG4vLyBpbnB1dCBtYXkgYmUgdW5kZWZpbmVkLCBzZWxlY3Rvci10cmluZywgTm9kZSwgTm9kZUxpc3QsIEhUTUxDb2xsZWN0aW9uLCBhcnJheSBvZiBOb2Rlc1xuLy8geWVzLCB0byBzb21lIGV4dGVudCB0aGlzIGlzIGEgYmFkIHJlcGxpY2Egb2YgalF1ZXJ5J3MgY29uc3RydWN0b3IgZnVuY3Rpb25cbmZ1bmN0aW9uIG5vZGVBcnJheShpbnB1dCkge1xuICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICAvLyBpbnN0YW5jZW9mIE5vZGUgLSBkb2VzIG5vdCB3b3JrIHdpdGggaWZyYW1lc1xuICAgIGlmIChpbnB1dC5ub2RlVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICBdO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChpbnB1dCk7XG4gICAgfVxuICAgIGlmIChpbnB1dC5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW10uc2xpY2UuY2FsbChpbnB1dCwgMCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bmV4cGVjdGVkIGlucHV0IFwiICsgU3RyaW5nKGlucHV0KSk7XG59XG5mdW5jdGlvbiBjb250ZXh0VG9FbGVtZW50KF9yZWYpIHtcbiAgICB2YXIgY29udGV4dCA9IF9yZWYuY29udGV4dCwgX3JlZiRsYWJlbCA9IF9yZWYubGFiZWwsIGxhYmVsID0gX3JlZiRsYWJlbCA9PT0gdW5kZWZpbmVkID8gXCJjb250ZXh0LXRvLWVsZW1lbnRcIiA6IF9yZWYkbGFiZWwsIHJlc29sdmVEb2N1bWVudCA9IF9yZWYucmVzb2x2ZURvY3VtZW50LCBkZWZhdWx0VG9Eb2N1bWVudCA9IF9yZWYuZGVmYXVsdFRvRG9jdW1lbnQ7XG4gICAgdmFyIGVsZW1lbnQgPSBub2RlQXJyYXkoY29udGV4dClbMF07XG4gICAgaWYgKHJlc29sdmVEb2N1bWVudCAmJiBlbGVtZW50ICYmIGVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgfVxuICAgIGlmICghZWxlbWVudCAmJiBkZWZhdWx0VG9Eb2N1bWVudCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihsYWJlbCArIFwiIHJlcXVpcmVzIHZhbGlkIG9wdGlvbnMuY29udGV4dFwiKTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIGVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGxhYmVsICsgXCIgcmVxdWlyZXMgb3B0aW9ucy5jb250ZXh0IHRvIGJlIGFuIEVsZW1lbnRcIik7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50O1xufVxuZnVuY3Rpb24gZ2V0U2hhZG93SG9zdCgpIHtcbiAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sIGNvbnRleHQgPSBfcmVmLmNvbnRleHQ7XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0VG9FbGVtZW50KHtcbiAgICAgICAgbGFiZWw6IFwiZ2V0L3NoYWRvdy1ob3N0XCIsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICB9KTtcbiAgICAvLyB3YWxrIHVwIHRvIHRoZSByb290XG4gICAgdmFyIGNvbnRhaW5lciA9IG51bGw7XG4gICAgd2hpbGUoZWxlbWVudCl7XG4gICAgICAgIGNvbnRhaW5lciA9IGVsZW1lbnQ7XG4gICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9Ob2RlLm5vZGVUeXBlXG4gICAgLy8gTk9URTogRmlyZWZveCAzNCBkb2VzIG5vdCBleHBvc2UgU2hhZG93Um9vdC5ob3N0IChidXQgMzcgZG9lcylcbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBjb250YWluZXIuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSAmJiBjb250YWluZXIuaG9zdCkge1xuICAgICAgICAvLyB0aGUgcm9vdCBpcyBhdHRhY2hlZCB0byBhIGZyYWdtZW50IG5vZGUgdGhhdCBoYXMgYSBob3N0XG4gICAgICAgIHJldHVybiBjb250YWluZXIuaG9zdDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudChub2RlKSB7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICB9XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcbn1cbmZ1bmN0aW9uIGlzQWN0aXZlRWxlbWVudChjb250ZXh0KSB7XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0VG9FbGVtZW50KHtcbiAgICAgICAgbGFiZWw6IFwiaXMvYWN0aXZlLWVsZW1lbnRcIixcbiAgICAgICAgcmVzb2x2ZURvY3VtZW50OiB0cnVlLFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfSk7XG4gICAgdmFyIF9kb2N1bWVudCA9IGdldERvY3VtZW50KGVsZW1lbnQpO1xuICAgIGlmIChfZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIHNoYWRvd0hvc3QgPSBnZXRTaGFkb3dIb3N0KHtcbiAgICAgICAgY29udGV4dDogZWxlbWVudFxuICAgIH0pO1xuICAgIGlmIChzaGFkb3dIb3N0ICYmIHNoYWRvd0hvc3Quc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50ID09PSBlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4vLyBbZWxlbSwgZWxlbS5wYXJlbnQsIGVsZW0ucGFyZW50LnBhcmVudCwg4oCmLCBodG1sXVxuLy8gd2lsbCBub3QgY29udGFpbiB0aGUgc2hhZG93Um9vdCAoRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkgYW5kIHNoYWRvd0hvc3RcbmZ1bmN0aW9uIGdldFBhcmVudHMoKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBjb250ZXh0ID0gX3JlZi5jb250ZXh0O1xuICAgIHZhciBsaXN0ID0gW107XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0VG9FbGVtZW50KHtcbiAgICAgICAgbGFiZWw6IFwiZ2V0L3BhcmVudHNcIixcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgIH0pO1xuICAgIHdoaWxlKGVsZW1lbnQpe1xuICAgICAgICBsaXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgIC8vIElFIGRvZXMga25vdyBzdXBwb3J0IHBhcmVudEVsZW1lbnQgb24gU1ZHRWxlbWVudFxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgICAgZWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG59XG4vLyBFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzIG1heSBiZSBhdmFpbGFibGUgYXQgYSBkaWZmZXJlbnQgbmFtZVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvQVBJL0VsZW1lbnQvbWF0Y2hlc1xudmFyIG5hbWVzID0gW1xuICAgIFwibWF0Y2hlc1wiLFxuICAgIFwid2Via2l0TWF0Y2hlc1NlbGVjdG9yXCIsXG4gICAgXCJtb3pNYXRjaGVzU2VsZWN0b3JcIixcbiAgICBcIm1zTWF0Y2hlc1NlbGVjdG9yXCJcbl07XG52YXIgbmFtZSA9IG51bGw7XG5mdW5jdGlvbiBmaW5kTWV0aG9kTmFtZShlbGVtZW50KSB7XG4gICAgbmFtZXMuc29tZShmdW5jdGlvbihfbmFtZSkge1xuICAgICAgICBpZiAoIWVsZW1lbnRbX25hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZSA9IF9uYW1lO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIGZpbmRNZXRob2ROYW1lKGVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudFtuYW1lXShzZWxlY3Rvcik7XG59XG4vLyBkZWVwIGNsb25lIG9mIG9yaWdpbmFsIHBsYXRmb3JtXG52YXIgcGxhdGZvcm0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KF9wbGF0Zm9ybS5kZWZhdWx0KSk7XG4vLyBvcGVyYXRpbmcgc3lzdGVtXG52YXIgb3MgPSBwbGF0Zm9ybS5vcy5mYW1pbHkgfHwgXCJcIjtcbnZhciBBTkRST0lEID0gb3MgPT09IFwiQW5kcm9pZFwiO1xudmFyIFdJTkRPV1MgPSBvcy5zbGljZSgwLCA3KSA9PT0gXCJXaW5kb3dzXCI7XG52YXIgT1NYID0gb3MgPT09IFwiT1MgWFwiO1xudmFyIElPUyA9IG9zID09PSBcImlPU1wiO1xuLy8gbGF5b3V0XG52YXIgQkxJTksgPSBwbGF0Zm9ybS5sYXlvdXQgPT09IFwiQmxpbmtcIjtcbnZhciBHRUNLTyA9IHBsYXRmb3JtLmxheW91dCA9PT0gXCJHZWNrb1wiO1xudmFyIFRSSURFTlQgPSBwbGF0Zm9ybS5sYXlvdXQgPT09IFwiVHJpZGVudFwiO1xudmFyIEVER0UgPSBwbGF0Zm9ybS5sYXlvdXQgPT09IFwiRWRnZUhUTUxcIjtcbnZhciBXRUJLSVQgPSBwbGF0Zm9ybS5sYXlvdXQgPT09IFwiV2ViS2l0XCI7XG4vLyBicm93c2VyIHZlcnNpb24gKG5vdCBsYXlvdXQgZW5naW5lIHZlcnNpb24hKVxudmFyIHZlcnNpb24gPSBwYXJzZUZsb2F0KHBsYXRmb3JtLnZlcnNpb24pO1xudmFyIG1ham9yVmVyc2lvbiA9IE1hdGguZmxvb3IodmVyc2lvbik7XG5wbGF0Zm9ybS5tYWpvclZlcnNpb24gPSBtYWpvclZlcnNpb247XG5wbGF0Zm9ybS5pcyA9IHtcbiAgICAvLyBvcGVyYXRpbmcgc3lzdGVtXG4gICAgQU5EUk9JRDogQU5EUk9JRCxcbiAgICBXSU5ET1dTOiBXSU5ET1dTLFxuICAgIE9TWDogT1NYLFxuICAgIElPUzogSU9TLFxuICAgIC8vIGxheW91dFxuICAgIEJMSU5LOiBCTElOSyxcbiAgICBHRUNLTzogR0VDS08sXG4gICAgVFJJREVOVDogVFJJREVOVCxcbiAgICBFREdFOiBFREdFLFxuICAgIFdFQktJVDogV0VCS0lULFxuICAgIC8vIElOVEVSTkVUIEVYUExPUkVSU1xuICAgIElFOTogVFJJREVOVCAmJiBtYWpvclZlcnNpb24gPT09IDksXG4gICAgSUUxMDogVFJJREVOVCAmJiBtYWpvclZlcnNpb24gPT09IDEwLFxuICAgIElFMTE6IFRSSURFTlQgJiYgbWFqb3JWZXJzaW9uID09PSAxMVxufTtcbmZ1bmN0aW9uIGJlZm9yZSgpIHtcbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgLy8gcmVtZW1iZXIgd2hhdCBoYWQgZm9jdXMgdG8gcmVzdG9yZSBhZnRlciB0ZXN0XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQ6IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsXG4gICAgICAgIC8vIHJlbWVtYmVyIHNjcm9sbCBwb3NpdGlvbnMgdG8gcmVzdG9yZSBhZnRlciB0ZXN0XG4gICAgICAgIHdpbmRvd1Njcm9sbFRvcDogd2luZG93LnNjcm9sbFRvcCxcbiAgICAgICAgd2luZG93U2Nyb2xsTGVmdDogd2luZG93LnNjcm9sbExlZnQsXG4gICAgICAgIGJvZHlTY3JvbGxUb3A6IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLFxuICAgICAgICBib2R5U2Nyb2xsTGVmdDogZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0XG4gICAgfTtcbiAgICAvLyB3cmFwIHRlc3RzIGluIGFuIGVsZW1lbnQgaGlkZGVuIGZyb20gc2NyZWVuIHJlYWRlcnMgdG8gcHJldmVudCB0aGVtXG4gICAgLy8gZnJvbSBhbm5vdW5jaW5nIGZvY3VzLCB3aGljaCBjYW4gYmUgcXVpdGUgaXJyaXRhdGluZyB0byB0aGUgdXNlclxuICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcInBvc2l0aW9uOmFic29sdXRlOyBwb3NpdGlvbjpmaXhlZDsgdG9wOjA7IGxlZnQ6LTJweDsgd2lkdGg6MXB4OyBoZWlnaHQ6MXB4OyBvdmVyZmxvdzpoaWRkZW47XCIpO1xuICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxpdmVcIiwgXCJvZmZcIik7XG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZShcImFyaWEtYnVzeVwiLCBcInRydWVcIik7XG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gICAgdmFyIF93aW5kb3cgPSBpZnJhbWUuY29udGVudFdpbmRvdztcbiAgICB2YXIgX2RvY3VtZW50ID0gX3dpbmRvdy5kb2N1bWVudDtcbiAgICBfZG9jdW1lbnQub3BlbigpO1xuICAgIF9kb2N1bWVudC5jbG9zZSgpO1xuICAgIHZhciB3cmFwcGVyID0gX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQod3JhcHBlcik7XG4gICAgZGF0YS5pZnJhbWUgPSBpZnJhbWU7XG4gICAgZGF0YS53cmFwcGVyID0gd3JhcHBlcjtcbiAgICBkYXRhLndpbmRvdyA9IF93aW5kb3c7XG4gICAgZGF0YS5kb2N1bWVudCA9IF9kb2N1bWVudDtcbiAgICByZXR1cm4gZGF0YTtcbn1cbi8vIG9wdGlvbnMuZWxlbWVudDpcbi8vICB7c3RyaW5nfSBlbGVtZW50IG5hbWVcbi8vICB7ZnVuY3Rpb259IGNhbGxiYWNrKHdyYXBwZXIsIGRvY3VtZW50KSB0byBnZW5lcmF0ZSBhbiBlbGVtZW50XG4vLyBvcHRpb25zLm11dGF0ZTogKG9wdGlvbmFsKVxuLy8gIHtmdW5jdGlvbn0gY2FsbGJhY2soZWxlbWVudCwgd3JhcHBlciwgZG9jdW1lbnQpIHRvIG1hbmlwdWxhdGUgZWxlbWVudCBwcmlvciB0byBmb2N1cy10ZXN0LlxuLy8gICAgICAgICAgICAgQ2FuIHJldHVybiBET01FbGVtZW50IHRvIGRlZmluZSBmb2N1cyB0YXJnZXQgKGRlZmF1bHQ6IGVsZW1lbnQpXG4vLyBvcHRpb25zLnZhbGlkYXRlOiAob3B0aW9uYWwpXG4vLyAge2Z1bmN0aW9ufSBjYWxsYmFjayhlbGVtZW50LCBmb2N1c1RhcmdldCwgZG9jdW1lbnQpIHRvIG1hbmlwdWxhdGUgdGVzdC1yZXN1bHRcbmZ1bmN0aW9uIHRlc3QoZGF0YSwgb3B0aW9ucykge1xuICAgIC8vIG1ha2Ugc3VyZSB3ZSBvcGVyYXRlIG9uIGEgY2xlYW4gc2xhdGVcbiAgICBkYXRhLndyYXBwZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAvLyBjcmVhdGUgZHVtbXkgZWxlbWVudCB0byB0ZXN0IGZvY3VzYWJpbGl0eSBvZlxuICAgIHZhciBlbGVtZW50ID0gdHlwZW9mIG9wdGlvbnMuZWxlbWVudCA9PT0gXCJzdHJpbmdcIiA/IGRhdGEuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChvcHRpb25zLmVsZW1lbnQpIDogb3B0aW9ucy5lbGVtZW50KGRhdGEud3JhcHBlciwgZGF0YS5kb2N1bWVudCk7XG4gICAgLy8gYWxsb3cgY2FsbGJhY2sgdG8gZnVydGhlciBzcGVjaWZ5IGR1bW15IGVsZW1lbnRcbiAgICAvLyBhbmQgb3B0aW9uYWxseSBkZWZpbmUgZWxlbWVudCB0byBmb2N1c1xuICAgIHZhciBmb2N1cyA9IG9wdGlvbnMubXV0YXRlICYmIG9wdGlvbnMubXV0YXRlKGVsZW1lbnQsIGRhdGEud3JhcHBlciwgZGF0YS5kb2N1bWVudCk7XG4gICAgaWYgKCFmb2N1cyAmJiBmb2N1cyAhPT0gZmFsc2UpIHtcbiAgICAgICAgZm9jdXMgPSBlbGVtZW50O1xuICAgIH1cbiAgICAvLyBlbGVtZW50IG5lZWRzIHRvIGJlIHBhcnQgb2YgdGhlIERPTSB0byBiZSBmb2N1c2FibGVcbiAgICAhZWxlbWVudC5wYXJlbnROb2RlICYmIGRhdGEud3JhcHBlci5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICAvLyB0ZXN0IGlmIHRoZSBlbGVtZW50IHdpdGggaW52YWxpZCB0YWJpbmRleCBjYW4gYmUgZm9jdXNlZFxuICAgIGZvY3VzICYmIGZvY3VzLmZvY3VzICYmIGZvY3VzLmZvY3VzKCk7XG4gICAgLy8gdmFsaWRhdGUgdGVzdCdzIHJlc3VsdFxuICAgIHJldHVybiBvcHRpb25zLnZhbGlkYXRlID8gb3B0aW9ucy52YWxpZGF0ZShlbGVtZW50LCBmb2N1cywgZGF0YS5kb2N1bWVudCkgOiBkYXRhLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGZvY3VzO1xufVxuZnVuY3Rpb24gYWZ0ZXIoZGF0YSkge1xuICAgIC8vIHJlc3RvcmUgZm9jdXMgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHRlc3QgYW5kIGNsZWFudXBcbiAgICBpZiAoZGF0YS5hY3RpdmVFbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICBpZiAocGxhdGZvcm0uaXMuSUUxMCkge1xuICAgICAgICAgICAgLy8gSUUxMCBkb2VzIG5vdCByZWRpcmVjdCBmb2N1cyB0byA8Ym9keT4gd2hlbiB0aGUgYWN0aXZlRWxlbWVudCBpcyByZW1vdmVkXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhLmFjdGl2ZUVsZW1lbnQgJiYgZGF0YS5hY3RpdmVFbGVtZW50LmZvY3VzICYmIGRhdGEuYWN0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRhdGEuaWZyYW1lKTtcbiAgICAvLyByZXN0b3JlIHNjcm9sbCBwb3NpdGlvblxuICAgIHdpbmRvdy5zY3JvbGxUb3AgPSBkYXRhLndpbmRvd1Njcm9sbFRvcDtcbiAgICB3aW5kb3cuc2Nyb2xsTGVmdCA9IGRhdGEud2luZG93U2Nyb2xsTGVmdDtcbiAgICBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA9IGRhdGEuYm9keVNjcm9sbFRvcDtcbiAgICBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQgPSBkYXRhLmJvZHlTY3JvbGxMZWZ0O1xufVxuZnVuY3Rpb24gZGV0ZWN0Rm9jdXModGVzdHMpIHtcbiAgICB2YXIgZGF0YSA9IGJlZm9yZSgpO1xuICAgIHZhciByZXN1bHRzID0ge307XG4gICAgT2JqZWN0LmtleXModGVzdHMpLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmVzdWx0c1trZXldID0gdGVzdChkYXRhLCB0ZXN0c1trZXldKTtcbiAgICB9KTtcbiAgICBhZnRlcihkYXRhKTtcbiAgICByZXR1cm4gcmVzdWx0cztcbn1cbi8vIHRoaXMgZmlsZSBpcyBvdmVyd3JpdHRlbiBieSBgbnBtIHJ1biBidWlsZDpwcmVgXG52YXIgdmVyc2lvbiQxID0gXCIxLjQuMVwiO1xuLypcbiAgICBGYWNpbGl0eSB0byBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gbG9jYWxTdG9yYWdlLlxuXG4gICAgVVNBR0U6XG4gICAgICBjYWNoZS5nZXQoJ2tleScpO1xuICAgICAgY2FjaGUuc2V0KCdrZXknLCAndmFsdWUnKTtcbiAqLyBmdW5jdGlvbiByZWFkTG9jYWxTdG9yYWdlKGtleSkge1xuICAgIC8vIGFsbG93IHJlYWRpbmcgZnJvbSBzdG9yYWdlIHRvIHJldHJpZXZlIHByZXZpb3VzIHN1cHBvcnQgcmVzdWx0c1xuICAgIC8vIGV2ZW4gd2hpbGUgdGhlIGRvY3VtZW50IGRvZXMgbm90IGhhdmUgZm9jdXNcbiAgICB2YXIgZGF0YSA9IHZvaWQgMDtcbiAgICB0cnkge1xuICAgICAgICBkYXRhID0gd2luZG93LmxvY2FsU3RvcmFnZSAmJiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgICAgZGF0YSA9IGRhdGEgPyBKU09OLnBhcnNlKGRhdGEpIDoge307XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkYXRhID0ge307XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24gd3JpdGVMb2NhbFN0b3JhZ2Uoa2V5LCB2YWx1ZSkge1xuICAgIGlmICghZG9jdW1lbnQuaGFzRm9jdXMoKSkge1xuICAgICAgICAvLyBpZiB0aGUgZG9jdW1lbnQgZG9lcyBub3QgaGF2ZSBmb2N1cyB3aGVuIHRlc3RzIGFyZSBleGVjdXRlZCwgZm9jdXMoKSBtYXlcbiAgICAgICAgLy8gbm90IGJlIGhhbmRsZWQgcHJvcGVybHkgYW5kIGV2ZW50cyBtYXkgbm90IGJlIGRpc3BhdGNoZWQgaW1tZWRpYXRlbHkuXG4gICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgZG9jdW1lbnQgaXMgcmVsb2FkZWQgd2hpbGUgRGV2ZWxvcGVyIFRvb2xzIGhhdmUgZm9jdXMuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZSAmJiB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBpZ25vcmVcbiAgICB9XG59XG52YXIgdXNlckFnZW50ID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCB8fCBcIlwiO1xudmFyIGNhY2hlS2V5ID0gXCJhbGx5LXN1cHBvcnRzLWNhY2hlXCI7XG52YXIgY2FjaGUgPSByZWFkTG9jYWxTdG9yYWdlKGNhY2hlS2V5KTtcbi8vIHVwZGF0ZSB0aGUgY2FjaGUgaWYgYWxseSBvciB0aGUgdXNlciBhZ2VudCBjaGFuZ2VkIChuZXdlciB2ZXJzaW9uLCBldGMpXG5pZiAoY2FjaGUudXNlckFnZW50ICE9PSB1c2VyQWdlbnQgfHwgY2FjaGUudmVyc2lvbiAhPT0gdmVyc2lvbiQxKSB7XG4gICAgY2FjaGUgPSB7fTtcbn1cbmNhY2hlLnVzZXJBZ2VudCA9IHVzZXJBZ2VudDtcbmNhY2hlLnZlcnNpb24gPSB2ZXJzaW9uJDE7XG52YXIgY2FjaGUkMSA9IHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWVzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlcykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIGNhY2hlW2tleV0gPSB2YWx1ZXNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNhY2hlLnRpbWUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIHdyaXRlTG9jYWxTdG9yYWdlKGNhY2hlS2V5LCBjYWNoZSk7XG4gICAgfVxufTtcbmZ1bmN0aW9uIGNzc1NoYWRvd1BpZXJjaW5nRGVlcENvbWJpbmF0b3IoKSB7XG4gICAgdmFyIGNvbWJpbmF0b3IgPSB2b2lkIDA7XG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3Mtc2NvcGluZy0xLyNkZWVwLWNvbWJpbmF0b3JcbiAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE3NTcyXG4gICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0NjA1MVxuICAgIHRyeSB7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJodG1sID4+PiA6Zmlyc3QtY2hpbGRcIik7XG4gICAgICAgIGNvbWJpbmF0b3IgPSBcIj4+PlwiO1xuICAgIH0gY2F0Y2ggKG5vQXJyb3dBcnJvd0Fycm93KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBvbGQgc3ludGF4IHN1cHBvcnRlZCBhdCBsZWFzdCB1cCB0byBDaHJvbWUgNDFcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDYwNTFcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJodG1sIC9kZWVwLyA6Zmlyc3QtY2hpbGRcIik7XG4gICAgICAgICAgICBjb21iaW5hdG9yID0gXCIvZGVlcC9cIjtcbiAgICAgICAgfSBjYXRjaCAobm9EZWVwKSB7XG4gICAgICAgICAgICBjb21iaW5hdG9yID0gXCJcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tYmluYXRvcjtcbn1cbnZhciBnaWYgPSBcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFBQUFQLy8veUg1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlCUkFBN1wiO1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ltZyNhdHRyLXVzZW1hcFxudmFyIGZvY3VzQXJlYUltZ1RhYmluZGV4ID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICc8bWFwIG5hbWU9XCJpbWFnZS1tYXAtdGFiaW5kZXgtdGVzdFwiPicgKyAnPGFyZWEgc2hhcGU9XCJyZWN0XCIgY29vcmRzPVwiNjMsMTksMTQ0LDQ1XCI+PC9tYXA+JyArICc8aW1nIHVzZW1hcD1cIiNpbWFnZS1tYXAtdGFiaW5kZXgtdGVzdFwiIHRhYmluZGV4PVwiLTFcIiBhbHQ9XCJcIiBzcmM9XCInICsgZ2lmICsgJ1wiPic7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJhcmVhXCIpO1xuICAgIH1cbn07XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW1nI2F0dHItdXNlbWFwXG52YXIgZm9jdXNBcmVhVGFiaW5kZXggPSB7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxtYXAgbmFtZT1cImltYWdlLW1hcC10YWJpbmRleC10ZXN0XCI+JyArICc8YXJlYSBocmVmPVwiI3ZvaWRcIiB0YWJpbmRleD1cIi0xXCIgc2hhcGU9XCJyZWN0XCIgY29vcmRzPVwiNjMsMTksMTQ0LDQ1XCI+PC9tYXA+JyArICc8aW1nIHVzZW1hcD1cIiNpbWFnZS1tYXAtdGFiaW5kZXgtdGVzdFwiIGFsdD1cIlwiIHNyYz1cIicgKyBnaWYgKyAnXCI+JztcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlKGVsZW1lbnQsIGZvY3VzVGFyZ2V0LCBfZG9jdW1lbnQpIHtcbiAgICAgICAgaWYgKHBsYXRmb3JtLmlzLkdFQ0tPKSB7XG4gICAgICAgICAgICAvLyBmaXhlcyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzM1XG4gICAgICAgICAgICAvLyBGaXJlZm94IGxvYWRzIHRoZSBEYXRhVVJJIGFzeW5jaHJvbm91c2x5LCBjYXVzaW5nIGEgZmFsc2UtbmVnYXRpdmVcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmb2N1cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcImFyZWFcIik7XG4gICAgICAgIGZvY3VzLmZvY3VzKCk7XG4gICAgICAgIHJldHVybiBfZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZm9jdXM7XG4gICAgfVxufTtcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbWcjYXR0ci11c2VtYXBcbnZhciBmb2N1c0FyZWFXaXRob3V0SHJlZiA9IHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPG1hcCBuYW1lPVwiaW1hZ2UtbWFwLWFyZWEtaHJlZi10ZXN0XCI+JyArICc8YXJlYSBzaGFwZT1cInJlY3RcIiBjb29yZHM9XCI2MywxOSwxNDQsNDVcIj48L21hcD4nICsgJzxpbWcgdXNlbWFwPVwiI2ltYWdlLW1hcC1hcmVhLWhyZWYtdGVzdFwiIGFsdD1cIlwiIHNyYz1cIicgKyBnaWYgKyAnXCI+JztcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihcImFyZWFcIik7XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUoZWxlbWVudCwgZm9jdXNUYXJnZXQsIF9kb2N1bWVudCkge1xuICAgICAgICBpZiAocGxhdGZvcm0uaXMuR0VDS08pIHtcbiAgICAgICAgICAgIC8vIGZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvMzVcbiAgICAgICAgICAgIC8vIEZpcmVmb3ggbG9hZHMgdGhlIERhdGFVUkkgYXN5bmNocm9ub3VzbHksIGNhdXNpbmcgYSBmYWxzZS1uZWdhdGl2ZVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmb2N1c1RhcmdldDtcbiAgICB9XG59O1xudmFyIGZvY3VzQXVkaW9XaXRob3V0Q29udHJvbHMgPSB7XG4gICAgbmFtZTogXCJjYW4tZm9jdXMtYXVkaW8td2l0aG91dC1jb250cm9sc1wiLFxuICAgIGVsZW1lbnQ6IFwiYXVkaW9cIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBpbnZhbGlkIG1lZGlhIGZpbGUgY2FuIHRyaWdnZXIgd2FybmluZyBpbiBjb25zb2xlLCBkYXRhLXVyaSB0byBwcmV2ZW50IEhUVFAgcmVxdWVzdFxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgZ2lmKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJRTkgbWF5IHRocm93IFwiRXJyb3I6IE5vdCBpbXBsZW1lbnRlZFwiXG4gICAgICAgIH1cbiAgICB9XG59O1xudmFyIGludmFsaWRHaWYgPSBcImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFBQUFQLy8vWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlwiO1xuLy8gTk9URTogaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9hbGx5LmpzL2lzc3Vlcy8zNVxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ltZyNhdHRyLXVzZW1hcFxudmFyIGZvY3VzQnJva2VuSW1hZ2VNYXAgPSB7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxtYXAgbmFtZT1cImJyb2tlbi1pbWFnZS1tYXAtdGVzdFwiPjxhcmVhIGhyZWY9XCIjdm9pZFwiIHNoYXBlPVwicmVjdFwiIGNvb3Jkcz1cIjYzLDE5LDE0NCw0NVwiPjwvbWFwPicgKyAnPGltZyB1c2VtYXA9XCIjYnJva2VuLWltYWdlLW1hcC10ZXN0XCIgYWx0PVwiXCIgc3JjPVwiJyArIGludmFsaWRHaWYgKyAnXCI+JztcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihcImFyZWFcIik7XG4gICAgfVxufTtcbi8vIENoaWxkcmVuIG9mIGZvY3VzYWJsZSBlbGVtZW50cyB3aXRoIGRpc3BsYXk6ZmxleCBhcmUgZm9jdXNhYmxlIGluIElFMTAtMTFcbnZhciBmb2N1c0NoaWxkcmVuT2ZGb2N1c2FibGVGbGV4Ym94ID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJkaXNwbGF5OiAtd2Via2l0LWZsZXg7IGRpc3BsYXk6IC1tcy1mbGV4Ym94OyBkaXNwbGF5OiBmbGV4O1wiKTtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPHNwYW4gc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIj5oZWxsbzwvc3Bhbj4nO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwic3BhblwiKTtcbiAgICB9XG59O1xuLy8gZmllbGRzZXRbdGFiaW5kZXg9MF1bZGlzYWJsZWRdIHNob3VsZCBub3QgYmUgZm9jdXNhYmxlLCBidXQgQmxpbmsgYW5kIFdlYktpdCBkaXNhZ3JlZVxuLy8gQHNwZWNpZmljYXRpb24gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2Rpc2FibGVkLWVsZW1lbnRzLmh0bWwjY29uY2VwdC1lbGVtZW50LWRpc2FibGVkXG4vLyBAYnJvd3Nlci1pc3N1ZSBDaHJvbWl1bSBodHRwczovL2NyYnVnLmNvbS80NTM4NDdcbi8vIEBicm93c2VyLWlzc3VlIFdlYktpdCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDg2XG52YXIgZm9jdXNGaWVsZHNldERpc2FibGVkID0ge1xuICAgIGVsZW1lbnQ6IFwiZmllbGRzZXRcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgMCk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlZFwiKTtcbiAgICB9XG59O1xudmFyIGZvY3VzRmllbGRzZXQgPSB7XG4gICAgZWxlbWVudDogXCJmaWVsZHNldFwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBcIjxsZWdlbmQ+bGVnZW5kPC9sZWdlbmQ+PHA+Y29udGVudDwvcD5cIjtcbiAgICB9XG59O1xuLy8gZWxlbWVudHMgd2l0aCBkaXNwbGF5OmZsZXggYXJlIGZvY3VzYWJsZSBpbiBJRTEwLTExXG52YXIgZm9jdXNGbGV4Ym94Q29udGFpbmVyID0ge1xuICAgIGVsZW1lbnQ6IFwic3BhblwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImRpc3BsYXk6IC13ZWJraXQtZmxleDsgZGlzcGxheTogLW1zLWZsZXhib3g7IGRpc3BsYXk6IGZsZXg7XCIpO1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1wiPmhlbGxvPC9zcGFuPic7XG4gICAgfVxufTtcbi8vIGZvcm1bdGFiaW5kZXg9MF1bZGlzYWJsZWRdIHNob3VsZCBiZSBmb2N1c2FibGUgYXMgdGhlXG4vLyBzcGVjaWZpY2F0aW9uIGRvZXNuJ3Qga25vdyB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIG9uIHRoZSBmb3JtIGVsZW1lbnRcbi8vIEBzcGVjaWZpY2F0aW9uIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9mb3Jtcy5odG1sI3RoZS1mb3JtLWVsZW1lbnRcbnZhciBmb2N1c0Zvcm1EaXNhYmxlZCA9IHtcbiAgICBlbGVtZW50OiBcImZvcm1cIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgMCk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlZFwiKTtcbiAgICB9XG59O1xuLy8gTk9URTogaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9hbGx5LmpzL2lzc3Vlcy8zNVxuLy8gZml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9hbGx5LmpzL2lzc3Vlcy8yMFxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ltZyNhdHRyLWlzbWFwXG52YXIgZm9jdXNJbWdJc21hcCA9IHtcbiAgICBlbGVtZW50OiBcImFcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuaHJlZiA9IFwiI3ZvaWRcIjtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPGltZyBpc21hcCBzcmM9XCInICsgZ2lmICsgJ1wiIGFsdD1cIlwiPic7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbWdcIik7XG4gICAgfVxufTtcbi8vIE5PVEU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvMzVcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbWcjYXR0ci11c2VtYXBcbnZhciBmb2N1c0ltZ1VzZW1hcFRhYmluZGV4ID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICc8bWFwIG5hbWU9XCJpbWFnZS1tYXAtdGFiaW5kZXgtdGVzdFwiPjxhcmVhIGhyZWY9XCIjdm9pZFwiIHNoYXBlPVwicmVjdFwiIGNvb3Jkcz1cIjYzLDE5LDE0NCw0NVwiPjwvbWFwPicgKyAnPGltZyB1c2VtYXA9XCIjaW1hZ2UtbWFwLXRhYmluZGV4LXRlc3RcIiB0YWJpbmRleD1cIi0xXCIgYWx0PVwiXCIgJyArICdzcmM9XCInICsgZ2lmICsgJ1wiPic7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbWdcIik7XG4gICAgfVxufTtcbnZhciBmb2N1c0luSGlkZGVuSWZyYW1lID0ge1xuICAgIGVsZW1lbnQ6IGZ1bmN0aW9uIGVsZW1lbnQod3JhcHBlciwgX2RvY3VtZW50KSB7XG4gICAgICAgIHZhciBpZnJhbWUgPSBfZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICAgICAgLy8gaWZyYW1lIG11c3QgYmUgcGFydCBvZiB0aGUgRE9NIGJlZm9yZSBhY2Nlc3NpbmcgdGhlIGNvbnRlbnRXaW5kb3cgaXMgcG9zc2libGVcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAgICAgICAvLyBjcmVhdGUgdGhlIGlmcmFtZSdzIGRlZmF1bHQgZG9jdW1lbnQgKDxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPilcbiAgICAgICAgdmFyIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gICAgICAgIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgICAgICAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuIGlmcmFtZTtcbiAgICB9LFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGlmcmFtZSkge1xuICAgICAgICBpZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIHZhciBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICAgICAgICB2YXIgaW5wdXQgPSBpZnJhbWVEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICAgIGlmcmFtZURvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW5wdXQpO1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUoaWZyYW1lKSB7XG4gICAgICAgIHZhciBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICAgICAgICB2YXIgZm9jdXMgPSBpZnJhbWVEb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgICAgIHJldHVybiBpZnJhbWVEb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmb2N1cztcbiAgICB9XG59O1xudmFyIHJlc3VsdCA9ICFwbGF0Zm9ybS5pcy5XRUJLSVQ7XG5mdW5jdGlvbiBmb2N1c0luWmVyb0RpbWVuc2lvbk9iamVjdCgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLy8gRmlyZWZveCBhbGxvd3MgKmFueSogdmFsdWUgYW5kIHRyZWF0cyBpbnZhbGlkIHZhbHVlcyBsaWtlIHRhYmluZGV4PVwiLTFcIlxuLy8gQGJyb3dzZXItaXNzdWUgR2Vja28gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyODA1NFxudmFyIGZvY3VzSW52YWxpZFRhYmluZGV4ID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiaW52YWxpZC12YWx1ZVwiKTtcbiAgICB9XG59O1xudmFyIGZvY3VzTGFiZWxUYWJpbmRleCA9IHtcbiAgICBlbGVtZW50OiBcImxhYmVsXCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUoZWxlbWVudCwgZm9jdXNUYXJnZXQsIF9kb2N1bWVudCkge1xuICAgICAgICAvLyBmb3JjZSBsYXlvdXQgaW4gQ2hyb21lIDQ5LCBvdGhlcndpc2UgdGhlIGVsZW1lbnQgd29uJ3QgYmUgZm9jdXNhYmxlXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovIHZhciB2YXJpYWJsZVRvUHJldmVudERlYWRDb2RlRWxpbWluYXRpb24gPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqLyBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHJldHVybiBfZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZWxlbWVudDtcbiAgICB9XG59O1xudmFyIHN2ZyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhodGJcIiArIFwiRzV6T25oc2FXNXJQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUwzaHNhVzVySWlCcFpEMGljM1puSWo0OGRHVjRkQ0I0UFNJeE1DSWdlVDBpTWpBaUlHbGtQU0pcIiArIFwiemRtY3RiR2x1YXkxMFpYaDBJajUwWlhoMFBDOTBaWGgwUGp3dmMzWm5QZz09XCI7XG4vLyBOb3RlOiBJRTEwIG9uIEJyb3dzZXJTdGFjayBkb2VzIG5vdCBsaWtlIHRoaXMgdGVzdFxudmFyIGZvY3VzT2JqZWN0U3ZnSGlkZGVuID0ge1xuICAgIGVsZW1lbnQ6IFwib2JqZWN0XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJpbWFnZS9zdmcreG1sXCIpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGFcIiwgc3ZnKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjIwMFwiKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCI1MFwiKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICB9XG59O1xuLy8gTm90ZTogSUUxMCBvbiBCcm93c2VyU3RhY2sgZG9lcyBub3QgbGlrZSB0aGlzIHRlc3RcbnZhciBmb2N1c09iamVjdFN2ZyA9IHtcbiAgICBuYW1lOiBcImNhbi1mb2N1cy1vYmplY3Qtc3ZnXCIsXG4gICAgZWxlbWVudDogXCJvYmplY3RcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImltYWdlL3N2Zyt4bWxcIik7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiZGF0YVwiLCBzdmcpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIFwiMjAwXCIpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIjUwXCIpO1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlKGVsZW1lbnQsIGZvY3VzVGFyZ2V0LCBfZG9jdW1lbnQpIHtcbiAgICAgICAgaWYgKHBsYXRmb3JtLmlzLkdFQ0tPKSB7XG4gICAgICAgICAgICAvLyBGaXJlZm94IHNlZW1zIHRvIGJlIGhhbmRsaW5nIHRoZSBvYmplY3QgY3JlYXRpb24gYXN5bmNocm9ub3VzbHkgYW5kIHRoZXJlYnkgcHJvZHVjZXMgYSBmYWxzZSBuZWdhdGl2ZSB0ZXN0IHJlc3VsdC5cbiAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2Uga25vdyBGaXJlZm94IGlzIGFibGUgdG8gZm9jdXMgb2JqZWN0IGVsZW1lbnRzIHJlZmVyZW5jaW5nIFNWR3MsIHdlIHNpbXBseSBjaGVhdCBieSBzbmlmZmluZyB0aGUgdXNlciBhZ2VudCBzdHJpbmdcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZWxlbWVudDtcbiAgICB9XG59O1xuLy8gRXZlcnkgRW52aXJvbm1lbnQgZXhjZXB0IElFOSBjb25zaWRlcnMgU1dGIG9iamVjdHMgZm9jdXNhYmxlXG52YXIgcmVzdWx0JDEgPSAhcGxhdGZvcm0uaXMuSUU5O1xuZnVuY3Rpb24gZm9jdXNPYmplY3RTd2YoKSB7XG4gICAgcmV0dXJuIHJlc3VsdCQxO1xufVxudmFyIGZvY3VzUmVkaXJlY3RJbWdVc2VtYXAgPSB7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxtYXAgbmFtZT1cImZvY3VzLXJlZGlyZWN0LWltZy11c2VtYXBcIj48YXJlYSBocmVmPVwiI3ZvaWRcIiBzaGFwZT1cInJlY3RcIiBjb29yZHM9XCI2MywxOSwxNDQsNDVcIj48L21hcD4nICsgJzxpbWcgdXNlbWFwPVwiI2ZvY3VzLXJlZGlyZWN0LWltZy11c2VtYXBcIiBhbHQ9XCJcIiAnICsgJ3NyYz1cIicgKyBnaWYgKyAnXCI+JztcbiAgICAgICAgLy8gZm9jdXMgdGhlIDxpbWc+LCBub3QgdGhlIDxkaXY+XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpbWdcIik7XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUoZWxlbWVudCwgZm9jdXNUYXJnZXQsIF9kb2N1bWVudCkge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiYXJlYVwiKTtcbiAgICAgICAgcmV0dXJuIF9kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0YXJnZXQ7XG4gICAgfVxufTtcbi8vIHNlZSBodHRwczovL2pzYmluLmNvbS9uZW5pcmlzYWdlL2VkaXQ/aHRtbCxqcyxjb25zb2xlLG91dHB1dFxudmFyIGZvY3VzUmVkaXJlY3RMZWdlbmQgPSB7XG4gICAgZWxlbWVudDogXCJmaWVsZHNldFwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPGxlZ2VuZD5sZWdlbmQ8L2xlZ2VuZD48aW5wdXQgdGFiaW5kZXg9XCItMVwiPjxpbnB1dCB0YWJpbmRleD1cIjBcIj4nO1xuICAgICAgICAvLyB0YWtlIGNhcmUgb2YgZm9jdXMgaW4gdmFsaWRhdGUoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlKGVsZW1lbnQsIGZvY3VzVGFyZ2V0LCBfZG9jdW1lbnQpIHtcbiAgICAgICAgdmFyIGZvY3VzYWJsZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdGFiaW5kZXg9XCItMVwiXScpO1xuICAgICAgICB2YXIgdGFiYmFibGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3RhYmluZGV4PVwiMFwiXScpO1xuICAgICAgICAvLyBGaXJlZm94IHJlcXVpcmVzIHRoaXMgdGVzdCB0byBmb2N1cyB0aGUgPGZpZWxkc2V0PiBmaXJzdCwgd2hpbGUgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IGluXG4gICAgICAgIC8vIGh0dHBzOi8vanNiaW4uY29tL25lbmlyaXNhZ2UvZWRpdD9odG1sLGpzLGNvbnNvbGUsb3V0cHV0XG4gICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwibGVnZW5kXCIpLmZvY3VzKCk7XG4gICAgICAgIHJldHVybiBfZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZm9jdXNhYmxlICYmIFwiZm9jdXNhYmxlXCIgfHwgX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRhYmJhYmxlICYmIFwidGFiYmFibGVcIiB8fCBcIlwiO1xuICAgIH1cbn07XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzIxXG52YXIgZm9jdXNTY3JvbGxCb2R5ID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDUwcHg7IG92ZXJmbG93OiBhdXRvO1wiKTtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT1cIndpZHRoOiA1MDBweDsgaGVpZ2h0OiA0MHB4O1wiPnNjcm9sbGFibGUgY29udGVudDwvZGl2Pic7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXZcIik7XG4gICAgfVxufTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvMjFcbnZhciBmb2N1c1Njcm9sbENvbnRhaW5lcldpdGhvdXRPdmVyZmxvdyA9IHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4O1wiKTtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPGRpdiBzdHlsZT1cIndpZHRoOiA1MDBweDsgaGVpZ2h0OiA0MHB4O1wiPnNjcm9sbGFibGUgY29udGVudDwvZGl2Pic7XG4gICAgfVxufTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvMjFcbnZhciBmb2N1c1Njcm9sbENvbnRhaW5lciA9IHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxvdzogYXV0bztcIik7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJ3aWR0aDogNTAwcHg7IGhlaWdodDogNDBweDtcIj5zY3JvbGxhYmxlIGNvbnRlbnQ8L2Rpdj4nO1xuICAgIH1cbn07XG52YXIgZm9jdXNTdW1tYXJ5ID0ge1xuICAgIGVsZW1lbnQ6IFwiZGV0YWlsc1wiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBcIjxzdW1tYXJ5PmZvbzwvc3VtbWFyeT48cD5jb250ZW50PC9wPlwiO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICB9XG59O1xuZnVuY3Rpb24gbWFrZUZvY3VzYWJsZUZvcmVpZ25PYmplY3QoKSB7XG4gICAgLy8gQ29uc3RydWN0cyA8Zm9yZWlnbk9iamVjdCB3aWR0aD1cIjMwXCIgaGVpZ2h0PVwiMzBcIj48aW5wdXQgdHlwZT1cInRleHRcIi8+PC9mb3JlaWduT2JqZWN0PlxuICAgIC8vIHdpdGhvdXQgcmFpc2luZyBhIFRydXN0ZWQgVHlwZXMgdmlvbGF0aW9uXG4gICAgdmFyIGZvcmVpZ25PYmplY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImZvcmVpZ25PYmplY3RcIik7XG4gICAgZm9yZWlnbk9iamVjdC53aWR0aC5iYXNlVmFsLnZhbHVlID0gMzA7XG4gICAgZm9yZWlnbk9iamVjdC5oZWlnaHQuYmFzZVZhbC52YWx1ZSA9IDMwO1xuICAgIGZvcmVpZ25PYmplY3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpKTtcbiAgICBmb3JlaWduT2JqZWN0Lmxhc3RDaGlsZC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgcmV0dXJuIGZvcmVpZ25PYmplY3Q7XG59XG5mdW5jdGlvbiBmb2N1c1N2Z0ZvcmVpZ25PYmplY3RIYWNrKGVsZW1lbnQpIHtcbiAgICAvLyBFZGdlMTMsIEVkZ2UxNDogZm9yZWlnbk9iamVjdCBmb2N1cyBoYWNrXG4gICAgLy8gaHR0cHM6Ly9qc2Jpbi5jb20va3VuZWhpbnVnaS9lZGl0P2h0bWwsanMsb3V0cHV0XG4gICAgLy8gaHR0cHM6Ly9qc2Jpbi5jb20vZmFqYWdpLzMvZWRpdD9odG1sLGpzLG91dHB1dFxuICAgIHZhciBpc1N2Z0VsZW1lbnQgPSBlbGVtZW50Lm93bmVyU1ZHRWxlbWVudCB8fCBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwic3ZnXCI7XG4gICAgaWYgKCFpc1N2Z0VsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBpbmplY3QgYW5kIGZvY3VzIGFuIDxpbnB1dD4gZWxlbWVudCBpbnRvIHRoZSBTVkcgZWxlbWVudCB0byByZWNlaXZlIGZvY3VzXG4gICAgdmFyIGZvcmVpZ25PYmplY3QgPSBtYWtlRm9jdXNhYmxlRm9yZWlnbk9iamVjdCgpO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZm9yZWlnbk9iamVjdCk7XG4gICAgdmFyIGlucHV0ID0gZm9yZWlnbk9iamVjdC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgaW5wdXQuZm9jdXMoKTtcbiAgICAvLyB1cG9uIGRpc2FibGluZyB0aGUgYWN0aXZlRWxlbWVudCwgSUUgYW5kIEVkZ2VcbiAgICAvLyB3aWxsIG5vdCBzaGlmdCBmb2N1cyB0byA8Ym9keT4gbGlrZSBhbGwgdGhlIG90aGVyXG4gICAgLy8gYnJvd3NlcnMsIGJ1dCBpbnN0ZWFkIGZpbmQgdGhlIGZpcnN0IGZvY3VzYWJsZVxuICAgIC8vIGFuY2VzdG9yIGFuZCBzaGlmdCBmb2N1cyB0byB0aGF0XG4gICAgaW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgIC8vIGNsZWFuIHVwXG4gICAgZWxlbWVudC5yZW1vdmVDaGlsZChmb3JlaWduT2JqZWN0KTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPicgKyBlbGVtZW50ICsgXCI8L3N2Zz5cIjtcbn1cbmZ1bmN0aW9uIGZvY3VzKGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5mb2N1cykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5mb2N1cy5jYWxsKGVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZm9jdXNTdmdGb3JlaWduT2JqZWN0SGFjayhlbGVtZW50KTtcbiAgICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZShlbGVtZW50LCBmb2N1c1RhcmdldCwgX2RvY3VtZW50KSB7XG4gICAgZm9jdXMoZm9jdXNUYXJnZXQpO1xuICAgIHJldHVybiBfZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZm9jdXNUYXJnZXQ7XG59XG52YXIgZm9jdXNTdmdGb2N1c2FibGVBdHRyaWJ1dGUgPSB7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZ2VuZXJhdGUoJzx0ZXh0IGZvY3VzYWJsZT1cInRydWVcIj5hPC90ZXh0PicpO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidGV4dFwiKTtcbiAgICB9LFxuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZVxufTtcbnZhciBmb2N1c1N2Z1RhYmluZGV4QXR0cmlidXRlID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGdlbmVyYXRlKCc8dGV4dCB0YWJpbmRleD1cIjBcIj5hPC90ZXh0PicpO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidGV4dFwiKTtcbiAgICB9LFxuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZVxufTtcbnZhciBmb2N1c1N2Z05lZ2F0aXZlVGFiaW5kZXhBdHRyaWJ1dGUgPSB7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZ2VuZXJhdGUoJzx0ZXh0IHRhYmluZGV4PVwiLTFcIj5hPC90ZXh0PicpO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidGV4dFwiKTtcbiAgICB9LFxuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZVxufTtcbnZhciBmb2N1c1N2Z1VzZVRhYmluZGV4ID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGdlbmVyYXRlKFtcbiAgICAgICAgICAgICc8ZyBpZD1cImFsbHktdGVzdC10YXJnZXRcIj48YSB4bGluazpocmVmPVwiI3ZvaWRcIj48dGV4dD5saW5rPC90ZXh0PjwvYT48L2c+JyxcbiAgICAgICAgICAgICc8dXNlIHhsaW5rOmhyZWY9XCIjYWxseS10ZXN0LXRhcmdldFwiIHg9XCIwXCIgeT1cIjBcIiB0YWJpbmRleD1cIi0xXCIgLz4nXG4gICAgICAgIF0uam9pbihcIlwiKSk7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJ1c2VcIik7XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogdmFsaWRhdGVcbn07XG52YXIgZm9jdXNTdmdGb3JlaWdub2JqZWN0VGFiaW5kZXggPSB7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gZ2VuZXJhdGUoJzxmb3JlaWduT2JqZWN0IHRhYmluZGV4PVwiLTFcIj48aW5wdXQgdHlwZT1cInRleHRcIiAvPjwvZm9yZWlnbk9iamVjdD4nKTtcbiAgICAgICAgLy8gU2FmYXJpIDgncyBxdWVyc1NlbGVjdG9yKCkgY2FuJ3QgaWRlbnRpZnkgZm9yZWlnbk9iamVjdCwgYnV0IGdldEVsZW1lbnR5QnlUYWdOYW1lKCkgY2FuXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJmb3JlaWduT2JqZWN0XCIpIHx8IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJmb3JlaWduT2JqZWN0XCIpWzBdO1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IHZhbGlkYXRlXG59O1xuLy8gRmlyZWZveCBzZWVtcyB0byBiZSBoYW5kbGluZyB0aGUgU1ZHLWRvY3VtZW50LWluLWlmcmFtZSBjcmVhdGlvbiBhc3luY2hyb25vdXNseVxuLy8gYW5kIHRoZXJlYnkgcHJvZHVjZXMgYSBmYWxzZSBuZWdhdGl2ZSB0ZXN0IHJlc3VsdC4gVGh1cyB0aGUgdGVzdCBpcyBwb2ludGxlc3Ncbi8vIGFuZCB3ZSByZXNvcnQgdG8gVUEgc25pZmZpbmcgb25jZSBhZ2Fpbi5cbi8vIHNlZSBodHRwOi8vanNiaW4uY29tL3Z1bmFkb2hva28vMS9lZGl0P2pzLGNvbnNvbGUsb3V0cHV0XG52YXIgcmVzdWx0JDIgPSBCb29sZWFuKHBsYXRmb3JtLmlzLkdFQ0tPICYmIHR5cGVvZiBTVkdFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIFNWR0VsZW1lbnQucHJvdG90eXBlLmZvY3VzKTtcbmZ1bmN0aW9uIGZvY3VzU3ZnSW5JZnJhbWUoKSB7XG4gICAgcmV0dXJuIHJlc3VsdCQyO1xufVxudmFyIGZvY3VzU3ZnID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGdlbmVyYXRlKFwiXCIpO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5maXJzdENoaWxkO1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IHZhbGlkYXRlXG59O1xuLy8gRmlyZWZveCBhbGxvd3MgKmFueSogdmFsdWUgYW5kIHRyZWF0cyBpbnZhbGlkIHZhbHVlcyBsaWtlIHRhYmluZGV4PVwiLTFcIlxuLy8gQGJyb3dzZXItaXNzdWUgR2Vja28gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyODA1NFxudmFyIGZvY3VzVGFiaW5kZXhUcmFpbGluZ0NoYXJhY3RlcnMgPSB7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgXCIzeFwiKTtcbiAgICB9XG59O1xudmFyIGZvY3VzVGFibGUgPSB7XG4gICAgZWxlbWVudDogXCJ0YWJsZVwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQsIHdyYXBwZXIsIF9kb2N1bWVudCkge1xuICAgICAgICAvLyBJRTkgaGFzIGEgcHJvYmxlbSByZXBsYWNpbmcgVEJPRFkgY29udGVudHMgd2l0aCBpbm5lckhUTUwuXG4gICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS84MDk3MDU1LzUxNTEyNFxuICAgICAgICAvLyBlbGVtZW50LmlubmVySFRNTCA9ICc8dHI+PHRkPmNlbGw8L3RkPjwvdHI+JztcbiAgICAgICAgdmFyIGZyYWdtZW50ID0gX2RvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgZnJhZ21lbnQuaW5uZXJIVE1MID0gXCI8dHI+PHRkPmNlbGw8L3RkPjwvdHI+XCI7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuICAgIH1cbn07XG52YXIgZm9jdXNWaWRlb1dpdGhvdXRDb250cm9scyA9IHtcbiAgICBlbGVtZW50OiBcInZpZGVvXCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gaW52YWxpZCBtZWRpYSBmaWxlIGNhbiB0cmlnZ2VyIHdhcm5pbmcgaW4gY29uc29sZSwgZGF0YS11cmkgdG8gcHJldmVudCBIVFRQIHJlcXVlc3RcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3JjXCIsIGdpZik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSUU5IG1heSB0aHJvdyBcIkVycm9yOiBOb3QgaW1wbGVtZW50ZWRcIlxuICAgICAgICB9XG4gICAgfVxufTtcbi8vIGh0dHBzOi8vanNiaW4uY29tL3ZhZmFiYS8zL2VkaXQ/aHRtbCxqcyxjb25zb2xlLG91dHB1dFxudmFyIHJlc3VsdCQzID0gcGxhdGZvcm0uaXMuR0VDS08gfHwgcGxhdGZvcm0uaXMuVFJJREVOVCB8fCBwbGF0Zm9ybS5pcy5FREdFO1xuZnVuY3Rpb24gdGFic2VxdWVuY2VBcmVhQXRJbWdQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gcmVzdWx0JDM7XG59XG52YXIgdGVzdENhbGxiYWNrcyA9IHtcbiAgICBjc3NTaGFkb3dQaWVyY2luZ0RlZXBDb21iaW5hdG9yOiBjc3NTaGFkb3dQaWVyY2luZ0RlZXBDb21iaW5hdG9yLFxuICAgIGZvY3VzSW5aZXJvRGltZW5zaW9uT2JqZWN0OiBmb2N1c0luWmVyb0RpbWVuc2lvbk9iamVjdCxcbiAgICBmb2N1c09iamVjdFN3ZjogZm9jdXNPYmplY3RTd2YsXG4gICAgZm9jdXNTdmdJbklmcmFtZTogZm9jdXNTdmdJbklmcmFtZSxcbiAgICB0YWJzZXF1ZW5jZUFyZWFBdEltZ1Bvc2l0aW9uOiB0YWJzZXF1ZW5jZUFyZWFBdEltZ1Bvc2l0aW9uXG59O1xudmFyIHRlc3REZXNjcmlwdGlvbnMgPSB7XG4gICAgZm9jdXNBcmVhSW1nVGFiaW5kZXg6IGZvY3VzQXJlYUltZ1RhYmluZGV4LFxuICAgIGZvY3VzQXJlYVRhYmluZGV4OiBmb2N1c0FyZWFUYWJpbmRleCxcbiAgICBmb2N1c0FyZWFXaXRob3V0SHJlZjogZm9jdXNBcmVhV2l0aG91dEhyZWYsXG4gICAgZm9jdXNBdWRpb1dpdGhvdXRDb250cm9sczogZm9jdXNBdWRpb1dpdGhvdXRDb250cm9scyxcbiAgICBmb2N1c0Jyb2tlbkltYWdlTWFwOiBmb2N1c0Jyb2tlbkltYWdlTWFwLFxuICAgIGZvY3VzQ2hpbGRyZW5PZkZvY3VzYWJsZUZsZXhib3g6IGZvY3VzQ2hpbGRyZW5PZkZvY3VzYWJsZUZsZXhib3gsXG4gICAgZm9jdXNGaWVsZHNldERpc2FibGVkOiBmb2N1c0ZpZWxkc2V0RGlzYWJsZWQsXG4gICAgZm9jdXNGaWVsZHNldDogZm9jdXNGaWVsZHNldCxcbiAgICBmb2N1c0ZsZXhib3hDb250YWluZXI6IGZvY3VzRmxleGJveENvbnRhaW5lcixcbiAgICBmb2N1c0Zvcm1EaXNhYmxlZDogZm9jdXNGb3JtRGlzYWJsZWQsXG4gICAgZm9jdXNJbWdJc21hcDogZm9jdXNJbWdJc21hcCxcbiAgICBmb2N1c0ltZ1VzZW1hcFRhYmluZGV4OiBmb2N1c0ltZ1VzZW1hcFRhYmluZGV4LFxuICAgIGZvY3VzSW5IaWRkZW5JZnJhbWU6IGZvY3VzSW5IaWRkZW5JZnJhbWUsXG4gICAgZm9jdXNJbnZhbGlkVGFiaW5kZXg6IGZvY3VzSW52YWxpZFRhYmluZGV4LFxuICAgIGZvY3VzTGFiZWxUYWJpbmRleDogZm9jdXNMYWJlbFRhYmluZGV4LFxuICAgIGZvY3VzT2JqZWN0U3ZnOiBmb2N1c09iamVjdFN2ZyxcbiAgICBmb2N1c09iamVjdFN2Z0hpZGRlbjogZm9jdXNPYmplY3RTdmdIaWRkZW4sXG4gICAgZm9jdXNSZWRpcmVjdEltZ1VzZW1hcDogZm9jdXNSZWRpcmVjdEltZ1VzZW1hcCxcbiAgICBmb2N1c1JlZGlyZWN0TGVnZW5kOiBmb2N1c1JlZGlyZWN0TGVnZW5kLFxuICAgIGZvY3VzU2Nyb2xsQm9keTogZm9jdXNTY3JvbGxCb2R5LFxuICAgIGZvY3VzU2Nyb2xsQ29udGFpbmVyV2l0aG91dE92ZXJmbG93OiBmb2N1c1Njcm9sbENvbnRhaW5lcldpdGhvdXRPdmVyZmxvdyxcbiAgICBmb2N1c1Njcm9sbENvbnRhaW5lcjogZm9jdXNTY3JvbGxDb250YWluZXIsXG4gICAgZm9jdXNTdW1tYXJ5OiBmb2N1c1N1bW1hcnksXG4gICAgZm9jdXNTdmdGb2N1c2FibGVBdHRyaWJ1dGU6IGZvY3VzU3ZnRm9jdXNhYmxlQXR0cmlidXRlLFxuICAgIGZvY3VzU3ZnVGFiaW5kZXhBdHRyaWJ1dGU6IGZvY3VzU3ZnVGFiaW5kZXhBdHRyaWJ1dGUsXG4gICAgZm9jdXNTdmdOZWdhdGl2ZVRhYmluZGV4QXR0cmlidXRlOiBmb2N1c1N2Z05lZ2F0aXZlVGFiaW5kZXhBdHRyaWJ1dGUsXG4gICAgZm9jdXNTdmdVc2VUYWJpbmRleDogZm9jdXNTdmdVc2VUYWJpbmRleCxcbiAgICBmb2N1c1N2Z0ZvcmVpZ25vYmplY3RUYWJpbmRleDogZm9jdXNTdmdGb3JlaWdub2JqZWN0VGFiaW5kZXgsXG4gICAgZm9jdXNTdmc6IGZvY3VzU3ZnLFxuICAgIGZvY3VzVGFiaW5kZXhUcmFpbGluZ0NoYXJhY3RlcnM6IGZvY3VzVGFiaW5kZXhUcmFpbGluZ0NoYXJhY3RlcnMsXG4gICAgZm9jdXNUYWJsZTogZm9jdXNUYWJsZSxcbiAgICBmb2N1c1ZpZGVvV2l0aG91dENvbnRyb2xzOiBmb2N1c1ZpZGVvV2l0aG91dENvbnRyb2xzXG59O1xuZnVuY3Rpb24gZXhlY3V0ZVRlc3RzKCkge1xuICAgIHZhciByZXN1bHRzID0gZGV0ZWN0Rm9jdXModGVzdERlc2NyaXB0aW9ucyk7XG4gICAgT2JqZWN0LmtleXModGVzdENhbGxiYWNrcykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmVzdWx0c1trZXldID0gdGVzdENhbGxiYWNrc1trZXldKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG52YXIgc3VwcG9ydHNDYWNoZSA9IG51bGw7XG5mdW5jdGlvbiBfc3VwcG9ydHMoKSB7XG4gICAgaWYgKHN1cHBvcnRzQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzQ2FjaGU7XG4gICAgfVxuICAgIHN1cHBvcnRzQ2FjaGUgPSBjYWNoZSQxLmdldCgpO1xuICAgIGlmICghc3VwcG9ydHNDYWNoZS50aW1lKSB7XG4gICAgICAgIGNhY2hlJDEuc2V0KGV4ZWN1dGVUZXN0cygpKTtcbiAgICAgICAgc3VwcG9ydHNDYWNoZSA9IGNhY2hlJDEuZ2V0KCk7XG4gICAgfVxuICAgIHJldHVybiBzdXBwb3J0c0NhY2hlO1xufVxudmFyIHN1cHBvcnRzID0gdm9pZCAwO1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2luZnJhc3RydWN0dXJlLmh0bWwjcnVsZXMtZm9yLXBhcnNpbmctaW50ZWdlcnNcbi8vIE5PVEU6IGFsbCBicm93c2VycyBhZ3JlZSB0byBhbGxvdyB0cmFpbGluZyBzcGFjZXMgYXMgd2VsbFxudmFyIHZhbGlkSW50ZWdlclBhdHRlcm5Ob1RyYWlsaW5nID0gL15cXHMqKC18XFwrKT9bMC05XStcXHMqJC87XG52YXIgdmFsaWRJbnRlZ2VyUGF0dGVybldpdGhUcmFpbGluZyA9IC9eXFxzKigtfFxcKyk/WzAtOV0rLiokLztcbmZ1bmN0aW9uIGlzVmFsaWRUYWJpbmRleChjb250ZXh0KSB7XG4gICAgaWYgKCFzdXBwb3J0cykge1xuICAgICAgICBzdXBwb3J0cyA9IF9zdXBwb3J0cygpO1xuICAgIH1cbiAgICB2YXIgdmFsaWRJbnRlZ2VyUGF0dGVybiA9IHN1cHBvcnRzLmZvY3VzVGFiaW5kZXhUcmFpbGluZ0NoYXJhY3RlcnMgPyB2YWxpZEludGVnZXJQYXR0ZXJuV2l0aFRyYWlsaW5nIDogdmFsaWRJbnRlZ2VyUGF0dGVybk5vVHJhaWxpbmc7XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0VG9FbGVtZW50KHtcbiAgICAgICAgbGFiZWw6IFwiaXMvdmFsaWQtdGFiaW5kZXhcIixcbiAgICAgICAgcmVzb2x2ZURvY3VtZW50OiB0cnVlLFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfSk7XG4gICAgLy8gRWRnZSAxNCBoYXMgYSBjYXBpdGFsaXphdGlvbiBwcm9ibGVtIG9uIFNWRyBlbGVtZW50cyxcbiAgICAvLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9lbi11cy9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvOTI4MjA1OC9cbiAgICB2YXIgaGFzVGFiaW5kZXggPSBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcInRhYmluZGV4XCIpO1xuICAgIHZhciBoYXNUYWJJbmRleCA9IGVsZW1lbnQuaGFzQXR0cmlidXRlKFwidGFiSW5kZXhcIik7XG4gICAgaWYgKCFoYXNUYWJpbmRleCAmJiAhaGFzVGFiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBvbGRlciBGaXJlZm94IGFuZCBJbnRlcm5ldCBFeHBsb3JlciBkb24ndCBzdXBwb3J0IHRhYmluZGV4IG9uIFNWRyBlbGVtZW50c1xuICAgIHZhciBpc1N2Z0VsZW1lbnQgPSBlbGVtZW50Lm93bmVyU1ZHRWxlbWVudCB8fCBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwic3ZnXCI7XG4gICAgaWYgKGlzU3ZnRWxlbWVudCAmJiAhc3VwcG9ydHMuZm9jdXNTdmdUYWJpbmRleEF0dHJpYnV0ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEBicm93c2VyLWlzc3VlIEdlY2tvIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTExMjgwNTRcbiAgICBpZiAoc3VwcG9ydHMuZm9jdXNJbnZhbGlkVGFiaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgdGFiaW5kZXggc2VsZWN0b3IgZXZlbiBpZiBpdHMgdmFsdWUgaXMgaW52YWxpZFxuICAgIHZhciB0YWJpbmRleCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGhhc1RhYmluZGV4ID8gXCJ0YWJpbmRleFwiIDogXCJ0YWJJbmRleFwiKTtcbiAgICAvLyBJRTExIHBhcnNlcyB0YWJpbmRleD1cIlwiIGFzIHRoZSB2YWx1ZSBcIi0zMjc2OFwiXG4gICAgLy8gQGJyb3dzZXItaXNzdWUgVHJpZGVudCBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzEwNzI5NjVcbiAgICBpZiAodGFiaW5kZXggPT09IFwiLTMyNzY4XCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gQm9vbGVhbih0YWJpbmRleCAmJiB2YWxpZEludGVnZXJQYXR0ZXJuLnRlc3QodGFiaW5kZXgpKTtcbn1cbmZ1bmN0aW9uIHRhYmluZGV4VmFsdWUoZWxlbWVudCkge1xuICAgIGlmICghaXNWYWxpZFRhYmluZGV4KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBFZGdlIDE0IGhhcyBhIGNhcGl0YWxpemF0aW9uIHByb2JsZW0gb24gU1ZHIGVsZW1lbnRzLFxuICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy85MjgyMDU4L1xuICAgIHZhciBoYXNUYWJpbmRleCA9IGVsZW1lbnQuaGFzQXR0cmlidXRlKFwidGFiaW5kZXhcIik7XG4gICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBoYXNUYWJpbmRleCA/IFwidGFiaW5kZXhcIiA6IFwidGFiSW5kZXhcIjtcbiAgICAvLyBAYnJvd3Nlci1pc3N1ZSBHZWNrbyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI4MDU0XG4gICAgdmFyIHRhYmluZGV4ID0gcGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSksIDEwKTtcbiAgICByZXR1cm4gaXNOYU4odGFiaW5kZXgpID8gLTEgOiB0YWJpbmRleDtcbn1cbi8vIHRoaXMgaXMgYSBzaGFyZWQgdXRpbGl0eSBmaWxlIGZvciBmb2N1cy1yZWxldmFudC5qcyBhbmQgdGFiYmFibGUuanNcbi8vIHNlcGFyYXRlIHRlc3Rpbmcgb2YgdGhpcyBmaWxlJ3MgZnVuY3Rpb25zIGlzIG5vdCBuZWNlc3NhcnksXG4vLyBhcyB0aGV5J3JlIGltcGxpY2l0bHkgdGVzdGVkIGJ5IHdheSBvZiB0aGUgY29uc3VtZXJzXG5mdW5jdGlvbiBpc1VzZXJNb2RpZnlXcml0YWJsZShzdHlsZSkge1xuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8xOTk5L1dELWNzczMtdXNlcmludC0xOTk5MDkxNiN1c2VyLW1vZGlmeVxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvMTdcbiAgICB2YXIgdXNlck1vZGlmeSA9IHN0eWxlLndlYmtpdFVzZXJNb2RpZnkgfHwgXCJcIjtcbiAgICByZXR1cm4gQm9vbGVhbih1c2VyTW9kaWZ5ICYmIHVzZXJNb2RpZnkuaW5kZXhPZihcIndyaXRlXCIpICE9PSAtMSk7XG59XG5mdW5jdGlvbiBoYXNDc3NPdmVyZmxvd1Njcm9sbChzdHlsZSkge1xuICAgIHJldHVybiBbXG4gICAgICAgIHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvdmVyZmxvd1wiKSxcbiAgICAgICAgc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIm92ZXJmbG93LXhcIiksXG4gICAgICAgIHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvdmVyZmxvdy15XCIpXG4gICAgXS5zb21lKGZ1bmN0aW9uKG92ZXJmbG93KSB7XG4gICAgICAgIHJldHVybiBvdmVyZmxvdyA9PT0gXCJhdXRvXCIgfHwgb3ZlcmZsb3cgPT09IFwic2Nyb2xsXCI7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBoYXNDc3NEaXNwbGF5RmxleChzdHlsZSkge1xuICAgIHJldHVybiBzdHlsZS5kaXNwbGF5LmluZGV4T2YoXCJmbGV4XCIpID4gLTE7XG59XG5mdW5jdGlvbiBpc1Njcm9sbGFibGVDb250YWluZXIoZWxlbWVudCwgbm9kZU5hbWUsIHBhcmVudE5vZGVOYW1lLCBwYXJlbnRTdHlsZSkge1xuICAgIGlmIChub2RlTmFtZSAhPT0gXCJkaXZcIiAmJiBub2RlTmFtZSAhPT0gXCJzcGFuXCIpIHtcbiAgICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgYWR2YW5jZXMgc2Nyb2xsYWJsZSBjb250YWluZXJzIGFuZCBib2RpZXMgdG8gZm9jdXNhYmxlXG4gICAgICAgIC8vIG9ubHkgaWYgdGhlIHNjcm9sbGFibGUgY29udGFpbmVyIGlzIDxkaXY+IG9yIDxzcGFuPiAtIHRoaXMgZG9lcyAqbm90KlxuICAgICAgICAvLyBoYXBwZW4gZm9yIDxzZWN0aW9uPiwgPGFydGljbGU+LCDigKZcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocGFyZW50Tm9kZU5hbWUgJiYgcGFyZW50Tm9kZU5hbWUgIT09IFwiZGl2XCIgJiYgcGFyZW50Tm9kZU5hbWUgIT09IFwic3BhblwiICYmICFoYXNDc3NPdmVyZmxvd1Njcm9sbChwYXJlbnRTdHlsZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHQgPCBlbGVtZW50LnNjcm9sbEhlaWdodCB8fCBlbGVtZW50Lm9mZnNldFdpZHRoIDwgZWxlbWVudC5zY3JvbGxXaWR0aDtcbn1cbnZhciBzdXBwb3J0cyQxID0gdm9pZCAwO1xuZnVuY3Rpb24gaXNGb2N1c1JlbGV2YW50UnVsZXMoKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBjb250ZXh0ID0gX3JlZi5jb250ZXh0LCBfcmVmJGV4Y2VwdCA9IF9yZWYuZXhjZXB0LCBleGNlcHQgPSBfcmVmJGV4Y2VwdCA9PT0gdW5kZWZpbmVkID8ge1xuICAgICAgICBmbGV4Ym94OiBmYWxzZSxcbiAgICAgICAgc2Nyb2xsYWJsZTogZmFsc2UsXG4gICAgICAgIHNoYWRvdzogZmFsc2VcbiAgICB9IDogX3JlZiRleGNlcHQ7XG4gICAgaWYgKCFzdXBwb3J0cyQxKSB7XG4gICAgICAgIHN1cHBvcnRzJDEgPSBfc3VwcG9ydHMoKTtcbiAgICB9XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0VG9FbGVtZW50KHtcbiAgICAgICAgbGFiZWw6IFwiaXMvZm9jdXMtcmVsZXZhbnRcIixcbiAgICAgICAgcmVzb2x2ZURvY3VtZW50OiB0cnVlLFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfSk7XG4gICAgaWYgKCFleGNlcHQuc2hhZG93ICYmIGVsZW1lbnQuc2hhZG93Um9vdCkge1xuICAgICAgICAvLyBhIFNoYWRvd0RPTSBob3N0IHJlY2VpdmVzIGZvY3VzIHdoZW4gdGhlIGZvY3VzIG1vdmVzIHRvIGl0cyBjb250ZW50XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgZWxlbWVudC50eXBlID09PSBcImhpZGRlblwiKSB7XG4gICAgICAgIC8vIGlucHV0W3R5cGU9XCJoaWRkZW5cIl0gc3VwcG9ydHMuY2Fubm90IGJlIGZvY3VzZWRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJzZWxlY3RcIiB8fCBub2RlTmFtZSA9PT0gXCJidXR0b25cIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwibGVnZW5kXCIgJiYgc3VwcG9ydHMkMS5mb2N1c1JlZGlyZWN0TGVnZW5kKSB7XG4gICAgICAgIC8vIHNwZWNpZmljcyBmaWx0ZXJlZCBpbiBpcy9mb2N1c2FibGVcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJsYWJlbFwiKSB7XG4gICAgICAgIC8vIHNwZWNpZmljcyBmaWx0ZXJlZCBpbiBpcy9mb2N1c2FibGVcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJhcmVhXCIpIHtcbiAgICAgICAgLy8gc3BlY2lmaWNzIGZpbHRlcmVkIGluIGlzL2ZvY3VzYWJsZVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcImFcIiAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImhyZWZcIikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJvYmplY3RcIiAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcInVzZW1hcFwiKSkge1xuICAgICAgICAvLyBvYmplY3RbdXNlbWFwXSBpcyBub3QgZm9jdXNhYmxlIGluIGFueSBicm93c2VyXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHZhciBzdmdUeXBlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgICAgICBpZiAoIXN1cHBvcnRzJDEuZm9jdXNPYmplY3RTdmcgJiYgc3ZnVHlwZSA9PT0gXCJpbWFnZS9zdmcreG1sXCIpIHtcbiAgICAgICAgICAgIC8vIG9iamVjdFt0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiXSBpcyBub3QgZm9jdXNhYmxlIGluIEludGVybmV0IEV4cGxvcmVyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN1cHBvcnRzJDEuZm9jdXNPYmplY3RTd2YgJiYgc3ZnVHlwZSA9PT0gXCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaFwiKSB7XG4gICAgICAgICAgICAvLyBvYmplY3RbdHlwZT1cImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCJdIGlzIG5vdCBmb2N1c2FibGUgaW4gSW50ZXJuZXQgRXhwbG9yZXIgOVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJpZnJhbWVcIiB8fCBub2RlTmFtZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAvLyBicm93c2luZyBjb250ZXh0IGNvbnRhaW5lcnNcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJlbWJlZFwiIHx8IG5vZGVOYW1lID09PSBcImtleWdlblwiKSB7XG4gICAgICAgIC8vIGVtYmVkIGlzIGNvbnNpZGVyZWQgZm9jdXMtcmVsZXZhbnQgYnV0IG5vdCBmb2N1c2FibGVcbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvODJcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSkge1xuICAgICAgICAvLyBhbHNvIHNlZSBDU1MgcHJvcGVydHkgdXNlci1tb2RpZnkgYmVsb3dcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJhdWRpb1wiICYmIChzdXBwb3J0cyQxLmZvY3VzQXVkaW9XaXRob3V0Q29udHJvbHMgfHwgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250cm9sc1wiKSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJ2aWRlb1wiICYmIChzdXBwb3J0cyQxLmZvY3VzVmlkZW9XaXRob3V0Q29udHJvbHMgfHwgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250cm9sc1wiKSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzdXBwb3J0cyQxLmZvY3VzU3VtbWFyeSAmJiBub2RlTmFtZSA9PT0gXCJzdW1tYXJ5XCIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciB2YWxpZFRhYmluZGV4ID0gaXNWYWxpZFRhYmluZGV4KGVsZW1lbnQpO1xuICAgIGlmIChub2RlTmFtZSA9PT0gXCJpbWdcIiAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcInVzZW1hcFwiKSkge1xuICAgICAgICAvLyBHZWNrbywgVHJpZGVudCBhbmQgRWRnZSBkbyBub3QgYWxsb3cgYW4gaW1hZ2Ugd2l0aCBhbiBpbWFnZSBtYXAgYW5kIHRhYmluZGV4IHRvIGJlIGZvY3VzZWQsXG4gICAgICAgIC8vIGl0IGFwcGVhcnMgdGhlIHRhYmluZGV4IGlzIG92ZXJydWxlZCBzbyBmb2N1cyBpcyBzdGlsbCBmb3J3YXJkZWQgdG8gdGhlIDxtYXA+XG4gICAgICAgIHJldHVybiB2YWxpZFRhYmluZGV4ICYmIHN1cHBvcnRzJDEuZm9jdXNJbWdVc2VtYXBUYWJpbmRleCB8fCBzdXBwb3J0cyQxLmZvY3VzUmVkaXJlY3RJbWdVc2VtYXA7XG4gICAgfVxuICAgIGlmIChzdXBwb3J0cyQxLmZvY3VzVGFibGUgJiYgKG5vZGVOYW1lID09PSBcInRhYmxlXCIgfHwgbm9kZU5hbWUgPT09IFwidGRcIikpIHtcbiAgICAgICAgLy8gSUUxMC0xMSBzdXBwb3J0cy5jYW4gZm9jdXMgPHRhYmxlPiBhbmQgPHRkPlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHN1cHBvcnRzJDEuZm9jdXNGaWVsZHNldCAmJiBub2RlTmFtZSA9PT0gXCJmaWVsZHNldFwiKSB7XG4gICAgICAgIC8vIElFMTAtMTEgc3VwcG9ydHMuY2FuIGZvY3VzIDxmaWVsZHNldD5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBpc1N2Z0VsZW1lbnQgPSBub2RlTmFtZSA9PT0gXCJzdmdcIjtcbiAgICB2YXIgaXNTdmdDb250ZW50ID0gZWxlbWVudC5vd25lclNWR0VsZW1lbnQ7XG4gICAgdmFyIGZvY3VzYWJsZUF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZm9jdXNhYmxlXCIpO1xuICAgIHZhciB0YWJpbmRleCA9IHRhYmluZGV4VmFsdWUoZWxlbWVudCk7XG4gICAgaWYgKG5vZGVOYW1lID09PSBcInVzZVwiICYmIHRhYmluZGV4ICE9PSBudWxsICYmICFzdXBwb3J0cyQxLmZvY3VzU3ZnVXNlVGFiaW5kZXgpIHtcbiAgICAgICAgLy8gPHVzZT4gY2Fubm90IGJlIG1hZGUgZm9jdXNhYmxlIGJ5IGFkZGluZyBhIHRhYmluZGV4IGF0dHJpYnV0ZSBhbnl3aGVyZSBidXQgQmxpbmsgYW5kIFdlYktpdFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJmb3JlaWdub2JqZWN0XCIpIHtcbiAgICAgICAgLy8gPHVzZT4gY2FuIG9ubHkgYmUgbWFkZSBmb2N1c2FibGUgaW4gQmxpbmsgYW5kIFdlYktpdFxuICAgICAgICByZXR1cm4gdGFiaW5kZXggIT09IG51bGwgJiYgc3VwcG9ydHMkMS5mb2N1c1N2Z0ZvcmVpZ25vYmplY3RUYWJpbmRleDtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnRNYXRjaGVzKGVsZW1lbnQsIFwic3ZnIGFcIikgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJ4bGluazpocmVmXCIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoKGlzU3ZnRWxlbWVudCB8fCBpc1N2Z0NvbnRlbnQpICYmIGVsZW1lbnQuZm9jdXMgJiYgIXN1cHBvcnRzJDEuZm9jdXNTdmdOZWdhdGl2ZVRhYmluZGV4QXR0cmlidXRlICYmIHRhYmluZGV4IDwgMCkge1xuICAgICAgICAvLyBGaXJlZm94IDUxIGFuZCA1MiB0cmVhdCBhbnkgbmF0aXZlbHkgdGFiYmFibGUgU1ZHIGVsZW1lbnQgd2l0aFxuICAgICAgICAvLyB0YWJpbmRleD1cIi0xXCIgYXMgdGFiYmFibGUgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBhcyBpbmVydFxuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjM0MFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpc1N2Z0VsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkVGFiaW5kZXggfHwgc3VwcG9ydHMkMS5mb2N1c1N2ZyB8fCBzdXBwb3J0cyQxLmZvY3VzU3ZnSW5JZnJhbWUgfHwgLy8gSW50ZXJuZXQgRXhwbG9yZXIgdW5kZXJzdGFuZHMgdGhlIGZvY3VzYWJsZSBhdHRyaWJ1dGUgaW50cm9kdWNlZCBpbiBTVkcgVGlueSAxLjJcbiAgICAgICAgQm9vbGVhbihzdXBwb3J0cyQxLmZvY3VzU3ZnRm9jdXNhYmxlQXR0cmlidXRlICYmIGZvY3VzYWJsZUF0dHJpYnV0ZSAmJiBmb2N1c2FibGVBdHRyaWJ1dGUgPT09IFwidHJ1ZVwiKTtcbiAgICB9XG4gICAgaWYgKGlzU3ZnQ29udGVudCkge1xuICAgICAgICBpZiAoc3VwcG9ydHMkMS5mb2N1c1N2Z1RhYmluZGV4QXR0cmlidXRlICYmIHZhbGlkVGFiaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdXBwb3J0cyQxLmZvY3VzU3ZnRm9jdXNhYmxlQXR0cmlidXRlKSB7XG4gICAgICAgICAgICAvLyBJbnRlcm5ldCBFeHBsb3JlciB1bmRlcnN0YW5kcyB0aGUgZm9jdXNhYmxlIGF0dHJpYnV0ZSBpbnRyb2R1Y2VkIGluIFNWRyBUaW55IDEuMlxuICAgICAgICAgICAgcmV0dXJuIGZvY3VzYWJsZUF0dHJpYnV0ZSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VkaXRpbmcuaHRtbCNzZXF1ZW50aWFsLWZvY3VzLW5hdmlnYXRpb24tYW5kLXRoZS10YWJpbmRleC1hdHRyaWJ1dGVcbiAgICBpZiAodmFsaWRUYWJpbmRleCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7XG4gICAgaWYgKGlzVXNlck1vZGlmeVdyaXRhYmxlKHN0eWxlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHN1cHBvcnRzJDEuZm9jdXNJbWdJc21hcCAmJiBub2RlTmFtZSA9PT0gXCJpbWdcIiAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImlzbWFwXCIpKSB7XG4gICAgICAgIC8vIElFMTAtMTEgY29uc2lkZXJzIHRoZSA8aW1nPiBpbiA8YSBocmVmPjxpbWcgaXNtYXA+IGZvY3VzYWJsZVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzIwXG4gICAgICAgIHZhciBoYXNMaW5rUGFyZW50ID0gZ2V0UGFyZW50cyh7XG4gICAgICAgICAgICBjb250ZXh0OiBlbGVtZW50XG4gICAgICAgIH0pLnNvbWUoZnVuY3Rpb24ocGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiYVwiICYmIHBhcmVudC5oYXNBdHRyaWJ1dGUoXCJocmVmXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGhhc0xpbmtQYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvMjFcbiAgICBpZiAoIWV4Y2VwdC5zY3JvbGxhYmxlICYmIHN1cHBvcnRzJDEuZm9jdXNTY3JvbGxDb250YWluZXIpIHtcbiAgICAgICAgaWYgKHN1cHBvcnRzJDEuZm9jdXNTY3JvbGxDb250YWluZXJXaXRob3V0T3ZlcmZsb3cpIHtcbiAgICAgICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyIGRvZXMgd2lsbCBjb25zaWRlciB0aGUgc2Nyb2xsYWJsZSBhcmVhIGZvY3VzYWJsZVxuICAgICAgICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgYSA8ZGl2PiBvciBhIDxzcGFuPiBhbmQgaXQgaXMgaW4gZmFjdCBzY3JvbGxhYmxlLFxuICAgICAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB0aGUgQ1NTIG92ZXJmbG93IHByb3BlcnR5XG4gICAgICAgICAgICBpZiAoaXNTY3JvbGxhYmxlQ29udGFpbmVyKGVsZW1lbnQsIG5vZGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGhhc0Nzc092ZXJmbG93U2Nyb2xsKHN0eWxlKSkge1xuICAgICAgICAgICAgLy8gRmlyZWZveCByZXF1aXJlcyBwcm9wZXIgb3ZlcmZsb3cgc2V0dGluZywgSUUgZG9lcyBub3QgbmVjZXNzYXJpbHlcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0NTUy9vdmVyZmxvd1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFleGNlcHQuZmxleGJveCAmJiBzdXBwb3J0cyQxLmZvY3VzRmxleGJveENvbnRhaW5lciAmJiBoYXNDc3NEaXNwbGF5RmxleChzdHlsZSkpIHtcbiAgICAgICAgLy8gZWxlbWVudHMgd2l0aCBkaXNwbGF5OmZsZXggYXJlIGZvY3VzYWJsZSBpbiBJRTEwLTExXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgIGlmICghZXhjZXB0LnNjcm9sbGFibGUgJiYgcGFyZW50KSB7XG4gICAgICAgIHZhciBwYXJlbnROb2RlTmFtZSA9IHBhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB2YXIgcGFyZW50U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQsIG51bGwpO1xuICAgICAgICBpZiAoc3VwcG9ydHMkMS5mb2N1c1Njcm9sbEJvZHkgJiYgaXNTY3JvbGxhYmxlQ29udGFpbmVyKHBhcmVudCwgbm9kZU5hbWUsIHBhcmVudE5vZGVOYW1lLCBwYXJlbnRTdHlsZSkpIHtcbiAgICAgICAgICAgIC8vIHNjcm9sbGFibGUgYm9kaWVzIGFyZSBmb2N1c2FibGUgSW50ZXJuZXQgRXhwbG9yZXJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvMjFcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENoaWxkcmVuIG9mIGZvY3VzYWJsZSBlbGVtZW50cyB3aXRoIGRpc3BsYXk6ZmxleCBhcmUgZm9jdXNhYmxlIGluIElFMTAtMTFcbiAgICAgICAgaWYgKHN1cHBvcnRzJDEuZm9jdXNDaGlsZHJlbk9mRm9jdXNhYmxlRmxleGJveCkge1xuICAgICAgICAgICAgaWYgKGhhc0Nzc0Rpc3BsYXlGbGV4KHBhcmVudFN0eWxlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE5PVEU6IGVsZW1lbnRzIG1hcmtlZCBhcyBpbmVydCBhcmUgbm90IGZvY3VzYWJsZSxcbiAgICAvLyBidXQgdGhhdCBwcm9wZXJ0eSBpcyBub3QgZXhwb3NlZCB0byB0aGUgRE9NXG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VkaXRpbmcuaHRtbCNpbmVydFxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8vIGJpbmQgZXhjZXB0aW9ucyB0byBhbiBpdGVyYXRvciBjYWxsYmFja1xuaXNGb2N1c1JlbGV2YW50UnVsZXMuZXhjZXB0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGV4Y2VwdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIGlzRm9jdXNSZWxldmFudCA9IGZ1bmN0aW9uIGlzRm9jdXNSZWxldmFudChjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBpc0ZvY3VzUmVsZXZhbnRSdWxlcyh7XG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgICAgZXhjZXB0OiBleGNlcHRcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBpc0ZvY3VzUmVsZXZhbnQucnVsZXMgPSBpc0ZvY3VzUmVsZXZhbnRSdWxlcztcbiAgICByZXR1cm4gaXNGb2N1c1JlbGV2YW50O1xufTtcbi8vIHByb3ZpZGUgaXNGb2N1c1JlbGV2YW50KGNvbnRleHQpIGFzIGRlZmF1bHQgaXRlcmF0b3IgY2FsbGJhY2tcbnZhciBpc0ZvY3VzUmVsZXZhbnQgPSBpc0ZvY3VzUmVsZXZhbnRSdWxlcy5leGNlcHQoe30pO1xuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBjYWxsYmFjaykge1xuICAgIC8vIGF0dGVtcHQgdG8gdXNlIG5hdGl2ZSBvciBwb2x5ZmlsbGVkIEFycmF5I2ZpbmRJbmRleCBmaXJzdFxuICAgIGlmIChhcnJheS5maW5kSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5LmZpbmRJbmRleChjYWxsYmFjayk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgLy8gc2hvcnRjdXQgaWYgdGhlIGFycmF5IGlzIGVtcHR5XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBsb29wIG92ZXIgYXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuICAgICAgICBpZiAoY2FsbGJhY2soYXJyYXlbaV0sIGksIGFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuZnVuY3Rpb24gZ2V0Q29udGVudERvY3VtZW50KG5vZGUpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyB3b3JrcyBvbiA8b2JqZWN0PiBhbmQgPGlmcmFtZT5cbiAgICAgICAgcmV0dXJuIG5vZGUuY29udGVudERvY3VtZW50IHx8IC8vIHdvcmtzIG9uIDxvYmplY3Q+IGFuZCA8aWZyYW1lPlxuICAgICAgICBub2RlLmNvbnRlbnRXaW5kb3cgJiYgbm9kZS5jb250ZW50V2luZG93LmRvY3VtZW50IHx8IC8vIHdvcmtzIG9uIDxvYmplY3Q+IGFuZCA8aWZyYW1lPiB0aGF0IGNvbnRhaW4gU1ZHXG4gICAgICAgIG5vZGUuZ2V0U1ZHRG9jdW1lbnQgJiYgbm9kZS5nZXRTVkdEb2N1bWVudCgpIHx8IG51bGw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBTZWN1cml0eUVycm9yOiBGYWlsZWQgdG8gcmVhZCB0aGUgJ2NvbnRlbnREb2N1bWVudCcgcHJvcGVydHkgZnJvbSAnSFRNTE9iamVjdEVsZW1lbnQnXG4gICAgICAgIC8vIGFsc28gSUUgbWF5IHRocm93IG1lbWJlciBub3QgZm91bmQgZXhjZXB0aW9uIGUuZy4gb24gPG9iamVjdCB0eXBlPVwiaW1hZ2UvcG5nXCI+XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gICAgdmFyIF9kb2N1bWVudCA9IGdldERvY3VtZW50KG5vZGUpO1xuICAgIHJldHVybiBfZG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xufVxudmFyIHNoYWRvd1ByZWZpeCA9IHZvaWQgMDtcbmZ1bmN0aW9uIHNlbGVjdEluU2hhZG93cyhzZWxlY3Rvcikge1xuICAgIGlmICh0eXBlb2Ygc2hhZG93UHJlZml4ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHZhciBvcGVyYXRvciA9IGNzc1NoYWRvd1BpZXJjaW5nRGVlcENvbWJpbmF0b3IoKTtcbiAgICAgICAgaWYgKG9wZXJhdG9yKSB7XG4gICAgICAgICAgICBzaGFkb3dQcmVmaXggPSBcIiwgaHRtbCBcIiArIG9wZXJhdG9yICsgXCIgXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFzaGFkb3dQcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0b3IgKyBzaGFkb3dQcmVmaXggKyBzZWxlY3Rvci5yZXBsYWNlKC9cXHMqLFxccyovZywgXCIsXCIpLnNwbGl0KFwiLFwiKS5qb2luKHNoYWRvd1ByZWZpeCk7XG59XG52YXIgc2VsZWN0b3IgPSB2b2lkIDA7XG5mdW5jdGlvbiBmaW5kRG9jdW1lbnRIb3N0RWxlbWVudChfd2luZG93KSB7XG4gICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgICBzZWxlY3RvciA9IHNlbGVjdEluU2hhZG93cyhcIm9iamVjdCwgaWZyYW1lXCIpO1xuICAgIH1cbiAgICBpZiAoX3dpbmRvdy5fZnJhbWVFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIF93aW5kb3cuX2ZyYW1lRWxlbWVudDtcbiAgICB9XG4gICAgX3dpbmRvdy5fZnJhbWVFbGVtZW50ID0gbnVsbDtcbiAgICB2YXIgcG90ZW50aWFsSG9zdHMgPSBfd2luZG93LnBhcmVudC5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICBbXS5zb21lLmNhbGwocG90ZW50aWFsSG9zdHMsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIF9kb2N1bWVudCA9IGdldENvbnRlbnREb2N1bWVudChlbGVtZW50KTtcbiAgICAgICAgaWYgKF9kb2N1bWVudCAhPT0gX3dpbmRvdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIF93aW5kb3cuX2ZyYW1lRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiBfd2luZG93Ll9mcmFtZUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQoZWxlbWVudCkge1xuICAgIHZhciBfd2luZG93ID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICAgIGlmICghX3dpbmRvdy5wYXJlbnQgfHwgX3dpbmRvdy5wYXJlbnQgPT09IF93aW5kb3cpIHtcbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gcGFyZW50IGJyb3dzaW5nIGNvbnRleHQsXG4gICAgICAgIC8vIHdlJ3JlIG5vdCBnb2luZyB0byBnZXQgYSBmcmFtZUVsZW1lbnQgZWl0aGVyIHdheVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9XaW5kb3cvZnJhbWVFbGVtZW50XG4gICAgICAgIC8vIGRvZXMgbm90IHdvcmsgd2l0aGluIDxlbWJlZD4gYW55d2hlcmUsIGFuZCBub3Qgd2l0aGluIGluIDxvYmplY3Q+IGluIElFXG4gICAgICAgIHJldHVybiBfd2luZG93LmZyYW1lRWxlbWVudCB8fCBmaW5kRG9jdW1lbnRIb3N0RWxlbWVudChfd2luZG93KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9yZW5kZXJpbmcuaHRtbCNiZWluZy1yZW5kZXJlZFxuLy8gPGFyZWE+IGlzIG5vdCByZW5kZXJlZCwgYnV0IHdlICpjb25zaWRlciogaXQgdmlzaWJsZSB0byBzaW1wbGZpeSB0aGlzIGZ1bmN0aW9uJ3MgdXNhZ2VcbnZhciBub3RSZW5kZXJlZEVsZW1lbnRzUGF0dGVybiA9IC9eKGFyZWEpJC87XG5mdW5jdGlvbiBjb21wdXRlZFN0eWxlKGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xufVxuZnVuY3Rpb24gbm90RGlzcGxheWVkKF9wYXRoKSB7XG4gICAgcmV0dXJuIF9wYXRoLnNvbWUoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAvLyBkaXNwbGF5Om5vbmUgaXMgbm90IHZpc2libGUgKG9wdGltaXplZCBhd2F5IGF0IGxheW91dClcbiAgICAgICAgcmV0dXJuIGNvbXB1dGVkU3R5bGUoZWxlbWVudCwgXCJkaXNwbGF5XCIpID09PSBcIm5vbmVcIjtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIG5vdFZpc2libGUoX3BhdGgpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS11aS9ibG9iL21hc3Rlci91aS9jb3JlLmpzI0wxMDktTDExNFxuICAgIC8vIE5PVEU6IGEgbmVzdGVkIGVsZW1lbnQgY2FuIHJldmVyc2UgdmlzaWJpbGl0eTpoaWRkZW58Y29sbGFwc2UgYnkgZXhwbGljaXRseSBzZXR0aW5nIHZpc2liaWxpdHk6dmlzaWJsZVxuICAgIC8vIE5PVEU6IHZpc2liaWxpdHkgY2FuIGJlIFtcIlwiLCBcInZpc2libGVcIiwgXCJoaWRkZW5cIiwgXCJjb2xsYXBzZVwiXVxuICAgIHZhciBoaWRkZW4gPSBmaW5kSW5kZXgoX3BhdGgsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHZpc2liaWxpdHkgPSBjb21wdXRlZFN0eWxlKGVsZW1lbnQsIFwidmlzaWJpbGl0eVwiKTtcbiAgICAgICAgcmV0dXJuIHZpc2liaWxpdHkgPT09IFwiaGlkZGVuXCIgfHwgdmlzaWJpbGl0eSA9PT0gXCJjb2xsYXBzZVwiO1xuICAgIH0pO1xuICAgIGlmIChoaWRkZW4gPT09IC0xKSB7XG4gICAgICAgIC8vIHRoZXJlIGlzIG5vIGhpZGRlbiBlbGVtZW50XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHZpc2libGUgPSBmaW5kSW5kZXgoX3BhdGgsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXB1dGVkU3R5bGUoZWxlbWVudCwgXCJ2aXNpYmlsaXR5XCIpID09PSBcInZpc2libGVcIjtcbiAgICB9KTtcbiAgICBpZiAodmlzaWJsZSA9PT0gLTEpIHtcbiAgICAgICAgLy8gdGhlcmUgaXMgbm8gdmlzaWJsZSBlbGVtZW50IChidXQgYSBoaWRkZW4gZWxlbWVudClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChoaWRkZW4gPCB2aXNpYmxlKSB7XG4gICAgICAgIC8vIHRoZXJlIGlzIGEgaGlkZGVuIGVsZW1lbnQgYW5kIGl0J3MgY2xvc2VyIHRoYW4gdGhlIGZpcnN0IHZpc2libGUgZWxlbWVudFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gdGhlcmUgbWF5IGJlIGEgaGlkZGVuIGVsZW1lbnQsIGJ1dCB0aGUgY2xvc2VzdCBlbGVtZW50IGlzIHZpc2libGVcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjb2xsYXBzZWRQYXJlbnQoX3BhdGgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMTtcbiAgICBpZiAoX3BhdGhbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJzdW1tYXJ5XCIpIHtcbiAgICAgICAgb2Zmc2V0ID0gMjtcbiAgICB9XG4gICAgcmV0dXJuIF9wYXRoLnNsaWNlKG9mZnNldCkuc29tZShmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIC8vIFwiY29udGVudCBjaGlsZHJlblwiIG9mIGEgY2xvc2VkIGRldGFpbHMgZWxlbWVudCBhcmUgbm90IHZpc2libGVcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJkZXRhaWxzXCIgJiYgZWxlbWVudC5vcGVuID09PSBmYWxzZTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzVmlzaWJsZVJ1bGVzKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSwgY29udGV4dCA9IF9yZWYuY29udGV4dCwgX3JlZiRleGNlcHQgPSBfcmVmLmV4Y2VwdCwgZXhjZXB0ID0gX3JlZiRleGNlcHQgPT09IHVuZGVmaW5lZCA/IHtcbiAgICAgICAgbm90UmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgICBjc3NEaXNwbGF5OiBmYWxzZSxcbiAgICAgICAgY3NzVmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgIGRldGFpbHNFbGVtZW50OiBmYWxzZSxcbiAgICAgICAgYnJvd3NpbmdDb250ZXh0OiBmYWxzZVxuICAgIH0gOiBfcmVmJGV4Y2VwdDtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHRUb0VsZW1lbnQoe1xuICAgICAgICBsYWJlbDogXCJpcy92aXNpYmxlXCIsXG4gICAgICAgIHJlc29sdmVEb2N1bWVudDogdHJ1ZSxcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgIH0pO1xuICAgIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIWV4Y2VwdC5ub3RSZW5kZXJlZCAmJiBub3RSZW5kZXJlZEVsZW1lbnRzUGF0dGVybi50ZXN0KG5vZGVOYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIF9wYXRoID0gZ2V0UGFyZW50cyh7XG4gICAgICAgIGNvbnRleHQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgICAvLyBpbiBJbnRlcm5ldCBFeHBsb3JlciA8YXVkaW8+IGhhcyBhIGRlZmF1bHQgZGlzcGxheTogbm9uZSwgd2hlcmUgb3RoZXJzIGhhdmUgZGlzcGxheTogaW5saW5lXG4gICAgLy8gYnV0IElFIGFsbG93cyBmb2N1c2luZyA8YXVkaW8gc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj4sIGJ1dCBub3QgPGRpdiBkaXNwbGF5Om5vbmU+PGF1ZGlvPlxuICAgIC8vIHRoaXMgaXMgaXJyZWxldmFudCB0byBvdGhlciBicm93c2VycywgYXMgdGhlIGNvbnRyb2xzIGF0dHJpYnV0ZSBpcyByZXF1aXJlZCB0byBtYWtlIDxhdWRpbz4gZm9jdXNhYmxlXG4gICAgdmFyIGlzQXVkaW9XaXRob3V0Q29udHJvbHMgPSBub2RlTmFtZSA9PT0gXCJhdWRpb1wiICYmICFlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRyb2xzXCIpO1xuICAgIGlmICghZXhjZXB0LmNzc0Rpc3BsYXkgJiYgbm90RGlzcGxheWVkKGlzQXVkaW9XaXRob3V0Q29udHJvbHMgPyBfcGF0aC5zbGljZSgxKSA6IF9wYXRoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghZXhjZXB0LmNzc1Zpc2liaWxpdHkgJiYgbm90VmlzaWJsZShfcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWV4Y2VwdC5kZXRhaWxzRWxlbWVudCAmJiBjb2xsYXBzZWRQYXJlbnQoX3BhdGgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFleGNlcHQuYnJvd3NpbmdDb250ZXh0KSB7XG4gICAgICAgIC8vIGVsZW1lbnRzIHdpdGhpbiBhIGJyb3dzaW5nIGNvbnRleHQgYXJlIGFmZmVjdGVkIGJ5IHRoZVxuICAgICAgICAvLyBicm93c2luZyBjb250ZXh0IGhvc3QgZWxlbWVudCdzIHZpc2liaWxpdHkgYW5kIHRhYmluZGV4XG4gICAgICAgIHZhciBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIHZhciBfaXNWaXNpYmxlID0gaXNWaXNpYmxlUnVsZXMuZXhjZXB0KGV4Y2VwdCk7XG4gICAgICAgIGlmIChmcmFtZUVsZW1lbnQgJiYgIV9pc1Zpc2libGUoZnJhbWVFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLy8gYmluZCBleGNlcHRpb25zIHRvIGFuIGl0ZXJhdG9yIGNhbGxiYWNrXG5pc1Zpc2libGVSdWxlcy5leGNlcHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZXhjZXB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgaXNWaXNpYmxlID0gZnVuY3Rpb24gaXNWaXNpYmxlKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGlzVmlzaWJsZVJ1bGVzKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICBleGNlcHQ6IGV4Y2VwdFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGlzVmlzaWJsZS5ydWxlcyA9IGlzVmlzaWJsZVJ1bGVzO1xuICAgIHJldHVybiBpc1Zpc2libGU7XG59O1xuLy8gcHJvdmlkZSBpc1Zpc2libGUoY29udGV4dCkgYXMgZGVmYXVsdCBpdGVyYXRvciBjYWxsYmFja1xudmFyIGlzVmlzaWJsZSA9IGlzVmlzaWJsZVJ1bGVzLmV4Y2VwdCh7fSk7XG5mdW5jdGlvbiBnZXRNYXBCeU5hbWUobmFtZSwgX2RvY3VtZW50KSB7XG4gICAgLy8gYXBwYXJlbnRseSBnZXRFbGVtZW50c0J5TmFtZSgpIGFsc28gY29uc2lkZXJzIGlkIGF0dHJpYnV0ZSBpbiBJRSAmIG9wZXJhXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0RvY3VtZW50L2dldEVsZW1lbnRzQnlOYW1lXG4gICAgdmFyIG1hcCA9IF9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtYXBbbmFtZT1cIicgKyAoMCwgX2Nzc2VzY2FwZS5kZWZhdWx0KShuYW1lKSArICdcIl0nKTtcbiAgICByZXR1cm4gbWFwIHx8IG51bGw7XG59XG5mdW5jdGlvbiBnZXRJbWFnZU9mQXJlYShlbGVtZW50KSB7XG4gICAgdmFyIG1hcCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICBpZiAoIW1hcC5uYW1lIHx8IG1hcC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm1hcFwiKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBOT1RFOiBpbWFnZSBtYXBzIGNhbiBhbHNvIGJlIGFwcGxpZWQgdG8gPG9iamVjdD4gd2l0aCBpbWFnZSBjb250ZW50LFxuICAgIC8vIGJ1dCBubyBicm93c2VyIHN1cHBvcnRzIHRoaXMgYXQgdGhlIG1vbWVudFxuICAgIC8vIEhUTUw1IHNwZWNpZmllcyBIVE1MTWFwRWxlbWVudC5pbWFnZXMgdG8gYmUgYW4gSFRNTENvbGxlY3Rpb24gb2YgYWxsXG4gICAgLy8gPGltZz4gYW5kIDxvYmplY3Q+IHJlZmVyZW5jaW5nIHRoZSA8bWFwPiBlbGVtZW50LCBidXQgbm8gYnJvd3NlciBpbXBsZW1lbnRzIHRoaXNcbiAgICAvLyAgIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lbWJlZGRlZC1jb250ZW50LTAuaHRtbCN0aGUtbWFwLWVsZW1lbnRcbiAgICAvLyAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9IVE1MTWFwRWxlbWVudFxuICAgIC8vIHRoZSBpbWFnZSBtdXN0IGJlIHZhbGlkIGFuZCBsb2FkZWQgZm9yIHRoZSBtYXAgdG8gdGFrZSBlZmZlY3RcbiAgICB2YXIgX2RvY3VtZW50ID0gZ2V0RG9jdW1lbnQoZWxlbWVudCk7XG4gICAgcmV0dXJuIF9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbWdbdXNlbWFwPVwiIycgKyAoMCwgX2Nzc2VzY2FwZS5kZWZhdWx0KShtYXAubmFtZSkgKyAnXCJdJykgfHwgbnVsbDtcbn1cbnZhciBzdXBwb3J0cyQyID0gdm9pZCAwO1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L21hcFxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ltZyNhdHRyLXVzZW1hcFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnktdWkvYmxvYi9tYXN0ZXIvdWkvY29yZS5qcyNMODgtTDEwN1xuZnVuY3Rpb24gaXNWYWxpZEFyZWEoY29udGV4dCkge1xuICAgIGlmICghc3VwcG9ydHMkMikge1xuICAgICAgICBzdXBwb3J0cyQyID0gX3N1cHBvcnRzKCk7XG4gICAgfVxuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcImlzL3ZhbGlkLWFyZWFcIixcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgIH0pO1xuICAgIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9kZU5hbWUgIT09IFwiYXJlYVwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGhhc1RhYmluZGV4ID0gZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKTtcbiAgICBpZiAoIXN1cHBvcnRzJDIuZm9jdXNBcmVhVGFiaW5kZXggJiYgaGFzVGFiaW5kZXgpIHtcbiAgICAgICAgLy8gQmxpbmsgYW5kIFdlYktpdCBkbyBub3QgY29uc2lkZXIgPGFyZWEgdGFiaW5kZXg9XCItMVwiIGhyZWY9XCIjdm9pZFwiPiBmb2N1c2FibGVcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgaW1nID0gZ2V0SW1hZ2VPZkFyZWEoZWxlbWVudCk7XG4gICAgaWYgKCFpbWcgfHwgIWlzVmlzaWJsZShpbWcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gRmlyZWZveCBvbmx5IGFsbG93cyBmdWxseSBsb2FkZWQgaW1hZ2VzIHRvIHJlZmVyZW5jZSBpbWFnZSBtYXBzXG4gICAgLy8gaHR0cHM6Ly9zdGVyZW9jaHJvLm1lL2lkZWFzL2RldGVjdGluZy1icm9rZW4taW1hZ2VzLWpzXG4gICAgaWYgKCFzdXBwb3J0cyQyLmZvY3VzQnJva2VuSW1hZ2VNYXAgJiYgKCFpbWcuY29tcGxldGUgfHwgIWltZy5uYXR1cmFsSGVpZ2h0IHx8IGltZy5vZmZzZXRXaWR0aCA8PSAwIHx8IGltZy5vZmZzZXRIZWlnaHQgPD0gMCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBGaXJlZm94IHN1cHBvcnRzLmNhbiBmb2N1cyBhcmVhIGVsZW1lbnRzIGV2ZW4gaWYgdGhleSBkb24ndCBoYXZlIGFuIGhyZWYgYXR0cmlidXRlXG4gICAgaWYgKCFzdXBwb3J0cyQyLmZvY3VzQXJlYVdpdGhvdXRIcmVmICYmICFlbGVtZW50LmhyZWYpIHtcbiAgICAgICAgLy8gSW50ZXJuZXQgZXhwbG9yZXIgc3VwcG9ydHMuY2FuIGZvY3VzIGFyZWEgZWxlbWVudHMgd2l0aG91dCBocmVmIGlmIGVpdGhlclxuICAgICAgICAvLyB0aGUgYXJlYSBlbGVtZW50IG9yIHRoZSBpbWFnZSBlbGVtZW50IGhhcyBhIHRhYmluZGV4IGF0dHJpYnV0ZVxuICAgICAgICByZXR1cm4gc3VwcG9ydHMkMi5mb2N1c0FyZWFUYWJpbmRleCAmJiBoYXNUYWJpbmRleCB8fCBzdXBwb3J0cyQyLmZvY3VzQXJlYUltZ1RhYmluZGV4ICYmIGltZy5oYXNBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKTtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ltZyNhdHRyLXVzZW1hcFxuICAgIHZhciBjaGlsZE9mSW50ZXJhY3RpdmUgPSBnZXRQYXJlbnRzKHtcbiAgICAgICAgY29udGV4dDogaW1nXG4gICAgfSkuc2xpY2UoMSkuc29tZShmdW5jdGlvbihfZWxlbWVudCkge1xuICAgICAgICB2YXIgbmFtZSA9IF9lbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBuYW1lID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYVwiO1xuICAgIH0pO1xuICAgIGlmIChjaGlsZE9mSW50ZXJhY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbnZhciBzdXBwb3J0cyQzID0gdm9pZCAwO1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2Rpc2FibGVkLWVsZW1lbnRzLmh0bWwjY29uY2VwdC1lbGVtZW50LWRpc2FibGVkXG52YXIgZGlzYWJsZWRFbGVtZW50c1BhdHRlcm4gPSB2b2lkIDA7XG52YXIgZGlzYWJsZWRFbGVtZW50cyA9IHtcbiAgICBpbnB1dDogdHJ1ZSxcbiAgICBzZWxlY3Q6IHRydWUsXG4gICAgdGV4dGFyZWE6IHRydWUsXG4gICAgYnV0dG9uOiB0cnVlLFxuICAgIGZpZWxkc2V0OiB0cnVlLFxuICAgIGZvcm06IHRydWVcbn07XG5mdW5jdGlvbiBpc05hdGl2ZURpc2FibGVkU3VwcG9ydGVkKGNvbnRleHQpIHtcbiAgICBpZiAoIXN1cHBvcnRzJDMpIHtcbiAgICAgICAgc3VwcG9ydHMkMyA9IF9zdXBwb3J0cygpO1xuICAgICAgICBpZiAoc3VwcG9ydHMkMy5mb2N1c0ZpZWxkc2V0RGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkaXNhYmxlZEVsZW1lbnRzLmZpZWxkc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdXBwb3J0cyQzLmZvY3VzRm9ybURpc2FibGVkKSB7XG4gICAgICAgICAgICBkZWxldGUgZGlzYWJsZWRFbGVtZW50cy5mb3JtO1xuICAgICAgICB9XG4gICAgICAgIGRpc2FibGVkRWxlbWVudHNQYXR0ZXJuID0gbmV3IFJlZ0V4cChcIl4oXCIgKyBPYmplY3Qua2V5cyhkaXNhYmxlZEVsZW1lbnRzKS5qb2luKFwifFwiKSArIFwiKSRcIik7XG4gICAgfVxuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcImlzL25hdGl2ZS1kaXNhYmxlZC1zdXBwb3J0ZWRcIixcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgIH0pO1xuICAgIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gQm9vbGVhbihkaXNhYmxlZEVsZW1lbnRzUGF0dGVybi50ZXN0KG5vZGVOYW1lKSk7XG59XG52YXIgc3VwcG9ydHMkNCA9IHZvaWQgMDtcbmZ1bmN0aW9uIGlzRGlzYWJsZWRGaWVsZHNldChlbGVtZW50KSB7XG4gICAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBub2RlTmFtZSA9PT0gXCJmaWVsZHNldFwiICYmIGVsZW1lbnQuZGlzYWJsZWQ7XG59XG5mdW5jdGlvbiBpc0Rpc2FibGVkRm9ybShlbGVtZW50KSB7XG4gICAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBub2RlTmFtZSA9PT0gXCJmb3JtXCIgJiYgZWxlbWVudC5kaXNhYmxlZDtcbn1cbmZ1bmN0aW9uIGlzRGlzYWJsZWQoY29udGV4dCkge1xuICAgIGlmICghc3VwcG9ydHMkNCkge1xuICAgICAgICBzdXBwb3J0cyQ0ID0gX3N1cHBvcnRzKCk7XG4gICAgfVxuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcImlzL2Rpc2FibGVkXCIsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICB9KTtcbiAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWFsbHktZGlzYWJsZWRcIikpIHtcbiAgICAgICAgLy8gdHJlYXQgYWxseSdzIGVsZW1lbnQvZGlzYWJsZWQgbGlrZSB0aGUgRE9NIG5hdGl2ZSBlbGVtZW50LmRpc2FibGVkXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWlzTmF0aXZlRGlzYWJsZWRTdXBwb3J0ZWQoZWxlbWVudCkpIHtcbiAgICAgICAgLy8gbm9uLWZvcm0gZWxlbWVudHMgZG8gbm90IHN1cHBvcnQgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChlbGVtZW50LmRpc2FibGVkKSB7XG4gICAgICAgIC8vIHRoZSBlbGVtZW50IGl0c2VsZiBpcyBkaXNhYmxlZFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIHBhcmVudHMgPSBnZXRQYXJlbnRzKHtcbiAgICAgICAgY29udGV4dDogZWxlbWVudFxuICAgIH0pO1xuICAgIGlmIChwYXJlbnRzLnNvbWUoaXNEaXNhYmxlZEZpZWxkc2V0KSkge1xuICAgICAgICAvLyBhIHBhcmVudGFsIDxmaWVsZHNldD4gaXMgZGlzYWJsZCBhbmQgaW5oZXJpdHMgdGhlIHN0YXRlIG9udG8gdGhpcyBlbGVtZW50XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXN1cHBvcnRzJDQuZm9jdXNGb3JtRGlzYWJsZWQgJiYgcGFyZW50cy5zb21lKGlzRGlzYWJsZWRGb3JtKSkge1xuICAgICAgICAvLyBhIHBhcmVudGFsIDxmb3JtPiBpcyBkaXNhYmxkIGFuZCBpbmhlcml0cyB0aGUgc3RhdGUgb250byB0aGlzIGVsZW1lbnRcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzT25seVRhYmJhYmxlUnVsZXMoKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBjb250ZXh0ID0gX3JlZi5jb250ZXh0LCBfcmVmJGV4Y2VwdCA9IF9yZWYuZXhjZXB0LCBleGNlcHQgPSBfcmVmJGV4Y2VwdCA9PT0gdW5kZWZpbmVkID8ge1xuICAgICAgICBvbmx5Rm9jdXNhYmxlQnJvd3NpbmdDb250ZXh0OiBmYWxzZSxcbiAgICAgICAgdmlzaWJsZTogZmFsc2VcbiAgICB9IDogX3JlZiRleGNlcHQ7XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0VG9FbGVtZW50KHtcbiAgICAgICAgbGFiZWw6IFwiaXMvb25seS10YWJiYWJsZVwiLFxuICAgICAgICByZXNvbHZlRG9jdW1lbnQ6IHRydWUsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICB9KTtcbiAgICBpZiAoIWV4Y2VwdC52aXNpYmxlICYmICFpc1Zpc2libGUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWV4Y2VwdC5vbmx5Rm9jdXNhYmxlQnJvd3NpbmdDb250ZXh0ICYmIChwbGF0Zm9ybS5pcy5HRUNLTyB8fCBwbGF0Zm9ybS5pcy5UUklERU5UIHx8IHBsYXRmb3JtLmlzLkVER0UpKSB7XG4gICAgICAgIHZhciBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGlmIChmcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmICh0YWJpbmRleFZhbHVlKGZyYW1lRWxlbWVudCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgLy8gaWZyYW1lW3RhYmluZGV4PVwiLTFcIl0gYW5kIG9iamVjdFt0YWJpbmRleD1cIi0xXCJdIGluaGVyaXQgdGhlXG4gICAgICAgICAgICAgICAgLy8gdGFiYmFibGUgZGVtb3Rpb24gb250byBlbGVtZW50cyBvZiB0aGVpciBicm93c2luZyBjb250ZXh0c1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHRhYmluZGV4ID0gdGFiaW5kZXhWYWx1ZShlbGVtZW50KTtcbiAgICBpZiAobm9kZU5hbWUgPT09IFwibGFiZWxcIiAmJiBwbGF0Zm9ybS5pcy5HRUNLTykge1xuICAgICAgICAvLyBGaXJlZm94IGNhbm5vdCBmb2N1cywgYnV0IHRhYiB0bzogbGFiZWxbdGFiaW5kZXg9MF1cbiAgICAgICAgcmV0dXJuIHRhYmluZGV4ICE9PSBudWxsICYmIHRhYmluZGV4ID49IDA7XG4gICAgfVxuICAgIC8vIFNWRyBFbGVtZW50cyB3ZXJlIGtleWJvYXJkIGZvY3VzYWJsZSBidXQgbm90IHNjcmlwdCBmb2N1c2FibGUgYmVmb3JlIEZpcmVmb3ggNTEuXG4gICAgLy8gRmlyZWZveCA1MSBhZGRlZCB0aGUgZm9jdXMgbWFuYWdlbWVudCBET00gQVBJICguZm9jdXMgYW5kIC5ibHVyKSB0byBTVkdFbGVtZW50LFxuICAgIC8vIHNlZSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03Nzg2NTRcbiAgICBpZiAocGxhdGZvcm0uaXMuR0VDS08gJiYgZWxlbWVudC5vd25lclNWR0VsZW1lbnQgJiYgIWVsZW1lbnQuZm9jdXMpIHtcbiAgICAgICAgaWYgKG5vZGVOYW1lID09PSBcImFcIiAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcInhsaW5rOmhyZWZcIikpIHtcbiAgICAgICAgICAgIC8vIGFueSBmb2N1c2FibGUgY2hpbGQgb2YgPHN2Zz4gY2Fubm90IGJlIGZvY3VzZWQsIGJ1dCB0YWJiZWQgdG9cbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybS5pcy5HRUNLTykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8vIGJpbmQgZXhjZXB0aW9ucyB0byBhbiBpdGVyYXRvciBjYWxsYmFja1xuaXNPbmx5VGFiYmFibGVSdWxlcy5leGNlcHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZXhjZXB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgaXNPbmx5VGFiYmFibGUgPSBmdW5jdGlvbiBpc09ubHlUYWJiYWJsZShjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBpc09ubHlUYWJiYWJsZVJ1bGVzKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICBleGNlcHQ6IGV4Y2VwdFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGlzT25seVRhYmJhYmxlLnJ1bGVzID0gaXNPbmx5VGFiYmFibGVSdWxlcztcbiAgICByZXR1cm4gaXNPbmx5VGFiYmFibGU7XG59O1xuLy8gcHJvdmlkZSBpc09ubHlUYWJiYWJsZShjb250ZXh0KSBhcyBkZWZhdWx0IGl0ZXJhdG9yIGNhbGxiYWNrXG52YXIgaXNPbmx5VGFiYmFibGUgPSBpc09ubHlUYWJiYWJsZVJ1bGVzLmV4Y2VwdCh7fSk7XG52YXIgc3VwcG9ydHMkNSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGlzT25seUZvY3VzUmVsZXZhbnQoZWxlbWVudCkge1xuICAgIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9kZU5hbWUgPT09IFwiZW1iZWRcIiB8fCBub2RlTmFtZSA9PT0gXCJrZXlnZW5cIikge1xuICAgICAgICAvLyBlbWJlZCBpcyBjb25zaWRlcmVkIGZvY3VzLXJlbGV2YW50IGJ1dCBub3QgZm9jdXNhYmxlXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzgyXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgX3RhYmluZGV4ID0gdGFiaW5kZXhWYWx1ZShlbGVtZW50KTtcbiAgICBpZiAoZWxlbWVudC5zaGFkb3dSb290ICYmIF90YWJpbmRleCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBTaGFkb3dET00gaG9zdCBlbGVtZW50cyAqbWF5KiByZWNlaXZlIGZvY3VzXG4gICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vdCBjb25zaWRlcmVkIGZvY3VhYmxlXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwibGFiZWxcIikge1xuICAgICAgICAvLyA8bGFiZWwgdGFiaW5kZXg9XCIwXCI+IGlzIG9ubHkgdGFiYmFibGUgaW4gRmlyZWZveCwgbm90IHNjcmlwdC1mb2N1c2FibGVcbiAgICAgICAgLy8gdGhlcmUncyBubyB3YXkgdG8gbWFrZSBhbiBlbGVtZW50IGZvY3VzYWJsZSBvdGhlciB0aGFuIGJ5IGFkZGluZyBhIHRhYmluZGV4LFxuICAgICAgICAvLyBhbmQgZm9jdXMgYmVoYXZpb3Igb2YgdGhlIGxhYmVsIGVsZW1lbnQgc2VlbXMgaGFyZC13aXJlZCB0byBpZ25vcmUgdGFiaW5kZXhcbiAgICAgICAgLy8gaW4gc29tZSBicm93c2VycyAobGlrZSBHZWNrbywgQmxpbmsgYW5kIFdlYktpdClcbiAgICAgICAgcmV0dXJuICFzdXBwb3J0cyQ1LmZvY3VzTGFiZWxUYWJpbmRleCB8fCBfdGFiaW5kZXggPT09IG51bGw7XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJsZWdlbmRcIikge1xuICAgICAgICByZXR1cm4gX3RhYmluZGV4ID09PSBudWxsO1xuICAgIH1cbiAgICBpZiAoc3VwcG9ydHMkNS5mb2N1c1N2Z0ZvY3VzYWJsZUF0dHJpYnV0ZSAmJiAoZWxlbWVudC5vd25lclNWR0VsZW1lbnQgfHwgbm9kZU5hbWUgPT09IFwic3ZnXCIpKSB7XG4gICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyIHVuZGVyc3RhbmRzIHRoZSBmb2N1c2FibGUgYXR0cmlidXRlIGludHJvZHVjZWQgaW4gU1ZHIFRpbnkgMS4yXG4gICAgICAgIHZhciBmb2N1c2FibGVBdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImZvY3VzYWJsZVwiKTtcbiAgICAgICAgcmV0dXJuIGZvY3VzYWJsZUF0dHJpYnV0ZSAmJiBmb2N1c2FibGVBdHRyaWJ1dGUgPT09IFwiZmFsc2VcIjtcbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcImltZ1wiICYmIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwidXNlbWFwXCIpKSB7XG4gICAgICAgIC8vIEdlY2tvLCBUcmlkZW50IGFuZCBFZGdlIGRvIG5vdCBhbGxvdyBhbiBpbWFnZSB3aXRoIGFuIGltYWdlIG1hcCBhbmQgdGFiaW5kZXggdG8gYmUgZm9jdXNlZCxcbiAgICAgICAgLy8gaXQgYXBwZWFycyB0aGUgdGFiaW5kZXggaXMgb3ZlcnJ1bGVkIHNvIGZvY3VzIGlzIHN0aWxsIGZvcndhcmRlZCB0byB0aGUgPG1hcD5cbiAgICAgICAgcmV0dXJuIF90YWJpbmRleCA9PT0gbnVsbCB8fCAhc3VwcG9ydHMkNS5mb2N1c0ltZ1VzZW1hcFRhYmluZGV4O1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwiYXJlYVwiKSB7XG4gICAgICAgIC8vIGFsbCA8YXJlYT5zIGFyZSBjb25zaWRlcmVkIHJlbGV2YW50LFxuICAgICAgICAvLyBidXQgb25seSB0aGUgdmFsaWQgPGFyZWE+cyBhcmUgZm9jdXNhYmxlXG4gICAgICAgIHJldHVybiAhaXNWYWxpZEFyZWEoZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzRm9jdXNhYmxlUnVsZXMoKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBjb250ZXh0ID0gX3JlZi5jb250ZXh0LCBfcmVmJGV4Y2VwdCA9IF9yZWYuZXhjZXB0LCBleGNlcHQgPSBfcmVmJGV4Y2VwdCA9PT0gdW5kZWZpbmVkID8ge1xuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvbmx5VGFiYmFibGU6IGZhbHNlXG4gICAgfSA6IF9yZWYkZXhjZXB0O1xuICAgIGlmICghc3VwcG9ydHMkNSkge1xuICAgICAgICBzdXBwb3J0cyQ1ID0gX3N1cHBvcnRzKCk7XG4gICAgfVxuICAgIHZhciBfaXNPbmx5VGFiYmFibGUgPSBpc09ubHlUYWJiYWJsZS5ydWxlcy5leGNlcHQoe1xuICAgICAgICBvbmx5Rm9jdXNhYmxlQnJvd3NpbmdDb250ZXh0OiB0cnVlLFxuICAgICAgICB2aXNpYmxlOiBleGNlcHQudmlzaWJsZVxuICAgIH0pO1xuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcImlzL2ZvY3VzYWJsZVwiLFxuICAgICAgICByZXNvbHZlRG9jdW1lbnQ6IHRydWUsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICB9KTtcbiAgICB2YXIgZm9jdXNSZWxldmFudCA9IGlzRm9jdXNSZWxldmFudC5ydWxlcyh7XG4gICAgICAgIGNvbnRleHQ6IGVsZW1lbnQsXG4gICAgICAgIGV4Y2VwdDogZXhjZXB0XG4gICAgfSk7XG4gICAgaWYgKCFmb2N1c1JlbGV2YW50IHx8IGlzT25seUZvY3VzUmVsZXZhbnQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWV4Y2VwdC5kaXNhYmxlZCAmJiBpc0Rpc2FibGVkKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFleGNlcHQub25seVRhYmJhYmxlICYmIF9pc09ubHlUYWJiYWJsZShlbGVtZW50KSkge1xuICAgICAgICAvLyBzb21lIGVsZW1lbnRzIG1heSBiZSBrZXlib2FyZCBmb2N1c2FibGUsIGJ1dCBub3Qgc2NyaXB0IGZvY3VzYWJsZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCByZW5kZXJlZCwgY2Fubm90IGJlIGZvY3VzZWRcbiAgICBpZiAoIWV4Y2VwdC52aXNpYmxlKSB7XG4gICAgICAgIHZhciB2aXNpYmlsaXR5T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGVsZW1lbnQsXG4gICAgICAgICAgICBleGNlcHQ6IHt9XG4gICAgICAgIH07XG4gICAgICAgIGlmIChzdXBwb3J0cyQ1LmZvY3VzSW5IaWRkZW5JZnJhbWUpIHtcbiAgICAgICAgICAgIC8vIFdlYktpdCBhbmQgQmxpbmsgY2FuIGZvY3VzIGNvbnRlbnQgaW4gaGlkZGVuIDxpZnJhbWU+IGFuZCA8b2JqZWN0PlxuICAgICAgICAgICAgdmlzaWJpbGl0eU9wdGlvbnMuZXhjZXB0LmJyb3dzaW5nQ29udGV4dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1cHBvcnRzJDUuZm9jdXNPYmplY3RTdmdIaWRkZW4pIHtcbiAgICAgICAgICAgIC8vIEJsaW5rIGFsbG93cyBmb2N1c2luZyB0aGUgb2JqZWN0IGVsZW1lbnQsIGV2ZW4gaWYgaXQgaGFzIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgICAgIC8vIEBicm93c2VyLWlzc3VlIEJsaW5rIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODYxOTFcbiAgICAgICAgICAgIHZhciBfbm9kZU5hbWUyID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKF9ub2RlTmFtZTIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5T3B0aW9ucy5leGNlcHQuY3NzVmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1Zpc2libGUucnVsZXModmlzaWJpbGl0eU9wdGlvbnMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGZyYW1lRWxlbWVudCA9IGdldEZyYW1lRWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoZnJhbWVFbGVtZW50KSB7XG4gICAgICAgIHZhciBfbm9kZU5hbWUgPSBmcmFtZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKF9ub2RlTmFtZSA9PT0gXCJvYmplY3RcIiAmJiAhc3VwcG9ydHMkNS5mb2N1c0luWmVyb0RpbWVuc2lvbk9iamVjdCkge1xuICAgICAgICAgICAgaWYgKCFmcmFtZUVsZW1lbnQub2Zmc2V0V2lkdGggfHwgIWZyYW1lRWxlbWVudC5vZmZzZXRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAvLyBXZWJLaXQgY2FuIG5vdCBmb2N1cyBjb250ZW50IGluIDxvYmplY3Q+IGlmIGl0IGRvZXNuJ3QgaGF2ZSBkaW1lbnNpb25zXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobm9kZU5hbWUgPT09IFwic3ZnXCIgJiYgc3VwcG9ydHMkNS5mb2N1c1N2Z0luSWZyYW1lICYmICFmcmFtZUVsZW1lbnQgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLy8gYmluZCBleGNlcHRpb25zIHRvIGFuIGl0ZXJhdG9yIGNhbGxiYWNrXG5pc0ZvY3VzYWJsZVJ1bGVzLmV4Y2VwdCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBleGNlcHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIHZhciBpc0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIGlzRm9jdXNhYmxlKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGlzRm9jdXNhYmxlUnVsZXMoe1xuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgIGV4Y2VwdDogZXhjZXB0XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgaXNGb2N1c2FibGUucnVsZXMgPSBpc0ZvY3VzYWJsZVJ1bGVzO1xuICAgIHJldHVybiBpc0ZvY3VzYWJsZTtcbn07XG4vLyBwcm92aWRlIGlzRm9jdXNSZWxldmFudChjb250ZXh0KSBhcyBkZWZhdWx0IGl0ZXJhdG9yIGNhbGxiYWNrXG52YXIgaXNGb2N1c2FibGUgPSBpc0ZvY3VzYWJsZVJ1bGVzLmV4Y2VwdCh7fSk7XG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXIoY29uZGl0aW9uKSB7XG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9Ob2RlRmlsdGVyXG4gICAgdmFyIGZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBTaGFkb3dSb290IGVsZW1lbnRzIHJlZ2FyZGxlc3Mgb2YgdGhlbSBiZWluZyBmb2N1c2FibGUsXG4gICAgICAgICAgICAvLyBzbyB0aGV5IGNhbiBiZSB3YWxrZWQgcmVjdXJzaXZlbHkgbGF0ZXJcbiAgICAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmRpdGlvbihub2RlKSkge1xuICAgICAgICAgICAgLy8gZmluZHMgZWxlbWVudHMgdGhhdCBjb3VsZCBoYXZlIGJlZW4gZm91bmQgYnkgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgpXG4gICAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9TS0lQO1xuICAgIH07XG4gICAgLy8gSUUgcmVxdWlyZXMgYSBmdW5jdGlvbiwgQnJvd3NlcnMgcmVxdWlyZSB7YWNjZXB0Tm9kZTogZnVuY3Rpb259XG4gICAgLy8gc2VlIGh0dHA6Ly93d3cuYmVubmFkZWwuY29tL2Jsb2cvMjYwNy1maW5kaW5nLWh0bWwtY29tbWVudC1ub2Rlcy1pbi10aGUtZG9tLXVzaW5nLXRyZWV3YWxrZXIuaHRtXG4gICAgZmlsdGVyLmFjY2VwdE5vZGUgPSBmaWx0ZXI7XG4gICAgcmV0dXJuIGZpbHRlcjtcbn1cbnZhciBQb3NzaWJseUZvY3VzYWJsZUZpbHRlciA9IGNyZWF0ZUZpbHRlcihpc0ZvY3VzUmVsZXZhbnQpO1xuZnVuY3Rpb24gcXVlcnlGb2N1c2FibGVTdHJpY3QoKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBjb250ZXh0ID0gX3JlZi5jb250ZXh0LCBpbmNsdWRlQ29udGV4dCA9IF9yZWYuaW5jbHVkZUNvbnRleHQsIGluY2x1ZGVPbmx5VGFiYmFibGUgPSBfcmVmLmluY2x1ZGVPbmx5VGFiYmFibGUsIHN0cmF0ZWd5ID0gX3JlZi5zdHJhdGVneTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICB9XG4gICAgdmFyIF9pc0ZvY3VzYWJsZSA9IGlzRm9jdXNhYmxlLnJ1bGVzLmV4Y2VwdCh7XG4gICAgICAgIG9ubHlUYWJiYWJsZTogaW5jbHVkZU9ubHlUYWJiYWJsZVxuICAgIH0pO1xuICAgIHZhciBfZG9jdW1lbnQgPSBnZXREb2N1bWVudChjb250ZXh0KTtcbiAgICAvLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0RvY3VtZW50L2NyZWF0ZVRyZWVXYWxrZXJcbiAgICB2YXIgd2Fsa2VyID0gX2RvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoLy8gcm9vdCBlbGVtZW50IHRvIHN0YXJ0IHNlYXJjaCBpblxuICAgIGNvbnRleHQsIC8vIGVsZW1lbnQgdHlwZSBmaWx0ZXJcbiAgICBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCwgLy8gY3VzdG9tIE5vZGVGaWx0ZXIgZmlsdGVyXG4gICAgc3RyYXRlZ3kgPT09IFwiYWxsXCIgPyBQb3NzaWJseUZvY3VzYWJsZUZpbHRlciA6IGNyZWF0ZUZpbHRlcihfaXNGb2N1c2FibGUpLCAvLyBkZXByZWNhdGVkLCBidXQgSUUgcmVxdWlyZXMgaXRcbiAgICBmYWxzZSk7XG4gICAgdmFyIGxpc3QgPSBbXTtcbiAgICB3aGlsZSh3YWxrZXIubmV4dE5vZGUoKSl7XG4gICAgICAgIGlmICh3YWxrZXIuY3VycmVudE5vZGUuc2hhZG93Um9vdCkge1xuICAgICAgICAgICAgaWYgKF9pc0ZvY3VzYWJsZSh3YWxrZXIuY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbGlzdC5wdXNoKHdhbGtlci5jdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaXN0ID0gbGlzdC5jb25jYXQocXVlcnlGb2N1c2FibGVTdHJpY3Qoe1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHdhbGtlci5jdXJyZW50Tm9kZS5zaGFkb3dSb290LFxuICAgICAgICAgICAgICAgIGluY2x1ZGVPbmx5VGFiYmFibGU6IGluY2x1ZGVPbmx5VGFiYmFibGUsXG4gICAgICAgICAgICAgICAgc3RyYXRlZ3k6IHN0cmF0ZWd5XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaXN0LnB1c2god2Fsa2VyLmN1cnJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBhZGQgY29udGV4dCBpZiByZXF1ZXN0ZWQgYW5kIGZvY3VzYWJsZVxuICAgIGlmIChpbmNsdWRlQ29udGV4dCkge1xuICAgICAgICBpZiAoc3RyYXRlZ3kgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgICAgIGlmIChpc0ZvY3VzUmVsZXZhbnQoY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICBsaXN0LnVuc2hpZnQoY29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoX2lzRm9jdXNhYmxlKGNvbnRleHQpKSB7XG4gICAgICAgICAgICBsaXN0LnVuc2hpZnQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG59XG4vLyBOT1RFOiB0aGlzIHNlbGVjdG9yIE1VU1QgKm5ldmVyKiBiZSB1c2VkIGRpcmVjdGx5LFxudmFyIHN1cHBvcnRzJDYgPSB2b2lkIDA7XG52YXIgc2VsZWN0b3IkMSA9IHZvaWQgMDtcbmZ1bmN0aW9uIHNlbGVjdG9yJDIoKSB7XG4gICAgaWYgKCFzdXBwb3J0cyQ2KSB7XG4gICAgICAgIHN1cHBvcnRzJDYgPSBfc3VwcG9ydHMoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzZWxlY3RvciQxID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RvciQxO1xuICAgIH1cbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZWRpdGluZy5odG1sI3NlcXVlbnRpYWwtZm9jdXMtbmF2aWdhdGlvbi1hbmQtdGhlLXRhYmluZGV4LWF0dHJpYnV0ZVxuICAgIHNlbGVjdG9yJDEgPSBcIlwiICsgLy8gSUUxMSBzdXBwb3J0cy5jYW4gZm9jdXMgPHRhYmxlPiBhbmQgPHRkPlxuICAgIChzdXBwb3J0cyQ2LmZvY3VzVGFibGUgPyBcInRhYmxlLCB0ZCxcIiA6IFwiXCIpICsgLy8gSUUxMSBzdXBwb3J0cy5jYW4gZm9jdXMgPGZpZWxkc2V0PlxuICAgIChzdXBwb3J0cyQ2LmZvY3VzRmllbGRzZXQgPyBcImZpZWxkc2V0LFwiIDogXCJcIikgKyAvLyBOYW1lc3BhY2UgcHJvYmxlbXMgb2YgW3hsaW5rOmhyZWZdIGV4cGxhaW5lZCBpbiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjMwNDc4ODgvNTE1MTI0XG4gICAgLy8gc3ZnIGFbKnxocmVmXSBkb2VzIG5vdCBtYXRjaCBpbiBJRTksIGJ1dCBzaW5jZSB3ZSdyZSBmaWx0ZXJpbmdcbiAgICAvLyB0aHJvdWdoIGlzL2ZvY3VzYWJsZSB3ZSBjYW4gaW5jbHVkZSBhbGwgPGE+IGZyb20gU1ZHXG4gICAgXCJzdmcgYSxcIiArIC8vIG1heSBiZWhhdmUgYXMgJ3N2Zywgc3ZnICosJyBpbiBjaHJvbWUgYXMgKmV2ZXJ5KiBzdmcgZWxlbWVudCB3aXRoIGEgZm9jdXMgZXZlbnQgbGlzdGVuZXIgaXMgZm9jdXNhYmxlXG4gICAgLy8gbmF2aWdhdGlvbmFsIGVsZW1lbnRzXG4gICAgXCJhW2hyZWZdLFwiICsgLy8gdmFsaWRpdHkgZGV0ZXJtaW5lZCBieSBpcy92YWxpZC1hcmVhLmpzXG4gICAgXCJhcmVhW2hyZWZdLFwiICsgLy8gdmFsaWRpdHkgZGV0ZXJtaW5lZCBieSBpcy9kaXNhYmxlZC5qc1xuICAgIFwiaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGJ1dHRvbixcIiArIC8vIGJyb3dzaW5nIGNvbnRleHQgY29udGFpbmVyc1xuICAgIFwiaWZyYW1lLCBvYmplY3QsIGVtYmVkLFwiICsgLy8gaW50ZXJhY3RpdmUgY29udGVudFxuICAgIFwia2V5Z2VuLFwiICsgKHN1cHBvcnRzJDYuZm9jdXNBdWRpb1dpdGhvdXRDb250cm9scyA/IFwiYXVkaW8sXCIgOiBcImF1ZGlvW2NvbnRyb2xzXSxcIikgKyAoc3VwcG9ydHMkNi5mb2N1c1ZpZGVvV2l0aG91dENvbnRyb2xzID8gXCJ2aWRlbyxcIiA6IFwidmlkZW9bY29udHJvbHNdLFwiKSArIChzdXBwb3J0cyQ2LmZvY3VzU3VtbWFyeSA/IFwic3VtbWFyeSxcIiA6IFwiXCIpICsgLy8gdmFsaWRpdHkgZGV0ZXJtaW5lZCBieSBpcy92YWxpZC10YWJpbmRleC5qc1xuICAgIFwiW3RhYmluZGV4XSxcIiArIC8vIGVkaXRpbmcgaG9zdHNcbiAgICBcIltjb250ZW50ZWRpdGFibGVdXCI7XG4gICAgLy8gd2hlcmUgU2hhZG93RE9NIGlzIHN1cHBvcnRlZCwgd2UgYWxzbyB3YW50IHRoZSBzaGFkb3dlZCBmb2N1c2FibGUgZWxlbWVudHMgKHZpYSBcIj4+PlwiIG9yIFwiL2RlZXAvXCIpXG4gICAgc2VsZWN0b3IkMSA9IHNlbGVjdEluU2hhZG93cyhzZWxlY3RvciQxKTtcbiAgICByZXR1cm4gc2VsZWN0b3IkMTtcbn1cbmZ1bmN0aW9uIHF1ZXJ5Rm9jdXNhYmxlUXVpY2soKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBjb250ZXh0ID0gX3JlZi5jb250ZXh0LCBpbmNsdWRlQ29udGV4dCA9IF9yZWYuaW5jbHVkZUNvbnRleHQsIGluY2x1ZGVPbmx5VGFiYmFibGUgPSBfcmVmLmluY2x1ZGVPbmx5VGFiYmFibGU7XG4gICAgdmFyIF9zZWxlY3RvciA9IHNlbGVjdG9yJDIoKTtcbiAgICB2YXIgZWxlbWVudHMgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoX3NlbGVjdG9yKTtcbiAgICAvLyB0aGUgc2VsZWN0b3IgcG90ZW50aWFsbHkgbWF0Y2hlcyBtb3JlIHRoYW4gcmVhbGx5IGlzIGZvY3VzYWJsZVxuICAgIHZhciBfaXNGb2N1c2FibGUgPSBpc0ZvY3VzYWJsZS5ydWxlcy5leGNlcHQoe1xuICAgICAgICBvbmx5VGFiYmFibGU6IGluY2x1ZGVPbmx5VGFiYmFibGVcbiAgICB9KTtcbiAgICB2YXIgcmVzdWx0ID0gW10uZmlsdGVyLmNhbGwoZWxlbWVudHMsIF9pc0ZvY3VzYWJsZSk7XG4gICAgLy8gYWRkIGNvbnRleHQgaWYgcmVxdWVzdGVkIGFuZCBmb2N1c2FibGVcbiAgICBpZiAoaW5jbHVkZUNvbnRleHQgJiYgX2lzRm9jdXNhYmxlKGNvbnRleHQpKSB7XG4gICAgICAgIHJlc3VsdC51bnNoaWZ0KGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcXVlcnlGb2N1c2FibGUoKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBjb250ZXh0ID0gX3JlZi5jb250ZXh0LCBpbmNsdWRlQ29udGV4dCA9IF9yZWYuaW5jbHVkZUNvbnRleHQsIGluY2x1ZGVPbmx5VGFiYmFibGUgPSBfcmVmLmluY2x1ZGVPbmx5VGFiYmFibGUsIF9yZWYkc3RyYXRlZ3kgPSBfcmVmLnN0cmF0ZWd5LCBzdHJhdGVneSA9IF9yZWYkc3RyYXRlZ3kgPT09IHVuZGVmaW5lZCA/IFwicXVpY2tcIiA6IF9yZWYkc3RyYXRlZ3k7XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0VG9FbGVtZW50KHtcbiAgICAgICAgbGFiZWw6IFwicXVlcnkvZm9jdXNhYmxlXCIsXG4gICAgICAgIHJlc29sdmVEb2N1bWVudDogdHJ1ZSxcbiAgICAgICAgZGVmYXVsdFRvRG9jdW1lbnQ6IHRydWUsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICB9KTtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgY29udGV4dDogZWxlbWVudCxcbiAgICAgICAgaW5jbHVkZUNvbnRleHQ6IGluY2x1ZGVDb250ZXh0LFxuICAgICAgICBpbmNsdWRlT25seVRhYmJhYmxlOiBpbmNsdWRlT25seVRhYmJhYmxlLFxuICAgICAgICBzdHJhdGVneTogc3RyYXRlZ3lcbiAgICB9O1xuICAgIGlmIChzdHJhdGVneSA9PT0gXCJxdWlja1wiKSB7XG4gICAgICAgIHJldHVybiBxdWVyeUZvY3VzYWJsZVF1aWNrKG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAoc3RyYXRlZ3kgPT09IFwic3RyaWN0XCIgfHwgc3RyYXRlZ3kgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5Rm9jdXNhYmxlU3RyaWN0KG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdxdWVyeS9mb2N1c2FibGUgcmVxdWlyZXMgb3B0aW9uLnN0cmF0ZWd5IHRvIGJlIG9uZSBvZiBbXCJxdWlja1wiLCBcInN0cmljdFwiLCBcImFsbFwiXScpO1xufVxudmFyIHN1cHBvcnRzJDcgPSB2b2lkIDA7XG4vLyBJbnRlcm5ldCBFeHBsb3JlciAxMSBjb25zaWRlcnMgZmllbGRzZXQsIHRhYmxlLCB0ZCBmb2N1c2FibGUsIGJ1dCBub3QgdGFiYmFibGVcbi8vIEludGVybmV0IEV4cGxvcmVyIDExIGNvbnNpZGVycyBib2R5IHRvIGhhdmUgW3RhYmluZGV4PTBdLCBidXQgZG9lcyBub3QgYWxsb3cgdGFiYmluZyB0byBpdFxudmFyIGZvY3VzYWJsZUVsZW1lbnRzUGF0dGVybiA9IC9eKGZpZWxkc2V0fHRhYmxlfHRkfGJvZHkpJC87XG5mdW5jdGlvbiBpc1RhYmJhYmxlUnVsZXMoKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBjb250ZXh0ID0gX3JlZi5jb250ZXh0LCBfcmVmJGV4Y2VwdCA9IF9yZWYuZXhjZXB0LCBleGNlcHQgPSBfcmVmJGV4Y2VwdCA9PT0gdW5kZWZpbmVkID8ge1xuICAgICAgICBmbGV4Ym94OiBmYWxzZSxcbiAgICAgICAgc2Nyb2xsYWJsZTogZmFsc2UsXG4gICAgICAgIHNoYWRvdzogZmFsc2UsXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBvbmx5VGFiYmFibGU6IGZhbHNlXG4gICAgfSA6IF9yZWYkZXhjZXB0O1xuICAgIGlmICghc3VwcG9ydHMkNykge1xuICAgICAgICBzdXBwb3J0cyQ3ID0gX3N1cHBvcnRzKCk7XG4gICAgfVxuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcImlzL3RhYmJhYmxlXCIsXG4gICAgICAgIHJlc29sdmVEb2N1bWVudDogdHJ1ZSxcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgIH0pO1xuICAgIGlmIChwbGF0Zm9ybS5pcy5CTElOSyAmJiBwbGF0Zm9ybS5pcy5BTkRST0lEICYmIHBsYXRmb3JtLm1ham9yVmVyc2lvbiA+IDQyKSB7XG4gICAgICAgIC8vIEV4dGVybmFsIGtleWJvYXJkIHN1cHBvcnQgd29ya2VkIGZpbmUgaW4gQ0hyb21lIDQyLCBidXQgc3RvcHBlZCB3b3JraW5nIGluIENocm9tZSA0NS5cbiAgICAgICAgLy8gVGhlIG9uLXNjcmVlbiBrZXlib2FyZCBkb2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvIGZvY3VzIHRoZSBuZXh0IGlucHV0IGVsZW1lbnQgKGxpa2UgaU9TIGRvZXMpLlxuICAgICAgICAvLyBUaGF0IGxlYXZlcyB1cyB3aXRoIG5vIG9wdGlvbiB0byBhZHZhbmNlIGZvY3VzIGJ5IGtleWJvYXJkLCBlcmdvIG5vdGhpbmcgaXMgdGFiYmFibGUgKGtleWJvYXJkIGZvY3VzYWJsZSkuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGZyYW1lRWxlbWVudCA9IGdldEZyYW1lRWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoZnJhbWVFbGVtZW50KSB7XG4gICAgICAgIGlmIChwbGF0Zm9ybS5pcy5XRUJLSVQgJiYgcGxhdGZvcm0uaXMuSU9TKSB7XG4gICAgICAgICAgICAvLyBpT1Mgb25seSBkb2VzIG5vdCBjb25zaWRlciBhbnl0aGluZyBmcm9tIGFub3RoZXIgYnJvd3NpbmcgY29udGV4dCBrZXlib2FyZCBmb2N1c2FibGVcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZnJhbWVbdGFiaW5kZXg9XCItMVwiXSBhbmQgb2JqZWN0W3RhYmluZGV4PVwiLTFcIl0gaW5oZXJpdCB0aGVcbiAgICAgICAgLy8gdGFiYmFibGUgZGVtb3Rpb24gb250byBlbGVtZW50cyBvZiB0aGVpciBicm93c2luZyBjb250ZXh0c1xuICAgICAgICBpZiAodGFiaW5kZXhWYWx1ZShmcmFtZUVsZW1lbnQpIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXhjZXB0LnZpc2libGUgJiYgKHBsYXRmb3JtLmlzLkJMSU5LIHx8IHBsYXRmb3JtLmlzLldFQktJVCkgJiYgIWlzVmlzaWJsZShmcmFtZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAvLyBCbGluayBhbmQgV2ViS2l0IGNvbnNpZGVyIGVsZW1lbnRzIGluIGhpZGRlbiBicm93c2luZyBjb250ZXh0cyBmb2N1c2FibGUsIGJ1dCBub3QgdGFiYmFibGVcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZWJraXQgYW5kIEJsaW5rIGRvbid0IGNvbnNpZGVyIGFueXRoaW5nIGluIDxvYmplY3Q+IHRhYmJhYmxlXG4gICAgICAgIC8vIEJsaW5rIGZpeGVkIHRoYXQgZml4ZWQgaW4gQ2hyb21lIDU0LCBPcGVyYSA0MVxuICAgICAgICB2YXIgZnJhbWVOb2RlTmFtZSA9IGZyYW1lRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoZnJhbWVOb2RlTmFtZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgdmFyIGlzRml4ZWRCbGluayA9IHBsYXRmb3JtLm5hbWUgPT09IFwiQ2hyb21lXCIgJiYgcGxhdGZvcm0ubWFqb3JWZXJzaW9uID49IDU0IHx8IHBsYXRmb3JtLm5hbWUgPT09IFwiT3BlcmFcIiAmJiBwbGF0Zm9ybS5tYWpvclZlcnNpb24gPj0gNDE7XG4gICAgICAgICAgICBpZiAocGxhdGZvcm0uaXMuV0VCS0lUIHx8IHBsYXRmb3JtLmlzLkJMSU5LICYmICFpc0ZpeGVkQmxpbmspIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBfdGFiaW5kZXggPSB0YWJpbmRleFZhbHVlKGVsZW1lbnQpO1xuICAgIHZhciB0YWJpbmRleCA9IF90YWJpbmRleCA9PT0gbnVsbCA/IG51bGwgOiBfdGFiaW5kZXggPj0gMDtcbiAgICBpZiAocGxhdGZvcm0uaXMuRURHRSAmJiBwbGF0Zm9ybS5tYWpvclZlcnNpb24gPj0gMTQgJiYgZnJhbWVFbGVtZW50ICYmIGVsZW1lbnQub3duZXJTVkdFbGVtZW50ICYmIF90YWJpbmRleCA8IDApIHtcbiAgICAgICAgLy8gRWRnZSAxNCsgY29uc2lkZXJzIDxhIHhsaW5rOmhyZWY9XCLigKZcIiB0YWJpbmRleD1cIi0xXCI+IGtleWJvYXJkIGZvY3VzYWJsZVxuICAgICAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyBpbiBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgaGFzVGFiYmFibGVUYWJpbmRleE9yTm9uZSA9IHRhYmluZGV4ICE9PSBmYWxzZTtcbiAgICB2YXIgaGFzVGFiYmFibGVUYWJpbmRleCA9IF90YWJpbmRleCAhPT0gbnVsbCAmJiBfdGFiaW5kZXggPj0gMDtcbiAgICAvLyBOT1RFOiBGaXJlZm94IDMxIGNvbnNpZGVycyBbY29udGVudGVkaXRhYmxlXSB0byBoYXZlIFt0YWJpbmRleD0tMV0sIGJ1dCBhbGxvd3MgdGFiYmluZyB0byBpdFxuICAgIC8vIGZpeGVkIGluIEZpcmVmb3ggNDAgdGhlIGxhdGVzdCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTExODU2NTdcbiAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikpIHtcbiAgICAgICAgLy8gdGFiYmluZyBjYW4gc3RpbGwgYmUgZGlzYWJsZWQgYnkgZXhwbGljaXRseSBwcm92aWRpbmcgW3RhYmluZGV4PVwiLTFcIl1cbiAgICAgICAgcmV0dXJuIGhhc1RhYmJhYmxlVGFiaW5kZXhPck5vbmU7XG4gICAgfVxuICAgIGlmIChmb2N1c2FibGVFbGVtZW50c1BhdHRlcm4udGVzdChub2RlTmFtZSkgJiYgdGFiaW5kZXggIT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocGxhdGZvcm0uaXMuV0VCS0lUICYmIHBsYXRmb3JtLmlzLklPUykge1xuICAgICAgICAvLyBpT1Mgb25seSBjb25zaWRlcnMgYSBoYW5kIGZ1bGwgb2YgZWxlbWVudHMgdGFiYmFibGUgKGtleWJvYXJkIGZvY3VzYWJsZSlcbiAgICAgICAgLy8gdGhpcyBob2xkcyB0cnVlIGV2ZW4gd2l0aCBleHRlcm5hbCBrZXlib2FyZHNcbiAgICAgICAgdmFyIHBvdGVudGlhbGx5VGFiYmFibGUgPSBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW1lbnQudHlwZSA9PT0gXCJ0ZXh0XCIgfHwgZWxlbWVudC50eXBlID09PSBcInBhc3N3b3JkXCIgfHwgbm9kZU5hbWUgPT09IFwic2VsZWN0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiB8fCBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKTtcbiAgICAgICAgaWYgKCFwb3RlbnRpYWxseVRhYmJhYmxlKSB7XG4gICAgICAgICAgICB2YXIgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTtcbiAgICAgICAgICAgIHBvdGVudGlhbGx5VGFiYmFibGUgPSBpc1VzZXJNb2RpZnlXcml0YWJsZShzdHlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwb3RlbnRpYWxseVRhYmJhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcInVzZVwiICYmIF90YWJpbmRleCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocGxhdGZvcm0uaXMuQkxJTksgfHwgcGxhdGZvcm0uaXMuV0VCS0lUICYmIHBsYXRmb3JtLm1ham9yVmVyc2lvbiA9PT0gOSkge1xuICAgICAgICAgICAgLy8gSW4gQ2hyb21lIGFuZCBTYWZhcmkgOSB0aGUgPHVzZT4gZWxlbWVudCBpcyBrZXlib2FyZCBmb2N1c2FibGUgZXZlbiBmb3IgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZWxlbWVudE1hdGNoZXMoZWxlbWVudCwgXCJzdmcgYVwiKSAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcInhsaW5rOmhyZWZcIikpIHtcbiAgICAgICAgaWYgKGhhc1RhYmJhYmxlVGFiaW5kZXhPck5vbmUpIHtcbiAgICAgICAgICAgIC8vIGluIFRyaWRlbnQgYW5kIEdlY2tvIFNWR0VsZW1lbnQgZG9lcyBub3QgaGFuZGxlIHRoZSB0YWJJbmRleCBwcm9wZXJ0eSBwcm9wZXJseVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQuZm9jdXMgJiYgIXN1cHBvcnRzJDcuZm9jdXNTdmdOZWdhdGl2ZVRhYmluZGV4QXR0cmlidXRlKSB7XG4gICAgICAgICAgICAvLyBGaXJlZm94IDUxIGFuZCA1MiB0cmVhdCBhbnkgbmF0aXZlbHkgdGFiYmFibGUgU1ZHIGVsZW1lbnQgd2l0aFxuICAgICAgICAgICAgLy8gdGFiaW5kZXg9XCItMVwiIGFzIHRhYmJhYmxlIGFuZCBldmVyeXRoaW5nIGVsc2UgYXMgaW5lcnRcbiAgICAgICAgICAgIC8vIHNlZSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzAyMzQwXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwic3ZnXCIgJiYgc3VwcG9ydHMkNy5mb2N1c1N2Z0luSWZyYW1lICYmIGhhc1RhYmJhYmxlVGFiaW5kZXhPck5vbmUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChwbGF0Zm9ybS5pcy5UUklERU5UIHx8IHBsYXRmb3JtLmlzLkVER0UpIHtcbiAgICAgICAgaWYgKG5vZGVOYW1lID09PSBcInN2Z1wiKSB7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydHMkNy5mb2N1c1N2Zykge1xuICAgICAgICAgICAgICAgIC8vIG9sZGVyIEludGVybmV0IEV4cGxvcmVycyBjb25zaWRlciA8c3ZnPiBrZXlib2FyZCBmb2N1c2FibGVcbiAgICAgICAgICAgICAgICAvLyB1bmxlc3MgdGhleSBoYXZlIGZvY3NhYmxlPVwiZmFsc2VcIiwgYnV0IHRoZW4gdGhleSB3b3VsZG4ndFxuICAgICAgICAgICAgICAgIC8vIGJlIGZvY3VzYWJsZSBhbmQgdGh1cyBub3QgZXZlbiByZWFjaCB0aGlzIGZpbHRlclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWxlbWVudHMgdGhhdCBoYXZlIFtmb2N1c2FibGVdIGFyZSBhdXRvbWF0aWNhbGx5IGtleWJvYXJkIGZvY3VzYWJsZSByZWdhcmRsZXNzIG9mIHRoZSBhdHRyaWJ1dGUncyB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiZm9jdXNhYmxlXCIpIHx8IGhhc1RhYmJhYmxlVGFiaW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQub3duZXJTVkdFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydHMkNy5mb2N1c1N2Z1RhYmluZGV4QXR0cmlidXRlICYmIGhhc1RhYmJhYmxlVGFiaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVsZW1lbnRzIHRoYXQgaGF2ZSBbZm9jdXNhYmxlXSBhcmUgYXV0b21hdGljYWxseSBrZXlib2FyZCBmb2N1c2FibGUgcmVnYXJkbGVzcyBvZiB0aGUgYXR0cmlidXRlJ3MgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImZvY3VzYWJsZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZWxlbWVudC50YWJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGV4Y2VwdC5vbmx5VGFiYmFibGUpO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwiYXVkaW9cIikge1xuICAgICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udHJvbHNcIikpIHtcbiAgICAgICAgICAgIC8vIEluIEludGVybmV0IEV4cGxvcmVyIHRoZSA8YXVkaW8+IGVsZW1lbnQgaXMgZm9jdXNhYmxlLCBidXQgbm90IHRhYmJhYmxlLCBhbmQgdGFiSW5kZXggcHJvcGVydHkgaXMgd3JvbmdcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybS5pcy5CTElOSykge1xuICAgICAgICAgICAgLy8gSW4gQ2hyb21lIDxhdWRpbyBjb250cm9scyB0YWJpbmRleD1cIi0xXCI+IHJlbWFpbnMga2V5Ym9hcmQgZm9jdXNhYmxlXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwidmlkZW9cIikge1xuICAgICAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udHJvbHNcIikpIHtcbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybS5pcy5UUklERU5UIHx8IHBsYXRmb3JtLmlzLkVER0UpIHtcbiAgICAgICAgICAgICAgICAvLyBJbiBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSB0aGUgPHZpZGVvPiBlbGVtZW50IGlzIGZvY3VzYWJsZSwgYnV0IG5vdCB0YWJiYWJsZSwgYW5kIHRhYkluZGV4IHByb3BlcnR5IGlzIHdyb25nXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3JtLmlzLkJMSU5LIHx8IHBsYXRmb3JtLmlzLkdFQ0tPKSB7XG4gICAgICAgICAgICAvLyBJbiBDaHJvbWUgYW5kIEZpcmVmb3ggPHZpZGVvIGNvbnRyb2xzIHRhYmluZGV4PVwiLTFcIj4gcmVtYWlucyBrZXlib2FyZCBmb2N1c2FibGVcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAocGxhdGZvcm0uaXMuQkxJTksgfHwgcGxhdGZvcm0uaXMuV0VCS0lUKSB7XG4gICAgICAgICAgICAvLyBJbiBhbGwgQmxpbmsgYW5kIFdlYktpdCBiYXNlZCBicm93c2VycyA8ZW1iZWQ+IGFuZCA8b2JqZWN0PiBhcmUgbmV2ZXIga2V5Ym9hcmQgZm9jdXNhYmxlLCBldmVuIHdpdGggdGFiaW5kZXg9XCIwXCIgc2V0XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcImlmcmFtZVwiKSB7XG4gICAgICAgIC8vIEluIEludGVybmV0IEV4cGxvcmVyIGFsbCBpZnJhbWVzIGFyZSBvbmx5IGZvY3VzYWJsZVxuICAgICAgICAvLyBJbiBXZWJLaXQsIEJsaW5rIGFuZCBHZWNrbyBpZnJhbWVzIG1heSBiZSB0YWJiYWJsZSBkZXBlbmRpbmcgb24gY29udGVudC5cbiAgICAgICAgLy8gU2luY2Ugd2UgY2FuJ3QgcmVsaWFibHkgaW52ZXN0aWdhdGUgaWZyYW1lIGRvY3VtZW50cyBiZWNhdXNlIG9mIHRoZVxuICAgICAgICAvLyBTYW1lT3JpZ2luUG9saWN5LCB3ZSdyZSBkZWNsYXJpbmcgZXZlcnl0aGluZyBvbmx5IGZvY3VzYWJsZS5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWV4Y2VwdC5zY3JvbGxhYmxlICYmIHBsYXRmb3JtLmlzLkdFQ0tPKSB7XG4gICAgICAgIC8vIEZpcmVmb3ggY29uc2lkZXJzIHNjcm9sbGFibGUgY29udGFpbmVycyBrZXlib2FyZCBmb2N1c2FibGUsXG4gICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZWlyIHRhYkluZGV4IHByb3BlcnR5IGlzIC0xXG4gICAgICAgIHZhciBfc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTtcbiAgICAgICAgaWYgKGhhc0Nzc092ZXJmbG93U2Nyb2xsKF9zdHlsZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBoYXNUYWJiYWJsZVRhYmluZGV4T3JOb25lO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwbGF0Zm9ybS5pcy5UUklERU5UIHx8IHBsYXRmb3JtLmlzLkVER0UpIHtcbiAgICAgICAgLy8gSUUgYW5kIEVkZ2UgZGVncmFkZSA8YXJlYT4gdG8gc2NyaXB0IGZvY3VzYWJsZSwgaWYgdGhlIGltYWdlXG4gICAgICAgIC8vIHVzaW5nIHRoZSA8bWFwPiBoYXMgYmVlbiBnaXZlbiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgaWYgKG5vZGVOYW1lID09PSBcImFyZWFcIikge1xuICAgICAgICAgICAgdmFyIGltZyA9IGdldEltYWdlT2ZBcmVhKGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGltZyAmJiB0YWJpbmRleFZhbHVlKGltZykgPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBfc3R5bGUyID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7XG4gICAgICAgIGlmIChpc1VzZXJNb2RpZnlXcml0YWJsZShfc3R5bGUyKSkge1xuICAgICAgICAgICAgLy8gcHJldmVudCBiZWluZyBzd2FsbG93ZWQgYnkgdGhlIG92ZXJ6ZWFsb3VzIGlzU2Nyb2xsYWJsZUNvbnRhaW5lcigpIGJlbG93XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC50YWJJbmRleCA+PSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXhjZXB0LmZsZXhib3ggJiYgaGFzQ3NzRGlzcGxheUZsZXgoX3N0eWxlMikpIHtcbiAgICAgICAgICAgIGlmIChfdGFiaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFzVGFiYmFibGVUYWJpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpc0ZvY3VzUmVsZXZhbnRXaXRob3V0RmxleGJveChlbGVtZW50KSAmJiBpc1RhYmJhYmxlV2l0aG91dEZsZXhib3goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSUUgY29uc2lkZXJzIHNjcm9sbGFibGUgY29udGFpbmVycyBzY3JpcHQgZm9jdXNhYmxlIG9ubHksXG4gICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZWlyIHRhYkluZGV4IHByb3BlcnR5IGlzIDBcbiAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZUNvbnRhaW5lcihlbGVtZW50LCBub2RlTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Tm9kZU5hbWUgPSBwYXJlbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHZhciBwYXJlbnRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCwgbnVsbCk7XG4gICAgICAgICAgICAvLyBJRSBjb25zaWRlcnMgc2Nyb2xsYWJsZSBib2RpZXMgc2NyaXB0IGZvY3VzYWJsZSBvbmx5LFxuICAgICAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZUNvbnRhaW5lcihwYXJlbnQsIG5vZGVOYW1lLCBwYXJlbnROb2RlTmFtZSwgcGFyZW50U3R5bGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hpbGRyZW4gb2YgZm9jdXNhYmxlIGVsZW1lbnRzIHdpdGggZGlzcGxheTpmbGV4IGFyZSBmb2N1c2FibGUgaW4gSUUxMC0xMSxcbiAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZWlyIHRhYkluZGV4IHByb3BlcnR5IHN1Z2dlc3RzIG90aGVyd2lzZVxuICAgICAgICAgICAgaWYgKGhhc0Nzc0Rpc3BsYXlGbGV4KHBhcmVudFN0eWxlKSkge1xuICAgICAgICAgICAgICAgIC8vIHZhbHVlIG9mIHRhYmluZGV4IHRha2VzIHByZWNlZGVuY2VcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFzVGFiYmFibGVUYWJpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvV0FJL1BGL2FyaWEtcHJhY3RpY2VzLyNmb2N1c190YWJpbmRleFxuICAgIHJldHVybiBlbGVtZW50LnRhYkluZGV4ID49IDA7XG59XG4vLyBiaW5kIGV4Y2VwdGlvbnMgdG8gYW4gaXRlcmF0b3IgY2FsbGJhY2tcbmlzVGFiYmFibGVSdWxlcy5leGNlcHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZXhjZXB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgaXNUYWJiYWJsZSA9IGZ1bmN0aW9uIGlzVGFiYmFibGUoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gaXNUYWJiYWJsZVJ1bGVzKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICBleGNlcHQ6IGV4Y2VwdFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGlzVGFiYmFibGUucnVsZXMgPSBpc1RhYmJhYmxlUnVsZXM7XG4gICAgcmV0dXJuIGlzVGFiYmFibGU7XG59O1xudmFyIGlzRm9jdXNSZWxldmFudFdpdGhvdXRGbGV4Ym94ID0gaXNGb2N1c1JlbGV2YW50LnJ1bGVzLmV4Y2VwdCh7XG4gICAgZmxleGJveDogdHJ1ZVxufSk7XG52YXIgaXNUYWJiYWJsZVdpdGhvdXRGbGV4Ym94ID0gaXNUYWJiYWJsZVJ1bGVzLmV4Y2VwdCh7XG4gICAgZmxleGJveDogdHJ1ZVxufSk7XG4vLyBwcm92aWRlIGlzVGFiYmFibGUoY29udGV4dCkgYXMgZGVmYXVsdCBpdGVyYXRvciBjYWxsYmFja1xudmFyIGlzVGFiYmFibGUgPSBpc1RhYmJhYmxlUnVsZXMuZXhjZXB0KHt9KTtcbmZ1bmN0aW9uIHF1ZXJ5VGFiYmFibGUoKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBjb250ZXh0ID0gX3JlZi5jb250ZXh0LCBpbmNsdWRlQ29udGV4dCA9IF9yZWYuaW5jbHVkZUNvbnRleHQsIGluY2x1ZGVPbmx5VGFiYmFibGUgPSBfcmVmLmluY2x1ZGVPbmx5VGFiYmFibGUsIHN0cmF0ZWd5ID0gX3JlZi5zdHJhdGVneTtcbiAgICB2YXIgX2lzVGFiYmFibGUgPSBpc1RhYmJhYmxlLnJ1bGVzLmV4Y2VwdCh7XG4gICAgICAgIG9ubHlUYWJiYWJsZTogaW5jbHVkZU9ubHlUYWJiYWJsZVxuICAgIH0pO1xuICAgIHJldHVybiBxdWVyeUZvY3VzYWJsZSh7XG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgIGluY2x1ZGVDb250ZXh0OiBpbmNsdWRlQ29udGV4dCxcbiAgICAgICAgaW5jbHVkZU9ubHlUYWJiYWJsZTogaW5jbHVkZU9ubHlUYWJiYWJsZSxcbiAgICAgICAgc3RyYXRlZ3k6IHN0cmF0ZWd5XG4gICAgfSkuZmlsdGVyKF9pc1RhYmJhYmxlKTtcbn1cbi8vIHNvcnRzIGEgbGlzdCBvZiBlbGVtZW50cyBhY2NvcmRpbmcgdG8gdGhlaXIgb3JkZXIgaW4gdGhlIERPTVxuZnVuY3Rpb24gY29tcGFyZURvbVBvc2l0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HID8gLTEgOiAxO1xufVxuZnVuY3Rpb24gc29ydERvbU9yZGVyKGVsZW1lbnRzKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRzLnNvcnQoY29tcGFyZURvbVBvc2l0aW9uKTtcbn1cbmZ1bmN0aW9uIGdldEZpcnN0U3VjY2Vzc29yT2Zmc2V0KGxpc3QsIHRhcmdldCkge1xuICAgIC8vIGZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBjb21lcyBBRlRFUiB0aGUgdGFyZ2V0IGVsZW1lbnRcbiAgICByZXR1cm4gZmluZEluZGV4KGxpc3QsIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlbGVtZW50KSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZmluZEluc2VydGlvbk9mZnNldHMobGlzdCwgZWxlbWVudHMsIHJlc29sdmVFbGVtZW50KSB7XG4gICAgLy8gaW5zdGVhZCBvZiBtdXRhdGluZyB0aGUgZWxlbWVudHMgbGlzdCBkaXJlY3RseSwgcmVtZW1iZXIgcG9zaXRpb24gYW5kIG1hcFxuICAgIC8vIHRvIGluamVjdCBsYXRlciwgd2hlbiB3ZSBjYW4gZG8gdGhpcyBtb3JlIGVmZmljaWVudGx5XG4gICAgdmFyIGluc2VydGlvbnMgPSBbXTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHJlcGxhY2UgPSB0cnVlO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gbGlzdC5pbmRleE9mKGVsZW1lbnQpO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gZWxlbWVudCBpcyBub3QgaW4gdGFyZ2V0IGxpc3RcbiAgICAgICAgICAgIG9mZnNldCA9IGdldEZpcnN0U3VjY2Vzc29yT2Zmc2V0KGxpc3QsIGVsZW1lbnQpO1xuICAgICAgICAgICAgcmVwbGFjZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBzdWNjZXNzb3IgaW4gdGhlIHRhYnNlcXVlbmNlLFxuICAgICAgICAgICAgLy8gbWVhbmluZyB0aGUgaW1hZ2UgbXVzdCBiZSB0aGUgbGFzdCBlbGVtZW50XG4gICAgICAgICAgICBvZmZzZXQgPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBhbGxvdyB0aGUgY29uc3VtZXIgdG8gcmVwbGFjZSB0aGUgaW5qZWN0ZWQgZWxlbWVudFxuICAgICAgICB2YXIgaW5qZWN0aW9ucyA9IG5vZGVBcnJheShyZXNvbHZlRWxlbWVudCA/IHJlc29sdmVFbGVtZW50KGVsZW1lbnQpIDogZWxlbWVudCk7XG4gICAgICAgIGlmICghaW5qZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIHdlIGNhbid0IGluamVjdCB6ZXJvIGVsZW1lbnRzXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICAgICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICAgICAgICAgIGVsZW1lbnRzOiBpbmplY3Rpb25zXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBpbnNlcnRpb25zO1xufVxuZnVuY3Rpb24gaW5zZXJ0RWxlbWVudHNBdE9mZnNldHMobGlzdCwgaW5zZXJ0aW9ucykge1xuICAgIC8vIHJlbWVtYmVyIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgd2UgaGF2ZSBhbHJlYWR5IGluamVjdGVkXG4gICAgLy8gc28gd2UgYWNjb3VudCBmb3IgdGhlIGNhdXNlZCBpbmRleCBvZmZzZXRcbiAgICB2YXIgaW5zZXJ0ZWQgPSAwO1xuICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHdlIGluc2VydCB0aGUgZWxlbWVudHMgaW4gc2VxdWVuY2UsXG4gICAgLy8gb3RoZXJ3aXNlIHRoZSBvZmZzZXQgY29tcGVuc2F0aW9uIHdvbid0IHdvcmtcbiAgICBpbnNlcnRpb25zLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgICByZXR1cm4gYS5vZmZzZXQgLSBiLm9mZnNldDtcbiAgICB9KTtcbiAgICBpbnNlcnRpb25zLmZvckVhY2goZnVuY3Rpb24oaW5zZXJ0aW9uKSB7XG4gICAgICAgIC8vIGFycmF5LnNwbGljZSBoYXMgYW4gYW5ub3lpbmcgZnVuY3Rpb24gc2lnbmF0dXJlIDooXG4gICAgICAgIHZhciByZW1vdmUgPSBpbnNlcnRpb24ucmVwbGFjZSA/IDEgOiAwO1xuICAgICAgICB2YXIgYXJncyA9IFtcbiAgICAgICAgICAgIGluc2VydGlvbi5vZmZzZXQgKyBpbnNlcnRlZCxcbiAgICAgICAgICAgIHJlbW92ZVxuICAgICAgICBdLmNvbmNhdChpbnNlcnRpb24uZWxlbWVudHMpO1xuICAgICAgICBsaXN0LnNwbGljZS5hcHBseShsaXN0LCBhcmdzKTtcbiAgICAgICAgaW5zZXJ0ZWQgKz0gaW5zZXJ0aW9uLmVsZW1lbnRzLmxlbmd0aCAtIHJlbW92ZTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIG1lcmdlSW5Eb21PcmRlcigpIHtcbiAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sIGxpc3QgPSBfcmVmLmxpc3QsIGVsZW1lbnRzID0gX3JlZi5lbGVtZW50cywgcmVzb2x2ZUVsZW1lbnQgPSBfcmVmLnJlc29sdmVFbGVtZW50O1xuICAgIC8vIG9wZXJhdGUgb24gYSBjb3B5IHNvIHdlIGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgYXJyYXlcbiAgICB2YXIgX2xpc3QgPSBsaXN0LnNsaWNlKDApO1xuICAgIC8vIG1ha2Ugc3VyZSB0aGUgZWxlbWVudHMgd2UncmUgaW5qZWN0aW5nIGFyZSBwcm92aWRlZCBpbiBET00gb3JkZXJcbiAgICB2YXIgX2VsZW1lbnRzID0gbm9kZUFycmF5KGVsZW1lbnRzKS5zbGljZSgwKTtcbiAgICBzb3J0RG9tT3JkZXIoX2VsZW1lbnRzKTtcbiAgICAvLyBmaW5kIHRoZSBvZmZzZXRzIHdpdGhpbiB0aGUgdGFyZ2V0IGFycmF5IChsaXN0KSBhdCB3aGljaCB0byBpbmplY3RcbiAgICAvLyBlYWNoIGluZGl2aWR1YWwgZWxlbWVudCAoZnJvbSBlbGVtZW50cylcbiAgICB2YXIgaW5zZXJ0aW9ucyA9IGZpbmRJbnNlcnRpb25PZmZzZXRzKF9saXN0LCBfZWxlbWVudHMsIHJlc29sdmVFbGVtZW50KTtcbiAgICAvLyBhY3R1YWxseSBpbmplY3QgdGhlIGVsZW1lbnRzIGludG8gdGhlIHRhcmdldCBhcnJheSBhdCB0aGUgaWRlbnRpZmllZCBwb3NpdGlvbnNcbiAgICBpbnNlcnRFbGVtZW50c0F0T2Zmc2V0cyhfbGlzdCwgaW5zZXJ0aW9ucyk7XG4gICAgcmV0dXJuIF9saXN0O1xufVxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgICAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgICAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICAgICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICAgIH07XG59KCk7XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICB9XG59XG52YXIgTWFwcyA9IGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIE1hcHMoY29udGV4dCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWFwcyk7XG4gICAgICAgIHRoaXMuX2RvY3VtZW50ID0gZ2V0RG9jdW1lbnQoY29udGV4dCk7XG4gICAgICAgIHRoaXMubWFwcyA9IHt9O1xuICAgIH1cbiAgICBfY3JlYXRlQ2xhc3MoTWFwcywgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZ2V0QXJlYXNGb3JcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBcmVhc0ZvcihuYW1lKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hcHNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG1hcCBpcyBub3QgZGVmaW5lZCB3aXRoaW4gdGhlIGNvbnRleHQsIHNvIHdlXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdG8gZ28gZmluZCBpdCBlbHNld2hlcmUgaW4gdGhlIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTWFwQnlOYW1lKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBzW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYWRkTWFwQnlOYW1lXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkTWFwQnlOYW1lKG5hbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWFwID0gZ2V0TWFwQnlOYW1lKG5hbWUsIHRoaXMuX2RvY3VtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hcCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBtYXAsIHRoZSBpbWdbdXNlbWFwXSB3YXNuJ3QgZG9pbmcgYW55dGhpbmcgYW55d2F5XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5tYXBzW21hcC5uYW1lXSA9IHF1ZXJ5VGFiYmFibGUoe1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBtYXBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImV4dHJhY3RBcmVhc0Zyb21MaXN0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXh0cmFjdEFyZWFzRnJvbUxpc3QoZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgYWxsIDxhcmVhPiBlbGVtZW50cyBmcm9tIHRoZSBlbGVtZW50cyBsaXN0LFxuICAgICAgICAgICAgICAgIC8vIGJ1dCBwdXQgdGhlbSB0aGUgbWFwIGZvciBsYXRlciByZXRyaWV2YWxcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU5hbWUgIT09IFwiYXJlYVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWFwc1ttYXAubmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwc1ttYXAubmFtZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcHNbbWFwLm5hbWVdLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF0pO1xuICAgIHJldHVybiBNYXBzO1xufSgpO1xuZnVuY3Rpb24gc29ydEFyZWEoZWxlbWVudHMsIGNvbnRleHQpIHtcbiAgICAvLyBpbWFnZXMgLSB1bmxlc3MgdGhleSBhcmUgZm9jdXNhYmxlIHRoZW1zZWx2ZXMsIGxpa2VseSBub3RcbiAgICAvLyBwYXJ0IG9mIHRoZSBlbGVtZW50cyBsaXN0LCBzbyB3ZSdsbCBoYXZlIHRvIGZpbmQgdGhlbSBhbmRcbiAgICAvLyBzb3J0IHRoZW0gaW50byB0aGUgZWxlbWVudHMgbGlzdCBtYW51YWxseVxuICAgIHZhciB1c2VtYXBzID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKFwiaW1nW3VzZW1hcF1cIik7XG4gICAgdmFyIG1hcHMgPSBuZXcgTWFwcyhjb250ZXh0KTtcbiAgICAvLyByZW1vdmUgYWxsIDxhcmVhPiBlbGVtZW50cyBmcm9tIHRoZSBlbGVtZW50cyBsaXN0LFxuICAgIC8vIGJ1dCBwdXQgdGhlbSB0aGUgbWFwIGZvciBsYXRlciByZXRyaWV2YWxcbiAgICB2YXIgX2VsZW1lbnRzID0gbWFwcy5leHRyYWN0QXJlYXNGcm9tTGlzdChlbGVtZW50cyk7XG4gICAgaWYgKCF1c2VtYXBzLmxlbmd0aCkge1xuICAgICAgICAvLyB0aGUgY29udGV4dCBkb2VzIG5vdCBjb250YWluIGFueSA8YXJlYT5zIHNvIG5vIG5lZWRcbiAgICAgICAgLy8gdG8gcmVwbGFjZSBhbnl0aGluZywganVzdCByZW1vdmUgYW55IG1hcHNcbiAgICAgICAgcmV0dXJuIF9lbGVtZW50cztcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlSW5Eb21PcmRlcih7XG4gICAgICAgIGxpc3Q6IF9lbGVtZW50cyxcbiAgICAgICAgZWxlbWVudHM6IHVzZW1hcHMsXG4gICAgICAgIHJlc29sdmVFbGVtZW50OiBmdW5jdGlvbiByZXNvbHZlRWxlbWVudChpbWFnZSkge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBpbWFnZS5nZXRBdHRyaWJ1dGUoXCJ1c2VtYXBcIikuc2xpY2UoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWFwcy5nZXRBcmVhc0ZvcihuYW1lKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxudmFyIF9jcmVhdGVDbGFzcyQxID0gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24oQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgICAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gICAgfTtcbn0oKTtcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayQxKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxudmFyIFNoYWRvd3MgPSBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBTaGFkb3dzKGNvbnRleHQsIHNvcnRFbGVtZW50cykge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2skMSh0aGlzLCBTaGFkb3dzKTtcbiAgICAgICAgLy8gZG9jdW1lbnQgY29udGV4dCB3ZSdyZSB3b3JraW5nIHdpdGhcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgLy8gY2FsbGJhY2sgdGhhdCBzb3J0cyBhbiBhcnJheSBvZiBlbGVtZW50c1xuICAgICAgICB0aGlzLnNvcnRFbGVtZW50cyA9IHNvcnRFbGVtZW50cztcbiAgICAgICAgLy8gcmVmZXJlbmNlIHRvIGNyZWF0ZSB1bmlxdWUgSURzIGZvciBlYWNoIFNoYWRvd0hvc3RcbiAgICAgICAgdGhpcy5ob3N0Q291bnRlciA9IDE7XG4gICAgICAgIC8vIHJlZmVyZW5jZSBtYXAgZm9yIGNoaWxkLVNoYWRvd0hvc3RzIG9mIGEgU2hhZG93SG9zdFxuICAgICAgICB0aGlzLmluSG9zdCA9IHt9O1xuICAgICAgICAvLyByZWZlcmVuY2UgbWFwIGZvciBjaGlsZC1TaGFkb3dIb3N0IG9mIHRoZSBkb2N1bWVudFxuICAgICAgICB0aGlzLmluRG9jdW1lbnQgPSBbXTtcbiAgICAgICAgLy8gcmVmZXJlbmNlIG1hcCBmb3IgU2hhZG93SG9zdHNcbiAgICAgICAgdGhpcy5ob3N0cyA9IHt9O1xuICAgICAgICAvLyByZWZlcmVuY2UgbWFwIGZvciB0YWJiYWJsZSBlbGVtZW50cyBvZiBhIFNoYWRvd0hvc3RcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHt9O1xuICAgIH1cbiAgICAvLyByZW1lbWJlciB3aGljaCBob3N0cyB3ZSBoYXZlIHRvIHNvcnQgd2l0aGluIGxhdGVyXG4gICAgX2NyZWF0ZUNsYXNzJDEoU2hhZG93cywgW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiX3JlZ2lzdGVySG9zdFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9yZWdpc3Rlckhvc3QoaG9zdCkge1xuICAgICAgICAgICAgICAgIGlmIChob3N0Ll9zb3J0aW5nSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBtYWtlIHRoZSBTaGFkb3dIb3N0IGlkZW50aWZpYWJsZSAoc2VlIGNsZWFudXAoKSBmb3IgdW5kbylcbiAgICAgICAgICAgICAgICBob3N0Ll9zb3J0aW5nSWQgPSBcInNoYWRvdy1cIiArIHRoaXMuaG9zdENvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3RzW2hvc3QuX3NvcnRpbmdJZF0gPSBob3N0O1xuICAgICAgICAgICAgICAgIC8vIGhvc3RzIG1heSBjb250YWluIG90aGVyIGhvc3RzXG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudEhvc3QgPSBnZXRTaGFkb3dIb3N0KHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogaG9zdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRIb3N0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVySG9zdChwYXJlbnRIb3N0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJIb3N0UGFyZW50KGhvc3QsIHBhcmVudEhvc3QpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5Eb2N1bWVudC5wdXNoKGhvc3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcIl9yZWdpc3Rlckhvc3RQYXJlbnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVnaXN0ZXJIb3N0UGFyZW50KGhvc3QsIHBhcmVudCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbkhvc3RbcGFyZW50Ll9zb3J0aW5nSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5Ib3N0W3BhcmVudC5fc29ydGluZ0lkXSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmluSG9zdFtwYXJlbnQuX3NvcnRpbmdJZF0ucHVzaChob3N0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcIl9yZWdpc3RlckVsZW1lbnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVnaXN0ZXJFbGVtZW50KGVsZW1lbnQsIGhvc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZWxlbWVudHNbaG9zdC5fc29ydGluZ0lkXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzW2hvc3QuX3NvcnRpbmdJZF0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tob3N0Ll9zb3J0aW5nSWRdLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJleHRyYWN0RWxlbWVudHNcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBleHRyYWN0RWxlbWVudHMoZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhvc3QgPSBnZXRTaGFkb3dIb3N0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaG9zdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJIb3N0KGhvc3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3RlckVsZW1lbnQoZWxlbWVudCwgaG9zdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcInNvcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzb3J0KGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9lbGVtZW50cyA9IHRoaXMuX2luamVjdEhvc3RzKGVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICBfZWxlbWVudHMgPSB0aGlzLl9yZXBsYWNlSG9zdHMoX2VsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9lbGVtZW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcIl9pbmplY3RIb3N0c1wiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pbmplY3RIb3N0cyhlbGVtZW50cykge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuaG9zdHMpLmZvckVhY2goZnVuY3Rpb24oX3NvcnRpbmdJZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2xpc3QgPSB0aGlzLmVsZW1lbnRzW19zb3J0aW5nSWRdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2VsZW1lbnRzID0gdGhpcy5pbkhvc3RbX3NvcnRpbmdJZF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBfY29udGV4dCA9IHRoaXMuaG9zdHNbX3NvcnRpbmdJZF0uc2hhZG93Um9vdDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tfc29ydGluZ0lkXSA9IHRoaXMuX21lcmdlKF9saXN0LCBfZWxlbWVudHMsIF9jb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVyZ2UoZWxlbWVudHMsIHRoaXMuaW5Eb2N1bWVudCwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcIl9tZXJnZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9tZXJnZShsaXN0LCBlbGVtZW50cywgY29udGV4dCkge1xuICAgICAgICAgICAgICAgIHZhciBtZXJnZWQgPSBtZXJnZUluRG9tT3JkZXIoe1xuICAgICAgICAgICAgICAgICAgICBsaXN0OiBsaXN0LFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50czogZWxlbWVudHNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zb3J0RWxlbWVudHMobWVyZ2VkLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcIl9yZXBsYWNlSG9zdHNcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVwbGFjZUhvc3RzKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlSW5Eb21PcmRlcih7XG4gICAgICAgICAgICAgICAgICAgIGxpc3Q6IGVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50czogdGhpcy5pbkRvY3VtZW50LFxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlRWxlbWVudDogdGhpcy5fcmVzb2x2ZUhvc3RFbGVtZW50LmJpbmQodGhpcylcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcIl9yZXNvbHZlSG9zdEVsZW1lbnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVzb2x2ZUhvc3RFbGVtZW50KGhvc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWVyZ2VkID0gbWVyZ2VJbkRvbU9yZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdDogdGhpcy5lbGVtZW50c1tob3N0Ll9zb3J0aW5nSWRdLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50czogdGhpcy5pbkhvc3RbaG9zdC5fc29ydGluZ0lkXSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUVsZW1lbnQ6IHRoaXMuX3Jlc29sdmVIb3N0RWxlbWVudC5iaW5kKHRoaXMpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdmFyIF90YWJpbmRleCA9IHRhYmluZGV4VmFsdWUoaG9zdCk7XG4gICAgICAgICAgICAgICAgaWYgKF90YWJpbmRleCAhPT0gbnVsbCAmJiBfdGFiaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgICAgICAgICBdLmNvbmNhdChtZXJnZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiX2NsZWFudXBcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfY2xlYW51cCgpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhvc2UgaWRlbnRpZmVycyB3ZSBwdXQgb24gdGhlIFNoYWRvd0hvc3QgdG8gYXZvaWQgdXNpbmcgTWFwKClcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmhvc3RzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ob3N0c1trZXldLl9zb3J0aW5nSWQ7XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gU2hhZG93cztcbn0oKTtcbmZ1bmN0aW9uIHNvcnRTaGFkb3dlZChlbGVtZW50cywgY29udGV4dCwgc29ydEVsZW1lbnRzKSB7XG4gICAgdmFyIHNoYWRvd3MgPSBuZXcgU2hhZG93cyhjb250ZXh0LCBzb3J0RWxlbWVudHMpO1xuICAgIHZhciBfZWxlbWVudHMgPSBzaGFkb3dzLmV4dHJhY3RFbGVtZW50cyhlbGVtZW50cyk7XG4gICAgaWYgKF9lbGVtZW50cy5sZW5ndGggPT09IGVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBubyBzaGFkb3dlZCBjb250ZW50IGZvdW5kLCBubyBuZWVkIHRvIGNvbnRpbnVlXG4gICAgICAgIHJldHVybiBzb3J0RWxlbWVudHMoZWxlbWVudHMpO1xuICAgIH1cbiAgICByZXR1cm4gc2hhZG93cy5zb3J0KF9lbGVtZW50cyk7XG59XG5mdW5jdGlvbiBzb3J0VGFiaW5kZXgoZWxlbWVudHMpIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQudGFiSW5kZXhcbiAgICAvLyBlbGVtZW50cyB3aXRoIHRhYkluZGV4IFwiMFwiIChpbmNsdWRpbmcgdGFiYmFibGVFbGVtZW50cyB3aXRob3V0IHRhYkluZGV4KSBzaG91bGQgYmUgbmF2aWdhdGVkIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhci5cbiAgICAvLyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpdmUgdGFiSW5kZXg6XG4gICAgLy8gICBFbGVtZW50cyB0aGF0IGhhdmUgaWRlbnRpY2FsIHRhYkluZGV4ZXMgc2hvdWxkIGJlIG5hdmlnYXRlZCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIuXG4gICAgLy8gICBOYXZpZ2F0aW9uIHByb2NlZWRzIGZyb20gdGhlIGxvd2VzdCB0YWJJbmRleCB0byB0aGUgaGlnaGVzdCB0YWJJbmRleC5cbiAgICAvLyBOT1RFOiBzb3J0IGltcGxlbWVudGF0aW9uIG1heSBiZSB1bnN0YWJsZSBhbmQgdGh1cyBtZXNzIHVwIERPTSBvcmRlcixcbiAgICAvLyB0aGF0J3Mgd2h5IHdlIGJ1aWxkIGEgbWFwIHRoYXQncyBiZWluZyBzb3J0ZWQgaW5zdGVhZC4gSWYgd2Ugd2VyZSBhYmxlIHRvIHJlbHlcbiAgICAvLyBvbiBhIHN0YWJsZSBzb3J0aW5nIGFsZ29yaXRobSwgc29ydFRhYmluZGV4KCkgY291bGQgYmUgYXMgc2ltcGxlIGFzXG4gICAgLy8gZWxlbWVudHMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhLnRhYkluZGV4IC0gYi50YWJJbmRleDsgfSk7XG4gICAgLy8gYXQgdGhpcyB0aW1lIENocm9tZSBkb2VzIG5vdCB1c2UgYSBzdGFibGUgc29ydGluZyBhbGdvcml0aG1cbiAgICAvLyBzZWUgaHR0cDovL2Jsb2cucm9kbmV5cmVobS5kZS9hcmNoaXZlcy8xNC1Tb3J0aW5nLVdlcmUtRG9pbmctSXQtV3JvbmcuaHRtbCNzdGFiaWxpdHlcbiAgICAvLyBOT1RFOiBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiBzZWVtZWQgbGlrZSBtb3JlIG92ZXJoZWFkIHRoYW4ganVzdCBzb3J0aW5nIHRoaXMgd2l0aCBidWNrZXRzXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL05vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb25cbiAgICB2YXIgbWFwID0ge307XG4gICAgdmFyIGluZGV4ZXMgPSBbXTtcbiAgICB2YXIgbm9ybWFsID0gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgLy8gaW4gVHJpZGVudCBhbmQgR2Vja28gU1ZHRWxlbWVudCBkb2VzIG5vdCBrbm93IGFib3V0IHRoZSB0YWJJbmRleCBwcm9wZXJ0eVxuICAgICAgICB2YXIgdGFiSW5kZXggPSBlbGVtZW50LnRhYkluZGV4O1xuICAgICAgICBpZiAodGFiSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGFiSW5kZXggPSB0YWJpbmRleFZhbHVlKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4dHJhY3QgZWxlbWVudHMgdGhhdCBkb24ndCBuZWVkIHNvcnRpbmdcbiAgICAgICAgaWYgKHRhYkluZGV4IDw9IDAgfHwgdGFiSW5kZXggPT09IG51bGwgfHwgdGFiSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXBbdGFiSW5kZXhdKSB7XG4gICAgICAgICAgICAvLyBjcmVhdGUgc29ydGFibGUgYnVja2V0IGZvciBkb20tb3JkZXItcHJlc2VydmF0aW9uIG9mIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgdGFiSW5kZXhcbiAgICAgICAgICAgIG1hcFt0YWJJbmRleF0gPSBbXTtcbiAgICAgICAgICAgIC8vIG1haW50YWluIGEgbGlzdCBvZiB1bmlxdWUgdGFiSW5kZXhlc1xuICAgICAgICAgICAgaW5kZXhlcy5wdXNoKHRhYkluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzb3J0IGVsZW1lbnQgaW50byB0aGUgcHJvcGVyIGJ1Y2tldFxuICAgICAgICBtYXBbdGFiSW5kZXhdLnB1c2goZWxlbWVudCk7XG4gICAgICAgIC8vIGVsZW1lbnQgbW92ZWQgdG8gc29ydGluZyBtYXAsIHNvIG5vdCBcIm5vcm1hbFwiIGFueW1vcmVcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIC8vIHNvcnQgdGhlIHRhYmluZGV4IGFzY2VuZGluZyxcbiAgICAvLyB0aGVuIHJlc29sdmUgdGhlbSB0byB0aGVpciBhcHByb3ByaWF0ZSBidWNrZXRzLFxuICAgIC8vIHRoZW4gZmxhdHRlbiB0aGUgYXJyYXkgb2YgYXJyYXlzIHRvIGFuIGFycmF5XG4gICAgdmFyIF9lbGVtZW50cyA9IGluZGV4ZXMuc29ydCgpLm1hcChmdW5jdGlvbih0YWJJbmRleCkge1xuICAgICAgICByZXR1cm4gbWFwW3RhYkluZGV4XTtcbiAgICB9KS5yZWR1Y2VSaWdodChmdW5jdGlvbihwcmV2aW91cywgY3VycmVudCkge1xuICAgICAgICByZXR1cm4gY3VycmVudC5jb25jYXQocHJldmlvdXMpO1xuICAgIH0sIG5vcm1hbCk7XG4gICAgcmV0dXJuIF9lbGVtZW50cztcbn1cbnZhciBzdXBwb3J0cyQ4ID0gdm9pZCAwO1xuZnVuY3Rpb24gbW92ZUNvbnRleHRUb0JlZ2lubmluZyhlbGVtZW50cywgY29udGV4dCkge1xuICAgIHZhciBwb3MgPSBlbGVtZW50cy5pbmRleE9mKGNvbnRleHQpO1xuICAgIGlmIChwb3MgPiAwKSB7XG4gICAgICAgIHZhciB0bXAgPSBlbGVtZW50cy5zcGxpY2UocG9zLCAxKTtcbiAgICAgICAgcmV0dXJuIHRtcC5jb25jYXQoZWxlbWVudHMpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudHM7XG59XG5mdW5jdGlvbiBzb3J0RWxlbWVudHMoZWxlbWVudHMsIF9jb250ZXh0KSB7XG4gICAgaWYgKHN1cHBvcnRzJDgudGFic2VxdWVuY2VBcmVhQXRJbWdQb3NpdGlvbikge1xuICAgICAgICAvLyBTb21lIGJyb3dzZXJzIHNvcnQgPGFyZWE+IGluIERPTSBvcmRlciwgc29tZSBwbGFjZSB0aGUgPGFyZWE+c1xuICAgICAgICAvLyB3aGVyZSB0aGUgPGltZz4gcmVmZXJlY2luZyB0aGVtIHdvdWxkJ3ZlIGJlZW4gaW4gRE9NIG9yZGVyLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzVcbiAgICAgICAgZWxlbWVudHMgPSBzb3J0QXJlYShlbGVtZW50cywgX2NvbnRleHQpO1xuICAgIH1cbiAgICBlbGVtZW50cyA9IHNvcnRUYWJpbmRleChlbGVtZW50cyk7XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xufVxuZnVuY3Rpb24gcXVlcnlUYWJzZXF1ZW5jZSgpIHtcbiAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sIGNvbnRleHQgPSBfcmVmLmNvbnRleHQsIGluY2x1ZGVDb250ZXh0ID0gX3JlZi5pbmNsdWRlQ29udGV4dCwgaW5jbHVkZU9ubHlUYWJiYWJsZSA9IF9yZWYuaW5jbHVkZU9ubHlUYWJiYWJsZSwgc3RyYXRlZ3kgPSBfcmVmLnN0cmF0ZWd5O1xuICAgIGlmICghc3VwcG9ydHMkOCkge1xuICAgICAgICBzdXBwb3J0cyQ4ID0gX3N1cHBvcnRzKCk7XG4gICAgfVxuICAgIHZhciBfY29udGV4dCA9IG5vZGVBcnJheShjb250ZXh0KVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdmFyIGVsZW1lbnRzID0gcXVlcnlUYWJiYWJsZSh7XG4gICAgICAgIGNvbnRleHQ6IF9jb250ZXh0LFxuICAgICAgICBpbmNsdWRlQ29udGV4dDogaW5jbHVkZUNvbnRleHQsXG4gICAgICAgIGluY2x1ZGVPbmx5VGFiYmFibGU6IGluY2x1ZGVPbmx5VGFiYmFibGUsXG4gICAgICAgIHN0cmF0ZWd5OiBzdHJhdGVneVxuICAgIH0pO1xuICAgIGlmIChkb2N1bWVudC5ib2R5LmNyZWF0ZVNoYWRvd1Jvb3QgJiYgcGxhdGZvcm0uaXMuQkxJTkspIHtcbiAgICAgICAgLy8gc29ydCB0YWJpbmRleCBsb2NhbGl6ZWQgdG8gc2hhZG93IGRvbVxuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9hbGx5LmpzL2lzc3Vlcy82XG4gICAgICAgIGVsZW1lbnRzID0gc29ydFNoYWRvd2VkKGVsZW1lbnRzLCBfY29udGV4dCwgc29ydEVsZW1lbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50cyA9IHNvcnRFbGVtZW50cyhlbGVtZW50cywgX2NvbnRleHQpO1xuICAgIH1cbiAgICBpZiAoaW5jbHVkZUNvbnRleHQpIHtcbiAgICAgICAgLy8gaWYgd2UgaW5jbHVkZSB0aGUgY29udGV4dCBpdHNlbGYsIGl0IGhhcyB0byBiZSB0aGUgZmlyc3RcbiAgICAgICAgLy8gZWxlbWVudCBvZiB0aGUgc2VxdWVuY2VcbiAgICAgICAgZWxlbWVudHMgPSBtb3ZlQ29udGV4dFRvQmVnaW5uaW5nKGVsZW1lbnRzLCBfY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50cztcbn1cbi8vIGNvZGVzIG1vc3RseSBjbG9uZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20va2VpdGhhbXVzL2p3ZXJ0eS9ibG9iL21hc3Rlci9qd2VydHkuanNcbi8vIGRlbGliZXJhdGVseSBub3QgZXhwb3NpbmcgY2hhcmFjdGVycyBsaWtlIDwsLi0jKiBiZWNhdXNlIHRoZXkgdmFyeSAqd2lsZGx5KlxuLy8gYWNyb3NzIGtleWJvYXJkIGxheW91dHMgYW5kIG1heSBjYXVzZSB2YXJpb3VzIHByb2JsZW1zXG4vLyAoZS5nLiBcIipcIiBpcyBcIlNoaWZ0ICtcIiBvbiBhIEdlcm1hbiBNYWMga2V5Ym9hcmQpXG4vLyAoZS5nLiBcIkBcIiBpcyBcIkFsdCBMXCIgb24gYSBHZXJtYW4gTWFjIGtleWJvYXJkKVxudmFyIGtleWNvZGUgPSB7XG4gICAgLy8gRWxlbWVudCBGb2N1c1xuICAgIHRhYjogOSxcbiAgICAvLyBOYXZpZ2F0aW9uXG4gICAgbGVmdDogMzcsXG4gICAgdXA6IDM4LFxuICAgIHJpZ2h0OiAzOSxcbiAgICBkb3duOiA0MCxcbiAgICBwYWdlVXA6IDMzLFxuICAgIFwicGFnZS11cFwiOiAzMyxcbiAgICBwYWdlRG93bjogMzQsXG4gICAgXCJwYWdlLWRvd25cIjogMzQsXG4gICAgZW5kOiAzNSxcbiAgICBob21lOiAzNixcbiAgICAvLyBBY3Rpb25cbiAgICBlbnRlcjogMTMsXG4gICAgZXNjYXBlOiAyNyxcbiAgICBzcGFjZTogMzIsXG4gICAgLy8gTW9kaWZpZXJcbiAgICBzaGlmdDogMTYsXG4gICAgY2Fwc0xvY2s6IDIwLFxuICAgIFwiY2Fwcy1sb2NrXCI6IDIwLFxuICAgIGN0cmw6IDE3LFxuICAgIGFsdDogMTgsXG4gICAgbWV0YTogOTEsXG4gICAgLy8gaW4gZmlyZWZveDogMjI0XG4gICAgLy8gb24gbWFjIChjaHJvbWUpOiBtZXRhLWxlZnQ9OTEsIG1ldGEtcmlnaHQ9OTNcbiAgICAvLyBvbiB3aW4gKElFMTEpOiBtZXRhLWxlZnQ9OTEsIG1ldGEtcmlnaHQ9OTJcbiAgICBwYXVzZTogMTksXG4gICAgLy8gQ29udGVudCBNYW5pcHVsYXRpb25cbiAgICBpbnNlcnQ6IDQ1LFxuICAgIGRlbGV0ZTogNDYsXG4gICAgYmFja3NwYWNlOiA4LFxuICAgIC8vIHRoZSBzYW1lIGxvZ2ljYWwga2V5IG1heSBiZSBpZGVudGlmaWVkIHRocm91Z2ggZGlmZmVyZW50IGtleUNvZGVzXG4gICAgX2FsaWFzOiB7XG4gICAgICAgIDkxOiBbXG4gICAgICAgICAgICA5MixcbiAgICAgICAgICAgIDkzLFxuICAgICAgICAgICAgMjI0XG4gICAgICAgIF1cbiAgICB9XG59O1xuLy8gRnVuY3Rpb24ga2V5cyAoMTEyIC0gMTM3KVxuLy8gTk9URTogbm90IGV2ZXJ5IGtleWJvYXJkIGtub3dzIEYxMytcbmZvcih2YXIgbiA9IDE7IG4gPCAyNjsgbisrKXtcbiAgICBrZXljb2RlW1wiZlwiICsgbl0gPSBuICsgMTExO1xufVxuLy8gTnVtYmVyIGtleXMgKDQ4LTU3LCBudW1wYWQgOTYtMTA1KVxuLy8gTk9URTogbm90IGV2ZXJ5IGtleWJvYXJkIGtub3dzIG51bS0wK1xuZm9yKHZhciBfbiA9IDA7IF9uIDwgMTA7IF9uKyspe1xuICAgIHZhciBjb2RlID0gX24gKyA0ODtcbiAgICB2YXIgbnVtQ29kZSA9IF9uICsgOTY7XG4gICAga2V5Y29kZVtfbl0gPSBjb2RlO1xuICAgIGtleWNvZGVbXCJudW0tXCIgKyBfbl0gPSBudW1Db2RlO1xuICAgIGtleWNvZGUuX2FsaWFzW2NvZGVdID0gW1xuICAgICAgICBudW1Db2RlXG4gICAgXTtcbn1cbi8vIExhdGluIGNoYXJhY3RlcnMgKDY1IC0gOTApXG5mb3IodmFyIF9uMiA9IDA7IF9uMiA8IDI2OyBfbjIrKyl7XG4gICAgdmFyIF9jb2RlID0gX24yICsgNjU7XG4gICAgdmFyIG5hbWUkMSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoX2NvZGUpLnRvTG93ZXJDYXNlKCk7XG4gICAga2V5Y29kZVtuYW1lJDFdID0gX2NvZGU7XG59XG52YXIgbW9kaWZpZXIgPSB7XG4gICAgYWx0OiBcImFsdEtleVwiLFxuICAgIGN0cmw6IFwiY3RybEtleVwiLFxuICAgIG1ldGE6IFwibWV0YUtleVwiLFxuICAgIHNoaWZ0OiBcInNoaWZ0S2V5XCJcbn07XG52YXIgbW9kaWZpZXJTZXF1ZW5jZSA9IE9iamVjdC5rZXlzKG1vZGlmaWVyKS5tYXAoZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiBtb2RpZmllcltuYW1lXTtcbn0pO1xuZnVuY3Rpb24gY3JlYXRlRXhwZWN0ZWRNb2RpZmllcnMoaWdub3JlTW9kaWZpZXJzKSB7XG4gICAgdmFyIHZhbHVlID0gaWdub3JlTW9kaWZpZXJzID8gbnVsbCA6IGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFsdEtleTogdmFsdWUsXG4gICAgICAgIGN0cmxLZXk6IHZhbHVlLFxuICAgICAgICBtZXRhS2V5OiB2YWx1ZSxcbiAgICAgICAgc2hpZnRLZXk6IHZhbHVlXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gICAgdmFyIGlnbm9yZU1vZGlmaWVycyA9IG1vZGlmaWVycy5pbmRleE9mKFwiKlwiKSAhPT0gLTE7XG4gICAgdmFyIGV4cGVjdGVkID0gY3JlYXRlRXhwZWN0ZWRNb2RpZmllcnMoaWdub3JlTW9kaWZpZXJzKTtcbiAgICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbih0b2tlbikge1xuICAgICAgICBpZiAodG9rZW4gPT09IFwiKlwiKSB7XG4gICAgICAgICAgICAvLyB3ZSd2ZSBhbHJlYWR5IGNvdmVyZWQgdGhlIGFsbC1pbiBvcGVyYXRvclxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlIHdhbnQgdGhlIG1vZGlmaWVyIHByZXNzZWRcbiAgICAgICAgdmFyIHZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdmFyIG9wZXJhdG9yID0gdG9rZW4uc2xpY2UoMCwgMSk7XG4gICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIC8vIHdlIGRvbid0IGNhcmUgaWYgdGhlIG1vZGlmaWVyIGlzIHByZXNzZWRcbiAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gXCIhXCIpIHtcbiAgICAgICAgICAgIC8vIHdlIGRvIG5vdCB3YW50IHRoZSBtb2RpZmllciBwcmVzc2VkXG4gICAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy8gY29tcGVuc2F0ZSBmb3IgdGhlIG1vZGlmaWVyJ3Mgb3BlcmF0b3JcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW4uc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IG1vZGlmaWVyW3Rva2VuXTtcbiAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gbW9kaWZpZXIgXCInICsgdG9rZW4gKyAnXCInKTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3RlZFtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGV4cGVjdGVkO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUtleShrZXkpIHtcbiAgICB2YXIgY29kZSA9IGtleWNvZGVba2V5XSB8fCBwYXJzZUludChrZXksIDEwKTtcbiAgICBpZiAoIWNvZGUgfHwgdHlwZW9mIGNvZGUgIT09IFwibnVtYmVyXCIgfHwgaXNOYU4oY29kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBrZXkgXCInICsga2V5ICsgJ1wiJyk7XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAgIGNvZGVcbiAgICBdLmNvbmNhdChrZXljb2RlLl9hbGlhc1tjb2RlXSB8fCBbXSk7XG59XG5mdW5jdGlvbiBtYXRjaE1vZGlmaWVycyhleHBlY3RlZCwgZXZlbnQpIHtcbiAgICAvLyByZXR1cm5zIHRydWUgb24gbWF0Y2hcbiAgICByZXR1cm4gIW1vZGlmaWVyU2VxdWVuY2Uuc29tZShmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgIC8vIHJldHVybnMgdHJ1ZSBvbiBtaXNtYXRjaFxuICAgICAgICByZXR1cm4gdHlwZW9mIGV4cGVjdGVkW3Byb3BdID09PSBcImJvb2xlYW5cIiAmJiBCb29sZWFuKGV2ZW50W3Byb3BdKSAhPT0gZXhwZWN0ZWRbcHJvcF07XG4gICAgfSk7XG59XG5mdW5jdGlvbiBrZXlCaW5kaW5nKHRleHQpIHtcbiAgICByZXR1cm4gdGV4dC5zcGxpdCgvXFxzKy8pLm1hcChmdW5jdGlvbihfdGV4dCkge1xuICAgICAgICB2YXIgdG9rZW5zID0gX3RleHQuc3BsaXQoXCIrXCIpO1xuICAgICAgICB2YXIgX21vZGlmaWVycyA9IHJlc29sdmVNb2RpZmllcnModG9rZW5zLnNsaWNlKDAsIC0xKSk7XG4gICAgICAgIHZhciBfa2V5Q29kZXMgPSByZXNvbHZlS2V5KHRva2Vucy5zbGljZSgtMSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5Q29kZXM6IF9rZXlDb2RlcyxcbiAgICAgICAgICAgIG1vZGlmaWVyczogX21vZGlmaWVycyxcbiAgICAgICAgICAgIG1hdGNoTW9kaWZpZXJzOiBtYXRjaE1vZGlmaWVycy5iaW5kKG51bGwsIF9tb2RpZmllcnMpXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vLyBOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIGlzIGF2YWlsYWJsZSBzaW5jZSBJRTlcbi8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuLy8gY2FsbGJhY2sgcmV0dXJucyB0cnVlIHdoZW4gZWxlbWVudCBpcyBjb250YWluZWQgYnkgcGFyZW50IG9yIGlzIHRoZSBwYXJlbnQgc3VpdGVkIGZvciB1c2Ugd2l0aCBBcnJheS5zb21lKClcbi8qXG4gIFVTQUdFOlxuICAgIHZhciBpc0NoaWxkT2YgPSBnZXRQYXJlbnRDb21wYXJhdG9yKHtwYXJlbnQ6IHNvbWVOb2RlfSk7XG4gICAgbGlzdE9mRWxlbWVudHMuc29tZShpc0NoaWxkT2YpXG4qLyBmdW5jdGlvbiBnZXRQYXJlbnRDb21wYXJhdG9yKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSwgcGFyZW50ID0gX3JlZi5wYXJlbnQsIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsIGluY2x1ZGVTZWxmID0gX3JlZi5pbmNsdWRlU2VsZjtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBpc0NoaWxkT2Yobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5jbHVkZVNlbGYgJiYgbm9kZSA9PT0gcGFyZW50IHx8IHBhcmVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihub2RlKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKTtcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGlzUGFyZW50T2Yobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5jbHVkZVNlbGYgJiYgZWxlbWVudCA9PT0gbm9kZSB8fCBub2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGVsZW1lbnQpICYgTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwidXRpbC9jb21wYXJlLXBvc2l0aW9uI2dldFBhcmVudENvbXBhcmF0b3IgcmVxdWlyZWQgZWl0aGVyIG9wdGlvbnMucGFyZW50IG9yIG9wdGlvbnMuZWxlbWVudFwiKTtcbn1cbi8vIEJ1ZyAyODY5MzMgLSBLZXkgZXZlbnRzIGluIHRoZSBhdXRvY29tcGxldGUgcG9wdXAgc2hvdWxkIGJlIGhpZGRlbiBmcm9tIHBhZ2Ugc2NyaXB0c1xuLy8gQGJyb3dzZXItaXNzdWUgR2Vja28gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg2OTMzXG5mdW5jdGlvbiB3aGVuS2V5KCkge1xuICAgIHZhciBtYXAgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIHZhciBiaW5kaW5ncyA9IHt9O1xuICAgIHZhciBjb250ZXh0ID0gbm9kZUFycmF5KG1hcC5jb250ZXh0KVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgZGVsZXRlIG1hcC5jb250ZXh0O1xuICAgIHZhciBmaWx0ZXIgPSBub2RlQXJyYXkobWFwLmZpbHRlcik7XG4gICAgZGVsZXRlIG1hcC5maWx0ZXI7XG4gICAgdmFyIG1hcEtleXMgPSBPYmplY3Qua2V5cyhtYXApO1xuICAgIGlmICghbWFwS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIndoZW4va2V5IHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBvcHRpb24ga2V5XCIpO1xuICAgIH1cbiAgICB2YXIgcmVnaXN0ZXJCaW5kaW5nID0gZnVuY3Rpb24gcmVnaXN0ZXJCaW5kaW5nKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LmtleUNvZGVzLmZvckVhY2goZnVuY3Rpb24oY29kZSkge1xuICAgICAgICAgICAgaWYgKCFiaW5kaW5nc1tjb2RlXSkge1xuICAgICAgICAgICAgICAgIGJpbmRpbmdzW2NvZGVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiaW5kaW5nc1tjb2RlXS5wdXNoKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBtYXBLZXlzLmZvckVhY2goZnVuY3Rpb24odGV4dCkge1xuICAgICAgICBpZiAodHlwZW9mIG1hcFt0ZXh0XSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd3aGVuL2tleSByZXF1aXJlcyBvcHRpb25bXCInICsgdGV4dCArICdcIl0gdG8gYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhZGRDYWxsYmFjayA9IGZ1bmN0aW9uIGFkZENhbGxiYWNrKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5jYWxsYmFjayA9IG1hcFt0ZXh0XTtcbiAgICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgfTtcbiAgICAgICAga2V5QmluZGluZyh0ZXh0KS5tYXAoYWRkQ2FsbGJhY2spLmZvckVhY2gocmVnaXN0ZXJCaW5kaW5nKTtcbiAgICB9KTtcbiAgICB2YXIgaGFuZGxlS2V5RG93biA9IGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gaWdub3JlIGVsZW1lbnRzIHdpdGhpbiB0aGUgZXhlbXB0ZWQgc3ViLXRyZWVzXG4gICAgICAgICAgICB2YXIgaXNQYXJlbnRPZkVsZW1lbnQgPSBnZXRQYXJlbnRDb21wYXJhdG9yKHtcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGY6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZpbHRlci5zb21lKGlzUGFyZW50T2ZFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcbiAgICAgICAgaWYgKCFiaW5kaW5nc1trZXldKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYmluZGluZ3Nba2V5XS5mb3JFYWNoKGZ1bmN0aW9uKF9ldmVudCkge1xuICAgICAgICAgICAgaWYgKCFfZXZlbnQubWF0Y2hNb2RpZmllcnMoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2V2ZW50LmNhbGxiYWNrLmNhbGwoY29udGV4dCwgZXZlbnQsIGRpc2VuZ2FnZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29udGV4dC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duLCBmYWxzZSk7XG4gICAgdmFyIGRpc2VuZ2FnZSA9IGZ1bmN0aW9uIGRpc2VuZ2FnZSgpIHtcbiAgICAgICAgY29udGV4dC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duLCBmYWxzZSk7XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgICBkaXNlbmdhZ2U6IGRpc2VuZ2FnZVxuICAgIH07XG59XG5mdW5jdGlvbiBfZGVmYXVsdChwYXJhbSkge1xuICAgIGxldCB7IGNvbnRleHQgfSA9IHBhcmFtID09PSB2b2lkIDAgPyB7fSA6IHBhcmFtO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBjb250ZXh0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhlIHN1cHBvcnRzIHRlc3RzIGFyZSBydW4gYmVmb3JlIGludGVyY2VwdGluZyB0aGUgVGFiIGtleSxcbiAgICAvLyBvciBJRTEwIGFuZCBJRTExIHdpbGwgZmFpbCB0byBwcm9jZXNzIHRoZSBmaXJzdCBUYWIga2V5IGV2ZW50LiBOb3RcbiAgICAvLyBsaW1pdGluZyB0aGlzIHdhcm0tdXAgdG8gSUUgYmVjYXVzZSBpdCBtYXkgYmUgYSBwcm9ibGVtIGVsc2V3aGVyZSwgdG9vLlxuICAgIHF1ZXJ5VGFic2VxdWVuY2UoKTtcbiAgICByZXR1cm4gd2hlbktleSh7XG4gICAgICAgIC8vIFNhZmFyaSBvbiBPU1ggbWF5IHJlcXVpcmUgQUxUK1RBQiB0byByZWFjaCBsaW5rcyxcbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvMTQ2XG4gICAgICAgIFwiP2FsdCs/c2hpZnQrdGFiXCI6IGZ1bmN0aW9uIGFsdFNoaWZ0VGFiKGV2ZW50KSB7XG4gICAgICAgICAgICAvLyB3ZSdyZSBjb21wbGV0ZWx5IHRha2luZyBvdmVyIHRoZSBUYWIga2V5IGhhbmRsaW5nXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdmFyIHNlcXVlbmNlID0gcXVlcnlUYWJzZXF1ZW5jZSh7XG4gICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgYmFja3dhcmQgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgICAgIHZhciBmaXJzdCA9IHNlcXVlbmNlWzBdO1xuICAgICAgICAgICAgdmFyIGxhc3QgPSBzZXF1ZW5jZVtzZXF1ZW5jZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIC8vIHdyYXAgYXJvdW5kIGZpcnN0IHRvIGxhc3QsIGxhc3QgdG8gZmlyc3RcbiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBiYWNrd2FyZCA/IGZpcnN0IDogbGFzdDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBiYWNrd2FyZCA/IGxhc3QgOiBmaXJzdDtcbiAgICAgICAgICAgIGlmIChpc0FjdGl2ZUVsZW1lbnQoc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpbmQgY3VycmVudCBwb3NpdGlvbiBpbiB0YWJzZXF1ZW5jZVxuICAgICAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IHZvaWQgMDtcbiAgICAgICAgICAgIHZhciBmb3VuZCA9IHNlcXVlbmNlLnNvbWUoZnVuY3Rpb24oZWxlbWVudCwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aXZlRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVkaXJlY3QgdG8gZmlyc3QgYXMgd2UncmUgbm90IGluIG91ciB0YWJzZXF1ZW5jZVxuICAgICAgICAgICAgICAgIGZpcnN0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc2hpZnQgZm9jdXMgdG8gcHJldmlvdXMvbmV4dCBlbGVtZW50IGluIHRoZSBzZXF1ZW5jZVxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IGJhY2t3YXJkID8gLTEgOiAxO1xuICAgICAgICAgICAgc2VxdWVuY2VbY3VycmVudEluZGV4ICsgb2Zmc2V0XS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1haW50YWluLS10YWItZm9jdXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIl9kZWZhdWx0IiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9wbGF0Zm9ybSIsIl8iLCJfY3NzZXNjYXBlIiwibm9kZUFycmF5IiwiaW5wdXQiLCJBcnJheSIsImlzQXJyYXkiLCJub2RlVHlwZSIsInVuZGVmaW5lZCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImxlbmd0aCIsInNsaWNlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsImNvbnRleHRUb0VsZW1lbnQiLCJfcmVmIiwiY29udGV4dCIsIl9yZWYkbGFiZWwiLCJsYWJlbCIsInJlc29sdmVEb2N1bWVudCIsImRlZmF1bHRUb0RvY3VtZW50IiwiZWxlbWVudCIsIk5vZGUiLCJET0NVTUVOVF9OT0RFIiwiZG9jdW1lbnRFbGVtZW50IiwiRUxFTUVOVF9OT0RFIiwiRE9DVU1FTlRfRlJBR01FTlRfTk9ERSIsImdldFNoYWRvd0hvc3QiLCJhcmd1bWVudHMiLCJjb250YWluZXIiLCJwYXJlbnROb2RlIiwiaG9zdCIsImdldERvY3VtZW50Iiwibm9kZSIsIm93bmVyRG9jdW1lbnQiLCJpc0FjdGl2ZUVsZW1lbnQiLCJfZG9jdW1lbnQiLCJhY3RpdmVFbGVtZW50Iiwic2hhZG93SG9zdCIsInNoYWRvd1Jvb3QiLCJnZXRQYXJlbnRzIiwibGlzdCIsInB1c2giLCJuYW1lcyIsIm5hbWUiLCJmaW5kTWV0aG9kTmFtZSIsInNvbWUiLCJfbmFtZSIsImVsZW1lbnRNYXRjaGVzIiwic2VsZWN0b3IiLCJwbGF0Zm9ybSIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsImRlZmF1bHQiLCJvcyIsImZhbWlseSIsIkFORFJPSUQiLCJXSU5ET1dTIiwiT1NYIiwiSU9TIiwiQkxJTksiLCJsYXlvdXQiLCJHRUNLTyIsIlRSSURFTlQiLCJFREdFIiwiV0VCS0lUIiwidmVyc2lvbiIsInBhcnNlRmxvYXQiLCJtYWpvclZlcnNpb24iLCJNYXRoIiwiZmxvb3IiLCJpcyIsIklFOSIsIklFMTAiLCJJRTExIiwiYmVmb3JlIiwiZGF0YSIsIndpbmRvd1Njcm9sbFRvcCIsIndpbmRvdyIsInNjcm9sbFRvcCIsIndpbmRvd1Njcm9sbExlZnQiLCJzY3JvbGxMZWZ0IiwiYm9keVNjcm9sbFRvcCIsImJvZHkiLCJib2R5U2Nyb2xsTGVmdCIsImlmcmFtZSIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsIl93aW5kb3ciLCJjb250ZW50V2luZG93Iiwib3BlbiIsImNsb3NlIiwid3JhcHBlciIsInRlc3QiLCJvcHRpb25zIiwiaW5uZXJIVE1MIiwiZm9jdXMiLCJtdXRhdGUiLCJ2YWxpZGF0ZSIsImFmdGVyIiwiYmx1ciIsInJlbW92ZUNoaWxkIiwiZGV0ZWN0Rm9jdXMiLCJ0ZXN0cyIsInJlc3VsdHMiLCJrZXlzIiwibWFwIiwia2V5IiwidmVyc2lvbiQxIiwicmVhZExvY2FsU3RvcmFnZSIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJlIiwid3JpdGVMb2NhbFN0b3JhZ2UiLCJoYXNGb2N1cyIsInJlbW92ZUl0ZW0iLCJzZXRJdGVtIiwidXNlckFnZW50IiwibmF2aWdhdG9yIiwiY2FjaGVLZXkiLCJjYWNoZSIsImNhY2hlJDEiLCJzZXQiLCJ2YWx1ZXMiLCJmb3JFYWNoIiwidGltZSIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsImNzc1NoYWRvd1BpZXJjaW5nRGVlcENvbWJpbmF0b3IiLCJjb21iaW5hdG9yIiwicXVlcnlTZWxlY3RvciIsIm5vQXJyb3dBcnJvd0Fycm93Iiwibm9EZWVwIiwiZ2lmIiwiZm9jdXNBcmVhSW1nVGFiaW5kZXgiLCJmb2N1c0FyZWFUYWJpbmRleCIsImZvY3VzVGFyZ2V0IiwiZm9jdXNBcmVhV2l0aG91dEhyZWYiLCJmb2N1c0F1ZGlvV2l0aG91dENvbnRyb2xzIiwiaW52YWxpZEdpZiIsImZvY3VzQnJva2VuSW1hZ2VNYXAiLCJmb2N1c0NoaWxkcmVuT2ZGb2N1c2FibGVGbGV4Ym94IiwiZm9jdXNGaWVsZHNldERpc2FibGVkIiwiZm9jdXNGaWVsZHNldCIsImZvY3VzRmxleGJveENvbnRhaW5lciIsImZvY3VzRm9ybURpc2FibGVkIiwiZm9jdXNJbWdJc21hcCIsImhyZWYiLCJmb2N1c0ltZ1VzZW1hcFRhYmluZGV4IiwiZm9jdXNJbkhpZGRlbklmcmFtZSIsImlmcmFtZURvY3VtZW50Iiwic3R5bGUiLCJ2aXNpYmlsaXR5IiwicmVzdWx0IiwiZm9jdXNJblplcm9EaW1lbnNpb25PYmplY3QiLCJmb2N1c0ludmFsaWRUYWJpbmRleCIsImZvY3VzTGFiZWxUYWJpbmRleCIsInZhcmlhYmxlVG9QcmV2ZW50RGVhZENvZGVFbGltaW5hdGlvbiIsIm9mZnNldEhlaWdodCIsInN2ZyIsImZvY3VzT2JqZWN0U3ZnSGlkZGVuIiwiZm9jdXNPYmplY3RTdmciLCJyZXN1bHQkMSIsImZvY3VzT2JqZWN0U3dmIiwiZm9jdXNSZWRpcmVjdEltZ1VzZW1hcCIsInRhcmdldCIsImZvY3VzUmVkaXJlY3RMZWdlbmQiLCJmb2N1c2FibGUiLCJ0YWJiYWJsZSIsImZvY3VzU2Nyb2xsQm9keSIsImZvY3VzU2Nyb2xsQ29udGFpbmVyV2l0aG91dE92ZXJmbG93IiwiZm9jdXNTY3JvbGxDb250YWluZXIiLCJmb2N1c1N1bW1hcnkiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIm1ha2VGb2N1c2FibGVGb3JlaWduT2JqZWN0IiwiZm9yZWlnbk9iamVjdCIsImNyZWF0ZUVsZW1lbnROUyIsIndpZHRoIiwiYmFzZVZhbCIsImhlaWdodCIsImxhc3RDaGlsZCIsInR5cGUiLCJmb2N1c1N2Z0ZvcmVpZ25PYmplY3RIYWNrIiwiaXNTdmdFbGVtZW50Iiwib3duZXJTVkdFbGVtZW50Iiwibm9kZU5hbWUiLCJ0b0xvd2VyQ2FzZSIsImRpc2FibGVkIiwiZ2VuZXJhdGUiLCJIVE1MRWxlbWVudCIsInByb3RvdHlwZSIsImZvY3VzU3ZnRm9jdXNhYmxlQXR0cmlidXRlIiwiZm9jdXNTdmdUYWJpbmRleEF0dHJpYnV0ZSIsImZvY3VzU3ZnTmVnYXRpdmVUYWJpbmRleEF0dHJpYnV0ZSIsImZvY3VzU3ZnVXNlVGFiaW5kZXgiLCJqb2luIiwiZm9jdXNTdmdGb3JlaWdub2JqZWN0VGFiaW5kZXgiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInJlc3VsdCQyIiwiQm9vbGVhbiIsIlNWR0VsZW1lbnQiLCJmb2N1c1N2Z0luSWZyYW1lIiwiZm9jdXNTdmciLCJmaXJzdENoaWxkIiwiZm9jdXNUYWJpbmRleFRyYWlsaW5nQ2hhcmFjdGVycyIsImZvY3VzVGFibGUiLCJmcmFnbWVudCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJmb2N1c1ZpZGVvV2l0aG91dENvbnRyb2xzIiwicmVzdWx0JDMiLCJ0YWJzZXF1ZW5jZUFyZWFBdEltZ1Bvc2l0aW9uIiwidGVzdENhbGxiYWNrcyIsInRlc3REZXNjcmlwdGlvbnMiLCJleGVjdXRlVGVzdHMiLCJzdXBwb3J0c0NhY2hlIiwiX3N1cHBvcnRzIiwic3VwcG9ydHMiLCJ2YWxpZEludGVnZXJQYXR0ZXJuTm9UcmFpbGluZyIsInZhbGlkSW50ZWdlclBhdHRlcm5XaXRoVHJhaWxpbmciLCJpc1ZhbGlkVGFiaW5kZXgiLCJ2YWxpZEludGVnZXJQYXR0ZXJuIiwiaGFzVGFiaW5kZXgiLCJoYXNBdHRyaWJ1dGUiLCJoYXNUYWJJbmRleCIsInRhYmluZGV4IiwiZ2V0QXR0cmlidXRlIiwidGFiaW5kZXhWYWx1ZSIsImF0dHJpYnV0ZU5hbWUiLCJwYXJzZUludCIsImlzTmFOIiwiaXNVc2VyTW9kaWZ5V3JpdGFibGUiLCJ1c2VyTW9kaWZ5Iiwid2Via2l0VXNlck1vZGlmeSIsImluZGV4T2YiLCJoYXNDc3NPdmVyZmxvd1Njcm9sbCIsImdldFByb3BlcnR5VmFsdWUiLCJvdmVyZmxvdyIsImhhc0Nzc0Rpc3BsYXlGbGV4IiwiZGlzcGxheSIsImlzU2Nyb2xsYWJsZUNvbnRhaW5lciIsInBhcmVudE5vZGVOYW1lIiwicGFyZW50U3R5bGUiLCJzY3JvbGxIZWlnaHQiLCJvZmZzZXRXaWR0aCIsInNjcm9sbFdpZHRoIiwic3VwcG9ydHMkMSIsImlzRm9jdXNSZWxldmFudFJ1bGVzIiwiX3JlZiRleGNlcHQiLCJleGNlcHQiLCJmbGV4Ym94Iiwic2Nyb2xsYWJsZSIsInNoYWRvdyIsInN2Z1R5cGUiLCJ2YWxpZFRhYmluZGV4IiwiaXNTdmdDb250ZW50IiwiZm9jdXNhYmxlQXR0cmlidXRlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImhhc0xpbmtQYXJlbnQiLCJwYXJlbnQiLCJwYXJlbnRFbGVtZW50IiwiaXNGb2N1c1JlbGV2YW50IiwicnVsZXMiLCJmaW5kSW5kZXgiLCJhcnJheSIsImNhbGxiYWNrIiwiaSIsImdldENvbnRlbnREb2N1bWVudCIsImNvbnRlbnREb2N1bWVudCIsImdldFNWR0RvY3VtZW50IiwiZ2V0V2luZG93IiwiZGVmYXVsdFZpZXciLCJzaGFkb3dQcmVmaXgiLCJzZWxlY3RJblNoYWRvd3MiLCJvcGVyYXRvciIsInJlcGxhY2UiLCJzcGxpdCIsImZpbmREb2N1bWVudEhvc3RFbGVtZW50IiwiX2ZyYW1lRWxlbWVudCIsInBvdGVudGlhbEhvc3RzIiwiZ2V0RnJhbWVFbGVtZW50IiwiZnJhbWVFbGVtZW50Iiwibm90UmVuZGVyZWRFbGVtZW50c1BhdHRlcm4iLCJjb21wdXRlZFN0eWxlIiwicHJvcGVydHkiLCJub3REaXNwbGF5ZWQiLCJfcGF0aCIsIm5vdFZpc2libGUiLCJoaWRkZW4iLCJ2aXNpYmxlIiwiY29sbGFwc2VkUGFyZW50Iiwib2Zmc2V0IiwiaXNWaXNpYmxlUnVsZXMiLCJub3RSZW5kZXJlZCIsImNzc0Rpc3BsYXkiLCJjc3NWaXNpYmlsaXR5IiwiZGV0YWlsc0VsZW1lbnQiLCJicm93c2luZ0NvbnRleHQiLCJpc0F1ZGlvV2l0aG91dENvbnRyb2xzIiwiX2lzVmlzaWJsZSIsImlzVmlzaWJsZSIsImdldE1hcEJ5TmFtZSIsImdldEltYWdlT2ZBcmVhIiwic3VwcG9ydHMkMiIsImlzVmFsaWRBcmVhIiwiaW1nIiwiY29tcGxldGUiLCJuYXR1cmFsSGVpZ2h0IiwiY2hpbGRPZkludGVyYWN0aXZlIiwiX2VsZW1lbnQiLCJzdXBwb3J0cyQzIiwiZGlzYWJsZWRFbGVtZW50c1BhdHRlcm4iLCJkaXNhYmxlZEVsZW1lbnRzIiwic2VsZWN0IiwidGV4dGFyZWEiLCJidXR0b24iLCJmaWVsZHNldCIsImZvcm0iLCJpc05hdGl2ZURpc2FibGVkU3VwcG9ydGVkIiwiUmVnRXhwIiwic3VwcG9ydHMkNCIsImlzRGlzYWJsZWRGaWVsZHNldCIsImlzRGlzYWJsZWRGb3JtIiwiaXNEaXNhYmxlZCIsInBhcmVudHMiLCJpc09ubHlUYWJiYWJsZVJ1bGVzIiwib25seUZvY3VzYWJsZUJyb3dzaW5nQ29udGV4dCIsImlzT25seVRhYmJhYmxlIiwic3VwcG9ydHMkNSIsImlzT25seUZvY3VzUmVsZXZhbnQiLCJfdGFiaW5kZXgiLCJpc0ZvY3VzYWJsZVJ1bGVzIiwib25seVRhYmJhYmxlIiwiX2lzT25seVRhYmJhYmxlIiwiZm9jdXNSZWxldmFudCIsInZpc2liaWxpdHlPcHRpb25zIiwiX25vZGVOYW1lMiIsIl9ub2RlTmFtZSIsImlzRm9jdXNhYmxlIiwiY3JlYXRlRmlsdGVyIiwiY29uZGl0aW9uIiwiZmlsdGVyIiwiTm9kZUZpbHRlciIsIkZJTFRFUl9BQ0NFUFQiLCJGSUxURVJfU0tJUCIsImFjY2VwdE5vZGUiLCJQb3NzaWJseUZvY3VzYWJsZUZpbHRlciIsInF1ZXJ5Rm9jdXNhYmxlU3RyaWN0IiwiaW5jbHVkZUNvbnRleHQiLCJpbmNsdWRlT25seVRhYmJhYmxlIiwic3RyYXRlZ3kiLCJfaXNGb2N1c2FibGUiLCJ3YWxrZXIiLCJjcmVhdGVUcmVlV2Fsa2VyIiwiU0hPV19FTEVNRU5UIiwibmV4dE5vZGUiLCJjdXJyZW50Tm9kZSIsImNvbmNhdCIsInVuc2hpZnQiLCJzdXBwb3J0cyQ2Iiwic2VsZWN0b3IkMSIsInNlbGVjdG9yJDIiLCJxdWVyeUZvY3VzYWJsZVF1aWNrIiwiX3NlbGVjdG9yIiwiZWxlbWVudHMiLCJxdWVyeUZvY3VzYWJsZSIsIl9yZWYkc3RyYXRlZ3kiLCJzdXBwb3J0cyQ3IiwiZm9jdXNhYmxlRWxlbWVudHNQYXR0ZXJuIiwiaXNUYWJiYWJsZVJ1bGVzIiwiZnJhbWVOb2RlTmFtZSIsImlzRml4ZWRCbGluayIsImhhc1RhYmJhYmxlVGFiaW5kZXhPck5vbmUiLCJoYXNUYWJiYWJsZVRhYmluZGV4IiwicG90ZW50aWFsbHlUYWJiYWJsZSIsInRhYkluZGV4IiwiX3N0eWxlIiwiX3N0eWxlMiIsImlzRm9jdXNSZWxldmFudFdpdGhvdXRGbGV4Ym94IiwiaXNUYWJiYWJsZVdpdGhvdXRGbGV4Ym94IiwiaXNUYWJiYWJsZSIsInF1ZXJ5VGFiYmFibGUiLCJfaXNUYWJiYWJsZSIsImNvbXBhcmVEb21Qb3NpdGlvbiIsImEiLCJiIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkciLCJzb3J0RG9tT3JkZXIiLCJzb3J0IiwiZ2V0Rmlyc3RTdWNjZXNzb3JPZmZzZXQiLCJmaW5kSW5zZXJ0aW9uT2Zmc2V0cyIsInJlc29sdmVFbGVtZW50IiwiaW5zZXJ0aW9ucyIsImluamVjdGlvbnMiLCJpbnNlcnRFbGVtZW50c0F0T2Zmc2V0cyIsImluc2VydGVkIiwiaW5zZXJ0aW9uIiwicmVtb3ZlIiwiYXJncyIsInNwbGljZSIsImFwcGx5IiwibWVyZ2VJbkRvbU9yZGVyIiwiX2xpc3QiLCJfZWxlbWVudHMiLCJfY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiTWFwcyIsIm1hcHMiLCJnZXRBcmVhc0ZvciIsImFkZE1hcEJ5TmFtZSIsImV4dHJhY3RBcmVhc0Zyb21MaXN0Iiwic29ydEFyZWEiLCJ1c2VtYXBzIiwiaW1hZ2UiLCJfY3JlYXRlQ2xhc3MkMSIsIl9jbGFzc0NhbGxDaGVjayQxIiwiU2hhZG93cyIsInNvcnRFbGVtZW50cyIsImhvc3RDb3VudGVyIiwiaW5Ib3N0IiwiaW5Eb2N1bWVudCIsImhvc3RzIiwiX3JlZ2lzdGVySG9zdCIsIl9zb3J0aW5nSWQiLCJwYXJlbnRIb3N0IiwiX3JlZ2lzdGVySG9zdFBhcmVudCIsIl9yZWdpc3RlckVsZW1lbnQiLCJleHRyYWN0RWxlbWVudHMiLCJfaW5qZWN0SG9zdHMiLCJfcmVwbGFjZUhvc3RzIiwiX2NsZWFudXAiLCJfY29udGV4dCIsIl9tZXJnZSIsIm1lcmdlZCIsIl9yZXNvbHZlSG9zdEVsZW1lbnQiLCJiaW5kIiwic29ydFNoYWRvd2VkIiwic2hhZG93cyIsInNvcnRUYWJpbmRleCIsImluZGV4ZXMiLCJub3JtYWwiLCJyZWR1Y2VSaWdodCIsInByZXZpb3VzIiwiY3VycmVudCIsInN1cHBvcnRzJDgiLCJtb3ZlQ29udGV4dFRvQmVnaW5uaW5nIiwicG9zIiwidG1wIiwicXVlcnlUYWJzZXF1ZW5jZSIsImNyZWF0ZVNoYWRvd1Jvb3QiLCJrZXljb2RlIiwidGFiIiwibGVmdCIsInVwIiwicmlnaHQiLCJkb3duIiwicGFnZVVwIiwicGFnZURvd24iLCJlbmQiLCJob21lIiwiZW50ZXIiLCJlc2NhcGUiLCJzcGFjZSIsInNoaWZ0IiwiY2Fwc0xvY2siLCJjdHJsIiwiYWx0IiwibWV0YSIsInBhdXNlIiwiaW5zZXJ0IiwiZGVsZXRlIiwiYmFja3NwYWNlIiwiX2FsaWFzIiwibiIsIl9uIiwiY29kZSIsIm51bUNvZGUiLCJfbjIiLCJfY29kZSIsIm5hbWUkMSIsImZyb21DaGFyQ29kZSIsIm1vZGlmaWVyIiwibW9kaWZpZXJTZXF1ZW5jZSIsImNyZWF0ZUV4cGVjdGVkTW9kaWZpZXJzIiwiaWdub3JlTW9kaWZpZXJzIiwiYWx0S2V5IiwiY3RybEtleSIsIm1ldGFLZXkiLCJzaGlmdEtleSIsInJlc29sdmVNb2RpZmllcnMiLCJtb2RpZmllcnMiLCJleHBlY3RlZCIsInRva2VuIiwicHJvcGVydHlOYW1lIiwicmVzb2x2ZUtleSIsIm1hdGNoTW9kaWZpZXJzIiwiZXZlbnQiLCJwcm9wIiwia2V5QmluZGluZyIsInRleHQiLCJfdGV4dCIsInRva2VucyIsIl9tb2RpZmllcnMiLCJfa2V5Q29kZXMiLCJrZXlDb2RlcyIsImdldFBhcmVudENvbXBhcmF0b3IiLCJpbmNsdWRlU2VsZiIsImlzQ2hpbGRPZiIsIkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSIsImlzUGFyZW50T2YiLCJ3aGVuS2V5IiwiYmluZGluZ3MiLCJtYXBLZXlzIiwicmVnaXN0ZXJCaW5kaW5nIiwiYWRkQ2FsbGJhY2siLCJoYW5kbGVLZXlEb3duIiwiZGVmYXVsdFByZXZlbnRlZCIsImlzUGFyZW50T2ZFbGVtZW50Iiwia2V5Q29kZSIsIndoaWNoIiwiX2V2ZW50IiwiZGlzZW5nYWdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJwYXJhbSIsImFsdFNoaWZ0VGFiIiwicHJldmVudERlZmF1bHQiLCJzZXF1ZW5jZSIsImJhY2t3YXJkIiwiZmlyc3QiLCJsYXN0Iiwic291cmNlIiwiY3VycmVudEluZGV4IiwiZm91bmQiLCJpbmRleCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js ***! + \**********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-dialog-overlay] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n overflow: auto;\\n z-index: 9000;\\n\\n display: flex;\\n align-content: center;\\n align-items: center;\\n flex-direction: column;\\n padding: 10vh 15px 0;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n padding: 15px 15px 0;\\n }\\n }\\n\\n [data-nextjs-dialog-backdrop] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n background-color: rgba(17, 17, 17, 0.2);\\n pointer-events: all;\\n z-index: -1;\\n }\\n\\n [data-nextjs-dialog-backdrop-fixed] {\\n cursor: not-allowed;\\n -webkit-backdrop-filter: blur(8px);\\n backdrop-filter: blur(8px);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9zdHlsZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDBDQUF5QztJQUNyQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGlDQUFpQ0MsbUJBQU9BLENBQUMsOEhBQStDO0FBQzlGLE1BQU1DLGdCQUFnQkQsbUJBQU9BLENBQUMseUlBQTZCO0FBQzNELFNBQVNFO0lBQ0wsTUFBTUMsT0FBT0osK0JBQStCSyxDQUFDLENBQUM7UUFDMUM7S0FDSDtJQUNERixrQkFBa0I7UUFDZCxPQUFPQztJQUNYO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLE1BQU1MLFNBQVMsQ0FBQyxHQUFHRyxjQUFjSSxJQUFJLEVBQUVIO0FBRXZDLElBQUksQ0FBQyxPQUFPUixRQUFRWSxPQUFPLEtBQUssY0FBZSxPQUFPWixRQUFRWSxPQUFPLEtBQUssWUFBWVosUUFBUVksT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPWixRQUFRWSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLZixPQUFPQyxjQUFjLENBQUNDLFFBQVFZLE9BQU8sRUFBRSxjQUFjO1FBQUVYLE9BQU87SUFBSztJQUNuRUgsT0FBT2dCLE1BQU0sQ0FBQ2QsUUFBUVksT0FBTyxFQUFFWjtJQUMvQmUsT0FBT2YsT0FBTyxHQUFHQSxRQUFRWSxPQUFPO0FBQ2xDLEVBRUEsa0NBQWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9PdmVybGF5L3N0eWxlcy5qcz9lMmIxIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3R5bGVzXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfVxufSk7XG5jb25zdCBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlXCIpO1xuY29uc3QgX25vb3B0ZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL25vb3AtdGVtcGxhdGVcIik7XG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QoKSB7XG4gICAgY29uc3QgZGF0YSA9IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZS5fKFtcbiAgICAgICAgXCJcXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV0ge1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIHRvcDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIGJvdHRvbTogMDtcXG4gICAgbGVmdDogMDtcXG4gICAgb3ZlcmZsb3c6IGF1dG87XFxuICAgIHotaW5kZXg6IDkwMDA7XFxuXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgcGFkZGluZzogMTB2aCAxNXB4IDA7XFxuICB9XFxuXFxuICBAbWVkaWEgKG1heC1oZWlnaHQ6IDgxMnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV0ge1xcbiAgICAgIHBhZGRpbmc6IDE1cHggMTVweCAwO1xcbiAgICB9XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wXSB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgdG9wOiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE3LCAxNywgMTcsIDAuMik7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuICAgIHotaW5kZXg6IC0xO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcC1maXhlZF0ge1xcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTtcXG4gIH1cXG5cIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuY29uc3Qgc3R5bGVzID0gKDAsIF9ub29wdGVtcGxhdGUubm9vcCkoX3RlbXBsYXRlT2JqZWN0KCkpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHlsZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInN0eWxlcyIsIl90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSIsInJlcXVpcmUiLCJfbm9vcHRlbXBsYXRlIiwiX3RlbXBsYXRlT2JqZWN0IiwiZGF0YSIsIl8iLCJub29wIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js": +/*!********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js ***! + \********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ShadowPortal\", ({\n enumerable: true,\n get: function() {\n return ShadowPortal;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _reactdom = __webpack_require__(/*! react-dom */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-dom.js\");\nfunction ShadowPortal(param) {\n let { children } = param;\n let portalNode = _react.useRef(null);\n let shadowNode = _react.useRef(null);\n let [, forceUpdate] = _react.useState();\n _react.useLayoutEffect(()=>{\n const ownerDocument = document;\n portalNode.current = ownerDocument.createElement(\"nextjs-portal\");\n shadowNode.current = portalNode.current.attachShadow({\n mode: \"open\"\n });\n ownerDocument.body.appendChild(portalNode.current);\n forceUpdate({});\n return ()=>{\n if (portalNode.current && portalNode.current.ownerDocument) {\n portalNode.current.ownerDocument.body.removeChild(portalNode.current);\n }\n };\n }, []);\n return shadowNode.current ? /*#__PURE__*/ (0, _reactdom.createPortal)(children, shadowNode.current) : null;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ShadowPortal.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvU2hhZG93UG9ydGFsLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxnREFBK0M7SUFDM0NJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyw0QkFBNEJDLG1CQUFPQSxDQUFDLG9IQUEwQztBQUNwRixNQUFNQyxTQUFTLFdBQVcsR0FBR0YsMEJBQTBCRyxDQUFDLENBQUNGLG1CQUFPQSxDQUFDLHdHQUFPO0FBQ3hFLE1BQU1HLFlBQVlILG1CQUFPQSxDQUFDLGdIQUFXO0FBQ3JDLFNBQVNGLGFBQWFNLEtBQUs7SUFDdkIsSUFBSSxFQUFFQyxRQUFRLEVBQUUsR0FBR0Q7SUFDbkIsSUFBSUUsYUFBYUwsT0FBT00sTUFBTSxDQUFDO0lBQy9CLElBQUlDLGFBQWFQLE9BQU9NLE1BQU0sQ0FBQztJQUMvQixJQUFJLEdBQUdFLFlBQVksR0FBR1IsT0FBT1MsUUFBUTtJQUNyQ1QsT0FBT1UsZUFBZSxDQUFDO1FBQ25CLE1BQU1DLGdCQUFnQkM7UUFDdEJQLFdBQVdRLE9BQU8sR0FBR0YsY0FBY0csYUFBYSxDQUFDO1FBQ2pEUCxXQUFXTSxPQUFPLEdBQUdSLFdBQVdRLE9BQU8sQ0FBQ0UsWUFBWSxDQUFDO1lBQ2pEQyxNQUFNO1FBQ1Y7UUFDQUwsY0FBY00sSUFBSSxDQUFDQyxXQUFXLENBQUNiLFdBQVdRLE9BQU87UUFDakRMLFlBQVksQ0FBQztRQUNiLE9BQU87WUFDSCxJQUFJSCxXQUFXUSxPQUFPLElBQUlSLFdBQVdRLE9BQU8sQ0FBQ0YsYUFBYSxFQUFFO2dCQUN4RE4sV0FBV1EsT0FBTyxDQUFDRixhQUFhLENBQUNNLElBQUksQ0FBQ0UsV0FBVyxDQUFDZCxXQUFXUSxPQUFPO1lBQ3hFO1FBQ0o7SUFDSixHQUFHLEVBQUU7SUFDTCxPQUFPTixXQUFXTSxPQUFPLEdBQWlCLFdBQUgsR0FBSSxJQUFHWCxVQUFVa0IsWUFBWSxFQUFFaEIsVUFBVUcsV0FBV00sT0FBTyxJQUFJO0FBQzFHO0FBRUEsSUFBSSxDQUFDLE9BQU9wQixRQUFRNEIsT0FBTyxLQUFLLGNBQWUsT0FBTzVCLFFBQVE0QixPQUFPLEtBQUssWUFBWTVCLFFBQVE0QixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU81QixRQUFRNEIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySy9CLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTRCLE9BQU8sRUFBRSxjQUFjO1FBQUUzQixPQUFPO0lBQUs7SUFDbkVILE9BQU9nQyxNQUFNLENBQUM5QixRQUFRNEIsT0FBTyxFQUFFNUI7SUFDL0IrQixPQUFPL0IsT0FBTyxHQUFHQSxRQUFRNEIsT0FBTztBQUNsQyxFQUVBLHdDQUF3QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvU2hhZG93UG9ydGFsLmpzPzFmMTEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTaGFkb3dQb3J0YWxcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNoYWRvd1BvcnRhbDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfcmVhY3Rkb20gPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpO1xuZnVuY3Rpb24gU2hhZG93UG9ydGFsKHBhcmFtKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4gfSA9IHBhcmFtO1xuICAgIGxldCBwb3J0YWxOb2RlID0gX3JlYWN0LnVzZVJlZihudWxsKTtcbiAgICBsZXQgc2hhZG93Tm9kZSA9IF9yZWFjdC51c2VSZWYobnVsbCk7XG4gICAgbGV0IFssIGZvcmNlVXBkYXRlXSA9IF9yZWFjdC51c2VTdGF0ZSgpO1xuICAgIF9yZWFjdC51c2VMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgY29uc3Qgb3duZXJEb2N1bWVudCA9IGRvY3VtZW50O1xuICAgICAgICBwb3J0YWxOb2RlLmN1cnJlbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJuZXh0anMtcG9ydGFsXCIpO1xuICAgICAgICBzaGFkb3dOb2RlLmN1cnJlbnQgPSBwb3J0YWxOb2RlLmN1cnJlbnQuYXR0YWNoU2hhZG93KHtcbiAgICAgICAgICAgIG1vZGU6IFwib3BlblwiXG4gICAgICAgIH0pO1xuICAgICAgICBvd25lckRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocG9ydGFsTm9kZS5jdXJyZW50KTtcbiAgICAgICAgZm9yY2VVcGRhdGUoe30pO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmIChwb3J0YWxOb2RlLmN1cnJlbnQgJiYgcG9ydGFsTm9kZS5jdXJyZW50Lm93bmVyRG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICBwb3J0YWxOb2RlLmN1cnJlbnQub3duZXJEb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHBvcnRhbE5vZGUuY3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBzaGFkb3dOb2RlLmN1cnJlbnQgPyAvKiNfX1BVUkVfXyovICgwLCBfcmVhY3Rkb20uY3JlYXRlUG9ydGFsKShjaGlsZHJlbiwgc2hhZG93Tm9kZS5jdXJyZW50KSA6IG51bGw7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNoYWRvd1BvcnRhbC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiU2hhZG93UG9ydGFsIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3QiLCJfIiwiX3JlYWN0ZG9tIiwicGFyYW0iLCJjaGlsZHJlbiIsInBvcnRhbE5vZGUiLCJ1c2VSZWYiLCJzaGFkb3dOb2RlIiwiZm9yY2VVcGRhdGUiLCJ1c2VTdGF0ZSIsInVzZUxheW91dEVmZmVjdCIsIm93bmVyRG9jdW1lbnQiLCJkb2N1bWVudCIsImN1cnJlbnQiLCJjcmVhdGVFbGVtZW50IiwiYXR0YWNoU2hhZG93IiwibW9kZSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiY3JlYXRlUG9ydGFsIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js ***! + \***************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"EditorLink\", ({\n enumerable: true,\n get: function() {\n return EditorLink;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _useopenineditor = __webpack_require__(/*! ../../helpers/use-open-in-editor */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\");\nfunction EditorLink(param) {\n let { file, isSourceFile, location } = param;\n var _location_line, _location_column;\n const open = (0, _useopenineditor.useOpenInEditor)({\n file,\n lineNumber: (_location_line = location == null ? void 0 : location.line) != null ? _location_line : 1,\n column: (_location_column = location == null ? void 0 : location.column) != null ? _location_column : 0\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-with-open-in-editor-link\": true,\n \"data-with-open-in-editor-link-source-file\": isSourceFile ? true : undefined,\n \"data-with-open-in-editor-link-import-trace\": isSourceFile ? undefined : true,\n tabIndex: 10,\n role: \"link\",\n onClick: open,\n title: \"Click to open in your editor\",\n children: [\n file,\n location ? \":\" + location.line + \":\" + location.column : null,\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n })\n ]\n })\n ]\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=EditorLink.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVGVybWluYWwvRWRpdG9yTGluay5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsOENBQTZDO0lBQ3pDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxrSEFBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDdkUsTUFBTUksbUJBQW1CSixtQkFBT0EsQ0FBQyxtSkFBa0M7QUFDbkUsU0FBU0YsV0FBV08sS0FBSztJQUNyQixJQUFJLEVBQUVDLElBQUksRUFBRUMsWUFBWSxFQUFFQyxRQUFRLEVBQUUsR0FBR0g7SUFDdkMsSUFBSUksZ0JBQWdCQztJQUNwQixNQUFNQyxPQUFPLENBQUMsR0FBR1AsaUJBQWlCUSxlQUFlLEVBQUU7UUFDL0NOO1FBQ0FPLFlBQVksQ0FBQ0osaUJBQWlCRCxZQUFZLE9BQU8sS0FBSyxJQUFJQSxTQUFTTSxJQUFJLEtBQUssT0FBT0wsaUJBQWlCO1FBQ3BHTSxRQUFRLENBQUNMLG1CQUFtQkYsWUFBWSxPQUFPLEtBQUssSUFBSUEsU0FBU08sTUFBTSxLQUFLLE9BQU9MLG1CQUFtQjtJQUMxRztJQUNBLE9BQXFCLFdBQUgsR0FBSSxJQUFHVCxZQUFZZSxJQUFJLEVBQUUsT0FBTztRQUM5QyxpQ0FBaUM7UUFDakMsNkNBQTZDVCxlQUFlLE9BQU9VO1FBQ25FLDhDQUE4Q1YsZUFBZVUsWUFBWTtRQUN6RUMsVUFBVTtRQUNWQyxNQUFNO1FBQ05DLFNBQVNUO1FBQ1RVLE9BQU87UUFDUEMsVUFBVTtZQUNOaEI7WUFDQUUsV0FBVyxNQUFNQSxTQUFTTSxJQUFJLEdBQUcsTUFBTU4sU0FBU08sTUFBTSxHQUFHO1lBQ3pELFdBQVcsR0FBSSxJQUFHZCxZQUFZZSxJQUFJLEVBQUUsT0FBTztnQkFDdkNPLE9BQU87Z0JBQ1BDLFNBQVM7Z0JBQ1RDLE1BQU07Z0JBQ05DLFFBQVE7Z0JBQ1JDLGFBQWE7Z0JBQ2JDLGVBQWU7Z0JBQ2ZDLGdCQUFnQjtnQkFDaEJQLFVBQVU7b0JBQ04sV0FBVyxHQUFJLElBQUdyQixZQUFZNkIsR0FBRyxFQUFFLFFBQVE7d0JBQ3ZDQyxHQUFHO29CQUNQO29CQUNBLFdBQVcsR0FBSSxJQUFHOUIsWUFBWTZCLEdBQUcsRUFBRSxZQUFZO3dCQUMzQ0UsUUFBUTtvQkFDWjtvQkFDQSxXQUFXLEdBQUksSUFBRy9CLFlBQVk2QixHQUFHLEVBQUUsUUFBUTt3QkFDdkNHLElBQUk7d0JBQ0pDLElBQUk7d0JBQ0pDLElBQUk7d0JBQ0pDLElBQUk7b0JBQ1I7aUJBQ0g7WUFDTDtTQUNIO0lBQ0w7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPMUMsUUFBUTJDLE9BQU8sS0FBSyxjQUFlLE9BQU8zQyxRQUFRMkMsT0FBTyxLQUFLLFlBQVkzQyxRQUFRMkMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPM0MsUUFBUTJDLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcks5QyxPQUFPQyxjQUFjLENBQUNDLFFBQVEyQyxPQUFPLEVBQUUsY0FBYztRQUFFMUMsT0FBTztJQUFLO0lBQ25FSCxPQUFPK0MsTUFBTSxDQUFDN0MsUUFBUTJDLE9BQU8sRUFBRTNDO0lBQy9COEMsT0FBTzlDLE9BQU8sR0FBR0EsUUFBUTJDLE9BQU87QUFDbEMsRUFFQSxzQ0FBc0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL1Rlcm1pbmFsL0VkaXRvckxpbmsuanM/OTZjOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkVkaXRvckxpbmtcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEVkaXRvckxpbms7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfdXNlb3BlbmluZWRpdG9yID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvdXNlLW9wZW4taW4tZWRpdG9yXCIpO1xuZnVuY3Rpb24gRWRpdG9yTGluayhwYXJhbSkge1xuICAgIGxldCB7IGZpbGUsIGlzU291cmNlRmlsZSwgbG9jYXRpb24gfSA9IHBhcmFtO1xuICAgIHZhciBfbG9jYXRpb25fbGluZSwgX2xvY2F0aW9uX2NvbHVtbjtcbiAgICBjb25zdCBvcGVuID0gKDAsIF91c2VvcGVuaW5lZGl0b3IudXNlT3BlbkluRWRpdG9yKSh7XG4gICAgICAgIGZpbGUsXG4gICAgICAgIGxpbmVOdW1iZXI6IChfbG9jYXRpb25fbGluZSA9IGxvY2F0aW9uID09IG51bGwgPyB2b2lkIDAgOiBsb2NhdGlvbi5saW5lKSAhPSBudWxsID8gX2xvY2F0aW9uX2xpbmUgOiAxLFxuICAgICAgICBjb2x1bW46IChfbG9jYXRpb25fY29sdW1uID0gbG9jYXRpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGxvY2F0aW9uLmNvbHVtbikgIT0gbnVsbCA/IF9sb2NhdGlvbl9jb2x1bW4gOiAwXG4gICAgfSk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiZGl2XCIsIHtcbiAgICAgICAgXCJkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGlua1wiOiB0cnVlLFxuICAgICAgICBcImRhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLXNvdXJjZS1maWxlXCI6IGlzU291cmNlRmlsZSA/IHRydWUgOiB1bmRlZmluZWQsXG4gICAgICAgIFwiZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmstaW1wb3J0LXRyYWNlXCI6IGlzU291cmNlRmlsZSA/IHVuZGVmaW5lZCA6IHRydWUsXG4gICAgICAgIHRhYkluZGV4OiAxMCxcbiAgICAgICAgcm9sZTogXCJsaW5rXCIsXG4gICAgICAgIG9uQ2xpY2s6IG9wZW4sXG4gICAgICAgIHRpdGxlOiBcIkNsaWNrIHRvIG9wZW4gaW4geW91ciBlZGl0b3JcIixcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICBsb2NhdGlvbiA/IFwiOlwiICsgbG9jYXRpb24ubGluZSArIFwiOlwiICsgbG9jYXRpb24uY29sdW1uIDogbnVsbCxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkOiBcIk0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2XCJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwb2x5bGluZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHM6IFwiMTUgMyAyMSAzIDIxIDlcIlxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImxpbmVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDE6IFwiMTBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBcIjE0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB4MjogXCIyMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTI6IFwiM1wiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1FZGl0b3JMaW5rLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJFZGl0b3JMaW5rIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl91c2VvcGVuaW5lZGl0b3IiLCJwYXJhbSIsImZpbGUiLCJpc1NvdXJjZUZpbGUiLCJsb2NhdGlvbiIsIl9sb2NhdGlvbl9saW5lIiwiX2xvY2F0aW9uX2NvbHVtbiIsIm9wZW4iLCJ1c2VPcGVuSW5FZGl0b3IiLCJsaW5lTnVtYmVyIiwibGluZSIsImNvbHVtbiIsImpzeHMiLCJ1bmRlZmluZWQiLCJ0YWJJbmRleCIsInJvbGUiLCJvbkNsaWNrIiwidGl0bGUiLCJjaGlsZHJlbiIsInhtbG5zIiwidmlld0JveCIsImZpbGwiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsImpzeCIsImQiLCJwb2ludHMiLCJ4MSIsInkxIiwieDIiLCJ5MiIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js": +/*!*************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js ***! + \*************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Terminal\", ({\n enumerable: true,\n get: function() {\n return Terminal;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _anser = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/anser */ \"(ssr)/./node_modules/next/dist/compiled/anser/index.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _hotlinkedtext = __webpack_require__(/*! ../hot-linked-text */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js\");\nconst _EditorLink = __webpack_require__(/*! ./EditorLink */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js\");\nfunction getFile(lines) {\n const contentFileName = lines.shift();\n if (!contentFileName) return null;\n const [fileName, line, column] = contentFileName.split(\":\", 3);\n const parsedLine = Number(line);\n const parsedColumn = Number(column);\n const hasLocation = !Number.isNaN(parsedLine) && !Number.isNaN(parsedColumn);\n return {\n fileName: hasLocation ? fileName : contentFileName,\n location: hasLocation ? {\n line: parsedLine,\n column: parsedColumn\n } : undefined\n };\n}\nfunction getImportTraceFiles(lines) {\n if (lines.some((line)=>/ReactServerComponentsError:/.test(line)) || lines.some((line)=>/Import trace for requested module:/.test(line))) {\n // Grab the lines at the end containing the files\n const files = [];\n while(/.+\\..+/.test(lines[lines.length - 1]) && !lines[lines.length - 1].includes(\":\")){\n const file = lines.pop().trim();\n files.unshift(file);\n }\n return files;\n }\n return [];\n}\nfunction getEditorLinks(content) {\n const lines = content.split(\"\\n\");\n const file = getFile(lines);\n const importTraceFiles = getImportTraceFiles(lines);\n return {\n file,\n source: lines.join(\"\\n\"),\n importTraceFiles\n };\n}\nconst Terminal = function Terminal(param) {\n let { content } = param;\n const { file, source, importTraceFiles } = _react.useMemo(()=>getEditorLinks(content), [\n content\n ]);\n const decoded = _react.useMemo(()=>{\n return _anser.default.ansiToJson(source, {\n json: true,\n use_classes: true,\n remove_empty: true\n });\n }, [\n source\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-terminal\": true,\n children: [\n file && /*#__PURE__*/ (0, _jsxruntime.jsx)(_EditorLink.EditorLink, {\n isSourceFile: true,\n file: file.fileName,\n location: file.location\n }, file.fileName),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"pre\", {\n children: [\n decoded.map((entry, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n style: {\n color: entry.fg ? \"var(--color-\" + entry.fg + \")\" : undefined,\n ...entry.decoration === \"bold\" ? {\n fontWeight: 800\n } : entry.decoration === \"italic\" ? {\n fontStyle: \"italic\"\n } : undefined\n },\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hotlinkedtext.HotlinkedText, {\n text: entry.content\n })\n }, \"terminal-entry-\" + index)),\n importTraceFiles.map((importTraceFile)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_EditorLink.EditorLink, {\n isSourceFile: false,\n file: importTraceFile\n }, importTraceFile))\n ]\n })\n ]\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Terminal.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVGVybWluYWwvVGVybWluYWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDRDQUEyQztJQUN2Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsa0hBQXlDO0FBQ2xGLE1BQU1DLDRCQUE0QkQsbUJBQU9BLENBQUMsb0hBQTBDO0FBQ3BGLE1BQU1FLGNBQWNGLG1CQUFPQSxDQUFDLGdJQUFtQjtBQUMvQyxNQUFNRyxTQUFTLFdBQVcsR0FBR0oseUJBQXlCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLHdGQUEwQjtBQUMxRixNQUFNSyxTQUFTLFdBQVcsR0FBR0osMEJBQTBCRyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLHdHQUFPO0FBQ3hFLE1BQU1NLGlCQUFpQk4sbUJBQU9BLENBQUMsMklBQW9CO0FBQ25ELE1BQU1PLGNBQWNQLG1CQUFPQSxDQUFDLG1JQUFjO0FBQzFDLFNBQVNRLFFBQVFDLEtBQUs7SUFDbEIsTUFBTUMsa0JBQWtCRCxNQUFNRSxLQUFLO0lBQ25DLElBQUksQ0FBQ0QsaUJBQWlCLE9BQU87SUFDN0IsTUFBTSxDQUFDRSxVQUFVQyxNQUFNQyxPQUFPLEdBQUdKLGdCQUFnQkssS0FBSyxDQUFDLEtBQUs7SUFDNUQsTUFBTUMsYUFBYUMsT0FBT0o7SUFDMUIsTUFBTUssZUFBZUQsT0FBT0g7SUFDNUIsTUFBTUssY0FBYyxDQUFDRixPQUFPRyxLQUFLLENBQUNKLGVBQWUsQ0FBQ0MsT0FBT0csS0FBSyxDQUFDRjtJQUMvRCxPQUFPO1FBQ0hOLFVBQVVPLGNBQWNQLFdBQVdGO1FBQ25DVyxVQUFVRixjQUFjO1lBQ3BCTixNQUFNRztZQUNORixRQUFRSTtRQUNaLElBQUlJO0lBQ1I7QUFDSjtBQUNBLFNBQVNDLG9CQUFvQmQsS0FBSztJQUM5QixJQUFJQSxNQUFNZSxJQUFJLENBQUMsQ0FBQ1gsT0FBTyw4QkFBOEJZLElBQUksQ0FBQ1osVUFBVUosTUFBTWUsSUFBSSxDQUFDLENBQUNYLE9BQU8scUNBQXFDWSxJQUFJLENBQUNaLFFBQVE7UUFDckksaURBQWlEO1FBQ2pELE1BQU1hLFFBQVEsRUFBRTtRQUNoQixNQUFNLFNBQVNELElBQUksQ0FBQ2hCLEtBQUssQ0FBQ0EsTUFBTWtCLE1BQU0sR0FBRyxFQUFFLEtBQUssQ0FBQ2xCLEtBQUssQ0FBQ0EsTUFBTWtCLE1BQU0sR0FBRyxFQUFFLENBQUNDLFFBQVEsQ0FBQyxLQUFLO1lBQ25GLE1BQU1DLE9BQU9wQixNQUFNcUIsR0FBRyxHQUFHQyxJQUFJO1lBQzdCTCxNQUFNTSxPQUFPLENBQUNIO1FBQ2xCO1FBQ0EsT0FBT0g7SUFDWDtJQUNBLE9BQU8sRUFBRTtBQUNiO0FBQ0EsU0FBU08sZUFBZUMsT0FBTztJQUMzQixNQUFNekIsUUFBUXlCLFFBQVFuQixLQUFLLENBQUM7SUFDNUIsTUFBTWMsT0FBT3JCLFFBQVFDO0lBQ3JCLE1BQU0wQixtQkFBbUJaLG9CQUFvQmQ7SUFDN0MsT0FBTztRQUNIb0I7UUFDQU8sUUFBUTNCLE1BQU00QixJQUFJLENBQUM7UUFDbkJGO0lBQ0o7QUFDSjtBQUNBLE1BQU1yQyxXQUFXLFNBQVNBLFNBQVN3QyxLQUFLO0lBQ3BDLElBQUksRUFBRUosT0FBTyxFQUFFLEdBQUdJO0lBQ2xCLE1BQU0sRUFBRVQsSUFBSSxFQUFFTyxNQUFNLEVBQUVELGdCQUFnQixFQUFFLEdBQUc5QixPQUFPa0MsT0FBTyxDQUFDLElBQUlOLGVBQWVDLFVBQVU7UUFDbkZBO0tBQ0g7SUFDRCxNQUFNTSxVQUFVbkMsT0FBT2tDLE9BQU8sQ0FBQztRQUMzQixPQUFPcEMsT0FBT3NDLE9BQU8sQ0FBQ0MsVUFBVSxDQUFDTixRQUFRO1lBQ3JDTyxNQUFNO1lBQ05DLGFBQWE7WUFDYkMsY0FBYztRQUNsQjtJQUNKLEdBQUc7UUFDQ1Q7S0FDSDtJQUNELE9BQXFCLFdBQUgsR0FBSSxJQUFHbEMsWUFBWTRDLElBQUksRUFBRSxPQUFPO1FBQzlDLHdCQUF3QjtRQUN4QkMsVUFBVTtZQUNObEIsUUFBc0IsV0FBSCxHQUFJLElBQUczQixZQUFZOEMsR0FBRyxFQUFFekMsWUFBWTBDLFVBQVUsRUFBRTtnQkFDL0RDLGNBQWM7Z0JBQ2RyQixNQUFNQSxLQUFLakIsUUFBUTtnQkFDbkJTLFVBQVVRLEtBQUtSLFFBQVE7WUFDM0IsR0FBR1EsS0FBS2pCLFFBQVE7WUFDaEIsV0FBVyxHQUFJLElBQUdWLFlBQVk0QyxJQUFJLEVBQUUsT0FBTztnQkFDdkNDLFVBQVU7b0JBQ05QLFFBQVFXLEdBQUcsQ0FBQyxDQUFDQyxPQUFPQyxRQUFzQixXQUFILEdBQUksSUFBR25ELFlBQVk4QyxHQUFHLEVBQUUsUUFBUTs0QkFDL0RNLE9BQU87Z0NBQ0hDLE9BQU9ILE1BQU1JLEVBQUUsR0FBRyxpQkFBaUJKLE1BQU1JLEVBQUUsR0FBRyxNQUFNbEM7Z0NBQ3BELEdBQUc4QixNQUFNSyxVQUFVLEtBQUssU0FBUztvQ0FDN0JDLFlBQVk7Z0NBQ2hCLElBQUlOLE1BQU1LLFVBQVUsS0FBSyxXQUFXO29DQUNoQ0UsV0FBVztnQ0FDZixJQUFJckMsU0FBUzs0QkFDakI7NEJBQ0F5QixVQUF3QixXQUFILEdBQUksSUFBRzdDLFlBQVk4QyxHQUFHLEVBQUUxQyxlQUFlc0QsYUFBYSxFQUFFO2dDQUN2RUMsTUFBTVQsTUFBTWxCLE9BQU87NEJBQ3ZCO3dCQUNKLEdBQUcsb0JBQW9CbUI7b0JBQzNCbEIsaUJBQWlCZ0IsR0FBRyxDQUFDLENBQUNXLGtCQUFnQyxXQUFILEdBQUksSUFBRzVELFlBQVk4QyxHQUFHLEVBQUV6QyxZQUFZMEMsVUFBVSxFQUFFOzRCQUMzRkMsY0FBYzs0QkFDZHJCLE1BQU1pQzt3QkFDVixHQUFHQTtpQkFDVjtZQUNMO1NBQ0g7SUFDTDtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9wRSxRQUFRK0MsT0FBTyxLQUFLLGNBQWUsT0FBTy9DLFFBQVErQyxPQUFPLEtBQUssWUFBWS9DLFFBQVErQyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU8vQyxRQUFRK0MsT0FBTyxDQUFDc0IsVUFBVSxLQUFLLGFBQWE7SUFDckt2RSxPQUFPQyxjQUFjLENBQUNDLFFBQVErQyxPQUFPLEVBQUUsY0FBYztRQUFFOUMsT0FBTztJQUFLO0lBQ25FSCxPQUFPd0UsTUFBTSxDQUFDdEUsUUFBUStDLE9BQU8sRUFBRS9DO0lBQy9CdUUsT0FBT3ZFLE9BQU8sR0FBR0EsUUFBUStDLE9BQU87QUFDbEMsRUFFQSxvQ0FBb0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL1Rlcm1pbmFsL1Rlcm1pbmFsLmpzPzI0YTMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUZXJtaW5hbFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gVGVybWluYWw7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfYW5zZXIgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvYW5zZXJcIikpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9ob3RsaW5rZWR0ZXh0ID0gcmVxdWlyZShcIi4uL2hvdC1saW5rZWQtdGV4dFwiKTtcbmNvbnN0IF9FZGl0b3JMaW5rID0gcmVxdWlyZShcIi4vRWRpdG9yTGlua1wiKTtcbmZ1bmN0aW9uIGdldEZpbGUobGluZXMpIHtcbiAgICBjb25zdCBjb250ZW50RmlsZU5hbWUgPSBsaW5lcy5zaGlmdCgpO1xuICAgIGlmICghY29udGVudEZpbGVOYW1lKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBbZmlsZU5hbWUsIGxpbmUsIGNvbHVtbl0gPSBjb250ZW50RmlsZU5hbWUuc3BsaXQoXCI6XCIsIDMpO1xuICAgIGNvbnN0IHBhcnNlZExpbmUgPSBOdW1iZXIobGluZSk7XG4gICAgY29uc3QgcGFyc2VkQ29sdW1uID0gTnVtYmVyKGNvbHVtbik7XG4gICAgY29uc3QgaGFzTG9jYXRpb24gPSAhTnVtYmVyLmlzTmFOKHBhcnNlZExpbmUpICYmICFOdW1iZXIuaXNOYU4ocGFyc2VkQ29sdW1uKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBmaWxlTmFtZTogaGFzTG9jYXRpb24gPyBmaWxlTmFtZSA6IGNvbnRlbnRGaWxlTmFtZSxcbiAgICAgICAgbG9jYXRpb246IGhhc0xvY2F0aW9uID8ge1xuICAgICAgICAgICAgbGluZTogcGFyc2VkTGluZSxcbiAgICAgICAgICAgIGNvbHVtbjogcGFyc2VkQ29sdW1uXG4gICAgICAgIH0gOiB1bmRlZmluZWRcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0SW1wb3J0VHJhY2VGaWxlcyhsaW5lcykge1xuICAgIGlmIChsaW5lcy5zb21lKChsaW5lKT0+L1JlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yOi8udGVzdChsaW5lKSkgfHwgbGluZXMuc29tZSgobGluZSk9Pi9JbXBvcnQgdHJhY2UgZm9yIHJlcXVlc3RlZCBtb2R1bGU6Ly50ZXN0KGxpbmUpKSkge1xuICAgICAgICAvLyBHcmFiIHRoZSBsaW5lcyBhdCB0aGUgZW5kIGNvbnRhaW5pbmcgdGhlIGZpbGVzXG4gICAgICAgIGNvbnN0IGZpbGVzID0gW107XG4gICAgICAgIHdoaWxlKC8uK1xcLi4rLy50ZXN0KGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKSAmJiAhbGluZXNbbGluZXMubGVuZ3RoIC0gMV0uaW5jbHVkZXMoXCI6XCIpKXtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBsaW5lcy5wb3AoKS50cmltKCk7XG4gICAgICAgICAgICBmaWxlcy51bnNoaWZ0KGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWxlcztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xufVxuZnVuY3Rpb24gZ2V0RWRpdG9yTGlua3MoY29udGVudCkge1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcbiAgICBjb25zdCBmaWxlID0gZ2V0RmlsZShsaW5lcyk7XG4gICAgY29uc3QgaW1wb3J0VHJhY2VGaWxlcyA9IGdldEltcG9ydFRyYWNlRmlsZXMobGluZXMpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGZpbGUsXG4gICAgICAgIHNvdXJjZTogbGluZXMuam9pbihcIlxcblwiKSxcbiAgICAgICAgaW1wb3J0VHJhY2VGaWxlc1xuICAgIH07XG59XG5jb25zdCBUZXJtaW5hbCA9IGZ1bmN0aW9uIFRlcm1pbmFsKHBhcmFtKSB7XG4gICAgbGV0IHsgY29udGVudCB9ID0gcGFyYW07XG4gICAgY29uc3QgeyBmaWxlLCBzb3VyY2UsIGltcG9ydFRyYWNlRmlsZXMgfSA9IF9yZWFjdC51c2VNZW1vKCgpPT5nZXRFZGl0b3JMaW5rcyhjb250ZW50KSwgW1xuICAgICAgICBjb250ZW50XG4gICAgXSk7XG4gICAgY29uc3QgZGVjb2RlZCA9IF9yZWFjdC51c2VNZW1vKCgpPT57XG4gICAgICAgIHJldHVybiBfYW5zZXIuZGVmYXVsdC5hbnNpVG9Kc29uKHNvdXJjZSwge1xuICAgICAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgICAgIHVzZV9jbGFzc2VzOiB0cnVlLFxuICAgICAgICAgICAgcmVtb3ZlX2VtcHR5OiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH0sIFtcbiAgICAgICAgc291cmNlXG4gICAgXSk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiZGl2XCIsIHtcbiAgICAgICAgXCJkYXRhLW5leHRqcy10ZXJtaW5hbFwiOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgZmlsZSAmJiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9FZGl0b3JMaW5rLkVkaXRvckxpbmssIHtcbiAgICAgICAgICAgICAgICBpc1NvdXJjZUZpbGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsZTogZmlsZS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogZmlsZS5sb2NhdGlvblxuICAgICAgICAgICAgfSwgZmlsZS5maWxlTmFtZSksXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInByZVwiLCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgZGVjb2RlZC5tYXAoKGVudHJ5LCBpbmRleCk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZW50cnkuZmcgPyBcInZhcigtLWNvbG9yLVwiICsgZW50cnkuZmcgKyBcIilcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZW50cnkuZGVjb3JhdGlvbiA9PT0gXCJib2xkXCIgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA4MDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6IGVudHJ5LmRlY29yYXRpb24gPT09IFwiaXRhbGljXCIgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U3R5bGU6IFwiaXRhbGljXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2hvdGxpbmtlZHRleHQuSG90bGlua2VkVGV4dCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBlbnRyeS5jb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFwidGVybWluYWwtZW50cnktXCIgKyBpbmRleCkpLFxuICAgICAgICAgICAgICAgICAgICBpbXBvcnRUcmFjZUZpbGVzLm1hcCgoaW1wb3J0VHJhY2VGaWxlKT0+LyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfRWRpdG9yTGluay5FZGl0b3JMaW5rLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTb3VyY2VGaWxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBpbXBvcnRUcmFjZUZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGltcG9ydFRyYWNlRmlsZSkpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VGVybWluYWwuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIlRlcm1pbmFsIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJfanN4cnVudGltZSIsIl9hbnNlciIsIl8iLCJfcmVhY3QiLCJfaG90bGlua2VkdGV4dCIsIl9FZGl0b3JMaW5rIiwiZ2V0RmlsZSIsImxpbmVzIiwiY29udGVudEZpbGVOYW1lIiwic2hpZnQiLCJmaWxlTmFtZSIsImxpbmUiLCJjb2x1bW4iLCJzcGxpdCIsInBhcnNlZExpbmUiLCJOdW1iZXIiLCJwYXJzZWRDb2x1bW4iLCJoYXNMb2NhdGlvbiIsImlzTmFOIiwibG9jYXRpb24iLCJ1bmRlZmluZWQiLCJnZXRJbXBvcnRUcmFjZUZpbGVzIiwic29tZSIsInRlc3QiLCJmaWxlcyIsImxlbmd0aCIsImluY2x1ZGVzIiwiZmlsZSIsInBvcCIsInRyaW0iLCJ1bnNoaWZ0IiwiZ2V0RWRpdG9yTGlua3MiLCJjb250ZW50IiwiaW1wb3J0VHJhY2VGaWxlcyIsInNvdXJjZSIsImpvaW4iLCJwYXJhbSIsInVzZU1lbW8iLCJkZWNvZGVkIiwiZGVmYXVsdCIsImFuc2lUb0pzb24iLCJqc29uIiwidXNlX2NsYXNzZXMiLCJyZW1vdmVfZW1wdHkiLCJqc3hzIiwiY2hpbGRyZW4iLCJqc3giLCJFZGl0b3JMaW5rIiwiaXNTb3VyY2VGaWxlIiwibWFwIiwiZW50cnkiLCJpbmRleCIsInN0eWxlIiwiY29sb3IiLCJmZyIsImRlY29yYXRpb24iLCJmb250V2VpZ2h0IiwiZm9udFN0eWxlIiwiSG90bGlua2VkVGV4dCIsInRleHQiLCJpbXBvcnRUcmFjZUZpbGUiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js ***! + \**********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Terminal\", ({\n enumerable: true,\n get: function() {\n return _Terminal.Terminal;\n }\n}));\nconst _Terminal = __webpack_require__(/*! ./Terminal */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVGVybWluYWwvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDRDQUEyQztJQUN2Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0MsVUFBVUMsUUFBUTtJQUM3QjtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1ELFlBQVlFLG1CQUFPQSxDQUFDLCtIQUFZO0FBRXRDLElBQUksQ0FBQyxPQUFPTixRQUFRTyxPQUFPLEtBQUssY0FBZSxPQUFPUCxRQUFRTyxPQUFPLEtBQUssWUFBWVAsUUFBUU8sT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPUCxRQUFRTyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLVixPQUFPQyxjQUFjLENBQUNDLFFBQVFPLE9BQU8sRUFBRSxjQUFjO1FBQUVOLE9BQU87SUFBSztJQUNuRUgsT0FBT1csTUFBTSxDQUFDVCxRQUFRTyxPQUFPLEVBQUVQO0lBQy9CVSxPQUFPVixPQUFPLEdBQUdBLFFBQVFPLE9BQU87QUFDbEMsRUFFQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL1Rlcm1pbmFsL2luZGV4LmpzPzk1MmQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUZXJtaW5hbFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX1Rlcm1pbmFsLlRlcm1pbmFsO1xuICAgIH1cbn0pO1xuY29uc3QgX1Rlcm1pbmFsID0gcmVxdWlyZShcIi4vVGVybWluYWxcIik7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJfVGVybWluYWwiLCJUZXJtaW5hbCIsInJlcXVpcmUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js ***! + \***********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-terminal] {\\n border-radius: var(--size-gap-half);\\n background-color: var(--color-ansi-bg);\\n color: var(--color-ansi-fg);\\n }\\n [data-nextjs-terminal]::selection,\\n [data-nextjs-terminal] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n [data-nextjs-terminal] * {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n [data-nextjs-terminal] > * {\\n margin: 0;\\n padding: calc(var(--size-gap) + var(--size-gap-half))\\n calc(var(--size-gap-double) + var(--size-gap-half));\\n }\\n\\n [data-nextjs-terminal] pre {\\n white-space: pre-wrap;\\n word-break: break-word;\\n }\\n\\n [data-with-open-in-editor-link] svg {\\n width: auto;\\n height: var(--size-font-small);\\n margin-left: var(--size-gap);\\n }\\n [data-with-open-in-editor-link] {\\n cursor: pointer;\\n }\\n [data-with-open-in-editor-link]:hover {\\n text-decoration: underline dotted;\\n }\\n [data-with-open-in-editor-link-source-file] {\\n border-bottom: 1px solid var(--color-ansi-bright-black);\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n }\\n [data-with-open-in-editor-link-import-trace] {\\n margin-left: var(--size-gap-double);\\n }\\n [data-nextjs-terminal] a {\\n color: inherit;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVGVybWluYWwvc3R5bGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwwQ0FBeUM7SUFDckNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQ0FBaUNDLG1CQUFPQSxDQUFDLDhIQUErQztBQUM5RixNQUFNQyxnQkFBZ0JELG1CQUFPQSxDQUFDLHlJQUE2QjtBQUMzRCxTQUFTRTtJQUNMLE1BQU1DLE9BQU9KLCtCQUErQkssQ0FBQyxDQUFDO1FBQzFDO0tBQ0g7SUFDREYsa0JBQWtCO1FBQ2QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxNQUFNTCxTQUFTLENBQUMsR0FBR0csY0FBY0ksSUFBSSxFQUFFSDtBQUV2QyxJQUFJLENBQUMsT0FBT1IsUUFBUVksT0FBTyxLQUFLLGNBQWUsT0FBT1osUUFBUVksT0FBTyxLQUFLLFlBQVlaLFFBQVFZLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1osUUFBUVksT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2YsT0FBT0MsY0FBYyxDQUFDQyxRQUFRWSxPQUFPLEVBQUUsY0FBYztRQUFFWCxPQUFPO0lBQUs7SUFDbkVILE9BQU9nQixNQUFNLENBQUNkLFFBQVFZLE9BQU8sRUFBRVo7SUFDL0JlLE9BQU9mLE9BQU8sR0FBR0EsUUFBUVksT0FBTztBQUNsQyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVGVybWluYWwvc3R5bGVzLmpzPzdkNzIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHlsZXNcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICB9XG59KTtcbmNvbnN0IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2VcIik7XG5jb25zdCBfbm9vcHRlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZVwiKTtcbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgICBjb25zdCBkYXRhID0gX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlLl8oW1xuICAgICAgICBcIlxcbiAgW2RhdGEtbmV4dGpzLXRlcm1pbmFsXSB7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXNpemUtZ2FwLWhhbGYpO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLWJnKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktZmcpO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLXRlcm1pbmFsXTo6c2VsZWN0aW9uLFxcbiAgW2RhdGEtbmV4dGpzLXRlcm1pbmFsXSAqOjpzZWxlY3Rpb24ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLXNlbGVjdGlvbik7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdICoge1xcbiAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdID4gKiB7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgcGFkZGluZzogY2FsYyh2YXIoLS1zaXplLWdhcCkgKyB2YXIoLS1zaXplLWdhcC1oYWxmKSlcXG4gICAgICBjYWxjKHZhcigtLXNpemUtZ2FwLWRvdWJsZSkgKyB2YXIoLS1zaXplLWdhcC1oYWxmKSk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdIHByZSB7XFxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG4gICAgd29yZC1icmVhazogYnJlYWstd29yZDtcXG4gIH1cXG5cXG4gIFtkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGlua10gc3ZnIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS1mb250LXNtYWxsKTtcXG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtZ2FwKTtcXG4gIH1cXG4gIFtkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGlua10ge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICB9XFxuICBbZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmtdOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgfVxcbiAgW2RhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLXNvdXJjZS1maWxlXSB7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1hbnNpLWJyaWdodC1ibGFjayk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIH1cXG4gIFtkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGluay1pbXBvcnQtdHJhY2VdIHtcXG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtZ2FwLWRvdWJsZSk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdIGEge1xcbiAgICBjb2xvcjogaW5oZXJpdDtcXG4gIH1cXG5cIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuY29uc3Qgc3R5bGVzID0gKDAsIF9ub29wdGVtcGxhdGUubm9vcCkoX3RlbXBsYXRlT2JqZWN0KCkpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHlsZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInN0eWxlcyIsIl90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSIsInJlcXVpcmUiLCJfbm9vcHRlbXBsYXRlIiwiX3RlbXBsYXRlT2JqZWN0IiwiZGF0YSIsIl8iLCJub29wIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js ***! + \*******************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Toast\", ({\n enumerable: true,\n get: function() {\n return Toast;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst Toast = function Toast(param) {\n let { onClick, children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-toast\": true,\n onClick: onClick,\n className: className,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-toast-wrapper\": true,\n children: children\n })\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Toast.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHlDQUF3QztJQUNwQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDRCQUE0QkMsbUJBQU9BLENBQUMsb0hBQTBDO0FBQ3BGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLGdJQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gsMEJBQTBCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLHdHQUFPO0FBQ3hFLE1BQU1GLFFBQVEsU0FBU0EsTUFBTU0sS0FBSztJQUM5QixJQUFJLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxTQUFTLEVBQUUsR0FBR0g7SUFDdkMsT0FBcUIsV0FBSCxHQUFJLElBQUdILFlBQVlPLEdBQUcsRUFBRSxPQUFPO1FBQzdDLHFCQUFxQjtRQUNyQkgsU0FBU0E7UUFDVEUsV0FBV0E7UUFDWEQsVUFBd0IsV0FBSCxHQUFJLElBQUdMLFlBQVlPLEdBQUcsRUFBRSxPQUFPO1lBQ2hELDZCQUE2QjtZQUM3QkYsVUFBVUE7UUFDZDtJQUNKO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT1osUUFBUWUsT0FBTyxLQUFLLGNBQWUsT0FBT2YsUUFBUWUsT0FBTyxLQUFLLFlBQVlmLFFBQVFlLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2YsUUFBUWUsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2xCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWUsT0FBTyxFQUFFLGNBQWM7UUFBRWQsT0FBTztJQUFLO0lBQ25FSCxPQUFPbUIsTUFBTSxDQUFDakIsUUFBUWUsT0FBTyxFQUFFZjtJQUMvQmtCLE9BQU9sQixPQUFPLEdBQUdBLFFBQVFlLE9BQU87QUFDbEMsRUFFQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL1RvYXN0L1RvYXN0LmpzP2RjMzQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJUb2FzdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gVG9hc3Q7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBUb2FzdCA9IGZ1bmN0aW9uIFRvYXN0KHBhcmFtKSB7XG4gICAgbGV0IHsgb25DbGljaywgY2hpbGRyZW4sIGNsYXNzTmFtZSB9ID0gcGFyYW07XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJkaXZcIiwge1xuICAgICAgICBcImRhdGEtbmV4dGpzLXRvYXN0XCI6IHRydWUsXG4gICAgICAgIG9uQ2xpY2s6IG9uQ2xpY2ssXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImRpdlwiLCB7XG4gICAgICAgICAgICBcImRhdGEtbmV4dGpzLXRvYXN0LXdyYXBwZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9KVxuICAgIH0pO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VG9hc3QuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIlRvYXN0IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJwYXJhbSIsIm9uQ2xpY2siLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsImpzeCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js ***! + \*******************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n styles: function() {\n return _styles.styles;\n },\n Toast: function() {\n return _Toast.Toast;\n }\n});\nconst _styles = __webpack_require__(/*! ./styles */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js\");\nconst _Toast = __webpack_require__(/*! ./Toast */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVG9hc3QvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLFFBQVE7UUFDSixPQUFPUSxRQUFRUixNQUFNO0lBQ3pCO0lBQ0FDLE9BQU87UUFDSCxPQUFPUSxPQUFPUixLQUFLO0lBQ3ZCO0FBQ0o7QUFDQSxNQUFNTyxVQUFVRSxtQkFBT0EsQ0FBQyx3SEFBVTtBQUNsQyxNQUFNRCxTQUFTQyxtQkFBT0EsQ0FBQyxzSEFBUztBQUVoQyxJQUFJLENBQUMsT0FBT2IsUUFBUWMsT0FBTyxLQUFLLGNBQWUsT0FBT2QsUUFBUWMsT0FBTyxLQUFLLFlBQVlkLFFBQVFjLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2QsUUFBUWMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2pCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWMsT0FBTyxFQUFFLGNBQWM7UUFBRWIsT0FBTztJQUFLO0lBQ25FSCxPQUFPa0IsTUFBTSxDQUFDaEIsUUFBUWMsT0FBTyxFQUFFZDtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRYyxPQUFPO0FBQ2xDLEVBRUEsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Ub2FzdC9pbmRleC5qcz9kM2M4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc3R5bGVzOiBudWxsLFxuICAgIFRvYXN0OiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIHN0eWxlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc3R5bGVzLnN0eWxlcztcbiAgICB9LFxuICAgIFRvYXN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9Ub2FzdC5Ub2FzdDtcbiAgICB9XG59KTtcbmNvbnN0IF9zdHlsZXMgPSByZXF1aXJlKFwiLi9zdHlsZXNcIik7XG5jb25zdCBfVG9hc3QgPSByZXF1aXJlKFwiLi9Ub2FzdFwiKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwic3R5bGVzIiwiVG9hc3QiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfc3R5bGVzIiwiX1RvYXN0IiwicmVxdWlyZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js": +/*!********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js ***! + \********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-toast] {\\n position: fixed;\\n bottom: var(--size-gap-double);\\n left: var(--size-gap-double);\\n max-width: 420px;\\n z-index: 9000;\\n }\\n\\n @media (max-width: 440px) {\\n [data-nextjs-toast] {\\n max-width: 90vw;\\n left: 5vw;\\n }\\n }\\n\\n [data-nextjs-toast-wrapper] {\\n padding: 16px;\\n border-radius: var(--size-gap-half);\\n font-weight: 500;\\n color: var(--color-ansi-bright-white);\\n background-color: var(--color-ansi-red);\\n box-shadow: 0px var(--size-gap-double) var(--size-gap-quad)\\n rgba(0, 0, 0, 0.25);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVG9hc3Qvc3R5bGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwwQ0FBeUM7SUFDckNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQ0FBaUNDLG1CQUFPQSxDQUFDLDhIQUErQztBQUM5RixNQUFNQyxnQkFBZ0JELG1CQUFPQSxDQUFDLHlJQUE2QjtBQUMzRCxTQUFTRTtJQUNMLE1BQU1DLE9BQU9KLCtCQUErQkssQ0FBQyxDQUFDO1FBQzFDO0tBQ0g7SUFDREYsa0JBQWtCO1FBQ2QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxNQUFNTCxTQUFTLENBQUMsR0FBR0csY0FBY0ksSUFBSSxFQUFFSDtBQUV2QyxJQUFJLENBQUMsT0FBT1IsUUFBUVksT0FBTyxLQUFLLGNBQWUsT0FBT1osUUFBUVksT0FBTyxLQUFLLFlBQVlaLFFBQVFZLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1osUUFBUVksT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2YsT0FBT0MsY0FBYyxDQUFDQyxRQUFRWSxPQUFPLEVBQUUsY0FBYztRQUFFWCxPQUFPO0lBQUs7SUFDbkVILE9BQU9nQixNQUFNLENBQUNkLFFBQVFZLE9BQU8sRUFBRVo7SUFDL0JlLE9BQU9mLE9BQU8sR0FBR0EsUUFBUVksT0FBTztBQUNsQyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVG9hc3Qvc3R5bGVzLmpzPzdmYzEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHlsZXNcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICB9XG59KTtcbmNvbnN0IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2VcIik7XG5jb25zdCBfbm9vcHRlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZVwiKTtcbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgICBjb25zdCBkYXRhID0gX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlLl8oW1xuICAgICAgICBcIlxcbiAgW2RhdGEtbmV4dGpzLXRvYXN0XSB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgYm90dG9tOiB2YXIoLS1zaXplLWdhcC1kb3VibGUpO1xcbiAgICBsZWZ0OiB2YXIoLS1zaXplLWdhcC1kb3VibGUpO1xcbiAgICBtYXgtd2lkdGg6IDQyMHB4O1xcbiAgICB6LWluZGV4OiA5MDAwO1xcbiAgfVxcblxcbiAgQG1lZGlhIChtYXgtd2lkdGg6IDQ0MHB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy10b2FzdF0ge1xcbiAgICAgIG1heC13aWR0aDogOTB2dztcXG4gICAgICBsZWZ0OiA1dnc7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy10b2FzdC13cmFwcGVyXSB7XFxuICAgIHBhZGRpbmc6IDE2cHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXNpemUtZ2FwLWhhbGYpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1icmlnaHQtd2hpdGUpO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLXJlZCk7XFxuICAgIGJveC1zaGFkb3c6IDBweCB2YXIoLS1zaXplLWdhcC1kb3VibGUpIHZhcigtLXNpemUtZ2FwLXF1YWQpXFxuICAgICAgcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG4gIH1cXG5cIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuY29uc3Qgc3R5bGVzID0gKDAsIF9ub29wdGVtcGxhdGUubm9vcCkoX3RlbXBsYXRlT2JqZWN0KCkpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHlsZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInN0eWxlcyIsIl90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSIsInJlcXVpcmUiLCJfbm9vcHRlbXBsYXRlIiwiX3RlbXBsYXRlT2JqZWN0IiwiZGF0YSIsIl8iLCJub29wIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js": +/*!*************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js ***! + \*************************************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"VersionStalenessInfo\", ({\n enumerable: true,\n get: function() {\n return VersionStalenessInfo;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nfunction VersionStalenessInfo(props) {\n if (!props) return null;\n const { staleness, installed, expected } = props;\n let text = \"\";\n let title = \"\";\n let indicatorClass = \"\";\n switch(staleness){\n case \"fresh\":\n text = \"Next.js is up to date\";\n title = \"Latest available version is detected (\" + installed + \").\";\n indicatorClass = \"fresh\";\n break;\n case \"stale-patch\":\n case \"stale-minor\":\n text = \"Next.js (\" + installed + \") out of date\";\n title = \"There is a newer version (\" + expected + \") available, upgrade recommended! \";\n indicatorClass = \"stale\";\n break;\n case \"stale-major\":\n {\n text = \"Next.js (\" + installed + \") is outdated\";\n title = \"An outdated version detected (latest is \" + expected + \"), upgrade is highly recommended!\";\n indicatorClass = \"outdated\";\n break;\n }\n case \"stale-prerelease\":\n {\n text = \"Next.js (\" + installed + \") is outdated\";\n title = \"There is a newer canary version (\" + expected + \") available, please upgrade! \";\n indicatorClass = \"stale\";\n break;\n }\n case \"newer-than-npm\":\n case \"unknown\":\n break;\n default:\n break;\n }\n if (!text) return null;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"small\", {\n className: \"nextjs-container-build-error-version-status\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n className: indicatorClass\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"small\", {\n className: \"nextjs-container-build-error-version-status\",\n title: title,\n children: text\n }),\n \" \",\n staleness === \"fresh\" || staleness === \"unknown\" ? null : /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n href: \"https://nextjs.org/docs/messages/version-staleness\",\n children: \"(learn more)\"\n })\n ]\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=VersionStalenessInfo.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vVmVyc2lvblN0YWxlbmVzc0luZm8uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHdEQUF1RDtJQUNuREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsa0hBQXlDO0FBQ2xGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLGdJQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gseUJBQXlCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLHdHQUFPO0FBQ3ZFLFNBQVNGLHFCQUFxQk0sS0FBSztJQUMvQixJQUFJLENBQUNBLE9BQU8sT0FBTztJQUNuQixNQUFNLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxRQUFRLEVBQUUsR0FBR0g7SUFDM0MsSUFBSUksT0FBTztJQUNYLElBQUlDLFFBQVE7SUFDWixJQUFJQyxpQkFBaUI7SUFDckIsT0FBT0w7UUFDSCxLQUFLO1lBQ0RHLE9BQU87WUFDUEMsUUFBUSwyQ0FBMkNILFlBQVk7WUFDL0RJLGlCQUFpQjtZQUNqQjtRQUNKLEtBQUs7UUFDTCxLQUFLO1lBQ0RGLE9BQU8sY0FBY0YsWUFBWTtZQUNqQ0csUUFBUSwrQkFBK0JGLFdBQVc7WUFDbERHLGlCQUFpQjtZQUNqQjtRQUNKLEtBQUs7WUFDRDtnQkFDSUYsT0FBTyxjQUFjRixZQUFZO2dCQUNqQ0csUUFBUSw2Q0FBNkNGLFdBQVc7Z0JBQ2hFRyxpQkFBaUI7Z0JBQ2pCO1lBQ0o7UUFDSixLQUFLO1lBQ0Q7Z0JBQ0lGLE9BQU8sY0FBY0YsWUFBWTtnQkFDakNHLFFBQVEsc0NBQXNDRixXQUFXO2dCQUN6REcsaUJBQWlCO2dCQUNqQjtZQUNKO1FBQ0osS0FBSztRQUNMLEtBQUs7WUFDRDtRQUNKO1lBQ0k7SUFDUjtJQUNBLElBQUksQ0FBQ0YsTUFBTSxPQUFPO0lBQ2xCLE9BQXFCLFdBQUgsR0FBSSxJQUFHUCxZQUFZVSxJQUFJLEVBQUUsU0FBUztRQUNoREMsV0FBVztRQUNYQyxVQUFVO1lBQ04sV0FBVyxHQUFJLElBQUdaLFlBQVlhLEdBQUcsRUFBRSxRQUFRO2dCQUN2Q0YsV0FBV0Y7WUFDZjtZQUNBLFdBQVcsR0FBSSxJQUFHVCxZQUFZYSxHQUFHLEVBQUUsU0FBUztnQkFDeENGLFdBQVc7Z0JBQ1hILE9BQU9BO2dCQUNQSSxVQUFVTDtZQUNkO1lBQ0E7WUFDQUgsY0FBYyxXQUFXQSxjQUFjLFlBQVksT0FBcUIsV0FBSCxHQUFJLElBQUdKLFlBQVlhLEdBQUcsRUFBRSxLQUFLO2dCQUM5RkMsUUFBUTtnQkFDUkMsS0FBSztnQkFDTEMsTUFBTTtnQkFDTkosVUFBVTtZQUNkO1NBQ0g7SUFDTDtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9uQixRQUFRd0IsT0FBTyxLQUFLLGNBQWUsT0FBT3hCLFFBQVF3QixPQUFPLEtBQUssWUFBWXhCLFFBQVF3QixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU94QixRQUFRd0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzNCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXdCLE9BQU8sRUFBRSxjQUFjO1FBQUV2QixPQUFPO0lBQUs7SUFDbkVILE9BQU80QixNQUFNLENBQUMxQixRQUFRd0IsT0FBTyxFQUFFeEI7SUFDL0IyQixPQUFPM0IsT0FBTyxHQUFHQSxRQUFRd0IsT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vVmVyc2lvblN0YWxlbmVzc0luZm8uanM/YjdkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZlcnNpb25TdGFsZW5lc3NJbmZvXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBWZXJzaW9uU3RhbGVuZXNzSW5mbztcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmZ1bmN0aW9uIFZlcnNpb25TdGFsZW5lc3NJbmZvKHByb3BzKSB7XG4gICAgaWYgKCFwcm9wcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgeyBzdGFsZW5lc3MsIGluc3RhbGxlZCwgZXhwZWN0ZWQgfSA9IHByb3BzO1xuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICBsZXQgdGl0bGUgPSBcIlwiO1xuICAgIGxldCBpbmRpY2F0b3JDbGFzcyA9IFwiXCI7XG4gICAgc3dpdGNoKHN0YWxlbmVzcyl7XG4gICAgICAgIGNhc2UgXCJmcmVzaFwiOlxuICAgICAgICAgICAgdGV4dCA9IFwiTmV4dC5qcyBpcyB1cCB0byBkYXRlXCI7XG4gICAgICAgICAgICB0aXRsZSA9IFwiTGF0ZXN0IGF2YWlsYWJsZSB2ZXJzaW9uIGlzIGRldGVjdGVkIChcIiArIGluc3RhbGxlZCArIFwiKS5cIjtcbiAgICAgICAgICAgIGluZGljYXRvckNsYXNzID0gXCJmcmVzaFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdGFsZS1wYXRjaFwiOlxuICAgICAgICBjYXNlIFwic3RhbGUtbWlub3JcIjpcbiAgICAgICAgICAgIHRleHQgPSBcIk5leHQuanMgKFwiICsgaW5zdGFsbGVkICsgXCIpIG91dCBvZiBkYXRlXCI7XG4gICAgICAgICAgICB0aXRsZSA9IFwiVGhlcmUgaXMgYSBuZXdlciB2ZXJzaW9uIChcIiArIGV4cGVjdGVkICsgXCIpIGF2YWlsYWJsZSwgdXBncmFkZSByZWNvbW1lbmRlZCEgXCI7XG4gICAgICAgICAgICBpbmRpY2F0b3JDbGFzcyA9IFwic3RhbGVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3RhbGUtbWFqb3JcIjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gXCJOZXh0LmpzIChcIiArIGluc3RhbGxlZCArIFwiKSBpcyBvdXRkYXRlZFwiO1xuICAgICAgICAgICAgICAgIHRpdGxlID0gXCJBbiBvdXRkYXRlZCB2ZXJzaW9uIGRldGVjdGVkIChsYXRlc3QgaXMgXCIgKyBleHBlY3RlZCArIFwiKSwgdXBncmFkZSBpcyBoaWdobHkgcmVjb21tZW5kZWQhXCI7XG4gICAgICAgICAgICAgICAgaW5kaWNhdG9yQ2xhc3MgPSBcIm91dGRhdGVkXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJzdGFsZS1wcmVyZWxlYXNlXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IFwiTmV4dC5qcyAoXCIgKyBpbnN0YWxsZWQgKyBcIikgaXMgb3V0ZGF0ZWRcIjtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IFwiVGhlcmUgaXMgYSBuZXdlciBjYW5hcnkgdmVyc2lvbiAoXCIgKyBleHBlY3RlZCArIFwiKSBhdmFpbGFibGUsIHBsZWFzZSB1cGdyYWRlISBcIjtcbiAgICAgICAgICAgICAgICBpbmRpY2F0b3JDbGFzcyA9IFwic3RhbGVcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm5ld2VyLXRoYW4tbnBtXCI6XG4gICAgICAgIGNhc2UgXCJ1bmtub3duXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoIXRleHQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInNtYWxsXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXNcIixcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGluZGljYXRvckNsYXNzXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzbWFsbFwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHRleHRcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICBzdGFsZW5lc3MgPT09IFwiZnJlc2hcIiB8fCBzdGFsZW5lc3MgPT09IFwidW5rbm93blwiID8gbnVsbCA6IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJhXCIsIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgICAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3ZlcnNpb24tc3RhbGVuZXNzXCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiKGxlYXJuIG1vcmUpXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VmVyc2lvblN0YWxlbmVzc0luZm8uanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIlZlcnNpb25TdGFsZW5lc3NJbmZvIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsInByb3BzIiwic3RhbGVuZXNzIiwiaW5zdGFsbGVkIiwiZXhwZWN0ZWQiLCJ0ZXh0IiwidGl0bGUiLCJpbmRpY2F0b3JDbGFzcyIsImpzeHMiLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsImpzeCIsInRhcmdldCIsInJlbCIsImhyZWYiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js": +/*!**********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js ***! + \**********************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n styles: function() {\n return _styles.styles;\n },\n VersionStalenessInfo: function() {\n return _VersionStalenessInfo.VersionStalenessInfo;\n }\n});\nconst _styles = __webpack_require__(/*! ./styles */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ./VersionStalenessInfo */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLFFBQVE7UUFDSixPQUFPUSxRQUFRUixNQUFNO0lBQ3pCO0lBQ0FDLHNCQUFzQjtRQUNsQixPQUFPUSxzQkFBc0JSLG9CQUFvQjtJQUNyRDtBQUNKO0FBQ0EsTUFBTU8sVUFBVUUsbUJBQU9BLENBQUMsdUlBQVU7QUFDbEMsTUFBTUQsd0JBQXdCQyxtQkFBT0EsQ0FBQyxtS0FBd0I7QUFFOUQsSUFBSSxDQUFDLE9BQU9iLFFBQVFjLE9BQU8sS0FBSyxjQUFlLE9BQU9kLFFBQVFjLE9BQU8sS0FBSyxZQUFZZCxRQUFRYyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9kLFFBQVFjLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktqQixPQUFPQyxjQUFjLENBQUNDLFFBQVFjLE9BQU8sRUFBRSxjQUFjO1FBQUViLE9BQU87SUFBSztJQUNuRUgsT0FBT2tCLE1BQU0sQ0FBQ2hCLFFBQVFjLE9BQU8sRUFBRWQ7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUWMsT0FBTztBQUNsQyxFQUVBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vaW5kZXguanM/MWYzZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIHN0eWxlczogbnVsbCxcbiAgICBWZXJzaW9uU3RhbGVuZXNzSW5mbzogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBzdHlsZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3N0eWxlcy5zdHlsZXM7XG4gICAgfSxcbiAgICBWZXJzaW9uU3RhbGVuZXNzSW5mbzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfVmVyc2lvblN0YWxlbmVzc0luZm8uVmVyc2lvblN0YWxlbmVzc0luZm87XG4gICAgfVxufSk7XG5jb25zdCBfc3R5bGVzID0gcmVxdWlyZShcIi4vc3R5bGVzXCIpO1xuY29uc3QgX1ZlcnNpb25TdGFsZW5lc3NJbmZvID0gcmVxdWlyZShcIi4vVmVyc2lvblN0YWxlbmVzc0luZm9cIik7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsInN0eWxlcyIsIlZlcnNpb25TdGFsZW5lc3NJbmZvIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX3N0eWxlcyIsIl9WZXJzaW9uU3RhbGVuZXNzSW5mbyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js": +/*!***********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js ***! + \***********************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n .nextjs-container-build-error-version-status {\\n flex: 1;\\n text-align: right;\\n }\\n .nextjs-container-build-error-version-status small {\\n margin-left: var(--size-gap);\\n font-size: var(--size-font-small);\\n }\\n .nextjs-container-build-error-version-status a {\\n font-size: var(--size-font-small);\\n }\\n .nextjs-container-build-error-version-status span {\\n display: inline-block;\\n width: 10px;\\n height: 10px;\\n border-radius: 5px;\\n background: var(--color-ansi-bright-black);\\n }\\n .nextjs-container-build-error-version-status span.fresh {\\n background: var(--color-ansi-green);\\n }\\n .nextjs-container-build-error-version-status span.stale {\\n background: var(--color-ansi-yellow);\\n }\\n .nextjs-container-build-error-version-status span.outdated {\\n background: var(--color-ansi-red);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vc3R5bGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwwQ0FBeUM7SUFDckNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQ0FBaUNDLG1CQUFPQSxDQUFDLDhIQUErQztBQUM5RixNQUFNQyxnQkFBZ0JELG1CQUFPQSxDQUFDLHlJQUE2QjtBQUMzRCxTQUFTRTtJQUNMLE1BQU1DLE9BQU9KLCtCQUErQkssQ0FBQyxDQUFDO1FBQzFDO0tBQ0g7SUFDREYsa0JBQWtCO1FBQ2QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxNQUFNTCxTQUFTLENBQUMsR0FBR0csY0FBY0ksSUFBSSxFQUFFSDtBQUV2QyxJQUFJLENBQUMsT0FBT1IsUUFBUVksT0FBTyxLQUFLLGNBQWUsT0FBT1osUUFBUVksT0FBTyxLQUFLLFlBQVlaLFFBQVFZLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1osUUFBUVksT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2YsT0FBT0MsY0FBYyxDQUFDQyxRQUFRWSxPQUFPLEVBQUUsY0FBYztRQUFFWCxPQUFPO0lBQUs7SUFDbkVILE9BQU9nQixNQUFNLENBQUNkLFFBQVFZLE9BQU8sRUFBRVo7SUFDL0JlLE9BQU9mLE9BQU8sR0FBR0EsUUFBUVksT0FBTztBQUNsQyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vc3R5bGVzLmpzPzE4ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHlsZXNcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICB9XG59KTtcbmNvbnN0IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2VcIik7XG5jb25zdCBfbm9vcHRlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZVwiKTtcbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgICBjb25zdCBkYXRhID0gX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlLl8oW1xuICAgICAgICBcIlxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMge1xcbiAgICBmbGV4OiAxO1xcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzIHNtYWxsIHtcXG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtZ2FwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLWZvbnQtc21hbGwpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMgYSB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS1mb250LXNtYWxsKTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzIHNwYW4ge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHdpZHRoOiAxMHB4O1xcbiAgICBoZWlnaHQ6IDEwcHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYW5zaS1icmlnaHQtYmxhY2spO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMgc3Bhbi5mcmVzaCB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFuc2ktZ3JlZW4pO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMgc3Bhbi5zdGFsZSB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFuc2kteWVsbG93KTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzIHNwYW4ub3V0ZGF0ZWQge1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hbnNpLXJlZCk7XFxuICB9XFxuXCJcbiAgICBdKTtcbiAgICBfdGVtcGxhdGVPYmplY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcbiAgICByZXR1cm4gZGF0YTtcbn1cbmNvbnN0IHN0eWxlcyA9ICgwLCBfbm9vcHRlbXBsYXRlLm5vb3ApKF90ZW1wbGF0ZU9iamVjdCgpKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3R5bGVzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJzdHlsZXMiLCJfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UiLCJyZXF1aXJlIiwiX25vb3B0ZW1wbGF0ZSIsIl90ZW1wbGF0ZU9iamVjdCIsImRhdGEiLCJfIiwibm9vcCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/get-words-and-whitespaces.js": +/*!*************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/get-words-and-whitespaces.js ***! + \*************************************************************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("// Returns true if the given character is a whitespace character, false otherwise.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getWordsAndWhitespaces\", ({\n enumerable: true,\n get: function() {\n return getWordsAndWhitespaces;\n }\n}));\nfunction isWhitespace(char) {\n return char === \" \" || char === \"\\n\" || char === \"\t\" || char === \"\\r\";\n}\nfunction getWordsAndWhitespaces(text) {\n const wordsAndWhitespaces = [];\n let current = \"\";\n let currentIsWhitespace = false;\n for (const char of text){\n if (current.length === 0) {\n current += char;\n currentIsWhitespace = isWhitespace(char);\n continue;\n }\n const nextIsWhitespace = isWhitespace(char);\n if (currentIsWhitespace === nextIsWhitespace) {\n current += char;\n } else {\n wordsAndWhitespaces.push(current);\n current = char;\n currentIsWhitespace = nextIsWhitespace;\n }\n }\n if (current.length > 0) {\n wordsAndWhitespaces.push(current);\n }\n return wordsAndWhitespaces;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-words-and-whitespaces.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvaG90LWxpbmtlZC10ZXh0L2dldC13b3Jkcy1hbmQtd2hpdGVzcGFjZXMuanMiLCJtYXBwaW5ncyI6IkFBQUEsa0ZBQWtGO0FBQ3JFO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwwREFBeUQ7SUFDckRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixTQUFTQyxhQUFhQyxJQUFJO0lBQ3RCLE9BQU9BLFNBQVMsT0FBT0EsU0FBUyxRQUFRQSxTQUFTLE9BQU9BLFNBQVM7QUFDckU7QUFDQSxTQUFTRix1QkFBdUJHLElBQUk7SUFDaEMsTUFBTUMsc0JBQXNCLEVBQUU7SUFDOUIsSUFBSUMsVUFBVTtJQUNkLElBQUlDLHNCQUFzQjtJQUMxQixLQUFLLE1BQU1KLFFBQVFDLEtBQUs7UUFDcEIsSUFBSUUsUUFBUUUsTUFBTSxLQUFLLEdBQUc7WUFDdEJGLFdBQVdIO1lBQ1hJLHNCQUFzQkwsYUFBYUM7WUFDbkM7UUFDSjtRQUNBLE1BQU1NLG1CQUFtQlAsYUFBYUM7UUFDdEMsSUFBSUksd0JBQXdCRSxrQkFBa0I7WUFDMUNILFdBQVdIO1FBQ2YsT0FBTztZQUNIRSxvQkFBb0JLLElBQUksQ0FBQ0o7WUFDekJBLFVBQVVIO1lBQ1ZJLHNCQUFzQkU7UUFDMUI7SUFDSjtJQUNBLElBQUlILFFBQVFFLE1BQU0sR0FBRyxHQUFHO1FBQ3BCSCxvQkFBb0JLLElBQUksQ0FBQ0o7SUFDN0I7SUFDQSxPQUFPRDtBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU9SLFFBQVFjLE9BQU8sS0FBSyxjQUFlLE9BQU9kLFFBQVFjLE9BQU8sS0FBSyxZQUFZZCxRQUFRYyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9kLFFBQVFjLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktqQixPQUFPQyxjQUFjLENBQUNDLFFBQVFjLE9BQU8sRUFBRSxjQUFjO1FBQUViLE9BQU87SUFBSztJQUNuRUgsT0FBT2tCLE1BQU0sQ0FBQ2hCLFFBQVFjLE9BQU8sRUFBRWQ7SUFDL0JpQixPQUFPakIsT0FBTyxHQUFHQSxRQUFRYyxPQUFPO0FBQ2xDLEVBRUEscURBQXFEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9ob3QtbGlua2VkLXRleHQvZ2V0LXdvcmRzLWFuZC13aGl0ZXNwYWNlcy5qcz8yNDZmIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gY2hhcmFjdGVyIGlzIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0V29yZHNBbmRXaGl0ZXNwYWNlc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0V29yZHNBbmRXaGl0ZXNwYWNlcztcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjaGFyKSB7XG4gICAgcmV0dXJuIGNoYXIgPT09IFwiIFwiIHx8IGNoYXIgPT09IFwiXFxuXCIgfHwgY2hhciA9PT0gXCJcdFwiIHx8IGNoYXIgPT09IFwiXFxyXCI7XG59XG5mdW5jdGlvbiBnZXRXb3Jkc0FuZFdoaXRlc3BhY2VzKHRleHQpIHtcbiAgICBjb25zdCB3b3Jkc0FuZFdoaXRlc3BhY2VzID0gW107XG4gICAgbGV0IGN1cnJlbnQgPSBcIlwiO1xuICAgIGxldCBjdXJyZW50SXNXaGl0ZXNwYWNlID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIHRleHQpe1xuICAgICAgICBpZiAoY3VycmVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGN1cnJlbnQgKz0gY2hhcjtcbiAgICAgICAgICAgIGN1cnJlbnRJc1doaXRlc3BhY2UgPSBpc1doaXRlc3BhY2UoY2hhcik7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXh0SXNXaGl0ZXNwYWNlID0gaXNXaGl0ZXNwYWNlKGNoYXIpO1xuICAgICAgICBpZiAoY3VycmVudElzV2hpdGVzcGFjZSA9PT0gbmV4dElzV2hpdGVzcGFjZSkge1xuICAgICAgICAgICAgY3VycmVudCArPSBjaGFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29yZHNBbmRXaGl0ZXNwYWNlcy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICAgICAgY3VycmVudCA9IGNoYXI7XG4gICAgICAgICAgICBjdXJyZW50SXNXaGl0ZXNwYWNlID0gbmV4dElzV2hpdGVzcGFjZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3VycmVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHdvcmRzQW5kV2hpdGVzcGFjZXMucHVzaChjdXJyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHdvcmRzQW5kV2hpdGVzcGFjZXM7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC13b3Jkcy1hbmQtd2hpdGVzcGFjZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImdldFdvcmRzQW5kV2hpdGVzcGFjZXMiLCJpc1doaXRlc3BhY2UiLCJjaGFyIiwidGV4dCIsIndvcmRzQW5kV2hpdGVzcGFjZXMiLCJjdXJyZW50IiwiY3VycmVudElzV2hpdGVzcGFjZSIsImxlbmd0aCIsIm5leHRJc1doaXRlc3BhY2UiLCJwdXNoIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/get-words-and-whitespaces.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js": +/*!*****************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js ***! + \*****************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HotlinkedText\", ({\n enumerable: true,\n get: function() {\n return HotlinkedText;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _getwordsandwhitespaces = __webpack_require__(/*! ./get-words-and-whitespaces */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/get-words-and-whitespaces.js\");\nconst linkRegex = /https?:\\/\\/[^\\s/$.?#].[^\\s\"]*/i;\nconst HotlinkedText = function HotlinkedText(props) {\n const { text } = props;\n const wordsAndWhitespaces = (0, _getwordsandwhitespaces.getWordsAndWhitespaces)(text);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: linkRegex.test(text) ? wordsAndWhitespaces.map((word, index)=>{\n if (linkRegex.test(word)) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.default.Fragment, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n href: word,\n children: word\n })\n }, \"link-\" + index);\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.default.Fragment, {\n children: word\n }, \"text-\" + index);\n }) : text\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvaG90LWxpbmtlZC10ZXh0L2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxpREFBZ0Q7SUFDNUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGtIQUF5QztBQUNsRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxnSUFBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyx3R0FBTztBQUN2RSxNQUFNSSwwQkFBMEJKLG1CQUFPQSxDQUFDLHdLQUE2QjtBQUNyRSxNQUFNSyxZQUFZO0FBQ2xCLE1BQU1QLGdCQUFnQixTQUFTQSxjQUFjUSxLQUFLO0lBQzlDLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdEO0lBQ2pCLE1BQU1FLHNCQUFzQixDQUFDLEdBQUdKLHdCQUF3Qkssc0JBQXNCLEVBQUVGO0lBQ2hGLE9BQXFCLFdBQUgsR0FBSSxJQUFHTixZQUFZUyxHQUFHLEVBQUVULFlBQVlVLFFBQVEsRUFBRTtRQUM1REMsVUFBVVAsVUFBVVEsSUFBSSxDQUFDTixRQUFRQyxvQkFBb0JNLEdBQUcsQ0FBQyxDQUFDQyxNQUFNQztZQUM1RCxJQUFJWCxVQUFVUSxJQUFJLENBQUNFLE9BQU87Z0JBQ3RCLE9BQXFCLFdBQUgsR0FBSSxJQUFHZCxZQUFZUyxHQUFHLEVBQUVSLE9BQU9lLE9BQU8sQ0FBQ04sUUFBUSxFQUFFO29CQUMvREMsVUFBd0IsV0FBSCxHQUFJLElBQUdYLFlBQVlTLEdBQUcsRUFBRSxLQUFLO3dCQUM5Q1EsTUFBTUg7d0JBQ05ILFVBQVVHO29CQUNkO2dCQUNKLEdBQUcsVUFBVUM7WUFDakI7WUFDQSxPQUFxQixXQUFILEdBQUksSUFBR2YsWUFBWVMsR0FBRyxFQUFFUixPQUFPZSxPQUFPLENBQUNOLFFBQVEsRUFBRTtnQkFDL0RDLFVBQVVHO1lBQ2QsR0FBRyxVQUFVQztRQUNqQixLQUFLVDtJQUNUO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT2IsUUFBUXVCLE9BQU8sS0FBSyxjQUFlLE9BQU92QixRQUFRdUIsT0FBTyxLQUFLLFlBQVl2QixRQUFRdUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPdkIsUUFBUXVCLE9BQU8sQ0FBQ0UsVUFBVSxLQUFLLGFBQWE7SUFDckszQixPQUFPQyxjQUFjLENBQUNDLFFBQVF1QixPQUFPLEVBQUUsY0FBYztRQUFFdEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPNEIsTUFBTSxDQUFDMUIsUUFBUXVCLE9BQU8sRUFBRXZCO0lBQy9CMkIsT0FBTzNCLE9BQU8sR0FBR0EsUUFBUXVCLE9BQU87QUFDbEMsRUFFQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL2hvdC1saW5rZWQtdGV4dC9pbmRleC5qcz85NWEzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSG90bGlua2VkVGV4dFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSG90bGlua2VkVGV4dDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9nZXR3b3Jkc2FuZHdoaXRlc3BhY2VzID0gcmVxdWlyZShcIi4vZ2V0LXdvcmRzLWFuZC13aGl0ZXNwYWNlc1wiKTtcbmNvbnN0IGxpbmtSZWdleCA9IC9odHRwcz86XFwvXFwvW15cXHMvJC4/I10uW15cXHNcIl0qL2k7XG5jb25zdCBIb3RsaW5rZWRUZXh0ID0gZnVuY3Rpb24gSG90bGlua2VkVGV4dChwcm9wcykge1xuICAgIGNvbnN0IHsgdGV4dCB9ID0gcHJvcHM7XG4gICAgY29uc3Qgd29yZHNBbmRXaGl0ZXNwYWNlcyA9ICgwLCBfZ2V0d29yZHNhbmR3aGl0ZXNwYWNlcy5nZXRXb3Jkc0FuZFdoaXRlc3BhY2VzKSh0ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogbGlua1JlZ2V4LnRlc3QodGV4dCkgPyB3b3Jkc0FuZFdoaXRlc3BhY2VzLm1hcCgod29yZCwgaW5kZXgpPT57XG4gICAgICAgICAgICBpZiAobGlua1JlZ2V4LnRlc3Qod29yZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfcmVhY3QuZGVmYXVsdC5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImFcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogd29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB3b3JkXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgXCJsaW5rLVwiICsgaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX3JlYWN0LmRlZmF1bHQuRnJhZ21lbnQsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogd29yZFxuICAgICAgICAgICAgfSwgXCJ0ZXh0LVwiICsgaW5kZXgpO1xuICAgICAgICB9KSA6IHRleHRcbiAgICB9KTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJIb3RsaW5rZWRUZXh0IiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9nZXR3b3Jkc2FuZHdoaXRlc3BhY2VzIiwibGlua1JlZ2V4IiwicHJvcHMiLCJ0ZXh0Iiwid29yZHNBbmRXaGl0ZXNwYWNlcyIsImdldFdvcmRzQW5kV2hpdGVzcGFjZXMiLCJqc3giLCJGcmFnbWVudCIsImNoaWxkcmVuIiwidGVzdCIsIm1hcCIsIndvcmQiLCJpbmRleCIsImRlZmF1bHQiLCJocmVmIiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js ***! + \*****************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n BuildError: function() {\n return BuildError;\n },\n styles: function() {\n return styles;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _Dialog = __webpack_require__(/*! ../components/Dialog */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\");\nconst _Overlay = __webpack_require__(/*! ../components/Overlay */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js\");\nconst _Terminal = __webpack_require__(/*! ../components/Terminal */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ../components/VersionStalenessInfo */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\");\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n .nextjs-container-build-error-header {\\n display: flex;\\n align-items: center;\\n }\\n .nextjs-container-build-error-header > h4 {\\n line-height: 1.5;\\n margin: 0;\\n padding: 0;\\n }\\n\\n .nextjs-container-build-error-body footer {\\n margin-top: var(--size-gap);\\n }\\n .nextjs-container-build-error-body footer p {\\n margin: 0;\\n }\\n\\n .nextjs-container-build-error-body small {\\n color: #757575;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst BuildError = function BuildError(param) {\n let { message, versionInfo } = param;\n const noop = _react.useCallback(()=>{}, []);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Overlay.Overlay, {\n fixed: true,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.Dialog, {\n type: \"error\",\n \"aria-labelledby\": \"nextjs__container_build_error_label\",\n \"aria-describedby\": \"nextjs__container_build_error_desc\",\n onClose: noop,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogContent, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogHeader, {\n className: \"nextjs-container-build-error-header\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h4\", {\n id: \"nextjs__container_build_error_label\",\n children: \"Failed to compile\"\n }),\n versionInfo ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_VersionStalenessInfo.VersionStalenessInfo, {\n ...versionInfo\n }) : null\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogBody, {\n className: \"nextjs-container-build-error-body\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Terminal.Terminal, {\n content: message\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"footer\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n id: \"nextjs__container_build_error_desc\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"small\", {\n children: \"This error occurred during the build process and can only be dismissed by fixing the error.\"\n })\n })\n })\n ]\n })\n ]\n })\n })\n });\n};\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=BuildError.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9CdWlsZEVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxZQUFZO1FBQ1IsT0FBT0E7SUFDWDtJQUNBQyxRQUFRO1FBQ0osT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sNEJBQTRCQyxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUMsaUNBQWlDRCxtQkFBT0EsQ0FBQyw4SEFBK0M7QUFDOUYsTUFBTUUsY0FBY0YsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1HLFNBQVMsV0FBVyxHQUFHSiwwQkFBMEJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTUssVUFBVUwsbUJBQU9BLENBQUMsb0lBQXNCO0FBQzlDLE1BQU1NLFdBQVdOLG1CQUFPQSxDQUFDLHNJQUF1QjtBQUNoRCxNQUFNTyxZQUFZUCxtQkFBT0EsQ0FBQyx3SUFBd0I7QUFDbEQsTUFBTVEsd0JBQXdCUixtQkFBT0EsQ0FBQyxnS0FBb0M7QUFDMUUsTUFBTVMsZ0JBQWdCVCxtQkFBT0EsQ0FBQyxzSUFBMEI7QUFDeEQsU0FBU1U7SUFDTCxNQUFNQyxPQUFPViwrQkFBK0JHLENBQUMsQ0FBQztRQUMxQztLQUNIO0lBQ0RNLGtCQUFrQjtRQUNkLE9BQU9DO0lBQ1g7SUFDQSxPQUFPQTtBQUNYO0FBQ0EsTUFBTXBCLGFBQWEsU0FBU0EsV0FBV3FCLEtBQUs7SUFDeEMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsRUFBRSxHQUFHRjtJQUMvQixNQUFNRyxPQUFPWixPQUFPYSxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQUU7SUFDMUMsT0FBcUIsV0FBSCxHQUFJLElBQUdkLFlBQVllLEdBQUcsRUFBRVgsU0FBU1ksT0FBTyxFQUFFO1FBQ3hEQyxPQUFPO1FBQ1BDLFVBQXdCLFdBQUgsR0FBSSxJQUFHbEIsWUFBWWUsR0FBRyxFQUFFWixRQUFRZ0IsTUFBTSxFQUFFO1lBQ3pEQyxNQUFNO1lBQ04sbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQkMsU0FBU1I7WUFDVEssVUFBd0IsV0FBSCxHQUFJLElBQUdsQixZQUFZc0IsSUFBSSxFQUFFbkIsUUFBUW9CLGFBQWEsRUFBRTtnQkFDakVMLFVBQVU7b0JBQ04sV0FBVyxHQUFJLElBQUdsQixZQUFZc0IsSUFBSSxFQUFFbkIsUUFBUXFCLFlBQVksRUFBRTt3QkFDdERDLFdBQVc7d0JBQ1hQLFVBQVU7NEJBQ04sV0FBVyxHQUFJLElBQUdsQixZQUFZZSxHQUFHLEVBQUUsTUFBTTtnQ0FDckNXLElBQUk7Z0NBQ0pSLFVBQVU7NEJBQ2Q7NEJBQ0FOLGNBQTRCLFdBQUgsR0FBSSxJQUFHWixZQUFZZSxHQUFHLEVBQUVULHNCQUFzQnFCLG9CQUFvQixFQUFFO2dDQUN6RixHQUFHZixXQUFXOzRCQUNsQixLQUFLO3lCQUNSO29CQUNMO29CQUNBLFdBQVcsR0FBSSxJQUFHWixZQUFZc0IsSUFBSSxFQUFFbkIsUUFBUXlCLFVBQVUsRUFBRTt3QkFDcERILFdBQVc7d0JBQ1hQLFVBQVU7NEJBQ04sV0FBVyxHQUFJLElBQUdsQixZQUFZZSxHQUFHLEVBQUVWLFVBQVV3QixRQUFRLEVBQUU7Z0NBQ25EQyxTQUFTbkI7NEJBQ2I7NEJBQ0EsV0FBVyxHQUFJLElBQUdYLFlBQVllLEdBQUcsRUFBRSxVQUFVO2dDQUN6Q0csVUFBd0IsV0FBSCxHQUFJLElBQUdsQixZQUFZZSxHQUFHLEVBQUUsS0FBSztvQ0FDOUNXLElBQUk7b0NBQ0pSLFVBQXdCLFdBQUgsR0FBSSxJQUFHbEIsWUFBWWUsR0FBRyxFQUFFLFNBQVM7d0NBQ2xERyxVQUFVO29DQUNkO2dDQUNKOzRCQUNKO3lCQUNIO29CQUNMO2lCQUNIO1lBQ0w7UUFDSjtJQUNKO0FBQ0o7QUFDQSxNQUFNNUIsU0FBUyxDQUFDLEdBQUdpQixjQUFjTSxJQUFJLEVBQUVMO0FBRXZDLElBQUksQ0FBQyxPQUFPdEIsUUFBUTZDLE9BQU8sS0FBSyxjQUFlLE9BQU83QyxRQUFRNkMsT0FBTyxLQUFLLFlBQVk3QyxRQUFRNkMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPN0MsUUFBUTZDLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktoRCxPQUFPQyxjQUFjLENBQUNDLFFBQVE2QyxPQUFPLEVBQUUsY0FBYztRQUFFNUMsT0FBTztJQUFLO0lBQ25FSCxPQUFPaUQsTUFBTSxDQUFDL0MsUUFBUTZDLE9BQU8sRUFBRTdDO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVE2QyxPQUFPO0FBQ2xDLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL0J1aWxkRXJyb3IuanM/NWJkMyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEJ1aWxkRXJyb3I6IG51bGwsXG4gICAgc3R5bGVzOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIEJ1aWxkRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQnVpbGRFcnJvcjtcbiAgICB9LFxuICAgIHN0eWxlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX0RpYWxvZyA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL0RpYWxvZ1wiKTtcbmNvbnN0IF9PdmVybGF5ID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvT3ZlcmxheVwiKTtcbmNvbnN0IF9UZXJtaW5hbCA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL1Rlcm1pbmFsXCIpO1xuY29uc3QgX1ZlcnNpb25TdGFsZW5lc3NJbmZvID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm9cIik7XG5jb25zdCBfbm9vcHRlbXBsYXRlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZVwiKTtcbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgICBjb25zdCBkYXRhID0gX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlLl8oW1xuICAgICAgICBcIlxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItaGVhZGVyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLWhlYWRlciA+IGg0IHtcXG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgfVxcblxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItYm9keSBmb290ZXIge1xcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLWdhcCk7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci1ib2R5IGZvb3RlciBwIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcblxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItYm9keSBzbWFsbCB7XFxuICAgIGNvbG9yOiAjNzU3NTc1O1xcbiAgfVxcblwiXG4gICAgXSk7XG4gICAgX3RlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIGRhdGE7XG59XG5jb25zdCBCdWlsZEVycm9yID0gZnVuY3Rpb24gQnVpbGRFcnJvcihwYXJhbSkge1xuICAgIGxldCB7IG1lc3NhZ2UsIHZlcnNpb25JbmZvIH0gPSBwYXJhbTtcbiAgICBjb25zdCBub29wID0gX3JlYWN0LnVzZUNhbGxiYWNrKCgpPT57fSwgW10pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9PdmVybGF5Lk92ZXJsYXksIHtcbiAgICAgICAgZml4ZWQ6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9EaWFsb2cuRGlhbG9nLCB7XG4gICAgICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBcIm5leHRqc19fY29udGFpbmVyX2J1aWxkX2Vycm9yX2xhYmVsXCIsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogXCJuZXh0anNfX2NvbnRhaW5lcl9idWlsZF9lcnJvcl9kZXNjXCIsXG4gICAgICAgICAgICBvbkNsb3NlOiBub29wLFxuICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9EaWFsb2cuRGlhbG9nQ29udGVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9EaWFsb2cuRGlhbG9nSGVhZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwibmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci1oZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImg0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwibmV4dGpzX19jb250YWluZXJfYnVpbGRfZXJyb3JfbGFiZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiRmFpbGVkIHRvIGNvbXBpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25JbmZvID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfVmVyc2lvblN0YWxlbmVzc0luZm8uVmVyc2lvblN0YWxlbmVzc0luZm8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udmVyc2lvbkluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9EaWFsb2cuRGlhbG9nQm9keSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItYm9keVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9UZXJtaW5hbC5UZXJtaW5hbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImZvb3RlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJuZXh0anNfX2NvbnRhaW5lcl9idWlsZF9lcnJvcl9kZXNjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInNtYWxsXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJUaGlzIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgY2FuIG9ubHkgYmUgZGlzbWlzc2VkIGJ5IGZpeGluZyB0aGUgZXJyb3IuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH0pO1xufTtcbmNvbnN0IHN0eWxlcyA9ICgwLCBfbm9vcHRlbXBsYXRlLm5vb3ApKF90ZW1wbGF0ZU9iamVjdCgpKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QnVpbGRFcnJvci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJCdWlsZEVycm9yIiwic3R5bGVzIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfRGlhbG9nIiwiX092ZXJsYXkiLCJfVGVybWluYWwiLCJfVmVyc2lvblN0YWxlbmVzc0luZm8iLCJfbm9vcHRlbXBsYXRlIiwiX3RlbXBsYXRlT2JqZWN0IiwiZGF0YSIsInBhcmFtIiwibWVzc2FnZSIsInZlcnNpb25JbmZvIiwibm9vcCIsInVzZUNhbGxiYWNrIiwianN4IiwiT3ZlcmxheSIsImZpeGVkIiwiY2hpbGRyZW4iLCJEaWFsb2ciLCJ0eXBlIiwib25DbG9zZSIsImpzeHMiLCJEaWFsb2dDb250ZW50IiwiRGlhbG9nSGVhZGVyIiwiY2xhc3NOYW1lIiwiaWQiLCJWZXJzaW9uU3RhbGVuZXNzSW5mbyIsIkRpYWxvZ0JvZHkiLCJUZXJtaW5hbCIsImNvbnRlbnQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js": +/*!*************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js ***! + \*************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Errors: function() {\n return Errors;\n },\n styles: function() {\n return styles;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _erroroverlayreducer = __webpack_require__(/*! ../error-overlay-reducer */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js\");\nconst _Dialog = __webpack_require__(/*! ../components/Dialog */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\");\nconst _LeftRightDialogHeader = __webpack_require__(/*! ../components/LeftRightDialogHeader */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js\");\nconst _Overlay = __webpack_require__(/*! ../components/Overlay */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js\");\nconst _Toast = __webpack_require__(/*! ../components/Toast */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js\");\nconst _getErrorByType = __webpack_require__(/*! ../helpers/getErrorByType */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js\");\nconst _nodeStackFrames = __webpack_require__(/*! ../helpers/nodeStackFrames */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js\");\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nconst _CloseIcon = __webpack_require__(/*! ../icons/CloseIcon */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js\");\nconst _RuntimeError = __webpack_require__(/*! ./RuntimeError */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ../components/VersionStalenessInfo */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\");\nconst _hotlinkedtext = __webpack_require__(/*! ../components/hot-linked-text */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n .nextjs-container-errors-header > h1 {\\n font-size: var(--size-font-big);\\n line-height: var(--size-font-bigger);\\n font-weight: bold;\\n margin: 0;\\n margin-top: calc(var(--size-gap-double) + var(--size-gap-half));\\n }\\n .nextjs-container-errors-header small {\\n font-size: var(--size-font-small);\\n color: var(--color-accents-1);\\n margin-left: var(--size-gap-double);\\n }\\n .nextjs-container-errors-header small > span {\\n font-family: var(--font-stack-monospace);\\n }\\n .nextjs-container-errors-header > p {\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-font-small);\\n line-height: var(--size-font-big);\\n font-weight: bold;\\n margin: 0;\\n margin-top: var(--size-gap-half);\\n color: var(--color-ansi-red);\\n white-space: pre-wrap;\\n }\\n .nextjs-container-errors-header > div > small {\\n margin: 0;\\n margin-top: var(--size-gap-half);\\n }\\n .nextjs-container-errors-header > p > a {\\n color: var(--color-ansi-red);\\n }\\n\\n .nextjs-container-errors-body > h2:not(:first-child) {\\n margin-top: calc(var(--size-gap-double) + var(--size-gap));\\n }\\n .nextjs-container-errors-body > h2 {\\n margin-bottom: var(--size-gap);\\n font-size: var(--size-font-big);\\n }\\n\\n .nextjs-toast-errors-parent {\\n cursor: pointer;\\n transition: transform 0.2s ease;\\n }\\n .nextjs-toast-errors-parent:hover {\\n transform: scale(1.1);\\n }\\n .nextjs-toast-errors {\\n display: flex;\\n align-items: center;\\n justify-content: flex-start;\\n }\\n .nextjs-toast-errors > svg {\\n margin-right: var(--size-gap);\\n }\\n .nextjs-toast-errors-hide-button {\\n margin-left: var(--size-gap-triple);\\n border: none;\\n background: none;\\n color: var(--color-ansi-bright-white);\\n padding: 0;\\n transition: opacity 0.25s ease;\\n opacity: 0.7;\\n }\\n .nextjs-toast-errors-hide-button:hover {\\n opacity: 1;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction getErrorSignature(ev) {\n const { event } = ev;\n switch(event.type){\n case _erroroverlayreducer.ACTION_UNHANDLED_ERROR:\n case _erroroverlayreducer.ACTION_UNHANDLED_REJECTION:\n {\n return event.reason.name + \"::\" + event.reason.message + \"::\" + event.reason.stack;\n }\n default:\n {}\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = event;\n return \"\";\n}\nconst Errors = function Errors(param) {\n let { errors, initialDisplayState, versionInfo } = param;\n const [lookups, setLookups] = _react.useState({});\n const [readyErrors, nextError] = _react.useMemo(()=>{\n let ready = [];\n let next = null;\n // Ensure errors are displayed in the order they occurred in:\n for(let idx = 0; idx < errors.length; ++idx){\n const e = errors[idx];\n const { id } = e;\n if (id in lookups) {\n ready.push(lookups[id]);\n continue;\n }\n // Check for duplicate errors\n if (idx > 0) {\n const prev = errors[idx - 1];\n if (getErrorSignature(prev) === getErrorSignature(e)) {\n continue;\n }\n }\n next = e;\n break;\n }\n return [\n ready,\n next\n ];\n }, [\n errors,\n lookups\n ]);\n const isLoading = _react.useMemo(()=>{\n return readyErrors.length < 1 && Boolean(errors.length);\n }, [\n errors.length,\n readyErrors.length\n ]);\n _react.useEffect(()=>{\n if (nextError == null) {\n return;\n }\n let mounted = true;\n (0, _getErrorByType.getErrorByType)(nextError).then((resolved)=>{\n // We don't care if the desired error changed while we were resolving,\n // thus we're not tracking it using a ref. Once the work has been done,\n // we'll store it.\n if (mounted) {\n setLookups((m)=>({\n ...m,\n [resolved.id]: resolved\n }));\n }\n }, ()=>{\n // TODO: handle this, though an edge case\n });\n return ()=>{\n mounted = false;\n };\n }, [\n nextError\n ]);\n const [displayState, setDisplayState] = _react.useState(initialDisplayState);\n const [activeIdx, setActiveIndex] = _react.useState(0);\n const previous = _react.useCallback((e)=>{\n e == null ? void 0 : e.preventDefault();\n setActiveIndex((v)=>Math.max(0, v - 1));\n }, []);\n const next = _react.useCallback((e)=>{\n e == null ? void 0 : e.preventDefault();\n setActiveIndex((v)=>Math.max(0, Math.min(readyErrors.length - 1, v + 1)));\n }, [\n readyErrors.length\n ]);\n var _readyErrors_activeIdx;\n const activeError = _react.useMemo(()=>(_readyErrors_activeIdx = readyErrors[activeIdx]) != null ? _readyErrors_activeIdx : null, [\n activeIdx,\n readyErrors\n ]);\n // Reset component state when there are no errors to be displayed.\n // This should never happen, but lets handle it.\n _react.useEffect(()=>{\n if (errors.length < 1) {\n setLookups({});\n setDisplayState(\"hidden\");\n setActiveIndex(0);\n }\n }, [\n errors.length\n ]);\n const minimize = _react.useCallback((e)=>{\n e == null ? void 0 : e.preventDefault();\n setDisplayState(\"minimized\");\n }, []);\n const hide = _react.useCallback((e)=>{\n e == null ? void 0 : e.preventDefault();\n setDisplayState(\"hidden\");\n }, []);\n const fullscreen = _react.useCallback((e)=>{\n e == null ? void 0 : e.preventDefault();\n setDisplayState(\"fullscreen\");\n }, []);\n // This component shouldn't be rendered with no errors, but if it is, let's\n // handle it gracefully by rendering nothing.\n if (errors.length < 1 || activeError == null) {\n return null;\n }\n if (isLoading) {\n // TODO: better loading state\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Overlay.Overlay, {});\n }\n if (displayState === \"hidden\") {\n return null;\n }\n if (displayState === \"minimized\") {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Toast.Toast, {\n className: \"nextjs-toast-errors-parent\",\n onClick: fullscreen,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n className: \"nextjs-toast-errors\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"12\",\n y1: \"8\",\n x2: \"12\",\n y2: \"12\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"12\",\n y1: \"16\",\n x2: \"12.01\",\n y2: \"16\"\n })\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"span\", {\n children: [\n readyErrors.length,\n \" error\",\n readyErrors.length > 1 ? \"s\" : \"\"\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n \"data-nextjs-toast-errors-hide-button\": true,\n className: \"nextjs-toast-errors-hide-button\",\n type: \"button\",\n onClick: (e)=>{\n e.stopPropagation();\n hide();\n },\n \"aria-label\": \"Hide Errors\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_CloseIcon.CloseIcon, {})\n })\n ]\n })\n });\n }\n const isServerError = [\n \"server\",\n \"edge-server\"\n ].includes((0, _nodeStackFrames.getErrorSource)(activeError.error) || \"\");\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Overlay.Overlay, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.Dialog, {\n type: \"error\",\n \"aria-labelledby\": \"nextjs__container_errors_label\",\n \"aria-describedby\": \"nextjs__container_errors_desc\",\n onClose: isServerError ? undefined : minimize,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogContent, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogHeader, {\n className: \"nextjs-container-errors-header\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_LeftRightDialogHeader.LeftRightDialogHeader, {\n previous: activeIdx > 0 ? previous : null,\n next: activeIdx < readyErrors.length - 1 ? next : null,\n close: isServerError ? undefined : minimize,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"small\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n children: activeIdx + 1\n }),\n \" of\",\n \" \",\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n children: readyErrors.length\n }),\n \" unhandled error\",\n readyErrors.length < 2 ? \"\" : \"s\"\n ]\n }),\n versionInfo ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_VersionStalenessInfo.VersionStalenessInfo, {\n ...versionInfo\n }) : null\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n id: \"nextjs__container_errors_label\",\n children: isServerError ? \"Server Error\" : \"Unhandled Runtime Error\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"p\", {\n id: \"nextjs__container_errors_desc\",\n children: [\n activeError.error.name,\n \":\",\n \" \",\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_hotlinkedtext.HotlinkedText, {\n text: activeError.error.message\n })\n ]\n }),\n isServerError ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"small\", {\n children: \"This error happened while generating the page. Any console logs will be displayed in the terminal window.\"\n })\n }) : undefined\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.DialogBody, {\n className: \"nextjs-container-errors-body\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_RuntimeError.RuntimeError, {\n error: activeError\n }, activeError.id.toString())\n })\n ]\n })\n })\n });\n};\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Errors.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9FcnJvcnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLFFBQVE7UUFDSixPQUFPQTtJQUNYO0lBQ0FDLFFBQVE7UUFDSixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyw0QkFBNEJDLG1CQUFPQSxDQUFDLG9IQUEwQztBQUNwRixNQUFNQyxpQ0FBaUNELG1CQUFPQSxDQUFDLDhIQUErQztBQUM5RixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyxnSUFBbUI7QUFDL0MsTUFBTUcsU0FBUyxXQUFXLEdBQUdKLDBCQUEwQkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyx3R0FBTztBQUN4RSxNQUFNSyx1QkFBdUJMLG1CQUFPQSxDQUFDLHNJQUEwQjtBQUMvRCxNQUFNTSxVQUFVTixtQkFBT0EsQ0FBQyxvSUFBc0I7QUFDOUMsTUFBTU8seUJBQXlCUCxtQkFBT0EsQ0FBQyxrS0FBcUM7QUFDNUUsTUFBTVEsV0FBV1IsbUJBQU9BLENBQUMsc0lBQXVCO0FBQ2hELE1BQU1TLFNBQVNULG1CQUFPQSxDQUFDLGtJQUFxQjtBQUM1QyxNQUFNVSxrQkFBa0JWLG1CQUFPQSxDQUFDLHdJQUEyQjtBQUMzRCxNQUFNVyxtQkFBbUJYLG1CQUFPQSxDQUFDLDBJQUE0QjtBQUM3RCxNQUFNWSxnQkFBZ0JaLG1CQUFPQSxDQUFDLHNJQUEwQjtBQUN4RCxNQUFNYSxhQUFhYixtQkFBT0EsQ0FBQywwSEFBb0I7QUFDL0MsTUFBTWMsZ0JBQWdCZCxtQkFBT0EsQ0FBQyxtSUFBZ0I7QUFDOUMsTUFBTWUsd0JBQXdCZixtQkFBT0EsQ0FBQyxnS0FBb0M7QUFDMUUsTUFBTWdCLGlCQUFpQmhCLG1CQUFPQSxDQUFDLHNKQUErQjtBQUM5RCxTQUFTaUI7SUFDTCxNQUFNQyxPQUFPakIsK0JBQStCRyxDQUFDLENBQUM7UUFDMUM7S0FDSDtJQUNEYSxrQkFBa0I7UUFDZCxPQUFPQztJQUNYO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLFNBQVNDLGtCQUFrQkMsRUFBRTtJQUN6QixNQUFNLEVBQUVDLEtBQUssRUFBRSxHQUFHRDtJQUNsQixPQUFPQyxNQUFNQyxJQUFJO1FBQ2IsS0FBS2pCLHFCQUFxQmtCLHNCQUFzQjtRQUNoRCxLQUFLbEIscUJBQXFCbUIsMEJBQTBCO1lBQ2hEO2dCQUNJLE9BQU9ILE1BQU1JLE1BQU0sQ0FBQzdCLElBQUksR0FBRyxPQUFPeUIsTUFBTUksTUFBTSxDQUFDQyxPQUFPLEdBQUcsT0FBT0wsTUFBTUksTUFBTSxDQUFDRSxLQUFLO1lBQ3RGO1FBQ0o7WUFDSSxDQUFDO0lBQ1Q7SUFDQSw2REFBNkQ7SUFDN0QsTUFBTXZCLElBQUlpQjtJQUNWLE9BQU87QUFDWDtBQUNBLE1BQU05QixTQUFTLFNBQVNBLE9BQU9xQyxLQUFLO0lBQ2hDLElBQUksRUFBRUMsTUFBTSxFQUFFQyxtQkFBbUIsRUFBRUMsV0FBVyxFQUFFLEdBQUdIO0lBQ25ELE1BQU0sQ0FBQ0ksU0FBU0MsV0FBVyxHQUFHOUIsT0FBTytCLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sQ0FBQ0MsYUFBYUMsVUFBVSxHQUFHakMsT0FBT2tDLE9BQU8sQ0FBQztRQUM1QyxJQUFJQyxRQUFRLEVBQUU7UUFDZCxJQUFJQyxPQUFPO1FBQ1gsNkRBQTZEO1FBQzdELElBQUksSUFBSUMsTUFBTSxHQUFHQSxNQUFNWCxPQUFPWSxNQUFNLEVBQUUsRUFBRUQsSUFBSTtZQUN4QyxNQUFNRSxJQUFJYixNQUFNLENBQUNXLElBQUk7WUFDckIsTUFBTSxFQUFFRyxFQUFFLEVBQUUsR0FBR0Q7WUFDZixJQUFJQyxNQUFNWCxTQUFTO2dCQUNmTSxNQUFNTSxJQUFJLENBQUNaLE9BQU8sQ0FBQ1csR0FBRztnQkFDdEI7WUFDSjtZQUNBLDZCQUE2QjtZQUM3QixJQUFJSCxNQUFNLEdBQUc7Z0JBQ1QsTUFBTUssT0FBT2hCLE1BQU0sQ0FBQ1csTUFBTSxFQUFFO2dCQUM1QixJQUFJckIsa0JBQWtCMEIsVUFBVTFCLGtCQUFrQnVCLElBQUk7b0JBQ2xEO2dCQUNKO1lBQ0o7WUFDQUgsT0FBT0c7WUFDUDtRQUNKO1FBQ0EsT0FBTztZQUNISjtZQUNBQztTQUNIO0lBQ0wsR0FBRztRQUNDVjtRQUNBRztLQUNIO0lBQ0QsTUFBTWMsWUFBWTNDLE9BQU9rQyxPQUFPLENBQUM7UUFDN0IsT0FBT0YsWUFBWU0sTUFBTSxHQUFHLEtBQUtNLFFBQVFsQixPQUFPWSxNQUFNO0lBQzFELEdBQUc7UUFDQ1osT0FBT1ksTUFBTTtRQUNiTixZQUFZTSxNQUFNO0tBQ3JCO0lBQ0R0QyxPQUFPNkMsU0FBUyxDQUFDO1FBQ2IsSUFBSVosYUFBYSxNQUFNO1lBQ25CO1FBQ0o7UUFDQSxJQUFJYSxVQUFVO1FBQ2IsSUFBR3ZDLGdCQUFnQndDLGNBQWMsRUFBRWQsV0FBV2UsSUFBSSxDQUFDLENBQUNDO1lBQ2pELHNFQUFzRTtZQUN0RSx1RUFBdUU7WUFDdkUsa0JBQWtCO1lBQ2xCLElBQUlILFNBQVM7Z0JBQ1RoQixXQUFXLENBQUNvQixJQUFLO3dCQUNULEdBQUdBLENBQUM7d0JBQ0osQ0FBQ0QsU0FBU1QsRUFBRSxDQUFDLEVBQUVTO29CQUNuQjtZQUNSO1FBQ0osR0FBRztRQUNILHlDQUF5QztRQUN6QztRQUNBLE9BQU87WUFDSEgsVUFBVTtRQUNkO0lBQ0osR0FBRztRQUNDYjtLQUNIO0lBQ0QsTUFBTSxDQUFDa0IsY0FBY0MsZ0JBQWdCLEdBQUdwRCxPQUFPK0IsUUFBUSxDQUFDSjtJQUN4RCxNQUFNLENBQUMwQixXQUFXQyxlQUFlLEdBQUd0RCxPQUFPK0IsUUFBUSxDQUFDO0lBQ3BELE1BQU13QixXQUFXdkQsT0FBT3dELFdBQVcsQ0FBQyxDQUFDakI7UUFDakNBLEtBQUssT0FBTyxLQUFLLElBQUlBLEVBQUVrQixjQUFjO1FBQ3JDSCxlQUFlLENBQUNJLElBQUlDLEtBQUtDLEdBQUcsQ0FBQyxHQUFHRixJQUFJO0lBQ3hDLEdBQUcsRUFBRTtJQUNMLE1BQU10QixPQUFPcEMsT0FBT3dELFdBQVcsQ0FBQyxDQUFDakI7UUFDN0JBLEtBQUssT0FBTyxLQUFLLElBQUlBLEVBQUVrQixjQUFjO1FBQ3JDSCxlQUFlLENBQUNJLElBQUlDLEtBQUtDLEdBQUcsQ0FBQyxHQUFHRCxLQUFLRSxHQUFHLENBQUM3QixZQUFZTSxNQUFNLEdBQUcsR0FBR29CLElBQUk7SUFDekUsR0FBRztRQUNDMUIsWUFBWU0sTUFBTTtLQUNyQjtJQUNELElBQUl3QjtJQUNKLE1BQU1DLGNBQWMvRCxPQUFPa0MsT0FBTyxDQUFDLElBQUksQ0FBQzRCLHlCQUF5QjlCLFdBQVcsQ0FBQ3FCLFVBQVUsS0FBSyxPQUFPUyx5QkFBeUIsTUFBTTtRQUM5SFQ7UUFDQXJCO0tBQ0g7SUFDRCxrRUFBa0U7SUFDbEUsZ0RBQWdEO0lBQ2hEaEMsT0FBTzZDLFNBQVMsQ0FBQztRQUNiLElBQUluQixPQUFPWSxNQUFNLEdBQUcsR0FBRztZQUNuQlIsV0FBVyxDQUFDO1lBQ1pzQixnQkFBZ0I7WUFDaEJFLGVBQWU7UUFDbkI7SUFDSixHQUFHO1FBQ0M1QixPQUFPWSxNQUFNO0tBQ2hCO0lBQ0QsTUFBTTBCLFdBQVdoRSxPQUFPd0QsV0FBVyxDQUFDLENBQUNqQjtRQUNqQ0EsS0FBSyxPQUFPLEtBQUssSUFBSUEsRUFBRWtCLGNBQWM7UUFDckNMLGdCQUFnQjtJQUNwQixHQUFHLEVBQUU7SUFDTCxNQUFNYSxPQUFPakUsT0FBT3dELFdBQVcsQ0FBQyxDQUFDakI7UUFDN0JBLEtBQUssT0FBTyxLQUFLLElBQUlBLEVBQUVrQixjQUFjO1FBQ3JDTCxnQkFBZ0I7SUFDcEIsR0FBRyxFQUFFO0lBQ0wsTUFBTWMsYUFBYWxFLE9BQU93RCxXQUFXLENBQUMsQ0FBQ2pCO1FBQ25DQSxLQUFLLE9BQU8sS0FBSyxJQUFJQSxFQUFFa0IsY0FBYztRQUNyQ0wsZ0JBQWdCO0lBQ3BCLEdBQUcsRUFBRTtJQUNMLDJFQUEyRTtJQUMzRSw2Q0FBNkM7SUFDN0MsSUFBSTFCLE9BQU9ZLE1BQU0sR0FBRyxLQUFLeUIsZUFBZSxNQUFNO1FBQzFDLE9BQU87SUFDWDtJQUNBLElBQUlwQixXQUFXO1FBQ1gsNkJBQTZCO1FBQzdCLE9BQXFCLFdBQUgsR0FBSSxJQUFHNUMsWUFBWW9FLEdBQUcsRUFBRTlELFNBQVMrRCxPQUFPLEVBQUUsQ0FBQztJQUNqRTtJQUNBLElBQUlqQixpQkFBaUIsVUFBVTtRQUMzQixPQUFPO0lBQ1g7SUFDQSxJQUFJQSxpQkFBaUIsYUFBYTtRQUM5QixPQUFxQixXQUFILEdBQUksSUFBR3BELFlBQVlvRSxHQUFHLEVBQUU3RCxPQUFPK0QsS0FBSyxFQUFFO1lBQ3BEQyxXQUFXO1lBQ1hDLFNBQVNMO1lBQ1RNLFVBQXdCLFdBQUgsR0FBSSxJQUFHekUsWUFBWTBFLElBQUksRUFBRSxPQUFPO2dCQUNqREgsV0FBVztnQkFDWEUsVUFBVTtvQkFDTixXQUFXLEdBQUksSUFBR3pFLFlBQVkwRSxJQUFJLEVBQUUsT0FBTzt3QkFDdkNDLE9BQU87d0JBQ1BDLE9BQU87d0JBQ1BDLFFBQVE7d0JBQ1JDLFNBQVM7d0JBQ1RDLE1BQU07d0JBQ05DLFFBQVE7d0JBQ1JDLGFBQWE7d0JBQ2JDLGVBQWU7d0JBQ2ZDLGdCQUFnQjt3QkFDaEJWLFVBQVU7NEJBQ04sV0FBVyxHQUFJLElBQUd6RSxZQUFZb0UsR0FBRyxFQUFFLFVBQVU7Z0NBQ3pDZ0IsSUFBSTtnQ0FDSkMsSUFBSTtnQ0FDSkMsR0FBRzs0QkFDUDs0QkFDQSxXQUFXLEdBQUksSUFBR3RGLFlBQVlvRSxHQUFHLEVBQUUsUUFBUTtnQ0FDdkNtQixJQUFJO2dDQUNKQyxJQUFJO2dDQUNKQyxJQUFJO2dDQUNKQyxJQUFJOzRCQUNSOzRCQUNBLFdBQVcsR0FBSSxJQUFHMUYsWUFBWW9FLEdBQUcsRUFBRSxRQUFRO2dDQUN2Q21CLElBQUk7Z0NBQ0pDLElBQUk7Z0NBQ0pDLElBQUk7Z0NBQ0pDLElBQUk7NEJBQ1I7eUJBQ0g7b0JBQ0w7b0JBQ0EsV0FBVyxHQUFJLElBQUcxRixZQUFZMEUsSUFBSSxFQUFFLFFBQVE7d0JBQ3hDRCxVQUFVOzRCQUNOeEMsWUFBWU0sTUFBTTs0QkFDbEI7NEJBQ0FOLFlBQVlNLE1BQU0sR0FBRyxJQUFJLE1BQU07eUJBQ2xDO29CQUNMO29CQUNBLFdBQVcsR0FBSSxJQUFHdkMsWUFBWW9FLEdBQUcsRUFBRSxVQUFVO3dCQUN6Qyx3Q0FBd0M7d0JBQ3hDRyxXQUFXO3dCQUNYbkQsTUFBTTt3QkFDTm9ELFNBQVMsQ0FBQ2hDOzRCQUNOQSxFQUFFbUQsZUFBZTs0QkFDakJ6Qjt3QkFDSjt3QkFDQSxjQUFjO3dCQUNkTyxVQUF3QixXQUFILEdBQUksSUFBR3pFLFlBQVlvRSxHQUFHLEVBQUV6RCxXQUFXaUYsU0FBUyxFQUFFLENBQUM7b0JBQ3hFO2lCQUNIO1lBQ0w7UUFDSjtJQUNKO0lBQ0EsTUFBTUMsZ0JBQWdCO1FBQ2xCO1FBQ0E7S0FDSCxDQUFDQyxRQUFRLENBQUMsQ0FBQyxHQUFHckYsaUJBQWlCc0YsY0FBYyxFQUFFL0IsWUFBWWdDLEtBQUssS0FBSztJQUN0RSxPQUFxQixXQUFILEdBQUksSUFBR2hHLFlBQVlvRSxHQUFHLEVBQUU5RCxTQUFTK0QsT0FBTyxFQUFFO1FBQ3hESSxVQUF3QixXQUFILEdBQUksSUFBR3pFLFlBQVlvRSxHQUFHLEVBQUVoRSxRQUFRNkYsTUFBTSxFQUFFO1lBQ3pEN0UsTUFBTTtZQUNOLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEI4RSxTQUFTTCxnQkFBZ0JNLFlBQVlsQztZQUNyQ1EsVUFBd0IsV0FBSCxHQUFJLElBQUd6RSxZQUFZMEUsSUFBSSxFQUFFdEUsUUFBUWdHLGFBQWEsRUFBRTtnQkFDakUzQixVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHekUsWUFBWTBFLElBQUksRUFBRXRFLFFBQVFpRyxZQUFZLEVBQUU7d0JBQ3REOUIsV0FBVzt3QkFDWEUsVUFBVTs0QkFDTixXQUFXLEdBQUksSUFBR3pFLFlBQVkwRSxJQUFJLEVBQUVyRSx1QkFBdUJpRyxxQkFBcUIsRUFBRTtnQ0FDOUU5QyxVQUFVRixZQUFZLElBQUlFLFdBQVc7Z0NBQ3JDbkIsTUFBTWlCLFlBQVlyQixZQUFZTSxNQUFNLEdBQUcsSUFBSUYsT0FBTztnQ0FDbERrRSxPQUFPVixnQkFBZ0JNLFlBQVlsQztnQ0FDbkNRLFVBQVU7b0NBQ04sV0FBVyxHQUFJLElBQUd6RSxZQUFZMEUsSUFBSSxFQUFFLFNBQVM7d0NBQ3pDRCxVQUFVOzRDQUNOLFdBQVcsR0FBSSxJQUFHekUsWUFBWW9FLEdBQUcsRUFBRSxRQUFRO2dEQUN2Q0ssVUFBVW5CLFlBQVk7NENBQzFCOzRDQUNBOzRDQUNBOzRDQUNBLFdBQVcsR0FBSSxJQUFHdEQsWUFBWW9FLEdBQUcsRUFBRSxRQUFRO2dEQUN2Q0ssVUFBVXhDLFlBQVlNLE1BQU07NENBQ2hDOzRDQUNBOzRDQUNBTixZQUFZTSxNQUFNLEdBQUcsSUFBSSxLQUFLO3lDQUNqQztvQ0FDTDtvQ0FDQVYsY0FBNEIsV0FBSCxHQUFJLElBQUc3QixZQUFZb0UsR0FBRyxFQUFFdkQsc0JBQXNCMkYsb0JBQW9CLEVBQUU7d0NBQ3pGLEdBQUczRSxXQUFXO29DQUNsQixLQUFLO2lDQUNSOzRCQUNMOzRCQUNBLFdBQVcsR0FBSSxJQUFHN0IsWUFBWW9FLEdBQUcsRUFBRSxNQUFNO2dDQUNyQzNCLElBQUk7Z0NBQ0pnQyxVQUFVb0IsZ0JBQWdCLGlCQUFpQjs0QkFDL0M7NEJBQ0EsV0FBVyxHQUFJLElBQUc3RixZQUFZMEUsSUFBSSxFQUFFLEtBQUs7Z0NBQ3JDakMsSUFBSTtnQ0FDSmdDLFVBQVU7b0NBQ05ULFlBQVlnQyxLQUFLLENBQUN0RyxJQUFJO29DQUN0QjtvQ0FDQTtvQ0FDQSxXQUFXLEdBQUksSUFBR00sWUFBWW9FLEdBQUcsRUFBRXRELGVBQWUyRixhQUFhLEVBQUU7d0NBQzdEQyxNQUFNMUMsWUFBWWdDLEtBQUssQ0FBQ3hFLE9BQU87b0NBQ25DO2lDQUNIOzRCQUNMOzRCQUNBcUUsZ0JBQThCLFdBQUgsR0FBSSxJQUFHN0YsWUFBWW9FLEdBQUcsRUFBRSxPQUFPO2dDQUN0REssVUFBd0IsV0FBSCxHQUFJLElBQUd6RSxZQUFZb0UsR0FBRyxFQUFFLFNBQVM7b0NBQ2xESyxVQUFVO2dDQUNkOzRCQUNKLEtBQUswQjt5QkFDUjtvQkFDTDtvQkFDQSxXQUFXLEdBQUksSUFBR25HLFlBQVlvRSxHQUFHLEVBQUVoRSxRQUFRdUcsVUFBVSxFQUFFO3dCQUNuRHBDLFdBQVc7d0JBQ1hFLFVBQXdCLFdBQUgsR0FBSSxJQUFHekUsWUFBWW9FLEdBQUcsRUFBRXhELGNBQWNnRyxZQUFZLEVBQUU7NEJBQ3JFWixPQUFPaEM7d0JBQ1gsR0FBR0EsWUFBWXZCLEVBQUUsQ0FBQ29FLFFBQVE7b0JBQzlCO2lCQUNIO1lBQ0w7UUFDSjtJQUNKO0FBQ0o7QUFDQSxNQUFNdkgsU0FBUyxDQUFDLEdBQUdvQixjQUFjb0csSUFBSSxFQUFFL0Y7QUFFdkMsSUFBSSxDQUFDLE9BQU83QixRQUFRNkgsT0FBTyxLQUFLLGNBQWUsT0FBTzdILFFBQVE2SCxPQUFPLEtBQUssWUFBWTdILFFBQVE2SCxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU83SCxRQUFRNkgsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2hJLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTZILE9BQU8sRUFBRSxjQUFjO1FBQUU1SCxPQUFPO0lBQUs7SUFDbkVILE9BQU9pSSxNQUFNLENBQUMvSCxRQUFRNkgsT0FBTyxFQUFFN0g7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUTZILE9BQU87QUFDbEMsRUFFQSxrQ0FBa0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb250YWluZXIvRXJyb3JzLmpzPzRkMmEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBFcnJvcnM6IG51bGwsXG4gICAgc3R5bGVzOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIEVycm9yczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBFcnJvcnM7XG4gICAgfSxcbiAgICBzdHlsZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZVwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9lcnJvcm92ZXJsYXlyZWR1Y2VyID0gcmVxdWlyZShcIi4uL2Vycm9yLW92ZXJsYXktcmVkdWNlclwiKTtcbmNvbnN0IF9EaWFsb2cgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9EaWFsb2dcIik7XG5jb25zdCBfTGVmdFJpZ2h0RGlhbG9nSGVhZGVyID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvTGVmdFJpZ2h0RGlhbG9nSGVhZGVyXCIpO1xuY29uc3QgX092ZXJsYXkgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9PdmVybGF5XCIpO1xuY29uc3QgX1RvYXN0ID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvVG9hc3RcIik7XG5jb25zdCBfZ2V0RXJyb3JCeVR5cGUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9nZXRFcnJvckJ5VHlwZVwiKTtcbmNvbnN0IF9ub2RlU3RhY2tGcmFtZXMgPSByZXF1aXJlKFwiLi4vaGVscGVycy9ub2RlU3RhY2tGcmFtZXNcIik7XG5jb25zdCBfbm9vcHRlbXBsYXRlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZVwiKTtcbmNvbnN0IF9DbG9zZUljb24gPSByZXF1aXJlKFwiLi4vaWNvbnMvQ2xvc2VJY29uXCIpO1xuY29uc3QgX1J1bnRpbWVFcnJvciA9IHJlcXVpcmUoXCIuL1J1bnRpbWVFcnJvclwiKTtcbmNvbnN0IF9WZXJzaW9uU3RhbGVuZXNzSW5mbyA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL1ZlcnNpb25TdGFsZW5lc3NJbmZvXCIpO1xuY29uc3QgX2hvdGxpbmtlZHRleHQgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9ob3QtbGlua2VkLXRleHRcIik7XG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QoKSB7XG4gICAgY29uc3QgZGF0YSA9IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZS5fKFtcbiAgICAgICAgXCJcXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIgPiBoMSB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS1mb250LWJpZyk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLWZvbnQtYmlnZ2VyKTtcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgbWFyZ2luLXRvcDogY2FsYyh2YXIoLS1zaXplLWdhcC1kb3VibGUpICsgdmFyKC0tc2l6ZS1nYXAtaGFsZikpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciBzbWFsbCB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS1mb250LXNtYWxsKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudHMtMSk7XFxuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLWdhcC1kb3VibGUpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciBzbWFsbCA+IHNwYW4ge1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciA+IHAge1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtZm9udC1zbWFsbCk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLWZvbnQtYmlnKTtcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1nYXAtaGFsZik7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLXJlZCk7XFxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIgPiBkaXYgPiBzbWFsbCB7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1nYXAtaGFsZik7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyID4gcCA+IGEge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xcbiAgfVxcblxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWJvZHkgPiBoMjpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgIG1hcmdpbi10b3A6IGNhbGModmFyKC0tc2l6ZS1nYXAtZG91YmxlKSArIHZhcigtLXNpemUtZ2FwKSk7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtYm9keSA+IGgyIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1nYXApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtZm9udC1iaWcpO1xcbiAgfVxcblxcbiAgLm5leHRqcy10b2FzdC1lcnJvcnMtcGFyZW50IHtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlO1xcbiAgfVxcbiAgLm5leHRqcy10b2FzdC1lcnJvcnMtcGFyZW50OmhvdmVyIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xcbiAgfVxcbiAgLm5leHRqcy10b2FzdC1lcnJvcnMge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWVycm9ycyA+IHN2ZyB7XFxuICAgIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS1nYXApO1xcbiAgfVxcbiAgLm5leHRqcy10b2FzdC1lcnJvcnMtaGlkZS1idXR0b24ge1xcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1nYXAtdHJpcGxlKTtcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1icmlnaHQtd2hpdGUpO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzIGVhc2U7XFxuICAgIG9wYWNpdHk6IDAuNztcXG4gIH1cXG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzLWhpZGUtYnV0dG9uOmhvdmVyIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG5cIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24gZ2V0RXJyb3JTaWduYXR1cmUoZXYpIHtcbiAgICBjb25zdCB7IGV2ZW50IH0gPSBldjtcbiAgICBzd2l0Y2goZXZlbnQudHlwZSl7XG4gICAgICAgIGNhc2UgX2Vycm9yb3ZlcmxheXJlZHVjZXIuQUNUSU9OX1VOSEFORExFRF9FUlJPUjpcbiAgICAgICAgY2FzZSBfZXJyb3JvdmVybGF5cmVkdWNlci5BQ1RJT05fVU5IQU5ETEVEX1JFSkVDVElPTjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucmVhc29uLm5hbWUgKyBcIjo6XCIgKyBldmVudC5yZWFzb24ubWVzc2FnZSArIFwiOjpcIiArIGV2ZW50LnJlYXNvbi5zdGFjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHt9XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCBfID0gZXZlbnQ7XG4gICAgcmV0dXJuIFwiXCI7XG59XG5jb25zdCBFcnJvcnMgPSBmdW5jdGlvbiBFcnJvcnMocGFyYW0pIHtcbiAgICBsZXQgeyBlcnJvcnMsIGluaXRpYWxEaXNwbGF5U3RhdGUsIHZlcnNpb25JbmZvIH0gPSBwYXJhbTtcbiAgICBjb25zdCBbbG9va3Vwcywgc2V0TG9va3Vwc10gPSBfcmVhY3QudXNlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtyZWFkeUVycm9ycywgbmV4dEVycm9yXSA9IF9yZWFjdC51c2VNZW1vKCgpPT57XG4gICAgICAgIGxldCByZWFkeSA9IFtdO1xuICAgICAgICBsZXQgbmV4dCA9IG51bGw7XG4gICAgICAgIC8vIEVuc3VyZSBlcnJvcnMgYXJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgdGhleSBvY2N1cnJlZCBpbjpcbiAgICAgICAgZm9yKGxldCBpZHggPSAwOyBpZHggPCBlcnJvcnMubGVuZ3RoOyArK2lkeCl7XG4gICAgICAgICAgICBjb25zdCBlID0gZXJyb3JzW2lkeF07XG4gICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBlO1xuICAgICAgICAgICAgaWYgKGlkIGluIGxvb2t1cHMpIHtcbiAgICAgICAgICAgICAgICByZWFkeS5wdXNoKGxvb2t1cHNbaWRdKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgZXJyb3JzXG4gICAgICAgICAgICBpZiAoaWR4ID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBlcnJvcnNbaWR4IC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKGdldEVycm9yU2lnbmF0dXJlKHByZXYpID09PSBnZXRFcnJvclNpZ25hdHVyZShlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0ID0gZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICByZWFkeSxcbiAgICAgICAgICAgIG5leHRcbiAgICAgICAgXTtcbiAgICB9LCBbXG4gICAgICAgIGVycm9ycyxcbiAgICAgICAgbG9va3Vwc1xuICAgIF0pO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IF9yZWFjdC51c2VNZW1vKCgpPT57XG4gICAgICAgIHJldHVybiByZWFkeUVycm9ycy5sZW5ndGggPCAxICYmIEJvb2xlYW4oZXJyb3JzLmxlbmd0aCk7XG4gICAgfSwgW1xuICAgICAgICBlcnJvcnMubGVuZ3RoLFxuICAgICAgICByZWFkeUVycm9ycy5sZW5ndGhcbiAgICBdKTtcbiAgICBfcmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmIChuZXh0RXJyb3IgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgKDAsIF9nZXRFcnJvckJ5VHlwZS5nZXRFcnJvckJ5VHlwZSkobmV4dEVycm9yKS50aGVuKChyZXNvbHZlZCk9PntcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgaWYgdGhlIGRlc2lyZWQgZXJyb3IgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIHJlc29sdmluZyxcbiAgICAgICAgICAgIC8vIHRodXMgd2UncmUgbm90IHRyYWNraW5nIGl0IHVzaW5nIGEgcmVmLiBPbmNlIHRoZSB3b3JrIGhhcyBiZWVuIGRvbmUsXG4gICAgICAgICAgICAvLyB3ZSdsbCBzdG9yZSBpdC5cbiAgICAgICAgICAgIGlmIChtb3VudGVkKSB7XG4gICAgICAgICAgICAgICAgc2V0TG9va3VwcygobSk9Pih7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVkLmlkXTogcmVzb2x2ZWRcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAoKT0+e1xuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhpcywgdGhvdWdoIGFuIGVkZ2UgY2FzZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICBtb3VudGVkID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBuZXh0RXJyb3JcbiAgICBdKTtcbiAgICBjb25zdCBbZGlzcGxheVN0YXRlLCBzZXREaXNwbGF5U3RhdGVdID0gX3JlYWN0LnVzZVN0YXRlKGluaXRpYWxEaXNwbGF5U3RhdGUpO1xuICAgIGNvbnN0IFthY3RpdmVJZHgsIHNldEFjdGl2ZUluZGV4XSA9IF9yZWFjdC51c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBwcmV2aW91cyA9IF9yZWFjdC51c2VDYWxsYmFjaygoZSk9PntcbiAgICAgICAgZSA9PSBudWxsID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRBY3RpdmVJbmRleCgodik9Pk1hdGgubWF4KDAsIHYgLSAxKSk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IG5leHQgPSBfcmVhY3QudXNlQ2FsbGJhY2soKGUpPT57XG4gICAgICAgIGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0QWN0aXZlSW5kZXgoKHYpPT5NYXRoLm1heCgwLCBNYXRoLm1pbihyZWFkeUVycm9ycy5sZW5ndGggLSAxLCB2ICsgMSkpKTtcbiAgICB9LCBbXG4gICAgICAgIHJlYWR5RXJyb3JzLmxlbmd0aFxuICAgIF0pO1xuICAgIHZhciBfcmVhZHlFcnJvcnNfYWN0aXZlSWR4O1xuICAgIGNvbnN0IGFjdGl2ZUVycm9yID0gX3JlYWN0LnVzZU1lbW8oKCk9PihfcmVhZHlFcnJvcnNfYWN0aXZlSWR4ID0gcmVhZHlFcnJvcnNbYWN0aXZlSWR4XSkgIT0gbnVsbCA/IF9yZWFkeUVycm9yc19hY3RpdmVJZHggOiBudWxsLCBbXG4gICAgICAgIGFjdGl2ZUlkeCxcbiAgICAgICAgcmVhZHlFcnJvcnNcbiAgICBdKTtcbiAgICAvLyBSZXNldCBjb21wb25lbnQgc3RhdGUgd2hlbiB0aGVyZSBhcmUgbm8gZXJyb3JzIHRvIGJlIGRpc3BsYXllZC5cbiAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBsZXRzIGhhbmRsZSBpdC5cbiAgICBfcmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgc2V0TG9va3Vwcyh7fSk7XG4gICAgICAgICAgICBzZXREaXNwbGF5U3RhdGUoXCJoaWRkZW5cIik7XG4gICAgICAgICAgICBzZXRBY3RpdmVJbmRleCgwKTtcbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgZXJyb3JzLmxlbmd0aFxuICAgIF0pO1xuICAgIGNvbnN0IG1pbmltaXplID0gX3JlYWN0LnVzZUNhbGxiYWNrKChlKT0+e1xuICAgICAgICBlID09IG51bGwgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNldERpc3BsYXlTdGF0ZShcIm1pbmltaXplZFwiKTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgaGlkZSA9IF9yZWFjdC51c2VDYWxsYmFjaygoZSk9PntcbiAgICAgICAgZSA9PSBudWxsID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXREaXNwbGF5U3RhdGUoXCJoaWRkZW5cIik7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGZ1bGxzY3JlZW4gPSBfcmVhY3QudXNlQ2FsbGJhY2soKGUpPT57XG4gICAgICAgIGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0RGlzcGxheVN0YXRlKFwiZnVsbHNjcmVlblwiKTtcbiAgICB9LCBbXSk7XG4gICAgLy8gVGhpcyBjb21wb25lbnQgc2hvdWxkbid0IGJlIHJlbmRlcmVkIHdpdGggbm8gZXJyb3JzLCBidXQgaWYgaXQgaXMsIGxldCdzXG4gICAgLy8gaGFuZGxlIGl0IGdyYWNlZnVsbHkgYnkgcmVuZGVyaW5nIG5vdGhpbmcuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPCAxIHx8IGFjdGl2ZUVycm9yID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgICAgLy8gVE9ETzogYmV0dGVyIGxvYWRpbmcgc3RhdGVcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX092ZXJsYXkuT3ZlcmxheSwge30pO1xuICAgIH1cbiAgICBpZiAoZGlzcGxheVN0YXRlID09PSBcImhpZGRlblwiKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoZGlzcGxheVN0YXRlID09PSBcIm1pbmltaXplZFwiKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9Ub2FzdC5Ub2FzdCwge1xuICAgICAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy10b2FzdC1lcnJvcnMtcGFyZW50XCIsXG4gICAgICAgICAgICBvbkNsaWNrOiBmdWxsc2NyZWVuLFxuICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwibmV4dGpzLXRvYXN0LWVycm9yc1wiLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIyNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiY2lyY2xlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3g6IFwiMTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3k6IFwiMTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcjogXCIxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImxpbmVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTogXCIxMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MTogXCI4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiBcIjEyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBcIjEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibGluZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxOiBcIjEyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBcIjE2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBcIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHlFcnJvcnMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHlFcnJvcnMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtbmV4dGpzLXRvYXN0LWVycm9ycy1oaWRlLWJ1dHRvblwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy10b2FzdC1lcnJvcnMtaGlkZS1idXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoZSk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogXCJIaWRlIEVycm9yc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0Nsb3NlSWNvbi5DbG9zZUljb24sIHt9KVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBpc1NlcnZlckVycm9yID0gW1xuICAgICAgICBcInNlcnZlclwiLFxuICAgICAgICBcImVkZ2Utc2VydmVyXCJcbiAgICBdLmluY2x1ZGVzKCgwLCBfbm9kZVN0YWNrRnJhbWVzLmdldEVycm9yU291cmNlKShhY3RpdmVFcnJvci5lcnJvcikgfHwgXCJcIik7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX092ZXJsYXkuT3ZlcmxheSwge1xuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfRGlhbG9nLkRpYWxvZywge1xuICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogXCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfbGFiZWxcIixcbiAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19kZXNjXCIsXG4gICAgICAgICAgICBvbkNsb3NlOiBpc1NlcnZlckVycm9yID8gdW5kZWZpbmVkIDogbWluaW1pemUsXG4gICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX0RpYWxvZy5EaWFsb2dDb250ZW50LCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX0RpYWxvZy5EaWFsb2dIZWFkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJuZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX0xlZnRSaWdodERpYWxvZ0hlYWRlci5MZWZ0UmlnaHREaWFsb2dIZWFkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXM6IGFjdGl2ZUlkeCA+IDAgPyBwcmV2aW91cyA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IGFjdGl2ZUlkeCA8IHJlYWR5RXJyb3JzLmxlbmd0aCAtIDEgPyBuZXh0IDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2U6IGlzU2VydmVyRXJyb3IgPyB1bmRlZmluZWQgOiBtaW5pbWl6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwic21hbGxcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBhY3RpdmVJZHggKyAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBvZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHJlYWR5RXJyb3JzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgdW5oYW5kbGVkIGVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5RXJyb3JzLmxlbmd0aCA8IDIgPyBcIlwiIDogXCJzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25JbmZvID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfVmVyc2lvblN0YWxlbmVzc0luZm8uVmVyc2lvblN0YWxlbmVzc0luZm8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52ZXJzaW9uSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiaDFcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfbGFiZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGlzU2VydmVyRXJyb3IgPyBcIlNlcnZlciBFcnJvclwiIDogXCJVbmhhbmRsZWQgUnVudGltZSBFcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJwXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2Rlc2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUVycm9yLmVycm9yLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjpcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfaG90bGlua2VkdGV4dC5Ib3RsaW5rZWRUZXh0LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogYWN0aXZlRXJyb3IuZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VydmVyRXJyb3IgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzbWFsbFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJUaGlzIGVycm9yIGhhcHBlbmVkIHdoaWxlIGdlbmVyYXRpbmcgdGhlIHBhZ2UuIEFueSBjb25zb2xlIGxvZ3Mgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRlcm1pbmFsIHdpbmRvdy5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9EaWFsb2cuRGlhbG9nQm9keSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy1jb250YWluZXItZXJyb3JzLWJvZHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9SdW50aW1lRXJyb3IuUnVudGltZUVycm9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGFjdGl2ZUVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBhY3RpdmVFcnJvci5pZC50b1N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSk7XG59O1xuY29uc3Qgc3R5bGVzID0gKDAsIF9ub29wdGVtcGxhdGUubm9vcCkoX3RlbXBsYXRlT2JqZWN0KCkpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1FcnJvcnMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiRXJyb3JzIiwic3R5bGVzIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfZXJyb3JvdmVybGF5cmVkdWNlciIsIl9EaWFsb2ciLCJfTGVmdFJpZ2h0RGlhbG9nSGVhZGVyIiwiX092ZXJsYXkiLCJfVG9hc3QiLCJfZ2V0RXJyb3JCeVR5cGUiLCJfbm9kZVN0YWNrRnJhbWVzIiwiX25vb3B0ZW1wbGF0ZSIsIl9DbG9zZUljb24iLCJfUnVudGltZUVycm9yIiwiX1ZlcnNpb25TdGFsZW5lc3NJbmZvIiwiX2hvdGxpbmtlZHRleHQiLCJfdGVtcGxhdGVPYmplY3QiLCJkYXRhIiwiZ2V0RXJyb3JTaWduYXR1cmUiLCJldiIsImV2ZW50IiwidHlwZSIsIkFDVElPTl9VTkhBTkRMRURfRVJST1IiLCJBQ1RJT05fVU5IQU5ETEVEX1JFSkVDVElPTiIsInJlYXNvbiIsIm1lc3NhZ2UiLCJzdGFjayIsInBhcmFtIiwiZXJyb3JzIiwiaW5pdGlhbERpc3BsYXlTdGF0ZSIsInZlcnNpb25JbmZvIiwibG9va3VwcyIsInNldExvb2t1cHMiLCJ1c2VTdGF0ZSIsInJlYWR5RXJyb3JzIiwibmV4dEVycm9yIiwidXNlTWVtbyIsInJlYWR5IiwibmV4dCIsImlkeCIsImxlbmd0aCIsImUiLCJpZCIsInB1c2giLCJwcmV2IiwiaXNMb2FkaW5nIiwiQm9vbGVhbiIsInVzZUVmZmVjdCIsIm1vdW50ZWQiLCJnZXRFcnJvckJ5VHlwZSIsInRoZW4iLCJyZXNvbHZlZCIsIm0iLCJkaXNwbGF5U3RhdGUiLCJzZXREaXNwbGF5U3RhdGUiLCJhY3RpdmVJZHgiLCJzZXRBY3RpdmVJbmRleCIsInByZXZpb3VzIiwidXNlQ2FsbGJhY2siLCJwcmV2ZW50RGVmYXVsdCIsInYiLCJNYXRoIiwibWF4IiwibWluIiwiX3JlYWR5RXJyb3JzX2FjdGl2ZUlkeCIsImFjdGl2ZUVycm9yIiwibWluaW1pemUiLCJoaWRlIiwiZnVsbHNjcmVlbiIsImpzeCIsIk92ZXJsYXkiLCJUb2FzdCIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJjaGlsZHJlbiIsImpzeHMiLCJ4bWxucyIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsImN4IiwiY3kiLCJyIiwieDEiLCJ5MSIsIngyIiwieTIiLCJzdG9wUHJvcGFnYXRpb24iLCJDbG9zZUljb24iLCJpc1NlcnZlckVycm9yIiwiaW5jbHVkZXMiLCJnZXRFcnJvclNvdXJjZSIsImVycm9yIiwiRGlhbG9nIiwib25DbG9zZSIsInVuZGVmaW5lZCIsIkRpYWxvZ0NvbnRlbnQiLCJEaWFsb2dIZWFkZXIiLCJMZWZ0UmlnaHREaWFsb2dIZWFkZXIiLCJjbG9zZSIsIlZlcnNpb25TdGFsZW5lc3NJbmZvIiwiSG90bGlua2VkVGV4dCIsInRleHQiLCJEaWFsb2dCb2R5IiwiUnVudGltZUVycm9yIiwidG9TdHJpbmciLCJub29wIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RootLayoutError.js": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RootLayoutError.js ***! + \**********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RootLayoutError: function() {\n return RootLayoutError;\n },\n styles: function() {\n return styles;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _Dialog = __webpack_require__(/*! ../components/Dialog */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\");\nconst _Overlay = __webpack_require__(/*! ../components/Overlay */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js\");\nconst _Terminal = __webpack_require__(/*! ../components/Terminal */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js\");\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n .nextjs-container-root-layout-error-header > h4 {\\n line-height: 1.5;\\n margin: 0;\\n padding: 0;\\n }\\n\\n .nextjs-container-root-layout-error-body footer {\\n margin-top: var(--size-gap);\\n }\\n .nextjs-container-root-layout-error-body footer p {\\n margin: 0;\\n }\\n\\n .nextjs-container-root-layout-error-body small {\\n color: #757575;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst RootLayoutError = function BuildError(param) {\n let { missingTags } = param;\n const message = \"Please make sure to include the following tags in your root layout: <html>, <body>.\\n\\n\" + (\"Missing required root layout tag\" + (missingTags.length === 1 ? \"\" : \"s\") + \": \") + missingTags.join(\", \");\n const noop = _react.default.useCallback(()=>{}, []);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Overlay.Overlay, {\n fixed: true,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.Dialog, {\n type: \"error\",\n \"aria-labelledby\": \"nextjs__container_root_layout_error_label\",\n \"aria-describedby\": \"nextjs__container_root_layout_error_desc\",\n onClose: noop,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogContent, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.DialogHeader, {\n className: \"nextjs-container-root-layout-error-header\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h4\", {\n id: \"nextjs__container_root_layout_error_label\",\n children: \"Missing required tags\"\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogBody, {\n className: \"nextjs-container-root-layout-error-body\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Terminal.Terminal, {\n content: message\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"footer\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n id: \"nextjs__container_root_layout_error_desc\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"small\", {\n children: \"This error and can only be dismissed by providing all required tags.\"\n })\n })\n })\n ]\n })\n ]\n })\n })\n });\n};\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=RootLayoutError.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9Sb290TGF5b3V0RXJyb3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLGlCQUFpQjtRQUNiLE9BQU9BO0lBQ1g7SUFDQUMsUUFBUTtRQUNKLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLDJCQUEyQkMsbUJBQU9BLENBQUMsa0hBQXlDO0FBQ2xGLE1BQU1DLGlDQUFpQ0QsbUJBQU9BLENBQUMsOEhBQStDO0FBQzlGLE1BQU1FLGNBQWNGLG1CQUFPQSxDQUFDLGdJQUFtQjtBQUMvQyxNQUFNRyxTQUFTLFdBQVcsR0FBR0oseUJBQXlCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLHdHQUFPO0FBQ3ZFLE1BQU1LLFVBQVVMLG1CQUFPQSxDQUFDLG9JQUFzQjtBQUM5QyxNQUFNTSxXQUFXTixtQkFBT0EsQ0FBQyxzSUFBdUI7QUFDaEQsTUFBTU8sWUFBWVAsbUJBQU9BLENBQUMsd0lBQXdCO0FBQ2xELE1BQU1RLGdCQUFnQlIsbUJBQU9BLENBQUMsc0lBQTBCO0FBQ3hELFNBQVNTO0lBQ0wsTUFBTUMsT0FBT1QsK0JBQStCRyxDQUFDLENBQUM7UUFDMUM7S0FDSDtJQUNESyxrQkFBa0I7UUFDZCxPQUFPQztJQUNYO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLE1BQU1uQixrQkFBa0IsU0FBU29CLFdBQVdDLEtBQUs7SUFDN0MsSUFBSSxFQUFFQyxXQUFXLEVBQUUsR0FBR0Q7SUFDdEIsTUFBTUUsVUFBVSw0RkFBNkYsc0NBQXNDRCxDQUFBQSxZQUFZRSxNQUFNLEtBQUssSUFBSSxLQUFLLEdBQUUsSUFBSyxJQUFHLElBQUtGLFlBQVlHLElBQUksQ0FBQztJQUNuTixNQUFNQyxPQUFPZCxPQUFPZSxPQUFPLENBQUNDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtJQUNsRCxPQUFxQixXQUFILEdBQUksSUFBR2pCLFlBQVlrQixHQUFHLEVBQUVkLFNBQVNlLE9BQU8sRUFBRTtRQUN4REMsT0FBTztRQUNQQyxVQUF3QixXQUFILEdBQUksSUFBR3JCLFlBQVlrQixHQUFHLEVBQUVmLFFBQVFtQixNQUFNLEVBQUU7WUFDekRDLE1BQU07WUFDTixtQkFBbUI7WUFDbkIsb0JBQW9CO1lBQ3BCQyxTQUFTVDtZQUNUTSxVQUF3QixXQUFILEdBQUksSUFBR3JCLFlBQVl5QixJQUFJLEVBQUV0QixRQUFRdUIsYUFBYSxFQUFFO2dCQUNqRUwsVUFBVTtvQkFDTixXQUFXLEdBQUksSUFBR3JCLFlBQVlrQixHQUFHLEVBQUVmLFFBQVF3QixZQUFZLEVBQUU7d0JBQ3JEQyxXQUFXO3dCQUNYUCxVQUF3QixXQUFILEdBQUksSUFBR3JCLFlBQVlrQixHQUFHLEVBQUUsTUFBTTs0QkFDL0NXLElBQUk7NEJBQ0pSLFVBQVU7d0JBQ2Q7b0JBQ0o7b0JBQ0EsV0FBVyxHQUFJLElBQUdyQixZQUFZeUIsSUFBSSxFQUFFdEIsUUFBUTJCLFVBQVUsRUFBRTt3QkFDcERGLFdBQVc7d0JBQ1hQLFVBQVU7NEJBQ04sV0FBVyxHQUFJLElBQUdyQixZQUFZa0IsR0FBRyxFQUFFYixVQUFVMEIsUUFBUSxFQUFFO2dDQUNuREMsU0FBU3BCOzRCQUNiOzRCQUNBLFdBQVcsR0FBSSxJQUFHWixZQUFZa0IsR0FBRyxFQUFFLFVBQVU7Z0NBQ3pDRyxVQUF3QixXQUFILEdBQUksSUFBR3JCLFlBQVlrQixHQUFHLEVBQUUsS0FBSztvQ0FDOUNXLElBQUk7b0NBQ0pSLFVBQXdCLFdBQUgsR0FBSSxJQUFHckIsWUFBWWtCLEdBQUcsRUFBRSxTQUFTO3dDQUNsREcsVUFBVTtvQ0FDZDtnQ0FDSjs0QkFDSjt5QkFDSDtvQkFDTDtpQkFDSDtZQUNMO1FBQ0o7SUFDSjtBQUNKO0FBQ0EsTUFBTS9CLFNBQVMsQ0FBQyxHQUFHZ0IsY0FBY1MsSUFBSSxFQUFFUjtBQUV2QyxJQUFJLENBQUMsT0FBT3JCLFFBQVE4QixPQUFPLEtBQUssY0FBZSxPQUFPOUIsUUFBUThCLE9BQU8sS0FBSyxZQUFZOUIsUUFBUThCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzlCLFFBQVE4QixPQUFPLENBQUNpQixVQUFVLEtBQUssYUFBYTtJQUNyS2pELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUThCLE9BQU8sRUFBRSxjQUFjO1FBQUU3QixPQUFPO0lBQUs7SUFDbkVILE9BQU9rRCxNQUFNLENBQUNoRCxRQUFROEIsT0FBTyxFQUFFOUI7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUThCLE9BQU87QUFDbEMsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb250YWluZXIvUm9vdExheW91dEVycm9yLmpzP2ZiODQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBSb290TGF5b3V0RXJyb3I6IG51bGwsXG4gICAgc3R5bGVzOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIFJvb3RMYXlvdXRFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSb290TGF5b3V0RXJyb3I7XG4gICAgfSxcbiAgICBzdHlsZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2VcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9EaWFsb2cgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9EaWFsb2dcIik7XG5jb25zdCBfT3ZlcmxheSA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL092ZXJsYXlcIik7XG5jb25zdCBfVGVybWluYWwgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9UZXJtaW5hbFwiKTtcbmNvbnN0IF9ub29wdGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9ub29wLXRlbXBsYXRlXCIpO1xuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuXyhbXG4gICAgICAgIFwiXFxuICAubmV4dGpzLWNvbnRhaW5lci1yb290LWxheW91dC1lcnJvci1oZWFkZXIgPiBoNCB7XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgcGFkZGluZzogMDtcXG4gIH1cXG5cXG4gIC5uZXh0anMtY29udGFpbmVyLXJvb3QtbGF5b3V0LWVycm9yLWJvZHkgZm9vdGVyIHtcXG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1nYXApO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItcm9vdC1sYXlvdXQtZXJyb3ItYm9keSBmb290ZXIgcCB7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG5cXG4gIC5uZXh0anMtY29udGFpbmVyLXJvb3QtbGF5b3V0LWVycm9yLWJvZHkgc21hbGwge1xcbiAgICBjb2xvcjogIzc1NzU3NTtcXG4gIH1cXG5cIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuY29uc3QgUm9vdExheW91dEVycm9yID0gZnVuY3Rpb24gQnVpbGRFcnJvcihwYXJhbSkge1xuICAgIGxldCB7IG1pc3NpbmdUYWdzIH0gPSBwYXJhbTtcbiAgICBjb25zdCBtZXNzYWdlID0gXCJQbGVhc2UgbWFrZSBzdXJlIHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZyB0YWdzIGluIHlvdXIgcm9vdCBsYXlvdXQ6IDxodG1sPiwgPGJvZHk+LlxcblxcblwiICsgKFwiTWlzc2luZyByZXF1aXJlZCByb290IGxheW91dCB0YWdcIiArIChtaXNzaW5nVGFncy5sZW5ndGggPT09IDEgPyBcIlwiIDogXCJzXCIpICsgXCI6IFwiKSArIG1pc3NpbmdUYWdzLmpvaW4oXCIsIFwiKTtcbiAgICBjb25zdCBub29wID0gX3JlYWN0LmRlZmF1bHQudXNlQ2FsbGJhY2soKCk9Pnt9LCBbXSk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX092ZXJsYXkuT3ZlcmxheSwge1xuICAgICAgICBmaXhlZDogdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0RpYWxvZy5EaWFsb2csIHtcbiAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFwibmV4dGpzX19jb250YWluZXJfcm9vdF9sYXlvdXRfZXJyb3JfbGFiZWxcIixcbiAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcIm5leHRqc19fY29udGFpbmVyX3Jvb3RfbGF5b3V0X2Vycm9yX2Rlc2NcIixcbiAgICAgICAgICAgIG9uQ2xvc2U6IG5vb3AsXG4gICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX0RpYWxvZy5EaWFsb2dDb250ZW50LCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfRGlhbG9nLkRpYWxvZ0hlYWRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy1jb250YWluZXItcm9vdC1sYXlvdXQtZXJyb3ItaGVhZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImg0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJuZXh0anNfX2NvbnRhaW5lcl9yb290X2xheW91dF9lcnJvcl9sYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIk1pc3NpbmcgcmVxdWlyZWQgdGFnc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX0RpYWxvZy5EaWFsb2dCb2R5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwibmV4dGpzLWNvbnRhaW5lci1yb290LWxheW91dC1lcnJvci1ib2R5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX1Rlcm1pbmFsLlRlcm1pbmFsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiZm9vdGVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIm5leHRqc19fY29udGFpbmVyX3Jvb3RfbGF5b3V0X2Vycm9yX2Rlc2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic21hbGxcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIlRoaXMgZXJyb3IgYW5kIGNhbiBvbmx5IGJlIGRpc21pc3NlZCBieSBwcm92aWRpbmcgYWxsIHJlcXVpcmVkIHRhZ3MuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH0pO1xufTtcbmNvbnN0IHN0eWxlcyA9ICgwLCBfbm9vcHRlbXBsYXRlLm5vb3ApKF90ZW1wbGF0ZU9iamVjdCgpKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Um9vdExheW91dEVycm9yLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIlJvb3RMYXlvdXRFcnJvciIsInN0eWxlcyIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfRGlhbG9nIiwiX092ZXJsYXkiLCJfVGVybWluYWwiLCJfbm9vcHRlbXBsYXRlIiwiX3RlbXBsYXRlT2JqZWN0IiwiZGF0YSIsIkJ1aWxkRXJyb3IiLCJwYXJhbSIsIm1pc3NpbmdUYWdzIiwibWVzc2FnZSIsImxlbmd0aCIsImpvaW4iLCJub29wIiwiZGVmYXVsdCIsInVzZUNhbGxiYWNrIiwianN4IiwiT3ZlcmxheSIsImZpeGVkIiwiY2hpbGRyZW4iLCJEaWFsb2ciLCJ0eXBlIiwib25DbG9zZSIsImpzeHMiLCJEaWFsb2dDb250ZW50IiwiRGlhbG9nSGVhZGVyIiwiY2xhc3NOYW1lIiwiaWQiLCJEaWFsb2dCb2R5IiwiVGVybWluYWwiLCJjb250ZW50IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RootLayoutError.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js": +/*!**********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js ***! + \**********************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CallStackFrame\", ({\n enumerable: true,\n get: function() {\n return CallStackFrame;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _stackframe = __webpack_require__(/*! ../../helpers/stack-frame */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\");\nconst _useopenineditor = __webpack_require__(/*! ../../helpers/use-open-in-editor */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\");\nconst CallStackFrame = function CallStackFrame(param) {\n let { frame } = param;\n var _frame_originalStackFrame;\n // TODO: ability to expand resolved frames\n // TODO: render error or external indicator\n const f = (_frame_originalStackFrame = frame.originalStackFrame) != null ? _frame_originalStackFrame : frame.sourceStackFrame;\n const hasSource = Boolean(frame.originalCodeFrame);\n const open = (0, _useopenineditor.useOpenInEditor)(hasSource ? {\n file: f.file,\n lineNumber: f.lineNumber,\n column: f.column\n } : undefined);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-call-stack-frame\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h3\", {\n \"data-nextjs-frame-expanded\": Boolean(frame.expanded),\n children: f.methodName\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-has-source\": hasSource ? \"true\" : undefined,\n tabIndex: hasSource ? 10 : undefined,\n role: hasSource ? \"link\" : undefined,\n onClick: open,\n title: hasSource ? \"Click to open in your editor\" : undefined,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n children: (0, _stackframe.getFrameSource)(f)\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n })\n ]\n })\n ]\n })\n ]\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CallStackFrame.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvQ2FsbFN0YWNrRnJhbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGtEQUFpRDtJQUM3Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsa0hBQXlDO0FBQ2xGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLGdJQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gseUJBQXlCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLHdHQUFPO0FBQ3ZFLE1BQU1JLGNBQWNKLG1CQUFPQSxDQUFDLHFJQUEyQjtBQUN2RCxNQUFNSyxtQkFBbUJMLG1CQUFPQSxDQUFDLG1KQUFrQztBQUNuRSxNQUFNRixpQkFBaUIsU0FBU0EsZUFBZVEsS0FBSztJQUNoRCxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHRDtJQUNoQixJQUFJRTtJQUNKLDBDQUEwQztJQUMxQywyQ0FBMkM7SUFDM0MsTUFBTUMsSUFBSSxDQUFDRCw0QkFBNEJELE1BQU1HLGtCQUFrQixLQUFLLE9BQU9GLDRCQUE0QkQsTUFBTUksZ0JBQWdCO0lBQzdILE1BQU1DLFlBQVlDLFFBQVFOLE1BQU1PLGlCQUFpQjtJQUNqRCxNQUFNQyxPQUFPLENBQUMsR0FBR1YsaUJBQWlCVyxlQUFlLEVBQUVKLFlBQVk7UUFDM0RLLE1BQU1SLEVBQUVRLElBQUk7UUFDWkMsWUFBWVQsRUFBRVMsVUFBVTtRQUN4QkMsUUFBUVYsRUFBRVUsTUFBTTtJQUNwQixJQUFJQztJQUNKLE9BQXFCLFdBQUgsR0FBSSxJQUFHbkIsWUFBWW9CLElBQUksRUFBRSxPQUFPO1FBQzlDLGdDQUFnQztRQUNoQ0MsVUFBVTtZQUNOLFdBQVcsR0FBSSxJQUFHckIsWUFBWXNCLEdBQUcsRUFBRSxNQUFNO2dCQUNyQyw4QkFBOEJWLFFBQVFOLE1BQU1pQixRQUFRO2dCQUNwREYsVUFBVWIsRUFBRWdCLFVBQVU7WUFDMUI7WUFDQSxXQUFXLEdBQUksSUFBR3hCLFlBQVlvQixJQUFJLEVBQUUsT0FBTztnQkFDdkMsbUJBQW1CVCxZQUFZLFNBQVNRO2dCQUN4Q00sVUFBVWQsWUFBWSxLQUFLUTtnQkFDM0JPLE1BQU1mLFlBQVksU0FBU1E7Z0JBQzNCUSxTQUFTYjtnQkFDVGMsT0FBT2pCLFlBQVksaUNBQWlDUTtnQkFDcERFLFVBQVU7b0JBQ04sV0FBVyxHQUFJLElBQUdyQixZQUFZc0IsR0FBRyxFQUFFLFFBQVE7d0JBQ3ZDRCxVQUFVLENBQUMsR0FBR2xCLFlBQVkwQixjQUFjLEVBQUVyQjtvQkFDOUM7b0JBQ0EsV0FBVyxHQUFJLElBQUdSLFlBQVlvQixJQUFJLEVBQUUsT0FBTzt3QkFDdkNVLE9BQU87d0JBQ1BDLFNBQVM7d0JBQ1RDLE1BQU07d0JBQ05DLFFBQVE7d0JBQ1JDLGFBQWE7d0JBQ2JDLGVBQWU7d0JBQ2ZDLGdCQUFnQjt3QkFDaEJmLFVBQVU7NEJBQ04sV0FBVyxHQUFJLElBQUdyQixZQUFZc0IsR0FBRyxFQUFFLFFBQVE7Z0NBQ3ZDZSxHQUFHOzRCQUNQOzRCQUNBLFdBQVcsR0FBSSxJQUFHckMsWUFBWXNCLEdBQUcsRUFBRSxZQUFZO2dDQUMzQ2dCLFFBQVE7NEJBQ1o7NEJBQ0EsV0FBVyxHQUFJLElBQUd0QyxZQUFZc0IsR0FBRyxFQUFFLFFBQVE7Z0NBQ3ZDaUIsSUFBSTtnQ0FDSkMsSUFBSTtnQ0FDSkMsSUFBSTtnQ0FDSkMsSUFBSTs0QkFDUjt5QkFDSDtvQkFDTDtpQkFDSDtZQUNMO1NBQ0g7SUFDTDtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9qRCxRQUFRa0QsT0FBTyxLQUFLLGNBQWUsT0FBT2xELFFBQVFrRCxPQUFPLEtBQUssWUFBWWxELFFBQVFrRCxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9sRCxRQUFRa0QsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3JELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWtELE9BQU8sRUFBRSxjQUFjO1FBQUVqRCxPQUFPO0lBQUs7SUFDbkVILE9BQU9zRCxNQUFNLENBQUNwRCxRQUFRa0QsT0FBTyxFQUFFbEQ7SUFDL0JxRCxPQUFPckQsT0FBTyxHQUFHQSxRQUFRa0QsT0FBTztBQUNsQyxFQUVBLDBDQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvQ2FsbFN0YWNrRnJhbWUuanM/NzFiNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNhbGxTdGFja0ZyYW1lXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDYWxsU3RhY2tGcmFtZTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9zdGFja2ZyYW1lID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvc3RhY2stZnJhbWVcIik7XG5jb25zdCBfdXNlb3BlbmluZWRpdG9yID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvdXNlLW9wZW4taW4tZWRpdG9yXCIpO1xuY29uc3QgQ2FsbFN0YWNrRnJhbWUgPSBmdW5jdGlvbiBDYWxsU3RhY2tGcmFtZShwYXJhbSkge1xuICAgIGxldCB7IGZyYW1lIH0gPSBwYXJhbTtcbiAgICB2YXIgX2ZyYW1lX29yaWdpbmFsU3RhY2tGcmFtZTtcbiAgICAvLyBUT0RPOiBhYmlsaXR5IHRvIGV4cGFuZCByZXNvbHZlZCBmcmFtZXNcbiAgICAvLyBUT0RPOiByZW5kZXIgZXJyb3Igb3IgZXh0ZXJuYWwgaW5kaWNhdG9yXG4gICAgY29uc3QgZiA9IChfZnJhbWVfb3JpZ2luYWxTdGFja0ZyYW1lID0gZnJhbWUub3JpZ2luYWxTdGFja0ZyYW1lKSAhPSBudWxsID8gX2ZyYW1lX29yaWdpbmFsU3RhY2tGcmFtZSA6IGZyYW1lLnNvdXJjZVN0YWNrRnJhbWU7XG4gICAgY29uc3QgaGFzU291cmNlID0gQm9vbGVhbihmcmFtZS5vcmlnaW5hbENvZGVGcmFtZSk7XG4gICAgY29uc3Qgb3BlbiA9ICgwLCBfdXNlb3BlbmluZWRpdG9yLnVzZU9wZW5JbkVkaXRvcikoaGFzU291cmNlID8ge1xuICAgICAgICBmaWxlOiBmLmZpbGUsXG4gICAgICAgIGxpbmVOdW1iZXI6IGYubGluZU51bWJlcixcbiAgICAgICAgY29sdW1uOiBmLmNvbHVtblxuICAgIH0gOiB1bmRlZmluZWQpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgIFwiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZVwiOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImgzXCIsIHtcbiAgICAgICAgICAgICAgICBcImRhdGEtbmV4dGpzLWZyYW1lLWV4cGFuZGVkXCI6IEJvb2xlYW4oZnJhbWUuZXhwYW5kZWQpLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBmLm1ldGhvZE5hbWVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIFwiZGF0YS1oYXMtc291cmNlXCI6IGhhc1NvdXJjZSA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHRhYkluZGV4OiBoYXNTb3VyY2UgPyAxMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICByb2xlOiBoYXNTb3VyY2UgPyBcImxpbmtcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiBvcGVuLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBoYXNTb3VyY2UgPyBcIkNsaWNrIHRvIG9wZW4gaW4geW91ciBlZGl0b3JcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogKDAsIF9zdGFja2ZyYW1lLmdldEZyYW1lU291cmNlKShmKVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNMTggMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBvbHlsaW5lXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBcIjE1IDMgMjEgMyAyMSA5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibGluZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxOiBcIjEwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBcIjE0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiBcIjIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBcIjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q2FsbFN0YWNrRnJhbWUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkNhbGxTdGFja0ZyYW1lIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9zdGFja2ZyYW1lIiwiX3VzZW9wZW5pbmVkaXRvciIsInBhcmFtIiwiZnJhbWUiLCJfZnJhbWVfb3JpZ2luYWxTdGFja0ZyYW1lIiwiZiIsIm9yaWdpbmFsU3RhY2tGcmFtZSIsInNvdXJjZVN0YWNrRnJhbWUiLCJoYXNTb3VyY2UiLCJCb29sZWFuIiwib3JpZ2luYWxDb2RlRnJhbWUiLCJvcGVuIiwidXNlT3BlbkluRWRpdG9yIiwiZmlsZSIsImxpbmVOdW1iZXIiLCJjb2x1bW4iLCJ1bmRlZmluZWQiLCJqc3hzIiwiY2hpbGRyZW4iLCJqc3giLCJleHBhbmRlZCIsIm1ldGhvZE5hbWUiLCJ0YWJJbmRleCIsInJvbGUiLCJvbkNsaWNrIiwidGl0bGUiLCJnZXRGcmFtZVNvdXJjZSIsInhtbG5zIiwidmlld0JveCIsImZpbGwiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsImQiLCJwb2ludHMiLCJ4MSIsInkxIiwieDIiLCJ5MiIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/ComponentStackFrameRow.js": +/*!******************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/ComponentStackFrameRow.js ***! + \******************************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ComponentStackFrameRow\", ({\n enumerable: true,\n get: function() {\n return ComponentStackFrameRow;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _useopenineditor = __webpack_require__(/*! ../../helpers/use-open-in-editor */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\");\nfunction EditorLink(param) {\n let { children, componentStackFrame: { file, column, lineNumber } } = param;\n const open = (0, _useopenineditor.useOpenInEditor)({\n file,\n column,\n lineNumber\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n tabIndex: 10,\n role: \"link\",\n onClick: open,\n title: \"Click to open in your editor\",\n children: [\n children,\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n })\n ]\n })\n ]\n });\n}\nfunction formatLineNumber(lineNumber, column) {\n if (!column) {\n return lineNumber;\n }\n return lineNumber + \":\" + column;\n}\nfunction LocationLine(param) {\n let { componentStackFrame } = param;\n const { file, lineNumber, column } = componentStackFrame;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n file,\n \" \",\n lineNumber ? \"(\" + formatLineNumber(lineNumber, column) + \")\" : \"\"\n ]\n });\n}\nfunction SourceLocation(param) {\n let { componentStackFrame } = param;\n const { file, canOpenInEditor } = componentStackFrame;\n if (file && canOpenInEditor) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(EditorLink, {\n componentStackFrame: componentStackFrame,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(LocationLine, {\n componentStackFrame: componentStackFrame\n })\n })\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(LocationLine, {\n componentStackFrame: componentStackFrame\n })\n });\n}\nfunction ComponentStackFrameRow(param) {\n let { componentStackFrame } = param;\n const { component } = componentStackFrame;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-component-stack-frame\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h3\", {\n children: component\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(SourceLocation, {\n componentStackFrame: componentStackFrame\n })\n ]\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ComponentStackFrameRow.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvQ29tcG9uZW50U3RhY2tGcmFtZVJvdy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMERBQXlEO0lBQ3JESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxrSEFBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDdkUsTUFBTUksbUJBQW1CSixtQkFBT0EsQ0FBQyxtSkFBa0M7QUFDbkUsU0FBU0ssV0FBV0MsS0FBSztJQUNyQixJQUFJLEVBQUVDLFFBQVEsRUFBRUMscUJBQXFCLEVBQUVDLElBQUksRUFBRUMsTUFBTSxFQUFFQyxVQUFVLEVBQUUsRUFBRSxHQUFHTDtJQUN0RSxNQUFNTSxPQUFPLENBQUMsR0FBR1IsaUJBQWlCUyxlQUFlLEVBQUU7UUFDL0NKO1FBQ0FDO1FBQ0FDO0lBQ0o7SUFDQSxPQUFxQixXQUFILEdBQUksSUFBR1YsWUFBWWEsSUFBSSxFQUFFLE9BQU87UUFDOUNDLFVBQVU7UUFDVkMsTUFBTTtRQUNOQyxTQUFTTDtRQUNUTSxPQUFPO1FBQ1BYLFVBQVU7WUFDTkE7WUFDQSxXQUFXLEdBQUksSUFBR04sWUFBWWEsSUFBSSxFQUFFLE9BQU87Z0JBQ3ZDSyxPQUFPO2dCQUNQQyxTQUFTO2dCQUNUQyxNQUFNO2dCQUNOQyxRQUFRO2dCQUNSQyxhQUFhO2dCQUNiQyxlQUFlO2dCQUNmQyxnQkFBZ0I7Z0JBQ2hCbEIsVUFBVTtvQkFDTixXQUFXLEdBQUksSUFBR04sWUFBWXlCLEdBQUcsRUFBRSxRQUFRO3dCQUN2Q0MsR0FBRztvQkFDUDtvQkFDQSxXQUFXLEdBQUksSUFBRzFCLFlBQVl5QixHQUFHLEVBQUUsWUFBWTt3QkFDM0NFLFFBQVE7b0JBQ1o7b0JBQ0EsV0FBVyxHQUFJLElBQUczQixZQUFZeUIsR0FBRyxFQUFFLFFBQVE7d0JBQ3ZDRyxJQUFJO3dCQUNKQyxJQUFJO3dCQUNKQyxJQUFJO3dCQUNKQyxJQUFJO29CQUNSO2lCQUNIO1lBQ0w7U0FDSDtJQUNMO0FBQ0o7QUFDQSxTQUFTQyxpQkFBaUJ0QixVQUFVLEVBQUVELE1BQU07SUFDeEMsSUFBSSxDQUFDQSxRQUFRO1FBQ1QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BLGFBQWEsTUFBTUQ7QUFDOUI7QUFDQSxTQUFTd0IsYUFBYTVCLEtBQUs7SUFDdkIsSUFBSSxFQUFFRSxtQkFBbUIsRUFBRSxHQUFHRjtJQUM5QixNQUFNLEVBQUVHLElBQUksRUFBRUUsVUFBVSxFQUFFRCxNQUFNLEVBQUUsR0FBR0Y7SUFDckMsT0FBcUIsV0FBSCxHQUFJLElBQUdQLFlBQVlhLElBQUksRUFBRWIsWUFBWWtDLFFBQVEsRUFBRTtRQUM3RDVCLFVBQVU7WUFDTkU7WUFDQTtZQUNBRSxhQUFhLE1BQU1zQixpQkFBaUJ0QixZQUFZRCxVQUFVLE1BQU07U0FDbkU7SUFDTDtBQUNKO0FBQ0EsU0FBUzBCLGVBQWU5QixLQUFLO0lBQ3pCLElBQUksRUFBRUUsbUJBQW1CLEVBQUUsR0FBR0Y7SUFDOUIsTUFBTSxFQUFFRyxJQUFJLEVBQUU0QixlQUFlLEVBQUUsR0FBRzdCO0lBQ2xDLElBQUlDLFFBQVE0QixpQkFBaUI7UUFDekIsT0FBcUIsV0FBSCxHQUFJLElBQUdwQyxZQUFZeUIsR0FBRyxFQUFFckIsWUFBWTtZQUNsREcscUJBQXFCQTtZQUNyQkQsVUFBd0IsV0FBSCxHQUFJLElBQUdOLFlBQVl5QixHQUFHLEVBQUUsUUFBUTtnQkFDakRuQixVQUF3QixXQUFILEdBQUksSUFBR04sWUFBWXlCLEdBQUcsRUFBRVEsY0FBYztvQkFDdkQxQixxQkFBcUJBO2dCQUN6QjtZQUNKO1FBQ0o7SUFDSjtJQUNBLE9BQXFCLFdBQUgsR0FBSSxJQUFHUCxZQUFZeUIsR0FBRyxFQUFFLE9BQU87UUFDN0NuQixVQUF3QixXQUFILEdBQUksSUFBR04sWUFBWXlCLEdBQUcsRUFBRVEsY0FBYztZQUN2RDFCLHFCQUFxQkE7UUFDekI7SUFDSjtBQUNKO0FBQ0EsU0FBU1YsdUJBQXVCUSxLQUFLO0lBQ2pDLElBQUksRUFBRUUsbUJBQW1CLEVBQUUsR0FBR0Y7SUFDOUIsTUFBTSxFQUFFZ0MsU0FBUyxFQUFFLEdBQUc5QjtJQUN0QixPQUFxQixXQUFILEdBQUksSUFBR1AsWUFBWWEsSUFBSSxFQUFFLE9BQU87UUFDOUMscUNBQXFDO1FBQ3JDUCxVQUFVO1lBQ04sV0FBVyxHQUFJLElBQUdOLFlBQVl5QixHQUFHLEVBQUUsTUFBTTtnQkFDckNuQixVQUFVK0I7WUFDZDtZQUNBLFdBQVcsR0FBSSxJQUFHckMsWUFBWXlCLEdBQUcsRUFBRVUsZ0JBQWdCO2dCQUMvQzVCLHFCQUFxQkE7WUFDekI7U0FDSDtJQUNMO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT2QsUUFBUTZDLE9BQU8sS0FBSyxjQUFlLE9BQU83QyxRQUFRNkMsT0FBTyxLQUFLLFlBQVk3QyxRQUFRNkMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPN0MsUUFBUTZDLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktoRCxPQUFPQyxjQUFjLENBQUNDLFFBQVE2QyxPQUFPLEVBQUUsY0FBYztRQUFFNUMsT0FBTztJQUFLO0lBQ25FSCxPQUFPaUQsTUFBTSxDQUFDL0MsUUFBUTZDLE9BQU8sRUFBRTdDO0lBQy9CZ0QsT0FBT2hELE9BQU8sR0FBR0EsUUFBUTZDLE9BQU87QUFDbEMsRUFFQSxrREFBa0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb250YWluZXIvUnVudGltZUVycm9yL0NvbXBvbmVudFN0YWNrRnJhbWVSb3cuanM/Njg4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbXBvbmVudFN0YWNrRnJhbWVSb3dcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVudFN0YWNrRnJhbWVSb3c7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfdXNlb3BlbmluZWRpdG9yID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvdXNlLW9wZW4taW4tZWRpdG9yXCIpO1xuZnVuY3Rpb24gRWRpdG9yTGluayhwYXJhbSkge1xuICAgIGxldCB7IGNoaWxkcmVuLCBjb21wb25lbnRTdGFja0ZyYW1lOiB7IGZpbGUsIGNvbHVtbiwgbGluZU51bWJlciB9IH0gPSBwYXJhbTtcbiAgICBjb25zdCBvcGVuID0gKDAsIF91c2VvcGVuaW5lZGl0b3IudXNlT3BlbkluRWRpdG9yKSh7XG4gICAgICAgIGZpbGUsXG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgbGluZU51bWJlclxuICAgIH0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgIHRhYkluZGV4OiAxMCxcbiAgICAgICAgcm9sZTogXCJsaW5rXCIsXG4gICAgICAgIG9uQ2xpY2s6IG9wZW4sXG4gICAgICAgIHRpdGxlOiBcIkNsaWNrIHRvIG9wZW4gaW4geW91ciBlZGl0b3JcIixcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJzdmdcIiwge1xuICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDZcIlxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBvbHlsaW5lXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50czogXCIxNSAzIDIxIDMgMjEgOVwiXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibGluZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4MTogXCIxMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTE6IFwiMTRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHgyOiBcIjIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MjogXCIzXCJcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59XG5mdW5jdGlvbiBmb3JtYXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIsIGNvbHVtbikge1xuICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBsaW5lTnVtYmVyO1xuICAgIH1cbiAgICByZXR1cm4gbGluZU51bWJlciArIFwiOlwiICsgY29sdW1uO1xufVxuZnVuY3Rpb24gTG9jYXRpb25MaW5lKHBhcmFtKSB7XG4gICAgbGV0IHsgY29tcG9uZW50U3RhY2tGcmFtZSB9ID0gcGFyYW07XG4gICAgY29uc3QgeyBmaWxlLCBsaW5lTnVtYmVyLCBjb2x1bW4gfSA9IGNvbXBvbmVudFN0YWNrRnJhbWU7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICBsaW5lTnVtYmVyID8gXCIoXCIgKyBmb3JtYXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIsIGNvbHVtbikgKyBcIilcIiA6IFwiXCJcbiAgICAgICAgXVxuICAgIH0pO1xufVxuZnVuY3Rpb24gU291cmNlTG9jYXRpb24ocGFyYW0pIHtcbiAgICBsZXQgeyBjb21wb25lbnRTdGFja0ZyYW1lIH0gPSBwYXJhbTtcbiAgICBjb25zdCB7IGZpbGUsIGNhbk9wZW5JbkVkaXRvciB9ID0gY29tcG9uZW50U3RhY2tGcmFtZTtcbiAgICBpZiAoZmlsZSAmJiBjYW5PcGVuSW5FZGl0b3IpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoRWRpdG9yTGluaywge1xuICAgICAgICAgICAgY29tcG9uZW50U3RhY2tGcmFtZTogY29tcG9uZW50U3RhY2tGcmFtZSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoTG9jYXRpb25MaW5lLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrRnJhbWU6IGNvbXBvbmVudFN0YWNrRnJhbWVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiZGl2XCIsIHtcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoTG9jYXRpb25MaW5lLCB7XG4gICAgICAgICAgICBjb21wb25lbnRTdGFja0ZyYW1lOiBjb21wb25lbnRTdGFja0ZyYW1lXG4gICAgICAgIH0pXG4gICAgfSk7XG59XG5mdW5jdGlvbiBDb21wb25lbnRTdGFja0ZyYW1lUm93KHBhcmFtKSB7XG4gICAgbGV0IHsgY29tcG9uZW50U3RhY2tGcmFtZSB9ID0gcGFyYW07XG4gICAgY29uc3QgeyBjb21wb25lbnQgfSA9IGNvbXBvbmVudFN0YWNrRnJhbWU7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiZGl2XCIsIHtcbiAgICAgICAgXCJkYXRhLW5leHRqcy1jb21wb25lbnQtc3RhY2stZnJhbWVcIjogdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoM1wiLCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGNvbXBvbmVudFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFNvdXJjZUxvY2F0aW9uLCB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50U3RhY2tGcmFtZTogY29tcG9uZW50U3RhY2tGcmFtZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db21wb25lbnRTdGFja0ZyYW1lUm93LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJDb21wb25lbnRTdGFja0ZyYW1lUm93IiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl91c2VvcGVuaW5lZGl0b3IiLCJFZGl0b3JMaW5rIiwicGFyYW0iLCJjaGlsZHJlbiIsImNvbXBvbmVudFN0YWNrRnJhbWUiLCJmaWxlIiwiY29sdW1uIiwibGluZU51bWJlciIsIm9wZW4iLCJ1c2VPcGVuSW5FZGl0b3IiLCJqc3hzIiwidGFiSW5kZXgiLCJyb2xlIiwib25DbGljayIsInRpdGxlIiwieG1sbnMiLCJ2aWV3Qm94IiwiZmlsbCIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwianN4IiwiZCIsInBvaW50cyIsIngxIiwieTEiLCJ4MiIsInkyIiwiZm9ybWF0TGluZU51bWJlciIsIkxvY2F0aW9uTGluZSIsIkZyYWdtZW50IiwiU291cmNlTG9jYXRpb24iLCJjYW5PcGVuSW5FZGl0b3IiLCJjb21wb25lbnQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/ComponentStackFrameRow.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/FrameworkIcon.js": +/*!*********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/FrameworkIcon.js ***! + \*********************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"FrameworkIcon\", ({\n enumerable: true,\n get: function() {\n return FrameworkIcon;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nfunction FrameworkIcon(param) {\n let { framework } = param;\n if (framework === \"react\") {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n \"data-nextjs-call-stack-framework-icon\": \"react\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 410 369\",\n fill: \"none\",\n shapeRendering: \"geometricPrecision\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"5\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M204.995 224.552C226.56 224.552 244.042 207.07 244.042 185.506C244.042 163.941 226.56 146.459 204.995 146.459C183.43 146.459 165.948 163.941 165.948 185.506C165.948 207.07 183.43 224.552 204.995 224.552Z\",\n fill: \"currentColor\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M409.99 184.505C409.99 153.707 381.437 126.667 335.996 108.925C343.342 60.6535 334.19 22.3878 307.492 6.98883C283.649 -6.77511 250.631 -0.0395641 214.512 25.9753C211.316 28.2692 208.143 30.7097 204.97 33.2477C201.822 30.7097 198.65 28.2692 195.477 25.9753C159.359 -0.0395641 126.34 -6.79951 102.497 6.98883C75.8237 22.3878 66.6721 60.6291 74.0422 108.852C28.5529 126.618 0 153.682 0 184.505C0 215.303 28.5528 242.342 73.9934 260.084C66.6477 308.356 75.7993 346.621 102.497 362.02C110.575 366.682 119.727 369 129.684 369C149.085 369 171.61 360.215 195.477 343.034C198.674 340.74 201.847 338.3 205.019 335.762C208.167 338.3 211.34 340.74 214.512 343.034C238.38 360.239 260.905 369 280.306 369C290.263 369 299.415 366.682 307.492 362.02C331.335 348.256 342 316.287 337.534 271.993C337.143 268.089 336.631 264.135 335.996 260.109C381.461 242.367 409.99 215.327 409.99 184.505ZM225.934 41.8136C246.238 27.1955 265.127 19.5814 280.306 19.5814C286.871 19.5814 292.728 20.9968 297.731 23.8765C315.204 33.9798 322.672 62.9475 317.327 102.433C299.756 97.0401 280.306 92.9158 259.392 90.2802C246.872 73.8074 233.597 58.9453 220.003 46.2551C221.98 44.7421 223.957 43.229 225.934 41.8136ZM112.259 23.8765C117.262 20.9968 123.119 19.5814 129.684 19.5814C144.863 19.5814 163.752 27.1711 184.056 41.8136C186.033 43.229 188.01 44.7176 189.986 46.2551C176.393 58.9453 163.142 73.783 150.622 90.2558C129.732 92.8914 110.258 97.0401 92.687 102.409C87.3424 62.9475 94.7857 33.9798 112.259 23.8765ZM19.5233 184.505C19.5233 164.322 40.9014 143.359 77.776 128.253C81.9003 146.141 88.0502 165.054 96.1768 184.456C88.0014 203.881 81.8515 222.819 77.7272 240.732C40.9014 225.626 19.5233 204.687 19.5233 184.505ZM184.056 327.196C154.966 348.134 128.805 354.675 112.259 345.133C94.7857 335.029 87.3181 306.062 92.6626 266.576C110.234 271.969 129.684 276.093 150.598 278.729C163.117 295.202 176.393 310.064 189.986 322.754C188.01 324.292 186.033 325.78 184.056 327.196ZM204.995 310.04C180.591 287.685 157.138 257.815 137.347 223.551C132.051 214.4 121.344 191.396 117 182.489C113.535 190.786 110.112 198.398 107.427 206.5C109.623 210.575 118.092 229.213 120.434 233.288C125.071 241.317 129.928 249.127 134.931 256.692C120.898 254.227 107.915 251.055 96.1035 247.321C102.815 217.011 116.213 182.064 137.347 145.458C142.545 136.453 153.838 116.346 159.5 108C150.568 109.147 143.395 108.767 135 110.5C132.56 114.453 122.777 131.645 120.434 135.721C115.749 143.823 111.454 151.925 107.427 159.978C102.546 146.581 98.8124 133.744 96.1524 121.64C125.755 112.293 162.727 106.411 204.995 106.411C215.562 106.411 237.63 106.197 247.49 106.905C242.048 99.7544 237.38 93.2819 231.694 86.888C227.082 86.7416 209.705 86.888 204.995 86.888C195.672 86.888 186.545 87.2053 177.589 87.7422C186.472 77.1752 195.672 67.5111 204.995 58.9697C229.375 81.3239 252.851 111.195 272.643 145.458C277.841 154.463 289.073 175.426 293.49 184.505C296.98 176.207 300.281 168.64 302.99 160.489C300.793 156.389 291.898 139.747 289.555 135.696C284.918 127.667 280.062 119.858 275.059 112.317C289.092 114.782 302.075 117.954 313.886 121.688C307.175 151.998 293.777 186.945 272.643 223.551C267.445 232.556 252.651 253.178 246.99 261.524C255.922 260.377 265.595 258.663 273.99 256.93C276.43 252.976 287.212 237.364 289.555 233.288C294.216 225.235 298.512 217.182 302.489 209.153C307.224 222.185 310.982 234.997 313.715 247.394C284.138 256.741 247.214 262.598 204.995 262.598C194.428 262.598 169.859 261.208 160 260.5C165.442 267.65 171.304 275.095 176.99 281.489C181.602 281.635 200.285 282.121 204.995 282.121C214.317 282.121 223.444 281.804 232.401 281.267C223.493 291.834 214.317 301.498 204.995 310.04ZM297.731 345.133C281.185 354.699 254.999 348.159 225.934 327.196C223.957 325.78 221.98 324.292 220.003 322.754C233.597 310.064 246.848 295.226 259.367 278.753C280.233 276.118 299.659 271.993 317.205 266.625C317.547 269.089 317.888 271.554 318.132 273.97C321.72 309.649 314.277 335.566 297.731 345.133ZM332.262 240.756C328.065 222.599 321.842 203.686 313.813 184.578C321.988 165.152 328.138 146.215 332.262 128.302C369.088 143.408 390.466 164.322 390.466 184.505C390.466 204.687 369.113 225.626 332.262 240.756Z\",\n fill: \"currentColor\"\n })\n ]\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n \"data-nextjs-call-stack-framework-icon\": \"next\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 180 180\",\n fill: \"none\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"mask\", {\n id: \"mask0_408_139\",\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"180\",\n height: \"180\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"circle\", {\n cx: \"90\",\n cy: \"90\",\n r: \"90\",\n fill: \"black\"\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"g\", {\n mask: \"url(#mask0_408_139)\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"circle\", {\n cx: \"90\",\n cy: \"90\",\n r: \"87\",\n fill: \"black\",\n stroke: \"white\",\n strokeWidth: \"6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M149.508 157.52L69.142 54H54V125.97H66.1136V69.3836L139.999 164.845C143.333 162.614 146.509 160.165 149.508 157.52Z\",\n fill: \"url(#paint0_linear_408_139)\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"rect\", {\n x: \"115\",\n y: \"54\",\n width: \"12\",\n height: \"72\",\n fill: \"url(#paint1_linear_408_139)\"\n })\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"defs\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"linearGradient\", {\n id: \"paint0_linear_408_139\",\n x1: \"109\",\n y1: \"116.5\",\n x2: \"144.5\",\n y2: \"160.5\",\n gradientUnits: \"userSpaceOnUse\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n stopColor: \"white\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n offset: \"1\",\n stopColor: \"white\",\n stopOpacity: \"0\"\n })\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"linearGradient\", {\n id: \"paint1_linear_408_139\",\n x1: \"121\",\n y1: \"54\",\n x2: \"120.799\",\n y2: \"106.875\",\n gradientUnits: \"userSpaceOnUse\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n stopColor: \"white\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n offset: \"1\",\n stopColor: \"white\",\n stopOpacity: \"0\"\n })\n ]\n })\n ]\n })\n ]\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=FrameworkIcon.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvRnJhbWV3b3JrSWNvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsaURBQWdEO0lBQzVDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxrSEFBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDdkUsU0FBU0YsY0FBY00sS0FBSztJQUN4QixJQUFJLEVBQUVDLFNBQVMsRUFBRSxHQUFHRDtJQUNwQixJQUFJQyxjQUFjLFNBQVM7UUFDdkIsT0FBcUIsV0FBSCxHQUFJLElBQUdKLFlBQVlLLElBQUksRUFBRSxPQUFPO1lBQzlDLHlDQUF5QztZQUN6Q0MsT0FBTztZQUNQQyxPQUFPO1lBQ1BDLFFBQVE7WUFDUkMsU0FBUztZQUNUQyxNQUFNO1lBQ05DLGdCQUFnQjtZQUNoQkMsUUFBUTtZQUNSQyxlQUFlO1lBQ2ZDLGdCQUFnQjtZQUNoQkMsYUFBYTtZQUNiQyxVQUFVO2dCQUNOLFdBQVcsR0FBSSxJQUFHaEIsWUFBWWlCLEdBQUcsRUFBRSxRQUFRO29CQUN2Q0MsR0FBRztvQkFDSFIsTUFBTTtnQkFDVjtnQkFDQSxXQUFXLEdBQUksSUFBR1YsWUFBWWlCLEdBQUcsRUFBRSxRQUFRO29CQUN2Q0MsR0FBRztvQkFDSFIsTUFBTTtnQkFDVjthQUNIO1FBQ0w7SUFDSjtJQUNBLE9BQXFCLFdBQUgsR0FBSSxJQUFHVixZQUFZSyxJQUFJLEVBQUUsT0FBTztRQUM5Qyx5Q0FBeUM7UUFDekNDLE9BQU87UUFDUEMsT0FBTztRQUNQQyxRQUFRO1FBQ1JDLFNBQVM7UUFDVEMsTUFBTTtRQUNOTSxVQUFVO1lBQ04sV0FBVyxHQUFJLElBQUdoQixZQUFZaUIsR0FBRyxFQUFFLFFBQVE7Z0JBQ3ZDRSxJQUFJO2dCQUNKQyxXQUFXO2dCQUNYQyxHQUFHO2dCQUNIQyxHQUFHO2dCQUNIZixPQUFPO2dCQUNQQyxRQUFRO2dCQUNSUSxVQUF3QixXQUFILEdBQUksSUFBR2hCLFlBQVlpQixHQUFHLEVBQUUsVUFBVTtvQkFDbkRNLElBQUk7b0JBQ0pDLElBQUk7b0JBQ0pDLEdBQUc7b0JBQ0hmLE1BQU07Z0JBQ1Y7WUFDSjtZQUNBLFdBQVcsR0FBSSxJQUFHVixZQUFZSyxJQUFJLEVBQUUsS0FBSztnQkFDckNxQixNQUFNO2dCQUNOVixVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHaEIsWUFBWWlCLEdBQUcsRUFBRSxVQUFVO3dCQUN6Q00sSUFBSTt3QkFDSkMsSUFBSTt3QkFDSkMsR0FBRzt3QkFDSGYsTUFBTTt3QkFDTkUsUUFBUTt3QkFDUkcsYUFBYTtvQkFDakI7b0JBQ0EsV0FBVyxHQUFJLElBQUdmLFlBQVlpQixHQUFHLEVBQUUsUUFBUTt3QkFDdkNDLEdBQUc7d0JBQ0hSLE1BQU07b0JBQ1Y7b0JBQ0EsV0FBVyxHQUFJLElBQUdWLFlBQVlpQixHQUFHLEVBQUUsUUFBUTt3QkFDdkNJLEdBQUc7d0JBQ0hDLEdBQUc7d0JBQ0hmLE9BQU87d0JBQ1BDLFFBQVE7d0JBQ1JFLE1BQU07b0JBQ1Y7aUJBQ0g7WUFDTDtZQUNBLFdBQVcsR0FBSSxJQUFHVixZQUFZSyxJQUFJLEVBQUUsUUFBUTtnQkFDeENXLFVBQVU7b0JBQ04sV0FBVyxHQUFJLElBQUdoQixZQUFZSyxJQUFJLEVBQUUsa0JBQWtCO3dCQUNsRGMsSUFBSTt3QkFDSlEsSUFBSTt3QkFDSkMsSUFBSTt3QkFDSkMsSUFBSTt3QkFDSkMsSUFBSTt3QkFDSkMsZUFBZTt3QkFDZmYsVUFBVTs0QkFDTixXQUFXLEdBQUksSUFBR2hCLFlBQVlpQixHQUFHLEVBQUUsUUFBUTtnQ0FDdkNlLFdBQVc7NEJBQ2Y7NEJBQ0EsV0FBVyxHQUFJLElBQUdoQyxZQUFZaUIsR0FBRyxFQUFFLFFBQVE7Z0NBQ3ZDZ0IsUUFBUTtnQ0FDUkQsV0FBVztnQ0FDWEUsYUFBYTs0QkFDakI7eUJBQ0g7b0JBQ0w7b0JBQ0EsV0FBVyxHQUFJLElBQUdsQyxZQUFZSyxJQUFJLEVBQUUsa0JBQWtCO3dCQUNsRGMsSUFBSTt3QkFDSlEsSUFBSTt3QkFDSkMsSUFBSTt3QkFDSkMsSUFBSTt3QkFDSkMsSUFBSTt3QkFDSkMsZUFBZTt3QkFDZmYsVUFBVTs0QkFDTixXQUFXLEdBQUksSUFBR2hCLFlBQVlpQixHQUFHLEVBQUUsUUFBUTtnQ0FDdkNlLFdBQVc7NEJBQ2Y7NEJBQ0EsV0FBVyxHQUFJLElBQUdoQyxZQUFZaUIsR0FBRyxFQUFFLFFBQVE7Z0NBQ3ZDZ0IsUUFBUTtnQ0FDUkQsV0FBVztnQ0FDWEUsYUFBYTs0QkFDakI7eUJBQ0g7b0JBQ0w7aUJBQ0g7WUFDTDtTQUNIO0lBQ0w7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPekMsUUFBUTBDLE9BQU8sS0FBSyxjQUFlLE9BQU8xQyxRQUFRMEMsT0FBTyxLQUFLLFlBQVkxQyxRQUFRMEMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPMUMsUUFBUTBDLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcks3QyxPQUFPQyxjQUFjLENBQUNDLFFBQVEwQyxPQUFPLEVBQUUsY0FBYztRQUFFekMsT0FBTztJQUFLO0lBQ25FSCxPQUFPOEMsTUFBTSxDQUFDNUMsUUFBUTBDLE9BQU8sRUFBRTFDO0lBQy9CNkMsT0FBTzdDLE9BQU8sR0FBR0EsUUFBUTBDLE9BQU87QUFDbEMsRUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb250YWluZXIvUnVudGltZUVycm9yL0ZyYW1ld29ya0ljb24uanM/YjgzYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZyYW1ld29ya0ljb25cIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEZyYW1ld29ya0ljb247XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5mdW5jdGlvbiBGcmFtZXdvcmtJY29uKHBhcmFtKSB7XG4gICAgbGV0IHsgZnJhbWV3b3JrIH0gPSBwYXJhbTtcbiAgICBpZiAoZnJhbWV3b3JrID09PSBcInJlYWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwic3ZnXCIsIHtcbiAgICAgICAgICAgIFwiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZXdvcmstaWNvblwiOiBcInJlYWN0XCIsXG4gICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMjBcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIyMFwiLFxuICAgICAgICAgICAgdmlld0JveDogXCIwIDAgNDEwIDM2OVwiLFxuICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICBzaGFwZVJlbmRlcmluZzogXCJnZW9tZXRyaWNQcmVjaXNpb25cIixcbiAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCIsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogXCI1XCIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZDogXCJNMjA0Ljk5NSAyMjQuNTUyQzIyNi41NiAyMjQuNTUyIDI0NC4wNDIgMjA3LjA3IDI0NC4wNDIgMTg1LjUwNkMyNDQuMDQyIDE2My45NDEgMjI2LjU2IDE0Ni40NTkgMjA0Ljk5NSAxNDYuNDU5QzE4My40MyAxNDYuNDU5IDE2NS45NDggMTYzLjk0MSAxNjUuOTQ4IDE4NS41MDZDMTY1Ljk0OCAyMDcuMDcgMTgzLjQzIDIyNC41NTIgMjA0Ljk5NSAyMjQuNTUyWlwiLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICBkOiBcIk00MDkuOTkgMTg0LjUwNUM0MDkuOTkgMTUzLjcwNyAzODEuNDM3IDEyNi42NjcgMzM1Ljk5NiAxMDguOTI1QzM0My4zNDIgNjAuNjUzNSAzMzQuMTkgMjIuMzg3OCAzMDcuNDkyIDYuOTg4ODNDMjgzLjY0OSAtNi43NzUxMSAyNTAuNjMxIC0wLjAzOTU2NDEgMjE0LjUxMiAyNS45NzUzQzIxMS4zMTYgMjguMjY5MiAyMDguMTQzIDMwLjcwOTcgMjA0Ljk3IDMzLjI0NzdDMjAxLjgyMiAzMC43MDk3IDE5OC42NSAyOC4yNjkyIDE5NS40NzcgMjUuOTc1M0MxNTkuMzU5IC0wLjAzOTU2NDEgMTI2LjM0IC02Ljc5OTUxIDEwMi40OTcgNi45ODg4M0M3NS44MjM3IDIyLjM4NzggNjYuNjcyMSA2MC42MjkxIDc0LjA0MjIgMTA4Ljg1MkMyOC41NTI5IDEyNi42MTggMCAxNTMuNjgyIDAgMTg0LjUwNUMwIDIxNS4zMDMgMjguNTUyOCAyNDIuMzQyIDczLjk5MzQgMjYwLjA4NEM2Ni42NDc3IDMwOC4zNTYgNzUuNzk5MyAzNDYuNjIxIDEwMi40OTcgMzYyLjAyQzExMC41NzUgMzY2LjY4MiAxMTkuNzI3IDM2OSAxMjkuNjg0IDM2OUMxNDkuMDg1IDM2OSAxNzEuNjEgMzYwLjIxNSAxOTUuNDc3IDM0My4wMzRDMTk4LjY3NCAzNDAuNzQgMjAxLjg0NyAzMzguMyAyMDUuMDE5IDMzNS43NjJDMjA4LjE2NyAzMzguMyAyMTEuMzQgMzQwLjc0IDIxNC41MTIgMzQzLjAzNEMyMzguMzggMzYwLjIzOSAyNjAuOTA1IDM2OSAyODAuMzA2IDM2OUMyOTAuMjYzIDM2OSAyOTkuNDE1IDM2Ni42ODIgMzA3LjQ5MiAzNjIuMDJDMzMxLjMzNSAzNDguMjU2IDM0MiAzMTYuMjg3IDMzNy41MzQgMjcxLjk5M0MzMzcuMTQzIDI2OC4wODkgMzM2LjYzMSAyNjQuMTM1IDMzNS45OTYgMjYwLjEwOUMzODEuNDYxIDI0Mi4zNjcgNDA5Ljk5IDIxNS4zMjcgNDA5Ljk5IDE4NC41MDVaTTIyNS45MzQgNDEuODEzNkMyNDYuMjM4IDI3LjE5NTUgMjY1LjEyNyAxOS41ODE0IDI4MC4zMDYgMTkuNTgxNEMyODYuODcxIDE5LjU4MTQgMjkyLjcyOCAyMC45OTY4IDI5Ny43MzEgMjMuODc2NUMzMTUuMjA0IDMzLjk3OTggMzIyLjY3MiA2Mi45NDc1IDMxNy4zMjcgMTAyLjQzM0MyOTkuNzU2IDk3LjA0MDEgMjgwLjMwNiA5Mi45MTU4IDI1OS4zOTIgOTAuMjgwMkMyNDYuODcyIDczLjgwNzQgMjMzLjU5NyA1OC45NDUzIDIyMC4wMDMgNDYuMjU1MUMyMjEuOTggNDQuNzQyMSAyMjMuOTU3IDQzLjIyOSAyMjUuOTM0IDQxLjgxMzZaTTExMi4yNTkgMjMuODc2NUMxMTcuMjYyIDIwLjk5NjggMTIzLjExOSAxOS41ODE0IDEyOS42ODQgMTkuNTgxNEMxNDQuODYzIDE5LjU4MTQgMTYzLjc1MiAyNy4xNzExIDE4NC4wNTYgNDEuODEzNkMxODYuMDMzIDQzLjIyOSAxODguMDEgNDQuNzE3NiAxODkuOTg2IDQ2LjI1NTFDMTc2LjM5MyA1OC45NDUzIDE2My4xNDIgNzMuNzgzIDE1MC42MjIgOTAuMjU1OEMxMjkuNzMyIDkyLjg5MTQgMTEwLjI1OCA5Ny4wNDAxIDkyLjY4NyAxMDIuNDA5Qzg3LjM0MjQgNjIuOTQ3NSA5NC43ODU3IDMzLjk3OTggMTEyLjI1OSAyMy44NzY1Wk0xOS41MjMzIDE4NC41MDVDMTkuNTIzMyAxNjQuMzIyIDQwLjkwMTQgMTQzLjM1OSA3Ny43NzYgMTI4LjI1M0M4MS45MDAzIDE0Ni4xNDEgODguMDUwMiAxNjUuMDU0IDk2LjE3NjggMTg0LjQ1NkM4OC4wMDE0IDIwMy44ODEgODEuODUxNSAyMjIuODE5IDc3LjcyNzIgMjQwLjczMkM0MC45MDE0IDIyNS42MjYgMTkuNTIzMyAyMDQuNjg3IDE5LjUyMzMgMTg0LjUwNVpNMTg0LjA1NiAzMjcuMTk2QzE1NC45NjYgMzQ4LjEzNCAxMjguODA1IDM1NC42NzUgMTEyLjI1OSAzNDUuMTMzQzk0Ljc4NTcgMzM1LjAyOSA4Ny4zMTgxIDMwNi4wNjIgOTIuNjYyNiAyNjYuNTc2QzExMC4yMzQgMjcxLjk2OSAxMjkuNjg0IDI3Ni4wOTMgMTUwLjU5OCAyNzguNzI5QzE2My4xMTcgMjk1LjIwMiAxNzYuMzkzIDMxMC4wNjQgMTg5Ljk4NiAzMjIuNzU0QzE4OC4wMSAzMjQuMjkyIDE4Ni4wMzMgMzI1Ljc4IDE4NC4wNTYgMzI3LjE5NlpNMjA0Ljk5NSAzMTAuMDRDMTgwLjU5MSAyODcuNjg1IDE1Ny4xMzggMjU3LjgxNSAxMzcuMzQ3IDIyMy41NTFDMTMyLjA1MSAyMTQuNCAxMjEuMzQ0IDE5MS4zOTYgMTE3IDE4Mi40ODlDMTEzLjUzNSAxOTAuNzg2IDExMC4xMTIgMTk4LjM5OCAxMDcuNDI3IDIwNi41QzEwOS42MjMgMjEwLjU3NSAxMTguMDkyIDIyOS4yMTMgMTIwLjQzNCAyMzMuMjg4QzEyNS4wNzEgMjQxLjMxNyAxMjkuOTI4IDI0OS4xMjcgMTM0LjkzMSAyNTYuNjkyQzEyMC44OTggMjU0LjIyNyAxMDcuOTE1IDI1MS4wNTUgOTYuMTAzNSAyNDcuMzIxQzEwMi44MTUgMjE3LjAxMSAxMTYuMjEzIDE4Mi4wNjQgMTM3LjM0NyAxNDUuNDU4QzE0Mi41NDUgMTM2LjQ1MyAxNTMuODM4IDExNi4zNDYgMTU5LjUgMTA4QzE1MC41NjggMTA5LjE0NyAxNDMuMzk1IDEwOC43NjcgMTM1IDExMC41QzEzMi41NiAxMTQuNDUzIDEyMi43NzcgMTMxLjY0NSAxMjAuNDM0IDEzNS43MjFDMTE1Ljc0OSAxNDMuODIzIDExMS40NTQgMTUxLjkyNSAxMDcuNDI3IDE1OS45NzhDMTAyLjU0NiAxNDYuNTgxIDk4LjgxMjQgMTMzLjc0NCA5Ni4xNTI0IDEyMS42NEMxMjUuNzU1IDExMi4yOTMgMTYyLjcyNyAxMDYuNDExIDIwNC45OTUgMTA2LjQxMUMyMTUuNTYyIDEwNi40MTEgMjM3LjYzIDEwNi4xOTcgMjQ3LjQ5IDEwNi45MDVDMjQyLjA0OCA5OS43NTQ0IDIzNy4zOCA5My4yODE5IDIzMS42OTQgODYuODg4QzIyNy4wODIgODYuNzQxNiAyMDkuNzA1IDg2Ljg4OCAyMDQuOTk1IDg2Ljg4OEMxOTUuNjcyIDg2Ljg4OCAxODYuNTQ1IDg3LjIwNTMgMTc3LjU4OSA4Ny43NDIyQzE4Ni40NzIgNzcuMTc1MiAxOTUuNjcyIDY3LjUxMTEgMjA0Ljk5NSA1OC45Njk3QzIyOS4zNzUgODEuMzIzOSAyNTIuODUxIDExMS4xOTUgMjcyLjY0MyAxNDUuNDU4QzI3Ny44NDEgMTU0LjQ2MyAyODkuMDczIDE3NS40MjYgMjkzLjQ5IDE4NC41MDVDMjk2Ljk4IDE3Ni4yMDcgMzAwLjI4MSAxNjguNjQgMzAyLjk5IDE2MC40ODlDMzAwLjc5MyAxNTYuMzg5IDI5MS44OTggMTM5Ljc0NyAyODkuNTU1IDEzNS42OTZDMjg0LjkxOCAxMjcuNjY3IDI4MC4wNjIgMTE5Ljg1OCAyNzUuMDU5IDExMi4zMTdDMjg5LjA5MiAxMTQuNzgyIDMwMi4wNzUgMTE3Ljk1NCAzMTMuODg2IDEyMS42ODhDMzA3LjE3NSAxNTEuOTk4IDI5My43NzcgMTg2Ljk0NSAyNzIuNjQzIDIyMy41NTFDMjY3LjQ0NSAyMzIuNTU2IDI1Mi42NTEgMjUzLjE3OCAyNDYuOTkgMjYxLjUyNEMyNTUuOTIyIDI2MC4zNzcgMjY1LjU5NSAyNTguNjYzIDI3My45OSAyNTYuOTNDMjc2LjQzIDI1Mi45NzYgMjg3LjIxMiAyMzcuMzY0IDI4OS41NTUgMjMzLjI4OEMyOTQuMjE2IDIyNS4yMzUgMjk4LjUxMiAyMTcuMTgyIDMwMi40ODkgMjA5LjE1M0MzMDcuMjI0IDIyMi4xODUgMzEwLjk4MiAyMzQuOTk3IDMxMy43MTUgMjQ3LjM5NEMyODQuMTM4IDI1Ni43NDEgMjQ3LjIxNCAyNjIuNTk4IDIwNC45OTUgMjYyLjU5OEMxOTQuNDI4IDI2Mi41OTggMTY5Ljg1OSAyNjEuMjA4IDE2MCAyNjAuNUMxNjUuNDQyIDI2Ny42NSAxNzEuMzA0IDI3NS4wOTUgMTc2Ljk5IDI4MS40ODlDMTgxLjYwMiAyODEuNjM1IDIwMC4yODUgMjgyLjEyMSAyMDQuOTk1IDI4Mi4xMjFDMjE0LjMxNyAyODIuMTIxIDIyMy40NDQgMjgxLjgwNCAyMzIuNDAxIDI4MS4yNjdDMjIzLjQ5MyAyOTEuODM0IDIxNC4zMTcgMzAxLjQ5OCAyMDQuOTk1IDMxMC4wNFpNMjk3LjczMSAzNDUuMTMzQzI4MS4xODUgMzU0LjY5OSAyNTQuOTk5IDM0OC4xNTkgMjI1LjkzNCAzMjcuMTk2QzIyMy45NTcgMzI1Ljc4IDIyMS45OCAzMjQuMjkyIDIyMC4wMDMgMzIyLjc1NEMyMzMuNTk3IDMxMC4wNjQgMjQ2Ljg0OCAyOTUuMjI2IDI1OS4zNjcgMjc4Ljc1M0MyODAuMjMzIDI3Ni4xMTggMjk5LjY1OSAyNzEuOTkzIDMxNy4yMDUgMjY2LjYyNUMzMTcuNTQ3IDI2OS4wODkgMzE3Ljg4OCAyNzEuNTU0IDMxOC4xMzIgMjczLjk3QzMyMS43MiAzMDkuNjQ5IDMxNC4yNzcgMzM1LjU2NiAyOTcuNzMxIDM0NS4xMzNaTTMzMi4yNjIgMjQwLjc1NkMzMjguMDY1IDIyMi41OTkgMzIxLjg0MiAyMDMuNjg2IDMxMy44MTMgMTg0LjU3OEMzMjEuOTg4IDE2NS4xNTIgMzI4LjEzOCAxNDYuMjE1IDMzMi4yNjIgMTI4LjMwMkMzNjkuMDg4IDE0My40MDggMzkwLjQ2NiAxNjQuMzIyIDM5MC40NjYgMTg0LjUwNUMzOTAuNDY2IDIwNC42ODcgMzY5LjExMyAyMjUuNjI2IDMzMi4yNjIgMjQwLjc1NlpcIixcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJzdmdcIiwge1xuICAgICAgICBcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWV3b3JrLWljb25cIjogXCJuZXh0XCIsXG4gICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgICAgIGhlaWdodDogXCIyMFwiLFxuICAgICAgICB2aWV3Qm94OiBcIjAgMCAxODAgMTgwXCIsXG4gICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcIm1hc2tcIiwge1xuICAgICAgICAgICAgICAgIGlkOiBcIm1hc2swXzQwOF8xMzlcIixcbiAgICAgICAgICAgICAgICBtYXNrVW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgICAgICB4OiBcIjBcIixcbiAgICAgICAgICAgICAgICB5OiBcIjBcIixcbiAgICAgICAgICAgICAgICB3aWR0aDogXCIxODBcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTgwXCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJjaXJjbGVcIiwge1xuICAgICAgICAgICAgICAgICAgICBjeDogXCI5MFwiLFxuICAgICAgICAgICAgICAgICAgICBjeTogXCI5MFwiLFxuICAgICAgICAgICAgICAgICAgICByOiBcIjkwXCIsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IFwiYmxhY2tcIlxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiZ1wiLCB7XG4gICAgICAgICAgICAgICAgbWFzazogXCJ1cmwoI21hc2swXzQwOF8xMzkpXCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImNpcmNsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeDogXCI5MFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3k6IFwiOTBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHI6IFwiODdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwiYmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCJ3aGl0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IFwiNlwiXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkOiBcIk0xNDkuNTA4IDE1Ny41Mkw2OS4xNDIgNTRINTRWMTI1Ljk3SDY2LjExMzZWNjkuMzgzNkwxMzkuOTk5IDE2NC44NDVDMTQzLjMzMyAxNjIuNjE0IDE0Ni41MDkgMTYwLjE2NSAxNDkuNTA4IDE1Ny41MlpcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwidXJsKCNwYWludDBfbGluZWFyXzQwOF8xMzkpXCJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IFwiMTE1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBcIjU0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjcyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQxX2xpbmVhcl80MDhfMTM5KVwiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRlZnNcIiwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwibGluZWFyR3JhZGllbnRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicGFpbnQwX2xpbmVhcl80MDhfMTM5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB4MTogXCIxMDlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBcIjExNi41XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB4MjogXCIxNDQuNVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTI6IFwiMTYwLjVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInN0b3BcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wQ29sb3I6IFwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzdG9wXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcENvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BPcGFjaXR5OiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInBhaW50MV9saW5lYXJfNDA4XzEzOVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDE6IFwiMTIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MTogXCI1NFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDI6IFwiMTIwLjc5OVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTI6IFwiMTA2Ljg3NVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRVbml0czogXCJ1c2VyU3BhY2VPblVzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3RvcFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BDb2xvcjogXCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInN0b3BcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wQ29sb3I6IFwid2hpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcE9wYWNpdHk6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZyYW1ld29ya0ljb24uanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkZyYW1ld29ya0ljb24iLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwicGFyYW0iLCJmcmFtZXdvcmsiLCJqc3hzIiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwic2hhcGVSZW5kZXJpbmciLCJzdHJva2UiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsImNoaWxkcmVuIiwianN4IiwiZCIsImlkIiwibWFza1VuaXRzIiwieCIsInkiLCJjeCIsImN5IiwiciIsIm1hc2siLCJ4MSIsInkxIiwieDIiLCJ5MiIsImdyYWRpZW50VW5pdHMiLCJzdG9wQ29sb3IiLCJvZmZzZXQiLCJzdG9wT3BhY2l0eSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/FrameworkIcon.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js": +/*!**************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js ***! + \**************************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"GroupedStackFrames\", ({\n enumerable: true,\n get: function() {\n return GroupedStackFrames;\n }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _CallStackFrame = __webpack_require__(/*! ./CallStackFrame */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js\");\nconst _FrameworkIcon = __webpack_require__(/*! ./FrameworkIcon */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/FrameworkIcon.js\");\nfunction FrameworkGroup(param) {\n let { framework, stackFrames, all } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"details\", {\n \"data-nextjs-collapsed-call-stack-details\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"summary\", {\n tabIndex: 10,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"svg\", {\n \"data-nextjs-call-stack-chevron-icon\": true,\n fill: \"none\",\n height: \"20\",\n width: \"20\",\n shapeRendering: \"geometricPrecision\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M9 18l6-6-6-6\"\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_FrameworkIcon.FrameworkIcon, {\n framework: framework\n }),\n framework === \"react\" ? \"React\" : \"Next.js\"\n ]\n }),\n stackFrames.map((frame, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_CallStackFrame.CallStackFrame, {\n frame: frame\n }, \"call-stack-\" + index + \"-\" + all))\n ]\n })\n });\n}\nfunction GroupedStackFrames(param) {\n let { groupedStackFrames, all } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: groupedStackFrames.map((stackFramesGroup, groupIndex)=>{\n // Collapse React and Next.js frames\n if (stackFramesGroup.framework) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(FrameworkGroup, {\n framework: stackFramesGroup.framework,\n stackFrames: stackFramesGroup.stackFrames,\n all: all\n }, \"call-stack-framework-group-\" + groupIndex + \"-\" + all);\n }\n return stackFramesGroup.stackFrames.map((frame, frameIndex)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_CallStackFrame.CallStackFrame, {\n frame: frame\n }, \"call-stack-\" + groupIndex + \"-\" + frameIndex + \"-\" + all));\n })\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=GroupedStackFrames.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvR3JvdXBlZFN0YWNrRnJhbWVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxzREFBcUQ7SUFDakRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxjQUFjQyxtQkFBT0EsQ0FBQyxnSUFBbUI7QUFDL0MsTUFBTUMsa0JBQWtCRCxtQkFBT0EsQ0FBQyw4SUFBa0I7QUFDbEQsTUFBTUUsaUJBQWlCRixtQkFBT0EsQ0FBQyw0SUFBaUI7QUFDaEQsU0FBU0csZUFBZUMsS0FBSztJQUN6QixJQUFJLEVBQUVDLFNBQVMsRUFBRUMsV0FBVyxFQUFFQyxHQUFHLEVBQUUsR0FBR0g7SUFDdEMsT0FBcUIsV0FBSCxHQUFJLElBQUdMLFlBQVlTLEdBQUcsRUFBRVQsWUFBWVUsUUFBUSxFQUFFO1FBQzVEQyxVQUF3QixXQUFILEdBQUksSUFBR1gsWUFBWVksSUFBSSxFQUFFLFdBQVc7WUFDckQsNENBQTRDO1lBQzVDRCxVQUFVO2dCQUNOLFdBQVcsR0FBSSxJQUFHWCxZQUFZWSxJQUFJLEVBQUUsV0FBVztvQkFDM0NDLFVBQVU7b0JBQ1ZGLFVBQVU7d0JBQ04sV0FBVyxHQUFJLElBQUdYLFlBQVlTLEdBQUcsRUFBRSxPQUFPOzRCQUN0Qyx1Q0FBdUM7NEJBQ3ZDSyxNQUFNOzRCQUNOQyxRQUFROzRCQUNSQyxPQUFPOzRCQUNQQyxnQkFBZ0I7NEJBQ2hCQyxRQUFROzRCQUNSQyxlQUFlOzRCQUNmQyxnQkFBZ0I7NEJBQ2hCQyxhQUFhOzRCQUNiQyxTQUFTOzRCQUNUWCxVQUF3QixXQUFILEdBQUksSUFBR1gsWUFBWVMsR0FBRyxFQUFFLFFBQVE7Z0NBQ2pEYyxHQUFHOzRCQUNQO3dCQUNKO3dCQUNBLFdBQVcsR0FBSSxJQUFHdkIsWUFBWVMsR0FBRyxFQUFFTixlQUFlcUIsYUFBYSxFQUFFOzRCQUM3RGxCLFdBQVdBO3dCQUNmO3dCQUNBQSxjQUFjLFVBQVUsVUFBVTtxQkFDckM7Z0JBQ0w7Z0JBQ0FDLFlBQVlrQixHQUFHLENBQUMsQ0FBQ0MsT0FBT0MsUUFBc0IsV0FBSCxHQUFJLElBQUczQixZQUFZUyxHQUFHLEVBQUVQLGdCQUFnQjBCLGNBQWMsRUFBRTt3QkFDM0ZGLE9BQU9BO29CQUNYLEdBQUcsZ0JBQWdCQyxRQUFRLE1BQU1uQjthQUN4QztRQUNMO0lBQ0o7QUFDSjtBQUNBLFNBQVNULG1CQUFtQk0sS0FBSztJQUM3QixJQUFJLEVBQUV3QixrQkFBa0IsRUFBRXJCLEdBQUcsRUFBRSxHQUFHSDtJQUNsQyxPQUFxQixXQUFILEdBQUksSUFBR0wsWUFBWVMsR0FBRyxFQUFFVCxZQUFZVSxRQUFRLEVBQUU7UUFDNURDLFVBQVVrQixtQkFBbUJKLEdBQUcsQ0FBQyxDQUFDSyxrQkFBa0JDO1lBQ2hELG9DQUFvQztZQUNwQyxJQUFJRCxpQkFBaUJ4QixTQUFTLEVBQUU7Z0JBQzVCLE9BQXFCLFdBQUgsR0FBSSxJQUFHTixZQUFZUyxHQUFHLEVBQUVMLGdCQUFnQjtvQkFDdERFLFdBQVd3QixpQkFBaUJ4QixTQUFTO29CQUNyQ0MsYUFBYXVCLGlCQUFpQnZCLFdBQVc7b0JBQ3pDQyxLQUFLQTtnQkFDVCxHQUFHLGdDQUFnQ3VCLGFBQWEsTUFBTXZCO1lBQzFEO1lBQ0EsT0FDQXNCLGlCQUFpQnZCLFdBQVcsQ0FBQ2tCLEdBQUcsQ0FBQyxDQUFDQyxPQUFPTSxhQUEyQixXQUFILEdBQUksSUFBR2hDLFlBQVlTLEdBQUcsRUFBRVAsZ0JBQWdCMEIsY0FBYyxFQUFFO29CQUNqSEYsT0FBT0E7Z0JBQ1gsR0FBRyxnQkFBZ0JLLGFBQWEsTUFBTUMsYUFBYSxNQUFNeEI7UUFDakU7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9iLFFBQVFzQyxPQUFPLEtBQUssY0FBZSxPQUFPdEMsUUFBUXNDLE9BQU8sS0FBSyxZQUFZdEMsUUFBUXNDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3RDLFFBQVFzQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLekMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRc0MsT0FBTyxFQUFFLGNBQWM7UUFBRXJDLE9BQU87SUFBSztJQUNuRUgsT0FBTzBDLE1BQU0sQ0FBQ3hDLFFBQVFzQyxPQUFPLEVBQUV0QztJQUMvQnlDLE9BQU96QyxPQUFPLEdBQUdBLFFBQVFzQyxPQUFPO0FBQ2xDLEVBRUEsOENBQThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1J1bnRpbWVFcnJvci9Hcm91cGVkU3RhY2tGcmFtZXMuanM/OWE5OCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdyb3VwZWRTdGFja0ZyYW1lc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gR3JvdXBlZFN0YWNrRnJhbWVzO1xuICAgIH1cbn0pO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfQ2FsbFN0YWNrRnJhbWUgPSByZXF1aXJlKFwiLi9DYWxsU3RhY2tGcmFtZVwiKTtcbmNvbnN0IF9GcmFtZXdvcmtJY29uID0gcmVxdWlyZShcIi4vRnJhbWV3b3JrSWNvblwiKTtcbmZ1bmN0aW9uIEZyYW1ld29ya0dyb3VwKHBhcmFtKSB7XG4gICAgbGV0IHsgZnJhbWV3b3JrLCBzdGFja0ZyYW1lcywgYWxsIH0gPSBwYXJhbTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkZXRhaWxzXCIsIHtcbiAgICAgICAgICAgIFwiZGF0YS1uZXh0anMtY29sbGFwc2VkLWNhbGwtc3RhY2stZGV0YWlsc1wiOiB0cnVlLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInN1bW1hcnlcIiwge1xuICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogMTAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stY2hldnJvbi1pY29uXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZVJlbmRlcmluZzogXCJnZW9tZXRyaWNQcmVjaXNpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNOSAxOGw2LTYtNi02XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9GcmFtZXdvcmtJY29uLkZyYW1ld29ya0ljb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcms6IGZyYW1ld29ya1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmsgPT09IFwicmVhY3RcIiA/IFwiUmVhY3RcIiA6IFwiTmV4dC5qc1wiXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFja0ZyYW1lcy5tYXAoKGZyYW1lLCBpbmRleCk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0NhbGxTdGFja0ZyYW1lLkNhbGxTdGFja0ZyYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZTogZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgfSwgXCJjYWxsLXN0YWNrLVwiICsgaW5kZXggKyBcIi1cIiArIGFsbCkpXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSk7XG59XG5mdW5jdGlvbiBHcm91cGVkU3RhY2tGcmFtZXMocGFyYW0pIHtcbiAgICBsZXQgeyBncm91cGVkU3RhY2tGcmFtZXMsIGFsbCB9ID0gcGFyYW07XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IGdyb3VwZWRTdGFja0ZyYW1lcy5tYXAoKHN0YWNrRnJhbWVzR3JvdXAsIGdyb3VwSW5kZXgpPT57XG4gICAgICAgICAgICAvLyBDb2xsYXBzZSBSZWFjdCBhbmQgTmV4dC5qcyBmcmFtZXNcbiAgICAgICAgICAgIGlmIChzdGFja0ZyYW1lc0dyb3VwLmZyYW1ld29yaykge1xuICAgICAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKEZyYW1ld29ya0dyb3VwLCB7XG4gICAgICAgICAgICAgICAgICAgIGZyYW1ld29yazogc3RhY2tGcmFtZXNHcm91cC5mcmFtZXdvcmssXG4gICAgICAgICAgICAgICAgICAgIHN0YWNrRnJhbWVzOiBzdGFja0ZyYW1lc0dyb3VwLnN0YWNrRnJhbWVzLFxuICAgICAgICAgICAgICAgICAgICBhbGw6IGFsbFxuICAgICAgICAgICAgICAgIH0sIFwiY2FsbC1zdGFjay1mcmFtZXdvcmstZ3JvdXAtXCIgKyBncm91cEluZGV4ICsgXCItXCIgKyBhbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuKC8vIERvbid0IGdyb3VwIG5vbiBSZWFjdCBhbmQgTmV4dC5qcyBmcmFtZXNcbiAgICAgICAgICAgIHN0YWNrRnJhbWVzR3JvdXAuc3RhY2tGcmFtZXMubWFwKChmcmFtZSwgZnJhbWVJbmRleCk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0NhbGxTdGFja0ZyYW1lLkNhbGxTdGFja0ZyYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGZyYW1lOiBmcmFtZVxuICAgICAgICAgICAgICAgIH0sIFwiY2FsbC1zdGFjay1cIiArIGdyb3VwSW5kZXggKyBcIi1cIiArIGZyYW1lSW5kZXggKyBcIi1cIiArIGFsbCkpKTtcbiAgICAgICAgfSlcbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9R3JvdXBlZFN0YWNrRnJhbWVzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJHcm91cGVkU3RhY2tGcmFtZXMiLCJfanN4cnVudGltZSIsInJlcXVpcmUiLCJfQ2FsbFN0YWNrRnJhbWUiLCJfRnJhbWV3b3JrSWNvbiIsIkZyYW1ld29ya0dyb3VwIiwicGFyYW0iLCJmcmFtZXdvcmsiLCJzdGFja0ZyYW1lcyIsImFsbCIsImpzeCIsIkZyYWdtZW50IiwiY2hpbGRyZW4iLCJqc3hzIiwidGFiSW5kZXgiLCJmaWxsIiwiaGVpZ2h0Iiwid2lkdGgiLCJzaGFwZVJlbmRlcmluZyIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwidmlld0JveCIsImQiLCJGcmFtZXdvcmtJY29uIiwibWFwIiwiZnJhbWUiLCJpbmRleCIsIkNhbGxTdGFja0ZyYW1lIiwiZ3JvdXBlZFN0YWNrRnJhbWVzIiwic3RhY2tGcmFtZXNHcm91cCIsImdyb3VwSW5kZXgiLCJmcmFtZUluZGV4IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js": +/*!*************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js ***! + \*************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n styles: function() {\n return styles;\n },\n RuntimeError: function() {\n return RuntimeError;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _CodeFrame = __webpack_require__(/*! ../../components/CodeFrame */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nconst _groupstackframesbyframework = __webpack_require__(/*! ../../helpers/group-stack-frames-by-framework */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js\");\nconst _CallStackFrame = __webpack_require__(/*! ./CallStackFrame */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js\");\nconst _GroupedStackFrames = __webpack_require__(/*! ./GroupedStackFrames */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js\");\nconst _ComponentStackFrameRow = __webpack_require__(/*! ./ComponentStackFrameRow */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/ComponentStackFrameRow.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n button[data-nextjs-data-runtime-error-collapsed-action] {\\n background: none;\\n border: none;\\n padding: 0;\\n font-size: var(--size-font-small);\\n line-height: var(--size-font-bigger);\\n color: var(--color-accents-3);\\n }\\n\\n [data-nextjs-call-stack-frame]:not(:last-child),\\n [data-nextjs-component-stack-frame]:not(:last-child) {\\n margin-bottom: var(--size-gap-double);\\n }\\n\\n [data-nextjs-call-stack-frame] > h3,\\n [data-nextjs-component-stack-frame] > h3 {\\n margin-top: 0;\\n margin-bottom: var(--size-gap);\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-font);\\n color: #222;\\n }\\n [data-nextjs-call-stack-frame] > h3[data-nextjs-frame-expanded='false'] {\\n color: #666;\\n }\\n [data-nextjs-call-stack-frame] > div,\\n [data-nextjs-component-stack-frame] > div {\\n display: flex;\\n align-items: center;\\n padding-left: calc(var(--size-gap) + var(--size-gap-half));\\n font-size: var(--size-font-small);\\n color: #999;\\n }\\n [data-nextjs-call-stack-frame] > div > svg,\\n [data-nextjs-component-stack-frame] > [role='link'] > svg {\\n width: auto;\\n height: var(--size-font-small);\\n margin-left: var(--size-gap);\\n flex-shrink: 0;\\n\\n display: none;\\n }\\n\\n [data-nextjs-call-stack-frame] > div[data-has-source],\\n [data-nextjs-component-stack-frame] > [role='link'] {\\n cursor: pointer;\\n }\\n [data-nextjs-call-stack-frame] > div[data-has-source]:hover,\\n [data-nextjs-component-stack-frame] > [role='link']:hover {\\n text-decoration: underline dotted;\\n }\\n [data-nextjs-call-stack-frame] > div[data-has-source] > svg,\\n [data-nextjs-component-stack-frame] > [role='link'] > svg {\\n display: unset;\\n }\\n\\n [data-nextjs-call-stack-framework-icon] {\\n margin-right: var(--size-gap);\\n }\\n [data-nextjs-call-stack-framework-icon='next'] > mask {\\n mask-type: alpha;\\n }\\n [data-nextjs-call-stack-framework-icon='react'] {\\n color: rgb(20, 158, 202);\\n }\\n [data-nextjs-collapsed-call-stack-details][open]\\n [data-nextjs-call-stack-chevron-icon] {\\n transform: rotate(90deg);\\n }\\n [data-nextjs-collapsed-call-stack-details] summary {\\n display: flex;\\n align-items: center;\\n margin: var(--size-gap-double) 0;\\n list-style: none;\\n }\\n [data-nextjs-collapsed-call-stack-details] summary::-webkit-details-marker {\\n display: none;\\n }\\n\\n [data-nextjs-collapsed-call-stack-details] h3 {\\n color: #666;\\n }\\n [data-nextjs-collapsed-call-stack-details] [data-nextjs-call-stack-frame] {\\n margin-bottom: var(--size-gap-double);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst RuntimeError = function RuntimeError(param) {\n let { error } = param;\n const firstFirstPartyFrameIndex = _react.useMemo(()=>{\n return error.frames.findIndex((entry)=>entry.expanded && Boolean(entry.originalCodeFrame) && Boolean(entry.originalStackFrame));\n }, [\n error.frames\n ]);\n const firstFrame = _react.useMemo(()=>{\n var _error_frames_firstFirstPartyFrameIndex;\n return (_error_frames_firstFirstPartyFrameIndex = error.frames[firstFirstPartyFrameIndex]) != null ? _error_frames_firstFirstPartyFrameIndex : null;\n }, [\n error.frames,\n firstFirstPartyFrameIndex\n ]);\n const allLeadingFrames = _react.useMemo(()=>firstFirstPartyFrameIndex < 0 ? [] : error.frames.slice(0, firstFirstPartyFrameIndex), [\n error.frames,\n firstFirstPartyFrameIndex\n ]);\n const [all, setAll] = _react.useState(firstFrame == null);\n const toggleAll = _react.useCallback(()=>{\n setAll((v)=>!v);\n }, []);\n const leadingFrames = _react.useMemo(()=>allLeadingFrames.filter((f)=>f.expanded || all), [\n all,\n allLeadingFrames\n ]);\n const allCallStackFrames = _react.useMemo(()=>error.frames.slice(firstFirstPartyFrameIndex + 1), [\n error.frames,\n firstFirstPartyFrameIndex\n ]);\n const visibleCallStackFrames = _react.useMemo(()=>allCallStackFrames.filter((f)=>f.expanded || all), [\n all,\n allCallStackFrames\n ]);\n const canShowMore = _react.useMemo(()=>{\n return allCallStackFrames.length !== visibleCallStackFrames.length || all && firstFrame != null;\n }, [\n all,\n allCallStackFrames.length,\n firstFrame,\n visibleCallStackFrames.length\n ]);\n const stackFramesGroupedByFramework = _react.useMemo(()=>(0, _groupstackframesbyframework.groupStackFramesByFramework)(visibleCallStackFrames), [\n visibleCallStackFrames\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n firstFrame ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n children: \"Source\"\n }),\n leadingFrames.map((frame, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_CallStackFrame.CallStackFrame, {\n frame: frame\n }, \"leading-frame-\" + index + \"-\" + all)),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_CodeFrame.CodeFrame, {\n stackFrame: firstFrame.originalStackFrame,\n codeFrame: firstFrame.originalCodeFrame\n })\n ]\n }) : undefined,\n error.componentStackFrames ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n children: \"Component Stack\"\n }),\n error.componentStackFrames.map((componentStackFrame, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_ComponentStackFrameRow.ComponentStackFrameRow, {\n componentStackFrame: componentStackFrame\n }, index))\n ]\n }) : null,\n stackFramesGroupedByFramework.length ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n children: \"Call Stack\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_GroupedStackFrames.GroupedStackFrames, {\n groupedStackFrames: stackFramesGroupedByFramework,\n all: all\n })\n ]\n }) : undefined,\n canShowMore ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Fragment, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"button\", {\n tabIndex: 10,\n \"data-nextjs-data-runtime-error-collapsed-action\": true,\n type: \"button\",\n onClick: toggleAll,\n children: [\n all ? \"Hide\" : \"Show\",\n \" collapsed frames\"\n ]\n })\n }) : undefined\n ]\n });\n};\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLFFBQVE7UUFDSixPQUFPQTtJQUNYO0lBQ0FDLGNBQWM7UUFDVixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyw0QkFBNEJDLG1CQUFPQSxDQUFDLG9IQUEwQztBQUNwRixNQUFNQyxpQ0FBaUNELG1CQUFPQSxDQUFDLDhIQUErQztBQUM5RixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyxnSUFBbUI7QUFDL0MsTUFBTUcsU0FBUyxXQUFXLEdBQUdKLDBCQUEwQkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyx3R0FBTztBQUN4RSxNQUFNSyxhQUFhTCxtQkFBT0EsQ0FBQyw2SUFBNEI7QUFDdkQsTUFBTU0sZ0JBQWdCTixtQkFBT0EsQ0FBQyx5SUFBNkI7QUFDM0QsTUFBTU8sK0JBQStCUCxtQkFBT0EsQ0FBQyw2S0FBK0M7QUFDNUYsTUFBTVEsa0JBQWtCUixtQkFBT0EsQ0FBQyw4SUFBa0I7QUFDbEQsTUFBTVMsc0JBQXNCVCxtQkFBT0EsQ0FBQyxzSkFBc0I7QUFDMUQsTUFBTVUsMEJBQTBCVixtQkFBT0EsQ0FBQyw4SkFBMEI7QUFDbEUsU0FBU1c7SUFDTCxNQUFNQyxPQUFPWCwrQkFBK0JHLENBQUMsQ0FBQztRQUMxQztLQUNIO0lBQ0RPLGtCQUFrQjtRQUNkLE9BQU9DO0lBQ1g7SUFDQSxPQUFPQTtBQUNYO0FBQ0EsTUFBTXBCLGVBQWUsU0FBU0EsYUFBYXFCLEtBQUs7SUFDNUMsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0Q7SUFDaEIsTUFBTUUsNEJBQTRCWixPQUFPYSxPQUFPLENBQUM7UUFDN0MsT0FBT0YsTUFBTUcsTUFBTSxDQUFDQyxTQUFTLENBQUMsQ0FBQ0MsUUFBUUEsTUFBTUMsUUFBUSxJQUFJQyxRQUFRRixNQUFNRyxpQkFBaUIsS0FBS0QsUUFBUUYsTUFBTUksa0JBQWtCO0lBQ2pJLEdBQUc7UUFDQ1QsTUFBTUcsTUFBTTtLQUNmO0lBQ0QsTUFBTU8sYUFBYXJCLE9BQU9hLE9BQU8sQ0FBQztRQUM5QixJQUFJUztRQUNKLE9BQU8sQ0FBQ0EsMENBQTBDWCxNQUFNRyxNQUFNLENBQUNGLDBCQUEwQixLQUFLLE9BQU9VLDBDQUEwQztJQUNuSixHQUFHO1FBQ0NYLE1BQU1HLE1BQU07UUFDWkY7S0FDSDtJQUNELE1BQU1XLG1CQUFtQnZCLE9BQU9hLE9BQU8sQ0FBQyxJQUFJRCw0QkFBNEIsSUFBSSxFQUFFLEdBQUdELE1BQU1HLE1BQU0sQ0FBQ1UsS0FBSyxDQUFDLEdBQUdaLDRCQUE0QjtRQUMvSEQsTUFBTUcsTUFBTTtRQUNaRjtLQUNIO0lBQ0QsTUFBTSxDQUFDcEIsS0FBS2lDLE9BQU8sR0FBR3pCLE9BQU8wQixRQUFRLENBQUNMLGNBQWM7SUFDcEQsTUFBTU0sWUFBWTNCLE9BQU80QixXQUFXLENBQUM7UUFDakNILE9BQU8sQ0FBQ0ksSUFBSSxDQUFDQTtJQUNqQixHQUFHLEVBQUU7SUFDTCxNQUFNQyxnQkFBZ0I5QixPQUFPYSxPQUFPLENBQUMsSUFBSVUsaUJBQWlCUSxNQUFNLENBQUMsQ0FBQ0MsSUFBSUEsRUFBRWYsUUFBUSxJQUFJekIsTUFBTTtRQUN0RkE7UUFDQStCO0tBQ0g7SUFDRCxNQUFNVSxxQkFBcUJqQyxPQUFPYSxPQUFPLENBQUMsSUFBSUYsTUFBTUcsTUFBTSxDQUFDVSxLQUFLLENBQUNaLDRCQUE0QixJQUFJO1FBQzdGRCxNQUFNRyxNQUFNO1FBQ1pGO0tBQ0g7SUFDRCxNQUFNc0IseUJBQXlCbEMsT0FBT2EsT0FBTyxDQUFDLElBQUlvQixtQkFBbUJGLE1BQU0sQ0FBQyxDQUFDQyxJQUFJQSxFQUFFZixRQUFRLElBQUl6QixNQUFNO1FBQ2pHQTtRQUNBeUM7S0FDSDtJQUNELE1BQU1FLGNBQWNuQyxPQUFPYSxPQUFPLENBQUM7UUFDL0IsT0FBT29CLG1CQUFtQkcsTUFBTSxLQUFLRix1QkFBdUJFLE1BQU0sSUFBSTVDLE9BQU82QixjQUFjO0lBQy9GLEdBQUc7UUFDQzdCO1FBQ0F5QyxtQkFBbUJHLE1BQU07UUFDekJmO1FBQ0FhLHVCQUF1QkUsTUFBTTtLQUNoQztJQUNELE1BQU1DLGdDQUFnQ3JDLE9BQU9hLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBR1QsNkJBQTZCa0MsMkJBQTJCLEVBQUVKLHlCQUF5QjtRQUM1SUE7S0FDSDtJQUNELE9BQXFCLFdBQUgsR0FBSSxJQUFHbkMsWUFBWXdDLElBQUksRUFBRXZDLE9BQU93QyxRQUFRLEVBQUU7UUFDeERDLFVBQVU7WUFDTnBCLGFBQTJCLFdBQUgsR0FBSSxJQUFHdEIsWUFBWXdDLElBQUksRUFBRXZDLE9BQU93QyxRQUFRLEVBQUU7Z0JBQzlEQyxVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHMUMsWUFBWTJDLEdBQUcsRUFBRSxNQUFNO3dCQUNyQ0QsVUFBVTtvQkFDZDtvQkFDQVgsY0FBY2EsR0FBRyxDQUFDLENBQUNDLE9BQU9DLFFBQXNCLFdBQUgsR0FBSSxJQUFHOUMsWUFBWTJDLEdBQUcsRUFBRXJDLGdCQUFnQnlDLGNBQWMsRUFBRTs0QkFDN0ZGLE9BQU9BO3dCQUNYLEdBQUcsbUJBQW1CQyxRQUFRLE1BQU1yRDtvQkFDeEMsV0FBVyxHQUFJLElBQUdPLFlBQVkyQyxHQUFHLEVBQUV4QyxXQUFXNkMsU0FBUyxFQUFFO3dCQUNyREMsWUFBWTNCLFdBQVdELGtCQUFrQjt3QkFDekM2QixXQUFXNUIsV0FBV0YsaUJBQWlCO29CQUMzQztpQkFDSDtZQUNMLEtBQUsrQjtZQUNMdkMsTUFBTXdDLG9CQUFvQixHQUFpQixXQUFILEdBQUksSUFBR3BELFlBQVl3QyxJQUFJLEVBQUV4QyxZQUFZeUMsUUFBUSxFQUFFO2dCQUNuRkMsVUFBVTtvQkFDTixXQUFXLEdBQUksSUFBRzFDLFlBQVkyQyxHQUFHLEVBQUUsTUFBTTt3QkFDckNELFVBQVU7b0JBQ2Q7b0JBQ0E5QixNQUFNd0Msb0JBQW9CLENBQUNSLEdBQUcsQ0FBQyxDQUFDUyxxQkFBcUJQLFFBQXNCLFdBQUgsR0FBSSxJQUFHOUMsWUFBWTJDLEdBQUcsRUFBRW5DLHdCQUF3QjhDLHNCQUFzQixFQUFFOzRCQUN4SUQscUJBQXFCQTt3QkFDekIsR0FBR1A7aUJBQ1Y7WUFDTCxLQUFLO1lBQ0xSLDhCQUE4QkQsTUFBTSxHQUFpQixXQUFILEdBQUksSUFBR3JDLFlBQVl3QyxJQUFJLEVBQUV2QyxPQUFPd0MsUUFBUSxFQUFFO2dCQUN4RkMsVUFBVTtvQkFDTixXQUFXLEdBQUksSUFBRzFDLFlBQVkyQyxHQUFHLEVBQUUsTUFBTTt3QkFDckNELFVBQVU7b0JBQ2Q7b0JBQ0EsV0FBVyxHQUFJLElBQUcxQyxZQUFZMkMsR0FBRyxFQUFFcEMsb0JBQW9CZ0Qsa0JBQWtCLEVBQUU7d0JBQ3ZFQyxvQkFBb0JsQjt3QkFDcEI3QyxLQUFLQTtvQkFDVDtpQkFDSDtZQUNMLEtBQUswRDtZQUNMZixjQUE0QixXQUFILEdBQUksSUFBR3BDLFlBQVkyQyxHQUFHLEVBQUUxQyxPQUFPd0MsUUFBUSxFQUFFO2dCQUM5REMsVUFBd0IsV0FBSCxHQUFJLElBQUcxQyxZQUFZd0MsSUFBSSxFQUFFLFVBQVU7b0JBQ3BEaUIsVUFBVTtvQkFDVixtREFBbUQ7b0JBQ25EQyxNQUFNO29CQUNOQyxTQUFTL0I7b0JBQ1RjLFVBQVU7d0JBQ05qRCxNQUFNLFNBQVM7d0JBQ2Y7cUJBQ0g7Z0JBQ0w7WUFDSixLQUFLMEQ7U0FDUjtJQUNMO0FBQ0o7QUFDQSxNQUFNOUQsU0FBUyxDQUFDLEdBQUdlLGNBQWN3RCxJQUFJLEVBQUVuRDtBQUV2QyxJQUFJLENBQUMsT0FBT3ZCLFFBQVEyRSxPQUFPLEtBQUssY0FBZSxPQUFPM0UsUUFBUTJFLE9BQU8sS0FBSyxZQUFZM0UsUUFBUTJFLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzNFLFFBQVEyRSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLOUUsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMkUsT0FBTyxFQUFFLGNBQWM7UUFBRTFFLE9BQU87SUFBSztJQUNuRUgsT0FBTytFLE1BQU0sQ0FBQzdFLFFBQVEyRSxPQUFPLEVBQUUzRTtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRMkUsT0FBTztBQUNsQyxFQUVBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvaW5kZXguanM/ZmNiOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIHN0eWxlczogbnVsbCxcbiAgICBSdW50aW1lRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgc3R5bGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICB9LFxuICAgIFJ1bnRpbWVFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSdW50aW1lRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX0NvZGVGcmFtZSA9IHJlcXVpcmUoXCIuLi8uLi9jb21wb25lbnRzL0NvZGVGcmFtZVwiKTtcbmNvbnN0IF9ub29wdGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9ub29wLXRlbXBsYXRlXCIpO1xuY29uc3QgX2dyb3Vwc3RhY2tmcmFtZXNieWZyYW1ld29yayA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2dyb3VwLXN0YWNrLWZyYW1lcy1ieS1mcmFtZXdvcmtcIik7XG5jb25zdCBfQ2FsbFN0YWNrRnJhbWUgPSByZXF1aXJlKFwiLi9DYWxsU3RhY2tGcmFtZVwiKTtcbmNvbnN0IF9Hcm91cGVkU3RhY2tGcmFtZXMgPSByZXF1aXJlKFwiLi9Hcm91cGVkU3RhY2tGcmFtZXNcIik7XG5jb25zdCBfQ29tcG9uZW50U3RhY2tGcmFtZVJvdyA9IHJlcXVpcmUoXCIuL0NvbXBvbmVudFN0YWNrRnJhbWVSb3dcIik7XG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QoKSB7XG4gICAgY29uc3QgZGF0YSA9IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZS5fKFtcbiAgICAgICAgXCJcXG4gIGJ1dHRvbltkYXRhLW5leHRqcy1kYXRhLXJ1bnRpbWUtZXJyb3ItY29sbGFwc2VkLWFjdGlvbl0ge1xcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIHBhZGRpbmc6IDA7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS1mb250LXNtYWxsKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtZm9udC1iaWdnZXIpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50cy0zKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lXTpub3QoOmxhc3QtY2hpbGQpLFxcbiAgW2RhdGEtbmV4dGpzLWNvbXBvbmVudC1zdGFjay1mcmFtZV06bm90KDpsYXN0LWNoaWxkKSB7XFxuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUtZ2FwLWRvdWJsZSk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZV0gPiBoMyxcXG4gIFtkYXRhLW5leHRqcy1jb21wb25lbnQtc3RhY2stZnJhbWVdID4gaDMge1xcbiAgICBtYXJnaW4tdG9wOiAwO1xcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLWdhcCk7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS1mb250KTtcXG4gICAgY29sb3I6ICMyMjI7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZV0gPiBoM1tkYXRhLW5leHRqcy1mcmFtZS1leHBhbmRlZD0nZmFsc2UnXSB7XFxuICAgIGNvbG9yOiAjNjY2O1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVdID4gZGl2LFxcbiAgW2RhdGEtbmV4dGpzLWNvbXBvbmVudC1zdGFjay1mcmFtZV0gPiBkaXYge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tc2l6ZS1nYXApICsgdmFyKC0tc2l6ZS1nYXAtaGFsZikpO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtZm9udC1zbWFsbCk7XFxuICAgIGNvbG9yOiAjOTk5O1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVdID4gZGl2ID4gc3ZnLFxcbiAgW2RhdGEtbmV4dGpzLWNvbXBvbmVudC1zdGFjay1mcmFtZV0gPiBbcm9sZT0nbGluayddID4gc3ZnIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS1mb250LXNtYWxsKTtcXG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtZ2FwKTtcXG4gICAgZmxleC1zaHJpbms6IDA7XFxuXFxuICAgIGRpc3BsYXk6IG5vbmU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZV0gPiBkaXZbZGF0YS1oYXMtc291cmNlXSxcXG4gIFtkYXRhLW5leHRqcy1jb21wb25lbnQtc3RhY2stZnJhbWVdID4gW3JvbGU9J2xpbmsnXSB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lXSA+IGRpdltkYXRhLWhhcy1zb3VyY2VdOmhvdmVyLFxcbiAgW2RhdGEtbmV4dGpzLWNvbXBvbmVudC1zdGFjay1mcmFtZV0gPiBbcm9sZT0nbGluayddOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVdID4gZGl2W2RhdGEtaGFzLXNvdXJjZV0gPiBzdmcsXFxuICBbZGF0YS1uZXh0anMtY29tcG9uZW50LXN0YWNrLWZyYW1lXSA+IFtyb2xlPSdsaW5rJ10gPiBzdmcge1xcbiAgICBkaXNwbGF5OiB1bnNldDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1ld29yay1pY29uXSB7XFxuICAgIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS1nYXApO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWV3b3JrLWljb249J25leHQnXSA+IG1hc2sge1xcbiAgICBtYXNrLXR5cGU6IGFscGhhO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWV3b3JrLWljb249J3JlYWN0J10ge1xcbiAgICBjb2xvcjogcmdiKDIwLCAxNTgsIDIwMik7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29sbGFwc2VkLWNhbGwtc3RhY2stZGV0YWlsc11bb3Blbl1cXG4gICAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stY2hldnJvbi1pY29uXSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb2xsYXBzZWQtY2FsbC1zdGFjay1kZXRhaWxzXSBzdW1tYXJ5IHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgbWFyZ2luOiB2YXIoLS1zaXplLWdhcC1kb3VibGUpIDA7XFxuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29sbGFwc2VkLWNhbGwtc3RhY2stZGV0YWlsc10gc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlciB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29sbGFwc2VkLWNhbGwtc3RhY2stZGV0YWlsc10gaDMge1xcbiAgICBjb2xvcjogIzY2NjtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb2xsYXBzZWQtY2FsbC1zdGFjay1kZXRhaWxzXSBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZV0ge1xcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLWdhcC1kb3VibGUpO1xcbiAgfVxcblwiXG4gICAgXSk7XG4gICAgX3RlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIGRhdGE7XG59XG5jb25zdCBSdW50aW1lRXJyb3IgPSBmdW5jdGlvbiBSdW50aW1lRXJyb3IocGFyYW0pIHtcbiAgICBsZXQgeyBlcnJvciB9ID0gcGFyYW07XG4gICAgY29uc3QgZmlyc3RGaXJzdFBhcnR5RnJhbWVJbmRleCA9IF9yZWFjdC51c2VNZW1vKCgpPT57XG4gICAgICAgIHJldHVybiBlcnJvci5mcmFtZXMuZmluZEluZGV4KChlbnRyeSk9PmVudHJ5LmV4cGFuZGVkICYmIEJvb2xlYW4oZW50cnkub3JpZ2luYWxDb2RlRnJhbWUpICYmIEJvb2xlYW4oZW50cnkub3JpZ2luYWxTdGFja0ZyYW1lKSk7XG4gICAgfSwgW1xuICAgICAgICBlcnJvci5mcmFtZXNcbiAgICBdKTtcbiAgICBjb25zdCBmaXJzdEZyYW1lID0gX3JlYWN0LnVzZU1lbW8oKCk9PntcbiAgICAgICAgdmFyIF9lcnJvcl9mcmFtZXNfZmlyc3RGaXJzdFBhcnR5RnJhbWVJbmRleDtcbiAgICAgICAgcmV0dXJuIChfZXJyb3JfZnJhbWVzX2ZpcnN0Rmlyc3RQYXJ0eUZyYW1lSW5kZXggPSBlcnJvci5mcmFtZXNbZmlyc3RGaXJzdFBhcnR5RnJhbWVJbmRleF0pICE9IG51bGwgPyBfZXJyb3JfZnJhbWVzX2ZpcnN0Rmlyc3RQYXJ0eUZyYW1lSW5kZXggOiBudWxsO1xuICAgIH0sIFtcbiAgICAgICAgZXJyb3IuZnJhbWVzLFxuICAgICAgICBmaXJzdEZpcnN0UGFydHlGcmFtZUluZGV4XG4gICAgXSk7XG4gICAgY29uc3QgYWxsTGVhZGluZ0ZyYW1lcyA9IF9yZWFjdC51c2VNZW1vKCgpPT5maXJzdEZpcnN0UGFydHlGcmFtZUluZGV4IDwgMCA/IFtdIDogZXJyb3IuZnJhbWVzLnNsaWNlKDAsIGZpcnN0Rmlyc3RQYXJ0eUZyYW1lSW5kZXgpLCBbXG4gICAgICAgIGVycm9yLmZyYW1lcyxcbiAgICAgICAgZmlyc3RGaXJzdFBhcnR5RnJhbWVJbmRleFxuICAgIF0pO1xuICAgIGNvbnN0IFthbGwsIHNldEFsbF0gPSBfcmVhY3QudXNlU3RhdGUoZmlyc3RGcmFtZSA9PSBudWxsKTtcbiAgICBjb25zdCB0b2dnbGVBbGwgPSBfcmVhY3QudXNlQ2FsbGJhY2soKCk9PntcbiAgICAgICAgc2V0QWxsKCh2KT0+IXYpO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBsZWFkaW5nRnJhbWVzID0gX3JlYWN0LnVzZU1lbW8oKCk9PmFsbExlYWRpbmdGcmFtZXMuZmlsdGVyKChmKT0+Zi5leHBhbmRlZCB8fCBhbGwpLCBbXG4gICAgICAgIGFsbCxcbiAgICAgICAgYWxsTGVhZGluZ0ZyYW1lc1xuICAgIF0pO1xuICAgIGNvbnN0IGFsbENhbGxTdGFja0ZyYW1lcyA9IF9yZWFjdC51c2VNZW1vKCgpPT5lcnJvci5mcmFtZXMuc2xpY2UoZmlyc3RGaXJzdFBhcnR5RnJhbWVJbmRleCArIDEpLCBbXG4gICAgICAgIGVycm9yLmZyYW1lcyxcbiAgICAgICAgZmlyc3RGaXJzdFBhcnR5RnJhbWVJbmRleFxuICAgIF0pO1xuICAgIGNvbnN0IHZpc2libGVDYWxsU3RhY2tGcmFtZXMgPSBfcmVhY3QudXNlTWVtbygoKT0+YWxsQ2FsbFN0YWNrRnJhbWVzLmZpbHRlcigoZik9PmYuZXhwYW5kZWQgfHwgYWxsKSwgW1xuICAgICAgICBhbGwsXG4gICAgICAgIGFsbENhbGxTdGFja0ZyYW1lc1xuICAgIF0pO1xuICAgIGNvbnN0IGNhblNob3dNb3JlID0gX3JlYWN0LnVzZU1lbW8oKCk9PntcbiAgICAgICAgcmV0dXJuIGFsbENhbGxTdGFja0ZyYW1lcy5sZW5ndGggIT09IHZpc2libGVDYWxsU3RhY2tGcmFtZXMubGVuZ3RoIHx8IGFsbCAmJiBmaXJzdEZyYW1lICE9IG51bGw7XG4gICAgfSwgW1xuICAgICAgICBhbGwsXG4gICAgICAgIGFsbENhbGxTdGFja0ZyYW1lcy5sZW5ndGgsXG4gICAgICAgIGZpcnN0RnJhbWUsXG4gICAgICAgIHZpc2libGVDYWxsU3RhY2tGcmFtZXMubGVuZ3RoXG4gICAgXSk7XG4gICAgY29uc3Qgc3RhY2tGcmFtZXNHcm91cGVkQnlGcmFtZXdvcmsgPSBfcmVhY3QudXNlTWVtbygoKT0+KDAsIF9ncm91cHN0YWNrZnJhbWVzYnlmcmFtZXdvcmsuZ3JvdXBTdGFja0ZyYW1lc0J5RnJhbWV3b3JrKSh2aXNpYmxlQ2FsbFN0YWNrRnJhbWVzKSwgW1xuICAgICAgICB2aXNpYmxlQ2FsbFN0YWNrRnJhbWVzXG4gICAgXSk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9yZWFjdC5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgZmlyc3RGcmFtZSA/IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9yZWFjdC5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoMlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJTb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgbGVhZGluZ0ZyYW1lcy5tYXAoKGZyYW1lLCBpbmRleCk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0NhbGxTdGFja0ZyYW1lLkNhbGxTdGFja0ZyYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWU6IGZyYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBcImxlYWRpbmctZnJhbWUtXCIgKyBpbmRleCArIFwiLVwiICsgYWxsKSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0NvZGVGcmFtZS5Db2RlRnJhbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRnJhbWU6IGZpcnN0RnJhbWUub3JpZ2luYWxTdGFja0ZyYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZUZyYW1lOiBmaXJzdEZyYW1lLm9yaWdpbmFsQ29kZUZyYW1lXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBlcnJvci5jb21wb25lbnRTdGFja0ZyYW1lcyA/IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImgyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIkNvbXBvbmVudCBTdGFja1wiXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBlcnJvci5jb21wb25lbnRTdGFja0ZyYW1lcy5tYXAoKGNvbXBvbmVudFN0YWNrRnJhbWUsIGluZGV4KT0+LyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfQ29tcG9uZW50U3RhY2tGcmFtZVJvdy5Db21wb25lbnRTdGFja0ZyYW1lUm93LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U3RhY2tGcmFtZTogY29tcG9uZW50U3RhY2tGcmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgaW5kZXgpKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pIDogbnVsbCxcbiAgICAgICAgICAgIHN0YWNrRnJhbWVzR3JvdXBlZEJ5RnJhbWV3b3JrLmxlbmd0aCA/IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9yZWFjdC5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoMlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJDYWxsIFN0YWNrXCJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0dyb3VwZWRTdGFja0ZyYW1lcy5Hcm91cGVkU3RhY2tGcmFtZXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRTdGFja0ZyYW1lczogc3RhY2tGcmFtZXNHcm91cGVkQnlGcmFtZXdvcmssXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGw6IGFsbFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY2FuU2hvd01vcmUgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9yZWFjdC5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHRhYkluZGV4OiAxMCxcbiAgICAgICAgICAgICAgICAgICAgXCJkYXRhLW5leHRqcy1kYXRhLXJ1bnRpbWUtZXJyb3ItY29sbGFwc2VkLWFjdGlvblwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiB0b2dnbGVBbGwsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGwgPyBcIkhpZGVcIiA6IFwiU2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgY29sbGFwc2VkIGZyYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSkgOiB1bmRlZmluZWRcbiAgICAgICAgXVxuICAgIH0pO1xufTtcbmNvbnN0IHN0eWxlcyA9ICgwLCBfbm9vcHRlbXBsYXRlLm5vb3ApKF90ZW1wbGF0ZU9iamVjdCgpKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwic3R5bGVzIiwiUnVudGltZUVycm9yIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfQ29kZUZyYW1lIiwiX25vb3B0ZW1wbGF0ZSIsIl9ncm91cHN0YWNrZnJhbWVzYnlmcmFtZXdvcmsiLCJfQ2FsbFN0YWNrRnJhbWUiLCJfR3JvdXBlZFN0YWNrRnJhbWVzIiwiX0NvbXBvbmVudFN0YWNrRnJhbWVSb3ciLCJfdGVtcGxhdGVPYmplY3QiLCJkYXRhIiwicGFyYW0iLCJlcnJvciIsImZpcnN0Rmlyc3RQYXJ0eUZyYW1lSW5kZXgiLCJ1c2VNZW1vIiwiZnJhbWVzIiwiZmluZEluZGV4IiwiZW50cnkiLCJleHBhbmRlZCIsIkJvb2xlYW4iLCJvcmlnaW5hbENvZGVGcmFtZSIsIm9yaWdpbmFsU3RhY2tGcmFtZSIsImZpcnN0RnJhbWUiLCJfZXJyb3JfZnJhbWVzX2ZpcnN0Rmlyc3RQYXJ0eUZyYW1lSW5kZXgiLCJhbGxMZWFkaW5nRnJhbWVzIiwic2xpY2UiLCJzZXRBbGwiLCJ1c2VTdGF0ZSIsInRvZ2dsZUFsbCIsInVzZUNhbGxiYWNrIiwidiIsImxlYWRpbmdGcmFtZXMiLCJmaWx0ZXIiLCJmIiwiYWxsQ2FsbFN0YWNrRnJhbWVzIiwidmlzaWJsZUNhbGxTdGFja0ZyYW1lcyIsImNhblNob3dNb3JlIiwibGVuZ3RoIiwic3RhY2tGcmFtZXNHcm91cGVkQnlGcmFtZXdvcmsiLCJncm91cFN0YWNrRnJhbWVzQnlGcmFtZXdvcmsiLCJqc3hzIiwiRnJhZ21lbnQiLCJjaGlsZHJlbiIsImpzeCIsIm1hcCIsImZyYW1lIiwiaW5kZXgiLCJDYWxsU3RhY2tGcmFtZSIsIkNvZGVGcmFtZSIsInN0YWNrRnJhbWUiLCJjb2RlRnJhbWUiLCJ1bmRlZmluZWQiLCJjb21wb25lbnRTdGFja0ZyYW1lcyIsImNvbXBvbmVudFN0YWNrRnJhbWUiLCJDb21wb25lbnRTdGFja0ZyYW1lUm93IiwiR3JvdXBlZFN0YWNrRnJhbWVzIiwiZ3JvdXBlZFN0YWNrRnJhbWVzIiwidGFiSW5kZXgiLCJ0eXBlIiwib25DbGljayIsIm5vb3AiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js": +/*!******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js ***! + \******************************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ACTION_BUILD_OK: function() {\n return ACTION_BUILD_OK;\n },\n ACTION_BUILD_ERROR: function() {\n return ACTION_BUILD_ERROR;\n },\n ACTION_BEFORE_REFRESH: function() {\n return ACTION_BEFORE_REFRESH;\n },\n ACTION_REFRESH: function() {\n return ACTION_REFRESH;\n },\n ACTION_UNHANDLED_ERROR: function() {\n return ACTION_UNHANDLED_ERROR;\n },\n ACTION_UNHANDLED_REJECTION: function() {\n return ACTION_UNHANDLED_REJECTION;\n },\n ACTION_VERSION_INFO: function() {\n return ACTION_VERSION_INFO;\n },\n INITIAL_OVERLAY_STATE: function() {\n return INITIAL_OVERLAY_STATE;\n },\n errorOverlayReducer: function() {\n return errorOverlayReducer;\n }\n});\nconst ACTION_BUILD_OK = \"build-ok\";\nconst ACTION_BUILD_ERROR = \"build-error\";\nconst ACTION_BEFORE_REFRESH = \"before-fast-refresh\";\nconst ACTION_REFRESH = \"fast-refresh\";\nconst ACTION_UNHANDLED_ERROR = \"unhandled-error\";\nconst ACTION_UNHANDLED_REJECTION = \"unhandled-rejection\";\nconst ACTION_VERSION_INFO = \"version-info\";\nconst INITIAL_OVERLAY_STATE = {\n nextId: 1,\n buildError: null,\n errors: [],\n notFound: false,\n refreshState: {\n type: \"idle\"\n },\n versionInfo: {\n installed: \"0.0.0\",\n staleness: \"unknown\"\n }\n};\nfunction pushErrorFilterDuplicates(errors, err) {\n return [\n ...errors.filter((e)=>{\n // Filter out duplicate errors\n return e.event.reason !== err.event.reason;\n }),\n err\n ];\n}\nconst errorOverlayReducer = (state, action)=>{\n switch(action.type){\n case ACTION_BUILD_OK:\n {\n return {\n ...state,\n buildError: null\n };\n }\n case ACTION_BUILD_ERROR:\n {\n return {\n ...state,\n buildError: action.message\n };\n }\n case ACTION_BEFORE_REFRESH:\n {\n return {\n ...state,\n refreshState: {\n type: \"pending\",\n errors: []\n }\n };\n }\n case ACTION_REFRESH:\n {\n return {\n ...state,\n buildError: null,\n errors: // and UNHANDLED_REJECTION events might be dispatched between the\n // BEFORE_REFRESH and the REFRESH event. We want to keep those errors\n // around until the next refresh. Otherwise we run into a race\n // condition where those errors would be cleared on refresh completion\n // before they can be displayed.\n state.refreshState.type === \"pending\" ? state.refreshState.errors : [],\n refreshState: {\n type: \"idle\"\n }\n };\n }\n case ACTION_UNHANDLED_ERROR:\n case ACTION_UNHANDLED_REJECTION:\n {\n switch(state.refreshState.type){\n case \"idle\":\n {\n return {\n ...state,\n nextId: state.nextId + 1,\n errors: pushErrorFilterDuplicates(state.errors, {\n id: state.nextId,\n event: action\n })\n };\n }\n case \"pending\":\n {\n return {\n ...state,\n nextId: state.nextId + 1,\n refreshState: {\n ...state.refreshState,\n errors: pushErrorFilterDuplicates(state.refreshState.errors, {\n id: state.nextId,\n event: action\n })\n }\n };\n }\n default:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = state.refreshState;\n return state;\n }\n }\n case ACTION_VERSION_INFO:\n {\n return {\n ...state,\n versionInfo: action.versionInfo\n };\n }\n default:\n {\n return state;\n }\n }\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=error-overlay-reducer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2Vycm9yLW92ZXJsYXktcmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQVVOO0FBQ0EsU0FBU1UsUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSWhCLE9BQU9DLGNBQWMsQ0FBQ2MsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRWixTQUFTO0lBQ2JHLGlCQUFpQjtRQUNiLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7SUFDQUMsdUJBQXVCO1FBQ25CLE9BQU9BO0lBQ1g7SUFDQUMsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtJQUNBQyx3QkFBd0I7UUFDcEIsT0FBT0E7SUFDWDtJQUNBQyw0QkFBNEI7UUFDeEIsT0FBT0E7SUFDWDtJQUNBQyxxQkFBcUI7UUFDakIsT0FBT0E7SUFDWDtJQUNBQyx1QkFBdUI7UUFDbkIsT0FBT0E7SUFDWDtJQUNBQyxxQkFBcUI7UUFDakIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTVIsa0JBQWtCO0FBQ3hCLE1BQU1DLHFCQUFxQjtBQUMzQixNQUFNQyx3QkFBd0I7QUFDOUIsTUFBTUMsaUJBQWlCO0FBQ3ZCLE1BQU1DLHlCQUF5QjtBQUMvQixNQUFNQyw2QkFBNkI7QUFDbkMsTUFBTUMsc0JBQXNCO0FBQzVCLE1BQU1DLHdCQUF3QjtJQUMxQlEsUUFBUTtJQUNSQyxZQUFZO0lBQ1pDLFFBQVEsRUFBRTtJQUNWQyxVQUFVO0lBQ1ZDLGNBQWM7UUFDVkMsTUFBTTtJQUNWO0lBQ0FDLGFBQWE7UUFDVEMsV0FBVztRQUNYQyxXQUFXO0lBQ2Y7QUFDSjtBQUNBLFNBQVNDLDBCQUEwQlAsTUFBTSxFQUFFUSxHQUFHO0lBQzFDLE9BQU87V0FDQVIsT0FBT1MsTUFBTSxDQUFDLENBQUNDO1lBQ2QsOEJBQThCO1lBQzlCLE9BQU9BLEVBQUVDLEtBQUssQ0FBQ0MsTUFBTSxLQUFLSixJQUFJRyxLQUFLLENBQUNDLE1BQU07UUFDOUM7UUFDQUo7S0FDSDtBQUNMO0FBQ0EsTUFBTWpCLHNCQUFzQixDQUFDc0IsT0FBT0M7SUFDaEMsT0FBT0EsT0FBT1gsSUFBSTtRQUNkLEtBQUtwQjtZQUNEO2dCQUNJLE9BQU87b0JBQ0gsR0FBRzhCLEtBQUs7b0JBQ1JkLFlBQVk7Z0JBQ2hCO1lBQ0o7UUFDSixLQUFLZjtZQUNEO2dCQUNJLE9BQU87b0JBQ0gsR0FBRzZCLEtBQUs7b0JBQ1JkLFlBQVllLE9BQU9DLE9BQU87Z0JBQzlCO1lBQ0o7UUFDSixLQUFLOUI7WUFDRDtnQkFDSSxPQUFPO29CQUNILEdBQUc0QixLQUFLO29CQUNSWCxjQUFjO3dCQUNWQyxNQUFNO3dCQUNOSCxRQUFRLEVBQUU7b0JBQ2Q7Z0JBQ0o7WUFDSjtRQUNKLEtBQUtkO1lBQ0Q7Z0JBQ0ksT0FBTztvQkFDSCxHQUFHMkIsS0FBSztvQkFDUmQsWUFBWTtvQkFDWkMsUUFDQSxpRUFBaUU7b0JBQ2pFLHFFQUFxRTtvQkFDckUsOERBQThEO29CQUM5RCxzRUFBc0U7b0JBQ3RFLGdDQUFnQztvQkFDaENhLE1BQU1YLFlBQVksQ0FBQ0MsSUFBSSxLQUFLLFlBQVlVLE1BQU1YLFlBQVksQ0FBQ0YsTUFBTSxHQUFHLEVBQUU7b0JBQ3RFRSxjQUFjO3dCQUNWQyxNQUFNO29CQUNWO2dCQUNKO1lBQ0o7UUFDSixLQUFLaEI7UUFDTCxLQUFLQztZQUNEO2dCQUNJLE9BQU95QixNQUFNWCxZQUFZLENBQUNDLElBQUk7b0JBQzFCLEtBQUs7d0JBQ0Q7NEJBQ0ksT0FBTztnQ0FDSCxHQUFHVSxLQUFLO2dDQUNSZixRQUFRZSxNQUFNZixNQUFNLEdBQUc7Z0NBQ3ZCRSxRQUFRTywwQkFBMEJNLE1BQU1iLE1BQU0sRUFBRTtvQ0FDNUNnQixJQUFJSCxNQUFNZixNQUFNO29DQUNoQmEsT0FBT0c7Z0NBQ1g7NEJBQ0o7d0JBQ0o7b0JBQ0osS0FBSzt3QkFDRDs0QkFDSSxPQUFPO2dDQUNILEdBQUdELEtBQUs7Z0NBQ1JmLFFBQVFlLE1BQU1mLE1BQU0sR0FBRztnQ0FDdkJJLGNBQWM7b0NBQ1YsR0FBR1csTUFBTVgsWUFBWTtvQ0FDckJGLFFBQVFPLDBCQUEwQk0sTUFBTVgsWUFBWSxDQUFDRixNQUFNLEVBQUU7d0NBQ3pEZ0IsSUFBSUgsTUFBTWYsTUFBTTt3Q0FDaEJhLE9BQU9HO29DQUNYO2dDQUNKOzRCQUNKO3dCQUNKO29CQUNKO3dCQUNJLDZEQUE2RDt3QkFDN0QsTUFBTUcsSUFBSUosTUFBTVgsWUFBWTt3QkFDNUIsT0FBT1c7Z0JBQ2Y7WUFDSjtRQUNKLEtBQUt4QjtZQUNEO2dCQUNJLE9BQU87b0JBQ0gsR0FBR3dCLEtBQUs7b0JBQ1JULGFBQWFVLE9BQU9WLFdBQVc7Z0JBQ25DO1lBQ0o7UUFDSjtZQUNJO2dCQUNJLE9BQU9TO1lBQ1g7SUFDUjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9qQyxRQUFRc0MsT0FBTyxLQUFLLGNBQWUsT0FBT3RDLFFBQVFzQyxPQUFPLEtBQUssWUFBWXRDLFFBQVFzQyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU90QyxRQUFRc0MsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3pDLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXNDLE9BQU8sRUFBRSxjQUFjO1FBQUVyQyxPQUFPO0lBQUs7SUFDbkVILE9BQU8wQyxNQUFNLENBQUN4QyxRQUFRc0MsT0FBTyxFQUFFdEM7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUXNDLE9BQU87QUFDbEMsRUFFQSxpREFBaUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9lcnJvci1vdmVybGF5LXJlZHVjZXIuanM/MjVkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEFDVElPTl9CVUlMRF9PSzogbnVsbCxcbiAgICBBQ1RJT05fQlVJTERfRVJST1I6IG51bGwsXG4gICAgQUNUSU9OX0JFRk9SRV9SRUZSRVNIOiBudWxsLFxuICAgIEFDVElPTl9SRUZSRVNIOiBudWxsLFxuICAgIEFDVElPTl9VTkhBTkRMRURfRVJST1I6IG51bGwsXG4gICAgQUNUSU9OX1VOSEFORExFRF9SRUpFQ1RJT046IG51bGwsXG4gICAgQUNUSU9OX1ZFUlNJT05fSU5GTzogbnVsbCxcbiAgICBJTklUSUFMX09WRVJMQVlfU1RBVEU6IG51bGwsXG4gICAgZXJyb3JPdmVybGF5UmVkdWNlcjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBBQ1RJT05fQlVJTERfT0s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OX0JVSUxEX09LO1xuICAgIH0sXG4gICAgQUNUSU9OX0JVSUxEX0VSUk9SOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9CVUlMRF9FUlJPUjtcbiAgICB9LFxuICAgIEFDVElPTl9CRUZPUkVfUkVGUkVTSDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBQ1RJT05fQkVGT1JFX1JFRlJFU0g7XG4gICAgfSxcbiAgICBBQ1RJT05fUkVGUkVTSDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBQ1RJT05fUkVGUkVTSDtcbiAgICB9LFxuICAgIEFDVElPTl9VTkhBTkRMRURfRVJST1I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OX1VOSEFORExFRF9FUlJPUjtcbiAgICB9LFxuICAgIEFDVElPTl9VTkhBTkRMRURfUkVKRUNUSU9OOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9VTkhBTkRMRURfUkVKRUNUSU9OO1xuICAgIH0sXG4gICAgQUNUSU9OX1ZFUlNJT05fSU5GTzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBQ1RJT05fVkVSU0lPTl9JTkZPO1xuICAgIH0sXG4gICAgSU5JVElBTF9PVkVSTEFZX1NUQVRFOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIElOSVRJQUxfT1ZFUkxBWV9TVEFURTtcbiAgICB9LFxuICAgIGVycm9yT3ZlcmxheVJlZHVjZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXJyb3JPdmVybGF5UmVkdWNlcjtcbiAgICB9XG59KTtcbmNvbnN0IEFDVElPTl9CVUlMRF9PSyA9IFwiYnVpbGQtb2tcIjtcbmNvbnN0IEFDVElPTl9CVUlMRF9FUlJPUiA9IFwiYnVpbGQtZXJyb3JcIjtcbmNvbnN0IEFDVElPTl9CRUZPUkVfUkVGUkVTSCA9IFwiYmVmb3JlLWZhc3QtcmVmcmVzaFwiO1xuY29uc3QgQUNUSU9OX1JFRlJFU0ggPSBcImZhc3QtcmVmcmVzaFwiO1xuY29uc3QgQUNUSU9OX1VOSEFORExFRF9FUlJPUiA9IFwidW5oYW5kbGVkLWVycm9yXCI7XG5jb25zdCBBQ1RJT05fVU5IQU5ETEVEX1JFSkVDVElPTiA9IFwidW5oYW5kbGVkLXJlamVjdGlvblwiO1xuY29uc3QgQUNUSU9OX1ZFUlNJT05fSU5GTyA9IFwidmVyc2lvbi1pbmZvXCI7XG5jb25zdCBJTklUSUFMX09WRVJMQVlfU1RBVEUgPSB7XG4gICAgbmV4dElkOiAxLFxuICAgIGJ1aWxkRXJyb3I6IG51bGwsXG4gICAgZXJyb3JzOiBbXSxcbiAgICBub3RGb3VuZDogZmFsc2UsXG4gICAgcmVmcmVzaFN0YXRlOiB7XG4gICAgICAgIHR5cGU6IFwiaWRsZVwiXG4gICAgfSxcbiAgICB2ZXJzaW9uSW5mbzoge1xuICAgICAgICBpbnN0YWxsZWQ6IFwiMC4wLjBcIixcbiAgICAgICAgc3RhbGVuZXNzOiBcInVua25vd25cIlxuICAgIH1cbn07XG5mdW5jdGlvbiBwdXNoRXJyb3JGaWx0ZXJEdXBsaWNhdGVzKGVycm9ycywgZXJyKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZXJyb3JzLmZpbHRlcigoZSk9PntcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgZHVwbGljYXRlIGVycm9yc1xuICAgICAgICAgICAgcmV0dXJuIGUuZXZlbnQucmVhc29uICE9PSBlcnIuZXZlbnQucmVhc29uO1xuICAgICAgICB9KSxcbiAgICAgICAgZXJyXG4gICAgXTtcbn1cbmNvbnN0IGVycm9yT3ZlcmxheVJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbik9PntcbiAgICBzd2l0Y2goYWN0aW9uLnR5cGUpe1xuICAgICAgICBjYXNlIEFDVElPTl9CVUlMRF9PSzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRFcnJvcjogbnVsbFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgQUNUSU9OX0JVSUxEX0VSUk9SOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBidWlsZEVycm9yOiBhY3Rpb24ubWVzc2FnZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgQUNUSU9OX0JFRk9SRV9SRUZSRVNIOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoU3RhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicGVuZGluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBbXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBBQ1RJT05fUkVGUkVTSDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRFcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiAvLyBFcnJvcnMgY2FuIGNvbWUgaW4gZHVyaW5nIHVwZGF0ZXMuIEluIHRoaXMgY2FzZSwgVU5IQU5ETEVEX0VSUk9SXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCBVTkhBTkRMRURfUkVKRUNUSU9OIGV2ZW50cyBtaWdodCBiZSBkaXNwYXRjaGVkIGJldHdlZW4gdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIEJFRk9SRV9SRUZSRVNIIGFuZCB0aGUgUkVGUkVTSCBldmVudC4gV2Ugd2FudCB0byBrZWVwIHRob3NlIGVycm9yc1xuICAgICAgICAgICAgICAgICAgICAvLyBhcm91bmQgdW50aWwgdGhlIG5leHQgcmVmcmVzaC4gT3RoZXJ3aXNlIHdlIHJ1biBpbnRvIGEgcmFjZVxuICAgICAgICAgICAgICAgICAgICAvLyBjb25kaXRpb24gd2hlcmUgdGhvc2UgZXJyb3JzIHdvdWxkIGJlIGNsZWFyZWQgb24gcmVmcmVzaCBjb21wbGV0aW9uXG4gICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSB0aGV5IGNhbiBiZSBkaXNwbGF5ZWQuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnJlZnJlc2hTdGF0ZS50eXBlID09PSBcInBlbmRpbmdcIiA/IHN0YXRlLnJlZnJlc2hTdGF0ZS5lcnJvcnMgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFN0YXRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImlkbGVcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBBQ1RJT05fVU5IQU5ETEVEX0VSUk9SOlxuICAgICAgICBjYXNlIEFDVElPTl9VTkhBTkRMRURfUkVKRUNUSU9OOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN3aXRjaChzdGF0ZS5yZWZyZXNoU3RhdGUudHlwZSl7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJpZGxlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJZDogc3RhdGUubmV4dElkICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBwdXNoRXJyb3JGaWx0ZXJEdXBsaWNhdGVzKHN0YXRlLmVycm9ycywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHN0YXRlLm5leHRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0SWQ6IHN0YXRlLm5leHRJZCArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hTdGF0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUucmVmcmVzaFN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBwdXNoRXJyb3JGaWx0ZXJEdXBsaWNhdGVzKHN0YXRlLnJlZnJlc2hTdGF0ZS5lcnJvcnMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogc3RhdGUubmV4dElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgXyA9IHN0YXRlLnJlZnJlc2hTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgQUNUSU9OX1ZFUlNJT05fSU5GTzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbkluZm86IGFjdGlvbi52ZXJzaW9uSW5mb1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgIH1cbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLW92ZXJsYXktcmVkdWNlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJBQ1RJT05fQlVJTERfT0siLCJBQ1RJT05fQlVJTERfRVJST1IiLCJBQ1RJT05fQkVGT1JFX1JFRlJFU0giLCJBQ1RJT05fUkVGUkVTSCIsIkFDVElPTl9VTkhBTkRMRURfRVJST1IiLCJBQ1RJT05fVU5IQU5ETEVEX1JFSkVDVElPTiIsIkFDVElPTl9WRVJTSU9OX0lORk8iLCJJTklUSUFMX09WRVJMQVlfU1RBVEUiLCJlcnJvck92ZXJsYXlSZWR1Y2VyIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwibmV4dElkIiwiYnVpbGRFcnJvciIsImVycm9ycyIsIm5vdEZvdW5kIiwicmVmcmVzaFN0YXRlIiwidHlwZSIsInZlcnNpb25JbmZvIiwiaW5zdGFsbGVkIiwic3RhbGVuZXNzIiwicHVzaEVycm9yRmlsdGVyRHVwbGljYXRlcyIsImVyciIsImZpbHRlciIsImUiLCJldmVudCIsInJlYXNvbiIsInN0YXRlIiwiYWN0aW9uIiwibWVzc2FnZSIsImlkIiwiXyIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js ***! + \*******************************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSocketUrl\", ({\n enumerable: true,\n get: function() {\n return getSocketUrl;\n }\n}));\nfunction getSocketProtocol(assetPrefix) {\n let protocol = window.location.protocol;\n try {\n // assetPrefix is a url\n protocol = new URL(assetPrefix).protocol;\n } catch (e) {}\n return protocol === \"http:\" ? \"ws\" : \"wss\";\n}\nfunction getSocketUrl(assetPrefix) {\n const { hostname, port } = window.location;\n const protocol = getSocketProtocol(assetPrefix);\n const normalizedAssetPrefix = assetPrefix.replace(/^\\/+/, \"\");\n let url = protocol + \"://\" + hostname + \":\" + port + (normalizedAssetPrefix ? \"/\" + normalizedAssetPrefix : \"\");\n if (normalizedAssetPrefix.startsWith(\"http\")) {\n url = protocol + \"://\" + normalizedAssetPrefix.split(\"://\", 2)[1];\n }\n return url;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-socket-url.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ2V0LXNvY2tldC11cmwuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGdEQUErQztJQUMzQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNDLGtCQUFrQkMsV0FBVztJQUNsQyxJQUFJQyxXQUFXQyxPQUFPQyxRQUFRLENBQUNGLFFBQVE7SUFDdkMsSUFBSTtRQUNBLHVCQUF1QjtRQUN2QkEsV0FBVyxJQUFJRyxJQUFJSixhQUFhQyxRQUFRO0lBQzVDLEVBQUUsT0FBT0ksR0FBRyxDQUFDO0lBQ2IsT0FBT0osYUFBYSxVQUFVLE9BQU87QUFDekM7QUFDQSxTQUFTSCxhQUFhRSxXQUFXO0lBQzdCLE1BQU0sRUFBRU0sUUFBUSxFQUFFQyxJQUFJLEVBQUUsR0FBR0wsT0FBT0MsUUFBUTtJQUMxQyxNQUFNRixXQUFXRixrQkFBa0JDO0lBQ25DLE1BQU1RLHdCQUF3QlIsWUFBWVMsT0FBTyxDQUFDLFFBQVE7SUFDMUQsSUFBSUMsTUFBTVQsV0FBVyxRQUFRSyxXQUFXLE1BQU1DLE9BQVFDLENBQUFBLHdCQUF3QixNQUFNQSx3QkFBd0IsRUFBQztJQUM3RyxJQUFJQSxzQkFBc0JHLFVBQVUsQ0FBQyxTQUFTO1FBQzFDRCxNQUFNVCxXQUFXLFFBQVFPLHNCQUFzQkksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDckU7SUFDQSxPQUFPRjtBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU9oQixRQUFRbUIsT0FBTyxLQUFLLGNBQWUsT0FBT25CLFFBQVFtQixPQUFPLEtBQUssWUFBWW5CLFFBQVFtQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9uQixRQUFRbUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3RCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW1CLE9BQU8sRUFBRSxjQUFjO1FBQUVsQixPQUFPO0lBQUs7SUFDbkVILE9BQU91QixNQUFNLENBQUNyQixRQUFRbUIsT0FBTyxFQUFFbkI7SUFDL0JzQixPQUFPdEIsT0FBTyxHQUFHQSxRQUFRbUIsT0FBTztBQUNsQyxFQUVBLDBDQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ2V0LXNvY2tldC11cmwuanM/OWUwOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFNvY2tldFVybFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0U29ja2V0VXJsO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gZ2V0U29ja2V0UHJvdG9jb2woYXNzZXRQcmVmaXgpIHtcbiAgICBsZXQgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gYXNzZXRQcmVmaXggaXMgYSB1cmxcbiAgICAgICAgcHJvdG9jb2wgPSBuZXcgVVJMKGFzc2V0UHJlZml4KS5wcm90b2NvbDtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBwcm90b2NvbCA9PT0gXCJodHRwOlwiID8gXCJ3c1wiIDogXCJ3c3NcIjtcbn1cbmZ1bmN0aW9uIGdldFNvY2tldFVybChhc3NldFByZWZpeCkge1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHBvcnQgfSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICBjb25zdCBwcm90b2NvbCA9IGdldFNvY2tldFByb3RvY29sKGFzc2V0UHJlZml4KTtcbiAgICBjb25zdCBub3JtYWxpemVkQXNzZXRQcmVmaXggPSBhc3NldFByZWZpeC5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpO1xuICAgIGxldCB1cmwgPSBwcm90b2NvbCArIFwiOi8vXCIgKyBob3N0bmFtZSArIFwiOlwiICsgcG9ydCArIChub3JtYWxpemVkQXNzZXRQcmVmaXggPyBcIi9cIiArIG5vcm1hbGl6ZWRBc3NldFByZWZpeCA6IFwiXCIpO1xuICAgIGlmIChub3JtYWxpemVkQXNzZXRQcmVmaXguc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgdXJsID0gcHJvdG9jb2wgKyBcIjovL1wiICsgbm9ybWFsaXplZEFzc2V0UHJlZml4LnNwbGl0KFwiOi8vXCIsIDIpWzFdO1xuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXQtc29ja2V0LXVybC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZ2V0U29ja2V0VXJsIiwiZ2V0U29ja2V0UHJvdG9jb2wiLCJhc3NldFByZWZpeCIsInByb3RvY29sIiwid2luZG93IiwibG9jYXRpb24iLCJVUkwiLCJlIiwiaG9zdG5hbWUiLCJwb3J0Iiwibm9ybWFsaXplZEFzc2V0UHJlZml4IiwicmVwbGFjZSIsInVybCIsInN0YXJ0c1dpdGgiLCJzcGxpdCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js ***! + \*******************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getErrorByType\", ({\n enumerable: true,\n get: function() {\n return getErrorByType;\n }\n}));\nconst _erroroverlayreducer = __webpack_require__(/*! ../error-overlay-reducer */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js\");\nconst _nodeStackFrames = __webpack_require__(/*! ./nodeStackFrames */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js\");\nconst _stackframe = __webpack_require__(/*! ./stack-frame */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\");\nasync function getErrorByType(ev) {\n const { id, event } = ev;\n switch(event.type){\n case _erroroverlayreducer.ACTION_UNHANDLED_ERROR:\n case _erroroverlayreducer.ACTION_UNHANDLED_REJECTION:\n {\n const readyRuntimeError = {\n id,\n runtime: true,\n error: event.reason,\n frames: await (0, _stackframe.getOriginalStackFrames)(event.frames, (0, _nodeStackFrames.getErrorSource)(event.reason), event.reason.toString())\n };\n if (event.type === _erroroverlayreducer.ACTION_UNHANDLED_ERROR) {\n readyRuntimeError.componentStackFrames = event.componentStackFrames;\n }\n return readyRuntimeError;\n }\n default:\n {\n break;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = event;\n throw new Error(\"type system invariant violation\");\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=getErrorByType.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ2V0RXJyb3JCeVR5cGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGtEQUFpRDtJQUM3Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHVCQUF1QkMsbUJBQU9BLENBQUMsc0lBQTBCO0FBQy9ELE1BQU1DLG1CQUFtQkQsbUJBQU9BLENBQUMsaUlBQW1CO0FBQ3BELE1BQU1FLGNBQWNGLG1CQUFPQSxDQUFDLHlIQUFlO0FBQzNDLGVBQWVGLGVBQWVLLEVBQUU7SUFDNUIsTUFBTSxFQUFFQyxFQUFFLEVBQUVDLEtBQUssRUFBRSxHQUFHRjtJQUN0QixPQUFPRSxNQUFNQyxJQUFJO1FBQ2IsS0FBS1AscUJBQXFCUSxzQkFBc0I7UUFDaEQsS0FBS1IscUJBQXFCUywwQkFBMEI7WUFDaEQ7Z0JBQ0ksTUFBTUMsb0JBQW9CO29CQUN0Qkw7b0JBQ0FNLFNBQVM7b0JBQ1RDLE9BQU9OLE1BQU1PLE1BQU07b0JBQ25CQyxRQUFRLE1BQU0sQ0FBQyxHQUFHWCxZQUFZWSxzQkFBc0IsRUFBRVQsTUFBTVEsTUFBTSxFQUFFLENBQUMsR0FBR1osaUJBQWlCYyxjQUFjLEVBQUVWLE1BQU1PLE1BQU0sR0FBR1AsTUFBTU8sTUFBTSxDQUFDSSxRQUFRO2dCQUNqSjtnQkFDQSxJQUFJWCxNQUFNQyxJQUFJLEtBQUtQLHFCQUFxQlEsc0JBQXNCLEVBQUU7b0JBQzVERSxrQkFBa0JRLG9CQUFvQixHQUFHWixNQUFNWSxvQkFBb0I7Z0JBQ3ZFO2dCQUNBLE9BQU9SO1lBQ1g7UUFDSjtZQUNJO2dCQUNJO1lBQ0o7SUFDUjtJQUNBLDZEQUE2RDtJQUM3RCxNQUFNUyxJQUFJYjtJQUNWLE1BQU0sSUFBSWMsTUFBTTtBQUNwQjtBQUVBLElBQUksQ0FBQyxPQUFPekIsUUFBUTBCLE9BQU8sS0FBSyxjQUFlLE9BQU8xQixRQUFRMEIsT0FBTyxLQUFLLFlBQVkxQixRQUFRMEIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPMUIsUUFBUTBCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcks3QixPQUFPQyxjQUFjLENBQUNDLFFBQVEwQixPQUFPLEVBQUUsY0FBYztRQUFFekIsT0FBTztJQUFLO0lBQ25FSCxPQUFPOEIsTUFBTSxDQUFDNUIsUUFBUTBCLE9BQU8sRUFBRTFCO0lBQy9CNkIsT0FBTzdCLE9BQU8sR0FBR0EsUUFBUTBCLE9BQU87QUFDbEMsRUFFQSwwQ0FBMEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9oZWxwZXJzL2dldEVycm9yQnlUeXBlLmpzPzVhY2IiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRFcnJvckJ5VHlwZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0RXJyb3JCeVR5cGU7XG4gICAgfVxufSk7XG5jb25zdCBfZXJyb3JvdmVybGF5cmVkdWNlciA9IHJlcXVpcmUoXCIuLi9lcnJvci1vdmVybGF5LXJlZHVjZXJcIik7XG5jb25zdCBfbm9kZVN0YWNrRnJhbWVzID0gcmVxdWlyZShcIi4vbm9kZVN0YWNrRnJhbWVzXCIpO1xuY29uc3QgX3N0YWNrZnJhbWUgPSByZXF1aXJlKFwiLi9zdGFjay1mcmFtZVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGdldEVycm9yQnlUeXBlKGV2KSB7XG4gICAgY29uc3QgeyBpZCwgZXZlbnQgfSA9IGV2O1xuICAgIHN3aXRjaChldmVudC50eXBlKXtcbiAgICAgICAgY2FzZSBfZXJyb3JvdmVybGF5cmVkdWNlci5BQ1RJT05fVU5IQU5ETEVEX0VSUk9SOlxuICAgICAgICBjYXNlIF9lcnJvcm92ZXJsYXlyZWR1Y2VyLkFDVElPTl9VTkhBTkRMRURfUkVKRUNUSU9OOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWR5UnVudGltZUVycm9yID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgcnVudGltZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGV2ZW50LnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgZnJhbWVzOiBhd2FpdCAoMCwgX3N0YWNrZnJhbWUuZ2V0T3JpZ2luYWxTdGFja0ZyYW1lcykoZXZlbnQuZnJhbWVzLCAoMCwgX25vZGVTdGFja0ZyYW1lcy5nZXRFcnJvclNvdXJjZSkoZXZlbnQucmVhc29uKSwgZXZlbnQucmVhc29uLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gX2Vycm9yb3ZlcmxheXJlZHVjZXIuQUNUSU9OX1VOSEFORExFRF9FUlJPUikge1xuICAgICAgICAgICAgICAgICAgICByZWFkeVJ1bnRpbWVFcnJvci5jb21wb25lbnRTdGFja0ZyYW1lcyA9IGV2ZW50LmNvbXBvbmVudFN0YWNrRnJhbWVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVhZHlSdW50aW1lRXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCBfID0gZXZlbnQ7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidHlwZSBzeXN0ZW0gaW52YXJpYW50IHZpb2xhdGlvblwiKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0RXJyb3JCeVR5cGUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImdldEVycm9yQnlUeXBlIiwiX2Vycm9yb3ZlcmxheXJlZHVjZXIiLCJyZXF1aXJlIiwiX25vZGVTdGFja0ZyYW1lcyIsIl9zdGFja2ZyYW1lIiwiZXYiLCJpZCIsImV2ZW50IiwidHlwZSIsIkFDVElPTl9VTkhBTkRMRURfRVJST1IiLCJBQ1RJT05fVU5IQU5ETEVEX1JFSkVDVElPTiIsInJlYWR5UnVudGltZUVycm9yIiwicnVudGltZSIsImVycm9yIiwicmVhc29uIiwiZnJhbWVzIiwiZ2V0T3JpZ2luYWxTdGFja0ZyYW1lcyIsImdldEVycm9yU291cmNlIiwidG9TdHJpbmciLCJjb21wb25lbnRTdGFja0ZyYW1lcyIsIl8iLCJFcnJvciIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js": +/*!************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js ***! + \************************************************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"groupStackFramesByFramework\", ({\n enumerable: true,\n get: function() {\n return groupStackFramesByFramework;\n }\n}));\n/**\n * Get the origin framework of the stack frame by package name.\n */ function getFramework(sourcePackage) {\n if (!sourcePackage) return undefined;\n if (/^(react|react-dom|react-is|react-refresh|react-server-dom-webpack|react-server-dom-turbopack|scheduler)$/.test(sourcePackage)) {\n return \"react\";\n } else if (sourcePackage === \"next\") {\n return \"next\";\n }\n return undefined;\n}\nfunction groupStackFramesByFramework(stackFrames) {\n const stackFramesGroupedByFramework = [];\n for (const stackFrame of stackFrames){\n const currentGroup = stackFramesGroupedByFramework[stackFramesGroupedByFramework.length - 1];\n const framework = getFramework(stackFrame.sourcePackage);\n if (currentGroup && currentGroup.framework === framework) {\n currentGroup.stackFrames.push(stackFrame);\n } else {\n stackFramesGroupedByFramework.push({\n framework: framework,\n stackFrames: [\n stackFrame\n ]\n });\n }\n }\n return stackFramesGroupedByFramework;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=group-stack-frames-by-framework.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ3JvdXAtc3RhY2stZnJhbWVzLWJ5LWZyYW1ld29yay5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsK0RBQThEO0lBQzFESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0Y7O0NBRUMsR0FBRyxTQUFTQyxhQUFhQyxhQUFhO0lBQ25DLElBQUksQ0FBQ0EsZUFBZSxPQUFPQztJQUMzQixJQUFJLDJHQUEyR0MsSUFBSSxDQUFDRixnQkFBZ0I7UUFDaEksT0FBTztJQUNYLE9BQU8sSUFBSUEsa0JBQWtCLFFBQVE7UUFDakMsT0FBTztJQUNYO0lBQ0EsT0FBT0M7QUFDWDtBQUNBLFNBQVNILDRCQUE0QkssV0FBVztJQUM1QyxNQUFNQyxnQ0FBZ0MsRUFBRTtJQUN4QyxLQUFLLE1BQU1DLGNBQWNGLFlBQVk7UUFDakMsTUFBTUcsZUFBZUYsNkJBQTZCLENBQUNBLDhCQUE4QkcsTUFBTSxHQUFHLEVBQUU7UUFDNUYsTUFBTUMsWUFBWVQsYUFBYU0sV0FBV0wsYUFBYTtRQUN2RCxJQUFJTSxnQkFBZ0JBLGFBQWFFLFNBQVMsS0FBS0EsV0FBVztZQUN0REYsYUFBYUgsV0FBVyxDQUFDTSxJQUFJLENBQUNKO1FBQ2xDLE9BQU87WUFDSEQsOEJBQThCSyxJQUFJLENBQUM7Z0JBQy9CRCxXQUFXQTtnQkFDWEwsYUFBYTtvQkFDVEU7aUJBQ0g7WUFDTDtRQUNKO0lBQ0o7SUFDQSxPQUFPRDtBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU9WLFFBQVFnQixPQUFPLEtBQUssY0FBZSxPQUFPaEIsUUFBUWdCLE9BQU8sS0FBSyxZQUFZaEIsUUFBUWdCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2hCLFFBQVFnQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLbkIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRZ0IsT0FBTyxFQUFFLGNBQWM7UUFBRWYsT0FBTztJQUFLO0lBQ25FSCxPQUFPb0IsTUFBTSxDQUFDbEIsUUFBUWdCLE9BQU8sRUFBRWhCO0lBQy9CbUIsT0FBT25CLE9BQU8sR0FBR0EsUUFBUWdCLE9BQU87QUFDbEMsRUFFQSwyREFBMkQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9oZWxwZXJzL2dyb3VwLXN0YWNrLWZyYW1lcy1ieS1mcmFtZXdvcmsuanM/Yjg4OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdyb3VwU3RhY2tGcmFtZXNCeUZyYW1ld29ya1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ3JvdXBTdGFja0ZyYW1lc0J5RnJhbWV3b3JrO1xuICAgIH1cbn0pO1xuLyoqXG4gKiBHZXQgdGhlIG9yaWdpbiBmcmFtZXdvcmsgb2YgdGhlIHN0YWNrIGZyYW1lIGJ5IHBhY2thZ2UgbmFtZS5cbiAqLyBmdW5jdGlvbiBnZXRGcmFtZXdvcmsoc291cmNlUGFja2FnZSkge1xuICAgIGlmICghc291cmNlUGFja2FnZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoL14ocmVhY3R8cmVhY3QtZG9tfHJlYWN0LWlzfHJlYWN0LXJlZnJlc2h8cmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrfHJlYWN0LXNlcnZlci1kb20tdHVyYm9wYWNrfHNjaGVkdWxlcikkLy50ZXN0KHNvdXJjZVBhY2thZ2UpKSB7XG4gICAgICAgIHJldHVybiBcInJlYWN0XCI7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VQYWNrYWdlID09PSBcIm5leHRcIikge1xuICAgICAgICByZXR1cm4gXCJuZXh0XCI7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBncm91cFN0YWNrRnJhbWVzQnlGcmFtZXdvcmsoc3RhY2tGcmFtZXMpIHtcbiAgICBjb25zdCBzdGFja0ZyYW1lc0dyb3VwZWRCeUZyYW1ld29yayA9IFtdO1xuICAgIGZvciAoY29uc3Qgc3RhY2tGcmFtZSBvZiBzdGFja0ZyYW1lcyl7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IHN0YWNrRnJhbWVzR3JvdXBlZEJ5RnJhbWV3b3JrW3N0YWNrRnJhbWVzR3JvdXBlZEJ5RnJhbWV3b3JrLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBmcmFtZXdvcmsgPSBnZXRGcmFtZXdvcmsoc3RhY2tGcmFtZS5zb3VyY2VQYWNrYWdlKTtcbiAgICAgICAgaWYgKGN1cnJlbnRHcm91cCAmJiBjdXJyZW50R3JvdXAuZnJhbWV3b3JrID09PSBmcmFtZXdvcmspIHtcbiAgICAgICAgICAgIGN1cnJlbnRHcm91cC5zdGFja0ZyYW1lcy5wdXNoKHN0YWNrRnJhbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhY2tGcmFtZXNHcm91cGVkQnlGcmFtZXdvcmsucHVzaCh7XG4gICAgICAgICAgICAgICAgZnJhbWV3b3JrOiBmcmFtZXdvcmssXG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2tGcmFtZVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdGFja0ZyYW1lc0dyb3VwZWRCeUZyYW1ld29yaztcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z3JvdXAtc3RhY2stZnJhbWVzLWJ5LWZyYW1ld29yay5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZ3JvdXBTdGFja0ZyYW1lc0J5RnJhbWV3b3JrIiwiZ2V0RnJhbWV3b3JrIiwic291cmNlUGFja2FnZSIsInVuZGVmaW5lZCIsInRlc3QiLCJzdGFja0ZyYW1lcyIsInN0YWNrRnJhbWVzR3JvdXBlZEJ5RnJhbWV3b3JrIiwic3RhY2tGcmFtZSIsImN1cnJlbnRHcm91cCIsImxlbmd0aCIsImZyYW1ld29yayIsInB1c2giLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js": +/*!*************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js ***! + \*************************************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n hydrationErrorWarning: function() {\n return hydrationErrorWarning;\n },\n hydrationErrorComponentStack: function() {\n return hydrationErrorComponentStack;\n },\n patchConsoleError: function() {\n return patchConsoleError;\n }\n});\nlet hydrationErrorWarning;\nlet hydrationErrorComponentStack;\n// https://github.com/facebook/react/blob/main/packages/react-dom/src/__tests__/ReactDOMHydrationDiff-test.js used as a reference\nconst knownHydrationWarnings = new Set([\n 'Warning: Text content did not match. Server: \"%s\" Client: \"%s\"%s',\n \"Warning: Expected server HTML to contain a matching <%s> in <%s>.%s\",\n 'Warning: Expected server HTML to contain a matching text node for \"%s\" in <%s>.%s',\n \"Warning: Did not expect server HTML to contain a <%s> in <%s>.%s\",\n 'Warning: Did not expect server HTML to contain the text node \"%s\" in <%s>.%s'\n]);\nfunction patchConsoleError() {\n const prev = console.error;\n console.error = function(msg, serverContent, clientContent, componentStack) {\n if (knownHydrationWarnings.has(msg)) {\n hydrationErrorWarning = msg.replace(\"%s\", serverContent).replace(\"%s\", clientContent).replace(\"%s\", \"\");\n hydrationErrorComponentStack = componentStack;\n }\n // @ts-expect-error argument is defined\n prev.apply(console, arguments);\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hydration-error-info.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvaHlkcmF0aW9uLWVycm9yLWluZm8uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FJTjtBQUNBLFNBQVNJLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlWLE9BQU9DLGNBQWMsQ0FBQ1EsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTixTQUFTO0lBQ2JHLHVCQUF1QjtRQUNuQixPQUFPQTtJQUNYO0lBQ0FDLDhCQUE4QjtRQUMxQixPQUFPQTtJQUNYO0lBQ0FDLG1CQUFtQjtRQUNmLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLElBQUlGO0FBQ0osSUFBSUM7QUFDSixpSUFBaUk7QUFDakksTUFBTVEseUJBQXlCLElBQUlDLElBQUk7SUFDbkM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNIO0FBQ0QsU0FBU1I7SUFDTCxNQUFNUyxPQUFPQyxRQUFRQyxLQUFLO0lBQzFCRCxRQUFRQyxLQUFLLEdBQUcsU0FBU0MsR0FBRyxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsRUFBRUMsY0FBYztRQUN0RSxJQUFJUix1QkFBdUJTLEdBQUcsQ0FBQ0osTUFBTTtZQUNqQ2Qsd0JBQXdCYyxJQUFJSyxPQUFPLENBQUMsTUFBTUosZUFBZUksT0FBTyxDQUFDLE1BQU1ILGVBQWVHLE9BQU8sQ0FBQyxNQUFNO1lBQ3BHbEIsK0JBQStCZ0I7UUFDbkM7UUFDQSx1Q0FBdUM7UUFDdkNOLEtBQUtTLEtBQUssQ0FBQ1IsU0FBU1M7SUFDeEI7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPeEIsUUFBUXlCLE9BQU8sS0FBSyxjQUFlLE9BQU96QixRQUFReUIsT0FBTyxLQUFLLFlBQVl6QixRQUFReUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPekIsUUFBUXlCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcks1QixPQUFPQyxjQUFjLENBQUNDLFFBQVF5QixPQUFPLEVBQUUsY0FBYztRQUFFeEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPNkIsTUFBTSxDQUFDM0IsUUFBUXlCLE9BQU8sRUFBRXpCO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVF5QixPQUFPO0FBQ2xDLEVBRUEsZ0RBQWdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9oeWRyYXRpb24tZXJyb3ItaW5mby5qcz8zMmFhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgaHlkcmF0aW9uRXJyb3JXYXJuaW5nOiBudWxsLFxuICAgIGh5ZHJhdGlvbkVycm9yQ29tcG9uZW50U3RhY2s6IG51bGwsXG4gICAgcGF0Y2hDb25zb2xlRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgaHlkcmF0aW9uRXJyb3JXYXJuaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGh5ZHJhdGlvbkVycm9yV2FybmluZztcbiAgICB9LFxuICAgIGh5ZHJhdGlvbkVycm9yQ29tcG9uZW50U3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaHlkcmF0aW9uRXJyb3JDb21wb25lbnRTdGFjaztcbiAgICB9LFxuICAgIHBhdGNoQ29uc29sZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHBhdGNoQ29uc29sZUVycm9yO1xuICAgIH1cbn0pO1xubGV0IGh5ZHJhdGlvbkVycm9yV2FybmluZztcbmxldCBoeWRyYXRpb25FcnJvckNvbXBvbmVudFN0YWNrO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC1kb20vc3JjL19fdGVzdHNfXy9SZWFjdERPTUh5ZHJhdGlvbkRpZmYtdGVzdC5qcyB1c2VkIGFzIGEgcmVmZXJlbmNlXG5jb25zdCBrbm93bkh5ZHJhdGlvbldhcm5pbmdzID0gbmV3IFNldChbXG4gICAgJ1dhcm5pbmc6IFRleHQgY29udGVudCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6IFwiJXNcIiBDbGllbnQ6IFwiJXNcIiVzJyxcbiAgICBcIldhcm5pbmc6IEV4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyA8JXM+IGluIDwlcz4uJXNcIixcbiAgICAnV2FybmluZzogRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIHRleHQgbm9kZSBmb3IgXCIlc1wiIGluIDwlcz4uJXMnLFxuICAgIFwiV2FybmluZzogRGlkIG5vdCBleHBlY3Qgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIDwlcz4gaW4gPCVzPi4lc1wiLFxuICAgICdXYXJuaW5nOiBEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIHRoZSB0ZXh0IG5vZGUgXCIlc1wiIGluIDwlcz4uJXMnXG5dKTtcbmZ1bmN0aW9uIHBhdGNoQ29uc29sZUVycm9yKCkge1xuICAgIGNvbnN0IHByZXYgPSBjb25zb2xlLmVycm9yO1xuICAgIGNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbihtc2csIHNlcnZlckNvbnRlbnQsIGNsaWVudENvbnRlbnQsIGNvbXBvbmVudFN0YWNrKSB7XG4gICAgICAgIGlmIChrbm93bkh5ZHJhdGlvbldhcm5pbmdzLmhhcyhtc2cpKSB7XG4gICAgICAgICAgICBoeWRyYXRpb25FcnJvcldhcm5pbmcgPSBtc2cucmVwbGFjZShcIiVzXCIsIHNlcnZlckNvbnRlbnQpLnJlcGxhY2UoXCIlc1wiLCBjbGllbnRDb250ZW50KS5yZXBsYWNlKFwiJXNcIiwgXCJcIik7XG4gICAgICAgICAgICBoeWRyYXRpb25FcnJvckNvbXBvbmVudFN0YWNrID0gY29tcG9uZW50U3RhY2s7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhcmd1bWVudCBpcyBkZWZpbmVkXG4gICAgICAgIHByZXYuYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKTtcbiAgICB9O1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oeWRyYXRpb24tZXJyb3ItaW5mby5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJoeWRyYXRpb25FcnJvcldhcm5pbmciLCJoeWRyYXRpb25FcnJvckNvbXBvbmVudFN0YWNrIiwicGF0Y2hDb25zb2xlRXJyb3IiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJrbm93bkh5ZHJhdGlvbldhcm5pbmdzIiwiU2V0IiwicHJldiIsImNvbnNvbGUiLCJlcnJvciIsIm1zZyIsInNlcnZlckNvbnRlbnQiLCJjbGllbnRDb250ZW50IiwiY29tcG9uZW50U3RhY2siLCJoYXMiLCJyZXBsYWNlIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js": +/*!********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js ***! + \********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getFilesystemFrame: function() {\n return getFilesystemFrame;\n },\n getErrorSource: function() {\n return getErrorSource;\n },\n decorateServerError: function() {\n return decorateServerError;\n },\n getServerError: function() {\n return getServerError;\n }\n});\nconst _stacktraceparser = __webpack_require__(/*! next/dist/compiled/stacktrace-parser */ \"(ssr)/./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\");\nfunction getFilesystemFrame(frame) {\n const f = {\n ...frame\n };\n if (typeof f.file === \"string\") {\n if (f.file.startsWith(\"/\") || // Win32:\n /^[a-z]:\\\\/i.test(f.file) || // Win32 UNC:\n f.file.startsWith(\"\\\\\\\\\")) {\n f.file = \"file://\" + f.file;\n }\n }\n return f;\n}\nconst symbolError = Symbol(\"NextjsError\");\nfunction getErrorSource(error) {\n return error[symbolError] || null;\n}\nfunction decorateServerError(error, type) {\n Object.defineProperty(error, symbolError, {\n writable: false,\n enumerable: false,\n configurable: false,\n value: type\n });\n}\nfunction getServerError(error, type) {\n let n;\n try {\n throw new Error(error.message);\n } catch (e) {\n n = e;\n }\n n.name = error.name;\n try {\n n.stack = n.toString() + \"\\n\" + (0, _stacktraceparser.parse)(error.stack).map(getFilesystemFrame).map((f)=>{\n let str = \" at \" + f.methodName;\n if (f.file) {\n let loc = f.file;\n if (f.lineNumber) {\n loc += \":\" + f.lineNumber;\n if (f.column) {\n loc += \":\" + f.column;\n }\n }\n str += \" (\" + loc + \")\";\n }\n return str;\n }).join(\"\\n\");\n } catch (e) {\n n.stack = error.stack;\n }\n decorateServerError(n, type);\n return n;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=nodeStackFrames.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvbm9kZVN0YWNrRnJhbWVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBS047QUFDQSxTQUFTSyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJWCxPQUFPQyxjQUFjLENBQUNTLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUVAsU0FBUztJQUNiRyxvQkFBb0I7UUFDaEIsT0FBT0E7SUFDWDtJQUNBQyxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLG9CQUFvQkMsbUJBQU9BLENBQUMsaUlBQXNDO0FBQ3hFLFNBQVNYLG1CQUFtQlksS0FBSztJQUM3QixNQUFNQyxJQUFJO1FBQ04sR0FBR0QsS0FBSztJQUNaO0lBQ0EsSUFBSSxPQUFPQyxFQUFFQyxJQUFJLEtBQUssVUFBVTtRQUM1QixJQUNBRCxFQUFFQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxRQUFRLFNBQVM7UUFDbkMsYUFBYUMsSUFBSSxDQUFDSCxFQUFFQyxJQUFJLEtBQUssYUFBYTtRQUMxQ0QsRUFBRUMsSUFBSSxDQUFDQyxVQUFVLENBQUMsU0FBUztZQUN2QkYsRUFBRUMsSUFBSSxHQUFHLFlBQVlELEVBQUVDLElBQUk7UUFDL0I7SUFDSjtJQUNBLE9BQU9EO0FBQ1g7QUFDQSxNQUFNSSxjQUFjQyxPQUFPO0FBQzNCLFNBQVNqQixlQUFla0IsS0FBSztJQUN6QixPQUFPQSxLQUFLLENBQUNGLFlBQVksSUFBSTtBQUNqQztBQUNBLFNBQVNmLG9CQUFvQmlCLEtBQUssRUFBRUMsSUFBSTtJQUNwQ3pCLE9BQU9DLGNBQWMsQ0FBQ3VCLE9BQU9GLGFBQWE7UUFDdENJLFVBQVU7UUFDVmIsWUFBWTtRQUNaYyxjQUFjO1FBQ2R4QixPQUFPc0I7SUFDWDtBQUNKO0FBQ0EsU0FBU2pCLGVBQWVnQixLQUFLLEVBQUVDLElBQUk7SUFDL0IsSUFBSUc7SUFDSixJQUFJO1FBQ0EsTUFBTSxJQUFJQyxNQUFNTCxNQUFNTSxPQUFPO0lBQ2pDLEVBQUUsT0FBT0MsR0FBRztRQUNSSCxJQUFJRztJQUNSO0lBQ0FILEVBQUVoQixJQUFJLEdBQUdZLE1BQU1aLElBQUk7SUFDbkIsSUFBSTtRQUNBZ0IsRUFBRUksS0FBSyxHQUFHSixFQUFFSyxRQUFRLEtBQUssT0FBTyxDQUFDLEdBQUdsQixrQkFBa0JtQixLQUFLLEVBQUVWLE1BQU1RLEtBQUssRUFBRUcsR0FBRyxDQUFDOUIsb0JBQW9COEIsR0FBRyxDQUFDLENBQUNqQjtZQUNuRyxJQUFJa0IsTUFBTSxZQUFZbEIsRUFBRW1CLFVBQVU7WUFDbEMsSUFBSW5CLEVBQUVDLElBQUksRUFBRTtnQkFDUixJQUFJbUIsTUFBTXBCLEVBQUVDLElBQUk7Z0JBQ2hCLElBQUlELEVBQUVxQixVQUFVLEVBQUU7b0JBQ2RELE9BQU8sTUFBTXBCLEVBQUVxQixVQUFVO29CQUN6QixJQUFJckIsRUFBRXNCLE1BQU0sRUFBRTt3QkFDVkYsT0FBTyxNQUFNcEIsRUFBRXNCLE1BQU07b0JBQ3pCO2dCQUNKO2dCQUNBSixPQUFPLE9BQU9FLE1BQU07WUFDeEI7WUFDQSxPQUFPRjtRQUNYLEdBQUdLLElBQUksQ0FBQztJQUNaLEVBQUUsT0FBT1YsR0FBRztRQUNSSCxFQUFFSSxLQUFLLEdBQUdSLE1BQU1RLEtBQUs7SUFDekI7SUFDQXpCLG9CQUFvQnFCLEdBQUdIO0lBQ3ZCLE9BQU9HO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBTzFCLFFBQVF3QyxPQUFPLEtBQUssY0FBZSxPQUFPeEMsUUFBUXdDLE9BQU8sS0FBSyxZQUFZeEMsUUFBUXdDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3hDLFFBQVF3QyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLM0MsT0FBT0MsY0FBYyxDQUFDQyxRQUFRd0MsT0FBTyxFQUFFLGNBQWM7UUFBRXZDLE9BQU87SUFBSztJQUNuRUgsT0FBTzRDLE1BQU0sQ0FBQzFDLFFBQVF3QyxPQUFPLEVBQUV4QztJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRd0MsT0FBTztBQUNsQyxFQUVBLDJDQUEyQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvbm9kZVN0YWNrRnJhbWVzLmpzPzljM2QiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBnZXRGaWxlc3lzdGVtRnJhbWU6IG51bGwsXG4gICAgZ2V0RXJyb3JTb3VyY2U6IG51bGwsXG4gICAgZGVjb3JhdGVTZXJ2ZXJFcnJvcjogbnVsbCxcbiAgICBnZXRTZXJ2ZXJFcnJvcjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBnZXRGaWxlc3lzdGVtRnJhbWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0RmlsZXN5c3RlbUZyYW1lO1xuICAgIH0sXG4gICAgZ2V0RXJyb3JTb3VyY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0RXJyb3JTb3VyY2U7XG4gICAgfSxcbiAgICBkZWNvcmF0ZVNlcnZlckVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRlY29yYXRlU2VydmVyRXJyb3I7XG4gICAgfSxcbiAgICBnZXRTZXJ2ZXJFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRTZXJ2ZXJFcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IF9zdGFja3RyYWNlcGFyc2VyID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9zdGFja3RyYWNlLXBhcnNlclwiKTtcbmZ1bmN0aW9uIGdldEZpbGVzeXN0ZW1GcmFtZShmcmFtZSkge1xuICAgIGNvbnN0IGYgPSB7XG4gICAgICAgIC4uLmZyYW1lXG4gICAgfTtcbiAgICBpZiAodHlwZW9mIGYuZmlsZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoLy8gUG9zaXg6XG4gICAgICAgIGYuZmlsZS5zdGFydHNXaXRoKFwiL1wiKSB8fCAvLyBXaW4zMjpcbiAgICAgICAgL15bYS16XTpcXFxcL2kudGVzdChmLmZpbGUpIHx8IC8vIFdpbjMyIFVOQzpcbiAgICAgICAgZi5maWxlLnN0YXJ0c1dpdGgoXCJcXFxcXFxcXFwiKSkge1xuICAgICAgICAgICAgZi5maWxlID0gXCJmaWxlOi8vXCIgKyBmLmZpbGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGY7XG59XG5jb25zdCBzeW1ib2xFcnJvciA9IFN5bWJvbChcIk5leHRqc0Vycm9yXCIpO1xuZnVuY3Rpb24gZ2V0RXJyb3JTb3VyY2UoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3Jbc3ltYm9sRXJyb3JdIHx8IG51bGw7XG59XG5mdW5jdGlvbiBkZWNvcmF0ZVNlcnZlckVycm9yKGVycm9yLCB0eXBlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCBzeW1ib2xFcnJvciwge1xuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogdHlwZVxuICAgIH0pO1xufVxuZnVuY3Rpb24gZ2V0U2VydmVyRXJyb3IoZXJyb3IsIHR5cGUpIHtcbiAgICBsZXQgbjtcbiAgICB0cnkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBuID0gZTtcbiAgICB9XG4gICAgbi5uYW1lID0gZXJyb3IubmFtZTtcbiAgICB0cnkge1xuICAgICAgICBuLnN0YWNrID0gbi50b1N0cmluZygpICsgXCJcXG5cIiArICgwLCBfc3RhY2t0cmFjZXBhcnNlci5wYXJzZSkoZXJyb3Iuc3RhY2spLm1hcChnZXRGaWxlc3lzdGVtRnJhbWUpLm1hcCgoZik9PntcbiAgICAgICAgICAgIGxldCBzdHIgPSBcIiAgICBhdCBcIiArIGYubWV0aG9kTmFtZTtcbiAgICAgICAgICAgIGlmIChmLmZpbGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgbG9jID0gZi5maWxlO1xuICAgICAgICAgICAgICAgIGlmIChmLmxpbmVOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jICs9IFwiOlwiICsgZi5saW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZi5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYyArPSBcIjpcIiArIGYuY29sdW1uO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0ciArPSBcIiAoXCIgKyBsb2MgKyBcIilcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH0pLmpvaW4oXCJcXG5cIik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBuLnN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gICAgfVxuICAgIGRlY29yYXRlU2VydmVyRXJyb3IobiwgdHlwZSk7XG4gICAgcmV0dXJuIG47XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vZGVTdGFja0ZyYW1lcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJnZXRGaWxlc3lzdGVtRnJhbWUiLCJnZXRFcnJvclNvdXJjZSIsImRlY29yYXRlU2VydmVyRXJyb3IiLCJnZXRTZXJ2ZXJFcnJvciIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9zdGFja3RyYWNlcGFyc2VyIiwicmVxdWlyZSIsImZyYW1lIiwiZiIsImZpbGUiLCJzdGFydHNXaXRoIiwidGVzdCIsInN5bWJvbEVycm9yIiwiU3ltYm9sIiwiZXJyb3IiLCJ0eXBlIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJuIiwiRXJyb3IiLCJtZXNzYWdlIiwiZSIsInN0YWNrIiwidG9TdHJpbmciLCJwYXJzZSIsIm1hcCIsInN0ciIsIm1ldGhvZE5hbWUiLCJsb2MiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwiam9pbiIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js": +/*!******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js ***! + \******************************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"noop\", ({\n enumerable: true,\n get: function() {\n return noop;\n }\n}));\nfunction noop(strings) {\n for(var _len = arguments.length, keys = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n keys[_key - 1] = arguments[_key];\n }\n const lastIndex = strings.length - 1;\n return strings.slice(0, lastIndex).reduce((p, s, i)=>p + s + keys[i], \"\") + strings[lastIndex];\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=noop-template.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsd0NBQXVDO0lBQ25DSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0EsS0FBS0MsT0FBTztJQUNqQixJQUFJLElBQUlDLE9BQU9DLFVBQVVDLE1BQU0sRUFBRUMsT0FBTyxJQUFJQyxNQUFNSixPQUFPLElBQUlBLE9BQU8sSUFBSSxJQUFJSyxPQUFPLEdBQUdBLE9BQU9MLE1BQU1LLE9BQU87UUFDdEdGLElBQUksQ0FBQ0UsT0FBTyxFQUFFLEdBQUdKLFNBQVMsQ0FBQ0ksS0FBSztJQUNwQztJQUNBLE1BQU1DLFlBQVlQLFFBQVFHLE1BQU0sR0FBRztJQUNuQyxPQUFPSCxRQUFRUSxLQUFLLENBQUMsR0FBR0QsV0FBV0UsTUFBTSxDQUFDLENBQUNDLEdBQUdDLEdBQUdDLElBQUlGLElBQUlDLElBQUlQLElBQUksQ0FBQ1EsRUFBRSxFQUFFLE1BQU1aLE9BQU8sQ0FBQ08sVUFBVTtBQUNsRztBQUVBLElBQUksQ0FBQyxPQUFPWixRQUFRa0IsT0FBTyxLQUFLLGNBQWUsT0FBT2xCLFFBQVFrQixPQUFPLEtBQUssWUFBWWxCLFFBQVFrQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9sQixRQUFRa0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3JCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWtCLE9BQU8sRUFBRSxjQUFjO1FBQUVqQixPQUFPO0lBQUs7SUFDbkVILE9BQU9zQixNQUFNLENBQUNwQixRQUFRa0IsT0FBTyxFQUFFbEI7SUFDL0JxQixPQUFPckIsT0FBTyxHQUFHQSxRQUFRa0IsT0FBTztBQUNsQyxFQUVBLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZS5qcz9lNjVmIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9vcFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIG5vb3Aoc3RyaW5ncykge1xuICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleXMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgIGtleXNbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBjb25zdCBsYXN0SW5kZXggPSBzdHJpbmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIHN0cmluZ3Muc2xpY2UoMCwgbGFzdEluZGV4KS5yZWR1Y2UoKHAsIHMsIGkpPT5wICsgcyArIGtleXNbaV0sIFwiXCIpICsgc3RyaW5nc1tsYXN0SW5kZXhdO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub29wLXRlbXBsYXRlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJub29wIiwic3RyaW5ncyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJrZXlzIiwiQXJyYXkiLCJfa2V5IiwibGFzdEluZGV4Iiwic2xpY2UiLCJyZWR1Y2UiLCJwIiwicyIsImkiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js": +/*!**************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js ***! + \**************************************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseComponentStack\", ({\n enumerable: true,\n get: function() {\n return parseComponentStack;\n }\n}));\nvar LocationType;\n(function(LocationType) {\n LocationType[\"FILE\"] = \"file\";\n LocationType[\"WEBPACK_INTERNAL\"] = \"webpack-internal\";\n LocationType[\"HTTP\"] = \"http\";\n LocationType[\"PROTOCOL_RELATIVE\"] = \"protocol-relative\";\n LocationType[\"UNKNOWN\"] = \"unknown\";\n})(LocationType || (LocationType = {}));\n/**\n * Get the type of frame line based on the location\n */ function getLocationType(location) {\n if (location.startsWith(\"file://\")) {\n return \"file\";\n }\n if (location.startsWith(\"webpack-internal://\")) {\n return \"webpack-internal\";\n }\n if (location.startsWith(\"http://\") || location.startsWith(\"https://\")) {\n return \"http\";\n }\n if (location.startsWith(\"//\")) {\n return \"protocol-relative\";\n }\n return \"unknown\";\n}\nfunction parseStackFrameLocation(location) {\n const locationType = getLocationType(location);\n const modulePath = location == null ? void 0 : location.replace(/^(webpack-internal:\\/\\/\\/|file:\\/\\/)(\\(.*\\)\\/)?/, \"\");\n var _modulePath_match;\n const [, file, lineNumber, column] = (_modulePath_match = modulePath == null ? void 0 : modulePath.match(/^(.+):(\\d+):(\\d+)/)) != null ? _modulePath_match : [];\n switch(locationType){\n case \"file\":\n case \"webpack-internal\":\n return {\n canOpenInEditor: true,\n file,\n lineNumber: lineNumber ? Number(lineNumber) : undefined,\n column: column ? Number(column) : undefined\n };\n // When the location is a URL we only show the file\n // TODO: Resolve http(s) URLs through sourcemaps\n case \"http\":\n case \"protocol-relative\":\n case \"unknown\":\n default:\n {\n return {\n canOpenInEditor: false\n };\n }\n }\n}\nfunction parseComponentStack(componentStack) {\n const componentStackFrames = [];\n for (const line of componentStack.trim().split(\"\\n\")){\n // Get component and file from the component stack line\n const match = /at ([^ ]+)( \\((.*)\\))?/.exec(line);\n if (match == null ? void 0 : match[1]) {\n const component = match[1];\n const location = match[3];\n if (!location) {\n componentStackFrames.push({\n canOpenInEditor: false,\n component\n });\n continue;\n }\n // Stop parsing the component stack if we reach a Next.js component\n if (location == null ? void 0 : location.includes(\"next/dist\")) {\n break;\n }\n const frameLocation = parseStackFrameLocation(location);\n componentStackFrames.push({\n component,\n ...frameLocation\n });\n }\n }\n return componentStackFrames;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=parse-component-stack.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvcGFyc2UtY29tcG9uZW50LXN0YWNrLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx1REFBc0Q7SUFDbERJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixJQUFJQztBQUNILFVBQVNBLFlBQVk7SUFDbEJBLFlBQVksQ0FBQyxPQUFPLEdBQUc7SUFDdkJBLFlBQVksQ0FBQyxtQkFBbUIsR0FBRztJQUNuQ0EsWUFBWSxDQUFDLE9BQU8sR0FBRztJQUN2QkEsWUFBWSxDQUFDLG9CQUFvQixHQUFHO0lBQ3BDQSxZQUFZLENBQUMsVUFBVSxHQUFHO0FBQzlCLEdBQUdBLGdCQUFpQkEsQ0FBQUEsZUFBZSxDQUFDO0FBQ3BDOztDQUVDLEdBQUcsU0FBU0MsZ0JBQWdCQyxRQUFRO0lBQ2pDLElBQUlBLFNBQVNDLFVBQVUsQ0FBQyxZQUFZO1FBQ2hDLE9BQU87SUFDWDtJQUNBLElBQUlELFNBQVNDLFVBQVUsQ0FBQyx3QkFBd0I7UUFDNUMsT0FBTztJQUNYO0lBQ0EsSUFBSUQsU0FBU0MsVUFBVSxDQUFDLGNBQWNELFNBQVNDLFVBQVUsQ0FBQyxhQUFhO1FBQ25FLE9BQU87SUFDWDtJQUNBLElBQUlELFNBQVNDLFVBQVUsQ0FBQyxPQUFPO1FBQzNCLE9BQU87SUFDWDtJQUNBLE9BQU87QUFDWDtBQUNBLFNBQVNDLHdCQUF3QkYsUUFBUTtJQUNyQyxNQUFNRyxlQUFlSixnQkFBZ0JDO0lBQ3JDLE1BQU1JLGFBQWFKLFlBQVksT0FBTyxLQUFLLElBQUlBLFNBQVNLLE9BQU8sQ0FBQyxtREFBbUQ7SUFDbkgsSUFBSUM7SUFDSixNQUFNLEdBQUdDLE1BQU1DLFlBQVlDLE9BQU8sR0FBRyxDQUFDSCxvQkFBb0JGLGNBQWMsT0FBTyxLQUFLLElBQUlBLFdBQVdNLEtBQUssQ0FBQyxvQkFBbUIsS0FBTSxPQUFPSixvQkFBb0IsRUFBRTtJQUMvSixPQUFPSDtRQUNILEtBQUs7UUFDTCxLQUFLO1lBQ0QsT0FBTztnQkFDSFEsaUJBQWlCO2dCQUNqQko7Z0JBQ0FDLFlBQVlBLGFBQWFJLE9BQU9KLGNBQWNLO2dCQUM5Q0osUUFBUUEsU0FBU0csT0FBT0gsVUFBVUk7WUFDdEM7UUFDSixtREFBbUQ7UUFDbkQsZ0RBQWdEO1FBQ2hELEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMO1lBQ0k7Z0JBQ0ksT0FBTztvQkFDSEYsaUJBQWlCO2dCQUNyQjtZQUNKO0lBQ1I7QUFDSjtBQUNBLFNBQVNkLG9CQUFvQmlCLGNBQWM7SUFDdkMsTUFBTUMsdUJBQXVCLEVBQUU7SUFDL0IsS0FBSyxNQUFNQyxRQUFRRixlQUFlRyxJQUFJLEdBQUdDLEtBQUssQ0FBQyxNQUFNO1FBQ2pELHVEQUF1RDtRQUN2RCxNQUFNUixRQUFRLHlCQUF5QlMsSUFBSSxDQUFDSDtRQUM1QyxJQUFJTixTQUFTLE9BQU8sS0FBSyxJQUFJQSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ25DLE1BQU1VLFlBQVlWLEtBQUssQ0FBQyxFQUFFO1lBQzFCLE1BQU1WLFdBQVdVLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQ1YsVUFBVTtnQkFDWGUscUJBQXFCTSxJQUFJLENBQUM7b0JBQ3RCVixpQkFBaUI7b0JBQ2pCUztnQkFDSjtnQkFDQTtZQUNKO1lBQ0EsbUVBQW1FO1lBQ25FLElBQUlwQixZQUFZLE9BQU8sS0FBSyxJQUFJQSxTQUFTc0IsUUFBUSxDQUFDLGNBQWM7Z0JBQzVEO1lBQ0o7WUFDQSxNQUFNQyxnQkFBZ0JyQix3QkFBd0JGO1lBQzlDZSxxQkFBcUJNLElBQUksQ0FBQztnQkFDdEJEO2dCQUNBLEdBQUdHLGFBQWE7WUFDcEI7UUFDSjtJQUNKO0lBQ0EsT0FBT1I7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPdEIsUUFBUStCLE9BQU8sS0FBSyxjQUFlLE9BQU8vQixRQUFRK0IsT0FBTyxLQUFLLFlBQVkvQixRQUFRK0IsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPL0IsUUFBUStCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktsQyxPQUFPQyxjQUFjLENBQUNDLFFBQVErQixPQUFPLEVBQUUsY0FBYztRQUFFOUIsT0FBTztJQUFLO0lBQ25FSCxPQUFPbUMsTUFBTSxDQUFDakMsUUFBUStCLE9BQU8sRUFBRS9CO0lBQy9Ca0MsT0FBT2xDLE9BQU8sR0FBR0EsUUFBUStCLE9BQU87QUFDbEMsRUFFQSxpREFBaUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9oZWxwZXJzL3BhcnNlLWNvbXBvbmVudC1zdGFjay5qcz8wY2YwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VDb21wb25lbnRTdGFja1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcGFyc2VDb21wb25lbnRTdGFjaztcbiAgICB9XG59KTtcbnZhciBMb2NhdGlvblR5cGU7XG4oZnVuY3Rpb24oTG9jYXRpb25UeXBlKSB7XG4gICAgTG9jYXRpb25UeXBlW1wiRklMRVwiXSA9IFwiZmlsZVwiO1xuICAgIExvY2F0aW9uVHlwZVtcIldFQlBBQ0tfSU5URVJOQUxcIl0gPSBcIndlYnBhY2staW50ZXJuYWxcIjtcbiAgICBMb2NhdGlvblR5cGVbXCJIVFRQXCJdID0gXCJodHRwXCI7XG4gICAgTG9jYXRpb25UeXBlW1wiUFJPVE9DT0xfUkVMQVRJVkVcIl0gPSBcInByb3RvY29sLXJlbGF0aXZlXCI7XG4gICAgTG9jYXRpb25UeXBlW1wiVU5LTk9XTlwiXSA9IFwidW5rbm93blwiO1xufSkoTG9jYXRpb25UeXBlIHx8IChMb2NhdGlvblR5cGUgPSB7fSkpO1xuLyoqXG4gKiBHZXQgdGhlIHR5cGUgb2YgZnJhbWUgbGluZSBiYXNlZCBvbiB0aGUgbG9jYXRpb25cbiAqLyBmdW5jdGlvbiBnZXRMb2NhdGlvblR5cGUobG9jYXRpb24pIHtcbiAgICBpZiAobG9jYXRpb24uc3RhcnRzV2l0aChcImZpbGU6Ly9cIikpIHtcbiAgICAgICAgcmV0dXJuIFwiZmlsZVwiO1xuICAgIH1cbiAgICBpZiAobG9jYXRpb24uc3RhcnRzV2l0aChcIndlYnBhY2staW50ZXJuYWw6Ly9cIikpIHtcbiAgICAgICAgcmV0dXJuIFwid2VicGFjay1pbnRlcm5hbFwiO1xuICAgIH1cbiAgICBpZiAobG9jYXRpb24uc3RhcnRzV2l0aChcImh0dHA6Ly9cIikgfHwgbG9jYXRpb24uc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpKSB7XG4gICAgICAgIHJldHVybiBcImh0dHBcIjtcbiAgICB9XG4gICAgaWYgKGxvY2F0aW9uLnN0YXJ0c1dpdGgoXCIvL1wiKSkge1xuICAgICAgICByZXR1cm4gXCJwcm90b2NvbC1yZWxhdGl2ZVwiO1xuICAgIH1cbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG59XG5mdW5jdGlvbiBwYXJzZVN0YWNrRnJhbWVMb2NhdGlvbihsb2NhdGlvbikge1xuICAgIGNvbnN0IGxvY2F0aW9uVHlwZSA9IGdldExvY2F0aW9uVHlwZShsb2NhdGlvbik7XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IGxvY2F0aW9uID09IG51bGwgPyB2b2lkIDAgOiBsb2NhdGlvbi5yZXBsYWNlKC9eKHdlYnBhY2staW50ZXJuYWw6XFwvXFwvXFwvfGZpbGU6XFwvXFwvKShcXCguKlxcKVxcLyk/LywgXCJcIik7XG4gICAgdmFyIF9tb2R1bGVQYXRoX21hdGNoO1xuICAgIGNvbnN0IFssIGZpbGUsIGxpbmVOdW1iZXIsIGNvbHVtbl0gPSAoX21vZHVsZVBhdGhfbWF0Y2ggPSBtb2R1bGVQYXRoID09IG51bGwgPyB2b2lkIDAgOiBtb2R1bGVQYXRoLm1hdGNoKC9eKC4rKTooXFxkKyk6KFxcZCspLykpICE9IG51bGwgPyBfbW9kdWxlUGF0aF9tYXRjaCA6IFtdO1xuICAgIHN3aXRjaChsb2NhdGlvblR5cGUpe1xuICAgICAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgICBjYXNlIFwid2VicGFjay1pbnRlcm5hbFwiOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjYW5PcGVuSW5FZGl0b3I6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyID8gTnVtYmVyKGxpbmVOdW1iZXIpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uID8gTnVtYmVyKGNvbHVtbikgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH07XG4gICAgICAgIC8vIFdoZW4gdGhlIGxvY2F0aW9uIGlzIGEgVVJMIHdlIG9ubHkgc2hvdyB0aGUgZmlsZVxuICAgICAgICAvLyBUT0RPOiBSZXNvbHZlIGh0dHAocykgVVJMcyB0aHJvdWdoIHNvdXJjZW1hcHNcbiAgICAgICAgY2FzZSBcImh0dHBcIjpcbiAgICAgICAgY2FzZSBcInByb3RvY29sLXJlbGF0aXZlXCI6XG4gICAgICAgIGNhc2UgXCJ1bmtub3duXCI6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuT3BlbkluRWRpdG9yOiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gcGFyc2VDb21wb25lbnRTdGFjayhjb21wb25lbnRTdGFjaykge1xuICAgIGNvbnN0IGNvbXBvbmVudFN0YWNrRnJhbWVzID0gW107XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGNvbXBvbmVudFN0YWNrLnRyaW0oKS5zcGxpdChcIlxcblwiKSl7XG4gICAgICAgIC8vIEdldCBjb21wb25lbnQgYW5kIGZpbGUgZnJvbSB0aGUgY29tcG9uZW50IHN0YWNrIGxpbmVcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAvYXQgKFteIF0rKSggXFwoKC4qKVxcKSk/Ly5leGVjKGxpbmUpO1xuICAgICAgICBpZiAobWF0Y2ggPT0gbnVsbCA/IHZvaWQgMCA6IG1hdGNoWzFdKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gbWF0Y2hbM107XG4gICAgICAgICAgICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50U3RhY2tGcmFtZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNhbk9wZW5JbkVkaXRvcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RvcCBwYXJzaW5nIHRoZSBjb21wb25lbnQgc3RhY2sgaWYgd2UgcmVhY2ggYSBOZXh0LmpzIGNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKGxvY2F0aW9uID09IG51bGwgPyB2b2lkIDAgOiBsb2NhdGlvbi5pbmNsdWRlcyhcIm5leHQvZGlzdFwiKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZnJhbWVMb2NhdGlvbiA9IHBhcnNlU3RhY2tGcmFtZUxvY2F0aW9uKGxvY2F0aW9uKTtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrRnJhbWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAuLi5mcmFtZUxvY2F0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50U3RhY2tGcmFtZXM7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnNlLWNvbXBvbmVudC1zdGFjay5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicGFyc2VDb21wb25lbnRTdGFjayIsIkxvY2F0aW9uVHlwZSIsImdldExvY2F0aW9uVHlwZSIsImxvY2F0aW9uIiwic3RhcnRzV2l0aCIsInBhcnNlU3RhY2tGcmFtZUxvY2F0aW9uIiwibG9jYXRpb25UeXBlIiwibW9kdWxlUGF0aCIsInJlcGxhY2UiLCJfbW9kdWxlUGF0aF9tYXRjaCIsImZpbGUiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwibWF0Y2giLCJjYW5PcGVuSW5FZGl0b3IiLCJOdW1iZXIiLCJ1bmRlZmluZWQiLCJjb21wb25lbnRTdGFjayIsImNvbXBvbmVudFN0YWNrRnJhbWVzIiwibGluZSIsInRyaW0iLCJzcGxpdCIsImV4ZWMiLCJjb21wb25lbnQiLCJwdXNoIiwiaW5jbHVkZXMiLCJmcmFtZUxvY2F0aW9uIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js": +/*!***************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js ***! + \***************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseStack\", ({\n enumerable: true,\n get: function() {\n return parseStack;\n }\n}));\nconst _stacktraceparser = __webpack_require__(/*! next/dist/compiled/stacktrace-parser */ \"(ssr)/./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\");\nconst regexNextStatic = /\\/_next(\\/static\\/.+)/;\nfunction parseStack(stack) {\n const frames = (0, _stacktraceparser.parse)(stack);\n return frames.map((frame)=>{\n try {\n const url = new URL(frame.file);\n const res = regexNextStatic.exec(url.pathname);\n if (res) {\n var _process_env___NEXT_DIST_DIR_replace, _process_env___NEXT_DIST_DIR;\n const distDir = (_process_env___NEXT_DIST_DIR = process.env.__NEXT_DIST_DIR) == null ? void 0 : (_process_env___NEXT_DIST_DIR_replace = _process_env___NEXT_DIST_DIR.replace(/\\\\/g, \"/\")) == null ? void 0 : _process_env___NEXT_DIST_DIR_replace.replace(/\\/$/, \"\");\n if (distDir) {\n frame.file = \"file://\" + distDir.concat(res.pop());\n }\n }\n } catch (e) {}\n return frame;\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=parseStack.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvcGFyc2VTdGFjay5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsOENBQTZDO0lBQ3pDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsb0JBQW9CQyxtQkFBT0EsQ0FBQyxpSUFBc0M7QUFDeEUsTUFBTUMsa0JBQWtCO0FBQ3hCLFNBQVNILFdBQVdJLEtBQUs7SUFDckIsTUFBTUMsU0FBUyxDQUFDLEdBQUdKLGtCQUFrQkssS0FBSyxFQUFFRjtJQUM1QyxPQUFPQyxPQUFPRSxHQUFHLENBQUMsQ0FBQ0M7UUFDZixJQUFJO1lBQ0EsTUFBTUMsTUFBTSxJQUFJQyxJQUFJRixNQUFNRyxJQUFJO1lBQzlCLE1BQU1DLE1BQU1ULGdCQUFnQlUsSUFBSSxDQUFDSixJQUFJSyxRQUFRO1lBQzdDLElBQUlGLEtBQUs7Z0JBQ0wsSUFBSUcsc0NBQXNDQztnQkFDMUMsTUFBTUMsVUFBVSxDQUFDRCwrQkFBK0JFLFFBQVFDLEdBQUcsQ0FBQ0MsZUFBZSxLQUFLLE9BQU8sS0FBSyxJQUFJLENBQUNMLHVDQUF1Q0MsNkJBQTZCSyxPQUFPLENBQUMsT0FBTyxJQUFHLEtBQU0sT0FBTyxLQUFLLElBQUlOLHFDQUFxQ00sT0FBTyxDQUFDLE9BQU87Z0JBQ2pRLElBQUlKLFNBQVM7b0JBQ1RULE1BQU1HLElBQUksR0FBRyxZQUFZTSxRQUFRSyxNQUFNLENBQUNWLElBQUlXLEdBQUc7Z0JBQ25EO1lBQ0o7UUFDSixFQUFFLE9BQU9DLEdBQUcsQ0FBQztRQUNiLE9BQU9oQjtJQUNYO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT1osUUFBUTZCLE9BQU8sS0FBSyxjQUFlLE9BQU83QixRQUFRNkIsT0FBTyxLQUFLLFlBQVk3QixRQUFRNkIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPN0IsUUFBUTZCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktoQyxPQUFPQyxjQUFjLENBQUNDLFFBQVE2QixPQUFPLEVBQUUsY0FBYztRQUFFNUIsT0FBTztJQUFLO0lBQ25FSCxPQUFPaUMsTUFBTSxDQUFDL0IsUUFBUTZCLE9BQU8sRUFBRTdCO0lBQy9CZ0MsT0FBT2hDLE9BQU8sR0FBR0EsUUFBUTZCLE9BQU87QUFDbEMsRUFFQSxzQ0FBc0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9oZWxwZXJzL3BhcnNlU3RhY2suanM/MzU0MiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlU3RhY2tcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlU3RhY2s7XG4gICAgfVxufSk7XG5jb25zdCBfc3RhY2t0cmFjZXBhcnNlciA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvc3RhY2t0cmFjZS1wYXJzZXJcIik7XG5jb25zdCByZWdleE5leHRTdGF0aWMgPSAvXFwvX25leHQoXFwvc3RhdGljXFwvLispLztcbmZ1bmN0aW9uIHBhcnNlU3RhY2soc3RhY2spIHtcbiAgICBjb25zdCBmcmFtZXMgPSAoMCwgX3N0YWNrdHJhY2VwYXJzZXIucGFyc2UpKHN0YWNrKTtcbiAgICByZXR1cm4gZnJhbWVzLm1hcCgoZnJhbWUpPT57XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGZyYW1lLmZpbGUpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gcmVnZXhOZXh0U3RhdGljLmV4ZWModXJsLnBhdGhuYW1lKTtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgX3Byb2Nlc3NfZW52X19fTkVYVF9ESVNUX0RJUl9yZXBsYWNlLCBfcHJvY2Vzc19lbnZfX19ORVhUX0RJU1RfRElSO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3REaXIgPSAoX3Byb2Nlc3NfZW52X19fTkVYVF9ESVNUX0RJUiA9IHByb2Nlc3MuZW52Ll9fTkVYVF9ESVNUX0RJUikgPT0gbnVsbCA/IHZvaWQgMCA6IChfcHJvY2Vzc19lbnZfX19ORVhUX0RJU1RfRElSX3JlcGxhY2UgPSBfcHJvY2Vzc19lbnZfX19ORVhUX0RJU1RfRElSLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb2Nlc3NfZW52X19fTkVYVF9ESVNUX0RJUl9yZXBsYWNlLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlzdERpcikge1xuICAgICAgICAgICAgICAgICAgICBmcmFtZS5maWxlID0gXCJmaWxlOi8vXCIgKyBkaXN0RGlyLmNvbmNhdChyZXMucG9wKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJzZVN0YWNrLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJwYXJzZVN0YWNrIiwiX3N0YWNrdHJhY2VwYXJzZXIiLCJyZXF1aXJlIiwicmVnZXhOZXh0U3RhdGljIiwic3RhY2siLCJmcmFtZXMiLCJwYXJzZSIsIm1hcCIsImZyYW1lIiwidXJsIiwiVVJMIiwiZmlsZSIsInJlcyIsImV4ZWMiLCJwYXRobmFtZSIsIl9wcm9jZXNzX2Vudl9fX05FWFRfRElTVF9ESVJfcmVwbGFjZSIsIl9wcm9jZXNzX2Vudl9fX05FWFRfRElTVF9ESVIiLCJkaXN0RGlyIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9ESVNUX0RJUiIsInJlcGxhY2UiLCJjb25jYXQiLCJwb3AiLCJlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js": +/*!****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js ***! + \****************************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getOriginalStackFrame: function() {\n return getOriginalStackFrame;\n },\n getOriginalStackFrames: function() {\n return getOriginalStackFrames;\n },\n getFrameSource: function() {\n return getFrameSource;\n }\n});\nfunction getOriginalStackFrame(source, type, errorMessage) {\n var _source_file, _source_file1;\n async function _getOriginalStackFrame() {\n var /* collapsed */ _source_file, _body_originalStackFrame_file, _body_originalStackFrame;\n const params = new URLSearchParams();\n params.append(\"isServer\", String(type === \"server\"));\n params.append(\"isEdgeServer\", String(type === \"edge-server\"));\n params.append(\"isAppDirectory\", \"true\");\n params.append(\"errorMessage\", errorMessage);\n for(const key in source){\n var _source_key;\n params.append(key, ((_source_key = source[key]) != null ? _source_key : \"\").toString());\n }\n const controller = new AbortController();\n const tm = setTimeout(()=>controller.abort(), 3000);\n const res = await self.fetch(( false || \"\") + \"/__nextjs_original-stack-frame?\" + params.toString(), {\n signal: controller.signal\n }).finally(()=>{\n clearTimeout(tm);\n });\n if (!res.ok || res.status === 204) {\n return Promise.reject(new Error(await res.text()));\n }\n const body = await res.json();\n var _ref;\n return {\n error: false,\n reason: null,\n external: false,\n expanded: !Boolean((_ref = ((_source_file = source.file) == null ? void 0 : _source_file.includes(\"node_modules\")) || ((_body_originalStackFrame = body.originalStackFrame) == null ? void 0 : (_body_originalStackFrame_file = _body_originalStackFrame.file) == null ? void 0 : _body_originalStackFrame_file.includes(\"node_modules\"))) != null ? _ref : true),\n sourceStackFrame: source,\n originalStackFrame: body.originalStackFrame,\n originalCodeFrame: body.originalCodeFrame || null,\n sourcePackage: body.sourcePackage\n };\n }\n if (source.file === \"<anonymous>\" || ((_source_file = source.file) == null ? void 0 : _source_file.match(/^node:/)) || ((_source_file1 = source.file) == null ? void 0 : _source_file1.match(/https?:\\/\\//))) {\n return Promise.resolve({\n error: false,\n reason: null,\n external: true,\n expanded: false,\n sourceStackFrame: source,\n originalStackFrame: null,\n originalCodeFrame: null\n });\n }\n var _err_message, _ref;\n return _getOriginalStackFrame().catch((err)=>({\n error: true,\n reason: (_ref = (_err_message = err == null ? void 0 : err.message) != null ? _err_message : err == null ? void 0 : err.toString()) != null ? _ref : \"Unknown Error\",\n external: false,\n expanded: false,\n sourceStackFrame: source,\n originalStackFrame: null,\n originalCodeFrame: null\n }));\n}\nfunction getOriginalStackFrames(frames, type, errorMessage) {\n return Promise.all(frames.map((frame)=>getOriginalStackFrame(frame, type, errorMessage)));\n}\nfunction formatFrameSourceFile(file) {\n return file.replace(/^webpack-internal:(\\/)+(\\.)?/, \"\").replace(/^webpack:(\\/)+(\\.)?/, \"\");\n}\nfunction getFrameSource(frame) {\n let str = \"\";\n try {\n var _globalThis_location;\n const u = new URL(frame.file);\n // Strip the origin for same-origin scripts.\n if (typeof globalThis !== \"undefined\" && ((_globalThis_location = globalThis.location) == null ? void 0 : _globalThis_location.origin) !== u.origin) {\n // URLs can be valid without an `origin`, so long as they have a\n // `protocol`. However, `origin` is preferred.\n if (u.origin === \"null\") {\n str += u.protocol;\n } else {\n str += u.origin;\n }\n }\n // Strip query string information as it's typically too verbose to be\n // meaningful.\n str += u.pathname;\n str += \" \";\n str = formatFrameSourceFile(str);\n } catch (e) {\n str += formatFrameSourceFile(frame.file || \"(unknown)\") + \" \";\n }\n if (frame.lineNumber != null) {\n if (frame.column != null) {\n str += \"(\" + frame.lineNumber + \":\" + frame.column + \") \";\n } else {\n str += \"(\" + frame.lineNumber + \") \";\n }\n }\n return str.slice(0, -1);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=stack-frame.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvc3RhY2stZnJhbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FJTjtBQUNBLFNBQVNJLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlWLE9BQU9DLGNBQWMsQ0FBQ1EsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTixTQUFTO0lBQ2JHLHVCQUF1QjtRQUNuQixPQUFPQTtJQUNYO0lBQ0FDLHdCQUF3QjtRQUNwQixPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLFNBQVNGLHNCQUFzQlMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFlBQVk7SUFDckQsSUFBSUMsY0FBY0M7SUFDbEIsZUFBZUM7UUFDWCxJQUFJLGFBQWEsR0FBR0YsY0FBY0csK0JBQStCQztRQUNqRSxNQUFNQyxTQUFTLElBQUlDO1FBQ25CRCxPQUFPRSxNQUFNLENBQUMsWUFBWUMsT0FBT1YsU0FBUztRQUMxQ08sT0FBT0UsTUFBTSxDQUFDLGdCQUFnQkMsT0FBT1YsU0FBUztRQUM5Q08sT0FBT0UsTUFBTSxDQUFDLGtCQUFrQjtRQUNoQ0YsT0FBT0UsTUFBTSxDQUFDLGdCQUFnQlI7UUFDOUIsSUFBSSxNQUFNVSxPQUFPWixPQUFPO1lBQ3BCLElBQUlhO1lBQ0pMLE9BQU9FLE1BQU0sQ0FBQ0UsS0FBSyxDQUFDLENBQUNDLGNBQWNiLE1BQU0sQ0FBQ1ksSUFBSSxLQUFLLE9BQU9DLGNBQWMsRUFBQyxFQUFHQyxRQUFRO1FBQ3hGO1FBQ0EsTUFBTUMsYUFBYSxJQUFJQztRQUN2QixNQUFNQyxLQUFLQyxXQUFXLElBQUlILFdBQVdJLEtBQUssSUFBSTtRQUM5QyxNQUFNQyxNQUFNLE1BQU1DLEtBQUtDLEtBQUssQ0FBQyxDQUFDQyxNQUFrQyxJQUFJLEVBQUMsSUFBSyxvQ0FBb0NmLE9BQU9NLFFBQVEsSUFBSTtZQUM3SFksUUFBUVgsV0FBV1csTUFBTTtRQUM3QixHQUFHQyxPQUFPLENBQUM7WUFDUEMsYUFBYVg7UUFDakI7UUFDQSxJQUFJLENBQUNHLElBQUlTLEVBQUUsSUFBSVQsSUFBSVUsTUFBTSxLQUFLLEtBQUs7WUFDL0IsT0FBT0MsUUFBUUMsTUFBTSxDQUFDLElBQUlDLE1BQU0sTUFBTWIsSUFBSWMsSUFBSTtRQUNsRDtRQUNBLE1BQU1DLE9BQU8sTUFBTWYsSUFBSWdCLElBQUk7UUFDM0IsSUFBSUM7UUFDSixPQUFPO1lBQ0hDLE9BQU87WUFDUEMsUUFBUTtZQUNSQyxVQUFVO1lBQ1ZDLFVBQVUsQ0FBQ0MsUUFBUSxDQUFDTCxPQUFPLENBQUMsQ0FBQ2xDLGVBQWVILE9BQU8yQyxJQUFJLEtBQUssT0FBTyxLQUFLLElBQUl4QyxhQUFheUMsUUFBUSxDQUFDLGVBQWMsS0FBTyxFQUFDckMsMkJBQTJCNEIsS0FBS1Usa0JBQWtCLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQ3ZDLGdDQUFnQ0MseUJBQXlCb0MsSUFBSSxLQUFLLE9BQU8sS0FBSyxJQUFJckMsOEJBQThCc0MsUUFBUSxDQUFDLGVBQWMsQ0FBQyxLQUFNLE9BQU9QLE9BQU87WUFDNVZTLGtCQUFrQjlDO1lBQ2xCNkMsb0JBQW9CVixLQUFLVSxrQkFBa0I7WUFDM0NFLG1CQUFtQlosS0FBS1ksaUJBQWlCLElBQUk7WUFDN0NDLGVBQWViLEtBQUthLGFBQWE7UUFDckM7SUFDSjtJQUNBLElBQUloRCxPQUFPMkMsSUFBSSxLQUFLLGlCQUFrQixFQUFDeEMsZUFBZUgsT0FBTzJDLElBQUksS0FBSyxPQUFPLEtBQUssSUFBSXhDLGFBQWE4QyxLQUFLLENBQUMsU0FBUSxLQUFPLEVBQUM3QyxnQkFBZ0JKLE9BQU8yQyxJQUFJLEtBQUssT0FBTyxLQUFLLElBQUl2QyxjQUFjNkMsS0FBSyxDQUFDLGNBQWEsR0FBSTtRQUMxTSxPQUFPbEIsUUFBUW1CLE9BQU8sQ0FBQztZQUNuQlosT0FBTztZQUNQQyxRQUFRO1lBQ1JDLFVBQVU7WUFDVkMsVUFBVTtZQUNWSyxrQkFBa0I5QztZQUNsQjZDLG9CQUFvQjtZQUNwQkUsbUJBQW1CO1FBQ3ZCO0lBQ0o7SUFDQSxJQUFJSSxjQUFjZDtJQUNsQixPQUFPaEMseUJBQXlCK0MsS0FBSyxDQUFDLENBQUNDLE1BQU87WUFDdENmLE9BQU87WUFDUEMsUUFBUSxDQUFDRixPQUFPLENBQUNjLGVBQWVFLE9BQU8sT0FBTyxLQUFLLElBQUlBLElBQUlDLE9BQU8sS0FBSyxPQUFPSCxlQUFlRSxPQUFPLE9BQU8sS0FBSyxJQUFJQSxJQUFJdkMsUUFBUSxFQUFDLEtBQU0sT0FBT3VCLE9BQU87WUFDckpHLFVBQVU7WUFDVkMsVUFBVTtZQUNWSyxrQkFBa0I5QztZQUNsQjZDLG9CQUFvQjtZQUNwQkUsbUJBQW1CO1FBQ3ZCO0FBQ1I7QUFDQSxTQUFTdkQsdUJBQXVCK0QsTUFBTSxFQUFFdEQsSUFBSSxFQUFFQyxZQUFZO0lBQ3RELE9BQU82QixRQUFRbkMsR0FBRyxDQUFDMkQsT0FBT0MsR0FBRyxDQUFDLENBQUNDLFFBQVFsRSxzQkFBc0JrRSxPQUFPeEQsTUFBTUM7QUFDOUU7QUFDQSxTQUFTd0Qsc0JBQXNCZixJQUFJO0lBQy9CLE9BQU9BLEtBQUtnQixPQUFPLENBQUMsZ0NBQWdDLElBQUlBLE9BQU8sQ0FBQyx1QkFBdUI7QUFDM0Y7QUFDQSxTQUFTbEUsZUFBZWdFLEtBQUs7SUFDekIsSUFBSUcsTUFBTTtJQUNWLElBQUk7UUFDQSxJQUFJQztRQUNKLE1BQU1DLElBQUksSUFBSUMsSUFBSU4sTUFBTWQsSUFBSTtRQUM1Qiw0Q0FBNEM7UUFDNUMsSUFBSSxPQUFPcUIsZUFBZSxlQUFlLENBQUMsQ0FBQ0gsdUJBQXVCRyxXQUFXQyxRQUFRLEtBQUssT0FBTyxLQUFLLElBQUlKLHFCQUFxQkssTUFBTSxNQUFNSixFQUFFSSxNQUFNLEVBQUU7WUFDakosZ0VBQWdFO1lBQ2hFLDhDQUE4QztZQUM5QyxJQUFJSixFQUFFSSxNQUFNLEtBQUssUUFBUTtnQkFDckJOLE9BQU9FLEVBQUVLLFFBQVE7WUFDckIsT0FBTztnQkFDSFAsT0FBT0UsRUFBRUksTUFBTTtZQUNuQjtRQUNKO1FBQ0EscUVBQXFFO1FBQ3JFLGNBQWM7UUFDZE4sT0FBT0UsRUFBRU0sUUFBUTtRQUNqQlIsT0FBTztRQUNQQSxNQUFNRixzQkFBc0JFO0lBQ2hDLEVBQUUsT0FBT1MsR0FBRztRQUNSVCxPQUFPRixzQkFBc0JELE1BQU1kLElBQUksSUFBSSxlQUFlO0lBQzlEO0lBQ0EsSUFBSWMsTUFBTWEsVUFBVSxJQUFJLE1BQU07UUFDMUIsSUFBSWIsTUFBTWMsTUFBTSxJQUFJLE1BQU07WUFDdEJYLE9BQU8sTUFBTUgsTUFBTWEsVUFBVSxHQUFHLE1BQU1iLE1BQU1jLE1BQU0sR0FBRztRQUN6RCxPQUFPO1lBQ0hYLE9BQU8sTUFBTUgsTUFBTWEsVUFBVSxHQUFHO1FBQ3BDO0lBQ0o7SUFDQSxPQUFPVixJQUFJWSxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3pCO0FBRUEsSUFBSSxDQUFDLE9BQU9wRixRQUFRcUYsT0FBTyxLQUFLLGNBQWUsT0FBT3JGLFFBQVFxRixPQUFPLEtBQUssWUFBWXJGLFFBQVFxRixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9yRixRQUFRcUYsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3hGLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXFGLE9BQU8sRUFBRSxjQUFjO1FBQUVwRixPQUFPO0lBQUs7SUFDbkVILE9BQU95RixNQUFNLENBQUN2RixRQUFRcUYsT0FBTyxFQUFFckY7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUXFGLE9BQU87QUFDbEMsRUFFQSx1Q0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9oZWxwZXJzL3N0YWNrLWZyYW1lLmpzPzM5YTQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBnZXRPcmlnaW5hbFN0YWNrRnJhbWU6IG51bGwsXG4gICAgZ2V0T3JpZ2luYWxTdGFja0ZyYW1lczogbnVsbCxcbiAgICBnZXRGcmFtZVNvdXJjZTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBnZXRPcmlnaW5hbFN0YWNrRnJhbWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0T3JpZ2luYWxTdGFja0ZyYW1lO1xuICAgIH0sXG4gICAgZ2V0T3JpZ2luYWxTdGFja0ZyYW1lczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRPcmlnaW5hbFN0YWNrRnJhbWVzO1xuICAgIH0sXG4gICAgZ2V0RnJhbWVTb3VyY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0RnJhbWVTb3VyY2U7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBnZXRPcmlnaW5hbFN0YWNrRnJhbWUoc291cmNlLCB0eXBlLCBlcnJvck1lc3NhZ2UpIHtcbiAgICB2YXIgX3NvdXJjZV9maWxlLCBfc291cmNlX2ZpbGUxO1xuICAgIGFzeW5jIGZ1bmN0aW9uIF9nZXRPcmlnaW5hbFN0YWNrRnJhbWUoKSB7XG4gICAgICAgIHZhciAvKiBjb2xsYXBzZWQgKi8gX3NvdXJjZV9maWxlLCBfYm9keV9vcmlnaW5hbFN0YWNrRnJhbWVfZmlsZSwgX2JvZHlfb3JpZ2luYWxTdGFja0ZyYW1lO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICAgIHBhcmFtcy5hcHBlbmQoXCJpc1NlcnZlclwiLCBTdHJpbmcodHlwZSA9PT0gXCJzZXJ2ZXJcIikpO1xuICAgICAgICBwYXJhbXMuYXBwZW5kKFwiaXNFZGdlU2VydmVyXCIsIFN0cmluZyh0eXBlID09PSBcImVkZ2Utc2VydmVyXCIpKTtcbiAgICAgICAgcGFyYW1zLmFwcGVuZChcImlzQXBwRGlyZWN0b3J5XCIsIFwidHJ1ZVwiKTtcbiAgICAgICAgcGFyYW1zLmFwcGVuZChcImVycm9yTWVzc2FnZVwiLCBlcnJvck1lc3NhZ2UpO1xuICAgICAgICBmb3IoY29uc3Qga2V5IGluIHNvdXJjZSl7XG4gICAgICAgICAgICB2YXIgX3NvdXJjZV9rZXk7XG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKGtleSwgKChfc291cmNlX2tleSA9IHNvdXJjZVtrZXldKSAhPSBudWxsID8gX3NvdXJjZV9rZXkgOiBcIlwiKS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICBjb25zdCB0bSA9IHNldFRpbWVvdXQoKCk9PmNvbnRyb2xsZXIuYWJvcnQoKSwgMzAwMCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlbGYuZmV0Y2goKHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEggfHwgXCJcIikgKyBcIi9fX25leHRqc19vcmlnaW5hbC1zdGFjay1mcmFtZT9cIiArIHBhcmFtcy50b1N0cmluZygpLCB7XG4gICAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsXG4gICAgICAgIH0pLmZpbmFsbHkoKCk9PntcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0bSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlcy5vayB8fCByZXMuc3RhdHVzID09PSAyMDQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYXdhaXQgcmVzLnRleHQoKSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICB2YXIgX3JlZjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgICAgICAgIHJlYXNvbjogbnVsbCxcbiAgICAgICAgICAgIGV4dGVybmFsOiBmYWxzZSxcbiAgICAgICAgICAgIGV4cGFuZGVkOiAhQm9vbGVhbigoX3JlZiA9ICgoX3NvdXJjZV9maWxlID0gc291cmNlLmZpbGUpID09IG51bGwgPyB2b2lkIDAgOiBfc291cmNlX2ZpbGUuaW5jbHVkZXMoXCJub2RlX21vZHVsZXNcIikpIHx8ICgoX2JvZHlfb3JpZ2luYWxTdGFja0ZyYW1lID0gYm9keS5vcmlnaW5hbFN0YWNrRnJhbWUpID09IG51bGwgPyB2b2lkIDAgOiAoX2JvZHlfb3JpZ2luYWxTdGFja0ZyYW1lX2ZpbGUgPSBfYm9keV9vcmlnaW5hbFN0YWNrRnJhbWUuZmlsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9ib2R5X29yaWdpbmFsU3RhY2tGcmFtZV9maWxlLmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzXCIpKSkgIT0gbnVsbCA/IF9yZWYgOiB0cnVlKSxcbiAgICAgICAgICAgIHNvdXJjZVN0YWNrRnJhbWU6IHNvdXJjZSxcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhY2tGcmFtZTogYm9keS5vcmlnaW5hbFN0YWNrRnJhbWUsXG4gICAgICAgICAgICBvcmlnaW5hbENvZGVGcmFtZTogYm9keS5vcmlnaW5hbENvZGVGcmFtZSB8fCBudWxsLFxuICAgICAgICAgICAgc291cmNlUGFja2FnZTogYm9keS5zb3VyY2VQYWNrYWdlXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChzb3VyY2UuZmlsZSA9PT0gXCI8YW5vbnltb3VzPlwiIHx8ICgoX3NvdXJjZV9maWxlID0gc291cmNlLmZpbGUpID09IG51bGwgPyB2b2lkIDAgOiBfc291cmNlX2ZpbGUubWF0Y2goL15ub2RlOi8pKSB8fCAoKF9zb3VyY2VfZmlsZTEgPSBzb3VyY2UuZmlsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9zb3VyY2VfZmlsZTEubWF0Y2goL2h0dHBzPzpcXC9cXC8vKSkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgICAgICByZWFzb246IG51bGwsXG4gICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICAgIGV4cGFuZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHNvdXJjZVN0YWNrRnJhbWU6IHNvdXJjZSxcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhY2tGcmFtZTogbnVsbCxcbiAgICAgICAgICAgIG9yaWdpbmFsQ29kZUZyYW1lOiBudWxsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgX2Vycl9tZXNzYWdlLCBfcmVmO1xuICAgIHJldHVybiBfZ2V0T3JpZ2luYWxTdGFja0ZyYW1lKCkuY2F0Y2goKGVycik9Pih7XG4gICAgICAgICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgIHJlYXNvbjogKF9yZWYgPSAoX2Vycl9tZXNzYWdlID0gZXJyID09IG51bGwgPyB2b2lkIDAgOiBlcnIubWVzc2FnZSkgIT0gbnVsbCA/IF9lcnJfbWVzc2FnZSA6IGVyciA9PSBudWxsID8gdm9pZCAwIDogZXJyLnRvU3RyaW5nKCkpICE9IG51bGwgPyBfcmVmIDogXCJVbmtub3duIEVycm9yXCIsXG4gICAgICAgICAgICBleHRlcm5hbDogZmFsc2UsXG4gICAgICAgICAgICBleHBhbmRlZDogZmFsc2UsXG4gICAgICAgICAgICBzb3VyY2VTdGFja0ZyYW1lOiBzb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbFN0YWNrRnJhbWU6IG51bGwsXG4gICAgICAgICAgICBvcmlnaW5hbENvZGVGcmFtZTogbnVsbFxuICAgICAgICB9KSk7XG59XG5mdW5jdGlvbiBnZXRPcmlnaW5hbFN0YWNrRnJhbWVzKGZyYW1lcywgdHlwZSwgZXJyb3JNZXNzYWdlKSB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGZyYW1lcy5tYXAoKGZyYW1lKT0+Z2V0T3JpZ2luYWxTdGFja0ZyYW1lKGZyYW1lLCB0eXBlLCBlcnJvck1lc3NhZ2UpKSk7XG59XG5mdW5jdGlvbiBmb3JtYXRGcmFtZVNvdXJjZUZpbGUoZmlsZSkge1xuICAgIHJldHVybiBmaWxlLnJlcGxhY2UoL153ZWJwYWNrLWludGVybmFsOihcXC8pKyhcXC4pPy8sIFwiXCIpLnJlcGxhY2UoL153ZWJwYWNrOihcXC8pKyhcXC4pPy8sIFwiXCIpO1xufVxuZnVuY3Rpb24gZ2V0RnJhbWVTb3VyY2UoZnJhbWUpIHtcbiAgICBsZXQgc3RyID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgICB2YXIgX2dsb2JhbFRoaXNfbG9jYXRpb247XG4gICAgICAgIGNvbnN0IHUgPSBuZXcgVVJMKGZyYW1lLmZpbGUpO1xuICAgICAgICAvLyBTdHJpcCB0aGUgb3JpZ2luIGZvciBzYW1lLW9yaWdpbiBzY3JpcHRzLlxuICAgICAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIgJiYgKChfZ2xvYmFsVGhpc19sb2NhdGlvbiA9IGdsb2JhbFRoaXMubG9jYXRpb24pID09IG51bGwgPyB2b2lkIDAgOiBfZ2xvYmFsVGhpc19sb2NhdGlvbi5vcmlnaW4pICE9PSB1Lm9yaWdpbikge1xuICAgICAgICAgICAgLy8gVVJMcyBjYW4gYmUgdmFsaWQgd2l0aG91dCBhbiBgb3JpZ2luYCwgc28gbG9uZyBhcyB0aGV5IGhhdmUgYVxuICAgICAgICAgICAgLy8gYHByb3RvY29sYC4gSG93ZXZlciwgYG9yaWdpbmAgaXMgcHJlZmVycmVkLlxuICAgICAgICAgICAgaWYgKHUub3JpZ2luID09PSBcIm51bGxcIikge1xuICAgICAgICAgICAgICAgIHN0ciArPSB1LnByb3RvY29sO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gdS5vcmlnaW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RyaXAgcXVlcnkgc3RyaW5nIGluZm9ybWF0aW9uIGFzIGl0J3MgdHlwaWNhbGx5IHRvbyB2ZXJib3NlIHRvIGJlXG4gICAgICAgIC8vIG1lYW5pbmdmdWwuXG4gICAgICAgIHN0ciArPSB1LnBhdGhuYW1lO1xuICAgICAgICBzdHIgKz0gXCIgXCI7XG4gICAgICAgIHN0ciA9IGZvcm1hdEZyYW1lU291cmNlRmlsZShzdHIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc3RyICs9IGZvcm1hdEZyYW1lU291cmNlRmlsZShmcmFtZS5maWxlIHx8IFwiKHVua25vd24pXCIpICsgXCIgXCI7XG4gICAgfVxuICAgIGlmIChmcmFtZS5saW5lTnVtYmVyICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGZyYW1lLmNvbHVtbiAhPSBudWxsKSB7XG4gICAgICAgICAgICBzdHIgKz0gXCIoXCIgKyBmcmFtZS5saW5lTnVtYmVyICsgXCI6XCIgKyBmcmFtZS5jb2x1bW4gKyBcIikgXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHIgKz0gXCIoXCIgKyBmcmFtZS5saW5lTnVtYmVyICsgXCIpIFwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHIuc2xpY2UoMCwgLTEpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGFjay1mcmFtZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJnZXRPcmlnaW5hbFN0YWNrRnJhbWUiLCJnZXRPcmlnaW5hbFN0YWNrRnJhbWVzIiwiZ2V0RnJhbWVTb3VyY2UiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJzb3VyY2UiLCJ0eXBlIiwiZXJyb3JNZXNzYWdlIiwiX3NvdXJjZV9maWxlIiwiX3NvdXJjZV9maWxlMSIsIl9nZXRPcmlnaW5hbFN0YWNrRnJhbWUiLCJfYm9keV9vcmlnaW5hbFN0YWNrRnJhbWVfZmlsZSIsIl9ib2R5X29yaWdpbmFsU3RhY2tGcmFtZSIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImFwcGVuZCIsIlN0cmluZyIsImtleSIsIl9zb3VyY2Vfa2V5IiwidG9TdHJpbmciLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwidG0iLCJzZXRUaW1lb3V0IiwiYWJvcnQiLCJyZXMiLCJzZWxmIiwiZmV0Y2giLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1JPVVRFUl9CQVNFUEFUSCIsInNpZ25hbCIsImZpbmFsbHkiLCJjbGVhclRpbWVvdXQiLCJvayIsInN0YXR1cyIsIlByb21pc2UiLCJyZWplY3QiLCJFcnJvciIsInRleHQiLCJib2R5IiwianNvbiIsIl9yZWYiLCJlcnJvciIsInJlYXNvbiIsImV4dGVybmFsIiwiZXhwYW5kZWQiLCJCb29sZWFuIiwiZmlsZSIsImluY2x1ZGVzIiwib3JpZ2luYWxTdGFja0ZyYW1lIiwic291cmNlU3RhY2tGcmFtZSIsIm9yaWdpbmFsQ29kZUZyYW1lIiwic291cmNlUGFja2FnZSIsIm1hdGNoIiwicmVzb2x2ZSIsIl9lcnJfbWVzc2FnZSIsImNhdGNoIiwiZXJyIiwibWVzc2FnZSIsImZyYW1lcyIsIm1hcCIsImZyYW1lIiwiZm9ybWF0RnJhbWVTb3VyY2VGaWxlIiwicmVwbGFjZSIsInN0ciIsIl9nbG9iYWxUaGlzX2xvY2F0aW9uIiwidSIsIlVSTCIsImdsb2JhbFRoaXMiLCJsb2NhdGlvbiIsIm9yaWdpbiIsInByb3RvY29sIiwicGF0aG5hbWUiLCJlIiwibGluZU51bWJlciIsImNvbHVtbiIsInNsaWNlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-error-handler.js": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-error-handler.js ***! + \**********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RuntimeErrorHandler: function() {\n return RuntimeErrorHandler;\n },\n useErrorHandler: function() {\n return useErrorHandler;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\nconst _hydrationerrorinfo = __webpack_require__(/*! ./hydration-error-info */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js\");\nconst _isnextroutererror = __webpack_require__(/*! ../../../is-next-router-error */ \"(ssr)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nconst RuntimeErrorHandler = {\n hadRuntimeError: false\n};\nfunction isHydrationError(error) {\n return error.message.match(/(hydration|content does not match|did not match)/i) != null;\n}\nif (false) {}\nconst errorQueue = [];\nconst rejectionQueue = [];\nconst errorHandlers = [];\nconst rejectionHandlers = [];\nif (false) {}\nfunction useErrorHandler(handleOnUnhandledError, handleOnUnhandledRejection) {\n (0, _react.useEffect)(()=>{\n // Handle queued errors.\n errorQueue.forEach(handleOnUnhandledError);\n rejectionQueue.forEach(handleOnUnhandledRejection);\n // Listen to new errors.\n errorHandlers.push(handleOnUnhandledError);\n rejectionHandlers.push(handleOnUnhandledRejection);\n return ()=>{\n // Remove listeners.\n errorHandlers.splice(errorHandlers.indexOf(handleOnUnhandledError), 1);\n rejectionHandlers.splice(rejectionHandlers.indexOf(handleOnUnhandledRejection), 1);\n };\n }, [\n handleOnUnhandledError,\n handleOnUnhandledRejection\n ]);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-error-handler.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvdXNlLWVycm9yLWhhbmRsZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLGlCQUFpQjtRQUNiLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLFNBQVNDLG1CQUFPQSxDQUFDLHdHQUFPO0FBQzlCLE1BQU1DLHNCQUFzQkQsbUJBQU9BLENBQUMsMklBQXdCO0FBQzVELE1BQU1FLHFCQUFxQkYsbUJBQU9BLENBQUMsK0dBQStCO0FBQ2xFLE1BQU1ULHNCQUFzQjtJQUN4QlksaUJBQWlCO0FBQ3JCO0FBQ0EsU0FBU0MsaUJBQWlCQyxLQUFLO0lBQzNCLE9BQU9BLE1BQU1DLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLHdEQUF3RDtBQUN2RjtBQUNBLElBQUksS0FBNkIsRUFBRSxFQUtsQztBQUNELE1BQU1JLGFBQWEsRUFBRTtBQUNyQixNQUFNQyxpQkFBaUIsRUFBRTtBQUN6QixNQUFNQyxnQkFBZ0IsRUFBRTtBQUN4QixNQUFNQyxvQkFBb0IsRUFBRTtBQUM1QixJQUFJLEtBQTZCLEVBQUUsRUEyQ2xDO0FBQ0QsU0FBU3RCLGdCQUFnQm9DLHNCQUFzQixFQUFFQywwQkFBMEI7SUFDdEUsSUFBRzlCLE9BQU8rQixTQUFTLEVBQUU7UUFDbEIsd0JBQXdCO1FBQ3hCbkIsV0FBV29CLE9BQU8sQ0FBQ0g7UUFDbkJoQixlQUFlbUIsT0FBTyxDQUFDRjtRQUN2Qix3QkFBd0I7UUFDeEJoQixjQUFjWSxJQUFJLENBQUNHO1FBQ25CZCxrQkFBa0JXLElBQUksQ0FBQ0k7UUFDdkIsT0FBTztZQUNILG9CQUFvQjtZQUNwQmhCLGNBQWNtQixNQUFNLENBQUNuQixjQUFjb0IsT0FBTyxDQUFDTCx5QkFBeUI7WUFDcEVkLGtCQUFrQmtCLE1BQU0sQ0FBQ2xCLGtCQUFrQm1CLE9BQU8sQ0FBQ0osNkJBQTZCO1FBQ3BGO0lBQ0osR0FBRztRQUNDRDtRQUNBQztLQUNIO0FBQ0w7QUFFQSxJQUFJLENBQUMsT0FBT3pDLFFBQVE4QyxPQUFPLEtBQUssY0FBZSxPQUFPOUMsUUFBUThDLE9BQU8sS0FBSyxZQUFZOUMsUUFBUThDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzlDLFFBQVE4QyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLakQsT0FBT0MsY0FBYyxDQUFDQyxRQUFROEMsT0FBTyxFQUFFLGNBQWM7UUFBRTdDLE9BQU87SUFBSztJQUNuRUgsT0FBT2tELE1BQU0sQ0FBQ2hELFFBQVE4QyxPQUFPLEVBQUU5QztJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFROEMsT0FBTztBQUNsQyxFQUVBLDZDQUE2QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvdXNlLWVycm9yLWhhbmRsZXIuanM/YTYwNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFJ1bnRpbWVFcnJvckhhbmRsZXI6IG51bGwsXG4gICAgdXNlRXJyb3JIYW5kbGVyOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIFJ1bnRpbWVFcnJvckhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUnVudGltZUVycm9ySGFuZGxlcjtcbiAgICB9LFxuICAgIHVzZUVycm9ySGFuZGxlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VFcnJvckhhbmRsZXI7XG4gICAgfVxufSk7XG5jb25zdCBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5jb25zdCBfaHlkcmF0aW9uZXJyb3JpbmZvID0gcmVxdWlyZShcIi4vaHlkcmF0aW9uLWVycm9yLWluZm9cIik7XG5jb25zdCBfaXNuZXh0cm91dGVyZXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vaXMtbmV4dC1yb3V0ZXItZXJyb3JcIik7XG5jb25zdCBSdW50aW1lRXJyb3JIYW5kbGVyID0ge1xuICAgIGhhZFJ1bnRpbWVFcnJvcjogZmFsc2Vcbn07XG5mdW5jdGlvbiBpc0h5ZHJhdGlvbkVycm9yKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UubWF0Y2goLyhoeWRyYXRpb258Y29udGVudCBkb2VzIG5vdCBtYXRjaHxkaWQgbm90IG1hdGNoKS9pKSAhPSBudWxsO1xufVxuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHN0YWNrIGZyYW1lcyBvbiB0aGUgY2xpZW50XG4gICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IDUwO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG59XG5jb25zdCBlcnJvclF1ZXVlID0gW107XG5jb25zdCByZWplY3Rpb25RdWV1ZSA9IFtdO1xuY29uc3QgZXJyb3JIYW5kbGVycyA9IFtdO1xuY29uc3QgcmVqZWN0aW9uSGFuZGxlcnMgPSBbXTtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgLy8gVGhlc2UgZXZlbnQgaGFuZGxlcnMgbXVzdCBiZSBhZGRlZCBvdXRzaWRlIG9mIHRoZSBob29rIGJlY2F1c2UgdGhlcmUgaXMgbm9cbiAgICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgaG9vayB3aWxsIGJlIGFsaXZlIGluIGEgbW91bnRlZCBjb21wb25lbnQgaW4gdGltZSB0b1xuICAgIC8vIHdoZW4gdGhlIGVycm9ycyBvY2N1ci5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIChldik9PntcbiAgICAgICAgaWYgKCgwLCBfaXNuZXh0cm91dGVyZXJyb3IuaXNOZXh0Um91dGVyRXJyb3IpKGV2LmVycm9yKSkge1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcnJvciA9IGV2ID09IG51bGwgPyB2b2lkIDAgOiBldi5lcnJvcjtcbiAgICAgICAgaWYgKCFlcnJvciB8fCAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHx8IHR5cGVvZiBlcnJvci5zdGFjayAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gQSBub24tZXJyb3Igd2FzIHRocm93biwgd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzaG93LiA6LShcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNIeWRyYXRpb25FcnJvcihlcnJvcikgJiYgIWVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9yZWFjdC1oeWRyYXRpb24tZXJyb3JcIikpIHtcbiAgICAgICAgICAgIGlmIChfaHlkcmF0aW9uZXJyb3JpbmZvLmh5ZHJhdGlvbkVycm9yV2FybmluZykge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwYXRjaGVkIGNvbnNvbGUuZXJyb3IgZm91bmQgaHlkcmF0aW9uIGVycm9ycyBsb2dnZWQgYnkgUmVhY3RcbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIGxvZ2dlZCB3YXJuaW5nIHRvIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBcIlxcblxcblwiICsgX2h5ZHJhdGlvbmVycm9yaW5mby5oeWRyYXRpb25FcnJvcldhcm5pbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX2h5ZHJhdGlvbmVycm9yaW5mby5oeWRyYXRpb25FcnJvckNvbXBvbmVudFN0YWNrKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IuX2NvbXBvbmVudFN0YWNrID0gX2h5ZHJhdGlvbmVycm9yaW5mby5oeWRyYXRpb25FcnJvckNvbXBvbmVudFN0YWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBcIlxcblxcblNlZSBtb3JlIGluZm8gaGVyZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvcmVhY3QtaHlkcmF0aW9uLWVycm9yXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IGVycm9yO1xuICAgICAgICBlcnJvclF1ZXVlLnB1c2goZSk7XG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBlcnJvckhhbmRsZXJzKXtcbiAgICAgICAgICAgIGhhbmRsZXIoZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCAoZXYpPT57XG4gICAgICAgIGNvbnN0IHJlYXNvbiA9IGV2ID09IG51bGwgPyB2b2lkIDAgOiBldi5yZWFzb247XG4gICAgICAgIGlmICghcmVhc29uIHx8ICEocmVhc29uIGluc3RhbmNlb2YgRXJyb3IpIHx8IHR5cGVvZiByZWFzb24uc3RhY2sgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIEEgbm9uLWVycm9yIHdhcyB0aHJvd24sIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2hvdy4gOi0oXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IHJlYXNvbjtcbiAgICAgICAgcmVqZWN0aW9uUXVldWUucHVzaChlKTtcbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHJlamVjdGlvbkhhbmRsZXJzKXtcbiAgICAgICAgICAgIGhhbmRsZXIoZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHVzZUVycm9ySGFuZGxlcihoYW5kbGVPblVuaGFuZGxlZEVycm9yLCBoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvbikge1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICAvLyBIYW5kbGUgcXVldWVkIGVycm9ycy5cbiAgICAgICAgZXJyb3JRdWV1ZS5mb3JFYWNoKGhhbmRsZU9uVW5oYW5kbGVkRXJyb3IpO1xuICAgICAgICByZWplY3Rpb25RdWV1ZS5mb3JFYWNoKGhhbmRsZU9uVW5oYW5kbGVkUmVqZWN0aW9uKTtcbiAgICAgICAgLy8gTGlzdGVuIHRvIG5ldyBlcnJvcnMuXG4gICAgICAgIGVycm9ySGFuZGxlcnMucHVzaChoYW5kbGVPblVuaGFuZGxlZEVycm9yKTtcbiAgICAgICAgcmVqZWN0aW9uSGFuZGxlcnMucHVzaChoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvbik7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGxpc3RlbmVycy5cbiAgICAgICAgICAgIGVycm9ySGFuZGxlcnMuc3BsaWNlKGVycm9ySGFuZGxlcnMuaW5kZXhPZihoYW5kbGVPblVuaGFuZGxlZEVycm9yKSwgMSk7XG4gICAgICAgICAgICByZWplY3Rpb25IYW5kbGVycy5zcGxpY2UocmVqZWN0aW9uSGFuZGxlcnMuaW5kZXhPZihoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvbiksIDEpO1xuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgaGFuZGxlT25VbmhhbmRsZWRFcnJvcixcbiAgICAgICAgaGFuZGxlT25VbmhhbmRsZWRSZWplY3Rpb25cbiAgICBdKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLWVycm9yLWhhbmRsZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiUnVudGltZUVycm9ySGFuZGxlciIsInVzZUVycm9ySGFuZGxlciIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9yZWFjdCIsInJlcXVpcmUiLCJfaHlkcmF0aW9uZXJyb3JpbmZvIiwiX2lzbmV4dHJvdXRlcmVycm9yIiwiaGFkUnVudGltZUVycm9yIiwiaXNIeWRyYXRpb25FcnJvciIsImVycm9yIiwibWVzc2FnZSIsIm1hdGNoIiwiRXJyb3IiLCJzdGFja1RyYWNlTGltaXQiLCJlIiwiZXJyb3JRdWV1ZSIsInJlamVjdGlvblF1ZXVlIiwiZXJyb3JIYW5kbGVycyIsInJlamVjdGlvbkhhbmRsZXJzIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2IiwiaXNOZXh0Um91dGVyRXJyb3IiLCJwcmV2ZW50RGVmYXVsdCIsInN0YWNrIiwiaW5jbHVkZXMiLCJoeWRyYXRpb25FcnJvcldhcm5pbmciLCJoeWRyYXRpb25FcnJvckNvbXBvbmVudFN0YWNrIiwiX2NvbXBvbmVudFN0YWNrIiwicHVzaCIsImhhbmRsZXIiLCJyZWFzb24iLCJoYW5kbGVPblVuaGFuZGxlZEVycm9yIiwiaGFuZGxlT25VbmhhbmRsZWRSZWplY3Rpb24iLCJ1c2VFZmZlY3QiLCJmb3JFYWNoIiwic3BsaWNlIiwiaW5kZXhPZiIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-error-handler.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js ***! + \***********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useOpenInEditor\", ({\n enumerable: true,\n get: function() {\n return useOpenInEditor;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\nfunction useOpenInEditor(param) {\n let { file, lineNumber, column } = param === void 0 ? {} : param;\n const openInEditor = (0, _react.useCallback)(()=>{\n if (file == null || lineNumber == null || column == null) return;\n const params = new URLSearchParams();\n params.append(\"file\", file);\n params.append(\"lineNumber\", String(lineNumber));\n params.append(\"column\", String(column));\n self.fetch(( false || \"\") + \"/__nextjs_launch-editor?\" + params.toString()).then(()=>{}, ()=>{\n console.error(\"There was an issue opening this code in your editor.\");\n });\n }, [\n file,\n lineNumber,\n column\n ]);\n return openInEditor;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-open-in-editor.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvdXNlLW9wZW4taW4tZWRpdG9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxtREFBa0Q7SUFDOUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxTQUFTQyxtQkFBT0EsQ0FBQyx3R0FBTztBQUM5QixTQUFTRixnQkFBZ0JHLEtBQUs7SUFDMUIsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsTUFBTSxFQUFFLEdBQUdILFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSUE7SUFDM0QsTUFBTUksZUFBZSxDQUFDLEdBQUdOLE9BQU9PLFdBQVcsRUFBRTtRQUN6QyxJQUFJSixRQUFRLFFBQVFDLGNBQWMsUUFBUUMsVUFBVSxNQUFNO1FBQzFELE1BQU1HLFNBQVMsSUFBSUM7UUFDbkJELE9BQU9FLE1BQU0sQ0FBQyxRQUFRUDtRQUN0QkssT0FBT0UsTUFBTSxDQUFDLGNBQWNDLE9BQU9QO1FBQ25DSSxPQUFPRSxNQUFNLENBQUMsVUFBVUMsT0FBT047UUFDL0JPLEtBQUtDLEtBQUssQ0FBQyxDQUFDQyxNQUFrQyxJQUFJLEVBQUMsSUFBSyw2QkFBNkJOLE9BQU9TLFFBQVEsSUFBSUMsSUFBSSxDQUFDLEtBQUssR0FBRztZQUNqSEMsUUFBUUMsS0FBSyxDQUFDO1FBQ2xCO0lBQ0osR0FBRztRQUNDakI7UUFDQUM7UUFDQUM7S0FDSDtJQUNELE9BQU9DO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT1gsUUFBUTBCLE9BQU8sS0FBSyxjQUFlLE9BQU8xQixRQUFRMEIsT0FBTyxLQUFLLFlBQVkxQixRQUFRMEIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPMUIsUUFBUTBCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcks3QixPQUFPQyxjQUFjLENBQUNDLFFBQVEwQixPQUFPLEVBQUUsY0FBYztRQUFFekIsT0FBTztJQUFLO0lBQ25FSCxPQUFPOEIsTUFBTSxDQUFDNUIsUUFBUTBCLE9BQU8sRUFBRTFCO0lBQy9CNkIsT0FBTzdCLE9BQU8sR0FBR0EsUUFBUTBCLE9BQU87QUFDbEMsRUFFQSw4Q0FBOEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9oZWxwZXJzL3VzZS1vcGVuLWluLWVkaXRvci5qcz8xNDIyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXNlT3BlbkluRWRpdG9yXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VPcGVuSW5FZGl0b3I7XG4gICAgfVxufSk7XG5jb25zdCBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5mdW5jdGlvbiB1c2VPcGVuSW5FZGl0b3IocGFyYW0pIHtcbiAgICBsZXQgeyBmaWxlLCBsaW5lTnVtYmVyLCBjb2x1bW4gfSA9IHBhcmFtID09PSB2b2lkIDAgPyB7fSA6IHBhcmFtO1xuICAgIGNvbnN0IG9wZW5JbkVkaXRvciA9ICgwLCBfcmVhY3QudXNlQ2FsbGJhY2spKCgpPT57XG4gICAgICAgIGlmIChmaWxlID09IG51bGwgfHwgbGluZU51bWJlciA9PSBudWxsIHx8IGNvbHVtbiA9PSBudWxsKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgcGFyYW1zLmFwcGVuZChcImZpbGVcIiwgZmlsZSk7XG4gICAgICAgIHBhcmFtcy5hcHBlbmQoXCJsaW5lTnVtYmVyXCIsIFN0cmluZyhsaW5lTnVtYmVyKSk7XG4gICAgICAgIHBhcmFtcy5hcHBlbmQoXCJjb2x1bW5cIiwgU3RyaW5nKGNvbHVtbikpO1xuICAgICAgICBzZWxmLmZldGNoKChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIIHx8IFwiXCIpICsgXCIvX19uZXh0anNfbGF1bmNoLWVkaXRvcj9cIiArIHBhcmFtcy50b1N0cmluZygpKS50aGVuKCgpPT57fSwgKCk9PntcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGVyZSB3YXMgYW4gaXNzdWUgb3BlbmluZyB0aGlzIGNvZGUgaW4geW91ciBlZGl0b3IuXCIpO1xuICAgICAgICB9KTtcbiAgICB9LCBbXG4gICAgICAgIGZpbGUsXG4gICAgICAgIGxpbmVOdW1iZXIsXG4gICAgICAgIGNvbHVtblxuICAgIF0pO1xuICAgIHJldHVybiBvcGVuSW5FZGl0b3I7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS1vcGVuLWluLWVkaXRvci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwidXNlT3BlbkluRWRpdG9yIiwiX3JlYWN0IiwicmVxdWlyZSIsInBhcmFtIiwiZmlsZSIsImxpbmVOdW1iZXIiLCJjb2x1bW4iLCJvcGVuSW5FZGl0b3IiLCJ1c2VDYWxsYmFjayIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImFwcGVuZCIsIlN0cmluZyIsInNlbGYiLCJmZXRjaCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwidG9TdHJpbmciLCJ0aGVuIiwiY29uc29sZSIsImVycm9yIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-websocket.js": +/*!******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-websocket.js ***! + \******************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n useWebsocket: function() {\n return useWebsocket;\n },\n useSendMessage: function() {\n return useSendMessage;\n },\n useTurbopack: function() {\n return useTurbopack;\n },\n useWebsocketPing: function() {\n return useWebsocketPing;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../../../../shared/lib/app-router-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js\");\nconst _getsocketurl = __webpack_require__(/*! ./get-socket-url */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js\");\nfunction useWebsocket(assetPrefix) {\n const webSocketRef = (0, _react.useRef)();\n (0, _react.useEffect)(()=>{\n if (webSocketRef.current) {\n return;\n }\n const url = (0, _getsocketurl.getSocketUrl)(assetPrefix);\n webSocketRef.current = new window.WebSocket(\"\" + url + \"/_next/webpack-hmr\");\n }, [\n assetPrefix\n ]);\n return webSocketRef;\n}\nfunction useSendMessage(webSocketRef) {\n const sendMessage = (0, _react.useCallback)((data)=>{\n const socket = webSocketRef.current;\n if (!socket || socket.readyState !== socket.OPEN) {\n return;\n }\n return socket.send(data);\n }, [\n webSocketRef\n ]);\n return sendMessage;\n}\nfunction useTurbopack(sendMessage) {\n const turbopackState = (0, _react.useRef)({\n init: false,\n // Until the dynamic import resolves, queue any turbopack messages which will be replayed.\n queue: [],\n callback: undefined\n });\n const processTurbopackMessage = (0, _react.useCallback)((msg)=>{\n var _msg_type;\n if (\"type\" in msg && ((_msg_type = msg.type) == null ? void 0 : _msg_type.startsWith(\"turbopack-\"))) {\n const { callback, queue } = turbopackState.current;\n if (callback) {\n callback(msg);\n } else {\n queue.push(msg);\n }\n return true;\n }\n return false;\n }, []);\n (0, _react.useEffect)(()=>{\n const { current: initCurrent } = turbopackState;\n // TODO(WEB-1589): only install if `process.turbopack` set.\n if (initCurrent.init) {\n return;\n }\n initCurrent.init = true;\n Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! @vercel/turbopack-ecmascript-runtime/dev/client/hmr-client.ts */ \"(ssr)/./node_modules/next/dist/client/dev/noop-turbopack-hmr.js\"))).then((param)=>{\n let { connect } = param;\n const { current } = turbopackState;\n connect({\n addMessageListener (cb) {\n current.callback = cb;\n // Replay all Turbopack messages before we were able to establish the HMR client.\n for (const msg of current.queue){\n cb(msg);\n }\n current.queue = undefined;\n },\n sendMessage\n });\n });\n }, [\n sendMessage\n ]);\n return processTurbopackMessage;\n}\nfunction useWebsocketPing(websocketRef) {\n const sendMessage = useSendMessage(websocketRef);\n const { tree } = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n (0, _react.useEffect)(()=>{\n // Taken from on-demand-entries-client.js\n const interval = setInterval(()=>{\n sendMessage(JSON.stringify({\n event: \"ping\",\n tree,\n appDirRoute: true\n }));\n }, 2500);\n return ()=>clearInterval(interval);\n }, [\n tree,\n sendMessage\n ]);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-websocket.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvdXNlLXdlYnNvY2tldC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7Ozs7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FLTjtBQUNBLFNBQVNLLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlYLE9BQU9DLGNBQWMsQ0FBQ1MsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRUCxTQUFTO0lBQ2JHLGNBQWM7UUFDVixPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7SUFDQUMsY0FBYztRQUNWLE9BQU9BO0lBQ1g7SUFDQUMsa0JBQWtCO1FBQ2QsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sU0FBU0MsbUJBQU9BLENBQUMsd0dBQU87QUFDOUIsTUFBTUMsaUNBQWlDRCxtQkFBT0EsQ0FBQyxnTEFBNkQ7QUFDNUcsTUFBTUUsZ0JBQWdCRixtQkFBT0EsQ0FBQywrSEFBa0I7QUFDaEQsU0FBU1gsYUFBYWMsV0FBVztJQUM3QixNQUFNQyxlQUFlLENBQUMsR0FBR0wsT0FBT00sTUFBTTtJQUNyQyxJQUFHTixPQUFPTyxTQUFTLEVBQUU7UUFDbEIsSUFBSUYsYUFBYUcsT0FBTyxFQUFFO1lBQ3RCO1FBQ0o7UUFDQSxNQUFNQyxNQUFNLENBQUMsR0FBR04sY0FBY08sWUFBWSxFQUFFTjtRQUM1Q0MsYUFBYUcsT0FBTyxHQUFHLElBQUlHLE9BQU9DLFNBQVMsQ0FBQyxLQUFLSCxNQUFNO0lBQzNELEdBQUc7UUFDQ0w7S0FDSDtJQUNELE9BQU9DO0FBQ1g7QUFDQSxTQUFTZCxlQUFlYyxZQUFZO0lBQ2hDLE1BQU1RLGNBQWMsQ0FBQyxHQUFHYixPQUFPYyxXQUFXLEVBQUUsQ0FBQ0M7UUFDekMsTUFBTUMsU0FBU1gsYUFBYUcsT0FBTztRQUNuQyxJQUFJLENBQUNRLFVBQVVBLE9BQU9DLFVBQVUsS0FBS0QsT0FBT0UsSUFBSSxFQUFFO1lBQzlDO1FBQ0o7UUFDQSxPQUFPRixPQUFPRyxJQUFJLENBQUNKO0lBQ3ZCLEdBQUc7UUFDQ1Y7S0FDSDtJQUNELE9BQU9RO0FBQ1g7QUFDQSxTQUFTckIsYUFBYXFCLFdBQVc7SUFDN0IsTUFBTU8saUJBQWlCLENBQUMsR0FBR3BCLE9BQU9NLE1BQU0sRUFBRTtRQUN0Q2UsTUFBTTtRQUNOLDBGQUEwRjtRQUMxRkMsT0FBTyxFQUFFO1FBQ1RDLFVBQVVDO0lBQ2Q7SUFDQSxNQUFNQywwQkFBMEIsQ0FBQyxHQUFHekIsT0FBT2MsV0FBVyxFQUFFLENBQUNZO1FBQ3JELElBQUlDO1FBQ0osSUFBSSxVQUFVRCxPQUFRLEVBQUNDLFlBQVlELElBQUlFLElBQUksS0FBSyxPQUFPLEtBQUssSUFBSUQsVUFBVUUsVUFBVSxDQUFDLGFBQVksR0FBSTtZQUNqRyxNQUFNLEVBQUVOLFFBQVEsRUFBRUQsS0FBSyxFQUFFLEdBQUdGLGVBQWVaLE9BQU87WUFDbEQsSUFBSWUsVUFBVTtnQkFDVkEsU0FBU0c7WUFDYixPQUFPO2dCQUNISixNQUFNUSxJQUFJLENBQUNKO1lBQ2Y7WUFDQSxPQUFPO1FBQ1g7UUFDQSxPQUFPO0lBQ1gsR0FBRyxFQUFFO0lBQ0osSUFBRzFCLE9BQU9PLFNBQVMsRUFBRTtRQUNsQixNQUFNLEVBQUVDLFNBQVN1QixXQUFXLEVBQUUsR0FBR1g7UUFDakMsMkRBQTJEO1FBQzNELElBQUlXLFlBQVlWLElBQUksRUFBRTtZQUNsQjtRQUNKO1FBQ0FVLFlBQVlWLElBQUksR0FBRztRQUNuQix5RkFDQSxzSUFBK0QsSUFBRVcsSUFBSSxDQUFDLENBQUNDO1lBQ25FLElBQUksRUFBRUMsT0FBTyxFQUFFLEdBQUdEO1lBQ2xCLE1BQU0sRUFBRXpCLE9BQU8sRUFBRSxHQUFHWTtZQUNwQmMsUUFBUTtnQkFDSkMsb0JBQW9CQyxFQUFFO29CQUNsQjVCLFFBQVFlLFFBQVEsR0FBR2E7b0JBQ25CLGlGQUFpRjtvQkFDakYsS0FBSyxNQUFNVixPQUFPbEIsUUFBUWMsS0FBSyxDQUFDO3dCQUM1QmMsR0FBR1Y7b0JBQ1A7b0JBQ0FsQixRQUFRYyxLQUFLLEdBQUdFO2dCQUNwQjtnQkFDQVg7WUFDSjtRQUNKO0lBQ0osR0FBRztRQUNDQTtLQUNIO0lBQ0QsT0FBT1k7QUFDWDtBQUNBLFNBQVNoQyxpQkFBaUI0QyxZQUFZO0lBQ2xDLE1BQU14QixjQUFjdEIsZUFBZThDO0lBQ25DLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHdEMsT0FBT3VDLFVBQVUsRUFBRXJDLCtCQUErQnNDLHlCQUF5QjtJQUMvRixJQUFHeEMsT0FBT08sU0FBUyxFQUFFO1FBQ2xCLHlDQUF5QztRQUN6QyxNQUFNa0MsV0FBV0MsWUFBWTtZQUN6QjdCLFlBQVk4QixLQUFLQyxTQUFTLENBQUM7Z0JBQ3ZCQyxPQUFPO2dCQUNQUDtnQkFDQVEsYUFBYTtZQUNqQjtRQUNKLEdBQUc7UUFDSCxPQUFPLElBQUlDLGNBQWNOO0lBQzdCLEdBQUc7UUFDQ0g7UUFDQXpCO0tBQ0g7QUFDTDtBQUVBLElBQUksQ0FBQyxPQUFPMUIsUUFBUTZELE9BQU8sS0FBSyxjQUFlLE9BQU83RCxRQUFRNkQsT0FBTyxLQUFLLFlBQVk3RCxRQUFRNkQsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPN0QsUUFBUTZELE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktoRSxPQUFPQyxjQUFjLENBQUNDLFFBQVE2RCxPQUFPLEVBQUUsY0FBYztRQUFFNUQsT0FBTztJQUFLO0lBQ25FSCxPQUFPaUUsTUFBTSxDQUFDL0QsUUFBUTZELE9BQU8sRUFBRTdEO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVE2RCxPQUFPO0FBQ2xDLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy91c2Utd2Vic29ja2V0LmpzPzdiODEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICB1c2VXZWJzb2NrZXQ6IG51bGwsXG4gICAgdXNlU2VuZE1lc3NhZ2U6IG51bGwsXG4gICAgdXNlVHVyYm9wYWNrOiBudWxsLFxuICAgIHVzZVdlYnNvY2tldFBpbmc6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgdXNlV2Vic29ja2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZVdlYnNvY2tldDtcbiAgICB9LFxuICAgIHVzZVNlbmRNZXNzYWdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZVNlbmRNZXNzYWdlO1xuICAgIH0sXG4gICAgdXNlVHVyYm9wYWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZVR1cmJvcGFjaztcbiAgICB9LFxuICAgIHVzZVdlYnNvY2tldFBpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXNlV2Vic29ja2V0UGluZztcbiAgICB9XG59KTtcbmNvbnN0IF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmNvbnN0IF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmNvbnN0IF9nZXRzb2NrZXR1cmwgPSByZXF1aXJlKFwiLi9nZXQtc29ja2V0LXVybFwiKTtcbmZ1bmN0aW9uIHVzZVdlYnNvY2tldChhc3NldFByZWZpeCkge1xuICAgIGNvbnN0IHdlYlNvY2tldFJlZiA9ICgwLCBfcmVhY3QudXNlUmVmKSgpO1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICBpZiAod2ViU29ja2V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSAoMCwgX2dldHNvY2tldHVybC5nZXRTb2NrZXRVcmwpKGFzc2V0UHJlZml4KTtcbiAgICAgICAgd2ViU29ja2V0UmVmLmN1cnJlbnQgPSBuZXcgd2luZG93LldlYlNvY2tldChcIlwiICsgdXJsICsgXCIvX25leHQvd2VicGFjay1obXJcIik7XG4gICAgfSwgW1xuICAgICAgICBhc3NldFByZWZpeFxuICAgIF0pO1xuICAgIHJldHVybiB3ZWJTb2NrZXRSZWY7XG59XG5mdW5jdGlvbiB1c2VTZW5kTWVzc2FnZSh3ZWJTb2NrZXRSZWYpIHtcbiAgICBjb25zdCBzZW5kTWVzc2FnZSA9ICgwLCBfcmVhY3QudXNlQ2FsbGJhY2spKChkYXRhKT0+e1xuICAgICAgICBjb25zdCBzb2NrZXQgPSB3ZWJTb2NrZXRSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFzb2NrZXQgfHwgc29ja2V0LnJlYWR5U3RhdGUgIT09IHNvY2tldC5PUEVOKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNvY2tldC5zZW5kKGRhdGEpO1xuICAgIH0sIFtcbiAgICAgICAgd2ViU29ja2V0UmVmXG4gICAgXSk7XG4gICAgcmV0dXJuIHNlbmRNZXNzYWdlO1xufVxuZnVuY3Rpb24gdXNlVHVyYm9wYWNrKHNlbmRNZXNzYWdlKSB7XG4gICAgY29uc3QgdHVyYm9wYWNrU3RhdGUgPSAoMCwgX3JlYWN0LnVzZVJlZikoe1xuICAgICAgICBpbml0OiBmYWxzZSxcbiAgICAgICAgLy8gVW50aWwgdGhlIGR5bmFtaWMgaW1wb3J0IHJlc29sdmVzLCBxdWV1ZSBhbnkgdHVyYm9wYWNrIG1lc3NhZ2VzIHdoaWNoIHdpbGwgYmUgcmVwbGF5ZWQuXG4gICAgICAgIHF1ZXVlOiBbXSxcbiAgICAgICAgY2FsbGJhY2s6IHVuZGVmaW5lZFxuICAgIH0pO1xuICAgIGNvbnN0IHByb2Nlc3NUdXJib3BhY2tNZXNzYWdlID0gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKG1zZyk9PntcbiAgICAgICAgdmFyIF9tc2dfdHlwZTtcbiAgICAgICAgaWYgKFwidHlwZVwiIGluIG1zZyAmJiAoKF9tc2dfdHlwZSA9IG1zZy50eXBlKSA9PSBudWxsID8gdm9pZCAwIDogX21zZ190eXBlLnN0YXJ0c1dpdGgoXCJ0dXJib3BhY2stXCIpKSkge1xuICAgICAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcXVldWUgfSA9IHR1cmJvcGFja1N0YXRlLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhtc2cpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSwgW10pO1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICBjb25zdCB7IGN1cnJlbnQ6IGluaXRDdXJyZW50IH0gPSB0dXJib3BhY2tTdGF0ZTtcbiAgICAgICAgLy8gVE9ETyhXRUItMTU4OSk6IG9ubHkgaW5zdGFsbCBpZiBgcHJvY2Vzcy50dXJib3BhY2tgIHNldC5cbiAgICAgICAgaWYgKGluaXRDdXJyZW50LmluaXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbml0Q3VycmVudC5pbml0ID0gdHJ1ZTtcbiAgICAgICAgaW1wb3J0KC8vIEB0cy1leHBlY3QtZXJyb3IgcmVxdWlyZXMgXCJtb2R1bGVSZXNvbHV0aW9uXCI6IFwibm9kZTE2XCIgaW4gdHNjb25maWcuanNvbiBhbmQgbm90IC50cyBleHRlbnNpb25cbiAgICAgICAgXCJAdmVyY2VsL3R1cmJvcGFjay1lY21hc2NyaXB0LXJ1bnRpbWUvZGV2L2NsaWVudC9obXItY2xpZW50LnRzXCIpLnRoZW4oKHBhcmFtKT0+e1xuICAgICAgICAgICAgbGV0IHsgY29ubmVjdCB9ID0gcGFyYW07XG4gICAgICAgICAgICBjb25zdCB7IGN1cnJlbnQgfSA9IHR1cmJvcGFja1N0YXRlO1xuICAgICAgICAgICAgY29ubmVjdCh7XG4gICAgICAgICAgICAgICAgYWRkTWVzc2FnZUxpc3RlbmVyIChjYikge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmNhbGxiYWNrID0gY2I7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlcGxheSBhbGwgVHVyYm9wYWNrIG1lc3NhZ2VzIGJlZm9yZSB3ZSB3ZXJlIGFibGUgdG8gZXN0YWJsaXNoIHRoZSBITVIgY2xpZW50LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiBjdXJyZW50LnF1ZXVlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNiKG1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSwgW1xuICAgICAgICBzZW5kTWVzc2FnZVxuICAgIF0pO1xuICAgIHJldHVybiBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZTtcbn1cbmZ1bmN0aW9uIHVzZVdlYnNvY2tldFBpbmcod2Vic29ja2V0UmVmKSB7XG4gICAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VTZW5kTWVzc2FnZSh3ZWJzb2NrZXRSZWYpO1xuICAgIGNvbnN0IHsgdHJlZSB9ID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIC8vIFRha2VuIGZyb20gb24tZGVtYW5kLWVudHJpZXMtY2xpZW50LmpzXG4gICAgICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCk9PntcbiAgICAgICAgICAgIHNlbmRNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBldmVudDogXCJwaW5nXCIsXG4gICAgICAgICAgICAgICAgdHJlZSxcbiAgICAgICAgICAgICAgICBhcHBEaXJSb3V0ZTogdHJ1ZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9LCAyNTAwKTtcbiAgICAgICAgcmV0dXJuICgpPT5jbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICB9LCBbXG4gICAgICAgIHRyZWUsXG4gICAgICAgIHNlbmRNZXNzYWdlXG4gICAgXSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS13ZWJzb2NrZXQuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwidXNlV2Vic29ja2V0IiwidXNlU2VuZE1lc3NhZ2UiLCJ1c2VUdXJib3BhY2siLCJ1c2VXZWJzb2NrZXRQaW5nIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX3JlYWN0IiwicmVxdWlyZSIsIl9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSIsIl9nZXRzb2NrZXR1cmwiLCJhc3NldFByZWZpeCIsIndlYlNvY2tldFJlZiIsInVzZVJlZiIsInVzZUVmZmVjdCIsImN1cnJlbnQiLCJ1cmwiLCJnZXRTb2NrZXRVcmwiLCJ3aW5kb3ciLCJXZWJTb2NrZXQiLCJzZW5kTWVzc2FnZSIsInVzZUNhbGxiYWNrIiwiZGF0YSIsInNvY2tldCIsInJlYWR5U3RhdGUiLCJPUEVOIiwic2VuZCIsInR1cmJvcGFja1N0YXRlIiwiaW5pdCIsInF1ZXVlIiwiY2FsbGJhY2siLCJ1bmRlZmluZWQiLCJwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZSIsIm1zZyIsIl9tc2dfdHlwZSIsInR5cGUiLCJzdGFydHNXaXRoIiwicHVzaCIsImluaXRDdXJyZW50IiwidGhlbiIsInBhcmFtIiwiY29ubmVjdCIsImFkZE1lc3NhZ2VMaXN0ZW5lciIsImNiIiwid2Vic29ja2V0UmVmIiwidHJlZSIsInVzZUNvbnRleHQiLCJHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0IiwiaW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudCIsImFwcERpclJvdXRlIiwiY2xlYXJJbnRlcnZhbCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-websocket.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js ***! + \***********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useOnClickOutside\", ({\n enumerable: true,\n get: function() {\n return useOnClickOutside;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nfunction useOnClickOutside(el, handler) {\n _react.useEffect(()=>{\n if (el == null || handler == null) {\n return;\n }\n const listener = (e)=>{\n // Do nothing if clicking ref's element or descendent elements\n if (!el || el.contains(e.target)) {\n return;\n }\n handler(e);\n };\n const root = el.getRootNode();\n root.addEventListener(\"mousedown\", listener);\n root.addEventListener(\"touchstart\", listener);\n return function() {\n root.removeEventListener(\"mousedown\", listener);\n root.removeEventListener(\"touchstart\", listener);\n };\n }, [\n handler,\n el\n ]);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-on-click-outside.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hvb2tzL3VzZS1vbi1jbGljay1vdXRzaWRlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxxREFBb0Q7SUFDaERJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyw0QkFBNEJDLG1CQUFPQSxDQUFDLG9IQUEwQztBQUNwRixNQUFNQyxTQUFTLFdBQVcsR0FBR0YsMEJBQTBCRyxDQUFDLENBQUNGLG1CQUFPQSxDQUFDLHdHQUFPO0FBQ3hFLFNBQVNGLGtCQUFrQkssRUFBRSxFQUFFQyxPQUFPO0lBQ2xDSCxPQUFPSSxTQUFTLENBQUM7UUFDYixJQUFJRixNQUFNLFFBQVFDLFdBQVcsTUFBTTtZQUMvQjtRQUNKO1FBQ0EsTUFBTUUsV0FBVyxDQUFDQztZQUNkLDhEQUE4RDtZQUM5RCxJQUFJLENBQUNKLE1BQU1BLEdBQUdLLFFBQVEsQ0FBQ0QsRUFBRUUsTUFBTSxHQUFHO2dCQUM5QjtZQUNKO1lBQ0FMLFFBQVFHO1FBQ1o7UUFDQSxNQUFNRyxPQUFPUCxHQUFHUSxXQUFXO1FBQzNCRCxLQUFLRSxnQkFBZ0IsQ0FBQyxhQUFhTjtRQUNuQ0ksS0FBS0UsZ0JBQWdCLENBQUMsY0FBY047UUFDcEMsT0FBTztZQUNISSxLQUFLRyxtQkFBbUIsQ0FBQyxhQUFhUDtZQUN0Q0ksS0FBS0csbUJBQW1CLENBQUMsY0FBY1A7UUFDM0M7SUFDSixHQUFHO1FBQ0NGO1FBQ0FEO0tBQ0g7QUFDTDtBQUVBLElBQUksQ0FBQyxPQUFPVCxRQUFRb0IsT0FBTyxLQUFLLGNBQWUsT0FBT3BCLFFBQVFvQixPQUFPLEtBQUssWUFBWXBCLFFBQVFvQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9wQixRQUFRb0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3ZCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW9CLE9BQU8sRUFBRSxjQUFjO1FBQUVuQixPQUFPO0lBQUs7SUFDbkVILE9BQU93QixNQUFNLENBQUN0QixRQUFRb0IsT0FBTyxFQUFFcEI7SUFDL0J1QixPQUFPdkIsT0FBTyxHQUFHQSxRQUFRb0IsT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hvb2tzL3VzZS1vbi1jbGljay1vdXRzaWRlLmpzP2M2OTAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1c2VPbkNsaWNrT3V0c2lkZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXNlT25DbGlja091dHNpZGU7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuZnVuY3Rpb24gdXNlT25DbGlja091dHNpZGUoZWwsIGhhbmRsZXIpIHtcbiAgICBfcmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmIChlbCA9PSBudWxsIHx8IGhhbmRsZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKGUpPT57XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nIGlmIGNsaWNraW5nIHJlZidzIGVsZW1lbnQgb3IgZGVzY2VuZGVudCBlbGVtZW50c1xuICAgICAgICAgICAgaWYgKCFlbCB8fCBlbC5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVyKGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByb290ID0gZWwuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsIGxpc3RlbmVyKTtcbiAgICAgICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCBsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICByb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIGxpc3RlbmVyKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIGhhbmRsZXIsXG4gICAgICAgIGVsXG4gICAgXSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS1vbi1jbGljay1vdXRzaWRlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJ1c2VPbkNsaWNrT3V0c2lkZSIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiXyIsImVsIiwiaGFuZGxlciIsInVzZUVmZmVjdCIsImxpc3RlbmVyIiwiZSIsImNvbnRhaW5zIiwidGFyZ2V0Iiwicm9vdCIsImdldFJvb3ROb2RlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js ***! + \************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CloseIcon\", ({\n enumerable: true,\n get: function() {\n return CloseIcon;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst CloseIcon = ()=>{\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 6L6 18\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M6 6L18 18\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n });\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CloseIcon.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2ljb25zL0Nsb3NlSWNvbi5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsNkNBQTRDO0lBQ3hDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTUYsWUFBWTtJQUNkLE9BQXFCLFdBQUgsR0FBSSxJQUFHRyxZQUFZRyxJQUFJLEVBQUUsT0FBTztRQUM5Q0MsT0FBTztRQUNQQyxRQUFRO1FBQ1JDLFNBQVM7UUFDVEMsTUFBTTtRQUNOQyxPQUFPO1FBQ1BDLFVBQVU7WUFDTixXQUFXLEdBQUksSUFBR1QsWUFBWVUsR0FBRyxFQUFFLFFBQVE7Z0JBQ3ZDQyxHQUFHO2dCQUNIQyxRQUFRO2dCQUNSQyxhQUFhO2dCQUNiQyxlQUFlO2dCQUNmQyxnQkFBZ0I7WUFDcEI7WUFDQSxXQUFXLEdBQUksSUFBR2YsWUFBWVUsR0FBRyxFQUFFLFFBQVE7Z0JBQ3ZDQyxHQUFHO2dCQUNIQyxRQUFRO2dCQUNSQyxhQUFhO2dCQUNiQyxlQUFlO2dCQUNmQyxnQkFBZ0I7WUFDcEI7U0FDSDtJQUNMO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT3RCLFFBQVF1QixPQUFPLEtBQUssY0FBZSxPQUFPdkIsUUFBUXVCLE9BQU8sS0FBSyxZQUFZdkIsUUFBUXVCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3ZCLFFBQVF1QixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLMUIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRdUIsT0FBTyxFQUFFLGNBQWM7UUFBRXRCLE9BQU87SUFBSztJQUNuRUgsT0FBTzJCLE1BQU0sQ0FBQ3pCLFFBQVF1QixPQUFPLEVBQUV2QjtJQUMvQjBCLE9BQU8xQixPQUFPLEdBQUdBLFFBQVF1QixPQUFPO0FBQ2xDLEVBRUEscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaWNvbnMvQ2xvc2VJY29uLmpzPzY4YzgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDbG9zZUljb25cIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENsb3NlSWNvbjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IENsb3NlSWNvbiA9ICgpPT57XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwic3ZnXCIsIHtcbiAgICAgICAgd2lkdGg6IFwiMjRcIixcbiAgICAgICAgaGVpZ2h0OiBcIjI0XCIsXG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGQ6IFwiTTE4IDZMNiAxOFwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgIGQ6IFwiTTYgNkwxOCAxOFwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNsb3NlSWNvbi5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ2xvc2VJY29uIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJqc3hzIiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZmlsbCIsInhtbG5zIiwiY2hpbGRyZW4iLCJqc3giLCJkIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js ***! + \********************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Base\", ({\n enumerable: true,\n get: function() {\n return Base;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n :host {\\n --size-gap-half: 4px;\\n --size-gap: 8px;\\n --size-gap-double: 16px;\\n --size-gap-triple: 24px;\\n --size-gap-quad: 32px;\\n\\n --size-font-small: 14px;\\n --size-font: 16px;\\n --size-font-big: 20px;\\n --size-font-bigger: 24px;\\n\\n --color-accents-1: #808080;\\n --color-accents-2: #222222;\\n --color-accents-3: #404040;\\n\\n --font-stack-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono',\\n Menlo, Courier, monospace;\\n\\n --color-ansi-selection: rgba(95, 126, 151, 0.48);\\n --color-ansi-bg: #111111;\\n --color-ansi-fg: #cccccc;\\n\\n --color-ansi-white: #777777;\\n --color-ansi-black: #141414;\\n --color-ansi-blue: #00aaff;\\n --color-ansi-cyan: #88ddff;\\n --color-ansi-green: #98ec65;\\n --color-ansi-magenta: #aa88ff;\\n --color-ansi-red: #ff5555;\\n --color-ansi-yellow: #ffcc33;\\n --color-ansi-bright-white: #ffffff;\\n --color-ansi-bright-black: #777777;\\n --color-ansi-bright-blue: #33bbff;\\n --color-ansi-bright-cyan: #bbecff;\\n --color-ansi-bright-green: #b6f292;\\n --color-ansi-bright-magenta: #cebbff;\\n --color-ansi-bright-red: #ff8888;\\n --color-ansi-bright-yellow: #ffd966;\\n }\\n\\n .mono {\\n font-family: var(--font-stack-monospace);\\n }\\n\\n h1,\\n h2,\\n h3,\\n h4,\\n h5,\\n h6 {\\n margin-bottom: var(--size-gap);\\n font-weight: 500;\\n line-height: 1.5;\\n }\\n \"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction Base() {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n children: (0, _nooptemplate.noop)(_templateObject())\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Base.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL3N0eWxlcy9CYXNlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx3Q0FBdUM7SUFDbkNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyw0QkFBNEJDLG1CQUFPQSxDQUFDLG9IQUEwQztBQUNwRixNQUFNQyxpQ0FBaUNELG1CQUFPQSxDQUFDLDhIQUErQztBQUM5RixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyxnSUFBbUI7QUFDL0MsTUFBTUcsU0FBUyxXQUFXLEdBQUdKLDBCQUEwQkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyx3R0FBTztBQUN4RSxNQUFNSyxnQkFBZ0JMLG1CQUFPQSxDQUFDLHNJQUEwQjtBQUN4RCxTQUFTTTtJQUNMLE1BQU1DLE9BQU9OLCtCQUErQkcsQ0FBQyxDQUFDO1FBQzFDO0tBQ0g7SUFDREUsa0JBQWtCO1FBQ2QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxTQUFTVDtJQUNMLE9BQXFCLFdBQUgsR0FBSSxJQUFHSSxZQUFZTSxHQUFHLEVBQUUsU0FBUztRQUMvQ0MsVUFBVSxDQUFDLEdBQUdKLGNBQWNLLElBQUksRUFBRUo7SUFDdEM7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPWixRQUFRaUIsT0FBTyxLQUFLLGNBQWUsT0FBT2pCLFFBQVFpQixPQUFPLEtBQUssWUFBWWpCLFFBQVFpQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9qQixRQUFRaUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3BCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWlCLE9BQU8sRUFBRSxjQUFjO1FBQUVoQixPQUFPO0lBQUs7SUFDbkVILE9BQU9xQixNQUFNLENBQUNuQixRQUFRaUIsT0FBTyxFQUFFakI7SUFDL0JvQixPQUFPcEIsT0FBTyxHQUFHQSxRQUFRaUIsT0FBTztBQUNsQyxFQUVBLGdDQUFnQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL3N0eWxlcy9CYXNlLmpzP2UxMjEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCYXNlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBCYXNlO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZVwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9ub29wdGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9ub29wLXRlbXBsYXRlXCIpO1xuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuXyhbXG4gICAgICAgIFwiXFxuICAgICAgICA6aG9zdCB7XFxuICAgICAgICAgIC0tc2l6ZS1nYXAtaGFsZjogNHB4O1xcbiAgICAgICAgICAtLXNpemUtZ2FwOiA4cHg7XFxuICAgICAgICAgIC0tc2l6ZS1nYXAtZG91YmxlOiAxNnB4O1xcbiAgICAgICAgICAtLXNpemUtZ2FwLXRyaXBsZTogMjRweDtcXG4gICAgICAgICAgLS1zaXplLWdhcC1xdWFkOiAzMnB4O1xcblxcbiAgICAgICAgICAtLXNpemUtZm9udC1zbWFsbDogMTRweDtcXG4gICAgICAgICAgLS1zaXplLWZvbnQ6IDE2cHg7XFxuICAgICAgICAgIC0tc2l6ZS1mb250LWJpZzogMjBweDtcXG4gICAgICAgICAgLS1zaXplLWZvbnQtYmlnZ2VyOiAyNHB4O1xcblxcbiAgICAgICAgICAtLWNvbG9yLWFjY2VudHMtMTogIzgwODA4MDtcXG4gICAgICAgICAgLS1jb2xvci1hY2NlbnRzLTI6ICMyMjIyMjI7XFxuICAgICAgICAgIC0tY29sb3ItYWNjZW50cy0zOiAjNDA0MDQwO1xcblxcbiAgICAgICAgICAtLWZvbnQtc3RhY2stbW9ub3NwYWNlOiAnU0ZNb25vLVJlZ3VsYXInLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsXFxuICAgICAgICAgICAgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZTtcXG5cXG4gICAgICAgICAgLS1jb2xvci1hbnNpLXNlbGVjdGlvbjogcmdiYSg5NSwgMTI2LCAxNTEsIDAuNDgpO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYmc6ICMxMTExMTE7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1mZzogI2NjY2NjYztcXG5cXG4gICAgICAgICAgLS1jb2xvci1hbnNpLXdoaXRlOiAjNzc3Nzc3O1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYmxhY2s6ICMxNDE0MTQ7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1ibHVlOiAjMDBhYWZmO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktY3lhbjogIzg4ZGRmZjtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWdyZWVuOiAjOThlYzY1O1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktbWFnZW50YTogI2FhODhmZjtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLXJlZDogI2ZmNTU1NTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLXllbGxvdzogI2ZmY2MzMztcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC13aGl0ZTogI2ZmZmZmZjtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1ibGFjazogIzc3Nzc3NztcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1ibHVlOiAjMzNiYmZmO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LWN5YW46ICNiYmVjZmY7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQtZ3JlZW46ICNiNmYyOTI7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQtbWFnZW50YTogI2NlYmJmZjtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1yZWQ6ICNmZjg4ODg7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQteWVsbG93OiAjZmZkOTY2O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLm1vbm8ge1xcbiAgICAgICAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaDEsXFxuICAgICAgICBoMixcXG4gICAgICAgIGgzLFxcbiAgICAgICAgaDQsXFxuICAgICAgICBoNSxcXG4gICAgICAgIGg2IHtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1nYXApO1xcbiAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogMS41O1xcbiAgICAgICAgfVxcbiAgICAgIFwiXG4gICAgXSk7XG4gICAgX3RlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBCYXNlKCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3R5bGVcIiwge1xuICAgICAgICBjaGlsZHJlbjogKDAsIF9ub29wdGVtcGxhdGUubm9vcCkoX3RlbXBsYXRlT2JqZWN0KCkpXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJhc2UuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkJhc2UiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9ub29wdGVtcGxhdGUiLCJfdGVtcGxhdGVPYmplY3QiLCJkYXRhIiwianN4IiwiY2hpbGRyZW4iLCJub29wIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js ***! + \*******************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ComponentStyles\", ({\n enumerable: true,\n get: function() {\n return ComponentStyles;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _styles = __webpack_require__(/*! ../components/CodeFrame/styles */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js\");\nconst _Dialog = __webpack_require__(/*! ../components/Dialog */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\");\nconst _styles1 = __webpack_require__(/*! ../components/LeftRightDialogHeader/styles */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js\");\nconst _styles2 = __webpack_require__(/*! ../components/Overlay/styles */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js\");\nconst _styles3 = __webpack_require__(/*! ../components/Terminal/styles */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js\");\nconst _Toast = __webpack_require__(/*! ../components/Toast */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ../components/VersionStalenessInfo */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\");\nconst _BuildError = __webpack_require__(/*! ../container/BuildError */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js\");\nconst _RootLayoutError = __webpack_require__(/*! ../container/RootLayoutError */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RootLayoutError.js\");\nconst _Errors = __webpack_require__(/*! ../container/Errors */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js\");\nconst _RuntimeError = __webpack_require__(/*! ../container/RuntimeError */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js\");\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction ComponentStyles() {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n children: (0, _nooptemplate.noop)(_templateObject(), _styles2.styles, _Toast.styles, _Dialog.styles, _styles1.styles, _styles.styles, _styles3.styles, _BuildError.styles, _RootLayoutError.styles, _Errors.styles, _RuntimeError.styles, _VersionStalenessInfo.styles)\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ComponentStyles.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL3N0eWxlcy9Db21wb25lbnRTdHlsZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILG1EQUFrRDtJQUM5Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDRCQUE0QkMsbUJBQU9BLENBQUMsb0hBQTBDO0FBQ3BGLE1BQU1DLGlDQUFpQ0QsbUJBQU9BLENBQUMsOEhBQStDO0FBQzlGLE1BQU1FLGNBQWNGLG1CQUFPQSxDQUFDLGdJQUFtQjtBQUMvQyxNQUFNRyxTQUFTLFdBQVcsR0FBR0osMEJBQTBCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLHdHQUFPO0FBQ3hFLE1BQU1LLFVBQVVMLG1CQUFPQSxDQUFDLGtKQUFnQztBQUN4RCxNQUFNTSxVQUFVTixtQkFBT0EsQ0FBQyxvSUFBc0I7QUFDOUMsTUFBTU8sV0FBV1AsbUJBQU9BLENBQUMsMEtBQTRDO0FBQ3JFLE1BQU1RLFdBQVdSLG1CQUFPQSxDQUFDLDhJQUE4QjtBQUN2RCxNQUFNUyxXQUFXVCxtQkFBT0EsQ0FBQyxnSkFBK0I7QUFDeEQsTUFBTVUsU0FBU1YsbUJBQU9BLENBQUMsa0lBQXFCO0FBQzVDLE1BQU1XLHdCQUF3QlgsbUJBQU9BLENBQUMsZ0tBQW9DO0FBQzFFLE1BQU1ZLGNBQWNaLG1CQUFPQSxDQUFDLG9JQUF5QjtBQUNyRCxNQUFNYSxtQkFBbUJiLG1CQUFPQSxDQUFDLDhJQUE4QjtBQUMvRCxNQUFNYyxVQUFVZCxtQkFBT0EsQ0FBQyw0SEFBcUI7QUFDN0MsTUFBTWUsZ0JBQWdCZixtQkFBT0EsQ0FBQyw4SUFBMkI7QUFDekQsTUFBTWdCLGdCQUFnQmhCLG1CQUFPQSxDQUFDLHNJQUEwQjtBQUN4RCxTQUFTaUI7SUFDTCxNQUFNQyxPQUFPakIsK0JBQStCRyxDQUFDLENBQUM7UUFDMUM7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO0tBQ0g7SUFDRGEsa0JBQWtCO1FBQ2QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxTQUFTcEI7SUFDTCxPQUFxQixXQUFILEdBQUksSUFBR0ksWUFBWWlCLEdBQUcsRUFBRSxTQUFTO1FBQy9DQyxVQUFVLENBQUMsR0FBR0osY0FBY0ssSUFBSSxFQUFFSixtQkFBbUJULFNBQVNjLE1BQU0sRUFBRVosT0FBT1ksTUFBTSxFQUFFaEIsUUFBUWdCLE1BQU0sRUFBRWYsU0FBU2UsTUFBTSxFQUFFakIsUUFBUWlCLE1BQU0sRUFBRWIsU0FBU2EsTUFBTSxFQUFFVixZQUFZVSxNQUFNLEVBQUVULGlCQUFpQlMsTUFBTSxFQUFFUixRQUFRUSxNQUFNLEVBQUVQLGNBQWNPLE1BQU0sRUFBRVgsc0JBQXNCVyxNQUFNO0lBQzFRO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBTzVCLFFBQVE2QixPQUFPLEtBQUssY0FBZSxPQUFPN0IsUUFBUTZCLE9BQU8sS0FBSyxZQUFZN0IsUUFBUTZCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzdCLFFBQVE2QixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLaEMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRNkIsT0FBTyxFQUFFLGNBQWM7UUFBRTVCLE9BQU87SUFBSztJQUNuRUgsT0FBT2lDLE1BQU0sQ0FBQy9CLFFBQVE2QixPQUFPLEVBQUU3QjtJQUMvQmdDLE9BQU9oQyxPQUFPLEdBQUdBLFFBQVE2QixPQUFPO0FBQ2xDLEVBRUEsMkNBQTJDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvc3R5bGVzL0NvbXBvbmVudFN0eWxlcy5qcz83ODE1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29tcG9uZW50U3R5bGVzXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDb21wb25lbnRTdHlsZXM7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX3N0eWxlcyA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL0NvZGVGcmFtZS9zdHlsZXNcIik7XG5jb25zdCBfRGlhbG9nID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvRGlhbG9nXCIpO1xuY29uc3QgX3N0eWxlczEgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9MZWZ0UmlnaHREaWFsb2dIZWFkZXIvc3R5bGVzXCIpO1xuY29uc3QgX3N0eWxlczIgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9PdmVybGF5L3N0eWxlc1wiKTtcbmNvbnN0IF9zdHlsZXMzID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvVGVybWluYWwvc3R5bGVzXCIpO1xuY29uc3QgX1RvYXN0ID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvVG9hc3RcIik7XG5jb25zdCBfVmVyc2lvblN0YWxlbmVzc0luZm8gPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9WZXJzaW9uU3RhbGVuZXNzSW5mb1wiKTtcbmNvbnN0IF9CdWlsZEVycm9yID0gcmVxdWlyZShcIi4uL2NvbnRhaW5lci9CdWlsZEVycm9yXCIpO1xuY29uc3QgX1Jvb3RMYXlvdXRFcnJvciA9IHJlcXVpcmUoXCIuLi9jb250YWluZXIvUm9vdExheW91dEVycm9yXCIpO1xuY29uc3QgX0Vycm9ycyA9IHJlcXVpcmUoXCIuLi9jb250YWluZXIvRXJyb3JzXCIpO1xuY29uc3QgX1J1bnRpbWVFcnJvciA9IHJlcXVpcmUoXCIuLi9jb250YWluZXIvUnVudGltZUVycm9yXCIpO1xuY29uc3QgX25vb3B0ZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL25vb3AtdGVtcGxhdGVcIik7XG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QoKSB7XG4gICAgY29uc3QgZGF0YSA9IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZS5fKFtcbiAgICAgICAgXCJcXG4gICAgICAgIFwiLFxuICAgICAgICBcIlxcbiAgICAgICAgXCIsXG4gICAgICAgIFwiXFxuICAgICAgICBcIixcbiAgICAgICAgXCJcXG4gICAgICAgIFwiLFxuICAgICAgICBcIlxcbiAgICAgICAgXCIsXG4gICAgICAgIFwiXFxuICAgICAgICBcIixcbiAgICAgICAgXCJcXG4gICAgICAgIFxcbiAgICAgICAgXCIsXG4gICAgICAgIFwiXFxuICAgICAgICBcIixcbiAgICAgICAgXCJcXG4gICAgICAgIFwiLFxuICAgICAgICBcIlxcbiAgICAgICAgXCIsXG4gICAgICAgIFwiXFxuICAgICAgICBcIixcbiAgICAgICAgXCJcXG4gICAgICBcIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24gQ29tcG9uZW50U3R5bGVzKCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3R5bGVcIiwge1xuICAgICAgICBjaGlsZHJlbjogKDAsIF9ub29wdGVtcGxhdGUubm9vcCkoX3RlbXBsYXRlT2JqZWN0KCksIF9zdHlsZXMyLnN0eWxlcywgX1RvYXN0LnN0eWxlcywgX0RpYWxvZy5zdHlsZXMsIF9zdHlsZXMxLnN0eWxlcywgX3N0eWxlcy5zdHlsZXMsIF9zdHlsZXMzLnN0eWxlcywgX0J1aWxkRXJyb3Iuc3R5bGVzLCBfUm9vdExheW91dEVycm9yLnN0eWxlcywgX0Vycm9ycy5zdHlsZXMsIF9SdW50aW1lRXJyb3Iuc3R5bGVzLCBfVmVyc2lvblN0YWxlbmVzc0luZm8uc3R5bGVzKVxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db21wb25lbnRTdHlsZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkNvbXBvbmVudFN0eWxlcyIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX3N0eWxlcyIsIl9EaWFsb2ciLCJfc3R5bGVzMSIsIl9zdHlsZXMyIiwiX3N0eWxlczMiLCJfVG9hc3QiLCJfVmVyc2lvblN0YWxlbmVzc0luZm8iLCJfQnVpbGRFcnJvciIsIl9Sb290TGF5b3V0RXJyb3IiLCJfRXJyb3JzIiwiX1J1bnRpbWVFcnJvciIsIl9ub29wdGVtcGxhdGUiLCJfdGVtcGxhdGVPYmplY3QiLCJkYXRhIiwianN4IiwiY2hpbGRyZW4iLCJub29wIiwic3R5bGVzIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js ***! + \************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CssReset\", ({\n enumerable: true,\n get: function() {\n return CssReset;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(ssr)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n :host {\\n all: initial;\\n\\n /* the direction property is not reset by 'all' */\\n direction: ltr;\\n }\\n\\n /*!\\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\\n * Copyright 2011-2019 The Bootstrap Authors\\n * Copyright 2011-2019 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\\n */\\n *,\\n *::before,\\n *::after {\\n box-sizing: border-box;\\n }\\n\\n :host {\\n font-family: sans-serif;\\n line-height: 1.15;\\n -webkit-text-size-adjust: 100%;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n }\\n\\n article,\\n aside,\\n figcaption,\\n figure,\\n footer,\\n header,\\n hgroup,\\n main,\\n nav,\\n section {\\n display: block;\\n }\\n\\n :host {\\n margin: 0;\\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\\n 'Helvetica Neue', Arial, 'Noto Sans', sans-serif,\\n 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\\n 'Noto Color Emoji';\\n font-size: 16px;\\n font-weight: 400;\\n line-height: 1.5;\\n color: #212529;\\n text-align: left;\\n background-color: #fff;\\n }\\n\\n [tabindex='-1']:focus:not(:focus-visible) {\\n outline: 0 !important;\\n }\\n\\n hr {\\n box-sizing: content-box;\\n height: 0;\\n overflow: visible;\\n }\\n\\n h1,\\n h2,\\n h3,\\n h4,\\n h5,\\n h6 {\\n margin-top: 0;\\n margin-bottom: 8px;\\n }\\n\\n p {\\n margin-top: 0;\\n margin-bottom: 16px;\\n }\\n\\n abbr[title],\\n abbr[data-original-title] {\\n text-decoration: underline;\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n cursor: help;\\n border-bottom: 0;\\n -webkit-text-decoration-skip-ink: none;\\n text-decoration-skip-ink: none;\\n }\\n\\n address {\\n margin-bottom: 16px;\\n font-style: normal;\\n line-height: inherit;\\n }\\n\\n ol,\\n ul,\\n dl {\\n margin-top: 0;\\n margin-bottom: 16px;\\n }\\n\\n ol ol,\\n ul ul,\\n ol ul,\\n ul ol {\\n margin-bottom: 0;\\n }\\n\\n dt {\\n font-weight: 700;\\n }\\n\\n dd {\\n margin-bottom: 8px;\\n margin-left: 0;\\n }\\n\\n blockquote {\\n margin: 0 0 16px;\\n }\\n\\n b,\\n strong {\\n font-weight: bolder;\\n }\\n\\n small {\\n font-size: 80%;\\n }\\n\\n sub,\\n sup {\\n position: relative;\\n font-size: 75%;\\n line-height: 0;\\n vertical-align: baseline;\\n }\\n\\n sub {\\n bottom: -0.25em;\\n }\\n\\n sup {\\n top: -0.5em;\\n }\\n\\n a {\\n color: #007bff;\\n text-decoration: none;\\n background-color: transparent;\\n }\\n\\n a:hover {\\n color: #0056b3;\\n text-decoration: underline;\\n }\\n\\n a:not([href]) {\\n color: inherit;\\n text-decoration: none;\\n }\\n\\n a:not([href]):hover {\\n color: inherit;\\n text-decoration: none;\\n }\\n\\n pre,\\n code,\\n kbd,\\n samp {\\n font-family: SFMono-Regular, Menlo, Monaco, Consolas,\\n 'Liberation Mono', 'Courier New', monospace;\\n font-size: 1em;\\n }\\n\\n pre {\\n margin-top: 0;\\n margin-bottom: 16px;\\n overflow: auto;\\n }\\n\\n figure {\\n margin: 0 0 16px;\\n }\\n\\n img {\\n vertical-align: middle;\\n border-style: none;\\n }\\n\\n svg {\\n overflow: hidden;\\n vertical-align: middle;\\n }\\n\\n table {\\n border-collapse: collapse;\\n }\\n\\n caption {\\n padding-top: 12px;\\n padding-bottom: 12px;\\n color: #6c757d;\\n text-align: left;\\n caption-side: bottom;\\n }\\n\\n th {\\n text-align: inherit;\\n }\\n\\n label {\\n display: inline-block;\\n margin-bottom: 8px;\\n }\\n\\n button {\\n border-radius: 0;\\n }\\n\\n button:focus {\\n outline: 1px dotted;\\n outline: 5px auto -webkit-focus-ring-color;\\n }\\n\\n input,\\n button,\\n select,\\n optgroup,\\n textarea {\\n margin: 0;\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n }\\n\\n button,\\n input {\\n overflow: visible;\\n }\\n\\n button,\\n select {\\n text-transform: none;\\n }\\n\\n select {\\n word-wrap: normal;\\n }\\n\\n button,\\n [type='button'],\\n [type='reset'],\\n [type='submit'] {\\n -webkit-appearance: button;\\n }\\n\\n button:not(:disabled),\\n [type='button']:not(:disabled),\\n [type='reset']:not(:disabled),\\n [type='submit']:not(:disabled) {\\n cursor: pointer;\\n }\\n\\n button::-moz-focus-inner,\\n [type='button']::-moz-focus-inner,\\n [type='reset']::-moz-focus-inner,\\n [type='submit']::-moz-focus-inner {\\n padding: 0;\\n border-style: none;\\n }\\n\\n input[type='radio'],\\n input[type='checkbox'] {\\n box-sizing: border-box;\\n padding: 0;\\n }\\n\\n input[type='date'],\\n input[type='time'],\\n input[type='datetime-local'],\\n input[type='month'] {\\n -webkit-appearance: listbox;\\n }\\n\\n textarea {\\n overflow: auto;\\n resize: vertical;\\n }\\n\\n fieldset {\\n min-width: 0;\\n padding: 0;\\n margin: 0;\\n border: 0;\\n }\\n\\n legend {\\n display: block;\\n width: 100%;\\n max-width: 100%;\\n padding: 0;\\n margin-bottom: 8px;\\n font-size: 24px;\\n line-height: inherit;\\n color: inherit;\\n white-space: normal;\\n }\\n\\n progress {\\n vertical-align: baseline;\\n }\\n\\n [type='number']::-webkit-inner-spin-button,\\n [type='number']::-webkit-outer-spin-button {\\n height: auto;\\n }\\n\\n [type='search'] {\\n outline-offset: -2px;\\n -webkit-appearance: none;\\n }\\n\\n [type='search']::-webkit-search-decoration {\\n -webkit-appearance: none;\\n }\\n\\n ::-webkit-file-upload-button {\\n font: inherit;\\n -webkit-appearance: button;\\n }\\n\\n output {\\n display: inline-block;\\n }\\n\\n summary {\\n display: list-item;\\n cursor: pointer;\\n }\\n\\n template {\\n display: none;\\n }\\n\\n [hidden] {\\n display: none !important;\\n }\\n \"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction CssReset() {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n children: (0, _nooptemplate.noop)(_templateObject())\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CssReset.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL3N0eWxlcy9Dc3NSZXNldC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsNENBQTJDO0lBQ3ZDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUMsaUNBQWlDRCxtQkFBT0EsQ0FBQyw4SEFBK0M7QUFDOUYsTUFBTUUsY0FBY0YsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1HLFNBQVMsV0FBVyxHQUFHSiwwQkFBMEJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTUssZ0JBQWdCTCxtQkFBT0EsQ0FBQyxzSUFBMEI7QUFDeEQsU0FBU007SUFDTCxNQUFNQyxPQUFPTiwrQkFBK0JHLENBQUMsQ0FBQztRQUMxQztLQUNIO0lBQ0RFLGtCQUFrQjtRQUNkLE9BQU9DO0lBQ1g7SUFDQSxPQUFPQTtBQUNYO0FBQ0EsU0FBU1Q7SUFDTCxPQUFxQixXQUFILEdBQUksSUFBR0ksWUFBWU0sR0FBRyxFQUFFLFNBQVM7UUFDL0NDLFVBQVUsQ0FBQyxHQUFHSixjQUFjSyxJQUFJLEVBQUVKO0lBQ3RDO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT1osUUFBUWlCLE9BQU8sS0FBSyxjQUFlLE9BQU9qQixRQUFRaUIsT0FBTyxLQUFLLFlBQVlqQixRQUFRaUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPakIsUUFBUWlCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktwQixPQUFPQyxjQUFjLENBQUNDLFFBQVFpQixPQUFPLEVBQUUsY0FBYztRQUFFaEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPcUIsTUFBTSxDQUFDbkIsUUFBUWlCLE9BQU8sRUFBRWpCO0lBQy9Cb0IsT0FBT3BCLE9BQU8sR0FBR0EsUUFBUWlCLE9BQU87QUFDbEMsRUFFQSxvQ0FBb0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9zdHlsZXMvQ3NzUmVzZXQuanM/MWEzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNzc1Jlc2V0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDc3NSZXNldDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2VcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfbm9vcHRlbXBsYXRlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZVwiKTtcbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgICBjb25zdCBkYXRhID0gX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlLl8oW1xuICAgICAgICBcIlxcbiAgICAgICAgOmhvc3Qge1xcbiAgICAgICAgICBhbGw6IGluaXRpYWw7XFxuXFxuICAgICAgICAgIC8qIHRoZSBkaXJlY3Rpb24gcHJvcGVydHkgaXMgbm90IHJlc2V0IGJ5ICdhbGwnICovXFxuICAgICAgICAgIGRpcmVjdGlvbjogbHRyO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyohXFxuICAgICAgICAgKiBCb290c3RyYXAgUmVib290IHY0LjQuMSAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcXG4gICAgICAgICAqIENvcHlyaWdodCAyMDExLTIwMTkgVGhlIEJvb3RzdHJhcCBBdXRob3JzXFxuICAgICAgICAgKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cXG4gICAgICAgICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXFxuICAgICAgICAgKiBGb3JrZWQgZnJvbSBOb3JtYWxpemUuY3NzLCBsaWNlbnNlZCBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcXG4gICAgICAgICAqL1xcbiAgICAgICAgKixcXG4gICAgICAgICo6OmJlZm9yZSxcXG4gICAgICAgICo6OmFmdGVyIHtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIDpob3N0IHtcXG4gICAgICAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE1O1xcbiAgICAgICAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XFxuICAgICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGFydGljbGUsXFxuICAgICAgICBhc2lkZSxcXG4gICAgICAgIGZpZ2NhcHRpb24sXFxuICAgICAgICBmaWd1cmUsXFxuICAgICAgICBmb290ZXIsXFxuICAgICAgICBoZWFkZXIsXFxuICAgICAgICBoZ3JvdXAsXFxuICAgICAgICBtYWluLFxcbiAgICAgICAgbmF2LFxcbiAgICAgICAgc2VjdGlvbiB7XFxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgOmhvc3Qge1xcbiAgICAgICAgICBtYXJnaW46IDA7XFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90byxcXG4gICAgICAgICAgICAnSGVsdmV0aWNhIE5ldWUnLCBBcmlhbCwgJ05vdG8gU2FucycsIHNhbnMtc2VyaWYsXFxuICAgICAgICAgICAgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCcsXFxuICAgICAgICAgICAgJ05vdG8gQ29sb3IgRW1vamknO1xcbiAgICAgICAgICBmb250LXNpemU6IDE2cHg7XFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAgICAgICAgIGNvbG9yOiAjMjEyNTI5O1xcbiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgW3RhYmluZGV4PSctMSddOmZvY3VzOm5vdCg6Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgICAgICBvdXRsaW5lOiAwICFpbXBvcnRhbnQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBociB7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbiAgICAgICAgICBoZWlnaHQ6IDA7XFxuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaDEsXFxuICAgICAgICBoMixcXG4gICAgICAgIGgzLFxcbiAgICAgICAgaDQsXFxuICAgICAgICBoNSxcXG4gICAgICAgIGg2IHtcXG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgcCB7XFxuICAgICAgICAgIG1hcmdpbi10b3A6IDA7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhYmJyW3RpdGxlXSxcXG4gICAgICAgIGFiYnJbZGF0YS1vcmlnaW5hbC10aXRsZV0ge1xcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gICAgICAgICAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gICAgICAgICAgY3Vyc29yOiBoZWxwO1xcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xcbiAgICAgICAgICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYWRkcmVzcyB7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICAgICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBvbCxcXG4gICAgICAgIHVsLFxcbiAgICAgICAgZGwge1xcbiAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgb2wgb2wsXFxuICAgICAgICB1bCB1bCxcXG4gICAgICAgIG9sIHVsLFxcbiAgICAgICAgdWwgb2wge1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZHQge1xcbiAgICAgICAgICBmb250LXdlaWdodDogNzAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZGQge1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYmxvY2txdW90ZSB7XFxuICAgICAgICAgIG1hcmdpbjogMCAwIDE2cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBiLFxcbiAgICAgICAgc3Ryb25nIHtcXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHNtYWxsIHtcXG4gICAgICAgICAgZm9udC1zaXplOiA4MCU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzdWIsXFxuICAgICAgICBzdXAge1xcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgIGZvbnQtc2l6ZTogNzUlO1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogMDtcXG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgc3ViIHtcXG4gICAgICAgICAgYm90dG9tOiAtMC4yNWVtO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgc3VwIHtcXG4gICAgICAgICAgdG9wOiAtMC41ZW07XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhIHtcXG4gICAgICAgICAgY29sb3I6ICMwMDdiZmY7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhOmhvdmVyIHtcXG4gICAgICAgICAgY29sb3I6ICMwMDU2YjM7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYTpub3QoW2hyZWZdKSB7XFxuICAgICAgICAgIGNvbG9yOiBpbmhlcml0O1xcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhOm5vdChbaHJlZl0pOmhvdmVyIHtcXG4gICAgICAgICAgY29sb3I6IGluaGVyaXQ7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHByZSxcXG4gICAgICAgIGNvZGUsXFxuICAgICAgICBrYmQsXFxuICAgICAgICBzYW1wIHtcXG4gICAgICAgICAgZm9udC1mYW1pbHk6IFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcyxcXG4gICAgICAgICAgICAnTGliZXJhdGlvbiBNb25vJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcbiAgICAgICAgICBmb250LXNpemU6IDFlbTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHByZSB7XFxuICAgICAgICAgIG1hcmdpbi10b3A6IDA7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZmlndXJlIHtcXG4gICAgICAgICAgbWFyZ2luOiAwIDAgMTZweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGltZyB7XFxuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICAgICAgICAgIGJvcmRlci1zdHlsZTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHN2ZyB7XFxuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB0YWJsZSB7XFxuICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBjYXB0aW9uIHtcXG4gICAgICAgICAgcGFkZGluZy10b3A6IDEycHg7XFxuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAxMnB4O1xcbiAgICAgICAgICBjb2xvcjogIzZjNzU3ZDtcXG4gICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcXG4gICAgICAgICAgY2FwdGlvbi1zaWRlOiBib3R0b207XFxuICAgICAgICB9XFxuXFxuICAgICAgICB0aCB7XFxuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBsYWJlbCB7XFxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uIHtcXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbjpmb2N1cyB7XFxuICAgICAgICAgIG91dGxpbmU6IDFweCBkb3R0ZWQ7XFxuICAgICAgICAgIG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlucHV0LFxcbiAgICAgICAgYnV0dG9uLFxcbiAgICAgICAgc2VsZWN0LFxcbiAgICAgICAgb3B0Z3JvdXAsXFxuICAgICAgICB0ZXh0YXJlYSB7XFxuICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XFxuICAgICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBidXR0b24sXFxuICAgICAgICBpbnB1dCB7XFxuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uLFxcbiAgICAgICAgc2VsZWN0IHtcXG4gICAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzZWxlY3Qge1xcbiAgICAgICAgICB3b3JkLXdyYXA6IG5vcm1hbDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbixcXG4gICAgICAgIFt0eXBlPSdidXR0b24nXSxcXG4gICAgICAgIFt0eXBlPSdyZXNldCddLFxcbiAgICAgICAgW3R5cGU9J3N1Ym1pdCddIHtcXG4gICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XFxuICAgICAgICB9XFxuXFxuICAgICAgICBidXR0b246bm90KDpkaXNhYmxlZCksXFxuICAgICAgICBbdHlwZT0nYnV0dG9uJ106bm90KDpkaXNhYmxlZCksXFxuICAgICAgICBbdHlwZT0ncmVzZXQnXTpub3QoOmRpc2FibGVkKSxcXG4gICAgICAgIFt0eXBlPSdzdWJtaXQnXTpub3QoOmRpc2FibGVkKSB7XFxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcXG4gICAgICAgIFt0eXBlPSdidXR0b24nXTo6LW1vei1mb2N1cy1pbm5lcixcXG4gICAgICAgIFt0eXBlPSdyZXNldCddOjotbW96LWZvY3VzLWlubmVyLFxcbiAgICAgICAgW3R5cGU9J3N1Ym1pdCddOjotbW96LWZvY3VzLWlubmVyIHtcXG4gICAgICAgICAgcGFkZGluZzogMDtcXG4gICAgICAgICAgYm9yZGVyLXN0eWxlOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaW5wdXRbdHlwZT0ncmFkaW8nXSxcXG4gICAgICAgIGlucHV0W3R5cGU9J2NoZWNrYm94J10ge1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBwYWRkaW5nOiAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaW5wdXRbdHlwZT0nZGF0ZSddLFxcbiAgICAgICAgaW5wdXRbdHlwZT0ndGltZSddLFxcbiAgICAgICAgaW5wdXRbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSxcXG4gICAgICAgIGlucHV0W3R5cGU9J21vbnRoJ10ge1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGxpc3Rib3g7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB0ZXh0YXJlYSB7XFxuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xcbiAgICAgICAgICByZXNpemU6IHZlcnRpY2FsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZmllbGRzZXQge1xcbiAgICAgICAgICBtaW4td2lkdGg6IDA7XFxuICAgICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgYm9yZGVyOiAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgbGVnZW5kIHtcXG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICAgICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcXG4gICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gICAgICAgICAgY29sb3I6IGluaGVyaXQ7XFxuICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBwcm9ncmVzcyB7XFxuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFt0eXBlPSdudW1iZXInXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcXG4gICAgICAgIFt0eXBlPSdudW1iZXInXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XFxuICAgICAgICAgIGhlaWdodDogYXV0bztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFt0eXBlPSdzZWFyY2gnXSB7XFxuICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBbdHlwZT0nc2VhcmNoJ106Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICA6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcXG4gICAgICAgICAgZm9udDogaW5oZXJpdDtcXG4gICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247XFxuICAgICAgICB9XFxuXFxuICAgICAgICBvdXRwdXQge1xcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzdW1tYXJ5IHtcXG4gICAgICAgICAgZGlzcGxheTogbGlzdC1pdGVtO1xcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB0ZW1wbGF0ZSB7XFxuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBbaGlkZGVuXSB7XFxuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG4gICAgICBcIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24gQ3NzUmVzZXQoKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzdHlsZVwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiAoMCwgX25vb3B0ZW1wbGF0ZS5ub29wKShfdGVtcGxhdGVPYmplY3QoKSlcbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q3NzUmVzZXQuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkNzc1Jlc2V0IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfbm9vcHRlbXBsYXRlIiwiX3RlbXBsYXRlT2JqZWN0IiwiZGF0YSIsImpzeCIsImNoaWxkcmVuIiwibm9vcCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/redirect-boundary.js": +/*!***********************************************************************!*\ + !*** ./node_modules/next/dist/client/components/redirect-boundary.js ***! + \***********************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RedirectErrorBoundary: function() {\n return RedirectErrorBoundary;\n },\n RedirectBoundary: function() {\n return RedirectBoundary;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _navigation = __webpack_require__(/*! ./navigation */ \"(ssr)/./node_modules/next/dist/client/components/navigation.js\");\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(ssr)/./node_modules/next/dist/client/components/redirect.js\");\nfunction HandleRedirect(param) {\n let { redirect, reset, redirectType } = param;\n const router = (0, _navigation.useRouter)();\n (0, _react.useEffect)(()=>{\n _react.default.startTransition(()=>{\n if (redirectType === _redirect.RedirectType.push) {\n router.push(redirect, {});\n } else {\n router.replace(redirect, {});\n }\n reset();\n });\n }, [\n redirect,\n redirectType,\n reset,\n router\n ]);\n return null;\n}\nclass RedirectErrorBoundary extends _react.default.Component {\n static getDerivedStateFromError(error) {\n if ((0, _redirect.isRedirectError)(error)) {\n const url = (0, _redirect.getURLFromRedirectError)(error);\n const redirectType = (0, _redirect.getRedirectTypeFromError)(error);\n return {\n redirect: url,\n redirectType\n };\n }\n // Re-throw if error is not for redirect\n throw error;\n }\n render() {\n const { redirect, redirectType } = this.state;\n if (redirect !== null && redirectType !== null) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(HandleRedirect, {\n redirect: redirect,\n redirectType: redirectType,\n reset: ()=>this.setState({\n redirect: null\n })\n });\n }\n return this.props.children;\n }\n constructor(props){\n super(props);\n this.state = {\n redirect: null,\n redirectType: null\n };\n }\n}\nfunction RedirectBoundary(param) {\n let { children } = param;\n const router = (0, _navigation.useRouter)();\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(RedirectErrorBoundary, {\n router: router,\n children: children\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect-boundary.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlZGlyZWN0LWJvdW5kYXJ5LmpzIiwibWFwcGluZ3MiOiJxREFFYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsdUJBQXVCO1FBQ25CLE9BQU9BO0lBQ1g7SUFDQUMsa0JBQWtCO1FBQ2QsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sNEJBQTRCQyxtQkFBT0EsQ0FBQyxvSEFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTUksY0FBY0osbUJBQU9BLENBQUMsb0ZBQWM7QUFDMUMsTUFBTUssWUFBWUwsbUJBQU9BLENBQUMsZ0ZBQVk7QUFDdEMsU0FBU00sZUFBZUMsS0FBSztJQUN6QixJQUFJLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxZQUFZLEVBQUUsR0FBR0g7SUFDeEMsTUFBTUksU0FBUyxDQUFDLEdBQUdQLFlBQVlRLFNBQVM7SUFDdkMsSUFBR1YsT0FBT1csU0FBUyxFQUFFO1FBQ2xCWCxPQUFPWSxPQUFPLENBQUNDLGVBQWUsQ0FBQztZQUMzQixJQUFJTCxpQkFBaUJMLFVBQVVXLFlBQVksQ0FBQ0MsSUFBSSxFQUFFO2dCQUM5Q04sT0FBT00sSUFBSSxDQUFDVCxVQUFVLENBQUM7WUFDM0IsT0FBTztnQkFDSEcsT0FBT08sT0FBTyxDQUFDVixVQUFVLENBQUM7WUFDOUI7WUFDQUM7UUFDSjtJQUNKLEdBQUc7UUFDQ0Q7UUFDQUU7UUFDQUQ7UUFDQUU7S0FDSDtJQUNELE9BQU87QUFDWDtBQUNBLE1BQU1wQiw4QkFBOEJXLE9BQU9ZLE9BQU8sQ0FBQ0ssU0FBUztJQUN4RCxPQUFPQyx5QkFBeUJDLEtBQUssRUFBRTtRQUNuQyxJQUFJLENBQUMsR0FBR2hCLFVBQVVpQixlQUFlLEVBQUVELFFBQVE7WUFDdkMsTUFBTUUsTUFBTSxDQUFDLEdBQUdsQixVQUFVbUIsdUJBQXVCLEVBQUVIO1lBQ25ELE1BQU1YLGVBQWUsQ0FBQyxHQUFHTCxVQUFVb0Isd0JBQXdCLEVBQUVKO1lBQzdELE9BQU87Z0JBQ0hiLFVBQVVlO2dCQUNWYjtZQUNKO1FBQ0o7UUFDQSx3Q0FBd0M7UUFDeEMsTUFBTVc7SUFDVjtJQUNBSyxTQUFTO1FBQ0wsTUFBTSxFQUFFbEIsUUFBUSxFQUFFRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUNpQixLQUFLO1FBQzdDLElBQUluQixhQUFhLFFBQVFFLGlCQUFpQixNQUFNO1lBQzVDLE9BQXFCLFdBQUgsR0FBSSxJQUFHVCxZQUFZMkIsR0FBRyxFQUFFdEIsZ0JBQWdCO2dCQUN0REUsVUFBVUE7Z0JBQ1ZFLGNBQWNBO2dCQUNkRCxPQUFPLElBQUksSUFBSSxDQUFDb0IsUUFBUSxDQUFDO3dCQUNqQnJCLFVBQVU7b0JBQ2Q7WUFDUjtRQUNKO1FBQ0EsT0FBTyxJQUFJLENBQUNzQixLQUFLLENBQUNDLFFBQVE7SUFDOUI7SUFDQUMsWUFBWUYsS0FBSyxDQUFDO1FBQ2QsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0gsS0FBSyxHQUFHO1lBQ1RuQixVQUFVO1lBQ1ZFLGNBQWM7UUFDbEI7SUFDSjtBQUNKO0FBQ0EsU0FBU2xCLGlCQUFpQmUsS0FBSztJQUMzQixJQUFJLEVBQUV3QixRQUFRLEVBQUUsR0FBR3hCO0lBQ25CLE1BQU1JLFNBQVMsQ0FBQyxHQUFHUCxZQUFZUSxTQUFTO0lBQ3hDLE9BQXFCLFdBQUgsR0FBSSxJQUFHWCxZQUFZMkIsR0FBRyxFQUFFckMsdUJBQXVCO1FBQzdEb0IsUUFBUUE7UUFDUm9CLFVBQVVBO0lBQ2Q7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPM0MsUUFBUTBCLE9BQU8sS0FBSyxjQUFlLE9BQU8xQixRQUFRMEIsT0FBTyxLQUFLLFlBQVkxQixRQUFRMEIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPMUIsUUFBUTBCLE9BQU8sQ0FBQ21CLFVBQVUsS0FBSyxhQUFhO0lBQ3JLL0MsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMEIsT0FBTyxFQUFFLGNBQWM7UUFBRXpCLE9BQU87SUFBSztJQUNuRUgsT0FBT2dELE1BQU0sQ0FBQzlDLFFBQVEwQixPQUFPLEVBQUUxQjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRMEIsT0FBTztBQUNsQyxFQUVBLDZDQUE2QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlZGlyZWN0LWJvdW5kYXJ5LmpzP2I0NDQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUmVkaXJlY3RFcnJvckJvdW5kYXJ5OiBudWxsLFxuICAgIFJlZGlyZWN0Qm91bmRhcnk6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgUmVkaXJlY3RFcnJvckJvdW5kYXJ5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJlZGlyZWN0RXJyb3JCb3VuZGFyeTtcbiAgICB9LFxuICAgIFJlZGlyZWN0Qm91bmRhcnk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUmVkaXJlY3RCb3VuZGFyeTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9uYXZpZ2F0aW9uID0gcmVxdWlyZShcIi4vbmF2aWdhdGlvblwiKTtcbmNvbnN0IF9yZWRpcmVjdCA9IHJlcXVpcmUoXCIuL3JlZGlyZWN0XCIpO1xuZnVuY3Rpb24gSGFuZGxlUmVkaXJlY3QocGFyYW0pIHtcbiAgICBsZXQgeyByZWRpcmVjdCwgcmVzZXQsIHJlZGlyZWN0VHlwZSB9ID0gcGFyYW07XG4gICAgY29uc3Qgcm91dGVyID0gKDAsIF9uYXZpZ2F0aW9uLnVzZVJvdXRlcikoKTtcbiAgICAoMCwgX3JlYWN0LnVzZUVmZmVjdCkoKCk9PntcbiAgICAgICAgX3JlYWN0LmRlZmF1bHQuc3RhcnRUcmFuc2l0aW9uKCgpPT57XG4gICAgICAgICAgICBpZiAocmVkaXJlY3RUeXBlID09PSBfcmVkaXJlY3QuUmVkaXJlY3RUeXBlLnB1c2gpIHtcbiAgICAgICAgICAgICAgICByb3V0ZXIucHVzaChyZWRpcmVjdCwge30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByb3V0ZXIucmVwbGFjZShyZWRpcmVjdCwge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgfSk7XG4gICAgfSwgW1xuICAgICAgICByZWRpcmVjdCxcbiAgICAgICAgcmVkaXJlY3RUeXBlLFxuICAgICAgICByZXNldCxcbiAgICAgICAgcm91dGVyXG4gICAgXSk7XG4gICAgcmV0dXJuIG51bGw7XG59XG5jbGFzcyBSZWRpcmVjdEVycm9yQm91bmRhcnkgZXh0ZW5kcyBfcmVhY3QuZGVmYXVsdC5Db21wb25lbnQge1xuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKCgwLCBfcmVkaXJlY3QuaXNSZWRpcmVjdEVycm9yKShlcnJvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9ICgwLCBfcmVkaXJlY3QuZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3IpKGVycm9yKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VHlwZSA9ICgwLCBfcmVkaXJlY3QuZ2V0UmVkaXJlY3RUeXBlRnJvbUVycm9yKShlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0OiB1cmwsXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RUeXBlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlLXRocm93IGlmIGVycm9yIGlzIG5vdCBmb3IgcmVkaXJlY3RcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyByZWRpcmVjdCwgcmVkaXJlY3RUeXBlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBpZiAocmVkaXJlY3QgIT09IG51bGwgJiYgcmVkaXJlY3RUeXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShIYW5kbGVSZWRpcmVjdCwge1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0OiByZWRpcmVjdCxcbiAgICAgICAgICAgICAgICByZWRpcmVjdFR5cGU6IHJlZGlyZWN0VHlwZSxcbiAgICAgICAgICAgICAgICByZXNldDogKCk9PnRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHJlZGlyZWN0OiBudWxsLFxuICAgICAgICAgICAgcmVkaXJlY3RUeXBlOiBudWxsXG4gICAgICAgIH07XG4gICAgfVxufVxuZnVuY3Rpb24gUmVkaXJlY3RCb3VuZGFyeShwYXJhbSkge1xuICAgIGxldCB7IGNoaWxkcmVuIH0gPSBwYXJhbTtcbiAgICBjb25zdCByb3V0ZXIgPSAoMCwgX25hdmlnYXRpb24udXNlUm91dGVyKSgpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFJlZGlyZWN0RXJyb3JCb3VuZGFyeSwge1xuICAgICAgICByb3V0ZXI6IHJvdXRlcixcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZGlyZWN0LWJvdW5kYXJ5LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIlJlZGlyZWN0RXJyb3JCb3VuZGFyeSIsIlJlZGlyZWN0Qm91bmRhcnkiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9uYXZpZ2F0aW9uIiwiX3JlZGlyZWN0IiwiSGFuZGxlUmVkaXJlY3QiLCJwYXJhbSIsInJlZGlyZWN0IiwicmVzZXQiLCJyZWRpcmVjdFR5cGUiLCJyb3V0ZXIiLCJ1c2VSb3V0ZXIiLCJ1c2VFZmZlY3QiLCJkZWZhdWx0Iiwic3RhcnRUcmFuc2l0aW9uIiwiUmVkaXJlY3RUeXBlIiwicHVzaCIsInJlcGxhY2UiLCJDb21wb25lbnQiLCJnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IiLCJlcnJvciIsImlzUmVkaXJlY3RFcnJvciIsInVybCIsImdldFVSTEZyb21SZWRpcmVjdEVycm9yIiwiZ2V0UmVkaXJlY3RUeXBlRnJvbUVycm9yIiwicmVuZGVyIiwic3RhdGUiLCJqc3giLCJzZXRTdGF0ZSIsInByb3BzIiwiY2hpbGRyZW4iLCJjb25zdHJ1Y3RvciIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/redirect-boundary.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/redirect-status-code.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/redirect-status-code.js ***! + \**************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RedirectStatusCode\", ({\n enumerable: true,\n get: function() {\n return RedirectStatusCode;\n }\n}));\nvar RedirectStatusCode;\n(function(RedirectStatusCode) {\n RedirectStatusCode[RedirectStatusCode[\"SeeOther\"] = 303] = \"SeeOther\";\n RedirectStatusCode[RedirectStatusCode[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n RedirectStatusCode[RedirectStatusCode[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n})(RedirectStatusCode || (RedirectStatusCode = {}));\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect-status-code.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlZGlyZWN0LXN0YXR1cy1jb2RlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxzREFBcUQ7SUFDakRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixJQUFJQTtBQUNILFVBQVNBLGtCQUFrQjtJQUN4QkEsa0JBQWtCLENBQUNBLGtCQUFrQixDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUc7SUFDM0RBLGtCQUFrQixDQUFDQSxrQkFBa0IsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLEdBQUc7SUFDcEVBLGtCQUFrQixDQUFDQSxrQkFBa0IsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLEdBQUc7QUFDeEUsR0FBR0Esc0JBQXVCQSxDQUFBQSxxQkFBcUIsQ0FBQztBQUVoRCxJQUFJLENBQUMsT0FBT0osUUFBUUssT0FBTyxLQUFLLGNBQWUsT0FBT0wsUUFBUUssT0FBTyxLQUFLLFlBQVlMLFFBQVFLLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT0wsUUFBUUssT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS1IsT0FBT0MsY0FBYyxDQUFDQyxRQUFRSyxPQUFPLEVBQUUsY0FBYztRQUFFSixPQUFPO0lBQUs7SUFDbkVILE9BQU9TLE1BQU0sQ0FBQ1AsUUFBUUssT0FBTyxFQUFFTDtJQUMvQlEsT0FBT1IsT0FBTyxHQUFHQSxRQUFRSyxPQUFPO0FBQ2xDLEVBRUEsZ0RBQWdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3Qtc3RhdHVzLWNvZGUuanM/NGIxMyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlZGlyZWN0U3RhdHVzQ29kZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUmVkaXJlY3RTdGF0dXNDb2RlO1xuICAgIH1cbn0pO1xudmFyIFJlZGlyZWN0U3RhdHVzQ29kZTtcbihmdW5jdGlvbihSZWRpcmVjdFN0YXR1c0NvZGUpIHtcbiAgICBSZWRpcmVjdFN0YXR1c0NvZGVbUmVkaXJlY3RTdGF0dXNDb2RlW1wiU2VlT3RoZXJcIl0gPSAzMDNdID0gXCJTZWVPdGhlclwiO1xuICAgIFJlZGlyZWN0U3RhdHVzQ29kZVtSZWRpcmVjdFN0YXR1c0NvZGVbXCJUZW1wb3JhcnlSZWRpcmVjdFwiXSA9IDMwN10gPSBcIlRlbXBvcmFyeVJlZGlyZWN0XCI7XG4gICAgUmVkaXJlY3RTdGF0dXNDb2RlW1JlZGlyZWN0U3RhdHVzQ29kZVtcIlBlcm1hbmVudFJlZGlyZWN0XCJdID0gMzA4XSA9IFwiUGVybWFuZW50UmVkaXJlY3RcIjtcbn0pKFJlZGlyZWN0U3RhdHVzQ29kZSB8fCAoUmVkaXJlY3RTdGF0dXNDb2RlID0ge30pKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkaXJlY3Qtc3RhdHVzLWNvZGUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIlJlZGlyZWN0U3RhdHVzQ29kZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/redirect-status-code.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/redirect.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/client/components/redirect.js ***! + \**************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RedirectType: function() {\n return RedirectType;\n },\n getRedirectError: function() {\n return getRedirectError;\n },\n redirect: function() {\n return redirect;\n },\n permanentRedirect: function() {\n return permanentRedirect;\n },\n isRedirectError: function() {\n return isRedirectError;\n },\n getURLFromRedirectError: function() {\n return getURLFromRedirectError;\n },\n getRedirectTypeFromError: function() {\n return getRedirectTypeFromError;\n },\n getRedirectStatusCodeFromError: function() {\n return getRedirectStatusCodeFromError;\n }\n});\nconst _requestasyncstorageexternal = __webpack_require__(/*! ./request-async-storage.external */ \"./request-async-storage.external\");\nconst _actionasyncstorageexternal = __webpack_require__(/*! ./action-async-storage.external */ \"./action-async-storage.external\");\nconst _redirectstatuscode = __webpack_require__(/*! ./redirect-status-code */ \"(ssr)/./node_modules/next/dist/client/components/redirect-status-code.js\");\nconst REDIRECT_ERROR_CODE = \"NEXT_REDIRECT\";\nvar RedirectType;\n(function(RedirectType) {\n RedirectType[\"push\"] = \"push\";\n RedirectType[\"replace\"] = \"replace\";\n})(RedirectType || (RedirectType = {}));\nfunction getRedirectError(url, type, statusCode) {\n if (statusCode === void 0) statusCode = _redirectstatuscode.RedirectStatusCode.TemporaryRedirect;\n const error = new Error(REDIRECT_ERROR_CODE);\n error.digest = REDIRECT_ERROR_CODE + \";\" + type + \";\" + url + \";\" + statusCode + \";\";\n const requestStore = _requestasyncstorageexternal.requestAsyncStorage.getStore();\n if (requestStore) {\n error.mutableCookies = requestStore.mutableCookies;\n }\n return error;\n}\nfunction redirect(url, type) {\n if (type === void 0) type = \"replace\";\n const actionStore = _actionasyncstorageexternal.actionAsyncStorage.getStore();\n throw getRedirectError(url, type, // as we don't want the POST request to follow the redirect,\n // as it could result in erroneous re-submissions.\n (actionStore == null ? void 0 : actionStore.isAction) ? _redirectstatuscode.RedirectStatusCode.SeeOther : _redirectstatuscode.RedirectStatusCode.TemporaryRedirect);\n}\nfunction permanentRedirect(url, type) {\n if (type === void 0) type = \"replace\";\n const actionStore = _actionasyncstorageexternal.actionAsyncStorage.getStore();\n throw getRedirectError(url, type, // as we don't want the POST request to follow the redirect,\n // as it could result in erroneous re-submissions.\n (actionStore == null ? void 0 : actionStore.isAction) ? _redirectstatuscode.RedirectStatusCode.SeeOther : _redirectstatuscode.RedirectStatusCode.PermanentRedirect);\n}\nfunction isRedirectError(error) {\n if (typeof error !== \"object\" || error === null || !(\"digest\" in error) || typeof error.digest !== \"string\") {\n return false;\n }\n const [errorCode, type, destination, status] = error.digest.split(\";\", 4);\n const statusCode = Number(status);\n return errorCode === REDIRECT_ERROR_CODE && (type === \"replace\" || type === \"push\") && typeof destination === \"string\" && !isNaN(statusCode) && statusCode in _redirectstatuscode.RedirectStatusCode;\n}\nfunction getURLFromRedirectError(error) {\n if (!isRedirectError(error)) return null;\n // Slices off the beginning of the digest that contains the code and the\n // separating ';'.\n return error.digest.split(\";\", 3)[2];\n}\nfunction getRedirectTypeFromError(error) {\n if (!isRedirectError(error)) {\n throw new Error(\"Not a redirect error\");\n }\n return error.digest.split(\";\", 2)[1];\n}\nfunction getRedirectStatusCodeFromError(error) {\n if (!isRedirectError(error)) {\n throw new Error(\"Not a redirect error\");\n }\n return Number(error.digest.split(\";\", 4)[3]);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlZGlyZWN0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBU047QUFDQSxTQUFTUyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJZixPQUFPQyxjQUFjLENBQUNhLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUVgsU0FBUztJQUNiRyxjQUFjO1FBQ1YsT0FBT0E7SUFDWDtJQUNBQyxrQkFBa0I7UUFDZCxPQUFPQTtJQUNYO0lBQ0FDLFVBQVU7UUFDTixPQUFPQTtJQUNYO0lBQ0FDLG1CQUFtQjtRQUNmLE9BQU9BO0lBQ1g7SUFDQUMsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtJQUNBQyx5QkFBeUI7UUFDckIsT0FBT0E7SUFDWDtJQUNBQywwQkFBMEI7UUFDdEIsT0FBT0E7SUFDWDtJQUNBQyxnQ0FBZ0M7UUFDNUIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sK0JBQStCQyxtQkFBT0EsQ0FBQywwRUFBa0M7QUFDL0UsTUFBTUMsOEJBQThCRCxtQkFBT0EsQ0FBQyx3RUFBaUM7QUFDN0UsTUFBTUUsc0JBQXNCRixtQkFBT0EsQ0FBQyx3R0FBd0I7QUFDNUQsTUFBTUcsc0JBQXNCO0FBQzVCLElBQUlsQjtBQUNILFVBQVNBLFlBQVk7SUFDbEJBLFlBQVksQ0FBQyxPQUFPLEdBQUc7SUFDdkJBLFlBQVksQ0FBQyxVQUFVLEdBQUc7QUFDOUIsR0FBR0EsZ0JBQWlCQSxDQUFBQSxlQUFlLENBQUM7QUFDcEMsU0FBU0MsaUJBQWlCa0IsR0FBRyxFQUFFQyxJQUFJLEVBQUVDLFVBQVU7SUFDM0MsSUFBSUEsZUFBZSxLQUFLLEdBQUdBLGFBQWFKLG9CQUFvQkssa0JBQWtCLENBQUNDLGlCQUFpQjtJQUNoRyxNQUFNQyxRQUFRLElBQUlDLE1BQU1QO0lBQ3hCTSxNQUFNRSxNQUFNLEdBQUdSLHNCQUFzQixNQUFNRSxPQUFPLE1BQU1ELE1BQU0sTUFBTUUsYUFBYTtJQUNqRixNQUFNTSxlQUFlYiw2QkFBNkJjLG1CQUFtQixDQUFDQyxRQUFRO0lBQzlFLElBQUlGLGNBQWM7UUFDZEgsTUFBTU0sY0FBYyxHQUFHSCxhQUFhRyxjQUFjO0lBQ3REO0lBQ0EsT0FBT047QUFDWDtBQUNBLFNBQVN0QixTQUFTaUIsR0FBRyxFQUFFQyxJQUFJO0lBQ3ZCLElBQUlBLFNBQVMsS0FBSyxHQUFHQSxPQUFPO0lBQzVCLE1BQU1XLGNBQWNmLDRCQUE0QmdCLGtCQUFrQixDQUFDSCxRQUFRO0lBQzNFLE1BQU01QixpQkFBaUJrQixLQUFLQyxNQUc1Qiw0REFGNEQ7SUFDNUQsa0RBQWtEO0lBQ2pEVyxDQUFBQSxlQUFlLE9BQU8sS0FBSyxJQUFJQSxZQUFZRSxRQUFRLElBQUloQixvQkFBb0JLLGtCQUFrQixDQUFDWSxRQUFRLEdBQUdqQixvQkFBb0JLLGtCQUFrQixDQUFDQyxpQkFBaUI7QUFDdEs7QUFDQSxTQUFTcEIsa0JBQWtCZ0IsR0FBRyxFQUFFQyxJQUFJO0lBQ2hDLElBQUlBLFNBQVMsS0FBSyxHQUFHQSxPQUFPO0lBQzVCLE1BQU1XLGNBQWNmLDRCQUE0QmdCLGtCQUFrQixDQUFDSCxRQUFRO0lBQzNFLE1BQU01QixpQkFBaUJrQixLQUFLQyxNQUc1Qiw0REFGNEQ7SUFDNUQsa0RBQWtEO0lBQ2pEVyxDQUFBQSxlQUFlLE9BQU8sS0FBSyxJQUFJQSxZQUFZRSxRQUFRLElBQUloQixvQkFBb0JLLGtCQUFrQixDQUFDWSxRQUFRLEdBQUdqQixvQkFBb0JLLGtCQUFrQixDQUFDYSxpQkFBaUI7QUFDdEs7QUFDQSxTQUFTL0IsZ0JBQWdCb0IsS0FBSztJQUMxQixJQUFJLE9BQU9BLFVBQVUsWUFBWUEsVUFBVSxRQUFRLENBQUUsYUFBWUEsS0FBSSxLQUFNLE9BQU9BLE1BQU1FLE1BQU0sS0FBSyxVQUFVO1FBQ3pHLE9BQU87SUFDWDtJQUNBLE1BQU0sQ0FBQ1UsV0FBV2hCLE1BQU1pQixhQUFhQyxPQUFPLEdBQUdkLE1BQU1FLE1BQU0sQ0FBQ2EsS0FBSyxDQUFDLEtBQUs7SUFDdkUsTUFBTWxCLGFBQWFtQixPQUFPRjtJQUMxQixPQUFPRixjQUFjbEIsdUJBQXdCRSxDQUFBQSxTQUFTLGFBQWFBLFNBQVMsTUFBSyxLQUFNLE9BQU9pQixnQkFBZ0IsWUFBWSxDQUFDSSxNQUFNcEIsZUFBZUEsY0FBY0osb0JBQW9CSyxrQkFBa0I7QUFDeE07QUFDQSxTQUFTakIsd0JBQXdCbUIsS0FBSztJQUNsQyxJQUFJLENBQUNwQixnQkFBZ0JvQixRQUFRLE9BQU87SUFDcEMsd0VBQXdFO0lBQ3hFLGtCQUFrQjtJQUNsQixPQUFPQSxNQUFNRSxNQUFNLENBQUNhLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3hDO0FBQ0EsU0FBU2pDLHlCQUF5QmtCLEtBQUs7SUFDbkMsSUFBSSxDQUFDcEIsZ0JBQWdCb0IsUUFBUTtRQUN6QixNQUFNLElBQUlDLE1BQU07SUFDcEI7SUFDQSxPQUFPRCxNQUFNRSxNQUFNLENBQUNhLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3hDO0FBQ0EsU0FBU2hDLCtCQUErQmlCLEtBQUs7SUFDekMsSUFBSSxDQUFDcEIsZ0JBQWdCb0IsUUFBUTtRQUN6QixNQUFNLElBQUlDLE1BQU07SUFDcEI7SUFDQSxPQUFPZSxPQUFPaEIsTUFBTUUsTUFBTSxDQUFDYSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUMvQztBQUVBLElBQUksQ0FBQyxPQUFPMUMsUUFBUTZDLE9BQU8sS0FBSyxjQUFlLE9BQU83QyxRQUFRNkMsT0FBTyxLQUFLLFlBQVk3QyxRQUFRNkMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPN0MsUUFBUTZDLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktoRCxPQUFPQyxjQUFjLENBQUNDLFFBQVE2QyxPQUFPLEVBQUUsY0FBYztRQUFFNUMsT0FBTztJQUFLO0lBQ25FSCxPQUFPaUQsTUFBTSxDQUFDL0MsUUFBUTZDLE9BQU8sRUFBRTdDO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVE2QyxPQUFPO0FBQ2xDLEVBRUEsb0NBQW9DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QuanM/YjI1YiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFJlZGlyZWN0VHlwZTogbnVsbCxcbiAgICBnZXRSZWRpcmVjdEVycm9yOiBudWxsLFxuICAgIHJlZGlyZWN0OiBudWxsLFxuICAgIHBlcm1hbmVudFJlZGlyZWN0OiBudWxsLFxuICAgIGlzUmVkaXJlY3RFcnJvcjogbnVsbCxcbiAgICBnZXRVUkxGcm9tUmVkaXJlY3RFcnJvcjogbnVsbCxcbiAgICBnZXRSZWRpcmVjdFR5cGVGcm9tRXJyb3I6IG51bGwsXG4gICAgZ2V0UmVkaXJlY3RTdGF0dXNDb2RlRnJvbUVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIFJlZGlyZWN0VHlwZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSZWRpcmVjdFR5cGU7XG4gICAgfSxcbiAgICBnZXRSZWRpcmVjdEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFJlZGlyZWN0RXJyb3I7XG4gICAgfSxcbiAgICByZWRpcmVjdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZWRpcmVjdDtcbiAgICB9LFxuICAgIHBlcm1hbmVudFJlZGlyZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHBlcm1hbmVudFJlZGlyZWN0O1xuICAgIH0sXG4gICAgaXNSZWRpcmVjdEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzUmVkaXJlY3RFcnJvcjtcbiAgICB9LFxuICAgIGdldFVSTEZyb21SZWRpcmVjdEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFVSTEZyb21SZWRpcmVjdEVycm9yO1xuICAgIH0sXG4gICAgZ2V0UmVkaXJlY3RUeXBlRnJvbUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFJlZGlyZWN0VHlwZUZyb21FcnJvcjtcbiAgICB9LFxuICAgIGdldFJlZGlyZWN0U3RhdHVzQ29kZUZyb21FcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRSZWRpcmVjdFN0YXR1c0NvZGVGcm9tRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfcmVxdWVzdGFzeW5jc3RvcmFnZWV4dGVybmFsID0gcmVxdWlyZShcIi4vcmVxdWVzdC1hc3luYy1zdG9yYWdlLmV4dGVybmFsXCIpO1xuY29uc3QgX2FjdGlvbmFzeW5jc3RvcmFnZWV4dGVybmFsID0gcmVxdWlyZShcIi4vYWN0aW9uLWFzeW5jLXN0b3JhZ2UuZXh0ZXJuYWxcIik7XG5jb25zdCBfcmVkaXJlY3RzdGF0dXNjb2RlID0gcmVxdWlyZShcIi4vcmVkaXJlY3Qtc3RhdHVzLWNvZGVcIik7XG5jb25zdCBSRURJUkVDVF9FUlJPUl9DT0RFID0gXCJORVhUX1JFRElSRUNUXCI7XG52YXIgUmVkaXJlY3RUeXBlO1xuKGZ1bmN0aW9uKFJlZGlyZWN0VHlwZSkge1xuICAgIFJlZGlyZWN0VHlwZVtcInB1c2hcIl0gPSBcInB1c2hcIjtcbiAgICBSZWRpcmVjdFR5cGVbXCJyZXBsYWNlXCJdID0gXCJyZXBsYWNlXCI7XG59KShSZWRpcmVjdFR5cGUgfHwgKFJlZGlyZWN0VHlwZSA9IHt9KSk7XG5mdW5jdGlvbiBnZXRSZWRpcmVjdEVycm9yKHVybCwgdHlwZSwgc3RhdHVzQ29kZSkge1xuICAgIGlmIChzdGF0dXNDb2RlID09PSB2b2lkIDApIHN0YXR1c0NvZGUgPSBfcmVkaXJlY3RzdGF0dXNjb2RlLlJlZGlyZWN0U3RhdHVzQ29kZS5UZW1wb3JhcnlSZWRpcmVjdDtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihSRURJUkVDVF9FUlJPUl9DT0RFKTtcbiAgICBlcnJvci5kaWdlc3QgPSBSRURJUkVDVF9FUlJPUl9DT0RFICsgXCI7XCIgKyB0eXBlICsgXCI7XCIgKyB1cmwgKyBcIjtcIiArIHN0YXR1c0NvZGUgKyBcIjtcIjtcbiAgICBjb25zdCByZXF1ZXN0U3RvcmUgPSBfcmVxdWVzdGFzeW5jc3RvcmFnZWV4dGVybmFsLnJlcXVlc3RBc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgICBpZiAocmVxdWVzdFN0b3JlKSB7XG4gICAgICAgIGVycm9yLm11dGFibGVDb29raWVzID0gcmVxdWVzdFN0b3JlLm11dGFibGVDb29raWVzO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3I7XG59XG5mdW5jdGlvbiByZWRpcmVjdCh1cmwsIHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB0eXBlID0gXCJyZXBsYWNlXCI7XG4gICAgY29uc3QgYWN0aW9uU3RvcmUgPSBfYWN0aW9uYXN5bmNzdG9yYWdlZXh0ZXJuYWwuYWN0aW9uQXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgdGhyb3cgZ2V0UmVkaXJlY3RFcnJvcih1cmwsIHR5cGUsIC8vIElmIHdlJ3JlIGluIGFuIGFjdGlvbiwgd2Ugd2FudCB0byB1c2UgYSAzMDMgcmVkaXJlY3RcbiAgICAvLyBhcyB3ZSBkb24ndCB3YW50IHRoZSBQT1NUIHJlcXVlc3QgdG8gZm9sbG93IHRoZSByZWRpcmVjdCxcbiAgICAvLyBhcyBpdCBjb3VsZCByZXN1bHQgaW4gZXJyb25lb3VzIHJlLXN1Ym1pc3Npb25zLlxuICAgIChhY3Rpb25TdG9yZSA9PSBudWxsID8gdm9pZCAwIDogYWN0aW9uU3RvcmUuaXNBY3Rpb24pID8gX3JlZGlyZWN0c3RhdHVzY29kZS5SZWRpcmVjdFN0YXR1c0NvZGUuU2VlT3RoZXIgOiBfcmVkaXJlY3RzdGF0dXNjb2RlLlJlZGlyZWN0U3RhdHVzQ29kZS5UZW1wb3JhcnlSZWRpcmVjdCk7XG59XG5mdW5jdGlvbiBwZXJtYW5lbnRSZWRpcmVjdCh1cmwsIHR5cGUpIHtcbiAgICBpZiAodHlwZSA9PT0gdm9pZCAwKSB0eXBlID0gXCJyZXBsYWNlXCI7XG4gICAgY29uc3QgYWN0aW9uU3RvcmUgPSBfYWN0aW9uYXN5bmNzdG9yYWdlZXh0ZXJuYWwuYWN0aW9uQXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgdGhyb3cgZ2V0UmVkaXJlY3RFcnJvcih1cmwsIHR5cGUsIC8vIElmIHdlJ3JlIGluIGFuIGFjdGlvbiwgd2Ugd2FudCB0byB1c2UgYSAzMDMgcmVkaXJlY3RcbiAgICAvLyBhcyB3ZSBkb24ndCB3YW50IHRoZSBQT1NUIHJlcXVlc3QgdG8gZm9sbG93IHRoZSByZWRpcmVjdCxcbiAgICAvLyBhcyBpdCBjb3VsZCByZXN1bHQgaW4gZXJyb25lb3VzIHJlLXN1Ym1pc3Npb25zLlxuICAgIChhY3Rpb25TdG9yZSA9PSBudWxsID8gdm9pZCAwIDogYWN0aW9uU3RvcmUuaXNBY3Rpb24pID8gX3JlZGlyZWN0c3RhdHVzY29kZS5SZWRpcmVjdFN0YXR1c0NvZGUuU2VlT3RoZXIgOiBfcmVkaXJlY3RzdGF0dXNjb2RlLlJlZGlyZWN0U3RhdHVzQ29kZS5QZXJtYW5lbnRSZWRpcmVjdCk7XG59XG5mdW5jdGlvbiBpc1JlZGlyZWN0RXJyb3IoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yICE9PSBcIm9iamVjdFwiIHx8IGVycm9yID09PSBudWxsIHx8ICEoXCJkaWdlc3RcIiBpbiBlcnJvcikgfHwgdHlwZW9mIGVycm9yLmRpZ2VzdCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IFtlcnJvckNvZGUsIHR5cGUsIGRlc3RpbmF0aW9uLCBzdGF0dXNdID0gZXJyb3IuZGlnZXN0LnNwbGl0KFwiO1wiLCA0KTtcbiAgICBjb25zdCBzdGF0dXNDb2RlID0gTnVtYmVyKHN0YXR1cyk7XG4gICAgcmV0dXJuIGVycm9yQ29kZSA9PT0gUkVESVJFQ1RfRVJST1JfQ09ERSAmJiAodHlwZSA9PT0gXCJyZXBsYWNlXCIgfHwgdHlwZSA9PT0gXCJwdXNoXCIpICYmIHR5cGVvZiBkZXN0aW5hdGlvbiA9PT0gXCJzdHJpbmdcIiAmJiAhaXNOYU4oc3RhdHVzQ29kZSkgJiYgc3RhdHVzQ29kZSBpbiBfcmVkaXJlY3RzdGF0dXNjb2RlLlJlZGlyZWN0U3RhdHVzQ29kZTtcbn1cbmZ1bmN0aW9uIGdldFVSTEZyb21SZWRpcmVjdEVycm9yKGVycm9yKSB7XG4gICAgaWYgKCFpc1JlZGlyZWN0RXJyb3IoZXJyb3IpKSByZXR1cm4gbnVsbDtcbiAgICAvLyBTbGljZXMgb2ZmIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRpZ2VzdCB0aGF0IGNvbnRhaW5zIHRoZSBjb2RlIGFuZCB0aGVcbiAgICAvLyBzZXBhcmF0aW5nICc7Jy5cbiAgICByZXR1cm4gZXJyb3IuZGlnZXN0LnNwbGl0KFwiO1wiLCAzKVsyXTtcbn1cbmZ1bmN0aW9uIGdldFJlZGlyZWN0VHlwZUZyb21FcnJvcihlcnJvcikge1xuICAgIGlmICghaXNSZWRpcmVjdEVycm9yKGVycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSByZWRpcmVjdCBlcnJvclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yLmRpZ2VzdC5zcGxpdChcIjtcIiwgMilbMV07XG59XG5mdW5jdGlvbiBnZXRSZWRpcmVjdFN0YXR1c0NvZGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoIWlzUmVkaXJlY3RFcnJvcihlcnJvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGEgcmVkaXJlY3QgZXJyb3JcIik7XG4gICAgfVxuICAgIHJldHVybiBOdW1iZXIoZXJyb3IuZGlnZXN0LnNwbGl0KFwiO1wiLCA0KVszXSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZGlyZWN0LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIlJlZGlyZWN0VHlwZSIsImdldFJlZGlyZWN0RXJyb3IiLCJyZWRpcmVjdCIsInBlcm1hbmVudFJlZGlyZWN0IiwiaXNSZWRpcmVjdEVycm9yIiwiZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3IiLCJnZXRSZWRpcmVjdFR5cGVGcm9tRXJyb3IiLCJnZXRSZWRpcmVjdFN0YXR1c0NvZGVGcm9tRXJyb3IiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfcmVxdWVzdGFzeW5jc3RvcmFnZWV4dGVybmFsIiwicmVxdWlyZSIsIl9hY3Rpb25hc3luY3N0b3JhZ2VleHRlcm5hbCIsIl9yZWRpcmVjdHN0YXR1c2NvZGUiLCJSRURJUkVDVF9FUlJPUl9DT0RFIiwidXJsIiwidHlwZSIsInN0YXR1c0NvZGUiLCJSZWRpcmVjdFN0YXR1c0NvZGUiLCJUZW1wb3JhcnlSZWRpcmVjdCIsImVycm9yIiwiRXJyb3IiLCJkaWdlc3QiLCJyZXF1ZXN0U3RvcmUiLCJyZXF1ZXN0QXN5bmNTdG9yYWdlIiwiZ2V0U3RvcmUiLCJtdXRhYmxlQ29va2llcyIsImFjdGlvblN0b3JlIiwiYWN0aW9uQXN5bmNTdG9yYWdlIiwiaXNBY3Rpb24iLCJTZWVPdGhlciIsIlBlcm1hbmVudFJlZGlyZWN0IiwiZXJyb3JDb2RlIiwiZGVzdGluYXRpb24iLCJzdGF0dXMiLCJzcGxpdCIsIk51bWJlciIsImlzTmFOIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/redirect.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/render-from-template-context.js ***! + \**********************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return RenderFromTemplateContext;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js\");\nfunction RenderFromTemplateContext() {\n const children = (0, _react.useContext)(_approutercontextsharedruntime.TemplateContext);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=render-from-template-context.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanMiLCJtYXBwaW5ncyI6InFEQUVhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyw0QkFBNEJDLG1CQUFPQSxDQUFDLG9IQUEwQztBQUNwRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxnSUFBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILDBCQUEwQkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyx3R0FBTztBQUN4RSxNQUFNSSxpQ0FBaUNKLG1CQUFPQSxDQUFDLHVLQUFvRDtBQUNuRyxTQUFTRjtJQUNMLE1BQU1PLFdBQVcsQ0FBQyxHQUFHSCxPQUFPSSxVQUFVLEVBQUVGLCtCQUErQkcsZUFBZTtJQUN0RixPQUFxQixXQUFILEdBQUksSUFBR04sWUFBWU8sR0FBRyxFQUFFUCxZQUFZUSxRQUFRLEVBQUU7UUFDNURKLFVBQVVBO0lBQ2Q7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPWCxRQUFRZ0IsT0FBTyxLQUFLLGNBQWUsT0FBT2hCLFFBQVFnQixPQUFPLEtBQUssWUFBWWhCLFFBQVFnQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9oQixRQUFRZ0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS25CLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWdCLE9BQU8sRUFBRSxjQUFjO1FBQUVmLE9BQU87SUFBSztJQUNuRUgsT0FBT29CLE1BQU0sQ0FBQ2xCLFFBQVFnQixPQUFPLEVBQUVoQjtJQUMvQm1CLE9BQU9uQixPQUFPLEdBQUdBLFFBQVFnQixPQUFPO0FBQ2xDLEVBRUEsd0RBQXdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qcz84ZWU2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJlbmRlckZyb21UZW1wbGF0ZUNvbnRleHQ7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5mdW5jdGlvbiBSZW5kZXJGcm9tVGVtcGxhdGVDb250ZXh0KCkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuVGVtcGxhdGVDb250ZXh0KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiUmVuZGVyRnJvbVRlbXBsYXRlQ29udGV4dCIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lIiwiY2hpbGRyZW4iLCJ1c2VDb250ZXh0IiwiVGVtcGxhdGVDb250ZXh0IiwianN4IiwiRnJhZ21lbnQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/render-from-template-context.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js": +/*!**************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js ***! + \**************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"applyFlightData\", ({\n enumerable: true,\n get: function() {\n return applyFlightData;\n }\n}));\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _fillcachewithnewsubtreedata = __webpack_require__(/*! ./fill-cache-with-new-subtree-data */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js\");\nfunction applyFlightData(existingCache, cache, flightDataPath, wasPrefetched) {\n if (wasPrefetched === void 0) wasPrefetched = false;\n // The one before last item is the router state tree patch\n const [treePatch, cacheNodeSeedData, head] = flightDataPath.slice(-3);\n // Handles case where prefetch only returns the router tree patch without rendered components.\n if (cacheNodeSeedData === null) {\n return false;\n }\n if (flightDataPath.length === 3) {\n const rsc = cacheNodeSeedData[2];\n cache.rsc = rsc;\n // This is a PPR-only field. When PPR is enabled, we shouldn't hit\n // this path during a navigation, but until PPR is fully implemented\n // yet it's possible the existing node does have a non-null\n // `prefetchRsc`. As an incremental step, we'll just de-opt to the\n // old behavior — no PPR value.\n cache.prefetchRsc = null;\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(cache, existingCache, treePatch, cacheNodeSeedData, head, wasPrefetched);\n } else {\n // Copy rsc for the root node of the cache.\n cache.rsc = existingCache.rsc;\n // This is a PPR-only field. Unlike the previous branch, since we're\n // just cloning the existing cache node, we might as well keep the\n // PPR value, if it exists.\n cache.prefetchRsc = existingCache.prefetchRsc;\n cache.parallelRoutes = new Map(existingCache.parallelRoutes);\n // Create a copy of the existing cache with the rsc applied.\n (0, _fillcachewithnewsubtreedata.fillCacheWithNewSubTreeData)(cache, existingCache, flightDataPath, wasPrefetched);\n }\n return true;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=apply-flight-data.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2FwcGx5LWZsaWdodC1kYXRhLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxtREFBa0Q7SUFDOUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQ0FBaUNDLG1CQUFPQSxDQUFDLHFKQUF1QztBQUN0RixNQUFNQywrQkFBK0JELG1CQUFPQSxDQUFDLCtJQUFvQztBQUNqRixTQUFTRixnQkFBZ0JJLGFBQWEsRUFBRUMsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLGFBQWE7SUFDeEUsSUFBSUEsa0JBQWtCLEtBQUssR0FBR0EsZ0JBQWdCO0lBQzlDLDBEQUEwRDtJQUMxRCxNQUFNLENBQUNDLFdBQVdDLG1CQUFtQkMsS0FBSyxHQUFHSixlQUFlSyxLQUFLLENBQUMsQ0FBQztJQUNuRSw4RkFBOEY7SUFDOUYsSUFBSUYsc0JBQXNCLE1BQU07UUFDNUIsT0FBTztJQUNYO0lBQ0EsSUFBSUgsZUFBZU0sTUFBTSxLQUFLLEdBQUc7UUFDN0IsTUFBTUMsTUFBTUosaUJBQWlCLENBQUMsRUFBRTtRQUNoQ0osTUFBTVEsR0FBRyxHQUFHQTtRQUNaLGtFQUFrRTtRQUNsRSxvRUFBb0U7UUFDcEUsMkRBQTJEO1FBQzNELGtFQUFrRTtRQUNsRSwrQkFBK0I7UUFDL0JSLE1BQU1TLFdBQVcsR0FBRztRQUNuQixJQUFHYiwrQkFBK0JjLDZCQUE2QixFQUFFVixPQUFPRCxlQUFlSSxXQUFXQyxtQkFBbUJDLE1BQU1IO0lBQ2hJLE9BQU87UUFDSCwyQ0FBMkM7UUFDM0NGLE1BQU1RLEdBQUcsR0FBR1QsY0FBY1MsR0FBRztRQUM3QixvRUFBb0U7UUFDcEUsa0VBQWtFO1FBQ2xFLDJCQUEyQjtRQUMzQlIsTUFBTVMsV0FBVyxHQUFHVixjQUFjVSxXQUFXO1FBQzdDVCxNQUFNVyxjQUFjLEdBQUcsSUFBSUMsSUFBSWIsY0FBY1ksY0FBYztRQUMzRCw0REFBNEQ7UUFDM0QsSUFBR2IsNkJBQTZCZSwyQkFBMkIsRUFBRWIsT0FBT0QsZUFBZUUsZ0JBQWdCQztJQUN4RztJQUNBLE9BQU87QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPWCxRQUFRdUIsT0FBTyxLQUFLLGNBQWUsT0FBT3ZCLFFBQVF1QixPQUFPLEtBQUssWUFBWXZCLFFBQVF1QixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU92QixRQUFRdUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzFCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXVCLE9BQU8sRUFBRSxjQUFjO1FBQUV0QixPQUFPO0lBQUs7SUFDbkVILE9BQU8yQixNQUFNLENBQUN6QixRQUFRdUIsT0FBTyxFQUFFdkI7SUFDL0IwQixPQUFPMUIsT0FBTyxHQUFHQSxRQUFRdUIsT0FBTztBQUNsQyxFQUVBLDZDQUE2QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2FwcGx5LWZsaWdodC1kYXRhLmpzP2Y2ZDYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcHBseUZsaWdodERhdGFcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFwcGx5RmxpZ2h0RGF0YTtcbiAgICB9XG59KTtcbmNvbnN0IF9maWxsbGF6eWl0ZW1zdGlsbGxlYWZ3aXRoaGVhZCA9IHJlcXVpcmUoXCIuL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkXCIpO1xuY29uc3QgX2ZpbGxjYWNoZXdpdGhuZXdzdWJ0cmVlZGF0YSA9IHJlcXVpcmUoXCIuL2ZpbGwtY2FjaGUtd2l0aC1uZXctc3VidHJlZS1kYXRhXCIpO1xuZnVuY3Rpb24gYXBwbHlGbGlnaHREYXRhKGV4aXN0aW5nQ2FjaGUsIGNhY2hlLCBmbGlnaHREYXRhUGF0aCwgd2FzUHJlZmV0Y2hlZCkge1xuICAgIGlmICh3YXNQcmVmZXRjaGVkID09PSB2b2lkIDApIHdhc1ByZWZldGNoZWQgPSBmYWxzZTtcbiAgICAvLyBUaGUgb25lIGJlZm9yZSBsYXN0IGl0ZW0gaXMgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIHBhdGNoXG4gICAgY29uc3QgW3RyZWVQYXRjaCwgY2FjaGVOb2RlU2VlZERhdGEsIGhlYWRdID0gZmxpZ2h0RGF0YVBhdGguc2xpY2UoLTMpO1xuICAgIC8vIEhhbmRsZXMgY2FzZSB3aGVyZSBwcmVmZXRjaCBvbmx5IHJldHVybnMgdGhlIHJvdXRlciB0cmVlIHBhdGNoIHdpdGhvdXQgcmVuZGVyZWQgY29tcG9uZW50cy5cbiAgICBpZiAoY2FjaGVOb2RlU2VlZERhdGEgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmxpZ2h0RGF0YVBhdGgubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGNvbnN0IHJzYyA9IGNhY2hlTm9kZVNlZWREYXRhWzJdO1xuICAgICAgICBjYWNoZS5yc2MgPSByc2M7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBQUFItb25seSBmaWVsZC4gV2hlbiBQUFIgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkbid0IGhpdFxuICAgICAgICAvLyB0aGlzIHBhdGggZHVyaW5nIGEgbmF2aWdhdGlvbiwgYnV0IHVudGlsIFBQUiBpcyBmdWxseSBpbXBsZW1lbnRlZFxuICAgICAgICAvLyB5ZXQgaXQncyBwb3NzaWJsZSB0aGUgZXhpc3Rpbmcgbm9kZSBkb2VzIGhhdmUgYSBub24tbnVsbFxuICAgICAgICAvLyBgcHJlZmV0Y2hSc2NgLiBBcyBhbiBpbmNyZW1lbnRhbCBzdGVwLCB3ZSdsbCBqdXN0IGRlLW9wdCB0byB0aGVcbiAgICAgICAgLy8gb2xkIGJlaGF2aW9yIOKAlCBubyBQUFIgdmFsdWUuXG4gICAgICAgIGNhY2hlLnByZWZldGNoUnNjID0gbnVsbDtcbiAgICAgICAgKDAsIF9maWxsbGF6eWl0ZW1zdGlsbGxlYWZ3aXRoaGVhZC5maWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCkoY2FjaGUsIGV4aXN0aW5nQ2FjaGUsIHRyZWVQYXRjaCwgY2FjaGVOb2RlU2VlZERhdGEsIGhlYWQsIHdhc1ByZWZldGNoZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENvcHkgcnNjIGZvciB0aGUgcm9vdCBub2RlIG9mIHRoZSBjYWNoZS5cbiAgICAgICAgY2FjaGUucnNjID0gZXhpc3RpbmdDYWNoZS5yc2M7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBQUFItb25seSBmaWVsZC4gVW5saWtlIHRoZSBwcmV2aW91cyBicmFuY2gsIHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGp1c3QgY2xvbmluZyB0aGUgZXhpc3RpbmcgY2FjaGUgbm9kZSwgd2UgbWlnaHQgYXMgd2VsbCBrZWVwIHRoZVxuICAgICAgICAvLyBQUFIgdmFsdWUsIGlmIGl0IGV4aXN0cy5cbiAgICAgICAgY2FjaGUucHJlZmV0Y2hSc2MgPSBleGlzdGluZ0NhY2hlLnByZWZldGNoUnNjO1xuICAgICAgICBjYWNoZS5wYXJhbGxlbFJvdXRlcyA9IG5ldyBNYXAoZXhpc3RpbmdDYWNoZS5wYXJhbGxlbFJvdXRlcyk7XG4gICAgICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGV4aXN0aW5nIGNhY2hlIHdpdGggdGhlIHJzYyBhcHBsaWVkLlxuICAgICAgICAoMCwgX2ZpbGxjYWNoZXdpdGhuZXdzdWJ0cmVlZGF0YS5maWxsQ2FjaGVXaXRoTmV3U3ViVHJlZURhdGEpKGNhY2hlLCBleGlzdGluZ0NhY2hlLCBmbGlnaHREYXRhUGF0aCwgd2FzUHJlZmV0Y2hlZCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHBseS1mbGlnaHQtZGF0YS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiYXBwbHlGbGlnaHREYXRhIiwiX2ZpbGxsYXp5aXRlbXN0aWxsbGVhZndpdGhoZWFkIiwicmVxdWlyZSIsIl9maWxsY2FjaGV3aXRobmV3c3VidHJlZWRhdGEiLCJleGlzdGluZ0NhY2hlIiwiY2FjaGUiLCJmbGlnaHREYXRhUGF0aCIsIndhc1ByZWZldGNoZWQiLCJ0cmVlUGF0Y2giLCJjYWNoZU5vZGVTZWVkRGF0YSIsImhlYWQiLCJzbGljZSIsImxlbmd0aCIsInJzYyIsInByZWZldGNoUnNjIiwiZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQiLCJwYXJhbGxlbFJvdXRlcyIsIk1hcCIsImZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js ***! + \*****************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n applyRouterStatePatchToFullTree: function() {\n return applyRouterStatePatchToFullTree;\n },\n applyRouterStatePatchToTreeSkipDefault: function() {\n return applyRouterStatePatchToTreeSkipDefault;\n }\n});\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(ssr)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(ssr)/./node_modules/next/dist/client/components/match-segments.js\");\n/**\n * Deep merge of the two router states. Parallel route keys are preserved if the patch doesn't have them.\n */ function applyPatch(initialTree, patchTree, applyPatchToDefaultSegment) {\n if (applyPatchToDefaultSegment === void 0) applyPatchToDefaultSegment = false;\n const [initialSegment, initialParallelRoutes] = initialTree;\n const [patchSegment, patchParallelRoutes] = patchTree;\n // if the applied patch segment is __DEFAULT__ then it can be ignored in favor of the initial tree\n // this is because the __DEFAULT__ segment is used as a placeholder on navigation\n // however, there are cases where we _do_ want to apply the patch to the default segment,\n // such as when revalidating the router cache with router.refresh/revalidatePath\n if (!applyPatchToDefaultSegment && patchSegment === _segment.DEFAULT_SEGMENT_KEY && initialSegment !== _segment.DEFAULT_SEGMENT_KEY) {\n return initialTree;\n }\n if ((0, _matchsegments.matchSegment)(initialSegment, patchSegment)) {\n const newParallelRoutes = {};\n for(const key in initialParallelRoutes){\n const isInPatchTreeParallelRoutes = typeof patchParallelRoutes[key] !== \"undefined\";\n if (isInPatchTreeParallelRoutes) {\n newParallelRoutes[key] = applyPatch(initialParallelRoutes[key], patchParallelRoutes[key], applyPatchToDefaultSegment);\n } else {\n newParallelRoutes[key] = initialParallelRoutes[key];\n }\n }\n for(const key in patchParallelRoutes){\n if (newParallelRoutes[key]) {\n continue;\n }\n newParallelRoutes[key] = patchParallelRoutes[key];\n }\n const tree = [\n initialSegment,\n newParallelRoutes\n ];\n if (initialTree[2]) {\n tree[2] = initialTree[2];\n }\n if (initialTree[3]) {\n tree[3] = initialTree[3];\n }\n if (initialTree[4]) {\n tree[4] = initialTree[4];\n }\n return tree;\n }\n return patchTree;\n}\nfunction applyRouterStatePatchToTreeImpl(flightSegmentPath, flightRouterState, treePatch, applyPatchDefaultSegment) {\n if (applyPatchDefaultSegment === void 0) applyPatchDefaultSegment = false;\n const [segment, parallelRoutes, , , isRootLayout] = flightRouterState;\n // Root refresh\n if (flightSegmentPath.length === 1) {\n const tree = applyPatch(flightRouterState, treePatch, applyPatchDefaultSegment);\n return tree;\n }\n const [currentSegment, parallelRouteKey] = flightSegmentPath;\n // Tree path returned from the server should always match up with the current tree in the browser\n if (!(0, _matchsegments.matchSegment)(currentSegment, segment)) {\n return null;\n }\n const lastSegment = flightSegmentPath.length === 2;\n let parallelRoutePatch;\n if (lastSegment) {\n parallelRoutePatch = applyPatch(parallelRoutes[parallelRouteKey], treePatch, applyPatchDefaultSegment);\n } else {\n parallelRoutePatch = applyRouterStatePatchToTreeImpl(flightSegmentPath.slice(2), parallelRoutes[parallelRouteKey], treePatch, applyPatchDefaultSegment);\n if (parallelRoutePatch === null) {\n return null;\n }\n }\n const tree = [\n flightSegmentPath[0],\n {\n ...parallelRoutes,\n [parallelRouteKey]: parallelRoutePatch\n }\n ];\n // Current segment is the root layout\n if (isRootLayout) {\n tree[4] = true;\n }\n return tree;\n}\nfunction applyRouterStatePatchToFullTree(flightSegmentPath, flightRouterState, treePatch) {\n return applyRouterStatePatchToTreeImpl(flightSegmentPath, flightRouterState, treePatch, true);\n}\nfunction applyRouterStatePatchToTreeSkipDefault(flightSegmentPath, flightRouterState, treePatch) {\n return applyRouterStatePatchToTreeImpl(flightSegmentPath, flightRouterState, treePatch, false);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=apply-router-state-patch-to-tree.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2FwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxpQ0FBaUM7UUFDN0IsT0FBT0E7SUFDWDtJQUNBQyx3Q0FBd0M7UUFDcEMsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sV0FBV0MsbUJBQU9BLENBQUMseUZBQTZCO0FBQ3RELE1BQU1DLGlCQUFpQkQsbUJBQU9BLENBQUMsNkZBQW1CO0FBQ2xEOztDQUVDLEdBQUcsU0FBU0UsV0FBV0MsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLDBCQUEwQjtJQUN0RSxJQUFJQSwrQkFBK0IsS0FBSyxHQUFHQSw2QkFBNkI7SUFDeEUsTUFBTSxDQUFDQyxnQkFBZ0JDLHNCQUFzQixHQUFHSjtJQUNoRCxNQUFNLENBQUNLLGNBQWNDLG9CQUFvQixHQUFHTDtJQUM1QyxrR0FBa0c7SUFDbEcsaUZBQWlGO0lBQ2pGLHlGQUF5RjtJQUN6RixnRkFBZ0Y7SUFDaEYsSUFBSSxDQUFDQyw4QkFBOEJHLGlCQUFpQlQsU0FBU1csbUJBQW1CLElBQUlKLG1CQUFtQlAsU0FBU1csbUJBQW1CLEVBQUU7UUFDakksT0FBT1A7SUFDWDtJQUNBLElBQUksQ0FBQyxHQUFHRixlQUFlVSxZQUFZLEVBQUVMLGdCQUFnQkUsZUFBZTtRQUNoRSxNQUFNSSxvQkFBb0IsQ0FBQztRQUMzQixJQUFJLE1BQU1DLE9BQU9OLHNCQUFzQjtZQUNuQyxNQUFNTyw4QkFBOEIsT0FBT0wsbUJBQW1CLENBQUNJLElBQUksS0FBSztZQUN4RSxJQUFJQyw2QkFBNkI7Z0JBQzdCRixpQkFBaUIsQ0FBQ0MsSUFBSSxHQUFHWCxXQUFXSyxxQkFBcUIsQ0FBQ00sSUFBSSxFQUFFSixtQkFBbUIsQ0FBQ0ksSUFBSSxFQUFFUjtZQUM5RixPQUFPO2dCQUNITyxpQkFBaUIsQ0FBQ0MsSUFBSSxHQUFHTixxQkFBcUIsQ0FBQ00sSUFBSTtZQUN2RDtRQUNKO1FBQ0EsSUFBSSxNQUFNQSxPQUFPSixvQkFBb0I7WUFDakMsSUFBSUcsaUJBQWlCLENBQUNDLElBQUksRUFBRTtnQkFDeEI7WUFDSjtZQUNBRCxpQkFBaUIsQ0FBQ0MsSUFBSSxHQUFHSixtQkFBbUIsQ0FBQ0ksSUFBSTtRQUNyRDtRQUNBLE1BQU1FLE9BQU87WUFDVFQ7WUFDQU07U0FDSDtRQUNELElBQUlULFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDaEJZLElBQUksQ0FBQyxFQUFFLEdBQUdaLFdBQVcsQ0FBQyxFQUFFO1FBQzVCO1FBQ0EsSUFBSUEsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUNoQlksSUFBSSxDQUFDLEVBQUUsR0FBR1osV0FBVyxDQUFDLEVBQUU7UUFDNUI7UUFDQSxJQUFJQSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQ2hCWSxJQUFJLENBQUMsRUFBRSxHQUFHWixXQUFXLENBQUMsRUFBRTtRQUM1QjtRQUNBLE9BQU9ZO0lBQ1g7SUFDQSxPQUFPWDtBQUNYO0FBQ0EsU0FBU1ksZ0NBQWdDQyxpQkFBaUIsRUFBRUMsaUJBQWlCLEVBQUVDLFNBQVMsRUFBRUMsd0JBQXdCO0lBQzlHLElBQUlBLDZCQUE2QixLQUFLLEdBQUdBLDJCQUEyQjtJQUNwRSxNQUFNLENBQUNDLFNBQVNDLG9CQUFvQkMsYUFBYSxHQUFHTDtJQUNwRCxlQUFlO0lBQ2YsSUFBSUQsa0JBQWtCTyxNQUFNLEtBQUssR0FBRztRQUNoQyxNQUFNVCxPQUFPYixXQUFXZ0IsbUJBQW1CQyxXQUFXQztRQUN0RCxPQUFPTDtJQUNYO0lBQ0EsTUFBTSxDQUFDVSxnQkFBZ0JDLGlCQUFpQixHQUFHVDtJQUMzQyxpR0FBaUc7SUFDakcsSUFBSSxDQUFDLENBQUMsR0FBR2hCLGVBQWVVLFlBQVksRUFBRWMsZ0JBQWdCSixVQUFVO1FBQzVELE9BQU87SUFDWDtJQUNBLE1BQU1NLGNBQWNWLGtCQUFrQk8sTUFBTSxLQUFLO0lBQ2pELElBQUlJO0lBQ0osSUFBSUQsYUFBYTtRQUNiQyxxQkFBcUIxQixXQUFXb0IsY0FBYyxDQUFDSSxpQkFBaUIsRUFBRVAsV0FBV0M7SUFDakYsT0FBTztRQUNIUSxxQkFBcUJaLGdDQUFnQ0Msa0JBQWtCWSxLQUFLLENBQUMsSUFBSVAsY0FBYyxDQUFDSSxpQkFBaUIsRUFBRVAsV0FBV0M7UUFDOUgsSUFBSVEsdUJBQXVCLE1BQU07WUFDN0IsT0FBTztRQUNYO0lBQ0o7SUFDQSxNQUFNYixPQUFPO1FBQ1RFLGlCQUFpQixDQUFDLEVBQUU7UUFDcEI7WUFDSSxHQUFHSyxjQUFjO1lBQ2pCLENBQUNJLGlCQUFpQixFQUFFRTtRQUN4QjtLQUNIO0lBQ0QscUNBQXFDO0lBQ3JDLElBQUlMLGNBQWM7UUFDZFIsSUFBSSxDQUFDLEVBQUUsR0FBRztJQUNkO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLFNBQVN4QixnQ0FBZ0MwQixpQkFBaUIsRUFBRUMsaUJBQWlCLEVBQUVDLFNBQVM7SUFDcEYsT0FBT0gsZ0NBQWdDQyxtQkFBbUJDLG1CQUFtQkMsV0FBVztBQUM1RjtBQUNBLFNBQVMzQix1Q0FBdUN5QixpQkFBaUIsRUFBRUMsaUJBQWlCLEVBQUVDLFNBQVM7SUFDM0YsT0FBT0gsZ0NBQWdDQyxtQkFBbUJDLG1CQUFtQkMsV0FBVztBQUM1RjtBQUVBLElBQUksQ0FBQyxPQUFPL0IsUUFBUTBDLE9BQU8sS0FBSyxjQUFlLE9BQU8xQyxRQUFRMEMsT0FBTyxLQUFLLFlBQVkxQyxRQUFRMEMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPMUMsUUFBUTBDLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcks3QyxPQUFPQyxjQUFjLENBQUNDLFFBQVEwQyxPQUFPLEVBQUUsY0FBYztRQUFFekMsT0FBTztJQUFLO0lBQ25FSCxPQUFPOEMsTUFBTSxDQUFDNUMsUUFBUTBDLE9BQU8sRUFBRTFDO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVEwQyxPQUFPO0FBQ2xDLEVBRUEsNERBQTREIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWUuanM/ZjdjMyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvRnVsbFRyZWU6IG51bGwsXG4gICAgYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlU2tpcERlZmF1bHQ6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9GdWxsVHJlZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb0Z1bGxUcmVlO1xuICAgIH0sXG4gICAgYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlU2tpcERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlU2tpcERlZmF1bHQ7XG4gICAgfVxufSk7XG5jb25zdCBfc2VnbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zaGFyZWQvbGliL3NlZ21lbnRcIik7XG5jb25zdCBfbWF0Y2hzZWdtZW50cyA9IHJlcXVpcmUoXCIuLi9tYXRjaC1zZWdtZW50c1wiKTtcbi8qKlxuICogRGVlcCBtZXJnZSBvZiB0aGUgdHdvIHJvdXRlciBzdGF0ZXMuIFBhcmFsbGVsIHJvdXRlIGtleXMgYXJlIHByZXNlcnZlZCBpZiB0aGUgcGF0Y2ggZG9lc24ndCBoYXZlIHRoZW0uXG4gKi8gZnVuY3Rpb24gYXBwbHlQYXRjaChpbml0aWFsVHJlZSwgcGF0Y2hUcmVlLCBhcHBseVBhdGNoVG9EZWZhdWx0U2VnbWVudCkge1xuICAgIGlmIChhcHBseVBhdGNoVG9EZWZhdWx0U2VnbWVudCA9PT0gdm9pZCAwKSBhcHBseVBhdGNoVG9EZWZhdWx0U2VnbWVudCA9IGZhbHNlO1xuICAgIGNvbnN0IFtpbml0aWFsU2VnbWVudCwgaW5pdGlhbFBhcmFsbGVsUm91dGVzXSA9IGluaXRpYWxUcmVlO1xuICAgIGNvbnN0IFtwYXRjaFNlZ21lbnQsIHBhdGNoUGFyYWxsZWxSb3V0ZXNdID0gcGF0Y2hUcmVlO1xuICAgIC8vIGlmIHRoZSBhcHBsaWVkIHBhdGNoIHNlZ21lbnQgaXMgX19ERUZBVUxUX18gdGhlbiBpdCBjYW4gYmUgaWdub3JlZCBpbiBmYXZvciBvZiB0aGUgaW5pdGlhbCB0cmVlXG4gICAgLy8gdGhpcyBpcyBiZWNhdXNlIHRoZSBfX0RFRkFVTFRfXyBzZWdtZW50IGlzIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBvbiBuYXZpZ2F0aW9uXG4gICAgLy8gaG93ZXZlciwgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIF9kb18gd2FudCB0byBhcHBseSB0aGUgcGF0Y2ggdG8gdGhlIGRlZmF1bHQgc2VnbWVudCxcbiAgICAvLyBzdWNoIGFzIHdoZW4gcmV2YWxpZGF0aW5nIHRoZSByb3V0ZXIgY2FjaGUgd2l0aCByb3V0ZXIucmVmcmVzaC9yZXZhbGlkYXRlUGF0aFxuICAgIGlmICghYXBwbHlQYXRjaFRvRGVmYXVsdFNlZ21lbnQgJiYgcGF0Y2hTZWdtZW50ID09PSBfc2VnbWVudC5ERUZBVUxUX1NFR01FTlRfS0VZICYmIGluaXRpYWxTZWdtZW50ICE9PSBfc2VnbWVudC5ERUZBVUxUX1NFR01FTlRfS0VZKSB7XG4gICAgICAgIHJldHVybiBpbml0aWFsVHJlZTtcbiAgICB9XG4gICAgaWYgKCgwLCBfbWF0Y2hzZWdtZW50cy5tYXRjaFNlZ21lbnQpKGluaXRpYWxTZWdtZW50LCBwYXRjaFNlZ21lbnQpKSB7XG4gICAgICAgIGNvbnN0IG5ld1BhcmFsbGVsUm91dGVzID0ge307XG4gICAgICAgIGZvcihjb25zdCBrZXkgaW4gaW5pdGlhbFBhcmFsbGVsUm91dGVzKXtcbiAgICAgICAgICAgIGNvbnN0IGlzSW5QYXRjaFRyZWVQYXJhbGxlbFJvdXRlcyA9IHR5cGVvZiBwYXRjaFBhcmFsbGVsUm91dGVzW2tleV0gIT09IFwidW5kZWZpbmVkXCI7XG4gICAgICAgICAgICBpZiAoaXNJblBhdGNoVHJlZVBhcmFsbGVsUm91dGVzKSB7XG4gICAgICAgICAgICAgICAgbmV3UGFyYWxsZWxSb3V0ZXNba2V5XSA9IGFwcGx5UGF0Y2goaW5pdGlhbFBhcmFsbGVsUm91dGVzW2tleV0sIHBhdGNoUGFyYWxsZWxSb3V0ZXNba2V5XSwgYXBwbHlQYXRjaFRvRGVmYXVsdFNlZ21lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdQYXJhbGxlbFJvdXRlc1trZXldID0gaW5pdGlhbFBhcmFsbGVsUm91dGVzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yKGNvbnN0IGtleSBpbiBwYXRjaFBhcmFsbGVsUm91dGVzKXtcbiAgICAgICAgICAgIGlmIChuZXdQYXJhbGxlbFJvdXRlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdQYXJhbGxlbFJvdXRlc1trZXldID0gcGF0Y2hQYXJhbGxlbFJvdXRlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyZWUgPSBbXG4gICAgICAgICAgICBpbml0aWFsU2VnbWVudCxcbiAgICAgICAgICAgIG5ld1BhcmFsbGVsUm91dGVzXG4gICAgICAgIF07XG4gICAgICAgIGlmIChpbml0aWFsVHJlZVsyXSkge1xuICAgICAgICAgICAgdHJlZVsyXSA9IGluaXRpYWxUcmVlWzJdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbml0aWFsVHJlZVszXSkge1xuICAgICAgICAgICAgdHJlZVszXSA9IGluaXRpYWxUcmVlWzNdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbml0aWFsVHJlZVs0XSkge1xuICAgICAgICAgICAgdHJlZVs0XSA9IGluaXRpYWxUcmVlWzRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmVlO1xuICAgIH1cbiAgICByZXR1cm4gcGF0Y2hUcmVlO1xufVxuZnVuY3Rpb24gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlSW1wbChmbGlnaHRTZWdtZW50UGF0aCwgZmxpZ2h0Um91dGVyU3RhdGUsIHRyZWVQYXRjaCwgYXBwbHlQYXRjaERlZmF1bHRTZWdtZW50KSB7XG4gICAgaWYgKGFwcGx5UGF0Y2hEZWZhdWx0U2VnbWVudCA9PT0gdm9pZCAwKSBhcHBseVBhdGNoRGVmYXVsdFNlZ21lbnQgPSBmYWxzZTtcbiAgICBjb25zdCBbc2VnbWVudCwgcGFyYWxsZWxSb3V0ZXMsICwgLCBpc1Jvb3RMYXlvdXRdID0gZmxpZ2h0Um91dGVyU3RhdGU7XG4gICAgLy8gUm9vdCByZWZyZXNoXG4gICAgaWYgKGZsaWdodFNlZ21lbnRQYXRoLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCB0cmVlID0gYXBwbHlQYXRjaChmbGlnaHRSb3V0ZXJTdGF0ZSwgdHJlZVBhdGNoLCBhcHBseVBhdGNoRGVmYXVsdFNlZ21lbnQpO1xuICAgICAgICByZXR1cm4gdHJlZTtcbiAgICB9XG4gICAgY29uc3QgW2N1cnJlbnRTZWdtZW50LCBwYXJhbGxlbFJvdXRlS2V5XSA9IGZsaWdodFNlZ21lbnRQYXRoO1xuICAgIC8vIFRyZWUgcGF0aCByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgc2hvdWxkIGFsd2F5cyBtYXRjaCB1cCB3aXRoIHRoZSBjdXJyZW50IHRyZWUgaW4gdGhlIGJyb3dzZXJcbiAgICBpZiAoISgwLCBfbWF0Y2hzZWdtZW50cy5tYXRjaFNlZ21lbnQpKGN1cnJlbnRTZWdtZW50LCBzZWdtZW50KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbGFzdFNlZ21lbnQgPSBmbGlnaHRTZWdtZW50UGF0aC5sZW5ndGggPT09IDI7XG4gICAgbGV0IHBhcmFsbGVsUm91dGVQYXRjaDtcbiAgICBpZiAobGFzdFNlZ21lbnQpIHtcbiAgICAgICAgcGFyYWxsZWxSb3V0ZVBhdGNoID0gYXBwbHlQYXRjaChwYXJhbGxlbFJvdXRlc1twYXJhbGxlbFJvdXRlS2V5XSwgdHJlZVBhdGNoLCBhcHBseVBhdGNoRGVmYXVsdFNlZ21lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFsbGVsUm91dGVQYXRjaCA9IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZUltcGwoZmxpZ2h0U2VnbWVudFBhdGguc2xpY2UoMiksIHBhcmFsbGVsUm91dGVzW3BhcmFsbGVsUm91dGVLZXldLCB0cmVlUGF0Y2gsIGFwcGx5UGF0Y2hEZWZhdWx0U2VnbWVudCk7XG4gICAgICAgIGlmIChwYXJhbGxlbFJvdXRlUGF0Y2ggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRyZWUgPSBbXG4gICAgICAgIGZsaWdodFNlZ21lbnRQYXRoWzBdLFxuICAgICAgICB7XG4gICAgICAgICAgICAuLi5wYXJhbGxlbFJvdXRlcyxcbiAgICAgICAgICAgIFtwYXJhbGxlbFJvdXRlS2V5XTogcGFyYWxsZWxSb3V0ZVBhdGNoXG4gICAgICAgIH1cbiAgICBdO1xuICAgIC8vIEN1cnJlbnQgc2VnbWVudCBpcyB0aGUgcm9vdCBsYXlvdXRcbiAgICBpZiAoaXNSb290TGF5b3V0KSB7XG4gICAgICAgIHRyZWVbNF0gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdHJlZTtcbn1cbmZ1bmN0aW9uIGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvRnVsbFRyZWUoZmxpZ2h0U2VnbWVudFBhdGgsIGZsaWdodFJvdXRlclN0YXRlLCB0cmVlUGF0Y2gpIHtcbiAgICByZXR1cm4gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlSW1wbChmbGlnaHRTZWdtZW50UGF0aCwgZmxpZ2h0Um91dGVyU3RhdGUsIHRyZWVQYXRjaCwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdChmbGlnaHRTZWdtZW50UGF0aCwgZmxpZ2h0Um91dGVyU3RhdGUsIHRyZWVQYXRjaCkge1xuICAgIHJldHVybiBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVJbXBsKGZsaWdodFNlZ21lbnRQYXRoLCBmbGlnaHRSb3V0ZXJTdGF0ZSwgdHJlZVBhdGNoLCBmYWxzZSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsImFwcGx5Um91dGVyU3RhdGVQYXRjaFRvRnVsbFRyZWUiLCJhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdCIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9zZWdtZW50IiwicmVxdWlyZSIsIl9tYXRjaHNlZ21lbnRzIiwiYXBwbHlQYXRjaCIsImluaXRpYWxUcmVlIiwicGF0Y2hUcmVlIiwiYXBwbHlQYXRjaFRvRGVmYXVsdFNlZ21lbnQiLCJpbml0aWFsU2VnbWVudCIsImluaXRpYWxQYXJhbGxlbFJvdXRlcyIsInBhdGNoU2VnbWVudCIsInBhdGNoUGFyYWxsZWxSb3V0ZXMiLCJERUZBVUxUX1NFR01FTlRfS0VZIiwibWF0Y2hTZWdtZW50IiwibmV3UGFyYWxsZWxSb3V0ZXMiLCJrZXkiLCJpc0luUGF0Y2hUcmVlUGFyYWxsZWxSb3V0ZXMiLCJ0cmVlIiwiYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlSW1wbCIsImZsaWdodFNlZ21lbnRQYXRoIiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJ0cmVlUGF0Y2giLCJhcHBseVBhdGNoRGVmYXVsdFNlZ21lbnQiLCJzZWdtZW50IiwicGFyYWxsZWxSb3V0ZXMiLCJpc1Jvb3RMYXlvdXQiLCJsZW5ndGgiLCJjdXJyZW50U2VnbWVudCIsInBhcmFsbGVsUm91dGVLZXkiLCJsYXN0U2VnbWVudCIsInBhcmFsbGVsUm91dGVQYXRjaCIsInNsaWNlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js ***! + \*****************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n extractPathFromFlightRouterState: function() {\n return extractPathFromFlightRouterState;\n },\n computeChangedPath: function() {\n return computeChangedPath;\n }\n});\nconst _interceptionroutes = __webpack_require__(/*! ../../../server/future/helpers/interception-routes */ \"(ssr)/./node_modules/next/dist/server/future/helpers/interception-routes.js\");\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(ssr)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(ssr)/./node_modules/next/dist/client/components/match-segments.js\");\nconst removeLeadingSlash = (segment)=>{\n return segment[0] === \"/\" ? segment.slice(1) : segment;\n};\nconst segmentToPathname = (segment)=>{\n if (typeof segment === \"string\") {\n return segment;\n }\n return segment[1];\n};\nfunction normalizeSegments(segments) {\n return segments.reduce((acc, segment)=>{\n segment = removeLeadingSlash(segment);\n if (segment === \"\" || (0, _segment.isGroupSegment)(segment)) {\n return acc;\n }\n return acc + \"/\" + segment;\n }, \"\") || \"/\";\n}\nfunction extractPathFromFlightRouterState(flightRouterState) {\n const segment = Array.isArray(flightRouterState[0]) ? flightRouterState[0][1] : flightRouterState[0];\n if (segment === _segment.DEFAULT_SEGMENT_KEY || _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m))) return undefined;\n if (segment.startsWith(_segment.PAGE_SEGMENT_KEY)) return \"\";\n const segments = [\n segment\n ];\n var _flightRouterState_;\n const parallelRoutes = (_flightRouterState_ = flightRouterState[1]) != null ? _flightRouterState_ : {};\n const childrenPath = parallelRoutes.children ? extractPathFromFlightRouterState(parallelRoutes.children) : undefined;\n if (childrenPath !== undefined) {\n segments.push(childrenPath);\n } else {\n for (const [key, value] of Object.entries(parallelRoutes)){\n if (key === \"children\") continue;\n const childPath = extractPathFromFlightRouterState(value);\n if (childPath !== undefined) {\n segments.push(childPath);\n }\n }\n }\n return normalizeSegments(segments);\n}\nfunction computeChangedPathImpl(treeA, treeB) {\n const [segmentA, parallelRoutesA] = treeA;\n const [segmentB, parallelRoutesB] = treeB;\n const normalizedSegmentA = segmentToPathname(segmentA);\n const normalizedSegmentB = segmentToPathname(segmentB);\n if (_interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>normalizedSegmentA.startsWith(m) || normalizedSegmentB.startsWith(m))) {\n return \"\";\n }\n if (!(0, _matchsegments.matchSegment)(segmentA, segmentB)) {\n var _extractPathFromFlightRouterState;\n // once we find where the tree changed, we compute the rest of the path by traversing the tree\n return (_extractPathFromFlightRouterState = extractPathFromFlightRouterState(treeB)) != null ? _extractPathFromFlightRouterState : \"\";\n }\n for(const parallelRouterKey in parallelRoutesA){\n if (parallelRoutesB[parallelRouterKey]) {\n const changedPath = computeChangedPathImpl(parallelRoutesA[parallelRouterKey], parallelRoutesB[parallelRouterKey]);\n if (changedPath !== null) {\n return segmentToPathname(segmentB) + \"/\" + changedPath;\n }\n }\n }\n return null;\n}\nfunction computeChangedPath(treeA, treeB) {\n const changedPath = computeChangedPathImpl(treeA, treeB);\n if (changedPath == null || changedPath === \"/\") {\n return changedPath;\n }\n // lightweight normalization to remove route groups\n return normalizeSegments(changedPath.split(\"/\"));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=compute-changed-path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NvbXB1dGUtY2hhbmdlZC1wYXRoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxrQ0FBa0M7UUFDOUIsT0FBT0E7SUFDWDtJQUNBQyxvQkFBb0I7UUFDaEIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sc0JBQXNCQyxtQkFBT0EsQ0FBQyx1SUFBb0Q7QUFDeEYsTUFBTUMsV0FBV0QsbUJBQU9BLENBQUMseUZBQTZCO0FBQ3RELE1BQU1FLGlCQUFpQkYsbUJBQU9BLENBQUMsNkZBQW1CO0FBQ2xELE1BQU1HLHFCQUFxQixDQUFDQztJQUN4QixPQUFPQSxPQUFPLENBQUMsRUFBRSxLQUFLLE1BQU1BLFFBQVFDLEtBQUssQ0FBQyxLQUFLRDtBQUNuRDtBQUNBLE1BQU1FLG9CQUFvQixDQUFDRjtJQUN2QixJQUFJLE9BQU9BLFlBQVksVUFBVTtRQUM3QixPQUFPQTtJQUNYO0lBQ0EsT0FBT0EsT0FBTyxDQUFDLEVBQUU7QUFDckI7QUFDQSxTQUFTRyxrQkFBa0JDLFFBQVE7SUFDL0IsT0FBT0EsU0FBU0MsTUFBTSxDQUFDLENBQUNDLEtBQUtOO1FBQ3pCQSxVQUFVRCxtQkFBbUJDO1FBQzdCLElBQUlBLFlBQVksTUFBTSxDQUFDLEdBQUdILFNBQVNVLGNBQWMsRUFBRVAsVUFBVTtZQUN6RCxPQUFPTTtRQUNYO1FBQ0EsT0FBT0EsTUFBTSxNQUFNTjtJQUN2QixHQUFHLE9BQU87QUFDZDtBQUNBLFNBQVNiLGlDQUFpQ3FCLGlCQUFpQjtJQUN2RCxNQUFNUixVQUFVUyxNQUFNQyxPQUFPLENBQUNGLGlCQUFpQixDQUFDLEVBQUUsSUFBSUEsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBR0EsaUJBQWlCLENBQUMsRUFBRTtJQUNwRyxJQUFJUixZQUFZSCxTQUFTYyxtQkFBbUIsSUFBSWhCLG9CQUFvQmlCLDBCQUEwQixDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsSUFBSWQsUUFBUWUsVUFBVSxDQUFDRCxLQUFLLE9BQU9FO0lBQ3hJLElBQUloQixRQUFRZSxVQUFVLENBQUNsQixTQUFTb0IsZ0JBQWdCLEdBQUcsT0FBTztJQUMxRCxNQUFNYixXQUFXO1FBQ2JKO0tBQ0g7SUFDRCxJQUFJa0I7SUFDSixNQUFNQyxpQkFBaUIsQ0FBQ0Qsc0JBQXNCVixpQkFBaUIsQ0FBQyxFQUFFLEtBQUssT0FBT1Usc0JBQXNCLENBQUM7SUFDckcsTUFBTUUsZUFBZUQsZUFBZUUsUUFBUSxHQUFHbEMsaUNBQWlDZ0MsZUFBZUUsUUFBUSxJQUFJTDtJQUMzRyxJQUFJSSxpQkFBaUJKLFdBQVc7UUFDNUJaLFNBQVNrQixJQUFJLENBQUNGO0lBQ2xCLE9BQU87UUFDSCxLQUFLLE1BQU0sQ0FBQ0csS0FBS3RDLE1BQU0sSUFBSUgsT0FBTzBDLE9BQU8sQ0FBQ0wsZ0JBQWdCO1lBQ3RELElBQUlJLFFBQVEsWUFBWTtZQUN4QixNQUFNRSxZQUFZdEMsaUNBQWlDRjtZQUNuRCxJQUFJd0MsY0FBY1QsV0FBVztnQkFDekJaLFNBQVNrQixJQUFJLENBQUNHO1lBQ2xCO1FBQ0o7SUFDSjtJQUNBLE9BQU90QixrQkFBa0JDO0FBQzdCO0FBQ0EsU0FBU3NCLHVCQUF1QkMsS0FBSyxFQUFFQyxLQUFLO0lBQ3hDLE1BQU0sQ0FBQ0MsVUFBVUMsZ0JBQWdCLEdBQUdIO0lBQ3BDLE1BQU0sQ0FBQ0ksVUFBVUMsZ0JBQWdCLEdBQUdKO0lBQ3BDLE1BQU1LLHFCQUFxQi9CLGtCQUFrQjJCO0lBQzdDLE1BQU1LLHFCQUFxQmhDLGtCQUFrQjZCO0lBQzdDLElBQUlwQyxvQkFBb0JpQiwwQkFBMEIsQ0FBQ0MsSUFBSSxDQUFDLENBQUNDLElBQUltQixtQkFBbUJsQixVQUFVLENBQUNELE1BQU1vQixtQkFBbUJuQixVQUFVLENBQUNELEtBQUs7UUFDaEksT0FBTztJQUNYO0lBQ0EsSUFBSSxDQUFDLENBQUMsR0FBR2hCLGVBQWVxQyxZQUFZLEVBQUVOLFVBQVVFLFdBQVc7UUFDdkQsSUFBSUs7UUFDSiw4RkFBOEY7UUFDOUYsT0FBTyxDQUFDQSxvQ0FBb0NqRCxpQ0FBaUN5QyxNQUFLLEtBQU0sT0FBT1Esb0NBQW9DO0lBQ3ZJO0lBQ0EsSUFBSSxNQUFNQyxxQkFBcUJQLGdCQUFnQjtRQUMzQyxJQUFJRSxlQUFlLENBQUNLLGtCQUFrQixFQUFFO1lBQ3BDLE1BQU1DLGNBQWNaLHVCQUF1QkksZUFBZSxDQUFDTyxrQkFBa0IsRUFBRUwsZUFBZSxDQUFDSyxrQkFBa0I7WUFDakgsSUFBSUMsZ0JBQWdCLE1BQU07Z0JBQ3RCLE9BQU9wQyxrQkFBa0I2QixZQUFZLE1BQU1PO1lBQy9DO1FBQ0o7SUFDSjtJQUNBLE9BQU87QUFDWDtBQUNBLFNBQVNsRCxtQkFBbUJ1QyxLQUFLLEVBQUVDLEtBQUs7SUFDcEMsTUFBTVUsY0FBY1osdUJBQXVCQyxPQUFPQztJQUNsRCxJQUFJVSxlQUFlLFFBQVFBLGdCQUFnQixLQUFLO1FBQzVDLE9BQU9BO0lBQ1g7SUFDQSxtREFBbUQ7SUFDbkQsT0FBT25DLGtCQUFrQm1DLFlBQVlDLEtBQUssQ0FBQztBQUMvQztBQUVBLElBQUksQ0FBQyxPQUFPdkQsUUFBUXdELE9BQU8sS0FBSyxjQUFlLE9BQU94RCxRQUFRd0QsT0FBTyxLQUFLLFlBQVl4RCxRQUFRd0QsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPeEQsUUFBUXdELE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckszRCxPQUFPQyxjQUFjLENBQUNDLFFBQVF3RCxPQUFPLEVBQUUsY0FBYztRQUFFdkQsT0FBTztJQUFLO0lBQ25FSCxPQUFPNEQsTUFBTSxDQUFDMUQsUUFBUXdELE9BQU8sRUFBRXhEO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVF3RCxPQUFPO0FBQ2xDLEVBRUEsZ0RBQWdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY29tcHV0ZS1jaGFuZ2VkLXBhdGguanM/NjA5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlOiBudWxsLFxuICAgIGNvbXB1dGVDaGFuZ2VkUGF0aDogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZTtcbiAgICB9LFxuICAgIGNvbXB1dGVDaGFuZ2VkUGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjb21wdXRlQ2hhbmdlZFBhdGg7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJjZXB0aW9ucm91dGVzID0gcmVxdWlyZShcIi4uLy4uLy4uL3NlcnZlci9mdXR1cmUvaGVscGVycy9pbnRlcmNlcHRpb24tcm91dGVzXCIpO1xuY29uc3QgX3NlZ21lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2hhcmVkL2xpYi9zZWdtZW50XCIpO1xuY29uc3QgX21hdGNoc2VnbWVudHMgPSByZXF1aXJlKFwiLi4vbWF0Y2gtc2VnbWVudHNcIik7XG5jb25zdCByZW1vdmVMZWFkaW5nU2xhc2ggPSAoc2VnbWVudCk9PntcbiAgICByZXR1cm4gc2VnbWVudFswXSA9PT0gXCIvXCIgPyBzZWdtZW50LnNsaWNlKDEpIDogc2VnbWVudDtcbn07XG5jb25zdCBzZWdtZW50VG9QYXRobmFtZSA9IChzZWdtZW50KT0+e1xuICAgIGlmICh0eXBlb2Ygc2VnbWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gc2VnbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHNlZ21lbnRbMV07XG59O1xuZnVuY3Rpb24gbm9ybWFsaXplU2VnbWVudHMoc2VnbWVudHMpIHtcbiAgICByZXR1cm4gc2VnbWVudHMucmVkdWNlKChhY2MsIHNlZ21lbnQpPT57XG4gICAgICAgIHNlZ21lbnQgPSByZW1vdmVMZWFkaW5nU2xhc2goc2VnbWVudCk7XG4gICAgICAgIGlmIChzZWdtZW50ID09PSBcIlwiIHx8ICgwLCBfc2VnbWVudC5pc0dyb3VwU2VnbWVudCkoc2VnbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYyArIFwiL1wiICsgc2VnbWVudDtcbiAgICB9LCBcIlwiKSB8fCBcIi9cIjtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKGZsaWdodFJvdXRlclN0YXRlKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IEFycmF5LmlzQXJyYXkoZmxpZ2h0Um91dGVyU3RhdGVbMF0pID8gZmxpZ2h0Um91dGVyU3RhdGVbMF1bMV0gOiBmbGlnaHRSb3V0ZXJTdGF0ZVswXTtcbiAgICBpZiAoc2VnbWVudCA9PT0gX3NlZ21lbnQuREVGQVVMVF9TRUdNRU5UX0tFWSB8fCBfaW50ZXJjZXB0aW9ucm91dGVzLklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLnNvbWUoKG0pPT5zZWdtZW50LnN0YXJ0c1dpdGgobSkpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChzZWdtZW50LnN0YXJ0c1dpdGgoX3NlZ21lbnQuUEFHRV9TRUdNRU5UX0tFWSkpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gW1xuICAgICAgICBzZWdtZW50XG4gICAgXTtcbiAgICB2YXIgX2ZsaWdodFJvdXRlclN0YXRlXztcbiAgICBjb25zdCBwYXJhbGxlbFJvdXRlcyA9IChfZmxpZ2h0Um91dGVyU3RhdGVfID0gZmxpZ2h0Um91dGVyU3RhdGVbMV0pICE9IG51bGwgPyBfZmxpZ2h0Um91dGVyU3RhdGVfIDoge307XG4gICAgY29uc3QgY2hpbGRyZW5QYXRoID0gcGFyYWxsZWxSb3V0ZXMuY2hpbGRyZW4gPyBleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZShwYXJhbGxlbFJvdXRlcy5jaGlsZHJlbikgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNoaWxkcmVuUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goY2hpbGRyZW5QYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbGxlbFJvdXRlcykpe1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJjaGlsZHJlblwiKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjaGlsZFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goY2hpbGRQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm9ybWFsaXplU2VnbWVudHMoc2VnbWVudHMpO1xufVxuZnVuY3Rpb24gY29tcHV0ZUNoYW5nZWRQYXRoSW1wbCh0cmVlQSwgdHJlZUIpIHtcbiAgICBjb25zdCBbc2VnbWVudEEsIHBhcmFsbGVsUm91dGVzQV0gPSB0cmVlQTtcbiAgICBjb25zdCBbc2VnbWVudEIsIHBhcmFsbGVsUm91dGVzQl0gPSB0cmVlQjtcbiAgICBjb25zdCBub3JtYWxpemVkU2VnbWVudEEgPSBzZWdtZW50VG9QYXRobmFtZShzZWdtZW50QSk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlZ21lbnRCID0gc2VnbWVudFRvUGF0aG5hbWUoc2VnbWVudEIpO1xuICAgIGlmIChfaW50ZXJjZXB0aW9ucm91dGVzLklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLnNvbWUoKG0pPT5ub3JtYWxpemVkU2VnbWVudEEuc3RhcnRzV2l0aChtKSB8fCBub3JtYWxpemVkU2VnbWVudEIuc3RhcnRzV2l0aChtKSkpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICghKDAsIF9tYXRjaHNlZ21lbnRzLm1hdGNoU2VnbWVudCkoc2VnbWVudEEsIHNlZ21lbnRCKSkge1xuICAgICAgICB2YXIgX2V4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlO1xuICAgICAgICAvLyBvbmNlIHdlIGZpbmQgd2hlcmUgdGhlIHRyZWUgY2hhbmdlZCwgd2UgY29tcHV0ZSB0aGUgcmVzdCBvZiB0aGUgcGF0aCBieSB0cmF2ZXJzaW5nIHRoZSB0cmVlXG4gICAgICAgIHJldHVybiAoX2V4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlID0gZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUodHJlZUIpKSAhPSBudWxsID8gX2V4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlIDogXCJcIjtcbiAgICB9XG4gICAgZm9yKGNvbnN0IHBhcmFsbGVsUm91dGVyS2V5IGluIHBhcmFsbGVsUm91dGVzQSl7XG4gICAgICAgIGlmIChwYXJhbGxlbFJvdXRlc0JbcGFyYWxsZWxSb3V0ZXJLZXldKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VkUGF0aCA9IGNvbXB1dGVDaGFuZ2VkUGF0aEltcGwocGFyYWxsZWxSb3V0ZXNBW3BhcmFsbGVsUm91dGVyS2V5XSwgcGFyYWxsZWxSb3V0ZXNCW3BhcmFsbGVsUm91dGVyS2V5XSk7XG4gICAgICAgICAgICBpZiAoY2hhbmdlZFBhdGggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VnbWVudFRvUGF0aG5hbWUoc2VnbWVudEIpICsgXCIvXCIgKyBjaGFuZ2VkUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVDaGFuZ2VkUGF0aCh0cmVlQSwgdHJlZUIpIHtcbiAgICBjb25zdCBjaGFuZ2VkUGF0aCA9IGNvbXB1dGVDaGFuZ2VkUGF0aEltcGwodHJlZUEsIHRyZWVCKTtcbiAgICBpZiAoY2hhbmdlZFBhdGggPT0gbnVsbCB8fCBjaGFuZ2VkUGF0aCA9PT0gXCIvXCIpIHtcbiAgICAgICAgcmV0dXJuIGNoYW5nZWRQYXRoO1xuICAgIH1cbiAgICAvLyBsaWdodHdlaWdodCBub3JtYWxpemF0aW9uIHRvIHJlbW92ZSByb3V0ZSBncm91cHNcbiAgICByZXR1cm4gbm9ybWFsaXplU2VnbWVudHMoY2hhbmdlZFBhdGguc3BsaXQoXCIvXCIpKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcHV0ZS1jaGFuZ2VkLXBhdGguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUiLCJjb21wdXRlQ2hhbmdlZFBhdGgiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfaW50ZXJjZXB0aW9ucm91dGVzIiwicmVxdWlyZSIsIl9zZWdtZW50IiwiX21hdGNoc2VnbWVudHMiLCJyZW1vdmVMZWFkaW5nU2xhc2giLCJzZWdtZW50Iiwic2xpY2UiLCJzZWdtZW50VG9QYXRobmFtZSIsIm5vcm1hbGl6ZVNlZ21lbnRzIiwic2VnbWVudHMiLCJyZWR1Y2UiLCJhY2MiLCJpc0dyb3VwU2VnbWVudCIsImZsaWdodFJvdXRlclN0YXRlIiwiQXJyYXkiLCJpc0FycmF5IiwiREVGQVVMVF9TRUdNRU5UX0tFWSIsIklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTIiwic29tZSIsIm0iLCJzdGFydHNXaXRoIiwidW5kZWZpbmVkIiwiUEFHRV9TRUdNRU5UX0tFWSIsIl9mbGlnaHRSb3V0ZXJTdGF0ZV8iLCJwYXJhbGxlbFJvdXRlcyIsImNoaWxkcmVuUGF0aCIsImNoaWxkcmVuIiwicHVzaCIsImtleSIsImVudHJpZXMiLCJjaGlsZFBhdGgiLCJjb21wdXRlQ2hhbmdlZFBhdGhJbXBsIiwidHJlZUEiLCJ0cmVlQiIsInNlZ21lbnRBIiwicGFyYWxsZWxSb3V0ZXNBIiwic2VnbWVudEIiLCJwYXJhbGxlbFJvdXRlc0IiLCJub3JtYWxpemVkU2VnbWVudEEiLCJub3JtYWxpemVkU2VnbWVudEIiLCJtYXRjaFNlZ21lbnQiLCJfZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUiLCJwYXJhbGxlbFJvdXRlcktleSIsImNoYW5nZWRQYXRoIiwic3BsaXQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js ***! + \*****************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createHrefFromUrl\", ({\n enumerable: true,\n get: function() {\n return createHrefFromUrl;\n }\n}));\nfunction createHrefFromUrl(url, includeHash) {\n if (includeHash === void 0) includeHash = true;\n return url.pathname + url.search + (includeHash ? url.hash : \"\");\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=create-href-from-url.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1ocmVmLWZyb20tdXJsLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxxREFBb0Q7SUFDaERJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixTQUFTQSxrQkFBa0JDLEdBQUcsRUFBRUMsV0FBVztJQUN2QyxJQUFJQSxnQkFBZ0IsS0FBSyxHQUFHQSxjQUFjO0lBQzFDLE9BQU9ELElBQUlFLFFBQVEsR0FBR0YsSUFBSUcsTUFBTSxHQUFJRixDQUFBQSxjQUFjRCxJQUFJSSxJQUFJLEdBQUcsRUFBQztBQUNsRTtBQUVBLElBQUksQ0FBQyxPQUFPVCxRQUFRVSxPQUFPLEtBQUssY0FBZSxPQUFPVixRQUFRVSxPQUFPLEtBQUssWUFBWVYsUUFBUVUsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPVixRQUFRVSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLYixPQUFPQyxjQUFjLENBQUNDLFFBQVFVLE9BQU8sRUFBRSxjQUFjO1FBQUVULE9BQU87SUFBSztJQUNuRUgsT0FBT2MsTUFBTSxDQUFDWixRQUFRVSxPQUFPLEVBQUVWO0lBQy9CYSxPQUFPYixPQUFPLEdBQUdBLFFBQVFVLE9BQU87QUFDbEMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9jcmVhdGUtaHJlZi1mcm9tLXVybC5qcz9hNzc0Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSHJlZkZyb21VcmxcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUhyZWZGcm9tVXJsO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gY3JlYXRlSHJlZkZyb21VcmwodXJsLCBpbmNsdWRlSGFzaCkge1xuICAgIGlmIChpbmNsdWRlSGFzaCA9PT0gdm9pZCAwKSBpbmNsdWRlSGFzaCA9IHRydWU7XG4gICAgcmV0dXJuIHVybC5wYXRobmFtZSArIHVybC5zZWFyY2ggKyAoaW5jbHVkZUhhc2ggPyB1cmwuaGFzaCA6IFwiXCIpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGUtaHJlZi1mcm9tLXVybC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiY3JlYXRlSHJlZkZyb21VcmwiLCJ1cmwiLCJpbmNsdWRlSGFzaCIsInBhdGhuYW1lIiwic2VhcmNoIiwiaGFzaCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js ***! + \************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createInitialRouterState\", ({\n enumerable: true,\n get: function() {\n return createInitialRouterState;\n }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ./create-href-from-url */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _computechangedpath = __webpack_require__(/*! ./compute-changed-path */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nfunction createInitialRouterState(param) {\n let { buildId, initialTree, initialSeedData, initialCanonicalUrl, initialParallelRoutes, isServer, location, initialHead } = param;\n const rsc = initialSeedData[2];\n const cache = {\n lazyData: null,\n rsc: rsc,\n prefetchRsc: null,\n // The cache gets seeded during the first render. `initialParallelRoutes` ensures the cache from the first render is there during the second render.\n parallelRoutes: isServer ? new Map() : initialParallelRoutes\n };\n // When the cache hasn't been seeded yet we fill the cache with the head.\n if (initialParallelRoutes === null || initialParallelRoutes.size === 0) {\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(cache, undefined, initialTree, initialSeedData, initialHead);\n }\n var _ref;\n return {\n buildId,\n tree: initialTree,\n cache,\n prefetchCache: new Map(),\n pushRef: {\n pendingPush: false,\n mpaNavigation: false,\n // First render needs to preserve the previous window.history.state\n // to avoid it being overwritten on navigation back/forward with MPA Navigation.\n preserveCustomHistoryState: true\n },\n focusAndScrollRef: {\n apply: false,\n onlyHashChange: false,\n hashFragment: null,\n segmentPaths: []\n },\n canonicalUrl: // This is safe to do as canonicalUrl can't be rendered, it's only used to control the history updates in the useEffect further down in this file.\n location ? (0, _createhreffromurl.createHrefFromUrl)(location) : initialCanonicalUrl,\n nextUrl: (_ref = (0, _computechangedpath.extractPathFromFlightRouterState)(initialTree) || (location == null ? void 0 : location.pathname)) != null ? _ref : null\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=create-initial-router-state.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1pbml0aWFsLXJvdXRlci1zdGF0ZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsNERBQTJEO0lBQ3ZESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMscUJBQXFCQyxtQkFBT0EsQ0FBQyx1SEFBd0I7QUFDM0QsTUFBTUMsaUNBQWlDRCxtQkFBT0EsQ0FBQyxxSkFBdUM7QUFDdEYsTUFBTUUsc0JBQXNCRixtQkFBT0EsQ0FBQyx1SEFBd0I7QUFDNUQsU0FBU0YseUJBQXlCSyxLQUFLO0lBQ25DLElBQUksRUFBRUMsT0FBTyxFQUFFQyxXQUFXLEVBQUVDLGVBQWUsRUFBRUMsbUJBQW1CLEVBQUVDLHFCQUFxQixFQUFFQyxRQUFRLEVBQUVDLFFBQVEsRUFBRUMsV0FBVyxFQUFFLEdBQUdSO0lBQzdILE1BQU1TLE1BQU1OLGVBQWUsQ0FBQyxFQUFFO0lBQzlCLE1BQU1PLFFBQVE7UUFDVkMsVUFBVTtRQUNWRixLQUFLQTtRQUNMRyxhQUFhO1FBQ2Isb0pBQW9KO1FBQ3BKQyxnQkFBZ0JQLFdBQVcsSUFBSVEsUUFBUVQ7SUFDM0M7SUFDQSx5RUFBeUU7SUFDekUsSUFBSUEsMEJBQTBCLFFBQVFBLHNCQUFzQlUsSUFBSSxLQUFLLEdBQUc7UUFDbkUsSUFBR2pCLCtCQUErQmtCLDZCQUE2QixFQUFFTixPQUFPTyxXQUFXZixhQUFhQyxpQkFBaUJLO0lBQ3RIO0lBQ0EsSUFDQVU7SUFDQSxPQUFPO1FBQ0hqQjtRQUNBa0IsTUFBTWpCO1FBQ05RO1FBQ0FVLGVBQWUsSUFBSU47UUFDbkJPLFNBQVM7WUFDTEMsYUFBYTtZQUNiQyxlQUFlO1lBQ2YsbUVBQW1FO1lBQ25FLGdGQUFnRjtZQUNoRkMsNEJBQTRCO1FBQ2hDO1FBQ0FDLG1CQUFtQjtZQUNmQyxPQUFPO1lBQ1BDLGdCQUFnQjtZQUNoQkMsY0FBYztZQUNkQyxjQUFjLEVBQUU7UUFDcEI7UUFDQUMsY0FDQSxrSkFBa0o7UUFDbEp2QixXQUFXLENBQUMsR0FBR1gsbUJBQW1CbUMsaUJBQWlCLEVBQUV4QixZQUFZSDtRQUNqRTRCLFNBQVMsQ0FBQ2QsT0FBTyxDQUFDLEdBQUduQixvQkFBb0JrQyxnQ0FBZ0MsRUFBRS9CLGdCQUFpQkssQ0FBQUEsWUFBWSxPQUFPLEtBQUssSUFBSUEsU0FBUzJCLFFBQVEsTUFBTSxPQUFPaEIsT0FBTztJQUNqSztBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU8zQixRQUFRNEMsT0FBTyxLQUFLLGNBQWUsT0FBTzVDLFFBQVE0QyxPQUFPLEtBQUssWUFBWTVDLFFBQVE0QyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU81QyxRQUFRNEMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySy9DLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTRDLE9BQU8sRUFBRSxjQUFjO1FBQUUzQyxPQUFPO0lBQUs7SUFDbkVILE9BQU9nRCxNQUFNLENBQUM5QyxRQUFRNEMsT0FBTyxFQUFFNUM7SUFDL0IrQyxPQUFPL0MsT0FBTyxHQUFHQSxRQUFRNEMsT0FBTztBQUNsQyxFQUVBLHVEQUF1RCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1pbml0aWFsLXJvdXRlci1zdGF0ZS5qcz9kY2I0Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5pdGlhbFJvdXRlclN0YXRlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVJbml0aWFsUm91dGVyU3RhdGU7XG4gICAgfVxufSk7XG5jb25zdCBfY3JlYXRlaHJlZmZyb211cmwgPSByZXF1aXJlKFwiLi9jcmVhdGUtaHJlZi1mcm9tLXVybFwiKTtcbmNvbnN0IF9maWxsbGF6eWl0ZW1zdGlsbGxlYWZ3aXRoaGVhZCA9IHJlcXVpcmUoXCIuL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkXCIpO1xuY29uc3QgX2NvbXB1dGVjaGFuZ2VkcGF0aCA9IHJlcXVpcmUoXCIuL2NvbXB1dGUtY2hhbmdlZC1wYXRoXCIpO1xuZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFJvdXRlclN0YXRlKHBhcmFtKSB7XG4gICAgbGV0IHsgYnVpbGRJZCwgaW5pdGlhbFRyZWUsIGluaXRpYWxTZWVkRGF0YSwgaW5pdGlhbENhbm9uaWNhbFVybCwgaW5pdGlhbFBhcmFsbGVsUm91dGVzLCBpc1NlcnZlciwgbG9jYXRpb24sIGluaXRpYWxIZWFkIH0gPSBwYXJhbTtcbiAgICBjb25zdCByc2MgPSBpbml0aWFsU2VlZERhdGFbMl07XG4gICAgY29uc3QgY2FjaGUgPSB7XG4gICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICByc2M6IHJzYyxcbiAgICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICAgIC8vIFRoZSBjYWNoZSBnZXRzIHNlZWRlZCBkdXJpbmcgdGhlIGZpcnN0IHJlbmRlci4gYGluaXRpYWxQYXJhbGxlbFJvdXRlc2AgZW5zdXJlcyB0aGUgY2FjaGUgZnJvbSB0aGUgZmlyc3QgcmVuZGVyIGlzIHRoZXJlIGR1cmluZyB0aGUgc2Vjb25kIHJlbmRlci5cbiAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IGlzU2VydmVyID8gbmV3IE1hcCgpIDogaW5pdGlhbFBhcmFsbGVsUm91dGVzXG4gICAgfTtcbiAgICAvLyBXaGVuIHRoZSBjYWNoZSBoYXNuJ3QgYmVlbiBzZWVkZWQgeWV0IHdlIGZpbGwgdGhlIGNhY2hlIHdpdGggdGhlIGhlYWQuXG4gICAgaWYgKGluaXRpYWxQYXJhbGxlbFJvdXRlcyA9PT0gbnVsbCB8fCBpbml0aWFsUGFyYWxsZWxSb3V0ZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAoMCwgX2ZpbGxsYXp5aXRlbXN0aWxsbGVhZndpdGhoZWFkLmZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKShjYWNoZSwgdW5kZWZpbmVkLCBpbml0aWFsVHJlZSwgaW5pdGlhbFNlZWREYXRhLCBpbml0aWFsSGVhZCk7XG4gICAgfVxuICAgIHZhciAvLyB0aGUgfHwgb3BlcmF0b3IgaXMgaW50ZW50aW9uYWwsIHRoZSBwYXRobmFtZSBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nXG4gICAgX3JlZjtcbiAgICByZXR1cm4ge1xuICAgICAgICBidWlsZElkLFxuICAgICAgICB0cmVlOiBpbml0aWFsVHJlZSxcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIHByZWZldGNoQ2FjaGU6IG5ldyBNYXAoKSxcbiAgICAgICAgcHVzaFJlZjoge1xuICAgICAgICAgICAgcGVuZGluZ1B1c2g6IGZhbHNlLFxuICAgICAgICAgICAgbXBhTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAvLyBGaXJzdCByZW5kZXIgbmVlZHMgdG8gcHJlc2VydmUgdGhlIHByZXZpb3VzIHdpbmRvdy5oaXN0b3J5LnN0YXRlXG4gICAgICAgICAgICAvLyB0byBhdm9pZCBpdCBiZWluZyBvdmVyd3JpdHRlbiBvbiBuYXZpZ2F0aW9uIGJhY2svZm9yd2FyZCB3aXRoIE1QQSBOYXZpZ2F0aW9uLlxuICAgICAgICAgICAgcHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWY6IHtcbiAgICAgICAgICAgIGFwcGx5OiBmYWxzZSxcbiAgICAgICAgICAgIG9ubHlIYXNoQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgICAgIGhhc2hGcmFnbWVudDogbnVsbCxcbiAgICAgICAgICAgIHNlZ21lbnRQYXRoczogW11cbiAgICAgICAgfSxcbiAgICAgICAgY2Fub25pY2FsVXJsOiAvLyBsb2NhdGlvbi5ocmVmIGlzIHJlYWQgYXMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIGNhbm9uaWNhbFVybCBpbiB0aGUgYnJvd3NlclxuICAgICAgICAvLyBUaGlzIGlzIHNhZmUgdG8gZG8gYXMgY2Fub25pY2FsVXJsIGNhbid0IGJlIHJlbmRlcmVkLCBpdCdzIG9ubHkgdXNlZCB0byBjb250cm9sIHRoZSBoaXN0b3J5IHVwZGF0ZXMgaW4gdGhlIHVzZUVmZmVjdCBmdXJ0aGVyIGRvd24gaW4gdGhpcyBmaWxlLlxuICAgICAgICBsb2NhdGlvbiA/ICgwLCBfY3JlYXRlaHJlZmZyb211cmwuY3JlYXRlSHJlZkZyb21VcmwpKGxvY2F0aW9uKSA6IGluaXRpYWxDYW5vbmljYWxVcmwsXG4gICAgICAgIG5leHRVcmw6IChfcmVmID0gKDAsIF9jb21wdXRlY2hhbmdlZHBhdGguZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUpKGluaXRpYWxUcmVlKSB8fCAobG9jYXRpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGxvY2F0aW9uLnBhdGhuYW1lKSkgIT0gbnVsbCA/IF9yZWYgOiBudWxsXG4gICAgfTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlLWluaXRpYWwtcm91dGVyLXN0YXRlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJjcmVhdGVJbml0aWFsUm91dGVyU3RhdGUiLCJfY3JlYXRlaHJlZmZyb211cmwiLCJyZXF1aXJlIiwiX2ZpbGxsYXp5aXRlbXN0aWxsbGVhZndpdGhoZWFkIiwiX2NvbXB1dGVjaGFuZ2VkcGF0aCIsInBhcmFtIiwiYnVpbGRJZCIsImluaXRpYWxUcmVlIiwiaW5pdGlhbFNlZWREYXRhIiwiaW5pdGlhbENhbm9uaWNhbFVybCIsImluaXRpYWxQYXJhbGxlbFJvdXRlcyIsImlzU2VydmVyIiwibG9jYXRpb24iLCJpbml0aWFsSGVhZCIsInJzYyIsImNhY2hlIiwibGF6eURhdGEiLCJwcmVmZXRjaFJzYyIsInBhcmFsbGVsUm91dGVzIiwiTWFwIiwic2l6ZSIsImZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkIiwidW5kZWZpbmVkIiwiX3JlZiIsInRyZWUiLCJwcmVmZXRjaENhY2hlIiwicHVzaFJlZiIsInBlbmRpbmdQdXNoIiwibXBhTmF2aWdhdGlvbiIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiZm9jdXNBbmRTY3JvbGxSZWYiLCJhcHBseSIsIm9ubHlIYXNoQ2hhbmdlIiwiaGFzaEZyYWdtZW50Iiwic2VnbWVudFBhdGhzIiwiY2Fub25pY2FsVXJsIiwiY3JlYXRlSHJlZkZyb21VcmwiLCJuZXh0VXJsIiwiZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUiLCJwYXRobmFtZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js ***! + \********************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createRouterCacheKey\", ({\n enumerable: true,\n get: function() {\n return createRouterCacheKey;\n }\n}));\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(ssr)/./node_modules/next/dist/shared/lib/segment.js\");\nfunction createRouterCacheKey(segment, withoutSearchParameters) {\n if (withoutSearchParameters === void 0) withoutSearchParameters = false;\n // if the segment is an array, it means it's a dynamic segment\n // for example, ['lang', 'en', 'd']. We need to convert it to a string to store it as a cache node key.\n if (Array.isArray(segment)) {\n return (segment[0] + \"|\" + segment[1] + \"|\" + segment[2]).toLowerCase();\n }\n // Page segments might have search parameters, ie __PAGE__?foo=bar\n // When `withoutSearchParameters` is true, we only want to return the page segment\n if (withoutSearchParameters && segment.startsWith(_segment.PAGE_SEGMENT_KEY)) {\n return _segment.PAGE_SEGMENT_KEY;\n }\n return segment;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=create-router-cache-key.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx3REFBdUQ7SUFDbkRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxXQUFXQyxtQkFBT0EsQ0FBQyx5RkFBNkI7QUFDdEQsU0FBU0YscUJBQXFCRyxPQUFPLEVBQUVDLHVCQUF1QjtJQUMxRCxJQUFJQSw0QkFBNEIsS0FBSyxHQUFHQSwwQkFBMEI7SUFDbEUsOERBQThEO0lBQzlELHVHQUF1RztJQUN2RyxJQUFJQyxNQUFNQyxPQUFPLENBQUNILFVBQVU7UUFDeEIsT0FBTyxDQUFDQSxPQUFPLENBQUMsRUFBRSxHQUFHLE1BQU1BLE9BQU8sQ0FBQyxFQUFFLEdBQUcsTUFBTUEsT0FBTyxDQUFDLEVBQUUsRUFBRUksV0FBVztJQUN6RTtJQUNBLGtFQUFrRTtJQUNsRSxrRkFBa0Y7SUFDbEYsSUFBSUgsMkJBQTJCRCxRQUFRSyxVQUFVLENBQUNQLFNBQVNRLGdCQUFnQixHQUFHO1FBQzFFLE9BQU9SLFNBQVNRLGdCQUFnQjtJQUNwQztJQUNBLE9BQU9OO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT1AsUUFBUWMsT0FBTyxLQUFLLGNBQWUsT0FBT2QsUUFBUWMsT0FBTyxLQUFLLFlBQVlkLFFBQVFjLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2QsUUFBUWMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2pCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWMsT0FBTyxFQUFFLGNBQWM7UUFBRWIsT0FBTztJQUFLO0lBQ25FSCxPQUFPa0IsTUFBTSxDQUFDaEIsUUFBUWMsT0FBTyxFQUFFZDtJQUMvQmlCLE9BQU9qQixPQUFPLEdBQUdBLFFBQVFjLE9BQU87QUFDbEMsRUFFQSxtREFBbUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9jcmVhdGUtcm91dGVyLWNhY2hlLWtleS5qcz9mZWMyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUm91dGVyQ2FjaGVLZXlcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJvdXRlckNhY2hlS2V5O1xuICAgIH1cbn0pO1xuY29uc3QgX3NlZ21lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2hhcmVkL2xpYi9zZWdtZW50XCIpO1xuZnVuY3Rpb24gY3JlYXRlUm91dGVyQ2FjaGVLZXkoc2VnbWVudCwgd2l0aG91dFNlYXJjaFBhcmFtZXRlcnMpIHtcbiAgICBpZiAod2l0aG91dFNlYXJjaFBhcmFtZXRlcnMgPT09IHZvaWQgMCkgd2l0aG91dFNlYXJjaFBhcmFtZXRlcnMgPSBmYWxzZTtcbiAgICAvLyBpZiB0aGUgc2VnbWVudCBpcyBhbiBhcnJheSwgaXQgbWVhbnMgaXQncyBhIGR5bmFtaWMgc2VnbWVudFxuICAgIC8vIGZvciBleGFtcGxlLCBbJ2xhbmcnLCAnZW4nLCAnZCddLiBXZSBuZWVkIHRvIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgdG8gc3RvcmUgaXQgYXMgYSBjYWNoZSBub2RlIGtleS5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWdtZW50KSkge1xuICAgICAgICByZXR1cm4gKHNlZ21lbnRbMF0gKyBcInxcIiArIHNlZ21lbnRbMV0gKyBcInxcIiArIHNlZ21lbnRbMl0pLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIC8vIFBhZ2Ugc2VnbWVudHMgbWlnaHQgaGF2ZSBzZWFyY2ggcGFyYW1ldGVycywgaWUgX19QQUdFX18/Zm9vPWJhclxuICAgIC8vIFdoZW4gYHdpdGhvdXRTZWFyY2hQYXJhbWV0ZXJzYCBpcyB0cnVlLCB3ZSBvbmx5IHdhbnQgdG8gcmV0dXJuIHRoZSBwYWdlIHNlZ21lbnRcbiAgICBpZiAod2l0aG91dFNlYXJjaFBhcmFtZXRlcnMgJiYgc2VnbWVudC5zdGFydHNXaXRoKF9zZWdtZW50LlBBR0VfU0VHTUVOVF9LRVkpKSB7XG4gICAgICAgIHJldHVybiBfc2VnbWVudC5QQUdFX1NFR01FTlRfS0VZO1xuICAgIH1cbiAgICByZXR1cm4gc2VnbWVudDtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlLXJvdXRlci1jYWNoZS1rZXkuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwiX3NlZ21lbnQiLCJyZXF1aXJlIiwic2VnbWVudCIsIndpdGhvdXRTZWFyY2hQYXJhbWV0ZXJzIiwiQXJyYXkiLCJpc0FycmF5IiwidG9Mb3dlckNhc2UiLCJzdGFydHNXaXRoIiwiUEFHRV9TRUdNRU5UX0tFWSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js": +/*!******************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js ***! + \******************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fetchServerResponse\", ({\n enumerable: true,\n get: function() {\n return fetchServerResponse;\n }\n}));\nconst _approuterheaders = __webpack_require__(/*! ../app-router-headers */ \"(ssr)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _approuter = __webpack_require__(/*! ../app-router */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\");\nconst _appcallserver = __webpack_require__(/*! ../../app-call-server */ \"(ssr)/./node_modules/next/dist/client/app-call-server.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _hash = __webpack_require__(/*! ../../../shared/lib/hash */ \"(ssr)/./node_modules/next/dist/shared/lib/hash.js\");\n// @ts-ignore\n// eslint-disable-next-line import/no-extraneous-dependencies\n// import { createFromFetch } from 'react-server-dom-webpack/client'\nconst { createFromFetch } = true ? __webpack_require__(/*! react-server-dom-webpack/client.edge */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client-edge.js\") : 0;\nfunction doMpaNavigation(url) {\n return [\n (0, _approuter.urlToUrlWithoutFlightMarker)(url).toString(),\n undefined\n ];\n}\nasync function fetchServerResponse(url, flightRouterState, nextUrl, currentBuildId, prefetchKind) {\n const headers = {\n // Enable flight response\n [_approuterheaders.RSC_HEADER]: \"1\",\n // Provide the current router state\n [_approuterheaders.NEXT_ROUTER_STATE_TREE]: encodeURIComponent(JSON.stringify(flightRouterState))\n };\n /**\n * Three cases:\n * - `prefetchKind` is `undefined`, it means it's a normal navigation, so we want to prefetch the page data fully\n * - `prefetchKind` is `full` - we want to prefetch the whole page so same as above\n * - `prefetchKind` is `auto` - if the page is dynamic, prefetch the page data partially, if static prefetch the page data fully\n */ if (prefetchKind === _routerreducertypes.PrefetchKind.AUTO) {\n headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = \"1\";\n }\n if (nextUrl) {\n headers[_approuterheaders.NEXT_URL] = nextUrl;\n }\n const uniqueCacheQuery = (0, _hash.hexHash)([\n headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] || \"0\",\n headers[_approuterheaders.NEXT_ROUTER_STATE_TREE],\n headers[_approuterheaders.NEXT_URL]\n ].join(\",\"));\n try {\n let fetchUrl = new URL(url);\n if (false) {}\n // Add unique cache query to avoid caching conflicts on CDN which don't respect to Vary header\n fetchUrl.searchParams.set(_approuterheaders.NEXT_RSC_UNION_QUERY, uniqueCacheQuery);\n const res = await fetch(fetchUrl, {\n // Backwards compat for older browsers. `same-origin` is the default in modern browsers.\n credentials: \"same-origin\",\n headers\n });\n const responseUrl = (0, _approuter.urlToUrlWithoutFlightMarker)(res.url);\n const canonicalUrl = res.redirected ? responseUrl : undefined;\n const contentType = res.headers.get(\"content-type\") || \"\";\n const postponed = !!res.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER);\n let isFlightResponse = contentType === _approuterheaders.RSC_CONTENT_TYPE_HEADER;\n if (false) {}\n // If fetch returns something different than flight response handle it like a mpa navigation\n // If the fetch was not 200, we also handle it like a mpa navigation\n if (!isFlightResponse || !res.ok) {\n // in case the original URL came with a hash, preserve it before redirecting to the new URL\n if (url.hash) {\n responseUrl.hash = url.hash;\n }\n return doMpaNavigation(responseUrl.toString());\n }\n // Handle the `fetch` readable stream that can be unwrapped by `React.use`.\n const [buildId, flightData] = await createFromFetch(Promise.resolve(res), {\n callServer: _appcallserver.callServer\n });\n if (currentBuildId !== buildId) {\n return doMpaNavigation(res.url);\n }\n return [\n flightData,\n canonicalUrl,\n postponed\n ];\n } catch (err) {\n console.error(\"Failed to fetch RSC payload for \" + url + \". Falling back to browser navigation.\", err);\n // If fetch fails handle it like a mpa navigation\n // TODO-APP: Add a test for the case where a CORS request fails, e.g. external url redirect coming from the response.\n // See https://github.com/vercel/next.js/issues/43605#issuecomment-1451617521 for a reproduction.\n return [\n url.toString(),\n undefined\n ];\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fetch-server-response.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ZldGNoLXNlcnZlci1yZXNwb25zZS5qcyIsIm1hcHBpbmdzIjoicURBRWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHVEQUFzRDtJQUNsREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLG9CQUFvQkMsbUJBQU9BLENBQUMscUdBQXVCO0FBQ3pELE1BQU1DLGFBQWFELG1CQUFPQSxDQUFDLHFGQUFlO0FBQzFDLE1BQU1FLGlCQUFpQkYsbUJBQU9BLENBQUMsdUZBQXVCO0FBQ3RELE1BQU1HLHNCQUFzQkgsbUJBQU9BLENBQUMsdUhBQXdCO0FBQzVELE1BQU1JLFFBQVFKLG1CQUFPQSxDQUFDLG1GQUEwQjtBQUNoRCxhQUFhO0FBQ2IsNkRBQTZEO0FBQzdELG9FQUFvRTtBQUNwRSxNQUFNLEVBQUVLLGVBQWUsRUFBRSxHQUFHLEtBQTBCLEdBQUdMLG1CQUFPQSxDQUFDLHNLQUFzQyxJQUFJQSxDQUEwQztBQUNySixTQUFTUyxnQkFBZ0JDLEdBQUc7SUFDeEIsT0FBTztRQUNGLElBQUdULFdBQVdVLDJCQUEyQixFQUFFRCxLQUFLRSxRQUFRO1FBQ3pEQztLQUNIO0FBQ0w7QUFDQSxlQUFlZixvQkFBb0JZLEdBQUcsRUFBRUksaUJBQWlCLEVBQUVDLE9BQU8sRUFBRUMsY0FBYyxFQUFFQyxZQUFZO0lBQzVGLE1BQU1DLFVBQVU7UUFDWix5QkFBeUI7UUFDekIsQ0FBQ25CLGtCQUFrQm9CLFVBQVUsQ0FBQyxFQUFFO1FBQ2hDLG1DQUFtQztRQUNuQyxDQUFDcEIsa0JBQWtCcUIsc0JBQXNCLENBQUMsRUFBRUMsbUJBQW1CQyxLQUFLQyxTQUFTLENBQUNUO0lBQ2xGO0lBQ0E7Ozs7O0dBS0QsR0FBRyxJQUFJRyxpQkFBaUJkLG9CQUFvQnFCLFlBQVksQ0FBQ0MsSUFBSSxFQUFFO1FBQzFEUCxPQUFPLENBQUNuQixrQkFBa0IyQiwyQkFBMkIsQ0FBQyxHQUFHO0lBQzdEO0lBQ0EsSUFBSVgsU0FBUztRQUNURyxPQUFPLENBQUNuQixrQkFBa0I0QixRQUFRLENBQUMsR0FBR1o7SUFDMUM7SUFDQSxNQUFNYSxtQkFBbUIsQ0FBQyxHQUFHeEIsTUFBTXlCLE9BQU8sRUFBRTtRQUN4Q1gsT0FBTyxDQUFDbkIsa0JBQWtCMkIsMkJBQTJCLENBQUMsSUFBSTtRQUMxRFIsT0FBTyxDQUFDbkIsa0JBQWtCcUIsc0JBQXNCLENBQUM7UUFDakRGLE9BQU8sQ0FBQ25CLGtCQUFrQjRCLFFBQVEsQ0FBQztLQUN0QyxDQUFDRyxJQUFJLENBQUM7SUFDUCxJQUFJO1FBQ0EsSUFBSUMsV0FBVyxJQUFJQyxJQUFJdEI7UUFDdkIsSUFBSUosS0FBcUMsRUFBRSxFQVExQztRQUNELDhGQUE4RjtRQUM5RnlCLFNBQVNLLFlBQVksQ0FBQ0MsR0FBRyxDQUFDdEMsa0JBQWtCdUMsb0JBQW9CLEVBQUVWO1FBQ2xFLE1BQU1XLE1BQU0sTUFBTUMsTUFBTVQsVUFBVTtZQUM5Qix3RkFBd0Y7WUFDeEZVLGFBQWE7WUFDYnZCO1FBQ0o7UUFDQSxNQUFNd0IsY0FBYyxDQUFDLEdBQUd6QyxXQUFXVSwyQkFBMkIsRUFBRTRCLElBQUk3QixHQUFHO1FBQ3ZFLE1BQU1pQyxlQUFlSixJQUFJSyxVQUFVLEdBQUdGLGNBQWM3QjtRQUNwRCxNQUFNZ0MsY0FBY04sSUFBSXJCLE9BQU8sQ0FBQ3JCLEdBQUcsQ0FBQyxtQkFBbUI7UUFDdkQsTUFBTWlELFlBQVksQ0FBQyxDQUFDUCxJQUFJckIsT0FBTyxDQUFDckIsR0FBRyxDQUFDRSxrQkFBa0JnRCx3QkFBd0I7UUFDOUUsSUFBSUMsbUJBQW1CSCxnQkFBZ0I5QyxrQkFBa0JrRCx1QkFBdUI7UUFDaEYsSUFBSTNDLEtBQXFDLEVBQUUsRUFNMUM7UUFDRCw0RkFBNEY7UUFDNUYsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQzBDLG9CQUFvQixDQUFDVCxJQUFJWSxFQUFFLEVBQUU7WUFDOUIsMkZBQTJGO1lBQzNGLElBQUl6QyxJQUFJMEMsSUFBSSxFQUFFO2dCQUNWVixZQUFZVSxJQUFJLEdBQUcxQyxJQUFJMEMsSUFBSTtZQUMvQjtZQUNBLE9BQU8zQyxnQkFBZ0JpQyxZQUFZOUIsUUFBUTtRQUMvQztRQUNBLDJFQUEyRTtRQUMzRSxNQUFNLENBQUN5QyxTQUFTQyxXQUFXLEdBQUcsTUFBTWpELGdCQUFnQmtELFFBQVFDLE9BQU8sQ0FBQ2pCLE1BQU07WUFDdEVrQixZQUFZdkQsZUFBZXVELFVBQVU7UUFDekM7UUFDQSxJQUFJekMsbUJBQW1CcUMsU0FBUztZQUM1QixPQUFPNUMsZ0JBQWdCOEIsSUFBSTdCLEdBQUc7UUFDbEM7UUFDQSxPQUFPO1lBQ0g0QztZQUNBWDtZQUNBRztTQUNIO0lBQ0wsRUFBRSxPQUFPWSxLQUFLO1FBQ1ZDLFFBQVFDLEtBQUssQ0FBQyxxQ0FBcUNsRCxNQUFNLHlDQUF5Q2dEO1FBQ2xHLGlEQUFpRDtRQUNqRCxxSEFBcUg7UUFDckgsaUdBQWlHO1FBQ2pHLE9BQU87WUFDSGhELElBQUlFLFFBQVE7WUFDWkM7U0FDSDtJQUNMO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT25CLFFBQVFtRSxPQUFPLEtBQUssY0FBZSxPQUFPbkUsUUFBUW1FLE9BQU8sS0FBSyxZQUFZbkUsUUFBUW1FLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT25FLFFBQVFtRSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdEUsT0FBT0MsY0FBYyxDQUFDQyxRQUFRbUUsT0FBTyxFQUFFLGNBQWM7UUFBRWxFLE9BQU87SUFBSztJQUNuRUgsT0FBT3VFLE1BQU0sQ0FBQ3JFLFFBQVFtRSxPQUFPLEVBQUVuRTtJQUMvQnNFLE9BQU90RSxPQUFPLEdBQUdBLFFBQVFtRSxPQUFPO0FBQ2xDLEVBRUEsaURBQWlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmV0Y2gtc2VydmVyLXJlc3BvbnNlLmpzP2ZhNzgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmV0Y2hTZXJ2ZXJSZXNwb25zZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmV0Y2hTZXJ2ZXJSZXNwb25zZTtcbiAgICB9XG59KTtcbmNvbnN0IF9hcHByb3V0ZXJoZWFkZXJzID0gcmVxdWlyZShcIi4uL2FwcC1yb3V0ZXItaGVhZGVyc1wiKTtcbmNvbnN0IF9hcHByb3V0ZXIgPSByZXF1aXJlKFwiLi4vYXBwLXJvdXRlclwiKTtcbmNvbnN0IF9hcHBjYWxsc2VydmVyID0gcmVxdWlyZShcIi4uLy4uL2FwcC1jYWxsLXNlcnZlclwiKTtcbmNvbnN0IF9yb3V0ZXJyZWR1Y2VydHlwZXMgPSByZXF1aXJlKFwiLi9yb3V0ZXItcmVkdWNlci10eXBlc1wiKTtcbmNvbnN0IF9oYXNoID0gcmVxdWlyZShcIi4uLy4uLy4uL3NoYXJlZC9saWIvaGFzaFwiKTtcbi8vIEB0cy1pZ25vcmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbi8vIGltcG9ydCB7IGNyZWF0ZUZyb21GZXRjaCB9IGZyb20gJ3JlYWN0LXNlcnZlci1kb20td2VicGFjay9jbGllbnQnXG5jb25zdCB7IGNyZWF0ZUZyb21GZXRjaCB9ID0gISFwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgPyByZXF1aXJlKFwicmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudC5lZGdlXCIpIDogcmVxdWlyZShcInJlYWN0LXNlcnZlci1kb20td2VicGFjay9jbGllbnRcIik7XG5mdW5jdGlvbiBkb01wYU5hdmlnYXRpb24odXJsKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgKDAsIF9hcHByb3V0ZXIudXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyKSh1cmwpLnRvU3RyaW5nKCksXG4gICAgICAgIHVuZGVmaW5lZFxuICAgIF07XG59XG5hc3luYyBmdW5jdGlvbiBmZXRjaFNlcnZlclJlc3BvbnNlKHVybCwgZmxpZ2h0Um91dGVyU3RhdGUsIG5leHRVcmwsIGN1cnJlbnRCdWlsZElkLCBwcmVmZXRjaEtpbmQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAvLyBFbmFibGUgZmxpZ2h0IHJlc3BvbnNlXG4gICAgICAgIFtfYXBwcm91dGVyaGVhZGVycy5SU0NfSEVBREVSXTogXCIxXCIsXG4gICAgICAgIC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgcm91dGVyIHN0YXRlXG4gICAgICAgIFtfYXBwcm91dGVyaGVhZGVycy5ORVhUX1JPVVRFUl9TVEFURV9UUkVFXTogZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGZsaWdodFJvdXRlclN0YXRlKSlcbiAgICB9O1xuICAgIC8qKlxuICAgKiBUaHJlZSBjYXNlczpcbiAgICogLSBgcHJlZmV0Y2hLaW5kYCBpcyBgdW5kZWZpbmVkYCwgaXQgbWVhbnMgaXQncyBhIG5vcm1hbCBuYXZpZ2F0aW9uLCBzbyB3ZSB3YW50IHRvIHByZWZldGNoIHRoZSBwYWdlIGRhdGEgZnVsbHlcbiAgICogLSBgcHJlZmV0Y2hLaW5kYCBpcyBgZnVsbGAgLSB3ZSB3YW50IHRvIHByZWZldGNoIHRoZSB3aG9sZSBwYWdlIHNvIHNhbWUgYXMgYWJvdmVcbiAgICogLSBgcHJlZmV0Y2hLaW5kYCBpcyBgYXV0b2AgLSBpZiB0aGUgcGFnZSBpcyBkeW5hbWljLCBwcmVmZXRjaCB0aGUgcGFnZSBkYXRhIHBhcnRpYWxseSwgaWYgc3RhdGljIHByZWZldGNoIHRoZSBwYWdlIGRhdGEgZnVsbHlcbiAgICovIGlmIChwcmVmZXRjaEtpbmQgPT09IF9yb3V0ZXJyZWR1Y2VydHlwZXMuUHJlZmV0Y2hLaW5kLkFVVE8pIHtcbiAgICAgICAgaGVhZGVyc1tfYXBwcm91dGVyaGVhZGVycy5ORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVJdID0gXCIxXCI7XG4gICAgfVxuICAgIGlmIChuZXh0VXJsKSB7XG4gICAgICAgIGhlYWRlcnNbX2FwcHJvdXRlcmhlYWRlcnMuTkVYVF9VUkxdID0gbmV4dFVybDtcbiAgICB9XG4gICAgY29uc3QgdW5pcXVlQ2FjaGVRdWVyeSA9ICgwLCBfaGFzaC5oZXhIYXNoKShbXG4gICAgICAgIGhlYWRlcnNbX2FwcHJvdXRlcmhlYWRlcnMuTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSXSB8fCBcIjBcIixcbiAgICAgICAgaGVhZGVyc1tfYXBwcm91dGVyaGVhZGVycy5ORVhUX1JPVVRFUl9TVEFURV9UUkVFXSxcbiAgICAgICAgaGVhZGVyc1tfYXBwcm91dGVyaGVhZGVycy5ORVhUX1VSTF1cbiAgICBdLmpvaW4oXCIsXCIpKTtcbiAgICB0cnkge1xuICAgICAgICBsZXQgZmV0Y2hVcmwgPSBuZXcgVVJMKHVybCk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ09ORklHX09VVFBVVCA9PT0gXCJleHBvcnRcIikge1xuICAgICAgICAgICAgICAgIGlmIChmZXRjaFVybC5wYXRobmFtZS5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hVcmwucGF0aG5hbWUgKz0gXCJpbmRleC50eHRcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmZXRjaFVybC5wYXRobmFtZSArPSBcIi50eHRcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkIHVuaXF1ZSBjYWNoZSBxdWVyeSB0byBhdm9pZCBjYWNoaW5nIGNvbmZsaWN0cyBvbiBDRE4gd2hpY2ggZG9uJ3QgcmVzcGVjdCB0byBWYXJ5IGhlYWRlclxuICAgICAgICBmZXRjaFVybC5zZWFyY2hQYXJhbXMuc2V0KF9hcHByb3V0ZXJoZWFkZXJzLk5FWFRfUlNDX1VOSU9OX1FVRVJZLCB1bmlxdWVDYWNoZVF1ZXJ5KTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goZmV0Y2hVcmwsIHtcbiAgICAgICAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXQgZm9yIG9sZGVyIGJyb3dzZXJzLiBgc2FtZS1vcmlnaW5gIGlzIHRoZSBkZWZhdWx0IGluIG1vZGVybiBicm93c2Vycy5cbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG4gICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXNwb25zZVVybCA9ICgwLCBfYXBwcm91dGVyLnVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlcikocmVzLnVybCk7XG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbFVybCA9IHJlcy5yZWRpcmVjdGVkID8gcmVzcG9uc2VVcmwgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpIHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IHBvc3Rwb25lZCA9ICEhcmVzLmhlYWRlcnMuZ2V0KF9hcHByb3V0ZXJoZWFkZXJzLk5FWFRfRElEX1BPU1RQT05FX0hFQURFUik7XG4gICAgICAgIGxldCBpc0ZsaWdodFJlc3BvbnNlID0gY29udGVudFR5cGUgPT09IF9hcHByb3V0ZXJoZWFkZXJzLlJTQ19DT05URU5UX1RZUEVfSEVBREVSO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0NPTkZJR19PVVRQVVQgPT09IFwiZXhwb3J0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRmxpZ2h0UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNGbGlnaHRSZXNwb25zZSA9IGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoXCJ0ZXh0L3BsYWluXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBmZXRjaCByZXR1cm5zIHNvbWV0aGluZyBkaWZmZXJlbnQgdGhhbiBmbGlnaHQgcmVzcG9uc2UgaGFuZGxlIGl0IGxpa2UgYSBtcGEgbmF2aWdhdGlvblxuICAgICAgICAvLyBJZiB0aGUgZmV0Y2ggd2FzIG5vdCAyMDAsIHdlIGFsc28gaGFuZGxlIGl0IGxpa2UgYSBtcGEgbmF2aWdhdGlvblxuICAgICAgICBpZiAoIWlzRmxpZ2h0UmVzcG9uc2UgfHwgIXJlcy5vaykge1xuICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgb3JpZ2luYWwgVVJMIGNhbWUgd2l0aCBhIGhhc2gsIHByZXNlcnZlIGl0IGJlZm9yZSByZWRpcmVjdGluZyB0byB0aGUgbmV3IFVSTFxuICAgICAgICAgICAgaWYgKHVybC5oYXNoKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VVcmwuaGFzaCA9IHVybC5oYXNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRvTXBhTmF2aWdhdGlvbihyZXNwb25zZVVybC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBIYW5kbGUgdGhlIGBmZXRjaGAgcmVhZGFibGUgc3RyZWFtIHRoYXQgY2FuIGJlIHVud3JhcHBlZCBieSBgUmVhY3QudXNlYC5cbiAgICAgICAgY29uc3QgW2J1aWxkSWQsIGZsaWdodERhdGFdID0gYXdhaXQgY3JlYXRlRnJvbUZldGNoKFByb21pc2UucmVzb2x2ZShyZXMpLCB7XG4gICAgICAgICAgICBjYWxsU2VydmVyOiBfYXBwY2FsbHNlcnZlci5jYWxsU2VydmVyXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY3VycmVudEJ1aWxkSWQgIT09IGJ1aWxkSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBkb01wYU5hdmlnYXRpb24ocmVzLnVybCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGZsaWdodERhdGEsXG4gICAgICAgICAgICBjYW5vbmljYWxVcmwsXG4gICAgICAgICAgICBwb3N0cG9uZWRcbiAgICAgICAgXTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBmZXRjaCBSU0MgcGF5bG9hZCBmb3IgXCIgKyB1cmwgKyBcIi4gRmFsbGluZyBiYWNrIHRvIGJyb3dzZXIgbmF2aWdhdGlvbi5cIiwgZXJyKTtcbiAgICAgICAgLy8gSWYgZmV0Y2ggZmFpbHMgaGFuZGxlIGl0IGxpa2UgYSBtcGEgbmF2aWdhdGlvblxuICAgICAgICAvLyBUT0RPLUFQUDogQWRkIGEgdGVzdCBmb3IgdGhlIGNhc2Ugd2hlcmUgYSBDT1JTIHJlcXVlc3QgZmFpbHMsIGUuZy4gZXh0ZXJuYWwgdXJsIHJlZGlyZWN0IGNvbWluZyBmcm9tIHRoZSByZXNwb25zZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9pc3N1ZXMvNDM2MDUjaXNzdWVjb21tZW50LTE0NTE2MTc1MjEgZm9yIGEgcmVwcm9kdWN0aW9uLlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdXJsLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZldGNoLXNlcnZlci1yZXNwb25zZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIsIl9hcHByb3V0ZXJoZWFkZXJzIiwicmVxdWlyZSIsIl9hcHByb3V0ZXIiLCJfYXBwY2FsbHNlcnZlciIsIl9yb3V0ZXJyZWR1Y2VydHlwZXMiLCJfaGFzaCIsImNyZWF0ZUZyb21GZXRjaCIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1JVTlRJTUUiLCJkb01wYU5hdmlnYXRpb24iLCJ1cmwiLCJ1cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXIiLCJ0b1N0cmluZyIsInVuZGVmaW5lZCIsImZsaWdodFJvdXRlclN0YXRlIiwibmV4dFVybCIsImN1cnJlbnRCdWlsZElkIiwicHJlZmV0Y2hLaW5kIiwiaGVhZGVycyIsIlJTQ19IRUFERVIiLCJORVhUX1JPVVRFUl9TVEFURV9UUkVFIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIlByZWZldGNoS2luZCIsIkFVVE8iLCJORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVIiLCJORVhUX1VSTCIsInVuaXF1ZUNhY2hlUXVlcnkiLCJoZXhIYXNoIiwiam9pbiIsImZldGNoVXJsIiwiVVJMIiwiX19ORVhUX0NPTkZJR19PVVRQVVQiLCJwYXRobmFtZSIsImVuZHNXaXRoIiwic2VhcmNoUGFyYW1zIiwic2V0IiwiTkVYVF9SU0NfVU5JT05fUVVFUlkiLCJyZXMiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwicmVzcG9uc2VVcmwiLCJjYW5vbmljYWxVcmwiLCJyZWRpcmVjdGVkIiwiY29udGVudFR5cGUiLCJwb3N0cG9uZWQiLCJORVhUX0RJRF9QT1NUUE9ORV9IRUFERVIiLCJpc0ZsaWdodFJlc3BvbnNlIiwiUlNDX0NPTlRFTlRfVFlQRV9IRUFERVIiLCJzdGFydHNXaXRoIiwib2siLCJoYXNoIiwiYnVpbGRJZCIsImZsaWdodERhdGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNhbGxTZXJ2ZXIiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-data-property.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/fill-cache-with-data-property.js ***! + \**************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fillCacheWithDataProperty\", ({\n enumerable: true,\n get: function() {\n return fillCacheWithDataProperty;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction fillCacheWithDataProperty(newCache, existingCache, flightSegmentPath, fetchResponse) {\n const isLastEntry = flightSegmentPath.length <= 2;\n const [parallelRouteKey, segment] = flightSegmentPath;\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const existingChildSegmentMap = existingCache.parallelRoutes.get(parallelRouteKey);\n let childSegmentMap = newCache.parallelRoutes.get(parallelRouteKey);\n if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n childSegmentMap = new Map(existingChildSegmentMap);\n newCache.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n }\n const existingChildCacheNode = existingChildSegmentMap == null ? void 0 : existingChildSegmentMap.get(cacheKey);\n let childCacheNode = childSegmentMap.get(cacheKey);\n // In case of last segment start off the fetch at this level and don't copy further down.\n if (isLastEntry) {\n if (!childCacheNode || !childCacheNode.lazyData || childCacheNode === existingChildCacheNode) {\n childSegmentMap.set(cacheKey, {\n lazyData: fetchResponse(),\n rsc: null,\n prefetchRsc: null,\n parallelRoutes: new Map()\n });\n }\n return;\n }\n if (!childCacheNode || !existingChildCacheNode) {\n // Start fetch in the place where the existing cache doesn't have the data yet.\n if (!childCacheNode) {\n childSegmentMap.set(cacheKey, {\n lazyData: fetchResponse(),\n rsc: null,\n prefetchRsc: null,\n parallelRoutes: new Map()\n });\n }\n return;\n }\n if (childCacheNode === existingChildCacheNode) {\n childCacheNode = {\n lazyData: childCacheNode.lazyData,\n rsc: childCacheNode.rsc,\n prefetchRsc: childCacheNode.prefetchRsc,\n parallelRoutes: new Map(childCacheNode.parallelRoutes)\n };\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n return fillCacheWithDataProperty(childCacheNode, existingChildCacheNode, flightSegmentPath.slice(2), fetchResponse);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fill-cache-with-data-property.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ZpbGwtY2FjaGUtd2l0aC1kYXRhLXByb3BlcnR5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw2REFBNEQ7SUFDeERJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyx3QkFBd0JDLG1CQUFPQSxDQUFDLDZIQUEyQjtBQUNqRSxTQUFTRiwwQkFBMEJHLFFBQVEsRUFBRUMsYUFBYSxFQUFFQyxpQkFBaUIsRUFBRUMsYUFBYTtJQUN4RixNQUFNQyxjQUFjRixrQkFBa0JHLE1BQU0sSUFBSTtJQUNoRCxNQUFNLENBQUNDLGtCQUFrQkMsUUFBUSxHQUFHTDtJQUNwQyxNQUFNTSxXQUFXLENBQUMsR0FBR1Ysc0JBQXNCVyxvQkFBb0IsRUFBRUY7SUFDakUsTUFBTUcsMEJBQTBCVCxjQUFjVSxjQUFjLENBQUNmLEdBQUcsQ0FBQ1U7SUFDakUsSUFBSU0sa0JBQWtCWixTQUFTVyxjQUFjLENBQUNmLEdBQUcsQ0FBQ1U7SUFDbEQsSUFBSSxDQUFDTSxtQkFBbUJBLG9CQUFvQkYseUJBQXlCO1FBQ2pFRSxrQkFBa0IsSUFBSUMsSUFBSUg7UUFDMUJWLFNBQVNXLGNBQWMsQ0FBQ0csR0FBRyxDQUFDUixrQkFBa0JNO0lBQ2xEO0lBQ0EsTUFBTUcseUJBQXlCTCwyQkFBMkIsT0FBTyxLQUFLLElBQUlBLHdCQUF3QmQsR0FBRyxDQUFDWTtJQUN0RyxJQUFJUSxpQkFBaUJKLGdCQUFnQmhCLEdBQUcsQ0FBQ1k7SUFDekMseUZBQXlGO0lBQ3pGLElBQUlKLGFBQWE7UUFDYixJQUFJLENBQUNZLGtCQUFrQixDQUFDQSxlQUFlQyxRQUFRLElBQUlELG1CQUFtQkQsd0JBQXdCO1lBQzFGSCxnQkFBZ0JFLEdBQUcsQ0FBQ04sVUFBVTtnQkFDMUJTLFVBQVVkO2dCQUNWZSxLQUFLO2dCQUNMQyxhQUFhO2dCQUNiUixnQkFBZ0IsSUFBSUU7WUFDeEI7UUFDSjtRQUNBO0lBQ0o7SUFDQSxJQUFJLENBQUNHLGtCQUFrQixDQUFDRCx3QkFBd0I7UUFDNUMsK0VBQStFO1FBQy9FLElBQUksQ0FBQ0MsZ0JBQWdCO1lBQ2pCSixnQkFBZ0JFLEdBQUcsQ0FBQ04sVUFBVTtnQkFDMUJTLFVBQVVkO2dCQUNWZSxLQUFLO2dCQUNMQyxhQUFhO2dCQUNiUixnQkFBZ0IsSUFBSUU7WUFDeEI7UUFDSjtRQUNBO0lBQ0o7SUFDQSxJQUFJRyxtQkFBbUJELHdCQUF3QjtRQUMzQ0MsaUJBQWlCO1lBQ2JDLFVBQVVELGVBQWVDLFFBQVE7WUFDakNDLEtBQUtGLGVBQWVFLEdBQUc7WUFDdkJDLGFBQWFILGVBQWVHLFdBQVc7WUFDdkNSLGdCQUFnQixJQUFJRSxJQUFJRyxlQUFlTCxjQUFjO1FBQ3pEO1FBQ0FDLGdCQUFnQkUsR0FBRyxDQUFDTixVQUFVUTtJQUNsQztJQUNBLE9BQU9uQiwwQkFBMEJtQixnQkFBZ0JELHdCQUF3QmIsa0JBQWtCa0IsS0FBSyxDQUFDLElBQUlqQjtBQUN6RztBQUVBLElBQUksQ0FBQyxPQUFPVixRQUFRNEIsT0FBTyxLQUFLLGNBQWUsT0FBTzVCLFFBQVE0QixPQUFPLEtBQUssWUFBWTVCLFFBQVE0QixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU81QixRQUFRNEIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySy9CLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTRCLE9BQU8sRUFBRSxjQUFjO1FBQUUzQixPQUFPO0lBQUs7SUFDbkVILE9BQU9nQyxNQUFNLENBQUM5QixRQUFRNEIsT0FBTyxFQUFFNUI7SUFDL0IrQixPQUFPL0IsT0FBTyxHQUFHQSxRQUFRNEIsT0FBTztBQUNsQyxFQUVBLHlEQUF5RCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ZpbGwtY2FjaGUtd2l0aC1kYXRhLXByb3BlcnR5LmpzP2Y1NTIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaWxsQ2FjaGVXaXRoRGF0YVByb3BlcnR5XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmaWxsQ2FjaGVXaXRoRGF0YVByb3BlcnR5O1xuICAgIH1cbn0pO1xuY29uc3QgX2NyZWF0ZXJvdXRlcmNhY2hla2V5ID0gcmVxdWlyZShcIi4vY3JlYXRlLXJvdXRlci1jYWNoZS1rZXlcIik7XG5mdW5jdGlvbiBmaWxsQ2FjaGVXaXRoRGF0YVByb3BlcnR5KG5ld0NhY2hlLCBleGlzdGluZ0NhY2hlLCBmbGlnaHRTZWdtZW50UGF0aCwgZmV0Y2hSZXNwb25zZSkge1xuICAgIGNvbnN0IGlzTGFzdEVudHJ5ID0gZmxpZ2h0U2VnbWVudFBhdGgubGVuZ3RoIDw9IDI7XG4gICAgY29uc3QgW3BhcmFsbGVsUm91dGVLZXksIHNlZ21lbnRdID0gZmxpZ2h0U2VnbWVudFBhdGg7XG4gICAgY29uc3QgY2FjaGVLZXkgPSAoMCwgX2NyZWF0ZXJvdXRlcmNhY2hla2V5LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShzZWdtZW50KTtcbiAgICBjb25zdCBleGlzdGluZ0NoaWxkU2VnbWVudE1hcCA9IGV4aXN0aW5nQ2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpO1xuICAgIGxldCBjaGlsZFNlZ21lbnRNYXAgPSBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSk7XG4gICAgaWYgKCFjaGlsZFNlZ21lbnRNYXAgfHwgY2hpbGRTZWdtZW50TWFwID09PSBleGlzdGluZ0NoaWxkU2VnbWVudE1hcCkge1xuICAgICAgICBjaGlsZFNlZ21lbnRNYXAgPSBuZXcgTWFwKGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKTtcbiAgICAgICAgbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuc2V0KHBhcmFsbGVsUm91dGVLZXksIGNoaWxkU2VnbWVudE1hcCk7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUgPSBleGlzdGluZ0NoaWxkU2VnbWVudE1hcCA9PSBudWxsID8gdm9pZCAwIDogZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXAuZ2V0KGNhY2hlS2V5KTtcbiAgICBsZXQgY2hpbGRDYWNoZU5vZGUgPSBjaGlsZFNlZ21lbnRNYXAuZ2V0KGNhY2hlS2V5KTtcbiAgICAvLyBJbiBjYXNlIG9mIGxhc3Qgc2VnbWVudCBzdGFydCBvZmYgdGhlIGZldGNoIGF0IHRoaXMgbGV2ZWwgYW5kIGRvbid0IGNvcHkgZnVydGhlciBkb3duLlxuICAgIGlmIChpc0xhc3RFbnRyeSkge1xuICAgICAgICBpZiAoIWNoaWxkQ2FjaGVOb2RlIHx8ICFjaGlsZENhY2hlTm9kZS5sYXp5RGF0YSB8fCBjaGlsZENhY2hlTm9kZSA9PT0gZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgICAgICAgICAgY2hpbGRTZWdtZW50TWFwLnNldChjYWNoZUtleSwge1xuICAgICAgICAgICAgICAgIGxhenlEYXRhOiBmZXRjaFJlc3BvbnNlKCksXG4gICAgICAgICAgICAgICAgcnNjOiBudWxsLFxuICAgICAgICAgICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICAgICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFjaGlsZENhY2hlTm9kZSB8fCAhZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgICAgICAvLyBTdGFydCBmZXRjaCBpbiB0aGUgcGxhY2Ugd2hlcmUgdGhlIGV4aXN0aW5nIGNhY2hlIGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSB5ZXQuXG4gICAgICAgIGlmICghY2hpbGRDYWNoZU5vZGUpIHtcbiAgICAgICAgICAgIGNoaWxkU2VnbWVudE1hcC5zZXQoY2FjaGVLZXksIHtcbiAgICAgICAgICAgICAgICBsYXp5RGF0YTogZmV0Y2hSZXNwb25zZSgpLFxuICAgICAgICAgICAgICAgIHJzYzogbnVsbCxcbiAgICAgICAgICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjaGlsZENhY2hlTm9kZSA9PT0gZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgICAgICBjaGlsZENhY2hlTm9kZSA9IHtcbiAgICAgICAgICAgIGxhenlEYXRhOiBjaGlsZENhY2hlTm9kZS5sYXp5RGF0YSxcbiAgICAgICAgICAgIHJzYzogY2hpbGRDYWNoZU5vZGUucnNjLFxuICAgICAgICAgICAgcHJlZmV0Y2hSc2M6IGNoaWxkQ2FjaGVOb2RlLnByZWZldGNoUnNjLFxuICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoY2hpbGRDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXMpXG4gICAgICAgIH07XG4gICAgICAgIGNoaWxkU2VnbWVudE1hcC5zZXQoY2FjaGVLZXksIGNoaWxkQ2FjaGVOb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGxDYWNoZVdpdGhEYXRhUHJvcGVydHkoY2hpbGRDYWNoZU5vZGUsIGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUsIGZsaWdodFNlZ21lbnRQYXRoLnNsaWNlKDIpLCBmZXRjaFJlc3BvbnNlKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsbC1jYWNoZS13aXRoLWRhdGEtcHJvcGVydHkuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImZpbGxDYWNoZVdpdGhEYXRhUHJvcGVydHkiLCJfY3JlYXRlcm91dGVyY2FjaGVrZXkiLCJyZXF1aXJlIiwibmV3Q2FjaGUiLCJleGlzdGluZ0NhY2hlIiwiZmxpZ2h0U2VnbWVudFBhdGgiLCJmZXRjaFJlc3BvbnNlIiwiaXNMYXN0RW50cnkiLCJsZW5ndGgiLCJwYXJhbGxlbFJvdXRlS2V5Iiwic2VnbWVudCIsImNhY2hlS2V5IiwiY3JlYXRlUm91dGVyQ2FjaGVLZXkiLCJleGlzdGluZ0NoaWxkU2VnbWVudE1hcCIsInBhcmFsbGVsUm91dGVzIiwiY2hpbGRTZWdtZW50TWFwIiwiTWFwIiwic2V0IiwiZXhpc3RpbmdDaGlsZENhY2hlTm9kZSIsImNoaWxkQ2FjaGVOb2RlIiwibGF6eURhdGEiLCJyc2MiLCJwcmVmZXRjaFJzYyIsInNsaWNlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-data-property.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js ***! + \*****************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fillCacheWithNewSubTreeData\", ({\n enumerable: true,\n get: function() {\n return fillCacheWithNewSubTreeData;\n }\n}));\nconst _invalidatecachebyrouterstate = __webpack_require__(/*! ./invalidate-cache-by-router-state */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction fillCacheWithNewSubTreeData(newCache, existingCache, flightDataPath, wasPrefetched) {\n const isLastEntry = flightDataPath.length <= 5;\n const [parallelRouteKey, segment] = flightDataPath;\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const existingChildSegmentMap = existingCache.parallelRoutes.get(parallelRouteKey);\n if (!existingChildSegmentMap) {\n // Bailout because the existing cache does not have the path to the leaf node\n // Will trigger lazy fetch in layout-router because of missing segment\n return;\n }\n let childSegmentMap = newCache.parallelRoutes.get(parallelRouteKey);\n if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n childSegmentMap = new Map(existingChildSegmentMap);\n newCache.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n }\n const existingChildCacheNode = existingChildSegmentMap.get(cacheKey);\n let childCacheNode = childSegmentMap.get(cacheKey);\n if (isLastEntry) {\n if (!childCacheNode || !childCacheNode.lazyData || childCacheNode === existingChildCacheNode) {\n const seedData = flightDataPath[3];\n const rsc = seedData[2];\n childCacheNode = {\n lazyData: null,\n rsc,\n prefetchRsc: null,\n // Ensure segments other than the one we got data for are preserved.\n parallelRoutes: existingChildCacheNode ? new Map(existingChildCacheNode.parallelRoutes) : new Map()\n };\n if (existingChildCacheNode) {\n (0, _invalidatecachebyrouterstate.invalidateCacheByRouterState)(childCacheNode, existingChildCacheNode, flightDataPath[2]);\n }\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(childCacheNode, existingChildCacheNode, flightDataPath[2], seedData, flightDataPath[4], wasPrefetched);\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n return;\n }\n if (!childCacheNode || !existingChildCacheNode) {\n // Bailout because the existing cache does not have the path to the leaf node\n // Will trigger lazy fetch in layout-router because of missing segment\n return;\n }\n if (childCacheNode === existingChildCacheNode) {\n childCacheNode = {\n lazyData: childCacheNode.lazyData,\n rsc: childCacheNode.rsc,\n prefetchRsc: childCacheNode.prefetchRsc,\n parallelRoutes: new Map(childCacheNode.parallelRoutes)\n };\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n fillCacheWithNewSubTreeData(childCacheNode, existingChildCacheNode, flightDataPath.slice(2), wasPrefetched);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fill-cache-with-new-subtree-data.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ZpbGwtY2FjaGUtd2l0aC1uZXctc3VidHJlZS1kYXRhLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwrREFBOEQ7SUFDMURJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxnQ0FBZ0NDLG1CQUFPQSxDQUFDLCtJQUFvQztBQUNsRixNQUFNQyxpQ0FBaUNELG1CQUFPQSxDQUFDLHFKQUF1QztBQUN0RixNQUFNRSx3QkFBd0JGLG1CQUFPQSxDQUFDLDZIQUEyQjtBQUNqRSxTQUFTRiw0QkFBNEJLLFFBQVEsRUFBRUMsYUFBYSxFQUFFQyxjQUFjLEVBQUVDLGFBQWE7SUFDdkYsTUFBTUMsY0FBY0YsZUFBZUcsTUFBTSxJQUFJO0lBQzdDLE1BQU0sQ0FBQ0Msa0JBQWtCQyxRQUFRLEdBQUdMO0lBQ3BDLE1BQU1NLFdBQVcsQ0FBQyxHQUFHVCxzQkFBc0JVLG9CQUFvQixFQUFFRjtJQUNqRSxNQUFNRywwQkFBMEJULGNBQWNVLGNBQWMsQ0FBQ2pCLEdBQUcsQ0FBQ1k7SUFDakUsSUFBSSxDQUFDSSx5QkFBeUI7UUFDMUIsNkVBQTZFO1FBQzdFLHNFQUFzRTtRQUN0RTtJQUNKO0lBQ0EsSUFBSUUsa0JBQWtCWixTQUFTVyxjQUFjLENBQUNqQixHQUFHLENBQUNZO0lBQ2xELElBQUksQ0FBQ00sbUJBQW1CQSxvQkFBb0JGLHlCQUF5QjtRQUNqRUUsa0JBQWtCLElBQUlDLElBQUlIO1FBQzFCVixTQUFTVyxjQUFjLENBQUNHLEdBQUcsQ0FBQ1Isa0JBQWtCTTtJQUNsRDtJQUNBLE1BQU1HLHlCQUF5Qkwsd0JBQXdCaEIsR0FBRyxDQUFDYztJQUMzRCxJQUFJUSxpQkFBaUJKLGdCQUFnQmxCLEdBQUcsQ0FBQ2M7SUFDekMsSUFBSUosYUFBYTtRQUNiLElBQUksQ0FBQ1ksa0JBQWtCLENBQUNBLGVBQWVDLFFBQVEsSUFBSUQsbUJBQW1CRCx3QkFBd0I7WUFDMUYsTUFBTUcsV0FBV2hCLGNBQWMsQ0FBQyxFQUFFO1lBQ2xDLE1BQU1pQixNQUFNRCxRQUFRLENBQUMsRUFBRTtZQUN2QkYsaUJBQWlCO2dCQUNiQyxVQUFVO2dCQUNWRTtnQkFDQUMsYUFBYTtnQkFDYixvRUFBb0U7Z0JBQ3BFVCxnQkFBZ0JJLHlCQUF5QixJQUFJRixJQUFJRSx1QkFBdUJKLGNBQWMsSUFBSSxJQUFJRTtZQUNsRztZQUNBLElBQUlFLHdCQUF3QjtnQkFDdkIsSUFBR25CLDhCQUE4QnlCLDRCQUE0QixFQUFFTCxnQkFBZ0JELHdCQUF3QmIsY0FBYyxDQUFDLEVBQUU7WUFDN0g7WUFDQyxJQUFHSiwrQkFBK0J3Qiw2QkFBNkIsRUFBRU4sZ0JBQWdCRCx3QkFBd0JiLGNBQWMsQ0FBQyxFQUFFLEVBQUVnQixVQUFVaEIsY0FBYyxDQUFDLEVBQUUsRUFBRUM7WUFDMUpTLGdCQUFnQkUsR0FBRyxDQUFDTixVQUFVUTtRQUNsQztRQUNBO0lBQ0o7SUFDQSxJQUFJLENBQUNBLGtCQUFrQixDQUFDRCx3QkFBd0I7UUFDNUMsNkVBQTZFO1FBQzdFLHNFQUFzRTtRQUN0RTtJQUNKO0lBQ0EsSUFBSUMsbUJBQW1CRCx3QkFBd0I7UUFDM0NDLGlCQUFpQjtZQUNiQyxVQUFVRCxlQUFlQyxRQUFRO1lBQ2pDRSxLQUFLSCxlQUFlRyxHQUFHO1lBQ3ZCQyxhQUFhSixlQUFlSSxXQUFXO1lBQ3ZDVCxnQkFBZ0IsSUFBSUUsSUFBSUcsZUFBZUwsY0FBYztRQUN6RDtRQUNBQyxnQkFBZ0JFLEdBQUcsQ0FBQ04sVUFBVVE7SUFDbEM7SUFDQXJCLDRCQUE0QnFCLGdCQUFnQkQsd0JBQXdCYixlQUFlcUIsS0FBSyxDQUFDLElBQUlwQjtBQUNqRztBQUVBLElBQUksQ0FBQyxPQUFPWixRQUFRaUMsT0FBTyxLQUFLLGNBQWUsT0FBT2pDLFFBQVFpQyxPQUFPLEtBQUssWUFBWWpDLFFBQVFpQyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9qQyxRQUFRaUMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3BDLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWlDLE9BQU8sRUFBRSxjQUFjO1FBQUVoQyxPQUFPO0lBQUs7SUFDbkVILE9BQU9xQyxNQUFNLENBQUNuQyxRQUFRaUMsT0FBTyxFQUFFakM7SUFDL0JvQyxPQUFPcEMsT0FBTyxHQUFHQSxRQUFRaUMsT0FBTztBQUNsQyxFQUVBLDREQUE0RCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ZpbGwtY2FjaGUtd2l0aC1uZXctc3VidHJlZS1kYXRhLmpzPzlmZTciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaWxsQ2FjaGVXaXRoTmV3U3ViVHJlZURhdGFcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnZhbGlkYXRlY2FjaGVieXJvdXRlcnN0YXRlID0gcmVxdWlyZShcIi4vaW52YWxpZGF0ZS1jYWNoZS1ieS1yb3V0ZXItc3RhdGVcIik7XG5jb25zdCBfZmlsbGxhenlpdGVtc3RpbGxsZWFmd2l0aGhlYWQgPSByZXF1aXJlKFwiLi9maWxsLWxhenktaXRlbXMtdGlsbC1sZWFmLXdpdGgtaGVhZFwiKTtcbmNvbnN0IF9jcmVhdGVyb3V0ZXJjYWNoZWtleSA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5XCIpO1xuZnVuY3Rpb24gZmlsbENhY2hlV2l0aE5ld1N1YlRyZWVEYXRhKG5ld0NhY2hlLCBleGlzdGluZ0NhY2hlLCBmbGlnaHREYXRhUGF0aCwgd2FzUHJlZmV0Y2hlZCkge1xuICAgIGNvbnN0IGlzTGFzdEVudHJ5ID0gZmxpZ2h0RGF0YVBhdGgubGVuZ3RoIDw9IDU7XG4gICAgY29uc3QgW3BhcmFsbGVsUm91dGVLZXksIHNlZ21lbnRdID0gZmxpZ2h0RGF0YVBhdGg7XG4gICAgY29uc3QgY2FjaGVLZXkgPSAoMCwgX2NyZWF0ZXJvdXRlcmNhY2hla2V5LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShzZWdtZW50KTtcbiAgICBjb25zdCBleGlzdGluZ0NoaWxkU2VnbWVudE1hcCA9IGV4aXN0aW5nQ2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpO1xuICAgIGlmICghZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXApIHtcbiAgICAgICAgLy8gQmFpbG91dCBiZWNhdXNlIHRoZSBleGlzdGluZyBjYWNoZSBkb2VzIG5vdCBoYXZlIHRoZSBwYXRoIHRvIHRoZSBsZWFmIG5vZGVcbiAgICAgICAgLy8gV2lsbCB0cmlnZ2VyIGxhenkgZmV0Y2ggaW4gbGF5b3V0LXJvdXRlciBiZWNhdXNlIG9mIG1pc3Npbmcgc2VnbWVudFxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBjaGlsZFNlZ21lbnRNYXAgPSBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSk7XG4gICAgaWYgKCFjaGlsZFNlZ21lbnRNYXAgfHwgY2hpbGRTZWdtZW50TWFwID09PSBleGlzdGluZ0NoaWxkU2VnbWVudE1hcCkge1xuICAgICAgICBjaGlsZFNlZ21lbnRNYXAgPSBuZXcgTWFwKGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKTtcbiAgICAgICAgbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuc2V0KHBhcmFsbGVsUm91dGVLZXksIGNoaWxkU2VnbWVudE1hcCk7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUgPSBleGlzdGluZ0NoaWxkU2VnbWVudE1hcC5nZXQoY2FjaGVLZXkpO1xuICAgIGxldCBjaGlsZENhY2hlTm9kZSA9IGNoaWxkU2VnbWVudE1hcC5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChpc0xhc3RFbnRyeSkge1xuICAgICAgICBpZiAoIWNoaWxkQ2FjaGVOb2RlIHx8ICFjaGlsZENhY2hlTm9kZS5sYXp5RGF0YSB8fCBjaGlsZENhY2hlTm9kZSA9PT0gZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgICAgICAgICAgY29uc3Qgc2VlZERhdGEgPSBmbGlnaHREYXRhUGF0aFszXTtcbiAgICAgICAgICAgIGNvbnN0IHJzYyA9IHNlZWREYXRhWzJdO1xuICAgICAgICAgICAgY2hpbGRDYWNoZU5vZGUgPSB7XG4gICAgICAgICAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgcnNjLFxuICAgICAgICAgICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBzZWdtZW50cyBvdGhlciB0aGFuIHRoZSBvbmUgd2UgZ290IGRhdGEgZm9yIGFyZSBwcmVzZXJ2ZWQuXG4gICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUgPyBuZXcgTWFwKGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXMpIDogbmV3IE1hcCgpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAoMCwgX2ludmFsaWRhdGVjYWNoZWJ5cm91dGVyc3RhdGUuaW52YWxpZGF0ZUNhY2hlQnlSb3V0ZXJTdGF0ZSkoY2hpbGRDYWNoZU5vZGUsIGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUsIGZsaWdodERhdGFQYXRoWzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICgwLCBfZmlsbGxhenlpdGVtc3RpbGxsZWFmd2l0aGhlYWQuZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQpKGNoaWxkQ2FjaGVOb2RlLCBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlLCBmbGlnaHREYXRhUGF0aFsyXSwgc2VlZERhdGEsIGZsaWdodERhdGFQYXRoWzRdLCB3YXNQcmVmZXRjaGVkKTtcbiAgICAgICAgICAgIGNoaWxkU2VnbWVudE1hcC5zZXQoY2FjaGVLZXksIGNoaWxkQ2FjaGVOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghY2hpbGRDYWNoZU5vZGUgfHwgIWV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUpIHtcbiAgICAgICAgLy8gQmFpbG91dCBiZWNhdXNlIHRoZSBleGlzdGluZyBjYWNoZSBkb2VzIG5vdCBoYXZlIHRoZSBwYXRoIHRvIHRoZSBsZWFmIG5vZGVcbiAgICAgICAgLy8gV2lsbCB0cmlnZ2VyIGxhenkgZmV0Y2ggaW4gbGF5b3V0LXJvdXRlciBiZWNhdXNlIG9mIG1pc3Npbmcgc2VnbWVudFxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjaGlsZENhY2hlTm9kZSA9PT0gZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgICAgICBjaGlsZENhY2hlTm9kZSA9IHtcbiAgICAgICAgICAgIGxhenlEYXRhOiBjaGlsZENhY2hlTm9kZS5sYXp5RGF0YSxcbiAgICAgICAgICAgIHJzYzogY2hpbGRDYWNoZU5vZGUucnNjLFxuICAgICAgICAgICAgcHJlZmV0Y2hSc2M6IGNoaWxkQ2FjaGVOb2RlLnByZWZldGNoUnNjLFxuICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoY2hpbGRDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXMpXG4gICAgICAgIH07XG4gICAgICAgIGNoaWxkU2VnbWVudE1hcC5zZXQoY2FjaGVLZXksIGNoaWxkQ2FjaGVOb2RlKTtcbiAgICB9XG4gICAgZmlsbENhY2hlV2l0aE5ld1N1YlRyZWVEYXRhKGNoaWxkQ2FjaGVOb2RlLCBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlLCBmbGlnaHREYXRhUGF0aC5zbGljZSgyKSwgd2FzUHJlZmV0Y2hlZCk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbGwtY2FjaGUtd2l0aC1uZXctc3VidHJlZS1kYXRhLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJmaWxsQ2FjaGVXaXRoTmV3U3ViVHJlZURhdGEiLCJfaW52YWxpZGF0ZWNhY2hlYnlyb3V0ZXJzdGF0ZSIsInJlcXVpcmUiLCJfZmlsbGxhenlpdGVtc3RpbGxsZWFmd2l0aGhlYWQiLCJfY3JlYXRlcm91dGVyY2FjaGVrZXkiLCJuZXdDYWNoZSIsImV4aXN0aW5nQ2FjaGUiLCJmbGlnaHREYXRhUGF0aCIsIndhc1ByZWZldGNoZWQiLCJpc0xhc3RFbnRyeSIsImxlbmd0aCIsInBhcmFsbGVsUm91dGVLZXkiLCJzZWdtZW50IiwiY2FjaGVLZXkiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsImV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwIiwicGFyYWxsZWxSb3V0ZXMiLCJjaGlsZFNlZ21lbnRNYXAiLCJNYXAiLCJzZXQiLCJleGlzdGluZ0NoaWxkQ2FjaGVOb2RlIiwiY2hpbGRDYWNoZU5vZGUiLCJsYXp5RGF0YSIsInNlZWREYXRhIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJpbnZhbGlkYXRlQ2FjaGVCeVJvdXRlclN0YXRlIiwiZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQiLCJzbGljZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js": +/*!********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js ***! + \********************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fillLazyItemsTillLeafWithHead\", ({\n enumerable: true,\n get: function() {\n return fillLazyItemsTillLeafWithHead;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction fillLazyItemsTillLeafWithHead(newCache, existingCache, routerState, cacheNodeSeedData, head, wasPrefetched) {\n const isLastSegment = Object.keys(routerState[1]).length === 0;\n if (isLastSegment) {\n newCache.head = head;\n return;\n }\n // Remove segment that we got data for so that it is filled in during rendering of rsc.\n for(const key in routerState[1]){\n const parallelRouteState = routerState[1][key];\n const segmentForParallelRoute = parallelRouteState[0];\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segmentForParallelRoute);\n // TODO: We should traverse the cacheNodeSeedData tree instead of the router\n // state tree. Ideally, they would always be the same shape, but because of\n // the loading.js pattern, cacheNodeSeedData sometimes only represents a\n // partial tree. That's why this node is sometimes null. Once PPR lands,\n // loading.js will no longer have special behavior and we can traverse the\n // data tree instead.\n //\n // We should also consider merging the router state tree and the data tree\n // in the response format, so that we don't have to send the keys twice.\n // Then the client can convert them into separate representations.\n const parallelSeedData = cacheNodeSeedData !== null && cacheNodeSeedData[1][key] !== undefined ? cacheNodeSeedData[1][key] : null;\n if (existingCache) {\n const existingParallelRoutesCacheNode = existingCache.parallelRoutes.get(key);\n if (existingParallelRoutesCacheNode) {\n let parallelRouteCacheNode = new Map(existingParallelRoutesCacheNode);\n const existingCacheNode = parallelRouteCacheNode.get(cacheKey);\n let newCacheNode;\n if (parallelSeedData !== null) {\n // New data was sent from the server.\n const seedNode = parallelSeedData[2];\n newCacheNode = {\n lazyData: null,\n rsc: seedNode,\n // This is a PPR-only field. When PPR is enabled, we shouldn't hit\n // this path during a navigation, but until PPR is fully implemented\n // yet it's possible the existing node does have a non-null\n // `prefetchRsc`. As an incremental step, we'll just de-opt to the\n // old behavior — no PPR value.\n prefetchRsc: null,\n parallelRoutes: new Map(existingCacheNode == null ? void 0 : existingCacheNode.parallelRoutes)\n };\n } else if (wasPrefetched && existingCacheNode) {\n // No new data was sent from the server, but the existing cache node\n // was prefetched, so we should reuse that.\n newCacheNode = {\n lazyData: existingCacheNode.lazyData,\n rsc: existingCacheNode.rsc,\n // This is a PPR-only field. Unlike the previous branch, since we're\n // just cloning the existing cache node, we might as well keep the\n // PPR value, if it exists.\n prefetchRsc: existingCacheNode.prefetchRsc,\n parallelRoutes: new Map(existingCacheNode.parallelRoutes)\n };\n } else {\n // No data available for this node. This will trigger a lazy fetch\n // during render.\n newCacheNode = {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n parallelRoutes: new Map(existingCacheNode == null ? void 0 : existingCacheNode.parallelRoutes)\n };\n }\n // Overrides the cache key with the new cache node.\n parallelRouteCacheNode.set(cacheKey, newCacheNode);\n // Traverse deeper to apply the head / fill lazy items till the head.\n fillLazyItemsTillLeafWithHead(newCacheNode, existingCacheNode, parallelRouteState, parallelSeedData ? parallelSeedData : null, head, wasPrefetched);\n newCache.parallelRoutes.set(key, parallelRouteCacheNode);\n continue;\n }\n }\n let newCacheNode;\n if (parallelSeedData !== null) {\n // New data was sent from the server.\n const seedNode = parallelSeedData[2];\n newCacheNode = {\n lazyData: null,\n rsc: seedNode,\n prefetchRsc: null,\n parallelRoutes: new Map()\n };\n } else {\n // No data available for this node. This will trigger a lazy fetch\n // during render.\n newCacheNode = {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n parallelRoutes: new Map()\n };\n }\n const existingParallelRoutes = newCache.parallelRoutes.get(key);\n if (existingParallelRoutes) {\n existingParallelRoutes.set(cacheKey, newCacheNode);\n } else {\n newCache.parallelRoutes.set(key, new Map([\n [\n cacheKey,\n newCacheNode\n ]\n ]));\n }\n fillLazyItemsTillLeafWithHead(newCacheNode, undefined, parallelRouteState, parallelSeedData, head, wasPrefetched);\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fill-lazy-items-till-leaf-with-head.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxpRUFBZ0U7SUFDNURJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyx3QkFBd0JDLG1CQUFPQSxDQUFDLDZIQUEyQjtBQUNqRSxTQUFTRiw4QkFBOEJHLFFBQVEsRUFBRUMsYUFBYSxFQUFFQyxXQUFXLEVBQUVDLGlCQUFpQixFQUFFQyxJQUFJLEVBQUVDLGFBQWE7SUFDL0csTUFBTUMsZ0JBQWdCZixPQUFPZ0IsSUFBSSxDQUFDTCxXQUFXLENBQUMsRUFBRSxFQUFFTSxNQUFNLEtBQUs7SUFDN0QsSUFBSUYsZUFBZTtRQUNmTixTQUFTSSxJQUFJLEdBQUdBO1FBQ2hCO0lBQ0o7SUFDQSx1RkFBdUY7SUFDdkYsSUFBSSxNQUFNSyxPQUFPUCxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzVCLE1BQU1RLHFCQUFxQlIsV0FBVyxDQUFDLEVBQUUsQ0FBQ08sSUFBSTtRQUM5QyxNQUFNRSwwQkFBMEJELGtCQUFrQixDQUFDLEVBQUU7UUFDckQsTUFBTUUsV0FBVyxDQUFDLEdBQUdkLHNCQUFzQmUsb0JBQW9CLEVBQUVGO1FBQ2pFLDRFQUE0RTtRQUM1RSwyRUFBMkU7UUFDM0Usd0VBQXdFO1FBQ3hFLHdFQUF3RTtRQUN4RSwwRUFBMEU7UUFDMUUscUJBQXFCO1FBQ3JCLEVBQUU7UUFDRiwwRUFBMEU7UUFDMUUsd0VBQXdFO1FBQ3hFLGtFQUFrRTtRQUNsRSxNQUFNRyxtQkFBbUJYLHNCQUFzQixRQUFRQSxpQkFBaUIsQ0FBQyxFQUFFLENBQUNNLElBQUksS0FBS00sWUFBWVosaUJBQWlCLENBQUMsRUFBRSxDQUFDTSxJQUFJLEdBQUc7UUFDN0gsSUFBSVIsZUFBZTtZQUNmLE1BQU1lLGtDQUFrQ2YsY0FBY2dCLGNBQWMsQ0FBQ3JCLEdBQUcsQ0FBQ2E7WUFDekUsSUFBSU8saUNBQWlDO2dCQUNqQyxJQUFJRSx5QkFBeUIsSUFBSUMsSUFBSUg7Z0JBQ3JDLE1BQU1JLG9CQUFvQkYsdUJBQXVCdEIsR0FBRyxDQUFDZ0I7Z0JBQ3JELElBQUlTO2dCQUNKLElBQUlQLHFCQUFxQixNQUFNO29CQUMzQixxQ0FBcUM7b0JBQ3JDLE1BQU1RLFdBQVdSLGdCQUFnQixDQUFDLEVBQUU7b0JBQ3BDTyxlQUFlO3dCQUNYRSxVQUFVO3dCQUNWQyxLQUFLRjt3QkFDTCxrRUFBa0U7d0JBQ2xFLG9FQUFvRTt3QkFDcEUsMkRBQTJEO3dCQUMzRCxrRUFBa0U7d0JBQ2xFLCtCQUErQjt3QkFDL0JHLGFBQWE7d0JBQ2JSLGdCQUFnQixJQUFJRSxJQUFJQyxxQkFBcUIsT0FBTyxLQUFLLElBQUlBLGtCQUFrQkgsY0FBYztvQkFDakc7Z0JBQ0osT0FBTyxJQUFJWixpQkFBaUJlLG1CQUFtQjtvQkFDM0Msb0VBQW9FO29CQUNwRSwyQ0FBMkM7b0JBQzNDQyxlQUFlO3dCQUNYRSxVQUFVSCxrQkFBa0JHLFFBQVE7d0JBQ3BDQyxLQUFLSixrQkFBa0JJLEdBQUc7d0JBQzFCLG9FQUFvRTt3QkFDcEUsa0VBQWtFO3dCQUNsRSwyQkFBMkI7d0JBQzNCQyxhQUFhTCxrQkFBa0JLLFdBQVc7d0JBQzFDUixnQkFBZ0IsSUFBSUUsSUFBSUMsa0JBQWtCSCxjQUFjO29CQUM1RDtnQkFDSixPQUFPO29CQUNILGtFQUFrRTtvQkFDbEUsaUJBQWlCO29CQUNqQkksZUFBZTt3QkFDWEUsVUFBVTt3QkFDVkMsS0FBSzt3QkFDTEMsYUFBYTt3QkFDYlIsZ0JBQWdCLElBQUlFLElBQUlDLHFCQUFxQixPQUFPLEtBQUssSUFBSUEsa0JBQWtCSCxjQUFjO29CQUNqRztnQkFDSjtnQkFDQSxtREFBbUQ7Z0JBQ25EQyx1QkFBdUJRLEdBQUcsQ0FBQ2QsVUFBVVM7Z0JBQ3JDLHFFQUFxRTtnQkFDckV4Qiw4QkFBOEJ3QixjQUFjRCxtQkFBbUJWLG9CQUFvQkksbUJBQW1CQSxtQkFBbUIsTUFBTVYsTUFBTUM7Z0JBQ3JJTCxTQUFTaUIsY0FBYyxDQUFDUyxHQUFHLENBQUNqQixLQUFLUztnQkFDakM7WUFDSjtRQUNKO1FBQ0EsSUFBSUc7UUFDSixJQUFJUCxxQkFBcUIsTUFBTTtZQUMzQixxQ0FBcUM7WUFDckMsTUFBTVEsV0FBV1IsZ0JBQWdCLENBQUMsRUFBRTtZQUNwQ08sZUFBZTtnQkFDWEUsVUFBVTtnQkFDVkMsS0FBS0Y7Z0JBQ0xHLGFBQWE7Z0JBQ2JSLGdCQUFnQixJQUFJRTtZQUN4QjtRQUNKLE9BQU87WUFDSCxrRUFBa0U7WUFDbEUsaUJBQWlCO1lBQ2pCRSxlQUFlO2dCQUNYRSxVQUFVO2dCQUNWQyxLQUFLO2dCQUNMQyxhQUFhO2dCQUNiUixnQkFBZ0IsSUFBSUU7WUFDeEI7UUFDSjtRQUNBLE1BQU1RLHlCQUF5QjNCLFNBQVNpQixjQUFjLENBQUNyQixHQUFHLENBQUNhO1FBQzNELElBQUlrQix3QkFBd0I7WUFDeEJBLHVCQUF1QkQsR0FBRyxDQUFDZCxVQUFVUztRQUN6QyxPQUFPO1lBQ0hyQixTQUFTaUIsY0FBYyxDQUFDUyxHQUFHLENBQUNqQixLQUFLLElBQUlVLElBQUk7Z0JBQ3JDO29CQUNJUDtvQkFDQVM7aUJBQ0g7YUFDSjtRQUNMO1FBQ0F4Qiw4QkFBOEJ3QixjQUFjTixXQUFXTCxvQkFBb0JJLGtCQUFrQlYsTUFBTUM7SUFDdkc7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPWixRQUFRbUMsT0FBTyxLQUFLLGNBQWUsT0FBT25DLFFBQVFtQyxPQUFPLEtBQUssWUFBWW5DLFFBQVFtQyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9uQyxRQUFRbUMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3RDLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW1DLE9BQU8sRUFBRSxjQUFjO1FBQUVsQyxPQUFPO0lBQUs7SUFDbkVILE9BQU91QyxNQUFNLENBQUNyQyxRQUFRbUMsT0FBTyxFQUFFbkM7SUFDL0JzQyxPQUFPdEMsT0FBTyxHQUFHQSxRQUFRbUMsT0FBTztBQUNsQyxFQUVBLCtEQUErRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkLmpzPzZjOWYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQ7XG4gICAgfVxufSk7XG5jb25zdCBfY3JlYXRlcm91dGVyY2FjaGVrZXkgPSByZXF1aXJlKFwiLi9jcmVhdGUtcm91dGVyLWNhY2hlLWtleVwiKTtcbmZ1bmN0aW9uIGZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKG5ld0NhY2hlLCBleGlzdGluZ0NhY2hlLCByb3V0ZXJTdGF0ZSwgY2FjaGVOb2RlU2VlZERhdGEsIGhlYWQsIHdhc1ByZWZldGNoZWQpIHtcbiAgICBjb25zdCBpc0xhc3RTZWdtZW50ID0gT2JqZWN0LmtleXMocm91dGVyU3RhdGVbMV0pLmxlbmd0aCA9PT0gMDtcbiAgICBpZiAoaXNMYXN0U2VnbWVudCkge1xuICAgICAgICBuZXdDYWNoZS5oZWFkID0gaGVhZDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBSZW1vdmUgc2VnbWVudCB0aGF0IHdlIGdvdCBkYXRhIGZvciBzbyB0aGF0IGl0IGlzIGZpbGxlZCBpbiBkdXJpbmcgcmVuZGVyaW5nIG9mIHJzYy5cbiAgICBmb3IoY29uc3Qga2V5IGluIHJvdXRlclN0YXRlWzFdKXtcbiAgICAgICAgY29uc3QgcGFyYWxsZWxSb3V0ZVN0YXRlID0gcm91dGVyU3RhdGVbMV1ba2V5XTtcbiAgICAgICAgY29uc3Qgc2VnbWVudEZvclBhcmFsbGVsUm91dGUgPSBwYXJhbGxlbFJvdXRlU3RhdGVbMF07XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gKDAsIF9jcmVhdGVyb3V0ZXJjYWNoZWtleS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoc2VnbWVudEZvclBhcmFsbGVsUm91dGUpO1xuICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgdHJhdmVyc2UgdGhlIGNhY2hlTm9kZVNlZWREYXRhIHRyZWUgaW5zdGVhZCBvZiB0aGUgcm91dGVyXG4gICAgICAgIC8vIHN0YXRlIHRyZWUuIElkZWFsbHksIHRoZXkgd291bGQgYWx3YXlzIGJlIHRoZSBzYW1lIHNoYXBlLCBidXQgYmVjYXVzZSBvZlxuICAgICAgICAvLyB0aGUgbG9hZGluZy5qcyBwYXR0ZXJuLCBjYWNoZU5vZGVTZWVkRGF0YSBzb21ldGltZXMgb25seSByZXByZXNlbnRzIGFcbiAgICAgICAgLy8gcGFydGlhbCB0cmVlLiBUaGF0J3Mgd2h5IHRoaXMgbm9kZSBpcyBzb21ldGltZXMgbnVsbC4gT25jZSBQUFIgbGFuZHMsXG4gICAgICAgIC8vIGxvYWRpbmcuanMgd2lsbCBubyBsb25nZXIgaGF2ZSBzcGVjaWFsIGJlaGF2aW9yIGFuZCB3ZSBjYW4gdHJhdmVyc2UgdGhlXG4gICAgICAgIC8vIGRhdGEgdHJlZSBpbnN0ZWFkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBXZSBzaG91bGQgYWxzbyBjb25zaWRlciBtZXJnaW5nIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSBhbmQgdGhlIGRhdGEgdHJlZVxuICAgICAgICAvLyBpbiB0aGUgcmVzcG9uc2UgZm9ybWF0LCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gc2VuZCB0aGUga2V5cyB0d2ljZS5cbiAgICAgICAgLy8gVGhlbiB0aGUgY2xpZW50IGNhbiBjb252ZXJ0IHRoZW0gaW50byBzZXBhcmF0ZSByZXByZXNlbnRhdGlvbnMuXG4gICAgICAgIGNvbnN0IHBhcmFsbGVsU2VlZERhdGEgPSBjYWNoZU5vZGVTZWVkRGF0YSAhPT0gbnVsbCAmJiBjYWNoZU5vZGVTZWVkRGF0YVsxXVtrZXldICE9PSB1bmRlZmluZWQgPyBjYWNoZU5vZGVTZWVkRGF0YVsxXVtrZXldIDogbnVsbDtcbiAgICAgICAgaWYgKGV4aXN0aW5nQ2FjaGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUgPSBleGlzdGluZ0NhY2hlLnBhcmFsbGVsUm91dGVzLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUpIHtcbiAgICAgICAgICAgICAgICBsZXQgcGFyYWxsZWxSb3V0ZUNhY2hlTm9kZSA9IG5ldyBNYXAoZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdDYWNoZU5vZGUgPSBwYXJhbGxlbFJvdXRlQ2FjaGVOb2RlLmdldChjYWNoZUtleSk7XG4gICAgICAgICAgICAgICAgbGV0IG5ld0NhY2hlTm9kZTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxTZWVkRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBOZXcgZGF0YSB3YXMgc2VudCBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZWROb2RlID0gcGFyYWxsZWxTZWVkRGF0YVsyXTtcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2FjaGVOb2RlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICByc2M6IHNlZWROb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFBQUi1vbmx5IGZpZWxkLiBXaGVuIFBQUiBpcyBlbmFibGVkLCB3ZSBzaG91bGRuJ3QgaGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHBhdGggZHVyaW5nIGEgbmF2aWdhdGlvbiwgYnV0IHVudGlsIFBQUiBpcyBmdWxseSBpbXBsZW1lbnRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8geWV0IGl0J3MgcG9zc2libGUgdGhlIGV4aXN0aW5nIG5vZGUgZG9lcyBoYXZlIGEgbm9uLW51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBwcmVmZXRjaFJzY2AuIEFzIGFuIGluY3JlbWVudGFsIHN0ZXAsIHdlJ2xsIGp1c3QgZGUtb3B0IHRvIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2xkIGJlaGF2aW9yIOKAlCBubyBQUFIgdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKGV4aXN0aW5nQ2FjaGVOb2RlID09IG51bGwgPyB2b2lkIDAgOiBleGlzdGluZ0NhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcylcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdhc1ByZWZldGNoZWQgJiYgZXhpc3RpbmdDYWNoZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gbmV3IGRhdGEgd2FzIHNlbnQgZnJvbSB0aGUgc2VydmVyLCBidXQgdGhlIGV4aXN0aW5nIGNhY2hlIG5vZGVcbiAgICAgICAgICAgICAgICAgICAgLy8gd2FzIHByZWZldGNoZWQsIHNvIHdlIHNob3VsZCByZXVzZSB0aGF0LlxuICAgICAgICAgICAgICAgICAgICBuZXdDYWNoZU5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXp5RGF0YTogZXhpc3RpbmdDYWNoZU5vZGUubGF6eURhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICByc2M6IGV4aXN0aW5nQ2FjaGVOb2RlLnJzYyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBQUFItb25seSBmaWVsZC4gVW5saWtlIHRoZSBwcmV2aW91cyBicmFuY2gsIHNpbmNlIHdlJ3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IGNsb25pbmcgdGhlIGV4aXN0aW5nIGNhY2hlIG5vZGUsIHdlIG1pZ2h0IGFzIHdlbGwga2VlcCB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBQUiB2YWx1ZSwgaWYgaXQgZXhpc3RzLlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmV0Y2hSc2M6IGV4aXN0aW5nQ2FjaGVOb2RlLnByZWZldGNoUnNjLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoZXhpc3RpbmdDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXMpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gZGF0YSBhdmFpbGFibGUgZm9yIHRoaXMgbm9kZS4gVGhpcyB3aWxsIHRyaWdnZXIgYSBsYXp5IGZldGNoXG4gICAgICAgICAgICAgICAgICAgIC8vIGR1cmluZyByZW5kZXIuXG4gICAgICAgICAgICAgICAgICAgIG5ld0NhY2hlTm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnNjOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcChleGlzdGluZ0NhY2hlTm9kZSA9PSBudWxsID8gdm9pZCAwIDogZXhpc3RpbmdDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXMpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE92ZXJyaWRlcyB0aGUgY2FjaGUga2V5IHdpdGggdGhlIG5ldyBjYWNoZSBub2RlLlxuICAgICAgICAgICAgICAgIHBhcmFsbGVsUm91dGVDYWNoZU5vZGUuc2V0KGNhY2hlS2V5LCBuZXdDYWNoZU5vZGUpO1xuICAgICAgICAgICAgICAgIC8vIFRyYXZlcnNlIGRlZXBlciB0byBhcHBseSB0aGUgaGVhZCAvIGZpbGwgbGF6eSBpdGVtcyB0aWxsIHRoZSBoZWFkLlxuICAgICAgICAgICAgICAgIGZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKG5ld0NhY2hlTm9kZSwgZXhpc3RpbmdDYWNoZU5vZGUsIHBhcmFsbGVsUm91dGVTdGF0ZSwgcGFyYWxsZWxTZWVkRGF0YSA/IHBhcmFsbGVsU2VlZERhdGEgOiBudWxsLCBoZWFkLCB3YXNQcmVmZXRjaGVkKTtcbiAgICAgICAgICAgICAgICBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5zZXQoa2V5LCBwYXJhbGxlbFJvdXRlQ2FjaGVOb2RlKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3Q2FjaGVOb2RlO1xuICAgICAgICBpZiAocGFyYWxsZWxTZWVkRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gTmV3IGRhdGEgd2FzIHNlbnQgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICAgICAgY29uc3Qgc2VlZE5vZGUgPSBwYXJhbGxlbFNlZWREYXRhWzJdO1xuICAgICAgICAgICAgbmV3Q2FjaGVOb2RlID0ge1xuICAgICAgICAgICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgIHJzYzogc2VlZE5vZGUsXG4gICAgICAgICAgICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIGRhdGEgYXZhaWxhYmxlIGZvciB0aGlzIG5vZGUuIFRoaXMgd2lsbCB0cmlnZ2VyIGEgbGF6eSBmZXRjaFxuICAgICAgICAgICAgLy8gZHVyaW5nIHJlbmRlci5cbiAgICAgICAgICAgIG5ld0NhY2hlTm9kZSA9IHtcbiAgICAgICAgICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICByc2M6IG51bGwsXG4gICAgICAgICAgICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleGlzdGluZ1BhcmFsbGVsUm91dGVzID0gbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KGtleSk7XG4gICAgICAgIGlmIChleGlzdGluZ1BhcmFsbGVsUm91dGVzKSB7XG4gICAgICAgICAgICBleGlzdGluZ1BhcmFsbGVsUm91dGVzLnNldChjYWNoZUtleSwgbmV3Q2FjaGVOb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLnNldChrZXksIG5ldyBNYXAoW1xuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVLZXksXG4gICAgICAgICAgICAgICAgICAgIG5ld0NhY2hlTm9kZVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0pKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZChuZXdDYWNoZU5vZGUsIHVuZGVmaW5lZCwgcGFyYWxsZWxSb3V0ZVN0YXRlLCBwYXJhbGxlbFNlZWREYXRhLCBoZWFkLCB3YXNQcmVmZXRjaGVkKTtcbiAgICB9XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCIsIl9jcmVhdGVyb3V0ZXJjYWNoZWtleSIsInJlcXVpcmUiLCJuZXdDYWNoZSIsImV4aXN0aW5nQ2FjaGUiLCJyb3V0ZXJTdGF0ZSIsImNhY2hlTm9kZVNlZWREYXRhIiwiaGVhZCIsIndhc1ByZWZldGNoZWQiLCJpc0xhc3RTZWdtZW50Iiwia2V5cyIsImxlbmd0aCIsImtleSIsInBhcmFsbGVsUm91dGVTdGF0ZSIsInNlZ21lbnRGb3JQYXJhbGxlbFJvdXRlIiwiY2FjaGVLZXkiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsInBhcmFsbGVsU2VlZERhdGEiLCJ1bmRlZmluZWQiLCJleGlzdGluZ1BhcmFsbGVsUm91dGVzQ2FjaGVOb2RlIiwicGFyYWxsZWxSb3V0ZXMiLCJwYXJhbGxlbFJvdXRlQ2FjaGVOb2RlIiwiTWFwIiwiZXhpc3RpbmdDYWNoZU5vZGUiLCJuZXdDYWNoZU5vZGUiLCJzZWVkTm9kZSIsImxhenlEYXRhIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJzZXQiLCJleGlzdGluZ1BhcmFsbGVsUm91dGVzIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/get-prefetch-cache-entry-status.js": +/*!****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/get-prefetch-cache-entry-status.js ***! + \****************************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PrefetchCacheEntryStatus: function() {\n return PrefetchCacheEntryStatus;\n },\n getPrefetchEntryCacheStatus: function() {\n return getPrefetchEntryCacheStatus;\n }\n});\nconst FIVE_MINUTES = 5 * 60 * 1000;\nconst THIRTY_SECONDS = 30 * 1000;\nvar PrefetchCacheEntryStatus;\n(function(PrefetchCacheEntryStatus) {\n PrefetchCacheEntryStatus[\"fresh\"] = \"fresh\";\n PrefetchCacheEntryStatus[\"reusable\"] = \"reusable\";\n PrefetchCacheEntryStatus[\"expired\"] = \"expired\";\n PrefetchCacheEntryStatus[\"stale\"] = \"stale\";\n})(PrefetchCacheEntryStatus || (PrefetchCacheEntryStatus = {}));\nfunction getPrefetchEntryCacheStatus(param) {\n let { kind, prefetchTime, lastUsedTime } = param;\n // if the cache entry was prefetched or read less than 30s ago, then we want to re-use it\n if (Date.now() < (lastUsedTime != null ? lastUsedTime : prefetchTime) + THIRTY_SECONDS) {\n return lastUsedTime ? \"reusable\" : \"fresh\";\n }\n // if the cache entry was prefetched less than 5 mins ago, then we want to re-use only the loading state\n if (kind === \"auto\") {\n if (Date.now() < prefetchTime + FIVE_MINUTES) {\n return \"stale\";\n }\n }\n // if the cache entry was prefetched less than 5 mins ago and was a \"full\" prefetch, then we want to re-use it \"full\n if (kind === \"full\") {\n if (Date.now() < prefetchTime + FIVE_MINUTES) {\n return \"reusable\";\n }\n }\n return \"expired\";\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-prefetch-cache-entry-status.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2dldC1wcmVmZXRjaC1jYWNoZS1lbnRyeS1zdGF0dXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLDBCQUEwQjtRQUN0QixPQUFPQTtJQUNYO0lBQ0FDLDZCQUE2QjtRQUN6QixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxlQUFlLElBQUksS0FBSztBQUM5QixNQUFNQyxpQkFBaUIsS0FBSztBQUM1QixJQUFJVDtBQUNILFVBQVNBLHdCQUF3QjtJQUM5QkEsd0JBQXdCLENBQUMsUUFBUSxHQUFHO0lBQ3BDQSx3QkFBd0IsQ0FBQyxXQUFXLEdBQUc7SUFDdkNBLHdCQUF3QixDQUFDLFVBQVUsR0FBRztJQUN0Q0Esd0JBQXdCLENBQUMsUUFBUSxHQUFHO0FBQ3hDLEdBQUdBLDRCQUE2QkEsQ0FBQUEsMkJBQTJCLENBQUM7QUFDNUQsU0FBU0MsNEJBQTRCUyxLQUFLO0lBQ3RDLElBQUksRUFBRUMsSUFBSSxFQUFFQyxZQUFZLEVBQUVDLFlBQVksRUFBRSxHQUFHSDtJQUMzQyx5RkFBeUY7SUFDekYsSUFBSUksS0FBS0MsR0FBRyxLQUFLLENBQUNGLGdCQUFnQixPQUFPQSxlQUFlRCxZQUFXLElBQUtILGdCQUFnQjtRQUNwRixPQUFPSSxlQUFlLGFBQWE7SUFDdkM7SUFDQSx3R0FBd0c7SUFDeEcsSUFBSUYsU0FBUyxRQUFRO1FBQ2pCLElBQUlHLEtBQUtDLEdBQUcsS0FBS0gsZUFBZUosY0FBYztZQUMxQyxPQUFPO1FBQ1g7SUFDSjtJQUNBLG9IQUFvSDtJQUNwSCxJQUFJRyxTQUFTLFFBQVE7UUFDakIsSUFBSUcsS0FBS0MsR0FBRyxLQUFLSCxlQUFlSixjQUFjO1lBQzFDLE9BQU87UUFDWDtJQUNKO0lBQ0EsT0FBTztBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU9YLFFBQVFtQixPQUFPLEtBQUssY0FBZSxPQUFPbkIsUUFBUW1CLE9BQU8sS0FBSyxZQUFZbkIsUUFBUW1CLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT25CLFFBQVFtQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRbUIsT0FBTyxFQUFFLGNBQWM7UUFBRWxCLE9BQU87SUFBSztJQUNuRUgsT0FBT3VCLE1BQU0sQ0FBQ3JCLFFBQVFtQixPQUFPLEVBQUVuQjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRbUIsT0FBTztBQUNsQyxFQUVBLDJEQUEyRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2dldC1wcmVmZXRjaC1jYWNoZS1lbnRyeS1zdGF0dXMuanM/NmNkYSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1czogbnVsbCxcbiAgICBnZXRQcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXM6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cztcbiAgICB9LFxuICAgIGdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1czogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRQcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXM7XG4gICAgfVxufSk7XG5jb25zdCBGSVZFX01JTlVURVMgPSA1ICogNjAgKiAxMDAwO1xuY29uc3QgVEhJUlRZX1NFQ09ORFMgPSAzMCAqIDEwMDA7XG52YXIgUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzO1xuKGZ1bmN0aW9uKFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cykge1xuICAgIFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1c1tcImZyZXNoXCJdID0gXCJmcmVzaFwiO1xuICAgIFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1c1tcInJldXNhYmxlXCJdID0gXCJyZXVzYWJsZVwiO1xuICAgIFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1c1tcImV4cGlyZWRcIl0gPSBcImV4cGlyZWRcIjtcbiAgICBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXNbXCJzdGFsZVwiXSA9IFwic3RhbGVcIjtcbn0pKFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cyB8fCAoUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzID0ge30pKTtcbmZ1bmN0aW9uIGdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1cyhwYXJhbSkge1xuICAgIGxldCB7IGtpbmQsIHByZWZldGNoVGltZSwgbGFzdFVzZWRUaW1lIH0gPSBwYXJhbTtcbiAgICAvLyBpZiB0aGUgY2FjaGUgZW50cnkgd2FzIHByZWZldGNoZWQgb3IgcmVhZCBsZXNzIHRoYW4gMzBzIGFnbywgdGhlbiB3ZSB3YW50IHRvIHJlLXVzZSBpdFxuICAgIGlmIChEYXRlLm5vdygpIDwgKGxhc3RVc2VkVGltZSAhPSBudWxsID8gbGFzdFVzZWRUaW1lIDogcHJlZmV0Y2hUaW1lKSArIFRISVJUWV9TRUNPTkRTKSB7XG4gICAgICAgIHJldHVybiBsYXN0VXNlZFRpbWUgPyBcInJldXNhYmxlXCIgOiBcImZyZXNoXCI7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBjYWNoZSBlbnRyeSB3YXMgcHJlZmV0Y2hlZCBsZXNzIHRoYW4gNSBtaW5zIGFnbywgdGhlbiB3ZSB3YW50IHRvIHJlLXVzZSBvbmx5IHRoZSBsb2FkaW5nIHN0YXRlXG4gICAgaWYgKGtpbmQgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIDwgcHJlZmV0Y2hUaW1lICsgRklWRV9NSU5VVEVTKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJzdGFsZVwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGlmIHRoZSBjYWNoZSBlbnRyeSB3YXMgcHJlZmV0Y2hlZCBsZXNzIHRoYW4gNSBtaW5zIGFnbyBhbmQgd2FzIGEgXCJmdWxsXCIgcHJlZmV0Y2gsIHRoZW4gd2Ugd2FudCB0byByZS11c2UgaXQgXCJmdWxsXG4gICAgaWYgKGtpbmQgPT09IFwiZnVsbFwiKSB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpIDwgcHJlZmV0Y2hUaW1lICsgRklWRV9NSU5VVEVTKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJyZXVzYWJsZVwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcImV4cGlyZWRcIjtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0LXByZWZldGNoLWNhY2hlLWVudHJ5LXN0YXR1cy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMiLCJnZXRQcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXMiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJGSVZFX01JTlVURVMiLCJUSElSVFlfU0VDT05EUyIsInBhcmFtIiwia2luZCIsInByZWZldGNoVGltZSIsImxhc3RVc2VkVGltZSIsIkRhdGUiLCJub3ciLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/get-prefetch-cache-entry-status.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/handle-mutable.js ***! + \***********************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"handleMutable\", ({\n enumerable: true,\n get: function() {\n return handleMutable;\n }\n}));\nconst _computechangedpath = __webpack_require__(/*! ./compute-changed-path */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nfunction isNotUndefined(value) {\n return typeof value !== \"undefined\";\n}\nfunction handleMutable(state, mutable) {\n var _mutable_canonicalUrl;\n var _mutable_shouldScroll;\n // shouldScroll is true by default, can override to false.\n const shouldScroll = (_mutable_shouldScroll = mutable.shouldScroll) != null ? _mutable_shouldScroll : true;\n let nextUrl = state.nextUrl;\n if (isNotUndefined(mutable.patchedTree)) {\n // If we received a patched tree, we need to compute the changed path.\n const changedPath = (0, _computechangedpath.computeChangedPath)(state.tree, mutable.patchedTree);\n if (changedPath) {\n // If the tree changed, we need to update the nextUrl\n nextUrl = changedPath;\n } else if (!nextUrl) {\n // if the tree ends up being the same (ie, no changed path), and we don't have a nextUrl, then we should use the canonicalUrl\n nextUrl = state.canonicalUrl;\n }\n // otherwise this will be a no-op and continue to use the existing nextUrl\n }\n var _mutable_scrollableSegments;\n return {\n buildId: state.buildId,\n // Set href.\n canonicalUrl: isNotUndefined(mutable.canonicalUrl) ? mutable.canonicalUrl === state.canonicalUrl ? state.canonicalUrl : mutable.canonicalUrl : state.canonicalUrl,\n pushRef: {\n pendingPush: isNotUndefined(mutable.pendingPush) ? mutable.pendingPush : state.pushRef.pendingPush,\n mpaNavigation: isNotUndefined(mutable.mpaNavigation) ? mutable.mpaNavigation : state.pushRef.mpaNavigation,\n preserveCustomHistoryState: isNotUndefined(mutable.preserveCustomHistoryState) ? mutable.preserveCustomHistoryState : state.pushRef.preserveCustomHistoryState\n },\n // All navigation requires scroll and focus management to trigger.\n focusAndScrollRef: {\n apply: shouldScroll ? isNotUndefined(mutable == null ? void 0 : mutable.scrollableSegments) ? true : state.focusAndScrollRef.apply : false,\n onlyHashChange: !!mutable.hashFragment && state.canonicalUrl.split(\"#\", 1)[0] === ((_mutable_canonicalUrl = mutable.canonicalUrl) == null ? void 0 : _mutable_canonicalUrl.split(\"#\", 1)[0]),\n hashFragment: shouldScroll ? mutable.hashFragment && mutable.hashFragment !== \"\" ? decodeURIComponent(mutable.hashFragment.slice(1)) : state.focusAndScrollRef.hashFragment : null,\n segmentPaths: shouldScroll ? (_mutable_scrollableSegments = mutable == null ? void 0 : mutable.scrollableSegments) != null ? _mutable_scrollableSegments : state.focusAndScrollRef.segmentPaths : []\n },\n // Apply cache.\n cache: mutable.cache ? mutable.cache : state.cache,\n prefetchCache: mutable.prefetchCache ? mutable.prefetchCache : state.prefetchCache,\n // Apply patched router state.\n tree: isNotUndefined(mutable.patchedTree) ? mutable.patchedTree : state.tree,\n nextUrl\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=handle-mutable.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2hhbmRsZS1tdXRhYmxlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxpREFBZ0Q7SUFDNUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxzQkFBc0JDLG1CQUFPQSxDQUFDLHVIQUF3QjtBQUM1RCxTQUFTQyxlQUFlTixLQUFLO0lBQ3pCLE9BQU8sT0FBT0EsVUFBVTtBQUM1QjtBQUNBLFNBQVNHLGNBQWNJLEtBQUssRUFBRUMsT0FBTztJQUNqQyxJQUFJQztJQUNKLElBQUlDO0lBQ0osMERBQTBEO0lBQzFELE1BQU1DLGVBQWUsQ0FBQ0Qsd0JBQXdCRixRQUFRRyxZQUFZLEtBQUssT0FBT0Qsd0JBQXdCO0lBQ3RHLElBQUlFLFVBQVVMLE1BQU1LLE9BQU87SUFDM0IsSUFBSU4sZUFBZUUsUUFBUUssV0FBVyxHQUFHO1FBQ3JDLHNFQUFzRTtRQUN0RSxNQUFNQyxjQUFjLENBQUMsR0FBR1Ysb0JBQW9CVyxrQkFBa0IsRUFBRVIsTUFBTVMsSUFBSSxFQUFFUixRQUFRSyxXQUFXO1FBQy9GLElBQUlDLGFBQWE7WUFDYixxREFBcUQ7WUFDckRGLFVBQVVFO1FBQ2QsT0FBTyxJQUFJLENBQUNGLFNBQVM7WUFDakIsNkhBQTZIO1lBQzdIQSxVQUFVTCxNQUFNVSxZQUFZO1FBQ2hDO0lBQ0osMEVBQTBFO0lBQzFFO0lBQ0EsSUFBSUM7SUFDSixPQUFPO1FBQ0hDLFNBQVNaLE1BQU1ZLE9BQU87UUFDdEIsWUFBWTtRQUNaRixjQUFjWCxlQUFlRSxRQUFRUyxZQUFZLElBQUlULFFBQVFTLFlBQVksS0FBS1YsTUFBTVUsWUFBWSxHQUFHVixNQUFNVSxZQUFZLEdBQUdULFFBQVFTLFlBQVksR0FBR1YsTUFBTVUsWUFBWTtRQUNqS0csU0FBUztZQUNMQyxhQUFhZixlQUFlRSxRQUFRYSxXQUFXLElBQUliLFFBQVFhLFdBQVcsR0FBR2QsTUFBTWEsT0FBTyxDQUFDQyxXQUFXO1lBQ2xHQyxlQUFlaEIsZUFBZUUsUUFBUWMsYUFBYSxJQUFJZCxRQUFRYyxhQUFhLEdBQUdmLE1BQU1hLE9BQU8sQ0FBQ0UsYUFBYTtZQUMxR0MsNEJBQTRCakIsZUFBZUUsUUFBUWUsMEJBQTBCLElBQUlmLFFBQVFlLDBCQUEwQixHQUFHaEIsTUFBTWEsT0FBTyxDQUFDRywwQkFBMEI7UUFDbEs7UUFDQSxrRUFBa0U7UUFDbEVDLG1CQUFtQjtZQUNmQyxPQUFPZCxlQUFlTCxlQUFlRSxXQUFXLE9BQU8sS0FBSyxJQUFJQSxRQUFRa0Isa0JBQWtCLElBQUksT0FBT25CLE1BQU1pQixpQkFBaUIsQ0FBQ0MsS0FBSyxHQUFHO1lBQ3JJRSxnQkFBZ0IsQ0FBQyxDQUFDbkIsUUFBUW9CLFlBQVksSUFBSXJCLE1BQU1VLFlBQVksQ0FBQ1ksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBTSxFQUFDcEIsd0JBQXdCRCxRQUFRUyxZQUFZLEtBQUssT0FBTyxLQUFLLElBQUlSLHNCQUFzQm9CLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQzNMRCxjQUFjakIsZUFDZEgsUUFBUW9CLFlBQVksSUFBSXBCLFFBQVFvQixZQUFZLEtBQUssS0FBS0UsbUJBQW1CdEIsUUFBUW9CLFlBQVksQ0FBQ0csS0FBSyxDQUFDLE1BQU14QixNQUFNaUIsaUJBQWlCLENBQUNJLFlBQVksR0FBRztZQUNqSkksY0FBY3JCLGVBQWUsQ0FBQ08sOEJBQThCVixXQUFXLE9BQU8sS0FBSyxJQUFJQSxRQUFRa0Isa0JBQWtCLEtBQUssT0FBT1IsOEJBQThCWCxNQUFNaUIsaUJBQWlCLENBQUNRLFlBQVksR0FBRyxFQUFFO1FBQ3hNO1FBQ0EsZUFBZTtRQUNmQyxPQUFPekIsUUFBUXlCLEtBQUssR0FBR3pCLFFBQVF5QixLQUFLLEdBQUcxQixNQUFNMEIsS0FBSztRQUNsREMsZUFBZTFCLFFBQVEwQixhQUFhLEdBQUcxQixRQUFRMEIsYUFBYSxHQUFHM0IsTUFBTTJCLGFBQWE7UUFDbEYsOEJBQThCO1FBQzlCbEIsTUFBTVYsZUFBZUUsUUFBUUssV0FBVyxJQUFJTCxRQUFRSyxXQUFXLEdBQUdOLE1BQU1TLElBQUk7UUFDNUVKO0lBQ0o7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPYixRQUFRb0MsT0FBTyxLQUFLLGNBQWUsT0FBT3BDLFFBQVFvQyxPQUFPLEtBQUssWUFBWXBDLFFBQVFvQyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9wQyxRQUFRb0MsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3ZDLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW9DLE9BQU8sRUFBRSxjQUFjO1FBQUVuQyxPQUFPO0lBQUs7SUFDbkVILE9BQU93QyxNQUFNLENBQUN0QyxRQUFRb0MsT0FBTyxFQUFFcEM7SUFDL0J1QyxPQUFPdkMsT0FBTyxHQUFHQSxRQUFRb0MsT0FBTztBQUNsQyxFQUVBLDBDQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2hhbmRsZS1tdXRhYmxlLmpzPzQyZjMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoYW5kbGVNdXRhYmxlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVNdXRhYmxlO1xuICAgIH1cbn0pO1xuY29uc3QgX2NvbXB1dGVjaGFuZ2VkcGF0aCA9IHJlcXVpcmUoXCIuL2NvbXB1dGUtY2hhbmdlZC1wYXRoXCIpO1xuZnVuY3Rpb24gaXNOb3RVbmRlZmluZWQodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiO1xufVxuZnVuY3Rpb24gaGFuZGxlTXV0YWJsZShzdGF0ZSwgbXV0YWJsZSkge1xuICAgIHZhciBfbXV0YWJsZV9jYW5vbmljYWxVcmw7XG4gICAgdmFyIF9tdXRhYmxlX3Nob3VsZFNjcm9sbDtcbiAgICAvLyBzaG91bGRTY3JvbGwgaXMgdHJ1ZSBieSBkZWZhdWx0LCBjYW4gb3ZlcnJpZGUgdG8gZmFsc2UuXG4gICAgY29uc3Qgc2hvdWxkU2Nyb2xsID0gKF9tdXRhYmxlX3Nob3VsZFNjcm9sbCA9IG11dGFibGUuc2hvdWxkU2Nyb2xsKSAhPSBudWxsID8gX211dGFibGVfc2hvdWxkU2Nyb2xsIDogdHJ1ZTtcbiAgICBsZXQgbmV4dFVybCA9IHN0YXRlLm5leHRVcmw7XG4gICAgaWYgKGlzTm90VW5kZWZpbmVkKG11dGFibGUucGF0Y2hlZFRyZWUpKSB7XG4gICAgICAgIC8vIElmIHdlIHJlY2VpdmVkIGEgcGF0Y2hlZCB0cmVlLCB3ZSBuZWVkIHRvIGNvbXB1dGUgdGhlIGNoYW5nZWQgcGF0aC5cbiAgICAgICAgY29uc3QgY2hhbmdlZFBhdGggPSAoMCwgX2NvbXB1dGVjaGFuZ2VkcGF0aC5jb21wdXRlQ2hhbmdlZFBhdGgpKHN0YXRlLnRyZWUsIG11dGFibGUucGF0Y2hlZFRyZWUpO1xuICAgICAgICBpZiAoY2hhbmdlZFBhdGgpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB0cmVlIGNoYW5nZWQsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBuZXh0VXJsXG4gICAgICAgICAgICBuZXh0VXJsID0gY2hhbmdlZFBhdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoIW5leHRVcmwpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSB0cmVlIGVuZHMgdXAgYmVpbmcgdGhlIHNhbWUgKGllLCBubyBjaGFuZ2VkIHBhdGgpLCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIG5leHRVcmwsIHRoZW4gd2Ugc2hvdWxkIHVzZSB0aGUgY2Fub25pY2FsVXJsXG4gICAgICAgICAgICBuZXh0VXJsID0gc3RhdGUuY2Fub25pY2FsVXJsO1xuICAgICAgICB9XG4gICAgLy8gb3RoZXJ3aXNlIHRoaXMgd2lsbCBiZSBhIG5vLW9wIGFuZCBjb250aW51ZSB0byB1c2UgdGhlIGV4aXN0aW5nIG5leHRVcmxcbiAgICB9XG4gICAgdmFyIF9tdXRhYmxlX3Njcm9sbGFibGVTZWdtZW50cztcbiAgICByZXR1cm4ge1xuICAgICAgICBidWlsZElkOiBzdGF0ZS5idWlsZElkLFxuICAgICAgICAvLyBTZXQgaHJlZi5cbiAgICAgICAgY2Fub25pY2FsVXJsOiBpc05vdFVuZGVmaW5lZChtdXRhYmxlLmNhbm9uaWNhbFVybCkgPyBtdXRhYmxlLmNhbm9uaWNhbFVybCA9PT0gc3RhdGUuY2Fub25pY2FsVXJsID8gc3RhdGUuY2Fub25pY2FsVXJsIDogbXV0YWJsZS5jYW5vbmljYWxVcmwgOiBzdGF0ZS5jYW5vbmljYWxVcmwsXG4gICAgICAgIHB1c2hSZWY6IHtcbiAgICAgICAgICAgIHBlbmRpbmdQdXNoOiBpc05vdFVuZGVmaW5lZChtdXRhYmxlLnBlbmRpbmdQdXNoKSA/IG11dGFibGUucGVuZGluZ1B1c2ggOiBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoLFxuICAgICAgICAgICAgbXBhTmF2aWdhdGlvbjogaXNOb3RVbmRlZmluZWQobXV0YWJsZS5tcGFOYXZpZ2F0aW9uKSA/IG11dGFibGUubXBhTmF2aWdhdGlvbiA6IHN0YXRlLnB1c2hSZWYubXBhTmF2aWdhdGlvbixcbiAgICAgICAgICAgIHByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlOiBpc05vdFVuZGVmaW5lZChtdXRhYmxlLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlKSA/IG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUgOiBzdGF0ZS5wdXNoUmVmLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlXG4gICAgICAgIH0sXG4gICAgICAgIC8vIEFsbCBuYXZpZ2F0aW9uIHJlcXVpcmVzIHNjcm9sbCBhbmQgZm9jdXMgbWFuYWdlbWVudCB0byB0cmlnZ2VyLlxuICAgICAgICBmb2N1c0FuZFNjcm9sbFJlZjoge1xuICAgICAgICAgICAgYXBwbHk6IHNob3VsZFNjcm9sbCA/IGlzTm90VW5kZWZpbmVkKG11dGFibGUgPT0gbnVsbCA/IHZvaWQgMCA6IG11dGFibGUuc2Nyb2xsYWJsZVNlZ21lbnRzKSA/IHRydWUgOiBzdGF0ZS5mb2N1c0FuZFNjcm9sbFJlZi5hcHBseSA6IGZhbHNlLFxuICAgICAgICAgICAgb25seUhhc2hDaGFuZ2U6ICEhbXV0YWJsZS5oYXNoRnJhZ21lbnQgJiYgc3RhdGUuY2Fub25pY2FsVXJsLnNwbGl0KFwiI1wiLCAxKVswXSA9PT0gKChfbXV0YWJsZV9jYW5vbmljYWxVcmwgPSBtdXRhYmxlLmNhbm9uaWNhbFVybCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9tdXRhYmxlX2Nhbm9uaWNhbFVybC5zcGxpdChcIiNcIiwgMSlbMF0pLFxuICAgICAgICAgICAgaGFzaEZyYWdtZW50OiBzaG91bGRTY3JvbGwgPyAvLyAjdG9wIGlzIGhhbmRsZWQgaW4gbGF5b3V0LXJvdXRlci5cbiAgICAgICAgICAgIG11dGFibGUuaGFzaEZyYWdtZW50ICYmIG11dGFibGUuaGFzaEZyYWdtZW50ICE9PSBcIlwiID8gZGVjb2RlVVJJQ29tcG9uZW50KG11dGFibGUuaGFzaEZyYWdtZW50LnNsaWNlKDEpKSA6IHN0YXRlLmZvY3VzQW5kU2Nyb2xsUmVmLmhhc2hGcmFnbWVudCA6IG51bGwsXG4gICAgICAgICAgICBzZWdtZW50UGF0aHM6IHNob3VsZFNjcm9sbCA/IChfbXV0YWJsZV9zY3JvbGxhYmxlU2VnbWVudHMgPSBtdXRhYmxlID09IG51bGwgPyB2b2lkIDAgOiBtdXRhYmxlLnNjcm9sbGFibGVTZWdtZW50cykgIT0gbnVsbCA/IF9tdXRhYmxlX3Njcm9sbGFibGVTZWdtZW50cyA6IHN0YXRlLmZvY3VzQW5kU2Nyb2xsUmVmLnNlZ21lbnRQYXRocyA6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIC8vIEFwcGx5IGNhY2hlLlxuICAgICAgICBjYWNoZTogbXV0YWJsZS5jYWNoZSA/IG11dGFibGUuY2FjaGUgOiBzdGF0ZS5jYWNoZSxcbiAgICAgICAgcHJlZmV0Y2hDYWNoZTogbXV0YWJsZS5wcmVmZXRjaENhY2hlID8gbXV0YWJsZS5wcmVmZXRjaENhY2hlIDogc3RhdGUucHJlZmV0Y2hDYWNoZSxcbiAgICAgICAgLy8gQXBwbHkgcGF0Y2hlZCByb3V0ZXIgc3RhdGUuXG4gICAgICAgIHRyZWU6IGlzTm90VW5kZWZpbmVkKG11dGFibGUucGF0Y2hlZFRyZWUpID8gbXV0YWJsZS5wYXRjaGVkVHJlZSA6IHN0YXRlLnRyZWUsXG4gICAgICAgIG5leHRVcmxcbiAgICB9O1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW5kbGUtbXV0YWJsZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaGFuZGxlTXV0YWJsZSIsIl9jb21wdXRlY2hhbmdlZHBhdGgiLCJyZXF1aXJlIiwiaXNOb3RVbmRlZmluZWQiLCJzdGF0ZSIsIm11dGFibGUiLCJfbXV0YWJsZV9jYW5vbmljYWxVcmwiLCJfbXV0YWJsZV9zaG91bGRTY3JvbGwiLCJzaG91bGRTY3JvbGwiLCJuZXh0VXJsIiwicGF0Y2hlZFRyZWUiLCJjaGFuZ2VkUGF0aCIsImNvbXB1dGVDaGFuZ2VkUGF0aCIsInRyZWUiLCJjYW5vbmljYWxVcmwiLCJfbXV0YWJsZV9zY3JvbGxhYmxlU2VnbWVudHMiLCJidWlsZElkIiwicHVzaFJlZiIsInBlbmRpbmdQdXNoIiwibXBhTmF2aWdhdGlvbiIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiZm9jdXNBbmRTY3JvbGxSZWYiLCJhcHBseSIsInNjcm9sbGFibGVTZWdtZW50cyIsIm9ubHlIYXNoQ2hhbmdlIiwiaGFzaEZyYWdtZW50Iiwic3BsaXQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJzbGljZSIsInNlZ21lbnRQYXRocyIsImNhY2hlIiwicHJlZmV0Y2hDYWNoZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js ***! + \********************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"handleSegmentMismatch\", ({\n enumerable: true,\n get: function() {\n return handleSegmentMismatch;\n }\n}));\nconst _navigatereducer = __webpack_require__(/*! ./reducers/navigate-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nfunction handleSegmentMismatch(state, action, treePatch) {\n if (true) {\n console.warn(\"Performing hard navigation because your application experienced an unrecoverable error. If this keeps occurring, please file a Next.js issue.\\n\\n\" + \"Reason: Segment mismatch\\n\" + (\"Last Action: \" + action.type + \"\\n\\n\") + (\"Current Tree: \" + JSON.stringify(state.tree) + \"\\n\\n\") + (\"Tree Patch Payload: \" + JSON.stringify(treePatch)));\n }\n return (0, _navigatereducer.handleExternalUrl)(state, {}, state.canonicalUrl, true);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=handle-segment-mismatch.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2hhbmRsZS1zZWdtZW50LW1pc21hdGNoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx5REFBd0Q7SUFDcERJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxtQkFBbUJDLG1CQUFPQSxDQUFDLGlJQUE2QjtBQUM5RCxTQUFTRixzQkFBc0JHLEtBQUssRUFBRUMsTUFBTSxFQUFFQyxTQUFTO0lBQ25ELElBQUlDLElBQXNDLEVBQUU7UUFDeENDLFFBQVFDLElBQUksQ0FBQyxzSkFBc0osK0JBQWdDLG1CQUFrQkosT0FBT0ssSUFBSSxHQUFHLE1BQUssSUFBTSxvQkFBbUJDLEtBQUtDLFNBQVMsQ0FBQ1IsTUFBTVMsSUFBSSxJQUFJLE1BQUssSUFBTSwwQkFBeUJGLEtBQUtDLFNBQVMsQ0FBQ04sVUFBUztJQUM5VjtJQUNBLE9BQU8sQ0FBQyxHQUFHSixpQkFBaUJZLGlCQUFpQixFQUFFVixPQUFPLENBQUMsR0FBR0EsTUFBTVcsWUFBWSxFQUFFO0FBQ2xGO0FBRUEsSUFBSSxDQUFDLE9BQU9sQixRQUFRbUIsT0FBTyxLQUFLLGNBQWUsT0FBT25CLFFBQVFtQixPQUFPLEtBQUssWUFBWW5CLFFBQVFtQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9uQixRQUFRbUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3RCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW1CLE9BQU8sRUFBRSxjQUFjO1FBQUVsQixPQUFPO0lBQUs7SUFDbkVILE9BQU91QixNQUFNLENBQUNyQixRQUFRbUIsT0FBTyxFQUFFbkI7SUFDL0JzQixPQUFPdEIsT0FBTyxHQUFHQSxRQUFRbUIsT0FBTztBQUNsQyxFQUVBLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2hhbmRsZS1zZWdtZW50LW1pc21hdGNoLmpzP2FkMjAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoYW5kbGVTZWdtZW50TWlzbWF0Y2hcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNlZ21lbnRNaXNtYXRjaDtcbiAgICB9XG59KTtcbmNvbnN0IF9uYXZpZ2F0ZXJlZHVjZXIgPSByZXF1aXJlKFwiLi9yZWR1Y2Vycy9uYXZpZ2F0ZS1yZWR1Y2VyXCIpO1xuZnVuY3Rpb24gaGFuZGxlU2VnbWVudE1pc21hdGNoKHN0YXRlLCBhY3Rpb24sIHRyZWVQYXRjaCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlBlcmZvcm1pbmcgaGFyZCBuYXZpZ2F0aW9uIGJlY2F1c2UgeW91ciBhcHBsaWNhdGlvbiBleHBlcmllbmNlZCBhbiB1bnJlY292ZXJhYmxlIGVycm9yLiBJZiB0aGlzIGtlZXBzIG9jY3VycmluZywgcGxlYXNlIGZpbGUgYSBOZXh0LmpzIGlzc3VlLlxcblxcblwiICsgXCJSZWFzb246IFNlZ21lbnQgbWlzbWF0Y2hcXG5cIiArIChcIkxhc3QgQWN0aW9uOiBcIiArIGFjdGlvbi50eXBlICsgXCJcXG5cXG5cIikgKyAoXCJDdXJyZW50IFRyZWU6IFwiICsgSlNPTi5zdHJpbmdpZnkoc3RhdGUudHJlZSkgKyBcIlxcblxcblwiKSArIChcIlRyZWUgUGF0Y2ggUGF5bG9hZDogXCIgKyBKU09OLnN0cmluZ2lmeSh0cmVlUGF0Y2gpKSk7XG4gICAgfVxuICAgIHJldHVybiAoMCwgX25hdmlnYXRlcmVkdWNlci5oYW5kbGVFeHRlcm5hbFVybCkoc3RhdGUsIHt9LCBzdGF0ZS5jYW5vbmljYWxVcmwsIHRydWUpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW5kbGUtc2VnbWVudC1taXNtYXRjaC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaGFuZGxlU2VnbWVudE1pc21hdGNoIiwiX25hdmlnYXRlcmVkdWNlciIsInJlcXVpcmUiLCJzdGF0ZSIsImFjdGlvbiIsInRyZWVQYXRjaCIsInByb2Nlc3MiLCJjb25zb2xlIiwid2FybiIsInR5cGUiLCJKU09OIiwic3RyaW5naWZ5IiwidHJlZSIsImhhbmRsZUV4dGVybmFsVXJsIiwiY2Fub25pY2FsVXJsIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js": +/*!**************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js ***! + \**************************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"invalidateCacheBelowFlightSegmentPath\", ({\n enumerable: true,\n get: function() {\n return invalidateCacheBelowFlightSegmentPath;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction invalidateCacheBelowFlightSegmentPath(newCache, existingCache, flightSegmentPath) {\n const isLastEntry = flightSegmentPath.length <= 2;\n const [parallelRouteKey, segment] = flightSegmentPath;\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const existingChildSegmentMap = existingCache.parallelRoutes.get(parallelRouteKey);\n if (!existingChildSegmentMap) {\n // Bailout because the existing cache does not have the path to the leaf node\n // Will trigger lazy fetch in layout-router because of missing segment\n return;\n }\n let childSegmentMap = newCache.parallelRoutes.get(parallelRouteKey);\n if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n childSegmentMap = new Map(existingChildSegmentMap);\n newCache.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n }\n // In case of last entry don't copy further down.\n if (isLastEntry) {\n childSegmentMap.delete(cacheKey);\n return;\n }\n const existingChildCacheNode = existingChildSegmentMap.get(cacheKey);\n let childCacheNode = childSegmentMap.get(cacheKey);\n if (!childCacheNode || !existingChildCacheNode) {\n // Bailout because the existing cache does not have the path to the leaf node\n // Will trigger lazy fetch in layout-router because of missing segment\n return;\n }\n if (childCacheNode === existingChildCacheNode) {\n childCacheNode = {\n lazyData: childCacheNode.lazyData,\n rsc: childCacheNode.rsc,\n prefetchRsc: childCacheNode.prefetchRsc,\n parallelRoutes: new Map(childCacheNode.parallelRoutes)\n };\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n invalidateCacheBelowFlightSegmentPath(childCacheNode, existingChildCacheNode, flightSegmentPath.slice(2));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=invalidate-cache-below-flight-segmentpath.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ludmFsaWRhdGUtY2FjaGUtYmVsb3ctZmxpZ2h0LXNlZ21lbnRwYXRoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx5RUFBd0U7SUFDcEVJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyx3QkFBd0JDLG1CQUFPQSxDQUFDLDZIQUEyQjtBQUNqRSxTQUFTRixzQ0FBc0NHLFFBQVEsRUFBRUMsYUFBYSxFQUFFQyxpQkFBaUI7SUFDckYsTUFBTUMsY0FBY0Qsa0JBQWtCRSxNQUFNLElBQUk7SUFDaEQsTUFBTSxDQUFDQyxrQkFBa0JDLFFBQVEsR0FBR0o7SUFDcEMsTUFBTUssV0FBVyxDQUFDLEdBQUdULHNCQUFzQlUsb0JBQW9CLEVBQUVGO0lBQ2pFLE1BQU1HLDBCQUEwQlIsY0FBY1MsY0FBYyxDQUFDZCxHQUFHLENBQUNTO0lBQ2pFLElBQUksQ0FBQ0kseUJBQXlCO1FBQzFCLDZFQUE2RTtRQUM3RSxzRUFBc0U7UUFDdEU7SUFDSjtJQUNBLElBQUlFLGtCQUFrQlgsU0FBU1UsY0FBYyxDQUFDZCxHQUFHLENBQUNTO0lBQ2xELElBQUksQ0FBQ00sbUJBQW1CQSxvQkFBb0JGLHlCQUF5QjtRQUNqRUUsa0JBQWtCLElBQUlDLElBQUlIO1FBQzFCVCxTQUFTVSxjQUFjLENBQUNHLEdBQUcsQ0FBQ1Isa0JBQWtCTTtJQUNsRDtJQUNBLGlEQUFpRDtJQUNqRCxJQUFJUixhQUFhO1FBQ2JRLGdCQUFnQkcsTUFBTSxDQUFDUDtRQUN2QjtJQUNKO0lBQ0EsTUFBTVEseUJBQXlCTix3QkFBd0JiLEdBQUcsQ0FBQ1c7SUFDM0QsSUFBSVMsaUJBQWlCTCxnQkFBZ0JmLEdBQUcsQ0FBQ1c7SUFDekMsSUFBSSxDQUFDUyxrQkFBa0IsQ0FBQ0Qsd0JBQXdCO1FBQzVDLDZFQUE2RTtRQUM3RSxzRUFBc0U7UUFDdEU7SUFDSjtJQUNBLElBQUlDLG1CQUFtQkQsd0JBQXdCO1FBQzNDQyxpQkFBaUI7WUFDYkMsVUFBVUQsZUFBZUMsUUFBUTtZQUNqQ0MsS0FBS0YsZUFBZUUsR0FBRztZQUN2QkMsYUFBYUgsZUFBZUcsV0FBVztZQUN2Q1QsZ0JBQWdCLElBQUlFLElBQUlJLGVBQWVOLGNBQWM7UUFDekQ7UUFDQUMsZ0JBQWdCRSxHQUFHLENBQUNOLFVBQVVTO0lBQ2xDO0lBQ0FuQixzQ0FBc0NtQixnQkFBZ0JELHdCQUF3QmIsa0JBQWtCa0IsS0FBSyxDQUFDO0FBQzFHO0FBRUEsSUFBSSxDQUFDLE9BQU8zQixRQUFRNEIsT0FBTyxLQUFLLGNBQWUsT0FBTzVCLFFBQVE0QixPQUFPLEtBQUssWUFBWTVCLFFBQVE0QixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU81QixRQUFRNEIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySy9CLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTRCLE9BQU8sRUFBRSxjQUFjO1FBQUUzQixPQUFPO0lBQUs7SUFDbkVILE9BQU9nQyxNQUFNLENBQUM5QixRQUFRNEIsT0FBTyxFQUFFNUI7SUFDL0IrQixPQUFPL0IsT0FBTyxHQUFHQSxRQUFRNEIsT0FBTztBQUNsQyxFQUVBLHFFQUFxRSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ludmFsaWRhdGUtY2FjaGUtYmVsb3ctZmxpZ2h0LXNlZ21lbnRwYXRoLmpzPzhmZTAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoO1xuICAgIH1cbn0pO1xuY29uc3QgX2NyZWF0ZXJvdXRlcmNhY2hla2V5ID0gcmVxdWlyZShcIi4vY3JlYXRlLXJvdXRlci1jYWNoZS1rZXlcIik7XG5mdW5jdGlvbiBpbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoKG5ld0NhY2hlLCBleGlzdGluZ0NhY2hlLCBmbGlnaHRTZWdtZW50UGF0aCkge1xuICAgIGNvbnN0IGlzTGFzdEVudHJ5ID0gZmxpZ2h0U2VnbWVudFBhdGgubGVuZ3RoIDw9IDI7XG4gICAgY29uc3QgW3BhcmFsbGVsUm91dGVLZXksIHNlZ21lbnRdID0gZmxpZ2h0U2VnbWVudFBhdGg7XG4gICAgY29uc3QgY2FjaGVLZXkgPSAoMCwgX2NyZWF0ZXJvdXRlcmNhY2hla2V5LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShzZWdtZW50KTtcbiAgICBjb25zdCBleGlzdGluZ0NoaWxkU2VnbWVudE1hcCA9IGV4aXN0aW5nQ2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpO1xuICAgIGlmICghZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXApIHtcbiAgICAgICAgLy8gQmFpbG91dCBiZWNhdXNlIHRoZSBleGlzdGluZyBjYWNoZSBkb2VzIG5vdCBoYXZlIHRoZSBwYXRoIHRvIHRoZSBsZWFmIG5vZGVcbiAgICAgICAgLy8gV2lsbCB0cmlnZ2VyIGxhenkgZmV0Y2ggaW4gbGF5b3V0LXJvdXRlciBiZWNhdXNlIG9mIG1pc3Npbmcgc2VnbWVudFxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBjaGlsZFNlZ21lbnRNYXAgPSBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSk7XG4gICAgaWYgKCFjaGlsZFNlZ21lbnRNYXAgfHwgY2hpbGRTZWdtZW50TWFwID09PSBleGlzdGluZ0NoaWxkU2VnbWVudE1hcCkge1xuICAgICAgICBjaGlsZFNlZ21lbnRNYXAgPSBuZXcgTWFwKGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKTtcbiAgICAgICAgbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuc2V0KHBhcmFsbGVsUm91dGVLZXksIGNoaWxkU2VnbWVudE1hcCk7XG4gICAgfVxuICAgIC8vIEluIGNhc2Ugb2YgbGFzdCBlbnRyeSBkb24ndCBjb3B5IGZ1cnRoZXIgZG93bi5cbiAgICBpZiAoaXNMYXN0RW50cnkpIHtcbiAgICAgICAgY2hpbGRTZWdtZW50TWFwLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmdDaGlsZENhY2hlTm9kZSA9IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwLmdldChjYWNoZUtleSk7XG4gICAgbGV0IGNoaWxkQ2FjaGVOb2RlID0gY2hpbGRTZWdtZW50TWFwLmdldChjYWNoZUtleSk7XG4gICAgaWYgKCFjaGlsZENhY2hlTm9kZSB8fCAhZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgICAgICAvLyBCYWlsb3V0IGJlY2F1c2UgdGhlIGV4aXN0aW5nIGNhY2hlIGRvZXMgbm90IGhhdmUgdGhlIHBhdGggdG8gdGhlIGxlYWYgbm9kZVxuICAgICAgICAvLyBXaWxsIHRyaWdnZXIgbGF6eSBmZXRjaCBpbiBsYXlvdXQtcm91dGVyIGJlY2F1c2Ugb2YgbWlzc2luZyBzZWdtZW50XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoaWxkQ2FjaGVOb2RlID09PSBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKSB7XG4gICAgICAgIGNoaWxkQ2FjaGVOb2RlID0ge1xuICAgICAgICAgICAgbGF6eURhdGE6IGNoaWxkQ2FjaGVOb2RlLmxhenlEYXRhLFxuICAgICAgICAgICAgcnNjOiBjaGlsZENhY2hlTm9kZS5yc2MsXG4gICAgICAgICAgICBwcmVmZXRjaFJzYzogY2hpbGRDYWNoZU5vZGUucHJlZmV0Y2hSc2MsXG4gICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcChjaGlsZENhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcylcbiAgICAgICAgfTtcbiAgICAgICAgY2hpbGRTZWdtZW50TWFwLnNldChjYWNoZUtleSwgY2hpbGRDYWNoZU5vZGUpO1xuICAgIH1cbiAgICBpbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoKGNoaWxkQ2FjaGVOb2RlLCBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlLCBmbGlnaHRTZWdtZW50UGF0aC5zbGljZSgyKSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludmFsaWRhdGUtY2FjaGUtYmVsb3ctZmxpZ2h0LXNlZ21lbnRwYXRoLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJpbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoIiwiX2NyZWF0ZXJvdXRlcmNhY2hla2V5IiwicmVxdWlyZSIsIm5ld0NhY2hlIiwiZXhpc3RpbmdDYWNoZSIsImZsaWdodFNlZ21lbnRQYXRoIiwiaXNMYXN0RW50cnkiLCJsZW5ndGgiLCJwYXJhbGxlbFJvdXRlS2V5Iiwic2VnbWVudCIsImNhY2hlS2V5IiwiY3JlYXRlUm91dGVyQ2FjaGVLZXkiLCJleGlzdGluZ0NoaWxkU2VnbWVudE1hcCIsInBhcmFsbGVsUm91dGVzIiwiY2hpbGRTZWdtZW50TWFwIiwiTWFwIiwic2V0IiwiZGVsZXRlIiwiZXhpc3RpbmdDaGlsZENhY2hlTm9kZSIsImNoaWxkQ2FjaGVOb2RlIiwibGF6eURhdGEiLCJyc2MiLCJwcmVmZXRjaFJzYyIsInNsaWNlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js ***! + \*****************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"invalidateCacheByRouterState\", ({\n enumerable: true,\n get: function() {\n return invalidateCacheByRouterState;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction invalidateCacheByRouterState(newCache, existingCache, routerState) {\n // Remove segment that we got data for so that it is filled in during rendering of rsc.\n for(const key in routerState[1]){\n const segmentForParallelRoute = routerState[1][key][0];\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segmentForParallelRoute);\n const existingParallelRoutesCacheNode = existingCache.parallelRoutes.get(key);\n if (existingParallelRoutesCacheNode) {\n let parallelRouteCacheNode = new Map(existingParallelRoutesCacheNode);\n parallelRouteCacheNode.delete(cacheKey);\n newCache.parallelRoutes.set(key, parallelRouteCacheNode);\n }\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=invalidate-cache-by-router-state.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ludmFsaWRhdGUtY2FjaGUtYnktcm91dGVyLXN0YXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxnRUFBK0Q7SUFDM0RJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyx3QkFBd0JDLG1CQUFPQSxDQUFDLDZIQUEyQjtBQUNqRSxTQUFTRiw2QkFBNkJHLFFBQVEsRUFBRUMsYUFBYSxFQUFFQyxXQUFXO0lBQ3RFLHVGQUF1RjtJQUN2RixJQUFJLE1BQU1DLE9BQU9ELFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDNUIsTUFBTUUsMEJBQTBCRixXQUFXLENBQUMsRUFBRSxDQUFDQyxJQUFJLENBQUMsRUFBRTtRQUN0RCxNQUFNRSxXQUFXLENBQUMsR0FBR1Asc0JBQXNCUSxvQkFBb0IsRUFBRUY7UUFDakUsTUFBTUcsa0NBQWtDTixjQUFjTyxjQUFjLENBQUNaLEdBQUcsQ0FBQ087UUFDekUsSUFBSUksaUNBQWlDO1lBQ2pDLElBQUlFLHlCQUF5QixJQUFJQyxJQUFJSDtZQUNyQ0UsdUJBQXVCRSxNQUFNLENBQUNOO1lBQzlCTCxTQUFTUSxjQUFjLENBQUNJLEdBQUcsQ0FBQ1QsS0FBS007UUFDckM7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9oQixRQUFRb0IsT0FBTyxLQUFLLGNBQWUsT0FBT3BCLFFBQVFvQixPQUFPLEtBQUssWUFBWXBCLFFBQVFvQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9wQixRQUFRb0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3ZCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW9CLE9BQU8sRUFBRSxjQUFjO1FBQUVuQixPQUFPO0lBQUs7SUFDbkVILE9BQU93QixNQUFNLENBQUN0QixRQUFRb0IsT0FBTyxFQUFFcEI7SUFDL0J1QixPQUFPdkIsT0FBTyxHQUFHQSxRQUFRb0IsT0FBTztBQUNsQyxFQUVBLDREQUE0RCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ludmFsaWRhdGUtY2FjaGUtYnktcm91dGVyLXN0YXRlLmpzPzA2NzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpbnZhbGlkYXRlQ2FjaGVCeVJvdXRlclN0YXRlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpbnZhbGlkYXRlQ2FjaGVCeVJvdXRlclN0YXRlO1xuICAgIH1cbn0pO1xuY29uc3QgX2NyZWF0ZXJvdXRlcmNhY2hla2V5ID0gcmVxdWlyZShcIi4vY3JlYXRlLXJvdXRlci1jYWNoZS1rZXlcIik7XG5mdW5jdGlvbiBpbnZhbGlkYXRlQ2FjaGVCeVJvdXRlclN0YXRlKG5ld0NhY2hlLCBleGlzdGluZ0NhY2hlLCByb3V0ZXJTdGF0ZSkge1xuICAgIC8vIFJlbW92ZSBzZWdtZW50IHRoYXQgd2UgZ290IGRhdGEgZm9yIHNvIHRoYXQgaXQgaXMgZmlsbGVkIGluIGR1cmluZyByZW5kZXJpbmcgb2YgcnNjLlxuICAgIGZvcihjb25zdCBrZXkgaW4gcm91dGVyU3RhdGVbMV0pe1xuICAgICAgICBjb25zdCBzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZSA9IHJvdXRlclN0YXRlWzFdW2tleV1bMF07XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gKDAsIF9jcmVhdGVyb3V0ZXJjYWNoZWtleS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoc2VnbWVudEZvclBhcmFsbGVsUm91dGUpO1xuICAgICAgICBjb25zdCBleGlzdGluZ1BhcmFsbGVsUm91dGVzQ2FjaGVOb2RlID0gZXhpc3RpbmdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUpIHtcbiAgICAgICAgICAgIGxldCBwYXJhbGxlbFJvdXRlQ2FjaGVOb2RlID0gbmV3IE1hcChleGlzdGluZ1BhcmFsbGVsUm91dGVzQ2FjaGVOb2RlKTtcbiAgICAgICAgICAgIHBhcmFsbGVsUm91dGVDYWNoZU5vZGUuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgICAgICAgIG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLnNldChrZXksIHBhcmFsbGVsUm91dGVDYWNoZU5vZGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnZhbGlkYXRlLWNhY2hlLWJ5LXJvdXRlci1zdGF0ZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaW52YWxpZGF0ZUNhY2hlQnlSb3V0ZXJTdGF0ZSIsIl9jcmVhdGVyb3V0ZXJjYWNoZWtleSIsInJlcXVpcmUiLCJuZXdDYWNoZSIsImV4aXN0aW5nQ2FjaGUiLCJyb3V0ZXJTdGF0ZSIsImtleSIsInNlZ21lbnRGb3JQYXJhbGxlbFJvdXRlIiwiY2FjaGVLZXkiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsImV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUiLCJwYXJhbGxlbFJvdXRlcyIsInBhcmFsbGVsUm91dGVDYWNoZU5vZGUiLCJNYXAiLCJkZWxldGUiLCJzZXQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js ***! + \*****************************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isNavigatingToNewRootLayout\", ({\n enumerable: true,\n get: function() {\n return isNavigatingToNewRootLayout;\n }\n}));\nfunction isNavigatingToNewRootLayout(currentTree, nextTree) {\n // Compare segments\n const currentTreeSegment = currentTree[0];\n const nextTreeSegment = nextTree[0];\n // If any segment is different before we find the root layout, the root layout has changed.\n // E.g. /same/(group1)/layout.js -> /same/(group2)/layout.js\n // First segment is 'same' for both, keep looking. (group1) changed to (group2) before the root layout was found, it must have changed.\n if (Array.isArray(currentTreeSegment) && Array.isArray(nextTreeSegment)) {\n // Compare dynamic param name and type but ignore the value, different values would not affect the current root layout\n // /[name] - /slug1 and /slug2, both values (slug1 & slug2) still has the same layout /[name]/layout.js\n if (currentTreeSegment[0] !== nextTreeSegment[0] || currentTreeSegment[2] !== nextTreeSegment[2]) {\n return true;\n }\n } else if (currentTreeSegment !== nextTreeSegment) {\n return true;\n }\n // Current tree root layout found\n if (currentTree[4]) {\n // If the next tree doesn't have the root layout flag, it must have changed.\n return !nextTree[4];\n }\n // Current tree didn't have its root layout here, must have changed.\n if (nextTree[4]) {\n return true;\n }\n // We can't assume it's `parallelRoutes.children` here in case the root layout is `app/@something/layout.js`\n // But it's not possible to be more than one parallelRoutes before the root layout is found\n // TODO-APP: change to traverse all parallel routes\n const currentTreeChild = Object.values(currentTree[1])[0];\n const nextTreeChild = Object.values(nextTree[1])[0];\n if (!currentTreeChild || !nextTreeChild) return true;\n return isNavigatingToNewRootLayout(currentTreeChild, nextTreeChild);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=is-navigating-to-new-root-layout.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2lzLW5hdmlnYXRpbmctdG8tbmV3LXJvb3QtbGF5b3V0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwrREFBOEQ7SUFDMURJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixTQUFTQSw0QkFBNEJDLFdBQVcsRUFBRUMsUUFBUTtJQUN0RCxtQkFBbUI7SUFDbkIsTUFBTUMscUJBQXFCRixXQUFXLENBQUMsRUFBRTtJQUN6QyxNQUFNRyxrQkFBa0JGLFFBQVEsQ0FBQyxFQUFFO0lBQ25DLDJGQUEyRjtJQUMzRiw0REFBNEQ7SUFDNUQsdUlBQXVJO0lBQ3ZJLElBQUlHLE1BQU1DLE9BQU8sQ0FBQ0gsdUJBQXVCRSxNQUFNQyxPQUFPLENBQUNGLGtCQUFrQjtRQUNyRSxzSEFBc0g7UUFDdEgsdUdBQXVHO1FBQ3ZHLElBQUlELGtCQUFrQixDQUFDLEVBQUUsS0FBS0MsZUFBZSxDQUFDLEVBQUUsSUFBSUQsa0JBQWtCLENBQUMsRUFBRSxLQUFLQyxlQUFlLENBQUMsRUFBRSxFQUFFO1lBQzlGLE9BQU87UUFDWDtJQUNKLE9BQU8sSUFBSUQsdUJBQXVCQyxpQkFBaUI7UUFDL0MsT0FBTztJQUNYO0lBQ0EsaUNBQWlDO0lBQ2pDLElBQUlILFdBQVcsQ0FBQyxFQUFFLEVBQUU7UUFDaEIsNEVBQTRFO1FBQzVFLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDLEVBQUU7SUFDdkI7SUFDQSxxRUFBcUU7SUFDckUsSUFBSUEsUUFBUSxDQUFDLEVBQUUsRUFBRTtRQUNiLE9BQU87SUFDWDtJQUNBLDRHQUE0RztJQUM1RywyRkFBMkY7SUFDM0YsbURBQW1EO0lBQ25ELE1BQU1LLG1CQUFtQmIsT0FBT2MsTUFBTSxDQUFDUCxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUN6RCxNQUFNUSxnQkFBZ0JmLE9BQU9jLE1BQU0sQ0FBQ04sUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDbkQsSUFBSSxDQUFDSyxvQkFBb0IsQ0FBQ0UsZUFBZSxPQUFPO0lBQ2hELE9BQU9ULDRCQUE0Qk8sa0JBQWtCRTtBQUN6RDtBQUVBLElBQUksQ0FBQyxPQUFPYixRQUFRYyxPQUFPLEtBQUssY0FBZSxPQUFPZCxRQUFRYyxPQUFPLEtBQUssWUFBWWQsUUFBUWMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPZCxRQUFRYyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLakIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRYyxPQUFPLEVBQUUsY0FBYztRQUFFYixPQUFPO0lBQUs7SUFDbkVILE9BQU9rQixNQUFNLENBQUNoQixRQUFRYyxPQUFPLEVBQUVkO0lBQy9CaUIsT0FBT2pCLE9BQU8sR0FBR0EsUUFBUWMsT0FBTztBQUNsQyxFQUVBLDREQUE0RCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2lzLW5hdmlnYXRpbmctdG8tbmV3LXJvb3QtbGF5b3V0LmpzP2NjNTkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dChjdXJyZW50VHJlZSwgbmV4dFRyZWUpIHtcbiAgICAvLyBDb21wYXJlIHNlZ21lbnRzXG4gICAgY29uc3QgY3VycmVudFRyZWVTZWdtZW50ID0gY3VycmVudFRyZWVbMF07XG4gICAgY29uc3QgbmV4dFRyZWVTZWdtZW50ID0gbmV4dFRyZWVbMF07XG4gICAgLy8gSWYgYW55IHNlZ21lbnQgaXMgZGlmZmVyZW50IGJlZm9yZSB3ZSBmaW5kIHRoZSByb290IGxheW91dCwgdGhlIHJvb3QgbGF5b3V0IGhhcyBjaGFuZ2VkLlxuICAgIC8vIEUuZy4gL3NhbWUvKGdyb3VwMSkvbGF5b3V0LmpzIC0+IC9zYW1lLyhncm91cDIpL2xheW91dC5qc1xuICAgIC8vIEZpcnN0IHNlZ21lbnQgaXMgJ3NhbWUnIGZvciBib3RoLCBrZWVwIGxvb2tpbmcuIChncm91cDEpIGNoYW5nZWQgdG8gKGdyb3VwMikgYmVmb3JlIHRoZSByb290IGxheW91dCB3YXMgZm91bmQsIGl0IG11c3QgaGF2ZSBjaGFuZ2VkLlxuICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnRUcmVlU2VnbWVudCkgJiYgQXJyYXkuaXNBcnJheShuZXh0VHJlZVNlZ21lbnQpKSB7XG4gICAgICAgIC8vIENvbXBhcmUgZHluYW1pYyBwYXJhbSBuYW1lIGFuZCB0eXBlIGJ1dCBpZ25vcmUgdGhlIHZhbHVlLCBkaWZmZXJlbnQgdmFsdWVzIHdvdWxkIG5vdCBhZmZlY3QgdGhlIGN1cnJlbnQgcm9vdCBsYXlvdXRcbiAgICAgICAgLy8gL1tuYW1lXSAtIC9zbHVnMSBhbmQgL3NsdWcyLCBib3RoIHZhbHVlcyAoc2x1ZzEgJiBzbHVnMikgc3RpbGwgaGFzIHRoZSBzYW1lIGxheW91dCAvW25hbWVdL2xheW91dC5qc1xuICAgICAgICBpZiAoY3VycmVudFRyZWVTZWdtZW50WzBdICE9PSBuZXh0VHJlZVNlZ21lbnRbMF0gfHwgY3VycmVudFRyZWVTZWdtZW50WzJdICE9PSBuZXh0VHJlZVNlZ21lbnRbMl0pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChjdXJyZW50VHJlZVNlZ21lbnQgIT09IG5leHRUcmVlU2VnbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gQ3VycmVudCB0cmVlIHJvb3QgbGF5b3V0IGZvdW5kXG4gICAgaWYgKGN1cnJlbnRUcmVlWzRdKSB7XG4gICAgICAgIC8vIElmIHRoZSBuZXh0IHRyZWUgZG9lc24ndCBoYXZlIHRoZSByb290IGxheW91dCBmbGFnLCBpdCBtdXN0IGhhdmUgY2hhbmdlZC5cbiAgICAgICAgcmV0dXJuICFuZXh0VHJlZVs0XTtcbiAgICB9XG4gICAgLy8gQ3VycmVudCB0cmVlICBkaWRuJ3QgaGF2ZSBpdHMgcm9vdCBsYXlvdXQgaGVyZSwgbXVzdCBoYXZlIGNoYW5nZWQuXG4gICAgaWYgKG5leHRUcmVlWzRdKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBXZSBjYW4ndCBhc3N1bWUgaXQncyBgcGFyYWxsZWxSb3V0ZXMuY2hpbGRyZW5gIGhlcmUgaW4gY2FzZSB0aGUgcm9vdCBsYXlvdXQgaXMgYGFwcC9Ac29tZXRoaW5nL2xheW91dC5qc2BcbiAgICAvLyBCdXQgaXQncyBub3QgcG9zc2libGUgdG8gYmUgbW9yZSB0aGFuIG9uZSBwYXJhbGxlbFJvdXRlcyBiZWZvcmUgdGhlIHJvb3QgbGF5b3V0IGlzIGZvdW5kXG4gICAgLy8gVE9ETy1BUFA6IGNoYW5nZSB0byB0cmF2ZXJzZSBhbGwgcGFyYWxsZWwgcm91dGVzXG4gICAgY29uc3QgY3VycmVudFRyZWVDaGlsZCA9IE9iamVjdC52YWx1ZXMoY3VycmVudFRyZWVbMV0pWzBdO1xuICAgIGNvbnN0IG5leHRUcmVlQ2hpbGQgPSBPYmplY3QudmFsdWVzKG5leHRUcmVlWzFdKVswXTtcbiAgICBpZiAoIWN1cnJlbnRUcmVlQ2hpbGQgfHwgIW5leHRUcmVlQ2hpbGQpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQoY3VycmVudFRyZWVDaGlsZCwgbmV4dFRyZWVDaGlsZCk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzLW5hdmlnYXRpbmctdG8tbmV3LXJvb3QtbGF5b3V0LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLCJjdXJyZW50VHJlZSIsIm5leHRUcmVlIiwiY3VycmVudFRyZWVTZWdtZW50IiwibmV4dFRyZWVTZWdtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiY3VycmVudFRyZWVDaGlsZCIsInZhbHVlcyIsIm5leHRUcmVlQ2hpbGQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js ***! + \************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n updateCacheNodeOnNavigation: function() {\n return updateCacheNodeOnNavigation;\n },\n listenForDynamicRequest: function() {\n return listenForDynamicRequest;\n },\n abortTask: function() {\n return abortTask;\n },\n updateCacheNodeOnPopstateRestoration: function() {\n return updateCacheNodeOnPopstateRestoration;\n }\n});\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(ssr)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(ssr)/./node_modules/next/dist/client/components/match-segments.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction updateCacheNodeOnNavigation(oldCacheNode, oldRouterState, newRouterState, prefetchData, prefetchHead, isPrefetchStale) {\n // Diff the old and new trees to reuse the shared layouts.\n const oldRouterStateChildren = oldRouterState[1];\n const newRouterStateChildren = newRouterState[1];\n const prefetchDataChildren = prefetchData[1];\n const oldParallelRoutes = oldCacheNode.parallelRoutes;\n // Clone the current set of segment children, even if they aren't active in\n // the new tree.\n // TODO: We currently retain all the inactive segments indefinitely, until\n // there's an explicit refresh, or a parent layout is lazily refreshed. We\n // rely on this for popstate navigations, which update the Router State Tree\n // but do not eagerly perform a data fetch, because they expect the segment\n // data to already be in the Cache Node tree. For highly static sites that\n // are mostly read-only, this may happen only rarely, causing memory to\n // leak. We should figure out a better model for the lifetime of inactive\n // segments, so we can maintain instant back/forward navigations without\n // leaking memory indefinitely.\n const prefetchParallelRoutes = new Map(oldParallelRoutes);\n // As we diff the trees, we may sometimes modify (copy-on-write, not mutate)\n // the Route Tree that was returned by the server — for example, in the case\n // of default parallel routes, we preserve the currently active segment. To\n // avoid mutating the original tree, we clone the router state children along\n // the return path.\n let patchedRouterStateChildren = {};\n let taskChildren = null;\n for(let parallelRouteKey in newRouterStateChildren){\n const newRouterStateChild = newRouterStateChildren[parallelRouteKey];\n const oldRouterStateChild = oldRouterStateChildren[parallelRouteKey];\n const oldSegmentMapChild = oldParallelRoutes.get(parallelRouteKey);\n const prefetchDataChild = prefetchDataChildren[parallelRouteKey];\n const newSegmentChild = newRouterStateChild[0];\n const newSegmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(newSegmentChild);\n const oldSegmentChild = oldRouterStateChild !== undefined ? oldRouterStateChild[0] : undefined;\n const oldCacheNodeChild = oldSegmentMapChild !== undefined ? oldSegmentMapChild.get(newSegmentKeyChild) : undefined;\n let taskChild;\n if (newSegmentChild === _segment.PAGE_SEGMENT_KEY) {\n // This is a leaf segment — a page, not a shared layout. We always apply\n // its data.\n taskChild = spawnPendingTask(newRouterStateChild, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchStale);\n } else if (newSegmentChild === _segment.DEFAULT_SEGMENT_KEY) {\n // This is another kind of leaf segment — a default route.\n //\n // Default routes have special behavior. When there's no matching segment\n // for a parallel route, Next.js preserves the currently active segment\n // during a client navigation — but not for initial render. The server\n // leaves it to the client to account for this. So we need to handle\n // it here.\n if (oldRouterStateChild !== undefined) {\n // Reuse the existing Router State for this segment. We spawn a \"task\"\n // just to keep track of the updated router state; unlike most, it's\n // already fulfilled and won't be affected by the dynamic response.\n taskChild = spawnReusedTask(oldRouterStateChild);\n } else {\n // There's no currently active segment. Switch to the \"create\" path.\n taskChild = spawnPendingTask(newRouterStateChild, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchStale);\n }\n } else if (oldSegmentChild !== undefined && (0, _matchsegments.matchSegment)(newSegmentChild, oldSegmentChild)) {\n if (oldCacheNodeChild !== undefined && oldRouterStateChild !== undefined) {\n // This segment exists in both the old and new trees.\n if (prefetchDataChild !== undefined && prefetchDataChild !== null) {\n // Recursively update the children.\n taskChild = updateCacheNodeOnNavigation(oldCacheNodeChild, oldRouterStateChild, newRouterStateChild, prefetchDataChild, prefetchHead, isPrefetchStale);\n } else {\n // The server didn't send any prefetch data for this segment. This\n // shouldn't happen because the Route Tree and the Seed Data tree\n // should always be the same shape, but until we unify those types\n // it's still possible. For now we're going to deopt and trigger a\n // lazy fetch during render.\n taskChild = spawnTaskForMissingData(newRouterStateChild);\n }\n } else {\n // Either there's no existing Cache Node for this segment, or this\n // segment doesn't exist in the old Router State tree. Switch to the\n // \"create\" path.\n taskChild = spawnPendingTask(newRouterStateChild, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchStale);\n }\n } else {\n // This is a new tree. Switch to the \"create\" path.\n taskChild = spawnPendingTask(newRouterStateChild, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchStale);\n }\n if (taskChild !== null) {\n // Something changed in the child tree. Keep track of the child task.\n if (taskChildren === null) {\n taskChildren = new Map();\n }\n taskChildren.set(parallelRouteKey, taskChild);\n const newCacheNodeChild = taskChild.node;\n if (newCacheNodeChild !== null) {\n const newSegmentMapChild = new Map(oldSegmentMapChild);\n newSegmentMapChild.set(newSegmentKeyChild, newCacheNodeChild);\n prefetchParallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n }\n // The child tree's route state may be different from the prefetched\n // route sent by the server. We need to clone it as we traverse back up\n // the tree.\n patchedRouterStateChildren[parallelRouteKey] = taskChild.route;\n } else {\n // The child didn't change. We can use the prefetched router state.\n patchedRouterStateChildren[parallelRouteKey] = newRouterStateChild;\n }\n }\n if (taskChildren === null) {\n // No new tasks were spawned.\n return null;\n }\n const newCacheNode = {\n lazyData: null,\n rsc: oldCacheNode.rsc,\n // We intentionally aren't updating the prefetchRsc field, since this node\n // is already part of the current tree, because it would be weird for\n // prefetch data to be newer than the final data. It probably won't ever be\n // observable anyway, but it could happen if the segment is unmounted then\n // mounted again, because LayoutRouter will momentarily switch to rendering\n // prefetchRsc, via useDeferredValue.\n prefetchRsc: oldCacheNode.prefetchRsc,\n head: oldCacheNode.head,\n prefetchHead: oldCacheNode.prefetchHead,\n // Everything is cloned except for the children, which we computed above.\n parallelRoutes: prefetchParallelRoutes\n };\n return {\n // Return a cloned copy of the router state with updated children.\n route: patchRouterStateWithNewChildren(newRouterState, patchedRouterStateChildren),\n node: newCacheNode,\n children: taskChildren\n };\n}\nfunction patchRouterStateWithNewChildren(baseRouterState, newChildren) {\n const clone = [\n baseRouterState[0],\n newChildren\n ];\n // Based on equivalent logic in apply-router-state-patch-to-tree, but should\n // confirm whether we need to copy all of these fields. Not sure the server\n // ever sends, e.g. the refetch marker.\n if (2 in baseRouterState) {\n clone[2] = baseRouterState[2];\n }\n if (3 in baseRouterState) {\n clone[3] = baseRouterState[3];\n }\n if (4 in baseRouterState) {\n clone[4] = baseRouterState[4];\n }\n return clone;\n}\nfunction spawnPendingTask(routerState, prefetchData, prefetchHead, isPrefetchStale) {\n // Create a task that will later be fulfilled by data from the server.\n const pendingCacheNode = createPendingCacheNode(routerState, prefetchData, prefetchHead, isPrefetchStale);\n return {\n route: routerState,\n node: pendingCacheNode,\n children: null\n };\n}\nfunction spawnReusedTask(reusedRouterState) {\n // Create a task that reuses an existing segment, e.g. when reusing\n // the current active segment in place of a default route.\n return {\n route: reusedRouterState,\n node: null,\n children: null\n };\n}\nfunction spawnTaskForMissingData(routerState) {\n // Create a task for a new subtree that wasn't prefetched by the server.\n // This shouldn't really ever happen but it's here just in case the Seed Data\n // Tree and the Router State Tree disagree unexpectedly.\n const pendingCacheNode = createPendingCacheNode(routerState, null, null, false);\n return {\n route: routerState,\n node: pendingCacheNode,\n children: null\n };\n}\nfunction listenForDynamicRequest(task, responsePromise) {\n responsePromise.then((response)=>{\n const flightData = response[0];\n for (const flightDataPath of flightData){\n const segmentPath = flightDataPath.slice(0, -3);\n const serverRouterState = flightDataPath[flightDataPath.length - 3];\n const dynamicData = flightDataPath[flightDataPath.length - 2];\n const dynamicHead = flightDataPath[flightDataPath.length - 1];\n if (typeof segmentPath === \"string\") {\n continue;\n }\n writeDynamicDataIntoPendingTask(task, segmentPath, serverRouterState, dynamicData, dynamicHead);\n }\n // Now that we've exhausted all the data we received from the server, if\n // there are any remaining pending tasks in the tree, abort them now.\n // If there's any missing data, it will trigger a lazy fetch.\n abortTask(task, null);\n }, (error)=>{\n // This will trigger an error during render\n abortTask(task, error);\n });\n}\nfunction writeDynamicDataIntoPendingTask(rootTask, segmentPath, serverRouterState, dynamicData, dynamicHead) {\n // The data sent by the server represents only a subtree of the app. We need\n // to find the part of the task tree that matches the server response, and\n // fulfill it using the dynamic data.\n //\n // segmentPath represents the parent path of subtree. It's a repeating pattern\n // of parallel route key and segment:\n //\n // [string, Segment, string, Segment, string, Segment, ...]\n //\n // Iterate through the path and finish any tasks that match this payload.\n let task = rootTask;\n for(let i = 0; i < segmentPath.length; i += 2){\n const parallelRouteKey = segmentPath[i];\n const segment = segmentPath[i + 1];\n const taskChildren = task.children;\n if (taskChildren !== null) {\n const taskChild = taskChildren.get(parallelRouteKey);\n if (taskChild !== undefined) {\n const taskSegment = taskChild.route[0];\n if ((0, _matchsegments.matchSegment)(segment, taskSegment)) {\n // Found a match for this task. Keep traversing down the task tree.\n task = taskChild;\n continue;\n }\n }\n }\n // We didn't find a child task that matches the server data. Exit. We won't\n // abort the task, though, because a different FlightDataPath may be able to\n // fulfill it (see loop in listenForDynamicRequest). We only abort tasks\n // once we've run out of data.\n return;\n }\n finishTaskUsingDynamicDataPayload(task, serverRouterState, dynamicData, dynamicHead);\n}\nfunction finishTaskUsingDynamicDataPayload(task, serverRouterState, dynamicData, dynamicHead) {\n // dynamicData may represent a larger subtree than the task. Before we can\n // finish the task, we need to line them up.\n const taskChildren = task.children;\n const taskNode = task.node;\n if (taskChildren === null) {\n // We've reached the leaf node of the pending task. The server data tree\n // lines up the pending Cache Node tree. We can now switch to the\n // normal algorithm.\n if (taskNode !== null) {\n finishPendingCacheNode(taskNode, task.route, serverRouterState, dynamicData, dynamicHead);\n // Null this out to indicate that the task is complete.\n task.node = null;\n }\n return;\n }\n // The server returned more data than we need to finish the task. Skip over\n // the extra segments until we reach the leaf task node.\n const serverChildren = serverRouterState[1];\n const dynamicDataChildren = dynamicData[1];\n for(const parallelRouteKey in serverRouterState){\n const serverRouterStateChild = serverChildren[parallelRouteKey];\n const dynamicDataChild = dynamicDataChildren[parallelRouteKey];\n const taskChild = taskChildren.get(parallelRouteKey);\n if (taskChild !== undefined) {\n const taskSegment = taskChild.route[0];\n if ((0, _matchsegments.matchSegment)(serverRouterStateChild[0], taskSegment) && dynamicDataChild !== null && dynamicDataChild !== undefined) {\n // Found a match for this task. Keep traversing down the task tree.\n return finishTaskUsingDynamicDataPayload(taskChild, serverRouterStateChild, dynamicDataChild, dynamicHead);\n }\n }\n // We didn't find a child task that matches the server data. We won't abort\n // the task, though, because a different FlightDataPath may be able to\n // fulfill it (see loop in listenForDynamicRequest). We only abort tasks\n // once we've run out of data.\n }\n}\nfunction createPendingCacheNode(routerState, prefetchData, prefetchHead, isPrefetchStale) {\n const routerStateChildren = routerState[1];\n const prefetchDataChildren = prefetchData !== null ? prefetchData[1] : null;\n const parallelRoutes = new Map();\n for(let parallelRouteKey in routerStateChildren){\n const routerStateChild = routerStateChildren[parallelRouteKey];\n const prefetchDataChild = prefetchDataChildren !== null ? prefetchDataChildren[parallelRouteKey] : null;\n const segmentChild = routerStateChild[0];\n const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n const newCacheNodeChild = createPendingCacheNode(routerStateChild, prefetchDataChild === undefined ? null : prefetchDataChild, prefetchHead, isPrefetchStale);\n const newSegmentMapChild = new Map();\n newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);\n parallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n }\n // The head is assigned to every leaf segment delivered by the server. Based\n // on corresponding logic in fill-lazy-items-till-leaf-with-head.ts\n const isLeafSegment = parallelRoutes.size === 0;\n const maybePrefetchRsc = prefetchData !== null ? prefetchData[2] : null;\n return {\n lazyData: null,\n parallelRoutes: parallelRoutes,\n prefetchRsc: // dynamic data to stream in.\n // TODO: This check is aruably too deep in the stack. Might be better to\n // pass an empty prefetchData Cache Seed object instead.\n !isPrefetchStale && maybePrefetchRsc !== undefined ? maybePrefetchRsc : null,\n prefetchHead: !isPrefetchStale && isLeafSegment ? prefetchHead : null,\n // Create a deferred promise. This will be fulfilled once the dynamic\n // response is received from the server.\n rsc: createDeferredRsc(),\n head: isLeafSegment ? createDeferredRsc() : null\n };\n}\nfunction finishPendingCacheNode(cacheNode, taskState, serverState, dynamicData, dynamicHead) {\n // Writes a dynamic response into an existing Cache Node tree. This does _not_\n // create a new tree, it updates the existing tree in-place. So it must follow\n // the Suspense rules of cache safety — it can resolve pending promises, but\n // it cannot overwrite existing data. It can add segments to the tree (because\n // a missing segment will cause the layout router to suspend).\n // but it cannot delete them.\n //\n // We must resolve every promise in the tree, or else it will suspend\n // indefinitely. If we did not receive data for a segment, we will resolve its\n // data promise to `null` to trigger a lazy fetch during render.\n const taskStateChildren = taskState[1];\n const serverStateChildren = serverState[1];\n const dataChildren = dynamicData[1];\n // The router state that we traverse the tree with (taskState) is the same one\n // that we used to construct the pending Cache Node tree. That way we're sure\n // to resolve all the pending promises.\n const parallelRoutes = cacheNode.parallelRoutes;\n for(let parallelRouteKey in taskStateChildren){\n const taskStateChild = taskStateChildren[parallelRouteKey];\n const serverStateChild = serverStateChildren[parallelRouteKey];\n const dataChild = dataChildren[parallelRouteKey];\n const segmentMapChild = parallelRoutes.get(parallelRouteKey);\n const taskSegmentChild = taskStateChild[0];\n const taskSegmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(taskSegmentChild);\n const cacheNodeChild = segmentMapChild !== undefined ? segmentMapChild.get(taskSegmentKeyChild) : undefined;\n if (cacheNodeChild !== undefined) {\n if (serverStateChild !== undefined && (0, _matchsegments.matchSegment)(taskSegmentChild, serverStateChild[0])) {\n if (dataChild !== undefined && dataChild !== null) {\n // This is the happy path. Recursively update all the children.\n finishPendingCacheNode(cacheNodeChild, taskStateChild, serverStateChild, dataChild, dynamicHead);\n } else {\n // The server never returned data for this segment. Trigger a lazy\n // fetch during render. This shouldn't happen because the Route Tree\n // and the Seed Data tree sent by the server should always be the same\n // shape when part of the same server response.\n abortPendingCacheNode(taskStateChild, cacheNodeChild, null);\n }\n } else {\n // The server never returned data for this segment. Trigger a lazy\n // fetch during render.\n abortPendingCacheNode(taskStateChild, cacheNodeChild, null);\n }\n } else {\n // The server response matches what was expected to receive, but there's\n // no matching Cache Node in the task tree. This is a bug in the\n // implementation because we should have created a node for every\n // segment in the tree that's associated with this task.\n }\n }\n // Use the dynamic data from the server to fulfill the deferred RSC promise\n // on the Cache Node.\n const rsc = cacheNode.rsc;\n const dynamicSegmentData = dynamicData[2];\n if (rsc === null) {\n // This is a lazy cache node. We can overwrite it. This is only safe\n // because we know that the LayoutRouter suspends if `rsc` is `null`.\n cacheNode.rsc = dynamicSegmentData;\n } else if (isDeferredRsc(rsc)) {\n // This is a deferred RSC promise. We can fulfill it with the data we just\n // received from the server. If it was already resolved by a different\n // navigation, then this does nothing because we can't overwrite data.\n rsc.resolve(dynamicSegmentData);\n } else {\n // This is not a deferred RSC promise, nor is it empty, so it must have\n // been populated by a different navigation. We must not overwrite it.\n }\n // Check if this is a leaf segment. If so, it will have a `head` property with\n // a pending promise that needs to be resolved with the dynamic head from\n // the server.\n const head = cacheNode.head;\n if (isDeferredRsc(head)) {\n head.resolve(dynamicHead);\n }\n}\nfunction abortTask(task, error) {\n const cacheNode = task.node;\n if (cacheNode === null) {\n // This indicates the task is already complete.\n return;\n }\n const taskChildren = task.children;\n if (taskChildren === null) {\n // Reached the leaf task node. This is the root of a pending cache\n // node tree.\n abortPendingCacheNode(task.route, cacheNode, error);\n } else {\n // This is an intermediate task node. Keep traversing until we reach a\n // task node with no children. That will be the root of the cache node tree\n // that needs to be resolved.\n for (const taskChild of taskChildren.values()){\n abortTask(taskChild, error);\n }\n }\n // Null this out to indicate that the task is complete.\n task.node = null;\n}\nfunction abortPendingCacheNode(routerState, cacheNode, error) {\n // For every pending segment in the tree, resolve its `rsc` promise to `null`\n // to trigger a lazy fetch during render.\n //\n // Or, if an error object is provided, it will error instead.\n const routerStateChildren = routerState[1];\n const parallelRoutes = cacheNode.parallelRoutes;\n for(let parallelRouteKey in routerStateChildren){\n const routerStateChild = routerStateChildren[parallelRouteKey];\n const segmentMapChild = parallelRoutes.get(parallelRouteKey);\n if (segmentMapChild === undefined) {\n continue;\n }\n const segmentChild = routerStateChild[0];\n const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n const cacheNodeChild = segmentMapChild.get(segmentKeyChild);\n if (cacheNodeChild !== undefined) {\n abortPendingCacheNode(routerStateChild, cacheNodeChild, error);\n } else {\n // This shouldn't happen because we're traversing the same tree that was\n // used to construct the cache nodes in the first place.\n }\n }\n const rsc = cacheNode.rsc;\n if (isDeferredRsc(rsc)) {\n if (error === null) {\n // This will trigger a lazy fetch during render.\n rsc.resolve(null);\n } else {\n // This will trigger an error during rendering.\n rsc.reject(error);\n }\n }\n // Check if this is a leaf segment. If so, it will have a `head` property with\n // a pending promise that needs to be resolved. If an error was provided, we\n // will not resolve it with an error, since this is rendered at the root of\n // the app. We want the segment to error, not the entire app.\n const head = cacheNode.head;\n if (isDeferredRsc(head)) {\n head.resolve(null);\n }\n}\nfunction updateCacheNodeOnPopstateRestoration(oldCacheNode, routerState) {\n // A popstate navigation reads data from the local cache. It does not issue\n // new network requests (unless the cache entries have been evicted). So, we\n // update the cache to drop the prefetch data for any segment whose dynamic\n // data was already received. This prevents an unnecessary flash back to PPR\n // state during a back/forward navigation.\n //\n // This function clones the entire cache node tree and sets the `prefetchRsc`\n // field to `null` to prevent it from being rendered. We can't mutate the node\n // in place because this is a concurrent data structure.\n const routerStateChildren = routerState[1];\n const oldParallelRoutes = oldCacheNode.parallelRoutes;\n const newParallelRoutes = new Map(oldParallelRoutes);\n for(let parallelRouteKey in routerStateChildren){\n const routerStateChild = routerStateChildren[parallelRouteKey];\n const segmentChild = routerStateChild[0];\n const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n const oldSegmentMapChild = oldParallelRoutes.get(parallelRouteKey);\n if (oldSegmentMapChild !== undefined) {\n const oldCacheNodeChild = oldSegmentMapChild.get(segmentKeyChild);\n if (oldCacheNodeChild !== undefined) {\n const newCacheNodeChild = updateCacheNodeOnPopstateRestoration(oldCacheNodeChild, routerStateChild);\n const newSegmentMapChild = new Map(oldSegmentMapChild);\n newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);\n newParallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n }\n }\n }\n // Only show prefetched data if the dynamic data is still pending.\n //\n // Tehnically, what we're actually checking is whether the dynamic network\n // response was received. But since it's a streaming response, this does not\n // mean that all the dynamic data has fully streamed in. It just means that\n // _some_ of the dynamic data was received. But as a heuristic, we assume that\n // the rest dynamic data will stream in quickly, so it's still better to skip\n // the prefetch state.\n const rsc = oldCacheNode.rsc;\n const shouldUsePrefetch = isDeferredRsc(rsc) && rsc.status === \"pending\";\n return {\n lazyData: null,\n rsc,\n head: oldCacheNode.head,\n prefetchHead: shouldUsePrefetch ? oldCacheNode.prefetchHead : null,\n prefetchRsc: shouldUsePrefetch ? oldCacheNode.prefetchRsc : null,\n // These are the cloned children we computed above\n parallelRoutes: newParallelRoutes\n };\n}\nconst DEFERRED = Symbol();\n// This type exists to distinguish a DeferredRsc from a Flight promise. It's a\n// compromise to avoid adding an extra field on every Cache Node, which would be\n// awkward because the pre-PPR parts of codebase would need to account for it,\n// too. We can remove it once type Cache Node type is more settled.\nfunction isDeferredRsc(value) {\n return value && value.tag === DEFERRED;\n}\nfunction createDeferredRsc() {\n let resolve;\n let reject;\n const pendingRsc = new Promise((res, rej)=>{\n resolve = res;\n reject = rej;\n });\n pendingRsc.status = \"pending\";\n pendingRsc.resolve = (value)=>{\n if (pendingRsc.status === \"pending\") {\n const fulfilledRsc = pendingRsc;\n fulfilledRsc.status = \"fulfilled\";\n fulfilledRsc.value = value;\n resolve(value);\n }\n };\n pendingRsc.reject = (error)=>{\n if (pendingRsc.status === \"pending\") {\n const rejectedRsc = pendingRsc;\n rejectedRsc.status = \"rejected\";\n rejectedRsc.reason = error;\n reject(error);\n }\n };\n pendingRsc.tag = DEFERRED;\n return pendingRsc;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ppr-navigations.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3Bwci1uYXZpZ2F0aW9ucy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUtOO0FBQ0EsU0FBU0ssUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVgsT0FBT0MsY0FBYyxDQUFDUyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFQLFNBQVM7SUFDYkcsNkJBQTZCO1FBQ3pCLE9BQU9BO0lBQ1g7SUFDQUMseUJBQXlCO1FBQ3JCLE9BQU9BO0lBQ1g7SUFDQUMsV0FBVztRQUNQLE9BQU9BO0lBQ1g7SUFDQUMsc0NBQXNDO1FBQ2xDLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLFdBQVdDLG1CQUFPQSxDQUFDLHlGQUE2QjtBQUN0RCxNQUFNQyxpQkFBaUJELG1CQUFPQSxDQUFDLDZGQUFtQjtBQUNsRCxNQUFNRSx3QkFBd0JGLG1CQUFPQSxDQUFDLDZIQUEyQjtBQUNqRSxTQUFTWCw0QkFBNEJjLFlBQVksRUFBRUMsY0FBYyxFQUFFQyxjQUFjLEVBQUVDLFlBQVksRUFBRUMsWUFBWSxFQUFFQyxlQUFlO0lBQzFILDBEQUEwRDtJQUMxRCxNQUFNQyx5QkFBeUJMLGNBQWMsQ0FBQyxFQUFFO0lBQ2hELE1BQU1NLHlCQUF5QkwsY0FBYyxDQUFDLEVBQUU7SUFDaEQsTUFBTU0sdUJBQXVCTCxZQUFZLENBQUMsRUFBRTtJQUM1QyxNQUFNTSxvQkFBb0JULGFBQWFVLGNBQWM7SUFDckQsMkVBQTJFO0lBQzNFLGdCQUFnQjtJQUNoQiwwRUFBMEU7SUFDMUUsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQzFFLHVFQUF1RTtJQUN2RSx5RUFBeUU7SUFDekUsd0VBQXdFO0lBQ3hFLCtCQUErQjtJQUMvQixNQUFNQyx5QkFBeUIsSUFBSUMsSUFBSUg7SUFDdkMsNEVBQTRFO0lBQzVFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLG1CQUFtQjtJQUNuQixJQUFJSSw2QkFBNkIsQ0FBQztJQUNsQyxJQUFJQyxlQUFlO0lBQ25CLElBQUksSUFBSUMsb0JBQW9CUix1QkFBdUI7UUFDL0MsTUFBTVMsc0JBQXNCVCxzQkFBc0IsQ0FBQ1EsaUJBQWlCO1FBQ3BFLE1BQU1FLHNCQUFzQlgsc0JBQXNCLENBQUNTLGlCQUFpQjtRQUNwRSxNQUFNRyxxQkFBcUJULGtCQUFrQmQsR0FBRyxDQUFDb0I7UUFDakQsTUFBTUksb0JBQW9CWCxvQkFBb0IsQ0FBQ08saUJBQWlCO1FBQ2hFLE1BQU1LLGtCQUFrQkosbUJBQW1CLENBQUMsRUFBRTtRQUM5QyxNQUFNSyxxQkFBcUIsQ0FBQyxHQUFHdEIsc0JBQXNCdUIsb0JBQW9CLEVBQUVGO1FBQzNFLE1BQU1HLGtCQUFrQk4sd0JBQXdCTyxZQUFZUCxtQkFBbUIsQ0FBQyxFQUFFLEdBQUdPO1FBQ3JGLE1BQU1DLG9CQUFvQlAsdUJBQXVCTSxZQUFZTixtQkFBbUJ2QixHQUFHLENBQUMwQixzQkFBc0JHO1FBQzFHLElBQUlFO1FBQ0osSUFBSU4sb0JBQW9CeEIsU0FBUytCLGdCQUFnQixFQUFFO1lBQy9DLHdFQUF3RTtZQUN4RSxZQUFZO1lBQ1pELFlBQVlFLGlCQUFpQloscUJBQXFCRyxzQkFBc0JLLFlBQVlMLG9CQUFvQixNQUFNZixjQUFjQztRQUNoSSxPQUFPLElBQUllLG9CQUFvQnhCLFNBQVNpQyxtQkFBbUIsRUFBRTtZQUN6RCwwREFBMEQ7WUFDMUQsRUFBRTtZQUNGLHlFQUF5RTtZQUN6RSx1RUFBdUU7WUFDdkUsc0VBQXNFO1lBQ3RFLG9FQUFvRTtZQUNwRSxXQUFXO1lBQ1gsSUFBSVosd0JBQXdCTyxXQUFXO2dCQUNuQyxzRUFBc0U7Z0JBQ3RFLG9FQUFvRTtnQkFDcEUsbUVBQW1FO2dCQUNuRUUsWUFBWUksZ0JBQWdCYjtZQUNoQyxPQUFPO2dCQUNILG9FQUFvRTtnQkFDcEVTLFlBQVlFLGlCQUFpQloscUJBQXFCRyxzQkFBc0JLLFlBQVlMLG9CQUFvQixNQUFNZixjQUFjQztZQUNoSTtRQUNKLE9BQU8sSUFBSWtCLG9CQUFvQkMsYUFBYSxDQUFDLEdBQUcxQixlQUFlaUMsWUFBWSxFQUFFWCxpQkFBaUJHLGtCQUFrQjtZQUM1RyxJQUFJRSxzQkFBc0JELGFBQWFQLHdCQUF3Qk8sV0FBVztnQkFDdEUscURBQXFEO2dCQUNyRCxJQUFJTCxzQkFBc0JLLGFBQWFMLHNCQUFzQixNQUFNO29CQUMvRCxtQ0FBbUM7b0JBQ25DTyxZQUFZeEMsNEJBQTRCdUMsbUJBQW1CUixxQkFBcUJELHFCQUFxQkcsbUJBQW1CZixjQUFjQztnQkFDMUksT0FBTztvQkFDSCxrRUFBa0U7b0JBQ2xFLGlFQUFpRTtvQkFDakUsa0VBQWtFO29CQUNsRSxrRUFBa0U7b0JBQ2xFLDRCQUE0QjtvQkFDNUJxQixZQUFZTSx3QkFBd0JoQjtnQkFDeEM7WUFDSixPQUFPO2dCQUNILGtFQUFrRTtnQkFDbEUsb0VBQW9FO2dCQUNwRSxpQkFBaUI7Z0JBQ2pCVSxZQUFZRSxpQkFBaUJaLHFCQUFxQkcsc0JBQXNCSyxZQUFZTCxvQkFBb0IsTUFBTWYsY0FBY0M7WUFDaEk7UUFDSixPQUFPO1lBQ0gsbURBQW1EO1lBQ25EcUIsWUFBWUUsaUJBQWlCWixxQkFBcUJHLHNCQUFzQkssWUFBWUwsb0JBQW9CLE1BQU1mLGNBQWNDO1FBQ2hJO1FBQ0EsSUFBSXFCLGNBQWMsTUFBTTtZQUNwQixxRUFBcUU7WUFDckUsSUFBSVosaUJBQWlCLE1BQU07Z0JBQ3ZCQSxlQUFlLElBQUlGO1lBQ3ZCO1lBQ0FFLGFBQWFtQixHQUFHLENBQUNsQixrQkFBa0JXO1lBQ25DLE1BQU1RLG9CQUFvQlIsVUFBVVMsSUFBSTtZQUN4QyxJQUFJRCxzQkFBc0IsTUFBTTtnQkFDNUIsTUFBTUUscUJBQXFCLElBQUl4QixJQUFJTTtnQkFDbkNrQixtQkFBbUJILEdBQUcsQ0FBQ1osb0JBQW9CYTtnQkFDM0N2Qix1QkFBdUJzQixHQUFHLENBQUNsQixrQkFBa0JxQjtZQUNqRDtZQUNBLG9FQUFvRTtZQUNwRSx1RUFBdUU7WUFDdkUsWUFBWTtZQUNadkIsMEJBQTBCLENBQUNFLGlCQUFpQixHQUFHVyxVQUFVVyxLQUFLO1FBQ2xFLE9BQU87WUFDSCxtRUFBbUU7WUFDbkV4QiwwQkFBMEIsQ0FBQ0UsaUJBQWlCLEdBQUdDO1FBQ25EO0lBQ0o7SUFDQSxJQUFJRixpQkFBaUIsTUFBTTtRQUN2Qiw2QkFBNkI7UUFDN0IsT0FBTztJQUNYO0lBQ0EsTUFBTXdCLGVBQWU7UUFDakJDLFVBQVU7UUFDVkMsS0FBS3hDLGFBQWF3QyxHQUFHO1FBQ3JCLDBFQUEwRTtRQUMxRSxxRUFBcUU7UUFDckUsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSwyRUFBMkU7UUFDM0UscUNBQXFDO1FBQ3JDQyxhQUFhekMsYUFBYXlDLFdBQVc7UUFDckNDLE1BQU0xQyxhQUFhMEMsSUFBSTtRQUN2QnRDLGNBQWNKLGFBQWFJLFlBQVk7UUFDdkMseUVBQXlFO1FBQ3pFTSxnQkFBZ0JDO0lBQ3BCO0lBQ0EsT0FBTztRQUNILGtFQUFrRTtRQUNsRTBCLE9BQU9NLGdDQUFnQ3pDLGdCQUFnQlc7UUFDdkRzQixNQUFNRztRQUNOTSxVQUFVOUI7SUFDZDtBQUNKO0FBQ0EsU0FBUzZCLGdDQUFnQ0UsZUFBZSxFQUFFQyxXQUFXO0lBQ2pFLE1BQU1DLFFBQVE7UUFDVkYsZUFBZSxDQUFDLEVBQUU7UUFDbEJDO0tBQ0g7SUFDRCw0RUFBNEU7SUFDNUUsMkVBQTJFO0lBQzNFLHVDQUF1QztJQUN2QyxJQUFJLEtBQUtELGlCQUFpQjtRQUN0QkUsS0FBSyxDQUFDLEVBQUUsR0FBR0YsZUFBZSxDQUFDLEVBQUU7SUFDakM7SUFDQSxJQUFJLEtBQUtBLGlCQUFpQjtRQUN0QkUsS0FBSyxDQUFDLEVBQUUsR0FBR0YsZUFBZSxDQUFDLEVBQUU7SUFDakM7SUFDQSxJQUFJLEtBQUtBLGlCQUFpQjtRQUN0QkUsS0FBSyxDQUFDLEVBQUUsR0FBR0YsZUFBZSxDQUFDLEVBQUU7SUFDakM7SUFDQSxPQUFPRTtBQUNYO0FBQ0EsU0FBU25CLGlCQUFpQm9CLFdBQVcsRUFBRTdDLFlBQVksRUFBRUMsWUFBWSxFQUFFQyxlQUFlO0lBQzlFLHNFQUFzRTtJQUN0RSxNQUFNNEMsbUJBQW1CQyx1QkFBdUJGLGFBQWE3QyxjQUFjQyxjQUFjQztJQUN6RixPQUFPO1FBQ0hnQyxPQUFPVztRQUNQYixNQUFNYztRQUNOTCxVQUFVO0lBQ2Q7QUFDSjtBQUNBLFNBQVNkLGdCQUFnQnFCLGlCQUFpQjtJQUN0QyxtRUFBbUU7SUFDbkUsMERBQTBEO0lBQzFELE9BQU87UUFDSGQsT0FBT2M7UUFDUGhCLE1BQU07UUFDTlMsVUFBVTtJQUNkO0FBQ0o7QUFDQSxTQUFTWix3QkFBd0JnQixXQUFXO0lBQ3hDLHdFQUF3RTtJQUN4RSw2RUFBNkU7SUFDN0Usd0RBQXdEO0lBQ3hELE1BQU1DLG1CQUFtQkMsdUJBQXVCRixhQUFhLE1BQU0sTUFBTTtJQUN6RSxPQUFPO1FBQ0hYLE9BQU9XO1FBQ1BiLE1BQU1jO1FBQ05MLFVBQVU7SUFDZDtBQUNKO0FBQ0EsU0FBU3pELHdCQUF3QmlFLElBQUksRUFBRUMsZUFBZTtJQUNsREEsZ0JBQWdCQyxJQUFJLENBQUMsQ0FBQ0M7UUFDbEIsTUFBTUMsYUFBYUQsUUFBUSxDQUFDLEVBQUU7UUFDOUIsS0FBSyxNQUFNRSxrQkFBa0JELFdBQVc7WUFDcEMsTUFBTUUsY0FBY0QsZUFBZUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUM3QyxNQUFNQyxvQkFBb0JILGNBQWMsQ0FBQ0EsZUFBZUksTUFBTSxHQUFHLEVBQUU7WUFDbkUsTUFBTUMsY0FBY0wsY0FBYyxDQUFDQSxlQUFlSSxNQUFNLEdBQUcsRUFBRTtZQUM3RCxNQUFNRSxjQUFjTixjQUFjLENBQUNBLGVBQWVJLE1BQU0sR0FBRyxFQUFFO1lBQzdELElBQUksT0FBT0gsZ0JBQWdCLFVBQVU7Z0JBQ2pDO1lBQ0o7WUFDQU0sZ0NBQWdDWixNQUFNTSxhQUFhRSxtQkFBbUJFLGFBQWFDO1FBQ3ZGO1FBQ0Esd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSw2REFBNkQ7UUFDN0QzRSxVQUFVZ0UsTUFBTTtJQUNwQixHQUFHLENBQUNhO1FBQ0EsMkNBQTJDO1FBQzNDN0UsVUFBVWdFLE1BQU1hO0lBQ3BCO0FBQ0o7QUFDQSxTQUFTRCxnQ0FBZ0NFLFFBQVEsRUFBRVIsV0FBVyxFQUFFRSxpQkFBaUIsRUFBRUUsV0FBVyxFQUFFQyxXQUFXO0lBQ3ZHLDRFQUE0RTtJQUM1RSwwRUFBMEU7SUFDMUUscUNBQXFDO0lBQ3JDLEVBQUU7SUFDRiw4RUFBOEU7SUFDOUUscUNBQXFDO0lBQ3JDLEVBQUU7SUFDRiw2REFBNkQ7SUFDN0QsRUFBRTtJQUNGLHlFQUF5RTtJQUN6RSxJQUFJWCxPQUFPYztJQUNYLElBQUksSUFBSUMsSUFBSSxHQUFHQSxJQUFJVCxZQUFZRyxNQUFNLEVBQUVNLEtBQUssRUFBRTtRQUMxQyxNQUFNcEQsbUJBQW1CMkMsV0FBVyxDQUFDUyxFQUFFO1FBQ3ZDLE1BQU1DLFVBQVVWLFdBQVcsQ0FBQ1MsSUFBSSxFQUFFO1FBQ2xDLE1BQU1yRCxlQUFlc0MsS0FBS1IsUUFBUTtRQUNsQyxJQUFJOUIsaUJBQWlCLE1BQU07WUFDdkIsTUFBTVksWUFBWVosYUFBYW5CLEdBQUcsQ0FBQ29CO1lBQ25DLElBQUlXLGNBQWNGLFdBQVc7Z0JBQ3pCLE1BQU02QyxjQUFjM0MsVUFBVVcsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxHQUFHdkMsZUFBZWlDLFlBQVksRUFBRXFDLFNBQVNDLGNBQWM7b0JBQ3hELG1FQUFtRTtvQkFDbkVqQixPQUFPMUI7b0JBQ1A7Z0JBQ0o7WUFDSjtRQUNKO1FBQ0EsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSx3RUFBd0U7UUFDeEUsOEJBQThCO1FBQzlCO0lBQ0o7SUFDQTRDLGtDQUFrQ2xCLE1BQU1RLG1CQUFtQkUsYUFBYUM7QUFDNUU7QUFDQSxTQUFTTyxrQ0FBa0NsQixJQUFJLEVBQUVRLGlCQUFpQixFQUFFRSxXQUFXLEVBQUVDLFdBQVc7SUFDeEYsMEVBQTBFO0lBQzFFLDRDQUE0QztJQUM1QyxNQUFNakQsZUFBZXNDLEtBQUtSLFFBQVE7SUFDbEMsTUFBTTJCLFdBQVduQixLQUFLakIsSUFBSTtJQUMxQixJQUFJckIsaUJBQWlCLE1BQU07UUFDdkIsd0VBQXdFO1FBQ3hFLGlFQUFpRTtRQUNqRSxvQkFBb0I7UUFDcEIsSUFBSXlELGFBQWEsTUFBTTtZQUNuQkMsdUJBQXVCRCxVQUFVbkIsS0FBS2YsS0FBSyxFQUFFdUIsbUJBQW1CRSxhQUFhQztZQUM3RSx1REFBdUQ7WUFDdkRYLEtBQUtqQixJQUFJLEdBQUc7UUFDaEI7UUFDQTtJQUNKO0lBQ0EsMkVBQTJFO0lBQzNFLHdEQUF3RDtJQUN4RCxNQUFNc0MsaUJBQWlCYixpQkFBaUIsQ0FBQyxFQUFFO0lBQzNDLE1BQU1jLHNCQUFzQlosV0FBVyxDQUFDLEVBQUU7SUFDMUMsSUFBSSxNQUFNL0Msb0JBQW9CNkMsa0JBQWtCO1FBQzVDLE1BQU1lLHlCQUF5QkYsY0FBYyxDQUFDMUQsaUJBQWlCO1FBQy9ELE1BQU02RCxtQkFBbUJGLG1CQUFtQixDQUFDM0QsaUJBQWlCO1FBQzlELE1BQU1XLFlBQVlaLGFBQWFuQixHQUFHLENBQUNvQjtRQUNuQyxJQUFJVyxjQUFjRixXQUFXO1lBQ3pCLE1BQU02QyxjQUFjM0MsVUFBVVcsS0FBSyxDQUFDLEVBQUU7WUFDdEMsSUFBSSxDQUFDLEdBQUd2QyxlQUFlaUMsWUFBWSxFQUFFNEMsc0JBQXNCLENBQUMsRUFBRSxFQUFFTixnQkFBZ0JPLHFCQUFxQixRQUFRQSxxQkFBcUJwRCxXQUFXO2dCQUN6SSxtRUFBbUU7Z0JBQ25FLE9BQU84QyxrQ0FBa0M1QyxXQUFXaUQsd0JBQXdCQyxrQkFBa0JiO1lBQ2xHO1FBQ0o7SUFDSiwyRUFBMkU7SUFDM0Usc0VBQXNFO0lBQ3RFLHdFQUF3RTtJQUN4RSw4QkFBOEI7SUFDOUI7QUFDSjtBQUNBLFNBQVNiLHVCQUF1QkYsV0FBVyxFQUFFN0MsWUFBWSxFQUFFQyxZQUFZLEVBQUVDLGVBQWU7SUFDcEYsTUFBTXdFLHNCQUFzQjdCLFdBQVcsQ0FBQyxFQUFFO0lBQzFDLE1BQU14Qyx1QkFBdUJMLGlCQUFpQixPQUFPQSxZQUFZLENBQUMsRUFBRSxHQUFHO0lBQ3ZFLE1BQU1PLGlCQUFpQixJQUFJRTtJQUMzQixJQUFJLElBQUlHLG9CQUFvQjhELG9CQUFvQjtRQUM1QyxNQUFNQyxtQkFBbUJELG1CQUFtQixDQUFDOUQsaUJBQWlCO1FBQzlELE1BQU1JLG9CQUFvQlgseUJBQXlCLE9BQU9BLG9CQUFvQixDQUFDTyxpQkFBaUIsR0FBRztRQUNuRyxNQUFNZ0UsZUFBZUQsZ0JBQWdCLENBQUMsRUFBRTtRQUN4QyxNQUFNRSxrQkFBa0IsQ0FBQyxHQUFHakYsc0JBQXNCdUIsb0JBQW9CLEVBQUV5RDtRQUN4RSxNQUFNN0Msb0JBQW9CZ0IsdUJBQXVCNEIsa0JBQWtCM0Qsc0JBQXNCSyxZQUFZLE9BQU9MLG1CQUFtQmYsY0FBY0M7UUFDN0ksTUFBTStCLHFCQUFxQixJQUFJeEI7UUFDL0J3QixtQkFBbUJILEdBQUcsQ0FBQytDLGlCQUFpQjlDO1FBQ3hDeEIsZUFBZXVCLEdBQUcsQ0FBQ2xCLGtCQUFrQnFCO0lBQ3pDO0lBQ0EsNEVBQTRFO0lBQzVFLG1FQUFtRTtJQUNuRSxNQUFNNkMsZ0JBQWdCdkUsZUFBZXdFLElBQUksS0FBSztJQUM5QyxNQUFNQyxtQkFBbUJoRixpQkFBaUIsT0FBT0EsWUFBWSxDQUFDLEVBQUUsR0FBRztJQUNuRSxPQUFPO1FBQ0hvQyxVQUFVO1FBQ1Y3QixnQkFBZ0JBO1FBQ2hCK0IsYUFDQSw2QkFBNkI7UUFDN0Isd0VBQXdFO1FBQ3hFLHdEQUF3RDtRQUN4RCxDQUFDcEMsbUJBQW1COEUscUJBQXFCM0QsWUFBWTJELG1CQUFtQjtRQUN4RS9FLGNBQWMsQ0FBQ0MsbUJBQW1CNEUsZ0JBQWdCN0UsZUFBZTtRQUNqRSxxRUFBcUU7UUFDckUsd0NBQXdDO1FBQ3hDb0MsS0FBSzRDO1FBQ0wxQyxNQUFNdUMsZ0JBQWdCRyxzQkFBc0I7SUFDaEQ7QUFDSjtBQUNBLFNBQVNaLHVCQUF1QmEsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLFdBQVcsRUFBRXpCLFdBQVcsRUFBRUMsV0FBVztJQUN2Riw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSw4RUFBOEU7SUFDOUUsOERBQThEO0lBQzlELDZCQUE2QjtJQUM3QixFQUFFO0lBQ0YscUVBQXFFO0lBQ3JFLDhFQUE4RTtJQUM5RSxnRUFBZ0U7SUFDaEUsTUFBTXlCLG9CQUFvQkYsU0FBUyxDQUFDLEVBQUU7SUFDdEMsTUFBTUcsc0JBQXNCRixXQUFXLENBQUMsRUFBRTtJQUMxQyxNQUFNRyxlQUFlNUIsV0FBVyxDQUFDLEVBQUU7SUFDbkMsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSx1Q0FBdUM7SUFDdkMsTUFBTXBELGlCQUFpQjJFLFVBQVUzRSxjQUFjO0lBQy9DLElBQUksSUFBSUssb0JBQW9CeUUsa0JBQWtCO1FBQzFDLE1BQU1HLGlCQUFpQkgsaUJBQWlCLENBQUN6RSxpQkFBaUI7UUFDMUQsTUFBTTZFLG1CQUFtQkgsbUJBQW1CLENBQUMxRSxpQkFBaUI7UUFDOUQsTUFBTThFLFlBQVlILFlBQVksQ0FBQzNFLGlCQUFpQjtRQUNoRCxNQUFNK0Usa0JBQWtCcEYsZUFBZWYsR0FBRyxDQUFDb0I7UUFDM0MsTUFBTWdGLG1CQUFtQkosY0FBYyxDQUFDLEVBQUU7UUFDMUMsTUFBTUssc0JBQXNCLENBQUMsR0FBR2pHLHNCQUFzQnVCLG9CQUFvQixFQUFFeUU7UUFDNUUsTUFBTUUsaUJBQWlCSCxvQkFBb0J0RSxZQUFZc0UsZ0JBQWdCbkcsR0FBRyxDQUFDcUcsdUJBQXVCeEU7UUFDbEcsSUFBSXlFLG1CQUFtQnpFLFdBQVc7WUFDOUIsSUFBSW9FLHFCQUFxQnBFLGFBQWEsQ0FBQyxHQUFHMUIsZUFBZWlDLFlBQVksRUFBRWdFLGtCQUFrQkgsZ0JBQWdCLENBQUMsRUFBRSxHQUFHO2dCQUMzRyxJQUFJQyxjQUFjckUsYUFBYXFFLGNBQWMsTUFBTTtvQkFDL0MsK0RBQStEO29CQUMvRHJCLHVCQUF1QnlCLGdCQUFnQk4sZ0JBQWdCQyxrQkFBa0JDLFdBQVc5QjtnQkFDeEYsT0FBTztvQkFDSCxrRUFBa0U7b0JBQ2xFLG9FQUFvRTtvQkFDcEUsc0VBQXNFO29CQUN0RSwrQ0FBK0M7b0JBQy9DbUMsc0JBQXNCUCxnQkFBZ0JNLGdCQUFnQjtnQkFDMUQ7WUFDSixPQUFPO2dCQUNILGtFQUFrRTtnQkFDbEUsdUJBQXVCO2dCQUN2QkMsc0JBQXNCUCxnQkFBZ0JNLGdCQUFnQjtZQUMxRDtRQUNKLE9BQU87UUFDUCx3RUFBd0U7UUFDeEUsZ0VBQWdFO1FBQ2hFLGlFQUFpRTtRQUNqRSx3REFBd0Q7UUFDeEQ7SUFDSjtJQUNBLDJFQUEyRTtJQUMzRSxxQkFBcUI7SUFDckIsTUFBTXpELE1BQU02QyxVQUFVN0MsR0FBRztJQUN6QixNQUFNMkQscUJBQXFCckMsV0FBVyxDQUFDLEVBQUU7SUFDekMsSUFBSXRCLFFBQVEsTUFBTTtRQUNkLG9FQUFvRTtRQUNwRSxxRUFBcUU7UUFDckU2QyxVQUFVN0MsR0FBRyxHQUFHMkQ7SUFDcEIsT0FBTyxJQUFJQyxjQUFjNUQsTUFBTTtRQUMzQiwwRUFBMEU7UUFDMUUsc0VBQXNFO1FBQ3RFLHNFQUFzRTtRQUN0RUEsSUFBSTZELE9BQU8sQ0FBQ0Y7SUFDaEIsT0FBTztJQUNQLHVFQUF1RTtJQUN2RSxzRUFBc0U7SUFDdEU7SUFDQSw4RUFBOEU7SUFDOUUseUVBQXlFO0lBQ3pFLGNBQWM7SUFDZCxNQUFNekQsT0FBTzJDLFVBQVUzQyxJQUFJO0lBQzNCLElBQUkwRCxjQUFjMUQsT0FBTztRQUNyQkEsS0FBSzJELE9BQU8sQ0FBQ3RDO0lBQ2pCO0FBQ0o7QUFDQSxTQUFTM0UsVUFBVWdFLElBQUksRUFBRWEsS0FBSztJQUMxQixNQUFNb0IsWUFBWWpDLEtBQUtqQixJQUFJO0lBQzNCLElBQUlrRCxjQUFjLE1BQU07UUFDcEIsK0NBQStDO1FBQy9DO0lBQ0o7SUFDQSxNQUFNdkUsZUFBZXNDLEtBQUtSLFFBQVE7SUFDbEMsSUFBSTlCLGlCQUFpQixNQUFNO1FBQ3ZCLGtFQUFrRTtRQUNsRSxhQUFhO1FBQ2JvRixzQkFBc0I5QyxLQUFLZixLQUFLLEVBQUVnRCxXQUFXcEI7SUFDakQsT0FBTztRQUNILHNFQUFzRTtRQUN0RSwyRUFBMkU7UUFDM0UsNkJBQTZCO1FBQzdCLEtBQUssTUFBTXZDLGFBQWFaLGFBQWF3RixNQUFNLEdBQUc7WUFDMUNsSCxVQUFVc0MsV0FBV3VDO1FBQ3pCO0lBQ0o7SUFDQSx1REFBdUQ7SUFDdkRiLEtBQUtqQixJQUFJLEdBQUc7QUFDaEI7QUFDQSxTQUFTK0Qsc0JBQXNCbEQsV0FBVyxFQUFFcUMsU0FBUyxFQUFFcEIsS0FBSztJQUN4RCw2RUFBNkU7SUFDN0UseUNBQXlDO0lBQ3pDLEVBQUU7SUFDRiw2REFBNkQ7SUFDN0QsTUFBTVksc0JBQXNCN0IsV0FBVyxDQUFDLEVBQUU7SUFDMUMsTUFBTXRDLGlCQUFpQjJFLFVBQVUzRSxjQUFjO0lBQy9DLElBQUksSUFBSUssb0JBQW9COEQsb0JBQW9CO1FBQzVDLE1BQU1DLG1CQUFtQkQsbUJBQW1CLENBQUM5RCxpQkFBaUI7UUFDOUQsTUFBTStFLGtCQUFrQnBGLGVBQWVmLEdBQUcsQ0FBQ29CO1FBQzNDLElBQUkrRSxvQkFBb0J0RSxXQUFXO1lBQy9CO1FBQ0o7UUFDQSxNQUFNdUQsZUFBZUQsZ0JBQWdCLENBQUMsRUFBRTtRQUN4QyxNQUFNRSxrQkFBa0IsQ0FBQyxHQUFHakYsc0JBQXNCdUIsb0JBQW9CLEVBQUV5RDtRQUN4RSxNQUFNa0IsaUJBQWlCSCxnQkFBZ0JuRyxHQUFHLENBQUNxRjtRQUMzQyxJQUFJaUIsbUJBQW1CekUsV0FBVztZQUM5QjBFLHNCQUFzQnBCLGtCQUFrQm1CLGdCQUFnQmhDO1FBQzVELE9BQU87UUFDUCx3RUFBd0U7UUFDeEUsd0RBQXdEO1FBQ3hEO0lBQ0o7SUFDQSxNQUFNekIsTUFBTTZDLFVBQVU3QyxHQUFHO0lBQ3pCLElBQUk0RCxjQUFjNUQsTUFBTTtRQUNwQixJQUFJeUIsVUFBVSxNQUFNO1lBQ2hCLGdEQUFnRDtZQUNoRHpCLElBQUk2RCxPQUFPLENBQUM7UUFDaEIsT0FBTztZQUNILCtDQUErQztZQUMvQzdELElBQUkrRCxNQUFNLENBQUN0QztRQUNmO0lBQ0o7SUFDQSw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSw2REFBNkQ7SUFDN0QsTUFBTXZCLE9BQU8yQyxVQUFVM0MsSUFBSTtJQUMzQixJQUFJMEQsY0FBYzFELE9BQU87UUFDckJBLEtBQUsyRCxPQUFPLENBQUM7SUFDakI7QUFDSjtBQUNBLFNBQVNoSCxxQ0FBcUNXLFlBQVksRUFBRWdELFdBQVc7SUFDbkUsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLDBDQUEwQztJQUMxQyxFQUFFO0lBQ0YsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSx3REFBd0Q7SUFDeEQsTUFBTTZCLHNCQUFzQjdCLFdBQVcsQ0FBQyxFQUFFO0lBQzFDLE1BQU12QyxvQkFBb0JULGFBQWFVLGNBQWM7SUFDckQsTUFBTThGLG9CQUFvQixJQUFJNUYsSUFBSUg7SUFDbEMsSUFBSSxJQUFJTSxvQkFBb0I4RCxvQkFBb0I7UUFDNUMsTUFBTUMsbUJBQW1CRCxtQkFBbUIsQ0FBQzlELGlCQUFpQjtRQUM5RCxNQUFNZ0UsZUFBZUQsZ0JBQWdCLENBQUMsRUFBRTtRQUN4QyxNQUFNRSxrQkFBa0IsQ0FBQyxHQUFHakYsc0JBQXNCdUIsb0JBQW9CLEVBQUV5RDtRQUN4RSxNQUFNN0QscUJBQXFCVCxrQkFBa0JkLEdBQUcsQ0FBQ29CO1FBQ2pELElBQUlHLHVCQUF1Qk0sV0FBVztZQUNsQyxNQUFNQyxvQkFBb0JQLG1CQUFtQnZCLEdBQUcsQ0FBQ3FGO1lBQ2pELElBQUl2RCxzQkFBc0JELFdBQVc7Z0JBQ2pDLE1BQU1VLG9CQUFvQjdDLHFDQUFxQ29DLG1CQUFtQnFEO2dCQUNsRixNQUFNMUMscUJBQXFCLElBQUl4QixJQUFJTTtnQkFDbkNrQixtQkFBbUJILEdBQUcsQ0FBQytDLGlCQUFpQjlDO2dCQUN4Q3NFLGtCQUFrQnZFLEdBQUcsQ0FBQ2xCLGtCQUFrQnFCO1lBQzVDO1FBQ0o7SUFDSjtJQUNBLGtFQUFrRTtJQUNsRSxFQUFFO0lBQ0YsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSxzQkFBc0I7SUFDdEIsTUFBTUksTUFBTXhDLGFBQWF3QyxHQUFHO0lBQzVCLE1BQU1pRSxvQkFBb0JMLGNBQWM1RCxRQUFRQSxJQUFJa0UsTUFBTSxLQUFLO0lBQy9ELE9BQU87UUFDSG5FLFVBQVU7UUFDVkM7UUFDQUUsTUFBTTFDLGFBQWEwQyxJQUFJO1FBQ3ZCdEMsY0FBY3FHLG9CQUFvQnpHLGFBQWFJLFlBQVksR0FBRztRQUM5RHFDLGFBQWFnRSxvQkFBb0J6RyxhQUFheUMsV0FBVyxHQUFHO1FBQzVELGtEQUFrRDtRQUNsRC9CLGdCQUFnQjhGO0lBQ3BCO0FBQ0o7QUFDQSxNQUFNRyxXQUFXQztBQUNqQiw4RUFBOEU7QUFDOUUsZ0ZBQWdGO0FBQ2hGLDhFQUE4RTtBQUM5RSxtRUFBbUU7QUFDbkUsU0FBU1IsY0FBY3BILEtBQUs7SUFDeEIsT0FBT0EsU0FBU0EsTUFBTTZILEdBQUcsS0FBS0Y7QUFDbEM7QUFDQSxTQUFTdkI7SUFDTCxJQUFJaUI7SUFDSixJQUFJRTtJQUNKLE1BQU1PLGFBQWEsSUFBSUMsUUFBUSxDQUFDQyxLQUFLQztRQUNqQ1osVUFBVVc7UUFDVlQsU0FBU1U7SUFDYjtJQUNBSCxXQUFXSixNQUFNLEdBQUc7SUFDcEJJLFdBQVdULE9BQU8sR0FBRyxDQUFDckg7UUFDbEIsSUFBSThILFdBQVdKLE1BQU0sS0FBSyxXQUFXO1lBQ2pDLE1BQU1RLGVBQWVKO1lBQ3JCSSxhQUFhUixNQUFNLEdBQUc7WUFDdEJRLGFBQWFsSSxLQUFLLEdBQUdBO1lBQ3JCcUgsUUFBUXJIO1FBQ1o7SUFDSjtJQUNBOEgsV0FBV1AsTUFBTSxHQUFHLENBQUN0QztRQUNqQixJQUFJNkMsV0FBV0osTUFBTSxLQUFLLFdBQVc7WUFDakMsTUFBTVMsY0FBY0w7WUFDcEJLLFlBQVlULE1BQU0sR0FBRztZQUNyQlMsWUFBWUMsTUFBTSxHQUFHbkQ7WUFDckJzQyxPQUFPdEM7UUFDWDtJQUNKO0lBQ0E2QyxXQUFXRCxHQUFHLEdBQUdGO0lBQ2pCLE9BQU9HO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBTy9ILFFBQVFzSSxPQUFPLEtBQUssY0FBZSxPQUFPdEksUUFBUXNJLE9BQU8sS0FBSyxZQUFZdEksUUFBUXNJLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3RJLFFBQVFzSSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLekksT0FBT0MsY0FBYyxDQUFDQyxRQUFRc0ksT0FBTyxFQUFFLGNBQWM7UUFBRXJJLE9BQU87SUFBSztJQUNuRUgsT0FBTzBJLE1BQU0sQ0FBQ3hJLFFBQVFzSSxPQUFPLEVBQUV0STtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRc0ksT0FBTztBQUNsQyxFQUVBLDJDQUEyQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3Bwci1uYXZpZ2F0aW9ucy5qcz82ODViIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgdXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uOiBudWxsLFxuICAgIGxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0OiBudWxsLFxuICAgIGFib3J0VGFzazogbnVsbCxcbiAgICB1cGRhdGVDYWNoZU5vZGVPblBvcHN0YXRlUmVzdG9yYXRpb246IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgdXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbjtcbiAgICB9LFxuICAgIGxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0O1xuICAgIH0sXG4gICAgYWJvcnRUYXNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFib3J0VGFzaztcbiAgICB9LFxuICAgIHVwZGF0ZUNhY2hlTm9kZU9uUG9wc3RhdGVSZXN0b3JhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVDYWNoZU5vZGVPblBvcHN0YXRlUmVzdG9yYXRpb247XG4gICAgfVxufSk7XG5jb25zdCBfc2VnbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zaGFyZWQvbGliL3NlZ21lbnRcIik7XG5jb25zdCBfbWF0Y2hzZWdtZW50cyA9IHJlcXVpcmUoXCIuLi9tYXRjaC1zZWdtZW50c1wiKTtcbmNvbnN0IF9jcmVhdGVyb3V0ZXJjYWNoZWtleSA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5XCIpO1xuZnVuY3Rpb24gdXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uKG9sZENhY2hlTm9kZSwgb2xkUm91dGVyU3RhdGUsIG5ld1JvdXRlclN0YXRlLCBwcmVmZXRjaERhdGEsIHByZWZldGNoSGVhZCwgaXNQcmVmZXRjaFN0YWxlKSB7XG4gICAgLy8gRGlmZiB0aGUgb2xkIGFuZCBuZXcgdHJlZXMgdG8gcmV1c2UgdGhlIHNoYXJlZCBsYXlvdXRzLlxuICAgIGNvbnN0IG9sZFJvdXRlclN0YXRlQ2hpbGRyZW4gPSBvbGRSb3V0ZXJTdGF0ZVsxXTtcbiAgICBjb25zdCBuZXdSb3V0ZXJTdGF0ZUNoaWxkcmVuID0gbmV3Um91dGVyU3RhdGVbMV07XG4gICAgY29uc3QgcHJlZmV0Y2hEYXRhQ2hpbGRyZW4gPSBwcmVmZXRjaERhdGFbMV07XG4gICAgY29uc3Qgb2xkUGFyYWxsZWxSb3V0ZXMgPSBvbGRDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXM7XG4gICAgLy8gQ2xvbmUgdGhlIGN1cnJlbnQgc2V0IG9mIHNlZ21lbnQgY2hpbGRyZW4sIGV2ZW4gaWYgdGhleSBhcmVuJ3QgYWN0aXZlIGluXG4gICAgLy8gdGhlIG5ldyB0cmVlLlxuICAgIC8vIFRPRE86IFdlIGN1cnJlbnRseSByZXRhaW4gYWxsIHRoZSBpbmFjdGl2ZSBzZWdtZW50cyBpbmRlZmluaXRlbHksIHVudGlsXG4gICAgLy8gdGhlcmUncyBhbiBleHBsaWNpdCByZWZyZXNoLCBvciBhIHBhcmVudCBsYXlvdXQgaXMgbGF6aWx5IHJlZnJlc2hlZC4gV2VcbiAgICAvLyByZWx5IG9uIHRoaXMgZm9yIHBvcHN0YXRlIG5hdmlnYXRpb25zLCB3aGljaCB1cGRhdGUgdGhlIFJvdXRlciBTdGF0ZSBUcmVlXG4gICAgLy8gYnV0IGRvIG5vdCBlYWdlcmx5IHBlcmZvcm0gYSBkYXRhIGZldGNoLCBiZWNhdXNlIHRoZXkgZXhwZWN0IHRoZSBzZWdtZW50XG4gICAgLy8gZGF0YSB0byBhbHJlYWR5IGJlIGluIHRoZSBDYWNoZSBOb2RlIHRyZWUuIEZvciBoaWdobHkgc3RhdGljIHNpdGVzIHRoYXRcbiAgICAvLyBhcmUgbW9zdGx5IHJlYWQtb25seSwgdGhpcyBtYXkgaGFwcGVuIG9ubHkgcmFyZWx5LCBjYXVzaW5nIG1lbW9yeSB0b1xuICAgIC8vIGxlYWsuIFdlIHNob3VsZCBmaWd1cmUgb3V0IGEgYmV0dGVyIG1vZGVsIGZvciB0aGUgbGlmZXRpbWUgb2YgaW5hY3RpdmVcbiAgICAvLyBzZWdtZW50cywgc28gd2UgY2FuIG1haW50YWluIGluc3RhbnQgYmFjay9mb3J3YXJkIG5hdmlnYXRpb25zIHdpdGhvdXRcbiAgICAvLyBsZWFraW5nIG1lbW9yeSBpbmRlZmluaXRlbHkuXG4gICAgY29uc3QgcHJlZmV0Y2hQYXJhbGxlbFJvdXRlcyA9IG5ldyBNYXAob2xkUGFyYWxsZWxSb3V0ZXMpO1xuICAgIC8vIEFzIHdlIGRpZmYgdGhlIHRyZWVzLCB3ZSBtYXkgc29tZXRpbWVzIG1vZGlmeSAoY29weS1vbi13cml0ZSwgbm90IG11dGF0ZSlcbiAgICAvLyB0aGUgUm91dGUgVHJlZSB0aGF0IHdhcyByZXR1cm5lZCBieSB0aGUgc2VydmVyIOKAlCBmb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2VcbiAgICAvLyBvZiBkZWZhdWx0IHBhcmFsbGVsIHJvdXRlcywgd2UgcHJlc2VydmUgdGhlIGN1cnJlbnRseSBhY3RpdmUgc2VnbWVudC4gVG9cbiAgICAvLyBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgdHJlZSwgd2UgY2xvbmUgdGhlIHJvdXRlciBzdGF0ZSBjaGlsZHJlbiBhbG9uZ1xuICAgIC8vIHRoZSByZXR1cm4gcGF0aC5cbiAgICBsZXQgcGF0Y2hlZFJvdXRlclN0YXRlQ2hpbGRyZW4gPSB7fTtcbiAgICBsZXQgdGFza0NoaWxkcmVuID0gbnVsbDtcbiAgICBmb3IobGV0IHBhcmFsbGVsUm91dGVLZXkgaW4gbmV3Um91dGVyU3RhdGVDaGlsZHJlbil7XG4gICAgICAgIGNvbnN0IG5ld1JvdXRlclN0YXRlQ2hpbGQgPSBuZXdSb3V0ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldO1xuICAgICAgICBjb25zdCBvbGRSb3V0ZXJTdGF0ZUNoaWxkID0gb2xkUm91dGVyU3RhdGVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XTtcbiAgICAgICAgY29uc3Qgb2xkU2VnbWVudE1hcENoaWxkID0gb2xkUGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpO1xuICAgICAgICBjb25zdCBwcmVmZXRjaERhdGFDaGlsZCA9IHByZWZldGNoRGF0YUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldO1xuICAgICAgICBjb25zdCBuZXdTZWdtZW50Q2hpbGQgPSBuZXdSb3V0ZXJTdGF0ZUNoaWxkWzBdO1xuICAgICAgICBjb25zdCBuZXdTZWdtZW50S2V5Q2hpbGQgPSAoMCwgX2NyZWF0ZXJvdXRlcmNhY2hla2V5LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShuZXdTZWdtZW50Q2hpbGQpO1xuICAgICAgICBjb25zdCBvbGRTZWdtZW50Q2hpbGQgPSBvbGRSb3V0ZXJTdGF0ZUNoaWxkICE9PSB1bmRlZmluZWQgPyBvbGRSb3V0ZXJTdGF0ZUNoaWxkWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBvbGRDYWNoZU5vZGVDaGlsZCA9IG9sZFNlZ21lbnRNYXBDaGlsZCAhPT0gdW5kZWZpbmVkID8gb2xkU2VnbWVudE1hcENoaWxkLmdldChuZXdTZWdtZW50S2V5Q2hpbGQpIDogdW5kZWZpbmVkO1xuICAgICAgICBsZXQgdGFza0NoaWxkO1xuICAgICAgICBpZiAobmV3U2VnbWVudENoaWxkID09PSBfc2VnbWVudC5QQUdFX1NFR01FTlRfS0VZKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgbGVhZiBzZWdtZW50IOKAlCBhIHBhZ2UsIG5vdCBhIHNoYXJlZCBsYXlvdXQuIFdlIGFsd2F5cyBhcHBseVxuICAgICAgICAgICAgLy8gaXRzIGRhdGEuXG4gICAgICAgICAgICB0YXNrQ2hpbGQgPSBzcGF3blBlbmRpbmdUYXNrKG5ld1JvdXRlclN0YXRlQ2hpbGQsIHByZWZldGNoRGF0YUNoaWxkICE9PSB1bmRlZmluZWQgPyBwcmVmZXRjaERhdGFDaGlsZCA6IG51bGwsIHByZWZldGNoSGVhZCwgaXNQcmVmZXRjaFN0YWxlKTtcbiAgICAgICAgfSBlbHNlIGlmIChuZXdTZWdtZW50Q2hpbGQgPT09IF9zZWdtZW50LkRFRkFVTFRfU0VHTUVOVF9LRVkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYW5vdGhlciBraW5kIG9mIGxlYWYgc2VnbWVudCDigJQgYSBkZWZhdWx0IHJvdXRlLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIERlZmF1bHQgcm91dGVzIGhhdmUgc3BlY2lhbCBiZWhhdmlvci4gV2hlbiB0aGVyZSdzIG5vIG1hdGNoaW5nIHNlZ21lbnRcbiAgICAgICAgICAgIC8vIGZvciBhIHBhcmFsbGVsIHJvdXRlLCBOZXh0LmpzIHByZXNlcnZlcyB0aGUgY3VycmVudGx5IGFjdGl2ZSBzZWdtZW50XG4gICAgICAgICAgICAvLyBkdXJpbmcgYSBjbGllbnQgbmF2aWdhdGlvbiDigJQgYnV0IG5vdCBmb3IgaW5pdGlhbCByZW5kZXIuIFRoZSBzZXJ2ZXJcbiAgICAgICAgICAgIC8vIGxlYXZlcyBpdCB0byB0aGUgY2xpZW50IHRvIGFjY291bnQgZm9yIHRoaXMuIFNvIHdlIG5lZWQgdG8gaGFuZGxlXG4gICAgICAgICAgICAvLyBpdCBoZXJlLlxuICAgICAgICAgICAgaWYgKG9sZFJvdXRlclN0YXRlQ2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIFJldXNlIHRoZSBleGlzdGluZyBSb3V0ZXIgU3RhdGUgZm9yIHRoaXMgc2VnbWVudC4gV2Ugc3Bhd24gYSBcInRhc2tcIlxuICAgICAgICAgICAgICAgIC8vIGp1c3QgdG8ga2VlcCB0cmFjayBvZiB0aGUgdXBkYXRlZCByb3V0ZXIgc3RhdGU7IHVubGlrZSBtb3N0LCBpdCdzXG4gICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBmdWxmaWxsZWQgYW5kIHdvbid0IGJlIGFmZmVjdGVkIGJ5IHRoZSBkeW5hbWljIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgIHRhc2tDaGlsZCA9IHNwYXduUmV1c2VkVGFzayhvbGRSb3V0ZXJTdGF0ZUNoaWxkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlcmUncyBubyBjdXJyZW50bHkgYWN0aXZlIHNlZ21lbnQuIFN3aXRjaCB0byB0aGUgXCJjcmVhdGVcIiBwYXRoLlxuICAgICAgICAgICAgICAgIHRhc2tDaGlsZCA9IHNwYXduUGVuZGluZ1Rhc2sobmV3Um91dGVyU3RhdGVDaGlsZCwgcHJlZmV0Y2hEYXRhQ2hpbGQgIT09IHVuZGVmaW5lZCA/IHByZWZldGNoRGF0YUNoaWxkIDogbnVsbCwgcHJlZmV0Y2hIZWFkLCBpc1ByZWZldGNoU3RhbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9sZFNlZ21lbnRDaGlsZCAhPT0gdW5kZWZpbmVkICYmICgwLCBfbWF0Y2hzZWdtZW50cy5tYXRjaFNlZ21lbnQpKG5ld1NlZ21lbnRDaGlsZCwgb2xkU2VnbWVudENoaWxkKSkge1xuICAgICAgICAgICAgaWYgKG9sZENhY2hlTm9kZUNoaWxkICE9PSB1bmRlZmluZWQgJiYgb2xkUm91dGVyU3RhdGVDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBzZWdtZW50IGV4aXN0cyBpbiBib3RoIHRoZSBvbGQgYW5kIG5ldyB0cmVlcy5cbiAgICAgICAgICAgICAgICBpZiAocHJlZmV0Y2hEYXRhQ2hpbGQgIT09IHVuZGVmaW5lZCAmJiBwcmVmZXRjaERhdGFDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSB1cGRhdGUgdGhlIGNoaWxkcmVuLlxuICAgICAgICAgICAgICAgICAgICB0YXNrQ2hpbGQgPSB1cGRhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb24ob2xkQ2FjaGVOb2RlQ2hpbGQsIG9sZFJvdXRlclN0YXRlQ2hpbGQsIG5ld1JvdXRlclN0YXRlQ2hpbGQsIHByZWZldGNoRGF0YUNoaWxkLCBwcmVmZXRjaEhlYWQsIGlzUHJlZmV0Y2hTdGFsZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHNlcnZlciBkaWRuJ3Qgc2VuZCBhbnkgcHJlZmV0Y2ggZGF0YSBmb3IgdGhpcyBzZWdtZW50LiBUaGlzXG4gICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZG4ndCBoYXBwZW4gYmVjYXVzZSB0aGUgUm91dGUgVHJlZSBhbmQgdGhlIFNlZWQgRGF0YSB0cmVlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBhbHdheXMgYmUgdGhlIHNhbWUgc2hhcGUsIGJ1dCB1bnRpbCB3ZSB1bmlmeSB0aG9zZSB0eXBlc1xuICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIHBvc3NpYmxlLiBGb3Igbm93IHdlJ3JlIGdvaW5nIHRvIGRlb3B0IGFuZCB0cmlnZ2VyIGFcbiAgICAgICAgICAgICAgICAgICAgLy8gbGF6eSBmZXRjaCBkdXJpbmcgcmVuZGVyLlxuICAgICAgICAgICAgICAgICAgICB0YXNrQ2hpbGQgPSBzcGF3blRhc2tGb3JNaXNzaW5nRGF0YShuZXdSb3V0ZXJTdGF0ZUNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEVpdGhlciB0aGVyZSdzIG5vIGV4aXN0aW5nIENhY2hlIE5vZGUgZm9yIHRoaXMgc2VnbWVudCwgb3IgdGhpc1xuICAgICAgICAgICAgICAgIC8vIHNlZ21lbnQgZG9lc24ndCBleGlzdCBpbiB0aGUgb2xkIFJvdXRlciBTdGF0ZSB0cmVlLiBTd2l0Y2ggdG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gXCJjcmVhdGVcIiBwYXRoLlxuICAgICAgICAgICAgICAgIHRhc2tDaGlsZCA9IHNwYXduUGVuZGluZ1Rhc2sobmV3Um91dGVyU3RhdGVDaGlsZCwgcHJlZmV0Y2hEYXRhQ2hpbGQgIT09IHVuZGVmaW5lZCA/IHByZWZldGNoRGF0YUNoaWxkIDogbnVsbCwgcHJlZmV0Y2hIZWFkLCBpc1ByZWZldGNoU3RhbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyB0cmVlLiBTd2l0Y2ggdG8gdGhlIFwiY3JlYXRlXCIgcGF0aC5cbiAgICAgICAgICAgIHRhc2tDaGlsZCA9IHNwYXduUGVuZGluZ1Rhc2sobmV3Um91dGVyU3RhdGVDaGlsZCwgcHJlZmV0Y2hEYXRhQ2hpbGQgIT09IHVuZGVmaW5lZCA/IHByZWZldGNoRGF0YUNoaWxkIDogbnVsbCwgcHJlZmV0Y2hIZWFkLCBpc1ByZWZldGNoU3RhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXNrQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFNvbWV0aGluZyBjaGFuZ2VkIGluIHRoZSBjaGlsZCB0cmVlLiBLZWVwIHRyYWNrIG9mIHRoZSBjaGlsZCB0YXNrLlxuICAgICAgICAgICAgaWYgKHRhc2tDaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRhc2tDaGlsZHJlbiA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tDaGlsZHJlbi5zZXQocGFyYWxsZWxSb3V0ZUtleSwgdGFza0NoaWxkKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhY2hlTm9kZUNoaWxkID0gdGFza0NoaWxkLm5vZGU7XG4gICAgICAgICAgICBpZiAobmV3Q2FjaGVOb2RlQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTZWdtZW50TWFwQ2hpbGQgPSBuZXcgTWFwKG9sZFNlZ21lbnRNYXBDaGlsZCk7XG4gICAgICAgICAgICAgICAgbmV3U2VnbWVudE1hcENoaWxkLnNldChuZXdTZWdtZW50S2V5Q2hpbGQsIG5ld0NhY2hlTm9kZUNoaWxkKTtcbiAgICAgICAgICAgICAgICBwcmVmZXRjaFBhcmFsbGVsUm91dGVzLnNldChwYXJhbGxlbFJvdXRlS2V5LCBuZXdTZWdtZW50TWFwQ2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGhlIGNoaWxkIHRyZWUncyByb3V0ZSBzdGF0ZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIHByZWZldGNoZWRcbiAgICAgICAgICAgIC8vIHJvdXRlIHNlbnQgYnkgdGhlIHNlcnZlci4gV2UgbmVlZCB0byBjbG9uZSBpdCBhcyB3ZSB0cmF2ZXJzZSBiYWNrIHVwXG4gICAgICAgICAgICAvLyB0aGUgdHJlZS5cbiAgICAgICAgICAgIHBhdGNoZWRSb3V0ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldID0gdGFza0NoaWxkLnJvdXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIGNoaWxkIGRpZG4ndCBjaGFuZ2UuIFdlIGNhbiB1c2UgdGhlIHByZWZldGNoZWQgcm91dGVyIHN0YXRlLlxuICAgICAgICAgICAgcGF0Y2hlZFJvdXRlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV0gPSBuZXdSb3V0ZXJTdGF0ZUNoaWxkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0YXNrQ2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICAgICAgLy8gTm8gbmV3IHRhc2tzIHdlcmUgc3Bhd25lZC5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG5ld0NhY2hlTm9kZSA9IHtcbiAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgIHJzYzogb2xkQ2FjaGVOb2RlLnJzYyxcbiAgICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSBhcmVuJ3QgdXBkYXRpbmcgdGhlIHByZWZldGNoUnNjIGZpZWxkLCBzaW5jZSB0aGlzIG5vZGVcbiAgICAgICAgLy8gaXMgYWxyZWFkeSBwYXJ0IG9mIHRoZSBjdXJyZW50IHRyZWUsIGJlY2F1c2UgaXQgd291bGQgYmUgd2VpcmQgZm9yXG4gICAgICAgIC8vIHByZWZldGNoIGRhdGEgdG8gYmUgbmV3ZXIgdGhhbiB0aGUgZmluYWwgZGF0YS4gSXQgcHJvYmFibHkgd29uJ3QgZXZlciBiZVxuICAgICAgICAvLyBvYnNlcnZhYmxlIGFueXdheSwgYnV0IGl0IGNvdWxkIGhhcHBlbiBpZiB0aGUgc2VnbWVudCBpcyB1bm1vdW50ZWQgdGhlblxuICAgICAgICAvLyBtb3VudGVkIGFnYWluLCBiZWNhdXNlIExheW91dFJvdXRlciB3aWxsIG1vbWVudGFyaWx5IHN3aXRjaCB0byByZW5kZXJpbmdcbiAgICAgICAgLy8gcHJlZmV0Y2hSc2MsIHZpYSB1c2VEZWZlcnJlZFZhbHVlLlxuICAgICAgICBwcmVmZXRjaFJzYzogb2xkQ2FjaGVOb2RlLnByZWZldGNoUnNjLFxuICAgICAgICBoZWFkOiBvbGRDYWNoZU5vZGUuaGVhZCxcbiAgICAgICAgcHJlZmV0Y2hIZWFkOiBvbGRDYWNoZU5vZGUucHJlZmV0Y2hIZWFkLFxuICAgICAgICAvLyBFdmVyeXRoaW5nIGlzIGNsb25lZCBleGNlcHQgZm9yIHRoZSBjaGlsZHJlbiwgd2hpY2ggd2UgY29tcHV0ZWQgYWJvdmUuXG4gICAgICAgIHBhcmFsbGVsUm91dGVzOiBwcmVmZXRjaFBhcmFsbGVsUm91dGVzXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgICAvLyBSZXR1cm4gYSBjbG9uZWQgY29weSBvZiB0aGUgcm91dGVyIHN0YXRlIHdpdGggdXBkYXRlZCBjaGlsZHJlbi5cbiAgICAgICAgcm91dGU6IHBhdGNoUm91dGVyU3RhdGVXaXRoTmV3Q2hpbGRyZW4obmV3Um91dGVyU3RhdGUsIHBhdGNoZWRSb3V0ZXJTdGF0ZUNoaWxkcmVuKSxcbiAgICAgICAgbm9kZTogbmV3Q2FjaGVOb2RlLFxuICAgICAgICBjaGlsZHJlbjogdGFza0NoaWxkcmVuXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBhdGNoUm91dGVyU3RhdGVXaXRoTmV3Q2hpbGRyZW4oYmFzZVJvdXRlclN0YXRlLCBuZXdDaGlsZHJlbikge1xuICAgIGNvbnN0IGNsb25lID0gW1xuICAgICAgICBiYXNlUm91dGVyU3RhdGVbMF0sXG4gICAgICAgIG5ld0NoaWxkcmVuXG4gICAgXTtcbiAgICAvLyBCYXNlZCBvbiBlcXVpdmFsZW50IGxvZ2ljIGluIGFwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlLCBidXQgc2hvdWxkXG4gICAgLy8gY29uZmlybSB3aGV0aGVyIHdlIG5lZWQgdG8gY29weSBhbGwgb2YgdGhlc2UgZmllbGRzLiBOb3Qgc3VyZSB0aGUgc2VydmVyXG4gICAgLy8gZXZlciBzZW5kcywgZS5nLiB0aGUgcmVmZXRjaCBtYXJrZXIuXG4gICAgaWYgKDIgaW4gYmFzZVJvdXRlclN0YXRlKSB7XG4gICAgICAgIGNsb25lWzJdID0gYmFzZVJvdXRlclN0YXRlWzJdO1xuICAgIH1cbiAgICBpZiAoMyBpbiBiYXNlUm91dGVyU3RhdGUpIHtcbiAgICAgICAgY2xvbmVbM10gPSBiYXNlUm91dGVyU3RhdGVbM107XG4gICAgfVxuICAgIGlmICg0IGluIGJhc2VSb3V0ZXJTdGF0ZSkge1xuICAgICAgICBjbG9uZVs0XSA9IGJhc2VSb3V0ZXJTdGF0ZVs0XTtcbiAgICB9XG4gICAgcmV0dXJuIGNsb25lO1xufVxuZnVuY3Rpb24gc3Bhd25QZW5kaW5nVGFzayhyb3V0ZXJTdGF0ZSwgcHJlZmV0Y2hEYXRhLCBwcmVmZXRjaEhlYWQsIGlzUHJlZmV0Y2hTdGFsZSkge1xuICAgIC8vIENyZWF0ZSBhIHRhc2sgdGhhdCB3aWxsIGxhdGVyIGJlIGZ1bGZpbGxlZCBieSBkYXRhIGZyb20gdGhlIHNlcnZlci5cbiAgICBjb25zdCBwZW5kaW5nQ2FjaGVOb2RlID0gY3JlYXRlUGVuZGluZ0NhY2hlTm9kZShyb3V0ZXJTdGF0ZSwgcHJlZmV0Y2hEYXRhLCBwcmVmZXRjaEhlYWQsIGlzUHJlZmV0Y2hTdGFsZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcm91dGU6IHJvdXRlclN0YXRlLFxuICAgICAgICBub2RlOiBwZW5kaW5nQ2FjaGVOb2RlLFxuICAgICAgICBjaGlsZHJlbjogbnVsbFxuICAgIH07XG59XG5mdW5jdGlvbiBzcGF3blJldXNlZFRhc2socmV1c2VkUm91dGVyU3RhdGUpIHtcbiAgICAvLyBDcmVhdGUgYSB0YXNrIHRoYXQgcmV1c2VzIGFuIGV4aXN0aW5nIHNlZ21lbnQsIGUuZy4gd2hlbiByZXVzaW5nXG4gICAgLy8gdGhlIGN1cnJlbnQgYWN0aXZlIHNlZ21lbnQgaW4gcGxhY2Ugb2YgYSBkZWZhdWx0IHJvdXRlLlxuICAgIHJldHVybiB7XG4gICAgICAgIHJvdXRlOiByZXVzZWRSb3V0ZXJTdGF0ZSxcbiAgICAgICAgbm9kZTogbnVsbCxcbiAgICAgICAgY2hpbGRyZW46IG51bGxcbiAgICB9O1xufVxuZnVuY3Rpb24gc3Bhd25UYXNrRm9yTWlzc2luZ0RhdGEocm91dGVyU3RhdGUpIHtcbiAgICAvLyBDcmVhdGUgYSB0YXNrIGZvciBhIG5ldyBzdWJ0cmVlIHRoYXQgd2Fzbid0IHByZWZldGNoZWQgYnkgdGhlIHNlcnZlci5cbiAgICAvLyBUaGlzIHNob3VsZG4ndCByZWFsbHkgZXZlciBoYXBwZW4gYnV0IGl0J3MgaGVyZSBqdXN0IGluIGNhc2UgdGhlIFNlZWQgRGF0YVxuICAgIC8vIFRyZWUgYW5kIHRoZSBSb3V0ZXIgU3RhdGUgVHJlZSBkaXNhZ3JlZSB1bmV4cGVjdGVkbHkuXG4gICAgY29uc3QgcGVuZGluZ0NhY2hlTm9kZSA9IGNyZWF0ZVBlbmRpbmdDYWNoZU5vZGUocm91dGVyU3RhdGUsIG51bGwsIG51bGwsIGZhbHNlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICByb3V0ZTogcm91dGVyU3RhdGUsXG4gICAgICAgIG5vZGU6IHBlbmRpbmdDYWNoZU5vZGUsXG4gICAgICAgIGNoaWxkcmVuOiBudWxsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0KHRhc2ssIHJlc3BvbnNlUHJvbWlzZSkge1xuICAgIHJlc3BvbnNlUHJvbWlzZS50aGVuKChyZXNwb25zZSk9PntcbiAgICAgICAgY29uc3QgZmxpZ2h0RGF0YSA9IHJlc3BvbnNlWzBdO1xuICAgICAgICBmb3IgKGNvbnN0IGZsaWdodERhdGFQYXRoIG9mIGZsaWdodERhdGEpe1xuICAgICAgICAgICAgY29uc3Qgc2VnbWVudFBhdGggPSBmbGlnaHREYXRhUGF0aC5zbGljZSgwLCAtMyk7XG4gICAgICAgICAgICBjb25zdCBzZXJ2ZXJSb3V0ZXJTdGF0ZSA9IGZsaWdodERhdGFQYXRoW2ZsaWdodERhdGFQYXRoLmxlbmd0aCAtIDNdO1xuICAgICAgICAgICAgY29uc3QgZHluYW1pY0RhdGEgPSBmbGlnaHREYXRhUGF0aFtmbGlnaHREYXRhUGF0aC5sZW5ndGggLSAyXTtcbiAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNIZWFkID0gZmxpZ2h0RGF0YVBhdGhbZmxpZ2h0RGF0YVBhdGgubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNlZ21lbnRQYXRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cml0ZUR5bmFtaWNEYXRhSW50b1BlbmRpbmdUYXNrKHRhc2ssIHNlZ21lbnRQYXRoLCBzZXJ2ZXJSb3V0ZXJTdGF0ZSwgZHluYW1pY0RhdGEsIGR5bmFtaWNIZWFkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBleGhhdXN0ZWQgYWxsIHRoZSBkYXRhIHdlIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciwgaWZcbiAgICAgICAgLy8gdGhlcmUgYXJlIGFueSByZW1haW5pbmcgcGVuZGluZyB0YXNrcyBpbiB0aGUgdHJlZSwgYWJvcnQgdGhlbSBub3cuXG4gICAgICAgIC8vIElmIHRoZXJlJ3MgYW55IG1pc3NpbmcgZGF0YSwgaXQgd2lsbCB0cmlnZ2VyIGEgbGF6eSBmZXRjaC5cbiAgICAgICAgYWJvcnRUYXNrKHRhc2ssIG51bGwpO1xuICAgIH0sIChlcnJvcik9PntcbiAgICAgICAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgYW4gZXJyb3IgZHVyaW5nIHJlbmRlclxuICAgICAgICBhYm9ydFRhc2sodGFzaywgZXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gd3JpdGVEeW5hbWljRGF0YUludG9QZW5kaW5nVGFzayhyb290VGFzaywgc2VnbWVudFBhdGgsIHNlcnZlclJvdXRlclN0YXRlLCBkeW5hbWljRGF0YSwgZHluYW1pY0hlYWQpIHtcbiAgICAvLyBUaGUgZGF0YSBzZW50IGJ5IHRoZSBzZXJ2ZXIgcmVwcmVzZW50cyBvbmx5IGEgc3VidHJlZSBvZiB0aGUgYXBwLiBXZSBuZWVkXG4gICAgLy8gdG8gZmluZCB0aGUgcGFydCBvZiB0aGUgdGFzayB0cmVlIHRoYXQgbWF0Y2hlcyB0aGUgc2VydmVyIHJlc3BvbnNlLCBhbmRcbiAgICAvLyBmdWxmaWxsIGl0IHVzaW5nIHRoZSBkeW5hbWljIGRhdGEuXG4gICAgLy9cbiAgICAvLyBzZWdtZW50UGF0aCByZXByZXNlbnRzIHRoZSBwYXJlbnQgcGF0aCBvZiBzdWJ0cmVlLiBJdCdzIGEgcmVwZWF0aW5nIHBhdHRlcm5cbiAgICAvLyBvZiBwYXJhbGxlbCByb3V0ZSBrZXkgYW5kIHNlZ21lbnQ6XG4gICAgLy9cbiAgICAvLyAgIFtzdHJpbmcsIFNlZ21lbnQsIHN0cmluZywgU2VnbWVudCwgc3RyaW5nLCBTZWdtZW50LCAuLi5dXG4gICAgLy9cbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHBhdGggYW5kIGZpbmlzaCBhbnkgdGFza3MgdGhhdCBtYXRjaCB0aGlzIHBheWxvYWQuXG4gICAgbGV0IHRhc2sgPSByb290VGFzaztcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2VnbWVudFBhdGgubGVuZ3RoOyBpICs9IDIpe1xuICAgICAgICBjb25zdCBwYXJhbGxlbFJvdXRlS2V5ID0gc2VnbWVudFBhdGhbaV07XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50UGF0aFtpICsgMV07XG4gICAgICAgIGNvbnN0IHRhc2tDaGlsZHJlbiA9IHRhc2suY2hpbGRyZW47XG4gICAgICAgIGlmICh0YXNrQ2hpbGRyZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tDaGlsZCA9IHRhc2tDaGlsZHJlbi5nZXQocGFyYWxsZWxSb3V0ZUtleSk7XG4gICAgICAgICAgICBpZiAodGFza0NoaWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrU2VnbWVudCA9IHRhc2tDaGlsZC5yb3V0ZVswXTtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIF9tYXRjaHNlZ21lbnRzLm1hdGNoU2VnbWVudCkoc2VnbWVudCwgdGFza1NlZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbWF0Y2ggZm9yIHRoaXMgdGFzay4gS2VlcCB0cmF2ZXJzaW5nIGRvd24gdGhlIHRhc2sgdHJlZS5cbiAgICAgICAgICAgICAgICAgICAgdGFzayA9IHRhc2tDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIGRpZG4ndCBmaW5kIGEgY2hpbGQgdGFzayB0aGF0IG1hdGNoZXMgdGhlIHNlcnZlciBkYXRhLiBFeGl0LiBXZSB3b24ndFxuICAgICAgICAvLyBhYm9ydCB0aGUgdGFzaywgdGhvdWdoLCBiZWNhdXNlIGEgZGlmZmVyZW50IEZsaWdodERhdGFQYXRoIG1heSBiZSBhYmxlIHRvXG4gICAgICAgIC8vIGZ1bGZpbGwgaXQgKHNlZSBsb29wIGluIGxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0KS4gV2Ugb25seSBhYm9ydCB0YXNrc1xuICAgICAgICAvLyBvbmNlIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YS5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaW5pc2hUYXNrVXNpbmdEeW5hbWljRGF0YVBheWxvYWQodGFzaywgc2VydmVyUm91dGVyU3RhdGUsIGR5bmFtaWNEYXRhLCBkeW5hbWljSGVhZCk7XG59XG5mdW5jdGlvbiBmaW5pc2hUYXNrVXNpbmdEeW5hbWljRGF0YVBheWxvYWQodGFzaywgc2VydmVyUm91dGVyU3RhdGUsIGR5bmFtaWNEYXRhLCBkeW5hbWljSGVhZCkge1xuICAgIC8vIGR5bmFtaWNEYXRhIG1heSByZXByZXNlbnQgYSBsYXJnZXIgc3VidHJlZSB0aGFuIHRoZSB0YXNrLiBCZWZvcmUgd2UgY2FuXG4gICAgLy8gZmluaXNoIHRoZSB0YXNrLCB3ZSBuZWVkIHRvIGxpbmUgdGhlbSB1cC5cbiAgICBjb25zdCB0YXNrQ2hpbGRyZW4gPSB0YXNrLmNoaWxkcmVuO1xuICAgIGNvbnN0IHRhc2tOb2RlID0gdGFzay5ub2RlO1xuICAgIGlmICh0YXNrQ2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgbGVhZiBub2RlIG9mIHRoZSBwZW5kaW5nIHRhc2suIFRoZSBzZXJ2ZXIgZGF0YSB0cmVlXG4gICAgICAgIC8vIGxpbmVzIHVwIHRoZSBwZW5kaW5nIENhY2hlIE5vZGUgdHJlZS4gV2UgY2FuIG5vdyBzd2l0Y2ggdG8gdGhlXG4gICAgICAgIC8vIG5vcm1hbCBhbGdvcml0aG0uXG4gICAgICAgIGlmICh0YXNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgZmluaXNoUGVuZGluZ0NhY2hlTm9kZSh0YXNrTm9kZSwgdGFzay5yb3V0ZSwgc2VydmVyUm91dGVyU3RhdGUsIGR5bmFtaWNEYXRhLCBkeW5hbWljSGVhZCk7XG4gICAgICAgICAgICAvLyBOdWxsIHRoaXMgb3V0IHRvIGluZGljYXRlIHRoYXQgdGhlIHRhc2sgaXMgY29tcGxldGUuXG4gICAgICAgICAgICB0YXNrLm5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gVGhlIHNlcnZlciByZXR1cm5lZCBtb3JlIGRhdGEgdGhhbiB3ZSBuZWVkIHRvIGZpbmlzaCB0aGUgdGFzay4gU2tpcCBvdmVyXG4gICAgLy8gdGhlIGV4dHJhIHNlZ21lbnRzIHVudGlsIHdlIHJlYWNoIHRoZSBsZWFmIHRhc2sgbm9kZS5cbiAgICBjb25zdCBzZXJ2ZXJDaGlsZHJlbiA9IHNlcnZlclJvdXRlclN0YXRlWzFdO1xuICAgIGNvbnN0IGR5bmFtaWNEYXRhQ2hpbGRyZW4gPSBkeW5hbWljRGF0YVsxXTtcbiAgICBmb3IoY29uc3QgcGFyYWxsZWxSb3V0ZUtleSBpbiBzZXJ2ZXJSb3V0ZXJTdGF0ZSl7XG4gICAgICAgIGNvbnN0IHNlcnZlclJvdXRlclN0YXRlQ2hpbGQgPSBzZXJ2ZXJDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XTtcbiAgICAgICAgY29uc3QgZHluYW1pY0RhdGFDaGlsZCA9IGR5bmFtaWNEYXRhQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV07XG4gICAgICAgIGNvbnN0IHRhc2tDaGlsZCA9IHRhc2tDaGlsZHJlbi5nZXQocGFyYWxsZWxSb3V0ZUtleSk7XG4gICAgICAgIGlmICh0YXNrQ2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdGFza1NlZ21lbnQgPSB0YXNrQ2hpbGQucm91dGVbMF07XG4gICAgICAgICAgICBpZiAoKDAsIF9tYXRjaHNlZ21lbnRzLm1hdGNoU2VnbWVudCkoc2VydmVyUm91dGVyU3RhdGVDaGlsZFswXSwgdGFza1NlZ21lbnQpICYmIGR5bmFtaWNEYXRhQ2hpbGQgIT09IG51bGwgJiYgZHluYW1pY0RhdGFDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBtYXRjaCBmb3IgdGhpcyB0YXNrLiBLZWVwIHRyYXZlcnNpbmcgZG93biB0aGUgdGFzayB0cmVlLlxuICAgICAgICAgICAgICAgIHJldHVybiBmaW5pc2hUYXNrVXNpbmdEeW5hbWljRGF0YVBheWxvYWQodGFza0NoaWxkLCBzZXJ2ZXJSb3V0ZXJTdGF0ZUNoaWxkLCBkeW5hbWljRGF0YUNoaWxkLCBkeW5hbWljSGVhZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAvLyBXZSBkaWRuJ3QgZmluZCBhIGNoaWxkIHRhc2sgdGhhdCBtYXRjaGVzIHRoZSBzZXJ2ZXIgZGF0YS4gV2Ugd29uJ3QgYWJvcnRcbiAgICAvLyB0aGUgdGFzaywgdGhvdWdoLCBiZWNhdXNlIGEgZGlmZmVyZW50IEZsaWdodERhdGFQYXRoIG1heSBiZSBhYmxlIHRvXG4gICAgLy8gZnVsZmlsbCBpdCAoc2VlIGxvb3AgaW4gbGlzdGVuRm9yRHluYW1pY1JlcXVlc3QpLiBXZSBvbmx5IGFib3J0IHRhc2tzXG4gICAgLy8gb25jZSB3ZSd2ZSBydW4gb3V0IG9mIGRhdGEuXG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUGVuZGluZ0NhY2hlTm9kZShyb3V0ZXJTdGF0ZSwgcHJlZmV0Y2hEYXRhLCBwcmVmZXRjaEhlYWQsIGlzUHJlZmV0Y2hTdGFsZSkge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGRyZW4gPSByb3V0ZXJTdGF0ZVsxXTtcbiAgICBjb25zdCBwcmVmZXRjaERhdGFDaGlsZHJlbiA9IHByZWZldGNoRGF0YSAhPT0gbnVsbCA/IHByZWZldGNoRGF0YVsxXSA6IG51bGw7XG4gICAgY29uc3QgcGFyYWxsZWxSb3V0ZXMgPSBuZXcgTWFwKCk7XG4gICAgZm9yKGxldCBwYXJhbGxlbFJvdXRlS2V5IGluIHJvdXRlclN0YXRlQ2hpbGRyZW4pe1xuICAgICAgICBjb25zdCByb3V0ZXJTdGF0ZUNoaWxkID0gcm91dGVyU3RhdGVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XTtcbiAgICAgICAgY29uc3QgcHJlZmV0Y2hEYXRhQ2hpbGQgPSBwcmVmZXRjaERhdGFDaGlsZHJlbiAhPT0gbnVsbCA/IHByZWZldGNoRGF0YUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldIDogbnVsbDtcbiAgICAgICAgY29uc3Qgc2VnbWVudENoaWxkID0gcm91dGVyU3RhdGVDaGlsZFswXTtcbiAgICAgICAgY29uc3Qgc2VnbWVudEtleUNoaWxkID0gKDAsIF9jcmVhdGVyb3V0ZXJjYWNoZWtleS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoc2VnbWVudENoaWxkKTtcbiAgICAgICAgY29uc3QgbmV3Q2FjaGVOb2RlQ2hpbGQgPSBjcmVhdGVQZW5kaW5nQ2FjaGVOb2RlKHJvdXRlclN0YXRlQ2hpbGQsIHByZWZldGNoRGF0YUNoaWxkID09PSB1bmRlZmluZWQgPyBudWxsIDogcHJlZmV0Y2hEYXRhQ2hpbGQsIHByZWZldGNoSGVhZCwgaXNQcmVmZXRjaFN0YWxlKTtcbiAgICAgICAgY29uc3QgbmV3U2VnbWVudE1hcENoaWxkID0gbmV3IE1hcCgpO1xuICAgICAgICBuZXdTZWdtZW50TWFwQ2hpbGQuc2V0KHNlZ21lbnRLZXlDaGlsZCwgbmV3Q2FjaGVOb2RlQ2hpbGQpO1xuICAgICAgICBwYXJhbGxlbFJvdXRlcy5zZXQocGFyYWxsZWxSb3V0ZUtleSwgbmV3U2VnbWVudE1hcENoaWxkKTtcbiAgICB9XG4gICAgLy8gVGhlIGhlYWQgaXMgYXNzaWduZWQgdG8gZXZlcnkgbGVhZiBzZWdtZW50IGRlbGl2ZXJlZCBieSB0aGUgc2VydmVyLiBCYXNlZFxuICAgIC8vIG9uIGNvcnJlc3BvbmRpbmcgbG9naWMgaW4gZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWQudHNcbiAgICBjb25zdCBpc0xlYWZTZWdtZW50ID0gcGFyYWxsZWxSb3V0ZXMuc2l6ZSA9PT0gMDtcbiAgICBjb25zdCBtYXliZVByZWZldGNoUnNjID0gcHJlZmV0Y2hEYXRhICE9PSBudWxsID8gcHJlZmV0Y2hEYXRhWzJdIDogbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IHBhcmFsbGVsUm91dGVzLFxuICAgICAgICBwcmVmZXRjaFJzYzogLy8gSWYgdGhlIHByZWZldGNoZWQgY2FjaGUgZW50cnkgaXMgc3RhbGUsIHdlIGRvbid0IHNob3cgaXQuIFdlIHdhaXQgZm9yIHRoZVxuICAgICAgICAvLyBkeW5hbWljIGRhdGEgdG8gc3RyZWFtIGluLlxuICAgICAgICAvLyBUT0RPOiBUaGlzIGNoZWNrIGlzIGFydWFibHkgdG9vIGRlZXAgaW4gdGhlIHN0YWNrLiBNaWdodCBiZSBiZXR0ZXIgdG9cbiAgICAgICAgLy8gcGFzcyBhbiBlbXB0eSBwcmVmZXRjaERhdGEgQ2FjaGUgU2VlZCBvYmplY3QgaW5zdGVhZC5cbiAgICAgICAgIWlzUHJlZmV0Y2hTdGFsZSAmJiBtYXliZVByZWZldGNoUnNjICE9PSB1bmRlZmluZWQgPyBtYXliZVByZWZldGNoUnNjIDogbnVsbCxcbiAgICAgICAgcHJlZmV0Y2hIZWFkOiAhaXNQcmVmZXRjaFN0YWxlICYmIGlzTGVhZlNlZ21lbnQgPyBwcmVmZXRjaEhlYWQgOiBudWxsLFxuICAgICAgICAvLyBDcmVhdGUgYSBkZWZlcnJlZCBwcm9taXNlLiBUaGlzIHdpbGwgYmUgZnVsZmlsbGVkIG9uY2UgdGhlIGR5bmFtaWNcbiAgICAgICAgLy8gcmVzcG9uc2UgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICByc2M6IGNyZWF0ZURlZmVycmVkUnNjKCksXG4gICAgICAgIGhlYWQ6IGlzTGVhZlNlZ21lbnQgPyBjcmVhdGVEZWZlcnJlZFJzYygpIDogbnVsbFxuICAgIH07XG59XG5mdW5jdGlvbiBmaW5pc2hQZW5kaW5nQ2FjaGVOb2RlKGNhY2hlTm9kZSwgdGFza1N0YXRlLCBzZXJ2ZXJTdGF0ZSwgZHluYW1pY0RhdGEsIGR5bmFtaWNIZWFkKSB7XG4gICAgLy8gV3JpdGVzIGEgZHluYW1pYyByZXNwb25zZSBpbnRvIGFuIGV4aXN0aW5nIENhY2hlIE5vZGUgdHJlZS4gVGhpcyBkb2VzIF9ub3RfXG4gICAgLy8gY3JlYXRlIGEgbmV3IHRyZWUsIGl0IHVwZGF0ZXMgdGhlIGV4aXN0aW5nIHRyZWUgaW4tcGxhY2UuIFNvIGl0IG11c3QgZm9sbG93XG4gICAgLy8gdGhlIFN1c3BlbnNlIHJ1bGVzIG9mIGNhY2hlIHNhZmV0eSDigJQgaXQgY2FuIHJlc29sdmUgcGVuZGluZyBwcm9taXNlcywgYnV0XG4gICAgLy8gaXQgY2Fubm90IG92ZXJ3cml0ZSBleGlzdGluZyBkYXRhLiBJdCBjYW4gYWRkIHNlZ21lbnRzIHRvIHRoZSB0cmVlIChiZWNhdXNlXG4gICAgLy8gYSBtaXNzaW5nIHNlZ21lbnQgd2lsbCBjYXVzZSB0aGUgbGF5b3V0IHJvdXRlciB0byBzdXNwZW5kKS5cbiAgICAvLyBidXQgaXQgY2Fubm90IGRlbGV0ZSB0aGVtLlxuICAgIC8vXG4gICAgLy8gV2UgbXVzdCByZXNvbHZlIGV2ZXJ5IHByb21pc2UgaW4gdGhlIHRyZWUsIG9yIGVsc2UgaXQgd2lsbCBzdXNwZW5kXG4gICAgLy8gaW5kZWZpbml0ZWx5LiBJZiB3ZSBkaWQgbm90IHJlY2VpdmUgZGF0YSBmb3IgYSBzZWdtZW50LCB3ZSB3aWxsIHJlc29sdmUgaXRzXG4gICAgLy8gZGF0YSBwcm9taXNlIHRvIGBudWxsYCB0byB0cmlnZ2VyIGEgbGF6eSBmZXRjaCBkdXJpbmcgcmVuZGVyLlxuICAgIGNvbnN0IHRhc2tTdGF0ZUNoaWxkcmVuID0gdGFza1N0YXRlWzFdO1xuICAgIGNvbnN0IHNlcnZlclN0YXRlQ2hpbGRyZW4gPSBzZXJ2ZXJTdGF0ZVsxXTtcbiAgICBjb25zdCBkYXRhQ2hpbGRyZW4gPSBkeW5hbWljRGF0YVsxXTtcbiAgICAvLyBUaGUgcm91dGVyIHN0YXRlIHRoYXQgd2UgdHJhdmVyc2UgdGhlIHRyZWUgd2l0aCAodGFza1N0YXRlKSBpcyB0aGUgc2FtZSBvbmVcbiAgICAvLyB0aGF0IHdlIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwZW5kaW5nIENhY2hlIE5vZGUgdHJlZS4gVGhhdCB3YXkgd2UncmUgc3VyZVxuICAgIC8vIHRvIHJlc29sdmUgYWxsIHRoZSBwZW5kaW5nIHByb21pc2VzLlxuICAgIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gY2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzO1xuICAgIGZvcihsZXQgcGFyYWxsZWxSb3V0ZUtleSBpbiB0YXNrU3RhdGVDaGlsZHJlbil7XG4gICAgICAgIGNvbnN0IHRhc2tTdGF0ZUNoaWxkID0gdGFza1N0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV07XG4gICAgICAgIGNvbnN0IHNlcnZlclN0YXRlQ2hpbGQgPSBzZXJ2ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldO1xuICAgICAgICBjb25zdCBkYXRhQ2hpbGQgPSBkYXRhQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV07XG4gICAgICAgIGNvbnN0IHNlZ21lbnRNYXBDaGlsZCA9IHBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KTtcbiAgICAgICAgY29uc3QgdGFza1NlZ21lbnRDaGlsZCA9IHRhc2tTdGF0ZUNoaWxkWzBdO1xuICAgICAgICBjb25zdCB0YXNrU2VnbWVudEtleUNoaWxkID0gKDAsIF9jcmVhdGVyb3V0ZXJjYWNoZWtleS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkodGFza1NlZ21lbnRDaGlsZCk7XG4gICAgICAgIGNvbnN0IGNhY2hlTm9kZUNoaWxkID0gc2VnbWVudE1hcENoaWxkICE9PSB1bmRlZmluZWQgPyBzZWdtZW50TWFwQ2hpbGQuZ2V0KHRhc2tTZWdtZW50S2V5Q2hpbGQpIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoY2FjaGVOb2RlQ2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHNlcnZlclN0YXRlQ2hpbGQgIT09IHVuZGVmaW5lZCAmJiAoMCwgX21hdGNoc2VnbWVudHMubWF0Y2hTZWdtZW50KSh0YXNrU2VnbWVudENoaWxkLCBzZXJ2ZXJTdGF0ZUNoaWxkWzBdKSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhQ2hpbGQgIT09IHVuZGVmaW5lZCAmJiBkYXRhQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaGFwcHkgcGF0aC4gUmVjdXJzaXZlbHkgdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4uXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaFBlbmRpbmdDYWNoZU5vZGUoY2FjaGVOb2RlQ2hpbGQsIHRhc2tTdGF0ZUNoaWxkLCBzZXJ2ZXJTdGF0ZUNoaWxkLCBkYXRhQ2hpbGQsIGR5bmFtaWNIZWFkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc2VydmVyIG5ldmVyIHJldHVybmVkIGRhdGEgZm9yIHRoaXMgc2VnbWVudC4gVHJpZ2dlciBhIGxhenlcbiAgICAgICAgICAgICAgICAgICAgLy8gZmV0Y2ggZHVyaW5nIHJlbmRlci4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGJlY2F1c2UgdGhlIFJvdXRlIFRyZWVcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBTZWVkIERhdGEgdHJlZSBzZW50IGJ5IHRoZSBzZXJ2ZXIgc2hvdWxkIGFsd2F5cyBiZSB0aGUgc2FtZVxuICAgICAgICAgICAgICAgICAgICAvLyBzaGFwZSB3aGVuIHBhcnQgb2YgdGhlIHNhbWUgc2VydmVyIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgICBhYm9ydFBlbmRpbmdDYWNoZU5vZGUodGFza1N0YXRlQ2hpbGQsIGNhY2hlTm9kZUNoaWxkLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBzZXJ2ZXIgbmV2ZXIgcmV0dXJuZWQgZGF0YSBmb3IgdGhpcyBzZWdtZW50LiBUcmlnZ2VyIGEgbGF6eVxuICAgICAgICAgICAgICAgIC8vIGZldGNoIGR1cmluZyByZW5kZXIuXG4gICAgICAgICAgICAgICAgYWJvcnRQZW5kaW5nQ2FjaGVOb2RlKHRhc2tTdGF0ZUNoaWxkLCBjYWNoZU5vZGVDaGlsZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSBzZXJ2ZXIgcmVzcG9uc2UgbWF0Y2hlcyB3aGF0IHdhcyBleHBlY3RlZCB0byByZWNlaXZlLCBidXQgdGhlcmUnc1xuICAgICAgICAvLyBubyBtYXRjaGluZyBDYWNoZSBOb2RlIGluIHRoZSB0YXNrIHRyZWUuIFRoaXMgaXMgYSBidWcgaW4gdGhlXG4gICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGJlY2F1c2Ugd2Ugc2hvdWxkIGhhdmUgY3JlYXRlZCBhIG5vZGUgZm9yIGV2ZXJ5XG4gICAgICAgIC8vIHNlZ21lbnQgaW4gdGhlIHRyZWUgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhc2suXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVXNlIHRoZSBkeW5hbWljIGRhdGEgZnJvbSB0aGUgc2VydmVyIHRvIGZ1bGZpbGwgdGhlIGRlZmVycmVkIFJTQyBwcm9taXNlXG4gICAgLy8gb24gdGhlIENhY2hlIE5vZGUuXG4gICAgY29uc3QgcnNjID0gY2FjaGVOb2RlLnJzYztcbiAgICBjb25zdCBkeW5hbWljU2VnbWVudERhdGEgPSBkeW5hbWljRGF0YVsyXTtcbiAgICBpZiAocnNjID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBsYXp5IGNhY2hlIG5vZGUuIFdlIGNhbiBvdmVyd3JpdGUgaXQuIFRoaXMgaXMgb25seSBzYWZlXG4gICAgICAgIC8vIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBMYXlvdXRSb3V0ZXIgc3VzcGVuZHMgaWYgYHJzY2AgaXMgYG51bGxgLlxuICAgICAgICBjYWNoZU5vZGUucnNjID0gZHluYW1pY1NlZ21lbnREYXRhO1xuICAgIH0gZWxzZSBpZiAoaXNEZWZlcnJlZFJzYyhyc2MpKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBkZWZlcnJlZCBSU0MgcHJvbWlzZS4gV2UgY2FuIGZ1bGZpbGwgaXQgd2l0aCB0aGUgZGF0YSB3ZSBqdXN0XG4gICAgICAgIC8vIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4gSWYgaXQgd2FzIGFscmVhZHkgcmVzb2x2ZWQgYnkgYSBkaWZmZXJlbnRcbiAgICAgICAgLy8gbmF2aWdhdGlvbiwgdGhlbiB0aGlzIGRvZXMgbm90aGluZyBiZWNhdXNlIHdlIGNhbid0IG92ZXJ3cml0ZSBkYXRhLlxuICAgICAgICByc2MucmVzb2x2ZShkeW5hbWljU2VnbWVudERhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBub3QgYSBkZWZlcnJlZCBSU0MgcHJvbWlzZSwgbm9yIGlzIGl0IGVtcHR5LCBzbyBpdCBtdXN0IGhhdmVcbiAgICAvLyBiZWVuIHBvcHVsYXRlZCBieSBhIGRpZmZlcmVudCBuYXZpZ2F0aW9uLiBXZSBtdXN0IG5vdCBvdmVyd3JpdGUgaXQuXG4gICAgfVxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBsZWFmIHNlZ21lbnQuIElmIHNvLCBpdCB3aWxsIGhhdmUgYSBgaGVhZGAgcHJvcGVydHkgd2l0aFxuICAgIC8vIGEgcGVuZGluZyBwcm9taXNlIHRoYXQgbmVlZHMgdG8gYmUgcmVzb2x2ZWQgd2l0aCB0aGUgZHluYW1pYyBoZWFkIGZyb21cbiAgICAvLyB0aGUgc2VydmVyLlxuICAgIGNvbnN0IGhlYWQgPSBjYWNoZU5vZGUuaGVhZDtcbiAgICBpZiAoaXNEZWZlcnJlZFJzYyhoZWFkKSkge1xuICAgICAgICBoZWFkLnJlc29sdmUoZHluYW1pY0hlYWQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFib3J0VGFzayh0YXNrLCBlcnJvcikge1xuICAgIGNvbnN0IGNhY2hlTm9kZSA9IHRhc2subm9kZTtcbiAgICBpZiAoY2FjaGVOb2RlID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRoZSB0YXNrIGlzIGFscmVhZHkgY29tcGxldGUuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFza0NoaWxkcmVuID0gdGFzay5jaGlsZHJlbjtcbiAgICBpZiAodGFza0NoaWxkcmVuID09PSBudWxsKSB7XG4gICAgICAgIC8vIFJlYWNoZWQgdGhlIGxlYWYgdGFzayBub2RlLiBUaGlzIGlzIHRoZSByb290IG9mIGEgcGVuZGluZyBjYWNoZVxuICAgICAgICAvLyBub2RlIHRyZWUuXG4gICAgICAgIGFib3J0UGVuZGluZ0NhY2hlTm9kZSh0YXNrLnJvdXRlLCBjYWNoZU5vZGUsIGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGlzIGFuIGludGVybWVkaWF0ZSB0YXNrIG5vZGUuIEtlZXAgdHJhdmVyc2luZyB1bnRpbCB3ZSByZWFjaCBhXG4gICAgICAgIC8vIHRhc2sgbm9kZSB3aXRoIG5vIGNoaWxkcmVuLiBUaGF0IHdpbGwgYmUgdGhlIHJvb3Qgb2YgdGhlIGNhY2hlIG5vZGUgdHJlZVxuICAgICAgICAvLyB0aGF0IG5lZWRzIHRvIGJlIHJlc29sdmVkLlxuICAgICAgICBmb3IgKGNvbnN0IHRhc2tDaGlsZCBvZiB0YXNrQ2hpbGRyZW4udmFsdWVzKCkpe1xuICAgICAgICAgICAgYWJvcnRUYXNrKHRhc2tDaGlsZCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE51bGwgdGhpcyBvdXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdGFzayBpcyBjb21wbGV0ZS5cbiAgICB0YXNrLm5vZGUgPSBudWxsO1xufVxuZnVuY3Rpb24gYWJvcnRQZW5kaW5nQ2FjaGVOb2RlKHJvdXRlclN0YXRlLCBjYWNoZU5vZGUsIGVycm9yKSB7XG4gICAgLy8gRm9yIGV2ZXJ5IHBlbmRpbmcgc2VnbWVudCBpbiB0aGUgdHJlZSwgcmVzb2x2ZSBpdHMgYHJzY2AgcHJvbWlzZSB0byBgbnVsbGBcbiAgICAvLyB0byB0cmlnZ2VyIGEgbGF6eSBmZXRjaCBkdXJpbmcgcmVuZGVyLlxuICAgIC8vXG4gICAgLy8gT3IsIGlmIGFuIGVycm9yIG9iamVjdCBpcyBwcm92aWRlZCwgaXQgd2lsbCBlcnJvciBpbnN0ZWFkLlxuICAgIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGRyZW4gPSByb3V0ZXJTdGF0ZVsxXTtcbiAgICBjb25zdCBwYXJhbGxlbFJvdXRlcyA9IGNhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcztcbiAgICBmb3IobGV0IHBhcmFsbGVsUm91dGVLZXkgaW4gcm91dGVyU3RhdGVDaGlsZHJlbil7XG4gICAgICAgIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGQgPSByb3V0ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldO1xuICAgICAgICBjb25zdCBzZWdtZW50TWFwQ2hpbGQgPSBwYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSk7XG4gICAgICAgIGlmIChzZWdtZW50TWFwQ2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VnbWVudENoaWxkID0gcm91dGVyU3RhdGVDaGlsZFswXTtcbiAgICAgICAgY29uc3Qgc2VnbWVudEtleUNoaWxkID0gKDAsIF9jcmVhdGVyb3V0ZXJjYWNoZWtleS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoc2VnbWVudENoaWxkKTtcbiAgICAgICAgY29uc3QgY2FjaGVOb2RlQ2hpbGQgPSBzZWdtZW50TWFwQ2hpbGQuZ2V0KHNlZ21lbnRLZXlDaGlsZCk7XG4gICAgICAgIGlmIChjYWNoZU5vZGVDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhYm9ydFBlbmRpbmdDYWNoZU5vZGUocm91dGVyU3RhdGVDaGlsZCwgY2FjaGVOb2RlQ2hpbGQsIGVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGJlY2F1c2Ugd2UncmUgdHJhdmVyc2luZyB0aGUgc2FtZSB0cmVlIHRoYXQgd2FzXG4gICAgICAgIC8vIHVzZWQgdG8gY29uc3RydWN0IHRoZSBjYWNoZSBub2RlcyBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcnNjID0gY2FjaGVOb2RlLnJzYztcbiAgICBpZiAoaXNEZWZlcnJlZFJzYyhyc2MpKSB7XG4gICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgYSBsYXp5IGZldGNoIGR1cmluZyByZW5kZXIuXG4gICAgICAgICAgICByc2MucmVzb2x2ZShudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGFuIGVycm9yIGR1cmluZyByZW5kZXJpbmcuXG4gICAgICAgICAgICByc2MucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgbGVhZiBzZWdtZW50LiBJZiBzbywgaXQgd2lsbCBoYXZlIGEgYGhlYWRgIHByb3BlcnR5IHdpdGhcbiAgICAvLyBhIHBlbmRpbmcgcHJvbWlzZSB0aGF0IG5lZWRzIHRvIGJlIHJlc29sdmVkLiBJZiBhbiBlcnJvciB3YXMgcHJvdmlkZWQsIHdlXG4gICAgLy8gd2lsbCBub3QgcmVzb2x2ZSBpdCB3aXRoIGFuIGVycm9yLCBzaW5jZSB0aGlzIGlzIHJlbmRlcmVkIGF0IHRoZSByb290IG9mXG4gICAgLy8gdGhlIGFwcC4gV2Ugd2FudCB0aGUgc2VnbWVudCB0byBlcnJvciwgbm90IHRoZSBlbnRpcmUgYXBwLlxuICAgIGNvbnN0IGhlYWQgPSBjYWNoZU5vZGUuaGVhZDtcbiAgICBpZiAoaXNEZWZlcnJlZFJzYyhoZWFkKSkge1xuICAgICAgICBoZWFkLnJlc29sdmUobnVsbCk7XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQ2FjaGVOb2RlT25Qb3BzdGF0ZVJlc3RvcmF0aW9uKG9sZENhY2hlTm9kZSwgcm91dGVyU3RhdGUpIHtcbiAgICAvLyBBIHBvcHN0YXRlIG5hdmlnYXRpb24gcmVhZHMgZGF0YSBmcm9tIHRoZSBsb2NhbCBjYWNoZS4gSXQgZG9lcyBub3QgaXNzdWVcbiAgICAvLyBuZXcgbmV0d29yayByZXF1ZXN0cyAodW5sZXNzIHRoZSBjYWNoZSBlbnRyaWVzIGhhdmUgYmVlbiBldmljdGVkKS4gU28sIHdlXG4gICAgLy8gdXBkYXRlIHRoZSBjYWNoZSB0byBkcm9wIHRoZSBwcmVmZXRjaCAgZGF0YSBmb3IgYW55IHNlZ21lbnQgd2hvc2UgZHluYW1pY1xuICAgIC8vIGRhdGEgd2FzIGFscmVhZHkgcmVjZWl2ZWQuIFRoaXMgcHJldmVudHMgYW4gdW5uZWNlc3NhcnkgZmxhc2ggYmFjayB0byBQUFJcbiAgICAvLyBzdGF0ZSBkdXJpbmcgYSBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbi5cbiAgICAvL1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gY2xvbmVzIHRoZSBlbnRpcmUgY2FjaGUgbm9kZSB0cmVlIGFuZCBzZXRzIHRoZSBgcHJlZmV0Y2hSc2NgXG4gICAgLy8gZmllbGQgdG8gYG51bGxgIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyByZW5kZXJlZC4gV2UgY2FuJ3QgbXV0YXRlIHRoZSBub2RlXG4gICAgLy8gaW4gcGxhY2UgYmVjYXVzZSB0aGlzIGlzIGEgY29uY3VycmVudCBkYXRhIHN0cnVjdHVyZS5cbiAgICBjb25zdCByb3V0ZXJTdGF0ZUNoaWxkcmVuID0gcm91dGVyU3RhdGVbMV07XG4gICAgY29uc3Qgb2xkUGFyYWxsZWxSb3V0ZXMgPSBvbGRDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXM7XG4gICAgY29uc3QgbmV3UGFyYWxsZWxSb3V0ZXMgPSBuZXcgTWFwKG9sZFBhcmFsbGVsUm91dGVzKTtcbiAgICBmb3IobGV0IHBhcmFsbGVsUm91dGVLZXkgaW4gcm91dGVyU3RhdGVDaGlsZHJlbil7XG4gICAgICAgIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGQgPSByb3V0ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldO1xuICAgICAgICBjb25zdCBzZWdtZW50Q2hpbGQgPSByb3V0ZXJTdGF0ZUNoaWxkWzBdO1xuICAgICAgICBjb25zdCBzZWdtZW50S2V5Q2hpbGQgPSAoMCwgX2NyZWF0ZXJvdXRlcmNhY2hla2V5LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShzZWdtZW50Q2hpbGQpO1xuICAgICAgICBjb25zdCBvbGRTZWdtZW50TWFwQ2hpbGQgPSBvbGRQYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSk7XG4gICAgICAgIGlmIChvbGRTZWdtZW50TWFwQ2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkQ2FjaGVOb2RlQ2hpbGQgPSBvbGRTZWdtZW50TWFwQ2hpbGQuZ2V0KHNlZ21lbnRLZXlDaGlsZCk7XG4gICAgICAgICAgICBpZiAob2xkQ2FjaGVOb2RlQ2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NhY2hlTm9kZUNoaWxkID0gdXBkYXRlQ2FjaGVOb2RlT25Qb3BzdGF0ZVJlc3RvcmF0aW9uKG9sZENhY2hlTm9kZUNoaWxkLCByb3V0ZXJTdGF0ZUNoaWxkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTZWdtZW50TWFwQ2hpbGQgPSBuZXcgTWFwKG9sZFNlZ21lbnRNYXBDaGlsZCk7XG4gICAgICAgICAgICAgICAgbmV3U2VnbWVudE1hcENoaWxkLnNldChzZWdtZW50S2V5Q2hpbGQsIG5ld0NhY2hlTm9kZUNoaWxkKTtcbiAgICAgICAgICAgICAgICBuZXdQYXJhbGxlbFJvdXRlcy5zZXQocGFyYWxsZWxSb3V0ZUtleSwgbmV3U2VnbWVudE1hcENoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBPbmx5IHNob3cgcHJlZmV0Y2hlZCBkYXRhIGlmIHRoZSBkeW5hbWljIGRhdGEgaXMgc3RpbGwgcGVuZGluZy5cbiAgICAvL1xuICAgIC8vIFRlaG5pY2FsbHksIHdoYXQgd2UncmUgYWN0dWFsbHkgY2hlY2tpbmcgaXMgd2hldGhlciB0aGUgZHluYW1pYyBuZXR3b3JrXG4gICAgLy8gcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLiBCdXQgc2luY2UgaXQncyBhIHN0cmVhbWluZyByZXNwb25zZSwgdGhpcyBkb2VzIG5vdFxuICAgIC8vIG1lYW4gdGhhdCBhbGwgdGhlIGR5bmFtaWMgZGF0YSBoYXMgZnVsbHkgc3RyZWFtZWQgaW4uIEl0IGp1c3QgbWVhbnMgdGhhdFxuICAgIC8vIF9zb21lXyBvZiB0aGUgZHluYW1pYyBkYXRhIHdhcyByZWNlaXZlZC4gQnV0IGFzIGEgaGV1cmlzdGljLCB3ZSBhc3N1bWUgdGhhdFxuICAgIC8vIHRoZSByZXN0IGR5bmFtaWMgZGF0YSB3aWxsIHN0cmVhbSBpbiBxdWlja2x5LCBzbyBpdCdzIHN0aWxsIGJldHRlciB0byBza2lwXG4gICAgLy8gdGhlIHByZWZldGNoIHN0YXRlLlxuICAgIGNvbnN0IHJzYyA9IG9sZENhY2hlTm9kZS5yc2M7XG4gICAgY29uc3Qgc2hvdWxkVXNlUHJlZmV0Y2ggPSBpc0RlZmVycmVkUnNjKHJzYykgJiYgcnNjLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgIHJzYyxcbiAgICAgICAgaGVhZDogb2xkQ2FjaGVOb2RlLmhlYWQsXG4gICAgICAgIHByZWZldGNoSGVhZDogc2hvdWxkVXNlUHJlZmV0Y2ggPyBvbGRDYWNoZU5vZGUucHJlZmV0Y2hIZWFkIDogbnVsbCxcbiAgICAgICAgcHJlZmV0Y2hSc2M6IHNob3VsZFVzZVByZWZldGNoID8gb2xkQ2FjaGVOb2RlLnByZWZldGNoUnNjIDogbnVsbCxcbiAgICAgICAgLy8gVGhlc2UgYXJlIHRoZSBjbG9uZWQgY2hpbGRyZW4gd2UgY29tcHV0ZWQgYWJvdmVcbiAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ld1BhcmFsbGVsUm91dGVzXG4gICAgfTtcbn1cbmNvbnN0IERFRkVSUkVEID0gU3ltYm9sKCk7XG4vLyBUaGlzIHR5cGUgZXhpc3RzIHRvIGRpc3Rpbmd1aXNoIGEgRGVmZXJyZWRSc2MgZnJvbSBhIEZsaWdodCBwcm9taXNlLiBJdCdzIGFcbi8vIGNvbXByb21pc2UgdG8gYXZvaWQgYWRkaW5nIGFuIGV4dHJhIGZpZWxkIG9uIGV2ZXJ5IENhY2hlIE5vZGUsIHdoaWNoIHdvdWxkIGJlXG4vLyBhd2t3YXJkIGJlY2F1c2UgdGhlIHByZS1QUFIgcGFydHMgb2YgY29kZWJhc2Ugd291bGQgbmVlZCB0byBhY2NvdW50IGZvciBpdCxcbi8vIHRvby4gV2UgY2FuIHJlbW92ZSBpdCBvbmNlIHR5cGUgQ2FjaGUgTm9kZSB0eXBlIGlzIG1vcmUgc2V0dGxlZC5cbmZ1bmN0aW9uIGlzRGVmZXJyZWRSc2ModmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUudGFnID09PSBERUZFUlJFRDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZURlZmVycmVkUnNjKCkge1xuICAgIGxldCByZXNvbHZlO1xuICAgIGxldCByZWplY3Q7XG4gICAgY29uc3QgcGVuZGluZ1JzYyA9IG5ldyBQcm9taXNlKChyZXMsIHJlaik9PntcbiAgICAgICAgcmVzb2x2ZSA9IHJlcztcbiAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgIH0pO1xuICAgIHBlbmRpbmdSc2Muc3RhdHVzID0gXCJwZW5kaW5nXCI7XG4gICAgcGVuZGluZ1JzYy5yZXNvbHZlID0gKHZhbHVlKT0+e1xuICAgICAgICBpZiAocGVuZGluZ1JzYy5zdGF0dXMgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBmdWxmaWxsZWRSc2MgPSBwZW5kaW5nUnNjO1xuICAgICAgICAgICAgZnVsZmlsbGVkUnNjLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCI7XG4gICAgICAgICAgICBmdWxmaWxsZWRSc2MudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBwZW5kaW5nUnNjLnJlamVjdCA9IChlcnJvcik9PntcbiAgICAgICAgaWYgKHBlbmRpbmdSc2Muc3RhdHVzID09PSBcInBlbmRpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgcmVqZWN0ZWRSc2MgPSBwZW5kaW5nUnNjO1xuICAgICAgICAgICAgcmVqZWN0ZWRSc2Muc3RhdHVzID0gXCJyZWplY3RlZFwiO1xuICAgICAgICAgICAgcmVqZWN0ZWRSc2MucmVhc29uID0gZXJyb3I7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBwZW5kaW5nUnNjLnRhZyA9IERFRkVSUkVEO1xuICAgIHJldHVybiBwZW5kaW5nUnNjO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcHItbmF2aWdhdGlvbnMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwidXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uIiwibGlzdGVuRm9yRHluYW1pY1JlcXVlc3QiLCJhYm9ydFRhc2siLCJ1cGRhdGVDYWNoZU5vZGVPblBvcHN0YXRlUmVzdG9yYXRpb24iLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfc2VnbWVudCIsInJlcXVpcmUiLCJfbWF0Y2hzZWdtZW50cyIsIl9jcmVhdGVyb3V0ZXJjYWNoZWtleSIsIm9sZENhY2hlTm9kZSIsIm9sZFJvdXRlclN0YXRlIiwibmV3Um91dGVyU3RhdGUiLCJwcmVmZXRjaERhdGEiLCJwcmVmZXRjaEhlYWQiLCJpc1ByZWZldGNoU3RhbGUiLCJvbGRSb3V0ZXJTdGF0ZUNoaWxkcmVuIiwibmV3Um91dGVyU3RhdGVDaGlsZHJlbiIsInByZWZldGNoRGF0YUNoaWxkcmVuIiwib2xkUGFyYWxsZWxSb3V0ZXMiLCJwYXJhbGxlbFJvdXRlcyIsInByZWZldGNoUGFyYWxsZWxSb3V0ZXMiLCJNYXAiLCJwYXRjaGVkUm91dGVyU3RhdGVDaGlsZHJlbiIsInRhc2tDaGlsZHJlbiIsInBhcmFsbGVsUm91dGVLZXkiLCJuZXdSb3V0ZXJTdGF0ZUNoaWxkIiwib2xkUm91dGVyU3RhdGVDaGlsZCIsIm9sZFNlZ21lbnRNYXBDaGlsZCIsInByZWZldGNoRGF0YUNoaWxkIiwibmV3U2VnbWVudENoaWxkIiwibmV3U2VnbWVudEtleUNoaWxkIiwiY3JlYXRlUm91dGVyQ2FjaGVLZXkiLCJvbGRTZWdtZW50Q2hpbGQiLCJ1bmRlZmluZWQiLCJvbGRDYWNoZU5vZGVDaGlsZCIsInRhc2tDaGlsZCIsIlBBR0VfU0VHTUVOVF9LRVkiLCJzcGF3blBlbmRpbmdUYXNrIiwiREVGQVVMVF9TRUdNRU5UX0tFWSIsInNwYXduUmV1c2VkVGFzayIsIm1hdGNoU2VnbWVudCIsInNwYXduVGFza0Zvck1pc3NpbmdEYXRhIiwic2V0IiwibmV3Q2FjaGVOb2RlQ2hpbGQiLCJub2RlIiwibmV3U2VnbWVudE1hcENoaWxkIiwicm91dGUiLCJuZXdDYWNoZU5vZGUiLCJsYXp5RGF0YSIsInJzYyIsInByZWZldGNoUnNjIiwiaGVhZCIsInBhdGNoUm91dGVyU3RhdGVXaXRoTmV3Q2hpbGRyZW4iLCJjaGlsZHJlbiIsImJhc2VSb3V0ZXJTdGF0ZSIsIm5ld0NoaWxkcmVuIiwiY2xvbmUiLCJyb3V0ZXJTdGF0ZSIsInBlbmRpbmdDYWNoZU5vZGUiLCJjcmVhdGVQZW5kaW5nQ2FjaGVOb2RlIiwicmV1c2VkUm91dGVyU3RhdGUiLCJ0YXNrIiwicmVzcG9uc2VQcm9taXNlIiwidGhlbiIsInJlc3BvbnNlIiwiZmxpZ2h0RGF0YSIsImZsaWdodERhdGFQYXRoIiwic2VnbWVudFBhdGgiLCJzbGljZSIsInNlcnZlclJvdXRlclN0YXRlIiwibGVuZ3RoIiwiZHluYW1pY0RhdGEiLCJkeW5hbWljSGVhZCIsIndyaXRlRHluYW1pY0RhdGFJbnRvUGVuZGluZ1Rhc2siLCJlcnJvciIsInJvb3RUYXNrIiwiaSIsInNlZ21lbnQiLCJ0YXNrU2VnbWVudCIsImZpbmlzaFRhc2tVc2luZ0R5bmFtaWNEYXRhUGF5bG9hZCIsInRhc2tOb2RlIiwiZmluaXNoUGVuZGluZ0NhY2hlTm9kZSIsInNlcnZlckNoaWxkcmVuIiwiZHluYW1pY0RhdGFDaGlsZHJlbiIsInNlcnZlclJvdXRlclN0YXRlQ2hpbGQiLCJkeW5hbWljRGF0YUNoaWxkIiwicm91dGVyU3RhdGVDaGlsZHJlbiIsInJvdXRlclN0YXRlQ2hpbGQiLCJzZWdtZW50Q2hpbGQiLCJzZWdtZW50S2V5Q2hpbGQiLCJpc0xlYWZTZWdtZW50Iiwic2l6ZSIsIm1heWJlUHJlZmV0Y2hSc2MiLCJjcmVhdGVEZWZlcnJlZFJzYyIsImNhY2hlTm9kZSIsInRhc2tTdGF0ZSIsInNlcnZlclN0YXRlIiwidGFza1N0YXRlQ2hpbGRyZW4iLCJzZXJ2ZXJTdGF0ZUNoaWxkcmVuIiwiZGF0YUNoaWxkcmVuIiwidGFza1N0YXRlQ2hpbGQiLCJzZXJ2ZXJTdGF0ZUNoaWxkIiwiZGF0YUNoaWxkIiwic2VnbWVudE1hcENoaWxkIiwidGFza1NlZ21lbnRDaGlsZCIsInRhc2tTZWdtZW50S2V5Q2hpbGQiLCJjYWNoZU5vZGVDaGlsZCIsImFib3J0UGVuZGluZ0NhY2hlTm9kZSIsImR5bmFtaWNTZWdtZW50RGF0YSIsImlzRGVmZXJyZWRSc2MiLCJyZXNvbHZlIiwidmFsdWVzIiwicmVqZWN0IiwibmV3UGFyYWxsZWxSb3V0ZXMiLCJzaG91bGRVc2VQcmVmZXRjaCIsInN0YXR1cyIsIkRFRkVSUkVEIiwiU3ltYm9sIiwidGFnIiwicGVuZGluZ1JzYyIsIlByb21pc2UiLCJyZXMiLCJyZWoiLCJmdWxmaWxsZWRSc2MiLCJyZWplY3RlZFJzYyIsInJlYXNvbiIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/create-prefetch-cache-key.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/create-prefetch-cache-key.js ***! + \*******************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createPrefetchCacheKey\", ({\n enumerable: true,\n get: function() {\n return createPrefetchCacheKey;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ../../../../shared/lib/router/utils/add-path-prefix */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ../../../../shared/lib/router/utils/path-has-prefix */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nfunction createPrefetchCacheKey(url, nextUrl) {\n const pathnameFromUrl = (0, _createhreffromurl.createHrefFromUrl)(url, false);\n // delimit the prefix so we don't conflict with other pages\n const nextUrlPrefix = \"\" + nextUrl + \"%\";\n // Route interception depends on `nextUrl` values which aren't a 1:1 mapping to a URL\n // The cache key that we store needs to use `nextUrl` to properly distinguish cache entries\n if (nextUrl && !(0, _pathhasprefix.pathHasPrefix)(pathnameFromUrl, nextUrl)) {\n return (0, _addpathprefix.addPathPrefix)(pathnameFromUrl, nextUrlPrefix);\n }\n return pathnameFromUrl;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=create-prefetch-cache-key.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2NyZWF0ZS1wcmVmZXRjaC1jYWNoZS1rZXkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDBEQUF5RDtJQUNyREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGlCQUFpQkMsbUJBQU9BLENBQUMsc0lBQXFEO0FBQ3BGLE1BQU1DLGlCQUFpQkQsbUJBQU9BLENBQUMsc0lBQXFEO0FBQ3BGLE1BQU1FLHFCQUFxQkYsbUJBQU9BLENBQUMsd0hBQXlCO0FBQzVELFNBQVNGLHVCQUF1QkssR0FBRyxFQUFFQyxPQUFPO0lBQ3hDLE1BQU1DLGtCQUFrQixDQUFDLEdBQUdILG1CQUFtQkksaUJBQWlCLEVBQUVILEtBQ2xFO0lBQ0EsMkRBQTJEO0lBQzNELE1BQU1JLGdCQUFnQixLQUFLSCxVQUFVO0lBQ3JDLHFGQUFxRjtJQUNyRiwyRkFBMkY7SUFDM0YsSUFBSUEsV0FBVyxDQUFDLENBQUMsR0FBR0gsZUFBZU8sYUFBYSxFQUFFSCxpQkFBaUJELFVBQVU7UUFDekUsT0FBTyxDQUFDLEdBQUdMLGVBQWVVLGFBQWEsRUFBRUosaUJBQWlCRTtJQUM5RDtJQUNBLE9BQU9GO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT1gsUUFBUWdCLE9BQU8sS0FBSyxjQUFlLE9BQU9oQixRQUFRZ0IsT0FBTyxLQUFLLFlBQVloQixRQUFRZ0IsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPaEIsUUFBUWdCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktuQixPQUFPQyxjQUFjLENBQUNDLFFBQVFnQixPQUFPLEVBQUUsY0FBYztRQUFFZixPQUFPO0lBQUs7SUFDbkVILE9BQU9vQixNQUFNLENBQUNsQixRQUFRZ0IsT0FBTyxFQUFFaEI7SUFDL0JtQixPQUFPbkIsT0FBTyxHQUFHQSxRQUFRZ0IsT0FBTztBQUNsQyxFQUVBLHFEQUFxRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2NyZWF0ZS1wcmVmZXRjaC1jYWNoZS1rZXkuanM/ZjQ5MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByZWZldGNoQ2FjaGVLZXlcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVByZWZldGNoQ2FjaGVLZXk7XG4gICAgfVxufSk7XG5jb25zdCBfYWRkcGF0aHByZWZpeCA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1wcmVmaXhcIik7XG5jb25zdCBfcGF0aGhhc3ByZWZpeCA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXRoLWhhcy1wcmVmaXhcIik7XG5jb25zdCBfY3JlYXRlaHJlZmZyb211cmwgPSByZXF1aXJlKFwiLi4vY3JlYXRlLWhyZWYtZnJvbS11cmxcIik7XG5mdW5jdGlvbiBjcmVhdGVQcmVmZXRjaENhY2hlS2V5KHVybCwgbmV4dFVybCkge1xuICAgIGNvbnN0IHBhdGhuYW1lRnJvbVVybCA9ICgwLCBfY3JlYXRlaHJlZmZyb211cmwuY3JlYXRlSHJlZkZyb21VcmwpKHVybCwgLy8gRW5zdXJlcyB0aGUgaGFzaCBpcyBub3QgcGFydCBvZiB0aGUgY2FjaGUga2V5IGFzIGl0IGRvZXMgbm90IGltcGFjdCB0aGUgc2VydmVyIGZldGNoXG4gICAgZmFsc2UpO1xuICAgIC8vIGRlbGltaXQgdGhlIHByZWZpeCBzbyB3ZSBkb24ndCBjb25mbGljdCB3aXRoIG90aGVyIHBhZ2VzXG4gICAgY29uc3QgbmV4dFVybFByZWZpeCA9IFwiXCIgKyBuZXh0VXJsICsgXCIlXCI7XG4gICAgLy8gUm91dGUgaW50ZXJjZXB0aW9uIGRlcGVuZHMgb24gYG5leHRVcmxgIHZhbHVlcyB3aGljaCBhcmVuJ3QgYSAxOjEgbWFwcGluZyB0byBhIFVSTFxuICAgIC8vIFRoZSBjYWNoZSBrZXkgdGhhdCB3ZSBzdG9yZSBuZWVkcyB0byB1c2UgYG5leHRVcmxgIHRvIHByb3Blcmx5IGRpc3Rpbmd1aXNoIGNhY2hlIGVudHJpZXNcbiAgICBpZiAobmV4dFVybCAmJiAhKDAsIF9wYXRoaGFzcHJlZml4LnBhdGhIYXNQcmVmaXgpKHBhdGhuYW1lRnJvbVVybCwgbmV4dFVybCkpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYWRkcGF0aHByZWZpeC5hZGRQYXRoUHJlZml4KShwYXRobmFtZUZyb21VcmwsIG5leHRVcmxQcmVmaXgpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aG5hbWVGcm9tVXJsO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGUtcHJlZmV0Y2gtY2FjaGUta2V5LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJjcmVhdGVQcmVmZXRjaENhY2hlS2V5IiwiX2FkZHBhdGhwcmVmaXgiLCJyZXF1aXJlIiwiX3BhdGhoYXNwcmVmaXgiLCJfY3JlYXRlaHJlZmZyb211cmwiLCJ1cmwiLCJuZXh0VXJsIiwicGF0aG5hbWVGcm9tVXJsIiwiY3JlYXRlSHJlZkZyb21VcmwiLCJuZXh0VXJsUHJlZml4IiwicGF0aEhhc1ByZWZpeCIsImFkZFBhdGhQcmVmaXgiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/create-prefetch-cache-key.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/fast-refresh-reducer.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/fast-refresh-reducer.js ***! + \**************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fastRefreshReducer\", ({\n enumerable: true,\n get: function() {\n return fastRefreshReducer;\n }\n}));\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\n// A version of refresh reducer that keeps the cache around instead of wiping all of it.\nfunction fastRefreshReducerImpl(state, action) {\n const { origin } = action;\n const mutable = {};\n const href = state.canonicalUrl;\n mutable.preserveCustomHistoryState = false;\n const cache = (0, _approuter.createEmptyCacheNode)();\n // TODO-APP: verify that `href` is not an external url.\n // Fetch data from the root of the tree.\n cache.lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(href, origin), [\n state.tree[0],\n state.tree[1],\n state.tree[2],\n \"refetch\"\n ], state.nextUrl, state.buildId);\n return cache.lazyData.then((param)=>{\n let [flightData, canonicalUrlOverride] = param;\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === \"string\") {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n // Remove cache.lazyData as it has been resolved at this point.\n cache.lazyData = null;\n let currentTree = state.tree;\n let currentCache = state.cache;\n for (const flightDataPath of flightData){\n // FlightDataPath with more than two items means unexpected Flight data was returned\n if (flightDataPath.length !== 3) {\n // TODO-APP: handle this case better\n console.log(\"REFRESH FAILED\");\n return state;\n }\n // Given the path can only have two items the items are only the router state and rsc for the root.\n const [treePatch] = flightDataPath;\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)([\n \"\"\n ], currentTree, treePatch);\n if (newTree === null) {\n return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, href, state.pushRef.pendingPush);\n }\n const canonicalUrlOverrideHref = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : undefined;\n if (canonicalUrlOverride) {\n mutable.canonicalUrl = canonicalUrlOverrideHref;\n }\n const applied = (0, _applyflightdata.applyFlightData)(currentCache, cache, flightDataPath);\n if (applied) {\n mutable.cache = cache;\n currentCache = cache;\n }\n mutable.patchedTree = newTree;\n mutable.canonicalUrl = href;\n currentTree = newTree;\n }\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, ()=>state);\n}\nfunction fastRefreshReducerNoop(state, _action) {\n return state;\n}\nconst fastRefreshReducer = false ? 0 : fastRefreshReducerImpl;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fast-refresh-reducer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2Zhc3QtcmVmcmVzaC1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxzREFBcUQ7SUFDakRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyx1QkFBdUJDLG1CQUFPQSxDQUFDLDBIQUEwQjtBQUMvRCxNQUFNQyxxQkFBcUJELG1CQUFPQSxDQUFDLHdIQUF5QjtBQUM1RCxNQUFNRSwrQkFBK0JGLG1CQUFPQSxDQUFDLGdKQUFxQztBQUNsRixNQUFNRywrQkFBK0JILG1CQUFPQSxDQUFDLGdKQUFxQztBQUNsRixNQUFNSSxtQkFBbUJKLG1CQUFPQSxDQUFDLHdIQUFvQjtBQUNyRCxNQUFNSyxpQkFBaUJMLG1CQUFPQSxDQUFDLDRHQUFtQjtBQUNsRCxNQUFNTSxtQkFBbUJOLG1CQUFPQSxDQUFDLGtIQUFzQjtBQUN2RCxNQUFNTyxhQUFhUCxtQkFBT0EsQ0FBQyx3RkFBa0I7QUFDN0MsTUFBTVEseUJBQXlCUixtQkFBT0EsQ0FBQyw4SEFBNEI7QUFDbkUsd0ZBQXdGO0FBQ3hGLFNBQVNTLHVCQUF1QkMsS0FBSyxFQUFFQyxNQUFNO0lBQ3pDLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdEO0lBQ25CLE1BQU1FLFVBQVUsQ0FBQztJQUNqQixNQUFNQyxPQUFPSixNQUFNSyxZQUFZO0lBQy9CRixRQUFRRywwQkFBMEIsR0FBRztJQUNyQyxNQUFNQyxRQUFRLENBQUMsR0FBR1YsV0FBV1csb0JBQW9CO0lBQ2pELHVEQUF1RDtJQUN2RCx3Q0FBd0M7SUFDeENELE1BQU1FLFFBQVEsR0FBRyxDQUFDLEdBQUdwQixxQkFBcUJxQixtQkFBbUIsRUFBRSxJQUFJQyxJQUFJUCxNQUFNRixTQUFTO1FBQ2xGRixNQUFNWSxJQUFJLENBQUMsRUFBRTtRQUNiWixNQUFNWSxJQUFJLENBQUMsRUFBRTtRQUNiWixNQUFNWSxJQUFJLENBQUMsRUFBRTtRQUNiO0tBQ0gsRUFBRVosTUFBTWEsT0FBTyxFQUFFYixNQUFNYyxPQUFPO0lBQy9CLE9BQU9QLE1BQU1FLFFBQVEsQ0FBQ00sSUFBSSxDQUFDLENBQUNDO1FBQ3hCLElBQUksQ0FBQ0MsWUFBWUMscUJBQXFCLEdBQUdGO1FBQ3pDLDREQUE0RDtRQUM1RCxJQUFJLE9BQU9DLGVBQWUsVUFBVTtZQUNoQyxPQUFPLENBQUMsR0FBR3ZCLGlCQUFpQnlCLGlCQUFpQixFQUFFbkIsT0FBT0csU0FBU2MsWUFBWWpCLE1BQU1vQixPQUFPLENBQUNDLFdBQVc7UUFDeEc7UUFDQSwrREFBK0Q7UUFDL0RkLE1BQU1FLFFBQVEsR0FBRztRQUNqQixJQUFJYSxjQUFjdEIsTUFBTVksSUFBSTtRQUM1QixJQUFJVyxlQUFldkIsTUFBTU8sS0FBSztRQUM5QixLQUFLLE1BQU1pQixrQkFBa0JQLFdBQVc7WUFDcEMsb0ZBQW9GO1lBQ3BGLElBQUlPLGVBQWVDLE1BQU0sS0FBSyxHQUFHO2dCQUM3QixvQ0FBb0M7Z0JBQ3BDQyxRQUFRQyxHQUFHLENBQUM7Z0JBQ1osT0FBTzNCO1lBQ1g7WUFDQSxtR0FBbUc7WUFDbkcsTUFBTSxDQUFDNEIsVUFBVSxHQUFHSjtZQUNwQixNQUFNSyxVQUFVLENBQUMsR0FBR3JDLDZCQUE2QnNDLHNDQUFzQyxFQUN2RjtnQkFDSTthQUNILEVBQUVSLGFBQWFNO1lBQ2hCLElBQUlDLFlBQVksTUFBTTtnQkFDbEIsT0FBTyxDQUFDLEdBQUcvQix1QkFBdUJpQyxxQkFBcUIsRUFBRS9CLE9BQU9DLFFBQVEyQjtZQUM1RTtZQUNBLElBQUksQ0FBQyxHQUFHbkMsNkJBQTZCdUMsMkJBQTJCLEVBQUVWLGFBQWFPLFVBQVU7Z0JBQ3JGLE9BQU8sQ0FBQyxHQUFHbkMsaUJBQWlCeUIsaUJBQWlCLEVBQUVuQixPQUFPRyxTQUFTQyxNQUFNSixNQUFNb0IsT0FBTyxDQUFDQyxXQUFXO1lBQ2xHO1lBQ0EsTUFBTVksMkJBQTJCZix1QkFBdUIsQ0FBQyxHQUFHM0IsbUJBQW1CMkMsaUJBQWlCLEVBQUVoQix3QkFBd0JpQjtZQUMxSCxJQUFJakIsc0JBQXNCO2dCQUN0QmYsUUFBUUUsWUFBWSxHQUFHNEI7WUFDM0I7WUFDQSxNQUFNRyxVQUFVLENBQUMsR0FBR3hDLGlCQUFpQnlDLGVBQWUsRUFBRWQsY0FBY2hCLE9BQU9pQjtZQUMzRSxJQUFJWSxTQUFTO2dCQUNUakMsUUFBUUksS0FBSyxHQUFHQTtnQkFDaEJnQixlQUFlaEI7WUFDbkI7WUFDQUosUUFBUW1DLFdBQVcsR0FBR1Q7WUFDdEIxQixRQUFRRSxZQUFZLEdBQUdEO1lBQ3ZCa0IsY0FBY087UUFDbEI7UUFDQSxPQUFPLENBQUMsR0FBR2xDLGVBQWU0QyxhQUFhLEVBQUV2QyxPQUFPRztJQUNwRCxHQUFHLElBQUlIO0FBQ1g7QUFDQSxTQUFTd0MsdUJBQXVCeEMsS0FBSyxFQUFFeUMsT0FBTztJQUMxQyxPQUFPekM7QUFDWDtBQUNBLE1BQU1aLHFCQUFxQnNELE1BQXFDLEdBQUdGLENBQXNCQSxHQUFHekM7QUFFNUYsSUFBSSxDQUFDLE9BQU9mLFFBQVEyRCxPQUFPLEtBQUssY0FBZSxPQUFPM0QsUUFBUTJELE9BQU8sS0FBSyxZQUFZM0QsUUFBUTJELE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzNELFFBQVEyRCxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLOUQsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMkQsT0FBTyxFQUFFLGNBQWM7UUFBRTFELE9BQU87SUFBSztJQUNuRUgsT0FBTytELE1BQU0sQ0FBQzdELFFBQVEyRCxPQUFPLEVBQUUzRDtJQUMvQjhELE9BQU85RCxPQUFPLEdBQUdBLFFBQVEyRCxPQUFPO0FBQ2xDLEVBRUEsZ0RBQWdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZmFzdC1yZWZyZXNoLXJlZHVjZXIuanM/MTNhMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZhc3RSZWZyZXNoUmVkdWNlclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmFzdFJlZnJlc2hSZWR1Y2VyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ZldGNoc2VydmVycmVzcG9uc2UgPSByZXF1aXJlKFwiLi4vZmV0Y2gtc2VydmVyLXJlc3BvbnNlXCIpO1xuY29uc3QgX2NyZWF0ZWhyZWZmcm9tdXJsID0gcmVxdWlyZShcIi4uL2NyZWF0ZS1ocmVmLWZyb20tdXJsXCIpO1xuY29uc3QgX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZSA9IHJlcXVpcmUoXCIuLi9hcHBseS1yb3V0ZXItc3RhdGUtcGF0Y2gtdG8tdHJlZVwiKTtcbmNvbnN0IF9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQgPSByZXF1aXJlKFwiLi4vaXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXRcIik7XG5jb25zdCBfbmF2aWdhdGVyZWR1Y2VyID0gcmVxdWlyZShcIi4vbmF2aWdhdGUtcmVkdWNlclwiKTtcbmNvbnN0IF9oYW5kbGVtdXRhYmxlID0gcmVxdWlyZShcIi4uL2hhbmRsZS1tdXRhYmxlXCIpO1xuY29uc3QgX2FwcGx5ZmxpZ2h0ZGF0YSA9IHJlcXVpcmUoXCIuLi9hcHBseS1mbGlnaHQtZGF0YVwiKTtcbmNvbnN0IF9hcHByb3V0ZXIgPSByZXF1aXJlKFwiLi4vLi4vYXBwLXJvdXRlclwiKTtcbmNvbnN0IF9oYW5kbGVzZWdtZW50bWlzbWF0Y2ggPSByZXF1aXJlKFwiLi4vaGFuZGxlLXNlZ21lbnQtbWlzbWF0Y2hcIik7XG4vLyBBIHZlcnNpb24gb2YgcmVmcmVzaCByZWR1Y2VyIHRoYXQga2VlcHMgdGhlIGNhY2hlIGFyb3VuZCBpbnN0ZWFkIG9mIHdpcGluZyBhbGwgb2YgaXQuXG5mdW5jdGlvbiBmYXN0UmVmcmVzaFJlZHVjZXJJbXBsKHN0YXRlLCBhY3Rpb24pIHtcbiAgICBjb25zdCB7IG9yaWdpbiB9ID0gYWN0aW9uO1xuICAgIGNvbnN0IG11dGFibGUgPSB7fTtcbiAgICBjb25zdCBocmVmID0gc3RhdGUuY2Fub25pY2FsVXJsO1xuICAgIG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUgPSBmYWxzZTtcbiAgICBjb25zdCBjYWNoZSA9ICgwLCBfYXBwcm91dGVyLmNyZWF0ZUVtcHR5Q2FjaGVOb2RlKSgpO1xuICAgIC8vIFRPRE8tQVBQOiB2ZXJpZnkgdGhhdCBgaHJlZmAgaXMgbm90IGFuIGV4dGVybmFsIHVybC5cbiAgICAvLyBGZXRjaCBkYXRhIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHRyZWUuXG4gICAgY2FjaGUubGF6eURhdGEgPSAoMCwgX2ZldGNoc2VydmVycmVzcG9uc2UuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkobmV3IFVSTChocmVmLCBvcmlnaW4pLCBbXG4gICAgICAgIHN0YXRlLnRyZWVbMF0sXG4gICAgICAgIHN0YXRlLnRyZWVbMV0sXG4gICAgICAgIHN0YXRlLnRyZWVbMl0sXG4gICAgICAgIFwicmVmZXRjaFwiXG4gICAgXSwgc3RhdGUubmV4dFVybCwgc3RhdGUuYnVpbGRJZCk7XG4gICAgcmV0dXJuIGNhY2hlLmxhenlEYXRhLnRoZW4oKHBhcmFtKT0+e1xuICAgICAgICBsZXQgW2ZsaWdodERhdGEsIGNhbm9uaWNhbFVybE92ZXJyaWRlXSA9IHBhcmFtO1xuICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIG5hdmlnYXRpbmcgdG8gcGFnZSBpbiBgcGFnZXNgIGZyb20gYGFwcGBcbiAgICAgICAgaWYgKHR5cGVvZiBmbGlnaHREYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIF9uYXZpZ2F0ZXJlZHVjZXIuaGFuZGxlRXh0ZXJuYWxVcmwpKHN0YXRlLCBtdXRhYmxlLCBmbGlnaHREYXRhLCBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgY2FjaGUubGF6eURhdGEgYXMgaXQgaGFzIGJlZW4gcmVzb2x2ZWQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgY2FjaGUubGF6eURhdGEgPSBudWxsO1xuICAgICAgICBsZXQgY3VycmVudFRyZWUgPSBzdGF0ZS50cmVlO1xuICAgICAgICBsZXQgY3VycmVudENhY2hlID0gc3RhdGUuY2FjaGU7XG4gICAgICAgIGZvciAoY29uc3QgZmxpZ2h0RGF0YVBhdGggb2YgZmxpZ2h0RGF0YSl7XG4gICAgICAgICAgICAvLyBGbGlnaHREYXRhUGF0aCB3aXRoIG1vcmUgdGhhbiB0d28gaXRlbXMgbWVhbnMgdW5leHBlY3RlZCBGbGlnaHQgZGF0YSB3YXMgcmV0dXJuZWRcbiAgICAgICAgICAgIGlmIChmbGlnaHREYXRhUGF0aC5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPLUFQUDogaGFuZGxlIHRoaXMgY2FzZSBiZXR0ZXJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJFRlJFU0ggRkFJTEVEXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEdpdmVuIHRoZSBwYXRoIGNhbiBvbmx5IGhhdmUgdHdvIGl0ZW1zIHRoZSBpdGVtcyBhcmUgb25seSB0aGUgcm91dGVyIHN0YXRlIGFuZCByc2MgZm9yIHRoZSByb290LlxuICAgICAgICAgICAgY29uc3QgW3RyZWVQYXRjaF0gPSBmbGlnaHREYXRhUGF0aDtcbiAgICAgICAgICAgIGNvbnN0IG5ld1RyZWUgPSAoMCwgX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdCkoLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgIF0sIGN1cnJlbnRUcmVlLCB0cmVlUGF0Y2gpO1xuICAgICAgICAgICAgaWYgKG5ld1RyZWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9oYW5kbGVzZWdtZW50bWlzbWF0Y2guaGFuZGxlU2VnbWVudE1pc21hdGNoKShzdGF0ZSwgYWN0aW9uLCB0cmVlUGF0Y2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCgwLCBfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0LmlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCkoY3VycmVudFRyZWUsIG5ld1RyZWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfbmF2aWdhdGVyZWR1Y2VyLmhhbmRsZUV4dGVybmFsVXJsKShzdGF0ZSwgbXV0YWJsZSwgaHJlZiwgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYW5vbmljYWxVcmxPdmVycmlkZUhyZWYgPSBjYW5vbmljYWxVcmxPdmVycmlkZSA/ICgwLCBfY3JlYXRlaHJlZmZyb211cmwuY3JlYXRlSHJlZkZyb21VcmwpKGNhbm9uaWNhbFVybE92ZXJyaWRlKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjYW5vbmljYWxVcmxPdmVycmlkZSkge1xuICAgICAgICAgICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBwbGllZCA9ICgwLCBfYXBwbHlmbGlnaHRkYXRhLmFwcGx5RmxpZ2h0RGF0YSkoY3VycmVudENhY2hlLCBjYWNoZSwgZmxpZ2h0RGF0YVBhdGgpO1xuICAgICAgICAgICAgaWYgKGFwcGxpZWQpIHtcbiAgICAgICAgICAgICAgICBtdXRhYmxlLmNhY2hlID0gY2FjaGU7XG4gICAgICAgICAgICAgICAgY3VycmVudENhY2hlID0gY2FjaGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtdXRhYmxlLnBhdGNoZWRUcmVlID0gbmV3VHJlZTtcbiAgICAgICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gaHJlZjtcbiAgICAgICAgICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDAsIF9oYW5kbGVtdXRhYmxlLmhhbmRsZU11dGFibGUpKHN0YXRlLCBtdXRhYmxlKTtcbiAgICB9LCAoKT0+c3RhdGUpO1xufVxuZnVuY3Rpb24gZmFzdFJlZnJlc2hSZWR1Y2VyTm9vcChzdGF0ZSwgX2FjdGlvbikge1xuICAgIHJldHVybiBzdGF0ZTtcbn1cbmNvbnN0IGZhc3RSZWZyZXNoUmVkdWNlciA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZhc3RSZWZyZXNoUmVkdWNlck5vb3AgOiBmYXN0UmVmcmVzaFJlZHVjZXJJbXBsO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1mYXN0LXJlZnJlc2gtcmVkdWNlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZmFzdFJlZnJlc2hSZWR1Y2VyIiwiX2ZldGNoc2VydmVycmVzcG9uc2UiLCJyZXF1aXJlIiwiX2NyZWF0ZWhyZWZmcm9tdXJsIiwiX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZSIsIl9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQiLCJfbmF2aWdhdGVyZWR1Y2VyIiwiX2hhbmRsZW11dGFibGUiLCJfYXBwbHlmbGlnaHRkYXRhIiwiX2FwcHJvdXRlciIsIl9oYW5kbGVzZWdtZW50bWlzbWF0Y2giLCJmYXN0UmVmcmVzaFJlZHVjZXJJbXBsIiwic3RhdGUiLCJhY3Rpb24iLCJvcmlnaW4iLCJtdXRhYmxlIiwiaHJlZiIsImNhbm9uaWNhbFVybCIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiY2FjaGUiLCJjcmVhdGVFbXB0eUNhY2hlTm9kZSIsImxhenlEYXRhIiwiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIsIlVSTCIsInRyZWUiLCJuZXh0VXJsIiwiYnVpbGRJZCIsInRoZW4iLCJwYXJhbSIsImZsaWdodERhdGEiLCJjYW5vbmljYWxVcmxPdmVycmlkZSIsImhhbmRsZUV4dGVybmFsVXJsIiwicHVzaFJlZiIsInBlbmRpbmdQdXNoIiwiY3VycmVudFRyZWUiLCJjdXJyZW50Q2FjaGUiLCJmbGlnaHREYXRhUGF0aCIsImxlbmd0aCIsImNvbnNvbGUiLCJsb2ciLCJ0cmVlUGF0Y2giLCJuZXdUcmVlIiwiYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlU2tpcERlZmF1bHQiLCJoYW5kbGVTZWdtZW50TWlzbWF0Y2giLCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLCJjYW5vbmljYWxVcmxPdmVycmlkZUhyZWYiLCJjcmVhdGVIcmVmRnJvbVVybCIsInVuZGVmaW5lZCIsImFwcGxpZWQiLCJhcHBseUZsaWdodERhdGEiLCJwYXRjaGVkVHJlZSIsImhhbmRsZU11dGFibGUiLCJmYXN0UmVmcmVzaFJlZHVjZXJOb29wIiwiX2FjdGlvbiIsInByb2Nlc3MiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/fast-refresh-reducer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js ***! + \************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"findHeadInCache\", ({\n enumerable: true,\n get: function() {\n return findHeadInCache;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ../create-router-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction findHeadInCache(cache, parallelRoutes) {\n return findHeadInCacheImpl(cache, parallelRoutes, \"\");\n}\nfunction findHeadInCacheImpl(cache, parallelRoutes, keyPrefix) {\n const isLastItem = Object.keys(parallelRoutes).length === 0;\n if (isLastItem) {\n // Returns the entire Cache Node of the segment whose head we will render.\n return [\n cache,\n keyPrefix\n ];\n }\n for(const key in parallelRoutes){\n const [segment, childParallelRoutes] = parallelRoutes[key];\n const childSegmentMap = cache.parallelRoutes.get(key);\n if (!childSegmentMap) {\n continue;\n }\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const cacheNode = childSegmentMap.get(cacheKey);\n if (!cacheNode) {\n continue;\n }\n const item = findHeadInCacheImpl(cacheNode, childParallelRoutes, keyPrefix + \"/\" + cacheKey);\n if (item) {\n return item;\n }\n }\n return null;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=find-head-in-cache.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2ZpbmQtaGVhZC1pbi1jYWNoZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsbURBQWtEO0lBQzlDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsd0JBQXdCQyxtQkFBT0EsQ0FBQyw4SEFBNEI7QUFDbEUsU0FBU0YsZ0JBQWdCRyxLQUFLLEVBQUVDLGNBQWM7SUFDMUMsT0FBT0Msb0JBQW9CRixPQUFPQyxnQkFBZ0I7QUFDdEQ7QUFDQSxTQUFTQyxvQkFBb0JGLEtBQUssRUFBRUMsY0FBYyxFQUFFRSxTQUFTO0lBQ3pELE1BQU1DLGFBQWFiLE9BQU9jLElBQUksQ0FBQ0osZ0JBQWdCSyxNQUFNLEtBQUs7SUFDMUQsSUFBSUYsWUFBWTtRQUNaLDBFQUEwRTtRQUMxRSxPQUFPO1lBQ0hKO1lBQ0FHO1NBQ0g7SUFDTDtJQUNBLElBQUksTUFBTUksT0FBT04sZUFBZTtRQUM1QixNQUFNLENBQUNPLFNBQVNDLG9CQUFvQixHQUFHUixjQUFjLENBQUNNLElBQUk7UUFDMUQsTUFBTUcsa0JBQWtCVixNQUFNQyxjQUFjLENBQUNMLEdBQUcsQ0FBQ1c7UUFDakQsSUFBSSxDQUFDRyxpQkFBaUI7WUFDbEI7UUFDSjtRQUNBLE1BQU1DLFdBQVcsQ0FBQyxHQUFHYixzQkFBc0JjLG9CQUFvQixFQUFFSjtRQUNqRSxNQUFNSyxZQUFZSCxnQkFBZ0JkLEdBQUcsQ0FBQ2U7UUFDdEMsSUFBSSxDQUFDRSxXQUFXO1lBQ1o7UUFDSjtRQUNBLE1BQU1DLE9BQU9aLG9CQUFvQlcsV0FBV0oscUJBQXFCTixZQUFZLE1BQU1RO1FBQ25GLElBQUlHLE1BQU07WUFDTixPQUFPQTtRQUNYO0lBQ0o7SUFDQSxPQUFPO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT3JCLFFBQVFzQixPQUFPLEtBQUssY0FBZSxPQUFPdEIsUUFBUXNCLE9BQU8sS0FBSyxZQUFZdEIsUUFBUXNCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3RCLFFBQVFzQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLekIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRc0IsT0FBTyxFQUFFLGNBQWM7UUFBRXJCLE9BQU87SUFBSztJQUNuRUgsT0FBTzBCLE1BQU0sQ0FBQ3hCLFFBQVFzQixPQUFPLEVBQUV0QjtJQUMvQnlCLE9BQU96QixPQUFPLEdBQUdBLFFBQVFzQixPQUFPO0FBQ2xDLEVBRUEsOENBQThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZmluZC1oZWFkLWluLWNhY2hlLmpzPzc1YzYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaW5kSGVhZEluQ2FjaGVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRIZWFkSW5DYWNoZTtcbiAgICB9XG59KTtcbmNvbnN0IF9jcmVhdGVyb3V0ZXJjYWNoZWtleSA9IHJlcXVpcmUoXCIuLi9jcmVhdGUtcm91dGVyLWNhY2hlLWtleVwiKTtcbmZ1bmN0aW9uIGZpbmRIZWFkSW5DYWNoZShjYWNoZSwgcGFyYWxsZWxSb3V0ZXMpIHtcbiAgICByZXR1cm4gZmluZEhlYWRJbkNhY2hlSW1wbChjYWNoZSwgcGFyYWxsZWxSb3V0ZXMsIFwiXCIpO1xufVxuZnVuY3Rpb24gZmluZEhlYWRJbkNhY2hlSW1wbChjYWNoZSwgcGFyYWxsZWxSb3V0ZXMsIGtleVByZWZpeCkge1xuICAgIGNvbnN0IGlzTGFzdEl0ZW0gPSBPYmplY3Qua2V5cyhwYXJhbGxlbFJvdXRlcykubGVuZ3RoID09PSAwO1xuICAgIGlmIChpc0xhc3RJdGVtKSB7XG4gICAgICAgIC8vIFJldHVybnMgdGhlIGVudGlyZSBDYWNoZSBOb2RlIG9mIHRoZSBzZWdtZW50IHdob3NlIGhlYWQgd2Ugd2lsbCByZW5kZXIuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBjYWNoZSxcbiAgICAgICAgICAgIGtleVByZWZpeFxuICAgICAgICBdO1xuICAgIH1cbiAgICBmb3IoY29uc3Qga2V5IGluIHBhcmFsbGVsUm91dGVzKXtcbiAgICAgICAgY29uc3QgW3NlZ21lbnQsIGNoaWxkUGFyYWxsZWxSb3V0ZXNdID0gcGFyYWxsZWxSb3V0ZXNba2V5XTtcbiAgICAgICAgY29uc3QgY2hpbGRTZWdtZW50TWFwID0gY2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KGtleSk7XG4gICAgICAgIGlmICghY2hpbGRTZWdtZW50TWFwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZUtleSA9ICgwLCBfY3JlYXRlcm91dGVyY2FjaGVrZXkuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKHNlZ21lbnQpO1xuICAgICAgICBjb25zdCBjYWNoZU5vZGUgPSBjaGlsZFNlZ21lbnRNYXAuZ2V0KGNhY2hlS2V5KTtcbiAgICAgICAgaWYgKCFjYWNoZU5vZGUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBmaW5kSGVhZEluQ2FjaGVJbXBsKGNhY2hlTm9kZSwgY2hpbGRQYXJhbGxlbFJvdXRlcywga2V5UHJlZml4ICsgXCIvXCIgKyBjYWNoZUtleSk7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmluZC1oZWFkLWluLWNhY2hlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJmaW5kSGVhZEluQ2FjaGUiLCJfY3JlYXRlcm91dGVyY2FjaGVrZXkiLCJyZXF1aXJlIiwiY2FjaGUiLCJwYXJhbGxlbFJvdXRlcyIsImZpbmRIZWFkSW5DYWNoZUltcGwiLCJrZXlQcmVmaXgiLCJpc0xhc3RJdGVtIiwia2V5cyIsImxlbmd0aCIsImtleSIsInNlZ21lbnQiLCJjaGlsZFBhcmFsbGVsUm91dGVzIiwiY2hpbGRTZWdtZW50TWFwIiwiY2FjaGVLZXkiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsImNhY2hlTm9kZSIsIml0ZW0iLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js": +/*!***********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js ***! + \***********************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSegmentValue\", ({\n enumerable: true,\n get: function() {\n return getSegmentValue;\n }\n}));\nfunction getSegmentValue(segment) {\n return Array.isArray(segment) ? segment[1] : segment;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-segment-value.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2dldC1zZWdtZW50LXZhbHVlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxtREFBa0Q7SUFDOUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixTQUFTQSxnQkFBZ0JDLE9BQU87SUFDNUIsT0FBT0MsTUFBTUMsT0FBTyxDQUFDRixXQUFXQSxPQUFPLENBQUMsRUFBRSxHQUFHQTtBQUNqRDtBQUVBLElBQUksQ0FBQyxPQUFPTCxRQUFRUSxPQUFPLEtBQUssY0FBZSxPQUFPUixRQUFRUSxPQUFPLEtBQUssWUFBWVIsUUFBUVEsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPUixRQUFRUSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLWCxPQUFPQyxjQUFjLENBQUNDLFFBQVFRLE9BQU8sRUFBRSxjQUFjO1FBQUVQLE9BQU87SUFBSztJQUNuRUgsT0FBT1ksTUFBTSxDQUFDVixRQUFRUSxPQUFPLEVBQUVSO0lBQy9CVyxPQUFPWCxPQUFPLEdBQUdBLFFBQVFRLE9BQU87QUFDbEMsRUFFQSw2Q0FBNkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9nZXQtc2VnbWVudC12YWx1ZS5qcz80ZTYzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U2VnbWVudFZhbHVlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRTZWdtZW50VmFsdWU7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBnZXRTZWdtZW50VmFsdWUoc2VnbWVudCkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHNlZ21lbnQpID8gc2VnbWVudFsxXSA6IHNlZ21lbnQ7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1zZWdtZW50LXZhbHVlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJnZXRTZWdtZW50VmFsdWUiLCJzZWdtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js": +/*!**********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js ***! + \**********************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n handleExternalUrl: function() {\n return handleExternalUrl;\n },\n navigateReducer: function() {\n return navigateReducer;\n }\n});\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _invalidatecachebelowflightsegmentpath = __webpack_require__(/*! ../invalidate-cache-below-flight-segmentpath */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js\");\nconst _fillcachewithdataproperty = __webpack_require__(/*! ../fill-cache-with-data-property */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-data-property.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _shouldhardnavigate = __webpack_require__(/*! ../should-hard-navigate */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _routerreducertypes = __webpack_require__(/*! ../router-reducer-types */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _getprefetchcacheentrystatus = __webpack_require__(/*! ../get-prefetch-cache-entry-status */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/get-prefetch-cache-entry-status.js\");\nconst _pruneprefetchcache = __webpack_require__(/*! ./prune-prefetch-cache */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/prune-prefetch-cache.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./prefetch-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\");\nconst _segment = __webpack_require__(/*! ../../../../shared/lib/segment */ \"(ssr)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _pprnavigations = __webpack_require__(/*! ../ppr-navigations */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\");\nconst _createprefetchcachekey = __webpack_require__(/*! ./create-prefetch-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/create-prefetch-cache-key.js\");\nfunction handleExternalUrl(state, mutable, url, pendingPush) {\n mutable.mpaNavigation = true;\n mutable.canonicalUrl = url;\n mutable.pendingPush = pendingPush;\n mutable.scrollableSegments = undefined;\n return (0, _handlemutable.handleMutable)(state, mutable);\n}\nfunction generateSegmentsFromPatch(flightRouterPatch) {\n const segments = [];\n const [segment, parallelRoutes] = flightRouterPatch;\n if (Object.keys(parallelRoutes).length === 0) {\n return [\n [\n segment\n ]\n ];\n }\n for (const [parallelRouteKey, parallelRoute] of Object.entries(parallelRoutes)){\n for (const childSegment of generateSegmentsFromPatch(parallelRoute)){\n // If the segment is empty, it means we are at the root of the tree\n if (segment === \"\") {\n segments.push([\n parallelRouteKey,\n ...childSegment\n ]);\n } else {\n segments.push([\n segment,\n parallelRouteKey,\n ...childSegment\n ]);\n }\n }\n }\n return segments;\n}\nfunction addRefetchToLeafSegments(newCache, currentCache, flightSegmentPath, treePatch, data) {\n let appliedPatch = false;\n newCache.rsc = currentCache.rsc;\n newCache.prefetchRsc = currentCache.prefetchRsc;\n newCache.parallelRoutes = new Map(currentCache.parallelRoutes);\n const segmentPathsToFill = generateSegmentsFromPatch(treePatch).map((segment)=>[\n ...flightSegmentPath,\n ...segment\n ]);\n for (const segmentPaths of segmentPathsToFill){\n (0, _fillcachewithdataproperty.fillCacheWithDataProperty)(newCache, currentCache, segmentPaths, data);\n appliedPatch = true;\n }\n return appliedPatch;\n}\nconst navigateReducer = false ? 0 : navigateReducer_noPPR;\n// This is the implementation when PPR is disabled. We can assume its behavior\n// is relatively stable because it's been running in production for a while.\nfunction navigateReducer_noPPR(state, action) {\n const { url, isExternalUrl, navigateType, shouldScroll } = action;\n const mutable = {};\n const { hash } = url;\n const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n const pendingPush = navigateType === \"push\";\n // we want to prune the prefetch cache on every navigation to avoid it growing too large\n (0, _pruneprefetchcache.prunePrefetchCache)(state.prefetchCache);\n mutable.preserveCustomHistoryState = false;\n if (isExternalUrl) {\n return handleExternalUrl(state, mutable, url.toString(), pendingPush);\n }\n const prefetchCacheKey = (0, _createprefetchcachekey.createPrefetchCacheKey)(url, state.nextUrl);\n let prefetchValues = state.prefetchCache.get(prefetchCacheKey);\n // If we don't have a prefetch value, we need to create one\n if (!prefetchValues) {\n const data = (0, _fetchserverresponse.fetchServerResponse)(url, state.tree, state.nextUrl, state.buildId, // in order to simulate the behavior of the prefetch cache\n true ? _routerreducertypes.PrefetchKind.AUTO : 0);\n const newPrefetchValue = {\n data,\n // this will make sure that the entry will be discarded after 30s\n kind: true ? _routerreducertypes.PrefetchKind.AUTO : 0,\n prefetchTime: Date.now(),\n treeAtTimeOfPrefetch: state.tree,\n lastUsedTime: null\n };\n state.prefetchCache.set(prefetchCacheKey, newPrefetchValue);\n prefetchValues = newPrefetchValue;\n }\n const prefetchEntryCacheStatus = (0, _getprefetchcacheentrystatus.getPrefetchEntryCacheStatus)(prefetchValues);\n // The one before last item is the router state tree patch\n const { treeAtTimeOfPrefetch, data } = prefetchValues;\n _prefetchreducer.prefetchQueue.bump(data);\n return data.then((param)=>{\n let [flightData, canonicalUrlOverride, postponed] = param;\n // we only want to mark this once\n if (prefetchValues && !prefetchValues.lastUsedTime) {\n // important: we should only mark the cache node as dirty after we unsuspend from the call above\n prefetchValues.lastUsedTime = Date.now();\n }\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === \"string\") {\n return handleExternalUrl(state, mutable, flightData, pendingPush);\n }\n let currentTree = state.tree;\n let currentCache = state.cache;\n let scrollableSegments = [];\n for (const flightDataPath of flightData){\n const flightSegmentPath = flightDataPath.slice(0, -4);\n // The one before last item is the router state tree patch\n const treePatch = flightDataPath.slice(-3)[0];\n // TODO-APP: remove ''\n const flightSegmentPathWithLeadingEmpty = [\n \"\",\n ...flightSegmentPath\n ];\n // Create new tree based on the flightSegmentPath and router state patch\n let newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)(flightSegmentPathWithLeadingEmpty, currentTree, treePatch);\n // If the tree patch can't be applied to the current tree then we use the tree at time of prefetch\n // TODO-APP: This should instead fill in the missing pieces in `currentTree` with the data from `treeAtTimeOfPrefetch`, then apply the patch.\n if (newTree === null) {\n newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)(flightSegmentPathWithLeadingEmpty, treeAtTimeOfPrefetch, treePatch);\n }\n if (newTree !== null) {\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return handleExternalUrl(state, mutable, href, pendingPush);\n }\n const cache = (0, _approuter.createEmptyCacheNode)();\n let applied = (0, _applyflightdata.applyFlightData)(currentCache, cache, flightDataPath, (prefetchValues == null ? void 0 : prefetchValues.kind) === \"auto\" && prefetchEntryCacheStatus === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.reusable);\n if (!applied && prefetchEntryCacheStatus === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.stale || // TODO-APP: If the prefetch was postponed, we don't want to apply it\n // until we land router changes to handle the postponed case.\n postponed) {\n applied = addRefetchToLeafSegments(cache, currentCache, flightSegmentPath, treePatch, ()=>(0, _fetchserverresponse.fetchServerResponse)(url, currentTree, state.nextUrl, state.buildId));\n }\n const hardNavigate = (0, _shouldhardnavigate.shouldHardNavigate)(flightSegmentPathWithLeadingEmpty, currentTree);\n if (hardNavigate) {\n // Copy rsc for the root node of the cache.\n cache.rsc = currentCache.rsc;\n cache.prefetchRsc = currentCache.prefetchRsc;\n (0, _invalidatecachebelowflightsegmentpath.invalidateCacheBelowFlightSegmentPath)(cache, currentCache, flightSegmentPath);\n // Ensure the existing cache value is used when the cache was not invalidated.\n mutable.cache = cache;\n } else if (applied) {\n mutable.cache = cache;\n }\n currentCache = cache;\n currentTree = newTree;\n for (const subSegment of generateSegmentsFromPatch(treePatch)){\n const scrollableSegmentPath = [\n ...flightSegmentPath,\n ...subSegment\n ];\n // Filter out the __DEFAULT__ paths as they shouldn't be scrolled to in this case.\n if (scrollableSegmentPath[scrollableSegmentPath.length - 1] !== _segment.DEFAULT_SEGMENT_KEY) {\n scrollableSegments.push(scrollableSegmentPath);\n }\n }\n }\n }\n mutable.patchedTree = currentTree;\n mutable.canonicalUrl = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : href;\n mutable.pendingPush = pendingPush;\n mutable.scrollableSegments = scrollableSegments;\n mutable.hashFragment = hash;\n mutable.shouldScroll = shouldScroll;\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, ()=>state);\n}\n// This is the experimental PPR implementation. It's closer to the behavior we\n// want, but is likelier to include accidental regressions because it rewrites\n// existing functionality.\nfunction navigateReducer_PPR(state, action) {\n const { url, isExternalUrl, navigateType, shouldScroll } = action;\n const mutable = {};\n const { hash } = url;\n const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n const pendingPush = navigateType === \"push\";\n // we want to prune the prefetch cache on every navigation to avoid it growing too large\n (0, _pruneprefetchcache.prunePrefetchCache)(state.prefetchCache);\n mutable.preserveCustomHistoryState = false;\n if (isExternalUrl) {\n return handleExternalUrl(state, mutable, url.toString(), pendingPush);\n }\n const prefetchCacheKey = (0, _createprefetchcachekey.createPrefetchCacheKey)(url, state.nextUrl);\n let prefetchValues = state.prefetchCache.get(prefetchCacheKey);\n // If we don't have a prefetch value, we need to create one\n if (!prefetchValues) {\n const data = (0, _fetchserverresponse.fetchServerResponse)(url, state.tree, state.nextUrl, state.buildId, // in order to simulate the behavior of the prefetch cache\n true ? _routerreducertypes.PrefetchKind.AUTO : 0);\n const newPrefetchValue = {\n data,\n // this will make sure that the entry will be discarded after 30s\n kind: true ? _routerreducertypes.PrefetchKind.AUTO : 0,\n prefetchTime: Date.now(),\n treeAtTimeOfPrefetch: state.tree,\n lastUsedTime: null\n };\n state.prefetchCache.set(prefetchCacheKey, newPrefetchValue);\n prefetchValues = newPrefetchValue;\n }\n const prefetchEntryCacheStatus = (0, _getprefetchcacheentrystatus.getPrefetchEntryCacheStatus)(prefetchValues);\n // The one before last item is the router state tree patch\n const { treeAtTimeOfPrefetch, data } = prefetchValues;\n _prefetchreducer.prefetchQueue.bump(data);\n return data.then((param)=>{\n let [flightData, canonicalUrlOverride, _postponed] = param;\n // we only want to mark this once\n if (prefetchValues && !prefetchValues.lastUsedTime) {\n // important: we should only mark the cache node as dirty after we unsuspend from the call above\n prefetchValues.lastUsedTime = Date.now();\n }\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === \"string\") {\n return handleExternalUrl(state, mutable, flightData, pendingPush);\n }\n let currentTree = state.tree;\n let currentCache = state.cache;\n let scrollableSegments = [];\n // TODO: In practice, this is always a single item array. We probably\n // aren't going to every send multiple segments, at least not in this\n // format. So we could remove the extra wrapper for now until\n // that settles.\n for (const flightDataPath of flightData){\n const flightSegmentPath = flightDataPath.slice(0, -4);\n // The one before last item is the router state tree patch\n const treePatch = flightDataPath.slice(-3)[0];\n // TODO-APP: remove ''\n const flightSegmentPathWithLeadingEmpty = [\n \"\",\n ...flightSegmentPath\n ];\n // Create new tree based on the flightSegmentPath and router state patch\n let newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)(flightSegmentPathWithLeadingEmpty, currentTree, treePatch);\n // If the tree patch can't be applied to the current tree then we use the tree at time of prefetch\n // TODO-APP: This should instead fill in the missing pieces in `currentTree` with the data from `treeAtTimeOfPrefetch`, then apply the patch.\n if (newTree === null) {\n newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)(flightSegmentPathWithLeadingEmpty, treeAtTimeOfPrefetch, treePatch);\n }\n if (newTree !== null) {\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return handleExternalUrl(state, mutable, href, pendingPush);\n }\n if (// will always send back a static response that's rendered from\n // the root. If for some reason it doesn't, we fall back to the\n // non-PPR implementation.\n // TODO: We should get rid of the else branch and do all navigations\n // via updateCacheNodeOnNavigation. The current structure is just\n // an incremental step.\n flightDataPath.length === 3) {\n const prefetchedTree = flightDataPath[0];\n const seedData = flightDataPath[1];\n const head = flightDataPath[2];\n // Check whether the prefetched data is stale. If so, we'll\n // ignore it and wait for the dynamic data to stream in before\n // showing new segments.\n const isPrefetchStale = prefetchEntryCacheStatus === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.stale;\n const task = (0, _pprnavigations.updateCacheNodeOnNavigation)(currentCache, currentTree, prefetchedTree, seedData, head, isPrefetchStale);\n if (task !== null && task.node !== null) {\n // We've created a new Cache Node tree that contains a prefetched\n // version of the next page. This can be rendered instantly.\n // Use the tree computed by updateCacheNodeOnNavigation instead\n // of the one computed by applyRouterStatePatchToTreeSkipDefault.\n // TODO: We should remove applyRouterStatePatchToTreeSkipDefault\n // from the PPR path entirely.\n const patchedRouterState = task.route;\n newTree = patchedRouterState;\n const newCache = task.node;\n // The prefetched tree has dynamic holes in it. We initiate a\n // dynamic request to fill them in.\n //\n // Do not block on the result. We'll immediately render the Cache\n // Node tree and suspend on the dynamic parts. When the request\n // comes in, we'll fill in missing data and ping React to\n // re-render. Unlike the lazy fetching model in the non-PPR\n // implementation, this is modeled as a single React update +\n // streaming, rather than multiple top-level updates. (However,\n // even in the new model, we'll still need to sometimes update the\n // root multiple times per navigation, like if the server sends us\n // a different response than we expected. For now, we revert back\n // to the lazy fetching mechanism in that case.)\n (0, _pprnavigations.listenForDynamicRequest)(task, (0, _fetchserverresponse.fetchServerResponse)(url, currentTree, state.nextUrl, state.buildId));\n mutable.cache = newCache;\n } else {\n // Nothing changed, so reuse the old cache.\n // TODO: What if the head changed but not any of the segment data?\n // Is that possible? If so, we should clone the whole tree and\n // update the head.\n newTree = prefetchedTree;\n }\n } else {\n // The static response does not include any dynamic holes, so\n // there's no need to do a second request.\n // TODO: As an incremental step this just reverts back to the\n // non-PPR implementation. We can simplify this branch further,\n // given that PPR prefetches are always static and return the whole\n // tree. Or in the meantime we could factor it out into a\n // separate function.\n const cache = (0, _approuter.createEmptyCacheNode)();\n let applied = (0, _applyflightdata.applyFlightData)(currentCache, cache, flightDataPath, (prefetchValues == null ? void 0 : prefetchValues.kind) === \"auto\" && prefetchEntryCacheStatus === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.reusable);\n if (!applied && prefetchEntryCacheStatus === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.stale) {\n applied = addRefetchToLeafSegments(cache, currentCache, flightSegmentPath, treePatch, ()=>(0, _fetchserverresponse.fetchServerResponse)(url, currentTree, state.nextUrl, state.buildId));\n }\n const hardNavigate = (0, _shouldhardnavigate.shouldHardNavigate)(flightSegmentPathWithLeadingEmpty, currentTree);\n if (hardNavigate) {\n // Copy rsc for the root node of the cache.\n cache.rsc = currentCache.rsc;\n cache.prefetchRsc = currentCache.prefetchRsc;\n (0, _invalidatecachebelowflightsegmentpath.invalidateCacheBelowFlightSegmentPath)(cache, currentCache, flightSegmentPath);\n // Ensure the existing cache value is used when the cache was not invalidated.\n mutable.cache = cache;\n } else if (applied) {\n mutable.cache = cache;\n }\n }\n currentTree = newTree;\n for (const subSegment of generateSegmentsFromPatch(treePatch)){\n const scrollableSegmentPath = [\n ...flightSegmentPath,\n ...subSegment\n ];\n // Filter out the __DEFAULT__ paths as they shouldn't be scrolled to in this case.\n if (scrollableSegmentPath[scrollableSegmentPath.length - 1] !== _segment.DEFAULT_SEGMENT_KEY) {\n scrollableSegments.push(scrollableSegmentPath);\n }\n }\n }\n }\n mutable.patchedTree = currentTree;\n mutable.canonicalUrl = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : href;\n mutable.pendingPush = pendingPush;\n mutable.scrollableSegments = scrollableSegments;\n mutable.hashFragment = hash;\n mutable.shouldScroll = shouldScroll;\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, ()=>state);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=navigate-reducer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL25hdmlnYXRlLXJlZHVjZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLG1CQUFtQjtRQUNmLE9BQU9BO0lBQ1g7SUFDQUMsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sdUJBQXVCQyxtQkFBT0EsQ0FBQywwSEFBMEI7QUFDL0QsTUFBTUMscUJBQXFCRCxtQkFBT0EsQ0FBQyx3SEFBeUI7QUFDNUQsTUFBTUUseUNBQXlDRixtQkFBT0EsQ0FBQyxrS0FBOEM7QUFDckcsTUFBTUcsNkJBQTZCSCxtQkFBT0EsQ0FBQywwSUFBa0M7QUFDN0UsTUFBTUksK0JBQStCSixtQkFBT0EsQ0FBQyxnSkFBcUM7QUFDbEYsTUFBTUssc0JBQXNCTCxtQkFBT0EsQ0FBQyx3SEFBeUI7QUFDN0QsTUFBTU0sK0JBQStCTixtQkFBT0EsQ0FBQyxnSkFBcUM7QUFDbEYsTUFBTU8sc0JBQXNCUCxtQkFBT0EsQ0FBQyx3SEFBeUI7QUFDN0QsTUFBTVEsaUJBQWlCUixtQkFBT0EsQ0FBQyw0R0FBbUI7QUFDbEQsTUFBTVMsbUJBQW1CVCxtQkFBT0EsQ0FBQyxrSEFBc0I7QUFDdkQsTUFBTVUsK0JBQStCVixtQkFBT0EsQ0FBQyw4SUFBb0M7QUFDakYsTUFBTVcsc0JBQXNCWCxtQkFBT0EsQ0FBQyxnSUFBd0I7QUFDNUQsTUFBTVksbUJBQW1CWixtQkFBT0EsQ0FBQyx3SEFBb0I7QUFDckQsTUFBTWEsYUFBYWIsbUJBQU9BLENBQUMsd0ZBQWtCO0FBQzdDLE1BQU1jLFdBQVdkLG1CQUFPQSxDQUFDLDRGQUFnQztBQUN6RCxNQUFNZSxrQkFBa0JmLG1CQUFPQSxDQUFDLDhHQUFvQjtBQUNwRCxNQUFNZ0IsMEJBQTBCaEIsbUJBQU9BLENBQUMsMElBQTZCO0FBQ3JFLFNBQVNULGtCQUFrQjBCLEtBQUssRUFBRUMsT0FBTyxFQUFFQyxHQUFHLEVBQUVDLFdBQVc7SUFDdkRGLFFBQVFHLGFBQWEsR0FBRztJQUN4QkgsUUFBUUksWUFBWSxHQUFHSDtJQUN2QkQsUUFBUUUsV0FBVyxHQUFHQTtJQUN0QkYsUUFBUUssa0JBQWtCLEdBQUdDO0lBQzdCLE9BQU8sQ0FBQyxHQUFHaEIsZUFBZWlCLGFBQWEsRUFBRVIsT0FBT0M7QUFDcEQ7QUFDQSxTQUFTUSwwQkFBMEJDLGlCQUFpQjtJQUNoRCxNQUFNQyxXQUFXLEVBQUU7SUFDbkIsTUFBTSxDQUFDQyxTQUFTQyxlQUFlLEdBQUdIO0lBQ2xDLElBQUl6QyxPQUFPNkMsSUFBSSxDQUFDRCxnQkFBZ0JFLE1BQU0sS0FBSyxHQUFHO1FBQzFDLE9BQU87WUFDSDtnQkFDSUg7YUFDSDtTQUNKO0lBQ0w7SUFDQSxLQUFLLE1BQU0sQ0FBQ0ksa0JBQWtCQyxjQUFjLElBQUloRCxPQUFPaUQsT0FBTyxDQUFDTCxnQkFBZ0I7UUFDM0UsS0FBSyxNQUFNTSxnQkFBZ0JWLDBCQUEwQlEsZUFBZTtZQUNoRSxtRUFBbUU7WUFDbkUsSUFBSUwsWUFBWSxJQUFJO2dCQUNoQkQsU0FBU1MsSUFBSSxDQUFDO29CQUNWSjt1QkFDR0c7aUJBQ047WUFDTCxPQUFPO2dCQUNIUixTQUFTUyxJQUFJLENBQUM7b0JBQ1ZSO29CQUNBSTt1QkFDR0c7aUJBQ047WUFDTDtRQUNKO0lBQ0o7SUFDQSxPQUFPUjtBQUNYO0FBQ0EsU0FBU1UseUJBQXlCQyxRQUFRLEVBQUVDLFlBQVksRUFBRUMsaUJBQWlCLEVBQUVDLFNBQVMsRUFBRUMsSUFBSTtJQUN4RixJQUFJQyxlQUFlO0lBQ25CTCxTQUFTTSxHQUFHLEdBQUdMLGFBQWFLLEdBQUc7SUFDL0JOLFNBQVNPLFdBQVcsR0FBR04sYUFBYU0sV0FBVztJQUMvQ1AsU0FBU1QsY0FBYyxHQUFHLElBQUlpQixJQUFJUCxhQUFhVixjQUFjO0lBQzdELE1BQU1rQixxQkFBcUJ0QiwwQkFBMEJnQixXQUFXTyxHQUFHLENBQUMsQ0FBQ3BCLFVBQVU7ZUFDcEVZO2VBQ0FaO1NBQ047SUFDTCxLQUFLLE1BQU1xQixnQkFBZ0JGLG1CQUFtQjtRQUN6QyxJQUFHN0MsMkJBQTJCZ0QseUJBQXlCLEVBQUVaLFVBQVVDLGNBQWNVLGNBQWNQO1FBQ2hHQyxlQUFlO0lBQ25CO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLE1BQU1wRCxrQkFBa0I0RCxNQUFzQixHQUFHRyxDQUFtQkEsR0FBR0M7QUFDdkUsOEVBQThFO0FBQzlFLDRFQUE0RTtBQUM1RSxTQUFTQSxzQkFBc0J2QyxLQUFLLEVBQUV3QyxNQUFNO0lBQ3hDLE1BQU0sRUFBRXRDLEdBQUcsRUFBRXVDLGFBQWEsRUFBRUMsWUFBWSxFQUFFQyxZQUFZLEVBQUUsR0FBR0g7SUFDM0QsTUFBTXZDLFVBQVUsQ0FBQztJQUNqQixNQUFNLEVBQUUyQyxJQUFJLEVBQUUsR0FBRzFDO0lBQ2pCLE1BQU0yQyxPQUFPLENBQUMsR0FBRzdELG1CQUFtQjhELGlCQUFpQixFQUFFNUM7SUFDdkQsTUFBTUMsY0FBY3VDLGlCQUFpQjtJQUNyQyx3RkFBd0Y7SUFDdkYsSUFBR2hELG9CQUFvQnFELGtCQUFrQixFQUFFL0MsTUFBTWdELGFBQWE7SUFDL0QvQyxRQUFRZ0QsMEJBQTBCLEdBQUc7SUFDckMsSUFBSVIsZUFBZTtRQUNmLE9BQU9uRSxrQkFBa0IwQixPQUFPQyxTQUFTQyxJQUFJZ0QsUUFBUSxJQUFJL0M7SUFDN0Q7SUFDQSxNQUFNZ0QsbUJBQW1CLENBQUMsR0FBR3BELHdCQUF3QnFELHNCQUFzQixFQUFFbEQsS0FBS0YsTUFBTXFELE9BQU87SUFDL0YsSUFBSUMsaUJBQWlCdEQsTUFBTWdELGFBQWEsQ0FBQ25FLEdBQUcsQ0FBQ3NFO0lBQzdDLDJEQUEyRDtJQUMzRCxJQUFJLENBQUNHLGdCQUFnQjtRQUNqQixNQUFNNUIsT0FBTyxDQUFDLEdBQUc1QyxxQkFBcUJ5RSxtQkFBbUIsRUFBRXJELEtBQUtGLE1BQU13RCxJQUFJLEVBQUV4RCxNQUFNcUQsT0FBTyxFQUFFckQsTUFBTXlELE9BQU8sRUFDeEcsMERBQTBEO1FBOUdsRSxLQStHOEMsR0FBR25FLG9CQUFvQm9FLFlBQVksQ0FBQ0MsSUFBSSxHQUFHcEQsQ0FBU0E7UUFDMUYsTUFBTXFELG1CQUFtQjtZQUNyQmxDO1lBQ0EsaUVBQWlFO1lBQ2pFbUMsTUFBTTFCLEtBQXNDLEdBQUc3QyxvQkFBb0JvRSxZQUFZLENBQUNDLElBQUksR0FBR3JFLENBQTBDO1lBQ2pJeUUsY0FBY0MsS0FBS0MsR0FBRztZQUN0QkMsc0JBQXNCbEUsTUFBTXdELElBQUk7WUFDaENXLGNBQWM7UUFDbEI7UUFDQW5FLE1BQU1nRCxhQUFhLENBQUNvQixHQUFHLENBQUNqQixrQkFBa0JTO1FBQzFDTixpQkFBaUJNO0lBQ3JCO0lBQ0EsTUFBTVMsMkJBQTJCLENBQUMsR0FBRzVFLDZCQUE2QjZFLDJCQUEyQixFQUFFaEI7SUFDL0YsMERBQTBEO0lBQzFELE1BQU0sRUFBRVksb0JBQW9CLEVBQUV4QyxJQUFJLEVBQUUsR0FBRzRCO0lBQ3ZDM0QsaUJBQWlCNEUsYUFBYSxDQUFDQyxJQUFJLENBQUM5QztJQUNwQyxPQUFPQSxLQUFLK0MsSUFBSSxDQUFDLENBQUNDO1FBQ2QsSUFBSSxDQUFDQyxZQUFZQyxzQkFBc0JDLFVBQVUsR0FBR0g7UUFDcEQsaUNBQWlDO1FBQ2pDLElBQUlwQixrQkFBa0IsQ0FBQ0EsZUFBZWEsWUFBWSxFQUFFO1lBQ2hELGdHQUFnRztZQUNoR2IsZUFBZWEsWUFBWSxHQUFHSCxLQUFLQyxHQUFHO1FBQzFDO1FBQ0EsNERBQTREO1FBQzVELElBQUksT0FBT1UsZUFBZSxVQUFVO1lBQ2hDLE9BQU9yRyxrQkFBa0IwQixPQUFPQyxTQUFTMEUsWUFBWXhFO1FBQ3pEO1FBQ0EsSUFBSTJFLGNBQWM5RSxNQUFNd0QsSUFBSTtRQUM1QixJQUFJakMsZUFBZXZCLE1BQU0rRSxLQUFLO1FBQzlCLElBQUl6RSxxQkFBcUIsRUFBRTtRQUMzQixLQUFLLE1BQU0wRSxrQkFBa0JMLFdBQVc7WUFDcEMsTUFBTW5ELG9CQUFvQndELGVBQWVDLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDbkQsMERBQTBEO1lBQzFELE1BQU14RCxZQUFZdUQsZUFBZUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDN0Msc0JBQXNCO1lBQ3RCLE1BQU1DLG9DQUFvQztnQkFDdEM7bUJBQ0cxRDthQUNOO1lBQ0Qsd0VBQXdFO1lBQ3hFLElBQUkyRCxVQUFVLENBQUMsR0FBR2hHLDZCQUE2QmlHLHNDQUFzQyxFQUNyRkYsbUNBQW1DSixhQUFhckQ7WUFDaEQsa0dBQWtHO1lBQ2xHLDZJQUE2STtZQUM3SSxJQUFJMEQsWUFBWSxNQUFNO2dCQUNsQkEsVUFBVSxDQUFDLEdBQUdoRyw2QkFBNkJpRyxzQ0FBc0MsRUFDakZGLG1DQUFtQ2hCLHNCQUFzQnpDO1lBQzdEO1lBQ0EsSUFBSTBELFlBQVksTUFBTTtnQkFDbEIsSUFBSSxDQUFDLEdBQUc5Riw2QkFBNkJnRywyQkFBMkIsRUFBRVAsYUFBYUssVUFBVTtvQkFDckYsT0FBTzdHLGtCQUFrQjBCLE9BQU9DLFNBQVM0QyxNQUFNMUM7Z0JBQ25EO2dCQUNBLE1BQU00RSxRQUFRLENBQUMsR0FBR25GLFdBQVcwRixvQkFBb0I7Z0JBQ2pELElBQUlDLFVBQVUsQ0FBQyxHQUFHL0YsaUJBQWlCZ0csZUFBZSxFQUFFakUsY0FBY3dELE9BQU9DLGdCQUFnQixDQUFDMUIsa0JBQWtCLE9BQU8sS0FBSyxJQUFJQSxlQUFlTyxJQUFJLE1BQU0sVUFBVVEsNkJBQTZCNUUsNkJBQTZCZ0csd0JBQXdCLENBQUNDLFFBQVE7Z0JBQzFQLElBQUksQ0FBQ0gsV0FBV2xCLDZCQUE2QjVFLDZCQUE2QmdHLHdCQUF3QixDQUFDRSxLQUFLLElBQUkscUVBQXFFO2dCQUNqTCw2REFBNkQ7Z0JBQzdEZCxXQUFXO29CQUNQVSxVQUFVbEUseUJBQXlCMEQsT0FBT3hELGNBQWNDLG1CQUFtQkMsV0FDM0UsSUFBSSxDQUFDLEdBQUczQyxxQkFBcUJ5RSxtQkFBbUIsRUFBRXJELEtBQUs0RSxhQUFhOUUsTUFBTXFELE9BQU8sRUFBRXJELE1BQU15RCxPQUFPO2dCQUNwRztnQkFDQSxNQUFNbUMsZUFBZSxDQUFDLEdBQUd4RyxvQkFBb0J5RyxrQkFBa0IsRUFDL0RYLG1DQUFtQ0o7Z0JBQ25DLElBQUljLGNBQWM7b0JBQ2QsMkNBQTJDO29CQUMzQ2IsTUFBTW5ELEdBQUcsR0FBR0wsYUFBYUssR0FBRztvQkFDNUJtRCxNQUFNbEQsV0FBVyxHQUFHTixhQUFhTSxXQUFXO29CQUMzQyxJQUFHNUMsdUNBQXVDNkcscUNBQXFDLEVBQUVmLE9BQU94RCxjQUFjQztvQkFDdkcsOEVBQThFO29CQUM5RXZCLFFBQVE4RSxLQUFLLEdBQUdBO2dCQUNwQixPQUFPLElBQUlRLFNBQVM7b0JBQ2hCdEYsUUFBUThFLEtBQUssR0FBR0E7Z0JBQ3BCO2dCQUNBeEQsZUFBZXdEO2dCQUNmRCxjQUFjSztnQkFDZCxLQUFLLE1BQU1ZLGNBQWN0RiwwQkFBMEJnQixXQUFXO29CQUMxRCxNQUFNdUUsd0JBQXdCOzJCQUN2QnhFOzJCQUNBdUU7cUJBQ047b0JBQ0Qsa0ZBQWtGO29CQUNsRixJQUFJQyxxQkFBcUIsQ0FBQ0Esc0JBQXNCakYsTUFBTSxHQUFHLEVBQUUsS0FBS2xCLFNBQVNvRyxtQkFBbUIsRUFBRTt3QkFDMUYzRixtQkFBbUJjLElBQUksQ0FBQzRFO29CQUM1QjtnQkFDSjtZQUNKO1FBQ0o7UUFDQS9GLFFBQVFpRyxXQUFXLEdBQUdwQjtRQUN0QjdFLFFBQVFJLFlBQVksR0FBR3VFLHVCQUF1QixDQUFDLEdBQUc1RixtQkFBbUI4RCxpQkFBaUIsRUFBRThCLHdCQUF3Qi9CO1FBQ2hINUMsUUFBUUUsV0FBVyxHQUFHQTtRQUN0QkYsUUFBUUssa0JBQWtCLEdBQUdBO1FBQzdCTCxRQUFRa0csWUFBWSxHQUFHdkQ7UUFDdkIzQyxRQUFRMEMsWUFBWSxHQUFHQTtRQUN2QixPQUFPLENBQUMsR0FBR3BELGVBQWVpQixhQUFhLEVBQUVSLE9BQU9DO0lBQ3BELEdBQUcsSUFBSUQ7QUFDWDtBQUNBLDhFQUE4RTtBQUM5RSw4RUFBOEU7QUFDOUUsMEJBQTBCO0FBQzFCLFNBQVNzQyxvQkFBb0J0QyxLQUFLLEVBQUV3QyxNQUFNO0lBQ3RDLE1BQU0sRUFBRXRDLEdBQUcsRUFBRXVDLGFBQWEsRUFBRUMsWUFBWSxFQUFFQyxZQUFZLEVBQUUsR0FBR0g7SUFDM0QsTUFBTXZDLFVBQVUsQ0FBQztJQUNqQixNQUFNLEVBQUUyQyxJQUFJLEVBQUUsR0FBRzFDO0lBQ2pCLE1BQU0yQyxPQUFPLENBQUMsR0FBRzdELG1CQUFtQjhELGlCQUFpQixFQUFFNUM7SUFDdkQsTUFBTUMsY0FBY3VDLGlCQUFpQjtJQUNyQyx3RkFBd0Y7SUFDdkYsSUFBR2hELG9CQUFvQnFELGtCQUFrQixFQUFFL0MsTUFBTWdELGFBQWE7SUFDL0QvQyxRQUFRZ0QsMEJBQTBCLEdBQUc7SUFDckMsSUFBSVIsZUFBZTtRQUNmLE9BQU9uRSxrQkFBa0IwQixPQUFPQyxTQUFTQyxJQUFJZ0QsUUFBUSxJQUFJL0M7SUFDN0Q7SUFDQSxNQUFNZ0QsbUJBQW1CLENBQUMsR0FBR3BELHdCQUF3QnFELHNCQUFzQixFQUFFbEQsS0FBS0YsTUFBTXFELE9BQU87SUFDL0YsSUFBSUMsaUJBQWlCdEQsTUFBTWdELGFBQWEsQ0FBQ25FLEdBQUcsQ0FBQ3NFO0lBQzdDLDJEQUEyRDtJQUMzRCxJQUFJLENBQUNHLGdCQUFnQjtRQUNqQixNQUFNNUIsT0FBTyxDQUFDLEdBQUc1QyxxQkFBcUJ5RSxtQkFBbUIsRUFBRXJELEtBQUtGLE1BQU13RCxJQUFJLEVBQUV4RCxNQUFNcUQsT0FBTyxFQUFFckQsTUFBTXlELE9BQU8sRUFDeEcsMERBQTBEO1FBbE9sRSxLQW1POEMsR0FBR25FLG9CQUFvQm9FLFlBQVksQ0FBQ0MsSUFBSSxHQUFHcEQsQ0FBU0E7UUFDMUYsTUFBTXFELG1CQUFtQjtZQUNyQmxDO1lBQ0EsaUVBQWlFO1lBQ2pFbUMsTUFBTTFCLEtBQXNDLEdBQUc3QyxvQkFBb0JvRSxZQUFZLENBQUNDLElBQUksR0FBR3JFLENBQTBDO1lBQ2pJeUUsY0FBY0MsS0FBS0MsR0FBRztZQUN0QkMsc0JBQXNCbEUsTUFBTXdELElBQUk7WUFDaENXLGNBQWM7UUFDbEI7UUFDQW5FLE1BQU1nRCxhQUFhLENBQUNvQixHQUFHLENBQUNqQixrQkFBa0JTO1FBQzFDTixpQkFBaUJNO0lBQ3JCO0lBQ0EsTUFBTVMsMkJBQTJCLENBQUMsR0FBRzVFLDZCQUE2QjZFLDJCQUEyQixFQUFFaEI7SUFDL0YsMERBQTBEO0lBQzFELE1BQU0sRUFBRVksb0JBQW9CLEVBQUV4QyxJQUFJLEVBQUUsR0FBRzRCO0lBQ3ZDM0QsaUJBQWlCNEUsYUFBYSxDQUFDQyxJQUFJLENBQUM5QztJQUNwQyxPQUFPQSxLQUFLK0MsSUFBSSxDQUFDLENBQUNDO1FBQ2QsSUFBSSxDQUFDQyxZQUFZQyxzQkFBc0J3QixXQUFXLEdBQUcxQjtRQUNyRCxpQ0FBaUM7UUFDakMsSUFBSXBCLGtCQUFrQixDQUFDQSxlQUFlYSxZQUFZLEVBQUU7WUFDaEQsZ0dBQWdHO1lBQ2hHYixlQUFlYSxZQUFZLEdBQUdILEtBQUtDLEdBQUc7UUFDMUM7UUFDQSw0REFBNEQ7UUFDNUQsSUFBSSxPQUFPVSxlQUFlLFVBQVU7WUFDaEMsT0FBT3JHLGtCQUFrQjBCLE9BQU9DLFNBQVMwRSxZQUFZeEU7UUFDekQ7UUFDQSxJQUFJMkUsY0FBYzlFLE1BQU13RCxJQUFJO1FBQzVCLElBQUlqQyxlQUFldkIsTUFBTStFLEtBQUs7UUFDOUIsSUFBSXpFLHFCQUFxQixFQUFFO1FBQzNCLHFFQUFxRTtRQUNyRSxxRUFBcUU7UUFDckUsNkRBQTZEO1FBQzdELGdCQUFnQjtRQUNoQixLQUFLLE1BQU0wRSxrQkFBa0JMLFdBQVc7WUFDcEMsTUFBTW5ELG9CQUFvQndELGVBQWVDLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDbkQsMERBQTBEO1lBQzFELE1BQU14RCxZQUFZdUQsZUFBZUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDN0Msc0JBQXNCO1lBQ3RCLE1BQU1DLG9DQUFvQztnQkFDdEM7bUJBQ0cxRDthQUNOO1lBQ0Qsd0VBQXdFO1lBQ3hFLElBQUkyRCxVQUFVLENBQUMsR0FBR2hHLDZCQUE2QmlHLHNDQUFzQyxFQUNyRkYsbUNBQW1DSixhQUFhckQ7WUFDaEQsa0dBQWtHO1lBQ2xHLDZJQUE2STtZQUM3SSxJQUFJMEQsWUFBWSxNQUFNO2dCQUNsQkEsVUFBVSxDQUFDLEdBQUdoRyw2QkFBNkJpRyxzQ0FBc0MsRUFDakZGLG1DQUFtQ2hCLHNCQUFzQnpDO1lBQzdEO1lBQ0EsSUFBSTBELFlBQVksTUFBTTtnQkFDbEIsSUFBSSxDQUFDLEdBQUc5Riw2QkFBNkJnRywyQkFBMkIsRUFBRVAsYUFBYUssVUFBVTtvQkFDckYsT0FBTzdHLGtCQUFrQjBCLE9BQU9DLFNBQVM0QyxNQUFNMUM7Z0JBQ25EO2dCQUNBLElBQ0EsK0RBQStEO2dCQUMvRCwrREFBK0Q7Z0JBQy9ELDBCQUEwQjtnQkFDMUIsb0VBQW9FO2dCQUNwRSxpRUFBaUU7Z0JBQ2pFLHVCQUF1QjtnQkFDdkI2RSxlQUFlakUsTUFBTSxLQUFLLEdBQUc7b0JBQ3pCLE1BQU1zRixpQkFBaUJyQixjQUFjLENBQUMsRUFBRTtvQkFDeEMsTUFBTXNCLFdBQVd0QixjQUFjLENBQUMsRUFBRTtvQkFDbEMsTUFBTXVCLE9BQU92QixjQUFjLENBQUMsRUFBRTtvQkFDOUIsMkRBQTJEO29CQUMzRCw4REFBOEQ7b0JBQzlELHdCQUF3QjtvQkFDeEIsTUFBTXdCLGtCQUFrQm5DLDZCQUE2QjVFLDZCQUE2QmdHLHdCQUF3QixDQUFDRSxLQUFLO29CQUNoSCxNQUFNYyxPQUFPLENBQUMsR0FBRzNHLGdCQUFnQjRHLDJCQUEyQixFQUFFbkYsY0FBY3VELGFBQWF1QixnQkFBZ0JDLFVBQVVDLE1BQU1DO29CQUN6SCxJQUFJQyxTQUFTLFFBQVFBLEtBQUtFLElBQUksS0FBSyxNQUFNO3dCQUNyQyxpRUFBaUU7d0JBQ2pFLDREQUE0RDt3QkFDNUQsK0RBQStEO3dCQUMvRCxpRUFBaUU7d0JBQ2pFLGdFQUFnRTt3QkFDaEUsOEJBQThCO3dCQUM5QixNQUFNQyxxQkFBcUJILEtBQUtJLEtBQUs7d0JBQ3JDMUIsVUFBVXlCO3dCQUNWLE1BQU10RixXQUFXbUYsS0FBS0UsSUFBSTt3QkFDMUIsNkRBQTZEO3dCQUM3RCxtQ0FBbUM7d0JBQ25DLEVBQUU7d0JBQ0YsaUVBQWlFO3dCQUNqRSwrREFBK0Q7d0JBQy9ELHlEQUF5RDt3QkFDekQsMkRBQTJEO3dCQUMzRCw2REFBNkQ7d0JBQzdELCtEQUErRDt3QkFDL0Qsa0VBQWtFO3dCQUNsRSxrRUFBa0U7d0JBQ2xFLGlFQUFpRTt3QkFDakUsZ0RBQWdEO3dCQUMvQyxJQUFHN0csZ0JBQWdCZ0gsdUJBQXVCLEVBQUVMLE1BQU0sQ0FBQyxHQUFHM0gscUJBQXFCeUUsbUJBQW1CLEVBQUVyRCxLQUFLNEUsYUFBYTlFLE1BQU1xRCxPQUFPLEVBQUVyRCxNQUFNeUQsT0FBTzt3QkFDL0l4RCxRQUFROEUsS0FBSyxHQUFHekQ7b0JBQ3BCLE9BQU87d0JBQ0gsMkNBQTJDO3dCQUMzQyxrRUFBa0U7d0JBQ2xFLDhEQUE4RDt3QkFDOUQsbUJBQW1CO3dCQUNuQjZELFVBQVVrQjtvQkFDZDtnQkFDSixPQUFPO29CQUNILDZEQUE2RDtvQkFDN0QsMENBQTBDO29CQUMxQyw2REFBNkQ7b0JBQzdELCtEQUErRDtvQkFDL0QsbUVBQW1FO29CQUNuRSx5REFBeUQ7b0JBQ3pELHFCQUFxQjtvQkFDckIsTUFBTXRCLFFBQVEsQ0FBQyxHQUFHbkYsV0FBVzBGLG9CQUFvQjtvQkFDakQsSUFBSUMsVUFBVSxDQUFDLEdBQUcvRixpQkFBaUJnRyxlQUFlLEVBQUVqRSxjQUFjd0QsT0FBT0MsZ0JBQWdCLENBQUMxQixrQkFBa0IsT0FBTyxLQUFLLElBQUlBLGVBQWVPLElBQUksTUFBTSxVQUFVUSw2QkFBNkI1RSw2QkFBNkJnRyx3QkFBd0IsQ0FBQ0MsUUFBUTtvQkFDMVAsSUFBSSxDQUFDSCxXQUFXbEIsNkJBQTZCNUUsNkJBQTZCZ0csd0JBQXdCLENBQUNFLEtBQUssRUFBRTt3QkFDdEdKLFVBQVVsRSx5QkFBeUIwRCxPQUFPeEQsY0FBY0MsbUJBQW1CQyxXQUMzRSxJQUFJLENBQUMsR0FBRzNDLHFCQUFxQnlFLG1CQUFtQixFQUFFckQsS0FBSzRFLGFBQWE5RSxNQUFNcUQsT0FBTyxFQUFFckQsTUFBTXlELE9BQU87b0JBQ3BHO29CQUNBLE1BQU1tQyxlQUFlLENBQUMsR0FBR3hHLG9CQUFvQnlHLGtCQUFrQixFQUMvRFgsbUNBQW1DSjtvQkFDbkMsSUFBSWMsY0FBYzt3QkFDZCwyQ0FBMkM7d0JBQzNDYixNQUFNbkQsR0FBRyxHQUFHTCxhQUFhSyxHQUFHO3dCQUM1Qm1ELE1BQU1sRCxXQUFXLEdBQUdOLGFBQWFNLFdBQVc7d0JBQzNDLElBQUc1Qyx1Q0FBdUM2RyxxQ0FBcUMsRUFBRWYsT0FBT3hELGNBQWNDO3dCQUN2Ryw4RUFBOEU7d0JBQzlFdkIsUUFBUThFLEtBQUssR0FBR0E7b0JBQ3BCLE9BQU8sSUFBSVEsU0FBUzt3QkFDaEJ0RixRQUFROEUsS0FBSyxHQUFHQTtvQkFDcEI7Z0JBQ0o7Z0JBQ0FELGNBQWNLO2dCQUNkLEtBQUssTUFBTVksY0FBY3RGLDBCQUEwQmdCLFdBQVc7b0JBQzFELE1BQU11RSx3QkFBd0I7MkJBQ3ZCeEU7MkJBQ0F1RTtxQkFDTjtvQkFDRCxrRkFBa0Y7b0JBQ2xGLElBQUlDLHFCQUFxQixDQUFDQSxzQkFBc0JqRixNQUFNLEdBQUcsRUFBRSxLQUFLbEIsU0FBU29HLG1CQUFtQixFQUFFO3dCQUMxRjNGLG1CQUFtQmMsSUFBSSxDQUFDNEU7b0JBQzVCO2dCQUNKO1lBQ0o7UUFDSjtRQUNBL0YsUUFBUWlHLFdBQVcsR0FBR3BCO1FBQ3RCN0UsUUFBUUksWUFBWSxHQUFHdUUsdUJBQXVCLENBQUMsR0FBRzVGLG1CQUFtQjhELGlCQUFpQixFQUFFOEIsd0JBQXdCL0I7UUFDaEg1QyxRQUFRRSxXQUFXLEdBQUdBO1FBQ3RCRixRQUFRSyxrQkFBa0IsR0FBR0E7UUFDN0JMLFFBQVFrRyxZQUFZLEdBQUd2RDtRQUN2QjNDLFFBQVEwQyxZQUFZLEdBQUdBO1FBQ3ZCLE9BQU8sQ0FBQyxHQUFHcEQsZUFBZWlCLGFBQWEsRUFBRVIsT0FBT0M7SUFDcEQsR0FBRyxJQUFJRDtBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU83QixRQUFRNEksT0FBTyxLQUFLLGNBQWUsT0FBTzVJLFFBQVE0SSxPQUFPLEtBQUssWUFBWTVJLFFBQVE0SSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU81SSxRQUFRNEksT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySy9JLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTRJLE9BQU8sRUFBRSxjQUFjO1FBQUUzSSxPQUFPO0lBQUs7SUFDbkVILE9BQU9nSixNQUFNLENBQUM5SSxRQUFRNEksT0FBTyxFQUFFNUk7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUTRJLE9BQU87QUFDbEMsRUFFQSw0Q0FBNEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9uYXZpZ2F0ZS1yZWR1Y2VyLmpzP2Q4MTciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBoYW5kbGVFeHRlcm5hbFVybDogbnVsbCxcbiAgICBuYXZpZ2F0ZVJlZHVjZXI6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgaGFuZGxlRXh0ZXJuYWxVcmw6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmw7XG4gICAgfSxcbiAgICBuYXZpZ2F0ZVJlZHVjZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmF2aWdhdGVSZWR1Y2VyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ZldGNoc2VydmVycmVzcG9uc2UgPSByZXF1aXJlKFwiLi4vZmV0Y2gtc2VydmVyLXJlc3BvbnNlXCIpO1xuY29uc3QgX2NyZWF0ZWhyZWZmcm9tdXJsID0gcmVxdWlyZShcIi4uL2NyZWF0ZS1ocmVmLWZyb20tdXJsXCIpO1xuY29uc3QgX2ludmFsaWRhdGVjYWNoZWJlbG93ZmxpZ2h0c2VnbWVudHBhdGggPSByZXF1aXJlKFwiLi4vaW52YWxpZGF0ZS1jYWNoZS1iZWxvdy1mbGlnaHQtc2VnbWVudHBhdGhcIik7XG5jb25zdCBfZmlsbGNhY2hld2l0aGRhdGFwcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9maWxsLWNhY2hlLXdpdGgtZGF0YS1wcm9wZXJ0eVwiKTtcbmNvbnN0IF9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUgPSByZXF1aXJlKFwiLi4vYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWVcIik7XG5jb25zdCBfc2hvdWxkaGFyZG5hdmlnYXRlID0gcmVxdWlyZShcIi4uL3Nob3VsZC1oYXJkLW5hdmlnYXRlXCIpO1xuY29uc3QgX2lzbmF2aWdhdGluZ3RvbmV3cm9vdGxheW91dCA9IHJlcXVpcmUoXCIuLi9pcy1uYXZpZ2F0aW5nLXRvLW5ldy1yb290LWxheW91dFwiKTtcbmNvbnN0IF9yb3V0ZXJyZWR1Y2VydHlwZXMgPSByZXF1aXJlKFwiLi4vcm91dGVyLXJlZHVjZXItdHlwZXNcIik7XG5jb25zdCBfaGFuZGxlbXV0YWJsZSA9IHJlcXVpcmUoXCIuLi9oYW5kbGUtbXV0YWJsZVwiKTtcbmNvbnN0IF9hcHBseWZsaWdodGRhdGEgPSByZXF1aXJlKFwiLi4vYXBwbHktZmxpZ2h0LWRhdGFcIik7XG5jb25zdCBfZ2V0cHJlZmV0Y2hjYWNoZWVudHJ5c3RhdHVzID0gcmVxdWlyZShcIi4uL2dldC1wcmVmZXRjaC1jYWNoZS1lbnRyeS1zdGF0dXNcIik7XG5jb25zdCBfcHJ1bmVwcmVmZXRjaGNhY2hlID0gcmVxdWlyZShcIi4vcHJ1bmUtcHJlZmV0Y2gtY2FjaGVcIik7XG5jb25zdCBfcHJlZmV0Y2hyZWR1Y2VyID0gcmVxdWlyZShcIi4vcHJlZmV0Y2gtcmVkdWNlclwiKTtcbmNvbnN0IF9hcHByb3V0ZXIgPSByZXF1aXJlKFwiLi4vLi4vYXBwLXJvdXRlclwiKTtcbmNvbnN0IF9zZWdtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL3NoYXJlZC9saWIvc2VnbWVudFwiKTtcbmNvbnN0IF9wcHJuYXZpZ2F0aW9ucyA9IHJlcXVpcmUoXCIuLi9wcHItbmF2aWdhdGlvbnNcIik7XG5jb25zdCBfY3JlYXRlcHJlZmV0Y2hjYWNoZWtleSA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1wcmVmZXRjaC1jYWNoZS1rZXlcIik7XG5mdW5jdGlvbiBoYW5kbGVFeHRlcm5hbFVybChzdGF0ZSwgbXV0YWJsZSwgdXJsLCBwZW5kaW5nUHVzaCkge1xuICAgIG11dGFibGUubXBhTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSB1cmw7XG4gICAgbXV0YWJsZS5wZW5kaW5nUHVzaCA9IHBlbmRpbmdQdXNoO1xuICAgIG11dGFibGUuc2Nyb2xsYWJsZVNlZ21lbnRzID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiAoMCwgX2hhbmRsZW11dGFibGUuaGFuZGxlTXV0YWJsZSkoc3RhdGUsIG11dGFibGUpO1xufVxuZnVuY3Rpb24gZ2VuZXJhdGVTZWdtZW50c0Zyb21QYXRjaChmbGlnaHRSb3V0ZXJQYXRjaCkge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gW107XG4gICAgY29uc3QgW3NlZ21lbnQsIHBhcmFsbGVsUm91dGVzXSA9IGZsaWdodFJvdXRlclBhdGNoO1xuICAgIGlmIChPYmplY3Qua2V5cyhwYXJhbGxlbFJvdXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgc2VnbWVudFxuICAgICAgICAgICAgXVxuICAgICAgICBdO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtwYXJhbGxlbFJvdXRlS2V5LCBwYXJhbGxlbFJvdXRlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbGxlbFJvdXRlcykpe1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkU2VnbWVudCBvZiBnZW5lcmF0ZVNlZ21lbnRzRnJvbVBhdGNoKHBhcmFsbGVsUm91dGUpKXtcbiAgICAgICAgICAgIC8vIElmIHRoZSBzZWdtZW50IGlzIGVtcHR5LCBpdCBtZWFucyB3ZSBhcmUgYXQgdGhlIHJvb3Qgb2YgdGhlIHRyZWVcbiAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgc2VnbWVudHMucHVzaChbXG4gICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsUm91dGVLZXksXG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkU2VnbWVudFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWdtZW50cy5wdXNoKFtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZUtleSxcbiAgICAgICAgICAgICAgICAgICAgLi4uY2hpbGRTZWdtZW50XG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlZ21lbnRzO1xufVxuZnVuY3Rpb24gYWRkUmVmZXRjaFRvTGVhZlNlZ21lbnRzKG5ld0NhY2hlLCBjdXJyZW50Q2FjaGUsIGZsaWdodFNlZ21lbnRQYXRoLCB0cmVlUGF0Y2gsIGRhdGEpIHtcbiAgICBsZXQgYXBwbGllZFBhdGNoID0gZmFsc2U7XG4gICAgbmV3Q2FjaGUucnNjID0gY3VycmVudENhY2hlLnJzYztcbiAgICBuZXdDYWNoZS5wcmVmZXRjaFJzYyA9IGN1cnJlbnRDYWNoZS5wcmVmZXRjaFJzYztcbiAgICBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcyA9IG5ldyBNYXAoY3VycmVudENhY2hlLnBhcmFsbGVsUm91dGVzKTtcbiAgICBjb25zdCBzZWdtZW50UGF0aHNUb0ZpbGwgPSBnZW5lcmF0ZVNlZ21lbnRzRnJvbVBhdGNoKHRyZWVQYXRjaCkubWFwKChzZWdtZW50KT0+W1xuICAgICAgICAgICAgLi4uZmxpZ2h0U2VnbWVudFBhdGgsXG4gICAgICAgICAgICAuLi5zZWdtZW50XG4gICAgICAgIF0pO1xuICAgIGZvciAoY29uc3Qgc2VnbWVudFBhdGhzIG9mIHNlZ21lbnRQYXRoc1RvRmlsbCl7XG4gICAgICAgICgwLCBfZmlsbGNhY2hld2l0aGRhdGFwcm9wZXJ0eS5maWxsQ2FjaGVXaXRoRGF0YVByb3BlcnR5KShuZXdDYWNoZSwgY3VycmVudENhY2hlLCBzZWdtZW50UGF0aHMsIGRhdGEpO1xuICAgICAgICBhcHBsaWVkUGF0Y2ggPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gYXBwbGllZFBhdGNoO1xufVxuY29uc3QgbmF2aWdhdGVSZWR1Y2VyID0gcHJvY2Vzcy5lbnYuX19ORVhUX1BQUiA/IG5hdmlnYXRlUmVkdWNlcl9QUFIgOiBuYXZpZ2F0ZVJlZHVjZXJfbm9QUFI7XG4vLyBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiB3aGVuIFBQUiBpcyBkaXNhYmxlZC4gV2UgY2FuIGFzc3VtZSBpdHMgYmVoYXZpb3Jcbi8vIGlzIHJlbGF0aXZlbHkgc3RhYmxlIGJlY2F1c2UgaXQncyBiZWVuIHJ1bm5pbmcgaW4gcHJvZHVjdGlvbiBmb3IgYSB3aGlsZS5cbmZ1bmN0aW9uIG5hdmlnYXRlUmVkdWNlcl9ub1BQUihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgY29uc3QgeyB1cmwsIGlzRXh0ZXJuYWxVcmwsIG5hdmlnYXRlVHlwZSwgc2hvdWxkU2Nyb2xsIH0gPSBhY3Rpb247XG4gICAgY29uc3QgbXV0YWJsZSA9IHt9O1xuICAgIGNvbnN0IHsgaGFzaCB9ID0gdXJsO1xuICAgIGNvbnN0IGhyZWYgPSAoMCwgX2NyZWF0ZWhyZWZmcm9tdXJsLmNyZWF0ZUhyZWZGcm9tVXJsKSh1cmwpO1xuICAgIGNvbnN0IHBlbmRpbmdQdXNoID0gbmF2aWdhdGVUeXBlID09PSBcInB1c2hcIjtcbiAgICAvLyB3ZSB3YW50IHRvIHBydW5lIHRoZSBwcmVmZXRjaCBjYWNoZSBvbiBldmVyeSBuYXZpZ2F0aW9uIHRvIGF2b2lkIGl0IGdyb3dpbmcgdG9vIGxhcmdlXG4gICAgKDAsIF9wcnVuZXByZWZldGNoY2FjaGUucHJ1bmVQcmVmZXRjaENhY2hlKShzdGF0ZS5wcmVmZXRjaENhY2hlKTtcbiAgICBtdXRhYmxlLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlID0gZmFsc2U7XG4gICAgaWYgKGlzRXh0ZXJuYWxVcmwpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKHN0YXRlLCBtdXRhYmxlLCB1cmwudG9TdHJpbmcoKSwgcGVuZGluZ1B1c2gpO1xuICAgIH1cbiAgICBjb25zdCBwcmVmZXRjaENhY2hlS2V5ID0gKDAsIF9jcmVhdGVwcmVmZXRjaGNhY2hla2V5LmNyZWF0ZVByZWZldGNoQ2FjaGVLZXkpKHVybCwgc3RhdGUubmV4dFVybCk7XG4gICAgbGV0IHByZWZldGNoVmFsdWVzID0gc3RhdGUucHJlZmV0Y2hDYWNoZS5nZXQocHJlZmV0Y2hDYWNoZUtleSk7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHByZWZldGNoIHZhbHVlLCB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmVcbiAgICBpZiAoIXByZWZldGNoVmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSAoMCwgX2ZldGNoc2VydmVycmVzcG9uc2UuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkodXJsLCBzdGF0ZS50cmVlLCBzdGF0ZS5uZXh0VXJsLCBzdGF0ZS5idWlsZElkLCAvLyBpbiBkZXYsIHRoZXJlJ3MgbmV2ZXIgZ29ubmEgYmUgYSBwcmVmZXRjaCBlbnRyeSBzbyB3ZSB3YW50IHRvIHByZWZldGNoIGhlcmVcbiAgICAgICAgLy8gaW4gb3JkZXIgdG8gc2ltdWxhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBwcmVmZXRjaCBjYWNoZVxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiID8gX3JvdXRlcnJlZHVjZXJ0eXBlcy5QcmVmZXRjaEtpbmQuQVVUTyA6IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IG5ld1ByZWZldGNoVmFsdWUgPSB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSBlbnRyeSB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciAzMHNcbiAgICAgICAgICAgIGtpbmQ6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgPyBfcm91dGVycmVkdWNlcnR5cGVzLlByZWZldGNoS2luZC5BVVRPIDogX3JvdXRlcnJlZHVjZXJ0eXBlcy5QcmVmZXRjaEtpbmQuVEVNUE9SQVJZLFxuICAgICAgICAgICAgcHJlZmV0Y2hUaW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgdHJlZUF0VGltZU9mUHJlZmV0Y2g6IHN0YXRlLnRyZWUsXG4gICAgICAgICAgICBsYXN0VXNlZFRpbWU6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdGUucHJlZmV0Y2hDYWNoZS5zZXQocHJlZmV0Y2hDYWNoZUtleSwgbmV3UHJlZmV0Y2hWYWx1ZSk7XG4gICAgICAgIHByZWZldGNoVmFsdWVzID0gbmV3UHJlZmV0Y2hWYWx1ZTtcbiAgICB9XG4gICAgY29uc3QgcHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzID0gKDAsIF9nZXRwcmVmZXRjaGNhY2hlZW50cnlzdGF0dXMuZ2V0UHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzKShwcmVmZXRjaFZhbHVlcyk7XG4gICAgLy8gVGhlIG9uZSBiZWZvcmUgbGFzdCBpdGVtIGlzIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSBwYXRjaFxuICAgIGNvbnN0IHsgdHJlZUF0VGltZU9mUHJlZmV0Y2gsIGRhdGEgfSA9IHByZWZldGNoVmFsdWVzO1xuICAgIF9wcmVmZXRjaHJlZHVjZXIucHJlZmV0Y2hRdWV1ZS5idW1wKGRhdGEpO1xuICAgIHJldHVybiBkYXRhLnRoZW4oKHBhcmFtKT0+e1xuICAgICAgICBsZXQgW2ZsaWdodERhdGEsIGNhbm9uaWNhbFVybE92ZXJyaWRlLCBwb3N0cG9uZWRdID0gcGFyYW07XG4gICAgICAgIC8vIHdlIG9ubHkgd2FudCB0byBtYXJrIHRoaXMgb25jZVxuICAgICAgICBpZiAocHJlZmV0Y2hWYWx1ZXMgJiYgIXByZWZldGNoVmFsdWVzLmxhc3RVc2VkVGltZSkge1xuICAgICAgICAgICAgLy8gaW1wb3J0YW50OiB3ZSBzaG91bGQgb25seSBtYXJrIHRoZSBjYWNoZSBub2RlIGFzIGRpcnR5IGFmdGVyIHdlIHVuc3VzcGVuZCBmcm9tIHRoZSBjYWxsIGFib3ZlXG4gICAgICAgICAgICBwcmVmZXRjaFZhbHVlcy5sYXN0VXNlZFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZW4gbmF2aWdhdGluZyB0byBwYWdlIGluIGBwYWdlc2AgZnJvbSBgYXBwYFxuICAgICAgICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChzdGF0ZSwgbXV0YWJsZSwgZmxpZ2h0RGF0YSwgcGVuZGluZ1B1c2gpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjdXJyZW50VHJlZSA9IHN0YXRlLnRyZWU7XG4gICAgICAgIGxldCBjdXJyZW50Q2FjaGUgPSBzdGF0ZS5jYWNoZTtcbiAgICAgICAgbGV0IHNjcm9sbGFibGVTZWdtZW50cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZsaWdodERhdGFQYXRoIG9mIGZsaWdodERhdGEpe1xuICAgICAgICAgICAgY29uc3QgZmxpZ2h0U2VnbWVudFBhdGggPSBmbGlnaHREYXRhUGF0aC5zbGljZSgwLCAtNCk7XG4gICAgICAgICAgICAvLyBUaGUgb25lIGJlZm9yZSBsYXN0IGl0ZW0gaXMgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIHBhdGNoXG4gICAgICAgICAgICBjb25zdCB0cmVlUGF0Y2ggPSBmbGlnaHREYXRhUGF0aC5zbGljZSgtMylbMF07XG4gICAgICAgICAgICAvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgICBjb25zdCBmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHkgPSBbXG4gICAgICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgICAgICAuLi5mbGlnaHRTZWdtZW50UGF0aFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgdHJlZSBiYXNlZCBvbiB0aGUgZmxpZ2h0U2VnbWVudFBhdGggYW5kIHJvdXRlciBzdGF0ZSBwYXRjaFxuICAgICAgICAgICAgbGV0IG5ld1RyZWUgPSAoMCwgX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdCkoLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICAgICAgZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5LCBjdXJyZW50VHJlZSwgdHJlZVBhdGNoKTtcbiAgICAgICAgICAgIC8vIElmIHRoZSB0cmVlIHBhdGNoIGNhbid0IGJlIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnQgdHJlZSB0aGVuIHdlIHVzZSB0aGUgdHJlZSBhdCB0aW1lIG9mIHByZWZldGNoXG4gICAgICAgICAgICAvLyBUT0RPLUFQUDogVGhpcyBzaG91bGQgaW5zdGVhZCBmaWxsIGluIHRoZSBtaXNzaW5nIHBpZWNlcyBpbiBgY3VycmVudFRyZWVgIHdpdGggdGhlIGRhdGEgZnJvbSBgdHJlZUF0VGltZU9mUHJlZmV0Y2hgLCB0aGVuIGFwcGx5IHRoZSBwYXRjaC5cbiAgICAgICAgICAgIGlmIChuZXdUcmVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbmV3VHJlZSA9ICgwLCBfYXBwbHlyb3V0ZXJzdGF0ZXBhdGNodG90cmVlLmFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZVNraXBEZWZhdWx0KSgvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgICAgICAgZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5LCB0cmVlQXRUaW1lT2ZQcmVmZXRjaCwgdHJlZVBhdGNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXdUcmVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0LmlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCkoY3VycmVudFRyZWUsIG5ld1RyZWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChzdGF0ZSwgbXV0YWJsZSwgaHJlZiwgcGVuZGluZ1B1c2gpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9ICgwLCBfYXBwcm91dGVyLmNyZWF0ZUVtcHR5Q2FjaGVOb2RlKSgpO1xuICAgICAgICAgICAgICAgIGxldCBhcHBsaWVkID0gKDAsIF9hcHBseWZsaWdodGRhdGEuYXBwbHlGbGlnaHREYXRhKShjdXJyZW50Q2FjaGUsIGNhY2hlLCBmbGlnaHREYXRhUGF0aCwgKHByZWZldGNoVmFsdWVzID09IG51bGwgPyB2b2lkIDAgOiBwcmVmZXRjaFZhbHVlcy5raW5kKSA9PT0gXCJhdXRvXCIgJiYgcHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzID09PSBfZ2V0cHJlZmV0Y2hjYWNoZWVudHJ5c3RhdHVzLlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5yZXVzYWJsZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFhcHBsaWVkICYmIHByZWZldGNoRW50cnlDYWNoZVN0YXR1cyA9PT0gX2dldHByZWZldGNoY2FjaGVlbnRyeXN0YXR1cy5QcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuc3RhbGUgfHwgLy8gVE9ETy1BUFA6IElmIHRoZSBwcmVmZXRjaCB3YXMgcG9zdHBvbmVkLCB3ZSBkb24ndCB3YW50IHRvIGFwcGx5IGl0XG4gICAgICAgICAgICAgICAgLy8gdW50aWwgd2UgbGFuZCByb3V0ZXIgY2hhbmdlcyB0byBoYW5kbGUgdGhlIHBvc3Rwb25lZCBjYXNlLlxuICAgICAgICAgICAgICAgIHBvc3Rwb25lZCkge1xuICAgICAgICAgICAgICAgICAgICBhcHBsaWVkID0gYWRkUmVmZXRjaFRvTGVhZlNlZ21lbnRzKGNhY2hlLCBjdXJyZW50Q2FjaGUsIGZsaWdodFNlZ21lbnRQYXRoLCB0cmVlUGF0Y2gsIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgICAgICAgICAgICAgICAgKCk9PigwLCBfZmV0Y2hzZXJ2ZXJyZXNwb25zZS5mZXRjaFNlcnZlclJlc3BvbnNlKSh1cmwsIGN1cnJlbnRUcmVlLCBzdGF0ZS5uZXh0VXJsLCBzdGF0ZS5idWlsZElkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGhhcmROYXZpZ2F0ZSA9ICgwLCBfc2hvdWxkaGFyZG5hdmlnYXRlLnNob3VsZEhhcmROYXZpZ2F0ZSkoLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICAgICAgICAgIGZsaWdodFNlZ21lbnRQYXRoV2l0aExlYWRpbmdFbXB0eSwgY3VycmVudFRyZWUpO1xuICAgICAgICAgICAgICAgIGlmIChoYXJkTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29weSByc2MgZm9yIHRoZSByb290IG5vZGUgb2YgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICBjYWNoZS5yc2MgPSBjdXJyZW50Q2FjaGUucnNjO1xuICAgICAgICAgICAgICAgICAgICBjYWNoZS5wcmVmZXRjaFJzYyA9IGN1cnJlbnRDYWNoZS5wcmVmZXRjaFJzYztcbiAgICAgICAgICAgICAgICAgICAgKDAsIF9pbnZhbGlkYXRlY2FjaGViZWxvd2ZsaWdodHNlZ21lbnRwYXRoLmludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGgpKGNhY2hlLCBjdXJyZW50Q2FjaGUsIGZsaWdodFNlZ21lbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBleGlzdGluZyBjYWNoZSB2YWx1ZSBpcyB1c2VkIHdoZW4gdGhlIGNhY2hlIHdhcyBub3QgaW52YWxpZGF0ZWQuXG4gICAgICAgICAgICAgICAgICAgIG11dGFibGUuY2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcGxpZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbXV0YWJsZS5jYWNoZSA9IGNhY2hlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50Q2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICBjdXJyZW50VHJlZSA9IG5ld1RyZWU7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJTZWdtZW50IG9mIGdlbmVyYXRlU2VnbWVudHNGcm9tUGF0Y2godHJlZVBhdGNoKSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVTZWdtZW50UGF0aCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZsaWdodFNlZ21lbnRQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3ViU2VnbWVudFxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSBfX0RFRkFVTFRfXyBwYXRocyBhcyB0aGV5IHNob3VsZG4ndCBiZSBzY3JvbGxlZCB0byBpbiB0aGlzIGNhc2UuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlU2VnbWVudFBhdGhbc2Nyb2xsYWJsZVNlZ21lbnRQYXRoLmxlbmd0aCAtIDFdICE9PSBfc2VnbWVudC5ERUZBVUxUX1NFR01FTlRfS0VZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlU2VnbWVudHMucHVzaChzY3JvbGxhYmxlU2VnbWVudFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG11dGFibGUucGF0Y2hlZFRyZWUgPSBjdXJyZW50VHJlZTtcbiAgICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSBjYW5vbmljYWxVcmxPdmVycmlkZSA/ICgwLCBfY3JlYXRlaHJlZmZyb211cmwuY3JlYXRlSHJlZkZyb21VcmwpKGNhbm9uaWNhbFVybE92ZXJyaWRlKSA6IGhyZWY7XG4gICAgICAgIG11dGFibGUucGVuZGluZ1B1c2ggPSBwZW5kaW5nUHVzaDtcbiAgICAgICAgbXV0YWJsZS5zY3JvbGxhYmxlU2VnbWVudHMgPSBzY3JvbGxhYmxlU2VnbWVudHM7XG4gICAgICAgIG11dGFibGUuaGFzaEZyYWdtZW50ID0gaGFzaDtcbiAgICAgICAgbXV0YWJsZS5zaG91bGRTY3JvbGwgPSBzaG91bGRTY3JvbGw7XG4gICAgICAgIHJldHVybiAoMCwgX2hhbmRsZW11dGFibGUuaGFuZGxlTXV0YWJsZSkoc3RhdGUsIG11dGFibGUpO1xuICAgIH0sICgpPT5zdGF0ZSk7XG59XG4vLyBUaGlzIGlzIHRoZSBleHBlcmltZW50YWwgUFBSIGltcGxlbWVudGF0aW9uLiBJdCdzIGNsb3NlciB0byB0aGUgYmVoYXZpb3Igd2Vcbi8vIHdhbnQsIGJ1dCBpcyBsaWtlbGllciB0byBpbmNsdWRlIGFjY2lkZW50YWwgcmVncmVzc2lvbnMgYmVjYXVzZSBpdCByZXdyaXRlc1xuLy8gZXhpc3RpbmcgZnVuY3Rpb25hbGl0eS5cbmZ1bmN0aW9uIG5hdmlnYXRlUmVkdWNlcl9QUFIoc3RhdGUsIGFjdGlvbikge1xuICAgIGNvbnN0IHsgdXJsLCBpc0V4dGVybmFsVXJsLCBuYXZpZ2F0ZVR5cGUsIHNob3VsZFNjcm9sbCB9ID0gYWN0aW9uO1xuICAgIGNvbnN0IG11dGFibGUgPSB7fTtcbiAgICBjb25zdCB7IGhhc2ggfSA9IHVybDtcbiAgICBjb25zdCBocmVmID0gKDAsIF9jcmVhdGVocmVmZnJvbXVybC5jcmVhdGVIcmVmRnJvbVVybCkodXJsKTtcbiAgICBjb25zdCBwZW5kaW5nUHVzaCA9IG5hdmlnYXRlVHlwZSA9PT0gXCJwdXNoXCI7XG4gICAgLy8gd2Ugd2FudCB0byBwcnVuZSB0aGUgcHJlZmV0Y2ggY2FjaGUgb24gZXZlcnkgbmF2aWdhdGlvbiB0byBhdm9pZCBpdCBncm93aW5nIHRvbyBsYXJnZVxuICAgICgwLCBfcHJ1bmVwcmVmZXRjaGNhY2hlLnBydW5lUHJlZmV0Y2hDYWNoZSkoc3RhdGUucHJlZmV0Y2hDYWNoZSk7XG4gICAgbXV0YWJsZS5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSA9IGZhbHNlO1xuICAgIGlmIChpc0V4dGVybmFsVXJsKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChzdGF0ZSwgbXV0YWJsZSwgdXJsLnRvU3RyaW5nKCksIHBlbmRpbmdQdXNoKTtcbiAgICB9XG4gICAgY29uc3QgcHJlZmV0Y2hDYWNoZUtleSA9ICgwLCBfY3JlYXRlcHJlZmV0Y2hjYWNoZWtleS5jcmVhdGVQcmVmZXRjaENhY2hlS2V5KSh1cmwsIHN0YXRlLm5leHRVcmwpO1xuICAgIGxldCBwcmVmZXRjaFZhbHVlcyA9IHN0YXRlLnByZWZldGNoQ2FjaGUuZ2V0KHByZWZldGNoQ2FjaGVLZXkpO1xuICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBwcmVmZXRjaCB2YWx1ZSwgd2UgbmVlZCB0byBjcmVhdGUgb25lXG4gICAgaWYgKCFwcmVmZXRjaFZhbHVlcykge1xuICAgICAgICBjb25zdCBkYXRhID0gKDAsIF9mZXRjaHNlcnZlcnJlc3BvbnNlLmZldGNoU2VydmVyUmVzcG9uc2UpKHVybCwgc3RhdGUudHJlZSwgc3RhdGUubmV4dFVybCwgc3RhdGUuYnVpbGRJZCwgLy8gaW4gZGV2LCB0aGVyZSdzIG5ldmVyIGdvbm5hIGJlIGEgcHJlZmV0Y2ggZW50cnkgc28gd2Ugd2FudCB0byBwcmVmZXRjaCBoZXJlXG4gICAgICAgIC8vIGluIG9yZGVyIHRvIHNpbXVsYXRlIHRoZSBiZWhhdmlvciBvZiB0aGUgcHJlZmV0Y2ggY2FjaGVcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiA/IF9yb3V0ZXJyZWR1Y2VydHlwZXMuUHJlZmV0Y2hLaW5kLkFVVE8gOiB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCBuZXdQcmVmZXRjaFZhbHVlID0ge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgZW50cnkgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgMzBzXG4gICAgICAgICAgICBraW5kOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiID8gX3JvdXRlcnJlZHVjZXJ0eXBlcy5QcmVmZXRjaEtpbmQuQVVUTyA6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuUHJlZmV0Y2hLaW5kLlRFTVBPUkFSWSxcbiAgICAgICAgICAgIHByZWZldGNoVGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHRyZWVBdFRpbWVPZlByZWZldGNoOiBzdGF0ZS50cmVlLFxuICAgICAgICAgICAgbGFzdFVzZWRUaW1lOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIHN0YXRlLnByZWZldGNoQ2FjaGUuc2V0KHByZWZldGNoQ2FjaGVLZXksIG5ld1ByZWZldGNoVmFsdWUpO1xuICAgICAgICBwcmVmZXRjaFZhbHVlcyA9IG5ld1ByZWZldGNoVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHByZWZldGNoRW50cnlDYWNoZVN0YXR1cyA9ICgwLCBfZ2V0cHJlZmV0Y2hjYWNoZWVudHJ5c3RhdHVzLmdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1cykocHJlZmV0Y2hWYWx1ZXMpO1xuICAgIC8vIFRoZSBvbmUgYmVmb3JlIGxhc3QgaXRlbSBpcyB0aGUgcm91dGVyIHN0YXRlIHRyZWUgcGF0Y2hcbiAgICBjb25zdCB7IHRyZWVBdFRpbWVPZlByZWZldGNoLCBkYXRhIH0gPSBwcmVmZXRjaFZhbHVlcztcbiAgICBfcHJlZmV0Y2hyZWR1Y2VyLnByZWZldGNoUXVldWUuYnVtcChkYXRhKTtcbiAgICByZXR1cm4gZGF0YS50aGVuKChwYXJhbSk9PntcbiAgICAgICAgbGV0IFtmbGlnaHREYXRhLCBjYW5vbmljYWxVcmxPdmVycmlkZSwgX3Bvc3Rwb25lZF0gPSBwYXJhbTtcbiAgICAgICAgLy8gd2Ugb25seSB3YW50IHRvIG1hcmsgdGhpcyBvbmNlXG4gICAgICAgIGlmIChwcmVmZXRjaFZhbHVlcyAmJiAhcHJlZmV0Y2hWYWx1ZXMubGFzdFVzZWRUaW1lKSB7XG4gICAgICAgICAgICAvLyBpbXBvcnRhbnQ6IHdlIHNob3VsZCBvbmx5IG1hcmsgdGhlIGNhY2hlIG5vZGUgYXMgZGlydHkgYWZ0ZXIgd2UgdW5zdXNwZW5kIGZyb20gdGhlIGNhbGwgYWJvdmVcbiAgICAgICAgICAgIHByZWZldGNoVmFsdWVzLmxhc3RVc2VkVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBuYXZpZ2F0aW5nIHRvIHBhZ2UgaW4gYHBhZ2VzYCBmcm9tIGBhcHBgXG4gICAgICAgIGlmICh0eXBlb2YgZmxpZ2h0RGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKHN0YXRlLCBtdXRhYmxlLCBmbGlnaHREYXRhLCBwZW5kaW5nUHVzaCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGN1cnJlbnRUcmVlID0gc3RhdGUudHJlZTtcbiAgICAgICAgbGV0IGN1cnJlbnRDYWNoZSA9IHN0YXRlLmNhY2hlO1xuICAgICAgICBsZXQgc2Nyb2xsYWJsZVNlZ21lbnRzID0gW107XG4gICAgICAgIC8vIFRPRE86IEluIHByYWN0aWNlLCB0aGlzIGlzIGFsd2F5cyBhIHNpbmdsZSBpdGVtIGFycmF5LiBXZSBwcm9iYWJseVxuICAgICAgICAvLyBhcmVuJ3QgZ29pbmcgdG8gZXZlcnkgc2VuZCBtdWx0aXBsZSBzZWdtZW50cywgYXQgbGVhc3Qgbm90IGluIHRoaXNcbiAgICAgICAgLy8gZm9ybWF0LiBTbyB3ZSBjb3VsZCByZW1vdmUgdGhlIGV4dHJhIHdyYXBwZXIgZm9yIG5vdyB1bnRpbFxuICAgICAgICAvLyB0aGF0IHNldHRsZXMuXG4gICAgICAgIGZvciAoY29uc3QgZmxpZ2h0RGF0YVBhdGggb2YgZmxpZ2h0RGF0YSl7XG4gICAgICAgICAgICBjb25zdCBmbGlnaHRTZWdtZW50UGF0aCA9IGZsaWdodERhdGFQYXRoLnNsaWNlKDAsIC00KTtcbiAgICAgICAgICAgIC8vIFRoZSBvbmUgYmVmb3JlIGxhc3QgaXRlbSBpcyB0aGUgcm91dGVyIHN0YXRlIHRyZWUgcGF0Y2hcbiAgICAgICAgICAgIGNvbnN0IHRyZWVQYXRjaCA9IGZsaWdodERhdGFQYXRoLnNsaWNlKC0zKVswXTtcbiAgICAgICAgICAgIC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgICAgICAgIGNvbnN0IGZsaWdodFNlZ21lbnRQYXRoV2l0aExlYWRpbmdFbXB0eSA9IFtcbiAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgICAgIC4uLmZsaWdodFNlZ21lbnRQYXRoXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyB0cmVlIGJhc2VkIG9uIHRoZSBmbGlnaHRTZWdtZW50UGF0aCBhbmQgcm91dGVyIHN0YXRlIHBhdGNoXG4gICAgICAgICAgICBsZXQgbmV3VHJlZSA9ICgwLCBfYXBwbHlyb3V0ZXJzdGF0ZXBhdGNodG90cmVlLmFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZVNraXBEZWZhdWx0KSgvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgICBmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHksIGN1cnJlbnRUcmVlLCB0cmVlUGF0Y2gpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHRyZWUgcGF0Y2ggY2FuJ3QgYmUgYXBwbGllZCB0byB0aGUgY3VycmVudCB0cmVlIHRoZW4gd2UgdXNlIHRoZSB0cmVlIGF0IHRpbWUgb2YgcHJlZmV0Y2hcbiAgICAgICAgICAgIC8vIFRPRE8tQVBQOiBUaGlzIHNob3VsZCBpbnN0ZWFkIGZpbGwgaW4gdGhlIG1pc3NpbmcgcGllY2VzIGluIGBjdXJyZW50VHJlZWAgd2l0aCB0aGUgZGF0YSBmcm9tIGB0cmVlQXRUaW1lT2ZQcmVmZXRjaGAsIHRoZW4gYXBwbHkgdGhlIHBhdGNoLlxuICAgICAgICAgICAgaWYgKG5ld1RyZWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdUcmVlID0gKDAsIF9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUuYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlU2tpcERlZmF1bHQpKC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgICAgICAgICAgICBmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHksIHRyZWVBdFRpbWVPZlByZWZldGNoLCB0cmVlUGF0Y2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld1RyZWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIF9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQuaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0KShjdXJyZW50VHJlZSwgbmV3VHJlZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKHN0YXRlLCBtdXRhYmxlLCBocmVmLCBwZW5kaW5nUHVzaCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgvLyBUaGlzIGlzIGp1c3QgYSBwYXJhbm9pZCBjaGVjay4gV2hlbiBQUFIgaXMgZW5hYmxlZCwgdGhlIHNlcnZlclxuICAgICAgICAgICAgICAgIC8vIHdpbGwgYWx3YXlzIHNlbmQgYmFjayBhIHN0YXRpYyByZXNwb25zZSB0aGF0J3MgcmVuZGVyZWQgZnJvbVxuICAgICAgICAgICAgICAgIC8vIHRoZSByb290LiBJZiBmb3Igc29tZSByZWFzb24gaXQgZG9lc24ndCwgd2UgZmFsbCBiYWNrIHRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIG5vbi1QUFIgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIGdldCByaWQgb2YgdGhlIGVsc2UgYnJhbmNoIGFuZCBkbyBhbGwgbmF2aWdhdGlvbnNcbiAgICAgICAgICAgICAgICAvLyB2aWEgdXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uLiBUaGUgY3VycmVudCBzdHJ1Y3R1cmUgaXMganVzdFxuICAgICAgICAgICAgICAgIC8vIGFuIGluY3JlbWVudGFsIHN0ZXAuXG4gICAgICAgICAgICAgICAgZmxpZ2h0RGF0YVBhdGgubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWZldGNoZWRUcmVlID0gZmxpZ2h0RGF0YVBhdGhbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZWREYXRhID0gZmxpZ2h0RGF0YVBhdGhbMV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWQgPSBmbGlnaHREYXRhUGF0aFsyXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgcHJlZmV0Y2hlZCBkYXRhIGlzIHN0YWxlLiBJZiBzbywgd2UnbGxcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGl0IGFuZCB3YWl0IGZvciB0aGUgZHluYW1pYyBkYXRhIHRvIHN0cmVhbSBpbiBiZWZvcmVcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hvd2luZyBuZXcgc2VnbWVudHMuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzUHJlZmV0Y2hTdGFsZSA9IHByZWZldGNoRW50cnlDYWNoZVN0YXR1cyA9PT0gX2dldHByZWZldGNoY2FjaGVlbnRyeXN0YXR1cy5QcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuc3RhbGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSAoMCwgX3Bwcm5hdmlnYXRpb25zLnVwZGF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbikoY3VycmVudENhY2hlLCBjdXJyZW50VHJlZSwgcHJlZmV0Y2hlZFRyZWUsIHNlZWREYXRhLCBoZWFkLCBpc1ByZWZldGNoU3RhbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFzayAhPT0gbnVsbCAmJiB0YXNrLm5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGNyZWF0ZWQgYSBuZXcgQ2FjaGUgTm9kZSB0cmVlIHRoYXQgY29udGFpbnMgYSBwcmVmZXRjaGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB2ZXJzaW9uIG9mIHRoZSBuZXh0IHBhZ2UuIFRoaXMgY2FuIGJlIHJlbmRlcmVkIGluc3RhbnRseS5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgdHJlZSBjb21wdXRlZCBieSB1cGRhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb24gaW5zdGVhZFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIG9uZSBjb21wdXRlZCBieSBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdC5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCByZW1vdmUgYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlU2tpcERlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIFBQUiBwYXRoIGVudGlyZWx5LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZFJvdXRlclN0YXRlID0gdGFzay5yb3V0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RyZWUgPSBwYXRjaGVkUm91dGVyU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDYWNoZSA9IHRhc2subm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwcmVmZXRjaGVkIHRyZWUgaGFzIGR5bmFtaWMgaG9sZXMgaW4gaXQuIFdlIGluaXRpYXRlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGR5bmFtaWMgcmVxdWVzdCB0byBmaWxsIHRoZW0gaW4uXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGJsb2NrIG9uIHRoZSByZXN1bHQuIFdlJ2xsIGltbWVkaWF0ZWx5IHJlbmRlciB0aGUgQ2FjaGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgdHJlZSBhbmQgc3VzcGVuZCBvbiB0aGUgZHluYW1pYyBwYXJ0cy4gV2hlbiB0aGUgcmVxdWVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tZXMgaW4sIHdlJ2xsIGZpbGwgaW4gbWlzc2luZyBkYXRhIGFuZCBwaW5nIFJlYWN0IHRvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZS1yZW5kZXIuIFVubGlrZSB0aGUgbGF6eSBmZXRjaGluZyBtb2RlbCBpbiB0aGUgbm9uLVBQUlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb24sIHRoaXMgaXMgbW9kZWxlZCBhcyBhIHNpbmdsZSBSZWFjdCB1cGRhdGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RyZWFtaW5nLCByYXRoZXIgdGhhbiBtdWx0aXBsZSB0b3AtbGV2ZWwgdXBkYXRlcy4gKEhvd2V2ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBldmVuIGluIHRoZSBuZXcgbW9kZWwsIHdlJ2xsIHN0aWxsIG5lZWQgdG8gc29tZXRpbWVzIHVwZGF0ZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJvb3QgbXVsdGlwbGUgdGltZXMgcGVyIG5hdmlnYXRpb24sIGxpa2UgaWYgdGhlIHNlcnZlciBzZW5kcyB1c1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBkaWZmZXJlbnQgcmVzcG9uc2UgdGhhbiB3ZSBleHBlY3RlZC4gRm9yIG5vdywgd2UgcmV2ZXJ0IGJhY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBsYXp5IGZldGNoaW5nIG1lY2hhbmlzbSBpbiB0aGF0IGNhc2UuKVxuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF9wcHJuYXZpZ2F0aW9ucy5saXN0ZW5Gb3JEeW5hbWljUmVxdWVzdCkodGFzaywgKDAsIF9mZXRjaHNlcnZlcnJlc3BvbnNlLmZldGNoU2VydmVyUmVzcG9uc2UpKHVybCwgY3VycmVudFRyZWUsIHN0YXRlLm5leHRVcmwsIHN0YXRlLmJ1aWxkSWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG11dGFibGUuY2FjaGUgPSBuZXdDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGhpbmcgY2hhbmdlZCwgc28gcmV1c2UgdGhlIG9sZCBjYWNoZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoYXQgaWYgdGhlIGhlYWQgY2hhbmdlZCBidXQgbm90IGFueSBvZiB0aGUgc2VnbWVudCBkYXRhP1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhhdCBwb3NzaWJsZT8gSWYgc28sIHdlIHNob3VsZCBjbG9uZSB0aGUgd2hvbGUgdHJlZSBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgaGVhZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RyZWUgPSBwcmVmZXRjaGVkVHJlZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdGF0aWMgcmVzcG9uc2UgZG9lcyBub3QgaW5jbHVkZSBhbnkgZHluYW1pYyBob2xlcywgc29cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUncyBubyBuZWVkIHRvIGRvIGEgc2Vjb25kIHJlcXVlc3QuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IEFzIGFuIGluY3JlbWVudGFsIHN0ZXAgdGhpcyBqdXN0IHJldmVydHMgYmFjayB0byB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gbm9uLVBQUiBpbXBsZW1lbnRhdGlvbi4gV2UgY2FuIHNpbXBsaWZ5IHRoaXMgYnJhbmNoIGZ1cnRoZXIsXG4gICAgICAgICAgICAgICAgICAgIC8vIGdpdmVuIHRoYXQgUFBSIHByZWZldGNoZXMgYXJlIGFsd2F5cyBzdGF0aWMgYW5kIHJldHVybiB0aGUgd2hvbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJlZS4gT3IgaW4gdGhlIG1lYW50aW1lIHdlIGNvdWxkIGZhY3RvciBpdCBvdXQgaW50byBhXG4gICAgICAgICAgICAgICAgICAgIC8vIHNlcGFyYXRlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9ICgwLCBfYXBwcm91dGVyLmNyZWF0ZUVtcHR5Q2FjaGVOb2RlKSgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXBwbGllZCA9ICgwLCBfYXBwbHlmbGlnaHRkYXRhLmFwcGx5RmxpZ2h0RGF0YSkoY3VycmVudENhY2hlLCBjYWNoZSwgZmxpZ2h0RGF0YVBhdGgsIChwcmVmZXRjaFZhbHVlcyA9PSBudWxsID8gdm9pZCAwIDogcHJlZmV0Y2hWYWx1ZXMua2luZCkgPT09IFwiYXV0b1wiICYmIHByZWZldGNoRW50cnlDYWNoZVN0YXR1cyA9PT0gX2dldHByZWZldGNoY2FjaGVlbnRyeXN0YXR1cy5QcmVmZXRjaENhY2hlRW50cnlTdGF0dXMucmV1c2FibGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFwcGxpZWQgJiYgcHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzID09PSBfZ2V0cHJlZmV0Y2hjYWNoZWVudHJ5c3RhdHVzLlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5zdGFsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGllZCA9IGFkZFJlZmV0Y2hUb0xlYWZTZWdtZW50cyhjYWNoZSwgY3VycmVudENhY2hlLCBmbGlnaHRTZWdtZW50UGF0aCwgdHJlZVBhdGNoLCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICAgICAgICAgICAgICAgICAgICAoKT0+KDAsIF9mZXRjaHNlcnZlcnJlc3BvbnNlLmZldGNoU2VydmVyUmVzcG9uc2UpKHVybCwgY3VycmVudFRyZWUsIHN0YXRlLm5leHRVcmwsIHN0YXRlLmJ1aWxkSWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXJkTmF2aWdhdGUgPSAoMCwgX3Nob3VsZGhhcmRuYXZpZ2F0ZS5zaG91bGRIYXJkTmF2aWdhdGUpKC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5LCBjdXJyZW50VHJlZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXJkTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvcHkgcnNjIGZvciB0aGUgcm9vdCBub2RlIG9mIHRoZSBjYWNoZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnJzYyA9IGN1cnJlbnRDYWNoZS5yc2M7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5wcmVmZXRjaFJzYyA9IGN1cnJlbnRDYWNoZS5wcmVmZXRjaFJzYztcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfaW52YWxpZGF0ZWNhY2hlYmVsb3dmbGlnaHRzZWdtZW50cGF0aC5pbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoKShjYWNoZSwgY3VycmVudENhY2hlLCBmbGlnaHRTZWdtZW50UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGV4aXN0aW5nIGNhY2hlIHZhbHVlIGlzIHVzZWQgd2hlbiB0aGUgY2FjaGUgd2FzIG5vdCBpbnZhbGlkYXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIG11dGFibGUuY2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHBsaWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtdXRhYmxlLmNhY2hlID0gY2FjaGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudFRyZWUgPSBuZXdUcmVlO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViU2VnbWVudCBvZiBnZW5lcmF0ZVNlZ21lbnRzRnJvbVBhdGNoKHRyZWVQYXRjaCkpe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlU2VnbWVudFBhdGggPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5mbGlnaHRTZWdtZW50UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN1YlNlZ21lbnRcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCB0aGUgX19ERUZBVUxUX18gcGF0aHMgYXMgdGhleSBzaG91bGRuJ3QgYmUgc2Nyb2xsZWQgdG8gaW4gdGhpcyBjYXNlLlxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZVNlZ21lbnRQYXRoW3Njcm9sbGFibGVTZWdtZW50UGF0aC5sZW5ndGggLSAxXSAhPT0gX3NlZ21lbnQuREVGQVVMVF9TRUdNRU5UX0tFWSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZVNlZ21lbnRzLnB1c2goc2Nyb2xsYWJsZVNlZ21lbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtdXRhYmxlLnBhdGNoZWRUcmVlID0gY3VycmVudFRyZWU7XG4gICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gY2Fub25pY2FsVXJsT3ZlcnJpZGUgPyAoMCwgX2NyZWF0ZWhyZWZmcm9tdXJsLmNyZWF0ZUhyZWZGcm9tVXJsKShjYW5vbmljYWxVcmxPdmVycmlkZSkgOiBocmVmO1xuICAgICAgICBtdXRhYmxlLnBlbmRpbmdQdXNoID0gcGVuZGluZ1B1c2g7XG4gICAgICAgIG11dGFibGUuc2Nyb2xsYWJsZVNlZ21lbnRzID0gc2Nyb2xsYWJsZVNlZ21lbnRzO1xuICAgICAgICBtdXRhYmxlLmhhc2hGcmFnbWVudCA9IGhhc2g7XG4gICAgICAgIG11dGFibGUuc2hvdWxkU2Nyb2xsID0gc2hvdWxkU2Nyb2xsO1xuICAgICAgICByZXR1cm4gKDAsIF9oYW5kbGVtdXRhYmxlLmhhbmRsZU11dGFibGUpKHN0YXRlLCBtdXRhYmxlKTtcbiAgICB9LCAoKT0+c3RhdGUpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1uYXZpZ2F0ZS1yZWR1Y2VyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsImhhbmRsZUV4dGVybmFsVXJsIiwibmF2aWdhdGVSZWR1Y2VyIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2ZldGNoc2VydmVycmVzcG9uc2UiLCJyZXF1aXJlIiwiX2NyZWF0ZWhyZWZmcm9tdXJsIiwiX2ludmFsaWRhdGVjYWNoZWJlbG93ZmxpZ2h0c2VnbWVudHBhdGgiLCJfZmlsbGNhY2hld2l0aGRhdGFwcm9wZXJ0eSIsIl9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUiLCJfc2hvdWxkaGFyZG5hdmlnYXRlIiwiX2lzbmF2aWdhdGluZ3RvbmV3cm9vdGxheW91dCIsIl9yb3V0ZXJyZWR1Y2VydHlwZXMiLCJfaGFuZGxlbXV0YWJsZSIsIl9hcHBseWZsaWdodGRhdGEiLCJfZ2V0cHJlZmV0Y2hjYWNoZWVudHJ5c3RhdHVzIiwiX3BydW5lcHJlZmV0Y2hjYWNoZSIsIl9wcmVmZXRjaHJlZHVjZXIiLCJfYXBwcm91dGVyIiwiX3NlZ21lbnQiLCJfcHBybmF2aWdhdGlvbnMiLCJfY3JlYXRlcHJlZmV0Y2hjYWNoZWtleSIsInN0YXRlIiwibXV0YWJsZSIsInVybCIsInBlbmRpbmdQdXNoIiwibXBhTmF2aWdhdGlvbiIsImNhbm9uaWNhbFVybCIsInNjcm9sbGFibGVTZWdtZW50cyIsInVuZGVmaW5lZCIsImhhbmRsZU11dGFibGUiLCJnZW5lcmF0ZVNlZ21lbnRzRnJvbVBhdGNoIiwiZmxpZ2h0Um91dGVyUGF0Y2giLCJzZWdtZW50cyIsInNlZ21lbnQiLCJwYXJhbGxlbFJvdXRlcyIsImtleXMiLCJsZW5ndGgiLCJwYXJhbGxlbFJvdXRlS2V5IiwicGFyYWxsZWxSb3V0ZSIsImVudHJpZXMiLCJjaGlsZFNlZ21lbnQiLCJwdXNoIiwiYWRkUmVmZXRjaFRvTGVhZlNlZ21lbnRzIiwibmV3Q2FjaGUiLCJjdXJyZW50Q2FjaGUiLCJmbGlnaHRTZWdtZW50UGF0aCIsInRyZWVQYXRjaCIsImRhdGEiLCJhcHBsaWVkUGF0Y2giLCJyc2MiLCJwcmVmZXRjaFJzYyIsIk1hcCIsInNlZ21lbnRQYXRoc1RvRmlsbCIsIm1hcCIsInNlZ21lbnRQYXRocyIsImZpbGxDYWNoZVdpdGhEYXRhUHJvcGVydHkiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1BQUiIsIm5hdmlnYXRlUmVkdWNlcl9QUFIiLCJuYXZpZ2F0ZVJlZHVjZXJfbm9QUFIiLCJhY3Rpb24iLCJpc0V4dGVybmFsVXJsIiwibmF2aWdhdGVUeXBlIiwic2hvdWxkU2Nyb2xsIiwiaGFzaCIsImhyZWYiLCJjcmVhdGVIcmVmRnJvbVVybCIsInBydW5lUHJlZmV0Y2hDYWNoZSIsInByZWZldGNoQ2FjaGUiLCJwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSIsInRvU3RyaW5nIiwicHJlZmV0Y2hDYWNoZUtleSIsImNyZWF0ZVByZWZldGNoQ2FjaGVLZXkiLCJuZXh0VXJsIiwicHJlZmV0Y2hWYWx1ZXMiLCJmZXRjaFNlcnZlclJlc3BvbnNlIiwidHJlZSIsImJ1aWxkSWQiLCJQcmVmZXRjaEtpbmQiLCJBVVRPIiwibmV3UHJlZmV0Y2hWYWx1ZSIsImtpbmQiLCJURU1QT1JBUlkiLCJwcmVmZXRjaFRpbWUiLCJEYXRlIiwibm93IiwidHJlZUF0VGltZU9mUHJlZmV0Y2giLCJsYXN0VXNlZFRpbWUiLCJzZXQiLCJwcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXMiLCJnZXRQcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXMiLCJwcmVmZXRjaFF1ZXVlIiwiYnVtcCIsInRoZW4iLCJwYXJhbSIsImZsaWdodERhdGEiLCJjYW5vbmljYWxVcmxPdmVycmlkZSIsInBvc3Rwb25lZCIsImN1cnJlbnRUcmVlIiwiY2FjaGUiLCJmbGlnaHREYXRhUGF0aCIsInNsaWNlIiwiZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5IiwibmV3VHJlZSIsImFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZVNraXBEZWZhdWx0IiwiaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IiwiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJhcHBsaWVkIiwiYXBwbHlGbGlnaHREYXRhIiwiUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzIiwicmV1c2FibGUiLCJzdGFsZSIsImhhcmROYXZpZ2F0ZSIsInNob3VsZEhhcmROYXZpZ2F0ZSIsImludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGgiLCJzdWJTZWdtZW50Iiwic2Nyb2xsYWJsZVNlZ21lbnRQYXRoIiwiREVGQVVMVF9TRUdNRU5UX0tFWSIsInBhdGNoZWRUcmVlIiwiaGFzaEZyYWdtZW50IiwiX3Bvc3Rwb25lZCIsInByZWZldGNoZWRUcmVlIiwic2VlZERhdGEiLCJoZWFkIiwiaXNQcmVmZXRjaFN0YWxlIiwidGFzayIsInVwZGF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbiIsIm5vZGUiLCJwYXRjaGVkUm91dGVyU3RhdGUiLCJyb3V0ZSIsImxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js": +/*!**********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js ***! + \**********************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n prefetchQueue: function() {\n return prefetchQueue;\n },\n prefetchReducer: function() {\n return prefetchReducer;\n }\n});\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _routerreducertypes = __webpack_require__(/*! ../router-reducer-types */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _pruneprefetchcache = __webpack_require__(/*! ./prune-prefetch-cache */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/prune-prefetch-cache.js\");\nconst _approuterheaders = __webpack_require__(/*! ../../app-router-headers */ \"(ssr)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _promisequeue = __webpack_require__(/*! ../../promise-queue */ \"(ssr)/./node_modules/next/dist/client/components/promise-queue.js\");\nconst _createprefetchcachekey = __webpack_require__(/*! ./create-prefetch-cache-key */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/create-prefetch-cache-key.js\");\nconst prefetchQueue = new _promisequeue.PromiseQueue(5);\nfunction prefetchReducer(state, action) {\n // let's prune the prefetch cache before we do anything else\n (0, _pruneprefetchcache.prunePrefetchCache)(state.prefetchCache);\n const { url } = action;\n url.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);\n const prefetchCacheKey = (0, _createprefetchcachekey.createPrefetchCacheKey)(url, state.nextUrl);\n const cacheEntry = state.prefetchCache.get(prefetchCacheKey);\n if (cacheEntry) {\n /**\n * If the cache entry present was marked as temporary, it means that we prefetched it from the navigate reducer,\n * where we didn't have the prefetch intent. We want to update it to the new, more accurate, kind here.\n */ if (cacheEntry.kind === _routerreducertypes.PrefetchKind.TEMPORARY) {\n state.prefetchCache.set(prefetchCacheKey, {\n ...cacheEntry,\n kind: action.kind\n });\n }\n /**\n * if the prefetch action was a full prefetch and that the current cache entry wasn't one, we want to re-prefetch,\n * otherwise we can re-use the current cache entry\n **/ if (!(cacheEntry.kind === _routerreducertypes.PrefetchKind.AUTO && action.kind === _routerreducertypes.PrefetchKind.FULL)) {\n return state;\n }\n }\n // fetchServerResponse is intentionally not awaited so that it can be unwrapped in the navigate-reducer\n const serverResponse = prefetchQueue.enqueue(()=>(0, _fetchserverresponse.fetchServerResponse)(url, state.tree, state.nextUrl, state.buildId, action.kind));\n // Create new tree based on the flightSegmentPath and router state patch\n state.prefetchCache.set(prefetchCacheKey, {\n // Create new tree based on the flightSegmentPath and router state patch\n treeAtTimeOfPrefetch: state.tree,\n data: serverResponse,\n kind: action.kind,\n prefetchTime: Date.now(),\n lastUsedTime: null\n });\n return state;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=prefetch-reducer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3ByZWZldGNoLXJlZHVjZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLGVBQWU7UUFDWCxPQUFPQTtJQUNYO0lBQ0FDLGlCQUFpQjtRQUNiLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLHVCQUF1QkMsbUJBQU9BLENBQUMsMEhBQTBCO0FBQy9ELE1BQU1DLHNCQUFzQkQsbUJBQU9BLENBQUMsd0hBQXlCO0FBQzdELE1BQU1FLHNCQUFzQkYsbUJBQU9BLENBQUMsZ0lBQXdCO0FBQzVELE1BQU1HLG9CQUFvQkgsbUJBQU9BLENBQUMsd0dBQTBCO0FBQzVELE1BQU1JLGdCQUFnQkosbUJBQU9BLENBQUMsOEZBQXFCO0FBQ25ELE1BQU1LLDBCQUEwQkwsbUJBQU9BLENBQUMsMElBQTZCO0FBQ3JFLE1BQU1ULGdCQUFnQixJQUFJYSxjQUFjRSxZQUFZLENBQUM7QUFDckQsU0FBU2QsZ0JBQWdCZSxLQUFLLEVBQUVDLE1BQU07SUFDbEMsNERBQTREO0lBQzNELElBQUdOLG9CQUFvQk8sa0JBQWtCLEVBQUVGLE1BQU1HLGFBQWE7SUFDL0QsTUFBTSxFQUFFQyxHQUFHLEVBQUUsR0FBR0g7SUFDaEJHLElBQUlDLFlBQVksQ0FBQ0MsTUFBTSxDQUFDVixrQkFBa0JXLG9CQUFvQjtJQUM5RCxNQUFNQyxtQkFBbUIsQ0FBQyxHQUFHVix3QkFBd0JXLHNCQUFzQixFQUFFTCxLQUFLSixNQUFNVSxPQUFPO0lBQy9GLE1BQU1DLGFBQWFYLE1BQU1HLGFBQWEsQ0FBQ1osR0FBRyxDQUFDaUI7SUFDM0MsSUFBSUcsWUFBWTtRQUNaOzs7S0FHSCxHQUFHLElBQUlBLFdBQVdDLElBQUksS0FBS2xCLG9CQUFvQm1CLFlBQVksQ0FBQ0MsU0FBUyxFQUFFO1lBQ2hFZCxNQUFNRyxhQUFhLENBQUNZLEdBQUcsQ0FBQ1Asa0JBQWtCO2dCQUN0QyxHQUFHRyxVQUFVO2dCQUNiQyxNQUFNWCxPQUFPVyxJQUFJO1lBQ3JCO1FBQ0o7UUFDQTs7O01BR0YsR0FBRyxJQUFJLENBQUVELENBQUFBLFdBQVdDLElBQUksS0FBS2xCLG9CQUFvQm1CLFlBQVksQ0FBQ0csSUFBSSxJQUFJZixPQUFPVyxJQUFJLEtBQUtsQixvQkFBb0JtQixZQUFZLENBQUNJLElBQUksR0FBRztZQUN4SCxPQUFPakI7UUFDWDtJQUNKO0lBQ0EsdUdBQXVHO0lBQ3ZHLE1BQU1rQixpQkFBaUJsQyxjQUFjbUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHM0IscUJBQXFCNEIsbUJBQW1CLEVBQUVoQixLQUMzRkosTUFBTXFCLElBQUksRUFBRXJCLE1BQU1VLE9BQU8sRUFBRVYsTUFBTXNCLE9BQU8sRUFBRXJCLE9BQU9XLElBQUk7SUFDekQsd0VBQXdFO0lBQ3hFWixNQUFNRyxhQUFhLENBQUNZLEdBQUcsQ0FBQ1Asa0JBQWtCO1FBQ3RDLHdFQUF3RTtRQUN4RWUsc0JBQXNCdkIsTUFBTXFCLElBQUk7UUFDaENHLE1BQU1OO1FBQ05OLE1BQU1YLE9BQU9XLElBQUk7UUFDakJhLGNBQWNDLEtBQUtDLEdBQUc7UUFDdEJDLGNBQWM7SUFDbEI7SUFDQSxPQUFPNUI7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPbkIsUUFBUWdELE9BQU8sS0FBSyxjQUFlLE9BQU9oRCxRQUFRZ0QsT0FBTyxLQUFLLFlBQVloRCxRQUFRZ0QsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPaEQsUUFBUWdELE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktuRCxPQUFPQyxjQUFjLENBQUNDLFFBQVFnRCxPQUFPLEVBQUUsY0FBYztRQUFFL0MsT0FBTztJQUFLO0lBQ25FSCxPQUFPb0QsTUFBTSxDQUFDbEQsUUFBUWdELE9BQU8sRUFBRWhEO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVFnRCxPQUFPO0FBQ2xDLEVBRUEsNENBQTRDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvcHJlZmV0Y2gtcmVkdWNlci5qcz8zYjNiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgcHJlZmV0Y2hRdWV1ZTogbnVsbCxcbiAgICBwcmVmZXRjaFJlZHVjZXI6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgcHJlZmV0Y2hRdWV1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwcmVmZXRjaFF1ZXVlO1xuICAgIH0sXG4gICAgcHJlZmV0Y2hSZWR1Y2VyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHByZWZldGNoUmVkdWNlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9mZXRjaHNlcnZlcnJlc3BvbnNlID0gcmVxdWlyZShcIi4uL2ZldGNoLXNlcnZlci1yZXNwb25zZVwiKTtcbmNvbnN0IF9yb3V0ZXJyZWR1Y2VydHlwZXMgPSByZXF1aXJlKFwiLi4vcm91dGVyLXJlZHVjZXItdHlwZXNcIik7XG5jb25zdCBfcHJ1bmVwcmVmZXRjaGNhY2hlID0gcmVxdWlyZShcIi4vcHJ1bmUtcHJlZmV0Y2gtY2FjaGVcIik7XG5jb25zdCBfYXBwcm91dGVyaGVhZGVycyA9IHJlcXVpcmUoXCIuLi8uLi9hcHAtcm91dGVyLWhlYWRlcnNcIik7XG5jb25zdCBfcHJvbWlzZXF1ZXVlID0gcmVxdWlyZShcIi4uLy4uL3Byb21pc2UtcXVldWVcIik7XG5jb25zdCBfY3JlYXRlcHJlZmV0Y2hjYWNoZWtleSA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1wcmVmZXRjaC1jYWNoZS1rZXlcIik7XG5jb25zdCBwcmVmZXRjaFF1ZXVlID0gbmV3IF9wcm9taXNlcXVldWUuUHJvbWlzZVF1ZXVlKDUpO1xuZnVuY3Rpb24gcHJlZmV0Y2hSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICAvLyBsZXQncyBwcnVuZSB0aGUgcHJlZmV0Y2ggY2FjaGUgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2VcbiAgICAoMCwgX3BydW5lcHJlZmV0Y2hjYWNoZS5wcnVuZVByZWZldGNoQ2FjaGUpKHN0YXRlLnByZWZldGNoQ2FjaGUpO1xuICAgIGNvbnN0IHsgdXJsIH0gPSBhY3Rpb247XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoX2FwcHJvdXRlcmhlYWRlcnMuTkVYVF9SU0NfVU5JT05fUVVFUlkpO1xuICAgIGNvbnN0IHByZWZldGNoQ2FjaGVLZXkgPSAoMCwgX2NyZWF0ZXByZWZldGNoY2FjaGVrZXkuY3JlYXRlUHJlZmV0Y2hDYWNoZUtleSkodXJsLCBzdGF0ZS5uZXh0VXJsKTtcbiAgICBjb25zdCBjYWNoZUVudHJ5ID0gc3RhdGUucHJlZmV0Y2hDYWNoZS5nZXQocHJlZmV0Y2hDYWNoZUtleSk7XG4gICAgaWYgKGNhY2hlRW50cnkpIHtcbiAgICAgICAgLyoqXG4gICAgICogSWYgdGhlIGNhY2hlIGVudHJ5IHByZXNlbnQgd2FzIG1hcmtlZCBhcyB0ZW1wb3JhcnksIGl0IG1lYW5zIHRoYXQgd2UgcHJlZmV0Y2hlZCBpdCBmcm9tIHRoZSBuYXZpZ2F0ZSByZWR1Y2VyLFxuICAgICAqIHdoZXJlIHdlIGRpZG4ndCBoYXZlIHRoZSBwcmVmZXRjaCBpbnRlbnQuIFdlIHdhbnQgdG8gdXBkYXRlIGl0IHRvIHRoZSBuZXcsIG1vcmUgYWNjdXJhdGUsIGtpbmQgaGVyZS5cbiAgICAgKi8gaWYgKGNhY2hlRW50cnkua2luZCA9PT0gX3JvdXRlcnJlZHVjZXJ0eXBlcy5QcmVmZXRjaEtpbmQuVEVNUE9SQVJZKSB7XG4gICAgICAgICAgICBzdGF0ZS5wcmVmZXRjaENhY2hlLnNldChwcmVmZXRjaENhY2hlS2V5LCB7XG4gICAgICAgICAgICAgICAgLi4uY2FjaGVFbnRyeSxcbiAgICAgICAgICAgICAgICBraW5kOiBhY3Rpb24ua2luZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICogaWYgdGhlIHByZWZldGNoIGFjdGlvbiB3YXMgYSBmdWxsIHByZWZldGNoIGFuZCB0aGF0IHRoZSBjdXJyZW50IGNhY2hlIGVudHJ5IHdhc24ndCBvbmUsIHdlIHdhbnQgdG8gcmUtcHJlZmV0Y2gsXG4gICAgICogb3RoZXJ3aXNlIHdlIGNhbiByZS11c2UgdGhlIGN1cnJlbnQgY2FjaGUgZW50cnlcbiAgICAgKiovIGlmICghKGNhY2hlRW50cnkua2luZCA9PT0gX3JvdXRlcnJlZHVjZXJ0eXBlcy5QcmVmZXRjaEtpbmQuQVVUTyAmJiBhY3Rpb24ua2luZCA9PT0gX3JvdXRlcnJlZHVjZXJ0eXBlcy5QcmVmZXRjaEtpbmQuRlVMTCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBmZXRjaFNlcnZlclJlc3BvbnNlIGlzIGludGVudGlvbmFsbHkgbm90IGF3YWl0ZWQgc28gdGhhdCBpdCBjYW4gYmUgdW53cmFwcGVkIGluIHRoZSBuYXZpZ2F0ZS1yZWR1Y2VyXG4gICAgY29uc3Qgc2VydmVyUmVzcG9uc2UgPSBwcmVmZXRjaFF1ZXVlLmVucXVldWUoKCk9PigwLCBfZmV0Y2hzZXJ2ZXJyZXNwb25zZS5mZXRjaFNlcnZlclJlc3BvbnNlKSh1cmwsIC8vIGluaXRpYWxUcmVlIGlzIHVzZWQgd2hlbiBoaXN0b3J5LnN0YXRlLnRyZWUgaXMgbWlzc2luZyBiZWNhdXNlIHRoZSBoaXN0b3J5IHN0YXRlIGlzIHNldCBpbiBgdXNlRWZmZWN0YCBiZWxvdywgaXQgYmVpbmcgbWlzc2luZyBtZWFucyB0aGlzIGlzIHRoZSBoeWRyYXRpb24gY2FzZS5cbiAgICAgICAgc3RhdGUudHJlZSwgc3RhdGUubmV4dFVybCwgc3RhdGUuYnVpbGRJZCwgYWN0aW9uLmtpbmQpKTtcbiAgICAvLyBDcmVhdGUgbmV3IHRyZWUgYmFzZWQgb24gdGhlIGZsaWdodFNlZ21lbnRQYXRoIGFuZCByb3V0ZXIgc3RhdGUgcGF0Y2hcbiAgICBzdGF0ZS5wcmVmZXRjaENhY2hlLnNldChwcmVmZXRjaENhY2hlS2V5LCB7XG4gICAgICAgIC8vIENyZWF0ZSBuZXcgdHJlZSBiYXNlZCBvbiB0aGUgZmxpZ2h0U2VnbWVudFBhdGggYW5kIHJvdXRlciBzdGF0ZSBwYXRjaFxuICAgICAgICB0cmVlQXRUaW1lT2ZQcmVmZXRjaDogc3RhdGUudHJlZSxcbiAgICAgICAgZGF0YTogc2VydmVyUmVzcG9uc2UsXG4gICAgICAgIGtpbmQ6IGFjdGlvbi5raW5kLFxuICAgICAgICBwcmVmZXRjaFRpbWU6IERhdGUubm93KCksXG4gICAgICAgIGxhc3RVc2VkVGltZTogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiBzdGF0ZTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJlZmV0Y2gtcmVkdWNlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJwcmVmZXRjaFF1ZXVlIiwicHJlZmV0Y2hSZWR1Y2VyIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2ZldGNoc2VydmVycmVzcG9uc2UiLCJyZXF1aXJlIiwiX3JvdXRlcnJlZHVjZXJ0eXBlcyIsIl9wcnVuZXByZWZldGNoY2FjaGUiLCJfYXBwcm91dGVyaGVhZGVycyIsIl9wcm9taXNlcXVldWUiLCJfY3JlYXRlcHJlZmV0Y2hjYWNoZWtleSIsIlByb21pc2VRdWV1ZSIsInN0YXRlIiwiYWN0aW9uIiwicHJ1bmVQcmVmZXRjaENhY2hlIiwicHJlZmV0Y2hDYWNoZSIsInVybCIsInNlYXJjaFBhcmFtcyIsImRlbGV0ZSIsIk5FWFRfUlNDX1VOSU9OX1FVRVJZIiwicHJlZmV0Y2hDYWNoZUtleSIsImNyZWF0ZVByZWZldGNoQ2FjaGVLZXkiLCJuZXh0VXJsIiwiY2FjaGVFbnRyeSIsImtpbmQiLCJQcmVmZXRjaEtpbmQiLCJURU1QT1JBUlkiLCJzZXQiLCJBVVRPIiwiRlVMTCIsInNlcnZlclJlc3BvbnNlIiwiZW5xdWV1ZSIsImZldGNoU2VydmVyUmVzcG9uc2UiLCJ0cmVlIiwiYnVpbGRJZCIsInRyZWVBdFRpbWVPZlByZWZldGNoIiwiZGF0YSIsInByZWZldGNoVGltZSIsIkRhdGUiLCJub3ciLCJsYXN0VXNlZFRpbWUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/prune-prefetch-cache.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/prune-prefetch-cache.js ***! + \**************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"prunePrefetchCache\", ({\n enumerable: true,\n get: function() {\n return prunePrefetchCache;\n }\n}));\nconst _getprefetchcacheentrystatus = __webpack_require__(/*! ../get-prefetch-cache-entry-status */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/get-prefetch-cache-entry-status.js\");\nfunction prunePrefetchCache(prefetchCache) {\n for (const [href, prefetchCacheEntry] of prefetchCache){\n if ((0, _getprefetchcacheentrystatus.getPrefetchEntryCacheStatus)(prefetchCacheEntry) === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.expired) {\n prefetchCache.delete(href);\n }\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=prune-prefetch-cache.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3BydW5lLXByZWZldGNoLWNhY2hlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxzREFBcUQ7SUFDakRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywrQkFBK0JDLG1CQUFPQSxDQUFDLDhJQUFvQztBQUNqRixTQUFTRixtQkFBbUJHLGFBQWE7SUFDckMsS0FBSyxNQUFNLENBQUNDLE1BQU1DLG1CQUFtQixJQUFJRixjQUFjO1FBQ25ELElBQUksQ0FBQyxHQUFHRiw2QkFBNkJLLDJCQUEyQixFQUFFRCx3QkFBd0JKLDZCQUE2Qk0sd0JBQXdCLENBQUNDLE9BQU8sRUFBRTtZQUNySkwsY0FBY00sTUFBTSxDQUFDTDtRQUN6QjtJQUNKO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT1IsUUFBUWMsT0FBTyxLQUFLLGNBQWUsT0FBT2QsUUFBUWMsT0FBTyxLQUFLLFlBQVlkLFFBQVFjLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2QsUUFBUWMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2pCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWMsT0FBTyxFQUFFLGNBQWM7UUFBRWIsT0FBTztJQUFLO0lBQ25FSCxPQUFPa0IsTUFBTSxDQUFDaEIsUUFBUWMsT0FBTyxFQUFFZDtJQUMvQmlCLE9BQU9qQixPQUFPLEdBQUdBLFFBQVFjLE9BQU87QUFDbEMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9wcnVuZS1wcmVmZXRjaC1jYWNoZS5qcz8xYmZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJ1bmVQcmVmZXRjaENhY2hlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwcnVuZVByZWZldGNoQ2FjaGU7XG4gICAgfVxufSk7XG5jb25zdCBfZ2V0cHJlZmV0Y2hjYWNoZWVudHJ5c3RhdHVzID0gcmVxdWlyZShcIi4uL2dldC1wcmVmZXRjaC1jYWNoZS1lbnRyeS1zdGF0dXNcIik7XG5mdW5jdGlvbiBwcnVuZVByZWZldGNoQ2FjaGUocHJlZmV0Y2hDYWNoZSkge1xuICAgIGZvciAoY29uc3QgW2hyZWYsIHByZWZldGNoQ2FjaGVFbnRyeV0gb2YgcHJlZmV0Y2hDYWNoZSl7XG4gICAgICAgIGlmICgoMCwgX2dldHByZWZldGNoY2FjaGVlbnRyeXN0YXR1cy5nZXRQcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXMpKHByZWZldGNoQ2FjaGVFbnRyeSkgPT09IF9nZXRwcmVmZXRjaGNhY2hlZW50cnlzdGF0dXMuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLmV4cGlyZWQpIHtcbiAgICAgICAgICAgIHByZWZldGNoQ2FjaGUuZGVsZXRlKGhyZWYpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcnVuZS1wcmVmZXRjaC1jYWNoZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicHJ1bmVQcmVmZXRjaENhY2hlIiwiX2dldHByZWZldGNoY2FjaGVlbnRyeXN0YXR1cyIsInJlcXVpcmUiLCJwcmVmZXRjaENhY2hlIiwiaHJlZiIsInByZWZldGNoQ2FjaGVFbnRyeSIsImdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1cyIsIlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cyIsImV4cGlyZWQiLCJkZWxldGUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/prune-prefetch-cache.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js": +/*!*********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js ***! + \*********************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"refreshReducer\", ({\n enumerable: true,\n get: function() {\n return refreshReducer;\n }\n}));\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ../fill-lazy-items-till-leaf-with-head */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\nfunction refreshReducer(state, action) {\n const { origin } = action;\n const mutable = {};\n const href = state.canonicalUrl;\n let currentTree = state.tree;\n mutable.preserveCustomHistoryState = false;\n const cache = (0, _approuter.createEmptyCacheNode)();\n // TODO-APP: verify that `href` is not an external url.\n // Fetch data from the root of the tree.\n cache.lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(href, origin), [\n currentTree[0],\n currentTree[1],\n currentTree[2],\n \"refetch\"\n ], state.nextUrl, state.buildId);\n return cache.lazyData.then((param)=>{\n let [flightData, canonicalUrlOverride] = param;\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === \"string\") {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n // Remove cache.lazyData as it has been resolved at this point.\n cache.lazyData = null;\n for (const flightDataPath of flightData){\n // FlightDataPath with more than two items means unexpected Flight data was returned\n if (flightDataPath.length !== 3) {\n // TODO-APP: handle this case better\n console.log(\"REFRESH FAILED\");\n return state;\n }\n // Given the path can only have two items the items are only the router state and rsc for the root.\n const [treePatch] = flightDataPath;\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToFullTree)([\n \"\"\n ], currentTree, treePatch);\n if (newTree === null) {\n return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, href, state.pushRef.pendingPush);\n }\n const canonicalUrlOverrideHref = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : undefined;\n if (canonicalUrlOverride) {\n mutable.canonicalUrl = canonicalUrlOverrideHref;\n }\n // The one before last item is the router state tree patch\n const [cacheNodeSeedData, head] = flightDataPath.slice(-2);\n // Handles case where prefetch only returns the router tree patch without rendered components.\n if (cacheNodeSeedData !== null) {\n const rsc = cacheNodeSeedData[2];\n cache.rsc = rsc;\n cache.prefetchRsc = null;\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(cache, undefined, treePatch, cacheNodeSeedData, head);\n mutable.cache = cache;\n mutable.prefetchCache = new Map();\n }\n mutable.patchedTree = newTree;\n mutable.canonicalUrl = href;\n currentTree = newTree;\n }\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, ()=>state);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=refresh-reducer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3JlZnJlc2gtcmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsa0RBQWlEO0lBQzdDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsdUJBQXVCQyxtQkFBT0EsQ0FBQywwSEFBMEI7QUFDL0QsTUFBTUMscUJBQXFCRCxtQkFBT0EsQ0FBQyx3SEFBeUI7QUFDNUQsTUFBTUUsK0JBQStCRixtQkFBT0EsQ0FBQyxnSkFBcUM7QUFDbEYsTUFBTUcsK0JBQStCSCxtQkFBT0EsQ0FBQyxnSkFBcUM7QUFDbEYsTUFBTUksbUJBQW1CSixtQkFBT0EsQ0FBQyx3SEFBb0I7QUFDckQsTUFBTUssaUJBQWlCTCxtQkFBT0EsQ0FBQyw0R0FBbUI7QUFDbEQsTUFBTU0saUNBQWlDTixtQkFBT0EsQ0FBQyxzSkFBd0M7QUFDdkYsTUFBTU8sYUFBYVAsbUJBQU9BLENBQUMsd0ZBQWtCO0FBQzdDLE1BQU1RLHlCQUF5QlIsbUJBQU9BLENBQUMsOEhBQTRCO0FBQ25FLFNBQVNGLGVBQWVXLEtBQUssRUFBRUMsTUFBTTtJQUNqQyxNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHRDtJQUNuQixNQUFNRSxVQUFVLENBQUM7SUFDakIsTUFBTUMsT0FBT0osTUFBTUssWUFBWTtJQUMvQixJQUFJQyxjQUFjTixNQUFNTyxJQUFJO0lBQzVCSixRQUFRSywwQkFBMEIsR0FBRztJQUNyQyxNQUFNQyxRQUFRLENBQUMsR0FBR1gsV0FBV1ksb0JBQW9CO0lBQ2pELHVEQUF1RDtJQUN2RCx3Q0FBd0M7SUFDeENELE1BQU1FLFFBQVEsR0FBRyxDQUFDLEdBQUdyQixxQkFBcUJzQixtQkFBbUIsRUFBRSxJQUFJQyxJQUFJVCxNQUFNRixTQUFTO1FBQ2xGSSxXQUFXLENBQUMsRUFBRTtRQUNkQSxXQUFXLENBQUMsRUFBRTtRQUNkQSxXQUFXLENBQUMsRUFBRTtRQUNkO0tBQ0gsRUFBRU4sTUFBTWMsT0FBTyxFQUFFZCxNQUFNZSxPQUFPO0lBQy9CLE9BQU9OLE1BQU1FLFFBQVEsQ0FBQ0ssSUFBSSxDQUFDLENBQUNDO1FBQ3hCLElBQUksQ0FBQ0MsWUFBWUMscUJBQXFCLEdBQUdGO1FBQ3pDLDREQUE0RDtRQUM1RCxJQUFJLE9BQU9DLGVBQWUsVUFBVTtZQUNoQyxPQUFPLENBQUMsR0FBR3ZCLGlCQUFpQnlCLGlCQUFpQixFQUFFcEIsT0FBT0csU0FBU2UsWUFBWWxCLE1BQU1xQixPQUFPLENBQUNDLFdBQVc7UUFDeEc7UUFDQSwrREFBK0Q7UUFDL0RiLE1BQU1FLFFBQVEsR0FBRztRQUNqQixLQUFLLE1BQU1ZLGtCQUFrQkwsV0FBVztZQUNwQyxvRkFBb0Y7WUFDcEYsSUFBSUssZUFBZUMsTUFBTSxLQUFLLEdBQUc7Z0JBQzdCLG9DQUFvQztnQkFDcENDLFFBQVFDLEdBQUcsQ0FBQztnQkFDWixPQUFPMUI7WUFDWDtZQUNBLG1HQUFtRztZQUNuRyxNQUFNLENBQUMyQixVQUFVLEdBQUdKO1lBQ3BCLE1BQU1LLFVBQVUsQ0FBQyxHQUFHbkMsNkJBQTZCb0MsK0JBQStCLEVBQ2hGO2dCQUNJO2FBQ0gsRUFBRXZCLGFBQWFxQjtZQUNoQixJQUFJQyxZQUFZLE1BQU07Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHN0IsdUJBQXVCK0IscUJBQXFCLEVBQUU5QixPQUFPQyxRQUFRMEI7WUFDNUU7WUFDQSxJQUFJLENBQUMsR0FBR2pDLDZCQUE2QnFDLDJCQUEyQixFQUFFekIsYUFBYXNCLFVBQVU7Z0JBQ3JGLE9BQU8sQ0FBQyxHQUFHakMsaUJBQWlCeUIsaUJBQWlCLEVBQUVwQixPQUFPRyxTQUFTQyxNQUFNSixNQUFNcUIsT0FBTyxDQUFDQyxXQUFXO1lBQ2xHO1lBQ0EsTUFBTVUsMkJBQTJCYix1QkFBdUIsQ0FBQyxHQUFHM0IsbUJBQW1CeUMsaUJBQWlCLEVBQUVkLHdCQUF3QmU7WUFDMUgsSUFBSWYsc0JBQXNCO2dCQUN0QmhCLFFBQVFFLFlBQVksR0FBRzJCO1lBQzNCO1lBQ0EsMERBQTBEO1lBQzFELE1BQU0sQ0FBQ0csbUJBQW1CQyxLQUFLLEdBQUdiLGVBQWVjLEtBQUssQ0FBQyxDQUFDO1lBQ3hELDhGQUE4RjtZQUM5RixJQUFJRixzQkFBc0IsTUFBTTtnQkFDNUIsTUFBTUcsTUFBTUgsaUJBQWlCLENBQUMsRUFBRTtnQkFDaEMxQixNQUFNNkIsR0FBRyxHQUFHQTtnQkFDWjdCLE1BQU04QixXQUFXLEdBQUc7Z0JBQ25CLElBQUcxQywrQkFBK0IyQyw2QkFBNkIsRUFBRS9CLE9BQ2xFeUIsV0FBV1AsV0FBV1EsbUJBQW1CQztnQkFDekNqQyxRQUFRTSxLQUFLLEdBQUdBO2dCQUNoQk4sUUFBUXNDLGFBQWEsR0FBRyxJQUFJQztZQUNoQztZQUNBdkMsUUFBUXdDLFdBQVcsR0FBR2Y7WUFDdEJ6QixRQUFRRSxZQUFZLEdBQUdEO1lBQ3ZCRSxjQUFjc0I7UUFDbEI7UUFDQSxPQUFPLENBQUMsR0FBR2hDLGVBQWVnRCxhQUFhLEVBQUU1QyxPQUFPRztJQUNwRCxHQUFHLElBQUlIO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT2YsUUFBUTRELE9BQU8sS0FBSyxjQUFlLE9BQU81RCxRQUFRNEQsT0FBTyxLQUFLLFlBQVk1RCxRQUFRNEQsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPNUQsUUFBUTRELE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcksvRCxPQUFPQyxjQUFjLENBQUNDLFFBQVE0RCxPQUFPLEVBQUUsY0FBYztRQUFFM0QsT0FBTztJQUFLO0lBQ25FSCxPQUFPZ0UsTUFBTSxDQUFDOUQsUUFBUTRELE9BQU8sRUFBRTVEO0lBQy9CK0QsT0FBTy9ELE9BQU8sR0FBR0EsUUFBUTRELE9BQU87QUFDbEMsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9yZWZyZXNoLXJlZHVjZXIuanM/MjkzYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZnJlc2hSZWR1Y2VyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZWZyZXNoUmVkdWNlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9mZXRjaHNlcnZlcnJlc3BvbnNlID0gcmVxdWlyZShcIi4uL2ZldGNoLXNlcnZlci1yZXNwb25zZVwiKTtcbmNvbnN0IF9jcmVhdGVocmVmZnJvbXVybCA9IHJlcXVpcmUoXCIuLi9jcmVhdGUtaHJlZi1mcm9tLXVybFwiKTtcbmNvbnN0IF9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUgPSByZXF1aXJlKFwiLi4vYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWVcIik7XG5jb25zdCBfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0ID0gcmVxdWlyZShcIi4uL2lzLW5hdmlnYXRpbmctdG8tbmV3LXJvb3QtbGF5b3V0XCIpO1xuY29uc3QgX25hdmlnYXRlcmVkdWNlciA9IHJlcXVpcmUoXCIuL25hdmlnYXRlLXJlZHVjZXJcIik7XG5jb25zdCBfaGFuZGxlbXV0YWJsZSA9IHJlcXVpcmUoXCIuLi9oYW5kbGUtbXV0YWJsZVwiKTtcbmNvbnN0IF9maWxsbGF6eWl0ZW1zdGlsbGxlYWZ3aXRoaGVhZCA9IHJlcXVpcmUoXCIuLi9maWxsLWxhenktaXRlbXMtdGlsbC1sZWFmLXdpdGgtaGVhZFwiKTtcbmNvbnN0IF9hcHByb3V0ZXIgPSByZXF1aXJlKFwiLi4vLi4vYXBwLXJvdXRlclwiKTtcbmNvbnN0IF9oYW5kbGVzZWdtZW50bWlzbWF0Y2ggPSByZXF1aXJlKFwiLi4vaGFuZGxlLXNlZ21lbnQtbWlzbWF0Y2hcIik7XG5mdW5jdGlvbiByZWZyZXNoUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgY29uc3QgeyBvcmlnaW4gfSA9IGFjdGlvbjtcbiAgICBjb25zdCBtdXRhYmxlID0ge307XG4gICAgY29uc3QgaHJlZiA9IHN0YXRlLmNhbm9uaWNhbFVybDtcbiAgICBsZXQgY3VycmVudFRyZWUgPSBzdGF0ZS50cmVlO1xuICAgIG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUgPSBmYWxzZTtcbiAgICBjb25zdCBjYWNoZSA9ICgwLCBfYXBwcm91dGVyLmNyZWF0ZUVtcHR5Q2FjaGVOb2RlKSgpO1xuICAgIC8vIFRPRE8tQVBQOiB2ZXJpZnkgdGhhdCBgaHJlZmAgaXMgbm90IGFuIGV4dGVybmFsIHVybC5cbiAgICAvLyBGZXRjaCBkYXRhIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHRyZWUuXG4gICAgY2FjaGUubGF6eURhdGEgPSAoMCwgX2ZldGNoc2VydmVycmVzcG9uc2UuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkobmV3IFVSTChocmVmLCBvcmlnaW4pLCBbXG4gICAgICAgIGN1cnJlbnRUcmVlWzBdLFxuICAgICAgICBjdXJyZW50VHJlZVsxXSxcbiAgICAgICAgY3VycmVudFRyZWVbMl0sXG4gICAgICAgIFwicmVmZXRjaFwiXG4gICAgXSwgc3RhdGUubmV4dFVybCwgc3RhdGUuYnVpbGRJZCk7XG4gICAgcmV0dXJuIGNhY2hlLmxhenlEYXRhLnRoZW4oKHBhcmFtKT0+e1xuICAgICAgICBsZXQgW2ZsaWdodERhdGEsIGNhbm9uaWNhbFVybE92ZXJyaWRlXSA9IHBhcmFtO1xuICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIG5hdmlnYXRpbmcgdG8gcGFnZSBpbiBgcGFnZXNgIGZyb20gYGFwcGBcbiAgICAgICAgaWYgKHR5cGVvZiBmbGlnaHREYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIF9uYXZpZ2F0ZXJlZHVjZXIuaGFuZGxlRXh0ZXJuYWxVcmwpKHN0YXRlLCBtdXRhYmxlLCBmbGlnaHREYXRhLCBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgY2FjaGUubGF6eURhdGEgYXMgaXQgaGFzIGJlZW4gcmVzb2x2ZWQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgY2FjaGUubGF6eURhdGEgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGZsaWdodERhdGFQYXRoIG9mIGZsaWdodERhdGEpe1xuICAgICAgICAgICAgLy8gRmxpZ2h0RGF0YVBhdGggd2l0aCBtb3JlIHRoYW4gdHdvIGl0ZW1zIG1lYW5zIHVuZXhwZWN0ZWQgRmxpZ2h0IGRhdGEgd2FzIHJldHVybmVkXG4gICAgICAgICAgICBpZiAoZmxpZ2h0RGF0YVBhdGgubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETy1BUFA6IGhhbmRsZSB0aGlzIGNhc2UgYmV0dGVyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSRUZSRVNIIEZBSUxFRFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHaXZlbiB0aGUgcGF0aCBjYW4gb25seSBoYXZlIHR3byBpdGVtcyB0aGUgaXRlbXMgYXJlIG9ubHkgdGhlIHJvdXRlciBzdGF0ZSBhbmQgcnNjIGZvciB0aGUgcm9vdC5cbiAgICAgICAgICAgIGNvbnN0IFt0cmVlUGF0Y2hdID0gZmxpZ2h0RGF0YVBhdGg7XG4gICAgICAgICAgICBjb25zdCBuZXdUcmVlID0gKDAsIF9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUuYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9GdWxsVHJlZSkoLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgIF0sIGN1cnJlbnRUcmVlLCB0cmVlUGF0Y2gpO1xuICAgICAgICAgICAgaWYgKG5ld1RyZWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9oYW5kbGVzZWdtZW50bWlzbWF0Y2guaGFuZGxlU2VnbWVudE1pc21hdGNoKShzdGF0ZSwgYWN0aW9uLCB0cmVlUGF0Y2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCgwLCBfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0LmlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCkoY3VycmVudFRyZWUsIG5ld1RyZWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfbmF2aWdhdGVyZWR1Y2VyLmhhbmRsZUV4dGVybmFsVXJsKShzdGF0ZSwgbXV0YWJsZSwgaHJlZiwgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYW5vbmljYWxVcmxPdmVycmlkZUhyZWYgPSBjYW5vbmljYWxVcmxPdmVycmlkZSA/ICgwLCBfY3JlYXRlaHJlZmZyb211cmwuY3JlYXRlSHJlZkZyb21VcmwpKGNhbm9uaWNhbFVybE92ZXJyaWRlKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjYW5vbmljYWxVcmxPdmVycmlkZSkge1xuICAgICAgICAgICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGhlIG9uZSBiZWZvcmUgbGFzdCBpdGVtIGlzIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSBwYXRjaFxuICAgICAgICAgICAgY29uc3QgW2NhY2hlTm9kZVNlZWREYXRhLCBoZWFkXSA9IGZsaWdodERhdGFQYXRoLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIC8vIEhhbmRsZXMgY2FzZSB3aGVyZSBwcmVmZXRjaCBvbmx5IHJldHVybnMgdGhlIHJvdXRlciB0cmVlIHBhdGNoIHdpdGhvdXQgcmVuZGVyZWQgY29tcG9uZW50cy5cbiAgICAgICAgICAgIGlmIChjYWNoZU5vZGVTZWVkRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJzYyA9IGNhY2hlTm9kZVNlZWREYXRhWzJdO1xuICAgICAgICAgICAgICAgIGNhY2hlLnJzYyA9IHJzYztcbiAgICAgICAgICAgICAgICBjYWNoZS5wcmVmZXRjaFJzYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgKDAsIF9maWxsbGF6eWl0ZW1zdGlsbGxlYWZ3aXRoaGVhZC5maWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCkoY2FjaGUsIC8vIEV4aXN0aW5nIGNhY2hlIGlzIG5vdCBwYXNzZWQgaW4gYXMgYHJvdXRlci5yZWZyZXNoKClgIGhhcyB0byBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgY2FjaGUuXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCB0cmVlUGF0Y2gsIGNhY2hlTm9kZVNlZWREYXRhLCBoZWFkKTtcbiAgICAgICAgICAgICAgICBtdXRhYmxlLmNhY2hlID0gY2FjaGU7XG4gICAgICAgICAgICAgICAgbXV0YWJsZS5wcmVmZXRjaENhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbXV0YWJsZS5wYXRjaGVkVHJlZSA9IG5ld1RyZWU7XG4gICAgICAgICAgICBtdXRhYmxlLmNhbm9uaWNhbFVybCA9IGhyZWY7XG4gICAgICAgICAgICBjdXJyZW50VHJlZSA9IG5ld1RyZWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgwLCBfaGFuZGxlbXV0YWJsZS5oYW5kbGVNdXRhYmxlKShzdGF0ZSwgbXV0YWJsZSk7XG4gICAgfSwgKCk9PnN0YXRlKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVmcmVzaC1yZWR1Y2VyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJyZWZyZXNoUmVkdWNlciIsIl9mZXRjaHNlcnZlcnJlc3BvbnNlIiwicmVxdWlyZSIsIl9jcmVhdGVocmVmZnJvbXVybCIsIl9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUiLCJfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0IiwiX25hdmlnYXRlcmVkdWNlciIsIl9oYW5kbGVtdXRhYmxlIiwiX2ZpbGxsYXp5aXRlbXN0aWxsbGVhZndpdGhoZWFkIiwiX2FwcHJvdXRlciIsIl9oYW5kbGVzZWdtZW50bWlzbWF0Y2giLCJzdGF0ZSIsImFjdGlvbiIsIm9yaWdpbiIsIm11dGFibGUiLCJocmVmIiwiY2Fub25pY2FsVXJsIiwiY3VycmVudFRyZWUiLCJ0cmVlIiwicHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUiLCJjYWNoZSIsImNyZWF0ZUVtcHR5Q2FjaGVOb2RlIiwibGF6eURhdGEiLCJmZXRjaFNlcnZlclJlc3BvbnNlIiwiVVJMIiwibmV4dFVybCIsImJ1aWxkSWQiLCJ0aGVuIiwicGFyYW0iLCJmbGlnaHREYXRhIiwiY2Fub25pY2FsVXJsT3ZlcnJpZGUiLCJoYW5kbGVFeHRlcm5hbFVybCIsInB1c2hSZWYiLCJwZW5kaW5nUHVzaCIsImZsaWdodERhdGFQYXRoIiwibGVuZ3RoIiwiY29uc29sZSIsImxvZyIsInRyZWVQYXRjaCIsIm5ld1RyZWUiLCJhcHBseVJvdXRlclN0YXRlUGF0Y2hUb0Z1bGxUcmVlIiwiaGFuZGxlU2VnbWVudE1pc21hdGNoIiwiaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IiwiY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmIiwiY3JlYXRlSHJlZkZyb21VcmwiLCJ1bmRlZmluZWQiLCJjYWNoZU5vZGVTZWVkRGF0YSIsImhlYWQiLCJzbGljZSIsInJzYyIsInByZWZldGNoUnNjIiwiZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQiLCJwcmVmZXRjaENhY2hlIiwiTWFwIiwicGF0Y2hlZFRyZWUiLCJoYW5kbGVNdXRhYmxlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js": +/*!*********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js ***! + \*********************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"restoreReducer\", ({\n enumerable: true,\n get: function() {\n return restoreReducer;\n }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _computechangedpath = __webpack_require__(/*! ../compute-changed-path */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nconst _pprnavigations = __webpack_require__(/*! ../ppr-navigations */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\");\nfunction restoreReducer(state, action) {\n const { url, tree } = action;\n const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n // This action is used to restore the router state from the history state.\n // However, it's possible that the history state no longer contains the `FlightRouterState`.\n // We will copy over the internal state on pushState/replaceState events, but if a history entry\n // occurred before hydration, or if the user navigated to a hash using a regular anchor link,\n // the history state will not contain the `FlightRouterState`.\n // In this case, we'll continue to use the existing tree so the router doesn't get into an invalid state.\n const treeToRestore = tree || state.tree;\n const oldCache = state.cache;\n const newCache = false ? // prevents an unnecessary flash back to PPR state during a\n // back/forward navigation.\n 0 : oldCache;\n var _extractPathFromFlightRouterState;\n return {\n buildId: state.buildId,\n // Set canonical url\n canonicalUrl: href,\n pushRef: {\n pendingPush: false,\n mpaNavigation: false,\n // Ensures that the custom history state that was set is preserved when applying this update.\n preserveCustomHistoryState: true\n },\n focusAndScrollRef: state.focusAndScrollRef,\n cache: newCache,\n prefetchCache: state.prefetchCache,\n // Restore provided tree\n tree: treeToRestore,\n nextUrl: (_extractPathFromFlightRouterState = (0, _computechangedpath.extractPathFromFlightRouterState)(treeToRestore)) != null ? _extractPathFromFlightRouterState : url.pathname\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=restore-reducer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3Jlc3RvcmUtcmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsa0RBQWlEO0lBQzdDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMscUJBQXFCQyxtQkFBT0EsQ0FBQyx3SEFBeUI7QUFDNUQsTUFBTUMsc0JBQXNCRCxtQkFBT0EsQ0FBQyx3SEFBeUI7QUFDN0QsTUFBTUUsa0JBQWtCRixtQkFBT0EsQ0FBQyw4R0FBb0I7QUFDcEQsU0FBU0YsZUFBZUssS0FBSyxFQUFFQyxNQUFNO0lBQ2pDLE1BQU0sRUFBRUMsR0FBRyxFQUFFQyxJQUFJLEVBQUUsR0FBR0Y7SUFDdEIsTUFBTUcsT0FBTyxDQUFDLEdBQUdSLG1CQUFtQlMsaUJBQWlCLEVBQUVIO0lBQ3ZELDBFQUEwRTtJQUMxRSw0RkFBNEY7SUFDNUYsZ0dBQWdHO0lBQ2hHLDZGQUE2RjtJQUM3Riw4REFBOEQ7SUFDOUQseUdBQXlHO0lBQ3pHLE1BQU1JLGdCQUFnQkgsUUFBUUgsTUFBTUcsSUFBSTtJQUN4QyxNQUFNSSxXQUFXUCxNQUFNUSxLQUFLO0lBQzVCLE1BQU1DLFdBQVdDLE1BQXNCLEdBR3ZDLDJEQUYyRDtJQUMzRCwyQkFBMkI7SUFDMUIsQ0FBaUZKLEdBQUdDO0lBQ3JGLElBQUlPO0lBQ0osT0FBTztRQUNIQyxTQUFTZixNQUFNZSxPQUFPO1FBQ3RCLG9CQUFvQjtRQUNwQkMsY0FBY1o7UUFDZGEsU0FBUztZQUNMQyxhQUFhO1lBQ2JDLGVBQWU7WUFDZiw2RkFBNkY7WUFDN0ZDLDRCQUE0QjtRQUNoQztRQUNBQyxtQkFBbUJyQixNQUFNcUIsaUJBQWlCO1FBQzFDYixPQUFPQztRQUNQYSxlQUFldEIsTUFBTXNCLGFBQWE7UUFDbEMsd0JBQXdCO1FBQ3hCbkIsTUFBTUc7UUFDTmlCLFNBQVMsQ0FBQ1Qsb0NBQW9DLENBQUMsR0FBR2hCLG9CQUFvQjBCLGdDQUFnQyxFQUFFbEIsY0FBYSxLQUFNLE9BQU9RLG9DQUFvQ1osSUFBSXVCLFFBQVE7SUFDdEw7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPbEMsUUFBUW1DLE9BQU8sS0FBSyxjQUFlLE9BQU9uQyxRQUFRbUMsT0FBTyxLQUFLLFlBQVluQyxRQUFRbUMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPbkMsUUFBUW1DLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt0QyxPQUFPQyxjQUFjLENBQUNDLFFBQVFtQyxPQUFPLEVBQUUsY0FBYztRQUFFbEMsT0FBTztJQUFLO0lBQ25FSCxPQUFPdUMsTUFBTSxDQUFDckMsUUFBUW1DLE9BQU8sRUFBRW5DO0lBQy9Cc0MsT0FBT3RDLE9BQU8sR0FBR0EsUUFBUW1DLE9BQU87QUFDbEMsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9yZXN0b3JlLXJlZHVjZXIuanM/NzkzZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlc3RvcmVSZWR1Y2VyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZXN0b3JlUmVkdWNlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9jcmVhdGVocmVmZnJvbXVybCA9IHJlcXVpcmUoXCIuLi9jcmVhdGUtaHJlZi1mcm9tLXVybFwiKTtcbmNvbnN0IF9jb21wdXRlY2hhbmdlZHBhdGggPSByZXF1aXJlKFwiLi4vY29tcHV0ZS1jaGFuZ2VkLXBhdGhcIik7XG5jb25zdCBfcHBybmF2aWdhdGlvbnMgPSByZXF1aXJlKFwiLi4vcHByLW5hdmlnYXRpb25zXCIpO1xuZnVuY3Rpb24gcmVzdG9yZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIGNvbnN0IHsgdXJsLCB0cmVlIH0gPSBhY3Rpb247XG4gICAgY29uc3QgaHJlZiA9ICgwLCBfY3JlYXRlaHJlZmZyb211cmwuY3JlYXRlSHJlZkZyb21VcmwpKHVybCk7XG4gICAgLy8gVGhpcyBhY3Rpb24gaXMgdXNlZCB0byByZXN0b3JlIHRoZSByb3V0ZXIgc3RhdGUgZnJvbSB0aGUgaGlzdG9yeSBzdGF0ZS5cbiAgICAvLyBIb3dldmVyLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGhpc3Rvcnkgc3RhdGUgbm8gbG9uZ2VyIGNvbnRhaW5zIHRoZSBgRmxpZ2h0Um91dGVyU3RhdGVgLlxuICAgIC8vIFdlIHdpbGwgY29weSBvdmVyIHRoZSBpbnRlcm5hbCBzdGF0ZSBvbiBwdXNoU3RhdGUvcmVwbGFjZVN0YXRlIGV2ZW50cywgYnV0IGlmIGEgaGlzdG9yeSBlbnRyeVxuICAgIC8vIG9jY3VycmVkIGJlZm9yZSBoeWRyYXRpb24sIG9yIGlmIHRoZSB1c2VyIG5hdmlnYXRlZCB0byBhIGhhc2ggdXNpbmcgYSByZWd1bGFyIGFuY2hvciBsaW5rLFxuICAgIC8vIHRoZSBoaXN0b3J5IHN0YXRlIHdpbGwgbm90IGNvbnRhaW4gdGhlIGBGbGlnaHRSb3V0ZXJTdGF0ZWAuXG4gICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSdsbCBjb250aW51ZSB0byB1c2UgdGhlIGV4aXN0aW5nIHRyZWUgc28gdGhlIHJvdXRlciBkb2Vzbid0IGdldCBpbnRvIGFuIGludmFsaWQgc3RhdGUuXG4gICAgY29uc3QgdHJlZVRvUmVzdG9yZSA9IHRyZWUgfHwgc3RhdGUudHJlZTtcbiAgICBjb25zdCBvbGRDYWNoZSA9IHN0YXRlLmNhY2hlO1xuICAgIGNvbnN0IG5ld0NhY2hlID0gcHJvY2Vzcy5lbnYuX19ORVhUX1BQUiA/IC8vIGRhdGEgZm9yIGFueSBzZWdtZW50IHdob3NlIGR5bmFtaWMgZGF0YSB3YXMgYWxyZWFkeSByZWNlaXZlZC4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFuIHVubmVjZXNzYXJ5IGZsYXNoIGJhY2sgdG8gUFBSIHN0YXRlIGR1cmluZyBhXG4gICAgLy8gYmFjay9mb3J3YXJkIG5hdmlnYXRpb24uXG4gICAgKDAsIF9wcHJuYXZpZ2F0aW9ucy51cGRhdGVDYWNoZU5vZGVPblBvcHN0YXRlUmVzdG9yYXRpb24pKG9sZENhY2hlLCB0cmVlVG9SZXN0b3JlKSA6IG9sZENhY2hlO1xuICAgIHZhciBfZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGU7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYnVpbGRJZDogc3RhdGUuYnVpbGRJZCxcbiAgICAgICAgLy8gU2V0IGNhbm9uaWNhbCB1cmxcbiAgICAgICAgY2Fub25pY2FsVXJsOiBocmVmLFxuICAgICAgICBwdXNoUmVmOiB7XG4gICAgICAgICAgICBwZW5kaW5nUHVzaDogZmFsc2UsXG4gICAgICAgICAgICBtcGFOYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIEVuc3VyZXMgdGhhdCB0aGUgY3VzdG9tIGhpc3Rvcnkgc3RhdGUgdGhhdCB3YXMgc2V0IGlzIHByZXNlcnZlZCB3aGVuIGFwcGx5aW5nIHRoaXMgdXBkYXRlLlxuICAgICAgICAgICAgcHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWY6IHN0YXRlLmZvY3VzQW5kU2Nyb2xsUmVmLFxuICAgICAgICBjYWNoZTogbmV3Q2FjaGUsXG4gICAgICAgIHByZWZldGNoQ2FjaGU6IHN0YXRlLnByZWZldGNoQ2FjaGUsXG4gICAgICAgIC8vIFJlc3RvcmUgcHJvdmlkZWQgdHJlZVxuICAgICAgICB0cmVlOiB0cmVlVG9SZXN0b3JlLFxuICAgICAgICBuZXh0VXJsOiAoX2V4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlID0gKDAsIF9jb21wdXRlY2hhbmdlZHBhdGguZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUpKHRyZWVUb1Jlc3RvcmUpKSAhPSBudWxsID8gX2V4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlIDogdXJsLnBhdGhuYW1lXG4gICAgfTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzdG9yZS1yZWR1Y2VyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJyZXN0b3JlUmVkdWNlciIsIl9jcmVhdGVocmVmZnJvbXVybCIsInJlcXVpcmUiLCJfY29tcHV0ZWNoYW5nZWRwYXRoIiwiX3Bwcm5hdmlnYXRpb25zIiwic3RhdGUiLCJhY3Rpb24iLCJ1cmwiLCJ0cmVlIiwiaHJlZiIsImNyZWF0ZUhyZWZGcm9tVXJsIiwidHJlZVRvUmVzdG9yZSIsIm9sZENhY2hlIiwiY2FjaGUiLCJuZXdDYWNoZSIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUFBSIiwidXBkYXRlQ2FjaGVOb2RlT25Qb3BzdGF0ZVJlc3RvcmF0aW9uIiwiX2V4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlIiwiYnVpbGRJZCIsImNhbm9uaWNhbFVybCIsInB1c2hSZWYiLCJwZW5kaW5nUHVzaCIsIm1wYU5hdmlnYXRpb24iLCJwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSIsImZvY3VzQW5kU2Nyb2xsUmVmIiwicHJlZmV0Y2hDYWNoZSIsIm5leHRVcmwiLCJleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZSIsInBhdGhuYW1lIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js": +/*!***************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js ***! + \***************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"serverActionReducer\", ({\n enumerable: true,\n get: function() {\n return serverActionReducer;\n }\n}));\nconst _appcallserver = __webpack_require__(/*! ../../../app-call-server */ \"(ssr)/./node_modules/next/dist/client/app-call-server.js\");\nconst _approuterheaders = __webpack_require__(/*! ../../app-router-headers */ \"(ssr)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _addbasepath = __webpack_require__(/*! ../../../add-base-path */ \"(ssr)/./node_modules/next/dist/client/add-base-path.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ../fill-lazy-items-till-leaf-with-head */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\");\nconst _computechangedpath = __webpack_require__(/*! ../compute-changed-path */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\n// // eslint-disable-next-line import/no-extraneous-dependencies\n// import { createFromFetch } from 'react-server-dom-webpack/client'\n// // eslint-disable-next-line import/no-extraneous-dependencies\n// import { encodeReply } from 'react-server-dom-webpack/client'\nconst { createFromFetch, encodeReply } = true ? __webpack_require__(/*! react-server-dom-webpack/client.edge */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client-edge.js\") : 0;\nasync function fetchServerAction(state, param) {\n let { actionId, actionArgs } = param;\n const body = await encodeReply(actionArgs);\n const newNextUrl = (0, _computechangedpath.extractPathFromFlightRouterState)(state.tree);\n // only pass along the `nextUrl` param (used for interception routes) if it exists and\n // if it's different from the current `nextUrl`. This indicates the route has already been intercepted,\n // and so the action should be as well. Otherwise the server action might be intercepted\n // with the wrong action id (ie, one that corresponds with the intercepted route)\n const includeNextUrl = state.nextUrl && state.nextUrl !== newNextUrl;\n const res = await fetch(\"\", {\n method: \"POST\",\n headers: {\n Accept: _approuterheaders.RSC_CONTENT_TYPE_HEADER,\n [_approuterheaders.ACTION]: actionId,\n [_approuterheaders.NEXT_ROUTER_STATE_TREE]: encodeURIComponent(JSON.stringify(state.tree)),\n ... false ? 0 : {},\n ...includeNextUrl ? {\n [_approuterheaders.NEXT_URL]: state.nextUrl\n } : {}\n },\n body\n });\n const location = res.headers.get(\"x-action-redirect\");\n let revalidatedParts;\n try {\n const revalidatedHeader = JSON.parse(res.headers.get(\"x-action-revalidated\") || \"[[],0,0]\");\n revalidatedParts = {\n paths: revalidatedHeader[0] || [],\n tag: !!revalidatedHeader[1],\n cookie: revalidatedHeader[2]\n };\n } catch (e) {\n revalidatedParts = {\n paths: [],\n tag: false,\n cookie: false\n };\n }\n const redirectLocation = location ? new URL((0, _addbasepath.addBasePath)(location), new URL(state.canonicalUrl, window.location.href)) : undefined;\n let isFlightResponse = res.headers.get(\"content-type\") === _approuterheaders.RSC_CONTENT_TYPE_HEADER;\n if (isFlightResponse) {\n const response = await createFromFetch(Promise.resolve(res), {\n callServer: _appcallserver.callServer\n });\n if (location) {\n // if it was a redirection, then result is just a regular RSC payload\n const [, actionFlightData] = response != null ? response : [];\n return {\n actionFlightData: actionFlightData,\n redirectLocation,\n revalidatedParts\n };\n }\n // otherwise it's a tuple of [actionResult, actionFlightData]\n const [actionResult, [, actionFlightData]] = response != null ? response : [];\n return {\n actionResult,\n actionFlightData,\n redirectLocation,\n revalidatedParts\n };\n }\n return {\n redirectLocation,\n revalidatedParts\n };\n}\nfunction serverActionReducer(state, action) {\n const { resolve, reject } = action;\n const mutable = {};\n const href = state.canonicalUrl;\n let currentTree = state.tree;\n mutable.preserveCustomHistoryState = false;\n mutable.inFlightServerAction = fetchServerAction(state, action);\n return mutable.inFlightServerAction.then((param)=>{\n let { actionResult, actionFlightData: flightData, redirectLocation } = param;\n // Make sure the redirection is a push instead of a replace.\n // Issue: https://github.com/vercel/next.js/issues/53911\n if (redirectLocation) {\n state.pushRef.pendingPush = true;\n mutable.pendingPush = true;\n }\n if (!flightData) {\n resolve(actionResult);\n // If there is a redirect but no flight data we need to do a mpaNavigation.\n if (redirectLocation) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, redirectLocation.href, state.pushRef.pendingPush);\n }\n return state;\n }\n if (typeof flightData === \"string\") {\n // Handle case when navigating to page in `pages` from `app`\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n // Remove cache.data as it has been resolved at this point.\n mutable.inFlightServerAction = null;\n for (const flightDataPath of flightData){\n // FlightDataPath with more than two items means unexpected Flight data was returned\n if (flightDataPath.length !== 3) {\n // TODO-APP: handle this case better\n console.log(\"SERVER ACTION APPLY FAILED\");\n return state;\n }\n // Given the path can only have two items the items are only the router state and rsc for the root.\n const [treePatch] = flightDataPath;\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToFullTree)([\n \"\"\n ], currentTree, treePatch);\n if (newTree === null) {\n return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, href, state.pushRef.pendingPush);\n }\n // The one before last item is the router state tree patch\n const [cacheNodeSeedData, head] = flightDataPath.slice(-2);\n const rsc = cacheNodeSeedData !== null ? cacheNodeSeedData[2] : null;\n // Handles case where prefetch only returns the router tree patch without rendered components.\n if (rsc !== null) {\n const cache = (0, _approuter.createEmptyCacheNode)();\n cache.rsc = rsc;\n cache.prefetchRsc = null;\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(cache, undefined, treePatch, cacheNodeSeedData, head);\n mutable.cache = cache;\n mutable.prefetchCache = new Map();\n }\n mutable.patchedTree = newTree;\n mutable.canonicalUrl = href;\n currentTree = newTree;\n }\n if (redirectLocation) {\n const newHref = (0, _createhreffromurl.createHrefFromUrl)(redirectLocation, false);\n mutable.canonicalUrl = newHref;\n }\n resolve(actionResult);\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, (e)=>{\n // When the server action is rejected we don't update the state and instead call the reject handler of the promise.\n reject(e.reason);\n return state;\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=server-action-reducer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3NlcnZlci1hY3Rpb24tcmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsdURBQXNEO0lBQ2xESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsaUJBQWlCQyxtQkFBT0EsQ0FBQywwRkFBMEI7QUFDekQsTUFBTUMsb0JBQW9CRCxtQkFBT0EsQ0FBQyx3R0FBMEI7QUFDNUQsTUFBTUUsZUFBZUYsbUJBQU9BLENBQUMsc0ZBQXdCO0FBQ3JELE1BQU1HLHFCQUFxQkgsbUJBQU9BLENBQUMsd0hBQXlCO0FBQzVELE1BQU1JLG1CQUFtQkosbUJBQU9BLENBQUMsd0hBQW9CO0FBQ3JELE1BQU1LLCtCQUErQkwsbUJBQU9BLENBQUMsZ0pBQXFDO0FBQ2xGLE1BQU1NLCtCQUErQk4sbUJBQU9BLENBQUMsZ0pBQXFDO0FBQ2xGLE1BQU1PLGlCQUFpQlAsbUJBQU9BLENBQUMsNEdBQW1CO0FBQ2xELE1BQU1RLGlDQUFpQ1IsbUJBQU9BLENBQUMsc0pBQXdDO0FBQ3ZGLE1BQU1TLGFBQWFULG1CQUFPQSxDQUFDLHdGQUFrQjtBQUM3QyxNQUFNVSxzQkFBc0JWLG1CQUFPQSxDQUFDLHdIQUF5QjtBQUM3RCxNQUFNVyx5QkFBeUJYLG1CQUFPQSxDQUFDLDhIQUE0QjtBQUNuRSxnRUFBZ0U7QUFDaEUsb0VBQW9FO0FBQ3BFLGdFQUFnRTtBQUNoRSxnRUFBZ0U7QUFDaEUsTUFBTSxFQUFFWSxlQUFlLEVBQUVDLFdBQVcsRUFBRSxHQUFHLEtBQTBCLEdBQUdiLG1CQUFPQSxDQUFDLHNLQUFzQyxJQUFJQSxDQUEwQztBQUNsSyxlQUFlaUIsa0JBQWtCQyxLQUFLLEVBQUVDLEtBQUs7SUFDekMsSUFBSSxFQUFFQyxRQUFRLEVBQUVDLFVBQVUsRUFBRSxHQUFHRjtJQUMvQixNQUFNRyxPQUFPLE1BQU1ULFlBQVlRO0lBQy9CLE1BQU1FLGFBQWEsQ0FBQyxHQUFHYixvQkFBb0JjLGdDQUFnQyxFQUFFTixNQUFNTyxJQUFJO0lBQ3ZGLHNGQUFzRjtJQUN0Rix1R0FBdUc7SUFDdkcsd0ZBQXdGO0lBQ3hGLGlGQUFpRjtJQUNqRixNQUFNQyxpQkFBaUJSLE1BQU1TLE9BQU8sSUFBSVQsTUFBTVMsT0FBTyxLQUFLSjtJQUMxRCxNQUFNSyxNQUFNLE1BQU1DLE1BQU0sSUFBSTtRQUN4QkMsUUFBUTtRQUNSQyxTQUFTO1lBQ0xDLFFBQVEvQixrQkFBa0JnQyx1QkFBdUI7WUFDakQsQ0FBQ2hDLGtCQUFrQmlDLE1BQU0sQ0FBQyxFQUFFZDtZQUM1QixDQUFDbkIsa0JBQWtCa0Msc0JBQXNCLENBQUMsRUFBRUMsbUJBQW1CQyxLQUFLQyxTQUFTLENBQUNwQixNQUFNTyxJQUFJO1lBQ3hGLEdBQUdYLE1BQTBFLEdBQUcsQ0FFL0UsR0FBRyxDQUFDLENBQUM7WUFDTixHQUFHWSxpQkFBaUI7Z0JBQ2hCLENBQUN6QixrQkFBa0J3QyxRQUFRLENBQUMsRUFBRXZCLE1BQU1TLE9BQU87WUFDL0MsSUFBSSxDQUFDLENBQUM7UUFDVjtRQUNBTDtJQUNKO0lBQ0EsTUFBTW9CLFdBQVdkLElBQUlHLE9BQU8sQ0FBQ2xDLEdBQUcsQ0FBQztJQUNqQyxJQUFJOEM7SUFDSixJQUFJO1FBQ0EsTUFBTUMsb0JBQW9CUCxLQUFLUSxLQUFLLENBQUNqQixJQUFJRyxPQUFPLENBQUNsQyxHQUFHLENBQUMsMkJBQTJCO1FBQ2hGOEMsbUJBQW1CO1lBQ2ZHLE9BQU9GLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFFO1lBQ2pDRyxLQUFLLENBQUMsQ0FBQ0gsaUJBQWlCLENBQUMsRUFBRTtZQUMzQkksUUFBUUosaUJBQWlCLENBQUMsRUFBRTtRQUNoQztJQUNKLEVBQUUsT0FBT0ssR0FBRztRQUNSTixtQkFBbUI7WUFDZkcsT0FBTyxFQUFFO1lBQ1RDLEtBQUs7WUFDTEMsUUFBUTtRQUNaO0lBQ0o7SUFDQSxNQUFNRSxtQkFBbUJSLFdBQVcsSUFBSVMsSUFBSSxDQUFDLEdBQUdqRCxhQUFha0QsV0FBVyxFQUFFVixXQUMxRSxJQUFJUyxJQUFJakMsTUFBTW1DLFlBQVksRUFBRUMsT0FBT1osUUFBUSxDQUFDYSxJQUFJLEtBQUtDO0lBQ3JELElBQUlDLG1CQUFtQjdCLElBQUlHLE9BQU8sQ0FBQ2xDLEdBQUcsQ0FBQyxvQkFBb0JJLGtCQUFrQmdDLHVCQUF1QjtJQUNwRyxJQUFJd0Isa0JBQWtCO1FBQ2xCLE1BQU1DLFdBQVcsTUFBTTlDLGdCQUFnQitDLFFBQVFDLE9BQU8sQ0FBQ2hDLE1BQU07WUFDekRpQyxZQUFZOUQsZUFBZThELFVBQVU7UUFDekM7UUFDQSxJQUFJbkIsVUFBVTtZQUNWLHFFQUFxRTtZQUNyRSxNQUFNLEdBQUdvQixpQkFBaUIsR0FBR0osWUFBWSxPQUFPQSxXQUFXLEVBQUU7WUFDN0QsT0FBTztnQkFDSEksa0JBQWtCQTtnQkFDbEJaO2dCQUNBUDtZQUNKO1FBQ0o7UUFDQSw2REFBNkQ7UUFDN0QsTUFBTSxDQUFDb0IsY0FBYyxHQUFHRCxpQkFBaUIsQ0FBQyxHQUFHSixZQUFZLE9BQU9BLFdBQVcsRUFBRTtRQUM3RSxPQUFPO1lBQ0hLO1lBQ0FEO1lBQ0FaO1lBQ0FQO1FBQ0o7SUFDSjtJQUNBLE9BQU87UUFDSE87UUFDQVA7SUFDSjtBQUNKO0FBQ0EsU0FBUzdDLG9CQUFvQm9CLEtBQUssRUFBRThDLE1BQU07SUFDdEMsTUFBTSxFQUFFSixPQUFPLEVBQUVLLE1BQU0sRUFBRSxHQUFHRDtJQUM1QixNQUFNRSxVQUFVLENBQUM7SUFDakIsTUFBTVgsT0FBT3JDLE1BQU1tQyxZQUFZO0lBQy9CLElBQUljLGNBQWNqRCxNQUFNTyxJQUFJO0lBQzVCeUMsUUFBUUUsMEJBQTBCLEdBQUc7SUFDckNGLFFBQVFHLG9CQUFvQixHQUFHcEQsa0JBQWtCQyxPQUFPOEM7SUFDeEQsT0FBT0UsUUFBUUcsb0JBQW9CLENBQUNDLElBQUksQ0FBQyxDQUFDbkQ7UUFDdEMsSUFBSSxFQUFFNEMsWUFBWSxFQUFFRCxrQkFBa0JTLFVBQVUsRUFBRXJCLGdCQUFnQixFQUFFLEdBQUcvQjtRQUN2RSw0REFBNEQ7UUFDNUQsd0RBQXdEO1FBQ3hELElBQUkrQixrQkFBa0I7WUFDbEJoQyxNQUFNc0QsT0FBTyxDQUFDQyxXQUFXLEdBQUc7WUFDNUJQLFFBQVFPLFdBQVcsR0FBRztRQUMxQjtRQUNBLElBQUksQ0FBQ0YsWUFBWTtZQUNiWCxRQUFRRztZQUNSLDJFQUEyRTtZQUMzRSxJQUFJYixrQkFBa0I7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHOUMsaUJBQWlCc0UsaUJBQWlCLEVBQUV4RCxPQUFPZ0QsU0FBU2hCLGlCQUFpQkssSUFBSSxFQUFFckMsTUFBTXNELE9BQU8sQ0FBQ0MsV0FBVztZQUNuSDtZQUNBLE9BQU92RDtRQUNYO1FBQ0EsSUFBSSxPQUFPcUQsZUFBZSxVQUFVO1lBQ2hDLDREQUE0RDtZQUM1RCxPQUFPLENBQUMsR0FBR25FLGlCQUFpQnNFLGlCQUFpQixFQUFFeEQsT0FBT2dELFNBQVNLLFlBQVlyRCxNQUFNc0QsT0FBTyxDQUFDQyxXQUFXO1FBQ3hHO1FBQ0EsMkRBQTJEO1FBQzNEUCxRQUFRRyxvQkFBb0IsR0FBRztRQUMvQixLQUFLLE1BQU1NLGtCQUFrQkosV0FBVztZQUNwQyxvRkFBb0Y7WUFDcEYsSUFBSUksZUFBZUMsTUFBTSxLQUFLLEdBQUc7Z0JBQzdCLG9DQUFvQztnQkFDcENDLFFBQVFDLEdBQUcsQ0FBQztnQkFDWixPQUFPNUQ7WUFDWDtZQUNBLG1HQUFtRztZQUNuRyxNQUFNLENBQUM2RCxVQUFVLEdBQUdKO1lBQ3BCLE1BQU1LLFVBQVUsQ0FBQyxHQUFHM0UsNkJBQTZCNEUsK0JBQStCLEVBQ2hGO2dCQUNJO2FBQ0gsRUFBRWQsYUFBYVk7WUFDaEIsSUFBSUMsWUFBWSxNQUFNO2dCQUNsQixPQUFPLENBQUMsR0FBR3JFLHVCQUF1QnVFLHFCQUFxQixFQUFFaEUsT0FBTzhDLFFBQVFlO1lBQzVFO1lBQ0EsSUFBSSxDQUFDLEdBQUd6RSw2QkFBNkI2RSwyQkFBMkIsRUFBRWhCLGFBQWFhLFVBQVU7Z0JBQ3JGLE9BQU8sQ0FBQyxHQUFHNUUsaUJBQWlCc0UsaUJBQWlCLEVBQUV4RCxPQUFPZ0QsU0FBU1gsTUFBTXJDLE1BQU1zRCxPQUFPLENBQUNDLFdBQVc7WUFDbEc7WUFDQSwwREFBMEQ7WUFDMUQsTUFBTSxDQUFDVyxtQkFBbUJDLEtBQUssR0FBR1YsZUFBZVcsS0FBSyxDQUFDLENBQUM7WUFDeEQsTUFBTUMsTUFBTUgsc0JBQXNCLE9BQU9BLGlCQUFpQixDQUFDLEVBQUUsR0FBRztZQUNoRSw4RkFBOEY7WUFDOUYsSUFBSUcsUUFBUSxNQUFNO2dCQUNkLE1BQU1DLFFBQVEsQ0FBQyxHQUFHL0UsV0FBV2dGLG9CQUFvQjtnQkFDakRELE1BQU1ELEdBQUcsR0FBR0E7Z0JBQ1pDLE1BQU1FLFdBQVcsR0FBRztnQkFDbkIsSUFBR2xGLCtCQUErQm1GLDZCQUE2QixFQUFFSCxPQUNsRWhDLFdBQVd1QixXQUFXSyxtQkFBbUJDO2dCQUN6Q25CLFFBQVFzQixLQUFLLEdBQUdBO2dCQUNoQnRCLFFBQVEwQixhQUFhLEdBQUcsSUFBSUM7WUFDaEM7WUFDQTNCLFFBQVE0QixXQUFXLEdBQUdkO1lBQ3RCZCxRQUFRYixZQUFZLEdBQUdFO1lBQ3ZCWSxjQUFjYTtRQUNsQjtRQUNBLElBQUk5QixrQkFBa0I7WUFDbEIsTUFBTTZDLFVBQVUsQ0FBQyxHQUFHNUYsbUJBQW1CNkYsaUJBQWlCLEVBQUU5QyxrQkFBa0I7WUFDNUVnQixRQUFRYixZQUFZLEdBQUcwQztRQUMzQjtRQUNBbkMsUUFBUUc7UUFDUixPQUFPLENBQUMsR0FBR3hELGVBQWUwRixhQUFhLEVBQUUvRSxPQUFPZ0Q7SUFDcEQsR0FBRyxDQUFDakI7UUFDQSxtSEFBbUg7UUFDbkhnQixPQUFPaEIsRUFBRWlELE1BQU07UUFDZixPQUFPaEY7SUFDWDtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU94QixRQUFReUcsT0FBTyxLQUFLLGNBQWUsT0FBT3pHLFFBQVF5RyxPQUFPLEtBQUssWUFBWXpHLFFBQVF5RyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU96RyxRQUFReUcsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzVHLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXlHLE9BQU8sRUFBRSxjQUFjO1FBQUV4RyxPQUFPO0lBQUs7SUFDbkVILE9BQU82RyxNQUFNLENBQUMzRyxRQUFReUcsT0FBTyxFQUFFekc7SUFDL0I0RyxPQUFPNUcsT0FBTyxHQUFHQSxRQUFReUcsT0FBTztBQUNsQyxFQUVBLGlEQUFpRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3NlcnZlci1hY3Rpb24tcmVkdWNlci5qcz8wNjE2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VydmVyQWN0aW9uUmVkdWNlclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2VydmVyQWN0aW9uUmVkdWNlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9hcHBjYWxsc2VydmVyID0gcmVxdWlyZShcIi4uLy4uLy4uL2FwcC1jYWxsLXNlcnZlclwiKTtcbmNvbnN0IF9hcHByb3V0ZXJoZWFkZXJzID0gcmVxdWlyZShcIi4uLy4uL2FwcC1yb3V0ZXItaGVhZGVyc1wiKTtcbmNvbnN0IF9hZGRiYXNlcGF0aCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9hZGQtYmFzZS1wYXRoXCIpO1xuY29uc3QgX2NyZWF0ZWhyZWZmcm9tdXJsID0gcmVxdWlyZShcIi4uL2NyZWF0ZS1ocmVmLWZyb20tdXJsXCIpO1xuY29uc3QgX25hdmlnYXRlcmVkdWNlciA9IHJlcXVpcmUoXCIuL25hdmlnYXRlLXJlZHVjZXJcIik7XG5jb25zdCBfYXBwbHlyb3V0ZXJzdGF0ZXBhdGNodG90cmVlID0gcmVxdWlyZShcIi4uL2FwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlXCIpO1xuY29uc3QgX2lzbmF2aWdhdGluZ3RvbmV3cm9vdGxheW91dCA9IHJlcXVpcmUoXCIuLi9pcy1uYXZpZ2F0aW5nLXRvLW5ldy1yb290LWxheW91dFwiKTtcbmNvbnN0IF9oYW5kbGVtdXRhYmxlID0gcmVxdWlyZShcIi4uL2hhbmRsZS1tdXRhYmxlXCIpO1xuY29uc3QgX2ZpbGxsYXp5aXRlbXN0aWxsbGVhZndpdGhoZWFkID0gcmVxdWlyZShcIi4uL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkXCIpO1xuY29uc3QgX2FwcHJvdXRlciA9IHJlcXVpcmUoXCIuLi8uLi9hcHAtcm91dGVyXCIpO1xuY29uc3QgX2NvbXB1dGVjaGFuZ2VkcGF0aCA9IHJlcXVpcmUoXCIuLi9jb21wdXRlLWNoYW5nZWQtcGF0aFwiKTtcbmNvbnN0IF9oYW5kbGVzZWdtZW50bWlzbWF0Y2ggPSByZXF1aXJlKFwiLi4vaGFuZGxlLXNlZ21lbnQtbWlzbWF0Y2hcIik7XG4vLyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG4vLyBpbXBvcnQgeyBjcmVhdGVGcm9tRmV0Y2ggfSBmcm9tICdyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50J1xuLy8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuLy8gaW1wb3J0IHsgZW5jb2RlUmVwbHkgfSBmcm9tICdyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50J1xuY29uc3QgeyBjcmVhdGVGcm9tRmV0Y2gsIGVuY29kZVJlcGx5IH0gPSAhIXByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSA/IHJlcXVpcmUoXCJyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50LmVkZ2VcIikgOiByZXF1aXJlKFwicmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudFwiKTtcbmFzeW5jIGZ1bmN0aW9uIGZldGNoU2VydmVyQWN0aW9uKHN0YXRlLCBwYXJhbSkge1xuICAgIGxldCB7IGFjdGlvbklkLCBhY3Rpb25BcmdzIH0gPSBwYXJhbTtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgZW5jb2RlUmVwbHkoYWN0aW9uQXJncyk7XG4gICAgY29uc3QgbmV3TmV4dFVybCA9ICgwLCBfY29tcHV0ZWNoYW5nZWRwYXRoLmV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKShzdGF0ZS50cmVlKTtcbiAgICAvLyBvbmx5IHBhc3MgYWxvbmcgdGhlIGBuZXh0VXJsYCBwYXJhbSAodXNlZCBmb3IgaW50ZXJjZXB0aW9uIHJvdXRlcykgaWYgaXQgZXhpc3RzIGFuZFxuICAgIC8vIGlmIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgYG5leHRVcmxgLiBUaGlzIGluZGljYXRlcyB0aGUgcm91dGUgaGFzIGFscmVhZHkgYmVlbiBpbnRlcmNlcHRlZCxcbiAgICAvLyBhbmQgc28gdGhlIGFjdGlvbiBzaG91bGQgYmUgYXMgd2VsbC4gT3RoZXJ3aXNlIHRoZSBzZXJ2ZXIgYWN0aW9uIG1pZ2h0IGJlIGludGVyY2VwdGVkXG4gICAgLy8gd2l0aCB0aGUgd3JvbmcgYWN0aW9uIGlkIChpZSwgb25lIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgaW50ZXJjZXB0ZWQgcm91dGUpXG4gICAgY29uc3QgaW5jbHVkZU5leHRVcmwgPSBzdGF0ZS5uZXh0VXJsICYmIHN0YXRlLm5leHRVcmwgIT09IG5ld05leHRVcmw7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goXCJcIiwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBBY2NlcHQ6IF9hcHByb3V0ZXJoZWFkZXJzLlJTQ19DT05URU5UX1RZUEVfSEVBREVSLFxuICAgICAgICAgICAgW19hcHByb3V0ZXJoZWFkZXJzLkFDVElPTl06IGFjdGlvbklkLFxuICAgICAgICAgICAgW19hcHByb3V0ZXJoZWFkZXJzLk5FWFRfUk9VVEVSX1NUQVRFX1RSRUVdOiBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc3RhdGUudHJlZSkpLFxuICAgICAgICAgICAgLi4ucHJvY2Vzcy5lbnYuX19ORVhUX0FDVElPTlNfREVQTE9ZTUVOVF9JRCAmJiBwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSUQgPyB7XG4gICAgICAgICAgICAgICAgXCJ4LWRlcGxveW1lbnQtaWRcIjogcHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEXG4gICAgICAgICAgICB9IDoge30sXG4gICAgICAgICAgICAuLi5pbmNsdWRlTmV4dFVybCA/IHtcbiAgICAgICAgICAgICAgICBbX2FwcHJvdXRlcmhlYWRlcnMuTkVYVF9VUkxdOiBzdGF0ZS5uZXh0VXJsXG4gICAgICAgICAgICB9IDoge31cbiAgICAgICAgfSxcbiAgICAgICAgYm9keVxuICAgIH0pO1xuICAgIGNvbnN0IGxvY2F0aW9uID0gcmVzLmhlYWRlcnMuZ2V0KFwieC1hY3Rpb24tcmVkaXJlY3RcIik7XG4gICAgbGV0IHJldmFsaWRhdGVkUGFydHM7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmV2YWxpZGF0ZWRIZWFkZXIgPSBKU09OLnBhcnNlKHJlcy5oZWFkZXJzLmdldChcIngtYWN0aW9uLXJldmFsaWRhdGVkXCIpIHx8IFwiW1tdLDAsMF1cIik7XG4gICAgICAgIHJldmFsaWRhdGVkUGFydHMgPSB7XG4gICAgICAgICAgICBwYXRoczogcmV2YWxpZGF0ZWRIZWFkZXJbMF0gfHwgW10sXG4gICAgICAgICAgICB0YWc6ICEhcmV2YWxpZGF0ZWRIZWFkZXJbMV0sXG4gICAgICAgICAgICBjb29raWU6IHJldmFsaWRhdGVkSGVhZGVyWzJdXG4gICAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXZhbGlkYXRlZFBhcnRzID0ge1xuICAgICAgICAgICAgcGF0aHM6IFtdLFxuICAgICAgICAgICAgdGFnOiBmYWxzZSxcbiAgICAgICAgICAgIGNvb2tpZTogZmFsc2VcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcmVkaXJlY3RMb2NhdGlvbiA9IGxvY2F0aW9uID8gbmV3IFVSTCgoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKShsb2NhdGlvbiksIC8vIEVuc3VyZSByZWxhdGl2ZSByZWRpcmVjdHMgaW4gU2VydmVyIEFjdGlvbnMgd29yaywgZS5nLiByZWRpcmVjdCgnLi9zb21ld2hlcmUtZWxzZScpXG4gICAgbmV3IFVSTChzdGF0ZS5jYW5vbmljYWxVcmwsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKSkgOiB1bmRlZmluZWQ7XG4gICAgbGV0IGlzRmxpZ2h0UmVzcG9uc2UgPSByZXMuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIikgPT09IF9hcHByb3V0ZXJoZWFkZXJzLlJTQ19DT05URU5UX1RZUEVfSEVBREVSO1xuICAgIGlmIChpc0ZsaWdodFJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY3JlYXRlRnJvbUZldGNoKFByb21pc2UucmVzb2x2ZShyZXMpLCB7XG4gICAgICAgICAgICBjYWxsU2VydmVyOiBfYXBwY2FsbHNlcnZlci5jYWxsU2VydmVyXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgICAgIC8vIGlmIGl0IHdhcyBhIHJlZGlyZWN0aW9uLCB0aGVuIHJlc3VsdCBpcyBqdXN0IGEgcmVndWxhciBSU0MgcGF5bG9hZFxuICAgICAgICAgICAgY29uc3QgWywgYWN0aW9uRmxpZ2h0RGF0YV0gPSByZXNwb25zZSAhPSBudWxsID8gcmVzcG9uc2UgOiBbXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWN0aW9uRmxpZ2h0RGF0YTogYWN0aW9uRmxpZ2h0RGF0YSxcbiAgICAgICAgICAgICAgICByZWRpcmVjdExvY2F0aW9uLFxuICAgICAgICAgICAgICAgIHJldmFsaWRhdGVkUGFydHNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlIGl0J3MgYSB0dXBsZSBvZiBbYWN0aW9uUmVzdWx0LCBhY3Rpb25GbGlnaHREYXRhXVxuICAgICAgICBjb25zdCBbYWN0aW9uUmVzdWx0LCBbLCBhY3Rpb25GbGlnaHREYXRhXV0gPSByZXNwb25zZSAhPSBudWxsID8gcmVzcG9uc2UgOiBbXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFjdGlvblJlc3VsdCxcbiAgICAgICAgICAgIGFjdGlvbkZsaWdodERhdGEsXG4gICAgICAgICAgICByZWRpcmVjdExvY2F0aW9uLFxuICAgICAgICAgICAgcmV2YWxpZGF0ZWRQYXJ0c1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICByZWRpcmVjdExvY2F0aW9uLFxuICAgICAgICByZXZhbGlkYXRlZFBhcnRzXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHNlcnZlckFjdGlvblJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIGNvbnN0IHsgcmVzb2x2ZSwgcmVqZWN0IH0gPSBhY3Rpb247XG4gICAgY29uc3QgbXV0YWJsZSA9IHt9O1xuICAgIGNvbnN0IGhyZWYgPSBzdGF0ZS5jYW5vbmljYWxVcmw7XG4gICAgbGV0IGN1cnJlbnRUcmVlID0gc3RhdGUudHJlZTtcbiAgICBtdXRhYmxlLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlID0gZmFsc2U7XG4gICAgbXV0YWJsZS5pbkZsaWdodFNlcnZlckFjdGlvbiA9IGZldGNoU2VydmVyQWN0aW9uKHN0YXRlLCBhY3Rpb24pO1xuICAgIHJldHVybiBtdXRhYmxlLmluRmxpZ2h0U2VydmVyQWN0aW9uLnRoZW4oKHBhcmFtKT0+e1xuICAgICAgICBsZXQgeyBhY3Rpb25SZXN1bHQsIGFjdGlvbkZsaWdodERhdGE6IGZsaWdodERhdGEsIHJlZGlyZWN0TG9jYXRpb24gfSA9IHBhcmFtO1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHJlZGlyZWN0aW9uIGlzIGEgcHVzaCBpbnN0ZWFkIG9mIGEgcmVwbGFjZS5cbiAgICAgICAgLy8gSXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9pc3N1ZXMvNTM5MTFcbiAgICAgICAgaWYgKHJlZGlyZWN0TG9jYXRpb24pIHtcbiAgICAgICAgICAgIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2ggPSB0cnVlO1xuICAgICAgICAgICAgbXV0YWJsZS5wZW5kaW5nUHVzaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmbGlnaHREYXRhKSB7XG4gICAgICAgICAgICByZXNvbHZlKGFjdGlvblJlc3VsdCk7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJlZGlyZWN0IGJ1dCBubyBmbGlnaHQgZGF0YSB3ZSBuZWVkIHRvIGRvIGEgbXBhTmF2aWdhdGlvbi5cbiAgICAgICAgICAgIGlmIChyZWRpcmVjdExvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfbmF2aWdhdGVyZWR1Y2VyLmhhbmRsZUV4dGVybmFsVXJsKShzdGF0ZSwgbXV0YWJsZSwgcmVkaXJlY3RMb2NhdGlvbi5ocmVmLCBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZW4gbmF2aWdhdGluZyB0byBwYWdlIGluIGBwYWdlc2AgZnJvbSBgYXBwYFxuICAgICAgICAgICAgcmV0dXJuICgwLCBfbmF2aWdhdGVyZWR1Y2VyLmhhbmRsZUV4dGVybmFsVXJsKShzdGF0ZSwgbXV0YWJsZSwgZmxpZ2h0RGF0YSwgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVtb3ZlIGNhY2hlLmRhdGEgYXMgaXQgaGFzIGJlZW4gcmVzb2x2ZWQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgbXV0YWJsZS5pbkZsaWdodFNlcnZlckFjdGlvbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZmxpZ2h0RGF0YVBhdGggb2YgZmxpZ2h0RGF0YSl7XG4gICAgICAgICAgICAvLyBGbGlnaHREYXRhUGF0aCB3aXRoIG1vcmUgdGhhbiB0d28gaXRlbXMgbWVhbnMgdW5leHBlY3RlZCBGbGlnaHQgZGF0YSB3YXMgcmV0dXJuZWRcbiAgICAgICAgICAgIGlmIChmbGlnaHREYXRhUGF0aC5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPLUFQUDogaGFuZGxlIHRoaXMgY2FzZSBiZXR0ZXJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlNFUlZFUiBBQ1RJT04gQVBQTFkgRkFJTEVEXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEdpdmVuIHRoZSBwYXRoIGNhbiBvbmx5IGhhdmUgdHdvIGl0ZW1zIHRoZSBpdGVtcyBhcmUgb25seSB0aGUgcm91dGVyIHN0YXRlIGFuZCByc2MgZm9yIHRoZSByb290LlxuICAgICAgICAgICAgY29uc3QgW3RyZWVQYXRjaF0gPSBmbGlnaHREYXRhUGF0aDtcbiAgICAgICAgICAgIGNvbnN0IG5ld1RyZWUgPSAoMCwgX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb0Z1bGxUcmVlKSgvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgXSwgY3VycmVudFRyZWUsIHRyZWVQYXRjaCk7XG4gICAgICAgICAgICBpZiAobmV3VHJlZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX2hhbmRsZXNlZ21lbnRtaXNtYXRjaC5oYW5kbGVTZWdtZW50TWlzbWF0Y2gpKHN0YXRlLCBhY3Rpb24sIHRyZWVQYXRjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIF9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQuaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0KShjdXJyZW50VHJlZSwgbmV3VHJlZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9uYXZpZ2F0ZXJlZHVjZXIuaGFuZGxlRXh0ZXJuYWxVcmwpKHN0YXRlLCBtdXRhYmxlLCBocmVmLCBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoZSBvbmUgYmVmb3JlIGxhc3QgaXRlbSBpcyB0aGUgcm91dGVyIHN0YXRlIHRyZWUgcGF0Y2hcbiAgICAgICAgICAgIGNvbnN0IFtjYWNoZU5vZGVTZWVkRGF0YSwgaGVhZF0gPSBmbGlnaHREYXRhUGF0aC5zbGljZSgtMik7XG4gICAgICAgICAgICBjb25zdCByc2MgPSBjYWNoZU5vZGVTZWVkRGF0YSAhPT0gbnVsbCA/IGNhY2hlTm9kZVNlZWREYXRhWzJdIDogbnVsbDtcbiAgICAgICAgICAgIC8vIEhhbmRsZXMgY2FzZSB3aGVyZSBwcmVmZXRjaCBvbmx5IHJldHVybnMgdGhlIHJvdXRlciB0cmVlIHBhdGNoIHdpdGhvdXQgcmVuZGVyZWQgY29tcG9uZW50cy5cbiAgICAgICAgICAgIGlmIChyc2MgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZSA9ICgwLCBfYXBwcm91dGVyLmNyZWF0ZUVtcHR5Q2FjaGVOb2RlKSgpO1xuICAgICAgICAgICAgICAgIGNhY2hlLnJzYyA9IHJzYztcbiAgICAgICAgICAgICAgICBjYWNoZS5wcmVmZXRjaFJzYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgKDAsIF9maWxsbGF6eWl0ZW1zdGlsbGxlYWZ3aXRoaGVhZC5maWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCkoY2FjaGUsIC8vIEV4aXN0aW5nIGNhY2hlIGlzIG5vdCBwYXNzZWQgaW4gYXMgYHJvdXRlci5yZWZyZXNoKClgIGhhcyB0byBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgY2FjaGUuXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLCB0cmVlUGF0Y2gsIGNhY2hlTm9kZVNlZWREYXRhLCBoZWFkKTtcbiAgICAgICAgICAgICAgICBtdXRhYmxlLmNhY2hlID0gY2FjaGU7XG4gICAgICAgICAgICAgICAgbXV0YWJsZS5wcmVmZXRjaENhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbXV0YWJsZS5wYXRjaGVkVHJlZSA9IG5ld1RyZWU7XG4gICAgICAgICAgICBtdXRhYmxlLmNhbm9uaWNhbFVybCA9IGhyZWY7XG4gICAgICAgICAgICBjdXJyZW50VHJlZSA9IG5ld1RyZWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZGlyZWN0TG9jYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0hyZWYgPSAoMCwgX2NyZWF0ZWhyZWZmcm9tdXJsLmNyZWF0ZUhyZWZGcm9tVXJsKShyZWRpcmVjdExvY2F0aW9uLCBmYWxzZSk7XG4gICAgICAgICAgICBtdXRhYmxlLmNhbm9uaWNhbFVybCA9IG5ld0hyZWY7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShhY3Rpb25SZXN1bHQpO1xuICAgICAgICByZXR1cm4gKDAsIF9oYW5kbGVtdXRhYmxlLmhhbmRsZU11dGFibGUpKHN0YXRlLCBtdXRhYmxlKTtcbiAgICB9LCAoZSk9PntcbiAgICAgICAgLy8gV2hlbiB0aGUgc2VydmVyIGFjdGlvbiBpcyByZWplY3RlZCB3ZSBkb24ndCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBpbnN0ZWFkIGNhbGwgdGhlIHJlamVjdCBoYW5kbGVyIG9mIHRoZSBwcm9taXNlLlxuICAgICAgICByZWplY3QoZS5yZWFzb24pO1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcnZlci1hY3Rpb24tcmVkdWNlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic2VydmVyQWN0aW9uUmVkdWNlciIsIl9hcHBjYWxsc2VydmVyIiwicmVxdWlyZSIsIl9hcHByb3V0ZXJoZWFkZXJzIiwiX2FkZGJhc2VwYXRoIiwiX2NyZWF0ZWhyZWZmcm9tdXJsIiwiX25hdmlnYXRlcmVkdWNlciIsIl9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUiLCJfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0IiwiX2hhbmRsZW11dGFibGUiLCJfZmlsbGxhenlpdGVtc3RpbGxsZWFmd2l0aGhlYWQiLCJfYXBwcm91dGVyIiwiX2NvbXB1dGVjaGFuZ2VkcGF0aCIsIl9oYW5kbGVzZWdtZW50bWlzbWF0Y2giLCJjcmVhdGVGcm9tRmV0Y2giLCJlbmNvZGVSZXBseSIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1JVTlRJTUUiLCJmZXRjaFNlcnZlckFjdGlvbiIsInN0YXRlIiwicGFyYW0iLCJhY3Rpb25JZCIsImFjdGlvbkFyZ3MiLCJib2R5IiwibmV3TmV4dFVybCIsImV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlIiwidHJlZSIsImluY2x1ZGVOZXh0VXJsIiwibmV4dFVybCIsInJlcyIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsIkFjY2VwdCIsIlJTQ19DT05URU5UX1RZUEVfSEVBREVSIiwiQUNUSU9OIiwiTkVYVF9ST1VURVJfU1RBVEVfVFJFRSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJfX05FWFRfQUNUSU9OU19ERVBMT1lNRU5UX0lEIiwiTkVYVF9ERVBMT1lNRU5UX0lEIiwiTkVYVF9VUkwiLCJsb2NhdGlvbiIsInJldmFsaWRhdGVkUGFydHMiLCJyZXZhbGlkYXRlZEhlYWRlciIsInBhcnNlIiwicGF0aHMiLCJ0YWciLCJjb29raWUiLCJlIiwicmVkaXJlY3RMb2NhdGlvbiIsIlVSTCIsImFkZEJhc2VQYXRoIiwiY2Fub25pY2FsVXJsIiwid2luZG93IiwiaHJlZiIsInVuZGVmaW5lZCIsImlzRmxpZ2h0UmVzcG9uc2UiLCJyZXNwb25zZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2FsbFNlcnZlciIsImFjdGlvbkZsaWdodERhdGEiLCJhY3Rpb25SZXN1bHQiLCJhY3Rpb24iLCJyZWplY3QiLCJtdXRhYmxlIiwiY3VycmVudFRyZWUiLCJwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSIsImluRmxpZ2h0U2VydmVyQWN0aW9uIiwidGhlbiIsImZsaWdodERhdGEiLCJwdXNoUmVmIiwicGVuZGluZ1B1c2giLCJoYW5kbGVFeHRlcm5hbFVybCIsImZsaWdodERhdGFQYXRoIiwibGVuZ3RoIiwiY29uc29sZSIsImxvZyIsInRyZWVQYXRjaCIsIm5ld1RyZWUiLCJhcHBseVJvdXRlclN0YXRlUGF0Y2hUb0Z1bGxUcmVlIiwiaGFuZGxlU2VnbWVudE1pc21hdGNoIiwiaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IiwiY2FjaGVOb2RlU2VlZERhdGEiLCJoZWFkIiwic2xpY2UiLCJyc2MiLCJjYWNoZSIsImNyZWF0ZUVtcHR5Q2FjaGVOb2RlIiwicHJlZmV0Y2hSc2MiLCJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCIsInByZWZldGNoQ2FjaGUiLCJNYXAiLCJwYXRjaGVkVHJlZSIsIm5ld0hyZWYiLCJjcmVhdGVIcmVmRnJvbVVybCIsImhhbmRsZU11dGFibGUiLCJyZWFzb24iLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js ***! + \**************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"serverPatchReducer\", ({\n enumerable: true,\n get: function() {\n return serverPatchReducer;\n }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(ssr)/./node_modules/next/dist/client/components/app-router.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\nfunction serverPatchReducer(state, action) {\n const { flightData, overrideCanonicalUrl } = action;\n const mutable = {};\n mutable.preserveCustomHistoryState = false;\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === \"string\") {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n let currentTree = state.tree;\n let currentCache = state.cache;\n for (const flightDataPath of flightData){\n // Slices off the last segment (which is at -4) as it doesn't exist in the tree yet\n const flightSegmentPath = flightDataPath.slice(0, -4);\n const [treePatch] = flightDataPath.slice(-3, -2);\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)([\n \"\",\n ...flightSegmentPath\n ], currentTree, treePatch);\n if (newTree === null) {\n return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, state.canonicalUrl, state.pushRef.pendingPush);\n }\n const canonicalUrlOverrideHref = overrideCanonicalUrl ? (0, _createhreffromurl.createHrefFromUrl)(overrideCanonicalUrl) : undefined;\n if (canonicalUrlOverrideHref) {\n mutable.canonicalUrl = canonicalUrlOverrideHref;\n }\n const cache = (0, _approuter.createEmptyCacheNode)();\n (0, _applyflightdata.applyFlightData)(currentCache, cache, flightDataPath);\n mutable.patchedTree = newTree;\n mutable.cache = cache;\n currentCache = cache;\n currentTree = newTree;\n }\n return (0, _handlemutable.handleMutable)(state, mutable);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=server-patch-reducer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3NlcnZlci1wYXRjaC1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxzREFBcUQ7SUFDakRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxxQkFBcUJDLG1CQUFPQSxDQUFDLHdIQUF5QjtBQUM1RCxNQUFNQywrQkFBK0JELG1CQUFPQSxDQUFDLGdKQUFxQztBQUNsRixNQUFNRSwrQkFBK0JGLG1CQUFPQSxDQUFDLGdKQUFxQztBQUNsRixNQUFNRyxtQkFBbUJILG1CQUFPQSxDQUFDLHdIQUFvQjtBQUNyRCxNQUFNSSxtQkFBbUJKLG1CQUFPQSxDQUFDLGtIQUFzQjtBQUN2RCxNQUFNSyxpQkFBaUJMLG1CQUFPQSxDQUFDLDRHQUFtQjtBQUNsRCxNQUFNTSxhQUFhTixtQkFBT0EsQ0FBQyx3RkFBa0I7QUFDN0MsTUFBTU8seUJBQXlCUCxtQkFBT0EsQ0FBQyw4SEFBNEI7QUFDbkUsU0FBU0YsbUJBQW1CVSxLQUFLLEVBQUVDLE1BQU07SUFDckMsTUFBTSxFQUFFQyxVQUFVLEVBQUVDLG9CQUFvQixFQUFFLEdBQUdGO0lBQzdDLE1BQU1HLFVBQVUsQ0FBQztJQUNqQkEsUUFBUUMsMEJBQTBCLEdBQUc7SUFDckMsNERBQTREO0lBQzVELElBQUksT0FBT0gsZUFBZSxVQUFVO1FBQ2hDLE9BQU8sQ0FBQyxHQUFHUCxpQkFBaUJXLGlCQUFpQixFQUFFTixPQUFPSSxTQUFTRixZQUFZRixNQUFNTyxPQUFPLENBQUNDLFdBQVc7SUFDeEc7SUFDQSxJQUFJQyxjQUFjVCxNQUFNVSxJQUFJO0lBQzVCLElBQUlDLGVBQWVYLE1BQU1ZLEtBQUs7SUFDOUIsS0FBSyxNQUFNQyxrQkFBa0JYLFdBQVc7UUFDcEMsbUZBQW1GO1FBQ25GLE1BQU1ZLG9CQUFvQkQsZUFBZUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNuRCxNQUFNLENBQUNDLFVBQVUsR0FBR0gsZUFBZUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzlDLE1BQU1FLFVBQVUsQ0FBQyxHQUFHeEIsNkJBQTZCeUIsc0NBQXNDLEVBQ3ZGO1lBQ0k7ZUFDR0o7U0FDTixFQUFFTCxhQUFhTztRQUNoQixJQUFJQyxZQUFZLE1BQU07WUFDbEIsT0FBTyxDQUFDLEdBQUdsQix1QkFBdUJvQixxQkFBcUIsRUFBRW5CLE9BQU9DLFFBQVFlO1FBQzVFO1FBQ0EsSUFBSSxDQUFDLEdBQUd0Qiw2QkFBNkIwQiwyQkFBMkIsRUFBRVgsYUFBYVEsVUFBVTtZQUNyRixPQUFPLENBQUMsR0FBR3RCLGlCQUFpQlcsaUJBQWlCLEVBQUVOLE9BQU9JLFNBQVNKLE1BQU1xQixZQUFZLEVBQUVyQixNQUFNTyxPQUFPLENBQUNDLFdBQVc7UUFDaEg7UUFDQSxNQUFNYywyQkFBMkJuQix1QkFBdUIsQ0FBQyxHQUFHWixtQkFBbUJnQyxpQkFBaUIsRUFBRXBCLHdCQUF3QnFCO1FBQzFILElBQUlGLDBCQUEwQjtZQUMxQmxCLFFBQVFpQixZQUFZLEdBQUdDO1FBQzNCO1FBQ0EsTUFBTVYsUUFBUSxDQUFDLEdBQUdkLFdBQVcyQixvQkFBb0I7UUFDaEQsSUFBRzdCLGlCQUFpQjhCLGVBQWUsRUFBRWYsY0FBY0MsT0FBT0M7UUFDM0RULFFBQVF1QixXQUFXLEdBQUdWO1FBQ3RCYixRQUFRUSxLQUFLLEdBQUdBO1FBQ2hCRCxlQUFlQztRQUNmSCxjQUFjUTtJQUNsQjtJQUNBLE9BQU8sQ0FBQyxHQUFHcEIsZUFBZStCLGFBQWEsRUFBRTVCLE9BQU9JO0FBQ3BEO0FBRUEsSUFBSSxDQUFDLE9BQU9sQixRQUFRMkMsT0FBTyxLQUFLLGNBQWUsT0FBTzNDLFFBQVEyQyxPQUFPLEtBQUssWUFBWTNDLFFBQVEyQyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU8zQyxRQUFRMkMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzlDLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTJDLE9BQU8sRUFBRSxjQUFjO1FBQUUxQyxPQUFPO0lBQUs7SUFDbkVILE9BQU8rQyxNQUFNLENBQUM3QyxRQUFRMkMsT0FBTyxFQUFFM0M7SUFDL0I4QyxPQUFPOUMsT0FBTyxHQUFHQSxRQUFRMkMsT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3NlcnZlci1wYXRjaC1yZWR1Y2VyLmpzP2RhZjIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJ2ZXJQYXRjaFJlZHVjZXJcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHNlcnZlclBhdGNoUmVkdWNlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9jcmVhdGVocmVmZnJvbXVybCA9IHJlcXVpcmUoXCIuLi9jcmVhdGUtaHJlZi1mcm9tLXVybFwiKTtcbmNvbnN0IF9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUgPSByZXF1aXJlKFwiLi4vYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWVcIik7XG5jb25zdCBfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0ID0gcmVxdWlyZShcIi4uL2lzLW5hdmlnYXRpbmctdG8tbmV3LXJvb3QtbGF5b3V0XCIpO1xuY29uc3QgX25hdmlnYXRlcmVkdWNlciA9IHJlcXVpcmUoXCIuL25hdmlnYXRlLXJlZHVjZXJcIik7XG5jb25zdCBfYXBwbHlmbGlnaHRkYXRhID0gcmVxdWlyZShcIi4uL2FwcGx5LWZsaWdodC1kYXRhXCIpO1xuY29uc3QgX2hhbmRsZW11dGFibGUgPSByZXF1aXJlKFwiLi4vaGFuZGxlLW11dGFibGVcIik7XG5jb25zdCBfYXBwcm91dGVyID0gcmVxdWlyZShcIi4uLy4uL2FwcC1yb3V0ZXJcIik7XG5jb25zdCBfaGFuZGxlc2VnbWVudG1pc21hdGNoID0gcmVxdWlyZShcIi4uL2hhbmRsZS1zZWdtZW50LW1pc21hdGNoXCIpO1xuZnVuY3Rpb24gc2VydmVyUGF0Y2hSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICBjb25zdCB7IGZsaWdodERhdGEsIG92ZXJyaWRlQ2Fub25pY2FsVXJsIH0gPSBhY3Rpb247XG4gICAgY29uc3QgbXV0YWJsZSA9IHt9O1xuICAgIG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUgPSBmYWxzZTtcbiAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIG5hdmlnYXRpbmcgdG8gcGFnZSBpbiBgcGFnZXNgIGZyb20gYGFwcGBcbiAgICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbmF2aWdhdGVyZWR1Y2VyLmhhbmRsZUV4dGVybmFsVXJsKShzdGF0ZSwgbXV0YWJsZSwgZmxpZ2h0RGF0YSwgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaCk7XG4gICAgfVxuICAgIGxldCBjdXJyZW50VHJlZSA9IHN0YXRlLnRyZWU7XG4gICAgbGV0IGN1cnJlbnRDYWNoZSA9IHN0YXRlLmNhY2hlO1xuICAgIGZvciAoY29uc3QgZmxpZ2h0RGF0YVBhdGggb2YgZmxpZ2h0RGF0YSl7XG4gICAgICAgIC8vIFNsaWNlcyBvZmYgdGhlIGxhc3Qgc2VnbWVudCAod2hpY2ggaXMgYXQgLTQpIGFzIGl0IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHRyZWUgeWV0XG4gICAgICAgIGNvbnN0IGZsaWdodFNlZ21lbnRQYXRoID0gZmxpZ2h0RGF0YVBhdGguc2xpY2UoMCwgLTQpO1xuICAgICAgICBjb25zdCBbdHJlZVBhdGNoXSA9IGZsaWdodERhdGFQYXRoLnNsaWNlKC0zLCAtMik7XG4gICAgICAgIGNvbnN0IG5ld1RyZWUgPSAoMCwgX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdCkoLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICBbXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgLi4uZmxpZ2h0U2VnbWVudFBhdGhcbiAgICAgICAgXSwgY3VycmVudFRyZWUsIHRyZWVQYXRjaCk7XG4gICAgICAgIGlmIChuZXdUcmVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIF9oYW5kbGVzZWdtZW50bWlzbWF0Y2guaGFuZGxlU2VnbWVudE1pc21hdGNoKShzdGF0ZSwgYWN0aW9uLCB0cmVlUGF0Y2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgX2lzbmF2aWdhdGluZ3RvbmV3cm9vdGxheW91dC5pc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQpKGN1cnJlbnRUcmVlLCBuZXdUcmVlKSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfbmF2aWdhdGVyZWR1Y2VyLmhhbmRsZUV4dGVybmFsVXJsKShzdGF0ZSwgbXV0YWJsZSwgc3RhdGUuY2Fub25pY2FsVXJsLCBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYW5vbmljYWxVcmxPdmVycmlkZUhyZWYgPSBvdmVycmlkZUNhbm9uaWNhbFVybCA/ICgwLCBfY3JlYXRlaHJlZmZyb211cmwuY3JlYXRlSHJlZkZyb21VcmwpKG92ZXJyaWRlQ2Fub25pY2FsVXJsKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZikge1xuICAgICAgICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSBjYW5vbmljYWxVcmxPdmVycmlkZUhyZWY7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FjaGUgPSAoMCwgX2FwcHJvdXRlci5jcmVhdGVFbXB0eUNhY2hlTm9kZSkoKTtcbiAgICAgICAgKDAsIF9hcHBseWZsaWdodGRhdGEuYXBwbHlGbGlnaHREYXRhKShjdXJyZW50Q2FjaGUsIGNhY2hlLCBmbGlnaHREYXRhUGF0aCk7XG4gICAgICAgIG11dGFibGUucGF0Y2hlZFRyZWUgPSBuZXdUcmVlO1xuICAgICAgICBtdXRhYmxlLmNhY2hlID0gY2FjaGU7XG4gICAgICAgIGN1cnJlbnRDYWNoZSA9IGNhY2hlO1xuICAgICAgICBjdXJyZW50VHJlZSA9IG5ld1RyZWU7XG4gICAgfVxuICAgIHJldHVybiAoMCwgX2hhbmRsZW11dGFibGUuaGFuZGxlTXV0YWJsZSkoc3RhdGUsIG11dGFibGUpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJ2ZXItcGF0Y2gtcmVkdWNlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic2VydmVyUGF0Y2hSZWR1Y2VyIiwiX2NyZWF0ZWhyZWZmcm9tdXJsIiwicmVxdWlyZSIsIl9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUiLCJfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0IiwiX25hdmlnYXRlcmVkdWNlciIsIl9hcHBseWZsaWdodGRhdGEiLCJfaGFuZGxlbXV0YWJsZSIsIl9hcHByb3V0ZXIiLCJfaGFuZGxlc2VnbWVudG1pc21hdGNoIiwic3RhdGUiLCJhY3Rpb24iLCJmbGlnaHREYXRhIiwib3ZlcnJpZGVDYW5vbmljYWxVcmwiLCJtdXRhYmxlIiwicHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUiLCJoYW5kbGVFeHRlcm5hbFVybCIsInB1c2hSZWYiLCJwZW5kaW5nUHVzaCIsImN1cnJlbnRUcmVlIiwidHJlZSIsImN1cnJlbnRDYWNoZSIsImNhY2hlIiwiZmxpZ2h0RGF0YVBhdGgiLCJmbGlnaHRTZWdtZW50UGF0aCIsInNsaWNlIiwidHJlZVBhdGNoIiwibmV3VHJlZSIsImFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZVNraXBEZWZhdWx0IiwiaGFuZGxlU2VnbWVudE1pc21hdGNoIiwiaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IiwiY2Fub25pY2FsVXJsIiwiY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmIiwiY3JlYXRlSHJlZkZyb21VcmwiLCJ1bmRlZmluZWQiLCJjcmVhdGVFbXB0eUNhY2hlTm9kZSIsImFwcGx5RmxpZ2h0RGF0YSIsInBhdGNoZWRUcmVlIiwiaGFuZGxlTXV0YWJsZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js ***! + \*****************************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PrefetchKind: function() {\n return PrefetchKind;\n },\n ACTION_REFRESH: function() {\n return ACTION_REFRESH;\n },\n ACTION_NAVIGATE: function() {\n return ACTION_NAVIGATE;\n },\n ACTION_RESTORE: function() {\n return ACTION_RESTORE;\n },\n ACTION_SERVER_PATCH: function() {\n return ACTION_SERVER_PATCH;\n },\n ACTION_PREFETCH: function() {\n return ACTION_PREFETCH;\n },\n ACTION_FAST_REFRESH: function() {\n return ACTION_FAST_REFRESH;\n },\n ACTION_SERVER_ACTION: function() {\n return ACTION_SERVER_ACTION;\n },\n isThenable: function() {\n return isThenable;\n }\n});\nconst ACTION_REFRESH = \"refresh\";\nconst ACTION_NAVIGATE = \"navigate\";\nconst ACTION_RESTORE = \"restore\";\nconst ACTION_SERVER_PATCH = \"server-patch\";\nconst ACTION_PREFETCH = \"prefetch\";\nconst ACTION_FAST_REFRESH = \"fast-refresh\";\nconst ACTION_SERVER_ACTION = \"server-action\";\nvar PrefetchKind;\n(function(PrefetchKind) {\n PrefetchKind[\"AUTO\"] = \"auto\";\n PrefetchKind[\"FULL\"] = \"full\";\n PrefetchKind[\"TEMPORARY\"] = \"temporary\";\n})(PrefetchKind || (PrefetchKind = {}));\nfunction isThenable(value) {\n // TODO: We don't gain anything from this abstraction. It's unsound, and only\n // makes sense in the specific places where we use it. So it's better to keep\n // the type coercion inline, instead of leaking this to other places in\n // the codebase.\n return value && (typeof value === \"object\" || typeof value === \"function\") && typeof value.then === \"function\";\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=router-reducer-types.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JvdXRlci1yZWR1Y2VyLXR5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBVU47QUFDQSxTQUFTVSxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJaEIsT0FBT0MsY0FBYyxDQUFDYyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFaLFNBQVM7SUFDYkcsY0FBYztRQUNWLE9BQU9BO0lBQ1g7SUFDQUMsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7SUFDQUMscUJBQXFCO1FBQ2pCLE9BQU9BO0lBQ1g7SUFDQUMsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtJQUNBQyxxQkFBcUI7UUFDakIsT0FBT0E7SUFDWDtJQUNBQyxzQkFBc0I7UUFDbEIsT0FBT0E7SUFDWDtJQUNBQyxZQUFZO1FBQ1IsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTVAsaUJBQWlCO0FBQ3ZCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyxpQkFBaUI7QUFDdkIsTUFBTUMsc0JBQXNCO0FBQzVCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTUMsdUJBQXVCO0FBQzdCLElBQUlQO0FBQ0gsVUFBU0EsWUFBWTtJQUNsQkEsWUFBWSxDQUFDLE9BQU8sR0FBRztJQUN2QkEsWUFBWSxDQUFDLE9BQU8sR0FBRztJQUN2QkEsWUFBWSxDQUFDLFlBQVksR0FBRztBQUNoQyxHQUFHQSxnQkFBaUJBLENBQUFBLGVBQWUsQ0FBQztBQUNwQyxTQUFTUSxXQUFXVixLQUFLO0lBQ3JCLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UsdUVBQXVFO0lBQ3ZFLGdCQUFnQjtJQUNoQixPQUFPQSxTQUFVLFFBQU9BLFVBQVUsWUFBWSxPQUFPQSxVQUFVLFVBQVMsS0FBTSxPQUFPQSxNQUFNaUIsSUFBSSxLQUFLO0FBQ3hHO0FBRUEsSUFBSSxDQUFDLE9BQU9sQixRQUFRbUIsT0FBTyxLQUFLLGNBQWUsT0FBT25CLFFBQVFtQixPQUFPLEtBQUssWUFBWW5CLFFBQVFtQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9uQixRQUFRbUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3RCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW1CLE9BQU8sRUFBRSxjQUFjO1FBQUVsQixPQUFPO0lBQUs7SUFDbkVILE9BQU91QixNQUFNLENBQUNyQixRQUFRbUIsT0FBTyxFQUFFbkI7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUW1CLE9BQU87QUFDbEMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlcy5qcz82NTdkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUHJlZmV0Y2hLaW5kOiBudWxsLFxuICAgIEFDVElPTl9SRUZSRVNIOiBudWxsLFxuICAgIEFDVElPTl9OQVZJR0FURTogbnVsbCxcbiAgICBBQ1RJT05fUkVTVE9SRTogbnVsbCxcbiAgICBBQ1RJT05fU0VSVkVSX1BBVENIOiBudWxsLFxuICAgIEFDVElPTl9QUkVGRVRDSDogbnVsbCxcbiAgICBBQ1RJT05fRkFTVF9SRUZSRVNIOiBudWxsLFxuICAgIEFDVElPTl9TRVJWRVJfQUNUSU9OOiBudWxsLFxuICAgIGlzVGhlbmFibGU6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgUHJlZmV0Y2hLaW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFByZWZldGNoS2luZDtcbiAgICB9LFxuICAgIEFDVElPTl9SRUZSRVNIOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9SRUZSRVNIO1xuICAgIH0sXG4gICAgQUNUSU9OX05BVklHQVRFOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9OQVZJR0FURTtcbiAgICB9LFxuICAgIEFDVElPTl9SRVNUT1JFOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9SRVNUT1JFO1xuICAgIH0sXG4gICAgQUNUSU9OX1NFUlZFUl9QQVRDSDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBQ1RJT05fU0VSVkVSX1BBVENIO1xuICAgIH0sXG4gICAgQUNUSU9OX1BSRUZFVENIOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9QUkVGRVRDSDtcbiAgICB9LFxuICAgIEFDVElPTl9GQVNUX1JFRlJFU0g6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OX0ZBU1RfUkVGUkVTSDtcbiAgICB9LFxuICAgIEFDVElPTl9TRVJWRVJfQUNUSU9OOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9TRVJWRVJfQUNUSU9OO1xuICAgIH0sXG4gICAgaXNUaGVuYWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc1RoZW5hYmxlO1xuICAgIH1cbn0pO1xuY29uc3QgQUNUSU9OX1JFRlJFU0ggPSBcInJlZnJlc2hcIjtcbmNvbnN0IEFDVElPTl9OQVZJR0FURSA9IFwibmF2aWdhdGVcIjtcbmNvbnN0IEFDVElPTl9SRVNUT1JFID0gXCJyZXN0b3JlXCI7XG5jb25zdCBBQ1RJT05fU0VSVkVSX1BBVENIID0gXCJzZXJ2ZXItcGF0Y2hcIjtcbmNvbnN0IEFDVElPTl9QUkVGRVRDSCA9IFwicHJlZmV0Y2hcIjtcbmNvbnN0IEFDVElPTl9GQVNUX1JFRlJFU0ggPSBcImZhc3QtcmVmcmVzaFwiO1xuY29uc3QgQUNUSU9OX1NFUlZFUl9BQ1RJT04gPSBcInNlcnZlci1hY3Rpb25cIjtcbnZhciBQcmVmZXRjaEtpbmQ7XG4oZnVuY3Rpb24oUHJlZmV0Y2hLaW5kKSB7XG4gICAgUHJlZmV0Y2hLaW5kW1wiQVVUT1wiXSA9IFwiYXV0b1wiO1xuICAgIFByZWZldGNoS2luZFtcIkZVTExcIl0gPSBcImZ1bGxcIjtcbiAgICBQcmVmZXRjaEtpbmRbXCJURU1QT1JBUllcIl0gPSBcInRlbXBvcmFyeVwiO1xufSkoUHJlZmV0Y2hLaW5kIHx8IChQcmVmZXRjaEtpbmQgPSB7fSkpO1xuZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZSkge1xuICAgIC8vIFRPRE86IFdlIGRvbid0IGdhaW4gYW55dGhpbmcgZnJvbSB0aGlzIGFic3RyYWN0aW9uLiBJdCdzIHVuc291bmQsIGFuZCBvbmx5XG4gICAgLy8gbWFrZXMgc2Vuc2UgaW4gdGhlIHNwZWNpZmljIHBsYWNlcyB3aGVyZSB3ZSB1c2UgaXQuIFNvIGl0J3MgYmV0dGVyIHRvIGtlZXBcbiAgICAvLyB0aGUgdHlwZSBjb2VyY2lvbiBpbmxpbmUsIGluc3RlYWQgb2YgbGVha2luZyB0aGlzIHRvIG90aGVyIHBsYWNlcyBpblxuICAgIC8vIHRoZSBjb2RlYmFzZS5cbiAgICByZXR1cm4gdmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGVyLXJlZHVjZXItdHlwZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiUHJlZmV0Y2hLaW5kIiwiQUNUSU9OX1JFRlJFU0giLCJBQ1RJT05fTkFWSUdBVEUiLCJBQ1RJT05fUkVTVE9SRSIsIkFDVElPTl9TRVJWRVJfUEFUQ0giLCJBQ1RJT05fUFJFRkVUQ0giLCJBQ1RJT05fRkFTVF9SRUZSRVNIIiwiQUNUSU9OX1NFUlZFUl9BQ1RJT04iLCJpc1RoZW5hYmxlIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwidGhlbiIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/router-reducer.js ***! + \***********************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"reducer\", ({\n enumerable: true,\n get: function() {\n return reducer;\n }\n}));\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _navigatereducer = __webpack_require__(/*! ./reducers/navigate-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _serverpatchreducer = __webpack_require__(/*! ./reducers/server-patch-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js\");\nconst _restorereducer = __webpack_require__(/*! ./reducers/restore-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js\");\nconst _refreshreducer = __webpack_require__(/*! ./reducers/refresh-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./reducers/prefetch-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst _fastrefreshreducer = __webpack_require__(/*! ./reducers/fast-refresh-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/fast-refresh-reducer.js\");\nconst _serveractionreducer = __webpack_require__(/*! ./reducers/server-action-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js\");\n/**\n * Reducer that handles the app-router state updates.\n */ function clientReducer(state, action) {\n switch(action.type){\n case _routerreducertypes.ACTION_NAVIGATE:\n {\n return (0, _navigatereducer.navigateReducer)(state, action);\n }\n case _routerreducertypes.ACTION_SERVER_PATCH:\n {\n return (0, _serverpatchreducer.serverPatchReducer)(state, action);\n }\n case _routerreducertypes.ACTION_RESTORE:\n {\n return (0, _restorereducer.restoreReducer)(state, action);\n }\n case _routerreducertypes.ACTION_REFRESH:\n {\n return (0, _refreshreducer.refreshReducer)(state, action);\n }\n case _routerreducertypes.ACTION_FAST_REFRESH:\n {\n return (0, _fastrefreshreducer.fastRefreshReducer)(state, action);\n }\n case _routerreducertypes.ACTION_PREFETCH:\n {\n return (0, _prefetchreducer.prefetchReducer)(state, action);\n }\n case _routerreducertypes.ACTION_SERVER_ACTION:\n {\n return (0, _serveractionreducer.serverActionReducer)(state, action);\n }\n // This case should never be hit as dispatch is strongly typed.\n default:\n throw new Error(\"Unknown action\");\n }\n}\nfunction serverReducer(state, _action) {\n return state;\n}\nconst reducer = true ? serverReducer : 0;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=router-reducer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JvdXRlci1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxzQkFBc0JDLG1CQUFPQSxDQUFDLHVIQUF3QjtBQUM1RCxNQUFNQyxtQkFBbUJELG1CQUFPQSxDQUFDLGlJQUE2QjtBQUM5RCxNQUFNRSxzQkFBc0JGLG1CQUFPQSxDQUFDLHlJQUFpQztBQUNyRSxNQUFNRyxrQkFBa0JILG1CQUFPQSxDQUFDLCtIQUE0QjtBQUM1RCxNQUFNSSxrQkFBa0JKLG1CQUFPQSxDQUFDLCtIQUE0QjtBQUM1RCxNQUFNSyxtQkFBbUJMLG1CQUFPQSxDQUFDLGlJQUE2QjtBQUM5RCxNQUFNTSxzQkFBc0JOLG1CQUFPQSxDQUFDLHlJQUFpQztBQUNyRSxNQUFNTyx1QkFBdUJQLG1CQUFPQSxDQUFDLDJJQUFrQztBQUN2RTs7Q0FFQyxHQUFHLFNBQVNRLGNBQWNDLEtBQUssRUFBRUMsTUFBTTtJQUNwQyxPQUFPQSxPQUFPQyxJQUFJO1FBQ2QsS0FBS1osb0JBQW9CYSxlQUFlO1lBQ3BDO2dCQUNJLE9BQU8sQ0FBQyxHQUFHWCxpQkFBaUJZLGVBQWUsRUFBRUosT0FBT0M7WUFDeEQ7UUFDSixLQUFLWCxvQkFBb0JlLG1CQUFtQjtZQUN4QztnQkFDSSxPQUFPLENBQUMsR0FBR1osb0JBQW9CYSxrQkFBa0IsRUFBRU4sT0FBT0M7WUFDOUQ7UUFDSixLQUFLWCxvQkFBb0JpQixjQUFjO1lBQ25DO2dCQUNJLE9BQU8sQ0FBQyxHQUFHYixnQkFBZ0JjLGNBQWMsRUFBRVIsT0FBT0M7WUFDdEQ7UUFDSixLQUFLWCxvQkFBb0JtQixjQUFjO1lBQ25DO2dCQUNJLE9BQU8sQ0FBQyxHQUFHZCxnQkFBZ0JlLGNBQWMsRUFBRVYsT0FBT0M7WUFDdEQ7UUFDSixLQUFLWCxvQkFBb0JxQixtQkFBbUI7WUFDeEM7Z0JBQ0ksT0FBTyxDQUFDLEdBQUdkLG9CQUFvQmUsa0JBQWtCLEVBQUVaLE9BQU9DO1lBQzlEO1FBQ0osS0FBS1gsb0JBQW9CdUIsZUFBZTtZQUNwQztnQkFDSSxPQUFPLENBQUMsR0FBR2pCLGlCQUFpQmtCLGVBQWUsRUFBRWQsT0FBT0M7WUFDeEQ7UUFDSixLQUFLWCxvQkFBb0J5QixvQkFBb0I7WUFDekM7Z0JBQ0ksT0FBTyxDQUFDLEdBQUdqQixxQkFBcUJrQixtQkFBbUIsRUFBRWhCLE9BQU9DO1lBQ2hFO1FBQ0osK0RBQStEO1FBQy9EO1lBQ0ksTUFBTSxJQUFJZ0IsTUFBTTtJQUN4QjtBQUNKO0FBQ0EsU0FBU0MsY0FBY2xCLEtBQUssRUFBRW1CLE9BQU87SUFDakMsT0FBT25CO0FBQ1g7QUFDQSxNQUFNWCxVQUFVLEtBQTZCLEdBQUc2QixnQkFBZ0JuQixDQUFhQTtBQUU3RSxJQUFJLENBQUMsT0FBT2QsUUFBUW1DLE9BQU8sS0FBSyxjQUFlLE9BQU9uQyxRQUFRbUMsT0FBTyxLQUFLLFlBQVluQyxRQUFRbUMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPbkMsUUFBUW1DLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt0QyxPQUFPQyxjQUFjLENBQUNDLFFBQVFtQyxPQUFPLEVBQUUsY0FBYztRQUFFbEMsT0FBTztJQUFLO0lBQ25FSCxPQUFPdUMsTUFBTSxDQUFDckMsUUFBUW1DLE9BQU8sRUFBRW5DO0lBQy9Cc0MsT0FBT3RDLE9BQU8sR0FBR0EsUUFBUW1DLE9BQU87QUFDbEMsRUFFQSwwQ0FBMEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci5qcz8xZGRjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVkdWNlclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmVkdWNlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9yb3V0ZXJyZWR1Y2VydHlwZXMgPSByZXF1aXJlKFwiLi9yb3V0ZXItcmVkdWNlci10eXBlc1wiKTtcbmNvbnN0IF9uYXZpZ2F0ZXJlZHVjZXIgPSByZXF1aXJlKFwiLi9yZWR1Y2Vycy9uYXZpZ2F0ZS1yZWR1Y2VyXCIpO1xuY29uc3QgX3NlcnZlcnBhdGNocmVkdWNlciA9IHJlcXVpcmUoXCIuL3JlZHVjZXJzL3NlcnZlci1wYXRjaC1yZWR1Y2VyXCIpO1xuY29uc3QgX3Jlc3RvcmVyZWR1Y2VyID0gcmVxdWlyZShcIi4vcmVkdWNlcnMvcmVzdG9yZS1yZWR1Y2VyXCIpO1xuY29uc3QgX3JlZnJlc2hyZWR1Y2VyID0gcmVxdWlyZShcIi4vcmVkdWNlcnMvcmVmcmVzaC1yZWR1Y2VyXCIpO1xuY29uc3QgX3ByZWZldGNocmVkdWNlciA9IHJlcXVpcmUoXCIuL3JlZHVjZXJzL3ByZWZldGNoLXJlZHVjZXJcIik7XG5jb25zdCBfZmFzdHJlZnJlc2hyZWR1Y2VyID0gcmVxdWlyZShcIi4vcmVkdWNlcnMvZmFzdC1yZWZyZXNoLXJlZHVjZXJcIik7XG5jb25zdCBfc2VydmVyYWN0aW9ucmVkdWNlciA9IHJlcXVpcmUoXCIuL3JlZHVjZXJzL3NlcnZlci1hY3Rpb24tcmVkdWNlclwiKTtcbi8qKlxuICogUmVkdWNlciB0aGF0IGhhbmRsZXMgdGhlIGFwcC1yb3V0ZXIgc3RhdGUgdXBkYXRlcy5cbiAqLyBmdW5jdGlvbiBjbGllbnRSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICBzd2l0Y2goYWN0aW9uLnR5cGUpe1xuICAgICAgICBjYXNlIF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX05BVklHQVRFOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX25hdmlnYXRlcmVkdWNlci5uYXZpZ2F0ZVJlZHVjZXIpKHN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1NFUlZFUl9QQVRDSDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9zZXJ2ZXJwYXRjaHJlZHVjZXIuc2VydmVyUGF0Y2hSZWR1Y2VyKShzdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9SRVNUT1JFOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3Jlc3RvcmVyZWR1Y2VyLnJlc3RvcmVSZWR1Y2VyKShzdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9SRUZSRVNIOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3JlZnJlc2hyZWR1Y2VyLnJlZnJlc2hSZWR1Y2VyKShzdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9GQVNUX1JFRlJFU0g6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfZmFzdHJlZnJlc2hyZWR1Y2VyLmZhc3RSZWZyZXNoUmVkdWNlcikoc3RhdGUsIGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fUFJFRkVUQ0g6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfcHJlZmV0Y2hyZWR1Y2VyLnByZWZldGNoUmVkdWNlcikoc3RhdGUsIGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fU0VSVkVSX0FDVElPTjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9zZXJ2ZXJhY3Rpb25yZWR1Y2VyLnNlcnZlckFjdGlvblJlZHVjZXIpKHN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIGNhc2Ugc2hvdWxkIG5ldmVyIGJlIGhpdCBhcyBkaXNwYXRjaCBpcyBzdHJvbmdseSB0eXBlZC5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gYWN0aW9uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNlcnZlclJlZHVjZXIoc3RhdGUsIF9hY3Rpb24pIHtcbiAgICByZXR1cm4gc3RhdGU7XG59XG5jb25zdCByZWR1Y2VyID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiA/IHNlcnZlclJlZHVjZXIgOiBjbGllbnRSZWR1Y2VyO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yb3V0ZXItcmVkdWNlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicmVkdWNlciIsIl9yb3V0ZXJyZWR1Y2VydHlwZXMiLCJyZXF1aXJlIiwiX25hdmlnYXRlcmVkdWNlciIsIl9zZXJ2ZXJwYXRjaHJlZHVjZXIiLCJfcmVzdG9yZXJlZHVjZXIiLCJfcmVmcmVzaHJlZHVjZXIiLCJfcHJlZmV0Y2hyZWR1Y2VyIiwiX2Zhc3RyZWZyZXNocmVkdWNlciIsIl9zZXJ2ZXJhY3Rpb25yZWR1Y2VyIiwiY2xpZW50UmVkdWNlciIsInN0YXRlIiwiYWN0aW9uIiwidHlwZSIsIkFDVElPTl9OQVZJR0FURSIsIm5hdmlnYXRlUmVkdWNlciIsIkFDVElPTl9TRVJWRVJfUEFUQ0giLCJzZXJ2ZXJQYXRjaFJlZHVjZXIiLCJBQ1RJT05fUkVTVE9SRSIsInJlc3RvcmVSZWR1Y2VyIiwiQUNUSU9OX1JFRlJFU0giLCJyZWZyZXNoUmVkdWNlciIsIkFDVElPTl9GQVNUX1JFRlJFU0giLCJmYXN0UmVmcmVzaFJlZHVjZXIiLCJBQ1RJT05fUFJFRkVUQ0giLCJwcmVmZXRjaFJlZHVjZXIiLCJBQ1RJT05fU0VSVkVSX0FDVElPTiIsInNlcnZlckFjdGlvblJlZHVjZXIiLCJFcnJvciIsInNlcnZlclJlZHVjZXIiLCJfYWN0aW9uIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js ***! + \*****************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"shouldHardNavigate\", ({\n enumerable: true,\n get: function() {\n return shouldHardNavigate;\n }\n}));\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(ssr)/./node_modules/next/dist/client/components/match-segments.js\");\nfunction shouldHardNavigate(flightSegmentPath, flightRouterState) {\n const [segment, parallelRoutes] = flightRouterState;\n // TODO-APP: Check if `as` can be replaced.\n const [currentSegment, parallelRouteKey] = flightSegmentPath;\n // Check if current segment matches the existing segment.\n if (!(0, _matchsegments.matchSegment)(currentSegment, segment)) {\n // If dynamic parameter in tree doesn't match up with segment path a hard navigation is triggered.\n if (Array.isArray(currentSegment)) {\n return true;\n }\n // If the existing segment did not match soft navigation is triggered.\n return false;\n }\n const lastSegment = flightSegmentPath.length <= 2;\n if (lastSegment) {\n return false;\n }\n return shouldHardNavigate(flightSegmentPath.slice(2), parallelRoutes[parallelRouteKey]);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=should-hard-navigate.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3Nob3VsZC1oYXJkLW5hdmlnYXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxzREFBcUQ7SUFDakRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQkFBaUJDLG1CQUFPQSxDQUFDLDZGQUFtQjtBQUNsRCxTQUFTRixtQkFBbUJHLGlCQUFpQixFQUFFQyxpQkFBaUI7SUFDNUQsTUFBTSxDQUFDQyxTQUFTQyxlQUFlLEdBQUdGO0lBQ2xDLDJDQUEyQztJQUMzQyxNQUFNLENBQUNHLGdCQUFnQkMsaUJBQWlCLEdBQUdMO0lBQzNDLHlEQUF5RDtJQUN6RCxJQUFJLENBQUMsQ0FBQyxHQUFHRixlQUFlUSxZQUFZLEVBQUVGLGdCQUFnQkYsVUFBVTtRQUM1RCxrR0FBa0c7UUFDbEcsSUFBSUssTUFBTUMsT0FBTyxDQUFDSixpQkFBaUI7WUFDL0IsT0FBTztRQUNYO1FBQ0Esc0VBQXNFO1FBQ3RFLE9BQU87SUFDWDtJQUNBLE1BQU1LLGNBQWNULGtCQUFrQlUsTUFBTSxJQUFJO0lBQ2hELElBQUlELGFBQWE7UUFDYixPQUFPO0lBQ1g7SUFDQSxPQUFPWixtQkFBbUJHLGtCQUFrQlcsS0FBSyxDQUFDLElBQUlSLGNBQWMsQ0FBQ0UsaUJBQWlCO0FBQzFGO0FBRUEsSUFBSSxDQUFDLE9BQU9aLFFBQVFtQixPQUFPLEtBQUssY0FBZSxPQUFPbkIsUUFBUW1CLE9BQU8sS0FBSyxZQUFZbkIsUUFBUW1CLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT25CLFFBQVFtQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRbUIsT0FBTyxFQUFFLGNBQWM7UUFBRWxCLE9BQU87SUFBSztJQUNuRUgsT0FBT3VCLE1BQU0sQ0FBQ3JCLFFBQVFtQixPQUFPLEVBQUVuQjtJQUMvQnNCLE9BQU90QixPQUFPLEdBQUdBLFFBQVFtQixPQUFPO0FBQ2xDLEVBRUEsZ0RBQWdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvc2hvdWxkLWhhcmQtbmF2aWdhdGUuanM/NjYzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNob3VsZEhhcmROYXZpZ2F0ZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2hvdWxkSGFyZE5hdmlnYXRlO1xuICAgIH1cbn0pO1xuY29uc3QgX21hdGNoc2VnbWVudHMgPSByZXF1aXJlKFwiLi4vbWF0Y2gtc2VnbWVudHNcIik7XG5mdW5jdGlvbiBzaG91bGRIYXJkTmF2aWdhdGUoZmxpZ2h0U2VnbWVudFBhdGgsIGZsaWdodFJvdXRlclN0YXRlKSB7XG4gICAgY29uc3QgW3NlZ21lbnQsIHBhcmFsbGVsUm91dGVzXSA9IGZsaWdodFJvdXRlclN0YXRlO1xuICAgIC8vIFRPRE8tQVBQOiBDaGVjayBpZiBgYXNgIGNhbiBiZSByZXBsYWNlZC5cbiAgICBjb25zdCBbY3VycmVudFNlZ21lbnQsIHBhcmFsbGVsUm91dGVLZXldID0gZmxpZ2h0U2VnbWVudFBhdGg7XG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudCBzZWdtZW50IG1hdGNoZXMgdGhlIGV4aXN0aW5nIHNlZ21lbnQuXG4gICAgaWYgKCEoMCwgX21hdGNoc2VnbWVudHMubWF0Y2hTZWdtZW50KShjdXJyZW50U2VnbWVudCwgc2VnbWVudCkpIHtcbiAgICAgICAgLy8gSWYgZHluYW1pYyBwYXJhbWV0ZXIgaW4gdHJlZSBkb2Vzbid0IG1hdGNoIHVwIHdpdGggc2VnbWVudCBwYXRoIGEgaGFyZCBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZC5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFNlZ21lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgZXhpc3Rpbmcgc2VnbWVudCBkaWQgbm90IG1hdGNoIHNvZnQgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGFzdFNlZ21lbnQgPSBmbGlnaHRTZWdtZW50UGF0aC5sZW5ndGggPD0gMjtcbiAgICBpZiAobGFzdFNlZ21lbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc2hvdWxkSGFyZE5hdmlnYXRlKGZsaWdodFNlZ21lbnRQYXRoLnNsaWNlKDIpLCBwYXJhbGxlbFJvdXRlc1twYXJhbGxlbFJvdXRlS2V5XSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNob3VsZC1oYXJkLW5hdmlnYXRlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJzaG91bGRIYXJkTmF2aWdhdGUiLCJfbWF0Y2hzZWdtZW50cyIsInJlcXVpcmUiLCJmbGlnaHRTZWdtZW50UGF0aCIsImZsaWdodFJvdXRlclN0YXRlIiwic2VnbWVudCIsInBhcmFsbGVsUm91dGVzIiwiY3VycmVudFNlZ21lbnQiLCJwYXJhbGxlbFJvdXRlS2V5IiwibWF0Y2hTZWdtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwibGFzdFNlZ21lbnQiLCJsZW5ndGgiLCJzbGljZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/searchparams-bailout-proxy.js": +/*!********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/searchparams-bailout-proxy.js ***! + \********************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createSearchParamsBailoutProxy\", ({\n enumerable: true,\n get: function() {\n return createSearchParamsBailoutProxy;\n }\n}));\nconst _staticgenerationbailout = __webpack_require__(/*! ./static-generation-bailout */ \"(ssr)/./node_modules/next/dist/client/components/static-generation-bailout.js\");\nfunction createSearchParamsBailoutProxy() {\n return new Proxy({}, {\n get (_target, prop) {\n // React adds some properties on the object when serializing for client components\n if (typeof prop === \"string\") {\n (0, _staticgenerationbailout.staticGenerationBailout)(\"searchParams.\" + prop);\n }\n }\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=searchparams-bailout-proxy.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3NlYXJjaHBhcmFtcy1iYWlsb3V0LXByb3h5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxrRUFBaUU7SUFDN0RJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGtIQUE2QjtBQUN0RSxTQUFTRjtJQUNMLE9BQU8sSUFBSUcsTUFBTSxDQUFDLEdBQUc7UUFDakJKLEtBQUtLLE9BQU8sRUFBRUMsSUFBSTtZQUNkLGtGQUFrRjtZQUNsRixJQUFJLE9BQU9BLFNBQVMsVUFBVTtnQkFDekIsSUFBR0oseUJBQXlCSyx1QkFBdUIsRUFBRSxrQkFBa0JEO1lBQzVFO1FBQ0o7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9ULFFBQVFXLE9BQU8sS0FBSyxjQUFlLE9BQU9YLFFBQVFXLE9BQU8sS0FBSyxZQUFZWCxRQUFRVyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9YLFFBQVFXLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktkLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUVcsT0FBTyxFQUFFLGNBQWM7UUFBRVYsT0FBTztJQUFLO0lBQ25FSCxPQUFPZSxNQUFNLENBQUNiLFFBQVFXLE9BQU8sRUFBRVg7SUFDL0JjLE9BQU9kLE9BQU8sR0FBR0EsUUFBUVcsT0FBTztBQUNsQyxFQUVBLHNEQUFzRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3NlYXJjaHBhcmFtcy1iYWlsb3V0LXByb3h5LmpzP2I2ZGUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWFyY2hQYXJhbXNCYWlsb3V0UHJveHlcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNlYXJjaFBhcmFtc0JhaWxvdXRQcm94eTtcbiAgICB9XG59KTtcbmNvbnN0IF9zdGF0aWNnZW5lcmF0aW9uYmFpbG91dCA9IHJlcXVpcmUoXCIuL3N0YXRpYy1nZW5lcmF0aW9uLWJhaWxvdXRcIik7XG5mdW5jdGlvbiBjcmVhdGVTZWFyY2hQYXJhbXNCYWlsb3V0UHJveHkoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm94eSh7fSwge1xuICAgICAgICBnZXQgKF90YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIC8vIFJlYWN0IGFkZHMgc29tZSBwcm9wZXJ0aWVzIG9uIHRoZSBvYmplY3Qgd2hlbiBzZXJpYWxpemluZyBmb3IgY2xpZW50IGNvbXBvbmVudHNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICgwLCBfc3RhdGljZ2VuZXJhdGlvbmJhaWxvdXQuc3RhdGljR2VuZXJhdGlvbkJhaWxvdXQpKFwic2VhcmNoUGFyYW1zLlwiICsgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VhcmNocGFyYW1zLWJhaWxvdXQtcHJveHkuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImNyZWF0ZVNlYXJjaFBhcmFtc0JhaWxvdXRQcm94eSIsIl9zdGF0aWNnZW5lcmF0aW9uYmFpbG91dCIsInJlcXVpcmUiLCJQcm94eSIsIl90YXJnZXQiLCJwcm9wIiwic3RhdGljR2VuZXJhdGlvbkJhaWxvdXQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/searchparams-bailout-proxy.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/static-generation-bailout.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/static-generation-bailout.js ***! + \*******************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n isStaticGenBailoutError: function() {\n return isStaticGenBailoutError;\n },\n staticGenerationBailout: function() {\n return staticGenerationBailout;\n }\n});\nconst _hooksservercontext = __webpack_require__(/*! ./hooks-server-context */ \"(ssr)/./node_modules/next/dist/client/components/hooks-server-context.js\");\nconst _staticgenerationasyncstorageexternal = __webpack_require__(/*! ./static-generation-async-storage.external */ \"./static-generation-async-storage.external\");\nconst NEXT_STATIC_GEN_BAILOUT = \"NEXT_STATIC_GEN_BAILOUT\";\nclass StaticGenBailoutError extends Error {\n constructor(...args){\n super(...args);\n this.code = NEXT_STATIC_GEN_BAILOUT;\n }\n}\nfunction isStaticGenBailoutError(error) {\n if (typeof error !== \"object\" || error === null || !(\"code\" in error)) {\n return false;\n }\n return error.code === NEXT_STATIC_GEN_BAILOUT;\n}\nfunction formatErrorMessage(reason, opts) {\n const { dynamic, link } = opts || {};\n const suffix = link ? \" See more info here: \" + link : \"\";\n return \"Page\" + (dynamic ? ' with `dynamic = \"' + dynamic + '\"`' : \"\") + \" couldn't be rendered statically because it used `\" + reason + \"`.\" + suffix;\n}\nconst staticGenerationBailout = (reason, param)=>{\n let { dynamic, link } = param === void 0 ? {} : param;\n const staticGenerationStore = _staticgenerationasyncstorageexternal.staticGenerationAsyncStorage.getStore();\n if (!staticGenerationStore) return false;\n if (staticGenerationStore.forceStatic) {\n return true;\n }\n if (staticGenerationStore.dynamicShouldError) {\n throw new StaticGenBailoutError(formatErrorMessage(reason, {\n link,\n dynamic: dynamic != null ? dynamic : \"error\"\n }));\n }\n const message = formatErrorMessage(reason, {\n dynamic,\n // this error should be caught by Next to bail out of static generation\n // in case it's uncaught, this link provides some additional context as to why\n link: \"https://nextjs.org/docs/messages/dynamic-server-error\"\n });\n // If postpone is available, we should postpone the render.\n staticGenerationStore.postpone == null ? void 0 : staticGenerationStore.postpone.call(staticGenerationStore, reason);\n // As this is a bailout, we don't want to revalidate, so set the revalidate\n // to 0.\n staticGenerationStore.revalidate = 0;\n if (staticGenerationStore.isStaticGeneration) {\n const err = new _hooksservercontext.DynamicServerError(message);\n staticGenerationStore.dynamicUsageDescription = reason;\n staticGenerationStore.dynamicUsageStack = err.stack;\n throw err;\n }\n return false;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=static-generation-bailout.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3N0YXRpYy1nZW5lcmF0aW9uLWJhaWxvdXQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxzQkFBc0JDLG1CQUFPQSxDQUFDLHdHQUF3QjtBQUM1RCxNQUFNQyx3Q0FBd0NELG1CQUFPQSxDQUFDLDhGQUE0QztBQUNsRyxNQUFNRSwwQkFBMEI7QUFDaEMsTUFBTUMsOEJBQThCQztJQUNoQ0MsWUFBWSxHQUFHQyxJQUFJLENBQUM7UUFDaEIsS0FBSyxJQUFJQTtRQUNULElBQUksQ0FBQ0MsSUFBSSxHQUFHTDtJQUNoQjtBQUNKO0FBQ0EsU0FBU1gsd0JBQXdCaUIsS0FBSztJQUNsQyxJQUFJLE9BQU9BLFVBQVUsWUFBWUEsVUFBVSxRQUFRLENBQUUsV0FBVUEsS0FBSSxHQUFJO1FBQ25FLE9BQU87SUFDWDtJQUNBLE9BQU9BLE1BQU1ELElBQUksS0FBS0w7QUFDMUI7QUFDQSxTQUFTTyxtQkFBbUJDLE1BQU0sRUFBRUMsSUFBSTtJQUNwQyxNQUFNLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFLEdBQUdGLFFBQVEsQ0FBQztJQUNuQyxNQUFNRyxTQUFTRCxPQUFPLDBCQUEwQkEsT0FBTztJQUN2RCxPQUFPLFNBQVVELENBQUFBLFVBQVUsdUJBQXVCQSxVQUFVLE9BQU8sRUFBQyxJQUFLLHVEQUF1REYsU0FBUyxPQUFPSTtBQUNwSjtBQUNBLE1BQU10QiwwQkFBMEIsQ0FBQ2tCLFFBQVFLO0lBQ3JDLElBQUksRUFBRUgsT0FBTyxFQUFFQyxJQUFJLEVBQUUsR0FBR0UsVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJQTtJQUNoRCxNQUFNQyx3QkFBd0JmLHNDQUFzQ2dCLDRCQUE0QixDQUFDQyxRQUFRO0lBQ3pHLElBQUksQ0FBQ0YsdUJBQXVCLE9BQU87SUFDbkMsSUFBSUEsc0JBQXNCRyxXQUFXLEVBQUU7UUFDbkMsT0FBTztJQUNYO0lBQ0EsSUFBSUgsc0JBQXNCSSxrQkFBa0IsRUFBRTtRQUMxQyxNQUFNLElBQUlqQixzQkFBc0JNLG1CQUFtQkMsUUFBUTtZQUN2REc7WUFDQUQsU0FBU0EsV0FBVyxPQUFPQSxVQUFVO1FBQ3pDO0lBQ0o7SUFDQSxNQUFNUyxVQUFVWixtQkFBbUJDLFFBQVE7UUFDdkNFO1FBQ0EsdUVBQXVFO1FBQ3ZFLDhFQUE4RTtRQUM5RUMsTUFBTTtJQUNWO0lBQ0EsMkRBQTJEO0lBQzNERyxzQkFBc0JNLFFBQVEsSUFBSSxPQUFPLEtBQUssSUFBSU4sc0JBQXNCTSxRQUFRLENBQUNDLElBQUksQ0FBQ1AsdUJBQXVCTjtJQUM3RywyRUFBMkU7SUFDM0UsUUFBUTtJQUNSTSxzQkFBc0JRLFVBQVUsR0FBRztJQUNuQyxJQUFJUixzQkFBc0JTLGtCQUFrQixFQUFFO1FBQzFDLE1BQU1DLE1BQU0sSUFBSTNCLG9CQUFvQjRCLGtCQUFrQixDQUFDTjtRQUN2REwsc0JBQXNCWSx1QkFBdUIsR0FBR2xCO1FBQ2hETSxzQkFBc0JhLGlCQUFpQixHQUFHSCxJQUFJSSxLQUFLO1FBQ25ELE1BQU1KO0lBQ1Y7SUFDQSxPQUFPO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT3RDLFFBQVEyQyxPQUFPLEtBQUssY0FBZSxPQUFPM0MsUUFBUTJDLE9BQU8sS0FBSyxZQUFZM0MsUUFBUTJDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzNDLFFBQVEyQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLOUMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMkMsT0FBTyxFQUFFLGNBQWM7UUFBRTFDLE9BQU87SUFBSztJQUNuRUgsT0FBTytDLE1BQU0sQ0FBQzdDLFFBQVEyQyxPQUFPLEVBQUUzQztJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRMkMsT0FBTztBQUNsQyxFQUVBLHFEQUFxRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3N0YXRpYy1nZW5lcmF0aW9uLWJhaWxvdXQuanM/MDQ2YyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGlzU3RhdGljR2VuQmFpbG91dEVycm9yOiBudWxsLFxuICAgIHN0YXRpY0dlbmVyYXRpb25CYWlsb3V0OiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGlzU3RhdGljR2VuQmFpbG91dEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RhdGljR2VuQmFpbG91dEVycm9yO1xuICAgIH0sXG4gICAgc3RhdGljR2VuZXJhdGlvbkJhaWxvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3RhdGljR2VuZXJhdGlvbkJhaWxvdXQ7XG4gICAgfVxufSk7XG5jb25zdCBfaG9va3NzZXJ2ZXJjb250ZXh0ID0gcmVxdWlyZShcIi4vaG9va3Mtc2VydmVyLWNvbnRleHRcIik7XG5jb25zdCBfc3RhdGljZ2VuZXJhdGlvbmFzeW5jc3RvcmFnZWV4dGVybmFsID0gcmVxdWlyZShcIi4vc3RhdGljLWdlbmVyYXRpb24tYXN5bmMtc3RvcmFnZS5leHRlcm5hbFwiKTtcbmNvbnN0IE5FWFRfU1RBVElDX0dFTl9CQUlMT1VUID0gXCJORVhUX1NUQVRJQ19HRU5fQkFJTE9VVFwiO1xuY2xhc3MgU3RhdGljR2VuQmFpbG91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy5jb2RlID0gTkVYVF9TVEFUSUNfR0VOX0JBSUxPVVQ7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNTdGF0aWNHZW5CYWlsb3V0RXJyb3IoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yICE9PSBcIm9iamVjdFwiIHx8IGVycm9yID09PSBudWxsIHx8ICEoXCJjb2RlXCIgaW4gZXJyb3IpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yLmNvZGUgPT09IE5FWFRfU1RBVElDX0dFTl9CQUlMT1VUO1xufVxuZnVuY3Rpb24gZm9ybWF0RXJyb3JNZXNzYWdlKHJlYXNvbiwgb3B0cykge1xuICAgIGNvbnN0IHsgZHluYW1pYywgbGluayB9ID0gb3B0cyB8fCB7fTtcbiAgICBjb25zdCBzdWZmaXggPSBsaW5rID8gXCIgU2VlIG1vcmUgaW5mbyBoZXJlOiBcIiArIGxpbmsgOiBcIlwiO1xuICAgIHJldHVybiBcIlBhZ2VcIiArIChkeW5hbWljID8gJyB3aXRoIGBkeW5hbWljID0gXCInICsgZHluYW1pYyArICdcImAnIDogXCJcIikgKyBcIiBjb3VsZG4ndCBiZSByZW5kZXJlZCBzdGF0aWNhbGx5IGJlY2F1c2UgaXQgdXNlZCBgXCIgKyByZWFzb24gKyBcImAuXCIgKyBzdWZmaXg7XG59XG5jb25zdCBzdGF0aWNHZW5lcmF0aW9uQmFpbG91dCA9IChyZWFzb24sIHBhcmFtKT0+e1xuICAgIGxldCB7IGR5bmFtaWMsIGxpbmsgfSA9IHBhcmFtID09PSB2b2lkIDAgPyB7fSA6IHBhcmFtO1xuICAgIGNvbnN0IHN0YXRpY0dlbmVyYXRpb25TdG9yZSA9IF9zdGF0aWNnZW5lcmF0aW9uYXN5bmNzdG9yYWdlZXh0ZXJuYWwuc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZS5nZXRTdG9yZSgpO1xuICAgIGlmICghc3RhdGljR2VuZXJhdGlvblN0b3JlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHN0YXRpY0dlbmVyYXRpb25TdG9yZS5mb3JjZVN0YXRpYykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHN0YXRpY0dlbmVyYXRpb25TdG9yZS5keW5hbWljU2hvdWxkRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN0YXRpY0dlbkJhaWxvdXRFcnJvcihmb3JtYXRFcnJvck1lc3NhZ2UocmVhc29uLCB7XG4gICAgICAgICAgICBsaW5rLFxuICAgICAgICAgICAgZHluYW1pYzogZHluYW1pYyAhPSBudWxsID8gZHluYW1pYyA6IFwiZXJyb3JcIlxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UocmVhc29uLCB7XG4gICAgICAgIGR5bmFtaWMsXG4gICAgICAgIC8vIHRoaXMgZXJyb3Igc2hvdWxkIGJlIGNhdWdodCBieSBOZXh0IHRvIGJhaWwgb3V0IG9mIHN0YXRpYyBnZW5lcmF0aW9uXG4gICAgICAgIC8vIGluIGNhc2UgaXQncyB1bmNhdWdodCwgdGhpcyBsaW5rIHByb3ZpZGVzIHNvbWUgYWRkaXRpb25hbCBjb250ZXh0IGFzIHRvIHdoeVxuICAgICAgICBsaW5rOiBcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2R5bmFtaWMtc2VydmVyLWVycm9yXCJcbiAgICB9KTtcbiAgICAvLyBJZiBwb3N0cG9uZSBpcyBhdmFpbGFibGUsIHdlIHNob3VsZCBwb3N0cG9uZSB0aGUgcmVuZGVyLlxuICAgIHN0YXRpY0dlbmVyYXRpb25TdG9yZS5wb3N0cG9uZSA9PSBudWxsID8gdm9pZCAwIDogc3RhdGljR2VuZXJhdGlvblN0b3JlLnBvc3Rwb25lLmNhbGwoc3RhdGljR2VuZXJhdGlvblN0b3JlLCByZWFzb24pO1xuICAgIC8vIEFzIHRoaXMgaXMgYSBiYWlsb3V0LCB3ZSBkb24ndCB3YW50IHRvIHJldmFsaWRhdGUsIHNvIHNldCB0aGUgcmV2YWxpZGF0ZVxuICAgIC8vIHRvIDAuXG4gICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLnJldmFsaWRhdGUgPSAwO1xuICAgIGlmIChzdGF0aWNHZW5lcmF0aW9uU3RvcmUuaXNTdGF0aWNHZW5lcmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBfaG9va3NzZXJ2ZXJjb250ZXh0LkR5bmFtaWNTZXJ2ZXJFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLmR5bmFtaWNVc2FnZURlc2NyaXB0aW9uID0gcmVhc29uO1xuICAgICAgICBzdGF0aWNHZW5lcmF0aW9uU3RvcmUuZHluYW1pY1VzYWdlU3RhY2sgPSBlcnIuc3RhY2s7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhdGljLWdlbmVyYXRpb24tYmFpbG91dC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJpc1N0YXRpY0dlbkJhaWxvdXRFcnJvciIsInN0YXRpY0dlbmVyYXRpb25CYWlsb3V0IiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2hvb2tzc2VydmVyY29udGV4dCIsInJlcXVpcmUiLCJfc3RhdGljZ2VuZXJhdGlvbmFzeW5jc3RvcmFnZWV4dGVybmFsIiwiTkVYVF9TVEFUSUNfR0VOX0JBSUxPVVQiLCJTdGF0aWNHZW5CYWlsb3V0RXJyb3IiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImNvZGUiLCJlcnJvciIsImZvcm1hdEVycm9yTWVzc2FnZSIsInJlYXNvbiIsIm9wdHMiLCJkeW5hbWljIiwibGluayIsInN1ZmZpeCIsInBhcmFtIiwic3RhdGljR2VuZXJhdGlvblN0b3JlIiwic3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZSIsImdldFN0b3JlIiwiZm9yY2VTdGF0aWMiLCJkeW5hbWljU2hvdWxkRXJyb3IiLCJtZXNzYWdlIiwicG9zdHBvbmUiLCJjYWxsIiwicmV2YWxpZGF0ZSIsImlzU3RhdGljR2VuZXJhdGlvbiIsImVyciIsIkR5bmFtaWNTZXJ2ZXJFcnJvciIsImR5bmFtaWNVc2FnZURlc2NyaXB0aW9uIiwiZHluYW1pY1VzYWdlU3RhY2siLCJzdGFjayIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/static-generation-bailout.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js ***! + \*****************************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return StaticGenerationSearchParamsBailoutProvider;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _searchparamsbailoutproxy = __webpack_require__(/*! ./searchparams-bailout-proxy */ \"(ssr)/./node_modules/next/dist/client/components/searchparams-bailout-proxy.js\");\nfunction StaticGenerationSearchParamsBailoutProvider(param) {\n let { Component, propsForComponent, isStaticGeneration } = param;\n if (isStaticGeneration) {\n const searchParams = (0, _searchparamsbailoutproxy.createSearchParamsBailoutProxy)();\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {\n searchParams: searchParams,\n ...propsForComponent\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {\n ...propsForComponent\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=static-generation-searchparams-bailout-provider.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3N0YXRpYy1nZW5lcmF0aW9uLXNlYXJjaHBhcmFtcy1iYWlsb3V0LXByb3ZpZGVyLmpzIiwibWFwcGluZ3MiOiJxREFFYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxrSEFBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDdkUsTUFBTUksNEJBQTRCSixtQkFBT0EsQ0FBQyxvSEFBOEI7QUFDeEUsU0FBU0YsNENBQTRDTyxLQUFLO0lBQ3RELElBQUksRUFBRUMsU0FBUyxFQUFFQyxpQkFBaUIsRUFBRUMsa0JBQWtCLEVBQUUsR0FBR0g7SUFDM0QsSUFBSUcsb0JBQW9CO1FBQ3BCLE1BQU1DLGVBQWUsQ0FBQyxHQUFHTCwwQkFBMEJNLDhCQUE4QjtRQUNqRixPQUFxQixXQUFILEdBQUksSUFBR1QsWUFBWVUsR0FBRyxFQUFFTCxXQUFXO1lBQ2pERyxjQUFjQTtZQUNkLEdBQUdGLGlCQUFpQjtRQUN4QjtJQUNKO0lBQ0EsT0FBcUIsV0FBSCxHQUFJLElBQUdOLFlBQVlVLEdBQUcsRUFBRUwsV0FBVztRQUNqRCxHQUFHQyxpQkFBaUI7SUFDeEI7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPYixRQUFRa0IsT0FBTyxLQUFLLGNBQWUsT0FBT2xCLFFBQVFrQixPQUFPLEtBQUssWUFBWWxCLFFBQVFrQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9sQixRQUFRa0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3JCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWtCLE9BQU8sRUFBRSxjQUFjO1FBQUVqQixPQUFPO0lBQUs7SUFDbkVILE9BQU9zQixNQUFNLENBQUNwQixRQUFRa0IsT0FBTyxFQUFFbEI7SUFDL0JxQixPQUFPckIsT0FBTyxHQUFHQSxRQUFRa0IsT0FBTztBQUNsQyxFQUVBLDJFQUEyRSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3N0YXRpYy1nZW5lcmF0aW9uLXNlYXJjaHBhcmFtcy1iYWlsb3V0LXByb3ZpZGVyLmpzPzk3MWEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU3RhdGljR2VuZXJhdGlvblNlYXJjaFBhcmFtc0JhaWxvdXRQcm92aWRlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9zZWFyY2hwYXJhbXNiYWlsb3V0cHJveHkgPSByZXF1aXJlKFwiLi9zZWFyY2hwYXJhbXMtYmFpbG91dC1wcm94eVwiKTtcbmZ1bmN0aW9uIFN0YXRpY0dlbmVyYXRpb25TZWFyY2hQYXJhbXNCYWlsb3V0UHJvdmlkZXIocGFyYW0pIHtcbiAgICBsZXQgeyBDb21wb25lbnQsIHByb3BzRm9yQ29tcG9uZW50LCBpc1N0YXRpY0dlbmVyYXRpb24gfSA9IHBhcmFtO1xuICAgIGlmIChpc1N0YXRpY0dlbmVyYXRpb24pIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gKDAsIF9zZWFyY2hwYXJhbXNiYWlsb3V0cHJveHkuY3JlYXRlU2VhcmNoUGFyYW1zQmFpbG91dFByb3h5KSgpO1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHNlYXJjaFBhcmFtczogc2VhcmNoUGFyYW1zLFxuICAgICAgICAgICAgLi4ucHJvcHNGb3JDb21wb25lbnRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKENvbXBvbmVudCwge1xuICAgICAgICAuLi5wcm9wc0ZvckNvbXBvbmVudFxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGF0aWMtZ2VuZXJhdGlvbi1zZWFyY2hwYXJhbXMtYmFpbG91dC1wcm92aWRlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiU3RhdGljR2VuZXJhdGlvblNlYXJjaFBhcmFtc0JhaWxvdXRQcm92aWRlciIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfc2VhcmNocGFyYW1zYmFpbG91dHByb3h5IiwicGFyYW0iLCJDb21wb25lbnQiLCJwcm9wc0ZvckNvbXBvbmVudCIsImlzU3RhdGljR2VuZXJhdGlvbiIsInNlYXJjaFBhcmFtcyIsImNyZWF0ZVNlYXJjaFBhcmFtc0JhaWxvdXRQcm94eSIsImpzeCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/components/use-reducer-with-devtools.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/use-reducer-with-devtools.js ***! + \*******************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n useUnwrapState: function() {\n return useUnwrapState;\n },\n useReducerWithReduxDevtools: function() {\n return useReducerWithReduxDevtools;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer/router-reducer-types */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _actionqueue = __webpack_require__(/*! ../../shared/lib/router/action-queue */ \"(ssr)/./node_modules/next/dist/shared/lib/router/action-queue.js\");\nfunction normalizeRouterState(val) {\n if (val instanceof Map) {\n const obj = {};\n for (const [key, value] of val.entries()){\n if (typeof value === \"function\") {\n obj[key] = \"fn()\";\n continue;\n }\n if (typeof value === \"object\" && value !== null) {\n if (value.$$typeof) {\n obj[key] = value.$$typeof.toString();\n continue;\n }\n if (value._bundlerConfig) {\n obj[key] = \"FlightData\";\n continue;\n }\n }\n obj[key] = normalizeRouterState(value);\n }\n return obj;\n }\n if (typeof val === \"object\" && val !== null) {\n const obj = {};\n for(const key in val){\n const value = val[key];\n if (typeof value === \"function\") {\n obj[key] = \"fn()\";\n continue;\n }\n if (typeof value === \"object\" && value !== null) {\n if (value.$$typeof) {\n obj[key] = value.$$typeof.toString();\n continue;\n }\n if (value.hasOwnProperty(\"_bundlerConfig\")) {\n obj[key] = \"FlightData\";\n continue;\n }\n }\n obj[key] = normalizeRouterState(value);\n }\n return obj;\n }\n if (Array.isArray(val)) {\n return val.map(normalizeRouterState);\n }\n return val;\n}\nfunction useUnwrapState(state) {\n // reducer actions can be async, so sometimes we need to suspend until the state is resolved\n if ((0, _routerreducertypes.isThenable)(state)) {\n const result = (0, _react.use)(state);\n return result;\n }\n return state;\n}\nfunction useReducerWithReduxDevtoolsNoop(initialState) {\n return [\n initialState,\n ()=>{},\n ()=>{}\n ];\n}\nfunction useReducerWithReduxDevtoolsImpl(initialState) {\n const [state, setState] = _react.default.useState(initialState);\n const actionQueue = (0, _react.useContext)(_actionqueue.ActionQueueContext);\n if (!actionQueue) {\n throw new Error(\"Invariant: Missing ActionQueueContext\");\n }\n const devtoolsConnectionRef = (0, _react.useRef)();\n const enabledRef = (0, _react.useRef)();\n (0, _react.useEffect)(()=>{\n if (devtoolsConnectionRef.current || enabledRef.current === false) {\n return;\n }\n if (enabledRef.current === undefined && typeof window.__REDUX_DEVTOOLS_EXTENSION__ === \"undefined\") {\n enabledRef.current = false;\n return;\n }\n devtoolsConnectionRef.current = window.__REDUX_DEVTOOLS_EXTENSION__.connect({\n instanceId: 8000,\n name: \"next-router\"\n });\n if (devtoolsConnectionRef.current) {\n devtoolsConnectionRef.current.init(normalizeRouterState(initialState));\n if (actionQueue) {\n actionQueue.devToolsInstance = devtoolsConnectionRef.current;\n }\n }\n return ()=>{\n devtoolsConnectionRef.current = undefined;\n };\n }, [\n initialState,\n actionQueue\n ]);\n const dispatch = (0, _react.useCallback)((action)=>{\n if (!actionQueue.state) {\n // we lazy initialize the mutable action queue state since the data needed\n // to generate the state is not available when the actionQueue context is created\n actionQueue.state = initialState;\n }\n actionQueue.dispatch(action, setState);\n }, [\n actionQueue,\n initialState\n ]);\n // Sync is called after a state update in the HistoryUpdater,\n // for debugging purposes. Since the reducer state may be a Promise,\n // we let the app router use() it and sync on the resolved value if\n // something changed.\n // Using the `state` here would be referentially unstable and cause\n // undesirable re-renders and history updates.\n const sync = (0, _react.useCallback)((resolvedState)=>{\n if (devtoolsConnectionRef.current) {\n devtoolsConnectionRef.current.send({\n type: \"RENDER_SYNC\"\n }, normalizeRouterState(resolvedState));\n }\n }, []);\n return [\n state,\n dispatch,\n sync\n ];\n}\nconst useReducerWithReduxDevtools = false ? 0 : useReducerWithReduxDevtoolsNoop;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-reducer-with-devtools.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3VzZS1yZWR1Y2VyLXdpdGgtZGV2dG9vbHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7SUFDQUMsNkJBQTZCO1FBQ3pCLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLDRCQUE0QkMsbUJBQU9BLENBQUMsb0hBQTBDO0FBQ3BGLE1BQU1DLFNBQVMsV0FBVyxHQUFHRiwwQkFBMEJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTUcsc0JBQXNCSCxtQkFBT0EsQ0FBQyxzSUFBdUM7QUFDM0UsTUFBTUksZUFBZUosbUJBQU9BLENBQUMsOEdBQXNDO0FBQ25FLFNBQVNLLHFCQUFxQkMsR0FBRztJQUM3QixJQUFJQSxlQUFlQyxLQUFLO1FBQ3BCLE1BQU1DLE1BQU0sQ0FBQztRQUNiLEtBQUssTUFBTSxDQUFDQyxLQUFLcEIsTUFBTSxJQUFJaUIsSUFBSUksT0FBTyxHQUFHO1lBQ3JDLElBQUksT0FBT3JCLFVBQVUsWUFBWTtnQkFDN0JtQixHQUFHLENBQUNDLElBQUksR0FBRztnQkFDWDtZQUNKO1lBQ0EsSUFBSSxPQUFPcEIsVUFBVSxZQUFZQSxVQUFVLE1BQU07Z0JBQzdDLElBQUlBLE1BQU1zQixRQUFRLEVBQUU7b0JBQ2hCSCxHQUFHLENBQUNDLElBQUksR0FBR3BCLE1BQU1zQixRQUFRLENBQUNDLFFBQVE7b0JBQ2xDO2dCQUNKO2dCQUNBLElBQUl2QixNQUFNd0IsY0FBYyxFQUFFO29CQUN0QkwsR0FBRyxDQUFDQyxJQUFJLEdBQUc7b0JBQ1g7Z0JBQ0o7WUFDSjtZQUNBRCxHQUFHLENBQUNDLElBQUksR0FBR0oscUJBQXFCaEI7UUFDcEM7UUFDQSxPQUFPbUI7SUFDWDtJQUNBLElBQUksT0FBT0YsUUFBUSxZQUFZQSxRQUFRLE1BQU07UUFDekMsTUFBTUUsTUFBTSxDQUFDO1FBQ2IsSUFBSSxNQUFNQyxPQUFPSCxJQUFJO1lBQ2pCLE1BQU1qQixRQUFRaUIsR0FBRyxDQUFDRyxJQUFJO1lBQ3RCLElBQUksT0FBT3BCLFVBQVUsWUFBWTtnQkFDN0JtQixHQUFHLENBQUNDLElBQUksR0FBRztnQkFDWDtZQUNKO1lBQ0EsSUFBSSxPQUFPcEIsVUFBVSxZQUFZQSxVQUFVLE1BQU07Z0JBQzdDLElBQUlBLE1BQU1zQixRQUFRLEVBQUU7b0JBQ2hCSCxHQUFHLENBQUNDLElBQUksR0FBR3BCLE1BQU1zQixRQUFRLENBQUNDLFFBQVE7b0JBQ2xDO2dCQUNKO2dCQUNBLElBQUl2QixNQUFNeUIsY0FBYyxDQUFDLG1CQUFtQjtvQkFDeENOLEdBQUcsQ0FBQ0MsSUFBSSxHQUFHO29CQUNYO2dCQUNKO1lBQ0o7WUFDQUQsR0FBRyxDQUFDQyxJQUFJLEdBQUdKLHFCQUFxQmhCO1FBQ3BDO1FBQ0EsT0FBT21CO0lBQ1g7SUFDQSxJQUFJTyxNQUFNQyxPQUFPLENBQUNWLE1BQU07UUFDcEIsT0FBT0EsSUFBSVcsR0FBRyxDQUFDWjtJQUNuQjtJQUNBLE9BQU9DO0FBQ1g7QUFDQSxTQUFTZixlQUFlMkIsS0FBSztJQUN6Qiw0RkFBNEY7SUFDNUYsSUFBSSxDQUFDLEdBQUdmLG9CQUFvQmdCLFVBQVUsRUFBRUQsUUFBUTtRQUM1QyxNQUFNRSxTQUFTLENBQUMsR0FBR25CLE9BQU9vQixHQUFHLEVBQUVIO1FBQy9CLE9BQU9FO0lBQ1g7SUFDQSxPQUFPRjtBQUNYO0FBQ0EsU0FBU0ksZ0NBQWdDQyxZQUFZO0lBQ2pELE9BQU87UUFDSEE7UUFDQSxLQUFLO1FBQ0wsS0FBSztLQUNSO0FBQ0w7QUFDQSxTQUFTQyxnQ0FBZ0NELFlBQVk7SUFDakQsTUFBTSxDQUFDTCxPQUFPTyxTQUFTLEdBQUd4QixPQUFPeUIsT0FBTyxDQUFDQyxRQUFRLENBQUNKO0lBQ2xELE1BQU1LLGNBQWMsQ0FBQyxHQUFHM0IsT0FBTzRCLFVBQVUsRUFBRXpCLGFBQWEwQixrQkFBa0I7SUFDMUUsSUFBSSxDQUFDRixhQUFhO1FBQ2QsTUFBTSxJQUFJRyxNQUFNO0lBQ3BCO0lBQ0EsTUFBTUMsd0JBQXdCLENBQUMsR0FBRy9CLE9BQU9nQyxNQUFNO0lBQy9DLE1BQU1DLGFBQWEsQ0FBQyxHQUFHakMsT0FBT2dDLE1BQU07SUFDbkMsSUFBR2hDLE9BQU9rQyxTQUFTLEVBQUU7UUFDbEIsSUFBSUgsc0JBQXNCSSxPQUFPLElBQUlGLFdBQVdFLE9BQU8sS0FBSyxPQUFPO1lBQy9EO1FBQ0o7UUFDQSxJQUFJRixXQUFXRSxPQUFPLEtBQUtDLGFBQWEsT0FBT0MsT0FBT0MsNEJBQTRCLEtBQUssYUFBYTtZQUNoR0wsV0FBV0UsT0FBTyxHQUFHO1lBQ3JCO1FBQ0o7UUFDQUosc0JBQXNCSSxPQUFPLEdBQUdFLE9BQU9DLDRCQUE0QixDQUFDQyxPQUFPLENBQUM7WUFDeEVDLFlBQVk7WUFDWjdDLE1BQU07UUFDVjtRQUNBLElBQUlvQyxzQkFBc0JJLE9BQU8sRUFBRTtZQUMvQkosc0JBQXNCSSxPQUFPLENBQUNNLElBQUksQ0FBQ3JDLHFCQUFxQmtCO1lBQ3hELElBQUlLLGFBQWE7Z0JBQ2JBLFlBQVllLGdCQUFnQixHQUFHWCxzQkFBc0JJLE9BQU87WUFDaEU7UUFDSjtRQUNBLE9BQU87WUFDSEosc0JBQXNCSSxPQUFPLEdBQUdDO1FBQ3BDO0lBQ0osR0FBRztRQUNDZDtRQUNBSztLQUNIO0lBQ0QsTUFBTWdCLFdBQVcsQ0FBQyxHQUFHM0MsT0FBTzRDLFdBQVcsRUFBRSxDQUFDQztRQUN0QyxJQUFJLENBQUNsQixZQUFZVixLQUFLLEVBQUU7WUFDcEIsMEVBQTBFO1lBQzFFLGlGQUFpRjtZQUNqRlUsWUFBWVYsS0FBSyxHQUFHSztRQUN4QjtRQUNBSyxZQUFZZ0IsUUFBUSxDQUFDRSxRQUFRckI7SUFDakMsR0FBRztRQUNDRztRQUNBTDtLQUNIO0lBQ0QsNkRBQTZEO0lBQzdELG9FQUFvRTtJQUNwRSxtRUFBbUU7SUFDbkUscUJBQXFCO0lBQ3JCLG1FQUFtRTtJQUNuRSw4Q0FBOEM7SUFDOUMsTUFBTXdCLE9BQU8sQ0FBQyxHQUFHOUMsT0FBTzRDLFdBQVcsRUFBRSxDQUFDRztRQUNsQyxJQUFJaEIsc0JBQXNCSSxPQUFPLEVBQUU7WUFDL0JKLHNCQUFzQkksT0FBTyxDQUFDYSxJQUFJLENBQUM7Z0JBQy9CQyxNQUFNO1lBQ1YsR0FBRzdDLHFCQUFxQjJDO1FBQzVCO0lBQ0osR0FBRyxFQUFFO0lBQ0wsT0FBTztRQUNIOUI7UUFDQTBCO1FBQ0FHO0tBQ0g7QUFDTDtBQUNBLE1BQU12RCw4QkFBOEIsTUFBNkIsR0FBR2dDLENBQStCQSxHQUFHRjtBQUV0RyxJQUFJLENBQUMsT0FBT2xDLFFBQVFzQyxPQUFPLEtBQUssY0FBZSxPQUFPdEMsUUFBUXNDLE9BQU8sS0FBSyxZQUFZdEMsUUFBUXNDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3RDLFFBQVFzQyxPQUFPLENBQUN5QixVQUFVLEtBQUssYUFBYTtJQUNyS2pFLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXNDLE9BQU8sRUFBRSxjQUFjO1FBQUVyQyxPQUFPO0lBQUs7SUFDbkVILE9BQU9rRSxNQUFNLENBQUNoRSxRQUFRc0MsT0FBTyxFQUFFdEM7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUXNDLE9BQU87QUFDbEMsRUFFQSxxREFBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy91c2UtcmVkdWNlci13aXRoLWRldnRvb2xzLmpzPzQ1MDAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICB1c2VVbndyYXBTdGF0ZTogbnVsbCxcbiAgICB1c2VSZWR1Y2VyV2l0aFJlZHV4RGV2dG9vbHM6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgdXNlVW53cmFwU3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXNlVW53cmFwU3RhdGU7XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyV2l0aFJlZHV4RGV2dG9vbHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXNlUmVkdWNlcldpdGhSZWR1eERldnRvb2xzO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9yb3V0ZXJyZWR1Y2VydHlwZXMgPSByZXF1aXJlKFwiLi9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlc1wiKTtcbmNvbnN0IF9hY3Rpb25xdWV1ZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL3JvdXRlci9hY3Rpb24tcXVldWVcIik7XG5mdW5jdGlvbiBub3JtYWxpemVSb3V0ZXJTdGF0ZSh2YWwpIHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB2YWwuZW50cmllcygpKXtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9ialtrZXldID0gXCJmbigpXCI7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWUuJCR0eXBlb2YudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5fYnVuZGxlckNvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IFwiRmxpZ2h0RGF0YVwiO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmpba2V5XSA9IG5vcm1hbGl6ZVJvdXRlclN0YXRlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiAmJiB2YWwgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIGZvcihjb25zdCBrZXkgaW4gdmFsKXtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmFsW2tleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBvYmpba2V5XSA9IFwiZm4oKVwiO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlLiQkdHlwZW9mLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoXCJfYnVuZGxlckNvbmZpZ1wiKSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IFwiRmxpZ2h0RGF0YVwiO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmpba2V5XSA9IG5vcm1hbGl6ZVJvdXRlclN0YXRlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHJldHVybiB2YWwubWFwKG5vcm1hbGl6ZVJvdXRlclN0YXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cbmZ1bmN0aW9uIHVzZVVud3JhcFN0YXRlKHN0YXRlKSB7XG4gICAgLy8gcmVkdWNlciBhY3Rpb25zIGNhbiBiZSBhc3luYywgc28gc29tZXRpbWVzIHdlIG5lZWQgdG8gc3VzcGVuZCB1bnRpbCB0aGUgc3RhdGUgaXMgcmVzb2x2ZWRcbiAgICBpZiAoKDAsIF9yb3V0ZXJyZWR1Y2VydHlwZXMuaXNUaGVuYWJsZSkoc3RhdGUpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9ICgwLCBfcmVhY3QudXNlKShzdGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZTtcbn1cbmZ1bmN0aW9uIHVzZVJlZHVjZXJXaXRoUmVkdXhEZXZ0b29sc05vb3AoaW5pdGlhbFN0YXRlKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICAoKT0+e30sXG4gICAgICAgICgpPT57fVxuICAgIF07XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyV2l0aFJlZHV4RGV2dG9vbHNJbXBsKGluaXRpYWxTdGF0ZSkge1xuICAgIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gX3JlYWN0LmRlZmF1bHQudXNlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICBjb25zdCBhY3Rpb25RdWV1ZSA9ICgwLCBfcmVhY3QudXNlQ29udGV4dCkoX2FjdGlvbnF1ZXVlLkFjdGlvblF1ZXVlQ29udGV4dCk7XG4gICAgaWYgKCFhY3Rpb25RdWV1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhcmlhbnQ6IE1pc3NpbmcgQWN0aW9uUXVldWVDb250ZXh0XCIpO1xuICAgIH1cbiAgICBjb25zdCBkZXZ0b29sc0Nvbm5lY3Rpb25SZWYgPSAoMCwgX3JlYWN0LnVzZVJlZikoKTtcbiAgICBjb25zdCBlbmFibGVkUmVmID0gKDAsIF9yZWFjdC51c2VSZWYpKCk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGlmIChkZXZ0b29sc0Nvbm5lY3Rpb25SZWYuY3VycmVudCB8fCBlbmFibGVkUmVmLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuYWJsZWRSZWYuY3VycmVudCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgZW5hYmxlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGV2dG9vbHNDb25uZWN0aW9uUmVmLmN1cnJlbnQgPSB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXy5jb25uZWN0KHtcbiAgICAgICAgICAgIGluc3RhbmNlSWQ6IDgwMDAsXG4gICAgICAgICAgICBuYW1lOiBcIm5leHQtcm91dGVyXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkZXZ0b29sc0Nvbm5lY3Rpb25SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgZGV2dG9vbHNDb25uZWN0aW9uUmVmLmN1cnJlbnQuaW5pdChub3JtYWxpemVSb3V0ZXJTdGF0ZShpbml0aWFsU3RhdGUpKTtcbiAgICAgICAgICAgIGlmIChhY3Rpb25RdWV1ZSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblF1ZXVlLmRldlRvb2xzSW5zdGFuY2UgPSBkZXZ0b29sc0Nvbm5lY3Rpb25SZWYuY3VycmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGRldnRvb2xzQ29ubmVjdGlvblJlZi5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICBhY3Rpb25RdWV1ZVxuICAgIF0pO1xuICAgIGNvbnN0IGRpc3BhdGNoID0gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKGFjdGlvbik9PntcbiAgICAgICAgaWYgKCFhY3Rpb25RdWV1ZS5zdGF0ZSkge1xuICAgICAgICAgICAgLy8gd2UgbGF6eSBpbml0aWFsaXplIHRoZSBtdXRhYmxlIGFjdGlvbiBxdWV1ZSBzdGF0ZSBzaW5jZSB0aGUgZGF0YSBuZWVkZWRcbiAgICAgICAgICAgIC8vIHRvIGdlbmVyYXRlIHRoZSBzdGF0ZSBpcyBub3QgYXZhaWxhYmxlIHdoZW4gdGhlIGFjdGlvblF1ZXVlIGNvbnRleHQgaXMgY3JlYXRlZFxuICAgICAgICAgICAgYWN0aW9uUXVldWUuc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uUXVldWUuZGlzcGF0Y2goYWN0aW9uLCBzZXRTdGF0ZSk7XG4gICAgfSwgW1xuICAgICAgICBhY3Rpb25RdWV1ZSxcbiAgICAgICAgaW5pdGlhbFN0YXRlXG4gICAgXSk7XG4gICAgLy8gU3luYyBpcyBjYWxsZWQgYWZ0ZXIgYSBzdGF0ZSB1cGRhdGUgaW4gdGhlIEhpc3RvcnlVcGRhdGVyLFxuICAgIC8vIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIFNpbmNlIHRoZSByZWR1Y2VyIHN0YXRlIG1heSBiZSBhIFByb21pc2UsXG4gICAgLy8gd2UgbGV0IHRoZSBhcHAgcm91dGVyIHVzZSgpIGl0IGFuZCBzeW5jIG9uIHRoZSByZXNvbHZlZCB2YWx1ZSBpZlxuICAgIC8vIHNvbWV0aGluZyBjaGFuZ2VkLlxuICAgIC8vIFVzaW5nIHRoZSBgc3RhdGVgIGhlcmUgd291bGQgYmUgcmVmZXJlbnRpYWxseSB1bnN0YWJsZSBhbmQgY2F1c2VcbiAgICAvLyB1bmRlc2lyYWJsZSByZS1yZW5kZXJzIGFuZCBoaXN0b3J5IHVwZGF0ZXMuXG4gICAgY29uc3Qgc3luYyA9ICgwLCBfcmVhY3QudXNlQ2FsbGJhY2spKChyZXNvbHZlZFN0YXRlKT0+e1xuICAgICAgICBpZiAoZGV2dG9vbHNDb25uZWN0aW9uUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGRldnRvb2xzQ29ubmVjdGlvblJlZi5jdXJyZW50LnNlbmQoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiUkVOREVSX1NZTkNcIlxuICAgICAgICAgICAgfSwgbm9ybWFsaXplUm91dGVyU3RhdGUocmVzb2x2ZWRTdGF0ZSkpO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBbXG4gICAgICAgIHN0YXRlLFxuICAgICAgICBkaXNwYXRjaCxcbiAgICAgICAgc3luY1xuICAgIF07XG59XG5jb25zdCB1c2VSZWR1Y2VyV2l0aFJlZHV4RGV2dG9vbHMgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gdXNlUmVkdWNlcldpdGhSZWR1eERldnRvb2xzSW1wbCA6IHVzZVJlZHVjZXJXaXRoUmVkdXhEZXZ0b29sc05vb3A7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZS1yZWR1Y2VyLXdpdGgtZGV2dG9vbHMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwidXNlVW53cmFwU3RhdGUiLCJ1c2VSZWR1Y2VyV2l0aFJlZHV4RGV2dG9vbHMiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdCIsIl8iLCJfcm91dGVycmVkdWNlcnR5cGVzIiwiX2FjdGlvbnF1ZXVlIiwibm9ybWFsaXplUm91dGVyU3RhdGUiLCJ2YWwiLCJNYXAiLCJvYmoiLCJrZXkiLCJlbnRyaWVzIiwiJCR0eXBlb2YiLCJ0b1N0cmluZyIsIl9idW5kbGVyQ29uZmlnIiwiaGFzT3duUHJvcGVydHkiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJzdGF0ZSIsImlzVGhlbmFibGUiLCJyZXN1bHQiLCJ1c2UiLCJ1c2VSZWR1Y2VyV2l0aFJlZHV4RGV2dG9vbHNOb29wIiwiaW5pdGlhbFN0YXRlIiwidXNlUmVkdWNlcldpdGhSZWR1eERldnRvb2xzSW1wbCIsInNldFN0YXRlIiwiZGVmYXVsdCIsInVzZVN0YXRlIiwiYWN0aW9uUXVldWUiLCJ1c2VDb250ZXh0IiwiQWN0aW9uUXVldWVDb250ZXh0IiwiRXJyb3IiLCJkZXZ0b29sc0Nvbm5lY3Rpb25SZWYiLCJ1c2VSZWYiLCJlbmFibGVkUmVmIiwidXNlRWZmZWN0IiwiY3VycmVudCIsInVuZGVmaW5lZCIsIndpbmRvdyIsIl9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18iLCJjb25uZWN0IiwiaW5zdGFuY2VJZCIsImluaXQiLCJkZXZUb29sc0luc3RhbmNlIiwiZGlzcGF0Y2giLCJ1c2VDYWxsYmFjayIsImFjdGlvbiIsInN5bmMiLCJyZXNvbHZlZFN0YXRlIiwic2VuZCIsInR5cGUiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/components/use-reducer-with-devtools.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js ***! + \************************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("/**\nMIT License\n\nCopyright (c) 2015-present, Facebook, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return formatWebpackMessages;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(ssr)/./node_modules/next/dist/compiled/strip-ansi/index.js\"));\n// This file is based on https://github.com/facebook/create-react-app/blob/7b1a32be6ec9f99a6c9a3c66813f3ac09c4736b9/packages/react-dev-utils/formatWebpackMessages.js\n// It's been edited to remove chalk and CRA-specific logic\nconst friendlySyntaxErrorLabel = \"Syntax error:\";\nconst WEBPACK_BREAKING_CHANGE_POLYFILLS = \"\\n\\nBREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.\";\nfunction isLikelyASyntaxError(message) {\n return (0, _stripansi.default)(message).includes(friendlySyntaxErrorLabel);\n}\nlet hadMissingSassError = false;\n// Cleans up webpack error messages.\nfunction formatMessage(message, verbose, importTraceNote) {\n // TODO: Replace this once webpack 5 is stable\n if (typeof message === \"object\" && message.message) {\n const filteredModuleTrace = message.moduleTrace && message.moduleTrace.filter((trace)=>!/next-(middleware|client-pages|route|edge-function)-loader\\.js/.test(trace.originName));\n let body = message.message;\n const breakingChangeIndex = body.indexOf(WEBPACK_BREAKING_CHANGE_POLYFILLS);\n if (breakingChangeIndex >= 0) {\n body = body.slice(0, breakingChangeIndex);\n }\n message = (message.moduleName ? (0, _stripansi.default)(message.moduleName) + \"\\n\" : \"\") + (message.file ? (0, _stripansi.default)(message.file) + \"\\n\" : \"\") + body + (message.details && verbose ? \"\\n\" + message.details : \"\") + (filteredModuleTrace && filteredModuleTrace.length ? (importTraceNote || \"\\n\\nImport trace for requested module:\") + filteredModuleTrace.map((trace)=>\"\\n\" + trace.moduleName).join(\"\") : \"\") + (message.stack && verbose ? \"\\n\" + message.stack : \"\");\n }\n let lines = message.split(\"\\n\");\n // Strip Webpack-added headers off errors/warnings\n // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n lines = lines.filter((line)=>!/Module [A-z ]+\\(from/.test(line));\n // Transform parsing error into syntax error\n // TODO: move this to our ESLint formatter?\n lines = lines.map((line)=>{\n const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n if (!parsingError) {\n return line;\n }\n const [, errorLine, errorColumn, errorMessage] = parsingError;\n return friendlySyntaxErrorLabel + \" \" + errorMessage + \" (\" + errorLine + \":\" + errorColumn + \")\";\n });\n message = lines.join(\"\\n\");\n // Smoosh syntax errors (commonly found in CSS)\n message = message.replace(/SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g, \"\" + friendlySyntaxErrorLabel + \" $3 ($1:$2)\\n\");\n // Clean up export errors\n message = message.replace(/^.*export '(.+?)' was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$2'.\");\n message = message.replace(/^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$2' does not contain a default export (imported as '$1').\");\n message = message.replace(/^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$3' (imported as '$2').\");\n lines = message.split(\"\\n\");\n // Remove leading newline\n if (lines.length > 2 && lines[1].trim() === \"\") {\n lines.splice(1, 1);\n }\n // Cleans up verbose \"module not found\" messages for files and packages.\n if (lines[1] && lines[1].indexOf(\"Module not found: \") === 0) {\n lines = [\n lines[0],\n lines[1].replace(\"Error: \", \"\").replace(\"Module not found: Cannot find file:\", \"Cannot find file:\"),\n ...lines.slice(2)\n ];\n }\n // Add helpful message for users trying to use Sass for the first time\n if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n // ./file.module.scss (<<loader info>>) => ./file.module.scss\n const firstLine = lines[0].split(\"!\");\n lines[0] = firstLine[firstLine.length - 1];\n lines[1] = \"To use Next.js' built-in Sass support, you first need to install `sass`.\\n\";\n lines[1] += \"Run `npm i sass` or `yarn add sass` inside your workspace.\\n\";\n lines[1] += \"\\nLearn more: https://nextjs.org/docs/messages/install-sass\";\n // dispose of unhelpful stack trace\n lines = lines.slice(0, 2);\n hadMissingSassError = true;\n } else if (hadMissingSassError && message.match(/(sass-loader|resolve-url-loader: CSS error)/)) {\n // dispose of unhelpful stack trace following missing sass module\n lines = [];\n }\n if (!verbose) {\n message = lines.join(\"\\n\");\n // Internal stacks are generally useless so we strip them... with the\n // exception of stacks containing `webpack:` because they're normally\n // from user code generated by Webpack. For more information see\n // https://github.com/facebook/create-react-app/pull/1050\n message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, \"\") // at ... ...:x:y\n ;\n message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, \"\") // at <anonymous>\n ;\n message = message.replace(/File was processed with these loaders:\\n(.+[\\\\/](next[\\\\/]dist[\\\\/].+|@next[\\\\/]react-refresh-utils[\\\\/]loader)\\.js\\n)*You may need an additional loader to handle the result of these loaders.\\n/g, \"\");\n lines = message.split(\"\\n\");\n }\n // Remove duplicated newlines\n lines = lines.filter((line, index, arr)=>index === 0 || line.trim() !== \"\" || line.trim() !== arr[index - 1].trim());\n // Reassemble the message\n message = lines.join(\"\\n\");\n return message.trim();\n}\nfunction formatWebpackMessages(json, verbose) {\n const formattedErrors = json.errors.map((message)=>{\n const isUnknownNextFontError = message.message.includes(\"An error occured in `next/font`.\");\n return formatMessage(message, isUnknownNextFontError || verbose);\n });\n const formattedWarnings = json.warnings.map((message)=>{\n return formatMessage(message, verbose);\n });\n // Reorder errors to put the most relevant ones first.\n let reactServerComponentsError = -1;\n for(let i = 0; i < formattedErrors.length; i++){\n const error = formattedErrors[i];\n if (error.includes(\"ReactServerComponentsError\")) {\n reactServerComponentsError = i;\n break;\n }\n }\n // Move the reactServerComponentsError to the top if it exists\n if (reactServerComponentsError !== -1) {\n const error = formattedErrors.splice(reactServerComponentsError, 1);\n formattedErrors.unshift(error[0]);\n }\n const result = {\n ...json,\n errors: formattedErrors,\n warnings: formattedWarnings\n };\n if (!verbose && result.errors.some(isLikelyASyntaxError)) {\n // If there are any syntax errors, show just them.\n result.errors = result.errors.filter(isLikelyASyntaxError);\n result.warnings = [];\n }\n return result;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=format-webpack-messages.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvZXJyb3Itb3ZlcmxheS9mb3JtYXQtd2VicGFjay1tZXNzYWdlcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxHQUFnQjtBQUNoQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsa0hBQXlDO0FBQ2xGLE1BQU1DLGFBQWEsV0FBVyxHQUFHRix5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsa0dBQStCO0FBQ25HLHFLQUFxSztBQUNySywwREFBMEQ7QUFDMUQsTUFBTUcsMkJBQTJCO0FBQ2pDLE1BQU1DLG9DQUFvQztBQUMxQyxTQUFTQyxxQkFBcUJDLE9BQU87SUFDakMsT0FBTyxDQUFDLEdBQUdMLFdBQVdNLE9BQU8sRUFBRUQsU0FBU0UsUUFBUSxDQUFDTDtBQUNyRDtBQUNBLElBQUlNLHNCQUFzQjtBQUMxQixvQ0FBb0M7QUFDcEMsU0FBU0MsY0FBY0osT0FBTyxFQUFFSyxPQUFPLEVBQUVDLGVBQWU7SUFDcEQsOENBQThDO0lBQzlDLElBQUksT0FBT04sWUFBWSxZQUFZQSxRQUFRQSxPQUFPLEVBQUU7UUFDaEQsTUFBTU8sc0JBQXNCUCxRQUFRUSxXQUFXLElBQUlSLFFBQVFRLFdBQVcsQ0FBQ0MsTUFBTSxDQUFDLENBQUNDLFFBQVEsQ0FBQyxnRUFBZ0VDLElBQUksQ0FBQ0QsTUFBTUUsVUFBVTtRQUM3SyxJQUFJQyxPQUFPYixRQUFRQSxPQUFPO1FBQzFCLE1BQU1jLHNCQUFzQkQsS0FBS0UsT0FBTyxDQUFDakI7UUFDekMsSUFBSWdCLHVCQUF1QixHQUFHO1lBQzFCRCxPQUFPQSxLQUFLRyxLQUFLLENBQUMsR0FBR0Y7UUFDekI7UUFDQWQsVUFBVSxDQUFDQSxRQUFRaUIsVUFBVSxHQUFHLENBQUMsR0FBR3RCLFdBQVdNLE9BQU8sRUFBRUQsUUFBUWlCLFVBQVUsSUFBSSxPQUFPLEVBQUMsSUFBTWpCLENBQUFBLFFBQVFrQixJQUFJLEdBQUcsQ0FBQyxHQUFHdkIsV0FBV00sT0FBTyxFQUFFRCxRQUFRa0IsSUFBSSxJQUFJLE9BQU8sRUFBQyxJQUFLTCxPQUFRYixDQUFBQSxRQUFRbUIsT0FBTyxJQUFJZCxVQUFVLE9BQU9MLFFBQVFtQixPQUFPLEdBQUcsRUFBQyxJQUFNWixDQUFBQSx1QkFBdUJBLG9CQUFvQmEsTUFBTSxHQUFHLENBQUNkLG1CQUFtQix3Q0FBdUMsSUFBS0Msb0JBQW9CYyxHQUFHLENBQUMsQ0FBQ1gsUUFBUSxPQUFPQSxNQUFNTyxVQUFVLEVBQUVLLElBQUksQ0FBQyxNQUFNLEVBQUMsSUFBTXRCLENBQUFBLFFBQVF1QixLQUFLLElBQUlsQixVQUFVLE9BQU9MLFFBQVF1QixLQUFLLEdBQUcsRUFBQztJQUM1ZDtJQUNBLElBQUlDLFFBQVF4QixRQUFReUIsS0FBSyxDQUFDO0lBQzFCLGtEQUFrRDtJQUNsRCxvRUFBb0U7SUFDcEVELFFBQVFBLE1BQU1mLE1BQU0sQ0FBQyxDQUFDaUIsT0FBTyxDQUFDLHVCQUF1QmYsSUFBSSxDQUFDZTtJQUMxRCw0Q0FBNEM7SUFDNUMsMkNBQTJDO0lBQzNDRixRQUFRQSxNQUFNSCxHQUFHLENBQUMsQ0FBQ0s7UUFDZixNQUFNQyxlQUFlLGdEQUFnREMsSUFBSSxDQUFDRjtRQUMxRSxJQUFJLENBQUNDLGNBQWM7WUFDZixPQUFPRDtRQUNYO1FBQ0EsTUFBTSxHQUFHRyxXQUFXQyxhQUFhQyxhQUFhLEdBQUdKO1FBQ2pELE9BQU85QiwyQkFBMkIsTUFBTWtDLGVBQWUsT0FBT0YsWUFBWSxNQUFNQyxjQUFjO0lBQ2xHO0lBQ0E5QixVQUFVd0IsTUFBTUYsSUFBSSxDQUFDO0lBQ3JCLCtDQUErQztJQUMvQ3RCLFVBQVVBLFFBQVFnQyxPQUFPLENBQUMsNENBQTRDLEtBQUtuQywyQkFBMkI7SUFDdEcseUJBQXlCO0lBQ3pCRyxVQUFVQSxRQUFRZ0MsT0FBTyxDQUFDLG1EQUFtRDtJQUM3RWhDLFVBQVVBLFFBQVFnQyxPQUFPLENBQUMsNkVBQTZFO0lBQ3ZHaEMsVUFBVUEsUUFBUWdDLE9BQU8sQ0FBQywyRUFBMkU7SUFDckdSLFFBQVF4QixRQUFReUIsS0FBSyxDQUFDO0lBQ3RCLHlCQUF5QjtJQUN6QixJQUFJRCxNQUFNSixNQUFNLEdBQUcsS0FBS0ksS0FBSyxDQUFDLEVBQUUsQ0FBQ1MsSUFBSSxPQUFPLElBQUk7UUFDNUNULE1BQU1VLE1BQU0sQ0FBQyxHQUFHO0lBQ3BCO0lBQ0Esd0VBQXdFO0lBQ3hFLElBQUlWLEtBQUssQ0FBQyxFQUFFLElBQUlBLEtBQUssQ0FBQyxFQUFFLENBQUNULE9BQU8sQ0FBQywwQkFBMEIsR0FBRztRQUMxRFMsUUFBUTtZQUNKQSxLQUFLLENBQUMsRUFBRTtZQUNSQSxLQUFLLENBQUMsRUFBRSxDQUFDUSxPQUFPLENBQUMsV0FBVyxJQUFJQSxPQUFPLENBQUMsdUNBQXVDO2VBQzVFUixNQUFNUixLQUFLLENBQUM7U0FDbEI7SUFDTDtJQUNBLHNFQUFzRTtJQUN0RSxJQUFJUSxLQUFLLENBQUMsRUFBRSxJQUFJQSxLQUFLLENBQUMsRUFBRSxDQUFDVyxLQUFLLENBQUMsNkJBQTZCO1FBQ3hELDZEQUE2RDtRQUM3RCxNQUFNQyxZQUFZWixLQUFLLENBQUMsRUFBRSxDQUFDQyxLQUFLLENBQUM7UUFDakNELEtBQUssQ0FBQyxFQUFFLEdBQUdZLFNBQVMsQ0FBQ0EsVUFBVWhCLE1BQU0sR0FBRyxFQUFFO1FBQzFDSSxLQUFLLENBQUMsRUFBRSxHQUFHO1FBQ1hBLEtBQUssQ0FBQyxFQUFFLElBQUk7UUFDWkEsS0FBSyxDQUFDLEVBQUUsSUFBSTtRQUNaLG1DQUFtQztRQUNuQ0EsUUFBUUEsTUFBTVIsS0FBSyxDQUFDLEdBQUc7UUFDdkJiLHNCQUFzQjtJQUMxQixPQUFPLElBQUlBLHVCQUF1QkgsUUFBUW1DLEtBQUssQ0FBQyxnREFBZ0Q7UUFDNUYsaUVBQWlFO1FBQ2pFWCxRQUFRLEVBQUU7SUFDZDtJQUNBLElBQUksQ0FBQ25CLFNBQVM7UUFDVkwsVUFBVXdCLE1BQU1GLElBQUksQ0FBQztRQUNyQixxRUFBcUU7UUFDckUscUVBQXFFO1FBQ3JFLGdFQUFnRTtRQUNoRSx5REFBeUQ7UUFDekR0QixVQUFVQSxRQUFRZ0MsT0FBTyxDQUFDLGtEQUFrRCxJQUFJLGlCQUFpQjs7UUFFakdoQyxVQUFVQSxRQUFRZ0MsT0FBTyxDQUFDLCtCQUErQixJQUFJLGlCQUFpQjs7UUFFOUVoQyxVQUFVQSxRQUFRZ0MsT0FBTyxDQUFDLHNNQUFzTTtRQUNoT1IsUUFBUXhCLFFBQVF5QixLQUFLLENBQUM7SUFDMUI7SUFDQSw2QkFBNkI7SUFDN0JELFFBQVFBLE1BQU1mLE1BQU0sQ0FBQyxDQUFDaUIsTUFBTVcsT0FBT0MsTUFBTUQsVUFBVSxLQUFLWCxLQUFLTyxJQUFJLE9BQU8sTUFBTVAsS0FBS08sSUFBSSxPQUFPSyxHQUFHLENBQUNELFFBQVEsRUFBRSxDQUFDSixJQUFJO0lBQ2pILHlCQUF5QjtJQUN6QmpDLFVBQVV3QixNQUFNRixJQUFJLENBQUM7SUFDckIsT0FBT3RCLFFBQVFpQyxJQUFJO0FBQ3ZCO0FBQ0EsU0FBU3pDLHNCQUFzQitDLElBQUksRUFBRWxDLE9BQU87SUFDeEMsTUFBTW1DLGtCQUFrQkQsS0FBS0UsTUFBTSxDQUFDcEIsR0FBRyxDQUFDLENBQUNyQjtRQUNyQyxNQUFNMEMseUJBQXlCMUMsUUFBUUEsT0FBTyxDQUFDRSxRQUFRLENBQUM7UUFDeEQsT0FBT0UsY0FBY0osU0FBUzBDLDBCQUEwQnJDO0lBQzVEO0lBQ0EsTUFBTXNDLG9CQUFvQkosS0FBS0ssUUFBUSxDQUFDdkIsR0FBRyxDQUFDLENBQUNyQjtRQUN6QyxPQUFPSSxjQUFjSixTQUFTSztJQUNsQztJQUNBLHNEQUFzRDtJQUN0RCxJQUFJd0MsNkJBQTZCLENBQUM7SUFDbEMsSUFBSSxJQUFJQyxJQUFJLEdBQUdBLElBQUlOLGdCQUFnQnBCLE1BQU0sRUFBRTBCLElBQUk7UUFDM0MsTUFBTUMsUUFBUVAsZUFBZSxDQUFDTSxFQUFFO1FBQ2hDLElBQUlDLE1BQU03QyxRQUFRLENBQUMsK0JBQStCO1lBQzlDMkMsNkJBQTZCQztZQUM3QjtRQUNKO0lBQ0o7SUFDQSw4REFBOEQ7SUFDOUQsSUFBSUQsK0JBQStCLENBQUMsR0FBRztRQUNuQyxNQUFNRSxRQUFRUCxnQkFBZ0JOLE1BQU0sQ0FBQ1csNEJBQTRCO1FBQ2pFTCxnQkFBZ0JRLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDLEVBQUU7SUFDcEM7SUFDQSxNQUFNRSxTQUFTO1FBQ1gsR0FBR1YsSUFBSTtRQUNQRSxRQUFRRDtRQUNSSSxVQUFVRDtJQUNkO0lBQ0EsSUFBSSxDQUFDdEMsV0FBVzRDLE9BQU9SLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDbkQsdUJBQXVCO1FBQ3RELGtEQUFrRDtRQUNsRGtELE9BQU9SLE1BQU0sR0FBR1EsT0FBT1IsTUFBTSxDQUFDaEMsTUFBTSxDQUFDVjtRQUNyQ2tELE9BQU9MLFFBQVEsR0FBRyxFQUFFO0lBQ3hCO0lBQ0EsT0FBT0s7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPN0QsUUFBUWEsT0FBTyxLQUFLLGNBQWUsT0FBT2IsUUFBUWEsT0FBTyxLQUFLLFlBQVliLFFBQVFhLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2IsUUFBUWEsT0FBTyxDQUFDa0QsVUFBVSxLQUFLLGFBQWE7SUFDcktqRSxPQUFPQyxjQUFjLENBQUNDLFFBQVFhLE9BQU8sRUFBRSxjQUFjO1FBQUVaLE9BQU87SUFBSztJQUNuRUgsT0FBT2tFLE1BQU0sQ0FBQ2hFLFFBQVFhLE9BQU8sRUFBRWI7SUFDL0JpRSxPQUFPakUsT0FBTyxHQUFHQSxRQUFRYSxPQUFPO0FBQ2xDLEVBRUEsbURBQW1EIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9lcnJvci1vdmVybGF5L2Zvcm1hdC13ZWJwYWNrLW1lc3NhZ2VzLmpzPzc1ZWMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG5NSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRXZWJwYWNrTWVzc2FnZXM7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX3N0cmlwYW5zaSA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpXCIpKTtcbi8vIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svY3JlYXRlLXJlYWN0LWFwcC9ibG9iLzdiMWEzMmJlNmVjOWY5OWE2YzlhM2M2NjgxM2YzYWMwOWM0NzM2YjkvcGFja2FnZXMvcmVhY3QtZGV2LXV0aWxzL2Zvcm1hdFdlYnBhY2tNZXNzYWdlcy5qc1xuLy8gSXQncyBiZWVuIGVkaXRlZCB0byByZW1vdmUgY2hhbGsgYW5kIENSQS1zcGVjaWZpYyBsb2dpY1xuY29uc3QgZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsID0gXCJTeW50YXggZXJyb3I6XCI7XG5jb25zdCBXRUJQQUNLX0JSRUFLSU5HX0NIQU5HRV9QT0xZRklMTFMgPSBcIlxcblxcbkJSRUFLSU5HIENIQU5HRTogd2VicGFjayA8IDUgdXNlZCB0byBpbmNsdWRlIHBvbHlmaWxscyBmb3Igbm9kZS5qcyBjb3JlIG1vZHVsZXMgYnkgZGVmYXVsdC5cIjtcbmZ1bmN0aW9uIGlzTGlrZWx5QVN5bnRheEVycm9yKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpcGFuc2kuZGVmYXVsdCkobWVzc2FnZSkuaW5jbHVkZXMoZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsKTtcbn1cbmxldCBoYWRNaXNzaW5nU2Fzc0Vycm9yID0gZmFsc2U7XG4vLyBDbGVhbnMgdXAgd2VicGFjayBlcnJvciBtZXNzYWdlcy5cbmZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2UobWVzc2FnZSwgdmVyYm9zZSwgaW1wb3J0VHJhY2VOb3RlKSB7XG4gICAgLy8gVE9ETzogUmVwbGFjZSB0aGlzIG9uY2Ugd2VicGFjayA1IGlzIHN0YWJsZVxuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJvYmplY3RcIiAmJiBtZXNzYWdlLm1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRNb2R1bGVUcmFjZSA9IG1lc3NhZ2UubW9kdWxlVHJhY2UgJiYgbWVzc2FnZS5tb2R1bGVUcmFjZS5maWx0ZXIoKHRyYWNlKT0+IS9uZXh0LShtaWRkbGV3YXJlfGNsaWVudC1wYWdlc3xyb3V0ZXxlZGdlLWZ1bmN0aW9uKS1sb2FkZXJcXC5qcy8udGVzdCh0cmFjZS5vcmlnaW5OYW1lKSk7XG4gICAgICAgIGxldCBib2R5ID0gbWVzc2FnZS5tZXNzYWdlO1xuICAgICAgICBjb25zdCBicmVha2luZ0NoYW5nZUluZGV4ID0gYm9keS5pbmRleE9mKFdFQlBBQ0tfQlJFQUtJTkdfQ0hBTkdFX1BPTFlGSUxMUyk7XG4gICAgICAgIGlmIChicmVha2luZ0NoYW5nZUluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGJvZHkgPSBib2R5LnNsaWNlKDAsIGJyZWFraW5nQ2hhbmdlSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2UgPSAobWVzc2FnZS5tb2R1bGVOYW1lID8gKDAsIF9zdHJpcGFuc2kuZGVmYXVsdCkobWVzc2FnZS5tb2R1bGVOYW1lKSArIFwiXFxuXCIgOiBcIlwiKSArIChtZXNzYWdlLmZpbGUgPyAoMCwgX3N0cmlwYW5zaS5kZWZhdWx0KShtZXNzYWdlLmZpbGUpICsgXCJcXG5cIiA6IFwiXCIpICsgYm9keSArIChtZXNzYWdlLmRldGFpbHMgJiYgdmVyYm9zZSA/IFwiXFxuXCIgKyBtZXNzYWdlLmRldGFpbHMgOiBcIlwiKSArIChmaWx0ZXJlZE1vZHVsZVRyYWNlICYmIGZpbHRlcmVkTW9kdWxlVHJhY2UubGVuZ3RoID8gKGltcG9ydFRyYWNlTm90ZSB8fCBcIlxcblxcbkltcG9ydCB0cmFjZSBmb3IgcmVxdWVzdGVkIG1vZHVsZTpcIikgKyBmaWx0ZXJlZE1vZHVsZVRyYWNlLm1hcCgodHJhY2UpPT5cIlxcblwiICsgdHJhY2UubW9kdWxlTmFtZSkuam9pbihcIlwiKSA6IFwiXCIpICsgKG1lc3NhZ2Uuc3RhY2sgJiYgdmVyYm9zZSA/IFwiXFxuXCIgKyBtZXNzYWdlLnN0YWNrIDogXCJcIik7XG4gICAgfVxuICAgIGxldCBsaW5lcyA9IG1lc3NhZ2Uuc3BsaXQoXCJcXG5cIik7XG4gICAgLy8gU3RyaXAgV2VicGFjay1hZGRlZCBoZWFkZXJzIG9mZiBlcnJvcnMvd2FybmluZ3NcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrL2Jsb2IvbWFzdGVyL2xpYi9Nb2R1bGVFcnJvci5qc1xuICAgIGxpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lKT0+IS9Nb2R1bGUgW0EteiBdK1xcKGZyb20vLnRlc3QobGluZSkpO1xuICAgIC8vIFRyYW5zZm9ybSBwYXJzaW5nIGVycm9yIGludG8gc3ludGF4IGVycm9yXG4gICAgLy8gVE9ETzogbW92ZSB0aGlzIHRvIG91ciBFU0xpbnQgZm9ybWF0dGVyP1xuICAgIGxpbmVzID0gbGluZXMubWFwKChsaW5lKT0+e1xuICAgICAgICBjb25zdCBwYXJzaW5nRXJyb3IgPSAvTGluZSAoXFxkKyk6KD86KFxcZCspOik/XFxzKlBhcnNpbmcgZXJyb3I6ICguKykkLy5leGVjKGxpbmUpO1xuICAgICAgICBpZiAoIXBhcnNpbmdFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgWywgZXJyb3JMaW5lLCBlcnJvckNvbHVtbiwgZXJyb3JNZXNzYWdlXSA9IHBhcnNpbmdFcnJvcjtcbiAgICAgICAgcmV0dXJuIGZyaWVuZGx5U3ludGF4RXJyb3JMYWJlbCArIFwiIFwiICsgZXJyb3JNZXNzYWdlICsgXCIgKFwiICsgZXJyb3JMaW5lICsgXCI6XCIgKyBlcnJvckNvbHVtbiArIFwiKVwiO1xuICAgIH0pO1xuICAgIG1lc3NhZ2UgPSBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIC8vIFNtb29zaCBzeW50YXggZXJyb3JzIChjb21tb25seSBmb3VuZCBpbiBDU1MpXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvU3ludGF4RXJyb3JcXHMrXFwoKFxcZCspOihcXGQrKVxcKVxccyooLis/KVxcbi9nLCBcIlwiICsgZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsICsgXCIgJDMgKCQxOiQyKVxcblwiKTtcbiAgICAvLyBDbGVhbiB1cCBleHBvcnQgZXJyb3JzXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXi4qZXhwb3J0ICcoLis/KScgd2FzIG5vdCBmb3VuZCBpbiAnKC4rPyknLiokL2dtLCBcIkF0dGVtcHRlZCBpbXBvcnQgZXJyb3I6ICckMScgaXMgbm90IGV4cG9ydGVkIGZyb20gJyQyJy5cIik7XG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXi4qZXhwb3J0ICdkZWZhdWx0JyBcXChpbXBvcnRlZCBhcyAnKC4rPyknXFwpIHdhcyBub3QgZm91bmQgaW4gJyguKz8pJy4qJC9nbSwgXCJBdHRlbXB0ZWQgaW1wb3J0IGVycm9yOiAnJDInIGRvZXMgbm90IGNvbnRhaW4gYSBkZWZhdWx0IGV4cG9ydCAoaW1wb3J0ZWQgYXMgJyQxJykuXCIpO1xuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL14uKmV4cG9ydCAnKC4rPyknIFxcKGltcG9ydGVkIGFzICcoLis/KSdcXCkgd2FzIG5vdCBmb3VuZCBpbiAnKC4rPyknLiokL2dtLCBcIkF0dGVtcHRlZCBpbXBvcnQgZXJyb3I6ICckMScgaXMgbm90IGV4cG9ydGVkIGZyb20gJyQzJyAoaW1wb3J0ZWQgYXMgJyQyJykuXCIpO1xuICAgIGxpbmVzID0gbWVzc2FnZS5zcGxpdChcIlxcblwiKTtcbiAgICAvLyBSZW1vdmUgbGVhZGluZyBuZXdsaW5lXG4gICAgaWYgKGxpbmVzLmxlbmd0aCA+IDIgJiYgbGluZXNbMV0udHJpbSgpID09PSBcIlwiKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSgxLCAxKTtcbiAgICB9XG4gICAgLy8gQ2xlYW5zIHVwIHZlcmJvc2UgXCJtb2R1bGUgbm90IGZvdW5kXCIgbWVzc2FnZXMgZm9yIGZpbGVzIGFuZCBwYWNrYWdlcy5cbiAgICBpZiAobGluZXNbMV0gJiYgbGluZXNbMV0uaW5kZXhPZihcIk1vZHVsZSBub3QgZm91bmQ6IFwiKSA9PT0gMCkge1xuICAgICAgICBsaW5lcyA9IFtcbiAgICAgICAgICAgIGxpbmVzWzBdLFxuICAgICAgICAgICAgbGluZXNbMV0ucmVwbGFjZShcIkVycm9yOiBcIiwgXCJcIikucmVwbGFjZShcIk1vZHVsZSBub3QgZm91bmQ6IENhbm5vdCBmaW5kIGZpbGU6XCIsIFwiQ2Fubm90IGZpbmQgZmlsZTpcIiksXG4gICAgICAgICAgICAuLi5saW5lcy5zbGljZSgyKVxuICAgICAgICBdO1xuICAgIH1cbiAgICAvLyBBZGQgaGVscGZ1bCBtZXNzYWdlIGZvciB1c2VycyB0cnlpbmcgdG8gdXNlIFNhc3MgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgaWYgKGxpbmVzWzFdICYmIGxpbmVzWzFdLm1hdGNoKC9DYW5ub3QgZmluZCBtb2R1bGUuK3Nhc3MvKSkge1xuICAgICAgICAvLyAuL2ZpbGUubW9kdWxlLnNjc3MgKDw8bG9hZGVyIGluZm8+PikgPT4gLi9maWxlLm1vZHVsZS5zY3NzXG4gICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGxpbmVzWzBdLnNwbGl0KFwiIVwiKTtcbiAgICAgICAgbGluZXNbMF0gPSBmaXJzdExpbmVbZmlyc3RMaW5lLmxlbmd0aCAtIDFdO1xuICAgICAgICBsaW5lc1sxXSA9IFwiVG8gdXNlIE5leHQuanMnIGJ1aWx0LWluIFNhc3Mgc3VwcG9ydCwgeW91IGZpcnN0IG5lZWQgdG8gaW5zdGFsbCBgc2Fzc2AuXFxuXCI7XG4gICAgICAgIGxpbmVzWzFdICs9IFwiUnVuIGBucG0gaSBzYXNzYCBvciBgeWFybiBhZGQgc2Fzc2AgaW5zaWRlIHlvdXIgd29ya3NwYWNlLlxcblwiO1xuICAgICAgICBsaW5lc1sxXSArPSBcIlxcbkxlYXJuIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2luc3RhbGwtc2Fzc1wiO1xuICAgICAgICAvLyBkaXNwb3NlIG9mIHVuaGVscGZ1bCBzdGFjayB0cmFjZVxuICAgICAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKDAsIDIpO1xuICAgICAgICBoYWRNaXNzaW5nU2Fzc0Vycm9yID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGhhZE1pc3NpbmdTYXNzRXJyb3IgJiYgbWVzc2FnZS5tYXRjaCgvKHNhc3MtbG9hZGVyfHJlc29sdmUtdXJsLWxvYWRlcjogQ1NTIGVycm9yKS8pKSB7XG4gICAgICAgIC8vIGRpc3Bvc2Ugb2YgdW5oZWxwZnVsIHN0YWNrIHRyYWNlIGZvbGxvd2luZyBtaXNzaW5nIHNhc3MgbW9kdWxlXG4gICAgICAgIGxpbmVzID0gW107XG4gICAgfVxuICAgIGlmICghdmVyYm9zZSkge1xuICAgICAgICBtZXNzYWdlID0gbGluZXMuam9pbihcIlxcblwiKTtcbiAgICAgICAgLy8gSW50ZXJuYWwgc3RhY2tzIGFyZSBnZW5lcmFsbHkgdXNlbGVzcyBzbyB3ZSBzdHJpcCB0aGVtLi4uIHdpdGggdGhlXG4gICAgICAgIC8vIGV4Y2VwdGlvbiBvZiBzdGFja3MgY29udGFpbmluZyBgd2VicGFjazpgIGJlY2F1c2UgdGhleSdyZSBub3JtYWxseVxuICAgICAgICAvLyBmcm9tIHVzZXIgY29kZSBnZW5lcmF0ZWQgYnkgV2VicGFjay4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9jcmVhdGUtcmVhY3QtYXBwL3B1bGwvMTA1MFxuICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9eXFxzKmF0XFxzKCg/IXdlYnBhY2s6KS4pKjpcXGQrOlxcZCtbXFxzKV0qKFxcbnwkKS9nbSwgXCJcIikgLy8gYXQgLi4uIC4uLjp4OnlcbiAgICAgICAgO1xuICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9eXFxzKmF0XFxzPGFub255bW91cz4oXFxufCQpL2dtLCBcIlwiKSAvLyBhdCA8YW5vbnltb3VzPlxuICAgICAgICA7XG4gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL0ZpbGUgd2FzIHByb2Nlc3NlZCB3aXRoIHRoZXNlIGxvYWRlcnM6XFxuKC4rW1xcXFwvXShuZXh0W1xcXFwvXWRpc3RbXFxcXC9dLit8QG5leHRbXFxcXC9dcmVhY3QtcmVmcmVzaC11dGlsc1tcXFxcL11sb2FkZXIpXFwuanNcXG4pKllvdSBtYXkgbmVlZCBhbiBhZGRpdGlvbmFsIGxvYWRlciB0byBoYW5kbGUgdGhlIHJlc3VsdCBvZiB0aGVzZSBsb2FkZXJzLlxcbi9nLCBcIlwiKTtcbiAgICAgICAgbGluZXMgPSBtZXNzYWdlLnNwbGl0KFwiXFxuXCIpO1xuICAgIH1cbiAgICAvLyBSZW1vdmUgZHVwbGljYXRlZCBuZXdsaW5lc1xuICAgIGxpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lLCBpbmRleCwgYXJyKT0+aW5kZXggPT09IDAgfHwgbGluZS50cmltKCkgIT09IFwiXCIgfHwgbGluZS50cmltKCkgIT09IGFycltpbmRleCAtIDFdLnRyaW0oKSk7XG4gICAgLy8gUmVhc3NlbWJsZSB0aGUgbWVzc2FnZVxuICAgIG1lc3NhZ2UgPSBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBtZXNzYWdlLnRyaW0oKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFdlYnBhY2tNZXNzYWdlcyhqc29uLCB2ZXJib3NlKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkRXJyb3JzID0ganNvbi5lcnJvcnMubWFwKChtZXNzYWdlKT0+e1xuICAgICAgICBjb25zdCBpc1Vua25vd25OZXh0Rm9udEVycm9yID0gbWVzc2FnZS5tZXNzYWdlLmluY2x1ZGVzKFwiQW4gZXJyb3Igb2NjdXJlZCBpbiBgbmV4dC9mb250YC5cIik7XG4gICAgICAgIHJldHVybiBmb3JtYXRNZXNzYWdlKG1lc3NhZ2UsIGlzVW5rbm93bk5leHRGb250RXJyb3IgfHwgdmVyYm9zZSk7XG4gICAgfSk7XG4gICAgY29uc3QgZm9ybWF0dGVkV2FybmluZ3MgPSBqc29uLndhcm5pbmdzLm1hcCgobWVzc2FnZSk9PntcbiAgICAgICAgcmV0dXJuIGZvcm1hdE1lc3NhZ2UobWVzc2FnZSwgdmVyYm9zZSk7XG4gICAgfSk7XG4gICAgLy8gUmVvcmRlciBlcnJvcnMgdG8gcHV0IHRoZSBtb3N0IHJlbGV2YW50IG9uZXMgZmlyc3QuXG4gICAgbGV0IHJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yID0gLTE7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZEVycm9ycy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IGVycm9yID0gZm9ybWF0dGVkRXJyb3JzW2ldO1xuICAgICAgICBpZiAoZXJyb3IuaW5jbHVkZXMoXCJSZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvclwiKSkge1xuICAgICAgICAgICAgcmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTW92ZSB0aGUgcmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgdG8gdGhlIHRvcCBpZiBpdCBleGlzdHNcbiAgICBpZiAocmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gZm9ybWF0dGVkRXJyb3JzLnNwbGljZShyZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciwgMSk7XG4gICAgICAgIGZvcm1hdHRlZEVycm9ycy51bnNoaWZ0KGVycm9yWzBdKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAuLi5qc29uLFxuICAgICAgICBlcnJvcnM6IGZvcm1hdHRlZEVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IGZvcm1hdHRlZFdhcm5pbmdzXG4gICAgfTtcbiAgICBpZiAoIXZlcmJvc2UgJiYgcmVzdWx0LmVycm9ycy5zb21lKGlzTGlrZWx5QVN5bnRheEVycm9yKSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHN5bnRheCBlcnJvcnMsIHNob3cganVzdCB0aGVtLlxuICAgICAgICByZXN1bHQuZXJyb3JzID0gcmVzdWx0LmVycm9ycy5maWx0ZXIoaXNMaWtlbHlBU3ludGF4RXJyb3IpO1xuICAgICAgICByZXN1bHQud2FybmluZ3MgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0LXdlYnBhY2stbWVzc2FnZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImZvcm1hdFdlYnBhY2tNZXNzYWdlcyIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfc3RyaXBhbnNpIiwiXyIsImZyaWVuZGx5U3ludGF4RXJyb3JMYWJlbCIsIldFQlBBQ0tfQlJFQUtJTkdfQ0hBTkdFX1BPTFlGSUxMUyIsImlzTGlrZWx5QVN5bnRheEVycm9yIiwibWVzc2FnZSIsImRlZmF1bHQiLCJpbmNsdWRlcyIsImhhZE1pc3NpbmdTYXNzRXJyb3IiLCJmb3JtYXRNZXNzYWdlIiwidmVyYm9zZSIsImltcG9ydFRyYWNlTm90ZSIsImZpbHRlcmVkTW9kdWxlVHJhY2UiLCJtb2R1bGVUcmFjZSIsImZpbHRlciIsInRyYWNlIiwidGVzdCIsIm9yaWdpbk5hbWUiLCJib2R5IiwiYnJlYWtpbmdDaGFuZ2VJbmRleCIsImluZGV4T2YiLCJzbGljZSIsIm1vZHVsZU5hbWUiLCJmaWxlIiwiZGV0YWlscyIsImxlbmd0aCIsIm1hcCIsImpvaW4iLCJzdGFjayIsImxpbmVzIiwic3BsaXQiLCJsaW5lIiwicGFyc2luZ0Vycm9yIiwiZXhlYyIsImVycm9yTGluZSIsImVycm9yQ29sdW1uIiwiZXJyb3JNZXNzYWdlIiwicmVwbGFjZSIsInRyaW0iLCJzcGxpY2UiLCJtYXRjaCIsImZpcnN0TGluZSIsImluZGV4IiwiYXJyIiwianNvbiIsImZvcm1hdHRlZEVycm9ycyIsImVycm9ycyIsImlzVW5rbm93bk5leHRGb250RXJyb3IiLCJmb3JtYXR0ZWRXYXJuaW5ncyIsIndhcm5pbmdzIiwicmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IiLCJpIiwiZXJyb3IiLCJ1bnNoaWZ0IiwicmVzdWx0Iiwic29tZSIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/dev/noop-turbopack-hmr.js": +/*!*****************************************************************!*\ + !*** ./node_modules/next/dist/client/dev/noop-turbopack-hmr.js ***! + \*****************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("// The Turbopack HMR client can't be properly omitted at the moment (WEB-1589),\n// so instead we remap its import to this file in webpack builds.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"connect\", ({\n enumerable: true,\n get: function() {\n return connect;\n }\n}));\nfunction connect() {}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=noop-turbopack-hmr.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvbm9vcC10dXJib3BhY2staG1yLmpzIiwibWFwcGluZ3MiOiJBQUFBLCtFQUErRTtBQUMvRSxpRUFBaUU7QUFDcEQ7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLFdBQVc7QUFFcEIsSUFBSSxDQUFDLE9BQU9KLFFBQVFLLE9BQU8sS0FBSyxjQUFlLE9BQU9MLFFBQVFLLE9BQU8sS0FBSyxZQUFZTCxRQUFRSyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9MLFFBQVFLLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktSLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUUssT0FBTyxFQUFFLGNBQWM7UUFBRUosT0FBTztJQUFLO0lBQ25FSCxPQUFPUyxNQUFNLENBQUNQLFFBQVFLLE9BQU8sRUFBRUw7SUFDL0JRLE9BQU9SLE9BQU8sR0FBR0EsUUFBUUssT0FBTztBQUNsQyxFQUVBLDhDQUE4QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvbm9vcC10dXJib3BhY2staG1yLmpzPzQxNGMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIFR1cmJvcGFjayBITVIgY2xpZW50IGNhbid0IGJlIHByb3Blcmx5IG9taXR0ZWQgYXQgdGhlIG1vbWVudCAoV0VCLTE1ODkpLFxuLy8gc28gaW5zdGVhZCB3ZSByZW1hcCBpdHMgaW1wb3J0IHRvIHRoaXMgZmlsZSBpbiB3ZWJwYWNrIGJ1aWxkcy5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29ubmVjdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY29ubmVjdDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGNvbm5lY3QoKSB7fVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub29wLXR1cmJvcGFjay1obXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImNvbm5lY3QiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/dev/noop-turbopack-hmr.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/has-base-path.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/client/has-base-path.js ***! + \********************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hasBasePath\", ({\n enumerable: true,\n get: function() {\n return hasBasePath;\n }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ../shared/lib/router/utils/path-has-prefix */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nconst basePath = false || \"\";\nfunction hasBasePath(path) {\n return (0, _pathhasprefix.pathHasPrefix)(path, basePath);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=has-base-path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9oYXMtYmFzZS1wYXRoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwrQ0FBOEM7SUFDMUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQkFBaUJDLG1CQUFPQSxDQUFDLDZIQUE0QztBQUMzRSxNQUFNQyxXQUFXQyxNQUFrQyxJQUFJO0FBQ3ZELFNBQVNKLFlBQVlPLElBQUk7SUFDckIsT0FBTyxDQUFDLEdBQUdOLGVBQWVPLGFBQWEsRUFBRUQsTUFBTUo7QUFDbkQ7QUFFQSxJQUFJLENBQUMsT0FBT1AsUUFBUWEsT0FBTyxLQUFLLGNBQWUsT0FBT2IsUUFBUWEsT0FBTyxLQUFLLFlBQVliLFFBQVFhLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2IsUUFBUWEsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2hCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWEsT0FBTyxFQUFFLGNBQWM7UUFBRVosT0FBTztJQUFLO0lBQ25FSCxPQUFPaUIsTUFBTSxDQUFDZixRQUFRYSxPQUFPLEVBQUViO0lBQy9CZ0IsT0FBT2hCLE9BQU8sR0FBR0EsUUFBUWEsT0FBTztBQUNsQyxFQUVBLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9oYXMtYmFzZS1wYXRoLmpzPzVhNDkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoYXNCYXNlUGF0aFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaGFzQmFzZVBhdGg7XG4gICAgfVxufSk7XG5jb25zdCBfcGF0aGhhc3ByZWZpeCA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXRoLWhhcy1wcmVmaXhcIik7XG5jb25zdCBiYXNlUGF0aCA9IHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEggfHwgXCJcIjtcbmZ1bmN0aW9uIGhhc0Jhc2VQYXRoKHBhdGgpIHtcbiAgICByZXR1cm4gKDAsIF9wYXRoaGFzcHJlZml4LnBhdGhIYXNQcmVmaXgpKHBhdGgsIGJhc2VQYXRoKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzLWJhc2UtcGF0aC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaGFzQmFzZVBhdGgiLCJfcGF0aGhhc3ByZWZpeCIsInJlcXVpcmUiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsInBhdGhIYXNQcmVmaXgiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/has-base-path.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/normalize-trailing-slash.js": +/*!*******************************************************************!*\ + !*** ./node_modules/next/dist/client/normalize-trailing-slash.js ***! + \*******************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return normalizePathTrailingSlash;\n }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst normalizePathTrailingSlash = (path)=>{\n if (!path.startsWith(\"/\") || undefined) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n if (false) {}\n return \"\" + (0, _removetrailingslash.removeTrailingSlash)(pathname) + query + hash;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=normalize-trailing-slash.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2guanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDhEQUE2RDtJQUN6REksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHVCQUF1QkMsbUJBQU9BLENBQUMseUlBQWtEO0FBQ3ZGLE1BQU1DLGFBQWFELG1CQUFPQSxDQUFDLG1IQUF1QztBQUNsRSxNQUFNRiw2QkFBNkIsQ0FBQ0k7SUFDaEMsSUFBSSxDQUFDQSxLQUFLQyxVQUFVLENBQUMsUUFBUUMsU0FBd0MsRUFBRTtRQUNuRSxPQUFPRjtJQUNYO0lBQ0EsTUFBTSxFQUFFSyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHUixXQUFXUyxTQUFTLEVBQUVSO0lBQzVELElBQUlFLEtBQWlDLEVBQUUsRUFRdEM7SUFDRCxPQUFPLEtBQUssQ0FBQyxHQUFHTCxxQkFBcUJjLG1CQUFtQixFQUFFTixZQUFZQyxRQUFRQztBQUNsRjtBQUVBLElBQUksQ0FBQyxPQUFPZixRQUFRcUIsT0FBTyxLQUFLLGNBQWUsT0FBT3JCLFFBQVFxQixPQUFPLEtBQUssWUFBWXJCLFFBQVFxQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9yQixRQUFRcUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3hCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXFCLE9BQU8sRUFBRSxjQUFjO1FBQUVwQixPQUFPO0lBQUs7SUFDbkVILE9BQU95QixNQUFNLENBQUN2QixRQUFRcUIsT0FBTyxFQUFFckI7SUFDL0J3QixPQUFPeEIsT0FBTyxHQUFHQSxRQUFRcUIsT0FBTztBQUNsQyxFQUVBLG9EQUFvRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2guanM/NGMyZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaDtcbiAgICB9XG59KTtcbmNvbnN0IF9yZW1vdmV0cmFpbGluZ3NsYXNoID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS10cmFpbGluZy1zbGFzaFwiKTtcbmNvbnN0IF9wYXJzZXBhdGggPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcGF0aFwiKTtcbmNvbnN0IG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoID0gKHBhdGgpPT57XG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpIHx8IHByb2Nlc3MuZW52Ll9fTkVYVF9NQU5VQUxfVFJBSUxJTkdfU0xBU0gpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5LCBoYXNoIH0gPSAoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKHBhdGgpO1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfVFJBSUxJTkdfU0xBU0gpIHtcbiAgICAgICAgaWYgKC9cXC5bXi9dK1xcLz8kLy50ZXN0KHBhdGhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyAoMCwgX3JlbW92ZXRyYWlsaW5nc2xhc2gucmVtb3ZlVHJhaWxpbmdTbGFzaCkocGF0aG5hbWUpICsgcXVlcnkgKyBoYXNoO1xuICAgICAgICB9IGVsc2UgaWYgKHBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBwYXRobmFtZSArIHF1ZXJ5ICsgaGFzaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRobmFtZSArIFwiL1wiICsgcXVlcnkgKyBoYXNoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiICsgKDAsIF9yZW1vdmV0cmFpbGluZ3NsYXNoLnJlbW92ZVRyYWlsaW5nU2xhc2gpKHBhdGhuYW1lKSArIHF1ZXJ5ICsgaGFzaDtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vcm1hbGl6ZS10cmFpbGluZy1zbGFzaC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJfcmVtb3ZldHJhaWxpbmdzbGFzaCIsInJlcXVpcmUiLCJfcGFyc2VwYXRoIiwicGF0aCIsInN0YXJ0c1dpdGgiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX01BTlVBTF9UUkFJTElOR19TTEFTSCIsInBhdGhuYW1lIiwicXVlcnkiLCJoYXNoIiwicGFyc2VQYXRoIiwiX19ORVhUX1RSQUlMSU5HX1NMQVNIIiwidGVzdCIsInJlbW92ZVRyYWlsaW5nU2xhc2giLCJlbmRzV2l0aCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/normalize-trailing-slash.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/client/remove-base-path.js": +/*!***********************************************************!*\ + !*** ./node_modules/next/dist/client/remove-base-path.js ***! + \***********************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeBasePath\", ({\n enumerable: true,\n get: function() {\n return removeBasePath;\n }\n}));\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"(ssr)/./node_modules/next/dist/client/has-base-path.js\");\nconst basePath = false || \"\";\nfunction removeBasePath(path) {\n if (false) {}\n // Can't trim the basePath if it has zero length!\n if (basePath.length === 0) return path;\n path = path.slice(basePath.length);\n if (!path.startsWith(\"/\")) path = \"/\" + path;\n return path;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=remove-base-path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZW1vdmUtYmFzZS1wYXRoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxrREFBaUQ7SUFDN0NJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxlQUFlQyxtQkFBT0EsQ0FBQywrRUFBaUI7QUFDOUMsTUFBTUMsV0FBV0MsTUFBa0MsSUFBSTtBQUN2RCxTQUFTSixlQUFlTyxJQUFJO0lBQ3hCLElBQUlILEtBQTBDLEVBQUUsRUFJL0M7SUFDRCxpREFBaUQ7SUFDakQsSUFBSUQsU0FBU08sTUFBTSxLQUFLLEdBQUcsT0FBT0g7SUFDbENBLE9BQU9BLEtBQUtJLEtBQUssQ0FBQ1IsU0FBU08sTUFBTTtJQUNqQyxJQUFJLENBQUNILEtBQUtLLFVBQVUsQ0FBQyxNQUFNTCxPQUFPLE1BQU1BO0lBQ3hDLE9BQU9BO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT1gsUUFBUWlCLE9BQU8sS0FBSyxjQUFlLE9BQU9qQixRQUFRaUIsT0FBTyxLQUFLLFlBQVlqQixRQUFRaUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPakIsUUFBUWlCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktwQixPQUFPQyxjQUFjLENBQUNDLFFBQVFpQixPQUFPLEVBQUUsY0FBYztRQUFFaEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPcUIsTUFBTSxDQUFDbkIsUUFBUWlCLE9BQU8sRUFBRWpCO0lBQy9Cb0IsT0FBT3BCLE9BQU8sR0FBR0EsUUFBUWlCLE9BQU87QUFDbEMsRUFFQSw0Q0FBNEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVtb3ZlLWJhc2UtcGF0aC5qcz9iNGYxIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVtb3ZlQmFzZVBhdGhcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZUJhc2VQYXRoO1xuICAgIH1cbn0pO1xuY29uc3QgX2hhc2Jhc2VwYXRoID0gcmVxdWlyZShcIi4vaGFzLWJhc2UtcGF0aFwiKTtcbmNvbnN0IGJhc2VQYXRoID0gcHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCB8fCBcIlwiO1xuZnVuY3Rpb24gcmVtb3ZlQmFzZVBhdGgocGF0aCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEgpIHtcbiAgICAgICAgaWYgKCEoMCwgX2hhc2Jhc2VwYXRoLmhhc0Jhc2VQYXRoKShwYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FuJ3QgdHJpbSB0aGUgYmFzZVBhdGggaWYgaXQgaGFzIHplcm8gbGVuZ3RoIVxuICAgIGlmIChiYXNlUGF0aC5sZW5ndGggPT09IDApIHJldHVybiBwYXRoO1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKGJhc2VQYXRoLmxlbmd0aCk7XG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSBwYXRoID0gXCIvXCIgKyBwYXRoO1xuICAgIHJldHVybiBwYXRoO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZW1vdmUtYmFzZS1wYXRoLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJyZW1vdmVCYXNlUGF0aCIsIl9oYXNiYXNlcGF0aCIsInJlcXVpcmUiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsIl9fTkVYVF9NQU5VQUxfQ0xJRU5UX0JBU0VfUEFUSCIsImhhc0Jhc2VQYXRoIiwibGVuZ3RoIiwic2xpY2UiLCJzdGFydHNXaXRoIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/client/remove-base-path.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/compiled/anser/index.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/compiled/anser/index.js ***! + \********************************************************/ +/***/ ((module) => { + +eval("(()=>{\"use strict\";var e={211:e=>{var r=function(){function defineProperties(e,r){for(var n=0;n<r.length;n++){var s=r[n];s.enumerable=s.enumerable||false;s.configurable=true;if(\"value\"in s)s.writable=true;Object.defineProperty(e,s.key,s)}}return function(e,r,n){if(r)defineProperties(e.prototype,r);if(n)defineProperties(e,n);return e}}();function _classCallCheck(e,r){if(!(e instanceof r)){throw new TypeError(\"Cannot call a class as a function\")}}var n=[[{color:\"0, 0, 0\",class:\"ansi-black\"},{color:\"187, 0, 0\",class:\"ansi-red\"},{color:\"0, 187, 0\",class:\"ansi-green\"},{color:\"187, 187, 0\",class:\"ansi-yellow\"},{color:\"0, 0, 187\",class:\"ansi-blue\"},{color:\"187, 0, 187\",class:\"ansi-magenta\"},{color:\"0, 187, 187\",class:\"ansi-cyan\"},{color:\"255,255,255\",class:\"ansi-white\"}],[{color:\"85, 85, 85\",class:\"ansi-bright-black\"},{color:\"255, 85, 85\",class:\"ansi-bright-red\"},{color:\"0, 255, 0\",class:\"ansi-bright-green\"},{color:\"255, 255, 85\",class:\"ansi-bright-yellow\"},{color:\"85, 85, 255\",class:\"ansi-bright-blue\"},{color:\"255, 85, 255\",class:\"ansi-bright-magenta\"},{color:\"85, 255, 255\",class:\"ansi-bright-cyan\"},{color:\"255, 255, 255\",class:\"ansi-bright-white\"}]];var s=function(){r(Anser,null,[{key:\"escapeForHtml\",value:function escapeForHtml(e){return(new Anser).escapeForHtml(e)}},{key:\"linkify\",value:function linkify(e){return(new Anser).linkify(e)}},{key:\"ansiToHtml\",value:function ansiToHtml(e,r){return(new Anser).ansiToHtml(e,r)}},{key:\"ansiToJson\",value:function ansiToJson(e,r){return(new Anser).ansiToJson(e,r)}},{key:\"ansiToText\",value:function ansiToText(e){return(new Anser).ansiToText(e)}}]);function Anser(){_classCallCheck(this,Anser);this.fg=this.bg=this.fg_truecolor=this.bg_truecolor=null;this.bright=0}r(Anser,[{key:\"setupPalette\",value:function setupPalette(){this.PALETTE_COLORS=[];for(var e=0;e<2;++e){for(var r=0;r<8;++r){this.PALETTE_COLORS.push(n[e][r].color)}}var s=[0,95,135,175,215,255];var i=function format(e,r,n){return s[e]+\", \"+s[r]+\", \"+s[n]};var t=void 0,o=void 0,a=void 0;for(var l=0;l<6;++l){for(var c=0;c<6;++c){for(var u=0;u<6;++u){this.PALETTE_COLORS.push(i(l,c,u))}}}var f=8;for(var h=0;h<24;++h,f+=10){this.PALETTE_COLORS.push(i(f,f,f))}}},{key:\"escapeForHtml\",value:function escapeForHtml(e){return e.replace(/[&<>]/gm,(function(e){return e==\"&\"?\"&\":e==\"<\"?\"<\":e==\">\"?\">\":\"\"}))}},{key:\"linkify\",value:function linkify(e){return e.replace(/(https?:\\/\\/[^\\s]+)/gm,(function(e){return'<a href=\"'+e+'\">'+e+\"</a>\"}))}},{key:\"ansiToHtml\",value:function ansiToHtml(e,r){return this.process(e,r,true)}},{key:\"ansiToJson\",value:function ansiToJson(e,r){r=r||{};r.json=true;r.clearLine=false;return this.process(e,r,true)}},{key:\"ansiToText\",value:function ansiToText(e){return this.process(e,{},false)}},{key:\"process\",value:function process(e,r,n){var s=this;var i=this;var t=e.split(/\\033\\[/);var o=t.shift();if(r===undefined||r===null){r={}}r.clearLine=/\\r/.test(e);var a=t.map((function(e){return s.processChunk(e,r,n)}));if(r&&r.json){var l=i.processChunkJson(\"\");l.content=o;l.clearLine=r.clearLine;a.unshift(l);if(r.remove_empty){a=a.filter((function(e){return!e.isEmpty()}))}return a}else{a.unshift(o)}return a.join(\"\")}},{key:\"processChunkJson\",value:function processChunkJson(e,r,s){r=typeof r==\"undefined\"?{}:r;var i=r.use_classes=typeof r.use_classes!=\"undefined\"&&r.use_classes;var t=r.key=i?\"class\":\"color\";var o={content:e,fg:null,bg:null,fg_truecolor:null,bg_truecolor:null,clearLine:r.clearLine,decoration:null,was_processed:false,isEmpty:function isEmpty(){return!o.content}};var a=e.match(/^([!\\x3c-\\x3f]*)([\\d;]*)([\\x20-\\x2c]*[\\x40-\\x7e])([\\s\\S]*)/m);if(!a)return o;var l=o.content=a[4];var c=a[2].split(\";\");if(a[1]!==\"\"||a[3]!==\"m\"){return o}if(!s){return o}var u=this;u.decoration=null;while(c.length>0){var f=c.shift();var h=parseInt(f);if(isNaN(h)||h===0){u.fg=u.bg=u.decoration=null}else if(h===1){u.decoration=\"bold\"}else if(h===2){u.decoration=\"dim\"}else if(h==3){u.decoration=\"italic\"}else if(h==4){u.decoration=\"underline\"}else if(h==5){u.decoration=\"blink\"}else if(h===7){u.decoration=\"reverse\"}else if(h===8){u.decoration=\"hidden\"}else if(h===9){u.decoration=\"strikethrough\"}else if(h==39){u.fg=null}else if(h==49){u.bg=null}else if(h>=30&&h<38){u.fg=n[0][h%10][t]}else if(h>=90&&h<98){u.fg=n[1][h%10][t]}else if(h>=40&&h<48){u.bg=n[0][h%10][t]}else if(h>=100&&h<108){u.bg=n[1][h%10][t]}else if(h===38||h===48){var p=h===38;if(c.length>=1){var g=c.shift();if(g===\"5\"&&c.length>=1){var v=parseInt(c.shift());if(v>=0&&v<=255){if(!i){if(!this.PALETTE_COLORS){u.setupPalette()}if(p){u.fg=this.PALETTE_COLORS[v]}else{u.bg=this.PALETTE_COLORS[v]}}else{var d=v>=16?\"ansi-palette-\"+v:n[v>7?1:0][v%8][\"class\"];if(p){u.fg=d}else{u.bg=d}}}}else if(g===\"2\"&&c.length>=3){var _=parseInt(c.shift());var b=parseInt(c.shift());var y=parseInt(c.shift());if(_>=0&&_<=255&&b>=0&&b<=255&&y>=0&&y<=255){var k=_+\", \"+b+\", \"+y;if(!i){if(p){u.fg=k}else{u.bg=k}}else{if(p){u.fg=\"ansi-truecolor\";u.fg_truecolor=k}else{u.bg=\"ansi-truecolor\";u.bg_truecolor=k}}}}}}}if(u.fg===null&&u.bg===null&&u.decoration===null){return o}else{var T=[];var m=[];var w={};o.fg=u.fg;o.bg=u.bg;o.fg_truecolor=u.fg_truecolor;o.bg_truecolor=u.bg_truecolor;o.decoration=u.decoration;o.was_processed=true;return o}}},{key:\"processChunk\",value:function processChunk(e,r,n){var s=this;var i=this;r=r||{};var t=this.processChunkJson(e,r,n);if(r.json){return t}if(t.isEmpty()){return\"\"}if(!t.was_processed){return t.content}var o=r.use_classes;var a=[];var l=[];var c={};var u=function render_data(e){var r=[];var n=void 0;for(n in e){if(e.hasOwnProperty(n)){r.push(\"data-\"+n+'=\"'+s.escapeForHtml(e[n])+'\"')}}return r.length>0?\" \"+r.join(\" \"):\"\"};if(t.fg){if(o){l.push(t.fg+\"-fg\");if(t.fg_truecolor!==null){c[\"ansi-truecolor-fg\"]=t.fg_truecolor;t.fg_truecolor=null}}else{a.push(\"color:rgb(\"+t.fg+\")\")}}if(t.bg){if(o){l.push(t.bg+\"-bg\");if(t.bg_truecolor!==null){c[\"ansi-truecolor-bg\"]=t.bg_truecolor;t.bg_truecolor=null}}else{a.push(\"background-color:rgb(\"+t.bg+\")\")}}if(t.decoration){if(o){l.push(\"ansi-\"+t.decoration)}else if(t.decoration===\"bold\"){a.push(\"font-weight:bold\")}else if(t.decoration===\"dim\"){a.push(\"opacity:0.5\")}else if(t.decoration===\"italic\"){a.push(\"font-style:italic\")}else if(t.decoration===\"reverse\"){a.push(\"filter:invert(100%)\")}else if(t.decoration===\"hidden\"){a.push(\"visibility:hidden\")}else if(t.decoration===\"strikethrough\"){a.push(\"text-decoration:line-through\")}else{a.push(\"text-decoration:\"+t.decoration)}}if(o){return'<span class=\"'+l.join(\" \")+'\"'+u(c)+\">\"+t.content+\"</span>\"}else{return'<span style=\"'+a.join(\";\")+'\"'+u(c)+\">\"+t.content+\"</span>\"}}}]);return Anser}();e.exports=s}};var r={};function __nccwpck_require__(n){var s=r[n];if(s!==undefined){return s.exports}var i=r[n]={exports:{}};var t=true;try{e[n](i,i.exports,__nccwpck_require__);t=false}finally{if(t)delete r[n]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n=__nccwpck_require__(211);module.exports=n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Fuc2VyL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFBLE1BQU0sYUFBYSxPQUFPLFFBQVEsaUJBQWlCLCtCQUErQixZQUFZLFdBQVcsS0FBSyxXQUFXLGlDQUFpQyxvQkFBb0IsK0JBQStCLGtDQUFrQyx1QkFBdUIscUNBQXFDLDJCQUEyQixVQUFVLEdBQUcsOEJBQThCLHNCQUFzQiwwREFBMEQsU0FBUyxtQ0FBbUMsRUFBRSxtQ0FBbUMsRUFBRSxxQ0FBcUMsRUFBRSx3Q0FBd0MsRUFBRSxvQ0FBb0MsRUFBRSx5Q0FBeUMsRUFBRSxzQ0FBc0MsRUFBRSx1Q0FBdUMsSUFBSSw2Q0FBNkMsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxnREFBZ0QsRUFBRSw2Q0FBNkMsRUFBRSxpREFBaUQsRUFBRSw4Q0FBOEMsRUFBRSxnREFBZ0QsR0FBRyxpQkFBaUIsZUFBZSxvREFBb0Qsb0NBQW9DLEVBQUUsd0NBQXdDLDhCQUE4QixFQUFFLGdEQUFnRCxtQ0FBbUMsRUFBRSxnREFBZ0QsbUNBQW1DLEVBQUUsOENBQThDLGlDQUFpQyxHQUFHLGlCQUFpQiw0QkFBNEIseURBQXlELGNBQWMsVUFBVSxpREFBaUQsdUJBQXVCLFlBQVksSUFBSSxLQUFLLFlBQVksSUFBSSxLQUFLLHlDQUF5Qyw2QkFBNkIsNkJBQTZCLGlDQUFpQywrQkFBK0IsWUFBWSxJQUFJLEtBQUssWUFBWSxJQUFJLEtBQUssWUFBWSxJQUFJLEtBQUsscUNBQXFDLFFBQVEsWUFBWSxLQUFLLFdBQVcscUNBQXFDLEVBQUUsb0RBQW9ELHdDQUF3QyxvQkFBb0IsY0FBYyxjQUFjLEtBQUssSUFBSSxFQUFFLHdDQUF3QyxzREFBc0Qsa0NBQWtDLElBQUksRUFBRSxnREFBZ0QsK0JBQStCLEVBQUUsZ0RBQWdELFFBQVEsWUFBWSxrQkFBa0IsK0JBQStCLEVBQUUsOENBQThDLHdCQUF3QixTQUFTLEVBQUUsNENBQTRDLFdBQVcsV0FBVyx3QkFBd0IsZ0JBQWdCLDRCQUE0QixLQUFLLHlCQUF5Qix5QkFBeUIsNkJBQTZCLEdBQUcsY0FBYyw2QkFBNkIsWUFBWSx3QkFBd0IsYUFBYSxtQkFBbUIsd0JBQXdCLG1CQUFtQixHQUFHLFNBQVMsS0FBSyxhQUFhLG1CQUFtQixFQUFFLDhEQUE4RCwwQkFBMEIsR0FBRyxxRUFBcUUsOEJBQThCLE9BQU8sbUpBQW1KLG1CQUFtQixvQ0FBb0MseUNBQXlDLGVBQWUscUJBQXFCLG1CQUFtQixHQUFHLDBCQUEwQixTQUFTLE9BQU8sU0FBUyxXQUFXLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixvQkFBb0IsNEJBQTRCLGVBQWUsb0JBQW9CLGVBQWUsbUJBQW1CLGNBQWMsc0JBQXNCLGNBQWMseUJBQXlCLGNBQWMscUJBQXFCLGVBQWUsdUJBQXVCLGVBQWUsc0JBQXNCLGVBQWUsNkJBQTZCLGVBQWUsVUFBVSxlQUFlLFVBQVUscUJBQXFCLG1CQUFtQixxQkFBcUIsbUJBQW1CLHFCQUFxQixtQkFBbUIsdUJBQXVCLG1CQUFtQix3QkFBd0IsYUFBYSxnQkFBZ0IsZ0JBQWdCLHlCQUF5QiwwQkFBMEIsaUJBQWlCLE9BQU8seUJBQXlCLGlCQUFpQixNQUFNLDRCQUE0QixLQUFLLDZCQUE2QixLQUFLLHVEQUF1RCxNQUFNLE9BQU8sS0FBSyxVQUFVLDhCQUE4QiwwQkFBMEIsMEJBQTBCLDBCQUEwQiw2Q0FBNkMsc0JBQXNCLE9BQU8sTUFBTSxPQUFPLEtBQUssUUFBUSxLQUFLLE1BQU0sc0JBQXNCLGlCQUFpQixLQUFLLHNCQUFzQix1QkFBdUIsa0RBQWtELFNBQVMsS0FBSyxTQUFTLFNBQVMsU0FBUyxVQUFVLFVBQVUsOEJBQThCLDhCQUE4QiwwQkFBMEIscUJBQXFCLFdBQVcsRUFBRSxzREFBc0QsV0FBVyxXQUFXLFFBQVEsbUNBQW1DLFdBQVcsU0FBUyxnQkFBZ0IsU0FBUyxxQkFBcUIsaUJBQWlCLG9CQUFvQixTQUFTLFNBQVMsU0FBUyw4QkFBOEIsU0FBUyxhQUFhLFlBQVksd0JBQXdCLGtEQUFrRCxzQ0FBc0MsU0FBUyxNQUFNLG1CQUFtQiwwQkFBMEIsc0NBQXNDLHFCQUFxQixLQUFLLCtCQUErQixTQUFTLE1BQU0sbUJBQW1CLDBCQUEwQixzQ0FBc0MscUJBQXFCLEtBQUssMENBQTBDLGlCQUFpQixNQUFNLDZCQUE2QiwrQkFBK0IsMkJBQTJCLDhCQUE4QixzQkFBc0IsaUNBQWlDLDRCQUE0QixrQ0FBa0MsOEJBQThCLGlDQUFpQyw0QkFBNEIsd0NBQXdDLHVDQUF1QyxLQUFLLHlDQUF5QyxNQUFNLG1FQUFtRSxLQUFLLCtCQUErQixzQ0FBc0MsR0FBRyxhQUFhLEdBQUcsY0FBYyxTQUFTLGdDQUFnQyxXQUFXLGtCQUFrQixpQkFBaUIsWUFBWSxZQUFZLFdBQVcsSUFBSSxzQ0FBc0MsUUFBUSxRQUFRLGlCQUFpQixpQkFBaUIsaUZBQWlGLCtCQUErQixpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9hbnNlci9pbmRleC5qcz8xZTI1Il0sInNvdXJjZXNDb250ZW50IjpbIigoKT0+e1widXNlIHN0cmljdFwiO3ZhciBlPXsyMTE6ZT0+e3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgcz1yW25dO3MuZW51bWVyYWJsZT1zLmVudW1lcmFibGV8fGZhbHNlO3MuY29uZmlndXJhYmxlPXRydWU7aWYoXCJ2YWx1ZVwiaW4gcylzLndyaXRhYmxlPXRydWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscy5rZXkscyl9fXJldHVybiBmdW5jdGlvbihlLHIsbil7aWYocilkZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpO2lmKG4pZGVmaW5lUHJvcGVydGllcyhlLG4pO3JldHVybiBlfX0oKTtmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soZSxyKXtpZighKGUgaW5zdGFuY2VvZiByKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX19dmFyIG49W1t7Y29sb3I6XCIwLCAwLCAwXCIsY2xhc3M6XCJhbnNpLWJsYWNrXCJ9LHtjb2xvcjpcIjE4NywgMCwgMFwiLGNsYXNzOlwiYW5zaS1yZWRcIn0se2NvbG9yOlwiMCwgMTg3LCAwXCIsY2xhc3M6XCJhbnNpLWdyZWVuXCJ9LHtjb2xvcjpcIjE4NywgMTg3LCAwXCIsY2xhc3M6XCJhbnNpLXllbGxvd1wifSx7Y29sb3I6XCIwLCAwLCAxODdcIixjbGFzczpcImFuc2ktYmx1ZVwifSx7Y29sb3I6XCIxODcsIDAsIDE4N1wiLGNsYXNzOlwiYW5zaS1tYWdlbnRhXCJ9LHtjb2xvcjpcIjAsIDE4NywgMTg3XCIsY2xhc3M6XCJhbnNpLWN5YW5cIn0se2NvbG9yOlwiMjU1LDI1NSwyNTVcIixjbGFzczpcImFuc2ktd2hpdGVcIn1dLFt7Y29sb3I6XCI4NSwgODUsIDg1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1ibGFja1wifSx7Y29sb3I6XCIyNTUsIDg1LCA4NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtcmVkXCJ9LHtjb2xvcjpcIjAsIDI1NSwgMFwiLGNsYXNzOlwiYW5zaS1icmlnaHQtZ3JlZW5cIn0se2NvbG9yOlwiMjU1LCAyNTUsIDg1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC15ZWxsb3dcIn0se2NvbG9yOlwiODUsIDg1LCAyNTVcIixjbGFzczpcImFuc2ktYnJpZ2h0LWJsdWVcIn0se2NvbG9yOlwiMjU1LCA4NSwgMjU1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1tYWdlbnRhXCJ9LHtjb2xvcjpcIjg1LCAyNTUsIDI1NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtY3lhblwifSx7Y29sb3I6XCIyNTUsIDI1NSwgMjU1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC13aGl0ZVwifV1dO3ZhciBzPWZ1bmN0aW9uKCl7cihBbnNlcixudWxsLFt7a2V5OlwiZXNjYXBlRm9ySHRtbFwiLHZhbHVlOmZ1bmN0aW9uIGVzY2FwZUZvckh0bWwoZSl7cmV0dXJuKG5ldyBBbnNlcikuZXNjYXBlRm9ySHRtbChlKX19LHtrZXk6XCJsaW5raWZ5XCIsdmFsdWU6ZnVuY3Rpb24gbGlua2lmeShlKXtyZXR1cm4obmV3IEFuc2VyKS5saW5raWZ5KGUpfX0se2tleTpcImFuc2lUb0h0bWxcIix2YWx1ZTpmdW5jdGlvbiBhbnNpVG9IdG1sKGUscil7cmV0dXJuKG5ldyBBbnNlcikuYW5zaVRvSHRtbChlLHIpfX0se2tleTpcImFuc2lUb0pzb25cIix2YWx1ZTpmdW5jdGlvbiBhbnNpVG9Kc29uKGUscil7cmV0dXJuKG5ldyBBbnNlcikuYW5zaVRvSnNvbihlLHIpfX0se2tleTpcImFuc2lUb1RleHRcIix2YWx1ZTpmdW5jdGlvbiBhbnNpVG9UZXh0KGUpe3JldHVybihuZXcgQW5zZXIpLmFuc2lUb1RleHQoZSl9fV0pO2Z1bmN0aW9uIEFuc2VyKCl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsQW5zZXIpO3RoaXMuZmc9dGhpcy5iZz10aGlzLmZnX3RydWVjb2xvcj10aGlzLmJnX3RydWVjb2xvcj1udWxsO3RoaXMuYnJpZ2h0PTB9cihBbnNlcixbe2tleTpcInNldHVwUGFsZXR0ZVwiLHZhbHVlOmZ1bmN0aW9uIHNldHVwUGFsZXR0ZSgpe3RoaXMuUEFMRVRURV9DT0xPUlM9W107Zm9yKHZhciBlPTA7ZTwyOysrZSl7Zm9yKHZhciByPTA7cjw4Oysrcil7dGhpcy5QQUxFVFRFX0NPTE9SUy5wdXNoKG5bZV1bcl0uY29sb3IpfX12YXIgcz1bMCw5NSwxMzUsMTc1LDIxNSwyNTVdO3ZhciBpPWZ1bmN0aW9uIGZvcm1hdChlLHIsbil7cmV0dXJuIHNbZV0rXCIsIFwiK3Nbcl0rXCIsIFwiK3Nbbl19O3ZhciB0PXZvaWQgMCxvPXZvaWQgMCxhPXZvaWQgMDtmb3IodmFyIGw9MDtsPDY7KytsKXtmb3IodmFyIGM9MDtjPDY7KytjKXtmb3IodmFyIHU9MDt1PDY7Kyt1KXt0aGlzLlBBTEVUVEVfQ09MT1JTLnB1c2goaShsLGMsdSkpfX19dmFyIGY9ODtmb3IodmFyIGg9MDtoPDI0OysraCxmKz0xMCl7dGhpcy5QQUxFVFRFX0NPTE9SUy5wdXNoKGkoZixmLGYpKX19fSx7a2V5OlwiZXNjYXBlRm9ySHRtbFwiLHZhbHVlOmZ1bmN0aW9uIGVzY2FwZUZvckh0bWwoZSl7cmV0dXJuIGUucmVwbGFjZSgvWyY8Pl0vZ20sKGZ1bmN0aW9uKGUpe3JldHVybiBlPT1cIiZcIj9cIiZhbXA7XCI6ZT09XCI8XCI/XCImbHQ7XCI6ZT09XCI+XCI/XCImZ3Q7XCI6XCJcIn0pKX19LHtrZXk6XCJsaW5raWZ5XCIsdmFsdWU6ZnVuY3Rpb24gbGlua2lmeShlKXtyZXR1cm4gZS5yZXBsYWNlKC8oaHR0cHM/OlxcL1xcL1teXFxzXSspL2dtLChmdW5jdGlvbihlKXtyZXR1cm4nPGEgaHJlZj1cIicrZSsnXCI+JytlK1wiPC9hPlwifSkpfX0se2tleTpcImFuc2lUb0h0bWxcIix2YWx1ZTpmdW5jdGlvbiBhbnNpVG9IdG1sKGUscil7cmV0dXJuIHRoaXMucHJvY2VzcyhlLHIsdHJ1ZSl9fSx7a2V5OlwiYW5zaVRvSnNvblwiLHZhbHVlOmZ1bmN0aW9uIGFuc2lUb0pzb24oZSxyKXtyPXJ8fHt9O3IuanNvbj10cnVlO3IuY2xlYXJMaW5lPWZhbHNlO3JldHVybiB0aGlzLnByb2Nlc3MoZSxyLHRydWUpfX0se2tleTpcImFuc2lUb1RleHRcIix2YWx1ZTpmdW5jdGlvbiBhbnNpVG9UZXh0KGUpe3JldHVybiB0aGlzLnByb2Nlc3MoZSx7fSxmYWxzZSl9fSx7a2V5OlwicHJvY2Vzc1wiLHZhbHVlOmZ1bmN0aW9uIHByb2Nlc3MoZSxyLG4pe3ZhciBzPXRoaXM7dmFyIGk9dGhpczt2YXIgdD1lLnNwbGl0KC9cXDAzM1xcWy8pO3ZhciBvPXQuc2hpZnQoKTtpZihyPT09dW5kZWZpbmVkfHxyPT09bnVsbCl7cj17fX1yLmNsZWFyTGluZT0vXFxyLy50ZXN0KGUpO3ZhciBhPXQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gcy5wcm9jZXNzQ2h1bmsoZSxyLG4pfSkpO2lmKHImJnIuanNvbil7dmFyIGw9aS5wcm9jZXNzQ2h1bmtKc29uKFwiXCIpO2wuY29udGVudD1vO2wuY2xlYXJMaW5lPXIuY2xlYXJMaW5lO2EudW5zaGlmdChsKTtpZihyLnJlbW92ZV9lbXB0eSl7YT1hLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaXNFbXB0eSgpfSkpfXJldHVybiBhfWVsc2V7YS51bnNoaWZ0KG8pfXJldHVybiBhLmpvaW4oXCJcIil9fSx7a2V5OlwicHJvY2Vzc0NodW5rSnNvblwiLHZhbHVlOmZ1bmN0aW9uIHByb2Nlc3NDaHVua0pzb24oZSxyLHMpe3I9dHlwZW9mIHI9PVwidW5kZWZpbmVkXCI/e306cjt2YXIgaT1yLnVzZV9jbGFzc2VzPXR5cGVvZiByLnVzZV9jbGFzc2VzIT1cInVuZGVmaW5lZFwiJiZyLnVzZV9jbGFzc2VzO3ZhciB0PXIua2V5PWk/XCJjbGFzc1wiOlwiY29sb3JcIjt2YXIgbz17Y29udGVudDplLGZnOm51bGwsYmc6bnVsbCxmZ190cnVlY29sb3I6bnVsbCxiZ190cnVlY29sb3I6bnVsbCxjbGVhckxpbmU6ci5jbGVhckxpbmUsZGVjb3JhdGlvbjpudWxsLHdhc19wcm9jZXNzZWQ6ZmFsc2UsaXNFbXB0eTpmdW5jdGlvbiBpc0VtcHR5KCl7cmV0dXJuIW8uY29udGVudH19O3ZhciBhPWUubWF0Y2goL14oWyFcXHgzYy1cXHgzZl0qKShbXFxkO10qKShbXFx4MjAtXFx4MmNdKltcXHg0MC1cXHg3ZV0pKFtcXHNcXFNdKikvbSk7aWYoIWEpcmV0dXJuIG87dmFyIGw9by5jb250ZW50PWFbNF07dmFyIGM9YVsyXS5zcGxpdChcIjtcIik7aWYoYVsxXSE9PVwiXCJ8fGFbM10hPT1cIm1cIil7cmV0dXJuIG99aWYoIXMpe3JldHVybiBvfXZhciB1PXRoaXM7dS5kZWNvcmF0aW9uPW51bGw7d2hpbGUoYy5sZW5ndGg+MCl7dmFyIGY9Yy5zaGlmdCgpO3ZhciBoPXBhcnNlSW50KGYpO2lmKGlzTmFOKGgpfHxoPT09MCl7dS5mZz11LmJnPXUuZGVjb3JhdGlvbj1udWxsfWVsc2UgaWYoaD09PTEpe3UuZGVjb3JhdGlvbj1cImJvbGRcIn1lbHNlIGlmKGg9PT0yKXt1LmRlY29yYXRpb249XCJkaW1cIn1lbHNlIGlmKGg9PTMpe3UuZGVjb3JhdGlvbj1cIml0YWxpY1wifWVsc2UgaWYoaD09NCl7dS5kZWNvcmF0aW9uPVwidW5kZXJsaW5lXCJ9ZWxzZSBpZihoPT01KXt1LmRlY29yYXRpb249XCJibGlua1wifWVsc2UgaWYoaD09PTcpe3UuZGVjb3JhdGlvbj1cInJldmVyc2VcIn1lbHNlIGlmKGg9PT04KXt1LmRlY29yYXRpb249XCJoaWRkZW5cIn1lbHNlIGlmKGg9PT05KXt1LmRlY29yYXRpb249XCJzdHJpa2V0aHJvdWdoXCJ9ZWxzZSBpZihoPT0zOSl7dS5mZz1udWxsfWVsc2UgaWYoaD09NDkpe3UuYmc9bnVsbH1lbHNlIGlmKGg+PTMwJiZoPDM4KXt1LmZnPW5bMF1baCUxMF1bdF19ZWxzZSBpZihoPj05MCYmaDw5OCl7dS5mZz1uWzFdW2glMTBdW3RdfWVsc2UgaWYoaD49NDAmJmg8NDgpe3UuYmc9blswXVtoJTEwXVt0XX1lbHNlIGlmKGg+PTEwMCYmaDwxMDgpe3UuYmc9blsxXVtoJTEwXVt0XX1lbHNlIGlmKGg9PT0zOHx8aD09PTQ4KXt2YXIgcD1oPT09Mzg7aWYoYy5sZW5ndGg+PTEpe3ZhciBnPWMuc2hpZnQoKTtpZihnPT09XCI1XCImJmMubGVuZ3RoPj0xKXt2YXIgdj1wYXJzZUludChjLnNoaWZ0KCkpO2lmKHY+PTAmJnY8PTI1NSl7aWYoIWkpe2lmKCF0aGlzLlBBTEVUVEVfQ09MT1JTKXt1LnNldHVwUGFsZXR0ZSgpfWlmKHApe3UuZmc9dGhpcy5QQUxFVFRFX0NPTE9SU1t2XX1lbHNle3UuYmc9dGhpcy5QQUxFVFRFX0NPTE9SU1t2XX19ZWxzZXt2YXIgZD12Pj0xNj9cImFuc2ktcGFsZXR0ZS1cIit2Om5bdj43PzE6MF1bdiU4XVtcImNsYXNzXCJdO2lmKHApe3UuZmc9ZH1lbHNle3UuYmc9ZH19fX1lbHNlIGlmKGc9PT1cIjJcIiYmYy5sZW5ndGg+PTMpe3ZhciBfPXBhcnNlSW50KGMuc2hpZnQoKSk7dmFyIGI9cGFyc2VJbnQoYy5zaGlmdCgpKTt2YXIgeT1wYXJzZUludChjLnNoaWZ0KCkpO2lmKF8+PTAmJl88PTI1NSYmYj49MCYmYjw9MjU1JiZ5Pj0wJiZ5PD0yNTUpe3ZhciBrPV8rXCIsIFwiK2IrXCIsIFwiK3k7aWYoIWkpe2lmKHApe3UuZmc9a31lbHNle3UuYmc9a319ZWxzZXtpZihwKXt1LmZnPVwiYW5zaS10cnVlY29sb3JcIjt1LmZnX3RydWVjb2xvcj1rfWVsc2V7dS5iZz1cImFuc2ktdHJ1ZWNvbG9yXCI7dS5iZ190cnVlY29sb3I9a319fX19fX1pZih1LmZnPT09bnVsbCYmdS5iZz09PW51bGwmJnUuZGVjb3JhdGlvbj09PW51bGwpe3JldHVybiBvfWVsc2V7dmFyIFQ9W107dmFyIG09W107dmFyIHc9e307by5mZz11LmZnO28uYmc9dS5iZztvLmZnX3RydWVjb2xvcj11LmZnX3RydWVjb2xvcjtvLmJnX3RydWVjb2xvcj11LmJnX3RydWVjb2xvcjtvLmRlY29yYXRpb249dS5kZWNvcmF0aW9uO28ud2FzX3Byb2Nlc3NlZD10cnVlO3JldHVybiBvfX19LHtrZXk6XCJwcm9jZXNzQ2h1bmtcIix2YWx1ZTpmdW5jdGlvbiBwcm9jZXNzQ2h1bmsoZSxyLG4pe3ZhciBzPXRoaXM7dmFyIGk9dGhpcztyPXJ8fHt9O3ZhciB0PXRoaXMucHJvY2Vzc0NodW5rSnNvbihlLHIsbik7aWYoci5qc29uKXtyZXR1cm4gdH1pZih0LmlzRW1wdHkoKSl7cmV0dXJuXCJcIn1pZighdC53YXNfcHJvY2Vzc2VkKXtyZXR1cm4gdC5jb250ZW50fXZhciBvPXIudXNlX2NsYXNzZXM7dmFyIGE9W107dmFyIGw9W107dmFyIGM9e307dmFyIHU9ZnVuY3Rpb24gcmVuZGVyX2RhdGEoZSl7dmFyIHI9W107dmFyIG49dm9pZCAwO2ZvcihuIGluIGUpe2lmKGUuaGFzT3duUHJvcGVydHkobikpe3IucHVzaChcImRhdGEtXCIrbisnPVwiJytzLmVzY2FwZUZvckh0bWwoZVtuXSkrJ1wiJyl9fXJldHVybiByLmxlbmd0aD4wP1wiIFwiK3Iuam9pbihcIiBcIik6XCJcIn07aWYodC5mZyl7aWYobyl7bC5wdXNoKHQuZmcrXCItZmdcIik7aWYodC5mZ190cnVlY29sb3IhPT1udWxsKXtjW1wiYW5zaS10cnVlY29sb3ItZmdcIl09dC5mZ190cnVlY29sb3I7dC5mZ190cnVlY29sb3I9bnVsbH19ZWxzZXthLnB1c2goXCJjb2xvcjpyZ2IoXCIrdC5mZytcIilcIil9fWlmKHQuYmcpe2lmKG8pe2wucHVzaCh0LmJnK1wiLWJnXCIpO2lmKHQuYmdfdHJ1ZWNvbG9yIT09bnVsbCl7Y1tcImFuc2ktdHJ1ZWNvbG9yLWJnXCJdPXQuYmdfdHJ1ZWNvbG9yO3QuYmdfdHJ1ZWNvbG9yPW51bGx9fWVsc2V7YS5wdXNoKFwiYmFja2dyb3VuZC1jb2xvcjpyZ2IoXCIrdC5iZytcIilcIil9fWlmKHQuZGVjb3JhdGlvbil7aWYobyl7bC5wdXNoKFwiYW5zaS1cIit0LmRlY29yYXRpb24pfWVsc2UgaWYodC5kZWNvcmF0aW9uPT09XCJib2xkXCIpe2EucHVzaChcImZvbnQtd2VpZ2h0OmJvbGRcIil9ZWxzZSBpZih0LmRlY29yYXRpb249PT1cImRpbVwiKXthLnB1c2goXCJvcGFjaXR5OjAuNVwiKX1lbHNlIGlmKHQuZGVjb3JhdGlvbj09PVwiaXRhbGljXCIpe2EucHVzaChcImZvbnQtc3R5bGU6aXRhbGljXCIpfWVsc2UgaWYodC5kZWNvcmF0aW9uPT09XCJyZXZlcnNlXCIpe2EucHVzaChcImZpbHRlcjppbnZlcnQoMTAwJSlcIil9ZWxzZSBpZih0LmRlY29yYXRpb249PT1cImhpZGRlblwiKXthLnB1c2goXCJ2aXNpYmlsaXR5OmhpZGRlblwiKX1lbHNlIGlmKHQuZGVjb3JhdGlvbj09PVwic3RyaWtldGhyb3VnaFwiKXthLnB1c2goXCJ0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdoXCIpfWVsc2V7YS5wdXNoKFwidGV4dC1kZWNvcmF0aW9uOlwiK3QuZGVjb3JhdGlvbil9fWlmKG8pe3JldHVybic8c3BhbiBjbGFzcz1cIicrbC5qb2luKFwiIFwiKSsnXCInK3UoYykrXCI+XCIrdC5jb250ZW50K1wiPC9zcGFuPlwifWVsc2V7cmV0dXJuJzxzcGFuIHN0eWxlPVwiJythLmpvaW4oXCI7XCIpKydcIicrdShjKStcIj5cIit0LmNvbnRlbnQrXCI8L3NwYW4+XCJ9fX1dKTtyZXR1cm4gQW5zZXJ9KCk7ZS5leHBvcnRzPXN9fTt2YXIgcj17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKG4pe3ZhciBzPXJbbl07aWYocyE9PXVuZGVmaW5lZCl7cmV0dXJuIHMuZXhwb3J0c312YXIgaT1yW25dPXtleHBvcnRzOnt9fTt2YXIgdD10cnVlO3RyeXtlW25dKGksaS5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO3Q9ZmFsc2V9ZmluYWxseXtpZih0KWRlbGV0ZSByW25dfXJldHVybiBpLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciBuPV9fbmNjd3Bja19yZXF1aXJlX18oMjExKTttb2R1bGUuZXhwb3J0cz1ufSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/compiled/anser/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/compiled/css.escape/css.escape.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/compiled/css.escape/css.escape.js ***! + \******************************************************************/ +/***/ ((module) => { + +eval("(()=>{var e={553:function(e){(function(r,t){if(true){e.exports=t(r)}else{}})(typeof global!=\"undefined\"?global:this,(function(e){if(e.CSS&&e.CSS.escape){return e.CSS.escape}var cssEscape=function(e){if(arguments.length==0){throw new TypeError(\"`CSS.escape` requires an argument.\")}var r=String(e);var t=r.length;var n=-1;var a;var i=\"\";var u=r.charCodeAt(0);while(++n<t){a=r.charCodeAt(n);if(a==0){i+=\"�\";continue}if(a>=1&&a<=31||a==127||n==0&&a>=48&&a<=57||n==1&&a>=48&&a<=57&&u==45){i+=\"\\\\\"+a.toString(16)+\" \";continue}if(n==0&&t==1&&a==45){i+=\"\\\\\"+r.charAt(n);continue}if(a>=128||a==45||a==95||a>=48&&a<=57||a>=65&&a<=90||a>=97&&a<=122){i+=r.charAt(n);continue}i+=\"\\\\\"+r.charAt(n)}return i};if(!e.CSS){e.CSS={}}e.CSS.escape=cssEscape;return cssEscape}))}};var r={};function __nccwpck_require__(t){var n=r[t];if(n!==undefined){return n.exports}var a=r[t]={exports:{}};var i=true;try{e[t].call(a.exports,a,a.exports,__nccwpck_require__);i=false}finally{if(i)delete r[t]}return a.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(553);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy5lc2NhcGUvY3NzLmVzY2FwZS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sZ0JBQWdCLGVBQWUsR0FBRyxJQUFJLEVBQUUsZUFBZSxJQUFJLEVBQUUsQ0FBQyxzREFBc0Qsd0JBQXdCLG9CQUFvQiwwQkFBMEIsd0JBQXdCLDBEQUEwRCxnQkFBZ0IsZUFBZSxTQUFTLE1BQU0sU0FBUyxzQkFBc0IsYUFBYSxrQkFBa0IsU0FBUyxPQUFPLFNBQVMsdUVBQXVFLDJCQUEyQixTQUFTLHNCQUFzQixvQkFBb0IsU0FBUyxvRUFBb0UsZUFBZSxTQUFTLG9CQUFvQixVQUFVLFdBQVcsU0FBUyx1QkFBdUIsaUJBQWlCLEtBQUssU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUkscURBQXFELFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLGlGQUFpRiwrQkFBK0IsaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvY3NzLmVzY2FwZS9jc3MuZXNjYXBlLmpzP2VhMTciXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57dmFyIGU9ezU1MzpmdW5jdGlvbihlKXsoZnVuY3Rpb24ocix0KXtpZih0cnVlKXtlLmV4cG9ydHM9dChyKX1lbHNle319KSh0eXBlb2YgZ2xvYmFsIT1cInVuZGVmaW5lZFwiP2dsb2JhbDp0aGlzLChmdW5jdGlvbihlKXtpZihlLkNTUyYmZS5DU1MuZXNjYXBlKXtyZXR1cm4gZS5DU1MuZXNjYXBlfXZhciBjc3NFc2NhcGU9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aD09MCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcImBDU1MuZXNjYXBlYCByZXF1aXJlcyBhbiBhcmd1bWVudC5cIil9dmFyIHI9U3RyaW5nKGUpO3ZhciB0PXIubGVuZ3RoO3ZhciBuPS0xO3ZhciBhO3ZhciBpPVwiXCI7dmFyIHU9ci5jaGFyQ29kZUF0KDApO3doaWxlKCsrbjx0KXthPXIuY2hhckNvZGVBdChuKTtpZihhPT0wKXtpKz1cIu+/vVwiO2NvbnRpbnVlfWlmKGE+PTEmJmE8PTMxfHxhPT0xMjd8fG49PTAmJmE+PTQ4JiZhPD01N3x8bj09MSYmYT49NDgmJmE8PTU3JiZ1PT00NSl7aSs9XCJcXFxcXCIrYS50b1N0cmluZygxNikrXCIgXCI7Y29udGludWV9aWYobj09MCYmdD09MSYmYT09NDUpe2krPVwiXFxcXFwiK3IuY2hhckF0KG4pO2NvbnRpbnVlfWlmKGE+PTEyOHx8YT09NDV8fGE9PTk1fHxhPj00OCYmYTw9NTd8fGE+PTY1JiZhPD05MHx8YT49OTcmJmE8PTEyMil7aSs9ci5jaGFyQXQobik7Y29udGludWV9aSs9XCJcXFxcXCIrci5jaGFyQXQobil9cmV0dXJuIGl9O2lmKCFlLkNTUyl7ZS5DU1M9e319ZS5DU1MuZXNjYXBlPWNzc0VzY2FwZTtyZXR1cm4gY3NzRXNjYXBlfSkpfX07dmFyIHI9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyh0KXt2YXIgbj1yW3RdO2lmKG4hPT11bmRlZmluZWQpe3JldHVybiBuLmV4cG9ydHN9dmFyIGE9clt0XT17ZXhwb3J0czp7fX07dmFyIGk9dHJ1ZTt0cnl7ZVt0XS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtpPWZhbHNlfWZpbmFsbHl7aWYoaSlkZWxldGUgclt0XX1yZXR1cm4gYS5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgdD1fX25jY3dwY2tfcmVxdWlyZV9fKDU1Myk7bW9kdWxlLmV4cG9ydHM9dH0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/compiled/css.escape/css.escape.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/compiled/platform/platform.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/compiled/platform/platform.js ***! + \**************************************************************/ +/***/ ((module) => { + +eval("(()=>{var e={541:function(e,i,t){e=t.nmd(e);\n/*!\n * Platform.js v1.3.6\n * Copyright 2014-2020 Benjamin Tan\n * Copyright 2011-2013 John-David Dalton\n * Available under MIT license\n */(function(){\"use strict\";var t={function:true,object:true};var r=t[typeof window]&&window||this;var a=r;var n=t[typeof i]&&i;var o=t[\"object\"]&&e&&!e.nodeType&&e;var l=n&&o&&typeof global==\"object\"&&global;if(l&&(l.global===l||l.window===l||l.self===l)){r=l}var s=Math.pow(2,53)-1;var f=/\\bOpera/;var b=this;var c=Object.prototype;var p=c.hasOwnProperty;var u=c.toString;function capitalize(e){e=String(e);return e.charAt(0).toUpperCase()+e.slice(1)}function cleanupOS(e,i,t){var r={\"10.0\":\"10\",6.4:\"10 Technical Preview\",6.3:\"8.1\",6.2:\"8\",6.1:\"Server 2008 R2 / 7\",\"6.0\":\"Server 2008 / Vista\",5.2:\"Server 2003 / XP 64-bit\",5.1:\"XP\",5.01:\"2000 SP1\",\"5.0\":\"2000\",\"4.0\":\"NT\",\"4.90\":\"ME\"};if(i&&t&&/^Win/i.test(e)&&!/^Windows Phone /i.test(e)&&(r=r[/[\\d.]+$/.exec(e)])){e=\"Windows \"+r}e=String(e);if(i&&t){e=e.replace(RegExp(i,\"i\"),t)}e=format(e.replace(/ ce$/i,\" CE\").replace(/\\bhpw/i,\"web\").replace(/\\bMacintosh\\b/,\"Mac OS\").replace(/_PowerPC\\b/i,\" OS\").replace(/\\b(OS X) [^ \\d]+/i,\"$1\").replace(/\\bMac (OS X)\\b/,\"$1\").replace(/\\/(\\d)/,\" $1\").replace(/_/g,\".\").replace(/(?: BePC|[ .]*fc[ \\d.]+)$/i,\"\").replace(/\\bx86\\.64\\b/gi,\"x86_64\").replace(/\\b(Windows Phone) OS\\b/,\"$1\").replace(/\\b(Chrome OS \\w+) [\\d.]+\\b/,\"$1\").split(\" on \")[0]);return e}function each(e,i){var t=-1,r=e?e.length:0;if(typeof r==\"number\"&&r>-1&&r<=s){while(++t<r){i(e[t],t,e)}}else{forOwn(e,i)}}function format(e){e=trim(e);return/^(?:webOS|i(?:OS|P))/.test(e)?e:capitalize(e)}function forOwn(e,i){for(var t in e){if(p.call(e,t)){i(e[t],t,e)}}}function getClassOf(e){return e==null?capitalize(e):u.call(e).slice(8,-1)}function isHostType(e,i){var t=e!=null?typeof e[i]:\"number\";return!/^(?:boolean|number|string|undefined)$/.test(t)&&(t==\"object\"?!!e[i]:true)}function qualify(e){return String(e).replace(/([ -])(?!$)/g,\"$1?\")}function reduce(e,i){var t=null;each(e,(function(r,a){t=i(t,r,a,e)}));return t}function trim(e){return String(e).replace(/^ +| +$/g,\"\")}function parse(e){var i=r;var t=e&&typeof e==\"object\"&&getClassOf(e)!=\"String\";if(t){i=e;e=null}var n=i.navigator||{};var o=n.userAgent||\"\";e||(e=o);var l=t||b==a;var s=t?!!n.likeChrome:/\\bChrome\\b/.test(e)&&!/internal|\\n/i.test(u.toString());var c=\"Object\",p=t?c:\"ScriptBridgingProxyObject\",d=t?c:\"Environment\",S=t&&i.java?\"JavaPackage\":getClassOf(i.java),x=t?c:\"RuntimeObject\";var m=/\\bJava/.test(S)&&i.java;var g=m&&getClassOf(i.environment)==d;var h=m?\"a\":\"α\";var v=m?\"b\":\"β\";var O=i.document||{};var y=i.operamini||i.opera;var w=f.test(w=t&&y?y[\"[[Class]]\"]:getClassOf(y))?w:y=null;var M;var E=e;var P=[];var C=null;var k=e==o;var B=k&&y&&typeof y.version==\"function\"&&y.version();var W;var _=getLayout([{label:\"EdgeHTML\",pattern:\"Edge\"},\"Trident\",{label:\"WebKit\",pattern:\"AppleWebKit\"},\"iCab\",\"Presto\",\"NetFront\",\"Tasman\",\"KHTML\",\"Gecko\"]);var R=getName([\"Adobe AIR\",\"Arora\",\"Avant Browser\",\"Breach\",\"Camino\",\"Electron\",\"Epiphany\",\"Fennec\",\"Flock\",\"Galeon\",\"GreenBrowser\",\"iCab\",\"Iceweasel\",\"K-Meleon\",\"Konqueror\",\"Lunascape\",\"Maxthon\",{label:\"Microsoft Edge\",pattern:\"(?:Edge|Edg|EdgA|EdgiOS)\"},\"Midori\",\"Nook Browser\",\"PaleMoon\",\"PhantomJS\",\"Raven\",\"Rekonq\",\"RockMelt\",{label:\"Samsung Internet\",pattern:\"SamsungBrowser\"},\"SeaMonkey\",{label:\"Silk\",pattern:\"(?:Cloud9|Silk-Accelerated)\"},\"Sleipnir\",\"SlimBrowser\",{label:\"SRWare Iron\",pattern:\"Iron\"},\"Sunrise\",\"Swiftfox\",\"Vivaldi\",\"Waterfox\",\"WebPositive\",{label:\"Yandex Browser\",pattern:\"YaBrowser\"},{label:\"UC Browser\",pattern:\"UCBrowser\"},\"Opera Mini\",{label:\"Opera Mini\",pattern:\"OPiOS\"},\"Opera\",{label:\"Opera\",pattern:\"OPR\"},\"Chromium\",\"Chrome\",{label:\"Chrome\",pattern:\"(?:HeadlessChrome)\"},{label:\"Chrome Mobile\",pattern:\"(?:CriOS|CrMo)\"},{label:\"Firefox\",pattern:\"(?:Firefox|Minefield)\"},{label:\"Firefox for iOS\",pattern:\"FxiOS\"},{label:\"IE\",pattern:\"IEMobile\"},{label:\"IE\",pattern:\"MSIE\"},\"Safari\"]);var A=getProduct([{label:\"BlackBerry\",pattern:\"BB10\"},\"BlackBerry\",{label:\"Galaxy S\",pattern:\"GT-I9000\"},{label:\"Galaxy S2\",pattern:\"GT-I9100\"},{label:\"Galaxy S3\",pattern:\"GT-I9300\"},{label:\"Galaxy S4\",pattern:\"GT-I9500\"},{label:\"Galaxy S5\",pattern:\"SM-G900\"},{label:\"Galaxy S6\",pattern:\"SM-G920\"},{label:\"Galaxy S6 Edge\",pattern:\"SM-G925\"},{label:\"Galaxy S7\",pattern:\"SM-G930\"},{label:\"Galaxy S7 Edge\",pattern:\"SM-G935\"},\"Google TV\",\"Lumia\",\"iPad\",\"iPod\",\"iPhone\",\"Kindle\",{label:\"Kindle Fire\",pattern:\"(?:Cloud9|Silk-Accelerated)\"},\"Nexus\",\"Nook\",\"PlayBook\",\"PlayStation Vita\",\"PlayStation\",\"TouchPad\",\"Transformer\",{label:\"Wii U\",pattern:\"WiiU\"},\"Wii\",\"Xbox One\",{label:\"Xbox 360\",pattern:\"Xbox\"},\"Xoom\"]);var I=getManufacturer({Apple:{iPad:1,iPhone:1,iPod:1},Alcatel:{},Archos:{},Amazon:{Kindle:1,\"Kindle Fire\":1},Asus:{Transformer:1},\"Barnes & Noble\":{Nook:1},BlackBerry:{PlayBook:1},Google:{\"Google TV\":1,Nexus:1},HP:{TouchPad:1},HTC:{},Huawei:{},Lenovo:{},LG:{},Microsoft:{Xbox:1,\"Xbox One\":1},Motorola:{Xoom:1},Nintendo:{\"Wii U\":1,Wii:1},Nokia:{Lumia:1},Oppo:{},Samsung:{\"Galaxy S\":1,\"Galaxy S2\":1,\"Galaxy S3\":1,\"Galaxy S4\":1},Sony:{PlayStation:1,\"PlayStation Vita\":1},Xiaomi:{Mi:1,Redmi:1}});var T=getOS([\"Windows Phone\",\"KaiOS\",\"Android\",\"CentOS\",{label:\"Chrome OS\",pattern:\"CrOS\"},\"Debian\",{label:\"DragonFly BSD\",pattern:\"DragonFly\"},\"Fedora\",\"FreeBSD\",\"Gentoo\",\"Haiku\",\"Kubuntu\",\"Linux Mint\",\"OpenBSD\",\"Red Hat\",\"SuSE\",\"Ubuntu\",\"Xubuntu\",\"Cygwin\",\"Symbian OS\",\"hpwOS\",\"webOS \",\"webOS\",\"Tablet OS\",\"Tizen\",\"Linux\",\"Mac OS X\",\"Macintosh\",\"Mac\",\"Windows 98;\",\"Windows \"]);function getLayout(i){return reduce(i,(function(i,t){return i||RegExp(\"\\\\b\"+(t.pattern||qualify(t))+\"\\\\b\",\"i\").exec(e)&&(t.label||t)}))}function getManufacturer(i){return reduce(i,(function(i,t,r){return i||(t[A]||t[/^[a-z]+(?: +[a-z]+\\b)*/i.exec(A)]||RegExp(\"\\\\b\"+qualify(r)+\"(?:\\\\b|\\\\w*\\\\d)\",\"i\").exec(e))&&r}))}function getName(i){return reduce(i,(function(i,t){return i||RegExp(\"\\\\b\"+(t.pattern||qualify(t))+\"\\\\b\",\"i\").exec(e)&&(t.label||t)}))}function getOS(i){return reduce(i,(function(i,t){var r=t.pattern||qualify(t);if(!i&&(i=RegExp(\"\\\\b\"+r+\"(?:/[\\\\d.]+|[ \\\\w.]*)\",\"i\").exec(e))){i=cleanupOS(i,r,t.label||t)}return i}))}function getProduct(i){return reduce(i,(function(i,t){var r=t.pattern||qualify(t);if(!i&&(i=RegExp(\"\\\\b\"+r+\" *\\\\d+[.\\\\w_]*\",\"i\").exec(e)||RegExp(\"\\\\b\"+r+\" *\\\\w+-[\\\\w]*\",\"i\").exec(e)||RegExp(\"\\\\b\"+r+\"(?:; *(?:[a-z]+[_-])?[a-z]+\\\\d+|[^ ();-]*)\",\"i\").exec(e))){if((i=String(t.label&&!RegExp(r,\"i\").test(t.label)?t.label:i).split(\"/\"))[1]&&!/[\\d.]+/.test(i[0])){i[0]+=\" \"+i[1]}t=t.label||t;i=format(i[0].replace(RegExp(r,\"i\"),t).replace(RegExp(\"; *(?:\"+t+\"[_-])?\",\"i\"),\" \").replace(RegExp(\"(\"+t+\")[-_.]?(\\\\w)\",\"i\"),\"$1 $2\"))}return i}))}function getVersion(i){return reduce(i,(function(i,t){return i||(RegExp(t+\"(?:-[\\\\d.]+/|(?: for [\\\\w-]+)?[ /-])([\\\\d.]+[^ ();/_-]*)\",\"i\").exec(e)||0)[1]||null}))}function toStringPlatform(){return this.description||\"\"}_&&(_=[_]);if(/\\bAndroid\\b/.test(T)&&!A&&(M=/\\bAndroid[^;]*;(.*?)(?:Build|\\) AppleWebKit)\\b/i.exec(e))){A=trim(M[1]).replace(/^[a-z]{2}-[a-z]{2};\\s*/i,\"\")||null}if(I&&!A){A=getProduct([I])}else if(I&&A){A=A.replace(RegExp(\"^(\"+qualify(I)+\")[-_.\\\\s]\",\"i\"),I+\" \").replace(RegExp(\"^(\"+qualify(I)+\")[-_.]?(\\\\w)\",\"i\"),I+\" $2\")}if(M=/\\bGoogle TV\\b/.exec(A)){A=M[0]}if(/\\bSimulator\\b/i.test(e)){A=(A?A+\" \":\"\")+\"Simulator\"}if(R==\"Opera Mini\"&&/\\bOPiOS\\b/.test(e)){P.push(\"running in Turbo/Uncompressed mode\")}if(R==\"IE\"&&/\\blike iPhone OS\\b/.test(e)){M=parse(e.replace(/like iPhone OS/,\"\"));I=M.manufacturer;A=M.product}else if(/^iP/.test(A)){R||(R=\"Safari\");T=\"iOS\"+((M=/ OS ([\\d_]+)/i.exec(e))?\" \"+M[1].replace(/_/g,\".\"):\"\")}else if(R==\"Konqueror\"&&/^Linux\\b/i.test(T)){T=\"Kubuntu\"}else if(I&&I!=\"Google\"&&(/Chrome/.test(R)&&!/\\bMobile Safari\\b/i.test(e)||/\\bVita\\b/.test(A))||/\\bAndroid\\b/.test(T)&&/^Chrome/.test(R)&&/\\bVersion\\//i.test(e)){R=\"Android Browser\";T=/\\bAndroid\\b/.test(T)?T:\"Android\"}else if(R==\"Silk\"){if(!/\\bMobi/i.test(e)){T=\"Android\";P.unshift(\"desktop mode\")}if(/Accelerated *= *true/i.test(e)){P.unshift(\"accelerated\")}}else if(R==\"UC Browser\"&&/\\bUCWEB\\b/.test(e)){P.push(\"speed mode\")}else if(R==\"PaleMoon\"&&(M=/\\bFirefox\\/([\\d.]+)\\b/.exec(e))){P.push(\"identifying as Firefox \"+M[1])}else if(R==\"Firefox\"&&(M=/\\b(Mobile|Tablet|TV)\\b/i.exec(e))){T||(T=\"Firefox OS\");A||(A=M[1])}else if(!R||(M=!/\\bMinefield\\b/i.test(e)&&/\\b(?:Firefox|Safari)\\b/.exec(R))){if(R&&!A&&/[\\/,]|^[^(]+?\\)/.test(e.slice(e.indexOf(M+\"/\")+8))){R=null}if((M=A||I||T)&&(A||I||/\\b(?:Android|Symbian OS|Tablet OS|webOS)\\b/.test(T))){R=/[a-z]+(?: Hat)?/i.exec(/\\bAndroid\\b/.test(T)?T:M)+\" Browser\"}}else if(R==\"Electron\"&&(M=(/\\bChrome\\/([\\d.]+)\\b/.exec(e)||0)[1])){P.push(\"Chromium \"+M)}if(!B){B=getVersion([\"(?:Cloud9|CriOS|CrMo|Edge|Edg|EdgA|EdgiOS|FxiOS|HeadlessChrome|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|SamsungBrowser|Silk(?!/[\\\\d.]+$)|UCBrowser|YaBrowser)\",\"Version\",qualify(R),\"(?:Firefox|Minefield|NetFront)\"])}if(M=_==\"iCab\"&&parseFloat(B)>3&&\"WebKit\"||/\\bOpera\\b/.test(R)&&(/\\bOPR\\b/.test(e)?\"Blink\":\"Presto\")||/\\b(?:Midori|Nook|Safari)\\b/i.test(e)&&!/^(?:Trident|EdgeHTML)$/.test(_)&&\"WebKit\"||!_&&/\\bMSIE\\b/i.test(e)&&(T==\"Mac OS\"?\"Tasman\":\"Trident\")||_==\"WebKit\"&&/\\bPlayStation\\b(?! Vita\\b)/i.test(R)&&\"NetFront\"){_=[M]}if(R==\"IE\"&&(M=(/; *(?:XBLWP|ZuneWP)(\\d+)/i.exec(e)||0)[1])){R+=\" Mobile\";T=\"Windows Phone \"+(/\\+$/.test(M)?M:M+\".x\");P.unshift(\"desktop mode\")}else if(/\\bWPDesktop\\b/i.test(e)){R=\"IE Mobile\";T=\"Windows Phone 8.x\";P.unshift(\"desktop mode\");B||(B=(/\\brv:([\\d.]+)/.exec(e)||0)[1])}else if(R!=\"IE\"&&_==\"Trident\"&&(M=/\\brv:([\\d.]+)/.exec(e))){if(R){P.push(\"identifying as \"+R+(B?\" \"+B:\"\"))}R=\"IE\";B=M[1]}if(k){if(isHostType(i,\"global\")){if(m){M=m.lang.System;E=M.getProperty(\"os.arch\");T=T||M.getProperty(\"os.name\")+\" \"+M.getProperty(\"os.version\")}if(g){try{B=i.require(\"ringo/engine\").version.join(\".\");R=\"RingoJS\"}catch(e){if((M=i.system)&&M.global.system==i.system){R=\"Narwhal\";T||(T=M[0].os||null)}}if(!R){R=\"Rhino\"}}else if(typeof i.process==\"object\"&&!i.process.browser&&(M=i.process)){if(typeof M.versions==\"object\"){if(typeof M.versions.electron==\"string\"){P.push(\"Node \"+M.versions.node);R=\"Electron\";B=M.versions.electron}else if(typeof M.versions.nw==\"string\"){P.push(\"Chromium \"+B,\"Node \"+M.versions.node);R=\"NW.js\";B=M.versions.nw}}if(!R){R=\"Node.js\";E=M.arch;T=M.platform;B=/[\\d.]+/.exec(M.version);B=B?B[0]:null}}}else if(getClassOf(M=i.runtime)==p){R=\"Adobe AIR\";T=M.flash.system.Capabilities.os}else if(getClassOf(M=i.phantom)==x){R=\"PhantomJS\";B=(M=M.version||null)&&M.major+\".\"+M.minor+\".\"+M.patch}else if(typeof O.documentMode==\"number\"&&(M=/\\bTrident\\/(\\d+)/i.exec(e))){B=[B,O.documentMode];if((M=+M[1]+4)!=B[1]){P.push(\"IE \"+B[1]+\" mode\");_&&(_[1]=\"\");B[1]=M}B=R==\"IE\"?String(B[1].toFixed(1)):B[0]}else if(typeof O.documentMode==\"number\"&&/^(?:Chrome|Firefox)\\b/.test(R)){P.push(\"masking as \"+R+\" \"+B);R=\"IE\";B=\"11.0\";_=[\"Trident\"];T=\"Windows\"}T=T&&format(T)}if(B&&(M=/(?:[ab]|dp|pre|[ab]\\d+pre)(?:\\d+\\+?)?$/i.exec(B)||/(?:alpha|beta)(?: ?\\d)?/i.exec(e+\";\"+(k&&n.appMinorVersion))||/\\bMinefield\\b/i.test(e)&&\"a\")){C=/b/i.test(M)?\"beta\":\"alpha\";B=B.replace(RegExp(M+\"\\\\+?$\"),\"\")+(C==\"beta\"?v:h)+(/\\d+\\+?/.exec(M)||\"\")}if(R==\"Fennec\"||R==\"Firefox\"&&/\\b(?:Android|Firefox OS|KaiOS)\\b/.test(T)){R=\"Firefox Mobile\"}else if(R==\"Maxthon\"&&B){B=B.replace(/\\.[\\d.]+/,\".x\")}else if(/\\bXbox\\b/i.test(A)){if(A==\"Xbox 360\"){T=null}if(A==\"Xbox 360\"&&/\\bIEMobile\\b/.test(e)){P.unshift(\"mobile mode\")}}else if((/^(?:Chrome|IE|Opera)$/.test(R)||R&&!A&&!/Browser|Mobi/.test(R))&&(T==\"Windows CE\"||/Mobi/i.test(e))){R+=\" Mobile\"}else if(R==\"IE\"&&k){try{if(i.external===null){P.unshift(\"platform preview\")}}catch(e){P.unshift(\"embedded\")}}else if((/\\bBlackBerry\\b/.test(A)||/\\bBB10\\b/.test(e))&&(M=(RegExp(A.replace(/ +/g,\" *\")+\"/([.\\\\d]+)\",\"i\").exec(e)||0)[1]||B)){M=[M,/BB10/.test(e)];T=(M[1]?(A=null,I=\"BlackBerry\"):\"Device Software\")+\" \"+M[0];B=null}else if(this!=forOwn&&A!=\"Wii\"&&(k&&y||/Opera/.test(R)&&/\\b(?:MSIE|Firefox)\\b/i.test(e)||R==\"Firefox\"&&/\\bOS X (?:\\d+\\.){2,}/.test(T)||R==\"IE\"&&(T&&!/^Win/.test(T)&&B>5.5||/\\bWindows XP\\b/.test(T)&&B>8||B==8&&!/\\bTrident\\b/.test(e)))&&!f.test(M=parse.call(forOwn,e.replace(f,\"\")+\";\"))&&M.name){M=\"ing as \"+M.name+((M=M.version)?\" \"+M:\"\");if(f.test(R)){if(/\\bIE\\b/.test(M)&&T==\"Mac OS\"){T=null}M=\"identify\"+M}else{M=\"mask\"+M;if(w){R=format(w.replace(/([a-z])([A-Z])/g,\"$1 $2\"))}else{R=\"Opera\"}if(/\\bIE\\b/.test(M)){T=null}if(!k){B=null}}_=[\"Presto\"];P.push(M)}if(M=(/\\bAppleWebKit\\/([\\d.]+\\+?)/i.exec(e)||0)[1]){M=[parseFloat(M.replace(/\\.(\\d)$/,\".0$1\")),M];if(R==\"Safari\"&&M[1].slice(-1)==\"+\"){R=\"WebKit Nightly\";C=\"alpha\";B=M[1].slice(0,-1)}else if(B==M[1]||B==(M[2]=(/\\bSafari\\/([\\d.]+\\+?)/i.exec(e)||0)[1])){B=null}M[1]=(/\\b(?:Headless)?Chrome\\/([\\d.]+)/i.exec(e)||0)[1];if(M[0]==537.36&&M[2]==537.36&&parseFloat(M[1])>=28&&_==\"WebKit\"){_=[\"Blink\"]}if(!k||!s&&!M[1]){_&&(_[1]=\"like Safari\");M=(M=M[0],M<400?1:M<500?2:M<526?3:M<533?4:M<534?\"4+\":M<535?5:M<537?6:M<538?7:M<601?8:M<602?9:M<604?10:M<606?11:M<608?12:\"12\")}else{_&&(_[1]=\"like Chrome\");M=M[1]||(M=M[0],M<530?1:M<532?2:M<532.05?3:M<533?4:M<534.03?5:M<534.07?6:M<534.1?7:M<534.13?8:M<534.16?9:M<534.24?10:M<534.3?11:M<535.01?12:M<535.02?\"13+\":M<535.07?15:M<535.11?16:M<535.19?17:M<536.05?18:M<536.1?19:M<537.01?20:M<537.11?\"21+\":M<537.13?23:M<537.18?24:M<537.24?25:M<537.36?26:_!=\"Blink\"?\"27\":\"28\")}_&&(_[1]+=\" \"+(M+=typeof M==\"number\"?\".x\":/[.+]/.test(M)?\"\":\"+\"));if(R==\"Safari\"&&(!B||parseInt(B)>45)){B=M}else if(R==\"Chrome\"&&/\\bHeadlessChrome/i.test(e)){P.unshift(\"headless\")}}if(R==\"Opera\"&&(M=/\\bzbov|zvav$/.exec(T))){R+=\" \";P.unshift(\"desktop mode\");if(M==\"zvav\"){R+=\"Mini\";B=null}else{R+=\"Mobile\"}T=T.replace(RegExp(\" *\"+M+\"$\"),\"\")}else if(R==\"Safari\"&&/\\bChrome\\b/.exec(_&&_[1])){P.unshift(\"desktop mode\");R=\"Chrome Mobile\";B=null;if(/\\bOS X\\b/.test(T)){I=\"Apple\";T=\"iOS 4.3+\"}else{T=null}}else if(/\\bSRWare Iron\\b/.test(R)&&!B){B=getVersion(\"Chrome\")}if(B&&B.indexOf(M=/[\\d.]+$/.exec(T))==0&&e.indexOf(\"/\"+M+\"-\")>-1){T=trim(T.replace(M,\"\"))}if(T&&T.indexOf(R)!=-1&&!RegExp(R+\" OS\").test(T)){T=T.replace(RegExp(\" *\"+qualify(R)+\" *\"),\"\")}if(_&&!/\\b(?:Avant|Nook)\\b/.test(R)&&(/Browser|Lunascape|Maxthon/.test(R)||R!=\"Safari\"&&/^iOS/.test(T)&&/\\bSafari\\b/.test(_[1])||/^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Samsung Internet|Sleipnir|SRWare Iron|Vivaldi|Web)/.test(R)&&_[1])){(M=_[_.length-1])&&P.push(M)}if(P.length){P=[\"(\"+P.join(\"; \")+\")\"]}if(I&&A&&A.indexOf(I)<0){P.push(\"on \"+I)}if(A){P.push((/^on /.test(P[P.length-1])?\"\":\"on \")+A)}if(T){M=/ ([\\d.+]+)$/.exec(T);W=M&&T.charAt(T.length-M[0].length-1)==\"/\";T={architecture:32,family:M&&!W?T.replace(M[0],\"\"):T,version:M?M[1]:null,toString:function(){var e=this.version;return this.family+(e&&!W?\" \"+e:\"\")+(this.architecture==64?\" 64-bit\":\"\")}}}if((M=/\\b(?:AMD|IA|Win|WOW|x86_|x)64\\b/i.exec(E))&&!/\\bi686\\b/i.test(E)){if(T){T.architecture=64;T.family=T.family.replace(RegExp(\" *\"+M),\"\")}if(R&&(/\\bWOW64\\b/i.test(e)||k&&/\\w(?:86|32)$/.test(n.cpuClass||n.platform)&&!/\\bWin64; x64\\b/i.test(e))){P.unshift(\"32-bit\")}}else if(T&&/^OS X/.test(T.family)&&R==\"Chrome\"&&parseFloat(B)>=39){T.architecture=64}e||(e=null);var F={};F.description=e;F.layout=_&&_[0];F.manufacturer=I;F.name=R;F.prerelease=C;F.product=A;F.ua=e;F.version=R&&B;F.os=T||{architecture:null,family:null,version:null,toString:function(){return\"null\"}};F.parse=parse;F.toString=toStringPlatform;if(F.version){P.unshift(B)}if(F.name){P.unshift(R)}if(T&&R&&!(T==String(T).split(\" \")[0]&&(T==R.split(\" \")[0]||A))){P.push(A?\"(\"+T+\")\":\"on \"+T)}if(P.length){F.description=P.join(\" \")}return F}var d=parse();if(n&&o){forOwn(d,(function(e,i){n[i]=e}))}else{r.platform=d}}).call(this)}};var i={};function __nccwpck_require__(t){var r=i[t];if(r!==undefined){return r.exports}var a=i[t]={id:t,loaded:false,exports:{}};var n=true;try{e[t].call(a.exports,a,a.exports,__nccwpck_require__);n=false}finally{if(n)delete i[t]}a.loaded=true;return a.exports}(()=>{__nccwpck_require__.nmd=e=>{e.paths=[];if(!e.children)e.children=[];return e}})();if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(541);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3BsYXRmb3JtL3BsYXRmb3JtLmpzIiwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxvQkFBb0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYSxPQUFPLDJCQUEyQixxQ0FBcUMsUUFBUSxxQkFBcUIscUNBQXFDLDRDQUE0QyxnREFBZ0QsSUFBSSx1QkFBdUIsZ0JBQWdCLFdBQVcsdUJBQXVCLHVCQUF1QixpQkFBaUIsdUJBQXVCLFlBQVksNENBQTRDLDBCQUEwQixPQUFPLDBNQUEwTSxpRkFBaUYsZUFBZSxZQUFZLFNBQVMsNkJBQTZCLG1aQUFtWixTQUFTLG1CQUFtQix3QkFBd0IsbUNBQW1DLGFBQWEsYUFBYSxLQUFLLGFBQWEsbUJBQW1CLFVBQVUscURBQXFELHFCQUFxQixnQkFBZ0IsZ0JBQWdCLGNBQWMsdUJBQXVCLG1EQUFtRCx5QkFBeUIsbUNBQW1DLGtGQUFrRixvQkFBb0IsK0NBQStDLHFCQUFxQixXQUFXLHNCQUFzQixhQUFhLEdBQUcsU0FBUyxpQkFBaUIsd0NBQXdDLGtCQUFrQixRQUFRLHFEQUFxRCxNQUFNLElBQUksT0FBTyxzQkFBc0Isc0JBQXNCLFNBQVMsY0FBYyxnRkFBZ0Ysd0lBQXdJLCtCQUErQixzQ0FBc0MsZ0JBQWdCLGdCQUFnQixxQkFBcUIsMkJBQTJCLDJEQUEyRCxNQUFNLFFBQVEsU0FBUyxXQUFXLFdBQVcsc0RBQXNELE1BQU0sa0JBQWtCLGdDQUFnQyxZQUFZLHFDQUFxQyx1REFBdUQscU1BQXFNLDBEQUEwRCw2RUFBNkUsa0RBQWtELGNBQWMsbURBQW1ELDJCQUEyQixtQ0FBbUMsMERBQTBELDJDQUEyQyxFQUFFLHVDQUF1QyxlQUFlLG1DQUFtQyxVQUFVLDRCQUE0QixzQkFBc0IsNENBQTRDLEVBQUUsK0NBQStDLEVBQUUsZ0RBQWdELEVBQUUsd0NBQXdDLEVBQUUsOEJBQThCLEVBQUUsMEJBQTBCLFlBQVksbUJBQW1CLGtDQUFrQyxlQUFlLG9DQUFvQyxFQUFFLHFDQUFxQyxFQUFFLHFDQUFxQyxFQUFFLHFDQUFxQyxFQUFFLG9DQUFvQyxFQUFFLG9DQUFvQyxFQUFFLHlDQUF5QyxFQUFFLG9DQUFvQyxFQUFFLHlDQUF5QyxzREFBc0QsMERBQTBELHNGQUFzRiw2QkFBNkIsbUJBQW1CLGdDQUFnQyxVQUFVLHVCQUF1QixPQUFPLHVCQUF1QixXQUFXLFVBQVUsU0FBUyx5QkFBeUIsT0FBTyxjQUFjLG1CQUFtQixPQUFPLGFBQWEsV0FBVyxTQUFTLHNCQUFzQixLQUFLLFdBQVcsT0FBTyxVQUFVLFVBQVUsTUFBTSxZQUFZLG9CQUFvQixXQUFXLE9BQU8sV0FBVyxnQkFBZ0IsUUFBUSxRQUFRLFFBQVEsVUFBVSx1REFBdUQsT0FBTyxtQ0FBbUMsU0FBUyxjQUFjLEVBQUUseURBQXlELGlDQUFpQyxXQUFXLDBDQUEwQyw4TkFBOE4sZUFBZSxzQkFBc0IsK0JBQStCLGdGQUFnRixHQUFHLDRCQUE0QixpQ0FBaUMsa0hBQWtILEdBQUcsb0JBQW9CLCtCQUErQixnRkFBZ0YsR0FBRyxrQkFBa0IsK0JBQStCLDRCQUE0QixnRUFBZ0UsNEJBQTRCLFNBQVMsR0FBRyx1QkFBdUIsK0JBQStCLDRCQUE0QiwwSEFBMEgsaUNBQWlDLHFCQUFxQixvR0FBb0csZUFBZSxhQUFhLHlEQUF5RCw4RUFBOEUsU0FBUyxHQUFHLHVCQUF1QiwrQkFBK0IsdUVBQXVFLGtDQUFrQyxHQUFHLDRCQUE0Qiw0QkFBNEIsV0FBVyw4Q0FBOEMsR0FBRyw0Q0FBNEMsNkJBQTZCLEVBQUUsT0FBTyxHQUFHLGdCQUFnQixVQUFVLGtCQUFrQixjQUFjLHVIQUF1SCw4QkFBOEIsT0FBTyw2QkFBNkIsMkJBQTJCLHlDQUF5Qyw2Q0FBNkMsMENBQTBDLHdDQUF3QyxpQkFBaUIsWUFBWSx1QkFBdUIsZ0JBQWdCLG9FQUFvRSw2Q0FBNkMsWUFBWSxpS0FBaUssb0JBQW9CLG9DQUFvQyxtQkFBbUIsdUJBQXVCLFlBQVksMEJBQTBCLG9DQUFvQywwQkFBMEIsOENBQThDLHFCQUFxQiw0REFBNEQsdUNBQXVDLDZEQUE2RCxvQkFBb0IsWUFBWSw2RUFBNkUsK0RBQStELE9BQU8sOEVBQThFLGlFQUFpRSxtRUFBbUUsc0JBQXNCLE9BQU8sdU9BQXVPLHFUQUFxVCxNQUFNLG1CQUFtQiwwQ0FBMEMsYUFBYSw0Q0FBNEMsMEJBQTBCLGtDQUFrQyxjQUFjLHNCQUFzQiwwQkFBMEIsdUNBQXVDLDREQUE0RCxNQUFNLHlDQUF5QyxPQUFPLE9BQU8sTUFBTSwyQkFBMkIsTUFBTSxnQkFBZ0IsMkJBQTJCLDhEQUE4RCxNQUFNLElBQUksOENBQThDLFlBQVksU0FBUyw0Q0FBNEMsWUFBWSxzQkFBc0IsT0FBTyxXQUFXLHVFQUF1RSxnQ0FBZ0MseUNBQXlDLGdDQUFnQyxhQUFhLHNCQUFzQix3Q0FBd0MsOENBQThDLFVBQVUsaUJBQWlCLE9BQU8sWUFBWSxTQUFTLGFBQWEsMkJBQTJCLGdCQUFnQixvQ0FBb0MsY0FBYyxpQ0FBaUMsb0NBQW9DLGNBQWMsdURBQXVELDBFQUEwRSxxQkFBcUIsc0JBQXNCLDJCQUEyQixhQUFhLE9BQU8sdUNBQXVDLDBFQUEwRSw4QkFBOEIsT0FBTyxTQUFTLGNBQWMsWUFBWSxlQUFlLGdHQUFnRywyREFBMkQsOEJBQThCLHlFQUF5RSwwRUFBMEUsbUJBQW1CLHlCQUF5Qiw2QkFBNkIsNkJBQTZCLGtCQUFrQixPQUFPLDBDQUEwQywwQkFBMEIsK0dBQStHLGFBQWEsb0JBQW9CLElBQUksc0JBQXNCLCtCQUErQixTQUFTLHVCQUF1QiwrSEFBK0gscUJBQXFCLDREQUE0RCxPQUFPLHlIQUF5SCxHQUFHLDZKQUE2SixhQUFhLDRDQUE0QyxjQUFjLGtDQUFrQyxPQUFPLGVBQWUsS0FBSyxXQUFXLE1BQU0sK0NBQStDLEtBQUssVUFBVSxxQkFBcUIsT0FBTyxPQUFPLFFBQVEsYUFBYSxVQUFVLG9EQUFvRCw4Q0FBOEMscUNBQXFDLG1CQUFtQixVQUFVLG1CQUFtQixxRUFBcUUsT0FBTyx3REFBd0Qsa0VBQWtFLFlBQVksa0JBQWtCLHdCQUF3Qiw4SEFBOEgsS0FBSyx3QkFBd0IsdVRBQXVULGtFQUFrRSxzQ0FBc0MsSUFBSSxrREFBa0QsdUJBQXVCLDJDQUEyQyxPQUFPLDBCQUEwQixjQUFjLFVBQVUsT0FBTyxLQUFLLFlBQVksbUNBQW1DLGlEQUFpRCwwQkFBMEIsa0JBQWtCLE9BQU8sdUJBQXVCLFVBQVUsYUFBYSxLQUFLLFFBQVEsdUNBQXVDLHVCQUF1QixrRUFBa0Usd0JBQXdCLGtEQUFrRCw2Q0FBNkMsOFBBQThQLDZCQUE2QixhQUFhLGlCQUFpQixRQUFRLHlCQUF5QixnQkFBZ0IsTUFBTSxnREFBZ0QsTUFBTSx3QkFBd0IsMkNBQTJDLEdBQUcsMEZBQTBGLG1CQUFtQiwyRUFBMkUseUVBQXlFLE1BQU0sa0JBQWtCLDZDQUE2Qyx3RkFBd0Ysa0JBQWtCLHFCQUFxQixtRUFBbUUsa0JBQWtCLFlBQVksU0FBUyxnQkFBZ0IsaUJBQWlCLGlCQUFpQixTQUFTLGVBQWUsWUFBWSxPQUFPLGVBQWUsU0FBUywrREFBK0QsZUFBZSxjQUFjLDRCQUE0QixjQUFjLGFBQWEsV0FBVyxhQUFhLGlFQUFpRSw0QkFBNEIsYUFBYSwwQkFBMEIsU0FBUyxjQUFjLFNBQVMsd0JBQXdCLE9BQU8sR0FBRyxLQUFLLGNBQWMsZUFBZSxTQUFTLGdDQUFnQyxXQUFXLGtCQUFrQixpQkFBaUIsWUFBWSw4QkFBOEIsV0FBVyxJQUFJLHFEQUFxRCxRQUFRLFFBQVEsaUJBQWlCLGNBQWMsaUJBQWlCLE1BQU0sNEJBQTRCLFdBQVcsNkJBQTZCLFVBQVUsSUFBSSxpRkFBaUYsK0JBQStCLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3BsYXRmb3JtL3BsYXRmb3JtLmpzPzcwMDAiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57dmFyIGU9ezU0MTpmdW5jdGlvbihlLGksdCl7ZT10Lm5tZChlKTtcbi8qIVxuICogUGxhdGZvcm0uanMgdjEuMy42XG4gKiBDb3B5cmlnaHQgMjAxNC0yMDIwIEJlbmphbWluIFRhblxuICogQ29weXJpZ2h0IDIwMTEtMjAxMyBKb2huLURhdmlkIERhbHRvblxuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlXG4gKi8oZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD17ZnVuY3Rpb246dHJ1ZSxvYmplY3Q6dHJ1ZX07dmFyIHI9dFt0eXBlb2Ygd2luZG93XSYmd2luZG93fHx0aGlzO3ZhciBhPXI7dmFyIG49dFt0eXBlb2YgaV0mJmk7dmFyIG89dFtcIm9iamVjdFwiXSYmZSYmIWUubm9kZVR5cGUmJmU7dmFyIGw9biYmbyYmdHlwZW9mIGdsb2JhbD09XCJvYmplY3RcIiYmZ2xvYmFsO2lmKGwmJihsLmdsb2JhbD09PWx8fGwud2luZG93PT09bHx8bC5zZWxmPT09bCkpe3I9bH12YXIgcz1NYXRoLnBvdygyLDUzKS0xO3ZhciBmPS9cXGJPcGVyYS87dmFyIGI9dGhpczt2YXIgYz1PYmplY3QucHJvdG90eXBlO3ZhciBwPWMuaGFzT3duUHJvcGVydHk7dmFyIHU9Yy50b1N0cmluZztmdW5jdGlvbiBjYXBpdGFsaXplKGUpe2U9U3RyaW5nKGUpO3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9ZnVuY3Rpb24gY2xlYW51cE9TKGUsaSx0KXt2YXIgcj17XCIxMC4wXCI6XCIxMFwiLDYuNDpcIjEwIFRlY2huaWNhbCBQcmV2aWV3XCIsNi4zOlwiOC4xXCIsNi4yOlwiOFwiLDYuMTpcIlNlcnZlciAyMDA4IFIyIC8gN1wiLFwiNi4wXCI6XCJTZXJ2ZXIgMjAwOCAvIFZpc3RhXCIsNS4yOlwiU2VydmVyIDIwMDMgLyBYUCA2NC1iaXRcIiw1LjE6XCJYUFwiLDUuMDE6XCIyMDAwIFNQMVwiLFwiNS4wXCI6XCIyMDAwXCIsXCI0LjBcIjpcIk5UXCIsXCI0LjkwXCI6XCJNRVwifTtpZihpJiZ0JiYvXldpbi9pLnRlc3QoZSkmJiEvXldpbmRvd3MgUGhvbmUgL2kudGVzdChlKSYmKHI9clsvW1xcZC5dKyQvLmV4ZWMoZSldKSl7ZT1cIldpbmRvd3MgXCIrcn1lPVN0cmluZyhlKTtpZihpJiZ0KXtlPWUucmVwbGFjZShSZWdFeHAoaSxcImlcIiksdCl9ZT1mb3JtYXQoZS5yZXBsYWNlKC8gY2UkL2ksXCIgQ0VcIikucmVwbGFjZSgvXFxiaHB3L2ksXCJ3ZWJcIikucmVwbGFjZSgvXFxiTWFjaW50b3NoXFxiLyxcIk1hYyBPU1wiKS5yZXBsYWNlKC9fUG93ZXJQQ1xcYi9pLFwiIE9TXCIpLnJlcGxhY2UoL1xcYihPUyBYKSBbXiBcXGRdKy9pLFwiJDFcIikucmVwbGFjZSgvXFxiTWFjIChPUyBYKVxcYi8sXCIkMVwiKS5yZXBsYWNlKC9cXC8oXFxkKS8sXCIgJDFcIikucmVwbGFjZSgvXy9nLFwiLlwiKS5yZXBsYWNlKC8oPzogQmVQQ3xbIC5dKmZjWyBcXGQuXSspJC9pLFwiXCIpLnJlcGxhY2UoL1xcYng4NlxcLjY0XFxiL2dpLFwieDg2XzY0XCIpLnJlcGxhY2UoL1xcYihXaW5kb3dzIFBob25lKSBPU1xcYi8sXCIkMVwiKS5yZXBsYWNlKC9cXGIoQ2hyb21lIE9TIFxcdyspIFtcXGQuXStcXGIvLFwiJDFcIikuc3BsaXQoXCIgb24gXCIpWzBdKTtyZXR1cm4gZX1mdW5jdGlvbiBlYWNoKGUsaSl7dmFyIHQ9LTEscj1lP2UubGVuZ3RoOjA7aWYodHlwZW9mIHI9PVwibnVtYmVyXCImJnI+LTEmJnI8PXMpe3doaWxlKCsrdDxyKXtpKGVbdF0sdCxlKX19ZWxzZXtmb3JPd24oZSxpKX19ZnVuY3Rpb24gZm9ybWF0KGUpe2U9dHJpbShlKTtyZXR1cm4vXig/OndlYk9TfGkoPzpPU3xQKSkvLnRlc3QoZSk/ZTpjYXBpdGFsaXplKGUpfWZ1bmN0aW9uIGZvck93bihlLGkpe2Zvcih2YXIgdCBpbiBlKXtpZihwLmNhbGwoZSx0KSl7aShlW3RdLHQsZSl9fX1mdW5jdGlvbiBnZXRDbGFzc09mKGUpe3JldHVybiBlPT1udWxsP2NhcGl0YWxpemUoZSk6dS5jYWxsKGUpLnNsaWNlKDgsLTEpfWZ1bmN0aW9uIGlzSG9zdFR5cGUoZSxpKXt2YXIgdD1lIT1udWxsP3R5cGVvZiBlW2ldOlwibnVtYmVyXCI7cmV0dXJuIS9eKD86Ym9vbGVhbnxudW1iZXJ8c3RyaW5nfHVuZGVmaW5lZCkkLy50ZXN0KHQpJiYodD09XCJvYmplY3RcIj8hIWVbaV06dHJ1ZSl9ZnVuY3Rpb24gcXVhbGlmeShlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoLyhbIC1dKSg/ISQpL2csXCIkMT9cIil9ZnVuY3Rpb24gcmVkdWNlKGUsaSl7dmFyIHQ9bnVsbDtlYWNoKGUsKGZ1bmN0aW9uKHIsYSl7dD1pKHQscixhLGUpfSkpO3JldHVybiB0fWZ1bmN0aW9uIHRyaW0oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC9eICt8ICskL2csXCJcIil9ZnVuY3Rpb24gcGFyc2UoZSl7dmFyIGk9cjt2YXIgdD1lJiZ0eXBlb2YgZT09XCJvYmplY3RcIiYmZ2V0Q2xhc3NPZihlKSE9XCJTdHJpbmdcIjtpZih0KXtpPWU7ZT1udWxsfXZhciBuPWkubmF2aWdhdG9yfHx7fTt2YXIgbz1uLnVzZXJBZ2VudHx8XCJcIjtlfHwoZT1vKTt2YXIgbD10fHxiPT1hO3ZhciBzPXQ/ISFuLmxpa2VDaHJvbWU6L1xcYkNocm9tZVxcYi8udGVzdChlKSYmIS9pbnRlcm5hbHxcXG4vaS50ZXN0KHUudG9TdHJpbmcoKSk7dmFyIGM9XCJPYmplY3RcIixwPXQ/YzpcIlNjcmlwdEJyaWRnaW5nUHJveHlPYmplY3RcIixkPXQ/YzpcIkVudmlyb25tZW50XCIsUz10JiZpLmphdmE/XCJKYXZhUGFja2FnZVwiOmdldENsYXNzT2YoaS5qYXZhKSx4PXQ/YzpcIlJ1bnRpbWVPYmplY3RcIjt2YXIgbT0vXFxiSmF2YS8udGVzdChTKSYmaS5qYXZhO3ZhciBnPW0mJmdldENsYXNzT2YoaS5lbnZpcm9ubWVudCk9PWQ7dmFyIGg9bT9cImFcIjpcIs6xXCI7dmFyIHY9bT9cImJcIjpcIs6yXCI7dmFyIE89aS5kb2N1bWVudHx8e307dmFyIHk9aS5vcGVyYW1pbml8fGkub3BlcmE7dmFyIHc9Zi50ZXN0KHc9dCYmeT95W1wiW1tDbGFzc11dXCJdOmdldENsYXNzT2YoeSkpP3c6eT1udWxsO3ZhciBNO3ZhciBFPWU7dmFyIFA9W107dmFyIEM9bnVsbDt2YXIgaz1lPT1vO3ZhciBCPWsmJnkmJnR5cGVvZiB5LnZlcnNpb249PVwiZnVuY3Rpb25cIiYmeS52ZXJzaW9uKCk7dmFyIFc7dmFyIF89Z2V0TGF5b3V0KFt7bGFiZWw6XCJFZGdlSFRNTFwiLHBhdHRlcm46XCJFZGdlXCJ9LFwiVHJpZGVudFwiLHtsYWJlbDpcIldlYktpdFwiLHBhdHRlcm46XCJBcHBsZVdlYktpdFwifSxcImlDYWJcIixcIlByZXN0b1wiLFwiTmV0RnJvbnRcIixcIlRhc21hblwiLFwiS0hUTUxcIixcIkdlY2tvXCJdKTt2YXIgUj1nZXROYW1lKFtcIkFkb2JlIEFJUlwiLFwiQXJvcmFcIixcIkF2YW50IEJyb3dzZXJcIixcIkJyZWFjaFwiLFwiQ2FtaW5vXCIsXCJFbGVjdHJvblwiLFwiRXBpcGhhbnlcIixcIkZlbm5lY1wiLFwiRmxvY2tcIixcIkdhbGVvblwiLFwiR3JlZW5Ccm93c2VyXCIsXCJpQ2FiXCIsXCJJY2V3ZWFzZWxcIixcIkstTWVsZW9uXCIsXCJLb25xdWVyb3JcIixcIkx1bmFzY2FwZVwiLFwiTWF4dGhvblwiLHtsYWJlbDpcIk1pY3Jvc29mdCBFZGdlXCIscGF0dGVybjpcIig/OkVkZ2V8RWRnfEVkZ0F8RWRnaU9TKVwifSxcIk1pZG9yaVwiLFwiTm9vayBCcm93c2VyXCIsXCJQYWxlTW9vblwiLFwiUGhhbnRvbUpTXCIsXCJSYXZlblwiLFwiUmVrb25xXCIsXCJSb2NrTWVsdFwiLHtsYWJlbDpcIlNhbXN1bmcgSW50ZXJuZXRcIixwYXR0ZXJuOlwiU2Ftc3VuZ0Jyb3dzZXJcIn0sXCJTZWFNb25rZXlcIix7bGFiZWw6XCJTaWxrXCIscGF0dGVybjpcIig/OkNsb3VkOXxTaWxrLUFjY2VsZXJhdGVkKVwifSxcIlNsZWlwbmlyXCIsXCJTbGltQnJvd3NlclwiLHtsYWJlbDpcIlNSV2FyZSBJcm9uXCIscGF0dGVybjpcIklyb25cIn0sXCJTdW5yaXNlXCIsXCJTd2lmdGZveFwiLFwiVml2YWxkaVwiLFwiV2F0ZXJmb3hcIixcIldlYlBvc2l0aXZlXCIse2xhYmVsOlwiWWFuZGV4IEJyb3dzZXJcIixwYXR0ZXJuOlwiWWFCcm93c2VyXCJ9LHtsYWJlbDpcIlVDIEJyb3dzZXJcIixwYXR0ZXJuOlwiVUNCcm93c2VyXCJ9LFwiT3BlcmEgTWluaVwiLHtsYWJlbDpcIk9wZXJhIE1pbmlcIixwYXR0ZXJuOlwiT1BpT1NcIn0sXCJPcGVyYVwiLHtsYWJlbDpcIk9wZXJhXCIscGF0dGVybjpcIk9QUlwifSxcIkNocm9taXVtXCIsXCJDaHJvbWVcIix7bGFiZWw6XCJDaHJvbWVcIixwYXR0ZXJuOlwiKD86SGVhZGxlc3NDaHJvbWUpXCJ9LHtsYWJlbDpcIkNocm9tZSBNb2JpbGVcIixwYXR0ZXJuOlwiKD86Q3JpT1N8Q3JNbylcIn0se2xhYmVsOlwiRmlyZWZveFwiLHBhdHRlcm46XCIoPzpGaXJlZm94fE1pbmVmaWVsZClcIn0se2xhYmVsOlwiRmlyZWZveCBmb3IgaU9TXCIscGF0dGVybjpcIkZ4aU9TXCJ9LHtsYWJlbDpcIklFXCIscGF0dGVybjpcIklFTW9iaWxlXCJ9LHtsYWJlbDpcIklFXCIscGF0dGVybjpcIk1TSUVcIn0sXCJTYWZhcmlcIl0pO3ZhciBBPWdldFByb2R1Y3QoW3tsYWJlbDpcIkJsYWNrQmVycnlcIixwYXR0ZXJuOlwiQkIxMFwifSxcIkJsYWNrQmVycnlcIix7bGFiZWw6XCJHYWxheHkgU1wiLHBhdHRlcm46XCJHVC1JOTAwMFwifSx7bGFiZWw6XCJHYWxheHkgUzJcIixwYXR0ZXJuOlwiR1QtSTkxMDBcIn0se2xhYmVsOlwiR2FsYXh5IFMzXCIscGF0dGVybjpcIkdULUk5MzAwXCJ9LHtsYWJlbDpcIkdhbGF4eSBTNFwiLHBhdHRlcm46XCJHVC1JOTUwMFwifSx7bGFiZWw6XCJHYWxheHkgUzVcIixwYXR0ZXJuOlwiU00tRzkwMFwifSx7bGFiZWw6XCJHYWxheHkgUzZcIixwYXR0ZXJuOlwiU00tRzkyMFwifSx7bGFiZWw6XCJHYWxheHkgUzYgRWRnZVwiLHBhdHRlcm46XCJTTS1HOTI1XCJ9LHtsYWJlbDpcIkdhbGF4eSBTN1wiLHBhdHRlcm46XCJTTS1HOTMwXCJ9LHtsYWJlbDpcIkdhbGF4eSBTNyBFZGdlXCIscGF0dGVybjpcIlNNLUc5MzVcIn0sXCJHb29nbGUgVFZcIixcIkx1bWlhXCIsXCJpUGFkXCIsXCJpUG9kXCIsXCJpUGhvbmVcIixcIktpbmRsZVwiLHtsYWJlbDpcIktpbmRsZSBGaXJlXCIscGF0dGVybjpcIig/OkNsb3VkOXxTaWxrLUFjY2VsZXJhdGVkKVwifSxcIk5leHVzXCIsXCJOb29rXCIsXCJQbGF5Qm9va1wiLFwiUGxheVN0YXRpb24gVml0YVwiLFwiUGxheVN0YXRpb25cIixcIlRvdWNoUGFkXCIsXCJUcmFuc2Zvcm1lclwiLHtsYWJlbDpcIldpaSBVXCIscGF0dGVybjpcIldpaVVcIn0sXCJXaWlcIixcIlhib3ggT25lXCIse2xhYmVsOlwiWGJveCAzNjBcIixwYXR0ZXJuOlwiWGJveFwifSxcIlhvb21cIl0pO3ZhciBJPWdldE1hbnVmYWN0dXJlcih7QXBwbGU6e2lQYWQ6MSxpUGhvbmU6MSxpUG9kOjF9LEFsY2F0ZWw6e30sQXJjaG9zOnt9LEFtYXpvbjp7S2luZGxlOjEsXCJLaW5kbGUgRmlyZVwiOjF9LEFzdXM6e1RyYW5zZm9ybWVyOjF9LFwiQmFybmVzICYgTm9ibGVcIjp7Tm9vazoxfSxCbGFja0JlcnJ5OntQbGF5Qm9vazoxfSxHb29nbGU6e1wiR29vZ2xlIFRWXCI6MSxOZXh1czoxfSxIUDp7VG91Y2hQYWQ6MX0sSFRDOnt9LEh1YXdlaTp7fSxMZW5vdm86e30sTEc6e30sTWljcm9zb2Z0OntYYm94OjEsXCJYYm94IE9uZVwiOjF9LE1vdG9yb2xhOntYb29tOjF9LE5pbnRlbmRvOntcIldpaSBVXCI6MSxXaWk6MX0sTm9raWE6e0x1bWlhOjF9LE9wcG86e30sU2Ftc3VuZzp7XCJHYWxheHkgU1wiOjEsXCJHYWxheHkgUzJcIjoxLFwiR2FsYXh5IFMzXCI6MSxcIkdhbGF4eSBTNFwiOjF9LFNvbnk6e1BsYXlTdGF0aW9uOjEsXCJQbGF5U3RhdGlvbiBWaXRhXCI6MX0sWGlhb21pOntNaToxLFJlZG1pOjF9fSk7dmFyIFQ9Z2V0T1MoW1wiV2luZG93cyBQaG9uZVwiLFwiS2FpT1NcIixcIkFuZHJvaWRcIixcIkNlbnRPU1wiLHtsYWJlbDpcIkNocm9tZSBPU1wiLHBhdHRlcm46XCJDck9TXCJ9LFwiRGViaWFuXCIse2xhYmVsOlwiRHJhZ29uRmx5IEJTRFwiLHBhdHRlcm46XCJEcmFnb25GbHlcIn0sXCJGZWRvcmFcIixcIkZyZWVCU0RcIixcIkdlbnRvb1wiLFwiSGFpa3VcIixcIkt1YnVudHVcIixcIkxpbnV4IE1pbnRcIixcIk9wZW5CU0RcIixcIlJlZCBIYXRcIixcIlN1U0VcIixcIlVidW50dVwiLFwiWHVidW50dVwiLFwiQ3lnd2luXCIsXCJTeW1iaWFuIE9TXCIsXCJocHdPU1wiLFwid2ViT1MgXCIsXCJ3ZWJPU1wiLFwiVGFibGV0IE9TXCIsXCJUaXplblwiLFwiTGludXhcIixcIk1hYyBPUyBYXCIsXCJNYWNpbnRvc2hcIixcIk1hY1wiLFwiV2luZG93cyA5ODtcIixcIldpbmRvd3MgXCJdKTtmdW5jdGlvbiBnZXRMYXlvdXQoaSl7cmV0dXJuIHJlZHVjZShpLChmdW5jdGlvbihpLHQpe3JldHVybiBpfHxSZWdFeHAoXCJcXFxcYlwiKyh0LnBhdHRlcm58fHF1YWxpZnkodCkpK1wiXFxcXGJcIixcImlcIikuZXhlYyhlKSYmKHQubGFiZWx8fHQpfSkpfWZ1bmN0aW9uIGdldE1hbnVmYWN0dXJlcihpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCxyKXtyZXR1cm4gaXx8KHRbQV18fHRbL15bYS16XSsoPzogK1thLXpdK1xcYikqL2kuZXhlYyhBKV18fFJlZ0V4cChcIlxcXFxiXCIrcXVhbGlmeShyKStcIig/OlxcXFxifFxcXFx3KlxcXFxkKVwiLFwiaVwiKS5leGVjKGUpKSYmcn0pKX1mdW5jdGlvbiBnZXROYW1lKGkpe3JldHVybiByZWR1Y2UoaSwoZnVuY3Rpb24oaSx0KXtyZXR1cm4gaXx8UmVnRXhwKFwiXFxcXGJcIisodC5wYXR0ZXJufHxxdWFsaWZ5KHQpKStcIlxcXFxiXCIsXCJpXCIpLmV4ZWMoZSkmJih0LmxhYmVsfHx0KX0pKX1mdW5jdGlvbiBnZXRPUyhpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCl7dmFyIHI9dC5wYXR0ZXJufHxxdWFsaWZ5KHQpO2lmKCFpJiYoaT1SZWdFeHAoXCJcXFxcYlwiK3IrXCIoPzovW1xcXFxkLl0rfFsgXFxcXHcuXSopXCIsXCJpXCIpLmV4ZWMoZSkpKXtpPWNsZWFudXBPUyhpLHIsdC5sYWJlbHx8dCl9cmV0dXJuIGl9KSl9ZnVuY3Rpb24gZ2V0UHJvZHVjdChpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCl7dmFyIHI9dC5wYXR0ZXJufHxxdWFsaWZ5KHQpO2lmKCFpJiYoaT1SZWdFeHAoXCJcXFxcYlwiK3IrXCIgKlxcXFxkK1suXFxcXHdfXSpcIixcImlcIikuZXhlYyhlKXx8UmVnRXhwKFwiXFxcXGJcIityK1wiICpcXFxcdystW1xcXFx3XSpcIixcImlcIikuZXhlYyhlKXx8UmVnRXhwKFwiXFxcXGJcIityK1wiKD86OyAqKD86W2Etel0rW18tXSk/W2Etel0rXFxcXGQrfFteICgpOy1dKilcIixcImlcIikuZXhlYyhlKSkpe2lmKChpPVN0cmluZyh0LmxhYmVsJiYhUmVnRXhwKHIsXCJpXCIpLnRlc3QodC5sYWJlbCk/dC5sYWJlbDppKS5zcGxpdChcIi9cIikpWzFdJiYhL1tcXGQuXSsvLnRlc3QoaVswXSkpe2lbMF0rPVwiIFwiK2lbMV19dD10LmxhYmVsfHx0O2k9Zm9ybWF0KGlbMF0ucmVwbGFjZShSZWdFeHAocixcImlcIiksdCkucmVwbGFjZShSZWdFeHAoXCI7ICooPzpcIit0K1wiW18tXSk/XCIsXCJpXCIpLFwiIFwiKS5yZXBsYWNlKFJlZ0V4cChcIihcIit0K1wiKVstXy5dPyhcXFxcdylcIixcImlcIiksXCIkMSAkMlwiKSl9cmV0dXJuIGl9KSl9ZnVuY3Rpb24gZ2V0VmVyc2lvbihpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCl7cmV0dXJuIGl8fChSZWdFeHAodCtcIig/Oi1bXFxcXGQuXSsvfCg/OiBmb3IgW1xcXFx3LV0rKT9bIC8tXSkoW1xcXFxkLl0rW14gKCk7L18tXSopXCIsXCJpXCIpLmV4ZWMoZSl8fDApWzFdfHxudWxsfSkpfWZ1bmN0aW9uIHRvU3RyaW5nUGxhdGZvcm0oKXtyZXR1cm4gdGhpcy5kZXNjcmlwdGlvbnx8XCJcIn1fJiYoXz1bX10pO2lmKC9cXGJBbmRyb2lkXFxiLy50ZXN0KFQpJiYhQSYmKE09L1xcYkFuZHJvaWRbXjtdKjsoLio/KSg/OkJ1aWxkfFxcKSBBcHBsZVdlYktpdClcXGIvaS5leGVjKGUpKSl7QT10cmltKE1bMV0pLnJlcGxhY2UoL15bYS16XXsyfS1bYS16XXsyfTtcXHMqL2ksXCJcIil8fG51bGx9aWYoSSYmIUEpe0E9Z2V0UHJvZHVjdChbSV0pfWVsc2UgaWYoSSYmQSl7QT1BLnJlcGxhY2UoUmVnRXhwKFwiXihcIitxdWFsaWZ5KEkpK1wiKVstXy5cXFxcc11cIixcImlcIiksSStcIiBcIikucmVwbGFjZShSZWdFeHAoXCJeKFwiK3F1YWxpZnkoSSkrXCIpWy1fLl0/KFxcXFx3KVwiLFwiaVwiKSxJK1wiICQyXCIpfWlmKE09L1xcYkdvb2dsZSBUVlxcYi8uZXhlYyhBKSl7QT1NWzBdfWlmKC9cXGJTaW11bGF0b3JcXGIvaS50ZXN0KGUpKXtBPShBP0ErXCIgXCI6XCJcIikrXCJTaW11bGF0b3JcIn1pZihSPT1cIk9wZXJhIE1pbmlcIiYmL1xcYk9QaU9TXFxiLy50ZXN0KGUpKXtQLnB1c2goXCJydW5uaW5nIGluIFR1cmJvL1VuY29tcHJlc3NlZCBtb2RlXCIpfWlmKFI9PVwiSUVcIiYmL1xcYmxpa2UgaVBob25lIE9TXFxiLy50ZXN0KGUpKXtNPXBhcnNlKGUucmVwbGFjZSgvbGlrZSBpUGhvbmUgT1MvLFwiXCIpKTtJPU0ubWFudWZhY3R1cmVyO0E9TS5wcm9kdWN0fWVsc2UgaWYoL15pUC8udGVzdChBKSl7Unx8KFI9XCJTYWZhcmlcIik7VD1cImlPU1wiKygoTT0vIE9TIChbXFxkX10rKS9pLmV4ZWMoZSkpP1wiIFwiK01bMV0ucmVwbGFjZSgvXy9nLFwiLlwiKTpcIlwiKX1lbHNlIGlmKFI9PVwiS29ucXVlcm9yXCImJi9eTGludXhcXGIvaS50ZXN0KFQpKXtUPVwiS3VidW50dVwifWVsc2UgaWYoSSYmSSE9XCJHb29nbGVcIiYmKC9DaHJvbWUvLnRlc3QoUikmJiEvXFxiTW9iaWxlIFNhZmFyaVxcYi9pLnRlc3QoZSl8fC9cXGJWaXRhXFxiLy50ZXN0KEEpKXx8L1xcYkFuZHJvaWRcXGIvLnRlc3QoVCkmJi9eQ2hyb21lLy50ZXN0KFIpJiYvXFxiVmVyc2lvblxcLy9pLnRlc3QoZSkpe1I9XCJBbmRyb2lkIEJyb3dzZXJcIjtUPS9cXGJBbmRyb2lkXFxiLy50ZXN0KFQpP1Q6XCJBbmRyb2lkXCJ9ZWxzZSBpZihSPT1cIlNpbGtcIil7aWYoIS9cXGJNb2JpL2kudGVzdChlKSl7VD1cIkFuZHJvaWRcIjtQLnVuc2hpZnQoXCJkZXNrdG9wIG1vZGVcIil9aWYoL0FjY2VsZXJhdGVkICo9ICp0cnVlL2kudGVzdChlKSl7UC51bnNoaWZ0KFwiYWNjZWxlcmF0ZWRcIil9fWVsc2UgaWYoUj09XCJVQyBCcm93c2VyXCImJi9cXGJVQ1dFQlxcYi8udGVzdChlKSl7UC5wdXNoKFwic3BlZWQgbW9kZVwiKX1lbHNlIGlmKFI9PVwiUGFsZU1vb25cIiYmKE09L1xcYkZpcmVmb3hcXC8oW1xcZC5dKylcXGIvLmV4ZWMoZSkpKXtQLnB1c2goXCJpZGVudGlmeWluZyBhcyBGaXJlZm94IFwiK01bMV0pfWVsc2UgaWYoUj09XCJGaXJlZm94XCImJihNPS9cXGIoTW9iaWxlfFRhYmxldHxUVilcXGIvaS5leGVjKGUpKSl7VHx8KFQ9XCJGaXJlZm94IE9TXCIpO0F8fChBPU1bMV0pfWVsc2UgaWYoIVJ8fChNPSEvXFxiTWluZWZpZWxkXFxiL2kudGVzdChlKSYmL1xcYig/OkZpcmVmb3h8U2FmYXJpKVxcYi8uZXhlYyhSKSkpe2lmKFImJiFBJiYvW1xcLyxdfF5bXihdKz9cXCkvLnRlc3QoZS5zbGljZShlLmluZGV4T2YoTStcIi9cIikrOCkpKXtSPW51bGx9aWYoKE09QXx8SXx8VCkmJihBfHxJfHwvXFxiKD86QW5kcm9pZHxTeW1iaWFuIE9TfFRhYmxldCBPU3x3ZWJPUylcXGIvLnRlc3QoVCkpKXtSPS9bYS16XSsoPzogSGF0KT8vaS5leGVjKC9cXGJBbmRyb2lkXFxiLy50ZXN0KFQpP1Q6TSkrXCIgQnJvd3NlclwifX1lbHNlIGlmKFI9PVwiRWxlY3Ryb25cIiYmKE09KC9cXGJDaHJvbWVcXC8oW1xcZC5dKylcXGIvLmV4ZWMoZSl8fDApWzFdKSl7UC5wdXNoKFwiQ2hyb21pdW0gXCIrTSl9aWYoIUIpe0I9Z2V0VmVyc2lvbihbXCIoPzpDbG91ZDl8Q3JpT1N8Q3JNb3xFZGdlfEVkZ3xFZGdBfEVkZ2lPU3xGeGlPU3xIZWFkbGVzc0Nocm9tZXxJRU1vYmlsZXxJcm9ufE9wZXJhID9NaW5pfE9QaU9TfE9QUnxSYXZlbnxTYW1zdW5nQnJvd3NlcnxTaWxrKD8hL1tcXFxcZC5dKyQpfFVDQnJvd3NlcnxZYUJyb3dzZXIpXCIsXCJWZXJzaW9uXCIscXVhbGlmeShSKSxcIig/OkZpcmVmb3h8TWluZWZpZWxkfE5ldEZyb250KVwiXSl9aWYoTT1fPT1cImlDYWJcIiYmcGFyc2VGbG9hdChCKT4zJiZcIldlYktpdFwifHwvXFxiT3BlcmFcXGIvLnRlc3QoUikmJigvXFxiT1BSXFxiLy50ZXN0KGUpP1wiQmxpbmtcIjpcIlByZXN0b1wiKXx8L1xcYig/Ok1pZG9yaXxOb29rfFNhZmFyaSlcXGIvaS50ZXN0KGUpJiYhL14oPzpUcmlkZW50fEVkZ2VIVE1MKSQvLnRlc3QoXykmJlwiV2ViS2l0XCJ8fCFfJiYvXFxiTVNJRVxcYi9pLnRlc3QoZSkmJihUPT1cIk1hYyBPU1wiP1wiVGFzbWFuXCI6XCJUcmlkZW50XCIpfHxfPT1cIldlYktpdFwiJiYvXFxiUGxheVN0YXRpb25cXGIoPyEgVml0YVxcYikvaS50ZXN0KFIpJiZcIk5ldEZyb250XCIpe189W01dfWlmKFI9PVwiSUVcIiYmKE09KC87ICooPzpYQkxXUHxadW5lV1ApKFxcZCspL2kuZXhlYyhlKXx8MClbMV0pKXtSKz1cIiBNb2JpbGVcIjtUPVwiV2luZG93cyBQaG9uZSBcIisoL1xcKyQvLnRlc3QoTSk/TTpNK1wiLnhcIik7UC51bnNoaWZ0KFwiZGVza3RvcCBtb2RlXCIpfWVsc2UgaWYoL1xcYldQRGVza3RvcFxcYi9pLnRlc3QoZSkpe1I9XCJJRSBNb2JpbGVcIjtUPVwiV2luZG93cyBQaG9uZSA4LnhcIjtQLnVuc2hpZnQoXCJkZXNrdG9wIG1vZGVcIik7Qnx8KEI9KC9cXGJydjooW1xcZC5dKykvLmV4ZWMoZSl8fDApWzFdKX1lbHNlIGlmKFIhPVwiSUVcIiYmXz09XCJUcmlkZW50XCImJihNPS9cXGJydjooW1xcZC5dKykvLmV4ZWMoZSkpKXtpZihSKXtQLnB1c2goXCJpZGVudGlmeWluZyBhcyBcIitSKyhCP1wiIFwiK0I6XCJcIikpfVI9XCJJRVwiO0I9TVsxXX1pZihrKXtpZihpc0hvc3RUeXBlKGksXCJnbG9iYWxcIikpe2lmKG0pe009bS5sYW5nLlN5c3RlbTtFPU0uZ2V0UHJvcGVydHkoXCJvcy5hcmNoXCIpO1Q9VHx8TS5nZXRQcm9wZXJ0eShcIm9zLm5hbWVcIikrXCIgXCIrTS5nZXRQcm9wZXJ0eShcIm9zLnZlcnNpb25cIil9aWYoZyl7dHJ5e0I9aS5yZXF1aXJlKFwicmluZ28vZW5naW5lXCIpLnZlcnNpb24uam9pbihcIi5cIik7Uj1cIlJpbmdvSlNcIn1jYXRjaChlKXtpZigoTT1pLnN5c3RlbSkmJk0uZ2xvYmFsLnN5c3RlbT09aS5zeXN0ZW0pe1I9XCJOYXJ3aGFsXCI7VHx8KFQ9TVswXS5vc3x8bnVsbCl9fWlmKCFSKXtSPVwiUmhpbm9cIn19ZWxzZSBpZih0eXBlb2YgaS5wcm9jZXNzPT1cIm9iamVjdFwiJiYhaS5wcm9jZXNzLmJyb3dzZXImJihNPWkucHJvY2Vzcykpe2lmKHR5cGVvZiBNLnZlcnNpb25zPT1cIm9iamVjdFwiKXtpZih0eXBlb2YgTS52ZXJzaW9ucy5lbGVjdHJvbj09XCJzdHJpbmdcIil7UC5wdXNoKFwiTm9kZSBcIitNLnZlcnNpb25zLm5vZGUpO1I9XCJFbGVjdHJvblwiO0I9TS52ZXJzaW9ucy5lbGVjdHJvbn1lbHNlIGlmKHR5cGVvZiBNLnZlcnNpb25zLm53PT1cInN0cmluZ1wiKXtQLnB1c2goXCJDaHJvbWl1bSBcIitCLFwiTm9kZSBcIitNLnZlcnNpb25zLm5vZGUpO1I9XCJOVy5qc1wiO0I9TS52ZXJzaW9ucy5ud319aWYoIVIpe1I9XCJOb2RlLmpzXCI7RT1NLmFyY2g7VD1NLnBsYXRmb3JtO0I9L1tcXGQuXSsvLmV4ZWMoTS52ZXJzaW9uKTtCPUI/QlswXTpudWxsfX19ZWxzZSBpZihnZXRDbGFzc09mKE09aS5ydW50aW1lKT09cCl7Uj1cIkFkb2JlIEFJUlwiO1Q9TS5mbGFzaC5zeXN0ZW0uQ2FwYWJpbGl0aWVzLm9zfWVsc2UgaWYoZ2V0Q2xhc3NPZihNPWkucGhhbnRvbSk9PXgpe1I9XCJQaGFudG9tSlNcIjtCPShNPU0udmVyc2lvbnx8bnVsbCkmJk0ubWFqb3IrXCIuXCIrTS5taW5vcitcIi5cIitNLnBhdGNofWVsc2UgaWYodHlwZW9mIE8uZG9jdW1lbnRNb2RlPT1cIm51bWJlclwiJiYoTT0vXFxiVHJpZGVudFxcLyhcXGQrKS9pLmV4ZWMoZSkpKXtCPVtCLE8uZG9jdW1lbnRNb2RlXTtpZigoTT0rTVsxXSs0KSE9QlsxXSl7UC5wdXNoKFwiSUUgXCIrQlsxXStcIiBtb2RlXCIpO18mJihfWzFdPVwiXCIpO0JbMV09TX1CPVI9PVwiSUVcIj9TdHJpbmcoQlsxXS50b0ZpeGVkKDEpKTpCWzBdfWVsc2UgaWYodHlwZW9mIE8uZG9jdW1lbnRNb2RlPT1cIm51bWJlclwiJiYvXig/OkNocm9tZXxGaXJlZm94KVxcYi8udGVzdChSKSl7UC5wdXNoKFwibWFza2luZyBhcyBcIitSK1wiIFwiK0IpO1I9XCJJRVwiO0I9XCIxMS4wXCI7Xz1bXCJUcmlkZW50XCJdO1Q9XCJXaW5kb3dzXCJ9VD1UJiZmb3JtYXQoVCl9aWYoQiYmKE09Lyg/OlthYl18ZHB8cHJlfFthYl1cXGQrcHJlKSg/OlxcZCtcXCs/KT8kL2kuZXhlYyhCKXx8Lyg/OmFscGhhfGJldGEpKD86ID9cXGQpPy9pLmV4ZWMoZStcIjtcIisoayYmbi5hcHBNaW5vclZlcnNpb24pKXx8L1xcYk1pbmVmaWVsZFxcYi9pLnRlc3QoZSkmJlwiYVwiKSl7Qz0vYi9pLnRlc3QoTSk/XCJiZXRhXCI6XCJhbHBoYVwiO0I9Qi5yZXBsYWNlKFJlZ0V4cChNK1wiXFxcXCs/JFwiKSxcIlwiKSsoQz09XCJiZXRhXCI/djpoKSsoL1xcZCtcXCs/Ly5leGVjKE0pfHxcIlwiKX1pZihSPT1cIkZlbm5lY1wifHxSPT1cIkZpcmVmb3hcIiYmL1xcYig/OkFuZHJvaWR8RmlyZWZveCBPU3xLYWlPUylcXGIvLnRlc3QoVCkpe1I9XCJGaXJlZm94IE1vYmlsZVwifWVsc2UgaWYoUj09XCJNYXh0aG9uXCImJkIpe0I9Qi5yZXBsYWNlKC9cXC5bXFxkLl0rLyxcIi54XCIpfWVsc2UgaWYoL1xcYlhib3hcXGIvaS50ZXN0KEEpKXtpZihBPT1cIlhib3ggMzYwXCIpe1Q9bnVsbH1pZihBPT1cIlhib3ggMzYwXCImJi9cXGJJRU1vYmlsZVxcYi8udGVzdChlKSl7UC51bnNoaWZ0KFwibW9iaWxlIG1vZGVcIil9fWVsc2UgaWYoKC9eKD86Q2hyb21lfElFfE9wZXJhKSQvLnRlc3QoUil8fFImJiFBJiYhL0Jyb3dzZXJ8TW9iaS8udGVzdChSKSkmJihUPT1cIldpbmRvd3MgQ0VcInx8L01vYmkvaS50ZXN0KGUpKSl7Uis9XCIgTW9iaWxlXCJ9ZWxzZSBpZihSPT1cIklFXCImJmspe3RyeXtpZihpLmV4dGVybmFsPT09bnVsbCl7UC51bnNoaWZ0KFwicGxhdGZvcm0gcHJldmlld1wiKX19Y2F0Y2goZSl7UC51bnNoaWZ0KFwiZW1iZWRkZWRcIil9fWVsc2UgaWYoKC9cXGJCbGFja0JlcnJ5XFxiLy50ZXN0KEEpfHwvXFxiQkIxMFxcYi8udGVzdChlKSkmJihNPShSZWdFeHAoQS5yZXBsYWNlKC8gKy9nLFwiICpcIikrXCIvKFsuXFxcXGRdKylcIixcImlcIikuZXhlYyhlKXx8MClbMV18fEIpKXtNPVtNLC9CQjEwLy50ZXN0KGUpXTtUPShNWzFdPyhBPW51bGwsST1cIkJsYWNrQmVycnlcIik6XCJEZXZpY2UgU29mdHdhcmVcIikrXCIgXCIrTVswXTtCPW51bGx9ZWxzZSBpZih0aGlzIT1mb3JPd24mJkEhPVwiV2lpXCImJihrJiZ5fHwvT3BlcmEvLnRlc3QoUikmJi9cXGIoPzpNU0lFfEZpcmVmb3gpXFxiL2kudGVzdChlKXx8Uj09XCJGaXJlZm94XCImJi9cXGJPUyBYICg/OlxcZCtcXC4pezIsfS8udGVzdChUKXx8Uj09XCJJRVwiJiYoVCYmIS9eV2luLy50ZXN0KFQpJiZCPjUuNXx8L1xcYldpbmRvd3MgWFBcXGIvLnRlc3QoVCkmJkI+OHx8Qj09OCYmIS9cXGJUcmlkZW50XFxiLy50ZXN0KGUpKSkmJiFmLnRlc3QoTT1wYXJzZS5jYWxsKGZvck93bixlLnJlcGxhY2UoZixcIlwiKStcIjtcIikpJiZNLm5hbWUpe009XCJpbmcgYXMgXCIrTS5uYW1lKygoTT1NLnZlcnNpb24pP1wiIFwiK006XCJcIik7aWYoZi50ZXN0KFIpKXtpZigvXFxiSUVcXGIvLnRlc3QoTSkmJlQ9PVwiTWFjIE9TXCIpe1Q9bnVsbH1NPVwiaWRlbnRpZnlcIitNfWVsc2V7TT1cIm1hc2tcIitNO2lmKHcpe1I9Zm9ybWF0KHcucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZyxcIiQxICQyXCIpKX1lbHNle1I9XCJPcGVyYVwifWlmKC9cXGJJRVxcYi8udGVzdChNKSl7VD1udWxsfWlmKCFrKXtCPW51bGx9fV89W1wiUHJlc3RvXCJdO1AucHVzaChNKX1pZihNPSgvXFxiQXBwbGVXZWJLaXRcXC8oW1xcZC5dK1xcKz8pL2kuZXhlYyhlKXx8MClbMV0pe009W3BhcnNlRmxvYXQoTS5yZXBsYWNlKC9cXC4oXFxkKSQvLFwiLjAkMVwiKSksTV07aWYoUj09XCJTYWZhcmlcIiYmTVsxXS5zbGljZSgtMSk9PVwiK1wiKXtSPVwiV2ViS2l0IE5pZ2h0bHlcIjtDPVwiYWxwaGFcIjtCPU1bMV0uc2xpY2UoMCwtMSl9ZWxzZSBpZihCPT1NWzFdfHxCPT0oTVsyXT0oL1xcYlNhZmFyaVxcLyhbXFxkLl0rXFwrPykvaS5leGVjKGUpfHwwKVsxXSkpe0I9bnVsbH1NWzFdPSgvXFxiKD86SGVhZGxlc3MpP0Nocm9tZVxcLyhbXFxkLl0rKS9pLmV4ZWMoZSl8fDApWzFdO2lmKE1bMF09PTUzNy4zNiYmTVsyXT09NTM3LjM2JiZwYXJzZUZsb2F0KE1bMV0pPj0yOCYmXz09XCJXZWJLaXRcIil7Xz1bXCJCbGlua1wiXX1pZigha3x8IXMmJiFNWzFdKXtfJiYoX1sxXT1cImxpa2UgU2FmYXJpXCIpO009KE09TVswXSxNPDQwMD8xOk08NTAwPzI6TTw1MjY/MzpNPDUzMz80Ok08NTM0P1wiNCtcIjpNPDUzNT81Ok08NTM3PzY6TTw1Mzg/NzpNPDYwMT84Ok08NjAyPzk6TTw2MDQ/MTA6TTw2MDY/MTE6TTw2MDg/MTI6XCIxMlwiKX1lbHNle18mJihfWzFdPVwibGlrZSBDaHJvbWVcIik7TT1NWzFdfHwoTT1NWzBdLE08NTMwPzE6TTw1MzI/MjpNPDUzMi4wNT8zOk08NTMzPzQ6TTw1MzQuMDM/NTpNPDUzNC4wNz82Ok08NTM0LjE/NzpNPDUzNC4xMz84Ok08NTM0LjE2Pzk6TTw1MzQuMjQ/MTA6TTw1MzQuMz8xMTpNPDUzNS4wMT8xMjpNPDUzNS4wMj9cIjEzK1wiOk08NTM1LjA3PzE1Ok08NTM1LjExPzE2Ok08NTM1LjE5PzE3Ok08NTM2LjA1PzE4Ok08NTM2LjE/MTk6TTw1MzcuMDE/MjA6TTw1MzcuMTE/XCIyMStcIjpNPDUzNy4xMz8yMzpNPDUzNy4xOD8yNDpNPDUzNy4yND8yNTpNPDUzNy4zNj8yNjpfIT1cIkJsaW5rXCI/XCIyN1wiOlwiMjhcIil9XyYmKF9bMV0rPVwiIFwiKyhNKz10eXBlb2YgTT09XCJudW1iZXJcIj9cIi54XCI6L1suK10vLnRlc3QoTSk/XCJcIjpcIitcIikpO2lmKFI9PVwiU2FmYXJpXCImJighQnx8cGFyc2VJbnQoQik+NDUpKXtCPU19ZWxzZSBpZihSPT1cIkNocm9tZVwiJiYvXFxiSGVhZGxlc3NDaHJvbWUvaS50ZXN0KGUpKXtQLnVuc2hpZnQoXCJoZWFkbGVzc1wiKX19aWYoUj09XCJPcGVyYVwiJiYoTT0vXFxiemJvdnx6dmF2JC8uZXhlYyhUKSkpe1IrPVwiIFwiO1AudW5zaGlmdChcImRlc2t0b3AgbW9kZVwiKTtpZihNPT1cInp2YXZcIil7Uis9XCJNaW5pXCI7Qj1udWxsfWVsc2V7Uis9XCJNb2JpbGVcIn1UPVQucmVwbGFjZShSZWdFeHAoXCIgKlwiK00rXCIkXCIpLFwiXCIpfWVsc2UgaWYoUj09XCJTYWZhcmlcIiYmL1xcYkNocm9tZVxcYi8uZXhlYyhfJiZfWzFdKSl7UC51bnNoaWZ0KFwiZGVza3RvcCBtb2RlXCIpO1I9XCJDaHJvbWUgTW9iaWxlXCI7Qj1udWxsO2lmKC9cXGJPUyBYXFxiLy50ZXN0KFQpKXtJPVwiQXBwbGVcIjtUPVwiaU9TIDQuMytcIn1lbHNle1Q9bnVsbH19ZWxzZSBpZigvXFxiU1JXYXJlIElyb25cXGIvLnRlc3QoUikmJiFCKXtCPWdldFZlcnNpb24oXCJDaHJvbWVcIil9aWYoQiYmQi5pbmRleE9mKE09L1tcXGQuXSskLy5leGVjKFQpKT09MCYmZS5pbmRleE9mKFwiL1wiK00rXCItXCIpPi0xKXtUPXRyaW0oVC5yZXBsYWNlKE0sXCJcIikpfWlmKFQmJlQuaW5kZXhPZihSKSE9LTEmJiFSZWdFeHAoUitcIiBPU1wiKS50ZXN0KFQpKXtUPVQucmVwbGFjZShSZWdFeHAoXCIgKlwiK3F1YWxpZnkoUikrXCIgKlwiKSxcIlwiKX1pZihfJiYhL1xcYig/OkF2YW50fE5vb2spXFxiLy50ZXN0KFIpJiYoL0Jyb3dzZXJ8THVuYXNjYXBlfE1heHRob24vLnRlc3QoUil8fFIhPVwiU2FmYXJpXCImJi9eaU9TLy50ZXN0KFQpJiYvXFxiU2FmYXJpXFxiLy50ZXN0KF9bMV0pfHwvXig/OkFkb2JlfEFyb3JhfEJyZWFjaHxNaWRvcml8T3BlcmF8UGhhbnRvbXxSZWtvbnF8Um9ja3xTYW1zdW5nIEludGVybmV0fFNsZWlwbmlyfFNSV2FyZSBJcm9ufFZpdmFsZGl8V2ViKS8udGVzdChSKSYmX1sxXSkpeyhNPV9bXy5sZW5ndGgtMV0pJiZQLnB1c2goTSl9aWYoUC5sZW5ndGgpe1A9W1wiKFwiK1Auam9pbihcIjsgXCIpK1wiKVwiXX1pZihJJiZBJiZBLmluZGV4T2YoSSk8MCl7UC5wdXNoKFwib24gXCIrSSl9aWYoQSl7UC5wdXNoKCgvXm9uIC8udGVzdChQW1AubGVuZ3RoLTFdKT9cIlwiOlwib24gXCIpK0EpfWlmKFQpe009LyAoW1xcZC4rXSspJC8uZXhlYyhUKTtXPU0mJlQuY2hhckF0KFQubGVuZ3RoLU1bMF0ubGVuZ3RoLTEpPT1cIi9cIjtUPXthcmNoaXRlY3R1cmU6MzIsZmFtaWx5Ok0mJiFXP1QucmVwbGFjZShNWzBdLFwiXCIpOlQsdmVyc2lvbjpNP01bMV06bnVsbCx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmVyc2lvbjtyZXR1cm4gdGhpcy5mYW1pbHkrKGUmJiFXP1wiIFwiK2U6XCJcIikrKHRoaXMuYXJjaGl0ZWN0dXJlPT02ND9cIiA2NC1iaXRcIjpcIlwiKX19fWlmKChNPS9cXGIoPzpBTUR8SUF8V2lufFdPV3x4ODZffHgpNjRcXGIvaS5leGVjKEUpKSYmIS9cXGJpNjg2XFxiL2kudGVzdChFKSl7aWYoVCl7VC5hcmNoaXRlY3R1cmU9NjQ7VC5mYW1pbHk9VC5mYW1pbHkucmVwbGFjZShSZWdFeHAoXCIgKlwiK00pLFwiXCIpfWlmKFImJigvXFxiV09XNjRcXGIvaS50ZXN0KGUpfHxrJiYvXFx3KD86ODZ8MzIpJC8udGVzdChuLmNwdUNsYXNzfHxuLnBsYXRmb3JtKSYmIS9cXGJXaW42NDsgeDY0XFxiL2kudGVzdChlKSkpe1AudW5zaGlmdChcIjMyLWJpdFwiKX19ZWxzZSBpZihUJiYvXk9TIFgvLnRlc3QoVC5mYW1pbHkpJiZSPT1cIkNocm9tZVwiJiZwYXJzZUZsb2F0KEIpPj0zOSl7VC5hcmNoaXRlY3R1cmU9NjR9ZXx8KGU9bnVsbCk7dmFyIEY9e307Ri5kZXNjcmlwdGlvbj1lO0YubGF5b3V0PV8mJl9bMF07Ri5tYW51ZmFjdHVyZXI9STtGLm5hbWU9UjtGLnByZXJlbGVhc2U9QztGLnByb2R1Y3Q9QTtGLnVhPWU7Ri52ZXJzaW9uPVImJkI7Ri5vcz1UfHx7YXJjaGl0ZWN0dXJlOm51bGwsZmFtaWx5Om51bGwsdmVyc2lvbjpudWxsLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJudWxsXCJ9fTtGLnBhcnNlPXBhcnNlO0YudG9TdHJpbmc9dG9TdHJpbmdQbGF0Zm9ybTtpZihGLnZlcnNpb24pe1AudW5zaGlmdChCKX1pZihGLm5hbWUpe1AudW5zaGlmdChSKX1pZihUJiZSJiYhKFQ9PVN0cmluZyhUKS5zcGxpdChcIiBcIilbMF0mJihUPT1SLnNwbGl0KFwiIFwiKVswXXx8QSkpKXtQLnB1c2goQT9cIihcIitUK1wiKVwiOlwib24gXCIrVCl9aWYoUC5sZW5ndGgpe0YuZGVzY3JpcHRpb249UC5qb2luKFwiIFwiKX1yZXR1cm4gRn12YXIgZD1wYXJzZSgpO2lmKG4mJm8pe2Zvck93bihkLChmdW5jdGlvbihlLGkpe25baV09ZX0pKX1lbHNle3IucGxhdGZvcm09ZH19KS5jYWxsKHRoaXMpfX07dmFyIGk9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyh0KXt2YXIgcj1pW3RdO2lmKHIhPT11bmRlZmluZWQpe3JldHVybiByLmV4cG9ydHN9dmFyIGE9aVt0XT17aWQ6dCxsb2FkZWQ6ZmFsc2UsZXhwb3J0czp7fX07dmFyIG49dHJ1ZTt0cnl7ZVt0XS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtuPWZhbHNlfWZpbmFsbHl7aWYobilkZWxldGUgaVt0XX1hLmxvYWRlZD10cnVlO3JldHVybiBhLmV4cG9ydHN9KCgpPT57X19uY2N3cGNrX3JlcXVpcmVfXy5ubWQ9ZT0+e2UucGF0aHM9W107aWYoIWUuY2hpbGRyZW4pZS5jaGlsZHJlbj1bXTtyZXR1cm4gZX19KSgpO2lmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgdD1fX25jY3dwY2tfcmVxdWlyZV9fKDU0MSk7bW9kdWxlLmV4cG9ydHM9dH0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/compiled/platform/platform.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js ***! + \*************************************************************************************/ +/***/ ((module) => { + +eval("(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;Object.defineProperty(r,\"__esModule\",{value:true});var n=\"<unknown>\";function parse(e){var r=e.split(\"\\n\");return r.reduce((function(e,r){var n=parseChrome(r)||parseWinjs(r)||parseGecko(r)||parseNode(r)||parseJSC(r);if(n){e.push(n)}return e}),[])}var a=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;var l=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;function parseChrome(e){var r=a.exec(e);if(!r){return null}var u=r[2]&&r[2].indexOf(\"native\")===0;var t=r[2]&&r[2].indexOf(\"eval\")===0;var i=l.exec(r[2]);if(t&&i!=null){r[2]=i[1];r[3]=i[2];r[4]=i[3]}return{file:!u?r[2]:null,methodName:r[1]||n,arguments:u?[r[2]]:[],lineNumber:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}var u=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseWinjs(e){var r=u.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}var t=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;var i=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;function parseGecko(e){var r=t.exec(e);if(!r){return null}var a=r[3]&&r[3].indexOf(\" > eval\")>-1;var l=i.exec(r[3]);if(a&&l!=null){r[3]=l[1];r[4]=l[2];r[5]=null}return{file:r[3],methodName:r[1]||n,arguments:r[2]?r[2].split(\",\"):[],lineNumber:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}var s=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;function parseJSC(e){var r=s.exec(e);if(!r){return null}return{file:r[3],methodName:r[1]||n,arguments:[],lineNumber:+r[4],column:r[5]?+r[5]:null}}var o=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseNode(e){var r=o.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}r.parse=parse})();module.exports=e})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3N0YWNrdHJhY2UtcGFyc2VyL3N0YWNrLXRyYWNlLXBhcnNlci5janMuanMiLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxhQUFhLGlGQUFpRixTQUFTLE1BQU0sUUFBUSxzQ0FBc0MsV0FBVyxFQUFFLGtCQUFrQixrQkFBa0Isb0JBQW9CLCtCQUErQiw4RUFBOEUsTUFBTSxVQUFVLFNBQVMsTUFBTSxrSkFBa0osc0NBQXNDLHdCQUF3QixnQkFBZ0IsT0FBTyxZQUFZLHVDQUF1QyxxQ0FBcUMsbUJBQW1CLGVBQWUsVUFBVSxVQUFVLFVBQVUsT0FBTyw4R0FBOEcsc0hBQXNILHVCQUF1QixnQkFBZ0IsT0FBTyxZQUFZLE9BQU8sbUZBQW1GLHdJQUF3SSxzREFBc0QsdUJBQXVCLGdCQUFnQixPQUFPLFlBQVksdUNBQXVDLG1CQUFtQixlQUFlLFVBQVUsVUFBVSxVQUFVLE9BQU8sa0hBQWtILHFFQUFxRSxxQkFBcUIsZ0JBQWdCLE9BQU8sWUFBWSxPQUFPLG1GQUFtRixzR0FBc0csc0JBQXNCLGdCQUFnQixPQUFPLFlBQVksT0FBTyxtRkFBbUYsY0FBYyxJQUFJLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3N0YWNrdHJhY2UtcGFyc2VyL3N0YWNrLXRyYWNlLXBhcnNlci5janMuanM/ZjIzYyJdLCJzb3VyY2VzQ29udGVudCI6WyIoKCk9PntcInVzZSBzdHJpY3RcIjtpZih0eXBlb2YgX19uY2N3cGNrX3JlcXVpcmVfXyE9PVwidW5kZWZpbmVkXCIpX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIGU9e307KCgpPT57dmFyIHI9ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3ZhciBuPVwiPHVua25vd24+XCI7ZnVuY3Rpb24gcGFyc2UoZSl7dmFyIHI9ZS5zcGxpdChcIlxcblwiKTtyZXR1cm4gci5yZWR1Y2UoKGZ1bmN0aW9uKGUscil7dmFyIG49cGFyc2VDaHJvbWUocil8fHBhcnNlV2luanMocil8fHBhcnNlR2Vja28ocil8fHBhcnNlTm9kZShyKXx8cGFyc2VKU0Mocik7aWYobil7ZS5wdXNoKG4pfXJldHVybiBlfSksW10pfXZhciBhPS9eXFxzKmF0ICguKj8pID9cXCgoKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWUtZXh0ZW5zaW9ufG5hdGl2ZXxldmFsfHdlYnBhY2t8PGFub255bW91cz58XFwvfFthLXpdOlxcXFx8XFxcXFxcXFwpLio/KSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xcKT9cXHMqJC9pO3ZhciBsPS9cXCgoXFxTKikoPzo6KFxcZCspKSg/OjooXFxkKykpXFwpLztmdW5jdGlvbiBwYXJzZUNocm9tZShlKXt2YXIgcj1hLmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXZhciB1PXJbMl0mJnJbMl0uaW5kZXhPZihcIm5hdGl2ZVwiKT09PTA7dmFyIHQ9clsyXSYmclsyXS5pbmRleE9mKFwiZXZhbFwiKT09PTA7dmFyIGk9bC5leGVjKHJbMl0pO2lmKHQmJmkhPW51bGwpe3JbMl09aVsxXTtyWzNdPWlbMl07cls0XT1pWzNdfXJldHVybntmaWxlOiF1P3JbMl06bnVsbCxtZXRob2ROYW1lOnJbMV18fG4sYXJndW1lbnRzOnU/W3JbMl1dOltdLGxpbmVOdW1iZXI6clszXT8rclszXTpudWxsLGNvbHVtbjpyWzRdPytyWzRdOm51bGx9fXZhciB1PS9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT8uKykgKT9cXCg/KCg/OmZpbGV8bXMtYXBweHxodHRwcz98d2VicGFja3xibG9iKTouKj8pOihcXGQrKSg/OjooXFxkKykpP1xcKT9cXHMqJC9pO2Z1bmN0aW9uIHBhcnNlV2luanMoZSl7dmFyIHI9dS5leGVjKGUpO2lmKCFyKXtyZXR1cm4gbnVsbH1yZXR1cm57ZmlsZTpyWzJdLG1ldGhvZE5hbWU6clsxXXx8bixhcmd1bWVudHM6W10sbGluZU51bWJlcjorclszXSxjb2x1bW46cls0XT8rcls0XTpudWxsfX12YXIgdD0vXlxccyooLio/KSg/OlxcKCguKj8pXFwpKT8oPzpefEApKCg/OmZpbGV8aHR0cHM/fGJsb2J8Y2hyb21lfHdlYnBhY2t8cmVzb3VyY2V8XFxbbmF0aXZlKS4qP3xbXkBdKmJ1bmRsZSkoPzo6KFxcZCspKT8oPzo6KFxcZCspKT9cXHMqJC9pO3ZhciBpPS8oXFxTKykgbGluZSAoXFxkKykoPzogPiBldmFsIGxpbmUgXFxkKykqID4gZXZhbC9pO2Z1bmN0aW9uIHBhcnNlR2Vja28oZSl7dmFyIHI9dC5leGVjKGUpO2lmKCFyKXtyZXR1cm4gbnVsbH12YXIgYT1yWzNdJiZyWzNdLmluZGV4T2YoXCIgPiBldmFsXCIpPi0xO3ZhciBsPWkuZXhlYyhyWzNdKTtpZihhJiZsIT1udWxsKXtyWzNdPWxbMV07cls0XT1sWzJdO3JbNV09bnVsbH1yZXR1cm57ZmlsZTpyWzNdLG1ldGhvZE5hbWU6clsxXXx8bixhcmd1bWVudHM6clsyXT9yWzJdLnNwbGl0KFwiLFwiKTpbXSxsaW5lTnVtYmVyOnJbNF0/K3JbNF06bnVsbCxjb2x1bW46cls1XT8rcls1XTpudWxsfX12YXIgcz0vXlxccyooPzooW15AXSopKD86XFwoKC4qPylcXCkpP0ApPyhcXFMuKj8pOihcXGQrKSg/OjooXFxkKykpP1xccyokL2k7ZnVuY3Rpb24gcGFyc2VKU0MoZSl7dmFyIHI9cy5leGVjKGUpO2lmKCFyKXtyZXR1cm4gbnVsbH1yZXR1cm57ZmlsZTpyWzNdLG1ldGhvZE5hbWU6clsxXXx8bixhcmd1bWVudHM6W10sbGluZU51bWJlcjorcls0XSxjb2x1bW46cls1XT8rcls1XTpudWxsfX12YXIgbz0vXlxccyphdCAoPzooKD86XFxbb2JqZWN0IG9iamVjdFxcXSk/W15cXFxcL10rKD86IFxcW2FzIFxcUytcXF0pPykgKT9cXCg/KC4qPyk6KFxcZCspKD86OihcXGQrKSk/XFwpP1xccyokL2k7ZnVuY3Rpb24gcGFyc2VOb2RlKGUpe3ZhciByPW8uZXhlYyhlKTtpZighcil7cmV0dXJuIG51bGx9cmV0dXJue2ZpbGU6clsyXSxtZXRob2ROYW1lOnJbMV18fG4sYXJndW1lbnRzOltdLGxpbmVOdW1iZXI6K3JbM10sY29sdW1uOnJbNF0/K3JbNF06bnVsbH19ci5wYXJzZT1wYXJzZX0pKCk7bW9kdWxlLmV4cG9ydHM9ZX0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/compiled/strip-ansi/index.js": +/*!*************************************************************!*\ + !*** ./node_modules/next/dist/compiled/strip-ansi/index.js ***! + \*************************************************************/ +/***/ ((module) => { + +"use strict"; +eval("\n(()=>{\n \"use strict\";\n var e = {\n 511: (e)=>{\n e.exports = ({ onlyFirst: e = false } = {})=>{\n const r = [\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\n \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"\n ].join(\"|\");\n return new RegExp(r, e ? undefined : \"g\");\n };\n },\n 532: (e, r, _)=>{\n const t = _(511);\n e.exports = (e)=>typeof e === \"string\" ? e.replace(t(), \"\") : e;\n }\n };\n var r = {};\n function __nccwpck_require__(_) {\n var t = r[_];\n if (t !== undefined) {\n return t.exports;\n }\n var a = r[_] = {\n exports: {}\n };\n var n = true;\n try {\n e[_](a, a.exports, __nccwpck_require__);\n n = false;\n } finally{\n if (n) delete r[_];\n }\n return a.exports;\n }\n if (typeof __nccwpck_require__ !== \"undefined\") __nccwpck_require__.ab = __dirname + \"/\";\n var _ = __nccwpck_require__(532);\n module.exports = _;\n})();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3N0cmlwLWFuc2kvaW5kZXguanMiLCJtYXBwaW5ncyI6IjtBQUFDO0lBQUs7SUFBYSxJQUFJQSxJQUFFO1FBQUMsS0FBSUEsQ0FBQUE7WUFBSUEsRUFBRUMsT0FBTyxHQUFDLENBQUMsRUFBQ0MsV0FBVUYsSUFBRSxLQUFLLEVBQUMsR0FBQyxDQUFDLENBQUM7Z0JBQUksTUFBTUcsSUFBRTtvQkFBQztvQkFBK0g7aUJBQTJELENBQUNDLElBQUksQ0FBQztnQkFBSyxPQUFPLElBQUlDLE9BQU9GLEdBQUVILElBQUVNLFlBQVU7WUFBSTtRQUFDO1FBQUUsS0FBSSxDQUFDTixHQUFFRyxHQUFFSTtZQUFLLE1BQU1DLElBQUVELEVBQUU7WUFBS1AsRUFBRUMsT0FBTyxHQUFDRCxDQUFBQSxJQUFHLE9BQU9BLE1BQUksV0FBU0EsRUFBRVMsT0FBTyxDQUFDRCxLQUFJLE1BQUlSO1FBQUM7SUFBQztJQUFFLElBQUlHLElBQUUsQ0FBQztJQUFFLFNBQVNPLG9CQUFvQkgsQ0FBQztRQUFFLElBQUlDLElBQUVMLENBQUMsQ0FBQ0ksRUFBRTtRQUFDLElBQUdDLE1BQUlGLFdBQVU7WUFBQyxPQUFPRSxFQUFFUCxPQUFPO1FBQUE7UUFBQyxJQUFJVSxJQUFFUixDQUFDLENBQUNJLEVBQUUsR0FBQztZQUFDTixTQUFRLENBQUM7UUFBQztRQUFFLElBQUlXLElBQUU7UUFBSyxJQUFHO1lBQUNaLENBQUMsQ0FBQ08sRUFBRSxDQUFDSSxHQUFFQSxFQUFFVixPQUFPLEVBQUNTO1lBQXFCRSxJQUFFO1FBQUssU0FBUTtZQUFDLElBQUdBLEdBQUUsT0FBT1QsQ0FBQyxDQUFDSSxFQUFFO1FBQUE7UUFBQyxPQUFPSSxFQUFFVixPQUFPO0lBQUE7SUFBQyxJQUFHLE9BQU9TLHdCQUFzQixhQUFZQSxvQkFBb0JHLEVBQUUsR0FBQ0MsWUFBVTtJQUFJLElBQUlQLElBQUVHLG9CQUFvQjtJQUFLSyxPQUFPZCxPQUFPLEdBQUNNO0FBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpL2luZGV4LmpzPzExZmEiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9ezUxMTplPT57ZS5leHBvcnRzPSh7b25seUZpcnN0OmU9ZmFsc2V9PXt9KT0+e2NvbnN0IHI9W1wiW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KVwiLFwiKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSlcIl0uam9pbihcInxcIik7cmV0dXJuIG5ldyBSZWdFeHAocixlP3VuZGVmaW5lZDpcImdcIil9fSw1MzI6KGUscixfKT0+e2NvbnN0IHQ9Xyg1MTEpO2UuZXhwb3J0cz1lPT50eXBlb2YgZT09PVwic3RyaW5nXCI/ZS5yZXBsYWNlKHQoKSxcIlwiKTplfX07dmFyIHI9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyhfKXt2YXIgdD1yW19dO2lmKHQhPT11bmRlZmluZWQpe3JldHVybiB0LmV4cG9ydHN9dmFyIGE9cltfXT17ZXhwb3J0czp7fX07dmFyIG49dHJ1ZTt0cnl7ZVtfXShhLGEuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtuPWZhbHNlfWZpbmFsbHl7aWYobilkZWxldGUgcltfXX1yZXR1cm4gYS5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgXz1fX25jY3dwY2tfcmVxdWlyZV9fKDUzMik7bW9kdWxlLmV4cG9ydHM9X30pKCk7Il0sIm5hbWVzIjpbImUiLCJleHBvcnRzIiwib25seUZpcnN0IiwiciIsImpvaW4iLCJSZWdFeHAiLCJ1bmRlZmluZWQiLCJfIiwidCIsInJlcGxhY2UiLCJfX25jY3dwY2tfcmVxdWlyZV9fIiwiYSIsIm4iLCJhYiIsIl9fZGlybmFtZSIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/compiled/strip-ansi/index.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/app-render/get-segment-param.js": +/*!***********************************************************************!*\ + !*** ./node_modules/next/dist/server/app-render/get-segment-param.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSegmentParam\", ({\n enumerable: true,\n get: function() {\n return getSegmentParam;\n }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ../future/helpers/interception-routes */ \"(ssr)/./node_modules/next/dist/server/future/helpers/interception-routes.js\");\nfunction getSegmentParam(segment) {\n const interceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((marker)=>segment.startsWith(marker));\n // if an interception marker is part of the path segment, we need to jump ahead\n // to the relevant portion for param parsing\n if (interceptionMarker) {\n segment = segment.slice(interceptionMarker.length);\n }\n if (segment.startsWith(\"[[...\") && segment.endsWith(\"]]\")) {\n return {\n type: \"optional-catchall\",\n param: segment.slice(5, -2)\n };\n }\n if (segment.startsWith(\"[...\") && segment.endsWith(\"]\")) {\n return {\n type: \"catchall\",\n param: segment.slice(4, -1)\n };\n }\n if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\n return {\n type: \"dynamic\",\n param: segment.slice(1, -1)\n };\n }\n return null;\n}\n\n//# sourceMappingURL=get-segment-param.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL2dldC1zZWdtZW50LXBhcmFtLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsbURBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsNEJBQTRCLG1CQUFPLENBQUMsMEhBQXVDO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL2dldC1zZWdtZW50LXBhcmFtLmpzPzA0ZjIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTZWdtZW50UGFyYW1cIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFNlZ21lbnRQYXJhbTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcmNlcHRpb25yb3V0ZXMgPSByZXF1aXJlKFwiLi4vZnV0dXJlL2hlbHBlcnMvaW50ZXJjZXB0aW9uLXJvdXRlc1wiKTtcbmZ1bmN0aW9uIGdldFNlZ21lbnRQYXJhbShzZWdtZW50KSB7XG4gICAgY29uc3QgaW50ZXJjZXB0aW9uTWFya2VyID0gX2ludGVyY2VwdGlvbnJvdXRlcy5JTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5maW5kKChtYXJrZXIpPT5zZWdtZW50LnN0YXJ0c1dpdGgobWFya2VyKSk7XG4gICAgLy8gaWYgYW4gaW50ZXJjZXB0aW9uIG1hcmtlciBpcyBwYXJ0IG9mIHRoZSBwYXRoIHNlZ21lbnQsIHdlIG5lZWQgdG8ganVtcCBhaGVhZFxuICAgIC8vIHRvIHRoZSByZWxldmFudCBwb3J0aW9uIGZvciBwYXJhbSBwYXJzaW5nXG4gICAgaWYgKGludGVyY2VwdGlvbk1hcmtlcikge1xuICAgICAgICBzZWdtZW50ID0gc2VnbWVudC5zbGljZShpbnRlcmNlcHRpb25NYXJrZXIubGVuZ3RoKTtcbiAgICB9XG4gICAgaWYgKHNlZ21lbnQuc3RhcnRzV2l0aChcIltbLi4uXCIpICYmIHNlZ21lbnQuZW5kc1dpdGgoXCJdXVwiKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogXCJvcHRpb25hbC1jYXRjaGFsbFwiLFxuICAgICAgICAgICAgcGFyYW06IHNlZ21lbnQuc2xpY2UoNSwgLTIpXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChzZWdtZW50LnN0YXJ0c1dpdGgoXCJbLi4uXCIpICYmIHNlZ21lbnQuZW5kc1dpdGgoXCJdXCIpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcImNhdGNoYWxsXCIsXG4gICAgICAgICAgICBwYXJhbTogc2VnbWVudC5zbGljZSg0LCAtMSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHNlZ21lbnQuc3RhcnRzV2l0aChcIltcIikgJiYgc2VnbWVudC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFwiZHluYW1pY1wiLFxuICAgICAgICAgICAgcGFyYW06IHNlZ21lbnQuc2xpY2UoMSwgLTEpXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXQtc2VnbWVudC1wYXJhbS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/app-render/get-segment-param.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/dev/hot-reloader-types.js": +/*!*****************************************************************!*\ + !*** ./node_modules/next/dist/server/dev/hot-reloader-types.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HMR_ACTIONS_SENT_TO_BROWSER\", ({\n enumerable: true,\n get: function() {\n return HMR_ACTIONS_SENT_TO_BROWSER;\n }\n}));\nvar HMR_ACTIONS_SENT_TO_BROWSER;\n(function(HMR_ACTIONS_SENT_TO_BROWSER) {\n HMR_ACTIONS_SENT_TO_BROWSER[\"ADDED_PAGE\"] = \"addedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"REMOVED_PAGE\"] = \"removedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"RELOAD_PAGE\"] = \"reloadPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_COMPONENT_CHANGES\"] = \"serverComponentChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"MIDDLEWARE_CHANGES\"] = \"middlewareChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"CLIENT_CHANGES\"] = \"clientChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ONLY_CHANGES\"] = \"serverOnlyChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SYNC\"] = \"sync\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILT\"] = \"built\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILDING\"] = \"building\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"FINISH_BUILDING\"] = \"finishBuilding\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_PAGES_MANIFEST_UPDATE\"] = \"devPagesManifestUpdate\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_MESSAGE\"] = \"turbopack-message\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ERROR\"] = \"serverError\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_CONNECTED\"] = \"turbopack-connected\";\n})(HMR_ACTIONS_SENT_TO_BROWSER || (HMR_ACTIONS_SENT_TO_BROWSER = {}));\n\n//# sourceMappingURL=hot-reloader-types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsK0RBQThEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsa0VBQWtFOztBQUVuRSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzLmpzPzE0MzgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUjtcbiAgICB9XG59KTtcbnZhciBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVI7XG4oZnVuY3Rpb24oSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSKSB7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQURERURfUEFHRVwiXSA9IFwiYWRkZWRQYWdlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiUkVNT1ZFRF9QQUdFXCJdID0gXCJyZW1vdmVkUGFnZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlJFTE9BRF9QQUdFXCJdID0gXCJyZWxvYWRQYWdlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiU0VSVkVSX0NPTVBPTkVOVF9DSEFOR0VTXCJdID0gXCJzZXJ2ZXJDb21wb25lbnRDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiTUlERExFV0FSRV9DSEFOR0VTXCJdID0gXCJtaWRkbGV3YXJlQ2hhbmdlc1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkNMSUVOVF9DSEFOR0VTXCJdID0gXCJjbGllbnRDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiU0VSVkVSX09OTFlfQ0hBTkdFU1wiXSA9IFwic2VydmVyT25seUNoYW5nZXNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTWU5DXCJdID0gXCJzeW5jXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQlVJTFRcIl0gPSBcImJ1aWx0XCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQlVJTERJTkdcIl0gPSBcImJ1aWxkaW5nXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiRklOSVNIX0JVSUxESU5HXCJdID0gXCJmaW5pc2hCdWlsZGluZ1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkRFVl9QQUdFU19NQU5JRkVTVF9VUERBVEVcIl0gPSBcImRldlBhZ2VzTWFuaWZlc3RVcGRhdGVcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJUVVJCT1BBQ0tfTUVTU0FHRVwiXSA9IFwidHVyYm9wYWNrLW1lc3NhZ2VcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTRVJWRVJfRVJST1JcIl0gPSBcInNlcnZlckVycm9yXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiVFVSQk9QQUNLX0NPTk5FQ1RFRFwiXSA9IFwidHVyYm9wYWNrLWNvbm5lY3RlZFwiO1xufSkoSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIHx8IChITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIgPSB7fSkpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob3QtcmVsb2FkZXItdHlwZXMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/dev/hot-reloader-types.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/future/helpers/interception-routes.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/helpers/interception-routes.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n INTERCEPTION_ROUTE_MARKERS: function() {\n return INTERCEPTION_ROUTE_MARKERS;\n },\n isInterceptionRouteAppPath: function() {\n return isInterceptionRouteAppPath;\n },\n extractInterceptionRouteInformation: function() {\n return extractInterceptionRouteInformation;\n }\n});\nconst _apppaths = __webpack_require__(/*! ../../../shared/lib/router/utils/app-paths */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js\");\nconst INTERCEPTION_ROUTE_MARKERS = [\n \"(..)(..)\",\n \"(.)\",\n \"(..)\",\n \"(...)\"\n];\nfunction isInterceptionRouteAppPath(path) {\n // TODO-APP: add more serious validation\n return path.split(\"/\").find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined;\n}\nfunction extractInterceptionRouteInformation(path) {\n let interceptingRoute, marker, interceptedRoute;\n for (const segment of path.split(\"/\")){\n marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n if (marker) {\n [interceptingRoute, interceptedRoute] = path.split(marker, 2);\n break;\n }\n }\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(`Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`);\n }\n interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n ;\n switch(marker){\n case \"(.)\":\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === \"/\") {\n interceptedRoute = `/${interceptedRoute}`;\n } else {\n interceptedRoute = interceptingRoute + \"/\" + interceptedRoute;\n }\n break;\n case \"(..)\":\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === \"/\") {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`);\n }\n interceptedRoute = interceptingRoute.split(\"/\").slice(0, -1).concat(interceptedRoute).join(\"/\");\n break;\n case \"(...)\":\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = \"/\" + interceptedRoute;\n break;\n case \"(..)(..)\":\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n const splitInterceptingRoute = interceptingRoute.split(\"/\");\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`);\n }\n interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join(\"/\");\n break;\n default:\n throw new Error(\"Invariant: unexpected marker\");\n }\n return {\n interceptingRoute,\n interceptedRoute\n };\n}\n\n//# sourceMappingURL=interception-routes.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvaGVscGVycy9pbnRlcmNlcHRpb24tcm91dGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUlMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsa0JBQWtCLG1CQUFPLENBQUMsdUhBQTRDO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsS0FBSztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxpQkFBaUI7QUFDeEQsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxLQUFLO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsS0FBSztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9oZWxwZXJzL2ludGVyY2VwdGlvbi1yb3V0ZXMuanM/YzllNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTOiBudWxsLFxuICAgIGlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoOiBudWxsLFxuICAgIGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTO1xuICAgIH0sXG4gICAgaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGg7XG4gICAgfSxcbiAgICBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbjtcbiAgICB9XG59KTtcbmNvbnN0IF9hcHBwYXRocyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hcHAtcGF0aHNcIik7XG5jb25zdCBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyA9IFtcbiAgICBcIiguLikoLi4pXCIsXG4gICAgXCIoLilcIixcbiAgICBcIiguLilcIixcbiAgICBcIiguLi4pXCJcbl07XG5mdW5jdGlvbiBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aChwYXRoKSB7XG4gICAgLy8gVE9ETy1BUFA6IGFkZCBtb3JlIHNlcmlvdXMgdmFsaWRhdGlvblxuICAgIHJldHVybiBwYXRoLnNwbGl0KFwiL1wiKS5maW5kKChzZWdtZW50KT0+SU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSk9PnNlZ21lbnQuc3RhcnRzV2l0aChtKSkpICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbihwYXRoKSB7XG4gICAgbGV0IGludGVyY2VwdGluZ1JvdXRlLCBtYXJrZXIsIGludGVyY2VwdGVkUm91dGU7XG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHBhdGguc3BsaXQoXCIvXCIpKXtcbiAgICAgICAgbWFya2VyID0gSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSk9PnNlZ21lbnQuc3RhcnRzV2l0aChtKSk7XG4gICAgICAgIGlmIChtYXJrZXIpIHtcbiAgICAgICAgICAgIFtpbnRlcmNlcHRpbmdSb3V0ZSwgaW50ZXJjZXB0ZWRSb3V0ZV0gPSBwYXRoLnNwbGl0KG1hcmtlciwgMik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWludGVyY2VwdGluZ1JvdXRlIHx8ICFtYXJrZXIgfHwgIWludGVyY2VwdGVkUm91dGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gTXVzdCBiZSBpbiB0aGUgZm9ybWF0IC88aW50ZXJjZXB0aW5nIHJvdXRlPi8oLi58Li4ufC4uKSguLikvPGludGVyY2VwdGVkIHJvdXRlPmApO1xuICAgIH1cbiAgICBpbnRlcmNlcHRpbmdSb3V0ZSA9ICgwLCBfYXBwcGF0aHMubm9ybWFsaXplQXBwUGF0aCkoaW50ZXJjZXB0aW5nUm91dGUpIC8vIG5vcm1hbGl6ZSB0aGUgcGF0aCwgZS5nLiAvKGJsb2cpL2ZlZWQgLT4gL2ZlZWRcbiAgICA7XG4gICAgc3dpdGNoKG1hcmtlcil7XG4gICAgICAgIGNhc2UgXCIoLilcIjpcbiAgICAgICAgICAgIC8vICguKSBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgbWF0Y2ggd2l0aCBzaWJsaW5nIHJvdXRlcywgc28gd2UganVzdCBuZWVkIHRvIGFwcGVuZCB0aGUgaW50ZXJjZXB0ZWQgcm91dGUgdG8gdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgICAgICAgaWYgKGludGVyY2VwdGluZ1JvdXRlID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIGludGVyY2VwdGVkUm91dGUgPSBgLyR7aW50ZXJjZXB0ZWRSb3V0ZX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnRlcmNlcHRlZFJvdXRlID0gaW50ZXJjZXB0aW5nUm91dGUgKyBcIi9cIiArIGludGVyY2VwdGVkUm91dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIiguLilcIjpcbiAgICAgICAgICAgIC8vICguLikgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIG1hdGNoIGF0IG9uZSBsZXZlbCB1cCwgc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG4gICAgICAgICAgICBpZiAoaW50ZXJjZXB0aW5nUm91dGUgPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pIG1hcmtlciBhdCB0aGUgcm9vdCBsZXZlbCwgdXNlICguKSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSkuY29uY2F0KGludGVyY2VwdGVkUm91dGUpLmpvaW4oXCIvXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIoLi4uKVwiOlxuICAgICAgICAgICAgLy8gKC4uLikgd2lsbCBtYXRjaCB0aGUgcm91dGUgc2VnbWVudCBpbiB0aGUgcm9vdCBkaXJlY3RvcnksIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSByb290IGRpcmVjdG9yeSB0byBwcmVwZW5kIHRoZSBpbnRlcmNlcHRlZCByb3V0ZVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IFwiL1wiICsgaW50ZXJjZXB0ZWRSb3V0ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiKC4uKSguLilcIjpcbiAgICAgICAgICAgIC8vICguLikoLi4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCBhdCB0d28gbGV2ZWxzIHVwLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCB0d28gc2VnbWVudHMgb2YgdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgICAgICAgY29uc3Qgc3BsaXRJbnRlcmNlcHRpbmdSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChzcGxpdEludGVyY2VwdGluZ1JvdXRlLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pKC4uKSBtYXJrZXIgYXQgdGhlIHJvb3QgbGV2ZWwgb3Igb25lIGxldmVsIHVwLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IHNwbGl0SW50ZXJjZXB0aW5nUm91dGUuc2xpY2UoMCwgLTIpLmNvbmNhdChpbnRlcmNlcHRlZFJvdXRlKS5qb2luKFwiL1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YXJpYW50OiB1bmV4cGVjdGVkIG1hcmtlclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW50ZXJjZXB0aW5nUm91dGUsXG4gICAgICAgIGludGVyY2VwdGVkUm91dGVcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcmNlcHRpb24tcm91dGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/future/helpers/interception-routes.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?3fb7": +/*!****************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js ***! + \****************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nif (false) {} else {\n if (false) {} else {\n if (true) {\n module.exports = __webpack_require__(/*! next/dist/compiled/next-server/app-page.runtime.dev.js */ \"next/dist/compiled/next-server/app-page.runtime.dev.js\");\n } else {}\n }\n}\n\n//# sourceMappingURL=module.compiled.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS9tb2R1bGUuY29tcGlsZWQuanM/M2ZiNyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLElBQUksS0FBbUMsRUFBRSxFQUV4QyxDQUFDO0FBQ0YsUUFBUSxLQUFxQyxFQUFFLEVBUTFDLENBQUM7QUFDTixZQUFZLElBQXNDO0FBQ2xELFlBQVksNEpBQWtGO0FBQzlGLFVBQVUsS0FBSyxFQUlOO0FBQ1Q7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS9tb2R1bGUuY29tcGlsZWQuanM/YzBlYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbmlmIChwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgPT09IFwiZWRnZVwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS9tb2R1bGUuanNcIik7XG59IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfRVhQRVJJTUVOVEFMX1JFQUNUKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1zZXJ2ZXIvYXBwLXBhZ2UtZXhwZXJpbWVudGFsLnJ1bnRpbWUuZGV2LmpzXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL25leHQtc2VydmVyL2FwcC1wYWdlLXR1cmJvLWV4cGVyaW1lbnRhbC5ydW50aW1lLnByb2QuanNcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1zZXJ2ZXIvYXBwLXBhZ2UtZXhwZXJpbWVudGFsLnJ1bnRpbWUucHJvZC5qc1wiKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1zZXJ2ZXIvYXBwLXBhZ2UucnVudGltZS5kZXYuanNcIik7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuVFVSQk9QQUNLKSB7XG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1zZXJ2ZXIvYXBwLXBhZ2UtdHVyYm8ucnVudGltZS5wcm9kLmpzXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL25leHQtc2VydmVyL2FwcC1wYWdlLnJ1bnRpbWUucHJvZC5qc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bW9kdWxlLmNvbXBpbGVkLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?3fb7\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js": +/*!*************************************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js ***! + \*************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?3fb7\").vendored.contexts.AppRouterContext;\n\n//# sourceMappingURL=app-router-context.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9jb250ZXh0cy9hcHAtcm91dGVyLWNvbnRleHQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixtTUFBdUY7O0FBRXZGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1wYWdlL3ZlbmRvcmVkL2NvbnRleHRzL2FwcC1yb3V0ZXItY29udGV4dC5qcz85MGFkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbW9kdWxlLmNvbXBpbGVkXCIpLnZlbmRvcmVkW1wiY29udGV4dHNcIl0uQXBwUm91dGVyQ29udGV4dDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXJvdXRlci1jb250ZXh0LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/hooks-client-context.js": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/hooks-client-context.js ***! + \***************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?3fb7\").vendored.contexts.HooksClientContext;\n\n//# sourceMappingURL=hooks-client-context.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9jb250ZXh0cy9ob29rcy1jbGllbnQtY29udGV4dC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHFNQUF5Rjs7QUFFekYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLW1vZHVsZXMvYXBwLXBhZ2UvdmVuZG9yZWQvY29udGV4dHMvaG9va3MtY2xpZW50LWNvbnRleHQuanM/OTZhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL21vZHVsZS5jb21waWxlZFwiKS52ZW5kb3JlZFtcImNvbnRleHRzXCJdLkhvb2tzQ2xpZW50Q29udGV4dDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MtY2xpZW50LWNvbnRleHQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/hooks-client-context.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/server-inserted-html.js": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/server-inserted-html.js ***! + \***************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?3fb7\").vendored.contexts.ServerInsertedHtml;\n\n//# sourceMappingURL=server-inserted-html.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9jb250ZXh0cy9zZXJ2ZXItaW5zZXJ0ZWQtaHRtbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLHFNQUF5Rjs7QUFFekYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL3JvdXRlLW1vZHVsZXMvYXBwLXBhZ2UvdmVuZG9yZWQvY29udGV4dHMvc2VydmVyLWluc2VydGVkLWh0bWwuanM/OWViYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uL21vZHVsZS5jb21waWxlZFwiKS52ZW5kb3JlZFtcImNvbnRleHRzXCJdLlNlcnZlckluc2VydGVkSHRtbDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VydmVyLWluc2VydGVkLWh0bWwuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/server-inserted-html.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-dom.js": +/*!***********************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-dom.js ***! + \***********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?3fb7\").vendored[\"react-ssr\"].ReactDOM;\n\n//# sourceMappingURL=react-dom.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9zc3IvcmVhY3QtZG9tLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsK0xBQWdGOztBQUVoRiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9zc3IvcmVhY3QtZG9tLmpzPzVhNTYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9tb2R1bGUuY29tcGlsZWRcIikudmVuZG9yZWRbXCJyZWFjdC1zc3JcIl0uUmVhY3RET007XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlYWN0LWRvbS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-dom.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js ***! + \***********************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?3fb7\").vendored[\"react-ssr\"].ReactJsxDevRuntime;\n\n//# sourceMappingURL=react-jsx-dev-runtime.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9zc3IvcmVhY3QtanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IseU1BQTBGOztBQUUxRiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9zc3IvcmVhY3QtanN4LWRldi1ydW50aW1lLmpzPzVjYjQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9tb2R1bGUuY29tcGlsZWRcIikudmVuZG9yZWRbXCJyZWFjdC1zc3JcIl0uUmVhY3RKc3hEZXZSdW50aW1lO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js ***! + \*******************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?3fb7\").vendored[\"react-ssr\"].ReactJsxRuntime;\n\n//# sourceMappingURL=react-jsx-runtime.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9zc3IvcmVhY3QtanN4LXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzTUFBdUY7O0FBRXZGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1wYWdlL3ZlbmRvcmVkL3Nzci9yZWFjdC1qc3gtcnVudGltZS5qcz9jOTU0Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbW9kdWxlLmNvbXBpbGVkXCIpLnZlbmRvcmVkW1wicmVhY3Qtc3NyXCJdLlJlYWN0SnN4UnVudGltZTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtanN4LXJ1bnRpbWUuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-jsx-runtime.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client-edge.js": +/*!**************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client-edge.js ***! + \**************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?3fb7\").vendored[\"react-ssr\"].ReactServerDOMWebpackClientEdge;\n\n//# sourceMappingURL=react-server-dom-webpack-client-edge.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9zc3IvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrLWNsaWVudC1lZGdlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isc05BQXVHOztBQUV2RyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9zc3IvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrLWNsaWVudC1lZGdlLmpzPzE4ZTgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9tb2R1bGUuY29tcGlsZWRcIikudmVuZG9yZWRbXCJyZWFjdC1zc3JcIl0uUmVhY3RTZXJ2ZXJET01XZWJwYWNrQ2xpZW50RWRnZTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrLWNsaWVudC1lZGdlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client-edge.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js": +/*!*******************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js ***! + \*******************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?3fb7\").vendored[\"react-ssr\"].React;\n\n//# sourceMappingURL=react.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9zc3IvcmVhY3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw0TEFBNkU7O0FBRTdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1wYWdlL3ZlbmRvcmVkL3Nzci9yZWFjdC5qcz9iMGU4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbW9kdWxlLmNvbXBpbGVkXCIpLnZlbmRvcmVkW1wicmVhY3Qtc3NyXCJdLlJlYWN0O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/hash.js": +/*!***************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/hash.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("// http://www.cse.yorku.ca/~oz/hash.html\n// More specifically, 32-bit hash via djbxor\n// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765)\n// This is due to number type differences between rust for turbopack to js number types,\n// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching\n// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation\n// as can gaurantee determinstic output from 32bit hash.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n djb2Hash: function() {\n return djb2Hash;\n },\n hexHash: function() {\n return hexHash;\n }\n});\nfunction djb2Hash(str) {\n let hash = 5381;\n for(let i = 0; i < str.length; i++){\n const char = str.charCodeAt(i);\n hash = (hash << 5) + hash + char & 0xffffffff;\n }\n return hash >>> 0;\n}\nfunction hexHash(str) {\n return djb2Hash(str).toString(36).slice(0, 5);\n} //# sourceMappingURL=hash.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaGFzaC5qcyIsIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsNENBQTRDO0FBQzVDLGlIQUFpSDtBQUNqSCx3RkFBd0Y7QUFDeEYsZ0dBQWdHO0FBQ2hHLHdIQUF3SDtBQUN4SCx3REFBd0Q7QUFDM0M7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLFVBQVU7UUFDTixPQUFPQTtJQUNYO0lBQ0FDLFNBQVM7UUFDTCxPQUFPQTtJQUNYO0FBQ0o7QUFDQSxTQUFTRCxTQUFTUSxHQUFHO0lBQ2pCLElBQUlDLE9BQU87SUFDWCxJQUFJLElBQUlDLElBQUksR0FBR0EsSUFBSUYsSUFBSUcsTUFBTSxFQUFFRCxJQUFJO1FBQy9CLE1BQU1FLE9BQU9KLElBQUlLLFVBQVUsQ0FBQ0g7UUFDNUJELE9BQU8sQ0FBQ0EsUUFBUSxLQUFLQSxPQUFPRyxPQUFPO0lBQ3ZDO0lBQ0EsT0FBT0gsU0FBUztBQUNwQjtBQUNBLFNBQVNSLFFBQVFPLEdBQUc7SUFDaEIsT0FBT1IsU0FBU1EsS0FBS00sUUFBUSxDQUFDLElBQUlDLEtBQUssQ0FBQyxHQUFHO0FBQy9DLEVBRUEsZ0NBQWdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9oYXNoLmpzP2NiNmYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cDovL3d3dy5jc2UueW9ya3UuY2Evfm96L2hhc2guaHRtbFxuLy8gTW9yZSBzcGVjaWZpY2FsbHksIDMyLWJpdCBoYXNoIHZpYSBkamJ4b3Jcbi8vIChyZWY6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2VwbGF3bGVzcy81MjgxM2IxZDhhZDlhZjUxMGQ4NT9wZXJtYWxpbmtfY29tbWVudF9pZD0zMzY3NzY1I2dpc3Rjb21tZW50LTMzNjc3NjUpXG4vLyBUaGlzIGlzIGR1ZSB0byBudW1iZXIgdHlwZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHJ1c3QgZm9yIHR1cmJvcGFjayB0byBqcyBudW1iZXIgdHlwZXMsXG4vLyB3aGVyZSBydXN0IGRvZXMgbm90IGhhdmUgZWFzeSB3YXkgdG8gcmVwcmVlc250IGpzJ3MgNTMtYml0IGZsb2F0IG51bWJlciB0eXBlIGZvciB0aGUgbWF0Y2hpbmdcbi8vIG92ZXJmbG93IGJlaGF2aW9yLiBUaGlzIGlzIG1vcmUgYGNvcnJlY3RgIGluIHRlcm1zIG9mIGhhdmluZyBjYW5vbmljYWwgaGFzaCBhY3Jvc3MgZGlmZmVyZW50IHJ1bnRpbWUgLyBpbXBsZW1lbnRhdGlvblxuLy8gYXMgY2FuIGdhdXJhbnRlZSBkZXRlcm1pbnN0aWMgb3V0cHV0IGZyb20gMzJiaXQgaGFzaC5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZGpiMkhhc2g6IG51bGwsXG4gICAgaGV4SGFzaDogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBkamIySGFzaDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkamIySGFzaDtcbiAgICB9LFxuICAgIGhleEhhc2g6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaGV4SGFzaDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGRqYjJIYXNoKHN0cikge1xuICAgIGxldCBoYXNoID0gNTM4MTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBoYXNoID0gKGhhc2ggPDwgNSkgKyBoYXNoICsgY2hhciAmIDB4ZmZmZmZmZmY7XG4gICAgfVxuICAgIHJldHVybiBoYXNoID4+PiAwO1xufVxuZnVuY3Rpb24gaGV4SGFzaChzdHIpIHtcbiAgICByZXR1cm4gZGpiMkhhc2goc3RyKS50b1N0cmluZygzNikuc2xpY2UoMCwgNSk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhc2guanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiZGpiMkhhc2giLCJoZXhIYXNoIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic3RyIiwiaGFzaCIsImkiLCJsZW5ndGgiLCJjaGFyIiwiY2hhckNvZGVBdCIsInRvU3RyaW5nIiwic2xpY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/hash.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("// This has to be a shared module which is shared between client component error boundary and dynamic component\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n BailoutToCSRError: function() {\n return BailoutToCSRError;\n },\n isBailoutToCSRError: function() {\n return isBailoutToCSRError;\n }\n});\nconst BAILOUT_TO_CSR = \"BAILOUT_TO_CLIENT_SIDE_RENDERING\";\nclass BailoutToCSRError extends Error {\n constructor(reason){\n super(\"Bail out to client-side rendering: \" + reason);\n this.reason = reason;\n this.digest = BAILOUT_TO_CSR;\n }\n}\nfunction isBailoutToCSRError(err) {\n if (typeof err !== \"object\" || err === null || !(\"digest\" in err)) {\n return false;\n }\n return err.digest === BAILOUT_TO_CSR;\n} //# sourceMappingURL=bailout-to-csr.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbGF6eS1keW5hbWljL2JhaWxvdXQtdG8tY3NyLmpzIiwibWFwcGluZ3MiOiJBQUFBLCtHQUErRztBQUNsRztBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxxQkFBcUI7UUFDakIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8saUJBQWlCO0FBQ3ZCLE1BQU1SLDBCQUEwQlM7SUFDNUJDLFlBQVlDLE1BQU0sQ0FBQztRQUNmLEtBQUssQ0FBQyx3Q0FBd0NBO1FBQzlDLElBQUksQ0FBQ0EsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsTUFBTSxHQUFHSjtJQUNsQjtBQUNKO0FBQ0EsU0FBU1Asb0JBQW9CWSxHQUFHO0lBQzVCLElBQUksT0FBT0EsUUFBUSxZQUFZQSxRQUFRLFFBQVEsQ0FBRSxhQUFZQSxHQUFFLEdBQUk7UUFDL0QsT0FBTztJQUNYO0lBQ0EsT0FBT0EsSUFBSUQsTUFBTSxLQUFLSjtBQUMxQixFQUVBLDBDQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbGF6eS1keW5hbWljL2JhaWxvdXQtdG8tY3NyLmpzPzAwOTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBoYXMgdG8gYmUgYSBzaGFyZWQgbW9kdWxlIHdoaWNoIGlzIHNoYXJlZCBiZXR3ZWVuIGNsaWVudCBjb21wb25lbnQgZXJyb3IgYm91bmRhcnkgYW5kIGR5bmFtaWMgY29tcG9uZW50XG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEJhaWxvdXRUb0NTUkVycm9yOiBudWxsLFxuICAgIGlzQmFpbG91dFRvQ1NSRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgQmFpbG91dFRvQ1NSRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQmFpbG91dFRvQ1NSRXJyb3I7XG4gICAgfSxcbiAgICBpc0JhaWxvdXRUb0NTUkVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzQmFpbG91dFRvQ1NSRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBCQUlMT1VUX1RPX0NTUiA9IFwiQkFJTE9VVF9UT19DTElFTlRfU0lERV9SRU5ERVJJTkdcIjtcbmNsYXNzIEJhaWxvdXRUb0NTUkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHJlYXNvbil7XG4gICAgICAgIHN1cGVyKFwiQmFpbCBvdXQgdG8gY2xpZW50LXNpZGUgcmVuZGVyaW5nOiBcIiArIHJlYXNvbik7XG4gICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgICAgICB0aGlzLmRpZ2VzdCA9IEJBSUxPVVRfVE9fQ1NSO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzQmFpbG91dFRvQ1NSRXJyb3IoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBlcnIgIT09IFwib2JqZWN0XCIgfHwgZXJyID09PSBudWxsIHx8ICEoXCJkaWdlc3RcIiBpbiBlcnIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGVyci5kaWdlc3QgPT09IEJBSUxPVVRfVE9fQ1NSO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYWlsb3V0LXRvLWNzci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJCYWlsb3V0VG9DU1JFcnJvciIsImlzQmFpbG91dFRvQ1NSRXJyb3IiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJCQUlMT1VUX1RPX0NTUiIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJyZWFzb24iLCJkaWdlc3QiLCJlcnIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ensureLeadingSlash\", ({\n enumerable: true,\n get: function() {\n return ensureLeadingSlash;\n }\n}));\nfunction ensureLeadingSlash(path) {\n return path.startsWith(\"/\") ? path : \"/\" + path;\n} //# sourceMappingURL=ensure-leading-slash.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUFnQjtBQUNqQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLG1CQUFtQkMsSUFBSTtJQUM1QixPQUFPQSxLQUFLQyxVQUFVLENBQUMsT0FBT0QsT0FBTyxNQUFNQTtBQUMvQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoLmpzP2NmMzIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3IgYSBnaXZlbiBwYWdlIHBhdGgsIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZXJlIGlzIGEgbGVhZGluZyBzbGFzaC5cbiAqIElmIHRoZXJlIGlzIG5vdCBhIGxlYWRpbmcgc2xhc2gsIG9uZSBpcyBhZGRlZCwgb3RoZXJ3aXNlIGl0IGlzIG5vb3AuXG4gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbnN1cmVMZWFkaW5nU2xhc2hcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGVuc3VyZUxlYWRpbmdTbGFzaDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGVuc3VyZUxlYWRpbmdTbGFzaChwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogXCIvXCIgKyBwYXRoO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnN1cmUtbGVhZGluZy1zbGFzaC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZW5zdXJlTGVhZGluZ1NsYXNoIiwicGF0aCIsInN0YXJ0c1dpdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/router/action-queue.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/action-queue.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ActionQueueContext: function() {\n return ActionQueueContext;\n },\n createMutableActionQueue: function() {\n return createMutableActionQueue;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(ssr)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _routerreducertypes = __webpack_require__(/*! ../../../client/components/router-reducer/router-reducer-types */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _routerreducer = __webpack_require__(/*! ../../../client/components/router-reducer/router-reducer */ \"(ssr)/./node_modules/next/dist/client/components/router-reducer/router-reducer.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\"));\nconst ActionQueueContext = _react.default.createContext(null);\nfunction runRemainingActions(actionQueue, setState) {\n if (actionQueue.pending !== null) {\n actionQueue.pending = actionQueue.pending.next;\n if (actionQueue.pending !== null) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n runAction({\n actionQueue,\n action: actionQueue.pending,\n setState\n });\n }\n }\n}\nasync function runAction(param) {\n let { actionQueue, action, setState } = param;\n const prevState = actionQueue.state;\n if (!prevState) {\n // This shouldn't happen as the state is initialized in the dispatcher if it's not set\n throw new Error(\"Invariant: Router state not initialized\");\n }\n actionQueue.pending = action;\n const payload = action.payload;\n const actionResult = actionQueue.action(prevState, payload);\n function handleResult(nextState) {\n // if we discarded this action, the state should also be discarded\n if (action.discarded) {\n // if a refresh is needed, we only want to trigger it once the action queue is empty\n if (actionQueue.needsRefresh && actionQueue.pending === null) {\n actionQueue.needsRefresh = false;\n actionQueue.dispatch({\n type: _routerreducertypes.ACTION_REFRESH,\n origin: window.location.origin\n }, setState);\n }\n return;\n }\n actionQueue.state = nextState;\n if (actionQueue.devToolsInstance) {\n actionQueue.devToolsInstance.send(payload, nextState);\n }\n runRemainingActions(actionQueue, setState);\n action.resolve(nextState);\n }\n // if the action is a promise, set up a callback to resolve it\n if ((0, _routerreducertypes.isThenable)(actionResult)) {\n actionResult.then(handleResult, (err)=>{\n runRemainingActions(actionQueue, setState);\n action.reject(err);\n });\n } else {\n handleResult(actionResult);\n }\n}\nfunction dispatchAction(actionQueue, payload, setState) {\n let resolvers = {\n resolve: setState,\n reject: ()=>{}\n };\n // most of the action types are async with the exception of restore\n // it's important that restore is handled quickly since it's fired on the popstate event\n // and we don't want to add any delay on a back/forward nav\n // this only creates a promise for the async actions\n if (payload.type !== _routerreducertypes.ACTION_RESTORE) {\n // Create the promise and assign the resolvers to the object.\n const deferredPromise = new Promise((resolve, reject)=>{\n resolvers = {\n resolve,\n reject\n };\n });\n (0, _react.startTransition)(()=>{\n // we immediately notify React of the pending promise -- the resolver is attached to the action node\n // and will be called when the associated action promise resolves\n setState(deferredPromise);\n });\n }\n const newAction = {\n payload,\n next: null,\n resolve: resolvers.resolve,\n reject: resolvers.reject\n };\n // Check if the queue is empty\n if (actionQueue.pending === null) {\n // The queue is empty, so add the action and start it immediately\n // Mark this action as the last in the queue\n actionQueue.last = newAction;\n runAction({\n actionQueue,\n action: newAction,\n setState\n });\n } else if (payload.type === _routerreducertypes.ACTION_NAVIGATE) {\n // Navigations take priority over any pending actions.\n // Mark the pending action as discarded (so the state is never applied) and start the navigation action immediately.\n actionQueue.pending.discarded = true;\n // Mark this action as the last in the queue\n actionQueue.last = newAction;\n // if the pending action was a server action, mark the queue as needing a refresh once events are processed\n if (actionQueue.pending.payload.type === _routerreducertypes.ACTION_SERVER_ACTION) {\n actionQueue.needsRefresh = true;\n }\n runAction({\n actionQueue,\n action: newAction,\n setState\n });\n } else {\n // The queue is not empty, so add the action to the end of the queue\n // It will be started by runRemainingActions after the previous action finishes\n if (actionQueue.last !== null) {\n actionQueue.last.next = newAction;\n }\n actionQueue.last = newAction;\n }\n}\nfunction createMutableActionQueue() {\n const actionQueue = {\n state: null,\n dispatch: (payload, setState)=>dispatchAction(actionQueue, payload, setState),\n action: async (state, action)=>{\n if (state === null) {\n throw new Error(\"Invariant: Router state not initialized\");\n }\n const result = (0, _routerreducer.reducer)(state, action);\n return result;\n },\n pending: null,\n last: null\n };\n return actionQueue;\n} //# sourceMappingURL=action-queue.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL2FjdGlvbi1xdWV1ZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7SUFDQUMsMEJBQTBCO1FBQ3RCLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLDRCQUE0QkMsbUJBQU9BLENBQUMsb0hBQTBDO0FBQ3BGLE1BQU1DLHNCQUFzQkQsbUJBQU9BLENBQUMsK0pBQWdFO0FBQ3BHLE1BQU1FLGlCQUFpQkYsbUJBQU9BLENBQUMsbUpBQTBEO0FBQ3pGLE1BQU1HLFNBQVMsV0FBVyxHQUFHSiwwQkFBMEJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsd0dBQU87QUFDeEUsTUFBTVQscUJBQXFCWSxPQUFPRSxPQUFPLENBQUNDLGFBQWEsQ0FBQztBQUN4RCxTQUFTQyxvQkFBb0JDLFdBQVcsRUFBRUMsUUFBUTtJQUM5QyxJQUFJRCxZQUFZRSxPQUFPLEtBQUssTUFBTTtRQUM5QkYsWUFBWUUsT0FBTyxHQUFHRixZQUFZRSxPQUFPLENBQUNDLElBQUk7UUFDOUMsSUFBSUgsWUFBWUUsT0FBTyxLQUFLLE1BQU07WUFDOUIsbUVBQW1FO1lBQ25FRSxVQUFVO2dCQUNOSjtnQkFDQUssUUFBUUwsWUFBWUUsT0FBTztnQkFDM0JEO1lBQ0o7UUFDSjtJQUNKO0FBQ0o7QUFDQSxlQUFlRyxVQUFVRSxLQUFLO0lBQzFCLElBQUksRUFBRU4sV0FBVyxFQUFFSyxNQUFNLEVBQUVKLFFBQVEsRUFBRSxHQUFHSztJQUN4QyxNQUFNQyxZQUFZUCxZQUFZUSxLQUFLO0lBQ25DLElBQUksQ0FBQ0QsV0FBVztRQUNaLHNGQUFzRjtRQUN0RixNQUFNLElBQUlFLE1BQU07SUFDcEI7SUFDQVQsWUFBWUUsT0FBTyxHQUFHRztJQUN0QixNQUFNSyxVQUFVTCxPQUFPSyxPQUFPO0lBQzlCLE1BQU1DLGVBQWVYLFlBQVlLLE1BQU0sQ0FBQ0UsV0FBV0c7SUFDbkQsU0FBU0UsYUFBYUMsU0FBUztRQUMzQixrRUFBa0U7UUFDbEUsSUFBSVIsT0FBT1MsU0FBUyxFQUFFO1lBQ2xCLG9GQUFvRjtZQUNwRixJQUFJZCxZQUFZZSxZQUFZLElBQUlmLFlBQVlFLE9BQU8sS0FBSyxNQUFNO2dCQUMxREYsWUFBWWUsWUFBWSxHQUFHO2dCQUMzQmYsWUFBWWdCLFFBQVEsQ0FBQztvQkFDakJDLE1BQU14QixvQkFBb0J5QixjQUFjO29CQUN4Q0MsUUFBUUMsT0FBT0MsUUFBUSxDQUFDRixNQUFNO2dCQUNsQyxHQUFHbEI7WUFDUDtZQUNBO1FBQ0o7UUFDQUQsWUFBWVEsS0FBSyxHQUFHSztRQUNwQixJQUFJYixZQUFZc0IsZ0JBQWdCLEVBQUU7WUFDOUJ0QixZQUFZc0IsZ0JBQWdCLENBQUNDLElBQUksQ0FBQ2IsU0FBU0c7UUFDL0M7UUFDQWQsb0JBQW9CQyxhQUFhQztRQUNqQ0ksT0FBT21CLE9BQU8sQ0FBQ1g7SUFDbkI7SUFDQSw4REFBOEQ7SUFDOUQsSUFBSSxDQUFDLEdBQUdwQixvQkFBb0JnQyxVQUFVLEVBQUVkLGVBQWU7UUFDbkRBLGFBQWFlLElBQUksQ0FBQ2QsY0FBYyxDQUFDZTtZQUM3QjVCLG9CQUFvQkMsYUFBYUM7WUFDakNJLE9BQU91QixNQUFNLENBQUNEO1FBQ2xCO0lBQ0osT0FBTztRQUNIZixhQUFhRDtJQUNqQjtBQUNKO0FBQ0EsU0FBU2tCLGVBQWU3QixXQUFXLEVBQUVVLE9BQU8sRUFBRVQsUUFBUTtJQUNsRCxJQUFJNkIsWUFBWTtRQUNaTixTQUFTdkI7UUFDVDJCLFFBQVEsS0FBSztJQUNqQjtJQUNBLG1FQUFtRTtJQUNuRSx3RkFBd0Y7SUFDeEYsMkRBQTJEO0lBQzNELG9EQUFvRDtJQUNwRCxJQUFJbEIsUUFBUU8sSUFBSSxLQUFLeEIsb0JBQW9Cc0MsY0FBYyxFQUFFO1FBQ3JELDZEQUE2RDtRQUM3RCxNQUFNQyxrQkFBa0IsSUFBSUMsUUFBUSxDQUFDVCxTQUFTSTtZQUMxQ0UsWUFBWTtnQkFDUk47Z0JBQ0FJO1lBQ0o7UUFDSjtRQUNDLElBQUdqQyxPQUFPdUMsZUFBZSxFQUFFO1lBQ3hCLG9HQUFvRztZQUNwRyxpRUFBaUU7WUFDakVqQyxTQUFTK0I7UUFDYjtJQUNKO0lBQ0EsTUFBTUcsWUFBWTtRQUNkekI7UUFDQVAsTUFBTTtRQUNOcUIsU0FBU00sVUFBVU4sT0FBTztRQUMxQkksUUFBUUUsVUFBVUYsTUFBTTtJQUM1QjtJQUNBLDhCQUE4QjtJQUM5QixJQUFJNUIsWUFBWUUsT0FBTyxLQUFLLE1BQU07UUFDOUIsaUVBQWlFO1FBQ2pFLDRDQUE0QztRQUM1Q0YsWUFBWW9DLElBQUksR0FBR0Q7UUFDbkIvQixVQUFVO1lBQ05KO1lBQ0FLLFFBQVE4QjtZQUNSbEM7UUFDSjtJQUNKLE9BQU8sSUFBSVMsUUFBUU8sSUFBSSxLQUFLeEIsb0JBQW9CNEMsZUFBZSxFQUFFO1FBQzdELHNEQUFzRDtRQUN0RCxvSEFBb0g7UUFDcEhyQyxZQUFZRSxPQUFPLENBQUNZLFNBQVMsR0FBRztRQUNoQyw0Q0FBNEM7UUFDNUNkLFlBQVlvQyxJQUFJLEdBQUdEO1FBQ25CLDJHQUEyRztRQUMzRyxJQUFJbkMsWUFBWUUsT0FBTyxDQUFDUSxPQUFPLENBQUNPLElBQUksS0FBS3hCLG9CQUFvQjZDLG9CQUFvQixFQUFFO1lBQy9FdEMsWUFBWWUsWUFBWSxHQUFHO1FBQy9CO1FBQ0FYLFVBQVU7WUFDTko7WUFDQUssUUFBUThCO1lBQ1JsQztRQUNKO0lBQ0osT0FBTztRQUNILG9FQUFvRTtRQUNwRSwrRUFBK0U7UUFDL0UsSUFBSUQsWUFBWW9DLElBQUksS0FBSyxNQUFNO1lBQzNCcEMsWUFBWW9DLElBQUksQ0FBQ2pDLElBQUksR0FBR2dDO1FBQzVCO1FBQ0FuQyxZQUFZb0MsSUFBSSxHQUFHRDtJQUN2QjtBQUNKO0FBQ0EsU0FBU25EO0lBQ0wsTUFBTWdCLGNBQWM7UUFDaEJRLE9BQU87UUFDUFEsVUFBVSxDQUFDTixTQUFTVCxXQUFXNEIsZUFBZTdCLGFBQWFVLFNBQVNUO1FBQ3BFSSxRQUFRLE9BQU9HLE9BQU9IO1lBQ2xCLElBQUlHLFVBQVUsTUFBTTtnQkFDaEIsTUFBTSxJQUFJQyxNQUFNO1lBQ3BCO1lBQ0EsTUFBTThCLFNBQVMsQ0FBQyxHQUFHN0MsZUFBZThDLE9BQU8sRUFBRWhDLE9BQU9IO1lBQ2xELE9BQU9rQztRQUNYO1FBQ0FyQyxTQUFTO1FBQ1RrQyxNQUFNO0lBQ1Y7SUFDQSxPQUFPcEM7QUFDWCxFQUVBLHdDQUF3QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL2FjdGlvbi1xdWV1ZS5qcz84NDc5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQWN0aW9uUXVldWVDb250ZXh0OiBudWxsLFxuICAgIGNyZWF0ZU11dGFibGVBY3Rpb25RdWV1ZTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBBY3Rpb25RdWV1ZUNvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQWN0aW9uUXVldWVDb250ZXh0O1xuICAgIH0sXG4gICAgY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU11dGFibGVBY3Rpb25RdWV1ZTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9yb3V0ZXJyZWR1Y2VydHlwZXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXNcIik7XG5jb25zdCBfcm91dGVycmVkdWNlciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlclwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBBY3Rpb25RdWV1ZUNvbnRleHQgPSBfcmVhY3QuZGVmYXVsdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuZnVuY3Rpb24gcnVuUmVtYWluaW5nQWN0aW9ucyhhY3Rpb25RdWV1ZSwgc2V0U3RhdGUpIHtcbiAgICBpZiAoYWN0aW9uUXVldWUucGVuZGluZyAhPT0gbnVsbCkge1xuICAgICAgICBhY3Rpb25RdWV1ZS5wZW5kaW5nID0gYWN0aW9uUXVldWUucGVuZGluZy5uZXh0O1xuICAgICAgICBpZiAoYWN0aW9uUXVldWUucGVuZGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgcnVuQWN0aW9uKHtcbiAgICAgICAgICAgICAgICBhY3Rpb25RdWV1ZSxcbiAgICAgICAgICAgICAgICBhY3Rpb246IGFjdGlvblF1ZXVlLnBlbmRpbmcsXG4gICAgICAgICAgICAgICAgc2V0U3RhdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuYXN5bmMgZnVuY3Rpb24gcnVuQWN0aW9uKHBhcmFtKSB7XG4gICAgbGV0IHsgYWN0aW9uUXVldWUsIGFjdGlvbiwgc2V0U3RhdGUgfSA9IHBhcmFtO1xuICAgIGNvbnN0IHByZXZTdGF0ZSA9IGFjdGlvblF1ZXVlLnN0YXRlO1xuICAgIGlmICghcHJldlN0YXRlKSB7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBhcyB0aGUgc3RhdGUgaXMgaW5pdGlhbGl6ZWQgaW4gdGhlIGRpc3BhdGNoZXIgaWYgaXQncyBub3Qgc2V0XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFyaWFudDogUm91dGVyIHN0YXRlIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICB9XG4gICAgYWN0aW9uUXVldWUucGVuZGluZyA9IGFjdGlvbjtcbiAgICBjb25zdCBwYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgY29uc3QgYWN0aW9uUmVzdWx0ID0gYWN0aW9uUXVldWUuYWN0aW9uKHByZXZTdGF0ZSwgcGF5bG9hZCk7XG4gICAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0KG5leHRTdGF0ZSkge1xuICAgICAgICAvLyBpZiB3ZSBkaXNjYXJkZWQgdGhpcyBhY3Rpb24sIHRoZSBzdGF0ZSBzaG91bGQgYWxzbyBiZSBkaXNjYXJkZWRcbiAgICAgICAgaWYgKGFjdGlvbi5kaXNjYXJkZWQpIHtcbiAgICAgICAgICAgIC8vIGlmIGEgcmVmcmVzaCBpcyBuZWVkZWQsIHdlIG9ubHkgd2FudCB0byB0cmlnZ2VyIGl0IG9uY2UgdGhlIGFjdGlvbiBxdWV1ZSBpcyBlbXB0eVxuICAgICAgICAgICAgaWYgKGFjdGlvblF1ZXVlLm5lZWRzUmVmcmVzaCAmJiBhY3Rpb25RdWV1ZS5wZW5kaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUXVldWUubmVlZHNSZWZyZXNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYWN0aW9uUXVldWUuZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9SRUZSRVNILFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgICAgICAgICB9LCBzZXRTdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uUXVldWUuc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICAgIGlmIChhY3Rpb25RdWV1ZS5kZXZUb29sc0luc3RhbmNlKSB7XG4gICAgICAgICAgICBhY3Rpb25RdWV1ZS5kZXZUb29sc0luc3RhbmNlLnNlbmQocGF5bG9hZCwgbmV4dFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBydW5SZW1haW5pbmdBY3Rpb25zKGFjdGlvblF1ZXVlLCBzZXRTdGF0ZSk7XG4gICAgICAgIGFjdGlvbi5yZXNvbHZlKG5leHRTdGF0ZSk7XG4gICAgfVxuICAgIC8vIGlmIHRoZSBhY3Rpb24gaXMgYSBwcm9taXNlLCBzZXQgdXAgYSBjYWxsYmFjayB0byByZXNvbHZlIGl0XG4gICAgaWYgKCgwLCBfcm91dGVycmVkdWNlcnR5cGVzLmlzVGhlbmFibGUpKGFjdGlvblJlc3VsdCkpIHtcbiAgICAgICAgYWN0aW9uUmVzdWx0LnRoZW4oaGFuZGxlUmVzdWx0LCAoZXJyKT0+e1xuICAgICAgICAgICAgcnVuUmVtYWluaW5nQWN0aW9ucyhhY3Rpb25RdWV1ZSwgc2V0U3RhdGUpO1xuICAgICAgICAgICAgYWN0aW9uLnJlamVjdChlcnIpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVSZXN1bHQoYWN0aW9uUmVzdWx0KTtcbiAgICB9XG59XG5mdW5jdGlvbiBkaXNwYXRjaEFjdGlvbihhY3Rpb25RdWV1ZSwgcGF5bG9hZCwgc2V0U3RhdGUpIHtcbiAgICBsZXQgcmVzb2x2ZXJzID0ge1xuICAgICAgICByZXNvbHZlOiBzZXRTdGF0ZSxcbiAgICAgICAgcmVqZWN0OiAoKT0+e31cbiAgICB9O1xuICAgIC8vIG1vc3Qgb2YgdGhlIGFjdGlvbiB0eXBlcyBhcmUgYXN5bmMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHJlc3RvcmVcbiAgICAvLyBpdCdzIGltcG9ydGFudCB0aGF0IHJlc3RvcmUgaXMgaGFuZGxlZCBxdWlja2x5IHNpbmNlIGl0J3MgZmlyZWQgb24gdGhlIHBvcHN0YXRlIGV2ZW50XG4gICAgLy8gYW5kIHdlIGRvbid0IHdhbnQgdG8gYWRkIGFueSBkZWxheSBvbiBhIGJhY2svZm9yd2FyZCBuYXZcbiAgICAvLyB0aGlzIG9ubHkgY3JlYXRlcyBhIHByb21pc2UgZm9yIHRoZSBhc3luYyBhY3Rpb25zXG4gICAgaWYgKHBheWxvYWQudHlwZSAhPT0gX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fUkVTVE9SRSkge1xuICAgICAgICAvLyBDcmVhdGUgdGhlIHByb21pc2UgYW5kIGFzc2lnbiB0aGUgcmVzb2x2ZXJzIHRvIHRoZSBvYmplY3QuXG4gICAgICAgIGNvbnN0IGRlZmVycmVkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgICAgICByZXNvbHZlcnMgPSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgIC8vIHdlIGltbWVkaWF0ZWx5IG5vdGlmeSBSZWFjdCBvZiB0aGUgcGVuZGluZyBwcm9taXNlIC0tIHRoZSByZXNvbHZlciBpcyBhdHRhY2hlZCB0byB0aGUgYWN0aW9uIG5vZGVcbiAgICAgICAgICAgIC8vIGFuZCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBhc3NvY2lhdGVkIGFjdGlvbiBwcm9taXNlIHJlc29sdmVzXG4gICAgICAgICAgICBzZXRTdGF0ZShkZWZlcnJlZFByb21pc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgbmV3QWN0aW9uID0ge1xuICAgICAgICBwYXlsb2FkLFxuICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICByZXNvbHZlOiByZXNvbHZlcnMucmVzb2x2ZSxcbiAgICAgICAgcmVqZWN0OiByZXNvbHZlcnMucmVqZWN0XG4gICAgfTtcbiAgICAvLyBDaGVjayBpZiB0aGUgcXVldWUgaXMgZW1wdHlcbiAgICBpZiAoYWN0aW9uUXVldWUucGVuZGluZyA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUaGUgcXVldWUgaXMgZW1wdHksIHNvIGFkZCB0aGUgYWN0aW9uIGFuZCBzdGFydCBpdCBpbW1lZGlhdGVseVxuICAgICAgICAvLyBNYXJrIHRoaXMgYWN0aW9uIGFzIHRoZSBsYXN0IGluIHRoZSBxdWV1ZVxuICAgICAgICBhY3Rpb25RdWV1ZS5sYXN0ID0gbmV3QWN0aW9uO1xuICAgICAgICBydW5BY3Rpb24oe1xuICAgICAgICAgICAgYWN0aW9uUXVldWUsXG4gICAgICAgICAgICBhY3Rpb246IG5ld0FjdGlvbixcbiAgICAgICAgICAgIHNldFN0YXRlXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocGF5bG9hZC50eXBlID09PSBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9OQVZJR0FURSkge1xuICAgICAgICAvLyBOYXZpZ2F0aW9ucyB0YWtlIHByaW9yaXR5IG92ZXIgYW55IHBlbmRpbmcgYWN0aW9ucy5cbiAgICAgICAgLy8gTWFyayB0aGUgcGVuZGluZyBhY3Rpb24gYXMgZGlzY2FyZGVkIChzbyB0aGUgc3RhdGUgaXMgbmV2ZXIgYXBwbGllZCkgYW5kIHN0YXJ0IHRoZSBuYXZpZ2F0aW9uIGFjdGlvbiBpbW1lZGlhdGVseS5cbiAgICAgICAgYWN0aW9uUXVldWUucGVuZGluZy5kaXNjYXJkZWQgPSB0cnVlO1xuICAgICAgICAvLyBNYXJrIHRoaXMgYWN0aW9uIGFzIHRoZSBsYXN0IGluIHRoZSBxdWV1ZVxuICAgICAgICBhY3Rpb25RdWV1ZS5sYXN0ID0gbmV3QWN0aW9uO1xuICAgICAgICAvLyBpZiB0aGUgcGVuZGluZyBhY3Rpb24gd2FzIGEgc2VydmVyIGFjdGlvbiwgbWFyayB0aGUgcXVldWUgYXMgbmVlZGluZyBhIHJlZnJlc2ggb25jZSBldmVudHMgYXJlIHByb2Nlc3NlZFxuICAgICAgICBpZiAoYWN0aW9uUXVldWUucGVuZGluZy5wYXlsb2FkLnR5cGUgPT09IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1NFUlZFUl9BQ1RJT04pIHtcbiAgICAgICAgICAgIGFjdGlvblF1ZXVlLm5lZWRzUmVmcmVzaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcnVuQWN0aW9uKHtcbiAgICAgICAgICAgIGFjdGlvblF1ZXVlLFxuICAgICAgICAgICAgYWN0aW9uOiBuZXdBY3Rpb24sXG4gICAgICAgICAgICBzZXRTdGF0ZVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgcXVldWUgaXMgbm90IGVtcHR5LCBzbyBhZGQgdGhlIGFjdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxuICAgICAgICAvLyBJdCB3aWxsIGJlIHN0YXJ0ZWQgYnkgcnVuUmVtYWluaW5nQWN0aW9ucyBhZnRlciB0aGUgcHJldmlvdXMgYWN0aW9uIGZpbmlzaGVzXG4gICAgICAgIGlmIChhY3Rpb25RdWV1ZS5sYXN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBhY3Rpb25RdWV1ZS5sYXN0Lm5leHQgPSBuZXdBY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgYWN0aW9uUXVldWUubGFzdCA9IG5ld0FjdGlvbjtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVNdXRhYmxlQWN0aW9uUXVldWUoKSB7XG4gICAgY29uc3QgYWN0aW9uUXVldWUgPSB7XG4gICAgICAgIHN0YXRlOiBudWxsLFxuICAgICAgICBkaXNwYXRjaDogKHBheWxvYWQsIHNldFN0YXRlKT0+ZGlzcGF0Y2hBY3Rpb24oYWN0aW9uUXVldWUsIHBheWxvYWQsIHNldFN0YXRlKSxcbiAgICAgICAgYWN0aW9uOiBhc3luYyAoc3RhdGUsIGFjdGlvbik9PntcbiAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFyaWFudDogUm91dGVyIHN0YXRlIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9ICgwLCBfcm91dGVycmVkdWNlci5yZWR1Y2VyKShzdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhc3Q6IG51bGxcbiAgICB9O1xuICAgIHJldHVybiBhY3Rpb25RdWV1ZTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWN0aW9uLXF1ZXVlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIkFjdGlvblF1ZXVlQ29udGV4dCIsImNyZWF0ZU11dGFibGVBY3Rpb25RdWV1ZSIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX3JvdXRlcnJlZHVjZXJ0eXBlcyIsIl9yb3V0ZXJyZWR1Y2VyIiwiX3JlYWN0IiwiXyIsImRlZmF1bHQiLCJjcmVhdGVDb250ZXh0IiwicnVuUmVtYWluaW5nQWN0aW9ucyIsImFjdGlvblF1ZXVlIiwic2V0U3RhdGUiLCJwZW5kaW5nIiwibmV4dCIsInJ1bkFjdGlvbiIsImFjdGlvbiIsInBhcmFtIiwicHJldlN0YXRlIiwic3RhdGUiLCJFcnJvciIsInBheWxvYWQiLCJhY3Rpb25SZXN1bHQiLCJoYW5kbGVSZXN1bHQiLCJuZXh0U3RhdGUiLCJkaXNjYXJkZWQiLCJuZWVkc1JlZnJlc2giLCJkaXNwYXRjaCIsInR5cGUiLCJBQ1RJT05fUkVGUkVTSCIsIm9yaWdpbiIsIndpbmRvdyIsImxvY2F0aW9uIiwiZGV2VG9vbHNJbnN0YW5jZSIsInNlbmQiLCJyZXNvbHZlIiwiaXNUaGVuYWJsZSIsInRoZW4iLCJlcnIiLCJyZWplY3QiLCJkaXNwYXRjaEFjdGlvbiIsInJlc29sdmVycyIsIkFDVElPTl9SRVNUT1JFIiwiZGVmZXJyZWRQcm9taXNlIiwiUHJvbWlzZSIsInN0YXJ0VHJhbnNpdGlvbiIsIm5ld0FjdGlvbiIsImxhc3QiLCJBQ1RJT05fTkFWSUdBVEUiLCJBQ1RJT05fU0VSVkVSX0FDVElPTiIsInJlc3VsdCIsInJlZHVjZXIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/router/action-queue.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js": +/*!***************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addPathPrefix\", ({\n enumerable: true,\n get: function() {\n return addPathPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathPrefix(path, prefix) {\n if (!path.startsWith(\"/\") || !prefix) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n return \"\" + prefix + pathname + query + hash;\n} //# sourceMappingURL=add-path-prefix.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1wYXRoLXByZWZpeC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsaURBQWdEO0lBQzVDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsYUFBYUMsbUJBQU9BLENBQUMsMEZBQWM7QUFDekMsU0FBU0YsY0FBY0csSUFBSSxFQUFFQyxNQUFNO0lBQy9CLElBQUksQ0FBQ0QsS0FBS0UsVUFBVSxDQUFDLFFBQVEsQ0FBQ0QsUUFBUTtRQUNsQyxPQUFPRDtJQUNYO0lBQ0EsTUFBTSxFQUFFRyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHUCxXQUFXUSxTQUFTLEVBQUVOO0lBQzVELE9BQU8sS0FBS0MsU0FBU0UsV0FBV0MsUUFBUUM7QUFDNUMsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1wcmVmaXguanM/YzEyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFkZFBhdGhQcmVmaXhcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFkZFBhdGhQcmVmaXg7XG4gICAgfVxufSk7XG5jb25zdCBfcGFyc2VwYXRoID0gcmVxdWlyZShcIi4vcGFyc2UtcGF0aFwiKTtcbmZ1bmN0aW9uIGFkZFBhdGhQcmVmaXgocGF0aCwgcHJlZml4KSB7XG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpIHx8ICFwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5LCBoYXNoIH0gPSAoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKHBhdGgpO1xuICAgIHJldHVybiBcIlwiICsgcHJlZml4ICsgcGF0aG5hbWUgKyBxdWVyeSArIGhhc2g7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZC1wYXRoLXByZWZpeC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiYWRkUGF0aFByZWZpeCIsIl9wYXJzZXBhdGgiLCJyZXF1aXJlIiwicGF0aCIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJwYXRobmFtZSIsInF1ZXJ5IiwiaGFzaCIsInBhcnNlUGF0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js": +/*!*********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/app-paths.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n normalizeAppPath: function() {\n return normalizeAppPath;\n },\n normalizeRscURL: function() {\n return normalizeRscURL;\n }\n});\nconst _ensureleadingslash = __webpack_require__(/*! ../../page-path/ensure-leading-slash */ \"(ssr)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _segment = __webpack_require__(/*! ../../segment */ \"(ssr)/./node_modules/next/dist/shared/lib/segment.js\");\nfunction normalizeAppPath(route) {\n return (0, _ensureleadingslash.ensureLeadingSlash)(route.split(\"/\").reduce((pathname, segment, index, segments)=>{\n // Empty segments are ignored.\n if (!segment) {\n return pathname;\n }\n // Groups are ignored.\n if ((0, _segment.isGroupSegment)(segment)) {\n return pathname;\n }\n // Parallel segments are ignored.\n if (segment[0] === \"@\") {\n return pathname;\n }\n // The last segment (if it's a leaf) should be ignored.\n if ((segment === \"page\" || segment === \"route\") && index === segments.length - 1) {\n return pathname;\n }\n return pathname + \"/\" + segment;\n }, \"\"));\n}\nfunction normalizeRscURL(url) {\n return url.replace(/\\.rsc($|\\?)/, \"$1\");\n} //# sourceMappingURL=app-paths.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRocy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsa0JBQWtCO1FBQ2QsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxzQkFBc0JDLG1CQUFPQSxDQUFDLHlIQUFzQztBQUMxRSxNQUFNQyxXQUFXRCxtQkFBT0EsQ0FBQywyRUFBZTtBQUN4QyxTQUFTVCxpQkFBaUJXLEtBQUs7SUFDM0IsT0FBTyxDQUFDLEdBQUdILG9CQUFvQkksa0JBQWtCLEVBQUVELE1BQU1FLEtBQUssQ0FBQyxLQUFLQyxNQUFNLENBQUMsQ0FBQ0MsVUFBVUMsU0FBU0MsT0FBT0M7UUFDbEcsOEJBQThCO1FBQzlCLElBQUksQ0FBQ0YsU0FBUztZQUNWLE9BQU9EO1FBQ1g7UUFDQSxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLEdBQUdMLFNBQVNTLGNBQWMsRUFBRUgsVUFBVTtZQUN2QyxPQUFPRDtRQUNYO1FBQ0EsaUNBQWlDO1FBQ2pDLElBQUlDLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSztZQUNwQixPQUFPRDtRQUNYO1FBQ0EsdURBQXVEO1FBQ3ZELElBQUksQ0FBQ0MsWUFBWSxVQUFVQSxZQUFZLE9BQU0sS0FBTUMsVUFBVUMsU0FBU0UsTUFBTSxHQUFHLEdBQUc7WUFDOUUsT0FBT0w7UUFDWDtRQUNBLE9BQU9BLFdBQVcsTUFBTUM7SUFDNUIsR0FBRztBQUNQO0FBQ0EsU0FBU2YsZ0JBQWdCb0IsR0FBRztJQUN4QixPQUFPQSxJQUFJQyxPQUFPLENBQUMsZUFDbkI7QUFDSixFQUVBLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRocy5qcz83ZTUyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbm9ybWFsaXplQXBwUGF0aDogbnVsbCxcbiAgICBub3JtYWxpemVSc2NVUkw6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgbm9ybWFsaXplQXBwUGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVBcHBQYXRoO1xuICAgIH0sXG4gICAgbm9ybWFsaXplUnNjVVJMOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJzY1VSTDtcbiAgICB9XG59KTtcbmNvbnN0IF9lbnN1cmVsZWFkaW5nc2xhc2ggPSByZXF1aXJlKFwiLi4vLi4vcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoXCIpO1xuY29uc3QgX3NlZ21lbnQgPSByZXF1aXJlKFwiLi4vLi4vc2VnbWVudFwiKTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFwcFBhdGgocm91dGUpIHtcbiAgICByZXR1cm4gKDAsIF9lbnN1cmVsZWFkaW5nc2xhc2guZW5zdXJlTGVhZGluZ1NsYXNoKShyb3V0ZS5zcGxpdChcIi9cIikucmVkdWNlKChwYXRobmFtZSwgc2VnbWVudCwgaW5kZXgsIHNlZ21lbnRzKT0+e1xuICAgICAgICAvLyBFbXB0eSBzZWdtZW50cyBhcmUgaWdub3JlZC5cbiAgICAgICAgaWYgKCFzZWdtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR3JvdXBzIGFyZSBpZ25vcmVkLlxuICAgICAgICBpZiAoKDAsIF9zZWdtZW50LmlzR3JvdXBTZWdtZW50KShzZWdtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBhcmFsbGVsIHNlZ21lbnRzIGFyZSBpZ25vcmVkLlxuICAgICAgICBpZiAoc2VnbWVudFswXSA9PT0gXCJAXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRobmFtZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgbGFzdCBzZWdtZW50IChpZiBpdCdzIGEgbGVhZikgc2hvdWxkIGJlIGlnbm9yZWQuXG4gICAgICAgIGlmICgoc2VnbWVudCA9PT0gXCJwYWdlXCIgfHwgc2VnbWVudCA9PT0gXCJyb3V0ZVwiKSAmJiBpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRobmFtZSArIFwiL1wiICsgc2VnbWVudDtcbiAgICB9LCBcIlwiKSk7XG59XG5mdW5jdGlvbiBub3JtYWxpemVSc2NVUkwodXJsKSB7XG4gICAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXC5yc2MoJHxcXD8pLywgLy8gJDEgZW5zdXJlcyBgP2AgaXMgcHJlc2VydmVkXG4gICAgXCIkMVwiKTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXBhdGhzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIm5vcm1hbGl6ZUFwcFBhdGgiLCJub3JtYWxpemVSc2NVUkwiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZW5zdXJlbGVhZGluZ3NsYXNoIiwicmVxdWlyZSIsIl9zZWdtZW50Iiwicm91dGUiLCJlbnN1cmVMZWFkaW5nU2xhc2giLCJzcGxpdCIsInJlZHVjZSIsInBhdGhuYW1lIiwic2VnbWVudCIsImluZGV4Iiwic2VnbWVudHMiLCJpc0dyb3VwU2VnbWVudCIsImxlbmd0aCIsInVybCIsInJlcGxhY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js": +/*!********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("/**\n * Run function with `scroll-behavior: auto` applied to `<html/>`.\n * This css change will be reverted after the function finishes.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"handleSmoothScroll\", ({\n enumerable: true,\n get: function() {\n return handleSmoothScroll;\n }\n}));\nfunction handleSmoothScroll(fn, options) {\n if (options === void 0) options = {};\n // if only the hash is changed, we don't need to disable smooth scrolling\n // we only care to prevent smooth scrolling when navigating to a new page to avoid jarring UX\n if (options.onlyHashChange) {\n fn();\n return;\n }\n const htmlElement = document.documentElement;\n const existing = htmlElement.style.scrollBehavior;\n htmlElement.style.scrollBehavior = \"auto\";\n if (!options.dontForceLayout) {\n // In Chrome-based browsers we need to force reflow before calling `scrollTo`.\n // Otherwise it will not pickup the change in scrollBehavior\n // More info here: https://github.com/vercel/next.js/issues/40719#issuecomment-1336248042\n htmlElement.getClientRects();\n }\n fn();\n htmlElement.style.scrollBehavior = existing;\n} //# sourceMappingURL=handle-smooth-scroll.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2hhbmRsZS1zbW9vdGgtc2Nyb2xsLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUFnQjtBQUNqQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLG1CQUFtQkMsRUFBRSxFQUFFQyxPQUFPO0lBQ25DLElBQUlBLFlBQVksS0FBSyxHQUFHQSxVQUFVLENBQUM7SUFDbkMseUVBQXlFO0lBQ3pFLDZGQUE2RjtJQUM3RixJQUFJQSxRQUFRQyxjQUFjLEVBQUU7UUFDeEJGO1FBQ0E7SUFDSjtJQUNBLE1BQU1HLGNBQWNDLFNBQVNDLGVBQWU7SUFDNUMsTUFBTUMsV0FBV0gsWUFBWUksS0FBSyxDQUFDQyxjQUFjO0lBQ2pETCxZQUFZSSxLQUFLLENBQUNDLGNBQWMsR0FBRztJQUNuQyxJQUFJLENBQUNQLFFBQVFRLGVBQWUsRUFBRTtRQUMxQiw4RUFBOEU7UUFDOUUsNERBQTREO1FBQzVELHlGQUF5RjtRQUN6Rk4sWUFBWU8sY0FBYztJQUM5QjtJQUNBVjtJQUNBRyxZQUFZSSxLQUFLLENBQUNDLGNBQWMsR0FBR0Y7QUFDdkMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9oYW5kbGUtc21vb3RoLXNjcm9sbC5qcz82NTYzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVuIGZ1bmN0aW9uIHdpdGggYHNjcm9sbC1iZWhhdmlvcjogYXV0b2AgYXBwbGllZCB0byBgPGh0bWwvPmAuXG4gKiBUaGlzIGNzcyBjaGFuZ2Ugd2lsbCBiZSByZXZlcnRlZCBhZnRlciB0aGUgZnVuY3Rpb24gZmluaXNoZXMuXG4gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoYW5kbGVTbW9vdGhTY3JvbGxcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNtb290aFNjcm9sbDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVNtb290aFNjcm9sbChmbiwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIG9wdGlvbnMgPSB7fTtcbiAgICAvLyBpZiBvbmx5IHRoZSBoYXNoIGlzIGNoYW5nZWQsIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBzbW9vdGggc2Nyb2xsaW5nXG4gICAgLy8gd2Ugb25seSBjYXJlIHRvIHByZXZlbnQgc21vb3RoIHNjcm9sbGluZyB3aGVuIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZSB0byBhdm9pZCBqYXJyaW5nIFVYXG4gICAgaWYgKG9wdGlvbnMub25seUhhc2hDaGFuZ2UpIHtcbiAgICAgICAgZm4oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBjb25zdCBleGlzdGluZyA9IGh0bWxFbGVtZW50LnN0eWxlLnNjcm9sbEJlaGF2aW9yO1xuICAgIGh0bWxFbGVtZW50LnN0eWxlLnNjcm9sbEJlaGF2aW9yID0gXCJhdXRvXCI7XG4gICAgaWYgKCFvcHRpb25zLmRvbnRGb3JjZUxheW91dCkge1xuICAgICAgICAvLyBJbiBDaHJvbWUtYmFzZWQgYnJvd3NlcnMgd2UgbmVlZCB0byBmb3JjZSByZWZsb3cgYmVmb3JlIGNhbGxpbmcgYHNjcm9sbFRvYC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGl0IHdpbGwgbm90IHBpY2t1cCB0aGUgY2hhbmdlIGluIHNjcm9sbEJlaGF2aW9yXG4gICAgICAgIC8vIE1vcmUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanMvaXNzdWVzLzQwNzE5I2lzc3VlY29tbWVudC0xMzM2MjQ4MDQyXG4gICAgICAgIGh0bWxFbGVtZW50LmdldENsaWVudFJlY3RzKCk7XG4gICAgfVxuICAgIGZuKCk7XG4gICAgaHRtbEVsZW1lbnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBleGlzdGluZztcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFuZGxlLXNtb290aC1zY3JvbGwuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImhhbmRsZVNtb290aFNjcm9sbCIsImZuIiwib3B0aW9ucyIsIm9ubHlIYXNoQ2hhbmdlIiwiaHRtbEVsZW1lbnQiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImV4aXN0aW5nIiwic3R5bGUiLCJzY3JvbGxCZWhhdmlvciIsImRvbnRGb3JjZUxheW91dCIsImdldENsaWVudFJlY3RzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/is-bot.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isBot\", ({\n enumerable: true,\n get: function() {\n return isBot;\n }\n}));\nfunction isBot(userAgent) {\n return /Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver/i.test(userAgent);\n} //# sourceMappingURL=is-bot.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWJvdC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgseUNBQXdDO0lBQ3BDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0EsTUFBTUMsU0FBUztJQUNwQixPQUFPLG9WQUFvVkMsSUFBSSxDQUFDRDtBQUNwVyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWJvdC5qcz8wNzE1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCb3RcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzQm90O1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gaXNCb3QodXNlckFnZW50KSB7XG4gICAgcmV0dXJuIC9Hb29nbGVib3R8TWVkaWFwYXJ0bmVycy1Hb29nbGV8QWRzQm90LUdvb2dsZXxnb29nbGV3ZWJsaWdodHxTdG9yZWJvdC1Hb29nbGV8R29vZ2xlLVBhZ2VSZW5kZXJlcnxCaW5nYm90fEJpbmdQcmV2aWV3fFNsdXJwfER1Y2tEdWNrQm90fGJhaWR1c3BpZGVyfHlhbmRleHxzb2dvdXxMaW5rZWRJbkJvdHxiaXRseWJvdHx0dW1ibHJ8dmtTaGFyZXxxdW9yYSBsaW5rIHByZXZpZXd8ZmFjZWJvb2tleHRlcm5hbGhpdHxmYWNlYm9va2NhdGFsb2d8VHdpdHRlcmJvdHxhcHBsZWJvdHxyZWRkaXRib3R8U2xhY2tib3R8RGlzY29yZGJvdHxXaGF0c0FwcHxTa3lwZVVyaVByZXZpZXd8aWFfYXJjaGl2ZXIvaS50ZXN0KHVzZXJBZ2VudCk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzLWJvdC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaXNCb3QiLCJ1c2VyQWdlbnQiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/parse-path.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parsePath\", ({\n enumerable: true,\n get: function() {\n return parsePath;\n }\n}));\nfunction parsePath(path) {\n const hashIndex = path.indexOf(\"#\");\n const queryIndex = path.indexOf(\"?\");\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex);\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : \"\",\n hash: hashIndex > -1 ? path.slice(hashIndex) : \"\"\n };\n }\n return {\n pathname: path,\n query: \"\",\n hash: \"\"\n };\n} //# sourceMappingURL=parse-path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXBhdGguanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Q0FJQyxHQUFnQjtBQUNqQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDZDQUE0QztJQUN4Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLFVBQVVDLElBQUk7SUFDbkIsTUFBTUMsWUFBWUQsS0FBS0UsT0FBTyxDQUFDO0lBQy9CLE1BQU1DLGFBQWFILEtBQUtFLE9BQU8sQ0FBQztJQUNoQyxNQUFNRSxXQUFXRCxhQUFhLENBQUMsS0FBTUYsQ0FBQUEsWUFBWSxLQUFLRSxhQUFhRixTQUFRO0lBQzNFLElBQUlHLFlBQVlILFlBQVksQ0FBQyxHQUFHO1FBQzVCLE9BQU87WUFDSEksVUFBVUwsS0FBS00sU0FBUyxDQUFDLEdBQUdGLFdBQVdELGFBQWFGO1lBQ3BETSxPQUFPSCxXQUFXSixLQUFLTSxTQUFTLENBQUNILFlBQVlGLFlBQVksQ0FBQyxJQUFJQSxZQUFZTyxhQUFhO1lBQ3ZGQyxNQUFNUixZQUFZLENBQUMsSUFBSUQsS0FBS1UsS0FBSyxDQUFDVCxhQUFhO1FBQ25EO0lBQ0o7SUFDQSxPQUFPO1FBQ0hJLFVBQVVMO1FBQ1ZPLE9BQU87UUFDUEUsTUFBTTtJQUNWO0FBQ0osRUFFQSxzQ0FBc0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1wYXRoLmpzP2U1MmMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHaXZlbiBhIHBhdGggdGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgdGhlIHBhdGhuYW1lLCBxdWVyeSBhbmQgaGFzaCBhbmQgcmV0dXJuXG4gKiB0aGVtLiBUaGlzIGlzIHVzZWZ1bCB0byBwYXJzZSBmdWxsIHBhdGhzIG9uIHRoZSBjbGllbnQgc2lkZS5cbiAqIEBwYXJhbSBwYXRoIEEgcGF0aCB0byBwYXJzZSBlLmcuIC9mb28vYmFyP2lkPTEjaGFzaFxuICovIFwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VQYXRoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVBhdGg7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBwYXJzZVBhdGgocGF0aCkge1xuICAgIGNvbnN0IGhhc2hJbmRleCA9IHBhdGguaW5kZXhPZihcIiNcIik7XG4gICAgY29uc3QgcXVlcnlJbmRleCA9IHBhdGguaW5kZXhPZihcIj9cIik7XG4gICAgY29uc3QgaGFzUXVlcnkgPSBxdWVyeUluZGV4ID4gLTEgJiYgKGhhc2hJbmRleCA8IDAgfHwgcXVlcnlJbmRleCA8IGhhc2hJbmRleCk7XG4gICAgaWYgKGhhc1F1ZXJ5IHx8IGhhc2hJbmRleCA+IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYXRobmFtZTogcGF0aC5zdWJzdHJpbmcoMCwgaGFzUXVlcnkgPyBxdWVyeUluZGV4IDogaGFzaEluZGV4KSxcbiAgICAgICAgICAgIHF1ZXJ5OiBoYXNRdWVyeSA/IHBhdGguc3Vic3RyaW5nKHF1ZXJ5SW5kZXgsIGhhc2hJbmRleCA+IC0xID8gaGFzaEluZGV4IDogdW5kZWZpbmVkKSA6IFwiXCIsXG4gICAgICAgICAgICBoYXNoOiBoYXNoSW5kZXggPiAtMSA/IHBhdGguc2xpY2UoaGFzaEluZGV4KSA6IFwiXCJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aG5hbWU6IHBhdGgsXG4gICAgICAgIHF1ZXJ5OiBcIlwiLFxuICAgICAgICBoYXNoOiBcIlwiXG4gICAgfTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFyc2UtcGF0aC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicGFyc2VQYXRoIiwicGF0aCIsImhhc2hJbmRleCIsImluZGV4T2YiLCJxdWVyeUluZGV4IiwiaGFzUXVlcnkiLCJwYXRobmFtZSIsInN1YnN0cmluZyIsInF1ZXJ5IiwidW5kZWZpbmVkIiwiaGFzaCIsInNsaWNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js": +/*!***************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"pathHasPrefix\", ({\n enumerable: true,\n get: function() {\n return pathHasPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(ssr)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction pathHasPrefix(path, prefix) {\n if (typeof path !== \"string\") {\n return false;\n }\n const { pathname } = (0, _parsepath.parsePath)(path);\n return pathname === prefix || pathname.startsWith(prefix + \"/\");\n} //# sourceMappingURL=path-has-prefix.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtaGFzLXByZWZpeC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsaURBQWdEO0lBQzVDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsYUFBYUMsbUJBQU9BLENBQUMsMEZBQWM7QUFDekMsU0FBU0YsY0FBY0csSUFBSSxFQUFFQyxNQUFNO0lBQy9CLElBQUksT0FBT0QsU0FBUyxVQUFVO1FBQzFCLE9BQU87SUFDWDtJQUNBLE1BQU0sRUFBRUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxHQUFHSixXQUFXSyxTQUFTLEVBQUVIO0lBQy9DLE9BQU9FLGFBQWFELFVBQVVDLFNBQVNFLFVBQVUsQ0FBQ0gsU0FBUztBQUMvRCxFQUVBLDJDQUEyQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtaGFzLXByZWZpeC5qcz9iNTM4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGF0aEhhc1ByZWZpeFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcGF0aEhhc1ByZWZpeDtcbiAgICB9XG59KTtcbmNvbnN0IF9wYXJzZXBhdGggPSByZXF1aXJlKFwiLi9wYXJzZS1wYXRoXCIpO1xuZnVuY3Rpb24gcGF0aEhhc1ByZWZpeChwYXRoLCBwcmVmaXgpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB7IHBhdGhuYW1lIH0gPSAoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKHBhdGgpO1xuICAgIHJldHVybiBwYXRobmFtZSA9PT0gcHJlZml4IHx8IHBhdGhuYW1lLnN0YXJ0c1dpdGgocHJlZml4ICsgXCIvXCIpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLWhhcy1wcmVmaXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInBhdGhIYXNQcmVmaXgiLCJfcGFyc2VwYXRoIiwicmVxdWlyZSIsInBhdGgiLCJwcmVmaXgiLCJwYXRobmFtZSIsInBhcnNlUGF0aCIsInN0YXJ0c1dpdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return removeTrailingSlash;\n }\n}));\nfunction removeTrailingSlash(route) {\n return route.replace(/\\/$/, \"\") || \"/\";\n} //# sourceMappingURL=remove-trailing-slash.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS10cmFpbGluZy1zbGFzaC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0NBTUMsR0FBZ0I7QUFDakJBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx1REFBc0Q7SUFDbERJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixTQUFTQSxvQkFBb0JDLEtBQUs7SUFDOUIsT0FBT0EsTUFBTUMsT0FBTyxDQUFDLE9BQU8sT0FBTztBQUN2QyxFQUVBLGlEQUFpRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS10cmFpbGluZy1zbGFzaC5qcz9lYzA2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZm9yIGEgZ2l2ZW4gcm91dGUgb3IgcGFnZSBwYXRoLiBQcmVzZXJ2ZXMgdGhlXG4gKiByb290IHBhZ2UuIEV4YW1wbGVzOlxuICogICAtIGAvZm9vL2Jhci9gIC0+IGAvZm9vL2JhcmBcbiAqICAgLSBgL2Zvby9iYXJgIC0+IGAvZm9vL2JhcmBcbiAqICAgLSBgL2AgLT4gYC9gXG4gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZW1vdmVUcmFpbGluZ1NsYXNoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZW1vdmVUcmFpbGluZ1NsYXNoO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gcmVtb3ZlVHJhaWxpbmdTbGFzaChyb3V0ZSkge1xuICAgIHJldHVybiByb3V0ZS5yZXBsYWNlKC9cXC8kLywgXCJcIikgfHwgXCIvXCI7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlbW92ZS10cmFpbGluZy1zbGFzaC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsInJvdXRlIiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/segment.js": +/*!******************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/segment.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n isGroupSegment: function() {\n return isGroupSegment;\n },\n PAGE_SEGMENT_KEY: function() {\n return PAGE_SEGMENT_KEY;\n },\n DEFAULT_SEGMENT_KEY: function() {\n return DEFAULT_SEGMENT_KEY;\n }\n});\nfunction isGroupSegment(segment) {\n // Use array[0] for performant purpose\n return segment[0] === \"(\" && segment.endsWith(\")\");\n}\nconst PAGE_SEGMENT_KEY = \"__PAGE__\";\nconst DEFAULT_SEGMENT_KEY = \"__DEFAULT__\"; //# sourceMappingURL=segment.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvc2VnbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUlOO0FBQ0EsU0FBU0ksUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVYsT0FBT0MsY0FBYyxDQUFDUSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFOLFNBQVM7SUFDYkcsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtJQUNBQyxrQkFBa0I7UUFDZCxPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxTQUFTRixlQUFlUyxPQUFPO0lBQzNCLHNDQUFzQztJQUN0QyxPQUFPQSxPQUFPLENBQUMsRUFBRSxLQUFLLE9BQU9BLFFBQVFDLFFBQVEsQ0FBQztBQUNsRDtBQUNBLE1BQU1ULG1CQUFtQjtBQUN6QixNQUFNQyxzQkFBc0IsZUFFNUIsbUNBQW1DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zZWdtZW50LmpzP2ZmNzIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBpc0dyb3VwU2VnbWVudDogbnVsbCxcbiAgICBQQUdFX1NFR01FTlRfS0VZOiBudWxsLFxuICAgIERFRkFVTFRfU0VHTUVOVF9LRVk6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgaXNHcm91cFNlZ21lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNHcm91cFNlZ21lbnQ7XG4gICAgfSxcbiAgICBQQUdFX1NFR01FTlRfS0VZOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBBR0VfU0VHTUVOVF9LRVk7XG4gICAgfSxcbiAgICBERUZBVUxUX1NFR01FTlRfS0VZOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0VHTUVOVF9LRVk7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBpc0dyb3VwU2VnbWVudChzZWdtZW50KSB7XG4gICAgLy8gVXNlIGFycmF5WzBdIGZvciBwZXJmb3JtYW50IHB1cnBvc2VcbiAgICByZXR1cm4gc2VnbWVudFswXSA9PT0gXCIoXCIgJiYgc2VnbWVudC5lbmRzV2l0aChcIilcIik7XG59XG5jb25zdCBQQUdFX1NFR01FTlRfS0VZID0gXCJfX1BBR0VfX1wiO1xuY29uc3QgREVGQVVMVF9TRUdNRU5UX0tFWSA9IFwiX19ERUZBVUxUX19cIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VnbWVudC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJpc0dyb3VwU2VnbWVudCIsIlBBR0VfU0VHTUVOVF9LRVkiLCJERUZBVUxUX1NFR01FTlRfS0VZIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic2VnbWVudCIsImVuZHNXaXRoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/segment.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/shared/lib/utils/warn-once.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/utils/warn-once.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"warnOnce\", ({\n enumerable: true,\n get: function() {\n return warnOnce;\n }\n}));\nlet warnOnce = (_)=>{};\nif (true) {\n const warnings = new Set();\n warnOnce = (msg)=>{\n if (!warnings.has(msg)) {\n console.warn(msg);\n }\n warnings.add(msg);\n };\n} //# sourceMappingURL=warn-once.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMvd2Fybi1vbmNlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw0Q0FBMkM7SUFDdkNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixJQUFJQSxXQUFXLENBQUNDLEtBQUs7QUFDckIsSUFBSUMsSUFBcUMsRUFBRTtJQUN2QyxNQUFNQyxXQUFXLElBQUlDO0lBQ3JCSixXQUFXLENBQUNLO1FBQ1IsSUFBSSxDQUFDRixTQUFTRyxHQUFHLENBQUNELE1BQU07WUFDcEJFLFFBQVFDLElBQUksQ0FBQ0g7UUFDakI7UUFDQUYsU0FBU00sR0FBRyxDQUFDSjtJQUNqQjtBQUNKLEVBRUEscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UuanM/NzM5NSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndhcm5PbmNlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB3YXJuT25jZTtcbiAgICB9XG59KTtcbmxldCB3YXJuT25jZSA9IChfKT0+e307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgY29uc3Qgd2FybmluZ3MgPSBuZXcgU2V0KCk7XG4gICAgd2Fybk9uY2UgPSAobXNnKT0+e1xuICAgICAgICBpZiAoIXdhcm5pbmdzLmhhcyhtc2cpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4obXNnKTtcbiAgICAgICAgfVxuICAgICAgICB3YXJuaW5ncy5hZGQobXNnKTtcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD13YXJuLW9uY2UuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIndhcm5PbmNlIiwiXyIsInByb2Nlc3MiLCJ3YXJuaW5ncyIsIlNldCIsIm1zZyIsImhhcyIsImNvbnNvbGUiLCJ3YXJuIiwiYWRkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/shared/lib/utils/warn-once.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/build/output/log.js": +/*!****************************************************!*\ + !*** ./node_modules/next/dist/build/output/log.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n prefixes: function() {\n return prefixes;\n },\n bootstrap: function() {\n return bootstrap;\n },\n wait: function() {\n return wait;\n },\n error: function() {\n return error;\n },\n warn: function() {\n return warn;\n },\n ready: function() {\n return ready;\n },\n info: function() {\n return info;\n },\n event: function() {\n return event;\n },\n trace: function() {\n return trace;\n },\n warnOnce: function() {\n return warnOnce;\n }\n});\nconst _picocolors = __webpack_require__(/*! ../../lib/picocolors */ \"(rsc)/./node_modules/next/dist/lib/picocolors.js\");\nconst prefixes = {\n wait: (0, _picocolors.white)((0, _picocolors.bold)(\"○\")),\n error: (0, _picocolors.red)((0, _picocolors.bold)(\"⨯\")),\n warn: (0, _picocolors.yellow)((0, _picocolors.bold)(\"⚠\")),\n ready: \"▲\",\n info: (0, _picocolors.white)((0, _picocolors.bold)(\" \")),\n event: (0, _picocolors.green)((0, _picocolors.bold)(\"✓\")),\n trace: (0, _picocolors.magenta)((0, _picocolors.bold)(\"\\xbb\"))\n};\nconst LOGGING_METHOD = {\n log: \"log\",\n warn: \"warn\",\n error: \"error\"\n};\nfunction prefixedLog(prefixType, ...message) {\n if ((message[0] === \"\" || message[0] === undefined) && message.length === 1) {\n message.shift();\n }\n const consoleMethod = prefixType in LOGGING_METHOD ? LOGGING_METHOD[prefixType] : \"log\";\n const prefix = prefixes[prefixType];\n // If there's no message, don't print the prefix but a new line\n if (message.length === 0) {\n console[consoleMethod](\"\");\n } else {\n console[consoleMethod](\" \" + prefix, ...message);\n }\n}\nfunction bootstrap(...message) {\n console.log(\" \", ...message);\n}\nfunction wait(...message) {\n prefixedLog(\"wait\", ...message);\n}\nfunction error(...message) {\n prefixedLog(\"error\", ...message);\n}\nfunction warn(...message) {\n prefixedLog(\"warn\", ...message);\n}\nfunction ready(...message) {\n prefixedLog(\"ready\", ...message);\n}\nfunction info(...message) {\n prefixedLog(\"info\", ...message);\n}\nfunction event(...message) {\n prefixedLog(\"event\", ...message);\n}\nfunction trace(...message) {\n prefixedLog(\"trace\", ...message);\n}\nconst warnOnceMessages = new Set();\nfunction warnOnce(...message) {\n if (!warnOnceMessages.has(message[0])) {\n warnOnceMessages.add(message.join(\" \"));\n warn(...message);\n }\n}\n\n//# sourceMappingURL=log.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL291dHB1dC9sb2cuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBV0w7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG9CQUFvQixtQkFBTyxDQUFDLDhFQUFzQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvb3V0cHV0L2xvZy5qcz9iNmI1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgcHJlZml4ZXM6IG51bGwsXG4gICAgYm9vdHN0cmFwOiBudWxsLFxuICAgIHdhaXQ6IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgd2FybjogbnVsbCxcbiAgICByZWFkeTogbnVsbCxcbiAgICBpbmZvOiBudWxsLFxuICAgIGV2ZW50OiBudWxsLFxuICAgIHRyYWNlOiBudWxsLFxuICAgIHdhcm5PbmNlOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIHByZWZpeGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeGVzO1xuICAgIH0sXG4gICAgYm9vdHN0cmFwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGJvb3RzdHJhcDtcbiAgICB9LFxuICAgIHdhaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gd2FpdDtcbiAgICB9LFxuICAgIGVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgd2FybjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB3YXJuO1xuICAgIH0sXG4gICAgcmVhZHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmVhZHk7XG4gICAgfSxcbiAgICBpbmZvOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGluZm87XG4gICAgfSxcbiAgICBldmVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICB9LFxuICAgIHRyYWNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRyYWNlO1xuICAgIH0sXG4gICAgd2Fybk9uY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gd2Fybk9uY2U7XG4gICAgfVxufSk7XG5jb25zdCBfcGljb2NvbG9ycyA9IHJlcXVpcmUoXCIuLi8uLi9saWIvcGljb2NvbG9yc1wiKTtcbmNvbnN0IHByZWZpeGVzID0ge1xuICAgIHdhaXQ6ICgwLCBfcGljb2NvbG9ycy53aGl0ZSkoKDAsIF9waWNvY29sb3JzLmJvbGQpKFwi4peLXCIpKSxcbiAgICBlcnJvcjogKDAsIF9waWNvY29sb3JzLnJlZCkoKDAsIF9waWNvY29sb3JzLmJvbGQpKFwi4qivXCIpKSxcbiAgICB3YXJuOiAoMCwgX3BpY29jb2xvcnMueWVsbG93KSgoMCwgX3BpY29jb2xvcnMuYm9sZCkoXCLimqBcIikpLFxuICAgIHJlYWR5OiBcIuKWslwiLFxuICAgIGluZm86ICgwLCBfcGljb2NvbG9ycy53aGl0ZSkoKDAsIF9waWNvY29sb3JzLmJvbGQpKFwiIFwiKSksXG4gICAgZXZlbnQ6ICgwLCBfcGljb2NvbG9ycy5ncmVlbikoKDAsIF9waWNvY29sb3JzLmJvbGQpKFwi4pyTXCIpKSxcbiAgICB0cmFjZTogKDAsIF9waWNvY29sb3JzLm1hZ2VudGEpKCgwLCBfcGljb2NvbG9ycy5ib2xkKShcIlxceGJiXCIpKVxufTtcbmNvbnN0IExPR0dJTkdfTUVUSE9EID0ge1xuICAgIGxvZzogXCJsb2dcIixcbiAgICB3YXJuOiBcIndhcm5cIixcbiAgICBlcnJvcjogXCJlcnJvclwiXG59O1xuZnVuY3Rpb24gcHJlZml4ZWRMb2cocHJlZml4VHlwZSwgLi4ubWVzc2FnZSkge1xuICAgIGlmICgobWVzc2FnZVswXSA9PT0gXCJcIiB8fCBtZXNzYWdlWzBdID09PSB1bmRlZmluZWQpICYmIG1lc3NhZ2UubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIG1lc3NhZ2Uuc2hpZnQoKTtcbiAgICB9XG4gICAgY29uc3QgY29uc29sZU1ldGhvZCA9IHByZWZpeFR5cGUgaW4gTE9HR0lOR19NRVRIT0QgPyBMT0dHSU5HX01FVEhPRFtwcmVmaXhUeXBlXSA6IFwibG9nXCI7XG4gICAgY29uc3QgcHJlZml4ID0gcHJlZml4ZXNbcHJlZml4VHlwZV07XG4gICAgLy8gSWYgdGhlcmUncyBubyBtZXNzYWdlLCBkb24ndCBwcmludCB0aGUgcHJlZml4IGJ1dCBhIG5ldyBsaW5lXG4gICAgaWYgKG1lc3NhZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGVbY29uc29sZU1ldGhvZF0oXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZVtjb25zb2xlTWV0aG9kXShcIiBcIiArIHByZWZpeCwgLi4ubWVzc2FnZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gYm9vdHN0cmFwKC4uLm1lc3NhZ2UpIHtcbiAgICBjb25zb2xlLmxvZyhcIiBcIiwgLi4ubWVzc2FnZSk7XG59XG5mdW5jdGlvbiB3YWl0KC4uLm1lc3NhZ2UpIHtcbiAgICBwcmVmaXhlZExvZyhcIndhaXRcIiwgLi4ubWVzc2FnZSk7XG59XG5mdW5jdGlvbiBlcnJvciguLi5tZXNzYWdlKSB7XG4gICAgcHJlZml4ZWRMb2coXCJlcnJvclwiLCAuLi5tZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIHdhcm4oLi4ubWVzc2FnZSkge1xuICAgIHByZWZpeGVkTG9nKFwid2FyblwiLCAuLi5tZXNzYWdlKTtcbn1cbmZ1bmN0aW9uIHJlYWR5KC4uLm1lc3NhZ2UpIHtcbiAgICBwcmVmaXhlZExvZyhcInJlYWR5XCIsIC4uLm1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gaW5mbyguLi5tZXNzYWdlKSB7XG4gICAgcHJlZml4ZWRMb2coXCJpbmZvXCIsIC4uLm1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gZXZlbnQoLi4ubWVzc2FnZSkge1xuICAgIHByZWZpeGVkTG9nKFwiZXZlbnRcIiwgLi4ubWVzc2FnZSk7XG59XG5mdW5jdGlvbiB0cmFjZSguLi5tZXNzYWdlKSB7XG4gICAgcHJlZml4ZWRMb2coXCJ0cmFjZVwiLCAuLi5tZXNzYWdlKTtcbn1cbmNvbnN0IHdhcm5PbmNlTWVzc2FnZXMgPSBuZXcgU2V0KCk7XG5mdW5jdGlvbiB3YXJuT25jZSguLi5tZXNzYWdlKSB7XG4gICAgaWYgKCF3YXJuT25jZU1lc3NhZ2VzLmhhcyhtZXNzYWdlWzBdKSkge1xuICAgICAgICB3YXJuT25jZU1lc3NhZ2VzLmFkZChtZXNzYWdlLmpvaW4oXCIgXCIpKTtcbiAgICAgICAgd2FybiguLi5tZXNzYWdlKTtcbiAgICB9XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxvZy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/output/log.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js ***! + \*****************************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("/* eslint-disable import/no-extraneous-dependencies */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createProxy\", ({\n enumerable: true,\n get: function() {\n return createProxy;\n }\n}));\nconst _serveredge = __webpack_require__(/*! react-server-dom-webpack/server.edge */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge.js\");\nconst createProxy = _serveredge.createClientModuleProxy;\n\n//# sourceMappingURL=module-proxy.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWZsaWdodC1sb2FkZXIvbW9kdWxlLXByb3h5LmpzIiwibWFwcGluZ3MiOiJBQUFBLHVEQUFvRTtBQUNwRSw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRiwrQ0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRixvQkFBb0IsbUJBQU8sQ0FBQyxzS0FBc0M7QUFDbEU7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC93ZWJwYWNrL2xvYWRlcnMvbmV4dC1mbGlnaHQtbG9hZGVyL21vZHVsZS1wcm94eS5qcz83ZGQ0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb3h5XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVQcm94eTtcbiAgICB9XG59KTtcbmNvbnN0IF9zZXJ2ZXJlZGdlID0gcmVxdWlyZShcInJlYWN0LXNlcnZlci1kb20td2VicGFjay9zZXJ2ZXIuZWRnZVwiKTtcbmNvbnN0IGNyZWF0ZVByb3h5ID0gX3NlcnZlcmVkZ2UuY3JlYXRlQ2xpZW50TW9kdWxlUHJveHk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1vZHVsZS1wcm94eS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/client/components/app-router.js": +/*!****************************************************************!*\ + !*** ./node_modules/next/dist/client/components/app-router.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nconst { createProxy } = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ \"(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js\");\nmodule.exports = createProxy(\"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\node_modules\\\\next\\\\dist\\\\client\\\\components\\\\app-router.js\");\n //# sourceMappingURL=app-router.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXIuanMiLCJtYXBwaW5ncyI6Ijs7O0NBMmlCQSxzQ0FBc0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLmpzPzQxNTkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZ2V0U2VydmVyQWN0aW9uRGlzcGF0Y2hlcjogbnVsbCxcbiAgICB1cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXI6IG51bGwsXG4gICAgY3JlYXRlRW1wdHlDYWNoZU5vZGU6IG51bGwsXG4gICAgZGVmYXVsdDogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBnZXRTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFNlcnZlckFjdGlvbkRpc3BhdGNoZXI7XG4gICAgfSxcbiAgICB1cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyO1xuICAgIH0sXG4gICAgY3JlYXRlRW1wdHlDYWNoZU5vZGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlDYWNoZU5vZGU7XG4gICAgfSxcbiAgICBkZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFwcFJvdXRlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmNvbnN0IF9yb3V0ZXJyZWR1Y2VydHlwZXMgPSByZXF1aXJlKFwiLi9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlc1wiKTtcbmNvbnN0IF9jcmVhdGVocmVmZnJvbXVybCA9IHJlcXVpcmUoXCIuL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1ocmVmLWZyb20tdXJsXCIpO1xuY29uc3QgX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2xpYi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmNvbnN0IF91c2VyZWR1Y2Vyd2l0aGRldnRvb2xzID0gcmVxdWlyZShcIi4vdXNlLXJlZHVjZXItd2l0aC1kZXZ0b29sc1wiKTtcbmNvbnN0IF9lcnJvcmJvdW5kYXJ5ID0gcmVxdWlyZShcIi4vZXJyb3ItYm91bmRhcnlcIik7XG5jb25zdCBfY3JlYXRlaW5pdGlhbHJvdXRlcnN0YXRlID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXIvY3JlYXRlLWluaXRpYWwtcm91dGVyLXN0YXRlXCIpO1xuY29uc3QgX2lzYm90ID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWJvdFwiKTtcbmNvbnN0IF9hZGRiYXNlcGF0aCA9IHJlcXVpcmUoXCIuLi9hZGQtYmFzZS1wYXRoXCIpO1xuY29uc3QgX2FwcHJvdXRlcmFubm91bmNlciA9IHJlcXVpcmUoXCIuL2FwcC1yb3V0ZXItYW5ub3VuY2VyXCIpO1xuY29uc3QgX3JlZGlyZWN0Ym91bmRhcnkgPSByZXF1aXJlKFwiLi9yZWRpcmVjdC1ib3VuZGFyeVwiKTtcbmNvbnN0IF9maW5kaGVhZGluY2FjaGUgPSByZXF1aXJlKFwiLi9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9maW5kLWhlYWQtaW4tY2FjaGVcIik7XG5jb25zdCBfaW5maW5pdGVwcm9taXNlID0gcmVxdWlyZShcIi4vaW5maW5pdGUtcHJvbWlzZVwiKTtcbmNvbnN0IF9hcHByb3V0ZXJoZWFkZXJzID0gcmVxdWlyZShcIi4vYXBwLXJvdXRlci1oZWFkZXJzXCIpO1xuY29uc3QgX3JlbW92ZWJhc2VwYXRoID0gcmVxdWlyZShcIi4uL3JlbW92ZS1iYXNlLXBhdGhcIik7XG5jb25zdCBfaGFzYmFzZXBhdGggPSByZXF1aXJlKFwiLi4vaGFzLWJhc2UtcGF0aFwiKTtcbmNvbnN0IGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIjtcbi8vIEVuc3VyZSB0aGUgaW5pdGlhbFBhcmFsbGVsUm91dGVzIGFyZSBub3QgY29tYmluZWQgYmVjYXVzZSBvZiBkb3VibGUtcmVuZGVyaW5nIGluIHRoZSBicm93c2VyIHdpdGggU3RyaWN0IE1vZGUuXG5sZXQgaW5pdGlhbFBhcmFsbGVsUm91dGVzID0gaXNTZXJ2ZXIgPyBudWxsIDogbmV3IE1hcCgpO1xubGV0IGdsb2JhbFNlcnZlckFjdGlvbkRpc3BhdGNoZXIgPSBudWxsO1xuZnVuY3Rpb24gZ2V0U2VydmVyQWN0aW9uRGlzcGF0Y2hlcigpIHtcbiAgICByZXR1cm4gZ2xvYmFsU2VydmVyQWN0aW9uRGlzcGF0Y2hlcjtcbn1cbmNvbnN0IGdsb2JhbE11dGFibGUgPSB7fTtcbmZ1bmN0aW9uIHVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlcih1cmwpIHtcbiAgICBjb25zdCB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycyA9IG5ldyBVUkwodXJsLCBsb2NhdGlvbi5vcmlnaW4pO1xuICAgIHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzLnNlYXJjaFBhcmFtcy5kZWxldGUoX2FwcHJvdXRlcmhlYWRlcnMuTkVYVF9SU0NfVU5JT05fUVVFUlkpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DT05GSUdfT1VUUFVUID09PSBcImV4cG9ydFwiICYmIHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzLnBhdGhuYW1lLmVuZHNXaXRoKFwiLnR4dFwiKSkge1xuICAgICAgICAgICAgY29uc3QgeyBwYXRobmFtZSB9ID0gdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnM7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBwYXRobmFtZS5lbmRzV2l0aChcIi9pbmRleC50eHRcIikgPyAxMCA6IDQ7XG4gICAgICAgICAgICAvLyBTbGljZSBvZmYgYC9pbmRleC50eHRgIG9yIGAudHh0YCBmcm9tIHRoZSBlbmQgb2YgdGhlIHBhdGhuYW1lXG4gICAgICAgICAgICB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycy5wYXRobmFtZSA9IHBhdGhuYW1lLnNsaWNlKDAsIC1sZW5ndGgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycztcbn1cbmZ1bmN0aW9uIGlzRXh0ZXJuYWxVUkwodXJsKSB7XG4gICAgcmV0dXJuIHVybC5vcmlnaW4gIT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG59XG5mdW5jdGlvbiBIaXN0b3J5VXBkYXRlcihwYXJhbSkge1xuICAgIGxldCB7IGFwcFJvdXRlclN0YXRlLCBzeW5jIH0gPSBwYXJhbTtcbiAgICAoMCwgX3JlYWN0LnVzZUluc2VydGlvbkVmZmVjdCkoKCk9PntcbiAgICAgICAgY29uc3QgeyB0cmVlLCBwdXNoUmVmLCBjYW5vbmljYWxVcmwgfSA9IGFwcFJvdXRlclN0YXRlO1xuICAgICAgICBjb25zdCBoaXN0b3J5U3RhdGUgPSB7XG4gICAgICAgICAgICAuLi5wdXNoUmVmLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlID8gd2luZG93Lmhpc3Rvcnkuc3RhdGUgOiB7fSxcbiAgICAgICAgICAgIC8vIElkZW50aWZpZXIgaXMgc2hvcnRlbmVkIGludGVudGlvbmFsbHkuXG4gICAgICAgICAgICAvLyBfX05BIGlzIHVzZWQgdG8gaWRlbnRpZnkgaWYgdGhlIGhpc3RvcnkgZW50cnkgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIGFwcC1yb3V0ZXIuXG4gICAgICAgICAgICAvLyBfX04gaXMgdXNlZCB0byBpZGVudGlmeSBpZiB0aGUgaGlzdG9yeSBlbnRyeSBjYW4gYmUgaGFuZGxlZCBieSB0aGUgb2xkIHJvdXRlci5cbiAgICAgICAgICAgIF9fTkE6IHRydWUsXG4gICAgICAgICAgICBfX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFOiB0cmVlXG4gICAgICAgIH07XG4gICAgICAgIGlmIChwdXNoUmVmLnBlbmRpbmdQdXNoICYmIC8vIFNraXAgcHVzaGluZyBhbiBhZGRpdGlvbmFsIGhpc3RvcnkgZW50cnkgaWYgdGhlIGNhbm9uaWNhbFVybCBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCB1cmwuXG4gICAgICAgIC8vIFRoaXMgbWlycm9ycyB0aGUgYnJvd3NlciBiZWhhdmlvciBmb3Igbm9ybWFsIG5hdmlnYXRpb24uXG4gICAgICAgICgwLCBfY3JlYXRlaHJlZmZyb211cmwuY3JlYXRlSHJlZkZyb21VcmwpKG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpKSAhPT0gY2Fub25pY2FsVXJsKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGludGVudGlvbmFsbHkgbXV0YXRlcyBSZWFjdCBzdGF0ZSwgcHVzaFJlZiBpcyBvdmVyd3JpdHRlbiB0byBlbnN1cmUgYWRkaXRpb25hbCBwdXNoL3JlcGxhY2UgY2FsbHMgZG8gbm90IHRyaWdnZXIgYW4gYWRkaXRpb25hbCBoaXN0b3J5IGVudHJ5LlxuICAgICAgICAgICAgcHVzaFJlZi5wZW5kaW5nUHVzaCA9IGZhbHNlO1xuICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKGhpc3RvcnlTdGF0ZSwgXCJcIiwgY2Fub25pY2FsVXJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShoaXN0b3J5U3RhdGUsIFwiXCIsIGNhbm9uaWNhbFVybCk7XG4gICAgICAgIH1cbiAgICAgICAgc3luYyhhcHBSb3V0ZXJTdGF0ZSk7XG4gICAgfSwgW1xuICAgICAgICBhcHBSb3V0ZXJTdGF0ZSxcbiAgICAgICAgc3luY1xuICAgIF0pO1xuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlRW1wdHlDYWNoZU5vZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgIHJzYzogbnVsbCxcbiAgICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICAgIGxhenlEYXRhUmVzb2x2ZWQ6IGZhbHNlXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHVzZVNlcnZlckFjdGlvbkRpc3BhdGNoZXIoZGlzcGF0Y2gpIHtcbiAgICBjb25zdCBzZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyID0gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKGFjdGlvblBheWxvYWQpPT57XG4gICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIC4uLmFjdGlvblBheWxvYWQsXG4gICAgICAgICAgICAgICAgdHlwZTogX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fU0VSVkVSX0FDVElPTlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtcbiAgICAgICAgZGlzcGF0Y2hcbiAgICBdKTtcbiAgICBnbG9iYWxTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyID0gc2VydmVyQWN0aW9uRGlzcGF0Y2hlcjtcbn1cbi8qKlxuICogU2VydmVyIHJlc3BvbnNlIHRoYXQgb25seSBwYXRjaGVzIHRoZSBjYWNoZSBhbmQgdHJlZS5cbiAqLyBmdW5jdGlvbiB1c2VDaGFuZ2VCeVNlcnZlclJlc3BvbnNlKGRpc3BhdGNoKSB7XG4gICAgcmV0dXJuICgwLCBfcmVhY3QudXNlQ2FsbGJhY2spKChwcmV2aW91c1RyZWUsIGZsaWdodERhdGEsIG92ZXJyaWRlQ2Fub25pY2FsVXJsKT0+e1xuICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9TRVJWRVJfUEFUQ0gsXG4gICAgICAgICAgICAgICAgZmxpZ2h0RGF0YSxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1RyZWUsXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVDYW5vbmljYWxVcmxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9LCBbXG4gICAgICAgIGRpc3BhdGNoXG4gICAgXSk7XG59XG5mdW5jdGlvbiB1c2VOYXZpZ2F0ZShkaXNwYXRjaCkge1xuICAgIHJldHVybiAoMCwgX3JlYWN0LnVzZUNhbGxiYWNrKSgoaHJlZiwgbmF2aWdhdGVUeXBlLCBzaG91bGRTY3JvbGwpPT57XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkoaHJlZiksIGxvY2F0aW9uLmhyZWYpO1xuICAgICAgICByZXR1cm4gZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fTkFWSUdBVEUsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBpc0V4dGVybmFsVXJsOiBpc0V4dGVybmFsVVJMKHVybCksXG4gICAgICAgICAgICBsb2NhdGlvblNlYXJjaDogbG9jYXRpb24uc2VhcmNoLFxuICAgICAgICAgICAgc2hvdWxkU2Nyb2xsOiBzaG91bGRTY3JvbGwgIT0gbnVsbCA/IHNob3VsZFNjcm9sbCA6IHRydWUsXG4gICAgICAgICAgICBuYXZpZ2F0ZVR5cGVcbiAgICAgICAgfSk7XG4gICAgfSwgW1xuICAgICAgICBkaXNwYXRjaFxuICAgIF0pO1xufVxuZnVuY3Rpb24gY29weU5leHRKc0ludGVybmFsSGlzdG9yeVN0YXRlKGRhdGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsKSBkYXRhID0ge307XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gd2luZG93Lmhpc3Rvcnkuc3RhdGU7XG4gICAgY29uc3QgX19OQSA9IGN1cnJlbnRTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogY3VycmVudFN0YXRlLl9fTkE7XG4gICAgaWYgKF9fTkEpIHtcbiAgICAgICAgZGF0YS5fX05BID0gX19OQTtcbiAgICB9XG4gICAgY29uc3QgX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRSA9IGN1cnJlbnRTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogY3VycmVudFN0YXRlLl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUU7XG4gICAgaWYgKF9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUpIHtcbiAgICAgICAgZGF0YS5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFID0gX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBIZWFkKHBhcmFtKSB7XG4gICAgbGV0IHsgaGVhZENhY2hlTm9kZSB9ID0gcGFyYW07XG4gICAgLy8gSWYgdGhpcyBzZWdtZW50IGhhcyBhIGBwcmVmZXRjaEhlYWRgLCBpdCdzIHRoZSBzdGF0aWNhbGx5IHByZWZldGNoZWQgZGF0YS5cbiAgICAvLyBXZSBzaG91bGQgdXNlIHRoYXQgb24gaW5pdGlhbCByZW5kZXIgaW5zdGVhZCBvZiBgaGVhZGAuIFRoZW4gd2UnbGwgc3dpdGNoXG4gICAgLy8gdG8gYGhlYWRgIHdoZW4gdGhlIGR5bmFtaWMgcmVzcG9uc2Ugc3RyZWFtcyBpbi5cbiAgICBjb25zdCBoZWFkID0gaGVhZENhY2hlTm9kZSAhPT0gbnVsbCA/IGhlYWRDYWNoZU5vZGUuaGVhZCA6IG51bGw7XG4gICAgY29uc3QgcHJlZmV0Y2hIZWFkID0gaGVhZENhY2hlTm9kZSAhPT0gbnVsbCA/IGhlYWRDYWNoZU5vZGUucHJlZmV0Y2hIZWFkIDogbnVsbDtcbiAgICAvLyBJZiBubyBwcmVmZXRjaCBkYXRhIGlzIGF2YWlsYWJsZSwgdGhlbiB3ZSBnbyBzdHJhaWdodCB0byByZW5kZXJpbmcgYGhlYWRgLlxuICAgIGNvbnN0IHJlc29sdmVkUHJlZmV0Y2hSc2MgPSBwcmVmZXRjaEhlYWQgIT09IG51bGwgPyBwcmVmZXRjaEhlYWQgOiBoZWFkO1xuICAgIC8vIFdlIHVzZSBgdXNlRGVmZXJyZWRWYWx1ZWAgdG8gaGFuZGxlIHN3aXRjaGluZyBiZXR3ZWVuIHRoZSBwcmVmZXRjaGVkIGFuZFxuICAgIC8vIGZpbmFsIHZhbHVlcy4gVGhlIHNlY29uZCBhcmd1bWVudCBpcyByZXR1cm5lZCBvbiBpbml0aWFsIHJlbmRlciwgdGhlbiBpdFxuICAgIC8vIHJlLXJlbmRlcnMgd2l0aCB0aGUgZmlyc3QgYXJndW1lbnQuXG4gICAgLy9cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYHVzZURlZmVycmVkVmFsdWVgIGlzIG9ubHlcbiAgICAvLyBhdmFpbGFibGUgaW4gdGhlIGV4cGVyaW1lbnRhbCBidWlsZHMuIFdoZW4gaXRzIGRpc2FibGVkLCBpdCB3aWxsIGFsd2F5c1xuICAgIC8vIHJldHVybiBgaGVhZGAuXG4gICAgcmV0dXJuICgwLCBfcmVhY3QudXNlRGVmZXJyZWRWYWx1ZSkoaGVhZCwgcmVzb2x2ZWRQcmVmZXRjaFJzYyk7XG59XG4vKipcbiAqIFRoZSBnbG9iYWwgcm91dGVyIHRoYXQgd3JhcHMgdGhlIGFwcGxpY2F0aW9uIGNvbXBvbmVudHMuXG4gKi8gZnVuY3Rpb24gUm91dGVyKHBhcmFtKSB7XG4gICAgbGV0IHsgYnVpbGRJZCwgaW5pdGlhbEhlYWQsIGluaXRpYWxUcmVlLCBpbml0aWFsQ2Fub25pY2FsVXJsLCBpbml0aWFsU2VlZERhdGEsIGFzc2V0UHJlZml4LCBtaXNzaW5nU2xvdHMgfSA9IHBhcmFtO1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9ICgwLCBfcmVhY3QudXNlTWVtbykoKCk9PigwLCBfY3JlYXRlaW5pdGlhbHJvdXRlcnN0YXRlLmNyZWF0ZUluaXRpYWxSb3V0ZXJTdGF0ZSkoe1xuICAgICAgICAgICAgYnVpbGRJZCxcbiAgICAgICAgICAgIGluaXRpYWxTZWVkRGF0YSxcbiAgICAgICAgICAgIGluaXRpYWxDYW5vbmljYWxVcmwsXG4gICAgICAgICAgICBpbml0aWFsVHJlZSxcbiAgICAgICAgICAgIGluaXRpYWxQYXJhbGxlbFJvdXRlcyxcbiAgICAgICAgICAgIGlzU2VydmVyLFxuICAgICAgICAgICAgbG9jYXRpb246ICFpc1NlcnZlciA/IHdpbmRvdy5sb2NhdGlvbiA6IG51bGwsXG4gICAgICAgICAgICBpbml0aWFsSGVhZFxuICAgICAgICB9KSwgW1xuICAgICAgICBidWlsZElkLFxuICAgICAgICBpbml0aWFsU2VlZERhdGEsXG4gICAgICAgIGluaXRpYWxDYW5vbmljYWxVcmwsXG4gICAgICAgIGluaXRpYWxUcmVlLFxuICAgICAgICBpbml0aWFsSGVhZFxuICAgIF0pO1xuICAgIGNvbnN0IFtyZWR1Y2VyU3RhdGUsIGRpc3BhdGNoLCBzeW5jXSA9ICgwLCBfdXNlcmVkdWNlcndpdGhkZXZ0b29scy51c2VSZWR1Y2VyV2l0aFJlZHV4RGV2dG9vbHMpKGluaXRpYWxTdGF0ZSk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIC8vIEVuc3VyZSBpbml0aWFsUGFyYWxsZWxSb3V0ZXMgaXMgY2xlYW5lZCB1cCBmcm9tIG1lbW9yeSBvbmNlIGl0J3MgdXNlZC5cbiAgICAgICAgaW5pdGlhbFBhcmFsbGVsUm91dGVzID0gbnVsbDtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgeyBjYW5vbmljYWxVcmwgfSA9ICgwLCBfdXNlcmVkdWNlcndpdGhkZXZ0b29scy51c2VVbndyYXBTdGF0ZSkocmVkdWNlclN0YXRlKTtcbiAgICAvLyBBZGQgbWVtb2l6ZWQgcGF0aG5hbWUvcXVlcnkgZm9yIHVzZVNlYXJjaFBhcmFtcyBhbmQgdXNlUGF0aG5hbWUuXG4gICAgY29uc3QgeyBzZWFyY2hQYXJhbXMsIHBhdGhuYW1lIH0gPSAoMCwgX3JlYWN0LnVzZU1lbW8pKCgpPT57XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoY2Fub25pY2FsVXJsLCB0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiID8gXCJodHRwOi8vblwiIDogd2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyB0dXJuZWQgaW50byBhIHJlYWRvbmx5IGNsYXNzIGluIGB1c2VTZWFyY2hQYXJhbXNgXG4gICAgICAgICAgICBzZWFyY2hQYXJhbXM6IHVybC5zZWFyY2hQYXJhbXMsXG4gICAgICAgICAgICBwYXRobmFtZTogKDAsIF9oYXNiYXNlcGF0aC5oYXNCYXNlUGF0aCkodXJsLnBhdGhuYW1lKSA/ICgwLCBfcmVtb3ZlYmFzZXBhdGgucmVtb3ZlQmFzZVBhdGgpKHVybC5wYXRobmFtZSkgOiB1cmwucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIGNhbm9uaWNhbFVybFxuICAgIF0pO1xuICAgIGNvbnN0IGNoYW5nZUJ5U2VydmVyUmVzcG9uc2UgPSB1c2VDaGFuZ2VCeVNlcnZlclJlc3BvbnNlKGRpc3BhdGNoKTtcbiAgICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKGRpc3BhdGNoKTtcbiAgICB1c2VTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyKGRpc3BhdGNoKTtcbiAgICAvKipcbiAgICogVGhlIGFwcCByb3V0ZXIgdGhhdCBpcyBleHBvc2VkIHRocm91Z2ggYHVzZVJvdXRlcmAuIEl0J3Mgb25seSBjb25jZXJuZWQgd2l0aCBkaXNwYXRjaGluZyBhY3Rpb25zIHRvIHRoZSByZWR1Y2VyLCBkb2VzIG5vdCBob2xkIHN0YXRlLlxuICAgKi8gY29uc3QgYXBwUm91dGVyID0gKDAsIF9yZWFjdC51c2VNZW1vKSgoKT0+e1xuICAgICAgICBjb25zdCByb3V0ZXJJbnN0YW5jZSA9IHtcbiAgICAgICAgICAgIGJhY2s6ICgpPT53aW5kb3cuaGlzdG9yeS5iYWNrKCksXG4gICAgICAgICAgICBmb3J3YXJkOiAoKT0+d2luZG93Lmhpc3RvcnkuZm9yd2FyZCgpLFxuICAgICAgICAgICAgcHJlZmV0Y2g6IChocmVmLCBvcHRpb25zKT0+e1xuICAgICAgICAgICAgICAgIC8vIERvbid0IHByZWZldGNoIGZvciBib3RzIGFzIHRoZXkgZG9uJ3QgbmF2aWdhdGUuXG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJlZmV0Y2ggZHVyaW5nIGRldmVsb3BtZW50IChpbXByb3ZlcyBjb21waWxhdGlvbiBwZXJmb3JtYW5jZSlcbiAgICAgICAgICAgICAgICBpZiAoKDAsIF9pc2JvdC5pc0JvdCkod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKCgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKGhyZWYpLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgICAgICAgICAgLy8gRXh0ZXJuYWwgdXJscyBjYW4ndCBiZSBwcmVmZXRjaGVkIGluIHRoZSBzYW1lIHdheS5cbiAgICAgICAgICAgICAgICBpZiAoaXNFeHRlcm5hbFVSTCh1cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDAsIF9yZWFjdC5zdGFydFRyYW5zaXRpb24pKCgpPT57XG4gICAgICAgICAgICAgICAgICAgIHZhciBfb3B0aW9uc19raW5kO1xuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9QUkVGRVRDSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IChfb3B0aW9uc19raW5kID0gb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5raW5kKSAhPSBudWxsID8gX29wdGlvbnNfa2luZCA6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuUHJlZmV0Y2hLaW5kLkZVTExcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVwbGFjZTogKGhyZWYsIG9wdGlvbnMpPT57XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgICAgICAgICB2YXIgX29wdGlvbnNfc2Nyb2xsO1xuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZShocmVmLCBcInJlcGxhY2VcIiwgKF9vcHRpb25zX3Njcm9sbCA9IG9wdGlvbnMuc2Nyb2xsKSAhPSBudWxsID8gX29wdGlvbnNfc2Nyb2xsIDogdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHVzaDogKGhyZWYsIG9wdGlvbnMpPT57XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgICAgICAgICB2YXIgX29wdGlvbnNfc2Nyb2xsO1xuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0ZShocmVmLCBcInB1c2hcIiwgKF9vcHRpb25zX3Njcm9sbCA9IG9wdGlvbnMuc2Nyb2xsKSAhPSBudWxsID8gX29wdGlvbnNfc2Nyb2xsIDogdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVmcmVzaDogKCk9PntcbiAgICAgICAgICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fUkVGUkVTSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIHdlIGRvbid0IHdhbnQgdG8gZXhwb3NlIHRoaXMgbWV0aG9kIGF0IGFsbFxuICAgICAgICAgICAgZmFzdFJlZnJlc2g6ICgpPT57XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmFzdFJlZnJlc2ggY2FuIG9ubHkgYmUgdXNlZCBpbiBkZXZlbG9wbWVudCBtb2RlLiBQbGVhc2UgdXNlIHJlZnJlc2ggaW5zdGVhZC5cIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIF9yZWFjdC5zdGFydFRyYW5zaXRpb24pKCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fRkFTVF9SRUZSRVNILFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJvdXRlckluc3RhbmNlO1xuICAgIH0sIFtcbiAgICAgICAgZGlzcGF0Y2gsXG4gICAgICAgIG5hdmlnYXRlXG4gICAgXSk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIC8vIEV4aXN0cyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBEb24ndCB1c2UgaW4gYXBwbGljYXRpb24gY29kZS5cbiAgICAgICAgaWYgKHdpbmRvdy5uZXh0KSB7XG4gICAgICAgICAgICB3aW5kb3cubmV4dC5yb3V0ZXIgPSBhcHBSb3V0ZXI7XG4gICAgICAgIH1cbiAgICB9LCBbXG4gICAgICAgIGFwcFJvdXRlclxuICAgIF0pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgICAgIGNvbnN0IHsgY2FjaGUsIHByZWZldGNoQ2FjaGUsIHRyZWUgfSA9ICgwLCBfdXNlcmVkdWNlcndpdGhkZXZ0b29scy51c2VVbndyYXBTdGF0ZSkocmVkdWNlclN0YXRlKTtcbiAgICAgICAgLy8gVGhpcyBob29rIGlzIGluIGEgY29uZGl0aW9uYWwgYnV0IHRoYXQgaXMgb2sgYmVjYXVzZSBgcHJvY2Vzcy5lbnYuTk9ERV9FTlZgIG5ldmVyIGNoYW5nZXNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICAgICAgLy8gQWRkIGB3aW5kb3cubmRgIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBtZWFudCBmb3IgdXNlIGluIGFwcGxpY2F0aW9ucyBhcyBjb25jdXJyZW50IHJlbmRlcmluZyB3aWxsIGFmZmVjdCB0aGUgY2FjaGUvdHJlZS9yb3V0ZXIuXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIHRoaXMgaXMgZm9yIGRlYnVnZ2luZ1xuICAgICAgICAgICAgd2luZG93Lm5kID0ge1xuICAgICAgICAgICAgICAgIHJvdXRlcjogYXBwUm91dGVyLFxuICAgICAgICAgICAgICAgIGNhY2hlLFxuICAgICAgICAgICAgICAgIHByZWZldGNoQ2FjaGUsXG4gICAgICAgICAgICAgICAgdHJlZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgW1xuICAgICAgICAgICAgYXBwUm91dGVyLFxuICAgICAgICAgICAgY2FjaGUsXG4gICAgICAgICAgICBwcmVmZXRjaENhY2hlLFxuICAgICAgICAgICAgdHJlZVxuICAgICAgICBdKTtcbiAgICB9XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIC8vIElmIHRoZSBhcHAgaXMgcmVzdG9yZWQgZnJvbSBiZmNhY2hlLCBpdCdzIHBvc3NpYmxlIHRoYXRcbiAgICAgICAgLy8gcHVzaFJlZi5tcGFOYXZpZ2F0aW9uIGlzIHRydWUsIHdoaWNoIHdvdWxkIG1lYW4gdGhhdCBhbnkgcmUtcmVuZGVyIG9mIHRoaXMgY29tcG9uZW50XG4gICAgICAgIC8vIHdvdWxkIHRyaWdnZXIgdGhlIG1wYSBuYXZpZ2F0aW9uIGxvZ2ljIGFnYWluIGZyb20gdGhlIGxpbmVzIGJlbG93LlxuICAgICAgICAvLyBUaGlzIHdpbGwgcmVzdG9yZSB0aGUgcm91dGVyIHRvIHRoZSBpbml0aWFsIHN0YXRlIGluIHRoZSBldmVudCB0aGF0IHRoZSBhcHAgaXMgcmVzdG9yZWQgZnJvbSBiZmNhY2hlLlxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVQYWdlU2hvdyhldmVudCkge1xuICAgICAgICAgICAgdmFyIF93aW5kb3dfaGlzdG9yeV9zdGF0ZTtcbiAgICAgICAgICAgIGlmICghZXZlbnQucGVyc2lzdGVkIHx8ICEoKF93aW5kb3dfaGlzdG9yeV9zdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnN0YXRlKSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvd19oaXN0b3J5X3N0YXRlLl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1JFU1RPUkUsXG4gICAgICAgICAgICAgICAgdXJsOiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxcbiAgICAgICAgICAgICAgICB0cmVlOiB3aW5kb3cuaGlzdG9yeS5zdGF0ZS5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VzaG93XCIsIGhhbmRsZVBhZ2VTaG93KTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBhZ2VzaG93XCIsIGhhbmRsZVBhZ2VTaG93KTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIGRpc3BhdGNoXG4gICAgXSk7XG4gICAgLy8gV2hlbiBtcGFOYXZpZ2F0aW9uIGZsYWcgaXMgc2V0IGRvIGEgaGFyZCBuYXZpZ2F0aW9uIHRvIHRoZSBuZXcgdXJsLlxuICAgIC8vIEluZmluaXRlbHkgc3VzcGVuZCBiZWNhdXNlIHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gcmVyZW5kZXIgYW55IGNoaWxkXG4gICAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBuZXcgVVJMIGFuZCBhbnkgZW50YW5nbGVkIHN0YXRlIHVwZGF0ZXMgc2hvdWxkbid0XG4gICAgLy8gY29tbWl0IGVpdGhlciAoZWc6IHVzZVRyYW5zaXRpb24gaXNQZW5kaW5nIHNob3VsZCBzdGF5IHRydWUgdW50aWwgdGhlIHBhZ2VcbiAgICAvLyB1bmxvYWRzKS5cbiAgICAvL1xuICAgIC8vIFRoaXMgaXMgYSBzaWRlIGVmZmVjdCBpbiByZW5kZXIuIERvbid0IHRyeSB0aGlzIGF0IGhvbWUsIGtpZHMuIEl0J3NcbiAgICAvLyBwcm9iYWJseSBzYWZlIGJlY2F1c2Ugd2Uga25vdyB0aGlzIGlzIGEgc2luZ2xldG9uIGNvbXBvbmVudCBhbmQgaXQncyBuZXZlclxuICAgIC8vIGluIDxPZmZzY3JlZW4+LiBBdCBsZWFzdCBJIGhvcGUgc28uIChJdCB3aWxsIHJ1biB0d2ljZSBpbiBkZXYgc3RyaWN0IG1vZGUsXG4gICAgLy8gYnV0IHRoYXQncy4uLiBmaW5lPylcbiAgICBjb25zdCB7IHB1c2hSZWYgfSA9ICgwLCBfdXNlcmVkdWNlcndpdGhkZXZ0b29scy51c2VVbndyYXBTdGF0ZSkocmVkdWNlclN0YXRlKTtcbiAgICBpZiAocHVzaFJlZi5tcGFOYXZpZ2F0aW9uKSB7XG4gICAgICAgIC8vIGlmIHRoZXJlJ3MgYSByZS1yZW5kZXIsIHdlIGRvbid0IHdhbnQgdG8gdHJpZ2dlciBhbm90aGVyIHJlZGlyZWN0IGlmIG9uZSBpcyBhbHJlYWR5IGluIGZsaWdodCB0byB0aGUgc2FtZSBVUkxcbiAgICAgICAgaWYgKGdsb2JhbE11dGFibGUucGVuZGluZ01wYVBhdGggIT09IGNhbm9uaWNhbFVybCkge1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24xID0gd2luZG93LmxvY2F0aW9uO1xuICAgICAgICAgICAgaWYgKHB1c2hSZWYucGVuZGluZ1B1c2gpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjEuYXNzaWduKGNhbm9uaWNhbFVybCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uMS5yZXBsYWNlKGNhbm9uaWNhbFVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnbG9iYWxNdXRhYmxlLnBlbmRpbmdNcGFQYXRoID0gY2Fub25pY2FsVXJsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE8tQVBQOiBTaG91bGQgd2UgbGlzdGVuIHRvIG5hdmlnYXRlZXJyb3IgaGVyZSB0byBjYXRjaCBmYWlsZWRcbiAgICAgICAgLy8gbmF2aWdhdGlvbnMgc29tZWhvdz8gQW5kIHNob3VsZCB3ZSBjYWxsIHdpbmRvdy5zdG9wKCkgaWYgYSBTUEEgbmF2aWdhdGlvblxuICAgICAgICAvLyBzaG91bGQgaW50ZXJydXB0IGFuIE1QQSBvbmU/XG4gICAgICAgICgwLCBfcmVhY3QudXNlKSgoMCwgX2luZmluaXRlcHJvbWlzZS5jcmVhdGVJbmZpbml0ZVByb21pc2UpKCkpO1xuICAgIH1cbiAgICAoMCwgX3JlYWN0LnVzZUVmZmVjdCkoKCk9PntcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxQdXNoU3RhdGUgPSB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUuYmluZCh3aW5kb3cuaGlzdG9yeSk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVwbGFjZVN0YXRlID0gd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlLmJpbmQod2luZG93Lmhpc3RvcnkpO1xuICAgICAgICAvLyBFbnN1cmUgdGhlIGNhbm9uaWNhbCBVUkwgaW4gdGhlIE5leHQuanMgUm91dGVyIGlzIHVwZGF0ZWQgd2hlbiB0aGUgVVJMIGlzIGNoYW5nZWQgc28gdGhhdCBgdXNlUGF0aG5hbWVgIGFuZCBgdXNlU2VhcmNoUGFyYW1zYCBob2xkIHRoZSBwdXNoZWQgdmFsdWVzLlxuICAgICAgICBjb25zdCBhcHBseVVybEZyb21IaXN0b3J5UHVzaFJlcGxhY2UgPSAodXJsKT0+e1xuICAgICAgICAgICAgdmFyIF93aW5kb3dfaGlzdG9yeV9zdGF0ZTtcbiAgICAgICAgICAgIGNvbnN0IGhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgICAgIGNvbnN0IHRyZWUgPSAoX3dpbmRvd19oaXN0b3J5X3N0YXRlID0gd2luZG93Lmhpc3Rvcnkuc3RhdGUpID09IG51bGwgPyB2b2lkIDAgOiBfd2luZG93X2hpc3Rvcnlfc3RhdGUuX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRTtcbiAgICAgICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fUkVTVE9SRSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBuZXcgVVJMKHVybCAhPSBudWxsID8gdXJsIDogaHJlZiwgaHJlZiksXG4gICAgICAgICAgICAgICAgICAgIHRyZWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgKiBQYXRjaCBwdXNoU3RhdGUgdG8gZW5zdXJlIGV4dGVybmFsIGNoYW5nZXMgdG8gdGhlIGhpc3RvcnkgYXJlIHJlZmxlY3RlZCBpbiB0aGUgTmV4dC5qcyBSb3V0ZXIuXG4gICAgICogRW5zdXJlcyBOZXh0LmpzIGludGVybmFsIGhpc3Rvcnkgc3RhdGUgaXMgY29waWVkIHRvIHRoZSBuZXcgaGlzdG9yeSBlbnRyeS5cbiAgICAgKiBFbnN1cmVzIHVzZVBhdGhuYW1lIGFuZCB1c2VTZWFyY2hQYXJhbXMgaG9sZCB0aGUgbmV3bHkgcHJvdmlkZWQgdXJsLlxuICAgICAqLyB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgPSBmdW5jdGlvbiBwdXNoU3RhdGUoZGF0YSwgX3VudXNlZCwgdXJsKSB7XG4gICAgICAgICAgICAvLyBBdm9pZCBhIGxvb3Agd2hlbiBOZXh0LmpzIGludGVybmFscyB0cmlnZ2VyIHB1c2hTdGF0ZS9yZXBsYWNlU3RhdGVcbiAgICAgICAgICAgIGlmICgoZGF0YSA9PSBudWxsID8gdm9pZCAwIDogZGF0YS5fX05BKSB8fCAoZGF0YSA9PSBudWxsID8gdm9pZCAwIDogZGF0YS5fTikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxQdXNoU3RhdGUoZGF0YSwgX3VudXNlZCwgdXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEgPSBjb3B5TmV4dEpzSW50ZXJuYWxIaXN0b3J5U3RhdGUoZGF0YSk7XG4gICAgICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlVcmxGcm9tSGlzdG9yeVB1c2hSZXBsYWNlKHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxQdXNoU3RhdGUoZGF0YSwgX3VudXNlZCwgdXJsKTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICogUGF0Y2ggcmVwbGFjZVN0YXRlIHRvIGVuc3VyZSBleHRlcm5hbCBjaGFuZ2VzIHRvIHRoZSBoaXN0b3J5IGFyZSByZWZsZWN0ZWQgaW4gdGhlIE5leHQuanMgUm91dGVyLlxuICAgICAqIEVuc3VyZXMgTmV4dC5qcyBpbnRlcm5hbCBoaXN0b3J5IHN0YXRlIGlzIGNvcGllZCB0byB0aGUgbmV3IGhpc3RvcnkgZW50cnkuXG4gICAgICogRW5zdXJlcyB1c2VQYXRobmFtZSBhbmQgdXNlU2VhcmNoUGFyYW1zIGhvbGQgdGhlIG5ld2x5IHByb3ZpZGVkIHVybC5cbiAgICAgKi8gd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlID0gZnVuY3Rpb24gcmVwbGFjZVN0YXRlKGRhdGEsIF91bnVzZWQsIHVybCkge1xuICAgICAgICAgICAgLy8gQXZvaWQgYSBsb29wIHdoZW4gTmV4dC5qcyBpbnRlcm5hbHMgdHJpZ2dlciBwdXNoU3RhdGUvcmVwbGFjZVN0YXRlXG4gICAgICAgICAgICBpZiAoKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuX19OQSkgfHwgKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuX04pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVwbGFjZVN0YXRlKGRhdGEsIF91bnVzZWQsIHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gY29weU5leHRKc0ludGVybmFsSGlzdG9yeVN0YXRlKGRhdGEpO1xuICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgIGFwcGx5VXJsRnJvbUhpc3RvcnlQdXNoUmVwbGFjZSh1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVwbGFjZVN0YXRlKGRhdGEsIF91bnVzZWQsIHVybCk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAqIEhhbmRsZSBwb3BzdGF0ZSBldmVudCwgdGhpcyBpcyB1c2VkIHRvIGhhbmRsZSBiYWNrL2ZvcndhcmQgaW4gdGhlIGJyb3dzZXIuXG4gICAgICogQnkgZGVmYXVsdCBkaXNwYXRjaGVzIEFDVElPTl9SRVNUT1JFLCBob3dldmVyIGlmIHRoZSBoaXN0b3J5IGVudHJ5IHdhcyBub3QgcHVzaGVkL3JlcGxhY2VkIGJ5IGFwcC1yb3V0ZXIgaXQgd2lsbCByZWxvYWQgdGhlIHBhZ2UuXG4gICAgICogVGhhdCBjYXNlIGNhbiBoYXBwZW4gd2hlbiB0aGUgb2xkIHJvdXRlciBpbmplY3RlZCB0aGUgaGlzdG9yeSBlbnRyeS5cbiAgICAgKi8gY29uc3Qgb25Qb3BTdGF0ZSA9IChwYXJhbSk9PntcbiAgICAgICAgICAgIGxldCB7IHN0YXRlIH0gPSBwYXJhbTtcbiAgICAgICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPLUFQUDogdGhpcyBjYXNlIG9ubHkgaGFwcGVucyB3aGVuIHB1c2hTdGF0ZS9yZXBsYWNlU3RhdGUgd2FzIGNhbGxlZCBvdXRzaWRlIG9mIE5leHQuanMuIEl0IHNob3VsZCBwcm9iYWJseSByZWxvYWQgdGhlIHBhZ2UgaW4gdGhpcyBjYXNlLlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoaXMgY2FzZSBoYXBwZW5zIHdoZW4gdGhlIGhpc3RvcnkgZW50cnkgd2FzIHB1c2hlZCBieSB0aGUgYHBhZ2VzYCByb3V0ZXIuXG4gICAgICAgICAgICBpZiAoIXN0YXRlLl9fTkEpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVE9ETy1BUFA6IElkZWFsbHkgdGhlIGJhY2sgYnV0dG9uIHNob3VsZCBub3QgdXNlIHN0YXJ0VHJhbnNpdGlvbiBhcyBpdCBzaG91bGQgYXBwbHkgdGhlIHVwZGF0ZXMgc3luY2hyb25vdXNseVxuICAgICAgICAgICAgLy8gV2l0aG91dCBzdGFydFRyYW5zaXRpb24gd29ya3MgaWYgdGhlIGNhY2hlIGlzIHRoZXJlIGZvciB0aGlzIHBhdGhcbiAgICAgICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fUkVTVE9SRSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxcbiAgICAgICAgICAgICAgICAgICAgdHJlZTogc3RhdGUuX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIFJlZ2lzdGVyIHBvcHN0YXRlIGV2ZW50IHRvIGNhbGwgb25Qb3BzdGF0ZS5cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBvblBvcFN0YXRlKTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUgPSBvcmlnaW5hbFB1c2hTdGF0ZTtcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSA9IG9yaWdpbmFsUmVwbGFjZVN0YXRlO1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBvblBvcFN0YXRlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIGRpc3BhdGNoXG4gICAgXSk7XG4gICAgY29uc3QgeyBjYWNoZSwgdHJlZSwgbmV4dFVybCwgZm9jdXNBbmRTY3JvbGxSZWYgfSA9ICgwLCBfdXNlcmVkdWNlcndpdGhkZXZ0b29scy51c2VVbndyYXBTdGF0ZSkocmVkdWNlclN0YXRlKTtcbiAgICBjb25zdCBtYXRjaGluZ0hlYWQgPSAoMCwgX3JlYWN0LnVzZU1lbW8pKCgpPT57XG4gICAgICAgIHJldHVybiAoMCwgX2ZpbmRoZWFkaW5jYWNoZS5maW5kSGVhZEluQ2FjaGUpKGNhY2hlLCB0cmVlWzFdKTtcbiAgICB9LCBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICB0cmVlXG4gICAgXSk7XG4gICAgbGV0IGhlYWQ7XG4gICAgaWYgKG1hdGNoaW5nSGVhZCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBUaGUgaGVhZCBpcyB3cmFwcGVkIGluIGFuIGV4dHJhIGNvbXBvbmVudCBzbyB3ZSBjYW4gdXNlXG4gICAgICAgIC8vIGB1c2VEZWZlcnJlZFZhbHVlYCB0byBzd2FwIGJldHdlZW4gdGhlIHByZWZldGNoZWQgYW5kIGZpbmFsIHZlcnNpb25zIG9mXG4gICAgICAgIC8vIHRoZSBoZWFkLiAoVGhpcyBpcyB3aGF0IExheW91dFJvdXRlciBkb2VzIGZvciBzZWdtZW50IGRhdGEsIHRvby4pXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoZSBga2V5YCBpcyB1c2VkIHRvIHJlbW91bnQgdGhlIGNvbXBvbmVudCB3aGVuZXZlciB0aGUgaGVhZCBtb3ZlcyB0b1xuICAgICAgICAvLyBhIGRpZmZlcmVudCBzZWdtZW50LlxuICAgICAgICBjb25zdCBbaGVhZENhY2hlTm9kZSwgaGVhZEtleV0gPSBtYXRjaGluZ0hlYWQ7XG4gICAgICAgIGhlYWQgPSAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKEhlYWQsIHtcbiAgICAgICAgICAgIGhlYWRDYWNoZU5vZGU6IGhlYWRDYWNoZU5vZGVcbiAgICAgICAgfSwgaGVhZEtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZCA9IG51bGw7XG4gICAgfVxuICAgIGxldCBjb250ZW50ID0gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX3JlZGlyZWN0Ym91bmRhcnkuUmVkaXJlY3RCb3VuZGFyeSwge1xuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgaGVhZCxcbiAgICAgICAgICAgIGNhY2hlLnJzYyxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2FwcHJvdXRlcmFubm91bmNlci5BcHBSb3V0ZXJBbm5vdW5jZXIsIHtcbiAgICAgICAgICAgICAgICB0cmVlOiB0cmVlXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY29uc3QgRGV2Um9vdE5vdEZvdW5kQm91bmRhcnkgPSByZXF1aXJlKFwiLi9kZXYtcm9vdC1ub3QtZm91bmQtYm91bmRhcnlcIikuRGV2Um9vdE5vdEZvdW5kQm91bmRhcnk7XG4gICAgICAgICAgICBjb250ZW50ID0gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShEZXZSb290Tm90Rm91bmRCb3VuZGFyeSwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5NaXNzaW5nU2xvdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1pc3NpbmdTbG90cyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGNvbnRlbnRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgSG90UmVsb2FkZXIgPSByZXF1aXJlKFwiLi9yZWFjdC1kZXYtb3ZlcmxheS9ob3QtcmVsb2FkZXItY2xpZW50XCIpLmRlZmF1bHQ7XG4gICAgICAgIGNvbnRlbnQgPSAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKEhvdFJlbG9hZGVyLCB7XG4gICAgICAgICAgICBhc3NldFByZWZpeDogYXNzZXRQcmVmaXgsXG4gICAgICAgICAgICBjaGlsZHJlbjogY29udGVudFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKEhpc3RvcnlVcGRhdGVyLCB7XG4gICAgICAgICAgICAgICAgYXBwUm91dGVyU3RhdGU6ICgwLCBfdXNlcmVkdWNlcndpdGhkZXZ0b29scy51c2VVbndyYXBTdGF0ZSkocmVkdWNlclN0YXRlKSxcbiAgICAgICAgICAgICAgICBzeW5jOiBzeW5jXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUuUGF0aG5hbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHBhdGhuYW1lLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9ob29rc2NsaWVudGNvbnRleHRzaGFyZWRydW50aW1lLlNlYXJjaFBhcmFtc0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lLkdsb2JhbExheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VCeVNlcnZlclJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFVybFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5BcHBSb3V0ZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFwcFJvdXRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuTGF5b3V0Um91dGVyQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlczogY2FjaGUucGFyYWxsZWxSb3V0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUm9vdCBub2RlIGFsd2F5cyBoYXMgYHVybGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3ZpZGVkIGluIEFwcFRyZWVDb250ZXh0IHRvIGVuc3VyZSBpdCBjYW4gYmUgb3ZlcndyaXR0ZW4gaW4gbGF5b3V0LXJvdXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBjYW5vbmljYWxVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xufVxuZnVuY3Rpb24gQXBwUm91dGVyKHByb3BzKSB7XG4gICAgY29uc3QgeyBnbG9iYWxFcnJvckNvbXBvbmVudCwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2Vycm9yYm91bmRhcnkuRXJyb3JCb3VuZGFyeSwge1xuICAgICAgICBlcnJvckNvbXBvbmVudDogZ2xvYmFsRXJyb3JDb21wb25lbnQsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFJvdXRlciwge1xuICAgICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KVxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtcm91dGVyLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/client/components/app-router.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/client/components/error-boundary.js": +/*!********************************************************************!*\ + !*** ./node_modules/next/dist/client/components/error-boundary.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nconst { createProxy } = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ \"(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js\");\nmodule.exports = createProxy(\"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\node_modules\\\\next\\\\dist\\\\client\\\\components\\\\error-boundary.js\");\n //# sourceMappingURL=error-boundary.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5LmpzIiwibWFwcGluZ3MiOiI7OztDQTJMQSwwQ0FBMEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9lcnJvci1ib3VuZGFyeS5qcz83Njk3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEVycm9yQm91bmRhcnlIYW5kbGVyOiBudWxsLFxuICAgIEdsb2JhbEVycm9yOiBudWxsLFxuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgRXJyb3JCb3VuZGFyeTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBFcnJvckJvdW5kYXJ5SGFuZGxlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBFcnJvckJvdW5kYXJ5SGFuZGxlcjtcbiAgICB9LFxuICAgIEdsb2JhbEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEdsb2JhbEVycm9yO1xuICAgIH0sXG4gICAgLy8gRXhwb3J0ZWQgc28gdGhhdCB0aGUgaW1wb3J0IHNpZ25hdHVyZSBpbiB0aGUgbG9hZGVycyBjYW4gYmUgaWRlbnRpY2FsIHRvIHVzZXJcbiAgICAvLyBzdXBwbGllZCBjdXN0b20gZ2xvYmFsIGVycm9yIHNpZ25hdHVyZXMuXG4gICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfZGVmYXVsdDtcbiAgICB9LFxuICAgIEVycm9yQm91bmRhcnk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRXJyb3JCb3VuZGFyeTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9uYXZpZ2F0aW9uID0gcmVxdWlyZShcIi4vbmF2aWdhdGlvblwiKTtcbmNvbnN0IF9pc25leHRyb3V0ZXJlcnJvciA9IHJlcXVpcmUoXCIuL2lzLW5leHQtcm91dGVyLWVycm9yXCIpO1xuY29uc3Qgc3R5bGVzID0ge1xuICAgIGVycm9yOiB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvbW9kZXJuLW5vcm1hbGl6ZS9ibG9iL21haW4vbW9kZXJuLW5vcm1hbGl6ZS5jc3MjTDM4LUw1MlxuICAgICAgICBmb250RmFtaWx5OiAnc3lzdGVtLXVpLFwiU2Vnb2UgVUlcIixSb2JvdG8sSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWYsXCJBcHBsZSBDb2xvciBFbW9qaVwiLFwiU2Vnb2UgVUkgRW1vamlcIicsXG4gICAgICAgIGhlaWdodDogXCIxMDB2aFwiLFxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIlxuICAgIH0sXG4gICAgdGV4dDoge1xuICAgICAgICBmb250U2l6ZTogXCIxNHB4XCIsXG4gICAgICAgIGZvbnRXZWlnaHQ6IDQwMCxcbiAgICAgICAgbGluZUhlaWdodDogXCIyOHB4XCIsXG4gICAgICAgIG1hcmdpbjogXCIwIDhweFwiXG4gICAgfVxufTtcbi8vIGlmIHdlIGFyZSByZXZhbGlkYXRpbmcgd2Ugd2FudCB0byByZS10aHJvdyB0aGUgZXJyb3Igc28gdGhlXG4vLyBmdW5jdGlvbiBjcmFzaGVzIHNvIHdlIGNhbiBtYWludGFpbiBvdXIgcHJldmlvdXMgY2FjaGVcbi8vIGluc3RlYWQgb2YgY2FjaGluZyB0aGUgZXJyb3IgcGFnZVxuZnVuY3Rpb24gSGFuZGxlSVNSRXJyb3IocGFyYW0pIHtcbiAgICBsZXQgeyBlcnJvciB9ID0gcGFyYW07XG4gICAgaWYgKHR5cGVvZiBmZXRjaC5fX25leHRHZXRTdGF0aWNTdG9yZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciBfZmV0Y2hfX19uZXh0R2V0U3RhdGljU3RvcmU7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gKF9mZXRjaF9fX25leHRHZXRTdGF0aWNTdG9yZSA9IGZldGNoLl9fbmV4dEdldFN0YXRpY1N0b3JlKCkpID09IG51bGwgPyB2b2lkIDAgOiBfZmV0Y2hfX19uZXh0R2V0U3RhdGljU3RvcmUuZ2V0U3RvcmUoKTtcbiAgICAgICAgaWYgKChzdG9yZSA9PSBudWxsID8gdm9pZCAwIDogc3RvcmUuaXNSZXZhbGlkYXRlKSB8fCAoc3RvcmUgPT0gbnVsbCA/IHZvaWQgMCA6IHN0b3JlLmlzU3RhdGljR2VuZXJhdGlvbikpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5jbGFzcyBFcnJvckJvdW5kYXJ5SGFuZGxlciBleHRlbmRzIF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudCB7XG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcikge1xuICAgICAgICBpZiAoKDAsIF9pc25leHRyb3V0ZXJlcnJvci5pc05leHRSb3V0ZXJFcnJvcikoZXJyb3IpKSB7XG4gICAgICAgICAgICAvLyBSZS10aHJvdyBpZiBhbiBleHBlY3RlZCBpbnRlcm5hbCBOZXh0LmpzIHJvdXRlciBlcnJvciBvY2N1cnNcbiAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgaXQgc2hvdWxkIGJlIGhhbmRsZWQgYnkgYSBkaWZmZXJlbnQgYm91bmRhcnkgKHN1Y2ggYXMgYSBOb3RGb3VuZCBib3VuZGFyeSBpbiBhIHBhcmVudCBzZWdtZW50KVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICAgIC8qKlxuICAgICAqIEhhbmRsZXMgcmVzZXQgb2YgdGhlIGVycm9yIGJvdW5kYXJ5IHdoZW4gYSBuYXZpZ2F0aW9uIGhhcHBlbnMuXG4gICAgICogRW5zdXJlcyB0aGUgZXJyb3IgYm91bmRhcnkgZG9lcyBub3Qgc3RheSBlbmFibGVkIHdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlLlxuICAgICAqIEFwcHJvYWNoIG9mIHNldFN0YXRlIGluIHJlbmRlciBpcyBzYWZlIGFzIGl0IGNoZWNrcyB0aGUgcHJldmlvdXMgcGF0aG5hbWUgYW5kIHRoZW4gb3ZlcnJpZGVzXG4gICAgICogaXQgYXMgb3V0bGluZWQgaW4gaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVN0YXRlI3N0b3JpbmctaW5mb3JtYXRpb24tZnJvbS1wcmV2aW91cy1yZW5kZXJzXG4gICAgICovIGlmIChwcm9wcy5wYXRobmFtZSAhPT0gc3RhdGUucHJldmlvdXNQYXRobmFtZSAmJiBzdGF0ZS5lcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1BhdGhuYW1lOiBwcm9wcy5wYXRobmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3I6IHN0YXRlLmVycm9yLFxuICAgICAgICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShIYW5kbGVJU1JFcnJvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHRoaXMuc3RhdGUuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuZXJyb3JTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuZXJyb3JTY3JpcHRzLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKHRoaXMucHJvcHMuZXJyb3JDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB0aGlzLnN0YXRlLmVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQ6IHRoaXMucmVzZXRcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMucmVzZXQgPSAoKT0+e1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICBwcmV2aW91c1BhdGhuYW1lOiB0aGlzLnByb3BzLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgfVxufVxuZnVuY3Rpb24gR2xvYmFsRXJyb3IocGFyYW0pIHtcbiAgICBsZXQgeyBlcnJvciB9ID0gcGFyYW07XG4gICAgY29uc3QgZGlnZXN0ID0gZXJyb3IgPT0gbnVsbCA/IHZvaWQgMCA6IGVycm9yLmRpZ2VzdDtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJodG1sXCIsIHtcbiAgICAgICAgaWQ6IFwiX19uZXh0X2Vycm9yX19cIixcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoZWFkXCIsIHt9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiYm9keVwiLCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShIYW5kbGVJU1JFcnJvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBzdHlsZXMuZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoMlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogc3R5bGVzLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJBcHBsaWNhdGlvbiBlcnJvcjogYSBcIiArIChkaWdlc3QgPyBcInNlcnZlclwiIDogXCJjbGllbnRcIikgKyBcIi1zaWRlIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQgKHNlZSB0aGUgXCIgKyAoZGlnZXN0ID8gXCJzZXJ2ZXIgbG9nc1wiIDogXCJicm93c2VyIGNvbnNvbGVcIikgKyBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdCA/IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBzdHlsZXMudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIkRpZ2VzdDogXCIgKyBkaWdlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59XG5jb25zdCBfZGVmYXVsdCA9IEdsb2JhbEVycm9yO1xuZnVuY3Rpb24gRXJyb3JCb3VuZGFyeShwYXJhbSkge1xuICAgIGxldCB7IGVycm9yQ29tcG9uZW50LCBlcnJvclN0eWxlcywgZXJyb3JTY3JpcHRzLCBjaGlsZHJlbiB9ID0gcGFyYW07XG4gICAgY29uc3QgcGF0aG5hbWUgPSAoMCwgX25hdmlnYXRpb24udXNlUGF0aG5hbWUpKCk7XG4gICAgaWYgKGVycm9yQ29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKEVycm9yQm91bmRhcnlIYW5kbGVyLCB7XG4gICAgICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgICAgICAgICBlcnJvckNvbXBvbmVudDogZXJyb3JDb21wb25lbnQsXG4gICAgICAgICAgICBlcnJvclN0eWxlczogZXJyb3JTdHlsZXMsXG4gICAgICAgICAgICBlcnJvclNjcmlwdHM6IGVycm9yU2NyaXB0cyxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLWJvdW5kYXJ5LmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/client/components/error-boundary.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/client/components/hooks-server-context.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/hooks-server-context.js ***! + \**************************************************************************/ +/***/ ((module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DynamicServerError: function() {\n return DynamicServerError;\n },\n isDynamicServerError: function() {\n return isDynamicServerError;\n }\n});\nconst DYNAMIC_ERROR_CODE = \"DYNAMIC_SERVER_USAGE\";\nclass DynamicServerError extends Error {\n constructor(description){\n super(\"Dynamic server usage: \" + description);\n this.description = description;\n this.digest = DYNAMIC_ERROR_CODE;\n }\n}\nfunction isDynamicServerError(err) {\n if (typeof err !== \"object\" || err === null || !(\"digest\" in err) || typeof err.digest !== \"string\") {\n return false;\n }\n return err.digest === DYNAMIC_ERROR_CODE;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hooks-server-context.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2hvb2tzLXNlcnZlci1jb250ZXh0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxvQkFBb0I7UUFDaEIsT0FBT0E7SUFDWDtJQUNBQyxzQkFBc0I7UUFDbEIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8scUJBQXFCO0FBQzNCLE1BQU1SLDJCQUEyQlM7SUFDN0JDLFlBQVlDLFdBQVcsQ0FBQztRQUNwQixLQUFLLENBQUMsMkJBQTJCQTtRQUNqQyxJQUFJLENBQUNBLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxNQUFNLEdBQUdKO0lBQ2xCO0FBQ0o7QUFDQSxTQUFTUCxxQkFBcUJZLEdBQUc7SUFDN0IsSUFBSSxPQUFPQSxRQUFRLFlBQVlBLFFBQVEsUUFBUSxDQUFFLGFBQVlBLEdBQUUsS0FBTSxPQUFPQSxJQUFJRCxNQUFNLEtBQUssVUFBVTtRQUNqRyxPQUFPO0lBQ1g7SUFDQSxPQUFPQyxJQUFJRCxNQUFNLEtBQUtKO0FBQzFCO0FBRUEsSUFBSSxDQUFDLE9BQU9YLFFBQVFpQixPQUFPLEtBQUssY0FBZSxPQUFPakIsUUFBUWlCLE9BQU8sS0FBSyxZQUFZakIsUUFBUWlCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2pCLFFBQVFpQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLcEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRaUIsT0FBTyxFQUFFLGNBQWM7UUFBRWhCLE9BQU87SUFBSztJQUNuRUgsT0FBT3FCLE1BQU0sQ0FBQ25CLFFBQVFpQixPQUFPLEVBQUVqQjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRaUIsT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2hvb2tzLXNlcnZlci1jb250ZXh0LmpzPzAwOWEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBEeW5hbWljU2VydmVyRXJyb3I6IG51bGwsXG4gICAgaXNEeW5hbWljU2VydmVyRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgRHluYW1pY1NlcnZlckVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIER5bmFtaWNTZXJ2ZXJFcnJvcjtcbiAgICB9LFxuICAgIGlzRHluYW1pY1NlcnZlckVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzRHluYW1pY1NlcnZlckVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgRFlOQU1JQ19FUlJPUl9DT0RFID0gXCJEWU5BTUlDX1NFUlZFUl9VU0FHRVwiO1xuY2xhc3MgRHluYW1pY1NlcnZlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKGRlc2NyaXB0aW9uKXtcbiAgICAgICAgc3VwZXIoXCJEeW5hbWljIHNlcnZlciB1c2FnZTogXCIgKyBkZXNjcmlwdGlvbik7XG4gICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5kaWdlc3QgPSBEWU5BTUlDX0VSUk9SX0NPREU7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNEeW5hbWljU2VydmVyRXJyb3IoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBlcnIgIT09IFwib2JqZWN0XCIgfHwgZXJyID09PSBudWxsIHx8ICEoXCJkaWdlc3RcIiBpbiBlcnIpIHx8IHR5cGVvZiBlcnIuZGlnZXN0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGVyci5kaWdlc3QgPT09IERZTkFNSUNfRVJST1JfQ09ERTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3Mtc2VydmVyLWNvbnRleHQuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiRHluYW1pY1NlcnZlckVycm9yIiwiaXNEeW5hbWljU2VydmVyRXJyb3IiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJEWU5BTUlDX0VSUk9SX0NPREUiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwiZGVzY3JpcHRpb24iLCJkaWdlc3QiLCJlcnIiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/client/components/hooks-server-context.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/client/components/layout-router.js": +/*!*******************************************************************!*\ + !*** ./node_modules/next/dist/client/components/layout-router.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nconst { createProxy } = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ \"(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js\");\nmodule.exports = createProxy(\"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\node_modules\\\\next\\\\dist\\\\client\\\\components\\\\layout-router.js\");\n //# sourceMappingURL=layout-router.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2xheW91dC1yb3V0ZXIuanMiLCJtYXBwaW5ncyI6Ijs7O0NBaWNBLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2xheW91dC1yb3V0ZXIuanM/MGJmYSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgLyoqXG4gKiBPdXRlckxheW91dFJvdXRlciBoYW5kbGVzIHRoZSBjdXJyZW50IHNlZ21lbnQgYXMgd2VsbCBhcyA8T2Zmc2NyZWVuPiByZW5kZXJpbmcgb2Ygb3RoZXIgc2VnbWVudHMuXG4gKiBJdCBjYW4gYmUgcmVuZGVyZWQgbmV4dCB0byBlYWNoIG90aGVyIHdpdGggYSBkaWZmZXJlbnQgYHBhcmFsbGVsUm91dGVyS2V5YCwgYWxsb3dpbmcgZm9yIFBhcmFsbGVsIHJvdXRlcy5cbiAqLyBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE91dGVyTGF5b3V0Um91dGVyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9yZWFjdGRvbSA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0LWRvbVwiKSk7XG5jb25zdCBfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5jb25zdCBfZmV0Y2hzZXJ2ZXJyZXNwb25zZSA9IHJlcXVpcmUoXCIuL3JvdXRlci1yZWR1Y2VyL2ZldGNoLXNlcnZlci1yZXNwb25zZVwiKTtcbmNvbnN0IF9pbmZpbml0ZXByb21pc2UgPSByZXF1aXJlKFwiLi9pbmZpbml0ZS1wcm9taXNlXCIpO1xuY29uc3QgX2Vycm9yYm91bmRhcnkgPSByZXF1aXJlKFwiLi9lcnJvci1ib3VuZGFyeVwiKTtcbmNvbnN0IF9tYXRjaHNlZ21lbnRzID0gcmVxdWlyZShcIi4vbWF0Y2gtc2VnbWVudHNcIik7XG5jb25zdCBfaGFuZGxlc21vb3Roc2Nyb2xsID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2hhbmRsZS1zbW9vdGgtc2Nyb2xsXCIpO1xuY29uc3QgX3JlZGlyZWN0Ym91bmRhcnkgPSByZXF1aXJlKFwiLi9yZWRpcmVjdC1ib3VuZGFyeVwiKTtcbmNvbnN0IF9ub3Rmb3VuZGJvdW5kYXJ5ID0gcmVxdWlyZShcIi4vbm90LWZvdW5kLWJvdW5kYXJ5XCIpO1xuY29uc3QgX2dldHNlZ21lbnR2YWx1ZSA9IHJlcXVpcmUoXCIuL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2dldC1zZWdtZW50LXZhbHVlXCIpO1xuY29uc3QgX2NyZWF0ZXJvdXRlcmNhY2hla2V5ID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXIvY3JlYXRlLXJvdXRlci1jYWNoZS1rZXlcIik7XG4vKipcbiAqIEFkZCByZWZldGNoIG1hcmtlciB0byByb3V0ZXIgc3RhdGUgYXQgdGhlIHBvaW50IG9mIHRoZSBjdXJyZW50IGxheW91dCBzZWdtZW50LlxuICogVGhpcyBlbnN1cmVzIHRoZSByZXNwb25zZSByZXR1cm5lZCBpcyBub3QgZnVydGhlciBkb3duIHRoYW4gdGhlIGN1cnJlbnQgbGF5b3V0IHNlZ21lbnQuXG4gKi8gZnVuY3Rpb24gd2Fsa0FkZFJlZmV0Y2goc2VnbWVudFBhdGhUb1dhbGssIHRyZWVUb1JlY3JlYXRlKSB7XG4gICAgaWYgKHNlZ21lbnRQYXRoVG9XYWxrKSB7XG4gICAgICAgIGNvbnN0IFtzZWdtZW50LCBwYXJhbGxlbFJvdXRlS2V5XSA9IHNlZ21lbnRQYXRoVG9XYWxrO1xuICAgICAgICBjb25zdCBpc0xhc3QgPSBzZWdtZW50UGF0aFRvV2Fsay5sZW5ndGggPT09IDI7XG4gICAgICAgIGlmICgoMCwgX21hdGNoc2VnbWVudHMubWF0Y2hTZWdtZW50KSh0cmVlVG9SZWNyZWF0ZVswXSwgc2VnbWVudCkpIHtcbiAgICAgICAgICAgIGlmICh0cmVlVG9SZWNyZWF0ZVsxXS5oYXNPd25Qcm9wZXJ0eShwYXJhbGxlbFJvdXRlS2V5KSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0xhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViVHJlZSA9IHdhbGtBZGRSZWZldGNoKHVuZGVmaW5lZCwgdHJlZVRvUmVjcmVhdGVbMV1bcGFyYWxsZWxSb3V0ZUtleV0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZVRvUmVjcmVhdGVbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udHJlZVRvUmVjcmVhdGVbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcmFsbGVsUm91dGVLZXldOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRyZWVbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRyZWVbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRyZWVbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVmZXRjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB0cmVlVG9SZWNyZWF0ZVswXSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udHJlZVRvUmVjcmVhdGVbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGFyYWxsZWxSb3V0ZUtleV06IHdhbGtBZGRSZWZldGNoKHNlZ21lbnRQYXRoVG9XYWxrLnNsaWNlKDIpLCB0cmVlVG9SZWNyZWF0ZVsxXVtwYXJhbGxlbFJvdXRlS2V5XSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRyZWVUb1JlY3JlYXRlO1xufVxuLy8gVE9ETy1BUFA6IFJlcGxhY2Ugd2l0aCBuZXcgUmVhY3QgQVBJIGZvciBmaW5kaW5nIGRvbSBub2RlcyB3aXRob3V0IGEgYHJlZmAgd2hlbiBhdmFpbGFibGVcbi8qKlxuICogV3JhcHMgUmVhY3RET00uZmluZERPTU5vZGUgd2l0aCBhZGRpdGlvbmFsIGxvZ2ljIHRvIGhpZGUgUmVhY3QgU3RyaWN0IE1vZGUgd2FybmluZ1xuICovIGZ1bmN0aW9uIGZpbmRET01Ob2RlKGluc3RhbmNlKSB7XG4gICAgLy8gVHJlZS1zaGFrZSBmb3Igc2VydmVyIGJ1bmRsZVxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gbnVsbDtcbiAgICAvLyBPbmx5IGFwcGx5IHN0cmljdCBtb2RlIHdhcm5pbmcgd2hlbiBub3QgaW4gcHJvZHVjdGlvblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1lc3NhZ2VzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgc3RyaWN0IG1vZGUgd2FybmluZyBmb3IgdGhlIGZpbmREb21Ob2RlIGNhbGwgYmVsb3dcbiAgICAgICAgICAgICAgICBpZiAoIW1lc3NhZ2VzWzBdLmluY2x1ZGVzKFwiV2FybmluZzogJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLlwiKSkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbENvbnNvbGVFcnJvciguLi5tZXNzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBfcmVhY3Rkb20uZGVmYXVsdC5maW5kRE9NTm9kZShpbnN0YW5jZSk7XG4gICAgICAgIH0gZmluYWxseXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IgPSBvcmlnaW5hbENvbnNvbGVFcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX3JlYWN0ZG9tLmRlZmF1bHQuZmluZERPTU5vZGUoaW5zdGFuY2UpO1xufVxuY29uc3QgcmVjdFByb3BlcnRpZXMgPSBbXG4gICAgXCJib3R0b21cIixcbiAgICBcImhlaWdodFwiLFxuICAgIFwibGVmdFwiLFxuICAgIFwicmlnaHRcIixcbiAgICBcInRvcFwiLFxuICAgIFwid2lkdGhcIixcbiAgICBcInhcIixcbiAgICBcInlcIlxuXTtcbi8qKlxuICogQ2hlY2sgaWYgYSBIVE1MRWxlbWVudCBpcyBoaWRkZW4gb3IgZml4ZWQvc3RpY2t5IHBvc2l0aW9uXG4gKi8gZnVuY3Rpb24gc2hvdWxkU2tpcEVsZW1lbnQoZWxlbWVudCkge1xuICAgIC8vIHdlIGlnbm9yZSBmaXhlZCBvciBzdGlja3kgcG9zaXRpb25lZCBlbGVtZW50cyBzaW5jZSB0aGV5J2xsIGxpa2VseSBwYXNzIHRoZSBcImluLXZpZXdwb3J0XCIgY2hlY2tcbiAgICAvLyBhbmQgd2lsbCByZXN1bHQgaW4gYSBzaXR1YXRpb24gd2UgYmFpbCBvbiBzY3JvbGwgYmVjYXVzZSBvZiBzb21ldGhpbmcgbGlrZSBhIGZpeGVkIG5hdixcbiAgICAvLyBldmVuIHRob3VnaCB0aGUgYWN0dWFsIHBhZ2UgY29udGVudCBpcyBvZmZzY3JlZW5cbiAgICBpZiAoW1xuICAgICAgICBcInN0aWNreVwiLFxuICAgICAgICBcImZpeGVkXCJcbiAgICBdLmluY2x1ZGVzKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJTa2lwcGluZyBhdXRvLXNjcm9sbCBiZWhhdmlvciBkdWUgdG8gYHBvc2l0aW9uOiBzdGlja3lgIG9yIGBwb3NpdGlvbjogZml4ZWRgIG9uIGVsZW1lbnQ6XCIsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBVc2VzIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIHRvIGNoZWNrIGlmIHRoZSBlbGVtZW50IGlzIGhpZGRlbiBpbnN0ZWFkIG9mIGBvZmZzZXRQYXJlbnRgXG4gICAgLy8gYmVjYXVzZSBgb2Zmc2V0UGFyZW50YCBkb2Vzbid0IGNvbnNpZGVyIGRvY3VtZW50L2JvZHlcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gcmVjdFByb3BlcnRpZXMuZXZlcnkoKGl0ZW0pPT5yZWN0W2l0ZW1dID09PSAwKTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHRvcCBjb3JuZXIgb2YgdGhlIEhUTUxFbGVtZW50IGlzIGluIHRoZSB2aWV3cG9ydC5cbiAqLyBmdW5jdGlvbiB0b3BPZkVsZW1lbnRJblZpZXdwb3J0KGVsZW1lbnQsIHZpZXdwb3J0SGVpZ2h0KSB7XG4gICAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHJlY3QudG9wID49IDAgJiYgcmVjdC50b3AgPD0gdmlld3BvcnRIZWlnaHQ7XG59XG4vKipcbiAqIEZpbmQgdGhlIERPTSBub2RlIGZvciBhIGhhc2ggZnJhZ21lbnQuXG4gKiBJZiBgdG9wYCB0aGUgcGFnZSBoYXMgdG8gc2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIHBhZ2UuIFRoaXMgbWlycm9ycyB0aGUgYnJvd3NlcidzIGJlaGF2aW9yLlxuICogSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYW4gaWQsIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGF0IGlkLlxuICogSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYSBuYW1lLCB0aGUgcGFnZSBoYXMgdG8gc2Nyb2xsIHRvIHRoZSBmaXJzdCBlbGVtZW50IHdpdGggdGhhdCBuYW1lLlxuICovIGZ1bmN0aW9uIGdldEhhc2hGcmFnbWVudERvbU5vZGUoaGFzaEZyYWdtZW50KSB7XG4gICAgLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYHRvcGAgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlLlxuICAgIGlmIChoYXNoRnJhZ21lbnQgPT09IFwidG9wXCIpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG4gICAgfVxuICAgIHZhciBfZG9jdW1lbnRfZ2V0RWxlbWVudEJ5SWQ7XG4gICAgLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYW4gaWQsIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGF0IGlkLlxuICAgIHJldHVybiAoX2RvY3VtZW50X2dldEVsZW1lbnRCeUlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaEZyYWdtZW50KSkgIT0gbnVsbCA/IF9kb2N1bWVudF9nZXRFbGVtZW50QnlJZCA6IC8vIElmIHRoZSBoYXNoIGZyYWdtZW50IGlzIGEgbmFtZSwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZmlyc3QgZWxlbWVudCB3aXRoIHRoYXQgbmFtZS5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShoYXNoRnJhZ21lbnQpWzBdO1xufVxuY2xhc3MgSW5uZXJTY3JvbGxBbmRGb2N1c0hhbmRsZXIgZXh0ZW5kcyBfcmVhY3QuZGVmYXVsdC5Db21wb25lbnQge1xuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB0aGlzLmhhbmRsZVBvdGVudGlhbFNjcm9sbCgpO1xuICAgIH1cbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIC8vIEJlY2F1c2UgdGhpcyBwcm9wZXJ0eSBpcyBvdmVyd3JpdHRlbiBpbiBoYW5kbGVQb3RlbnRpYWxTY3JvbGwgaXQncyBmaW5lIHRvIGFsd2F5cyBydW4gaXQgd2hlbiB0cnVlIGFzIGl0J2xsIGJlIHNldCB0byBmYWxzZSBmb3Igc3Vic2VxdWVudCByZW5kZXJzLlxuICAgICAgICBpZiAodGhpcy5wcm9wcy5mb2N1c0FuZFNjcm9sbFJlZi5hcHBseSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb3RlbnRpYWxTY3JvbGwoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMuaGFuZGxlUG90ZW50aWFsU2Nyb2xsID0gKCk9PntcbiAgICAgICAgICAgIC8vIEhhbmRsZSBzY3JvbGwgYW5kIGZvY3VzLCBpdCdzIG9ubHkgYXBwbGllZCBvbmNlIGluIHRoZSBmaXJzdCB1c2VFZmZlY3QgdGhhdCB0cmlnZ2VycyB0aGF0IGNoYW5nZWQuXG4gICAgICAgICAgICBjb25zdCB7IGZvY3VzQW5kU2Nyb2xsUmVmLCBzZWdtZW50UGF0aCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgICAgIGlmIChmb2N1c0FuZFNjcm9sbFJlZi5hcHBseSkge1xuICAgICAgICAgICAgICAgIC8vIHNlZ21lbnRQYXRocyBpcyBhbiBhcnJheSBvZiBzZWdtZW50IHBhdGhzIHRoYXQgc2hvdWxkIGJlIHNjcm9sbGVkIHRvXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgc2VnbWVudCBwYXRoIGlzIG5vdCBpbiB0aGUgYXJyYXksIHRoZSBzY3JvbGwgaXMgbm90IGFwcGxpZWRcbiAgICAgICAgICAgICAgICAvLyB1bmxlc3MgdGhlIGFycmF5IGlzIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZSBzY3JvbGwgaXMgYWx3YXlzIGFwcGxpZWRcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzLmxlbmd0aCAhPT0gMCAmJiAhZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzLnNvbWUoKHNjcm9sbFJlZlNlZ21lbnRQYXRoKT0+c2VnbWVudFBhdGguZXZlcnkoKHNlZ21lbnQsIGluZGV4KT0+KDAsIF9tYXRjaHNlZ21lbnRzLm1hdGNoU2VnbWVudCkoc2VnbWVudCwgc2Nyb2xsUmVmU2VnbWVudFBhdGhbaW5kZXhdKSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGRvbU5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hGcmFnbWVudCA9IGZvY3VzQW5kU2Nyb2xsUmVmLmhhc2hGcmFnbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoaGFzaEZyYWdtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBnZXRIYXNoRnJhZ21lbnREb21Ob2RlKGhhc2hGcmFnbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGBmaW5kRE9NTm9kZWAgaXMgdHJpY2t5IGJlY2F1c2UgaXQgcmV0dXJucyBqdXN0IHRoZSBmaXJzdCBjaGlsZCBpZiB0aGUgY29tcG9uZW50IGlzIGEgZnJhZ21lbnQuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBhbHJlYWR5IGNhdXNlZCBhIGJ1ZyB3aGVyZSB0aGUgZmlyc3QgY2hpbGQgd2FzIGEgPGxpbmsvPiBpbiBoZWFkLlxuICAgICAgICAgICAgICAgIGlmICghZG9tTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlID0gZmluZERPTU5vZGUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIERPTSBub2RlIHRoaXMgbGF5b3V0LXJvdXRlciBsZXZlbCBpcyBza2lwcGVkLiBJdCdsbCBiZSBoYW5kbGVkIGhpZ2hlci11cCBpbiB0aGUgdHJlZS5cbiAgICAgICAgICAgICAgICBpZiAoIShkb21Ob2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBWZXJpZnkgaWYgdGhlIGVsZW1lbnQgaXMgYSBIVE1MRWxlbWVudCBhbmQgaWYgd2Ugd2FudCB0byBjb25zaWRlciBpdCBmb3Igc2Nyb2xsIGJlaGF2aW9yLlxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIHNraXBwZWQsIHRyeSB0byBzZWxlY3QgdGhlIG5leHQgc2libGluZyBhbmQgdHJ5IGFnYWluLlxuICAgICAgICAgICAgICAgIHdoaWxlKCEoZG9tTm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB8fCBzaG91bGRTa2lwRWxlbWVudChkb21Ob2RlKSl7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vIHNpYmxpbmdzIGZvdW5kIHRoYXQgbWF0Y2ggdGhlIGNyaXRlcmlhIGFyZSBmb3VuZCwgc28gaGFuZGxlIHNjcm9sbCBoaWdoZXIgdXAgaW4gdGhlIHRyZWUgaW5zdGVhZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbU5vZGUubmV4dEVsZW1lbnRTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRvbU5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTdGF0ZSBpcyBtdXRhdGVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmb2N1cyBhbmQgc2Nyb2xsIGlzIGFwcGxpZWQgb25seSBvbmNlLlxuICAgICAgICAgICAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLmFwcGx5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWYuaGFzaEZyYWdtZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb2N1c0FuZFNjcm9sbFJlZi5zZWdtZW50UGF0aHMgPSBbXTtcbiAgICAgICAgICAgICAgICAoMCwgX2hhbmRsZXNtb290aHNjcm9sbC5oYW5kbGVTbW9vdGhTY3JvbGwpKCgpPT57XG4gICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgaGFzaCBzY3JvbGwsIHdlIG9ubHkgbmVlZCB0byBzY3JvbGwgdGhlIGVsZW1lbnQgaW50byB2aWV3XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNoRnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbU5vZGUuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCB2aWV3cG9ydCBoZWlnaHQgYmVjYXVzZSByZWFkaW5nIGBjbGllbnRIZWlnaHRgIGNhdXNlcyBhIHJlZmxvdyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGl0IHdvbid0IGNoYW5nZSBkdXJpbmcgdGhpcyBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaHRtbEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gaHRtbEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCdzIHRvcCBlZGdlIGlzIGFscmVhZHkgaW4gdGhlIHZpZXdwb3J0LCBleGl0IGVhcmx5LlxuICAgICAgICAgICAgICAgICAgICBpZiAodG9wT2ZFbGVtZW50SW5WaWV3cG9ydChkb21Ob2RlLCB2aWV3cG9ydEhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHRyeSBzY3JvbGxpbmcgZ28gdGhlIHRvcCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHBhZ2VzXG4gICAgICAgICAgICAgICAgICAgIC8vIHNjcm9sbEludG9WaWV3KCkgY2FsbGVkIG9uIGA8aHRtbC8+YCBlbGVtZW50IHNjcm9sbHMgaG9yaXpvbnRhbGx5IG9uIGNocm9tZSBhbmQgZmlyZWZveCAodGhhdCBzaG91bGRuJ3QgaGFwcGVuKVxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCB1c2UgaXQgdG8gc2Nyb2xsIGhvcml6b250YWxseSBmb2xsb3dpbmcgUlRMIGJ1dCB0aGF0IGFsc28gc2VlbXMgdG8gYmUgYnJva2VuIC0gaXQgd2lsbCBhbHdheXMgc2Nyb2xsIGxlZnRcbiAgICAgICAgICAgICAgICAgICAgLy8gc2Nyb2xsTGVmdCA9IDAgYWxzbyBzZWVtcyB0byBpZ25vcmUgUlRMIGFuZCBtYW51YWxseSBjaGVja2luZyBmb3IgUlRMIGlzIHRvbyBtdWNoIGhhc3NsZSBzbyB3ZSB3aWxsIHNjcm9sbCBqdXN0IHZlcnRpY2FsbHlcbiAgICAgICAgICAgICAgICAgICAgaHRtbEVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2Nyb2xsIHRvIGRvbU5vZGUgaWYgZG9tTm9kZSBpcyBub3QgaW4gdmlld3BvcnQgd2hlbiBzY3JvbGxlZCB0byB0b3Agb2YgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b3BPZkVsZW1lbnRJblZpZXdwb3J0KGRvbU5vZGUsIHZpZXdwb3J0SGVpZ2h0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9tTm9kZS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIGZvcmNlIGxheW91dCBieSBxdWVyeWluZyBkb21Ob2RlIHBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgIGRvbnRGb3JjZUxheW91dDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb25seUhhc2hDaGFuZ2U6IGZvY3VzQW5kU2Nyb2xsUmVmLm9ubHlIYXNoQ2hhbmdlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gTXV0YXRlIGFmdGVyIHNjcm9sbGluZyBzbyB0aGF0IGl0IGNhbiBiZSByZWFkIGJ5IGBoYW5kbGVTbW9vdGhTY3JvbGxgXG4gICAgICAgICAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWYub25seUhhc2hDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBTZXQgZm9jdXMgb24gdGhlIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBkb21Ob2RlLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuZnVuY3Rpb24gU2Nyb2xsQW5kRm9jdXNIYW5kbGVyKHBhcmFtKSB7XG4gICAgbGV0IHsgc2VnbWVudFBhdGgsIGNoaWxkcmVuIH0gPSBwYXJhbTtcbiAgICBjb25zdCBjb250ZXh0ID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFyaWFudCBnbG9iYWwgbGF5b3V0IHJvdXRlciBub3QgbW91bnRlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoSW5uZXJTY3JvbGxBbmRGb2N1c0hhbmRsZXIsIHtcbiAgICAgICAgc2VnbWVudFBhdGg6IHNlZ21lbnRQYXRoLFxuICAgICAgICBmb2N1c0FuZFNjcm9sbFJlZjogY29udGV4dC5mb2N1c0FuZFNjcm9sbFJlZixcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG59XG4vKipcbiAqIElubmVyTGF5b3V0Um91dGVyIGhhbmRsZXMgcmVuZGVyaW5nIHRoZSBwcm92aWRlZCBzZWdtZW50IGJhc2VkIG9uIHRoZSBjYWNoZS5cbiAqLyBmdW5jdGlvbiBJbm5lckxheW91dFJvdXRlcihwYXJhbSkge1xuICAgIGxldCB7IHBhcmFsbGVsUm91dGVyS2V5LCB1cmwsIGNoaWxkTm9kZXMsIHNlZ21lbnRQYXRoLCB0cmVlLCAvLyBUT0RPLUFQUDogaW1wbGVtZW50IGA8T2Zmc2NyZWVuPmAgd2hlbiBhdmFpbGFibGUuXG4gICAgLy8gaXNBY3RpdmUsXG4gICAgY2FjaGVLZXkgfSA9IHBhcmFtO1xuICAgIGNvbnN0IGNvbnRleHQgPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5HbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0KTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YXJpYW50IGdsb2JhbCBsYXlvdXQgcm91dGVyIG5vdCBtb3VudGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCB7IGJ1aWxkSWQsIGNoYW5nZUJ5U2VydmVyUmVzcG9uc2UsIHRyZWU6IGZ1bGxUcmVlIH0gPSBjb250ZXh0O1xuICAgIC8vIFJlYWQgc2VnbWVudCBwYXRoIGZyb20gdGhlIHBhcmFsbGVsIHJvdXRlciBjYWNoZSBub2RlLlxuICAgIGxldCBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzLmdldChjYWNoZUtleSk7XG4gICAgLy8gV2hlbiBkYXRhIGlzIG5vdCBhdmFpbGFibGUgZHVyaW5nIHJlbmRlcmluZyBjbGllbnQtc2lkZSB3ZSBuZWVkIHRvIGZldGNoXG4gICAgLy8gaXQgZnJvbSB0aGUgc2VydmVyLlxuICAgIGlmIChjaGlsZE5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBuZXdMYXp5Q2FjaGVOb2RlID0ge1xuICAgICAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgICAgICByc2M6IG51bGwsXG4gICAgICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgICAgIGhlYWQ6IG51bGwsXG4gICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpLFxuICAgICAgICAgICAgbGF6eURhdGFSZXNvbHZlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICogRmxpZ2h0IGRhdGEgZmV0Y2gga2lja2VkIG9mZiBkdXJpbmcgcmVuZGVyIGFuZCBwdXQgaW50byB0aGUgY2FjaGUuXG4gICAgICovIGNoaWxkTm9kZSA9IG5ld0xhenlDYWNoZU5vZGU7XG4gICAgICAgIGNoaWxkTm9kZXMuc2V0KGNhY2hlS2V5LCBuZXdMYXp5Q2FjaGVOb2RlKTtcbiAgICB9XG4gICAgLy8gYHJzY2AgcmVwcmVzZW50cyB0aGUgcmVuZGVyYWJsZSBub2RlIGZvciB0aGlzIHNlZ21lbnQuXG4gICAgLy8gSWYgdGhpcyBzZWdtZW50IGhhcyBhIGBwcmVmZXRjaFJzY2AsIGl0J3MgdGhlIHN0YXRpY2FsbHkgcHJlZmV0Y2hlZCBkYXRhLlxuICAgIC8vIFdlIHNob3VsZCB1c2UgdGhhdCBvbiBpbml0aWFsIHJlbmRlciBpbnN0ZWFkIG9mIGByc2NgLiBUaGVuIHdlJ2xsIHN3aXRjaFxuICAgIC8vIHRvIGByc2NgIHdoZW4gdGhlIGR5bmFtaWMgcmVzcG9uc2Ugc3RyZWFtcyBpbi5cbiAgICAvL1xuICAgIC8vIElmIG5vIHByZWZldGNoIGRhdGEgaXMgYXZhaWxhYmxlLCB0aGVuIHdlIGdvIHN0cmFpZ2h0IHRvIHJlbmRlcmluZyBgcnNjYC5cbiAgICBjb25zdCByZXNvbHZlZFByZWZldGNoUnNjID0gY2hpbGROb2RlLnByZWZldGNoUnNjICE9PSBudWxsID8gY2hpbGROb2RlLnByZWZldGNoUnNjIDogY2hpbGROb2RlLnJzYztcbiAgICAvLyBXZSB1c2UgYHVzZURlZmVycmVkVmFsdWVgIHRvIGhhbmRsZSBzd2l0Y2hpbmcgYmV0d2VlbiB0aGUgcHJlZmV0Y2hlZCBhbmRcbiAgICAvLyBmaW5hbCB2YWx1ZXMuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgcmV0dXJuZWQgb24gaW5pdGlhbCByZW5kZXIsIHRoZW4gaXRcbiAgICAvLyByZS1yZW5kZXJzIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50LlxuICAgIC8vXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGB1c2VEZWZlcnJlZFZhbHVlYCBpcyBvbmx5XG4gICAgLy8gYXZhaWxhYmxlIGluIHRoZSBleHBlcmltZW50YWwgYnVpbGRzLiBXaGVuIGl0cyBkaXNhYmxlZCwgaXQgd2lsbCBhbHdheXNcbiAgICAvLyByZXR1cm4gYHJzY2AuXG4gICAgY29uc3QgcnNjID0gKDAsIF9yZWFjdC51c2VEZWZlcnJlZFZhbHVlKShjaGlsZE5vZGUucnNjLCByZXNvbHZlZFByZWZldGNoUnNjKTtcbiAgICAvLyBgcnNjYCBpcyBlaXRoZXIgYSBSZWFjdCBub2RlIG9yIGEgcHJvbWlzZSBmb3IgYSBSZWFjdCBub2RlLCBleGNlcHQgd2VcbiAgICAvLyBzcGVjaWFsIGNhc2UgYG51bGxgIHRvIHJlcHJlc2VudCB0aGF0IHRoaXMgc2VnbWVudCdzIGRhdGEgaXMgbWlzc2luZy4gSWZcbiAgICAvLyBpdCdzIGEgcHJvbWlzZSwgd2UgbmVlZCB0byB1bndyYXAgaXQgc28gd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGVcbiAgICAvLyBkYXRhIGlzIG1pc3NpbmcuXG4gICAgY29uc3QgcmVzb2x2ZWRSc2MgPSB0eXBlb2YgcnNjID09PSBcIm9iamVjdFwiICYmIHJzYyAhPT0gbnVsbCAmJiB0eXBlb2YgcnNjLnRoZW4gPT09IFwiZnVuY3Rpb25cIiA/ICgwLCBfcmVhY3QudXNlKShyc2MpIDogcnNjO1xuICAgIGlmICghcmVzb2x2ZWRSc2MpIHtcbiAgICAgICAgLy8gVGhlIGRhdGEgZm9yIHRoaXMgc2VnbWVudCBpcyBub3QgYXZhaWxhYmxlLCBhbmQgdGhlcmUncyBubyBwZW5kaW5nXG4gICAgICAgIC8vIG5hdmlnYXRpb24gdGhhdCB3aWxsIGJlIGFibGUgdG8gZnVsZmlsbCBpdC4gV2UgbmVlZCB0byBmZXRjaCBtb3JlIGZyb21cbiAgICAgICAgLy8gdGhlIHNlcnZlciBhbmQgcGF0Y2ggdGhlIGNhY2hlLlxuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFscmVhZHkgYSBwZW5kaW5nIHJlcXVlc3QuXG4gICAgICAgIGxldCBsYXp5RGF0YSA9IGNoaWxkTm9kZS5sYXp5RGF0YTtcbiAgICAgICAgaWYgKGxhenlEYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAqIFJvdXRlciBzdGF0ZSB3aXRoIHJlZmV0Y2ggbWFya2VyIGFkZGVkXG4gICAgICAgKi8gLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICAgICAgY29uc3QgcmVmZXRjaFRyZWUgPSB3YWxrQWRkUmVmZXRjaChbXG4gICAgICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgICAgICAuLi5zZWdtZW50UGF0aFxuICAgICAgICAgICAgXSwgZnVsbFRyZWUpO1xuICAgICAgICAgICAgY2hpbGROb2RlLmxhenlEYXRhID0gbGF6eURhdGEgPSAoMCwgX2ZldGNoc2VydmVycmVzcG9uc2UuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkobmV3IFVSTCh1cmwsIGxvY2F0aW9uLm9yaWdpbiksIHJlZmV0Y2hUcmVlLCBjb250ZXh0Lm5leHRVcmwsIGJ1aWxkSWQpO1xuICAgICAgICAgICAgY2hpbGROb2RlLmxhenlEYXRhUmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgKiBGbGlnaHQgcmVzcG9uc2UgZGF0YVxuICAgICAqLyAvLyBXaGVuIHRoZSBkYXRhIGhhcyBub3QgcmVzb2x2ZWQgeWV0IGB1c2VgIHdpbGwgc3VzcGVuZCBoZXJlLlxuICAgICAgICBjb25zdCBbZmxpZ2h0RGF0YSwgb3ZlcnJpZGVDYW5vbmljYWxVcmxdID0gKDAsIF9yZWFjdC51c2UpKGxhenlEYXRhKTtcbiAgICAgICAgaWYgKCFjaGlsZE5vZGUubGF6eURhdGFSZXNvbHZlZCkge1xuICAgICAgICAgICAgLy8gc2V0VGltZW91dCBpcyB1c2VkIHRvIHN0YXJ0IGEgbmV3IHRyYW5zaXRpb24gZHVyaW5nIHJlbmRlciwgdGhpcyBpcyBhbiBpbnRlbnRpb25hbCBoYWNrIGFyb3VuZCBSZWFjdC5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZShmdWxsVHJlZSwgZmxpZ2h0RGF0YSwgb3ZlcnJpZGVDYW5vbmljYWxVcmwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHdlIG1hcmsgdGhpcyBhcyByZXNvbHZlZCwgaW4gY2FzZSB0aGlzIGJyYW5jaCBpcyByZXBsYXllZCwgd2UgZG9uJ3Qgd2FudCB0byBjb250aW5vdXNseSByZS1hcHBseVxuICAgICAgICAgICAgLy8gdGhlIHBhdGNoIHRvIHRoZSB0cmVlLlxuICAgICAgICAgICAgY2hpbGROb2RlLmxhenlEYXRhUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN1c3BlbmQgaW5maW5pdGVseSBhcyBgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZWAgd2lsbCBjYXVzZSBhIGRpZmZlcmVudCBwYXJ0IG9mIHRoZSB0cmVlIHRvIGJlIHJlbmRlcmVkLlxuICAgICAgICAoMCwgX3JlYWN0LnVzZSkoKDAsIF9pbmZpbml0ZXByb21pc2UuY3JlYXRlSW5maW5pdGVQcm9taXNlKSgpKTtcbiAgICB9XG4gICAgLy8gSWYgd2UgZ2V0IHRvIHRoaXMgcG9pbnQsIHRoZW4gd2Uga25vdyB3ZSBoYXZlIHNvbWV0aGluZyB3ZSBjYW4gcmVuZGVyLlxuICAgIGNvbnN0IHN1YnRyZWUgPSAvLyBUaGUgbGF5b3V0IHJvdXRlciBjb250ZXh0IG5hcnJvd3MgZG93biB0cmVlIGFuZCBjaGlsZE5vZGVzIGF0IGVhY2ggbGV2ZWwuXG4gICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuTGF5b3V0Um91dGVyQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdHJlZTogdHJlZVsxXVtwYXJhbGxlbFJvdXRlcktleV0sXG4gICAgICAgICAgICBjaGlsZE5vZGVzOiBjaGlsZE5vZGUucGFyYWxsZWxSb3V0ZXMsXG4gICAgICAgICAgICAvLyBUT0RPLUFQUDogb3ZlcnJpZGluZyBvZiB1cmwgZm9yIHBhcmFsbGVsIHJvdXRlc1xuICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW46IHJlc29sdmVkUnNjXG4gICAgfSk7XG4gICAgLy8gRW5zdXJlIHJvb3QgbGF5b3V0IGlzIG5vdCB3cmFwcGVkIGluIGEgZGl2IGFzIHRoZSByb290IGxheW91dCByZW5kZXJzIGA8aHRtbD5gXG4gICAgcmV0dXJuIHN1YnRyZWU7XG59XG4vKipcbiAqIFJlbmRlcnMgc3VzcGVuc2UgYm91bmRhcnkgd2l0aCB0aGUgcHJvdmlkZWQgXCJsb2FkaW5nXCIgcHJvcGVydHkgYXMgdGhlIGZhbGxiYWNrLlxuICogSWYgbm8gbG9hZGluZyBwcm9wZXJ0eSBpcyBwcm92aWRlZCBpdCByZW5kZXJzIHRoZSBjaGlsZHJlbiB3aXRob3V0IGEgc3VzcGVuc2UgYm91bmRhcnkuXG4gKi8gZnVuY3Rpb24gTG9hZGluZ0JvdW5kYXJ5KHBhcmFtKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4sIGxvYWRpbmcsIGxvYWRpbmdTdHlsZXMsIGxvYWRpbmdTY3JpcHRzLCBoYXNMb2FkaW5nIH0gPSBwYXJhbTtcbiAgICBpZiAoaGFzTG9hZGluZykge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfcmVhY3QuU3VzcGVuc2UsIHtcbiAgICAgICAgICAgIGZhbGxiYWNrOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdTY3JpcHRzLFxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xufVxuZnVuY3Rpb24gT3V0ZXJMYXlvdXRSb3V0ZXIocGFyYW0pIHtcbiAgICBsZXQgeyBwYXJhbGxlbFJvdXRlcktleSwgc2VnbWVudFBhdGgsIGVycm9yLCBlcnJvclN0eWxlcywgZXJyb3JTY3JpcHRzLCB0ZW1wbGF0ZVN0eWxlcywgdGVtcGxhdGVTY3JpcHRzLCBsb2FkaW5nLCBsb2FkaW5nU3R5bGVzLCBsb2FkaW5nU2NyaXB0cywgaGFzTG9hZGluZywgdGVtcGxhdGUsIG5vdEZvdW5kLCBub3RGb3VuZFN0eWxlcywgc3R5bGVzIH0gPSBwYXJhbTtcbiAgICBjb25zdCBjb250ZXh0ID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuTGF5b3V0Um91dGVyQ29udGV4dCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFyaWFudCBleHBlY3RlZCBsYXlvdXQgcm91dGVyIHRvIGJlIG1vdW50ZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHsgY2hpbGROb2RlcywgdHJlZSwgdXJsIH0gPSBjb250ZXh0O1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBwYXJhbGxlbFJvdXRlciBjYWNoZSBub2RlXG4gICAgbGV0IGNoaWxkTm9kZXNGb3JQYXJhbGxlbFJvdXRlciA9IGNoaWxkTm9kZXMuZ2V0KHBhcmFsbGVsUm91dGVyS2V5KTtcbiAgICAvLyBJZiB0aGUgcGFyYWxsZWwgcm91dGVyIGNhY2hlIG5vZGUgZG9lcyBub3QgZXhpc3QgeWV0LCBjcmVhdGUgaXQuXG4gICAgLy8gVGhpcyB3cml0ZXMgdG8gdGhlIGNhY2hlIHdoZW4gdGhlcmUgaXMgbm8gaXRlbSBpbiB0aGUgY2FjaGUgeWV0LiBJdCBuZXZlciAqb3ZlcndyaXRlcyogZXhpc3RpbmcgY2FjaGUgaXRlbXMgd2hpY2ggaXMgd2h5IGl0J3Mgc2FmZSBpbiBjb25jdXJyZW50IG1vZGUuXG4gICAgaWYgKCFjaGlsZE5vZGVzRm9yUGFyYWxsZWxSb3V0ZXIpIHtcbiAgICAgICAgY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyID0gbmV3IE1hcCgpO1xuICAgICAgICBjaGlsZE5vZGVzLnNldChwYXJhbGxlbFJvdXRlcktleSwgY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBhY3RpdmUgc2VnbWVudCBpbiB0aGUgdHJlZVxuICAgIC8vIFRoZSByZWFzb24gYXJyYXlzIGFyZSB1c2VkIGluIHRoZSBkYXRhIGZvcm1hdCBpcyB0aGF0IHRoZXNlIGFyZSB0cmFuc2ZlcnJlZCBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGJyb3dzZXIgc28gaXQncyBvcHRpbWl6ZWQgdG8gc2F2ZSBieXRlcy5cbiAgICBjb25zdCB0cmVlU2VnbWVudCA9IHRyZWVbMV1bcGFyYWxsZWxSb3V0ZXJLZXldWzBdO1xuICAgIC8vIElmIHNlZ21lbnQgaXMgYW4gYXJyYXkgaXQncyBhIGR5bmFtaWMgcm91dGUgYW5kIHdlIHdhbnQgdG8gcmVhZCB0aGUgZHluYW1pYyByb3V0ZSB2YWx1ZSBhcyB0aGUgc2VnbWVudCB0byBnZXQgZnJvbSB0aGUgY2FjaGUuXG4gICAgY29uc3QgY3VycmVudENoaWxkU2VnbWVudFZhbHVlID0gKDAsIF9nZXRzZWdtZW50dmFsdWUuZ2V0U2VnbWVudFZhbHVlKSh0cmVlU2VnbWVudCk7XG4gICAgLyoqXG4gICAqIERlY2lkZXMgd2hpY2ggc2VnbWVudHMgdG8ga2VlcCByZW5kZXJpbmcsIGFsbCBzZWdtZW50cyB0aGF0IGFyZSBub3QgYWN0aXZlIHdpbGwgYmUgd3JhcHBlZCBpbiBgPE9mZnNjcmVlbj5gLlxuICAgKi8gLy8gVE9ETy1BUFA6IEFkZCBoYW5kbGluZyBvZiBgPE9mZnNjcmVlbj5gIHdoZW4gaXQncyBhdmFpbGFibGUuXG4gICAgY29uc3QgcHJlc2VydmVkU2VnbWVudHMgPSBbXG4gICAgICAgIHRyZWVTZWdtZW50XG4gICAgXTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIHN0eWxlcyxcbiAgICAgICAgICAgIHByZXNlcnZlZFNlZ21lbnRzLm1hcCgocHJlc2VydmVkU2VnbWVudCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVzZXJ2ZWRTZWdtZW50VmFsdWUgPSAoMCwgX2dldHNlZ21lbnR2YWx1ZS5nZXRTZWdtZW50VmFsdWUpKHByZXNlcnZlZFNlZ21lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gKDAsIF9jcmVhdGVyb3V0ZXJjYWNoZWtleS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkocHJlc2VydmVkU2VnbWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuKC8qXG4gICAgICAgICAgICAtIEVycm9yIGJvdW5kYXJ5XG4gICAgICAgICAgICAgIC0gT25seSByZW5kZXJzIGVycm9yIGJvdW5kYXJ5IGlmIGVycm9yIGNvbXBvbmVudCBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLSBSZW5kZXJlZCBmb3IgZWFjaCBzZWdtZW50IHRvIGVuc3VyZSB0aGV5IGhhdmUgdGhlaXIgb3duIGVycm9yIHN0YXRlLlxuICAgICAgICAgICAgLSBMb2FkaW5nIGJvdW5kYXJ5XG4gICAgICAgICAgICAgIC0gT25seSByZW5kZXJzIHN1c3BlbnNlIGJvdW5kYXJ5IGlmIGxvYWRpbmcgY29tcG9uZW50cyBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLSBSZW5kZXJlZCBmb3IgZWFjaCBzZWdtZW50IHRvIGVuc3VyZSB0aGV5IGhhdmUgdGhlaXIgb3duIGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICAgICAgIC0gUGFzc2VkIHRvIHRoZSByb3V0ZXIgZHVyaW5nIHJlbmRlcmluZyB0byBlbnN1cmUgaXQgY2FuIGJlIGltbWVkaWF0ZWx5IHJlbmRlcmVkIHdoZW4gc3VzcGVuZGluZyBvbiBhIEZsaWdodCBmZXRjaC5cbiAgICAgICAgICAqLyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuVGVtcGxhdGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFNjcm9sbEFuZEZvY3VzSGFuZGxlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudFBhdGg6IHNlZ21lbnRQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2Vycm9yYm91bmRhcnkuRXJyb3JCb3VuZGFyeSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ29tcG9uZW50OiBlcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclN0eWxlczogZXJyb3JTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JTY3JpcHRzOiBlcnJvclNjcmlwdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoTG9hZGluZ0JvdW5kYXJ5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0xvYWRpbmc6IGhhc0xvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdTdHlsZXM6IGxvYWRpbmdTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdTY3JpcHRzOiBsb2FkaW5nU2NyaXB0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX25vdGZvdW5kYm91bmRhcnkuTm90Rm91bmRCb3VuZGFyeSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90Rm91bmQ6IG5vdEZvdW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90Rm91bmRTdHlsZXM6IG5vdEZvdW5kU3R5bGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX3JlZGlyZWN0Ym91bmRhcnkuUmVkaXJlY3RCb3VuZGFyeSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKElubmVyTGF5b3V0Um91dGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsUm91dGVyS2V5OiBwYXJhbGxlbFJvdXRlcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWU6IHRyZWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZXM6IGNoaWxkTm9kZXNGb3JQYXJhbGxlbFJvdXRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudFBhdGg6IHNlZ21lbnRQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUtleTogY2FjaGVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlOiBjdXJyZW50Q2hpbGRTZWdtZW50VmFsdWUgPT09IHByZXNlcnZlZFNlZ21lbnRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3R5bGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTY3JpcHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sICgwLCBfY3JlYXRlcm91dGVyY2FjaGVrZXkuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKHByZXNlcnZlZFNlZ21lbnQsIHRydWUpKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxheW91dC1yb3V0ZXIuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/client/components/layout-router.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/client/components/not-found-boundary.js": +/*!************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/not-found-boundary.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nconst { createProxy } = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ \"(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js\");\nmodule.exports = createProxy(\"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\node_modules\\\\next\\\\dist\\\\client\\\\components\\\\not-found-boundary.js\");\n //# sourceMappingURL=not-found-boundary.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1ib3VuZGFyeS5qcyIsIm1hcHBpbmdzIjoiOzs7Q0EwR0EsOENBQThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWJvdW5kYXJ5LmpzPzMyYzkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTm90Rm91bmRCb3VuZGFyeVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTm90Rm91bmRCb3VuZGFyeTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9uYXZpZ2F0aW9uID0gcmVxdWlyZShcIi4vbmF2aWdhdGlvblwiKTtcbmNvbnN0IF9ub3Rmb3VuZCA9IHJlcXVpcmUoXCIuL25vdC1mb3VuZFwiKTtcbmNvbnN0IF93YXJub25jZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL3V0aWxzL3dhcm4tb25jZVwiKTtcbmNvbnN0IF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmNsYXNzIE5vdEZvdW5kRXJyb3JCb3VuZGFyeSBleHRlbmRzIF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudCB7XG4gICAgY29tcG9uZW50RGlkQ2F0Y2goKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiICYmIC8vIEEgbWlzc2luZyBjaGlsZHJlbiBzbG90IGlzIHRoZSB0eXBpY2FsIG5vdC1mb3VuZCBjYXNlLCBzbyBubyBuZWVkIHRvIHdhcm5cbiAgICAgICAgIXRoaXMucHJvcHMubWlzc2luZ1Nsb3RzLmhhcyhcImNoaWxkcmVuXCIpKSB7XG4gICAgICAgICAgICBsZXQgd2FybmluZ01lc3NhZ2UgPSBcIk5vIGRlZmF1bHQgY29tcG9uZW50IHdhcyBmb3VuZCBmb3IgYSBwYXJhbGxlbCByb3V0ZSByZW5kZXJlZCBvbiB0aGlzIHBhZ2UuIEZhbGxpbmcgYmFjayB0byBuZWFyZXN0IE5vdEZvdW5kIGJvdW5kYXJ5LlxcblwiICsgXCJMZWFybiBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL3BhcmFsbGVsLXJvdXRlcyNkZWZhdWx0anNcXG5cXG5cIjtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLm1pc3NpbmdTbG90cy5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFNsb3RzID0gQXJyYXkuZnJvbSh0aGlzLnByb3BzLm1pc3NpbmdTbG90cykuc29ydCgoYSwgYik9PmEubG9jYWxlQ29tcGFyZShiKSkubWFwKChzbG90KT0+XCJAXCIgKyBzbG90KS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2UgKz0gXCJNaXNzaW5nIHNsb3RzOiBcIiArIGZvcm1hdHRlZFNsb3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKDAsIF93YXJub25jZS53YXJuT25jZSkod2FybmluZ01lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKCgwLCBfbm90Zm91bmQuaXNOb3RGb3VuZEVycm9yKShlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbm90Rm91bmRUcmlnZ2VyZWQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmUtdGhyb3cgaWYgZXJyb3IgaXMgbm90IGZvciA0MDRcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICAgIC8qKlxuICAgICAqIEhhbmRsZXMgcmVzZXQgb2YgdGhlIGVycm9yIGJvdW5kYXJ5IHdoZW4gYSBuYXZpZ2F0aW9uIGhhcHBlbnMuXG4gICAgICogRW5zdXJlcyB0aGUgZXJyb3IgYm91bmRhcnkgZG9lcyBub3Qgc3RheSBlbmFibGVkIHdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlLlxuICAgICAqIEFwcHJvYWNoIG9mIHNldFN0YXRlIGluIHJlbmRlciBpcyBzYWZlIGFzIGl0IGNoZWNrcyB0aGUgcHJldmlvdXMgcGF0aG5hbWUgYW5kIHRoZW4gb3ZlcnJpZGVzXG4gICAgICogaXQgYXMgb3V0bGluZWQgaW4gaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVN0YXRlI3N0b3JpbmctaW5mb3JtYXRpb24tZnJvbS1wcmV2aW91cy1yZW5kZXJzXG4gICAgICovIGlmIChwcm9wcy5wYXRobmFtZSAhPT0gc3RhdGUucHJldmlvdXNQYXRobmFtZSAmJiBzdGF0ZS5ub3RGb3VuZFRyaWdnZXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBub3RGb3VuZFRyaWdnZXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vdEZvdW5kVHJpZ2dlcmVkOiBzdGF0ZS5ub3RGb3VuZFRyaWdnZXJlZCxcbiAgICAgICAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUubm90Rm91bmRUcmlnZ2VyZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJtZXRhXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicm9ib3RzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIm5vaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiAmJiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibWV0YVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm5leHQtZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwibm90LWZvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubm90Rm91bmRTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubm90Rm91bmRcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBub3RGb3VuZFRyaWdnZXJlZDogISFwcm9wcy5hc05vdEZvdW5kLFxuICAgICAgICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBOb3RGb3VuZEJvdW5kYXJ5KHBhcmFtKSB7XG4gICAgbGV0IHsgbm90Rm91bmQsIG5vdEZvdW5kU3R5bGVzLCBhc05vdEZvdW5kLCBjaGlsZHJlbiB9ID0gcGFyYW07XG4gICAgY29uc3QgcGF0aG5hbWUgPSAoMCwgX25hdmlnYXRpb24udXNlUGF0aG5hbWUpKCk7XG4gICAgY29uc3QgbWlzc2luZ1Nsb3RzID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuTWlzc2luZ1Nsb3RDb250ZXh0KTtcbiAgICByZXR1cm4gbm90Rm91bmQgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKE5vdEZvdW5kRXJyb3JCb3VuZGFyeSwge1xuICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgICAgIG5vdEZvdW5kOiBub3RGb3VuZCxcbiAgICAgICAgbm90Rm91bmRTdHlsZXM6IG5vdEZvdW5kU3R5bGVzLFxuICAgICAgICBhc05vdEZvdW5kOiBhc05vdEZvdW5kLFxuICAgICAgICBtaXNzaW5nU2xvdHM6IG1pc3NpbmdTbG90cyxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkgOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub3QtZm91bmQtYm91bmRhcnkuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/client/components/not-found-boundary.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/client/components/not-found-error.js": +/*!*********************************************************************!*\ + !*** ./node_modules/next/dist/client/components/not-found-error.js ***! + \*********************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return NotFound;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(rsc)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react.js\"));\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: \"100vh\",\n textAlign: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n desc: {\n display: \"inline-block\"\n },\n h1: {\n display: \"inline-block\",\n margin: \"0 20px 0 0\",\n padding: \"0 23px 0 0\",\n fontSize: 24,\n fontWeight: 500,\n verticalAlign: \"top\",\n lineHeight: \"49px\"\n },\n h2: {\n fontSize: 14,\n fontWeight: 400,\n lineHeight: \"49px\",\n margin: 0\n }\n};\nfunction NotFound() {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: \"404: This page could not be found.\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.error,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n /* Minified CSS from\n body { margin: 0; color: #000; background: #fff; }\n .next-error-h1 {\n border-right: 1px solid rgba(0, 0, 0, .3);\n }\n\n @media (prefers-color-scheme: dark) {\n body { color: #fff; background: #000; }\n .next-error-h1 {\n border-right: 1px solid rgba(255, 255, 255, .3);\n }\n }\n */ __html: \"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"\n }\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n className: \"next-error-h1\",\n style: styles.h1,\n children: \"404\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.desc,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n style: styles.h2,\n children: \"This page could not be found.\"\n })\n })\n ]\n })\n })\n ]\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=not-found-error.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxrSEFBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsZ0lBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsd0dBQU87QUFDdkUsTUFBTUksU0FBUztJQUNYQyxPQUFPO1FBQ0gsMEZBQTBGO1FBQzFGQyxZQUFZO1FBQ1pDLFFBQVE7UUFDUkMsV0FBVztRQUNYQyxTQUFTO1FBQ1RDLGVBQWU7UUFDZkMsWUFBWTtRQUNaQyxnQkFBZ0I7SUFDcEI7SUFDQUMsTUFBTTtRQUNGSixTQUFTO0lBQ2I7SUFDQUssSUFBSTtRQUNBTCxTQUFTO1FBQ1RNLFFBQVE7UUFDUkMsU0FBUztRQUNUQyxVQUFVO1FBQ1ZDLFlBQVk7UUFDWkMsZUFBZTtRQUNmQyxZQUFZO0lBQ2hCO0lBQ0FDLElBQUk7UUFDQUosVUFBVTtRQUNWQyxZQUFZO1FBQ1pFLFlBQVk7UUFDWkwsUUFBUTtJQUNaO0FBQ0o7QUFDQSxTQUFTakI7SUFDTCxPQUFxQixXQUFILEdBQUksSUFBR0csWUFBWXFCLElBQUksRUFBRXJCLFlBQVlzQixRQUFRLEVBQUU7UUFDN0RDLFVBQVU7WUFDTixXQUFXLEdBQUksSUFBR3ZCLFlBQVl3QixHQUFHLEVBQUUsU0FBUztnQkFDeENELFVBQVU7WUFDZDtZQUNBLFdBQVcsR0FBSSxJQUFHdkIsWUFBWXdCLEdBQUcsRUFBRSxPQUFPO2dCQUN0Q0MsT0FBT3RCLE9BQU9DLEtBQUs7Z0JBQ25CbUIsVUFBd0IsV0FBSCxHQUFJLElBQUd2QixZQUFZcUIsSUFBSSxFQUFFLE9BQU87b0JBQ2pERSxVQUFVO3dCQUNOLFdBQVcsR0FBSSxJQUFHdkIsWUFBWXdCLEdBQUcsRUFBRSxTQUFTOzRCQUN4Q0UseUJBQXlCO2dDQUNyQjs7Ozs7Ozs7Ozs7O2NBWWxCLEdBQUdDLFFBQVE7NEJBQ0c7d0JBQ0o7d0JBQ0EsV0FBVyxHQUFJLElBQUczQixZQUFZd0IsR0FBRyxFQUFFLE1BQU07NEJBQ3JDSSxXQUFXOzRCQUNYSCxPQUFPdEIsT0FBT1UsRUFBRTs0QkFDaEJVLFVBQVU7d0JBQ2Q7d0JBQ0EsV0FBVyxHQUFJLElBQUd2QixZQUFZd0IsR0FBRyxFQUFFLE9BQU87NEJBQ3RDQyxPQUFPdEIsT0FBT1MsSUFBSTs0QkFDbEJXLFVBQXdCLFdBQUgsR0FBSSxJQUFHdkIsWUFBWXdCLEdBQUcsRUFBRSxNQUFNO2dDQUMvQ0MsT0FBT3RCLE9BQU9pQixFQUFFO2dDQUNoQkcsVUFBVTs0QkFDZDt3QkFDSjtxQkFDSDtnQkFDTDtZQUNKO1NBQ0g7SUFDTDtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU85QixRQUFRb0MsT0FBTyxLQUFLLGNBQWUsT0FBT3BDLFFBQVFvQyxPQUFPLEtBQUssWUFBWXBDLFFBQVFvQyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9wQyxRQUFRb0MsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3ZDLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW9DLE9BQU8sRUFBRSxjQUFjO1FBQUVuQyxPQUFPO0lBQUs7SUFDbkVILE9BQU93QyxNQUFNLENBQUN0QyxRQUFRb0MsT0FBTyxFQUFFcEM7SUFDL0J1QyxPQUFPdkMsT0FBTyxHQUFHQSxRQUFRb0MsT0FBTztBQUNsQyxFQUVBLDJDQUEyQyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1lcnJvci5qcz9lNWM5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTm90Rm91bmQ7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBzdHlsZXMgPSB7XG4gICAgZXJyb3I6IHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9tb2Rlcm4tbm9ybWFsaXplL2Jsb2IvbWFpbi9tb2Rlcm4tbm9ybWFsaXplLmNzcyNMMzgtTDUyXG4gICAgICAgIGZvbnRGYW1pbHk6ICdzeXN0ZW0tdWksXCJTZWdvZSBVSVwiLFJvYm90byxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZixcIkFwcGxlIENvbG9yIEVtb2ppXCIsXCJTZWdvZSBVSSBFbW9qaVwiJyxcbiAgICAgICAgaGVpZ2h0OiBcIjEwMHZoXCIsXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiXG4gICAgfSxcbiAgICBkZXNjOiB7XG4gICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCJcbiAgICB9LFxuICAgIGgxOiB7XG4gICAgICAgIGRpc3BsYXk6IFwiaW5saW5lLWJsb2NrXCIsXG4gICAgICAgIG1hcmdpbjogXCIwIDIwcHggMCAwXCIsXG4gICAgICAgIHBhZGRpbmc6IFwiMCAyM3B4IDAgMFwiLFxuICAgICAgICBmb250U2l6ZTogMjQsXG4gICAgICAgIGZvbnRXZWlnaHQ6IDUwMCxcbiAgICAgICAgdmVydGljYWxBbGlnbjogXCJ0b3BcIixcbiAgICAgICAgbGluZUhlaWdodDogXCI0OXB4XCJcbiAgICB9LFxuICAgIGgyOiB7XG4gICAgICAgIGZvbnRTaXplOiAxNCxcbiAgICAgICAgZm9udFdlaWdodDogNDAwLFxuICAgICAgICBsaW5lSGVpZ2h0OiBcIjQ5cHhcIixcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgfVxufTtcbmZ1bmN0aW9uIE5vdEZvdW5kKCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInRpdGxlXCIsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCI0MDQ6IFRoaXMgcGFnZSBjb3VsZCBub3QgYmUgZm91bmQuXCJcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy5lcnJvcixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInN0eWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNaW5pZmllZCBDU1MgZnJvbVxuICAgICAgICAgICAgICAgIGJvZHkgeyBtYXJnaW46IDA7IGNvbG9yOiAjMDAwOyBiYWNrZ3JvdW5kOiAjZmZmOyB9XG4gICAgICAgICAgICAgICAgLm5leHQtZXJyb3ItaDEge1xuICAgICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAuMyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgICAgICAgICAgYm9keSB7IGNvbG9yOiAjZmZmOyBiYWNrZ3JvdW5kOiAjMDAwOyB9XG4gICAgICAgICAgICAgICAgICAubmV4dC1lcnJvci1oMSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKi8gX19odG1sOiBcImJvZHl7Y29sb3I6IzAwMDtiYWNrZ3JvdW5kOiNmZmY7bWFyZ2luOjB9Lm5leHQtZXJyb3ItaDF7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4zKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspe2JvZHl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiMwMDB9Lm5leHQtZXJyb3ItaDF7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4zKX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoMVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIm5leHQtZXJyb3ItaDFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogc3R5bGVzLmgxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIjQwNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBzdHlsZXMuZGVzYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImgyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy5oMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZC5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LWZvdW5kLWVycm9yLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJOb3RGb3VuZCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJzdHlsZXMiLCJlcnJvciIsImZvbnRGYW1pbHkiLCJoZWlnaHQiLCJ0ZXh0QWxpZ24iLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsImRlc2MiLCJoMSIsIm1hcmdpbiIsInBhZGRpbmciLCJmb250U2l6ZSIsImZvbnRXZWlnaHQiLCJ2ZXJ0aWNhbEFsaWduIiwibGluZUhlaWdodCIsImgyIiwianN4cyIsIkZyYWdtZW50IiwiY2hpbGRyZW4iLCJqc3giLCJzdHlsZSIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwiY2xhc3NOYW1lIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/client/components/not-found-error.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/client/components/render-from-template-context.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/render-from-template-context.js ***! + \**********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nconst { createProxy } = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ \"(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js\");\nmodule.exports = createProxy(\"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\node_modules\\\\next\\\\dist\\\\client\\\\components\\\\render-from-template-context.js\");\n //# sourceMappingURL=render-from-template-context.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanMiLCJtYXBwaW5ncyI6Ijs7O0NBNkJBLHdEQUF3RCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanM/OGVlNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSZW5kZXJGcm9tVGVtcGxhdGVDb250ZXh0O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lXCIpO1xuZnVuY3Rpb24gUmVuZGVyRnJvbVRlbXBsYXRlQ29udGV4dCgpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9ICgwLCBfcmVhY3QudXNlQ29udGV4dCkoX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lLlRlbXBsYXRlQ29udGV4dCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/client/components/render-from-template-context.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/client/components/searchparams-bailout-proxy.js": +/*!********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/searchparams-bailout-proxy.js ***! + \********************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createSearchParamsBailoutProxy\", ({\n enumerable: true,\n get: function() {\n return createSearchParamsBailoutProxy;\n }\n}));\nconst _staticgenerationbailout = __webpack_require__(/*! ./static-generation-bailout */ \"(rsc)/./node_modules/next/dist/client/components/static-generation-bailout.js\");\nfunction createSearchParamsBailoutProxy() {\n return new Proxy({}, {\n get (_target, prop) {\n // React adds some properties on the object when serializing for client components\n if (typeof prop === \"string\") {\n (0, _staticgenerationbailout.staticGenerationBailout)(\"searchParams.\" + prop);\n }\n }\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=searchparams-bailout-proxy.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3NlYXJjaHBhcmFtcy1iYWlsb3V0LXByb3h5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxrRUFBaUU7SUFDN0RJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGtIQUE2QjtBQUN0RSxTQUFTRjtJQUNMLE9BQU8sSUFBSUcsTUFBTSxDQUFDLEdBQUc7UUFDakJKLEtBQUtLLE9BQU8sRUFBRUMsSUFBSTtZQUNkLGtGQUFrRjtZQUNsRixJQUFJLE9BQU9BLFNBQVMsVUFBVTtnQkFDekIsSUFBR0oseUJBQXlCSyx1QkFBdUIsRUFBRSxrQkFBa0JEO1lBQzVFO1FBQ0o7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9ULFFBQVFXLE9BQU8sS0FBSyxjQUFlLE9BQU9YLFFBQVFXLE9BQU8sS0FBSyxZQUFZWCxRQUFRVyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9YLFFBQVFXLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktkLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUVcsT0FBTyxFQUFFLGNBQWM7UUFBRVYsT0FBTztJQUFLO0lBQ25FSCxPQUFPZSxNQUFNLENBQUNiLFFBQVFXLE9BQU8sRUFBRVg7SUFDL0JjLE9BQU9kLE9BQU8sR0FBR0EsUUFBUVcsT0FBTztBQUNsQyxFQUVBLHNEQUFzRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3NlYXJjaHBhcmFtcy1iYWlsb3V0LXByb3h5LmpzP2I2ZGUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWFyY2hQYXJhbXNCYWlsb3V0UHJveHlcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNlYXJjaFBhcmFtc0JhaWxvdXRQcm94eTtcbiAgICB9XG59KTtcbmNvbnN0IF9zdGF0aWNnZW5lcmF0aW9uYmFpbG91dCA9IHJlcXVpcmUoXCIuL3N0YXRpYy1nZW5lcmF0aW9uLWJhaWxvdXRcIik7XG5mdW5jdGlvbiBjcmVhdGVTZWFyY2hQYXJhbXNCYWlsb3V0UHJveHkoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm94eSh7fSwge1xuICAgICAgICBnZXQgKF90YXJnZXQsIHByb3ApIHtcbiAgICAgICAgICAgIC8vIFJlYWN0IGFkZHMgc29tZSBwcm9wZXJ0aWVzIG9uIHRoZSBvYmplY3Qgd2hlbiBzZXJpYWxpemluZyBmb3IgY2xpZW50IGNvbXBvbmVudHNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICgwLCBfc3RhdGljZ2VuZXJhdGlvbmJhaWxvdXQuc3RhdGljR2VuZXJhdGlvbkJhaWxvdXQpKFwic2VhcmNoUGFyYW1zLlwiICsgcHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VhcmNocGFyYW1zLWJhaWxvdXQtcHJveHkuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImNyZWF0ZVNlYXJjaFBhcmFtc0JhaWxvdXRQcm94eSIsIl9zdGF0aWNnZW5lcmF0aW9uYmFpbG91dCIsInJlcXVpcmUiLCJQcm94eSIsIl90YXJnZXQiLCJwcm9wIiwic3RhdGljR2VuZXJhdGlvbkJhaWxvdXQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/client/components/searchparams-bailout-proxy.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/client/components/static-generation-bailout.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/static-generation-bailout.js ***! + \*******************************************************************************/ +/***/ ((module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n isStaticGenBailoutError: function() {\n return isStaticGenBailoutError;\n },\n staticGenerationBailout: function() {\n return staticGenerationBailout;\n }\n});\nconst _hooksservercontext = __webpack_require__(/*! ./hooks-server-context */ \"(rsc)/./node_modules/next/dist/client/components/hooks-server-context.js\");\nconst _staticgenerationasyncstorageexternal = __webpack_require__(/*! ./static-generation-async-storage.external */ \"../../client/components/static-generation-async-storage.external\");\nconst NEXT_STATIC_GEN_BAILOUT = \"NEXT_STATIC_GEN_BAILOUT\";\nclass StaticGenBailoutError extends Error {\n constructor(...args){\n super(...args);\n this.code = NEXT_STATIC_GEN_BAILOUT;\n }\n}\nfunction isStaticGenBailoutError(error) {\n if (typeof error !== \"object\" || error === null || !(\"code\" in error)) {\n return false;\n }\n return error.code === NEXT_STATIC_GEN_BAILOUT;\n}\nfunction formatErrorMessage(reason, opts) {\n const { dynamic, link } = opts || {};\n const suffix = link ? \" See more info here: \" + link : \"\";\n return \"Page\" + (dynamic ? ' with `dynamic = \"' + dynamic + '\"`' : \"\") + \" couldn't be rendered statically because it used `\" + reason + \"`.\" + suffix;\n}\nconst staticGenerationBailout = (reason, param)=>{\n let { dynamic, link } = param === void 0 ? {} : param;\n const staticGenerationStore = _staticgenerationasyncstorageexternal.staticGenerationAsyncStorage.getStore();\n if (!staticGenerationStore) return false;\n if (staticGenerationStore.forceStatic) {\n return true;\n }\n if (staticGenerationStore.dynamicShouldError) {\n throw new StaticGenBailoutError(formatErrorMessage(reason, {\n link,\n dynamic: dynamic != null ? dynamic : \"error\"\n }));\n }\n const message = formatErrorMessage(reason, {\n dynamic,\n // this error should be caught by Next to bail out of static generation\n // in case it's uncaught, this link provides some additional context as to why\n link: \"https://nextjs.org/docs/messages/dynamic-server-error\"\n });\n // If postpone is available, we should postpone the render.\n staticGenerationStore.postpone == null ? void 0 : staticGenerationStore.postpone.call(staticGenerationStore, reason);\n // As this is a bailout, we don't want to revalidate, so set the revalidate\n // to 0.\n staticGenerationStore.revalidate = 0;\n if (staticGenerationStore.isStaticGeneration) {\n const err = new _hooksservercontext.DynamicServerError(message);\n staticGenerationStore.dynamicUsageDescription = reason;\n staticGenerationStore.dynamicUsageStack = err.stack;\n throw err;\n }\n return false;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=static-generation-bailout.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3N0YXRpYy1nZW5lcmF0aW9uLWJhaWxvdXQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxzQkFBc0JDLG1CQUFPQSxDQUFDLHdHQUF3QjtBQUM1RCxNQUFNQyx3Q0FBd0NELG1CQUFPQSxDQUFDLG9IQUE0QztBQUNsRyxNQUFNRSwwQkFBMEI7QUFDaEMsTUFBTUMsOEJBQThCQztJQUNoQ0MsWUFBWSxHQUFHQyxJQUFJLENBQUM7UUFDaEIsS0FBSyxJQUFJQTtRQUNULElBQUksQ0FBQ0MsSUFBSSxHQUFHTDtJQUNoQjtBQUNKO0FBQ0EsU0FBU1gsd0JBQXdCaUIsS0FBSztJQUNsQyxJQUFJLE9BQU9BLFVBQVUsWUFBWUEsVUFBVSxRQUFRLENBQUUsV0FBVUEsS0FBSSxHQUFJO1FBQ25FLE9BQU87SUFDWDtJQUNBLE9BQU9BLE1BQU1ELElBQUksS0FBS0w7QUFDMUI7QUFDQSxTQUFTTyxtQkFBbUJDLE1BQU0sRUFBRUMsSUFBSTtJQUNwQyxNQUFNLEVBQUVDLE9BQU8sRUFBRUMsSUFBSSxFQUFFLEdBQUdGLFFBQVEsQ0FBQztJQUNuQyxNQUFNRyxTQUFTRCxPQUFPLDBCQUEwQkEsT0FBTztJQUN2RCxPQUFPLFNBQVVELENBQUFBLFVBQVUsdUJBQXVCQSxVQUFVLE9BQU8sRUFBQyxJQUFLLHVEQUF1REYsU0FBUyxPQUFPSTtBQUNwSjtBQUNBLE1BQU10QiwwQkFBMEIsQ0FBQ2tCLFFBQVFLO0lBQ3JDLElBQUksRUFBRUgsT0FBTyxFQUFFQyxJQUFJLEVBQUUsR0FBR0UsVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJQTtJQUNoRCxNQUFNQyx3QkFBd0JmLHNDQUFzQ2dCLDRCQUE0QixDQUFDQyxRQUFRO0lBQ3pHLElBQUksQ0FBQ0YsdUJBQXVCLE9BQU87SUFDbkMsSUFBSUEsc0JBQXNCRyxXQUFXLEVBQUU7UUFDbkMsT0FBTztJQUNYO0lBQ0EsSUFBSUgsc0JBQXNCSSxrQkFBa0IsRUFBRTtRQUMxQyxNQUFNLElBQUlqQixzQkFBc0JNLG1CQUFtQkMsUUFBUTtZQUN2REc7WUFDQUQsU0FBU0EsV0FBVyxPQUFPQSxVQUFVO1FBQ3pDO0lBQ0o7SUFDQSxNQUFNUyxVQUFVWixtQkFBbUJDLFFBQVE7UUFDdkNFO1FBQ0EsdUVBQXVFO1FBQ3ZFLDhFQUE4RTtRQUM5RUMsTUFBTTtJQUNWO0lBQ0EsMkRBQTJEO0lBQzNERyxzQkFBc0JNLFFBQVEsSUFBSSxPQUFPLEtBQUssSUFBSU4sc0JBQXNCTSxRQUFRLENBQUNDLElBQUksQ0FBQ1AsdUJBQXVCTjtJQUM3RywyRUFBMkU7SUFDM0UsUUFBUTtJQUNSTSxzQkFBc0JRLFVBQVUsR0FBRztJQUNuQyxJQUFJUixzQkFBc0JTLGtCQUFrQixFQUFFO1FBQzFDLE1BQU1DLE1BQU0sSUFBSTNCLG9CQUFvQjRCLGtCQUFrQixDQUFDTjtRQUN2REwsc0JBQXNCWSx1QkFBdUIsR0FBR2xCO1FBQ2hETSxzQkFBc0JhLGlCQUFpQixHQUFHSCxJQUFJSSxLQUFLO1FBQ25ELE1BQU1KO0lBQ1Y7SUFDQSxPQUFPO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT3RDLFFBQVEyQyxPQUFPLEtBQUssY0FBZSxPQUFPM0MsUUFBUTJDLE9BQU8sS0FBSyxZQUFZM0MsUUFBUTJDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzNDLFFBQVEyQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLOUMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMkMsT0FBTyxFQUFFLGNBQWM7UUFBRTFDLE9BQU87SUFBSztJQUNuRUgsT0FBTytDLE1BQU0sQ0FBQzdDLFFBQVEyQyxPQUFPLEVBQUUzQztJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRMkMsT0FBTztBQUNsQyxFQUVBLHFEQUFxRCIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3N0YXRpYy1nZW5lcmF0aW9uLWJhaWxvdXQuanM/MDQ2YyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGlzU3RhdGljR2VuQmFpbG91dEVycm9yOiBudWxsLFxuICAgIHN0YXRpY0dlbmVyYXRpb25CYWlsb3V0OiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGlzU3RhdGljR2VuQmFpbG91dEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RhdGljR2VuQmFpbG91dEVycm9yO1xuICAgIH0sXG4gICAgc3RhdGljR2VuZXJhdGlvbkJhaWxvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3RhdGljR2VuZXJhdGlvbkJhaWxvdXQ7XG4gICAgfVxufSk7XG5jb25zdCBfaG9va3NzZXJ2ZXJjb250ZXh0ID0gcmVxdWlyZShcIi4vaG9va3Mtc2VydmVyLWNvbnRleHRcIik7XG5jb25zdCBfc3RhdGljZ2VuZXJhdGlvbmFzeW5jc3RvcmFnZWV4dGVybmFsID0gcmVxdWlyZShcIi4vc3RhdGljLWdlbmVyYXRpb24tYXN5bmMtc3RvcmFnZS5leHRlcm5hbFwiKTtcbmNvbnN0IE5FWFRfU1RBVElDX0dFTl9CQUlMT1VUID0gXCJORVhUX1NUQVRJQ19HRU5fQkFJTE9VVFwiO1xuY2xhc3MgU3RhdGljR2VuQmFpbG91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3Mpe1xuICAgICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgICAgdGhpcy5jb2RlID0gTkVYVF9TVEFUSUNfR0VOX0JBSUxPVVQ7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNTdGF0aWNHZW5CYWlsb3V0RXJyb3IoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yICE9PSBcIm9iamVjdFwiIHx8IGVycm9yID09PSBudWxsIHx8ICEoXCJjb2RlXCIgaW4gZXJyb3IpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yLmNvZGUgPT09IE5FWFRfU1RBVElDX0dFTl9CQUlMT1VUO1xufVxuZnVuY3Rpb24gZm9ybWF0RXJyb3JNZXNzYWdlKHJlYXNvbiwgb3B0cykge1xuICAgIGNvbnN0IHsgZHluYW1pYywgbGluayB9ID0gb3B0cyB8fCB7fTtcbiAgICBjb25zdCBzdWZmaXggPSBsaW5rID8gXCIgU2VlIG1vcmUgaW5mbyBoZXJlOiBcIiArIGxpbmsgOiBcIlwiO1xuICAgIHJldHVybiBcIlBhZ2VcIiArIChkeW5hbWljID8gJyB3aXRoIGBkeW5hbWljID0gXCInICsgZHluYW1pYyArICdcImAnIDogXCJcIikgKyBcIiBjb3VsZG4ndCBiZSByZW5kZXJlZCBzdGF0aWNhbGx5IGJlY2F1c2UgaXQgdXNlZCBgXCIgKyByZWFzb24gKyBcImAuXCIgKyBzdWZmaXg7XG59XG5jb25zdCBzdGF0aWNHZW5lcmF0aW9uQmFpbG91dCA9IChyZWFzb24sIHBhcmFtKT0+e1xuICAgIGxldCB7IGR5bmFtaWMsIGxpbmsgfSA9IHBhcmFtID09PSB2b2lkIDAgPyB7fSA6IHBhcmFtO1xuICAgIGNvbnN0IHN0YXRpY0dlbmVyYXRpb25TdG9yZSA9IF9zdGF0aWNnZW5lcmF0aW9uYXN5bmNzdG9yYWdlZXh0ZXJuYWwuc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZS5nZXRTdG9yZSgpO1xuICAgIGlmICghc3RhdGljR2VuZXJhdGlvblN0b3JlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHN0YXRpY0dlbmVyYXRpb25TdG9yZS5mb3JjZVN0YXRpYykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHN0YXRpY0dlbmVyYXRpb25TdG9yZS5keW5hbWljU2hvdWxkRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN0YXRpY0dlbkJhaWxvdXRFcnJvcihmb3JtYXRFcnJvck1lc3NhZ2UocmVhc29uLCB7XG4gICAgICAgICAgICBsaW5rLFxuICAgICAgICAgICAgZHluYW1pYzogZHluYW1pYyAhPSBudWxsID8gZHluYW1pYyA6IFwiZXJyb3JcIlxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRFcnJvck1lc3NhZ2UocmVhc29uLCB7XG4gICAgICAgIGR5bmFtaWMsXG4gICAgICAgIC8vIHRoaXMgZXJyb3Igc2hvdWxkIGJlIGNhdWdodCBieSBOZXh0IHRvIGJhaWwgb3V0IG9mIHN0YXRpYyBnZW5lcmF0aW9uXG4gICAgICAgIC8vIGluIGNhc2UgaXQncyB1bmNhdWdodCwgdGhpcyBsaW5rIHByb3ZpZGVzIHNvbWUgYWRkaXRpb25hbCBjb250ZXh0IGFzIHRvIHdoeVxuICAgICAgICBsaW5rOiBcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2R5bmFtaWMtc2VydmVyLWVycm9yXCJcbiAgICB9KTtcbiAgICAvLyBJZiBwb3N0cG9uZSBpcyBhdmFpbGFibGUsIHdlIHNob3VsZCBwb3N0cG9uZSB0aGUgcmVuZGVyLlxuICAgIHN0YXRpY0dlbmVyYXRpb25TdG9yZS5wb3N0cG9uZSA9PSBudWxsID8gdm9pZCAwIDogc3RhdGljR2VuZXJhdGlvblN0b3JlLnBvc3Rwb25lLmNhbGwoc3RhdGljR2VuZXJhdGlvblN0b3JlLCByZWFzb24pO1xuICAgIC8vIEFzIHRoaXMgaXMgYSBiYWlsb3V0LCB3ZSBkb24ndCB3YW50IHRvIHJldmFsaWRhdGUsIHNvIHNldCB0aGUgcmV2YWxpZGF0ZVxuICAgIC8vIHRvIDAuXG4gICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLnJldmFsaWRhdGUgPSAwO1xuICAgIGlmIChzdGF0aWNHZW5lcmF0aW9uU3RvcmUuaXNTdGF0aWNHZW5lcmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IG5ldyBfaG9va3NzZXJ2ZXJjb250ZXh0LkR5bmFtaWNTZXJ2ZXJFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLmR5bmFtaWNVc2FnZURlc2NyaXB0aW9uID0gcmVhc29uO1xuICAgICAgICBzdGF0aWNHZW5lcmF0aW9uU3RvcmUuZHluYW1pY1VzYWdlU3RhY2sgPSBlcnIuc3RhY2s7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhdGljLWdlbmVyYXRpb24tYmFpbG91dC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJpc1N0YXRpY0dlbkJhaWxvdXRFcnJvciIsInN0YXRpY0dlbmVyYXRpb25CYWlsb3V0IiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2hvb2tzc2VydmVyY29udGV4dCIsInJlcXVpcmUiLCJfc3RhdGljZ2VuZXJhdGlvbmFzeW5jc3RvcmFnZWV4dGVybmFsIiwiTkVYVF9TVEFUSUNfR0VOX0JBSUxPVVQiLCJTdGF0aWNHZW5CYWlsb3V0RXJyb3IiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwiYXJncyIsImNvZGUiLCJlcnJvciIsImZvcm1hdEVycm9yTWVzc2FnZSIsInJlYXNvbiIsIm9wdHMiLCJkeW5hbWljIiwibGluayIsInN1ZmZpeCIsInBhcmFtIiwic3RhdGljR2VuZXJhdGlvblN0b3JlIiwic3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZSIsImdldFN0b3JlIiwiZm9yY2VTdGF0aWMiLCJkeW5hbWljU2hvdWxkRXJyb3IiLCJtZXNzYWdlIiwicG9zdHBvbmUiLCJjYWxsIiwicmV2YWxpZGF0ZSIsImlzU3RhdGljR2VuZXJhdGlvbiIsImVyciIsIkR5bmFtaWNTZXJ2ZXJFcnJvciIsImR5bmFtaWNVc2FnZURlc2NyaXB0aW9uIiwiZHluYW1pY1VzYWdlU3RhY2siLCJzdGFjayIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/client/components/static-generation-bailout.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js ***! + \*****************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("/* __next_internal_client_entry_do_not_use__ cjs */ \nconst { createProxy } = __webpack_require__(/*! next/dist/build/webpack/loaders/next-flight-loader/module-proxy */ \"(rsc)/./node_modules/next/dist/build/webpack/loaders/next-flight-loader/module-proxy.js\");\nmodule.exports = createProxy(\"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\node_modules\\\\next\\\\dist\\\\client\\\\components\\\\static-generation-searchparams-bailout-provider.js\");\n //# sourceMappingURL=static-generation-searchparams-bailout-provider.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3N0YXRpYy1nZW5lcmF0aW9uLXNlYXJjaHBhcmFtcy1iYWlsb3V0LXByb3ZpZGVyLmpzIiwibWFwcGluZ3MiOiI7OztDQW9DQSwyRUFBMkUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9zdGF0aWMtZ2VuZXJhdGlvbi1zZWFyY2hwYXJhbXMtYmFpbG91dC1wcm92aWRlci5qcz85NzFhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFN0YXRpY0dlbmVyYXRpb25TZWFyY2hQYXJhbXNCYWlsb3V0UHJvdmlkZXI7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfc2VhcmNocGFyYW1zYmFpbG91dHByb3h5ID0gcmVxdWlyZShcIi4vc2VhcmNocGFyYW1zLWJhaWxvdXQtcHJveHlcIik7XG5mdW5jdGlvbiBTdGF0aWNHZW5lcmF0aW9uU2VhcmNoUGFyYW1zQmFpbG91dFByb3ZpZGVyKHBhcmFtKSB7XG4gICAgbGV0IHsgQ29tcG9uZW50LCBwcm9wc0ZvckNvbXBvbmVudCwgaXNTdGF0aWNHZW5lcmF0aW9uIH0gPSBwYXJhbTtcbiAgICBpZiAoaXNTdGF0aWNHZW5lcmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9ICgwLCBfc2VhcmNocGFyYW1zYmFpbG91dHByb3h5LmNyZWF0ZVNlYXJjaFBhcmFtc0JhaWxvdXRQcm94eSkoKTtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBzZWFyY2hQYXJhbXM6IHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICAgIC4uLnByb3BzRm9yQ29tcG9uZW50XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShDb21wb25lbnQsIHtcbiAgICAgICAgLi4ucHJvcHNGb3JDb21wb25lbnRcbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhdGljLWdlbmVyYXRpb24tc2VhcmNocGFyYW1zLWJhaWxvdXQtcHJvdmlkZXIuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/compiled/@opentelemetry/api/index.js": +/*!*********************************************************************!*\ + !*** ./node_modules/next/dist/compiled/@opentelemetry/api/index.js ***! + \*********************************************************************/ +/***/ ((module) => { + +eval("(()=>{\"use strict\";var e={491:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ContextAPI=void 0;const n=r(223);const a=r(172);const o=r(930);const i=\"context\";const c=new n.NoopContextManager;class ContextAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new ContextAPI}return this._instance}setGlobalContextManager(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}active(){return this._getContextManager().active()}with(e,t,r,...n){return this._getContextManager().with(e,t,r,...n)}bind(e,t){return this._getContextManager().bind(e,t)}_getContextManager(){return(0,a.getGlobal)(i)||c}disable(){this._getContextManager().disable();(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.ContextAPI=ContextAPI},930:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagAPI=void 0;const n=r(56);const a=r(912);const o=r(957);const i=r(172);const c=\"diag\";class DiagAPI{constructor(){function _logProxy(e){return function(...t){const r=(0,i.getGlobal)(\"diag\");if(!r)return;return r[e](...t)}}const e=this;const setLogger=(t,r={logLevel:o.DiagLogLevel.INFO})=>{var n,c,s;if(t===e){const t=new Error(\"Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation\");e.error((n=t.stack)!==null&&n!==void 0?n:t.message);return false}if(typeof r===\"number\"){r={logLevel:r}}const u=(0,i.getGlobal)(\"diag\");const l=(0,a.createLogLevelDiagLogger)((c=r.logLevel)!==null&&c!==void 0?c:o.DiagLogLevel.INFO,t);if(u&&!r.suppressOverrideMessage){const e=(s=(new Error).stack)!==null&&s!==void 0?s:\"<failed to generate stacktrace>\";u.warn(`Current logger will be overwritten from ${e}`);l.warn(`Current logger will overwrite one already registered from ${e}`)}return(0,i.registerGlobal)(\"diag\",l,e,true)};e.setLogger=setLogger;e.disable=()=>{(0,i.unregisterGlobal)(c,e)};e.createComponentLogger=e=>new n.DiagComponentLogger(e);e.verbose=_logProxy(\"verbose\");e.debug=_logProxy(\"debug\");e.info=_logProxy(\"info\");e.warn=_logProxy(\"warn\");e.error=_logProxy(\"error\")}static instance(){if(!this._instance){this._instance=new DiagAPI}return this._instance}}t.DiagAPI=DiagAPI},653:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.MetricsAPI=void 0;const n=r(660);const a=r(172);const o=r(930);const i=\"metrics\";class MetricsAPI{constructor(){}static getInstance(){if(!this._instance){this._instance=new MetricsAPI}return this._instance}setGlobalMeterProvider(e){return(0,a.registerGlobal)(i,e,o.DiagAPI.instance())}getMeterProvider(){return(0,a.getGlobal)(i)||n.NOOP_METER_PROVIDER}getMeter(e,t,r){return this.getMeterProvider().getMeter(e,t,r)}disable(){(0,a.unregisterGlobal)(i,o.DiagAPI.instance())}}t.MetricsAPI=MetricsAPI},181:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.PropagationAPI=void 0;const n=r(172);const a=r(874);const o=r(194);const i=r(277);const c=r(369);const s=r(930);const u=\"propagation\";const l=new a.NoopTextMapPropagator;class PropagationAPI{constructor(){this.createBaggage=c.createBaggage;this.getBaggage=i.getBaggage;this.getActiveBaggage=i.getActiveBaggage;this.setBaggage=i.setBaggage;this.deleteBaggage=i.deleteBaggage}static getInstance(){if(!this._instance){this._instance=new PropagationAPI}return this._instance}setGlobalPropagator(e){return(0,n.registerGlobal)(u,e,s.DiagAPI.instance())}inject(e,t,r=o.defaultTextMapSetter){return this._getGlobalPropagator().inject(e,t,r)}extract(e,t,r=o.defaultTextMapGetter){return this._getGlobalPropagator().extract(e,t,r)}fields(){return this._getGlobalPropagator().fields()}disable(){(0,n.unregisterGlobal)(u,s.DiagAPI.instance())}_getGlobalPropagator(){return(0,n.getGlobal)(u)||l}}t.PropagationAPI=PropagationAPI},997:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceAPI=void 0;const n=r(172);const a=r(846);const o=r(139);const i=r(607);const c=r(930);const s=\"trace\";class TraceAPI{constructor(){this._proxyTracerProvider=new a.ProxyTracerProvider;this.wrapSpanContext=o.wrapSpanContext;this.isSpanContextValid=o.isSpanContextValid;this.deleteSpan=i.deleteSpan;this.getSpan=i.getSpan;this.getActiveSpan=i.getActiveSpan;this.getSpanContext=i.getSpanContext;this.setSpan=i.setSpan;this.setSpanContext=i.setSpanContext}static getInstance(){if(!this._instance){this._instance=new TraceAPI}return this._instance}setGlobalTracerProvider(e){const t=(0,n.registerGlobal)(s,this._proxyTracerProvider,c.DiagAPI.instance());if(t){this._proxyTracerProvider.setDelegate(e)}return t}getTracerProvider(){return(0,n.getGlobal)(s)||this._proxyTracerProvider}getTracer(e,t){return this.getTracerProvider().getTracer(e,t)}disable(){(0,n.unregisterGlobal)(s,c.DiagAPI.instance());this._proxyTracerProvider=new a.ProxyTracerProvider}}t.TraceAPI=TraceAPI},277:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.deleteBaggage=t.setBaggage=t.getActiveBaggage=t.getBaggage=void 0;const n=r(491);const a=r(780);const o=(0,a.createContextKey)(\"OpenTelemetry Baggage Key\");function getBaggage(e){return e.getValue(o)||undefined}t.getBaggage=getBaggage;function getActiveBaggage(){return getBaggage(n.ContextAPI.getInstance().active())}t.getActiveBaggage=getActiveBaggage;function setBaggage(e,t){return e.setValue(o,t)}t.setBaggage=setBaggage;function deleteBaggage(e){return e.deleteValue(o)}t.deleteBaggage=deleteBaggage},993:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.BaggageImpl=void 0;class BaggageImpl{constructor(e){this._entries=e?new Map(e):new Map}getEntry(e){const t=this._entries.get(e);if(!t){return undefined}return Object.assign({},t)}getAllEntries(){return Array.from(this._entries.entries()).map((([e,t])=>[e,t]))}setEntry(e,t){const r=new BaggageImpl(this._entries);r._entries.set(e,t);return r}removeEntry(e){const t=new BaggageImpl(this._entries);t._entries.delete(e);return t}removeEntries(...e){const t=new BaggageImpl(this._entries);for(const r of e){t._entries.delete(r)}return t}clear(){return new BaggageImpl}}t.BaggageImpl=BaggageImpl},830:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.baggageEntryMetadataSymbol=void 0;t.baggageEntryMetadataSymbol=Symbol(\"BaggageEntryMetadata\")},369:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.baggageEntryMetadataFromString=t.createBaggage=void 0;const n=r(930);const a=r(993);const o=r(830);const i=n.DiagAPI.instance();function createBaggage(e={}){return new a.BaggageImpl(new Map(Object.entries(e)))}t.createBaggage=createBaggage;function baggageEntryMetadataFromString(e){if(typeof e!==\"string\"){i.error(`Cannot create baggage metadata from unknown type: ${typeof e}`);e=\"\"}return{__TYPE__:o.baggageEntryMetadataSymbol,toString(){return e}}}t.baggageEntryMetadataFromString=baggageEntryMetadataFromString},67:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.context=void 0;const n=r(491);t.context=n.ContextAPI.getInstance()},223:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopContextManager=void 0;const n=r(780);class NoopContextManager{active(){return n.ROOT_CONTEXT}with(e,t,r,...n){return t.call(r,...n)}bind(e,t){return t}enable(){return this}disable(){return this}}t.NoopContextManager=NoopContextManager},780:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ROOT_CONTEXT=t.createContextKey=void 0;function createContextKey(e){return Symbol.for(e)}t.createContextKey=createContextKey;class BaseContext{constructor(e){const t=this;t._currentContext=e?new Map(e):new Map;t.getValue=e=>t._currentContext.get(e);t.setValue=(e,r)=>{const n=new BaseContext(t._currentContext);n._currentContext.set(e,r);return n};t.deleteValue=e=>{const r=new BaseContext(t._currentContext);r._currentContext.delete(e);return r}}}t.ROOT_CONTEXT=new BaseContext},506:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.diag=void 0;const n=r(930);t.diag=n.DiagAPI.instance()},56:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagComponentLogger=void 0;const n=r(172);class DiagComponentLogger{constructor(e){this._namespace=e.namespace||\"DiagComponentLogger\"}debug(...e){return logProxy(\"debug\",this._namespace,e)}error(...e){return logProxy(\"error\",this._namespace,e)}info(...e){return logProxy(\"info\",this._namespace,e)}warn(...e){return logProxy(\"warn\",this._namespace,e)}verbose(...e){return logProxy(\"verbose\",this._namespace,e)}}t.DiagComponentLogger=DiagComponentLogger;function logProxy(e,t,r){const a=(0,n.getGlobal)(\"diag\");if(!a){return}r.unshift(t);return a[e](...r)}},972:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagConsoleLogger=void 0;const r=[{n:\"error\",c:\"error\"},{n:\"warn\",c:\"warn\"},{n:\"info\",c:\"info\"},{n:\"debug\",c:\"debug\"},{n:\"verbose\",c:\"trace\"}];class DiagConsoleLogger{constructor(){function _consoleFunc(e){return function(...t){if(console){let r=console[e];if(typeof r!==\"function\"){r=console.log}if(typeof r===\"function\"){return r.apply(console,t)}}}}for(let e=0;e<r.length;e++){this[r[e].n]=_consoleFunc(r[e].c)}}}t.DiagConsoleLogger=DiagConsoleLogger},912:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createLogLevelDiagLogger=void 0;const n=r(957);function createLogLevelDiagLogger(e,t){if(e<n.DiagLogLevel.NONE){e=n.DiagLogLevel.NONE}else if(e>n.DiagLogLevel.ALL){e=n.DiagLogLevel.ALL}t=t||{};function _filterFunc(r,n){const a=t[r];if(typeof a===\"function\"&&e>=n){return a.bind(t)}return function(){}}return{error:_filterFunc(\"error\",n.DiagLogLevel.ERROR),warn:_filterFunc(\"warn\",n.DiagLogLevel.WARN),info:_filterFunc(\"info\",n.DiagLogLevel.INFO),debug:_filterFunc(\"debug\",n.DiagLogLevel.DEBUG),verbose:_filterFunc(\"verbose\",n.DiagLogLevel.VERBOSE)}}t.createLogLevelDiagLogger=createLogLevelDiagLogger},957:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.DiagLogLevel=void 0;var r;(function(e){e[e[\"NONE\"]=0]=\"NONE\";e[e[\"ERROR\"]=30]=\"ERROR\";e[e[\"WARN\"]=50]=\"WARN\";e[e[\"INFO\"]=60]=\"INFO\";e[e[\"DEBUG\"]=70]=\"DEBUG\";e[e[\"VERBOSE\"]=80]=\"VERBOSE\";e[e[\"ALL\"]=9999]=\"ALL\"})(r=t.DiagLogLevel||(t.DiagLogLevel={}))},172:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.unregisterGlobal=t.getGlobal=t.registerGlobal=void 0;const n=r(200);const a=r(521);const o=r(130);const i=a.VERSION.split(\".\")[0];const c=Symbol.for(`opentelemetry.js.api.${i}`);const s=n._globalThis;function registerGlobal(e,t,r,n=false){var o;const i=s[c]=(o=s[c])!==null&&o!==void 0?o:{version:a.VERSION};if(!n&&i[e]){const t=new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${e}`);r.error(t.stack||t.message);return false}if(i.version!==a.VERSION){const t=new Error(`@opentelemetry/api: Registration of version v${i.version} for ${e} does not match previously registered API v${a.VERSION}`);r.error(t.stack||t.message);return false}i[e]=t;r.debug(`@opentelemetry/api: Registered a global for ${e} v${a.VERSION}.`);return true}t.registerGlobal=registerGlobal;function getGlobal(e){var t,r;const n=(t=s[c])===null||t===void 0?void 0:t.version;if(!n||!(0,o.isCompatible)(n)){return}return(r=s[c])===null||r===void 0?void 0:r[e]}t.getGlobal=getGlobal;function unregisterGlobal(e,t){t.debug(`@opentelemetry/api: Unregistering a global for ${e} v${a.VERSION}.`);const r=s[c];if(r){delete r[e]}}t.unregisterGlobal=unregisterGlobal},130:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.isCompatible=t._makeCompatibilityCheck=void 0;const n=r(521);const a=/^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;function _makeCompatibilityCheck(e){const t=new Set([e]);const r=new Set;const n=e.match(a);if(!n){return()=>false}const o={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(o.prerelease!=null){return function isExactmatch(t){return t===e}}function _reject(e){r.add(e);return false}function _accept(e){t.add(e);return true}return function isCompatible(e){if(t.has(e)){return true}if(r.has(e)){return false}const n=e.match(a);if(!n){return _reject(e)}const i={major:+n[1],minor:+n[2],patch:+n[3],prerelease:n[4]};if(i.prerelease!=null){return _reject(e)}if(o.major!==i.major){return _reject(e)}if(o.major===0){if(o.minor===i.minor&&o.patch<=i.patch){return _accept(e)}return _reject(e)}if(o.minor<=i.minor){return _accept(e)}return _reject(e)}}t._makeCompatibilityCheck=_makeCompatibilityCheck;t.isCompatible=_makeCompatibilityCheck(n.VERSION)},886:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.metrics=void 0;const n=r(653);t.metrics=n.MetricsAPI.getInstance()},901:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ValueType=void 0;var r;(function(e){e[e[\"INT\"]=0]=\"INT\";e[e[\"DOUBLE\"]=1]=\"DOUBLE\"})(r=t.ValueType||(t.ValueType={}))},102:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createNoopMeter=t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=t.NOOP_OBSERVABLE_GAUGE_METRIC=t.NOOP_OBSERVABLE_COUNTER_METRIC=t.NOOP_UP_DOWN_COUNTER_METRIC=t.NOOP_HISTOGRAM_METRIC=t.NOOP_COUNTER_METRIC=t.NOOP_METER=t.NoopObservableUpDownCounterMetric=t.NoopObservableGaugeMetric=t.NoopObservableCounterMetric=t.NoopObservableMetric=t.NoopHistogramMetric=t.NoopUpDownCounterMetric=t.NoopCounterMetric=t.NoopMetric=t.NoopMeter=void 0;class NoopMeter{constructor(){}createHistogram(e,r){return t.NOOP_HISTOGRAM_METRIC}createCounter(e,r){return t.NOOP_COUNTER_METRIC}createUpDownCounter(e,r){return t.NOOP_UP_DOWN_COUNTER_METRIC}createObservableGauge(e,r){return t.NOOP_OBSERVABLE_GAUGE_METRIC}createObservableCounter(e,r){return t.NOOP_OBSERVABLE_COUNTER_METRIC}createObservableUpDownCounter(e,r){return t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC}addBatchObservableCallback(e,t){}removeBatchObservableCallback(e){}}t.NoopMeter=NoopMeter;class NoopMetric{}t.NoopMetric=NoopMetric;class NoopCounterMetric extends NoopMetric{add(e,t){}}t.NoopCounterMetric=NoopCounterMetric;class NoopUpDownCounterMetric extends NoopMetric{add(e,t){}}t.NoopUpDownCounterMetric=NoopUpDownCounterMetric;class NoopHistogramMetric extends NoopMetric{record(e,t){}}t.NoopHistogramMetric=NoopHistogramMetric;class NoopObservableMetric{addCallback(e){}removeCallback(e){}}t.NoopObservableMetric=NoopObservableMetric;class NoopObservableCounterMetric extends NoopObservableMetric{}t.NoopObservableCounterMetric=NoopObservableCounterMetric;class NoopObservableGaugeMetric extends NoopObservableMetric{}t.NoopObservableGaugeMetric=NoopObservableGaugeMetric;class NoopObservableUpDownCounterMetric extends NoopObservableMetric{}t.NoopObservableUpDownCounterMetric=NoopObservableUpDownCounterMetric;t.NOOP_METER=new NoopMeter;t.NOOP_COUNTER_METRIC=new NoopCounterMetric;t.NOOP_HISTOGRAM_METRIC=new NoopHistogramMetric;t.NOOP_UP_DOWN_COUNTER_METRIC=new NoopUpDownCounterMetric;t.NOOP_OBSERVABLE_COUNTER_METRIC=new NoopObservableCounterMetric;t.NOOP_OBSERVABLE_GAUGE_METRIC=new NoopObservableGaugeMetric;t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC=new NoopObservableUpDownCounterMetric;function createNoopMeter(){return t.NOOP_METER}t.createNoopMeter=createNoopMeter},660:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NOOP_METER_PROVIDER=t.NoopMeterProvider=void 0;const n=r(102);class NoopMeterProvider{getMeter(e,t,r){return n.NOOP_METER}}t.NoopMeterProvider=NoopMeterProvider;t.NOOP_METER_PROVIDER=new NoopMeterProvider},200:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,\"__esModule\",{value:true});a(r(46),t)},651:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t._globalThis=void 0;t._globalThis=typeof globalThis===\"object\"?globalThis:global},46:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;Object.defineProperty(e,n,{enumerable:true,get:function(){return t[r]}})}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var a=this&&this.__exportStar||function(e,t){for(var r in e)if(r!==\"default\"&&!Object.prototype.hasOwnProperty.call(t,r))n(t,e,r)};Object.defineProperty(t,\"__esModule\",{value:true});a(r(651),t)},939:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.propagation=void 0;const n=r(181);t.propagation=n.PropagationAPI.getInstance()},874:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTextMapPropagator=void 0;class NoopTextMapPropagator{inject(e,t){}extract(e,t){return e}fields(){return[]}}t.NoopTextMapPropagator=NoopTextMapPropagator},194:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.defaultTextMapSetter=t.defaultTextMapGetter=void 0;t.defaultTextMapGetter={get(e,t){if(e==null){return undefined}return e[t]},keys(e){if(e==null){return[]}return Object.keys(e)}};t.defaultTextMapSetter={set(e,t,r){if(e==null){return}e[t]=r}}},845:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.trace=void 0;const n=r(997);t.trace=n.TraceAPI.getInstance()},403:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NonRecordingSpan=void 0;const n=r(476);class NonRecordingSpan{constructor(e=n.INVALID_SPAN_CONTEXT){this._spanContext=e}spanContext(){return this._spanContext}setAttribute(e,t){return this}setAttributes(e){return this}addEvent(e,t){return this}setStatus(e){return this}updateName(e){return this}end(e){}isRecording(){return false}recordException(e,t){}}t.NonRecordingSpan=NonRecordingSpan},614:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTracer=void 0;const n=r(491);const a=r(607);const o=r(403);const i=r(139);const c=n.ContextAPI.getInstance();class NoopTracer{startSpan(e,t,r=c.active()){const n=Boolean(t===null||t===void 0?void 0:t.root);if(n){return new o.NonRecordingSpan}const s=r&&(0,a.getSpanContext)(r);if(isSpanContext(s)&&(0,i.isSpanContextValid)(s)){return new o.NonRecordingSpan(s)}else{return new o.NonRecordingSpan}}startActiveSpan(e,t,r,n){let o;let i;let s;if(arguments.length<2){return}else if(arguments.length===2){s=t}else if(arguments.length===3){o=t;s=r}else{o=t;i=r;s=n}const u=i!==null&&i!==void 0?i:c.active();const l=this.startSpan(e,o,u);const g=(0,a.setSpan)(u,l);return c.with(g,s,undefined,l)}}t.NoopTracer=NoopTracer;function isSpanContext(e){return typeof e===\"object\"&&typeof e[\"spanId\"]===\"string\"&&typeof e[\"traceId\"]===\"string\"&&typeof e[\"traceFlags\"]===\"number\"}},124:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.NoopTracerProvider=void 0;const n=r(614);class NoopTracerProvider{getTracer(e,t,r){return new n.NoopTracer}}t.NoopTracerProvider=NoopTracerProvider},125:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ProxyTracer=void 0;const n=r(614);const a=new n.NoopTracer;class ProxyTracer{constructor(e,t,r,n){this._provider=e;this.name=t;this.version=r;this.options=n}startSpan(e,t,r){return this._getTracer().startSpan(e,t,r)}startActiveSpan(e,t,r,n){const a=this._getTracer();return Reflect.apply(a.startActiveSpan,a,arguments)}_getTracer(){if(this._delegate){return this._delegate}const e=this._provider.getDelegateTracer(this.name,this.version,this.options);if(!e){return a}this._delegate=e;return this._delegate}}t.ProxyTracer=ProxyTracer},846:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.ProxyTracerProvider=void 0;const n=r(125);const a=r(124);const o=new a.NoopTracerProvider;class ProxyTracerProvider{getTracer(e,t,r){var a;return(a=this.getDelegateTracer(e,t,r))!==null&&a!==void 0?a:new n.ProxyTracer(this,e,t,r)}getDelegate(){var e;return(e=this._delegate)!==null&&e!==void 0?e:o}setDelegate(e){this._delegate=e}getDelegateTracer(e,t,r){var n;return(n=this._delegate)===null||n===void 0?void 0:n.getTracer(e,t,r)}}t.ProxyTracerProvider=ProxyTracerProvider},996:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SamplingDecision=void 0;var r;(function(e){e[e[\"NOT_RECORD\"]=0]=\"NOT_RECORD\";e[e[\"RECORD\"]=1]=\"RECORD\";e[e[\"RECORD_AND_SAMPLED\"]=2]=\"RECORD_AND_SAMPLED\"})(r=t.SamplingDecision||(t.SamplingDecision={}))},607:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.getSpanContext=t.setSpanContext=t.deleteSpan=t.setSpan=t.getActiveSpan=t.getSpan=void 0;const n=r(780);const a=r(403);const o=r(491);const i=(0,n.createContextKey)(\"OpenTelemetry Context Key SPAN\");function getSpan(e){return e.getValue(i)||undefined}t.getSpan=getSpan;function getActiveSpan(){return getSpan(o.ContextAPI.getInstance().active())}t.getActiveSpan=getActiveSpan;function setSpan(e,t){return e.setValue(i,t)}t.setSpan=setSpan;function deleteSpan(e){return e.deleteValue(i)}t.deleteSpan=deleteSpan;function setSpanContext(e,t){return setSpan(e,new a.NonRecordingSpan(t))}t.setSpanContext=setSpanContext;function getSpanContext(e){var t;return(t=getSpan(e))===null||t===void 0?void 0:t.spanContext()}t.getSpanContext=getSpanContext},325:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceStateImpl=void 0;const n=r(564);const a=32;const o=512;const i=\",\";const c=\"=\";class TraceStateImpl{constructor(e){this._internalState=new Map;if(e)this._parse(e)}set(e,t){const r=this._clone();if(r._internalState.has(e)){r._internalState.delete(e)}r._internalState.set(e,t);return r}unset(e){const t=this._clone();t._internalState.delete(e);return t}get(e){return this._internalState.get(e)}serialize(){return this._keys().reduce(((e,t)=>{e.push(t+c+this.get(t));return e}),[]).join(i)}_parse(e){if(e.length>o)return;this._internalState=e.split(i).reverse().reduce(((e,t)=>{const r=t.trim();const a=r.indexOf(c);if(a!==-1){const o=r.slice(0,a);const i=r.slice(a+1,t.length);if((0,n.validateKey)(o)&&(0,n.validateValue)(i)){e.set(o,i)}else{}}return e}),new Map);if(this._internalState.size>a){this._internalState=new Map(Array.from(this._internalState.entries()).reverse().slice(0,a))}}_keys(){return Array.from(this._internalState.keys()).reverse()}_clone(){const e=new TraceStateImpl;e._internalState=new Map(this._internalState);return e}}t.TraceStateImpl=TraceStateImpl},564:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.validateValue=t.validateKey=void 0;const r=\"[_0-9a-z-*/]\";const n=`[a-z]${r}{0,255}`;const a=`[a-z0-9]${r}{0,240}@[a-z]${r}{0,13}`;const o=new RegExp(`^(?:${n}|${a})$`);const i=/^[ -~]{0,255}[!-~]$/;const c=/,|=/;function validateKey(e){return o.test(e)}t.validateKey=validateKey;function validateValue(e){return i.test(e)&&!c.test(e)}t.validateValue=validateValue},98:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.createTraceState=void 0;const n=r(325);function createTraceState(e){return new n.TraceStateImpl(e)}t.createTraceState=createTraceState},476:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.INVALID_SPAN_CONTEXT=t.INVALID_TRACEID=t.INVALID_SPANID=void 0;const n=r(475);t.INVALID_SPANID=\"0000000000000000\";t.INVALID_TRACEID=\"00000000000000000000000000000000\";t.INVALID_SPAN_CONTEXT={traceId:t.INVALID_TRACEID,spanId:t.INVALID_SPANID,traceFlags:n.TraceFlags.NONE}},357:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SpanKind=void 0;var r;(function(e){e[e[\"INTERNAL\"]=0]=\"INTERNAL\";e[e[\"SERVER\"]=1]=\"SERVER\";e[e[\"CLIENT\"]=2]=\"CLIENT\";e[e[\"PRODUCER\"]=3]=\"PRODUCER\";e[e[\"CONSUMER\"]=4]=\"CONSUMER\"})(r=t.SpanKind||(t.SpanKind={}))},139:(e,t,r)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.wrapSpanContext=t.isSpanContextValid=t.isValidSpanId=t.isValidTraceId=void 0;const n=r(476);const a=r(403);const o=/^([0-9a-f]{32})$/i;const i=/^[0-9a-f]{16}$/i;function isValidTraceId(e){return o.test(e)&&e!==n.INVALID_TRACEID}t.isValidTraceId=isValidTraceId;function isValidSpanId(e){return i.test(e)&&e!==n.INVALID_SPANID}t.isValidSpanId=isValidSpanId;function isSpanContextValid(e){return isValidTraceId(e.traceId)&&isValidSpanId(e.spanId)}t.isSpanContextValid=isSpanContextValid;function wrapSpanContext(e){return new a.NonRecordingSpan(e)}t.wrapSpanContext=wrapSpanContext},847:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.SpanStatusCode=void 0;var r;(function(e){e[e[\"UNSET\"]=0]=\"UNSET\";e[e[\"OK\"]=1]=\"OK\";e[e[\"ERROR\"]=2]=\"ERROR\"})(r=t.SpanStatusCode||(t.SpanStatusCode={}))},475:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.TraceFlags=void 0;var r;(function(e){e[e[\"NONE\"]=0]=\"NONE\";e[e[\"SAMPLED\"]=1]=\"SAMPLED\"})(r=t.TraceFlags||(t.TraceFlags={}))},521:(e,t)=>{Object.defineProperty(t,\"__esModule\",{value:true});t.VERSION=void 0;t.VERSION=\"1.6.0\"}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var a=t[r]={exports:{}};var o=true;try{e[r].call(a.exports,a,a.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return a.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r={};(()=>{var e=r;Object.defineProperty(e,\"__esModule\",{value:true});e.trace=e.propagation=e.metrics=e.diag=e.context=e.INVALID_SPAN_CONTEXT=e.INVALID_TRACEID=e.INVALID_SPANID=e.isValidSpanId=e.isValidTraceId=e.isSpanContextValid=e.createTraceState=e.TraceFlags=e.SpanStatusCode=e.SpanKind=e.SamplingDecision=e.ProxyTracerProvider=e.ProxyTracer=e.defaultTextMapSetter=e.defaultTextMapGetter=e.ValueType=e.createNoopMeter=e.DiagLogLevel=e.DiagConsoleLogger=e.ROOT_CONTEXT=e.createContextKey=e.baggageEntryMetadataFromString=void 0;var t=__nccwpck_require__(369);Object.defineProperty(e,\"baggageEntryMetadataFromString\",{enumerable:true,get:function(){return t.baggageEntryMetadataFromString}});var n=__nccwpck_require__(780);Object.defineProperty(e,\"createContextKey\",{enumerable:true,get:function(){return n.createContextKey}});Object.defineProperty(e,\"ROOT_CONTEXT\",{enumerable:true,get:function(){return n.ROOT_CONTEXT}});var a=__nccwpck_require__(972);Object.defineProperty(e,\"DiagConsoleLogger\",{enumerable:true,get:function(){return a.DiagConsoleLogger}});var o=__nccwpck_require__(957);Object.defineProperty(e,\"DiagLogLevel\",{enumerable:true,get:function(){return o.DiagLogLevel}});var i=__nccwpck_require__(102);Object.defineProperty(e,\"createNoopMeter\",{enumerable:true,get:function(){return i.createNoopMeter}});var c=__nccwpck_require__(901);Object.defineProperty(e,\"ValueType\",{enumerable:true,get:function(){return c.ValueType}});var s=__nccwpck_require__(194);Object.defineProperty(e,\"defaultTextMapGetter\",{enumerable:true,get:function(){return s.defaultTextMapGetter}});Object.defineProperty(e,\"defaultTextMapSetter\",{enumerable:true,get:function(){return s.defaultTextMapSetter}});var u=__nccwpck_require__(125);Object.defineProperty(e,\"ProxyTracer\",{enumerable:true,get:function(){return u.ProxyTracer}});var l=__nccwpck_require__(846);Object.defineProperty(e,\"ProxyTracerProvider\",{enumerable:true,get:function(){return l.ProxyTracerProvider}});var g=__nccwpck_require__(996);Object.defineProperty(e,\"SamplingDecision\",{enumerable:true,get:function(){return g.SamplingDecision}});var p=__nccwpck_require__(357);Object.defineProperty(e,\"SpanKind\",{enumerable:true,get:function(){return p.SpanKind}});var d=__nccwpck_require__(847);Object.defineProperty(e,\"SpanStatusCode\",{enumerable:true,get:function(){return d.SpanStatusCode}});var _=__nccwpck_require__(475);Object.defineProperty(e,\"TraceFlags\",{enumerable:true,get:function(){return _.TraceFlags}});var f=__nccwpck_require__(98);Object.defineProperty(e,\"createTraceState\",{enumerable:true,get:function(){return f.createTraceState}});var b=__nccwpck_require__(139);Object.defineProperty(e,\"isSpanContextValid\",{enumerable:true,get:function(){return b.isSpanContextValid}});Object.defineProperty(e,\"isValidTraceId\",{enumerable:true,get:function(){return b.isValidTraceId}});Object.defineProperty(e,\"isValidSpanId\",{enumerable:true,get:function(){return b.isValidSpanId}});var v=__nccwpck_require__(476);Object.defineProperty(e,\"INVALID_SPANID\",{enumerable:true,get:function(){return v.INVALID_SPANID}});Object.defineProperty(e,\"INVALID_TRACEID\",{enumerable:true,get:function(){return v.INVALID_TRACEID}});Object.defineProperty(e,\"INVALID_SPAN_CONTEXT\",{enumerable:true,get:function(){return v.INVALID_SPAN_CONTEXT}});const O=__nccwpck_require__(67);Object.defineProperty(e,\"context\",{enumerable:true,get:function(){return O.context}});const P=__nccwpck_require__(506);Object.defineProperty(e,\"diag\",{enumerable:true,get:function(){return P.diag}});const N=__nccwpck_require__(886);Object.defineProperty(e,\"metrics\",{enumerable:true,get:function(){return N.metrics}});const S=__nccwpck_require__(939);Object.defineProperty(e,\"propagation\",{enumerable:true,get:function(){return S.propagation}});const C=__nccwpck_require__(845);Object.defineProperty(e,\"trace\",{enumerable:true,get:function(){return C.trace}});e[\"default\"]={context:O.context,diag:P.diag,metrics:N.metrics,propagation:S.propagation,trace:C.trace}})();module.exports=r})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL0BvcGVudGVsZW1ldHJ5L2FwaS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxNQUFNLGFBQWEsT0FBTyxjQUFjLHNDQUFzQyxXQUFXLEVBQUUsb0JBQW9CLGVBQWUsZUFBZSxlQUFlLGtCQUFrQixpQ0FBaUMsaUJBQWlCLGVBQWUscUJBQXFCLG9CQUFvQiw4QkFBOEIsc0JBQXNCLDJCQUEyQixxREFBcUQsU0FBUywwQ0FBMEMsaUJBQWlCLGtEQUFrRCxVQUFVLDJDQUEyQyxxQkFBcUIsNEJBQTRCLFVBQVUsb0NBQW9DLGdEQUFnRCx3QkFBd0IsZUFBZSxzQ0FBc0MsV0FBVyxFQUFFLGlCQUFpQixjQUFjLGVBQWUsZUFBZSxlQUFlLGVBQWUsY0FBYyxjQUFjLHNCQUFzQixzQkFBc0IsZ0NBQWdDLGFBQWEsbUJBQW1CLGFBQWEsc0JBQXNCLDZCQUE2QixJQUFJLFVBQVUsVUFBVSx3SkFBd0osb0RBQW9ELGFBQWEsd0JBQXdCLEdBQUcsWUFBWSxnQ0FBZ0Msa0dBQWtHLGtDQUFrQyxxRkFBcUYsa0RBQWtELEVBQUUsR0FBRyxvRUFBb0UsRUFBRSxHQUFHLDZDQUE2QyxzQkFBc0IsZUFBZSw2QkFBNkIsd0RBQXdELCtCQUErQiwyQkFBMkIseUJBQXlCLHlCQUF5QiwyQkFBMkIsa0JBQWtCLG9CQUFvQiwyQkFBMkIsdUJBQXVCLGtCQUFrQixlQUFlLHNDQUFzQyxXQUFXLEVBQUUsb0JBQW9CLGVBQWUsZUFBZSxlQUFlLGtCQUFrQixpQkFBaUIsZUFBZSxxQkFBcUIsb0JBQW9CLDhCQUE4QixzQkFBc0IsMEJBQTBCLHFEQUFxRCxtQkFBbUIsZ0RBQWdELGdCQUFnQiwrQ0FBK0MsVUFBVSxnREFBZ0Qsd0JBQXdCLGVBQWUsc0NBQXNDLFdBQVcsRUFBRSx3QkFBd0IsZUFBZSxlQUFlLGVBQWUsZUFBZSxlQUFlLGVBQWUsc0JBQXNCLG9DQUFvQyxxQkFBcUIsY0FBYyxtQ0FBbUMsNkJBQTZCLHlDQUF5Qyw2QkFBNkIsbUNBQW1DLHFCQUFxQixvQkFBb0Isa0NBQWtDLHNCQUFzQix1QkFBdUIscURBQXFELHFDQUFxQyxpREFBaUQsc0NBQXNDLGtEQUFrRCxTQUFTLDRDQUE0QyxVQUFVLCtDQUErQyx1QkFBdUIsNkJBQTZCLGdDQUFnQyxlQUFlLHNDQUFzQyxXQUFXLEVBQUUsa0JBQWtCLGVBQWUsZUFBZSxlQUFlLGVBQWUsZUFBZSxnQkFBZ0IsZUFBZSxjQUFjLG9EQUFvRCx1Q0FBdUMsNkNBQTZDLDZCQUE2Qix1QkFBdUIsbUNBQW1DLHFDQUFxQyx1QkFBdUIscUNBQXFDLHFCQUFxQixvQkFBb0IsNEJBQTRCLHNCQUFzQiwyQkFBMkIsK0VBQStFLE1BQU0seUNBQXlDLFNBQVMsb0JBQW9CLG9EQUFvRCxlQUFlLCtDQUErQyxVQUFVLCtDQUErQyxxREFBcUQsb0JBQW9CLGVBQWUsc0NBQXNDLFdBQVcsRUFBRSxvRUFBb0UsZUFBZSxlQUFlLDREQUE0RCx1QkFBdUIsZ0NBQWdDLHdCQUF3Qiw0QkFBNEIsdURBQXVELG9DQUFvQyx5QkFBeUIsdUJBQXVCLHdCQUF3QiwwQkFBMEIsd0JBQXdCLDhCQUE4QixhQUFhLHNDQUFzQyxXQUFXLEVBQUUscUJBQXFCLGtCQUFrQixlQUFlLG1DQUFtQyxZQUFZLDZCQUE2QixPQUFPLGlCQUFpQix1QkFBdUIsSUFBSSxnQkFBZ0IsaUVBQWlFLGNBQWMsdUNBQXVDLG9CQUFvQixTQUFTLGVBQWUsdUNBQXVDLHFCQUFxQixTQUFTLG9CQUFvQix1Q0FBdUMsa0JBQWtCLHFCQUFxQixTQUFTLFFBQVEsd0JBQXdCLDBCQUEwQixhQUFhLHNDQUFzQyxXQUFXLEVBQUUsb0NBQW9DLDREQUE0RCxlQUFlLHNDQUFzQyxXQUFXLEVBQUUsd0RBQXdELGVBQWUsZUFBZSxlQUFlLDZCQUE2QiwyQkFBMkIsRUFBRSxxREFBcUQsOEJBQThCLDJDQUEyQyx3QkFBd0IsNkRBQTZELFNBQVMsR0FBRyxLQUFLLE9BQU8saURBQWlELFdBQVcsZ0VBQWdFLGNBQWMsc0NBQXNDLFdBQVcsRUFBRSxpQkFBaUIsZUFBZSxxQ0FBcUMsZUFBZSxzQ0FBc0MsV0FBVyxFQUFFLDRCQUE0QixlQUFlLHlCQUF5QixTQUFTLHNCQUFzQixpQkFBaUIsc0JBQXNCLFVBQVUsU0FBUyxTQUFTLFlBQVksVUFBVSxhQUFhLHdDQUF3QyxhQUFhLHNDQUFzQyxXQUFXLEVBQUUseUNBQXlDLDZCQUE2QixxQkFBcUIsb0NBQW9DLGtCQUFrQixlQUFlLGFBQWEsdUNBQXVDLHVDQUF1QyxtQkFBbUIsMkNBQTJDLDJCQUEyQixVQUFVLGtCQUFrQiwyQ0FBMkMsNEJBQTRCLFdBQVcsK0JBQStCLGVBQWUsc0NBQXNDLFdBQVcsRUFBRSxjQUFjLGVBQWUsNEJBQTRCLGNBQWMsc0NBQXNDLFdBQVcsRUFBRSw2QkFBNkIsZUFBZSwwQkFBMEIsZUFBZSxtREFBbUQsWUFBWSwyQ0FBMkMsWUFBWSwyQ0FBMkMsV0FBVywwQ0FBMEMsV0FBVywwQ0FBMEMsY0FBYyw4Q0FBOEMsMENBQTBDLHlCQUF5QixnQ0FBZ0MsT0FBTyxPQUFPLGFBQWEsbUJBQW1CLGFBQWEsc0NBQXNDLFdBQVcsRUFBRSwyQkFBMkIsVUFBVSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsY0FBYyx5QkFBeUIsc0JBQXNCLFlBQVksaUJBQWlCLDBCQUEwQixjQUFjLDBCQUEwQiw2QkFBNkIsWUFBWSxXQUFXLEtBQUssb0NBQW9DLHNDQUFzQyxlQUFlLHNDQUFzQyxXQUFXLEVBQUUsa0NBQWtDLGVBQWUsdUNBQXVDLDBCQUEwQixzQkFBc0IsOEJBQThCLHFCQUFxQixRQUFRLDBCQUEwQixhQUFhLGdDQUFnQyxpQkFBaUIsb0JBQW9CLE9BQU8saVBBQWlQLG9EQUFvRCxhQUFhLHNDQUFzQyxXQUFXLEVBQUUsc0JBQXNCLE1BQU0sYUFBYSxzQkFBc0IseUJBQXlCLHVCQUF1Qix1QkFBdUIseUJBQXlCLDZCQUE2Qix1QkFBdUIsc0NBQXNDLEdBQUcsZUFBZSxzQ0FBc0MsV0FBVyxFQUFFLHVEQUF1RCxlQUFlLGVBQWUsZUFBZSxnQ0FBZ0MsMkNBQTJDLEVBQUUsR0FBRyxzQkFBc0IsdUNBQXVDLE1BQU0sNENBQTRDLG1CQUFtQixhQUFhLGtGQUFrRixFQUFFLEdBQUcsNEJBQTRCLGFBQWEsMEJBQTBCLGtFQUFrRSxXQUFXLE1BQU0sR0FBRyw0Q0FBNEMsVUFBVSxHQUFHLDRCQUE0QixhQUFhLE9BQU8sdURBQXVELEdBQUcsR0FBRyxVQUFVLElBQUksWUFBWSxnQ0FBZ0Msc0JBQXNCLFFBQVEscURBQXFELCtCQUErQixPQUFPLDhDQUE4QyxzQkFBc0IsK0JBQStCLDBEQUEwRCxHQUFHLEdBQUcsVUFBVSxJQUFJLGFBQWEsTUFBTSxhQUFhLG9DQUFvQyxlQUFlLHNDQUFzQyxXQUFXLEVBQUUsZ0RBQWdELGVBQWUsd0NBQXdDLG9DQUFvQyxxQkFBcUIsZ0JBQWdCLG1CQUFtQixPQUFPLGdCQUFnQixTQUFTLHFEQUFxRCx1QkFBdUIsZ0NBQWdDLGNBQWMsb0JBQW9CLFNBQVMsYUFBYSxvQkFBb0IsU0FBUyxZQUFZLGdDQUFnQyxhQUFhLFlBQVksYUFBYSxhQUFhLG1CQUFtQixPQUFPLGtCQUFrQixTQUFTLHFEQUFxRCx1QkFBdUIsa0JBQWtCLHNCQUFzQixrQkFBa0IsZ0JBQWdCLHdDQUF3QyxrQkFBa0Isa0JBQWtCLHFCQUFxQixrQkFBa0IsbUJBQW1CLGtEQUFrRCxrREFBa0QsZUFBZSxzQ0FBc0MsV0FBVyxFQUFFLGlCQUFpQixlQUFlLHFDQUFxQyxhQUFhLHNDQUFzQyxXQUFXLEVBQUUsbUJBQW1CLE1BQU0sYUFBYSxvQkFBb0IsMEJBQTBCLGdDQUFnQyxHQUFHLGFBQWEsc0NBQXNDLFdBQVcsRUFBRSw2YUFBNmEsZ0JBQWdCLGVBQWUscUJBQXFCLCtCQUErQixtQkFBbUIsNkJBQTZCLHlCQUF5QixxQ0FBcUMsMkJBQTJCLHNDQUFzQyw2QkFBNkIsd0NBQXdDLG1DQUFtQyxnREFBZ0QsaUNBQWlDLG1DQUFtQyxzQkFBc0Isa0JBQWtCLHdCQUF3QiwyQ0FBMkMsV0FBVyxzQ0FBc0MsaURBQWlELFdBQVcsa0RBQWtELDZDQUE2QyxjQUFjLDBDQUEwQywyQkFBMkIsZ0JBQWdCLG9CQUFvQiw0Q0FBNEMsZ0VBQWdFLDBEQUEwRCw4REFBOEQsc0RBQXNELHNFQUFzRSxzRUFBc0UsMkJBQTJCLDRDQUE0QyxnREFBZ0QsMERBQTBELGlFQUFpRSw2REFBNkQsK0VBQStFLDJCQUEyQixvQkFBb0Isa0NBQWtDLGVBQWUsc0NBQXNDLFdBQVcsRUFBRSxpREFBaUQsZUFBZSx3QkFBd0IsZ0JBQWdCLHFCQUFxQixzQ0FBc0MsNENBQTRDLHFCQUFxQixtRUFBbUUscUJBQXFCLDJCQUEyQiwrQkFBK0IsYUFBYSxFQUFFLG1CQUFtQixxQkFBcUIsVUFBVSxFQUFFLDZDQUE2QyxzRkFBc0Ysc0NBQXNDLFdBQVcsRUFBRSxXQUFXLGFBQWEsc0NBQXNDLFdBQVcsRUFBRSxxQkFBcUIsNkRBQTZELG9CQUFvQixtRUFBbUUscUJBQXFCLDJCQUEyQiwrQkFBK0IsYUFBYSxFQUFFLG1CQUFtQixxQkFBcUIsVUFBVSxFQUFFLDZDQUE2QyxzRkFBc0Ysc0NBQXNDLFdBQVcsRUFBRSxZQUFZLGVBQWUsc0NBQXNDLFdBQVcsRUFBRSxxQkFBcUIsZUFBZSw2Q0FBNkMsYUFBYSxzQ0FBc0MsV0FBVyxFQUFFLCtCQUErQiw0QkFBNEIsYUFBYSxhQUFhLFNBQVMsU0FBUyxVQUFVLDhDQUE4QyxhQUFhLHNDQUFzQyxXQUFXLEVBQUUscURBQXFELHdCQUF3QixTQUFTLFlBQVksaUJBQWlCLFlBQVksU0FBUyxZQUFZLFNBQVMsd0JBQXdCLHdCQUF3QixXQUFXLFlBQVksT0FBTyxTQUFTLGVBQWUsc0NBQXNDLFdBQVcsRUFBRSxlQUFlLGVBQWUsaUNBQWlDLGVBQWUsc0NBQXNDLFdBQVcsRUFBRSwwQkFBMEIsZUFBZSx1QkFBdUIsc0NBQXNDLG9CQUFvQixjQUFjLHlCQUF5QixrQkFBa0IsWUFBWSxpQkFBaUIsWUFBWSxjQUFjLFlBQVksYUFBYSxZQUFZLGNBQWMsWUFBWSxRQUFRLGNBQWMsYUFBYSx1QkFBdUIsb0NBQW9DLGVBQWUsc0NBQXNDLFdBQVcsRUFBRSxvQkFBb0IsZUFBZSxlQUFlLGVBQWUsZUFBZSxtQ0FBbUMsaUJBQWlCLDRCQUE0QixvREFBb0QsTUFBTSw4QkFBOEIsbUNBQW1DLGtEQUFrRCxpQ0FBaUMsS0FBSywrQkFBK0IseUJBQXlCLE1BQU0sTUFBTSxNQUFNLHVCQUF1QixPQUFPLDhCQUE4QixJQUFJLDhCQUE4QixJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSwwQ0FBMEMsOEJBQThCLDJCQUEyQixnQ0FBZ0Msd0JBQXdCLDBCQUEwQiw4SEFBOEgsZUFBZSxzQ0FBc0MsV0FBVyxFQUFFLDRCQUE0QixlQUFlLHlCQUF5QixpQkFBaUIseUJBQXlCLHdDQUF3QyxlQUFlLHNDQUFzQyxXQUFXLEVBQUUscUJBQXFCLGVBQWUseUJBQXlCLGtCQUFrQixxQkFBcUIsaUJBQWlCLFlBQVksZUFBZSxlQUFlLGlCQUFpQiwwQ0FBMEMseUJBQXlCLDBCQUEwQixvREFBb0QsYUFBYSxtQkFBbUIsc0JBQXNCLDhFQUE4RSxPQUFPLFNBQVMsaUJBQWlCLHVCQUF1QiwwQkFBMEIsZUFBZSxzQ0FBc0MsV0FBVyxFQUFFLDZCQUE2QixlQUFlLGVBQWUsaUNBQWlDLDBCQUEwQixpQkFBaUIsTUFBTSwyRkFBMkYsY0FBYyxNQUFNLGdEQUFnRCxlQUFlLGlCQUFpQix5QkFBeUIsTUFBTSx1RUFBdUUsMENBQTBDLGFBQWEsc0NBQXNDLFdBQVcsRUFBRSwwQkFBMEIsTUFBTSxhQUFhLGtDQUFrQywwQkFBMEIsa0RBQWtELDhDQUE4QyxHQUFHLGVBQWUsc0NBQXNDLFdBQVcsRUFBRSwwRkFBMEYsZUFBZSxlQUFlLGVBQWUsaUVBQWlFLG9CQUFvQixnQ0FBZ0Msa0JBQWtCLHlCQUF5QixvREFBb0QsOEJBQThCLHNCQUFzQix1QkFBdUIsa0JBQWtCLHVCQUF1Qix3QkFBd0Isd0JBQXdCLDZCQUE2Qiw0Q0FBNEMsZ0NBQWdDLDJCQUEyQixNQUFNLCtEQUErRCxnQ0FBZ0MsZUFBZSxzQ0FBc0MsV0FBVyxFQUFFLHdCQUF3QixlQUFlLFdBQVcsWUFBWSxZQUFZLFlBQVkscUJBQXFCLGVBQWUsNEJBQTRCLG9CQUFvQixTQUFTLHNCQUFzQiw0QkFBNEIsMkJBQTJCLDBCQUEwQixTQUFTLFNBQVMsc0JBQXNCLDJCQUEyQixTQUFTLE9BQU8sa0NBQWtDLFlBQVksb0NBQW9DLHdCQUF3QixTQUFTLGNBQWMsVUFBVSxxQkFBcUIseURBQXlELGlCQUFpQixxQkFBcUIsV0FBVyxxQkFBcUIsOEJBQThCLGlEQUFpRCxXQUFXLE9BQU8sU0FBUyxXQUFXLCtCQUErQiw2RkFBNkYsUUFBUSx3REFBd0QsU0FBUywyQkFBMkIsOENBQThDLFVBQVUsZ0NBQWdDLGFBQWEsc0NBQXNDLFdBQVcsRUFBRSxxQ0FBcUMsdUJBQXVCLGdCQUFnQixHQUFHLE1BQU0sRUFBRSxtQkFBbUIsR0FBRyxNQUFNLFFBQVEsR0FBRyxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsR0FBRyxFQUFFLEtBQUssZ0JBQWdCLE1BQU0sUUFBUSxjQUFjLHdCQUF3QixpQkFBaUIsMEJBQTBCLDBCQUEwQiw2QkFBNkIsOEJBQThCLGNBQWMsc0NBQXNDLFdBQVcsRUFBRSwwQkFBMEIsZUFBZSw2QkFBNkIsK0JBQStCLG9DQUFvQyxlQUFlLHNDQUFzQyxXQUFXLEVBQUUsaUVBQWlFLGVBQWUsb0NBQW9DLHFEQUFxRCx3QkFBd0IsZ0ZBQWdGLGFBQWEsc0NBQXNDLFdBQVcsRUFBRSxrQkFBa0IsTUFBTSxhQUFhLDhCQUE4QiwwQkFBMEIsMEJBQTBCLDhCQUE4Qiw4QkFBOEIsOEJBQThCLEdBQUcsZUFBZSxzQ0FBc0MsV0FBVyxFQUFFLCtFQUErRSxlQUFlLGVBQWUsb0JBQW9CLEdBQUcsS0FBSyxtQkFBbUIsR0FBRyxJQUFJLDJCQUEyQix3Q0FBd0MsZ0NBQWdDLDBCQUEwQix1Q0FBdUMsOEJBQThCLCtCQUErQiwwREFBMEQsd0NBQXdDLDRCQUE0QixpQ0FBaUMsa0NBQWtDLGFBQWEsc0NBQXNDLFdBQVcsRUFBRSx3QkFBd0IsTUFBTSxhQUFhLHdCQUF3QixrQkFBa0Isd0JBQXdCLDBDQUEwQyxHQUFHLGFBQWEsc0NBQXNDLFdBQVcsRUFBRSxvQkFBb0IsTUFBTSxhQUFhLHNCQUFzQiw0QkFBNEIsa0NBQWtDLEdBQUcsYUFBYSxzQ0FBc0MsV0FBVyxFQUFFLGlCQUFpQixvQkFBb0IsU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUkscURBQXFELFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLGlGQUFpRixTQUFTLE1BQU0sUUFBUSxzQ0FBc0MsV0FBVyxFQUFFLDZjQUE2YywrQkFBK0IsMERBQTBELCtCQUErQix5Q0FBeUMsRUFBRSwrQkFBK0IsNENBQTRDLCtCQUErQiwyQkFBMkIsRUFBRSx3Q0FBd0MsK0JBQStCLHVCQUF1QixFQUFFLCtCQUErQiw2Q0FBNkMsK0JBQStCLDRCQUE0QixFQUFFLCtCQUErQix3Q0FBd0MsK0JBQStCLHVCQUF1QixFQUFFLCtCQUErQiwyQ0FBMkMsK0JBQStCLDBCQUEwQixFQUFFLCtCQUErQixxQ0FBcUMsK0JBQStCLG9CQUFvQixFQUFFLCtCQUErQixnREFBZ0QsK0JBQStCLCtCQUErQixFQUFFLGdEQUFnRCwrQkFBK0IsK0JBQStCLEVBQUUsK0JBQStCLHVDQUF1QywrQkFBK0Isc0JBQXNCLEVBQUUsK0JBQStCLCtDQUErQywrQkFBK0IsOEJBQThCLEVBQUUsK0JBQStCLDRDQUE0QywrQkFBK0IsMkJBQTJCLEVBQUUsK0JBQStCLG9DQUFvQywrQkFBK0IsbUJBQW1CLEVBQUUsK0JBQStCLDBDQUEwQywrQkFBK0IseUJBQXlCLEVBQUUsK0JBQStCLHNDQUFzQywrQkFBK0IscUJBQXFCLEVBQUUsOEJBQThCLDRDQUE0QywrQkFBK0IsMkJBQTJCLEVBQUUsK0JBQStCLDhDQUE4QywrQkFBK0IsNkJBQTZCLEVBQUUsMENBQTBDLCtCQUErQix5QkFBeUIsRUFBRSx5Q0FBeUMsK0JBQStCLHdCQUF3QixFQUFFLCtCQUErQiwwQ0FBMEMsK0JBQStCLHlCQUF5QixFQUFFLDJDQUEyQywrQkFBK0IsMEJBQTBCLEVBQUUsZ0RBQWdELCtCQUErQiwrQkFBK0IsRUFBRSxnQ0FBZ0MsbUNBQW1DLCtCQUErQixrQkFBa0IsRUFBRSxpQ0FBaUMsZ0NBQWdDLCtCQUErQixlQUFlLEVBQUUsaUNBQWlDLG1DQUFtQywrQkFBK0Isa0JBQWtCLEVBQUUsaUNBQWlDLHVDQUF1QywrQkFBK0Isc0JBQXNCLEVBQUUsaUNBQWlDLGlDQUFpQywrQkFBK0IsZ0JBQWdCLEVBQUUsY0FBYyx5RkFBeUYsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9Ab3BlbnRlbGVtZXRyeS9hcGkvaW5kZXguanM/NmU4MiJdLCJzb3VyY2VzQ29udGVudCI6WyIoKCk9PntcInVzZSBzdHJpY3RcIjt2YXIgZT17NDkxOihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuQ29udGV4dEFQST12b2lkIDA7Y29uc3Qgbj1yKDIyMyk7Y29uc3QgYT1yKDE3Mik7Y29uc3Qgbz1yKDkzMCk7Y29uc3QgaT1cImNvbnRleHRcIjtjb25zdCBjPW5ldyBuLk5vb3BDb250ZXh0TWFuYWdlcjtjbGFzcyBDb250ZXh0QVBJe2NvbnN0cnVjdG9yKCl7fXN0YXRpYyBnZXRJbnN0YW5jZSgpe2lmKCF0aGlzLl9pbnN0YW5jZSl7dGhpcy5faW5zdGFuY2U9bmV3IENvbnRleHRBUEl9cmV0dXJuIHRoaXMuX2luc3RhbmNlfXNldEdsb2JhbENvbnRleHRNYW5hZ2VyKGUpe3JldHVybigwLGEucmVnaXN0ZXJHbG9iYWwpKGksZSxvLkRpYWdBUEkuaW5zdGFuY2UoKSl9YWN0aXZlKCl7cmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYWN0aXZlKCl9d2l0aChlLHQsciwuLi5uKXtyZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS53aXRoKGUsdCxyLC4uLm4pfWJpbmQoZSx0KXtyZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5iaW5kKGUsdCl9X2dldENvbnRleHRNYW5hZ2VyKCl7cmV0dXJuKDAsYS5nZXRHbG9iYWwpKGkpfHxjfWRpc2FibGUoKXt0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmRpc2FibGUoKTsoMCxhLnVucmVnaXN0ZXJHbG9iYWwpKGksby5EaWFnQVBJLmluc3RhbmNlKCkpfX10LkNvbnRleHRBUEk9Q29udGV4dEFQSX0sOTMwOihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuRGlhZ0FQST12b2lkIDA7Y29uc3Qgbj1yKDU2KTtjb25zdCBhPXIoOTEyKTtjb25zdCBvPXIoOTU3KTtjb25zdCBpPXIoMTcyKTtjb25zdCBjPVwiZGlhZ1wiO2NsYXNzIERpYWdBUEl7Y29uc3RydWN0b3IoKXtmdW5jdGlvbiBfbG9nUHJveHkoZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLnQpe2NvbnN0IHI9KDAsaS5nZXRHbG9iYWwpKFwiZGlhZ1wiKTtpZighcilyZXR1cm47cmV0dXJuIHJbZV0oLi4udCl9fWNvbnN0IGU9dGhpcztjb25zdCBzZXRMb2dnZXI9KHQscj17bG9nTGV2ZWw6by5EaWFnTG9nTGV2ZWwuSU5GT30pPT57dmFyIG4sYyxzO2lmKHQ9PT1lKXtjb25zdCB0PW5ldyBFcnJvcihcIkNhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb25cIik7ZS5lcnJvcigobj10LnN0YWNrKSE9PW51bGwmJm4hPT12b2lkIDA/bjp0Lm1lc3NhZ2UpO3JldHVybiBmYWxzZX1pZih0eXBlb2Ygcj09PVwibnVtYmVyXCIpe3I9e2xvZ0xldmVsOnJ9fWNvbnN0IHU9KDAsaS5nZXRHbG9iYWwpKFwiZGlhZ1wiKTtjb25zdCBsPSgwLGEuY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyKSgoYz1yLmxvZ0xldmVsKSE9PW51bGwmJmMhPT12b2lkIDA/YzpvLkRpYWdMb2dMZXZlbC5JTkZPLHQpO2lmKHUmJiFyLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKXtjb25zdCBlPShzPShuZXcgRXJyb3IpLnN0YWNrKSE9PW51bGwmJnMhPT12b2lkIDA/czpcIjxmYWlsZWQgdG8gZ2VuZXJhdGUgc3RhY2t0cmFjZT5cIjt1Lndhcm4oYEN1cnJlbnQgbG9nZ2VyIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZnJvbSAke2V9YCk7bC53YXJuKGBDdXJyZW50IGxvZ2dlciB3aWxsIG92ZXJ3cml0ZSBvbmUgYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gJHtlfWApfXJldHVybigwLGkucmVnaXN0ZXJHbG9iYWwpKFwiZGlhZ1wiLGwsZSx0cnVlKX07ZS5zZXRMb2dnZXI9c2V0TG9nZ2VyO2UuZGlzYWJsZT0oKT0+eygwLGkudW5yZWdpc3Rlckdsb2JhbCkoYyxlKX07ZS5jcmVhdGVDb21wb25lbnRMb2dnZXI9ZT0+bmV3IG4uRGlhZ0NvbXBvbmVudExvZ2dlcihlKTtlLnZlcmJvc2U9X2xvZ1Byb3h5KFwidmVyYm9zZVwiKTtlLmRlYnVnPV9sb2dQcm94eShcImRlYnVnXCIpO2UuaW5mbz1fbG9nUHJveHkoXCJpbmZvXCIpO2Uud2Fybj1fbG9nUHJveHkoXCJ3YXJuXCIpO2UuZXJyb3I9X2xvZ1Byb3h5KFwiZXJyb3JcIil9c3RhdGljIGluc3RhbmNlKCl7aWYoIXRoaXMuX2luc3RhbmNlKXt0aGlzLl9pbnN0YW5jZT1uZXcgRGlhZ0FQSX1yZXR1cm4gdGhpcy5faW5zdGFuY2V9fXQuRGlhZ0FQST1EaWFnQVBJfSw2NTM6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5NZXRyaWNzQVBJPXZvaWQgMDtjb25zdCBuPXIoNjYwKTtjb25zdCBhPXIoMTcyKTtjb25zdCBvPXIoOTMwKTtjb25zdCBpPVwibWV0cmljc1wiO2NsYXNzIE1ldHJpY3NBUEl7Y29uc3RydWN0b3IoKXt9c3RhdGljIGdldEluc3RhbmNlKCl7aWYoIXRoaXMuX2luc3RhbmNlKXt0aGlzLl9pbnN0YW5jZT1uZXcgTWV0cmljc0FQSX1yZXR1cm4gdGhpcy5faW5zdGFuY2V9c2V0R2xvYmFsTWV0ZXJQcm92aWRlcihlKXtyZXR1cm4oMCxhLnJlZ2lzdGVyR2xvYmFsKShpLGUsby5EaWFnQVBJLmluc3RhbmNlKCkpfWdldE1ldGVyUHJvdmlkZXIoKXtyZXR1cm4oMCxhLmdldEdsb2JhbCkoaSl8fG4uTk9PUF9NRVRFUl9QUk9WSURFUn1nZXRNZXRlcihlLHQscil7cmV0dXJuIHRoaXMuZ2V0TWV0ZXJQcm92aWRlcigpLmdldE1ldGVyKGUsdCxyKX1kaXNhYmxlKCl7KDAsYS51bnJlZ2lzdGVyR2xvYmFsKShpLG8uRGlhZ0FQSS5pbnN0YW5jZSgpKX19dC5NZXRyaWNzQVBJPU1ldHJpY3NBUEl9LDE4MTooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlByb3BhZ2F0aW9uQVBJPXZvaWQgMDtjb25zdCBuPXIoMTcyKTtjb25zdCBhPXIoODc0KTtjb25zdCBvPXIoMTk0KTtjb25zdCBpPXIoMjc3KTtjb25zdCBjPXIoMzY5KTtjb25zdCBzPXIoOTMwKTtjb25zdCB1PVwicHJvcGFnYXRpb25cIjtjb25zdCBsPW5ldyBhLk5vb3BUZXh0TWFwUHJvcGFnYXRvcjtjbGFzcyBQcm9wYWdhdGlvbkFQSXtjb25zdHJ1Y3Rvcigpe3RoaXMuY3JlYXRlQmFnZ2FnZT1jLmNyZWF0ZUJhZ2dhZ2U7dGhpcy5nZXRCYWdnYWdlPWkuZ2V0QmFnZ2FnZTt0aGlzLmdldEFjdGl2ZUJhZ2dhZ2U9aS5nZXRBY3RpdmVCYWdnYWdlO3RoaXMuc2V0QmFnZ2FnZT1pLnNldEJhZ2dhZ2U7dGhpcy5kZWxldGVCYWdnYWdlPWkuZGVsZXRlQmFnZ2FnZX1zdGF0aWMgZ2V0SW5zdGFuY2UoKXtpZighdGhpcy5faW5zdGFuY2Upe3RoaXMuX2luc3RhbmNlPW5ldyBQcm9wYWdhdGlvbkFQSX1yZXR1cm4gdGhpcy5faW5zdGFuY2V9c2V0R2xvYmFsUHJvcGFnYXRvcihlKXtyZXR1cm4oMCxuLnJlZ2lzdGVyR2xvYmFsKSh1LGUscy5EaWFnQVBJLmluc3RhbmNlKCkpfWluamVjdChlLHQscj1vLmRlZmF1bHRUZXh0TWFwU2V0dGVyKXtyZXR1cm4gdGhpcy5fZ2V0R2xvYmFsUHJvcGFnYXRvcigpLmluamVjdChlLHQscil9ZXh0cmFjdChlLHQscj1vLmRlZmF1bHRUZXh0TWFwR2V0dGVyKXtyZXR1cm4gdGhpcy5fZ2V0R2xvYmFsUHJvcGFnYXRvcigpLmV4dHJhY3QoZSx0LHIpfWZpZWxkcygpe3JldHVybiB0aGlzLl9nZXRHbG9iYWxQcm9wYWdhdG9yKCkuZmllbGRzKCl9ZGlzYWJsZSgpeygwLG4udW5yZWdpc3Rlckdsb2JhbCkodSxzLkRpYWdBUEkuaW5zdGFuY2UoKSl9X2dldEdsb2JhbFByb3BhZ2F0b3IoKXtyZXR1cm4oMCxuLmdldEdsb2JhbCkodSl8fGx9fXQuUHJvcGFnYXRpb25BUEk9UHJvcGFnYXRpb25BUEl9LDk5NzooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlRyYWNlQVBJPXZvaWQgMDtjb25zdCBuPXIoMTcyKTtjb25zdCBhPXIoODQ2KTtjb25zdCBvPXIoMTM5KTtjb25zdCBpPXIoNjA3KTtjb25zdCBjPXIoOTMwKTtjb25zdCBzPVwidHJhY2VcIjtjbGFzcyBUcmFjZUFQSXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXI9bmV3IGEuUHJveHlUcmFjZXJQcm92aWRlcjt0aGlzLndyYXBTcGFuQ29udGV4dD1vLndyYXBTcGFuQ29udGV4dDt0aGlzLmlzU3BhbkNvbnRleHRWYWxpZD1vLmlzU3BhbkNvbnRleHRWYWxpZDt0aGlzLmRlbGV0ZVNwYW49aS5kZWxldGVTcGFuO3RoaXMuZ2V0U3Bhbj1pLmdldFNwYW47dGhpcy5nZXRBY3RpdmVTcGFuPWkuZ2V0QWN0aXZlU3Bhbjt0aGlzLmdldFNwYW5Db250ZXh0PWkuZ2V0U3BhbkNvbnRleHQ7dGhpcy5zZXRTcGFuPWkuc2V0U3Bhbjt0aGlzLnNldFNwYW5Db250ZXh0PWkuc2V0U3BhbkNvbnRleHR9c3RhdGljIGdldEluc3RhbmNlKCl7aWYoIXRoaXMuX2luc3RhbmNlKXt0aGlzLl9pbnN0YW5jZT1uZXcgVHJhY2VBUEl9cmV0dXJuIHRoaXMuX2luc3RhbmNlfXNldEdsb2JhbFRyYWNlclByb3ZpZGVyKGUpe2NvbnN0IHQ9KDAsbi5yZWdpc3Rlckdsb2JhbCkocyx0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLGMuRGlhZ0FQSS5pbnN0YW5jZSgpKTtpZih0KXt0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKGUpfXJldHVybiB0fWdldFRyYWNlclByb3ZpZGVyKCl7cmV0dXJuKDAsbi5nZXRHbG9iYWwpKHMpfHx0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyfWdldFRyYWNlcihlLHQpe3JldHVybiB0aGlzLmdldFRyYWNlclByb3ZpZGVyKCkuZ2V0VHJhY2VyKGUsdCl9ZGlzYWJsZSgpeygwLG4udW5yZWdpc3Rlckdsb2JhbCkocyxjLkRpYWdBUEkuaW5zdGFuY2UoKSk7dGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcj1uZXcgYS5Qcm94eVRyYWNlclByb3ZpZGVyfX10LlRyYWNlQVBJPVRyYWNlQVBJfSwyNzc6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5kZWxldGVCYWdnYWdlPXQuc2V0QmFnZ2FnZT10LmdldEFjdGl2ZUJhZ2dhZ2U9dC5nZXRCYWdnYWdlPXZvaWQgMDtjb25zdCBuPXIoNDkxKTtjb25zdCBhPXIoNzgwKTtjb25zdCBvPSgwLGEuY3JlYXRlQ29udGV4dEtleSkoXCJPcGVuVGVsZW1ldHJ5IEJhZ2dhZ2UgS2V5XCIpO2Z1bmN0aW9uIGdldEJhZ2dhZ2UoZSl7cmV0dXJuIGUuZ2V0VmFsdWUobyl8fHVuZGVmaW5lZH10LmdldEJhZ2dhZ2U9Z2V0QmFnZ2FnZTtmdW5jdGlvbiBnZXRBY3RpdmVCYWdnYWdlKCl7cmV0dXJuIGdldEJhZ2dhZ2Uobi5Db250ZXh0QVBJLmdldEluc3RhbmNlKCkuYWN0aXZlKCkpfXQuZ2V0QWN0aXZlQmFnZ2FnZT1nZXRBY3RpdmVCYWdnYWdlO2Z1bmN0aW9uIHNldEJhZ2dhZ2UoZSx0KXtyZXR1cm4gZS5zZXRWYWx1ZShvLHQpfXQuc2V0QmFnZ2FnZT1zZXRCYWdnYWdlO2Z1bmN0aW9uIGRlbGV0ZUJhZ2dhZ2UoZSl7cmV0dXJuIGUuZGVsZXRlVmFsdWUobyl9dC5kZWxldGVCYWdnYWdlPWRlbGV0ZUJhZ2dhZ2V9LDk5MzooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5CYWdnYWdlSW1wbD12b2lkIDA7Y2xhc3MgQmFnZ2FnZUltcGx7Y29uc3RydWN0b3IoZSl7dGhpcy5fZW50cmllcz1lP25ldyBNYXAoZSk6bmV3IE1hcH1nZXRFbnRyeShlKXtjb25zdCB0PXRoaXMuX2VudHJpZXMuZ2V0KGUpO2lmKCF0KXtyZXR1cm4gdW5kZWZpbmVkfXJldHVybiBPYmplY3QuYXNzaWduKHt9LHQpfWdldEFsbEVudHJpZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9lbnRyaWVzLmVudHJpZXMoKSkubWFwKCgoW2UsdF0pPT5bZSx0XSkpfXNldEVudHJ5KGUsdCl7Y29uc3Qgcj1uZXcgQmFnZ2FnZUltcGwodGhpcy5fZW50cmllcyk7ci5fZW50cmllcy5zZXQoZSx0KTtyZXR1cm4gcn1yZW1vdmVFbnRyeShlKXtjb25zdCB0PW5ldyBCYWdnYWdlSW1wbCh0aGlzLl9lbnRyaWVzKTt0Ll9lbnRyaWVzLmRlbGV0ZShlKTtyZXR1cm4gdH1yZW1vdmVFbnRyaWVzKC4uLmUpe2NvbnN0IHQ9bmV3IEJhZ2dhZ2VJbXBsKHRoaXMuX2VudHJpZXMpO2Zvcihjb25zdCByIG9mIGUpe3QuX2VudHJpZXMuZGVsZXRlKHIpfXJldHVybiB0fWNsZWFyKCl7cmV0dXJuIG5ldyBCYWdnYWdlSW1wbH19dC5CYWdnYWdlSW1wbD1CYWdnYWdlSW1wbH0sODMwOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LmJhZ2dhZ2VFbnRyeU1ldGFkYXRhU3ltYm9sPXZvaWQgMDt0LmJhZ2dhZ2VFbnRyeU1ldGFkYXRhU3ltYm9sPVN5bWJvbChcIkJhZ2dhZ2VFbnRyeU1ldGFkYXRhXCIpfSwzNjk6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5iYWdnYWdlRW50cnlNZXRhZGF0YUZyb21TdHJpbmc9dC5jcmVhdGVCYWdnYWdlPXZvaWQgMDtjb25zdCBuPXIoOTMwKTtjb25zdCBhPXIoOTkzKTtjb25zdCBvPXIoODMwKTtjb25zdCBpPW4uRGlhZ0FQSS5pbnN0YW5jZSgpO2Z1bmN0aW9uIGNyZWF0ZUJhZ2dhZ2UoZT17fSl7cmV0dXJuIG5ldyBhLkJhZ2dhZ2VJbXBsKG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoZSkpKX10LmNyZWF0ZUJhZ2dhZ2U9Y3JlYXRlQmFnZ2FnZTtmdW5jdGlvbiBiYWdnYWdlRW50cnlNZXRhZGF0YUZyb21TdHJpbmcoZSl7aWYodHlwZW9mIGUhPT1cInN0cmluZ1wiKXtpLmVycm9yKGBDYW5ub3QgY3JlYXRlIGJhZ2dhZ2UgbWV0YWRhdGEgZnJvbSB1bmtub3duIHR5cGU6ICR7dHlwZW9mIGV9YCk7ZT1cIlwifXJldHVybntfX1RZUEVfXzpvLmJhZ2dhZ2VFbnRyeU1ldGFkYXRhU3ltYm9sLHRvU3RyaW5nKCl7cmV0dXJuIGV9fX10LmJhZ2dhZ2VFbnRyeU1ldGFkYXRhRnJvbVN0cmluZz1iYWdnYWdlRW50cnlNZXRhZGF0YUZyb21TdHJpbmd9LDY3OihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuY29udGV4dD12b2lkIDA7Y29uc3Qgbj1yKDQ5MSk7dC5jb250ZXh0PW4uQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpfSwyMjM6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5Ob29wQ29udGV4dE1hbmFnZXI9dm9pZCAwO2NvbnN0IG49cig3ODApO2NsYXNzIE5vb3BDb250ZXh0TWFuYWdlcnthY3RpdmUoKXtyZXR1cm4gbi5ST09UX0NPTlRFWFR9d2l0aChlLHQsciwuLi5uKXtyZXR1cm4gdC5jYWxsKHIsLi4ubil9YmluZChlLHQpe3JldHVybiB0fWVuYWJsZSgpe3JldHVybiB0aGlzfWRpc2FibGUoKXtyZXR1cm4gdGhpc319dC5Ob29wQ29udGV4dE1hbmFnZXI9Tm9vcENvbnRleHRNYW5hZ2VyfSw3ODA6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuUk9PVF9DT05URVhUPXQuY3JlYXRlQ29udGV4dEtleT12b2lkIDA7ZnVuY3Rpb24gY3JlYXRlQ29udGV4dEtleShlKXtyZXR1cm4gU3ltYm9sLmZvcihlKX10LmNyZWF0ZUNvbnRleHRLZXk9Y3JlYXRlQ29udGV4dEtleTtjbGFzcyBCYXNlQ29udGV4dHtjb25zdHJ1Y3RvcihlKXtjb25zdCB0PXRoaXM7dC5fY3VycmVudENvbnRleHQ9ZT9uZXcgTWFwKGUpOm5ldyBNYXA7dC5nZXRWYWx1ZT1lPT50Ll9jdXJyZW50Q29udGV4dC5nZXQoZSk7dC5zZXRWYWx1ZT0oZSxyKT0+e2NvbnN0IG49bmV3IEJhc2VDb250ZXh0KHQuX2N1cnJlbnRDb250ZXh0KTtuLl9jdXJyZW50Q29udGV4dC5zZXQoZSxyKTtyZXR1cm4gbn07dC5kZWxldGVWYWx1ZT1lPT57Y29uc3Qgcj1uZXcgQmFzZUNvbnRleHQodC5fY3VycmVudENvbnRleHQpO3IuX2N1cnJlbnRDb250ZXh0LmRlbGV0ZShlKTtyZXR1cm4gcn19fXQuUk9PVF9DT05URVhUPW5ldyBCYXNlQ29udGV4dH0sNTA2OihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuZGlhZz12b2lkIDA7Y29uc3Qgbj1yKDkzMCk7dC5kaWFnPW4uRGlhZ0FQSS5pbnN0YW5jZSgpfSw1NjooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LkRpYWdDb21wb25lbnRMb2dnZXI9dm9pZCAwO2NvbnN0IG49cigxNzIpO2NsYXNzIERpYWdDb21wb25lbnRMb2dnZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fbmFtZXNwYWNlPWUubmFtZXNwYWNlfHxcIkRpYWdDb21wb25lbnRMb2dnZXJcIn1kZWJ1ZyguLi5lKXtyZXR1cm4gbG9nUHJveHkoXCJkZWJ1Z1wiLHRoaXMuX25hbWVzcGFjZSxlKX1lcnJvciguLi5lKXtyZXR1cm4gbG9nUHJveHkoXCJlcnJvclwiLHRoaXMuX25hbWVzcGFjZSxlKX1pbmZvKC4uLmUpe3JldHVybiBsb2dQcm94eShcImluZm9cIix0aGlzLl9uYW1lc3BhY2UsZSl9d2FybiguLi5lKXtyZXR1cm4gbG9nUHJveHkoXCJ3YXJuXCIsdGhpcy5fbmFtZXNwYWNlLGUpfXZlcmJvc2UoLi4uZSl7cmV0dXJuIGxvZ1Byb3h5KFwidmVyYm9zZVwiLHRoaXMuX25hbWVzcGFjZSxlKX19dC5EaWFnQ29tcG9uZW50TG9nZ2VyPURpYWdDb21wb25lbnRMb2dnZXI7ZnVuY3Rpb24gbG9nUHJveHkoZSx0LHIpe2NvbnN0IGE9KDAsbi5nZXRHbG9iYWwpKFwiZGlhZ1wiKTtpZighYSl7cmV0dXJufXIudW5zaGlmdCh0KTtyZXR1cm4gYVtlXSguLi5yKX19LDk3MjooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5EaWFnQ29uc29sZUxvZ2dlcj12b2lkIDA7Y29uc3Qgcj1be246XCJlcnJvclwiLGM6XCJlcnJvclwifSx7bjpcIndhcm5cIixjOlwid2FyblwifSx7bjpcImluZm9cIixjOlwiaW5mb1wifSx7bjpcImRlYnVnXCIsYzpcImRlYnVnXCJ9LHtuOlwidmVyYm9zZVwiLGM6XCJ0cmFjZVwifV07Y2xhc3MgRGlhZ0NvbnNvbGVMb2dnZXJ7Y29uc3RydWN0b3IoKXtmdW5jdGlvbiBfY29uc29sZUZ1bmMoZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLnQpe2lmKGNvbnNvbGUpe2xldCByPWNvbnNvbGVbZV07aWYodHlwZW9mIHIhPT1cImZ1bmN0aW9uXCIpe3I9Y29uc29sZS5sb2d9aWYodHlwZW9mIHI9PT1cImZ1bmN0aW9uXCIpe3JldHVybiByLmFwcGx5KGNvbnNvbGUsdCl9fX19Zm9yKGxldCBlPTA7ZTxyLmxlbmd0aDtlKyspe3RoaXNbcltlXS5uXT1fY29uc29sZUZ1bmMocltlXS5jKX19fXQuRGlhZ0NvbnNvbGVMb2dnZXI9RGlhZ0NvbnNvbGVMb2dnZXJ9LDkxMjooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LmNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcj12b2lkIDA7Y29uc3Qgbj1yKDk1Nyk7ZnVuY3Rpb24gY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyKGUsdCl7aWYoZTxuLkRpYWdMb2dMZXZlbC5OT05FKXtlPW4uRGlhZ0xvZ0xldmVsLk5PTkV9ZWxzZSBpZihlPm4uRGlhZ0xvZ0xldmVsLkFMTCl7ZT1uLkRpYWdMb2dMZXZlbC5BTEx9dD10fHx7fTtmdW5jdGlvbiBfZmlsdGVyRnVuYyhyLG4pe2NvbnN0IGE9dFtyXTtpZih0eXBlb2YgYT09PVwiZnVuY3Rpb25cIiYmZT49bil7cmV0dXJuIGEuYmluZCh0KX1yZXR1cm4gZnVuY3Rpb24oKXt9fXJldHVybntlcnJvcjpfZmlsdGVyRnVuYyhcImVycm9yXCIsbi5EaWFnTG9nTGV2ZWwuRVJST1IpLHdhcm46X2ZpbHRlckZ1bmMoXCJ3YXJuXCIsbi5EaWFnTG9nTGV2ZWwuV0FSTiksaW5mbzpfZmlsdGVyRnVuYyhcImluZm9cIixuLkRpYWdMb2dMZXZlbC5JTkZPKSxkZWJ1ZzpfZmlsdGVyRnVuYyhcImRlYnVnXCIsbi5EaWFnTG9nTGV2ZWwuREVCVUcpLHZlcmJvc2U6X2ZpbHRlckZ1bmMoXCJ2ZXJib3NlXCIsbi5EaWFnTG9nTGV2ZWwuVkVSQk9TRSl9fXQuY3JlYXRlTG9nTGV2ZWxEaWFnTG9nZ2VyPWNyZWF0ZUxvZ0xldmVsRGlhZ0xvZ2dlcn0sOTU3OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LkRpYWdMb2dMZXZlbD12b2lkIDA7dmFyIHI7KGZ1bmN0aW9uKGUpe2VbZVtcIk5PTkVcIl09MF09XCJOT05FXCI7ZVtlW1wiRVJST1JcIl09MzBdPVwiRVJST1JcIjtlW2VbXCJXQVJOXCJdPTUwXT1cIldBUk5cIjtlW2VbXCJJTkZPXCJdPTYwXT1cIklORk9cIjtlW2VbXCJERUJVR1wiXT03MF09XCJERUJVR1wiO2VbZVtcIlZFUkJPU0VcIl09ODBdPVwiVkVSQk9TRVwiO2VbZVtcIkFMTFwiXT05OTk5XT1cIkFMTFwifSkocj10LkRpYWdMb2dMZXZlbHx8KHQuRGlhZ0xvZ0xldmVsPXt9KSl9LDE3MjooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LnVucmVnaXN0ZXJHbG9iYWw9dC5nZXRHbG9iYWw9dC5yZWdpc3Rlckdsb2JhbD12b2lkIDA7Y29uc3Qgbj1yKDIwMCk7Y29uc3QgYT1yKDUyMSk7Y29uc3Qgbz1yKDEzMCk7Y29uc3QgaT1hLlZFUlNJT04uc3BsaXQoXCIuXCIpWzBdO2NvbnN0IGM9U3ltYm9sLmZvcihgb3BlbnRlbGVtZXRyeS5qcy5hcGkuJHtpfWApO2NvbnN0IHM9bi5fZ2xvYmFsVGhpcztmdW5jdGlvbiByZWdpc3Rlckdsb2JhbChlLHQscixuPWZhbHNlKXt2YXIgbztjb25zdCBpPXNbY109KG89c1tjXSkhPT1udWxsJiZvIT09dm9pZCAwP286e3ZlcnNpb246YS5WRVJTSU9OfTtpZighbiYmaVtlXSl7Y29uc3QgdD1uZXcgRXJyb3IoYEBvcGVudGVsZW1ldHJ5L2FwaTogQXR0ZW1wdGVkIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gb2YgQVBJOiAke2V9YCk7ci5lcnJvcih0LnN0YWNrfHx0Lm1lc3NhZ2UpO3JldHVybiBmYWxzZX1pZihpLnZlcnNpb24hPT1hLlZFUlNJT04pe2NvbnN0IHQ9bmV3IEVycm9yKGBAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdHJhdGlvbiBvZiB2ZXJzaW9uIHYke2kudmVyc2lvbn0gZm9yICR7ZX0gZG9lcyBub3QgbWF0Y2ggcHJldmlvdXNseSByZWdpc3RlcmVkIEFQSSB2JHthLlZFUlNJT059YCk7ci5lcnJvcih0LnN0YWNrfHx0Lm1lc3NhZ2UpO3JldHVybiBmYWxzZX1pW2VdPXQ7ci5kZWJ1ZyhgQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciAke2V9IHYke2EuVkVSU0lPTn0uYCk7cmV0dXJuIHRydWV9dC5yZWdpc3Rlckdsb2JhbD1yZWdpc3Rlckdsb2JhbDtmdW5jdGlvbiBnZXRHbG9iYWwoZSl7dmFyIHQscjtjb25zdCBuPSh0PXNbY10pPT09bnVsbHx8dD09PXZvaWQgMD92b2lkIDA6dC52ZXJzaW9uO2lmKCFufHwhKDAsby5pc0NvbXBhdGlibGUpKG4pKXtyZXR1cm59cmV0dXJuKHI9c1tjXSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyW2VdfXQuZ2V0R2xvYmFsPWdldEdsb2JhbDtmdW5jdGlvbiB1bnJlZ2lzdGVyR2xvYmFsKGUsdCl7dC5kZWJ1ZyhgQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciAke2V9IHYke2EuVkVSU0lPTn0uYCk7Y29uc3Qgcj1zW2NdO2lmKHIpe2RlbGV0ZSByW2VdfX10LnVucmVnaXN0ZXJHbG9iYWw9dW5yZWdpc3Rlckdsb2JhbH0sMTMwOihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuaXNDb21wYXRpYmxlPXQuX21ha2VDb21wYXRpYmlsaXR5Q2hlY2s9dm9pZCAwO2NvbnN0IG49cig1MjEpO2NvbnN0IGE9L14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoLSguKykpPyQvO2Z1bmN0aW9uIF9tYWtlQ29tcGF0aWJpbGl0eUNoZWNrKGUpe2NvbnN0IHQ9bmV3IFNldChbZV0pO2NvbnN0IHI9bmV3IFNldDtjb25zdCBuPWUubWF0Y2goYSk7aWYoIW4pe3JldHVybigpPT5mYWxzZX1jb25zdCBvPXttYWpvcjorblsxXSxtaW5vcjorblsyXSxwYXRjaDorblszXSxwcmVyZWxlYXNlOm5bNF19O2lmKG8ucHJlcmVsZWFzZSE9bnVsbCl7cmV0dXJuIGZ1bmN0aW9uIGlzRXhhY3RtYXRjaCh0KXtyZXR1cm4gdD09PWV9fWZ1bmN0aW9uIF9yZWplY3QoZSl7ci5hZGQoZSk7cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIF9hY2NlcHQoZSl7dC5hZGQoZSk7cmV0dXJuIHRydWV9cmV0dXJuIGZ1bmN0aW9uIGlzQ29tcGF0aWJsZShlKXtpZih0LmhhcyhlKSl7cmV0dXJuIHRydWV9aWYoci5oYXMoZSkpe3JldHVybiBmYWxzZX1jb25zdCBuPWUubWF0Y2goYSk7aWYoIW4pe3JldHVybiBfcmVqZWN0KGUpfWNvbnN0IGk9e21ham9yOituWzFdLG1pbm9yOituWzJdLHBhdGNoOituWzNdLHByZXJlbGVhc2U6bls0XX07aWYoaS5wcmVyZWxlYXNlIT1udWxsKXtyZXR1cm4gX3JlamVjdChlKX1pZihvLm1ham9yIT09aS5tYWpvcil7cmV0dXJuIF9yZWplY3QoZSl9aWYoby5tYWpvcj09PTApe2lmKG8ubWlub3I9PT1pLm1pbm9yJiZvLnBhdGNoPD1pLnBhdGNoKXtyZXR1cm4gX2FjY2VwdChlKX1yZXR1cm4gX3JlamVjdChlKX1pZihvLm1pbm9yPD1pLm1pbm9yKXtyZXR1cm4gX2FjY2VwdChlKX1yZXR1cm4gX3JlamVjdChlKX19dC5fbWFrZUNvbXBhdGliaWxpdHlDaGVjaz1fbWFrZUNvbXBhdGliaWxpdHlDaGVjazt0LmlzQ29tcGF0aWJsZT1fbWFrZUNvbXBhdGliaWxpdHlDaGVjayhuLlZFUlNJT04pfSw4ODY6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5tZXRyaWNzPXZvaWQgMDtjb25zdCBuPXIoNjUzKTt0Lm1ldHJpY3M9bi5NZXRyaWNzQVBJLmdldEluc3RhbmNlKCl9LDkwMTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5WYWx1ZVR5cGU9dm9pZCAwO3ZhciByOyhmdW5jdGlvbihlKXtlW2VbXCJJTlRcIl09MF09XCJJTlRcIjtlW2VbXCJET1VCTEVcIl09MV09XCJET1VCTEVcIn0pKHI9dC5WYWx1ZVR5cGV8fCh0LlZhbHVlVHlwZT17fSkpfSwxMDI6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuY3JlYXRlTm9vcE1ldGVyPXQuTk9PUF9PQlNFUlZBQkxFX1VQX0RPV05fQ09VTlRFUl9NRVRSSUM9dC5OT09QX09CU0VSVkFCTEVfR0FVR0VfTUVUUklDPXQuTk9PUF9PQlNFUlZBQkxFX0NPVU5URVJfTUVUUklDPXQuTk9PUF9VUF9ET1dOX0NPVU5URVJfTUVUUklDPXQuTk9PUF9ISVNUT0dSQU1fTUVUUklDPXQuTk9PUF9DT1VOVEVSX01FVFJJQz10Lk5PT1BfTUVURVI9dC5Ob29wT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXJNZXRyaWM9dC5Ob29wT2JzZXJ2YWJsZUdhdWdlTWV0cmljPXQuTm9vcE9ic2VydmFibGVDb3VudGVyTWV0cmljPXQuTm9vcE9ic2VydmFibGVNZXRyaWM9dC5Ob29wSGlzdG9ncmFtTWV0cmljPXQuTm9vcFVwRG93bkNvdW50ZXJNZXRyaWM9dC5Ob29wQ291bnRlck1ldHJpYz10Lk5vb3BNZXRyaWM9dC5Ob29wTWV0ZXI9dm9pZCAwO2NsYXNzIE5vb3BNZXRlcntjb25zdHJ1Y3Rvcigpe31jcmVhdGVIaXN0b2dyYW0oZSxyKXtyZXR1cm4gdC5OT09QX0hJU1RPR1JBTV9NRVRSSUN9Y3JlYXRlQ291bnRlcihlLHIpe3JldHVybiB0Lk5PT1BfQ09VTlRFUl9NRVRSSUN9Y3JlYXRlVXBEb3duQ291bnRlcihlLHIpe3JldHVybiB0Lk5PT1BfVVBfRE9XTl9DT1VOVEVSX01FVFJJQ31jcmVhdGVPYnNlcnZhYmxlR2F1Z2UoZSxyKXtyZXR1cm4gdC5OT09QX09CU0VSVkFCTEVfR0FVR0VfTUVUUklDfWNyZWF0ZU9ic2VydmFibGVDb3VudGVyKGUscil7cmV0dXJuIHQuTk9PUF9PQlNFUlZBQkxFX0NPVU5URVJfTUVUUklDfWNyZWF0ZU9ic2VydmFibGVVcERvd25Db3VudGVyKGUscil7cmV0dXJuIHQuTk9PUF9PQlNFUlZBQkxFX1VQX0RPV05fQ09VTlRFUl9NRVRSSUN9YWRkQmF0Y2hPYnNlcnZhYmxlQ2FsbGJhY2soZSx0KXt9cmVtb3ZlQmF0Y2hPYnNlcnZhYmxlQ2FsbGJhY2soZSl7fX10Lk5vb3BNZXRlcj1Ob29wTWV0ZXI7Y2xhc3MgTm9vcE1ldHJpY3t9dC5Ob29wTWV0cmljPU5vb3BNZXRyaWM7Y2xhc3MgTm9vcENvdW50ZXJNZXRyaWMgZXh0ZW5kcyBOb29wTWV0cmlje2FkZChlLHQpe319dC5Ob29wQ291bnRlck1ldHJpYz1Ob29wQ291bnRlck1ldHJpYztjbGFzcyBOb29wVXBEb3duQ291bnRlck1ldHJpYyBleHRlbmRzIE5vb3BNZXRyaWN7YWRkKGUsdCl7fX10Lk5vb3BVcERvd25Db3VudGVyTWV0cmljPU5vb3BVcERvd25Db3VudGVyTWV0cmljO2NsYXNzIE5vb3BIaXN0b2dyYW1NZXRyaWMgZXh0ZW5kcyBOb29wTWV0cmlje3JlY29yZChlLHQpe319dC5Ob29wSGlzdG9ncmFtTWV0cmljPU5vb3BIaXN0b2dyYW1NZXRyaWM7Y2xhc3MgTm9vcE9ic2VydmFibGVNZXRyaWN7YWRkQ2FsbGJhY2soZSl7fXJlbW92ZUNhbGxiYWNrKGUpe319dC5Ob29wT2JzZXJ2YWJsZU1ldHJpYz1Ob29wT2JzZXJ2YWJsZU1ldHJpYztjbGFzcyBOb29wT2JzZXJ2YWJsZUNvdW50ZXJNZXRyaWMgZXh0ZW5kcyBOb29wT2JzZXJ2YWJsZU1ldHJpY3t9dC5Ob29wT2JzZXJ2YWJsZUNvdW50ZXJNZXRyaWM9Tm9vcE9ic2VydmFibGVDb3VudGVyTWV0cmljO2NsYXNzIE5vb3BPYnNlcnZhYmxlR2F1Z2VNZXRyaWMgZXh0ZW5kcyBOb29wT2JzZXJ2YWJsZU1ldHJpY3t9dC5Ob29wT2JzZXJ2YWJsZUdhdWdlTWV0cmljPU5vb3BPYnNlcnZhYmxlR2F1Z2VNZXRyaWM7Y2xhc3MgTm9vcE9ic2VydmFibGVVcERvd25Db3VudGVyTWV0cmljIGV4dGVuZHMgTm9vcE9ic2VydmFibGVNZXRyaWN7fXQuTm9vcE9ic2VydmFibGVVcERvd25Db3VudGVyTWV0cmljPU5vb3BPYnNlcnZhYmxlVXBEb3duQ291bnRlck1ldHJpYzt0Lk5PT1BfTUVURVI9bmV3IE5vb3BNZXRlcjt0Lk5PT1BfQ09VTlRFUl9NRVRSSUM9bmV3IE5vb3BDb3VudGVyTWV0cmljO3QuTk9PUF9ISVNUT0dSQU1fTUVUUklDPW5ldyBOb29wSGlzdG9ncmFtTWV0cmljO3QuTk9PUF9VUF9ET1dOX0NPVU5URVJfTUVUUklDPW5ldyBOb29wVXBEb3duQ291bnRlck1ldHJpYzt0Lk5PT1BfT0JTRVJWQUJMRV9DT1VOVEVSX01FVFJJQz1uZXcgTm9vcE9ic2VydmFibGVDb3VudGVyTWV0cmljO3QuTk9PUF9PQlNFUlZBQkxFX0dBVUdFX01FVFJJQz1uZXcgTm9vcE9ic2VydmFibGVHYXVnZU1ldHJpYzt0Lk5PT1BfT0JTRVJWQUJMRV9VUF9ET1dOX0NPVU5URVJfTUVUUklDPW5ldyBOb29wT2JzZXJ2YWJsZVVwRG93bkNvdW50ZXJNZXRyaWM7ZnVuY3Rpb24gY3JlYXRlTm9vcE1ldGVyKCl7cmV0dXJuIHQuTk9PUF9NRVRFUn10LmNyZWF0ZU5vb3BNZXRlcj1jcmVhdGVOb29wTWV0ZXJ9LDY2MDooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0Lk5PT1BfTUVURVJfUFJPVklERVI9dC5Ob29wTWV0ZXJQcm92aWRlcj12b2lkIDA7Y29uc3Qgbj1yKDEwMik7Y2xhc3MgTm9vcE1ldGVyUHJvdmlkZXJ7Z2V0TWV0ZXIoZSx0LHIpe3JldHVybiBuLk5PT1BfTUVURVJ9fXQuTm9vcE1ldGVyUHJvdmlkZXI9Tm9vcE1ldGVyUHJvdmlkZXI7dC5OT09QX01FVEVSX1BST1ZJREVSPW5ldyBOb29wTWV0ZXJQcm92aWRlcn0sMjAwOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LHIsbil7aWYobj09PXVuZGVmaW5lZCluPXI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiB0W3JdfX0pfTpmdW5jdGlvbihlLHQscixuKXtpZihuPT09dW5kZWZpbmVkKW49cjtlW25dPXRbcl19KTt2YXIgYT10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gZSlpZihyIT09XCJkZWZhdWx0XCImJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSluKHQsZSxyKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTthKHIoNDYpLHQpfSw2NTE6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuX2dsb2JhbFRoaXM9dm9pZCAwO3QuX2dsb2JhbFRoaXM9dHlwZW9mIGdsb2JhbFRoaXM9PT1cIm9iamVjdFwiP2dsb2JhbFRoaXM6Z2xvYmFsfSw0NjpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKG49PT11bmRlZmluZWQpbj1yO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtyXX19KX06ZnVuY3Rpb24oZSx0LHIsbil7aWYobj09PXVuZGVmaW5lZCluPXI7ZVtuXT10W3JdfSk7dmFyIGE9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIGUpaWYociE9PVwiZGVmYXVsdFwiJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikpbih0LGUscil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7YShyKDY1MSksdCl9LDkzOTooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LnByb3BhZ2F0aW9uPXZvaWQgMDtjb25zdCBuPXIoMTgxKTt0LnByb3BhZ2F0aW9uPW4uUHJvcGFnYXRpb25BUEkuZ2V0SW5zdGFuY2UoKX0sODc0OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0Lk5vb3BUZXh0TWFwUHJvcGFnYXRvcj12b2lkIDA7Y2xhc3MgTm9vcFRleHRNYXBQcm9wYWdhdG9ye2luamVjdChlLHQpe31leHRyYWN0KGUsdCl7cmV0dXJuIGV9ZmllbGRzKCl7cmV0dXJuW119fXQuTm9vcFRleHRNYXBQcm9wYWdhdG9yPU5vb3BUZXh0TWFwUHJvcGFnYXRvcn0sMTk0OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LmRlZmF1bHRUZXh0TWFwU2V0dGVyPXQuZGVmYXVsdFRleHRNYXBHZXR0ZXI9dm9pZCAwO3QuZGVmYXVsdFRleHRNYXBHZXR0ZXI9e2dldChlLHQpe2lmKGU9PW51bGwpe3JldHVybiB1bmRlZmluZWR9cmV0dXJuIGVbdF19LGtleXMoZSl7aWYoZT09bnVsbCl7cmV0dXJuW119cmV0dXJuIE9iamVjdC5rZXlzKGUpfX07dC5kZWZhdWx0VGV4dE1hcFNldHRlcj17c2V0KGUsdCxyKXtpZihlPT1udWxsKXtyZXR1cm59ZVt0XT1yfX19LDg0NTooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LnRyYWNlPXZvaWQgMDtjb25zdCBuPXIoOTk3KTt0LnRyYWNlPW4uVHJhY2VBUEkuZ2V0SW5zdGFuY2UoKX0sNDAzOihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuTm9uUmVjb3JkaW5nU3Bhbj12b2lkIDA7Y29uc3Qgbj1yKDQ3Nik7Y2xhc3MgTm9uUmVjb3JkaW5nU3Bhbntjb25zdHJ1Y3RvcihlPW4uSU5WQUxJRF9TUEFOX0NPTlRFWFQpe3RoaXMuX3NwYW5Db250ZXh0PWV9c3BhbkNvbnRleHQoKXtyZXR1cm4gdGhpcy5fc3BhbkNvbnRleHR9c2V0QXR0cmlidXRlKGUsdCl7cmV0dXJuIHRoaXN9c2V0QXR0cmlidXRlcyhlKXtyZXR1cm4gdGhpc31hZGRFdmVudChlLHQpe3JldHVybiB0aGlzfXNldFN0YXR1cyhlKXtyZXR1cm4gdGhpc311cGRhdGVOYW1lKGUpe3JldHVybiB0aGlzfWVuZChlKXt9aXNSZWNvcmRpbmcoKXtyZXR1cm4gZmFsc2V9cmVjb3JkRXhjZXB0aW9uKGUsdCl7fX10Lk5vblJlY29yZGluZ1NwYW49Tm9uUmVjb3JkaW5nU3Bhbn0sNjE0OihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuTm9vcFRyYWNlcj12b2lkIDA7Y29uc3Qgbj1yKDQ5MSk7Y29uc3QgYT1yKDYwNyk7Y29uc3Qgbz1yKDQwMyk7Y29uc3QgaT1yKDEzOSk7Y29uc3QgYz1uLkNvbnRleHRBUEkuZ2V0SW5zdGFuY2UoKTtjbGFzcyBOb29wVHJhY2Vye3N0YXJ0U3BhbihlLHQscj1jLmFjdGl2ZSgpKXtjb25zdCBuPUJvb2xlYW4odD09PW51bGx8fHQ9PT12b2lkIDA/dm9pZCAwOnQucm9vdCk7aWYobil7cmV0dXJuIG5ldyBvLk5vblJlY29yZGluZ1NwYW59Y29uc3Qgcz1yJiYoMCxhLmdldFNwYW5Db250ZXh0KShyKTtpZihpc1NwYW5Db250ZXh0KHMpJiYoMCxpLmlzU3BhbkNvbnRleHRWYWxpZCkocykpe3JldHVybiBuZXcgby5Ob25SZWNvcmRpbmdTcGFuKHMpfWVsc2V7cmV0dXJuIG5ldyBvLk5vblJlY29yZGluZ1NwYW59fXN0YXJ0QWN0aXZlU3BhbihlLHQscixuKXtsZXQgbztsZXQgaTtsZXQgcztpZihhcmd1bWVudHMubGVuZ3RoPDIpe3JldHVybn1lbHNlIGlmKGFyZ3VtZW50cy5sZW5ndGg9PT0yKXtzPXR9ZWxzZSBpZihhcmd1bWVudHMubGVuZ3RoPT09Myl7bz10O3M9cn1lbHNle289dDtpPXI7cz1ufWNvbnN0IHU9aSE9PW51bGwmJmkhPT12b2lkIDA/aTpjLmFjdGl2ZSgpO2NvbnN0IGw9dGhpcy5zdGFydFNwYW4oZSxvLHUpO2NvbnN0IGc9KDAsYS5zZXRTcGFuKSh1LGwpO3JldHVybiBjLndpdGgoZyxzLHVuZGVmaW5lZCxsKX19dC5Ob29wVHJhY2VyPU5vb3BUcmFjZXI7ZnVuY3Rpb24gaXNTcGFuQ29udGV4dChlKXtyZXR1cm4gdHlwZW9mIGU9PT1cIm9iamVjdFwiJiZ0eXBlb2YgZVtcInNwYW5JZFwiXT09PVwic3RyaW5nXCImJnR5cGVvZiBlW1widHJhY2VJZFwiXT09PVwic3RyaW5nXCImJnR5cGVvZiBlW1widHJhY2VGbGFnc1wiXT09PVwibnVtYmVyXCJ9fSwxMjQ6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5Ob29wVHJhY2VyUHJvdmlkZXI9dm9pZCAwO2NvbnN0IG49cig2MTQpO2NsYXNzIE5vb3BUcmFjZXJQcm92aWRlcntnZXRUcmFjZXIoZSx0LHIpe3JldHVybiBuZXcgbi5Ob29wVHJhY2VyfX10Lk5vb3BUcmFjZXJQcm92aWRlcj1Ob29wVHJhY2VyUHJvdmlkZXJ9LDEyNTooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlByb3h5VHJhY2VyPXZvaWQgMDtjb25zdCBuPXIoNjE0KTtjb25zdCBhPW5ldyBuLk5vb3BUcmFjZXI7Y2xhc3MgUHJveHlUcmFjZXJ7Y29uc3RydWN0b3IoZSx0LHIsbil7dGhpcy5fcHJvdmlkZXI9ZTt0aGlzLm5hbWU9dDt0aGlzLnZlcnNpb249cjt0aGlzLm9wdGlvbnM9bn1zdGFydFNwYW4oZSx0LHIpe3JldHVybiB0aGlzLl9nZXRUcmFjZXIoKS5zdGFydFNwYW4oZSx0LHIpfXN0YXJ0QWN0aXZlU3BhbihlLHQscixuKXtjb25zdCBhPXRoaXMuX2dldFRyYWNlcigpO3JldHVybiBSZWZsZWN0LmFwcGx5KGEuc3RhcnRBY3RpdmVTcGFuLGEsYXJndW1lbnRzKX1fZ2V0VHJhY2VyKCl7aWYodGhpcy5fZGVsZWdhdGUpe3JldHVybiB0aGlzLl9kZWxlZ2F0ZX1jb25zdCBlPXRoaXMuX3Byb3ZpZGVyLmdldERlbGVnYXRlVHJhY2VyKHRoaXMubmFtZSx0aGlzLnZlcnNpb24sdGhpcy5vcHRpb25zKTtpZighZSl7cmV0dXJuIGF9dGhpcy5fZGVsZWdhdGU9ZTtyZXR1cm4gdGhpcy5fZGVsZWdhdGV9fXQuUHJveHlUcmFjZXI9UHJveHlUcmFjZXJ9LDg0NjooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlByb3h5VHJhY2VyUHJvdmlkZXI9dm9pZCAwO2NvbnN0IG49cigxMjUpO2NvbnN0IGE9cigxMjQpO2NvbnN0IG89bmV3IGEuTm9vcFRyYWNlclByb3ZpZGVyO2NsYXNzIFByb3h5VHJhY2VyUHJvdmlkZXJ7Z2V0VHJhY2VyKGUsdCxyKXt2YXIgYTtyZXR1cm4oYT10aGlzLmdldERlbGVnYXRlVHJhY2VyKGUsdCxyKSkhPT1udWxsJiZhIT09dm9pZCAwP2E6bmV3IG4uUHJveHlUcmFjZXIodGhpcyxlLHQscil9Z2V0RGVsZWdhdGUoKXt2YXIgZTtyZXR1cm4oZT10aGlzLl9kZWxlZ2F0ZSkhPT1udWxsJiZlIT09dm9pZCAwP2U6b31zZXREZWxlZ2F0ZShlKXt0aGlzLl9kZWxlZ2F0ZT1lfWdldERlbGVnYXRlVHJhY2VyKGUsdCxyKXt2YXIgbjtyZXR1cm4obj10aGlzLl9kZWxlZ2F0ZSk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLmdldFRyYWNlcihlLHQscil9fXQuUHJveHlUcmFjZXJQcm92aWRlcj1Qcm94eVRyYWNlclByb3ZpZGVyfSw5OTY6KGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuU2FtcGxpbmdEZWNpc2lvbj12b2lkIDA7dmFyIHI7KGZ1bmN0aW9uKGUpe2VbZVtcIk5PVF9SRUNPUkRcIl09MF09XCJOT1RfUkVDT1JEXCI7ZVtlW1wiUkVDT1JEXCJdPTFdPVwiUkVDT1JEXCI7ZVtlW1wiUkVDT1JEX0FORF9TQU1QTEVEXCJdPTJdPVwiUkVDT1JEX0FORF9TQU1QTEVEXCJ9KShyPXQuU2FtcGxpbmdEZWNpc2lvbnx8KHQuU2FtcGxpbmdEZWNpc2lvbj17fSkpfSw2MDc6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5nZXRTcGFuQ29udGV4dD10LnNldFNwYW5Db250ZXh0PXQuZGVsZXRlU3Bhbj10LnNldFNwYW49dC5nZXRBY3RpdmVTcGFuPXQuZ2V0U3Bhbj12b2lkIDA7Y29uc3Qgbj1yKDc4MCk7Y29uc3QgYT1yKDQwMyk7Y29uc3Qgbz1yKDQ5MSk7Y29uc3QgaT0oMCxuLmNyZWF0ZUNvbnRleHRLZXkpKFwiT3BlblRlbGVtZXRyeSBDb250ZXh0IEtleSBTUEFOXCIpO2Z1bmN0aW9uIGdldFNwYW4oZSl7cmV0dXJuIGUuZ2V0VmFsdWUoaSl8fHVuZGVmaW5lZH10LmdldFNwYW49Z2V0U3BhbjtmdW5jdGlvbiBnZXRBY3RpdmVTcGFuKCl7cmV0dXJuIGdldFNwYW4oby5Db250ZXh0QVBJLmdldEluc3RhbmNlKCkuYWN0aXZlKCkpfXQuZ2V0QWN0aXZlU3Bhbj1nZXRBY3RpdmVTcGFuO2Z1bmN0aW9uIHNldFNwYW4oZSx0KXtyZXR1cm4gZS5zZXRWYWx1ZShpLHQpfXQuc2V0U3Bhbj1zZXRTcGFuO2Z1bmN0aW9uIGRlbGV0ZVNwYW4oZSl7cmV0dXJuIGUuZGVsZXRlVmFsdWUoaSl9dC5kZWxldGVTcGFuPWRlbGV0ZVNwYW47ZnVuY3Rpb24gc2V0U3BhbkNvbnRleHQoZSx0KXtyZXR1cm4gc2V0U3BhbihlLG5ldyBhLk5vblJlY29yZGluZ1NwYW4odCkpfXQuc2V0U3BhbkNvbnRleHQ9c2V0U3BhbkNvbnRleHQ7ZnVuY3Rpb24gZ2V0U3BhbkNvbnRleHQoZSl7dmFyIHQ7cmV0dXJuKHQ9Z2V0U3BhbihlKSk9PT1udWxsfHx0PT09dm9pZCAwP3ZvaWQgMDp0LnNwYW5Db250ZXh0KCl9dC5nZXRTcGFuQ29udGV4dD1nZXRTcGFuQ29udGV4dH0sMzI1OihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuVHJhY2VTdGF0ZUltcGw9dm9pZCAwO2NvbnN0IG49cig1NjQpO2NvbnN0IGE9MzI7Y29uc3Qgbz01MTI7Y29uc3QgaT1cIixcIjtjb25zdCBjPVwiPVwiO2NsYXNzIFRyYWNlU3RhdGVJbXBse2NvbnN0cnVjdG9yKGUpe3RoaXMuX2ludGVybmFsU3RhdGU9bmV3IE1hcDtpZihlKXRoaXMuX3BhcnNlKGUpfXNldChlLHQpe2NvbnN0IHI9dGhpcy5fY2xvbmUoKTtpZihyLl9pbnRlcm5hbFN0YXRlLmhhcyhlKSl7ci5faW50ZXJuYWxTdGF0ZS5kZWxldGUoZSl9ci5faW50ZXJuYWxTdGF0ZS5zZXQoZSx0KTtyZXR1cm4gcn11bnNldChlKXtjb25zdCB0PXRoaXMuX2Nsb25lKCk7dC5faW50ZXJuYWxTdGF0ZS5kZWxldGUoZSk7cmV0dXJuIHR9Z2V0KGUpe3JldHVybiB0aGlzLl9pbnRlcm5hbFN0YXRlLmdldChlKX1zZXJpYWxpemUoKXtyZXR1cm4gdGhpcy5fa2V5cygpLnJlZHVjZSgoKGUsdCk9PntlLnB1c2godCtjK3RoaXMuZ2V0KHQpKTtyZXR1cm4gZX0pLFtdKS5qb2luKGkpfV9wYXJzZShlKXtpZihlLmxlbmd0aD5vKXJldHVybjt0aGlzLl9pbnRlcm5hbFN0YXRlPWUuc3BsaXQoaSkucmV2ZXJzZSgpLnJlZHVjZSgoKGUsdCk9Pntjb25zdCByPXQudHJpbSgpO2NvbnN0IGE9ci5pbmRleE9mKGMpO2lmKGEhPT0tMSl7Y29uc3Qgbz1yLnNsaWNlKDAsYSk7Y29uc3QgaT1yLnNsaWNlKGErMSx0Lmxlbmd0aCk7aWYoKDAsbi52YWxpZGF0ZUtleSkobykmJigwLG4udmFsaWRhdGVWYWx1ZSkoaSkpe2Uuc2V0KG8saSl9ZWxzZXt9fXJldHVybiBlfSksbmV3IE1hcCk7aWYodGhpcy5faW50ZXJuYWxTdGF0ZS5zaXplPmEpe3RoaXMuX2ludGVybmFsU3RhdGU9bmV3IE1hcChBcnJheS5mcm9tKHRoaXMuX2ludGVybmFsU3RhdGUuZW50cmllcygpKS5yZXZlcnNlKCkuc2xpY2UoMCxhKSl9fV9rZXlzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5faW50ZXJuYWxTdGF0ZS5rZXlzKCkpLnJldmVyc2UoKX1fY2xvbmUoKXtjb25zdCBlPW5ldyBUcmFjZVN0YXRlSW1wbDtlLl9pbnRlcm5hbFN0YXRlPW5ldyBNYXAodGhpcy5faW50ZXJuYWxTdGF0ZSk7cmV0dXJuIGV9fXQuVHJhY2VTdGF0ZUltcGw9VHJhY2VTdGF0ZUltcGx9LDU2NDooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC52YWxpZGF0ZVZhbHVlPXQudmFsaWRhdGVLZXk9dm9pZCAwO2NvbnN0IHI9XCJbXzAtOWEtei0qL11cIjtjb25zdCBuPWBbYS16XSR7cn17MCwyNTV9YDtjb25zdCBhPWBbYS16MC05XSR7cn17MCwyNDB9QFthLXpdJHtyfXswLDEzfWA7Y29uc3Qgbz1uZXcgUmVnRXhwKGBeKD86JHtufXwke2F9KSRgKTtjb25zdCBpPS9eWyAtfl17MCwyNTV9WyEtfl0kLztjb25zdCBjPS8sfD0vO2Z1bmN0aW9uIHZhbGlkYXRlS2V5KGUpe3JldHVybiBvLnRlc3QoZSl9dC52YWxpZGF0ZUtleT12YWxpZGF0ZUtleTtmdW5jdGlvbiB2YWxpZGF0ZVZhbHVlKGUpe3JldHVybiBpLnRlc3QoZSkmJiFjLnRlc3QoZSl9dC52YWxpZGF0ZVZhbHVlPXZhbGlkYXRlVmFsdWV9LDk4OihlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuY3JlYXRlVHJhY2VTdGF0ZT12b2lkIDA7Y29uc3Qgbj1yKDMyNSk7ZnVuY3Rpb24gY3JlYXRlVHJhY2VTdGF0ZShlKXtyZXR1cm4gbmV3IG4uVHJhY2VTdGF0ZUltcGwoZSl9dC5jcmVhdGVUcmFjZVN0YXRlPWNyZWF0ZVRyYWNlU3RhdGV9LDQ3NjooZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LklOVkFMSURfU1BBTl9DT05URVhUPXQuSU5WQUxJRF9UUkFDRUlEPXQuSU5WQUxJRF9TUEFOSUQ9dm9pZCAwO2NvbnN0IG49cig0NzUpO3QuSU5WQUxJRF9TUEFOSUQ9XCIwMDAwMDAwMDAwMDAwMDAwXCI7dC5JTlZBTElEX1RSQUNFSUQ9XCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiO3QuSU5WQUxJRF9TUEFOX0NPTlRFWFQ9e3RyYWNlSWQ6dC5JTlZBTElEX1RSQUNFSUQsc3BhbklkOnQuSU5WQUxJRF9TUEFOSUQsdHJhY2VGbGFnczpuLlRyYWNlRmxhZ3MuTk9ORX19LDM1NzooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5TcGFuS2luZD12b2lkIDA7dmFyIHI7KGZ1bmN0aW9uKGUpe2VbZVtcIklOVEVSTkFMXCJdPTBdPVwiSU5URVJOQUxcIjtlW2VbXCJTRVJWRVJcIl09MV09XCJTRVJWRVJcIjtlW2VbXCJDTElFTlRcIl09Ml09XCJDTElFTlRcIjtlW2VbXCJQUk9EVUNFUlwiXT0zXT1cIlBST0RVQ0VSXCI7ZVtlW1wiQ09OU1VNRVJcIl09NF09XCJDT05TVU1FUlwifSkocj10LlNwYW5LaW5kfHwodC5TcGFuS2luZD17fSkpfSwxMzk6KGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC53cmFwU3BhbkNvbnRleHQ9dC5pc1NwYW5Db250ZXh0VmFsaWQ9dC5pc1ZhbGlkU3BhbklkPXQuaXNWYWxpZFRyYWNlSWQ9dm9pZCAwO2NvbnN0IG49cig0NzYpO2NvbnN0IGE9cig0MDMpO2NvbnN0IG89L14oWzAtOWEtZl17MzJ9KSQvaTtjb25zdCBpPS9eWzAtOWEtZl17MTZ9JC9pO2Z1bmN0aW9uIGlzVmFsaWRUcmFjZUlkKGUpe3JldHVybiBvLnRlc3QoZSkmJmUhPT1uLklOVkFMSURfVFJBQ0VJRH10LmlzVmFsaWRUcmFjZUlkPWlzVmFsaWRUcmFjZUlkO2Z1bmN0aW9uIGlzVmFsaWRTcGFuSWQoZSl7cmV0dXJuIGkudGVzdChlKSYmZSE9PW4uSU5WQUxJRF9TUEFOSUR9dC5pc1ZhbGlkU3BhbklkPWlzVmFsaWRTcGFuSWQ7ZnVuY3Rpb24gaXNTcGFuQ29udGV4dFZhbGlkKGUpe3JldHVybiBpc1ZhbGlkVHJhY2VJZChlLnRyYWNlSWQpJiZpc1ZhbGlkU3BhbklkKGUuc3BhbklkKX10LmlzU3BhbkNvbnRleHRWYWxpZD1pc1NwYW5Db250ZXh0VmFsaWQ7ZnVuY3Rpb24gd3JhcFNwYW5Db250ZXh0KGUpe3JldHVybiBuZXcgYS5Ob25SZWNvcmRpbmdTcGFuKGUpfXQud3JhcFNwYW5Db250ZXh0PXdyYXBTcGFuQ29udGV4dH0sODQ3OihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlNwYW5TdGF0dXNDb2RlPXZvaWQgMDt2YXIgcjsoZnVuY3Rpb24oZSl7ZVtlW1wiVU5TRVRcIl09MF09XCJVTlNFVFwiO2VbZVtcIk9LXCJdPTFdPVwiT0tcIjtlW2VbXCJFUlJPUlwiXT0yXT1cIkVSUk9SXCJ9KShyPXQuU3BhblN0YXR1c0NvZGV8fCh0LlNwYW5TdGF0dXNDb2RlPXt9KSl9LDQ3NTooZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5UcmFjZUZsYWdzPXZvaWQgMDt2YXIgcjsoZnVuY3Rpb24oZSl7ZVtlW1wiTk9ORVwiXT0wXT1cIk5PTkVcIjtlW2VbXCJTQU1QTEVEXCJdPTFdPVwiU0FNUExFRFwifSkocj10LlRyYWNlRmxhZ3N8fCh0LlRyYWNlRmxhZ3M9e30pKX0sNTIxOihlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlZFUlNJT049dm9pZCAwO3QuVkVSU0lPTj1cIjEuNi4wXCJ9fTt2YXIgdD17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKHIpe3ZhciBuPXRbcl07aWYobiE9PXVuZGVmaW5lZCl7cmV0dXJuIG4uZXhwb3J0c312YXIgYT10W3JdPXtleHBvcnRzOnt9fTt2YXIgbz10cnVlO3RyeXtlW3JdLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO289ZmFsc2V9ZmluYWxseXtpZihvKWRlbGV0ZSB0W3JdfXJldHVybiBhLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciByPXt9OygoKT0+e3ZhciBlPXI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTtlLnRyYWNlPWUucHJvcGFnYXRpb249ZS5tZXRyaWNzPWUuZGlhZz1lLmNvbnRleHQ9ZS5JTlZBTElEX1NQQU5fQ09OVEVYVD1lLklOVkFMSURfVFJBQ0VJRD1lLklOVkFMSURfU1BBTklEPWUuaXNWYWxpZFNwYW5JZD1lLmlzVmFsaWRUcmFjZUlkPWUuaXNTcGFuQ29udGV4dFZhbGlkPWUuY3JlYXRlVHJhY2VTdGF0ZT1lLlRyYWNlRmxhZ3M9ZS5TcGFuU3RhdHVzQ29kZT1lLlNwYW5LaW5kPWUuU2FtcGxpbmdEZWNpc2lvbj1lLlByb3h5VHJhY2VyUHJvdmlkZXI9ZS5Qcm94eVRyYWNlcj1lLmRlZmF1bHRUZXh0TWFwU2V0dGVyPWUuZGVmYXVsdFRleHRNYXBHZXR0ZXI9ZS5WYWx1ZVR5cGU9ZS5jcmVhdGVOb29wTWV0ZXI9ZS5EaWFnTG9nTGV2ZWw9ZS5EaWFnQ29uc29sZUxvZ2dlcj1lLlJPT1RfQ09OVEVYVD1lLmNyZWF0ZUNvbnRleHRLZXk9ZS5iYWdnYWdlRW50cnlNZXRhZGF0YUZyb21TdHJpbmc9dm9pZCAwO3ZhciB0PV9fbmNjd3Bja19yZXF1aXJlX18oMzY5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImJhZ2dhZ2VFbnRyeU1ldGFkYXRhRnJvbVN0cmluZ1wiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuYmFnZ2FnZUVudHJ5TWV0YWRhdGFGcm9tU3RyaW5nfX0pO3ZhciBuPV9fbmNjd3Bja19yZXF1aXJlX18oNzgwKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImNyZWF0ZUNvbnRleHRLZXlcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmNyZWF0ZUNvbnRleHRLZXl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJST09UX0NPTlRFWFRcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlJPT1RfQ09OVEVYVH19KTt2YXIgYT1fX25jY3dwY2tfcmVxdWlyZV9fKDk3Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJEaWFnQ29uc29sZUxvZ2dlclwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuRGlhZ0NvbnNvbGVMb2dnZXJ9fSk7dmFyIG89X19uY2N3cGNrX3JlcXVpcmVfXyg5NTcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiRGlhZ0xvZ0xldmVsXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5EaWFnTG9nTGV2ZWx9fSk7dmFyIGk9X19uY2N3cGNrX3JlcXVpcmVfXygxMDIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiY3JlYXRlTm9vcE1ldGVyXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5jcmVhdGVOb29wTWV0ZXJ9fSk7dmFyIGM9X19uY2N3cGNrX3JlcXVpcmVfXyg5MDEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiVmFsdWVUeXBlXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5WYWx1ZVR5cGV9fSk7dmFyIHM9X19uY2N3cGNrX3JlcXVpcmVfXygxOTQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFRleHRNYXBHZXR0ZXJcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHRUZXh0TWFwR2V0dGVyfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFRleHRNYXBTZXR0ZXJcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHRUZXh0TWFwU2V0dGVyfX0pO3ZhciB1PV9fbmNjd3Bja19yZXF1aXJlX18oMTI1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIlByb3h5VHJhY2VyXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5Qcm94eVRyYWNlcn19KTt2YXIgbD1fX25jY3dwY2tfcmVxdWlyZV9fKDg0Nik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJQcm94eVRyYWNlclByb3ZpZGVyXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5Qcm94eVRyYWNlclByb3ZpZGVyfX0pO3ZhciBnPV9fbmNjd3Bja19yZXF1aXJlX18oOTk2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIlNhbXBsaW5nRGVjaXNpb25cIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBnLlNhbXBsaW5nRGVjaXNpb259fSk7dmFyIHA9X19uY2N3cGNrX3JlcXVpcmVfXygzNTcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiU3BhbktpbmRcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBwLlNwYW5LaW5kfX0pO3ZhciBkPV9fbmNjd3Bja19yZXF1aXJlX18oODQ3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcIlNwYW5TdGF0dXNDb2RlXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZC5TcGFuU3RhdHVzQ29kZX19KTt2YXIgXz1fX25jY3dwY2tfcmVxdWlyZV9fKDQ3NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJUcmFjZUZsYWdzXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gXy5UcmFjZUZsYWdzfX0pO3ZhciBmPV9fbmNjd3Bja19yZXF1aXJlX18oOTgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiY3JlYXRlVHJhY2VTdGF0ZVwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuY3JlYXRlVHJhY2VTdGF0ZX19KTt2YXIgYj1fX25jY3dwY2tfcmVxdWlyZV9fKDEzOSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJpc1NwYW5Db250ZXh0VmFsaWRcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBiLmlzU3BhbkNvbnRleHRWYWxpZH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImlzVmFsaWRUcmFjZUlkXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYi5pc1ZhbGlkVHJhY2VJZH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImlzVmFsaWRTcGFuSWRcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBiLmlzVmFsaWRTcGFuSWR9fSk7dmFyIHY9X19uY2N3cGNrX3JlcXVpcmVfXyg0NzYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiSU5WQUxJRF9TUEFOSURcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiB2LklOVkFMSURfU1BBTklEfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiSU5WQUxJRF9UUkFDRUlEXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdi5JTlZBTElEX1RSQUNFSUR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJJTlZBTElEX1NQQU5fQ09OVEVYVFwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHYuSU5WQUxJRF9TUEFOX0NPTlRFWFR9fSk7Y29uc3QgTz1fX25jY3dwY2tfcmVxdWlyZV9fKDY3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImNvbnRleHRcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBPLmNvbnRleHR9fSk7Y29uc3QgUD1fX25jY3dwY2tfcmVxdWlyZV9fKDUwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkaWFnXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUC5kaWFnfX0pO2NvbnN0IE49X19uY2N3cGNrX3JlcXVpcmVfXyg4ODYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwibWV0cmljc1wiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE4ubWV0cmljc319KTtjb25zdCBTPV9fbmNjd3Bja19yZXF1aXJlX18oOTM5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInByb3BhZ2F0aW9uXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUy5wcm9wYWdhdGlvbn19KTtjb25zdCBDPV9fbmNjd3Bja19yZXF1aXJlX18oODQ1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcInRyYWNlXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQy50cmFjZX19KTtlW1wiZGVmYXVsdFwiXT17Y29udGV4dDpPLmNvbnRleHQsZGlhZzpQLmRpYWcsbWV0cmljczpOLm1ldHJpY3MscHJvcGFnYXRpb246Uy5wcm9wYWdhdGlvbix0cmFjZTpDLnRyYWNlfX0pKCk7bW9kdWxlLmV4cG9ydHM9cn0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/compiled/@opentelemetry/api/index.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/lib/constants.js": +/*!*************************************************!*\ + !*** ./node_modules/next/dist/lib/constants.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n NEXT_QUERY_PARAM_PREFIX: function() {\n return NEXT_QUERY_PARAM_PREFIX;\n },\n PRERENDER_REVALIDATE_HEADER: function() {\n return PRERENDER_REVALIDATE_HEADER;\n },\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: function() {\n return PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER;\n },\n RSC_PREFETCH_SUFFIX: function() {\n return RSC_PREFETCH_SUFFIX;\n },\n RSC_SUFFIX: function() {\n return RSC_SUFFIX;\n },\n NEXT_DATA_SUFFIX: function() {\n return NEXT_DATA_SUFFIX;\n },\n NEXT_META_SUFFIX: function() {\n return NEXT_META_SUFFIX;\n },\n NEXT_BODY_SUFFIX: function() {\n return NEXT_BODY_SUFFIX;\n },\n NEXT_CACHE_TAGS_HEADER: function() {\n return NEXT_CACHE_TAGS_HEADER;\n },\n NEXT_CACHE_SOFT_TAGS_HEADER: function() {\n return NEXT_CACHE_SOFT_TAGS_HEADER;\n },\n NEXT_CACHE_REVALIDATED_TAGS_HEADER: function() {\n return NEXT_CACHE_REVALIDATED_TAGS_HEADER;\n },\n NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: function() {\n return NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER;\n },\n NEXT_CACHE_TAG_MAX_LENGTH: function() {\n return NEXT_CACHE_TAG_MAX_LENGTH;\n },\n NEXT_CACHE_SOFT_TAG_MAX_LENGTH: function() {\n return NEXT_CACHE_SOFT_TAG_MAX_LENGTH;\n },\n NEXT_CACHE_IMPLICIT_TAG_ID: function() {\n return NEXT_CACHE_IMPLICIT_TAG_ID;\n },\n CACHE_ONE_YEAR: function() {\n return CACHE_ONE_YEAR;\n },\n MIDDLEWARE_FILENAME: function() {\n return MIDDLEWARE_FILENAME;\n },\n MIDDLEWARE_LOCATION_REGEXP: function() {\n return MIDDLEWARE_LOCATION_REGEXP;\n },\n INSTRUMENTATION_HOOK_FILENAME: function() {\n return INSTRUMENTATION_HOOK_FILENAME;\n },\n PAGES_DIR_ALIAS: function() {\n return PAGES_DIR_ALIAS;\n },\n DOT_NEXT_ALIAS: function() {\n return DOT_NEXT_ALIAS;\n },\n ROOT_DIR_ALIAS: function() {\n return ROOT_DIR_ALIAS;\n },\n APP_DIR_ALIAS: function() {\n return APP_DIR_ALIAS;\n },\n RSC_MOD_REF_PROXY_ALIAS: function() {\n return RSC_MOD_REF_PROXY_ALIAS;\n },\n RSC_ACTION_VALIDATE_ALIAS: function() {\n return RSC_ACTION_VALIDATE_ALIAS;\n },\n RSC_ACTION_PROXY_ALIAS: function() {\n return RSC_ACTION_PROXY_ALIAS;\n },\n RSC_ACTION_ENCRYPTION_ALIAS: function() {\n return RSC_ACTION_ENCRYPTION_ALIAS;\n },\n RSC_ACTION_CLIENT_WRAPPER_ALIAS: function() {\n return RSC_ACTION_CLIENT_WRAPPER_ALIAS;\n },\n PUBLIC_DIR_MIDDLEWARE_CONFLICT: function() {\n return PUBLIC_DIR_MIDDLEWARE_CONFLICT;\n },\n SSG_GET_INITIAL_PROPS_CONFLICT: function() {\n return SSG_GET_INITIAL_PROPS_CONFLICT;\n },\n SERVER_PROPS_GET_INIT_PROPS_CONFLICT: function() {\n return SERVER_PROPS_GET_INIT_PROPS_CONFLICT;\n },\n SERVER_PROPS_SSG_CONFLICT: function() {\n return SERVER_PROPS_SSG_CONFLICT;\n },\n STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: function() {\n return STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR;\n },\n SERVER_PROPS_EXPORT_ERROR: function() {\n return SERVER_PROPS_EXPORT_ERROR;\n },\n GSP_NO_RETURNED_VALUE: function() {\n return GSP_NO_RETURNED_VALUE;\n },\n GSSP_NO_RETURNED_VALUE: function() {\n return GSSP_NO_RETURNED_VALUE;\n },\n UNSTABLE_REVALIDATE_RENAME_ERROR: function() {\n return UNSTABLE_REVALIDATE_RENAME_ERROR;\n },\n GSSP_COMPONENT_MEMBER_ERROR: function() {\n return GSSP_COMPONENT_MEMBER_ERROR;\n },\n NON_STANDARD_NODE_ENV: function() {\n return NON_STANDARD_NODE_ENV;\n },\n SSG_FALLBACK_EXPORT_ERROR: function() {\n return SSG_FALLBACK_EXPORT_ERROR;\n },\n ESLINT_DEFAULT_DIRS: function() {\n return ESLINT_DEFAULT_DIRS;\n },\n ESLINT_PROMPT_VALUES: function() {\n return ESLINT_PROMPT_VALUES;\n },\n SERVER_RUNTIME: function() {\n return SERVER_RUNTIME;\n },\n WEBPACK_LAYERS: function() {\n return WEBPACK_LAYERS;\n },\n WEBPACK_RESOURCE_QUERIES: function() {\n return WEBPACK_RESOURCE_QUERIES;\n }\n});\nconst NEXT_QUERY_PARAM_PREFIX = \"nxtP\";\nconst PRERENDER_REVALIDATE_HEADER = \"x-prerender-revalidate\";\nconst PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = \"x-prerender-revalidate-if-generated\";\nconst RSC_PREFETCH_SUFFIX = \".prefetch.rsc\";\nconst RSC_SUFFIX = \".rsc\";\nconst NEXT_DATA_SUFFIX = \".json\";\nconst NEXT_META_SUFFIX = \".meta\";\nconst NEXT_BODY_SUFFIX = \".body\";\nconst NEXT_CACHE_TAGS_HEADER = \"x-next-cache-tags\";\nconst NEXT_CACHE_SOFT_TAGS_HEADER = \"x-next-cache-soft-tags\";\nconst NEXT_CACHE_REVALIDATED_TAGS_HEADER = \"x-next-revalidated-tags\";\nconst NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER = \"x-next-revalidate-tag-token\";\nconst NEXT_CACHE_TAG_MAX_LENGTH = 256;\nconst NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024;\nconst NEXT_CACHE_IMPLICIT_TAG_ID = \"_N_T_\";\nconst CACHE_ONE_YEAR = 31536000;\nconst MIDDLEWARE_FILENAME = \"middleware\";\nconst MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`;\nconst INSTRUMENTATION_HOOK_FILENAME = \"instrumentation\";\nconst PAGES_DIR_ALIAS = \"private-next-pages\";\nconst DOT_NEXT_ALIAS = \"private-dot-next\";\nconst ROOT_DIR_ALIAS = \"private-next-root-dir\";\nconst APP_DIR_ALIAS = \"private-next-app-dir\";\nconst RSC_MOD_REF_PROXY_ALIAS = \"next/dist/build/webpack/loaders/next-flight-loader/module-proxy\";\nconst RSC_ACTION_VALIDATE_ALIAS = \"private-next-rsc-action-validate\";\nconst RSC_ACTION_PROXY_ALIAS = \"private-next-rsc-server-reference\";\nconst RSC_ACTION_ENCRYPTION_ALIAS = \"private-next-rsc-action-encryption\";\nconst RSC_ACTION_CLIENT_WRAPPER_ALIAS = \"private-next-rsc-action-client-wrapper\";\nconst PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`;\nconst SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`;\nconst SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`;\nconst SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`;\nconst STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`;\nconst SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`;\nconst GSP_NO_RETURNED_VALUE = \"Your `getStaticProps` function did not return an object. Did you forget to add a `return`?\";\nconst GSSP_NO_RETURNED_VALUE = \"Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?\";\nconst UNSTABLE_REVALIDATE_RENAME_ERROR = \"The `unstable_revalidate` property is available for general use.\\n\" + \"Please use `revalidate` instead.\";\nconst GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`;\nconst NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`;\nconst SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`;\nconst ESLINT_DEFAULT_DIRS = [\n \"app\",\n \"pages\",\n \"components\",\n \"lib\",\n \"src\"\n];\nconst ESLINT_PROMPT_VALUES = [\n {\n title: \"Strict\",\n recommended: true,\n config: {\n extends: \"next/core-web-vitals\"\n }\n },\n {\n title: \"Base\",\n config: {\n extends: \"next\"\n }\n },\n {\n title: \"Cancel\",\n config: null\n }\n];\nconst SERVER_RUNTIME = {\n edge: \"edge\",\n experimentalEdge: \"experimental-edge\",\n nodejs: \"nodejs\"\n};\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */ const WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */ shared: \"shared\",\n /**\n * React Server Components layer (rsc).\n */ reactServerComponents: \"rsc\",\n /**\n * Server Side Rendering layer for app (ssr).\n */ serverSideRendering: \"ssr\",\n /**\n * The browser client bundle layer for actions.\n */ actionBrowser: \"action-browser\",\n /**\n * The layer for the API routes.\n */ api: \"api\",\n /**\n * The layer for the middleware code.\n */ middleware: \"middleware\",\n /**\n * The layer for assets on the edge.\n */ edgeAsset: \"edge-asset\",\n /**\n * The browser client bundle layer for App directory.\n */ appPagesBrowser: \"app-pages-browser\",\n /**\n * The server bundle layer for metadata routes.\n */ appMetadataRoute: \"app-metadata-route\",\n /**\n * The layer for the server bundle for App Route handlers.\n */ appRouteHandler: \"app-route-handler\"\n};\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n server: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.appMetadataRoute,\n WEBPACK_LAYERS_NAMES.appRouteHandler\n ],\n nonClientServerTarget: [\n // plus middleware and pages api\n WEBPACK_LAYERS_NAMES.middleware,\n WEBPACK_LAYERS_NAMES.api\n ],\n app: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.appMetadataRoute,\n WEBPACK_LAYERS_NAMES.appRouteHandler,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared\n ]\n }\n};\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: \"__next_edge_ssr_entry__\",\n metadata: \"__next_metadata__\",\n metadataRoute: \"__next_metadata_route__\",\n metadataImageMeta: \"__next_metadata_image_meta__\"\n};\n\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9jb25zdGFudHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBOENMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxvQkFBb0I7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvY29uc3RhbnRzLmpzP2QwOGQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBORVhUX1FVRVJZX1BBUkFNX1BSRUZJWDogbnVsbCxcbiAgICBQUkVSRU5ERVJfUkVWQUxJREFURV9IRUFERVI6IG51bGwsXG4gICAgUFJFUkVOREVSX1JFVkFMSURBVEVfT05MWV9HRU5FUkFURURfSEVBREVSOiBudWxsLFxuICAgIFJTQ19QUkVGRVRDSF9TVUZGSVg6IG51bGwsXG4gICAgUlNDX1NVRkZJWDogbnVsbCxcbiAgICBORVhUX0RBVEFfU1VGRklYOiBudWxsLFxuICAgIE5FWFRfTUVUQV9TVUZGSVg6IG51bGwsXG4gICAgTkVYVF9CT0RZX1NVRkZJWDogbnVsbCxcbiAgICBORVhUX0NBQ0hFX1RBR1NfSEVBREVSOiBudWxsLFxuICAgIE5FWFRfQ0FDSEVfU09GVF9UQUdTX0hFQURFUjogbnVsbCxcbiAgICBORVhUX0NBQ0hFX1JFVkFMSURBVEVEX1RBR1NfSEVBREVSOiBudWxsLFxuICAgIE5FWFRfQ0FDSEVfUkVWQUxJREFURV9UQUdfVE9LRU5fSEVBREVSOiBudWxsLFxuICAgIE5FWFRfQ0FDSEVfVEFHX01BWF9MRU5HVEg6IG51bGwsXG4gICAgTkVYVF9DQUNIRV9TT0ZUX1RBR19NQVhfTEVOR1RIOiBudWxsLFxuICAgIE5FWFRfQ0FDSEVfSU1QTElDSVRfVEFHX0lEOiBudWxsLFxuICAgIENBQ0hFX09ORV9ZRUFSOiBudWxsLFxuICAgIE1JRERMRVdBUkVfRklMRU5BTUU6IG51bGwsXG4gICAgTUlERExFV0FSRV9MT0NBVElPTl9SRUdFWFA6IG51bGwsXG4gICAgSU5TVFJVTUVOVEFUSU9OX0hPT0tfRklMRU5BTUU6IG51bGwsXG4gICAgUEFHRVNfRElSX0FMSUFTOiBudWxsLFxuICAgIERPVF9ORVhUX0FMSUFTOiBudWxsLFxuICAgIFJPT1RfRElSX0FMSUFTOiBudWxsLFxuICAgIEFQUF9ESVJfQUxJQVM6IG51bGwsXG4gICAgUlNDX01PRF9SRUZfUFJPWFlfQUxJQVM6IG51bGwsXG4gICAgUlNDX0FDVElPTl9WQUxJREFURV9BTElBUzogbnVsbCxcbiAgICBSU0NfQUNUSU9OX1BST1hZX0FMSUFTOiBudWxsLFxuICAgIFJTQ19BQ1RJT05fRU5DUllQVElPTl9BTElBUzogbnVsbCxcbiAgICBSU0NfQUNUSU9OX0NMSUVOVF9XUkFQUEVSX0FMSUFTOiBudWxsLFxuICAgIFBVQkxJQ19ESVJfTUlERExFV0FSRV9DT05GTElDVDogbnVsbCxcbiAgICBTU0dfR0VUX0lOSVRJQUxfUFJPUFNfQ09ORkxJQ1Q6IG51bGwsXG4gICAgU0VSVkVSX1BST1BTX0dFVF9JTklUX1BST1BTX0NPTkZMSUNUOiBudWxsLFxuICAgIFNFUlZFUl9QUk9QU19TU0dfQ09ORkxJQ1Q6IG51bGwsXG4gICAgU1RBVElDX1NUQVRVU19QQUdFX0dFVF9JTklUSUFMX1BST1BTX0VSUk9SOiBudWxsLFxuICAgIFNFUlZFUl9QUk9QU19FWFBPUlRfRVJST1I6IG51bGwsXG4gICAgR1NQX05PX1JFVFVSTkVEX1ZBTFVFOiBudWxsLFxuICAgIEdTU1BfTk9fUkVUVVJORURfVkFMVUU6IG51bGwsXG4gICAgVU5TVEFCTEVfUkVWQUxJREFURV9SRU5BTUVfRVJST1I6IG51bGwsXG4gICAgR1NTUF9DT01QT05FTlRfTUVNQkVSX0VSUk9SOiBudWxsLFxuICAgIE5PTl9TVEFOREFSRF9OT0RFX0VOVjogbnVsbCxcbiAgICBTU0dfRkFMTEJBQ0tfRVhQT1JUX0VSUk9SOiBudWxsLFxuICAgIEVTTElOVF9ERUZBVUxUX0RJUlM6IG51bGwsXG4gICAgRVNMSU5UX1BST01QVF9WQUxVRVM6IG51bGwsXG4gICAgU0VSVkVSX1JVTlRJTUU6IG51bGwsXG4gICAgV0VCUEFDS19MQVlFUlM6IG51bGwsXG4gICAgV0VCUEFDS19SRVNPVVJDRV9RVUVSSUVTOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIE5FWFRfUVVFUllfUEFSQU1fUFJFRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfUVVFUllfUEFSQU1fUFJFRklYO1xuICAgIH0sXG4gICAgUFJFUkVOREVSX1JFVkFMSURBVEVfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBSRVJFTkRFUl9SRVZBTElEQVRFX0hFQURFUjtcbiAgICB9LFxuICAgIFBSRVJFTkRFUl9SRVZBTElEQVRFX09OTFlfR0VORVJBVEVEX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQUkVSRU5ERVJfUkVWQUxJREFURV9PTkxZX0dFTkVSQVRFRF9IRUFERVI7XG4gICAgfSxcbiAgICBSU0NfUFJFRkVUQ0hfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19QUkVGRVRDSF9TVUZGSVg7XG4gICAgfSxcbiAgICBSU0NfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19TVUZGSVg7XG4gICAgfSxcbiAgICBORVhUX0RBVEFfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfREFUQV9TVUZGSVg7XG4gICAgfSxcbiAgICBORVhUX01FVEFfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfTUVUQV9TVUZGSVg7XG4gICAgfSxcbiAgICBORVhUX0JPRFlfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfQk9EWV9TVUZGSVg7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1RBR1NfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfQ0FDSEVfVEFHU19IRUFERVI7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1NPRlRfVEFHU19IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9DQUNIRV9TT0ZUX1RBR1NfSEVBREVSO1xuICAgIH0sXG4gICAgTkVYVF9DQUNIRV9SRVZBTElEQVRFRF9UQUdTX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0NBQ0hFX1JFVkFMSURBVEVEX1RBR1NfSEVBREVSO1xuICAgIH0sXG4gICAgTkVYVF9DQUNIRV9SRVZBTElEQVRFX1RBR19UT0tFTl9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9DQUNIRV9SRVZBTElEQVRFX1RBR19UT0tFTl9IRUFERVI7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1RBR19NQVhfTEVOR1RIOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfQ0FDSEVfVEFHX01BWF9MRU5HVEg7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1NPRlRfVEFHX01BWF9MRU5HVEg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9DQUNIRV9TT0ZUX1RBR19NQVhfTEVOR1RIO1xuICAgIH0sXG4gICAgTkVYVF9DQUNIRV9JTVBMSUNJVF9UQUdfSUQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9DQUNIRV9JTVBMSUNJVF9UQUdfSUQ7XG4gICAgfSxcbiAgICBDQUNIRV9PTkVfWUVBUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDQUNIRV9PTkVfWUVBUjtcbiAgICB9LFxuICAgIE1JRERMRVdBUkVfRklMRU5BTUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTUlERExFV0FSRV9GSUxFTkFNRTtcbiAgICB9LFxuICAgIE1JRERMRVdBUkVfTE9DQVRJT05fUkVHRVhQOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1JRERMRVdBUkVfTE9DQVRJT05fUkVHRVhQO1xuICAgIH0sXG4gICAgSU5TVFJVTUVOVEFUSU9OX0hPT0tfRklMRU5BTUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSU5TVFJVTUVOVEFUSU9OX0hPT0tfRklMRU5BTUU7XG4gICAgfSxcbiAgICBQQUdFU19ESVJfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUEFHRVNfRElSX0FMSUFTO1xuICAgIH0sXG4gICAgRE9UX05FWFRfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRE9UX05FWFRfQUxJQVM7XG4gICAgfSxcbiAgICBST09UX0RJUl9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBST09UX0RJUl9BTElBUztcbiAgICB9LFxuICAgIEFQUF9ESVJfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQVBQX0RJUl9BTElBUztcbiAgICB9LFxuICAgIFJTQ19NT0RfUkVGX1BST1hZX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19NT0RfUkVGX1BST1hZX0FMSUFTO1xuICAgIH0sXG4gICAgUlNDX0FDVElPTl9WQUxJREFURV9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfQUNUSU9OX1ZBTElEQVRFX0FMSUFTO1xuICAgIH0sXG4gICAgUlNDX0FDVElPTl9QUk9YWV9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfQUNUSU9OX1BST1hZX0FMSUFTO1xuICAgIH0sXG4gICAgUlNDX0FDVElPTl9FTkNSWVBUSU9OX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19BQ1RJT05fRU5DUllQVElPTl9BTElBUztcbiAgICB9LFxuICAgIFJTQ19BQ1RJT05fQ0xJRU5UX1dSQVBQRVJfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX0FDVElPTl9DTElFTlRfV1JBUFBFUl9BTElBUztcbiAgICB9LFxuICAgIFBVQkxJQ19ESVJfTUlERExFV0FSRV9DT05GTElDVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQVUJMSUNfRElSX01JRERMRVdBUkVfQ09ORkxJQ1Q7XG4gICAgfSxcbiAgICBTU0dfR0VUX0lOSVRJQUxfUFJPUFNfQ09ORkxJQ1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1NHX0dFVF9JTklUSUFMX1BST1BTX0NPTkZMSUNUO1xuICAgIH0sXG4gICAgU0VSVkVSX1BST1BTX0dFVF9JTklUX1BST1BTX0NPTkZMSUNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNFUlZFUl9QUk9QU19HRVRfSU5JVF9QUk9QU19DT05GTElDVDtcbiAgICB9LFxuICAgIFNFUlZFUl9QUk9QU19TU0dfQ09ORkxJQ1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU0VSVkVSX1BST1BTX1NTR19DT05GTElDVDtcbiAgICB9LFxuICAgIFNUQVRJQ19TVEFUVVNfUEFHRV9HRVRfSU5JVElBTF9QUk9QU19FUlJPUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTVEFUSUNfU1RBVFVTX1BBR0VfR0VUX0lOSVRJQUxfUFJPUFNfRVJST1I7XG4gICAgfSxcbiAgICBTRVJWRVJfUFJPUFNfRVhQT1JUX0VSUk9SOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNFUlZFUl9QUk9QU19FWFBPUlRfRVJST1I7XG4gICAgfSxcbiAgICBHU1BfTk9fUkVUVVJORURfVkFMVUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gR1NQX05PX1JFVFVSTkVEX1ZBTFVFO1xuICAgIH0sXG4gICAgR1NTUF9OT19SRVRVUk5FRF9WQUxVRTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBHU1NQX05PX1JFVFVSTkVEX1ZBTFVFO1xuICAgIH0sXG4gICAgVU5TVEFCTEVfUkVWQUxJREFURV9SRU5BTUVfRVJST1I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gVU5TVEFCTEVfUkVWQUxJREFURV9SRU5BTUVfRVJST1I7XG4gICAgfSxcbiAgICBHU1NQX0NPTVBPTkVOVF9NRU1CRVJfRVJST1I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gR1NTUF9DT01QT05FTlRfTUVNQkVSX0VSUk9SO1xuICAgIH0sXG4gICAgTk9OX1NUQU5EQVJEX05PREVfRU5WOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5PTl9TVEFOREFSRF9OT0RFX0VOVjtcbiAgICB9LFxuICAgIFNTR19GQUxMQkFDS19FWFBPUlRfRVJST1I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1NHX0ZBTExCQUNLX0VYUE9SVF9FUlJPUjtcbiAgICB9LFxuICAgIEVTTElOVF9ERUZBVUxUX0RJUlM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRVNMSU5UX0RFRkFVTFRfRElSUztcbiAgICB9LFxuICAgIEVTTElOVF9QUk9NUFRfVkFMVUVTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEVTTElOVF9QUk9NUFRfVkFMVUVTO1xuICAgIH0sXG4gICAgU0VSVkVSX1JVTlRJTUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU0VSVkVSX1JVTlRJTUU7XG4gICAgfSxcbiAgICBXRUJQQUNLX0xBWUVSUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBXRUJQQUNLX0xBWUVSUztcbiAgICB9LFxuICAgIFdFQlBBQ0tfUkVTT1VSQ0VfUVVFUklFUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBXRUJQQUNLX1JFU09VUkNFX1FVRVJJRVM7XG4gICAgfVxufSk7XG5jb25zdCBORVhUX1FVRVJZX1BBUkFNX1BSRUZJWCA9IFwibnh0UFwiO1xuY29uc3QgUFJFUkVOREVSX1JFVkFMSURBVEVfSEVBREVSID0gXCJ4LXByZXJlbmRlci1yZXZhbGlkYXRlXCI7XG5jb25zdCBQUkVSRU5ERVJfUkVWQUxJREFURV9PTkxZX0dFTkVSQVRFRF9IRUFERVIgPSBcIngtcHJlcmVuZGVyLXJldmFsaWRhdGUtaWYtZ2VuZXJhdGVkXCI7XG5jb25zdCBSU0NfUFJFRkVUQ0hfU1VGRklYID0gXCIucHJlZmV0Y2gucnNjXCI7XG5jb25zdCBSU0NfU1VGRklYID0gXCIucnNjXCI7XG5jb25zdCBORVhUX0RBVEFfU1VGRklYID0gXCIuanNvblwiO1xuY29uc3QgTkVYVF9NRVRBX1NVRkZJWCA9IFwiLm1ldGFcIjtcbmNvbnN0IE5FWFRfQk9EWV9TVUZGSVggPSBcIi5ib2R5XCI7XG5jb25zdCBORVhUX0NBQ0hFX1RBR1NfSEVBREVSID0gXCJ4LW5leHQtY2FjaGUtdGFnc1wiO1xuY29uc3QgTkVYVF9DQUNIRV9TT0ZUX1RBR1NfSEVBREVSID0gXCJ4LW5leHQtY2FjaGUtc29mdC10YWdzXCI7XG5jb25zdCBORVhUX0NBQ0hFX1JFVkFMSURBVEVEX1RBR1NfSEVBREVSID0gXCJ4LW5leHQtcmV2YWxpZGF0ZWQtdGFnc1wiO1xuY29uc3QgTkVYVF9DQUNIRV9SRVZBTElEQVRFX1RBR19UT0tFTl9IRUFERVIgPSBcIngtbmV4dC1yZXZhbGlkYXRlLXRhZy10b2tlblwiO1xuY29uc3QgTkVYVF9DQUNIRV9UQUdfTUFYX0xFTkdUSCA9IDI1NjtcbmNvbnN0IE5FWFRfQ0FDSEVfU09GVF9UQUdfTUFYX0xFTkdUSCA9IDEwMjQ7XG5jb25zdCBORVhUX0NBQ0hFX0lNUExJQ0lUX1RBR19JRCA9IFwiX05fVF9cIjtcbmNvbnN0IENBQ0hFX09ORV9ZRUFSID0gMzE1MzYwMDA7XG5jb25zdCBNSURETEVXQVJFX0ZJTEVOQU1FID0gXCJtaWRkbGV3YXJlXCI7XG5jb25zdCBNSURETEVXQVJFX0xPQ0FUSU9OX1JFR0VYUCA9IGAoPzpzcmMvKT8ke01JRERMRVdBUkVfRklMRU5BTUV9YDtcbmNvbnN0IElOU1RSVU1FTlRBVElPTl9IT09LX0ZJTEVOQU1FID0gXCJpbnN0cnVtZW50YXRpb25cIjtcbmNvbnN0IFBBR0VTX0RJUl9BTElBUyA9IFwicHJpdmF0ZS1uZXh0LXBhZ2VzXCI7XG5jb25zdCBET1RfTkVYVF9BTElBUyA9IFwicHJpdmF0ZS1kb3QtbmV4dFwiO1xuY29uc3QgUk9PVF9ESVJfQUxJQVMgPSBcInByaXZhdGUtbmV4dC1yb290LWRpclwiO1xuY29uc3QgQVBQX0RJUl9BTElBUyA9IFwicHJpdmF0ZS1uZXh0LWFwcC1kaXJcIjtcbmNvbnN0IFJTQ19NT0RfUkVGX1BST1hZX0FMSUFTID0gXCJuZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWxvYWRlci9tb2R1bGUtcHJveHlcIjtcbmNvbnN0IFJTQ19BQ1RJT05fVkFMSURBVEVfQUxJQVMgPSBcInByaXZhdGUtbmV4dC1yc2MtYWN0aW9uLXZhbGlkYXRlXCI7XG5jb25zdCBSU0NfQUNUSU9OX1BST1hZX0FMSUFTID0gXCJwcml2YXRlLW5leHQtcnNjLXNlcnZlci1yZWZlcmVuY2VcIjtcbmNvbnN0IFJTQ19BQ1RJT05fRU5DUllQVElPTl9BTElBUyA9IFwicHJpdmF0ZS1uZXh0LXJzYy1hY3Rpb24tZW5jcnlwdGlvblwiO1xuY29uc3QgUlNDX0FDVElPTl9DTElFTlRfV1JBUFBFUl9BTElBUyA9IFwicHJpdmF0ZS1uZXh0LXJzYy1hY3Rpb24tY2xpZW50LXdyYXBwZXJcIjtcbmNvbnN0IFBVQkxJQ19ESVJfTUlERExFV0FSRV9DT05GTElDVCA9IGBZb3UgY2FuIG5vdCBoYXZlIGEgJ19uZXh0JyBmb2xkZXIgaW5zaWRlIG9mIHlvdXIgcHVibGljIGZvbGRlci4gVGhpcyBjb25mbGljdHMgd2l0aCB0aGUgaW50ZXJuYWwgJy9fbmV4dCcgcm91dGUuIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3B1YmxpYy1uZXh0LWZvbGRlci1jb25mbGljdGA7XG5jb25zdCBTU0dfR0VUX0lOSVRJQUxfUFJPUFNfQ09ORkxJQ1QgPSBgWW91IGNhbiBub3QgdXNlIGdldEluaXRpYWxQcm9wcyB3aXRoIGdldFN0YXRpY1Byb3BzLiBUbyB1c2UgU1NHLCBwbGVhc2UgcmVtb3ZlIHlvdXIgZ2V0SW5pdGlhbFByb3BzYDtcbmNvbnN0IFNFUlZFUl9QUk9QU19HRVRfSU5JVF9QUk9QU19DT05GTElDVCA9IGBZb3UgY2FuIG5vdCB1c2UgZ2V0SW5pdGlhbFByb3BzIHdpdGggZ2V0U2VydmVyU2lkZVByb3BzLiBQbGVhc2UgcmVtb3ZlIGdldEluaXRpYWxQcm9wcy5gO1xuY29uc3QgU0VSVkVSX1BST1BTX1NTR19DT05GTElDVCA9IGBZb3UgY2FuIG5vdCB1c2UgZ2V0U3RhdGljUHJvcHMgb3IgZ2V0U3RhdGljUGF0aHMgd2l0aCBnZXRTZXJ2ZXJTaWRlUHJvcHMuIFRvIHVzZSBTU0csIHBsZWFzZSByZW1vdmUgZ2V0U2VydmVyU2lkZVByb3BzYDtcbmNvbnN0IFNUQVRJQ19TVEFUVVNfUEFHRV9HRVRfSU5JVElBTF9QUk9QU19FUlJPUiA9IGBjYW4gbm90IGhhdmUgZ2V0SW5pdGlhbFByb3BzL2dldFNlcnZlclNpZGVQcm9wcywgaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvNDA0LWdldC1pbml0aWFsLXByb3BzYDtcbmNvbnN0IFNFUlZFUl9QUk9QU19FWFBPUlRfRVJST1IgPSBgcGFnZXMgd2l0aCBcXGBnZXRTZXJ2ZXJTaWRlUHJvcHNcXGAgY2FuIG5vdCBiZSBleHBvcnRlZC4gU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9nc3NwLWV4cG9ydGA7XG5jb25zdCBHU1BfTk9fUkVUVVJORURfVkFMVUUgPSBcIllvdXIgYGdldFN0YXRpY1Byb3BzYCBmdW5jdGlvbiBkaWQgbm90IHJldHVybiBhbiBvYmplY3QuIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCBhIGByZXR1cm5gP1wiO1xuY29uc3QgR1NTUF9OT19SRVRVUk5FRF9WQUxVRSA9IFwiWW91ciBgZ2V0U2VydmVyU2lkZVByb3BzYCBmdW5jdGlvbiBkaWQgbm90IHJldHVybiBhbiBvYmplY3QuIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCBhIGByZXR1cm5gP1wiO1xuY29uc3QgVU5TVEFCTEVfUkVWQUxJREFURV9SRU5BTUVfRVJST1IgPSBcIlRoZSBgdW5zdGFibGVfcmV2YWxpZGF0ZWAgcHJvcGVydHkgaXMgYXZhaWxhYmxlIGZvciBnZW5lcmFsIHVzZS5cXG5cIiArIFwiUGxlYXNlIHVzZSBgcmV2YWxpZGF0ZWAgaW5zdGVhZC5cIjtcbmNvbnN0IEdTU1BfQ09NUE9ORU5UX01FTUJFUl9FUlJPUiA9IGBjYW4gbm90IGJlIGF0dGFjaGVkIHRvIGEgcGFnZSdzIGNvbXBvbmVudCBhbmQgbXVzdCBiZSBleHBvcnRlZCBmcm9tIHRoZSBwYWdlLiBTZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2dzc3AtY29tcG9uZW50LW1lbWJlcmA7XG5jb25zdCBOT05fU1RBTkRBUkRfTk9ERV9FTlYgPSBgWW91IGFyZSB1c2luZyBhIG5vbi1zdGFuZGFyZCBcIk5PREVfRU5WXCIgdmFsdWUgaW4geW91ciBlbnZpcm9ubWVudC4gVGhpcyBjcmVhdGVzIGluY29uc2lzdGVuY2llcyBpbiB0aGUgcHJvamVjdCBhbmQgaXMgc3Ryb25nbHkgYWR2aXNlZCBhZ2FpbnN0LiBSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25vbi1zdGFuZGFyZC1ub2RlLWVudmA7XG5jb25zdCBTU0dfRkFMTEJBQ0tfRVhQT1JUX0VSUk9SID0gYFBhZ2VzIHdpdGggXFxgZmFsbGJhY2tcXGAgZW5hYmxlZCBpbiBcXGBnZXRTdGF0aWNQYXRoc1xcYCBjYW4gbm90IGJlIGV4cG9ydGVkLiBTZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3NzZy1mYWxsYmFjay10cnVlLWV4cG9ydGA7XG5jb25zdCBFU0xJTlRfREVGQVVMVF9ESVJTID0gW1xuICAgIFwiYXBwXCIsXG4gICAgXCJwYWdlc1wiLFxuICAgIFwiY29tcG9uZW50c1wiLFxuICAgIFwibGliXCIsXG4gICAgXCJzcmNcIlxuXTtcbmNvbnN0IEVTTElOVF9QUk9NUFRfVkFMVUVTID0gW1xuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiU3RyaWN0XCIsXG4gICAgICAgIHJlY29tbWVuZGVkOiB0cnVlLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgIGV4dGVuZHM6IFwibmV4dC9jb3JlLXdlYi12aXRhbHNcIlxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIkJhc2VcIixcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBleHRlbmRzOiBcIm5leHRcIlxuICAgICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIkNhbmNlbFwiLFxuICAgICAgICBjb25maWc6IG51bGxcbiAgICB9XG5dO1xuY29uc3QgU0VSVkVSX1JVTlRJTUUgPSB7XG4gICAgZWRnZTogXCJlZGdlXCIsXG4gICAgZXhwZXJpbWVudGFsRWRnZTogXCJleHBlcmltZW50YWwtZWRnZVwiLFxuICAgIG5vZGVqczogXCJub2RlanNcIlxufTtcbi8qKlxuICogVGhlIG5hbWVzIG9mIHRoZSB3ZWJwYWNrIGxheWVycy4gVGhlc2UgbGF5ZXJzIGFyZSB0aGUgcHJpbWl0aXZlcyBmb3IgdGhlXG4gKiB3ZWJwYWNrIGNodW5rcy5cbiAqLyBjb25zdCBXRUJQQUNLX0xBWUVSU19OQU1FUyA9IHtcbiAgICAvKipcbiAgICogVGhlIGxheWVyIGZvciB0aGUgc2hhcmVkIGNvZGUgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgYnVuZGxlcy5cbiAgICovIHNoYXJlZDogXCJzaGFyZWRcIixcbiAgICAvKipcbiAgICogUmVhY3QgU2VydmVyIENvbXBvbmVudHMgbGF5ZXIgKHJzYykuXG4gICAqLyByZWFjdFNlcnZlckNvbXBvbmVudHM6IFwicnNjXCIsXG4gICAgLyoqXG4gICAqIFNlcnZlciBTaWRlIFJlbmRlcmluZyBsYXllciBmb3IgYXBwIChzc3IpLlxuICAgKi8gc2VydmVyU2lkZVJlbmRlcmluZzogXCJzc3JcIixcbiAgICAvKipcbiAgICogVGhlIGJyb3dzZXIgY2xpZW50IGJ1bmRsZSBsYXllciBmb3IgYWN0aW9ucy5cbiAgICovIGFjdGlvbkJyb3dzZXI6IFwiYWN0aW9uLWJyb3dzZXJcIixcbiAgICAvKipcbiAgICogVGhlIGxheWVyIGZvciB0aGUgQVBJIHJvdXRlcy5cbiAgICovIGFwaTogXCJhcGlcIixcbiAgICAvKipcbiAgICogVGhlIGxheWVyIGZvciB0aGUgbWlkZGxld2FyZSBjb2RlLlxuICAgKi8gbWlkZGxld2FyZTogXCJtaWRkbGV3YXJlXCIsXG4gICAgLyoqXG4gICAqIFRoZSBsYXllciBmb3IgYXNzZXRzIG9uIHRoZSBlZGdlLlxuICAgKi8gZWRnZUFzc2V0OiBcImVkZ2UtYXNzZXRcIixcbiAgICAvKipcbiAgICogVGhlIGJyb3dzZXIgY2xpZW50IGJ1bmRsZSBsYXllciBmb3IgQXBwIGRpcmVjdG9yeS5cbiAgICovIGFwcFBhZ2VzQnJvd3NlcjogXCJhcHAtcGFnZXMtYnJvd3NlclwiLFxuICAgIC8qKlxuICAgKiBUaGUgc2VydmVyIGJ1bmRsZSBsYXllciBmb3IgbWV0YWRhdGEgcm91dGVzLlxuICAgKi8gYXBwTWV0YWRhdGFSb3V0ZTogXCJhcHAtbWV0YWRhdGEtcm91dGVcIixcbiAgICAvKipcbiAgICogVGhlIGxheWVyIGZvciB0aGUgc2VydmVyIGJ1bmRsZSBmb3IgQXBwIFJvdXRlIGhhbmRsZXJzLlxuICAgKi8gYXBwUm91dGVIYW5kbGVyOiBcImFwcC1yb3V0ZS1oYW5kbGVyXCJcbn07XG5jb25zdCBXRUJQQUNLX0xBWUVSUyA9IHtcbiAgICAuLi5XRUJQQUNLX0xBWUVSU19OQU1FUyxcbiAgICBHUk9VUDoge1xuICAgICAgICBzZXJ2ZXI6IFtcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLnJlYWN0U2VydmVyQ29tcG9uZW50cyxcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFjdGlvbkJyb3dzZXIsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hcHBNZXRhZGF0YVJvdXRlLFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuYXBwUm91dGVIYW5kbGVyXG4gICAgICAgIF0sXG4gICAgICAgIG5vbkNsaWVudFNlcnZlclRhcmdldDogW1xuICAgICAgICAgICAgLy8gcGx1cyBtaWRkbGV3YXJlIGFuZCBwYWdlcyBhcGlcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLm1pZGRsZXdhcmUsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hcGlcbiAgICAgICAgXSxcbiAgICAgICAgYXBwOiBbXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5yZWFjdFNlcnZlckNvbXBvbmVudHMsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hY3Rpb25Ccm93c2VyLFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuYXBwTWV0YWRhdGFSb3V0ZSxcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFwcFJvdXRlSGFuZGxlcixcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLnNlcnZlclNpZGVSZW5kZXJpbmcsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hcHBQYWdlc0Jyb3dzZXIsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5zaGFyZWRcbiAgICAgICAgXVxuICAgIH1cbn07XG5jb25zdCBXRUJQQUNLX1JFU09VUkNFX1FVRVJJRVMgPSB7XG4gICAgZWRnZVNTUkVudHJ5OiBcIl9fbmV4dF9lZGdlX3Nzcl9lbnRyeV9fXCIsXG4gICAgbWV0YWRhdGE6IFwiX19uZXh0X21ldGFkYXRhX19cIixcbiAgICBtZXRhZGF0YVJvdXRlOiBcIl9fbmV4dF9tZXRhZGF0YV9yb3V0ZV9fXCIsXG4gICAgbWV0YWRhdGFJbWFnZU1ldGE6IFwiX19uZXh0X21ldGFkYXRhX2ltYWdlX21ldGFfX1wiXG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/lib/constants.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/lib/picocolors.js": +/*!**************************************************!*\ + !*** ./node_modules/next/dist/lib/picocolors.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("// ISC License\n// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov\n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n//\n// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n reset: function() {\n return reset;\n },\n bold: function() {\n return bold;\n },\n dim: function() {\n return dim;\n },\n italic: function() {\n return italic;\n },\n underline: function() {\n return underline;\n },\n inverse: function() {\n return inverse;\n },\n hidden: function() {\n return hidden;\n },\n strikethrough: function() {\n return strikethrough;\n },\n black: function() {\n return black;\n },\n red: function() {\n return red;\n },\n green: function() {\n return green;\n },\n yellow: function() {\n return yellow;\n },\n blue: function() {\n return blue;\n },\n magenta: function() {\n return magenta;\n },\n purple: function() {\n return purple;\n },\n cyan: function() {\n return cyan;\n },\n white: function() {\n return white;\n },\n gray: function() {\n return gray;\n },\n bgBlack: function() {\n return bgBlack;\n },\n bgRed: function() {\n return bgRed;\n },\n bgGreen: function() {\n return bgGreen;\n },\n bgYellow: function() {\n return bgYellow;\n },\n bgBlue: function() {\n return bgBlue;\n },\n bgMagenta: function() {\n return bgMagenta;\n },\n bgCyan: function() {\n return bgCyan;\n },\n bgWhite: function() {\n return bgWhite;\n }\n});\nvar _globalThis;\nconst { env, stdout } = ((_globalThis = globalThis) == null ? void 0 : _globalThis.process) ?? {};\nconst enabled = env && !env.NO_COLOR && (env.FORCE_COLOR || (stdout == null ? void 0 : stdout.isTTY) && !env.CI && env.TERM !== \"dumb\");\nconst replaceClose = (str, close, replace, index)=>{\n const start = str.substring(0, index) + replace;\n const end = str.substring(index + close.length);\n const nextIndex = end.indexOf(close);\n return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end;\n};\nconst formatter = (open, close, replace = open)=>{\n if (!enabled) return String;\n return (input)=>{\n const string = \"\" + input;\n const index = string.indexOf(close, open.length);\n return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;\n };\n};\nconst reset = enabled ? (s)=>`\\x1b[0m${s}\\x1b[0m` : String;\nconst bold = formatter(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\");\nconst dim = formatter(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\");\nconst italic = formatter(\"\\x1b[3m\", \"\\x1b[23m\");\nconst underline = formatter(\"\\x1b[4m\", \"\\x1b[24m\");\nconst inverse = formatter(\"\\x1b[7m\", \"\\x1b[27m\");\nconst hidden = formatter(\"\\x1b[8m\", \"\\x1b[28m\");\nconst strikethrough = formatter(\"\\x1b[9m\", \"\\x1b[29m\");\nconst black = formatter(\"\\x1b[30m\", \"\\x1b[39m\");\nconst red = formatter(\"\\x1b[31m\", \"\\x1b[39m\");\nconst green = formatter(\"\\x1b[32m\", \"\\x1b[39m\");\nconst yellow = formatter(\"\\x1b[33m\", \"\\x1b[39m\");\nconst blue = formatter(\"\\x1b[34m\", \"\\x1b[39m\");\nconst magenta = formatter(\"\\x1b[35m\", \"\\x1b[39m\");\nconst purple = formatter(\"\\x1b[38;2;173;127;168m\", \"\\x1b[39m\");\nconst cyan = formatter(\"\\x1b[36m\", \"\\x1b[39m\");\nconst white = formatter(\"\\x1b[37m\", \"\\x1b[39m\");\nconst gray = formatter(\"\\x1b[90m\", \"\\x1b[39m\");\nconst bgBlack = formatter(\"\\x1b[40m\", \"\\x1b[49m\");\nconst bgRed = formatter(\"\\x1b[41m\", \"\\x1b[49m\");\nconst bgGreen = formatter(\"\\x1b[42m\", \"\\x1b[49m\");\nconst bgYellow = formatter(\"\\x1b[43m\", \"\\x1b[49m\");\nconst bgBlue = formatter(\"\\x1b[44m\", \"\\x1b[49m\");\nconst bgMagenta = formatter(\"\\x1b[45m\", \"\\x1b[49m\");\nconst bgCyan = formatter(\"\\x1b[46m\", \"\\x1b[49m\");\nconst bgWhite = formatter(\"\\x1b[47m\", \"\\x1b[49m\");\n\n//# sourceMappingURL=picocolors.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9waWNvY29sb3JzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0EyQkw7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxRQUFRLGNBQWM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLEVBQUU7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsRUFBRSxJQUFJLElBQUk7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9waWNvY29sb3JzLmpzPzk4NTEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSVNDIExpY2Vuc2Vcbi8vIENvcHlyaWdodCAoYykgMjAyMSBBbGV4ZXkgUmFzcG9wb3YsIEtvc3RpYW50eW4gRGVueXNvdiwgQW50b24gVmVyaW5vdlxuLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG4vLyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlXG4vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVNcbi8vIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SXG4vLyBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTXG4vLyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU5cbi8vIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GXG4vLyBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuLy9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGV4ZXlyYXNwb3Bvdi9waWNvY29sb3JzL2Jsb2IvYjYyNjE0ODdlN2I4MWFhYWIyNDQwZTM5N2EzNTY3MzJjYWQ5ZTM0Mi9waWNvY29sb3JzLmpzI0wxXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIHJlc2V0OiBudWxsLFxuICAgIGJvbGQ6IG51bGwsXG4gICAgZGltOiBudWxsLFxuICAgIGl0YWxpYzogbnVsbCxcbiAgICB1bmRlcmxpbmU6IG51bGwsXG4gICAgaW52ZXJzZTogbnVsbCxcbiAgICBoaWRkZW46IG51bGwsXG4gICAgc3RyaWtldGhyb3VnaDogbnVsbCxcbiAgICBibGFjazogbnVsbCxcbiAgICByZWQ6IG51bGwsXG4gICAgZ3JlZW46IG51bGwsXG4gICAgeWVsbG93OiBudWxsLFxuICAgIGJsdWU6IG51bGwsXG4gICAgbWFnZW50YTogbnVsbCxcbiAgICBwdXJwbGU6IG51bGwsXG4gICAgY3lhbjogbnVsbCxcbiAgICB3aGl0ZTogbnVsbCxcbiAgICBncmF5OiBudWxsLFxuICAgIGJnQmxhY2s6IG51bGwsXG4gICAgYmdSZWQ6IG51bGwsXG4gICAgYmdHcmVlbjogbnVsbCxcbiAgICBiZ1llbGxvdzogbnVsbCxcbiAgICBiZ0JsdWU6IG51bGwsXG4gICAgYmdNYWdlbnRhOiBudWxsLFxuICAgIGJnQ3lhbjogbnVsbCxcbiAgICBiZ1doaXRlOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIHJlc2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJlc2V0O1xuICAgIH0sXG4gICAgYm9sZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBib2xkO1xuICAgIH0sXG4gICAgZGltOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRpbTtcbiAgICB9LFxuICAgIGl0YWxpYzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpdGFsaWM7XG4gICAgfSxcbiAgICB1bmRlcmxpbmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdW5kZXJsaW5lO1xuICAgIH0sXG4gICAgaW52ZXJzZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlO1xuICAgIH0sXG4gICAgaGlkZGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGhpZGRlbjtcbiAgICB9LFxuICAgIHN0cmlrZXRocm91Z2g6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3RyaWtldGhyb3VnaDtcbiAgICB9LFxuICAgIGJsYWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGJsYWNrO1xuICAgIH0sXG4gICAgcmVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJlZDtcbiAgICB9LFxuICAgIGdyZWVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdyZWVuO1xuICAgIH0sXG4gICAgeWVsbG93OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHllbGxvdztcbiAgICB9LFxuICAgIGJsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYmx1ZTtcbiAgICB9LFxuICAgIG1hZ2VudGE6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbWFnZW50YTtcbiAgICB9LFxuICAgIHB1cnBsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwdXJwbGU7XG4gICAgfSxcbiAgICBjeWFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGN5YW47XG4gICAgfSxcbiAgICB3aGl0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB3aGl0ZTtcbiAgICB9LFxuICAgIGdyYXk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ3JheTtcbiAgICB9LFxuICAgIGJnQmxhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYmdCbGFjaztcbiAgICB9LFxuICAgIGJnUmVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGJnUmVkO1xuICAgIH0sXG4gICAgYmdHcmVlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBiZ0dyZWVuO1xuICAgIH0sXG4gICAgYmdZZWxsb3c6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYmdZZWxsb3c7XG4gICAgfSxcbiAgICBiZ0JsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYmdCbHVlO1xuICAgIH0sXG4gICAgYmdNYWdlbnRhOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGJnTWFnZW50YTtcbiAgICB9LFxuICAgIGJnQ3lhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBiZ0N5YW47XG4gICAgfSxcbiAgICBiZ1doaXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGJnV2hpdGU7XG4gICAgfVxufSk7XG52YXIgX2dsb2JhbFRoaXM7XG5jb25zdCB7IGVudiwgc3Rkb3V0IH0gPSAoKF9nbG9iYWxUaGlzID0gZ2xvYmFsVGhpcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9nbG9iYWxUaGlzLnByb2Nlc3MpID8/IHt9O1xuY29uc3QgZW5hYmxlZCA9IGVudiAmJiAhZW52Lk5PX0NPTE9SICYmIChlbnYuRk9SQ0VfQ09MT1IgfHwgKHN0ZG91dCA9PSBudWxsID8gdm9pZCAwIDogc3Rkb3V0LmlzVFRZKSAmJiAhZW52LkNJICYmIGVudi5URVJNICE9PSBcImR1bWJcIik7XG5jb25zdCByZXBsYWNlQ2xvc2UgPSAoc3RyLCBjbG9zZSwgcmVwbGFjZSwgaW5kZXgpPT57XG4gICAgY29uc3Qgc3RhcnQgPSBzdHIuc3Vic3RyaW5nKDAsIGluZGV4KSArIHJlcGxhY2U7XG4gICAgY29uc3QgZW5kID0gc3RyLnN1YnN0cmluZyhpbmRleCArIGNsb3NlLmxlbmd0aCk7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gZW5kLmluZGV4T2YoY2xvc2UpO1xuICAgIHJldHVybiB+bmV4dEluZGV4ID8gc3RhcnQgKyByZXBsYWNlQ2xvc2UoZW5kLCBjbG9zZSwgcmVwbGFjZSwgbmV4dEluZGV4KSA6IHN0YXJ0ICsgZW5kO1xufTtcbmNvbnN0IGZvcm1hdHRlciA9IChvcGVuLCBjbG9zZSwgcmVwbGFjZSA9IG9wZW4pPT57XG4gICAgaWYgKCFlbmFibGVkKSByZXR1cm4gU3RyaW5nO1xuICAgIHJldHVybiAoaW5wdXQpPT57XG4gICAgICAgIGNvbnN0IHN0cmluZyA9IFwiXCIgKyBpbnB1dDtcbiAgICAgICAgY29uc3QgaW5kZXggPSBzdHJpbmcuaW5kZXhPZihjbG9zZSwgb3Blbi5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gfmluZGV4ID8gb3BlbiArIHJlcGxhY2VDbG9zZShzdHJpbmcsIGNsb3NlLCByZXBsYWNlLCBpbmRleCkgKyBjbG9zZSA6IG9wZW4gKyBzdHJpbmcgKyBjbG9zZTtcbiAgICB9O1xufTtcbmNvbnN0IHJlc2V0ID0gZW5hYmxlZCA/IChzKT0+YFxceDFiWzBtJHtzfVxceDFiWzBtYCA6IFN0cmluZztcbmNvbnN0IGJvbGQgPSBmb3JtYXR0ZXIoXCJcXHgxYlsxbVwiLCBcIlxceDFiWzIybVwiLCBcIlxceDFiWzIybVxceDFiWzFtXCIpO1xuY29uc3QgZGltID0gZm9ybWF0dGVyKFwiXFx4MWJbMm1cIiwgXCJcXHgxYlsyMm1cIiwgXCJcXHgxYlsyMm1cXHgxYlsybVwiKTtcbmNvbnN0IGl0YWxpYyA9IGZvcm1hdHRlcihcIlxceDFiWzNtXCIsIFwiXFx4MWJbMjNtXCIpO1xuY29uc3QgdW5kZXJsaW5lID0gZm9ybWF0dGVyKFwiXFx4MWJbNG1cIiwgXCJcXHgxYlsyNG1cIik7XG5jb25zdCBpbnZlcnNlID0gZm9ybWF0dGVyKFwiXFx4MWJbN21cIiwgXCJcXHgxYlsyN21cIik7XG5jb25zdCBoaWRkZW4gPSBmb3JtYXR0ZXIoXCJcXHgxYls4bVwiLCBcIlxceDFiWzI4bVwiKTtcbmNvbnN0IHN0cmlrZXRocm91Z2ggPSBmb3JtYXR0ZXIoXCJcXHgxYls5bVwiLCBcIlxceDFiWzI5bVwiKTtcbmNvbnN0IGJsYWNrID0gZm9ybWF0dGVyKFwiXFx4MWJbMzBtXCIsIFwiXFx4MWJbMzltXCIpO1xuY29uc3QgcmVkID0gZm9ybWF0dGVyKFwiXFx4MWJbMzFtXCIsIFwiXFx4MWJbMzltXCIpO1xuY29uc3QgZ3JlZW4gPSBmb3JtYXR0ZXIoXCJcXHgxYlszMm1cIiwgXCJcXHgxYlszOW1cIik7XG5jb25zdCB5ZWxsb3cgPSBmb3JtYXR0ZXIoXCJcXHgxYlszM21cIiwgXCJcXHgxYlszOW1cIik7XG5jb25zdCBibHVlID0gZm9ybWF0dGVyKFwiXFx4MWJbMzRtXCIsIFwiXFx4MWJbMzltXCIpO1xuY29uc3QgbWFnZW50YSA9IGZvcm1hdHRlcihcIlxceDFiWzM1bVwiLCBcIlxceDFiWzM5bVwiKTtcbmNvbnN0IHB1cnBsZSA9IGZvcm1hdHRlcihcIlxceDFiWzM4OzI7MTczOzEyNzsxNjhtXCIsIFwiXFx4MWJbMzltXCIpO1xuY29uc3QgY3lhbiA9IGZvcm1hdHRlcihcIlxceDFiWzM2bVwiLCBcIlxceDFiWzM5bVwiKTtcbmNvbnN0IHdoaXRlID0gZm9ybWF0dGVyKFwiXFx4MWJbMzdtXCIsIFwiXFx4MWJbMzltXCIpO1xuY29uc3QgZ3JheSA9IGZvcm1hdHRlcihcIlxceDFiWzkwbVwiLCBcIlxceDFiWzM5bVwiKTtcbmNvbnN0IGJnQmxhY2sgPSBmb3JtYXR0ZXIoXCJcXHgxYls0MG1cIiwgXCJcXHgxYls0OW1cIik7XG5jb25zdCBiZ1JlZCA9IGZvcm1hdHRlcihcIlxceDFiWzQxbVwiLCBcIlxceDFiWzQ5bVwiKTtcbmNvbnN0IGJnR3JlZW4gPSBmb3JtYXR0ZXIoXCJcXHgxYls0Mm1cIiwgXCJcXHgxYls0OW1cIik7XG5jb25zdCBiZ1llbGxvdyA9IGZvcm1hdHRlcihcIlxceDFiWzQzbVwiLCBcIlxceDFiWzQ5bVwiKTtcbmNvbnN0IGJnQmx1ZSA9IGZvcm1hdHRlcihcIlxceDFiWzQ0bVwiLCBcIlxceDFiWzQ5bVwiKTtcbmNvbnN0IGJnTWFnZW50YSA9IGZvcm1hdHRlcihcIlxceDFiWzQ1bVwiLCBcIlxceDFiWzQ5bVwiKTtcbmNvbnN0IGJnQ3lhbiA9IGZvcm1hdHRlcihcIlxceDFiWzQ2bVwiLCBcIlxceDFiWzQ5bVwiKTtcbmNvbnN0IGJnV2hpdGUgPSBmb3JtYXR0ZXIoXCJcXHgxYls0N21cIiwgXCJcXHgxYls0OW1cIik7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBpY29jb2xvcnMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/lib/picocolors.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/server/app-render/entry-base.js": +/*!****************************************************************!*\ + !*** ./node_modules/next/dist/server/app-render/entry-base.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n renderToReadableStream: function() {\n return _serveredge.renderToReadableStream;\n },\n decodeReply: function() {\n return _serveredge.decodeReply;\n },\n decodeAction: function() {\n return _serveredge.decodeAction;\n },\n decodeFormState: function() {\n return _serveredge.decodeFormState;\n },\n AppRouter: function() {\n return _approuter.default;\n },\n LayoutRouter: function() {\n return _layoutrouter.default;\n },\n RenderFromTemplateContext: function() {\n return _renderfromtemplatecontext.default;\n },\n staticGenerationAsyncStorage: function() {\n return _staticgenerationasyncstorageexternal.staticGenerationAsyncStorage;\n },\n requestAsyncStorage: function() {\n return _requestasyncstorageexternal.requestAsyncStorage;\n },\n actionAsyncStorage: function() {\n return _actionasyncstorageexternal.actionAsyncStorage;\n },\n staticGenerationBailout: function() {\n return _staticgenerationbailout.staticGenerationBailout;\n },\n createSearchParamsBailoutProxy: function() {\n return _searchparamsbailoutproxy.createSearchParamsBailoutProxy;\n },\n serverHooks: function() {\n return _hooksservercontext;\n },\n preloadStyle: function() {\n return _preloads.preloadStyle;\n },\n preloadFont: function() {\n return _preloads.preloadFont;\n },\n preconnect: function() {\n return _preloads.preconnect;\n },\n taintObjectReference: function() {\n return _taint.taintObjectReference;\n },\n StaticGenerationSearchParamsBailoutProvider: function() {\n return _staticgenerationsearchparamsbailoutprovider.default;\n },\n NotFoundBoundary: function() {\n return _notfoundboundary.NotFoundBoundary;\n },\n patchFetch: function() {\n return patchFetch;\n }\n});\nconst _serveredge = __webpack_require__(/*! react-server-dom-webpack/server.edge */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge.js\");\nconst _approuter = /*#__PURE__*/ _interop_require_default(__webpack_require__(/*! ../../client/components/app-router */ \"(rsc)/./node_modules/next/dist/client/components/app-router.js\"));\nconst _layoutrouter = /*#__PURE__*/ _interop_require_default(__webpack_require__(/*! ../../client/components/layout-router */ \"(rsc)/./node_modules/next/dist/client/components/layout-router.js\"));\nconst _renderfromtemplatecontext = /*#__PURE__*/ _interop_require_default(__webpack_require__(/*! ../../client/components/render-from-template-context */ \"(rsc)/./node_modules/next/dist/client/components/render-from-template-context.js\"));\nconst _staticgenerationasyncstorageexternal = __webpack_require__(/*! ../../client/components/static-generation-async-storage.external */ \"../../client/components/static-generation-async-storage.external\");\nconst _requestasyncstorageexternal = __webpack_require__(/*! ../../client/components/request-async-storage.external */ \"../../client/components/request-async-storage.external\");\nconst _actionasyncstorageexternal = __webpack_require__(/*! ../../client/components/action-async-storage.external */ \"../../client/components/action-async-storage.external\");\nconst _staticgenerationbailout = __webpack_require__(/*! ../../client/components/static-generation-bailout */ \"(rsc)/./node_modules/next/dist/client/components/static-generation-bailout.js\");\nconst _staticgenerationsearchparamsbailoutprovider = /*#__PURE__*/ _interop_require_default(__webpack_require__(/*! ../../client/components/static-generation-searchparams-bailout-provider */ \"(rsc)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js\"));\nconst _searchparamsbailoutproxy = __webpack_require__(/*! ../../client/components/searchparams-bailout-proxy */ \"(rsc)/./node_modules/next/dist/client/components/searchparams-bailout-proxy.js\");\nconst _hooksservercontext = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(/*! ../../client/components/hooks-server-context */ \"(rsc)/./node_modules/next/dist/client/components/hooks-server-context.js\"));\nconst _notfoundboundary = __webpack_require__(/*! ../../client/components/not-found-boundary */ \"(rsc)/./node_modules/next/dist/client/components/not-found-boundary.js\");\nconst _patchfetch = __webpack_require__(/*! ../lib/patch-fetch */ \"(rsc)/./node_modules/next/dist/server/lib/patch-fetch.js\");\n__webpack_require__(/*! ../../client/components/error-boundary */ \"(rsc)/./node_modules/next/dist/client/components/error-boundary.js\");\nconst _preloads = __webpack_require__(/*! ../../server/app-render/rsc/preloads */ \"(rsc)/./node_modules/next/dist/server/app-render/rsc/preloads.js\");\nconst _taint = __webpack_require__(/*! ../../server/app-render/rsc/taint */ \"(rsc)/./node_modules/next/dist/server/app-render/rsc/taint.js\");\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n return {\n default: obj\n };\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n for(var key in obj){\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\n// patchFetch makes use of APIs such as `React.unstable_postpone` which are only available\n// in the experimental channel of React, so export it from here so that it comes from the bundled runtime\nfunction patchFetch() {\n return (0, _patchfetch.patchFetch)({\n serverHooks: _hooksservercontext,\n staticGenerationAsyncStorage: _staticgenerationasyncstorageexternal.staticGenerationAsyncStorage\n });\n}\n\n//# sourceMappingURL=entry-base.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL2VudHJ5LWJhc2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBcUJMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG9CQUFvQixtQkFBTyxDQUFDLHNLQUFzQztBQUNsRSwwREFBMEQsbUJBQU8sQ0FBQywwR0FBb0M7QUFDdEcsNkRBQTZELG1CQUFPLENBQUMsZ0hBQXVDO0FBQzVHLDBFQUEwRSxtQkFBTyxDQUFDLDhJQUFzRDtBQUN4SSw4Q0FBOEMsbUJBQU8sQ0FBQywwSUFBa0U7QUFDeEgscUNBQXFDLG1CQUFPLENBQUMsc0hBQXdEO0FBQ3JHLG9DQUFvQyxtQkFBTyxDQUFDLG9IQUF1RDtBQUNuRyxpQ0FBaUMsbUJBQU8sQ0FBQyx3SUFBbUQ7QUFDNUYsNEZBQTRGLG1CQUFPLENBQUMsb0xBQXlFO0FBQzdLLGtDQUFrQyxtQkFBTyxDQUFDLDBJQUFvRDtBQUM5RixvRUFBb0UsbUJBQU8sQ0FBQyw4SEFBOEM7QUFDMUgsMEJBQTBCLG1CQUFPLENBQUMsMEhBQTRDO0FBQzlFLG9CQUFvQixtQkFBTyxDQUFDLG9GQUFvQjtBQUNoRCxtQkFBTyxDQUFDLGtIQUF3QztBQUNoRCxrQkFBa0IsbUJBQU8sQ0FBQyw4R0FBc0M7QUFDaEUsZUFBZSxtQkFBTyxDQUFDLHdHQUFtQztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL2VudHJ5LWJhc2UuanM/MjExNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIHJlbmRlclRvUmVhZGFibGVTdHJlYW06IG51bGwsXG4gICAgZGVjb2RlUmVwbHk6IG51bGwsXG4gICAgZGVjb2RlQWN0aW9uOiBudWxsLFxuICAgIGRlY29kZUZvcm1TdGF0ZTogbnVsbCxcbiAgICBBcHBSb3V0ZXI6IG51bGwsXG4gICAgTGF5b3V0Um91dGVyOiBudWxsLFxuICAgIFJlbmRlckZyb21UZW1wbGF0ZUNvbnRleHQ6IG51bGwsXG4gICAgc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZTogbnVsbCxcbiAgICByZXF1ZXN0QXN5bmNTdG9yYWdlOiBudWxsLFxuICAgIGFjdGlvbkFzeW5jU3RvcmFnZTogbnVsbCxcbiAgICBzdGF0aWNHZW5lcmF0aW9uQmFpbG91dDogbnVsbCxcbiAgICBjcmVhdGVTZWFyY2hQYXJhbXNCYWlsb3V0UHJveHk6IG51bGwsXG4gICAgc2VydmVySG9va3M6IG51bGwsXG4gICAgcHJlbG9hZFN0eWxlOiBudWxsLFxuICAgIHByZWxvYWRGb250OiBudWxsLFxuICAgIHByZWNvbm5lY3Q6IG51bGwsXG4gICAgdGFpbnRPYmplY3RSZWZlcmVuY2U6IG51bGwsXG4gICAgU3RhdGljR2VuZXJhdGlvblNlYXJjaFBhcmFtc0JhaWxvdXRQcm92aWRlcjogbnVsbCxcbiAgICBOb3RGb3VuZEJvdW5kYXJ5OiBudWxsLFxuICAgIHBhdGNoRmV0Y2g6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgcmVuZGVyVG9SZWFkYWJsZVN0cmVhbTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc2VydmVyZWRnZS5yZW5kZXJUb1JlYWRhYmxlU3RyZWFtO1xuICAgIH0sXG4gICAgZGVjb2RlUmVwbHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3NlcnZlcmVkZ2UuZGVjb2RlUmVwbHk7XG4gICAgfSxcbiAgICBkZWNvZGVBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3NlcnZlcmVkZ2UuZGVjb2RlQWN0aW9uO1xuICAgIH0sXG4gICAgZGVjb2RlRm9ybVN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zZXJ2ZXJlZGdlLmRlY29kZUZvcm1TdGF0ZTtcbiAgICB9LFxuICAgIEFwcFJvdXRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfYXBwcm91dGVyLmRlZmF1bHQ7XG4gICAgfSxcbiAgICBMYXlvdXRSb3V0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2xheW91dHJvdXRlci5kZWZhdWx0O1xuICAgIH0sXG4gICAgUmVuZGVyRnJvbVRlbXBsYXRlQ29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfcmVuZGVyZnJvbXRlbXBsYXRlY29udGV4dC5kZWZhdWx0O1xuICAgIH0sXG4gICAgc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc3RhdGljZ2VuZXJhdGlvbmFzeW5jc3RvcmFnZWV4dGVybmFsLnN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2U7XG4gICAgfSxcbiAgICByZXF1ZXN0QXN5bmNTdG9yYWdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9yZXF1ZXN0YXN5bmNzdG9yYWdlZXh0ZXJuYWwucmVxdWVzdEFzeW5jU3RvcmFnZTtcbiAgICB9LFxuICAgIGFjdGlvbkFzeW5jU3RvcmFnZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfYWN0aW9uYXN5bmNzdG9yYWdlZXh0ZXJuYWwuYWN0aW9uQXN5bmNTdG9yYWdlO1xuICAgIH0sXG4gICAgc3RhdGljR2VuZXJhdGlvbkJhaWxvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3N0YXRpY2dlbmVyYXRpb25iYWlsb3V0LnN0YXRpY0dlbmVyYXRpb25CYWlsb3V0O1xuICAgIH0sXG4gICAgY3JlYXRlU2VhcmNoUGFyYW1zQmFpbG91dFByb3h5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zZWFyY2hwYXJhbXNiYWlsb3V0cHJveHkuY3JlYXRlU2VhcmNoUGFyYW1zQmFpbG91dFByb3h5O1xuICAgIH0sXG4gICAgc2VydmVySG9va3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2hvb2tzc2VydmVyY29udGV4dDtcbiAgICB9LFxuICAgIHByZWxvYWRTdHlsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfcHJlbG9hZHMucHJlbG9hZFN0eWxlO1xuICAgIH0sXG4gICAgcHJlbG9hZEZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3ByZWxvYWRzLnByZWxvYWRGb250O1xuICAgIH0sXG4gICAgcHJlY29ubmVjdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfcHJlbG9hZHMucHJlY29ubmVjdDtcbiAgICB9LFxuICAgIHRhaW50T2JqZWN0UmVmZXJlbmNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF90YWludC50YWludE9iamVjdFJlZmVyZW5jZTtcbiAgICB9LFxuICAgIFN0YXRpY0dlbmVyYXRpb25TZWFyY2hQYXJhbXNCYWlsb3V0UHJvdmlkZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3N0YXRpY2dlbmVyYXRpb25zZWFyY2hwYXJhbXNiYWlsb3V0cHJvdmlkZXIuZGVmYXVsdDtcbiAgICB9LFxuICAgIE5vdEZvdW5kQm91bmRhcnk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX25vdGZvdW5kYm91bmRhcnkuTm90Rm91bmRCb3VuZGFyeTtcbiAgICB9LFxuICAgIHBhdGNoRmV0Y2g6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcGF0Y2hGZXRjaDtcbiAgICB9XG59KTtcbmNvbnN0IF9zZXJ2ZXJlZGdlID0gcmVxdWlyZShcInJlYWN0LXNlcnZlci1kb20td2VicGFjay9zZXJ2ZXIuZWRnZVwiKTtcbmNvbnN0IF9hcHByb3V0ZXIgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlclwiKSk7XG5jb25zdCBfbGF5b3V0cm91dGVyID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQocmVxdWlyZShcIi4uLy4uL2NsaWVudC9jb21wb25lbnRzL2xheW91dC1yb3V0ZXJcIikpO1xuY29uc3QgX3JlbmRlcmZyb210ZW1wbGF0ZWNvbnRleHQgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dFwiKSk7XG5jb25zdCBfc3RhdGljZ2VuZXJhdGlvbmFzeW5jc3RvcmFnZWV4dGVybmFsID0gcmVxdWlyZShcIi4uLy4uL2NsaWVudC9jb21wb25lbnRzL3N0YXRpYy1nZW5lcmF0aW9uLWFzeW5jLXN0b3JhZ2UuZXh0ZXJuYWxcIik7XG5jb25zdCBfcmVxdWVzdGFzeW5jc3RvcmFnZWV4dGVybmFsID0gcmVxdWlyZShcIi4uLy4uL2NsaWVudC9jb21wb25lbnRzL3JlcXVlc3QtYXN5bmMtc3RvcmFnZS5leHRlcm5hbFwiKTtcbmNvbnN0IF9hY3Rpb25hc3luY3N0b3JhZ2VleHRlcm5hbCA9IHJlcXVpcmUoXCIuLi8uLi9jbGllbnQvY29tcG9uZW50cy9hY3Rpb24tYXN5bmMtc3RvcmFnZS5leHRlcm5hbFwiKTtcbmNvbnN0IF9zdGF0aWNnZW5lcmF0aW9uYmFpbG91dCA9IHJlcXVpcmUoXCIuLi8uLi9jbGllbnQvY29tcG9uZW50cy9zdGF0aWMtZ2VuZXJhdGlvbi1iYWlsb3V0XCIpO1xuY29uc3QgX3N0YXRpY2dlbmVyYXRpb25zZWFyY2hwYXJhbXNiYWlsb3V0cHJvdmlkZXIgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvc3RhdGljLWdlbmVyYXRpb24tc2VhcmNocGFyYW1zLWJhaWxvdXQtcHJvdmlkZXJcIikpO1xuY29uc3QgX3NlYXJjaHBhcmFtc2JhaWxvdXRwcm94eSA9IHJlcXVpcmUoXCIuLi8uLi9jbGllbnQvY29tcG9uZW50cy9zZWFyY2hwYXJhbXMtYmFpbG91dC1wcm94eVwiKTtcbmNvbnN0IF9ob29rc3NlcnZlcmNvbnRleHQgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQocmVxdWlyZShcIi4uLy4uL2NsaWVudC9jb21wb25lbnRzL2hvb2tzLXNlcnZlci1jb250ZXh0XCIpKTtcbmNvbnN0IF9ub3Rmb3VuZGJvdW5kYXJ5ID0gcmVxdWlyZShcIi4uLy4uL2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC1ib3VuZGFyeVwiKTtcbmNvbnN0IF9wYXRjaGZldGNoID0gcmVxdWlyZShcIi4uL2xpYi9wYXRjaC1mZXRjaFwiKTtcbnJlcXVpcmUoXCIuLi8uLi9jbGllbnQvY29tcG9uZW50cy9lcnJvci1ib3VuZGFyeVwiKTtcbmNvbnN0IF9wcmVsb2FkcyA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci9yc2MvcHJlbG9hZHNcIik7XG5jb25zdCBfdGFpbnQgPSByZXF1aXJlKFwiLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvcnNjL3RhaW50XCIpO1xuZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgICAgIGRlZmF1bHQ6IG9ialxuICAgIH07XG59XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApIHtcbiAgICBpZiAodHlwZW9mIFdlYWtNYXAgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG4gICAgdmFyIGNhY2hlQmFiZWxJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTtcbiAgICB2YXIgY2FjaGVOb2RlSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbihub2RlSW50ZXJvcCkge1xuICAgICAgICByZXR1cm4gbm9kZUludGVyb3AgPyBjYWNoZU5vZGVJbnRlcm9wIDogY2FjaGVCYWJlbEludGVyb3A7XG4gICAgfSkobm9kZUludGVyb3ApO1xufVxuZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZChvYmosIG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKCFub2RlSW50ZXJvcCAmJiBvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVmYXVsdDogb2JqXG4gICAgICAgIH07XG4gICAgfVxuICAgIHZhciBjYWNoZSA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCk7XG4gICAgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7XG4gICAgICAgIHJldHVybiBjYWNoZS5nZXQob2JqKTtcbiAgICB9XG4gICAgdmFyIG5ld09iaiA9IHt9O1xuICAgIHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICBmb3IodmFyIGtleSBpbiBvYmope1xuICAgICAgICBpZiAoa2V5ICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG5ld09iai5kZWZhdWx0ID0gb2JqO1xuICAgIGlmIChjYWNoZSkge1xuICAgICAgICBjYWNoZS5zZXQob2JqLCBuZXdPYmopO1xuICAgIH1cbiAgICByZXR1cm4gbmV3T2JqO1xufVxuLy8gcGF0Y2hGZXRjaCBtYWtlcyB1c2Ugb2YgQVBJcyBzdWNoIGFzIGBSZWFjdC51bnN0YWJsZV9wb3N0cG9uZWAgd2hpY2ggYXJlIG9ubHkgYXZhaWxhYmxlXG4vLyBpbiB0aGUgZXhwZXJpbWVudGFsIGNoYW5uZWwgb2YgUmVhY3QsIHNvIGV4cG9ydCBpdCBmcm9tIGhlcmUgc28gdGhhdCBpdCBjb21lcyBmcm9tIHRoZSBidW5kbGVkIHJ1bnRpbWVcbmZ1bmN0aW9uIHBhdGNoRmV0Y2goKSB7XG4gICAgcmV0dXJuICgwLCBfcGF0Y2hmZXRjaC5wYXRjaEZldGNoKSh7XG4gICAgICAgIHNlcnZlckhvb2tzOiBfaG9va3NzZXJ2ZXJjb250ZXh0LFxuICAgICAgICBzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlOiBfc3RhdGljZ2VuZXJhdGlvbmFzeW5jc3RvcmFnZWV4dGVybmFsLnN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2VcbiAgICB9KTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW50cnktYmFzZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/server/app-render/entry-base.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/server/app-render/rsc/preloads.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/server/app-render/rsc/preloads.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("/*\n\nFiles in the rsc directory are meant to be packaged as part of the RSC graph using next-app-loader.\n\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n preloadStyle: function() {\n return preloadStyle;\n },\n preloadFont: function() {\n return preloadFont;\n },\n preconnect: function() {\n return preconnect;\n }\n});\nconst _reactdom = /*#__PURE__*/ _interop_require_default(__webpack_require__(/*! react-dom */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-dom.js\"));\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\nfunction preloadStyle(href, crossOrigin) {\n const opts = {\n as: \"style\"\n };\n if (typeof crossOrigin === \"string\") {\n opts.crossOrigin = crossOrigin;\n }\n _reactdom.default.preload(href, opts);\n}\nfunction preloadFont(href, type, crossOrigin) {\n const opts = {\n as: \"font\",\n type\n };\n if (typeof crossOrigin === \"string\") {\n opts.crossOrigin = crossOrigin;\n }\n _reactdom.default.preload(href, opts);\n}\nfunction preconnect(href, crossOrigin) {\n _reactdom.default.preconnect(href, typeof crossOrigin === \"string\" ? {\n crossOrigin\n } : undefined);\n}\n\n//# sourceMappingURL=preloads.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL3JzYy9wcmVsb2Fkcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTs7QUFFQSxHQUFnQjtBQUNoQiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBSUw7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCx5REFBeUQsbUJBQU8sQ0FBQyxnSEFBVztBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvYXBwLXJlbmRlci9yc2MvcHJlbG9hZHMuanM/ZWJjOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuXG5GaWxlcyBpbiB0aGUgcnNjIGRpcmVjdG9yeSBhcmUgbWVhbnQgdG8gYmUgcGFja2FnZWQgYXMgcGFydCBvZiB0aGUgUlNDIGdyYXBoIHVzaW5nIG5leHQtYXBwLWxvYWRlci5cblxuKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBwcmVsb2FkU3R5bGU6IG51bGwsXG4gICAgcHJlbG9hZEZvbnQ6IG51bGwsXG4gICAgcHJlY29ubmVjdDogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBwcmVsb2FkU3R5bGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcHJlbG9hZFN0eWxlO1xuICAgIH0sXG4gICAgcHJlbG9hZEZvbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcHJlbG9hZEZvbnQ7XG4gICAgfSxcbiAgICBwcmVjb25uZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHByZWNvbm5lY3Q7XG4gICAgfVxufSk7XG5jb25zdCBfcmVhY3Rkb20gPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdChyZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDoge1xuICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICB9O1xufVxuZnVuY3Rpb24gcHJlbG9hZFN0eWxlKGhyZWYsIGNyb3NzT3JpZ2luKSB7XG4gICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgYXM6IFwic3R5bGVcIlxuICAgIH07XG4gICAgaWYgKHR5cGVvZiBjcm9zc09yaWdpbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBvcHRzLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgfVxuICAgIF9yZWFjdGRvbS5kZWZhdWx0LnByZWxvYWQoaHJlZiwgb3B0cyk7XG59XG5mdW5jdGlvbiBwcmVsb2FkRm9udChocmVmLCB0eXBlLCBjcm9zc09yaWdpbikge1xuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgIGFzOiBcImZvbnRcIixcbiAgICAgICAgdHlwZVxuICAgIH07XG4gICAgaWYgKHR5cGVvZiBjcm9zc09yaWdpbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBvcHRzLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgfVxuICAgIF9yZWFjdGRvbS5kZWZhdWx0LnByZWxvYWQoaHJlZiwgb3B0cyk7XG59XG5mdW5jdGlvbiBwcmVjb25uZWN0KGhyZWYsIGNyb3NzT3JpZ2luKSB7XG4gICAgX3JlYWN0ZG9tLmRlZmF1bHQucHJlY29ubmVjdChocmVmLCB0eXBlb2YgY3Jvc3NPcmlnaW4gPT09IFwic3RyaW5nXCIgPyB7XG4gICAgICAgIGNyb3NzT3JpZ2luXG4gICAgfSA6IHVuZGVmaW5lZCk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWxvYWRzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/server/app-render/rsc/preloads.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/server/app-render/rsc/taint.js": +/*!***************************************************************!*\ + !*** ./node_modules/next/dist/server/app-render/rsc/taint.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("/*\n\nFiles in the rsc directory are meant to be packaged as part of the RSC graph using next-app-loader.\n\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n taintObjectReference: function() {\n return taintObjectReference;\n },\n taintUniqueValue: function() {\n return taintUniqueValue;\n }\n});\nconst _react = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(/*! react */ \"(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react.js\"));\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n return {\n default: obj\n };\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n for(var key in obj){\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\nfunction notImplemented() {\n throw new Error(\"Taint can only be used with the taint flag.\");\n}\nconst taintObjectReference = false ? 0 : notImplemented;\nconst taintUniqueValue = false ? 0 : notImplemented;\n\n//# sourceMappingURL=taint.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL3JzYy90YWludC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTs7QUFFQSxHQUFnQjtBQUNoQiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBR0w7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsdURBQXVELG1CQUFPLENBQUMsd0dBQU87QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixNQUFxQyxHQUFHLENBQXdDO0FBQzdHLHlCQUF5QixNQUFxQyxHQUFHLENBQW9DOztBQUVyRyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9hcHAtcmVuZGVyL3JzYy90YWludC5qcz84NTljIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5cbkZpbGVzIGluIHRoZSByc2MgZGlyZWN0b3J5IGFyZSBtZWFudCB0byBiZSBwYWNrYWdlZCBhcyBwYXJ0IG9mIHRoZSBSU0MgZ3JhcGggdXNpbmcgbmV4dC1hcHAtbG9hZGVyLlxuXG4qLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIHRhaW50T2JqZWN0UmVmZXJlbmNlOiBudWxsLFxuICAgIHRhaW50VW5pcXVlVmFsdWU6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgdGFpbnRPYmplY3RSZWZlcmVuY2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGFpbnRPYmplY3RSZWZlcmVuY2U7XG4gICAgfSxcbiAgICB0YWludFVuaXF1ZVZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRhaW50VW5pcXVlVmFsdWU7XG4gICAgfVxufSk7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQocmVxdWlyZShcInJlYWN0XCIpKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkge1xuICAgIGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY2FjaGVCYWJlbEludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuICAgIHZhciBjYWNoZU5vZGVJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTtcbiAgICByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uKG5vZGVJbnRlcm9wKSB7XG4gICAgICAgIHJldHVybiBub2RlSW50ZXJvcCA/IGNhY2hlTm9kZUludGVyb3AgOiBjYWNoZUJhYmVsSW50ZXJvcDtcbiAgICB9KShub2RlSW50ZXJvcCk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkKG9iaiwgbm9kZUludGVyb3ApIHtcbiAgICBpZiAoIW5vZGVJbnRlcm9wICYmIG9iaiAmJiBvYmouX19lc01vZHVsZSkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTtcbiAgICBpZiAoY2FjaGUgJiYgY2FjaGUuaGFzKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldChvYmopO1xuICAgIH1cbiAgICB2YXIgbmV3T2JqID0ge307XG4gICAgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIGZvcih2YXIga2V5IGluIG9iail7XG4gICAgICAgIGlmIChrZXkgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICAgIGNhY2hlLnNldChvYmosIG5ld09iaik7XG4gICAgfVxuICAgIHJldHVybiBuZXdPYmo7XG59XG5mdW5jdGlvbiBub3RJbXBsZW1lbnRlZCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWludCBjYW4gb25seSBiZSB1c2VkIHdpdGggdGhlIHRhaW50IGZsYWcuXCIpO1xufVxuY29uc3QgdGFpbnRPYmplY3RSZWZlcmVuY2UgPSBwcm9jZXNzLmVudi5fX05FWFRfRVhQRVJJTUVOVEFMX1JFQUNUID8gX3JlYWN0LmV4cGVyaW1lbnRhbF90YWludE9iamVjdFJlZmVyZW5jZSA6IG5vdEltcGxlbWVudGVkO1xuY29uc3QgdGFpbnRVbmlxdWVWYWx1ZSA9IHByb2Nlc3MuZW52Ll9fTkVYVF9FWFBFUklNRU5UQUxfUkVBQ1QgPyBfcmVhY3QuZXhwZXJpbWVudGFsX3RhaW50VW5pcXVlVmFsdWUgOiBub3RJbXBsZW1lbnRlZDtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFpbnQuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/server/app-render/rsc/taint.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/server/future/route-kind.js": +/*!************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-kind.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RouteKind\", ({\n enumerable: true,\n get: function() {\n return RouteKind;\n }\n}));\nvar RouteKind;\n(function(RouteKind) {\n RouteKind[/**\n * `PAGES` represents all the React pages that are under `pages/`.\n */ \"PAGES\"] = \"PAGES\";\n RouteKind[/**\n * `PAGES_API` represents all the API routes under `pages/api/`.\n */ \"PAGES_API\"] = \"PAGES_API\";\n RouteKind[/**\n * `APP_PAGE` represents all the React pages that are under `app/` with the\n * filename of `page.{j,t}s{,x}`.\n */ \"APP_PAGE\"] = \"APP_PAGE\";\n RouteKind[/**\n * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the\n * filename of `route.{j,t}s{,x}`.\n */ \"APP_ROUTE\"] = \"APP_ROUTE\";\n})(RouteKind || (RouteKind = {}));\n\n//# sourceMappingURL=route-kind.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUta2luZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLDZDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLElBQUksRUFBRSxHQUFHO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixJQUFJLEVBQUUsR0FBRztBQUNsQztBQUNBLENBQUMsOEJBQThCOztBQUUvQiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUta2luZC5qcz84YTA3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUm91dGVLaW5kXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSb3V0ZUtpbmQ7XG4gICAgfVxufSk7XG52YXIgUm91dGVLaW5kO1xuKGZ1bmN0aW9uKFJvdXRlS2luZCkge1xuICAgIFJvdXRlS2luZFsvKipcbiAgICogYFBBR0VTYCByZXByZXNlbnRzIGFsbCB0aGUgUmVhY3QgcGFnZXMgdGhhdCBhcmUgdW5kZXIgYHBhZ2VzL2AuXG4gICAqLyBcIlBBR0VTXCJdID0gXCJQQUdFU1wiO1xuICAgIFJvdXRlS2luZFsvKipcbiAgICogYFBBR0VTX0FQSWAgcmVwcmVzZW50cyBhbGwgdGhlIEFQSSByb3V0ZXMgdW5kZXIgYHBhZ2VzL2FwaS9gLlxuICAgKi8gXCJQQUdFU19BUElcIl0gPSBcIlBBR0VTX0FQSVwiO1xuICAgIFJvdXRlS2luZFsvKipcbiAgICogYEFQUF9QQUdFYCByZXByZXNlbnRzIGFsbCB0aGUgUmVhY3QgcGFnZXMgdGhhdCBhcmUgdW5kZXIgYGFwcC9gIHdpdGggdGhlXG4gICAqIGZpbGVuYW1lIG9mIGBwYWdlLntqLHR9c3sseH1gLlxuICAgKi8gXCJBUFBfUEFHRVwiXSA9IFwiQVBQX1BBR0VcIjtcbiAgICBSb3V0ZUtpbmRbLyoqXG4gICAqIGBBUFBfUk9VVEVgIHJlcHJlc2VudHMgYWxsIHRoZSBBUEkgcm91dGVzIGFuZCBtZXRhZGF0YSByb3V0ZXMgdGhhdCBhcmUgdW5kZXIgYGFwcC9gIHdpdGggdGhlXG4gICAqIGZpbGVuYW1lIG9mIGByb3V0ZS57aix0fXN7LHh9YC5cbiAgICovIFwiQVBQX1JPVVRFXCJdID0gXCJBUFBfUk9VVEVcIjtcbn0pKFJvdXRlS2luZCB8fCAoUm91dGVLaW5kID0ge30pKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGUta2luZC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/server/future/route-kind.js\n"); + +/***/ }), + +/***/ "(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?9d97": +/*!****************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js ***! + \****************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nif (false) {} else {\n if (false) {} else {\n if (true) {\n module.exports = __webpack_require__(/*! next/dist/compiled/next-server/app-page.runtime.dev.js */ \"next/dist/compiled/next-server/app-page.runtime.dev.js\");\n } else {}\n }\n}\n\n//# sourceMappingURL=module.compiled.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS9tb2R1bGUuY29tcGlsZWQuanM/OWQ5NyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLElBQUksS0FBbUMsRUFBRSxFQUV4QyxDQUFDO0FBQ0YsUUFBUSxLQUFxQyxFQUFFLEVBUTFDLENBQUM7QUFDTixZQUFZLElBQXNDO0FBQ2xELFlBQVksNEpBQWtGO0FBQzlGLFVBQVUsS0FBSyxFQUlOO0FBQ1Q7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS9tb2R1bGUuY29tcGlsZWQuanM/NmMxOSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbmlmIChwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgPT09IFwiZWRnZVwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS9tb2R1bGUuanNcIik7XG59IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfRVhQRVJJTUVOVEFMX1JFQUNUKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1zZXJ2ZXIvYXBwLXBhZ2UtZXhwZXJpbWVudGFsLnJ1bnRpbWUuZGV2LmpzXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL25leHQtc2VydmVyL2FwcC1wYWdlLXR1cmJvLWV4cGVyaW1lbnRhbC5ydW50aW1lLnByb2QuanNcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1zZXJ2ZXIvYXBwLXBhZ2UtZXhwZXJpbWVudGFsLnJ1bnRpbWUucHJvZC5qc1wiKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1zZXJ2ZXIvYXBwLXBhZ2UucnVudGltZS5kZXYuanNcIik7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuVFVSQk9QQUNLKSB7XG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1zZXJ2ZXIvYXBwLXBhZ2UtdHVyYm8ucnVudGltZS5wcm9kLmpzXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL25leHQtc2VydmVyL2FwcC1wYWdlLnJ1bnRpbWUucHJvZC5qc1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bW9kdWxlLmNvbXBpbGVkLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?9d97\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-dom.js": +/*!***********************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-dom.js ***! + \***********************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?9d97\").vendored[\"react-rsc\"].ReactDOM;\n\n//# sourceMappingURL=react-dom.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9yc2MvcmVhY3QtZG9tLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsK0xBQWdGOztBQUVoRiIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9yc2MvcmVhY3QtZG9tLmpzPzhlMGEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9tb2R1bGUuY29tcGlsZWRcIikudmVuZG9yZWRbXCJyZWFjdC1yc2NcIl0uUmVhY3RET007XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlYWN0LWRvbS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-dom.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-runtime.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-runtime.js ***! + \*******************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?9d97\").vendored[\"react-rsc\"].ReactJsxRuntime;\n\n//# sourceMappingURL=react-jsx-runtime.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9yc2MvcmVhY3QtanN4LXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixzTUFBdUY7O0FBRXZGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1wYWdlL3ZlbmRvcmVkL3JzYy9yZWFjdC1qc3gtcnVudGltZS5qcz80N2Q1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbW9kdWxlLmNvbXBpbGVkXCIpLnZlbmRvcmVkW1wicmVhY3QtcnNjXCJdLlJlYWN0SnN4UnVudGltZTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtanN4LXJ1bnRpbWUuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-jsx-runtime.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge.js": +/*!**************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge.js ***! + \**************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?9d97\").vendored[\"react-rsc\"].ReactServerDOMWebpackServerEdge;\n\n//# sourceMappingURL=react-server-dom-webpack-server-edge.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9yc2MvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrLXNlcnZlci1lZGdlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2Isc05BQXVHOztBQUV2RyIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9yc2MvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrLXNlcnZlci1lZGdlLmpzPzAxMzQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi8uLi9tb2R1bGUuY29tcGlsZWRcIikudmVuZG9yZWRbXCJyZWFjdC1yc2NcIl0uUmVhY3RTZXJ2ZXJET01XZWJwYWNrU2VydmVyRWRnZTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrLXNlcnZlci1lZGdlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server-edge.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react.js": +/*!*******************************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react.js ***! + \*******************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +eval("\nmodule.exports = __webpack_require__(/*! ../../module.compiled */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js?9d97\").vendored[\"react-rsc\"].React;\n\n//# sourceMappingURL=react.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvcm91dGUtbW9kdWxlcy9hcHAtcGFnZS92ZW5kb3JlZC9yc2MvcmVhY3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw0TEFBNkU7O0FBRTdFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9yb3V0ZS1tb2R1bGVzL2FwcC1wYWdlL3ZlbmRvcmVkL3JzYy9yZWFjdC5qcz9lYjk1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vbW9kdWxlLmNvbXBpbGVkXCIpLnZlbmRvcmVkW1wicmVhY3QtcnNjXCJdLlJlYWN0O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/react.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/server/lib/patch-fetch.js": +/*!**********************************************************!*\ + !*** ./node_modules/next/dist/server/lib/patch-fetch.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n validateRevalidate: function() {\n return validateRevalidate;\n },\n validateTags: function() {\n return validateTags;\n },\n addImplicitTags: function() {\n return addImplicitTags;\n },\n patchFetch: function() {\n return patchFetch;\n }\n});\nconst _constants = __webpack_require__(/*! ./trace/constants */ \"(rsc)/./node_modules/next/dist/server/lib/trace/constants.js\");\nconst _tracer = __webpack_require__(/*! ./trace/tracer */ \"(rsc)/./node_modules/next/dist/server/lib/trace/tracer.js\");\nconst _constants1 = __webpack_require__(/*! ../../lib/constants */ \"(rsc)/./node_modules/next/dist/lib/constants.js\");\nconst _log = /*#__PURE__*/ _interop_require_wildcard(__webpack_require__(/*! ../../build/output/log */ \"(rsc)/./node_modules/next/dist/build/output/log.js\"));\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) {\n return obj;\n }\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") {\n return {\n default: obj\n };\n }\n var cache = _getRequireWildcardCache(nodeInterop);\n if (cache && cache.has(obj)) {\n return cache.get(obj);\n }\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n for(var key in obj){\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) {\n Object.defineProperty(newObj, key, desc);\n } else {\n newObj[key] = obj[key];\n }\n }\n }\n newObj.default = obj;\n if (cache) {\n cache.set(obj, newObj);\n }\n return newObj;\n}\nconst isEdgeRuntime = \"nodejs\" === \"edge\";\nfunction validateRevalidate(revalidateVal, pathname) {\n try {\n let normalizedRevalidate = undefined;\n if (revalidateVal === false) {\n normalizedRevalidate = revalidateVal;\n } else if (typeof revalidateVal === \"number\" && !isNaN(revalidateVal) && revalidateVal > -1) {\n normalizedRevalidate = revalidateVal;\n } else if (typeof revalidateVal !== \"undefined\") {\n throw new Error(`Invalid revalidate value \"${revalidateVal}\" on \"${pathname}\", must be a non-negative number or \"false\"`);\n }\n return normalizedRevalidate;\n } catch (err) {\n // handle client component error from attempting to check revalidate value\n if (err instanceof Error && err.message.includes(\"Invalid revalidate\")) {\n throw err;\n }\n return undefined;\n }\n}\nfunction validateTags(tags, description) {\n const validTags = [];\n const invalidTags = [];\n for (const tag of tags){\n if (typeof tag !== \"string\") {\n invalidTags.push({\n tag,\n reason: \"invalid type, must be a string\"\n });\n } else if (tag.length > _constants1.NEXT_CACHE_TAG_MAX_LENGTH) {\n invalidTags.push({\n tag,\n reason: `exceeded max length of ${_constants1.NEXT_CACHE_TAG_MAX_LENGTH}`\n });\n } else {\n validTags.push(tag);\n }\n }\n if (invalidTags.length > 0) {\n console.warn(`Warning: invalid tags passed to ${description}: `);\n for (const { tag, reason } of invalidTags){\n console.log(`tag: \"${tag}\" ${reason}`);\n }\n }\n return validTags;\n}\nconst getDerivedTags = (pathname)=>{\n const derivedTags = [\n `/layout`\n ];\n // we automatically add the current path segments as tags\n // for revalidatePath handling\n if (pathname.startsWith(\"/\")) {\n const pathnameParts = pathname.split(\"/\");\n for(let i = 1; i < pathnameParts.length + 1; i++){\n let curPathname = pathnameParts.slice(0, i).join(\"/\");\n if (curPathname) {\n // all derived tags other than the page are layout tags\n if (!curPathname.endsWith(\"/page\") && !curPathname.endsWith(\"/route\")) {\n curPathname = `${curPathname}${!curPathname.endsWith(\"/\") ? \"/\" : \"\"}layout`;\n }\n derivedTags.push(curPathname);\n }\n }\n }\n return derivedTags;\n};\nfunction addImplicitTags(staticGenerationStore) {\n const newTags = [];\n const { pagePath, urlPathname } = staticGenerationStore;\n if (!Array.isArray(staticGenerationStore.tags)) {\n staticGenerationStore.tags = [];\n }\n if (pagePath) {\n const derivedTags = getDerivedTags(pagePath);\n for (let tag of derivedTags){\n var _staticGenerationStore_tags;\n tag = `${_constants1.NEXT_CACHE_IMPLICIT_TAG_ID}${tag}`;\n if (!((_staticGenerationStore_tags = staticGenerationStore.tags) == null ? void 0 : _staticGenerationStore_tags.includes(tag))) {\n staticGenerationStore.tags.push(tag);\n }\n newTags.push(tag);\n }\n }\n if (urlPathname) {\n var _staticGenerationStore_tags1;\n const parsedPathname = new URL(urlPathname, \"http://n\").pathname;\n const tag = `${_constants1.NEXT_CACHE_IMPLICIT_TAG_ID}${parsedPathname}`;\n if (!((_staticGenerationStore_tags1 = staticGenerationStore.tags) == null ? void 0 : _staticGenerationStore_tags1.includes(tag))) {\n staticGenerationStore.tags.push(tag);\n }\n newTags.push(tag);\n }\n return newTags;\n}\nfunction trackFetchMetric(staticGenerationStore, ctx) {\n if (!staticGenerationStore) return;\n if (!staticGenerationStore.fetchMetrics) {\n staticGenerationStore.fetchMetrics = [];\n }\n const dedupeFields = [\n \"url\",\n \"status\",\n \"method\"\n ];\n // don't add metric if one already exists for the fetch\n if (staticGenerationStore.fetchMetrics.some((metric)=>{\n return dedupeFields.every((field)=>metric[field] === ctx[field]);\n })) {\n return;\n }\n staticGenerationStore.fetchMetrics.push({\n url: ctx.url,\n cacheStatus: ctx.cacheStatus,\n cacheReason: ctx.cacheReason,\n status: ctx.status,\n method: ctx.method,\n start: ctx.start,\n end: Date.now(),\n idx: staticGenerationStore.nextFetchId || 0\n });\n}\nfunction patchFetch({ serverHooks, staticGenerationAsyncStorage }) {\n if (!globalThis._nextOriginalFetch) {\n globalThis._nextOriginalFetch = globalThis.fetch;\n }\n if (globalThis.fetch.__nextPatched) return;\n const { DynamicServerError } = serverHooks;\n const originFetch = globalThis._nextOriginalFetch;\n globalThis.fetch = async (input, init)=>{\n var _init_method, _this;\n let url;\n try {\n url = new URL(input instanceof Request ? input.url : input);\n url.username = \"\";\n url.password = \"\";\n } catch {\n // Error caused by malformed URL should be handled by native fetch\n url = undefined;\n }\n const fetchUrl = (url == null ? void 0 : url.href) ?? \"\";\n const fetchStart = Date.now();\n const method = (init == null ? void 0 : (_init_method = init.method) == null ? void 0 : _init_method.toUpperCase()) || \"GET\";\n // Do create a new span trace for internal fetches in the\n // non-verbose mode.\n const isInternal = ((_this = init == null ? void 0 : init.next) == null ? void 0 : _this.internal) === true;\n const hideSpan = process.env.NEXT_OTEL_FETCH_DISABLED === \"1\";\n return await (0, _tracer.getTracer)().trace(isInternal ? _constants.NextNodeServerSpan.internalFetch : _constants.AppRenderSpan.fetch, {\n hideSpan,\n kind: _tracer.SpanKind.CLIENT,\n spanName: [\n \"fetch\",\n method,\n fetchUrl\n ].filter(Boolean).join(\" \"),\n attributes: {\n \"http.url\": fetchUrl,\n \"http.method\": method,\n \"net.peer.name\": url == null ? void 0 : url.hostname,\n \"net.peer.port\": (url == null ? void 0 : url.port) || undefined\n }\n }, async ()=>{\n var _getRequestMeta;\n const staticGenerationStore = staticGenerationAsyncStorage.getStore() || (fetch.__nextGetStaticStore == null ? void 0 : fetch.__nextGetStaticStore.call(fetch));\n const isRequestInput = input && typeof input === \"object\" && typeof input.method === \"string\";\n const getRequestMeta = (field)=>{\n // If request input is present but init is not, retrieve from input first.\n const value = init == null ? void 0 : init[field];\n return value || (isRequestInput ? input[field] : null);\n };\n // If the staticGenerationStore is not available, we can't do any\n // special treatment of fetch, therefore fallback to the original\n // fetch implementation.\n if (!staticGenerationStore || isInternal || staticGenerationStore.isDraftMode) {\n return originFetch(input, init);\n }\n let revalidate = undefined;\n const getNextField = (field)=>{\n var _init_next, _init_next1, _input_next;\n return typeof (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next[field]) !== \"undefined\" ? init == null ? void 0 : (_init_next1 = init.next) == null ? void 0 : _init_next1[field] : isRequestInput ? (_input_next = input.next) == null ? void 0 : _input_next[field] : undefined;\n };\n // RequestInit doesn't keep extra fields e.g. next so it's\n // only available if init is used separate\n let curRevalidate = getNextField(\"revalidate\");\n const tags = validateTags(getNextField(\"tags\") || [], `fetch ${input.toString()}`);\n if (Array.isArray(tags)) {\n if (!staticGenerationStore.tags) {\n staticGenerationStore.tags = [];\n }\n for (const tag of tags){\n if (!staticGenerationStore.tags.includes(tag)) {\n staticGenerationStore.tags.push(tag);\n }\n }\n }\n const implicitTags = addImplicitTags(staticGenerationStore);\n const isOnlyCache = staticGenerationStore.fetchCache === \"only-cache\";\n const isForceCache = staticGenerationStore.fetchCache === \"force-cache\";\n const isDefaultCache = staticGenerationStore.fetchCache === \"default-cache\";\n const isDefaultNoStore = staticGenerationStore.fetchCache === \"default-no-store\";\n const isOnlyNoStore = staticGenerationStore.fetchCache === \"only-no-store\";\n const isForceNoStore = staticGenerationStore.fetchCache === \"force-no-store\";\n const isUsingNoStore = !!staticGenerationStore.isUnstableNoStore;\n let _cache = getRequestMeta(\"cache\");\n let cacheReason = \"\";\n if (typeof _cache === \"string\" && typeof curRevalidate !== \"undefined\") {\n // when providing fetch with a Request input, it'll automatically set a cache value of 'default'\n // we only want to warn if the user is explicitly setting a cache value\n if (!(isRequestInput && _cache === \"default\")) {\n _log.warn(`fetch for ${fetchUrl} on ${staticGenerationStore.urlPathname} specified \"cache: ${_cache}\" and \"revalidate: ${curRevalidate}\", only one should be specified.`);\n }\n _cache = undefined;\n }\n if (_cache === \"force-cache\") {\n curRevalidate = false;\n } else if (_cache === \"no-cache\" || _cache === \"no-store\" || isForceNoStore || isOnlyNoStore) {\n curRevalidate = 0;\n }\n if (_cache === \"no-cache\" || _cache === \"no-store\") {\n cacheReason = `cache: ${_cache}`;\n }\n revalidate = validateRevalidate(curRevalidate, staticGenerationStore.urlPathname);\n const _headers = getRequestMeta(\"headers\");\n const initHeaders = typeof (_headers == null ? void 0 : _headers.get) === \"function\" ? _headers : new Headers(_headers || {});\n const hasUnCacheableHeader = initHeaders.get(\"authorization\") || initHeaders.get(\"cookie\");\n const isUnCacheableMethod = ![\n \"get\",\n \"head\"\n ].includes(((_getRequestMeta = getRequestMeta(\"method\")) == null ? void 0 : _getRequestMeta.toLowerCase()) || \"get\");\n // if there are authorized headers or a POST method and\n // dynamic data usage was present above the tree we bail\n // e.g. if cookies() is used before an authed/POST fetch\n const autoNoCache = (hasUnCacheableHeader || isUnCacheableMethod) && staticGenerationStore.revalidate === 0;\n if (isForceNoStore) {\n cacheReason = \"fetchCache = force-no-store\";\n }\n if (isOnlyNoStore) {\n if (_cache === \"force-cache\" || typeof revalidate !== \"undefined\" && (revalidate === false || revalidate > 0)) {\n throw new Error(`cache: 'force-cache' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-no-store'`);\n }\n cacheReason = \"fetchCache = only-no-store\";\n }\n if (isOnlyCache && _cache === \"no-store\") {\n throw new Error(`cache: 'no-store' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-cache'`);\n }\n if (isForceCache && (typeof curRevalidate === \"undefined\" || curRevalidate === 0)) {\n cacheReason = \"fetchCache = force-cache\";\n revalidate = false;\n }\n if (typeof revalidate === \"undefined\") {\n if (isDefaultCache) {\n revalidate = false;\n cacheReason = \"fetchCache = default-cache\";\n } else if (autoNoCache) {\n revalidate = 0;\n cacheReason = \"auto no cache\";\n } else if (isDefaultNoStore) {\n revalidate = 0;\n cacheReason = \"fetchCache = default-no-store\";\n } else if (isUsingNoStore) {\n revalidate = 0;\n cacheReason = \"noStore call\";\n } else {\n cacheReason = \"auto cache\";\n revalidate = typeof staticGenerationStore.revalidate === \"boolean\" || typeof staticGenerationStore.revalidate === \"undefined\" ? false : staticGenerationStore.revalidate;\n }\n } else if (!cacheReason) {\n cacheReason = `revalidate: ${revalidate}`;\n }\n if (// when force static is configured we don't bail from\n // `revalidate: 0` values\n !(staticGenerationStore.forceStatic && revalidate === 0) && // we don't consider autoNoCache to switch to dynamic during\n // revalidate although if it occurs during build we do\n !autoNoCache && // If the revalidate value isn't currently set or the value is less\n // than the current revalidate value, we should update the revalidate\n // value.\n (typeof staticGenerationStore.revalidate === \"undefined\" || typeof revalidate === \"number\" && (staticGenerationStore.revalidate === false || typeof staticGenerationStore.revalidate === \"number\" && revalidate < staticGenerationStore.revalidate))) {\n // If we were setting the revalidate value to 0, we should try to\n // postpone instead first.\n if (revalidate === 0) {\n staticGenerationStore.postpone == null ? void 0 : staticGenerationStore.postpone.call(staticGenerationStore, \"revalidate: 0\");\n }\n staticGenerationStore.revalidate = revalidate;\n }\n const isCacheableRevalidate = typeof revalidate === \"number\" && revalidate > 0 || revalidate === false;\n let cacheKey;\n if (staticGenerationStore.incrementalCache && isCacheableRevalidate) {\n try {\n cacheKey = await staticGenerationStore.incrementalCache.fetchCacheKey(fetchUrl, isRequestInput ? input : init);\n } catch (err) {\n console.error(`Failed to generate cache key for`, input);\n }\n }\n const fetchIdx = staticGenerationStore.nextFetchId ?? 1;\n staticGenerationStore.nextFetchId = fetchIdx + 1;\n const normalizedRevalidate = typeof revalidate !== \"number\" ? _constants1.CACHE_ONE_YEAR : revalidate;\n const doOriginalFetch = async (isStale, cacheReasonOverride)=>{\n const requestInputFields = [\n \"cache\",\n \"credentials\",\n \"headers\",\n \"integrity\",\n \"keepalive\",\n \"method\",\n \"mode\",\n \"redirect\",\n \"referrer\",\n \"referrerPolicy\",\n \"window\",\n \"duplex\",\n // don't pass through signal when revalidating\n ...isStale ? [] : [\n \"signal\"\n ]\n ];\n if (isRequestInput) {\n const reqInput = input;\n const reqOptions = {\n body: reqInput._ogBody || reqInput.body\n };\n for (const field of requestInputFields){\n // @ts-expect-error custom fields\n reqOptions[field] = reqInput[field];\n }\n input = new Request(reqInput.url, reqOptions);\n } else if (init) {\n const initialInit = init;\n init = {\n body: init._ogBody || init.body\n };\n for (const field of requestInputFields){\n // @ts-expect-error custom fields\n init[field] = initialInit[field];\n }\n }\n // add metadata to init without editing the original\n const clonedInit = {\n ...init,\n next: {\n ...init == null ? void 0 : init.next,\n fetchType: \"origin\",\n fetchIdx\n }\n };\n return originFetch(input, clonedInit).then(async (res)=>{\n if (!isStale) {\n trackFetchMetric(staticGenerationStore, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason: cacheReasonOverride || cacheReason,\n cacheStatus: revalidate === 0 || cacheReasonOverride ? \"skip\" : \"miss\",\n status: res.status,\n method: clonedInit.method || \"GET\"\n });\n }\n if (res.status === 200 && staticGenerationStore.incrementalCache && cacheKey && isCacheableRevalidate) {\n const bodyBuffer = Buffer.from(await res.arrayBuffer());\n try {\n await staticGenerationStore.incrementalCache.set(cacheKey, {\n kind: \"FETCH\",\n data: {\n headers: Object.fromEntries(res.headers.entries()),\n body: bodyBuffer.toString(\"base64\"),\n status: res.status,\n url: res.url\n },\n revalidate: normalizedRevalidate\n }, {\n fetchCache: true,\n revalidate,\n fetchUrl,\n fetchIdx,\n tags\n });\n } catch (err) {\n console.warn(`Failed to set fetch cache`, input, err);\n }\n const response = new Response(bodyBuffer, {\n headers: new Headers(res.headers),\n status: res.status\n });\n Object.defineProperty(response, \"url\", {\n value: res.url\n });\n return response;\n }\n return res;\n });\n };\n let handleUnlock = ()=>Promise.resolve();\n let cacheReasonOverride;\n if (cacheKey && staticGenerationStore.incrementalCache) {\n handleUnlock = await staticGenerationStore.incrementalCache.lock(cacheKey);\n const entry = staticGenerationStore.isOnDemandRevalidate ? null : await staticGenerationStore.incrementalCache.get(cacheKey, {\n kindHint: \"fetch\",\n revalidate,\n fetchUrl,\n fetchIdx,\n tags,\n softTags: implicitTags\n });\n if (entry) {\n await handleUnlock();\n } else {\n // in dev, incremental cache response will be null in case the browser adds `cache-control: no-cache` in the request headers\n cacheReasonOverride = \"cache-control: no-cache (hard refresh)\";\n }\n if ((entry == null ? void 0 : entry.value) && entry.value.kind === \"FETCH\") {\n // when stale and is revalidating we wait for fresh data\n // so the revalidated entry has the updated data\n if (!(staticGenerationStore.isRevalidate && entry.isStale)) {\n if (entry.isStale) {\n staticGenerationStore.pendingRevalidates ??= {};\n if (!staticGenerationStore.pendingRevalidates[cacheKey]) {\n staticGenerationStore.pendingRevalidates[cacheKey] = doOriginalFetch(true).catch(console.error);\n }\n }\n const resData = entry.value.data;\n trackFetchMetric(staticGenerationStore, {\n start: fetchStart,\n url: fetchUrl,\n cacheReason,\n cacheStatus: \"hit\",\n status: resData.status || 200,\n method: (init == null ? void 0 : init.method) || \"GET\"\n });\n const response = new Response(Buffer.from(resData.body, \"base64\"), {\n headers: resData.headers,\n status: resData.status\n });\n Object.defineProperty(response, \"url\", {\n value: entry.value.data.url\n });\n return response;\n }\n }\n }\n if (staticGenerationStore.isStaticGeneration && init && typeof init === \"object\") {\n const { cache } = init;\n // Delete `cache` property as Cloudflare Workers will throw an error\n if (isEdgeRuntime) delete init.cache;\n if (!staticGenerationStore.forceStatic && cache === \"no-store\") {\n const dynamicUsageReason = `no-store fetch ${input}${staticGenerationStore.urlPathname ? ` ${staticGenerationStore.urlPathname}` : \"\"}`;\n // If enabled, we should bail out of static generation.\n staticGenerationStore.postpone == null ? void 0 : staticGenerationStore.postpone.call(staticGenerationStore, dynamicUsageReason);\n // PPR is not enabled, or React postpone is not available, we\n // should set the revalidate to 0.\n staticGenerationStore.revalidate = 0;\n const err = new DynamicServerError(dynamicUsageReason);\n staticGenerationStore.dynamicUsageErr = err;\n staticGenerationStore.dynamicUsageDescription = dynamicUsageReason;\n }\n const hasNextConfig = \"next\" in init;\n const { next = {} } = init;\n if (typeof next.revalidate === \"number\" && (typeof staticGenerationStore.revalidate === \"undefined\" || typeof staticGenerationStore.revalidate === \"number\" && next.revalidate < staticGenerationStore.revalidate)) {\n if (!staticGenerationStore.forceDynamic && !staticGenerationStore.forceStatic && next.revalidate === 0) {\n const dynamicUsageReason = `revalidate: 0 fetch ${input}${staticGenerationStore.urlPathname ? ` ${staticGenerationStore.urlPathname}` : \"\"}`;\n // If enabled, we should bail out of static generation.\n staticGenerationStore.postpone == null ? void 0 : staticGenerationStore.postpone.call(staticGenerationStore, dynamicUsageReason);\n const err = new DynamicServerError(dynamicUsageReason);\n staticGenerationStore.dynamicUsageErr = err;\n staticGenerationStore.dynamicUsageDescription = dynamicUsageReason;\n }\n if (!staticGenerationStore.forceStatic || next.revalidate !== 0) {\n staticGenerationStore.revalidate = next.revalidate;\n }\n }\n if (hasNextConfig) delete init.next;\n }\n return doOriginalFetch(false, cacheReasonOverride).finally(handleUnlock);\n });\n };\n globalThis.fetch.__nextGetStaticStore = ()=>{\n return staticGenerationAsyncStorage;\n };\n globalThis.fetch.__nextPatched = true;\n}\n\n//# sourceMappingURL=patch-fetch.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9saWIvcGF0Y2gtZmV0Y2guanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBS0w7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG1CQUFtQixtQkFBTyxDQUFDLHVGQUFtQjtBQUM5QyxnQkFBZ0IsbUJBQU8sQ0FBQyxpRkFBZ0I7QUFDeEMsb0JBQW9CLG1CQUFPLENBQUMsNEVBQXFCO0FBQ2pELHFEQUFxRCxtQkFBTyxDQUFDLGtGQUF3QjtBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLFFBQXdCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1YseURBQXlELGNBQWMsUUFBUSxTQUFTO0FBQ3hGO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFVBQVU7QUFDVjtBQUNBO0FBQ0Esa0RBQWtELHNDQUFzQztBQUN4RixhQUFhO0FBQ2IsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELFlBQVk7QUFDcEUscUJBQXFCLGNBQWM7QUFDbkMsaUNBQWlDLElBQUksSUFBSSxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qiw4QkFBOEI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsWUFBWSxFQUFFLHNDQUFzQztBQUN6RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix1Q0FBdUMsRUFBRSxJQUFJO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix1Q0FBdUMsRUFBRSxlQUFlO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLHNCQUFzQiwyQ0FBMkM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRSxpQkFBaUI7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLFVBQVUsS0FBSyxtQ0FBbUMsb0JBQW9CLE9BQU8scUJBQXFCLGNBQWM7QUFDM0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQSx3SUFBd0k7QUFDeEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RSxVQUFVO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLFVBQVU7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCw2Q0FBNkMsV0FBVztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLE1BQU0sRUFBRSx3Q0FBd0Msa0NBQWtDLE9BQU87QUFDMUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsWUFBWTtBQUNwQztBQUNBO0FBQ0EsMEVBQTBFLE1BQU0sRUFBRSx3Q0FBd0Msa0NBQWtDLE9BQU87QUFDbks7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2xpYi9wYXRjaC1mZXRjaC5qcz85MzZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgdmFsaWRhdGVSZXZhbGlkYXRlOiBudWxsLFxuICAgIHZhbGlkYXRlVGFnczogbnVsbCxcbiAgICBhZGRJbXBsaWNpdFRhZ3M6IG51bGwsXG4gICAgcGF0Y2hGZXRjaDogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICB2YWxpZGF0ZVJldmFsaWRhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVSZXZhbGlkYXRlO1xuICAgIH0sXG4gICAgdmFsaWRhdGVUYWdzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlVGFncztcbiAgICB9LFxuICAgIGFkZEltcGxpY2l0VGFnczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhZGRJbXBsaWNpdFRhZ3M7XG4gICAgfSxcbiAgICBwYXRjaEZldGNoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHBhdGNoRmV0Y2g7XG4gICAgfVxufSk7XG5jb25zdCBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vdHJhY2UvY29uc3RhbnRzXCIpO1xuY29uc3QgX3RyYWNlciA9IHJlcXVpcmUoXCIuL3RyYWNlL3RyYWNlclwiKTtcbmNvbnN0IF9jb25zdGFudHMxID0gcmVxdWlyZShcIi4uLy4uL2xpYi9jb25zdGFudHNcIik7XG5jb25zdCBfbG9nID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi9idWlsZC9vdXRwdXQvbG9nXCIpKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkge1xuICAgIGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY2FjaGVCYWJlbEludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuICAgIHZhciBjYWNoZU5vZGVJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTtcbiAgICByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uKG5vZGVJbnRlcm9wKSB7XG4gICAgICAgIHJldHVybiBub2RlSW50ZXJvcCA/IGNhY2hlTm9kZUludGVyb3AgOiBjYWNoZUJhYmVsSW50ZXJvcDtcbiAgICB9KShub2RlSW50ZXJvcCk7XG59XG5mdW5jdGlvbiBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkKG9iaiwgbm9kZUludGVyb3ApIHtcbiAgICBpZiAoIW5vZGVJbnRlcm9wICYmIG9iaiAmJiBvYmouX19lc01vZHVsZSkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZWZhdWx0OiBvYmpcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTtcbiAgICBpZiAoY2FjaGUgJiYgY2FjaGUuaGFzKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlLmdldChvYmopO1xuICAgIH1cbiAgICB2YXIgbmV3T2JqID0ge307XG4gICAgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIGZvcih2YXIga2V5IGluIG9iail7XG4gICAgICAgIGlmIChrZXkgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG4gICAgaWYgKGNhY2hlKSB7XG4gICAgICAgIGNhY2hlLnNldChvYmosIG5ld09iaik7XG4gICAgfVxuICAgIHJldHVybiBuZXdPYmo7XG59XG5jb25zdCBpc0VkZ2VSdW50aW1lID0gcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FID09PSBcImVkZ2VcIjtcbmZ1bmN0aW9uIHZhbGlkYXRlUmV2YWxpZGF0ZShyZXZhbGlkYXRlVmFsLCBwYXRobmFtZSkge1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBub3JtYWxpemVkUmV2YWxpZGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHJldmFsaWRhdGVWYWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBub3JtYWxpemVkUmV2YWxpZGF0ZSA9IHJldmFsaWRhdGVWYWw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJldmFsaWRhdGVWYWwgPT09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHJldmFsaWRhdGVWYWwpICYmIHJldmFsaWRhdGVWYWwgPiAtMSkge1xuICAgICAgICAgICAgbm9ybWFsaXplZFJldmFsaWRhdGUgPSByZXZhbGlkYXRlVmFsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXZhbGlkYXRlVmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmV2YWxpZGF0ZSB2YWx1ZSBcIiR7cmV2YWxpZGF0ZVZhbH1cIiBvbiBcIiR7cGF0aG5hbWV9XCIsIG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyIG9yIFwiZmFsc2VcImApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub3JtYWxpemVkUmV2YWxpZGF0ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gaGFuZGxlIGNsaWVudCBjb21wb25lbnQgZXJyb3IgZnJvbSBhdHRlbXB0aW5nIHRvIGNoZWNrIHJldmFsaWRhdGUgdmFsdWVcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yICYmIGVyci5tZXNzYWdlLmluY2x1ZGVzKFwiSW52YWxpZCByZXZhbGlkYXRlXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVRhZ3ModGFncywgZGVzY3JpcHRpb24pIHtcbiAgICBjb25zdCB2YWxpZFRhZ3MgPSBbXTtcbiAgICBjb25zdCBpbnZhbGlkVGFncyA9IFtdO1xuICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3Mpe1xuICAgICAgICBpZiAodHlwZW9mIHRhZyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaW52YWxpZFRhZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogXCJpbnZhbGlkIHR5cGUsIG11c3QgYmUgYSBzdHJpbmdcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnLmxlbmd0aCA+IF9jb25zdGFudHMxLk5FWFRfQ0FDSEVfVEFHX01BWF9MRU5HVEgpIHtcbiAgICAgICAgICAgIGludmFsaWRUYWdzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICByZWFzb246IGBleGNlZWRlZCBtYXggbGVuZ3RoIG9mICR7X2NvbnN0YW50czEuTkVYVF9DQUNIRV9UQUdfTUFYX0xFTkdUSH1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbGlkVGFncy5wdXNoKHRhZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGludmFsaWRUYWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBpbnZhbGlkIHRhZ3MgcGFzc2VkIHRvICR7ZGVzY3JpcHRpb259OiBgKTtcbiAgICAgICAgZm9yIChjb25zdCB7IHRhZywgcmVhc29uIH0gb2YgaW52YWxpZFRhZ3Mpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHRhZzogXCIke3RhZ31cIiAke3JlYXNvbn1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWRUYWdzO1xufVxuY29uc3QgZ2V0RGVyaXZlZFRhZ3MgPSAocGF0aG5hbWUpPT57XG4gICAgY29uc3QgZGVyaXZlZFRhZ3MgPSBbXG4gICAgICAgIGAvbGF5b3V0YFxuICAgIF07XG4gICAgLy8gd2UgYXV0b21hdGljYWxseSBhZGQgdGhlIGN1cnJlbnQgcGF0aCBzZWdtZW50cyBhcyB0YWdzXG4gICAgLy8gZm9yIHJldmFsaWRhdGVQYXRoIGhhbmRsaW5nXG4gICAgaWYgKHBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIGNvbnN0IHBhdGhuYW1lUGFydHMgPSBwYXRobmFtZS5zcGxpdChcIi9cIik7XG4gICAgICAgIGZvcihsZXQgaSA9IDE7IGkgPCBwYXRobmFtZVBhcnRzLmxlbmd0aCArIDE7IGkrKyl7XG4gICAgICAgICAgICBsZXQgY3VyUGF0aG5hbWUgPSBwYXRobmFtZVBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oXCIvXCIpO1xuICAgICAgICAgICAgaWYgKGN1clBhdGhuYW1lKSB7XG4gICAgICAgICAgICAgICAgLy8gYWxsIGRlcml2ZWQgdGFncyBvdGhlciB0aGFuIHRoZSBwYWdlIGFyZSBsYXlvdXQgdGFnc1xuICAgICAgICAgICAgICAgIGlmICghY3VyUGF0aG5hbWUuZW5kc1dpdGgoXCIvcGFnZVwiKSAmJiAhY3VyUGF0aG5hbWUuZW5kc1dpdGgoXCIvcm91dGVcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyUGF0aG5hbWUgPSBgJHtjdXJQYXRobmFtZX0keyFjdXJQYXRobmFtZS5lbmRzV2l0aChcIi9cIikgPyBcIi9cIiA6IFwiXCJ9bGF5b3V0YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVyaXZlZFRhZ3MucHVzaChjdXJQYXRobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlcml2ZWRUYWdzO1xufTtcbmZ1bmN0aW9uIGFkZEltcGxpY2l0VGFncyhzdGF0aWNHZW5lcmF0aW9uU3RvcmUpIHtcbiAgICBjb25zdCBuZXdUYWdzID0gW107XG4gICAgY29uc3QgeyBwYWdlUGF0aCwgdXJsUGF0aG5hbWUgfSA9IHN0YXRpY0dlbmVyYXRpb25TdG9yZTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGljR2VuZXJhdGlvblN0b3JlLnRhZ3MpKSB7XG4gICAgICAgIHN0YXRpY0dlbmVyYXRpb25TdG9yZS50YWdzID0gW107XG4gICAgfVxuICAgIGlmIChwYWdlUGF0aCkge1xuICAgICAgICBjb25zdCBkZXJpdmVkVGFncyA9IGdldERlcml2ZWRUYWdzKHBhZ2VQYXRoKTtcbiAgICAgICAgZm9yIChsZXQgdGFnIG9mIGRlcml2ZWRUYWdzKXtcbiAgICAgICAgICAgIHZhciBfc3RhdGljR2VuZXJhdGlvblN0b3JlX3RhZ3M7XG4gICAgICAgICAgICB0YWcgPSBgJHtfY29uc3RhbnRzMS5ORVhUX0NBQ0hFX0lNUExJQ0lUX1RBR19JRH0ke3RhZ31gO1xuICAgICAgICAgICAgaWYgKCEoKF9zdGF0aWNHZW5lcmF0aW9uU3RvcmVfdGFncyA9IHN0YXRpY0dlbmVyYXRpb25TdG9yZS50YWdzKSA9PSBudWxsID8gdm9pZCAwIDogX3N0YXRpY0dlbmVyYXRpb25TdG9yZV90YWdzLmluY2x1ZGVzKHRhZykpKSB7XG4gICAgICAgICAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLnRhZ3MucHVzaCh0YWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3VGFncy5wdXNoKHRhZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHVybFBhdGhuYW1lKSB7XG4gICAgICAgIHZhciBfc3RhdGljR2VuZXJhdGlvblN0b3JlX3RhZ3MxO1xuICAgICAgICBjb25zdCBwYXJzZWRQYXRobmFtZSA9IG5ldyBVUkwodXJsUGF0aG5hbWUsIFwiaHR0cDovL25cIikucGF0aG5hbWU7XG4gICAgICAgIGNvbnN0IHRhZyA9IGAke19jb25zdGFudHMxLk5FWFRfQ0FDSEVfSU1QTElDSVRfVEFHX0lEfSR7cGFyc2VkUGF0aG5hbWV9YDtcbiAgICAgICAgaWYgKCEoKF9zdGF0aWNHZW5lcmF0aW9uU3RvcmVfdGFnczEgPSBzdGF0aWNHZW5lcmF0aW9uU3RvcmUudGFncykgPT0gbnVsbCA/IHZvaWQgMCA6IF9zdGF0aWNHZW5lcmF0aW9uU3RvcmVfdGFnczEuaW5jbHVkZXModGFnKSkpIHtcbiAgICAgICAgICAgIHN0YXRpY0dlbmVyYXRpb25TdG9yZS50YWdzLnB1c2godGFnKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdUYWdzLnB1c2godGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1RhZ3M7XG59XG5mdW5jdGlvbiB0cmFja0ZldGNoTWV0cmljKHN0YXRpY0dlbmVyYXRpb25TdG9yZSwgY3R4KSB7XG4gICAgaWYgKCFzdGF0aWNHZW5lcmF0aW9uU3RvcmUpIHJldHVybjtcbiAgICBpZiAoIXN0YXRpY0dlbmVyYXRpb25TdG9yZS5mZXRjaE1ldHJpY3MpIHtcbiAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLmZldGNoTWV0cmljcyA9IFtdO1xuICAgIH1cbiAgICBjb25zdCBkZWR1cGVGaWVsZHMgPSBbXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwic3RhdHVzXCIsXG4gICAgICAgIFwibWV0aG9kXCJcbiAgICBdO1xuICAgIC8vIGRvbid0IGFkZCBtZXRyaWMgaWYgb25lIGFscmVhZHkgZXhpc3RzIGZvciB0aGUgZmV0Y2hcbiAgICBpZiAoc3RhdGljR2VuZXJhdGlvblN0b3JlLmZldGNoTWV0cmljcy5zb21lKChtZXRyaWMpPT57XG4gICAgICAgIHJldHVybiBkZWR1cGVGaWVsZHMuZXZlcnkoKGZpZWxkKT0+bWV0cmljW2ZpZWxkXSA9PT0gY3R4W2ZpZWxkXSk7XG4gICAgfSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGF0aWNHZW5lcmF0aW9uU3RvcmUuZmV0Y2hNZXRyaWNzLnB1c2goe1xuICAgICAgICB1cmw6IGN0eC51cmwsXG4gICAgICAgIGNhY2hlU3RhdHVzOiBjdHguY2FjaGVTdGF0dXMsXG4gICAgICAgIGNhY2hlUmVhc29uOiBjdHguY2FjaGVSZWFzb24sXG4gICAgICAgIHN0YXR1czogY3R4LnN0YXR1cyxcbiAgICAgICAgbWV0aG9kOiBjdHgubWV0aG9kLFxuICAgICAgICBzdGFydDogY3R4LnN0YXJ0LFxuICAgICAgICBlbmQ6IERhdGUubm93KCksXG4gICAgICAgIGlkeDogc3RhdGljR2VuZXJhdGlvblN0b3JlLm5leHRGZXRjaElkIHx8IDBcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHBhdGNoRmV0Y2goeyBzZXJ2ZXJIb29rcywgc3RhdGljR2VuZXJhdGlvbkFzeW5jU3RvcmFnZSB9KSB7XG4gICAgaWYgKCFnbG9iYWxUaGlzLl9uZXh0T3JpZ2luYWxGZXRjaCkge1xuICAgICAgICBnbG9iYWxUaGlzLl9uZXh0T3JpZ2luYWxGZXRjaCA9IGdsb2JhbFRoaXMuZmV0Y2g7XG4gICAgfVxuICAgIGlmIChnbG9iYWxUaGlzLmZldGNoLl9fbmV4dFBhdGNoZWQpIHJldHVybjtcbiAgICBjb25zdCB7IER5bmFtaWNTZXJ2ZXJFcnJvciB9ID0gc2VydmVySG9va3M7XG4gICAgY29uc3Qgb3JpZ2luRmV0Y2ggPSBnbG9iYWxUaGlzLl9uZXh0T3JpZ2luYWxGZXRjaDtcbiAgICBnbG9iYWxUaGlzLmZldGNoID0gYXN5bmMgKGlucHV0LCBpbml0KT0+e1xuICAgICAgICB2YXIgX2luaXRfbWV0aG9kLCBfdGhpcztcbiAgICAgICAgbGV0IHVybDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHVybCA9IG5ldyBVUkwoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0ID8gaW5wdXQudXJsIDogaW5wdXQpO1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gXCJcIjtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IFwiXCI7XG4gICAgICAgIH0gY2F0Y2ggIHtcbiAgICAgICAgICAgIC8vIEVycm9yIGNhdXNlZCBieSBtYWxmb3JtZWQgVVJMIHNob3VsZCBiZSBoYW5kbGVkIGJ5IG5hdGl2ZSBmZXRjaFxuICAgICAgICAgICAgdXJsID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZldGNoVXJsID0gKHVybCA9PSBudWxsID8gdm9pZCAwIDogdXJsLmhyZWYpID8/IFwiXCI7XG4gICAgICAgIGNvbnN0IGZldGNoU3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBtZXRob2QgPSAoaW5pdCA9PSBudWxsID8gdm9pZCAwIDogKF9pbml0X21ldGhvZCA9IGluaXQubWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogX2luaXRfbWV0aG9kLnRvVXBwZXJDYXNlKCkpIHx8IFwiR0VUXCI7XG4gICAgICAgIC8vIERvIGNyZWF0ZSBhIG5ldyBzcGFuIHRyYWNlIGZvciBpbnRlcm5hbCBmZXRjaGVzIGluIHRoZVxuICAgICAgICAvLyBub24tdmVyYm9zZSBtb2RlLlxuICAgICAgICBjb25zdCBpc0ludGVybmFsID0gKChfdGhpcyA9IGluaXQgPT0gbnVsbCA/IHZvaWQgMCA6IGluaXQubmV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzLmludGVybmFsKSA9PT0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaGlkZVNwYW4gPSBwcm9jZXNzLmVudi5ORVhUX09URUxfRkVUQ0hfRElTQUJMRUQgPT09IFwiMVwiO1xuICAgICAgICByZXR1cm4gYXdhaXQgKDAsIF90cmFjZXIuZ2V0VHJhY2VyKSgpLnRyYWNlKGlzSW50ZXJuYWwgPyBfY29uc3RhbnRzLk5leHROb2RlU2VydmVyU3Bhbi5pbnRlcm5hbEZldGNoIDogX2NvbnN0YW50cy5BcHBSZW5kZXJTcGFuLmZldGNoLCB7XG4gICAgICAgICAgICBoaWRlU3BhbixcbiAgICAgICAgICAgIGtpbmQ6IF90cmFjZXIuU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgc3Bhbk5hbWU6IFtcbiAgICAgICAgICAgICAgICBcImZldGNoXCIsXG4gICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgIGZldGNoVXJsXG4gICAgICAgICAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBcImh0dHAudXJsXCI6IGZldGNoVXJsLFxuICAgICAgICAgICAgICAgIFwiaHR0cC5tZXRob2RcIjogbWV0aG9kLFxuICAgICAgICAgICAgICAgIFwibmV0LnBlZXIubmFtZVwiOiB1cmwgPT0gbnVsbCA/IHZvaWQgMCA6IHVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgICAgICBcIm5ldC5wZWVyLnBvcnRcIjogKHVybCA9PSBudWxsID8gdm9pZCAwIDogdXJsLnBvcnQpIHx8IHVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBhc3luYyAoKT0+e1xuICAgICAgICAgICAgdmFyIF9nZXRSZXF1ZXN0TWV0YTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRpY0dlbmVyYXRpb25TdG9yZSA9IHN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKSB8fCAoZmV0Y2guX19uZXh0R2V0U3RhdGljU3RvcmUgPT0gbnVsbCA/IHZvaWQgMCA6IGZldGNoLl9fbmV4dEdldFN0YXRpY1N0b3JlLmNhbGwoZmV0Y2gpKTtcbiAgICAgICAgICAgIGNvbnN0IGlzUmVxdWVzdElucHV0ID0gaW5wdXQgJiYgdHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBpbnB1dC5tZXRob2QgPT09IFwic3RyaW5nXCI7XG4gICAgICAgICAgICBjb25zdCBnZXRSZXF1ZXN0TWV0YSA9IChmaWVsZCk9PntcbiAgICAgICAgICAgICAgICAvLyBJZiByZXF1ZXN0IGlucHV0IGlzIHByZXNlbnQgYnV0IGluaXQgaXMgbm90LCByZXRyaWV2ZSBmcm9tIGlucHV0IGZpcnN0LlxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5pdCA9PSBudWxsID8gdm9pZCAwIDogaW5pdFtmaWVsZF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIHx8IChpc1JlcXVlc3RJbnB1dCA/IGlucHV0W2ZpZWxkXSA6IG51bGwpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBzdGF0aWNHZW5lcmF0aW9uU3RvcmUgaXMgbm90IGF2YWlsYWJsZSwgd2UgY2FuJ3QgZG8gYW55XG4gICAgICAgICAgICAvLyBzcGVjaWFsIHRyZWF0bWVudCBvZiBmZXRjaCwgdGhlcmVmb3JlIGZhbGxiYWNrIHRvIHRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgLy8gZmV0Y2ggaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgICBpZiAoIXN0YXRpY0dlbmVyYXRpb25TdG9yZSB8fCBpc0ludGVybmFsIHx8IHN0YXRpY0dlbmVyYXRpb25TdG9yZS5pc0RyYWZ0TW9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5GZXRjaChpbnB1dCwgaW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmV2YWxpZGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGdldE5leHRGaWVsZCA9IChmaWVsZCk9PntcbiAgICAgICAgICAgICAgICB2YXIgX2luaXRfbmV4dCwgX2luaXRfbmV4dDEsIF9pbnB1dF9uZXh0O1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgKGluaXQgPT0gbnVsbCA/IHZvaWQgMCA6IChfaW5pdF9uZXh0ID0gaW5pdC5uZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2luaXRfbmV4dFtmaWVsZF0pICE9PSBcInVuZGVmaW5lZFwiID8gaW5pdCA9PSBudWxsID8gdm9pZCAwIDogKF9pbml0X25leHQxID0gaW5pdC5uZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2luaXRfbmV4dDFbZmllbGRdIDogaXNSZXF1ZXN0SW5wdXQgPyAoX2lucHV0X25leHQgPSBpbnB1dC5uZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0X25leHRbZmllbGRdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFJlcXVlc3RJbml0IGRvZXNuJ3Qga2VlcCBleHRyYSBmaWVsZHMgZS5nLiBuZXh0IHNvIGl0J3NcbiAgICAgICAgICAgIC8vIG9ubHkgYXZhaWxhYmxlIGlmIGluaXQgaXMgdXNlZCBzZXBhcmF0ZVxuICAgICAgICAgICAgbGV0IGN1clJldmFsaWRhdGUgPSBnZXROZXh0RmllbGQoXCJyZXZhbGlkYXRlXCIpO1xuICAgICAgICAgICAgY29uc3QgdGFncyA9IHZhbGlkYXRlVGFncyhnZXROZXh0RmllbGQoXCJ0YWdzXCIpIHx8IFtdLCBgZmV0Y2ggJHtpbnB1dC50b1N0cmluZygpfWApO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFncykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY0dlbmVyYXRpb25TdG9yZS50YWdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0dlbmVyYXRpb25TdG9yZS50YWdzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3Mpe1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY0dlbmVyYXRpb25TdG9yZS50YWdzLmluY2x1ZGVzKHRhZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0dlbmVyYXRpb25TdG9yZS50YWdzLnB1c2godGFnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGltcGxpY2l0VGFncyA9IGFkZEltcGxpY2l0VGFncyhzdGF0aWNHZW5lcmF0aW9uU3RvcmUpO1xuICAgICAgICAgICAgY29uc3QgaXNPbmx5Q2FjaGUgPSBzdGF0aWNHZW5lcmF0aW9uU3RvcmUuZmV0Y2hDYWNoZSA9PT0gXCJvbmx5LWNhY2hlXCI7XG4gICAgICAgICAgICBjb25zdCBpc0ZvcmNlQ2FjaGUgPSBzdGF0aWNHZW5lcmF0aW9uU3RvcmUuZmV0Y2hDYWNoZSA9PT0gXCJmb3JjZS1jYWNoZVwiO1xuICAgICAgICAgICAgY29uc3QgaXNEZWZhdWx0Q2FjaGUgPSBzdGF0aWNHZW5lcmF0aW9uU3RvcmUuZmV0Y2hDYWNoZSA9PT0gXCJkZWZhdWx0LWNhY2hlXCI7XG4gICAgICAgICAgICBjb25zdCBpc0RlZmF1bHROb1N0b3JlID0gc3RhdGljR2VuZXJhdGlvblN0b3JlLmZldGNoQ2FjaGUgPT09IFwiZGVmYXVsdC1uby1zdG9yZVwiO1xuICAgICAgICAgICAgY29uc3QgaXNPbmx5Tm9TdG9yZSA9IHN0YXRpY0dlbmVyYXRpb25TdG9yZS5mZXRjaENhY2hlID09PSBcIm9ubHktbm8tc3RvcmVcIjtcbiAgICAgICAgICAgIGNvbnN0IGlzRm9yY2VOb1N0b3JlID0gc3RhdGljR2VuZXJhdGlvblN0b3JlLmZldGNoQ2FjaGUgPT09IFwiZm9yY2Utbm8tc3RvcmVcIjtcbiAgICAgICAgICAgIGNvbnN0IGlzVXNpbmdOb1N0b3JlID0gISFzdGF0aWNHZW5lcmF0aW9uU3RvcmUuaXNVbnN0YWJsZU5vU3RvcmU7XG4gICAgICAgICAgICBsZXQgX2NhY2hlID0gZ2V0UmVxdWVzdE1ldGEoXCJjYWNoZVwiKTtcbiAgICAgICAgICAgIGxldCBjYWNoZVJlYXNvbiA9IFwiXCI7XG4gICAgICAgICAgICBpZiAodHlwZW9mIF9jYWNoZSA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgY3VyUmV2YWxpZGF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIC8vIHdoZW4gcHJvdmlkaW5nIGZldGNoIHdpdGggYSBSZXF1ZXN0IGlucHV0LCBpdCdsbCBhdXRvbWF0aWNhbGx5IHNldCBhIGNhY2hlIHZhbHVlIG9mICdkZWZhdWx0J1xuICAgICAgICAgICAgICAgIC8vIHdlIG9ubHkgd2FudCB0byB3YXJuIGlmIHRoZSB1c2VyIGlzIGV4cGxpY2l0bHkgc2V0dGluZyBhIGNhY2hlIHZhbHVlXG4gICAgICAgICAgICAgICAgaWYgKCEoaXNSZXF1ZXN0SW5wdXQgJiYgX2NhY2hlID09PSBcImRlZmF1bHRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgX2xvZy53YXJuKGBmZXRjaCBmb3IgJHtmZXRjaFVybH0gb24gJHtzdGF0aWNHZW5lcmF0aW9uU3RvcmUudXJsUGF0aG5hbWV9IHNwZWNpZmllZCBcImNhY2hlOiAke19jYWNoZX1cIiBhbmQgXCJyZXZhbGlkYXRlOiAke2N1clJldmFsaWRhdGV9XCIsIG9ubHkgb25lIHNob3VsZCBiZSBzcGVjaWZpZWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9jYWNoZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfY2FjaGUgPT09IFwiZm9yY2UtY2FjaGVcIikge1xuICAgICAgICAgICAgICAgIGN1clJldmFsaWRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoX2NhY2hlID09PSBcIm5vLWNhY2hlXCIgfHwgX2NhY2hlID09PSBcIm5vLXN0b3JlXCIgfHwgaXNGb3JjZU5vU3RvcmUgfHwgaXNPbmx5Tm9TdG9yZSkge1xuICAgICAgICAgICAgICAgIGN1clJldmFsaWRhdGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9jYWNoZSA9PT0gXCJuby1jYWNoZVwiIHx8IF9jYWNoZSA9PT0gXCJuby1zdG9yZVwiKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVSZWFzb24gPSBgY2FjaGU6ICR7X2NhY2hlfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXZhbGlkYXRlID0gdmFsaWRhdGVSZXZhbGlkYXRlKGN1clJldmFsaWRhdGUsIHN0YXRpY0dlbmVyYXRpb25TdG9yZS51cmxQYXRobmFtZSk7XG4gICAgICAgICAgICBjb25zdCBfaGVhZGVycyA9IGdldFJlcXVlc3RNZXRhKFwiaGVhZGVyc1wiKTtcbiAgICAgICAgICAgIGNvbnN0IGluaXRIZWFkZXJzID0gdHlwZW9mIChfaGVhZGVycyA9PSBudWxsID8gdm9pZCAwIDogX2hlYWRlcnMuZ2V0KSA9PT0gXCJmdW5jdGlvblwiID8gX2hlYWRlcnMgOiBuZXcgSGVhZGVycyhfaGVhZGVycyB8fCB7fSk7XG4gICAgICAgICAgICBjb25zdCBoYXNVbkNhY2hlYWJsZUhlYWRlciA9IGluaXRIZWFkZXJzLmdldChcImF1dGhvcml6YXRpb25cIikgfHwgaW5pdEhlYWRlcnMuZ2V0KFwiY29va2llXCIpO1xuICAgICAgICAgICAgY29uc3QgaXNVbkNhY2hlYWJsZU1ldGhvZCA9ICFbXG4gICAgICAgICAgICAgICAgXCJnZXRcIixcbiAgICAgICAgICAgICAgICBcImhlYWRcIlxuICAgICAgICAgICAgXS5pbmNsdWRlcygoKF9nZXRSZXF1ZXN0TWV0YSA9IGdldFJlcXVlc3RNZXRhKFwibWV0aG9kXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2dldFJlcXVlc3RNZXRhLnRvTG93ZXJDYXNlKCkpIHx8IFwiZ2V0XCIpO1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIGF1dGhvcml6ZWQgaGVhZGVycyBvciBhIFBPU1QgbWV0aG9kIGFuZFxuICAgICAgICAgICAgLy8gZHluYW1pYyBkYXRhIHVzYWdlIHdhcyBwcmVzZW50IGFib3ZlIHRoZSB0cmVlIHdlIGJhaWxcbiAgICAgICAgICAgIC8vIGUuZy4gaWYgY29va2llcygpIGlzIHVzZWQgYmVmb3JlIGFuIGF1dGhlZC9QT1NUIGZldGNoXG4gICAgICAgICAgICBjb25zdCBhdXRvTm9DYWNoZSA9IChoYXNVbkNhY2hlYWJsZUhlYWRlciB8fCBpc1VuQ2FjaGVhYmxlTWV0aG9kKSAmJiBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucmV2YWxpZGF0ZSA9PT0gMDtcbiAgICAgICAgICAgIGlmIChpc0ZvcmNlTm9TdG9yZSkge1xuICAgICAgICAgICAgICAgIGNhY2hlUmVhc29uID0gXCJmZXRjaENhY2hlID0gZm9yY2Utbm8tc3RvcmVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc09ubHlOb1N0b3JlKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9jYWNoZSA9PT0gXCJmb3JjZS1jYWNoZVwiIHx8IHR5cGVvZiByZXZhbGlkYXRlICE9PSBcInVuZGVmaW5lZFwiICYmIChyZXZhbGlkYXRlID09PSBmYWxzZSB8fCByZXZhbGlkYXRlID4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYWNoZTogJ2ZvcmNlLWNhY2hlJyB1c2VkIG9uIGZldGNoIGZvciAke2ZldGNoVXJsfSB3aXRoICdleHBvcnQgY29uc3QgZmV0Y2hDYWNoZSA9ICdvbmx5LW5vLXN0b3JlJ2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWNoZVJlYXNvbiA9IFwiZmV0Y2hDYWNoZSA9IG9ubHktbm8tc3RvcmVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc09ubHlDYWNoZSAmJiBfY2FjaGUgPT09IFwibm8tc3RvcmVcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2FjaGU6ICduby1zdG9yZScgdXNlZCBvbiBmZXRjaCBmb3IgJHtmZXRjaFVybH0gd2l0aCAnZXhwb3J0IGNvbnN0IGZldGNoQ2FjaGUgPSAnb25seS1jYWNoZSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ZvcmNlQ2FjaGUgJiYgKHR5cGVvZiBjdXJSZXZhbGlkYXRlID09PSBcInVuZGVmaW5lZFwiIHx8IGN1clJldmFsaWRhdGUgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVSZWFzb24gPSBcImZldGNoQ2FjaGUgPSBmb3JjZS1jYWNoZVwiO1xuICAgICAgICAgICAgICAgIHJldmFsaWRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmV2YWxpZGF0ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIGlmIChpc0RlZmF1bHRDYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXZhbGlkYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlUmVhc29uID0gXCJmZXRjaENhY2hlID0gZGVmYXVsdC1jYWNoZVwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXV0b05vQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV2YWxpZGF0ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlUmVhc29uID0gXCJhdXRvIG5vIGNhY2hlXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0RlZmF1bHROb1N0b3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldmFsaWRhdGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICBjYWNoZVJlYXNvbiA9IFwiZmV0Y2hDYWNoZSA9IGRlZmF1bHQtbm8tc3RvcmVcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVXNpbmdOb1N0b3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldmFsaWRhdGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICBjYWNoZVJlYXNvbiA9IFwibm9TdG9yZSBjYWxsXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVSZWFzb24gPSBcImF1dG8gY2FjaGVcIjtcbiAgICAgICAgICAgICAgICAgICAgcmV2YWxpZGF0ZSA9IHR5cGVvZiBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucmV2YWxpZGF0ZSA9PT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIHN0YXRpY0dlbmVyYXRpb25TdG9yZS5yZXZhbGlkYXRlID09PSBcInVuZGVmaW5lZFwiID8gZmFsc2UgOiBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucmV2YWxpZGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjYWNoZVJlYXNvbikge1xuICAgICAgICAgICAgICAgIGNhY2hlUmVhc29uID0gYHJldmFsaWRhdGU6ICR7cmV2YWxpZGF0ZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKC8vIHdoZW4gZm9yY2Ugc3RhdGljIGlzIGNvbmZpZ3VyZWQgd2UgZG9uJ3QgYmFpbCBmcm9tXG4gICAgICAgICAgICAvLyBgcmV2YWxpZGF0ZTogMGAgdmFsdWVzXG4gICAgICAgICAgICAhKHN0YXRpY0dlbmVyYXRpb25TdG9yZS5mb3JjZVN0YXRpYyAmJiByZXZhbGlkYXRlID09PSAwKSAmJiAvLyB3ZSBkb24ndCBjb25zaWRlciBhdXRvTm9DYWNoZSB0byBzd2l0Y2ggdG8gZHluYW1pYyBkdXJpbmdcbiAgICAgICAgICAgIC8vIHJldmFsaWRhdGUgYWx0aG91Z2ggaWYgaXQgb2NjdXJzIGR1cmluZyBidWlsZCB3ZSBkb1xuICAgICAgICAgICAgIWF1dG9Ob0NhY2hlICYmIC8vIElmIHRoZSByZXZhbGlkYXRlIHZhbHVlIGlzbid0IGN1cnJlbnRseSBzZXQgb3IgdGhlIHZhbHVlIGlzIGxlc3NcbiAgICAgICAgICAgIC8vIHRoYW4gdGhlIGN1cnJlbnQgcmV2YWxpZGF0ZSB2YWx1ZSwgd2Ugc2hvdWxkIHVwZGF0ZSB0aGUgcmV2YWxpZGF0ZVxuICAgICAgICAgICAgLy8gdmFsdWUuXG4gICAgICAgICAgICAodHlwZW9mIHN0YXRpY0dlbmVyYXRpb25TdG9yZS5yZXZhbGlkYXRlID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiByZXZhbGlkYXRlID09PSBcIm51bWJlclwiICYmIChzdGF0aWNHZW5lcmF0aW9uU3RvcmUucmV2YWxpZGF0ZSA9PT0gZmFsc2UgfHwgdHlwZW9mIHN0YXRpY0dlbmVyYXRpb25TdG9yZS5yZXZhbGlkYXRlID09PSBcIm51bWJlclwiICYmIHJldmFsaWRhdGUgPCBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucmV2YWxpZGF0ZSkpKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2Ugd2VyZSBzZXR0aW5nIHRoZSByZXZhbGlkYXRlIHZhbHVlIHRvIDAsIHdlIHNob3VsZCB0cnkgdG9cbiAgICAgICAgICAgICAgICAvLyBwb3N0cG9uZSBpbnN0ZWFkIGZpcnN0LlxuICAgICAgICAgICAgICAgIGlmIChyZXZhbGlkYXRlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0dlbmVyYXRpb25TdG9yZS5wb3N0cG9uZSA9PSBudWxsID8gdm9pZCAwIDogc3RhdGljR2VuZXJhdGlvblN0b3JlLnBvc3Rwb25lLmNhbGwoc3RhdGljR2VuZXJhdGlvblN0b3JlLCBcInJldmFsaWRhdGU6IDBcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0YXRpY0dlbmVyYXRpb25TdG9yZS5yZXZhbGlkYXRlID0gcmV2YWxpZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlzQ2FjaGVhYmxlUmV2YWxpZGF0ZSA9IHR5cGVvZiByZXZhbGlkYXRlID09PSBcIm51bWJlclwiICYmIHJldmFsaWRhdGUgPiAwIHx8IHJldmFsaWRhdGUgPT09IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGNhY2hlS2V5O1xuICAgICAgICAgICAgaWYgKHN0YXRpY0dlbmVyYXRpb25TdG9yZS5pbmNyZW1lbnRhbENhY2hlICYmIGlzQ2FjaGVhYmxlUmV2YWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5ID0gYXdhaXQgc3RhdGljR2VuZXJhdGlvblN0b3JlLmluY3JlbWVudGFsQ2FjaGUuZmV0Y2hDYWNoZUtleShmZXRjaFVybCwgaXNSZXF1ZXN0SW5wdXQgPyBpbnB1dCA6IGluaXQpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgY2FjaGUga2V5IGZvcmAsIGlucHV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmZXRjaElkeCA9IHN0YXRpY0dlbmVyYXRpb25TdG9yZS5uZXh0RmV0Y2hJZCA/PyAxO1xuICAgICAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLm5leHRGZXRjaElkID0gZmV0Y2hJZHggKyAxO1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJldmFsaWRhdGUgPSB0eXBlb2YgcmV2YWxpZGF0ZSAhPT0gXCJudW1iZXJcIiA/IF9jb25zdGFudHMxLkNBQ0hFX09ORV9ZRUFSIDogcmV2YWxpZGF0ZTtcbiAgICAgICAgICAgIGNvbnN0IGRvT3JpZ2luYWxGZXRjaCA9IGFzeW5jIChpc1N0YWxlLCBjYWNoZVJlYXNvbk92ZXJyaWRlKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJbnB1dEZpZWxkcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgXCJjYWNoZVwiLFxuICAgICAgICAgICAgICAgICAgICBcImNyZWRlbnRpYWxzXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiaGVhZGVyc1wiLFxuICAgICAgICAgICAgICAgICAgICBcImludGVncml0eVwiLFxuICAgICAgICAgICAgICAgICAgICBcImtlZXBhbGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1ldGhvZFwiLFxuICAgICAgICAgICAgICAgICAgICBcIm1vZGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJyZWRpcmVjdFwiLFxuICAgICAgICAgICAgICAgICAgICBcInJlZmVycmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicmVmZXJyZXJQb2xpY3lcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ3aW5kb3dcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkdXBsZXhcIixcbiAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgcGFzcyB0aHJvdWdoIHNpZ25hbCB3aGVuIHJldmFsaWRhdGluZ1xuICAgICAgICAgICAgICAgICAgICAuLi5pc1N0YWxlID8gW10gOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNpZ25hbFwiXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGlmIChpc1JlcXVlc3RJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXFJbnB1dCA9IGlucHV0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXFPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogcmVxSW5wdXQuX29nQm9keSB8fCByZXFJbnB1dC5ib2R5XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgcmVxdWVzdElucHV0RmllbGRzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY3VzdG9tIGZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxT3B0aW9uc1tmaWVsZF0gPSByZXFJbnB1dFtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSBuZXcgUmVxdWVzdChyZXFJbnB1dC51cmwsIHJlcU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5pdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbml0aWFsSW5pdCA9IGluaXQ7XG4gICAgICAgICAgICAgICAgICAgIGluaXQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBpbml0Ll9vZ0JvZHkgfHwgaW5pdC5ib2R5XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgcmVxdWVzdElucHV0RmllbGRzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgY3VzdG9tIGZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdFtmaWVsZF0gPSBpbml0aWFsSW5pdFtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYWRkIG1ldGFkYXRhIHRvIGluaXQgd2l0aG91dCBlZGl0aW5nIHRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lZEluaXQgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmluaXQsXG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmluaXQgPT0gbnVsbCA/IHZvaWQgMCA6IGluaXQubmV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoVHlwZTogXCJvcmlnaW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoSWR4XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5GZXRjaChpbnB1dCwgY2xvbmVkSW5pdCkudGhlbihhc3luYyAocmVzKT0+e1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3RhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrRmV0Y2hNZXRyaWMoc3RhdGljR2VuZXJhdGlvblN0b3JlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZldGNoU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBmZXRjaFVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVJlYXNvbjogY2FjaGVSZWFzb25PdmVycmlkZSB8fCBjYWNoZVJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVN0YXR1czogcmV2YWxpZGF0ZSA9PT0gMCB8fCBjYWNoZVJlYXNvbk92ZXJyaWRlID8gXCJza2lwXCIgOiBcIm1pc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBjbG9uZWRJbml0Lm1ldGhvZCB8fCBcIkdFVFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gMjAwICYmIHN0YXRpY0dlbmVyYXRpb25TdG9yZS5pbmNyZW1lbnRhbENhY2hlICYmIGNhY2hlS2V5ICYmIGlzQ2FjaGVhYmxlUmV2YWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc3RhdGljR2VuZXJhdGlvblN0b3JlLmluY3JlbWVudGFsQ2FjaGUuc2V0KGNhY2hlS2V5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IFwiRkVUQ0hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogT2JqZWN0LmZyb21FbnRyaWVzKHJlcy5oZWFkZXJzLmVudHJpZXMoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBib2R5QnVmZmVyLnRvU3RyaW5nKFwiYmFzZTY0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXMuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiByZXMudXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmFsaWRhdGU6IG5vcm1hbGl6ZWRSZXZhbGlkYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaENhY2hlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZhbGlkYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaFVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hJZHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIHNldCBmZXRjaCBjYWNoZWAsIGlucHV0LCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoYm9keUJ1ZmZlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHJlcy5oZWFkZXJzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3BvbnNlLCBcInVybFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlcy51cmxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IGhhbmRsZVVubG9jayA9ICgpPT5Qcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIGxldCBjYWNoZVJlYXNvbk92ZXJyaWRlO1xuICAgICAgICAgICAgaWYgKGNhY2hlS2V5ICYmIHN0YXRpY0dlbmVyYXRpb25TdG9yZS5pbmNyZW1lbnRhbENhY2hlKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5sb2NrID0gYXdhaXQgc3RhdGljR2VuZXJhdGlvblN0b3JlLmluY3JlbWVudGFsQ2FjaGUubG9jayhjYWNoZUtleSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGF0aWNHZW5lcmF0aW9uU3RvcmUuaXNPbkRlbWFuZFJldmFsaWRhdGUgPyBudWxsIDogYXdhaXQgc3RhdGljR2VuZXJhdGlvblN0b3JlLmluY3JlbWVudGFsQ2FjaGUuZ2V0KGNhY2hlS2V5LCB7XG4gICAgICAgICAgICAgICAgICAgIGtpbmRIaW50OiBcImZldGNoXCIsXG4gICAgICAgICAgICAgICAgICAgIHJldmFsaWRhdGUsXG4gICAgICAgICAgICAgICAgICAgIGZldGNoVXJsLFxuICAgICAgICAgICAgICAgICAgICBmZXRjaElkeCxcbiAgICAgICAgICAgICAgICAgICAgdGFncyxcbiAgICAgICAgICAgICAgICAgICAgc29mdFRhZ3M6IGltcGxpY2l0VGFnc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVVbmxvY2soKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbiBkZXYsIGluY3JlbWVudGFsIGNhY2hlIHJlc3BvbnNlIHdpbGwgYmUgbnVsbCBpbiBjYXNlIHRoZSBicm93c2VyIGFkZHMgYGNhY2hlLWNvbnRyb2w6IG5vLWNhY2hlYCBpbiB0aGUgcmVxdWVzdCBoZWFkZXJzXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlUmVhc29uT3ZlcnJpZGUgPSBcImNhY2hlLWNvbnRyb2w6IG5vLWNhY2hlIChoYXJkIHJlZnJlc2gpXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoZW50cnkgPT0gbnVsbCA/IHZvaWQgMCA6IGVudHJ5LnZhbHVlKSAmJiBlbnRyeS52YWx1ZS5raW5kID09PSBcIkZFVENIXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBzdGFsZSBhbmQgaXMgcmV2YWxpZGF0aW5nIHdlIHdhaXQgZm9yIGZyZXNoIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIHJldmFsaWRhdGVkIGVudHJ5IGhhcyB0aGUgdXBkYXRlZCBkYXRhXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHN0YXRpY0dlbmVyYXRpb25TdG9yZS5pc1JldmFsaWRhdGUgJiYgZW50cnkuaXNTdGFsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5pc1N0YWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLnBlbmRpbmdSZXZhbGlkYXRlcyA/Pz0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNHZW5lcmF0aW9uU3RvcmUucGVuZGluZ1JldmFsaWRhdGVzW2NhY2hlS2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucGVuZGluZ1JldmFsaWRhdGVzW2NhY2hlS2V5XSA9IGRvT3JpZ2luYWxGZXRjaCh0cnVlKS5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNEYXRhID0gZW50cnkudmFsdWUuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrRmV0Y2hNZXRyaWMoc3RhdGljR2VuZXJhdGlvblN0b3JlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZldGNoU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBmZXRjaFVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVN0YXR1czogXCJoaXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc0RhdGEuc3RhdHVzIHx8IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IChpbml0ID09IG51bGwgPyB2b2lkIDAgOiBpbml0Lm1ldGhvZCkgfHwgXCJHRVRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IG5ldyBSZXNwb25zZShCdWZmZXIuZnJvbShyZXNEYXRhLmJvZHksIFwiYmFzZTY0XCIpLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogcmVzRGF0YS5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogcmVzRGF0YS5zdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3BvbnNlLCBcInVybFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlLmRhdGEudXJsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0aWNHZW5lcmF0aW9uU3RvcmUuaXNTdGF0aWNHZW5lcmF0aW9uICYmIGluaXQgJiYgdHlwZW9mIGluaXQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNhY2hlIH0gPSBpbml0O1xuICAgICAgICAgICAgICAgIC8vIERlbGV0ZSBgY2FjaGVgIHByb3BlcnR5IGFzIENsb3VkZmxhcmUgV29ya2VycyB3aWxsIHRocm93IGFuIGVycm9yXG4gICAgICAgICAgICAgICAgaWYgKGlzRWRnZVJ1bnRpbWUpIGRlbGV0ZSBpbml0LmNhY2hlO1xuICAgICAgICAgICAgICAgIGlmICghc3RhdGljR2VuZXJhdGlvblN0b3JlLmZvcmNlU3RhdGljICYmIGNhY2hlID09PSBcIm5vLXN0b3JlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHluYW1pY1VzYWdlUmVhc29uID0gYG5vLXN0b3JlIGZldGNoICR7aW5wdXR9JHtzdGF0aWNHZW5lcmF0aW9uU3RvcmUudXJsUGF0aG5hbWUgPyBgICR7c3RhdGljR2VuZXJhdGlvblN0b3JlLnVybFBhdGhuYW1lfWAgOiBcIlwifWA7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGVuYWJsZWQsIHdlIHNob3VsZCBiYWlsIG91dCBvZiBzdGF0aWMgZ2VuZXJhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLnBvc3Rwb25lID09IG51bGwgPyB2b2lkIDAgOiBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucG9zdHBvbmUuY2FsbChzdGF0aWNHZW5lcmF0aW9uU3RvcmUsIGR5bmFtaWNVc2FnZVJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBQUiBpcyBub3QgZW5hYmxlZCwgb3IgUmVhY3QgcG9zdHBvbmUgaXMgbm90IGF2YWlsYWJsZSwgd2VcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIHNldCB0aGUgcmV2YWxpZGF0ZSB0byAwLlxuICAgICAgICAgICAgICAgICAgICBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucmV2YWxpZGF0ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBEeW5hbWljU2VydmVyRXJyb3IoZHluYW1pY1VzYWdlUmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLmR5bmFtaWNVc2FnZUVyciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLmR5bmFtaWNVc2FnZURlc2NyaXB0aW9uID0gZHluYW1pY1VzYWdlUmVhc29uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNOZXh0Q29uZmlnID0gXCJuZXh0XCIgaW4gaW5pdDtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG5leHQgPSB7fSB9ID0gaW5pdDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG5leHQucmV2YWxpZGF0ZSA9PT0gXCJudW1iZXJcIiAmJiAodHlwZW9mIHN0YXRpY0dlbmVyYXRpb25TdG9yZS5yZXZhbGlkYXRlID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucmV2YWxpZGF0ZSA9PT0gXCJudW1iZXJcIiAmJiBuZXh0LnJldmFsaWRhdGUgPCBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucmV2YWxpZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNHZW5lcmF0aW9uU3RvcmUuZm9yY2VEeW5hbWljICYmICFzdGF0aWNHZW5lcmF0aW9uU3RvcmUuZm9yY2VTdGF0aWMgJiYgbmV4dC5yZXZhbGlkYXRlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkeW5hbWljVXNhZ2VSZWFzb24gPSBgcmV2YWxpZGF0ZTogMCBmZXRjaCAke2lucHV0fSR7c3RhdGljR2VuZXJhdGlvblN0b3JlLnVybFBhdGhuYW1lID8gYCAke3N0YXRpY0dlbmVyYXRpb25TdG9yZS51cmxQYXRobmFtZX1gIDogXCJcIn1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZW5hYmxlZCwgd2Ugc2hvdWxkIGJhaWwgb3V0IG9mIHN0YXRpYyBnZW5lcmF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLnBvc3Rwb25lID09IG51bGwgPyB2b2lkIDAgOiBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucG9zdHBvbmUuY2FsbChzdGF0aWNHZW5lcmF0aW9uU3RvcmUsIGR5bmFtaWNVc2FnZVJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRHluYW1pY1NlcnZlckVycm9yKGR5bmFtaWNVc2FnZVJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNHZW5lcmF0aW9uU3RvcmUuZHluYW1pY1VzYWdlRXJyID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLmR5bmFtaWNVc2FnZURlc2NyaXB0aW9uID0gZHluYW1pY1VzYWdlUmVhc29uO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGljR2VuZXJhdGlvblN0b3JlLmZvcmNlU3RhdGljIHx8IG5leHQucmV2YWxpZGF0ZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLnJldmFsaWRhdGUgPSBuZXh0LnJldmFsaWRhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhhc05leHRDb25maWcpIGRlbGV0ZSBpbml0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZG9PcmlnaW5hbEZldGNoKGZhbHNlLCBjYWNoZVJlYXNvbk92ZXJyaWRlKS5maW5hbGx5KGhhbmRsZVVubG9jayk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgZ2xvYmFsVGhpcy5mZXRjaC5fX25leHRHZXRTdGF0aWNTdG9yZSA9ICgpPT57XG4gICAgICAgIHJldHVybiBzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlO1xuICAgIH07XG4gICAgZ2xvYmFsVGhpcy5mZXRjaC5fX25leHRQYXRjaGVkID0gdHJ1ZTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0Y2gtZmV0Y2guanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/server/lib/patch-fetch.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/server/lib/trace/constants.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/server/lib/trace/constants.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; +eval("/**\n * Contains predefined constants for the trace span name in next/server.\n *\n * Currently, next/server/tracer is internal implementation only for tracking\n * next.js's implementation only with known span names defined here.\n **/ // eslint typescript has a bug with TS enums\n/* eslint-disable no-shadow */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n NextVanillaSpanAllowlist: function() {\n return NextVanillaSpanAllowlist;\n },\n BaseServerSpan: function() {\n return BaseServerSpan;\n },\n LoadComponentsSpan: function() {\n return LoadComponentsSpan;\n },\n NextServerSpan: function() {\n return NextServerSpan;\n },\n NextNodeServerSpan: function() {\n return NextNodeServerSpan;\n },\n StartServerSpan: function() {\n return StartServerSpan;\n },\n RenderSpan: function() {\n return RenderSpan;\n },\n RouterSpan: function() {\n return RouterSpan;\n },\n AppRenderSpan: function() {\n return AppRenderSpan;\n },\n NodeSpan: function() {\n return NodeSpan;\n },\n AppRouteRouteHandlersSpan: function() {\n return AppRouteRouteHandlersSpan;\n },\n ResolveMetadataSpan: function() {\n return ResolveMetadataSpan;\n }\n});\nvar BaseServerSpan;\n(function(BaseServerSpan) {\n BaseServerSpan[\"handleRequest\"] = \"BaseServer.handleRequest\";\n BaseServerSpan[\"run\"] = \"BaseServer.run\";\n BaseServerSpan[\"pipe\"] = \"BaseServer.pipe\";\n BaseServerSpan[\"getStaticHTML\"] = \"BaseServer.getStaticHTML\";\n BaseServerSpan[\"render\"] = \"BaseServer.render\";\n BaseServerSpan[\"renderToResponseWithComponents\"] = \"BaseServer.renderToResponseWithComponents\";\n BaseServerSpan[\"renderToResponse\"] = \"BaseServer.renderToResponse\";\n BaseServerSpan[\"renderToHTML\"] = \"BaseServer.renderToHTML\";\n BaseServerSpan[\"renderError\"] = \"BaseServer.renderError\";\n BaseServerSpan[\"renderErrorToResponse\"] = \"BaseServer.renderErrorToResponse\";\n BaseServerSpan[\"renderErrorToHTML\"] = \"BaseServer.renderErrorToHTML\";\n BaseServerSpan[\"render404\"] = \"BaseServer.render404\";\n})(BaseServerSpan || (BaseServerSpan = {}));\nvar LoadComponentsSpan;\n(function(LoadComponentsSpan) {\n LoadComponentsSpan[\"loadDefaultErrorComponents\"] = \"LoadComponents.loadDefaultErrorComponents\";\n LoadComponentsSpan[\"loadComponents\"] = \"LoadComponents.loadComponents\";\n})(LoadComponentsSpan || (LoadComponentsSpan = {}));\nvar NextServerSpan;\n(function(NextServerSpan) {\n NextServerSpan[\"getRequestHandler\"] = \"NextServer.getRequestHandler\";\n NextServerSpan[\"getServer\"] = \"NextServer.getServer\";\n NextServerSpan[\"getServerRequestHandler\"] = \"NextServer.getServerRequestHandler\";\n NextServerSpan[\"createServer\"] = \"createServer.createServer\";\n})(NextServerSpan || (NextServerSpan = {}));\nvar NextNodeServerSpan;\n(function(NextNodeServerSpan) {\n NextNodeServerSpan[\"compression\"] = \"NextNodeServer.compression\";\n NextNodeServerSpan[\"getBuildId\"] = \"NextNodeServer.getBuildId\";\n NextNodeServerSpan[\"getLayoutOrPageModule\"] = \"NextNodeServer.getLayoutOrPageModule\";\n NextNodeServerSpan[\"generateStaticRoutes\"] = \"NextNodeServer.generateStaticRoutes\";\n NextNodeServerSpan[\"generateFsStaticRoutes\"] = \"NextNodeServer.generateFsStaticRoutes\";\n NextNodeServerSpan[\"generatePublicRoutes\"] = \"NextNodeServer.generatePublicRoutes\";\n NextNodeServerSpan[\"generateImageRoutes\"] = \"NextNodeServer.generateImageRoutes.route\";\n NextNodeServerSpan[\"sendRenderResult\"] = \"NextNodeServer.sendRenderResult\";\n NextNodeServerSpan[\"proxyRequest\"] = \"NextNodeServer.proxyRequest\";\n NextNodeServerSpan[\"runApi\"] = \"NextNodeServer.runApi\";\n NextNodeServerSpan[\"render\"] = \"NextNodeServer.render\";\n NextNodeServerSpan[\"renderHTML\"] = \"NextNodeServer.renderHTML\";\n NextNodeServerSpan[\"imageOptimizer\"] = \"NextNodeServer.imageOptimizer\";\n NextNodeServerSpan[\"getPagePath\"] = \"NextNodeServer.getPagePath\";\n NextNodeServerSpan[\"getRoutesManifest\"] = \"NextNodeServer.getRoutesManifest\";\n NextNodeServerSpan[\"findPageComponents\"] = \"NextNodeServer.findPageComponents\";\n NextNodeServerSpan[\"getFontManifest\"] = \"NextNodeServer.getFontManifest\";\n NextNodeServerSpan[\"getServerComponentManifest\"] = \"NextNodeServer.getServerComponentManifest\";\n NextNodeServerSpan[\"getRequestHandler\"] = \"NextNodeServer.getRequestHandler\";\n NextNodeServerSpan[\"renderToHTML\"] = \"NextNodeServer.renderToHTML\";\n NextNodeServerSpan[\"renderError\"] = \"NextNodeServer.renderError\";\n NextNodeServerSpan[\"renderErrorToHTML\"] = \"NextNodeServer.renderErrorToHTML\";\n NextNodeServerSpan[\"render404\"] = \"NextNodeServer.render404\";\n NextNodeServerSpan[// nested inner span, does not require parent scope name\n \"route\"] = \"route\";\n NextNodeServerSpan[\"onProxyReq\"] = \"onProxyReq\";\n NextNodeServerSpan[\"apiResolver\"] = \"apiResolver\";\n NextNodeServerSpan[\"internalFetch\"] = \"internalFetch\";\n})(NextNodeServerSpan || (NextNodeServerSpan = {}));\nvar StartServerSpan;\n(function(StartServerSpan) {\n StartServerSpan[\"startServer\"] = \"startServer.startServer\";\n})(StartServerSpan || (StartServerSpan = {}));\nvar RenderSpan;\n(function(RenderSpan) {\n RenderSpan[\"getServerSideProps\"] = \"Render.getServerSideProps\";\n RenderSpan[\"getStaticProps\"] = \"Render.getStaticProps\";\n RenderSpan[\"renderToString\"] = \"Render.renderToString\";\n RenderSpan[\"renderDocument\"] = \"Render.renderDocument\";\n RenderSpan[\"createBodyResult\"] = \"Render.createBodyResult\";\n})(RenderSpan || (RenderSpan = {}));\nvar AppRenderSpan;\n(function(AppRenderSpan) {\n AppRenderSpan[\"renderToString\"] = \"AppRender.renderToString\";\n AppRenderSpan[\"renderToReadableStream\"] = \"AppRender.renderToReadableStream\";\n AppRenderSpan[\"getBodyResult\"] = \"AppRender.getBodyResult\";\n AppRenderSpan[\"fetch\"] = \"AppRender.fetch\";\n})(AppRenderSpan || (AppRenderSpan = {}));\nvar RouterSpan;\n(function(RouterSpan) {\n RouterSpan[\"executeRoute\"] = \"Router.executeRoute\";\n})(RouterSpan || (RouterSpan = {}));\nvar NodeSpan;\n(function(NodeSpan) {\n NodeSpan[\"runHandler\"] = \"Node.runHandler\";\n})(NodeSpan || (NodeSpan = {}));\nvar AppRouteRouteHandlersSpan;\n(function(AppRouteRouteHandlersSpan) {\n AppRouteRouteHandlersSpan[\"runHandler\"] = \"AppRouteRouteHandlers.runHandler\";\n})(AppRouteRouteHandlersSpan || (AppRouteRouteHandlersSpan = {}));\nvar ResolveMetadataSpan;\n(function(ResolveMetadataSpan) {\n ResolveMetadataSpan[\"generateMetadata\"] = \"ResolveMetadata.generateMetadata\";\n ResolveMetadataSpan[\"generateViewport\"] = \"ResolveMetadata.generateViewport\";\n})(ResolveMetadataSpan || (ResolveMetadataSpan = {}));\nconst NextVanillaSpanAllowlist = [\n \"BaseServer.handleRequest\",\n \"Render.getServerSideProps\",\n \"Render.getStaticProps\",\n \"AppRender.fetch\",\n \"AppRender.getBodyResult\",\n \"Render.renderDocument\",\n \"Node.runHandler\",\n \"AppRouteRouteHandlers.runHandler\",\n \"ResolveMetadata.generateMetadata\",\n \"ResolveMetadata.generateViewport\",\n \"NextNodeServer.findPageComponents\",\n \"NextNodeServer.getLayoutOrPageModule\"\n];\n\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9saWIvdHJhY2UvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUE0QztBQUM1Qyw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBYUw7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyx3Q0FBd0M7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGdEQUFnRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHdDQUF3QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGdEQUFnRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQSxDQUFDLDBDQUEwQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsZ0NBQWdDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsc0NBQXNDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLENBQUMsZ0NBQWdDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLENBQUMsNEJBQTRCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLENBQUMsOERBQThEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxrREFBa0Q7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2RhdGEtaW5nZXN0aW9uLXRvb2wtZnJvbnRlbmQvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9saWIvdHJhY2UvY29uc3RhbnRzLmpzPzQ3ZDkiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250YWlucyBwcmVkZWZpbmVkIGNvbnN0YW50cyBmb3IgdGhlIHRyYWNlIHNwYW4gbmFtZSBpbiBuZXh0L3NlcnZlci5cbiAqXG4gKiBDdXJyZW50bHksIG5leHQvc2VydmVyL3RyYWNlciBpcyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvbmx5IGZvciB0cmFja2luZ1xuICogbmV4dC5qcydzIGltcGxlbWVudGF0aW9uIG9ubHkgd2l0aCBrbm93biBzcGFuIG5hbWVzIGRlZmluZWQgaGVyZS5cbiAqKi8gLy8gZXNsaW50IHR5cGVzY3JpcHQgaGFzIGEgYnVnIHdpdGggVFMgZW51bXNcbi8qIGVzbGludC1kaXNhYmxlIG5vLXNoYWRvdyAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIE5leHRWYW5pbGxhU3BhbkFsbG93bGlzdDogbnVsbCxcbiAgICBCYXNlU2VydmVyU3BhbjogbnVsbCxcbiAgICBMb2FkQ29tcG9uZW50c1NwYW46IG51bGwsXG4gICAgTmV4dFNlcnZlclNwYW46IG51bGwsXG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuOiBudWxsLFxuICAgIFN0YXJ0U2VydmVyU3BhbjogbnVsbCxcbiAgICBSZW5kZXJTcGFuOiBudWxsLFxuICAgIFJvdXRlclNwYW46IG51bGwsXG4gICAgQXBwUmVuZGVyU3BhbjogbnVsbCxcbiAgICBOb2RlU3BhbjogbnVsbCxcbiAgICBBcHBSb3V0ZVJvdXRlSGFuZGxlcnNTcGFuOiBudWxsLFxuICAgIFJlc29sdmVNZXRhZGF0YVNwYW46IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgTmV4dFZhbmlsbGFTcGFuQWxsb3dsaXN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5leHRWYW5pbGxhU3BhbkFsbG93bGlzdDtcbiAgICB9LFxuICAgIEJhc2VTZXJ2ZXJTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEJhc2VTZXJ2ZXJTcGFuO1xuICAgIH0sXG4gICAgTG9hZENvbXBvbmVudHNTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIExvYWRDb21wb25lbnRzU3BhbjtcbiAgICB9LFxuICAgIE5leHRTZXJ2ZXJTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5leHRTZXJ2ZXJTcGFuO1xuICAgIH0sXG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5leHROb2RlU2VydmVyU3BhbjtcbiAgICB9LFxuICAgIFN0YXJ0U2VydmVyU3BhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTdGFydFNlcnZlclNwYW47XG4gICAgfSxcbiAgICBSZW5kZXJTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJlbmRlclNwYW47XG4gICAgfSxcbiAgICBSb3V0ZXJTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJvdXRlclNwYW47XG4gICAgfSxcbiAgICBBcHBSZW5kZXJTcGFuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFwcFJlbmRlclNwYW47XG4gICAgfSxcbiAgICBOb2RlU3BhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBOb2RlU3BhbjtcbiAgICB9LFxuICAgIEFwcFJvdXRlUm91dGVIYW5kbGVyc1NwYW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQXBwUm91dGVSb3V0ZUhhbmRsZXJzU3BhbjtcbiAgICB9LFxuICAgIFJlc29sdmVNZXRhZGF0YVNwYW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUmVzb2x2ZU1ldGFkYXRhU3BhbjtcbiAgICB9XG59KTtcbnZhciBCYXNlU2VydmVyU3BhbjtcbihmdW5jdGlvbihCYXNlU2VydmVyU3Bhbikge1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wiaGFuZGxlUmVxdWVzdFwiXSA9IFwiQmFzZVNlcnZlci5oYW5kbGVSZXF1ZXN0XCI7XG4gICAgQmFzZVNlcnZlclNwYW5bXCJydW5cIl0gPSBcIkJhc2VTZXJ2ZXIucnVuXCI7XG4gICAgQmFzZVNlcnZlclNwYW5bXCJwaXBlXCJdID0gXCJCYXNlU2VydmVyLnBpcGVcIjtcbiAgICBCYXNlU2VydmVyU3BhbltcImdldFN0YXRpY0hUTUxcIl0gPSBcIkJhc2VTZXJ2ZXIuZ2V0U3RhdGljSFRNTFwiO1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wicmVuZGVyXCJdID0gXCJCYXNlU2VydmVyLnJlbmRlclwiO1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wicmVuZGVyVG9SZXNwb25zZVdpdGhDb21wb25lbnRzXCJdID0gXCJCYXNlU2VydmVyLnJlbmRlclRvUmVzcG9uc2VXaXRoQ29tcG9uZW50c1wiO1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wicmVuZGVyVG9SZXNwb25zZVwiXSA9IFwiQmFzZVNlcnZlci5yZW5kZXJUb1Jlc3BvbnNlXCI7XG4gICAgQmFzZVNlcnZlclNwYW5bXCJyZW5kZXJUb0hUTUxcIl0gPSBcIkJhc2VTZXJ2ZXIucmVuZGVyVG9IVE1MXCI7XG4gICAgQmFzZVNlcnZlclNwYW5bXCJyZW5kZXJFcnJvclwiXSA9IFwiQmFzZVNlcnZlci5yZW5kZXJFcnJvclwiO1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wicmVuZGVyRXJyb3JUb1Jlc3BvbnNlXCJdID0gXCJCYXNlU2VydmVyLnJlbmRlckVycm9yVG9SZXNwb25zZVwiO1xuICAgIEJhc2VTZXJ2ZXJTcGFuW1wicmVuZGVyRXJyb3JUb0hUTUxcIl0gPSBcIkJhc2VTZXJ2ZXIucmVuZGVyRXJyb3JUb0hUTUxcIjtcbiAgICBCYXNlU2VydmVyU3BhbltcInJlbmRlcjQwNFwiXSA9IFwiQmFzZVNlcnZlci5yZW5kZXI0MDRcIjtcbn0pKEJhc2VTZXJ2ZXJTcGFuIHx8IChCYXNlU2VydmVyU3BhbiA9IHt9KSk7XG52YXIgTG9hZENvbXBvbmVudHNTcGFuO1xuKGZ1bmN0aW9uKExvYWRDb21wb25lbnRzU3Bhbikge1xuICAgIExvYWRDb21wb25lbnRzU3BhbltcImxvYWREZWZhdWx0RXJyb3JDb21wb25lbnRzXCJdID0gXCJMb2FkQ29tcG9uZW50cy5sb2FkRGVmYXVsdEVycm9yQ29tcG9uZW50c1wiO1xuICAgIExvYWRDb21wb25lbnRzU3BhbltcImxvYWRDb21wb25lbnRzXCJdID0gXCJMb2FkQ29tcG9uZW50cy5sb2FkQ29tcG9uZW50c1wiO1xufSkoTG9hZENvbXBvbmVudHNTcGFuIHx8IChMb2FkQ29tcG9uZW50c1NwYW4gPSB7fSkpO1xudmFyIE5leHRTZXJ2ZXJTcGFuO1xuKGZ1bmN0aW9uKE5leHRTZXJ2ZXJTcGFuKSB7XG4gICAgTmV4dFNlcnZlclNwYW5bXCJnZXRSZXF1ZXN0SGFuZGxlclwiXSA9IFwiTmV4dFNlcnZlci5nZXRSZXF1ZXN0SGFuZGxlclwiO1xuICAgIE5leHRTZXJ2ZXJTcGFuW1wiZ2V0U2VydmVyXCJdID0gXCJOZXh0U2VydmVyLmdldFNlcnZlclwiO1xuICAgIE5leHRTZXJ2ZXJTcGFuW1wiZ2V0U2VydmVyUmVxdWVzdEhhbmRsZXJcIl0gPSBcIk5leHRTZXJ2ZXIuZ2V0U2VydmVyUmVxdWVzdEhhbmRsZXJcIjtcbiAgICBOZXh0U2VydmVyU3BhbltcImNyZWF0ZVNlcnZlclwiXSA9IFwiY3JlYXRlU2VydmVyLmNyZWF0ZVNlcnZlclwiO1xufSkoTmV4dFNlcnZlclNwYW4gfHwgKE5leHRTZXJ2ZXJTcGFuID0ge30pKTtcbnZhciBOZXh0Tm9kZVNlcnZlclNwYW47XG4oZnVuY3Rpb24oTmV4dE5vZGVTZXJ2ZXJTcGFuKSB7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiY29tcHJlc3Npb25cIl0gPSBcIk5leHROb2RlU2VydmVyLmNvbXByZXNzaW9uXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiZ2V0QnVpbGRJZFwiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIuZ2V0QnVpbGRJZFwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcImdldExheW91dE9yUGFnZU1vZHVsZVwiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIuZ2V0TGF5b3V0T3JQYWdlTW9kdWxlXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiZ2VuZXJhdGVTdGF0aWNSb3V0ZXNcIl0gPSBcIk5leHROb2RlU2VydmVyLmdlbmVyYXRlU3RhdGljUm91dGVzXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiZ2VuZXJhdGVGc1N0YXRpY1JvdXRlc1wiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIuZ2VuZXJhdGVGc1N0YXRpY1JvdXRlc1wiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcImdlbmVyYXRlUHVibGljUm91dGVzXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5nZW5lcmF0ZVB1YmxpY1JvdXRlc1wiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcImdlbmVyYXRlSW1hZ2VSb3V0ZXNcIl0gPSBcIk5leHROb2RlU2VydmVyLmdlbmVyYXRlSW1hZ2VSb3V0ZXMucm91dGVcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJzZW5kUmVuZGVyUmVzdWx0XCJdID0gXCJOZXh0Tm9kZVNlcnZlci5zZW5kUmVuZGVyUmVzdWx0XCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wicHJveHlSZXF1ZXN0XCJdID0gXCJOZXh0Tm9kZVNlcnZlci5wcm94eVJlcXVlc3RcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJydW5BcGlcIl0gPSBcIk5leHROb2RlU2VydmVyLnJ1bkFwaVwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcInJlbmRlclwiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIucmVuZGVyXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wicmVuZGVySFRNTFwiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIucmVuZGVySFRNTFwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcImltYWdlT3B0aW1pemVyXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5pbWFnZU9wdGltaXplclwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcImdldFBhZ2VQYXRoXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5nZXRQYWdlUGF0aFwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcImdldFJvdXRlc01hbmlmZXN0XCJdID0gXCJOZXh0Tm9kZVNlcnZlci5nZXRSb3V0ZXNNYW5pZmVzdFwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcImZpbmRQYWdlQ29tcG9uZW50c1wiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIuZmluZFBhZ2VDb21wb25lbnRzXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiZ2V0Rm9udE1hbmlmZXN0XCJdID0gXCJOZXh0Tm9kZVNlcnZlci5nZXRGb250TWFuaWZlc3RcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJnZXRTZXJ2ZXJDb21wb25lbnRNYW5pZmVzdFwiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIuZ2V0U2VydmVyQ29tcG9uZW50TWFuaWZlc3RcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJnZXRSZXF1ZXN0SGFuZGxlclwiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIuZ2V0UmVxdWVzdEhhbmRsZXJcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJyZW5kZXJUb0hUTUxcIl0gPSBcIk5leHROb2RlU2VydmVyLnJlbmRlclRvSFRNTFwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcInJlbmRlckVycm9yXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5yZW5kZXJFcnJvclwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcInJlbmRlckVycm9yVG9IVE1MXCJdID0gXCJOZXh0Tm9kZVNlcnZlci5yZW5kZXJFcnJvclRvSFRNTFwiO1xuICAgIE5leHROb2RlU2VydmVyU3BhbltcInJlbmRlcjQwNFwiXSA9IFwiTmV4dE5vZGVTZXJ2ZXIucmVuZGVyNDA0XCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuWy8vIG5lc3RlZCBpbm5lciBzcGFuLCBkb2VzIG5vdCByZXF1aXJlIHBhcmVudCBzY29wZSBuYW1lXG4gICAgXCJyb3V0ZVwiXSA9IFwicm91dGVcIjtcbiAgICBOZXh0Tm9kZVNlcnZlclNwYW5bXCJvblByb3h5UmVxXCJdID0gXCJvblByb3h5UmVxXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiYXBpUmVzb2x2ZXJcIl0gPSBcImFwaVJlc29sdmVyXCI7XG4gICAgTmV4dE5vZGVTZXJ2ZXJTcGFuW1wiaW50ZXJuYWxGZXRjaFwiXSA9IFwiaW50ZXJuYWxGZXRjaFwiO1xufSkoTmV4dE5vZGVTZXJ2ZXJTcGFuIHx8IChOZXh0Tm9kZVNlcnZlclNwYW4gPSB7fSkpO1xudmFyIFN0YXJ0U2VydmVyU3BhbjtcbihmdW5jdGlvbihTdGFydFNlcnZlclNwYW4pIHtcbiAgICBTdGFydFNlcnZlclNwYW5bXCJzdGFydFNlcnZlclwiXSA9IFwic3RhcnRTZXJ2ZXIuc3RhcnRTZXJ2ZXJcIjtcbn0pKFN0YXJ0U2VydmVyU3BhbiB8fCAoU3RhcnRTZXJ2ZXJTcGFuID0ge30pKTtcbnZhciBSZW5kZXJTcGFuO1xuKGZ1bmN0aW9uKFJlbmRlclNwYW4pIHtcbiAgICBSZW5kZXJTcGFuW1wiZ2V0U2VydmVyU2lkZVByb3BzXCJdID0gXCJSZW5kZXIuZ2V0U2VydmVyU2lkZVByb3BzXCI7XG4gICAgUmVuZGVyU3BhbltcImdldFN0YXRpY1Byb3BzXCJdID0gXCJSZW5kZXIuZ2V0U3RhdGljUHJvcHNcIjtcbiAgICBSZW5kZXJTcGFuW1wicmVuZGVyVG9TdHJpbmdcIl0gPSBcIlJlbmRlci5yZW5kZXJUb1N0cmluZ1wiO1xuICAgIFJlbmRlclNwYW5bXCJyZW5kZXJEb2N1bWVudFwiXSA9IFwiUmVuZGVyLnJlbmRlckRvY3VtZW50XCI7XG4gICAgUmVuZGVyU3BhbltcImNyZWF0ZUJvZHlSZXN1bHRcIl0gPSBcIlJlbmRlci5jcmVhdGVCb2R5UmVzdWx0XCI7XG59KShSZW5kZXJTcGFuIHx8IChSZW5kZXJTcGFuID0ge30pKTtcbnZhciBBcHBSZW5kZXJTcGFuO1xuKGZ1bmN0aW9uKEFwcFJlbmRlclNwYW4pIHtcbiAgICBBcHBSZW5kZXJTcGFuW1wicmVuZGVyVG9TdHJpbmdcIl0gPSBcIkFwcFJlbmRlci5yZW5kZXJUb1N0cmluZ1wiO1xuICAgIEFwcFJlbmRlclNwYW5bXCJyZW5kZXJUb1JlYWRhYmxlU3RyZWFtXCJdID0gXCJBcHBSZW5kZXIucmVuZGVyVG9SZWFkYWJsZVN0cmVhbVwiO1xuICAgIEFwcFJlbmRlclNwYW5bXCJnZXRCb2R5UmVzdWx0XCJdID0gXCJBcHBSZW5kZXIuZ2V0Qm9keVJlc3VsdFwiO1xuICAgIEFwcFJlbmRlclNwYW5bXCJmZXRjaFwiXSA9IFwiQXBwUmVuZGVyLmZldGNoXCI7XG59KShBcHBSZW5kZXJTcGFuIHx8IChBcHBSZW5kZXJTcGFuID0ge30pKTtcbnZhciBSb3V0ZXJTcGFuO1xuKGZ1bmN0aW9uKFJvdXRlclNwYW4pIHtcbiAgICBSb3V0ZXJTcGFuW1wiZXhlY3V0ZVJvdXRlXCJdID0gXCJSb3V0ZXIuZXhlY3V0ZVJvdXRlXCI7XG59KShSb3V0ZXJTcGFuIHx8IChSb3V0ZXJTcGFuID0ge30pKTtcbnZhciBOb2RlU3BhbjtcbihmdW5jdGlvbihOb2RlU3Bhbikge1xuICAgIE5vZGVTcGFuW1wicnVuSGFuZGxlclwiXSA9IFwiTm9kZS5ydW5IYW5kbGVyXCI7XG59KShOb2RlU3BhbiB8fCAoTm9kZVNwYW4gPSB7fSkpO1xudmFyIEFwcFJvdXRlUm91dGVIYW5kbGVyc1NwYW47XG4oZnVuY3Rpb24oQXBwUm91dGVSb3V0ZUhhbmRsZXJzU3Bhbikge1xuICAgIEFwcFJvdXRlUm91dGVIYW5kbGVyc1NwYW5bXCJydW5IYW5kbGVyXCJdID0gXCJBcHBSb3V0ZVJvdXRlSGFuZGxlcnMucnVuSGFuZGxlclwiO1xufSkoQXBwUm91dGVSb3V0ZUhhbmRsZXJzU3BhbiB8fCAoQXBwUm91dGVSb3V0ZUhhbmRsZXJzU3BhbiA9IHt9KSk7XG52YXIgUmVzb2x2ZU1ldGFkYXRhU3BhbjtcbihmdW5jdGlvbihSZXNvbHZlTWV0YWRhdGFTcGFuKSB7XG4gICAgUmVzb2x2ZU1ldGFkYXRhU3BhbltcImdlbmVyYXRlTWV0YWRhdGFcIl0gPSBcIlJlc29sdmVNZXRhZGF0YS5nZW5lcmF0ZU1ldGFkYXRhXCI7XG4gICAgUmVzb2x2ZU1ldGFkYXRhU3BhbltcImdlbmVyYXRlVmlld3BvcnRcIl0gPSBcIlJlc29sdmVNZXRhZGF0YS5nZW5lcmF0ZVZpZXdwb3J0XCI7XG59KShSZXNvbHZlTWV0YWRhdGFTcGFuIHx8IChSZXNvbHZlTWV0YWRhdGFTcGFuID0ge30pKTtcbmNvbnN0IE5leHRWYW5pbGxhU3BhbkFsbG93bGlzdCA9IFtcbiAgICBcIkJhc2VTZXJ2ZXIuaGFuZGxlUmVxdWVzdFwiLFxuICAgIFwiUmVuZGVyLmdldFNlcnZlclNpZGVQcm9wc1wiLFxuICAgIFwiUmVuZGVyLmdldFN0YXRpY1Byb3BzXCIsXG4gICAgXCJBcHBSZW5kZXIuZmV0Y2hcIixcbiAgICBcIkFwcFJlbmRlci5nZXRCb2R5UmVzdWx0XCIsXG4gICAgXCJSZW5kZXIucmVuZGVyRG9jdW1lbnRcIixcbiAgICBcIk5vZGUucnVuSGFuZGxlclwiLFxuICAgIFwiQXBwUm91dGVSb3V0ZUhhbmRsZXJzLnJ1bkhhbmRsZXJcIixcbiAgICBcIlJlc29sdmVNZXRhZGF0YS5nZW5lcmF0ZU1ldGFkYXRhXCIsXG4gICAgXCJSZXNvbHZlTWV0YWRhdGEuZ2VuZXJhdGVWaWV3cG9ydFwiLFxuICAgIFwiTmV4dE5vZGVTZXJ2ZXIuZmluZFBhZ2VDb21wb25lbnRzXCIsXG4gICAgXCJOZXh0Tm9kZVNlcnZlci5nZXRMYXlvdXRPclBhZ2VNb2R1bGVcIlxuXTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/server/lib/trace/constants.js\n"); + +/***/ }), + +/***/ "(rsc)/./node_modules/next/dist/server/lib/trace/tracer.js": +/*!***********************************************************!*\ + !*** ./node_modules/next/dist/server/lib/trace/tracer.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +eval("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getTracer: function() {\n return getTracer;\n },\n SpanStatusCode: function() {\n return SpanStatusCode;\n },\n SpanKind: function() {\n return SpanKind;\n }\n});\nconst _constants = __webpack_require__(/*! ./constants */ \"(rsc)/./node_modules/next/dist/server/lib/trace/constants.js\");\nlet api;\n// we want to allow users to use their own version of @opentelemetry/api if they\n// want to, so we try to require it first, and if it fails we fall back to the\n// version that is bundled with Next.js\n// this is because @opentelemetry/api has to be synced with the version of\n// @opentelemetry/tracing that is used, and we don't want to force users to use\n// the version that is bundled with Next.js.\n// the API is ~stable, so this should be fine\nif (false) {} else {\n try {\n api = __webpack_require__(/*! @opentelemetry/api */ \"(rsc)/./node_modules/next/dist/compiled/@opentelemetry/api/index.js\");\n } catch (err) {\n api = __webpack_require__(/*! next/dist/compiled/@opentelemetry/api */ \"(rsc)/./node_modules/next/dist/compiled/@opentelemetry/api/index.js\");\n }\n}\nconst { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api;\nconst isPromise = (p)=>{\n return p !== null && typeof p === \"object\" && typeof p.then === \"function\";\n};\nconst closeSpanWithError = (span, error)=>{\n if ((error == null ? void 0 : error.bubble) === true) {\n span.setAttribute(\"next.bubble\", true);\n } else {\n if (error) {\n span.recordException(error);\n }\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error == null ? void 0 : error.message\n });\n }\n span.end();\n};\n/** we use this map to propagate attributes from nested spans to the top span */ const rootSpanAttributesStore = new Map();\nconst rootSpanIdKey = api.createContextKey(\"next.rootSpanId\");\nlet lastSpanId = 0;\nconst getSpanId = ()=>lastSpanId++;\nclass NextTracerImpl {\n /**\n * Returns an instance to the trace with configured name.\n * Since wrap / trace can be defined in any place prior to actual trace subscriber initialization,\n * This should be lazily evaluated.\n */ getTracerInstance() {\n return trace.getTracer(\"next.js\", \"0.0.1\");\n }\n getContext() {\n return context;\n }\n getActiveScopeSpan() {\n return trace.getSpan(context == null ? void 0 : context.active());\n }\n withPropagatedContext(carrier, fn, getter) {\n const activeContext = context.active();\n if (trace.getSpanContext(activeContext)) {\n // Active span is already set, too late to propagate.\n return fn();\n }\n const remoteContext = propagation.extract(activeContext, carrier, getter);\n return context.with(remoteContext, fn);\n }\n trace(...args) {\n var _trace_getSpanContext;\n const [type, fnOrOptions, fnOrEmpty] = args;\n // coerce options form overload\n const { fn, options } = typeof fnOrOptions === \"function\" ? {\n fn: fnOrOptions,\n options: {}\n } : {\n fn: fnOrEmpty,\n options: {\n ...fnOrOptions\n }\n };\n if (!_constants.NextVanillaSpanAllowlist.includes(type) && process.env.NEXT_OTEL_VERBOSE !== \"1\" || options.hideSpan) {\n return fn();\n }\n const spanName = options.spanName ?? type;\n // Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it.\n let spanContext = this.getSpanContext((options == null ? void 0 : options.parentSpan) ?? this.getActiveScopeSpan());\n let isRootSpan = false;\n if (!spanContext) {\n spanContext = ROOT_CONTEXT;\n isRootSpan = true;\n } else if ((_trace_getSpanContext = trace.getSpanContext(spanContext)) == null ? void 0 : _trace_getSpanContext.isRemote) {\n isRootSpan = true;\n }\n const spanId = getSpanId();\n options.attributes = {\n \"next.span_name\": spanName,\n \"next.span_type\": type,\n ...options.attributes\n };\n return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.getTracerInstance().startActiveSpan(spanName, options, (span)=>{\n const onCleanup = ()=>{\n rootSpanAttributesStore.delete(spanId);\n };\n if (isRootSpan) {\n rootSpanAttributesStore.set(spanId, new Map(Object.entries(options.attributes ?? {})));\n }\n try {\n if (fn.length > 1) {\n return fn(span, (err)=>closeSpanWithError(span, err));\n }\n const result = fn(span);\n if (isPromise(result)) {\n // If there's error make sure it throws\n return result.then((res)=>{\n span.end();\n // Need to pass down the promise result,\n // it could be react stream response with error { error, stream }\n return res;\n }).catch((err)=>{\n closeSpanWithError(span, err);\n throw err;\n }).finally(onCleanup);\n } else {\n span.end();\n onCleanup();\n }\n return result;\n } catch (err) {\n closeSpanWithError(span, err);\n onCleanup();\n throw err;\n }\n }));\n }\n wrap(...args) {\n const tracer = this;\n const [name, options, fn] = args.length === 3 ? args : [\n args[0],\n {},\n args[1]\n ];\n if (!_constants.NextVanillaSpanAllowlist.includes(name) && process.env.NEXT_OTEL_VERBOSE !== \"1\") {\n return fn;\n }\n return function() {\n let optionsObj = options;\n if (typeof optionsObj === \"function\" && typeof fn === \"function\") {\n optionsObj = optionsObj.apply(this, arguments);\n }\n const lastArgId = arguments.length - 1;\n const cb = arguments[lastArgId];\n if (typeof cb === \"function\") {\n const scopeBoundCb = tracer.getContext().bind(context.active(), cb);\n return tracer.trace(name, optionsObj, (_span, done)=>{\n arguments[lastArgId] = function(err) {\n done == null ? void 0 : done(err);\n return scopeBoundCb.apply(this, arguments);\n };\n return fn.apply(this, arguments);\n });\n } else {\n return tracer.trace(name, optionsObj, ()=>fn.apply(this, arguments));\n }\n };\n }\n startSpan(...args) {\n const [type, options] = args;\n const spanContext = this.getSpanContext((options == null ? void 0 : options.parentSpan) ?? this.getActiveScopeSpan());\n return this.getTracerInstance().startSpan(type, options, spanContext);\n }\n getSpanContext(parentSpan) {\n const spanContext = parentSpan ? trace.setSpan(context.active(), parentSpan) : undefined;\n return spanContext;\n }\n getRootSpanAttributes() {\n const spanId = context.active().getValue(rootSpanIdKey);\n return rootSpanAttributesStore.get(spanId);\n }\n}\nconst getTracer = (()=>{\n const tracer = new NextTracerImpl();\n return ()=>tracer;\n})();\n\n//# sourceMappingURL=tracer.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHJzYykvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9saWIvdHJhY2UvdHJhY2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUlMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsbUJBQW1CLG1CQUFPLENBQUMsaUZBQWE7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBbUMsRUFBRSxFQUV4QyxDQUFDO0FBQ0Y7QUFDQSxjQUFjLG1CQUFPLENBQUMsK0ZBQW9CO0FBQzFDLE1BQU07QUFDTixjQUFjLG1CQUFPLENBQUMsa0hBQXVDO0FBQzdEO0FBQ0E7QUFDQSxRQUFRLHNFQUFzRTtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1R0FBdUc7QUFDdkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RTtBQUM5RTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvbGliL3RyYWNlL3RyYWNlci5qcz8yYWQ3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZ2V0VHJhY2VyOiBudWxsLFxuICAgIFNwYW5TdGF0dXNDb2RlOiBudWxsLFxuICAgIFNwYW5LaW5kOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGdldFRyYWNlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRUcmFjZXI7XG4gICAgfSxcbiAgICBTcGFuU3RhdHVzQ29kZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTcGFuU3RhdHVzQ29kZTtcbiAgICB9LFxuICAgIFNwYW5LaW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNwYW5LaW5kO1xuICAgIH1cbn0pO1xuY29uc3QgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmxldCBhcGk7XG4vLyB3ZSB3YW50IHRvIGFsbG93IHVzZXJzIHRvIHVzZSB0aGVpciBvd24gdmVyc2lvbiBvZiBAb3BlbnRlbGVtZXRyeS9hcGkgaWYgdGhleVxuLy8gd2FudCB0bywgc28gd2UgdHJ5IHRvIHJlcXVpcmUgaXQgZmlyc3QsIGFuZCBpZiBpdCBmYWlscyB3ZSBmYWxsIGJhY2sgdG8gdGhlXG4vLyB2ZXJzaW9uIHRoYXQgaXMgYnVuZGxlZCB3aXRoIE5leHQuanNcbi8vIHRoaXMgaXMgYmVjYXVzZSBAb3BlbnRlbGVtZXRyeS9hcGkgaGFzIHRvIGJlIHN5bmNlZCB3aXRoIHRoZSB2ZXJzaW9uIG9mXG4vLyBAb3BlbnRlbGVtZXRyeS90cmFjaW5nIHRoYXQgaXMgdXNlZCwgYW5kIHdlIGRvbid0IHdhbnQgdG8gZm9yY2UgdXNlcnMgdG8gdXNlXG4vLyB0aGUgdmVyc2lvbiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCBOZXh0LmpzLlxuLy8gdGhlIEFQSSBpcyB+c3RhYmxlLCBzbyB0aGlzIHNob3VsZCBiZSBmaW5lXG5pZiAocHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FID09PSBcImVkZ2VcIikge1xuICAgIGFwaSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG59IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICAgIGFwaSA9IHJlcXVpcmUoXCJAb3BlbnRlbGVtZXRyeS9hcGlcIik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGFwaSA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvQG9wZW50ZWxlbWV0cnkvYXBpXCIpO1xuICAgIH1cbn1cbmNvbnN0IHsgY29udGV4dCwgcHJvcGFnYXRpb24sIHRyYWNlLCBTcGFuU3RhdHVzQ29kZSwgU3BhbktpbmQsIFJPT1RfQ09OVEVYVCB9ID0gYXBpO1xuY29uc3QgaXNQcm9taXNlID0gKHApPT57XG4gICAgcmV0dXJuIHAgIT09IG51bGwgJiYgdHlwZW9mIHAgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHAudGhlbiA9PT0gXCJmdW5jdGlvblwiO1xufTtcbmNvbnN0IGNsb3NlU3BhbldpdGhFcnJvciA9IChzcGFuLCBlcnJvcik9PntcbiAgICBpZiAoKGVycm9yID09IG51bGwgPyB2b2lkIDAgOiBlcnJvci5idWJibGUpID09PSB0cnVlKSB7XG4gICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwibmV4dC5idWJibGVcIiwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogU3BhblN0YXR1c0NvZGUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvciA9PSBudWxsID8gdm9pZCAwIDogZXJyb3IubWVzc2FnZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3Bhbi5lbmQoKTtcbn07XG4vKiogd2UgdXNlIHRoaXMgbWFwIHRvIHByb3BhZ2F0ZSBhdHRyaWJ1dGVzIGZyb20gbmVzdGVkIHNwYW5zIHRvIHRoZSB0b3Agc3BhbiAqLyBjb25zdCByb290U3BhbkF0dHJpYnV0ZXNTdG9yZSA9IG5ldyBNYXAoKTtcbmNvbnN0IHJvb3RTcGFuSWRLZXkgPSBhcGkuY3JlYXRlQ29udGV4dEtleShcIm5leHQucm9vdFNwYW5JZFwiKTtcbmxldCBsYXN0U3BhbklkID0gMDtcbmNvbnN0IGdldFNwYW5JZCA9ICgpPT5sYXN0U3BhbklkKys7XG5jbGFzcyBOZXh0VHJhY2VySW1wbCB7XG4gICAgLyoqXG4gICAqIFJldHVybnMgYW4gaW5zdGFuY2UgdG8gdGhlIHRyYWNlIHdpdGggY29uZmlndXJlZCBuYW1lLlxuICAgKiBTaW5jZSB3cmFwIC8gdHJhY2UgY2FuIGJlIGRlZmluZWQgaW4gYW55IHBsYWNlIHByaW9yIHRvIGFjdHVhbCB0cmFjZSBzdWJzY3JpYmVyIGluaXRpYWxpemF0aW9uLFxuICAgKiBUaGlzIHNob3VsZCBiZSBsYXppbHkgZXZhbHVhdGVkLlxuICAgKi8gZ2V0VHJhY2VySW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0cmFjZS5nZXRUcmFjZXIoXCJuZXh0LmpzXCIsIFwiMC4wLjFcIik7XG4gICAgfVxuICAgIGdldENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cbiAgICBnZXRBY3RpdmVTY29wZVNwYW4oKSB7XG4gICAgICAgIHJldHVybiB0cmFjZS5nZXRTcGFuKGNvbnRleHQgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRleHQuYWN0aXZlKCkpO1xuICAgIH1cbiAgICB3aXRoUHJvcGFnYXRlZENvbnRleHQoY2FycmllciwgZm4sIGdldHRlcikge1xuICAgICAgICBjb25zdCBhY3RpdmVDb250ZXh0ID0gY29udGV4dC5hY3RpdmUoKTtcbiAgICAgICAgaWYgKHRyYWNlLmdldFNwYW5Db250ZXh0KGFjdGl2ZUNvbnRleHQpKSB7XG4gICAgICAgICAgICAvLyBBY3RpdmUgc3BhbiBpcyBhbHJlYWR5IHNldCwgdG9vIGxhdGUgdG8gcHJvcGFnYXRlLlxuICAgICAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVtb3RlQ29udGV4dCA9IHByb3BhZ2F0aW9uLmV4dHJhY3QoYWN0aXZlQ29udGV4dCwgY2FycmllciwgZ2V0dGVyKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQud2l0aChyZW1vdGVDb250ZXh0LCBmbik7XG4gICAgfVxuICAgIHRyYWNlKC4uLmFyZ3MpIHtcbiAgICAgICAgdmFyIF90cmFjZV9nZXRTcGFuQ29udGV4dDtcbiAgICAgICAgY29uc3QgW3R5cGUsIGZuT3JPcHRpb25zLCBmbk9yRW1wdHldID0gYXJncztcbiAgICAgICAgLy8gY29lcmNlIG9wdGlvbnMgZm9ybSBvdmVybG9hZFxuICAgICAgICBjb25zdCB7IGZuLCBvcHRpb25zIH0gPSB0eXBlb2YgZm5Pck9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIiA/IHtcbiAgICAgICAgICAgIGZuOiBmbk9yT3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnM6IHt9XG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgICBmbjogZm5PckVtcHR5LFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIC4uLmZuT3JPcHRpb25zXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICghX2NvbnN0YW50cy5OZXh0VmFuaWxsYVNwYW5BbGxvd2xpc3QuaW5jbHVkZXModHlwZSkgJiYgcHJvY2Vzcy5lbnYuTkVYVF9PVEVMX1ZFUkJPU0UgIT09IFwiMVwiIHx8IG9wdGlvbnMuaGlkZVNwYW4pIHtcbiAgICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNwYW5OYW1lID0gb3B0aW9ucy5zcGFuTmFtZSA/PyB0eXBlO1xuICAgICAgICAvLyBUcnlpbmcgdG8gZ2V0IGFjdGl2ZSBzY29wZWQgc3BhbiB0byBhc3NpZ24gcGFyZW50LiBJZiBvcHRpb24gc3BlY2lmaWVzIHBhcmVudCBzcGFuIG1hbnVhbGx5LCB3aWxsIHRyeSB0byB1c2UgaXQuXG4gICAgICAgIGxldCBzcGFuQ29udGV4dCA9IHRoaXMuZ2V0U3BhbkNvbnRleHQoKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucGFyZW50U3BhbikgPz8gdGhpcy5nZXRBY3RpdmVTY29wZVNwYW4oKSk7XG4gICAgICAgIGxldCBpc1Jvb3RTcGFuID0gZmFsc2U7XG4gICAgICAgIGlmICghc3BhbkNvbnRleHQpIHtcbiAgICAgICAgICAgIHNwYW5Db250ZXh0ID0gUk9PVF9DT05URVhUO1xuICAgICAgICAgICAgaXNSb290U3BhbiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoKF90cmFjZV9nZXRTcGFuQ29udGV4dCA9IHRyYWNlLmdldFNwYW5Db250ZXh0KHNwYW5Db250ZXh0KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90cmFjZV9nZXRTcGFuQ29udGV4dC5pc1JlbW90ZSkge1xuICAgICAgICAgICAgaXNSb290U3BhbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3BhbklkID0gZ2V0U3BhbklkKCk7XG4gICAgICAgIG9wdGlvbnMuYXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIFwibmV4dC5zcGFuX25hbWVcIjogc3Bhbk5hbWUsXG4gICAgICAgICAgICBcIm5leHQuc3Bhbl90eXBlXCI6IHR5cGUsXG4gICAgICAgICAgICAuLi5vcHRpb25zLmF0dHJpYnV0ZXNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQud2l0aChzcGFuQ29udGV4dC5zZXRWYWx1ZShyb290U3BhbklkS2V5LCBzcGFuSWQpLCAoKT0+dGhpcy5nZXRUcmFjZXJJbnN0YW5jZSgpLnN0YXJ0QWN0aXZlU3BhbihzcGFuTmFtZSwgb3B0aW9ucywgKHNwYW4pPT57XG4gICAgICAgICAgICAgICAgY29uc3Qgb25DbGVhbnVwID0gKCk9PntcbiAgICAgICAgICAgICAgICAgICAgcm9vdFNwYW5BdHRyaWJ1dGVzU3RvcmUuZGVsZXRlKHNwYW5JZCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoaXNSb290U3Bhbikge1xuICAgICAgICAgICAgICAgICAgICByb290U3BhbkF0dHJpYnV0ZXNTdG9yZS5zZXQoc3BhbklkLCBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuYXR0cmlidXRlcyA/PyB7fSkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbihzcGFuLCAoZXJyKT0+Y2xvc2VTcGFuV2l0aEVycm9yKHNwYW4sIGVycikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuKHNwYW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgZXJyb3IgbWFrZSBzdXJlIGl0IHRocm93c1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXMpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIHBhc3MgZG93biB0aGUgcHJvbWlzZSByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgY291bGQgYmUgcmVhY3Qgc3RyZWFtIHJlc3BvbnNlIHdpdGggZXJyb3IgeyBlcnJvciwgc3RyZWFtIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycik9PntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVNwYW5XaXRoRXJyb3Ioc3BhbiwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KG9uQ2xlYW51cCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGVhbnVwKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VTcGFuV2l0aEVycm9yKHNwYW4sIGVycik7XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgIH1cbiAgICB3cmFwKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgdHJhY2VyID0gdGhpcztcbiAgICAgICAgY29uc3QgW25hbWUsIG9wdGlvbnMsIGZuXSA9IGFyZ3MubGVuZ3RoID09PSAzID8gYXJncyA6IFtcbiAgICAgICAgICAgIGFyZ3NbMF0sXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIGFyZ3NbMV1cbiAgICAgICAgXTtcbiAgICAgICAgaWYgKCFfY29uc3RhbnRzLk5leHRWYW5pbGxhU3BhbkFsbG93bGlzdC5pbmNsdWRlcyhuYW1lKSAmJiBwcm9jZXNzLmVudi5ORVhUX09URUxfVkVSQk9TRSAhPT0gXCIxXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBsZXQgb3B0aW9uc09iaiA9IG9wdGlvbnM7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnNPYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgZm4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNPYmogPSBvcHRpb25zT2JqLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYXN0QXJnSWQgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gYXJndW1lbnRzW2xhc3RBcmdJZF07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY29wZUJvdW5kQ2IgPSB0cmFjZXIuZ2V0Q29udGV4dCgpLmJpbmQoY29udGV4dC5hY3RpdmUoKSwgY2IpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cmFjZXIudHJhY2UobmFtZSwgb3B0aW9uc09iaiwgKF9zcGFuLCBkb25lKT0+e1xuICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbbGFzdEFyZ0lkXSA9IGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9PSBudWxsID8gdm9pZCAwIDogZG9uZShlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3BlQm91bmRDYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyYWNlci50cmFjZShuYW1lLCBvcHRpb25zT2JqLCAoKT0+Zm4uYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXJ0U3BhbiguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IFt0eXBlLCBvcHRpb25zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gdGhpcy5nZXRTcGFuQ29udGV4dCgob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5wYXJlbnRTcGFuKSA/PyB0aGlzLmdldEFjdGl2ZVNjb3BlU3BhbigpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhY2VySW5zdGFuY2UoKS5zdGFydFNwYW4odHlwZSwgb3B0aW9ucywgc3BhbkNvbnRleHQpO1xuICAgIH1cbiAgICBnZXRTcGFuQ29udGV4dChwYXJlbnRTcGFuKSB7XG4gICAgICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gcGFyZW50U3BhbiA/IHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgcGFyZW50U3BhbikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzcGFuQ29udGV4dDtcbiAgICB9XG4gICAgZ2V0Um9vdFNwYW5BdHRyaWJ1dGVzKCkge1xuICAgICAgICBjb25zdCBzcGFuSWQgPSBjb250ZXh0LmFjdGl2ZSgpLmdldFZhbHVlKHJvb3RTcGFuSWRLZXkpO1xuICAgICAgICByZXR1cm4gcm9vdFNwYW5BdHRyaWJ1dGVzU3RvcmUuZ2V0KHNwYW5JZCk7XG4gICAgfVxufVxuY29uc3QgZ2V0VHJhY2VyID0gKCgpPT57XG4gICAgY29uc3QgdHJhY2VyID0gbmV3IE5leHRUcmFjZXJJbXBsKCk7XG4gICAgcmV0dXJuICgpPT50cmFjZXI7XG59KSgpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFjZXIuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(rsc)/./node_modules/next/dist/server/lib/trace/tracer.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/proxy-from-env.js b/frontend/.next/server/vendor-chunks/proxy-from-env.js new file mode 100644 index 000000000..33fac018e --- /dev/null +++ b/frontend/.next/server/vendor-chunks/proxy-from-env.js @@ -0,0 +1,25 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/proxy-from-env"; +exports.ids = ["vendor-chunks/proxy-from-env"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/proxy-from-env/index.js": +/*!**********************************************!*\ + !*** ./node_modules/proxy-from-env/index.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +eval("\n\nvar parseUrl = (__webpack_require__(/*! url */ \"url\").parse);\n\nvar DEFAULT_PORTS = {\n ftp: 21,\n gopher: 70,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443,\n};\n\nvar stringEndsWith = String.prototype.endsWith || function(s) {\n return s.length <= this.length &&\n this.indexOf(s, this.length - s.length) !== -1;\n};\n\n/**\n * @param {string|object} url - The URL, or the result from url.parse.\n * @return {string} The URL of the proxy that should handle the request to the\n * given URL. If no proxy is set, this will be an empty string.\n */\nfunction getProxyForUrl(url) {\n var parsedUrl = typeof url === 'string' ? parseUrl(url) : url || {};\n var proto = parsedUrl.protocol;\n var hostname = parsedUrl.host;\n var port = parsedUrl.port;\n if (typeof hostname !== 'string' || !hostname || typeof proto !== 'string') {\n return ''; // Don't proxy URLs without a valid scheme or host.\n }\n\n proto = proto.split(':', 1)[0];\n // Stripping ports in this way instead of using parsedUrl.hostname to make\n // sure that the brackets around IPv6 addresses are kept.\n hostname = hostname.replace(/:\\d*$/, '');\n port = parseInt(port) || DEFAULT_PORTS[proto] || 0;\n if (!shouldProxy(hostname, port)) {\n return ''; // Don't proxy URLs that match NO_PROXY.\n }\n\n var proxy =\n getEnv('npm_config_' + proto + '_proxy') ||\n getEnv(proto + '_proxy') ||\n getEnv('npm_config_proxy') ||\n getEnv('all_proxy');\n if (proxy && proxy.indexOf('://') === -1) {\n // Missing scheme in proxy, default to the requested URL's scheme.\n proxy = proto + '://' + proxy;\n }\n return proxy;\n}\n\n/**\n * Determines whether a given URL should be proxied.\n *\n * @param {string} hostname - The host name of the URL.\n * @param {number} port - The effective port of the URL.\n * @returns {boolean} Whether the given URL should be proxied.\n * @private\n */\nfunction shouldProxy(hostname, port) {\n var NO_PROXY =\n (getEnv('npm_config_no_proxy') || getEnv('no_proxy')).toLowerCase();\n if (!NO_PROXY) {\n return true; // Always proxy if NO_PROXY is not set.\n }\n if (NO_PROXY === '*') {\n return false; // Never proxy if wildcard is set.\n }\n\n return NO_PROXY.split(/[,\\s]/).every(function(proxy) {\n if (!proxy) {\n return true; // Skip zero-length hosts.\n }\n var parsedProxy = proxy.match(/^(.+):(\\d+)$/);\n var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;\n var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;\n if (parsedProxyPort && parsedProxyPort !== port) {\n return true; // Skip if ports don't match.\n }\n\n if (!/^[.*]/.test(parsedProxyHostname)) {\n // No wildcards, so stop proxying if there is an exact match.\n return hostname !== parsedProxyHostname;\n }\n\n if (parsedProxyHostname.charAt(0) === '*') {\n // Remove leading wildcard.\n parsedProxyHostname = parsedProxyHostname.slice(1);\n }\n // Stop proxying if the hostname ends with the no_proxy host.\n return !stringEndsWith.call(hostname, parsedProxyHostname);\n });\n}\n\n/**\n * Get the value for an environment variable.\n *\n * @param {string} key - The name of the environment variable.\n * @return {string} The value of the environment variable.\n * @private\n */\nfunction getEnv(key) {\n return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || '';\n}\n\nexports.getProxyForUrl = getProxyForUrl;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvcHJveHktZnJvbS1lbnYvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsZUFBZSw2Q0FBb0I7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLGVBQWU7QUFDMUIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZGF0YS1pbmdlc3Rpb24tdG9vbC1mcm9udGVuZC8uL25vZGVfbW9kdWxlcy9wcm94eS1mcm9tLWVudi9pbmRleC5qcz8zOTk1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG5cbnZhciBERUZBVUxUX1BPUlRTID0ge1xuICBmdHA6IDIxLFxuICBnb3BoZXI6IDcwLFxuICBodHRwOiA4MCxcbiAgaHR0cHM6IDQ0MyxcbiAgd3M6IDgwLFxuICB3c3M6IDQ0Myxcbn07XG5cbnZhciBzdHJpbmdFbmRzV2l0aCA9IFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggfHwgZnVuY3Rpb24ocykge1xuICByZXR1cm4gcy5sZW5ndGggPD0gdGhpcy5sZW5ndGggJiZcbiAgICB0aGlzLmluZGV4T2YocywgdGhpcy5sZW5ndGggLSBzLmxlbmd0aCkgIT09IC0xO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHVybCAtIFRoZSBVUkwsIG9yIHRoZSByZXN1bHQgZnJvbSB1cmwucGFyc2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVUkwgb2YgdGhlIHByb3h5IHRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgcmVxdWVzdCB0byB0aGVcbiAqICBnaXZlbiBVUkwuIElmIG5vIHByb3h5IGlzIHNldCwgdGhpcyB3aWxsIGJlIGFuIGVtcHR5IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJveHlGb3JVcmwodXJsKSB7XG4gIHZhciBwYXJzZWRVcmwgPSB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyA/IHBhcnNlVXJsKHVybCkgOiB1cmwgfHwge307XG4gIHZhciBwcm90byA9IHBhcnNlZFVybC5wcm90b2NvbDtcbiAgdmFyIGhvc3RuYW1lID0gcGFyc2VkVXJsLmhvc3Q7XG4gIHZhciBwb3J0ID0gcGFyc2VkVXJsLnBvcnQ7XG4gIGlmICh0eXBlb2YgaG9zdG5hbWUgIT09ICdzdHJpbmcnIHx8ICFob3N0bmFtZSB8fCB0eXBlb2YgcHJvdG8gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICcnOyAgLy8gRG9uJ3QgcHJveHkgVVJMcyB3aXRob3V0IGEgdmFsaWQgc2NoZW1lIG9yIGhvc3QuXG4gIH1cblxuICBwcm90byA9IHByb3RvLnNwbGl0KCc6JywgMSlbMF07XG4gIC8vIFN0cmlwcGluZyBwb3J0cyBpbiB0aGlzIHdheSBpbnN0ZWFkIG9mIHVzaW5nIHBhcnNlZFVybC5ob3N0bmFtZSB0byBtYWtlXG4gIC8vIHN1cmUgdGhhdCB0aGUgYnJhY2tldHMgYXJvdW5kIElQdjYgYWRkcmVzc2VzIGFyZSBrZXB0LlxuICBob3N0bmFtZSA9IGhvc3RuYW1lLnJlcGxhY2UoLzpcXGQqJC8sICcnKTtcbiAgcG9ydCA9IHBhcnNlSW50KHBvcnQpIHx8IERFRkFVTFRfUE9SVFNbcHJvdG9dIHx8IDA7XG4gIGlmICghc2hvdWxkUHJveHkoaG9zdG5hbWUsIHBvcnQpKSB7XG4gICAgcmV0dXJuICcnOyAgLy8gRG9uJ3QgcHJveHkgVVJMcyB0aGF0IG1hdGNoIE5PX1BST1hZLlxuICB9XG5cbiAgdmFyIHByb3h5ID1cbiAgICBnZXRFbnYoJ25wbV9jb25maWdfJyArIHByb3RvICsgJ19wcm94eScpIHx8XG4gICAgZ2V0RW52KHByb3RvICsgJ19wcm94eScpIHx8XG4gICAgZ2V0RW52KCducG1fY29uZmlnX3Byb3h5JykgfHxcbiAgICBnZXRFbnYoJ2FsbF9wcm94eScpO1xuICBpZiAocHJveHkgJiYgcHJveHkuaW5kZXhPZignOi8vJykgPT09IC0xKSB7XG4gICAgLy8gTWlzc2luZyBzY2hlbWUgaW4gcHJveHksIGRlZmF1bHQgdG8gdGhlIHJlcXVlc3RlZCBVUkwncyBzY2hlbWUuXG4gICAgcHJveHkgPSBwcm90byArICc6Ly8nICsgcHJveHk7XG4gIH1cbiAgcmV0dXJuIHByb3h5O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGdpdmVuIFVSTCBzaG91bGQgYmUgcHJveGllZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9zdG5hbWUgLSBUaGUgaG9zdCBuYW1lIG9mIHRoZSBVUkwuXG4gKiBAcGFyYW0ge251bWJlcn0gcG9ydCAtIFRoZSBlZmZlY3RpdmUgcG9ydCBvZiB0aGUgVVJMLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGdpdmVuIFVSTCBzaG91bGQgYmUgcHJveGllZC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFByb3h5KGhvc3RuYW1lLCBwb3J0KSB7XG4gIHZhciBOT19QUk9YWSA9XG4gICAgKGdldEVudignbnBtX2NvbmZpZ19ub19wcm94eScpIHx8IGdldEVudignbm9fcHJveHknKSkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFOT19QUk9YWSkge1xuICAgIHJldHVybiB0cnVlOyAgLy8gQWx3YXlzIHByb3h5IGlmIE5PX1BST1hZIGlzIG5vdCBzZXQuXG4gIH1cbiAgaWYgKE5PX1BST1hZID09PSAnKicpIHtcbiAgICByZXR1cm4gZmFsc2U7ICAvLyBOZXZlciBwcm94eSBpZiB3aWxkY2FyZCBpcyBzZXQuXG4gIH1cblxuICByZXR1cm4gTk9fUFJPWFkuc3BsaXQoL1ssXFxzXS8pLmV2ZXJ5KGZ1bmN0aW9uKHByb3h5KSB7XG4gICAgaWYgKCFwcm94eSkge1xuICAgICAgcmV0dXJuIHRydWU7ICAvLyBTa2lwIHplcm8tbGVuZ3RoIGhvc3RzLlxuICAgIH1cbiAgICB2YXIgcGFyc2VkUHJveHkgPSBwcm94eS5tYXRjaCgvXiguKyk6KFxcZCspJC8pO1xuICAgIHZhciBwYXJzZWRQcm94eUhvc3RuYW1lID0gcGFyc2VkUHJveHkgPyBwYXJzZWRQcm94eVsxXSA6IHByb3h5O1xuICAgIHZhciBwYXJzZWRQcm94eVBvcnQgPSBwYXJzZWRQcm94eSA/IHBhcnNlSW50KHBhcnNlZFByb3h5WzJdKSA6IDA7XG4gICAgaWYgKHBhcnNlZFByb3h5UG9ydCAmJiBwYXJzZWRQcm94eVBvcnQgIT09IHBvcnQpIHtcbiAgICAgIHJldHVybiB0cnVlOyAgLy8gU2tpcCBpZiBwb3J0cyBkb24ndCBtYXRjaC5cbiAgICB9XG5cbiAgICBpZiAoIS9eWy4qXS8udGVzdChwYXJzZWRQcm94eUhvc3RuYW1lKSkge1xuICAgICAgLy8gTm8gd2lsZGNhcmRzLCBzbyBzdG9wIHByb3h5aW5nIGlmIHRoZXJlIGlzIGFuIGV4YWN0IG1hdGNoLlxuICAgICAgcmV0dXJuIGhvc3RuYW1lICE9PSBwYXJzZWRQcm94eUhvc3RuYW1lO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWRQcm94eUhvc3RuYW1lLmNoYXJBdCgwKSA9PT0gJyonKSB7XG4gICAgICAvLyBSZW1vdmUgbGVhZGluZyB3aWxkY2FyZC5cbiAgICAgIHBhcnNlZFByb3h5SG9zdG5hbWUgPSBwYXJzZWRQcm94eUhvc3RuYW1lLnNsaWNlKDEpO1xuICAgIH1cbiAgICAvLyBTdG9wIHByb3h5aW5nIGlmIHRoZSBob3N0bmFtZSBlbmRzIHdpdGggdGhlIG5vX3Byb3h5IGhvc3QuXG4gICAgcmV0dXJuICFzdHJpbmdFbmRzV2l0aC5jYWxsKGhvc3RuYW1lLCBwYXJzZWRQcm94eUhvc3RuYW1lKTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldEVudihrZXkpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52W2tleS50b0xvd2VyQ2FzZSgpXSB8fCBwcm9jZXNzLmVudltrZXkudG9VcHBlckNhc2UoKV0gfHwgJyc7XG59XG5cbmV4cG9ydHMuZ2V0UHJveHlGb3JVcmwgPSBnZXRQcm94eUZvclVybDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/proxy-from-env/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/vendor-chunks/supports-color.js b/frontend/.next/server/vendor-chunks/supports-color.js new file mode 100644 index 000000000..7280f8632 --- /dev/null +++ b/frontend/.next/server/vendor-chunks/supports-color.js @@ -0,0 +1,25 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +exports.id = "vendor-chunks/supports-color"; +exports.ids = ["vendor-chunks/supports-color"]; +exports.modules = { + +/***/ "(ssr)/./node_modules/supports-color/index.js": +/*!**********************************************!*\ + !*** ./node_modules/supports-color/index.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("\nconst os = __webpack_require__(/*! os */ \"os\");\nconst tty = __webpack_require__(/*! tty */ \"tty\");\nconst hasFlag = __webpack_require__(/*! has-flag */ \"(ssr)/./node_modules/has-flag/index.js\");\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYixXQUFXLG1CQUFPLENBQUMsY0FBSTtBQUN2QixZQUFZLG1CQUFPLENBQUMsZ0JBQUs7QUFDekIsZ0JBQWdCLG1CQUFPLENBQUMsd0RBQVU7O0FBRWxDLE9BQU8sS0FBSzs7QUFFWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLEdBQUc7QUFDcEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kYXRhLWluZ2VzdGlvbi10b29sLWZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzPzIyYmYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG5jb25zdCBoYXNGbGFnID0gcmVxdWlyZSgnaGFzLWZsYWcnKTtcblxuY29uc3Qge2Vudn0gPSBwcm9jZXNzO1xuXG5sZXQgZm9yY2VDb2xvcjtcbmlmIChoYXNGbGFnKCduby1jb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ25vLWNvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWZhbHNlJykgfHxcblx0aGFzRmxhZygnY29sb3I9bmV2ZXInKSkge1xuXHRmb3JjZUNvbG9yID0gMDtcbn0gZWxzZSBpZiAoaGFzRmxhZygnY29sb3InKSB8fFxuXHRoYXNGbGFnKCdjb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj10cnVlJykgfHxcblx0aGFzRmxhZygnY29sb3I9YWx3YXlzJykpIHtcblx0Zm9yY2VDb2xvciA9IDE7XG59XG5cbmlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRpZiAoZW52LkZPUkNFX0NPTE9SID09PSAndHJ1ZScpIHtcblx0XHRmb3JjZUNvbG9yID0gMTtcblx0fSBlbHNlIGlmIChlbnYuRk9SQ0VfQ09MT1IgPT09ICdmYWxzZScpIHtcblx0XHRmb3JjZUNvbG9yID0gMDtcblx0fSBlbHNlIHtcblx0XHRmb3JjZUNvbG9yID0gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCA/IDEgOiBNYXRoLm1pbihwYXJzZUludChlbnYuRk9SQ0VfQ09MT1IsIDEwKSwgMyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpIHtcblx0aWYgKGxldmVsID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsZXZlbCxcblx0XHRoYXNCYXNpYzogdHJ1ZSxcblx0XHRoYXMyNTY6IGxldmVsID49IDIsXG5cdFx0aGFzMTZtOiBsZXZlbCA+PSAzXG5cdH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQ29sb3IoaGF2ZVN0cmVhbSwgc3RyZWFtSXNUVFkpIHtcblx0aWYgKGZvcmNlQ29sb3IgPT09IDApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0xNm0nKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPWZ1bGwnKSB8fFxuXHRcdGhhc0ZsYWcoJ2NvbG9yPXRydWVjb2xvcicpKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MjU2JykpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmIChoYXZlU3RyZWFtICYmICFzdHJlYW1Jc1RUWSAmJiBmb3JjZUNvbG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgfHwgMDtcblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTA1ODYgaXMgdGhlIGZpcnN0IFdpbmRvd3MgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuXG5cdFx0Ly8gV2luZG93cyAxMCBidWlsZCAxNDkzMSBpcyB0aGUgZmlyc3QgcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVswXSkgPj0gMTAgJiZcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMl0pID49IDEwNTg2XG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gTnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTQ5MzEgPyAzIDogMjtcblx0XHR9XG5cblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ0knIGluIGVudikge1xuXHRcdGlmIChbJ1RSQVZJUycsICdDSVJDTEVDSScsICdBUFBWRVlPUicsICdHSVRMQUJfQ0knLCAnR0lUSFVCX0FDVElPTlMnLCAnQlVJTERLSVRFJ10uc29tZShzaWduID0+IHNpZ24gaW4gZW52KSB8fCBlbnYuQ0lfTkFNRSA9PT0gJ2NvZGVzaGlwJykge1xuXHRcdFx0cmV0dXJuIDE7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1pbjtcblx0fVxuXG5cdGlmICgnVEVBTUNJVFlfVkVSU0lPTicgaW4gZW52KSB7XG5cdFx0cmV0dXJuIC9eKDlcXC4oMCpbMS05XVxcZCopXFwufFxcZHsyLH1cXC4pLy50ZXN0KGVudi5URUFNQ0lUWV9WRVJTSU9OKSA/IDEgOiAwO1xuXHR9XG5cblx0aWYgKGVudi5DT0xPUlRFUk0gPT09ICd0cnVlY29sb3InKSB7XG5cdFx0cmV0dXJuIDM7XG5cdH1cblxuXHRpZiAoJ1RFUk1fUFJPR1JBTScgaW4gZW52KSB7XG5cdFx0Y29uc3QgdmVyc2lvbiA9IHBhcnNlSW50KChlbnYuVEVSTV9QUk9HUkFNX1ZFUlNJT04gfHwgJycpLnNwbGl0KCcuJylbMF0sIDEwKTtcblxuXHRcdHN3aXRjaCAoZW52LlRFUk1fUFJPR1JBTSkge1xuXHRcdFx0Y2FzZSAnaVRlcm0uYXBwJzpcblx0XHRcdFx0cmV0dXJuIHZlcnNpb24gPj0gMyA/IDMgOiAyO1xuXHRcdFx0Y2FzZSAnQXBwbGVfVGVybWluYWwnOlxuXHRcdFx0XHRyZXR1cm4gMjtcblx0XHRcdC8vIE5vIGRlZmF1bHRcblx0XHR9XG5cdH1cblxuXHRpZiAoLy0yNTYoY29sb3IpPyQvaS50ZXN0KGVudi5URVJNKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKC9ec2NyZWVufF54dGVybXxednQxMDB8XnZ0MjIwfF5yeHZ0fGNvbG9yfGFuc2l8Y3lnd2lufGxpbnV4L2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdGlmICgnQ09MT1JURVJNJyBpbiBlbnYpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxuXG5cdHJldHVybiBtaW47XG59XG5cbmZ1bmN0aW9uIGdldFN1cHBvcnRMZXZlbChzdHJlYW0pIHtcblx0Y29uc3QgbGV2ZWwgPSBzdXBwb3J0c0NvbG9yKHN0cmVhbSwgc3RyZWFtICYmIHN0cmVhbS5pc1RUWSk7XG5cdHJldHVybiB0cmFuc2xhdGVMZXZlbChsZXZlbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRzdXBwb3J0c0NvbG9yOiBnZXRTdXBwb3J0TGV2ZWwsXG5cdHN0ZG91dDogdHJhbnNsYXRlTGV2ZWwoc3VwcG9ydHNDb2xvcih0cnVlLCB0dHkuaXNhdHR5KDEpKSksXG5cdHN0ZGVycjogdHJhbnNsYXRlTGV2ZWwoc3VwcG9ydHNDb2xvcih0cnVlLCB0dHkuaXNhdHR5KDIpKSlcbn07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/supports-color/index.js\n"); + +/***/ }) + +}; +; \ No newline at end of file diff --git a/frontend/.next/server/webpack-runtime.js b/frontend/.next/server/webpack-runtime.js new file mode 100644 index 000000000..178e881ab --- /dev/null +++ b/frontend/.next/server/webpack-runtime.js @@ -0,0 +1,215 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({}); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ id: moduleId, +/******/ loaded: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ var threw = true; +/******/ try { +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ threw = false; +/******/ } finally { +/******/ if(threw) delete __webpack_module_cache__[moduleId]; +/******/ } +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat get default export */ +/******/ (() => { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = (module) => { +/******/ var getter = module && module.__esModule ? +/******/ () => (module['default']) : +/******/ () => (module); +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/create fake namespace object */ +/******/ (() => { +/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__); +/******/ var leafPrototypes; +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 16: return value when it's Promise-like +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = this(value); +/******/ if(mode & 8) return value; +/******/ if(typeof value === 'object' && value) { +/******/ if((mode & 4) && value.__esModule) return value; +/******/ if((mode & 16) && typeof value.then === 'function') return value; +/******/ } +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ var def = {}; +/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)]; +/******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) { +/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key]))); +/******/ } +/******/ def['default'] = () => (value); +/******/ __webpack_require__.d(ns, def); +/******/ return ns; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ (() => { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = (chunkId) => { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ (() => { +/******/ // This function allow to reference async chunks and sibling chunks for the entrypoint +/******/ __webpack_require__.u = (chunkId) => { +/******/ // return url for filenames based on template +/******/ return "" + chunkId + ".js"; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/getFullHash */ +/******/ (() => { +/******/ __webpack_require__.h = () => ("0dac94f709321a03") +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/node module decorator */ +/******/ (() => { +/******/ __webpack_require__.nmd = (module) => { +/******/ module.paths = []; +/******/ if (!module.children) module.children = []; +/******/ return module; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/startup entrypoint */ +/******/ (() => { +/******/ __webpack_require__.X = (result, chunkIds, fn) => { +/******/ // arguments: chunkIds, moduleId are deprecated +/******/ var moduleId = chunkIds; +/******/ if(!fn) chunkIds = result, fn = () => (__webpack_require__(__webpack_require__.s = moduleId)); +/******/ chunkIds.map(__webpack_require__.e, __webpack_require__) +/******/ var r = fn(); +/******/ return r === undefined ? result : r; +/******/ } +/******/ })(); +/******/ +/******/ /* webpack/runtime/require chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded chunks +/******/ // "1" means "loaded", otherwise not loaded yet +/******/ var installedChunks = { +/******/ "webpack-runtime": 1 +/******/ }; +/******/ +/******/ // no on chunks loaded +/******/ +/******/ var installChunk = (chunk) => { +/******/ var moreModules = chunk.modules, chunkIds = chunk.ids, runtime = chunk.runtime; +/******/ for(var moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) runtime(__webpack_require__); +/******/ for(var i = 0; i < chunkIds.length; i++) +/******/ installedChunks[chunkIds[i]] = 1; +/******/ +/******/ }; +/******/ +/******/ // require() chunk loading for javascript +/******/ __webpack_require__.f.require = (chunkId, promises) => { +/******/ // "1" is the signal for "already loaded" +/******/ if(!installedChunks[chunkId]) { +/******/ if("webpack-runtime" != chunkId) { +/******/ installChunk(require("./" + __webpack_require__.u(chunkId))); +/******/ } else installedChunks[chunkId] = 1; +/******/ } +/******/ }; +/******/ +/******/ module.exports = __webpack_require__; +/******/ __webpack_require__.C = installChunk; +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ +/******/ })() +; \ No newline at end of file diff --git a/frontend/.next/static/chunks/_error.js b/frontend/.next/static/chunks/_error.js new file mode 100644 index 000000000..be07b1dd6 --- /dev/null +++ b/frontend/.next/static/chunks/_error.js @@ -0,0 +1,28 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["/_error"],{ + +/***/ "./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&page=%2F_error!": +/*!************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&page=%2F_error! ***! + \************************************************************************************************************************************************************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_error\",\n function () {\n return __webpack_require__(/*! ./node_modules/next/dist/pages/_error.js */ \"./node_modules/next/dist/pages/_error.js\");\n }\n ]);\n if(true) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_error\"])\n });\n }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWNsaWVudC1wYWdlcy1sb2FkZXIuanM/YWJzb2x1dGVQYWdlUGF0aD1DJTNBJTVDVXNlcnMlNUNIQVJTSElUJTIwQkFHR0ElNUNEZXNrdG9wJTVDWmVvVGFwMi4wJTVDZnJvbnRlbmQlNUNub2RlX21vZHVsZXMlNUNuZXh0JTVDZGlzdCU1Q3BhZ2VzJTVDX2Vycm9yLmpzJnBhZ2U9JTJGX2Vycm9yISIsIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLDBGQUEwQztBQUNqRTtBQUNBO0FBQ0EsT0FBTyxJQUFVO0FBQ2pCLE1BQU0sVUFBVTtBQUNoQjtBQUNBLE9BQU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8/M2QyZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcbiAgICAod2luZG93Ll9fTkVYVF9QID0gd2luZG93Ll9fTkVYVF9QIHx8IFtdKS5wdXNoKFtcbiAgICAgIFwiL19lcnJvclwiLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZShcIi4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9wYWdlcy9fZXJyb3IuanNcIik7XG4gICAgICB9XG4gICAgXSk7XG4gICAgaWYobW9kdWxlLmhvdCkge1xuICAgICAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93Ll9fTkVYVF9QLnB1c2goW1wiL19lcnJvclwiXSlcbiAgICAgIH0pO1xuICAgIH1cbiAgIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&page=%2F_error!\n")); + +/***/ }) + +}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } +/******/ __webpack_require__.O(0, ["main"], function() { return __webpack_exec__("./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&page=%2F_error!"); }); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ _N_E = __webpack_exports__; +/******/ } +]); \ No newline at end of file diff --git a/frontend/.next/static/chunks/app-pages-internals.js b/frontend/.next/static/chunks/app-pages-internals.js new file mode 100644 index 000000000..b104a1d7f --- /dev/null +++ b/frontend/.next/static/chunks/app-pages-internals.js @@ -0,0 +1,105 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app-pages-internals"],{ + +/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!": +/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false! ***! + \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/app-router.js */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/error-boundary.js */ \"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/layout-router.js */ \"(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/not-found-boundary.js */ \"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/render-from-template-context.js */ \"(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js\", 23));\nPromise.resolve(/*! import() eager */).then(__webpack_require__.t.bind(__webpack_require__, /*! ./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js */ \"(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js\", 23))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz1DJTNBJTVDVXNlcnMlNUNIQVJTSElUJTIwQkFHR0ElNUNEZXNrdG9wJTVDWmVvVGFwMi4wJTVDZnJvbnRlbmQlNUNub2RlX21vZHVsZXMlNUNuZXh0JTVDZGlzdCU1Q2NsaWVudCU1Q2NvbXBvbmVudHMlNUNhcHAtcm91dGVyLmpzJm1vZHVsZXM9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJTVDbm9kZV9tb2R1bGVzJTVDbmV4dCU1Q2Rpc3QlNUNjbGllbnQlNUNjb21wb25lbnRzJTVDZXJyb3ItYm91bmRhcnkuanMmbW9kdWxlcz1DJTNBJTVDVXNlcnMlNUNIQVJTSElUJTIwQkFHR0ElNUNEZXNrdG9wJTVDWmVvVGFwMi4wJTVDZnJvbnRlbmQlNUNub2RlX21vZHVsZXMlNUNuZXh0JTVDZGlzdCU1Q2NsaWVudCU1Q2NvbXBvbmVudHMlNUNsYXlvdXQtcm91dGVyLmpzJm1vZHVsZXM9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJTVDbm9kZV9tb2R1bGVzJTVDbmV4dCU1Q2Rpc3QlNUNjbGllbnQlNUNjb21wb25lbnRzJTVDbm90LWZvdW5kLWJvdW5kYXJ5LmpzJm1vZHVsZXM9QyUzQSU1Q1VzZXJzJTVDSEFSU0hJVCUyMEJBR0dBJTVDRGVza3RvcCU1Q1plb1RhcDIuMCU1Q2Zyb250ZW5kJTVDbm9kZV9tb2R1bGVzJTVDbmV4dCU1Q2Rpc3QlNUNjbGllbnQlNUNjb21wb25lbnRzJTVDcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qcyZtb2R1bGVzPUMlM0ElNUNVc2VycyU1Q0hBUlNISVQlMjBCQUdHQSU1Q0Rlc2t0b3AlNUNaZW9UYXAyLjAlNUNmcm9udGVuZCU1Q25vZGVfbW9kdWxlcyU1Q25leHQlNUNkaXN0JTVDY2xpZW50JTVDY29tcG9uZW50cyU1Q3N0YXRpYy1nZW5lcmF0aW9uLXNlYXJjaHBhcmFtcy1iYWlsb3V0LXByb3ZpZGVyLmpzJnNlcnZlcj1mYWxzZSEiLCJtYXBwaW5ncyI6IkFBQUEsZ1BBQXdKO0FBQ3hKLHdQQUE0SjtBQUM1SixzUEFBMko7QUFDM0osZ1FBQWdLO0FBQ2hLLG9SQUEwSztBQUMxSyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvPzdiNDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJDOlxcXFxVc2Vyc1xcXFxIQVJTSElUIEJBR0dBXFxcXERlc2t0b3BcXFxcWmVvVGFwMi4wXFxcXGZyb250ZW5kXFxcXG5vZGVfbW9kdWxlc1xcXFxuZXh0XFxcXGRpc3RcXFxcY2xpZW50XFxcXGNvbXBvbmVudHNcXFxcYXBwLXJvdXRlci5qc1wiKTtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxub2RlX21vZHVsZXNcXFxcbmV4dFxcXFxkaXN0XFxcXGNsaWVudFxcXFxjb21wb25lbnRzXFxcXGVycm9yLWJvdW5kYXJ5LmpzXCIpO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIgKi8gXCJDOlxcXFxVc2Vyc1xcXFxIQVJTSElUIEJBR0dBXFxcXERlc2t0b3BcXFxcWmVvVGFwMi4wXFxcXGZyb250ZW5kXFxcXG5vZGVfbW9kdWxlc1xcXFxuZXh0XFxcXGRpc3RcXFxcY2xpZW50XFxcXGNvbXBvbmVudHNcXFxcbGF5b3V0LXJvdXRlci5qc1wiKTtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxub2RlX21vZHVsZXNcXFxcbmV4dFxcXFxkaXN0XFxcXGNsaWVudFxcXFxjb21wb25lbnRzXFxcXG5vdC1mb3VuZC1ib3VuZGFyeS5qc1wiKTtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxub2RlX21vZHVsZXNcXFxcbmV4dFxcXFxkaXN0XFxcXGNsaWVudFxcXFxjb21wb25lbnRzXFxcXHJlbmRlci1mcm9tLXRlbXBsYXRlLWNvbnRleHQuanNcIik7XG5pbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIkM6XFxcXFVzZXJzXFxcXEhBUlNISVQgQkFHR0FcXFxcRGVza3RvcFxcXFxaZW9UYXAyLjBcXFxcZnJvbnRlbmRcXFxcbm9kZV9tb2R1bGVzXFxcXG5leHRcXFxcZGlzdFxcXFxjbGllbnRcXFxcY29tcG9uZW50c1xcXFxzdGF0aWMtZ2VuZXJhdGlvbi1zZWFyY2hwYXJhbXMtYmFpbG91dC1wcm92aWRlci5qc1wiKSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/hooks-server-context.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/hooks-server-context.js ***! + \**************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DynamicServerError: function() {\n return DynamicServerError;\n },\n isDynamicServerError: function() {\n return isDynamicServerError;\n }\n});\nconst DYNAMIC_ERROR_CODE = \"DYNAMIC_SERVER_USAGE\";\nclass DynamicServerError extends Error {\n constructor(description){\n super(\"Dynamic server usage: \" + description);\n this.description = description;\n this.digest = DYNAMIC_ERROR_CODE;\n }\n}\nfunction isDynamicServerError(err) {\n if (typeof err !== \"object\" || err === null || !(\"digest\" in err) || typeof err.digest !== \"string\") {\n return false;\n }\n return err.digest === DYNAMIC_ERROR_CODE;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hooks-server-context.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaG9va3Mtc2VydmVyLWNvbnRleHQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLG9CQUFvQjtRQUNoQixPQUFPQTtJQUNYO0lBQ0FDLHNCQUFzQjtRQUNsQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxxQkFBcUI7QUFDM0IsTUFBTVIsMkJBQTJCUztJQUM3QkMsWUFBWUMsV0FBVyxDQUFDO1FBQ3BCLEtBQUssQ0FBQywyQkFBMkJBO1FBQ2pDLElBQUksQ0FBQ0EsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLE1BQU0sR0FBR0o7SUFDbEI7QUFDSjtBQUNBLFNBQVNQLHFCQUFxQlksR0FBRztJQUM3QixJQUFJLE9BQU9BLFFBQVEsWUFBWUEsUUFBUSxRQUFRLENBQUUsYUFBWUEsR0FBRSxLQUFNLE9BQU9BLElBQUlELE1BQU0sS0FBSyxVQUFVO1FBQ2pHLE9BQU87SUFDWDtJQUNBLE9BQU9DLElBQUlELE1BQU0sS0FBS0o7QUFDMUI7QUFFQSxJQUFJLENBQUMsT0FBT1gsUUFBUWlCLE9BQU8sS0FBSyxjQUFlLE9BQU9qQixRQUFRaUIsT0FBTyxLQUFLLFlBQVlqQixRQUFRaUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPakIsUUFBUWlCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktwQixPQUFPQyxjQUFjLENBQUNDLFFBQVFpQixPQUFPLEVBQUUsY0FBYztRQUFFaEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPcUIsTUFBTSxDQUFDbkIsUUFBUWlCLE9BQU8sRUFBRWpCO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVFpQixPQUFPO0FBQ2xDLEVBRUEsZ0RBQWdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaG9va3Mtc2VydmVyLWNvbnRleHQuanM/MDA5YSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIER5bmFtaWNTZXJ2ZXJFcnJvcjogbnVsbCxcbiAgICBpc0R5bmFtaWNTZXJ2ZXJFcnJvcjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBEeW5hbWljU2VydmVyRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRHluYW1pY1NlcnZlckVycm9yO1xuICAgIH0sXG4gICAgaXNEeW5hbWljU2VydmVyRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNEeW5hbWljU2VydmVyRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBEWU5BTUlDX0VSUk9SX0NPREUgPSBcIkRZTkFNSUNfU0VSVkVSX1VTQUdFXCI7XG5jbGFzcyBEeW5hbWljU2VydmVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoZGVzY3JpcHRpb24pe1xuICAgICAgICBzdXBlcihcIkR5bmFtaWMgc2VydmVyIHVzYWdlOiBcIiArIGRlc2NyaXB0aW9uKTtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLmRpZ2VzdCA9IERZTkFNSUNfRVJST1JfQ09ERTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc0R5bmFtaWNTZXJ2ZXJFcnJvcihlcnIpIHtcbiAgICBpZiAodHlwZW9mIGVyciAhPT0gXCJvYmplY3RcIiB8fCBlcnIgPT09IG51bGwgfHwgIShcImRpZ2VzdFwiIGluIGVycikgfHwgdHlwZW9mIGVyci5kaWdlc3QgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZXJyLmRpZ2VzdCA9PT0gRFlOQU1JQ19FUlJPUl9DT0RFO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob29rcy1zZXJ2ZXItY29udGV4dC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJEeW5hbWljU2VydmVyRXJyb3IiLCJpc0R5bmFtaWNTZXJ2ZXJFcnJvciIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIkRZTkFNSUNfRVJST1JfQ09ERSIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJkZXNjcmlwdGlvbiIsImRpZ2VzdCIsImVyciIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/hooks-server-context.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js": +/*!*******************************************************************!*\ + !*** ./node_modules/next/dist/client/components/layout-router.js ***! + \*******************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return OuterLayoutRouter;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _reactdom = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _fetchserverresponse = __webpack_require__(/*! ./router-reducer/fetch-server-response */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _infinitepromise = __webpack_require__(/*! ./infinite-promise */ \"(app-pages-browser)/./node_modules/next/dist/client/components/infinite-promise.js\");\nconst _errorboundary = __webpack_require__(/*! ./error-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js\");\nconst _matchsegments = __webpack_require__(/*! ./match-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js\");\nconst _handlesmoothscroll = __webpack_require__(/*! ../../shared/lib/router/utils/handle-smooth-scroll */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\");\nconst _redirectboundary = __webpack_require__(/*! ./redirect-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-boundary.js\");\nconst _notfoundboundary = __webpack_require__(/*! ./not-found-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js\");\nconst _getsegmentvalue = __webpack_require__(/*! ./router-reducer/reducers/get-segment-value */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./router-reducer/create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\n/**\n * Add refetch marker to router state at the point of the current layout segment.\n * This ensures the response returned is not further down than the current layout segment.\n */ function walkAddRefetch(segmentPathToWalk, treeToRecreate) {\n if (segmentPathToWalk) {\n const [segment, parallelRouteKey] = segmentPathToWalk;\n const isLast = segmentPathToWalk.length === 2;\n if ((0, _matchsegments.matchSegment)(treeToRecreate[0], segment)) {\n if (treeToRecreate[1].hasOwnProperty(parallelRouteKey)) {\n if (isLast) {\n const subTree = walkAddRefetch(undefined, treeToRecreate[1][parallelRouteKey]);\n return [\n treeToRecreate[0],\n {\n ...treeToRecreate[1],\n [parallelRouteKey]: [\n subTree[0],\n subTree[1],\n subTree[2],\n \"refetch\"\n ]\n }\n ];\n }\n return [\n treeToRecreate[0],\n {\n ...treeToRecreate[1],\n [parallelRouteKey]: walkAddRefetch(segmentPathToWalk.slice(2), treeToRecreate[1][parallelRouteKey])\n }\n ];\n }\n }\n }\n return treeToRecreate;\n}\n// TODO-APP: Replace with new React API for finding dom nodes without a `ref` when available\n/**\n * Wraps ReactDOM.findDOMNode with additional logic to hide React Strict Mode warning\n */ function findDOMNode(instance) {\n // Tree-shake for server bundle\n if (typeof window === \"undefined\") return null;\n // Only apply strict mode warning when not in production\n if (true) {\n const originalConsoleError = console.error;\n try {\n console.error = function() {\n for(var _len = arguments.length, messages = new Array(_len), _key = 0; _key < _len; _key++){\n messages[_key] = arguments[_key];\n }\n // Ignore strict mode warning for the findDomNode call below\n if (!messages[0].includes(\"Warning: %s is deprecated in StrictMode.\")) {\n originalConsoleError(...messages);\n }\n };\n return _reactdom.default.findDOMNode(instance);\n } finally{\n console.error = originalConsoleError;\n }\n }\n return _reactdom.default.findDOMNode(instance);\n}\nconst rectProperties = [\n \"bottom\",\n \"height\",\n \"left\",\n \"right\",\n \"top\",\n \"width\",\n \"x\",\n \"y\"\n];\n/**\n * Check if a HTMLElement is hidden or fixed/sticky position\n */ function shouldSkipElement(element) {\n // we ignore fixed or sticky positioned elements since they'll likely pass the \"in-viewport\" check\n // and will result in a situation we bail on scroll because of something like a fixed nav,\n // even though the actual page content is offscreen\n if ([\n \"sticky\",\n \"fixed\"\n ].includes(getComputedStyle(element).position)) {\n if (true) {\n console.warn(\"Skipping auto-scroll behavior due to `position: sticky` or `position: fixed` on element:\", element);\n }\n return true;\n }\n // Uses `getBoundingClientRect` to check if the element is hidden instead of `offsetParent`\n // because `offsetParent` doesn't consider document/body\n const rect = element.getBoundingClientRect();\n return rectProperties.every((item)=>rect[item] === 0);\n}\n/**\n * Check if the top corner of the HTMLElement is in the viewport.\n */ function topOfElementInViewport(element, viewportHeight) {\n const rect = element.getBoundingClientRect();\n return rect.top >= 0 && rect.top <= viewportHeight;\n}\n/**\n * Find the DOM node for a hash fragment.\n * If `top` the page has to scroll to the top of the page. This mirrors the browser's behavior.\n * If the hash fragment is an id, the page has to scroll to the element with that id.\n * If the hash fragment is a name, the page has to scroll to the first element with that name.\n */ function getHashFragmentDomNode(hashFragment) {\n // If the hash fragment is `top` the page has to scroll to the top of the page.\n if (hashFragment === \"top\") {\n return document.body;\n }\n var _document_getElementById;\n // If the hash fragment is an id, the page has to scroll to the element with that id.\n return (_document_getElementById = document.getElementById(hashFragment)) != null ? _document_getElementById : document.getElementsByName(hashFragment)[0];\n}\nclass InnerScrollAndFocusHandler extends _react.default.Component {\n componentDidMount() {\n this.handlePotentialScroll();\n }\n componentDidUpdate() {\n // Because this property is overwritten in handlePotentialScroll it's fine to always run it when true as it'll be set to false for subsequent renders.\n if (this.props.focusAndScrollRef.apply) {\n this.handlePotentialScroll();\n }\n }\n render() {\n return this.props.children;\n }\n constructor(...args){\n super(...args);\n this.handlePotentialScroll = ()=>{\n // Handle scroll and focus, it's only applied once in the first useEffect that triggers that changed.\n const { focusAndScrollRef, segmentPath } = this.props;\n if (focusAndScrollRef.apply) {\n // segmentPaths is an array of segment paths that should be scrolled to\n // if the current segment path is not in the array, the scroll is not applied\n // unless the array is empty, in which case the scroll is always applied\n if (focusAndScrollRef.segmentPaths.length !== 0 && !focusAndScrollRef.segmentPaths.some((scrollRefSegmentPath)=>segmentPath.every((segment, index)=>(0, _matchsegments.matchSegment)(segment, scrollRefSegmentPath[index])))) {\n return;\n }\n let domNode = null;\n const hashFragment = focusAndScrollRef.hashFragment;\n if (hashFragment) {\n domNode = getHashFragmentDomNode(hashFragment);\n }\n // `findDOMNode` is tricky because it returns just the first child if the component is a fragment.\n // This already caused a bug where the first child was a <link/> in head.\n if (!domNode) {\n domNode = findDOMNode(this);\n }\n // If there is no DOM node this layout-router level is skipped. It'll be handled higher-up in the tree.\n if (!(domNode instanceof Element)) {\n return;\n }\n // Verify if the element is a HTMLElement and if we want to consider it for scroll behavior.\n // If the element is skipped, try to select the next sibling and try again.\n while(!(domNode instanceof HTMLElement) || shouldSkipElement(domNode)){\n // No siblings found that match the criteria are found, so handle scroll higher up in the tree instead.\n if (domNode.nextElementSibling === null) {\n return;\n }\n domNode = domNode.nextElementSibling;\n }\n // State is mutated to ensure that the focus and scroll is applied only once.\n focusAndScrollRef.apply = false;\n focusAndScrollRef.hashFragment = null;\n focusAndScrollRef.segmentPaths = [];\n (0, _handlesmoothscroll.handleSmoothScroll)(()=>{\n // In case of hash scroll, we only need to scroll the element into view\n if (hashFragment) {\n domNode.scrollIntoView();\n return;\n }\n // Store the current viewport height because reading `clientHeight` causes a reflow,\n // and it won't change during this function.\n const htmlElement = document.documentElement;\n const viewportHeight = htmlElement.clientHeight;\n // If the element's top edge is already in the viewport, exit early.\n if (topOfElementInViewport(domNode, viewportHeight)) {\n return;\n }\n // Otherwise, try scrolling go the top of the document to be backward compatible with pages\n // scrollIntoView() called on `<html/>` element scrolls horizontally on chrome and firefox (that shouldn't happen)\n // We could use it to scroll horizontally following RTL but that also seems to be broken - it will always scroll left\n // scrollLeft = 0 also seems to ignore RTL and manually checking for RTL is too much hassle so we will scroll just vertically\n htmlElement.scrollTop = 0;\n // Scroll to domNode if domNode is not in viewport when scrolled to top of document\n if (!topOfElementInViewport(domNode, viewportHeight)) {\n domNode.scrollIntoView();\n }\n }, {\n // We will force layout by querying domNode position\n dontForceLayout: true,\n onlyHashChange: focusAndScrollRef.onlyHashChange\n });\n // Mutate after scrolling so that it can be read by `handleSmoothScroll`\n focusAndScrollRef.onlyHashChange = false;\n // Set focus on the element\n domNode.focus();\n }\n };\n }\n}\nfunction ScrollAndFocusHandler(param) {\n let { segmentPath, children } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n if (!context) {\n throw new Error(\"invariant global layout router not mounted\");\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(InnerScrollAndFocusHandler, {\n segmentPath: segmentPath,\n focusAndScrollRef: context.focusAndScrollRef,\n children: children\n });\n}\n_c = ScrollAndFocusHandler;\n/**\n * InnerLayoutRouter handles rendering the provided segment based on the cache.\n */ function InnerLayoutRouter(param) {\n let { parallelRouterKey, url, childNodes, segmentPath, tree, // isActive,\n cacheKey } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n if (!context) {\n throw new Error(\"invariant global layout router not mounted\");\n }\n const { buildId, changeByServerResponse, tree: fullTree } = context;\n // Read segment path from the parallel router cache node.\n let childNode = childNodes.get(cacheKey);\n // When data is not available during rendering client-side we need to fetch\n // it from the server.\n if (childNode === undefined) {\n const newLazyCacheNode = {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n head: null,\n parallelRoutes: new Map(),\n lazyDataResolved: false\n };\n /**\n * Flight data fetch kicked off during render and put into the cache.\n */ childNode = newLazyCacheNode;\n childNodes.set(cacheKey, newLazyCacheNode);\n }\n // `rsc` represents the renderable node for this segment.\n // If this segment has a `prefetchRsc`, it's the statically prefetched data.\n // We should use that on initial render instead of `rsc`. Then we'll switch\n // to `rsc` when the dynamic response streams in.\n //\n // If no prefetch data is available, then we go straight to rendering `rsc`.\n const resolvedPrefetchRsc = childNode.prefetchRsc !== null ? childNode.prefetchRsc : childNode.rsc;\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n //\n // @ts-expect-error The second argument to `useDeferredValue` is only\n // available in the experimental builds. When its disabled, it will always\n // return `rsc`.\n const rsc = (0, _react.useDeferredValue)(childNode.rsc, resolvedPrefetchRsc);\n // `rsc` is either a React node or a promise for a React node, except we\n // special case `null` to represent that this segment's data is missing. If\n // it's a promise, we need to unwrap it so we can determine whether or not the\n // data is missing.\n const resolvedRsc = typeof rsc === \"object\" && rsc !== null && typeof rsc.then === \"function\" ? (0, _react.use)(rsc) : rsc;\n if (!resolvedRsc) {\n // The data for this segment is not available, and there's no pending\n // navigation that will be able to fulfill it. We need to fetch more from\n // the server and patch the cache.\n // Check if there's already a pending request.\n let lazyData = childNode.lazyData;\n if (lazyData === null) {\n /**\n * Router state with refetch marker added\n */ // TODO-APP: remove ''\n const refetchTree = walkAddRefetch([\n \"\",\n ...segmentPath\n ], fullTree);\n childNode.lazyData = lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(url, location.origin), refetchTree, context.nextUrl, buildId);\n childNode.lazyDataResolved = false;\n }\n /**\n * Flight response data\n */ // When the data has not resolved yet `use` will suspend here.\n const [flightData, overrideCanonicalUrl] = (0, _react.use)(lazyData);\n if (!childNode.lazyDataResolved) {\n // setTimeout is used to start a new transition during render, this is an intentional hack around React.\n setTimeout(()=>{\n (0, _react.startTransition)(()=>{\n changeByServerResponse(fullTree, flightData, overrideCanonicalUrl);\n });\n });\n // It's important that we mark this as resolved, in case this branch is replayed, we don't want to continously re-apply\n // the patch to the tree.\n childNode.lazyDataResolved = true;\n }\n // Suspend infinitely as `changeByServerResponse` will cause a different part of the tree to be rendered.\n (0, _react.use)((0, _infinitepromise.createInfinitePromise)());\n }\n // If we get to this point, then we know we have something we can render.\n const subtree = /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.LayoutRouterContext.Provider, {\n value: {\n tree: tree[1][parallelRouterKey],\n childNodes: childNode.parallelRoutes,\n // TODO-APP: overriding of url for parallel routes\n url: url\n },\n children: resolvedRsc\n });\n // Ensure root layout is not wrapped in a div as the root layout renders `<html>`\n return subtree;\n}\n_c1 = InnerLayoutRouter;\n/**\n * Renders suspense boundary with the provided \"loading\" property as the fallback.\n * If no loading property is provided it renders the children without a suspense boundary.\n */ function LoadingBoundary(param) {\n let { children, loading, loadingStyles, loadingScripts, hasLoading } = param;\n if (hasLoading) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Suspense, {\n fallback: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n loadingStyles,\n loadingScripts,\n loading\n ]\n }),\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\n_c2 = LoadingBoundary;\nfunction OuterLayoutRouter(param) {\n let { parallelRouterKey, segmentPath, error, errorStyles, errorScripts, templateStyles, templateScripts, loading, loadingStyles, loadingScripts, hasLoading, template, notFound, notFoundStyles, styles } = param;\n const context = (0, _react.useContext)(_approutercontextsharedruntime.LayoutRouterContext);\n if (!context) {\n throw new Error(\"invariant expected layout router to be mounted\");\n }\n const { childNodes, tree, url } = context;\n // Get the current parallelRouter cache node\n let childNodesForParallelRouter = childNodes.get(parallelRouterKey);\n // If the parallel router cache node does not exist yet, create it.\n // This writes to the cache when there is no item in the cache yet. It never *overwrites* existing cache items which is why it's safe in concurrent mode.\n if (!childNodesForParallelRouter) {\n childNodesForParallelRouter = new Map();\n childNodes.set(parallelRouterKey, childNodesForParallelRouter);\n }\n // Get the active segment in the tree\n // The reason arrays are used in the data format is that these are transferred from the server to the browser so it's optimized to save bytes.\n const treeSegment = tree[1][parallelRouterKey][0];\n // If segment is an array it's a dynamic route and we want to read the dynamic route value as the segment to get from the cache.\n const currentChildSegmentValue = (0, _getsegmentvalue.getSegmentValue)(treeSegment);\n /**\n * Decides which segments to keep rendering, all segments that are not active will be wrapped in `<Offscreen>`.\n */ // TODO-APP: Add handling of `<Offscreen>` when it's available.\n const preservedSegments = [\n treeSegment\n ];\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n styles,\n preservedSegments.map((preservedSegment)=>{\n const preservedSegmentValue = (0, _getsegmentvalue.getSegmentValue)(preservedSegment);\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(preservedSegment);\n return(/*\n - Error boundary\n - Only renders error boundary if error component is provided.\n - Rendered for each segment to ensure they have their own error state.\n - Loading boundary\n - Only renders suspense boundary if loading components is provided.\n - Rendered for each segment to ensure they have their own loading state.\n - Passed to the router during rendering to ensure it can be immediately rendered when suspending on a Flight fetch.\n */ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_approutercontextsharedruntime.TemplateContext.Provider, {\n value: /*#__PURE__*/ (0, _jsxruntime.jsx)(ScrollAndFocusHandler, {\n segmentPath: segmentPath,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.ErrorBoundary, {\n errorComponent: error,\n errorStyles: errorStyles,\n errorScripts: errorScripts,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(LoadingBoundary, {\n hasLoading: hasLoading,\n loading: loading,\n loadingStyles: loadingStyles,\n loadingScripts: loadingScripts,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_notfoundboundary.NotFoundBoundary, {\n notFound: notFound,\n notFoundStyles: notFoundStyles,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_redirectboundary.RedirectBoundary, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(InnerLayoutRouter, {\n parallelRouterKey: parallelRouterKey,\n url: url,\n tree: tree,\n childNodes: childNodesForParallelRouter,\n segmentPath: segmentPath,\n cacheKey: cacheKey,\n isActive: currentChildSegmentValue === preservedSegmentValue\n })\n })\n })\n })\n })\n }),\n children: [\n templateStyles,\n templateScripts,\n template\n ]\n }, (0, _createroutercachekey.createRouterCacheKey)(preservedSegment, true)));\n })\n ]\n });\n}\n_c3 = OuterLayoutRouter;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=layout-router.js.map\nvar _c, _c1, _c2, _c3;\n$RefreshReg$(_c, \"ScrollAndFocusHandler\");\n$RefreshReg$(_c1, \"InnerLayoutRouter\");\n$RefreshReg$(_c2, \"LoadingBoundary\");\n$RefreshReg$(_c3, \"OuterLayoutRouter\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbGF5b3V0LXJvdXRlci5qcyIsIm1hcHBpbmdzIjoicURBRWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUdlO0lBQ1hJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGdJQUF5QztBQUNsRixNQUFNQyw0QkFBNEJELG1CQUFPQSxDQUFDLGtJQUEwQztBQUNwRixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUcsU0FBUyxXQUFXLEdBQUdGLDBCQUEwQkcsQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxtRkFBTztBQUN4RSxNQUFNSyxZQUFZLFdBQVcsR0FBR04seUJBQXlCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLDJGQUFXO0FBQzlFLE1BQU1NLGlDQUFpQ04sbUJBQU9BLENBQUMsd0pBQW9EO0FBQ25HLE1BQU1PLHVCQUF1QlAsbUJBQU9BLENBQUMsc0pBQXdDO0FBQzdFLE1BQU1RLG1CQUFtQlIsbUJBQU9BLENBQUMsOEdBQW9CO0FBQ3JELE1BQU1TLGlCQUFpQlQsbUJBQU9BLENBQUMsMEdBQWtCO0FBQ2pELE1BQU1VLGlCQUFpQlYsbUJBQU9BLENBQUMsMEdBQWtCO0FBQ2pELE1BQU1XLHNCQUFzQlgsbUJBQU9BLENBQUMsd0pBQW9EO0FBQ3hGLE1BQU1ZLG9CQUFvQlosbUJBQU9BLENBQUMsZ0hBQXFCO0FBQ3ZELE1BQU1hLG9CQUFvQmIsbUJBQU9BLENBQUMsa0hBQXNCO0FBQ3hELE1BQU1jLG1CQUFtQmQsbUJBQU9BLENBQUMsZ0tBQTZDO0FBQzlFLE1BQU1lLHdCQUF3QmYsbUJBQU9BLENBQUMsMEpBQTBDO0FBQ2hGOzs7Q0FHQyxHQUFHLFNBQVNnQixlQUFlQyxpQkFBaUIsRUFBRUMsY0FBYztJQUN6RCxJQUFJRCxtQkFBbUI7UUFDbkIsTUFBTSxDQUFDRSxTQUFTQyxpQkFBaUIsR0FBR0g7UUFDcEMsTUFBTUksU0FBU0osa0JBQWtCSyxNQUFNLEtBQUs7UUFDNUMsSUFBSSxDQUFDLEdBQUdaLGVBQWVhLFlBQVksRUFBRUwsY0FBYyxDQUFDLEVBQUUsRUFBRUMsVUFBVTtZQUM5RCxJQUFJRCxjQUFjLENBQUMsRUFBRSxDQUFDTSxjQUFjLENBQUNKLG1CQUFtQjtnQkFDcEQsSUFBSUMsUUFBUTtvQkFDUixNQUFNSSxVQUFVVCxlQUFlVSxXQUFXUixjQUFjLENBQUMsRUFBRSxDQUFDRSxpQkFBaUI7b0JBQzdFLE9BQU87d0JBQ0hGLGNBQWMsQ0FBQyxFQUFFO3dCQUNqQjs0QkFDSSxHQUFHQSxjQUFjLENBQUMsRUFBRTs0QkFDcEIsQ0FBQ0UsaUJBQWlCLEVBQUU7Z0NBQ2hCSyxPQUFPLENBQUMsRUFBRTtnQ0FDVkEsT0FBTyxDQUFDLEVBQUU7Z0NBQ1ZBLE9BQU8sQ0FBQyxFQUFFO2dDQUNWOzZCQUNIO3dCQUNMO3FCQUNIO2dCQUNMO2dCQUNBLE9BQU87b0JBQ0hQLGNBQWMsQ0FBQyxFQUFFO29CQUNqQjt3QkFDSSxHQUFHQSxjQUFjLENBQUMsRUFBRTt3QkFDcEIsQ0FBQ0UsaUJBQWlCLEVBQUVKLGVBQWVDLGtCQUFrQlUsS0FBSyxDQUFDLElBQUlULGNBQWMsQ0FBQyxFQUFFLENBQUNFLGlCQUFpQjtvQkFDdEc7aUJBQ0g7WUFDTDtRQUNKO0lBQ0o7SUFDQSxPQUFPRjtBQUNYO0FBQ0EsNEZBQTRGO0FBQzVGOztDQUVDLEdBQUcsU0FBU1UsWUFBWUMsUUFBUTtJQUM3QiwrQkFBK0I7SUFDL0IsSUFBSSxPQUFPQyxXQUFXLGFBQWEsT0FBTztJQUMxQyx3REFBd0Q7SUFDeEQsSUFBSUMsSUFBcUMsRUFBRTtRQUN2QyxNQUFNQyx1QkFBdUJDLFFBQVFDLEtBQUs7UUFDMUMsSUFBSTtZQUNBRCxRQUFRQyxLQUFLLEdBQUc7Z0JBQ1osSUFBSSxJQUFJQyxPQUFPQyxVQUFVZCxNQUFNLEVBQUVlLFdBQVcsSUFBSUMsTUFBTUgsT0FBT0ksT0FBTyxHQUFHQSxPQUFPSixNQUFNSSxPQUFPO29CQUN2RkYsUUFBUSxDQUFDRSxLQUFLLEdBQUdILFNBQVMsQ0FBQ0csS0FBSztnQkFDcEM7Z0JBQ0EsNERBQTREO2dCQUM1RCxJQUFJLENBQUNGLFFBQVEsQ0FBQyxFQUFFLENBQUNHLFFBQVEsQ0FBQyw2Q0FBNkM7b0JBQ25FUix3QkFBd0JLO2dCQUM1QjtZQUNKO1lBQ0EsT0FBT2hDLFVBQVVvQyxPQUFPLENBQUNiLFdBQVcsQ0FBQ0M7UUFDekMsU0FBUztZQUNMSSxRQUFRQyxLQUFLLEdBQUdGO1FBQ3BCO0lBQ0o7SUFDQSxPQUFPM0IsVUFBVW9DLE9BQU8sQ0FBQ2IsV0FBVyxDQUFDQztBQUN6QztBQUNBLE1BQU1hLGlCQUFpQjtJQUNuQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0g7QUFDRDs7Q0FFQyxHQUFHLFNBQVNDLGtCQUFrQkMsT0FBTztJQUNsQyxrR0FBa0c7SUFDbEcsMEZBQTBGO0lBQzFGLG1EQUFtRDtJQUNuRCxJQUFJO1FBQ0E7UUFDQTtLQUNILENBQUNKLFFBQVEsQ0FBQ0ssaUJBQWlCRCxTQUFTRSxRQUFRLEdBQUc7UUFDNUMsSUFBSWYsSUFBc0MsRUFBRTtZQUN4Q0UsUUFBUWMsSUFBSSxDQUFDLDRGQUE0Rkg7UUFDN0c7UUFDQSxPQUFPO0lBQ1g7SUFDQSwyRkFBMkY7SUFDM0Ysd0RBQXdEO0lBQ3hELE1BQU1JLE9BQU9KLFFBQVFLLHFCQUFxQjtJQUMxQyxPQUFPUCxlQUFlUSxLQUFLLENBQUMsQ0FBQ0MsT0FBT0gsSUFBSSxDQUFDRyxLQUFLLEtBQUs7QUFDdkQ7QUFDQTs7Q0FFQyxHQUFHLFNBQVNDLHVCQUF1QlIsT0FBTyxFQUFFUyxjQUFjO0lBQ3ZELE1BQU1MLE9BQU9KLFFBQVFLLHFCQUFxQjtJQUMxQyxPQUFPRCxLQUFLTSxHQUFHLElBQUksS0FBS04sS0FBS00sR0FBRyxJQUFJRDtBQUN4QztBQUNBOzs7OztDQUtDLEdBQUcsU0FBU0UsdUJBQXVCQyxZQUFZO0lBQzVDLCtFQUErRTtJQUMvRSxJQUFJQSxpQkFBaUIsT0FBTztRQUN4QixPQUFPQyxTQUFTQyxJQUFJO0lBQ3hCO0lBQ0EsSUFBSUM7SUFDSixxRkFBcUY7SUFDckYsT0FBTyxDQUFDQSwyQkFBMkJGLFNBQVNHLGNBQWMsQ0FBQ0osYUFBWSxLQUFNLE9BQU9HLDJCQUNwRkYsU0FBU0ksaUJBQWlCLENBQUNMLGFBQWEsQ0FBQyxFQUFFO0FBQy9DO0FBQ0EsTUFBTU0sbUNBQW1DM0QsT0FBT3NDLE9BQU8sQ0FBQ3NCLFNBQVM7SUFDN0RDLG9CQUFvQjtRQUNoQixJQUFJLENBQUNDLHFCQUFxQjtJQUM5QjtJQUNBQyxxQkFBcUI7UUFDakIsc0pBQXNKO1FBQ3RKLElBQUksSUFBSSxDQUFDQyxLQUFLLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLEVBQUU7WUFDcEMsSUFBSSxDQUFDSixxQkFBcUI7UUFDOUI7SUFDSjtJQUNBSyxTQUFTO1FBQ0wsT0FBTyxJQUFJLENBQUNILEtBQUssQ0FBQ0ksUUFBUTtJQUM5QjtJQUNBQyxZQUFZLEdBQUdDLElBQUksQ0FBQztRQUNoQixLQUFLLElBQUlBO1FBQ1QsSUFBSSxDQUFDUixxQkFBcUIsR0FBRztZQUN6QixxR0FBcUc7WUFDckcsTUFBTSxFQUFFRyxpQkFBaUIsRUFBRU0sV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDUCxLQUFLO1lBQ3JELElBQUlDLGtCQUFrQkMsS0FBSyxFQUFFO2dCQUN6Qix1RUFBdUU7Z0JBQ3ZFLDZFQUE2RTtnQkFDN0Usd0VBQXdFO2dCQUN4RSxJQUFJRCxrQkFBa0JPLFlBQVksQ0FBQ3JELE1BQU0sS0FBSyxLQUFLLENBQUM4QyxrQkFBa0JPLFlBQVksQ0FBQ0MsSUFBSSxDQUFDLENBQUNDLHVCQUF1QkgsWUFBWXhCLEtBQUssQ0FBQyxDQUFDL0IsU0FBUzJELFFBQVEsQ0FBQyxHQUFHcEUsZUFBZWEsWUFBWSxFQUFFSixTQUFTMEQsb0JBQW9CLENBQUNDLE1BQU0sS0FBSztvQkFDMU47Z0JBQ0o7Z0JBQ0EsSUFBSUMsVUFBVTtnQkFDZCxNQUFNdkIsZUFBZVksa0JBQWtCWixZQUFZO2dCQUNuRCxJQUFJQSxjQUFjO29CQUNkdUIsVUFBVXhCLHVCQUF1QkM7Z0JBQ3JDO2dCQUNBLGtHQUFrRztnQkFDbEcseUVBQXlFO2dCQUN6RSxJQUFJLENBQUN1QixTQUFTO29CQUNWQSxVQUFVbkQsWUFBWSxJQUFJO2dCQUM5QjtnQkFDQSx1R0FBdUc7Z0JBQ3ZHLElBQUksQ0FBRW1ELENBQUFBLG1CQUFtQkMsT0FBTSxHQUFJO29CQUMvQjtnQkFDSjtnQkFDQSw0RkFBNEY7Z0JBQzVGLDJFQUEyRTtnQkFDM0UsTUFBTSxDQUFFRCxDQUFBQSxtQkFBbUJFLFdBQVUsS0FBTXRDLGtCQUFrQm9DLFNBQVM7b0JBQ2xFLHVHQUF1RztvQkFDdkcsSUFBSUEsUUFBUUcsa0JBQWtCLEtBQUssTUFBTTt3QkFDckM7b0JBQ0o7b0JBQ0FILFVBQVVBLFFBQVFHLGtCQUFrQjtnQkFDeEM7Z0JBQ0EsNkVBQTZFO2dCQUM3RWQsa0JBQWtCQyxLQUFLLEdBQUc7Z0JBQzFCRCxrQkFBa0JaLFlBQVksR0FBRztnQkFDakNZLGtCQUFrQk8sWUFBWSxHQUFHLEVBQUU7Z0JBQ2xDLElBQUdoRSxvQkFBb0J3RSxrQkFBa0IsRUFBRTtvQkFDeEMsdUVBQXVFO29CQUN2RSxJQUFJM0IsY0FBYzt3QkFDZHVCLFFBQVFLLGNBQWM7d0JBQ3RCO29CQUNKO29CQUNBLG9GQUFvRjtvQkFDcEYsNENBQTRDO29CQUM1QyxNQUFNQyxjQUFjNUIsU0FBUzZCLGVBQWU7b0JBQzVDLE1BQU1qQyxpQkFBaUJnQyxZQUFZRSxZQUFZO29CQUMvQyxvRUFBb0U7b0JBQ3BFLElBQUluQyx1QkFBdUIyQixTQUFTMUIsaUJBQWlCO3dCQUNqRDtvQkFDSjtvQkFDQSwyRkFBMkY7b0JBQzNGLGtIQUFrSDtvQkFDbEgscUhBQXFIO29CQUNySCw2SEFBNkg7b0JBQzdIZ0MsWUFBWUcsU0FBUyxHQUFHO29CQUN4QixtRkFBbUY7b0JBQ25GLElBQUksQ0FBQ3BDLHVCQUF1QjJCLFNBQVMxQixpQkFBaUI7d0JBQ2xEMEIsUUFBUUssY0FBYztvQkFDMUI7Z0JBQ0osR0FBRztvQkFDQyxvREFBb0Q7b0JBQ3BESyxpQkFBaUI7b0JBQ2pCQyxnQkFBZ0J0QixrQkFBa0JzQixjQUFjO2dCQUNwRDtnQkFDQSx3RUFBd0U7Z0JBQ3hFdEIsa0JBQWtCc0IsY0FBYyxHQUFHO2dCQUNuQywyQkFBMkI7Z0JBQzNCWCxRQUFRWSxLQUFLO1lBQ2pCO1FBQ0o7SUFDSjtBQUNKO0FBQ0EsU0FBU0Msc0JBQXNCQyxLQUFLO0lBQ2hDLElBQUksRUFBRW5CLFdBQVcsRUFBRUgsUUFBUSxFQUFFLEdBQUdzQjtJQUNoQyxNQUFNQyxVQUFVLENBQUMsR0FBRzNGLE9BQU80RixVQUFVLEVBQUV6RiwrQkFBK0IwRix5QkFBeUI7SUFDL0YsSUFBSSxDQUFDRixTQUFTO1FBQ1YsTUFBTSxJQUFJRyxNQUFNO0lBQ3BCO0lBQ0EsT0FBcUIsV0FBSCxHQUFJLElBQUcvRixZQUFZZ0csR0FBRyxFQUFFcEMsNEJBQTRCO1FBQ2xFWSxhQUFhQTtRQUNiTixtQkFBbUIwQixRQUFRMUIsaUJBQWlCO1FBQzVDRyxVQUFVQTtJQUNkO0FBQ0o7S0FYU3FCO0FBWVQ7O0NBRUMsR0FBRyxTQUFTTyxrQkFBa0JOLEtBQUs7SUFDaEMsSUFBSSxFQUFFTyxpQkFBaUIsRUFBRUMsR0FBRyxFQUFFQyxVQUFVLEVBQUU1QixXQUFXLEVBQUU2QixJQUFJLEVBQzNELFlBQVk7SUFDWkMsUUFBUSxFQUFFLEdBQUdYO0lBQ2IsTUFBTUMsVUFBVSxDQUFDLEdBQUczRixPQUFPNEYsVUFBVSxFQUFFekYsK0JBQStCMEYseUJBQXlCO0lBQy9GLElBQUksQ0FBQ0YsU0FBUztRQUNWLE1BQU0sSUFBSUcsTUFBTTtJQUNwQjtJQUNBLE1BQU0sRUFBRVEsT0FBTyxFQUFFQyxzQkFBc0IsRUFBRUgsTUFBTUksUUFBUSxFQUFFLEdBQUdiO0lBQzVELHlEQUF5RDtJQUN6RCxJQUFJYyxZQUFZTixXQUFXekcsR0FBRyxDQUFDMkc7SUFDL0IsMkVBQTJFO0lBQzNFLHNCQUFzQjtJQUN0QixJQUFJSSxjQUFjbEYsV0FBVztRQUN6QixNQUFNbUYsbUJBQW1CO1lBQ3JCQyxVQUFVO1lBQ1ZDLEtBQUs7WUFDTEMsYUFBYTtZQUNiQyxNQUFNO1lBQ05DLGdCQUFnQixJQUFJQztZQUNwQkMsa0JBQWtCO1FBQ3RCO1FBQ0E7O0tBRUgsR0FBR1IsWUFBWUM7UUFDWlAsV0FBV2UsR0FBRyxDQUFDYixVQUFVSztJQUM3QjtJQUNBLHlEQUF5RDtJQUN6RCw0RUFBNEU7SUFDNUUsMkVBQTJFO0lBQzNFLGlEQUFpRDtJQUNqRCxFQUFFO0lBQ0YsNEVBQTRFO0lBQzVFLE1BQU1TLHNCQUFzQlYsVUFBVUksV0FBVyxLQUFLLE9BQU9KLFVBQVVJLFdBQVcsR0FBR0osVUFBVUcsR0FBRztJQUNsRywyRUFBMkU7SUFDM0UsMkVBQTJFO0lBQzNFLHNDQUFzQztJQUN0QyxFQUFFO0lBQ0YscUVBQXFFO0lBQ3JFLDBFQUEwRTtJQUMxRSxnQkFBZ0I7SUFDaEIsTUFBTUEsTUFBTSxDQUFDLEdBQUc1RyxPQUFPb0gsZ0JBQWdCLEVBQUVYLFVBQVVHLEdBQUcsRUFBRU87SUFDeEQsd0VBQXdFO0lBQ3hFLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUsbUJBQW1CO0lBQ25CLE1BQU1FLGNBQWMsT0FBT1QsUUFBUSxZQUFZQSxRQUFRLFFBQVEsT0FBT0EsSUFBSVUsSUFBSSxLQUFLLGFBQWEsQ0FBQyxHQUFHdEgsT0FBT3VILEdBQUcsRUFBRVgsT0FBT0E7SUFDdkgsSUFBSSxDQUFDUyxhQUFhO1FBQ2QscUVBQXFFO1FBQ3JFLHlFQUF5RTtRQUN6RSxrQ0FBa0M7UUFDbEMsOENBQThDO1FBQzlDLElBQUlWLFdBQVdGLFVBQVVFLFFBQVE7UUFDakMsSUFBSUEsYUFBYSxNQUFNO1lBQ25COztPQUVMLEdBQUcsc0JBQXNCO1lBQ3BCLE1BQU1hLGNBQWMzRyxlQUFlO2dCQUMvQjttQkFDRzBEO2FBQ04sRUFBRWlDO1lBQ0hDLFVBQVVFLFFBQVEsR0FBR0EsV0FBVyxDQUFDLEdBQUd2RyxxQkFBcUJxSCxtQkFBbUIsRUFBRSxJQUFJQyxJQUFJeEIsS0FBS3lCLFNBQVNDLE1BQU0sR0FBR0osYUFBYTdCLFFBQVFrQyxPQUFPLEVBQUV2QjtZQUMzSUcsVUFBVVEsZ0JBQWdCLEdBQUc7UUFDakM7UUFDQTs7S0FFSCxHQUFHLDhEQUE4RDtRQUM5RCxNQUFNLENBQUNhLFlBQVlDLHFCQUFxQixHQUFHLENBQUMsR0FBRy9ILE9BQU91SCxHQUFHLEVBQUVaO1FBQzNELElBQUksQ0FBQ0YsVUFBVVEsZ0JBQWdCLEVBQUU7WUFDN0Isd0dBQXdHO1lBQ3hHZSxXQUFXO2dCQUNOLElBQUdoSSxPQUFPaUksZUFBZSxFQUFFO29CQUN4QjFCLHVCQUF1QkMsVUFBVXNCLFlBQVlDO2dCQUNqRDtZQUNKO1lBQ0EsdUhBQXVIO1lBQ3ZILHlCQUF5QjtZQUN6QnRCLFVBQVVRLGdCQUFnQixHQUFHO1FBQ2pDO1FBQ0EseUdBQXlHO1FBQ3hHLElBQUdqSCxPQUFPdUgsR0FBRyxFQUFFLENBQUMsR0FBR2xILGlCQUFpQjZILHFCQUFxQjtJQUM5RDtJQUNBLHlFQUF5RTtJQUN6RSxNQUFNQyxVQUNRLFdBQUgsR0FBSSxJQUFHcEksWUFBWWdHLEdBQUcsRUFBRTVGLCtCQUErQmlJLG1CQUFtQixDQUFDQyxRQUFRLEVBQUU7UUFDNUY3SSxPQUFPO1lBQ0g0RyxNQUFNQSxJQUFJLENBQUMsRUFBRSxDQUFDSCxrQkFBa0I7WUFDaENFLFlBQVlNLFVBQVVNLGNBQWM7WUFDcEMsa0RBQWtEO1lBQ2xEYixLQUFLQTtRQUNUO1FBQ0E5QixVQUFVaUQ7SUFDZDtJQUNBLGlGQUFpRjtJQUNqRixPQUFPYztBQUNYO01BL0ZhbkM7QUFnR2I7OztDQUdDLEdBQUcsU0FBU3NDLGdCQUFnQjVDLEtBQUs7SUFDOUIsSUFBSSxFQUFFdEIsUUFBUSxFQUFFbUUsT0FBTyxFQUFFQyxhQUFhLEVBQUVDLGNBQWMsRUFBRUMsVUFBVSxFQUFFLEdBQUdoRDtJQUN2RSxJQUFJZ0QsWUFBWTtRQUNaLE9BQXFCLFdBQUgsR0FBSSxJQUFHM0ksWUFBWWdHLEdBQUcsRUFBRS9GLE9BQU8ySSxRQUFRLEVBQUU7WUFDdkRDLFVBQXdCLFdBQUgsR0FBSSxJQUFHN0ksWUFBWThJLElBQUksRUFBRTlJLFlBQVkrSSxRQUFRLEVBQUU7Z0JBQ2hFMUUsVUFBVTtvQkFDTm9FO29CQUNBQztvQkFDQUY7aUJBQ0g7WUFDTDtZQUNBbkUsVUFBVUE7UUFDZDtJQUNKO0lBQ0EsT0FBcUIsV0FBSCxHQUFJLElBQUdyRSxZQUFZZ0csR0FBRyxFQUFFaEcsWUFBWStJLFFBQVEsRUFBRTtRQUM1RDFFLFVBQVVBO0lBQ2Q7QUFDSjtNQWpCYWtFO0FBa0JiLFNBQVMzSSxrQkFBa0IrRixLQUFLO0lBQzVCLElBQUksRUFBRU8saUJBQWlCLEVBQUUxQixXQUFXLEVBQUV4QyxLQUFLLEVBQUVnSCxXQUFXLEVBQUVDLFlBQVksRUFBRUMsY0FBYyxFQUFFQyxlQUFlLEVBQUVYLE9BQU8sRUFBRUMsYUFBYSxFQUFFQyxjQUFjLEVBQUVDLFVBQVUsRUFBRVMsUUFBUSxFQUFFQyxRQUFRLEVBQUVDLGNBQWMsRUFBRUMsTUFBTSxFQUFFLEdBQUc1RDtJQUM1TSxNQUFNQyxVQUFVLENBQUMsR0FBRzNGLE9BQU80RixVQUFVLEVBQUV6RiwrQkFBK0JpSSxtQkFBbUI7SUFDekYsSUFBSSxDQUFDekMsU0FBUztRQUNWLE1BQU0sSUFBSUcsTUFBTTtJQUNwQjtJQUNBLE1BQU0sRUFBRUssVUFBVSxFQUFFQyxJQUFJLEVBQUVGLEdBQUcsRUFBRSxHQUFHUDtJQUNsQyw0Q0FBNEM7SUFDNUMsSUFBSTRELDhCQUE4QnBELFdBQVd6RyxHQUFHLENBQUN1RztJQUNqRCxtRUFBbUU7SUFDbkUseUpBQXlKO0lBQ3pKLElBQUksQ0FBQ3NELDZCQUE2QjtRQUM5QkEsOEJBQThCLElBQUl2QztRQUNsQ2IsV0FBV2UsR0FBRyxDQUFDakIsbUJBQW1Cc0Q7SUFDdEM7SUFDQSxxQ0FBcUM7SUFDckMsOElBQThJO0lBQzlJLE1BQU1DLGNBQWNwRCxJQUFJLENBQUMsRUFBRSxDQUFDSCxrQkFBa0IsQ0FBQyxFQUFFO0lBQ2pELGdJQUFnSTtJQUNoSSxNQUFNd0QsMkJBQTJCLENBQUMsR0FBRzlJLGlCQUFpQitJLGVBQWUsRUFBRUY7SUFDdkU7O0dBRUQsR0FBRywrREFBK0Q7SUFDakUsTUFBTUcsb0JBQW9CO1FBQ3RCSDtLQUNIO0lBQ0QsT0FBcUIsV0FBSCxHQUFJLElBQUd6SixZQUFZOEksSUFBSSxFQUFFOUksWUFBWStJLFFBQVEsRUFBRTtRQUM3RDFFLFVBQVU7WUFDTmtGO1lBQ0FLLGtCQUFrQkMsR0FBRyxDQUFDLENBQUNDO2dCQUNuQixNQUFNQyx3QkFBd0IsQ0FBQyxHQUFHbkosaUJBQWlCK0ksZUFBZSxFQUFFRztnQkFDcEUsTUFBTXhELFdBQVcsQ0FBQyxHQUFHekYsc0JBQXNCbUosb0JBQW9CLEVBQUVGO2dCQUNqRSxPQVFXOzs7Ozs7OztVQUFqQixHQUFHLFdBQVcsR0FBSSxJQUFHOUosWUFBWThJLElBQUksRUFBRTFJLCtCQUErQjZKLGVBQWUsQ0FBQzNCLFFBQVEsRUFBRTtvQkFDdEY3SSxPQUFxQixXQUFILEdBQUksSUFBR08sWUFBWWdHLEdBQUcsRUFBRU4sdUJBQXVCO3dCQUM3RGxCLGFBQWFBO3dCQUNiSCxVQUF3QixXQUFILEdBQUksSUFBR3JFLFlBQVlnRyxHQUFHLEVBQUV6RixlQUFlMkosYUFBYSxFQUFFOzRCQUN2RUMsZ0JBQWdCbkk7NEJBQ2hCZ0gsYUFBYUE7NEJBQ2JDLGNBQWNBOzRCQUNkNUUsVUFBd0IsV0FBSCxHQUFJLElBQUdyRSxZQUFZZ0csR0FBRyxFQUFFdUMsaUJBQWlCO2dDQUMxREksWUFBWUE7Z0NBQ1pILFNBQVNBO2dDQUNUQyxlQUFlQTtnQ0FDZkMsZ0JBQWdCQTtnQ0FDaEJyRSxVQUF3QixXQUFILEdBQUksSUFBR3JFLFlBQVlnRyxHQUFHLEVBQUVyRixrQkFBa0J5SixnQkFBZ0IsRUFBRTtvQ0FDN0VmLFVBQVVBO29DQUNWQyxnQkFBZ0JBO29DQUNoQmpGLFVBQXdCLFdBQUgsR0FBSSxJQUFHckUsWUFBWWdHLEdBQUcsRUFBRXRGLGtCQUFrQjJKLGdCQUFnQixFQUFFO3dDQUM3RWhHLFVBQXdCLFdBQUgsR0FBSSxJQUFHckUsWUFBWWdHLEdBQUcsRUFBRUMsbUJBQW1COzRDQUM1REMsbUJBQW1CQTs0Q0FDbkJDLEtBQUtBOzRDQUNMRSxNQUFNQTs0Q0FDTkQsWUFBWW9EOzRDQUNaaEYsYUFBYUE7NENBQ2I4QixVQUFVQTs0Q0FDVmdFLFVBQVVaLDZCQUE2Qks7d0NBQzNDO29DQUNKO2dDQUNKOzRCQUNKO3dCQUNKO29CQUNKO29CQUNBMUYsVUFBVTt3QkFDTjZFO3dCQUNBQzt3QkFDQUM7cUJBQ0g7Z0JBQ0wsR0FBRyxDQUFDLEdBQUd2SSxzQkFBc0JtSixvQkFBb0IsRUFBRUYsa0JBQWtCO1lBQ3pFO1NBQ0g7SUFDTDtBQUNKO01BL0VTbEs7QUFpRlQsSUFBSSxDQUFDLE9BQU9KLFFBQVErQyxPQUFPLEtBQUssY0FBZSxPQUFPL0MsUUFBUStDLE9BQU8sS0FBSyxZQUFZL0MsUUFBUStDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTy9DLFFBQVErQyxPQUFPLENBQUNnSSxVQUFVLEtBQUssYUFBYTtJQUNyS2pMLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUStDLE9BQU8sRUFBRSxjQUFjO1FBQUU5QyxPQUFPO0lBQUs7SUFDbkVILE9BQU9rTCxNQUFNLENBQUNoTCxRQUFRK0MsT0FBTyxFQUFFL0M7SUFDL0JpTCxPQUFPakwsT0FBTyxHQUFHQSxRQUFRK0MsT0FBTztBQUNsQyxFQUVBLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2xheW91dC1yb3V0ZXIuanM/MGJmYSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgLyoqXG4gKiBPdXRlckxheW91dFJvdXRlciBoYW5kbGVzIHRoZSBjdXJyZW50IHNlZ21lbnQgYXMgd2VsbCBhcyA8T2Zmc2NyZWVuPiByZW5kZXJpbmcgb2Ygb3RoZXIgc2VnbWVudHMuXG4gKiBJdCBjYW4gYmUgcmVuZGVyZWQgbmV4dCB0byBlYWNoIG90aGVyIHdpdGggYSBkaWZmZXJlbnQgYHBhcmFsbGVsUm91dGVyS2V5YCwgYWxsb3dpbmcgZm9yIFBhcmFsbGVsIHJvdXRlcy5cbiAqLyBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE91dGVyTGF5b3V0Um91dGVyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9yZWFjdGRvbSA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0LWRvbVwiKSk7XG5jb25zdCBfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5jb25zdCBfZmV0Y2hzZXJ2ZXJyZXNwb25zZSA9IHJlcXVpcmUoXCIuL3JvdXRlci1yZWR1Y2VyL2ZldGNoLXNlcnZlci1yZXNwb25zZVwiKTtcbmNvbnN0IF9pbmZpbml0ZXByb21pc2UgPSByZXF1aXJlKFwiLi9pbmZpbml0ZS1wcm9taXNlXCIpO1xuY29uc3QgX2Vycm9yYm91bmRhcnkgPSByZXF1aXJlKFwiLi9lcnJvci1ib3VuZGFyeVwiKTtcbmNvbnN0IF9tYXRjaHNlZ21lbnRzID0gcmVxdWlyZShcIi4vbWF0Y2gtc2VnbWVudHNcIik7XG5jb25zdCBfaGFuZGxlc21vb3Roc2Nyb2xsID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2hhbmRsZS1zbW9vdGgtc2Nyb2xsXCIpO1xuY29uc3QgX3JlZGlyZWN0Ym91bmRhcnkgPSByZXF1aXJlKFwiLi9yZWRpcmVjdC1ib3VuZGFyeVwiKTtcbmNvbnN0IF9ub3Rmb3VuZGJvdW5kYXJ5ID0gcmVxdWlyZShcIi4vbm90LWZvdW5kLWJvdW5kYXJ5XCIpO1xuY29uc3QgX2dldHNlZ21lbnR2YWx1ZSA9IHJlcXVpcmUoXCIuL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2dldC1zZWdtZW50LXZhbHVlXCIpO1xuY29uc3QgX2NyZWF0ZXJvdXRlcmNhY2hla2V5ID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXIvY3JlYXRlLXJvdXRlci1jYWNoZS1rZXlcIik7XG4vKipcbiAqIEFkZCByZWZldGNoIG1hcmtlciB0byByb3V0ZXIgc3RhdGUgYXQgdGhlIHBvaW50IG9mIHRoZSBjdXJyZW50IGxheW91dCBzZWdtZW50LlxuICogVGhpcyBlbnN1cmVzIHRoZSByZXNwb25zZSByZXR1cm5lZCBpcyBub3QgZnVydGhlciBkb3duIHRoYW4gdGhlIGN1cnJlbnQgbGF5b3V0IHNlZ21lbnQuXG4gKi8gZnVuY3Rpb24gd2Fsa0FkZFJlZmV0Y2goc2VnbWVudFBhdGhUb1dhbGssIHRyZWVUb1JlY3JlYXRlKSB7XG4gICAgaWYgKHNlZ21lbnRQYXRoVG9XYWxrKSB7XG4gICAgICAgIGNvbnN0IFtzZWdtZW50LCBwYXJhbGxlbFJvdXRlS2V5XSA9IHNlZ21lbnRQYXRoVG9XYWxrO1xuICAgICAgICBjb25zdCBpc0xhc3QgPSBzZWdtZW50UGF0aFRvV2Fsay5sZW5ndGggPT09IDI7XG4gICAgICAgIGlmICgoMCwgX21hdGNoc2VnbWVudHMubWF0Y2hTZWdtZW50KSh0cmVlVG9SZWNyZWF0ZVswXSwgc2VnbWVudCkpIHtcbiAgICAgICAgICAgIGlmICh0cmVlVG9SZWNyZWF0ZVsxXS5oYXNPd25Qcm9wZXJ0eShwYXJhbGxlbFJvdXRlS2V5KSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0xhc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViVHJlZSA9IHdhbGtBZGRSZWZldGNoKHVuZGVmaW5lZCwgdHJlZVRvUmVjcmVhdGVbMV1bcGFyYWxsZWxSb3V0ZUtleV0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZVRvUmVjcmVhdGVbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udHJlZVRvUmVjcmVhdGVbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcmFsbGVsUm91dGVLZXldOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRyZWVbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRyZWVbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRyZWVbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVmZXRjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICB0cmVlVG9SZWNyZWF0ZVswXSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udHJlZVRvUmVjcmVhdGVbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGFyYWxsZWxSb3V0ZUtleV06IHdhbGtBZGRSZWZldGNoKHNlZ21lbnRQYXRoVG9XYWxrLnNsaWNlKDIpLCB0cmVlVG9SZWNyZWF0ZVsxXVtwYXJhbGxlbFJvdXRlS2V5XSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRyZWVUb1JlY3JlYXRlO1xufVxuLy8gVE9ETy1BUFA6IFJlcGxhY2Ugd2l0aCBuZXcgUmVhY3QgQVBJIGZvciBmaW5kaW5nIGRvbSBub2RlcyB3aXRob3V0IGEgYHJlZmAgd2hlbiBhdmFpbGFibGVcbi8qKlxuICogV3JhcHMgUmVhY3RET00uZmluZERPTU5vZGUgd2l0aCBhZGRpdGlvbmFsIGxvZ2ljIHRvIGhpZGUgUmVhY3QgU3RyaWN0IE1vZGUgd2FybmluZ1xuICovIGZ1bmN0aW9uIGZpbmRET01Ob2RlKGluc3RhbmNlKSB7XG4gICAgLy8gVHJlZS1zaGFrZSBmb3Igc2VydmVyIGJ1bmRsZVxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gbnVsbDtcbiAgICAvLyBPbmx5IGFwcGx5IHN0cmljdCBtb2RlIHdhcm5pbmcgd2hlbiBub3QgaW4gcHJvZHVjdGlvblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1lc3NhZ2VzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgc3RyaWN0IG1vZGUgd2FybmluZyBmb3IgdGhlIGZpbmREb21Ob2RlIGNhbGwgYmVsb3dcbiAgICAgICAgICAgICAgICBpZiAoIW1lc3NhZ2VzWzBdLmluY2x1ZGVzKFwiV2FybmluZzogJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLlwiKSkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbENvbnNvbGVFcnJvciguLi5tZXNzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBfcmVhY3Rkb20uZGVmYXVsdC5maW5kRE9NTm9kZShpbnN0YW5jZSk7XG4gICAgICAgIH0gZmluYWxseXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IgPSBvcmlnaW5hbENvbnNvbGVFcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX3JlYWN0ZG9tLmRlZmF1bHQuZmluZERPTU5vZGUoaW5zdGFuY2UpO1xufVxuY29uc3QgcmVjdFByb3BlcnRpZXMgPSBbXG4gICAgXCJib3R0b21cIixcbiAgICBcImhlaWdodFwiLFxuICAgIFwibGVmdFwiLFxuICAgIFwicmlnaHRcIixcbiAgICBcInRvcFwiLFxuICAgIFwid2lkdGhcIixcbiAgICBcInhcIixcbiAgICBcInlcIlxuXTtcbi8qKlxuICogQ2hlY2sgaWYgYSBIVE1MRWxlbWVudCBpcyBoaWRkZW4gb3IgZml4ZWQvc3RpY2t5IHBvc2l0aW9uXG4gKi8gZnVuY3Rpb24gc2hvdWxkU2tpcEVsZW1lbnQoZWxlbWVudCkge1xuICAgIC8vIHdlIGlnbm9yZSBmaXhlZCBvciBzdGlja3kgcG9zaXRpb25lZCBlbGVtZW50cyBzaW5jZSB0aGV5J2xsIGxpa2VseSBwYXNzIHRoZSBcImluLXZpZXdwb3J0XCIgY2hlY2tcbiAgICAvLyBhbmQgd2lsbCByZXN1bHQgaW4gYSBzaXR1YXRpb24gd2UgYmFpbCBvbiBzY3JvbGwgYmVjYXVzZSBvZiBzb21ldGhpbmcgbGlrZSBhIGZpeGVkIG5hdixcbiAgICAvLyBldmVuIHRob3VnaCB0aGUgYWN0dWFsIHBhZ2UgY29udGVudCBpcyBvZmZzY3JlZW5cbiAgICBpZiAoW1xuICAgICAgICBcInN0aWNreVwiLFxuICAgICAgICBcImZpeGVkXCJcbiAgICBdLmluY2x1ZGVzKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJTa2lwcGluZyBhdXRvLXNjcm9sbCBiZWhhdmlvciBkdWUgdG8gYHBvc2l0aW9uOiBzdGlja3lgIG9yIGBwb3NpdGlvbjogZml4ZWRgIG9uIGVsZW1lbnQ6XCIsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBVc2VzIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIHRvIGNoZWNrIGlmIHRoZSBlbGVtZW50IGlzIGhpZGRlbiBpbnN0ZWFkIG9mIGBvZmZzZXRQYXJlbnRgXG4gICAgLy8gYmVjYXVzZSBgb2Zmc2V0UGFyZW50YCBkb2Vzbid0IGNvbnNpZGVyIGRvY3VtZW50L2JvZHlcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gcmVjdFByb3BlcnRpZXMuZXZlcnkoKGl0ZW0pPT5yZWN0W2l0ZW1dID09PSAwKTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHRvcCBjb3JuZXIgb2YgdGhlIEhUTUxFbGVtZW50IGlzIGluIHRoZSB2aWV3cG9ydC5cbiAqLyBmdW5jdGlvbiB0b3BPZkVsZW1lbnRJblZpZXdwb3J0KGVsZW1lbnQsIHZpZXdwb3J0SGVpZ2h0KSB7XG4gICAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHJlY3QudG9wID49IDAgJiYgcmVjdC50b3AgPD0gdmlld3BvcnRIZWlnaHQ7XG59XG4vKipcbiAqIEZpbmQgdGhlIERPTSBub2RlIGZvciBhIGhhc2ggZnJhZ21lbnQuXG4gKiBJZiBgdG9wYCB0aGUgcGFnZSBoYXMgdG8gc2Nyb2xsIHRvIHRoZSB0b3Agb2YgdGhlIHBhZ2UuIFRoaXMgbWlycm9ycyB0aGUgYnJvd3NlcidzIGJlaGF2aW9yLlxuICogSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYW4gaWQsIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGF0IGlkLlxuICogSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYSBuYW1lLCB0aGUgcGFnZSBoYXMgdG8gc2Nyb2xsIHRvIHRoZSBmaXJzdCBlbGVtZW50IHdpdGggdGhhdCBuYW1lLlxuICovIGZ1bmN0aW9uIGdldEhhc2hGcmFnbWVudERvbU5vZGUoaGFzaEZyYWdtZW50KSB7XG4gICAgLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYHRvcGAgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgdG9wIG9mIHRoZSBwYWdlLlxuICAgIGlmIChoYXNoRnJhZ21lbnQgPT09IFwidG9wXCIpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmJvZHk7XG4gICAgfVxuICAgIHZhciBfZG9jdW1lbnRfZ2V0RWxlbWVudEJ5SWQ7XG4gICAgLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgYW4gaWQsIHRoZSBwYWdlIGhhcyB0byBzY3JvbGwgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGF0IGlkLlxuICAgIHJldHVybiAoX2RvY3VtZW50X2dldEVsZW1lbnRCeUlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaEZyYWdtZW50KSkgIT0gbnVsbCA/IF9kb2N1bWVudF9nZXRFbGVtZW50QnlJZCA6IC8vIElmIHRoZSBoYXNoIGZyYWdtZW50IGlzIGEgbmFtZSwgdGhlIHBhZ2UgaGFzIHRvIHNjcm9sbCB0byB0aGUgZmlyc3QgZWxlbWVudCB3aXRoIHRoYXQgbmFtZS5cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShoYXNoRnJhZ21lbnQpWzBdO1xufVxuY2xhc3MgSW5uZXJTY3JvbGxBbmRGb2N1c0hhbmRsZXIgZXh0ZW5kcyBfcmVhY3QuZGVmYXVsdC5Db21wb25lbnQge1xuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB0aGlzLmhhbmRsZVBvdGVudGlhbFNjcm9sbCgpO1xuICAgIH1cbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICAgIC8vIEJlY2F1c2UgdGhpcyBwcm9wZXJ0eSBpcyBvdmVyd3JpdHRlbiBpbiBoYW5kbGVQb3RlbnRpYWxTY3JvbGwgaXQncyBmaW5lIHRvIGFsd2F5cyBydW4gaXQgd2hlbiB0cnVlIGFzIGl0J2xsIGJlIHNldCB0byBmYWxzZSBmb3Igc3Vic2VxdWVudCByZW5kZXJzLlxuICAgICAgICBpZiAodGhpcy5wcm9wcy5mb2N1c0FuZFNjcm9sbFJlZi5hcHBseSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb3RlbnRpYWxTY3JvbGwoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMuaGFuZGxlUG90ZW50aWFsU2Nyb2xsID0gKCk9PntcbiAgICAgICAgICAgIC8vIEhhbmRsZSBzY3JvbGwgYW5kIGZvY3VzLCBpdCdzIG9ubHkgYXBwbGllZCBvbmNlIGluIHRoZSBmaXJzdCB1c2VFZmZlY3QgdGhhdCB0cmlnZ2VycyB0aGF0IGNoYW5nZWQuXG4gICAgICAgICAgICBjb25zdCB7IGZvY3VzQW5kU2Nyb2xsUmVmLCBzZWdtZW50UGF0aCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgICAgIGlmIChmb2N1c0FuZFNjcm9sbFJlZi5hcHBseSkge1xuICAgICAgICAgICAgICAgIC8vIHNlZ21lbnRQYXRocyBpcyBhbiBhcnJheSBvZiBzZWdtZW50IHBhdGhzIHRoYXQgc2hvdWxkIGJlIHNjcm9sbGVkIHRvXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgc2VnbWVudCBwYXRoIGlzIG5vdCBpbiB0aGUgYXJyYXksIHRoZSBzY3JvbGwgaXMgbm90IGFwcGxpZWRcbiAgICAgICAgICAgICAgICAvLyB1bmxlc3MgdGhlIGFycmF5IGlzIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZSBzY3JvbGwgaXMgYWx3YXlzIGFwcGxpZWRcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzLmxlbmd0aCAhPT0gMCAmJiAhZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzLnNvbWUoKHNjcm9sbFJlZlNlZ21lbnRQYXRoKT0+c2VnbWVudFBhdGguZXZlcnkoKHNlZ21lbnQsIGluZGV4KT0+KDAsIF9tYXRjaHNlZ21lbnRzLm1hdGNoU2VnbWVudCkoc2VnbWVudCwgc2Nyb2xsUmVmU2VnbWVudFBhdGhbaW5kZXhdKSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGRvbU5vZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hGcmFnbWVudCA9IGZvY3VzQW5kU2Nyb2xsUmVmLmhhc2hGcmFnbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoaGFzaEZyYWdtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbU5vZGUgPSBnZXRIYXNoRnJhZ21lbnREb21Ob2RlKGhhc2hGcmFnbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGBmaW5kRE9NTm9kZWAgaXMgdHJpY2t5IGJlY2F1c2UgaXQgcmV0dXJucyBqdXN0IHRoZSBmaXJzdCBjaGlsZCBpZiB0aGUgY29tcG9uZW50IGlzIGEgZnJhZ21lbnQuXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBhbHJlYWR5IGNhdXNlZCBhIGJ1ZyB3aGVyZSB0aGUgZmlyc3QgY2hpbGQgd2FzIGEgPGxpbmsvPiBpbiBoZWFkLlxuICAgICAgICAgICAgICAgIGlmICghZG9tTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBkb21Ob2RlID0gZmluZERPTU5vZGUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIERPTSBub2RlIHRoaXMgbGF5b3V0LXJvdXRlciBsZXZlbCBpcyBza2lwcGVkLiBJdCdsbCBiZSBoYW5kbGVkIGhpZ2hlci11cCBpbiB0aGUgdHJlZS5cbiAgICAgICAgICAgICAgICBpZiAoIShkb21Ob2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBWZXJpZnkgaWYgdGhlIGVsZW1lbnQgaXMgYSBIVE1MRWxlbWVudCBhbmQgaWYgd2Ugd2FudCB0byBjb25zaWRlciBpdCBmb3Igc2Nyb2xsIGJlaGF2aW9yLlxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIHNraXBwZWQsIHRyeSB0byBzZWxlY3QgdGhlIG5leHQgc2libGluZyBhbmQgdHJ5IGFnYWluLlxuICAgICAgICAgICAgICAgIHdoaWxlKCEoZG9tTm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB8fCBzaG91bGRTa2lwRWxlbWVudChkb21Ob2RlKSl7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vIHNpYmxpbmdzIGZvdW5kIHRoYXQgbWF0Y2ggdGhlIGNyaXRlcmlhIGFyZSBmb3VuZCwgc28gaGFuZGxlIHNjcm9sbCBoaWdoZXIgdXAgaW4gdGhlIHRyZWUgaW5zdGVhZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbU5vZGUubmV4dEVsZW1lbnRTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG9tTm9kZSA9IGRvbU5vZGUubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTdGF0ZSBpcyBtdXRhdGVkIHRvIGVuc3VyZSB0aGF0IHRoZSBmb2N1cyBhbmQgc2Nyb2xsIGlzIGFwcGxpZWQgb25seSBvbmNlLlxuICAgICAgICAgICAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLmFwcGx5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWYuaGFzaEZyYWdtZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmb2N1c0FuZFNjcm9sbFJlZi5zZWdtZW50UGF0aHMgPSBbXTtcbiAgICAgICAgICAgICAgICAoMCwgX2hhbmRsZXNtb290aHNjcm9sbC5oYW5kbGVTbW9vdGhTY3JvbGwpKCgpPT57XG4gICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgaGFzaCBzY3JvbGwsIHdlIG9ubHkgbmVlZCB0byBzY3JvbGwgdGhlIGVsZW1lbnQgaW50byB2aWV3XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNoRnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbU5vZGUuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCB2aWV3cG9ydCBoZWlnaHQgYmVjYXVzZSByZWFkaW5nIGBjbGllbnRIZWlnaHRgIGNhdXNlcyBhIHJlZmxvdyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGl0IHdvbid0IGNoYW5nZSBkdXJpbmcgdGhpcyBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaHRtbEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gaHRtbEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCdzIHRvcCBlZGdlIGlzIGFscmVhZHkgaW4gdGhlIHZpZXdwb3J0LCBleGl0IGVhcmx5LlxuICAgICAgICAgICAgICAgICAgICBpZiAodG9wT2ZFbGVtZW50SW5WaWV3cG9ydChkb21Ob2RlLCB2aWV3cG9ydEhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHRyeSBzY3JvbGxpbmcgZ28gdGhlIHRvcCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHBhZ2VzXG4gICAgICAgICAgICAgICAgICAgIC8vIHNjcm9sbEludG9WaWV3KCkgY2FsbGVkIG9uIGA8aHRtbC8+YCBlbGVtZW50IHNjcm9sbHMgaG9yaXpvbnRhbGx5IG9uIGNocm9tZSBhbmQgZmlyZWZveCAodGhhdCBzaG91bGRuJ3QgaGFwcGVuKVxuICAgICAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCB1c2UgaXQgdG8gc2Nyb2xsIGhvcml6b250YWxseSBmb2xsb3dpbmcgUlRMIGJ1dCB0aGF0IGFsc28gc2VlbXMgdG8gYmUgYnJva2VuIC0gaXQgd2lsbCBhbHdheXMgc2Nyb2xsIGxlZnRcbiAgICAgICAgICAgICAgICAgICAgLy8gc2Nyb2xsTGVmdCA9IDAgYWxzbyBzZWVtcyB0byBpZ25vcmUgUlRMIGFuZCBtYW51YWxseSBjaGVja2luZyBmb3IgUlRMIGlzIHRvbyBtdWNoIGhhc3NsZSBzbyB3ZSB3aWxsIHNjcm9sbCBqdXN0IHZlcnRpY2FsbHlcbiAgICAgICAgICAgICAgICAgICAgaHRtbEVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2Nyb2xsIHRvIGRvbU5vZGUgaWYgZG9tTm9kZSBpcyBub3QgaW4gdmlld3BvcnQgd2hlbiBzY3JvbGxlZCB0byB0b3Agb2YgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b3BPZkVsZW1lbnRJblZpZXdwb3J0KGRvbU5vZGUsIHZpZXdwb3J0SGVpZ2h0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9tTm9kZS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIGZvcmNlIGxheW91dCBieSBxdWVyeWluZyBkb21Ob2RlIHBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgIGRvbnRGb3JjZUxheW91dDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb25seUhhc2hDaGFuZ2U6IGZvY3VzQW5kU2Nyb2xsUmVmLm9ubHlIYXNoQ2hhbmdlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gTXV0YXRlIGFmdGVyIHNjcm9sbGluZyBzbyB0aGF0IGl0IGNhbiBiZSByZWFkIGJ5IGBoYW5kbGVTbW9vdGhTY3JvbGxgXG4gICAgICAgICAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWYub25seUhhc2hDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBTZXQgZm9jdXMgb24gdGhlIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBkb21Ob2RlLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuZnVuY3Rpb24gU2Nyb2xsQW5kRm9jdXNIYW5kbGVyKHBhcmFtKSB7XG4gICAgbGV0IHsgc2VnbWVudFBhdGgsIGNoaWxkcmVuIH0gPSBwYXJhbTtcbiAgICBjb25zdCBjb250ZXh0ID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFyaWFudCBnbG9iYWwgbGF5b3V0IHJvdXRlciBub3QgbW91bnRlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoSW5uZXJTY3JvbGxBbmRGb2N1c0hhbmRsZXIsIHtcbiAgICAgICAgc2VnbWVudFBhdGg6IHNlZ21lbnRQYXRoLFxuICAgICAgICBmb2N1c0FuZFNjcm9sbFJlZjogY29udGV4dC5mb2N1c0FuZFNjcm9sbFJlZixcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG59XG4vKipcbiAqIElubmVyTGF5b3V0Um91dGVyIGhhbmRsZXMgcmVuZGVyaW5nIHRoZSBwcm92aWRlZCBzZWdtZW50IGJhc2VkIG9uIHRoZSBjYWNoZS5cbiAqLyBmdW5jdGlvbiBJbm5lckxheW91dFJvdXRlcihwYXJhbSkge1xuICAgIGxldCB7IHBhcmFsbGVsUm91dGVyS2V5LCB1cmwsIGNoaWxkTm9kZXMsIHNlZ21lbnRQYXRoLCB0cmVlLCAvLyBUT0RPLUFQUDogaW1wbGVtZW50IGA8T2Zmc2NyZWVuPmAgd2hlbiBhdmFpbGFibGUuXG4gICAgLy8gaXNBY3RpdmUsXG4gICAgY2FjaGVLZXkgfSA9IHBhcmFtO1xuICAgIGNvbnN0IGNvbnRleHQgPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5HbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0KTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YXJpYW50IGdsb2JhbCBsYXlvdXQgcm91dGVyIG5vdCBtb3VudGVkXCIpO1xuICAgIH1cbiAgICBjb25zdCB7IGJ1aWxkSWQsIGNoYW5nZUJ5U2VydmVyUmVzcG9uc2UsIHRyZWU6IGZ1bGxUcmVlIH0gPSBjb250ZXh0O1xuICAgIC8vIFJlYWQgc2VnbWVudCBwYXRoIGZyb20gdGhlIHBhcmFsbGVsIHJvdXRlciBjYWNoZSBub2RlLlxuICAgIGxldCBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzLmdldChjYWNoZUtleSk7XG4gICAgLy8gV2hlbiBkYXRhIGlzIG5vdCBhdmFpbGFibGUgZHVyaW5nIHJlbmRlcmluZyBjbGllbnQtc2lkZSB3ZSBuZWVkIHRvIGZldGNoXG4gICAgLy8gaXQgZnJvbSB0aGUgc2VydmVyLlxuICAgIGlmIChjaGlsZE5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBuZXdMYXp5Q2FjaGVOb2RlID0ge1xuICAgICAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgICAgICByc2M6IG51bGwsXG4gICAgICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgICAgIGhlYWQ6IG51bGwsXG4gICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpLFxuICAgICAgICAgICAgbGF6eURhdGFSZXNvbHZlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICogRmxpZ2h0IGRhdGEgZmV0Y2gga2lja2VkIG9mZiBkdXJpbmcgcmVuZGVyIGFuZCBwdXQgaW50byB0aGUgY2FjaGUuXG4gICAgICovIGNoaWxkTm9kZSA9IG5ld0xhenlDYWNoZU5vZGU7XG4gICAgICAgIGNoaWxkTm9kZXMuc2V0KGNhY2hlS2V5LCBuZXdMYXp5Q2FjaGVOb2RlKTtcbiAgICB9XG4gICAgLy8gYHJzY2AgcmVwcmVzZW50cyB0aGUgcmVuZGVyYWJsZSBub2RlIGZvciB0aGlzIHNlZ21lbnQuXG4gICAgLy8gSWYgdGhpcyBzZWdtZW50IGhhcyBhIGBwcmVmZXRjaFJzY2AsIGl0J3MgdGhlIHN0YXRpY2FsbHkgcHJlZmV0Y2hlZCBkYXRhLlxuICAgIC8vIFdlIHNob3VsZCB1c2UgdGhhdCBvbiBpbml0aWFsIHJlbmRlciBpbnN0ZWFkIG9mIGByc2NgLiBUaGVuIHdlJ2xsIHN3aXRjaFxuICAgIC8vIHRvIGByc2NgIHdoZW4gdGhlIGR5bmFtaWMgcmVzcG9uc2Ugc3RyZWFtcyBpbi5cbiAgICAvL1xuICAgIC8vIElmIG5vIHByZWZldGNoIGRhdGEgaXMgYXZhaWxhYmxlLCB0aGVuIHdlIGdvIHN0cmFpZ2h0IHRvIHJlbmRlcmluZyBgcnNjYC5cbiAgICBjb25zdCByZXNvbHZlZFByZWZldGNoUnNjID0gY2hpbGROb2RlLnByZWZldGNoUnNjICE9PSBudWxsID8gY2hpbGROb2RlLnByZWZldGNoUnNjIDogY2hpbGROb2RlLnJzYztcbiAgICAvLyBXZSB1c2UgYHVzZURlZmVycmVkVmFsdWVgIHRvIGhhbmRsZSBzd2l0Y2hpbmcgYmV0d2VlbiB0aGUgcHJlZmV0Y2hlZCBhbmRcbiAgICAvLyBmaW5hbCB2YWx1ZXMuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgcmV0dXJuZWQgb24gaW5pdGlhbCByZW5kZXIsIHRoZW4gaXRcbiAgICAvLyByZS1yZW5kZXJzIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50LlxuICAgIC8vXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGB1c2VEZWZlcnJlZFZhbHVlYCBpcyBvbmx5XG4gICAgLy8gYXZhaWxhYmxlIGluIHRoZSBleHBlcmltZW50YWwgYnVpbGRzLiBXaGVuIGl0cyBkaXNhYmxlZCwgaXQgd2lsbCBhbHdheXNcbiAgICAvLyByZXR1cm4gYHJzY2AuXG4gICAgY29uc3QgcnNjID0gKDAsIF9yZWFjdC51c2VEZWZlcnJlZFZhbHVlKShjaGlsZE5vZGUucnNjLCByZXNvbHZlZFByZWZldGNoUnNjKTtcbiAgICAvLyBgcnNjYCBpcyBlaXRoZXIgYSBSZWFjdCBub2RlIG9yIGEgcHJvbWlzZSBmb3IgYSBSZWFjdCBub2RlLCBleGNlcHQgd2VcbiAgICAvLyBzcGVjaWFsIGNhc2UgYG51bGxgIHRvIHJlcHJlc2VudCB0aGF0IHRoaXMgc2VnbWVudCdzIGRhdGEgaXMgbWlzc2luZy4gSWZcbiAgICAvLyBpdCdzIGEgcHJvbWlzZSwgd2UgbmVlZCB0byB1bndyYXAgaXQgc28gd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0aGVcbiAgICAvLyBkYXRhIGlzIG1pc3NpbmcuXG4gICAgY29uc3QgcmVzb2x2ZWRSc2MgPSB0eXBlb2YgcnNjID09PSBcIm9iamVjdFwiICYmIHJzYyAhPT0gbnVsbCAmJiB0eXBlb2YgcnNjLnRoZW4gPT09IFwiZnVuY3Rpb25cIiA/ICgwLCBfcmVhY3QudXNlKShyc2MpIDogcnNjO1xuICAgIGlmICghcmVzb2x2ZWRSc2MpIHtcbiAgICAgICAgLy8gVGhlIGRhdGEgZm9yIHRoaXMgc2VnbWVudCBpcyBub3QgYXZhaWxhYmxlLCBhbmQgdGhlcmUncyBubyBwZW5kaW5nXG4gICAgICAgIC8vIG5hdmlnYXRpb24gdGhhdCB3aWxsIGJlIGFibGUgdG8gZnVsZmlsbCBpdC4gV2UgbmVlZCB0byBmZXRjaCBtb3JlIGZyb21cbiAgICAgICAgLy8gdGhlIHNlcnZlciBhbmQgcGF0Y2ggdGhlIGNhY2hlLlxuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFscmVhZHkgYSBwZW5kaW5nIHJlcXVlc3QuXG4gICAgICAgIGxldCBsYXp5RGF0YSA9IGNoaWxkTm9kZS5sYXp5RGF0YTtcbiAgICAgICAgaWYgKGxhenlEYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAqIFJvdXRlciBzdGF0ZSB3aXRoIHJlZmV0Y2ggbWFya2VyIGFkZGVkXG4gICAgICAgKi8gLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICAgICAgY29uc3QgcmVmZXRjaFRyZWUgPSB3YWxrQWRkUmVmZXRjaChbXG4gICAgICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgICAgICAuLi5zZWdtZW50UGF0aFxuICAgICAgICAgICAgXSwgZnVsbFRyZWUpO1xuICAgICAgICAgICAgY2hpbGROb2RlLmxhenlEYXRhID0gbGF6eURhdGEgPSAoMCwgX2ZldGNoc2VydmVycmVzcG9uc2UuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkobmV3IFVSTCh1cmwsIGxvY2F0aW9uLm9yaWdpbiksIHJlZmV0Y2hUcmVlLCBjb250ZXh0Lm5leHRVcmwsIGJ1aWxkSWQpO1xuICAgICAgICAgICAgY2hpbGROb2RlLmxhenlEYXRhUmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgKiBGbGlnaHQgcmVzcG9uc2UgZGF0YVxuICAgICAqLyAvLyBXaGVuIHRoZSBkYXRhIGhhcyBub3QgcmVzb2x2ZWQgeWV0IGB1c2VgIHdpbGwgc3VzcGVuZCBoZXJlLlxuICAgICAgICBjb25zdCBbZmxpZ2h0RGF0YSwgb3ZlcnJpZGVDYW5vbmljYWxVcmxdID0gKDAsIF9yZWFjdC51c2UpKGxhenlEYXRhKTtcbiAgICAgICAgaWYgKCFjaGlsZE5vZGUubGF6eURhdGFSZXNvbHZlZCkge1xuICAgICAgICAgICAgLy8gc2V0VGltZW91dCBpcyB1c2VkIHRvIHN0YXJ0IGEgbmV3IHRyYW5zaXRpb24gZHVyaW5nIHJlbmRlciwgdGhpcyBpcyBhbiBpbnRlbnRpb25hbCBoYWNrIGFyb3VuZCBSZWFjdC5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZShmdWxsVHJlZSwgZmxpZ2h0RGF0YSwgb3ZlcnJpZGVDYW5vbmljYWxVcmwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0aGF0IHdlIG1hcmsgdGhpcyBhcyByZXNvbHZlZCwgaW4gY2FzZSB0aGlzIGJyYW5jaCBpcyByZXBsYXllZCwgd2UgZG9uJ3Qgd2FudCB0byBjb250aW5vdXNseSByZS1hcHBseVxuICAgICAgICAgICAgLy8gdGhlIHBhdGNoIHRvIHRoZSB0cmVlLlxuICAgICAgICAgICAgY2hpbGROb2RlLmxhenlEYXRhUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN1c3BlbmQgaW5maW5pdGVseSBhcyBgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZWAgd2lsbCBjYXVzZSBhIGRpZmZlcmVudCBwYXJ0IG9mIHRoZSB0cmVlIHRvIGJlIHJlbmRlcmVkLlxuICAgICAgICAoMCwgX3JlYWN0LnVzZSkoKDAsIF9pbmZpbml0ZXByb21pc2UuY3JlYXRlSW5maW5pdGVQcm9taXNlKSgpKTtcbiAgICB9XG4gICAgLy8gSWYgd2UgZ2V0IHRvIHRoaXMgcG9pbnQsIHRoZW4gd2Uga25vdyB3ZSBoYXZlIHNvbWV0aGluZyB3ZSBjYW4gcmVuZGVyLlxuICAgIGNvbnN0IHN1YnRyZWUgPSAvLyBUaGUgbGF5b3V0IHJvdXRlciBjb250ZXh0IG5hcnJvd3MgZG93biB0cmVlIGFuZCBjaGlsZE5vZGVzIGF0IGVhY2ggbGV2ZWwuXG4gICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuTGF5b3V0Um91dGVyQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdHJlZTogdHJlZVsxXVtwYXJhbGxlbFJvdXRlcktleV0sXG4gICAgICAgICAgICBjaGlsZE5vZGVzOiBjaGlsZE5vZGUucGFyYWxsZWxSb3V0ZXMsXG4gICAgICAgICAgICAvLyBUT0RPLUFQUDogb3ZlcnJpZGluZyBvZiB1cmwgZm9yIHBhcmFsbGVsIHJvdXRlc1xuICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgY2hpbGRyZW46IHJlc29sdmVkUnNjXG4gICAgfSk7XG4gICAgLy8gRW5zdXJlIHJvb3QgbGF5b3V0IGlzIG5vdCB3cmFwcGVkIGluIGEgZGl2IGFzIHRoZSByb290IGxheW91dCByZW5kZXJzIGA8aHRtbD5gXG4gICAgcmV0dXJuIHN1YnRyZWU7XG59XG4vKipcbiAqIFJlbmRlcnMgc3VzcGVuc2UgYm91bmRhcnkgd2l0aCB0aGUgcHJvdmlkZWQgXCJsb2FkaW5nXCIgcHJvcGVydHkgYXMgdGhlIGZhbGxiYWNrLlxuICogSWYgbm8gbG9hZGluZyBwcm9wZXJ0eSBpcyBwcm92aWRlZCBpdCByZW5kZXJzIHRoZSBjaGlsZHJlbiB3aXRob3V0IGEgc3VzcGVuc2UgYm91bmRhcnkuXG4gKi8gZnVuY3Rpb24gTG9hZGluZ0JvdW5kYXJ5KHBhcmFtKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4sIGxvYWRpbmcsIGxvYWRpbmdTdHlsZXMsIGxvYWRpbmdTY3JpcHRzLCBoYXNMb2FkaW5nIH0gPSBwYXJhbTtcbiAgICBpZiAoaGFzTG9hZGluZykge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfcmVhY3QuU3VzcGVuc2UsIHtcbiAgICAgICAgICAgIGZhbGxiYWNrOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmdTY3JpcHRzLFxuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xufVxuZnVuY3Rpb24gT3V0ZXJMYXlvdXRSb3V0ZXIocGFyYW0pIHtcbiAgICBsZXQgeyBwYXJhbGxlbFJvdXRlcktleSwgc2VnbWVudFBhdGgsIGVycm9yLCBlcnJvclN0eWxlcywgZXJyb3JTY3JpcHRzLCB0ZW1wbGF0ZVN0eWxlcywgdGVtcGxhdGVTY3JpcHRzLCBsb2FkaW5nLCBsb2FkaW5nU3R5bGVzLCBsb2FkaW5nU2NyaXB0cywgaGFzTG9hZGluZywgdGVtcGxhdGUsIG5vdEZvdW5kLCBub3RGb3VuZFN0eWxlcywgc3R5bGVzIH0gPSBwYXJhbTtcbiAgICBjb25zdCBjb250ZXh0ID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuTGF5b3V0Um91dGVyQ29udGV4dCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFyaWFudCBleHBlY3RlZCBsYXlvdXQgcm91dGVyIHRvIGJlIG1vdW50ZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHsgY2hpbGROb2RlcywgdHJlZSwgdXJsIH0gPSBjb250ZXh0O1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBwYXJhbGxlbFJvdXRlciBjYWNoZSBub2RlXG4gICAgbGV0IGNoaWxkTm9kZXNGb3JQYXJhbGxlbFJvdXRlciA9IGNoaWxkTm9kZXMuZ2V0KHBhcmFsbGVsUm91dGVyS2V5KTtcbiAgICAvLyBJZiB0aGUgcGFyYWxsZWwgcm91dGVyIGNhY2hlIG5vZGUgZG9lcyBub3QgZXhpc3QgeWV0LCBjcmVhdGUgaXQuXG4gICAgLy8gVGhpcyB3cml0ZXMgdG8gdGhlIGNhY2hlIHdoZW4gdGhlcmUgaXMgbm8gaXRlbSBpbiB0aGUgY2FjaGUgeWV0LiBJdCBuZXZlciAqb3ZlcndyaXRlcyogZXhpc3RpbmcgY2FjaGUgaXRlbXMgd2hpY2ggaXMgd2h5IGl0J3Mgc2FmZSBpbiBjb25jdXJyZW50IG1vZGUuXG4gICAgaWYgKCFjaGlsZE5vZGVzRm9yUGFyYWxsZWxSb3V0ZXIpIHtcbiAgICAgICAgY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyID0gbmV3IE1hcCgpO1xuICAgICAgICBjaGlsZE5vZGVzLnNldChwYXJhbGxlbFJvdXRlcktleSwgY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBhY3RpdmUgc2VnbWVudCBpbiB0aGUgdHJlZVxuICAgIC8vIFRoZSByZWFzb24gYXJyYXlzIGFyZSB1c2VkIGluIHRoZSBkYXRhIGZvcm1hdCBpcyB0aGF0IHRoZXNlIGFyZSB0cmFuc2ZlcnJlZCBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGJyb3dzZXIgc28gaXQncyBvcHRpbWl6ZWQgdG8gc2F2ZSBieXRlcy5cbiAgICBjb25zdCB0cmVlU2VnbWVudCA9IHRyZWVbMV1bcGFyYWxsZWxSb3V0ZXJLZXldWzBdO1xuICAgIC8vIElmIHNlZ21lbnQgaXMgYW4gYXJyYXkgaXQncyBhIGR5bmFtaWMgcm91dGUgYW5kIHdlIHdhbnQgdG8gcmVhZCB0aGUgZHluYW1pYyByb3V0ZSB2YWx1ZSBhcyB0aGUgc2VnbWVudCB0byBnZXQgZnJvbSB0aGUgY2FjaGUuXG4gICAgY29uc3QgY3VycmVudENoaWxkU2VnbWVudFZhbHVlID0gKDAsIF9nZXRzZWdtZW50dmFsdWUuZ2V0U2VnbWVudFZhbHVlKSh0cmVlU2VnbWVudCk7XG4gICAgLyoqXG4gICAqIERlY2lkZXMgd2hpY2ggc2VnbWVudHMgdG8ga2VlcCByZW5kZXJpbmcsIGFsbCBzZWdtZW50cyB0aGF0IGFyZSBub3QgYWN0aXZlIHdpbGwgYmUgd3JhcHBlZCBpbiBgPE9mZnNjcmVlbj5gLlxuICAgKi8gLy8gVE9ETy1BUFA6IEFkZCBoYW5kbGluZyBvZiBgPE9mZnNjcmVlbj5gIHdoZW4gaXQncyBhdmFpbGFibGUuXG4gICAgY29uc3QgcHJlc2VydmVkU2VnbWVudHMgPSBbXG4gICAgICAgIHRyZWVTZWdtZW50XG4gICAgXTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIHN0eWxlcyxcbiAgICAgICAgICAgIHByZXNlcnZlZFNlZ21lbnRzLm1hcCgocHJlc2VydmVkU2VnbWVudCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVzZXJ2ZWRTZWdtZW50VmFsdWUgPSAoMCwgX2dldHNlZ21lbnR2YWx1ZS5nZXRTZWdtZW50VmFsdWUpKHByZXNlcnZlZFNlZ21lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gKDAsIF9jcmVhdGVyb3V0ZXJjYWNoZWtleS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkocHJlc2VydmVkU2VnbWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuKC8qXG4gICAgICAgICAgICAtIEVycm9yIGJvdW5kYXJ5XG4gICAgICAgICAgICAgIC0gT25seSByZW5kZXJzIGVycm9yIGJvdW5kYXJ5IGlmIGVycm9yIGNvbXBvbmVudCBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLSBSZW5kZXJlZCBmb3IgZWFjaCBzZWdtZW50IHRvIGVuc3VyZSB0aGV5IGhhdmUgdGhlaXIgb3duIGVycm9yIHN0YXRlLlxuICAgICAgICAgICAgLSBMb2FkaW5nIGJvdW5kYXJ5XG4gICAgICAgICAgICAgIC0gT25seSByZW5kZXJzIHN1c3BlbnNlIGJvdW5kYXJ5IGlmIGxvYWRpbmcgY29tcG9uZW50cyBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLSBSZW5kZXJlZCBmb3IgZWFjaCBzZWdtZW50IHRvIGVuc3VyZSB0aGV5IGhhdmUgdGhlaXIgb3duIGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICAgICAgIC0gUGFzc2VkIHRvIHRoZSByb3V0ZXIgZHVyaW5nIHJlbmRlcmluZyB0byBlbnN1cmUgaXQgY2FuIGJlIGltbWVkaWF0ZWx5IHJlbmRlcmVkIHdoZW4gc3VzcGVuZGluZyBvbiBhIEZsaWdodCBmZXRjaC5cbiAgICAgICAgICAqLyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuVGVtcGxhdGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFNjcm9sbEFuZEZvY3VzSGFuZGxlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudFBhdGg6IHNlZ21lbnRQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2Vycm9yYm91bmRhcnkuRXJyb3JCb3VuZGFyeSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ29tcG9uZW50OiBlcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclN0eWxlczogZXJyb3JTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JTY3JpcHRzOiBlcnJvclNjcmlwdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoTG9hZGluZ0JvdW5kYXJ5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0xvYWRpbmc6IGhhc0xvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IGxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdTdHlsZXM6IGxvYWRpbmdTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdTY3JpcHRzOiBsb2FkaW5nU2NyaXB0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX25vdGZvdW5kYm91bmRhcnkuTm90Rm91bmRCb3VuZGFyeSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90Rm91bmQ6IG5vdEZvdW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90Rm91bmRTdHlsZXM6IG5vdEZvdW5kU3R5bGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX3JlZGlyZWN0Ym91bmRhcnkuUmVkaXJlY3RCb3VuZGFyeSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKElubmVyTGF5b3V0Um91dGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsUm91dGVyS2V5OiBwYXJhbGxlbFJvdXRlcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWU6IHRyZWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZXM6IGNoaWxkTm9kZXNGb3JQYXJhbGxlbFJvdXRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudFBhdGg6IHNlZ21lbnRQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUtleTogY2FjaGVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlOiBjdXJyZW50Q2hpbGRTZWdtZW50VmFsdWUgPT09IHByZXNlcnZlZFNlZ21lbnRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3R5bGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTY3JpcHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0sICgwLCBfY3JlYXRlcm91dGVyY2FjaGVrZXkuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKHByZXNlcnZlZFNlZ21lbnQsIHRydWUpKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxheW91dC1yb3V0ZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIk91dGVyTGF5b3V0Um91dGVyIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfcmVhY3Rkb20iLCJfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfZmV0Y2hzZXJ2ZXJyZXNwb25zZSIsIl9pbmZpbml0ZXByb21pc2UiLCJfZXJyb3Jib3VuZGFyeSIsIl9tYXRjaHNlZ21lbnRzIiwiX2hhbmRsZXNtb290aHNjcm9sbCIsIl9yZWRpcmVjdGJvdW5kYXJ5IiwiX25vdGZvdW5kYm91bmRhcnkiLCJfZ2V0c2VnbWVudHZhbHVlIiwiX2NyZWF0ZXJvdXRlcmNhY2hla2V5Iiwid2Fsa0FkZFJlZmV0Y2giLCJzZWdtZW50UGF0aFRvV2FsayIsInRyZWVUb1JlY3JlYXRlIiwic2VnbWVudCIsInBhcmFsbGVsUm91dGVLZXkiLCJpc0xhc3QiLCJsZW5ndGgiLCJtYXRjaFNlZ21lbnQiLCJoYXNPd25Qcm9wZXJ0eSIsInN1YlRyZWUiLCJ1bmRlZmluZWQiLCJzbGljZSIsImZpbmRET01Ob2RlIiwiaW5zdGFuY2UiLCJ3aW5kb3ciLCJwcm9jZXNzIiwib3JpZ2luYWxDb25zb2xlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJfbGVuIiwiYXJndW1lbnRzIiwibWVzc2FnZXMiLCJBcnJheSIsIl9rZXkiLCJpbmNsdWRlcyIsImRlZmF1bHQiLCJyZWN0UHJvcGVydGllcyIsInNob3VsZFNraXBFbGVtZW50IiwiZWxlbWVudCIsImdldENvbXB1dGVkU3R5bGUiLCJwb3NpdGlvbiIsIndhcm4iLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZXZlcnkiLCJpdGVtIiwidG9wT2ZFbGVtZW50SW5WaWV3cG9ydCIsInZpZXdwb3J0SGVpZ2h0IiwidG9wIiwiZ2V0SGFzaEZyYWdtZW50RG9tTm9kZSIsImhhc2hGcmFnbWVudCIsImRvY3VtZW50IiwiYm9keSIsIl9kb2N1bWVudF9nZXRFbGVtZW50QnlJZCIsImdldEVsZW1lbnRCeUlkIiwiZ2V0RWxlbWVudHNCeU5hbWUiLCJJbm5lclNjcm9sbEFuZEZvY3VzSGFuZGxlciIsIkNvbXBvbmVudCIsImNvbXBvbmVudERpZE1vdW50IiwiaGFuZGxlUG90ZW50aWFsU2Nyb2xsIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJvcHMiLCJmb2N1c0FuZFNjcm9sbFJlZiIsImFwcGx5IiwicmVuZGVyIiwiY2hpbGRyZW4iLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJzZWdtZW50UGF0aCIsInNlZ21lbnRQYXRocyIsInNvbWUiLCJzY3JvbGxSZWZTZWdtZW50UGF0aCIsImluZGV4IiwiZG9tTm9kZSIsIkVsZW1lbnQiLCJIVE1MRWxlbWVudCIsIm5leHRFbGVtZW50U2libGluZyIsImhhbmRsZVNtb290aFNjcm9sbCIsInNjcm9sbEludG9WaWV3IiwiaHRtbEVsZW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxUb3AiLCJkb250Rm9yY2VMYXlvdXQiLCJvbmx5SGFzaENoYW5nZSIsImZvY3VzIiwiU2Nyb2xsQW5kRm9jdXNIYW5kbGVyIiwicGFyYW0iLCJjb250ZXh0IiwidXNlQ29udGV4dCIsIkdsb2JhbExheW91dFJvdXRlckNvbnRleHQiLCJFcnJvciIsImpzeCIsIklubmVyTGF5b3V0Um91dGVyIiwicGFyYWxsZWxSb3V0ZXJLZXkiLCJ1cmwiLCJjaGlsZE5vZGVzIiwidHJlZSIsImNhY2hlS2V5IiwiYnVpbGRJZCIsImNoYW5nZUJ5U2VydmVyUmVzcG9uc2UiLCJmdWxsVHJlZSIsImNoaWxkTm9kZSIsIm5ld0xhenlDYWNoZU5vZGUiLCJsYXp5RGF0YSIsInJzYyIsInByZWZldGNoUnNjIiwiaGVhZCIsInBhcmFsbGVsUm91dGVzIiwiTWFwIiwibGF6eURhdGFSZXNvbHZlZCIsInNldCIsInJlc29sdmVkUHJlZmV0Y2hSc2MiLCJ1c2VEZWZlcnJlZFZhbHVlIiwicmVzb2x2ZWRSc2MiLCJ0aGVuIiwidXNlIiwicmVmZXRjaFRyZWUiLCJmZXRjaFNlcnZlclJlc3BvbnNlIiwiVVJMIiwibG9jYXRpb24iLCJvcmlnaW4iLCJuZXh0VXJsIiwiZmxpZ2h0RGF0YSIsIm92ZXJyaWRlQ2Fub25pY2FsVXJsIiwic2V0VGltZW91dCIsInN0YXJ0VHJhbnNpdGlvbiIsImNyZWF0ZUluZmluaXRlUHJvbWlzZSIsInN1YnRyZWUiLCJMYXlvdXRSb3V0ZXJDb250ZXh0IiwiUHJvdmlkZXIiLCJMb2FkaW5nQm91bmRhcnkiLCJsb2FkaW5nIiwibG9hZGluZ1N0eWxlcyIsImxvYWRpbmdTY3JpcHRzIiwiaGFzTG9hZGluZyIsIlN1c3BlbnNlIiwiZmFsbGJhY2siLCJqc3hzIiwiRnJhZ21lbnQiLCJlcnJvclN0eWxlcyIsImVycm9yU2NyaXB0cyIsInRlbXBsYXRlU3R5bGVzIiwidGVtcGxhdGVTY3JpcHRzIiwidGVtcGxhdGUiLCJub3RGb3VuZCIsIm5vdEZvdW5kU3R5bGVzIiwic3R5bGVzIiwiY2hpbGROb2Rlc0ZvclBhcmFsbGVsUm91dGVyIiwidHJlZVNlZ21lbnQiLCJjdXJyZW50Q2hpbGRTZWdtZW50VmFsdWUiLCJnZXRTZWdtZW50VmFsdWUiLCJwcmVzZXJ2ZWRTZWdtZW50cyIsIm1hcCIsInByZXNlcnZlZFNlZ21lbnQiLCJwcmVzZXJ2ZWRTZWdtZW50VmFsdWUiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsIlRlbXBsYXRlQ29udGV4dCIsIkVycm9yQm91bmRhcnkiLCJlcnJvckNvbXBvbmVudCIsIk5vdEZvdW5kQm91bmRhcnkiLCJSZWRpcmVjdEJvdW5kYXJ5IiwiaXNBY3RpdmUiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/layout-router.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/render-from-template-context.js ***! + \**********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return RenderFromTemplateContext;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nfunction RenderFromTemplateContext() {\n const children = (0, _react.useContext)(_approutercontextsharedruntime.TemplateContext);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\n_c = RenderFromTemplateContext;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=render-from-template-context.js.map\nvar _c;\n$RefreshReg$(_c, \"RenderFromTemplateContext\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVuZGVyLWZyb20tdGVtcGxhdGUtY29udGV4dC5qcyIsIm1hcHBpbmdzIjoicURBRWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDRCQUE0QkMsbUJBQU9BLENBQUMsa0lBQTBDO0FBQ3BGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLHFHQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gsMEJBQTBCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLG1GQUFPO0FBQ3hFLE1BQU1JLGlDQUFpQ0osbUJBQU9BLENBQUMsd0pBQW9EO0FBQ25HLFNBQVNGO0lBQ0wsTUFBTU8sV0FBVyxDQUFDLEdBQUdILE9BQU9JLFVBQVUsRUFBRUYsK0JBQStCRyxlQUFlO0lBQ3RGLE9BQXFCLFdBQUgsR0FBSSxJQUFHTixZQUFZTyxHQUFHLEVBQUVQLFlBQVlRLFFBQVEsRUFBRTtRQUM1REosVUFBVUE7SUFDZDtBQUNKO0tBTFNQO0FBT1QsSUFBSSxDQUFDLE9BQU9KLFFBQVFnQixPQUFPLEtBQUssY0FBZSxPQUFPaEIsUUFBUWdCLE9BQU8sS0FBSyxZQUFZaEIsUUFBUWdCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2hCLFFBQVFnQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLbkIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRZ0IsT0FBTyxFQUFFLGNBQWM7UUFBRWYsT0FBTztJQUFLO0lBQ25FSCxPQUFPb0IsTUFBTSxDQUFDbEIsUUFBUWdCLE9BQU8sRUFBRWhCO0lBQy9CbUIsT0FBT25CLE9BQU8sR0FBR0EsUUFBUWdCLE9BQU87QUFDbEMsRUFFQSx3REFBd0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZW5kZXItZnJvbS10ZW1wbGF0ZS1jb250ZXh0LmpzPzhlZTYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUmVuZGVyRnJvbVRlbXBsYXRlQ29udGV4dDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmZ1bmN0aW9uIFJlbmRlckZyb21UZW1wbGF0ZUNvbnRleHQoKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5UZW1wbGF0ZUNvbnRleHQpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZW5kZXItZnJvbS10ZW1wbGF0ZS1jb250ZXh0LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJSZW5kZXJGcm9tVGVtcGxhdGVDb250ZXh0IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJjaGlsZHJlbiIsInVzZUNvbnRleHQiLCJUZW1wbGF0ZUNvbnRleHQiLCJqc3giLCJGcmFnbWVudCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/render-from-template-context.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/searchparams-bailout-proxy.js": +/*!********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/searchparams-bailout-proxy.js ***! + \********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createSearchParamsBailoutProxy\", ({\n enumerable: true,\n get: function() {\n return createSearchParamsBailoutProxy;\n }\n}));\nconst _staticgenerationbailout = __webpack_require__(/*! ./static-generation-bailout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-bailout.js\");\nfunction createSearchParamsBailoutProxy() {\n return new Proxy({}, {\n get (_target, prop) {\n // React adds some properties on the object when serializing for client components\n if (typeof prop === \"string\") {\n (0, _staticgenerationbailout.staticGenerationBailout)(\"searchParams.\" + prop);\n }\n }\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=searchparams-bailout-proxy.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvc2VhcmNocGFyYW1zLWJhaWxvdXQtcHJveHkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGtFQUFpRTtJQUM3REksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsZ0lBQTZCO0FBQ3RFLFNBQVNGO0lBQ0wsT0FBTyxJQUFJRyxNQUFNLENBQUMsR0FBRztRQUNqQkosS0FBS0ssT0FBTyxFQUFFQyxJQUFJO1lBQ2Qsa0ZBQWtGO1lBQ2xGLElBQUksT0FBT0EsU0FBUyxVQUFVO2dCQUN6QixJQUFHSix5QkFBeUJLLHVCQUF1QixFQUFFLGtCQUFrQkQ7WUFDNUU7UUFDSjtJQUNKO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT1QsUUFBUVcsT0FBTyxLQUFLLGNBQWUsT0FBT1gsUUFBUVcsT0FBTyxLQUFLLFlBQVlYLFFBQVFXLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1gsUUFBUVcsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2QsT0FBT0MsY0FBYyxDQUFDQyxRQUFRVyxPQUFPLEVBQUUsY0FBYztRQUFFVixPQUFPO0lBQUs7SUFDbkVILE9BQU9lLE1BQU0sQ0FBQ2IsUUFBUVcsT0FBTyxFQUFFWDtJQUMvQmMsT0FBT2QsT0FBTyxHQUFHQSxRQUFRVyxPQUFPO0FBQ2xDLEVBRUEsc0RBQXNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvc2VhcmNocGFyYW1zLWJhaWxvdXQtcHJveHkuanM/YjZkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNlYXJjaFBhcmFtc0JhaWxvdXRQcm94eVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlU2VhcmNoUGFyYW1zQmFpbG91dFByb3h5O1xuICAgIH1cbn0pO1xuY29uc3QgX3N0YXRpY2dlbmVyYXRpb25iYWlsb3V0ID0gcmVxdWlyZShcIi4vc3RhdGljLWdlbmVyYXRpb24tYmFpbG91dFwiKTtcbmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaFBhcmFtc0JhaWxvdXRQcm94eSgpIHtcbiAgICByZXR1cm4gbmV3IFByb3h5KHt9LCB7XG4gICAgICAgIGdldCAoX3RhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgLy8gUmVhY3QgYWRkcyBzb21lIHByb3BlcnRpZXMgb24gdGhlIG9iamVjdCB3aGVuIHNlcmlhbGl6aW5nIGZvciBjbGllbnQgY29tcG9uZW50c1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgKDAsIF9zdGF0aWNnZW5lcmF0aW9uYmFpbG91dC5zdGF0aWNHZW5lcmF0aW9uQmFpbG91dCkoXCJzZWFyY2hQYXJhbXMuXCIgKyBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZWFyY2hwYXJhbXMtYmFpbG91dC1wcm94eS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiY3JlYXRlU2VhcmNoUGFyYW1zQmFpbG91dFByb3h5IiwiX3N0YXRpY2dlbmVyYXRpb25iYWlsb3V0IiwicmVxdWlyZSIsIlByb3h5IiwiX3RhcmdldCIsInByb3AiLCJzdGF0aWNHZW5lcmF0aW9uQmFpbG91dCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/searchparams-bailout-proxy.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-bailout.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/static-generation-bailout.js ***! + \*******************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n isStaticGenBailoutError: function() {\n return isStaticGenBailoutError;\n },\n staticGenerationBailout: function() {\n return staticGenerationBailout;\n }\n});\nconst _hooksservercontext = __webpack_require__(/*! ./hooks-server-context */ \"(app-pages-browser)/./node_modules/next/dist/client/components/hooks-server-context.js\");\nconst _staticgenerationasyncstorageexternal = __webpack_require__(/*! ./static-generation-async-storage.external */ \"(shared)/./node_modules/next/dist/client/components/static-generation-async-storage.external.js\");\nconst NEXT_STATIC_GEN_BAILOUT = \"NEXT_STATIC_GEN_BAILOUT\";\nclass StaticGenBailoutError extends Error {\n constructor(...args){\n super(...args);\n this.code = NEXT_STATIC_GEN_BAILOUT;\n }\n}\nfunction isStaticGenBailoutError(error) {\n if (typeof error !== \"object\" || error === null || !(\"code\" in error)) {\n return false;\n }\n return error.code === NEXT_STATIC_GEN_BAILOUT;\n}\nfunction formatErrorMessage(reason, opts) {\n const { dynamic, link } = opts || {};\n const suffix = link ? \" See more info here: \" + link : \"\";\n return \"Page\" + (dynamic ? ' with `dynamic = \"' + dynamic + '\"`' : \"\") + \" couldn't be rendered statically because it used `\" + reason + \"`.\" + suffix;\n}\nconst staticGenerationBailout = (reason, param)=>{\n let { dynamic, link } = param === void 0 ? {} : param;\n const staticGenerationStore = _staticgenerationasyncstorageexternal.staticGenerationAsyncStorage.getStore();\n if (!staticGenerationStore) return false;\n if (staticGenerationStore.forceStatic) {\n return true;\n }\n if (staticGenerationStore.dynamicShouldError) {\n throw new StaticGenBailoutError(formatErrorMessage(reason, {\n link,\n dynamic: dynamic != null ? dynamic : \"error\"\n }));\n }\n const message = formatErrorMessage(reason, {\n dynamic,\n // this error should be caught by Next to bail out of static generation\n // in case it's uncaught, this link provides some additional context as to why\n link: \"https://nextjs.org/docs/messages/dynamic-server-error\"\n });\n // If postpone is available, we should postpone the render.\n staticGenerationStore.postpone == null ? void 0 : staticGenerationStore.postpone.call(staticGenerationStore, reason);\n // As this is a bailout, we don't want to revalidate, so set the revalidate\n // to 0.\n staticGenerationStore.revalidate = 0;\n if (staticGenerationStore.isStaticGeneration) {\n const err = new _hooksservercontext.DynamicServerError(message);\n staticGenerationStore.dynamicUsageDescription = reason;\n staticGenerationStore.dynamicUsageStack = err.stack;\n throw err;\n }\n return false;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=static-generation-bailout.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvc3RhdGljLWdlbmVyYXRpb24tYmFpbG91dC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcseUJBQXlCO1FBQ3JCLE9BQU9BO0lBQ1g7SUFDQUMseUJBQXlCO1FBQ3JCLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLHNCQUFzQkMsbUJBQU9BLENBQUMsc0hBQXdCO0FBQzVELE1BQU1DLHdDQUF3Q0QsbUJBQU9BLENBQUMsbUpBQTRDO0FBQ2xHLE1BQU1FLDBCQUEwQjtBQUNoQyxNQUFNQyw4QkFBOEJDO0lBQ2hDQyxZQUFZLEdBQUdDLElBQUksQ0FBQztRQUNoQixLQUFLLElBQUlBO1FBQ1QsSUFBSSxDQUFDQyxJQUFJLEdBQUdMO0lBQ2hCO0FBQ0o7QUFDQSxTQUFTWCx3QkFBd0JpQixLQUFLO0lBQ2xDLElBQUksT0FBT0EsVUFBVSxZQUFZQSxVQUFVLFFBQVEsQ0FBRSxXQUFVQSxLQUFJLEdBQUk7UUFDbkUsT0FBTztJQUNYO0lBQ0EsT0FBT0EsTUFBTUQsSUFBSSxLQUFLTDtBQUMxQjtBQUNBLFNBQVNPLG1CQUFtQkMsTUFBTSxFQUFFQyxJQUFJO0lBQ3BDLE1BQU0sRUFBRUMsT0FBTyxFQUFFQyxJQUFJLEVBQUUsR0FBR0YsUUFBUSxDQUFDO0lBQ25DLE1BQU1HLFNBQVNELE9BQU8sMEJBQTBCQSxPQUFPO0lBQ3ZELE9BQU8sU0FBVUQsQ0FBQUEsVUFBVSx1QkFBdUJBLFVBQVUsT0FBTyxFQUFDLElBQUssdURBQXVERixTQUFTLE9BQU9JO0FBQ3BKO0FBQ0EsTUFBTXRCLDBCQUEwQixDQUFDa0IsUUFBUUs7SUFDckMsSUFBSSxFQUFFSCxPQUFPLEVBQUVDLElBQUksRUFBRSxHQUFHRSxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUlBO0lBQ2hELE1BQU1DLHdCQUF3QmYsc0NBQXNDZ0IsNEJBQTRCLENBQUNDLFFBQVE7SUFDekcsSUFBSSxDQUFDRix1QkFBdUIsT0FBTztJQUNuQyxJQUFJQSxzQkFBc0JHLFdBQVcsRUFBRTtRQUNuQyxPQUFPO0lBQ1g7SUFDQSxJQUFJSCxzQkFBc0JJLGtCQUFrQixFQUFFO1FBQzFDLE1BQU0sSUFBSWpCLHNCQUFzQk0sbUJBQW1CQyxRQUFRO1lBQ3ZERztZQUNBRCxTQUFTQSxXQUFXLE9BQU9BLFVBQVU7UUFDekM7SUFDSjtJQUNBLE1BQU1TLFVBQVVaLG1CQUFtQkMsUUFBUTtRQUN2Q0U7UUFDQSx1RUFBdUU7UUFDdkUsOEVBQThFO1FBQzlFQyxNQUFNO0lBQ1Y7SUFDQSwyREFBMkQ7SUFDM0RHLHNCQUFzQk0sUUFBUSxJQUFJLE9BQU8sS0FBSyxJQUFJTixzQkFBc0JNLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDUCx1QkFBdUJOO0lBQzdHLDJFQUEyRTtJQUMzRSxRQUFRO0lBQ1JNLHNCQUFzQlEsVUFBVSxHQUFHO0lBQ25DLElBQUlSLHNCQUFzQlMsa0JBQWtCLEVBQUU7UUFDMUMsTUFBTUMsTUFBTSxJQUFJM0Isb0JBQW9CNEIsa0JBQWtCLENBQUNOO1FBQ3ZETCxzQkFBc0JZLHVCQUF1QixHQUFHbEI7UUFDaERNLHNCQUFzQmEsaUJBQWlCLEdBQUdILElBQUlJLEtBQUs7UUFDbkQsTUFBTUo7SUFDVjtJQUNBLE9BQU87QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPdEMsUUFBUTJDLE9BQU8sS0FBSyxjQUFlLE9BQU8zQyxRQUFRMkMsT0FBTyxLQUFLLFlBQVkzQyxRQUFRMkMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPM0MsUUFBUTJDLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcks5QyxPQUFPQyxjQUFjLENBQUNDLFFBQVEyQyxPQUFPLEVBQUUsY0FBYztRQUFFMUMsT0FBTztJQUFLO0lBQ25FSCxPQUFPK0MsTUFBTSxDQUFDN0MsUUFBUTJDLE9BQU8sRUFBRTNDO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVEyQyxPQUFPO0FBQ2xDLEVBRUEscURBQXFEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvc3RhdGljLWdlbmVyYXRpb24tYmFpbG91dC5qcz8wNDZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgaXNTdGF0aWNHZW5CYWlsb3V0RXJyb3I6IG51bGwsXG4gICAgc3RhdGljR2VuZXJhdGlvbkJhaWxvdXQ6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgaXNTdGF0aWNHZW5CYWlsb3V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNTdGF0aWNHZW5CYWlsb3V0RXJyb3I7XG4gICAgfSxcbiAgICBzdGF0aWNHZW5lcmF0aW9uQmFpbG91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdGF0aWNHZW5lcmF0aW9uQmFpbG91dDtcbiAgICB9XG59KTtcbmNvbnN0IF9ob29rc3NlcnZlcmNvbnRleHQgPSByZXF1aXJlKFwiLi9ob29rcy1zZXJ2ZXItY29udGV4dFwiKTtcbmNvbnN0IF9zdGF0aWNnZW5lcmF0aW9uYXN5bmNzdG9yYWdlZXh0ZXJuYWwgPSByZXF1aXJlKFwiLi9zdGF0aWMtZ2VuZXJhdGlvbi1hc3luYy1zdG9yYWdlLmV4dGVybmFsXCIpO1xuY29uc3QgTkVYVF9TVEFUSUNfR0VOX0JBSUxPVVQgPSBcIk5FWFRfU1RBVElDX0dFTl9CQUlMT1VUXCI7XG5jbGFzcyBTdGF0aWNHZW5CYWlsb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgICAgICB0aGlzLmNvZGUgPSBORVhUX1NUQVRJQ19HRU5fQkFJTE9VVDtcbiAgICB9XG59XG5mdW5jdGlvbiBpc1N0YXRpY0dlbkJhaWxvdXRFcnJvcihlcnJvcikge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgIT09IFwib2JqZWN0XCIgfHwgZXJyb3IgPT09IG51bGwgfHwgIShcImNvZGVcIiBpbiBlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3IuY29kZSA9PT0gTkVYVF9TVEFUSUNfR0VOX0JBSUxPVVQ7XG59XG5mdW5jdGlvbiBmb3JtYXRFcnJvck1lc3NhZ2UocmVhc29uLCBvcHRzKSB7XG4gICAgY29uc3QgeyBkeW5hbWljLCBsaW5rIH0gPSBvcHRzIHx8IHt9O1xuICAgIGNvbnN0IHN1ZmZpeCA9IGxpbmsgPyBcIiBTZWUgbW9yZSBpbmZvIGhlcmU6IFwiICsgbGluayA6IFwiXCI7XG4gICAgcmV0dXJuIFwiUGFnZVwiICsgKGR5bmFtaWMgPyAnIHdpdGggYGR5bmFtaWMgPSBcIicgKyBkeW5hbWljICsgJ1wiYCcgOiBcIlwiKSArIFwiIGNvdWxkbid0IGJlIHJlbmRlcmVkIHN0YXRpY2FsbHkgYmVjYXVzZSBpdCB1c2VkIGBcIiArIHJlYXNvbiArIFwiYC5cIiArIHN1ZmZpeDtcbn1cbmNvbnN0IHN0YXRpY0dlbmVyYXRpb25CYWlsb3V0ID0gKHJlYXNvbiwgcGFyYW0pPT57XG4gICAgbGV0IHsgZHluYW1pYywgbGluayB9ID0gcGFyYW0gPT09IHZvaWQgMCA/IHt9IDogcGFyYW07XG4gICAgY29uc3Qgc3RhdGljR2VuZXJhdGlvblN0b3JlID0gX3N0YXRpY2dlbmVyYXRpb25hc3luY3N0b3JhZ2VleHRlcm5hbC5zdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlLmdldFN0b3JlKCk7XG4gICAgaWYgKCFzdGF0aWNHZW5lcmF0aW9uU3RvcmUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoc3RhdGljR2VuZXJhdGlvblN0b3JlLmZvcmNlU3RhdGljKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc3RhdGljR2VuZXJhdGlvblN0b3JlLmR5bmFtaWNTaG91bGRFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgU3RhdGljR2VuQmFpbG91dEVycm9yKGZvcm1hdEVycm9yTWVzc2FnZShyZWFzb24sIHtcbiAgICAgICAgICAgIGxpbmssXG4gICAgICAgICAgICBkeW5hbWljOiBkeW5hbWljICE9IG51bGwgPyBkeW5hbWljIDogXCJlcnJvclwiXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZSA9IGZvcm1hdEVycm9yTWVzc2FnZShyZWFzb24sIHtcbiAgICAgICAgZHluYW1pYyxcbiAgICAgICAgLy8gdGhpcyBlcnJvciBzaG91bGQgYmUgY2F1Z2h0IGJ5IE5leHQgdG8gYmFpbCBvdXQgb2Ygc3RhdGljIGdlbmVyYXRpb25cbiAgICAgICAgLy8gaW4gY2FzZSBpdCdzIHVuY2F1Z2h0LCB0aGlzIGxpbmsgcHJvdmlkZXMgc29tZSBhZGRpdGlvbmFsIGNvbnRleHQgYXMgdG8gd2h5XG4gICAgICAgIGxpbms6IFwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZHluYW1pYy1zZXJ2ZXItZXJyb3JcIlxuICAgIH0pO1xuICAgIC8vIElmIHBvc3Rwb25lIGlzIGF2YWlsYWJsZSwgd2Ugc2hvdWxkIHBvc3Rwb25lIHRoZSByZW5kZXIuXG4gICAgc3RhdGljR2VuZXJhdGlvblN0b3JlLnBvc3Rwb25lID09IG51bGwgPyB2b2lkIDAgOiBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucG9zdHBvbmUuY2FsbChzdGF0aWNHZW5lcmF0aW9uU3RvcmUsIHJlYXNvbik7XG4gICAgLy8gQXMgdGhpcyBpcyBhIGJhaWxvdXQsIHdlIGRvbid0IHdhbnQgdG8gcmV2YWxpZGF0ZSwgc28gc2V0IHRoZSByZXZhbGlkYXRlXG4gICAgLy8gdG8gMC5cbiAgICBzdGF0aWNHZW5lcmF0aW9uU3RvcmUucmV2YWxpZGF0ZSA9IDA7XG4gICAgaWYgKHN0YXRpY0dlbmVyYXRpb25TdG9yZS5pc1N0YXRpY0dlbmVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZXJyID0gbmV3IF9ob29rc3NlcnZlcmNvbnRleHQuRHluYW1pY1NlcnZlckVycm9yKG1lc3NhZ2UpO1xuICAgICAgICBzdGF0aWNHZW5lcmF0aW9uU3RvcmUuZHluYW1pY1VzYWdlRGVzY3JpcHRpb24gPSByZWFzb247XG4gICAgICAgIHN0YXRpY0dlbmVyYXRpb25TdG9yZS5keW5hbWljVXNhZ2VTdGFjayA9IGVyci5zdGFjaztcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGF0aWMtZ2VuZXJhdGlvbi1iYWlsb3V0LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsImlzU3RhdGljR2VuQmFpbG91dEVycm9yIiwic3RhdGljR2VuZXJhdGlvbkJhaWxvdXQiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfaG9va3NzZXJ2ZXJjb250ZXh0IiwicmVxdWlyZSIsIl9zdGF0aWNnZW5lcmF0aW9uYXN5bmNzdG9yYWdlZXh0ZXJuYWwiLCJORVhUX1NUQVRJQ19HRU5fQkFJTE9VVCIsIlN0YXRpY0dlbkJhaWxvdXRFcnJvciIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJhcmdzIiwiY29kZSIsImVycm9yIiwiZm9ybWF0RXJyb3JNZXNzYWdlIiwicmVhc29uIiwib3B0cyIsImR5bmFtaWMiLCJsaW5rIiwic3VmZml4IiwicGFyYW0iLCJzdGF0aWNHZW5lcmF0aW9uU3RvcmUiLCJzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlIiwiZ2V0U3RvcmUiLCJmb3JjZVN0YXRpYyIsImR5bmFtaWNTaG91bGRFcnJvciIsIm1lc3NhZ2UiLCJwb3N0cG9uZSIsImNhbGwiLCJyZXZhbGlkYXRlIiwiaXNTdGF0aWNHZW5lcmF0aW9uIiwiZXJyIiwiRHluYW1pY1NlcnZlckVycm9yIiwiZHluYW1pY1VzYWdlRGVzY3JpcHRpb24iLCJkeW5hbWljVXNhZ2VTdGFjayIsInN0YWNrIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-bailout.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js ***! + \*****************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return StaticGenerationSearchParamsBailoutProvider;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _searchparamsbailoutproxy = __webpack_require__(/*! ./searchparams-bailout-proxy */ \"(app-pages-browser)/./node_modules/next/dist/client/components/searchparams-bailout-proxy.js\");\nfunction StaticGenerationSearchParamsBailoutProvider(param) {\n let { Component, propsForComponent, isStaticGeneration } = param;\n if (isStaticGeneration) {\n const searchParams = (0, _searchparamsbailoutproxy.createSearchParamsBailoutProxy)();\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {\n searchParams: searchParams,\n ...propsForComponent\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {\n ...propsForComponent\n });\n}\n_c = StaticGenerationSearchParamsBailoutProvider;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=static-generation-searchparams-bailout-provider.js.map\nvar _c;\n$RefreshReg$(_c, \"StaticGenerationSearchParamsBailoutProvider\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvc3RhdGljLWdlbmVyYXRpb24tc2VhcmNocGFyYW1zLWJhaWxvdXQtcHJvdmlkZXIuanMiLCJtYXBwaW5ncyI6InFEQUVhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGdJQUF5QztBQUNsRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyxtRkFBTztBQUN2RSxNQUFNSSw0QkFBNEJKLG1CQUFPQSxDQUFDLGtJQUE4QjtBQUN4RSxTQUFTRiw0Q0FBNENPLEtBQUs7SUFDdEQsSUFBSSxFQUFFQyxTQUFTLEVBQUVDLGlCQUFpQixFQUFFQyxrQkFBa0IsRUFBRSxHQUFHSDtJQUMzRCxJQUFJRyxvQkFBb0I7UUFDcEIsTUFBTUMsZUFBZSxDQUFDLEdBQUdMLDBCQUEwQk0sOEJBQThCO1FBQ2pGLE9BQXFCLFdBQUgsR0FBSSxJQUFHVCxZQUFZVSxHQUFHLEVBQUVMLFdBQVc7WUFDakRHLGNBQWNBO1lBQ2QsR0FBR0YsaUJBQWlCO1FBQ3hCO0lBQ0o7SUFDQSxPQUFxQixXQUFILEdBQUksSUFBR04sWUFBWVUsR0FBRyxFQUFFTCxXQUFXO1FBQ2pELEdBQUdDLGlCQUFpQjtJQUN4QjtBQUNKO0tBWlNUO0FBY1QsSUFBSSxDQUFDLE9BQU9KLFFBQVFrQixPQUFPLEtBQUssY0FBZSxPQUFPbEIsUUFBUWtCLE9BQU8sS0FBSyxZQUFZbEIsUUFBUWtCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2xCLFFBQVFrQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLckIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRa0IsT0FBTyxFQUFFLGNBQWM7UUFBRWpCLE9BQU87SUFBSztJQUNuRUgsT0FBT3NCLE1BQU0sQ0FBQ3BCLFFBQVFrQixPQUFPLEVBQUVsQjtJQUMvQnFCLE9BQU9yQixPQUFPLEdBQUdBLFFBQVFrQixPQUFPO0FBQ2xDLEVBRUEsMkVBQTJFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvc3RhdGljLWdlbmVyYXRpb24tc2VhcmNocGFyYW1zLWJhaWxvdXQtcHJvdmlkZXIuanM/OTcxYSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTdGF0aWNHZW5lcmF0aW9uU2VhcmNoUGFyYW1zQmFpbG91dFByb3ZpZGVyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX3NlYXJjaHBhcmFtc2JhaWxvdXRwcm94eSA9IHJlcXVpcmUoXCIuL3NlYXJjaHBhcmFtcy1iYWlsb3V0LXByb3h5XCIpO1xuZnVuY3Rpb24gU3RhdGljR2VuZXJhdGlvblNlYXJjaFBhcmFtc0JhaWxvdXRQcm92aWRlcihwYXJhbSkge1xuICAgIGxldCB7IENvbXBvbmVudCwgcHJvcHNGb3JDb21wb25lbnQsIGlzU3RhdGljR2VuZXJhdGlvbiB9ID0gcGFyYW07XG4gICAgaWYgKGlzU3RhdGljR2VuZXJhdGlvbikge1xuICAgICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSAoMCwgX3NlYXJjaHBhcmFtc2JhaWxvdXRwcm94eS5jcmVhdGVTZWFyY2hQYXJhbXNCYWlsb3V0UHJveHkpKCk7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKENvbXBvbmVudCwge1xuICAgICAgICAgICAgc2VhcmNoUGFyYW1zOiBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgICAuLi5wcm9wc0ZvckNvbXBvbmVudFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoQ29tcG9uZW50LCB7XG4gICAgICAgIC4uLnByb3BzRm9yQ29tcG9uZW50XG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YXRpYy1nZW5lcmF0aW9uLXNlYXJjaHBhcmFtcy1iYWlsb3V0LXByb3ZpZGVyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJTdGF0aWNHZW5lcmF0aW9uU2VhcmNoUGFyYW1zQmFpbG91dFByb3ZpZGVyIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9zZWFyY2hwYXJhbXNiYWlsb3V0cHJveHkiLCJwYXJhbSIsIkNvbXBvbmVudCIsInByb3BzRm9yQ29tcG9uZW50IiwiaXNTdGF0aWNHZW5lcmF0aW9uIiwic2VhcmNoUGFyYW1zIiwiY3JlYXRlU2VhcmNoUGFyYW1zQmFpbG91dFByb3h5IiwianN4IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/static-generation-searchparams-bailout-provider.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js": +/*!********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js ***! + \********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * Run function with `scroll-behavior: auto` applied to `<html/>`.\n * This css change will be reverted after the function finishes.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"handleSmoothScroll\", ({\n enumerable: true,\n get: function() {\n return handleSmoothScroll;\n }\n}));\nfunction handleSmoothScroll(fn, options) {\n if (options === void 0) options = {};\n // if only the hash is changed, we don't need to disable smooth scrolling\n // we only care to prevent smooth scrolling when navigating to a new page to avoid jarring UX\n if (options.onlyHashChange) {\n fn();\n return;\n }\n const htmlElement = document.documentElement;\n const existing = htmlElement.style.scrollBehavior;\n htmlElement.style.scrollBehavior = \"auto\";\n if (!options.dontForceLayout) {\n // In Chrome-based browsers we need to force reflow before calling `scrollTo`.\n // Otherwise it will not pickup the change in scrollBehavior\n // More info here: https://github.com/vercel/next.js/issues/40719#issuecomment-1336248042\n htmlElement.getClientRects();\n }\n fn();\n htmlElement.style.scrollBehavior = existing;\n} //# sourceMappingURL=handle-smooth-scroll.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaGFuZGxlLXNtb290aC1zY3JvbGwuanMiLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQWdCO0FBQ2pCQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsc0RBQXFEO0lBQ2pESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0EsbUJBQW1CQyxFQUFFLEVBQUVDLE9BQU87SUFDbkMsSUFBSUEsWUFBWSxLQUFLLEdBQUdBLFVBQVUsQ0FBQztJQUNuQyx5RUFBeUU7SUFDekUsNkZBQTZGO0lBQzdGLElBQUlBLFFBQVFDLGNBQWMsRUFBRTtRQUN4QkY7UUFDQTtJQUNKO0lBQ0EsTUFBTUcsY0FBY0MsU0FBU0MsZUFBZTtJQUM1QyxNQUFNQyxXQUFXSCxZQUFZSSxLQUFLLENBQUNDLGNBQWM7SUFDakRMLFlBQVlJLEtBQUssQ0FBQ0MsY0FBYyxHQUFHO0lBQ25DLElBQUksQ0FBQ1AsUUFBUVEsZUFBZSxFQUFFO1FBQzFCLDhFQUE4RTtRQUM5RSw0REFBNEQ7UUFDNUQseUZBQXlGO1FBQ3pGTixZQUFZTyxjQUFjO0lBQzlCO0lBQ0FWO0lBQ0FHLFlBQVlJLEtBQUssQ0FBQ0MsY0FBYyxHQUFHRjtBQUN2QyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2hhbmRsZS1zbW9vdGgtc2Nyb2xsLmpzPzY1NjMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSdW4gZnVuY3Rpb24gd2l0aCBgc2Nyb2xsLWJlaGF2aW9yOiBhdXRvYCBhcHBsaWVkIHRvIGA8aHRtbC8+YC5cbiAqIFRoaXMgY3NzIGNoYW5nZSB3aWxsIGJlIHJldmVydGVkIGFmdGVyIHRoZSBmdW5jdGlvbiBmaW5pc2hlcy5cbiAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhhbmRsZVNtb290aFNjcm9sbFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaGFuZGxlU21vb3RoU2Nyb2xsO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gaGFuZGxlU21vb3RoU2Nyb2xsKGZuLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgb3B0aW9ucyA9IHt9O1xuICAgIC8vIGlmIG9ubHkgdGhlIGhhc2ggaXMgY2hhbmdlZCwgd2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIHNtb290aCBzY3JvbGxpbmdcbiAgICAvLyB3ZSBvbmx5IGNhcmUgdG8gcHJldmVudCBzbW9vdGggc2Nyb2xsaW5nIHdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlIHRvIGF2b2lkIGphcnJpbmcgVVhcbiAgICBpZiAob3B0aW9ucy5vbmx5SGFzaENoYW5nZSkge1xuICAgICAgICBmbigpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGNvbnN0IGV4aXN0aW5nID0gaHRtbEVsZW1lbnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I7XG4gICAgaHRtbEVsZW1lbnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBcImF1dG9cIjtcbiAgICBpZiAoIW9wdGlvbnMuZG9udEZvcmNlTGF5b3V0KSB7XG4gICAgICAgIC8vIEluIENocm9tZS1iYXNlZCBicm93c2VycyB3ZSBuZWVkIHRvIGZvcmNlIHJlZmxvdyBiZWZvcmUgY2FsbGluZyBgc2Nyb2xsVG9gLlxuICAgICAgICAvLyBPdGhlcndpc2UgaXQgd2lsbCBub3QgcGlja3VwIHRoZSBjaGFuZ2UgaW4gc2Nyb2xsQmVoYXZpb3JcbiAgICAgICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9pc3N1ZXMvNDA3MTkjaXNzdWVjb21tZW50LTEzMzYyNDgwNDJcbiAgICAgICAgaHRtbEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICB9XG4gICAgZm4oKTtcbiAgICBodG1sRWxlbWVudC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9IGV4aXN0aW5nO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW5kbGUtc21vb3RoLXNjcm9sbC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaGFuZGxlU21vb3RoU2Nyb2xsIiwiZm4iLCJvcHRpb25zIiwib25seUhhc2hDaGFuZ2UiLCJodG1sRWxlbWVudCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiZXhpc3RpbmciLCJzdHlsZSIsInNjcm9sbEJlaGF2aW9yIiwiZG9udEZvcmNlTGF5b3V0IiwiZ2V0Q2xpZW50UmVjdHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\n")); + +/***/ }) + +}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } +/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"); }); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ _N_E = __webpack_exports__; +/******/ } +]); \ No newline at end of file diff --git a/frontend/.next/static/chunks/app/layout.js b/frontend/.next/static/chunks/app/layout.js new file mode 100644 index 000000000..58cd83864 --- /dev/null +++ b/frontend/.next/static/chunks/app/layout.js @@ -0,0 +1,103 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/layout"],{ + +/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!": +/*!**************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false! ***! + \**************************************************************************************************************************************************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/layout.tsx */ \"(app-pages-browser)/./app/layout.tsx\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz1DJTNBJTVDVXNlcnMlNUNIQVJTSElUJTIwQkFHR0ElNUNEZXNrdG9wJTVDWmVvVGFwMi4wJTVDZnJvbnRlbmQlNUNhcHAlNUNsYXlvdXQudHN4JnNlcnZlcj1mYWxzZSEiLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLz8xYjgxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxhcHBcXFxcbGF5b3V0LnRzeFwiKSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/api/navigation.js": +/*!**************************************************!*\ + !*** ./node_modules/next/dist/api/navigation.js ***! + \**************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdEOztBQUVoRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2FwaS9uYXZpZ2F0aW9uLmpzP2I4MDIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4uL2NsaWVudC9jb21wb25lbnRzL25hdmlnYXRpb25cIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmF2aWdhdGlvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/navigation.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/mini-css-extract-plugin/hmr/hotModuleReplacement.js": +/*!*********************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/mini-css-extract-plugin/hmr/hotModuleReplacement.js ***! + \*********************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";var e={686:(e,r,t)=>{var n=t(808);var i=Object.create(null);var a=typeof document===\"undefined\";var o=Array.prototype.forEach;function debounce(e,r){var t=0;return function(){var n=this;var i=arguments;var a=function functionCall(){return e.apply(n,i)};clearTimeout(t);t=setTimeout(a,r)}}function noop(){}function getCurrentScriptUrl(e){var r=i[e];if(!r){if(document.currentScript){r=document.currentScript.src}else{var t=document.getElementsByTagName(\"script\");var a=t[t.length-1];if(a){r=a.src}}i[e]=r}return function(e){if(!r){return null}var t=r.split(/([^\\\\/]+)\\.js$/);var i=t&&t[1];if(!i){return[r.replace(\".js\",\".css\")]}if(!e){return[r.replace(\".js\",\".css\")]}return e.split(\",\").map((function(e){var t=new RegExp(\"\".concat(i,\"\\\\.js$\"),\"g\");return n(r.replace(t,\"\".concat(e.replace(/{fileName}/g,i),\".css\")))}))}}function updateCss(e,r){if(!r){if(!e.href){return}r=e.href.split(\"?\")[0]}if(!isUrlRequest(r)){return}if(e.isLoaded===false){return}if(!r||!(r.indexOf(\".css\")>-1)){return}e.visited=true;var t=e.cloneNode();t.isLoaded=false;t.addEventListener(\"load\",(function(){if(t.isLoaded){return}t.isLoaded=true;e.parentNode.removeChild(e)}));t.addEventListener(\"error\",(function(){if(t.isLoaded){return}t.isLoaded=true;e.parentNode.removeChild(e)}));t.href=\"\".concat(r,\"?\").concat(Date.now());if(e.nextSibling){e.parentNode.insertBefore(t,e.nextSibling)}else{e.parentNode.appendChild(t)}}function getReloadUrl(e,r){var t;e=n(e,{stripWWW:false});r.some((function(n){if(e.indexOf(r)>-1){t=n}}));return t}function reloadStyle(e){if(!e){return false}var r=document.querySelectorAll(\"link\");var t=false;o.call(r,(function(r){if(!r.href){return}var n=getReloadUrl(r.href,e);if(!isUrlRequest(n)){return}if(r.visited===true){return}if(n){updateCss(r,n);t=true}}));return t}function reloadAll(){var e=document.querySelectorAll(\"link\");o.call(e,(function(e){if(e.visited===true){return}updateCss(e)}))}function isUrlRequest(e){if(!/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.test(e)){return false}return true}e.exports=function(e,r){if(a){console.log(\"no window.document found, will not HMR CSS\");return noop}var t=getCurrentScriptUrl(e);function update(){var e=t(r.filename);var n=reloadStyle(e);if(r.locals){console.log(\"[HMR] Detected local css modules. Reload all css\");reloadAll();return}if(n){console.log(\"[HMR] css reload %s\",e.join(\" \"))}else{console.log(\"[HMR] Reload all css\");reloadAll()}}return debounce(update,50)}},808:e=>{function normalizeUrl(e){return e.reduce((function(e,r){switch(r){case\"..\":e.pop();break;case\".\":break;default:e.push(r)}return e}),[]).join(\"/\")}e.exports=function(e){e=e.trim();if(/^data:/i.test(e)){return e}var r=e.indexOf(\"//\")!==-1?e.split(\"//\")[0]+\"//\":\"\";var t=e.replace(new RegExp(r,\"i\"),\"\").split(\"/\");var n=t[0].toLowerCase().replace(/\\.$/,\"\");t[0]=\"\";var i=normalizeUrl(t);return r+n+i}}};var r={};function __nccwpck_require__(t){var n=r[t];if(n!==undefined){return n.exports}var i=r[t]={exports:{}};var a=true;try{e[t](i,i.exports,__nccwpck_require__);a=false}finally{if(a)delete r[t]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(686);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vaG1yL2hvdE1vZHVsZVJlcGxhY2VtZW50LmpzIiwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLGFBQWEsT0FBTyxjQUFjLGFBQWEsMEJBQTBCLG9DQUFvQyw4QkFBOEIsdUJBQXVCLFFBQVEsa0JBQWtCLFdBQVcsZ0JBQWdCLDhCQUE4QixxQkFBcUIsZ0JBQWdCLG1CQUFtQixpQkFBaUIsZ0NBQWdDLFdBQVcsT0FBTywyQkFBMkIsNkJBQTZCLEtBQUssOENBQThDLG9CQUFvQixNQUFNLFNBQVMsT0FBTyxtQkFBbUIsT0FBTyxZQUFZLGdDQUFnQyxjQUFjLE9BQU8sZ0NBQWdDLE9BQU8sZ0NBQWdDLHFDQUFxQyw0Q0FBNEMsMkNBQTJDLFNBQVMsZ0JBQWdCLElBQUksd0JBQXdCLE9BQU8sWUFBWSxPQUFPLHVCQUF1QixxQkFBcUIsT0FBTyx1QkFBdUIsT0FBTyxnQ0FBZ0MsT0FBTyxlQUFlLG9CQUFvQixpQkFBaUIsc0NBQXNDLGVBQWUsT0FBTyxnQkFBZ0IsNEJBQTRCLEdBQUcsdUNBQXVDLGVBQWUsT0FBTyxnQkFBZ0IsNEJBQTRCLEdBQUcsMkNBQTJDLGtCQUFrQiwyQ0FBMkMsS0FBSyw2QkFBNkIsMkJBQTJCLE1BQU0sT0FBTyxlQUFlLEVBQUUsb0JBQW9CLG9CQUFvQixLQUFLLEdBQUcsU0FBUyx3QkFBd0IsT0FBTyxhQUFhLHdDQUF3QyxZQUFZLHNCQUFzQixZQUFZLE9BQU8sNkJBQTZCLHFCQUFxQixPQUFPLHFCQUFxQixPQUFPLE1BQU0sZUFBZSxRQUFRLEdBQUcsU0FBUyxxQkFBcUIsd0NBQXdDLHNCQUFzQixxQkFBcUIsT0FBTyxhQUFhLEdBQUcseUJBQXlCLHlDQUF5QyxhQUFhLFlBQVksd0JBQXdCLE1BQU0sMERBQTBELFlBQVksNkJBQTZCLGtCQUFrQixvQkFBb0IscUJBQXFCLGFBQWEsZ0VBQWdFLFlBQVksT0FBTyxNQUFNLCtDQUErQyxLQUFLLG9DQUFvQyxhQUFhLDRCQUE0QixTQUFTLHlCQUF5QiwrQkFBK0IsVUFBVSxpQkFBaUIsTUFBTSxjQUFjLGtCQUFrQixTQUFTLGdCQUFnQixzQkFBc0IsV0FBVyxzQkFBc0IsU0FBUyxvREFBb0QsaURBQWlELDJDQUEyQyxRQUFRLHNCQUFzQixnQkFBZ0IsU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUksc0NBQXNDLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLG1FQUFtRSxTQUFTLEtBQUssK0JBQStCLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2htci9ob3RNb2R1bGVSZXBsYWNlbWVudC5qcz84NTUwIl0sInNvdXJjZXNDb250ZW50IjpbIigoKT0+e1widXNlIHN0cmljdFwiO3ZhciBlPXs2ODY6KGUscix0KT0+e3ZhciBuPXQoODA4KTt2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpO3ZhciBhPXR5cGVvZiBkb2N1bWVudD09PVwidW5kZWZpbmVkXCI7dmFyIG89QXJyYXkucHJvdG90eXBlLmZvckVhY2g7ZnVuY3Rpb24gZGVib3VuY2UoZSxyKXt2YXIgdD0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXM7dmFyIGk9YXJndW1lbnRzO3ZhciBhPWZ1bmN0aW9uIGZ1bmN0aW9uQ2FsbCgpe3JldHVybiBlLmFwcGx5KG4saSl9O2NsZWFyVGltZW91dCh0KTt0PXNldFRpbWVvdXQoYSxyKX19ZnVuY3Rpb24gbm9vcCgpe31mdW5jdGlvbiBnZXRDdXJyZW50U2NyaXB0VXJsKGUpe3ZhciByPWlbZV07aWYoIXIpe2lmKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpe3I9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmN9ZWxzZXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTt2YXIgYT10W3QubGVuZ3RoLTFdO2lmKGEpe3I9YS5zcmN9fWlbZV09cn1yZXR1cm4gZnVuY3Rpb24oZSl7aWYoIXIpe3JldHVybiBudWxsfXZhciB0PXIuc3BsaXQoLyhbXlxcXFwvXSspXFwuanMkLyk7dmFyIGk9dCYmdFsxXTtpZighaSl7cmV0dXJuW3IucmVwbGFjZShcIi5qc1wiLFwiLmNzc1wiKV19aWYoIWUpe3JldHVybltyLnJlcGxhY2UoXCIuanNcIixcIi5jc3NcIildfXJldHVybiBlLnNwbGl0KFwiLFwiKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBSZWdFeHAoXCJcIi5jb25jYXQoaSxcIlxcXFwuanMkXCIpLFwiZ1wiKTtyZXR1cm4gbihyLnJlcGxhY2UodCxcIlwiLmNvbmNhdChlLnJlcGxhY2UoL3tmaWxlTmFtZX0vZyxpKSxcIi5jc3NcIikpKX0pKX19ZnVuY3Rpb24gdXBkYXRlQ3NzKGUscil7aWYoIXIpe2lmKCFlLmhyZWYpe3JldHVybn1yPWUuaHJlZi5zcGxpdChcIj9cIilbMF19aWYoIWlzVXJsUmVxdWVzdChyKSl7cmV0dXJufWlmKGUuaXNMb2FkZWQ9PT1mYWxzZSl7cmV0dXJufWlmKCFyfHwhKHIuaW5kZXhPZihcIi5jc3NcIik+LTEpKXtyZXR1cm59ZS52aXNpdGVkPXRydWU7dmFyIHQ9ZS5jbG9uZU5vZGUoKTt0LmlzTG9hZGVkPWZhbHNlO3QuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwoZnVuY3Rpb24oKXtpZih0LmlzTG9hZGVkKXtyZXR1cm59dC5pc0xvYWRlZD10cnVlO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX0pKTt0LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLChmdW5jdGlvbigpe2lmKHQuaXNMb2FkZWQpe3JldHVybn10LmlzTG9hZGVkPXRydWU7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfSkpO3QuaHJlZj1cIlwiLmNvbmNhdChyLFwiP1wiKS5jb25jYXQoRGF0ZS5ub3coKSk7aWYoZS5uZXh0U2libGluZyl7ZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGUubmV4dFNpYmxpbmcpfWVsc2V7ZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHQpfX1mdW5jdGlvbiBnZXRSZWxvYWRVcmwoZSxyKXt2YXIgdDtlPW4oZSx7c3RyaXBXV1c6ZmFsc2V9KTtyLnNvbWUoKGZ1bmN0aW9uKG4pe2lmKGUuaW5kZXhPZihyKT4tMSl7dD1ufX0pKTtyZXR1cm4gdH1mdW5jdGlvbiByZWxvYWRTdHlsZShlKXtpZighZSl7cmV0dXJuIGZhbHNlfXZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaW5rXCIpO3ZhciB0PWZhbHNlO28uY2FsbChyLChmdW5jdGlvbihyKXtpZighci5ocmVmKXtyZXR1cm59dmFyIG49Z2V0UmVsb2FkVXJsKHIuaHJlZixlKTtpZighaXNVcmxSZXF1ZXN0KG4pKXtyZXR1cm59aWYoci52aXNpdGVkPT09dHJ1ZSl7cmV0dXJufWlmKG4pe3VwZGF0ZUNzcyhyLG4pO3Q9dHJ1ZX19KSk7cmV0dXJuIHR9ZnVuY3Rpb24gcmVsb2FkQWxsKCl7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcImxpbmtcIik7by5jYWxsKGUsKGZ1bmN0aW9uKGUpe2lmKGUudmlzaXRlZD09PXRydWUpe3JldHVybn11cGRhdGVDc3MoZSl9KSl9ZnVuY3Rpb24gaXNVcmxSZXF1ZXN0KGUpe2lmKCEvXlthLXpBLVpdW2EtekEtWlxcZCtcXC0uXSo6Ly50ZXN0KGUpKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9ZS5leHBvcnRzPWZ1bmN0aW9uKGUscil7aWYoYSl7Y29uc29sZS5sb2coXCJubyB3aW5kb3cuZG9jdW1lbnQgZm91bmQsIHdpbGwgbm90IEhNUiBDU1NcIik7cmV0dXJuIG5vb3B9dmFyIHQ9Z2V0Q3VycmVudFNjcmlwdFVybChlKTtmdW5jdGlvbiB1cGRhdGUoKXt2YXIgZT10KHIuZmlsZW5hbWUpO3ZhciBuPXJlbG9hZFN0eWxlKGUpO2lmKHIubG9jYWxzKXtjb25zb2xlLmxvZyhcIltITVJdIERldGVjdGVkIGxvY2FsIGNzcyBtb2R1bGVzLiBSZWxvYWQgYWxsIGNzc1wiKTtyZWxvYWRBbGwoKTtyZXR1cm59aWYobil7Y29uc29sZS5sb2coXCJbSE1SXSBjc3MgcmVsb2FkICVzXCIsZS5qb2luKFwiIFwiKSl9ZWxzZXtjb25zb2xlLmxvZyhcIltITVJdIFJlbG9hZCBhbGwgY3NzXCIpO3JlbG9hZEFsbCgpfX1yZXR1cm4gZGVib3VuY2UodXBkYXRlLDUwKX19LDgwODplPT57ZnVuY3Rpb24gbm9ybWFsaXplVXJsKGUpe3JldHVybiBlLnJlZHVjZSgoZnVuY3Rpb24oZSxyKXtzd2l0Y2gocil7Y2FzZVwiLi5cIjplLnBvcCgpO2JyZWFrO2Nhc2VcIi5cIjpicmVhaztkZWZhdWx0OmUucHVzaChyKX1yZXR1cm4gZX0pLFtdKS5qb2luKFwiL1wiKX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZT1lLnRyaW0oKTtpZigvXmRhdGE6L2kudGVzdChlKSl7cmV0dXJuIGV9dmFyIHI9ZS5pbmRleE9mKFwiLy9cIikhPT0tMT9lLnNwbGl0KFwiLy9cIilbMF0rXCIvL1wiOlwiXCI7dmFyIHQ9ZS5yZXBsYWNlKG5ldyBSZWdFeHAocixcImlcIiksXCJcIikuc3BsaXQoXCIvXCIpO3ZhciBuPXRbMF0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXC4kLyxcIlwiKTt0WzBdPVwiXCI7dmFyIGk9bm9ybWFsaXplVXJsKHQpO3JldHVybiByK24raX19fTt2YXIgcj17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKHQpe3ZhciBuPXJbdF07aWYobiE9PXVuZGVmaW5lZCl7cmV0dXJuIG4uZXhwb3J0c312YXIgaT1yW3RdPXtleHBvcnRzOnt9fTt2YXIgYT10cnVlO3RyeXtlW3RdKGksaS5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO2E9ZmFsc2V9ZmluYWxseXtpZihhKWRlbGV0ZSByW3RdfXJldHVybiBpLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciB0PV9fbmNjd3Bja19yZXF1aXJlX18oNjg2KTttb2R1bGUuZXhwb3J0cz10fSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/mini-css-extract-plugin/hmr/hotModuleReplacement.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"0e244ce5621c\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIwZTI0NGNlNTYyMWNcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./app/layout.tsx": +/*!************************!*\ + !*** ./app/layout.tsx ***! + \************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ RootLayout; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/font/google/target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"} */ \"(app-pages-browser)/./node_modules/next/font/google/target.css?{\\\"path\\\":\\\"app\\\\\\\\layout.tsx\\\",\\\"import\\\":\\\"Inter\\\",\\\"arguments\\\":[{\\\"subsets\\\":[\\\"latin\\\"]}],\\\"variableName\\\":\\\"inter\\\"}\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _styles_globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../styles/globals.css */ \"(app-pages-browser)/./styles/globals.css\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n// Metadata needs to be exported from a server component, so this won't work in a client component\n// Moving this to a separate file or removing it for now\nconst metadata = {\n title: \"ZeoTap Data Ingestion Tool\",\n description: \"Bidirectional ClickHouse & Flat File Data Ingestion Tool\"\n};\nfunction RootLayout(param) {\n let { children } = param;\n _s();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n // Function to handle home button click - will navigate to the home page\n const handleHomeClick = ()=>{\n router.push(\"/\");\n router.refresh(); // Force a refresh to reset state\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"en\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"head\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"title\", {\n children: metadata.title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 34,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"meta\", {\n name: \"description\",\n content: metadata.description\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 35,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 33,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n className: (next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default().className),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"bg-gradient-to-r from-primary to-accent text-white shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between py-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-shrink-0 w-10 h-10 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-primary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 45,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 46,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 44,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 43,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-bold tracking-tight\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 50,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-medium text-blue-100\",\n children: \"Data Ingestion Tool\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 51,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 49,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 42,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex items-center space-x-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium text-blue-100\",\n children: \"Bidirectional ClickHouse & Flat File Data Ingestion\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 55,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"px-4 py-2 bg-white text-primary rounded-md text-sm font-medium hover:bg-blue-50 transition-colors flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 61,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 60,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 56,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 54,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"md:hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"text-white hover:text-blue-100 flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 72,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 71,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 41,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 40,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 39,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"container mx-auto py-8 px-4\",\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 80,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"footer\", {\n className: \"bg-secondary text-white p-4 mt-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col md:flex-row justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2 mb-4 md:mb-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 text-secondary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 87,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 88,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 86,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 85,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 91,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 84,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n children: [\n \"\\xa9 \",\n new Date().getFullYear(),\n \" ZeoTap | Data Ingestion Tool\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 93,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-4 mt-4 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"https://github.com/harshit1634\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 97,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 96,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 95,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 102,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 101,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 100,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 94,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 83,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 82,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 81,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 38,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 37,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 32,\n columnNumber: 5\n }, this);\n}\n_s(RootLayout, \"fN7XvhJ+p5oE6+Xlo0NJmXpxjC8=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter\n ];\n});\n_c = RootLayout;\nvar _c;\n$RefreshReg$(_c, \"RootLayout\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9sYXlvdXQudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBUU1BO0FBSnlCO0FBRWE7QUFJNUMsa0dBQWtHO0FBQ2xHLHdEQUF3RDtBQUN4RCxNQUFNRSxXQUFXO0lBQ2ZDLE9BQU87SUFDUEMsYUFBYTtBQUNmO0FBRWUsU0FBU0MsV0FBVyxLQUlqQztRQUppQyxFQUNqQ0MsUUFBUSxFQUdSLEdBSmlDOztJQUtqQyxNQUFNQyxTQUFTTiwwREFBU0E7SUFFeEIsd0VBQXdFO0lBQ3hFLE1BQU1PLGtCQUFrQjtRQUN0QkQsT0FBT0UsSUFBSSxDQUFDO1FBQ1pGLE9BQU9HLE9BQU8sSUFBSSxpQ0FBaUM7SUFDckQ7SUFFQSxxQkFDRSw4REFBQ0M7UUFBS0MsTUFBSzs7MEJBQ1QsOERBQUNDOztrQ0FDQyw4REFBQ1Y7a0NBQU9ELFNBQVNDLEtBQUs7Ozs7OztrQ0FDdEIsOERBQUNXO3dCQUFLQyxNQUFLO3dCQUFjQyxTQUFTZCxTQUFTRSxXQUFXOzs7Ozs7Ozs7Ozs7MEJBRXhELDhEQUFDYTtnQkFBS0MsV0FBV2xCLDJKQUFlOzBCQUM5Qiw0RUFBQ21CO29CQUFJRCxXQUFVOztzQ0FDYiw4REFBQ0U7NEJBQU9GLFdBQVU7c0NBQ2hCLDRFQUFDQztnQ0FBSUQsV0FBVTswQ0FDYiw0RUFBQ0M7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTs7OERBQ2IsOERBQUNDO29EQUFJRCxXQUFVOzhEQUNiLDRFQUFDRzt3REFBSUgsV0FBVTt3REFBdUJJLFNBQVE7d0RBQVlDLE1BQUs7d0RBQU9DLE9BQU07OzBFQUMxRSw4REFBQ0M7Z0VBQUtDLEdBQUU7Z0VBQXdCSCxNQUFLOzs7Ozs7MEVBQ3JDLDhEQUFDRTtnRUFBS0MsR0FBRTtnRUFBc0JILE1BQUs7Z0VBQWVJLFNBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7OzhEQUc5RCw4REFBQ1I7O3NFQUNDLDhEQUFDUzs0REFBR1YsV0FBVTtzRUFBb0M7Ozs7OztzRUFDbEQsOERBQUNXOzREQUFFWCxXQUFVO3NFQUFvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NEQUdyRCw4REFBQ0M7NENBQUlELFdBQVU7OzhEQUNiLDhEQUFDWTtvREFBS1osV0FBVTs4REFBb0M7Ozs7Ozs4REFDcEQsOERBQUNhO29EQUNDQyxTQUFTeEI7b0RBQ1RVLFdBQVU7O3NFQUVWLDhEQUFDRzs0REFBSUgsV0FBVTs0REFBZUssTUFBSzs0REFBT1UsUUFBTzs0REFBZVgsU0FBUTs0REFBWUUsT0FBTTtzRUFDeEYsNEVBQUNDO2dFQUFLUyxlQUFjO2dFQUFRQyxnQkFBZTtnRUFBUUMsYUFBWTtnRUFBSVYsR0FBRTs7Ozs7Ozs7Ozs7d0RBQ2pFOzs7Ozs7Ozs7Ozs7O3NEQUlWLDhEQUFDUDs0Q0FBSUQsV0FBVTtzREFDYiw0RUFBQ2E7Z0RBQ0NDLFNBQVN4QjtnREFDVFUsV0FBVTs7a0VBRVYsOERBQUNHO3dEQUFJSCxXQUFVO3dEQUFlSyxNQUFLO3dEQUFPVSxRQUFPO3dEQUFlWCxTQUFRO3dEQUFZRSxPQUFNO2tFQUN4Riw0RUFBQ0M7NERBQUtTLGVBQWM7NERBQVFDLGdCQUFlOzREQUFRQyxhQUFZOzREQUFJVixHQUFFOzs7Ozs7Ozs7OztvREFDakU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBT2hCLDhEQUFDVzs0QkFBS25CLFdBQVU7c0NBQStCWjs7Ozs7O3NDQUMvQyw4REFBQ2dDOzRCQUFPcEIsV0FBVTtzQ0FDaEIsNEVBQUNDO2dDQUFJRCxXQUFVOzBDQUNiLDRFQUFDQztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUNDOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ0M7b0RBQUlELFdBQVU7OERBQ2IsNEVBQUNHO3dEQUFJSCxXQUFVO3dEQUF5QkksU0FBUTt3REFBWUMsTUFBSzt3REFBT0MsT0FBTTs7MEVBQzVFLDhEQUFDQztnRUFBS0MsR0FBRTtnRUFBd0JILE1BQUs7Ozs7OzswRUFDckMsOERBQUNFO2dFQUFLQyxHQUFFO2dFQUFzQkgsTUFBSztnRUFBZUksU0FBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7OERBRzlELDhEQUFDRztvREFBS1osV0FBVTs4REFBYzs7Ozs7Ozs7Ozs7O3NEQUVoQyw4REFBQ1c7NENBQUVYLFdBQVU7O2dEQUFVO2dEQUFRLElBQUlxQixPQUFPQyxXQUFXO2dEQUFHOzs7Ozs7O3NEQUN4RCw4REFBQ3JCOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ3VCO29EQUFFQyxNQUFLO29EQUFpQ0MsUUFBTztvREFBU0MsS0FBSTtvREFBc0IxQixXQUFVOzhEQUMzRiw0RUFBQ0c7d0RBQUlILFdBQVU7d0RBQVVLLE1BQUs7d0RBQWVELFNBQVE7d0RBQVl1QixlQUFZO2tFQUMzRSw0RUFBQ3BCOzREQUFLcUIsVUFBUzs0REFBVXBCLEdBQUU7NERBQW10QnFCLFVBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7OERBRzN2Qiw4REFBQ047b0RBQUVDLE1BQUs7b0RBQUl4QixXQUFVOzhEQUNwQiw0RUFBQ0c7d0RBQUlILFdBQVU7d0RBQVVLLE1BQUs7d0RBQWVELFNBQVE7d0RBQVl1QixlQUFZO2tFQUMzRSw0RUFBQ3BCOzREQUFLQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVzlCO0dBL0Z3QnJCOztRQUtQSixzREFBU0E7OztLQUxGSSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvbGF5b3V0LnRzeD85OTg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcclxuXHJcbmltcG9ydCB0eXBlIHsgTWV0YWRhdGEgfSBmcm9tICduZXh0JztcclxuaW1wb3J0IHsgSW50ZXIgfSBmcm9tICduZXh0L2ZvbnQvZ29vZ2xlJztcclxuaW1wb3J0ICcuLi9zdHlsZXMvZ2xvYmFscy5jc3MnO1xyXG5pbXBvcnQgTGluayBmcm9tICduZXh0L2xpbmsnO1xyXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24nO1xyXG5cclxuY29uc3QgaW50ZXIgPSBJbnRlcih7IHN1YnNldHM6IFsnbGF0aW4nXSB9KTtcclxuXHJcbi8vIE1ldGFkYXRhIG5lZWRzIHRvIGJlIGV4cG9ydGVkIGZyb20gYSBzZXJ2ZXIgY29tcG9uZW50LCBzbyB0aGlzIHdvbid0IHdvcmsgaW4gYSBjbGllbnQgY29tcG9uZW50XHJcbi8vIE1vdmluZyB0aGlzIHRvIGEgc2VwYXJhdGUgZmlsZSBvciByZW1vdmluZyBpdCBmb3Igbm93XHJcbmNvbnN0IG1ldGFkYXRhID0ge1xyXG4gIHRpdGxlOiAnWmVvVGFwIERhdGEgSW5nZXN0aW9uIFRvb2wnLFxyXG4gIGRlc2NyaXB0aW9uOiAnQmlkaXJlY3Rpb25hbCBDbGlja0hvdXNlICYgRmxhdCBGaWxlIERhdGEgSW5nZXN0aW9uIFRvb2wnLFxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUm9vdExheW91dCh7XHJcbiAgY2hpbGRyZW4sXHJcbn06IFJlYWRvbmx5PHtcclxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xyXG59Pikge1xyXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xyXG5cclxuICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgaG9tZSBidXR0b24gY2xpY2sgLSB3aWxsIG5hdmlnYXRlIHRvIHRoZSBob21lIHBhZ2VcclxuICBjb25zdCBoYW5kbGVIb21lQ2xpY2sgPSAoKSA9PiB7XHJcbiAgICByb3V0ZXIucHVzaCgnLycpO1xyXG4gICAgcm91dGVyLnJlZnJlc2goKTsgLy8gRm9yY2UgYSByZWZyZXNoIHRvIHJlc2V0IHN0YXRlXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxodG1sIGxhbmc9XCJlblwiPlxyXG4gICAgICA8aGVhZD5cclxuICAgICAgICA8dGl0bGU+e21ldGFkYXRhLnRpdGxlfTwvdGl0bGU+XHJcbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD17bWV0YWRhdGEuZGVzY3JpcHRpb259IC8+XHJcbiAgICAgIDwvaGVhZD5cclxuICAgICAgPGJvZHkgY2xhc3NOYW1lPXtpbnRlci5jbGFzc05hbWV9PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWdyYXktNTBcIj5cclxuICAgICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwiYmctZ3JhZGllbnQtdG8tciBmcm9tLXByaW1hcnkgdG8tYWNjZW50IHRleHQtd2hpdGUgc2hhZG93LWxnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyIG14LWF1dG8gcHgtNFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB5LTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC1zaHJpbmstMCB3LTEwIGgtMTAgYmctd2hpdGUgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02IHRleHQtcHJpbWFyeVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgMTlMMjEgMTJMMTIgNVYxOVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAxOUwxMiAxMkwzIDVWMTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIG9wYWNpdHk9XCIwLjVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRyYWNraW5nLXRpZ2h0XCI+WmVvVGFwPC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS0xMDBcIj5EYXRhIEluZ2VzdGlvbiBUb29sPC9wPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6ZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTEwMFwiPkJpZGlyZWN0aW9uYWwgQ2xpY2tIb3VzZSAmIEZsYXQgRmlsZSBEYXRhIEluZ2VzdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVIb21lQ2xpY2t9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtNCBweS0yIGJnLXdoaXRlIHRleHQtcHJpbWFyeSByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gaG92ZXI6YmctYmx1ZS01MCB0cmFuc2l0aW9uLWNvbG9ycyBmbGV4IGl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTQgbXItMVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD1cIjJcIiBkPVwiTTMgMTJsMi0ybTAgMGw3LTcgNyA3bS03LTd2MTRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgSG9tZVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZDpoaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUhvbWVDbGlja31cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIGhvdmVyOnRleHQtYmx1ZS0xMDAgZmxleCBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01IG1yLTFcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9XCIyXCIgZD1cIk0zIDEybDItMm0wIDBsNy03IDcgN20tNy03djE0XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIEhvbWVcclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgIDxtYWluIGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvIHB5LTggcHgtNFwiPntjaGlsZHJlbn08L21haW4+XHJcbiAgICAgICAgICA8Zm9vdGVyIGNsYXNzTmFtZT1cImJnLXNlY29uZGFyeSB0ZXh0LXdoaXRlIHAtNCBtdC04XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyIG14LWF1dG9cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgbWItNCBtZDptYi0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy04IGgtOCBiZy13aGl0ZSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTQgdGV4dC1zZWNvbmRhcnlcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDE5TDIxIDEyTDEyIDVWMTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMTlMMTIgMTJMMyA1VjE5WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBvcGFjaXR5PVwiMC41XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+WmVvVGFwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+JmNvcHk7IHtuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCl9IFplb1RhcCB8IERhdGEgSW5nZXN0aW9uIFRvb2w8L3A+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggc3BhY2UteC00IG10LTQgbWQ6bXQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL2hhcnNoaXQxNjM0XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgaG92ZXI6dGV4dC1ibHVlLTEwMCB0cmFuc2l0aW9uLWNvbG9yc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsUnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDJDNi40NzcgMiAyIDYuNDg0IDIgMTIuMDE3YzAgNC40MjUgMi44NjUgOC4xOCA2LjgzOSA5LjUwNC41LjA5Mi42ODItLjIxNy42ODItLjQ4MyAwLS4yMzctLjAwOC0uODY4LS4wMTMtMS43MDMtMi43ODIuNjA1LTMuMzY5LTEuMzQzLTMuMzY5LTEuMzQzLS40NTQtMS4xNTgtMS4xMS0xLjQ2Ni0xLjExLTEuNDY2LS45MDgtLjYyLjA2OS0uNjA4LjA2OS0uNjA4IDEuMDAzLjA3IDEuNTMxIDEuMDMyIDEuNTMxIDEuMDMyLjg5MiAxLjUzIDIuMzQxIDEuMDg4IDIuOTEuODMyLjA5Mi0uNjQ3LjM1LTEuMDg4LjYzNi0xLjMzOC0yLjIyLS4yNTMtNC41NTUtMS4xMTMtNC41NTUtNC45NTEgMC0xLjA5My4zOS0xLjk4OCAxLjAyOS0yLjY4OC0uMTAzLS4yNTMtLjQ0Ni0xLjI3Mi4wOTgtMi42NSAwIDAgLjg0LS4yNyAyLjc1IDEuMDI2QTkuNTY0IDkuNTY0IDAgMDExMiA2Ljg0NGMuODUuMDA0IDEuNzA1LjExNSAyLjUwNC4zMzcgMS45MDktMS4yOTYgMi43NDctMS4wMjcgMi43NDctMS4wMjcuNTQ2IDEuMzc5LjIwMiAyLjM5OC4xIDIuNjUxLjY0LjcgMS4wMjggMS41OTUgMS4wMjggMi42ODggMCAzLjg0OC0yLjMzOSA0LjY5NS00LjU2NiA0Ljk0My4zNTkuMzA5LjY3OC45Mi42NzggMS44NTUgMCAxLjMzOC0uMDEyIDIuNDE5LS4wMTIgMi43NDcgMCAuMjY4LjE4LjU4LjY4OC40ODJBMTAuMDE5IDEwLjAxOSAwIDAwMjIgMTIuMDE3QzIyIDYuNDg0IDE3LjUyMiAyIDEyIDJ6XCIgY2xpcFJ1bGU9XCJldmVub2RkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgaG92ZXI6dGV4dC1ibHVlLTEwMCB0cmFuc2l0aW9uLWNvbG9yc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMjkgMjAuMjUxYzcuNTQ3IDAgMTEuNjc1LTYuMjUzIDExLjY3NS0xMS42NzUgMC0uMTc4IDAtLjM1NS0uMDEyLS41M0E4LjM0OCA4LjM0OCAwIDAwMjIgNS45MmE4LjE5IDguMTkgMCAwMS0yLjM1Ny42NDYgNC4xMTggNC4xMTggMCAwMDEuODA0LTIuMjcgOC4yMjQgOC4yMjQgMCAwMS0yLjYwNS45OTYgNC4xMDcgNC4xMDcgMCAwMC02Ljk5MyAzLjc0MyAxMS42NSAxMS42NSAwIDAxLTguNDU3LTQuMjg3IDQuMTA2IDQuMTA2IDAgMDAxLjI3IDUuNDc3QTQuMDcyIDQuMDcyIDAgMDEyLjggOS43MTN2LjA1MmE0LjEwNSA0LjEwNSAwIDAwMy4yOTIgNC4wMjIgNC4wOTUgNC4wOTUgMCAwMS0xLjg1My4wNyA0LjEwOCA0LjEwOCAwIDAwMy44MzQgMi44NUE4LjIzMyA4LjIzMyAwIDAxMiAxOC40MDdhMTEuNjE2IDExLjYxNiAwIDAwNi4yOSAxLjg0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb290ZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYm9keT5cclxuICAgIDwvaHRtbD5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJpbnRlciIsInVzZVJvdXRlciIsIm1ldGFkYXRhIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIlJvb3RMYXlvdXQiLCJjaGlsZHJlbiIsInJvdXRlciIsImhhbmRsZUhvbWVDbGljayIsInB1c2giLCJyZWZyZXNoIiwiaHRtbCIsImxhbmciLCJoZWFkIiwibWV0YSIsIm5hbWUiLCJjb250ZW50IiwiYm9keSIsImNsYXNzTmFtZSIsImRpdiIsImhlYWRlciIsInN2ZyIsInZpZXdCb3giLCJmaWxsIiwieG1sbnMiLCJwYXRoIiwiZCIsIm9wYWNpdHkiLCJoMSIsInAiLCJzcGFuIiwiYnV0dG9uIiwib25DbGljayIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwibWFpbiIsImZvb3RlciIsIkRhdGUiLCJnZXRGdWxsWWVhciIsImEiLCJocmVmIiwidGFyZ2V0IiwicmVsIiwiYXJpYS1oaWRkZW4iLCJmaWxsUnVsZSIsImNsaXBSdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/layout.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/font/google/target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"}": +/*!*********************************************************************************************************************************************************!*\ + !*** ./node_modules/next/font/google/target.css?{"path":"app\\layout.tsx","import":"Inter","arguments":[{"subsets":["latin"]}],"variableName":"inter"} ***! + \*********************************************************************************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("// extracted by mini-css-extract-plugin\nmodule.exports = {\"style\":{\"fontFamily\":\"'__Inter_d65c78', '__Inter_Fallback_d65c78'\",\"fontStyle\":\"normal\"},\"className\":\"__className_d65c78\"};\n if(true) {\n // 1744820004236\n var cssReload = __webpack_require__(/*! ./node_modules/next/dist/compiled/mini-css-extract-plugin/hmr/hotModuleReplacement.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/mini-css-extract-plugin/hmr/hotModuleReplacement.js\")(module.id, {\"publicPath\":\"/_next/\",\"esModule\":false,\"locals\":true});\n module.hot.dispose(cssReload);\n \n }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2ZvbnQvZ29vZ2xlL3RhcmdldC5jc3M/e1wicGF0aFwiOlwiYXBwXFxcXGxheW91dC50c3hcIixcImltcG9ydFwiOlwiSW50ZXJcIixcImFyZ3VtZW50c1wiOlt7XCJzdWJzZXRzXCI6W1wibGF0aW5cIl19XSxcInZhcmlhYmxlTmFtZVwiOlwiaW50ZXJcIn0iLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxrQkFBa0IsU0FBUyxnRkFBZ0Y7QUFDM0csT0FBTyxJQUFVO0FBQ2pCO0FBQ0Esc0JBQXNCLG1CQUFPLENBQUMsd01BQXVJLGNBQWMsc0RBQXNEO0FBQ3pPLE1BQU0sVUFBVTtBQUNoQjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZm9udC9nb29nbGUvdGFyZ2V0LmNzcz9iOGU4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxubW9kdWxlLmV4cG9ydHMgPSB7XCJzdHlsZVwiOntcImZvbnRGYW1pbHlcIjpcIidfX0ludGVyX2Q2NWM3OCcsICdfX0ludGVyX0ZhbGxiYWNrX2Q2NWM3OCdcIixcImZvbnRTdHlsZVwiOlwibm9ybWFsXCJ9LFwiY2xhc3NOYW1lXCI6XCJfX2NsYXNzTmFtZV9kNjVjNzhcIn07XG4gICAgaWYobW9kdWxlLmhvdCkge1xuICAgICAgLy8gMTc0NDgyMDAwNDIzNlxuICAgICAgdmFyIGNzc1JlbG9hZCA9IHJlcXVpcmUoXCJDOi9Vc2Vycy9IQVJTSElUIEJBR0dBL0Rlc2t0b3AvWmVvVGFwMi4wL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vaG1yL2hvdE1vZHVsZVJlcGxhY2VtZW50LmpzXCIpKG1vZHVsZS5pZCwge1wicHVibGljUGF0aFwiOlwiL19uZXh0L1wiLFwiZXNNb2R1bGVcIjpmYWxzZSxcImxvY2Fsc1wiOnRydWV9KTtcbiAgICAgIG1vZHVsZS5ob3QuZGlzcG9zZShjc3NSZWxvYWQpO1xuICAgICAgXG4gICAgfVxuICAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/font/google/target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"}\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js ***! + \****************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false;\n\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference');\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_CLIENT_REFERENCE$2 || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n if (typeof type === 'function') {\n if (type.$$typeof === REACT_CLIENT_REFERENCE$1) {\n // TODO: Create a convention for naming client references with debug info.\n return null;\n }\n\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n case REACT_CACHE_TYPE:\n {\n return 'Cache';\n }\n\n }\n\n if (typeof type === 'object') {\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n * (1) throwing and catching an error in the function - this will be our\n * control error.\n * (2) calling the component which will eventually throw an error that we'll\n * catch - this will be our sample error.\n * (3) diffing the control and sample error stacks to find the stack frame\n * which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n /**\n * Finding a common stack frame between sample and control errors can be\n * tricky given the different types and levels of stack trace truncation from\n * different JS VMs. So instead we'll attempt to control what that common\n * frame should be through this object method:\n * Having both the sample and control errors be in the function under the\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n * `displayName` properties of the function ensures that a stack\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n * it for both control and sample stacks.\n */\n\n\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n var control;\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe[prop-missing]\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n } // TODO(luna): This will currently only throw if the function component\n // tries to access React/ReactDOM/props. We should probably make this throw\n // in simple components too\n\n\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n // component, which we don't yet support. Attach a noop catch handler to\n // silence the error.\n // TODO: Implement component stacks for async client components?\n\n if (maybePromise && typeof maybePromise.catch === 'function') {\n maybePromise.catch(function () {});\n }\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n return [sample.stack, control.stack];\n }\n }\n\n return [null, null];\n }\n }; // $FlowFixMe[prop-missing]\n\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n if (namePropDescriptor && namePropDescriptor.configurable) {\n // V8 utilizes a function's `name` property when generating a stack trace.\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n // is set to `false`.\n // $FlowFixMe[cannot-write]\n 'name', {\n value: 'DetermineComponentFrameRoot'\n });\n }\n\n try {\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n\n if (sampleStack && controlStack) {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sampleStack.split('\\n');\n var controlLines = controlStack.split('\\n');\n var s = 0;\n var c = 0;\n\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n s++;\n }\n\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n c++;\n } // We couldn't find our intentionally injected common root frame, attempt\n // to find another common root frame by search from the bottom of the\n // control stack...\n\n\n if (s === sampleLines.length || c === controlLines.length) {\n s = sampleLines.length - 1;\n c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n if (true) {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe[incompatible-use] This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement$1(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement$1(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement$1(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n return type;\n }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner$1.current && self && ReactCurrentOwner$1.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner$1.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nfunction ReactElement(type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n}\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV$1(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner$1.current, props);\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = getComponentNameFromType(parentType);\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object' || !node) {\n return;\n }\n\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n if (type.$$typeof === REACT_CLIENT_REFERENCE) {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV$1(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n\nvar jsxDEV = jsxWithValidation ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsxDEV = jsxDEV;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzR0FBMEI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUcsZUFBZTtBQUNoSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSLGtEQUFrRDtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEI7QUFDNUI7QUFDQSxxQ0FBcUM7O0FBRXJDLGdDQUFnQztBQUNoQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUEscUVBQXFFOztBQUVyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQSxTQUFTO0FBQ1QsdUJBQXVCO0FBQ3ZCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCx3QkFBd0I7QUFDeEI7QUFDQSxTQUFTO0FBQ1QsaUNBQWlDO0FBQ2pDO0FBQ0EsU0FBUztBQUNULDJCQUEyQjtBQUMzQjtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7O0FBR2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7OztBQUdkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBOzs7QUFHQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLGdIQUFnSDs7QUFFaEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBLGdGQUFnRjtBQUNoRjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLElBQUk7QUFDeEI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOzs7QUFHbEI7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJIQUEySDtBQUMzSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9FQUFvRTs7QUFFcEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHOztBQUVsRztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2QsV0FBVyxlQUFlO0FBQzFCLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQiwyREFBMkQsVUFBVTtBQUNyRSx5QkFBeUIsVUFBVTtBQUNuQztBQUNBLGFBQWEsVUFBVTtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsV0FBVyxHQUFHO0FBQ2Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkRBQTZEO0FBQzdEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsR0FBRztBQUNkOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9EQUFvRDtBQUNwRCxzQkFBc0IsaUJBQWlCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLDRDQUE0Qzs7QUFFNUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6Qjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw0REFBNEQ7QUFDNUQ7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsOENBQThDLGdEQUFnRCxNQUFNLGFBQWE7O0FBRWpIO0FBQ0EsK0NBQStDLGtDQUFrQyxPQUFPOztBQUV4Rix1R0FBdUcsY0FBYyxVQUFVLGdHQUFnRyxrQkFBa0IsVUFBVSxVQUFVOztBQUVyUTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBLGdCQUFnQjtBQUNoQixjQUFjO0FBQ2QsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcz8yMWY3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKTtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKTtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0Jyk7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKTtcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5Jyk7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbnZhciBSRUFDVF9DQUNIRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY2FjaGUnKTtcbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG5cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGl0ZW0pO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cbnZhciBlbmFibGVDYWNoZUVsZW1lbnQgPSBmYWxzZTtcbnZhciBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyA9IGZhbHNlOyAvLyBObyBrbm93biBidWdzLCBidXQgbmVlZHMgcGVyZm9ybWFuY2UgdGVzdGluZ1xuXG52YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7IC8vIEVuYWJsZXMgdW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgZmVhdHVyZSBpbiBGaWJlclxuLy8gc3R1ZmYuIEludGVuZGVkIHRvIGVuYWJsZSBSZWFjdCBjb3JlIG1lbWJlcnMgdG8gbW9yZSBlYXNpbHkgZGVidWcgc2NoZWR1bGluZ1xuLy8gaXNzdWVzIGluIERFViBidWlsZHMuXG5cbnZhciBlbmFibGVEZWJ1Z1RyYWNpbmcgPSBmYWxzZTtcblxudmFyIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMiA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTtcbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCBlbmFibGVEZWJ1Z1RyYWNpbmcgIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgZW5hYmxlTGVnYWN5SGlkZGVuICB8fCB0eXBlID09PSBSRUFDVF9PRkZTQ1JFRU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSAgfHwgZW5hYmxlQ2FjaGVFbGVtZW50ICB8fCBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMiB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcblxuICBpZiAoZGlzcGxheU5hbWUpIHtcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XG4gIH1cblxuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lO1xufSAvLyBLZWVwIGluIHN5bmMgd2l0aCByZWFjdC1yZWNvbmNpbGVyL2dldENvbXBvbmVudE5hbWVGcm9tRmliZXJcblxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxudmFyIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTsgLy8gTm90ZSB0aGF0IHRoZSByZWNvbmNpbGVyIHBhY2thZ2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgdG8gdXNlIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoKSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxKSB7XG4gICAgICAvLyBUT0RPOiBDcmVhdGUgYSBjb252ZW50aW9uIGZvciBuYW1pbmcgY2xpZW50IHJlZmVyZW5jZXMgd2l0aCBkZWJ1ZyBpbmZvLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuXG4gICAgY2FzZSBSRUFDVF9DQUNIRV9UWVBFOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJ0NhY2hlJztcbiAgICAgIH1cblxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgdmFyIG91dGVyTmFtZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbDtcblxuICAgICAgICBpZiAob3V0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG91dGVyTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnTWVtbyc7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cbi8qKlxuICogTGV2ZXJhZ2VzIG5hdGl2ZSBicm93c2VyL1ZNIHN0YWNrIGZyYW1lcyB0byBnZXQgcHJvcGVyIGRldGFpbHMgKGUuZy5cbiAqIGZpbGVuYW1lLCBsaW5lICsgY29sIG51bWJlcikgZm9yIGEgc2luZ2xlIGNvbXBvbmVudCBpbiBhIGNvbXBvbmVudCBzdGFjay4gV2VcbiAqIGRvIHRoaXMgYnk6XG4gKiAgICgxKSB0aHJvd2luZyBhbmQgY2F0Y2hpbmcgYW4gZXJyb3IgaW4gdGhlIGZ1bmN0aW9uIC0gdGhpcyB3aWxsIGJlIG91clxuICogICAgICAgY29udHJvbCBlcnJvci5cbiAqICAgKDIpIGNhbGxpbmcgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYW4gZXJyb3IgdGhhdCB3ZSdsbFxuICogICAgICAgY2F0Y2ggLSB0aGlzIHdpbGwgYmUgb3VyIHNhbXBsZSBlcnJvci5cbiAqICAgKDMpIGRpZmZpbmcgdGhlIGNvbnRyb2wgYW5kIHNhbXBsZSBlcnJvciBzdGFja3MgdG8gZmluZCB0aGUgc3RhY2sgZnJhbWVcbiAqICAgICAgIHdoaWNoIHJlcHJlc2VudHMgb3VyIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRpbmcgYSBjb21tb24gc3RhY2sgZnJhbWUgYmV0d2VlbiBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGNhbiBiZVxuICAgKiB0cmlja3kgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcyBhbmQgbGV2ZWxzIG9mIHN0YWNrIHRyYWNlIHRydW5jYXRpb24gZnJvbVxuICAgKiBkaWZmZXJlbnQgSlMgVk1zLiBTbyBpbnN0ZWFkIHdlJ2xsIGF0dGVtcHQgdG8gY29udHJvbCB3aGF0IHRoYXQgY29tbW9uXG4gICAqIGZyYW1lIHNob3VsZCBiZSB0aHJvdWdoIHRoaXMgb2JqZWN0IG1ldGhvZDpcbiAgICogSGF2aW5nIGJvdGggdGhlIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgYmUgaW4gdGhlIGZ1bmN0aW9uIHVuZGVyIHRoZVxuICAgKiBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIHByb3BlcnR5LCArIHNldHRpbmcgdGhlIGBuYW1lYCBhbmRcbiAgICogYGRpc3BsYXlOYW1lYCBwcm9wZXJ0aWVzIG9mIHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYSBzdGFja1xuICAgKiBmcmFtZSBleGlzdHMgdGhhdCBoYXMgdGhlIG1ldGhvZCBuYW1lIGBEZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lUm9vdGAgaW5cbiAgICogaXQgZm9yIGJvdGggY29udHJvbCBhbmQgc2FtcGxlIHN0YWNrcy5cbiAgICovXG5cblxuICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udHJvbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgfSAvLyBUT0RPKGx1bmEpOiBUaGlzIHdpbGwgY3VycmVudGx5IG9ubHkgdGhyb3cgaWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgICAgICAgIC8vIHRyaWVzIHRvIGFjY2VzcyBSZWFjdC9SZWFjdERPTS9wcm9wcy4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyB0aHJvd1xuICAgICAgICAgIC8vIGluIHNpbXBsZSBjb21wb25lbnRzIHRvb1xuXG5cbiAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gZm4oKTsgLy8gSWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCByZXR1cm5zIGEgcHJvbWlzZSwgaXQncyBsaWtlbHkgYW4gYXN5bmNcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHdoaWNoIHdlIGRvbid0IHlldCBzdXBwb3J0LiBBdHRhY2ggYSBub29wIGNhdGNoIGhhbmRsZXIgdG9cbiAgICAgICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgY29tcG9uZW50IHN0YWNrcyBmb3IgYXN5bmMgY2xpZW50IGNvbXBvbmVudHM/XG5cbiAgICAgICAgICBpZiAobWF5YmVQcm9taXNlICYmIHR5cGVvZiBtYXliZVByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPSAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JztcbiAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCAnbmFtZScpOyAvLyBCZWZvcmUgRVM2LCB0aGUgYG5hbWVgIHByb3BlcnR5IHdhcyBub3QgY29uZmlndXJhYmxlLlxuXG4gIGlmIChuYW1lUHJvcERlc2NyaXB0b3IgJiYgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIC8vIFY4IHV0aWxpemVzIGEgZnVuY3Rpb24ncyBgbmFtZWAgcHJvcGVydHkgd2hlbiBnZW5lcmF0aW5nIGEgc3RhY2sgdHJhY2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwgLy8gQ29uZmlndXJhYmxlIHByb3BlcnRpZXMgY2FuIGJlIHVwZGF0ZWQgZXZlbiBpZiBpdHMgd3JpdGFibGUgZGVzY3JpcHRvclxuICAgIC8vIGlzIHNldCB0byBgZmFsc2VgLlxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgICduYW1lJywge1xuICAgICAgdmFsdWU6ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnXG4gICAgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcblxuICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgdmFyIGMgPSAwO1xuXG4gICAgICB3aGlsZSAocyA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJiAhc2FtcGxlTGluZXNbc10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIHMrKztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGMgPCBjb250cm9sTGluZXMubGVuZ3RoICYmICFjb250cm9sTGluZXNbY10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIGMrKztcbiAgICAgIH0gLy8gV2UgY291bGRuJ3QgZmluZCBvdXIgaW50ZW50aW9uYWxseSBpbmplY3RlZCBjb21tb24gcm9vdCBmcmFtZSwgYXR0ZW1wdFxuICAgICAgLy8gdG8gZmluZCBhbm90aGVyIGNvbW1vbiByb290IGZyYW1lIGJ5IHNlYXJjaCBmcm9tIHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAvLyBjb250cm9sIHN0YWNrLi4uXG5cblxuICAgICAgaWYgKHMgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fCBjID09PSBjb250cm9sTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgICBjLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChoYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblxuZnVuY3Rpb24gaXNBcnJheShhKSB7XG4gIHJldHVybiBpc0FycmF5SW1wbChhKTtcbn1cblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuXG5cbmZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gIHtcbiAgICB0cnkge1xuICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXG4gIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAvL1xuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcbiAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxuICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcbiAgLy9cbiAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXG4gIC8vXG4gIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXG4gIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bjtcbnZhciBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bjtcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQuc3RhdGVOb2RlICE9PSBzZWxmKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxuZnVuY3Rpb24gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvd3MgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc2VsZlxuICAgIH0pOyAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZFxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZmNzL3B1bGwvMTA3XG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5cbmZ1bmN0aW9uIGpzeERFViQxKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIHNvdXJjZSwgc2VsZikge1xuICB7XG4gICAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB2YXIga2V5ID0gbnVsbDtcbiAgICB2YXIgcmVmID0gbnVsbDsgLy8gQ3VycmVudGx5LCBrZXkgY2FuIGJlIHNwcmVhZCBpbiBhcyBhIHByb3AuIFRoaXMgY2F1c2VzIGEgcG90ZW50aWFsXG4gICAgLy8gaXNzdWUgaWYga2V5IGlzIGFsc28gZXhwbGljaXRseSBkZWNsYXJlZCAoaWUuIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+XG4gICAgLy8gb3IgPGRpdiBrZXk9XCJIaVwiIHsuLi5wcm9wc30gLz4gKS4gV2Ugd2FudCB0byBkZXByZWNhdGUga2V5IHNwcmVhZCxcbiAgICAvLyBidXQgYXMgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAsIHdlIHdpbGwgdXNlIGpzeERFViBmb3IgZXZlcnl0aGluZyBleGNlcHRcbiAgICAvLyA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPiwgYmVjYXVzZSB3ZSBhcmVuJ3QgY3VycmVudGx5IGFibGUgdG8gdGVsbCBpZlxuICAgIC8vIGtleSBpcyBleHBsaWNpdGx5IGRlY2xhcmVkIHRvIGJlIHVuZGVmaW5lZCBvciBub3QuXG5cbiAgICBpZiAobWF5YmVLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1heWJlS2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBtYXliZUtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQsIHByb3BzKTtcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xuXG57XG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAge1xuICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICB7XG4gICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICB2YXIgcGFyZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShwYXJlbnRUeXBlKTtcblxuICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmZvO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gICAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gICAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8ICFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIDsgZWxzZSBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFR5cGVzO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBOb3RlOiBNZW1vIG9ubHkgY2hlY2tzIG91dGVyIHByb3BzIGhlcmUuXG4gICAgLy8gSW5uZXIgcHJvcHMgYXJlIGNoZWNrZWQgaW4gdGhlIHJlY29uY2lsZXIuXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5BYm91dEtleVNwcmVhZCA9IHt9O1xuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgaXNTdGF0aWNDaGlsZHJlbiwgc291cmNlLCBzZWxmKSB7XG4gIHtcbiAgICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG5cbiAgICBpZiAoIXZhbGlkVHlwZSkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpO1xuXG4gICAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZVN0cmluZztcblxuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh0eXBlKSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudCA9IGpzeERFViQxKHR5cGUsIHByb3BzLCBrZXksIHNvdXJjZSwgc2VsZik7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gICAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cbiAgICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gICAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXG5cblxuICAgIGlmICh2YWxpZFR5cGUpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuXG4gICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaXNTdGF0aWNDaGlsZHJlbikge1xuICAgICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpXSwgdHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignUmVhY3QuanN4OiBTdGF0aWMgY2hpbGRyZW4gc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheS4gJyArICdZb3UgYXJlIGxpa2VseSBleHBsaWNpdGx5IGNhbGxpbmcgUmVhY3QuanN4cyBvciBSZWFjdC5qc3hERVYuICcgKyAnVXNlIHRoZSBCYWJlbCB0cmFuc2Zvcm0gaW5zdGVhZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4sIHR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsICdrZXknKSkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0dXJuIGsgIT09ICdrZXknO1xuICAgICAgfSk7XG4gICAgICB2YXIgYmVmb3JlRXhhbXBsZSA9IGtleXMubGVuZ3RoID4gMCA/ICd7a2V5OiBzb21lS2V5LCAnICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7a2V5OiBzb21lS2V5fSc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0S2V5U3ByZWFkW2NvbXBvbmVudE5hbWUgKyBiZWZvcmVFeGFtcGxlXSkge1xuICAgICAgICB2YXIgYWZ0ZXJFeGFtcGxlID0ga2V5cy5sZW5ndGggPiAwID8gJ3snICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7fSc7XG5cbiAgICAgICAgZXJyb3IoJ0EgcHJvcHMgb2JqZWN0IGNvbnRhaW5pbmcgYSBcImtleVwiIHByb3AgaXMgYmVpbmcgc3ByZWFkIGludG8gSlNYOlxcbicgKyAnICBsZXQgcHJvcHMgPSAlcztcXG4nICsgJyAgPCVzIHsuLi5wcm9wc30gLz5cXG4nICsgJ1JlYWN0IGtleXMgbXVzdCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gSlNYIHdpdGhvdXQgdXNpbmcgc3ByZWFkOlxcbicgKyAnICBsZXQgcHJvcHMgPSAlcztcXG4nICsgJyAgPCVzIGtleT17c29tZUtleX0gey4uLnByb3BzfSAvPicsIGJlZm9yZUV4YW1wbGUsIGNvbXBvbmVudE5hbWUsIGFmdGVyRXhhbXBsZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0S2V5U3ByZWFkW2NvbXBvbmVudE5hbWUgKyBiZWZvcmVFeGFtcGxlXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn0gLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBleGlzdCB0byBzdGlsbCBnZXQgY2hpbGQgd2FybmluZ3MgaW4gZGV2XG5cbnZhciBqc3hERVYgPSBqc3hXaXRoVmFsaWRhdGlvbiA7XG5cbmV4cG9ydHMuRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuZXhwb3J0cy5qc3hERVYgPSBqc3hERVY7XG4gIH0pKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***! + \******************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSw4TEFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtZGV2LXJ1bnRpbWUuanM/YjYxZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n")); + +/***/ }) + +}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } +/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"); }); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ _N_E = __webpack_exports__; +/******/ } +]); \ No newline at end of file diff --git a/frontend/.next/static/chunks/app/not-found.js b/frontend/.next/static/chunks/app/not-found.js new file mode 100644 index 000000000..0a62787c8 --- /dev/null +++ b/frontend/.next/static/chunks/app/not-found.js @@ -0,0 +1,39 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/not-found"],{ + +/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-error.js&page=%2Fnot-found!": +/*!**************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-error.js&page=%2Fnot-found! ***! + \**************************************************************************************************************************************************************************************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/not-found\",\n function () {\n return __webpack_require__(/*! ./node_modules/next/dist/client/components/not-found-error.js */ \"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js\");\n }\n ]);\n if(true) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/not-found\"])\n });\n }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtY2xpZW50LXBhZ2VzLWxvYWRlci5qcz9hYnNvbHV0ZVBhZ2VQYXRoPUMlM0ElNUNVc2VycyU1Q0hBUlNISVQlMjBCQUdHQSU1Q0Rlc2t0b3AlNUNaZW9UYXAyLjAlNUNmcm9udGVuZCU1Q25vZGVfbW9kdWxlcyU1Q25leHQlNUNkaXN0JTVDY2xpZW50JTVDY29tcG9uZW50cyU1Q25vdC1mb3VuZC1lcnJvci5qcyZwYWdlPSUyRm5vdC1mb3VuZCEiLCJtYXBwaW5ncyI6IjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyx3SkFBK0Q7QUFDdEY7QUFDQTtBQUNBLE9BQU8sSUFBVTtBQUNqQixNQUFNLFVBQVU7QUFDaEI7QUFDQSxPQUFPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvPzRmODkiXSwic291cmNlc0NvbnRlbnQiOlsiXG4gICAgKHdpbmRvdy5fX05FWFRfUCA9IHdpbmRvdy5fX05FWFRfUCB8fCBbXSkucHVzaChbXG4gICAgICBcIi9ub3QtZm91bmRcIixcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmUoXCIuL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yLmpzXCIpO1xuICAgICAgfVxuICAgIF0pO1xuICAgIGlmKG1vZHVsZS5ob3QpIHtcbiAgICAgIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdpbmRvdy5fX05FWFRfUC5wdXNoKFtcIi9ub3QtZm91bmRcIl0pXG4gICAgICB9KTtcbiAgICB9XG4gICJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-error.js&page=%2Fnot-found!\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js": +/*!*********************************************************************!*\ + !*** ./node_modules/next/dist/client/components/not-found-error.js ***! + \*********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return NotFound;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: \"100vh\",\n textAlign: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n desc: {\n display: \"inline-block\"\n },\n h1: {\n display: \"inline-block\",\n margin: \"0 20px 0 0\",\n padding: \"0 23px 0 0\",\n fontSize: 24,\n fontWeight: 500,\n verticalAlign: \"top\",\n lineHeight: \"49px\"\n },\n h2: {\n fontSize: 14,\n fontWeight: 400,\n lineHeight: \"49px\",\n margin: 0\n }\n};\nfunction NotFound() {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: \"404: This page could not be found.\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.error,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n /* Minified CSS from\n body { margin: 0; color: #000; background: #fff; }\n .next-error-h1 {\n border-right: 1px solid rgba(0, 0, 0, .3);\n }\n\n @media (prefers-color-scheme: dark) {\n body { color: #fff; background: #000; }\n .next-error-h1 {\n border-right: 1px solid rgba(255, 255, 255, .3);\n }\n }\n */ __html: \"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"\n }\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n className: \"next-error-h1\",\n style: styles.h1,\n children: \"404\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.desc,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n style: styles.h2,\n children: \"This page could not be found.\"\n })\n })\n ]\n })\n })\n ]\n });\n}\n_c = NotFound;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=not-found-error.js.map\nvar _c;\n$RefreshReg$(_c, \"NotFound\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGdJQUF5QztBQUNsRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyxtRkFBTztBQUN2RSxNQUFNSSxTQUFTO0lBQ1hDLE9BQU87UUFDSCwwRkFBMEY7UUFDMUZDLFlBQVk7UUFDWkMsUUFBUTtRQUNSQyxXQUFXO1FBQ1hDLFNBQVM7UUFDVEMsZUFBZTtRQUNmQyxZQUFZO1FBQ1pDLGdCQUFnQjtJQUNwQjtJQUNBQyxNQUFNO1FBQ0ZKLFNBQVM7SUFDYjtJQUNBSyxJQUFJO1FBQ0FMLFNBQVM7UUFDVE0sUUFBUTtRQUNSQyxTQUFTO1FBQ1RDLFVBQVU7UUFDVkMsWUFBWTtRQUNaQyxlQUFlO1FBQ2ZDLFlBQVk7SUFDaEI7SUFDQUMsSUFBSTtRQUNBSixVQUFVO1FBQ1ZDLFlBQVk7UUFDWkUsWUFBWTtRQUNaTCxRQUFRO0lBQ1o7QUFDSjtBQUNBLFNBQVNqQjtJQUNMLE9BQXFCLFdBQUgsR0FBSSxJQUFHRyxZQUFZcUIsSUFBSSxFQUFFckIsWUFBWXNCLFFBQVEsRUFBRTtRQUM3REMsVUFBVTtZQUNOLFdBQVcsR0FBSSxJQUFHdkIsWUFBWXdCLEdBQUcsRUFBRSxTQUFTO2dCQUN4Q0QsVUFBVTtZQUNkO1lBQ0EsV0FBVyxHQUFJLElBQUd2QixZQUFZd0IsR0FBRyxFQUFFLE9BQU87Z0JBQ3RDQyxPQUFPdEIsT0FBT0MsS0FBSztnQkFDbkJtQixVQUF3QixXQUFILEdBQUksSUFBR3ZCLFlBQVlxQixJQUFJLEVBQUUsT0FBTztvQkFDakRFLFVBQVU7d0JBQ04sV0FBVyxHQUFJLElBQUd2QixZQUFZd0IsR0FBRyxFQUFFLFNBQVM7NEJBQ3hDRSx5QkFBeUI7Z0NBQ3JCOzs7Ozs7Ozs7Ozs7Y0FZbEIsR0FBR0MsUUFBUTs0QkFDRzt3QkFDSjt3QkFDQSxXQUFXLEdBQUksSUFBRzNCLFlBQVl3QixHQUFHLEVBQUUsTUFBTTs0QkFDckNJLFdBQVc7NEJBQ1hILE9BQU90QixPQUFPVSxFQUFFOzRCQUNoQlUsVUFBVTt3QkFDZDt3QkFDQSxXQUFXLEdBQUksSUFBR3ZCLFlBQVl3QixHQUFHLEVBQUUsT0FBTzs0QkFDdENDLE9BQU90QixPQUFPUyxJQUFJOzRCQUNsQlcsVUFBd0IsV0FBSCxHQUFJLElBQUd2QixZQUFZd0IsR0FBRyxFQUFFLE1BQU07Z0NBQy9DQyxPQUFPdEIsT0FBT2lCLEVBQUU7Z0NBQ2hCRyxVQUFVOzRCQUNkO3dCQUNKO3FCQUNIO2dCQUNMO1lBQ0o7U0FDSDtJQUNMO0FBQ0o7S0E1Q1MxQjtBQThDVCxJQUFJLENBQUMsT0FBT0osUUFBUW9DLE9BQU8sS0FBSyxjQUFlLE9BQU9wQyxRQUFRb0MsT0FBTyxLQUFLLFlBQVlwQyxRQUFRb0MsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPcEMsUUFBUW9DLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt2QyxPQUFPQyxjQUFjLENBQUNDLFFBQVFvQyxPQUFPLEVBQUUsY0FBYztRQUFFbkMsT0FBTztJQUFLO0lBQ25FSCxPQUFPd0MsTUFBTSxDQUFDdEMsUUFBUW9DLE9BQU8sRUFBRXBDO0lBQy9CdUMsT0FBT3ZDLE9BQU8sR0FBR0EsUUFBUW9DLE9BQU87QUFDbEMsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9ub3QtZm91bmQtZXJyb3IuanM/ZTVjOSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5vdEZvdW5kO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3Qgc3R5bGVzID0ge1xuICAgIGVycm9yOiB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvbW9kZXJuLW5vcm1hbGl6ZS9ibG9iL21haW4vbW9kZXJuLW5vcm1hbGl6ZS5jc3MjTDM4LUw1MlxuICAgICAgICBmb250RmFtaWx5OiAnc3lzdGVtLXVpLFwiU2Vnb2UgVUlcIixSb2JvdG8sSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWYsXCJBcHBsZSBDb2xvciBFbW9qaVwiLFwiU2Vnb2UgVUkgRW1vamlcIicsXG4gICAgICAgIGhlaWdodDogXCIxMDB2aFwiLFxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIlxuICAgIH0sXG4gICAgZGVzYzoge1xuICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiXG4gICAgfSxcbiAgICBoMToge1xuICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiLFxuICAgICAgICBtYXJnaW46IFwiMCAyMHB4IDAgMFwiLFxuICAgICAgICBwYWRkaW5nOiBcIjAgMjNweCAwIDBcIixcbiAgICAgICAgZm9udFNpemU6IDI0LFxuICAgICAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgICAgIHZlcnRpY2FsQWxpZ246IFwidG9wXCIsXG4gICAgICAgIGxpbmVIZWlnaHQ6IFwiNDlweFwiXG4gICAgfSxcbiAgICBoMjoge1xuICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgIGZvbnRXZWlnaHQ6IDQwMCxcbiAgICAgICAgbGluZUhlaWdodDogXCI0OXB4XCIsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIH1cbn07XG5mdW5jdGlvbiBOb3RGb3VuZCgpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJ0aXRsZVwiLCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiNDA0OiBUaGlzIHBhZ2UgY291bGQgbm90IGJlIGZvdW5kLlwiXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIHN0eWxlOiBzdHlsZXMuZXJyb3IsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzdHlsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWluaWZpZWQgQ1NTIGZyb21cbiAgICAgICAgICAgICAgICBib2R5IHsgbWFyZ2luOiAwOyBjb2xvcjogIzAwMDsgYmFja2dyb3VuZDogI2ZmZjsgfVxuICAgICAgICAgICAgICAgIC5uZXh0LWVycm9yLWgxIHtcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgLjMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICAgICAgICAgICAgICAgIGJvZHkgeyBjb2xvcjogI2ZmZjsgYmFja2dyb3VuZDogIzAwMDsgfVxuICAgICAgICAgICAgICAgICAgLm5leHQtZXJyb3ItaDEge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4zKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICovIF9faHRtbDogXCJib2R5e2NvbG9yOiMwMDA7YmFja2dyb3VuZDojZmZmO21hcmdpbjowfS5uZXh0LWVycm9yLWgxe2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMyl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXtib2R5e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojMDAwfS5uZXh0LWVycm9yLWgxe2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMyl9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiaDFcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJuZXh0LWVycm9yLWgxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy5oMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCI0MDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogc3R5bGVzLmRlc2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoMlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBzdHlsZXMuaDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIlRoaXMgcGFnZSBjb3VsZCBub3QgYmUgZm91bmQuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vdC1mb3VuZC1lcnJvci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiTm90Rm91bmQiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwic3R5bGVzIiwiZXJyb3IiLCJmb250RmFtaWx5IiwiaGVpZ2h0IiwidGV4dEFsaWduIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJkZXNjIiwiaDEiLCJtYXJnaW4iLCJwYWRkaW5nIiwiZm9udFNpemUiLCJmb250V2VpZ2h0IiwidmVydGljYWxBbGlnbiIsImxpbmVIZWlnaHQiLCJoMiIsImpzeHMiLCJGcmFnbWVudCIsImNoaWxkcmVuIiwianN4Iiwic3R5bGUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsImNsYXNzTmFtZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js\n")); + +/***/ }) + +}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } +/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-error.js&page=%2Fnot-found!"); }); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ _N_E = __webpack_exports__; +/******/ } +]); \ No newline at end of file diff --git a/frontend/.next/static/chunks/app/page.js b/frontend/.next/static/chunks/app/page.js new file mode 100644 index 000000000..442f41d99 --- /dev/null +++ b/frontend/.next/static/chunks/app/page.js @@ -0,0 +1,708 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/page"],{ + +/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!": +/*!************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false! ***! + \************************************************************************************************************************************************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/page.tsx */ \"(app-pages-browser)/./app/page.tsx\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz1DJTNBJTVDVXNlcnMlNUNIQVJTSElUJTIwQkFHR0ElNUNEZXNrdG9wJTVDWmVvVGFwMi4wJTVDZnJvbnRlbmQlNUNhcHAlNUNwYWdlLnRzeCZzZXJ2ZXI9ZmFsc2UhIiwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8/MTdiZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQoLyogd2VicGFja01vZGU6IFwiZWFnZXJcIiAqLyBcIkM6XFxcXFVzZXJzXFxcXEhBUlNISVQgQkFHR0FcXFxcRGVza3RvcFxcXFxaZW9UYXAyLjBcXFxcZnJvbnRlbmRcXFxcYXBwXFxcXHBhZ2UudHN4XCIpIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js": +/*!***********************************************************!*\ + !*** ./node_modules/next/dist/build/polyfills/process.js ***! + \***********************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _global_process, _global_process1;\nmodule.exports = ((_global_process = __webpack_require__.g.process) == null ? void 0 : _global_process.env) && typeof ((_global_process1 = __webpack_require__.g.process) == null ? void 0 : _global_process1.env) === \"object\" ? __webpack_require__.g.process : __webpack_require__(/*! next/dist/compiled/process */ \"(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js\");\n\n//# sourceMappingURL=process.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLHFDQUFxQyxxQkFBTSxpRkFBaUYscUJBQU0sa0VBQWtFLHFCQUFNLFdBQVcsbUJBQU8sQ0FBQyw0R0FBNEI7O0FBRXpQIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3Byb2Nlc3MuanM/YWM5YiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfZ2xvYmFsX3Byb2Nlc3MsIF9nbG9iYWxfcHJvY2VzczE7XG5tb2R1bGUuZXhwb3J0cyA9ICgoX2dsb2JhbF9wcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfZ2xvYmFsX3Byb2Nlc3MuZW52KSAmJiB0eXBlb2YgKChfZ2xvYmFsX3Byb2Nlc3MxID0gZ2xvYmFsLnByb2Nlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfZ2xvYmFsX3Byb2Nlc3MxLmVudikgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwucHJvY2VzcyA6IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcHJvY2Vzc1wiKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvY2Vzcy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/buffer/index.js": +/*!*********************************************************!*\ + !*** ./node_modules/next/dist/compiled/buffer/index.js ***! + \*********************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={675:function(e,r){\"use strict\";r.byteLength=byteLength;r.toByteArray=toByteArray;r.fromByteArray=fromByteArray;var t=[];var f=[];var n=typeof Uint8Array!==\"undefined\"?Uint8Array:Array;var i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";for(var o=0,u=i.length;o<u;++o){t[o]=i[o];f[i.charCodeAt(o)]=o}f[\"-\".charCodeAt(0)]=62;f[\"_\".charCodeAt(0)]=63;function getLens(e){var r=e.length;if(r%4>0){throw new Error(\"Invalid string. Length must be a multiple of 4\")}var t=e.indexOf(\"=\");if(t===-1)t=r;var f=t===r?0:4-t%4;return[t,f]}function byteLength(e){var r=getLens(e);var t=r[0];var f=r[1];return(t+f)*3/4-f}function _byteLength(e,r,t){return(r+t)*3/4-t}function toByteArray(e){var r;var t=getLens(e);var i=t[0];var o=t[1];var u=new n(_byteLength(e,i,o));var a=0;var s=o>0?i-4:i;var h;for(h=0;h<s;h+=4){r=f[e.charCodeAt(h)]<<18|f[e.charCodeAt(h+1)]<<12|f[e.charCodeAt(h+2)]<<6|f[e.charCodeAt(h+3)];u[a++]=r>>16&255;u[a++]=r>>8&255;u[a++]=r&255}if(o===2){r=f[e.charCodeAt(h)]<<2|f[e.charCodeAt(h+1)]>>4;u[a++]=r&255}if(o===1){r=f[e.charCodeAt(h)]<<10|f[e.charCodeAt(h+1)]<<4|f[e.charCodeAt(h+2)]>>2;u[a++]=r>>8&255;u[a++]=r&255}return u}function tripletToBase64(e){return t[e>>18&63]+t[e>>12&63]+t[e>>6&63]+t[e&63]}function encodeChunk(e,r,t){var f;var n=[];for(var i=r;i<t;i+=3){f=(e[i]<<16&16711680)+(e[i+1]<<8&65280)+(e[i+2]&255);n.push(tripletToBase64(f))}return n.join(\"\")}function fromByteArray(e){var r;var f=e.length;var n=f%3;var i=[];var o=16383;for(var u=0,a=f-n;u<a;u+=o){i.push(encodeChunk(e,u,u+o>a?a:u+o))}if(n===1){r=e[f-1];i.push(t[r>>2]+t[r<<4&63]+\"==\")}else if(n===2){r=(e[f-2]<<8)+e[f-1];i.push(t[r>>10]+t[r>>4&63]+t[r<<2&63]+\"=\")}return i.join(\"\")}},72:function(e,r,t){\"use strict\";\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */var f=t(675);var n=t(783);var i=typeof Symbol===\"function\"&&typeof Symbol.for===\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;r.Buffer=Buffer;r.SlowBuffer=SlowBuffer;r.INSPECT_MAX_BYTES=50;var o=2147483647;r.kMaxLength=o;Buffer.TYPED_ARRAY_SUPPORT=typedArraySupport();if(!Buffer.TYPED_ARRAY_SUPPORT&&typeof console!==\"undefined\"&&typeof console.error===\"function\"){console.error(\"This browser lacks typed array (Uint8Array) support which is required by \"+\"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.\")}function typedArraySupport(){try{var e=new Uint8Array(1);var r={foo:function(){return 42}};Object.setPrototypeOf(r,Uint8Array.prototype);Object.setPrototypeOf(e,r);return e.foo()===42}catch(e){return false}}Object.defineProperty(Buffer.prototype,\"parent\",{enumerable:true,get:function(){if(!Buffer.isBuffer(this))return undefined;return this.buffer}});Object.defineProperty(Buffer.prototype,\"offset\",{enumerable:true,get:function(){if(!Buffer.isBuffer(this))return undefined;return this.byteOffset}});function createBuffer(e){if(e>o){throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}var r=new Uint8Array(e);Object.setPrototypeOf(r,Buffer.prototype);return r}function Buffer(e,r,t){if(typeof e===\"number\"){if(typeof r===\"string\"){throw new TypeError('The \"string\" argument must be of type string. Received type number')}return allocUnsafe(e)}return from(e,r,t)}Buffer.poolSize=8192;function from(e,r,t){if(typeof e===\"string\"){return fromString(e,r)}if(ArrayBuffer.isView(e)){return fromArrayLike(e)}if(e==null){throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \"+\"or Array-like Object. Received type \"+typeof e)}if(isInstance(e,ArrayBuffer)||e&&isInstance(e.buffer,ArrayBuffer)){return fromArrayBuffer(e,r,t)}if(typeof SharedArrayBuffer!==\"undefined\"&&(isInstance(e,SharedArrayBuffer)||e&&isInstance(e.buffer,SharedArrayBuffer))){return fromArrayBuffer(e,r,t)}if(typeof e===\"number\"){throw new TypeError('The \"value\" argument must not be of type number. Received type number')}var f=e.valueOf&&e.valueOf();if(f!=null&&f!==e){return Buffer.from(f,r,t)}var n=fromObject(e);if(n)return n;if(typeof Symbol!==\"undefined\"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]===\"function\"){return Buffer.from(e[Symbol.toPrimitive](\"string\"),r,t)}throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \"+\"or Array-like Object. Received type \"+typeof e)}Buffer.from=function(e,r,t){return from(e,r,t)};Object.setPrototypeOf(Buffer.prototype,Uint8Array.prototype);Object.setPrototypeOf(Buffer,Uint8Array);function assertSize(e){if(typeof e!==\"number\"){throw new TypeError('\"size\" argument must be of type number')}else if(e<0){throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}}function alloc(e,r,t){assertSize(e);if(e<=0){return createBuffer(e)}if(r!==undefined){return typeof t===\"string\"?createBuffer(e).fill(r,t):createBuffer(e).fill(r)}return createBuffer(e)}Buffer.alloc=function(e,r,t){return alloc(e,r,t)};function allocUnsafe(e){assertSize(e);return createBuffer(e<0?0:checked(e)|0)}Buffer.allocUnsafe=function(e){return allocUnsafe(e)};Buffer.allocUnsafeSlow=function(e){return allocUnsafe(e)};function fromString(e,r){if(typeof r!==\"string\"||r===\"\"){r=\"utf8\"}if(!Buffer.isEncoding(r)){throw new TypeError(\"Unknown encoding: \"+r)}var t=byteLength(e,r)|0;var f=createBuffer(t);var n=f.write(e,r);if(n!==t){f=f.slice(0,n)}return f}function fromArrayLike(e){var r=e.length<0?0:checked(e.length)|0;var t=createBuffer(r);for(var f=0;f<r;f+=1){t[f]=e[f]&255}return t}function fromArrayBuffer(e,r,t){if(r<0||e.byteLength<r){throw new RangeError('\"offset\" is outside of buffer bounds')}if(e.byteLength<r+(t||0)){throw new RangeError('\"length\" is outside of buffer bounds')}var f;if(r===undefined&&t===undefined){f=new Uint8Array(e)}else if(t===undefined){f=new Uint8Array(e,r)}else{f=new Uint8Array(e,r,t)}Object.setPrototypeOf(f,Buffer.prototype);return f}function fromObject(e){if(Buffer.isBuffer(e)){var r=checked(e.length)|0;var t=createBuffer(r);if(t.length===0){return t}e.copy(t,0,0,r);return t}if(e.length!==undefined){if(typeof e.length!==\"number\"||numberIsNaN(e.length)){return createBuffer(0)}return fromArrayLike(e)}if(e.type===\"Buffer\"&&Array.isArray(e.data)){return fromArrayLike(e.data)}}function checked(e){if(e>=o){throw new RangeError(\"Attempt to allocate Buffer larger than maximum \"+\"size: 0x\"+o.toString(16)+\" bytes\")}return e|0}function SlowBuffer(e){if(+e!=e){e=0}return Buffer.alloc(+e)}Buffer.isBuffer=function isBuffer(e){return e!=null&&e._isBuffer===true&&e!==Buffer.prototype};Buffer.compare=function compare(e,r){if(isInstance(e,Uint8Array))e=Buffer.from(e,e.offset,e.byteLength);if(isInstance(r,Uint8Array))r=Buffer.from(r,r.offset,r.byteLength);if(!Buffer.isBuffer(e)||!Buffer.isBuffer(r)){throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array')}if(e===r)return 0;var t=e.length;var f=r.length;for(var n=0,i=Math.min(t,f);n<i;++n){if(e[n]!==r[n]){t=e[n];f=r[n];break}}if(t<f)return-1;if(f<t)return 1;return 0};Buffer.isEncoding=function isEncoding(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return true;default:return false}};Buffer.concat=function concat(e,r){if(!Array.isArray(e)){throw new TypeError('\"list\" argument must be an Array of Buffers')}if(e.length===0){return Buffer.alloc(0)}var t;if(r===undefined){r=0;for(t=0;t<e.length;++t){r+=e[t].length}}var f=Buffer.allocUnsafe(r);var n=0;for(t=0;t<e.length;++t){var i=e[t];if(isInstance(i,Uint8Array)){i=Buffer.from(i)}if(!Buffer.isBuffer(i)){throw new TypeError('\"list\" argument must be an Array of Buffers')}i.copy(f,n);n+=i.length}return f};function byteLength(e,r){if(Buffer.isBuffer(e)){return e.length}if(ArrayBuffer.isView(e)||isInstance(e,ArrayBuffer)){return e.byteLength}if(typeof e!==\"string\"){throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. '+\"Received type \"+typeof e)}var t=e.length;var f=arguments.length>2&&arguments[2]===true;if(!f&&t===0)return 0;var n=false;for(;;){switch(r){case\"ascii\":case\"latin1\":case\"binary\":return t;case\"utf8\":case\"utf-8\":return utf8ToBytes(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return t*2;case\"hex\":return t>>>1;case\"base64\":return base64ToBytes(e).length;default:if(n){return f?-1:utf8ToBytes(e).length}r=(\"\"+r).toLowerCase();n=true}}}Buffer.byteLength=byteLength;function slowToString(e,r,t){var f=false;if(r===undefined||r<0){r=0}if(r>this.length){return\"\"}if(t===undefined||t>this.length){t=this.length}if(t<=0){return\"\"}t>>>=0;r>>>=0;if(t<=r){return\"\"}if(!e)e=\"utf8\";while(true){switch(e){case\"hex\":return hexSlice(this,r,t);case\"utf8\":case\"utf-8\":return utf8Slice(this,r,t);case\"ascii\":return asciiSlice(this,r,t);case\"latin1\":case\"binary\":return latin1Slice(this,r,t);case\"base64\":return base64Slice(this,r,t);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return utf16leSlice(this,r,t);default:if(f)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase();f=true}}}Buffer.prototype._isBuffer=true;function swap(e,r,t){var f=e[r];e[r]=e[t];e[t]=f}Buffer.prototype.swap16=function swap16(){var e=this.length;if(e%2!==0){throw new RangeError(\"Buffer size must be a multiple of 16-bits\")}for(var r=0;r<e;r+=2){swap(this,r,r+1)}return this};Buffer.prototype.swap32=function swap32(){var e=this.length;if(e%4!==0){throw new RangeError(\"Buffer size must be a multiple of 32-bits\")}for(var r=0;r<e;r+=4){swap(this,r,r+3);swap(this,r+1,r+2)}return this};Buffer.prototype.swap64=function swap64(){var e=this.length;if(e%8!==0){throw new RangeError(\"Buffer size must be a multiple of 64-bits\")}for(var r=0;r<e;r+=8){swap(this,r,r+7);swap(this,r+1,r+6);swap(this,r+2,r+5);swap(this,r+3,r+4)}return this};Buffer.prototype.toString=function toString(){var e=this.length;if(e===0)return\"\";if(arguments.length===0)return utf8Slice(this,0,e);return slowToString.apply(this,arguments)};Buffer.prototype.toLocaleString=Buffer.prototype.toString;Buffer.prototype.equals=function equals(e){if(!Buffer.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");if(this===e)return true;return Buffer.compare(this,e)===0};Buffer.prototype.inspect=function inspect(){var e=\"\";var t=r.INSPECT_MAX_BYTES;e=this.toString(\"hex\",0,t).replace(/(.{2})/g,\"$1 \").trim();if(this.length>t)e+=\" ... \";return\"<Buffer \"+e+\">\"};if(i){Buffer.prototype[i]=Buffer.prototype.inspect}Buffer.prototype.compare=function compare(e,r,t,f,n){if(isInstance(e,Uint8Array)){e=Buffer.from(e,e.offset,e.byteLength)}if(!Buffer.isBuffer(e)){throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. '+\"Received type \"+typeof e)}if(r===undefined){r=0}if(t===undefined){t=e?e.length:0}if(f===undefined){f=0}if(n===undefined){n=this.length}if(r<0||t>e.length||f<0||n>this.length){throw new RangeError(\"out of range index\")}if(f>=n&&r>=t){return 0}if(f>=n){return-1}if(r>=t){return 1}r>>>=0;t>>>=0;f>>>=0;n>>>=0;if(this===e)return 0;var i=n-f;var o=t-r;var u=Math.min(i,o);var a=this.slice(f,n);var s=e.slice(r,t);for(var h=0;h<u;++h){if(a[h]!==s[h]){i=a[h];o=s[h];break}}if(i<o)return-1;if(o<i)return 1;return 0};function bidirectionalIndexOf(e,r,t,f,n){if(e.length===0)return-1;if(typeof t===\"string\"){f=t;t=0}else if(t>2147483647){t=2147483647}else if(t<-2147483648){t=-2147483648}t=+t;if(numberIsNaN(t)){t=n?0:e.length-1}if(t<0)t=e.length+t;if(t>=e.length){if(n)return-1;else t=e.length-1}else if(t<0){if(n)t=0;else return-1}if(typeof r===\"string\"){r=Buffer.from(r,f)}if(Buffer.isBuffer(r)){if(r.length===0){return-1}return arrayIndexOf(e,r,t,f,n)}else if(typeof r===\"number\"){r=r&255;if(typeof Uint8Array.prototype.indexOf===\"function\"){if(n){return Uint8Array.prototype.indexOf.call(e,r,t)}else{return Uint8Array.prototype.lastIndexOf.call(e,r,t)}}return arrayIndexOf(e,[r],t,f,n)}throw new TypeError(\"val must be string, number or Buffer\")}function arrayIndexOf(e,r,t,f,n){var i=1;var o=e.length;var u=r.length;if(f!==undefined){f=String(f).toLowerCase();if(f===\"ucs2\"||f===\"ucs-2\"||f===\"utf16le\"||f===\"utf-16le\"){if(e.length<2||r.length<2){return-1}i=2;o/=2;u/=2;t/=2}}function read(e,r){if(i===1){return e[r]}else{return e.readUInt16BE(r*i)}}var a;if(n){var s=-1;for(a=t;a<o;a++){if(read(e,a)===read(r,s===-1?0:a-s)){if(s===-1)s=a;if(a-s+1===u)return s*i}else{if(s!==-1)a-=a-s;s=-1}}}else{if(t+u>o)t=o-u;for(a=t;a>=0;a--){var h=true;for(var c=0;c<u;c++){if(read(e,a+c)!==read(r,c)){h=false;break}}if(h)return a}}return-1}Buffer.prototype.includes=function includes(e,r,t){return this.indexOf(e,r,t)!==-1};Buffer.prototype.indexOf=function indexOf(e,r,t){return bidirectionalIndexOf(this,e,r,t,true)};Buffer.prototype.lastIndexOf=function lastIndexOf(e,r,t){return bidirectionalIndexOf(this,e,r,t,false)};function hexWrite(e,r,t,f){t=Number(t)||0;var n=e.length-t;if(!f){f=n}else{f=Number(f);if(f>n){f=n}}var i=r.length;if(f>i/2){f=i/2}for(var o=0;o<f;++o){var u=parseInt(r.substr(o*2,2),16);if(numberIsNaN(u))return o;e[t+o]=u}return o}function utf8Write(e,r,t,f){return blitBuffer(utf8ToBytes(r,e.length-t),e,t,f)}function asciiWrite(e,r,t,f){return blitBuffer(asciiToBytes(r),e,t,f)}function latin1Write(e,r,t,f){return asciiWrite(e,r,t,f)}function base64Write(e,r,t,f){return blitBuffer(base64ToBytes(r),e,t,f)}function ucs2Write(e,r,t,f){return blitBuffer(utf16leToBytes(r,e.length-t),e,t,f)}Buffer.prototype.write=function write(e,r,t,f){if(r===undefined){f=\"utf8\";t=this.length;r=0}else if(t===undefined&&typeof r===\"string\"){f=r;t=this.length;r=0}else if(isFinite(r)){r=r>>>0;if(isFinite(t)){t=t>>>0;if(f===undefined)f=\"utf8\"}else{f=t;t=undefined}}else{throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\")}var n=this.length-r;if(t===undefined||t>n)t=n;if(e.length>0&&(t<0||r<0)||r>this.length){throw new RangeError(\"Attempt to write outside buffer bounds\")}if(!f)f=\"utf8\";var i=false;for(;;){switch(f){case\"hex\":return hexWrite(this,e,r,t);case\"utf8\":case\"utf-8\":return utf8Write(this,e,r,t);case\"ascii\":return asciiWrite(this,e,r,t);case\"latin1\":case\"binary\":return latin1Write(this,e,r,t);case\"base64\":return base64Write(this,e,r,t);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return ucs2Write(this,e,r,t);default:if(i)throw new TypeError(\"Unknown encoding: \"+f);f=(\"\"+f).toLowerCase();i=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(e,r,t){if(r===0&&t===e.length){return f.fromByteArray(e)}else{return f.fromByteArray(e.slice(r,t))}}function utf8Slice(e,r,t){t=Math.min(e.length,t);var f=[];var n=r;while(n<t){var i=e[n];var o=null;var u=i>239?4:i>223?3:i>191?2:1;if(n+u<=t){var a,s,h,c;switch(u){case 1:if(i<128){o=i}break;case 2:a=e[n+1];if((a&192)===128){c=(i&31)<<6|a&63;if(c>127){o=c}}break;case 3:a=e[n+1];s=e[n+2];if((a&192)===128&&(s&192)===128){c=(i&15)<<12|(a&63)<<6|s&63;if(c>2047&&(c<55296||c>57343)){o=c}}break;case 4:a=e[n+1];s=e[n+2];h=e[n+3];if((a&192)===128&&(s&192)===128&&(h&192)===128){c=(i&15)<<18|(a&63)<<12|(s&63)<<6|h&63;if(c>65535&&c<1114112){o=c}}}}if(o===null){o=65533;u=1}else if(o>65535){o-=65536;f.push(o>>>10&1023|55296);o=56320|o&1023}f.push(o);n+=u}return decodeCodePointsArray(f)}var u=4096;function decodeCodePointsArray(e){var r=e.length;if(r<=u){return String.fromCharCode.apply(String,e)}var t=\"\";var f=0;while(f<r){t+=String.fromCharCode.apply(String,e.slice(f,f+=u))}return t}function asciiSlice(e,r,t){var f=\"\";t=Math.min(e.length,t);for(var n=r;n<t;++n){f+=String.fromCharCode(e[n]&127)}return f}function latin1Slice(e,r,t){var f=\"\";t=Math.min(e.length,t);for(var n=r;n<t;++n){f+=String.fromCharCode(e[n])}return f}function hexSlice(e,r,t){var f=e.length;if(!r||r<0)r=0;if(!t||t<0||t>f)t=f;var n=\"\";for(var i=r;i<t;++i){n+=s[e[i]]}return n}function utf16leSlice(e,r,t){var f=e.slice(r,t);var n=\"\";for(var i=0;i<f.length;i+=2){n+=String.fromCharCode(f[i]+f[i+1]*256)}return n}Buffer.prototype.slice=function slice(e,r){var t=this.length;e=~~e;r=r===undefined?t:~~r;if(e<0){e+=t;if(e<0)e=0}else if(e>t){e=t}if(r<0){r+=t;if(r<0)r=0}else if(r>t){r=t}if(r<e)r=e;var f=this.subarray(e,r);Object.setPrototypeOf(f,Buffer.prototype);return f};function checkOffset(e,r,t){if(e%1!==0||e<0)throw new RangeError(\"offset is not uint\");if(e+r>t)throw new RangeError(\"Trying to access beyond buffer length\")}Buffer.prototype.readUIntLE=function readUIntLE(e,r,t){e=e>>>0;r=r>>>0;if(!t)checkOffset(e,r,this.length);var f=this[e];var n=1;var i=0;while(++i<r&&(n*=256)){f+=this[e+i]*n}return f};Buffer.prototype.readUIntBE=function readUIntBE(e,r,t){e=e>>>0;r=r>>>0;if(!t){checkOffset(e,r,this.length)}var f=this[e+--r];var n=1;while(r>0&&(n*=256)){f+=this[e+--r]*n}return f};Buffer.prototype.readUInt8=function readUInt8(e,r){e=e>>>0;if(!r)checkOffset(e,1,this.length);return this[e]};Buffer.prototype.readUInt16LE=function readUInt16LE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);return this[e]|this[e+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);return this[e]<<8|this[e+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])};Buffer.prototype.readIntLE=function readIntLE(e,r,t){e=e>>>0;r=r>>>0;if(!t)checkOffset(e,r,this.length);var f=this[e];var n=1;var i=0;while(++i<r&&(n*=256)){f+=this[e+i]*n}n*=128;if(f>=n)f-=Math.pow(2,8*r);return f};Buffer.prototype.readIntBE=function readIntBE(e,r,t){e=e>>>0;r=r>>>0;if(!t)checkOffset(e,r,this.length);var f=r;var n=1;var i=this[e+--f];while(f>0&&(n*=256)){i+=this[e+--f]*n}n*=128;if(i>=n)i-=Math.pow(2,8*r);return i};Buffer.prototype.readInt8=function readInt8(e,r){e=e>>>0;if(!r)checkOffset(e,1,this.length);if(!(this[e]&128))return this[e];return(255-this[e]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);var t=this[e]|this[e+1]<<8;return t&32768?t|4294901760:t};Buffer.prototype.readInt16BE=function readInt16BE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);var t=this[e+1]|this[e]<<8;return t&32768?t|4294901760:t};Buffer.prototype.readInt32LE=function readInt32LE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]};Buffer.prototype.readFloatLE=function readFloatLE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return n.read(this,e,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return n.read(this,e,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(e,r){e=e>>>0;if(!r)checkOffset(e,8,this.length);return n.read(this,e,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(e,r){e=e>>>0;if(!r)checkOffset(e,8,this.length);return n.read(this,e,false,52,8)};function checkInt(e,r,t,f,n,i){if(!Buffer.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(r>n||r<i)throw new RangeError('\"value\" argument is out of bounds');if(t+f>e.length)throw new RangeError(\"Index out of range\")}Buffer.prototype.writeUIntLE=function writeUIntLE(e,r,t,f){e=+e;r=r>>>0;t=t>>>0;if(!f){var n=Math.pow(2,8*t)-1;checkInt(this,e,r,t,n,0)}var i=1;var o=0;this[r]=e&255;while(++o<t&&(i*=256)){this[r+o]=e/i&255}return r+t};Buffer.prototype.writeUIntBE=function writeUIntBE(e,r,t,f){e=+e;r=r>>>0;t=t>>>0;if(!f){var n=Math.pow(2,8*t)-1;checkInt(this,e,r,t,n,0)}var i=t-1;var o=1;this[r+i]=e&255;while(--i>=0&&(o*=256)){this[r+i]=e/o&255}return r+t};Buffer.prototype.writeUInt8=function writeUInt8(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,1,255,0);this[r]=e&255;return r+1};Buffer.prototype.writeUInt16LE=function writeUInt16LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,65535,0);this[r]=e&255;this[r+1]=e>>>8;return r+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,65535,0);this[r]=e>>>8;this[r+1]=e&255;return r+2};Buffer.prototype.writeUInt32LE=function writeUInt32LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,4294967295,0);this[r+3]=e>>>24;this[r+2]=e>>>16;this[r+1]=e>>>8;this[r]=e&255;return r+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,4294967295,0);this[r]=e>>>24;this[r+1]=e>>>16;this[r+2]=e>>>8;this[r+3]=e&255;return r+4};Buffer.prototype.writeIntLE=function writeIntLE(e,r,t,f){e=+e;r=r>>>0;if(!f){var n=Math.pow(2,8*t-1);checkInt(this,e,r,t,n-1,-n)}var i=0;var o=1;var u=0;this[r]=e&255;while(++i<t&&(o*=256)){if(e<0&&u===0&&this[r+i-1]!==0){u=1}this[r+i]=(e/o>>0)-u&255}return r+t};Buffer.prototype.writeIntBE=function writeIntBE(e,r,t,f){e=+e;r=r>>>0;if(!f){var n=Math.pow(2,8*t-1);checkInt(this,e,r,t,n-1,-n)}var i=t-1;var o=1;var u=0;this[r+i]=e&255;while(--i>=0&&(o*=256)){if(e<0&&u===0&&this[r+i+1]!==0){u=1}this[r+i]=(e/o>>0)-u&255}return r+t};Buffer.prototype.writeInt8=function writeInt8(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,1,127,-128);if(e<0)e=255+e+1;this[r]=e&255;return r+1};Buffer.prototype.writeInt16LE=function writeInt16LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,32767,-32768);this[r]=e&255;this[r+1]=e>>>8;return r+2};Buffer.prototype.writeInt16BE=function writeInt16BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,32767,-32768);this[r]=e>>>8;this[r+1]=e&255;return r+2};Buffer.prototype.writeInt32LE=function writeInt32LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,2147483647,-2147483648);this[r]=e&255;this[r+1]=e>>>8;this[r+2]=e>>>16;this[r+3]=e>>>24;return r+4};Buffer.prototype.writeInt32BE=function writeInt32BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,2147483647,-2147483648);if(e<0)e=4294967295+e+1;this[r]=e>>>24;this[r+1]=e>>>16;this[r+2]=e>>>8;this[r+3]=e&255;return r+4};function checkIEEE754(e,r,t,f,n,i){if(t+f>e.length)throw new RangeError(\"Index out of range\");if(t<0)throw new RangeError(\"Index out of range\")}function writeFloat(e,r,t,f,i){r=+r;t=t>>>0;if(!i){checkIEEE754(e,r,t,4,34028234663852886e22,-34028234663852886e22)}n.write(e,r,t,f,23,4);return t+4}Buffer.prototype.writeFloatLE=function writeFloatLE(e,r,t){return writeFloat(this,e,r,true,t)};Buffer.prototype.writeFloatBE=function writeFloatBE(e,r,t){return writeFloat(this,e,r,false,t)};function writeDouble(e,r,t,f,i){r=+r;t=t>>>0;if(!i){checkIEEE754(e,r,t,8,17976931348623157e292,-17976931348623157e292)}n.write(e,r,t,f,52,8);return t+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(e,r,t){return writeDouble(this,e,r,true,t)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(e,r,t){return writeDouble(this,e,r,false,t)};Buffer.prototype.copy=function copy(e,r,t,f){if(!Buffer.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(!t)t=0;if(!f&&f!==0)f=this.length;if(r>=e.length)r=e.length;if(!r)r=0;if(f>0&&f<t)f=t;if(f===t)return 0;if(e.length===0||this.length===0)return 0;if(r<0){throw new RangeError(\"targetStart out of bounds\")}if(t<0||t>=this.length)throw new RangeError(\"Index out of range\");if(f<0)throw new RangeError(\"sourceEnd out of bounds\");if(f>this.length)f=this.length;if(e.length-r<f-t){f=e.length-r+t}var n=f-t;if(this===e&&typeof Uint8Array.prototype.copyWithin===\"function\"){this.copyWithin(r,t,f)}else if(this===e&&t<r&&r<f){for(var i=n-1;i>=0;--i){e[i+r]=this[i+t]}}else{Uint8Array.prototype.set.call(e,this.subarray(t,f),r)}return n};Buffer.prototype.fill=function fill(e,r,t,f){if(typeof e===\"string\"){if(typeof r===\"string\"){f=r;r=0;t=this.length}else if(typeof t===\"string\"){f=t;t=this.length}if(f!==undefined&&typeof f!==\"string\"){throw new TypeError(\"encoding must be a string\")}if(typeof f===\"string\"&&!Buffer.isEncoding(f)){throw new TypeError(\"Unknown encoding: \"+f)}if(e.length===1){var n=e.charCodeAt(0);if(f===\"utf8\"&&n<128||f===\"latin1\"){e=n}}}else if(typeof e===\"number\"){e=e&255}else if(typeof e===\"boolean\"){e=Number(e)}if(r<0||this.length<r||this.length<t){throw new RangeError(\"Out of range index\")}if(t<=r){return this}r=r>>>0;t=t===undefined?this.length:t>>>0;if(!e)e=0;var i;if(typeof e===\"number\"){for(i=r;i<t;++i){this[i]=e}}else{var o=Buffer.isBuffer(e)?e:Buffer.from(e,f);var u=o.length;if(u===0){throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"')}for(i=0;i<t-r;++i){this[i+r]=o[i%u]}}return this};var a=/[^+/0-9A-Za-z-_]/g;function base64clean(e){e=e.split(\"=\")[0];e=e.trim().replace(a,\"\");if(e.length<2)return\"\";while(e.length%4!==0){e=e+\"=\"}return e}function utf8ToBytes(e,r){r=r||Infinity;var t;var f=e.length;var n=null;var i=[];for(var o=0;o<f;++o){t=e.charCodeAt(o);if(t>55295&&t<57344){if(!n){if(t>56319){if((r-=3)>-1)i.push(239,191,189);continue}else if(o+1===f){if((r-=3)>-1)i.push(239,191,189);continue}n=t;continue}if(t<56320){if((r-=3)>-1)i.push(239,191,189);n=t;continue}t=(n-55296<<10|t-56320)+65536}else if(n){if((r-=3)>-1)i.push(239,191,189)}n=null;if(t<128){if((r-=1)<0)break;i.push(t)}else if(t<2048){if((r-=2)<0)break;i.push(t>>6|192,t&63|128)}else if(t<65536){if((r-=3)<0)break;i.push(t>>12|224,t>>6&63|128,t&63|128)}else if(t<1114112){if((r-=4)<0)break;i.push(t>>18|240,t>>12&63|128,t>>6&63|128,t&63|128)}else{throw new Error(\"Invalid code point\")}}return i}function asciiToBytes(e){var r=[];for(var t=0;t<e.length;++t){r.push(e.charCodeAt(t)&255)}return r}function utf16leToBytes(e,r){var t,f,n;var i=[];for(var o=0;o<e.length;++o){if((r-=2)<0)break;t=e.charCodeAt(o);f=t>>8;n=t%256;i.push(n);i.push(f)}return i}function base64ToBytes(e){return f.toByteArray(base64clean(e))}function blitBuffer(e,r,t,f){for(var n=0;n<f;++n){if(n+t>=r.length||n>=e.length)break;r[n+t]=e[n]}return n}function isInstance(e,r){return e instanceof r||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===r.name}function numberIsNaN(e){return e!==e}var s=function(){var e=\"0123456789abcdef\";var r=new Array(256);for(var t=0;t<16;++t){var f=t*16;for(var n=0;n<16;++n){r[f+n]=e[t]+e[n]}}return r}()},783:function(e,r){\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nr.read=function(e,r,t,f,n){var i,o;var u=n*8-f-1;var a=(1<<u)-1;var s=a>>1;var h=-7;var c=t?n-1:0;var l=t?-1:1;var p=e[r+c];c+=l;i=p&(1<<-h)-1;p>>=-h;h+=u;for(;h>0;i=i*256+e[r+c],c+=l,h-=8){}o=i&(1<<-h)-1;i>>=-h;h+=f;for(;h>0;o=o*256+e[r+c],c+=l,h-=8){}if(i===0){i=1-s}else if(i===a){return o?NaN:(p?-1:1)*Infinity}else{o=o+Math.pow(2,f);i=i-s}return(p?-1:1)*o*Math.pow(2,i-f)};r.write=function(e,r,t,f,n,i){var o,u,a;var s=i*8-n-1;var h=(1<<s)-1;var c=h>>1;var l=n===23?Math.pow(2,-24)-Math.pow(2,-77):0;var p=f?0:i-1;var y=f?1:-1;var g=r<0||r===0&&1/r<0?1:0;r=Math.abs(r);if(isNaN(r)||r===Infinity){u=isNaN(r)?1:0;o=h}else{o=Math.floor(Math.log(r)/Math.LN2);if(r*(a=Math.pow(2,-o))<1){o--;a*=2}if(o+c>=1){r+=l/a}else{r+=l*Math.pow(2,1-c)}if(r*a>=2){o++;a/=2}if(o+c>=h){u=0;o=h}else if(o+c>=1){u=(r*a-1)*Math.pow(2,n);o=o+c}else{u=r*Math.pow(2,c-1)*Math.pow(2,n);o=0}}for(;n>=8;e[t+p]=u&255,p+=y,u/=256,n-=8){}o=o<<n|u;s+=n;for(;s>0;e[t+p]=o&255,p+=y,o/=256,s-=8){}e[t+p-y]|=g*128}}};var r={};function __nccwpck_require__(t){var f=r[t];if(f!==undefined){return f.exports}var n=r[t]={exports:{}};var i=true;try{e[t](n,n.exports,__nccwpck_require__);i=false}finally{if(i)delete r[t]}return n.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(72);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvYnVmZmVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLE9BQU8sa0JBQWtCLGFBQWEsd0JBQXdCLDBCQUEwQiw4QkFBOEIsU0FBUyxTQUFTLHVEQUF1RCx5RUFBeUUsdUJBQXVCLElBQUksS0FBSyxVQUFVLHFCQUFxQix3QkFBd0Isd0JBQXdCLG9CQUFvQixlQUFlLFVBQVUsa0VBQWtFLHFCQUFxQixjQUFjLG9CQUFvQixZQUFZLHVCQUF1QixpQkFBaUIsV0FBVyxXQUFXLGtCQUFrQiw0QkFBNEIsa0JBQWtCLHdCQUF3QixNQUFNLGlCQUFpQixXQUFXLFdBQVcsZ0NBQWdDLFFBQVEsZ0JBQWdCLE1BQU0sUUFBUSxJQUFJLE1BQU0sK0ZBQStGLGlCQUFpQixnQkFBZ0IsYUFBYSxVQUFVLGdEQUFnRCxhQUFhLFVBQVUseUVBQXlFLGdCQUFnQixhQUFhLFNBQVMsNEJBQTRCLGtEQUFrRCw0QkFBNEIsTUFBTSxTQUFTLFlBQVksSUFBSSxNQUFNLHFEQUFxRCwyQkFBMkIsa0JBQWtCLDBCQUEwQixNQUFNLGVBQWUsVUFBVSxTQUFTLFlBQVksa0JBQWtCLElBQUksTUFBTSxxQ0FBcUMsVUFBVSxTQUFTLGdDQUFnQyxlQUFlLHFCQUFxQiwyQ0FBMkMsbUJBQW1CLG9CQUFvQjtBQUM5ckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixhQUFhLCtHQUErRyxnQkFBZ0Isd0JBQXdCLHVCQUF1QixpQkFBaUIsZUFBZSwrQ0FBK0MsaUdBQWlHLGtLQUFrSyw2QkFBNkIsSUFBSSx3QkFBd0IsT0FBTyxlQUFlLFlBQVksOENBQThDLDJCQUEyQixvQkFBb0IsU0FBUyxjQUFjLGlEQUFpRCwrQkFBK0IsMkNBQTJDLG9CQUFvQixFQUFFLGlEQUFpRCwrQkFBK0IsMkNBQTJDLHdCQUF3QixFQUFFLHlCQUF5QixRQUFRLHVFQUF1RSx3QkFBd0IsMENBQTBDLFNBQVMsdUJBQXVCLHdCQUF3Qix3QkFBd0IsMEZBQTBGLHNCQUFzQixtQkFBbUIscUJBQXFCLHFCQUFxQix3QkFBd0IsdUJBQXVCLDBCQUEwQix3QkFBd0IsWUFBWSxtSkFBbUosbUVBQW1FLDhCQUE4Qix5SEFBeUgsOEJBQThCLHdCQUF3Qiw2RkFBNkYsNkJBQTZCLG1CQUFtQiwwQkFBMEIsb0JBQW9CLGNBQWMscUdBQXFHLHdEQUF3RCxtSkFBbUosNEJBQTRCLG9CQUFvQiw2REFBNkQseUNBQXlDLHVCQUF1Qix3QkFBd0IsOERBQThELGFBQWEsd0VBQXdFLHNCQUFzQixjQUFjLFNBQVMsdUJBQXVCLGtCQUFrQiw2RUFBNkUsdUJBQXVCLDZCQUE2QixxQkFBcUIsd0JBQXdCLGNBQWMsd0NBQXdDLCtCQUErQix1QkFBdUIsbUNBQW1DLHVCQUF1Qix5QkFBeUIsZ0NBQWdDLFNBQVMsMEJBQTBCLDRDQUE0Qyx3QkFBd0Isc0JBQXNCLG1CQUFtQixVQUFVLGVBQWUsU0FBUywwQkFBMEIsdUNBQXVDLHNCQUFzQixZQUFZLElBQUksTUFBTSxjQUFjLFNBQVMsZ0NBQWdDLHdCQUF3Qiw2REFBNkQsMEJBQTBCLDZEQUE2RCxNQUFNLGlDQUFpQyxvQkFBb0IsdUJBQXVCLHNCQUFzQixLQUFLLHdCQUF3QiwwQ0FBMEMsU0FBUyx1QkFBdUIsdUJBQXVCLDBCQUEwQixzQkFBc0IsaUJBQWlCLFNBQVMsZ0JBQWdCLFNBQVMseUJBQXlCLHNEQUFzRCx1QkFBdUIsd0JBQXdCLDZDQUE2Qyw4QkFBOEIsb0JBQW9CLFNBQVMsMkdBQTJHLFdBQVcsdUJBQXVCLFVBQVUsSUFBSSx3QkFBd0IscUNBQXFDLDBEQUEwRCxxQ0FBcUMsbUVBQW1FLG1FQUFtRSw2Q0FBNkMsNkZBQTZGLGtCQUFrQixlQUFlLGVBQWUsNEJBQTRCLElBQUksS0FBSyxnQkFBZ0IsT0FBTyxPQUFPLE9BQU8sZ0JBQWdCLGdCQUFnQixVQUFVLHlDQUF5QyxnQ0FBZ0Msb0pBQW9KLHVCQUF1QixtQ0FBbUMsc0JBQXNCLG1FQUFtRSxpQkFBaUIsdUJBQXVCLE1BQU0sa0JBQWtCLElBQUksUUFBUSxXQUFXLEtBQUssZ0JBQWdCLDRCQUE0QixRQUFRLFFBQVEsV0FBVyxLQUFLLFdBQVcsNkJBQTZCLGlCQUFpQix3QkFBd0IsbUVBQW1FLFlBQVksWUFBWSxVQUFVLHlCQUF5Qix1QkFBdUIsZ0JBQWdCLHFEQUFxRCxvQkFBb0Isd0JBQXdCLDRIQUE0SCxlQUFlLDhDQUE4QyxzQkFBc0IsWUFBWSxNQUFNLEVBQUUsVUFBVSwrQ0FBK0Msb0RBQW9ELCtEQUErRCx1QkFBdUIsNENBQTRDLGNBQWMsa0NBQWtDLHVCQUF1QixTQUFTLDZCQUE2Qiw2QkFBNkIsWUFBWSx1QkFBdUIsSUFBSSxrQkFBa0IsU0FBUyxpQ0FBaUMsY0FBYyxTQUFTLFNBQVMsT0FBTyxPQUFPLFNBQVMsU0FBUyxlQUFlLFlBQVksVUFBVSxvQ0FBb0Msa0RBQWtELHdDQUF3Qyx1REFBdUQsMENBQTBDLGtGQUFrRix5REFBeUQsdUJBQXVCLFNBQVMsZ0NBQWdDLHFCQUFxQixXQUFXLFVBQVUsT0FBTywwQ0FBMEMsa0JBQWtCLFlBQVksa0VBQWtFLFlBQVksSUFBSSxNQUFNLGlCQUFpQixhQUFhLDBDQUEwQyxrQkFBa0IsWUFBWSxrRUFBa0UsWUFBWSxJQUFJLE1BQU0saUJBQWlCLG1CQUFtQixhQUFhLDBDQUEwQyxrQkFBa0IsWUFBWSxrRUFBa0UsWUFBWSxJQUFJLE1BQU0saUJBQWlCLG1CQUFtQixtQkFBbUIsbUJBQW1CLGFBQWEsOENBQThDLGtCQUFrQixrQkFBa0IsbURBQW1ELDJDQUEyQywwREFBMEQsMkNBQTJDLHdFQUF3RSx3QkFBd0IsbUNBQW1DLDRDQUE0QyxTQUFTLDBCQUEwQix1Q0FBdUMsRUFBRSxrQkFBa0IsNEJBQTRCLHdCQUF3QixNQUFNLDZDQUE2QyxxREFBcUQsNkJBQTZCLHVDQUF1Qyx3QkFBd0Isa0hBQWtILGtCQUFrQixJQUFJLGtCQUFrQixlQUFlLGtCQUFrQixJQUFJLGtCQUFrQixjQUFjLHdDQUF3QywyQ0FBMkMsZUFBZSxTQUFTLFNBQVMsU0FBUyxTQUFTLFNBQVMsT0FBTyxPQUFPLE9BQU8sT0FBTyxxQkFBcUIsVUFBVSxVQUFVLG9CQUFvQixzQkFBc0IsbUJBQW1CLFlBQVksSUFBSSxLQUFLLGdCQUFnQixPQUFPLE9BQU8sT0FBTyxnQkFBZ0IsZ0JBQWdCLFVBQVUseUNBQXlDLHlCQUF5Qix3QkFBd0IsSUFBSSxJQUFJLHNCQUFzQixhQUFhLHVCQUF1QixjQUFjLEtBQUssbUJBQW1CLGlCQUFpQixvQkFBb0IsZ0JBQWdCLGNBQWMsa0JBQWtCLGFBQWEsU0FBUyxjQUFjLHdCQUF3QixtQkFBbUIsdUJBQXVCLGlCQUFpQixTQUFTLCtCQUErQiw2QkFBNkIsUUFBUSxxREFBcUQsTUFBTSxnREFBZ0QsS0FBSyxxREFBcUQsaUNBQWlDLDREQUE0RCxpQ0FBaUMsUUFBUSxlQUFlLGVBQWUsa0JBQWtCLDBCQUEwQiwyREFBMkQsMkJBQTJCLFNBQVMsSUFBSSxLQUFLLEtBQUssTUFBTSxtQkFBbUIsVUFBVSxZQUFZLEtBQUssNEJBQTRCLE1BQU0sTUFBTSxTQUFTLFFBQVEsSUFBSSxLQUFLLHFDQUFxQyxjQUFjLHdCQUF3QixLQUFLLGlCQUFpQixPQUFPLEtBQUssZUFBZSxRQUFRLEtBQUssS0FBSyxXQUFXLFlBQVksSUFBSSxLQUFLLDRCQUE0QixRQUFRLE9BQU8sZUFBZSxTQUFTLG1EQUFtRCxpQ0FBaUMsaURBQWlELDhDQUE4Qyx5REFBeUQsK0NBQStDLDJCQUEyQixlQUFlLGlCQUFpQixPQUFPLElBQUksS0FBSyxZQUFZLFFBQVEsS0FBSyxlQUFlLFVBQVUsTUFBTSxZQUFZLElBQUksS0FBSyxtQ0FBbUMsMkJBQTJCLFNBQVMsU0FBUyw0QkFBNEIsbURBQW1ELDZCQUE2Qix5Q0FBeUMsOEJBQThCLDJCQUEyQiw4QkFBOEIsMENBQTBDLDRCQUE0QixzREFBc0QsK0NBQStDLGtCQUFrQixTQUFTLGNBQWMsSUFBSSw0Q0FBNEMsSUFBSSxjQUFjLElBQUkscUJBQXFCLFFBQVEsZ0JBQWdCLFFBQVEsMEJBQTBCLEtBQUssSUFBSSxhQUFhLEtBQUssMkZBQTJGLG9CQUFvQiwwQkFBMEIsMENBQTBDLCtEQUErRCxlQUFlLFlBQVksTUFBTSxFQUFFLFVBQVUsc0NBQXNDLG9EQUFvRCwwQ0FBMEMseURBQXlELDRDQUE0QyxpRkFBaUYseURBQXlELHVCQUF1QixVQUFVLDBDQUEwQyxPQUFPLG1FQUFtRSw0QkFBNEIsd0JBQXdCLDBCQUEwQixLQUFLLHNDQUFzQywwQkFBMEIsdUJBQXVCLFNBQVMsUUFBUSxXQUFXLFdBQVcsV0FBVyxnQ0FBZ0MsV0FBVyxZQUFZLFVBQVUsaUJBQWlCLElBQUksTUFBTSxnQkFBZ0Isa0JBQWtCLGlCQUFpQixVQUFVLEtBQUssTUFBTSxnQkFBZ0IsU0FBUyxpQ0FBaUMsNEJBQTRCLCtCQUErQixLQUFLLE1BQU0sZ0JBQWdCLFNBQVMsU0FBUyxnREFBZ0QsdUNBQXVDLHVCQUF1QixPQUFPLGFBQWEsUUFBUSxJQUFJLGlCQUFpQixTQUFTLDBCQUEwQixlQUFlLFVBQVUsS0FBSyxnQ0FBZ0MsV0FBVyxrQ0FBa0MsZUFBZSxTQUFTLDJDQUEyQyxTQUFTLFFBQVEsV0FBVyxxREFBcUQsU0FBUywyQkFBMkIsU0FBUyx1QkFBdUIsWUFBWSxJQUFJLEtBQUssaUNBQWlDLFNBQVMsNEJBQTRCLFNBQVMsdUJBQXVCLFlBQVksSUFBSSxLQUFLLDZCQUE2QixTQUFTLHlCQUF5QixlQUFlLGVBQWUsb0JBQW9CLFNBQVMsWUFBWSxJQUFJLEtBQUssV0FBVyxTQUFTLDZCQUE2QixtQkFBbUIsU0FBUyxZQUFZLFdBQVcsTUFBTSx3Q0FBd0MsU0FBUywyQ0FBMkMsa0JBQWtCLE1BQU0sc0JBQXNCLFFBQVEsS0FBSyxXQUFXLGFBQWEsSUFBSSxRQUFRLEtBQUssV0FBVyxhQUFhLElBQUksV0FBVyx5QkFBeUIsMENBQTBDLFVBQVUsNEJBQTRCLDJEQUEyRCx1RUFBdUUsdURBQXVELFFBQVEsUUFBUSxtQ0FBbUMsY0FBYyxRQUFRLFFBQVEsdUJBQXVCLGVBQWUsVUFBVSx1REFBdUQsUUFBUSxRQUFRLE9BQU8sNkJBQTZCLGtCQUFrQixRQUFRLHFCQUFxQixpQkFBaUIsVUFBVSxtREFBbUQsUUFBUSxtQ0FBbUMsZ0JBQWdCLHlEQUF5RCxRQUFRLG1DQUFtQyw2QkFBNkIseURBQXlELFFBQVEsbUNBQW1DLDZCQUE2Qix5REFBeUQsUUFBUSxtQ0FBbUMsK0RBQStELHlEQUF5RCxRQUFRLG1DQUFtQyxnRUFBZ0UscURBQXFELFFBQVEsUUFBUSxtQ0FBbUMsY0FBYyxRQUFRLFFBQVEsdUJBQXVCLGVBQWUsT0FBTywyQkFBMkIsVUFBVSxxREFBcUQsUUFBUSxRQUFRLG1DQUFtQyxRQUFRLFFBQVEsa0JBQWtCLHFCQUFxQixpQkFBaUIsT0FBTywyQkFBMkIsVUFBVSxpREFBaUQsUUFBUSxtQ0FBbUMsaUNBQWlDLDBCQUEwQix1REFBdUQsUUFBUSxtQ0FBbUMsMkJBQTJCLCtCQUErQix1REFBdUQsUUFBUSxtQ0FBbUMsMkJBQTJCLCtCQUErQix1REFBdUQsUUFBUSxtQ0FBbUMseURBQXlELHVEQUF1RCxRQUFRLG1DQUFtQyx5REFBeUQsdURBQXVELFFBQVEsbUNBQW1DLGlDQUFpQyx1REFBdUQsUUFBUSxtQ0FBbUMsa0NBQWtDLHlEQUF5RCxRQUFRLG1DQUFtQyxpQ0FBaUMseURBQXlELFFBQVEsbUNBQW1DLGtDQUFrQywrQkFBK0IsMEZBQTBGLHNFQUFzRSwyREFBMkQsMkRBQTJELEtBQUssUUFBUSxRQUFRLE9BQU8sd0JBQXdCLHlCQUF5QixRQUFRLFFBQVEsY0FBYyx1QkFBdUIsa0JBQWtCLFlBQVksMkRBQTJELEtBQUssUUFBUSxRQUFRLE9BQU8sd0JBQXdCLHlCQUF5QixVQUFVLFFBQVEsZ0JBQWdCLHdCQUF3QixrQkFBa0IsWUFBWSx1REFBdUQsS0FBSyxRQUFRLGlDQUFpQyxjQUFjLFlBQVksNkRBQTZELEtBQUssUUFBUSxtQ0FBbUMsY0FBYyxnQkFBZ0IsWUFBWSw2REFBNkQsS0FBSyxRQUFRLG1DQUFtQyxjQUFjLGdCQUFnQixZQUFZLDZEQUE2RCxLQUFLLFFBQVEsd0NBQXdDLGlCQUFpQixpQkFBaUIsZ0JBQWdCLGNBQWMsWUFBWSw2REFBNkQsS0FBSyxRQUFRLHdDQUF3QyxlQUFlLGlCQUFpQixnQkFBZ0IsZ0JBQWdCLFlBQVkseURBQXlELEtBQUssUUFBUSxPQUFPLHdCQUF3Qiw0QkFBNEIsUUFBUSxRQUFRLFFBQVEsY0FBYyx1QkFBdUIsZ0NBQWdDLElBQUkseUJBQXlCLFlBQVkseURBQXlELEtBQUssUUFBUSxPQUFPLHdCQUF3Qiw0QkFBNEIsVUFBVSxRQUFRLFFBQVEsZ0JBQWdCLHdCQUF3QixnQ0FBZ0MsSUFBSSx5QkFBeUIsWUFBWSxxREFBcUQsS0FBSyxRQUFRLG9DQUFvQyxpQkFBaUIsY0FBYyxZQUFZLDJEQUEyRCxLQUFLLFFBQVEsd0NBQXdDLGNBQWMsZ0JBQWdCLFlBQVksMkRBQTJELEtBQUssUUFBUSx3Q0FBd0MsY0FBYyxnQkFBZ0IsWUFBWSwyREFBMkQsS0FBSyxRQUFRLGtEQUFrRCxjQUFjLGdCQUFnQixpQkFBaUIsaUJBQWlCLFlBQVksMkRBQTJELEtBQUssUUFBUSxrREFBa0Qsd0JBQXdCLGVBQWUsaUJBQWlCLGdCQUFnQixnQkFBZ0IsWUFBWSxtQ0FBbUMsMkRBQTJELGtEQUFrRCwrQkFBK0IsS0FBSyxRQUFRLE9BQU8saUVBQWlFLHNCQUFzQixXQUFXLDJEQUEyRCxvQ0FBb0MsMkRBQTJELHFDQUFxQyxnQ0FBZ0MsS0FBSyxRQUFRLE9BQU8sbUVBQW1FLHNCQUFzQixXQUFXLDZEQUE2RCxxQ0FBcUMsNkRBQTZELHNDQUFzQyw2Q0FBNkMsMEVBQTBFLFVBQVUsMkJBQTJCLDBCQUEwQixVQUFVLGdCQUFnQixrQkFBa0IsMENBQTBDLFFBQVEsa0RBQWtELGtFQUFrRSx1REFBdUQsK0JBQStCLG1CQUFtQixlQUFlLFVBQVUsa0VBQWtFLHVCQUF1Qiw0QkFBNEIsY0FBYyxLQUFLLEtBQUssa0JBQWtCLEtBQUssc0RBQXNELFVBQVUsNkNBQTZDLHdCQUF3Qix3QkFBd0IsSUFBSSxJQUFJLGNBQWMsNkJBQTZCLElBQUksY0FBYyx1Q0FBdUMsaURBQWlELCtDQUErQyw0Q0FBNEMsaUJBQWlCLHNCQUFzQixvQ0FBb0MsTUFBTSw2QkFBNkIsUUFBUSw4QkFBOEIsWUFBWSxzQ0FBc0MsMkNBQTJDLFNBQVMsWUFBWSxRQUFRLGtDQUFrQyxVQUFVLE1BQU0sd0JBQXdCLFFBQVEsSUFBSSxLQUFLLFdBQVcsS0FBSyw0Q0FBNEMsZUFBZSxVQUFVLHlFQUF5RSxRQUFRLE1BQU0sS0FBSyxrQkFBa0IsYUFBYSwwQkFBMEIsd0JBQXdCLGtCQUFrQix5QkFBeUIsdUJBQXVCLHNCQUFzQixRQUFRLFNBQVMsMEJBQTBCLGNBQWMsTUFBTSxlQUFlLFdBQVcsU0FBUyxZQUFZLElBQUksS0FBSyxrQkFBa0IscUJBQXFCLE9BQU8sWUFBWSxpQ0FBaUMsU0FBUyxpQkFBaUIsaUNBQWlDLFNBQVMsSUFBSSxTQUFTLFlBQVksaUNBQWlDLElBQUksU0FBUyw4QkFBOEIsV0FBVyxpQ0FBaUMsT0FBTyxVQUFVLGtCQUFrQixVQUFVLGdCQUFnQixrQkFBa0IsMEJBQTBCLGlCQUFpQixrQkFBa0IsdUNBQXVDLG1CQUFtQixrQkFBa0Isb0RBQW9ELEtBQUssdUNBQXVDLFNBQVMseUJBQXlCLFNBQVMsWUFBWSxXQUFXLEtBQUssNEJBQTRCLFNBQVMsNkJBQTZCLFVBQVUsU0FBUyxZQUFZLFdBQVcsS0FBSyxrQkFBa0Isa0JBQWtCLE9BQU8sUUFBUSxVQUFVLFVBQVUsU0FBUywwQkFBMEIscUNBQXFDLDZCQUE2QixZQUFZLElBQUksS0FBSyxvQ0FBb0MsWUFBWSxTQUFTLHlCQUF5QiwyR0FBMkcsd0JBQXdCLGFBQWEsaUJBQWlCLHlCQUF5QixxQkFBcUIsWUFBWSxLQUFLLEtBQUssV0FBVyxZQUFZLEtBQUssS0FBSyxrQkFBa0IsU0FBUyxHQUFHO0FBQ3p4dkI7QUFDQSwyQkFBMkIsUUFBUSxjQUFjLGVBQWUsV0FBVyxTQUFTLGNBQWMsYUFBYSxhQUFhLEtBQUssY0FBYyxPQUFPLEtBQUssS0FBSyxJQUFJLDJCQUEyQixjQUFjLE9BQU8sS0FBSyxLQUFLLElBQUksMkJBQTJCLFVBQVUsTUFBTSxlQUFlLCtCQUErQixLQUFLLGtCQUFrQixNQUFNLGtDQUFrQyw4QkFBOEIsVUFBVSxjQUFjLGVBQWUsV0FBVywrQ0FBK0MsY0FBYyxhQUFhLDRCQUE0QixjQUFjLDJCQUEyQixlQUFlLElBQUksS0FBSyxtQ0FBbUMsMkJBQTJCLElBQUksS0FBSyxXQUFXLE9BQU8sS0FBSyxxQkFBcUIsV0FBVyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksZ0JBQWdCLHdCQUF3QixNQUFNLEtBQUssa0NBQWtDLEtBQUssS0FBSyxLQUFLLGdDQUFnQyxTQUFTLEtBQUssS0FBSyxJQUFJLGdDQUFnQyxtQkFBbUIsU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUksc0NBQXNDLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLG1FQUFtRSxTQUFTLEtBQUssOEJBQThCLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2J1ZmZlci9pbmRleC5qcz9mNGVhIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe3ZhciBlPXs2NzU6ZnVuY3Rpb24oZSxyKXtcInVzZSBzdHJpY3RcIjtyLmJ5dGVMZW5ndGg9Ynl0ZUxlbmd0aDtyLnRvQnl0ZUFycmF5PXRvQnl0ZUFycmF5O3IuZnJvbUJ5dGVBcnJheT1mcm9tQnl0ZUFycmF5O3ZhciB0PVtdO3ZhciBmPVtdO3ZhciBuPXR5cGVvZiBVaW50OEFycmF5IT09XCJ1bmRlZmluZWRcIj9VaW50OEFycmF5OkFycmF5O3ZhciBpPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO2Zvcih2YXIgbz0wLHU9aS5sZW5ndGg7bzx1Oysrbyl7dFtvXT1pW29dO2ZbaS5jaGFyQ29kZUF0KG8pXT1vfWZbXCItXCIuY2hhckNvZGVBdCgwKV09NjI7ZltcIl9cIi5jaGFyQ29kZUF0KDApXT02MztmdW5jdGlvbiBnZXRMZW5zKGUpe3ZhciByPWUubGVuZ3RoO2lmKHIlND4wKXt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpfXZhciB0PWUuaW5kZXhPZihcIj1cIik7aWYodD09PS0xKXQ9cjt2YXIgZj10PT09cj8wOjQtdCU0O3JldHVyblt0LGZdfWZ1bmN0aW9uIGJ5dGVMZW5ndGgoZSl7dmFyIHI9Z2V0TGVucyhlKTt2YXIgdD1yWzBdO3ZhciBmPXJbMV07cmV0dXJuKHQrZikqMy80LWZ9ZnVuY3Rpb24gX2J5dGVMZW5ndGgoZSxyLHQpe3JldHVybihyK3QpKjMvNC10fWZ1bmN0aW9uIHRvQnl0ZUFycmF5KGUpe3ZhciByO3ZhciB0PWdldExlbnMoZSk7dmFyIGk9dFswXTt2YXIgbz10WzFdO3ZhciB1PW5ldyBuKF9ieXRlTGVuZ3RoKGUsaSxvKSk7dmFyIGE9MDt2YXIgcz1vPjA/aS00Omk7dmFyIGg7Zm9yKGg9MDtoPHM7aCs9NCl7cj1mW2UuY2hhckNvZGVBdChoKV08PDE4fGZbZS5jaGFyQ29kZUF0KGgrMSldPDwxMnxmW2UuY2hhckNvZGVBdChoKzIpXTw8NnxmW2UuY2hhckNvZGVBdChoKzMpXTt1W2ErK109cj4+MTYmMjU1O3VbYSsrXT1yPj44JjI1NTt1W2ErK109ciYyNTV9aWYobz09PTIpe3I9ZltlLmNoYXJDb2RlQXQoaCldPDwyfGZbZS5jaGFyQ29kZUF0KGgrMSldPj40O3VbYSsrXT1yJjI1NX1pZihvPT09MSl7cj1mW2UuY2hhckNvZGVBdChoKV08PDEwfGZbZS5jaGFyQ29kZUF0KGgrMSldPDw0fGZbZS5jaGFyQ29kZUF0KGgrMildPj4yO3VbYSsrXT1yPj44JjI1NTt1W2ErK109ciYyNTV9cmV0dXJuIHV9ZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0KGUpe3JldHVybiB0W2U+PjE4JjYzXSt0W2U+PjEyJjYzXSt0W2U+PjYmNjNdK3RbZSY2M119ZnVuY3Rpb24gZW5jb2RlQ2h1bmsoZSxyLHQpe3ZhciBmO3ZhciBuPVtdO2Zvcih2YXIgaT1yO2k8dDtpKz0zKXtmPShlW2ldPDwxNiYxNjcxMTY4MCkrKGVbaSsxXTw8OCY2NTI4MCkrKGVbaSsyXSYyNTUpO24ucHVzaCh0cmlwbGV0VG9CYXNlNjQoZikpfXJldHVybiBuLmpvaW4oXCJcIil9ZnVuY3Rpb24gZnJvbUJ5dGVBcnJheShlKXt2YXIgcjt2YXIgZj1lLmxlbmd0aDt2YXIgbj1mJTM7dmFyIGk9W107dmFyIG89MTYzODM7Zm9yKHZhciB1PTAsYT1mLW47dTxhO3UrPW8pe2kucHVzaChlbmNvZGVDaHVuayhlLHUsdStvPmE/YTp1K28pKX1pZihuPT09MSl7cj1lW2YtMV07aS5wdXNoKHRbcj4+Ml0rdFtyPDw0JjYzXStcIj09XCIpfWVsc2UgaWYobj09PTIpe3I9KGVbZi0yXTw8OCkrZVtmLTFdO2kucHVzaCh0W3I+PjEwXSt0W3I+PjQmNjNdK3Rbcjw8MiY2M10rXCI9XCIpfXJldHVybiBpLmpvaW4oXCJcIil9fSw3MjpmdW5jdGlvbihlLHIsdCl7XCJ1c2Ugc3RyaWN0XCI7XG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi92YXIgZj10KDY3NSk7dmFyIG49dCg3ODMpO3ZhciBpPXR5cGVvZiBTeW1ib2w9PT1cImZ1bmN0aW9uXCImJnR5cGVvZiBTeW1ib2wuZm9yPT09XCJmdW5jdGlvblwiP1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKTpudWxsO3IuQnVmZmVyPUJ1ZmZlcjtyLlNsb3dCdWZmZXI9U2xvd0J1ZmZlcjtyLklOU1BFQ1RfTUFYX0JZVEVTPTUwO3ZhciBvPTIxNDc0ODM2NDc7ci5rTWF4TGVuZ3RoPW87QnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dHlwZWRBcnJheVN1cHBvcnQoKTtpZighQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQmJnR5cGVvZiBjb25zb2xlIT09XCJ1bmRlZmluZWRcIiYmdHlwZW9mIGNvbnNvbGUuZXJyb3I9PT1cImZ1bmN0aW9uXCIpe2NvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgXCIrXCJgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LlwiKX1mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCgpe3RyeXt2YXIgZT1uZXcgVWludDhBcnJheSgxKTt2YXIgcj17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07T2JqZWN0LnNldFByb3RvdHlwZU9mKHIsVWludDhBcnJheS5wcm90b3R5cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZihlLHIpO3JldHVybiBlLmZvbygpPT09NDJ9Y2F0Y2goZSl7cmV0dXJuIGZhbHNlfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSxcInBhcmVudFwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLmJ1ZmZlcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSxcIm9mZnNldFwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSk7ZnVuY3Rpb24gY3JlYXRlQnVmZmVyKGUpe2lmKGU+byl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrZSsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyl9dmFyIHI9bmV3IFVpbnQ4QXJyYXkoZSk7T2JqZWN0LnNldFByb3RvdHlwZU9mKHIsQnVmZmVyLnByb3RvdHlwZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gQnVmZmVyKGUscix0KXtpZih0eXBlb2YgZT09PVwibnVtYmVyXCIpe2lmKHR5cGVvZiByPT09XCJzdHJpbmdcIil7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKX1yZXR1cm4gYWxsb2NVbnNhZmUoZSl9cmV0dXJuIGZyb20oZSxyLHQpfUJ1ZmZlci5wb29sU2l6ZT04MTkyO2Z1bmN0aW9uIGZyb20oZSxyLHQpe2lmKHR5cGVvZiBlPT09XCJzdHJpbmdcIil7cmV0dXJuIGZyb21TdHJpbmcoZSxyKX1pZihBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpe3JldHVybiBmcm9tQXJyYXlMaWtlKGUpfWlmKGU9PW51bGwpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBcIitcIm9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiBlKX1pZihpc0luc3RhbmNlKGUsQXJyYXlCdWZmZXIpfHxlJiZpc0luc3RhbmNlKGUuYnVmZmVyLEFycmF5QnVmZmVyKSl7cmV0dXJuIGZyb21BcnJheUJ1ZmZlcihlLHIsdCl9aWYodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyIT09XCJ1bmRlZmluZWRcIiYmKGlzSW5zdGFuY2UoZSxTaGFyZWRBcnJheUJ1ZmZlcil8fGUmJmlzSW5zdGFuY2UoZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSl7cmV0dXJuIGZyb21BcnJheUJ1ZmZlcihlLHIsdCl9aWYodHlwZW9mIGU9PT1cIm51bWJlclwiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpfXZhciBmPWUudmFsdWVPZiYmZS52YWx1ZU9mKCk7aWYoZiE9bnVsbCYmZiE9PWUpe3JldHVybiBCdWZmZXIuZnJvbShmLHIsdCl9dmFyIG49ZnJvbU9iamVjdChlKTtpZihuKXJldHVybiBuO2lmKHR5cGVvZiBTeW1ib2whPT1cInVuZGVmaW5lZFwiJiZTeW1ib2wudG9QcmltaXRpdmUhPW51bGwmJnR5cGVvZiBlW1N5bWJvbC50b1ByaW1pdGl2ZV09PT1cImZ1bmN0aW9uXCIpe3JldHVybiBCdWZmZXIuZnJvbShlW1N5bWJvbC50b1ByaW1pdGl2ZV0oXCJzdHJpbmdcIikscix0KX10aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgXCIrXCJvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIit0eXBlb2YgZSl9QnVmZmVyLmZyb209ZnVuY3Rpb24oZSxyLHQpe3JldHVybiBmcm9tKGUscix0KX07T2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlci5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsVWludDhBcnJheSk7ZnVuY3Rpb24gYXNzZXJ0U2l6ZShlKXtpZih0eXBlb2YgZSE9PVwibnVtYmVyXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKX1lbHNlIGlmKGU8MCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrZSsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyl9fWZ1bmN0aW9uIGFsbG9jKGUscix0KXthc3NlcnRTaXplKGUpO2lmKGU8PTApe3JldHVybiBjcmVhdGVCdWZmZXIoZSl9aWYociE9PXVuZGVmaW5lZCl7cmV0dXJuIHR5cGVvZiB0PT09XCJzdHJpbmdcIj9jcmVhdGVCdWZmZXIoZSkuZmlsbChyLHQpOmNyZWF0ZUJ1ZmZlcihlKS5maWxsKHIpfXJldHVybiBjcmVhdGVCdWZmZXIoZSl9QnVmZmVyLmFsbG9jPWZ1bmN0aW9uKGUscix0KXtyZXR1cm4gYWxsb2MoZSxyLHQpfTtmdW5jdGlvbiBhbGxvY1Vuc2FmZShlKXthc3NlcnRTaXplKGUpO3JldHVybiBjcmVhdGVCdWZmZXIoZTwwPzA6Y2hlY2tlZChlKXwwKX1CdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFsbG9jVW5zYWZlKGUpfTtCdWZmZXIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBhbGxvY1Vuc2FmZShlKX07ZnVuY3Rpb24gZnJvbVN0cmluZyhlLHIpe2lmKHR5cGVvZiByIT09XCJzdHJpbmdcInx8cj09PVwiXCIpe3I9XCJ1dGY4XCJ9aWYoIUJ1ZmZlci5pc0VuY29kaW5nKHIpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrcil9dmFyIHQ9Ynl0ZUxlbmd0aChlLHIpfDA7dmFyIGY9Y3JlYXRlQnVmZmVyKHQpO3ZhciBuPWYud3JpdGUoZSxyKTtpZihuIT09dCl7Zj1mLnNsaWNlKDAsbil9cmV0dXJuIGZ9ZnVuY3Rpb24gZnJvbUFycmF5TGlrZShlKXt2YXIgcj1lLmxlbmd0aDwwPzA6Y2hlY2tlZChlLmxlbmd0aCl8MDt2YXIgdD1jcmVhdGVCdWZmZXIocik7Zm9yKHZhciBmPTA7ZjxyO2YrPTEpe3RbZl09ZVtmXSYyNTV9cmV0dXJuIHR9ZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyKGUscix0KXtpZihyPDB8fGUuYnl0ZUxlbmd0aDxyKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKX1pZihlLmJ5dGVMZW5ndGg8cisodHx8MCkpe3Rocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpfXZhciBmO2lmKHI9PT11bmRlZmluZWQmJnQ9PT11bmRlZmluZWQpe2Y9bmV3IFVpbnQ4QXJyYXkoZSl9ZWxzZSBpZih0PT09dW5kZWZpbmVkKXtmPW5ldyBVaW50OEFycmF5KGUscil9ZWxzZXtmPW5ldyBVaW50OEFycmF5KGUscix0KX1PYmplY3Quc2V0UHJvdG90eXBlT2YoZixCdWZmZXIucHJvdG90eXBlKTtyZXR1cm4gZn1mdW5jdGlvbiBmcm9tT2JqZWN0KGUpe2lmKEJ1ZmZlci5pc0J1ZmZlcihlKSl7dmFyIHI9Y2hlY2tlZChlLmxlbmd0aCl8MDt2YXIgdD1jcmVhdGVCdWZmZXIocik7aWYodC5sZW5ndGg9PT0wKXtyZXR1cm4gdH1lLmNvcHkodCwwLDAscik7cmV0dXJuIHR9aWYoZS5sZW5ndGghPT11bmRlZmluZWQpe2lmKHR5cGVvZiBlLmxlbmd0aCE9PVwibnVtYmVyXCJ8fG51bWJlcklzTmFOKGUubGVuZ3RoKSl7cmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKX1yZXR1cm4gZnJvbUFycmF5TGlrZShlKX1pZihlLnR5cGU9PT1cIkJ1ZmZlclwiJiZBcnJheS5pc0FycmF5KGUuZGF0YSkpe3JldHVybiBmcm9tQXJyYXlMaWtlKGUuZGF0YSl9fWZ1bmN0aW9uIGNoZWNrZWQoZSl7aWYoZT49byl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIFwiK1wic2l6ZTogMHhcIitvLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKX1yZXR1cm4gZXwwfWZ1bmN0aW9uIFNsb3dCdWZmZXIoZSl7aWYoK2UhPWUpe2U9MH1yZXR1cm4gQnVmZmVyLmFsbG9jKCtlKX1CdWZmZXIuaXNCdWZmZXI9ZnVuY3Rpb24gaXNCdWZmZXIoZSl7cmV0dXJuIGUhPW51bGwmJmUuX2lzQnVmZmVyPT09dHJ1ZSYmZSE9PUJ1ZmZlci5wcm90b3R5cGV9O0J1ZmZlci5jb21wYXJlPWZ1bmN0aW9uIGNvbXBhcmUoZSxyKXtpZihpc0luc3RhbmNlKGUsVWludDhBcnJheSkpZT1CdWZmZXIuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCk7aWYoaXNJbnN0YW5jZShyLFVpbnQ4QXJyYXkpKXI9QnVmZmVyLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpO2lmKCFCdWZmZXIuaXNCdWZmZXIoZSl8fCFCdWZmZXIuaXNCdWZmZXIocikpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKX1pZihlPT09cilyZXR1cm4gMDt2YXIgdD1lLmxlbmd0aDt2YXIgZj1yLmxlbmd0aDtmb3IodmFyIG49MCxpPU1hdGgubWluKHQsZik7bjxpOysrbil7aWYoZVtuXSE9PXJbbl0pe3Q9ZVtuXTtmPXJbbl07YnJlYWt9fWlmKHQ8ZilyZXR1cm4tMTtpZihmPHQpcmV0dXJuIDE7cmV0dXJuIDB9O0J1ZmZlci5pc0VuY29kaW5nPWZ1bmN0aW9uIGlzRW5jb2RpbmcoZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB0cnVlO2RlZmF1bHQ6cmV0dXJuIGZhbHNlfX07QnVmZmVyLmNvbmNhdD1mdW5jdGlvbiBjb25jYXQoZSxyKXtpZighQXJyYXkuaXNBcnJheShlKSl7dGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyl9aWYoZS5sZW5ndGg9PT0wKXtyZXR1cm4gQnVmZmVyLmFsbG9jKDApfXZhciB0O2lmKHI9PT11bmRlZmluZWQpe3I9MDtmb3IodD0wO3Q8ZS5sZW5ndGg7Kyt0KXtyKz1lW3RdLmxlbmd0aH19dmFyIGY9QnVmZmVyLmFsbG9jVW5zYWZlKHIpO3ZhciBuPTA7Zm9yKHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIGk9ZVt0XTtpZihpc0luc3RhbmNlKGksVWludDhBcnJheSkpe2k9QnVmZmVyLmZyb20oaSl9aWYoIUJ1ZmZlci5pc0J1ZmZlcihpKSl7dGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyl9aS5jb3B5KGYsbik7bis9aS5sZW5ndGh9cmV0dXJuIGZ9O2Z1bmN0aW9uIGJ5dGVMZW5ndGgoZSxyKXtpZihCdWZmZXIuaXNCdWZmZXIoZSkpe3JldHVybiBlLmxlbmd0aH1pZihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGlzSW5zdGFuY2UoZSxBcnJheUJ1ZmZlcikpe3JldHVybiBlLmJ5dGVMZW5ndGh9aWYodHlwZW9mIGUhPT1cInN0cmluZ1wiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJytcIlJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIGUpfXZhciB0PWUubGVuZ3RoO3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdPT09dHJ1ZTtpZighZiYmdD09PTApcmV0dXJuIDA7dmFyIG49ZmFsc2U7Zm9yKDs7KXtzd2l0Y2gocil7Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gdDtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gdXRmOFRvQnl0ZXMoZSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB0KjI7Y2FzZVwiaGV4XCI6cmV0dXJuIHQ+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBiYXNlNjRUb0J5dGVzKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pe3JldHVybiBmPy0xOnV0ZjhUb0J5dGVzKGUpLmxlbmd0aH1yPShcIlwiK3IpLnRvTG93ZXJDYXNlKCk7bj10cnVlfX19QnVmZmVyLmJ5dGVMZW5ndGg9Ynl0ZUxlbmd0aDtmdW5jdGlvbiBzbG93VG9TdHJpbmcoZSxyLHQpe3ZhciBmPWZhbHNlO2lmKHI9PT11bmRlZmluZWR8fHI8MCl7cj0wfWlmKHI+dGhpcy5sZW5ndGgpe3JldHVyblwiXCJ9aWYodD09PXVuZGVmaW5lZHx8dD50aGlzLmxlbmd0aCl7dD10aGlzLmxlbmd0aH1pZih0PD0wKXtyZXR1cm5cIlwifXQ+Pj49MDtyPj4+PTA7aWYodDw9cil7cmV0dXJuXCJcIn1pZighZSllPVwidXRmOFwiO3doaWxlKHRydWUpe3N3aXRjaChlKXtjYXNlXCJoZXhcIjpyZXR1cm4gaGV4U2xpY2UodGhpcyxyLHQpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiB1dGY4U2xpY2UodGhpcyxyLHQpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIGFzY2lpU2xpY2UodGhpcyxyLHQpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBsYXRpbjFTbGljZSh0aGlzLHIsdCk7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMscix0KTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMscix0KTtkZWZhdWx0OmlmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2UpO2U9KGUrXCJcIikudG9Mb3dlckNhc2UoKTtmPXRydWV9fX1CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlcj10cnVlO2Z1bmN0aW9uIHN3YXAoZSxyLHQpe3ZhciBmPWVbcl07ZVtyXT1lW3RdO2VbdF09Zn1CdWZmZXIucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbiBzd2FwMTYoKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPT0wKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzXCIpfWZvcih2YXIgcj0wO3I8ZTtyKz0yKXtzd2FwKHRoaXMscixyKzEpfXJldHVybiB0aGlzfTtCdWZmZXIucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbiBzd2FwMzIoKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPT0wKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzXCIpfWZvcih2YXIgcj0wO3I8ZTtyKz00KXtzd2FwKHRoaXMscixyKzMpO3N3YXAodGhpcyxyKzEscisyKX1yZXR1cm4gdGhpc307QnVmZmVyLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24gc3dhcDY0KCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT09MCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0c1wiKX1mb3IodmFyIHI9MDtyPGU7cis9OCl7c3dhcCh0aGlzLHIscis3KTtzd2FwKHRoaXMscisxLHIrNik7c3dhcCh0aGlzLHIrMixyKzUpO3N3YXAodGhpcyxyKzMscis0KX1yZXR1cm4gdGhpc307QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbiB0b1N0cmluZygpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGU9PT0wKXJldHVyblwiXCI7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIHV0ZjhTbGljZSh0aGlzLDAsZSk7cmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O0J1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZztCdWZmZXIucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbiBlcXVhbHMoZSl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtpZih0aGlzPT09ZSlyZXR1cm4gdHJ1ZTtyZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcyxlKT09PTB9O0J1ZmZlci5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbiBpbnNwZWN0KCl7dmFyIGU9XCJcIjt2YXIgdD1yLklOU1BFQ1RfTUFYX0JZVEVTO2U9dGhpcy50b1N0cmluZyhcImhleFwiLDAsdCkucmVwbGFjZSgvKC57Mn0pL2csXCIkMSBcIikudHJpbSgpO2lmKHRoaXMubGVuZ3RoPnQpZSs9XCIgLi4uIFwiO3JldHVyblwiPEJ1ZmZlciBcIitlK1wiPlwifTtpZihpKXtCdWZmZXIucHJvdG90eXBlW2ldPUJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdH1CdWZmZXIucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24gY29tcGFyZShlLHIsdCxmLG4pe2lmKGlzSW5zdGFuY2UoZSxVaW50OEFycmF5KSl7ZT1CdWZmZXIuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCl9aWYoIUJ1ZmZlci5pc0J1ZmZlcihlKSl7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJytcIlJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIGUpfWlmKHI9PT11bmRlZmluZWQpe3I9MH1pZih0PT09dW5kZWZpbmVkKXt0PWU/ZS5sZW5ndGg6MH1pZihmPT09dW5kZWZpbmVkKXtmPTB9aWYobj09PXVuZGVmaW5lZCl7bj10aGlzLmxlbmd0aH1pZihyPDB8fHQ+ZS5sZW5ndGh8fGY8MHx8bj50aGlzLmxlbmd0aCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2UgaW5kZXhcIil9aWYoZj49biYmcj49dCl7cmV0dXJuIDB9aWYoZj49bil7cmV0dXJuLTF9aWYocj49dCl7cmV0dXJuIDF9cj4+Pj0wO3Q+Pj49MDtmPj4+PTA7bj4+Pj0wO2lmKHRoaXM9PT1lKXJldHVybiAwO3ZhciBpPW4tZjt2YXIgbz10LXI7dmFyIHU9TWF0aC5taW4oaSxvKTt2YXIgYT10aGlzLnNsaWNlKGYsbik7dmFyIHM9ZS5zbGljZShyLHQpO2Zvcih2YXIgaD0wO2g8dTsrK2gpe2lmKGFbaF0hPT1zW2hdKXtpPWFbaF07bz1zW2hdO2JyZWFrfX1pZihpPG8pcmV0dXJuLTE7aWYobzxpKXJldHVybiAxO3JldHVybiAwfTtmdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZihlLHIsdCxmLG4pe2lmKGUubGVuZ3RoPT09MClyZXR1cm4tMTtpZih0eXBlb2YgdD09PVwic3RyaW5nXCIpe2Y9dDt0PTB9ZWxzZSBpZih0PjIxNDc0ODM2NDcpe3Q9MjE0NzQ4MzY0N31lbHNlIGlmKHQ8LTIxNDc0ODM2NDgpe3Q9LTIxNDc0ODM2NDh9dD0rdDtpZihudW1iZXJJc05hTih0KSl7dD1uPzA6ZS5sZW5ndGgtMX1pZih0PDApdD1lLmxlbmd0aCt0O2lmKHQ+PWUubGVuZ3RoKXtpZihuKXJldHVybi0xO2Vsc2UgdD1lLmxlbmd0aC0xfWVsc2UgaWYodDwwKXtpZihuKXQ9MDtlbHNlIHJldHVybi0xfWlmKHR5cGVvZiByPT09XCJzdHJpbmdcIil7cj1CdWZmZXIuZnJvbShyLGYpfWlmKEJ1ZmZlci5pc0J1ZmZlcihyKSl7aWYoci5sZW5ndGg9PT0wKXtyZXR1cm4tMX1yZXR1cm4gYXJyYXlJbmRleE9mKGUscix0LGYsbil9ZWxzZSBpZih0eXBlb2Ygcj09PVwibnVtYmVyXCIpe3I9ciYyNTU7aWYodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y9PT1cImZ1bmN0aW9uXCIpe2lmKG4pe3JldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSxyLHQpfWVsc2V7cmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSxyLHQpfX1yZXR1cm4gYXJyYXlJbmRleE9mKGUsW3JdLHQsZixuKX10aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIGFycmF5SW5kZXhPZihlLHIsdCxmLG4pe3ZhciBpPTE7dmFyIG89ZS5sZW5ndGg7dmFyIHU9ci5sZW5ndGg7aWYoZiE9PXVuZGVmaW5lZCl7Zj1TdHJpbmcoZikudG9Mb3dlckNhc2UoKTtpZihmPT09XCJ1Y3MyXCJ8fGY9PT1cInVjcy0yXCJ8fGY9PT1cInV0ZjE2bGVcInx8Zj09PVwidXRmLTE2bGVcIil7aWYoZS5sZW5ndGg8Mnx8ci5sZW5ndGg8Mil7cmV0dXJuLTF9aT0yO28vPTI7dS89Mjt0Lz0yfX1mdW5jdGlvbiByZWFkKGUscil7aWYoaT09PTEpe3JldHVybiBlW3JdfWVsc2V7cmV0dXJuIGUucmVhZFVJbnQxNkJFKHIqaSl9fXZhciBhO2lmKG4pe3ZhciBzPS0xO2ZvcihhPXQ7YTxvO2ErKyl7aWYocmVhZChlLGEpPT09cmVhZChyLHM9PT0tMT8wOmEtcykpe2lmKHM9PT0tMSlzPWE7aWYoYS1zKzE9PT11KXJldHVybiBzKml9ZWxzZXtpZihzIT09LTEpYS09YS1zO3M9LTF9fX1lbHNle2lmKHQrdT5vKXQ9by11O2ZvcihhPXQ7YT49MDthLS0pe3ZhciBoPXRydWU7Zm9yKHZhciBjPTA7Yzx1O2MrKyl7aWYocmVhZChlLGErYykhPT1yZWFkKHIsYykpe2g9ZmFsc2U7YnJlYWt9fWlmKGgpcmV0dXJuIGF9fXJldHVybi0xfUJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24gaW5jbHVkZXMoZSxyLHQpe3JldHVybiB0aGlzLmluZGV4T2YoZSxyLHQpIT09LTF9O0J1ZmZlci5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbiBpbmRleE9mKGUscix0KXtyZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcyxlLHIsdCx0cnVlKX07QnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbiBsYXN0SW5kZXhPZihlLHIsdCl7cmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsZSxyLHQsZmFsc2UpfTtmdW5jdGlvbiBoZXhXcml0ZShlLHIsdCxmKXt0PU51bWJlcih0KXx8MDt2YXIgbj1lLmxlbmd0aC10O2lmKCFmKXtmPW59ZWxzZXtmPU51bWJlcihmKTtpZihmPm4pe2Y9bn19dmFyIGk9ci5sZW5ndGg7aWYoZj5pLzIpe2Y9aS8yfWZvcih2YXIgbz0wO288ZjsrK28pe3ZhciB1PXBhcnNlSW50KHIuc3Vic3RyKG8qMiwyKSwxNik7aWYobnVtYmVySXNOYU4odSkpcmV0dXJuIG87ZVt0K29dPXV9cmV0dXJuIG99ZnVuY3Rpb24gdXRmOFdyaXRlKGUscix0LGYpe3JldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHIsZS5sZW5ndGgtdCksZSx0LGYpfWZ1bmN0aW9uIGFzY2lpV3JpdGUoZSxyLHQsZil7cmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHIpLGUsdCxmKX1mdW5jdGlvbiBsYXRpbjFXcml0ZShlLHIsdCxmKXtyZXR1cm4gYXNjaWlXcml0ZShlLHIsdCxmKX1mdW5jdGlvbiBiYXNlNjRXcml0ZShlLHIsdCxmKXtyZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHIpLGUsdCxmKX1mdW5jdGlvbiB1Y3MyV3JpdGUoZSxyLHQsZil7cmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMocixlLmxlbmd0aC10KSxlLHQsZil9QnVmZmVyLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbiB3cml0ZShlLHIsdCxmKXtpZihyPT09dW5kZWZpbmVkKXtmPVwidXRmOFwiO3Q9dGhpcy5sZW5ndGg7cj0wfWVsc2UgaWYodD09PXVuZGVmaW5lZCYmdHlwZW9mIHI9PT1cInN0cmluZ1wiKXtmPXI7dD10aGlzLmxlbmd0aDtyPTB9ZWxzZSBpZihpc0Zpbml0ZShyKSl7cj1yPj4+MDtpZihpc0Zpbml0ZSh0KSl7dD10Pj4+MDtpZihmPT09dW5kZWZpbmVkKWY9XCJ1dGY4XCJ9ZWxzZXtmPXQ7dD11bmRlZmluZWR9fWVsc2V7dGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcIil9dmFyIG49dGhpcy5sZW5ndGgtcjtpZih0PT09dW5kZWZpbmVkfHx0Pm4pdD1uO2lmKGUubGVuZ3RoPjAmJih0PDB8fHI8MCl8fHI+dGhpcy5sZW5ndGgpe3Rocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIil9aWYoIWYpZj1cInV0ZjhcIjt2YXIgaT1mYWxzZTtmb3IoOzspe3N3aXRjaChmKXtjYXNlXCJoZXhcIjpyZXR1cm4gaGV4V3JpdGUodGhpcyxlLHIsdCk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHV0ZjhXcml0ZSh0aGlzLGUscix0KTtjYXNlXCJhc2NpaVwiOnJldHVybiBhc2NpaVdyaXRlKHRoaXMsZSxyLHQpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBsYXRpbjFXcml0ZSh0aGlzLGUscix0KTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gYmFzZTY0V3JpdGUodGhpcyxlLHIsdCk7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIHVjczJXcml0ZSh0aGlzLGUscix0KTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2YpO2Y9KFwiXCIrZikudG9Mb3dlckNhc2UoKTtpPXRydWV9fX07QnVmZmVyLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24gdG9KU09OKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIGJhc2U2NFNsaWNlKGUscix0KXtpZihyPT09MCYmdD09PWUubGVuZ3RoKXtyZXR1cm4gZi5mcm9tQnl0ZUFycmF5KGUpfWVsc2V7cmV0dXJuIGYuZnJvbUJ5dGVBcnJheShlLnNsaWNlKHIsdCkpfX1mdW5jdGlvbiB1dGY4U2xpY2UoZSxyLHQpe3Q9TWF0aC5taW4oZS5sZW5ndGgsdCk7dmFyIGY9W107dmFyIG49cjt3aGlsZShuPHQpe3ZhciBpPWVbbl07dmFyIG89bnVsbDt2YXIgdT1pPjIzOT80Omk+MjIzPzM6aT4xOTE/MjoxO2lmKG4rdTw9dCl7dmFyIGEscyxoLGM7c3dpdGNoKHUpe2Nhc2UgMTppZihpPDEyOCl7bz1pfWJyZWFrO2Nhc2UgMjphPWVbbisxXTtpZigoYSYxOTIpPT09MTI4KXtjPShpJjMxKTw8NnxhJjYzO2lmKGM+MTI3KXtvPWN9fWJyZWFrO2Nhc2UgMzphPWVbbisxXTtzPWVbbisyXTtpZigoYSYxOTIpPT09MTI4JiYocyYxOTIpPT09MTI4KXtjPShpJjE1KTw8MTJ8KGEmNjMpPDw2fHMmNjM7aWYoYz4yMDQ3JiYoYzw1NTI5Nnx8Yz41NzM0Mykpe289Y319YnJlYWs7Y2FzZSA0OmE9ZVtuKzFdO3M9ZVtuKzJdO2g9ZVtuKzNdO2lmKChhJjE5Mik9PT0xMjgmJihzJjE5Mik9PT0xMjgmJihoJjE5Mik9PT0xMjgpe2M9KGkmMTUpPDwxOHwoYSY2Myk8PDEyfChzJjYzKTw8NnxoJjYzO2lmKGM+NjU1MzUmJmM8MTExNDExMil7bz1jfX19fWlmKG89PT1udWxsKXtvPTY1NTMzO3U9MX1lbHNlIGlmKG8+NjU1MzUpe28tPTY1NTM2O2YucHVzaChvPj4+MTAmMTAyM3w1NTI5Nik7bz01NjMyMHxvJjEwMjN9Zi5wdXNoKG8pO24rPXV9cmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShmKX12YXIgdT00MDk2O2Z1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheShlKXt2YXIgcj1lLmxlbmd0aDtpZihyPD11KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSl9dmFyIHQ9XCJcIjt2YXIgZj0wO3doaWxlKGY8cil7dCs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShmLGYrPXUpKX1yZXR1cm4gdH1mdW5jdGlvbiBhc2NpaVNsaWNlKGUscix0KXt2YXIgZj1cIlwiO3Q9TWF0aC5taW4oZS5sZW5ndGgsdCk7Zm9yKHZhciBuPXI7bjx0Oysrbil7Zis9U3RyaW5nLmZyb21DaGFyQ29kZShlW25dJjEyNyl9cmV0dXJuIGZ9ZnVuY3Rpb24gbGF0aW4xU2xpY2UoZSxyLHQpe3ZhciBmPVwiXCI7dD1NYXRoLm1pbihlLmxlbmd0aCx0KTtmb3IodmFyIG49cjtuPHQ7KytuKXtmKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbbl0pfXJldHVybiBmfWZ1bmN0aW9uIGhleFNsaWNlKGUscix0KXt2YXIgZj1lLmxlbmd0aDtpZighcnx8cjwwKXI9MDtpZighdHx8dDwwfHx0PmYpdD1mO3ZhciBuPVwiXCI7Zm9yKHZhciBpPXI7aTx0OysraSl7bis9c1tlW2ldXX1yZXR1cm4gbn1mdW5jdGlvbiB1dGYxNmxlU2xpY2UoZSxyLHQpe3ZhciBmPWUuc2xpY2Uocix0KTt2YXIgbj1cIlwiO2Zvcih2YXIgaT0wO2k8Zi5sZW5ndGg7aSs9Mil7bis9U3RyaW5nLmZyb21DaGFyQ29kZShmW2ldK2ZbaSsxXSoyNTYpfXJldHVybiBufUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24gc2xpY2UoZSxyKXt2YXIgdD10aGlzLmxlbmd0aDtlPX5+ZTtyPXI9PT11bmRlZmluZWQ/dDp+fnI7aWYoZTwwKXtlKz10O2lmKGU8MCllPTB9ZWxzZSBpZihlPnQpe2U9dH1pZihyPDApe3IrPXQ7aWYocjwwKXI9MH1lbHNlIGlmKHI+dCl7cj10fWlmKHI8ZSlyPWU7dmFyIGY9dGhpcy5zdWJhcnJheShlLHIpO09iamVjdC5zZXRQcm90b3R5cGVPZihmLEJ1ZmZlci5wcm90b3R5cGUpO3JldHVybiBmfTtmdW5jdGlvbiBjaGVja09mZnNldChlLHIsdCl7aWYoZSUxIT09MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKGUrcj50KXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24gcmVhZFVJbnRMRShlLHIsdCl7ZT1lPj4+MDtyPXI+Pj4wO2lmKCF0KWNoZWNrT2Zmc2V0KGUscix0aGlzLmxlbmd0aCk7dmFyIGY9dGhpc1tlXTt2YXIgbj0xO3ZhciBpPTA7d2hpbGUoKytpPHImJihuKj0yNTYpKXtmKz10aGlzW2UraV0qbn1yZXR1cm4gZn07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uIHJlYWRVSW50QkUoZSxyLHQpe2U9ZT4+PjA7cj1yPj4+MDtpZighdCl7Y2hlY2tPZmZzZXQoZSxyLHRoaXMubGVuZ3RoKX12YXIgZj10aGlzW2UrLS1yXTt2YXIgbj0xO3doaWxlKHI+MCYmKG4qPTI1Nikpe2YrPXRoaXNbZSstLXJdKm59cmV0dXJuIGZ9O0J1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uIHJlYWRVSW50OChlLHIpe2U9ZT4+PjA7aWYoIXIpY2hlY2tPZmZzZXQoZSwxLHRoaXMubGVuZ3RoKTtyZXR1cm4gdGhpc1tlXX07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24gcmVhZFVJbnQxNkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2VdfHRoaXNbZSsxXTw8OH07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24gcmVhZFVJbnQxNkJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2VdPDw4fHRoaXNbZSsxXX07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24gcmVhZFVJbnQzMkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDQsdGhpcy5sZW5ndGgpO3JldHVybih0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSt0aGlzW2UrM10qMTY3NzcyMTZ9O0J1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uIHJlYWRVSW50MzJCRShlLHIpe2U9ZT4+PjA7aWYoIXIpY2hlY2tPZmZzZXQoZSw0LHRoaXMubGVuZ3RoKTtyZXR1cm4gdGhpc1tlXSoxNjc3NzIxNisodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX07QnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24gcmVhZEludExFKGUscix0KXtlPWU+Pj4wO3I9cj4+PjA7aWYoIXQpY2hlY2tPZmZzZXQoZSxyLHRoaXMubGVuZ3RoKTt2YXIgZj10aGlzW2VdO3ZhciBuPTE7dmFyIGk9MDt3aGlsZSgrK2k8ciYmKG4qPTI1Nikpe2YrPXRoaXNbZStpXSpufW4qPTEyODtpZihmPj1uKWYtPU1hdGgucG93KDIsOCpyKTtyZXR1cm4gZn07QnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24gcmVhZEludEJFKGUscix0KXtlPWU+Pj4wO3I9cj4+PjA7aWYoIXQpY2hlY2tPZmZzZXQoZSxyLHRoaXMubGVuZ3RoKTt2YXIgZj1yO3ZhciBuPTE7dmFyIGk9dGhpc1tlKy0tZl07d2hpbGUoZj4wJiYobio9MjU2KSl7aSs9dGhpc1tlKy0tZl0qbn1uKj0xMjg7aWYoaT49bilpLT1NYXRoLnBvdygyLDgqcik7cmV0dXJuIGl9O0J1ZmZlci5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24gcmVhZEludDgoZSxyKXtlPWU+Pj4wO2lmKCFyKWNoZWNrT2Zmc2V0KGUsMSx0aGlzLmxlbmd0aCk7aWYoISh0aGlzW2VdJjEyOCkpcmV0dXJuIHRoaXNbZV07cmV0dXJuKDI1NS10aGlzW2VdKzEpKi0xfTtCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uIHJlYWRJbnQxNkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3ZhciB0PXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiB0JjMyNzY4P3R8NDI5NDkwMTc2MDp0fTtCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uIHJlYWRJbnQxNkJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3ZhciB0PXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiB0JjMyNzY4P3R8NDI5NDkwMTc2MDp0fTtCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uIHJlYWRJbnQzMkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDQsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9O0J1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24gcmVhZEludDMyQkUoZSxyKXtlPWU+Pj4wO2lmKCFyKWNoZWNrT2Zmc2V0KGUsNCx0aGlzLmxlbmd0aCk7cmV0dXJuIHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX07QnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbiByZWFkRmxvYXRMRShlLHIpe2U9ZT4+PjA7aWYoIXIpY2hlY2tPZmZzZXQoZSw0LHRoaXMubGVuZ3RoKTtyZXR1cm4gbi5yZWFkKHRoaXMsZSx0cnVlLDIzLDQpfTtCdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uIHJlYWRGbG9hdEJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDQsdGhpcy5sZW5ndGgpO3JldHVybiBuLnJlYWQodGhpcyxlLGZhbHNlLDIzLDQpfTtCdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbiByZWFkRG91YmxlTEUoZSxyKXtlPWU+Pj4wO2lmKCFyKWNoZWNrT2Zmc2V0KGUsOCx0aGlzLmxlbmd0aCk7cmV0dXJuIG4ucmVhZCh0aGlzLGUsdHJ1ZSw1Miw4KX07QnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24gcmVhZERvdWJsZUJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDgsdGhpcy5sZW5ndGgpO3JldHVybiBuLnJlYWQodGhpcyxlLGZhbHNlLDUyLDgpfTtmdW5jdGlvbiBjaGVja0ludChlLHIsdCxmLG4saSl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihyPm58fHI8aSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZih0K2Y+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbiB3cml0ZVVJbnRMRShlLHIsdCxmKXtlPStlO3I9cj4+PjA7dD10Pj4+MDtpZighZil7dmFyIG49TWF0aC5wb3coMiw4KnQpLTE7Y2hlY2tJbnQodGhpcyxlLHIsdCxuLDApfXZhciBpPTE7dmFyIG89MDt0aGlzW3JdPWUmMjU1O3doaWxlKCsrbzx0JiYoaSo9MjU2KSl7dGhpc1tyK29dPWUvaSYyNTV9cmV0dXJuIHIrdH07QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbiB3cml0ZVVJbnRCRShlLHIsdCxmKXtlPStlO3I9cj4+PjA7dD10Pj4+MDtpZighZil7dmFyIG49TWF0aC5wb3coMiw4KnQpLTE7Y2hlY2tJbnQodGhpcyxlLHIsdCxuLDApfXZhciBpPXQtMTt2YXIgbz0xO3RoaXNbcitpXT1lJjI1NTt3aGlsZSgtLWk+PTAmJihvKj0yNTYpKXt0aGlzW3IraV09ZS9vJjI1NX1yZXR1cm4gcit0fTtCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24gd3JpdGVVSW50OChlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDEsMjU1LDApO3RoaXNbcl09ZSYyNTU7cmV0dXJuIHIrMX07QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uIHdyaXRlVUludDE2TEUoZSxyLHQpe2U9K2U7cj1yPj4+MDtpZighdCljaGVja0ludCh0aGlzLGUsciwyLDY1NTM1LDApO3RoaXNbcl09ZSYyNTU7dGhpc1tyKzFdPWU+Pj44O3JldHVybiByKzJ9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbiB3cml0ZVVJbnQxNkJFKGUscix0KXtlPStlO3I9cj4+PjA7aWYoIXQpY2hlY2tJbnQodGhpcyxlLHIsMiw2NTUzNSwwKTt0aGlzW3JdPWU+Pj44O3RoaXNbcisxXT1lJjI1NTtyZXR1cm4gcisyfTtCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24gd3JpdGVVSW50MzJMRShlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDQsNDI5NDk2NzI5NSwwKTt0aGlzW3IrM109ZT4+PjI0O3RoaXNbcisyXT1lPj4+MTY7dGhpc1tyKzFdPWU+Pj44O3RoaXNbcl09ZSYyNTU7cmV0dXJuIHIrNH07QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uIHdyaXRlVUludDMyQkUoZSxyLHQpe2U9K2U7cj1yPj4+MDtpZighdCljaGVja0ludCh0aGlzLGUsciw0LDQyOTQ5NjcyOTUsMCk7dGhpc1tyXT1lPj4+MjQ7dGhpc1tyKzFdPWU+Pj4xNjt0aGlzW3IrMl09ZT4+Pjg7dGhpc1tyKzNdPWUmMjU1O3JldHVybiByKzR9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbiB3cml0ZUludExFKGUscix0LGYpe2U9K2U7cj1yPj4+MDtpZighZil7dmFyIG49TWF0aC5wb3coMiw4KnQtMSk7Y2hlY2tJbnQodGhpcyxlLHIsdCxuLTEsLW4pfXZhciBpPTA7dmFyIG89MTt2YXIgdT0wO3RoaXNbcl09ZSYyNTU7d2hpbGUoKytpPHQmJihvKj0yNTYpKXtpZihlPDAmJnU9PT0wJiZ0aGlzW3IraS0xXSE9PTApe3U9MX10aGlzW3IraV09KGUvbz4+MCktdSYyNTV9cmV0dXJuIHIrdH07QnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uIHdyaXRlSW50QkUoZSxyLHQsZil7ZT0rZTtyPXI+Pj4wO2lmKCFmKXt2YXIgbj1NYXRoLnBvdygyLDgqdC0xKTtjaGVja0ludCh0aGlzLGUscix0LG4tMSwtbil9dmFyIGk9dC0xO3ZhciBvPTE7dmFyIHU9MDt0aGlzW3IraV09ZSYyNTU7d2hpbGUoLS1pPj0wJiYobyo9MjU2KSl7aWYoZTwwJiZ1PT09MCYmdGhpc1tyK2krMV0hPT0wKXt1PTF9dGhpc1tyK2ldPShlL28+PjApLXUmMjU1fXJldHVybiByK3R9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uIHdyaXRlSW50OChlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDEsMTI3LC0xMjgpO2lmKGU8MCllPTI1NStlKzE7dGhpc1tyXT1lJjI1NTtyZXR1cm4gcisxfTtCdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbiB3cml0ZUludDE2TEUoZSxyLHQpe2U9K2U7cj1yPj4+MDtpZighdCljaGVja0ludCh0aGlzLGUsciwyLDMyNzY3LC0zMjc2OCk7dGhpc1tyXT1lJjI1NTt0aGlzW3IrMV09ZT4+Pjg7cmV0dXJuIHIrMn07QnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24gd3JpdGVJbnQxNkJFKGUscix0KXtlPStlO3I9cj4+PjA7aWYoIXQpY2hlY2tJbnQodGhpcyxlLHIsMiwzMjc2NywtMzI3NjgpO3RoaXNbcl09ZT4+Pjg7dGhpc1tyKzFdPWUmMjU1O3JldHVybiByKzJ9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uIHdyaXRlSW50MzJMRShlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCk7dGhpc1tyXT1lJjI1NTt0aGlzW3IrMV09ZT4+Pjg7dGhpc1tyKzJdPWU+Pj4xNjt0aGlzW3IrM109ZT4+PjI0O3JldHVybiByKzR9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uIHdyaXRlSW50MzJCRShlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCk7aWYoZTwwKWU9NDI5NDk2NzI5NStlKzE7dGhpc1tyXT1lPj4+MjQ7dGhpc1tyKzFdPWU+Pj4xNjt0aGlzW3IrMl09ZT4+Pjg7dGhpc1tyKzNdPWUmMjU1O3JldHVybiByKzR9O2Z1bmN0aW9uIGNoZWNrSUVFRTc1NChlLHIsdCxmLG4saSl7aWYodCtmPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiB3cml0ZUZsb2F0KGUscix0LGYsaSl7cj0rcjt0PXQ+Pj4wO2lmKCFpKXtjaGVja0lFRUU3NTQoZSxyLHQsNCwzNDAyODIzNDY2Mzg1Mjg4NmUyMiwtMzQwMjgyMzQ2NjM4NTI4ODZlMjIpfW4ud3JpdGUoZSxyLHQsZiwyMyw0KTtyZXR1cm4gdCs0fUJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uIHdyaXRlRmxvYXRMRShlLHIsdCl7cmV0dXJuIHdyaXRlRmxvYXQodGhpcyxlLHIsdHJ1ZSx0KX07QnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24gd3JpdGVGbG9hdEJFKGUscix0KXtyZXR1cm4gd3JpdGVGbG9hdCh0aGlzLGUscixmYWxzZSx0KX07ZnVuY3Rpb24gd3JpdGVEb3VibGUoZSxyLHQsZixpKXtyPStyO3Q9dD4+PjA7aWYoIWkpe2NoZWNrSUVFRTc1NChlLHIsdCw4LDE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiwtMTc5NzY5MzEzNDg2MjMxNTdlMjkyKX1uLndyaXRlKGUscix0LGYsNTIsOCk7cmV0dXJuIHQrOH1CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24gd3JpdGVEb3VibGVMRShlLHIsdCl7cmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsZSxyLHRydWUsdCl9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbiB3cml0ZURvdWJsZUJFKGUscix0KXtyZXR1cm4gd3JpdGVEb3VibGUodGhpcyxlLHIsZmFsc2UsdCl9O0J1ZmZlci5wcm90b3R5cGUuY29weT1mdW5jdGlvbiBjb3B5KGUscix0LGYpe2lmKCFCdWZmZXIuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlclwiKTtpZighdCl0PTA7aWYoIWYmJmYhPT0wKWY9dGhpcy5sZW5ndGg7aWYocj49ZS5sZW5ndGgpcj1lLmxlbmd0aDtpZighcilyPTA7aWYoZj4wJiZmPHQpZj10O2lmKGY9PT10KXJldHVybiAwO2lmKGUubGVuZ3RoPT09MHx8dGhpcy5sZW5ndGg9PT0wKXJldHVybiAwO2lmKHI8MCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpfWlmKHQ8MHx8dD49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYoZjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7aWYoZj50aGlzLmxlbmd0aClmPXRoaXMubGVuZ3RoO2lmKGUubGVuZ3RoLXI8Zi10KXtmPWUubGVuZ3RoLXIrdH12YXIgbj1mLXQ7aWYodGhpcz09PWUmJnR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluPT09XCJmdW5jdGlvblwiKXt0aGlzLmNvcHlXaXRoaW4ocix0LGYpfWVsc2UgaWYodGhpcz09PWUmJnQ8ciYmcjxmKXtmb3IodmFyIGk9bi0xO2k+PTA7LS1pKXtlW2krcl09dGhpc1tpK3RdfX1lbHNle1VpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheSh0LGYpLHIpfXJldHVybiBufTtCdWZmZXIucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24gZmlsbChlLHIsdCxmKXtpZih0eXBlb2YgZT09PVwic3RyaW5nXCIpe2lmKHR5cGVvZiByPT09XCJzdHJpbmdcIil7Zj1yO3I9MDt0PXRoaXMubGVuZ3RofWVsc2UgaWYodHlwZW9mIHQ9PT1cInN0cmluZ1wiKXtmPXQ7dD10aGlzLmxlbmd0aH1pZihmIT09dW5kZWZpbmVkJiZ0eXBlb2YgZiE9PVwic3RyaW5nXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nXCIpfWlmKHR5cGVvZiBmPT09XCJzdHJpbmdcIiYmIUJ1ZmZlci5pc0VuY29kaW5nKGYpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZil9aWYoZS5sZW5ndGg9PT0xKXt2YXIgbj1lLmNoYXJDb2RlQXQoMCk7aWYoZj09PVwidXRmOFwiJiZuPDEyOHx8Zj09PVwibGF0aW4xXCIpe2U9bn19fWVsc2UgaWYodHlwZW9mIGU9PT1cIm51bWJlclwiKXtlPWUmMjU1fWVsc2UgaWYodHlwZW9mIGU9PT1cImJvb2xlYW5cIil7ZT1OdW1iZXIoZSl9aWYocjwwfHx0aGlzLmxlbmd0aDxyfHx0aGlzLmxlbmd0aDx0KXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKX1pZih0PD1yKXtyZXR1cm4gdGhpc31yPXI+Pj4wO3Q9dD09PXVuZGVmaW5lZD90aGlzLmxlbmd0aDp0Pj4+MDtpZighZSllPTA7dmFyIGk7aWYodHlwZW9mIGU9PT1cIm51bWJlclwiKXtmb3IoaT1yO2k8dDsrK2kpe3RoaXNbaV09ZX19ZWxzZXt2YXIgbz1CdWZmZXIuaXNCdWZmZXIoZSk/ZTpCdWZmZXIuZnJvbShlLGYpO3ZhciB1PW8ubGVuZ3RoO2lmKHU9PT0wKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInK2UrJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpfWZvcihpPTA7aTx0LXI7KytpKXt0aGlzW2krcl09b1tpJXVdfX1yZXR1cm4gdGhpc307dmFyIGE9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBiYXNlNjRjbGVhbihlKXtlPWUuc3BsaXQoXCI9XCIpWzBdO2U9ZS50cmltKCkucmVwbGFjZShhLFwiXCIpO2lmKGUubGVuZ3RoPDIpcmV0dXJuXCJcIjt3aGlsZShlLmxlbmd0aCU0IT09MCl7ZT1lK1wiPVwifXJldHVybiBlfWZ1bmN0aW9uIHV0ZjhUb0J5dGVzKGUscil7cj1yfHxJbmZpbml0eTt2YXIgdDt2YXIgZj1lLmxlbmd0aDt2YXIgbj1udWxsO3ZhciBpPVtdO2Zvcih2YXIgbz0wO288ZjsrK28pe3Q9ZS5jaGFyQ29kZUF0KG8pO2lmKHQ+NTUyOTUmJnQ8NTczNDQpe2lmKCFuKXtpZih0PjU2MzE5KXtpZigoci09Myk+LTEpaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lbHNlIGlmKG8rMT09PWYpe2lmKChyLT0zKT4tMSlpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfW49dDtjb250aW51ZX1pZih0PDU2MzIwKXtpZigoci09Myk+LTEpaS5wdXNoKDIzOSwxOTEsMTg5KTtuPXQ7Y29udGludWV9dD0obi01NTI5Njw8MTB8dC01NjMyMCkrNjU1MzZ9ZWxzZSBpZihuKXtpZigoci09Myk+LTEpaS5wdXNoKDIzOSwxOTEsMTg5KX1uPW51bGw7aWYodDwxMjgpe2lmKChyLT0xKTwwKWJyZWFrO2kucHVzaCh0KX1lbHNlIGlmKHQ8MjA0OCl7aWYoKHItPTIpPDApYnJlYWs7aS5wdXNoKHQ+PjZ8MTkyLHQmNjN8MTI4KX1lbHNlIGlmKHQ8NjU1MzYpe2lmKChyLT0zKTwwKWJyZWFrO2kucHVzaCh0Pj4xMnwyMjQsdD4+NiY2M3wxMjgsdCY2M3wxMjgpfWVsc2UgaWYodDwxMTE0MTEyKXtpZigoci09NCk8MClicmVhaztpLnB1c2godD4+MTh8MjQwLHQ+PjEyJjYzfDEyOCx0Pj42JjYzfDEyOCx0JjYzfDEyOCl9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIil9fXJldHVybiBpfWZ1bmN0aW9uIGFzY2lpVG9CeXRlcyhlKXt2YXIgcj1bXTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCl7ci5wdXNoKGUuY2hhckNvZGVBdCh0KSYyNTUpfXJldHVybiByfWZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzKGUscil7dmFyIHQsZixuO3ZhciBpPVtdO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKXtpZigoci09Mik8MClicmVhazt0PWUuY2hhckNvZGVBdChvKTtmPXQ+Pjg7bj10JTI1NjtpLnB1c2gobik7aS5wdXNoKGYpfXJldHVybiBpfWZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMoZSl7cmV0dXJuIGYudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oZSkpfWZ1bmN0aW9uIGJsaXRCdWZmZXIoZSxyLHQsZil7Zm9yKHZhciBuPTA7bjxmOysrbil7aWYobit0Pj1yLmxlbmd0aHx8bj49ZS5sZW5ndGgpYnJlYWs7cltuK3RdPWVbbl19cmV0dXJuIG59ZnVuY3Rpb24gaXNJbnN0YW5jZShlLHIpe3JldHVybiBlIGluc3RhbmNlb2Ygcnx8ZSE9bnVsbCYmZS5jb25zdHJ1Y3RvciE9bnVsbCYmZS5jb25zdHJ1Y3Rvci5uYW1lIT1udWxsJiZlLmNvbnN0cnVjdG9yLm5hbWU9PT1yLm5hbWV9ZnVuY3Rpb24gbnVtYmVySXNOYU4oZSl7cmV0dXJuIGUhPT1lfXZhciBzPWZ1bmN0aW9uKCl7dmFyIGU9XCIwMTIzNDU2Nzg5YWJjZGVmXCI7dmFyIHI9bmV3IEFycmF5KDI1Nik7Zm9yKHZhciB0PTA7dDwxNjsrK3Qpe3ZhciBmPXQqMTY7Zm9yKHZhciBuPTA7bjwxNjsrK24pe3JbZituXT1lW3RdK2Vbbl19fXJldHVybiByfSgpfSw3ODM6ZnVuY3Rpb24oZSxyKXtcbi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5yLnJlYWQ9ZnVuY3Rpb24oZSxyLHQsZixuKXt2YXIgaSxvO3ZhciB1PW4qOC1mLTE7dmFyIGE9KDE8PHUpLTE7dmFyIHM9YT4+MTt2YXIgaD0tNzt2YXIgYz10P24tMTowO3ZhciBsPXQ/LTE6MTt2YXIgcD1lW3IrY107Yys9bDtpPXAmKDE8PC1oKS0xO3A+Pj0taDtoKz11O2Zvcig7aD4wO2k9aSoyNTYrZVtyK2NdLGMrPWwsaC09OCl7fW89aSYoMTw8LWgpLTE7aT4+PS1oO2grPWY7Zm9yKDtoPjA7bz1vKjI1NitlW3IrY10sYys9bCxoLT04KXt9aWYoaT09PTApe2k9MS1zfWVsc2UgaWYoaT09PWEpe3JldHVybiBvP05hTjoocD8tMToxKSpJbmZpbml0eX1lbHNle289bytNYXRoLnBvdygyLGYpO2k9aS1zfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixpLWYpfTtyLndyaXRlPWZ1bmN0aW9uKGUscix0LGYsbixpKXt2YXIgbyx1LGE7dmFyIHM9aSo4LW4tMTt2YXIgaD0oMTw8cyktMTt2YXIgYz1oPj4xO3ZhciBsPW49PT0yMz9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjA7dmFyIHA9Zj8wOmktMTt2YXIgeT1mPzE6LTE7dmFyIGc9cjwwfHxyPT09MCYmMS9yPDA/MTowO3I9TWF0aC5hYnMocik7aWYoaXNOYU4ocil8fHI9PT1JbmZpbml0eSl7dT1pc05hTihyKT8xOjA7bz1ofWVsc2V7bz1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4yKTtpZihyKihhPU1hdGgucG93KDIsLW8pKTwxKXtvLS07YSo9Mn1pZihvK2M+PTEpe3IrPWwvYX1lbHNle3IrPWwqTWF0aC5wb3coMiwxLWMpfWlmKHIqYT49Mil7bysrO2EvPTJ9aWYobytjPj1oKXt1PTA7bz1ofWVsc2UgaWYobytjPj0xKXt1PShyKmEtMSkqTWF0aC5wb3coMixuKTtvPW8rY31lbHNle3U9cipNYXRoLnBvdygyLGMtMSkqTWF0aC5wb3coMixuKTtvPTB9fWZvcig7bj49ODtlW3QrcF09dSYyNTUscCs9eSx1Lz0yNTYsbi09OCl7fW89bzw8bnx1O3MrPW47Zm9yKDtzPjA7ZVt0K3BdPW8mMjU1LHArPXksby89MjU2LHMtPTgpe31lW3QrcC15XXw9ZyoxMjh9fX07dmFyIHI9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyh0KXt2YXIgZj1yW3RdO2lmKGYhPT11bmRlZmluZWQpe3JldHVybiBmLmV4cG9ydHN9dmFyIG49clt0XT17ZXhwb3J0czp7fX07dmFyIGk9dHJ1ZTt0cnl7ZVt0XShuLG4uZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtpPWZhbHNlfWZpbmFsbHl7aWYoaSlkZWxldGUgclt0XX1yZXR1cm4gbi5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgdD1fX25jY3dwY2tfcmVxdWlyZV9fKDcyKTttb2R1bGUuZXhwb3J0cz10fSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/buffer/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js": +/*!************************************************************!*\ + !*** ./node_modules/next/dist/compiled/process/browser.js ***! + \************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={229:function(e){var t=e.exports={};var r;var n;function defaultSetTimout(){throw new Error(\"setTimeout has not been defined\")}function defaultClearTimeout(){throw new Error(\"clearTimeout has not been defined\")}(function(){try{if(typeof setTimeout===\"function\"){r=setTimeout}else{r=defaultSetTimout}}catch(e){r=defaultSetTimout}try{if(typeof clearTimeout===\"function\"){n=clearTimeout}else{n=defaultClearTimeout}}catch(e){n=defaultClearTimeout}})();function runTimeout(e){if(r===setTimeout){return setTimeout(e,0)}if((r===defaultSetTimout||!r)&&setTimeout){r=setTimeout;return setTimeout(e,0)}try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}function runClearTimeout(e){if(n===clearTimeout){return clearTimeout(e)}if((n===defaultClearTimeout||!n)&&clearTimeout){n=clearTimeout;return clearTimeout(e)}try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}var i=[];var o=false;var u;var a=-1;function cleanUpNextTick(){if(!o||!u){return}o=false;if(u.length){i=u.concat(i)}else{a=-1}if(i.length){drainQueue()}}function drainQueue(){if(o){return}var e=runTimeout(cleanUpNextTick);o=true;var t=i.length;while(t){u=i;i=[];while(++a<t){if(u){u[a].run()}}a=-1;t=i.length}u=null;o=false;runClearTimeout(e)}t.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1){for(var r=1;r<arguments.length;r++){t[r-1]=arguments[r]}}i.push(new Item(e,t));if(i.length===1&&!o){runTimeout(drainQueue)}};function Item(e,t){this.fun=e;this.array=t}Item.prototype.run=function(){this.fun.apply(null,this.array)};t.title=\"browser\";t.browser=true;t.env={};t.argv=[];t.version=\"\";t.versions={};function noop(){}t.on=noop;t.addListener=noop;t.once=noop;t.off=noop;t.removeListener=noop;t.removeAllListeners=noop;t.emit=noop;t.prependListener=noop;t.prependOnceListener=noop;t.listeners=function(e){return[]};t.binding=function(e){throw new Error(\"process.binding is not supported\")};t.cwd=function(){return\"/\"};t.chdir=function(e){throw new Error(\"process.chdir is not supported\")};t.umask=function(){return 0}}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var i=t[r]={exports:{}};var o=true;try{e[r](i,i.exports,__nccwpck_require__);o=false}finally{if(o)delete t[r]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r=__nccwpck_require__(229);module.exports=r})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcHJvY2Vzcy9icm93c2VyLmpzIiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLE9BQU8sZ0JBQWdCLG1CQUFtQixNQUFNLE1BQU0sNEJBQTRCLG1EQUFtRCwrQkFBK0IscURBQXFELFlBQVksSUFBSSxtQ0FBbUMsYUFBYSxLQUFLLG9CQUFvQixTQUFTLG1CQUFtQixJQUFJLHFDQUFxQyxlQUFlLEtBQUssdUJBQXVCLFNBQVMsdUJBQXVCLElBQUksdUJBQXVCLG1CQUFtQix1QkFBdUIsMkNBQTJDLGFBQWEsdUJBQXVCLElBQUksY0FBYyxTQUFTLElBQUksd0JBQXdCLFNBQVMsMEJBQTBCLDRCQUE0QixxQkFBcUIsdUJBQXVCLGdEQUFnRCxlQUFlLHVCQUF1QixJQUFJLFlBQVksU0FBUyxJQUFJLHNCQUFzQixTQUFTLHdCQUF3QixTQUFTLFlBQVksTUFBTSxTQUFTLDJCQUEyQixXQUFXLE9BQU8sUUFBUSxhQUFhLGNBQWMsS0FBSyxLQUFLLGFBQWEsY0FBYyxzQkFBc0IsTUFBTSxPQUFPLGtDQUFrQyxPQUFPLGVBQWUsU0FBUyxJQUFJLEtBQUssYUFBYSxNQUFNLFlBQVksS0FBSyxXQUFXLE9BQU8sUUFBUSxtQkFBbUIsdUJBQXVCLG9DQUFvQyx1QkFBdUIsWUFBWSxtQkFBbUIsS0FBSyxxQkFBcUIsc0JBQXNCLHFCQUFxQix5QkFBeUIsbUJBQW1CLFdBQVcsYUFBYSw4QkFBOEIsaUNBQWlDLGtCQUFrQixlQUFlLFNBQVMsVUFBVSxhQUFhLGNBQWMsaUJBQWlCLFVBQVUsbUJBQW1CLFlBQVksV0FBVyxzQkFBc0IsMEJBQTBCLFlBQVksdUJBQXVCLDJCQUEyQix3QkFBd0IsVUFBVSxzQkFBc0IscURBQXFELGlCQUFpQixXQUFXLG9CQUFvQixtREFBbUQsbUJBQW1CLFlBQVksU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUksc0NBQXNDLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLG1FQUFtRSxTQUFTLEtBQUssK0JBQStCLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3Byb2Nlc3MvYnJvd3Nlci5qcz8yMjI0Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe3ZhciBlPXsyMjk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5leHBvcnRzPXt9O3ZhciByO3ZhciBuO2Z1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQoKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9KGZ1bmN0aW9uKCl7dHJ5e2lmKHR5cGVvZiBzZXRUaW1lb3V0PT09XCJmdW5jdGlvblwiKXtyPXNldFRpbWVvdXR9ZWxzZXtyPWRlZmF1bHRTZXRUaW1vdXR9fWNhdGNoKGUpe3I9ZGVmYXVsdFNldFRpbW91dH10cnl7aWYodHlwZW9mIGNsZWFyVGltZW91dD09PVwiZnVuY3Rpb25cIil7bj1jbGVhclRpbWVvdXR9ZWxzZXtuPWRlZmF1bHRDbGVhclRpbWVvdXR9fWNhdGNoKGUpe249ZGVmYXVsdENsZWFyVGltZW91dH19KSgpO2Z1bmN0aW9uIHJ1blRpbWVvdXQoZSl7aWYocj09PXNldFRpbWVvdXQpe3JldHVybiBzZXRUaW1lb3V0KGUsMCl9aWYoKHI9PT1kZWZhdWx0U2V0VGltb3V0fHwhcikmJnNldFRpbWVvdXQpe3I9c2V0VGltZW91dDtyZXR1cm4gc2V0VGltZW91dChlLDApfXRyeXtyZXR1cm4gcihlLDApfWNhdGNoKHQpe3RyeXtyZXR1cm4gci5jYWxsKG51bGwsZSwwKX1jYXRjaCh0KXtyZXR1cm4gci5jYWxsKHRoaXMsZSwwKX19fWZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChlKXtpZihuPT09Y2xlYXJUaW1lb3V0KXtyZXR1cm4gY2xlYXJUaW1lb3V0KGUpfWlmKChuPT09ZGVmYXVsdENsZWFyVGltZW91dHx8IW4pJiZjbGVhclRpbWVvdXQpe249Y2xlYXJUaW1lb3V0O3JldHVybiBjbGVhclRpbWVvdXQoZSl9dHJ5e3JldHVybiBuKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIG4uY2FsbCh0aGlzLGUpfX19dmFyIGk9W107dmFyIG89ZmFsc2U7dmFyIHU7dmFyIGE9LTE7ZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCl7aWYoIW98fCF1KXtyZXR1cm59bz1mYWxzZTtpZih1Lmxlbmd0aCl7aT11LmNvbmNhdChpKX1lbHNle2E9LTF9aWYoaS5sZW5ndGgpe2RyYWluUXVldWUoKX19ZnVuY3Rpb24gZHJhaW5RdWV1ZSgpe2lmKG8pe3JldHVybn12YXIgZT1ydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7bz10cnVlO3ZhciB0PWkubGVuZ3RoO3doaWxlKHQpe3U9aTtpPVtdO3doaWxlKCsrYTx0KXtpZih1KXt1W2FdLnJ1bigpfX1hPS0xO3Q9aS5sZW5ndGh9dT1udWxsO289ZmFsc2U7cnVuQ2xlYXJUaW1lb3V0KGUpfXQubmV4dFRpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt0W3ItMV09YXJndW1lbnRzW3JdfX1pLnB1c2gobmV3IEl0ZW0oZSx0KSk7aWYoaS5sZW5ndGg9PT0xJiYhbyl7cnVuVGltZW91dChkcmFpblF1ZXVlKX19O2Z1bmN0aW9uIEl0ZW0oZSx0KXt0aGlzLmZ1bj1lO3RoaXMuYXJyYXk9dH1JdGVtLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfTt0LnRpdGxlPVwiYnJvd3NlclwiO3QuYnJvd3Nlcj10cnVlO3QuZW52PXt9O3QuYXJndj1bXTt0LnZlcnNpb249XCJcIjt0LnZlcnNpb25zPXt9O2Z1bmN0aW9uIG5vb3AoKXt9dC5vbj1ub29wO3QuYWRkTGlzdGVuZXI9bm9vcDt0Lm9uY2U9bm9vcDt0Lm9mZj1ub29wO3QucmVtb3ZlTGlzdGVuZXI9bm9vcDt0LnJlbW92ZUFsbExpc3RlbmVycz1ub29wO3QuZW1pdD1ub29wO3QucHJlcGVuZExpc3RlbmVyPW5vb3A7dC5wcmVwZW5kT25jZUxpc3RlbmVyPW5vb3A7dC5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuW119O3QuYmluZGluZz1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX07dC5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn07dC5jaGRpcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9O3QudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19fTt2YXIgdD17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKHIpe3ZhciBuPXRbcl07aWYobiE9PXVuZGVmaW5lZCl7cmV0dXJuIG4uZXhwb3J0c312YXIgaT10W3JdPXtleHBvcnRzOnt9fTt2YXIgbz10cnVlO3RyeXtlW3JdKGksaS5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO289ZmFsc2V9ZmluYWxseXtpZihvKWRlbGV0ZSB0W3JdfXJldHVybiBpLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciByPV9fbmNjd3Bja19yZXF1aXJlX18oMjI5KTttb2R1bGUuZXhwb3J0cz1yfSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/process/browser.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./app/page.tsx": +/*!**********************!*\ + !*** ./app/page.tsx ***! + \**********************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Home; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ClickHouseForm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ClickHouseForm */ \"(app-pages-browser)/./components/ClickHouseForm.tsx\");\n/* harmony import */ var _components_FlatFileForm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/FlatFileForm */ \"(app-pages-browser)/./components/FlatFileForm.tsx\");\n/* harmony import */ var _components_TableSelection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/TableSelection */ \"(app-pages-browser)/./components/TableSelection.tsx\");\n/* harmony import */ var _components_DataPreview__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/DataPreview */ \"(app-pages-browser)/./components/DataPreview.tsx\");\n/* harmony import */ var _components_IngestionResults__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/IngestionResults */ \"(app-pages-browser)/./components/IngestionResults.tsx\");\n/* harmony import */ var _components_StatusIndicator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/StatusIndicator */ \"(app-pages-browser)/./components/StatusIndicator.tsx\");\n/* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/lib/api */ \"(app-pages-browser)/./lib/api.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\n\n\nvar Step;\n// Step enum\n(function(Step) {\n Step[Step[\"SourceSelection\"] = 1] = \"SourceSelection\";\n Step[Step[\"SourceConfiguration\"] = 2] = \"SourceConfiguration\";\n Step[Step[\"TargetConfiguration\"] = 3] = \"TargetConfiguration\";\n Step[Step[\"SchemaSelection\"] = 4] = \"SchemaSelection\";\n Step[Step[\"Preview\"] = 5] = \"Preview\";\n Step[Step[\"Results\"] = 6] = \"Results\";\n})(Step || (Step = {}));\nfunction Home() {\n _s();\n // State\n const [currentStep, setCurrentStep] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(1);\n const [source, setSource] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [target, setTarget] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [clickHouseConfig, setClickHouseConfig] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n host: \"\",\n port: 8123,\n database: \"\",\n user: \"\",\n jwtToken: \"\",\n secure: false\n });\n const [flatFileConfig, setFlatFileConfig] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n delimiter: \",\",\n hasHeader: true,\n filePath: \"\",\n fileName: \"\"\n });\n const [tables, setTables] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [joinCondition, setJoinCondition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [useJoin, setUseJoin] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [previewData, setPreviewData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [isLoading, setIsLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [ingestionResults, setIngestionResults] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"idle\");\n const [statusMessage, setStatusMessage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // Effect to track status changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (isLoading) {\n if (currentStep === 2 || currentStep === 3) {\n setStatus(\"connecting\");\n setStatusMessage(\"Connecting to the data source...\");\n } else if (currentStep === 4) {\n setStatus(\"fetching\");\n setStatusMessage(\"Fetching schema information...\");\n } else if (currentStep === 5) {\n setStatus(\"fetching\");\n setStatusMessage(\"Generating data preview...\");\n } else if (currentStep === 6) {\n setStatus(\"ingesting\");\n setStatusMessage(\"Ingesting data between sources...\");\n }\n } else if (error) {\n setStatus(\"error\");\n setStatusMessage(error);\n } else if (currentStep === 6 && ingestionResults) {\n setStatus(\"completed\");\n setStatusMessage(ingestionResults.message || \"Operation completed successfully\");\n } else {\n setStatus(\"idle\");\n setStatusMessage(\"\");\n }\n }, [\n isLoading,\n error,\n currentStep,\n ingestionResults\n ]);\n // Handlers\n const handleSourceSelection = (selectedSource)=>{\n setSource(selectedSource);\n setTarget(selectedSource === \"clickhouse\" ? \"flatfile\" : \"clickhouse\");\n setCurrentStep(2);\n };\n const handleClickHouseConfigSubmit = async (config)=>{\n try {\n setIsLoading(true);\n setError(\"\");\n // Test connection\n const testResult = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].testClickHouseConnection(config);\n if (!testResult.success) {\n throw new Error(testResult.message);\n }\n // Save config\n setClickHouseConfig(config);\n // If ClickHouse is the source, fetch tables\n if (source === \"clickhouse\") {\n const tables = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getClickHouseTables(config);\n setTables(tables);\n setCurrentStep(4);\n } else {\n // ClickHouse is the target\n setCurrentStep(3);\n }\n } catch (err) {\n setError(err.message || \"Failed to connect to ClickHouse\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleFlatFileConfigSubmit = async (config, file)=>{\n try {\n setIsLoading(true);\n setError(\"\");\n // If file upload is required (when flat file is the source)\n if (source === \"flatfile\" && file) {\n const uploadResult = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].uploadFile(file, config.delimiter, config.hasHeader);\n if (!uploadResult.success) {\n throw new Error(uploadResult.message);\n }\n // Set config with file path\n setFlatFileConfig({\n ...config,\n filePath: uploadResult.filePath\n });\n // Set schema information\n setTables([\n uploadResult.schema\n ]);\n setCurrentStep(4);\n } else {\n // Just store the config (flat file is the target)\n setFlatFileConfig(config);\n setCurrentStep(source === \"clickhouse\" ? 4 : 3);\n }\n } catch (err) {\n setError(err.message || \"Failed to process flat file\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleTableSelection = (selectedTables, useJoinOption, joinConditionText)=>{\n setTables(selectedTables);\n setUseJoin(useJoinOption);\n setJoinCondition(joinConditionText);\n setCurrentStep(5);\n // Generate a preview\n generatePreview(selectedTables, useJoinOption, joinConditionText);\n };\n const generatePreview = async (selectedTables, useJoinOption, joinConditionText)=>{\n try {\n setIsLoading(true);\n setError(\"\");\n const request = {\n source: source,\n target: target,\n clickHouseConfig: source === \"clickhouse\" ? clickHouseConfig : target === \"clickhouse\" ? clickHouseConfig : undefined,\n flatFileConfig: source === \"flatfile\" ? flatFileConfig : target === \"flatfile\" ? flatFileConfig : undefined,\n tables: selectedTables,\n joinCondition: joinConditionText,\n useJoin: useJoinOption\n };\n const previewResult = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].previewData(request);\n if (!previewResult.success) {\n throw new Error(previewResult.message);\n }\n setPreviewData(previewResult.data);\n } catch (err) {\n setError(err.message || \"Failed to generate preview\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleStartIngestion = async ()=>{\n try {\n setIsLoading(true);\n setError(\"\");\n const request = {\n source: source,\n target: target,\n clickHouseConfig: source === \"clickhouse\" ? clickHouseConfig : target === \"clickhouse\" ? clickHouseConfig : undefined,\n flatFileConfig: source === \"flatfile\" ? flatFileConfig : target === \"flatfile\" ? flatFileConfig : undefined,\n tables,\n joinCondition,\n useJoin\n };\n const response = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].ingestData(request);\n setIngestionResults(response);\n setCurrentStep(6);\n } catch (err) {\n setError(err.message || \"Ingestion failed\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleReset = ()=>{\n setCurrentStep(1);\n setSource(\"\");\n setTarget(\"\");\n setTables([]);\n setJoinCondition(\"\");\n setUseJoin(false);\n setPreviewData([]);\n setIngestionResults(null);\n setError(\"\");\n };\n // Helper functions for the UI\n const getStepName = (step)=>{\n switch(step){\n case 1:\n return \"Source Selection\";\n case 2:\n return \"Source Config\";\n case 3:\n return \"Target Config\";\n case 4:\n return \"Column Selection\";\n case 5:\n return \"Preview\";\n case 6:\n return \"Results\";\n default:\n return \"\";\n }\n };\n // Function to check if a step is accessible for navigation\n const canNavigateToStep = (step)=>{\n // Always allow going to initial step\n if (step === 1) return true;\n // Don't allow going back to completed steps after results\n if (currentStep === 6) return false;\n // Only allow going to steps that have been completed or are the current one\n if (step <= currentStep) return true;\n return false;\n };\n // Function to handle step navigation when clicking on the progress indicator\n const handleStepClick = (step)=>{\n if (!canNavigateToStep(step)) return;\n // If loading, don't allow navigation\n if (isLoading) return;\n setCurrentStep(step);\n };\n // Render different steps\n const renderStep = ()=>{\n switch(currentStep){\n case 1:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-semibold mb-6\",\n children: \"Select Data Source and Target\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 267,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col space-y-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 gap-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"btn \".concat(source === \"clickhouse\" ? \"btn-primary\" : \"btn-secondary\", \" p-6 text-center transition-all transform hover:scale-105\"),\n onClick: ()=>handleSourceSelection(\"clickhouse\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center mb-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-10 w-10\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 276,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 275,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 274,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium\",\n children: \"ClickHouse to Flat File\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 279,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm opacity-90\",\n children: \"Export data from ClickHouse database to a flat file (CSV)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 280,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 270,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"btn \".concat(source === \"flatfile\" ? \"btn-primary\" : \"btn-secondary\", \" p-6 text-center transition-all transform hover:scale-105\"),\n onClick: ()=>handleSourceSelection(\"flatfile\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center mb-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-10 w-10\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 288,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 287,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 286,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium\",\n children: \"Flat File to ClickHouse\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 291,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm opacity-90\",\n children: \"Import data from a flat file (CSV) to ClickHouse database\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 292,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 282,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 269,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 268,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 266,\n columnNumber: 11\n }, this);\n case 2:\n return source === \"clickhouse\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ClickHouseForm__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onSubmit: handleClickHouseConfigSubmit,\n initialValues: clickHouseConfig,\n isLoading: isLoading,\n title: \"ClickHouse Source Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 301,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_FlatFileForm__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onSubmit: handleFlatFileConfigSubmit,\n initialValues: flatFileConfig,\n requireFile: true,\n isLoading: isLoading,\n title: \"Flat File Source Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 308,\n columnNumber: 11\n }, this);\n case 3:\n return target === \"clickhouse\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ClickHouseForm__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onSubmit: handleClickHouseConfigSubmit,\n initialValues: clickHouseConfig,\n isLoading: isLoading,\n title: \"ClickHouse Target Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 319,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_FlatFileForm__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onSubmit: handleFlatFileConfigSubmit,\n initialValues: flatFileConfig,\n requireFile: false,\n isLoading: isLoading,\n title: \"Flat File Target Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 326,\n columnNumber: 11\n }, this);\n case 4:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_TableSelection__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n tables: tables,\n onSubmit: handleTableSelection,\n isMultiTableEnabled: source === \"clickhouse\",\n isLoading: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 337,\n columnNumber: 11\n }, this);\n case 5:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_DataPreview__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n data: previewData,\n onStartIngestion: handleStartIngestion,\n onBack: ()=>setCurrentStep(4),\n isLoading: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 347,\n columnNumber: 11\n }, this);\n case 6:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_IngestionResults__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n results: ingestionResults,\n onReset: handleReset\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 357,\n columnNumber: 11\n }, this);\n default:\n return null;\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ol\", {\n className: \"flex items-center justify-center w-full\",\n children: Object.values(Step).filter((step)=>typeof step === \"number\").map((step)=>{\n const isNavigable = canNavigateToStep(step);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n className: \"flex items-center \".concat(currentStep >= step ? \"text-primary\" : \"text-gray-400\"),\n onClick: ()=>handleStepClick(step),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center \".concat(isNavigable ? \"cursor-pointer hover:opacity-80\" : \"\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"flex items-center justify-center w-10 h-10 rounded-full \".concat(currentStep > step ? \"bg-primary text-white\" : currentStep === step ? \"bg-primary text-white ring-4 ring-blue-100\" : \"bg-gray-200\"),\n children: step\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 382,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs mt-1\",\n children: getStepName(step)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 389,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 381,\n columnNumber: 17\n }, this),\n step < Object.keys(Step).length / 2 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-16 h-1 mx-2 \".concat(currentStep > step ? \"bg-primary\" : \"bg-gray-200\")\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 392,\n columnNumber: 19\n }, this)\n ]\n }, step, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 376,\n columnNumber: 15\n }, this);\n })\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 372,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 371,\n columnNumber: 7\n }, this),\n (status !== \"idle\" || error) && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_StatusIndicator__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n status: status,\n message: statusMessage\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 402,\n columnNumber: 9\n }, this),\n renderStep()\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 369,\n columnNumber: 5\n }, this);\n}\n_s(Home, \"1YAHeoQoOxxhtMLvb4mWoq9VlR0=\");\n_c = Home;\nvar _c;\n$RefreshReg$(_c, \"Home\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBRTRDO0FBQ2E7QUFDSjtBQUNJO0FBQ047QUFDVTtBQUNGO0FBQ3VEOztBQUVsSCxZQUFZO1VBQ1BTOzs7Ozs7O0dBQUFBLFNBQUFBO0FBU1UsU0FBU0M7O0lBQ3RCLFFBQVE7SUFDUixNQUFNLENBQUNDLGFBQWFDLGVBQWUsR0FBR1osK0NBQVFBO0lBQzlDLE1BQU0sQ0FBQ2EsUUFBUUMsVUFBVSxHQUFHZCwrQ0FBUUEsQ0FBaUM7SUFDckUsTUFBTSxDQUFDZSxRQUFRQyxVQUFVLEdBQUdoQiwrQ0FBUUEsQ0FBaUM7SUFDckUsTUFBTSxDQUFDaUIsa0JBQWtCQyxvQkFBb0IsR0FBR2xCLCtDQUFRQSxDQUFtQjtRQUN6RW1CLE1BQU07UUFDTkMsTUFBTTtRQUNOQyxVQUFVO1FBQ1ZDLE1BQU07UUFDTkMsVUFBVTtRQUNWQyxRQUFRO0lBQ1Y7SUFDQSxNQUFNLENBQUNDLGdCQUFnQkMsa0JBQWtCLEdBQUcxQiwrQ0FBUUEsQ0FBaUI7UUFDbkUyQixXQUFXO1FBQ1hDLFdBQVc7UUFDWEMsVUFBVTtRQUNWQyxVQUFVO0lBQ1o7SUFDQSxNQUFNLENBQUNDLFFBQVFDLFVBQVUsR0FBR2hDLCtDQUFRQSxDQUFjLEVBQUU7SUFDcEQsTUFBTSxDQUFDaUMsZUFBZUMsaUJBQWlCLEdBQUdsQywrQ0FBUUEsQ0FBUztJQUMzRCxNQUFNLENBQUNtQyxTQUFTQyxXQUFXLEdBQUdwQywrQ0FBUUEsQ0FBVTtJQUNoRCxNQUFNLENBQUNxQyxhQUFhQyxlQUFlLEdBQUd0QywrQ0FBUUEsQ0FBYSxFQUFFO0lBQzdELE1BQU0sQ0FBQ3VDLFdBQVdDLGFBQWEsR0FBR3hDLCtDQUFRQSxDQUFVO0lBQ3BELE1BQU0sQ0FBQ3lDLE9BQU9DLFNBQVMsR0FBRzFDLCtDQUFRQSxDQUFTO0lBQzNDLE1BQU0sQ0FBQzJDLGtCQUFrQkMsb0JBQW9CLEdBQUc1QywrQ0FBUUEsQ0FBMkI7SUFDbkYsTUFBTSxDQUFDNkMsUUFBUUMsVUFBVSxHQUFHOUMsK0NBQVFBLENBQTJFO0lBQy9HLE1BQU0sQ0FBQytDLGVBQWVDLGlCQUFpQixHQUFHaEQsK0NBQVFBLENBQVM7SUFFM0QsaUNBQWlDO0lBQ2pDQyxnREFBU0EsQ0FBQztRQUNSLElBQUlzQyxXQUFXO1lBQ2IsSUFBSTVCLHFCQUE0Q0EsbUJBQTBDO2dCQUN4Rm1DLFVBQVU7Z0JBQ1ZFLGlCQUFpQjtZQUNuQixPQUFPLElBQUlyQyxtQkFBc0M7Z0JBQy9DbUMsVUFBVTtnQkFDVkUsaUJBQWlCO1lBQ25CLE9BQU8sSUFBSXJDLG1CQUE4QjtnQkFDdkNtQyxVQUFVO2dCQUNWRSxpQkFBaUI7WUFDbkIsT0FBTyxJQUFJckMsbUJBQThCO2dCQUN2Q21DLFVBQVU7Z0JBQ1ZFLGlCQUFpQjtZQUNuQjtRQUNGLE9BQU8sSUFBSVAsT0FBTztZQUNoQkssVUFBVTtZQUNWRSxpQkFBaUJQO1FBQ25CLE9BQU8sSUFBSTlCLHFCQUFnQ2dDLGtCQUFrQjtZQUMzREcsVUFBVTtZQUNWRSxpQkFBaUJMLGlCQUFpQk0sT0FBTyxJQUFJO1FBQy9DLE9BQU87WUFDTEgsVUFBVTtZQUNWRSxpQkFBaUI7UUFDbkI7SUFDRixHQUFHO1FBQUNUO1FBQVdFO1FBQU85QjtRQUFhZ0M7S0FBaUI7SUFFcEQsV0FBVztJQUNYLE1BQU1PLHdCQUF3QixDQUFDQztRQUM3QnJDLFVBQVVxQztRQUNWbkMsVUFBVW1DLG1CQUFtQixlQUFlLGFBQWE7UUFDekR2QztJQUNGO0lBRUEsTUFBTXdDLCtCQUErQixPQUFPQztRQUMxQyxJQUFJO1lBQ0ZiLGFBQWE7WUFDYkUsU0FBUztZQUVULGtCQUFrQjtZQUNsQixNQUFNWSxhQUFhLE1BQU05QyxnREFBR0EsQ0FBQytDLHdCQUF3QixDQUFDRjtZQUN0RCxJQUFJLENBQUNDLFdBQVdFLE9BQU8sRUFBRTtnQkFDdkIsTUFBTSxJQUFJQyxNQUFNSCxXQUFXTCxPQUFPO1lBQ3BDO1lBRUEsY0FBYztZQUNkL0Isb0JBQW9CbUM7WUFFcEIsNENBQTRDO1lBQzVDLElBQUl4QyxXQUFXLGNBQWM7Z0JBQzNCLE1BQU1rQixTQUFTLE1BQU12QixnREFBR0EsQ0FBQ2tELG1CQUFtQixDQUFDTDtnQkFDN0NyQixVQUFVRDtnQkFDVm5CO1lBQ0YsT0FBTztnQkFDTCwyQkFBMkI7Z0JBQzNCQTtZQUNGO1FBQ0YsRUFBRSxPQUFPK0MsS0FBVTtZQUNqQmpCLFNBQVNpQixJQUFJVixPQUFPLElBQUk7UUFDMUIsU0FBVTtZQUNSVCxhQUFhO1FBQ2Y7SUFDRjtJQUVBLE1BQU1vQiw2QkFBNkIsT0FBT1AsUUFBd0JRO1FBQ2hFLElBQUk7WUFDRnJCLGFBQWE7WUFDYkUsU0FBUztZQUVULDREQUE0RDtZQUM1RCxJQUFJN0IsV0FBVyxjQUFjZ0QsTUFBTTtnQkFDakMsTUFBTUMsZUFBZSxNQUFNdEQsZ0RBQUdBLENBQUN1RCxVQUFVLENBQUNGLE1BQU1SLE9BQU8xQixTQUFTLEVBQUUwQixPQUFPekIsU0FBUztnQkFDbEYsSUFBSSxDQUFDa0MsYUFBYU4sT0FBTyxFQUFFO29CQUN6QixNQUFNLElBQUlDLE1BQU1LLGFBQWFiLE9BQU87Z0JBQ3RDO2dCQUVBLDRCQUE0QjtnQkFDNUJ2QixrQkFBa0I7b0JBQ2hCLEdBQUcyQixNQUFNO29CQUNUeEIsVUFBVWlDLGFBQWFqQyxRQUFRO2dCQUNqQztnQkFFQSx5QkFBeUI7Z0JBQ3pCRyxVQUFVO29CQUFDOEIsYUFBYUUsTUFBTTtpQkFBQztnQkFDL0JwRDtZQUNGLE9BQU87Z0JBQ0wsa0RBQWtEO2dCQUNsRGMsa0JBQWtCMkI7Z0JBQ2xCekMsZUFBZUMsV0FBVztZQUM1QjtRQUNGLEVBQUUsT0FBTzhDLEtBQVU7WUFDakJqQixTQUFTaUIsSUFBSVYsT0FBTyxJQUFJO1FBQzFCLFNBQVU7WUFDUlQsYUFBYTtRQUNmO0lBQ0Y7SUFFQSxNQUFNeUIsdUJBQXVCLENBQUNDLGdCQUE2QkMsZUFBd0JDO1FBQ2pGcEMsVUFBVWtDO1FBQ1Y5QixXQUFXK0I7UUFDWGpDLGlCQUFpQmtDO1FBQ2pCeEQ7UUFFQSxxQkFBcUI7UUFDckJ5RCxnQkFBZ0JILGdCQUFnQkMsZUFBZUM7SUFDakQ7SUFFQSxNQUFNQyxrQkFBa0IsT0FBT0gsZ0JBQTZCQyxlQUF3QkM7UUFDbEYsSUFBSTtZQUNGNUIsYUFBYTtZQUNiRSxTQUFTO1lBRVQsTUFBTTRCLFVBQTRCO2dCQUNoQ3pELFFBQVFBO2dCQUNSRSxRQUFRQTtnQkFDUkUsa0JBQWtCSixXQUFXLGVBQWVJLG1CQUFtQkYsV0FBVyxlQUFlRSxtQkFBbUJzRDtnQkFDNUc5QyxnQkFBZ0JaLFdBQVcsYUFBYVksaUJBQWlCVixXQUFXLGFBQWFVLGlCQUFpQjhDO2dCQUNsR3hDLFFBQVFtQztnQkFDUmpDLGVBQWVtQztnQkFDZmpDLFNBQVNnQztZQUNYO1lBRUEsTUFBTUssZ0JBQWdCLE1BQU1oRSxnREFBR0EsQ0FBQzZCLFdBQVcsQ0FBQ2lDO1lBQzVDLElBQUksQ0FBQ0UsY0FBY2hCLE9BQU8sRUFBRTtnQkFDMUIsTUFBTSxJQUFJQyxNQUFNZSxjQUFjdkIsT0FBTztZQUN2QztZQUVBWCxlQUFla0MsY0FBY0MsSUFBSTtRQUNuQyxFQUFFLE9BQU9kLEtBQVU7WUFDakJqQixTQUFTaUIsSUFBSVYsT0FBTyxJQUFJO1FBQzFCLFNBQVU7WUFDUlQsYUFBYTtRQUNmO0lBQ0Y7SUFFQSxNQUFNa0MsdUJBQXVCO1FBQzNCLElBQUk7WUFDRmxDLGFBQWE7WUFDYkUsU0FBUztZQUVULE1BQU00QixVQUE0QjtnQkFDaEN6RCxRQUFRQTtnQkFDUkUsUUFBUUE7Z0JBQ1JFLGtCQUFrQkosV0FBVyxlQUFlSSxtQkFBbUJGLFdBQVcsZUFBZUUsbUJBQW1Cc0Q7Z0JBQzVHOUMsZ0JBQWdCWixXQUFXLGFBQWFZLGlCQUFpQlYsV0FBVyxhQUFhVSxpQkFBaUI4QztnQkFDbEd4QztnQkFDQUU7Z0JBQ0FFO1lBQ0Y7WUFFQSxNQUFNd0MsV0FBVyxNQUFNbkUsZ0RBQUdBLENBQUNvRSxVQUFVLENBQUNOO1lBQ3RDMUIsb0JBQW9CK0I7WUFDcEIvRDtRQUNGLEVBQUUsT0FBTytDLEtBQVU7WUFDakJqQixTQUFTaUIsSUFBSVYsT0FBTyxJQUFJO1FBQzFCLFNBQVU7WUFDUlQsYUFBYTtRQUNmO0lBQ0Y7SUFFQSxNQUFNcUMsY0FBYztRQUNsQmpFO1FBQ0FFLFVBQVU7UUFDVkUsVUFBVTtRQUNWZ0IsVUFBVSxFQUFFO1FBQ1pFLGlCQUFpQjtRQUNqQkUsV0FBVztRQUNYRSxlQUFlLEVBQUU7UUFDakJNLG9CQUFvQjtRQUNwQkYsU0FBUztJQUNYO0lBRUEsOEJBQThCO0lBQzlCLE1BQU1vQyxjQUFjLENBQUNDO1FBQ25CLE9BQVFBO1lBQ047Z0JBQTJCLE9BQU87WUFDbEM7Z0JBQStCLE9BQU87WUFDdEM7Z0JBQStCLE9BQU87WUFDdEM7Z0JBQTJCLE9BQU87WUFDbEM7Z0JBQW1CLE9BQU87WUFDMUI7Z0JBQW1CLE9BQU87WUFDMUI7Z0JBQVMsT0FBTztRQUNsQjtJQUNGO0lBRUEsMkRBQTJEO0lBQzNELE1BQU1DLG9CQUFvQixDQUFDRDtRQUN6QixxQ0FBcUM7UUFDckMsSUFBSUEsWUFBK0IsT0FBTztRQUUxQywwREFBMEQ7UUFDMUQsSUFBSXBFLG1CQUE4QixPQUFPO1FBRXpDLDRFQUE0RTtRQUM1RSxJQUFJb0UsUUFBUXBFLGFBQWEsT0FBTztRQUVoQyxPQUFPO0lBQ1Q7SUFFQSw2RUFBNkU7SUFDN0UsTUFBTXNFLGtCQUFrQixDQUFDRjtRQUN2QixJQUFJLENBQUNDLGtCQUFrQkQsT0FBTztRQUU5QixxQ0FBcUM7UUFDckMsSUFBSXhDLFdBQVc7UUFFZjNCLGVBQWVtRTtJQUNqQjtJQUVBLHlCQUF5QjtJQUN6QixNQUFNRyxhQUFhO1FBQ2pCLE9BQVF2RTtZQUNOO2dCQUNFLHFCQUNFLDhEQUFDd0U7b0JBQUlDLFdBQVU7O3NDQUNiLDhEQUFDQzs0QkFBR0QsV0FBVTtzQ0FBNkI7Ozs7OztzQ0FDM0MsOERBQUNEOzRCQUFJQyxXQUFVO3NDQUNiLDRFQUFDRDtnQ0FBSUMsV0FBVTs7a0RBQ2IsOERBQUNFO3dDQUNDRixXQUFXLE9BQWlFLE9BQTFEdkUsV0FBVyxlQUFlLGdCQUFnQixpQkFBZ0I7d0NBQzVFMEUsU0FBUyxJQUFNckMsc0JBQXNCOzswREFFckMsOERBQUNpQztnREFBSUMsV0FBVTswREFDYiw0RUFBQ0k7b0RBQUlDLE9BQU07b0RBQTZCTCxXQUFVO29EQUFZTSxNQUFLO29EQUFPQyxTQUFRO29EQUFZQyxRQUFPOzhEQUNuRyw0RUFBQ0M7d0RBQUtDLGVBQWM7d0RBQVFDLGdCQUFlO3dEQUFRQyxhQUFhO3dEQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzBEQUd6RSw4REFBQ0M7Z0RBQUdkLFdBQVU7MERBQXNCOzs7Ozs7MERBQ3BDLDhEQUFDZTtnREFBRWYsV0FBVTswREFBMEI7Ozs7Ozs7Ozs7OztrREFFekMsOERBQUNFO3dDQUNDRixXQUFXLE9BQStELE9BQXhEdkUsV0FBVyxhQUFhLGdCQUFnQixpQkFBZ0I7d0NBQzFFMEUsU0FBUyxJQUFNckMsc0JBQXNCOzswREFFckMsOERBQUNpQztnREFBSUMsV0FBVTswREFDYiw0RUFBQ0k7b0RBQUlDLE9BQU07b0RBQTZCTCxXQUFVO29EQUFZTSxNQUFLO29EQUFPQyxTQUFRO29EQUFZQyxRQUFPOzhEQUNuRyw0RUFBQ0M7d0RBQUtDLGVBQWM7d0RBQVFDLGdCQUFlO3dEQUFRQyxhQUFhO3dEQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzBEQUd6RSw4REFBQ0M7Z0RBQUdkLFdBQVU7MERBQXNCOzs7Ozs7MERBQ3BDLDhEQUFDZTtnREFBRWYsV0FBVTswREFBMEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBT25EO2dCQUNFLE9BQU92RSxXQUFXLDZCQUNoQiw4REFBQ1gsa0VBQWNBO29CQUNia0csVUFBVWhEO29CQUNWaUQsZUFBZXBGO29CQUNmc0IsV0FBV0E7b0JBQ1grRCxPQUFNOzs7Ozt5Q0FHUiw4REFBQ25HLGdFQUFZQTtvQkFDWGlHLFVBQVV4QztvQkFDVnlDLGVBQWU1RTtvQkFDZjhFLGFBQWE7b0JBQ2JoRSxXQUFXQTtvQkFDWCtELE9BQU07Ozs7OztZQUlaO2dCQUNFLE9BQU92RixXQUFXLDZCQUNoQiw4REFBQ2Isa0VBQWNBO29CQUNia0csVUFBVWhEO29CQUNWaUQsZUFBZXBGO29CQUNmc0IsV0FBV0E7b0JBQ1grRCxPQUFNOzs7Ozt5Q0FHUiw4REFBQ25HLGdFQUFZQTtvQkFDWGlHLFVBQVV4QztvQkFDVnlDLGVBQWU1RTtvQkFDZjhFLGFBQWE7b0JBQ2JoRSxXQUFXQTtvQkFDWCtELE9BQU07Ozs7OztZQUlaO2dCQUNFLHFCQUNFLDhEQUFDbEcsa0VBQWNBO29CQUNiMkIsUUFBUUE7b0JBQ1JxRSxVQUFVbkM7b0JBQ1Z1QyxxQkFBcUIzRixXQUFXO29CQUNoQzBCLFdBQVdBOzs7Ozs7WUFJakI7Z0JBQ0UscUJBQ0UsOERBQUNsQywrREFBV0E7b0JBQ1ZvRSxNQUFNcEM7b0JBQ05vRSxrQkFBa0IvQjtvQkFDbEJnQyxRQUFRLElBQU05RjtvQkFDZDJCLFdBQVdBOzs7Ozs7WUFJakI7Z0JBQ0UscUJBQ0UsOERBQUNqQyxvRUFBZ0JBO29CQUNmcUcsU0FBU2hFO29CQUNUaUUsU0FBUy9COzs7Ozs7WUFJZjtnQkFDRSxPQUFPO1FBQ1g7SUFDRjtJQUVBLHFCQUNFLDhEQUFDTTs7MEJBRUMsOERBQUNBO2dCQUFJQyxXQUFVOzBCQUNiLDRFQUFDeUI7b0JBQUd6QixXQUFVOzhCQUNYMEIsT0FBT0MsTUFBTSxDQUFDdEcsTUFBTXVHLE1BQU0sQ0FBQ2pDLENBQUFBLE9BQVEsT0FBT0EsU0FBUyxVQUFVa0MsR0FBRyxDQUFDLENBQUNsQzt3QkFDakUsTUFBTW1DLGNBQWNsQyxrQkFBa0JEO3dCQUN0QyxxQkFDRSw4REFBQ29DOzRCQUVDL0IsV0FBVyxxQkFBNEUsT0FBdkR6RSxlQUFlb0UsT0FBTyxpQkFBaUI7NEJBQ3ZFUSxTQUFTLElBQU1OLGdCQUFnQkY7OzhDQUUvQiw4REFBQ0k7b0NBQUlDLFdBQVcsOEJBQW1GLE9BQXJEOEIsY0FBYyxvQ0FBb0M7O3NEQUM5Riw4REFBQ0U7NENBQUtoQyxXQUFXLDJEQUloQixPQUhDekUsY0FBY29FLE9BQU8sMEJBQ3JCcEUsZ0JBQWdCb0UsT0FBTywrQ0FDdkI7c0RBRUNBOzs7Ozs7c0RBRUgsOERBQUNxQzs0Q0FBS2hDLFdBQVU7c0RBQWdCTixZQUFZQzs7Ozs7Ozs7Ozs7O2dDQUU3Q0EsT0FBTytCLE9BQU9PLElBQUksQ0FBQzVHLE1BQU02RyxNQUFNLEdBQUcsbUJBQ2pDLDhEQUFDbkM7b0NBQUlDLFdBQVcsaUJBQW1FLE9BQWxEekUsY0FBY29FLE9BQU8sZUFBZTs7Ozs7OzsyQkFmbEVBOzs7OztvQkFtQlg7Ozs7Ozs7Ozs7O1lBS0ZsQyxDQUFBQSxXQUFXLFVBQVVKLEtBQUksbUJBQ3pCLDhEQUFDbEMsbUVBQWVBO2dCQUFDc0MsUUFBUUE7Z0JBQVFJLFNBQVNGOzs7Ozs7WUFJM0NtQzs7Ozs7OztBQUdQO0dBbll3QnhFO0tBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9wYWdlLnRzeD83NjAzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcclxuXHJcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBDbGlja0hvdXNlRm9ybSBmcm9tICdAL2NvbXBvbmVudHMvQ2xpY2tIb3VzZUZvcm0nO1xyXG5pbXBvcnQgRmxhdEZpbGVGb3JtIGZyb20gJ0AvY29tcG9uZW50cy9GbGF0RmlsZUZvcm0nO1xyXG5pbXBvcnQgVGFibGVTZWxlY3Rpb24gZnJvbSAnQC9jb21wb25lbnRzL1RhYmxlU2VsZWN0aW9uJztcclxuaW1wb3J0IERhdGFQcmV2aWV3IGZyb20gJ0AvY29tcG9uZW50cy9EYXRhUHJldmlldyc7XHJcbmltcG9ydCBJbmdlc3Rpb25SZXN1bHRzIGZyb20gJ0AvY29tcG9uZW50cy9Jbmdlc3Rpb25SZXN1bHRzJztcclxuaW1wb3J0IFN0YXR1c0luZGljYXRvciBmcm9tICdAL2NvbXBvbmVudHMvU3RhdHVzSW5kaWNhdG9yJztcclxuaW1wb3J0IGFwaSwgeyBDbGlja0hvdXNlQ29uZmlnLCBGbGF0RmlsZUNvbmZpZywgSW5nZXN0aW9uUmVxdWVzdCwgVGFibGVJbmZvLCBJbmdlc3Rpb25SZXNwb25zZSB9IGZyb20gJ0AvbGliL2FwaSc7XHJcblxyXG4vLyBTdGVwIGVudW1cclxuZW51bSBTdGVwIHtcclxuICBTb3VyY2VTZWxlY3Rpb24gPSAxLFxyXG4gIFNvdXJjZUNvbmZpZ3VyYXRpb24sXHJcbiAgVGFyZ2V0Q29uZmlndXJhdGlvbixcclxuICBTY2hlbWFTZWxlY3Rpb24sXHJcbiAgUHJldmlldyxcclxuICBSZXN1bHRzXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEhvbWUoKSB7XHJcbiAgLy8gU3RhdGVcclxuICBjb25zdCBbY3VycmVudFN0ZXAsIHNldEN1cnJlbnRTdGVwXSA9IHVzZVN0YXRlPFN0ZXA+KFN0ZXAuU291cmNlU2VsZWN0aW9uKTtcclxuICBjb25zdCBbc291cmNlLCBzZXRTb3VyY2VdID0gdXNlU3RhdGU8J2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJyB8ICcnPignJyk7XHJcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0XSA9IHVzZVN0YXRlPCdjbGlja2hvdXNlJyB8ICdmbGF0ZmlsZScgfCAnJz4oJycpO1xyXG4gIGNvbnN0IFtjbGlja0hvdXNlQ29uZmlnLCBzZXRDbGlja0hvdXNlQ29uZmlnXSA9IHVzZVN0YXRlPENsaWNrSG91c2VDb25maWc+KHtcclxuICAgIGhvc3Q6ICcnLFxyXG4gICAgcG9ydDogODEyMyxcclxuICAgIGRhdGFiYXNlOiAnJyxcclxuICAgIHVzZXI6ICcnLFxyXG4gICAgand0VG9rZW46ICcnLFxyXG4gICAgc2VjdXJlOiBmYWxzZVxyXG4gIH0pO1xyXG4gIGNvbnN0IFtmbGF0RmlsZUNvbmZpZywgc2V0RmxhdEZpbGVDb25maWddID0gdXNlU3RhdGU8RmxhdEZpbGVDb25maWc+KHtcclxuICAgIGRlbGltaXRlcjogJywnLFxyXG4gICAgaGFzSGVhZGVyOiB0cnVlLFxyXG4gICAgZmlsZVBhdGg6ICcnLFxyXG4gICAgZmlsZU5hbWU6ICcnXHJcbiAgfSk7XHJcbiAgY29uc3QgW3RhYmxlcywgc2V0VGFibGVzXSA9IHVzZVN0YXRlPFRhYmxlSW5mb1tdPihbXSk7XHJcbiAgY29uc3QgW2pvaW5Db25kaXRpb24sIHNldEpvaW5Db25kaXRpb25dID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XHJcbiAgY29uc3QgW3VzZUpvaW4sIHNldFVzZUpvaW5dID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNvbnN0IFtwcmV2aWV3RGF0YSwgc2V0UHJldmlld0RhdGFdID0gdXNlU3RhdGU8c3RyaW5nW11bXT4oW10pO1xyXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XHJcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKTtcclxuICBjb25zdCBbaW5nZXN0aW9uUmVzdWx0cywgc2V0SW5nZXN0aW9uUmVzdWx0c10gPSB1c2VTdGF0ZTxJbmdlc3Rpb25SZXNwb25zZSB8IG51bGw+KG51bGwpO1xyXG4gIGNvbnN0IFtzdGF0dXMsIHNldFN0YXR1c10gPSB1c2VTdGF0ZTwnaWRsZScgfCAnY29ubmVjdGluZycgfCAnZmV0Y2hpbmcnIHwgJ2luZ2VzdGluZycgfCAnY29tcGxldGVkJyB8ICdlcnJvcic+KCdpZGxlJyk7XHJcbiAgY29uc3QgW3N0YXR1c01lc3NhZ2UsIHNldFN0YXR1c01lc3NhZ2VdID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XHJcblxyXG4gIC8vIEVmZmVjdCB0byB0cmFjayBzdGF0dXMgY2hhbmdlc1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgIGlmIChjdXJyZW50U3RlcCA9PT0gU3RlcC5Tb3VyY2VDb25maWd1cmF0aW9uIHx8IGN1cnJlbnRTdGVwID09PSBTdGVwLlRhcmdldENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBzZXRTdGF0dXMoJ2Nvbm5lY3RpbmcnKTtcclxuICAgICAgICBzZXRTdGF0dXNNZXNzYWdlKCdDb25uZWN0aW5nIHRvIHRoZSBkYXRhIHNvdXJjZS4uLicpO1xyXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGVwID09PSBTdGVwLlNjaGVtYVNlbGVjdGlvbikge1xyXG4gICAgICAgIHNldFN0YXR1cygnZmV0Y2hpbmcnKTtcclxuICAgICAgICBzZXRTdGF0dXNNZXNzYWdlKCdGZXRjaGluZyBzY2hlbWEgaW5mb3JtYXRpb24uLi4nKTtcclxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50U3RlcCA9PT0gU3RlcC5QcmV2aWV3KSB7XHJcbiAgICAgICAgc2V0U3RhdHVzKCdmZXRjaGluZycpO1xyXG4gICAgICAgIHNldFN0YXR1c01lc3NhZ2UoJ0dlbmVyYXRpbmcgZGF0YSBwcmV2aWV3Li4uJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFN0ZXAgPT09IFN0ZXAuUmVzdWx0cykge1xyXG4gICAgICAgIHNldFN0YXR1cygnaW5nZXN0aW5nJyk7XHJcbiAgICAgICAgc2V0U3RhdHVzTWVzc2FnZSgnSW5nZXN0aW5nIGRhdGEgYmV0d2VlbiBzb3VyY2VzLi4uJyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcclxuICAgICAgc2V0U3RhdHVzKCdlcnJvcicpO1xyXG4gICAgICBzZXRTdGF0dXNNZXNzYWdlKGVycm9yKTtcclxuICAgIH0gZWxzZSBpZiAoY3VycmVudFN0ZXAgPT09IFN0ZXAuUmVzdWx0cyAmJiBpbmdlc3Rpb25SZXN1bHRzKSB7XHJcbiAgICAgIHNldFN0YXR1cygnY29tcGxldGVkJyk7XHJcbiAgICAgIHNldFN0YXR1c01lc3NhZ2UoaW5nZXN0aW9uUmVzdWx0cy5tZXNzYWdlIHx8ICdPcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0U3RhdHVzKCdpZGxlJyk7XHJcbiAgICAgIHNldFN0YXR1c01lc3NhZ2UoJycpO1xyXG4gICAgfVxyXG4gIH0sIFtpc0xvYWRpbmcsIGVycm9yLCBjdXJyZW50U3RlcCwgaW5nZXN0aW9uUmVzdWx0c10pO1xyXG5cclxuICAvLyBIYW5kbGVyc1xyXG4gIGNvbnN0IGhhbmRsZVNvdXJjZVNlbGVjdGlvbiA9IChzZWxlY3RlZFNvdXJjZTogJ2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJykgPT4ge1xyXG4gICAgc2V0U291cmNlKHNlbGVjdGVkU291cmNlKTtcclxuICAgIHNldFRhcmdldChzZWxlY3RlZFNvdXJjZSA9PT0gJ2NsaWNraG91c2UnID8gJ2ZsYXRmaWxlJyA6ICdjbGlja2hvdXNlJyk7XHJcbiAgICBzZXRDdXJyZW50U3RlcChTdGVwLlNvdXJjZUNvbmZpZ3VyYXRpb24pO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZUNsaWNrSG91c2VDb25maWdTdWJtaXQgPSBhc3luYyAoY29uZmlnOiBDbGlja0hvdXNlQ29uZmlnKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XHJcbiAgICAgIHNldEVycm9yKCcnKTtcclxuICAgICAgXHJcbiAgICAgIC8vIFRlc3QgY29ubmVjdGlvblxyXG4gICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gYXdhaXQgYXBpLnRlc3RDbGlja0hvdXNlQ29ubmVjdGlvbihjb25maWcpO1xyXG4gICAgICBpZiAoIXRlc3RSZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0ZXN0UmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTYXZlIGNvbmZpZ1xyXG4gICAgICBzZXRDbGlja0hvdXNlQ29uZmlnKGNvbmZpZyk7XHJcblxyXG4gICAgICAvLyBJZiBDbGlja0hvdXNlIGlzIHRoZSBzb3VyY2UsIGZldGNoIHRhYmxlc1xyXG4gICAgICBpZiAoc291cmNlID09PSAnY2xpY2tob3VzZScpIHtcclxuICAgICAgICBjb25zdCB0YWJsZXMgPSBhd2FpdCBhcGkuZ2V0Q2xpY2tIb3VzZVRhYmxlcyhjb25maWcpO1xyXG4gICAgICAgIHNldFRhYmxlcyh0YWJsZXMpO1xyXG4gICAgICAgIHNldEN1cnJlbnRTdGVwKFN0ZXAuU2NoZW1hU2VsZWN0aW9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBDbGlja0hvdXNlIGlzIHRoZSB0YXJnZXRcclxuICAgICAgICBzZXRDdXJyZW50U3RlcChTdGVwLlRhcmdldENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGNvbm5lY3QgdG8gQ2xpY2tIb3VzZScpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVGbGF0RmlsZUNvbmZpZ1N1Ym1pdCA9IGFzeW5jIChjb25maWc6IEZsYXRGaWxlQ29uZmlnLCBmaWxlPzogRmlsZSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xyXG4gICAgICBzZXRFcnJvcignJyk7XHJcblxyXG4gICAgICAvLyBJZiBmaWxlIHVwbG9hZCBpcyByZXF1aXJlZCAod2hlbiBmbGF0IGZpbGUgaXMgdGhlIHNvdXJjZSlcclxuICAgICAgaWYgKHNvdXJjZSA9PT0gJ2ZsYXRmaWxlJyAmJiBmaWxlKSB7XHJcbiAgICAgICAgY29uc3QgdXBsb2FkUmVzdWx0ID0gYXdhaXQgYXBpLnVwbG9hZEZpbGUoZmlsZSwgY29uZmlnLmRlbGltaXRlciwgY29uZmlnLmhhc0hlYWRlcik7XHJcbiAgICAgICAgaWYgKCF1cGxvYWRSZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVwbG9hZFJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNldCBjb25maWcgd2l0aCBmaWxlIHBhdGhcclxuICAgICAgICBzZXRGbGF0RmlsZUNvbmZpZyh7XHJcbiAgICAgICAgICAuLi5jb25maWcsXHJcbiAgICAgICAgICBmaWxlUGF0aDogdXBsb2FkUmVzdWx0LmZpbGVQYXRoXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFNldCBzY2hlbWEgaW5mb3JtYXRpb25cclxuICAgICAgICBzZXRUYWJsZXMoW3VwbG9hZFJlc3VsdC5zY2hlbWFdKTtcclxuICAgICAgICBzZXRDdXJyZW50U3RlcChTdGVwLlNjaGVtYVNlbGVjdGlvbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gSnVzdCBzdG9yZSB0aGUgY29uZmlnIChmbGF0IGZpbGUgaXMgdGhlIHRhcmdldClcclxuICAgICAgICBzZXRGbGF0RmlsZUNvbmZpZyhjb25maWcpO1xyXG4gICAgICAgIHNldEN1cnJlbnRTdGVwKHNvdXJjZSA9PT0gJ2NsaWNraG91c2UnID8gU3RlcC5TY2hlbWFTZWxlY3Rpb24gOiBTdGVwLlRhcmdldENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHByb2Nlc3MgZmxhdCBmaWxlJyk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZVRhYmxlU2VsZWN0aW9uID0gKHNlbGVjdGVkVGFibGVzOiBUYWJsZUluZm9bXSwgdXNlSm9pbk9wdGlvbjogYm9vbGVhbiwgam9pbkNvbmRpdGlvblRleHQ6IHN0cmluZykgPT4ge1xyXG4gICAgc2V0VGFibGVzKHNlbGVjdGVkVGFibGVzKTtcclxuICAgIHNldFVzZUpvaW4odXNlSm9pbk9wdGlvbik7XHJcbiAgICBzZXRKb2luQ29uZGl0aW9uKGpvaW5Db25kaXRpb25UZXh0KTtcclxuICAgIHNldEN1cnJlbnRTdGVwKFN0ZXAuUHJldmlldyk7XHJcblxyXG4gICAgLy8gR2VuZXJhdGUgYSBwcmV2aWV3XHJcbiAgICBnZW5lcmF0ZVByZXZpZXcoc2VsZWN0ZWRUYWJsZXMsIHVzZUpvaW5PcHRpb24sIGpvaW5Db25kaXRpb25UZXh0KTtcclxuICB9O1xyXG5cclxuICBjb25zdCBnZW5lcmF0ZVByZXZpZXcgPSBhc3luYyAoc2VsZWN0ZWRUYWJsZXM6IFRhYmxlSW5mb1tdLCB1c2VKb2luT3B0aW9uOiBib29sZWFuLCBqb2luQ29uZGl0aW9uVGV4dDogc3RyaW5nKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XHJcbiAgICAgIHNldEVycm9yKCcnKTtcclxuXHJcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IEluZ2VzdGlvblJlcXVlc3QgPSB7XHJcbiAgICAgICAgc291cmNlOiBzb3VyY2UgYXMgJ2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJyxcclxuICAgICAgICB0YXJnZXQ6IHRhcmdldCBhcyAnY2xpY2tob3VzZScgfCAnZmxhdGZpbGUnLFxyXG4gICAgICAgIGNsaWNrSG91c2VDb25maWc6IHNvdXJjZSA9PT0gJ2NsaWNraG91c2UnID8gY2xpY2tIb3VzZUNvbmZpZyA6IHRhcmdldCA9PT0gJ2NsaWNraG91c2UnID8gY2xpY2tIb3VzZUNvbmZpZyA6IHVuZGVmaW5lZCxcclxuICAgICAgICBmbGF0RmlsZUNvbmZpZzogc291cmNlID09PSAnZmxhdGZpbGUnID8gZmxhdEZpbGVDb25maWcgOiB0YXJnZXQgPT09ICdmbGF0ZmlsZScgPyBmbGF0RmlsZUNvbmZpZyA6IHVuZGVmaW5lZCxcclxuICAgICAgICB0YWJsZXM6IHNlbGVjdGVkVGFibGVzLFxyXG4gICAgICAgIGpvaW5Db25kaXRpb246IGpvaW5Db25kaXRpb25UZXh0LFxyXG4gICAgICAgIHVzZUpvaW46IHVzZUpvaW5PcHRpb25cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHByZXZpZXdSZXN1bHQgPSBhd2FpdCBhcGkucHJldmlld0RhdGEocmVxdWVzdCk7XHJcbiAgICAgIGlmICghcHJldmlld1Jlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByZXZpZXdSZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFByZXZpZXdEYXRhKHByZXZpZXdSZXN1bHQuZGF0YSk7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGdlbmVyYXRlIHByZXZpZXcnKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlU3RhcnRJbmdlc3Rpb24gPSBhc3luYyAoKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XHJcbiAgICAgIHNldEVycm9yKCcnKTtcclxuXHJcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IEluZ2VzdGlvblJlcXVlc3QgPSB7XHJcbiAgICAgICAgc291cmNlOiBzb3VyY2UgYXMgJ2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJyxcclxuICAgICAgICB0YXJnZXQ6IHRhcmdldCBhcyAnY2xpY2tob3VzZScgfCAnZmxhdGZpbGUnLFxyXG4gICAgICAgIGNsaWNrSG91c2VDb25maWc6IHNvdXJjZSA9PT0gJ2NsaWNraG91c2UnID8gY2xpY2tIb3VzZUNvbmZpZyA6IHRhcmdldCA9PT0gJ2NsaWNraG91c2UnID8gY2xpY2tIb3VzZUNvbmZpZyA6IHVuZGVmaW5lZCxcclxuICAgICAgICBmbGF0RmlsZUNvbmZpZzogc291cmNlID09PSAnZmxhdGZpbGUnID8gZmxhdEZpbGVDb25maWcgOiB0YXJnZXQgPT09ICdmbGF0ZmlsZScgPyBmbGF0RmlsZUNvbmZpZyA6IHVuZGVmaW5lZCxcclxuICAgICAgICB0YWJsZXMsXHJcbiAgICAgICAgam9pbkNvbmRpdGlvbixcclxuICAgICAgICB1c2VKb2luXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5pbmdlc3REYXRhKHJlcXVlc3QpO1xyXG4gICAgICBzZXRJbmdlc3Rpb25SZXN1bHRzKHJlc3BvbnNlKTtcclxuICAgICAgc2V0Q3VycmVudFN0ZXAoU3RlcC5SZXN1bHRzKTtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlIHx8ICdJbmdlc3Rpb24gZmFpbGVkJyk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZVJlc2V0ID0gKCkgPT4ge1xyXG4gICAgc2V0Q3VycmVudFN0ZXAoU3RlcC5Tb3VyY2VTZWxlY3Rpb24pO1xyXG4gICAgc2V0U291cmNlKCcnKTtcclxuICAgIHNldFRhcmdldCgnJyk7XHJcbiAgICBzZXRUYWJsZXMoW10pO1xyXG4gICAgc2V0Sm9pbkNvbmRpdGlvbignJyk7XHJcbiAgICBzZXRVc2VKb2luKGZhbHNlKTtcclxuICAgIHNldFByZXZpZXdEYXRhKFtdKTtcclxuICAgIHNldEluZ2VzdGlvblJlc3VsdHMobnVsbCk7XHJcbiAgICBzZXRFcnJvcignJyk7XHJcbiAgfTtcclxuXHJcbiAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIFVJXHJcbiAgY29uc3QgZ2V0U3RlcE5hbWUgPSAoc3RlcDogU3RlcCkgPT4ge1xyXG4gICAgc3dpdGNoIChzdGVwKSB7XHJcbiAgICAgIGNhc2UgU3RlcC5Tb3VyY2VTZWxlY3Rpb246IHJldHVybiAnU291cmNlIFNlbGVjdGlvbic7XHJcbiAgICAgIGNhc2UgU3RlcC5Tb3VyY2VDb25maWd1cmF0aW9uOiByZXR1cm4gJ1NvdXJjZSBDb25maWcnO1xyXG4gICAgICBjYXNlIFN0ZXAuVGFyZ2V0Q29uZmlndXJhdGlvbjogcmV0dXJuICdUYXJnZXQgQ29uZmlnJztcclxuICAgICAgY2FzZSBTdGVwLlNjaGVtYVNlbGVjdGlvbjogcmV0dXJuICdDb2x1bW4gU2VsZWN0aW9uJztcclxuICAgICAgY2FzZSBTdGVwLlByZXZpZXc6IHJldHVybiAnUHJldmlldyc7XHJcbiAgICAgIGNhc2UgU3RlcC5SZXN1bHRzOiByZXR1cm4gJ1Jlc3VsdHMnO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBzdGVwIGlzIGFjY2Vzc2libGUgZm9yIG5hdmlnYXRpb25cclxuICBjb25zdCBjYW5OYXZpZ2F0ZVRvU3RlcCA9IChzdGVwOiBTdGVwKTogYm9vbGVhbiA9PiB7XHJcbiAgICAvLyBBbHdheXMgYWxsb3cgZ29pbmcgdG8gaW5pdGlhbCBzdGVwXHJcbiAgICBpZiAoc3RlcCA9PT0gU3RlcC5Tb3VyY2VTZWxlY3Rpb24pIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAvLyBEb24ndCBhbGxvdyBnb2luZyBiYWNrIHRvIGNvbXBsZXRlZCBzdGVwcyBhZnRlciByZXN1bHRzXHJcbiAgICBpZiAoY3VycmVudFN0ZXAgPT09IFN0ZXAuUmVzdWx0cykgcmV0dXJuIGZhbHNlO1xyXG4gICAgXHJcbiAgICAvLyBPbmx5IGFsbG93IGdvaW5nIHRvIHN0ZXBzIHRoYXQgaGF2ZSBiZWVuIGNvbXBsZXRlZCBvciBhcmUgdGhlIGN1cnJlbnQgb25lXHJcbiAgICBpZiAoc3RlcCA8PSBjdXJyZW50U3RlcCkgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9O1xyXG5cclxuICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgc3RlcCBuYXZpZ2F0aW9uIHdoZW4gY2xpY2tpbmcgb24gdGhlIHByb2dyZXNzIGluZGljYXRvclxyXG4gIGNvbnN0IGhhbmRsZVN0ZXBDbGljayA9IChzdGVwOiBTdGVwKSA9PiB7XHJcbiAgICBpZiAoIWNhbk5hdmlnYXRlVG9TdGVwKHN0ZXApKSByZXR1cm47XHJcbiAgICBcclxuICAgIC8vIElmIGxvYWRpbmcsIGRvbid0IGFsbG93IG5hdmlnYXRpb25cclxuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybjtcclxuICAgIFxyXG4gICAgc2V0Q3VycmVudFN0ZXAoc3RlcCk7XHJcbiAgfTtcclxuXHJcbiAgLy8gUmVuZGVyIGRpZmZlcmVudCBzdGVwc1xyXG4gIGNvbnN0IHJlbmRlclN0ZXAgPSAoKSA9PiB7XHJcbiAgICBzd2l0Y2ggKGN1cnJlbnRTdGVwKSB7XHJcbiAgICAgIGNhc2UgU3RlcC5Tb3VyY2VTZWxlY3Rpb246XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LXNlbWlib2xkIG1iLTZcIj5TZWxlY3QgRGF0YSBTb3VyY2UgYW5kIFRhcmdldDwvaDI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBzcGFjZS15LTRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgZ2FwLTZcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYnRuICR7c291cmNlID09PSAnY2xpY2tob3VzZScgPyAnYnRuLXByaW1hcnknIDogJ2J0bi1zZWNvbmRhcnknfSBwLTYgdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgdHJhbnNmb3JtIGhvdmVyOnNjYWxlLTEwNWB9XHJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNvdXJjZVNlbGVjdGlvbignY2xpY2tob3VzZScpfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzc05hbWU9XCJoLTEwIHctMTBcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk01IDhoMTRNNSA4YTIgMiAwIDExMC00aDE0YTIgMiAwIDExMCA0TTUgOHYxMGEyIDIgMCAwMDIgMmgxMGEyIDIgMCAwMDItMlY4bS05IDRoNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bVwiPkNsaWNrSG91c2UgdG8gRmxhdCBGaWxlPC9oMz5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIG9wYWNpdHktOTBcIj5FeHBvcnQgZGF0YSBmcm9tIENsaWNrSG91c2UgZGF0YWJhc2UgdG8gYSBmbGF0IGZpbGUgKENTVik8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYnRuICR7c291cmNlID09PSAnZmxhdGZpbGUnID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tc2Vjb25kYXJ5J30gcC02IHRleHQtY2VudGVyIHRyYW5zaXRpb24tYWxsIHRyYW5zZm9ybSBob3ZlcjpzY2FsZS0xMDVgfVxyXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTb3VyY2VTZWxlY3Rpb24oJ2ZsYXRmaWxlJyl9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtMTAgdy0xMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTkgMTJoNm0tNiA0aDZtMiA1SDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNS41ODZhMSAxIDAgMDEuNzA3LjI5M2w1LjQxNCA1LjQxNGExIDEgMCAwMS4yOTMuNzA3VjE5YTIgMiAwIDAxLTIgMnpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW1cIj5GbGF0IEZpbGUgdG8gQ2xpY2tIb3VzZTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSBvcGFjaXR5LTkwXCI+SW1wb3J0IGRhdGEgZnJvbSBhIGZsYXQgZmlsZSAoQ1NWKSB0byBDbGlja0hvdXNlIGRhdGFiYXNlPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgU3RlcC5Tb3VyY2VDb25maWd1cmF0aW9uOlxyXG4gICAgICAgIHJldHVybiBzb3VyY2UgPT09ICdjbGlja2hvdXNlJyA/IChcclxuICAgICAgICAgIDxDbGlja0hvdXNlRm9ybSBcclxuICAgICAgICAgICAgb25TdWJtaXQ9e2hhbmRsZUNsaWNrSG91c2VDb25maWdTdWJtaXR9IFxyXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzPXtjbGlja0hvdXNlQ29uZmlnfSBcclxuICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICAgIHRpdGxlPVwiQ2xpY2tIb3VzZSBTb3VyY2UgQ29uZmlndXJhdGlvblwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICkgOiAoXHJcbiAgICAgICAgICA8RmxhdEZpbGVGb3JtIFxyXG4gICAgICAgICAgICBvblN1Ym1pdD17aGFuZGxlRmxhdEZpbGVDb25maWdTdWJtaXR9IFxyXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzPXtmbGF0RmlsZUNvbmZpZ31cclxuICAgICAgICAgICAgcmVxdWlyZUZpbGU9e3RydWV9XHJcbiAgICAgICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgICB0aXRsZT1cIkZsYXQgRmlsZSBTb3VyY2UgQ29uZmlndXJhdGlvblwiIFxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApO1xyXG5cclxuICAgICAgY2FzZSBTdGVwLlRhcmdldENvbmZpZ3VyYXRpb246XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldCA9PT0gJ2NsaWNraG91c2UnID8gKFxyXG4gICAgICAgICAgPENsaWNrSG91c2VGb3JtIFxyXG4gICAgICAgICAgICBvblN1Ym1pdD17aGFuZGxlQ2xpY2tIb3VzZUNvbmZpZ1N1Ym1pdH0gXHJcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM9e2NsaWNrSG91c2VDb25maWd9IFxyXG4gICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cclxuICAgICAgICAgICAgdGl0bGU9XCJDbGlja0hvdXNlIFRhcmdldCBDb25maWd1cmF0aW9uXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKSA6IChcclxuICAgICAgICAgIDxGbGF0RmlsZUZvcm0gXHJcbiAgICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVGbGF0RmlsZUNvbmZpZ1N1Ym1pdH0gXHJcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM9e2ZsYXRGaWxlQ29uZmlnfVxyXG4gICAgICAgICAgICByZXF1aXJlRmlsZT17ZmFsc2V9XHJcbiAgICAgICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgICB0aXRsZT1cIkZsYXQgRmlsZSBUYXJnZXQgQ29uZmlndXJhdGlvblwiIFxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApO1xyXG5cclxuICAgICAgY2FzZSBTdGVwLlNjaGVtYVNlbGVjdGlvbjpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPFRhYmxlU2VsZWN0aW9uIFxyXG4gICAgICAgICAgICB0YWJsZXM9e3RhYmxlc30gXHJcbiAgICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVUYWJsZVNlbGVjdGlvbn1cclxuICAgICAgICAgICAgaXNNdWx0aVRhYmxlRW5hYmxlZD17c291cmNlID09PSAnY2xpY2tob3VzZSd9IFxyXG4gICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgU3RlcC5QcmV2aWV3OlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8RGF0YVByZXZpZXcgXHJcbiAgICAgICAgICAgIGRhdGE9e3ByZXZpZXdEYXRhfSBcclxuICAgICAgICAgICAgb25TdGFydEluZ2VzdGlvbj17aGFuZGxlU3RhcnRJbmdlc3Rpb259XHJcbiAgICAgICAgICAgIG9uQmFjaz17KCkgPT4gc2V0Q3VycmVudFN0ZXAoU3RlcC5TY2hlbWFTZWxlY3Rpb24pfVxyXG4gICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgU3RlcC5SZXN1bHRzOlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8SW5nZXN0aW9uUmVzdWx0cyBcclxuICAgICAgICAgICAgcmVzdWx0cz17aW5nZXN0aW9uUmVzdWx0c30gXHJcbiAgICAgICAgICAgIG9uUmVzZXQ9e2hhbmRsZVJlc2V0fVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdj5cclxuICAgICAgey8qIFByb2dyZXNzIGluZGljYXRvciAqL31cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi04XCI+XHJcbiAgICAgICAgPG9sIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbFwiPlxyXG4gICAgICAgICAge09iamVjdC52YWx1ZXMoU3RlcCkuZmlsdGVyKHN0ZXAgPT4gdHlwZW9mIHN0ZXAgPT09ICdudW1iZXInKS5tYXAoKHN0ZXApID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNOYXZpZ2FibGUgPSBjYW5OYXZpZ2F0ZVRvU3RlcChzdGVwIGFzIFN0ZXApO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDxsaSBcclxuICAgICAgICAgICAgICAgIGtleT17c3RlcH0gXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BmbGV4IGl0ZW1zLWNlbnRlciAke2N1cnJlbnRTdGVwID49IHN0ZXAgPyAndGV4dC1wcmltYXJ5JyA6ICd0ZXh0LWdyYXktNDAwJ31gfVxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU3RlcENsaWNrKHN0ZXAgYXMgU3RlcCl9XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciAke2lzTmF2aWdhYmxlID8gJ2N1cnNvci1wb2ludGVyIGhvdmVyOm9wYWNpdHktODAnIDogJyd9YH0+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgaC0xMCByb3VuZGVkLWZ1bGwgJHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RlcCA+IHN0ZXAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJyA6IFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGVwID09PSBzdGVwID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSByaW5nLTQgcmluZy1ibHVlLTEwMCcgOiBcclxuICAgICAgICAgICAgICAgICAgICAnYmctZ3JheS0yMDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfT5cclxuICAgICAgICAgICAgICAgICAgICB7c3RlcH1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIG10LTFcIj57Z2V0U3RlcE5hbWUoc3RlcCBhcyBTdGVwKX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIHtzdGVwIDwgT2JqZWN0LmtleXMoU3RlcCkubGVuZ3RoIC8gMiAmJiAoXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgdy0xNiBoLTEgbXgtMiAke2N1cnJlbnRTdGVwID4gc3RlcCA/ICdiZy1wcmltYXJ5JyA6ICdiZy1ncmF5LTIwMCd9YH0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KX1cclxuICAgICAgICA8L29sPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIHsvKiBTdGF0dXMgaW5kaWNhdG9yICovfVxyXG4gICAgICB7KHN0YXR1cyAhPT0gJ2lkbGUnIHx8IGVycm9yKSAmJiAoXHJcbiAgICAgICAgPFN0YXR1c0luZGljYXRvciBzdGF0dXM9e3N0YXR1c30gbWVzc2FnZT17c3RhdHVzTWVzc2FnZX0gLz5cclxuICAgICAgKX1cclxuXHJcbiAgICAgIHsvKiBDdXJyZW50IHN0ZXAgY29udGVudCAqL31cclxuICAgICAge3JlbmRlclN0ZXAoKX1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn0gIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiQ2xpY2tIb3VzZUZvcm0iLCJGbGF0RmlsZUZvcm0iLCJUYWJsZVNlbGVjdGlvbiIsIkRhdGFQcmV2aWV3IiwiSW5nZXN0aW9uUmVzdWx0cyIsIlN0YXR1c0luZGljYXRvciIsImFwaSIsIlN0ZXAiLCJIb21lIiwiY3VycmVudFN0ZXAiLCJzZXRDdXJyZW50U3RlcCIsInNvdXJjZSIsInNldFNvdXJjZSIsInRhcmdldCIsInNldFRhcmdldCIsImNsaWNrSG91c2VDb25maWciLCJzZXRDbGlja0hvdXNlQ29uZmlnIiwiaG9zdCIsInBvcnQiLCJkYXRhYmFzZSIsInVzZXIiLCJqd3RUb2tlbiIsInNlY3VyZSIsImZsYXRGaWxlQ29uZmlnIiwic2V0RmxhdEZpbGVDb25maWciLCJkZWxpbWl0ZXIiLCJoYXNIZWFkZXIiLCJmaWxlUGF0aCIsImZpbGVOYW1lIiwidGFibGVzIiwic2V0VGFibGVzIiwiam9pbkNvbmRpdGlvbiIsInNldEpvaW5Db25kaXRpb24iLCJ1c2VKb2luIiwic2V0VXNlSm9pbiIsInByZXZpZXdEYXRhIiwic2V0UHJldmlld0RhdGEiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiaW5nZXN0aW9uUmVzdWx0cyIsInNldEluZ2VzdGlvblJlc3VsdHMiLCJzdGF0dXMiLCJzZXRTdGF0dXMiLCJzdGF0dXNNZXNzYWdlIiwic2V0U3RhdHVzTWVzc2FnZSIsIm1lc3NhZ2UiLCJoYW5kbGVTb3VyY2VTZWxlY3Rpb24iLCJzZWxlY3RlZFNvdXJjZSIsImhhbmRsZUNsaWNrSG91c2VDb25maWdTdWJtaXQiLCJjb25maWciLCJ0ZXN0UmVzdWx0IiwidGVzdENsaWNrSG91c2VDb25uZWN0aW9uIiwic3VjY2VzcyIsIkVycm9yIiwiZ2V0Q2xpY2tIb3VzZVRhYmxlcyIsImVyciIsImhhbmRsZUZsYXRGaWxlQ29uZmlnU3VibWl0IiwiZmlsZSIsInVwbG9hZFJlc3VsdCIsInVwbG9hZEZpbGUiLCJzY2hlbWEiLCJoYW5kbGVUYWJsZVNlbGVjdGlvbiIsInNlbGVjdGVkVGFibGVzIiwidXNlSm9pbk9wdGlvbiIsImpvaW5Db25kaXRpb25UZXh0IiwiZ2VuZXJhdGVQcmV2aWV3IiwicmVxdWVzdCIsInVuZGVmaW5lZCIsInByZXZpZXdSZXN1bHQiLCJkYXRhIiwiaGFuZGxlU3RhcnRJbmdlc3Rpb24iLCJyZXNwb25zZSIsImluZ2VzdERhdGEiLCJoYW5kbGVSZXNldCIsImdldFN0ZXBOYW1lIiwic3RlcCIsImNhbk5hdmlnYXRlVG9TdGVwIiwiaGFuZGxlU3RlcENsaWNrIiwicmVuZGVyU3RlcCIsImRpdiIsImNsYXNzTmFtZSIsImgyIiwiYnV0dG9uIiwib25DbGljayIsInN2ZyIsInhtbG5zIiwiZmlsbCIsInZpZXdCb3giLCJzdHJva2UiLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwiaDMiLCJwIiwib25TdWJtaXQiLCJpbml0aWFsVmFsdWVzIiwidGl0bGUiLCJyZXF1aXJlRmlsZSIsImlzTXVsdGlUYWJsZUVuYWJsZWQiLCJvblN0YXJ0SW5nZXN0aW9uIiwib25CYWNrIiwicmVzdWx0cyIsIm9uUmVzZXQiLCJvbCIsIk9iamVjdCIsInZhbHVlcyIsImZpbHRlciIsIm1hcCIsImlzTmF2aWdhYmxlIiwibGkiLCJzcGFuIiwia2V5cyIsImxlbmd0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/page.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./components/ClickHouseForm.tsx": +/*!***************************************!*\ + !*** ./components/ClickHouseForm.tsx ***! + \***************************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nconst ClickHouseForm = (param)=>{\n let { onSubmit, initialValues, isLoading, title } = param;\n _s();\n const [config, setConfig] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialValues);\n const [validation, setValidation] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const handleChange = (e)=>{\n const { name, value, type, checked } = e.target;\n const newValue = type === \"checkbox\" ? checked : value;\n const newConfig = {\n ...config,\n [name]: type === \"number\" ? Number(value) : newValue\n };\n setConfig(newConfig);\n // Clear validation error when field is updated\n if (validation[name]) {\n setValidation((prev)=>({\n ...prev,\n [name]: \"\"\n }));\n }\n };\n const validateForm = ()=>{\n const errors = {};\n if (!config.host.trim()) {\n errors.host = \"Host is required\";\n }\n if (!config.port || config.port <= 0) {\n errors.port = \"Port must be a positive number\";\n }\n if (!config.database.trim()) {\n errors.database = \"Database is required\";\n }\n if (!config.user.trim()) {\n errors.user = \"Username is required\";\n }\n if (!config.jwtToken.trim()) {\n errors.jwtToken = \"JWT token is required\";\n }\n setValidation(errors);\n return Object.keys(errors).length === 0;\n };\n const handleSubmit = (e)=>{\n e.preventDefault();\n if (validateForm()) {\n onSubmit(config);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white shadow-lg rounded-lg p-6 max-w-xl mx-auto transition-all duration-300 hover:shadow-xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-2xl font-semibold mb-6 text-primary\",\n children: title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 65,\n columnNumber: 7\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n className: \"space-y-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 gap-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"label\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label-text font-medium \".concat(validation.host ? \"text-red-600\" : \"\"),\n children: \"Host\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 72,\n columnNumber: 15\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 71,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n name: \"host\",\n value: config.host,\n onChange: handleChange,\n placeholder: \"localhost\",\n className: \"input \".concat(validation.host ? \"border-red-500 bg-red-50\" : \"border-gray-300\", \" w-full rounded-md p-2 focus:outline-none focus:ring-2 \").concat(validation.host ? \"focus:ring-red-500\" : \"focus:ring-primary\"),\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 74,\n columnNumber: 13\n }, undefined),\n validation.host && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-600 text-sm mt-1 font-medium\",\n children: validation.host\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 83,\n columnNumber: 33\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 70,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"label\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label-text font-medium \".concat(validation.port ? \"text-red-600\" : \"\"),\n children: \"Port\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 89,\n columnNumber: 15\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 88,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"number\",\n name: \"port\",\n value: config.port,\n onChange: handleChange,\n placeholder: \"8123\",\n className: \"input \".concat(validation.port ? \"border-red-500 bg-red-50\" : \"border-gray-300\", \" w-full rounded-md p-2 focus:outline-none focus:ring-2 \").concat(validation.port ? \"focus:ring-red-500\" : \"focus:ring-primary\"),\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 91,\n columnNumber: 13\n }, undefined),\n validation.port && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-600 text-sm mt-1 font-medium\",\n children: validation.port\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 100,\n columnNumber: 33\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 87,\n columnNumber: 11\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 68,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"label\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label-text font-medium \".concat(validation.database ? \"text-red-600\" : \"\"),\n children: \"Database\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 107,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 106,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n name: \"database\",\n value: config.database,\n onChange: handleChange,\n placeholder: \"default\",\n className: \"input \".concat(validation.database ? \"border-red-500 bg-red-50\" : \"border-gray-300\", \" w-full rounded-md p-2 focus:outline-none focus:ring-2 \").concat(validation.database ? \"focus:ring-red-500\" : \"focus:ring-primary\"),\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 109,\n columnNumber: 11\n }, undefined),\n validation.database && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-600 text-sm mt-1 font-medium\",\n children: validation.database\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 118,\n columnNumber: 35\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 105,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"label\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label-text font-medium \".concat(validation.user ? \"text-red-600\" : \"\"),\n children: \"Username\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 124,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 123,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n name: \"user\",\n value: config.user,\n onChange: handleChange,\n placeholder: \"default\",\n className: \"input \".concat(validation.user ? \"border-red-500 bg-red-50\" : \"border-gray-300\", \" w-full rounded-md p-2 focus:outline-none focus:ring-2 \").concat(validation.user ? \"focus:ring-red-500\" : \"focus:ring-primary\"),\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 126,\n columnNumber: 11\n }, undefined),\n validation.user && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-600 text-sm mt-1 font-medium\",\n children: validation.user\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 135,\n columnNumber: 31\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 122,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"label\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label-text font-medium \".concat(validation.jwtToken ? \"text-red-600\" : \"\"),\n children: \"JWT Token\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 141,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 140,\n columnNumber: 11\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"password\",\n name: \"jwtToken\",\n value: config.jwtToken,\n onChange: handleChange,\n placeholder: \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...\",\n className: \"input \".concat(validation.jwtToken ? \"border-red-500 bg-red-50\" : \"border-gray-300\", \" w-full rounded-md p-2 focus:outline-none focus:ring-2 \").concat(validation.jwtToken ? \"focus:ring-red-500\" : \"focus:ring-primary\"),\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 143,\n columnNumber: 11\n }, undefined),\n validation.jwtToken && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-red-600 text-sm mt-1 font-medium\",\n children: validation.jwtToken\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 152,\n columnNumber: 35\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 139,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"form-control\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"cursor-pointer label justify-start gap-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n name: \"secure\",\n checked: config.secure,\n onChange: handleChange,\n className: \"checkbox checkbox-primary\",\n disabled: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 158,\n columnNumber: 13\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"label-text\",\n children: \"Use HTTPS\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 166,\n columnNumber: 13\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 157,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 156,\n columnNumber: 9\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"btn btn-primary w-full\",\n disabled: isLoading,\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"loading loading-spinner loading-sm mr-2\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 178,\n columnNumber: 17\n }, undefined),\n \"Connecting...\"\n ]\n }, void 0, true) : \"Connect\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 171,\n columnNumber: 11\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 170,\n columnNumber: 9\n }, undefined),\n Object.keys(validation).length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 p-3 bg-red-50 border border-red-200 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"h-5 w-5 text-red-500 mr-2\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 191,\n columnNumber: 17\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 190,\n columnNumber: 15\n }, undefined),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-600 font-medium\",\n children: \"Please fix the errors before continuing\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 193,\n columnNumber: 15\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 189,\n columnNumber: 13\n }, undefined)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 188,\n columnNumber: 11\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 67,\n columnNumber: 7\n }, undefined)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\ClickHouseForm.tsx\",\n lineNumber: 64,\n columnNumber: 5\n }, undefined);\n};\n_s(ClickHouseForm, \"ZBg4U5JWaoe8Y12raOq8W5WD+y0=\");\n_c = ClickHouseForm;\n/* harmony default export */ __webpack_exports__[\"default\"] = (ClickHouseForm);\nvar _c;\n$RefreshReg$(_c, \"ClickHouseForm\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvQ2xpY2tIb3VzZUZvcm0udHN4IiwibWFwcGluZ3MiOiI7Ozs7OztBQUV3QztBQVV4QyxNQUFNRSxpQkFBZ0Q7UUFBQyxFQUFFQyxRQUFRLEVBQUVDLGFBQWEsRUFBRUMsU0FBUyxFQUFFQyxLQUFLLEVBQUU7O0lBQ2xHLE1BQU0sQ0FBQ0MsUUFBUUMsVUFBVSxHQUFHUCwrQ0FBUUEsQ0FBbUJHO0lBQ3ZELE1BQU0sQ0FBQ0ssWUFBWUMsY0FBYyxHQUFHVCwrQ0FBUUEsQ0FBeUIsQ0FBQztJQUV0RSxNQUFNVSxlQUFlLENBQUNDO1FBQ3BCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFLEdBQUdKLEVBQUVLLE1BQU07UUFDL0MsTUFBTUMsV0FBV0gsU0FBUyxhQUFhQyxVQUFVRjtRQUNqRCxNQUFNSyxZQUFZO1lBQUUsR0FBR1osTUFBTTtZQUFFLENBQUNNLEtBQUssRUFBRUUsU0FBUyxXQUFXSyxPQUFPTixTQUFTSTtRQUFTO1FBQ3BGVixVQUFVVztRQUVWLCtDQUErQztRQUMvQyxJQUFJVixVQUFVLENBQUNJLEtBQUssRUFBRTtZQUNwQkgsY0FBY1csQ0FBQUEsT0FBUztvQkFBRSxHQUFHQSxJQUFJO29CQUFFLENBQUNSLEtBQUssRUFBRTtnQkFBRztRQUMvQztJQUNGO0lBRUEsTUFBTVMsZUFBZTtRQUNuQixNQUFNQyxTQUFpQyxDQUFDO1FBRXhDLElBQUksQ0FBQ2hCLE9BQU9pQixJQUFJLENBQUNDLElBQUksSUFBSTtZQUN2QkYsT0FBT0MsSUFBSSxHQUFHO1FBQ2hCO1FBRUEsSUFBSSxDQUFDakIsT0FBT21CLElBQUksSUFBSW5CLE9BQU9tQixJQUFJLElBQUksR0FBRztZQUNwQ0gsT0FBT0csSUFBSSxHQUFHO1FBQ2hCO1FBRUEsSUFBSSxDQUFDbkIsT0FBT29CLFFBQVEsQ0FBQ0YsSUFBSSxJQUFJO1lBQzNCRixPQUFPSSxRQUFRLEdBQUc7UUFDcEI7UUFFQSxJQUFJLENBQUNwQixPQUFPcUIsSUFBSSxDQUFDSCxJQUFJLElBQUk7WUFDdkJGLE9BQU9LLElBQUksR0FBRztRQUNoQjtRQUVBLElBQUksQ0FBQ3JCLE9BQU9zQixRQUFRLENBQUNKLElBQUksSUFBSTtZQUMzQkYsT0FBT00sUUFBUSxHQUFHO1FBQ3BCO1FBRUFuQixjQUFjYTtRQUNkLE9BQU9PLE9BQU9DLElBQUksQ0FBQ1IsUUFBUVMsTUFBTSxLQUFLO0lBQ3hDO0lBRUEsTUFBTUMsZUFBZSxDQUFDckI7UUFDcEJBLEVBQUVzQixjQUFjO1FBQ2hCLElBQUlaLGdCQUFnQjtZQUNsQm5CLFNBQVNJO1FBQ1g7SUFDRjtJQUVBLHFCQUNFLDhEQUFDNEI7UUFBSUMsV0FBVTs7MEJBQ2IsOERBQUNDO2dCQUFHRCxXQUFVOzBCQUE0QzlCOzs7Ozs7MEJBRTFELDhEQUFDZ0M7Z0JBQUtuQyxVQUFVOEI7Z0JBQWNHLFdBQVU7O2tDQUN0Qyw4REFBQ0Q7d0JBQUlDLFdBQVU7OzBDQUViLDhEQUFDRDtnQ0FBSUMsV0FBVTs7a0RBQ2IsOERBQUNHO3dDQUFNSCxXQUFVO2tEQUNmLDRFQUFDSTs0Q0FBS0osV0FBVywwQkFBZ0UsT0FBdEMzQixXQUFXZSxJQUFJLEdBQUcsaUJBQWlCO3NEQUFNOzs7Ozs7Ozs7OztrREFFdEYsOERBQUNpQjt3Q0FDQzFCLE1BQUs7d0NBQ0xGLE1BQUs7d0NBQ0xDLE9BQU9QLE9BQU9pQixJQUFJO3dDQUNsQmtCLFVBQVUvQjt3Q0FDVmdDLGFBQVk7d0NBQ1pQLFdBQVcsU0FBbUkzQixPQUExSEEsV0FBV2UsSUFBSSxHQUFHLDZCQUE2QixtQkFBa0IsMkRBQXVILE9BQTlEZixXQUFXZSxJQUFJLEdBQUcsdUJBQXVCO3dDQUN2TG9CLFVBQVV2Qzs7Ozs7O29DQUVYSSxXQUFXZSxJQUFJLGtCQUFJLDhEQUFDcUI7d0NBQUVULFdBQVU7a0RBQXlDM0IsV0FBV2UsSUFBSTs7Ozs7Ozs7Ozs7OzBDQUkzRiw4REFBQ1c7Z0NBQUlDLFdBQVU7O2tEQUNiLDhEQUFDRzt3Q0FBTUgsV0FBVTtrREFDZiw0RUFBQ0k7NENBQUtKLFdBQVcsMEJBQWdFLE9BQXRDM0IsV0FBV2lCLElBQUksR0FBRyxpQkFBaUI7c0RBQU07Ozs7Ozs7Ozs7O2tEQUV0Riw4REFBQ2U7d0NBQ0MxQixNQUFLO3dDQUNMRixNQUFLO3dDQUNMQyxPQUFPUCxPQUFPbUIsSUFBSTt3Q0FDbEJnQixVQUFVL0I7d0NBQ1ZnQyxhQUFZO3dDQUNaUCxXQUFXLFNBQW1JM0IsT0FBMUhBLFdBQVdpQixJQUFJLEdBQUcsNkJBQTZCLG1CQUFrQiwyREFBdUgsT0FBOURqQixXQUFXaUIsSUFBSSxHQUFHLHVCQUF1Qjt3Q0FDdkxrQixVQUFVdkM7Ozs7OztvQ0FFWEksV0FBV2lCLElBQUksa0JBQUksOERBQUNtQjt3Q0FBRVQsV0FBVTtrREFBeUMzQixXQUFXaUIsSUFBSTs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQUs3Riw4REFBQ1M7d0JBQUlDLFdBQVU7OzBDQUNiLDhEQUFDRztnQ0FBTUgsV0FBVTswQ0FDZiw0RUFBQ0k7b0NBQUtKLFdBQVcsMEJBQW9FLE9BQTFDM0IsV0FBV2tCLFFBQVEsR0FBRyxpQkFBaUI7OENBQU07Ozs7Ozs7Ozs7OzBDQUUxRiw4REFBQ2M7Z0NBQ0MxQixNQUFLO2dDQUNMRixNQUFLO2dDQUNMQyxPQUFPUCxPQUFPb0IsUUFBUTtnQ0FDdEJlLFVBQVUvQjtnQ0FDVmdDLGFBQVk7Z0NBQ1pQLFdBQVcsU0FBdUkzQixPQUE5SEEsV0FBV2tCLFFBQVEsR0FBRyw2QkFBNkIsbUJBQWtCLDJEQUEySCxPQUFsRWxCLFdBQVdrQixRQUFRLEdBQUcsdUJBQXVCO2dDQUMvTGlCLFVBQVV2Qzs7Ozs7OzRCQUVYSSxXQUFXa0IsUUFBUSxrQkFBSSw4REFBQ2tCO2dDQUFFVCxXQUFVOzBDQUF5QzNCLFdBQVdrQixRQUFROzs7Ozs7Ozs7Ozs7a0NBSW5HLDhEQUFDUTt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNHO2dDQUFNSCxXQUFVOzBDQUNmLDRFQUFDSTtvQ0FBS0osV0FBVywwQkFBZ0UsT0FBdEMzQixXQUFXbUIsSUFBSSxHQUFHLGlCQUFpQjs4Q0FBTTs7Ozs7Ozs7Ozs7MENBRXRGLDhEQUFDYTtnQ0FDQzFCLE1BQUs7Z0NBQ0xGLE1BQUs7Z0NBQ0xDLE9BQU9QLE9BQU9xQixJQUFJO2dDQUNsQmMsVUFBVS9CO2dDQUNWZ0MsYUFBWTtnQ0FDWlAsV0FBVyxTQUFtSTNCLE9BQTFIQSxXQUFXbUIsSUFBSSxHQUFHLDZCQUE2QixtQkFBa0IsMkRBQXVILE9BQTlEbkIsV0FBV21CLElBQUksR0FBRyx1QkFBdUI7Z0NBQ3ZMZ0IsVUFBVXZDOzs7Ozs7NEJBRVhJLFdBQVdtQixJQUFJLGtCQUFJLDhEQUFDaUI7Z0NBQUVULFdBQVU7MENBQXlDM0IsV0FBV21CLElBQUk7Ozs7Ozs7Ozs7OztrQ0FJM0YsOERBQUNPO3dCQUFJQyxXQUFVOzswQ0FDYiw4REFBQ0c7Z0NBQU1ILFdBQVU7MENBQ2YsNEVBQUNJO29DQUFLSixXQUFXLDBCQUFvRSxPQUExQzNCLFdBQVdvQixRQUFRLEdBQUcsaUJBQWlCOzhDQUFNOzs7Ozs7Ozs7OzswQ0FFMUYsOERBQUNZO2dDQUNDMUIsTUFBSztnQ0FDTEYsTUFBSztnQ0FDTEMsT0FBT1AsT0FBT3NCLFFBQVE7Z0NBQ3RCYSxVQUFVL0I7Z0NBQ1ZnQyxhQUFZO2dDQUNaUCxXQUFXLFNBQXVJM0IsT0FBOUhBLFdBQVdvQixRQUFRLEdBQUcsNkJBQTZCLG1CQUFrQiwyREFBMkgsT0FBbEVwQixXQUFXb0IsUUFBUSxHQUFHLHVCQUF1QjtnQ0FDL0xlLFVBQVV2Qzs7Ozs7OzRCQUVYSSxXQUFXb0IsUUFBUSxrQkFBSSw4REFBQ2dCO2dDQUFFVCxXQUFVOzBDQUF5QzNCLFdBQVdvQixRQUFROzs7Ozs7Ozs7Ozs7a0NBSW5HLDhEQUFDTTt3QkFBSUMsV0FBVTtrQ0FDYiw0RUFBQ0c7NEJBQU1ILFdBQVU7OzhDQUNmLDhEQUFDSztvQ0FDQzFCLE1BQUs7b0NBQ0xGLE1BQUs7b0NBQ0xHLFNBQVNULE9BQU91QyxNQUFNO29DQUN0QkosVUFBVS9CO29DQUNWeUIsV0FBVTtvQ0FDVlEsVUFBVXZDOzs7Ozs7OENBRVosOERBQUNtQztvQ0FBS0osV0FBVTs4Q0FBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7a0NBSWpDLDhEQUFDRDt3QkFBSUMsV0FBVTtrQ0FDYiw0RUFBQ1c7NEJBQ0NoQyxNQUFLOzRCQUNMcUIsV0FBVTs0QkFDVlEsVUFBVXZDO3NDQUVUQSwwQkFDQzs7a0RBQ0UsOERBQUNtQzt3Q0FBS0osV0FBVTs7Ozs7O29DQUFpRDs7K0NBSW5FOzs7Ozs7Ozs7OztvQkFLTE4sT0FBT0MsSUFBSSxDQUFDdEIsWUFBWXVCLE1BQU0sR0FBRyxtQkFDaEMsOERBQUNHO3dCQUFJQyxXQUFVO2tDQUNiLDRFQUFDRDs0QkFBSUMsV0FBVTs7OENBQ2IsOERBQUNZO29DQUFJWixXQUFVO29DQUE0QmEsTUFBSztvQ0FBT0MsUUFBTztvQ0FBZUMsU0FBUTtvQ0FBWUMsT0FBTTs4Q0FDckcsNEVBQUNDO3dDQUFLQyxlQUFjO3dDQUFRQyxnQkFBZTt3Q0FBUUMsYUFBWTt3Q0FBSUMsR0FBRTs7Ozs7Ozs7Ozs7OENBRXZFLDhEQUFDakI7b0NBQUtKLFdBQVU7OENBQTJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU96RDtHQTNMTWxDO0tBQUFBO0FBNkxOLCtEQUFlQSxjQUFjQSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvQ2xpY2tIb3VzZUZvcm0udHN4PzY2OGUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xyXG5cclxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDbGlja0hvdXNlQ29uZmlnIH0gZnJvbSAnQC9saWIvYXBpJztcclxuXHJcbmludGVyZmFjZSBDbGlja0hvdXNlRm9ybVByb3BzIHtcclxuICBvblN1Ym1pdDogKGNvbmZpZzogQ2xpY2tIb3VzZUNvbmZpZykgPT4gdm9pZDtcclxuICBpbml0aWFsVmFsdWVzOiBDbGlja0hvdXNlQ29uZmlnO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbjtcclxuICB0aXRsZTogc3RyaW5nO1xyXG59XHJcblxyXG5jb25zdCBDbGlja0hvdXNlRm9ybTogUmVhY3QuRkM8Q2xpY2tIb3VzZUZvcm1Qcm9wcz4gPSAoeyBvblN1Ym1pdCwgaW5pdGlhbFZhbHVlcywgaXNMb2FkaW5nLCB0aXRsZSB9KSA9PiB7XHJcbiAgY29uc3QgW2NvbmZpZywgc2V0Q29uZmlnXSA9IHVzZVN0YXRlPENsaWNrSG91c2VDb25maWc+KGluaXRpYWxWYWx1ZXMpO1xyXG4gIGNvbnN0IFt2YWxpZGF0aW9uLCBzZXRWYWxpZGF0aW9uXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KTtcclxuXHJcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XHJcbiAgICBjb25zdCB7IG5hbWUsIHZhbHVlLCB0eXBlLCBjaGVja2VkIH0gPSBlLnRhcmdldDtcclxuICAgIGNvbnN0IG5ld1ZhbHVlID0gdHlwZSA9PT0gJ2NoZWNrYm94JyA/IGNoZWNrZWQgOiB2YWx1ZTtcclxuICAgIGNvbnN0IG5ld0NvbmZpZyA9IHsgLi4uY29uZmlnLCBbbmFtZV06IHR5cGUgPT09ICdudW1iZXInID8gTnVtYmVyKHZhbHVlKSA6IG5ld1ZhbHVlIH07XHJcbiAgICBzZXRDb25maWcobmV3Q29uZmlnKTtcclxuICAgIFxyXG4gICAgLy8gQ2xlYXIgdmFsaWRhdGlvbiBlcnJvciB3aGVuIGZpZWxkIGlzIHVwZGF0ZWRcclxuICAgIGlmICh2YWxpZGF0aW9uW25hbWVdKSB7XHJcbiAgICAgIHNldFZhbGlkYXRpb24ocHJldiA9PiAoeyAuLi5wcmV2LCBbbmFtZV06ICcnIH0pKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCB2YWxpZGF0ZUZvcm0gPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIFxyXG4gICAgaWYgKCFjb25maWcuaG9zdC50cmltKCkpIHtcclxuICAgICAgZXJyb3JzLmhvc3QgPSAnSG9zdCBpcyByZXF1aXJlZCc7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICghY29uZmlnLnBvcnQgfHwgY29uZmlnLnBvcnQgPD0gMCkge1xyXG4gICAgICBlcnJvcnMucG9ydCA9ICdQb3J0IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoIWNvbmZpZy5kYXRhYmFzZS50cmltKCkpIHtcclxuICAgICAgZXJyb3JzLmRhdGFiYXNlID0gJ0RhdGFiYXNlIGlzIHJlcXVpcmVkJztcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKCFjb25maWcudXNlci50cmltKCkpIHtcclxuICAgICAgZXJyb3JzLnVzZXIgPSAnVXNlcm5hbWUgaXMgcmVxdWlyZWQnO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoIWNvbmZpZy5qd3RUb2tlbi50cmltKCkpIHtcclxuICAgICAgZXJyb3JzLmp3dFRva2VuID0gJ0pXVCB0b2tlbiBpcyByZXF1aXJlZCc7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHNldFZhbGlkYXRpb24oZXJyb3JzKTtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA9PT0gMDtcclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBpZiAodmFsaWRhdGVGb3JtKCkpIHtcclxuICAgICAgb25TdWJtaXQoY29uZmlnKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJiZy13aGl0ZSBzaGFkb3ctbGcgcm91bmRlZC1sZyBwLTYgbWF4LXcteGwgbXgtYXV0byB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgaG92ZXI6c2hhZG93LXhsXCI+XHJcbiAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIG1iLTYgdGV4dC1wcmltYXJ5XCI+e3RpdGxlfTwvaDI+XHJcbiAgICAgIFxyXG4gICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fSBjbGFzc05hbWU9XCJzcGFjZS15LTZcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgZ2FwLTZcIj5cclxuICAgICAgICAgIHsvKiBIb3N0ICovfVxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgbGFiZWwtdGV4dCBmb250LW1lZGl1bSAke3ZhbGlkYXRpb24uaG9zdCA/ICd0ZXh0LXJlZC02MDAnIDogJyd9YH0+SG9zdDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIG5hbWU9XCJob3N0XCJcclxuICAgICAgICAgICAgICB2YWx1ZT17Y29uZmlnLmhvc3R9XHJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImxvY2FsaG9zdFwiXHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgaW5wdXQgJHt2YWxpZGF0aW9uLmhvc3QgPyAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTUwJyA6ICdib3JkZXItZ3JheS0zMDAnfSB3LWZ1bGwgcm91bmRlZC1tZCBwLTIgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiAke3ZhbGlkYXRpb24uaG9zdCA/ICdmb2N1czpyaW5nLXJlZC01MDAnIDogJ2ZvY3VzOnJpbmctcHJpbWFyeSd9YH1cclxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICB7dmFsaWRhdGlvbi5ob3N0ICYmIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTYwMCB0ZXh0LXNtIG10LTEgZm9udC1tZWRpdW1cIj57dmFsaWRhdGlvbi5ob3N0fTwvcD59XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgey8qIFBvcnQgKi99XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwibGFiZWxcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2BsYWJlbC10ZXh0IGZvbnQtbWVkaXVtICR7dmFsaWRhdGlvbi5wb3J0ID8gJ3RleHQtcmVkLTYwMCcgOiAnJ31gfT5Qb3J0PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICBuYW1lPVwicG9ydFwiXHJcbiAgICAgICAgICAgICAgdmFsdWU9e2NvbmZpZy5wb3J0fVxyXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCI4MTIzXCJcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BpbnB1dCAke3ZhbGlkYXRpb24ucG9ydCA/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtNTAnIDogJ2JvcmRlci1ncmF5LTMwMCd9IHctZnVsbCByb3VuZGVkLW1kIHAtMiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yICR7dmFsaWRhdGlvbi5wb3J0ID8gJ2ZvY3VzOnJpbmctcmVkLTUwMCcgOiAnZm9jdXM6cmluZy1wcmltYXJ5J31gfVxyXG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIHt2YWxpZGF0aW9uLnBvcnQgJiYgPHAgY2xhc3NOYW1lPVwidGV4dC1yZWQtNjAwIHRleHQtc20gbXQtMSBmb250LW1lZGl1bVwiPnt2YWxpZGF0aW9uLnBvcnR9PC9wPn1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICB7LyogRGF0YWJhc2UgKi99XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJsYWJlbFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2BsYWJlbC10ZXh0IGZvbnQtbWVkaXVtICR7dmFsaWRhdGlvbi5kYXRhYmFzZSA/ICd0ZXh0LXJlZC02MDAnIDogJyd9YH0+RGF0YWJhc2U8L3NwYW4+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgbmFtZT1cImRhdGFiYXNlXCJcclxuICAgICAgICAgICAgdmFsdWU9e2NvbmZpZy5kYXRhYmFzZX1cclxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJkZWZhdWx0XCJcclxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgaW5wdXQgJHt2YWxpZGF0aW9uLmRhdGFiYXNlID8gJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC01MCcgOiAnYm9yZGVyLWdyYXktMzAwJ30gdy1mdWxsIHJvdW5kZWQtbWQgcC0yIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgJHt2YWxpZGF0aW9uLmRhdGFiYXNlID8gJ2ZvY3VzOnJpbmctcmVkLTUwMCcgOiAnZm9jdXM6cmluZy1wcmltYXJ5J31gfVxyXG4gICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIHt2YWxpZGF0aW9uLmRhdGFiYXNlICYmIDxwIGNsYXNzTmFtZT1cInRleHQtcmVkLTYwMCB0ZXh0LXNtIG10LTEgZm9udC1tZWRpdW1cIj57dmFsaWRhdGlvbi5kYXRhYmFzZX08L3A+fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIHsvKiBVc2VyICovfVxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwibGFiZWxcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgbGFiZWwtdGV4dCBmb250LW1lZGl1bSAke3ZhbGlkYXRpb24udXNlciA/ICd0ZXh0LXJlZC02MDAnIDogJyd9YH0+VXNlcm5hbWU8L3NwYW4+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgbmFtZT1cInVzZXJcIlxyXG4gICAgICAgICAgICB2YWx1ZT17Y29uZmlnLnVzZXJ9XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZGVmYXVsdFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YGlucHV0ICR7dmFsaWRhdGlvbi51c2VyID8gJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC01MCcgOiAnYm9yZGVyLWdyYXktMzAwJ30gdy1mdWxsIHJvdW5kZWQtbWQgcC0yIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgJHt2YWxpZGF0aW9uLnVzZXIgPyAnZm9jdXM6cmluZy1yZWQtNTAwJyA6ICdmb2N1czpyaW5nLXByaW1hcnknfWB9XHJcbiAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAge3ZhbGlkYXRpb24udXNlciAmJiA8cCBjbGFzc05hbWU9XCJ0ZXh0LXJlZC02MDAgdGV4dC1zbSBtdC0xIGZvbnQtbWVkaXVtXCI+e3ZhbGlkYXRpb24udXNlcn08L3A+fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIHsvKiBKV1QgVG9rZW4gKi99XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJsYWJlbFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2BsYWJlbC10ZXh0IGZvbnQtbWVkaXVtICR7dmFsaWRhdGlvbi5qd3RUb2tlbiA/ICd0ZXh0LXJlZC02MDAnIDogJyd9YH0+SldUIFRva2VuPC9zcGFuPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICBuYW1lPVwiand0VG9rZW5cIlxyXG4gICAgICAgICAgICB2YWx1ZT17Y29uZmlnLmp3dFRva2VufVxyXG4gICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImV5SmhiR2NpT2lKSVV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS4uLlwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YGlucHV0ICR7dmFsaWRhdGlvbi5qd3RUb2tlbiA/ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtNTAnIDogJ2JvcmRlci1ncmF5LTMwMCd9IHctZnVsbCByb3VuZGVkLW1kIHAtMiBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yICR7dmFsaWRhdGlvbi5qd3RUb2tlbiA/ICdmb2N1czpyaW5nLXJlZC01MDAnIDogJ2ZvY3VzOnJpbmctcHJpbWFyeSd9YH1cclxuICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICB7dmFsaWRhdGlvbi5qd3RUb2tlbiAmJiA8cCBjbGFzc05hbWU9XCJ0ZXh0LXJlZC02MDAgdGV4dC1zbSBtdC0xIGZvbnQtbWVkaXVtXCI+e3ZhbGlkYXRpb24uand0VG9rZW59PC9wPn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICB7LyogU2VjdXJlICovfVxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiY3Vyc29yLXBvaW50ZXIgbGFiZWwganVzdGlmeS1zdGFydCBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgIG5hbWU9XCJzZWN1cmVcIlxyXG4gICAgICAgICAgICAgIGNoZWNrZWQ9e2NvbmZpZy5zZWN1cmV9XHJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cclxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJjaGVja2JveCBjaGVja2JveC1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsYWJlbC10ZXh0XCI+VXNlIEhUVFBTPC9zcGFuPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LThcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeSB3LWZ1bGxcIlxyXG4gICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7aXNMb2FkaW5nID8gKFxyXG4gICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsb2FkaW5nIGxvYWRpbmctc3Bpbm5lciBsb2FkaW5nLXNtIG1yLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICBDb25uZWN0aW5nLi4uXHJcbiAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgJ0Nvbm5lY3QnXHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICB7T2JqZWN0LmtleXModmFsaWRhdGlvbikubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgcC0zIGJnLXJlZC01MCBib3JkZXIgYm9yZGVyLXJlZC0yMDAgcm91bmRlZC1tZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJoLTUgdy01IHRleHQtcmVkLTUwMCBtci0yXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPVwiMlwiIGQ9XCJNMTIgOHY0bTAgNGguMDFNMjEgMTJhOSA5IDAgMTEtMTggMCA5IDkgMCAwMTE4IDB6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtcmVkLTYwMCBmb250LW1lZGl1bVwiPlBsZWFzZSBmaXggdGhlIGVycm9ycyBiZWZvcmUgY29udGludWluZzwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ2xpY2tIb3VzZUZvcm07ICJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwiQ2xpY2tIb3VzZUZvcm0iLCJvblN1Ym1pdCIsImluaXRpYWxWYWx1ZXMiLCJpc0xvYWRpbmciLCJ0aXRsZSIsImNvbmZpZyIsInNldENvbmZpZyIsInZhbGlkYXRpb24iLCJzZXRWYWxpZGF0aW9uIiwiaGFuZGxlQ2hhbmdlIiwiZSIsIm5hbWUiLCJ2YWx1ZSIsInR5cGUiLCJjaGVja2VkIiwidGFyZ2V0IiwibmV3VmFsdWUiLCJuZXdDb25maWciLCJOdW1iZXIiLCJwcmV2IiwidmFsaWRhdGVGb3JtIiwiZXJyb3JzIiwiaG9zdCIsInRyaW0iLCJwb3J0IiwiZGF0YWJhc2UiLCJ1c2VyIiwiand0VG9rZW4iLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiaGFuZGxlU3VibWl0IiwicHJldmVudERlZmF1bHQiLCJkaXYiLCJjbGFzc05hbWUiLCJoMiIsImZvcm0iLCJsYWJlbCIsInNwYW4iLCJpbnB1dCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJkaXNhYmxlZCIsInAiLCJzZWN1cmUiLCJidXR0b24iLCJzdmciLCJmaWxsIiwic3Ryb2tlIiwidmlld0JveCIsInhtbG5zIiwicGF0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ClickHouseForm.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./components/DataPreview.tsx": +/*!************************************!*\ + !*** ./components/DataPreview.tsx ***! + \************************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ DataPreview; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nfunction DataPreview(param) {\n let { data, onStartIngestion, onBack, isLoading } = param;\n _s();\n const [page, setPage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(1);\n const rowsPerPage = 10;\n // Calculate total pages\n const totalPages = Math.ceil((data.length - 1) / rowsPerPage); // Subtract header row\n // Get header row (first row)\n const headerRow = data.length > 0 ? data[0] : [];\n // Get current page's data\n const startIndex = 1 + (page - 1) * rowsPerPage; // Skip header row\n const endIndex = Math.min(startIndex + rowsPerPage, data.length);\n const currentPageData = data.slice(startIndex, endIndex);\n const goToPage = (newPage)=>{\n setPage(Math.max(1, Math.min(newPage, totalPages)));\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-semibold mb-6\",\n children: \"Data Preview\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 38,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n \"Showing first 100 records (preview). Total records: \",\n data.length > 1 ? data.length - 1 : 0\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 41,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 40,\n columnNumber: 7\n }, this),\n data.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"py-8 text-center text-gray-500\",\n children: \"No data available for preview.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 47,\n columnNumber: 9\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"overflow-x-auto rounded-lg border border-gray-200\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"table\", {\n className: \"min-w-full divide-y divide-gray-200\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"thead\", {\n className: \"bg-gray-50\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n children: headerRow.map((header, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"th\", {\n className: \"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\",\n children: header\n }, index, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 57,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 55,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 54,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tbody\", {\n className: \"bg-white divide-y divide-gray-200\",\n children: currentPageData.map((row, rowIndex)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"tr\", {\n className: rowIndex % 2 === 0 ? \"bg-white\" : \"bg-gray-50\",\n children: row.map((cell, cellIndex)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"td\", {\n className: \"px-6 py-4 whitespace-nowrap text-sm text-gray-500\",\n children: cell || /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-300\",\n children: \"null\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 71,\n columnNumber: 34\n }, this)\n }, cellIndex, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 70,\n columnNumber: 23\n }, this))\n }, rowIndex, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 68,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 66,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 53,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 52,\n columnNumber: 11\n }, this),\n totalPages > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"px-3 py-1 border border-gray-300 rounded-md text-sm\",\n onClick: ()=>goToPage(page - 1),\n disabled: page === 1,\n children: \"Previous\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 82,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm text-gray-600\",\n children: [\n \"Page \",\n page,\n \" of \",\n totalPages\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 89,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"px-3 py-1 border border-gray-300 rounded-md text-sm\",\n onClick: ()=>goToPage(page + 1),\n disabled: page === totalPages,\n children: \"Next\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 92,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 81,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 flex justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"btn bg-gray-500 hover:bg-gray-600\",\n onClick: onBack,\n disabled: isLoading,\n children: \"Back\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 105,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"btn btn-primary\",\n onClick: onStartIngestion,\n disabled: isLoading || data.length <= 1,\n children: isLoading ? \"Processing...\" : \"Start Ingestion\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 113,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 104,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\DataPreview.tsx\",\n lineNumber: 37,\n columnNumber: 5\n }, this);\n}\n_s(DataPreview, \"/DWZXlUKUNETkaaw7t58aXy53hg=\");\n_c = DataPreview;\nvar _c;\n$RefreshReg$(_c, \"DataPreview\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvRGF0YVByZXZpZXcudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVpQztBQVNsQixTQUFTQyxZQUFZLEtBS2pCO1FBTGlCLEVBQ2xDQyxJQUFJLEVBQ0pDLGdCQUFnQixFQUNoQkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1EsR0FMaUI7O0lBTWxDLE1BQU0sQ0FBQ0MsTUFBTUMsUUFBUSxHQUFHUCwrQ0FBUUEsQ0FBQztJQUNqQyxNQUFNUSxjQUFjO0lBRXBCLHdCQUF3QjtJQUN4QixNQUFNQyxhQUFhQyxLQUFLQyxJQUFJLENBQUMsQ0FBQ1QsS0FBS1UsTUFBTSxHQUFHLEtBQUtKLGNBQWMsc0JBQXNCO0lBRXJGLDZCQUE2QjtJQUM3QixNQUFNSyxZQUFZWCxLQUFLVSxNQUFNLEdBQUcsSUFBSVYsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFO0lBRWhELDBCQUEwQjtJQUMxQixNQUFNWSxhQUFhLElBQUksQ0FBQ1IsT0FBTyxLQUFLRSxhQUFhLGtCQUFrQjtJQUNuRSxNQUFNTyxXQUFXTCxLQUFLTSxHQUFHLENBQUNGLGFBQWFOLGFBQWFOLEtBQUtVLE1BQU07SUFDL0QsTUFBTUssa0JBQWtCZixLQUFLZ0IsS0FBSyxDQUFDSixZQUFZQztJQUUvQyxNQUFNSSxXQUFXLENBQUNDO1FBQ2hCYixRQUFRRyxLQUFLVyxHQUFHLENBQUMsR0FBR1gsS0FBS00sR0FBRyxDQUFDSSxTQUFTWDtJQUN4QztJQUVBLHFCQUNFLDhEQUFDYTtRQUFJQyxXQUFVOzswQkFDYiw4REFBQ0M7Z0JBQUdELFdBQVU7MEJBQTZCOzs7Ozs7MEJBRTNDLDhEQUFDRDtnQkFBSUMsV0FBVTswQkFDYiw0RUFBQ0U7b0JBQUtGLFdBQVU7O3dCQUF3Qjt3QkFDZXJCLEtBQUtVLE1BQU0sR0FBRyxJQUFJVixLQUFLVSxNQUFNLEdBQUcsSUFBSTs7Ozs7Ozs7Ozs7O1lBSTVGVixLQUFLVSxNQUFNLEtBQUssa0JBQ2YsOERBQUNVO2dCQUFJQyxXQUFVOzBCQUFpQzs7Ozs7cUNBSWhEOztrQ0FDRSw4REFBQ0Q7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNHOzRCQUFNSCxXQUFVOzs4Q0FDZiw4REFBQ0k7b0NBQU1KLFdBQVU7OENBQ2YsNEVBQUNLO2tEQUNFZixVQUFVZ0IsR0FBRyxDQUFDLENBQUNDLFFBQVFDLHNCQUN0Qiw4REFBQ0M7Z0RBRUNULFdBQVU7MERBRVRPOytDQUhJQzs7Ozs7Ozs7Ozs7Ozs7OzhDQVFiLDhEQUFDRTtvQ0FBTVYsV0FBVTs4Q0FDZE4sZ0JBQWdCWSxHQUFHLENBQUMsQ0FBQ0ssS0FBS0MseUJBQ3pCLDhEQUFDUDs0Q0FBa0JMLFdBQVdZLFdBQVcsTUFBTSxJQUFJLGFBQWE7c0RBQzdERCxJQUFJTCxHQUFHLENBQUMsQ0FBQ08sTUFBTUMsMEJBQ2QsOERBQUNDO29EQUFtQmYsV0FBVTs4REFDM0JhLHNCQUFRLDhEQUFDWDt3REFBS0YsV0FBVTtrRUFBZ0I7Ozs7OzttREFEbENjOzs7OzsyQ0FGSkY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFZaEIxQixhQUFhLG1CQUNaLDhEQUFDYTt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNnQjtnQ0FDQ2hCLFdBQVU7Z0NBQ1ZpQixTQUFTLElBQU1yQixTQUFTYixPQUFPO2dDQUMvQm1DLFVBQVVuQyxTQUFTOzBDQUNwQjs7Ozs7OzBDQUdELDhEQUFDbUI7Z0NBQUtGLFdBQVU7O29DQUF3QjtvQ0FDaENqQjtvQ0FBSztvQ0FBS0c7Ozs7Ozs7MENBRWxCLDhEQUFDOEI7Z0NBQ0NoQixXQUFVO2dDQUNWaUIsU0FBUyxJQUFNckIsU0FBU2IsT0FBTztnQ0FDL0JtQyxVQUFVbkMsU0FBU0c7MENBQ3BCOzs7Ozs7Ozs7Ozs7OzswQkFRVCw4REFBQ2E7Z0JBQUlDLFdBQVU7O2tDQUNiLDhEQUFDZ0I7d0JBQ0NHLE1BQUs7d0JBQ0xuQixXQUFVO3dCQUNWaUIsU0FBU3BDO3dCQUNUcUMsVUFBVXBDO2tDQUNYOzs7Ozs7a0NBR0QsOERBQUNrQzt3QkFDQ0csTUFBSzt3QkFDTG5CLFdBQVU7d0JBQ1ZpQixTQUFTckM7d0JBQ1RzQyxVQUFVcEMsYUFBYUgsS0FBS1UsTUFBTSxJQUFJO2tDQUVyQ1AsWUFBWSxrQkFBa0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUt6QztHQWhId0JKO0tBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbXBvbmVudHMvRGF0YVByZXZpZXcudHN4PzM0YmUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xyXG5cclxuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XHJcblxyXG5pbnRlcmZhY2UgRGF0YVByZXZpZXdQcm9wcyB7XHJcbiAgZGF0YTogc3RyaW5nW11bXTtcclxuICBvblN0YXJ0SW5nZXN0aW9uOiAoKSA9PiB2b2lkO1xyXG4gIG9uQmFjazogKCkgPT4gdm9pZDtcclxuICBpc0xvYWRpbmc6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhdGFQcmV2aWV3KHtcclxuICBkYXRhLFxyXG4gIG9uU3RhcnRJbmdlc3Rpb24sXHJcbiAgb25CYWNrLFxyXG4gIGlzTG9hZGluZ1xyXG59OiBEYXRhUHJldmlld1Byb3BzKSB7XHJcbiAgY29uc3QgW3BhZ2UsIHNldFBhZ2VdID0gdXNlU3RhdGUoMSk7XHJcbiAgY29uc3Qgcm93c1BlclBhZ2UgPSAxMDtcclxuICBcclxuICAvLyBDYWxjdWxhdGUgdG90YWwgcGFnZXNcclxuICBjb25zdCB0b3RhbFBhZ2VzID0gTWF0aC5jZWlsKChkYXRhLmxlbmd0aCAtIDEpIC8gcm93c1BlclBhZ2UpOyAvLyBTdWJ0cmFjdCBoZWFkZXIgcm93XHJcbiAgXHJcbiAgLy8gR2V0IGhlYWRlciByb3cgKGZpcnN0IHJvdylcclxuICBjb25zdCBoZWFkZXJSb3cgPSBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhWzBdIDogW107XHJcbiAgXHJcbiAgLy8gR2V0IGN1cnJlbnQgcGFnZSdzIGRhdGFcclxuICBjb25zdCBzdGFydEluZGV4ID0gMSArIChwYWdlIC0gMSkgKiByb3dzUGVyUGFnZTsgLy8gU2tpcCBoZWFkZXIgcm93XHJcbiAgY29uc3QgZW5kSW5kZXggPSBNYXRoLm1pbihzdGFydEluZGV4ICsgcm93c1BlclBhZ2UsIGRhdGEubGVuZ3RoKTtcclxuICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSBkYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcclxuICBcclxuICBjb25zdCBnb1RvUGFnZSA9IChuZXdQYWdlOiBudW1iZXIpID0+IHtcclxuICAgIHNldFBhZ2UoTWF0aC5tYXgoMSwgTWF0aC5taW4obmV3UGFnZSwgdG90YWxQYWdlcykpKTtcclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkXCI+XHJcbiAgICAgIDxoMiBjbGFzc05hbWU9XCJ0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgbWItNlwiPkRhdGEgUHJldmlldzwvaDI+XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTRcIj5cclxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cclxuICAgICAgICAgIFNob3dpbmcgZmlyc3QgMTAwIHJlY29yZHMgKHByZXZpZXcpLiBUb3RhbCByZWNvcmRzOiB7ZGF0YS5sZW5ndGggPiAxID8gZGF0YS5sZW5ndGggLSAxIDogMH1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAge2RhdGEubGVuZ3RoID09PSAwID8gKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHktOCB0ZXh0LWNlbnRlciB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgICBObyBkYXRhIGF2YWlsYWJsZSBmb3IgcHJldmlldy5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKSA6IChcclxuICAgICAgICA8PlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJvdmVyZmxvdy14LWF1dG8gcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktMjAwXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJtaW4tdy1mdWxsIGRpdmlkZS15IGRpdmlkZS1ncmF5LTIwMFwiPlxyXG4gICAgICAgICAgICAgIDx0aGVhZCBjbGFzc05hbWU9XCJiZy1ncmF5LTUwXCI+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgIHtoZWFkZXJSb3cubWFwKChoZWFkZXIsIGluZGV4KSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIFxyXG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH0gXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC02IHB5LTMgdGV4dC1sZWZ0IHRleHQteHMgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIHtoZWFkZXJ9XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRib2R5IGNsYXNzTmFtZT1cImJnLXdoaXRlIGRpdmlkZS15IGRpdmlkZS1ncmF5LTIwMFwiPlxyXG4gICAgICAgICAgICAgICAge2N1cnJlbnRQYWdlRGF0YS5tYXAoKHJvdywgcm93SW5kZXgpID0+IChcclxuICAgICAgICAgICAgICAgICAgPHRyIGtleT17cm93SW5kZXh9IGNsYXNzTmFtZT17cm93SW5kZXggJSAyID09PSAwID8gJ2JnLXdoaXRlJyA6ICdiZy1ncmF5LTUwJ30+XHJcbiAgICAgICAgICAgICAgICAgICAge3Jvdy5tYXAoKGNlbGwsIGNlbGxJbmRleCkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGtleT17Y2VsbEluZGV4fSBjbGFzc05hbWU9XCJweC02IHB5LTQgd2hpdGVzcGFjZS1ub3dyYXAgdGV4dC1zbSB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjZWxsIHx8IDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS0zMDBcIj5udWxsPC9zcGFuPn1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgKSl9XHJcbiAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHt0b3RhbFBhZ2VzID4gMSAmJiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC0zIHB5LTEgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLW1kIHRleHQtc21cIlxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZ29Ub1BhZ2UocGFnZSAtIDEpfVxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3BhZ2UgPT09IDF9XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgUHJldmlvdXNcclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cclxuICAgICAgICAgICAgICAgIFBhZ2Uge3BhZ2V9IG9mIHt0b3RhbFBhZ2VzfVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC0zIHB5LTEgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLW1kIHRleHQtc21cIlxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZ29Ub1BhZ2UocGFnZSArIDEpfVxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3BhZ2UgPT09IHRvdGFsUGFnZXN9XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgTmV4dFxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgPC8+XHJcbiAgICAgICl9XHJcbiAgICAgIFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTYgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBiZy1ncmF5LTUwMCBob3ZlcjpiZy1ncmF5LTYwMFwiXHJcbiAgICAgICAgICBvbkNsaWNrPXtvbkJhY2t9XHJcbiAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxyXG4gICAgICAgID5cclxuICAgICAgICAgIEJhY2tcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICBvbkNsaWNrPXtvblN0YXJ0SW5nZXN0aW9ufVxyXG4gICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBkYXRhLmxlbmd0aCA8PSAxfVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtpc0xvYWRpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnU3RhcnQgSW5nZXN0aW9uJ31cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsIkRhdGFQcmV2aWV3IiwiZGF0YSIsIm9uU3RhcnRJbmdlc3Rpb24iLCJvbkJhY2siLCJpc0xvYWRpbmciLCJwYWdlIiwic2V0UGFnZSIsInJvd3NQZXJQYWdlIiwidG90YWxQYWdlcyIsIk1hdGgiLCJjZWlsIiwibGVuZ3RoIiwiaGVhZGVyUm93Iiwic3RhcnRJbmRleCIsImVuZEluZGV4IiwibWluIiwiY3VycmVudFBhZ2VEYXRhIiwic2xpY2UiLCJnb1RvUGFnZSIsIm5ld1BhZ2UiLCJtYXgiLCJkaXYiLCJjbGFzc05hbWUiLCJoMiIsInNwYW4iLCJ0YWJsZSIsInRoZWFkIiwidHIiLCJtYXAiLCJoZWFkZXIiLCJpbmRleCIsInRoIiwidGJvZHkiLCJyb3ciLCJyb3dJbmRleCIsImNlbGwiLCJjZWxsSW5kZXgiLCJ0ZCIsImJ1dHRvbiIsIm9uQ2xpY2siLCJkaXNhYmxlZCIsInR5cGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/DataPreview.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./components/FlatFileForm.tsx": +/*!*************************************!*\ + !*** ./components/FlatFileForm.tsx ***! + \*************************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ FlatFileForm; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nfunction FlatFileForm(param) {\n let { onSubmit, initialValues, requireFile, isLoading, title } = param;\n _s();\n const [config, setConfig] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialValues);\n const [file, setFile] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [validation, setValidation] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const [isDragActive, setIsDragActive] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const fileInputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const handleChange = (e)=>{\n const { name, value, type } = e.target;\n setConfig({\n ...config,\n [name]: type === \"checkbox\" ? e.target.checked : value\n });\n // Clear validation error when field is updated\n if (validation[name]) {\n setValidation((prev)=>({\n ...prev,\n [name]: \"\"\n }));\n }\n };\n const handleFileChange = (e)=>{\n if (e.target.files && e.target.files.length > 0) {\n setFile(e.target.files[0]);\n if (validation[\"file\"]) {\n setValidation((prev)=>({\n ...prev,\n \"file\": \"\"\n }));\n }\n }\n };\n const handleDragEnter = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n setIsDragActive(true);\n }, []);\n const handleDragLeave = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n setIsDragActive(false);\n }, []);\n const handleDragOver = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n }, []);\n const handleDrop = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n setIsDragActive(false);\n if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n const droppedFile = e.dataTransfer.files[0];\n // Check if file is CSV or TXT\n if (droppedFile.name.endsWith(\".csv\") || droppedFile.name.endsWith(\".txt\")) {\n setFile(droppedFile);\n if (validation[\"file\"]) {\n setValidation((prev)=>({\n ...prev,\n \"file\": \"\"\n }));\n }\n } else {\n setValidation((prev)=>({\n ...prev,\n \"file\": \"Only CSV and TXT files are supported\"\n }));\n }\n }\n }, [\n validation\n ]);\n const openFileSelector = ()=>{\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n const validateForm = ()=>{\n const errors = {};\n if (requireFile && !file) {\n errors.file = \"Please select a file to upload\";\n }\n if (!requireFile && (!config.fileName || !config.fileName.trim())) {\n errors.fileName = \"File name is required for export\";\n }\n setValidation(errors);\n return Object.keys(errors).length === 0;\n };\n const handleSubmit = (e)=>{\n e.preventDefault();\n if (validateForm()) {\n onSubmit(config, file || undefined);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white shadow-lg rounded-lg p-6 max-w-xl mx-auto transition-all duration-300 hover:shadow-xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-2xl font-semibold mb-6 text-primary\",\n children: title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 119,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n className: \"space-y-6\",\n children: [\n requireFile && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium \".concat(validation.file ? \"text-red-600\" : \"text-gray-700\", \" mb-2\"),\n children: \"Upload File\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 123,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-2 border-dashed rounded-lg p-6 transition-colors \".concat(isDragActive ? \"border-primary bg-blue-50\" : file ? \"border-green-400 bg-green-50\" : validation.file ? \"border-red-300 bg-red-50\" : \"border-gray-300 hover:border-gray-400\"),\n onDragEnter: handleDragEnter,\n onDragLeave: handleDragLeave,\n onDragOver: handleDragOver,\n onDrop: handleDrop,\n onClick: openFileSelector,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"file\",\n id: \"file\",\n name: \"file\",\n ref: fileInputRef,\n className: \"hidden\",\n accept: \".csv,.txt\",\n onChange: handleFileChange,\n required: requireFile\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 143,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: !file ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"mx-auto h-12 w-12 \".concat(validation.file ? \"text-red-400\" : \"text-gray-400\"),\n stroke: \"currentColor\",\n fill: \"none\",\n viewBox: \"0 0 48 48\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M28 8H12a4 4 0 00-4 4v20m32-12v8m0 0v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-4l-3.172-3.172a4 4 0 00-5.656 0L28 28M8 32l9.172-9.172a4 4 0 015.656 0L28 28m0 0l4 4m4-24h8m-4-4v8m-12 4h.02\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 158,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 157,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-gray-600\",\n children: isDragActive ? \"Drop your file here\" : \"Drag and drop your file here, or click to browse\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 165,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-gray-500\",\n children: \"Supported formats: CSV, TXT\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 168,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"h-8 w-8 text-green-500\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 175,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 174,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-left\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm font-medium text-gray-900\",\n children: file.name\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 178,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-gray-500\",\n children: [\n (file.size / 1024).toFixed(2),\n \" KB • Click to change\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 179,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 177,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 173,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 154,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 127,\n columnNumber: 13\n }, this),\n validation.file && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-red-600 font-medium\",\n children: validation.file\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 187,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 122,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"delimiter\",\n className: \"block text-sm font-medium text-gray-700 mb-1\",\n children: \"Delimiter\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"delimiter\",\n name: \"delimiter\",\n className: \"block w-full rounded-md border-gray-300 shadow-sm focus:border-primary focus:ring-primary\",\n value: config.delimiter,\n onChange: handleChange,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \",\",\n children: \"Comma (,)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 204,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \";\",\n children: \"Semicolon (;)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 205,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"\\\\t\",\n children: \"Tab (\\\\t)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 206,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"|\",\n children: \"Pipe (|)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 207,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n id: \"hasHeader\",\n name: \"hasHeader\",\n className: \"h-4 w-4 text-primary focus:ring-primary border-gray-300 rounded\",\n checked: config.hasHeader,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 212,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"hasHeader\",\n className: \"ml-2 block text-sm text-gray-700\",\n children: \"File has header row\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 220,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 211,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n !requireFile && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"fileName\",\n className: \"block text-sm font-medium \".concat(validation.fileName ? \"text-red-600\" : \"text-gray-700\", \" mb-1\"),\n children: \"Export File Name\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 228,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n id: \"fileName\",\n name: \"fileName\",\n className: \"block w-full \".concat(validation.fileName ? \"border-red-500 bg-red-50\" : \"border-gray-300\", \" rounded-md shadow-sm focus:outline-none focus:ring-2 \").concat(validation.fileName ? \"focus:ring-red-500\" : \"focus:ring-primary\"),\n placeholder: \"export.csv\",\n value: config.fileName,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 231,\n columnNumber: 13\n }, this),\n validation.fileName ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-sm text-red-600 font-medium\",\n children: validation.fileName\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 241,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-sm text-gray-500\",\n children: \"Leave empty to generate automatically.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 243,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 227,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"btn btn-primary px-6 py-2 rounded-md text-white font-medium transition-colors\",\n disabled: isLoading,\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"loading loading-spinner loading-sm mr-2\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n \"Processing...\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 257,\n columnNumber: 15\n }, this) : requireFile ? \"Upload & Process\" : \"Continue\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 250,\n columnNumber: 9\n }, this),\n Object.keys(validation).length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 p-3 bg-red-50 border border-red-200 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"h-5 w-5 text-red-500 mr-2\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 269,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 268,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-600 font-medium\",\n children: \"Please fix the errors before continuing\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 271,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 267,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 266,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 120,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 118,\n columnNumber: 5\n }, this);\n}\n_s(FlatFileForm, \"76E+ppvm//CroZsZJ1C31aekw8c=\");\n_c = FlatFileForm;\nvar _c;\n$RefreshReg$(_c, \"FlatFileForm\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvRmxhdEZpbGVGb3JtLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFc0Q7QUFXdkMsU0FBU0csYUFBYSxLQU1qQjtRQU5pQixFQUNuQ0MsUUFBUSxFQUNSQyxhQUFhLEVBQ2JDLFdBQVcsRUFDWEMsU0FBUyxFQUNUQyxLQUFLLEVBQ2EsR0FOaUI7O0lBT25DLE1BQU0sQ0FBQ0MsUUFBUUMsVUFBVSxHQUFHViwrQ0FBUUEsQ0FBaUJLO0lBQ3JELE1BQU0sQ0FBQ00sTUFBTUMsUUFBUSxHQUFHWiwrQ0FBUUEsQ0FBYztJQUM5QyxNQUFNLENBQUNhLFlBQVlDLGNBQWMsR0FBR2QsK0NBQVFBLENBQXlCLENBQUM7SUFDdEUsTUFBTSxDQUFDZSxjQUFjQyxnQkFBZ0IsR0FBR2hCLCtDQUFRQSxDQUFVO0lBQzFELE1BQU1pQixlQUFlaEIsNkNBQU1BLENBQW1CO0lBRTlDLE1BQU1pQixlQUFlLENBQUNDO1FBQ3BCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRSxHQUFHSCxFQUFFSSxNQUFNO1FBRXRDYixVQUFVO1lBQ1IsR0FBR0QsTUFBTTtZQUNULENBQUNXLEtBQUssRUFBRUUsU0FBUyxhQUFhLEVBQUdDLE1BQU0sQ0FBc0JDLE9BQU8sR0FBR0g7UUFDekU7UUFFQSwrQ0FBK0M7UUFDL0MsSUFBSVIsVUFBVSxDQUFDTyxLQUFLLEVBQUU7WUFDcEJOLGNBQWNXLENBQUFBLE9BQVM7b0JBQUUsR0FBR0EsSUFBSTtvQkFBRSxDQUFDTCxLQUFLLEVBQUU7Z0JBQUc7UUFDL0M7SUFDRjtJQUVBLE1BQU1NLG1CQUFtQixDQUFDUDtRQUN4QixJQUFJQSxFQUFFSSxNQUFNLENBQUNJLEtBQUssSUFBSVIsRUFBRUksTUFBTSxDQUFDSSxLQUFLLENBQUNDLE1BQU0sR0FBRyxHQUFHO1lBQy9DaEIsUUFBUU8sRUFBRUksTUFBTSxDQUFDSSxLQUFLLENBQUMsRUFBRTtZQUN6QixJQUFJZCxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUN0QkMsY0FBY1csQ0FBQUEsT0FBUzt3QkFBRSxHQUFHQSxJQUFJO3dCQUFFLFFBQVE7b0JBQUc7WUFDL0M7UUFDRjtJQUNGO0lBRUEsTUFBTUksa0JBQWtCM0Isa0RBQVdBLENBQUMsQ0FBQ2lCO1FBQ25DQSxFQUFFVyxjQUFjO1FBQ2hCWCxFQUFFWSxlQUFlO1FBQ2pCZixnQkFBZ0I7SUFDbEIsR0FBRyxFQUFFO0lBRUwsTUFBTWdCLGtCQUFrQjlCLGtEQUFXQSxDQUFDLENBQUNpQjtRQUNuQ0EsRUFBRVcsY0FBYztRQUNoQlgsRUFBRVksZUFBZTtRQUNqQmYsZ0JBQWdCO0lBQ2xCLEdBQUcsRUFBRTtJQUVMLE1BQU1pQixpQkFBaUIvQixrREFBV0EsQ0FBQyxDQUFDaUI7UUFDbENBLEVBQUVXLGNBQWM7UUFDaEJYLEVBQUVZLGVBQWU7SUFDbkIsR0FBRyxFQUFFO0lBRUwsTUFBTUcsYUFBYWhDLGtEQUFXQSxDQUFDLENBQUNpQjtRQUM5QkEsRUFBRVcsY0FBYztRQUNoQlgsRUFBRVksZUFBZTtRQUNqQmYsZ0JBQWdCO1FBRWhCLElBQUlHLEVBQUVnQixZQUFZLENBQUNSLEtBQUssSUFBSVIsRUFBRWdCLFlBQVksQ0FBQ1IsS0FBSyxDQUFDQyxNQUFNLEdBQUcsR0FBRztZQUMzRCxNQUFNUSxjQUFjakIsRUFBRWdCLFlBQVksQ0FBQ1IsS0FBSyxDQUFDLEVBQUU7WUFDM0MsOEJBQThCO1lBQzlCLElBQUlTLFlBQVloQixJQUFJLENBQUNpQixRQUFRLENBQUMsV0FBV0QsWUFBWWhCLElBQUksQ0FBQ2lCLFFBQVEsQ0FBQyxTQUFTO2dCQUMxRXpCLFFBQVF3QjtnQkFDUixJQUFJdkIsVUFBVSxDQUFDLE9BQU8sRUFBRTtvQkFDdEJDLGNBQWNXLENBQUFBLE9BQVM7NEJBQUUsR0FBR0EsSUFBSTs0QkFBRSxRQUFRO3dCQUFHO2dCQUMvQztZQUNGLE9BQU87Z0JBQ0xYLGNBQWNXLENBQUFBLE9BQVM7d0JBQ3JCLEdBQUdBLElBQUk7d0JBQ1AsUUFBUTtvQkFDVjtZQUNGO1FBQ0Y7SUFDRixHQUFHO1FBQUNaO0tBQVc7SUFFZixNQUFNeUIsbUJBQW1CO1FBQ3ZCLElBQUlyQixhQUFhc0IsT0FBTyxFQUFFO1lBQ3hCdEIsYUFBYXNCLE9BQU8sQ0FBQ0MsS0FBSztRQUM1QjtJQUNGO0lBRUEsTUFBTUMsZUFBZTtRQUNuQixNQUFNQyxTQUFpQyxDQUFDO1FBRXhDLElBQUlwQyxlQUFlLENBQUNLLE1BQU07WUFDeEIrQixPQUFPL0IsSUFBSSxHQUFHO1FBQ2hCO1FBRUEsSUFBSSxDQUFDTCxlQUFnQixFQUFDRyxPQUFPa0MsUUFBUSxJQUFJLENBQUNsQyxPQUFPa0MsUUFBUSxDQUFDQyxJQUFJLEVBQUMsR0FBSTtZQUNqRUYsT0FBT0MsUUFBUSxHQUFHO1FBQ3BCO1FBRUE3QixjQUFjNEI7UUFDZCxPQUFPRyxPQUFPQyxJQUFJLENBQUNKLFFBQVFkLE1BQU0sS0FBSztJQUN4QztJQUVBLE1BQU1tQixlQUFlLENBQUM1QjtRQUNwQkEsRUFBRVcsY0FBYztRQUNoQixJQUFJVyxnQkFBZ0I7WUFDbEJyQyxTQUFTSyxRQUFRRSxRQUFRcUM7UUFDM0I7SUFDRjtJQUVBLHFCQUNFLDhEQUFDQztRQUFJQyxXQUFVOzswQkFDYiw4REFBQ0M7Z0JBQUdELFdBQVU7MEJBQTRDMUM7Ozs7OzswQkFDMUQsOERBQUM0QztnQkFBS2hELFVBQVUyQztnQkFBY0csV0FBVTs7b0JBQ3JDNUMsNkJBQ0MsOERBQUMyQzt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNHO2dDQUFNSCxXQUFXLDZCQUFnRixPQUFuRHJDLFdBQVdGLElBQUksR0FBRyxpQkFBaUIsaUJBQWdCOzBDQUFROzs7Ozs7MENBSTFHLDhEQUFDc0M7Z0NBQ0NDLFdBQVcsMkRBUVYsT0FQQ25DLGVBQ0ksOEJBQ0FKLE9BQ0UsaUNBQ0FFLFdBQVdGLElBQUksR0FDYiw2QkFDQTtnQ0FFVjJDLGFBQWF6QjtnQ0FDYjBCLGFBQWF2QjtnQ0FDYndCLFlBQVl2QjtnQ0FDWndCLFFBQVF2QjtnQ0FDUndCLFNBQVNwQjs7a0RBRVQsOERBQUNxQjt3Q0FDQ3JDLE1BQUs7d0NBQ0xzQyxJQUFHO3dDQUNIeEMsTUFBSzt3Q0FDTHlDLEtBQUs1Qzt3Q0FDTGlDLFdBQVU7d0NBQ1ZZLFFBQU87d0NBQ1BDLFVBQVVyQzt3Q0FDVnNDLFVBQVUxRDs7Ozs7O2tEQUdaLDhEQUFDMkM7d0NBQUlDLFdBQVU7a0RBQ1osQ0FBQ3ZDLHFCQUNBOzs4REFDRSw4REFBQ3NEO29EQUFJZixXQUFXLHFCQUF3RSxPQUFuRHJDLFdBQVdGLElBQUksR0FBRyxpQkFBaUI7b0RBQW1CdUQsUUFBTztvREFBZUMsTUFBSztvREFBT0MsU0FBUTtvREFBWUMsZUFBWTs4REFDM0osNEVBQUNDO3dEQUNDQyxHQUFFO3dEQUNGQyxhQUFZO3dEQUNaQyxlQUFjO3dEQUNkQyxnQkFBZTs7Ozs7Ozs7Ozs7OERBR25CLDhEQUFDQztvREFBRXpCLFdBQVU7OERBQ1ZuQyxlQUFlLHdCQUF3Qjs7Ozs7OzhEQUUxQyw4REFBQzREO29EQUFFekIsV0FBVTs4REFBNkI7Ozs7Ozs7eUVBSzVDLDhEQUFDRDs0Q0FBSUMsV0FBVTs7OERBQ2IsOERBQUNlO29EQUFJZixXQUFVO29EQUF5QmtCLFNBQVE7b0RBQVlELE1BQUs7OERBQy9ELDRFQUFDRzt3REFBS00sVUFBUzt3REFBVUwsR0FBRTt3REFBd0lNLFVBQVM7Ozs7Ozs7Ozs7OzhEQUU5Syw4REFBQzVCO29EQUFJQyxXQUFVOztzRUFDYiw4REFBQ3lCOzREQUFFekIsV0FBVTtzRUFBcUN2QyxLQUFLUyxJQUFJOzs7Ozs7c0VBQzNELDhEQUFDdUQ7NERBQUV6QixXQUFVOztnRUFBMEJ2QyxDQUFBQSxLQUFLbUUsSUFBSSxHQUFHLElBQUcsRUFBR0MsT0FBTyxDQUFDO2dFQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NEJBTzdFbEUsV0FBV0YsSUFBSSxrQkFDZCw4REFBQ2dFO2dDQUFFekIsV0FBVTswQ0FBeUNyQyxXQUFXRixJQUFJOzs7Ozs7Ozs7Ozs7a0NBSzNFLDhEQUFDc0M7d0JBQUlDLFdBQVU7OzBDQUNiLDhEQUFDRDs7a0RBQ0MsOERBQUNJO3dDQUFNMkIsU0FBUTt3Q0FBWTlCLFdBQVU7a0RBQStDOzs7Ozs7a0RBR3BGLDhEQUFDK0I7d0NBQ0NyQixJQUFHO3dDQUNIeEMsTUFBSzt3Q0FDTDhCLFdBQVU7d0NBQ1Y3QixPQUFPWixPQUFPeUUsU0FBUzt3Q0FDdkJuQixVQUFVN0M7OzBEQUVWLDhEQUFDaUU7Z0RBQU85RCxPQUFNOzBEQUFJOzs7Ozs7MERBQ2xCLDhEQUFDOEQ7Z0RBQU85RCxPQUFNOzBEQUFJOzs7Ozs7MERBQ2xCLDhEQUFDOEQ7Z0RBQU85RCxPQUFNOzBEQUFLOzs7Ozs7MERBQ25CLDhEQUFDOEQ7Z0RBQU85RCxPQUFNOzBEQUFJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7MENBSXRCLDhEQUFDNEI7Z0NBQUlDLFdBQVU7O2tEQUNiLDhEQUFDUzt3Q0FDQ3JDLE1BQUs7d0NBQ0xzQyxJQUFHO3dDQUNIeEMsTUFBSzt3Q0FDTDhCLFdBQVU7d0NBQ1YxQixTQUFTZixPQUFPMkUsU0FBUzt3Q0FDekJyQixVQUFVN0M7Ozs7OztrREFFWiw4REFBQ21DO3dDQUFNMkIsU0FBUTt3Q0FBWTlCLFdBQVU7a0RBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBTTNFLENBQUM1Qyw2QkFDQSw4REFBQzJDO3dCQUFJQyxXQUFVOzswQ0FDYiw4REFBQ0c7Z0NBQU0yQixTQUFRO2dDQUFXOUIsV0FBVyw2QkFBb0YsT0FBdkRyQyxXQUFXOEIsUUFBUSxHQUFHLGlCQUFpQixpQkFBZ0I7MENBQVE7Ozs7OzswQ0FHakksOERBQUNnQjtnQ0FDQ3JDLE1BQUs7Z0NBQ0xzQyxJQUFHO2dDQUNIeEMsTUFBSztnQ0FDTDhCLFdBQVcsZ0JBQTZJckMsT0FBN0hBLFdBQVc4QixRQUFRLEdBQUcsNkJBQTZCLG1CQUFrQiwwREFBMEgsT0FBbEU5QixXQUFXOEIsUUFBUSxHQUFHLHVCQUF1QjtnQ0FDck0wQyxhQUFZO2dDQUNaaEUsT0FBT1osT0FBT2tDLFFBQVE7Z0NBQ3RCb0IsVUFBVTdDOzs7Ozs7NEJBRVhMLFdBQVc4QixRQUFRLGlCQUNsQiw4REFBQ2dDO2dDQUFFekIsV0FBVTswQ0FBeUNyQyxXQUFXOEIsUUFBUTs7Ozs7cURBRXpFLDhEQUFDZ0M7Z0NBQUV6QixXQUFVOzBDQUE2Qjs7Ozs7Ozs7Ozs7O2tDQU9oRCw4REFBQ0Q7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNvQzs0QkFDQ2hFLE1BQUs7NEJBQ0w0QixXQUFVOzRCQUNWcUMsVUFBVWhGO3NDQUVUQSwwQkFDQyw4REFBQzBDO2dDQUFJQyxXQUFVOztrREFDYiw4REFBQ3NDO3dDQUFLdEMsV0FBVTs7Ozs7O29DQUFpRDs7Ozs7O3VDQUdqRTVDLGNBQWMscUJBQXFCOzs7Ozs7Ozs7OztvQkFJMUN1QyxPQUFPQyxJQUFJLENBQUNqQyxZQUFZZSxNQUFNLEdBQUcsbUJBQ2hDLDhEQUFDcUI7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNEOzRCQUFJQyxXQUFVOzs4Q0FDYiw4REFBQ2U7b0NBQUlmLFdBQVU7b0NBQTRCaUIsTUFBSztvQ0FBT0QsUUFBTztvQ0FBZUUsU0FBUTtvQ0FBWXFCLE9BQU07OENBQ3JHLDRFQUFDbkI7d0NBQUtHLGVBQWM7d0NBQVFDLGdCQUFlO3dDQUFRRixhQUFZO3dDQUFJRCxHQUFFOzs7Ozs7Ozs7Ozs4Q0FFdkUsOERBQUNpQjtvQ0FBS3RDLFdBQVU7OENBQTJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU96RDtHQXhRd0IvQztLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL0ZsYXRGaWxlRm9ybS50c3g/ODU2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XHJcblxyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgRmxhdEZpbGVDb25maWcgfSBmcm9tICdAL2xpYi9hcGknO1xyXG5cclxuaW50ZXJmYWNlIEZsYXRGaWxlRm9ybVByb3BzIHtcclxuICBvblN1Ym1pdDogKGNvbmZpZzogRmxhdEZpbGVDb25maWcsIGZpbGU/OiBGaWxlKSA9PiB2b2lkO1xyXG4gIGluaXRpYWxWYWx1ZXM6IEZsYXRGaWxlQ29uZmlnO1xyXG4gIHJlcXVpcmVGaWxlOiBib29sZWFuO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbjtcclxuICB0aXRsZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGbGF0RmlsZUZvcm0oe1xyXG4gIG9uU3VibWl0LFxyXG4gIGluaXRpYWxWYWx1ZXMsXHJcbiAgcmVxdWlyZUZpbGUsXHJcbiAgaXNMb2FkaW5nLFxyXG4gIHRpdGxlXHJcbn06IEZsYXRGaWxlRm9ybVByb3BzKSB7XHJcbiAgY29uc3QgW2NvbmZpZywgc2V0Q29uZmlnXSA9IHVzZVN0YXRlPEZsYXRGaWxlQ29uZmlnPihpbml0aWFsVmFsdWVzKTtcclxuICBjb25zdCBbZmlsZSwgc2V0RmlsZV0gPSB1c2VTdGF0ZTxGaWxlIHwgbnVsbD4obnVsbCk7XHJcbiAgY29uc3QgW3ZhbGlkYXRpb24sIHNldFZhbGlkYXRpb25dID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xyXG4gIGNvbnN0IFtpc0RyYWdBY3RpdmUsIHNldElzRHJhZ0FjdGl2ZV0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XHJcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xyXG5cclxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50PikgPT4ge1xyXG4gICAgY29uc3QgeyBuYW1lLCB2YWx1ZSwgdHlwZSB9ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIFxyXG4gICAgc2V0Q29uZmlnKHtcclxuICAgICAgLi4uY29uZmlnLFxyXG4gICAgICBbbmFtZV06IHR5cGUgPT09ICdjaGVja2JveCcgPyAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCA6IHZhbHVlXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDbGVhciB2YWxpZGF0aW9uIGVycm9yIHdoZW4gZmllbGQgaXMgdXBkYXRlZFxyXG4gICAgaWYgKHZhbGlkYXRpb25bbmFtZV0pIHtcclxuICAgICAgc2V0VmFsaWRhdGlvbihwcmV2ID0+ICh7IC4uLnByZXYsIFtuYW1lXTogJycgfSkpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcclxuICAgIGlmIChlLnRhcmdldC5maWxlcyAmJiBlLnRhcmdldC5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHNldEZpbGUoZS50YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgICBpZiAodmFsaWRhdGlvblsnZmlsZSddKSB7XHJcbiAgICAgICAgc2V0VmFsaWRhdGlvbihwcmV2ID0+ICh7IC4uLnByZXYsICdmaWxlJzogJycgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlRHJhZ0VudGVyID0gdXNlQ2FsbGJhY2soKGU6IFJlYWN0LkRyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBzZXRJc0RyYWdBY3RpdmUodHJ1ZSk7XHJcbiAgfSwgW10pO1xyXG5cclxuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSB1c2VDYWxsYmFjaygoZTogUmVhY3QuRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHNldElzRHJhZ0FjdGl2ZShmYWxzZSk7XHJcbiAgfSwgW10pO1xyXG5cclxuICBjb25zdCBoYW5kbGVEcmFnT3ZlciA9IHVzZUNhbGxiYWNrKChlOiBSZWFjdC5EcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlRHJvcCA9IHVzZUNhbGxiYWNrKChlOiBSZWFjdC5EcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgc2V0SXNEcmFnQWN0aXZlKGZhbHNlKTtcclxuICAgIFxyXG4gICAgaWYgKGUuZGF0YVRyYW5zZmVyLmZpbGVzICYmIGUuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZHJvcHBlZEZpbGUgPSBlLmRhdGFUcmFuc2Zlci5maWxlc1swXTtcclxuICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBpcyBDU1Ygb3IgVFhUXHJcbiAgICAgIGlmIChkcm9wcGVkRmlsZS5uYW1lLmVuZHNXaXRoKCcuY3N2JykgfHwgZHJvcHBlZEZpbGUubmFtZS5lbmRzV2l0aCgnLnR4dCcpKSB7XHJcbiAgICAgICAgc2V0RmlsZShkcm9wcGVkRmlsZSk7XHJcbiAgICAgICAgaWYgKHZhbGlkYXRpb25bJ2ZpbGUnXSkge1xyXG4gICAgICAgICAgc2V0VmFsaWRhdGlvbihwcmV2ID0+ICh7IC4uLnByZXYsICdmaWxlJzogJycgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZXRWYWxpZGF0aW9uKHByZXYgPT4gKHsgXHJcbiAgICAgICAgICAuLi5wcmV2LCBcclxuICAgICAgICAgICdmaWxlJzogJ09ubHkgQ1NWIGFuZCBUWFQgZmlsZXMgYXJlIHN1cHBvcnRlZCcgXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSwgW3ZhbGlkYXRpb25dKTtcclxuXHJcbiAgY29uc3Qgb3BlbkZpbGVTZWxlY3RvciA9ICgpID0+IHtcclxuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xyXG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC5jbGljaygpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHZhbGlkYXRlRm9ybSA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGVycm9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgXHJcbiAgICBpZiAocmVxdWlyZUZpbGUgJiYgIWZpbGUpIHtcclxuICAgICAgZXJyb3JzLmZpbGUgPSAnUGxlYXNlIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXJlcXVpcmVGaWxlICYmICghY29uZmlnLmZpbGVOYW1lIHx8ICFjb25maWcuZmlsZU5hbWUudHJpbSgpKSkge1xyXG4gICAgICBlcnJvcnMuZmlsZU5hbWUgPSAnRmlsZSBuYW1lIGlzIHJlcXVpcmVkIGZvciBleHBvcnQnO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzZXRWYWxpZGF0aW9uKGVycm9ycyk7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPT09IDA7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKHZhbGlkYXRlRm9ybSgpKSB7XHJcbiAgICAgIG9uU3VibWl0KGNvbmZpZywgZmlsZSB8fCB1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHNoYWRvdy1sZyByb3VuZGVkLWxnIHAtNiBtYXgtdy14bCBteC1hdXRvIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBob3ZlcjpzaGFkb3cteGxcIj5cclxuICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgbWItNiB0ZXh0LXByaW1hcnlcIj57dGl0bGV9PC9oMj5cclxuICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gY2xhc3NOYW1lPVwic3BhY2UteS02XCI+XHJcbiAgICAgICAge3JlcXVpcmVGaWxlICYmIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtgYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSAke3ZhbGlkYXRpb24uZmlsZSA/ICd0ZXh0LXJlZC02MDAnIDogJ3RleHQtZ3JheS03MDAnfSBtYi0yYH0+XHJcbiAgICAgICAgICAgICAgVXBsb2FkIEZpbGVcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCByb3VuZGVkLWxnIHAtNiB0cmFuc2l0aW9uLWNvbG9ycyAke1xyXG4gICAgICAgICAgICAgICAgaXNEcmFnQWN0aXZlIFxyXG4gICAgICAgICAgICAgICAgICA/ICdib3JkZXItcHJpbWFyeSBiZy1ibHVlLTUwJyBcclxuICAgICAgICAgICAgICAgICAgOiBmaWxlIFxyXG4gICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1ncmVlbi00MDAgYmctZ3JlZW4tNTAnIFxyXG4gICAgICAgICAgICAgICAgICAgIDogdmFsaWRhdGlvbi5maWxlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXJlZC0zMDAgYmctcmVkLTUwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLWdyYXktMzAwIGhvdmVyOmJvcmRlci1ncmF5LTQwMCdcclxuICAgICAgICAgICAgICB9YH1cclxuICAgICAgICAgICAgICBvbkRyYWdFbnRlcj17aGFuZGxlRHJhZ0VudGVyfVxyXG4gICAgICAgICAgICAgIG9uRHJhZ0xlYXZlPXtoYW5kbGVEcmFnTGVhdmV9XHJcbiAgICAgICAgICAgICAgb25EcmFnT3Zlcj17aGFuZGxlRHJhZ092ZXJ9XHJcbiAgICAgICAgICAgICAgb25Ecm9wPXtoYW5kbGVEcm9wfVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e29wZW5GaWxlU2VsZWN0b3J9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgICAgICAgIGlkPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICBhY2NlcHQ9XCIuY3N2LC50eHRcIlxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVDaGFuZ2V9XHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZUZpbGV9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICB7IWZpbGUgPyAoXHJcbiAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9e2BteC1hdXRvIGgtMTIgdy0xMiAke3ZhbGlkYXRpb24uZmlsZSA/ICd0ZXh0LXJlZC00MDAnIDogJ3RleHQtZ3JheS00MDAnfWB9IHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCA0OCA0OFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjggOEgxMmE0IDQgMCAwMC00IDR2MjBtMzItMTJ2OG0wIDB2OGE0IDQgMCAwMS00IDRIMTJhNCA0IDAgMDEtNC00di00bTMyLTRsLTMuMTcyLTMuMTcyYTQgNCAwIDAwLTUuNjU2IDBMMjggMjhNOCAzMmw5LjE3Mi05LjE3MmE0IDQgMCAwMTUuNjU2IDBMMjggMjhtMCAwbDQgNG00LTI0aDhtLTQtNHY4bS0xMiA0aC4wMlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD1cIjJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHtpc0RyYWdBY3RpdmUgPyAnRHJvcCB5b3VyIGZpbGUgaGVyZScgOiAnRHJhZyBhbmQgZHJvcCB5b3VyIGZpbGUgaGVyZSwgb3IgY2xpY2sgdG8gYnJvd3NlJ31cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZCBmb3JtYXRzOiBDU1YsIFRYVFxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwiaC04IHctOCB0ZXh0LWdyZWVuLTUwMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsUnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuNzA3LTkuMjkzYTEgMSAwIDAwLTEuNDE0LTEuNDE0TDkgMTAuNTg2IDcuNzA3IDkuMjkzYTEgMSAwIDAwLTEuNDE0IDEuNDE0bDIgMmExIDEgMCAwMDEuNDE0IDBsNC00elwiIGNsaXBSdWxlPVwiZXZlbm9kZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMFwiPntmaWxlLm5hbWV9PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LWdyYXktNTAwXCI+eyhmaWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQiDigKIgQ2xpY2sgdG8gY2hhbmdlPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAge3ZhbGlkYXRpb24uZmlsZSAmJiAoXHJcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtcmVkLTYwMCBmb250LW1lZGl1bVwiPnt2YWxpZGF0aW9uLmZpbGV9PC9wPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC00IG1iLTZcIj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiZGVsaW1pdGVyXCIgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIG1iLTFcIj5cclxuICAgICAgICAgICAgICBEZWxpbWl0ZXJcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdFxyXG4gICAgICAgICAgICAgIGlkPVwiZGVsaW1pdGVyXCJcclxuICAgICAgICAgICAgICBuYW1lPVwiZGVsaW1pdGVyXCJcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXItZ3JheS0zMDAgc2hhZG93LXNtIGZvY3VzOmJvcmRlci1wcmltYXJ5IGZvY3VzOnJpbmctcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgdmFsdWU9e2NvbmZpZy5kZWxpbWl0ZXJ9XHJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIsXCI+Q29tbWEgKCwpPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjtcIj5TZW1pY29sb24gKDspPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlxcdFwiPlRhYiAoXFx0KTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ8XCI+UGlwZSAofCk8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJoYXNIZWFkZXJcIlxyXG4gICAgICAgICAgICAgIG5hbWU9XCJoYXNIZWFkZXJcIlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC1wcmltYXJ5IGZvY3VzOnJpbmctcHJpbWFyeSBib3JkZXItZ3JheS0zMDAgcm91bmRlZFwiXHJcbiAgICAgICAgICAgICAgY2hlY2tlZD17Y29uZmlnLmhhc0hlYWRlcn1cclxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImhhc0hlYWRlclwiIGNsYXNzTmFtZT1cIm1sLTIgYmxvY2sgdGV4dC1zbSB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgICAgRmlsZSBoYXMgaGVhZGVyIHJvd1xyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIHshcmVxdWlyZUZpbGUgJiYgKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiZmlsZU5hbWVcIiBjbGFzc05hbWU9e2BibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtICR7dmFsaWRhdGlvbi5maWxlTmFtZSA/ICd0ZXh0LXJlZC02MDAnIDogJ3RleHQtZ3JheS03MDAnfSBtYi0xYH0+XHJcbiAgICAgICAgICAgICAgRXhwb3J0IEZpbGUgTmFtZVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJmaWxlTmFtZVwiXHJcbiAgICAgICAgICAgICAgbmFtZT1cImZpbGVOYW1lXCJcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgJHt2YWxpZGF0aW9uLmZpbGVOYW1lID8gJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC01MCcgOiAnYm9yZGVyLWdyYXktMzAwJ30gcm91bmRlZC1tZCBzaGFkb3ctc20gZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiAke3ZhbGlkYXRpb24uZmlsZU5hbWUgPyAnZm9jdXM6cmluZy1yZWQtNTAwJyA6ICdmb2N1czpyaW5nLXByaW1hcnknfWB9XHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJleHBvcnQuY3N2XCJcclxuICAgICAgICAgICAgICB2YWx1ZT17Y29uZmlnLmZpbGVOYW1lfVxyXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIHt2YWxpZGF0aW9uLmZpbGVOYW1lID8gKFxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC1zbSB0ZXh0LXJlZC02MDAgZm9udC1tZWRpdW1cIj57dmFsaWRhdGlvbi5maWxlTmFtZX08L3A+XHJcbiAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXNtIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgICAgIExlYXZlIGVtcHR5IHRvIGdlbmVyYXRlIGF1dG9tYXRpY2FsbHkuXHJcbiAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgcHgtNiBweS0yIHJvdW5kZWQtbWQgdGV4dC13aGl0ZSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtpc0xvYWRpbmcgPyAoXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibG9hZGluZyBsb2FkaW5nLXNwaW5uZXIgbG9hZGluZy1zbSBtci0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgUHJvY2Vzc2luZy4uLlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApIDogcmVxdWlyZUZpbGUgPyAnVXBsb2FkICYgUHJvY2VzcycgOiAnQ29udGludWUnfVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIHtPYmplY3Qua2V5cyh2YWxpZGF0aW9uKS5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBwLTMgYmctcmVkLTUwIGJvcmRlciBib3JkZXItcmVkLTIwMCByb3VuZGVkLW1kXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cImgtNSB3LTUgdGV4dC1yZWQtNTAwIG1yLTJcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9XCIyXCIgZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yZWQtNjAwIGZvbnQtbWVkaXVtXCI+UGxlYXNlIGZpeCB0aGUgZXJyb3JzIGJlZm9yZSBjb250aW51aW5nPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn0gIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlUmVmIiwidXNlQ2FsbGJhY2siLCJGbGF0RmlsZUZvcm0iLCJvblN1Ym1pdCIsImluaXRpYWxWYWx1ZXMiLCJyZXF1aXJlRmlsZSIsImlzTG9hZGluZyIsInRpdGxlIiwiY29uZmlnIiwic2V0Q29uZmlnIiwiZmlsZSIsInNldEZpbGUiLCJ2YWxpZGF0aW9uIiwic2V0VmFsaWRhdGlvbiIsImlzRHJhZ0FjdGl2ZSIsInNldElzRHJhZ0FjdGl2ZSIsImZpbGVJbnB1dFJlZiIsImhhbmRsZUNoYW5nZSIsImUiLCJuYW1lIiwidmFsdWUiLCJ0eXBlIiwidGFyZ2V0IiwiY2hlY2tlZCIsInByZXYiLCJoYW5kbGVGaWxlQ2hhbmdlIiwiZmlsZXMiLCJsZW5ndGgiLCJoYW5kbGVEcmFnRW50ZXIiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZURyYWdMZWF2ZSIsImhhbmRsZURyYWdPdmVyIiwiaGFuZGxlRHJvcCIsImRhdGFUcmFuc2ZlciIsImRyb3BwZWRGaWxlIiwiZW5kc1dpdGgiLCJvcGVuRmlsZVNlbGVjdG9yIiwiY3VycmVudCIsImNsaWNrIiwidmFsaWRhdGVGb3JtIiwiZXJyb3JzIiwiZmlsZU5hbWUiLCJ0cmltIiwiT2JqZWN0Iiwia2V5cyIsImhhbmRsZVN1Ym1pdCIsInVuZGVmaW5lZCIsImRpdiIsImNsYXNzTmFtZSIsImgyIiwiZm9ybSIsImxhYmVsIiwib25EcmFnRW50ZXIiLCJvbkRyYWdMZWF2ZSIsIm9uRHJhZ092ZXIiLCJvbkRyb3AiLCJvbkNsaWNrIiwiaW5wdXQiLCJpZCIsInJlZiIsImFjY2VwdCIsIm9uQ2hhbmdlIiwicmVxdWlyZWQiLCJzdmciLCJzdHJva2UiLCJmaWxsIiwidmlld0JveCIsImFyaWEtaGlkZGVuIiwicGF0aCIsImQiLCJzdHJva2VXaWR0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInAiLCJmaWxsUnVsZSIsImNsaXBSdWxlIiwic2l6ZSIsInRvRml4ZWQiLCJodG1sRm9yIiwic2VsZWN0IiwiZGVsaW1pdGVyIiwib3B0aW9uIiwiaGFzSGVhZGVyIiwicGxhY2Vob2xkZXIiLCJidXR0b24iLCJkaXNhYmxlZCIsInNwYW4iLCJ4bWxucyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/FlatFileForm.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./components/IngestionResults.tsx": +/*!*****************************************!*\ + !*** ./components/IngestionResults.tsx ***! + \*****************************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ IngestionResults; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nfunction IngestionResults(param) {\n let { results, onReset } = param;\n if (!results) {\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-semibold mb-6\",\n children: \"No Results Yet\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 17,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-500\",\n children: \"No ingestion results available.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 18,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"btn btn-primary\",\n onClick: onReset,\n children: \"Start Over\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 20,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 19,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 16,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card \".concat(results.success ? \"border-green-200\" : \"border-red-200\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-12 h-12 rounded-full flex items-center justify-center \".concat(results.success ? \"bg-green-100 text-green-600\" : \"bg-red-100 text-red-600\"),\n children: results.success ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-6 w-6\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 13l4 4L19 7\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 40,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 39,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-6 w-6\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 44,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 43,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 35,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-semibold ml-4\",\n children: results.success ? \"Ingestion Completed Successfully\" : \"Ingestion Failed\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 48,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 34,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6 p-4 bg-gray-50 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-700\",\n children: results.message\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 54,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 53,\n columnNumber: 7\n }, this),\n results.success && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium\",\n children: \"Summary\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 60,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 59,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-blue-50 p-4 rounded-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-700\",\n children: \"Total Records Processed:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 64,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-semibold\",\n children: results.totalRecords.toLocaleString()\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 65,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 63,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 62,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 58,\n columnNumber: 9\n }, this),\n results.success && results.fileName && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-2\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium\",\n children: \"Download\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 74,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 73,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-green-50 p-4 rounded-lg flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-gray-700\",\n children: \"File available for download:\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 77,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: results.fileName,\n className: \"btn btn-primary text-sm\",\n download: true,\n children: \"Download File\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 78,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 76,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 72,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"btn btn-accent\",\n onClick: onReset,\n children: \"Start New Ingestion\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 90,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 89,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\IngestionResults.tsx\",\n lineNumber: 33,\n columnNumber: 5\n }, this);\n}\n_c = IngestionResults;\nvar _c;\n$RefreshReg$(_c, \"IngestionResults\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvSW5nZXN0aW9uUmVzdWx0cy50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBU2UsU0FBU0EsaUJBQWlCLEtBR2pCO1FBSGlCLEVBQ3ZDQyxPQUFPLEVBQ1BDLE9BQU8sRUFDZSxHQUhpQjtJQUl2QyxJQUFJLENBQUNELFNBQVM7UUFDWixxQkFDRSw4REFBQ0U7WUFBSUMsV0FBVTs7OEJBQ2IsOERBQUNDO29CQUFHRCxXQUFVOzhCQUE2Qjs7Ozs7OzhCQUMzQyw4REFBQ0U7b0JBQUVGLFdBQVU7OEJBQWdCOzs7Ozs7OEJBQzdCLDhEQUFDRDtvQkFBSUMsV0FBVTs4QkFDYiw0RUFBQ0c7d0JBQ0NDLE1BQUs7d0JBQ0xKLFdBQVU7d0JBQ1ZLLFNBQVNQO2tDQUNWOzs7Ozs7Ozs7Ozs7Ozs7OztJQU1UO0lBRUEscUJBQ0UsOERBQUNDO1FBQUlDLFdBQVcsUUFBZ0UsT0FBeERILFFBQVFTLE9BQU8sR0FBRyxxQkFBcUI7OzBCQUM3RCw4REFBQ1A7Z0JBQUlDLFdBQVU7O2tDQUNiLDhEQUFDRDt3QkFBSUMsV0FBVywyREFFZixPQURDSCxRQUFRUyxPQUFPLEdBQUcsZ0NBQWdDO2tDQUVqRFQsUUFBUVMsT0FBTyxpQkFDZCw4REFBQ0M7NEJBQUlDLE9BQU07NEJBQTZCUixXQUFVOzRCQUFVUyxNQUFLOzRCQUFPQyxTQUFROzRCQUFZQyxRQUFPO3NDQUNqRyw0RUFBQ0M7Z0NBQUtDLGVBQWM7Z0NBQVFDLGdCQUFlO2dDQUFRQyxhQUFhO2dDQUFHQyxHQUFFOzs7Ozs7Ozs7O2lEQUd2RSw4REFBQ1Q7NEJBQUlDLE9BQU07NEJBQTZCUixXQUFVOzRCQUFVUyxNQUFLOzRCQUFPQyxTQUFROzRCQUFZQyxRQUFPO3NDQUNqRyw0RUFBQ0M7Z0NBQUtDLGVBQWM7Z0NBQVFDLGdCQUFlO2dDQUFRQyxhQUFhO2dDQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7O2tDQUkzRSw4REFBQ2Y7d0JBQUdELFdBQVU7a0NBQ1hILFFBQVFTLE9BQU8sR0FBRyxxQ0FBcUM7Ozs7Ozs7Ozs7OzswQkFJNUQsOERBQUNQO2dCQUFJQyxXQUFVOzBCQUNiLDRFQUFDRTtvQkFBRUYsV0FBVTs4QkFBaUJILFFBQVFvQixPQUFPOzs7Ozs7Ozs7OztZQUc5Q3BCLFFBQVFTLE9BQU8sa0JBQ2QsOERBQUNQO2dCQUFJQyxXQUFVOztrQ0FDYiw4REFBQ0Q7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNrQjs0QkFBR2xCLFdBQVU7c0NBQXNCOzs7Ozs7Ozs7OztrQ0FFdEMsOERBQUNEO3dCQUFJQyxXQUFVO2tDQUNiLDRFQUFDRDs0QkFBSUMsV0FBVTs7OENBQ2IsOERBQUNtQjtvQ0FBS25CLFdBQVU7OENBQWdCOzs7Ozs7OENBQ2hDLDhEQUFDbUI7b0NBQUtuQixXQUFVOzhDQUFpQkgsUUFBUXVCLFlBQVksQ0FBQ0MsY0FBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUFNM0V4QixRQUFRUyxPQUFPLElBQUlULFFBQVF5QixRQUFRLGtCQUNsQyw4REFBQ3ZCO2dCQUFJQyxXQUFVOztrQ0FDYiw4REFBQ0Q7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNrQjs0QkFBR2xCLFdBQVU7c0NBQXNCOzs7Ozs7Ozs7OztrQ0FFdEMsOERBQUNEO3dCQUFJQyxXQUFVOzswQ0FDYiw4REFBQ21CO2dDQUFLbkIsV0FBVTswQ0FBZ0I7Ozs7OzswQ0FDaEMsOERBQUN1QjtnQ0FDQ0MsTUFBTTNCLFFBQVF5QixRQUFRO2dDQUN0QnRCLFdBQVU7Z0NBQ1Z5QixRQUFROzBDQUNUOzs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBT1AsOERBQUMxQjtnQkFBSUMsV0FBVTswQkFDYiw0RUFBQ0c7b0JBQ0NDLE1BQUs7b0JBQ0xKLFdBQVU7b0JBQ1ZLLFNBQVNQOzhCQUNWOzs7Ozs7Ozs7Ozs7Ozs7OztBQU1UO0tBMUZ3QkYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vY29tcG9uZW50cy9Jbmdlc3Rpb25SZXN1bHRzLnRzeD84MWI3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcclxuXHJcbmltcG9ydCB7IEluZ2VzdGlvblJlc3BvbnNlIH0gZnJvbSAnQC9saWIvYXBpJztcclxuXHJcbmludGVyZmFjZSBJbmdlc3Rpb25SZXN1bHRzUHJvcHMge1xyXG4gIHJlc3VsdHM6IEluZ2VzdGlvblJlc3BvbnNlIHwgbnVsbDtcclxuICBvblJlc2V0OiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBJbmdlc3Rpb25SZXN1bHRzKHtcclxuICByZXN1bHRzLFxyXG4gIG9uUmVzZXRcclxufTogSW5nZXN0aW9uUmVzdWx0c1Byb3BzKSB7XHJcbiAgaWYgKCFyZXN1bHRzKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRcIj5cclxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LXNlbWlib2xkIG1iLTZcIj5ObyBSZXN1bHRzIFlldDwvaDI+XHJcbiAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTUwMFwiPk5vIGluZ2VzdGlvbiByZXN1bHRzIGF2YWlsYWJsZS48L3A+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC02XCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICBvbkNsaWNrPXtvblJlc2V0fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBTdGFydCBPdmVyXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPXtgY2FyZCAke3Jlc3VsdHMuc3VjY2VzcyA/ICdib3JkZXItZ3JlZW4tMjAwJyA6ICdib3JkZXItcmVkLTIwMCd9YH0+XHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgbWItNlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgdy0xMiBoLTEyIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciAke1xyXG4gICAgICAgICAgcmVzdWx0cy5zdWNjZXNzID8gJ2JnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTYwMCcgOiAnYmctcmVkLTEwMCB0ZXh0LXJlZC02MDAnXHJcbiAgICAgICAgfWB9PlxyXG4gICAgICAgICAge3Jlc3VsdHMuc3VjY2VzcyA/IChcclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3NOYW1lPVwiaC02IHctNlwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk01IDEzbDQgNEwxOSA3XCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzc05hbWU9XCJoLTYgdy02XCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTYgMThMMTggNk02IDZsMTIgMTJcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQteGwgZm9udC1zZW1pYm9sZCBtbC00XCI+XHJcbiAgICAgICAgICB7cmVzdWx0cy5zdWNjZXNzID8gJ0luZ2VzdGlvbiBDb21wbGV0ZWQgU3VjY2Vzc2Z1bGx5JyA6ICdJbmdlc3Rpb24gRmFpbGVkJ31cclxuICAgICAgICA8L2gyPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNiBwLTQgYmctZ3JheS01MCByb3VuZGVkLWxnXCI+XHJcbiAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1ncmF5LTcwMFwiPntyZXN1bHRzLm1lc3NhZ2V9PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIHtyZXN1bHRzLnN1Y2Nlc3MgJiYgKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi00XCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtXCI+U3VtbWFyeTwvaDM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctYmx1ZS01MCBwLTQgcm91bmRlZC1sZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTcwMFwiPlRvdGFsIFJlY29yZHMgUHJvY2Vzc2VkOjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LXNlbWlib2xkXCI+e3Jlc3VsdHMudG90YWxSZWNvcmRzLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICApfVxyXG5cclxuICAgICAge3Jlc3VsdHMuc3VjY2VzcyAmJiByZXN1bHRzLmZpbGVOYW1lICYmIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bVwiPkRvd25sb2FkPC9oMz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZy1ncmVlbi01MCBwLTQgcm91bmRlZC1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTcwMFwiPkZpbGUgYXZhaWxhYmxlIGZvciBkb3dubG9hZDo8L3NwYW4+XHJcbiAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgaHJlZj17cmVzdWx0cy5maWxlTmFtZX1cclxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1zbVwiXHJcbiAgICAgICAgICAgICAgZG93bmxvYWRcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIERvd25sb2FkIEZpbGVcclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICl9XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTZcIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tYWNjZW50XCJcclxuICAgICAgICAgIG9uQ2xpY2s9e29uUmVzZXR9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgU3RhcnQgTmV3IEluZ2VzdGlvblxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn0gIl0sIm5hbWVzIjpbIkluZ2VzdGlvblJlc3VsdHMiLCJyZXN1bHRzIiwib25SZXNldCIsImRpdiIsImNsYXNzTmFtZSIsImgyIiwicCIsImJ1dHRvbiIsInR5cGUiLCJvbkNsaWNrIiwic3VjY2VzcyIsInN2ZyIsInhtbG5zIiwiZmlsbCIsInZpZXdCb3giLCJzdHJva2UiLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwibWVzc2FnZSIsImgzIiwic3BhbiIsInRvdGFsUmVjb3JkcyIsInRvTG9jYWxlU3RyaW5nIiwiZmlsZU5hbWUiLCJhIiwiaHJlZiIsImRvd25sb2FkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/IngestionResults.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./components/StatusIndicator.tsx": +/*!****************************************!*\ + !*** ./components/StatusIndicator.tsx ***! + \****************************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ StatusIndicator; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \n\nfunction StatusIndicator(param) {\n let { status, message } = param;\n const getStatusColor = ()=>{\n switch(status){\n case \"idle\":\n return \"bg-gray-100 border-gray-200\";\n case \"connecting\":\n return \"bg-blue-50 border-blue-200\";\n case \"fetching\":\n return \"bg-blue-50 border-blue-300\";\n case \"ingesting\":\n return \"bg-yellow-50 border-yellow-200\";\n case \"completed\":\n return \"bg-green-50 border-green-200\";\n case \"error\":\n return \"bg-red-50 border-red-200\";\n default:\n return \"bg-gray-100 border-gray-200\";\n }\n };\n const getTextColor = ()=>{\n switch(status){\n case \"idle\":\n return \"text-gray-700\";\n case \"connecting\":\n return \"text-blue-700\";\n case \"fetching\":\n return \"text-blue-700\";\n case \"ingesting\":\n return \"text-yellow-700\";\n case \"completed\":\n return \"text-green-700\";\n case \"error\":\n return \"text-red-700\";\n default:\n return \"text-gray-700\";\n }\n };\n const getStatusText = ()=>{\n switch(status){\n case \"idle\":\n return \"Ready\";\n case \"connecting\":\n return \"Connecting...\";\n case \"fetching\":\n return \"Fetching Data...\";\n case \"ingesting\":\n return \"Processing Data...\";\n case \"completed\":\n return \"Completed\";\n case \"error\":\n return \"Error\";\n default:\n return \"Ready\";\n }\n };\n const getStatusIcon = ()=>{\n switch(status){\n case \"idle\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-gray-200 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-6 w-6 text-gray-600\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm1-11a1 1 0 10-2 0v3.586L7.707 9.293a1 1 0 00-1.414 1.414l3 3a1 1 0 001.414 0l3-3a1 1 0 00-1.414-1.414L11 10.586V7z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 55,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 54,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 53,\n columnNumber: 11\n }, this);\n case \"connecting\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-blue-200 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"animate-spin h-6 w-6 text-blue-600\",\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n className: \"opacity-25\",\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n stroke: \"currentColor\",\n strokeWidth: \"4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 63,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n className: \"opacity-75\",\n fill: \"currentColor\",\n d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 64,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 62,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 61,\n columnNumber: 11\n }, this);\n case \"fetching\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-blue-300 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"animate-spin h-6 w-6 text-blue-700\",\n xmlns: \"http://www.w3.org/2000/svg\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"circle\", {\n className: \"opacity-25\",\n cx: \"12\",\n cy: \"12\",\n r: \"10\",\n stroke: \"currentColor\",\n strokeWidth: \"4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 72,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n className: \"opacity-75\",\n fill: \"currentColor\",\n d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 73,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 71,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 70,\n columnNumber: 11\n }, this);\n case \"ingesting\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-yellow-200 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"animate-pulse h-6 w-6 text-yellow-700\",\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M3 17a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zm3.293-7.707a1 1 0 011.414 0L9 10.586V3a1 1 0 112 0v7.586l1.293-1.293a1 1 0 111.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 81,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 80,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 79,\n columnNumber: 11\n }, this);\n case \"completed\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-green-200 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-6 w-6 text-green-700\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 89,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 88,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 87,\n columnNumber: 11\n }, this);\n case \"error\":\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"p-2 bg-red-200 rounded-full\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-6 w-6 text-red-700\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 97,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 96,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 95,\n columnNumber: 11\n }, this);\n default:\n return null;\n }\n };\n const getProgressBarWidth = ()=>{\n switch(status){\n case \"idle\":\n return \"w-0\";\n case \"connecting\":\n return \"w-1/4\";\n case \"fetching\":\n return \"w-1/2\";\n case \"ingesting\":\n return \"w-3/4\";\n case \"completed\":\n return \"w-full\";\n case \"error\":\n return \"w-full\";\n default:\n return \"w-0\";\n }\n };\n const getProgressBarColor = ()=>{\n switch(status){\n case \"idle\":\n return \"bg-gray-300\";\n case \"connecting\":\n return \"bg-blue-400\";\n case \"fetching\":\n return \"bg-blue-500\";\n case \"ingesting\":\n return \"bg-yellow-500\";\n case \"completed\":\n return \"bg-green-500\";\n case \"error\":\n return \"bg-red-500\";\n default:\n return \"bg-gray-300\";\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"\".concat(getStatusColor(), \" border rounded-lg p-5 mb-6 transition-all duration-300 shadow-sm hover:shadow-md\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-shrink-0\",\n children: getStatusIcon()\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 133,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"ml-4 flex-grow\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-base font-medium \".concat(getTextColor()),\n children: getStatusText()\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 137,\n columnNumber: 11\n }, this),\n message && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-1 text-sm text-gray-700 max-w-prose\",\n children: message\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 139,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 136,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 132,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3 w-full bg-gray-200 rounded-full h-2 overflow-hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"\".concat(getProgressBarColor(), \" h-2 rounded-full transition-all duration-700 ease-in-out \").concat(getProgressBarWidth())\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 147,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 146,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\StatusIndicator.tsx\",\n lineNumber: 131,\n columnNumber: 5\n }, this);\n}\n_c = StatusIndicator;\nvar _c;\n$RefreshReg$(_c, \"StatusIndicator\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvU3RhdHVzSW5kaWNhdG9yLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUUwQjtBQVNYLFNBQVNDLGdCQUFnQixLQUF5QztRQUF6QyxFQUFFQyxNQUFNLEVBQUVDLE9BQU8sRUFBd0IsR0FBekM7SUFDdEMsTUFBTUMsaUJBQWlCO1FBQ3JCLE9BQVFGO1lBQ04sS0FBSztnQkFBUSxPQUFPO1lBQ3BCLEtBQUs7Z0JBQWMsT0FBTztZQUMxQixLQUFLO2dCQUFZLE9BQU87WUFDeEIsS0FBSztnQkFBYSxPQUFPO1lBQ3pCLEtBQUs7Z0JBQWEsT0FBTztZQUN6QixLQUFLO2dCQUFTLE9BQU87WUFDckI7Z0JBQVMsT0FBTztRQUNsQjtJQUNGO0lBRUEsTUFBTUcsZUFBZTtRQUNuQixPQUFRSDtZQUNOLEtBQUs7Z0JBQVEsT0FBTztZQUNwQixLQUFLO2dCQUFjLE9BQU87WUFDMUIsS0FBSztnQkFBWSxPQUFPO1lBQ3hCLEtBQUs7Z0JBQWEsT0FBTztZQUN6QixLQUFLO2dCQUFhLE9BQU87WUFDekIsS0FBSztnQkFBUyxPQUFPO1lBQ3JCO2dCQUFTLE9BQU87UUFDbEI7SUFDRjtJQUVBLE1BQU1JLGdCQUFnQjtRQUNwQixPQUFRSjtZQUNOLEtBQUs7Z0JBQVEsT0FBTztZQUNwQixLQUFLO2dCQUFjLE9BQU87WUFDMUIsS0FBSztnQkFBWSxPQUFPO1lBQ3hCLEtBQUs7Z0JBQWEsT0FBTztZQUN6QixLQUFLO2dCQUFhLE9BQU87WUFDekIsS0FBSztnQkFBUyxPQUFPO1lBQ3JCO2dCQUFTLE9BQU87UUFDbEI7SUFDRjtJQUVBLE1BQU1LLGdCQUFnQjtRQUNwQixPQUFRTDtZQUNOLEtBQUs7Z0JBQ0gscUJBQ0UsOERBQUNNO29CQUFJQyxXQUFVOzhCQUNiLDRFQUFDQzt3QkFBSUMsT0FBTTt3QkFBNkJGLFdBQVU7d0JBQXdCRyxTQUFRO3dCQUFZQyxNQUFLO2tDQUNqRyw0RUFBQ0M7NEJBQUtDLFVBQVM7NEJBQVVDLEdBQUU7NEJBQXVKQyxVQUFTOzs7Ozs7Ozs7Ozs7Ozs7O1lBSW5NLEtBQUs7Z0JBQ0gscUJBQ0UsOERBQUNUO29CQUFJQyxXQUFVOzhCQUNiLDRFQUFDQzt3QkFBSUQsV0FBVTt3QkFBcUNFLE9BQU07d0JBQTZCRSxNQUFLO3dCQUFPRCxTQUFROzswQ0FDekcsOERBQUNNO2dDQUFPVCxXQUFVO2dDQUFhVSxJQUFHO2dDQUFLQyxJQUFHO2dDQUFLQyxHQUFFO2dDQUFLQyxRQUFPO2dDQUFlQyxhQUFZOzs7Ozs7MENBQ3hGLDhEQUFDVDtnQ0FBS0wsV0FBVTtnQ0FBYUksTUFBSztnQ0FBZUcsR0FBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7WUFJM0QsS0FBSztnQkFDSCxxQkFDRSw4REFBQ1I7b0JBQUlDLFdBQVU7OEJBQ2IsNEVBQUNDO3dCQUFJRCxXQUFVO3dCQUFxQ0UsT0FBTTt3QkFBNkJFLE1BQUs7d0JBQU9ELFNBQVE7OzBDQUN6Ryw4REFBQ007Z0NBQU9ULFdBQVU7Z0NBQWFVLElBQUc7Z0NBQUtDLElBQUc7Z0NBQUtDLEdBQUU7Z0NBQUtDLFFBQU87Z0NBQWVDLGFBQVk7Ozs7OzswQ0FDeEYsOERBQUNUO2dDQUFLTCxXQUFVO2dDQUFhSSxNQUFLO2dDQUFlRyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OztZQUkzRCxLQUFLO2dCQUNILHFCQUNFLDhEQUFDUjtvQkFBSUMsV0FBVTs4QkFDYiw0RUFBQ0M7d0JBQUlELFdBQVU7d0JBQXdDRSxPQUFNO3dCQUE2QkMsU0FBUTt3QkFBWUMsTUFBSztrQ0FDakgsNEVBQUNDOzRCQUFLQyxVQUFTOzRCQUFVQyxHQUFFOzRCQUF3TEMsVUFBUzs7Ozs7Ozs7Ozs7Ozs7OztZQUlwTyxLQUFLO2dCQUNILHFCQUNFLDhEQUFDVDtvQkFBSUMsV0FBVTs4QkFDYiw0RUFBQ0M7d0JBQUlDLE9BQU07d0JBQTZCRixXQUFVO3dCQUF5QkcsU0FBUTt3QkFBWUMsTUFBSztrQ0FDbEcsNEVBQUNDOzRCQUFLQyxVQUFTOzRCQUFVQyxHQUFFOzRCQUF3SUMsVUFBUzs7Ozs7Ozs7Ozs7Ozs7OztZQUlwTCxLQUFLO2dCQUNILHFCQUNFLDhEQUFDVDtvQkFBSUMsV0FBVTs4QkFDYiw0RUFBQ0M7d0JBQUlDLE9BQU07d0JBQTZCRixXQUFVO3dCQUF1QkcsU0FBUTt3QkFBWUMsTUFBSztrQ0FDaEcsNEVBQUNDOzRCQUFLQyxVQUFTOzRCQUFVQyxHQUFFOzRCQUFvSEMsVUFBUzs7Ozs7Ozs7Ozs7Ozs7OztZQUloSztnQkFDRSxPQUFPO1FBQ1g7SUFDRjtJQUVBLE1BQU1PLHNCQUFzQjtRQUMxQixPQUFRdEI7WUFDTixLQUFLO2dCQUFRLE9BQU87WUFDcEIsS0FBSztnQkFBYyxPQUFPO1lBQzFCLEtBQUs7Z0JBQVksT0FBTztZQUN4QixLQUFLO2dCQUFhLE9BQU87WUFDekIsS0FBSztnQkFBYSxPQUFPO1lBQ3pCLEtBQUs7Z0JBQVMsT0FBTztZQUNyQjtnQkFBUyxPQUFPO1FBQ2xCO0lBQ0Y7SUFFQSxNQUFNdUIsc0JBQXNCO1FBQzFCLE9BQVF2QjtZQUNOLEtBQUs7Z0JBQVEsT0FBTztZQUNwQixLQUFLO2dCQUFjLE9BQU87WUFDMUIsS0FBSztnQkFBWSxPQUFPO1lBQ3hCLEtBQUs7Z0JBQWEsT0FBTztZQUN6QixLQUFLO2dCQUFhLE9BQU87WUFDekIsS0FBSztnQkFBUyxPQUFPO1lBQ3JCO2dCQUFTLE9BQU87UUFDbEI7SUFDRjtJQUVBLHFCQUNFLDhEQUFDTTtRQUFJQyxXQUFXLEdBQW9CLE9BQWpCTCxrQkFBaUI7OzBCQUNsQyw4REFBQ0k7Z0JBQUlDLFdBQVU7O2tDQUNiLDhEQUFDRDt3QkFBSUMsV0FBVTtrQ0FDWkY7Ozs7OztrQ0FFSCw4REFBQ0M7d0JBQUlDLFdBQVU7OzBDQUNiLDhEQUFDaUI7Z0NBQUdqQixXQUFXLHlCQUF3QyxPQUFmSjswQ0FBbUJDOzs7Ozs7NEJBQzFESCx5QkFDQyw4REFBQ0s7Z0NBQUlDLFdBQVU7MENBQ1pOOzs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBTVQsOERBQUNLO2dCQUFJQyxXQUFVOzBCQUNiLDRFQUFDRDtvQkFDQ0MsV0FBVyxHQUFxRmUsT0FBbEZDLHVCQUFzQiw4REFBa0YsT0FBdEJEOzs7Ozs7Ozs7Ozs7Ozs7OztBQUsxRztLQTdJd0J2QiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL1N0YXR1c0luZGljYXRvci50c3g/ZjNhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XHJcblxyXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5cclxudHlwZSBTdGF0dXNUeXBlID0gJ2lkbGUnIHwgJ2Nvbm5lY3RpbmcnIHwgJ2ZldGNoaW5nJyB8ICdpbmdlc3RpbmcnIHwgJ2NvbXBsZXRlZCcgfCAnZXJyb3InO1xyXG5cclxuaW50ZXJmYWNlIFN0YXR1c0luZGljYXRvclByb3BzIHtcclxuICBzdGF0dXM6IFN0YXR1c1R5cGU7XHJcbiAgbWVzc2FnZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3RhdHVzSW5kaWNhdG9yKHsgc3RhdHVzLCBtZXNzYWdlIH06IFN0YXR1c0luZGljYXRvclByb3BzKSB7XHJcbiAgY29uc3QgZ2V0U3RhdHVzQ29sb3IgPSAoKSA9PiB7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICBjYXNlICdpZGxlJzogcmV0dXJuICdiZy1ncmF5LTEwMCBib3JkZXItZ3JheS0yMDAnO1xyXG4gICAgICBjYXNlICdjb25uZWN0aW5nJzogcmV0dXJuICdiZy1ibHVlLTUwIGJvcmRlci1ibHVlLTIwMCc7XHJcbiAgICAgIGNhc2UgJ2ZldGNoaW5nJzogcmV0dXJuICdiZy1ibHVlLTUwIGJvcmRlci1ibHVlLTMwMCc7XHJcbiAgICAgIGNhc2UgJ2luZ2VzdGluZyc6IHJldHVybiAnYmcteWVsbG93LTUwIGJvcmRlci15ZWxsb3ctMjAwJztcclxuICAgICAgY2FzZSAnY29tcGxldGVkJzogcmV0dXJuICdiZy1ncmVlbi01MCBib3JkZXItZ3JlZW4tMjAwJztcclxuICAgICAgY2FzZSAnZXJyb3InOiByZXR1cm4gJ2JnLXJlZC01MCBib3JkZXItcmVkLTIwMCc7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnYmctZ3JheS0xMDAgYm9yZGVyLWdyYXktMjAwJztcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBnZXRUZXh0Q29sb3IgPSAoKSA9PiB7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICBjYXNlICdpZGxlJzogcmV0dXJuICd0ZXh0LWdyYXktNzAwJztcclxuICAgICAgY2FzZSAnY29ubmVjdGluZyc6IHJldHVybiAndGV4dC1ibHVlLTcwMCc7XHJcbiAgICAgIGNhc2UgJ2ZldGNoaW5nJzogcmV0dXJuICd0ZXh0LWJsdWUtNzAwJztcclxuICAgICAgY2FzZSAnaW5nZXN0aW5nJzogcmV0dXJuICd0ZXh0LXllbGxvdy03MDAnO1xyXG4gICAgICBjYXNlICdjb21wbGV0ZWQnOiByZXR1cm4gJ3RleHQtZ3JlZW4tNzAwJztcclxuICAgICAgY2FzZSAnZXJyb3InOiByZXR1cm4gJ3RleHQtcmVkLTcwMCc7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAndGV4dC1ncmF5LTcwMCc7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZ2V0U3RhdHVzVGV4dCA9ICgpID0+IHtcclxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgJ2lkbGUnOiByZXR1cm4gJ1JlYWR5JztcclxuICAgICAgY2FzZSAnY29ubmVjdGluZyc6IHJldHVybiAnQ29ubmVjdGluZy4uLic7XHJcbiAgICAgIGNhc2UgJ2ZldGNoaW5nJzogcmV0dXJuICdGZXRjaGluZyBEYXRhLi4uJztcclxuICAgICAgY2FzZSAnaW5nZXN0aW5nJzogcmV0dXJuICdQcm9jZXNzaW5nIERhdGEuLi4nO1xyXG4gICAgICBjYXNlICdjb21wbGV0ZWQnOiByZXR1cm4gJ0NvbXBsZXRlZCc7XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzogcmV0dXJuICdFcnJvcic7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnUmVhZHknO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGdldFN0YXR1c0ljb24gPSAoKSA9PiB7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICBjYXNlICdpZGxlJzpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTIgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtNiB3LTYgdGV4dC1ncmF5LTYwMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGggZmlsbFJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0xLTExYTEgMSAwIDEwLTIgMHYzLjU4Nkw3LjcwNyA5LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNGwzIDNhMSAxIDAgMDAxLjQxNCAwbDMtM2ExIDEgMCAwMC0xLjQxNC0xLjQxNEwxMSAxMC41ODZWN3pcIiBjbGlwUnVsZT1cImV2ZW5vZGRcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgJ2Nvbm5lY3RpbmcnOlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtMiBiZy1ibHVlLTIwMCByb3VuZGVkLWZ1bGxcIj5cclxuICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJhbmltYXRlLXNwaW4gaC02IHctNiB0ZXh0LWJsdWUtNjAwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxyXG4gICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3NOYW1lPVwib3BhY2l0eS0yNVwiIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEwXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlV2lkdGg9XCI0XCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgPHBhdGggY2xhc3NOYW1lPVwib3BhY2l0eS03NVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTQgMTJhOCA4IDAgMDE4LThWMEM1LjM3MyAwIDAgNS4zNzMgMCAxMmg0em0yIDUuMjkxQTcuOTYyIDcuOTYyIDAgMDE0IDEySDBjMCAzLjA0MiAxLjEzNSA1LjgyNCAzIDcuOTM4bDMtMi42NDd6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgJ2ZldGNoaW5nJzpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTIgYmctYmx1ZS0zMDAgcm91bmRlZC1mdWxsXCI+XHJcbiAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwiYW5pbWF0ZS1zcGluIGgtNiB3LTYgdGV4dC1ibHVlLTcwMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cclxuICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzTmFtZT1cIm9wYWNpdHktMjVcIiBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZVdpZHRoPVwiNFwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgIDxwYXRoIGNsYXNzTmFtZT1cIm9wYWNpdHktNzVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00IDEyYTggOCAwIDAxOC04VjBDNS4zNzMgMCAwIDUuMzczIDAgMTJoNHptMiA1LjI5MUE3Ljk2MiA3Ljk2MiAwIDAxNCAxMkgwYzAgMy4wNDIgMS4xMzUgNS44MjQgMyA3LjkzOGwzLTIuNjQ3elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICBjYXNlICdpbmdlc3RpbmcnOlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtMiBiZy15ZWxsb3ctMjAwIHJvdW5kZWQtZnVsbFwiPlxyXG4gICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cImFuaW1hdGUtcHVsc2UgaC02IHctNiB0ZXh0LXllbGxvdy03MDBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBmaWxsUnVsZT1cImV2ZW5vZGRcIiBkPVwiTTMgMTdhMSAxIDAgMDExLTFoMTJhMSAxIDAgMTEwIDJINGExIDEgMCAwMS0xLTF6bTMuMjkzLTcuNzA3YTEgMSAwIDAxMS40MTQgMEw5IDEwLjU4NlYzYTEgMSAwIDExMiAwdjcuNTg2bDEuMjkzLTEuMjkzYTEgMSAwIDExMS40MTQgMS40MTRsLTMgM2ExIDEgMCAwMS0xLjQxNCAwbC0zLTNhMSAxIDAgMDEwLTEuNDE0elwiIGNsaXBSdWxlPVwiZXZlbm9kZFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSAnY29tcGxldGVkJzpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTIgYmctZ3JlZW4tMjAwIHJvdW5kZWQtZnVsbFwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzc05hbWU9XCJoLTYgdy02IHRleHQtZ3JlZW4tNzAwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBmaWxsUnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuNzA3LTkuMjkzYTEgMSAwIDAwLTEuNDE0LTEuNDE0TDkgMTAuNTg2IDcuNzA3IDkuMjkzYTEgMSAwIDAwLTEuNDE0IDEuNDE0bDIgMmExIDEgMCAwMDEuNDE0IDBsNC00elwiIGNsaXBSdWxlPVwiZXZlbm9kZFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSAnZXJyb3InOlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtMiBiZy1yZWQtMjAwIHJvdW5kZWQtZnVsbFwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzc05hbWU9XCJoLTYgdy02IHRleHQtcmVkLTcwMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGggZmlsbFJ1bGU9XCJldmVub2RkXCIgZD1cIk0xOCAxMGE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTcgNGExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6bS0xLTlhMSAxIDAgMDAtMSAxdjRhMSAxIDAgMTAyIDBWNmExIDEgMCAwMC0xLTF6XCIgY2xpcFJ1bGU9XCJldmVub2RkXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGdldFByb2dyZXNzQmFyV2lkdGggPSAoKSA9PiB7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICBjYXNlICdpZGxlJzogcmV0dXJuICd3LTAnO1xyXG4gICAgICBjYXNlICdjb25uZWN0aW5nJzogcmV0dXJuICd3LTEvNCc7XHJcbiAgICAgIGNhc2UgJ2ZldGNoaW5nJzogcmV0dXJuICd3LTEvMic7XHJcbiAgICAgIGNhc2UgJ2luZ2VzdGluZyc6IHJldHVybiAndy0zLzQnO1xyXG4gICAgICBjYXNlICdjb21wbGV0ZWQnOiByZXR1cm4gJ3ctZnVsbCc7XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzogcmV0dXJuICd3LWZ1bGwnO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ3ctMCc7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZ2V0UHJvZ3Jlc3NCYXJDb2xvciA9ICgpID0+IHtcclxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgJ2lkbGUnOiByZXR1cm4gJ2JnLWdyYXktMzAwJztcclxuICAgICAgY2FzZSAnY29ubmVjdGluZyc6IHJldHVybiAnYmctYmx1ZS00MDAnO1xyXG4gICAgICBjYXNlICdmZXRjaGluZyc6IHJldHVybiAnYmctYmx1ZS01MDAnO1xyXG4gICAgICBjYXNlICdpbmdlc3RpbmcnOiByZXR1cm4gJ2JnLXllbGxvdy01MDAnO1xyXG4gICAgICBjYXNlICdjb21wbGV0ZWQnOiByZXR1cm4gJ2JnLWdyZWVuLTUwMCc7XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzogcmV0dXJuICdiZy1yZWQtNTAwJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdiZy1ncmF5LTMwMCc7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtnZXRTdGF0dXNDb2xvcigpfSBib3JkZXIgcm91bmRlZC1sZyBwLTUgbWItNiB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgc2hhZG93LXNtIGhvdmVyOnNoYWRvdy1tZGB9PlxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTBcIj5cclxuICAgICAgICAgIHtnZXRTdGF0dXNJY29uKCl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtbC00IGZsZXgtZ3Jvd1wiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzTmFtZT17YHRleHQtYmFzZSBmb250LW1lZGl1bSAke2dldFRleHRDb2xvcigpfWB9PntnZXRTdGF0dXNUZXh0KCl9PC9oMz5cclxuICAgICAgICAgIHttZXNzYWdlICYmIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0xIHRleHQtc20gdGV4dC1ncmF5LTcwMCBtYXgtdy1wcm9zZVwiPlxyXG4gICAgICAgICAgICAgIHttZXNzYWdlfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICBcclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0zIHctZnVsbCBiZy1ncmF5LTIwMCByb3VuZGVkLWZ1bGwgaC0yIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgIDxkaXYgXHJcbiAgICAgICAgICBjbGFzc05hbWU9e2Ake2dldFByb2dyZXNzQmFyQ29sb3IoKX0gaC0yIHJvdW5kZWQtZnVsbCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi03MDAgZWFzZS1pbi1vdXQgJHtnZXRQcm9ncmVzc0JhcldpZHRoKCl9YH1cclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufSAiXSwibmFtZXMiOlsiUmVhY3QiLCJTdGF0dXNJbmRpY2F0b3IiLCJzdGF0dXMiLCJtZXNzYWdlIiwiZ2V0U3RhdHVzQ29sb3IiLCJnZXRUZXh0Q29sb3IiLCJnZXRTdGF0dXNUZXh0IiwiZ2V0U3RhdHVzSWNvbiIsImRpdiIsImNsYXNzTmFtZSIsInN2ZyIsInhtbG5zIiwidmlld0JveCIsImZpbGwiLCJwYXRoIiwiZmlsbFJ1bGUiLCJkIiwiY2xpcFJ1bGUiLCJjaXJjbGUiLCJjeCIsImN5IiwiciIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwiZ2V0UHJvZ3Jlc3NCYXJXaWR0aCIsImdldFByb2dyZXNzQmFyQ29sb3IiLCJoMyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/StatusIndicator.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./components/TableSelection.tsx": +/*!***************************************!*\ + !*** ./components/TableSelection.tsx ***! + \***************************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ TableSelection; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nfunction TableSelection(param) {\n let { tables, onSubmit, isMultiTableEnabled, isLoading } = param;\n _s();\n const [selectedTables, setSelectedTables] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(tables.map((table)=>({\n ...table,\n selected: table.selected || false\n })));\n const [useJoin, setUseJoin] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [joinCondition, setJoinCondition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const handleTableSelectionChange = (tableIndex, selected)=>{\n const updatedTables = [\n ...selectedTables\n ];\n updatedTables[tableIndex].selected = selected;\n setSelectedTables(updatedTables);\n };\n const handleColumnSelectionChange = (tableIndex, columnIndex, selected)=>{\n const updatedTables = [\n ...selectedTables\n ];\n updatedTables[tableIndex].columns[columnIndex].selected = selected;\n setSelectedTables(updatedTables);\n };\n const handleSubmit = (e)=>{\n e.preventDefault();\n onSubmit(selectedTables, useJoin, joinCondition);\n };\n const toggleSelectAll = (tableIndex, selected)=>{\n const updatedTables = [\n ...selectedTables\n ];\n updatedTables[tableIndex].columns.forEach((col)=>{\n col.selected = selected;\n });\n setSelectedTables(updatedTables);\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-semibold mb-6\",\n children: \"Select Tables and Columns\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 52,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n children: [\n selectedTables.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center py-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-gray-500\",\n children: \"No tables available.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 56,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 55,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-6\",\n children: [\n selectedTables.map((table, tableIndex)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border border-gray-200 rounded-lg p-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center mb-4\",\n children: [\n isMultiTableEnabled && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n id: \"table-\".concat(tableIndex),\n className: \"h-4 w-4 text-primary focus:ring-primary border-gray-300 rounded\",\n checked: table.selected,\n onChange: (e)=>handleTableSelectionChange(tableIndex, e.target.checked)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 64,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium \".concat(isMultiTableEnabled ? \"ml-2\" : \"\"),\n children: table.name\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 72,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"ml-auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"text-sm text-primary hover:text-blue-700\",\n onClick: ()=>toggleSelectAll(tableIndex, true),\n children: \"Select All\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 76,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"mx-2 text-gray-300\",\n children: \"|\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 83,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"text-sm text-primary hover:text-blue-700\",\n onClick: ()=>toggleSelectAll(tableIndex, false),\n children: \"Clear All\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 84,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 75,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 62,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-3\",\n children: table.columns.map((column, colIndex)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n id: \"column-\".concat(tableIndex, \"-\").concat(colIndex),\n className: \"h-4 w-4 text-primary focus:ring-primary border-gray-300 rounded\",\n checked: column.selected,\n onChange: (e)=>handleColumnSelectionChange(tableIndex, colIndex, e.target.checked)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 97,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"column-\".concat(tableIndex, \"-\").concat(colIndex),\n className: \"ml-2 text-sm text-gray-700\",\n children: [\n column.name,\n \" \",\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-gray-400\",\n children: [\n \"(\",\n column.type,\n \")\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 105,\n columnNumber: 39\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 104,\n columnNumber: 23\n }, this)\n ]\n }, colIndex, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 96,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 94,\n columnNumber: 17\n }, this)\n ]\n }, tableIndex, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 61,\n columnNumber: 15\n }, this)),\n isMultiTableEnabled && selectedTables.filter((t)=>t.selected).length > 1 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 p-4 border border-blue-200 bg-blue-50 rounded-lg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center mb-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n id: \"useJoin\",\n className: \"h-4 w-4 text-primary focus:ring-primary border-gray-300 rounded\",\n checked: useJoin,\n onChange: (e)=>setUseJoin(e.target.checked)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 116,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"useJoin\",\n className: \"ml-2 text-sm font-medium text-gray-700\",\n children: \"Use JOIN for multiple tables\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 123,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 115,\n columnNumber: 17\n }, this),\n useJoin && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"joinCondition\",\n className: \"block text-sm font-medium text-gray-700 mb-1\",\n children: \"JOIN Condition\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 130,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n id: \"joinCondition\",\n className: \"form-input\",\n placeholder: \"e.g., table1.id = table2.table1_id\",\n value: joinCondition,\n onChange: (e)=>setJoinCondition(e.target.value)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 133,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-gray-500\",\n children: \"Specify the JOIN condition between tables.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 141,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 129,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 114,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 59,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-6 flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"btn btn-primary\",\n disabled: isLoading || selectedTables.length === 0 || !selectedTables.some((t)=>t.selected || !isMultiTableEnabled),\n children: isLoading ? \"Processing...\" : \"Preview Data\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 152,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 151,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 53,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\TableSelection.tsx\",\n lineNumber: 51,\n columnNumber: 5\n }, this);\n}\n_s(TableSelection, \"F50EWAwoQPvFN6R8inTV7tyq0U8=\");\n_c = TableSelection;\nvar _c;\n$RefreshReg$(_c, \"TableSelection\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvVGFibGVTZWxlY3Rpb24udHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVpQztBQVVsQixTQUFTQyxlQUFlLEtBS2pCO1FBTGlCLEVBQ3JDQyxNQUFNLEVBQ05DLFFBQVEsRUFDUkMsbUJBQW1CLEVBQ25CQyxTQUFTLEVBQ1csR0FMaUI7O0lBTXJDLE1BQU0sQ0FBQ0MsZ0JBQWdCQyxrQkFBa0IsR0FBR1AsK0NBQVFBLENBQ2xERSxPQUFPTSxHQUFHLENBQUNDLENBQUFBLFFBQVU7WUFBRSxHQUFHQSxLQUFLO1lBQUVDLFVBQVVELE1BQU1DLFFBQVEsSUFBSTtRQUFNO0lBRXJFLE1BQU0sQ0FBQ0MsU0FBU0MsV0FBVyxHQUFHWiwrQ0FBUUEsQ0FBVTtJQUNoRCxNQUFNLENBQUNhLGVBQWVDLGlCQUFpQixHQUFHZCwrQ0FBUUEsQ0FBUztJQUUzRCxNQUFNZSw2QkFBNkIsQ0FBQ0MsWUFBb0JOO1FBQ3RELE1BQU1PLGdCQUFnQjtlQUFJWDtTQUFlO1FBQ3pDVyxhQUFhLENBQUNELFdBQVcsQ0FBQ04sUUFBUSxHQUFHQTtRQUNyQ0gsa0JBQWtCVTtJQUNwQjtJQUVBLE1BQU1DLDhCQUE4QixDQUFDRixZQUFvQkcsYUFBcUJUO1FBQzVFLE1BQU1PLGdCQUFnQjtlQUFJWDtTQUFlO1FBQ3pDVyxhQUFhLENBQUNELFdBQVcsQ0FBQ0ksT0FBTyxDQUFDRCxZQUFZLENBQUNULFFBQVEsR0FBR0E7UUFDMURILGtCQUFrQlU7SUFDcEI7SUFFQSxNQUFNSSxlQUFlLENBQUNDO1FBQ3BCQSxFQUFFQyxjQUFjO1FBQ2hCcEIsU0FBU0csZ0JBQWdCSyxTQUFTRTtJQUNwQztJQUVBLE1BQU1XLGtCQUFrQixDQUFDUixZQUFvQk47UUFDM0MsTUFBTU8sZ0JBQWdCO2VBQUlYO1NBQWU7UUFDekNXLGFBQWEsQ0FBQ0QsV0FBVyxDQUFDSSxPQUFPLENBQUNLLE9BQU8sQ0FBQ0MsQ0FBQUE7WUFDeENBLElBQUloQixRQUFRLEdBQUdBO1FBQ2pCO1FBQ0FILGtCQUFrQlU7SUFDcEI7SUFFQSxxQkFDRSw4REFBQ1U7UUFBSUMsV0FBVTs7MEJBQ2IsOERBQUNDO2dCQUFHRCxXQUFVOzBCQUE2Qjs7Ozs7OzBCQUMzQyw4REFBQ0U7Z0JBQUszQixVQUFVa0I7O29CQUNiZixlQUFleUIsTUFBTSxLQUFLLGtCQUN6Qiw4REFBQ0o7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNJOzRCQUFFSixXQUFVO3NDQUFnQjs7Ozs7Ozs7Ozs2Q0FHL0IsOERBQUNEO3dCQUFJQyxXQUFVOzs0QkFDWnRCLGVBQWVFLEdBQUcsQ0FBQyxDQUFDQyxPQUFPTywyQkFDMUIsOERBQUNXO29DQUFxQkMsV0FBVTs7c0RBQzlCLDhEQUFDRDs0Q0FBSUMsV0FBVTs7Z0RBQ1p4QixxQ0FDQyw4REFBQzZCO29EQUNDQyxNQUFLO29EQUNMQyxJQUFJLFNBQW9CLE9BQVhuQjtvREFDYlksV0FBVTtvREFDVlEsU0FBUzNCLE1BQU1DLFFBQVE7b0RBQ3ZCMkIsVUFBVSxDQUFDZixJQUFNUCwyQkFBMkJDLFlBQVlNLEVBQUVnQixNQUFNLENBQUNGLE9BQU87Ozs7Ozs4REFHNUUsOERBQUNHO29EQUFHWCxXQUFXLHVCQUF5RCxPQUFsQ3hCLHNCQUFzQixTQUFTOzhEQUNsRUssTUFBTStCLElBQUk7Ozs7Ozs4REFFYiw4REFBQ2I7b0RBQUlDLFdBQVU7O3NFQUNiLDhEQUFDYTs0REFDQ1AsTUFBSzs0REFDTE4sV0FBVTs0REFDVmMsU0FBUyxJQUFNbEIsZ0JBQWdCUixZQUFZO3NFQUM1Qzs7Ozs7O3NFQUdELDhEQUFDMkI7NERBQUtmLFdBQVU7c0VBQXFCOzs7Ozs7c0VBQ3JDLDhEQUFDYTs0REFDQ1AsTUFBSzs0REFDTE4sV0FBVTs0REFDVmMsU0FBUyxJQUFNbEIsZ0JBQWdCUixZQUFZO3NFQUM1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NEQU1MLDhEQUFDVzs0Q0FBSUMsV0FBVTtzREFDWm5CLE1BQU1XLE9BQU8sQ0FBQ1osR0FBRyxDQUFDLENBQUNvQyxRQUFRQyx5QkFDMUIsOERBQUNsQjtvREFBbUJDLFdBQVU7O3NFQUM1Qiw4REFBQ0s7NERBQ0NDLE1BQUs7NERBQ0xDLElBQUksVUFBd0JVLE9BQWQ3QixZQUFXLEtBQVksT0FBVDZCOzREQUM1QmpCLFdBQVU7NERBQ1ZRLFNBQVNRLE9BQU9sQyxRQUFROzREQUN4QjJCLFVBQVUsQ0FBQ2YsSUFBTUosNEJBQTRCRixZQUFZNkIsVUFBVXZCLEVBQUVnQixNQUFNLENBQUNGLE9BQU87Ozs7OztzRUFFckYsOERBQUNVOzREQUFNQyxTQUFTLFVBQXdCRixPQUFkN0IsWUFBVyxLQUFZLE9BQVQ2Qjs0REFBWWpCLFdBQVU7O2dFQUMzRGdCLE9BQU9KLElBQUk7Z0VBQUM7OEVBQUMsOERBQUNHO29FQUFLZixXQUFVOzt3RUFBd0I7d0VBQUVnQixPQUFPVixJQUFJO3dFQUFDOzs7Ozs7Ozs7Ozs7OzttREFUOURXOzs7Ozs7Ozs7OzttQ0FuQ043Qjs7Ozs7NEJBb0RYWix1QkFBdUJFLGVBQWUwQyxNQUFNLENBQUNDLENBQUFBLElBQUtBLEVBQUV2QyxRQUFRLEVBQUVxQixNQUFNLEdBQUcsbUJBQ3RFLDhEQUFDSjtnQ0FBSUMsV0FBVTs7a0RBQ2IsOERBQUNEO3dDQUFJQyxXQUFVOzswREFDYiw4REFBQ0s7Z0RBQ0NDLE1BQUs7Z0RBQ0xDLElBQUc7Z0RBQ0hQLFdBQVU7Z0RBQ1ZRLFNBQVN6QjtnREFDVDBCLFVBQVUsQ0FBQ2YsSUFBTVYsV0FBV1UsRUFBRWdCLE1BQU0sQ0FBQ0YsT0FBTzs7Ozs7OzBEQUU5Qyw4REFBQ1U7Z0RBQU1DLFNBQVE7Z0RBQVVuQixXQUFVOzBEQUF5Qzs7Ozs7Ozs7Ozs7O29DQUs3RWpCLHlCQUNDLDhEQUFDZ0I7d0NBQUlDLFdBQVU7OzBEQUNiLDhEQUFDa0I7Z0RBQU1DLFNBQVE7Z0RBQWdCbkIsV0FBVTswREFBK0M7Ozs7OzswREFHeEYsOERBQUNLO2dEQUNDQyxNQUFLO2dEQUNMQyxJQUFHO2dEQUNIUCxXQUFVO2dEQUNWc0IsYUFBWTtnREFDWkMsT0FBT3RDO2dEQUNQd0IsVUFBVSxDQUFDZixJQUFNUixpQkFBaUJRLEVBQUVnQixNQUFNLENBQUNhLEtBQUs7Ozs7OzswREFFbEQsOERBQUNuQjtnREFBRUosV0FBVTswREFBNkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FVdEQsOERBQUNEO3dCQUFJQyxXQUFVO2tDQUNiLDRFQUFDYTs0QkFDQ1AsTUFBSzs0QkFDTE4sV0FBVTs0QkFDVndCLFVBQVUvQyxhQUFhQyxlQUFleUIsTUFBTSxLQUFLLEtBQUssQ0FBQ3pCLGVBQWUrQyxJQUFJLENBQUNKLENBQUFBLElBQUtBLEVBQUV2QyxRQUFRLElBQUksQ0FBQ047c0NBRTlGQyxZQUFZLGtCQUFrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNM0M7R0F0SndCSjtLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL1RhYmxlU2VsZWN0aW9uLnRzeD8zNDNhIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcclxuXHJcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBUYWJsZUluZm8gfSBmcm9tICdAL2xpYi9hcGknO1xyXG5cclxuaW50ZXJmYWNlIFRhYmxlU2VsZWN0aW9uUHJvcHMge1xyXG4gIHRhYmxlczogVGFibGVJbmZvW107XHJcbiAgb25TdWJtaXQ6ICh0YWJsZXM6IFRhYmxlSW5mb1tdLCB1c2VKb2luOiBib29sZWFuLCBqb2luQ29uZGl0aW9uOiBzdHJpbmcpID0+IHZvaWQ7XHJcbiAgaXNNdWx0aVRhYmxlRW5hYmxlZDogYm9vbGVhbjtcclxuICBpc0xvYWRpbmc6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRhYmxlU2VsZWN0aW9uKHtcclxuICB0YWJsZXMsXHJcbiAgb25TdWJtaXQsXHJcbiAgaXNNdWx0aVRhYmxlRW5hYmxlZCxcclxuICBpc0xvYWRpbmdcclxufTogVGFibGVTZWxlY3Rpb25Qcm9wcykge1xyXG4gIGNvbnN0IFtzZWxlY3RlZFRhYmxlcywgc2V0U2VsZWN0ZWRUYWJsZXNdID0gdXNlU3RhdGU8VGFibGVJbmZvW10+KFxyXG4gICAgdGFibGVzLm1hcCh0YWJsZSA9PiAoeyAuLi50YWJsZSwgc2VsZWN0ZWQ6IHRhYmxlLnNlbGVjdGVkIHx8IGZhbHNlIH0pKVxyXG4gICk7XHJcbiAgY29uc3QgW3VzZUpvaW4sIHNldFVzZUpvaW5dID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNvbnN0IFtqb2luQ29uZGl0aW9uLCBzZXRKb2luQ29uZGl0aW9uXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpO1xyXG5cclxuICBjb25zdCBoYW5kbGVUYWJsZVNlbGVjdGlvbkNoYW5nZSA9ICh0YWJsZUluZGV4OiBudW1iZXIsIHNlbGVjdGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB1cGRhdGVkVGFibGVzID0gWy4uLnNlbGVjdGVkVGFibGVzXTtcclxuICAgIHVwZGF0ZWRUYWJsZXNbdGFibGVJbmRleF0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcclxuICAgIHNldFNlbGVjdGVkVGFibGVzKHVwZGF0ZWRUYWJsZXMpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZUNvbHVtblNlbGVjdGlvbkNoYW5nZSA9ICh0YWJsZUluZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIsIHNlbGVjdGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB1cGRhdGVkVGFibGVzID0gWy4uLnNlbGVjdGVkVGFibGVzXTtcclxuICAgIHVwZGF0ZWRUYWJsZXNbdGFibGVJbmRleF0uY29sdW1uc1tjb2x1bW5JbmRleF0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcclxuICAgIHNldFNlbGVjdGVkVGFibGVzKHVwZGF0ZWRUYWJsZXMpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIG9uU3VibWl0KHNlbGVjdGVkVGFibGVzLCB1c2VKb2luLCBqb2luQ29uZGl0aW9uKTtcclxuICB9O1xyXG5cclxuICBjb25zdCB0b2dnbGVTZWxlY3RBbGwgPSAodGFibGVJbmRleDogbnVtYmVyLCBzZWxlY3RlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgdXBkYXRlZFRhYmxlcyA9IFsuLi5zZWxlY3RlZFRhYmxlc107XHJcbiAgICB1cGRhdGVkVGFibGVzW3RhYmxlSW5kZXhdLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICBjb2wuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcclxuICAgIH0pO1xyXG4gICAgc2V0U2VsZWN0ZWRUYWJsZXModXBkYXRlZFRhYmxlcyk7XHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZFwiPlxyXG4gICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LXNlbWlib2xkIG1iLTZcIj5TZWxlY3QgVGFibGVzIGFuZCBDb2x1bW5zPC9oMj5cclxuICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XHJcbiAgICAgICAge3NlbGVjdGVkVGFibGVzLmxlbmd0aCA9PT0gMCA/IChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgcHktOFwiPlxyXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LWdyYXktNTAwXCI+Tm8gdGFibGVzIGF2YWlsYWJsZS48L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApIDogKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTZcIj5cclxuICAgICAgICAgICAge3NlbGVjdGVkVGFibGVzLm1hcCgodGFibGUsIHRhYmxlSW5kZXgpID0+IChcclxuICAgICAgICAgICAgICA8ZGl2IGtleT17dGFibGVJbmRleH0gY2xhc3NOYW1lPVwiYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLWxnIHAtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgIHtpc011bHRpVGFibGVFbmFibGVkICYmIChcclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRhYmxlLSR7dGFibGVJbmRleH1gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC00IHctNCB0ZXh0LXByaW1hcnkgZm9jdXM6cmluZy1wcmltYXJ5IGJvcmRlci1ncmF5LTMwMCByb3VuZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3RhYmxlLnNlbGVjdGVkfVxyXG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVUYWJsZVNlbGVjdGlvbkNoYW5nZSh0YWJsZUluZGV4LCBlLnRhcmdldC5jaGVja2VkKX1cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPXtgdGV4dC1sZyBmb250LW1lZGl1bSAke2lzTXVsdGlUYWJsZUVuYWJsZWQgPyAnbWwtMicgOiAnJ31gfT5cclxuICAgICAgICAgICAgICAgICAgICB7dGFibGUubmFtZX1cclxuICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtcHJpbWFyeSBob3Zlcjp0ZXh0LWJsdWUtNzAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRvZ2dsZVNlbGVjdEFsbCh0YWJsZUluZGV4LCB0cnVlKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgQWxsXHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibXgtMiB0ZXh0LWdyYXktMzAwXCI+fDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1wcmltYXJ5IGhvdmVyOnRleHQtYmx1ZS03MDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlU2VsZWN0QWxsKHRhYmxlSW5kZXgsIGZhbHNlKX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICBDbGVhciBBbGxcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgc206Z3JpZC1jb2xzLTIgbWQ6Z3JpZC1jb2xzLTMgbGc6Z3JpZC1jb2xzLTQgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAge3RhYmxlLmNvbHVtbnMubWFwKChjb2x1bW4sIGNvbEluZGV4KSA9PiAoXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e2NvbEluZGV4fSBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgY29sdW1uLSR7dGFibGVJbmRleH0tJHtjb2xJbmRleH1gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTQgdy00IHRleHQtcHJpbWFyeSBmb2N1czpyaW5nLXByaW1hcnkgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtjb2x1bW4uc2VsZWN0ZWR9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ29sdW1uU2VsZWN0aW9uQ2hhbmdlKHRhYmxlSW5kZXgsIGNvbEluZGV4LCBlLnRhcmdldC5jaGVja2VkKX1cclxuICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj17YGNvbHVtbi0ke3RhYmxlSW5kZXh9LSR7Y29sSW5kZXh9YH0gY2xhc3NOYW1lPVwibWwtMiB0ZXh0LXNtIHRleHQtZ3JheS03MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbi5uYW1lfSA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtZ3JheS00MDBcIj4oe2NvbHVtbi50eXBlfSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICApKX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApKX1cclxuXHJcbiAgICAgICAgICAgIHtpc011bHRpVGFibGVFbmFibGVkICYmIHNlbGVjdGVkVGFibGVzLmZpbHRlcih0ID0+IHQuc2VsZWN0ZWQpLmxlbmd0aCA+IDEgJiYgKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNiBwLTQgYm9yZGVyIGJvcmRlci1ibHVlLTIwMCBiZy1ibHVlLTUwIHJvdW5kZWQtbGdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwidXNlSm9pblwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC00IHctNCB0ZXh0LXByaW1hcnkgZm9jdXM6cmluZy1wcmltYXJ5IGJvcmRlci1ncmF5LTMwMCByb3VuZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXt1c2VKb2lufVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0VXNlSm9pbihlLnRhcmdldC5jaGVja2VkKX1cclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJ1c2VKb2luXCIgY2xhc3NOYW1lPVwibWwtMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICBVc2UgSk9JTiBmb3IgbXVsdGlwbGUgdGFibGVzXHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAge3VzZUpvaW4gJiYgKFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImpvaW5Db25kaXRpb25cIiBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgbWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgSk9JTiBDb25kaXRpb25cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJqb2luQ29uZGl0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0taW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuLCB0YWJsZTEuaWQgPSB0YWJsZTIudGFibGUxX2lkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtqb2luQ29uZGl0aW9ufVxyXG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRKb2luQ29uZGl0aW9uKGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC14cyB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5IHRoZSBKT0lOIGNvbmRpdGlvbiBiZXR3ZWVuIHRhYmxlcy5cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNiBmbGV4IGp1c3RpZnktZW5kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nIHx8IHNlbGVjdGVkVGFibGVzLmxlbmd0aCA9PT0gMCB8fCAhc2VsZWN0ZWRUYWJsZXMuc29tZSh0ID0+IHQuc2VsZWN0ZWQgfHwgIWlzTXVsdGlUYWJsZUVuYWJsZWQpfVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7aXNMb2FkaW5nID8gJ1Byb2Nlc3NpbmcuLi4nIDogJ1ByZXZpZXcgRGF0YSd9XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufSAiXSwibmFtZXMiOlsidXNlU3RhdGUiLCJUYWJsZVNlbGVjdGlvbiIsInRhYmxlcyIsIm9uU3VibWl0IiwiaXNNdWx0aVRhYmxlRW5hYmxlZCIsImlzTG9hZGluZyIsInNlbGVjdGVkVGFibGVzIiwic2V0U2VsZWN0ZWRUYWJsZXMiLCJtYXAiLCJ0YWJsZSIsInNlbGVjdGVkIiwidXNlSm9pbiIsInNldFVzZUpvaW4iLCJqb2luQ29uZGl0aW9uIiwic2V0Sm9pbkNvbmRpdGlvbiIsImhhbmRsZVRhYmxlU2VsZWN0aW9uQ2hhbmdlIiwidGFibGVJbmRleCIsInVwZGF0ZWRUYWJsZXMiLCJoYW5kbGVDb2x1bW5TZWxlY3Rpb25DaGFuZ2UiLCJjb2x1bW5JbmRleCIsImNvbHVtbnMiLCJoYW5kbGVTdWJtaXQiLCJlIiwicHJldmVudERlZmF1bHQiLCJ0b2dnbGVTZWxlY3RBbGwiLCJmb3JFYWNoIiwiY29sIiwiZGl2IiwiY2xhc3NOYW1lIiwiaDIiLCJmb3JtIiwibGVuZ3RoIiwicCIsImlucHV0IiwidHlwZSIsImlkIiwiY2hlY2tlZCIsIm9uQ2hhbmdlIiwidGFyZ2V0IiwiaDMiLCJuYW1lIiwiYnV0dG9uIiwib25DbGljayIsInNwYW4iLCJjb2x1bW4iLCJjb2xJbmRleCIsImxhYmVsIiwiaHRtbEZvciIsImZpbHRlciIsInQiLCJwbGFjZWhvbGRlciIsInZhbHVlIiwiZGlzYWJsZWQiLCJzb21lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/TableSelection.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./lib/api.ts": +/*!********************!*\ + !*** ./lib/api.ts ***! + \********************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ \"(app-pages-browser)/./node_modules/axios/lib/axios.js\");\n\n// API client\nconst api = {\n // ClickHouse endpoints\n testClickHouseConnection: async (config)=>{\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(\"/api/clickhouse/test-connection\", config);\n return response.data;\n },\n getClickHouseTables: async (config)=>{\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(\"/api/clickhouse/tables\", config);\n return response.data;\n },\n // File endpoints\n uploadFile: async (file, delimiter, hasHeader)=>{\n const formData = new FormData();\n formData.append(\"file\", file);\n formData.append(\"delimiter\", delimiter);\n formData.append(\"hasHeader\", hasHeader.toString());\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(\"/api/upload\", formData, {\n headers: {\n \"Content-Type\": \"multipart/form-data\"\n }\n });\n return response.data;\n },\n // Ingestion endpoints\n ingestData: async (request)=>{\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(\"/api/ingestion/ingest\", request);\n return response.data;\n },\n previewData: async (request)=>{\n const response = await axios__WEBPACK_IMPORTED_MODULE_0__[\"default\"].post(\"/api/ingestion/preview\", request);\n return response.data;\n },\n // Download endpoint\n getDownloadUrl: (fileName)=>{\n return \"/api/download/\".concat(fileName);\n }\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (api);\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2xpYi9hcGkudHMiLCJtYXBwaW5ncyI6Ijs7QUFBMEI7QUFnRDFCLGFBQWE7QUFDYixNQUFNQyxNQUFNO0lBQ1YsdUJBQXVCO0lBQ3ZCQywwQkFBMEIsT0FBT0M7UUFDL0IsTUFBTUMsV0FBVyxNQUFNSiw2Q0FBS0EsQ0FBQ0ssSUFBSSxDQUFDLG1DQUFtQ0Y7UUFDckUsT0FBT0MsU0FBU0UsSUFBSTtJQUN0QjtJQUVBQyxxQkFBcUIsT0FBT0o7UUFDMUIsTUFBTUMsV0FBVyxNQUFNSiw2Q0FBS0EsQ0FBQ0ssSUFBSSxDQUFjLDBCQUEwQkY7UUFDekUsT0FBT0MsU0FBU0UsSUFBSTtJQUN0QjtJQUVBLGlCQUFpQjtJQUNqQkUsWUFBWSxPQUFPQyxNQUFZQyxXQUFtQkM7UUFDaEQsTUFBTUMsV0FBVyxJQUFJQztRQUNyQkQsU0FBU0UsTUFBTSxDQUFDLFFBQVFMO1FBQ3hCRyxTQUFTRSxNQUFNLENBQUMsYUFBYUo7UUFDN0JFLFNBQVNFLE1BQU0sQ0FBQyxhQUFhSCxVQUFVSSxRQUFRO1FBRS9DLE1BQU1YLFdBQVcsTUFBTUosNkNBQUtBLENBQUNLLElBQUksQ0FBQyxlQUFlTyxVQUFVO1lBQ3pESSxTQUFTO2dCQUNQLGdCQUFnQjtZQUNsQjtRQUNGO1FBRUEsT0FBT1osU0FBU0UsSUFBSTtJQUN0QjtJQUVBLHNCQUFzQjtJQUN0QlcsWUFBWSxPQUFPQztRQUNqQixNQUFNZCxXQUFXLE1BQU1KLDZDQUFLQSxDQUFDSyxJQUFJLENBQW9CLHlCQUF5QmE7UUFDOUUsT0FBT2QsU0FBU0UsSUFBSTtJQUN0QjtJQUVBYSxhQUFhLE9BQU9EO1FBQ2xCLE1BQU1kLFdBQVcsTUFBTUosNkNBQUtBLENBQUNLLElBQUksQ0FBQywwQkFBMEJhO1FBQzVELE9BQU9kLFNBQVNFLElBQUk7SUFDdEI7SUFFQSxvQkFBb0I7SUFDcEJjLGdCQUFnQixDQUFDQztRQUNmLE9BQU8saUJBQTBCLE9BQVRBO0lBQzFCO0FBQ0Y7QUFFQSwrREFBZXBCLEdBQUdBLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbGliL2FwaS50cz82OGExIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XHJcblxyXG4vLyBUeXBlc1xyXG5leHBvcnQgaW50ZXJmYWNlIENsaWNrSG91c2VDb25maWcge1xyXG4gIGhvc3Q6IHN0cmluZztcclxuICBwb3J0OiBudW1iZXI7XHJcbiAgZGF0YWJhc2U6IHN0cmluZztcclxuICB1c2VyOiBzdHJpbmc7XHJcbiAgand0VG9rZW46IHN0cmluZztcclxuICBzZWN1cmU6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmxhdEZpbGVDb25maWcge1xyXG4gIGRlbGltaXRlcjogc3RyaW5nO1xyXG4gIGhhc0hlYWRlcjogYm9vbGVhbjtcclxuICBmaWxlUGF0aD86IHN0cmluZztcclxuICBmaWxlTmFtZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUNvbHVtbiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBzZWxlY3RlZDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUluZm8ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBjb2x1bW5zOiBUYWJsZUNvbHVtbltdO1xyXG4gIHNlbGVjdGVkOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEluZ2VzdGlvblJlcXVlc3Qge1xyXG4gIHNvdXJjZTogJ2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJztcclxuICB0YXJnZXQ6ICdjbGlja2hvdXNlJyB8ICdmbGF0ZmlsZSc7XHJcbiAgY2xpY2tIb3VzZUNvbmZpZz86IENsaWNrSG91c2VDb25maWc7XHJcbiAgZmxhdEZpbGVDb25maWc/OiBGbGF0RmlsZUNvbmZpZztcclxuICB0YWJsZXM6IFRhYmxlSW5mb1tdO1xyXG4gIGpvaW5Db25kaXRpb24/OiBzdHJpbmc7XHJcbiAgdXNlSm9pbjogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbmdlc3Rpb25SZXNwb25zZSB7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgdG90YWxSZWNvcmRzOiBudW1iZXI7XHJcbiAgZmlsZU5hbWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8vIEFQSSBjbGllbnRcclxuY29uc3QgYXBpID0ge1xyXG4gIC8vIENsaWNrSG91c2UgZW5kcG9pbnRzXHJcbiAgdGVzdENsaWNrSG91c2VDb25uZWN0aW9uOiBhc3luYyAoY29uZmlnOiBDbGlja0hvdXNlQ29uZmlnKSA9PiB7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoJy9hcGkvY2xpY2tob3VzZS90ZXN0LWNvbm5lY3Rpb24nLCBjb25maWcpO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XHJcbiAgfSxcclxuICBcclxuICBnZXRDbGlja0hvdXNlVGFibGVzOiBhc3luYyAoY29uZmlnOiBDbGlja0hvdXNlQ29uZmlnKSA9PiB7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8VGFibGVJbmZvW10+KCcvYXBpL2NsaWNraG91c2UvdGFibGVzJywgY29uZmlnKTtcclxuICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gIH0sXHJcbiAgXHJcbiAgLy8gRmlsZSBlbmRwb2ludHNcclxuICB1cGxvYWRGaWxlOiBhc3luYyAoZmlsZTogRmlsZSwgZGVsaW1pdGVyOiBzdHJpbmcsIGhhc0hlYWRlcjogYm9vbGVhbikgPT4ge1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdkZWxpbWl0ZXInLCBkZWxpbWl0ZXIpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdoYXNIZWFkZXInLCBoYXNIZWFkZXIudG9TdHJpbmcoKSk7XHJcbiAgICBcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdCgnL2FwaS91cGxvYWQnLCBmb3JtRGF0YSwge1xyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcclxuICB9LFxyXG4gIFxyXG4gIC8vIEluZ2VzdGlvbiBlbmRwb2ludHNcclxuICBpbmdlc3REYXRhOiBhc3luYyAocmVxdWVzdDogSW5nZXN0aW9uUmVxdWVzdCkgPT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0PEluZ2VzdGlvblJlc3BvbnNlPignL2FwaS9pbmdlc3Rpb24vaW5nZXN0JywgcmVxdWVzdCk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcclxuICB9LFxyXG4gIFxyXG4gIHByZXZpZXdEYXRhOiBhc3luYyAocmVxdWVzdDogSW5nZXN0aW9uUmVxdWVzdCkgPT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KCcvYXBpL2luZ2VzdGlvbi9wcmV2aWV3JywgcmVxdWVzdCk7XHJcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcclxuICB9LFxyXG4gIFxyXG4gIC8vIERvd25sb2FkIGVuZHBvaW50XHJcbiAgZ2V0RG93bmxvYWRVcmw6IChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4gYC9hcGkvZG93bmxvYWQvJHtmaWxlTmFtZX1gO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBhcGk7ICJdLCJuYW1lcyI6WyJheGlvcyIsImFwaSIsInRlc3RDbGlja0hvdXNlQ29ubmVjdGlvbiIsImNvbmZpZyIsInJlc3BvbnNlIiwicG9zdCIsImRhdGEiLCJnZXRDbGlja0hvdXNlVGFibGVzIiwidXBsb2FkRmlsZSIsImZpbGUiLCJkZWxpbWl0ZXIiLCJoYXNIZWFkZXIiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwidG9TdHJpbmciLCJoZWFkZXJzIiwiaW5nZXN0RGF0YSIsInJlcXVlc3QiLCJwcmV2aWV3RGF0YSIsImdldERvd25sb2FkVXJsIiwiZmlsZU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./lib/api.ts\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js ***! + \****************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false;\n\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference');\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_CLIENT_REFERENCE$2 || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n if (typeof type === 'function') {\n if (type.$$typeof === REACT_CLIENT_REFERENCE$1) {\n // TODO: Create a convention for naming client references with debug info.\n return null;\n }\n\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n case REACT_CACHE_TYPE:\n {\n return 'Cache';\n }\n\n }\n\n if (typeof type === 'object') {\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n * (1) throwing and catching an error in the function - this will be our\n * control error.\n * (2) calling the component which will eventually throw an error that we'll\n * catch - this will be our sample error.\n * (3) diffing the control and sample error stacks to find the stack frame\n * which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n /**\n * Finding a common stack frame between sample and control errors can be\n * tricky given the different types and levels of stack trace truncation from\n * different JS VMs. So instead we'll attempt to control what that common\n * frame should be through this object method:\n * Having both the sample and control errors be in the function under the\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n * `displayName` properties of the function ensures that a stack\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n * it for both control and sample stacks.\n */\n\n\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n var control;\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe[prop-missing]\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n } // TODO(luna): This will currently only throw if the function component\n // tries to access React/ReactDOM/props. We should probably make this throw\n // in simple components too\n\n\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n // component, which we don't yet support. Attach a noop catch handler to\n // silence the error.\n // TODO: Implement component stacks for async client components?\n\n if (maybePromise && typeof maybePromise.catch === 'function') {\n maybePromise.catch(function () {});\n }\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n return [sample.stack, control.stack];\n }\n }\n\n return [null, null];\n }\n }; // $FlowFixMe[prop-missing]\n\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n if (namePropDescriptor && namePropDescriptor.configurable) {\n // V8 utilizes a function's `name` property when generating a stack trace.\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n // is set to `false`.\n // $FlowFixMe[cannot-write]\n 'name', {\n value: 'DetermineComponentFrameRoot'\n });\n }\n\n try {\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n\n if (sampleStack && controlStack) {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sampleStack.split('\\n');\n var controlLines = controlStack.split('\\n');\n var s = 0;\n var c = 0;\n\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n s++;\n }\n\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n c++;\n } // We couldn't find our intentionally injected common root frame, attempt\n // to find another common root frame by search from the bottom of the\n // control stack...\n\n\n if (s === sampleLines.length || c === controlLines.length) {\n s = sampleLines.length - 1;\n c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n if (true) {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe[incompatible-use] This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement$1(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement$1(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement$1(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n return type;\n }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner$1.current && self && ReactCurrentOwner$1.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner$1.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nfunction ReactElement(type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n}\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV$1(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner$1.current, props);\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = getComponentNameFromType(parentType);\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object' || !node) {\n return;\n }\n\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n if (type.$$typeof === REACT_CLIENT_REFERENCE) {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV$1(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n\nvar jsxDEV = jsxWithValidation ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsxDEV = jsxDEV;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzR0FBMEI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUcsZUFBZTtBQUNoSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSLGtEQUFrRDtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEI7QUFDNUI7QUFDQSxxQ0FBcUM7O0FBRXJDLGdDQUFnQztBQUNoQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUEscUVBQXFFOztBQUVyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQSxTQUFTO0FBQ1QsdUJBQXVCO0FBQ3ZCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCx3QkFBd0I7QUFDeEI7QUFDQSxTQUFTO0FBQ1QsaUNBQWlDO0FBQ2pDO0FBQ0EsU0FBUztBQUNULDJCQUEyQjtBQUMzQjtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7O0FBR2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7OztBQUdkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBOzs7QUFHQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLGdIQUFnSDs7QUFFaEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBLGdGQUFnRjtBQUNoRjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLElBQUk7QUFDeEI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOzs7QUFHbEI7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJIQUEySDtBQUMzSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9FQUFvRTs7QUFFcEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHOztBQUVsRztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2QsV0FBVyxlQUFlO0FBQzFCLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQiwyREFBMkQsVUFBVTtBQUNyRSx5QkFBeUIsVUFBVTtBQUNuQztBQUNBLGFBQWEsVUFBVTtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsV0FBVyxHQUFHO0FBQ2Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkRBQTZEO0FBQzdEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsR0FBRztBQUNkOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9EQUFvRDtBQUNwRCxzQkFBc0IsaUJBQWlCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLDRDQUE0Qzs7QUFFNUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6Qjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw0REFBNEQ7QUFDNUQ7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsOENBQThDLGdEQUFnRCxNQUFNLGFBQWE7O0FBRWpIO0FBQ0EsK0NBQStDLGtDQUFrQyxPQUFPOztBQUV4Rix1R0FBdUcsY0FBYyxVQUFVLGdHQUFnRyxrQkFBa0IsVUFBVSxVQUFVOztBQUVyUTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBLGdCQUFnQjtBQUNoQixjQUFjO0FBQ2QsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcz8yMWY3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKTtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKTtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0Jyk7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKTtcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5Jyk7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbnZhciBSRUFDVF9DQUNIRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY2FjaGUnKTtcbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG5cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGl0ZW0pO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cbnZhciBlbmFibGVDYWNoZUVsZW1lbnQgPSBmYWxzZTtcbnZhciBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyA9IGZhbHNlOyAvLyBObyBrbm93biBidWdzLCBidXQgbmVlZHMgcGVyZm9ybWFuY2UgdGVzdGluZ1xuXG52YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7IC8vIEVuYWJsZXMgdW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgZmVhdHVyZSBpbiBGaWJlclxuLy8gc3R1ZmYuIEludGVuZGVkIHRvIGVuYWJsZSBSZWFjdCBjb3JlIG1lbWJlcnMgdG8gbW9yZSBlYXNpbHkgZGVidWcgc2NoZWR1bGluZ1xuLy8gaXNzdWVzIGluIERFViBidWlsZHMuXG5cbnZhciBlbmFibGVEZWJ1Z1RyYWNpbmcgPSBmYWxzZTtcblxudmFyIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMiA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTtcbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCBlbmFibGVEZWJ1Z1RyYWNpbmcgIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgZW5hYmxlTGVnYWN5SGlkZGVuICB8fCB0eXBlID09PSBSRUFDVF9PRkZTQ1JFRU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSAgfHwgZW5hYmxlQ2FjaGVFbGVtZW50ICB8fCBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMiB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcblxuICBpZiAoZGlzcGxheU5hbWUpIHtcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XG4gIH1cblxuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lO1xufSAvLyBLZWVwIGluIHN5bmMgd2l0aCByZWFjdC1yZWNvbmNpbGVyL2dldENvbXBvbmVudE5hbWVGcm9tRmliZXJcblxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxudmFyIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTsgLy8gTm90ZSB0aGF0IHRoZSByZWNvbmNpbGVyIHBhY2thZ2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgdG8gdXNlIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoKSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxKSB7XG4gICAgICAvLyBUT0RPOiBDcmVhdGUgYSBjb252ZW50aW9uIGZvciBuYW1pbmcgY2xpZW50IHJlZmVyZW5jZXMgd2l0aCBkZWJ1ZyBpbmZvLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuXG4gICAgY2FzZSBSRUFDVF9DQUNIRV9UWVBFOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJ0NhY2hlJztcbiAgICAgIH1cblxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgdmFyIG91dGVyTmFtZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbDtcblxuICAgICAgICBpZiAob3V0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG91dGVyTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnTWVtbyc7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cbi8qKlxuICogTGV2ZXJhZ2VzIG5hdGl2ZSBicm93c2VyL1ZNIHN0YWNrIGZyYW1lcyB0byBnZXQgcHJvcGVyIGRldGFpbHMgKGUuZy5cbiAqIGZpbGVuYW1lLCBsaW5lICsgY29sIG51bWJlcikgZm9yIGEgc2luZ2xlIGNvbXBvbmVudCBpbiBhIGNvbXBvbmVudCBzdGFjay4gV2VcbiAqIGRvIHRoaXMgYnk6XG4gKiAgICgxKSB0aHJvd2luZyBhbmQgY2F0Y2hpbmcgYW4gZXJyb3IgaW4gdGhlIGZ1bmN0aW9uIC0gdGhpcyB3aWxsIGJlIG91clxuICogICAgICAgY29udHJvbCBlcnJvci5cbiAqICAgKDIpIGNhbGxpbmcgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYW4gZXJyb3IgdGhhdCB3ZSdsbFxuICogICAgICAgY2F0Y2ggLSB0aGlzIHdpbGwgYmUgb3VyIHNhbXBsZSBlcnJvci5cbiAqICAgKDMpIGRpZmZpbmcgdGhlIGNvbnRyb2wgYW5kIHNhbXBsZSBlcnJvciBzdGFja3MgdG8gZmluZCB0aGUgc3RhY2sgZnJhbWVcbiAqICAgICAgIHdoaWNoIHJlcHJlc2VudHMgb3VyIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRpbmcgYSBjb21tb24gc3RhY2sgZnJhbWUgYmV0d2VlbiBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGNhbiBiZVxuICAgKiB0cmlja3kgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcyBhbmQgbGV2ZWxzIG9mIHN0YWNrIHRyYWNlIHRydW5jYXRpb24gZnJvbVxuICAgKiBkaWZmZXJlbnQgSlMgVk1zLiBTbyBpbnN0ZWFkIHdlJ2xsIGF0dGVtcHQgdG8gY29udHJvbCB3aGF0IHRoYXQgY29tbW9uXG4gICAqIGZyYW1lIHNob3VsZCBiZSB0aHJvdWdoIHRoaXMgb2JqZWN0IG1ldGhvZDpcbiAgICogSGF2aW5nIGJvdGggdGhlIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgYmUgaW4gdGhlIGZ1bmN0aW9uIHVuZGVyIHRoZVxuICAgKiBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIHByb3BlcnR5LCArIHNldHRpbmcgdGhlIGBuYW1lYCBhbmRcbiAgICogYGRpc3BsYXlOYW1lYCBwcm9wZXJ0aWVzIG9mIHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYSBzdGFja1xuICAgKiBmcmFtZSBleGlzdHMgdGhhdCBoYXMgdGhlIG1ldGhvZCBuYW1lIGBEZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lUm9vdGAgaW5cbiAgICogaXQgZm9yIGJvdGggY29udHJvbCBhbmQgc2FtcGxlIHN0YWNrcy5cbiAgICovXG5cblxuICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udHJvbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgfSAvLyBUT0RPKGx1bmEpOiBUaGlzIHdpbGwgY3VycmVudGx5IG9ubHkgdGhyb3cgaWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgICAgICAgIC8vIHRyaWVzIHRvIGFjY2VzcyBSZWFjdC9SZWFjdERPTS9wcm9wcy4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyB0aHJvd1xuICAgICAgICAgIC8vIGluIHNpbXBsZSBjb21wb25lbnRzIHRvb1xuXG5cbiAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gZm4oKTsgLy8gSWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCByZXR1cm5zIGEgcHJvbWlzZSwgaXQncyBsaWtlbHkgYW4gYXN5bmNcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHdoaWNoIHdlIGRvbid0IHlldCBzdXBwb3J0LiBBdHRhY2ggYSBub29wIGNhdGNoIGhhbmRsZXIgdG9cbiAgICAgICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgY29tcG9uZW50IHN0YWNrcyBmb3IgYXN5bmMgY2xpZW50IGNvbXBvbmVudHM/XG5cbiAgICAgICAgICBpZiAobWF5YmVQcm9taXNlICYmIHR5cGVvZiBtYXliZVByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPSAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JztcbiAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCAnbmFtZScpOyAvLyBCZWZvcmUgRVM2LCB0aGUgYG5hbWVgIHByb3BlcnR5IHdhcyBub3QgY29uZmlndXJhYmxlLlxuXG4gIGlmIChuYW1lUHJvcERlc2NyaXB0b3IgJiYgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIC8vIFY4IHV0aWxpemVzIGEgZnVuY3Rpb24ncyBgbmFtZWAgcHJvcGVydHkgd2hlbiBnZW5lcmF0aW5nIGEgc3RhY2sgdHJhY2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwgLy8gQ29uZmlndXJhYmxlIHByb3BlcnRpZXMgY2FuIGJlIHVwZGF0ZWQgZXZlbiBpZiBpdHMgd3JpdGFibGUgZGVzY3JpcHRvclxuICAgIC8vIGlzIHNldCB0byBgZmFsc2VgLlxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgICduYW1lJywge1xuICAgICAgdmFsdWU6ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnXG4gICAgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcblxuICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgdmFyIGMgPSAwO1xuXG4gICAgICB3aGlsZSAocyA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJiAhc2FtcGxlTGluZXNbc10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIHMrKztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGMgPCBjb250cm9sTGluZXMubGVuZ3RoICYmICFjb250cm9sTGluZXNbY10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIGMrKztcbiAgICAgIH0gLy8gV2UgY291bGRuJ3QgZmluZCBvdXIgaW50ZW50aW9uYWxseSBpbmplY3RlZCBjb21tb24gcm9vdCBmcmFtZSwgYXR0ZW1wdFxuICAgICAgLy8gdG8gZmluZCBhbm90aGVyIGNvbW1vbiByb290IGZyYW1lIGJ5IHNlYXJjaCBmcm9tIHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAvLyBjb250cm9sIHN0YWNrLi4uXG5cblxuICAgICAgaWYgKHMgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fCBjID09PSBjb250cm9sTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgICBjLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChoYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblxuZnVuY3Rpb24gaXNBcnJheShhKSB7XG4gIHJldHVybiBpc0FycmF5SW1wbChhKTtcbn1cblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuXG5cbmZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gIHtcbiAgICB0cnkge1xuICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXG4gIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAvL1xuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcbiAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxuICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcbiAgLy9cbiAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXG4gIC8vXG4gIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXG4gIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bjtcbnZhciBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bjtcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQuc3RhdGVOb2RlICE9PSBzZWxmKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxuZnVuY3Rpb24gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvd3MgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc2VsZlxuICAgIH0pOyAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZFxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZmNzL3B1bGwvMTA3XG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5cbmZ1bmN0aW9uIGpzeERFViQxKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIHNvdXJjZSwgc2VsZikge1xuICB7XG4gICAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB2YXIga2V5ID0gbnVsbDtcbiAgICB2YXIgcmVmID0gbnVsbDsgLy8gQ3VycmVudGx5LCBrZXkgY2FuIGJlIHNwcmVhZCBpbiBhcyBhIHByb3AuIFRoaXMgY2F1c2VzIGEgcG90ZW50aWFsXG4gICAgLy8gaXNzdWUgaWYga2V5IGlzIGFsc28gZXhwbGljaXRseSBkZWNsYXJlZCAoaWUuIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+XG4gICAgLy8gb3IgPGRpdiBrZXk9XCJIaVwiIHsuLi5wcm9wc30gLz4gKS4gV2Ugd2FudCB0byBkZXByZWNhdGUga2V5IHNwcmVhZCxcbiAgICAvLyBidXQgYXMgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAsIHdlIHdpbGwgdXNlIGpzeERFViBmb3IgZXZlcnl0aGluZyBleGNlcHRcbiAgICAvLyA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPiwgYmVjYXVzZSB3ZSBhcmVuJ3QgY3VycmVudGx5IGFibGUgdG8gdGVsbCBpZlxuICAgIC8vIGtleSBpcyBleHBsaWNpdGx5IGRlY2xhcmVkIHRvIGJlIHVuZGVmaW5lZCBvciBub3QuXG5cbiAgICBpZiAobWF5YmVLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1heWJlS2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBtYXliZUtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQsIHByb3BzKTtcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xuXG57XG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAge1xuICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICB7XG4gICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICB2YXIgcGFyZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShwYXJlbnRUeXBlKTtcblxuICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmZvO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gICAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gICAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8ICFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIDsgZWxzZSBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFR5cGVzO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBOb3RlOiBNZW1vIG9ubHkgY2hlY2tzIG91dGVyIHByb3BzIGhlcmUuXG4gICAgLy8gSW5uZXIgcHJvcHMgYXJlIGNoZWNrZWQgaW4gdGhlIHJlY29uY2lsZXIuXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5BYm91dEtleVNwcmVhZCA9IHt9O1xuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgaXNTdGF0aWNDaGlsZHJlbiwgc291cmNlLCBzZWxmKSB7XG4gIHtcbiAgICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG5cbiAgICBpZiAoIXZhbGlkVHlwZSkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpO1xuXG4gICAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZVN0cmluZztcblxuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh0eXBlKSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudCA9IGpzeERFViQxKHR5cGUsIHByb3BzLCBrZXksIHNvdXJjZSwgc2VsZik7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gICAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cbiAgICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gICAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXG5cblxuICAgIGlmICh2YWxpZFR5cGUpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuXG4gICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaXNTdGF0aWNDaGlsZHJlbikge1xuICAgICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpXSwgdHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignUmVhY3QuanN4OiBTdGF0aWMgY2hpbGRyZW4gc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheS4gJyArICdZb3UgYXJlIGxpa2VseSBleHBsaWNpdGx5IGNhbGxpbmcgUmVhY3QuanN4cyBvciBSZWFjdC5qc3hERVYuICcgKyAnVXNlIHRoZSBCYWJlbCB0cmFuc2Zvcm0gaW5zdGVhZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4sIHR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsICdrZXknKSkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0dXJuIGsgIT09ICdrZXknO1xuICAgICAgfSk7XG4gICAgICB2YXIgYmVmb3JlRXhhbXBsZSA9IGtleXMubGVuZ3RoID4gMCA/ICd7a2V5OiBzb21lS2V5LCAnICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7a2V5OiBzb21lS2V5fSc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0S2V5U3ByZWFkW2NvbXBvbmVudE5hbWUgKyBiZWZvcmVFeGFtcGxlXSkge1xuICAgICAgICB2YXIgYWZ0ZXJFeGFtcGxlID0ga2V5cy5sZW5ndGggPiAwID8gJ3snICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7fSc7XG5cbiAgICAgICAgZXJyb3IoJ0EgcHJvcHMgb2JqZWN0IGNvbnRhaW5pbmcgYSBcImtleVwiIHByb3AgaXMgYmVpbmcgc3ByZWFkIGludG8gSlNYOlxcbicgKyAnICBsZXQgcHJvcHMgPSAlcztcXG4nICsgJyAgPCVzIHsuLi5wcm9wc30gLz5cXG4nICsgJ1JlYWN0IGtleXMgbXVzdCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gSlNYIHdpdGhvdXQgdXNpbmcgc3ByZWFkOlxcbicgKyAnICBsZXQgcHJvcHMgPSAlcztcXG4nICsgJyAgPCVzIGtleT17c29tZUtleX0gey4uLnByb3BzfSAvPicsIGJlZm9yZUV4YW1wbGUsIGNvbXBvbmVudE5hbWUsIGFmdGVyRXhhbXBsZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0S2V5U3ByZWFkW2NvbXBvbmVudE5hbWUgKyBiZWZvcmVFeGFtcGxlXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn0gLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBleGlzdCB0byBzdGlsbCBnZXQgY2hpbGQgd2FybmluZ3MgaW4gZGV2XG5cbnZhciBqc3hERVYgPSBqc3hXaXRoVmFsaWRhdGlvbiA7XG5cbmV4cG9ydHMuRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuZXhwb3J0cy5qc3hERVYgPSBqc3hERVY7XG4gIH0pKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***! + \******************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSw4TEFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtZGV2LXJ1bnRpbWUuanM/YjYxZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/adapters/adapters.js": +/*!*****************************************************!*\ + !*** ./node_modules/axios/lib/adapters/adapters.js ***! + \*****************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _http_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./http.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/null.js\");\n/* harmony import */ var _xhr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./xhr.js */ \"(app-pages-browser)/./node_modules/axios/lib/adapters/xhr.js\");\n/* harmony import */ var _fetch_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fetch.js */ \"(app-pages-browser)/./node_modules/axios/lib/adapters/fetch.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js\");\n\n\n\n\n\n\nconst knownAdapters = {\n http: _http_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n xhr: _xhr_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n fetch: _fetch_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n}\n\n_utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => _utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isFunction(adapter) || adapter === null || adapter === false;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n getAdapter: (adapters) => {\n adapters = _utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"](`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"](\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvYWRhcHRlcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdDO0FBQ0k7QUFDRjtBQUNJO0FBQ1M7O0FBRS9DO0FBQ0EsUUFBUSxnREFBVztBQUNuQixPQUFPLCtDQUFVO0FBQ2pCLFNBQVMsaURBQVk7QUFDckI7O0FBRUEsaURBQUs7QUFDTDtBQUNBO0FBQ0EseUNBQXlDLE1BQU07QUFDL0MsTUFBTTtBQUNOO0FBQ0E7QUFDQSw4Q0FBOEMsTUFBTTtBQUNwRDtBQUNBLENBQUM7O0FBRUQsc0NBQXNDLE9BQU87O0FBRTdDLHNDQUFzQyxpREFBSzs7QUFFM0MsK0RBQWU7QUFDZjtBQUNBLGVBQWUsaURBQUs7O0FBRXBCLFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBOztBQUVBLG9CQUFvQixZQUFZO0FBQ2hDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQiwyREFBVSxxQkFBcUIsR0FBRztBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EseUNBQXlDLElBQUk7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLDJEQUFVO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzP2I3ZGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBodHRwQWRhcHRlciBmcm9tICcuL2h0dHAuanMnO1xuaW1wb3J0IHhockFkYXB0ZXIgZnJvbSAnLi94aHIuanMnO1xuaW1wb3J0IGZldGNoQWRhcHRlciBmcm9tICcuL2ZldGNoLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlcixcbiAgZmV0Y2g6IGZldGNoQWRhcHRlclxufVxuXG51dGlscy5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldEFkYXB0ZXI6IChhZGFwdGVycykgPT4ge1xuICAgIGFkYXB0ZXJzID0gdXRpbHMuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/adapters/adapters.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/adapters/fetch.js": +/*!**************************************************!*\ + !*** ./node_modules/axios/lib/adapters/fetch.js ***! + \**************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../platform/index.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/index.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _helpers_composeSignals_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/composeSignals.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/composeSignals.js\");\n/* harmony import */ var _helpers_trackStream_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../helpers/trackStream.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/trackStream.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n/* harmony import */ var _helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../helpers/progressEventReducer.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/progressEventReducer.js\");\n/* harmony import */ var _helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/resolveConfig.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/resolveConfig.js\");\n/* harmony import */ var _core_settle_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../core/settle.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/settle.js\");\n\n\n\n\n\n\n\n\n\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"](`Response type '${type}' is not supported`, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isBlob(body)) {\n return body.size;\n }\n\n if(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isSpecCompliantForm(body)) {\n const _request = new Request(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isArrayBufferView(body) || _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = (0,_helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = (0,_helpers_composeSignals_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventDecorator)(\n requestContentLength,\n (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventReducer)((0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.asyncDecorator)(onUploadProgress))\n );\n\n data = (0,_helpers_trackStream_js__WEBPACK_IMPORTED_MODULE_6__.trackStream)(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventDecorator)(\n responseContentLength,\n (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.progressEventReducer)((0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_5__.asyncDecorator)(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n (0,_helpers_trackStream_js__WEBPACK_IMPORTED_MODULE_6__.trackStream)(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n (0,_core_settle_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(resolve, reject, {\n data: responseData,\n headers: _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"].from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Network Error', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].from(err, err && err.code, config, request);\n }\n}));\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMvZmV0Y2guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUE0QztBQUNaO0FBQ2U7QUFDVztBQUNKO0FBQ0g7QUFDNkQ7QUFDeEQ7QUFDakI7O0FBRXZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEscUNBQXFDLDBEQUFRO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQSxhQUFhLGlEQUFLOzs7QUFHbEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQ0FBMkMsaURBQUs7QUFDaEQ7QUFDQSxrQkFBa0IsMkRBQVUsbUJBQW1CLEtBQUsscUJBQXFCLDJEQUFVO0FBQ25GLE9BQU87QUFDUCxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLLGlEQUFLO0FBQ1Y7QUFDQTs7QUFFQSxLQUFLLGlEQUFLO0FBQ1YsaUNBQWlDLDBEQUFRO0FBQ3pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxLQUFLLGlEQUFLLDRCQUE0QixpREFBSztBQUMzQztBQUNBOztBQUVBLEtBQUssaURBQUs7QUFDVjtBQUNBOztBQUVBLEtBQUssaURBQUs7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsaURBQUs7O0FBRXRCO0FBQ0E7O0FBRUEsK0RBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksRUFBRSxxRUFBYTs7QUFFbkI7O0FBRUEsdUJBQXVCLHNFQUFjOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBLFVBQVUsaURBQUs7QUFDZjtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLHdGQUFzQjtBQUMxRDtBQUNBLFVBQVUsc0ZBQW9CLENBQUMsZ0ZBQWM7QUFDN0M7O0FBRUEsZUFBZSxvRUFBVztBQUMxQjtBQUNBOztBQUVBLFNBQVMsaURBQUs7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87O0FBRVAsb0NBQW9DLGlEQUFLOztBQUV6Qyx3REFBd0Qsd0ZBQXNCO0FBQzlFO0FBQ0EsUUFBUSxzRkFBb0IsQ0FBQyxnRkFBYztBQUMzQzs7QUFFQTtBQUNBLFFBQVEsb0VBQVc7QUFDbkI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDLGlEQUFLOztBQUU1Qzs7QUFFQTtBQUNBLE1BQU0sMkRBQU07QUFDWjtBQUNBLGlCQUFpQiw2REFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQSxZQUFZLDJEQUFVLGtCQUFrQiwyREFBVTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsMkRBQVU7QUFDcEI7QUFDQSxDQUFDLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2ZldGNoLmpzP2YwMzYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBsYXRmb3JtIGZyb20gXCIuLi9wbGF0Zm9ybS9pbmRleC5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuaW1wb3J0IGNvbXBvc2VTaWduYWxzIGZyb20gXCIuLi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzXCI7XG5pbXBvcnQge3RyYWNrU3RyZWFtfSBmcm9tIFwiLi4vaGVscGVycy90cmFja1N0cmVhbS5qc1wiO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXIsIHByb2dyZXNzRXZlbnREZWNvcmF0b3IsIGFzeW5jRGVjb3JhdG9yfSBmcm9tIFwiLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qc1wiO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qc1wiO1xuaW1wb3J0IHNldHRsZSBmcm9tIFwiLi4vY29yZS9zZXR0bGUuanNcIjtcblxuY29uc3QgaXNGZXRjaFN1cHBvcnRlZCA9IHR5cGVvZiBmZXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVzcG9uc2UgPT09ICdmdW5jdGlvbic7XG5jb25zdCBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gaXNGZXRjaFN1cHBvcnRlZCAmJiB0eXBlb2YgUmVhZGFibGVTdHJlYW0gPT09ICdmdW5jdGlvbic7XG5cbi8vIHVzZWQgb25seSBpbnNpZGUgdGhlIGZldGNoIGFkYXB0ZXJcbmNvbnN0IGVuY29kZVRleHQgPSBpc0ZldGNoU3VwcG9ydGVkICYmICh0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbicgP1xuICAgICgoZW5jb2RlcikgPT4gKHN0cikgPT4gZW5jb2Rlci5lbmNvZGUoc3RyKSkobmV3IFRleHRFbmNvZGVyKCkpIDpcbiAgICBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2Uoc3RyKS5hcnJheUJ1ZmZlcigpKVxuKTtcblxuY29uc3QgdGVzdCA9IChmbiwgLi4uYXJncykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIWZuKC4uLmFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuY29uc3Qgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJiB0ZXN0KCgpID0+IHtcbiAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgY29uc3QgaGFzQ29udGVudFR5cGUgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICBib2R5OiBuZXcgUmVhZGFibGVTdHJlYW0oKSxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBnZXQgZHVwbGV4KCkge1xuICAgICAgZHVwbGV4QWNjZXNzZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuICdoYWxmJztcbiAgICB9LFxuICB9KS5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7XG5cbiAgcmV0dXJuIGR1cGxleEFjY2Vzc2VkICYmICFoYXNDb250ZW50VHlwZTtcbn0pO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmXG4gIHRlc3QoKCkgPT4gdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoJycpLmJvZHkpKTtcblxuXG5jb25zdCByZXNvbHZlcnMgPSB7XG4gIHN0cmVhbTogc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAoKHJlcykgPT4gcmVzLmJvZHkpXG59O1xuXG5pc0ZldGNoU3VwcG9ydGVkICYmICgoKHJlcykgPT4ge1xuICBbJ3RleHQnLCAnYXJyYXlCdWZmZXInLCAnYmxvYicsICdmb3JtRGF0YScsICdzdHJlYW0nXS5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICFyZXNvbHZlcnNbdHlwZV0gJiYgKHJlc29sdmVyc1t0eXBlXSA9IHV0aWxzLmlzRnVuY3Rpb24ocmVzW3R5cGVdKSA/IChyZXMpID0+IHJlc1t0eXBlXSgpIDpcbiAgICAgIChfLCBjb25maWcpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCwgY29uZmlnKTtcbiAgICAgIH0pXG4gIH0pO1xufSkobmV3IFJlc3BvbnNlKSk7XG5cbmNvbnN0IGdldEJvZHlMZW5ndGggPSBhc3luYyAoYm9keSkgPT4ge1xuICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZih1dGlscy5pc0Jsb2IoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplO1xuICB9XG5cbiAgaWYodXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShib2R5KSkge1xuICAgIGNvbnN0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHksXG4gICAgfSk7XG4gICAgcmV0dXJuIChhd2FpdCBfcmVxdWVzdC5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkgfHwgdXRpbHMuaXNBcnJheUJ1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgIGJvZHkgPSBib2R5ICsgJyc7XG4gIH1cblxuICBpZih1dGlscy5pc1N0cmluZyhib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgfVxufVxuXG5jb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICByZXR1cm4gbGVuZ3RoID09IG51bGwgPyBnZXRCb2R5TGVuZ3RoKGJvZHkpIDogbGVuZ3RoO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0ZldGNoU3VwcG9ydGVkICYmIChhc3luYyAoY29uZmlnKSA9PiB7XG4gIGxldCB7XG4gICAgdXJsLFxuICAgIG1ldGhvZCxcbiAgICBkYXRhLFxuICAgIHNpZ25hbCxcbiAgICBjYW5jZWxUb2tlbixcbiAgICB0aW1lb3V0LFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBvblVwbG9hZFByb2dyZXNzLFxuICAgIHJlc3BvbnNlVHlwZSxcbiAgICBoZWFkZXJzLFxuICAgIHdpdGhDcmVkZW50aWFscyA9ICdzYW1lLW9yaWdpbicsXG4gICAgZmV0Y2hPcHRpb25zXG4gIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlID8gKHJlc3BvbnNlVHlwZSArICcnKS50b0xvd2VyQ2FzZSgpIDogJ3RleHQnO1xuXG4gIGxldCBjb21wb3NlZFNpZ25hbCA9IGNvbXBvc2VTaWduYWxzKFtzaWduYWwsIGNhbmNlbFRva2VuICYmIGNhbmNlbFRva2VuLnRvQWJvcnRTaWduYWwoKV0sIHRpbWVvdXQpO1xuXG4gIGxldCByZXF1ZXN0O1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gY29tcG9zZWRTaWduYWwgJiYgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUgJiYgKCgpID0+IHtcbiAgICAgIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gIH0pO1xuXG4gIGxldCByZXF1ZXN0Q29udGVudExlbmd0aDtcblxuICB0cnkge1xuICAgIGlmIChcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiYgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmIG1ldGhvZCAhPT0gJ2dldCcgJiYgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgIChyZXF1ZXN0Q29udGVudExlbmd0aCA9IGF3YWl0IHJlc29sdmVCb2R5TGVuZ3RoKGhlYWRlcnMsIGRhdGEpKSAhPT0gMFxuICAgICkge1xuICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6IFwiaGFsZlwiXG4gICAgICB9KTtcblxuICAgICAgbGV0IGNvbnRlbnRUeXBlSGVhZGVyO1xuXG4gICAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSAmJiAoY29udGVudFR5cGVIZWFkZXIgPSBfcmVxdWVzdC5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpXG4gICAgICB9XG5cbiAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgIHJlcXVlc3RDb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEgPSB0cmFja1N0cmVhbShfcmVxdWVzdC5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsIGZsdXNoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdvbWl0JztcbiAgICB9XG5cbiAgICAvLyBDbG91ZGZsYXJlIFdvcmtlcnMgdGhyb3dzIHdoZW4gY3JlZGVudGlhbHMgYXJlIGRlZmluZWRcbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvd29ya2VyZC9pc3N1ZXMvOTAyXG4gICAgY29uc3QgaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA9IFwiY3JlZGVudGlhbHNcIiBpbiBSZXF1ZXN0LnByb3RvdHlwZTtcbiAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAuLi5mZXRjaE9wdGlvbnMsXG4gICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMubm9ybWFsaXplKCkudG9KU09OKCksXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgZHVwbGV4OiBcImhhbGZcIixcbiAgICAgIGNyZWRlbnRpYWxzOiBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID8gd2l0aENyZWRlbnRpYWxzIDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KTtcblxuICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPSBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICBpZiAoc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAob25Eb3dubG9hZFByb2dyZXNzIHx8IChpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlKSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgb3B0aW9uc1twcm9wXSA9IHJlc3BvbnNlW3Byb3BdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudExlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKTtcblxuICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IG9uRG93bmxvYWRQcm9ncmVzcyAmJiBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICByZXNwb25zZUNvbnRlbnRMZW5ndGgsXG4gICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uRG93bmxvYWRQcm9ncmVzcyksIHRydWUpXG4gICAgICApIHx8IFtdO1xuXG4gICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCAoKSA9PiB7XG4gICAgICAgICAgZmx1c2ggJiYgZmx1c2goKTtcbiAgICAgICAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuICAgICAgICB9KSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscy5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKHJlc3BvbnNlLCBjb25maWcpO1xuXG4gICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgaGVhZGVyczogQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH0pXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgPT09ICdUeXBlRXJyb3InICYmIC9mZXRjaC9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICBuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCksXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyLmNhdXNlIHx8IGVyclxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgZXJyICYmIGVyci5jb2RlLCBjb25maWcsIHJlcXVlc3QpO1xuICB9XG59KTtcblxuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/adapters/fetch.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/adapters/xhr.js": +/*!************************************************!*\ + !*** ./node_modules/axios/lib/adapters/xhr.js ***! + \************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _core_settle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../core/settle.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/settle.js\");\n/* harmony import */ var _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../defaults/transitional.js */ \"(app-pages-browser)/./node_modules/axios/lib/defaults/transitional.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../cancel/CanceledError.js */ \"(app-pages-browser)/./node_modules/axios/lib/cancel/CanceledError.js\");\n/* harmony import */ var _helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../helpers/parseProtocol.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/parseProtocol.js\");\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../platform/index.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/index.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n/* harmony import */ var _helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../helpers/progressEventReducer.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/progressEventReducer.js\");\n/* harmony import */ var _helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers/resolveConfig.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/resolveConfig.js\");\n\n\n\n\n\n\n\n\n\n\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = (0,_helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(config);\n let requestData = _config.data;\n const requestHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n (0,_core_settle_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('Request aborted', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('Network Error', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"](\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ETIMEDOUT : _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n _utils_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_6__.progressEventReducer)(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_6__.progressEventReducer)(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"](null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = (0,_helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(_config.url);\n\n if (protocol && _platform_index_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"].protocols.indexOf(protocol) === -1) {\n reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]('Unsupported protocol ' + protocol + ':', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQWtDO0FBQ087QUFDc0I7QUFDaEI7QUFDUTtBQUNDO0FBQ1o7QUFDTztBQUNxQjtBQUNoQjs7QUFFeEQ7O0FBRUEsK0RBQWU7QUFDZjtBQUNBLG9CQUFvQixxRUFBYTtBQUNqQztBQUNBLDJCQUEyQiw2REFBWTtBQUN2QyxTQUFTLG9EQUFvRDtBQUM3RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0M7QUFDcEMsd0NBQXdDOztBQUV4Qzs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qiw2REFBWTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSwyREFBTTtBQUNaO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQiwyREFBVSxvQkFBb0IsMkRBQVU7O0FBRXpEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwyREFBVSxrQkFBa0IsMkRBQVU7O0FBRXZEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsaUVBQW9CO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwyREFBVTtBQUMzQjtBQUNBLDJDQUEyQywyREFBVSxhQUFhLDJEQUFVO0FBQzVFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0saURBQUs7QUFDWDtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBLFNBQVMsaURBQUs7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEMsc0ZBQW9CO0FBQ2hFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxzRkFBb0I7O0FBRTVEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsZ0VBQWE7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLHFFQUFhOztBQUVsQyxvQkFBb0IsMERBQVE7QUFDNUIsaUJBQWlCLDJEQUFVLDJDQUEyQywyREFBVTtBQUNoRjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanM/OWM5OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXJ9IGZyb20gJy4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMnO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qc1wiO1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgb25VcGxvYWRQcm9ncmVzcywgb25Eb3dubG9hZFByb2dyZXNzfSA9IF9jb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgbGV0IHVwbG9hZFRocm90dGxlZCwgZG93bmxvYWRUaHJvdHRsZWQ7XG4gICAgbGV0IGZsdXNoVXBsb2FkLCBmbHVzaERvd25sb2FkO1xuXG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGZsdXNoVXBsb2FkICYmIGZsdXNoVXBsb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuICAgICAgZmx1c2hEb3dubG9hZCAmJiBmbHVzaERvd25sb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG5cbiAgICAgIF9jb25maWcuc2lnbmFsICYmIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IF9jb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgIChbZG93bmxvYWRUaHJvdHRsZWQsIGZsdXNoRG93bmxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZG93bmxvYWRUaHJvdHRsZWQpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKG9uVXBsb2FkUHJvZ3Jlc3MgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIChbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKSk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdXBsb2FkVGhyb3R0bGVkKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICB9XG5cbiAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/adapters/xhr.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/axios.js": +/*!*****************************************!*\ + !*** ./node_modules/axios/lib/axios.js ***! + \*****************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _helpers_bind_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers/bind.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/bind.js\");\n/* harmony import */ var _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/Axios.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/Axios.js\");\n/* harmony import */ var _core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./core/mergeConfig.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/mergeConfig.js\");\n/* harmony import */ var _defaults_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./defaults/index.js */ \"(app-pages-browser)/./node_modules/axios/lib/defaults/index.js\");\n/* harmony import */ var _helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./helpers/formDataToJSON.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/formDataToJSON.js\");\n/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./cancel/CanceledError.js */ \"(app-pages-browser)/./node_modules/axios/lib/cancel/CanceledError.js\");\n/* harmony import */ var _cancel_CancelToken_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./cancel/CancelToken.js */ \"(app-pages-browser)/./node_modules/axios/lib/cancel/CancelToken.js\");\n/* harmony import */ var _cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./cancel/isCancel.js */ \"(app-pages-browser)/./node_modules/axios/lib/cancel/isCancel.js\");\n/* harmony import */ var _env_data_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./env/data.js */ \"(app-pages-browser)/./node_modules/axios/lib/env/data.js\");\n/* harmony import */ var _helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./helpers/toFormData.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/toFormData.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./core/AxiosError.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _helpers_spread_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./helpers/spread.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/spread.js\");\n/* harmony import */ var _helpers_isAxiosError_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./helpers/isAxiosError.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/isAxiosError.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./core/AxiosHeaders.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n/* harmony import */ var _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./adapters/adapters.js */ \"(app-pages-browser)/./node_modules/axios/lib/adapters/adapters.js\");\n/* harmony import */ var _helpers_HttpStatusCode_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./helpers/HttpStatusCode.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/HttpStatusCode.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](defaultConfig);\n const instance = (0,_helpers_bind_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(_core_Axios_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype.request, context);\n\n // Copy axios.prototype to instance\n _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].extend(instance, _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance((0,_core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(_defaults_index_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = _core_Axios_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n\n// Expose Cancel & CancelToken\naxios.CanceledError = _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"];\naxios.CancelToken = _cancel_CancelToken_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\naxios.isCancel = _cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\naxios.VERSION = _env_data_js__WEBPACK_IMPORTED_MODULE_8__.VERSION;\naxios.toFormData = _helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"];\n\n// Expose AxiosError class\naxios.AxiosError = _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"];\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = _helpers_spread_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\n\n// Expose isAxiosError\naxios.isAxiosError = _helpers_isAxiosError_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"];\n\n// Expose mergeConfig\naxios.mergeConfig = _core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n\naxios.AxiosHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_13__[\"default\"];\n\naxios.formToJSON = thing => (0,_helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_14__[\"default\"])(_utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_15__[\"default\"].getAdapter;\n\naxios.HttpStatusCode = _helpers_HttpStatusCode_js__WEBPACK_IMPORTED_MODULE_16__[\"default\"];\n\naxios.default = axios;\n\n// this module should only have a default export\n/* harmony default export */ __webpack_exports__[\"default\"] = (axios);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWE7O0FBRWtCO0FBQ007QUFDRDtBQUNZO0FBQ0w7QUFDYztBQUNIO0FBQ0o7QUFDTjtBQUNOO0FBQ1c7QUFDSDtBQUNMO0FBQ1k7QUFDSDtBQUNKO0FBQ1c7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0Esc0JBQXNCLHNEQUFLO0FBQzNCLG1CQUFtQiw0REFBSSxDQUFDLHNEQUFLOztBQUU3QjtBQUNBLEVBQUUsaURBQUssa0JBQWtCLHNEQUFLLHNCQUFzQixpQkFBaUI7O0FBRXJFO0FBQ0EsRUFBRSxpREFBSyxrQ0FBa0MsaUJBQWlCOztBQUUxRDtBQUNBO0FBQ0EsMEJBQTBCLGdFQUFXO0FBQ3JDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSw2QkFBNkIsMERBQVE7O0FBRXJDO0FBQ0EsY0FBYyxzREFBSzs7QUFFbkI7QUFDQSxzQkFBc0IsZ0VBQWE7QUFDbkMsb0JBQW9CLDhEQUFXO0FBQy9CLGlCQUFpQiwyREFBUTtBQUN6QixnQkFBZ0IsaURBQU87QUFDdkIsbUJBQW1CLDhEQUFVOztBQUU3QjtBQUNBLG1CQUFtQiw0REFBVTs7QUFFN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLDJEQUFNOztBQUVyQjtBQUNBLHFCQUFxQixpRUFBWTs7QUFFakM7QUFDQSxvQkFBb0IsNERBQVc7O0FBRS9CLHFCQUFxQiw4REFBWTs7QUFFakMsNEJBQTRCLHVFQUFjLENBQUMsaURBQUs7O0FBRWhELG1CQUFtQiw4REFBUTs7QUFFM0IsdUJBQXVCLG1FQUFjOztBQUVyQzs7QUFFQTtBQUNBLCtEQUFlLEtBQUsiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcz82OWIzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgc3ByZWFkIGZyb20gJy4vaGVscGVycy9zcHJlYWQuanMnO1xuaW1wb3J0IGlzQXhpb3NFcnJvciBmcm9tICcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbjtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnM7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3NcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/axios.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/cancel/CancelToken.js": +/*!******************************************************!*\ + !*** ./node_modules/axios/lib/cancel/CancelToken.js ***! + \******************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _CanceledError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CanceledError.js */ \"(app-pages-browser)/./node_modules/axios/lib/cancel/CanceledError.js\");\n\n\n\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new _CanceledError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (CancelToken);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwibWFwcGluZ3MiOiI7O0FBQWE7O0FBRWtDOztBQUUvQztBQUNBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCLHlEQUFhO0FBQ3RDO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtEQUFlLFdBQVcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcz9hZjFjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9DYW5jZWxlZEVycm9yLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICB0b0Fib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgY29udHJvbGxlci5zaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB0aGlzLnVuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIHJldHVybiBjb250cm9sbGVyLnNpZ25hbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbFRva2VuO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/cancel/CancelToken.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/cancel/CanceledError.js": +/*!********************************************************!*\ + !*** ./node_modules/axios/lib/cancel/CanceledError.js ***! + \********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n\n\n\n\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].call(this, message == null ? 'canceled' : message, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\n_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].inherits(CanceledError, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {\n __CANCEL__: true\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (CanceledError);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWE7O0FBRWtDO0FBQ2Y7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxTQUFTO0FBQ3BCO0FBQ0EsYUFBYSxlQUFlO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLEVBQUUsMkRBQVUsb0RBQW9ELDJEQUFVO0FBQzFFO0FBQ0E7O0FBRUEsaURBQUsseUJBQXlCLDJEQUFVO0FBQ3hDO0FBQ0EsQ0FBQzs7QUFFRCwrREFBZSxhQUFhLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcz9lMzhmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscy5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxlZEVycm9yO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/cancel/CanceledError.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/cancel/isCancel.js": +/*!***************************************************!*\ + !*** ./node_modules/axios/lib/cancel/isCancel.js ***! + \***************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ isCancel; }\n/* harmony export */ });\n\n\nfunction isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBYTs7QUFFRTtBQUNmO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanM/NGI5YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/cancel/isCancel.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/core/Axios.js": +/*!**********************************************!*\ + !*** ./node_modules/axios/lib/core/Axios.js ***! + \**********************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _helpers_buildURL_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../helpers/buildURL.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/buildURL.js\");\n/* harmony import */ var _InterceptorManager_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./InterceptorManager.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/InterceptorManager.js\");\n/* harmony import */ var _dispatchRequest_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dispatchRequest.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/dispatchRequest.js\");\n/* harmony import */ var _mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mergeConfig.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/mergeConfig.js\");\n/* harmony import */ var _buildFullPath_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./buildFullPath.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/buildFullPath.js\");\n/* harmony import */ var _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers/validator.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/validator.js\");\n/* harmony import */ var _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AxiosHeaders.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n\n\n\n\n\n\n\n\n\n\n\nconst validators = _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new _InterceptorManager_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](),\n response: new _InterceptorManager_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = (0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n _helpers_validator_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && _utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].merge(\n headers.common,\n headers[config.method]\n );\n\n headers && _utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [_dispatchRequest_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = _dispatchRequest_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = (0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(this.defaults, config);\n const fullPath = (0,_buildFullPath_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(config.baseURL, config.url, config.allowAbsoluteUrls);\n return (0,_helpers_buildURL_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\n_utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request((0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\n_utils_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request((0,_mergeConfig_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Axios);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBYTs7QUFFcUI7QUFDWTtBQUNXO0FBQ047QUFDUjtBQUNJO0FBQ0M7QUFDSDs7QUFFN0MsbUJBQW1CLDZEQUFTOztBQUU1QjtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiw4REFBa0I7QUFDckMsb0JBQW9CLDhEQUFrQjtBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZUFBZTtBQUM1QixhQUFhLFNBQVM7QUFDdEI7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBLGFBQWEsMkRBQVc7O0FBRXhCLFdBQVcseUNBQXlDOztBQUVwRDtBQUNBLE1BQU0sNkRBQVM7QUFDZjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxVQUFVLGlEQUFLO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLFFBQVEsNkRBQVM7QUFDakI7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBLElBQUksNkRBQVM7QUFDYjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGlEQUFLO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLGlEQUFLO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLHdEQUFZOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsMkRBQWU7QUFDcEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsMkRBQWU7QUFDL0IsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGFBQWEsMkRBQVc7QUFDeEIscUJBQXFCLDZEQUFhO0FBQ2xDLFdBQVcsZ0VBQVE7QUFDbkI7QUFDQTs7QUFFQTtBQUNBLGlEQUFLO0FBQ0w7QUFDQTtBQUNBLHdCQUF3QiwyREFBVyxhQUFhO0FBQ2hEO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRCxpREFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEIsMkRBQVcsYUFBYTtBQUNsRDtBQUNBO0FBQ0E7QUFDQSxVQUFVLElBQUk7QUFDZDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxDQUFDOztBQUVELCtEQUFlLEtBQUssRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanM/YzVhOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnLi9JbnRlcmNlcHRvck1hbmFnZXIuanMnO1xuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICcuL2Rpc3BhdGNoUmVxdWVzdC5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15ID0ge307XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFja1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5hbGxvd0Fic29sdXRlVXJsc1xuICAgIGlmIChjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKGNvbmZpZywge1xuICAgICAgYmFzZVVybDogdmFsaWRhdG9ycy5zcGVsbGluZygnYmFzZVVSTCcpLFxuICAgICAgd2l0aFhzcmZUb2tlbjogdmFsaWRhdG9ycy5zcGVsbGluZygnd2l0aFhTUkZUb2tlbicpXG4gICAgfSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscy5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwsIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/Axios.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js": +/*!***************************************************!*\ + !*** ./node_modules/axios/lib/core/AxiosError.js ***! + \***************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n\n\n\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\n_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (AxiosError);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0Vycm9yLmpzIiwibWFwcGluZ3MiOiI7O0FBQWE7O0FBRW1COztBQUVoQztBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaURBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxpREFBSztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIsQ0FBQzs7QUFFRDtBQUNBLGtEQUFrRCxZQUFZOztBQUU5RDtBQUNBO0FBQ0E7O0FBRUEsRUFBRSxpREFBSztBQUNQO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLCtEQUFlLFVBQVUsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcz85ZTU4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXMgPyByZXNwb25zZS5zdGF0dXMgOiBudWxsO1xuICB9XG59XG5cbnV0aWxzLmluaGVyaXRzKEF4aW9zRXJyb3IsIEVycm9yLCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBTdGFuZGFyZFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLy8gTWljcm9zb2Z0XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG51bWJlcjogdGhpcy5udW1iZXIsXG4gICAgICAvLyBNb3ppbGxhXG4gICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZSxcbiAgICAgIGxpbmVOdW1iZXI6IHRoaXMubGluZU51bWJlcixcbiAgICAgIGNvbHVtbk51bWJlcjogdGhpcy5jb2x1bW5OdW1iZXIsXG4gICAgICBzdGFjazogdGhpcy5zdGFjayxcbiAgICAgIC8vIEF4aW9zXG4gICAgICBjb25maWc6IHV0aWxzLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcblxuICB1dGlscy50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0sIHByb3AgPT4ge1xuICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJztcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NFcnJvcjtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/core/AxiosHeaders.js": +/*!*****************************************************!*\ + !*** ./node_modules/axios/lib/core/AxiosHeaders.js ***! + \*****************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _helpers_parseHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/parseHeaders.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/parseHeaders.js\");\n\n\n\n\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(value)) return;\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders((0,_helpers_parseHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(header), valueOrRewrite);\n } else if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(this, (value, header) => {\n const key = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\n_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\n_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].freezeMethods(AxiosHeaders);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (AxiosHeaders);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0hlYWRlcnMuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWE7O0FBRW1CO0FBQ3NCOztBQUV0RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxpREFBSztBQUNkOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsTUFBTSxpREFBSztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLE9BQU8saURBQUs7O0FBRVosTUFBTSxpREFBSztBQUNYO0FBQ0E7O0FBRUEsTUFBTSxpREFBSztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLHVCQUF1QixpREFBSzs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLGlEQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0saURBQUs7O0FBRVgsUUFBUSxpREFBSztBQUNiO0FBQ0EsTUFBTSxRQUFRLGlEQUFLO0FBQ25CLGlCQUFpQixvRUFBWTtBQUM3QixNQUFNLFNBQVMsaURBQUs7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLGlEQUFLOztBQUV2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWSxpREFBSztBQUNqQjtBQUNBOztBQUVBLFlBQVksaURBQUs7QUFDakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLGlEQUFLOztBQUV2QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsaURBQUs7O0FBRXpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxpREFBSztBQUNiO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLGlEQUFLO0FBQ1Qsa0JBQWtCLGlEQUFLOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJLGlEQUFLO0FBQ1Qsc0VBQXNFLGlEQUFLO0FBQzNFLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSxpREFBSzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxpREFBSyw2Q0FBNkMsTUFBTTtBQUN4RCxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxpREFBSzs7QUFFTCwrREFBZSxZQUFZLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zSGVhZGVycy5qcz9iNWE2Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBwYXJzZUhlYWRlcnMgZnJvbSAnLi4vaGVscGVycy9wYXJzZUhlYWRlcnMuanMnO1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKVxuICAgIH0gZWxzZSBpZih1dGlscy5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNIZWFkZXJzKGhlYWRlcikpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhlYWRlci5lbnRyaWVzKCkpIHtcbiAgICAgICAgc2V0SGVhZGVyKHZhbHVlLCBrZXksIHJld3JpdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscy5yZWR1Y2VEZXNjcmlwdG9ycyhBeGlvc0hlYWRlcnMucHJvdG90eXBlLCAoe3ZhbHVlfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnV0aWxzLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NIZWFkZXJzO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/AxiosHeaders.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/core/InterceptorManager.js": +/*!***********************************************************!*\ + !*** ./node_modules/axios/lib/core/InterceptorManager.js ***! + \***********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n\n\n\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (InterceptorManager);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCJtYXBwaW5ncyI6Ijs7QUFBYTs7QUFFcUI7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsVUFBVTtBQUN2QixhQUFhLFVBQVU7QUFDdkI7QUFDQSxjQUFjLFFBQVE7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxJQUFJLGlEQUFLO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsK0RBQWUsa0JBQWtCLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcz85ODBiIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/InterceptorManager.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/core/buildFullPath.js": +/*!******************************************************!*\ + !*** ./node_modules/axios/lib/core/buildFullPath.js ***! + \******************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ buildFullPath; }\n/* harmony export */ });\n/* harmony import */ var _helpers_isAbsoluteURL_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../helpers/isAbsoluteURL.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/isAbsoluteURL.js\");\n/* harmony import */ var _helpers_combineURLs_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/combineURLs.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/combineURLs.js\");\n\n\n\n\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nfunction buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !(0,_helpers_isAbsoluteURL_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return (0,_helpers_combineURLs_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(baseURL, requestedURL);\n }\n return requestedURL;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFhOztBQUUyQztBQUNKOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNlO0FBQ2YsdUJBQXVCLHFFQUFhO0FBQ3BDO0FBQ0EsV0FBVyxtRUFBVztBQUN0QjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanM/MTYyMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBpc0Fic29sdXRlVVJMIGZyb20gJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyc7XG5pbXBvcnQgY29tYmluZVVSTHMgZnJvbSAnLi4vaGVscGVycy9jb21iaW5lVVJMcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCwgYWxsb3dBYnNvbHV0ZVVybHMpIHtcbiAgbGV0IGlzUmVsYXRpdmVVcmwgPSAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpO1xuICBpZiAoYmFzZVVSTCAmJiAoaXNSZWxhdGl2ZVVybCB8fCBhbGxvd0Fic29sdXRlVXJscyA9PSBmYWxzZSkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/buildFullPath.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/core/dispatchRequest.js": +/*!********************************************************!*\ + !*** ./node_modules/axios/lib/core/dispatchRequest.js ***! + \********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ dispatchRequest; }\n/* harmony export */ });\n/* harmony import */ var _transformData_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transformData.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/transformData.js\");\n/* harmony import */ var _cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../cancel/isCancel.js */ \"(app-pages-browser)/./node_modules/axios/lib/cancel/isCancel.js\");\n/* harmony import */ var _defaults_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../defaults/index.js */ \"(app-pages-browser)/./node_modules/axios/lib/defaults/index.js\");\n/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cancel/CanceledError.js */ \"(app-pages-browser)/./node_modules/axios/lib/cancel/CanceledError.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n/* harmony import */ var _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../adapters/adapters.js */ \"(app-pages-browser)/./node_modules/axios/lib/adapters/adapters.js\");\n\n\n\n\n\n\n\n\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nfunction dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(config.headers);\n\n // Transform request data\n config.data = _transformData_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getAdapter(config.adapter || _defaults_index_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = _transformData_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!(0,_cancel_isCancel_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = _transformData_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFhOztBQUVrQztBQUNGO0FBQ0Q7QUFDVztBQUNKO0FBQ0o7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsY0FBYyxnRUFBYTtBQUMzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNlO0FBQ2Y7O0FBRUEsbUJBQW1CLDZEQUFZOztBQUUvQjtBQUNBLGdCQUFnQix5REFBYTtBQUM3QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGtCQUFrQiw2REFBUSw4QkFBOEIsMERBQVE7O0FBRWhFO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IseURBQWE7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLDZEQUFZOztBQUVuQztBQUNBLEdBQUc7QUFDSCxTQUFTLCtEQUFRO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IseURBQWE7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsNkRBQVk7QUFDOUM7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZGlzcGF0Y2hSZXF1ZXN0LmpzPzM3OTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSBcIi4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzXCI7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/dispatchRequest.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/core/mergeConfig.js": +/*!****************************************************!*\ + !*** ./node_modules/axios/lib/core/mergeConfig.js ***! + \****************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ mergeConfig; }\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AxiosHeaders.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n\n\n\n\n\nconst headersToObject = (thing) => thing instanceof _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nfunction mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isPlainObject(target) && _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isPlainObject(source)) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].merge.call({caseless}, target, source);\n } else if (_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isPlainObject(source)) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].merge({}, source);\n } else if (_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (_utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBYTs7QUFFbUI7QUFDYTs7QUFFN0Msb0RBQW9ELHdEQUFZLEtBQUssV0FBVzs7QUFFaEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLGlEQUFLLDBCQUEwQixpREFBSztBQUM1QyxhQUFhLGlEQUFLLGFBQWEsU0FBUztBQUN4QyxNQUFNLFNBQVMsaURBQUs7QUFDcEIsYUFBYSxpREFBSyxTQUFTO0FBQzNCLE1BQU0sU0FBUyxpREFBSztBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUyxpREFBSztBQUNkO0FBQ0EsTUFBTSxVQUFVLGlEQUFLO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUyxpREFBSztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUyxpREFBSztBQUNkO0FBQ0EsTUFBTSxVQUFVLGlEQUFLO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRSxpREFBSyxxQ0FBcUM7QUFDNUM7QUFDQTtBQUNBLEtBQUssaURBQUs7QUFDVixHQUFHOztBQUVIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzP2Y5MWUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9BeGlvc0hlYWRlcnMuanNcIjtcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyA/IHsgLi4udGhpbmcgfSA6IHRoaW5nO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgcHJvcCwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlLmNhbGwoe2Nhc2VsZXNzfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIHByb3AgLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBwcm9wICwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBwcm9wICwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiICwgcHJvcCkgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSxwcm9wLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnMSwgY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGNvbnN0IG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/mergeConfig.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/core/settle.js": +/*!***********************************************!*\ + !*** ./node_modules/axios/lib/core/settle.js ***! + \***********************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ settle; }\n/* harmony export */ });\n/* harmony import */ var _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AxiosError.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js\");\n\n\n\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nfunction settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](\n 'Request failed with status code ' + response.status,\n [_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ERR_BAD_REQUEST, _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBYTs7QUFFNEI7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFVBQVU7QUFDckIsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osZUFBZSxzREFBVTtBQUN6QjtBQUNBLE9BQU8sc0RBQVUsa0JBQWtCLHNEQUFVO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzP2I2MmMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/settle.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/core/transformData.js": +/*!******************************************************!*\ + !*** ./node_modules/axios/lib/core/transformData.js ***! + \******************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ transformData; }\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _defaults_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../defaults/index.js */ \"(app-pages-browser)/./node_modules/axios/lib/defaults/index.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n\n\n\n\n\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nfunction transformData(fns, response) {\n const config = this || _defaults_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n const context = response || config;\n const headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(context.headers);\n let data = context.data;\n\n _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBYTs7QUFFcUI7QUFDVTtBQUNPOztBQUVuRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLGdCQUFnQjtBQUMzQixXQUFXLFNBQVM7QUFDcEI7QUFDQSxhQUFhLEdBQUc7QUFDaEI7QUFDZTtBQUNmLHlCQUF5QiwwREFBUTtBQUNqQztBQUNBLGtCQUFrQiw2REFBWTtBQUM5Qjs7QUFFQSxFQUFFLGlEQUFLO0FBQ1A7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanM/NjIyMSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cztcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/core/transformData.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/defaults/index.js": +/*!**************************************************!*\ + !*** ./node_modules/axios/lib/defaults/index.js ***! + \**************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _transitional_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transitional.js */ \"(app-pages-browser)/./node_modules/axios/lib/defaults/transitional.js\");\n/* harmony import */ var _helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../helpers/toFormData.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/toFormData.js\");\n/* harmony import */ var _helpers_toURLEncodedForm_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers/toURLEncodedForm.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/toURLEncodedForm.js\");\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../platform/index.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/index.js\");\n/* harmony import */ var _helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers/formDataToJSON.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/formDataToJSON.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: _transitional_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(data);\n\n if (isObjectPayload && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify((0,_helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(data)) : data;\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArrayBuffer(data) ||\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBuffer(data) ||\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isStream(data) ||\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFile(data) ||\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBlob(data) ||\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isReadableStream(data)\n ) {\n return data;\n }\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArrayBufferView(data)) {\n return data.buffer;\n }\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return (0,_helpers_toURLEncodedForm_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(data, this.formSerializer).toString();\n }\n\n if ((isFileList = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return (0,_helpers_toFormData_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isResponse(data) || _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isReadableStream(data)) {\n return data;\n }\n\n if (data && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].from(e, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: _platform_index_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].classes.FormData,\n Blob: _platform_index_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"].classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\n_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (defaults);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBYTs7QUFFbUI7QUFDZTtBQUNNO0FBQ0g7QUFDWTtBQUNsQjtBQUNjOztBQUUxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsS0FBSztBQUNoQixXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxNQUFNLGlEQUFLO0FBQ1g7QUFDQTtBQUNBLGFBQWEsaURBQUs7QUFDbEIsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxnQkFBZ0Isd0RBQW9COztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsaURBQUs7O0FBRWpDLDJCQUEyQixpREFBSztBQUNoQztBQUNBOztBQUVBLHVCQUF1QixpREFBSzs7QUFFNUI7QUFDQSxpREFBaUQsc0VBQWM7QUFDL0Q7O0FBRUEsUUFBUSxpREFBSztBQUNiLE1BQU0saURBQUs7QUFDWCxNQUFNLGlEQUFLO0FBQ1gsTUFBTSxpREFBSztBQUNYLE1BQU0saURBQUs7QUFDWCxNQUFNLGlEQUFLO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsUUFBUSxpREFBSztBQUNiO0FBQ0E7QUFDQSxRQUFRLGlEQUFLO0FBQ2IsZ0VBQWdFO0FBQ2hFO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGVBQWUsd0VBQWdCO0FBQy9COztBQUVBLHdCQUF3QixpREFBSztBQUM3Qjs7QUFFQSxlQUFlLGtFQUFVO0FBQ3pCLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxpREFBSyxxQkFBcUIsaURBQUs7QUFDdkM7QUFDQTs7QUFFQSxnQkFBZ0IsaURBQUs7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxrQkFBa0IsMkRBQVUsU0FBUywyREFBVTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGNBQWMsMERBQVE7QUFDdEIsVUFBVSwwREFBUTtBQUNsQixHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlEQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELCtEQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL2luZGV4LmpzPzZhY2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHRvVVJMRW5jb2RlZEZvcm0gZnJvbSAnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscy5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAodXRpbHMuaXNSZXNwb25zZShkYXRhKSB8fCB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscy5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/defaults/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/defaults/transitional.js": +/*!*********************************************************!*\ + !*** ./node_modules/axios/lib/defaults/transitional.js ***! + \*********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvdHJhbnNpdGlvbmFsLmpzIiwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYiwrREFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcz9iNzZlIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/defaults/transitional.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/env/data.js": +/*!********************************************!*\ + !*** ./node_modules/axios/lib/env/data.js ***! + \********************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ VERSION: function() { return /* binding */ VERSION; }\n/* harmony export */ });\nconst VERSION = \"1.8.4\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanM/NWFmYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMS44LjRcIjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/env/data.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js": +/*!****************************************************************!*\ + !*** ./node_modules/axios/lib/helpers/AxiosURLSearchParams.js ***! + \****************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _toFormData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toFormData.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/toFormData.js\");\n\n\n\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && (0,_toFormData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (AxiosURLSearchParams);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyIsIm1hcHBpbmdzIjoiOztBQUFhOztBQUU0Qjs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxQkFBcUI7QUFDaEMsV0FBVyxxQkFBcUI7QUFDaEM7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBLFlBQVksMERBQVU7QUFDdEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSwrREFBZSxvQkFBb0IsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanM/MGMwNCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogSXQgZW5jb2RlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IGluIHRoZSB1bnJlc2VydmVkIHNldCB3aXRoXG4gKiB0aGVpciBwZXJjZW50LWVuY29kZWQgZXF1aXZhbGVudHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBlbmNvZGUuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlbmNvZGUoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUpO1xuICB9IDogZW5jb2RlO1xuXG4gIHJldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24gZWFjaChwYWlyKSB7XG4gICAgcmV0dXJuIF9lbmNvZGUocGFpclswXSkgKyAnPScgKyBfZW5jb2RlKHBhaXJbMV0pO1xuICB9LCAnJykuam9pbignJicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/HttpStatusCode.js": +/*!**********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/HttpStatusCode.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\nconst HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (HttpStatusCode);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCwrREFBZSxjQUFjLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzPzEyOWIiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBTdGF0dXNDb2RlO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/HttpStatusCode.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/bind.js": +/*!************************************************!*\ + !*** ./node_modules/axios/lib/helpers/bind.js ***! + \************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ bind; }\n/* harmony export */ });\n\n\nfunction bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBYTs7QUFFRTtBQUNmO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzP2RlMmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/bind.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/buildURL.js": +/*!****************************************************!*\ + !*** ./node_modules/axios/lib/helpers/buildURL.js ***! + \****************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ buildURL; }\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _helpers_AxiosURLSearchParams_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers/AxiosURLSearchParams.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\");\n\n\n\n\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nfunction buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isURLSearchParams(params) ?\n params.toString() :\n new _helpers_AxiosURLSearchParams_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBYTs7QUFFbUI7QUFDc0M7O0FBRXRFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxvQkFBb0I7QUFDL0I7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLGlEQUFLO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSix1QkFBdUIsaURBQUs7QUFDNUI7QUFDQSxVQUFVLHdFQUFvQjtBQUM5Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanM/YWY5NyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/KG9iamVjdHxGdW5jdGlvbil9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgc2VyaWFsaXplOiBvcHRpb25zXG4gICAgfTtcbiAgfSBcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/buildURL.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/combineURLs.js": +/*!*******************************************************!*\ + !*** ./node_modules/axios/lib/helpers/combineURLs.js ***! + \*******************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ combineURLs; }\n/* harmony export */ });\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nfunction combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzP2Y1NzQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/combineURLs.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/composeSignals.js": +/*!**********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/composeSignals.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../cancel/CanceledError.js */ \"(app-pages-browser)/./node_modules/axios/lib/cancel/CanceledError.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n\n\n\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"] ? err : new _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](`timeout ${timeout} of ms exceeded`, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].asap(unsubscribe);\n\n return signal;\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (composeSignals);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21wb3NlU2lnbmFscy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQXVEO0FBQ1I7QUFDZjs7QUFFaEM7QUFDQSxTQUFTLFFBQVE7O0FBRWpCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QywyREFBVSxhQUFhLGdFQUFhO0FBQzVFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQiwyREFBVSxZQUFZLFNBQVMsaUJBQWlCLDJEQUFVO0FBQzVFLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxXQUFXLFFBQVE7O0FBRW5CLCtCQUErQixpREFBSzs7QUFFcEM7QUFDQTtBQUNBOztBQUVBLCtEQUFlLGNBQWMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tcG9zZVNpZ25hbHMuanM/N2ZlOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tIFwiLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanNcIjtcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzID0gKHNpZ25hbHMsIHRpbWVvdXQpID0+IHtcbiAgY29uc3Qge2xlbmd0aH0gPSAoc2lnbmFscyA9IHNpZ25hbHMgPyBzaWduYWxzLmZpbHRlcihCb29sZWFuKSA6IFtdKTtcblxuICBpZiAodGltZW91dCB8fCBsZW5ndGgpIHtcbiAgICBsZXQgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGxldCBhYm9ydGVkO1xuXG4gICAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIGlmICghYWJvcnRlZCkge1xuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3QgZXJyID0gcmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24gOiB0aGlzLnJlYXNvbjtcbiAgICAgICAgY29udHJvbGxlci5hYm9ydChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yID8gZXJyIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yKGB0aW1lb3V0ICR7dGltZW91dH0gb2YgbXMgZXhjZWVkZWRgLCBBeGlvc0Vycm9yLkVUSU1FRE9VVCkpXG4gICAgfSwgdGltZW91dClcblxuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgaWYgKHNpZ25hbHMpIHtcbiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICBzaWduYWxzLmZvckVhY2goc2lnbmFsID0+IHtcbiAgICAgICAgICBzaWduYWwudW5zdWJzY3JpYmUgPyBzaWduYWwudW5zdWJzY3JpYmUob25hYm9ydCkgOiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSk7XG5cbiAgICBjb25zdCB7c2lnbmFsfSA9IGNvbnRyb2xsZXI7XG5cbiAgICBzaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB1dGlscy5hc2FwKHVuc3Vic2NyaWJlKTtcblxuICAgIHJldHVybiBzaWduYWw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZVNpZ25hbHM7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/composeSignals.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/cookies.js": +/*!***************************************************!*\ + !*** ./node_modules/axios/lib/helpers/cookies.js ***! + \***************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../platform/index.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/index.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isString(path) && cookie.push('path=' + path);\n\n _utils_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n });\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwibWFwcGluZ3MiOiI7OztBQUFrQztBQUNVOztBQUU1QywrREFBZSwwREFBUTs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxpREFBSzs7QUFFWCxNQUFNLGlEQUFLOztBQUVYLE1BQU0saURBQUs7O0FBRVg7O0FBRUEsdUNBQXVDO0FBQ3ZDLEtBQUs7O0FBRUw7QUFDQSwwREFBMEQsd0JBQXdCO0FBQ2xGO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanM/NDliZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscy5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/cookies.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/formDataToJSON.js": +/*!**********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/formDataToJSON.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n\n\n\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(target) ? target.length : name;\n\n if (isLast) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFormData(formData) && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(formData.entries)) {\n const obj = {};\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (formDataToJSON);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyIsIm1hcHBpbmdzIjoiOztBQUFhOztBQUVtQjs7QUFFaEM7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGlEQUFLO0FBQ2Q7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsU0FBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsNEJBQTRCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsaURBQUs7O0FBRXpCO0FBQ0EsVUFBVSxpREFBSztBQUNmO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwwQkFBMEIsaURBQUs7QUFDL0I7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0IsaURBQUs7QUFDdkI7QUFDQTs7QUFFQTtBQUNBOztBQUVBLE1BQU0saURBQUsseUJBQXlCLGlEQUFLO0FBQ3pDOztBQUVBLElBQUksaURBQUs7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBLCtEQUFlLGNBQWMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanM/NTZkOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9ybURhdGFUb0pTT047XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/formDataToJSON.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/isAbsoluteURL.js": +/*!*********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***! + \*********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ isAbsoluteURL; }\n/* harmony export */ });\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nfunction isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanM/NDM2YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/isAbsoluteURL.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/isAxiosError.js": +/*!********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***! + \********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ isAxiosError; }\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n\n\n\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nfunction isAxiosError(payload) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(payload) && (payload.isAxiosError === true);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBYTs7QUFFcUI7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ2U7QUFDZixTQUFTLGlEQUFLO0FBQ2QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcz9kZDNmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/isAxiosError.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/isURLSameOrigin.js": +/*!***********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***! + \***********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../platform/index.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/index.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, _platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].origin),\n _platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].navigator && /(msie|trident)/i.test(_platform_index_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].navigator.userAgent)\n) : () => true);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJtYXBwaW5ncyI6Ijs7QUFBNEM7O0FBRTVDLCtEQUFlLDBEQUFRO0FBQ3ZCLHFCQUFxQiwwREFBUTs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxVQUFVLDBEQUFRO0FBQ2xCLEVBQUUsMERBQVEscUNBQXFDLDBEQUFRO0FBQ3ZELGNBQWMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzP2Q4M2MiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID8gKChvcmlnaW4sIGlzTVNJRSkgPT4gKHVybCkgPT4ge1xuICB1cmwgPSBuZXcgVVJMKHVybCwgcGxhdGZvcm0ub3JpZ2luKTtcblxuICByZXR1cm4gKFxuICAgIG9yaWdpbi5wcm90b2NvbCA9PT0gdXJsLnByb3RvY29sICYmXG4gICAgb3JpZ2luLmhvc3QgPT09IHVybC5ob3N0ICYmXG4gICAgKGlzTVNJRSB8fCBvcmlnaW4ucG9ydCA9PT0gdXJsLnBvcnQpXG4gICk7XG59KShcbiAgbmV3IFVSTChwbGF0Zm9ybS5vcmlnaW4pLFxuICBwbGF0Zm9ybS5uYXZpZ2F0b3IgJiYgLyhtc2llfHRyaWRlbnQpL2kudGVzdChwbGF0Zm9ybS5uYXZpZ2F0b3IudXNlckFnZW50KVxuKSA6ICgpID0+IHRydWU7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/isURLSameOrigin.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/null.js": +/*!************************************************!*\ + !*** ./node_modules/axios/lib/helpers/null.js ***! + \************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n// eslint-disable-next-line strict\n/* harmony default export */ __webpack_exports__[\"default\"] = (null);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9udWxsLmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBLCtEQUFlLElBQUksRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbnVsbC5qcz82ZTQ4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/null.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/parseHeaders.js": +/*!********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***! + \********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n\n\n\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\n/* harmony default export */ __webpack_exports__[\"default\"] = (rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCJtYXBwaW5ncyI6Ijs7QUFBYTs7QUFFcUI7O0FBRWxDO0FBQ0E7QUFDQSwwQkFBMEIsaURBQUs7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBLCtEQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanM/NmRjZSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscy50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/parseHeaders.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/parseProtocol.js": +/*!*********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/parseProtocol.js ***! + \*********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ parseProtocol; }\n/* harmony export */ });\n\n\nfunction parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBYTs7QUFFRTtBQUNmLDBCQUEwQixLQUFLO0FBQy9CO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlUHJvdG9jb2wuanM/MTRjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/parseProtocol.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/progressEventReducer.js": +/*!****************************************************************!*\ + !*** ./node_modules/axios/lib/helpers/progressEventReducer.js ***! + \****************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ asyncDecorator: function() { return /* binding */ asyncDecorator; },\n/* harmony export */ progressEventDecorator: function() { return /* binding */ progressEventDecorator; },\n/* harmony export */ progressEventReducer: function() { return /* binding */ progressEventReducer; }\n/* harmony export */ });\n/* harmony import */ var _speedometer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./speedometer.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/speedometer.js\");\n/* harmony import */ var _throttle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./throttle.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/throttle.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n\n\n\n\nconst progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = (0,_speedometer_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(50, 250);\n\n return (0,_throttle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nconst progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nconst asyncDecorator = (fn) => (...args) => _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].asap(() => fn(...args));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBMkM7QUFDTjtBQUNMOztBQUV6QjtBQUNQO0FBQ0EsdUJBQXVCLDJEQUFXOztBQUVsQyxTQUFTLHdEQUFRO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVPLDRDQUE0QyxpREFBSyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanM/MjI0NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSBcIi4vc3BlZWRvbWV0ZXIuanNcIjtcbmltcG9ydCB0aHJvdHRsZSBmcm9tIFwiLi90aHJvdHRsZS5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgPSAobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0sIGZyZXEgPSAzKSA9PiB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIHRocm90dGxlKGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGUsXG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiB0b3RhbCAhPSBudWxsLFxuICAgICAgW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddOiB0cnVlXG4gICAgfTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9LCBmcmVxKTtcbn1cblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnREZWNvcmF0b3IgPSAodG90YWwsIHRocm90dGxlZCkgPT4ge1xuICBjb25zdCBsZW5ndGhDb21wdXRhYmxlID0gdG90YWwgIT0gbnVsbDtcblxuICByZXR1cm4gWyhsb2FkZWQpID0+IHRocm90dGxlZFswXSh7XG4gICAgbGVuZ3RoQ29tcHV0YWJsZSxcbiAgICB0b3RhbCxcbiAgICBsb2FkZWRcbiAgfSksIHRocm90dGxlZFsxXV07XG59XG5cbmV4cG9ydCBjb25zdCBhc3luY0RlY29yYXRvciA9IChmbikgPT4gKC4uLmFyZ3MpID0+IHV0aWxzLmFzYXAoKCkgPT4gZm4oLi4uYXJncykpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/progressEventReducer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/resolveConfig.js": +/*!*********************************************************!*\ + !*** ./node_modules/axios/lib/helpers/resolveConfig.js ***! + \*********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../platform/index.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/index.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _isURLSameOrigin_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isURLSameOrigin.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/isURLSameOrigin.js\");\n/* harmony import */ var _cookies_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./cookies.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/cookies.js\");\n/* harmony import */ var _core_buildFullPath_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/buildFullPath.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/buildFullPath.js\");\n/* harmony import */ var _core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/mergeConfig.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/mergeConfig.js\");\n/* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosHeaders.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosHeaders.js\");\n/* harmony import */ var _buildURL_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./buildURL.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/buildURL.js\");\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ((config) => {\n const newConfig = (0,_core_mergeConfig_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].from(headers);\n\n newConfig.url = (0,_buildURL_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_core_buildFullPath_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].isFormData(data)) {\n if (_platform_index_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].hasStandardBrowserEnv || _platform_index_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (_platform_index_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"].hasStandardBrowserEnv) {\n withXSRFToken && _utils_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"].isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && (0,_isURLSameOrigin_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && _cookies_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"].read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n});\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUE0QztBQUNaO0FBQ21CO0FBQ2hCO0FBQ2tCO0FBQ0o7QUFDRTtBQUNkOztBQUVyQywrREFBZTtBQUNmLG9CQUFvQixnRUFBVyxHQUFHOztBQUVsQyxPQUFPLG9FQUFvRTs7QUFFM0UsZ0NBQWdDLDZEQUFZOztBQUU1QyxrQkFBa0Isd0RBQVEsQ0FBQyxrRUFBYTs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE1BQU0saURBQUs7QUFDWCxRQUFRLDBEQUFRLDBCQUEwQiwwREFBUTtBQUNsRCx5Q0FBeUM7QUFDekMsTUFBTTtBQUNOO0FBQ0Esa0VBQWtFO0FBQ2xFLGdGQUFnRjtBQUNoRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLDBEQUFRO0FBQ2QscUJBQXFCLGlEQUFLOztBQUUxQixxREFBcUQsK0RBQWU7QUFDcEU7QUFDQSw0REFBNEQsbURBQU87O0FBRW5FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzPzFlZTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBsYXRmb3JtIGZyb20gXCIuLi9wbGF0Zm9ybS9pbmRleC5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tIFwiLi9pc1VSTFNhbWVPcmlnaW4uanNcIjtcbmltcG9ydCBjb29raWVzIGZyb20gXCIuL2Nvb2tpZXMuanNcIjtcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gXCIuLi9jb3JlL2J1aWxkRnVsbFBhdGguanNcIjtcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tIFwiLi4vY29yZS9tZXJnZUNvbmZpZy5qc1wiO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCBidWlsZFVSTCBmcm9tIFwiLi9idWlsZFVSTC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIGxldCB7ZGF0YSwgd2l0aFhTUkZUb2tlbiwgeHNyZkhlYWRlck5hbWUsIHhzcmZDb29raWVOYW1lLCBoZWFkZXJzLCBhdXRofSA9IG5ld0NvbmZpZztcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoYnVpbGRGdWxsUGF0aChuZXdDb25maWcuYmFzZVVSTCwgbmV3Q29uZmlnLnVybCwgbmV3Q29uZmlnLmFsbG93QWJzb2x1dGVVcmxzKSwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICtcbiAgICAgIGJ0b2EoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYXV0aC5wYXNzd29yZCkpIDogJycpKVxuICAgICk7XG4gIH1cblxuICBsZXQgY29udGVudFR5cGU7XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuXG4gIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKG5ld0NvbmZpZykpO1xuXG4gICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihuZXdDb25maWcudXJsKSkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgY29uc3QgeHNyZlZhbHVlID0geHNyZkhlYWRlck5hbWUgJiYgeHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKHhzcmZDb29raWVOYW1lKTtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICBoZWFkZXJzLnNldCh4c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Q29uZmlnO1xufVxuXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/resolveConfig.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/speedometer.js": +/*!*******************************************************!*\ + !*** ./node_modules/axios/lib/helpers/speedometer.js ***! + \*******************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (speedometer);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcGVlZG9tZXRlci5qcyIsIm1hcHBpbmdzIjoiO0FBQWE7O0FBRWI7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtEQUFlLFdBQVcsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3BlZWRvbWV0ZXIuanM/MzI1YyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/speedometer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/spread.js": +/*!**************************************************!*\ + !*** ./node_modules/axios/lib/helpers/spread.js ***! + \**************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ spread; }\n/* harmony export */ });\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nfunction spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQjtBQUNBLGFBQWE7QUFDYjtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcz9lYTA1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/spread.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/throttle.js": +/*!****************************************************!*\ + !*** ./node_modules/axios/lib/helpers/throttle.js ***! + \****************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (throttle);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90aHJvdHRsZS5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLCtEQUFlLFFBQVEsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdGhyb3R0bGUuanM/NWRjMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRocm90dGxlIGRlY29yYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBmcmVxXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIGZyZXEpIHtcbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGxldCB0aHJlc2hvbGQgPSAxMDAwIC8gZnJlcTtcbiAgbGV0IGxhc3RBcmdzO1xuICBsZXQgdGltZXI7XG5cbiAgY29uc3QgaW52b2tlID0gKGFyZ3MsIG5vdyA9IERhdGUubm93KCkpID0+IHtcbiAgICB0aW1lc3RhbXAgPSBub3c7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gIH1cblxuICBjb25zdCB0aHJvdHRsZWQgPSAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcGFzc2VkID0gbm93IC0gdGltZXN0YW1wO1xuICAgIGlmICggcGFzc2VkID49IHRocmVzaG9sZCkge1xuICAgICAgaW52b2tlKGFyZ3MsIG5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RBcmdzID0gYXJncztcbiAgICAgIGlmICghdGltZXIpIHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICAgICAgaW52b2tlKGxhc3RBcmdzKVxuICAgICAgICB9LCB0aHJlc2hvbGQgLSBwYXNzZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4gbGFzdEFyZ3MgJiYgaW52b2tlKGxhc3RBcmdzKTtcblxuICByZXR1cm4gW3Rocm90dGxlZCwgZmx1c2hdO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0aHJvdHRsZTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/throttle.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/toFormData.js": +/*!******************************************************!*\ + !*** ./node_modules/axios/lib/helpers/toFormData.js ***! + \******************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js\");\n/* harmony import */ var _platform_node_classes_FormData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../platform/node/classes/FormData.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/null.js\");\n/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"(app-pages-browser)/./node_modules/next/dist/compiled/buffer/index.js\")[\"Buffer\"];\n\n\n\n\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\n\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isPlainObject(thing) || _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toFlatObject(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (_platform_node_classes_FormData_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"] || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isSpecCompliantForm(formData);\n\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isBlob(value)) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]('Blob is not supported. Use a Buffer instead.');\n }\n\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArrayBuffer(value) || _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isArray(value) && isFlatArray(value)) ||\n ((_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isFileList(value) || _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].endsWith(key, '[]')) && (arr = _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].forEach(value, function each(el, key) {\n const result = !(_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isUndefined(el) || el === null) && visitor.call(\n formData, el, _utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"].isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (toFormData);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWE7O0FBRW1CO0FBQ2U7QUFDL0M7QUFDb0U7O0FBRXBFO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUyxpREFBSyx5QkFBeUIsaURBQUs7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQSxTQUFTLGlEQUFLO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTLGlEQUFLO0FBQ2Q7O0FBRUEsbUJBQW1CLGlEQUFLLGNBQWMsaURBQUssSUFBSTtBQUMvQztBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsUUFBUTtBQUNuQixXQUFXLHFCQUFxQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8saURBQUs7QUFDWjtBQUNBOztBQUVBO0FBQ0EsOEJBQThCLDBFQUFnQjs7QUFFOUM7QUFDQSxZQUFZLGlEQUFLO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLFlBQVksaURBQUs7QUFDakIsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsaURBQUs7O0FBRWhDLE9BQU8saURBQUs7QUFDWjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsUUFBUSxpREFBSztBQUNiO0FBQ0E7O0FBRUEsb0JBQW9CLGlEQUFLO0FBQ3pCLGdCQUFnQiwyREFBVTtBQUMxQjs7QUFFQSxRQUFRLGlEQUFLLHlCQUF5QixpREFBSztBQUMzQyx5RUFBeUUsTUFBTTtBQUMvRTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsR0FBRztBQUNoQixhQUFhLGVBQWU7QUFDNUIsYUFBYSxzQkFBc0I7QUFDbkMsWUFBWTtBQUNaO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVUsaURBQUssa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLFNBQVMsaURBQUs7QUFDZCxVQUFVLGlEQUFLLHNCQUFzQixpREFBSyxnQ0FBZ0MsaURBQUs7QUFDL0U7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSxpREFBSztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsUUFBUSxpREFBSzs7QUFFYjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsSUFBSSxpREFBSztBQUNULHVCQUF1QixpREFBSztBQUM1QixzQkFBc0IsaURBQUs7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBLE9BQU8saURBQUs7QUFDWjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsK0RBQWUsVUFBVSxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzPzM2YzYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbi8vIHRlbXBvcmFyeSBob3RmaXggdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcyB1bnRpbCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBpcyByZWZhY3RvcmVkXG5pbXBvcnQgUGxhdGZvcm1Gb3JtRGF0YSBmcm9tICcuLi9wbGF0Zm9ybS9ub2RlL2NsYXNzZXMvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscy5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzLmlzQXJyYXkoYXJyKSAmJiAhYXJyLnNvbWUoaXNWaXNpdGFibGUpO1xufVxuXG5jb25zdCBwcmVkaWNhdGVzID0gdXRpbHMudG9GbGF0T2JqZWN0KHV0aWxzLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGZvcm1EYXRhID0gZm9ybURhdGEgfHwgbmV3IChQbGF0Zm9ybUZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMuaXNGdW5jdGlvbih2aXNpdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3Zpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnJztcblxuICAgIGlmICh1dGlscy5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXIodmFsdWUpIHx8IHV0aWxzLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKCh1dGlscy5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscy5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMudG9BcnJheSh2YWx1ZSkpXG4gICAgICAgICkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IHJlbW92ZUJyYWNrZXRzKGtleSk7XG5cbiAgICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gZWFjaChlbCwgaW5kZXgpIHtcbiAgICAgICAgICAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscy5mb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiBlYWNoKGVsLCBrZXkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9ICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICB9XG5cbiAgYnVpbGQob2JqKTtcblxuICByZXR1cm4gZm9ybURhdGE7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRvRm9ybURhdGE7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/toFormData.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/toURLEncodedForm.js": +/*!************************************************************!*\ + !*** ./node_modules/axios/lib/helpers/toURLEncodedForm.js ***! + \************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ toURLEncodedForm; }\n/* harmony export */ });\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/utils.js\");\n/* harmony import */ var _toFormData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toFormData.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/toFormData.js\");\n/* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../platform/index.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/index.js\");\n\n\n\n\n\n\nfunction toURLEncodedForm(data, options) {\n return (0,_toFormData_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(data, new _platform_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (_platform_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].isNode && _utils_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBYTs7QUFFbUI7QUFDUztBQUNHOztBQUU3QjtBQUNmLFNBQVMsMERBQVUsV0FBVywwREFBUTtBQUN0QztBQUNBLFVBQVUsMERBQVEsV0FBVyxpREFBSztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcz80ZjkyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIE9iamVjdC5hc3NpZ24oe1xuICAgIHZpc2l0b3I6IGZ1bmN0aW9uKHZhbHVlLCBrZXksIHBhdGgsIGhlbHBlcnMpIHtcbiAgICAgIGlmIChwbGF0Zm9ybS5pc05vZGUgJiYgdXRpbHMuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/toURLEncodedForm.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/trackStream.js": +/*!*******************************************************!*\ + !*** ./node_modules/axios/lib/helpers/trackStream.js ***! + \*******************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ readBytes: function() { return /* binding */ readBytes; },\n/* harmony export */ streamChunk: function() { return /* binding */ streamChunk; },\n/* harmony export */ trackStream: function() { return /* binding */ trackStream; }\n/* harmony export */ });\n\nconst streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nconst readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nconst trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90cmFja1N0cmVhbS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ087QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWCxhQUFhLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYTs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90cmFja1N0cmVhbS5qcz9jYmEzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IGNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVhZEJ5dGVzID0gYXN5bmMgZnVuY3Rpb24qIChpdGVyYWJsZSwgY2h1bmtTaXplKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZFN0cmVhbShpdGVyYWJsZSkpIHtcbiAgICB5aWVsZCogc3RyZWFtQ2h1bmsoY2h1bmssIGNodW5rU2l6ZSk7XG4gIH1cbn1cblxuY29uc3QgcmVhZFN0cmVhbSA9IGFzeW5jIGZ1bmN0aW9uKiAoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgeWllbGQqIHN0cmVhbTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWFkZXIuY2FuY2VsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRyYWNrU3RyZWFtID0gKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSk7XG5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgbGV0IGRvbmU7XG4gIGxldCBfb25GaW5pc2ggPSAoZSkgPT4ge1xuICAgIGlmICghZG9uZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBvbkZpbmlzaCAmJiBvbkZpbmlzaChlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSBieXRlcyArPSBsZW47XG4gICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/trackStream.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/helpers/validator.js": +/*!*****************************************************!*\ + !*** ./node_modules/axios/lib/helpers/validator.js ***! + \*****************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _env_data_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../env/data.js */ \"(app-pages-browser)/./node_modules/axios/lib/env/data.js\");\n/* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/AxiosError.js */ \"(app-pages-browser)/./node_modules/axios/lib/core/AxiosError.js\");\n\n\n\n\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + _env_data_js__WEBPACK_IMPORTED_MODULE_0__.VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('options must be an object', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('option ' + opt + ' must be ' + result, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]('Unknown option ' + opt, _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ERR_BAD_OPTION);\n }\n }\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n assertOptions,\n validators\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWE7O0FBRTBCO0FBQ1E7O0FBRS9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsbUJBQW1CO0FBQzlCLFdBQVcsU0FBUztBQUNwQixXQUFXLFNBQVM7QUFDcEI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlEQUFPO0FBQy9COztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwyREFBVTtBQUMxQjtBQUNBLFFBQVEsMkRBQVU7QUFDbEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLEtBQUssNkJBQTZCLGdCQUFnQjtBQUN0RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFVBQVU7QUFDckI7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBLGNBQWMsMkRBQVUsOEJBQThCLDJEQUFVO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDJEQUFVLHlDQUF5QywyREFBVTtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwyREFBVSwwQkFBMEIsMkRBQVU7QUFDOUQ7QUFDQTtBQUNBOztBQUVBLCtEQUFlO0FBQ2Y7QUFDQTtBQUNBLENBQUMsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzPzNlZDIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4uL2Vudi9kYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gIHZhbGlkYXRvcnNbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodmFsdWUsIG9wdCwgb3B0cykgPT4ge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG52YWxpZGF0b3JzLnNwZWxsaW5nID0gZnVuY3Rpb24gc3BlbGxpbmcoY29ycmVjdFNwZWxsaW5nKSB7XG4gIHJldHVybiAodmFsdWUsIG9wdCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKGAke29wdH0gaXMgbGlrZWx5IGEgbWlzc3BlbGxpbmcgb2YgJHtjb3JyZWN0U3BlbGxpbmd9YCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/helpers/validator.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/platform/browser/classes/Blob.js": +/*!*****************************************************************!*\ + !*** ./node_modules/axios/lib/platform/browser/classes/Blob.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (typeof Blob !== 'undefined' ? Blob : null);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanMiLCJtYXBwaW5ncyI6IjtBQUFZOztBQUVaLCtEQUFlLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9CbG9iLmpzP2E3MzgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/platform/browser/classes/Blob.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/platform/browser/classes/FormData.js": +/*!*********************************************************************!*\ + !*** ./node_modules/axios/lib/platform/browser/classes/FormData.js ***! + \*********************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (typeof FormData !== 'undefined' ? FormData : null);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzIiwibWFwcGluZ3MiOiI7QUFBYTs7QUFFYiwrREFBZSxpREFBaUQsRUFBQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9Gb3JtRGF0YS5qcz81NTM4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyA/IEZvcm1EYXRhIDogbnVsbDtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/platform/browser/classes/FormData.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js": +/*!****************************************************************************!*\ + !*** ./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js ***! + \****************************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _helpers_AxiosURLSearchParams_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../helpers/AxiosURLSearchParams.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (typeof URLSearchParams !== 'undefined' ? URLSearchParams : _helpers_AxiosURLSearchParams_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcyIsIm1hcHBpbmdzIjoiOztBQUFhOztBQUUrRDtBQUM1RSwrREFBZSwyREFBMkQsd0VBQW9CLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzP2Y0ZWIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vLi4vLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/platform/browser/index.js": +/*!**********************************************************!*\ + !*** ./node_modules/axios/lib/platform/browser/index.js ***! + \**********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _classes_URLSearchParams_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./classes/URLSearchParams.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js\");\n/* harmony import */ var _classes_FormData_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./classes/FormData.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/browser/classes/FormData.js\");\n/* harmony import */ var _classes_Blob_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./classes/Blob.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/browser/classes/Blob.js\");\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n isBrowser: true,\n classes: {\n URLSearchParams: _classes_URLSearchParams_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"],\n FormData: _classes_FormData_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n Blob: _classes_Blob_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQTBEO0FBQ2Q7QUFDUjs7QUFFcEMsK0RBQWU7QUFDZjtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CLFlBQVk7QUFDWixRQUFRO0FBQ1IsR0FBRztBQUNIO0FBQ0EsQ0FBQyxFQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9pbmRleC5qcz82OWI5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnXG5pbXBvcnQgQmxvYiBmcm9tICcuL2NsYXNzZXMvQmxvYi5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYlxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/platform/browser/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/platform/common/utils.js": +/*!*********************************************************!*\ + !*** ./node_modules/axios/lib/platform/common/utils.js ***! + \*********************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ hasBrowserEnv: function() { return /* binding */ hasBrowserEnv; },\n/* harmony export */ hasStandardBrowserEnv: function() { return /* binding */ hasStandardBrowserEnv; },\n/* harmony export */ hasStandardBrowserWebWorkerEnv: function() { return /* binding */ hasStandardBrowserWebWorkerEnv; },\n/* harmony export */ navigator: function() { return /* binding */ _navigator; },\n/* harmony export */ origin: function() { return /* binding */ origin; }\n/* harmony export */ });\nconst hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBUUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9jb21tb24vdXRpbHMuanM/NDFlMiJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuY29uc3QgX25hdmlnYXRvciA9IHR5cGVvZiBuYXZpZ2F0b3IgPT09ICdvYmplY3QnICYmIG5hdmlnYXRvciB8fCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSBoYXNCcm93c2VyRW52ICYmXG4gICghX25hdmlnYXRvciB8fCBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YoX25hdmlnYXRvci5wcm9kdWN0KSA8IDApO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSBoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxuZXhwb3J0IHtcbiAgaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIF9uYXZpZ2F0b3IgYXMgbmF2aWdhdG9yLFxuICBvcmlnaW5cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/platform/common/utils.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/platform/index.js": +/*!**************************************************!*\ + !*** ./node_modules/axios/lib/platform/index.js ***! + \**************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node/index.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/browser/index.js\");\n/* harmony import */ var _common_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common/utils.js */ \"(app-pages-browser)/./node_modules/axios/lib/platform/common/utils.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n ..._common_utils_js__WEBPACK_IMPORTED_MODULE_0__,\n ..._node_index_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7O0FBQXVDO0FBQ0k7O0FBRTNDLCtEQUFlO0FBQ2YsS0FBSyw2Q0FBSztBQUNWLEtBQUssc0RBQVE7QUFDYixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanM/ODM2MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi9ub2RlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vY29tbW9uL3V0aWxzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/platform/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/axios/lib/utils.js": +/*!*****************************************!*\ + !*** ./node_modules/axios/lib/utils.js ***! + \*****************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _helpers_bind_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers/bind.js */ \"(app-pages-browser)/./node_modules/axios/lib/helpers/bind.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n\n\n\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = (0,_helpers_bind_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQWE7O0FBRXdCOztBQUVyQzs7QUFFQSxPQUFPLFVBQVU7QUFDakIsT0FBTyxnQkFBZ0I7O0FBRXZCO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0EsT0FBTyxTQUFTOztBQUVoQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLGFBQWEsU0FBUztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxhQUFhLFNBQVM7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhLFNBQVM7QUFDdEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLFVBQVU7QUFDckI7QUFDQSxXQUFXLFNBQVM7QUFDcEIsYUFBYTtBQUNiO0FBQ0EsMkJBQTJCLG9CQUFvQixJQUFJO0FBQ25EO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLE9BQU87QUFDdkM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixTQUFTLEdBQUcsU0FBUztBQUM1Qyw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0EsU0FBUyxVQUFVO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sa0NBQWtDO0FBQ2xDLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLE9BQU87QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxXQUFXLFNBQVM7QUFDcEIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsZ0NBQWdDLFdBQVcsSUFBSTtBQUMvQztBQUNBO0FBQ0EsZUFBZSw0REFBSTtBQUNuQixNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUcsR0FBRyxXQUFXO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLFVBQVU7QUFDckIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxVQUFVO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxXQUFXLGtCQUFrQjtBQUM3QixXQUFXLFVBQVU7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCLGVBQWU7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0EsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQyxhQUFhO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFdBQVcsY0FBYztBQUM1QixDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDLE9BQU8sb0JBQW9CLE9BQU87O0FBRTVFOztBQUVBLCtEQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcz81MjUyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFsnUmVhZGFibGVTdHJlYW0nLCAnUmVxdWVzdCcsICdSZXNwb25zZScsICdIZWFkZXJzJ10ubWFwKGtpbmRPZlRlc3QpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBvYmplY3Qga2V5c1xuICAgIGNvbnN0IGtleXMgPSBhbGxPd25LZXlzID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKSA6IE9iamVjdC5rZXlzKG9iaik7XG4gICAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGtleTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2tleV0sIGtleSwgb2JqKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmosIGtleSkge1xuICBrZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIGxldCBfa2V5O1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIF9rZXkgPSBrZXlzW2ldO1xuICAgIGlmIChrZXkgPT09IF9rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgcmV0dXJuIF9rZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5jb25zdCBfZ2xvYmFsID0gKCgpID0+IHtcbiAgLyplc2xpbnQgbm8tdW5kZWY6MCovXG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbFRoaXM7XG4gIHJldHVybiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpXG59KSgpO1xuXG5jb25zdCBpc0NvbnRleHREZWZpbmVkID0gKGNvbnRleHQpID0+ICFpc1VuZGVmaW5lZChjb250ZXh0KSAmJiBjb250ZXh0ICE9PSBfZ2xvYmFsO1xuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXN1bHQgb2YgYWxsIG1lcmdlIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoLyogb2JqMSwgb2JqMiwgb2JqMywgLi4uICovKSB7XG4gIGNvbnN0IHtjYXNlbGVzc30gPSBpc0NvbnRleHREZWZpbmVkKHRoaXMpICYmIHRoaXMgfHwge307XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBjb25zdCBhc3NpZ25WYWx1ZSA9ICh2YWwsIGtleSkgPT4ge1xuICAgIGNvbnN0IHRhcmdldEtleSA9IGNhc2VsZXNzICYmIGZpbmRLZXkocmVzdWx0LCBrZXkpIHx8IGtleTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChyZXN1bHRbdGFyZ2V0S2V5XSkgJiYgaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHJlc3VsdFt0YXJnZXRLZXldLCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IG1lcmdlKHt9LCB2YWwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbC5zbGljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRbdGFyZ2V0S2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuXG4vKiBDaGVja2luZyBpZiB0aGUga2luZE9mVGVzdCBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gSFRNTEZvcm1FbGVtZW50LiAqL1xuY29uc3QgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG5jb25zdCB0b0NhbWVsQ2FzZSA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLFxuICAgIGZ1bmN0aW9uIHJlcGxhY2VyKG0sIHAxLCBwMikge1xuICAgICAgcmV0dXJuIHAxLnRvVXBwZXJDYXNlKCkgKyBwMjtcbiAgICB9XG4gICk7XG59O1xuXG4vKiBDcmVhdGluZyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjaGVjayBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuICovXG5jb25zdCBoYXNPd25Qcm9wZXJ0eSA9ICgoe2hhc093blByb3BlcnR5fSkgPT4gKG9iaiwgcHJvcCkgPT4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKShPYmplY3QucHJvdG90eXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUmVnRXhwID0ga2luZE9mVGVzdCgnUmVnRXhwJyk7XG5cbmNvbnN0IHJlZHVjZURlc2NyaXB0b3JzID0gKG9iaiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaik7XG4gIGNvbnN0IHJlZHVjZWREZXNjcmlwdG9ycyA9IHt9O1xuXG4gIGZvckVhY2goZGVzY3JpcHRvcnMsIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgbGV0IHJldDtcbiAgICBpZiAoKHJldCA9IHJlZHVjZXIoZGVzY3JpcHRvciwgbmFtZSwgb2JqKSkgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSByZXQgfHwgZGVzY3JpcHRvcjtcbiAgICB9XG4gIH0pO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iaiwgcmVkdWNlZERlc2NyaXB0b3JzKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBpc0FycmF5KGFycmF5T3JTdHJpbmcpID8gZGVmaW5lKGFycmF5T3JTdHJpbmcpIDogZGVmaW5lKFN0cmluZyhhcnJheU9yU3RyaW5nKS5zcGxpdChkZWxpbWl0ZXIpKTtcblxuICByZXR1cm4gb2JqO1xufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUgPSArdmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuLy8gb3JpZ2luYWwgY29kZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RpZ2l0YWxCcmFpbkpTL0F4aW9zUHJvbWlzZS9ibG9iLzE2ZGVhYjEzNzEwZWMwOTc3OTkyMjEzMWYzZmE1OTU0MzIwZjgzYWIvbGliL3V0aWxzLmpzI0wxMS1MMzRcblxuY29uc3QgX3NldEltbWVkaWF0ZSA9ICgoc2V0SW1tZWRpYXRlU3VwcG9ydGVkLCBwb3N0TWVzc2FnZVN1cHBvcnRlZCkgPT4ge1xuICBpZiAoc2V0SW1tZWRpYXRlU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZTtcbiAgfVxuXG4gIHJldHVybiBwb3N0TWVzc2FnZVN1cHBvcnRlZCA/ICgodG9rZW4sIGNhbGxiYWNrcykgPT4ge1xuICAgIF9nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKHtzb3VyY2UsIGRhdGF9KSA9PiB7XG4gICAgICBpZiAoc291cmNlID09PSBfZ2xvYmFsICYmIGRhdGEgPT09IHRva2VuKSB7XG4gICAgICAgIGNhbGxiYWNrcy5sZW5ndGggJiYgY2FsbGJhY2tzLnNoaWZ0KCkoKTtcbiAgICAgIH1cbiAgICB9LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gKGNiKSA9PiB7XG4gICAgICBjYWxsYmFja3MucHVzaChjYik7XG4gICAgICBfZ2xvYmFsLnBvc3RNZXNzYWdlKHRva2VuLCBcIipcIik7XG4gICAgfVxuICB9KShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsIFtdKSA6IChjYikgPT4gc2V0VGltZW91dChjYik7XG59KShcbiAgdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgaXNGdW5jdGlvbihfZ2xvYmFsLnBvc3RNZXNzYWdlKVxuKTtcblxuY29uc3QgYXNhcCA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayAhPT0gJ3VuZGVmaW5lZCcgP1xuICBxdWV1ZU1pY3JvdGFzay5iaW5kKF9nbG9iYWwpIDogKCB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5uZXh0VGljayB8fCBfc2V0SW1tZWRpYXRlKTtcblxuLy8gKioqKioqKioqKioqKioqKioqKioqXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUmVhZGFibGVTdHJlYW0sXG4gIGlzUmVxdWVzdCxcbiAgaXNSZXNwb25zZSxcbiAgaXNIZWFkZXJzLFxuICBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlLFxuICBpc0ZpbGUsXG4gIGlzQmxvYixcbiAgaXNSZWdFeHAsXG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNUeXBlZEFycmF5LFxuICBpc0ZpbGVMaXN0LFxuICBmb3JFYWNoLFxuICBtZXJnZSxcbiAgZXh0ZW5kLFxuICB0cmltLFxuICBzdHJpcEJPTSxcbiAgaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdCxcbiAga2luZE9mLFxuICBraW5kT2ZUZXN0LFxuICBlbmRzV2l0aCxcbiAgdG9BcnJheSxcbiAgZm9yRWFjaEVudHJ5LFxuICBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHksXG4gIGhhc093blByb3A6IGhhc093blByb3BlcnR5LCAvLyBhbiBhbGlhcyB0byBhdm9pZCBFU0xpbnQgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIGRldGVjdGlvblxuICByZWR1Y2VEZXNjcmlwdG9ycyxcbiAgZnJlZXplTWV0aG9kcyxcbiAgdG9PYmplY3RTZXQsXG4gIHRvQ2FtZWxDYXNlLFxuICBub29wLFxuICB0b0Zpbml0ZU51bWJlcixcbiAgZmluZEtleSxcbiAgZ2xvYmFsOiBfZ2xvYmFsLFxuICBpc0NvbnRleHREZWZpbmVkLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZSxcbiAgc2V0SW1tZWRpYXRlOiBfc2V0SW1tZWRpYXRlLFxuICBhc2FwXG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/axios/lib/utils.js\n")); + +/***/ }) + +}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } +/******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"); }); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ _N_E = __webpack_exports__; +/******/ } +]); \ No newline at end of file diff --git a/frontend/.next/static/chunks/main-app.js b/frontend/.next/static/chunks/main-app.js new file mode 100644 index 000000000..0ee2bb54e --- /dev/null +++ b/frontend/.next/static/chunks/main-app.js @@ -0,0 +1,1893 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["main-app"],{ + +/***/ "(app-pages-browser)/./node_modules/next/dist/build/deployment-id.js": +/*!*******************************************************!*\ + !*** ./node_modules/next/dist/build/deployment-id.js ***! + \*******************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getDeploymentIdQueryOrEmptyString\", ({\n enumerable: true,\n get: function() {\n return getDeploymentIdQueryOrEmptyString;\n }\n}));\nfunction getDeploymentIdQueryOrEmptyString() {\n if (false) {}\n return \"\";\n}\n\n//# sourceMappingURL=deployment-id.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvZGVwbG95bWVudC1pZC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLHFFQUFvRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0EsUUFBUSxLQUE4QixFQUFFLEVBRW5DO0FBQ0w7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL2RlcGxveW1lbnQtaWQuanM/ZTc2MiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZ1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSUQpIHtcbiAgICAgICAgcmV0dXJuIGA/ZHBsPSR7cHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEfWA7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXBsb3ltZW50LWlkLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/deployment-id.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/build/polyfills/polyfill-module.js": +/*!*******************************************************************!*\ + !*** ./node_modules/next/dist/build/polyfills/polyfill-module.js ***! + \*******************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("\"trimStart\"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),\"trimEnd\"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),\"description\"in Symbol.prototype||Object.defineProperty(Symbol.prototype,\"description\",{configurable:!0,get:function(){var t=/\\((.*)\\)/.exec(this.toString());return t?t[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(t,r){return r=this.concat.apply([],this),t>1&&r.some(Array.isArray)?r.flat(t-1):r},Array.prototype.flatMap=function(t,r){return this.map(t,r).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(t){if(\"function\"!=typeof t)return this.then(t,t);var r=this.constructor||Promise;return this.then(function(n){return r.resolve(t()).then(function(){return n})},function(n){return r.resolve(t()).then(function(){throw n})})}),Object.fromEntries||(Object.fromEntries=function(t){return Array.from(t).reduce(function(t,r){return t[r[0]]=r[1],t},{})}),Array.prototype.at||(Array.prototype.at=function(t){var r=Math.trunc(t)||0;if(r<0&&(r+=this.length),!(r<0||r>=this.length))return this[r]});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3BvbHlmaWxsLW1vZHVsZS5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtUUFBbVEsK0JBQStCLHVDQUF1QyxzQkFBc0IsNERBQTRELDZFQUE2RSx1Q0FBdUMsNEJBQTRCLG9FQUFvRSw4Q0FBOEMsZ0NBQWdDLDZCQUE2QixzQ0FBc0MsU0FBUyxFQUFFLGFBQWEsc0NBQXNDLFFBQVEsRUFBRSxFQUFFLHNEQUFzRCwwQ0FBMEMsc0JBQXNCLEdBQUcsRUFBRSxzREFBc0QsdUJBQXVCLCtEQUErRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3BvbHlmaWxscy9wb2x5ZmlsbC1tb2R1bGUuanM/MjBhMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInRyaW1TdGFydFwiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbVN0YXJ0PVN0cmluZy5wcm90b3R5cGUudHJpbUxlZnQpLFwidHJpbUVuZFwiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbUVuZD1TdHJpbmcucHJvdG90eXBlLnRyaW1SaWdodCksXCJkZXNjcmlwdGlvblwiaW4gU3ltYm9sLnByb3RvdHlwZXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsXCJkZXNjcmlwdGlvblwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9L1xcKCguKilcXCkvLmV4ZWModGhpcy50b1N0cmluZygpKTtyZXR1cm4gdD90WzFdOnZvaWQgMH19KSxBcnJheS5wcm90b3R5cGUuZmxhdHx8KEFycmF5LnByb3RvdHlwZS5mbGF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIHI9dGhpcy5jb25jYXQuYXBwbHkoW10sdGhpcyksdD4xJiZyLnNvbWUoQXJyYXkuaXNBcnJheSk/ci5mbGF0KHQtMSk6cn0sQXJyYXkucHJvdG90eXBlLmZsYXRNYXA9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5tYXAodCxyKS5mbGF0KCl9KSxQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5fHwoUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXJldHVybiB0aGlzLnRoZW4odCx0KTt2YXIgcj10aGlzLmNvbnN0cnVjdG9yfHxQcm9taXNlO3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbihuKXtyZXR1cm4gci5yZXNvbHZlKHQoKSkudGhlbihmdW5jdGlvbigpe3Rocm93IG59KX0pfSksT2JqZWN0LmZyb21FbnRyaWVzfHwoT2JqZWN0LmZyb21FbnRyaWVzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5mcm9tKHQpLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiB0W3JbMF1dPXJbMV0sdH0se30pfSksQXJyYXkucHJvdG90eXBlLmF0fHwoQXJyYXkucHJvdG90eXBlLmF0PWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgudHJ1bmModCl8fDA7aWYocjwwJiYocis9dGhpcy5sZW5ndGgpLCEocjwwfHxyPj10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXNbcl19KTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/polyfills/polyfill-module.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js ***! + \********************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n/**\n * MIT License\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n// This file is copied from the Metro JavaScript bundler, with minor tweaks for\n// webpack 4 compatibility.\n//\n// https://github.com/facebook/metro/blob/d6b9685c730d0d63577db40f41369157f28dfa3a/packages/metro/src/lib/polyfills/require.js\nconst runtime_1 = __importDefault(__webpack_require__(/*! next/dist/compiled/react-refresh/runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/runtime.js\"));\nfunction isSafeExport(key) {\n return (key === '__esModule' ||\n key === '__N_SSG' ||\n key === '__N_SSP' ||\n // TODO: remove this key from page config instead of allow listing it\n key === 'config');\n}\nfunction registerExportsForReactRefresh(moduleExports, moduleID) {\n runtime_1.default.register(moduleExports, moduleID + ' %exports%');\n if (moduleExports == null || typeof moduleExports !== 'object') {\n // Exit if we can't iterate over exports.\n // (This is important for legacy environments.)\n return;\n }\n for (var key in moduleExports) {\n if (isSafeExport(key)) {\n continue;\n }\n try {\n var exportValue = moduleExports[key];\n }\n catch (_a) {\n // This might fail due to circular dependencies\n continue;\n }\n var typeID = moduleID + ' %exports% ' + key;\n runtime_1.default.register(exportValue, typeID);\n }\n}\nfunction getRefreshBoundarySignature(moduleExports) {\n var signature = [];\n signature.push(runtime_1.default.getFamilyByType(moduleExports));\n if (moduleExports == null || typeof moduleExports !== 'object') {\n // Exit if we can't iterate over exports.\n // (This is important for legacy environments.)\n return signature;\n }\n for (var key in moduleExports) {\n if (isSafeExport(key)) {\n continue;\n }\n try {\n var exportValue = moduleExports[key];\n }\n catch (_a) {\n // This might fail due to circular dependencies\n continue;\n }\n signature.push(key);\n signature.push(runtime_1.default.getFamilyByType(exportValue));\n }\n return signature;\n}\nfunction isReactRefreshBoundary(moduleExports) {\n if (runtime_1.default.isLikelyComponentType(moduleExports)) {\n return true;\n }\n if (moduleExports == null || typeof moduleExports !== 'object') {\n // Exit if we can't iterate over exports.\n return false;\n }\n var hasExports = false;\n var areAllExportsComponents = true;\n for (var key in moduleExports) {\n hasExports = true;\n if (isSafeExport(key)) {\n continue;\n }\n try {\n var exportValue = moduleExports[key];\n }\n catch (_a) {\n // This might fail due to circular dependencies\n return false;\n }\n if (!runtime_1.default.isLikelyComponentType(exportValue)) {\n areAllExportsComponents = false;\n }\n }\n return hasExports && areAllExportsComponents;\n}\nfunction shouldInvalidateReactRefreshBoundary(prevSignature, nextSignature) {\n if (prevSignature.length !== nextSignature.length) {\n return true;\n }\n for (var i = 0; i < nextSignature.length; i++) {\n if (prevSignature[i] !== nextSignature[i]) {\n return true;\n }\n }\n return false;\n}\nvar isUpdateScheduled = false;\n// This function aggregates updates from multiple modules into a single React Refresh call.\nfunction scheduleUpdate() {\n if (isUpdateScheduled) {\n return;\n }\n isUpdateScheduled = true;\n function canApplyUpdate(status) {\n return status === 'idle';\n }\n function applyUpdate() {\n isUpdateScheduled = false;\n try {\n runtime_1.default.performReactRefresh();\n }\n catch (err) {\n console.warn('Warning: Failed to re-render. We will retry on the next Fast Refresh event.\\n' +\n err);\n }\n }\n if (canApplyUpdate(module.hot.status())) {\n // Apply update on the next tick.\n Promise.resolve().then(() => {\n applyUpdate();\n });\n return;\n }\n const statusHandler = (status) => {\n if (canApplyUpdate(status)) {\n module.hot.removeStatusHandler(statusHandler);\n applyUpdate();\n }\n };\n // Apply update once the HMR runtime's status is idle.\n module.hot.addStatusHandler(statusHandler);\n}\n// Needs to be compatible with IE11\nexports[\"default\"] = {\n registerExportsForReactRefresh: registerExportsForReactRefresh,\n isReactRefreshBoundary: isReactRefreshBoundary,\n shouldInvalidateReactRefreshBoundary: shouldInvalidateReactRefreshBoundary,\n getRefreshBoundarySignature: getRefreshBoundarySignature,\n scheduleUpdate: scheduleUpdate,\n};\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvQG5leHQvcmVhY3QtcmVmcmVzaC11dGlscy9kaXN0L2ludGVybmFsL2hlbHBlcnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsbUJBQU8sQ0FBQyxnSUFBMEM7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsVUFBVTtBQUNqQztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFVBQVU7QUFDZDtBQUNBO0FBQ0Esa0JBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL0BuZXh0L3JlYWN0LXJlZnJlc2gtdXRpbHMvZGlzdC9pbnRlcm5hbC9oZWxwZXJzLmpzP2Q3ZDIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8gVGhpcyBmaWxlIGlzIGNvcGllZCBmcm9tIHRoZSBNZXRybyBKYXZhU2NyaXB0IGJ1bmRsZXIsIHdpdGggbWlub3IgdHdlYWtzIGZvclxuLy8gd2VicGFjayA0IGNvbXBhdGliaWxpdHkuXG4vL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL21ldHJvL2Jsb2IvZDZiOTY4NWM3MzBkMGQ2MzU3N2RiNDBmNDEzNjkxNTdmMjhkZmEzYS9wYWNrYWdlcy9tZXRyby9zcmMvbGliL3BvbHlmaWxscy9yZXF1aXJlLmpzXG5jb25zdCBydW50aW1lXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdC1yZWZyZXNoL3J1bnRpbWVcIikpO1xuZnVuY3Rpb24gaXNTYWZlRXhwb3J0KGtleSkge1xuICAgIHJldHVybiAoa2V5ID09PSAnX19lc01vZHVsZScgfHxcbiAgICAgICAga2V5ID09PSAnX19OX1NTRycgfHxcbiAgICAgICAga2V5ID09PSAnX19OX1NTUCcgfHxcbiAgICAgICAgLy8gVE9ETzogcmVtb3ZlIHRoaXMga2V5IGZyb20gcGFnZSBjb25maWcgaW5zdGVhZCBvZiBhbGxvdyBsaXN0aW5nIGl0XG4gICAgICAgIGtleSA9PT0gJ2NvbmZpZycpO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJFeHBvcnRzRm9yUmVhY3RSZWZyZXNoKG1vZHVsZUV4cG9ydHMsIG1vZHVsZUlEKSB7XG4gICAgcnVudGltZV8xLmRlZmF1bHQucmVnaXN0ZXIobW9kdWxlRXhwb3J0cywgbW9kdWxlSUQgKyAnICVleHBvcnRzJScpO1xuICAgIGlmIChtb2R1bGVFeHBvcnRzID09IG51bGwgfHwgdHlwZW9mIG1vZHVsZUV4cG9ydHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIEV4aXQgaWYgd2UgY2FuJ3QgaXRlcmF0ZSBvdmVyIGV4cG9ydHMuXG4gICAgICAgIC8vIChUaGlzIGlzIGltcG9ydGFudCBmb3IgbGVnYWN5IGVudmlyb25tZW50cy4pXG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yICh2YXIga2V5IGluIG1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgaWYgKGlzU2FmZUV4cG9ydChrZXkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGV4cG9ydFZhbHVlID0gbW9kdWxlRXhwb3J0c1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBmYWlsIGR1ZSB0byBjaXJjdWxhciBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0eXBlSUQgPSBtb2R1bGVJRCArICcgJWV4cG9ydHMlICcgKyBrZXk7XG4gICAgICAgIHJ1bnRpbWVfMS5kZWZhdWx0LnJlZ2lzdGVyKGV4cG9ydFZhbHVlLCB0eXBlSUQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFJlZnJlc2hCb3VuZGFyeVNpZ25hdHVyZShtb2R1bGVFeHBvcnRzKSB7XG4gICAgdmFyIHNpZ25hdHVyZSA9IFtdO1xuICAgIHNpZ25hdHVyZS5wdXNoKHJ1bnRpbWVfMS5kZWZhdWx0LmdldEZhbWlseUJ5VHlwZShtb2R1bGVFeHBvcnRzKSk7XG4gICAgaWYgKG1vZHVsZUV4cG9ydHMgPT0gbnVsbCB8fCB0eXBlb2YgbW9kdWxlRXhwb3J0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gRXhpdCBpZiB3ZSBjYW4ndCBpdGVyYXRlIG92ZXIgZXhwb3J0cy5cbiAgICAgICAgLy8gKFRoaXMgaXMgaW1wb3J0YW50IGZvciBsZWdhY3kgZW52aXJvbm1lbnRzLilcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZTtcbiAgICB9XG4gICAgZm9yICh2YXIga2V5IGluIG1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgaWYgKGlzU2FmZUV4cG9ydChrZXkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGV4cG9ydFZhbHVlID0gbW9kdWxlRXhwb3J0c1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBmYWlsIGR1ZSB0byBjaXJjdWxhciBkZXBlbmRlbmNpZXNcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHNpZ25hdHVyZS5wdXNoKGtleSk7XG4gICAgICAgIHNpZ25hdHVyZS5wdXNoKHJ1bnRpbWVfMS5kZWZhdWx0LmdldEZhbWlseUJ5VHlwZShleHBvcnRWYWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gc2lnbmF0dXJlO1xufVxuZnVuY3Rpb24gaXNSZWFjdFJlZnJlc2hCb3VuZGFyeShtb2R1bGVFeHBvcnRzKSB7XG4gICAgaWYgKHJ1bnRpbWVfMS5kZWZhdWx0LmlzTGlrZWx5Q29tcG9uZW50VHlwZShtb2R1bGVFeHBvcnRzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG1vZHVsZUV4cG9ydHMgPT0gbnVsbCB8fCB0eXBlb2YgbW9kdWxlRXhwb3J0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gRXhpdCBpZiB3ZSBjYW4ndCBpdGVyYXRlIG92ZXIgZXhwb3J0cy5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgaGFzRXhwb3J0cyA9IGZhbHNlO1xuICAgIHZhciBhcmVBbGxFeHBvcnRzQ29tcG9uZW50cyA9IHRydWU7XG4gICAgZm9yICh2YXIga2V5IGluIG1vZHVsZUV4cG9ydHMpIHtcbiAgICAgICAgaGFzRXhwb3J0cyA9IHRydWU7XG4gICAgICAgIGlmIChpc1NhZmVFeHBvcnQoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBleHBvcnRWYWx1ZSA9IG1vZHVsZUV4cG9ydHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgZmFpbCBkdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFydW50aW1lXzEuZGVmYXVsdC5pc0xpa2VseUNvbXBvbmVudFR5cGUoZXhwb3J0VmFsdWUpKSB7XG4gICAgICAgICAgICBhcmVBbGxFeHBvcnRzQ29tcG9uZW50cyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoYXNFeHBvcnRzICYmIGFyZUFsbEV4cG9ydHNDb21wb25lbnRzO1xufVxuZnVuY3Rpb24gc2hvdWxkSW52YWxpZGF0ZVJlYWN0UmVmcmVzaEJvdW5kYXJ5KHByZXZTaWduYXR1cmUsIG5leHRTaWduYXR1cmUpIHtcbiAgICBpZiAocHJldlNpZ25hdHVyZS5sZW5ndGggIT09IG5leHRTaWduYXR1cmUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5leHRTaWduYXR1cmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHByZXZTaWduYXR1cmVbaV0gIT09IG5leHRTaWduYXR1cmVbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbnZhciBpc1VwZGF0ZVNjaGVkdWxlZCA9IGZhbHNlO1xuLy8gVGhpcyBmdW5jdGlvbiBhZ2dyZWdhdGVzIHVwZGF0ZXMgZnJvbSBtdWx0aXBsZSBtb2R1bGVzIGludG8gYSBzaW5nbGUgUmVhY3QgUmVmcmVzaCBjYWxsLlxuZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGUoKSB7XG4gICAgaWYgKGlzVXBkYXRlU2NoZWR1bGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXNVcGRhdGVTY2hlZHVsZWQgPSB0cnVlO1xuICAgIGZ1bmN0aW9uIGNhbkFwcGx5VXBkYXRlKHN0YXR1cykge1xuICAgICAgICByZXR1cm4gc3RhdHVzID09PSAnaWRsZSc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGx5VXBkYXRlKCkge1xuICAgICAgICBpc1VwZGF0ZVNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcnVudGltZV8xLmRlZmF1bHQucGVyZm9ybVJlYWN0UmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogRmFpbGVkIHRvIHJlLXJlbmRlci4gV2Ugd2lsbCByZXRyeSBvbiB0aGUgbmV4dCBGYXN0IFJlZnJlc2ggZXZlbnQuXFxuJyArXG4gICAgICAgICAgICAgICAgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2FuQXBwbHlVcGRhdGUobW9kdWxlLmhvdC5zdGF0dXMoKSkpIHtcbiAgICAgICAgLy8gQXBwbHkgdXBkYXRlIG9uIHRoZSBuZXh0IHRpY2suXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgYXBwbHlVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3RhdHVzSGFuZGxlciA9IChzdGF0dXMpID0+IHtcbiAgICAgICAgaWYgKGNhbkFwcGx5VXBkYXRlKHN0YXR1cykpIHtcbiAgICAgICAgICAgIG1vZHVsZS5ob3QucmVtb3ZlU3RhdHVzSGFuZGxlcihzdGF0dXNIYW5kbGVyKTtcbiAgICAgICAgICAgIGFwcGx5VXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIEFwcGx5IHVwZGF0ZSBvbmNlIHRoZSBITVIgcnVudGltZSdzIHN0YXR1cyBpcyBpZGxlLlxuICAgIG1vZHVsZS5ob3QuYWRkU3RhdHVzSGFuZGxlcihzdGF0dXNIYW5kbGVyKTtcbn1cbi8vIE5lZWRzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBJRTExXG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gICAgcmVnaXN0ZXJFeHBvcnRzRm9yUmVhY3RSZWZyZXNoOiByZWdpc3RlckV4cG9ydHNGb3JSZWFjdFJlZnJlc2gsXG4gICAgaXNSZWFjdFJlZnJlc2hCb3VuZGFyeTogaXNSZWFjdFJlZnJlc2hCb3VuZGFyeSxcbiAgICBzaG91bGRJbnZhbGlkYXRlUmVhY3RSZWZyZXNoQm91bmRhcnk6IHNob3VsZEludmFsaWRhdGVSZWFjdFJlZnJlc2hCb3VuZGFyeSxcbiAgICBnZXRSZWZyZXNoQm91bmRhcnlTaWduYXR1cmU6IGdldFJlZnJlc2hCb3VuZGFyeVNpZ25hdHVyZSxcbiAgICBzY2hlZHVsZVVwZGF0ZTogc2NoZWR1bGVVcGRhdGUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVscGVycy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js ***! + \***********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst runtime_1 = __importDefault(__webpack_require__(/*! next/dist/compiled/react-refresh/runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/runtime.js\"));\nconst helpers_1 = __importDefault(__webpack_require__(/*! ./internal/helpers */ \"(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js\"));\n// Hook into ReactDOM initialization\nruntime_1.default.injectIntoGlobalHook(self);\n// Register global helpers\nself.$RefreshHelpers$ = helpers_1.default;\n// Register a helper for module execution interception\nself.$RefreshInterceptModuleExecution$ = function (webpackModuleId) {\n var prevRefreshReg = self.$RefreshReg$;\n var prevRefreshSig = self.$RefreshSig$;\n self.$RefreshReg$ = function (type, id) {\n runtime_1.default.register(type, webpackModuleId + ' ' + id);\n };\n self.$RefreshSig$ = runtime_1.default.createSignatureFunctionForTransform;\n // Modeled after `useEffect` cleanup pattern:\n // https://react.dev/learn/synchronizing-with-effects#step-3-add-cleanup-if-needed\n return function () {\n self.$RefreshReg$ = prevRefreshReg;\n self.$RefreshSig$ = prevRefreshSig;\n };\n};\n//# sourceMappingURL=runtime.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvQG5leHQvcmVhY3QtcmVmcmVzaC11dGlscy9kaXN0L3J1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQ0FBa0MsbUJBQU8sQ0FBQyxnSUFBMEM7QUFDcEYsa0NBQWtDLG1CQUFPLENBQUMsb0lBQW9CO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9AbmV4dC9yZWFjdC1yZWZyZXNoLXV0aWxzL2Rpc3QvcnVudGltZS5qcz8xNmMxIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgcnVudGltZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtcmVmcmVzaC9ydW50aW1lXCIpKTtcbmNvbnN0IGhlbHBlcnNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9pbnRlcm5hbC9oZWxwZXJzXCIpKTtcbi8vIEhvb2sgaW50byBSZWFjdERPTSBpbml0aWFsaXphdGlvblxucnVudGltZV8xLmRlZmF1bHQuaW5qZWN0SW50b0dsb2JhbEhvb2soc2VsZik7XG4vLyBSZWdpc3RlciBnbG9iYWwgaGVscGVyc1xuc2VsZi4kUmVmcmVzaEhlbHBlcnMkID0gaGVscGVyc18xLmRlZmF1bHQ7XG4vLyBSZWdpc3RlciBhIGhlbHBlciBmb3IgbW9kdWxlIGV4ZWN1dGlvbiBpbnRlcmNlcHRpb25cbnNlbGYuJFJlZnJlc2hJbnRlcmNlcHRNb2R1bGVFeGVjdXRpb24kID0gZnVuY3Rpb24gKHdlYnBhY2tNb2R1bGVJZCkge1xuICAgIHZhciBwcmV2UmVmcmVzaFJlZyA9IHNlbGYuJFJlZnJlc2hSZWckO1xuICAgIHZhciBwcmV2UmVmcmVzaFNpZyA9IHNlbGYuJFJlZnJlc2hTaWckO1xuICAgIHNlbGYuJFJlZnJlc2hSZWckID0gZnVuY3Rpb24gKHR5cGUsIGlkKSB7XG4gICAgICAgIHJ1bnRpbWVfMS5kZWZhdWx0LnJlZ2lzdGVyKHR5cGUsIHdlYnBhY2tNb2R1bGVJZCArICcgJyArIGlkKTtcbiAgICB9O1xuICAgIHNlbGYuJFJlZnJlc2hTaWckID0gcnVudGltZV8xLmRlZmF1bHQuY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm07XG4gICAgLy8gTW9kZWxlZCBhZnRlciBgdXNlRWZmZWN0YCBjbGVhbnVwIHBhdHRlcm46XG4gICAgLy8gaHR0cHM6Ly9yZWFjdC5kZXYvbGVhcm4vc3luY2hyb25pemluZy13aXRoLWVmZmVjdHMjc3RlcC0zLWFkZC1jbGVhbnVwLWlmLW5lZWRlZFxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuJFJlZnJlc2hSZWckID0gcHJldlJlZnJlc2hSZWc7XG4gICAgICAgIHNlbGYuJFJlZnJlc2hTaWckID0gcHJldlJlZnJlc2hTaWc7XG4gICAgfTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ydW50aW1lLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/anser/index.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/compiled/anser/index.js ***! + \********************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";var e={211:e=>{var r=function(){function defineProperties(e,r){for(var n=0;n<r.length;n++){var s=r[n];s.enumerable=s.enumerable||false;s.configurable=true;if(\"value\"in s)s.writable=true;Object.defineProperty(e,s.key,s)}}return function(e,r,n){if(r)defineProperties(e.prototype,r);if(n)defineProperties(e,n);return e}}();function _classCallCheck(e,r){if(!(e instanceof r)){throw new TypeError(\"Cannot call a class as a function\")}}var n=[[{color:\"0, 0, 0\",class:\"ansi-black\"},{color:\"187, 0, 0\",class:\"ansi-red\"},{color:\"0, 187, 0\",class:\"ansi-green\"},{color:\"187, 187, 0\",class:\"ansi-yellow\"},{color:\"0, 0, 187\",class:\"ansi-blue\"},{color:\"187, 0, 187\",class:\"ansi-magenta\"},{color:\"0, 187, 187\",class:\"ansi-cyan\"},{color:\"255,255,255\",class:\"ansi-white\"}],[{color:\"85, 85, 85\",class:\"ansi-bright-black\"},{color:\"255, 85, 85\",class:\"ansi-bright-red\"},{color:\"0, 255, 0\",class:\"ansi-bright-green\"},{color:\"255, 255, 85\",class:\"ansi-bright-yellow\"},{color:\"85, 85, 255\",class:\"ansi-bright-blue\"},{color:\"255, 85, 255\",class:\"ansi-bright-magenta\"},{color:\"85, 255, 255\",class:\"ansi-bright-cyan\"},{color:\"255, 255, 255\",class:\"ansi-bright-white\"}]];var s=function(){r(Anser,null,[{key:\"escapeForHtml\",value:function escapeForHtml(e){return(new Anser).escapeForHtml(e)}},{key:\"linkify\",value:function linkify(e){return(new Anser).linkify(e)}},{key:\"ansiToHtml\",value:function ansiToHtml(e,r){return(new Anser).ansiToHtml(e,r)}},{key:\"ansiToJson\",value:function ansiToJson(e,r){return(new Anser).ansiToJson(e,r)}},{key:\"ansiToText\",value:function ansiToText(e){return(new Anser).ansiToText(e)}}]);function Anser(){_classCallCheck(this,Anser);this.fg=this.bg=this.fg_truecolor=this.bg_truecolor=null;this.bright=0}r(Anser,[{key:\"setupPalette\",value:function setupPalette(){this.PALETTE_COLORS=[];for(var e=0;e<2;++e){for(var r=0;r<8;++r){this.PALETTE_COLORS.push(n[e][r].color)}}var s=[0,95,135,175,215,255];var i=function format(e,r,n){return s[e]+\", \"+s[r]+\", \"+s[n]};var t=void 0,o=void 0,a=void 0;for(var l=0;l<6;++l){for(var c=0;c<6;++c){for(var u=0;u<6;++u){this.PALETTE_COLORS.push(i(l,c,u))}}}var f=8;for(var h=0;h<24;++h,f+=10){this.PALETTE_COLORS.push(i(f,f,f))}}},{key:\"escapeForHtml\",value:function escapeForHtml(e){return e.replace(/[&<>]/gm,(function(e){return e==\"&\"?\"&\":e==\"<\"?\"<\":e==\">\"?\">\":\"\"}))}},{key:\"linkify\",value:function linkify(e){return e.replace(/(https?:\\/\\/[^\\s]+)/gm,(function(e){return'<a href=\"'+e+'\">'+e+\"</a>\"}))}},{key:\"ansiToHtml\",value:function ansiToHtml(e,r){return this.process(e,r,true)}},{key:\"ansiToJson\",value:function ansiToJson(e,r){r=r||{};r.json=true;r.clearLine=false;return this.process(e,r,true)}},{key:\"ansiToText\",value:function ansiToText(e){return this.process(e,{},false)}},{key:\"process\",value:function process(e,r,n){var s=this;var i=this;var t=e.split(/\\033\\[/);var o=t.shift();if(r===undefined||r===null){r={}}r.clearLine=/\\r/.test(e);var a=t.map((function(e){return s.processChunk(e,r,n)}));if(r&&r.json){var l=i.processChunkJson(\"\");l.content=o;l.clearLine=r.clearLine;a.unshift(l);if(r.remove_empty){a=a.filter((function(e){return!e.isEmpty()}))}return a}else{a.unshift(o)}return a.join(\"\")}},{key:\"processChunkJson\",value:function processChunkJson(e,r,s){r=typeof r==\"undefined\"?{}:r;var i=r.use_classes=typeof r.use_classes!=\"undefined\"&&r.use_classes;var t=r.key=i?\"class\":\"color\";var o={content:e,fg:null,bg:null,fg_truecolor:null,bg_truecolor:null,clearLine:r.clearLine,decoration:null,was_processed:false,isEmpty:function isEmpty(){return!o.content}};var a=e.match(/^([!\\x3c-\\x3f]*)([\\d;]*)([\\x20-\\x2c]*[\\x40-\\x7e])([\\s\\S]*)/m);if(!a)return o;var l=o.content=a[4];var c=a[2].split(\";\");if(a[1]!==\"\"||a[3]!==\"m\"){return o}if(!s){return o}var u=this;u.decoration=null;while(c.length>0){var f=c.shift();var h=parseInt(f);if(isNaN(h)||h===0){u.fg=u.bg=u.decoration=null}else if(h===1){u.decoration=\"bold\"}else if(h===2){u.decoration=\"dim\"}else if(h==3){u.decoration=\"italic\"}else if(h==4){u.decoration=\"underline\"}else if(h==5){u.decoration=\"blink\"}else if(h===7){u.decoration=\"reverse\"}else if(h===8){u.decoration=\"hidden\"}else if(h===9){u.decoration=\"strikethrough\"}else if(h==39){u.fg=null}else if(h==49){u.bg=null}else if(h>=30&&h<38){u.fg=n[0][h%10][t]}else if(h>=90&&h<98){u.fg=n[1][h%10][t]}else if(h>=40&&h<48){u.bg=n[0][h%10][t]}else if(h>=100&&h<108){u.bg=n[1][h%10][t]}else if(h===38||h===48){var p=h===38;if(c.length>=1){var g=c.shift();if(g===\"5\"&&c.length>=1){var v=parseInt(c.shift());if(v>=0&&v<=255){if(!i){if(!this.PALETTE_COLORS){u.setupPalette()}if(p){u.fg=this.PALETTE_COLORS[v]}else{u.bg=this.PALETTE_COLORS[v]}}else{var d=v>=16?\"ansi-palette-\"+v:n[v>7?1:0][v%8][\"class\"];if(p){u.fg=d}else{u.bg=d}}}}else if(g===\"2\"&&c.length>=3){var _=parseInt(c.shift());var b=parseInt(c.shift());var y=parseInt(c.shift());if(_>=0&&_<=255&&b>=0&&b<=255&&y>=0&&y<=255){var k=_+\", \"+b+\", \"+y;if(!i){if(p){u.fg=k}else{u.bg=k}}else{if(p){u.fg=\"ansi-truecolor\";u.fg_truecolor=k}else{u.bg=\"ansi-truecolor\";u.bg_truecolor=k}}}}}}}if(u.fg===null&&u.bg===null&&u.decoration===null){return o}else{var T=[];var m=[];var w={};o.fg=u.fg;o.bg=u.bg;o.fg_truecolor=u.fg_truecolor;o.bg_truecolor=u.bg_truecolor;o.decoration=u.decoration;o.was_processed=true;return o}}},{key:\"processChunk\",value:function processChunk(e,r,n){var s=this;var i=this;r=r||{};var t=this.processChunkJson(e,r,n);if(r.json){return t}if(t.isEmpty()){return\"\"}if(!t.was_processed){return t.content}var o=r.use_classes;var a=[];var l=[];var c={};var u=function render_data(e){var r=[];var n=void 0;for(n in e){if(e.hasOwnProperty(n)){r.push(\"data-\"+n+'=\"'+s.escapeForHtml(e[n])+'\"')}}return r.length>0?\" \"+r.join(\" \"):\"\"};if(t.fg){if(o){l.push(t.fg+\"-fg\");if(t.fg_truecolor!==null){c[\"ansi-truecolor-fg\"]=t.fg_truecolor;t.fg_truecolor=null}}else{a.push(\"color:rgb(\"+t.fg+\")\")}}if(t.bg){if(o){l.push(t.bg+\"-bg\");if(t.bg_truecolor!==null){c[\"ansi-truecolor-bg\"]=t.bg_truecolor;t.bg_truecolor=null}}else{a.push(\"background-color:rgb(\"+t.bg+\")\")}}if(t.decoration){if(o){l.push(\"ansi-\"+t.decoration)}else if(t.decoration===\"bold\"){a.push(\"font-weight:bold\")}else if(t.decoration===\"dim\"){a.push(\"opacity:0.5\")}else if(t.decoration===\"italic\"){a.push(\"font-style:italic\")}else if(t.decoration===\"reverse\"){a.push(\"filter:invert(100%)\")}else if(t.decoration===\"hidden\"){a.push(\"visibility:hidden\")}else if(t.decoration===\"strikethrough\"){a.push(\"text-decoration:line-through\")}else{a.push(\"text-decoration:\"+t.decoration)}}if(o){return'<span class=\"'+l.join(\" \")+'\"'+u(c)+\">\"+t.content+\"</span>\"}else{return'<span style=\"'+a.join(\";\")+'\"'+u(c)+\">\"+t.content+\"</span>\"}}}]);return Anser}();e.exports=s}};var r={};function __nccwpck_require__(n){var s=r[n];if(s!==undefined){return s.exports}var i=r[n]={exports:{}};var t=true;try{e[n](i,i.exports,__nccwpck_require__);t=false}finally{if(t)delete r[n]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n=__nccwpck_require__(211);module.exports=n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvYW5zZXIvaW5kZXguanMiLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU0sYUFBYSxPQUFPLFFBQVEsaUJBQWlCLCtCQUErQixZQUFZLFdBQVcsS0FBSyxXQUFXLGlDQUFpQyxvQkFBb0IsK0JBQStCLGtDQUFrQyx1QkFBdUIscUNBQXFDLDJCQUEyQixVQUFVLEdBQUcsOEJBQThCLHNCQUFzQiwwREFBMEQsU0FBUyxtQ0FBbUMsRUFBRSxtQ0FBbUMsRUFBRSxxQ0FBcUMsRUFBRSx3Q0FBd0MsRUFBRSxvQ0FBb0MsRUFBRSx5Q0FBeUMsRUFBRSxzQ0FBc0MsRUFBRSx1Q0FBdUMsSUFBSSw2Q0FBNkMsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxnREFBZ0QsRUFBRSw2Q0FBNkMsRUFBRSxpREFBaUQsRUFBRSw4Q0FBOEMsRUFBRSxnREFBZ0QsR0FBRyxpQkFBaUIsZUFBZSxvREFBb0Qsb0NBQW9DLEVBQUUsd0NBQXdDLDhCQUE4QixFQUFFLGdEQUFnRCxtQ0FBbUMsRUFBRSxnREFBZ0QsbUNBQW1DLEVBQUUsOENBQThDLGlDQUFpQyxHQUFHLGlCQUFpQiw0QkFBNEIseURBQXlELGNBQWMsVUFBVSxpREFBaUQsdUJBQXVCLFlBQVksSUFBSSxLQUFLLFlBQVksSUFBSSxLQUFLLHlDQUF5Qyw2QkFBNkIsNkJBQTZCLGlDQUFpQywrQkFBK0IsWUFBWSxJQUFJLEtBQUssWUFBWSxJQUFJLEtBQUssWUFBWSxJQUFJLEtBQUsscUNBQXFDLFFBQVEsWUFBWSxLQUFLLFdBQVcscUNBQXFDLEVBQUUsb0RBQW9ELHdDQUF3QyxvQkFBb0IsY0FBYyxjQUFjLEtBQUssSUFBSSxFQUFFLHdDQUF3QyxzREFBc0Qsa0NBQWtDLElBQUksRUFBRSxnREFBZ0QsK0JBQStCLEVBQUUsZ0RBQWdELFFBQVEsWUFBWSxrQkFBa0IsK0JBQStCLEVBQUUsOENBQThDLHdCQUF3QixTQUFTLEVBQUUsNENBQTRDLFdBQVcsV0FBVyx3QkFBd0IsZ0JBQWdCLDRCQUE0QixLQUFLLHlCQUF5Qix5QkFBeUIsNkJBQTZCLEdBQUcsY0FBYyw2QkFBNkIsWUFBWSx3QkFBd0IsYUFBYSxtQkFBbUIsd0JBQXdCLG1CQUFtQixHQUFHLFNBQVMsS0FBSyxhQUFhLG1CQUFtQixFQUFFLDhEQUE4RCwwQkFBMEIsR0FBRyxxRUFBcUUsOEJBQThCLE9BQU8sbUpBQW1KLG1CQUFtQixvQ0FBb0MseUNBQXlDLGVBQWUscUJBQXFCLG1CQUFtQixHQUFHLDBCQUEwQixTQUFTLE9BQU8sU0FBUyxXQUFXLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixvQkFBb0IsNEJBQTRCLGVBQWUsb0JBQW9CLGVBQWUsbUJBQW1CLGNBQWMsc0JBQXNCLGNBQWMseUJBQXlCLGNBQWMscUJBQXFCLGVBQWUsdUJBQXVCLGVBQWUsc0JBQXNCLGVBQWUsNkJBQTZCLGVBQWUsVUFBVSxlQUFlLFVBQVUscUJBQXFCLG1CQUFtQixxQkFBcUIsbUJBQW1CLHFCQUFxQixtQkFBbUIsdUJBQXVCLG1CQUFtQix3QkFBd0IsYUFBYSxnQkFBZ0IsZ0JBQWdCLHlCQUF5QiwwQkFBMEIsaUJBQWlCLE9BQU8seUJBQXlCLGlCQUFpQixNQUFNLDRCQUE0QixLQUFLLDZCQUE2QixLQUFLLHVEQUF1RCxNQUFNLE9BQU8sS0FBSyxVQUFVLDhCQUE4QiwwQkFBMEIsMEJBQTBCLDBCQUEwQiw2Q0FBNkMsc0JBQXNCLE9BQU8sTUFBTSxPQUFPLEtBQUssUUFBUSxLQUFLLE1BQU0sc0JBQXNCLGlCQUFpQixLQUFLLHNCQUFzQix1QkFBdUIsa0RBQWtELFNBQVMsS0FBSyxTQUFTLFNBQVMsU0FBUyxVQUFVLFVBQVUsOEJBQThCLDhCQUE4QiwwQkFBMEIscUJBQXFCLFdBQVcsRUFBRSxzREFBc0QsV0FBVyxXQUFXLFFBQVEsbUNBQW1DLFdBQVcsU0FBUyxnQkFBZ0IsU0FBUyxxQkFBcUIsaUJBQWlCLG9CQUFvQixTQUFTLFNBQVMsU0FBUyw4QkFBOEIsU0FBUyxhQUFhLFlBQVksd0JBQXdCLGtEQUFrRCxzQ0FBc0MsU0FBUyxNQUFNLG1CQUFtQiwwQkFBMEIsc0NBQXNDLHFCQUFxQixLQUFLLCtCQUErQixTQUFTLE1BQU0sbUJBQW1CLDBCQUEwQixzQ0FBc0MscUJBQXFCLEtBQUssMENBQTBDLGlCQUFpQixNQUFNLDZCQUE2QiwrQkFBK0IsMkJBQTJCLDhCQUE4QixzQkFBc0IsaUNBQWlDLDRCQUE0QixrQ0FBa0MsOEJBQThCLGlDQUFpQyw0QkFBNEIsd0NBQXdDLHVDQUF1QyxLQUFLLHlDQUF5QyxNQUFNLG1FQUFtRSxLQUFLLCtCQUErQixzQ0FBc0MsR0FBRyxhQUFhLEdBQUcsY0FBYyxTQUFTLGdDQUFnQyxXQUFXLGtCQUFrQixpQkFBaUIsWUFBWSxZQUFZLFdBQVcsSUFBSSxzQ0FBc0MsUUFBUSxRQUFRLGlCQUFpQixpQkFBaUIsbUVBQW1FLFNBQVMsS0FBSywrQkFBK0IsaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvYW5zZXIvaW5kZXguanM/YzMzNSJdLCJzb3VyY2VzQ29udGVudCI6WyIoKCk9PntcInVzZSBzdHJpY3RcIjt2YXIgZT17MjExOmU9Pnt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIHM9cltuXTtzLmVudW1lcmFibGU9cy5lbnVtZXJhYmxlfHxmYWxzZTtzLmNvbmZpZ3VyYWJsZT10cnVlO2lmKFwidmFsdWVcImluIHMpcy53cml0YWJsZT10cnVlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHMua2V5LHMpfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe2lmKHIpZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKTtpZihuKWRlZmluZVByb3BlcnRpZXMoZSxuKTtyZXR1cm4gZX19KCk7ZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGUscil7aWYoIShlIGluc3RhbmNlb2Ygcikpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9fXZhciBuPVtbe2NvbG9yOlwiMCwgMCwgMFwiLGNsYXNzOlwiYW5zaS1ibGFja1wifSx7Y29sb3I6XCIxODcsIDAsIDBcIixjbGFzczpcImFuc2ktcmVkXCJ9LHtjb2xvcjpcIjAsIDE4NywgMFwiLGNsYXNzOlwiYW5zaS1ncmVlblwifSx7Y29sb3I6XCIxODcsIDE4NywgMFwiLGNsYXNzOlwiYW5zaS15ZWxsb3dcIn0se2NvbG9yOlwiMCwgMCwgMTg3XCIsY2xhc3M6XCJhbnNpLWJsdWVcIn0se2NvbG9yOlwiMTg3LCAwLCAxODdcIixjbGFzczpcImFuc2ktbWFnZW50YVwifSx7Y29sb3I6XCIwLCAxODcsIDE4N1wiLGNsYXNzOlwiYW5zaS1jeWFuXCJ9LHtjb2xvcjpcIjI1NSwyNTUsMjU1XCIsY2xhc3M6XCJhbnNpLXdoaXRlXCJ9XSxbe2NvbG9yOlwiODUsIDg1LCA4NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtYmxhY2tcIn0se2NvbG9yOlwiMjU1LCA4NSwgODVcIixjbGFzczpcImFuc2ktYnJpZ2h0LXJlZFwifSx7Y29sb3I6XCIwLCAyNTUsIDBcIixjbGFzczpcImFuc2ktYnJpZ2h0LWdyZWVuXCJ9LHtjb2xvcjpcIjI1NSwgMjU1LCA4NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQteWVsbG93XCJ9LHtjb2xvcjpcIjg1LCA4NSwgMjU1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1ibHVlXCJ9LHtjb2xvcjpcIjI1NSwgODUsIDI1NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtbWFnZW50YVwifSx7Y29sb3I6XCI4NSwgMjU1LCAyNTVcIixjbGFzczpcImFuc2ktYnJpZ2h0LWN5YW5cIn0se2NvbG9yOlwiMjU1LCAyNTUsIDI1NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtd2hpdGVcIn1dXTt2YXIgcz1mdW5jdGlvbigpe3IoQW5zZXIsbnVsbCxbe2tleTpcImVzY2FwZUZvckh0bWxcIix2YWx1ZTpmdW5jdGlvbiBlc2NhcGVGb3JIdG1sKGUpe3JldHVybihuZXcgQW5zZXIpLmVzY2FwZUZvckh0bWwoZSl9fSx7a2V5OlwibGlua2lmeVwiLHZhbHVlOmZ1bmN0aW9uIGxpbmtpZnkoZSl7cmV0dXJuKG5ldyBBbnNlcikubGlua2lmeShlKX19LHtrZXk6XCJhbnNpVG9IdG1sXCIsdmFsdWU6ZnVuY3Rpb24gYW5zaVRvSHRtbChlLHIpe3JldHVybihuZXcgQW5zZXIpLmFuc2lUb0h0bWwoZSxyKX19LHtrZXk6XCJhbnNpVG9Kc29uXCIsdmFsdWU6ZnVuY3Rpb24gYW5zaVRvSnNvbihlLHIpe3JldHVybihuZXcgQW5zZXIpLmFuc2lUb0pzb24oZSxyKX19LHtrZXk6XCJhbnNpVG9UZXh0XCIsdmFsdWU6ZnVuY3Rpb24gYW5zaVRvVGV4dChlKXtyZXR1cm4obmV3IEFuc2VyKS5hbnNpVG9UZXh0KGUpfX1dKTtmdW5jdGlvbiBBbnNlcigpe19jbGFzc0NhbGxDaGVjayh0aGlzLEFuc2VyKTt0aGlzLmZnPXRoaXMuYmc9dGhpcy5mZ190cnVlY29sb3I9dGhpcy5iZ190cnVlY29sb3I9bnVsbDt0aGlzLmJyaWdodD0wfXIoQW5zZXIsW3trZXk6XCJzZXR1cFBhbGV0dGVcIix2YWx1ZTpmdW5jdGlvbiBzZXR1cFBhbGV0dGUoKXt0aGlzLlBBTEVUVEVfQ09MT1JTPVtdO2Zvcih2YXIgZT0wO2U8MjsrK2Upe2Zvcih2YXIgcj0wO3I8ODsrK3Ipe3RoaXMuUEFMRVRURV9DT0xPUlMucHVzaChuW2VdW3JdLmNvbG9yKX19dmFyIHM9WzAsOTUsMTM1LDE3NSwyMTUsMjU1XTt2YXIgaT1mdW5jdGlvbiBmb3JtYXQoZSxyLG4pe3JldHVybiBzW2VdK1wiLCBcIitzW3JdK1wiLCBcIitzW25dfTt2YXIgdD12b2lkIDAsbz12b2lkIDAsYT12b2lkIDA7Zm9yKHZhciBsPTA7bDw2OysrbCl7Zm9yKHZhciBjPTA7Yzw2OysrYyl7Zm9yKHZhciB1PTA7dTw2OysrdSl7dGhpcy5QQUxFVFRFX0NPTE9SUy5wdXNoKGkobCxjLHUpKX19fXZhciBmPTg7Zm9yKHZhciBoPTA7aDwyNDsrK2gsZis9MTApe3RoaXMuUEFMRVRURV9DT0xPUlMucHVzaChpKGYsZixmKSl9fX0se2tleTpcImVzY2FwZUZvckh0bWxcIix2YWx1ZTpmdW5jdGlvbiBlc2NhcGVGb3JIdG1sKGUpe3JldHVybiBlLnJlcGxhY2UoL1smPD5dL2dtLChmdW5jdGlvbihlKXtyZXR1cm4gZT09XCImXCI/XCImYW1wO1wiOmU9PVwiPFwiP1wiJmx0O1wiOmU9PVwiPlwiP1wiJmd0O1wiOlwiXCJ9KSl9fSx7a2V5OlwibGlua2lmeVwiLHZhbHVlOmZ1bmN0aW9uIGxpbmtpZnkoZSl7cmV0dXJuIGUucmVwbGFjZSgvKGh0dHBzPzpcXC9cXC9bXlxcc10rKS9nbSwoZnVuY3Rpb24oZSl7cmV0dXJuJzxhIGhyZWY9XCInK2UrJ1wiPicrZStcIjwvYT5cIn0pKX19LHtrZXk6XCJhbnNpVG9IdG1sXCIsdmFsdWU6ZnVuY3Rpb24gYW5zaVRvSHRtbChlLHIpe3JldHVybiB0aGlzLnByb2Nlc3MoZSxyLHRydWUpfX0se2tleTpcImFuc2lUb0pzb25cIix2YWx1ZTpmdW5jdGlvbiBhbnNpVG9Kc29uKGUscil7cj1yfHx7fTtyLmpzb249dHJ1ZTtyLmNsZWFyTGluZT1mYWxzZTtyZXR1cm4gdGhpcy5wcm9jZXNzKGUscix0cnVlKX19LHtrZXk6XCJhbnNpVG9UZXh0XCIsdmFsdWU6ZnVuY3Rpb24gYW5zaVRvVGV4dChlKXtyZXR1cm4gdGhpcy5wcm9jZXNzKGUse30sZmFsc2UpfX0se2tleTpcInByb2Nlc3NcIix2YWx1ZTpmdW5jdGlvbiBwcm9jZXNzKGUscixuKXt2YXIgcz10aGlzO3ZhciBpPXRoaXM7dmFyIHQ9ZS5zcGxpdCgvXFwwMzNcXFsvKTt2YXIgbz10LnNoaWZ0KCk7aWYocj09PXVuZGVmaW5lZHx8cj09PW51bGwpe3I9e319ci5jbGVhckxpbmU9L1xcci8udGVzdChlKTt2YXIgYT10Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHMucHJvY2Vzc0NodW5rKGUscixuKX0pKTtpZihyJiZyLmpzb24pe3ZhciBsPWkucHJvY2Vzc0NodW5rSnNvbihcIlwiKTtsLmNvbnRlbnQ9bztsLmNsZWFyTGluZT1yLmNsZWFyTGluZTthLnVuc2hpZnQobCk7aWYoci5yZW1vdmVfZW1wdHkpe2E9YS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmlzRW1wdHkoKX0pKX1yZXR1cm4gYX1lbHNle2EudW5zaGlmdChvKX1yZXR1cm4gYS5qb2luKFwiXCIpfX0se2tleTpcInByb2Nlc3NDaHVua0pzb25cIix2YWx1ZTpmdW5jdGlvbiBwcm9jZXNzQ2h1bmtKc29uKGUscixzKXtyPXR5cGVvZiByPT1cInVuZGVmaW5lZFwiP3t9OnI7dmFyIGk9ci51c2VfY2xhc3Nlcz10eXBlb2Ygci51c2VfY2xhc3NlcyE9XCJ1bmRlZmluZWRcIiYmci51c2VfY2xhc3Nlczt2YXIgdD1yLmtleT1pP1wiY2xhc3NcIjpcImNvbG9yXCI7dmFyIG89e2NvbnRlbnQ6ZSxmZzpudWxsLGJnOm51bGwsZmdfdHJ1ZWNvbG9yOm51bGwsYmdfdHJ1ZWNvbG9yOm51bGwsY2xlYXJMaW5lOnIuY2xlYXJMaW5lLGRlY29yYXRpb246bnVsbCx3YXNfcHJvY2Vzc2VkOmZhbHNlLGlzRW1wdHk6ZnVuY3Rpb24gaXNFbXB0eSgpe3JldHVybiFvLmNvbnRlbnR9fTt2YXIgYT1lLm1hdGNoKC9eKFshXFx4M2MtXFx4M2ZdKikoW1xcZDtdKikoW1xceDIwLVxceDJjXSpbXFx4NDAtXFx4N2VdKShbXFxzXFxTXSopL20pO2lmKCFhKXJldHVybiBvO3ZhciBsPW8uY29udGVudD1hWzRdO3ZhciBjPWFbMl0uc3BsaXQoXCI7XCIpO2lmKGFbMV0hPT1cIlwifHxhWzNdIT09XCJtXCIpe3JldHVybiBvfWlmKCFzKXtyZXR1cm4gb312YXIgdT10aGlzO3UuZGVjb3JhdGlvbj1udWxsO3doaWxlKGMubGVuZ3RoPjApe3ZhciBmPWMuc2hpZnQoKTt2YXIgaD1wYXJzZUludChmKTtpZihpc05hTihoKXx8aD09PTApe3UuZmc9dS5iZz11LmRlY29yYXRpb249bnVsbH1lbHNlIGlmKGg9PT0xKXt1LmRlY29yYXRpb249XCJib2xkXCJ9ZWxzZSBpZihoPT09Mil7dS5kZWNvcmF0aW9uPVwiZGltXCJ9ZWxzZSBpZihoPT0zKXt1LmRlY29yYXRpb249XCJpdGFsaWNcIn1lbHNlIGlmKGg9PTQpe3UuZGVjb3JhdGlvbj1cInVuZGVybGluZVwifWVsc2UgaWYoaD09NSl7dS5kZWNvcmF0aW9uPVwiYmxpbmtcIn1lbHNlIGlmKGg9PT03KXt1LmRlY29yYXRpb249XCJyZXZlcnNlXCJ9ZWxzZSBpZihoPT09OCl7dS5kZWNvcmF0aW9uPVwiaGlkZGVuXCJ9ZWxzZSBpZihoPT09OSl7dS5kZWNvcmF0aW9uPVwic3RyaWtldGhyb3VnaFwifWVsc2UgaWYoaD09Mzkpe3UuZmc9bnVsbH1lbHNlIGlmKGg9PTQ5KXt1LmJnPW51bGx9ZWxzZSBpZihoPj0zMCYmaDwzOCl7dS5mZz1uWzBdW2glMTBdW3RdfWVsc2UgaWYoaD49OTAmJmg8OTgpe3UuZmc9blsxXVtoJTEwXVt0XX1lbHNlIGlmKGg+PTQwJiZoPDQ4KXt1LmJnPW5bMF1baCUxMF1bdF19ZWxzZSBpZihoPj0xMDAmJmg8MTA4KXt1LmJnPW5bMV1baCUxMF1bdF19ZWxzZSBpZihoPT09Mzh8fGg9PT00OCl7dmFyIHA9aD09PTM4O2lmKGMubGVuZ3RoPj0xKXt2YXIgZz1jLnNoaWZ0KCk7aWYoZz09PVwiNVwiJiZjLmxlbmd0aD49MSl7dmFyIHY9cGFyc2VJbnQoYy5zaGlmdCgpKTtpZih2Pj0wJiZ2PD0yNTUpe2lmKCFpKXtpZighdGhpcy5QQUxFVFRFX0NPTE9SUyl7dS5zZXR1cFBhbGV0dGUoKX1pZihwKXt1LmZnPXRoaXMuUEFMRVRURV9DT0xPUlNbdl19ZWxzZXt1LmJnPXRoaXMuUEFMRVRURV9DT0xPUlNbdl19fWVsc2V7dmFyIGQ9dj49MTY/XCJhbnNpLXBhbGV0dGUtXCIrdjpuW3Y+Nz8xOjBdW3YlOF1bXCJjbGFzc1wiXTtpZihwKXt1LmZnPWR9ZWxzZXt1LmJnPWR9fX19ZWxzZSBpZihnPT09XCIyXCImJmMubGVuZ3RoPj0zKXt2YXIgXz1wYXJzZUludChjLnNoaWZ0KCkpO3ZhciBiPXBhcnNlSW50KGMuc2hpZnQoKSk7dmFyIHk9cGFyc2VJbnQoYy5zaGlmdCgpKTtpZihfPj0wJiZfPD0yNTUmJmI+PTAmJmI8PTI1NSYmeT49MCYmeTw9MjU1KXt2YXIgaz1fK1wiLCBcIitiK1wiLCBcIit5O2lmKCFpKXtpZihwKXt1LmZnPWt9ZWxzZXt1LmJnPWt9fWVsc2V7aWYocCl7dS5mZz1cImFuc2ktdHJ1ZWNvbG9yXCI7dS5mZ190cnVlY29sb3I9a31lbHNle3UuYmc9XCJhbnNpLXRydWVjb2xvclwiO3UuYmdfdHJ1ZWNvbG9yPWt9fX19fX19aWYodS5mZz09PW51bGwmJnUuYmc9PT1udWxsJiZ1LmRlY29yYXRpb249PT1udWxsKXtyZXR1cm4gb31lbHNle3ZhciBUPVtdO3ZhciBtPVtdO3ZhciB3PXt9O28uZmc9dS5mZztvLmJnPXUuYmc7by5mZ190cnVlY29sb3I9dS5mZ190cnVlY29sb3I7by5iZ190cnVlY29sb3I9dS5iZ190cnVlY29sb3I7by5kZWNvcmF0aW9uPXUuZGVjb3JhdGlvbjtvLndhc19wcm9jZXNzZWQ9dHJ1ZTtyZXR1cm4gb319fSx7a2V5OlwicHJvY2Vzc0NodW5rXCIsdmFsdWU6ZnVuY3Rpb24gcHJvY2Vzc0NodW5rKGUscixuKXt2YXIgcz10aGlzO3ZhciBpPXRoaXM7cj1yfHx7fTt2YXIgdD10aGlzLnByb2Nlc3NDaHVua0pzb24oZSxyLG4pO2lmKHIuanNvbil7cmV0dXJuIHR9aWYodC5pc0VtcHR5KCkpe3JldHVyblwiXCJ9aWYoIXQud2FzX3Byb2Nlc3NlZCl7cmV0dXJuIHQuY29udGVudH12YXIgbz1yLnVzZV9jbGFzc2VzO3ZhciBhPVtdO3ZhciBsPVtdO3ZhciBjPXt9O3ZhciB1PWZ1bmN0aW9uIHJlbmRlcl9kYXRhKGUpe3ZhciByPVtdO3ZhciBuPXZvaWQgMDtmb3IobiBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KG4pKXtyLnB1c2goXCJkYXRhLVwiK24rJz1cIicrcy5lc2NhcGVGb3JIdG1sKGVbbl0pKydcIicpfX1yZXR1cm4gci5sZW5ndGg+MD9cIiBcIityLmpvaW4oXCIgXCIpOlwiXCJ9O2lmKHQuZmcpe2lmKG8pe2wucHVzaCh0LmZnK1wiLWZnXCIpO2lmKHQuZmdfdHJ1ZWNvbG9yIT09bnVsbCl7Y1tcImFuc2ktdHJ1ZWNvbG9yLWZnXCJdPXQuZmdfdHJ1ZWNvbG9yO3QuZmdfdHJ1ZWNvbG9yPW51bGx9fWVsc2V7YS5wdXNoKFwiY29sb3I6cmdiKFwiK3QuZmcrXCIpXCIpfX1pZih0LmJnKXtpZihvKXtsLnB1c2godC5iZytcIi1iZ1wiKTtpZih0LmJnX3RydWVjb2xvciE9PW51bGwpe2NbXCJhbnNpLXRydWVjb2xvci1iZ1wiXT10LmJnX3RydWVjb2xvcjt0LmJnX3RydWVjb2xvcj1udWxsfX1lbHNle2EucHVzaChcImJhY2tncm91bmQtY29sb3I6cmdiKFwiK3QuYmcrXCIpXCIpfX1pZih0LmRlY29yYXRpb24pe2lmKG8pe2wucHVzaChcImFuc2ktXCIrdC5kZWNvcmF0aW9uKX1lbHNlIGlmKHQuZGVjb3JhdGlvbj09PVwiYm9sZFwiKXthLnB1c2goXCJmb250LXdlaWdodDpib2xkXCIpfWVsc2UgaWYodC5kZWNvcmF0aW9uPT09XCJkaW1cIil7YS5wdXNoKFwib3BhY2l0eTowLjVcIil9ZWxzZSBpZih0LmRlY29yYXRpb249PT1cIml0YWxpY1wiKXthLnB1c2goXCJmb250LXN0eWxlOml0YWxpY1wiKX1lbHNlIGlmKHQuZGVjb3JhdGlvbj09PVwicmV2ZXJzZVwiKXthLnB1c2goXCJmaWx0ZXI6aW52ZXJ0KDEwMCUpXCIpfWVsc2UgaWYodC5kZWNvcmF0aW9uPT09XCJoaWRkZW5cIil7YS5wdXNoKFwidmlzaWJpbGl0eTpoaWRkZW5cIil9ZWxzZSBpZih0LmRlY29yYXRpb249PT1cInN0cmlrZXRocm91Z2hcIil7YS5wdXNoKFwidGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaFwiKX1lbHNle2EucHVzaChcInRleHQtZGVjb3JhdGlvbjpcIit0LmRlY29yYXRpb24pfX1pZihvKXtyZXR1cm4nPHNwYW4gY2xhc3M9XCInK2wuam9pbihcIiBcIikrJ1wiJyt1KGMpK1wiPlwiK3QuY29udGVudCtcIjwvc3Bhbj5cIn1lbHNle3JldHVybic8c3BhbiBzdHlsZT1cIicrYS5qb2luKFwiO1wiKSsnXCInK3UoYykrXCI+XCIrdC5jb250ZW50K1wiPC9zcGFuPlwifX19XSk7cmV0dXJuIEFuc2VyfSgpO2UuZXhwb3J0cz1zfX07dmFyIHI9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyhuKXt2YXIgcz1yW25dO2lmKHMhPT11bmRlZmluZWQpe3JldHVybiBzLmV4cG9ydHN9dmFyIGk9cltuXT17ZXhwb3J0czp7fX07dmFyIHQ9dHJ1ZTt0cnl7ZVtuXShpLGkuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTt0PWZhbHNlfWZpbmFsbHl7aWYodClkZWxldGUgcltuXX1yZXR1cm4gaS5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgbj1fX25jY3dwY2tfcmVxdWlyZV9fKDIxMSk7bW9kdWxlLmV4cG9ydHM9bn0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/anser/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/css.escape/css.escape.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/compiled/css.escape/css.escape.js ***! + \******************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{var e={553:function(e){(function(r,t){if(true){e.exports=t(r)}else{}})(typeof __webpack_require__.g!=\"undefined\"?__webpack_require__.g:this,(function(e){if(e.CSS&&e.CSS.escape){return e.CSS.escape}var cssEscape=function(e){if(arguments.length==0){throw new TypeError(\"`CSS.escape` requires an argument.\")}var r=String(e);var t=r.length;var n=-1;var a;var i=\"\";var u=r.charCodeAt(0);while(++n<t){a=r.charCodeAt(n);if(a==0){i+=\"�\";continue}if(a>=1&&a<=31||a==127||n==0&&a>=48&&a<=57||n==1&&a>=48&&a<=57&&u==45){i+=\"\\\\\"+a.toString(16)+\" \";continue}if(n==0&&t==1&&a==45){i+=\"\\\\\"+r.charAt(n);continue}if(a>=128||a==45||a==95||a>=48&&a<=57||a>=65&&a<=90||a>=97&&a<=122){i+=r.charAt(n);continue}i+=\"\\\\\"+r.charAt(n)}return i};if(!e.CSS){e.CSS={}}e.CSS.escape=cssEscape;return cssEscape}))}};var r={};function __nccwpck_require__(t){var n=r[t];if(n!==undefined){return n.exports}var a=r[t]={exports:{}};var i=true;try{e[t].call(a.exports,a,a.exports,__nccwpck_require__);i=false}finally{if(i)delete r[t]}return a.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(553);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvY3NzLmVzY2FwZS9jc3MuZXNjYXBlLmpzIiwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLE9BQU8sZ0JBQWdCLGVBQWUsR0FBRyxJQUFJLEVBQUUsZUFBZSxJQUFJLEVBQUUsQ0FBQyxTQUFTLHFCQUFNLGNBQWMscUJBQU0sbUJBQW1CLHdCQUF3QixvQkFBb0IsMEJBQTBCLHdCQUF3QiwwREFBMEQsZ0JBQWdCLGVBQWUsU0FBUyxNQUFNLFNBQVMsc0JBQXNCLGFBQWEsa0JBQWtCLFNBQVMsT0FBTyxTQUFTLHVFQUF1RSwyQkFBMkIsU0FBUyxzQkFBc0Isb0JBQW9CLFNBQVMsb0VBQW9FLGVBQWUsU0FBUyxvQkFBb0IsVUFBVSxXQUFXLFNBQVMsdUJBQXVCLGlCQUFpQixLQUFLLFNBQVMsZ0NBQWdDLFdBQVcsa0JBQWtCLGlCQUFpQixZQUFZLFlBQVksV0FBVyxJQUFJLHFEQUFxRCxRQUFRLFFBQVEsaUJBQWlCLGlCQUFpQixtRUFBbUUsU0FBUyxLQUFLLCtCQUErQixpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9jc3MuZXNjYXBlL2Nzcy5lc2NhcGUuanM/NTBkOSJdLCJzb3VyY2VzQ29udGVudCI6WyIoKCk9Pnt2YXIgZT17NTUzOmZ1bmN0aW9uKGUpeyhmdW5jdGlvbihyLHQpe2lmKHRydWUpe2UuZXhwb3J0cz10KHIpfWVsc2V7fX0pKHR5cGVvZiBnbG9iYWwhPVwidW5kZWZpbmVkXCI/Z2xvYmFsOnRoaXMsKGZ1bmN0aW9uKGUpe2lmKGUuQ1NTJiZlLkNTUy5lc2NhcGUpe3JldHVybiBlLkNTUy5lc2NhcGV9dmFyIGNzc0VzY2FwZT1mdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoPT0wKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiYENTUy5lc2NhcGVgIHJlcXVpcmVzIGFuIGFyZ3VtZW50LlwiKX12YXIgcj1TdHJpbmcoZSk7dmFyIHQ9ci5sZW5ndGg7dmFyIG49LTE7dmFyIGE7dmFyIGk9XCJcIjt2YXIgdT1yLmNoYXJDb2RlQXQoMCk7d2hpbGUoKytuPHQpe2E9ci5jaGFyQ29kZUF0KG4pO2lmKGE9PTApe2krPVwi77+9XCI7Y29udGludWV9aWYoYT49MSYmYTw9MzF8fGE9PTEyN3x8bj09MCYmYT49NDgmJmE8PTU3fHxuPT0xJiZhPj00OCYmYTw9NTcmJnU9PTQ1KXtpKz1cIlxcXFxcIithLnRvU3RyaW5nKDE2KStcIiBcIjtjb250aW51ZX1pZihuPT0wJiZ0PT0xJiZhPT00NSl7aSs9XCJcXFxcXCIrci5jaGFyQXQobik7Y29udGludWV9aWYoYT49MTI4fHxhPT00NXx8YT09OTV8fGE+PTQ4JiZhPD01N3x8YT49NjUmJmE8PTkwfHxhPj05NyYmYTw9MTIyKXtpKz1yLmNoYXJBdChuKTtjb250aW51ZX1pKz1cIlxcXFxcIityLmNoYXJBdChuKX1yZXR1cm4gaX07aWYoIWUuQ1NTKXtlLkNTUz17fX1lLkNTUy5lc2NhcGU9Y3NzRXNjYXBlO3JldHVybiBjc3NFc2NhcGV9KSl9fTt2YXIgcj17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKHQpe3ZhciBuPXJbdF07aWYobiE9PXVuZGVmaW5lZCl7cmV0dXJuIG4uZXhwb3J0c312YXIgYT1yW3RdPXtleHBvcnRzOnt9fTt2YXIgaT10cnVlO3RyeXtlW3RdLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO2k9ZmFsc2V9ZmluYWxseXtpZihpKWRlbGV0ZSByW3RdfXJldHVybiBhLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciB0PV9fbmNjd3Bja19yZXF1aXJlX18oNTUzKTttb2R1bGUuZXhwb3J0cz10fSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/css.escape/css.escape.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/platform/platform.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/compiled/platform/platform.js ***! + \**************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{var e={541:function(e,i,t){e=t.nmd(e);\n/*!\n * Platform.js v1.3.6\n * Copyright 2014-2020 Benjamin Tan\n * Copyright 2011-2013 John-David Dalton\n * Available under MIT license\n */(function(){\"use strict\";var t={function:true,object:true};var r=t[typeof window]&&window||this;var a=r;var n=t[typeof i]&&i;var o=t[\"object\"]&&e&&!e.nodeType&&e;var l=n&&o&&typeof __webpack_require__.g==\"object\"&&__webpack_require__.g;if(l&&(l.global===l||l.window===l||l.self===l)){r=l}var s=Math.pow(2,53)-1;var f=/\\bOpera/;var b=this;var c=Object.prototype;var p=c.hasOwnProperty;var u=c.toString;function capitalize(e){e=String(e);return e.charAt(0).toUpperCase()+e.slice(1)}function cleanupOS(e,i,t){var r={\"10.0\":\"10\",6.4:\"10 Technical Preview\",6.3:\"8.1\",6.2:\"8\",6.1:\"Server 2008 R2 / 7\",\"6.0\":\"Server 2008 / Vista\",5.2:\"Server 2003 / XP 64-bit\",5.1:\"XP\",5.01:\"2000 SP1\",\"5.0\":\"2000\",\"4.0\":\"NT\",\"4.90\":\"ME\"};if(i&&t&&/^Win/i.test(e)&&!/^Windows Phone /i.test(e)&&(r=r[/[\\d.]+$/.exec(e)])){e=\"Windows \"+r}e=String(e);if(i&&t){e=e.replace(RegExp(i,\"i\"),t)}e=format(e.replace(/ ce$/i,\" CE\").replace(/\\bhpw/i,\"web\").replace(/\\bMacintosh\\b/,\"Mac OS\").replace(/_PowerPC\\b/i,\" OS\").replace(/\\b(OS X) [^ \\d]+/i,\"$1\").replace(/\\bMac (OS X)\\b/,\"$1\").replace(/\\/(\\d)/,\" $1\").replace(/_/g,\".\").replace(/(?: BePC|[ .]*fc[ \\d.]+)$/i,\"\").replace(/\\bx86\\.64\\b/gi,\"x86_64\").replace(/\\b(Windows Phone) OS\\b/,\"$1\").replace(/\\b(Chrome OS \\w+) [\\d.]+\\b/,\"$1\").split(\" on \")[0]);return e}function each(e,i){var t=-1,r=e?e.length:0;if(typeof r==\"number\"&&r>-1&&r<=s){while(++t<r){i(e[t],t,e)}}else{forOwn(e,i)}}function format(e){e=trim(e);return/^(?:webOS|i(?:OS|P))/.test(e)?e:capitalize(e)}function forOwn(e,i){for(var t in e){if(p.call(e,t)){i(e[t],t,e)}}}function getClassOf(e){return e==null?capitalize(e):u.call(e).slice(8,-1)}function isHostType(e,i){var t=e!=null?typeof e[i]:\"number\";return!/^(?:boolean|number|string|undefined)$/.test(t)&&(t==\"object\"?!!e[i]:true)}function qualify(e){return String(e).replace(/([ -])(?!$)/g,\"$1?\")}function reduce(e,i){var t=null;each(e,(function(r,a){t=i(t,r,a,e)}));return t}function trim(e){return String(e).replace(/^ +| +$/g,\"\")}function parse(e){var i=r;var t=e&&typeof e==\"object\"&&getClassOf(e)!=\"String\";if(t){i=e;e=null}var n=i.navigator||{};var o=n.userAgent||\"\";e||(e=o);var l=t||b==a;var s=t?!!n.likeChrome:/\\bChrome\\b/.test(e)&&!/internal|\\n/i.test(u.toString());var c=\"Object\",p=t?c:\"ScriptBridgingProxyObject\",d=t?c:\"Environment\",S=t&&i.java?\"JavaPackage\":getClassOf(i.java),x=t?c:\"RuntimeObject\";var m=/\\bJava/.test(S)&&i.java;var g=m&&getClassOf(i.environment)==d;var h=m?\"a\":\"α\";var v=m?\"b\":\"β\";var O=i.document||{};var y=i.operamini||i.opera;var w=f.test(w=t&&y?y[\"[[Class]]\"]:getClassOf(y))?w:y=null;var M;var E=e;var P=[];var C=null;var k=e==o;var B=k&&y&&typeof y.version==\"function\"&&y.version();var W;var _=getLayout([{label:\"EdgeHTML\",pattern:\"Edge\"},\"Trident\",{label:\"WebKit\",pattern:\"AppleWebKit\"},\"iCab\",\"Presto\",\"NetFront\",\"Tasman\",\"KHTML\",\"Gecko\"]);var R=getName([\"Adobe AIR\",\"Arora\",\"Avant Browser\",\"Breach\",\"Camino\",\"Electron\",\"Epiphany\",\"Fennec\",\"Flock\",\"Galeon\",\"GreenBrowser\",\"iCab\",\"Iceweasel\",\"K-Meleon\",\"Konqueror\",\"Lunascape\",\"Maxthon\",{label:\"Microsoft Edge\",pattern:\"(?:Edge|Edg|EdgA|EdgiOS)\"},\"Midori\",\"Nook Browser\",\"PaleMoon\",\"PhantomJS\",\"Raven\",\"Rekonq\",\"RockMelt\",{label:\"Samsung Internet\",pattern:\"SamsungBrowser\"},\"SeaMonkey\",{label:\"Silk\",pattern:\"(?:Cloud9|Silk-Accelerated)\"},\"Sleipnir\",\"SlimBrowser\",{label:\"SRWare Iron\",pattern:\"Iron\"},\"Sunrise\",\"Swiftfox\",\"Vivaldi\",\"Waterfox\",\"WebPositive\",{label:\"Yandex Browser\",pattern:\"YaBrowser\"},{label:\"UC Browser\",pattern:\"UCBrowser\"},\"Opera Mini\",{label:\"Opera Mini\",pattern:\"OPiOS\"},\"Opera\",{label:\"Opera\",pattern:\"OPR\"},\"Chromium\",\"Chrome\",{label:\"Chrome\",pattern:\"(?:HeadlessChrome)\"},{label:\"Chrome Mobile\",pattern:\"(?:CriOS|CrMo)\"},{label:\"Firefox\",pattern:\"(?:Firefox|Minefield)\"},{label:\"Firefox for iOS\",pattern:\"FxiOS\"},{label:\"IE\",pattern:\"IEMobile\"},{label:\"IE\",pattern:\"MSIE\"},\"Safari\"]);var A=getProduct([{label:\"BlackBerry\",pattern:\"BB10\"},\"BlackBerry\",{label:\"Galaxy S\",pattern:\"GT-I9000\"},{label:\"Galaxy S2\",pattern:\"GT-I9100\"},{label:\"Galaxy S3\",pattern:\"GT-I9300\"},{label:\"Galaxy S4\",pattern:\"GT-I9500\"},{label:\"Galaxy S5\",pattern:\"SM-G900\"},{label:\"Galaxy S6\",pattern:\"SM-G920\"},{label:\"Galaxy S6 Edge\",pattern:\"SM-G925\"},{label:\"Galaxy S7\",pattern:\"SM-G930\"},{label:\"Galaxy S7 Edge\",pattern:\"SM-G935\"},\"Google TV\",\"Lumia\",\"iPad\",\"iPod\",\"iPhone\",\"Kindle\",{label:\"Kindle Fire\",pattern:\"(?:Cloud9|Silk-Accelerated)\"},\"Nexus\",\"Nook\",\"PlayBook\",\"PlayStation Vita\",\"PlayStation\",\"TouchPad\",\"Transformer\",{label:\"Wii U\",pattern:\"WiiU\"},\"Wii\",\"Xbox One\",{label:\"Xbox 360\",pattern:\"Xbox\"},\"Xoom\"]);var I=getManufacturer({Apple:{iPad:1,iPhone:1,iPod:1},Alcatel:{},Archos:{},Amazon:{Kindle:1,\"Kindle Fire\":1},Asus:{Transformer:1},\"Barnes & Noble\":{Nook:1},BlackBerry:{PlayBook:1},Google:{\"Google TV\":1,Nexus:1},HP:{TouchPad:1},HTC:{},Huawei:{},Lenovo:{},LG:{},Microsoft:{Xbox:1,\"Xbox One\":1},Motorola:{Xoom:1},Nintendo:{\"Wii U\":1,Wii:1},Nokia:{Lumia:1},Oppo:{},Samsung:{\"Galaxy S\":1,\"Galaxy S2\":1,\"Galaxy S3\":1,\"Galaxy S4\":1},Sony:{PlayStation:1,\"PlayStation Vita\":1},Xiaomi:{Mi:1,Redmi:1}});var T=getOS([\"Windows Phone\",\"KaiOS\",\"Android\",\"CentOS\",{label:\"Chrome OS\",pattern:\"CrOS\"},\"Debian\",{label:\"DragonFly BSD\",pattern:\"DragonFly\"},\"Fedora\",\"FreeBSD\",\"Gentoo\",\"Haiku\",\"Kubuntu\",\"Linux Mint\",\"OpenBSD\",\"Red Hat\",\"SuSE\",\"Ubuntu\",\"Xubuntu\",\"Cygwin\",\"Symbian OS\",\"hpwOS\",\"webOS \",\"webOS\",\"Tablet OS\",\"Tizen\",\"Linux\",\"Mac OS X\",\"Macintosh\",\"Mac\",\"Windows 98;\",\"Windows \"]);function getLayout(i){return reduce(i,(function(i,t){return i||RegExp(\"\\\\b\"+(t.pattern||qualify(t))+\"\\\\b\",\"i\").exec(e)&&(t.label||t)}))}function getManufacturer(i){return reduce(i,(function(i,t,r){return i||(t[A]||t[/^[a-z]+(?: +[a-z]+\\b)*/i.exec(A)]||RegExp(\"\\\\b\"+qualify(r)+\"(?:\\\\b|\\\\w*\\\\d)\",\"i\").exec(e))&&r}))}function getName(i){return reduce(i,(function(i,t){return i||RegExp(\"\\\\b\"+(t.pattern||qualify(t))+\"\\\\b\",\"i\").exec(e)&&(t.label||t)}))}function getOS(i){return reduce(i,(function(i,t){var r=t.pattern||qualify(t);if(!i&&(i=RegExp(\"\\\\b\"+r+\"(?:/[\\\\d.]+|[ \\\\w.]*)\",\"i\").exec(e))){i=cleanupOS(i,r,t.label||t)}return i}))}function getProduct(i){return reduce(i,(function(i,t){var r=t.pattern||qualify(t);if(!i&&(i=RegExp(\"\\\\b\"+r+\" *\\\\d+[.\\\\w_]*\",\"i\").exec(e)||RegExp(\"\\\\b\"+r+\" *\\\\w+-[\\\\w]*\",\"i\").exec(e)||RegExp(\"\\\\b\"+r+\"(?:; *(?:[a-z]+[_-])?[a-z]+\\\\d+|[^ ();-]*)\",\"i\").exec(e))){if((i=String(t.label&&!RegExp(r,\"i\").test(t.label)?t.label:i).split(\"/\"))[1]&&!/[\\d.]+/.test(i[0])){i[0]+=\" \"+i[1]}t=t.label||t;i=format(i[0].replace(RegExp(r,\"i\"),t).replace(RegExp(\"; *(?:\"+t+\"[_-])?\",\"i\"),\" \").replace(RegExp(\"(\"+t+\")[-_.]?(\\\\w)\",\"i\"),\"$1 $2\"))}return i}))}function getVersion(i){return reduce(i,(function(i,t){return i||(RegExp(t+\"(?:-[\\\\d.]+/|(?: for [\\\\w-]+)?[ /-])([\\\\d.]+[^ ();/_-]*)\",\"i\").exec(e)||0)[1]||null}))}function toStringPlatform(){return this.description||\"\"}_&&(_=[_]);if(/\\bAndroid\\b/.test(T)&&!A&&(M=/\\bAndroid[^;]*;(.*?)(?:Build|\\) AppleWebKit)\\b/i.exec(e))){A=trim(M[1]).replace(/^[a-z]{2}-[a-z]{2};\\s*/i,\"\")||null}if(I&&!A){A=getProduct([I])}else if(I&&A){A=A.replace(RegExp(\"^(\"+qualify(I)+\")[-_.\\\\s]\",\"i\"),I+\" \").replace(RegExp(\"^(\"+qualify(I)+\")[-_.]?(\\\\w)\",\"i\"),I+\" $2\")}if(M=/\\bGoogle TV\\b/.exec(A)){A=M[0]}if(/\\bSimulator\\b/i.test(e)){A=(A?A+\" \":\"\")+\"Simulator\"}if(R==\"Opera Mini\"&&/\\bOPiOS\\b/.test(e)){P.push(\"running in Turbo/Uncompressed mode\")}if(R==\"IE\"&&/\\blike iPhone OS\\b/.test(e)){M=parse(e.replace(/like iPhone OS/,\"\"));I=M.manufacturer;A=M.product}else if(/^iP/.test(A)){R||(R=\"Safari\");T=\"iOS\"+((M=/ OS ([\\d_]+)/i.exec(e))?\" \"+M[1].replace(/_/g,\".\"):\"\")}else if(R==\"Konqueror\"&&/^Linux\\b/i.test(T)){T=\"Kubuntu\"}else if(I&&I!=\"Google\"&&(/Chrome/.test(R)&&!/\\bMobile Safari\\b/i.test(e)||/\\bVita\\b/.test(A))||/\\bAndroid\\b/.test(T)&&/^Chrome/.test(R)&&/\\bVersion\\//i.test(e)){R=\"Android Browser\";T=/\\bAndroid\\b/.test(T)?T:\"Android\"}else if(R==\"Silk\"){if(!/\\bMobi/i.test(e)){T=\"Android\";P.unshift(\"desktop mode\")}if(/Accelerated *= *true/i.test(e)){P.unshift(\"accelerated\")}}else if(R==\"UC Browser\"&&/\\bUCWEB\\b/.test(e)){P.push(\"speed mode\")}else if(R==\"PaleMoon\"&&(M=/\\bFirefox\\/([\\d.]+)\\b/.exec(e))){P.push(\"identifying as Firefox \"+M[1])}else if(R==\"Firefox\"&&(M=/\\b(Mobile|Tablet|TV)\\b/i.exec(e))){T||(T=\"Firefox OS\");A||(A=M[1])}else if(!R||(M=!/\\bMinefield\\b/i.test(e)&&/\\b(?:Firefox|Safari)\\b/.exec(R))){if(R&&!A&&/[\\/,]|^[^(]+?\\)/.test(e.slice(e.indexOf(M+\"/\")+8))){R=null}if((M=A||I||T)&&(A||I||/\\b(?:Android|Symbian OS|Tablet OS|webOS)\\b/.test(T))){R=/[a-z]+(?: Hat)?/i.exec(/\\bAndroid\\b/.test(T)?T:M)+\" Browser\"}}else if(R==\"Electron\"&&(M=(/\\bChrome\\/([\\d.]+)\\b/.exec(e)||0)[1])){P.push(\"Chromium \"+M)}if(!B){B=getVersion([\"(?:Cloud9|CriOS|CrMo|Edge|Edg|EdgA|EdgiOS|FxiOS|HeadlessChrome|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|SamsungBrowser|Silk(?!/[\\\\d.]+$)|UCBrowser|YaBrowser)\",\"Version\",qualify(R),\"(?:Firefox|Minefield|NetFront)\"])}if(M=_==\"iCab\"&&parseFloat(B)>3&&\"WebKit\"||/\\bOpera\\b/.test(R)&&(/\\bOPR\\b/.test(e)?\"Blink\":\"Presto\")||/\\b(?:Midori|Nook|Safari)\\b/i.test(e)&&!/^(?:Trident|EdgeHTML)$/.test(_)&&\"WebKit\"||!_&&/\\bMSIE\\b/i.test(e)&&(T==\"Mac OS\"?\"Tasman\":\"Trident\")||_==\"WebKit\"&&/\\bPlayStation\\b(?! Vita\\b)/i.test(R)&&\"NetFront\"){_=[M]}if(R==\"IE\"&&(M=(/; *(?:XBLWP|ZuneWP)(\\d+)/i.exec(e)||0)[1])){R+=\" Mobile\";T=\"Windows Phone \"+(/\\+$/.test(M)?M:M+\".x\");P.unshift(\"desktop mode\")}else if(/\\bWPDesktop\\b/i.test(e)){R=\"IE Mobile\";T=\"Windows Phone 8.x\";P.unshift(\"desktop mode\");B||(B=(/\\brv:([\\d.]+)/.exec(e)||0)[1])}else if(R!=\"IE\"&&_==\"Trident\"&&(M=/\\brv:([\\d.]+)/.exec(e))){if(R){P.push(\"identifying as \"+R+(B?\" \"+B:\"\"))}R=\"IE\";B=M[1]}if(k){if(isHostType(i,\"global\")){if(m){M=m.lang.System;E=M.getProperty(\"os.arch\");T=T||M.getProperty(\"os.name\")+\" \"+M.getProperty(\"os.version\")}if(g){try{B=i.require(\"ringo/engine\").version.join(\".\");R=\"RingoJS\"}catch(e){if((M=i.system)&&M.global.system==i.system){R=\"Narwhal\";T||(T=M[0].os||null)}}if(!R){R=\"Rhino\"}}else if(typeof i.process==\"object\"&&!i.process.browser&&(M=i.process)){if(typeof M.versions==\"object\"){if(typeof M.versions.electron==\"string\"){P.push(\"Node \"+M.versions.node);R=\"Electron\";B=M.versions.electron}else if(typeof M.versions.nw==\"string\"){P.push(\"Chromium \"+B,\"Node \"+M.versions.node);R=\"NW.js\";B=M.versions.nw}}if(!R){R=\"Node.js\";E=M.arch;T=M.platform;B=/[\\d.]+/.exec(M.version);B=B?B[0]:null}}}else if(getClassOf(M=i.runtime)==p){R=\"Adobe AIR\";T=M.flash.system.Capabilities.os}else if(getClassOf(M=i.phantom)==x){R=\"PhantomJS\";B=(M=M.version||null)&&M.major+\".\"+M.minor+\".\"+M.patch}else if(typeof O.documentMode==\"number\"&&(M=/\\bTrident\\/(\\d+)/i.exec(e))){B=[B,O.documentMode];if((M=+M[1]+4)!=B[1]){P.push(\"IE \"+B[1]+\" mode\");_&&(_[1]=\"\");B[1]=M}B=R==\"IE\"?String(B[1].toFixed(1)):B[0]}else if(typeof O.documentMode==\"number\"&&/^(?:Chrome|Firefox)\\b/.test(R)){P.push(\"masking as \"+R+\" \"+B);R=\"IE\";B=\"11.0\";_=[\"Trident\"];T=\"Windows\"}T=T&&format(T)}if(B&&(M=/(?:[ab]|dp|pre|[ab]\\d+pre)(?:\\d+\\+?)?$/i.exec(B)||/(?:alpha|beta)(?: ?\\d)?/i.exec(e+\";\"+(k&&n.appMinorVersion))||/\\bMinefield\\b/i.test(e)&&\"a\")){C=/b/i.test(M)?\"beta\":\"alpha\";B=B.replace(RegExp(M+\"\\\\+?$\"),\"\")+(C==\"beta\"?v:h)+(/\\d+\\+?/.exec(M)||\"\")}if(R==\"Fennec\"||R==\"Firefox\"&&/\\b(?:Android|Firefox OS|KaiOS)\\b/.test(T)){R=\"Firefox Mobile\"}else if(R==\"Maxthon\"&&B){B=B.replace(/\\.[\\d.]+/,\".x\")}else if(/\\bXbox\\b/i.test(A)){if(A==\"Xbox 360\"){T=null}if(A==\"Xbox 360\"&&/\\bIEMobile\\b/.test(e)){P.unshift(\"mobile mode\")}}else if((/^(?:Chrome|IE|Opera)$/.test(R)||R&&!A&&!/Browser|Mobi/.test(R))&&(T==\"Windows CE\"||/Mobi/i.test(e))){R+=\" Mobile\"}else if(R==\"IE\"&&k){try{if(i.external===null){P.unshift(\"platform preview\")}}catch(e){P.unshift(\"embedded\")}}else if((/\\bBlackBerry\\b/.test(A)||/\\bBB10\\b/.test(e))&&(M=(RegExp(A.replace(/ +/g,\" *\")+\"/([.\\\\d]+)\",\"i\").exec(e)||0)[1]||B)){M=[M,/BB10/.test(e)];T=(M[1]?(A=null,I=\"BlackBerry\"):\"Device Software\")+\" \"+M[0];B=null}else if(this!=forOwn&&A!=\"Wii\"&&(k&&y||/Opera/.test(R)&&/\\b(?:MSIE|Firefox)\\b/i.test(e)||R==\"Firefox\"&&/\\bOS X (?:\\d+\\.){2,}/.test(T)||R==\"IE\"&&(T&&!/^Win/.test(T)&&B>5.5||/\\bWindows XP\\b/.test(T)&&B>8||B==8&&!/\\bTrident\\b/.test(e)))&&!f.test(M=parse.call(forOwn,e.replace(f,\"\")+\";\"))&&M.name){M=\"ing as \"+M.name+((M=M.version)?\" \"+M:\"\");if(f.test(R)){if(/\\bIE\\b/.test(M)&&T==\"Mac OS\"){T=null}M=\"identify\"+M}else{M=\"mask\"+M;if(w){R=format(w.replace(/([a-z])([A-Z])/g,\"$1 $2\"))}else{R=\"Opera\"}if(/\\bIE\\b/.test(M)){T=null}if(!k){B=null}}_=[\"Presto\"];P.push(M)}if(M=(/\\bAppleWebKit\\/([\\d.]+\\+?)/i.exec(e)||0)[1]){M=[parseFloat(M.replace(/\\.(\\d)$/,\".0$1\")),M];if(R==\"Safari\"&&M[1].slice(-1)==\"+\"){R=\"WebKit Nightly\";C=\"alpha\";B=M[1].slice(0,-1)}else if(B==M[1]||B==(M[2]=(/\\bSafari\\/([\\d.]+\\+?)/i.exec(e)||0)[1])){B=null}M[1]=(/\\b(?:Headless)?Chrome\\/([\\d.]+)/i.exec(e)||0)[1];if(M[0]==537.36&&M[2]==537.36&&parseFloat(M[1])>=28&&_==\"WebKit\"){_=[\"Blink\"]}if(!k||!s&&!M[1]){_&&(_[1]=\"like Safari\");M=(M=M[0],M<400?1:M<500?2:M<526?3:M<533?4:M<534?\"4+\":M<535?5:M<537?6:M<538?7:M<601?8:M<602?9:M<604?10:M<606?11:M<608?12:\"12\")}else{_&&(_[1]=\"like Chrome\");M=M[1]||(M=M[0],M<530?1:M<532?2:M<532.05?3:M<533?4:M<534.03?5:M<534.07?6:M<534.1?7:M<534.13?8:M<534.16?9:M<534.24?10:M<534.3?11:M<535.01?12:M<535.02?\"13+\":M<535.07?15:M<535.11?16:M<535.19?17:M<536.05?18:M<536.1?19:M<537.01?20:M<537.11?\"21+\":M<537.13?23:M<537.18?24:M<537.24?25:M<537.36?26:_!=\"Blink\"?\"27\":\"28\")}_&&(_[1]+=\" \"+(M+=typeof M==\"number\"?\".x\":/[.+]/.test(M)?\"\":\"+\"));if(R==\"Safari\"&&(!B||parseInt(B)>45)){B=M}else if(R==\"Chrome\"&&/\\bHeadlessChrome/i.test(e)){P.unshift(\"headless\")}}if(R==\"Opera\"&&(M=/\\bzbov|zvav$/.exec(T))){R+=\" \";P.unshift(\"desktop mode\");if(M==\"zvav\"){R+=\"Mini\";B=null}else{R+=\"Mobile\"}T=T.replace(RegExp(\" *\"+M+\"$\"),\"\")}else if(R==\"Safari\"&&/\\bChrome\\b/.exec(_&&_[1])){P.unshift(\"desktop mode\");R=\"Chrome Mobile\";B=null;if(/\\bOS X\\b/.test(T)){I=\"Apple\";T=\"iOS 4.3+\"}else{T=null}}else if(/\\bSRWare Iron\\b/.test(R)&&!B){B=getVersion(\"Chrome\")}if(B&&B.indexOf(M=/[\\d.]+$/.exec(T))==0&&e.indexOf(\"/\"+M+\"-\")>-1){T=trim(T.replace(M,\"\"))}if(T&&T.indexOf(R)!=-1&&!RegExp(R+\" OS\").test(T)){T=T.replace(RegExp(\" *\"+qualify(R)+\" *\"),\"\")}if(_&&!/\\b(?:Avant|Nook)\\b/.test(R)&&(/Browser|Lunascape|Maxthon/.test(R)||R!=\"Safari\"&&/^iOS/.test(T)&&/\\bSafari\\b/.test(_[1])||/^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Samsung Internet|Sleipnir|SRWare Iron|Vivaldi|Web)/.test(R)&&_[1])){(M=_[_.length-1])&&P.push(M)}if(P.length){P=[\"(\"+P.join(\"; \")+\")\"]}if(I&&A&&A.indexOf(I)<0){P.push(\"on \"+I)}if(A){P.push((/^on /.test(P[P.length-1])?\"\":\"on \")+A)}if(T){M=/ ([\\d.+]+)$/.exec(T);W=M&&T.charAt(T.length-M[0].length-1)==\"/\";T={architecture:32,family:M&&!W?T.replace(M[0],\"\"):T,version:M?M[1]:null,toString:function(){var e=this.version;return this.family+(e&&!W?\" \"+e:\"\")+(this.architecture==64?\" 64-bit\":\"\")}}}if((M=/\\b(?:AMD|IA|Win|WOW|x86_|x)64\\b/i.exec(E))&&!/\\bi686\\b/i.test(E)){if(T){T.architecture=64;T.family=T.family.replace(RegExp(\" *\"+M),\"\")}if(R&&(/\\bWOW64\\b/i.test(e)||k&&/\\w(?:86|32)$/.test(n.cpuClass||n.platform)&&!/\\bWin64; x64\\b/i.test(e))){P.unshift(\"32-bit\")}}else if(T&&/^OS X/.test(T.family)&&R==\"Chrome\"&&parseFloat(B)>=39){T.architecture=64}e||(e=null);var F={};F.description=e;F.layout=_&&_[0];F.manufacturer=I;F.name=R;F.prerelease=C;F.product=A;F.ua=e;F.version=R&&B;F.os=T||{architecture:null,family:null,version:null,toString:function(){return\"null\"}};F.parse=parse;F.toString=toStringPlatform;if(F.version){P.unshift(B)}if(F.name){P.unshift(R)}if(T&&R&&!(T==String(T).split(\" \")[0]&&(T==R.split(\" \")[0]||A))){P.push(A?\"(\"+T+\")\":\"on \"+T)}if(P.length){F.description=P.join(\" \")}return F}var d=parse();if(n&&o){forOwn(d,(function(e,i){n[i]=e}))}else{r.platform=d}}).call(this)}};var i={};function __nccwpck_require__(t){var r=i[t];if(r!==undefined){return r.exports}var a=i[t]={id:t,loaded:false,exports:{}};var n=true;try{e[t].call(a.exports,a,a.exports,__nccwpck_require__);n=false}finally{if(n)delete i[t]}a.loaded=true;return a.exports}(()=>{__nccwpck_require__.nmd=e=>{e.paths=[];if(!e.children)e.children=[];return e}})();if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(541);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcGxhdGZvcm0vcGxhdGZvcm0uanMiLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU0sT0FBTyxvQkFBb0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsYUFBYSxPQUFPLDJCQUEyQixxQ0FBcUMsUUFBUSxxQkFBcUIscUNBQXFDLG1CQUFtQixxQkFBTSxZQUFZLHFCQUFNLENBQUMsZ0RBQWdELElBQUksdUJBQXVCLGdCQUFnQixXQUFXLHVCQUF1Qix1QkFBdUIsaUJBQWlCLHVCQUF1QixZQUFZLDRDQUE0QywwQkFBMEIsT0FBTywwTUFBME0saUZBQWlGLGVBQWUsWUFBWSxTQUFTLDZCQUE2QixtWkFBbVosU0FBUyxtQkFBbUIsd0JBQXdCLG1DQUFtQyxhQUFhLGFBQWEsS0FBSyxhQUFhLG1CQUFtQixVQUFVLHFEQUFxRCxxQkFBcUIsZ0JBQWdCLGdCQUFnQixjQUFjLHVCQUF1QixtREFBbUQseUJBQXlCLG1DQUFtQyxrRkFBa0Ysb0JBQW9CLCtDQUErQyxxQkFBcUIsV0FBVyxzQkFBc0IsYUFBYSxHQUFHLFNBQVMsaUJBQWlCLHdDQUF3QyxrQkFBa0IsUUFBUSxxREFBcUQsTUFBTSxJQUFJLE9BQU8sc0JBQXNCLHNCQUFzQixTQUFTLGNBQWMsZ0ZBQWdGLHdJQUF3SSwrQkFBK0Isc0NBQXNDLGdCQUFnQixnQkFBZ0IscUJBQXFCLDJCQUEyQiwyREFBMkQsTUFBTSxRQUFRLFNBQVMsV0FBVyxXQUFXLHNEQUFzRCxNQUFNLGtCQUFrQixnQ0FBZ0MsWUFBWSxxQ0FBcUMsdURBQXVELHFNQUFxTSwwREFBMEQsNkVBQTZFLGtEQUFrRCxjQUFjLG1EQUFtRCwyQkFBMkIsbUNBQW1DLDBEQUEwRCwyQ0FBMkMsRUFBRSx1Q0FBdUMsZUFBZSxtQ0FBbUMsVUFBVSw0QkFBNEIsc0JBQXNCLDRDQUE0QyxFQUFFLCtDQUErQyxFQUFFLGdEQUFnRCxFQUFFLHdDQUF3QyxFQUFFLDhCQUE4QixFQUFFLDBCQUEwQixZQUFZLG1CQUFtQixrQ0FBa0MsZUFBZSxvQ0FBb0MsRUFBRSxxQ0FBcUMsRUFBRSxxQ0FBcUMsRUFBRSxxQ0FBcUMsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSx5Q0FBeUMsRUFBRSxvQ0FBb0MsRUFBRSx5Q0FBeUMsc0RBQXNELDBEQUEwRCxzRkFBc0YsNkJBQTZCLG1CQUFtQixnQ0FBZ0MsVUFBVSx1QkFBdUIsT0FBTyx1QkFBdUIsV0FBVyxVQUFVLFNBQVMseUJBQXlCLE9BQU8sY0FBYyxtQkFBbUIsT0FBTyxhQUFhLFdBQVcsU0FBUyxzQkFBc0IsS0FBSyxXQUFXLE9BQU8sVUFBVSxVQUFVLE1BQU0sWUFBWSxvQkFBb0IsV0FBVyxPQUFPLFdBQVcsZ0JBQWdCLFFBQVEsUUFBUSxRQUFRLFVBQVUsdURBQXVELE9BQU8sbUNBQW1DLFNBQVMsY0FBYyxFQUFFLHlEQUF5RCxpQ0FBaUMsV0FBVywwQ0FBMEMsOE5BQThOLGVBQWUsc0JBQXNCLCtCQUErQixnRkFBZ0YsR0FBRyw0QkFBNEIsaUNBQWlDLGtIQUFrSCxHQUFHLG9CQUFvQiwrQkFBK0IsZ0ZBQWdGLEdBQUcsa0JBQWtCLCtCQUErQiw0QkFBNEIsZ0VBQWdFLDRCQUE0QixTQUFTLEdBQUcsdUJBQXVCLCtCQUErQiw0QkFBNEIsMEhBQTBILGlDQUFpQyxxQkFBcUIsb0dBQW9HLGVBQWUsYUFBYSx5REFBeUQsOEVBQThFLFNBQVMsR0FBRyx1QkFBdUIsK0JBQStCLHVFQUF1RSxrQ0FBa0MsR0FBRyw0QkFBNEIsNEJBQTRCLFdBQVcsOENBQThDLEdBQUcsNENBQTRDLDZCQUE2QixFQUFFLE9BQU8sR0FBRyxnQkFBZ0IsVUFBVSxrQkFBa0IsY0FBYyx1SEFBdUgsOEJBQThCLE9BQU8sNkJBQTZCLDJCQUEyQix5Q0FBeUMsNkNBQTZDLDBDQUEwQyx3Q0FBd0MsaUJBQWlCLFlBQVksdUJBQXVCLGdCQUFnQixvRUFBb0UsNkNBQTZDLFlBQVksaUtBQWlLLG9CQUFvQixvQ0FBb0MsbUJBQW1CLHVCQUF1QixZQUFZLDBCQUEwQixvQ0FBb0MsMEJBQTBCLDhDQUE4QyxxQkFBcUIsNERBQTRELHVDQUF1Qyw2REFBNkQsb0JBQW9CLFlBQVksNkVBQTZFLCtEQUErRCxPQUFPLDhFQUE4RSxpRUFBaUUsbUVBQW1FLHNCQUFzQixPQUFPLHVPQUF1TyxxVEFBcVQsTUFBTSxtQkFBbUIsMENBQTBDLGFBQWEsNENBQTRDLDBCQUEwQixrQ0FBa0MsY0FBYyxzQkFBc0IsMEJBQTBCLHVDQUF1Qyw0REFBNEQsTUFBTSx5Q0FBeUMsT0FBTyxPQUFPLE1BQU0sMkJBQTJCLE1BQU0sZ0JBQWdCLDJCQUEyQiw4REFBOEQsTUFBTSxJQUFJLDhDQUE4QyxZQUFZLFNBQVMsNENBQTRDLFlBQVksc0JBQXNCLE9BQU8sV0FBVyx1RUFBdUUsZ0NBQWdDLHlDQUF5QyxnQ0FBZ0MsYUFBYSxzQkFBc0Isd0NBQXdDLDhDQUE4QyxVQUFVLGlCQUFpQixPQUFPLFlBQVksU0FBUyxhQUFhLDJCQUEyQixnQkFBZ0Isb0NBQW9DLGNBQWMsaUNBQWlDLG9DQUFvQyxjQUFjLHVEQUF1RCwwRUFBMEUscUJBQXFCLHNCQUFzQiwyQkFBMkIsYUFBYSxPQUFPLHVDQUF1QywwRUFBMEUsOEJBQThCLE9BQU8sU0FBUyxjQUFjLFlBQVksZUFBZSxnR0FBZ0csMkRBQTJELDhCQUE4Qix5RUFBeUUsMEVBQTBFLG1CQUFtQix5QkFBeUIsNkJBQTZCLDZCQUE2QixrQkFBa0IsT0FBTywwQ0FBMEMsMEJBQTBCLCtHQUErRyxhQUFhLG9CQUFvQixJQUFJLHNCQUFzQiwrQkFBK0IsU0FBUyx1QkFBdUIsK0hBQStILHFCQUFxQiw0REFBNEQsT0FBTyx5SEFBeUgsR0FBRyw2SkFBNkosYUFBYSw0Q0FBNEMsY0FBYyxrQ0FBa0MsT0FBTyxlQUFlLEtBQUssV0FBVyxNQUFNLCtDQUErQyxLQUFLLFVBQVUscUJBQXFCLE9BQU8sT0FBTyxRQUFRLGFBQWEsVUFBVSxvREFBb0QsOENBQThDLHFDQUFxQyxtQkFBbUIsVUFBVSxtQkFBbUIscUVBQXFFLE9BQU8sd0RBQXdELGtFQUFrRSxZQUFZLGtCQUFrQix3QkFBd0IsOEhBQThILEtBQUssd0JBQXdCLHVUQUF1VCxrRUFBa0Usc0NBQXNDLElBQUksa0RBQWtELHVCQUF1QiwyQ0FBMkMsT0FBTywwQkFBMEIsY0FBYyxVQUFVLE9BQU8sS0FBSyxZQUFZLG1DQUFtQyxpREFBaUQsMEJBQTBCLGtCQUFrQixPQUFPLHVCQUF1QixVQUFVLGFBQWEsS0FBSyxRQUFRLHVDQUF1Qyx1QkFBdUIsa0VBQWtFLHdCQUF3QixrREFBa0QsNkNBQTZDLDhQQUE4UCw2QkFBNkIsYUFBYSxpQkFBaUIsUUFBUSx5QkFBeUIsZ0JBQWdCLE1BQU0sZ0RBQWdELE1BQU0sd0JBQXdCLDJDQUEyQyxHQUFHLDBGQUEwRixtQkFBbUIsMkVBQTJFLHlFQUF5RSxNQUFNLGtCQUFrQiw2Q0FBNkMsd0ZBQXdGLGtCQUFrQixxQkFBcUIsbUVBQW1FLGtCQUFrQixZQUFZLFNBQVMsZ0JBQWdCLGlCQUFpQixpQkFBaUIsU0FBUyxlQUFlLFlBQVksT0FBTyxlQUFlLFNBQVMsK0RBQStELGVBQWUsY0FBYyw0QkFBNEIsY0FBYyxhQUFhLFdBQVcsYUFBYSxpRUFBaUUsNEJBQTRCLGFBQWEsMEJBQTBCLFNBQVMsY0FBYyxTQUFTLHdCQUF3QixPQUFPLEdBQUcsS0FBSyxjQUFjLGVBQWUsU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksOEJBQThCLFdBQVcsSUFBSSxxREFBcUQsUUFBUSxRQUFRLGlCQUFpQixjQUFjLGlCQUFpQixNQUFNLDRCQUE0QixXQUFXLDZCQUE2QixVQUFVLElBQUksbUVBQW1FLFNBQVMsS0FBSywrQkFBK0IsaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcGxhdGZvcm0vcGxhdGZvcm0uanM/OTc5YSJdLCJzb3VyY2VzQ29udGVudCI6WyIoKCk9Pnt2YXIgZT17NTQxOmZ1bmN0aW9uKGUsaSx0KXtlPXQubm1kKGUpO1xuLyohXG4gKiBQbGF0Zm9ybS5qcyB2MS4zLjZcbiAqIENvcHlyaWdodCAyMDE0LTIwMjAgQmVuamFtaW4gVGFuXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDEzIEpvaG4tRGF2aWQgRGFsdG9uXG4gKiBBdmFpbGFibGUgdW5kZXIgTUlUIGxpY2Vuc2VcbiAqLyhmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PXtmdW5jdGlvbjp0cnVlLG9iamVjdDp0cnVlfTt2YXIgcj10W3R5cGVvZiB3aW5kb3ddJiZ3aW5kb3d8fHRoaXM7dmFyIGE9cjt2YXIgbj10W3R5cGVvZiBpXSYmaTt2YXIgbz10W1wib2JqZWN0XCJdJiZlJiYhZS5ub2RlVHlwZSYmZTt2YXIgbD1uJiZvJiZ0eXBlb2YgZ2xvYmFsPT1cIm9iamVjdFwiJiZnbG9iYWw7aWYobCYmKGwuZ2xvYmFsPT09bHx8bC53aW5kb3c9PT1sfHxsLnNlbGY9PT1sKSl7cj1sfXZhciBzPU1hdGgucG93KDIsNTMpLTE7dmFyIGY9L1xcYk9wZXJhLzt2YXIgYj10aGlzO3ZhciBjPU9iamVjdC5wcm90b3R5cGU7dmFyIHA9Yy5oYXNPd25Qcm9wZXJ0eTt2YXIgdT1jLnRvU3RyaW5nO2Z1bmN0aW9uIGNhcGl0YWxpemUoZSl7ZT1TdHJpbmcoZSk7cmV0dXJuIGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKX1mdW5jdGlvbiBjbGVhbnVwT1MoZSxpLHQpe3ZhciByPXtcIjEwLjBcIjpcIjEwXCIsNi40OlwiMTAgVGVjaG5pY2FsIFByZXZpZXdcIiw2LjM6XCI4LjFcIiw2LjI6XCI4XCIsNi4xOlwiU2VydmVyIDIwMDggUjIgLyA3XCIsXCI2LjBcIjpcIlNlcnZlciAyMDA4IC8gVmlzdGFcIiw1LjI6XCJTZXJ2ZXIgMjAwMyAvIFhQIDY0LWJpdFwiLDUuMTpcIlhQXCIsNS4wMTpcIjIwMDAgU1AxXCIsXCI1LjBcIjpcIjIwMDBcIixcIjQuMFwiOlwiTlRcIixcIjQuOTBcIjpcIk1FXCJ9O2lmKGkmJnQmJi9eV2luL2kudGVzdChlKSYmIS9eV2luZG93cyBQaG9uZSAvaS50ZXN0KGUpJiYocj1yWy9bXFxkLl0rJC8uZXhlYyhlKV0pKXtlPVwiV2luZG93cyBcIityfWU9U3RyaW5nKGUpO2lmKGkmJnQpe2U9ZS5yZXBsYWNlKFJlZ0V4cChpLFwiaVwiKSx0KX1lPWZvcm1hdChlLnJlcGxhY2UoLyBjZSQvaSxcIiBDRVwiKS5yZXBsYWNlKC9cXGJocHcvaSxcIndlYlwiKS5yZXBsYWNlKC9cXGJNYWNpbnRvc2hcXGIvLFwiTWFjIE9TXCIpLnJlcGxhY2UoL19Qb3dlclBDXFxiL2ksXCIgT1NcIikucmVwbGFjZSgvXFxiKE9TIFgpIFteIFxcZF0rL2ksXCIkMVwiKS5yZXBsYWNlKC9cXGJNYWMgKE9TIFgpXFxiLyxcIiQxXCIpLnJlcGxhY2UoL1xcLyhcXGQpLyxcIiAkMVwiKS5yZXBsYWNlKC9fL2csXCIuXCIpLnJlcGxhY2UoLyg/OiBCZVBDfFsgLl0qZmNbIFxcZC5dKykkL2ksXCJcIikucmVwbGFjZSgvXFxieDg2XFwuNjRcXGIvZ2ksXCJ4ODZfNjRcIikucmVwbGFjZSgvXFxiKFdpbmRvd3MgUGhvbmUpIE9TXFxiLyxcIiQxXCIpLnJlcGxhY2UoL1xcYihDaHJvbWUgT1MgXFx3KykgW1xcZC5dK1xcYi8sXCIkMVwiKS5zcGxpdChcIiBvbiBcIilbMF0pO3JldHVybiBlfWZ1bmN0aW9uIGVhY2goZSxpKXt2YXIgdD0tMSxyPWU/ZS5sZW5ndGg6MDtpZih0eXBlb2Ygcj09XCJudW1iZXJcIiYmcj4tMSYmcjw9cyl7d2hpbGUoKyt0PHIpe2koZVt0XSx0LGUpfX1lbHNle2Zvck93bihlLGkpfX1mdW5jdGlvbiBmb3JtYXQoZSl7ZT10cmltKGUpO3JldHVybi9eKD86d2ViT1N8aSg/Ok9TfFApKS8udGVzdChlKT9lOmNhcGl0YWxpemUoZSl9ZnVuY3Rpb24gZm9yT3duKGUsaSl7Zm9yKHZhciB0IGluIGUpe2lmKHAuY2FsbChlLHQpKXtpKGVbdF0sdCxlKX19fWZ1bmN0aW9uIGdldENsYXNzT2YoZSl7cmV0dXJuIGU9PW51bGw/Y2FwaXRhbGl6ZShlKTp1LmNhbGwoZSkuc2xpY2UoOCwtMSl9ZnVuY3Rpb24gaXNIb3N0VHlwZShlLGkpe3ZhciB0PWUhPW51bGw/dHlwZW9mIGVbaV06XCJudW1iZXJcIjtyZXR1cm4hL14oPzpib29sZWFufG51bWJlcnxzdHJpbmd8dW5kZWZpbmVkKSQvLnRlc3QodCkmJih0PT1cIm9iamVjdFwiPyEhZVtpXTp0cnVlKX1mdW5jdGlvbiBxdWFsaWZ5KGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZSgvKFsgLV0pKD8hJCkvZyxcIiQxP1wiKX1mdW5jdGlvbiByZWR1Y2UoZSxpKXt2YXIgdD1udWxsO2VhY2goZSwoZnVuY3Rpb24ocixhKXt0PWkodCxyLGEsZSl9KSk7cmV0dXJuIHR9ZnVuY3Rpb24gdHJpbShlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoL14gK3wgKyQvZyxcIlwiKX1mdW5jdGlvbiBwYXJzZShlKXt2YXIgaT1yO3ZhciB0PWUmJnR5cGVvZiBlPT1cIm9iamVjdFwiJiZnZXRDbGFzc09mKGUpIT1cIlN0cmluZ1wiO2lmKHQpe2k9ZTtlPW51bGx9dmFyIG49aS5uYXZpZ2F0b3J8fHt9O3ZhciBvPW4udXNlckFnZW50fHxcIlwiO2V8fChlPW8pO3ZhciBsPXR8fGI9PWE7dmFyIHM9dD8hIW4ubGlrZUNocm9tZTovXFxiQ2hyb21lXFxiLy50ZXN0KGUpJiYhL2ludGVybmFsfFxcbi9pLnRlc3QodS50b1N0cmluZygpKTt2YXIgYz1cIk9iamVjdFwiLHA9dD9jOlwiU2NyaXB0QnJpZGdpbmdQcm94eU9iamVjdFwiLGQ9dD9jOlwiRW52aXJvbm1lbnRcIixTPXQmJmkuamF2YT9cIkphdmFQYWNrYWdlXCI6Z2V0Q2xhc3NPZihpLmphdmEpLHg9dD9jOlwiUnVudGltZU9iamVjdFwiO3ZhciBtPS9cXGJKYXZhLy50ZXN0KFMpJiZpLmphdmE7dmFyIGc9bSYmZ2V0Q2xhc3NPZihpLmVudmlyb25tZW50KT09ZDt2YXIgaD1tP1wiYVwiOlwizrFcIjt2YXIgdj1tP1wiYlwiOlwizrJcIjt2YXIgTz1pLmRvY3VtZW50fHx7fTt2YXIgeT1pLm9wZXJhbWluaXx8aS5vcGVyYTt2YXIgdz1mLnRlc3Qodz10JiZ5P3lbXCJbW0NsYXNzXV1cIl06Z2V0Q2xhc3NPZih5KSk/dzp5PW51bGw7dmFyIE07dmFyIEU9ZTt2YXIgUD1bXTt2YXIgQz1udWxsO3ZhciBrPWU9PW87dmFyIEI9ayYmeSYmdHlwZW9mIHkudmVyc2lvbj09XCJmdW5jdGlvblwiJiZ5LnZlcnNpb24oKTt2YXIgVzt2YXIgXz1nZXRMYXlvdXQoW3tsYWJlbDpcIkVkZ2VIVE1MXCIscGF0dGVybjpcIkVkZ2VcIn0sXCJUcmlkZW50XCIse2xhYmVsOlwiV2ViS2l0XCIscGF0dGVybjpcIkFwcGxlV2ViS2l0XCJ9LFwiaUNhYlwiLFwiUHJlc3RvXCIsXCJOZXRGcm9udFwiLFwiVGFzbWFuXCIsXCJLSFRNTFwiLFwiR2Vja29cIl0pO3ZhciBSPWdldE5hbWUoW1wiQWRvYmUgQUlSXCIsXCJBcm9yYVwiLFwiQXZhbnQgQnJvd3NlclwiLFwiQnJlYWNoXCIsXCJDYW1pbm9cIixcIkVsZWN0cm9uXCIsXCJFcGlwaGFueVwiLFwiRmVubmVjXCIsXCJGbG9ja1wiLFwiR2FsZW9uXCIsXCJHcmVlbkJyb3dzZXJcIixcImlDYWJcIixcIkljZXdlYXNlbFwiLFwiSy1NZWxlb25cIixcIktvbnF1ZXJvclwiLFwiTHVuYXNjYXBlXCIsXCJNYXh0aG9uXCIse2xhYmVsOlwiTWljcm9zb2Z0IEVkZ2VcIixwYXR0ZXJuOlwiKD86RWRnZXxFZGd8RWRnQXxFZGdpT1MpXCJ9LFwiTWlkb3JpXCIsXCJOb29rIEJyb3dzZXJcIixcIlBhbGVNb29uXCIsXCJQaGFudG9tSlNcIixcIlJhdmVuXCIsXCJSZWtvbnFcIixcIlJvY2tNZWx0XCIse2xhYmVsOlwiU2Ftc3VuZyBJbnRlcm5ldFwiLHBhdHRlcm46XCJTYW1zdW5nQnJvd3NlclwifSxcIlNlYU1vbmtleVwiLHtsYWJlbDpcIlNpbGtcIixwYXR0ZXJuOlwiKD86Q2xvdWQ5fFNpbGstQWNjZWxlcmF0ZWQpXCJ9LFwiU2xlaXBuaXJcIixcIlNsaW1Ccm93c2VyXCIse2xhYmVsOlwiU1JXYXJlIElyb25cIixwYXR0ZXJuOlwiSXJvblwifSxcIlN1bnJpc2VcIixcIlN3aWZ0Zm94XCIsXCJWaXZhbGRpXCIsXCJXYXRlcmZveFwiLFwiV2ViUG9zaXRpdmVcIix7bGFiZWw6XCJZYW5kZXggQnJvd3NlclwiLHBhdHRlcm46XCJZYUJyb3dzZXJcIn0se2xhYmVsOlwiVUMgQnJvd3NlclwiLHBhdHRlcm46XCJVQ0Jyb3dzZXJcIn0sXCJPcGVyYSBNaW5pXCIse2xhYmVsOlwiT3BlcmEgTWluaVwiLHBhdHRlcm46XCJPUGlPU1wifSxcIk9wZXJhXCIse2xhYmVsOlwiT3BlcmFcIixwYXR0ZXJuOlwiT1BSXCJ9LFwiQ2hyb21pdW1cIixcIkNocm9tZVwiLHtsYWJlbDpcIkNocm9tZVwiLHBhdHRlcm46XCIoPzpIZWFkbGVzc0Nocm9tZSlcIn0se2xhYmVsOlwiQ2hyb21lIE1vYmlsZVwiLHBhdHRlcm46XCIoPzpDcmlPU3xDck1vKVwifSx7bGFiZWw6XCJGaXJlZm94XCIscGF0dGVybjpcIig/OkZpcmVmb3h8TWluZWZpZWxkKVwifSx7bGFiZWw6XCJGaXJlZm94IGZvciBpT1NcIixwYXR0ZXJuOlwiRnhpT1NcIn0se2xhYmVsOlwiSUVcIixwYXR0ZXJuOlwiSUVNb2JpbGVcIn0se2xhYmVsOlwiSUVcIixwYXR0ZXJuOlwiTVNJRVwifSxcIlNhZmFyaVwiXSk7dmFyIEE9Z2V0UHJvZHVjdChbe2xhYmVsOlwiQmxhY2tCZXJyeVwiLHBhdHRlcm46XCJCQjEwXCJ9LFwiQmxhY2tCZXJyeVwiLHtsYWJlbDpcIkdhbGF4eSBTXCIscGF0dGVybjpcIkdULUk5MDAwXCJ9LHtsYWJlbDpcIkdhbGF4eSBTMlwiLHBhdHRlcm46XCJHVC1JOTEwMFwifSx7bGFiZWw6XCJHYWxheHkgUzNcIixwYXR0ZXJuOlwiR1QtSTkzMDBcIn0se2xhYmVsOlwiR2FsYXh5IFM0XCIscGF0dGVybjpcIkdULUk5NTAwXCJ9LHtsYWJlbDpcIkdhbGF4eSBTNVwiLHBhdHRlcm46XCJTTS1HOTAwXCJ9LHtsYWJlbDpcIkdhbGF4eSBTNlwiLHBhdHRlcm46XCJTTS1HOTIwXCJ9LHtsYWJlbDpcIkdhbGF4eSBTNiBFZGdlXCIscGF0dGVybjpcIlNNLUc5MjVcIn0se2xhYmVsOlwiR2FsYXh5IFM3XCIscGF0dGVybjpcIlNNLUc5MzBcIn0se2xhYmVsOlwiR2FsYXh5IFM3IEVkZ2VcIixwYXR0ZXJuOlwiU00tRzkzNVwifSxcIkdvb2dsZSBUVlwiLFwiTHVtaWFcIixcImlQYWRcIixcImlQb2RcIixcImlQaG9uZVwiLFwiS2luZGxlXCIse2xhYmVsOlwiS2luZGxlIEZpcmVcIixwYXR0ZXJuOlwiKD86Q2xvdWQ5fFNpbGstQWNjZWxlcmF0ZWQpXCJ9LFwiTmV4dXNcIixcIk5vb2tcIixcIlBsYXlCb29rXCIsXCJQbGF5U3RhdGlvbiBWaXRhXCIsXCJQbGF5U3RhdGlvblwiLFwiVG91Y2hQYWRcIixcIlRyYW5zZm9ybWVyXCIse2xhYmVsOlwiV2lpIFVcIixwYXR0ZXJuOlwiV2lpVVwifSxcIldpaVwiLFwiWGJveCBPbmVcIix7bGFiZWw6XCJYYm94IDM2MFwiLHBhdHRlcm46XCJYYm94XCJ9LFwiWG9vbVwiXSk7dmFyIEk9Z2V0TWFudWZhY3R1cmVyKHtBcHBsZTp7aVBhZDoxLGlQaG9uZToxLGlQb2Q6MX0sQWxjYXRlbDp7fSxBcmNob3M6e30sQW1hem9uOntLaW5kbGU6MSxcIktpbmRsZSBGaXJlXCI6MX0sQXN1czp7VHJhbnNmb3JtZXI6MX0sXCJCYXJuZXMgJiBOb2JsZVwiOntOb29rOjF9LEJsYWNrQmVycnk6e1BsYXlCb29rOjF9LEdvb2dsZTp7XCJHb29nbGUgVFZcIjoxLE5leHVzOjF9LEhQOntUb3VjaFBhZDoxfSxIVEM6e30sSHVhd2VpOnt9LExlbm92bzp7fSxMRzp7fSxNaWNyb3NvZnQ6e1hib3g6MSxcIlhib3ggT25lXCI6MX0sTW90b3JvbGE6e1hvb206MX0sTmludGVuZG86e1wiV2lpIFVcIjoxLFdpaToxfSxOb2tpYTp7THVtaWE6MX0sT3Bwbzp7fSxTYW1zdW5nOntcIkdhbGF4eSBTXCI6MSxcIkdhbGF4eSBTMlwiOjEsXCJHYWxheHkgUzNcIjoxLFwiR2FsYXh5IFM0XCI6MX0sU29ueTp7UGxheVN0YXRpb246MSxcIlBsYXlTdGF0aW9uIFZpdGFcIjoxfSxYaWFvbWk6e01pOjEsUmVkbWk6MX19KTt2YXIgVD1nZXRPUyhbXCJXaW5kb3dzIFBob25lXCIsXCJLYWlPU1wiLFwiQW5kcm9pZFwiLFwiQ2VudE9TXCIse2xhYmVsOlwiQ2hyb21lIE9TXCIscGF0dGVybjpcIkNyT1NcIn0sXCJEZWJpYW5cIix7bGFiZWw6XCJEcmFnb25GbHkgQlNEXCIscGF0dGVybjpcIkRyYWdvbkZseVwifSxcIkZlZG9yYVwiLFwiRnJlZUJTRFwiLFwiR2VudG9vXCIsXCJIYWlrdVwiLFwiS3VidW50dVwiLFwiTGludXggTWludFwiLFwiT3BlbkJTRFwiLFwiUmVkIEhhdFwiLFwiU3VTRVwiLFwiVWJ1bnR1XCIsXCJYdWJ1bnR1XCIsXCJDeWd3aW5cIixcIlN5bWJpYW4gT1NcIixcImhwd09TXCIsXCJ3ZWJPUyBcIixcIndlYk9TXCIsXCJUYWJsZXQgT1NcIixcIlRpemVuXCIsXCJMaW51eFwiLFwiTWFjIE9TIFhcIixcIk1hY2ludG9zaFwiLFwiTWFjXCIsXCJXaW5kb3dzIDk4O1wiLFwiV2luZG93cyBcIl0pO2Z1bmN0aW9uIGdldExheW91dChpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCl7cmV0dXJuIGl8fFJlZ0V4cChcIlxcXFxiXCIrKHQucGF0dGVybnx8cXVhbGlmeSh0KSkrXCJcXFxcYlwiLFwiaVwiKS5leGVjKGUpJiYodC5sYWJlbHx8dCl9KSl9ZnVuY3Rpb24gZ2V0TWFudWZhY3R1cmVyKGkpe3JldHVybiByZWR1Y2UoaSwoZnVuY3Rpb24oaSx0LHIpe3JldHVybiBpfHwodFtBXXx8dFsvXlthLXpdKyg/OiArW2Etel0rXFxiKSovaS5leGVjKEEpXXx8UmVnRXhwKFwiXFxcXGJcIitxdWFsaWZ5KHIpK1wiKD86XFxcXGJ8XFxcXHcqXFxcXGQpXCIsXCJpXCIpLmV4ZWMoZSkpJiZyfSkpfWZ1bmN0aW9uIGdldE5hbWUoaSl7cmV0dXJuIHJlZHVjZShpLChmdW5jdGlvbihpLHQpe3JldHVybiBpfHxSZWdFeHAoXCJcXFxcYlwiKyh0LnBhdHRlcm58fHF1YWxpZnkodCkpK1wiXFxcXGJcIixcImlcIikuZXhlYyhlKSYmKHQubGFiZWx8fHQpfSkpfWZ1bmN0aW9uIGdldE9TKGkpe3JldHVybiByZWR1Y2UoaSwoZnVuY3Rpb24oaSx0KXt2YXIgcj10LnBhdHRlcm58fHF1YWxpZnkodCk7aWYoIWkmJihpPVJlZ0V4cChcIlxcXFxiXCIrcitcIig/Oi9bXFxcXGQuXSt8WyBcXFxcdy5dKilcIixcImlcIikuZXhlYyhlKSkpe2k9Y2xlYW51cE9TKGkscix0LmxhYmVsfHx0KX1yZXR1cm4gaX0pKX1mdW5jdGlvbiBnZXRQcm9kdWN0KGkpe3JldHVybiByZWR1Y2UoaSwoZnVuY3Rpb24oaSx0KXt2YXIgcj10LnBhdHRlcm58fHF1YWxpZnkodCk7aWYoIWkmJihpPVJlZ0V4cChcIlxcXFxiXCIrcitcIiAqXFxcXGQrWy5cXFxcd19dKlwiLFwiaVwiKS5leGVjKGUpfHxSZWdFeHAoXCJcXFxcYlwiK3IrXCIgKlxcXFx3Ky1bXFxcXHddKlwiLFwiaVwiKS5leGVjKGUpfHxSZWdFeHAoXCJcXFxcYlwiK3IrXCIoPzo7ICooPzpbYS16XStbXy1dKT9bYS16XStcXFxcZCt8W14gKCk7LV0qKVwiLFwiaVwiKS5leGVjKGUpKSl7aWYoKGk9U3RyaW5nKHQubGFiZWwmJiFSZWdFeHAocixcImlcIikudGVzdCh0LmxhYmVsKT90LmxhYmVsOmkpLnNwbGl0KFwiL1wiKSlbMV0mJiEvW1xcZC5dKy8udGVzdChpWzBdKSl7aVswXSs9XCIgXCIraVsxXX10PXQubGFiZWx8fHQ7aT1mb3JtYXQoaVswXS5yZXBsYWNlKFJlZ0V4cChyLFwiaVwiKSx0KS5yZXBsYWNlKFJlZ0V4cChcIjsgKig/OlwiK3QrXCJbXy1dKT9cIixcImlcIiksXCIgXCIpLnJlcGxhY2UoUmVnRXhwKFwiKFwiK3QrXCIpWy1fLl0/KFxcXFx3KVwiLFwiaVwiKSxcIiQxICQyXCIpKX1yZXR1cm4gaX0pKX1mdW5jdGlvbiBnZXRWZXJzaW9uKGkpe3JldHVybiByZWR1Y2UoaSwoZnVuY3Rpb24oaSx0KXtyZXR1cm4gaXx8KFJlZ0V4cCh0K1wiKD86LVtcXFxcZC5dKy98KD86IGZvciBbXFxcXHctXSspP1sgLy1dKShbXFxcXGQuXStbXiAoKTsvXy1dKilcIixcImlcIikuZXhlYyhlKXx8MClbMV18fG51bGx9KSl9ZnVuY3Rpb24gdG9TdHJpbmdQbGF0Zm9ybSgpe3JldHVybiB0aGlzLmRlc2NyaXB0aW9ufHxcIlwifV8mJihfPVtfXSk7aWYoL1xcYkFuZHJvaWRcXGIvLnRlc3QoVCkmJiFBJiYoTT0vXFxiQW5kcm9pZFteO10qOyguKj8pKD86QnVpbGR8XFwpIEFwcGxlV2ViS2l0KVxcYi9pLmV4ZWMoZSkpKXtBPXRyaW0oTVsxXSkucmVwbGFjZSgvXlthLXpdezJ9LVthLXpdezJ9O1xccyovaSxcIlwiKXx8bnVsbH1pZihJJiYhQSl7QT1nZXRQcm9kdWN0KFtJXSl9ZWxzZSBpZihJJiZBKXtBPUEucmVwbGFjZShSZWdFeHAoXCJeKFwiK3F1YWxpZnkoSSkrXCIpWy1fLlxcXFxzXVwiLFwiaVwiKSxJK1wiIFwiKS5yZXBsYWNlKFJlZ0V4cChcIl4oXCIrcXVhbGlmeShJKStcIilbLV8uXT8oXFxcXHcpXCIsXCJpXCIpLEkrXCIgJDJcIil9aWYoTT0vXFxiR29vZ2xlIFRWXFxiLy5leGVjKEEpKXtBPU1bMF19aWYoL1xcYlNpbXVsYXRvclxcYi9pLnRlc3QoZSkpe0E9KEE/QStcIiBcIjpcIlwiKStcIlNpbXVsYXRvclwifWlmKFI9PVwiT3BlcmEgTWluaVwiJiYvXFxiT1BpT1NcXGIvLnRlc3QoZSkpe1AucHVzaChcInJ1bm5pbmcgaW4gVHVyYm8vVW5jb21wcmVzc2VkIG1vZGVcIil9aWYoUj09XCJJRVwiJiYvXFxibGlrZSBpUGhvbmUgT1NcXGIvLnRlc3QoZSkpe009cGFyc2UoZS5yZXBsYWNlKC9saWtlIGlQaG9uZSBPUy8sXCJcIikpO0k9TS5tYW51ZmFjdHVyZXI7QT1NLnByb2R1Y3R9ZWxzZSBpZigvXmlQLy50ZXN0KEEpKXtSfHwoUj1cIlNhZmFyaVwiKTtUPVwiaU9TXCIrKChNPS8gT1MgKFtcXGRfXSspL2kuZXhlYyhlKSk/XCIgXCIrTVsxXS5yZXBsYWNlKC9fL2csXCIuXCIpOlwiXCIpfWVsc2UgaWYoUj09XCJLb25xdWVyb3JcIiYmL15MaW51eFxcYi9pLnRlc3QoVCkpe1Q9XCJLdWJ1bnR1XCJ9ZWxzZSBpZihJJiZJIT1cIkdvb2dsZVwiJiYoL0Nocm9tZS8udGVzdChSKSYmIS9cXGJNb2JpbGUgU2FmYXJpXFxiL2kudGVzdChlKXx8L1xcYlZpdGFcXGIvLnRlc3QoQSkpfHwvXFxiQW5kcm9pZFxcYi8udGVzdChUKSYmL15DaHJvbWUvLnRlc3QoUikmJi9cXGJWZXJzaW9uXFwvL2kudGVzdChlKSl7Uj1cIkFuZHJvaWQgQnJvd3NlclwiO1Q9L1xcYkFuZHJvaWRcXGIvLnRlc3QoVCk/VDpcIkFuZHJvaWRcIn1lbHNlIGlmKFI9PVwiU2lsa1wiKXtpZighL1xcYk1vYmkvaS50ZXN0KGUpKXtUPVwiQW5kcm9pZFwiO1AudW5zaGlmdChcImRlc2t0b3AgbW9kZVwiKX1pZigvQWNjZWxlcmF0ZWQgKj0gKnRydWUvaS50ZXN0KGUpKXtQLnVuc2hpZnQoXCJhY2NlbGVyYXRlZFwiKX19ZWxzZSBpZihSPT1cIlVDIEJyb3dzZXJcIiYmL1xcYlVDV0VCXFxiLy50ZXN0KGUpKXtQLnB1c2goXCJzcGVlZCBtb2RlXCIpfWVsc2UgaWYoUj09XCJQYWxlTW9vblwiJiYoTT0vXFxiRmlyZWZveFxcLyhbXFxkLl0rKVxcYi8uZXhlYyhlKSkpe1AucHVzaChcImlkZW50aWZ5aW5nIGFzIEZpcmVmb3ggXCIrTVsxXSl9ZWxzZSBpZihSPT1cIkZpcmVmb3hcIiYmKE09L1xcYihNb2JpbGV8VGFibGV0fFRWKVxcYi9pLmV4ZWMoZSkpKXtUfHwoVD1cIkZpcmVmb3ggT1NcIik7QXx8KEE9TVsxXSl9ZWxzZSBpZighUnx8KE09IS9cXGJNaW5lZmllbGRcXGIvaS50ZXN0KGUpJiYvXFxiKD86RmlyZWZveHxTYWZhcmkpXFxiLy5leGVjKFIpKSl7aWYoUiYmIUEmJi9bXFwvLF18XlteKF0rP1xcKS8udGVzdChlLnNsaWNlKGUuaW5kZXhPZihNK1wiL1wiKSs4KSkpe1I9bnVsbH1pZigoTT1BfHxJfHxUKSYmKEF8fEl8fC9cXGIoPzpBbmRyb2lkfFN5bWJpYW4gT1N8VGFibGV0IE9TfHdlYk9TKVxcYi8udGVzdChUKSkpe1I9L1thLXpdKyg/OiBIYXQpPy9pLmV4ZWMoL1xcYkFuZHJvaWRcXGIvLnRlc3QoVCk/VDpNKStcIiBCcm93c2VyXCJ9fWVsc2UgaWYoUj09XCJFbGVjdHJvblwiJiYoTT0oL1xcYkNocm9tZVxcLyhbXFxkLl0rKVxcYi8uZXhlYyhlKXx8MClbMV0pKXtQLnB1c2goXCJDaHJvbWl1bSBcIitNKX1pZighQil7Qj1nZXRWZXJzaW9uKFtcIig/OkNsb3VkOXxDcmlPU3xDck1vfEVkZ2V8RWRnfEVkZ0F8RWRnaU9TfEZ4aU9TfEhlYWRsZXNzQ2hyb21lfElFTW9iaWxlfElyb258T3BlcmEgP01pbml8T1BpT1N8T1BSfFJhdmVufFNhbXN1bmdCcm93c2VyfFNpbGsoPyEvW1xcXFxkLl0rJCl8VUNCcm93c2VyfFlhQnJvd3NlcilcIixcIlZlcnNpb25cIixxdWFsaWZ5KFIpLFwiKD86RmlyZWZveHxNaW5lZmllbGR8TmV0RnJvbnQpXCJdKX1pZihNPV89PVwiaUNhYlwiJiZwYXJzZUZsb2F0KEIpPjMmJlwiV2ViS2l0XCJ8fC9cXGJPcGVyYVxcYi8udGVzdChSKSYmKC9cXGJPUFJcXGIvLnRlc3QoZSk/XCJCbGlua1wiOlwiUHJlc3RvXCIpfHwvXFxiKD86TWlkb3JpfE5vb2t8U2FmYXJpKVxcYi9pLnRlc3QoZSkmJiEvXig/OlRyaWRlbnR8RWRnZUhUTUwpJC8udGVzdChfKSYmXCJXZWJLaXRcInx8IV8mJi9cXGJNU0lFXFxiL2kudGVzdChlKSYmKFQ9PVwiTWFjIE9TXCI/XCJUYXNtYW5cIjpcIlRyaWRlbnRcIil8fF89PVwiV2ViS2l0XCImJi9cXGJQbGF5U3RhdGlvblxcYig/ISBWaXRhXFxiKS9pLnRlc3QoUikmJlwiTmV0RnJvbnRcIil7Xz1bTV19aWYoUj09XCJJRVwiJiYoTT0oLzsgKig/OlhCTFdQfFp1bmVXUCkoXFxkKykvaS5leGVjKGUpfHwwKVsxXSkpe1IrPVwiIE1vYmlsZVwiO1Q9XCJXaW5kb3dzIFBob25lIFwiKygvXFwrJC8udGVzdChNKT9NOk0rXCIueFwiKTtQLnVuc2hpZnQoXCJkZXNrdG9wIG1vZGVcIil9ZWxzZSBpZigvXFxiV1BEZXNrdG9wXFxiL2kudGVzdChlKSl7Uj1cIklFIE1vYmlsZVwiO1Q9XCJXaW5kb3dzIFBob25lIDgueFwiO1AudW5zaGlmdChcImRlc2t0b3AgbW9kZVwiKTtCfHwoQj0oL1xcYnJ2OihbXFxkLl0rKS8uZXhlYyhlKXx8MClbMV0pfWVsc2UgaWYoUiE9XCJJRVwiJiZfPT1cIlRyaWRlbnRcIiYmKE09L1xcYnJ2OihbXFxkLl0rKS8uZXhlYyhlKSkpe2lmKFIpe1AucHVzaChcImlkZW50aWZ5aW5nIGFzIFwiK1IrKEI/XCIgXCIrQjpcIlwiKSl9Uj1cIklFXCI7Qj1NWzFdfWlmKGspe2lmKGlzSG9zdFR5cGUoaSxcImdsb2JhbFwiKSl7aWYobSl7TT1tLmxhbmcuU3lzdGVtO0U9TS5nZXRQcm9wZXJ0eShcIm9zLmFyY2hcIik7VD1UfHxNLmdldFByb3BlcnR5KFwib3MubmFtZVwiKStcIiBcIitNLmdldFByb3BlcnR5KFwib3MudmVyc2lvblwiKX1pZihnKXt0cnl7Qj1pLnJlcXVpcmUoXCJyaW5nby9lbmdpbmVcIikudmVyc2lvbi5qb2luKFwiLlwiKTtSPVwiUmluZ29KU1wifWNhdGNoKGUpe2lmKChNPWkuc3lzdGVtKSYmTS5nbG9iYWwuc3lzdGVtPT1pLnN5c3RlbSl7Uj1cIk5hcndoYWxcIjtUfHwoVD1NWzBdLm9zfHxudWxsKX19aWYoIVIpe1I9XCJSaGlub1wifX1lbHNlIGlmKHR5cGVvZiBpLnByb2Nlc3M9PVwib2JqZWN0XCImJiFpLnByb2Nlc3MuYnJvd3NlciYmKE09aS5wcm9jZXNzKSl7aWYodHlwZW9mIE0udmVyc2lvbnM9PVwib2JqZWN0XCIpe2lmKHR5cGVvZiBNLnZlcnNpb25zLmVsZWN0cm9uPT1cInN0cmluZ1wiKXtQLnB1c2goXCJOb2RlIFwiK00udmVyc2lvbnMubm9kZSk7Uj1cIkVsZWN0cm9uXCI7Qj1NLnZlcnNpb25zLmVsZWN0cm9ufWVsc2UgaWYodHlwZW9mIE0udmVyc2lvbnMubnc9PVwic3RyaW5nXCIpe1AucHVzaChcIkNocm9taXVtIFwiK0IsXCJOb2RlIFwiK00udmVyc2lvbnMubm9kZSk7Uj1cIk5XLmpzXCI7Qj1NLnZlcnNpb25zLm53fX1pZighUil7Uj1cIk5vZGUuanNcIjtFPU0uYXJjaDtUPU0ucGxhdGZvcm07Qj0vW1xcZC5dKy8uZXhlYyhNLnZlcnNpb24pO0I9Qj9CWzBdOm51bGx9fX1lbHNlIGlmKGdldENsYXNzT2YoTT1pLnJ1bnRpbWUpPT1wKXtSPVwiQWRvYmUgQUlSXCI7VD1NLmZsYXNoLnN5c3RlbS5DYXBhYmlsaXRpZXMub3N9ZWxzZSBpZihnZXRDbGFzc09mKE09aS5waGFudG9tKT09eCl7Uj1cIlBoYW50b21KU1wiO0I9KE09TS52ZXJzaW9ufHxudWxsKSYmTS5tYWpvcitcIi5cIitNLm1pbm9yK1wiLlwiK00ucGF0Y2h9ZWxzZSBpZih0eXBlb2YgTy5kb2N1bWVudE1vZGU9PVwibnVtYmVyXCImJihNPS9cXGJUcmlkZW50XFwvKFxcZCspL2kuZXhlYyhlKSkpe0I9W0IsTy5kb2N1bWVudE1vZGVdO2lmKChNPStNWzFdKzQpIT1CWzFdKXtQLnB1c2goXCJJRSBcIitCWzFdK1wiIG1vZGVcIik7XyYmKF9bMV09XCJcIik7QlsxXT1NfUI9Uj09XCJJRVwiP1N0cmluZyhCWzFdLnRvRml4ZWQoMSkpOkJbMF19ZWxzZSBpZih0eXBlb2YgTy5kb2N1bWVudE1vZGU9PVwibnVtYmVyXCImJi9eKD86Q2hyb21lfEZpcmVmb3gpXFxiLy50ZXN0KFIpKXtQLnB1c2goXCJtYXNraW5nIGFzIFwiK1IrXCIgXCIrQik7Uj1cIklFXCI7Qj1cIjExLjBcIjtfPVtcIlRyaWRlbnRcIl07VD1cIldpbmRvd3NcIn1UPVQmJmZvcm1hdChUKX1pZihCJiYoTT0vKD86W2FiXXxkcHxwcmV8W2FiXVxcZCtwcmUpKD86XFxkK1xcKz8pPyQvaS5leGVjKEIpfHwvKD86YWxwaGF8YmV0YSkoPzogP1xcZCk/L2kuZXhlYyhlK1wiO1wiKyhrJiZuLmFwcE1pbm9yVmVyc2lvbikpfHwvXFxiTWluZWZpZWxkXFxiL2kudGVzdChlKSYmXCJhXCIpKXtDPS9iL2kudGVzdChNKT9cImJldGFcIjpcImFscGhhXCI7Qj1CLnJlcGxhY2UoUmVnRXhwKE0rXCJcXFxcKz8kXCIpLFwiXCIpKyhDPT1cImJldGFcIj92OmgpKygvXFxkK1xcKz8vLmV4ZWMoTSl8fFwiXCIpfWlmKFI9PVwiRmVubmVjXCJ8fFI9PVwiRmlyZWZveFwiJiYvXFxiKD86QW5kcm9pZHxGaXJlZm94IE9TfEthaU9TKVxcYi8udGVzdChUKSl7Uj1cIkZpcmVmb3ggTW9iaWxlXCJ9ZWxzZSBpZihSPT1cIk1heHRob25cIiYmQil7Qj1CLnJlcGxhY2UoL1xcLltcXGQuXSsvLFwiLnhcIil9ZWxzZSBpZigvXFxiWGJveFxcYi9pLnRlc3QoQSkpe2lmKEE9PVwiWGJveCAzNjBcIil7VD1udWxsfWlmKEE9PVwiWGJveCAzNjBcIiYmL1xcYklFTW9iaWxlXFxiLy50ZXN0KGUpKXtQLnVuc2hpZnQoXCJtb2JpbGUgbW9kZVwiKX19ZWxzZSBpZigoL14oPzpDaHJvbWV8SUV8T3BlcmEpJC8udGVzdChSKXx8UiYmIUEmJiEvQnJvd3NlcnxNb2JpLy50ZXN0KFIpKSYmKFQ9PVwiV2luZG93cyBDRVwifHwvTW9iaS9pLnRlc3QoZSkpKXtSKz1cIiBNb2JpbGVcIn1lbHNlIGlmKFI9PVwiSUVcIiYmayl7dHJ5e2lmKGkuZXh0ZXJuYWw9PT1udWxsKXtQLnVuc2hpZnQoXCJwbGF0Zm9ybSBwcmV2aWV3XCIpfX1jYXRjaChlKXtQLnVuc2hpZnQoXCJlbWJlZGRlZFwiKX19ZWxzZSBpZigoL1xcYkJsYWNrQmVycnlcXGIvLnRlc3QoQSl8fC9cXGJCQjEwXFxiLy50ZXN0KGUpKSYmKE09KFJlZ0V4cChBLnJlcGxhY2UoLyArL2csXCIgKlwiKStcIi8oWy5cXFxcZF0rKVwiLFwiaVwiKS5leGVjKGUpfHwwKVsxXXx8Qikpe009W00sL0JCMTAvLnRlc3QoZSldO1Q9KE1bMV0/KEE9bnVsbCxJPVwiQmxhY2tCZXJyeVwiKTpcIkRldmljZSBTb2Z0d2FyZVwiKStcIiBcIitNWzBdO0I9bnVsbH1lbHNlIGlmKHRoaXMhPWZvck93biYmQSE9XCJXaWlcIiYmKGsmJnl8fC9PcGVyYS8udGVzdChSKSYmL1xcYig/Ok1TSUV8RmlyZWZveClcXGIvaS50ZXN0KGUpfHxSPT1cIkZpcmVmb3hcIiYmL1xcYk9TIFggKD86XFxkK1xcLil7Mix9Ly50ZXN0KFQpfHxSPT1cIklFXCImJihUJiYhL15XaW4vLnRlc3QoVCkmJkI+NS41fHwvXFxiV2luZG93cyBYUFxcYi8udGVzdChUKSYmQj44fHxCPT04JiYhL1xcYlRyaWRlbnRcXGIvLnRlc3QoZSkpKSYmIWYudGVzdChNPXBhcnNlLmNhbGwoZm9yT3duLGUucmVwbGFjZShmLFwiXCIpK1wiO1wiKSkmJk0ubmFtZSl7TT1cImluZyBhcyBcIitNLm5hbWUrKChNPU0udmVyc2lvbik/XCIgXCIrTTpcIlwiKTtpZihmLnRlc3QoUikpe2lmKC9cXGJJRVxcYi8udGVzdChNKSYmVD09XCJNYWMgT1NcIil7VD1udWxsfU09XCJpZGVudGlmeVwiK019ZWxzZXtNPVwibWFza1wiK007aWYodyl7Uj1mb3JtYXQody5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLFwiJDEgJDJcIikpfWVsc2V7Uj1cIk9wZXJhXCJ9aWYoL1xcYklFXFxiLy50ZXN0KE0pKXtUPW51bGx9aWYoIWspe0I9bnVsbH19Xz1bXCJQcmVzdG9cIl07UC5wdXNoKE0pfWlmKE09KC9cXGJBcHBsZVdlYktpdFxcLyhbXFxkLl0rXFwrPykvaS5leGVjKGUpfHwwKVsxXSl7TT1bcGFyc2VGbG9hdChNLnJlcGxhY2UoL1xcLihcXGQpJC8sXCIuMCQxXCIpKSxNXTtpZihSPT1cIlNhZmFyaVwiJiZNWzFdLnNsaWNlKC0xKT09XCIrXCIpe1I9XCJXZWJLaXQgTmlnaHRseVwiO0M9XCJhbHBoYVwiO0I9TVsxXS5zbGljZSgwLC0xKX1lbHNlIGlmKEI9PU1bMV18fEI9PShNWzJdPSgvXFxiU2FmYXJpXFwvKFtcXGQuXStcXCs/KS9pLmV4ZWMoZSl8fDApWzFdKSl7Qj1udWxsfU1bMV09KC9cXGIoPzpIZWFkbGVzcyk/Q2hyb21lXFwvKFtcXGQuXSspL2kuZXhlYyhlKXx8MClbMV07aWYoTVswXT09NTM3LjM2JiZNWzJdPT01MzcuMzYmJnBhcnNlRmxvYXQoTVsxXSk+PTI4JiZfPT1cIldlYktpdFwiKXtfPVtcIkJsaW5rXCJdfWlmKCFrfHwhcyYmIU1bMV0pe18mJihfWzFdPVwibGlrZSBTYWZhcmlcIik7TT0oTT1NWzBdLE08NDAwPzE6TTw1MDA/MjpNPDUyNj8zOk08NTMzPzQ6TTw1MzQ/XCI0K1wiOk08NTM1PzU6TTw1Mzc/NjpNPDUzOD83Ok08NjAxPzg6TTw2MDI/OTpNPDYwND8xMDpNPDYwNj8xMTpNPDYwOD8xMjpcIjEyXCIpfWVsc2V7XyYmKF9bMV09XCJsaWtlIENocm9tZVwiKTtNPU1bMV18fChNPU1bMF0sTTw1MzA/MTpNPDUzMj8yOk08NTMyLjA1PzM6TTw1MzM/NDpNPDUzNC4wMz81Ok08NTM0LjA3PzY6TTw1MzQuMT83Ok08NTM0LjEzPzg6TTw1MzQuMTY/OTpNPDUzNC4yND8xMDpNPDUzNC4zPzExOk08NTM1LjAxPzEyOk08NTM1LjAyP1wiMTMrXCI6TTw1MzUuMDc/MTU6TTw1MzUuMTE/MTY6TTw1MzUuMTk/MTc6TTw1MzYuMDU/MTg6TTw1MzYuMT8xOTpNPDUzNy4wMT8yMDpNPDUzNy4xMT9cIjIxK1wiOk08NTM3LjEzPzIzOk08NTM3LjE4PzI0Ok08NTM3LjI0PzI1Ok08NTM3LjM2PzI2Ol8hPVwiQmxpbmtcIj9cIjI3XCI6XCIyOFwiKX1fJiYoX1sxXSs9XCIgXCIrKE0rPXR5cGVvZiBNPT1cIm51bWJlclwiP1wiLnhcIjovWy4rXS8udGVzdChNKT9cIlwiOlwiK1wiKSk7aWYoUj09XCJTYWZhcmlcIiYmKCFCfHxwYXJzZUludChCKT40NSkpe0I9TX1lbHNlIGlmKFI9PVwiQ2hyb21lXCImJi9cXGJIZWFkbGVzc0Nocm9tZS9pLnRlc3QoZSkpe1AudW5zaGlmdChcImhlYWRsZXNzXCIpfX1pZihSPT1cIk9wZXJhXCImJihNPS9cXGJ6Ym92fHp2YXYkLy5leGVjKFQpKSl7Uis9XCIgXCI7UC51bnNoaWZ0KFwiZGVza3RvcCBtb2RlXCIpO2lmKE09PVwienZhdlwiKXtSKz1cIk1pbmlcIjtCPW51bGx9ZWxzZXtSKz1cIk1vYmlsZVwifVQ9VC5yZXBsYWNlKFJlZ0V4cChcIiAqXCIrTStcIiRcIiksXCJcIil9ZWxzZSBpZihSPT1cIlNhZmFyaVwiJiYvXFxiQ2hyb21lXFxiLy5leGVjKF8mJl9bMV0pKXtQLnVuc2hpZnQoXCJkZXNrdG9wIG1vZGVcIik7Uj1cIkNocm9tZSBNb2JpbGVcIjtCPW51bGw7aWYoL1xcYk9TIFhcXGIvLnRlc3QoVCkpe0k9XCJBcHBsZVwiO1Q9XCJpT1MgNC4zK1wifWVsc2V7VD1udWxsfX1lbHNlIGlmKC9cXGJTUldhcmUgSXJvblxcYi8udGVzdChSKSYmIUIpe0I9Z2V0VmVyc2lvbihcIkNocm9tZVwiKX1pZihCJiZCLmluZGV4T2YoTT0vW1xcZC5dKyQvLmV4ZWMoVCkpPT0wJiZlLmluZGV4T2YoXCIvXCIrTStcIi1cIik+LTEpe1Q9dHJpbShULnJlcGxhY2UoTSxcIlwiKSl9aWYoVCYmVC5pbmRleE9mKFIpIT0tMSYmIVJlZ0V4cChSK1wiIE9TXCIpLnRlc3QoVCkpe1Q9VC5yZXBsYWNlKFJlZ0V4cChcIiAqXCIrcXVhbGlmeShSKStcIiAqXCIpLFwiXCIpfWlmKF8mJiEvXFxiKD86QXZhbnR8Tm9vaylcXGIvLnRlc3QoUikmJigvQnJvd3NlcnxMdW5hc2NhcGV8TWF4dGhvbi8udGVzdChSKXx8UiE9XCJTYWZhcmlcIiYmL15pT1MvLnRlc3QoVCkmJi9cXGJTYWZhcmlcXGIvLnRlc3QoX1sxXSl8fC9eKD86QWRvYmV8QXJvcmF8QnJlYWNofE1pZG9yaXxPcGVyYXxQaGFudG9tfFJla29ucXxSb2NrfFNhbXN1bmcgSW50ZXJuZXR8U2xlaXBuaXJ8U1JXYXJlIElyb258Vml2YWxkaXxXZWIpLy50ZXN0KFIpJiZfWzFdKSl7KE09X1tfLmxlbmd0aC0xXSkmJlAucHVzaChNKX1pZihQLmxlbmd0aCl7UD1bXCIoXCIrUC5qb2luKFwiOyBcIikrXCIpXCJdfWlmKEkmJkEmJkEuaW5kZXhPZihJKTwwKXtQLnB1c2goXCJvbiBcIitJKX1pZihBKXtQLnB1c2goKC9eb24gLy50ZXN0KFBbUC5sZW5ndGgtMV0pP1wiXCI6XCJvbiBcIikrQSl9aWYoVCl7TT0vIChbXFxkLitdKykkLy5leGVjKFQpO1c9TSYmVC5jaGFyQXQoVC5sZW5ndGgtTVswXS5sZW5ndGgtMSk9PVwiL1wiO1Q9e2FyY2hpdGVjdHVyZTozMixmYW1pbHk6TSYmIVc/VC5yZXBsYWNlKE1bMF0sXCJcIik6VCx2ZXJzaW9uOk0/TVsxXTpudWxsLHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52ZXJzaW9uO3JldHVybiB0aGlzLmZhbWlseSsoZSYmIVc/XCIgXCIrZTpcIlwiKSsodGhpcy5hcmNoaXRlY3R1cmU9PTY0P1wiIDY0LWJpdFwiOlwiXCIpfX19aWYoKE09L1xcYig/OkFNRHxJQXxXaW58V09XfHg4Nl98eCk2NFxcYi9pLmV4ZWMoRSkpJiYhL1xcYmk2ODZcXGIvaS50ZXN0KEUpKXtpZihUKXtULmFyY2hpdGVjdHVyZT02NDtULmZhbWlseT1ULmZhbWlseS5yZXBsYWNlKFJlZ0V4cChcIiAqXCIrTSksXCJcIil9aWYoUiYmKC9cXGJXT1c2NFxcYi9pLnRlc3QoZSl8fGsmJi9cXHcoPzo4NnwzMikkLy50ZXN0KG4uY3B1Q2xhc3N8fG4ucGxhdGZvcm0pJiYhL1xcYldpbjY0OyB4NjRcXGIvaS50ZXN0KGUpKSl7UC51bnNoaWZ0KFwiMzItYml0XCIpfX1lbHNlIGlmKFQmJi9eT1MgWC8udGVzdChULmZhbWlseSkmJlI9PVwiQ2hyb21lXCImJnBhcnNlRmxvYXQoQik+PTM5KXtULmFyY2hpdGVjdHVyZT02NH1lfHwoZT1udWxsKTt2YXIgRj17fTtGLmRlc2NyaXB0aW9uPWU7Ri5sYXlvdXQ9XyYmX1swXTtGLm1hbnVmYWN0dXJlcj1JO0YubmFtZT1SO0YucHJlcmVsZWFzZT1DO0YucHJvZHVjdD1BO0YudWE9ZTtGLnZlcnNpb249UiYmQjtGLm9zPVR8fHthcmNoaXRlY3R1cmU6bnVsbCxmYW1pbHk6bnVsbCx2ZXJzaW9uOm51bGwsdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIm51bGxcIn19O0YucGFyc2U9cGFyc2U7Ri50b1N0cmluZz10b1N0cmluZ1BsYXRmb3JtO2lmKEYudmVyc2lvbil7UC51bnNoaWZ0KEIpfWlmKEYubmFtZSl7UC51bnNoaWZ0KFIpfWlmKFQmJlImJiEoVD09U3RyaW5nKFQpLnNwbGl0KFwiIFwiKVswXSYmKFQ9PVIuc3BsaXQoXCIgXCIpWzBdfHxBKSkpe1AucHVzaChBP1wiKFwiK1QrXCIpXCI6XCJvbiBcIitUKX1pZihQLmxlbmd0aCl7Ri5kZXNjcmlwdGlvbj1QLmpvaW4oXCIgXCIpfXJldHVybiBGfXZhciBkPXBhcnNlKCk7aWYobiYmbyl7Zm9yT3duKGQsKGZ1bmN0aW9uKGUsaSl7bltpXT1lfSkpfWVsc2V7ci5wbGF0Zm9ybT1kfX0pLmNhbGwodGhpcyl9fTt2YXIgaT17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKHQpe3ZhciByPWlbdF07aWYociE9PXVuZGVmaW5lZCl7cmV0dXJuIHIuZXhwb3J0c312YXIgYT1pW3RdPXtpZDp0LGxvYWRlZDpmYWxzZSxleHBvcnRzOnt9fTt2YXIgbj10cnVlO3RyeXtlW3RdLmNhbGwoYS5leHBvcnRzLGEsYS5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO249ZmFsc2V9ZmluYWxseXtpZihuKWRlbGV0ZSBpW3RdfWEubG9hZGVkPXRydWU7cmV0dXJuIGEuZXhwb3J0c30oKCk9PntfX25jY3dwY2tfcmVxdWlyZV9fLm5tZD1lPT57ZS5wYXRocz1bXTtpZighZS5jaGlsZHJlbillLmNoaWxkcmVuPVtdO3JldHVybiBlfX0pKCk7aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciB0PV9fbmNjd3Bja19yZXF1aXJlX18oNTQxKTttb2R1bGUuZXhwb3J0cz10fSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/platform/platform.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js ***! + \************************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * react-refresh-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\n// ATTENTION\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\n\nvar PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // We never remove these associations.\n// It's OK to reference families, but use WeakMap/Set for types.\n\nvar allFamiliesByID = new Map();\nvar allFamiliesByType = new PossiblyWeakMap();\nvar allSignaturesByType = new PossiblyWeakMap(); // This WeakMap is read by React, so we only put families\n// that have actually been edited here. This keeps checks fast.\n// $FlowIssue\n\nvar updatedFamiliesByType = new PossiblyWeakMap(); // This is cleared on every performReactRefresh() call.\n// It is an array of [Family, NextType] tuples.\n\nvar pendingUpdates = []; // This is injected by the renderer via DevTools global hook.\n\nvar helpersByRendererID = new Map();\nvar helpersByRoot = new Map(); // We keep track of mounted roots so we can schedule updates.\n\nvar mountedRoots = new Set(); // If a root captures an error, we remember it so we can retry on edit.\n\nvar failedRoots = new Set(); // In environments that support WeakMap, we also remember the last element for every root.\n// It needs to be weak because we do this even for roots that failed to mount.\n// If there is no WeakMap, we won't attempt to do retrying.\n// $FlowIssue\n\nvar rootElements = // $FlowIssue\ntypeof WeakMap === 'function' ? new WeakMap() : null;\nvar isPerformingRefresh = false;\n\nfunction computeFullKey(signature) {\n if (signature.fullKey !== null) {\n return signature.fullKey;\n }\n\n var fullKey = signature.ownKey;\n var hooks;\n\n try {\n hooks = signature.getCustomHooks();\n } catch (err) {\n // This can happen in an edge case, e.g. if expression like Foo.useSomething\n // depends on Foo which is lazily initialized during rendering.\n // In that case just assume we'll have to remount.\n signature.forceReset = true;\n signature.fullKey = fullKey;\n return fullKey;\n }\n\n for (var i = 0; i < hooks.length; i++) {\n var hook = hooks[i];\n\n if (typeof hook !== 'function') {\n // Something's wrong. Assume we need to remount.\n signature.forceReset = true;\n signature.fullKey = fullKey;\n return fullKey;\n }\n\n var nestedHookSignature = allSignaturesByType.get(hook);\n\n if (nestedHookSignature === undefined) {\n // No signature means Hook wasn't in the source code, e.g. in a library.\n // We'll skip it because we can assume it won't change during this session.\n continue;\n }\n\n var nestedHookKey = computeFullKey(nestedHookSignature);\n\n if (nestedHookSignature.forceReset) {\n signature.forceReset = true;\n }\n\n fullKey += '\\n---\\n' + nestedHookKey;\n }\n\n signature.fullKey = fullKey;\n return fullKey;\n}\n\nfunction haveEqualSignatures(prevType, nextType) {\n var prevSignature = allSignaturesByType.get(prevType);\n var nextSignature = allSignaturesByType.get(nextType);\n\n if (prevSignature === undefined && nextSignature === undefined) {\n return true;\n }\n\n if (prevSignature === undefined || nextSignature === undefined) {\n return false;\n }\n\n if (computeFullKey(prevSignature) !== computeFullKey(nextSignature)) {\n return false;\n }\n\n if (nextSignature.forceReset) {\n return false;\n }\n\n return true;\n}\n\nfunction isReactClass(type) {\n return type.prototype && type.prototype.isReactComponent;\n}\n\nfunction canPreserveStateBetween(prevType, nextType) {\n if (isReactClass(prevType) || isReactClass(nextType)) {\n return false;\n }\n\n if (haveEqualSignatures(prevType, nextType)) {\n return true;\n }\n\n return false;\n}\n\nfunction resolveFamily(type) {\n // Only check updated types to keep lookups fast.\n return updatedFamiliesByType.get(type);\n} // If we didn't care about IE11, we could use new Map/Set(iterable).\n\n\nfunction cloneMap(map) {\n var clone = new Map();\n map.forEach(function (value, key) {\n clone.set(key, value);\n });\n return clone;\n}\n\nfunction cloneSet(set) {\n var clone = new Set();\n set.forEach(function (value) {\n clone.add(value);\n });\n return clone;\n} // This is a safety mechanism to protect against rogue getters and Proxies.\n\n\nfunction getProperty(object, property) {\n try {\n return object[property];\n } catch (err) {\n // Intentionally ignore.\n return undefined;\n }\n}\n\nfunction performReactRefresh() {\n\n if (pendingUpdates.length === 0) {\n return null;\n }\n\n if (isPerformingRefresh) {\n return null;\n }\n\n isPerformingRefresh = true;\n\n try {\n var staleFamilies = new Set();\n var updatedFamilies = new Set();\n var updates = pendingUpdates;\n pendingUpdates = [];\n updates.forEach(function (_ref) {\n var family = _ref[0],\n nextType = _ref[1];\n // Now that we got a real edit, we can create associations\n // that will be read by the React reconciler.\n var prevType = family.current;\n updatedFamiliesByType.set(prevType, family);\n updatedFamiliesByType.set(nextType, family);\n family.current = nextType; // Determine whether this should be a re-render or a re-mount.\n\n if (canPreserveStateBetween(prevType, nextType)) {\n updatedFamilies.add(family);\n } else {\n staleFamilies.add(family);\n }\n }); // TODO: rename these fields to something more meaningful.\n\n var update = {\n updatedFamilies: updatedFamilies,\n // Families that will re-render preserving state\n staleFamilies: staleFamilies // Families that will be remounted\n\n };\n helpersByRendererID.forEach(function (helpers) {\n // Even if there are no roots, set the handler on first update.\n // This ensures that if *new* roots are mounted, they'll use the resolve handler.\n helpers.setRefreshHandler(resolveFamily);\n });\n var didError = false;\n var firstError = null; // We snapshot maps and sets that are mutated during commits.\n // If we don't do this, there is a risk they will be mutated while\n // we iterate over them. For example, trying to recover a failed root\n // may cause another root to be added to the failed list -- an infinite loop.\n\n var failedRootsSnapshot = cloneSet(failedRoots);\n var mountedRootsSnapshot = cloneSet(mountedRoots);\n var helpersByRootSnapshot = cloneMap(helpersByRoot);\n failedRootsSnapshot.forEach(function (root) {\n var helpers = helpersByRootSnapshot.get(root);\n\n if (helpers === undefined) {\n throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n }\n\n if (!failedRoots.has(root)) {// No longer failed.\n }\n\n if (rootElements === null) {\n return;\n }\n\n if (!rootElements.has(root)) {\n return;\n }\n\n var element = rootElements.get(root);\n\n try {\n helpers.scheduleRoot(root, element);\n } catch (err) {\n if (!didError) {\n didError = true;\n firstError = err;\n } // Keep trying other roots.\n\n }\n });\n mountedRootsSnapshot.forEach(function (root) {\n var helpers = helpersByRootSnapshot.get(root);\n\n if (helpers === undefined) {\n throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n }\n\n if (!mountedRoots.has(root)) {// No longer mounted.\n }\n\n try {\n helpers.scheduleRefresh(root, update);\n } catch (err) {\n if (!didError) {\n didError = true;\n firstError = err;\n } // Keep trying other roots.\n\n }\n });\n\n if (didError) {\n throw firstError;\n }\n\n return update;\n } finally {\n isPerformingRefresh = false;\n }\n}\nfunction register(type, id) {\n {\n if (type === null) {\n return;\n }\n\n if (typeof type !== 'function' && typeof type !== 'object') {\n return;\n } // This can happen in an edge case, e.g. if we register\n // return value of a HOC but it returns a cached component.\n // Ignore anything but the first registration for each type.\n\n\n if (allFamiliesByType.has(type)) {\n return;\n } // Create family or remember to update it.\n // None of this bookkeeping affects reconciliation\n // until the first performReactRefresh() call above.\n\n\n var family = allFamiliesByID.get(id);\n\n if (family === undefined) {\n family = {\n current: type\n };\n allFamiliesByID.set(id, family);\n } else {\n pendingUpdates.push([family, type]);\n }\n\n allFamiliesByType.set(type, family); // Visit inner types because we might not have registered them.\n\n if (typeof type === 'object' && type !== null) {\n switch (getProperty(type, '$$typeof')) {\n case REACT_FORWARD_REF_TYPE:\n register(type.render, id + '$render');\n break;\n\n case REACT_MEMO_TYPE:\n register(type.type, id + '$type');\n break;\n }\n }\n }\n}\nfunction setSignature(type, key) {\n var forceReset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var getCustomHooks = arguments.length > 3 ? arguments[3] : undefined;\n\n {\n if (!allSignaturesByType.has(type)) {\n allSignaturesByType.set(type, {\n forceReset: forceReset,\n ownKey: key,\n fullKey: null,\n getCustomHooks: getCustomHooks || function () {\n return [];\n }\n });\n } // Visit inner types because we might not have signed them.\n\n\n if (typeof type === 'object' && type !== null) {\n switch (getProperty(type, '$$typeof')) {\n case REACT_FORWARD_REF_TYPE:\n setSignature(type.render, key, forceReset, getCustomHooks);\n break;\n\n case REACT_MEMO_TYPE:\n setSignature(type.type, key, forceReset, getCustomHooks);\n break;\n }\n }\n }\n} // This is lazily called during first render for a type.\n// It captures Hook list at that time so inline requires don't break comparisons.\n\nfunction collectCustomHooksForSignature(type) {\n {\n var signature = allSignaturesByType.get(type);\n\n if (signature !== undefined) {\n computeFullKey(signature);\n }\n }\n}\nfunction getFamilyByID(id) {\n {\n return allFamiliesByID.get(id);\n }\n}\nfunction getFamilyByType(type) {\n {\n return allFamiliesByType.get(type);\n }\n}\nfunction findAffectedHostInstances(families) {\n {\n var affectedInstances = new Set();\n mountedRoots.forEach(function (root) {\n var helpers = helpersByRoot.get(root);\n\n if (helpers === undefined) {\n throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n }\n\n var instancesForRoot = helpers.findHostInstancesForRefresh(root, families);\n instancesForRoot.forEach(function (inst) {\n affectedInstances.add(inst);\n });\n });\n return affectedInstances;\n }\n}\nfunction injectIntoGlobalHook(globalObject) {\n {\n // For React Native, the global hook will be set up by require('react-devtools-core').\n // That code will run before us. So we need to monkeypatch functions on existing hook.\n // For React Web, the global hook will be set up by the extension.\n // This will also run before us.\n var hook = globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n if (hook === undefined) {\n // However, if there is no DevTools extension, we'll need to set up the global hook ourselves.\n // Note that in this case it's important that renderer code runs *after* this method call.\n // Otherwise, the renderer will think that there is no global hook, and won't do the injection.\n var nextID = 0;\n globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook = {\n renderers: new Map(),\n supportsFiber: true,\n inject: function (injected) {\n return nextID++;\n },\n onScheduleFiberRoot: function (id, root, children) {},\n onCommitFiberRoot: function (id, root, maybePriorityLevel, didError) {},\n onCommitFiberUnmount: function () {}\n };\n }\n\n if (hook.isDisabled) {\n // This isn't a real property on the hook, but it can be set to opt out\n // of DevTools integration and associated warnings and logs.\n // Using console['warn'] to evade Babel and ESLint\n console['warn']('Something has shimmed the React DevTools global hook (__REACT_DEVTOOLS_GLOBAL_HOOK__). ' + 'Fast Refresh is not compatible with this shim and will be disabled.');\n return;\n } // Here, we just want to get a reference to scheduleRefresh.\n\n\n var oldInject = hook.inject;\n\n hook.inject = function (injected) {\n var id = oldInject.apply(this, arguments);\n\n if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {\n // This version supports React Refresh.\n helpersByRendererID.set(id, injected);\n }\n\n return id;\n }; // Do the same for any already injected roots.\n // This is useful if ReactDOM has already been initialized.\n // https://github.com/facebook/react/issues/17626\n\n\n hook.renderers.forEach(function (injected, id) {\n if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {\n // This version supports React Refresh.\n helpersByRendererID.set(id, injected);\n }\n }); // We also want to track currently mounted roots.\n\n var oldOnCommitFiberRoot = hook.onCommitFiberRoot;\n\n var oldOnScheduleFiberRoot = hook.onScheduleFiberRoot || function () {};\n\n hook.onScheduleFiberRoot = function (id, root, children) {\n if (!isPerformingRefresh) {\n // If it was intentionally scheduled, don't attempt to restore.\n // This includes intentionally scheduled unmounts.\n failedRoots.delete(root);\n\n if (rootElements !== null) {\n rootElements.set(root, children);\n }\n }\n\n return oldOnScheduleFiberRoot.apply(this, arguments);\n };\n\n hook.onCommitFiberRoot = function (id, root, maybePriorityLevel, didError) {\n var helpers = helpersByRendererID.get(id);\n\n if (helpers !== undefined) {\n helpersByRoot.set(root, helpers);\n var current = root.current;\n var alternate = current.alternate; // We need to determine whether this root has just (un)mounted.\n // This logic is copy-pasted from similar logic in the DevTools backend.\n // If this breaks with some refactoring, you'll want to update DevTools too.\n\n if (alternate !== null) {\n var wasMounted = alternate.memoizedState != null && alternate.memoizedState.element != null && mountedRoots.has(root);\n var isMounted = current.memoizedState != null && current.memoizedState.element != null;\n\n if (!wasMounted && isMounted) {\n // Mount a new root.\n mountedRoots.add(root);\n failedRoots.delete(root);\n } else if (wasMounted && isMounted) ; else if (wasMounted && !isMounted) {\n // Unmount an existing root.\n mountedRoots.delete(root);\n\n if (didError) {\n // We'll remount it on future edits.\n failedRoots.add(root);\n } else {\n helpersByRoot.delete(root);\n }\n } else if (!wasMounted && !isMounted) {\n if (didError) {\n // We'll remount it on future edits.\n failedRoots.add(root);\n }\n }\n } else {\n // Mount a new root.\n mountedRoots.add(root);\n }\n } // Always call the decorated DevTools hook.\n\n\n return oldOnCommitFiberRoot.apply(this, arguments);\n };\n }\n}\nfunction hasUnrecoverableErrors() {\n // TODO: delete this after removing dependency in RN.\n return false;\n} // Exposed for testing.\n\nfunction _getMountedRootCount() {\n {\n return mountedRoots.size;\n }\n} // This is a wrapper over more primitive functions for setting signature.\n// Signatures let us decide whether the Hook order has changed on refresh.\n//\n// This function is intended to be used as a transform target, e.g.:\n// var _s = createSignatureFunctionForTransform()\n//\n// function Hello() {\n// const [foo, setFoo] = useState(0);\n// const value = useCustomHook();\n// _s(); /* Call without arguments triggers collecting the custom Hook list.\n// * This doesn't happen during the module evaluation because we\n// * don't want to change the module order with inline requires.\n// * Next calls are noops. */\n// return <h1>Hi</h1>;\n// }\n//\n// /* Call with arguments attaches the signature to the type: */\n// _s(\n// Hello,\n// 'useState{[foo, setFoo]}(0)',\n// () => [useCustomHook], /* Lazy to avoid triggering inline requires */\n// );\n\nfunction createSignatureFunctionForTransform() {\n {\n var savedType;\n var hasCustomHooks;\n var didCollectHooks = false;\n return function (type, key, forceReset, getCustomHooks) {\n if (typeof key === 'string') {\n // We're in the initial phase that associates signatures\n // with the functions. Note this may be called multiple times\n // in HOC chains like _s(hoc1(_s(hoc2(_s(actualFunction))))).\n if (!savedType) {\n // We're in the innermost call, so this is the actual type.\n savedType = type;\n hasCustomHooks = typeof getCustomHooks === 'function';\n } // Set the signature for all types (even wrappers!) in case\n // they have no signatures of their own. This is to prevent\n // problems like https://github.com/facebook/react/issues/20417.\n\n\n if (type != null && (typeof type === 'function' || typeof type === 'object')) {\n setSignature(type, key, forceReset, getCustomHooks);\n }\n\n return type;\n } else {\n // We're in the _s() call without arguments, which means\n // this is the time to collect custom Hook signatures.\n // Only do this once. This path is hot and runs *inside* every render!\n if (!didCollectHooks && hasCustomHooks) {\n didCollectHooks = true;\n collectCustomHooksForSignature(savedType);\n }\n }\n };\n }\n}\nfunction isLikelyComponentType(type) {\n {\n switch (typeof type) {\n case 'function':\n {\n // First, deal with classes.\n if (type.prototype != null) {\n if (type.prototype.isReactComponent) {\n // React class.\n return true;\n }\n\n var ownNames = Object.getOwnPropertyNames(type.prototype);\n\n if (ownNames.length > 1 || ownNames[0] !== 'constructor') {\n // This looks like a class.\n return false;\n } // eslint-disable-next-line no-proto\n\n\n if (type.prototype.__proto__ !== Object.prototype) {\n // It has a superclass.\n return false;\n } // Pass through.\n // This looks like a regular function with empty prototype.\n\n } // For plain functions and arrows, use name as a heuristic.\n\n\n var name = type.name || type.displayName;\n return typeof name === 'string' && /^[A-Z]/.test(name);\n }\n\n case 'object':\n {\n if (type != null) {\n switch (getProperty(type, '$$typeof')) {\n case REACT_FORWARD_REF_TYPE:\n case REACT_MEMO_TYPE:\n // Definitely React components.\n return true;\n\n default:\n return false;\n }\n }\n\n return false;\n }\n\n default:\n {\n return false;\n }\n }\n }\n}\n\nexports._getMountedRootCount = _getMountedRootCount;\nexports.collectCustomHooksForSignature = collectCustomHooksForSignature;\nexports.createSignatureFunctionForTransform = createSignatureFunctionForTransform;\nexports.findAffectedHostInstances = findAffectedHostInstances;\nexports.getFamilyByID = getFamilyByID;\nexports.getFamilyByType = getFamilyByType;\nexports.hasUnrecoverableErrors = hasUnrecoverableErrors;\nexports.injectIntoGlobalHook = injectIntoGlobalHook;\nexports.isLikelyComponentType = isLikelyComponentType;\nexports.performReactRefresh = performReactRefresh;\nexports.register = register;\nexports.setSignature = setSignature;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtcmVmcmVzaC9janMvcmVhY3QtcmVmcmVzaC1ydW50aW1lLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFFQUFxRTtBQUNyRTs7QUFFQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUEsbURBQW1EO0FBQ25EOztBQUVBLHlCQUF5Qjs7QUFFekI7QUFDQSwrQkFBK0I7O0FBRS9CLDhCQUE4Qjs7QUFFOUIsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixrQkFBa0I7QUFDcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxVQUFVOztBQUVWO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCw2REFBNkQ7QUFDN0QsK0VBQStFO0FBQy9FO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxvQ0FBb0M7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7OztBQUdkO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQSxZQUFZOzs7QUFHWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsMkNBQTJDO0FBQzNDLGlDQUFpQztBQUNqQyxxQkFBcUI7QUFDckIsdUJBQXVCO0FBQ3ZCLDhCQUE4QjtBQUM5Qiw0QkFBNEI7QUFDNUIsNkJBQTZCO0FBQzdCLDJCQUEyQjtBQUMzQixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LXJlZnJlc2gvY2pzL3JlYWN0LXJlZnJlc2gtcnVudGltZS5kZXZlbG9wbWVudC5qcz83ZTg3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LXJlZnJlc2gtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIEFUVEVOVElPTlxudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKTtcblxudmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDsgLy8gV2UgbmV2ZXIgcmVtb3ZlIHRoZXNlIGFzc29jaWF0aW9ucy5cbi8vIEl0J3MgT0sgdG8gcmVmZXJlbmNlIGZhbWlsaWVzLCBidXQgdXNlIFdlYWtNYXAvU2V0IGZvciB0eXBlcy5cblxudmFyIGFsbEZhbWlsaWVzQnlJRCA9IG5ldyBNYXAoKTtcbnZhciBhbGxGYW1pbGllc0J5VHlwZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbnZhciBhbGxTaWduYXR1cmVzQnlUeXBlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpOyAvLyBUaGlzIFdlYWtNYXAgaXMgcmVhZCBieSBSZWFjdCwgc28gd2Ugb25seSBwdXQgZmFtaWxpZXNcbi8vIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGVkaXRlZCBoZXJlLiBUaGlzIGtlZXBzIGNoZWNrcyBmYXN0LlxuLy8gJEZsb3dJc3N1ZVxuXG52YXIgdXBkYXRlZEZhbWlsaWVzQnlUeXBlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpOyAvLyBUaGlzIGlzIGNsZWFyZWQgb24gZXZlcnkgcGVyZm9ybVJlYWN0UmVmcmVzaCgpIGNhbGwuXG4vLyBJdCBpcyBhbiBhcnJheSBvZiBbRmFtaWx5LCBOZXh0VHlwZV0gdHVwbGVzLlxuXG52YXIgcGVuZGluZ1VwZGF0ZXMgPSBbXTsgLy8gVGhpcyBpcyBpbmplY3RlZCBieSB0aGUgcmVuZGVyZXIgdmlhIERldlRvb2xzIGdsb2JhbCBob29rLlxuXG52YXIgaGVscGVyc0J5UmVuZGVyZXJJRCA9IG5ldyBNYXAoKTtcbnZhciBoZWxwZXJzQnlSb290ID0gbmV3IE1hcCgpOyAvLyBXZSBrZWVwIHRyYWNrIG9mIG1vdW50ZWQgcm9vdHMgc28gd2UgY2FuIHNjaGVkdWxlIHVwZGF0ZXMuXG5cbnZhciBtb3VudGVkUm9vdHMgPSBuZXcgU2V0KCk7IC8vIElmIGEgcm9vdCBjYXB0dXJlcyBhbiBlcnJvciwgd2UgcmVtZW1iZXIgaXQgc28gd2UgY2FuIHJldHJ5IG9uIGVkaXQuXG5cbnZhciBmYWlsZWRSb290cyA9IG5ldyBTZXQoKTsgLy8gSW4gZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBXZWFrTWFwLCB3ZSBhbHNvIHJlbWVtYmVyIHRoZSBsYXN0IGVsZW1lbnQgZm9yIGV2ZXJ5IHJvb3QuXG4vLyBJdCBuZWVkcyB0byBiZSB3ZWFrIGJlY2F1c2Ugd2UgZG8gdGhpcyBldmVuIGZvciByb290cyB0aGF0IGZhaWxlZCB0byBtb3VudC5cbi8vIElmIHRoZXJlIGlzIG5vIFdlYWtNYXAsIHdlIHdvbid0IGF0dGVtcHQgdG8gZG8gcmV0cnlpbmcuXG4vLyAkRmxvd0lzc3VlXG5cbnZhciByb290RWxlbWVudHMgPSAvLyAkRmxvd0lzc3VlXG50eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBXZWFrTWFwKCkgOiBudWxsO1xudmFyIGlzUGVyZm9ybWluZ1JlZnJlc2ggPSBmYWxzZTtcblxuZnVuY3Rpb24gY29tcHV0ZUZ1bGxLZXkoc2lnbmF0dXJlKSB7XG4gIGlmIChzaWduYXR1cmUuZnVsbEtleSAhPT0gbnVsbCkge1xuICAgIHJldHVybiBzaWduYXR1cmUuZnVsbEtleTtcbiAgfVxuXG4gIHZhciBmdWxsS2V5ID0gc2lnbmF0dXJlLm93bktleTtcbiAgdmFyIGhvb2tzO1xuXG4gIHRyeSB7XG4gICAgaG9va3MgPSBzaWduYXR1cmUuZ2V0Q3VzdG9tSG9va3MoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVGhpcyBjYW4gaGFwcGVuIGluIGFuIGVkZ2UgY2FzZSwgZS5nLiBpZiBleHByZXNzaW9uIGxpa2UgRm9vLnVzZVNvbWV0aGluZ1xuICAgIC8vIGRlcGVuZHMgb24gRm9vIHdoaWNoIGlzIGxhemlseSBpbml0aWFsaXplZCBkdXJpbmcgcmVuZGVyaW5nLlxuICAgIC8vIEluIHRoYXQgY2FzZSBqdXN0IGFzc3VtZSB3ZSdsbCBoYXZlIHRvIHJlbW91bnQuXG4gICAgc2lnbmF0dXJlLmZvcmNlUmVzZXQgPSB0cnVlO1xuICAgIHNpZ25hdHVyZS5mdWxsS2V5ID0gZnVsbEtleTtcbiAgICByZXR1cm4gZnVsbEtleTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaG9vayA9IGhvb2tzW2ldO1xuXG4gICAgaWYgKHR5cGVvZiBob29rICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBTb21ldGhpbmcncyB3cm9uZy4gQXNzdW1lIHdlIG5lZWQgdG8gcmVtb3VudC5cbiAgICAgIHNpZ25hdHVyZS5mb3JjZVJlc2V0ID0gdHJ1ZTtcbiAgICAgIHNpZ25hdHVyZS5mdWxsS2V5ID0gZnVsbEtleTtcbiAgICAgIHJldHVybiBmdWxsS2V5O1xuICAgIH1cblxuICAgIHZhciBuZXN0ZWRIb29rU2lnbmF0dXJlID0gYWxsU2lnbmF0dXJlc0J5VHlwZS5nZXQoaG9vayk7XG5cbiAgICBpZiAobmVzdGVkSG9va1NpZ25hdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBObyBzaWduYXR1cmUgbWVhbnMgSG9vayB3YXNuJ3QgaW4gdGhlIHNvdXJjZSBjb2RlLCBlLmcuIGluIGEgbGlicmFyeS5cbiAgICAgIC8vIFdlJ2xsIHNraXAgaXQgYmVjYXVzZSB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGNoYW5nZSBkdXJpbmcgdGhpcyBzZXNzaW9uLlxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5lc3RlZEhvb2tLZXkgPSBjb21wdXRlRnVsbEtleShuZXN0ZWRIb29rU2lnbmF0dXJlKTtcblxuICAgIGlmIChuZXN0ZWRIb29rU2lnbmF0dXJlLmZvcmNlUmVzZXQpIHtcbiAgICAgIHNpZ25hdHVyZS5mb3JjZVJlc2V0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdWxsS2V5ICs9ICdcXG4tLS1cXG4nICsgbmVzdGVkSG9va0tleTtcbiAgfVxuXG4gIHNpZ25hdHVyZS5mdWxsS2V5ID0gZnVsbEtleTtcbiAgcmV0dXJuIGZ1bGxLZXk7XG59XG5cbmZ1bmN0aW9uIGhhdmVFcXVhbFNpZ25hdHVyZXMocHJldlR5cGUsIG5leHRUeXBlKSB7XG4gIHZhciBwcmV2U2lnbmF0dXJlID0gYWxsU2lnbmF0dXJlc0J5VHlwZS5nZXQocHJldlR5cGUpO1xuICB2YXIgbmV4dFNpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KG5leHRUeXBlKTtcblxuICBpZiAocHJldlNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkICYmIG5leHRTaWduYXR1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHByZXZTaWduYXR1cmUgPT09IHVuZGVmaW5lZCB8fCBuZXh0U2lnbmF0dXJlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoY29tcHV0ZUZ1bGxLZXkocHJldlNpZ25hdHVyZSkgIT09IGNvbXB1dGVGdWxsS2V5KG5leHRTaWduYXR1cmUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG5leHRTaWduYXR1cmUuZm9yY2VSZXNldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1JlYWN0Q2xhc3ModHlwZSkge1xuICByZXR1cm4gdHlwZS5wcm90b3R5cGUgJiYgdHlwZS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudDtcbn1cblxuZnVuY3Rpb24gY2FuUHJlc2VydmVTdGF0ZUJldHdlZW4ocHJldlR5cGUsIG5leHRUeXBlKSB7XG4gIGlmIChpc1JlYWN0Q2xhc3MocHJldlR5cGUpIHx8IGlzUmVhY3RDbGFzcyhuZXh0VHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaGF2ZUVxdWFsU2lnbmF0dXJlcyhwcmV2VHlwZSwgbmV4dFR5cGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVGYW1pbHkodHlwZSkge1xuICAvLyBPbmx5IGNoZWNrIHVwZGF0ZWQgdHlwZXMgdG8ga2VlcCBsb29rdXBzIGZhc3QuXG4gIHJldHVybiB1cGRhdGVkRmFtaWxpZXNCeVR5cGUuZ2V0KHR5cGUpO1xufSAvLyBJZiB3ZSBkaWRuJ3QgY2FyZSBhYm91dCBJRTExLCB3ZSBjb3VsZCB1c2UgbmV3IE1hcC9TZXQoaXRlcmFibGUpLlxuXG5cbmZ1bmN0aW9uIGNsb25lTWFwKG1hcCkge1xuICB2YXIgY2xvbmUgPSBuZXcgTWFwKCk7XG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgY2xvbmUuc2V0KGtleSwgdmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIGNsb25lO1xufVxuXG5mdW5jdGlvbiBjbG9uZVNldChzZXQpIHtcbiAgdmFyIGNsb25lID0gbmV3IFNldCgpO1xuICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBjbG9uZS5hZGQodmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIGNsb25lO1xufSAvLyBUaGlzIGlzIGEgc2FmZXR5IG1lY2hhbmlzbSB0byBwcm90ZWN0IGFnYWluc3Qgcm9ndWUgZ2V0dGVycyBhbmQgUHJveGllcy5cblxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9iamVjdFtwcm9wZXJ0eV07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIEludGVudGlvbmFsbHkgaWdub3JlLlxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyZm9ybVJlYWN0UmVmcmVzaCgpIHtcblxuICBpZiAocGVuZGluZ1VwZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaXNQZXJmb3JtaW5nUmVmcmVzaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaXNQZXJmb3JtaW5nUmVmcmVzaCA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICB2YXIgc3RhbGVGYW1pbGllcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdXBkYXRlZEZhbWlsaWVzID0gbmV3IFNldCgpO1xuICAgIHZhciB1cGRhdGVzID0gcGVuZGluZ1VwZGF0ZXM7XG4gICAgcGVuZGluZ1VwZGF0ZXMgPSBbXTtcbiAgICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBmYW1pbHkgPSBfcmVmWzBdLFxuICAgICAgICAgIG5leHRUeXBlID0gX3JlZlsxXTtcbiAgICAgIC8vIE5vdyB0aGF0IHdlIGdvdCBhIHJlYWwgZWRpdCwgd2UgY2FuIGNyZWF0ZSBhc3NvY2lhdGlvbnNcbiAgICAgIC8vIHRoYXQgd2lsbCBiZSByZWFkIGJ5IHRoZSBSZWFjdCByZWNvbmNpbGVyLlxuICAgICAgdmFyIHByZXZUeXBlID0gZmFtaWx5LmN1cnJlbnQ7XG4gICAgICB1cGRhdGVkRmFtaWxpZXNCeVR5cGUuc2V0KHByZXZUeXBlLCBmYW1pbHkpO1xuICAgICAgdXBkYXRlZEZhbWlsaWVzQnlUeXBlLnNldChuZXh0VHlwZSwgZmFtaWx5KTtcbiAgICAgIGZhbWlseS5jdXJyZW50ID0gbmV4dFR5cGU7IC8vIERldGVybWluZSB3aGV0aGVyIHRoaXMgc2hvdWxkIGJlIGEgcmUtcmVuZGVyIG9yIGEgcmUtbW91bnQuXG5cbiAgICAgIGlmIChjYW5QcmVzZXJ2ZVN0YXRlQmV0d2VlbihwcmV2VHlwZSwgbmV4dFR5cGUpKSB7XG4gICAgICAgIHVwZGF0ZWRGYW1pbGllcy5hZGQoZmFtaWx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YWxlRmFtaWxpZXMuYWRkKGZhbWlseSk7XG4gICAgICB9XG4gICAgfSk7IC8vIFRPRE86IHJlbmFtZSB0aGVzZSBmaWVsZHMgdG8gc29tZXRoaW5nIG1vcmUgbWVhbmluZ2Z1bC5cblxuICAgIHZhciB1cGRhdGUgPSB7XG4gICAgICB1cGRhdGVkRmFtaWxpZXM6IHVwZGF0ZWRGYW1pbGllcyxcbiAgICAgIC8vIEZhbWlsaWVzIHRoYXQgd2lsbCByZS1yZW5kZXIgcHJlc2VydmluZyBzdGF0ZVxuICAgICAgc3RhbGVGYW1pbGllczogc3RhbGVGYW1pbGllcyAvLyBGYW1pbGllcyB0aGF0IHdpbGwgYmUgcmVtb3VudGVkXG5cbiAgICB9O1xuICAgIGhlbHBlcnNCeVJlbmRlcmVySUQuZm9yRWFjaChmdW5jdGlvbiAoaGVscGVycykge1xuICAgICAgLy8gRXZlbiBpZiB0aGVyZSBhcmUgbm8gcm9vdHMsIHNldCB0aGUgaGFuZGxlciBvbiBmaXJzdCB1cGRhdGUuXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBpZiAqbmV3KiByb290cyBhcmUgbW91bnRlZCwgdGhleSdsbCB1c2UgdGhlIHJlc29sdmUgaGFuZGxlci5cbiAgICAgIGhlbHBlcnMuc2V0UmVmcmVzaEhhbmRsZXIocmVzb2x2ZUZhbWlseSk7XG4gICAgfSk7XG4gICAgdmFyIGRpZEVycm9yID0gZmFsc2U7XG4gICAgdmFyIGZpcnN0RXJyb3IgPSBudWxsOyAvLyBXZSBzbmFwc2hvdCBtYXBzIGFuZCBzZXRzIHRoYXQgYXJlIG11dGF0ZWQgZHVyaW5nIGNvbW1pdHMuXG4gICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlcmUgaXMgYSByaXNrIHRoZXkgd2lsbCBiZSBtdXRhdGVkIHdoaWxlXG4gICAgLy8gd2UgaXRlcmF0ZSBvdmVyIHRoZW0uIEZvciBleGFtcGxlLCB0cnlpbmcgdG8gcmVjb3ZlciBhIGZhaWxlZCByb290XG4gICAgLy8gbWF5IGNhdXNlIGFub3RoZXIgcm9vdCB0byBiZSBhZGRlZCB0byB0aGUgZmFpbGVkIGxpc3QgLS0gYW4gaW5maW5pdGUgbG9vcC5cblxuICAgIHZhciBmYWlsZWRSb290c1NuYXBzaG90ID0gY2xvbmVTZXQoZmFpbGVkUm9vdHMpO1xuICAgIHZhciBtb3VudGVkUm9vdHNTbmFwc2hvdCA9IGNsb25lU2V0KG1vdW50ZWRSb290cyk7XG4gICAgdmFyIGhlbHBlcnNCeVJvb3RTbmFwc2hvdCA9IGNsb25lTWFwKGhlbHBlcnNCeVJvb3QpO1xuICAgIGZhaWxlZFJvb3RzU25hcHNob3QuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgdmFyIGhlbHBlcnMgPSBoZWxwZXJzQnlSb290U25hcHNob3QuZ2V0KHJvb3QpO1xuXG4gICAgICBpZiAoaGVscGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgaGVscGVycyBmb3IgYSByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0IFJlZnJlc2guJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZmFpbGVkUm9vdHMuaGFzKHJvb3QpKSB7Ly8gTm8gbG9uZ2VyIGZhaWxlZC5cbiAgICAgIH1cblxuICAgICAgaWYgKHJvb3RFbGVtZW50cyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghcm9vdEVsZW1lbnRzLmhhcyhyb290KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50ID0gcm9vdEVsZW1lbnRzLmdldChyb290KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaGVscGVycy5zY2hlZHVsZVJvb3Qocm9vdCwgZWxlbWVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFkaWRFcnJvcikge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBmaXJzdEVycm9yID0gZXJyO1xuICAgICAgICB9IC8vIEtlZXAgdHJ5aW5nIG90aGVyIHJvb3RzLlxuXG4gICAgICB9XG4gICAgfSk7XG4gICAgbW91bnRlZFJvb3RzU25hcHNob3QuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgdmFyIGhlbHBlcnMgPSBoZWxwZXJzQnlSb290U25hcHNob3QuZ2V0KHJvb3QpO1xuXG4gICAgICBpZiAoaGVscGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgaGVscGVycyBmb3IgYSByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0IFJlZnJlc2guJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghbW91bnRlZFJvb3RzLmhhcyhyb290KSkgey8vIE5vIGxvbmdlciBtb3VudGVkLlxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBoZWxwZXJzLnNjaGVkdWxlUmVmcmVzaChyb290LCB1cGRhdGUpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghZGlkRXJyb3IpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgZmlyc3RFcnJvciA9IGVycjtcbiAgICAgICAgfSAvLyBLZWVwIHRyeWluZyBvdGhlciByb290cy5cblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICB0aHJvdyBmaXJzdEVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGU7XG4gIH0gZmluYWxseSB7XG4gICAgaXNQZXJmb3JtaW5nUmVmcmVzaCA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiByZWdpc3Rlcih0eXBlLCBpZCkge1xuICB7XG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gaW4gYW4gZWRnZSBjYXNlLCBlLmcuIGlmIHdlIHJlZ2lzdGVyXG4gICAgLy8gcmV0dXJuIHZhbHVlIG9mIGEgSE9DIGJ1dCBpdCByZXR1cm5zIGEgY2FjaGVkIGNvbXBvbmVudC5cbiAgICAvLyBJZ25vcmUgYW55dGhpbmcgYnV0IHRoZSBmaXJzdCByZWdpc3RyYXRpb24gZm9yIGVhY2ggdHlwZS5cblxuXG4gICAgaWYgKGFsbEZhbWlsaWVzQnlUeXBlLmhhcyh0eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gQ3JlYXRlIGZhbWlseSBvciByZW1lbWJlciB0byB1cGRhdGUgaXQuXG4gICAgLy8gTm9uZSBvZiB0aGlzIGJvb2trZWVwaW5nIGFmZmVjdHMgcmVjb25jaWxpYXRpb25cbiAgICAvLyB1bnRpbCB0aGUgZmlyc3QgcGVyZm9ybVJlYWN0UmVmcmVzaCgpIGNhbGwgYWJvdmUuXG5cblxuICAgIHZhciBmYW1pbHkgPSBhbGxGYW1pbGllc0J5SUQuZ2V0KGlkKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmFtaWx5ID0ge1xuICAgICAgICBjdXJyZW50OiB0eXBlXG4gICAgICB9O1xuICAgICAgYWxsRmFtaWxpZXNCeUlELnNldChpZCwgZmFtaWx5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ1VwZGF0ZXMucHVzaChbZmFtaWx5LCB0eXBlXSk7XG4gICAgfVxuXG4gICAgYWxsRmFtaWxpZXNCeVR5cGUuc2V0KHR5cGUsIGZhbWlseSk7IC8vIFZpc2l0IGlubmVyIHR5cGVzIGJlY2F1c2Ugd2UgbWlnaHQgbm90IGhhdmUgcmVnaXN0ZXJlZCB0aGVtLlxuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKGdldFByb3BlcnR5KHR5cGUsICckJHR5cGVvZicpKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICByZWdpc3Rlcih0eXBlLnJlbmRlciwgaWQgKyAnJHJlbmRlcicpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgIHJlZ2lzdGVyKHR5cGUudHlwZSwgaWQgKyAnJHR5cGUnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHNldFNpZ25hdHVyZSh0eXBlLCBrZXkpIHtcbiAgdmFyIGZvcmNlUmVzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICB2YXIgZ2V0Q3VzdG9tSG9va3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcblxuICB7XG4gICAgaWYgKCFhbGxTaWduYXR1cmVzQnlUeXBlLmhhcyh0eXBlKSkge1xuICAgICAgYWxsU2lnbmF0dXJlc0J5VHlwZS5zZXQodHlwZSwge1xuICAgICAgICBmb3JjZVJlc2V0OiBmb3JjZVJlc2V0LFxuICAgICAgICBvd25LZXk6IGtleSxcbiAgICAgICAgZnVsbEtleTogbnVsbCxcbiAgICAgICAgZ2V0Q3VzdG9tSG9va3M6IGdldEN1c3RvbUhvb2tzIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gLy8gVmlzaXQgaW5uZXIgdHlwZXMgYmVjYXVzZSB3ZSBtaWdodCBub3QgaGF2ZSBzaWduZWQgdGhlbS5cblxuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKGdldFByb3BlcnR5KHR5cGUsICckJHR5cGVvZicpKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICBzZXRTaWduYXR1cmUodHlwZS5yZW5kZXIsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgIHNldFNpZ25hdHVyZSh0eXBlLnR5cGUsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBUaGlzIGlzIGxhemlseSBjYWxsZWQgZHVyaW5nIGZpcnN0IHJlbmRlciBmb3IgYSB0eXBlLlxuLy8gSXQgY2FwdHVyZXMgSG9vayBsaXN0IGF0IHRoYXQgdGltZSBzbyBpbmxpbmUgcmVxdWlyZXMgZG9uJ3QgYnJlYWsgY29tcGFyaXNvbnMuXG5cbmZ1bmN0aW9uIGNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZSh0eXBlKSB7XG4gIHtcbiAgICB2YXIgc2lnbmF0dXJlID0gYWxsU2lnbmF0dXJlc0J5VHlwZS5nZXQodHlwZSk7XG5cbiAgICBpZiAoc2lnbmF0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbXB1dGVGdWxsS2V5KHNpZ25hdHVyZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRGYW1pbHlCeUlEKGlkKSB7XG4gIHtcbiAgICByZXR1cm4gYWxsRmFtaWxpZXNCeUlELmdldChpZCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZhbWlseUJ5VHlwZSh0eXBlKSB7XG4gIHtcbiAgICByZXR1cm4gYWxsRmFtaWxpZXNCeVR5cGUuZ2V0KHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBmaW5kQWZmZWN0ZWRIb3N0SW5zdGFuY2VzKGZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgYWZmZWN0ZWRJbnN0YW5jZXMgPSBuZXcgU2V0KCk7XG4gICAgbW91bnRlZFJvb3RzLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5Um9vdC5nZXQocm9vdCk7XG5cbiAgICAgIGlmIChoZWxwZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBoZWxwZXJzIGZvciBhIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QgUmVmcmVzaC4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluc3RhbmNlc0ZvclJvb3QgPSBoZWxwZXJzLmZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaChyb290LCBmYW1pbGllcyk7XG4gICAgICBpbnN0YW5jZXNGb3JSb290LmZvckVhY2goZnVuY3Rpb24gKGluc3QpIHtcbiAgICAgICAgYWZmZWN0ZWRJbnN0YW5jZXMuYWRkKGluc3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFmZmVjdGVkSW5zdGFuY2VzO1xuICB9XG59XG5mdW5jdGlvbiBpbmplY3RJbnRvR2xvYmFsSG9vayhnbG9iYWxPYmplY3QpIHtcbiAge1xuICAgIC8vIEZvciBSZWFjdCBOYXRpdmUsIHRoZSBnbG9iYWwgaG9vayB3aWxsIGJlIHNldCB1cCBieSByZXF1aXJlKCdyZWFjdC1kZXZ0b29scy1jb3JlJykuXG4gICAgLy8gVGhhdCBjb2RlIHdpbGwgcnVuIGJlZm9yZSB1cy4gU28gd2UgbmVlZCB0byBtb25rZXlwYXRjaCBmdW5jdGlvbnMgb24gZXhpc3RpbmcgaG9vay5cbiAgICAvLyBGb3IgUmVhY3QgV2ViLCB0aGUgZ2xvYmFsIGhvb2sgd2lsbCBiZSBzZXQgdXAgYnkgdGhlIGV4dGVuc2lvbi5cbiAgICAvLyBUaGlzIHdpbGwgYWxzbyBydW4gYmVmb3JlIHVzLlxuICAgIHZhciBob29rID0gZ2xvYmFsT2JqZWN0Ll9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICAgIGlmIChob29rID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEhvd2V2ZXIsIGlmIHRoZXJlIGlzIG5vIERldlRvb2xzIGV4dGVuc2lvbiwgd2UnbGwgbmVlZCB0byBzZXQgdXAgdGhlIGdsb2JhbCBob29rIG91cnNlbHZlcy5cbiAgICAgIC8vIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgaXQncyBpbXBvcnRhbnQgdGhhdCByZW5kZXJlciBjb2RlIHJ1bnMgKmFmdGVyKiB0aGlzIG1ldGhvZCBjYWxsLlxuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVuZGVyZXIgd2lsbCB0aGluayB0aGF0IHRoZXJlIGlzIG5vIGdsb2JhbCBob29rLCBhbmQgd29uJ3QgZG8gdGhlIGluamVjdGlvbi5cbiAgICAgIHZhciBuZXh0SUQgPSAwO1xuICAgICAgZ2xvYmFsT2JqZWN0Ll9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9IGhvb2sgPSB7XG4gICAgICAgIHJlbmRlcmVyczogbmV3IE1hcCgpLFxuICAgICAgICBzdXBwb3J0c0ZpYmVyOiB0cnVlLFxuICAgICAgICBpbmplY3Q6IGZ1bmN0aW9uIChpbmplY3RlZCkge1xuICAgICAgICAgIHJldHVybiBuZXh0SUQrKztcbiAgICAgICAgfSxcbiAgICAgICAgb25TY2hlZHVsZUZpYmVyUm9vdDogZnVuY3Rpb24gKGlkLCByb290LCBjaGlsZHJlbikge30sXG4gICAgICAgIG9uQ29tbWl0RmliZXJSb290OiBmdW5jdGlvbiAoaWQsIHJvb3QsIG1heWJlUHJpb3JpdHlMZXZlbCwgZGlkRXJyb3IpIHt9LFxuICAgICAgICBvbkNvbW1pdEZpYmVyVW5tb3VudDogZnVuY3Rpb24gKCkge31cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGhvb2suaXNEaXNhYmxlZCkge1xuICAgICAgLy8gVGhpcyBpc24ndCBhIHJlYWwgcHJvcGVydHkgb24gdGhlIGhvb2ssIGJ1dCBpdCBjYW4gYmUgc2V0IHRvIG9wdCBvdXRcbiAgICAgIC8vIG9mIERldlRvb2xzIGludGVncmF0aW9uIGFuZCBhc3NvY2lhdGVkIHdhcm5pbmdzIGFuZCBsb2dzLlxuICAgICAgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnU29tZXRoaW5nIGhhcyBzaGltbWVkIHRoZSBSZWFjdCBEZXZUb29scyBnbG9iYWwgaG9vayAoX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKS4gJyArICdGYXN0IFJlZnJlc2ggaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIHNoaW0gYW5kIHdpbGwgYmUgZGlzYWJsZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBIZXJlLCB3ZSBqdXN0IHdhbnQgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHNjaGVkdWxlUmVmcmVzaC5cblxuXG4gICAgdmFyIG9sZEluamVjdCA9IGhvb2suaW5qZWN0O1xuXG4gICAgaG9vay5pbmplY3QgPSBmdW5jdGlvbiAoaW5qZWN0ZWQpIHtcbiAgICAgIHZhciBpZCA9IG9sZEluamVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgICBpZiAodHlwZW9mIGluamVjdGVkLnNjaGVkdWxlUmVmcmVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5qZWN0ZWQuc2V0UmVmcmVzaEhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVGhpcyB2ZXJzaW9uIHN1cHBvcnRzIFJlYWN0IFJlZnJlc2guXG4gICAgICAgIGhlbHBlcnNCeVJlbmRlcmVySUQuc2V0KGlkLCBpbmplY3RlZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpZDtcbiAgICB9OyAvLyBEbyB0aGUgc2FtZSBmb3IgYW55IGFscmVhZHkgaW5qZWN0ZWQgcm9vdHMuXG4gICAgLy8gVGhpcyBpcyB1c2VmdWwgaWYgUmVhY3RET00gaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE3NjI2XG5cblxuICAgIGhvb2sucmVuZGVyZXJzLmZvckVhY2goZnVuY3Rpb24gKGluamVjdGVkLCBpZCkge1xuICAgICAgaWYgKHR5cGVvZiBpbmplY3RlZC5zY2hlZHVsZVJlZnJlc2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluamVjdGVkLnNldFJlZnJlc2hIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRoaXMgdmVyc2lvbiBzdXBwb3J0cyBSZWFjdCBSZWZyZXNoLlxuICAgICAgICBoZWxwZXJzQnlSZW5kZXJlcklELnNldChpZCwgaW5qZWN0ZWQpO1xuICAgICAgfVxuICAgIH0pOyAvLyBXZSBhbHNvIHdhbnQgdG8gdHJhY2sgY3VycmVudGx5IG1vdW50ZWQgcm9vdHMuXG5cbiAgICB2YXIgb2xkT25Db21taXRGaWJlclJvb3QgPSBob29rLm9uQ29tbWl0RmliZXJSb290O1xuXG4gICAgdmFyIG9sZE9uU2NoZWR1bGVGaWJlclJvb3QgPSBob29rLm9uU2NoZWR1bGVGaWJlclJvb3QgfHwgZnVuY3Rpb24gKCkge307XG5cbiAgICBob29rLm9uU2NoZWR1bGVGaWJlclJvb3QgPSBmdW5jdGlvbiAoaWQsIHJvb3QsIGNoaWxkcmVuKSB7XG4gICAgICBpZiAoIWlzUGVyZm9ybWluZ1JlZnJlc2gpIHtcbiAgICAgICAgLy8gSWYgaXQgd2FzIGludGVudGlvbmFsbHkgc2NoZWR1bGVkLCBkb24ndCBhdHRlbXB0IHRvIHJlc3RvcmUuXG4gICAgICAgIC8vIFRoaXMgaW5jbHVkZXMgaW50ZW50aW9uYWxseSBzY2hlZHVsZWQgdW5tb3VudHMuXG4gICAgICAgIGZhaWxlZFJvb3RzLmRlbGV0ZShyb290KTtcblxuICAgICAgICBpZiAocm9vdEVsZW1lbnRzICE9PSBudWxsKSB7XG4gICAgICAgICAgcm9vdEVsZW1lbnRzLnNldChyb290LCBjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9sZE9uU2NoZWR1bGVGaWJlclJvb3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgaG9vay5vbkNvbW1pdEZpYmVyUm9vdCA9IGZ1bmN0aW9uIChpZCwgcm9vdCwgbWF5YmVQcmlvcml0eUxldmVsLCBkaWRFcnJvcikge1xuICAgICAgdmFyIGhlbHBlcnMgPSBoZWxwZXJzQnlSZW5kZXJlcklELmdldChpZCk7XG5cbiAgICAgIGlmIChoZWxwZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVscGVyc0J5Um9vdC5zZXQocm9vdCwgaGVscGVycyk7XG4gICAgICAgIHZhciBjdXJyZW50ID0gcm9vdC5jdXJyZW50O1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gY3VycmVudC5hbHRlcm5hdGU7IC8vIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyByb290IGhhcyBqdXN0ICh1biltb3VudGVkLlxuICAgICAgICAvLyBUaGlzIGxvZ2ljIGlzIGNvcHktcGFzdGVkIGZyb20gc2ltaWxhciBsb2dpYyBpbiB0aGUgRGV2VG9vbHMgYmFja2VuZC5cbiAgICAgICAgLy8gSWYgdGhpcyBicmVha3Mgd2l0aCBzb21lIHJlZmFjdG9yaW5nLCB5b3UnbGwgd2FudCB0byB1cGRhdGUgRGV2VG9vbHMgdG9vLlxuXG4gICAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgd2FzTW91bnRlZCA9IGFsdGVybmF0ZS5tZW1vaXplZFN0YXRlICE9IG51bGwgJiYgYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuZWxlbWVudCAhPSBudWxsICYmIG1vdW50ZWRSb290cy5oYXMocm9vdCk7XG4gICAgICAgICAgdmFyIGlzTW91bnRlZCA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5lbGVtZW50ICE9IG51bGw7XG5cbiAgICAgICAgICBpZiAoIXdhc01vdW50ZWQgJiYgaXNNb3VudGVkKSB7XG4gICAgICAgICAgICAvLyBNb3VudCBhIG5ldyByb290LlxuICAgICAgICAgICAgbW91bnRlZFJvb3RzLmFkZChyb290KTtcbiAgICAgICAgICAgIGZhaWxlZFJvb3RzLmRlbGV0ZShyb290KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc01vdW50ZWQgJiYgaXNNb3VudGVkKSA7IGVsc2UgaWYgKHdhc01vdW50ZWQgJiYgIWlzTW91bnRlZCkge1xuICAgICAgICAgICAgLy8gVW5tb3VudCBhbiBleGlzdGluZyByb290LlxuICAgICAgICAgICAgbW91bnRlZFJvb3RzLmRlbGV0ZShyb290KTtcblxuICAgICAgICAgICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ2xsIHJlbW91bnQgaXQgb24gZnV0dXJlIGVkaXRzLlxuICAgICAgICAgICAgICBmYWlsZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBoZWxwZXJzQnlSb290LmRlbGV0ZShyb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCF3YXNNb3VudGVkICYmICFpc01vdW50ZWQpIHtcbiAgICAgICAgICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgICAgICAgICAvLyBXZSdsbCByZW1vdW50IGl0IG9uIGZ1dHVyZSBlZGl0cy5cbiAgICAgICAgICAgICAgZmFpbGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBNb3VudCBhIG5ldyByb290LlxuICAgICAgICAgIG1vdW50ZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQWx3YXlzIGNhbGwgdGhlIGRlY29yYXRlZCBEZXZUb29scyBob29rLlxuXG5cbiAgICAgIHJldHVybiBvbGRPbkNvbW1pdEZpYmVyUm9vdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc1VucmVjb3ZlcmFibGVFcnJvcnMoKSB7XG4gIC8vIFRPRE86IGRlbGV0ZSB0aGlzIGFmdGVyIHJlbW92aW5nIGRlcGVuZGVuY3kgaW4gUk4uXG4gIHJldHVybiBmYWxzZTtcbn0gLy8gRXhwb3NlZCBmb3IgdGVzdGluZy5cblxuZnVuY3Rpb24gX2dldE1vdW50ZWRSb290Q291bnQoKSB7XG4gIHtcbiAgICByZXR1cm4gbW91bnRlZFJvb3RzLnNpemU7XG4gIH1cbn0gLy8gVGhpcyBpcyBhIHdyYXBwZXIgb3ZlciBtb3JlIHByaW1pdGl2ZSBmdW5jdGlvbnMgZm9yIHNldHRpbmcgc2lnbmF0dXJlLlxuLy8gU2lnbmF0dXJlcyBsZXQgdXMgZGVjaWRlIHdoZXRoZXIgdGhlIEhvb2sgb3JkZXIgaGFzIGNoYW5nZWQgb24gcmVmcmVzaC5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSB0cmFuc2Zvcm0gdGFyZ2V0LCBlLmcuOlxuLy8gdmFyIF9zID0gY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm0oKVxuLy9cbi8vIGZ1bmN0aW9uIEhlbGxvKCkge1xuLy8gICBjb25zdCBbZm9vLCBzZXRGb29dID0gdXNlU3RhdGUoMCk7XG4vLyAgIGNvbnN0IHZhbHVlID0gdXNlQ3VzdG9tSG9vaygpO1xuLy8gICBfcygpOyAvKiBDYWxsIHdpdGhvdXQgYXJndW1lbnRzIHRyaWdnZXJzIGNvbGxlY3RpbmcgdGhlIGN1c3RvbSBIb29rIGxpc3QuXG4vLyAgICAgICAgICAqIFRoaXMgZG9lc24ndCBoYXBwZW4gZHVyaW5nIHRoZSBtb2R1bGUgZXZhbHVhdGlvbiBiZWNhdXNlIHdlXG4vLyAgICAgICAgICAqIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBtb2R1bGUgb3JkZXIgd2l0aCBpbmxpbmUgcmVxdWlyZXMuXG4vLyAgICAgICAgICAqIE5leHQgY2FsbHMgYXJlIG5vb3BzLiAqL1xuLy8gICByZXR1cm4gPGgxPkhpPC9oMT47XG4vLyB9XG4vL1xuLy8gLyogQ2FsbCB3aXRoIGFyZ3VtZW50cyBhdHRhY2hlcyB0aGUgc2lnbmF0dXJlIHRvIHRoZSB0eXBlOiAqL1xuLy8gX3MoXG4vLyAgIEhlbGxvLFxuLy8gICAndXNlU3RhdGV7W2Zvbywgc2V0Rm9vXX0oMCknLFxuLy8gICAoKSA9PiBbdXNlQ3VzdG9tSG9va10sIC8qIExhenkgdG8gYXZvaWQgdHJpZ2dlcmluZyBpbmxpbmUgcmVxdWlyZXMgKi9cbi8vICk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtKCkge1xuICB7XG4gICAgdmFyIHNhdmVkVHlwZTtcbiAgICB2YXIgaGFzQ3VzdG9tSG9va3M7XG4gICAgdmFyIGRpZENvbGxlY3RIb29rcyA9IGZhbHNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAodHlwZSwga2V5LCBmb3JjZVJlc2V0LCBnZXRDdXN0b21Ib29rcykge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIFdlJ3JlIGluIHRoZSBpbml0aWFsIHBoYXNlIHRoYXQgYXNzb2NpYXRlcyBzaWduYXR1cmVzXG4gICAgICAgIC8vIHdpdGggdGhlIGZ1bmN0aW9ucy4gTm90ZSB0aGlzIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgLy8gaW4gSE9DIGNoYWlucyBsaWtlIF9zKGhvYzEoX3MoaG9jMihfcyhhY3R1YWxGdW5jdGlvbikpKSkpLlxuICAgICAgICBpZiAoIXNhdmVkVHlwZSkge1xuICAgICAgICAgIC8vIFdlJ3JlIGluIHRoZSBpbm5lcm1vc3QgY2FsbCwgc28gdGhpcyBpcyB0aGUgYWN0dWFsIHR5cGUuXG4gICAgICAgICAgc2F2ZWRUeXBlID0gdHlwZTtcbiAgICAgICAgICBoYXNDdXN0b21Ib29rcyA9IHR5cGVvZiBnZXRDdXN0b21Ib29rcyA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgfSAvLyBTZXQgdGhlIHNpZ25hdHVyZSBmb3IgYWxsIHR5cGVzIChldmVuIHdyYXBwZXJzISkgaW4gY2FzZVxuICAgICAgICAvLyB0aGV5IGhhdmUgbm8gc2lnbmF0dXJlcyBvZiB0aGVpciBvd24uIFRoaXMgaXMgdG8gcHJldmVudFxuICAgICAgICAvLyBwcm9ibGVtcyBsaWtlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMjA0MTcuXG5cblxuICAgICAgICBpZiAodHlwZSAhPSBudWxsICYmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpKSB7XG4gICAgICAgICAgc2V0U2lnbmF0dXJlKHR5cGUsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSdyZSBpbiB0aGUgX3MoKSBjYWxsIHdpdGhvdXQgYXJndW1lbnRzLCB3aGljaCBtZWFuc1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB0aW1lIHRvIGNvbGxlY3QgY3VzdG9tIEhvb2sgc2lnbmF0dXJlcy5cbiAgICAgICAgLy8gT25seSBkbyB0aGlzIG9uY2UuIFRoaXMgcGF0aCBpcyBob3QgYW5kIHJ1bnMgKmluc2lkZSogZXZlcnkgcmVuZGVyIVxuICAgICAgICBpZiAoIWRpZENvbGxlY3RIb29rcyAmJiBoYXNDdXN0b21Ib29rcykge1xuICAgICAgICAgIGRpZENvbGxlY3RIb29rcyA9IHRydWU7XG4gICAgICAgICAgY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlKHNhdmVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBpc0xpa2VseUNvbXBvbmVudFR5cGUodHlwZSkge1xuICB7XG4gICAgc3dpdGNoICh0eXBlb2YgdHlwZSkge1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gRmlyc3QsIGRlYWwgd2l0aCBjbGFzc2VzLlxuICAgICAgICAgIGlmICh0eXBlLnByb3RvdHlwZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAvLyBSZWFjdCBjbGFzcy5cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvd25OYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHR5cGUucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgaWYgKG93bk5hbWVzLmxlbmd0aCA+IDEgfHwgb3duTmFtZXNbMF0gIT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBsb29rcyBsaWtlIGEgY2xhc3MuXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG5cblxuICAgICAgICAgICAgaWYgKHR5cGUucHJvdG90eXBlLl9fcHJvdG9fXyAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAvLyBJdCBoYXMgYSBzdXBlcmNsYXNzLlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IC8vIFBhc3MgdGhyb3VnaC5cbiAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gd2l0aCBlbXB0eSBwcm90b3R5cGUuXG5cbiAgICAgICAgICB9IC8vIEZvciBwbGFpbiBmdW5jdGlvbnMgYW5kIGFycm93cywgdXNlIG5hbWUgYXMgYSBoZXVyaXN0aWMuXG5cblxuICAgICAgICAgIHZhciBuYW1lID0gdHlwZS5uYW1lIHx8IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiAvXltBLVpdLy50ZXN0KG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGdldFByb3BlcnR5KHR5cGUsICckJHR5cGVvZicpKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgLy8gRGVmaW5pdGVseSBSZWFjdCBjb21wb25lbnRzLlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydHMuX2dldE1vdW50ZWRSb290Q291bnQgPSBfZ2V0TW91bnRlZFJvb3RDb3VudDtcbmV4cG9ydHMuY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlID0gY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlO1xuZXhwb3J0cy5jcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybSA9IGNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtO1xuZXhwb3J0cy5maW5kQWZmZWN0ZWRIb3N0SW5zdGFuY2VzID0gZmluZEFmZmVjdGVkSG9zdEluc3RhbmNlcztcbmV4cG9ydHMuZ2V0RmFtaWx5QnlJRCA9IGdldEZhbWlseUJ5SUQ7XG5leHBvcnRzLmdldEZhbWlseUJ5VHlwZSA9IGdldEZhbWlseUJ5VHlwZTtcbmV4cG9ydHMuaGFzVW5yZWNvdmVyYWJsZUVycm9ycyA9IGhhc1VucmVjb3ZlcmFibGVFcnJvcnM7XG5leHBvcnRzLmluamVjdEludG9HbG9iYWxIb29rID0gaW5qZWN0SW50b0dsb2JhbEhvb2s7XG5leHBvcnRzLmlzTGlrZWx5Q29tcG9uZW50VHlwZSA9IGlzTGlrZWx5Q29tcG9uZW50VHlwZTtcbmV4cG9ydHMucGVyZm9ybVJlYWN0UmVmcmVzaCA9IHBlcmZvcm1SZWFjdFJlZnJlc2g7XG5leHBvcnRzLnJlZ2lzdGVyID0gcmVnaXN0ZXI7XG5leHBvcnRzLnNldFNpZ25hdHVyZSA9IHNldFNpZ25hdHVyZTtcbiAgfSkoKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/runtime.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-refresh/runtime.js ***! + \******************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-refresh-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtcmVmcmVzaC9ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSxzTUFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1yZWZyZXNoL3J1bnRpbWUuanM/OThkNyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtcmVmcmVzaC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LXJlZnJlc2gtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-refresh/runtime.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js": +/*!********************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js ***! + \********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * scheduler.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var enableSchedulerDebugging = false;\nvar enableProfiling = false;\nvar frameYieldMs = 5;\nvar userBlockingPriorityTimeout = 250;\nvar normalPriorityTimeout = 5000;\nvar lowPriorityTimeout = 10000;\n\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n siftUp(heap, node, index);\n}\nfunction peek(heap) {\n return heap.length === 0 ? null : heap[0];\n}\nfunction pop(heap) {\n if (heap.length === 0) {\n return null;\n }\n\n var first = heap[0];\n var last = heap.pop();\n\n if (last !== first) {\n heap[0] = last;\n siftDown(heap, last, 0);\n }\n\n return first;\n}\n\nfunction siftUp(heap, node, i) {\n var index = i;\n\n while (index > 0) {\n var parentIndex = index - 1 >>> 1;\n var parent = heap[parentIndex];\n\n if (compare(parent, node) > 0) {\n // The parent is larger. Swap positions.\n heap[parentIndex] = node;\n heap[index] = parent;\n index = parentIndex;\n } else {\n // The parent is smaller. Exit.\n return;\n }\n }\n}\n\nfunction siftDown(heap, node, i) {\n var index = i;\n var length = heap.length;\n var halfLength = length >>> 1;\n\n while (index < halfLength) {\n var leftIndex = (index + 1) * 2 - 1;\n var left = heap[leftIndex];\n var rightIndex = leftIndex + 1;\n var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.\n\n if (compare(left, node) < 0) {\n if (rightIndex < length && compare(right, left) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n heap[index] = left;\n heap[leftIndex] = node;\n index = leftIndex;\n }\n } else if (rightIndex < length && compare(right, node) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n // Neither child is smaller. Exit.\n return;\n }\n }\n}\n\nfunction compare(a, b) {\n // Compare sort index first, then task id.\n var diff = a.sortIndex - b.sortIndex;\n return diff !== 0 ? diff : a.id - b.id;\n}\n\n// TODO: Use symbols?\nvar ImmediatePriority = 1;\nvar UserBlockingPriority = 2;\nvar NormalPriority = 3;\nvar LowPriority = 4;\nvar IdlePriority = 5;\n\nfunction markTaskErrored(task, ms) {\n}\n\n/* eslint-disable no-var */\nexports.unstable_now = void 0;\nvar hasPerformanceNow = // $FlowFixMe[method-unbinding]\ntypeof performance === 'object' && typeof performance.now === 'function';\n\nif (hasPerformanceNow) {\n var localPerformance = performance;\n\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date;\n var initialTime = localDate.now();\n\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n} // Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\n\n\nvar maxSigned31BitInt = 1073741823; // Tasks are stored on a min heap\n\nvar taskQueue = [];\nvar timerQueue = []; // Incrementing id counter. Used to maintain insertion order.\n\nvar taskIdCounter = 1; // Pausing the scheduler is useful for debugging.\nvar currentTask = null;\nvar currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrance.\n\nvar isPerformingWork = false;\nvar isHostCallbackScheduled = false;\nvar isHostTimeoutScheduled = false; // Capture local references to native APIs, in case a polyfill overrides them.\n\nvar localSetTimeout = typeof setTimeout === 'function' ? setTimeout : null;\nvar localClearTimeout = typeof clearTimeout === 'function' ? clearTimeout : null;\nvar localSetImmediate = typeof setImmediate !== 'undefined' ? setImmediate : null; // IE and Node.js + jsdom\n\ntypeof navigator !== 'undefined' && // $FlowFixMe[prop-missing]\nnavigator.scheduling !== undefined && // $FlowFixMe[incompatible-type]\nnavigator.scheduling.isInputPending !== undefined ? navigator.scheduling.isInputPending.bind(navigator.scheduling) : null;\n\nfunction advanceTimers(currentTime) {\n // Check for tasks that are no longer delayed and add them to the queue.\n var timer = peek(timerQueue);\n\n while (timer !== null) {\n if (timer.callback === null) {\n // Timer was cancelled.\n pop(timerQueue);\n } else if (timer.startTime <= currentTime) {\n // Timer fired. Transfer to the task queue.\n pop(timerQueue);\n timer.sortIndex = timer.expirationTime;\n push(taskQueue, timer);\n } else {\n // Remaining timers are pending.\n return;\n }\n\n timer = peek(timerQueue);\n }\n}\n\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = false;\n advanceTimers(currentTime);\n\n if (!isHostCallbackScheduled) {\n if (peek(taskQueue) !== null) {\n isHostCallbackScheduled = true;\n requestHostCallback();\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n }\n }\n}\n\nfunction flushWork(initialTime) {\n\n\n isHostCallbackScheduled = false;\n\n if (isHostTimeoutScheduled) {\n // We scheduled a timeout but it's no longer needed. Cancel it.\n isHostTimeoutScheduled = false;\n cancelHostTimeout();\n }\n\n isPerformingWork = true;\n var previousPriorityLevel = currentPriorityLevel;\n\n try {\n var currentTime; if (enableProfiling) ; else {\n // No catch in prod code path.\n return workLoop(initialTime);\n }\n } finally {\n currentTask = null;\n currentPriorityLevel = previousPriorityLevel;\n isPerformingWork = false;\n }\n}\n\nfunction workLoop(initialTime) {\n var currentTime = initialTime;\n advanceTimers(currentTime);\n currentTask = peek(taskQueue);\n\n while (currentTask !== null && !(enableSchedulerDebugging )) {\n if (currentTask.expirationTime > currentTime && shouldYieldToHost()) {\n // This currentTask hasn't expired, and we've reached the deadline.\n break;\n } // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n\n var callback = currentTask.callback;\n\n if (typeof callback === 'function') {\n // $FlowFixMe[incompatible-use] found when upgrading Flow\n currentTask.callback = null; // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n currentPriorityLevel = currentTask.priorityLevel; // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n\n var continuationCallback = callback(didUserCallbackTimeout);\n currentTime = exports.unstable_now();\n\n if (typeof continuationCallback === 'function') {\n // If a continuation is returned, immediately yield to the main thread\n // regardless of how much time is left in the current time slice.\n // $FlowFixMe[incompatible-use] found when upgrading Flow\n currentTask.callback = continuationCallback;\n\n advanceTimers(currentTime);\n return true;\n } else {\n\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue);\n }\n\n advanceTimers(currentTime);\n }\n } else {\n pop(taskQueue);\n }\n\n currentTask = peek(taskQueue);\n } // Return whether there's additional work\n\n\n if (currentTask !== null) {\n return true;\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n\n return false;\n }\n}\n\nfunction unstable_runWithPriority(priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n case LowPriority:\n case IdlePriority:\n break;\n\n default:\n priorityLevel = NormalPriority;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_next(eventHandler) {\n var priorityLevel;\n\n switch (currentPriorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n // Shift down to normal priority\n priorityLevel = NormalPriority;\n break;\n\n default:\n // Anything lower than normal priority should remain at the current level.\n priorityLevel = currentPriorityLevel;\n break;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_wrapCallback(callback) {\n var parentPriorityLevel = currentPriorityLevel; // $FlowFixMe[incompatible-return]\n // $FlowFixMe[missing-this-annot]\n\n return function () {\n // This is a fork of runWithPriority, inlined for performance.\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n}\n\nfunction unstable_scheduleCallback(priorityLevel, callback, options) {\n var currentTime = exports.unstable_now();\n var startTime;\n\n if (typeof options === 'object' && options !== null) {\n var delay = options.delay;\n\n if (typeof delay === 'number' && delay > 0) {\n startTime = currentTime + delay;\n } else {\n startTime = currentTime;\n }\n } else {\n startTime = currentTime;\n }\n\n var timeout;\n\n switch (priorityLevel) {\n case ImmediatePriority:\n // Times out immediately\n timeout = -1;\n break;\n\n case UserBlockingPriority:\n // Eventually times out\n timeout = userBlockingPriorityTimeout;\n break;\n\n case IdlePriority:\n // Never times out\n timeout = maxSigned31BitInt;\n break;\n\n case LowPriority:\n // Eventually times out\n timeout = lowPriorityTimeout;\n break;\n\n case NormalPriority:\n default:\n // Eventually times out\n timeout = normalPriorityTimeout;\n break;\n }\n\n var expirationTime = startTime + timeout;\n var newTask = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: startTime,\n expirationTime: expirationTime,\n sortIndex: -1\n };\n\n if (startTime > currentTime) {\n // This is a delayed task.\n newTask.sortIndex = startTime;\n push(timerQueue, newTask);\n\n if (peek(taskQueue) === null && newTask === peek(timerQueue)) {\n // All tasks are delayed, and this is the task with the earliest delay.\n if (isHostTimeoutScheduled) {\n // Cancel an existing timeout.\n cancelHostTimeout();\n } else {\n isHostTimeoutScheduled = true;\n } // Schedule a timeout.\n\n\n requestHostTimeout(handleTimeout, startTime - currentTime);\n }\n } else {\n newTask.sortIndex = expirationTime;\n push(taskQueue, newTask);\n // wait until the next time we yield.\n\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback();\n }\n }\n\n return newTask;\n}\n\nfunction unstable_pauseExecution() {\n}\n\nfunction unstable_continueExecution() {\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback();\n }\n}\n\nfunction unstable_getFirstCallbackNode() {\n return peek(taskQueue);\n}\n\nfunction unstable_cancelCallback(task) {\n // remove from the queue because you can't remove arbitrary nodes from an\n // array based heap, only the first one.)\n\n\n task.callback = null;\n}\n\nfunction unstable_getCurrentPriorityLevel() {\n return currentPriorityLevel;\n}\n\nvar isMessageLoopRunning = false;\nvar taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main\n// thread, like user events. By default, it yields multiple times per frame.\n// It does not attempt to align with frame boundaries, since most tasks don't\n// need to be frame aligned; for those that do, use requestAnimationFrame.\n\nvar frameInterval = frameYieldMs;\nvar startTime = -1;\n\nfunction shouldYieldToHost() {\n var timeElapsed = exports.unstable_now() - startTime;\n\n if (timeElapsed < frameInterval) {\n // The main thread has only been blocked for a really short amount of time;\n // smaller than a single frame. Don't yield yet.\n return false;\n } // The main thread has been blocked for a non-negligible amount of time. We\n\n\n return true;\n}\n\nfunction requestPaint() {\n\n}\n\nfunction forceFrameRate(fps) {\n if (fps < 0 || fps > 125) {\n // Using console['error'] to evade Babel and ESLint\n console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing frame rates higher than 125 fps is not supported');\n return;\n }\n\n if (fps > 0) {\n frameInterval = Math.floor(1000 / fps);\n } else {\n // reset the framerate\n frameInterval = frameYieldMs;\n }\n}\n\nvar performWorkUntilDeadline = function () {\n if (isMessageLoopRunning) {\n var currentTime = exports.unstable_now(); // Keep track of the start time so we can measure how long the main thread\n // has been blocked.\n\n startTime = currentTime; // If a scheduler task throws, exit the current browser task so the\n // error can be observed.\n //\n // Intentionally not using a try-catch, since that makes some debugging\n // techniques harder. Instead, if `flushWork` errors, then `hasMoreWork` will\n // remain true, and we'll continue the work loop.\n\n var hasMoreWork = true;\n\n try {\n hasMoreWork = flushWork(currentTime);\n } finally {\n if (hasMoreWork) {\n // If there's more work, schedule the next message event at the end\n // of the preceding one.\n schedulePerformWorkUntilDeadline();\n } else {\n isMessageLoopRunning = false;\n }\n }\n } // Yielding to the browser will give it a chance to paint, so we can\n};\n\nvar schedulePerformWorkUntilDeadline;\n\nif (typeof localSetImmediate === 'function') {\n // Node.js and old IE.\n // There's a few reasons for why we prefer setImmediate.\n //\n // Unlike MessageChannel, it doesn't prevent a Node.js process from exiting.\n // (Even though this is a DOM fork of the Scheduler, you could get here\n // with a mix of Node.js 15+, which has a MessageChannel, and jsdom.)\n // https://github.com/facebook/react/issues/20756\n //\n // But also, it runs earlier which is the semantic we want.\n // If other browsers ever implement it, it's better to use it.\n // Although both of these would be inferior to native scheduling.\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\n} else if (typeof MessageChannel !== 'undefined') {\n // DOM and Worker environments.\n // We prefer MessageChannel because of the 4ms setTimeout clamping.\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else {\n // We should only fallback here in non-browser environments.\n schedulePerformWorkUntilDeadline = function () {\n // $FlowFixMe[not-a-function] nullable value\n localSetTimeout(performWorkUntilDeadline, 0);\n };\n}\n\nfunction requestHostCallback() {\n if (!isMessageLoopRunning) {\n isMessageLoopRunning = true;\n schedulePerformWorkUntilDeadline();\n }\n}\n\nfunction requestHostTimeout(callback, ms) {\n // $FlowFixMe[not-a-function] nullable value\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\n\nfunction cancelHostTimeout() {\n // $FlowFixMe[not-a-function] nullable value\n localClearTimeout(taskTimeoutID);\n taskTimeoutID = -1;\n}\nvar unstable_Profiling = null;\n\nexports.unstable_IdlePriority = IdlePriority;\nexports.unstable_ImmediatePriority = ImmediatePriority;\nexports.unstable_LowPriority = LowPriority;\nexports.unstable_NormalPriority = NormalPriority;\nexports.unstable_Profiling = unstable_Profiling;\nexports.unstable_UserBlockingPriority = UserBlockingPriority;\nexports.unstable_cancelCallback = unstable_cancelCallback;\nexports.unstable_continueExecution = unstable_continueExecution;\nexports.unstable_forceFrameRate = forceFrameRate;\nexports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;\nexports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;\nexports.unstable_next = unstable_next;\nexports.unstable_pauseExecution = unstable_pauseExecution;\nexports.unstable_requestPaint = requestPaint;\nexports.unstable_runWithPriority = unstable_runWithPriority;\nexports.unstable_scheduleCallback = unstable_scheduleCallback;\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = unstable_wrapCallback;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLElBQUksSUFBcUM7QUFDekM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFLG9CQUFvQjtBQUN0QjtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUEsRUFBRSxvQkFBb0I7QUFDdEI7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOzs7QUFHQSxvQ0FBb0M7O0FBRXBDO0FBQ0EscUJBQXFCOztBQUVyQix1QkFBdUI7QUFDdkI7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQSxtRkFBbUY7O0FBRW5GO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsdUJBQXVCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047O0FBRUE7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkMsd0RBQXdEOztBQUV4RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0RBQWtEO0FBQ2xEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7O0FBRUEsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QjtBQUM3QixrQ0FBa0M7QUFDbEMsNEJBQTRCO0FBQzVCLCtCQUErQjtBQUMvQiwwQkFBMEI7QUFDMUIscUNBQXFDO0FBQ3JDLCtCQUErQjtBQUMvQixrQ0FBa0M7QUFDbEMsK0JBQStCO0FBQy9CLHdDQUF3QztBQUN4QyxxQ0FBcUM7QUFDckMscUJBQXFCO0FBQ3JCLCtCQUErQjtBQUMvQiw2QkFBNkI7QUFDN0IsZ0NBQWdDO0FBQ2hDLGlDQUFpQztBQUNqQyw0QkFBNEI7QUFDNUIsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzP2UwMDAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgJ3VzZSBzdHJpY3QnO1xuXG4vKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ID09PVxuICAgICdmdW5jdGlvbidcbikge1xuICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KG5ldyBFcnJvcigpKTtcbn1cbiAgICAgICAgICB2YXIgZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nID0gZmFsc2U7XG52YXIgZW5hYmxlUHJvZmlsaW5nID0gZmFsc2U7XG52YXIgZnJhbWVZaWVsZE1zID0gNTtcbnZhciB1c2VyQmxvY2tpbmdQcmlvcml0eVRpbWVvdXQgPSAyNTA7XG52YXIgbm9ybWFsUHJpb3JpdHlUaW1lb3V0ID0gNTAwMDtcbnZhciBsb3dQcmlvcml0eVRpbWVvdXQgPSAxMDAwMDtcblxuZnVuY3Rpb24gcHVzaChoZWFwLCBub2RlKSB7XG4gIHZhciBpbmRleCA9IGhlYXAubGVuZ3RoO1xuICBoZWFwLnB1c2gobm9kZSk7XG4gIHNpZnRVcChoZWFwLCBub2RlLCBpbmRleCk7XG59XG5mdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgcmV0dXJuIGhlYXAubGVuZ3RoID09PSAwID8gbnVsbCA6IGhlYXBbMF07XG59XG5mdW5jdGlvbiBwb3AoaGVhcCkge1xuICBpZiAoaGVhcC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG4gIHZhciBsYXN0ID0gaGVhcC5wb3AoKTtcblxuICBpZiAobGFzdCAhPT0gZmlyc3QpIHtcbiAgICBoZWFwWzBdID0gbGFzdDtcbiAgICBzaWZ0RG93bihoZWFwLCBsYXN0LCAwKTtcbiAgfVxuXG4gIHJldHVybiBmaXJzdDtcbn1cblxuZnVuY3Rpb24gc2lmdFVwKGhlYXAsIG5vZGUsIGkpIHtcbiAgdmFyIGluZGV4ID0gaTtcblxuICB3aGlsZSAoaW5kZXggPiAwKSB7XG4gICAgdmFyIHBhcmVudEluZGV4ID0gaW5kZXggLSAxID4+PiAxO1xuICAgIHZhciBwYXJlbnQgPSBoZWFwW3BhcmVudEluZGV4XTtcblxuICAgIGlmIChjb21wYXJlKHBhcmVudCwgbm9kZSkgPiAwKSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIGxhcmdlci4gU3dhcCBwb3NpdGlvbnMuXG4gICAgICBoZWFwW3BhcmVudEluZGV4XSA9IG5vZGU7XG4gICAgICBoZWFwW2luZGV4XSA9IHBhcmVudDtcbiAgICAgIGluZGV4ID0gcGFyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdERvd24oaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuICB2YXIgbGVuZ3RoID0gaGVhcC5sZW5ndGg7XG4gIHZhciBoYWxmTGVuZ3RoID0gbGVuZ3RoID4+PiAxO1xuXG4gIHdoaWxlIChpbmRleCA8IGhhbGZMZW5ndGgpIHtcbiAgICB2YXIgbGVmdEluZGV4ID0gKGluZGV4ICsgMSkgKiAyIC0gMTtcbiAgICB2YXIgbGVmdCA9IGhlYXBbbGVmdEluZGV4XTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IGxlZnRJbmRleCArIDE7XG4gICAgdmFyIHJpZ2h0ID0gaGVhcFtyaWdodEluZGV4XTsgLy8gSWYgdGhlIGxlZnQgb3IgcmlnaHQgbm9kZSBpcyBzbWFsbGVyLCBzd2FwIHdpdGggdGhlIHNtYWxsZXIgb2YgdGhvc2UuXG5cbiAgICBpZiAoY29tcGFyZShsZWZ0LCBub2RlKSA8IDApIHtcbiAgICAgIGlmIChyaWdodEluZGV4IDwgbGVuZ3RoICYmIGNvbXBhcmUocmlnaHQsIGxlZnQpIDwgMCkge1xuICAgICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSBsZWZ0O1xuICAgICAgICBoZWFwW2xlZnRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IGxlZnRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJpZ2h0SW5kZXggPCBsZW5ndGggJiYgY29tcGFyZShyaWdodCwgbm9kZSkgPCAwKSB7XG4gICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgY2hpbGQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIC8vIENvbXBhcmUgc29ydCBpbmRleCBmaXJzdCwgdGhlbiB0YXNrIGlkLlxuICB2YXIgZGlmZiA9IGEuc29ydEluZGV4IC0gYi5zb3J0SW5kZXg7XG4gIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGEuaWQgLSBiLmlkO1xufVxuXG4vLyBUT0RPOiBVc2Ugc3ltYm9scz9cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDE7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSAyO1xudmFyIE5vcm1hbFByaW9yaXR5ID0gMztcbnZhciBMb3dQcmlvcml0eSA9IDQ7XG52YXIgSWRsZVByaW9yaXR5ID0gNTtcblxuZnVuY3Rpb24gbWFya1Rhc2tFcnJvcmVkKHRhc2ssIG1zKSB7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuZXhwb3J0cy51bnN0YWJsZV9ub3cgPSB2b2lkIDA7XG52YXIgaGFzUGVyZm9ybWFuY2VOb3cgPSAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG50eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmlmIChoYXNQZXJmb3JtYW5jZU5vdykge1xuICB2YXIgbG9jYWxQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbFBlcmZvcm1hbmNlLm5vdygpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIGxvY2FsRGF0ZSA9IERhdGU7XG4gIHZhciBpbml0aWFsVGltZSA9IGxvY2FsRGF0ZS5ub3coKTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpIC0gaW5pdGlhbFRpbWU7XG4gIH07XG59IC8vIE1heCAzMSBiaXQgaW50ZWdlci4gVGhlIG1heCBpbnRlZ2VyIHNpemUgaW4gVjggZm9yIDMyLWJpdCBzeXN0ZW1zLlxuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcblxuXG52YXIgbWF4U2lnbmVkMzFCaXRJbnQgPSAxMDczNzQxODIzOyAvLyBUYXNrcyBhcmUgc3RvcmVkIG9uIGEgbWluIGhlYXBcblxudmFyIHRhc2tRdWV1ZSA9IFtdO1xudmFyIHRpbWVyUXVldWUgPSBbXTsgLy8gSW5jcmVtZW50aW5nIGlkIGNvdW50ZXIuIFVzZWQgdG8gbWFpbnRhaW4gaW5zZXJ0aW9uIG9yZGVyLlxuXG52YXIgdGFza0lkQ291bnRlciA9IDE7IC8vIFBhdXNpbmcgdGhlIHNjaGVkdWxlciBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbnZhciBjdXJyZW50VGFzayA9IG51bGw7XG52YXIgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTsgLy8gVGhpcyBpcyBzZXQgd2hpbGUgcGVyZm9ybWluZyB3b3JrLCB0byBwcmV2ZW50IHJlLWVudHJhbmNlLlxuXG52YXIgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xudmFyIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG52YXIgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlOyAvLyBDYXB0dXJlIGxvY2FsIHJlZmVyZW5jZXMgdG8gbmF0aXZlIEFQSXMsIGluIGNhc2UgYSBwb2x5ZmlsbCBvdmVycmlkZXMgdGhlbS5cblxudmFyIGxvY2FsU2V0VGltZW91dCA9IHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IG51bGw7XG52YXIgbG9jYWxDbGVhclRpbWVvdXQgPSB0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gY2xlYXJUaW1lb3V0IDogbnVsbDtcbnZhciBsb2NhbFNldEltbWVkaWF0ZSA9IHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnID8gc2V0SW1tZWRpYXRlIDogbnVsbDsgLy8gSUUgYW5kIE5vZGUuanMgKyBqc2RvbVxuXG50eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbm5hdmlnYXRvci5zY2hlZHVsaW5nICE9PSB1bmRlZmluZWQgJiYgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV1cbm5hdmlnYXRvci5zY2hlZHVsaW5nLmlzSW5wdXRQZW5kaW5nICE9PSB1bmRlZmluZWQgPyBuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZy5iaW5kKG5hdmlnYXRvci5zY2hlZHVsaW5nKSA6IG51bGw7XG5cbmZ1bmN0aW9uIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpIHtcbiAgLy8gQ2hlY2sgZm9yIHRhc2tzIHRoYXQgYXJlIG5vIGxvbmdlciBkZWxheWVkIGFuZCBhZGQgdGhlbSB0byB0aGUgcXVldWUuXG4gIHZhciB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgd2hpbGUgKHRpbWVyICE9PSBudWxsKSB7XG4gICAgaWYgKHRpbWVyLmNhbGxiYWNrID09PSBudWxsKSB7XG4gICAgICAvLyBUaW1lciB3YXMgY2FuY2VsbGVkLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgIH0gZWxzZSBpZiAodGltZXIuc3RhcnRUaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaW1lciBmaXJlZC4gVHJhbnNmZXIgdG8gdGhlIHRhc2sgcXVldWUuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgICB0aW1lci5zb3J0SW5kZXggPSB0aW1lci5leHBpcmF0aW9uVGltZTtcbiAgICAgIHB1c2godGFza1F1ZXVlLCB0aW1lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbWFpbmluZyB0aW1lcnMgYXJlIHBlbmRpbmcuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoY3VycmVudFRpbWUpIHtcbiAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkKSB7XG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSAhPT0gbnVsbCkge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hXb3JrKGluaXRpYWxUaW1lKSB7XG5cblxuICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgLy8gV2Ugc2NoZWR1bGVkIGEgdGltZW91dCBidXQgaXQncyBubyBsb25nZXIgbmVlZGVkLiBDYW5jZWwgaXQuXG4gICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gIH1cblxuICBpc1BlcmZvcm1pbmdXb3JrID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgdmFyIGN1cnJlbnRUaW1lOyBpZiAoZW5hYmxlUHJvZmlsaW5nKSA7IGVsc2Uge1xuICAgICAgLy8gTm8gY2F0Y2ggaW4gcHJvZCBjb2RlIHBhdGguXG4gICAgICByZXR1cm4gd29ya0xvb3AoaW5pdGlhbFRpbWUpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50VGFzayA9IG51bGw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdvcmtMb29wKGluaXRpYWxUaW1lKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGluaXRpYWxUaW1lO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG5cbiAgd2hpbGUgKGN1cnJlbnRUYXNrICE9PSBudWxsICYmICEoZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nICkpIHtcbiAgICBpZiAoY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPiBjdXJyZW50VGltZSAmJiBzaG91bGRZaWVsZFRvSG9zdCgpKSB7XG4gICAgICAvLyBUaGlzIGN1cnJlbnRUYXNrIGhhc24ndCBleHBpcmVkLCBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZGVhZGxpbmUuXG4gICAgICBicmVhaztcbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBudWxsOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50VGFzay5wcmlvcml0eUxldmVsOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuICAgICAgdmFyIGRpZFVzZXJDYWxsYmFja1RpbWVvdXQgPSBjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZTtcblxuICAgICAgdmFyIGNvbnRpbnVhdGlvbkNhbGxiYWNrID0gY2FsbGJhY2soZGlkVXNlckNhbGxiYWNrVGltZW91dCk7XG4gICAgICBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG5cbiAgICAgIGlmICh0eXBlb2YgY29udGludWF0aW9uQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gSWYgYSBjb250aW51YXRpb24gaXMgcmV0dXJuZWQsIGltbWVkaWF0ZWx5IHlpZWxkIHRvIHRoZSBtYWluIHRocmVhZFxuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIGhvdyBtdWNoIHRpbWUgaXMgbGVmdCBpbiB0aGUgY3VycmVudCB0aW1lIHNsaWNlLlxuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBjb250aW51YXRpb25DYWxsYmFjaztcblxuICAgICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChjdXJyZW50VGFzayA9PT0gcGVlayh0YXNrUXVldWUpKSB7XG4gICAgICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgfVxuXG4gICAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gIH0gLy8gUmV0dXJuIHdoZXRoZXIgdGhlcmUncyBhZGRpdGlvbmFsIHdvcmtcblxuXG4gIGlmIChjdXJyZW50VGFzayAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShwcmlvcml0eUxldmVsLCBldmVudEhhbmRsZXIpIHtcbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgfVxuXG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX25leHQoZXZlbnRIYW5kbGVyKSB7XG4gIHZhciBwcmlvcml0eUxldmVsO1xuXG4gIHN3aXRjaCAoY3VycmVudFByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICAgIC8vIFNoaWZ0IGRvd24gdG8gbm9ybWFsIHByaW9yaXR5XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBBbnl0aGluZyBsb3dlciB0aGFuIG5vcm1hbCBwcmlvcml0eSBzaG91bGQgcmVtYWluIGF0IHRoZSBjdXJyZW50IGxldmVsLlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgdmFyIHBhcmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoaXMgaXMgYSBmb3JrIG9mIHJ1bldpdGhQcmlvcml0eSwgaW5saW5lZCBmb3IgcGVyZm9ybWFuY2UuXG4gICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcGFyZW50UHJpb3JpdHlMZXZlbDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gIHZhciBzdGFydFRpbWU7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgdmFyIGRlbGF5ID0gb3B0aW9ucy5kZWxheTtcblxuICAgIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWUgKyBkZWxheTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICB9XG5cbiAgdmFyIHRpbWVvdXQ7XG5cbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIC8vIFRpbWVzIG91dCBpbW1lZGlhdGVseVxuICAgICAgdGltZW91dCA9IC0xO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgLy8gRXZlbnR1YWxseSB0aW1lcyBvdXRcbiAgICAgIHRpbWVvdXQgPSB1c2VyQmxvY2tpbmdQcmlvcml0eVRpbWVvdXQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgLy8gTmV2ZXIgdGltZXMgb3V0XG4gICAgICB0aW1lb3V0ID0gbWF4U2lnbmVkMzFCaXRJbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICAvLyBFdmVudHVhbGx5IHRpbWVzIG91dFxuICAgICAgdGltZW91dCA9IGxvd1ByaW9yaXR5VGltZW91dDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gRXZlbnR1YWxseSB0aW1lcyBvdXRcbiAgICAgIHRpbWVvdXQgPSBub3JtYWxQcmlvcml0eVRpbWVvdXQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHN0YXJ0VGltZSArIHRpbWVvdXQ7XG4gIHZhciBuZXdUYXNrID0ge1xuICAgIGlkOiB0YXNrSWRDb3VudGVyKyssXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuICAgIHNvcnRJbmRleDogLTFcbiAgfTtcblxuICBpZiAoc3RhcnRUaW1lID4gY3VycmVudFRpbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZGVsYXllZCB0YXNrLlxuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gc3RhcnRUaW1lO1xuICAgIHB1c2godGltZXJRdWV1ZSwgbmV3VGFzayk7XG5cbiAgICBpZiAocGVlayh0YXNrUXVldWUpID09PSBudWxsICYmIG5ld1Rhc2sgPT09IHBlZWsodGltZXJRdWV1ZSkpIHtcbiAgICAgIC8vIEFsbCB0YXNrcyBhcmUgZGVsYXllZCwgYW5kIHRoaXMgaXMgdGhlIHRhc2sgd2l0aCB0aGUgZWFybGllc3QgZGVsYXkuXG4gICAgICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgICAgICAvLyBDYW5jZWwgYW4gZXhpc3RpbmcgdGltZW91dC5cbiAgICAgICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgfSAvLyBTY2hlZHVsZSBhIHRpbWVvdXQuXG5cblxuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIHN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBleHBpcmF0aW9uVGltZTtcbiAgICBwdXNoKHRhc2tRdWV1ZSwgbmV3VGFzayk7XG4gICAgLy8gd2FpdCB1bnRpbCB0aGUgbmV4dCB0aW1lIHdlIHlpZWxkLlxuXG5cbiAgICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1Rhc2s7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uKCkge1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbigpIHtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSgpIHtcbiAgcmV0dXJuIHBlZWsodGFza1F1ZXVlKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sodGFzaykge1xuICAvLyByZW1vdmUgZnJvbSB0aGUgcXVldWUgYmVjYXVzZSB5b3UgY2FuJ3QgcmVtb3ZlIGFyYml0cmFyeSBub2RlcyBmcm9tIGFuXG4gIC8vIGFycmF5IGJhc2VkIGhlYXAsIG9ubHkgdGhlIGZpcnN0IG9uZS4pXG5cblxuICB0YXNrLmNhbGxiYWNrID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHJldHVybiBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbn1cblxudmFyIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG52YXIgdGFza1RpbWVvdXRJRCA9IC0xOyAvLyBTY2hlZHVsZXIgcGVyaW9kaWNhbGx5IHlpZWxkcyBpbiBjYXNlIHRoZXJlIGlzIG90aGVyIHdvcmsgb24gdGhlIG1haW5cbi8vIHRocmVhZCwgbGlrZSB1c2VyIGV2ZW50cy4gQnkgZGVmYXVsdCwgaXQgeWllbGRzIG11bHRpcGxlIHRpbWVzIHBlciBmcmFtZS5cbi8vIEl0IGRvZXMgbm90IGF0dGVtcHQgdG8gYWxpZ24gd2l0aCBmcmFtZSBib3VuZGFyaWVzLCBzaW5jZSBtb3N0IHRhc2tzIGRvbid0XG4vLyBuZWVkIHRvIGJlIGZyYW1lIGFsaWduZWQ7IGZvciB0aG9zZSB0aGF0IGRvLCB1c2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuXG52YXIgZnJhbWVJbnRlcnZhbCA9IGZyYW1lWWllbGRNcztcbnZhciBzdGFydFRpbWUgPSAtMTtcblxuZnVuY3Rpb24gc2hvdWxkWWllbGRUb0hvc3QoKSB7XG4gIHZhciB0aW1lRWxhcHNlZCA9IGV4cG9ydHMudW5zdGFibGVfbm93KCkgLSBzdGFydFRpbWU7XG5cbiAgaWYgKHRpbWVFbGFwc2VkIDwgZnJhbWVJbnRlcnZhbCkge1xuICAgIC8vIFRoZSBtYWluIHRocmVhZCBoYXMgb25seSBiZWVuIGJsb2NrZWQgZm9yIGEgcmVhbGx5IHNob3J0IGFtb3VudCBvZiB0aW1lO1xuICAgIC8vIHNtYWxsZXIgdGhhbiBhIHNpbmdsZSBmcmFtZS4gRG9uJ3QgeWllbGQgeWV0LlxuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBUaGUgbWFpbiB0aHJlYWQgaGFzIGJlZW4gYmxvY2tlZCBmb3IgYSBub24tbmVnbGlnaWJsZSBhbW91bnQgb2YgdGltZS4gV2VcblxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0UGFpbnQoKSB7XG5cbn1cblxuZnVuY3Rpb24gZm9yY2VGcmFtZVJhdGUoZnBzKSB7XG4gIGlmIChmcHMgPCAwIHx8IGZwcyA+IDEyNSkge1xuICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgIGNvbnNvbGVbJ2Vycm9yJ10oJ2ZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCAnICsgJ2ZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZwcyA+IDApIHtcbiAgICBmcmFtZUludGVydmFsID0gTWF0aC5mbG9vcigxMDAwIC8gZnBzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyByZXNldCB0aGUgZnJhbWVyYXRlXG4gICAgZnJhbWVJbnRlcnZhbCA9IGZyYW1lWWllbGRNcztcbiAgfVxufVxuXG52YXIgcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICBpZiAoaXNNZXNzYWdlTG9vcFJ1bm5pbmcpIHtcbiAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpOyAvLyBLZWVwIHRyYWNrIG9mIHRoZSBzdGFydCB0aW1lIHNvIHdlIGNhbiBtZWFzdXJlIGhvdyBsb25nIHRoZSBtYWluIHRocmVhZFxuICAgIC8vIGhhcyBiZWVuIGJsb2NrZWQuXG5cbiAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTsgLy8gSWYgYSBzY2hlZHVsZXIgdGFzayB0aHJvd3MsIGV4aXQgdGhlIGN1cnJlbnQgYnJvd3NlciB0YXNrIHNvIHRoZVxuICAgIC8vIGVycm9yIGNhbiBiZSBvYnNlcnZlZC5cbiAgICAvL1xuICAgIC8vIEludGVudGlvbmFsbHkgbm90IHVzaW5nIGEgdHJ5LWNhdGNoLCBzaW5jZSB0aGF0IG1ha2VzIHNvbWUgZGVidWdnaW5nXG4gICAgLy8gdGVjaG5pcXVlcyBoYXJkZXIuIEluc3RlYWQsIGlmIGBmbHVzaFdvcmtgIGVycm9ycywgdGhlbiBgaGFzTW9yZVdvcmtgIHdpbGxcbiAgICAvLyByZW1haW4gdHJ1ZSwgYW5kIHdlJ2xsIGNvbnRpbnVlIHRoZSB3b3JrIGxvb3AuXG5cbiAgICB2YXIgaGFzTW9yZVdvcmsgPSB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGhhc01vcmVXb3JrID0gZmx1c2hXb3JrKGN1cnJlbnRUaW1lKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGhhc01vcmVXb3JrKSB7XG4gICAgICAgIC8vIElmIHRoZXJlJ3MgbW9yZSB3b3JrLCBzY2hlZHVsZSB0aGUgbmV4dCBtZXNzYWdlIGV2ZW50IGF0IHRoZSBlbmRcbiAgICAgICAgLy8gb2YgdGhlIHByZWNlZGluZyBvbmUuXG4gICAgICAgIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBZaWVsZGluZyB0byB0aGUgYnJvd3NlciB3aWxsIGdpdmUgaXQgYSBjaGFuY2UgdG8gcGFpbnQsIHNvIHdlIGNhblxufTtcblxudmFyIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lO1xuXG5pZiAodHlwZW9mIGxvY2FsU2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIE5vZGUuanMgYW5kIG9sZCBJRS5cbiAgLy8gVGhlcmUncyBhIGZldyByZWFzb25zIGZvciB3aHkgd2UgcHJlZmVyIHNldEltbWVkaWF0ZS5cbiAgLy9cbiAgLy8gVW5saWtlIE1lc3NhZ2VDaGFubmVsLCBpdCBkb2Vzbid0IHByZXZlbnQgYSBOb2RlLmpzIHByb2Nlc3MgZnJvbSBleGl0aW5nLlxuICAvLyAoRXZlbiB0aG91Z2ggdGhpcyBpcyBhIERPTSBmb3JrIG9mIHRoZSBTY2hlZHVsZXIsIHlvdSBjb3VsZCBnZXQgaGVyZVxuICAvLyB3aXRoIGEgbWl4IG9mIE5vZGUuanMgMTUrLCB3aGljaCBoYXMgYSBNZXNzYWdlQ2hhbm5lbCwgYW5kIGpzZG9tLilcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yMDc1NlxuICAvL1xuICAvLyBCdXQgYWxzbywgaXQgcnVucyBlYXJsaWVyIHdoaWNoIGlzIHRoZSBzZW1hbnRpYyB3ZSB3YW50LlxuICAvLyBJZiBvdGhlciBicm93c2VycyBldmVyIGltcGxlbWVudCBpdCwgaXQncyBiZXR0ZXIgdG8gdXNlIGl0LlxuICAvLyBBbHRob3VnaCBib3RoIG9mIHRoZXNlIHdvdWxkIGJlIGluZmVyaW9yIHRvIG5hdGl2ZSBzY2hlZHVsaW5nLlxuICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBsb2NhbFNldEltbWVkaWF0ZShwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUpO1xuICB9O1xufSBlbHNlIGlmICh0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIERPTSBhbmQgV29ya2VyIGVudmlyb25tZW50cy5cbiAgLy8gV2UgcHJlZmVyIE1lc3NhZ2VDaGFubmVsIGJlY2F1c2Ugb2YgdGhlIDRtcyBzZXRUaW1lb3V0IGNsYW1waW5nLlxuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICB2YXIgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lO1xuXG4gIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBXZSBzaG91bGQgb25seSBmYWxsYmFjayBoZXJlIGluIG5vbi1icm93c2VyIGVudmlyb25tZW50cy5cbiAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtub3QtYS1mdW5jdGlvbl0gbnVsbGFibGUgdmFsdWVcbiAgICBsb2NhbFNldFRpbWVvdXQocGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lLCAwKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdEhvc3RDYWxsYmFjaygpIHtcbiAgaWYgKCFpc01lc3NhZ2VMb29wUnVubmluZykge1xuICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gdHJ1ZTtcbiAgICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RIb3N0VGltZW91dChjYWxsYmFjaywgbXMpIHtcbiAgLy8gJEZsb3dGaXhNZVtub3QtYS1mdW5jdGlvbl0gbnVsbGFibGUgdmFsdWVcbiAgdGFza1RpbWVvdXRJRCA9IGxvY2FsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgY2FsbGJhY2soZXhwb3J0cy51bnN0YWJsZV9ub3coKSk7XG4gIH0sIG1zKTtcbn1cblxuZnVuY3Rpb24gY2FuY2VsSG9zdFRpbWVvdXQoKSB7XG4gIC8vICRGbG93Rml4TWVbbm90LWEtZnVuY3Rpb25dIG51bGxhYmxlIHZhbHVlXG4gIGxvY2FsQ2xlYXJUaW1lb3V0KHRhc2tUaW1lb3V0SUQpO1xuICB0YXNrVGltZW91dElEID0gLTE7XG59XG52YXIgdW5zdGFibGVfUHJvZmlsaW5nID0gbnVsbDtcblxuZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSBJZGxlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5ID0gSW1tZWRpYXRlUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX0xvd1ByaW9yaXR5ID0gTG93UHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX1Byb2ZpbGluZyA9IHVuc3RhYmxlX1Byb2ZpbGluZztcbmV4cG9ydHMudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sgPSB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfY29udGludWVFeGVjdXRpb24gPSB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmb3JjZUZyYW1lUmF0ZTtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbDtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUgPSB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZTtcbmV4cG9ydHMudW5zdGFibGVfbmV4dCA9IHVuc3RhYmxlX25leHQ7XG5leHBvcnRzLnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uID0gdW5zdGFibGVfcGF1c2VFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX3JlcXVlc3RQYWludCA9IHJlcXVlc3RQYWludDtcbmV4cG9ydHMudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5ID0gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrID0gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaztcbmV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBzaG91bGRZaWVsZFRvSG9zdDtcbmV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrID0gdW5zdGFibGVfd3JhcENhbGxiYWNrO1xuICAgICAgICAgIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbmlmIChcbiAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcCA9PT1cbiAgICAnZnVuY3Rpb24nXG4pIHtcbiAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wKG5ldyBFcnJvcigpKTtcbn1cbiAgICAgICAgXG4gIH0pKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/index.js": +/*!************************************************************!*\ + !*** ./node_modules/next/dist/compiled/scheduler/index.js ***! + \************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc2NoZWR1bGVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSwwS0FBMEQ7QUFDNUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zY2hlZHVsZXIvaW5kZXguanM/YjRhYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js ***! + \*************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;Object.defineProperty(r,\"__esModule\",{value:true});var n=\"<unknown>\";function parse(e){var r=e.split(\"\\n\");return r.reduce((function(e,r){var n=parseChrome(r)||parseWinjs(r)||parseGecko(r)||parseNode(r)||parseJSC(r);if(n){e.push(n)}return e}),[])}var a=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;var l=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;function parseChrome(e){var r=a.exec(e);if(!r){return null}var u=r[2]&&r[2].indexOf(\"native\")===0;var t=r[2]&&r[2].indexOf(\"eval\")===0;var i=l.exec(r[2]);if(t&&i!=null){r[2]=i[1];r[3]=i[2];r[4]=i[3]}return{file:!u?r[2]:null,methodName:r[1]||n,arguments:u?[r[2]]:[],lineNumber:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}var u=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseWinjs(e){var r=u.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}var t=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;var i=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;function parseGecko(e){var r=t.exec(e);if(!r){return null}var a=r[3]&&r[3].indexOf(\" > eval\")>-1;var l=i.exec(r[3]);if(a&&l!=null){r[3]=l[1];r[4]=l[2];r[5]=null}return{file:r[3],methodName:r[1]||n,arguments:r[2]?r[2].split(\",\"):[],lineNumber:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}var s=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;function parseJSC(e){var r=s.exec(e);if(!r){return null}return{file:r[3],methodName:r[1]||n,arguments:[],lineNumber:+r[4],column:r[5]?+r[5]:null}}var o=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseNode(e){var r=o.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}r.parse=parse})();module.exports=e})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RhY2t0cmFjZS1wYXJzZXIvc3RhY2stdHJhY2UtcGFyc2VyLmNqcy5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxhQUFhLG1FQUFtRSxTQUFTLEtBQUssU0FBUyxNQUFNLFFBQVEsc0NBQXNDLFdBQVcsRUFBRSxrQkFBa0Isa0JBQWtCLG9CQUFvQiwrQkFBK0IsOEVBQThFLE1BQU0sVUFBVSxTQUFTLE1BQU0sa0pBQWtKLHNDQUFzQyx3QkFBd0IsZ0JBQWdCLE9BQU8sWUFBWSx1Q0FBdUMscUNBQXFDLG1CQUFtQixlQUFlLFVBQVUsVUFBVSxVQUFVLE9BQU8sOEdBQThHLHNIQUFzSCx1QkFBdUIsZ0JBQWdCLE9BQU8sWUFBWSxPQUFPLG1GQUFtRix3SUFBd0ksc0RBQXNELHVCQUF1QixnQkFBZ0IsT0FBTyxZQUFZLHVDQUF1QyxtQkFBbUIsZUFBZSxVQUFVLFVBQVUsVUFBVSxPQUFPLGtIQUFrSCxxRUFBcUUscUJBQXFCLGdCQUFnQixPQUFPLFlBQVksT0FBTyxtRkFBbUYsc0dBQXNHLHNCQUFzQixnQkFBZ0IsT0FBTyxZQUFZLE9BQU8sbUZBQW1GLGNBQWMsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zdGFja3RyYWNlLXBhcnNlci9zdGFjay10cmFjZS1wYXJzZXIuY2pzLmpzP2U1NzciXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57XCJ1c2Ugc3RyaWN0XCI7aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciBlPXt9OygoKT0+e3ZhciByPWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt2YXIgbj1cIjx1bmtub3duPlwiO2Z1bmN0aW9uIHBhcnNlKGUpe3ZhciByPWUuc3BsaXQoXCJcXG5cIik7cmV0dXJuIHIucmVkdWNlKChmdW5jdGlvbihlLHIpe3ZhciBuPXBhcnNlQ2hyb21lKHIpfHxwYXJzZVdpbmpzKHIpfHxwYXJzZUdlY2tvKHIpfHxwYXJzZU5vZGUocil8fHBhcnNlSlNDKHIpO2lmKG4pe2UucHVzaChuKX1yZXR1cm4gZX0pLFtdKX12YXIgYT0vXlxccyphdCAoLio/KSA/XFwoKCg/OmZpbGV8aHR0cHM/fGJsb2J8Y2hyb21lLWV4dGVuc2lvbnxuYXRpdmV8ZXZhbHx3ZWJwYWNrfDxhbm9ueW1vdXM+fFxcL3xbYS16XTpcXFxcfFxcXFxcXFxcKS4qPykoPzo6KFxcZCspKT8oPzo6KFxcZCspKT9cXCk/XFxzKiQvaTt2YXIgbD0vXFwoKFxcUyopKD86OihcXGQrKSkoPzo6KFxcZCspKVxcKS87ZnVuY3Rpb24gcGFyc2VDaHJvbWUoZSl7dmFyIHI9YS5leGVjKGUpO2lmKCFyKXtyZXR1cm4gbnVsbH12YXIgdT1yWzJdJiZyWzJdLmluZGV4T2YoXCJuYXRpdmVcIik9PT0wO3ZhciB0PXJbMl0mJnJbMl0uaW5kZXhPZihcImV2YWxcIik9PT0wO3ZhciBpPWwuZXhlYyhyWzJdKTtpZih0JiZpIT1udWxsKXtyWzJdPWlbMV07clszXT1pWzJdO3JbNF09aVszXX1yZXR1cm57ZmlsZTohdT9yWzJdOm51bGwsbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czp1P1tyWzJdXTpbXSxsaW5lTnVtYmVyOnJbM10/K3JbM106bnVsbCxjb2x1bW46cls0XT8rcls0XTpudWxsfX12YXIgdT0vXlxccyphdCAoPzooKD86XFxbb2JqZWN0IG9iamVjdFxcXSk/LispICk/XFwoPygoPzpmaWxlfG1zLWFwcHh8aHR0cHM/fHdlYnBhY2t8YmxvYik6Lio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtmdW5jdGlvbiBwYXJzZVdpbmpzKGUpe3ZhciByPXUuZXhlYyhlKTtpZighcil7cmV0dXJuIG51bGx9cmV0dXJue2ZpbGU6clsyXSxtZXRob2ROYW1lOnJbMV18fG4sYXJndW1lbnRzOltdLGxpbmVOdW1iZXI6K3JbM10sY29sdW1uOnJbNF0/K3JbNF06bnVsbH19dmFyIHQ9L15cXHMqKC4qPykoPzpcXCgoLio/KVxcKSk/KD86XnxAKSgoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZXx3ZWJwYWNrfHJlc291cmNlfFxcW25hdGl2ZSkuKj98W15AXSpidW5kbGUpKD86OihcXGQrKSk/KD86OihcXGQrKSk/XFxzKiQvaTt2YXIgaT0vKFxcUyspIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWwvaTtmdW5jdGlvbiBwYXJzZUdlY2tvKGUpe3ZhciByPXQuZXhlYyhlKTtpZighcil7cmV0dXJuIG51bGx9dmFyIGE9clszXSYmclszXS5pbmRleE9mKFwiID4gZXZhbFwiKT4tMTt2YXIgbD1pLmV4ZWMoclszXSk7aWYoYSYmbCE9bnVsbCl7clszXT1sWzFdO3JbNF09bFsyXTtyWzVdPW51bGx9cmV0dXJue2ZpbGU6clszXSxtZXRob2ROYW1lOnJbMV18fG4sYXJndW1lbnRzOnJbMl0/clsyXS5zcGxpdChcIixcIik6W10sbGluZU51bWJlcjpyWzRdPytyWzRdOm51bGwsY29sdW1uOnJbNV0/K3JbNV06bnVsbH19dmFyIHM9L15cXHMqKD86KFteQF0qKSg/OlxcKCguKj8pXFwpKT9AKT8oXFxTLio/KTooXFxkKykoPzo6KFxcZCspKT9cXHMqJC9pO2Z1bmN0aW9uIHBhcnNlSlNDKGUpe3ZhciByPXMuZXhlYyhlKTtpZighcil7cmV0dXJuIG51bGx9cmV0dXJue2ZpbGU6clszXSxtZXRob2ROYW1lOnJbMV18fG4sYXJndW1lbnRzOltdLGxpbmVOdW1iZXI6K3JbNF0sY29sdW1uOnJbNV0/K3JbNV06bnVsbH19dmFyIG89L15cXHMqYXQgKD86KCg/OlxcW29iamVjdCBvYmplY3RcXF0pP1teXFxcXC9dKyg/OiBcXFthcyBcXFMrXFxdKT8pICk/XFwoPyguKj8pOihcXGQrKSg/OjooXFxkKykpP1xcKT9cXHMqJC9pO2Z1bmN0aW9uIHBhcnNlTm9kZShlKXt2YXIgcj1vLmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXJldHVybntmaWxlOnJbMl0sbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOityWzNdLGNvbHVtbjpyWzRdPytyWzRdOm51bGx9fXIucGFyc2U9cGFyc2V9KSgpO21vZHVsZS5leHBvcnRzPWV9KSgpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js": +/*!*************************************************************!*\ + !*** ./node_modules/next/dist/compiled/strip-ansi/index.js ***! + \*************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("var __dirname = \"/\";\n\n(()=>{\n \"use strict\";\n var e = {\n 511: (e)=>{\n e.exports = function() {\n let { onlyFirst: e = false } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n const r = [\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\n \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"\n ].join(\"|\");\n return new RegExp(r, e ? undefined : \"g\");\n };\n },\n 532: (e, r, _)=>{\n const t = _(511);\n e.exports = (e)=>typeof e === \"string\" ? e.replace(t(), \"\") : e;\n }\n };\n var r = {};\n function __nccwpck_require__(_) {\n var t = r[_];\n if (t !== undefined) {\n return t.exports;\n }\n var a = r[_] = {\n exports: {}\n };\n var n = true;\n try {\n e[_](a, a.exports, __nccwpck_require__);\n n = false;\n } finally{\n if (n) delete r[_];\n }\n return a.exports;\n }\n if (typeof __nccwpck_require__ !== \"undefined\") __nccwpck_require__.ab = __dirname + \"/\";\n var _ = __nccwpck_require__(532);\n module.exports = _;\n})();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOztBQUFDO0lBQUs7SUFBYSxJQUFJQSxJQUFFO1FBQUMsS0FBSUEsQ0FBQUE7WUFBSUEsRUFBRUMsT0FBTyxHQUFDO29CQUFDLEVBQUNDLFdBQVVGLElBQUUsS0FBSyxFQUFDLG9FQUFDLENBQUM7Z0JBQUssTUFBTUcsSUFBRTtvQkFBQztvQkFBK0g7aUJBQTJELENBQUNDLElBQUksQ0FBQztnQkFBSyxPQUFPLElBQUlDLE9BQU9GLEdBQUVILElBQUVNLFlBQVU7WUFBSTtRQUFDO1FBQUUsS0FBSSxDQUFDTixHQUFFRyxHQUFFSTtZQUFLLE1BQU1DLElBQUVELEVBQUU7WUFBS1AsRUFBRUMsT0FBTyxHQUFDRCxDQUFBQSxJQUFHLE9BQU9BLE1BQUksV0FBU0EsRUFBRVMsT0FBTyxDQUFDRCxLQUFJLE1BQUlSO1FBQUM7SUFBQztJQUFFLElBQUlHLElBQUUsQ0FBQztJQUFFLFNBQVNPLG9CQUFvQkgsQ0FBQztRQUFFLElBQUlDLElBQUVMLENBQUMsQ0FBQ0ksRUFBRTtRQUFDLElBQUdDLE1BQUlGLFdBQVU7WUFBQyxPQUFPRSxFQUFFUCxPQUFPO1FBQUE7UUFBQyxJQUFJVSxJQUFFUixDQUFDLENBQUNJLEVBQUUsR0FBQztZQUFDTixTQUFRLENBQUM7UUFBQztRQUFFLElBQUlXLElBQUU7UUFBSyxJQUFHO1lBQUNaLENBQUMsQ0FBQ08sRUFBRSxDQUFDSSxHQUFFQSxFQUFFVixPQUFPLEVBQUNTO1lBQXFCRSxJQUFFO1FBQUssU0FBUTtZQUFDLElBQUdBLEdBQUUsT0FBT1QsQ0FBQyxDQUFDSSxFQUFFO1FBQUE7UUFBQyxPQUFPSSxFQUFFVixPQUFPO0lBQUE7SUFBQyxJQUFHLE9BQU9TLHdCQUFzQixhQUFZQSxvQkFBb0JHLEVBQUUsR0FBQ0MsU0FBU0EsR0FBQztJQUFJLElBQUlQLElBQUVHLG9CQUFvQjtJQUFLSyxPQUFPZCxPQUFPLEdBQUNNO0FBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpL2luZGV4LmpzPzExZmEiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9ezUxMTplPT57ZS5leHBvcnRzPSh7b25seUZpcnN0OmU9ZmFsc2V9PXt9KT0+e2NvbnN0IHI9W1wiW1xcXFx1MDAxQlxcXFx1MDA5Ql1bW1xcXFxdKCkjOz9dKig/Oig/Oig/Oig/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSspKnxbYS16QS1aXFxcXGRdKyg/OjtbLWEtekEtWlxcXFxkXFxcXC8jJi46PT8lQH5fXSopKik/XFxcXHUwMDA3KVwiLFwiKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSlcIl0uam9pbihcInxcIik7cmV0dXJuIG5ldyBSZWdFeHAocixlP3VuZGVmaW5lZDpcImdcIil9fSw1MzI6KGUscixfKT0+e2NvbnN0IHQ9Xyg1MTEpO2UuZXhwb3J0cz1lPT50eXBlb2YgZT09PVwic3RyaW5nXCI/ZS5yZXBsYWNlKHQoKSxcIlwiKTplfX07dmFyIHI9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyhfKXt2YXIgdD1yW19dO2lmKHQhPT11bmRlZmluZWQpe3JldHVybiB0LmV4cG9ydHN9dmFyIGE9cltfXT17ZXhwb3J0czp7fX07dmFyIG49dHJ1ZTt0cnl7ZVtfXShhLGEuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtuPWZhbHNlfWZpbmFsbHl7aWYobilkZWxldGUgcltfXX1yZXR1cm4gYS5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgXz1fX25jY3dwY2tfcmVxdWlyZV9fKDUzMik7bW9kdWxlLmV4cG9ydHM9X30pKCk7Il0sIm5hbWVzIjpbImUiLCJleHBvcnRzIiwib25seUZpcnN0IiwiciIsImpvaW4iLCJSZWdFeHAiLCJ1bmRlZmluZWQiLCJfIiwidCIsInJlcGxhY2UiLCJfX25jY3dwY2tfcmVxdWlyZV9fIiwiYSIsIm4iLCJhYiIsIl9fZGlybmFtZSIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/server/app-render/get-segment-param.js": +/*!***********************************************************************!*\ + !*** ./node_modules/next/dist/server/app-render/get-segment-param.js ***! + \***********************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSegmentParam\", ({\n enumerable: true,\n get: function() {\n return getSegmentParam;\n }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ../future/helpers/interception-routes */ \"(app-pages-browser)/./node_modules/next/dist/server/future/helpers/interception-routes.js\");\nfunction getSegmentParam(segment) {\n const interceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((marker)=>segment.startsWith(marker));\n // if an interception marker is part of the path segment, we need to jump ahead\n // to the relevant portion for param parsing\n if (interceptionMarker) {\n segment = segment.slice(interceptionMarker.length);\n }\n if (segment.startsWith(\"[[...\") && segment.endsWith(\"]]\")) {\n return {\n type: \"optional-catchall\",\n param: segment.slice(5, -2)\n };\n }\n if (segment.startsWith(\"[...\") && segment.endsWith(\"]\")) {\n return {\n type: \"catchall\",\n param: segment.slice(4, -1)\n };\n }\n if (segment.startsWith(\"[\") && segment.endsWith(\"]\")) {\n return {\n type: \"dynamic\",\n param: segment.slice(1, -1)\n };\n }\n return null;\n}\n\n//# sourceMappingURL=get-segment-param.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2FwcC1yZW5kZXIvZ2V0LXNlZ21lbnQtcGFyYW0uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixtREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRiw0QkFBNEIsbUJBQU8sQ0FBQyx3SUFBdUM7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2FwcC1yZW5kZXIvZ2V0LXNlZ21lbnQtcGFyYW0uanM/ZjQzMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFNlZ21lbnRQYXJhbVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0U2VnbWVudFBhcmFtO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyY2VwdGlvbnJvdXRlcyA9IHJlcXVpcmUoXCIuLi9mdXR1cmUvaGVscGVycy9pbnRlcmNlcHRpb24tcm91dGVzXCIpO1xuZnVuY3Rpb24gZ2V0U2VnbWVudFBhcmFtKHNlZ21lbnQpIHtcbiAgICBjb25zdCBpbnRlcmNlcHRpb25NYXJrZXIgPSBfaW50ZXJjZXB0aW9ucm91dGVzLklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLmZpbmQoKG1hcmtlcik9PnNlZ21lbnQuc3RhcnRzV2l0aChtYXJrZXIpKTtcbiAgICAvLyBpZiBhbiBpbnRlcmNlcHRpb24gbWFya2VyIGlzIHBhcnQgb2YgdGhlIHBhdGggc2VnbWVudCwgd2UgbmVlZCB0byBqdW1wIGFoZWFkXG4gICAgLy8gdG8gdGhlIHJlbGV2YW50IHBvcnRpb24gZm9yIHBhcmFtIHBhcnNpbmdcbiAgICBpZiAoaW50ZXJjZXB0aW9uTWFya2VyKSB7XG4gICAgICAgIHNlZ21lbnQgPSBzZWdtZW50LnNsaWNlKGludGVyY2VwdGlvbk1hcmtlci5sZW5ndGgpO1xuICAgIH1cbiAgICBpZiAoc2VnbWVudC5zdGFydHNXaXRoKFwiW1suLi5cIikgJiYgc2VnbWVudC5lbmRzV2l0aChcIl1dXCIpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9wdGlvbmFsLWNhdGNoYWxsXCIsXG4gICAgICAgICAgICBwYXJhbTogc2VnbWVudC5zbGljZSg1LCAtMilcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHNlZ21lbnQuc3RhcnRzV2l0aChcIlsuLi5cIikgJiYgc2VnbWVudC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IFwiY2F0Y2hhbGxcIixcbiAgICAgICAgICAgIHBhcmFtOiBzZWdtZW50LnNsaWNlKDQsIC0xKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoc2VnbWVudC5zdGFydHNXaXRoKFwiW1wiKSAmJiBzZWdtZW50LmVuZHNXaXRoKFwiXVwiKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogXCJkeW5hbWljXCIsXG4gICAgICAgICAgICBwYXJhbTogc2VnbWVudC5zbGljZSgxLCAtMSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1zZWdtZW50LXBhcmFtLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/server/app-render/get-segment-param.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js": +/*!*****************************************************************!*\ + !*** ./node_modules/next/dist/server/dev/hot-reloader-types.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HMR_ACTIONS_SENT_TO_BROWSER\", ({\n enumerable: true,\n get: function() {\n return HMR_ACTIONS_SENT_TO_BROWSER;\n }\n}));\nvar HMR_ACTIONS_SENT_TO_BROWSER;\n(function(HMR_ACTIONS_SENT_TO_BROWSER) {\n HMR_ACTIONS_SENT_TO_BROWSER[\"ADDED_PAGE\"] = \"addedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"REMOVED_PAGE\"] = \"removedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"RELOAD_PAGE\"] = \"reloadPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_COMPONENT_CHANGES\"] = \"serverComponentChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"MIDDLEWARE_CHANGES\"] = \"middlewareChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"CLIENT_CHANGES\"] = \"clientChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ONLY_CHANGES\"] = \"serverOnlyChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SYNC\"] = \"sync\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILT\"] = \"built\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILDING\"] = \"building\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"FINISH_BUILDING\"] = \"finishBuilding\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_PAGES_MANIFEST_UPDATE\"] = \"devPagesManifestUpdate\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_MESSAGE\"] = \"turbopack-message\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ERROR\"] = \"serverError\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_CONNECTED\"] = \"turbopack-connected\";\n})(HMR_ACTIONS_SENT_TO_BROWSER || (HMR_ACTIONS_SENT_TO_BROWSER = {}));\n\n//# sourceMappingURL=hot-reloader-types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRiwrREFBOEQ7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxrRUFBa0U7O0FBRW5FIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMuanM/YTEwYSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUlwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSO1xuICAgIH1cbn0pO1xudmFyIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUjtcbihmdW5jdGlvbihITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIpIHtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJBRERFRF9QQUdFXCJdID0gXCJhZGRlZFBhZ2VcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJSRU1PVkVEX1BBR0VcIl0gPSBcInJlbW92ZWRQYWdlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiUkVMT0FEX1BBR0VcIl0gPSBcInJlbG9hZFBhZ2VcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTRVJWRVJfQ09NUE9ORU5UX0NIQU5HRVNcIl0gPSBcInNlcnZlckNvbXBvbmVudENoYW5nZXNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJNSURETEVXQVJFX0NIQU5HRVNcIl0gPSBcIm1pZGRsZXdhcmVDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQ0xJRU5UX0NIQU5HRVNcIl0gPSBcImNsaWVudENoYW5nZXNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTRVJWRVJfT05MWV9DSEFOR0VTXCJdID0gXCJzZXJ2ZXJPbmx5Q2hhbmdlc1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlNZTkNcIl0gPSBcInN5bmNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJCVUlMVFwiXSA9IFwiYnVpbHRcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJCVUlMRElOR1wiXSA9IFwiYnVpbGRpbmdcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJGSU5JU0hfQlVJTERJTkdcIl0gPSBcImZpbmlzaEJ1aWxkaW5nXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiREVWX1BBR0VTX01BTklGRVNUX1VQREFURVwiXSA9IFwiZGV2UGFnZXNNYW5pZmVzdFVwZGF0ZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlRVUkJPUEFDS19NRVNTQUdFXCJdID0gXCJ0dXJib3BhY2stbWVzc2FnZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlNFUlZFUl9FUlJPUlwiXSA9IFwic2VydmVyRXJyb3JcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJUVVJCT1BBQ0tfQ09OTkVDVEVEXCJdID0gXCJ0dXJib3BhY2stY29ubmVjdGVkXCI7XG59KShITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIgfHwgKEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUiA9IHt9KSk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvdC1yZWxvYWRlci10eXBlcy5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/server/future/helpers/interception-routes.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/helpers/interception-routes.js ***! + \*****************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n INTERCEPTION_ROUTE_MARKERS: function() {\n return INTERCEPTION_ROUTE_MARKERS;\n },\n isInterceptionRouteAppPath: function() {\n return isInterceptionRouteAppPath;\n },\n extractInterceptionRouteInformation: function() {\n return extractInterceptionRouteInformation;\n }\n});\nconst _apppaths = __webpack_require__(/*! ../../../shared/lib/router/utils/app-paths */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js\");\nconst INTERCEPTION_ROUTE_MARKERS = [\n \"(..)(..)\",\n \"(.)\",\n \"(..)\",\n \"(...)\"\n];\nfunction isInterceptionRouteAppPath(path) {\n // TODO-APP: add more serious validation\n return path.split(\"/\").find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined;\n}\nfunction extractInterceptionRouteInformation(path) {\n let interceptingRoute, marker, interceptedRoute;\n for (const segment of path.split(\"/\")){\n marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n if (marker) {\n [interceptingRoute, interceptedRoute] = path.split(marker, 2);\n break;\n }\n }\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(`Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`);\n }\n interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n ;\n switch(marker){\n case \"(.)\":\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === \"/\") {\n interceptedRoute = `/${interceptedRoute}`;\n } else {\n interceptedRoute = interceptingRoute + \"/\" + interceptedRoute;\n }\n break;\n case \"(..)\":\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === \"/\") {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`);\n }\n interceptedRoute = interceptingRoute.split(\"/\").slice(0, -1).concat(interceptedRoute).join(\"/\");\n break;\n case \"(...)\":\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = \"/\" + interceptedRoute;\n break;\n case \"(..)(..)\":\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n const splitInterceptingRoute = interceptingRoute.split(\"/\");\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`);\n }\n interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join(\"/\");\n break;\n default:\n throw new Error(\"Invariant: unexpected marker\");\n }\n return {\n interceptingRoute,\n interceptedRoute\n };\n}\n\n//# sourceMappingURL=interception-routes.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9oZWxwZXJzL2ludGVyY2VwdGlvbi1yb3V0ZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBSUw7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxrQkFBa0IsbUJBQU8sQ0FBQyxxSUFBNEM7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxLQUFLO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQjtBQUN4RCxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELEtBQUs7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxLQUFLO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvZnV0dXJlL2hlbHBlcnMvaW50ZXJjZXB0aW9uLXJvdXRlcy5qcz8xZDM4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlM6IG51bGwsXG4gICAgaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGg6IG51bGwsXG4gICAgZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb246IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlM7XG4gICAgfSxcbiAgICBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aDtcbiAgICB9LFxuICAgIGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uO1xuICAgIH1cbn0pO1xuY29uc3QgX2FwcHBhdGhzID0gcmVxdWlyZShcIi4uLy4uLy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRoc1wiKTtcbmNvbnN0IElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTID0gW1xuICAgIFwiKC4uKSguLilcIixcbiAgICBcIiguKVwiLFxuICAgIFwiKC4uKVwiLFxuICAgIFwiKC4uLilcIlxuXTtcbmZ1bmN0aW9uIGlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoKHBhdGgpIHtcbiAgICAvLyBUT0RPLUFQUDogYWRkIG1vcmUgc2VyaW91cyB2YWxpZGF0aW9uXG4gICAgcmV0dXJuIHBhdGguc3BsaXQoXCIvXCIpLmZpbmQoKHNlZ21lbnQpPT5JTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5maW5kKChtKT0+c2VnbWVudC5zdGFydHNXaXRoKG0pKSkgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uKHBhdGgpIHtcbiAgICBsZXQgaW50ZXJjZXB0aW5nUm91dGUsIG1hcmtlciwgaW50ZXJjZXB0ZWRSb3V0ZTtcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2YgcGF0aC5zcGxpdChcIi9cIikpe1xuICAgICAgICBtYXJrZXIgPSBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5maW5kKChtKT0+c2VnbWVudC5zdGFydHNXaXRoKG0pKTtcbiAgICAgICAgaWYgKG1hcmtlcikge1xuICAgICAgICAgICAgW2ludGVyY2VwdGluZ1JvdXRlLCBpbnRlcmNlcHRlZFJvdXRlXSA9IHBhdGguc3BsaXQobWFya2VyLCAyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghaW50ZXJjZXB0aW5nUm91dGUgfHwgIW1hcmtlciB8fCAhaW50ZXJjZXB0ZWRSb3V0ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaW50ZXJjZXB0aW9uIHJvdXRlOiAke3BhdGh9LiBNdXN0IGJlIGluIHRoZSBmb3JtYXQgLzxpbnRlcmNlcHRpbmcgcm91dGU+LyguLnwuLi58Li4pKC4uKS88aW50ZXJjZXB0ZWQgcm91dGU+YCk7XG4gICAgfVxuICAgIGludGVyY2VwdGluZ1JvdXRlID0gKDAsIF9hcHBwYXRocy5ub3JtYWxpemVBcHBQYXRoKShpbnRlcmNlcHRpbmdSb3V0ZSkgLy8gbm9ybWFsaXplIHRoZSBwYXRoLCBlLmcuIC8oYmxvZykvZmVlZCAtPiAvZmVlZFxuICAgIDtcbiAgICBzd2l0Y2gobWFya2VyKXtcbiAgICAgICAgY2FzZSBcIiguKVwiOlxuICAgICAgICAgICAgLy8gKC4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCB3aXRoIHNpYmxpbmcgcm91dGVzLCBzbyB3ZSBqdXN0IG5lZWQgdG8gYXBwZW5kIHRoZSBpbnRlcmNlcHRlZCByb3V0ZSB0byB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG4gICAgICAgICAgICBpZiAoaW50ZXJjZXB0aW5nUm91dGUgPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGAvJHtpbnRlcmNlcHRlZFJvdXRlfWA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludGVyY2VwdGVkUm91dGUgPSBpbnRlcmNlcHRpbmdSb3V0ZSArIFwiL1wiICsgaW50ZXJjZXB0ZWRSb3V0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiKC4uKVwiOlxuICAgICAgICAgICAgLy8gKC4uKSBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgbWF0Y2ggYXQgb25lIGxldmVsIHVwLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCBzZWdtZW50IG9mIHRoZSBpbnRlcmNlcHRpbmcgcm91dGVcbiAgICAgICAgICAgIGlmIChpbnRlcmNlcHRpbmdSb3V0ZSA9PT0gXCIvXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaW50ZXJjZXB0aW9uIHJvdXRlOiAke3BhdGh9LiBDYW5ub3QgdXNlICguLikgbWFya2VyIGF0IHRoZSByb290IGxldmVsLCB1c2UgKC4pIGluc3RlYWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnRlcmNlcHRlZFJvdXRlID0gaW50ZXJjZXB0aW5nUm91dGUuc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKS5jb25jYXQoaW50ZXJjZXB0ZWRSb3V0ZSkuam9pbihcIi9cIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIiguLi4pXCI6XG4gICAgICAgICAgICAvLyAoLi4uKSB3aWxsIG1hdGNoIHRoZSByb3V0ZSBzZWdtZW50IGluIHRoZSByb290IGRpcmVjdG9yeSwgc28gd2UgbmVlZCB0byB1c2UgdGhlIHJvb3QgZGlyZWN0b3J5IHRvIHByZXBlbmQgdGhlIGludGVyY2VwdGVkIHJvdXRlXG4gICAgICAgICAgICBpbnRlcmNlcHRlZFJvdXRlID0gXCIvXCIgKyBpbnRlcmNlcHRlZFJvdXRlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIoLi4pKC4uKVwiOlxuICAgICAgICAgICAgLy8gKC4uKSguLikgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIG1hdGNoIGF0IHR3byBsZXZlbHMgdXAsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBsYXN0IHR3byBzZWdtZW50cyBvZiB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG4gICAgICAgICAgICBjb25zdCBzcGxpdEludGVyY2VwdGluZ1JvdXRlID0gaW50ZXJjZXB0aW5nUm91dGUuc3BsaXQoXCIvXCIpO1xuICAgICAgICAgICAgaWYgKHNwbGl0SW50ZXJjZXB0aW5nUm91dGUubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaW50ZXJjZXB0aW9uIHJvdXRlOiAke3BhdGh9LiBDYW5ub3QgdXNlICguLikoLi4pIG1hcmtlciBhdCB0aGUgcm9vdCBsZXZlbCBvciBvbmUgbGV2ZWwgdXAuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnRlcmNlcHRlZFJvdXRlID0gc3BsaXRJbnRlcmNlcHRpbmdSb3V0ZS5zbGljZSgwLCAtMikuY29uY2F0KGludGVyY2VwdGVkUm91dGUpLmpvaW4oXCIvXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhcmlhbnQ6IHVuZXhwZWN0ZWQgbWFya2VyXCIpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBpbnRlcmNlcHRpbmdSb3V0ZSxcbiAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZVxuICAgIH07XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyY2VwdGlvbi1yb3V0ZXMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/server/future/helpers/interception-routes.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/client/add-base-path.js ***! + \********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addBasePath\", ({\n enumerable: true,\n get: function() {\n return addBasePath;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ../shared/lib/router/utils/add-path-prefix */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst basePath = false || \"\";\nfunction addBasePath(path, required) {\n return (0, _normalizetrailingslash.normalizePathTrailingSlash)( false ? 0 : (0, _addpathprefix.addPathPrefix)(path, basePath));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=add-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILCtDQUE4QztJQUMxQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGlCQUFpQkMsbUJBQU9BLENBQUMsMklBQTRDO0FBQzNFLE1BQU1DLDBCQUEwQkQsbUJBQU9BLENBQUMsbUhBQTRCO0FBQ3BFLE1BQU1FLFdBQVdDLE1BQWtDLElBQUk7QUFDdkQsU0FBU0wsWUFBWVEsSUFBSSxFQUFFQyxRQUFRO0lBQy9CLE9BQU8sQ0FBQyxHQUFHTix3QkFBd0JPLDBCQUEwQixFQUFFTCxNQUF1REksR0FBR0QsQ0FBSUEsR0FBRyxDQUFDLEdBQUdQLGVBQWVXLGFBQWEsRUFBRUosTUFBTUo7QUFDNUs7QUFFQSxJQUFJLENBQUMsT0FBT1IsUUFBUWlCLE9BQU8sS0FBSyxjQUFlLE9BQU9qQixRQUFRaUIsT0FBTyxLQUFLLFlBQVlqQixRQUFRaUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPakIsUUFBUWlCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktwQixPQUFPQyxjQUFjLENBQUNDLFFBQVFpQixPQUFPLEVBQUUsY0FBYztRQUFFaEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPcUIsTUFBTSxDQUFDbkIsUUFBUWlCLE9BQU8sRUFBRWpCO0lBQy9Cb0IsT0FBT3BCLE9BQU8sR0FBR0EsUUFBUWlCLE9BQU87QUFDbEMsRUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYWRkLWJhc2UtcGF0aC5qcz82MTMxIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWRkQmFzZVBhdGhcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFkZEJhc2VQYXRoO1xuICAgIH1cbn0pO1xuY29uc3QgX2FkZHBhdGhwcmVmaXggPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLXBhdGgtcHJlZml4XCIpO1xuY29uc3QgX25vcm1hbGl6ZXRyYWlsaW5nc2xhc2ggPSByZXF1aXJlKFwiLi9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2hcIik7XG5jb25zdCBiYXNlUGF0aCA9IHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEggfHwgXCJcIjtcbmZ1bmN0aW9uIGFkZEJhc2VQYXRoKHBhdGgsIHJlcXVpcmVkKSB7XG4gICAgcmV0dXJuICgwLCBfbm9ybWFsaXpldHJhaWxpbmdzbGFzaC5ub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCkocHJvY2Vzcy5lbnYuX19ORVhUX01BTlVBTF9DTElFTlRfQkFTRV9QQVRIICYmICFyZXF1aXJlZCA/IHBhdGggOiAoMCwgX2FkZHBhdGhwcmVmaXguYWRkUGF0aFByZWZpeCkocGF0aCwgYmFzZVBhdGgpKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkLWJhc2UtcGF0aC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiYWRkQmFzZVBhdGgiLCJfYWRkcGF0aHByZWZpeCIsInJlcXVpcmUiLCJfbm9ybWFsaXpldHJhaWxpbmdzbGFzaCIsImJhc2VQYXRoIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9ST1VURVJfQkFTRVBBVEgiLCJwYXRoIiwicmVxdWlyZWQiLCJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCIsIl9fTkVYVF9NQU5VQUxfQ0xJRU5UX0JBU0VfUEFUSCIsImFkZFBhdGhQcmVmaXgiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-bootstrap.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/client/app-bootstrap.js ***! + \********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * Before starting the Next.js runtime and requiring any module, we need to make\n * sure the following scripts are executed in the correct order:\n * - Polyfills\n * - next/script with `beforeInteractive` strategy\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"appBootstrap\", ({\n enumerable: true,\n get: function() {\n return appBootstrap;\n }\n}));\nconst version = \"14.1.3\";\nwindow.next = {\n version,\n appDir: true\n};\nfunction loadScriptsInSequence(scripts, hydrate) {\n if (!scripts || !scripts.length) {\n return hydrate();\n }\n return scripts.reduce((promise, param)=>{\n let [src, props] = param;\n return promise.then(()=>{\n return new Promise((resolve, reject)=>{\n const el = document.createElement(\"script\");\n if (props) {\n for(const key in props){\n if (key !== \"children\") {\n el.setAttribute(key, props[key]);\n }\n }\n }\n if (src) {\n el.src = src;\n el.onload = ()=>resolve();\n el.onerror = reject;\n } else if (props) {\n el.innerHTML = props.children;\n setTimeout(resolve);\n }\n document.head.appendChild(el);\n });\n });\n }, Promise.resolve()).catch((err)=>{\n console.error(err);\n // Still try to hydrate even if there's an error.\n }).then(()=>{\n hydrate();\n });\n}\nfunction appBootstrap(callback) {\n loadScriptsInSequence(self.__next_s, ()=>{\n callback();\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-bootstrap.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1ib290c3RyYXAuanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0NBS0MsR0FBZ0I7QUFDakJBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxnREFBK0M7SUFDM0NJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxVQUFVO0FBQ2hCQyxPQUFPQyxJQUFJLEdBQUc7SUFDVkY7SUFDQUcsUUFBUTtBQUNaO0FBQ0EsU0FBU0Msc0JBQXNCQyxPQUFPLEVBQUVDLE9BQU87SUFDM0MsSUFBSSxDQUFDRCxXQUFXLENBQUNBLFFBQVFFLE1BQU0sRUFBRTtRQUM3QixPQUFPRDtJQUNYO0lBQ0EsT0FBT0QsUUFBUUcsTUFBTSxDQUFDLENBQUNDLFNBQVNDO1FBQzVCLElBQUksQ0FBQ0MsS0FBS0MsTUFBTSxHQUFHRjtRQUNuQixPQUFPRCxRQUFRSSxJQUFJLENBQUM7WUFDaEIsT0FBTyxJQUFJQyxRQUFRLENBQUNDLFNBQVNDO2dCQUN6QixNQUFNQyxLQUFLQyxTQUFTQyxhQUFhLENBQUM7Z0JBQ2xDLElBQUlQLE9BQU87b0JBQ1AsSUFBSSxNQUFNUSxPQUFPUixNQUFNO3dCQUNuQixJQUFJUSxRQUFRLFlBQVk7NEJBQ3BCSCxHQUFHSSxZQUFZLENBQUNELEtBQUtSLEtBQUssQ0FBQ1EsSUFBSTt3QkFDbkM7b0JBQ0o7Z0JBQ0o7Z0JBQ0EsSUFBSVQsS0FBSztvQkFDTE0sR0FBR04sR0FBRyxHQUFHQTtvQkFDVE0sR0FBR0ssTUFBTSxHQUFHLElBQUlQO29CQUNoQkUsR0FBR00sT0FBTyxHQUFHUDtnQkFDakIsT0FBTyxJQUFJSixPQUFPO29CQUNkSyxHQUFHTyxTQUFTLEdBQUdaLE1BQU1hLFFBQVE7b0JBQzdCQyxXQUFXWDtnQkFDZjtnQkFDQUcsU0FBU1MsSUFBSSxDQUFDQyxXQUFXLENBQUNYO1lBQzlCO1FBQ0o7SUFDSixHQUFHSCxRQUFRQyxPQUFPLElBQUljLEtBQUssQ0FBQyxDQUFDQztRQUN6QkMsUUFBUUMsS0FBSyxDQUFDRjtJQUNsQixpREFBaUQ7SUFDakQsR0FBR2pCLElBQUksQ0FBQztRQUNKUDtJQUNKO0FBQ0o7QUFDQSxTQUFTUCxhQUFha0MsUUFBUTtJQUMxQjdCLHNCQUFzQjhCLEtBQUtDLFFBQVEsRUFBRTtRQUNqQ0Y7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU90QyxRQUFReUMsT0FBTyxLQUFLLGNBQWUsT0FBT3pDLFFBQVF5QyxPQUFPLEtBQUssWUFBWXpDLFFBQVF5QyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU96QyxRQUFReUMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzVDLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXlDLE9BQU8sRUFBRSxjQUFjO1FBQUV4QyxPQUFPO0lBQUs7SUFDbkVILE9BQU82QyxNQUFNLENBQUMzQyxRQUFReUMsT0FBTyxFQUFFekM7SUFDL0I0QyxPQUFPNUMsT0FBTyxHQUFHQSxRQUFReUMsT0FBTztBQUNsQyxFQUVBLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9hcHAtYm9vdHN0cmFwLmpzPzJiNGIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCZWZvcmUgc3RhcnRpbmcgdGhlIE5leHQuanMgcnVudGltZSBhbmQgcmVxdWlyaW5nIGFueSBtb2R1bGUsIHdlIG5lZWQgdG8gbWFrZVxuICogc3VyZSB0aGUgZm9sbG93aW5nIHNjcmlwdHMgYXJlIGV4ZWN1dGVkIGluIHRoZSBjb3JyZWN0IG9yZGVyOlxuICogLSBQb2x5ZmlsbHNcbiAqIC0gbmV4dC9zY3JpcHQgd2l0aCBgYmVmb3JlSW50ZXJhY3RpdmVgIHN0cmF0ZWd5XG4gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcHBCb290c3RyYXBcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFwcEJvb3RzdHJhcDtcbiAgICB9XG59KTtcbmNvbnN0IHZlcnNpb24gPSBcIjE0LjEuM1wiO1xud2luZG93Lm5leHQgPSB7XG4gICAgdmVyc2lvbixcbiAgICBhcHBEaXI6IHRydWVcbn07XG5mdW5jdGlvbiBsb2FkU2NyaXB0c0luU2VxdWVuY2Uoc2NyaXB0cywgaHlkcmF0ZSkge1xuICAgIGlmICghc2NyaXB0cyB8fCAhc2NyaXB0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGh5ZHJhdGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNjcmlwdHMucmVkdWNlKChwcm9taXNlLCBwYXJhbSk9PntcbiAgICAgICAgbGV0IFtzcmMsIHByb3BzXSA9IHBhcmFtO1xuICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKCgpPT57XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gcHJvcHMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gXCJjaGlsZHJlblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgcHJvcHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgICAgICAgICAgICBlbC5zcmMgPSBzcmM7XG4gICAgICAgICAgICAgICAgICAgIGVsLm9ubG9hZCA9ICgpPT5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGVsLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wcykge1xuICAgICAgICAgICAgICAgICAgICBlbC5pbm5lckhUTUwgPSBwcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChyZXNvbHZlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpLmNhdGNoKChlcnIpPT57XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAvLyBTdGlsbCB0cnkgdG8gaHlkcmF0ZSBldmVuIGlmIHRoZXJlJ3MgYW4gZXJyb3IuXG4gICAgfSkudGhlbigoKT0+e1xuICAgICAgICBoeWRyYXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBhcHBCb290c3RyYXAoY2FsbGJhY2spIHtcbiAgICBsb2FkU2NyaXB0c0luU2VxdWVuY2Uoc2VsZi5fX25leHRfcywgKCk9PntcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLWJvb3RzdHJhcC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiYXBwQm9vdHN0cmFwIiwidmVyc2lvbiIsIndpbmRvdyIsIm5leHQiLCJhcHBEaXIiLCJsb2FkU2NyaXB0c0luU2VxdWVuY2UiLCJzY3JpcHRzIiwiaHlkcmF0ZSIsImxlbmd0aCIsInJlZHVjZSIsInByb21pc2UiLCJwYXJhbSIsInNyYyIsInByb3BzIiwidGhlbiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZWwiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJrZXkiLCJzZXRBdHRyaWJ1dGUiLCJvbmxvYWQiLCJvbmVycm9yIiwiaW5uZXJIVE1MIiwiY2hpbGRyZW4iLCJzZXRUaW1lb3V0IiwiaGVhZCIsImFwcGVuZENoaWxkIiwiY2F0Y2giLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJjYWxsYmFjayIsInNlbGYiLCJfX25leHRfcyIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-bootstrap.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-call-server.js": +/*!**********************************************************!*\ + !*** ./node_modules/next/dist/client/app-call-server.js ***! + \**********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"callServer\", ({\n enumerable: true,\n get: function() {\n return callServer;\n }\n}));\nconst _approuter = __webpack_require__(/*! ./components/app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nasync function callServer(actionId, actionArgs) {\n const actionDispatcher = (0, _approuter.getServerActionDispatcher)();\n if (!actionDispatcher) {\n throw new Error(\"Invariant: missing action dispatcher.\");\n }\n return new Promise((resolve, reject)=>{\n actionDispatcher({\n actionId,\n actionArgs,\n resolve,\n reject\n });\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-call-server.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1jYWxsLXNlcnZlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsOENBQTZDO0lBQ3pDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsYUFBYUMsbUJBQU9BLENBQUMsNkdBQXlCO0FBQ3BELGVBQWVGLFdBQVdHLFFBQVEsRUFBRUMsVUFBVTtJQUMxQyxNQUFNQyxtQkFBbUIsQ0FBQyxHQUFHSixXQUFXSyx5QkFBeUI7SUFDakUsSUFBSSxDQUFDRCxrQkFBa0I7UUFDbkIsTUFBTSxJQUFJRSxNQUFNO0lBQ3BCO0lBQ0EsT0FBTyxJQUFJQyxRQUFRLENBQUNDLFNBQVNDO1FBQ3pCTCxpQkFBaUI7WUFDYkY7WUFDQUM7WUFDQUs7WUFDQUM7UUFDSjtJQUNKO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT2QsUUFBUWUsT0FBTyxLQUFLLGNBQWUsT0FBT2YsUUFBUWUsT0FBTyxLQUFLLFlBQVlmLFFBQVFlLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2YsUUFBUWUsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2xCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWUsT0FBTyxFQUFFLGNBQWM7UUFBRWQsT0FBTztJQUFLO0lBQ25FSCxPQUFPbUIsTUFBTSxDQUFDakIsUUFBUWUsT0FBTyxFQUFFZjtJQUMvQmtCLE9BQU9sQixPQUFPLEdBQUdBLFFBQVFlLE9BQU87QUFDbEMsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLWNhbGwtc2VydmVyLmpzP2YzZjIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjYWxsU2VydmVyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjYWxsU2VydmVyO1xuICAgIH1cbn0pO1xuY29uc3QgX2FwcHJvdXRlciA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvYXBwLXJvdXRlclwiKTtcbmFzeW5jIGZ1bmN0aW9uIGNhbGxTZXJ2ZXIoYWN0aW9uSWQsIGFjdGlvbkFyZ3MpIHtcbiAgICBjb25zdCBhY3Rpb25EaXNwYXRjaGVyID0gKDAsIF9hcHByb3V0ZXIuZ2V0U2VydmVyQWN0aW9uRGlzcGF0Y2hlcikoKTtcbiAgICBpZiAoIWFjdGlvbkRpc3BhdGNoZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YXJpYW50OiBtaXNzaW5nIGFjdGlvbiBkaXNwYXRjaGVyLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgIGFjdGlvbkRpc3BhdGNoZXIoe1xuICAgICAgICAgICAgYWN0aW9uSWQsXG4gICAgICAgICAgICBhY3Rpb25BcmdzLFxuICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLWNhbGwtc2VydmVyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJjYWxsU2VydmVyIiwiX2FwcHJvdXRlciIsInJlcXVpcmUiLCJhY3Rpb25JZCIsImFjdGlvbkFyZ3MiLCJhY3Rpb25EaXNwYXRjaGVyIiwiZ2V0U2VydmVyQWN0aW9uRGlzcGF0Y2hlciIsIkVycm9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-call-server.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-index.js": +/*!****************************************************!*\ + !*** ./node_modules/next/dist/client/app-index.js ***! + \****************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* global location */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hydrate\", ({\n enumerable: true,\n get: function() {\n return hydrate;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\n__webpack_require__(/*! ../build/polyfills/polyfill-module */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/polyfill-module.js\");\nconst _client = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom/client */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/client.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _client1 = __webpack_require__(/*! react-server-dom-webpack/client */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.js\");\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _onrecoverableerror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./on-recoverable-error */ \"(app-pages-browser)/./node_modules/next/dist/client/on-recoverable-error.js\"));\nconst _appcallserver = __webpack_require__(/*! ./app-call-server */ \"(app-pages-browser)/./node_modules/next/dist/client/app-call-server.js\");\nconst _isnextroutererror = __webpack_require__(/*! ./components/is-next-router-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nconst _actionqueue = __webpack_require__(/*! ../shared/lib/router/action-queue */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/action-queue.js\");\n// Since React doesn't call onerror for errors caught in error boundaries.\nconst origConsoleError = window.console.error;\nwindow.console.error = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if ((0, _isnextroutererror.isNextRouterError)(args[0])) {\n return;\n }\n origConsoleError.apply(window.console, args);\n};\nwindow.addEventListener(\"error\", (ev)=>{\n if ((0, _isnextroutererror.isNextRouterError)(ev.error)) {\n ev.preventDefault();\n return;\n }\n});\n/// <reference types=\"react-dom/experimental\" />\nconst appElement = document;\nconst getCacheKey = ()=>{\n const { pathname, search } = location;\n return pathname + search;\n};\nconst encoder = new TextEncoder();\nlet initialServerDataBuffer = undefined;\nlet initialServerDataWriter = undefined;\nlet initialServerDataLoaded = false;\nlet initialServerDataFlushed = false;\nlet initialFormStateData = null;\nfunction nextServerDataCallback(seg) {\n if (seg[0] === 0) {\n initialServerDataBuffer = [];\n } else if (seg[0] === 1) {\n if (!initialServerDataBuffer) throw new Error(\"Unexpected server data: missing bootstrap script.\");\n if (initialServerDataWriter) {\n initialServerDataWriter.enqueue(encoder.encode(seg[1]));\n } else {\n initialServerDataBuffer.push(seg[1]);\n }\n } else if (seg[0] === 2) {\n initialFormStateData = seg[1];\n }\n}\n// There might be race conditions between `nextServerDataRegisterWriter` and\n// `DOMContentLoaded`. The former will be called when React starts to hydrate\n// the root, the latter will be called when the DOM is fully loaded.\n// For streaming, the former is called first due to partial hydration.\n// For non-streaming, the latter can be called first.\n// Hence, we use two variables `initialServerDataLoaded` and\n// `initialServerDataFlushed` to make sure the writer will be closed and\n// `initialServerDataBuffer` will be cleared in the right time.\nfunction nextServerDataRegisterWriter(ctr) {\n if (initialServerDataBuffer) {\n initialServerDataBuffer.forEach((val)=>{\n ctr.enqueue(encoder.encode(val));\n });\n if (initialServerDataLoaded && !initialServerDataFlushed) {\n ctr.close();\n initialServerDataFlushed = true;\n initialServerDataBuffer = undefined;\n }\n }\n initialServerDataWriter = ctr;\n}\n// When `DOMContentLoaded`, we can close all pending writers to finish hydration.\nconst DOMContentLoaded = function() {\n if (initialServerDataWriter && !initialServerDataFlushed) {\n initialServerDataWriter.close();\n initialServerDataFlushed = true;\n initialServerDataBuffer = undefined;\n }\n initialServerDataLoaded = true;\n};\n_c = DOMContentLoaded;\n// It's possible that the DOM is already loaded.\nif (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", DOMContentLoaded, false);\n} else {\n DOMContentLoaded();\n}\nconst nextServerDataLoadingGlobal = self.__next_f = self.__next_f || [];\nnextServerDataLoadingGlobal.forEach(nextServerDataCallback);\nnextServerDataLoadingGlobal.push = nextServerDataCallback;\nfunction createResponseCache() {\n return new Map();\n}\nconst rscCache = createResponseCache();\nfunction useInitialServerResponse(cacheKey) {\n const response = rscCache.get(cacheKey);\n if (response) return response;\n const readable = new ReadableStream({\n start (controller) {\n nextServerDataRegisterWriter(controller);\n }\n });\n const newResponse = (0, _client1.createFromReadableStream)(readable, {\n callServer: _appcallserver.callServer\n });\n rscCache.set(cacheKey, newResponse);\n return newResponse;\n}\nfunction ServerRoot(param) {\n _s();\n let { cacheKey } = param;\n _react.default.useEffect(()=>{\n rscCache.delete(cacheKey);\n });\n const response = useInitialServerResponse(cacheKey);\n const root = (0, _react.use)(response);\n return root;\n}\n_s(ServerRoot, \"K9b7qXb5/x90+1mcPl2lLLR5/0A=\", false, function() {\n return [\n useInitialServerResponse\n ];\n});\n_c1 = ServerRoot;\nconst StrictModeIfEnabled = true ? _react.default.StrictMode : 0;\nfunction Root(param) {\n let { children } = param;\n if (false) {}\n if (false) {}\n return children;\n}\n_c2 = Root;\nfunction RSCComponent(props) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(ServerRoot, {\n ...props,\n cacheKey: getCacheKey()\n });\n}\n_c3 = RSCComponent;\nfunction hydrate() {\n if (true) {\n const rootLayoutMissingTagsError = self.__next_root_layout_missing_tags_error;\n const HotReload = (__webpack_require__(/*! ./components/react-dev-overlay/hot-reloader-client */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/hot-reloader-client.js\")[\"default\"]);\n // Don't try to hydrate if root layout is missing required tags, render error instead\n if (rootLayoutMissingTagsError) {\n const reactRootElement = document.createElement(\"div\");\n document.body.appendChild(reactRootElement);\n const reactRoot = _client.default.createRoot(reactRootElement, {\n onRecoverableError: _onrecoverableerror.default\n });\n reactRoot.render(/*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.GlobalLayoutRouterContext.Provider, {\n value: {\n buildId: \"development\",\n tree: rootLayoutMissingTagsError.tree,\n changeByServerResponse: ()=>{},\n focusAndScrollRef: {\n apply: false,\n onlyHashChange: false,\n hashFragment: null,\n segmentPaths: []\n },\n nextUrl: null\n },\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(HotReload, {\n assetPrefix: rootLayoutMissingTagsError.assetPrefix\n })\n }));\n return;\n }\n }\n const actionQueue = (0, _actionqueue.createMutableActionQueue)();\n const reactEl = /*#__PURE__*/ (0, _jsxruntime.jsx)(StrictModeIfEnabled, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_headmanagercontextsharedruntime.HeadManagerContext.Provider, {\n value: {\n appDir: true\n },\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_actionqueue.ActionQueueContext.Provider, {\n value: actionQueue,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Root, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(RSCComponent, {})\n })\n })\n })\n });\n const options = {\n onRecoverableError: _onrecoverableerror.default\n };\n const isError = document.documentElement.id === \"__next_error__\";\n if (true) {\n // Patch console.error to collect information about hydration errors\n const patchConsoleError = (__webpack_require__(/*! ./components/react-dev-overlay/internal/helpers/hydration-error-info */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js\").patchConsoleError);\n if (!isError) {\n patchConsoleError();\n }\n }\n if (isError) {\n if (true) {\n // if an error is thrown while rendering an RSC stream, this will catch it in dev\n // and show the error overlay\n const ReactDevOverlay = (__webpack_require__(/*! ./components/react-dev-overlay/internal/ReactDevOverlay */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/ReactDevOverlay.js\")[\"default\"]);\n const INITIAL_OVERLAY_STATE = (__webpack_require__(/*! ./components/react-dev-overlay/internal/error-overlay-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js\").INITIAL_OVERLAY_STATE);\n const getSocketUrl = (__webpack_require__(/*! ./components/react-dev-overlay/internal/helpers/get-socket-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js\").getSocketUrl);\n let errorTree = /*#__PURE__*/ (0, _jsxruntime.jsx)(ReactDevOverlay, {\n state: INITIAL_OVERLAY_STATE,\n onReactError: ()=>{},\n children: reactEl\n });\n const socketUrl = getSocketUrl( false || \"\");\n const socket = new window.WebSocket(\"\" + socketUrl + \"/_next/webpack-hmr\");\n // add minimal \"hot reload\" support for RSC errors\n const handler = (event)=>{\n let obj;\n try {\n obj = JSON.parse(event.data);\n } catch (e) {}\n if (!obj || !(\"action\" in obj)) {\n return;\n }\n if (obj.action === \"serverComponentChanges\") {\n window.location.reload();\n }\n };\n socket.addEventListener(\"message\", handler);\n _client.default.createRoot(appElement, options).render(errorTree);\n } else {}\n } else {\n _react.default.startTransition(()=>_client.default.hydrateRoot(appElement, reactEl, {\n ...options,\n formState: initialFormStateData\n }));\n }\n // TODO-APP: Remove this logic when Float has GC built-in in development.\n if (true) {\n const { linkGc } = __webpack_require__(/*! ./app-link-gc */ \"(app-pages-browser)/./node_modules/next/dist/client/app-link-gc.js\");\n linkGc();\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-index.js.map\nvar _c, _c1, _c2, _c3;\n$RefreshReg$(_c, \"DOMContentLoaded\");\n$RefreshReg$(_c1, \"ServerRoot\");\n$RefreshReg$(_c2, \"Root\");\n$RefreshReg$(_c3, \"RSCComponent\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsR0FBZ0I7O0FBQWI7QUFDdEJBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGdJQUF5QztBQUNsRixNQUFNQyw0QkFBNEJELG1CQUFPQSxDQUFDLGtJQUEwQztBQUNwRixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0NBLG1CQUFPQSxDQUFDLDJIQUFvQztBQUM1QyxNQUFNRyxVQUFVLFdBQVcsR0FBR0oseUJBQXlCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLG1HQUFrQjtBQUNuRixNQUFNSyxTQUFTLFdBQVcsR0FBR0osMEJBQTBCRyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLG1GQUFPO0FBQ3hFLE1BQU1NLFdBQVdOLG1CQUFPQSxDQUFDLGlJQUFpQztBQUMxRCxNQUFNTyxtQ0FBbUNQLG1CQUFPQSxDQUFDLHlKQUFtRDtBQUNwRyxNQUFNUSxpQ0FBaUNSLG1CQUFPQSxDQUFDLHFKQUFpRDtBQUNoRyxNQUFNUyxzQkFBc0IsV0FBVyxHQUFHVix5QkFBeUJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsMkdBQXdCO0FBQ3JHLE1BQU1VLGlCQUFpQlYsbUJBQU9BLENBQUMsaUdBQW1CO0FBQ2xELE1BQU1XLHFCQUFxQlgsbUJBQU9BLENBQUMsaUlBQW1DO0FBQ3RFLE1BQU1ZLGVBQWVaLG1CQUFPQSxDQUFDLHlIQUFtQztBQUNoRSwwRUFBMEU7QUFDMUUsTUFBTWEsbUJBQW1CQyxPQUFPQyxPQUFPLENBQUNDLEtBQUs7QUFDN0NGLE9BQU9DLE9BQU8sQ0FBQ0MsS0FBSyxHQUFHO0lBQ25CLElBQUksSUFBSUMsT0FBT0MsVUFBVUMsTUFBTSxFQUFFQyxPQUFPLElBQUlDLE1BQU1KLE9BQU9LLE9BQU8sR0FBR0EsT0FBT0wsTUFBTUssT0FBTztRQUNuRkYsSUFBSSxDQUFDRSxLQUFLLEdBQUdKLFNBQVMsQ0FBQ0ksS0FBSztJQUNoQztJQUNBLElBQUksQ0FBQyxHQUFHWCxtQkFBbUJZLGlCQUFpQixFQUFFSCxJQUFJLENBQUMsRUFBRSxHQUFHO1FBQ3BEO0lBQ0o7SUFDQVAsaUJBQWlCVyxLQUFLLENBQUNWLE9BQU9DLE9BQU8sRUFBRUs7QUFDM0M7QUFDQU4sT0FBT1csZ0JBQWdCLENBQUMsU0FBUyxDQUFDQztJQUM5QixJQUFJLENBQUMsR0FBR2YsbUJBQW1CWSxpQkFBaUIsRUFBRUcsR0FBR1YsS0FBSyxHQUFHO1FBQ3JEVSxHQUFHQyxjQUFjO1FBQ2pCO0lBQ0o7QUFDSjtBQUNBLGdEQUFnRDtBQUNoRCxNQUFNQyxhQUFhQztBQUNuQixNQUFNQyxjQUFjO0lBQ2hCLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxNQUFNLEVBQUUsR0FBR0M7SUFDN0IsT0FBT0YsV0FBV0M7QUFDdEI7QUFDQSxNQUFNRSxVQUFVLElBQUlDO0FBQ3BCLElBQUlDLDBCQUEwQkM7QUFDOUIsSUFBSUMsMEJBQTBCRDtBQUM5QixJQUFJRSwwQkFBMEI7QUFDOUIsSUFBSUMsMkJBQTJCO0FBQy9CLElBQUlDLHVCQUF1QjtBQUMzQixTQUFTQyx1QkFBdUJDLEdBQUc7SUFDL0IsSUFBSUEsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHO1FBQ2RQLDBCQUEwQixFQUFFO0lBQ2hDLE9BQU8sSUFBSU8sR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHO1FBQ3JCLElBQUksQ0FBQ1AseUJBQXlCLE1BQU0sSUFBSVEsTUFBTTtRQUM5QyxJQUFJTix5QkFBeUI7WUFDekJBLHdCQUF3Qk8sT0FBTyxDQUFDWCxRQUFRWSxNQUFNLENBQUNILEdBQUcsQ0FBQyxFQUFFO1FBQ3pELE9BQU87WUFDSFAsd0JBQXdCVyxJQUFJLENBQUNKLEdBQUcsQ0FBQyxFQUFFO1FBQ3ZDO0lBQ0osT0FBTyxJQUFJQSxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUc7UUFDckJGLHVCQUF1QkUsR0FBRyxDQUFDLEVBQUU7SUFDakM7QUFDSjtBQUNBLDRFQUE0RTtBQUM1RSw2RUFBNkU7QUFDN0Usb0VBQW9FO0FBQ3BFLHNFQUFzRTtBQUN0RSxxREFBcUQ7QUFDckQsNERBQTREO0FBQzVELHdFQUF3RTtBQUN4RSwrREFBK0Q7QUFDL0QsU0FBU0ssNkJBQTZCQyxHQUFHO0lBQ3JDLElBQUliLHlCQUF5QjtRQUN6QkEsd0JBQXdCYyxPQUFPLENBQUMsQ0FBQ0M7WUFDN0JGLElBQUlKLE9BQU8sQ0FBQ1gsUUFBUVksTUFBTSxDQUFDSztRQUMvQjtRQUNBLElBQUlaLDJCQUEyQixDQUFDQywwQkFBMEI7WUFDdERTLElBQUlHLEtBQUs7WUFDVFosMkJBQTJCO1lBQzNCSiwwQkFBMEJDO1FBQzlCO0lBQ0o7SUFDQUMsMEJBQTBCVztBQUM5QjtBQUNBLGlGQUFpRjtBQUNqRixNQUFNSSxtQkFBbUI7SUFDckIsSUFBSWYsMkJBQTJCLENBQUNFLDBCQUEwQjtRQUN0REYsd0JBQXdCYyxLQUFLO1FBQzdCWiwyQkFBMkI7UUFDM0JKLDBCQUEwQkM7SUFDOUI7SUFDQUUsMEJBQTBCO0FBQzlCO0tBUE1jO0FBUU4sZ0RBQWdEO0FBQ2hELElBQUl4QixTQUFTeUIsVUFBVSxLQUFLLFdBQVc7SUFDbkN6QixTQUFTSixnQkFBZ0IsQ0FBQyxvQkFBb0I0QixrQkFBa0I7QUFDcEUsT0FBTztJQUNIQTtBQUNKO0FBQ0EsTUFBTUUsOEJBQThCQyxLQUFLQyxRQUFRLEdBQUdELEtBQUtDLFFBQVEsSUFBSSxFQUFFO0FBQ3ZFRiw0QkFBNEJMLE9BQU8sQ0FBQ1I7QUFDcENhLDRCQUE0QlIsSUFBSSxHQUFHTDtBQUNuQyxTQUFTZ0I7SUFDTCxPQUFPLElBQUlDO0FBQ2Y7QUFDQSxNQUFNQyxXQUFXRjtBQUNqQixTQUFTRyx5QkFBeUJDLFFBQVE7SUFDdEMsTUFBTUMsV0FBV0gsU0FBUy9ELEdBQUcsQ0FBQ2lFO0lBQzlCLElBQUlDLFVBQVUsT0FBT0E7SUFDckIsTUFBTUMsV0FBVyxJQUFJQyxlQUFlO1FBQ2hDQyxPQUFPQyxVQUFVO1lBQ2JuQiw2QkFBNkJtQjtRQUNqQztJQUNKO0lBQ0EsTUFBTUMsY0FBYyxDQUFDLEdBQUc5RCxTQUFTK0Qsd0JBQXdCLEVBQUVMLFVBQVU7UUFDakVNLFlBQVk1RCxlQUFlNEQsVUFBVTtJQUN6QztJQUNBVixTQUFTVyxHQUFHLENBQUNULFVBQVVNO0lBQ3ZCLE9BQU9BO0FBQ1g7QUFDQSxTQUFTSSxXQUFXQyxLQUFLOztJQUNyQixJQUFJLEVBQUVYLFFBQVEsRUFBRSxHQUFHVztJQUNuQnBFLE9BQU9xRSxPQUFPLENBQUNDLFNBQVMsQ0FBQztRQUNyQmYsU0FBU2dCLE1BQU0sQ0FBQ2Q7SUFDcEI7SUFDQSxNQUFNQyxXQUFXRix5QkFBeUJDO0lBQzFDLE1BQU1lLE9BQU8sQ0FBQyxHQUFHeEUsT0FBT3lFLEdBQUcsRUFBRWY7SUFDN0IsT0FBT2M7QUFDWDtHQVJTTDs7UUFLWVg7OztNQUxaVztBQVNULE1BQU1PLHNCQUFzQkMsS0FBa0MsR0FBRzNFLE9BQU9xRSxPQUFPLENBQUNTLFVBQVUsR0FBRzlFLENBQXVCO0FBQ3BILFNBQVNnRixLQUFLWixLQUFLO0lBQ2YsSUFBSSxFQUFFYSxRQUFRLEVBQUUsR0FBR2I7SUFDbkIsSUFBSU8sS0FBK0IsRUFBRSxFQUtwQztJQUNELElBQUlBLEtBQTRCLEVBQUUsRUFRakM7SUFDRCxPQUFPTTtBQUNYO01BbEJTRDtBQW1CVCxTQUFTTSxhQUFhQyxLQUFLO0lBQ3ZCLE9BQXFCLFdBQUgsR0FBSSxJQUFHMUYsWUFBWTJGLEdBQUcsRUFBRXJCLFlBQVk7UUFDbEQsR0FBR29CLEtBQUs7UUFDUjlCLFVBQVVoQztJQUNkO0FBQ0o7TUFMUzZEO0FBTVQsU0FBUzdGO0lBQ0wsSUFBSWtGLElBQXFDLEVBQUU7UUFDdkMsTUFBTWMsNkJBQTZCdEMsS0FBS3VDLHFDQUFxQztRQUM3RSxNQUFNQyxZQUFZaEcscU1BQXFFO1FBQ3ZGLHFGQUFxRjtRQUNyRixJQUFJOEYsNEJBQTRCO1lBQzVCLE1BQU1HLG1CQUFtQnBFLFNBQVNxRSxhQUFhLENBQUM7WUFDaERyRSxTQUFTc0UsSUFBSSxDQUFDQyxXQUFXLENBQUNIO1lBQzFCLE1BQU1JLFlBQVlsRyxRQUFRdUUsT0FBTyxDQUFDNEIsVUFBVSxDQUFDTCxrQkFBa0I7Z0JBQzNETSxvQkFBb0I5RixvQkFBb0JpRSxPQUFPO1lBQ25EO1lBQ0EyQixVQUFVRyxNQUFNLENBQWUsV0FBSCxHQUFJLElBQUd0RyxZQUFZMkYsR0FBRyxFQUFFckYsK0JBQStCaUcseUJBQXlCLENBQUNDLFFBQVEsRUFBRTtnQkFDbkgvRyxPQUFPO29CQUNIZ0gsU0FBUztvQkFDVEMsTUFBTWQsMkJBQTJCYyxJQUFJO29CQUNyQ0Msd0JBQXdCLEtBQUs7b0JBQzdCQyxtQkFBbUI7d0JBQ2Z0RixPQUFPO3dCQUNQdUYsZ0JBQWdCO3dCQUNoQkMsY0FBYzt3QkFDZEMsY0FBYyxFQUFFO29CQUNwQjtvQkFDQUMsU0FBUztnQkFDYjtnQkFDQTVCLFVBQXdCLFdBQUgsR0FBSSxJQUFHcEYsWUFBWTJGLEdBQUcsRUFBRUcsV0FBVztvQkFDcERtQixhQUFhckIsMkJBQTJCcUIsV0FBVztnQkFDdkQ7WUFDSjtZQUNBO1FBQ0o7SUFDSjtJQUNBLE1BQU1DLGNBQWMsQ0FBQyxHQUFHeEcsYUFBYXlHLHdCQUF3QjtJQUM3RCxNQUFNQyxVQUF3QixXQUFILEdBQUksSUFBR3BILFlBQVkyRixHQUFHLEVBQUVkLHFCQUFxQjtRQUNwRU8sVUFBd0IsV0FBSCxHQUFJLElBQUdwRixZQUFZMkYsR0FBRyxFQUFFdEYsaUNBQWlDZ0gsa0JBQWtCLENBQUNiLFFBQVEsRUFBRTtZQUN2Ry9HLE9BQU87Z0JBQ0g2SCxRQUFRO1lBQ1o7WUFDQWxDLFVBQXdCLFdBQUgsR0FBSSxJQUFHcEYsWUFBWTJGLEdBQUcsRUFBRWpGLGFBQWE2RyxrQkFBa0IsQ0FBQ2YsUUFBUSxFQUFFO2dCQUNuRi9HLE9BQU95SDtnQkFDUDlCLFVBQXdCLFdBQUgsR0FBSSxJQUFHcEYsWUFBWTJGLEdBQUcsRUFBRVIsTUFBTTtvQkFDL0NDLFVBQXdCLFdBQUgsR0FBSSxJQUFHcEYsWUFBWTJGLEdBQUcsRUFBRUYsY0FBYyxDQUFDO2dCQUNoRTtZQUNKO1FBQ0o7SUFDSjtJQUNBLE1BQU0rQixVQUFVO1FBQ1puQixvQkFBb0I5RixvQkFBb0JpRSxPQUFPO0lBQ25EO0lBQ0EsTUFBTWlELFVBQVU5RixTQUFTK0YsZUFBZSxDQUFDQyxFQUFFLEtBQUs7SUFDaEQsSUFBSTdDLElBQXFDLEVBQUU7UUFDdkMsb0VBQW9FO1FBQ3BFLE1BQU04QyxvQkFBb0I5SCxnUEFBaUc7UUFDM0gsSUFBSSxDQUFDMkgsU0FBUztZQUNWRztRQUNKO0lBQ0o7SUFDQSxJQUFJSCxTQUFTO1FBQ1QsSUFBSTNDLElBQXFDLEVBQUU7WUFDdkMsaUZBQWlGO1lBQ2pGLDZCQUE2QjtZQUM3QixNQUFNK0Msa0JBQWtCL0gsK01BQTBFO1lBQ2xHLE1BQU1nSSx3QkFBd0JoSSxzT0FBOEY7WUFDNUgsTUFBTWlJLGVBQWVqSSwrTkFBc0Y7WUFDM0csSUFBSWtJLFlBQTBCLFdBQUgsR0FBSSxJQUFHaEksWUFBWTJGLEdBQUcsRUFBRWtDLGlCQUFpQjtnQkFDaEVJLE9BQU9IO2dCQUNQSSxjQUFjLEtBQUs7Z0JBQ25COUMsVUFBVWdDO1lBQ2Q7WUFDQSxNQUFNZSxZQUFZSixhQUFhakQsTUFBK0IsSUFBSTtZQUNsRSxNQUFNdUQsU0FBUyxJQUFJekgsT0FBTzBILFNBQVMsQ0FBQyxLQUFLSCxZQUFZO1lBQ3JELGtEQUFrRDtZQUNsRCxNQUFNSSxVQUFVLENBQUNDO2dCQUNiLElBQUlDO2dCQUNKLElBQUk7b0JBQ0FBLE1BQU1DLEtBQUtDLEtBQUssQ0FBQ0gsTUFBTUksSUFBSTtnQkFDL0IsRUFBRSxPQUFPQyxHQUFHLENBQUM7Z0JBQ2IsSUFBSSxDQUFDSixPQUFPLENBQUUsYUFBWUEsR0FBRSxHQUFJO29CQUM1QjtnQkFDSjtnQkFDQSxJQUFJQSxJQUFJSyxNQUFNLEtBQUssMEJBQTBCO29CQUN6Q2xJLE9BQU9tQixRQUFRLENBQUNnSCxNQUFNO2dCQUMxQjtZQUNKO1lBQ0FWLE9BQU85RyxnQkFBZ0IsQ0FBQyxXQUFXZ0g7WUFDbkN0SSxRQUFRdUUsT0FBTyxDQUFDNEIsVUFBVSxDQUFDMUUsWUFBWThGLFNBQVNsQixNQUFNLENBQUMwQjtRQUMzRCxPQUFPLEVBRU47SUFDTCxPQUFPO1FBQ0g3SCxPQUFPcUUsT0FBTyxDQUFDd0UsZUFBZSxDQUFDLElBQUkvSSxRQUFRdUUsT0FBTyxDQUFDeUUsV0FBVyxDQUFDdkgsWUFBWTBGLFNBQVM7Z0JBQzVFLEdBQUdJLE9BQU87Z0JBQ1YwQixXQUFXM0c7WUFDZjtJQUNSO0lBQ0EseUVBQXlFO0lBQ3pFLElBQUl1QyxJQUFxQyxFQUFFO1FBQ3ZDLE1BQU0sRUFBRXFFLE1BQU0sRUFBRSxHQUFHckosbUJBQU9BLENBQUMseUZBQWU7UUFDMUNxSjtJQUNKO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBTzNKLFFBQVFnRixPQUFPLEtBQUssY0FBZSxPQUFPaEYsUUFBUWdGLE9BQU8sS0FBSyxZQUFZaEYsUUFBUWdGLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2hGLFFBQVFnRixPQUFPLENBQUM0RSxVQUFVLEtBQUssYUFBYTtJQUNySzlKLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWdGLE9BQU8sRUFBRSxjQUFjO1FBQUUvRSxPQUFPO0lBQUs7SUFDbkVILE9BQU8rSixNQUFNLENBQUM3SixRQUFRZ0YsT0FBTyxFQUFFaEY7SUFDL0I4SixPQUFPOUosT0FBTyxHQUFHQSxRQUFRZ0YsT0FBTztBQUNsQyxFQUVBLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9hcHAtaW5kZXguanM/ZDcwNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgbG9jYXRpb24gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoeWRyYXRlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoeWRyYXRlO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xucmVxdWlyZShcIi4uL2J1aWxkL3BvbHlmaWxscy9wb2x5ZmlsbC1tb2R1bGVcIik7XG5jb25zdCBfY2xpZW50ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3QtZG9tL2NsaWVudFwiKSk7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX2NsaWVudDEgPSByZXF1aXJlKFwicmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudFwiKTtcbmNvbnN0IF9oZWFkbWFuYWdlcmNvbnRleHRzaGFyZWRydW50aW1lID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvaGVhZC1tYW5hZ2VyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5jb25zdCBfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5jb25zdCBfb25yZWNvdmVyYWJsZWVycm9yID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi9vbi1yZWNvdmVyYWJsZS1lcnJvclwiKSk7XG5jb25zdCBfYXBwY2FsbHNlcnZlciA9IHJlcXVpcmUoXCIuL2FwcC1jYWxsLXNlcnZlclwiKTtcbmNvbnN0IF9pc25leHRyb3V0ZXJlcnJvciA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudHMvaXMtbmV4dC1yb3V0ZXItZXJyb3JcIik7XG5jb25zdCBfYWN0aW9ucXVldWUgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvYWN0aW9uLXF1ZXVlXCIpO1xuLy8gU2luY2UgUmVhY3QgZG9lc24ndCBjYWxsIG9uZXJyb3IgZm9yIGVycm9ycyBjYXVnaHQgaW4gZXJyb3IgYm91bmRhcmllcy5cbmNvbnN0IG9yaWdDb25zb2xlRXJyb3IgPSB3aW5kb3cuY29uc29sZS5lcnJvcjtcbndpbmRvdy5jb25zb2xlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBpZiAoKDAsIF9pc25leHRyb3V0ZXJlcnJvci5pc05leHRSb3V0ZXJFcnJvcikoYXJnc1swXSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvcmlnQ29uc29sZUVycm9yLmFwcGx5KHdpbmRvdy5jb25zb2xlLCBhcmdzKTtcbn07XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIChldik9PntcbiAgICBpZiAoKDAsIF9pc25leHRyb3V0ZXJlcnJvci5pc05leHRSb3V0ZXJFcnJvcikoZXYuZXJyb3IpKSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG59KTtcbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwicmVhY3QtZG9tL2V4cGVyaW1lbnRhbFwiIC8+XG5jb25zdCBhcHBFbGVtZW50ID0gZG9jdW1lbnQ7XG5jb25zdCBnZXRDYWNoZUtleSA9ICgpPT57XG4gICAgY29uc3QgeyBwYXRobmFtZSwgc2VhcmNoIH0gPSBsb2NhdGlvbjtcbiAgICByZXR1cm4gcGF0aG5hbWUgKyBzZWFyY2g7XG59O1xuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xubGV0IGluaXRpYWxTZXJ2ZXJEYXRhQnVmZmVyID0gdW5kZWZpbmVkO1xubGV0IGluaXRpYWxTZXJ2ZXJEYXRhV3JpdGVyID0gdW5kZWZpbmVkO1xubGV0IGluaXRpYWxTZXJ2ZXJEYXRhTG9hZGVkID0gZmFsc2U7XG5sZXQgaW5pdGlhbFNlcnZlckRhdGFGbHVzaGVkID0gZmFsc2U7XG5sZXQgaW5pdGlhbEZvcm1TdGF0ZURhdGEgPSBudWxsO1xuZnVuY3Rpb24gbmV4dFNlcnZlckRhdGFDYWxsYmFjayhzZWcpIHtcbiAgICBpZiAoc2VnWzBdID09PSAwKSB7XG4gICAgICAgIGluaXRpYWxTZXJ2ZXJEYXRhQnVmZmVyID0gW107XG4gICAgfSBlbHNlIGlmIChzZWdbMF0gPT09IDEpIHtcbiAgICAgICAgaWYgKCFpbml0aWFsU2VydmVyRGF0YUJ1ZmZlcikgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBzZXJ2ZXIgZGF0YTogbWlzc2luZyBib290c3RyYXAgc2NyaXB0LlwiKTtcbiAgICAgICAgaWYgKGluaXRpYWxTZXJ2ZXJEYXRhV3JpdGVyKSB7XG4gICAgICAgICAgICBpbml0aWFsU2VydmVyRGF0YVdyaXRlci5lbnF1ZXVlKGVuY29kZXIuZW5jb2RlKHNlZ1sxXSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5pdGlhbFNlcnZlckRhdGFCdWZmZXIucHVzaChzZWdbMV0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWdbMF0gPT09IDIpIHtcbiAgICAgICAgaW5pdGlhbEZvcm1TdGF0ZURhdGEgPSBzZWdbMV07XG4gICAgfVxufVxuLy8gVGhlcmUgbWlnaHQgYmUgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gYG5leHRTZXJ2ZXJEYXRhUmVnaXN0ZXJXcml0ZXJgIGFuZFxuLy8gYERPTUNvbnRlbnRMb2FkZWRgLiBUaGUgZm9ybWVyIHdpbGwgYmUgY2FsbGVkIHdoZW4gUmVhY3Qgc3RhcnRzIHRvIGh5ZHJhdGVcbi8vIHRoZSByb290LCB0aGUgbGF0dGVyIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIERPTSBpcyBmdWxseSBsb2FkZWQuXG4vLyBGb3Igc3RyZWFtaW5nLCB0aGUgZm9ybWVyIGlzIGNhbGxlZCBmaXJzdCBkdWUgdG8gcGFydGlhbCBoeWRyYXRpb24uXG4vLyBGb3Igbm9uLXN0cmVhbWluZywgdGhlIGxhdHRlciBjYW4gYmUgY2FsbGVkIGZpcnN0LlxuLy8gSGVuY2UsIHdlIHVzZSB0d28gdmFyaWFibGVzIGBpbml0aWFsU2VydmVyRGF0YUxvYWRlZGAgYW5kXG4vLyBgaW5pdGlhbFNlcnZlckRhdGFGbHVzaGVkYCB0byBtYWtlIHN1cmUgdGhlIHdyaXRlciB3aWxsIGJlIGNsb3NlZCBhbmRcbi8vIGBpbml0aWFsU2VydmVyRGF0YUJ1ZmZlcmAgd2lsbCBiZSBjbGVhcmVkIGluIHRoZSByaWdodCB0aW1lLlxuZnVuY3Rpb24gbmV4dFNlcnZlckRhdGFSZWdpc3RlcldyaXRlcihjdHIpIHtcbiAgICBpZiAoaW5pdGlhbFNlcnZlckRhdGFCdWZmZXIpIHtcbiAgICAgICAgaW5pdGlhbFNlcnZlckRhdGFCdWZmZXIuZm9yRWFjaCgodmFsKT0+e1xuICAgICAgICAgICAgY3RyLmVucXVldWUoZW5jb2Rlci5lbmNvZGUodmFsKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW5pdGlhbFNlcnZlckRhdGFMb2FkZWQgJiYgIWluaXRpYWxTZXJ2ZXJEYXRhRmx1c2hlZCkge1xuICAgICAgICAgICAgY3RyLmNsb3NlKCk7XG4gICAgICAgICAgICBpbml0aWFsU2VydmVyRGF0YUZsdXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgaW5pdGlhbFNlcnZlckRhdGFCdWZmZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5pdGlhbFNlcnZlckRhdGFXcml0ZXIgPSBjdHI7XG59XG4vLyBXaGVuIGBET01Db250ZW50TG9hZGVkYCwgd2UgY2FuIGNsb3NlIGFsbCBwZW5kaW5nIHdyaXRlcnMgdG8gZmluaXNoIGh5ZHJhdGlvbi5cbmNvbnN0IERPTUNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoaW5pdGlhbFNlcnZlckRhdGFXcml0ZXIgJiYgIWluaXRpYWxTZXJ2ZXJEYXRhRmx1c2hlZCkge1xuICAgICAgICBpbml0aWFsU2VydmVyRGF0YVdyaXRlci5jbG9zZSgpO1xuICAgICAgICBpbml0aWFsU2VydmVyRGF0YUZsdXNoZWQgPSB0cnVlO1xuICAgICAgICBpbml0aWFsU2VydmVyRGF0YUJ1ZmZlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaW5pdGlhbFNlcnZlckRhdGFMb2FkZWQgPSB0cnVlO1xufTtcbi8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgRE9NIGlzIGFscmVhZHkgbG9hZGVkLlxuaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwibG9hZGluZ1wiKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgRE9NQ29udGVudExvYWRlZCwgZmFsc2UpO1xufSBlbHNlIHtcbiAgICBET01Db250ZW50TG9hZGVkKCk7XG59XG5jb25zdCBuZXh0U2VydmVyRGF0YUxvYWRpbmdHbG9iYWwgPSBzZWxmLl9fbmV4dF9mID0gc2VsZi5fX25leHRfZiB8fCBbXTtcbm5leHRTZXJ2ZXJEYXRhTG9hZGluZ0dsb2JhbC5mb3JFYWNoKG5leHRTZXJ2ZXJEYXRhQ2FsbGJhY2spO1xubmV4dFNlcnZlckRhdGFMb2FkaW5nR2xvYmFsLnB1c2ggPSBuZXh0U2VydmVyRGF0YUNhbGxiYWNrO1xuZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2VDYWNoZSgpIHtcbiAgICByZXR1cm4gbmV3IE1hcCgpO1xufVxuY29uc3QgcnNjQ2FjaGUgPSBjcmVhdGVSZXNwb25zZUNhY2hlKCk7XG5mdW5jdGlvbiB1c2VJbml0aWFsU2VydmVyUmVzcG9uc2UoY2FjaGVLZXkpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IHJzY0NhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKHJlc3BvbnNlKSByZXR1cm4gcmVzcG9uc2U7XG4gICAgY29uc3QgcmVhZGFibGUgPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgICBzdGFydCAoY29udHJvbGxlcikge1xuICAgICAgICAgICAgbmV4dFNlcnZlckRhdGFSZWdpc3RlcldyaXRlcihjb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5ld1Jlc3BvbnNlID0gKDAsIF9jbGllbnQxLmNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSkocmVhZGFibGUsIHtcbiAgICAgICAgY2FsbFNlcnZlcjogX2FwcGNhbGxzZXJ2ZXIuY2FsbFNlcnZlclxuICAgIH0pO1xuICAgIHJzY0NhY2hlLnNldChjYWNoZUtleSwgbmV3UmVzcG9uc2UpO1xuICAgIHJldHVybiBuZXdSZXNwb25zZTtcbn1cbmZ1bmN0aW9uIFNlcnZlclJvb3QocGFyYW0pIHtcbiAgICBsZXQgeyBjYWNoZUtleSB9ID0gcGFyYW07XG4gICAgX3JlYWN0LmRlZmF1bHQudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIHJzY0NhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB1c2VJbml0aWFsU2VydmVyUmVzcG9uc2UoY2FjaGVLZXkpO1xuICAgIGNvbnN0IHJvb3QgPSAoMCwgX3JlYWN0LnVzZSkocmVzcG9uc2UpO1xuICAgIHJldHVybiByb290O1xufVxuY29uc3QgU3RyaWN0TW9kZUlmRW5hYmxlZCA9IHByb2Nlc3MuZW52Ll9fTkVYVF9TVFJJQ1RfTU9ERV9BUFAgPyBfcmVhY3QuZGVmYXVsdC5TdHJpY3RNb2RlIDogX3JlYWN0LmRlZmF1bHQuRnJhZ21lbnQ7XG5mdW5jdGlvbiBSb290KHBhcmFtKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4gfSA9IHBhcmFtO1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQU5BTFlUSUNTX0lEKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgICAgICBfcmVhY3QuZGVmYXVsdC51c2VFZmZlY3QoKCk9PntcbiAgICAgICAgICAgIHJlcXVpcmUoXCIuL3BlcmZvcm1hbmNlLXJlbGF5ZXItYXBwXCIpKCk7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgICAgIF9yZWFjdC5kZWZhdWx0LnVzZUVmZmVjdCgoKT0+e1xuICAgICAgICAgICAgd2luZG93Ll9fTkVYVF9IWURSQVRFRCA9IHRydWU7XG4gICAgICAgICAgICBpZiAod2luZG93Ll9fTkVYVF9IWURSQVRFRF9DQikge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5fX05FWFRfSFlEUkFURURfQ0IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW47XG59XG5mdW5jdGlvbiBSU0NDb21wb25lbnQocHJvcHMpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShTZXJ2ZXJSb290LCB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICBjYWNoZUtleTogZ2V0Q2FjaGVLZXkoKVxuICAgIH0pO1xufVxuZnVuY3Rpb24gaHlkcmF0ZSgpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHJvb3RMYXlvdXRNaXNzaW5nVGFnc0Vycm9yID0gc2VsZi5fX25leHRfcm9vdF9sYXlvdXRfbWlzc2luZ190YWdzX2Vycm9yO1xuICAgICAgICBjb25zdCBIb3RSZWxvYWQgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2hvdC1yZWxvYWRlci1jbGllbnRcIikuZGVmYXVsdDtcbiAgICAgICAgLy8gRG9uJ3QgdHJ5IHRvIGh5ZHJhdGUgaWYgcm9vdCBsYXlvdXQgaXMgbWlzc2luZyByZXF1aXJlZCB0YWdzLCByZW5kZXIgZXJyb3IgaW5zdGVhZFxuICAgICAgICBpZiAocm9vdExheW91dE1pc3NpbmdUYWdzRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWN0Um9vdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyZWFjdFJvb3RFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHJlYWN0Um9vdCA9IF9jbGllbnQuZGVmYXVsdC5jcmVhdGVSb290KHJlYWN0Um9vdEVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICBvblJlY292ZXJhYmxlRXJyb3I6IF9vbnJlY292ZXJhYmxlZXJyb3IuZGVmYXVsdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZWFjdFJvb3QucmVuZGVyKC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lLkdsb2JhbExheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICBidWlsZElkOiBcImRldmVsb3BtZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIHRyZWU6IHJvb3RMYXlvdXRNaXNzaW5nVGFnc0Vycm9yLnRyZWUsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZUJ5U2VydmVyUmVzcG9uc2U6ICgpPT57fSxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNBbmRTY3JvbGxSZWY6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlIYXNoQ2hhbmdlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hGcmFnbWVudDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRQYXRoczogW11cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFVybDogbnVsbFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoSG90UmVsb2FkLCB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2V0UHJlZml4OiByb290TGF5b3V0TWlzc2luZ1RhZ3NFcnJvci5hc3NldFByZWZpeFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYWN0aW9uUXVldWUgPSAoMCwgX2FjdGlvbnF1ZXVlLmNyZWF0ZU11dGFibGVBY3Rpb25RdWV1ZSkoKTtcbiAgICBjb25zdCByZWFjdEVsID0gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShTdHJpY3RNb2RlSWZFbmFibGVkLCB7XG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9oZWFkbWFuYWdlcmNvbnRleHRzaGFyZWRydW50aW1lLkhlYWRNYW5hZ2VyQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBhcHBEaXI6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfYWN0aW9ucXVldWUuQWN0aW9uUXVldWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGFjdGlvblF1ZXVlLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFJvb3QsIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoUlNDQ29tcG9uZW50LCB7fSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9KTtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBvblJlY292ZXJhYmxlRXJyb3I6IF9vbnJlY292ZXJhYmxlZXJyb3IuZGVmYXVsdFxuICAgIH07XG4gICAgY29uc3QgaXNFcnJvciA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5pZCA9PT0gXCJfX25leHRfZXJyb3JfX1wiO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgLy8gUGF0Y2ggY29uc29sZS5lcnJvciB0byBjb2xsZWN0IGluZm9ybWF0aW9uIGFib3V0IGh5ZHJhdGlvbiBlcnJvcnNcbiAgICAgICAgY29uc3QgcGF0Y2hDb25zb2xlRXJyb3IgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvaHlkcmF0aW9uLWVycm9yLWluZm9cIikucGF0Y2hDb25zb2xlRXJyb3I7XG4gICAgICAgIGlmICghaXNFcnJvcikge1xuICAgICAgICAgICAgcGF0Y2hDb25zb2xlRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNFcnJvcikge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBpZiBhbiBlcnJvciBpcyB0aHJvd24gd2hpbGUgcmVuZGVyaW5nIGFuIFJTQyBzdHJlYW0sIHRoaXMgd2lsbCBjYXRjaCBpdCBpbiBkZXZcbiAgICAgICAgICAgIC8vIGFuZCBzaG93IHRoZSBlcnJvciBvdmVybGF5XG4gICAgICAgICAgICBjb25zdCBSZWFjdERldk92ZXJsYXkgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL1JlYWN0RGV2T3ZlcmxheVwiKS5kZWZhdWx0O1xuICAgICAgICAgICAgY29uc3QgSU5JVElBTF9PVkVSTEFZX1NUQVRFID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9lcnJvci1vdmVybGF5LXJlZHVjZXJcIikuSU5JVElBTF9PVkVSTEFZX1NUQVRFO1xuICAgICAgICAgICAgY29uc3QgZ2V0U29ja2V0VXJsID0gcmVxdWlyZShcIi4vY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9oZWxwZXJzL2dldC1zb2NrZXQtdXJsXCIpLmdldFNvY2tldFVybDtcbiAgICAgICAgICAgIGxldCBlcnJvclRyZWUgPSAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFJlYWN0RGV2T3ZlcmxheSwge1xuICAgICAgICAgICAgICAgIHN0YXRlOiBJTklUSUFMX09WRVJMQVlfU1RBVEUsXG4gICAgICAgICAgICAgICAgb25SZWFjdEVycm9yOiAoKT0+e30sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHJlYWN0RWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgc29ja2V0VXJsID0gZ2V0U29ja2V0VXJsKHByb2Nlc3MuZW52Ll9fTkVYVF9BU1NFVF9QUkVGSVggfHwgXCJcIik7XG4gICAgICAgICAgICBjb25zdCBzb2NrZXQgPSBuZXcgd2luZG93LldlYlNvY2tldChcIlwiICsgc29ja2V0VXJsICsgXCIvX25leHQvd2VicGFjay1obXJcIik7XG4gICAgICAgICAgICAvLyBhZGQgbWluaW1hbCBcImhvdCByZWxvYWRcIiBzdXBwb3J0IGZvciBSU0MgZXJyb3JzXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50KT0+e1xuICAgICAgICAgICAgICAgIGxldCBvYmo7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgIGlmICghb2JqIHx8ICEoXCJhY3Rpb25cIiBpbiBvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9iai5hY3Rpb24gPT09IFwic2VydmVyQ29tcG9uZW50Q2hhbmdlc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc29ja2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgX2NsaWVudC5kZWZhdWx0LmNyZWF0ZVJvb3QoYXBwRWxlbWVudCwgb3B0aW9ucykucmVuZGVyKGVycm9yVHJlZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfY2xpZW50LmRlZmF1bHQuY3JlYXRlUm9vdChhcHBFbGVtZW50LCBvcHRpb25zKS5yZW5kZXIocmVhY3RFbCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBfcmVhY3QuZGVmYXVsdC5zdGFydFRyYW5zaXRpb24oKCk9Pl9jbGllbnQuZGVmYXVsdC5oeWRyYXRlUm9vdChhcHBFbGVtZW50LCByZWFjdEVsLCB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBmb3JtU3RhdGU6IGluaXRpYWxGb3JtU3RhdGVEYXRhXG4gICAgICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8vIFRPRE8tQVBQOiBSZW1vdmUgdGhpcyBsb2dpYyB3aGVuIEZsb2F0IGhhcyBHQyBidWlsdC1pbiBpbiBkZXZlbG9wbWVudC5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHsgbGlua0djIH0gPSByZXF1aXJlKFwiLi9hcHAtbGluay1nY1wiKTtcbiAgICAgICAgbGlua0djKCk7XG4gICAgfVxufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtaW5kZXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImh5ZHJhdGUiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsIl9qc3hydW50aW1lIiwiX2NsaWVudCIsIl8iLCJfcmVhY3QiLCJfY2xpZW50MSIsIl9oZWFkbWFuYWdlcmNvbnRleHRzaGFyZWRydW50aW1lIiwiX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lIiwiX29ucmVjb3ZlcmFibGVlcnJvciIsIl9hcHBjYWxsc2VydmVyIiwiX2lzbmV4dHJvdXRlcmVycm9yIiwiX2FjdGlvbnF1ZXVlIiwib3JpZ0NvbnNvbGVFcnJvciIsIndpbmRvdyIsImNvbnNvbGUiLCJlcnJvciIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiaXNOZXh0Um91dGVyRXJyb3IiLCJhcHBseSIsImFkZEV2ZW50TGlzdGVuZXIiLCJldiIsInByZXZlbnREZWZhdWx0IiwiYXBwRWxlbWVudCIsImRvY3VtZW50IiwiZ2V0Q2FjaGVLZXkiLCJwYXRobmFtZSIsInNlYXJjaCIsImxvY2F0aW9uIiwiZW5jb2RlciIsIlRleHRFbmNvZGVyIiwiaW5pdGlhbFNlcnZlckRhdGFCdWZmZXIiLCJ1bmRlZmluZWQiLCJpbml0aWFsU2VydmVyRGF0YVdyaXRlciIsImluaXRpYWxTZXJ2ZXJEYXRhTG9hZGVkIiwiaW5pdGlhbFNlcnZlckRhdGFGbHVzaGVkIiwiaW5pdGlhbEZvcm1TdGF0ZURhdGEiLCJuZXh0U2VydmVyRGF0YUNhbGxiYWNrIiwic2VnIiwiRXJyb3IiLCJlbnF1ZXVlIiwiZW5jb2RlIiwicHVzaCIsIm5leHRTZXJ2ZXJEYXRhUmVnaXN0ZXJXcml0ZXIiLCJjdHIiLCJmb3JFYWNoIiwidmFsIiwiY2xvc2UiLCJET01Db250ZW50TG9hZGVkIiwicmVhZHlTdGF0ZSIsIm5leHRTZXJ2ZXJEYXRhTG9hZGluZ0dsb2JhbCIsInNlbGYiLCJfX25leHRfZiIsImNyZWF0ZVJlc3BvbnNlQ2FjaGUiLCJNYXAiLCJyc2NDYWNoZSIsInVzZUluaXRpYWxTZXJ2ZXJSZXNwb25zZSIsImNhY2hlS2V5IiwicmVzcG9uc2UiLCJyZWFkYWJsZSIsIlJlYWRhYmxlU3RyZWFtIiwic3RhcnQiLCJjb250cm9sbGVyIiwibmV3UmVzcG9uc2UiLCJjcmVhdGVGcm9tUmVhZGFibGVTdHJlYW0iLCJjYWxsU2VydmVyIiwic2V0IiwiU2VydmVyUm9vdCIsInBhcmFtIiwiZGVmYXVsdCIsInVzZUVmZmVjdCIsImRlbGV0ZSIsInJvb3QiLCJ1c2UiLCJTdHJpY3RNb2RlSWZFbmFibGVkIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9TVFJJQ1RfTU9ERV9BUFAiLCJTdHJpY3RNb2RlIiwiRnJhZ21lbnQiLCJSb290IiwiY2hpbGRyZW4iLCJfX05FWFRfQU5BTFlUSUNTX0lEIiwiX19ORVhUX1RFU1RfTU9ERSIsIl9fTkVYVF9IWURSQVRFRCIsIl9fTkVYVF9IWURSQVRFRF9DQiIsIlJTQ0NvbXBvbmVudCIsInByb3BzIiwianN4Iiwicm9vdExheW91dE1pc3NpbmdUYWdzRXJyb3IiLCJfX25leHRfcm9vdF9sYXlvdXRfbWlzc2luZ190YWdzX2Vycm9yIiwiSG90UmVsb2FkIiwicmVhY3RSb290RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJyZWFjdFJvb3QiLCJjcmVhdGVSb290Iiwib25SZWNvdmVyYWJsZUVycm9yIiwicmVuZGVyIiwiR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCIsIlByb3ZpZGVyIiwiYnVpbGRJZCIsInRyZWUiLCJjaGFuZ2VCeVNlcnZlclJlc3BvbnNlIiwiZm9jdXNBbmRTY3JvbGxSZWYiLCJvbmx5SGFzaENoYW5nZSIsImhhc2hGcmFnbWVudCIsInNlZ21lbnRQYXRocyIsIm5leHRVcmwiLCJhc3NldFByZWZpeCIsImFjdGlvblF1ZXVlIiwiY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlIiwicmVhY3RFbCIsIkhlYWRNYW5hZ2VyQ29udGV4dCIsImFwcERpciIsIkFjdGlvblF1ZXVlQ29udGV4dCIsIm9wdGlvbnMiLCJpc0Vycm9yIiwiZG9jdW1lbnRFbGVtZW50IiwiaWQiLCJwYXRjaENvbnNvbGVFcnJvciIsIlJlYWN0RGV2T3ZlcmxheSIsIklOSVRJQUxfT1ZFUkxBWV9TVEFURSIsImdldFNvY2tldFVybCIsImVycm9yVHJlZSIsInN0YXRlIiwib25SZWFjdEVycm9yIiwic29ja2V0VXJsIiwiX19ORVhUX0FTU0VUX1BSRUZJWCIsInNvY2tldCIsIldlYlNvY2tldCIsImhhbmRsZXIiLCJldmVudCIsIm9iaiIsIkpTT04iLCJwYXJzZSIsImRhdGEiLCJlIiwiYWN0aW9uIiwicmVsb2FkIiwic3RhcnRUcmFuc2l0aW9uIiwiaHlkcmF0ZVJvb3QiLCJmb3JtU3RhdGUiLCJsaW5rR2MiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-link-gc.js": +/*!******************************************************!*\ + !*** ./node_modules/next/dist/client/app-link-gc.js ***! + \******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"linkGc\", ({\n enumerable: true,\n get: function() {\n return linkGc;\n }\n}));\nfunction linkGc() {\n // TODO-APP: Remove this logic when Float has GC built-in in development.\n if (true) {\n const callback = (mutationList)=>{\n for (const mutation of mutationList){\n if (mutation.type === \"childList\") {\n for (const node of mutation.addedNodes){\n if (\"tagName\" in node && node.tagName === \"LINK\") {\n var _link_dataset_precedence;\n const link = node;\n if ((_link_dataset_precedence = link.dataset.precedence) == null ? void 0 : _link_dataset_precedence.startsWith(\"next\")) {\n const href = link.getAttribute(\"href\");\n if (href) {\n const [resource, version] = href.split(\"?v=\", 2);\n if (version) {\n const currentOrigin = window.location.origin;\n const allLinks = [\n ...document.querySelectorAll('link[href^=\"' + resource + '\"]'),\n // It's possible that the resource is a full URL or only pathname,\n // so we need to remove the alternative href as well.\n ...document.querySelectorAll('link[href^=\"' + (resource.startsWith(currentOrigin) ? resource.slice(currentOrigin.length) : currentOrigin + resource) + '\"]')\n ];\n for (const otherLink of allLinks){\n var _otherLink_dataset_precedence;\n if ((_otherLink_dataset_precedence = otherLink.dataset.precedence) == null ? void 0 : _otherLink_dataset_precedence.startsWith(\"next\")) {\n const otherHref = otherLink.getAttribute(\"href\");\n if (otherHref) {\n const [, otherVersion] = otherHref.split(\"?v=\", 2);\n if (!otherVersion || +otherVersion < +version) {\n // Delay the removal of the stylesheet to avoid FOUC\n // caused by `@font-face` rules, as they seem to be\n // a couple of ticks delayed between the old and new\n // styles being swapped even if the font is cached.\n setTimeout(()=>{\n otherLink.remove();\n }, 5);\n const preloadLink = document.querySelector('link[rel=\"preload\"][as=\"style\"][href=\"' + otherHref + '\"]');\n if (preloadLink) {\n preloadLink.remove();\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n };\n // Create an observer instance linked to the callback function\n const observer = new MutationObserver(callback);\n observer.observe(document.head, {\n childList: true\n });\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-link-gc.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1saW5rLWdjLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwwQ0FBeUM7SUFDckNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixTQUFTQTtJQUNMLHlFQUF5RTtJQUN6RSxJQUFJQyxJQUFxQyxFQUFFO1FBQ3ZDLE1BQU1DLFdBQVcsQ0FBQ0M7WUFDZCxLQUFLLE1BQU1DLFlBQVlELGFBQWE7Z0JBQ2hDLElBQUlDLFNBQVNDLElBQUksS0FBSyxhQUFhO29CQUMvQixLQUFLLE1BQU1DLFFBQVFGLFNBQVNHLFVBQVUsQ0FBQzt3QkFDbkMsSUFBSSxhQUFhRCxRQUFRQSxLQUFLRSxPQUFPLEtBQUssUUFBUTs0QkFDOUMsSUFBSUM7NEJBQ0osTUFBTUMsT0FBT0o7NEJBQ2IsSUFBSSxDQUFDRywyQkFBMkJDLEtBQUtDLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLE9BQU8sS0FBSyxJQUFJSCx5QkFBeUJJLFVBQVUsQ0FBQyxTQUFTO2dDQUNySCxNQUFNQyxPQUFPSixLQUFLSyxZQUFZLENBQUM7Z0NBQy9CLElBQUlELE1BQU07b0NBQ04sTUFBTSxDQUFDRSxVQUFVQyxRQUFRLEdBQUdILEtBQUtJLEtBQUssQ0FBQyxPQUFPO29DQUM5QyxJQUFJRCxTQUFTO3dDQUNULE1BQU1FLGdCQUFnQkMsT0FBT0MsUUFBUSxDQUFDQyxNQUFNO3dDQUM1QyxNQUFNQyxXQUFXOytDQUNWQyxTQUFTQyxnQkFBZ0IsQ0FBQyxpQkFBaUJULFdBQVc7NENBQ3pELGtFQUFrRTs0Q0FDbEUscURBQXFEOytDQUNsRFEsU0FBU0MsZ0JBQWdCLENBQUMsaUJBQWtCVCxDQUFBQSxTQUFTSCxVQUFVLENBQUNNLGlCQUFpQkgsU0FBU1UsS0FBSyxDQUFDUCxjQUFjUSxNQUFNLElBQUlSLGdCQUFnQkgsUUFBTyxJQUFLO3lDQUMxSjt3Q0FDRCxLQUFLLE1BQU1ZLGFBQWFMLFNBQVM7NENBQzdCLElBQUlNOzRDQUNKLElBQUksQ0FBQ0EsZ0NBQWdDRCxVQUFVakIsT0FBTyxDQUFDQyxVQUFVLEtBQUssT0FBTyxLQUFLLElBQUlpQiw4QkFBOEJoQixVQUFVLENBQUMsU0FBUztnREFDcEksTUFBTWlCLFlBQVlGLFVBQVViLFlBQVksQ0FBQztnREFDekMsSUFBSWUsV0FBVztvREFDWCxNQUFNLEdBQUdDLGFBQWEsR0FBR0QsVUFBVVosS0FBSyxDQUFDLE9BQU87b0RBQ2hELElBQUksQ0FBQ2EsZ0JBQWdCLENBQUNBLGVBQWUsQ0FBQ2QsU0FBUzt3REFDM0Msb0RBQW9EO3dEQUNwRCxtREFBbUQ7d0RBQ25ELG9EQUFvRDt3REFDcEQsbURBQW1EO3dEQUNuRGUsV0FBVzs0REFDUEosVUFBVUssTUFBTTt3REFDcEIsR0FBRzt3REFDSCxNQUFNQyxjQUFjVixTQUFTVyxhQUFhLENBQUMsMkNBQTJDTCxZQUFZO3dEQUNsRyxJQUFJSSxhQUFhOzREQUNiQSxZQUFZRCxNQUFNO3dEQUN0QjtvREFDSjtnREFDSjs0Q0FDSjt3Q0FDSjtvQ0FDSjtnQ0FDSjs0QkFDSjt3QkFDSjtvQkFDSjtnQkFDSjtZQUNKO1FBQ0o7UUFDQSw4REFBOEQ7UUFDOUQsTUFBTUcsV0FBVyxJQUFJQyxpQkFBaUJuQztRQUN0Q2tDLFNBQVNFLE9BQU8sQ0FBQ2QsU0FBU2UsSUFBSSxFQUFFO1lBQzVCQyxXQUFXO1FBQ2Y7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU81QyxRQUFRNkMsT0FBTyxLQUFLLGNBQWUsT0FBTzdDLFFBQVE2QyxPQUFPLEtBQUssWUFBWTdDLFFBQVE2QyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU83QyxRQUFRNkMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2hELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTZDLE9BQU8sRUFBRSxjQUFjO1FBQUU1QyxPQUFPO0lBQUs7SUFDbkVILE9BQU9pRCxNQUFNLENBQUMvQyxRQUFRNkMsT0FBTyxFQUFFN0M7SUFDL0JnRCxPQUFPaEQsT0FBTyxHQUFHQSxRQUFRNkMsT0FBTztBQUNsQyxFQUVBLHVDQUF1QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9hcHAtbGluay1nYy5qcz85MDQzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGlua0djXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBsaW5rR2M7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBsaW5rR2MoKSB7XG4gICAgLy8gVE9ETy1BUFA6IFJlbW92ZSB0aGlzIGxvZ2ljIHdoZW4gRmxvYXQgaGFzIEdDIGJ1aWx0LWluIGluIGRldmVsb3BtZW50LlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSAobXV0YXRpb25MaXN0KT0+e1xuICAgICAgICAgICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbkxpc3Qpe1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBtdXRhdGlvbi5hZGRlZE5vZGVzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInRhZ05hbWVcIiBpbiBub2RlICYmIG5vZGUudGFnTmFtZSA9PT0gXCJMSU5LXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2xpbmtfZGF0YXNldF9wcmVjZWRlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBub2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX2xpbmtfZGF0YXNldF9wcmVjZWRlbmNlID0gbGluay5kYXRhc2V0LnByZWNlZGVuY2UpID09IG51bGwgPyB2b2lkIDAgOiBfbGlua19kYXRhc2V0X3ByZWNlZGVuY2Uuc3RhcnRzV2l0aChcIm5leHRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaHJlZiA9IGxpbmsuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtyZXNvdXJjZSwgdmVyc2lvbl0gPSBocmVmLnNwbGl0KFwiP3Y9XCIsIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50T3JpZ2luID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxMaW5rcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tocmVmXj1cIicgKyByZXNvdXJjZSArICdcIl0nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSByZXNvdXJjZSBpcyBhIGZ1bGwgVVJMIG9yIG9ubHkgcGF0aG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBhbHRlcm5hdGl2ZSBocmVmIGFzIHdlbGwuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbaHJlZl49XCInICsgKHJlc291cmNlLnN0YXJ0c1dpdGgoY3VycmVudE9yaWdpbikgPyByZXNvdXJjZS5zbGljZShjdXJyZW50T3JpZ2luLmxlbmd0aCkgOiBjdXJyZW50T3JpZ2luICsgcmVzb3VyY2UpICsgJ1wiXScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG90aGVyTGluayBvZiBhbGxMaW5rcyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfb3RoZXJMaW5rX2RhdGFzZXRfcHJlY2VkZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfb3RoZXJMaW5rX2RhdGFzZXRfcHJlY2VkZW5jZSA9IG90aGVyTGluay5kYXRhc2V0LnByZWNlZGVuY2UpID09IG51bGwgPyB2b2lkIDAgOiBfb3RoZXJMaW5rX2RhdGFzZXRfcHJlY2VkZW5jZS5zdGFydHNXaXRoKFwibmV4dFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJIcmVmID0gb3RoZXJMaW5rLmdldEF0dHJpYnV0ZShcImhyZWZcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJIcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWywgb3RoZXJWZXJzaW9uXSA9IG90aGVySHJlZi5zcGxpdChcIj92PVwiLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW90aGVyVmVyc2lvbiB8fCArb3RoZXJWZXJzaW9uIDwgK3ZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsYXkgdGhlIHJlbW92YWwgb2YgdGhlIHN0eWxlc2hlZXQgdG8gYXZvaWQgRk9VQ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXVzZWQgYnkgYEBmb250LWZhY2VgIHJ1bGVzLCBhcyB0aGV5IHNlZW0gdG8gYmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBjb3VwbGUgb2YgdGlja3MgZGVsYXllZCBiZXR3ZWVuIHRoZSBvbGQgYW5kIG5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHlsZXMgYmVpbmcgc3dhcHBlZCBldmVuIGlmIHRoZSBmb250IGlzIGNhY2hlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJMaW5rLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCA1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlbG9hZExpbmsgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdsaW5rW3JlbD1cInByZWxvYWRcIl1bYXM9XCJzdHlsZVwiXVtocmVmPVwiJyArIG90aGVySHJlZiArICdcIl0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWxvYWRMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVsb2FkTGluay5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIG9ic2VydmVyIGluc3RhbmNlIGxpbmtlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjayk7XG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuaGVhZCwge1xuICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLWxpbmstZ2MuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImxpbmtHYyIsInByb2Nlc3MiLCJjYWxsYmFjayIsIm11dGF0aW9uTGlzdCIsIm11dGF0aW9uIiwidHlwZSIsIm5vZGUiLCJhZGRlZE5vZGVzIiwidGFnTmFtZSIsIl9saW5rX2RhdGFzZXRfcHJlY2VkZW5jZSIsImxpbmsiLCJkYXRhc2V0IiwicHJlY2VkZW5jZSIsInN0YXJ0c1dpdGgiLCJocmVmIiwiZ2V0QXR0cmlidXRlIiwicmVzb3VyY2UiLCJ2ZXJzaW9uIiwic3BsaXQiLCJjdXJyZW50T3JpZ2luIiwid2luZG93IiwibG9jYXRpb24iLCJvcmlnaW4iLCJhbGxMaW5rcyIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsInNsaWNlIiwibGVuZ3RoIiwib3RoZXJMaW5rIiwiX290aGVyTGlua19kYXRhc2V0X3ByZWNlZGVuY2UiLCJvdGhlckhyZWYiLCJvdGhlclZlcnNpb24iLCJzZXRUaW1lb3V0IiwicmVtb3ZlIiwicHJlbG9hZExpbmsiLCJxdWVyeVNlbGVjdG9yIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsImhlYWQiLCJjaGlsZExpc3QiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-link-gc.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-next-dev.js": +/*!*******************************************************!*\ + !*** ./node_modules/next/dist/client/app-next-dev.js ***! + \*******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// TODO-APP: hydration warning\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n__webpack_require__(/*! ./app-webpack */ \"(app-pages-browser)/./node_modules/next/dist/client/app-webpack.js\");\nconst _appbootstrap = __webpack_require__(/*! ./app-bootstrap */ \"(app-pages-browser)/./node_modules/next/dist/client/app-bootstrap.js\");\n(0, _appbootstrap.appBootstrap)(()=>{\n const { hydrate } = __webpack_require__(/*! ./app-index */ \"(app-pages-browser)/./node_modules/next/dist/client/app-index.js\");\n hydrate();\n}) // TODO-APP: build indicator\n;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-next-dev.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1uZXh0LWRldi5qcyIsIm1hcHBpbmdzIjoiQUFBQSw4QkFBOEI7QUFDakI7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZDLG1CQUFPQSxDQUFDLHlGQUFlO0FBQ3ZCLE1BQU1DLGdCQUFnQkQsbUJBQU9BLENBQUMsNkZBQWlCO0FBQzlDLElBQUdDLGNBQWNDLFlBQVksRUFBRTtJQUM1QixNQUFNLEVBQUVDLE9BQU8sRUFBRSxHQUFHSCxtQkFBT0EsQ0FBQyxxRkFBYTtJQUN6Q0c7QUFDSixHQUFHLDRCQUE0Qjs7QUFHL0IsSUFBSSxDQUFDLE9BQU9MLFFBQVFNLE9BQU8sS0FBSyxjQUFlLE9BQU9OLFFBQVFNLE9BQU8sS0FBSyxZQUFZTixRQUFRTSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9OLFFBQVFNLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktULE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUU0sT0FBTyxFQUFFLGNBQWM7UUFBRUwsT0FBTztJQUFLO0lBQ25FSCxPQUFPVSxNQUFNLENBQUNSLFFBQVFNLE9BQU8sRUFBRU47SUFDL0JTLE9BQU9ULE9BQU8sR0FBR0EsUUFBUU0sT0FBTztBQUNsQyxFQUVBLHdDQUF3QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9hcHAtbmV4dC1kZXYuanM/MWM1OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPLUFQUDogaHlkcmF0aW9uIHdhcm5pbmdcblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xucmVxdWlyZShcIi4vYXBwLXdlYnBhY2tcIik7XG5jb25zdCBfYXBwYm9vdHN0cmFwID0gcmVxdWlyZShcIi4vYXBwLWJvb3RzdHJhcFwiKTtcbigwLCBfYXBwYm9vdHN0cmFwLmFwcEJvb3RzdHJhcCkoKCk9PntcbiAgICBjb25zdCB7IGh5ZHJhdGUgfSA9IHJlcXVpcmUoXCIuL2FwcC1pbmRleFwiKTtcbiAgICBoeWRyYXRlKCk7XG59KSAvLyBUT0RPLUFQUDogYnVpbGQgaW5kaWNhdG9yXG47XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC1uZXh0LWRldi5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJyZXF1aXJlIiwiX2FwcGJvb3RzdHJhcCIsImFwcEJvb3RzdHJhcCIsImh5ZHJhdGUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-next-dev.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-webpack.js": +/*!******************************************************!*\ + !*** ./node_modules/next/dist/client/app-webpack.js ***! + \******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// Override chunk URL mapping in the webpack runtime\n// https://github.com/webpack/webpack/blob/2738eebc7880835d88c727d364ad37f3ec557593/lib/RuntimeGlobals.js#L204\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"(app-pages-browser)/./node_modules/next/dist/build/deployment-id.js\");\n// If we have a deployment ID, we need to append it to the webpack chunk names\n// I am keeping the process check explicit so this can be statically optimized\nif (false) {} else {\n // eslint-disable-next-line no-undef\n const getChunkScriptFilename = __webpack_require__.u;\n // eslint-disable-next-line no-undef\n __webpack_require__.u = function() // filename path.\n {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n return encodeURI(getChunkScriptFilename(...args));\n };\n// We don't need to override __webpack_require__.k because we don't modify\n// the css chunk name when not using deployment id suffixes\n// WE don't need to override __webpack_require__.miniCssF because we don't modify\n// the mini css chunk name when not using deployment id suffixes\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-webpack.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC13ZWJwYWNrLmpzIiwibWFwcGluZ3MiOiJBQUFBLG9EQUFvRDtBQUNwRCw4R0FBOEc7QUFDakc7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsZ0JBQWdCQyxtQkFBT0EsQ0FBQyxtR0FBd0I7QUFDdEQsOEVBQThFO0FBQzlFLDhFQUE4RTtBQUM5RSxJQUFJQyxLQUE4QixFQUFFLEVBK0JuQyxNQUFNO0lBQ0gsb0NBQW9DO0lBQ3BDLE1BQU1LLHlCQUF5QkMsbUJBQW1CQSxDQUFDQyxDQUFDO0lBQ3BELG9DQUFvQztJQUNwQ0QsbUJBQW1CQSxDQUFDQyxDQUFDLEdBQUcsV0FDeEIsaUJBQWlCOztRQUViLElBQUksSUFBSUMsT0FBT0MsVUFBVUMsTUFBTSxFQUFFQyxPQUFPLElBQUlDLE1BQU1KLE9BQU9LLE9BQU8sR0FBR0EsT0FBT0wsTUFBTUssT0FBTztZQUNuRkYsSUFBSSxDQUFDRSxLQUFLLEdBQUdKLFNBQVMsQ0FBQ0ksS0FBSztRQUNoQztRQUNBLE9BQU9DLFVBQVVULDBCQUEwQk07SUFDL0M7QUFDSiwwRUFBMEU7QUFDMUUsMkRBQTJEO0FBQzNELGlGQUFpRjtBQUNqRixnRUFBZ0U7QUFDaEU7QUFFQSxJQUFJLENBQUMsT0FBT2YsUUFBUXVCLE9BQU8sS0FBSyxjQUFlLE9BQU92QixRQUFRdUIsT0FBTyxLQUFLLFlBQVl2QixRQUFRdUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPdkIsUUFBUXVCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcksxQixPQUFPQyxjQUFjLENBQUNDLFFBQVF1QixPQUFPLEVBQUUsY0FBYztRQUFFdEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPMkIsTUFBTSxDQUFDekIsUUFBUXVCLE9BQU8sRUFBRXZCO0lBQy9CMEIsT0FBTzFCLE9BQU8sR0FBR0EsUUFBUXVCLE9BQU87QUFDbEMsRUFFQSx1Q0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLXdlYnBhY2suanM/YjYxZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBPdmVycmlkZSBjaHVuayBVUkwgbWFwcGluZyBpbiB0aGUgd2VicGFjayBydW50aW1lXG4vLyBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrL2Jsb2IvMjczOGVlYmM3ODgwODM1ZDg4YzcyN2QzNjRhZDM3ZjNlYzU1NzU5My9saWIvUnVudGltZUdsb2JhbHMuanMjTDIwNFxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5jb25zdCBfZGVwbG95bWVudGlkID0gcmVxdWlyZShcIi4uL2J1aWxkL2RlcGxveW1lbnQtaWRcIik7XG4vLyBJZiB3ZSBoYXZlIGEgZGVwbG95bWVudCBJRCwgd2UgbmVlZCB0byBhcHBlbmQgaXQgdG8gdGhlIHdlYnBhY2sgY2h1bmsgbmFtZXNcbi8vIEkgYW0ga2VlcGluZyB0aGUgcHJvY2VzcyBjaGVjayBleHBsaWNpdCBzbyB0aGlzIGNhbiBiZSBzdGF0aWNhbGx5IG9wdGltaXplZFxuaWYgKHByb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRCkge1xuICAgIGNvbnN0IHN1ZmZpeCA9ICgwLCBfZGVwbG95bWVudGlkLmdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZykoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBjb25zdCBnZXRDaHVua1NjcmlwdEZpbGVuYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXy51O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIF9fd2VicGFja19yZXF1aXJlX18udSA9IGZ1bmN0aW9uKCkgLy8gV2UgZW5vZGUgdGhlIGNodW5rIGZpbGVuYW1lIGJlY2F1c2Ugb3VyIHN0YXRpYyBzZXJ2ZXIgbWF0Y2hlcyBhZ2FpbnN0IGFuZCBlbmNvZGVkXG4gICAgLy8gZmlsZW5hbWUgcGF0aC5cbiAgICB7XG4gICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVuY29kZVVSSShnZXRDaHVua1NjcmlwdEZpbGVuYW1lKC4uLmFyZ3MpICsgc3VmZml4KTtcbiAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIGNvbnN0IGdldENodW5rQ3NzRmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLms7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgX193ZWJwYWNrX3JlcXVpcmVfXy5rID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldENodW5rQ3NzRmlsZW5hbWUoLi4uYXJncykgKyBzdWZmaXg7XG4gICAgfTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBjb25zdCBnZXRNaW5pQ3NzRmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1pbmlDc3NGO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIF9fd2VicGFja19yZXF1aXJlX18ubWluaUNzc0YgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0TWluaUNzc0ZpbGVuYW1lKC4uLmFyZ3MpICsgc3VmZml4O1xuICAgIH07XG59IGVsc2Uge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIGNvbnN0IGdldENodW5rU2NyaXB0RmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLnU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gZnVuY3Rpb24oKSAvLyBXZSBlbm9kZSB0aGUgY2h1bmsgZmlsZW5hbWUgYmVjYXVzZSBvdXIgc3RhdGljIHNlcnZlciBtYXRjaGVzIGFnYWluc3QgYW5kIGVuY29kZWRcbiAgICAvLyBmaWxlbmFtZSBwYXRoLlxuICAgIHtcbiAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW5jb2RlVVJJKGdldENodW5rU2NyaXB0RmlsZW5hbWUoLi4uYXJncykpO1xuICAgIH07XG4vLyBXZSBkb24ndCBuZWVkIHRvIG92ZXJyaWRlIF9fd2VicGFja19yZXF1aXJlX18uayBiZWNhdXNlIHdlIGRvbid0IG1vZGlmeVxuLy8gdGhlIGNzcyBjaHVuayBuYW1lIHdoZW4gbm90IHVzaW5nIGRlcGxveW1lbnQgaWQgc3VmZml4ZXNcbi8vIFdFIGRvbid0IG5lZWQgdG8gb3ZlcnJpZGUgX193ZWJwYWNrX3JlcXVpcmVfXy5taW5pQ3NzRiBiZWNhdXNlIHdlIGRvbid0IG1vZGlmeVxuLy8gdGhlIG1pbmkgY3NzIGNodW5rIG5hbWUgd2hlbiBub3QgdXNpbmcgZGVwbG95bWVudCBpZCBzdWZmaXhlc1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtd2VicGFjay5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJfZGVwbG95bWVudGlkIiwicmVxdWlyZSIsInByb2Nlc3MiLCJlbnYiLCJORVhUX0RFUExPWU1FTlRfSUQiLCJzdWZmaXgiLCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmciLCJnZXRDaHVua1NjcmlwdEZpbGVuYW1lIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsInUiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImVuY29kZVVSSSIsImdldENodW5rQ3NzRmlsZW5hbWUiLCJrIiwiZ2V0TWluaUNzc0ZpbGVuYW1lIiwibWluaUNzc0YiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-webpack.js\n")); + +/***/ }), + +/***/ "(shared)/./node_modules/next/dist/client/components/action-async-storage.external.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/action-async-storage.external.js ***! + \***********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"actionAsyncStorage\", ({\n enumerable: true,\n get: function() {\n return actionAsyncStorage;\n }\n}));\nconst _asynclocalstorage = __webpack_require__(/*! ./async-local-storage */ \"(shared)/./node_modules/next/dist/client/components/async-local-storage.js\");\nconst actionAsyncStorage = (0, _asynclocalstorage.createAsyncLocalStorage)();\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=action-async-storage.external.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNoYXJlZCkvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2FjdGlvbi1hc3luYy1zdG9yYWdlLmV4dGVybmFsLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxzREFBcUQ7SUFDakRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxxQkFBcUJDLG1CQUFPQSxDQUFDLHlHQUF1QjtBQUMxRCxNQUFNRixxQkFBcUIsQ0FBQyxHQUFHQyxtQkFBbUJFLHVCQUF1QjtBQUV6RSxJQUFJLENBQUMsT0FBT1AsUUFBUVEsT0FBTyxLQUFLLGNBQWUsT0FBT1IsUUFBUVEsT0FBTyxLQUFLLFlBQVlSLFFBQVFRLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1IsUUFBUVEsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS1gsT0FBT0MsY0FBYyxDQUFDQyxRQUFRUSxPQUFPLEVBQUUsY0FBYztRQUFFUCxPQUFPO0lBQUs7SUFDbkVILE9BQU9ZLE1BQU0sQ0FBQ1YsUUFBUVEsT0FBTyxFQUFFUjtJQUMvQlcsT0FBT1gsT0FBTyxHQUFHQSxRQUFRUSxPQUFPO0FBQ2xDLEVBRUEseURBQXlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYWN0aW9uLWFzeW5jLXN0b3JhZ2UuZXh0ZXJuYWwuanM/Y2Q1YiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjdGlvbkFzeW5jU3RvcmFnZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYWN0aW9uQXN5bmNTdG9yYWdlO1xuICAgIH1cbn0pO1xuY29uc3QgX2FzeW5jbG9jYWxzdG9yYWdlID0gcmVxdWlyZShcIi4vYXN5bmMtbG9jYWwtc3RvcmFnZVwiKTtcbmNvbnN0IGFjdGlvbkFzeW5jU3RvcmFnZSA9ICgwLCBfYXN5bmNsb2NhbHN0b3JhZ2UuY3JlYXRlQXN5bmNMb2NhbFN0b3JhZ2UpKCk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFjdGlvbi1hc3luYy1zdG9yYWdlLmV4dGVybmFsLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJhY3Rpb25Bc3luY1N0b3JhZ2UiLCJfYXN5bmNsb2NhbHN0b3JhZ2UiLCJyZXF1aXJlIiwiY3JlYXRlQXN5bmNMb2NhbFN0b3JhZ2UiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(shared)/./node_modules/next/dist/client/components/action-async-storage.external.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/app-router-announcer.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/app-router-announcer.js ***! + \**************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"AppRouterAnnouncer\", ({\n enumerable: true,\n get: function() {\n return AppRouterAnnouncer;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _reactdom = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\");\nconst ANNOUNCER_TYPE = \"next-route-announcer\";\nconst ANNOUNCER_ID = \"__next-route-announcer__\";\nfunction getAnnouncerNode() {\n var _existingAnnouncer_shadowRoot;\n const existingAnnouncer = document.getElementsByName(ANNOUNCER_TYPE)[0];\n if (existingAnnouncer == null ? void 0 : (_existingAnnouncer_shadowRoot = existingAnnouncer.shadowRoot) == null ? void 0 : _existingAnnouncer_shadowRoot.childNodes[0]) {\n return existingAnnouncer.shadowRoot.childNodes[0];\n } else {\n const container = document.createElement(ANNOUNCER_TYPE);\n container.style.cssText = \"position:absolute\";\n const announcer = document.createElement(\"div\");\n announcer.ariaLive = \"assertive\";\n announcer.id = ANNOUNCER_ID;\n announcer.role = \"alert\";\n announcer.style.cssText = \"position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal\";\n // Use shadow DOM here to avoid any potential CSS bleed\n const shadow = container.attachShadow({\n mode: \"open\"\n });\n shadow.appendChild(announcer);\n document.body.appendChild(container);\n return announcer;\n }\n}\nfunction AppRouterAnnouncer(param) {\n let { tree } = param;\n const [portalNode, setPortalNode] = (0, _react.useState)(null);\n (0, _react.useEffect)(()=>{\n const announcer = getAnnouncerNode();\n setPortalNode(announcer);\n return ()=>{\n const container = document.getElementsByTagName(ANNOUNCER_TYPE)[0];\n if (container == null ? void 0 : container.isConnected) {\n document.body.removeChild(container);\n }\n };\n }, []);\n const [routeAnnouncement, setRouteAnnouncement] = (0, _react.useState)(\"\");\n const previousTitle = (0, _react.useRef)();\n (0, _react.useEffect)(()=>{\n let currentTitle = \"\";\n if (document.title) {\n currentTitle = document.title;\n } else {\n const pageHeader = document.querySelector(\"h1\");\n if (pageHeader) {\n currentTitle = pageHeader.innerText || pageHeader.textContent || \"\";\n }\n }\n // Only announce the title change, but not for the first load because screen\n // readers do that automatically.\n if (previousTitle.current !== undefined && previousTitle.current !== currentTitle) {\n setRouteAnnouncement(currentTitle);\n }\n previousTitle.current = currentTitle;\n }, [\n tree\n ]);\n return portalNode ? /*#__PURE__*/ (0, _reactdom.createPortal)(routeAnnouncement, portalNode) : null;\n}\n_c = AppRouterAnnouncer;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router-announcer.js.map\nvar _c;\n$RefreshReg$(_c, \"AppRouterAnnouncer\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci1hbm5vdW5jZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLFNBQVNDLG1CQUFPQSxDQUFDLG1GQUFPO0FBQzlCLE1BQU1DLFlBQVlELG1CQUFPQSxDQUFDLDJGQUFXO0FBQ3JDLE1BQU1FLGlCQUFpQjtBQUN2QixNQUFNQyxlQUFlO0FBQ3JCLFNBQVNDO0lBQ0wsSUFBSUM7SUFDSixNQUFNQyxvQkFBb0JDLFNBQVNDLGlCQUFpQixDQUFDTixlQUFlLENBQUMsRUFBRTtJQUN2RSxJQUFJSSxxQkFBcUIsT0FBTyxLQUFLLElBQUksQ0FBQ0QsZ0NBQWdDQyxrQkFBa0JHLFVBQVUsS0FBSyxPQUFPLEtBQUssSUFBSUosOEJBQThCSyxVQUFVLENBQUMsRUFBRSxFQUFFO1FBQ3BLLE9BQU9KLGtCQUFrQkcsVUFBVSxDQUFDQyxVQUFVLENBQUMsRUFBRTtJQUNyRCxPQUFPO1FBQ0gsTUFBTUMsWUFBWUosU0FBU0ssYUFBYSxDQUFDVjtRQUN6Q1MsVUFBVUUsS0FBSyxDQUFDQyxPQUFPLEdBQUc7UUFDMUIsTUFBTUMsWUFBWVIsU0FBU0ssYUFBYSxDQUFDO1FBQ3pDRyxVQUFVQyxRQUFRLEdBQUc7UUFDckJELFVBQVVFLEVBQUUsR0FBR2Q7UUFDZlksVUFBVUcsSUFBSSxHQUFHO1FBQ2pCSCxVQUFVRixLQUFLLENBQUNDLE9BQU8sR0FBRztRQUMxQix1REFBdUQ7UUFDdkQsTUFBTUssU0FBU1IsVUFBVVMsWUFBWSxDQUFDO1lBQ2xDQyxNQUFNO1FBQ1Y7UUFDQUYsT0FBT0csV0FBVyxDQUFDUDtRQUNuQlIsU0FBU2dCLElBQUksQ0FBQ0QsV0FBVyxDQUFDWDtRQUMxQixPQUFPSTtJQUNYO0FBQ0o7QUFDQSxTQUFTakIsbUJBQW1CMEIsS0FBSztJQUM3QixJQUFJLEVBQUVDLElBQUksRUFBRSxHQUFHRDtJQUNmLE1BQU0sQ0FBQ0UsWUFBWUMsY0FBYyxHQUFHLENBQUMsR0FBRzVCLE9BQU82QixRQUFRLEVBQUU7SUFDeEQsSUFBRzdCLE9BQU84QixTQUFTLEVBQUU7UUFDbEIsTUFBTWQsWUFBWVg7UUFDbEJ1QixjQUFjWjtRQUNkLE9BQU87WUFDSCxNQUFNSixZQUFZSixTQUFTdUIsb0JBQW9CLENBQUM1QixlQUFlLENBQUMsRUFBRTtZQUNsRSxJQUFJUyxhQUFhLE9BQU8sS0FBSyxJQUFJQSxVQUFVb0IsV0FBVyxFQUFFO2dCQUNwRHhCLFNBQVNnQixJQUFJLENBQUNTLFdBQVcsQ0FBQ3JCO1lBQzlCO1FBQ0o7SUFDSixHQUFHLEVBQUU7SUFDTCxNQUFNLENBQUNzQixtQkFBbUJDLHFCQUFxQixHQUFHLENBQUMsR0FBR25DLE9BQU82QixRQUFRLEVBQUU7SUFDdkUsTUFBTU8sZ0JBQWdCLENBQUMsR0FBR3BDLE9BQU9xQyxNQUFNO0lBQ3RDLElBQUdyQyxPQUFPOEIsU0FBUyxFQUFFO1FBQ2xCLElBQUlRLGVBQWU7UUFDbkIsSUFBSTlCLFNBQVMrQixLQUFLLEVBQUU7WUFDaEJELGVBQWU5QixTQUFTK0IsS0FBSztRQUNqQyxPQUFPO1lBQ0gsTUFBTUMsYUFBYWhDLFNBQVNpQyxhQUFhLENBQUM7WUFDMUMsSUFBSUQsWUFBWTtnQkFDWkYsZUFBZUUsV0FBV0UsU0FBUyxJQUFJRixXQUFXRyxXQUFXLElBQUk7WUFDckU7UUFDSjtRQUNBLDRFQUE0RTtRQUM1RSxpQ0FBaUM7UUFDakMsSUFBSVAsY0FBY1EsT0FBTyxLQUFLQyxhQUFhVCxjQUFjUSxPQUFPLEtBQUtOLGNBQWM7WUFDL0VILHFCQUFxQkc7UUFDekI7UUFDQUYsY0FBY1EsT0FBTyxHQUFHTjtJQUM1QixHQUFHO1FBQ0NaO0tBQ0g7SUFDRCxPQUFPQyxhQUEyQixXQUFILEdBQUksSUFBR3pCLFVBQVU0QyxZQUFZLEVBQUVaLG1CQUFtQlAsY0FBYztBQUNuRztLQW5DUzVCO0FBcUNULElBQUksQ0FBQyxPQUFPSixRQUFRb0QsT0FBTyxLQUFLLGNBQWUsT0FBT3BELFFBQVFvRCxPQUFPLEtBQUssWUFBWXBELFFBQVFvRCxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9wRCxRQUFRb0QsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3ZELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW9ELE9BQU8sRUFBRSxjQUFjO1FBQUVuRCxPQUFPO0lBQUs7SUFDbkVILE9BQU93RCxNQUFNLENBQUN0RCxRQUFRb0QsT0FBTyxFQUFFcEQ7SUFDL0J1RCxPQUFPdkQsT0FBTyxHQUFHQSxRQUFRb0QsT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXItYW5ub3VuY2VyLmpzPzZlMDIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBcHBSb3V0ZXJBbm5vdW5jZXJcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFwcFJvdXRlckFubm91bmNlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmNvbnN0IF9yZWFjdGRvbSA9IHJlcXVpcmUoXCJyZWFjdC1kb21cIik7XG5jb25zdCBBTk5PVU5DRVJfVFlQRSA9IFwibmV4dC1yb3V0ZS1hbm5vdW5jZXJcIjtcbmNvbnN0IEFOTk9VTkNFUl9JRCA9IFwiX19uZXh0LXJvdXRlLWFubm91bmNlcl9fXCI7XG5mdW5jdGlvbiBnZXRBbm5vdW5jZXJOb2RlKCkge1xuICAgIHZhciBfZXhpc3RpbmdBbm5vdW5jZXJfc2hhZG93Um9vdDtcbiAgICBjb25zdCBleGlzdGluZ0Fubm91bmNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKEFOTk9VTkNFUl9UWVBFKVswXTtcbiAgICBpZiAoZXhpc3RpbmdBbm5vdW5jZXIgPT0gbnVsbCA/IHZvaWQgMCA6IChfZXhpc3RpbmdBbm5vdW5jZXJfc2hhZG93Um9vdCA9IGV4aXN0aW5nQW5ub3VuY2VyLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfZXhpc3RpbmdBbm5vdW5jZXJfc2hhZG93Um9vdC5jaGlsZE5vZGVzWzBdKSB7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0Fubm91bmNlci5zaGFkb3dSb290LmNoaWxkTm9kZXNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChBTk5PVU5DRVJfVFlQRSk7XG4gICAgICAgIGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZVwiO1xuICAgICAgICBjb25zdCBhbm5vdW5jZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBhbm5vdW5jZXIuYXJpYUxpdmUgPSBcImFzc2VydGl2ZVwiO1xuICAgICAgICBhbm5vdW5jZXIuaWQgPSBBTk5PVU5DRVJfSUQ7XG4gICAgICAgIGFubm91bmNlci5yb2xlID0gXCJhbGVydFwiO1xuICAgICAgICBhbm5vdW5jZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7aGVpZ2h0OjFweDttYXJnaW46LTFweDtwYWRkaW5nOjA7d2lkdGg6MXB4O2NsaXA6cmVjdCgwIDAgMCAwKTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3dvcmQtd3JhcDpub3JtYWxcIjtcbiAgICAgICAgLy8gVXNlIHNoYWRvdyBET00gaGVyZSB0byBhdm9pZCBhbnkgcG90ZW50aWFsIENTUyBibGVlZFxuICAgICAgICBjb25zdCBzaGFkb3cgPSBjb250YWluZXIuYXR0YWNoU2hhZG93KHtcbiAgICAgICAgICAgIG1vZGU6IFwib3BlblwiXG4gICAgICAgIH0pO1xuICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoYW5ub3VuY2VyKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICByZXR1cm4gYW5ub3VuY2VyO1xuICAgIH1cbn1cbmZ1bmN0aW9uIEFwcFJvdXRlckFubm91bmNlcihwYXJhbSkge1xuICAgIGxldCB7IHRyZWUgfSA9IHBhcmFtO1xuICAgIGNvbnN0IFtwb3J0YWxOb2RlLCBzZXRQb3J0YWxOb2RlXSA9ICgwLCBfcmVhY3QudXNlU3RhdGUpKG51bGwpO1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICBjb25zdCBhbm5vdW5jZXIgPSBnZXRBbm5vdW5jZXJOb2RlKCk7XG4gICAgICAgIHNldFBvcnRhbE5vZGUoYW5ub3VuY2VyKTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShBTk5PVU5DRVJfVFlQRSlbMF07XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyID09IG51bGwgPyB2b2lkIDAgOiBjb250YWluZXIuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IFtyb3V0ZUFubm91bmNlbWVudCwgc2V0Um91dGVBbm5vdW5jZW1lbnRdID0gKDAsIF9yZWFjdC51c2VTdGF0ZSkoXCJcIik7XG4gICAgY29uc3QgcHJldmlvdXNUaXRsZSA9ICgwLCBfcmVhY3QudXNlUmVmKSgpO1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICBsZXQgY3VycmVudFRpdGxlID0gXCJcIjtcbiAgICAgICAgaWYgKGRvY3VtZW50LnRpdGxlKSB7XG4gICAgICAgICAgICBjdXJyZW50VGl0bGUgPSBkb2N1bWVudC50aXRsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VIZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaDFcIik7XG4gICAgICAgICAgICBpZiAocGFnZUhlYWRlcikge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRUaXRsZSA9IHBhZ2VIZWFkZXIuaW5uZXJUZXh0IHx8IHBhZ2VIZWFkZXIudGV4dENvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBPbmx5IGFubm91bmNlIHRoZSB0aXRsZSBjaGFuZ2UsIGJ1dCBub3QgZm9yIHRoZSBmaXJzdCBsb2FkIGJlY2F1c2Ugc2NyZWVuXG4gICAgICAgIC8vIHJlYWRlcnMgZG8gdGhhdCBhdXRvbWF0aWNhbGx5LlxuICAgICAgICBpZiAocHJldmlvdXNUaXRsZS5jdXJyZW50ICE9PSB1bmRlZmluZWQgJiYgcHJldmlvdXNUaXRsZS5jdXJyZW50ICE9PSBjdXJyZW50VGl0bGUpIHtcbiAgICAgICAgICAgIHNldFJvdXRlQW5ub3VuY2VtZW50KGN1cnJlbnRUaXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXNUaXRsZS5jdXJyZW50ID0gY3VycmVudFRpdGxlO1xuICAgIH0sIFtcbiAgICAgICAgdHJlZVxuICAgIF0pO1xuICAgIHJldHVybiBwb3J0YWxOb2RlID8gLyojX19QVVJFX18qLyAoMCwgX3JlYWN0ZG9tLmNyZWF0ZVBvcnRhbCkocm91dGVBbm5vdW5jZW1lbnQsIHBvcnRhbE5vZGUpIDogbnVsbDtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXJvdXRlci1hbm5vdW5jZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkFwcFJvdXRlckFubm91bmNlciIsIl9yZWFjdCIsInJlcXVpcmUiLCJfcmVhY3Rkb20iLCJBTk5PVU5DRVJfVFlQRSIsIkFOTk9VTkNFUl9JRCIsImdldEFubm91bmNlck5vZGUiLCJfZXhpc3RpbmdBbm5vdW5jZXJfc2hhZG93Um9vdCIsImV4aXN0aW5nQW5ub3VuY2VyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5TmFtZSIsInNoYWRvd1Jvb3QiLCJjaGlsZE5vZGVzIiwiY29udGFpbmVyIiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwiY3NzVGV4dCIsImFubm91bmNlciIsImFyaWFMaXZlIiwiaWQiLCJyb2xlIiwic2hhZG93IiwiYXR0YWNoU2hhZG93IiwibW9kZSIsImFwcGVuZENoaWxkIiwiYm9keSIsInBhcmFtIiwidHJlZSIsInBvcnRhbE5vZGUiLCJzZXRQb3J0YWxOb2RlIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImlzQ29ubmVjdGVkIiwicmVtb3ZlQ2hpbGQiLCJyb3V0ZUFubm91bmNlbWVudCIsInNldFJvdXRlQW5ub3VuY2VtZW50IiwicHJldmlvdXNUaXRsZSIsInVzZVJlZiIsImN1cnJlbnRUaXRsZSIsInRpdGxlIiwicGFnZUhlYWRlciIsInF1ZXJ5U2VsZWN0b3IiLCJpbm5lclRleHQiLCJ0ZXh0Q29udGVudCIsImN1cnJlbnQiLCJ1bmRlZmluZWQiLCJjcmVhdGVQb3J0YWwiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/app-router-announcer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js": +/*!************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/app-router-headers.js ***! + \************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RSC_HEADER: function() {\n return RSC_HEADER;\n },\n ACTION: function() {\n return ACTION;\n },\n NEXT_ROUTER_STATE_TREE: function() {\n return NEXT_ROUTER_STATE_TREE;\n },\n NEXT_ROUTER_PREFETCH_HEADER: function() {\n return NEXT_ROUTER_PREFETCH_HEADER;\n },\n NEXT_URL: function() {\n return NEXT_URL;\n },\n RSC_CONTENT_TYPE_HEADER: function() {\n return RSC_CONTENT_TYPE_HEADER;\n },\n RSC_VARY_HEADER: function() {\n return RSC_VARY_HEADER;\n },\n FLIGHT_PARAMETERS: function() {\n return FLIGHT_PARAMETERS;\n },\n NEXT_RSC_UNION_QUERY: function() {\n return NEXT_RSC_UNION_QUERY;\n },\n NEXT_DID_POSTPONE_HEADER: function() {\n return NEXT_DID_POSTPONE_HEADER;\n }\n});\nconst RSC_HEADER = \"RSC\";\nconst ACTION = \"Next-Action\";\nconst NEXT_ROUTER_STATE_TREE = \"Next-Router-State-Tree\";\nconst NEXT_ROUTER_PREFETCH_HEADER = \"Next-Router-Prefetch\";\nconst NEXT_URL = \"Next-Url\";\nconst RSC_CONTENT_TYPE_HEADER = \"text/x-component\";\nconst RSC_VARY_HEADER = RSC_HEADER + \", \" + NEXT_ROUTER_STATE_TREE + \", \" + NEXT_ROUTER_PREFETCH_HEADER + \", \" + NEXT_URL;\nconst FLIGHT_PARAMETERS = [\n [\n RSC_HEADER\n ],\n [\n NEXT_ROUTER_STATE_TREE\n ],\n [\n NEXT_ROUTER_PREFETCH_HEADER\n ]\n];\nconst NEXT_RSC_UNION_QUERY = \"_rsc\";\nconst NEXT_DID_POSTPONE_HEADER = \"x-nextjs-postponed\";\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router-headers.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci1oZWFkZXJzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBV047QUFDQSxTQUFTVyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJakIsT0FBT0MsY0FBYyxDQUFDZSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFiLFNBQVM7SUFDYkcsWUFBWTtRQUNSLE9BQU9BO0lBQ1g7SUFDQUMsUUFBUTtRQUNKLE9BQU9BO0lBQ1g7SUFDQUMsd0JBQXdCO1FBQ3BCLE9BQU9BO0lBQ1g7SUFDQUMsNkJBQTZCO1FBQ3pCLE9BQU9BO0lBQ1g7SUFDQUMsVUFBVTtRQUNOLE9BQU9BO0lBQ1g7SUFDQUMseUJBQXlCO1FBQ3JCLE9BQU9BO0lBQ1g7SUFDQUMsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtJQUNBQyxtQkFBbUI7UUFDZixPQUFPQTtJQUNYO0lBQ0FDLHNCQUFzQjtRQUNsQixPQUFPQTtJQUNYO0lBQ0FDLDBCQUEwQjtRQUN0QixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNVCxhQUFhO0FBQ25CLE1BQU1DLFNBQVM7QUFDZixNQUFNQyx5QkFBeUI7QUFDL0IsTUFBTUMsOEJBQThCO0FBQ3BDLE1BQU1DLFdBQVc7QUFDakIsTUFBTUMsMEJBQTBCO0FBQ2hDLE1BQU1DLGtCQUFrQk4sYUFBYSxPQUFPRSx5QkFBeUIsT0FBT0MsOEJBQThCLE9BQU9DO0FBQ2pILE1BQU1HLG9CQUFvQjtJQUN0QjtRQUNJUDtLQUNIO0lBQ0Q7UUFDSUU7S0FDSDtJQUNEO1FBQ0lDO0tBQ0g7Q0FDSjtBQUNELE1BQU1LLHVCQUF1QjtBQUM3QixNQUFNQywyQkFBMkI7QUFFakMsSUFBSSxDQUFDLE9BQU9aLFFBQVFtQixPQUFPLEtBQUssY0FBZSxPQUFPbkIsUUFBUW1CLE9BQU8sS0FBSyxZQUFZbkIsUUFBUW1CLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT25CLFFBQVFtQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRbUIsT0FBTyxFQUFFLGNBQWM7UUFBRWxCLE9BQU87SUFBSztJQUNuRUgsT0FBT3VCLE1BQU0sQ0FBQ3JCLFFBQVFtQixPQUFPLEVBQUVuQjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRbUIsT0FBTztBQUNsQyxFQUVBLDhDQUE4QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXItaGVhZGVycy5qcz8zNTZmIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUlNDX0hFQURFUjogbnVsbCxcbiAgICBBQ1RJT046IG51bGwsXG4gICAgTkVYVF9ST1VURVJfU1RBVEVfVFJFRTogbnVsbCxcbiAgICBORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVI6IG51bGwsXG4gICAgTkVYVF9VUkw6IG51bGwsXG4gICAgUlNDX0NPTlRFTlRfVFlQRV9IRUFERVI6IG51bGwsXG4gICAgUlNDX1ZBUllfSEVBREVSOiBudWxsLFxuICAgIEZMSUdIVF9QQVJBTUVURVJTOiBudWxsLFxuICAgIE5FWFRfUlNDX1VOSU9OX1FVRVJZOiBudWxsLFxuICAgIE5FWFRfRElEX1BPU1RQT05FX0hFQURFUjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBSU0NfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19IRUFERVI7XG4gICAgfSxcbiAgICBBQ1RJT046IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OO1xuICAgIH0sXG4gICAgTkVYVF9ST1VURVJfU1RBVEVfVFJFRTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX1JPVVRFUl9TVEFURV9UUkVFO1xuICAgIH0sXG4gICAgTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUjtcbiAgICB9LFxuICAgIE5FWFRfVVJMOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfVVJMO1xuICAgIH0sXG4gICAgUlNDX0NPTlRFTlRfVFlQRV9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX0NPTlRFTlRfVFlQRV9IRUFERVI7XG4gICAgfSxcbiAgICBSU0NfVkFSWV9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX1ZBUllfSEVBREVSO1xuICAgIH0sXG4gICAgRkxJR0hUX1BBUkFNRVRFUlM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRkxJR0hUX1BBUkFNRVRFUlM7XG4gICAgfSxcbiAgICBORVhUX1JTQ19VTklPTl9RVUVSWTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX1JTQ19VTklPTl9RVUVSWTtcbiAgICB9LFxuICAgIE5FWFRfRElEX1BPU1RQT05FX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0RJRF9QT1NUUE9ORV9IRUFERVI7XG4gICAgfVxufSk7XG5jb25zdCBSU0NfSEVBREVSID0gXCJSU0NcIjtcbmNvbnN0IEFDVElPTiA9IFwiTmV4dC1BY3Rpb25cIjtcbmNvbnN0IE5FWFRfUk9VVEVSX1NUQVRFX1RSRUUgPSBcIk5leHQtUm91dGVyLVN0YXRlLVRyZWVcIjtcbmNvbnN0IE5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUiA9IFwiTmV4dC1Sb3V0ZXItUHJlZmV0Y2hcIjtcbmNvbnN0IE5FWFRfVVJMID0gXCJOZXh0LVVybFwiO1xuY29uc3QgUlNDX0NPTlRFTlRfVFlQRV9IRUFERVIgPSBcInRleHQveC1jb21wb25lbnRcIjtcbmNvbnN0IFJTQ19WQVJZX0hFQURFUiA9IFJTQ19IRUFERVIgKyBcIiwgXCIgKyBORVhUX1JPVVRFUl9TVEFURV9UUkVFICsgXCIsIFwiICsgTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSICsgXCIsIFwiICsgTkVYVF9VUkw7XG5jb25zdCBGTElHSFRfUEFSQU1FVEVSUyA9IFtcbiAgICBbXG4gICAgICAgIFJTQ19IRUFERVJcbiAgICBdLFxuICAgIFtcbiAgICAgICAgTkVYVF9ST1VURVJfU1RBVEVfVFJFRVxuICAgIF0sXG4gICAgW1xuICAgICAgICBORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVJcbiAgICBdXG5dO1xuY29uc3QgTkVYVF9SU0NfVU5JT05fUVVFUlkgPSBcIl9yc2NcIjtcbmNvbnN0IE5FWFRfRElEX1BPU1RQT05FX0hFQURFUiA9IFwieC1uZXh0anMtcG9zdHBvbmVkXCI7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC1yb3V0ZXItaGVhZGVycy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJSU0NfSEVBREVSIiwiQUNUSU9OIiwiTkVYVF9ST1VURVJfU1RBVEVfVFJFRSIsIk5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUiIsIk5FWFRfVVJMIiwiUlNDX0NPTlRFTlRfVFlQRV9IRUFERVIiLCJSU0NfVkFSWV9IRUFERVIiLCJGTElHSFRfUEFSQU1FVEVSUyIsIk5FWFRfUlNDX1VOSU9OX1FVRVJZIiwiTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js": +/*!****************************************************************!*\ + !*** ./node_modules/next/dist/client/components/app-router.js ***! + \****************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getServerActionDispatcher: function() {\n return getServerActionDispatcher;\n },\n urlToUrlWithoutFlightMarker: function() {\n return urlToUrlWithoutFlightMarker;\n },\n createEmptyCacheNode: function() {\n return createEmptyCacheNode;\n },\n default: function() {\n return AppRouter;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _createhreffromurl = __webpack_require__(/*! ./router-reducer/create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _usereducerwithdevtools = __webpack_require__(/*! ./use-reducer-with-devtools */ \"(app-pages-browser)/./node_modules/next/dist/client/components/use-reducer-with-devtools.js\");\nconst _errorboundary = __webpack_require__(/*! ./error-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js\");\nconst _createinitialrouterstate = __webpack_require__(/*! ./router-reducer/create-initial-router-state */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js\");\nconst _isbot = __webpack_require__(/*! ../../shared/lib/router/utils/is-bot */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\nconst _addbasepath = __webpack_require__(/*! ../add-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js\");\nconst _approuterannouncer = __webpack_require__(/*! ./app-router-announcer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-announcer.js\");\nconst _redirectboundary = __webpack_require__(/*! ./redirect-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-boundary.js\");\nconst _findheadincache = __webpack_require__(/*! ./router-reducer/reducers/find-head-in-cache */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js\");\nconst _infinitepromise = __webpack_require__(/*! ./infinite-promise */ \"(app-pages-browser)/./node_modules/next/dist/client/components/infinite-promise.js\");\nconst _approuterheaders = __webpack_require__(/*! ./app-router-headers */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _removebasepath = __webpack_require__(/*! ../remove-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/remove-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../has-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js\");\nconst isServer = typeof window === \"undefined\";\n// Ensure the initialParallelRoutes are not combined because of double-rendering in the browser with Strict Mode.\nlet initialParallelRoutes = isServer ? null : new Map();\nlet globalServerActionDispatcher = null;\nfunction getServerActionDispatcher() {\n return globalServerActionDispatcher;\n}\nconst globalMutable = {};\nfunction urlToUrlWithoutFlightMarker(url) {\n const urlWithoutFlightParameters = new URL(url, location.origin);\n urlWithoutFlightParameters.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);\n if (false) {}\n return urlWithoutFlightParameters;\n}\nfunction isExternalURL(url) {\n return url.origin !== window.location.origin;\n}\nfunction HistoryUpdater(param) {\n let { appRouterState, sync } = param;\n (0, _react.useInsertionEffect)(()=>{\n const { tree, pushRef, canonicalUrl } = appRouterState;\n const historyState = {\n ...pushRef.preserveCustomHistoryState ? window.history.state : {},\n // Identifier is shortened intentionally.\n // __NA is used to identify if the history entry can be handled by the app-router.\n // __N is used to identify if the history entry can be handled by the old router.\n __NA: true,\n __PRIVATE_NEXTJS_INTERNALS_TREE: tree\n };\n if (pushRef.pendingPush && // Skip pushing an additional history entry if the canonicalUrl is the same as the current url.\n // This mirrors the browser behavior for normal navigation.\n (0, _createhreffromurl.createHrefFromUrl)(new URL(window.location.href)) !== canonicalUrl) {\n // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry.\n pushRef.pendingPush = false;\n window.history.pushState(historyState, \"\", canonicalUrl);\n } else {\n window.history.replaceState(historyState, \"\", canonicalUrl);\n }\n sync(appRouterState);\n }, [\n appRouterState,\n sync\n ]);\n return null;\n}\n_c = HistoryUpdater;\nfunction createEmptyCacheNode() {\n return {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n parallelRoutes: new Map(),\n lazyDataResolved: false\n };\n}\nfunction useServerActionDispatcher(dispatch) {\n const serverActionDispatcher = (0, _react.useCallback)((actionPayload)=>{\n (0, _react.startTransition)(()=>{\n dispatch({\n ...actionPayload,\n type: _routerreducertypes.ACTION_SERVER_ACTION\n });\n });\n }, [\n dispatch\n ]);\n globalServerActionDispatcher = serverActionDispatcher;\n}\n/**\n * Server response that only patches the cache and tree.\n */ function useChangeByServerResponse(dispatch) {\n return (0, _react.useCallback)((previousTree, flightData, overrideCanonicalUrl)=>{\n (0, _react.startTransition)(()=>{\n dispatch({\n type: _routerreducertypes.ACTION_SERVER_PATCH,\n flightData,\n previousTree,\n overrideCanonicalUrl\n });\n });\n }, [\n dispatch\n ]);\n}\nfunction useNavigate(dispatch) {\n return (0, _react.useCallback)((href, navigateType, shouldScroll)=>{\n const url = new URL((0, _addbasepath.addBasePath)(href), location.href);\n return dispatch({\n type: _routerreducertypes.ACTION_NAVIGATE,\n url,\n isExternalUrl: isExternalURL(url),\n locationSearch: location.search,\n shouldScroll: shouldScroll != null ? shouldScroll : true,\n navigateType\n });\n }, [\n dispatch\n ]);\n}\nfunction copyNextJsInternalHistoryState(data) {\n if (data == null) data = {};\n const currentState = window.history.state;\n const __NA = currentState == null ? void 0 : currentState.__NA;\n if (__NA) {\n data.__NA = __NA;\n }\n const __PRIVATE_NEXTJS_INTERNALS_TREE = currentState == null ? void 0 : currentState.__PRIVATE_NEXTJS_INTERNALS_TREE;\n if (__PRIVATE_NEXTJS_INTERNALS_TREE) {\n data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE;\n }\n return data;\n}\nfunction Head(param) {\n let { headCacheNode } = param;\n // If this segment has a `prefetchHead`, it's the statically prefetched data.\n // We should use that on initial render instead of `head`. Then we'll switch\n // to `head` when the dynamic response streams in.\n const head = headCacheNode !== null ? headCacheNode.head : null;\n const prefetchHead = headCacheNode !== null ? headCacheNode.prefetchHead : null;\n // If no prefetch data is available, then we go straight to rendering `head`.\n const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head;\n // We use `useDeferredValue` to handle switching between the prefetched and\n // final values. The second argument is returned on initial render, then it\n // re-renders with the first argument.\n //\n // @ts-expect-error The second argument to `useDeferredValue` is only\n // available in the experimental builds. When its disabled, it will always\n // return `head`.\n return (0, _react.useDeferredValue)(head, resolvedPrefetchRsc);\n}\n_c1 = Head;\n/**\n * The global router that wraps the application components.\n */ function Router(param) {\n _s();\n let { buildId, initialHead, initialTree, initialCanonicalUrl, initialSeedData, assetPrefix, missingSlots } = param;\n const initialState = (0, _react.useMemo)(()=>(0, _createinitialrouterstate.createInitialRouterState)({\n buildId,\n initialSeedData,\n initialCanonicalUrl,\n initialTree,\n initialParallelRoutes,\n isServer,\n location: !isServer ? window.location : null,\n initialHead\n }), [\n buildId,\n initialSeedData,\n initialCanonicalUrl,\n initialTree,\n initialHead\n ]);\n const [reducerState, dispatch, sync] = (0, _usereducerwithdevtools.useReducerWithReduxDevtools)(initialState);\n (0, _react.useEffect)(()=>{\n // Ensure initialParallelRoutes is cleaned up from memory once it's used.\n initialParallelRoutes = null;\n }, []);\n const { canonicalUrl } = (0, _usereducerwithdevtools.useUnwrapState)(reducerState);\n // Add memoized pathname/query for useSearchParams and usePathname.\n const { searchParams, pathname } = (0, _react.useMemo)(()=>{\n const url = new URL(canonicalUrl, typeof window === \"undefined\" ? \"http://n\" : window.location.href);\n return {\n // This is turned into a readonly class in `useSearchParams`\n searchParams: url.searchParams,\n pathname: (0, _hasbasepath.hasBasePath)(url.pathname) ? (0, _removebasepath.removeBasePath)(url.pathname) : url.pathname\n };\n }, [\n canonicalUrl\n ]);\n const changeByServerResponse = useChangeByServerResponse(dispatch);\n const navigate = useNavigate(dispatch);\n useServerActionDispatcher(dispatch);\n /**\n * The app router that is exposed through `useRouter`. It's only concerned with dispatching actions to the reducer, does not hold state.\n */ const appRouter = (0, _react.useMemo)(()=>{\n const routerInstance = {\n back: ()=>window.history.back(),\n forward: ()=>window.history.forward(),\n prefetch: (href, options)=>{\n // Don't prefetch for bots as they don't navigate.\n // Don't prefetch during development (improves compilation performance)\n if ((0, _isbot.isBot)(window.navigator.userAgent) || \"development\" === \"development\") {\n return;\n }\n const url = new URL((0, _addbasepath.addBasePath)(href), window.location.href);\n // External urls can't be prefetched in the same way.\n if (isExternalURL(url)) {\n return;\n }\n (0, _react.startTransition)(()=>{\n var _options_kind;\n dispatch({\n type: _routerreducertypes.ACTION_PREFETCH,\n url,\n kind: (_options_kind = options == null ? void 0 : options.kind) != null ? _options_kind : _routerreducertypes.PrefetchKind.FULL\n });\n });\n },\n replace: (href, options)=>{\n if (options === void 0) options = {};\n (0, _react.startTransition)(()=>{\n var _options_scroll;\n navigate(href, \"replace\", (_options_scroll = options.scroll) != null ? _options_scroll : true);\n });\n },\n push: (href, options)=>{\n if (options === void 0) options = {};\n (0, _react.startTransition)(()=>{\n var _options_scroll;\n navigate(href, \"push\", (_options_scroll = options.scroll) != null ? _options_scroll : true);\n });\n },\n refresh: ()=>{\n (0, _react.startTransition)(()=>{\n dispatch({\n type: _routerreducertypes.ACTION_REFRESH,\n origin: window.location.origin\n });\n });\n },\n // @ts-ignore we don't want to expose this method at all\n fastRefresh: ()=>{\n if (false) {} else {\n (0, _react.startTransition)(()=>{\n dispatch({\n type: _routerreducertypes.ACTION_FAST_REFRESH,\n origin: window.location.origin\n });\n });\n }\n }\n };\n return routerInstance;\n }, [\n dispatch,\n navigate\n ]);\n (0, _react.useEffect)(()=>{\n // Exists for debugging purposes. Don't use in application code.\n if (window.next) {\n window.next.router = appRouter;\n }\n }, [\n appRouter\n ]);\n if (true) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { cache, prefetchCache, tree } = (0, _usereducerwithdevtools.useUnwrapState)(reducerState);\n // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n // eslint-disable-next-line react-hooks/rules-of-hooks\n (0, _react.useEffect)(()=>{\n // Add `window.nd` for debugging purposes.\n // This is not meant for use in applications as concurrent rendering will affect the cache/tree/router.\n // @ts-ignore this is for debugging\n window.nd = {\n router: appRouter,\n cache,\n prefetchCache,\n tree\n };\n }, [\n appRouter,\n cache,\n prefetchCache,\n tree\n ]);\n }\n (0, _react.useEffect)(()=>{\n // If the app is restored from bfcache, it's possible that\n // pushRef.mpaNavigation is true, which would mean that any re-render of this component\n // would trigger the mpa navigation logic again from the lines below.\n // This will restore the router to the initial state in the event that the app is restored from bfcache.\n function handlePageShow(event) {\n var _window_history_state;\n if (!event.persisted || !((_window_history_state = window.history.state) == null ? void 0 : _window_history_state.__PRIVATE_NEXTJS_INTERNALS_TREE)) {\n return;\n }\n dispatch({\n type: _routerreducertypes.ACTION_RESTORE,\n url: new URL(window.location.href),\n tree: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE\n });\n }\n window.addEventListener(\"pageshow\", handlePageShow);\n return ()=>{\n window.removeEventListener(\"pageshow\", handlePageShow);\n };\n }, [\n dispatch\n ]);\n // When mpaNavigation flag is set do a hard navigation to the new url.\n // Infinitely suspend because we don't actually want to rerender any child\n // components with the new URL and any entangled state updates shouldn't\n // commit either (eg: useTransition isPending should stay true until the page\n // unloads).\n //\n // This is a side effect in render. Don't try this at home, kids. It's\n // probably safe because we know this is a singleton component and it's never\n // in <Offscreen>. At least I hope so. (It will run twice in dev strict mode,\n // but that's... fine?)\n const { pushRef } = (0, _usereducerwithdevtools.useUnwrapState)(reducerState);\n if (pushRef.mpaNavigation) {\n // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL\n if (globalMutable.pendingMpaPath !== canonicalUrl) {\n const location1 = window.location;\n if (pushRef.pendingPush) {\n location1.assign(canonicalUrl);\n } else {\n location1.replace(canonicalUrl);\n }\n globalMutable.pendingMpaPath = canonicalUrl;\n }\n // TODO-APP: Should we listen to navigateerror here to catch failed\n // navigations somehow? And should we call window.stop() if a SPA navigation\n // should interrupt an MPA one?\n (0, _react.use)((0, _infinitepromise.createInfinitePromise)());\n }\n (0, _react.useEffect)(()=>{\n const originalPushState = window.history.pushState.bind(window.history);\n const originalReplaceState = window.history.replaceState.bind(window.history);\n // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values.\n const applyUrlFromHistoryPushReplace = (url)=>{\n var _window_history_state;\n const href = window.location.href;\n const tree = (_window_history_state = window.history.state) == null ? void 0 : _window_history_state.__PRIVATE_NEXTJS_INTERNALS_TREE;\n (0, _react.startTransition)(()=>{\n dispatch({\n type: _routerreducertypes.ACTION_RESTORE,\n url: new URL(url != null ? url : href, href),\n tree\n });\n });\n };\n /**\n * Patch pushState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */ window.history.pushState = function pushState(data, _unused, url) {\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if ((data == null ? void 0 : data.__NA) || (data == null ? void 0 : data._N)) {\n return originalPushState(data, _unused, url);\n }\n data = copyNextJsInternalHistoryState(data);\n if (url) {\n applyUrlFromHistoryPushReplace(url);\n }\n return originalPushState(data, _unused, url);\n };\n /**\n * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router.\n * Ensures Next.js internal history state is copied to the new history entry.\n * Ensures usePathname and useSearchParams hold the newly provided url.\n */ window.history.replaceState = function replaceState(data, _unused, url) {\n // Avoid a loop when Next.js internals trigger pushState/replaceState\n if ((data == null ? void 0 : data.__NA) || (data == null ? void 0 : data._N)) {\n return originalReplaceState(data, _unused, url);\n }\n data = copyNextJsInternalHistoryState(data);\n if (url) {\n applyUrlFromHistoryPushReplace(url);\n }\n return originalReplaceState(data, _unused, url);\n };\n /**\n * Handle popstate event, this is used to handle back/forward in the browser.\n * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page.\n * That case can happen when the old router injected the history entry.\n */ const onPopState = (param)=>{\n let { state } = param;\n if (!state) {\n // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case.\n return;\n }\n // This case happens when the history entry was pushed by the `pages` router.\n if (!state.__NA) {\n window.location.reload();\n return;\n }\n // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously\n // Without startTransition works if the cache is there for this path\n (0, _react.startTransition)(()=>{\n dispatch({\n type: _routerreducertypes.ACTION_RESTORE,\n url: new URL(window.location.href),\n tree: state.__PRIVATE_NEXTJS_INTERNALS_TREE\n });\n });\n };\n // Register popstate event to call onPopstate.\n window.addEventListener(\"popstate\", onPopState);\n return ()=>{\n window.history.pushState = originalPushState;\n window.history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", onPopState);\n };\n }, [\n dispatch\n ]);\n const { cache, tree, nextUrl, focusAndScrollRef } = (0, _usereducerwithdevtools.useUnwrapState)(reducerState);\n const matchingHead = (0, _react.useMemo)(()=>{\n return (0, _findheadincache.findHeadInCache)(cache, tree[1]);\n }, [\n cache,\n tree\n ]);\n let head;\n if (matchingHead !== null) {\n // The head is wrapped in an extra component so we can use\n // `useDeferredValue` to swap between the prefetched and final versions of\n // the head. (This is what LayoutRouter does for segment data, too.)\n //\n // The `key` is used to remount the component whenever the head moves to\n // a different segment.\n const [headCacheNode, headKey] = matchingHead;\n head = /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {\n headCacheNode: headCacheNode\n }, headKey);\n } else {\n head = null;\n }\n let content = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_redirectboundary.RedirectBoundary, {\n children: [\n head,\n cache.rsc,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuterannouncer.AppRouterAnnouncer, {\n tree: tree\n })\n ]\n });\n if (true) {\n if (typeof window !== \"undefined\") {\n const DevRootNotFoundBoundary = (__webpack_require__(/*! ./dev-root-not-found-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/dev-root-not-found-boundary.js\").DevRootNotFoundBoundary);\n content = /*#__PURE__*/ (0, _jsxruntime.jsx)(DevRootNotFoundBoundary, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.MissingSlotContext.Provider, {\n value: missingSlots,\n children: content\n })\n });\n }\n const HotReloader = (__webpack_require__(/*! ./react-dev-overlay/hot-reloader-client */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/hot-reloader-client.js\")[\"default\"]);\n content = /*#__PURE__*/ (0, _jsxruntime.jsx)(HotReloader, {\n assetPrefix: assetPrefix,\n children: content\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(HistoryUpdater, {\n appRouterState: (0, _usereducerwithdevtools.useUnwrapState)(reducerState),\n sync: sync\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathnameContext.Provider, {\n value: pathname,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, {\n value: searchParams,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.GlobalLayoutRouterContext.Provider, {\n value: {\n buildId,\n changeByServerResponse,\n tree,\n focusAndScrollRef,\n nextUrl\n },\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, {\n value: appRouter,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.LayoutRouterContext.Provider, {\n value: {\n childNodes: cache.parallelRoutes,\n tree,\n // Root node always has `url`\n // Provided in AppTreeContext to ensure it can be overwritten in layout-router\n url: canonicalUrl\n },\n children: content\n })\n })\n })\n })\n })\n ]\n });\n}\n_s(Router, \"q0MfV9e9/a1iyE4/7qfUaQkhGE8=\", false, function() {\n return [\n useChangeByServerResponse,\n useNavigate,\n useServerActionDispatcher\n ];\n});\n_c2 = Router;\nfunction AppRouter(props) {\n const { globalErrorComponent, ...rest } = props;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.ErrorBoundary, {\n errorComponent: globalErrorComponent,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Router, {\n ...rest\n })\n });\n}\n_c3 = AppRouter;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router.js.map\nvar _c, _c1, _c2, _c3;\n$RefreshReg$(_c, \"HistoryUpdater\");\n$RefreshReg$(_c1, \"Head\");\n$RefreshReg$(_c2, \"Router\");\n$RefreshReg$(_c3, \"AppRouter\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci5qcyIsIm1hcHBpbmdzIjoiOztBQUVBO0FBQ0FBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBS047QUFDQSxTQUFTSyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJWCxPQUFPQyxjQUFjLENBQUNTLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUVAsU0FBUztJQUNiRywyQkFBMkI7UUFDdkIsT0FBT0E7SUFDWDtJQUNBQyw2QkFBNkI7UUFDekIsT0FBT0E7SUFDWDtJQUNBQyxzQkFBc0I7UUFDbEIsT0FBT0E7SUFDWDtJQUNBQyxTQUFTO1FBQ0wsT0FBT087SUFDWDtBQUNKO0FBQ0EsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsbUZBQU87QUFDeEUsTUFBTUksaUNBQWlDSixtQkFBT0EsQ0FBQyx3SkFBb0Q7QUFDbkcsTUFBTUssc0JBQXNCTCxtQkFBT0EsQ0FBQyxvSkFBdUM7QUFDM0UsTUFBTU0scUJBQXFCTixtQkFBT0EsQ0FBQyxvSkFBdUM7QUFDMUUsTUFBTU8sbUNBQW1DUCxtQkFBT0EsQ0FBQyw0SkFBc0Q7QUFDdkcsTUFBTVEsMEJBQTBCUixtQkFBT0EsQ0FBQyxnSUFBNkI7QUFDckUsTUFBTVMsaUJBQWlCVCxtQkFBT0EsQ0FBQywwR0FBa0I7QUFDakQsTUFBTVUsNEJBQTRCVixtQkFBT0EsQ0FBQyxrS0FBOEM7QUFDeEYsTUFBTVcsU0FBU1gsbUJBQU9BLENBQUMsNEhBQXNDO0FBQzdELE1BQU1ZLGVBQWVaLG1CQUFPQSxDQUFDLDhGQUFrQjtBQUMvQyxNQUFNYSxzQkFBc0JiLG1CQUFPQSxDQUFDLHNIQUF3QjtBQUM1RCxNQUFNYyxvQkFBb0JkLG1CQUFPQSxDQUFDLGdIQUFxQjtBQUN2RCxNQUFNZSxtQkFBbUJmLG1CQUFPQSxDQUFDLGtLQUE4QztBQUMvRSxNQUFNZ0IsbUJBQW1CaEIsbUJBQU9BLENBQUMsOEdBQW9CO0FBQ3JELE1BQU1pQixvQkFBb0JqQixtQkFBT0EsQ0FBQyxrSEFBc0I7QUFDeEQsTUFBTWtCLGtCQUFrQmxCLG1CQUFPQSxDQUFDLG9HQUFxQjtBQUNyRCxNQUFNbUIsZUFBZW5CLG1CQUFPQSxDQUFDLDhGQUFrQjtBQUMvQyxNQUFNb0IsV0FBVyxPQUFPQyxXQUFXO0FBQ25DLGlIQUFpSDtBQUNqSCxJQUFJQyx3QkFBd0JGLFdBQVcsT0FBTyxJQUFJRztBQUNsRCxJQUFJQywrQkFBK0I7QUFDbkMsU0FBU3BDO0lBQ0wsT0FBT29DO0FBQ1g7QUFDQSxNQUFNQyxnQkFBZ0IsQ0FBQztBQUN2QixTQUFTcEMsNEJBQTRCcUMsR0FBRztJQUNwQyxNQUFNQyw2QkFBNkIsSUFBSUMsSUFBSUYsS0FBS0csU0FBU0MsTUFBTTtJQUMvREgsMkJBQTJCSSxZQUFZLENBQUNDLE1BQU0sQ0FBQ2Ysa0JBQWtCZ0Isb0JBQW9CO0lBQ3JGLElBQUlDLEtBQXFDLEVBQUUsRUFPMUM7SUFDRCxPQUFPUDtBQUNYO0FBQ0EsU0FBU2MsY0FBY2YsR0FBRztJQUN0QixPQUFPQSxJQUFJSSxNQUFNLEtBQUtULE9BQU9RLFFBQVEsQ0FBQ0MsTUFBTTtBQUNoRDtBQUNBLFNBQVNZLGVBQWVDLEtBQUs7SUFDekIsSUFBSSxFQUFFQyxjQUFjLEVBQUVDLElBQUksRUFBRSxHQUFHRjtJQUM5QixJQUFHekMsT0FBTzRDLGtCQUFrQixFQUFFO1FBQzNCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLFlBQVksRUFBRSxHQUFHTDtRQUN4QyxNQUFNTSxlQUFlO1lBQ2pCLEdBQUdGLFFBQVFHLDBCQUEwQixHQUFHOUIsT0FBTytCLE9BQU8sQ0FBQ0MsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNqRSx5Q0FBeUM7WUFDekMsa0ZBQWtGO1lBQ2xGLGlGQUFpRjtZQUNqRkMsTUFBTTtZQUNOQyxpQ0FBaUNSO1FBQ3JDO1FBQ0EsSUFBSUMsUUFBUVEsV0FBVyxJQUV2QiwrRkFGMEg7UUFDMUgsMkRBQTJEO1FBQzFELElBQUdsRCxtQkFBbUJtRCxpQkFBaUIsRUFBRSxJQUFJN0IsSUFBSVAsT0FBT1EsUUFBUSxDQUFDNkIsSUFBSSxPQUFPVCxjQUFjO1lBQ3ZGLHFKQUFxSjtZQUNySkQsUUFBUVEsV0FBVyxHQUFHO1lBQ3RCbkMsT0FBTytCLE9BQU8sQ0FBQ08sU0FBUyxDQUFDVCxjQUFjLElBQUlEO1FBQy9DLE9BQU87WUFDSDVCLE9BQU8rQixPQUFPLENBQUNRLFlBQVksQ0FBQ1YsY0FBYyxJQUFJRDtRQUNsRDtRQUNBSixLQUFLRDtJQUNULEdBQUc7UUFDQ0E7UUFDQUM7S0FDSDtJQUNELE9BQU87QUFDWDtLQTNCU0g7QUE0QlQsU0FBU3BEO0lBQ0wsT0FBTztRQUNIdUUsVUFBVTtRQUNWQyxLQUFLO1FBQ0xDLGFBQWE7UUFDYkMsZ0JBQWdCLElBQUl6QztRQUNwQjBDLGtCQUFrQjtJQUN0QjtBQUNKO0FBQ0EsU0FBU0MsMEJBQTBCQyxRQUFRO0lBQ3ZDLE1BQU1DLHlCQUF5QixDQUFDLEdBQUdsRSxPQUFPbUUsV0FBVyxFQUFFLENBQUNDO1FBQ25ELElBQUdwRSxPQUFPcUUsZUFBZSxFQUFFO1lBQ3hCSixTQUFTO2dCQUNMLEdBQUdHLGFBQWE7Z0JBQ2hCRSxNQUFNbkUsb0JBQW9Cb0Usb0JBQW9CO1lBQ2xEO1FBQ0o7SUFDSixHQUFHO1FBQ0NOO0tBQ0g7SUFDRDNDLCtCQUErQjRDO0FBQ25DO0FBQ0E7O0NBRUMsR0FBRyxTQUFTTSwwQkFBMEJQLFFBQVE7SUFDM0MsT0FBTyxDQUFDLEdBQUdqRSxPQUFPbUUsV0FBVyxFQUFFLENBQUNNLGNBQWNDLFlBQVlDO1FBQ3JELElBQUczRSxPQUFPcUUsZUFBZSxFQUFFO1lBQ3hCSixTQUFTO2dCQUNMSyxNQUFNbkUsb0JBQW9CeUUsbUJBQW1CO2dCQUM3Q0Y7Z0JBQ0FEO2dCQUNBRTtZQUNKO1FBQ0o7SUFDSixHQUFHO1FBQ0NWO0tBQ0g7QUFDTDtBQUNBLFNBQVNZLFlBQVlaLFFBQVE7SUFDekIsT0FBTyxDQUFDLEdBQUdqRSxPQUFPbUUsV0FBVyxFQUFFLENBQUNYLE1BQU1zQixjQUFjQztRQUNoRCxNQUFNdkQsTUFBTSxJQUFJRSxJQUFJLENBQUMsR0FBR2hCLGFBQWFzRSxXQUFXLEVBQUV4QixPQUFPN0IsU0FBUzZCLElBQUk7UUFDdEUsT0FBT1MsU0FBUztZQUNaSyxNQUFNbkUsb0JBQW9COEUsZUFBZTtZQUN6Q3pEO1lBQ0EwRCxlQUFlM0MsY0FBY2Y7WUFDN0IyRCxnQkFBZ0J4RCxTQUFTeUQsTUFBTTtZQUMvQkwsY0FBY0EsZ0JBQWdCLE9BQU9BLGVBQWU7WUFDcEREO1FBQ0o7SUFDSixHQUFHO1FBQ0NiO0tBQ0g7QUFDTDtBQUNBLFNBQVNvQiwrQkFBK0JDLElBQUk7SUFDeEMsSUFBSUEsUUFBUSxNQUFNQSxPQUFPLENBQUM7SUFDMUIsTUFBTUMsZUFBZXBFLE9BQU8rQixPQUFPLENBQUNDLEtBQUs7SUFDekMsTUFBTUMsT0FBT21DLGdCQUFnQixPQUFPLEtBQUssSUFBSUEsYUFBYW5DLElBQUk7SUFDOUQsSUFBSUEsTUFBTTtRQUNOa0MsS0FBS2xDLElBQUksR0FBR0E7SUFDaEI7SUFDQSxNQUFNQyxrQ0FBa0NrQyxnQkFBZ0IsT0FBTyxLQUFLLElBQUlBLGFBQWFsQywrQkFBK0I7SUFDcEgsSUFBSUEsaUNBQWlDO1FBQ2pDaUMsS0FBS2pDLCtCQUErQixHQUFHQTtJQUMzQztJQUNBLE9BQU9pQztBQUNYO0FBQ0EsU0FBU0UsS0FBSy9DLEtBQUs7SUFDZixJQUFJLEVBQUVnRCxhQUFhLEVBQUUsR0FBR2hEO0lBQ3hCLDZFQUE2RTtJQUM3RSw0RUFBNEU7SUFDNUUsa0RBQWtEO0lBQ2xELE1BQU1pRCxPQUFPRCxrQkFBa0IsT0FBT0EsY0FBY0MsSUFBSSxHQUFHO0lBQzNELE1BQU1DLGVBQWVGLGtCQUFrQixPQUFPQSxjQUFjRSxZQUFZLEdBQUc7SUFDM0UsNkVBQTZFO0lBQzdFLE1BQU1DLHNCQUFzQkQsaUJBQWlCLE9BQU9BLGVBQWVEO0lBQ25FLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0Usc0NBQXNDO0lBQ3RDLEVBQUU7SUFDRixxRUFBcUU7SUFDckUsMEVBQTBFO0lBQzFFLGlCQUFpQjtJQUNqQixPQUFPLENBQUMsR0FBRzFGLE9BQU82RixnQkFBZ0IsRUFBRUgsTUFBTUU7QUFDOUM7TUFqQlNKO0FBa0JUOztDQUVDLEdBQUcsU0FBU00sT0FBT3JELEtBQUs7O0lBQ3JCLElBQUksRUFBRXNELE9BQU8sRUFBRUMsV0FBVyxFQUFFQyxXQUFXLEVBQUVDLG1CQUFtQixFQUFFQyxlQUFlLEVBQUVDLFdBQVcsRUFBRUMsWUFBWSxFQUFFLEdBQUc1RDtJQUM3RyxNQUFNNkQsZUFBZSxDQUFDLEdBQUd0RyxPQUFPdUcsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHL0YsMEJBQTBCZ0csd0JBQXdCLEVBQUU7WUFDN0ZUO1lBQ0FJO1lBQ0FEO1lBQ0FEO1lBQ0E3RTtZQUNBRjtZQUNBUyxVQUFVLENBQUNULFdBQVdDLE9BQU9RLFFBQVEsR0FBRztZQUN4Q3FFO1FBQ0osSUFBSTtRQUNKRDtRQUNBSTtRQUNBRDtRQUNBRDtRQUNBRDtLQUNIO0lBQ0QsTUFBTSxDQUFDUyxjQUFjeEMsVUFBVXRCLEtBQUssR0FBRyxDQUFDLEdBQUdyQyx3QkFBd0JvRywyQkFBMkIsRUFBRUo7SUFDL0YsSUFBR3RHLE9BQU8yRyxTQUFTLEVBQUU7UUFDbEIseUVBQXlFO1FBQ3pFdkYsd0JBQXdCO0lBQzVCLEdBQUcsRUFBRTtJQUNMLE1BQU0sRUFBRTJCLFlBQVksRUFBRSxHQUFHLENBQUMsR0FBR3pDLHdCQUF3QnNHLGNBQWMsRUFBRUg7SUFDckUsbUVBQW1FO0lBQ25FLE1BQU0sRUFBRTVFLFlBQVksRUFBRU0sUUFBUSxFQUFFLEdBQUcsQ0FBQyxHQUFHbkMsT0FBT3VHLE9BQU8sRUFBRTtRQUNuRCxNQUFNL0UsTUFBTSxJQUFJRSxJQUFJcUIsY0FBYyxPQUFPNUIsV0FBVyxjQUFjLGFBQWFBLE9BQU9RLFFBQVEsQ0FBQzZCLElBQUk7UUFDbkcsT0FBTztZQUNILDREQUE0RDtZQUM1RDNCLGNBQWNMLElBQUlLLFlBQVk7WUFDOUJNLFVBQVUsQ0FBQyxHQUFHbEIsYUFBYTRGLFdBQVcsRUFBRXJGLElBQUlXLFFBQVEsSUFBSSxDQUFDLEdBQUduQixnQkFBZ0I4RixjQUFjLEVBQUV0RixJQUFJVyxRQUFRLElBQUlYLElBQUlXLFFBQVE7UUFDNUg7SUFDSixHQUFHO1FBQ0NZO0tBQ0g7SUFDRCxNQUFNZ0UseUJBQXlCdkMsMEJBQTBCUDtJQUN6RCxNQUFNK0MsV0FBV25DLFlBQVlaO0lBQzdCRCwwQkFBMEJDO0lBQzFCOztHQUVELEdBQUcsTUFBTWdELFlBQVksQ0FBQyxHQUFHakgsT0FBT3VHLE9BQU8sRUFBRTtRQUNwQyxNQUFNVyxpQkFBaUI7WUFDbkJDLE1BQU0sSUFBSWhHLE9BQU8rQixPQUFPLENBQUNpRSxJQUFJO1lBQzdCQyxTQUFTLElBQUlqRyxPQUFPK0IsT0FBTyxDQUFDa0UsT0FBTztZQUNuQ0MsVUFBVSxDQUFDN0QsTUFBTThEO2dCQUNiLGtEQUFrRDtnQkFDbEQsdUVBQXVFO2dCQUN2RSxJQUFJLENBQUMsR0FBRzdHLE9BQU84RyxLQUFLLEVBQUVwRyxPQUFPcUcsU0FBUyxDQUFDQyxTQUFTLEtBQUt6RixrQkFBeUIsZUFBZTtvQkFDekY7Z0JBQ0o7Z0JBQ0EsTUFBTVIsTUFBTSxJQUFJRSxJQUFJLENBQUMsR0FBR2hCLGFBQWFzRSxXQUFXLEVBQUV4QixPQUFPckMsT0FBT1EsUUFBUSxDQUFDNkIsSUFBSTtnQkFDN0UscURBQXFEO2dCQUNyRCxJQUFJakIsY0FBY2YsTUFBTTtvQkFDcEI7Z0JBQ0o7Z0JBQ0MsSUFBR3hCLE9BQU9xRSxlQUFlLEVBQUU7b0JBQ3hCLElBQUlxRDtvQkFDSnpELFNBQVM7d0JBQ0xLLE1BQU1uRSxvQkFBb0J3SCxlQUFlO3dCQUN6Q25HO3dCQUNBb0csTUFBTSxDQUFDRixnQkFBZ0JKLFdBQVcsT0FBTyxLQUFLLElBQUlBLFFBQVFNLElBQUksS0FBSyxPQUFPRixnQkFBZ0J2SCxvQkFBb0IwSCxZQUFZLENBQUNDLElBQUk7b0JBQ25JO2dCQUNKO1lBQ0o7WUFDQUMsU0FBUyxDQUFDdkUsTUFBTThEO2dCQUNaLElBQUlBLFlBQVksS0FBSyxHQUFHQSxVQUFVLENBQUM7Z0JBQ2xDLElBQUd0SCxPQUFPcUUsZUFBZSxFQUFFO29CQUN4QixJQUFJMkQ7b0JBQ0poQixTQUFTeEQsTUFBTSxXQUFXLENBQUN3RSxrQkFBa0JWLFFBQVFXLE1BQU0sS0FBSyxPQUFPRCxrQkFBa0I7Z0JBQzdGO1lBQ0o7WUFDQUUsTUFBTSxDQUFDMUUsTUFBTThEO2dCQUNULElBQUlBLFlBQVksS0FBSyxHQUFHQSxVQUFVLENBQUM7Z0JBQ2xDLElBQUd0SCxPQUFPcUUsZUFBZSxFQUFFO29CQUN4QixJQUFJMkQ7b0JBQ0poQixTQUFTeEQsTUFBTSxRQUFRLENBQUN3RSxrQkFBa0JWLFFBQVFXLE1BQU0sS0FBSyxPQUFPRCxrQkFBa0I7Z0JBQzFGO1lBQ0o7WUFDQUcsU0FBUztnQkFDSixJQUFHbkksT0FBT3FFLGVBQWUsRUFBRTtvQkFDeEJKLFNBQVM7d0JBQ0xLLE1BQU1uRSxvQkFBb0JpSSxjQUFjO3dCQUN4Q3hHLFFBQVFULE9BQU9RLFFBQVEsQ0FBQ0MsTUFBTTtvQkFDbEM7Z0JBQ0o7WUFDSjtZQUNBLHdEQUF3RDtZQUN4RHlHLGFBQWE7Z0JBQ1QsSUFBSXJHLEtBQXNDLEVBQUUsRUFFM0MsTUFBTTtvQkFDRixJQUFHaEMsT0FBT3FFLGVBQWUsRUFBRTt3QkFDeEJKLFNBQVM7NEJBQ0xLLE1BQU1uRSxvQkFBb0JvSSxtQkFBbUI7NEJBQzdDM0csUUFBUVQsT0FBT1EsUUFBUSxDQUFDQyxNQUFNO3dCQUNsQztvQkFDSjtnQkFDSjtZQUNKO1FBQ0o7UUFDQSxPQUFPc0Y7SUFDWCxHQUFHO1FBQ0NqRDtRQUNBK0M7S0FDSDtJQUNBLElBQUdoSCxPQUFPMkcsU0FBUyxFQUFFO1FBQ2xCLGdFQUFnRTtRQUNoRSxJQUFJeEYsT0FBT3FILElBQUksRUFBRTtZQUNickgsT0FBT3FILElBQUksQ0FBQ0MsTUFBTSxHQUFHeEI7UUFDekI7SUFDSixHQUFHO1FBQ0NBO0tBQ0g7SUFDRCxJQUFJakYsSUFBcUMsRUFBRTtRQUN2QyxzREFBc0Q7UUFDdEQsTUFBTSxFQUFFMEcsS0FBSyxFQUFFQyxhQUFhLEVBQUU5RixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUd2Qyx3QkFBd0JzRyxjQUFjLEVBQUVIO1FBQ25GLDRGQUE0RjtRQUM1RixzREFBc0Q7UUFDckQsSUFBR3pHLE9BQU8yRyxTQUFTLEVBQUU7WUFDbEIsMENBQTBDO1lBQzFDLHVHQUF1RztZQUN2RyxtQ0FBbUM7WUFDbkN4RixPQUFPeUgsRUFBRSxHQUFHO2dCQUNSSCxRQUFReEI7Z0JBQ1J5QjtnQkFDQUM7Z0JBQ0E5RjtZQUNKO1FBQ0osR0FBRztZQUNDb0U7WUFDQXlCO1lBQ0FDO1lBQ0E5RjtTQUNIO0lBQ0w7SUFDQyxJQUFHN0MsT0FBTzJHLFNBQVMsRUFBRTtRQUNsQiwwREFBMEQ7UUFDMUQsdUZBQXVGO1FBQ3ZGLHFFQUFxRTtRQUNyRSx3R0FBd0c7UUFDeEcsU0FBU2tDLGVBQWVDLEtBQUs7WUFDekIsSUFBSUM7WUFDSixJQUFJLENBQUNELE1BQU1FLFNBQVMsSUFBSSxDQUFFLEVBQUNELHdCQUF3QjVILE9BQU8rQixPQUFPLENBQUNDLEtBQUssS0FBSyxPQUFPLEtBQUssSUFBSTRGLHNCQUFzQjFGLCtCQUErQixHQUFHO2dCQUNoSjtZQUNKO1lBQ0FZLFNBQVM7Z0JBQ0xLLE1BQU1uRSxvQkFBb0I4SSxjQUFjO2dCQUN4Q3pILEtBQUssSUFBSUUsSUFBSVAsT0FBT1EsUUFBUSxDQUFDNkIsSUFBSTtnQkFDakNYLE1BQU0xQixPQUFPK0IsT0FBTyxDQUFDQyxLQUFLLENBQUNFLCtCQUErQjtZQUM5RDtRQUNKO1FBQ0FsQyxPQUFPK0gsZ0JBQWdCLENBQUMsWUFBWUw7UUFDcEMsT0FBTztZQUNIMUgsT0FBT2dJLG1CQUFtQixDQUFDLFlBQVlOO1FBQzNDO0lBQ0osR0FBRztRQUNDNUU7S0FDSDtJQUNELHNFQUFzRTtJQUN0RSwwRUFBMEU7SUFDMUUsd0VBQXdFO0lBQ3hFLDZFQUE2RTtJQUM3RSxZQUFZO0lBQ1osRUFBRTtJQUNGLHNFQUFzRTtJQUN0RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLHVCQUF1QjtJQUN2QixNQUFNLEVBQUVuQixPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUd4Qyx3QkFBd0JzRyxjQUFjLEVBQUVIO0lBQ2hFLElBQUkzRCxRQUFRc0csYUFBYSxFQUFFO1FBQ3ZCLGdIQUFnSDtRQUNoSCxJQUFJN0gsY0FBYzhILGNBQWMsS0FBS3RHLGNBQWM7WUFDL0MsTUFBTXVHLFlBQVluSSxPQUFPUSxRQUFRO1lBQ2pDLElBQUltQixRQUFRUSxXQUFXLEVBQUU7Z0JBQ3JCZ0csVUFBVUMsTUFBTSxDQUFDeEc7WUFDckIsT0FBTztnQkFDSHVHLFVBQVV2QixPQUFPLENBQUNoRjtZQUN0QjtZQUNBeEIsY0FBYzhILGNBQWMsR0FBR3RHO1FBQ25DO1FBQ0EsbUVBQW1FO1FBQ25FLDRFQUE0RTtRQUM1RSwrQkFBK0I7UUFDOUIsSUFBRy9DLE9BQU93SixHQUFHLEVBQUUsQ0FBQyxHQUFHMUksaUJBQWlCMkkscUJBQXFCO0lBQzlEO0lBQ0MsSUFBR3pKLE9BQU8yRyxTQUFTLEVBQUU7UUFDbEIsTUFBTStDLG9CQUFvQnZJLE9BQU8rQixPQUFPLENBQUNPLFNBQVMsQ0FBQ2tHLElBQUksQ0FBQ3hJLE9BQU8rQixPQUFPO1FBQ3RFLE1BQU0wRyx1QkFBdUJ6SSxPQUFPK0IsT0FBTyxDQUFDUSxZQUFZLENBQUNpRyxJQUFJLENBQUN4SSxPQUFPK0IsT0FBTztRQUM1RSx3SkFBd0o7UUFDeEosTUFBTTJHLGlDQUFpQyxDQUFDckk7WUFDcEMsSUFBSXVIO1lBQ0osTUFBTXZGLE9BQU9yQyxPQUFPUSxRQUFRLENBQUM2QixJQUFJO1lBQ2pDLE1BQU1YLE9BQU8sQ0FBQ2tHLHdCQUF3QjVILE9BQU8rQixPQUFPLENBQUNDLEtBQUssS0FBSyxPQUFPLEtBQUssSUFBSTRGLHNCQUFzQjFGLCtCQUErQjtZQUNuSSxJQUFHckQsT0FBT3FFLGVBQWUsRUFBRTtnQkFDeEJKLFNBQVM7b0JBQ0xLLE1BQU1uRSxvQkFBb0I4SSxjQUFjO29CQUN4Q3pILEtBQUssSUFBSUUsSUFBSUYsT0FBTyxPQUFPQSxNQUFNZ0MsTUFBTUE7b0JBQ3ZDWDtnQkFDSjtZQUNKO1FBQ0o7UUFDQTs7OztLQUlILEdBQUcxQixPQUFPK0IsT0FBTyxDQUFDTyxTQUFTLEdBQUcsU0FBU0EsVUFBVTZCLElBQUksRUFBRXdFLE9BQU8sRUFBRXRJLEdBQUc7WUFDNUQscUVBQXFFO1lBQ3JFLElBQUksQ0FBQzhELFFBQVEsT0FBTyxLQUFLLElBQUlBLEtBQUtsQyxJQUFJLEtBQU1rQyxDQUFBQSxRQUFRLE9BQU8sS0FBSyxJQUFJQSxLQUFLeUUsRUFBRSxHQUFHO2dCQUMxRSxPQUFPTCxrQkFBa0JwRSxNQUFNd0UsU0FBU3RJO1lBQzVDO1lBQ0E4RCxPQUFPRCwrQkFBK0JDO1lBQ3RDLElBQUk5RCxLQUFLO2dCQUNMcUksK0JBQStCckk7WUFDbkM7WUFDQSxPQUFPa0ksa0JBQWtCcEUsTUFBTXdFLFNBQVN0STtRQUM1QztRQUNBOzs7O0tBSUgsR0FBR0wsT0FBTytCLE9BQU8sQ0FBQ1EsWUFBWSxHQUFHLFNBQVNBLGFBQWE0QixJQUFJLEVBQUV3RSxPQUFPLEVBQUV0SSxHQUFHO1lBQ2xFLHFFQUFxRTtZQUNyRSxJQUFJLENBQUM4RCxRQUFRLE9BQU8sS0FBSyxJQUFJQSxLQUFLbEMsSUFBSSxLQUFNa0MsQ0FBQUEsUUFBUSxPQUFPLEtBQUssSUFBSUEsS0FBS3lFLEVBQUUsR0FBRztnQkFDMUUsT0FBT0gscUJBQXFCdEUsTUFBTXdFLFNBQVN0STtZQUMvQztZQUNBOEQsT0FBT0QsK0JBQStCQztZQUN0QyxJQUFJOUQsS0FBSztnQkFDTHFJLCtCQUErQnJJO1lBQ25DO1lBQ0EsT0FBT29JLHFCQUFxQnRFLE1BQU13RSxTQUFTdEk7UUFDL0M7UUFDQTs7OztLQUlILEdBQUcsTUFBTXdJLGFBQWEsQ0FBQ3ZIO1lBQ2hCLElBQUksRUFBRVUsS0FBSyxFQUFFLEdBQUdWO1lBQ2hCLElBQUksQ0FBQ1UsT0FBTztnQkFDUiwrSUFBK0k7Z0JBQy9JO1lBQ0o7WUFDQSw2RUFBNkU7WUFDN0UsSUFBSSxDQUFDQSxNQUFNQyxJQUFJLEVBQUU7Z0JBQ2JqQyxPQUFPUSxRQUFRLENBQUNzSSxNQUFNO2dCQUN0QjtZQUNKO1lBQ0EsZ0hBQWdIO1lBQ2hILG9FQUFvRTtZQUNuRSxJQUFHakssT0FBT3FFLGVBQWUsRUFBRTtnQkFDeEJKLFNBQVM7b0JBQ0xLLE1BQU1uRSxvQkFBb0I4SSxjQUFjO29CQUN4Q3pILEtBQUssSUFBSUUsSUFBSVAsT0FBT1EsUUFBUSxDQUFDNkIsSUFBSTtvQkFDakNYLE1BQU1NLE1BQU1FLCtCQUErQjtnQkFDL0M7WUFDSjtRQUNKO1FBQ0EsOENBQThDO1FBQzlDbEMsT0FBTytILGdCQUFnQixDQUFDLFlBQVljO1FBQ3BDLE9BQU87WUFDSDdJLE9BQU8rQixPQUFPLENBQUNPLFNBQVMsR0FBR2lHO1lBQzNCdkksT0FBTytCLE9BQU8sQ0FBQ1EsWUFBWSxHQUFHa0c7WUFDOUJ6SSxPQUFPZ0ksbUJBQW1CLENBQUMsWUFBWWE7UUFDM0M7SUFDSixHQUFHO1FBQ0MvRjtLQUNIO0lBQ0QsTUFBTSxFQUFFeUUsS0FBSyxFQUFFN0YsSUFBSSxFQUFFcUgsT0FBTyxFQUFFQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsR0FBRzdKLHdCQUF3QnNHLGNBQWMsRUFBRUg7SUFDaEcsTUFBTTJELGVBQWUsQ0FBQyxHQUFHcEssT0FBT3VHLE9BQU8sRUFBRTtRQUNyQyxPQUFPLENBQUMsR0FBRzFGLGlCQUFpQndKLGVBQWUsRUFBRTNCLE9BQU83RixJQUFJLENBQUMsRUFBRTtJQUMvRCxHQUFHO1FBQ0M2RjtRQUNBN0Y7S0FDSDtJQUNELElBQUk2QztJQUNKLElBQUkwRSxpQkFBaUIsTUFBTTtRQUN2QiwwREFBMEQ7UUFDMUQsMEVBQTBFO1FBQzFFLG9FQUFvRTtRQUNwRSxFQUFFO1FBQ0Ysd0VBQXdFO1FBQ3hFLHVCQUF1QjtRQUN2QixNQUFNLENBQUMzRSxlQUFlNkUsUUFBUSxHQUFHRjtRQUNqQzFFLE9BQXFCLFdBQUgsR0FBSSxJQUFHM0YsWUFBWXdLLEdBQUcsRUFBRS9FLE1BQU07WUFDNUNDLGVBQWVBO1FBQ25CLEdBQUc2RTtJQUNQLE9BQU87UUFDSDVFLE9BQU87SUFDWDtJQUNBLElBQUk4RSxVQUF3QixXQUFILEdBQUksSUFBR3pLLFlBQVkwSyxJQUFJLEVBQUU3SixrQkFBa0I4SixnQkFBZ0IsRUFBRTtRQUNsRkMsVUFBVTtZQUNOakY7WUFDQWdELE1BQU05RSxHQUFHO1lBQ1QsV0FBVyxHQUFJLElBQUc3RCxZQUFZd0ssR0FBRyxFQUFFNUosb0JBQW9CaUssa0JBQWtCLEVBQUU7Z0JBQ3ZFL0gsTUFBTUE7WUFDVjtTQUNIO0lBQ0w7SUFDQSxJQUFJYixJQUFxQyxFQUFFO1FBQ3ZDLElBQUksT0FBT2IsV0FBVyxhQUFhO1lBQy9CLE1BQU0wSiwwQkFBMEIvSyxtTEFBZ0U7WUFDaEcwSyxVQUF3QixXQUFILEdBQUksSUFBR3pLLFlBQVl3SyxHQUFHLEVBQUVNLHlCQUF5QjtnQkFDbEVGLFVBQXdCLFdBQUgsR0FBSSxJQUFHNUssWUFBWXdLLEdBQUcsRUFBRXJLLCtCQUErQjRLLGtCQUFrQixDQUFDQyxRQUFRLEVBQUU7b0JBQ3JHL0wsT0FBT3FIO29CQUNQc0UsVUFBVUg7Z0JBQ2Q7WUFDSjtRQUNKO1FBQ0EsTUFBTVEsY0FBY2xMLDBMQUEwRDtRQUM5RTBLLFVBQXdCLFdBQUgsR0FBSSxJQUFHekssWUFBWXdLLEdBQUcsRUFBRVMsYUFBYTtZQUN0RDVFLGFBQWFBO1lBQ2J1RSxVQUFVSDtRQUNkO0lBQ0o7SUFDQSxPQUFxQixXQUFILEdBQUksSUFBR3pLLFlBQVkwSyxJQUFJLEVBQUUxSyxZQUFZa0wsUUFBUSxFQUFFO1FBQzdETixVQUFVO1lBQ04sV0FBVyxHQUFJLElBQUc1SyxZQUFZd0ssR0FBRyxFQUFFL0gsZ0JBQWdCO2dCQUMvQ0UsZ0JBQWdCLENBQUMsR0FBR3BDLHdCQUF3QnNHLGNBQWMsRUFBRUg7Z0JBQzVEOUQsTUFBTUE7WUFDVjtZQUNBLFdBQVcsR0FBSSxJQUFHNUMsWUFBWXdLLEdBQUcsRUFBRWxLLGlDQUFpQzZLLGVBQWUsQ0FBQ0gsUUFBUSxFQUFFO2dCQUMxRi9MLE9BQU9tRDtnQkFDUHdJLFVBQXdCLFdBQUgsR0FBSSxJQUFHNUssWUFBWXdLLEdBQUcsRUFBRWxLLGlDQUFpQzhLLG1CQUFtQixDQUFDSixRQUFRLEVBQUU7b0JBQ3hHL0wsT0FBTzZDO29CQUNQOEksVUFBd0IsV0FBSCxHQUFJLElBQUc1SyxZQUFZd0ssR0FBRyxFQUFFckssK0JBQStCa0wseUJBQXlCLENBQUNMLFFBQVEsRUFBRTt3QkFDNUcvTCxPQUFPOzRCQUNIK0c7NEJBQ0FnQjs0QkFDQWxFOzRCQUNBc0g7NEJBQ0FEO3dCQUNKO3dCQUNBUyxVQUF3QixXQUFILEdBQUksSUFBRzVLLFlBQVl3SyxHQUFHLEVBQUVySywrQkFBK0JtTCxnQkFBZ0IsQ0FBQ04sUUFBUSxFQUFFOzRCQUNuRy9MLE9BQU9pSTs0QkFDUDBELFVBQXdCLFdBQUgsR0FBSSxJQUFHNUssWUFBWXdLLEdBQUcsRUFBRXJLLCtCQUErQm9MLG1CQUFtQixDQUFDUCxRQUFRLEVBQUU7Z0NBQ3RHL0wsT0FBTztvQ0FDSHVNLFlBQVk3QyxNQUFNNUUsY0FBYztvQ0FDaENqQjtvQ0FDQSw2QkFBNkI7b0NBQzdCLDhFQUE4RTtvQ0FDOUVyQixLQUFLdUI7Z0NBQ1Q7Z0NBQ0E0SCxVQUFVSDs0QkFDZDt3QkFDSjtvQkFDSjtnQkFDSjtZQUNKO1NBQ0g7SUFDTDtBQUNKO0dBN1ZhMUU7O1FBbUNzQnRCO1FBQ2RLO1FBQ2pCYjs7O01BckNTOEI7QUE4VmIsU0FBU2xHLFVBQVU0TCxLQUFLO0lBQ3BCLE1BQU0sRUFBRUMsb0JBQW9CLEVBQUUsR0FBR0MsTUFBTSxHQUFHRjtJQUMxQyxPQUFxQixXQUFILEdBQUksSUFBR3pMLFlBQVl3SyxHQUFHLEVBQUVoSyxlQUFlb0wsYUFBYSxFQUFFO1FBQ3BFQyxnQkFBZ0JIO1FBQ2hCZCxVQUF3QixXQUFILEdBQUksSUFBRzVLLFlBQVl3SyxHQUFHLEVBQUV6RSxRQUFRO1lBQ2pELEdBQUc0RixJQUFJO1FBQ1g7SUFDSjtBQUNKO01BUlM5TDtBQVVULElBQUksQ0FBQyxPQUFPYixRQUFRTSxPQUFPLEtBQUssY0FBZSxPQUFPTixRQUFRTSxPQUFPLEtBQUssWUFBWU4sUUFBUU0sT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPTixRQUFRTSxPQUFPLENBQUN3TSxVQUFVLEtBQUssYUFBYTtJQUNyS2hOLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUU0sT0FBTyxFQUFFLGNBQWM7UUFBRUwsT0FBTztJQUFLO0lBQ25FSCxPQUFPMEssTUFBTSxDQUFDeEssUUFBUU0sT0FBTyxFQUFFTjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRTSxPQUFPO0FBQ2xDLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci5qcz80MTU5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGdldFNlcnZlckFjdGlvbkRpc3BhdGNoZXI6IG51bGwsXG4gICAgdXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyOiBudWxsLFxuICAgIGNyZWF0ZUVtcHR5Q2FjaGVOb2RlOiBudWxsLFxuICAgIGRlZmF1bHQ6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZ2V0U2VydmVyQWN0aW9uRGlzcGF0Y2hlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyO1xuICAgIH0sXG4gICAgdXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlcjtcbiAgICB9LFxuICAgIGNyZWF0ZUVtcHR5Q2FjaGVOb2RlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Q2FjaGVOb2RlO1xuICAgIH0sXG4gICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBcHBSb3V0ZXI7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5jb25zdCBfcm91dGVycmVkdWNlcnR5cGVzID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXNcIik7XG5jb25zdCBfY3JlYXRlaHJlZmZyb211cmwgPSByZXF1aXJlKFwiLi9yb3V0ZXItcmVkdWNlci9jcmVhdGUtaHJlZi1mcm9tLXVybFwiKTtcbmNvbnN0IF9ob29rc2NsaWVudGNvbnRleHRzaGFyZWRydW50aW1lID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvaG9va3MtY2xpZW50LWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5jb25zdCBfdXNlcmVkdWNlcndpdGhkZXZ0b29scyA9IHJlcXVpcmUoXCIuL3VzZS1yZWR1Y2VyLXdpdGgtZGV2dG9vbHNcIik7XG5jb25zdCBfZXJyb3Jib3VuZGFyeSA9IHJlcXVpcmUoXCIuL2Vycm9yLWJvdW5kYXJ5XCIpO1xuY29uc3QgX2NyZWF0ZWluaXRpYWxyb3V0ZXJzdGF0ZSA9IHJlcXVpcmUoXCIuL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1pbml0aWFsLXJvdXRlci1zdGF0ZVwiKTtcbmNvbnN0IF9pc2JvdCA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1ib3RcIik7XG5jb25zdCBfYWRkYmFzZXBhdGggPSByZXF1aXJlKFwiLi4vYWRkLWJhc2UtcGF0aFwiKTtcbmNvbnN0IF9hcHByb3V0ZXJhbm5vdW5jZXIgPSByZXF1aXJlKFwiLi9hcHAtcm91dGVyLWFubm91bmNlclwiKTtcbmNvbnN0IF9yZWRpcmVjdGJvdW5kYXJ5ID0gcmVxdWlyZShcIi4vcmVkaXJlY3QtYm91bmRhcnlcIik7XG5jb25zdCBfZmluZGhlYWRpbmNhY2hlID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZmluZC1oZWFkLWluLWNhY2hlXCIpO1xuY29uc3QgX2luZmluaXRlcHJvbWlzZSA9IHJlcXVpcmUoXCIuL2luZmluaXRlLXByb21pc2VcIik7XG5jb25zdCBfYXBwcm91dGVyaGVhZGVycyA9IHJlcXVpcmUoXCIuL2FwcC1yb3V0ZXItaGVhZGVyc1wiKTtcbmNvbnN0IF9yZW1vdmViYXNlcGF0aCA9IHJlcXVpcmUoXCIuLi9yZW1vdmUtYmFzZS1wYXRoXCIpO1xuY29uc3QgX2hhc2Jhc2VwYXRoID0gcmVxdWlyZShcIi4uL2hhcy1iYXNlLXBhdGhcIik7XG5jb25zdCBpc1NlcnZlciA9IHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCI7XG4vLyBFbnN1cmUgdGhlIGluaXRpYWxQYXJhbGxlbFJvdXRlcyBhcmUgbm90IGNvbWJpbmVkIGJlY2F1c2Ugb2YgZG91YmxlLXJlbmRlcmluZyBpbiB0aGUgYnJvd3NlciB3aXRoIFN0cmljdCBNb2RlLlxubGV0IGluaXRpYWxQYXJhbGxlbFJvdXRlcyA9IGlzU2VydmVyID8gbnVsbCA6IG5ldyBNYXAoKTtcbmxldCBnbG9iYWxTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyID0gbnVsbDtcbmZ1bmN0aW9uIGdldFNlcnZlckFjdGlvbkRpc3BhdGNoZXIoKSB7XG4gICAgcmV0dXJuIGdsb2JhbFNlcnZlckFjdGlvbkRpc3BhdGNoZXI7XG59XG5jb25zdCBnbG9iYWxNdXRhYmxlID0ge307XG5mdW5jdGlvbiB1cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXIodXJsKSB7XG4gICAgY29uc3QgdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMgPSBuZXcgVVJMKHVybCwgbG9jYXRpb24ub3JpZ2luKTtcbiAgICB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycy5zZWFyY2hQYXJhbXMuZGVsZXRlKF9hcHByb3V0ZXJoZWFkZXJzLk5FWFRfUlNDX1VOSU9OX1FVRVJZKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ09ORklHX09VVFBVVCA9PT0gXCJleHBvcnRcIiAmJiB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycy5wYXRobmFtZS5lbmRzV2l0aChcIi50eHRcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcGF0aG5hbWUgfSA9IHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzO1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gcGF0aG5hbWUuZW5kc1dpdGgoXCIvaW5kZXgudHh0XCIpID8gMTAgOiA0O1xuICAgICAgICAgICAgLy8gU2xpY2Ugb2ZmIGAvaW5kZXgudHh0YCBvciBgLnR4dGAgZnJvbSB0aGUgZW5kIG9mIHRoZSBwYXRobmFtZVxuICAgICAgICAgICAgdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMucGF0aG5hbWUgPSBwYXRobmFtZS5zbGljZSgwLCAtbGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnM7XG59XG5mdW5jdGlvbiBpc0V4dGVybmFsVVJMKHVybCkge1xuICAgIHJldHVybiB1cmwub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xufVxuZnVuY3Rpb24gSGlzdG9yeVVwZGF0ZXIocGFyYW0pIHtcbiAgICBsZXQgeyBhcHBSb3V0ZXJTdGF0ZSwgc3luYyB9ID0gcGFyYW07XG4gICAgKDAsIF9yZWFjdC51c2VJbnNlcnRpb25FZmZlY3QpKCgpPT57XG4gICAgICAgIGNvbnN0IHsgdHJlZSwgcHVzaFJlZiwgY2Fub25pY2FsVXJsIH0gPSBhcHBSb3V0ZXJTdGF0ZTtcbiAgICAgICAgY29uc3QgaGlzdG9yeVN0YXRlID0ge1xuICAgICAgICAgICAgLi4ucHVzaFJlZi5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSA/IHdpbmRvdy5oaXN0b3J5LnN0YXRlIDoge30sXG4gICAgICAgICAgICAvLyBJZGVudGlmaWVyIGlzIHNob3J0ZW5lZCBpbnRlbnRpb25hbGx5LlxuICAgICAgICAgICAgLy8gX19OQSBpcyB1c2VkIHRvIGlkZW50aWZ5IGlmIHRoZSBoaXN0b3J5IGVudHJ5IGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBhcHAtcm91dGVyLlxuICAgICAgICAgICAgLy8gX19OIGlzIHVzZWQgdG8gaWRlbnRpZnkgaWYgdGhlIGhpc3RvcnkgZW50cnkgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIG9sZCByb3V0ZXIuXG4gICAgICAgICAgICBfX05BOiB0cnVlLFxuICAgICAgICAgICAgX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRTogdHJlZVxuICAgICAgICB9O1xuICAgICAgICBpZiAocHVzaFJlZi5wZW5kaW5nUHVzaCAmJiAvLyBTa2lwIHB1c2hpbmcgYW4gYWRkaXRpb25hbCBoaXN0b3J5IGVudHJ5IGlmIHRoZSBjYW5vbmljYWxVcmwgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgdXJsLlxuICAgICAgICAvLyBUaGlzIG1pcnJvcnMgdGhlIGJyb3dzZXIgYmVoYXZpb3IgZm9yIG5vcm1hbCBuYXZpZ2F0aW9uLlxuICAgICAgICAoMCwgX2NyZWF0ZWhyZWZmcm9tdXJsLmNyZWF0ZUhyZWZGcm9tVXJsKShuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSkgIT09IGNhbm9uaWNhbFVybCkge1xuICAgICAgICAgICAgLy8gVGhpcyBpbnRlbnRpb25hbGx5IG11dGF0ZXMgUmVhY3Qgc3RhdGUsIHB1c2hSZWYgaXMgb3ZlcndyaXR0ZW4gdG8gZW5zdXJlIGFkZGl0aW9uYWwgcHVzaC9yZXBsYWNlIGNhbGxzIGRvIG5vdCB0cmlnZ2VyIGFuIGFkZGl0aW9uYWwgaGlzdG9yeSBlbnRyeS5cbiAgICAgICAgICAgIHB1c2hSZWYucGVuZGluZ1B1c2ggPSBmYWxzZTtcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShoaXN0b3J5U3RhdGUsIFwiXCIsIGNhbm9uaWNhbFVybCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoaGlzdG9yeVN0YXRlLCBcIlwiLCBjYW5vbmljYWxVcmwpO1xuICAgICAgICB9XG4gICAgICAgIHN5bmMoYXBwUm91dGVyU3RhdGUpO1xuICAgIH0sIFtcbiAgICAgICAgYXBwUm91dGVyU3RhdGUsXG4gICAgICAgIHN5bmNcbiAgICBdKTtcbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUVtcHR5Q2FjaGVOb2RlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICByc2M6IG51bGwsXG4gICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpLFxuICAgICAgICBsYXp5RGF0YVJlc29sdmVkOiBmYWxzZVxuICAgIH07XG59XG5mdW5jdGlvbiB1c2VTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyKGRpc3BhdGNoKSB7XG4gICAgY29uc3Qgc2VydmVyQWN0aW9uRGlzcGF0Y2hlciA9ICgwLCBfcmVhY3QudXNlQ2FsbGJhY2spKChhY3Rpb25QYXlsb2FkKT0+e1xuICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAuLi5hY3Rpb25QYXlsb2FkLFxuICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1NFUlZFUl9BQ1RJT05cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9LCBbXG4gICAgICAgIGRpc3BhdGNoXG4gICAgXSk7XG4gICAgZ2xvYmFsU2VydmVyQWN0aW9uRGlzcGF0Y2hlciA9IHNlcnZlckFjdGlvbkRpc3BhdGNoZXI7XG59XG4vKipcbiAqIFNlcnZlciByZXNwb25zZSB0aGF0IG9ubHkgcGF0Y2hlcyB0aGUgY2FjaGUgYW5kIHRyZWUuXG4gKi8gZnVuY3Rpb24gdXNlQ2hhbmdlQnlTZXJ2ZXJSZXNwb25zZShkaXNwYXRjaCkge1xuICAgIHJldHVybiAoMCwgX3JlYWN0LnVzZUNhbGxiYWNrKSgocHJldmlvdXNUcmVlLCBmbGlnaHREYXRhLCBvdmVycmlkZUNhbm9uaWNhbFVybCk9PntcbiAgICAgICAgKDAsIF9yZWFjdC5zdGFydFRyYW5zaXRpb24pKCgpPT57XG4gICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fU0VSVkVSX1BBVENILFxuICAgICAgICAgICAgICAgIGZsaWdodERhdGEsXG4gICAgICAgICAgICAgICAgcHJldmlvdXNUcmVlLFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlQ2Fub25pY2FsVXJsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSwgW1xuICAgICAgICBkaXNwYXRjaFxuICAgIF0pO1xufVxuZnVuY3Rpb24gdXNlTmF2aWdhdGUoZGlzcGF0Y2gpIHtcbiAgICByZXR1cm4gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKGhyZWYsIG5hdmlnYXRlVHlwZSwgc2hvdWxkU2Nyb2xsKT0+e1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKCgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKGhyZWYpLCBsb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX05BVklHQVRFLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgaXNFeHRlcm5hbFVybDogaXNFeHRlcm5hbFVSTCh1cmwpLFxuICAgICAgICAgICAgbG9jYXRpb25TZWFyY2g6IGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgICAgIHNob3VsZFNjcm9sbDogc2hvdWxkU2Nyb2xsICE9IG51bGwgPyBzaG91bGRTY3JvbGwgOiB0cnVlLFxuICAgICAgICAgICAgbmF2aWdhdGVUeXBlXG4gICAgICAgIH0pO1xuICAgIH0sIFtcbiAgICAgICAgZGlzcGF0Y2hcbiAgICBdKTtcbn1cbmZ1bmN0aW9uIGNvcHlOZXh0SnNJbnRlcm5hbEhpc3RvcnlTdGF0ZShkYXRhKSB7XG4gICAgaWYgKGRhdGEgPT0gbnVsbCkgZGF0YSA9IHt9O1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnN0YXRlO1xuICAgIGNvbnN0IF9fTkEgPSBjdXJyZW50U3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IGN1cnJlbnRTdGF0ZS5fX05BO1xuICAgIGlmIChfX05BKSB7XG4gICAgICAgIGRhdGEuX19OQSA9IF9fTkE7XG4gICAgfVxuICAgIGNvbnN0IF9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUgPSBjdXJyZW50U3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IGN1cnJlbnRTdGF0ZS5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFO1xuICAgIGlmIChfX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFKSB7XG4gICAgICAgIGRhdGEuX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRSA9IF9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUU7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufVxuZnVuY3Rpb24gSGVhZChwYXJhbSkge1xuICAgIGxldCB7IGhlYWRDYWNoZU5vZGUgfSA9IHBhcmFtO1xuICAgIC8vIElmIHRoaXMgc2VnbWVudCBoYXMgYSBgcHJlZmV0Y2hIZWFkYCwgaXQncyB0aGUgc3RhdGljYWxseSBwcmVmZXRjaGVkIGRhdGEuXG4gICAgLy8gV2Ugc2hvdWxkIHVzZSB0aGF0IG9uIGluaXRpYWwgcmVuZGVyIGluc3RlYWQgb2YgYGhlYWRgLiBUaGVuIHdlJ2xsIHN3aXRjaFxuICAgIC8vIHRvIGBoZWFkYCB3aGVuIHRoZSBkeW5hbWljIHJlc3BvbnNlIHN0cmVhbXMgaW4uXG4gICAgY29uc3QgaGVhZCA9IGhlYWRDYWNoZU5vZGUgIT09IG51bGwgPyBoZWFkQ2FjaGVOb2RlLmhlYWQgOiBudWxsO1xuICAgIGNvbnN0IHByZWZldGNoSGVhZCA9IGhlYWRDYWNoZU5vZGUgIT09IG51bGwgPyBoZWFkQ2FjaGVOb2RlLnByZWZldGNoSGVhZCA6IG51bGw7XG4gICAgLy8gSWYgbm8gcHJlZmV0Y2ggZGF0YSBpcyBhdmFpbGFibGUsIHRoZW4gd2UgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIGBoZWFkYC5cbiAgICBjb25zdCByZXNvbHZlZFByZWZldGNoUnNjID0gcHJlZmV0Y2hIZWFkICE9PSBudWxsID8gcHJlZmV0Y2hIZWFkIDogaGVhZDtcbiAgICAvLyBXZSB1c2UgYHVzZURlZmVycmVkVmFsdWVgIHRvIGhhbmRsZSBzd2l0Y2hpbmcgYmV0d2VlbiB0aGUgcHJlZmV0Y2hlZCBhbmRcbiAgICAvLyBmaW5hbCB2YWx1ZXMuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgcmV0dXJuZWQgb24gaW5pdGlhbCByZW5kZXIsIHRoZW4gaXRcbiAgICAvLyByZS1yZW5kZXJzIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50LlxuICAgIC8vXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGB1c2VEZWZlcnJlZFZhbHVlYCBpcyBvbmx5XG4gICAgLy8gYXZhaWxhYmxlIGluIHRoZSBleHBlcmltZW50YWwgYnVpbGRzLiBXaGVuIGl0cyBkaXNhYmxlZCwgaXQgd2lsbCBhbHdheXNcbiAgICAvLyByZXR1cm4gYGhlYWRgLlxuICAgIHJldHVybiAoMCwgX3JlYWN0LnVzZURlZmVycmVkVmFsdWUpKGhlYWQsIHJlc29sdmVkUHJlZmV0Y2hSc2MpO1xufVxuLyoqXG4gKiBUaGUgZ2xvYmFsIHJvdXRlciB0aGF0IHdyYXBzIHRoZSBhcHBsaWNhdGlvbiBjb21wb25lbnRzLlxuICovIGZ1bmN0aW9uIFJvdXRlcihwYXJhbSkge1xuICAgIGxldCB7IGJ1aWxkSWQsIGluaXRpYWxIZWFkLCBpbml0aWFsVHJlZSwgaW5pdGlhbENhbm9uaWNhbFVybCwgaW5pdGlhbFNlZWREYXRhLCBhc3NldFByZWZpeCwgbWlzc2luZ1Nsb3RzIH0gPSBwYXJhbTtcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSAoMCwgX3JlYWN0LnVzZU1lbW8pKCgpPT4oMCwgX2NyZWF0ZWluaXRpYWxyb3V0ZXJzdGF0ZS5jcmVhdGVJbml0aWFsUm91dGVyU3RhdGUpKHtcbiAgICAgICAgICAgIGJ1aWxkSWQsXG4gICAgICAgICAgICBpbml0aWFsU2VlZERhdGEsXG4gICAgICAgICAgICBpbml0aWFsQ2Fub25pY2FsVXJsLFxuICAgICAgICAgICAgaW5pdGlhbFRyZWUsXG4gICAgICAgICAgICBpbml0aWFsUGFyYWxsZWxSb3V0ZXMsXG4gICAgICAgICAgICBpc1NlcnZlcixcbiAgICAgICAgICAgIGxvY2F0aW9uOiAhaXNTZXJ2ZXIgPyB3aW5kb3cubG9jYXRpb24gOiBudWxsLFxuICAgICAgICAgICAgaW5pdGlhbEhlYWRcbiAgICAgICAgfSksIFtcbiAgICAgICAgYnVpbGRJZCxcbiAgICAgICAgaW5pdGlhbFNlZWREYXRhLFxuICAgICAgICBpbml0aWFsQ2Fub25pY2FsVXJsLFxuICAgICAgICBpbml0aWFsVHJlZSxcbiAgICAgICAgaW5pdGlhbEhlYWRcbiAgICBdKTtcbiAgICBjb25zdCBbcmVkdWNlclN0YXRlLCBkaXNwYXRjaCwgc3luY10gPSAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlUmVkdWNlcldpdGhSZWR1eERldnRvb2xzKShpbml0aWFsU3RhdGUpO1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICAvLyBFbnN1cmUgaW5pdGlhbFBhcmFsbGVsUm91dGVzIGlzIGNsZWFuZWQgdXAgZnJvbSBtZW1vcnkgb25jZSBpdCdzIHVzZWQuXG4gICAgICAgIGluaXRpYWxQYXJhbGxlbFJvdXRlcyA9IG51bGw7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IHsgY2Fub25pY2FsVXJsIH0gPSAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlVW53cmFwU3RhdGUpKHJlZHVjZXJTdGF0ZSk7XG4gICAgLy8gQWRkIG1lbW9pemVkIHBhdGhuYW1lL3F1ZXJ5IGZvciB1c2VTZWFyY2hQYXJhbXMgYW5kIHVzZVBhdGhuYW1lLlxuICAgIGNvbnN0IHsgc2VhcmNoUGFyYW1zLCBwYXRobmFtZSB9ID0gKDAsIF9yZWFjdC51c2VNZW1vKSgoKT0+e1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGNhbm9uaWNhbFVybCwgdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwiaHR0cDovL25cIiA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdHVybmVkIGludG8gYSByZWFkb25seSBjbGFzcyBpbiBgdXNlU2VhcmNoUGFyYW1zYFxuICAgICAgICAgICAgc2VhcmNoUGFyYW1zOiB1cmwuc2VhcmNoUGFyYW1zLFxuICAgICAgICAgICAgcGF0aG5hbWU6ICgwLCBfaGFzYmFzZXBhdGguaGFzQmFzZVBhdGgpKHVybC5wYXRobmFtZSkgPyAoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKSh1cmwucGF0aG5hbWUpIDogdXJsLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBjYW5vbmljYWxVcmxcbiAgICBdKTtcbiAgICBjb25zdCBjaGFuZ2VCeVNlcnZlclJlc3BvbnNlID0gdXNlQ2hhbmdlQnlTZXJ2ZXJSZXNwb25zZShkaXNwYXRjaCk7XG4gICAgY29uc3QgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZShkaXNwYXRjaCk7XG4gICAgdXNlU2VydmVyQWN0aW9uRGlzcGF0Y2hlcihkaXNwYXRjaCk7XG4gICAgLyoqXG4gICAqIFRoZSBhcHAgcm91dGVyIHRoYXQgaXMgZXhwb3NlZCB0aHJvdWdoIGB1c2VSb3V0ZXJgLiBJdCdzIG9ubHkgY29uY2VybmVkIHdpdGggZGlzcGF0Y2hpbmcgYWN0aW9ucyB0byB0aGUgcmVkdWNlciwgZG9lcyBub3QgaG9sZCBzdGF0ZS5cbiAgICovIGNvbnN0IGFwcFJvdXRlciA9ICgwLCBfcmVhY3QudXNlTWVtbykoKCk9PntcbiAgICAgICAgY29uc3Qgcm91dGVySW5zdGFuY2UgPSB7XG4gICAgICAgICAgICBiYWNrOiAoKT0+d2luZG93Lmhpc3RvcnkuYmFjaygpLFxuICAgICAgICAgICAgZm9yd2FyZDogKCk9PndpbmRvdy5oaXN0b3J5LmZvcndhcmQoKSxcbiAgICAgICAgICAgIHByZWZldGNoOiAoaHJlZiwgb3B0aW9ucyk9PntcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBwcmVmZXRjaCBmb3IgYm90cyBhcyB0aGV5IGRvbid0IG5hdmlnYXRlLlxuICAgICAgICAgICAgICAgIC8vIERvbid0IHByZWZldGNoIGR1cmluZyBkZXZlbG9wbWVudCAoaW1wcm92ZXMgY29tcGlsYXRpb24gcGVyZm9ybWFuY2UpXG4gICAgICAgICAgICAgICAgaWYgKCgwLCBfaXNib3QuaXNCb3QpKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCgoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKShocmVmKSwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgICAgICAgICAgIC8vIEV4dGVybmFsIHVybHMgY2FuJ3QgYmUgcHJlZmV0Y2hlZCBpbiB0aGUgc2FtZSB3YXkuXG4gICAgICAgICAgICAgICAgaWYgKGlzRXh0ZXJuYWxVUkwodXJsKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgICAgICAgICB2YXIgX29wdGlvbnNfa2luZDtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fUFJFRkVUQ0gsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kOiAoX29wdGlvbnNfa2luZCA9IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMua2luZCkgIT0gbnVsbCA/IF9vcHRpb25zX2tpbmQgOiBfcm91dGVycmVkdWNlcnR5cGVzLlByZWZldGNoS2luZC5GVUxMXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcGxhY2U6IChocmVmLCBvcHRpb25zKT0+e1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9vcHRpb25zX3Njcm9sbDtcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGUoaHJlZiwgXCJyZXBsYWNlXCIsIChfb3B0aW9uc19zY3JvbGwgPSBvcHRpb25zLnNjcm9sbCkgIT0gbnVsbCA/IF9vcHRpb25zX3Njcm9sbCA6IHRydWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHB1c2g6IChocmVmLCBvcHRpb25zKT0+e1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9vcHRpb25zX3Njcm9sbDtcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGUoaHJlZiwgXCJwdXNoXCIsIChfb3B0aW9uc19zY3JvbGwgPSBvcHRpb25zLnNjcm9sbCkgIT0gbnVsbCA/IF9vcHRpb25zX3Njcm9sbCA6IHRydWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlZnJlc2g6ICgpPT57XG4gICAgICAgICAgICAgICAgKDAsIF9yZWFjdC5zdGFydFRyYW5zaXRpb24pKCgpPT57XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1JFRlJFU0gsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSB3ZSBkb24ndCB3YW50IHRvIGV4cG9zZSB0aGlzIG1ldGhvZCBhdCBhbGxcbiAgICAgICAgICAgIGZhc3RSZWZyZXNoOiAoKT0+e1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhc3RSZWZyZXNoIGNhbiBvbmx5IGJlIHVzZWQgaW4gZGV2ZWxvcG1lbnQgbW9kZS4gUGxlYXNlIHVzZSByZWZyZXNoIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX0ZBU1RfUkVGUkVTSCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByb3V0ZXJJbnN0YW5jZTtcbiAgICB9LCBbXG4gICAgICAgIGRpc3BhdGNoLFxuICAgICAgICBuYXZpZ2F0ZVxuICAgIF0pO1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICAvLyBFeGlzdHMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gRG9uJ3QgdXNlIGluIGFwcGxpY2F0aW9uIGNvZGUuXG4gICAgICAgIGlmICh3aW5kb3cubmV4dCkge1xuICAgICAgICAgICAgd2luZG93Lm5leHQucm91dGVyID0gYXBwUm91dGVyO1xuICAgICAgICB9XG4gICAgfSwgW1xuICAgICAgICBhcHBSb3V0ZXJcbiAgICBdKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgICAgICBjb25zdCB7IGNhY2hlLCBwcmVmZXRjaENhY2hlLCB0cmVlIH0gPSAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlVW53cmFwU3RhdGUpKHJlZHVjZXJTdGF0ZSk7XG4gICAgICAgIC8vIFRoaXMgaG9vayBpcyBpbiBhIGNvbmRpdGlvbmFsIGJ1dCB0aGF0IGlzIG9rIGJlY2F1c2UgYHByb2Nlc3MuZW52Lk5PREVfRU5WYCBuZXZlciBjaGFuZ2VzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgICAgICAoMCwgX3JlYWN0LnVzZUVmZmVjdCkoKCk9PntcbiAgICAgICAgICAgIC8vIEFkZCBgd2luZG93Lm5kYCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgbWVhbnQgZm9yIHVzZSBpbiBhcHBsaWNhdGlvbnMgYXMgY29uY3VycmVudCByZW5kZXJpbmcgd2lsbCBhZmZlY3QgdGhlIGNhY2hlL3RyZWUvcm91dGVyLlxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSB0aGlzIGlzIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgICAgIHdpbmRvdy5uZCA9IHtcbiAgICAgICAgICAgICAgICByb3V0ZXI6IGFwcFJvdXRlcixcbiAgICAgICAgICAgICAgICBjYWNoZSxcbiAgICAgICAgICAgICAgICBwcmVmZXRjaENhY2hlLFxuICAgICAgICAgICAgICAgIHRyZWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sIFtcbiAgICAgICAgICAgIGFwcFJvdXRlcixcbiAgICAgICAgICAgIGNhY2hlLFxuICAgICAgICAgICAgcHJlZmV0Y2hDYWNoZSxcbiAgICAgICAgICAgIHRyZWVcbiAgICAgICAgXSk7XG4gICAgfVxuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICAvLyBJZiB0aGUgYXBwIGlzIHJlc3RvcmVkIGZyb20gYmZjYWNoZSwgaXQncyBwb3NzaWJsZSB0aGF0XG4gICAgICAgIC8vIHB1c2hSZWYubXBhTmF2aWdhdGlvbiBpcyB0cnVlLCB3aGljaCB3b3VsZCBtZWFuIHRoYXQgYW55IHJlLXJlbmRlciBvZiB0aGlzIGNvbXBvbmVudFxuICAgICAgICAvLyB3b3VsZCB0cmlnZ2VyIHRoZSBtcGEgbmF2aWdhdGlvbiBsb2dpYyBhZ2FpbiBmcm9tIHRoZSBsaW5lcyBiZWxvdy5cbiAgICAgICAgLy8gVGhpcyB3aWxsIHJlc3RvcmUgdGhlIHJvdXRlciB0byB0aGUgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgYXBwIGlzIHJlc3RvcmVkIGZyb20gYmZjYWNoZS5cbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUGFnZVNob3coZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBfd2luZG93X2hpc3Rvcnlfc3RhdGU7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnBlcnNpc3RlZCB8fCAhKChfd2luZG93X2hpc3Rvcnlfc3RhdGUgPSB3aW5kb3cuaGlzdG9yeS5zdGF0ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3dfaGlzdG9yeV9zdGF0ZS5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9SRVNUT1JFLFxuICAgICAgICAgICAgICAgIHVybDogbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksXG4gICAgICAgICAgICAgICAgdHJlZTogd2luZG93Lmhpc3Rvcnkuc3RhdGUuX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlc2hvd1wiLCBoYW5kbGVQYWdlU2hvdyk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwYWdlc2hvd1wiLCBoYW5kbGVQYWdlU2hvdyk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBkaXNwYXRjaFxuICAgIF0pO1xuICAgIC8vIFdoZW4gbXBhTmF2aWdhdGlvbiBmbGFnIGlzIHNldCBkbyBhIGhhcmQgbmF2aWdhdGlvbiB0byB0aGUgbmV3IHVybC5cbiAgICAvLyBJbmZpbml0ZWx5IHN1c3BlbmQgYmVjYXVzZSB3ZSBkb24ndCBhY3R1YWxseSB3YW50IHRvIHJlcmVuZGVyIGFueSBjaGlsZFxuICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgbmV3IFVSTCBhbmQgYW55IGVudGFuZ2xlZCBzdGF0ZSB1cGRhdGVzIHNob3VsZG4ndFxuICAgIC8vIGNvbW1pdCBlaXRoZXIgKGVnOiB1c2VUcmFuc2l0aW9uIGlzUGVuZGluZyBzaG91bGQgc3RheSB0cnVlIHVudGlsIHRoZSBwYWdlXG4gICAgLy8gdW5sb2FkcykuXG4gICAgLy9cbiAgICAvLyBUaGlzIGlzIGEgc2lkZSBlZmZlY3QgaW4gcmVuZGVyLiBEb24ndCB0cnkgdGhpcyBhdCBob21lLCBraWRzLiBJdCdzXG4gICAgLy8gcHJvYmFibHkgc2FmZSBiZWNhdXNlIHdlIGtub3cgdGhpcyBpcyBhIHNpbmdsZXRvbiBjb21wb25lbnQgYW5kIGl0J3MgbmV2ZXJcbiAgICAvLyBpbiA8T2Zmc2NyZWVuPi4gQXQgbGVhc3QgSSBob3BlIHNvLiAoSXQgd2lsbCBydW4gdHdpY2UgaW4gZGV2IHN0cmljdCBtb2RlLFxuICAgIC8vIGJ1dCB0aGF0J3MuLi4gZmluZT8pXG4gICAgY29uc3QgeyBwdXNoUmVmIH0gPSAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlVW53cmFwU3RhdGUpKHJlZHVjZXJTdGF0ZSk7XG4gICAgaWYgKHB1c2hSZWYubXBhTmF2aWdhdGlvbikge1xuICAgICAgICAvLyBpZiB0aGVyZSdzIGEgcmUtcmVuZGVyLCB3ZSBkb24ndCB3YW50IHRvIHRyaWdnZXIgYW5vdGhlciByZWRpcmVjdCBpZiBvbmUgaXMgYWxyZWFkeSBpbiBmbGlnaHQgdG8gdGhlIHNhbWUgVVJMXG4gICAgICAgIGlmIChnbG9iYWxNdXRhYmxlLnBlbmRpbmdNcGFQYXRoICE9PSBjYW5vbmljYWxVcmwpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uMSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgICAgICAgIGlmIChwdXNoUmVmLnBlbmRpbmdQdXNoKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24xLmFzc2lnbihjYW5vbmljYWxVcmwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjEucmVwbGFjZShjYW5vbmljYWxVcmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ2xvYmFsTXV0YWJsZS5wZW5kaW5nTXBhUGF0aCA9IGNhbm9uaWNhbFVybDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPLUFQUDogU2hvdWxkIHdlIGxpc3RlbiB0byBuYXZpZ2F0ZWVycm9yIGhlcmUgdG8gY2F0Y2ggZmFpbGVkXG4gICAgICAgIC8vIG5hdmlnYXRpb25zIHNvbWVob3c/IEFuZCBzaG91bGQgd2UgY2FsbCB3aW5kb3cuc3RvcCgpIGlmIGEgU1BBIG5hdmlnYXRpb25cbiAgICAgICAgLy8gc2hvdWxkIGludGVycnVwdCBhbiBNUEEgb25lP1xuICAgICAgICAoMCwgX3JlYWN0LnVzZSkoKDAsIF9pbmZpbml0ZXByb21pc2UuY3JlYXRlSW5maW5pdGVQcm9taXNlKSgpKTtcbiAgICB9XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUHVzaFN0YXRlID0gd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlLmJpbmQod2luZG93Lmhpc3RvcnkpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcGxhY2VTdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZS5iaW5kKHdpbmRvdy5oaXN0b3J5KTtcbiAgICAgICAgLy8gRW5zdXJlIHRoZSBjYW5vbmljYWwgVVJMIGluIHRoZSBOZXh0LmpzIFJvdXRlciBpcyB1cGRhdGVkIHdoZW4gdGhlIFVSTCBpcyBjaGFuZ2VkIHNvIHRoYXQgYHVzZVBhdGhuYW1lYCBhbmQgYHVzZVNlYXJjaFBhcmFtc2AgaG9sZCB0aGUgcHVzaGVkIHZhbHVlcy5cbiAgICAgICAgY29uc3QgYXBwbHlVcmxGcm9tSGlzdG9yeVB1c2hSZXBsYWNlID0gKHVybCk9PntcbiAgICAgICAgICAgIHZhciBfd2luZG93X2hpc3Rvcnlfc3RhdGU7XG4gICAgICAgICAgICBjb25zdCBocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICAgICAgICBjb25zdCB0cmVlID0gKF93aW5kb3dfaGlzdG9yeV9zdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnN0YXRlKSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvd19oaXN0b3J5X3N0YXRlLl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUU7XG4gICAgICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1JFU1RPUkUsXG4gICAgICAgICAgICAgICAgICAgIHVybDogbmV3IFVSTCh1cmwgIT0gbnVsbCA/IHVybCA6IGhyZWYsIGhyZWYpLFxuICAgICAgICAgICAgICAgICAgICB0cmVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICogUGF0Y2ggcHVzaFN0YXRlIHRvIGVuc3VyZSBleHRlcm5hbCBjaGFuZ2VzIHRvIHRoZSBoaXN0b3J5IGFyZSByZWZsZWN0ZWQgaW4gdGhlIE5leHQuanMgUm91dGVyLlxuICAgICAqIEVuc3VyZXMgTmV4dC5qcyBpbnRlcm5hbCBoaXN0b3J5IHN0YXRlIGlzIGNvcGllZCB0byB0aGUgbmV3IGhpc3RvcnkgZW50cnkuXG4gICAgICogRW5zdXJlcyB1c2VQYXRobmFtZSBhbmQgdXNlU2VhcmNoUGFyYW1zIGhvbGQgdGhlIG5ld2x5IHByb3ZpZGVkIHVybC5cbiAgICAgKi8gd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlID0gZnVuY3Rpb24gcHVzaFN0YXRlKGRhdGEsIF91bnVzZWQsIHVybCkge1xuICAgICAgICAgICAgLy8gQXZvaWQgYSBsb29wIHdoZW4gTmV4dC5qcyBpbnRlcm5hbHMgdHJpZ2dlciBwdXNoU3RhdGUvcmVwbGFjZVN0YXRlXG4gICAgICAgICAgICBpZiAoKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuX19OQSkgfHwgKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuX04pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUHVzaFN0YXRlKGRhdGEsIF91bnVzZWQsIHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gY29weU5leHRKc0ludGVybmFsSGlzdG9yeVN0YXRlKGRhdGEpO1xuICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgIGFwcGx5VXJsRnJvbUhpc3RvcnlQdXNoUmVwbGFjZSh1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUHVzaFN0YXRlKGRhdGEsIF91bnVzZWQsIHVybCk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAqIFBhdGNoIHJlcGxhY2VTdGF0ZSB0byBlbnN1cmUgZXh0ZXJuYWwgY2hhbmdlcyB0byB0aGUgaGlzdG9yeSBhcmUgcmVmbGVjdGVkIGluIHRoZSBOZXh0LmpzIFJvdXRlci5cbiAgICAgKiBFbnN1cmVzIE5leHQuanMgaW50ZXJuYWwgaGlzdG9yeSBzdGF0ZSBpcyBjb3BpZWQgdG8gdGhlIG5ldyBoaXN0b3J5IGVudHJ5LlxuICAgICAqIEVuc3VyZXMgdXNlUGF0aG5hbWUgYW5kIHVzZVNlYXJjaFBhcmFtcyBob2xkIHRoZSBuZXdseSBwcm92aWRlZCB1cmwuXG4gICAgICovIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSA9IGZ1bmN0aW9uIHJlcGxhY2VTdGF0ZShkYXRhLCBfdW51c2VkLCB1cmwpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkIGEgbG9vcCB3aGVuIE5leHQuanMgaW50ZXJuYWxzIHRyaWdnZXIgcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZVxuICAgICAgICAgICAgaWYgKChkYXRhID09IG51bGwgPyB2b2lkIDAgOiBkYXRhLl9fTkEpIHx8IChkYXRhID09IG51bGwgPyB2b2lkIDAgOiBkYXRhLl9OKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFJlcGxhY2VTdGF0ZShkYXRhLCBfdW51c2VkLCB1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YSA9IGNvcHlOZXh0SnNJbnRlcm5hbEhpc3RvcnlTdGF0ZShkYXRhKTtcbiAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgICBhcHBseVVybEZyb21IaXN0b3J5UHVzaFJlcGxhY2UodXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFJlcGxhY2VTdGF0ZShkYXRhLCBfdW51c2VkLCB1cmwpO1xuICAgICAgICB9O1xuICAgICAgICAvKipcbiAgICAgKiBIYW5kbGUgcG9wc3RhdGUgZXZlbnQsIHRoaXMgaXMgdXNlZCB0byBoYW5kbGUgYmFjay9mb3J3YXJkIGluIHRoZSBicm93c2VyLlxuICAgICAqIEJ5IGRlZmF1bHQgZGlzcGF0Y2hlcyBBQ1RJT05fUkVTVE9SRSwgaG93ZXZlciBpZiB0aGUgaGlzdG9yeSBlbnRyeSB3YXMgbm90IHB1c2hlZC9yZXBsYWNlZCBieSBhcHAtcm91dGVyIGl0IHdpbGwgcmVsb2FkIHRoZSBwYWdlLlxuICAgICAqIFRoYXQgY2FzZSBjYW4gaGFwcGVuIHdoZW4gdGhlIG9sZCByb3V0ZXIgaW5qZWN0ZWQgdGhlIGhpc3RvcnkgZW50cnkuXG4gICAgICovIGNvbnN0IG9uUG9wU3RhdGUgPSAocGFyYW0pPT57XG4gICAgICAgICAgICBsZXQgeyBzdGF0ZSB9ID0gcGFyYW07XG4gICAgICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETy1BUFA6IHRoaXMgY2FzZSBvbmx5IGhhcHBlbnMgd2hlbiBwdXNoU3RhdGUvcmVwbGFjZVN0YXRlIHdhcyBjYWxsZWQgb3V0c2lkZSBvZiBOZXh0LmpzLiBJdCBzaG91bGQgcHJvYmFibHkgcmVsb2FkIHRoZSBwYWdlIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGlzIGNhc2UgaGFwcGVucyB3aGVuIHRoZSBoaXN0b3J5IGVudHJ5IHdhcyBwdXNoZWQgYnkgdGhlIGBwYWdlc2Agcm91dGVyLlxuICAgICAgICAgICAgaWYgKCFzdGF0ZS5fX05BKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRPRE8tQVBQOiBJZGVhbGx5IHRoZSBiYWNrIGJ1dHRvbiBzaG91bGQgbm90IHVzZSBzdGFydFRyYW5zaXRpb24gYXMgaXQgc2hvdWxkIGFwcGx5IHRoZSB1cGRhdGVzIHN5bmNocm9ub3VzbHlcbiAgICAgICAgICAgIC8vIFdpdGhvdXQgc3RhcnRUcmFuc2l0aW9uIHdvcmtzIGlmIHRoZSBjYWNoZSBpcyB0aGVyZSBmb3IgdGhpcyBwYXRoXG4gICAgICAgICAgICAoMCwgX3JlYWN0LnN0YXJ0VHJhbnNpdGlvbikoKCk9PntcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1JFU1RPUkUsXG4gICAgICAgICAgICAgICAgICAgIHVybDogbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksXG4gICAgICAgICAgICAgICAgICAgIHRyZWU6IHN0YXRlLl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBSZWdpc3RlciBwb3BzdGF0ZSBldmVudCB0byBjYWxsIG9uUG9wc3RhdGUuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgb25Qb3BTdGF0ZSk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlID0gb3JpZ2luYWxQdXNoU3RhdGU7XG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUgPSBvcmlnaW5hbFJlcGxhY2VTdGF0ZTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgb25Qb3BTdGF0ZSk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBkaXNwYXRjaFxuICAgIF0pO1xuICAgIGNvbnN0IHsgY2FjaGUsIHRyZWUsIG5leHRVcmwsIGZvY3VzQW5kU2Nyb2xsUmVmIH0gPSAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlVW53cmFwU3RhdGUpKHJlZHVjZXJTdGF0ZSk7XG4gICAgY29uc3QgbWF0Y2hpbmdIZWFkID0gKDAsIF9yZWFjdC51c2VNZW1vKSgoKT0+e1xuICAgICAgICByZXR1cm4gKDAsIF9maW5kaGVhZGluY2FjaGUuZmluZEhlYWRJbkNhY2hlKShjYWNoZSwgdHJlZVsxXSk7XG4gICAgfSwgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAgdHJlZVxuICAgIF0pO1xuICAgIGxldCBoZWFkO1xuICAgIGlmIChtYXRjaGluZ0hlYWQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhlIGhlYWQgaXMgd3JhcHBlZCBpbiBhbiBleHRyYSBjb21wb25lbnQgc28gd2UgY2FuIHVzZVxuICAgICAgICAvLyBgdXNlRGVmZXJyZWRWYWx1ZWAgdG8gc3dhcCBiZXR3ZWVuIHRoZSBwcmVmZXRjaGVkIGFuZCBmaW5hbCB2ZXJzaW9ucyBvZlxuICAgICAgICAvLyB0aGUgaGVhZC4gKFRoaXMgaXMgd2hhdCBMYXlvdXRSb3V0ZXIgZG9lcyBmb3Igc2VnbWVudCBkYXRhLCB0b28uKVxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgYGtleWAgaXMgdXNlZCB0byByZW1vdW50IHRoZSBjb21wb25lbnQgd2hlbmV2ZXIgdGhlIGhlYWQgbW92ZXMgdG9cbiAgICAgICAgLy8gYSBkaWZmZXJlbnQgc2VnbWVudC5cbiAgICAgICAgY29uc3QgW2hlYWRDYWNoZU5vZGUsIGhlYWRLZXldID0gbWF0Y2hpbmdIZWFkO1xuICAgICAgICBoZWFkID0gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShIZWFkLCB7XG4gICAgICAgICAgICBoZWFkQ2FjaGVOb2RlOiBoZWFkQ2FjaGVOb2RlXG4gICAgICAgIH0sIGhlYWRLZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWQgPSBudWxsO1xuICAgIH1cbiAgICBsZXQgY29udGVudCA9IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9yZWRpcmVjdGJvdW5kYXJ5LlJlZGlyZWN0Qm91bmRhcnksIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIGhlYWQsXG4gICAgICAgICAgICBjYWNoZS5yc2MsXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9hcHByb3V0ZXJhbm5vdW5jZXIuQXBwUm91dGVyQW5ub3VuY2VyLCB7XG4gICAgICAgICAgICAgICAgdHJlZTogdHJlZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IERldlJvb3ROb3RGb3VuZEJvdW5kYXJ5ID0gcmVxdWlyZShcIi4vZGV2LXJvb3Qtbm90LWZvdW5kLWJvdW5kYXJ5XCIpLkRldlJvb3ROb3RGb3VuZEJvdW5kYXJ5O1xuICAgICAgICAgICAgY29udGVudCA9IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoRGV2Um9vdE5vdEZvdW5kQm91bmRhcnksIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuTWlzc2luZ1Nsb3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtaXNzaW5nU2xvdHMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjb250ZW50XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEhvdFJlbG9hZGVyID0gcmVxdWlyZShcIi4vcmVhY3QtZGV2LW92ZXJsYXkvaG90LXJlbG9hZGVyLWNsaWVudFwiKS5kZWZhdWx0O1xuICAgICAgICBjb250ZW50ID0gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShIb3RSZWxvYWRlciwge1xuICAgICAgICAgICAgYXNzZXRQcmVmaXg6IGFzc2V0UHJlZml4LFxuICAgICAgICAgICAgY2hpbGRyZW46IGNvbnRlbnRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShIaXN0b3J5VXBkYXRlciwge1xuICAgICAgICAgICAgICAgIGFwcFJvdXRlclN0YXRlOiAoMCwgX3VzZXJlZHVjZXJ3aXRoZGV2dG9vbHMudXNlVW53cmFwU3RhdGUpKHJlZHVjZXJTdGF0ZSksXG4gICAgICAgICAgICAgICAgc3luYzogc3luY1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9ob29rc2NsaWVudGNvbnRleHRzaGFyZWRydW50aW1lLlBhdGhuYW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBwYXRobmFtZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfaG9va3NjbGllbnRjb250ZXh0c2hhcmVkcnVudGltZS5TZWFyY2hQYXJhbXNDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5HbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuQXBwUm91dGVyQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhcHBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lLkxheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTm9kZXM6IGNhY2hlLnBhcmFsbGVsUm91dGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJvb3Qgbm9kZSBhbHdheXMgaGFzIGB1cmxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm92aWRlZCBpbiBBcHBUcmVlQ29udGV4dCB0byBlbnN1cmUgaXQgY2FuIGJlIG92ZXJ3cml0dGVuIGluIGxheW91dC1yb3V0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogY2Fub25pY2FsVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIEFwcFJvdXRlcihwcm9wcykge1xuICAgIGNvbnN0IHsgZ2xvYmFsRXJyb3JDb21wb25lbnQsIC4uLnJlc3QgfSA9IHByb3BzO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9lcnJvcmJvdW5kYXJ5LkVycm9yQm91bmRhcnksIHtcbiAgICAgICAgZXJyb3JDb21wb25lbnQ6IGdsb2JhbEVycm9yQ29tcG9uZW50LFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShSb3V0ZXIsIHtcbiAgICAgICAgICAgIC4uLnJlc3RcbiAgICAgICAgfSlcbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXJvdXRlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJnZXRTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyIiwidXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyIiwiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJkZWZhdWx0IiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQXBwUm91dGVyIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfcm91dGVycmVkdWNlcnR5cGVzIiwiX2NyZWF0ZWhyZWZmcm9tdXJsIiwiX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfdXNlcmVkdWNlcndpdGhkZXZ0b29scyIsIl9lcnJvcmJvdW5kYXJ5IiwiX2NyZWF0ZWluaXRpYWxyb3V0ZXJzdGF0ZSIsIl9pc2JvdCIsIl9hZGRiYXNlcGF0aCIsIl9hcHByb3V0ZXJhbm5vdW5jZXIiLCJfcmVkaXJlY3Rib3VuZGFyeSIsIl9maW5kaGVhZGluY2FjaGUiLCJfaW5maW5pdGVwcm9taXNlIiwiX2FwcHJvdXRlcmhlYWRlcnMiLCJfcmVtb3ZlYmFzZXBhdGgiLCJfaGFzYmFzZXBhdGgiLCJpc1NlcnZlciIsIndpbmRvdyIsImluaXRpYWxQYXJhbGxlbFJvdXRlcyIsIk1hcCIsImdsb2JhbFNlcnZlckFjdGlvbkRpc3BhdGNoZXIiLCJnbG9iYWxNdXRhYmxlIiwidXJsIiwidXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMiLCJVUkwiLCJsb2NhdGlvbiIsIm9yaWdpbiIsInNlYXJjaFBhcmFtcyIsImRlbGV0ZSIsIk5FWFRfUlNDX1VOSU9OX1FVRVJZIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9DT05GSUdfT1VUUFVUIiwicGF0aG5hbWUiLCJlbmRzV2l0aCIsImxlbmd0aCIsInNsaWNlIiwiaXNFeHRlcm5hbFVSTCIsIkhpc3RvcnlVcGRhdGVyIiwicGFyYW0iLCJhcHBSb3V0ZXJTdGF0ZSIsInN5bmMiLCJ1c2VJbnNlcnRpb25FZmZlY3QiLCJ0cmVlIiwicHVzaFJlZiIsImNhbm9uaWNhbFVybCIsImhpc3RvcnlTdGF0ZSIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiaGlzdG9yeSIsInN0YXRlIiwiX19OQSIsIl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUiLCJwZW5kaW5nUHVzaCIsImNyZWF0ZUhyZWZGcm9tVXJsIiwiaHJlZiIsInB1c2hTdGF0ZSIsInJlcGxhY2VTdGF0ZSIsImxhenlEYXRhIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJwYXJhbGxlbFJvdXRlcyIsImxhenlEYXRhUmVzb2x2ZWQiLCJ1c2VTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyIiwiZGlzcGF0Y2giLCJzZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyIiwidXNlQ2FsbGJhY2siLCJhY3Rpb25QYXlsb2FkIiwic3RhcnRUcmFuc2l0aW9uIiwidHlwZSIsIkFDVElPTl9TRVJWRVJfQUNUSU9OIiwidXNlQ2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSIsInByZXZpb3VzVHJlZSIsImZsaWdodERhdGEiLCJvdmVycmlkZUNhbm9uaWNhbFVybCIsIkFDVElPTl9TRVJWRVJfUEFUQ0giLCJ1c2VOYXZpZ2F0ZSIsIm5hdmlnYXRlVHlwZSIsInNob3VsZFNjcm9sbCIsImFkZEJhc2VQYXRoIiwiQUNUSU9OX05BVklHQVRFIiwiaXNFeHRlcm5hbFVybCIsImxvY2F0aW9uU2VhcmNoIiwic2VhcmNoIiwiY29weU5leHRKc0ludGVybmFsSGlzdG9yeVN0YXRlIiwiZGF0YSIsImN1cnJlbnRTdGF0ZSIsIkhlYWQiLCJoZWFkQ2FjaGVOb2RlIiwiaGVhZCIsInByZWZldGNoSGVhZCIsInJlc29sdmVkUHJlZmV0Y2hSc2MiLCJ1c2VEZWZlcnJlZFZhbHVlIiwiUm91dGVyIiwiYnVpbGRJZCIsImluaXRpYWxIZWFkIiwiaW5pdGlhbFRyZWUiLCJpbml0aWFsQ2Fub25pY2FsVXJsIiwiaW5pdGlhbFNlZWREYXRhIiwiYXNzZXRQcmVmaXgiLCJtaXNzaW5nU2xvdHMiLCJpbml0aWFsU3RhdGUiLCJ1c2VNZW1vIiwiY3JlYXRlSW5pdGlhbFJvdXRlclN0YXRlIiwicmVkdWNlclN0YXRlIiwidXNlUmVkdWNlcldpdGhSZWR1eERldnRvb2xzIiwidXNlRWZmZWN0IiwidXNlVW53cmFwU3RhdGUiLCJoYXNCYXNlUGF0aCIsInJlbW92ZUJhc2VQYXRoIiwiY2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSIsIm5hdmlnYXRlIiwiYXBwUm91dGVyIiwicm91dGVySW5zdGFuY2UiLCJiYWNrIiwiZm9yd2FyZCIsInByZWZldGNoIiwib3B0aW9ucyIsImlzQm90IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiX29wdGlvbnNfa2luZCIsIkFDVElPTl9QUkVGRVRDSCIsImtpbmQiLCJQcmVmZXRjaEtpbmQiLCJGVUxMIiwicmVwbGFjZSIsIl9vcHRpb25zX3Njcm9sbCIsInNjcm9sbCIsInB1c2giLCJyZWZyZXNoIiwiQUNUSU9OX1JFRlJFU0giLCJmYXN0UmVmcmVzaCIsIkVycm9yIiwiQUNUSU9OX0ZBU1RfUkVGUkVTSCIsIm5leHQiLCJyb3V0ZXIiLCJjYWNoZSIsInByZWZldGNoQ2FjaGUiLCJuZCIsImhhbmRsZVBhZ2VTaG93IiwiZXZlbnQiLCJfd2luZG93X2hpc3Rvcnlfc3RhdGUiLCJwZXJzaXN0ZWQiLCJBQ1RJT05fUkVTVE9SRSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibXBhTmF2aWdhdGlvbiIsInBlbmRpbmdNcGFQYXRoIiwibG9jYXRpb24xIiwiYXNzaWduIiwidXNlIiwiY3JlYXRlSW5maW5pdGVQcm9taXNlIiwib3JpZ2luYWxQdXNoU3RhdGUiLCJiaW5kIiwib3JpZ2luYWxSZXBsYWNlU3RhdGUiLCJhcHBseVVybEZyb21IaXN0b3J5UHVzaFJlcGxhY2UiLCJfdW51c2VkIiwiX04iLCJvblBvcFN0YXRlIiwicmVsb2FkIiwibmV4dFVybCIsImZvY3VzQW5kU2Nyb2xsUmVmIiwibWF0Y2hpbmdIZWFkIiwiZmluZEhlYWRJbkNhY2hlIiwiaGVhZEtleSIsImpzeCIsImNvbnRlbnQiLCJqc3hzIiwiUmVkaXJlY3RCb3VuZGFyeSIsImNoaWxkcmVuIiwiQXBwUm91dGVyQW5ub3VuY2VyIiwiRGV2Um9vdE5vdEZvdW5kQm91bmRhcnkiLCJNaXNzaW5nU2xvdENvbnRleHQiLCJQcm92aWRlciIsIkhvdFJlbG9hZGVyIiwiRnJhZ21lbnQiLCJQYXRobmFtZUNvbnRleHQiLCJTZWFyY2hQYXJhbXNDb250ZXh0IiwiR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCIsIkFwcFJvdXRlckNvbnRleHQiLCJMYXlvdXRSb3V0ZXJDb250ZXh0IiwiY2hpbGROb2RlcyIsInByb3BzIiwiZ2xvYmFsRXJyb3JDb21wb25lbnQiLCJyZXN0IiwiRXJyb3JCb3VuZGFyeSIsImVycm9yQ29tcG9uZW50IiwiX19lc01vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/bailout-to-client-rendering.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/bailout-to-client-rendering.js ***! + \*********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"bailoutToClientRendering\", ({\n enumerable: true,\n get: function() {\n return bailoutToClientRendering;\n }\n}));\nconst _bailouttocsr = __webpack_require__(/*! ../../shared/lib/lazy-dynamic/bailout-to-csr */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nconst _staticgenerationasyncstorageexternal = __webpack_require__(/*! ./static-generation-async-storage.external */ \"(shared)/./node_modules/next/dist/client/components/static-generation-async-storage.external.js\");\nfunction bailoutToClientRendering(reason) {\n const staticGenerationStore = _staticgenerationasyncstorageexternal.staticGenerationAsyncStorage.getStore();\n if (staticGenerationStore == null ? void 0 : staticGenerationStore.forceStatic) return;\n if (staticGenerationStore == null ? void 0 : staticGenerationStore.isStaticGeneration) throw new _bailouttocsr.BailoutToCSRError(reason);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=bailout-to-client-rendering.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYmFpbG91dC10by1jbGllbnQtcmVuZGVyaW5nLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw0REFBMkQ7SUFDdkRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxnQkFBZ0JDLG1CQUFPQSxDQUFDLDRJQUE4QztBQUM1RSxNQUFNQyx3Q0FBd0NELG1CQUFPQSxDQUFDLG1KQUE0QztBQUNsRyxTQUFTRix5QkFBeUJJLE1BQU07SUFDcEMsTUFBTUMsd0JBQXdCRixzQ0FBc0NHLDRCQUE0QixDQUFDQyxRQUFRO0lBQ3pHLElBQUlGLHlCQUF5QixPQUFPLEtBQUssSUFBSUEsc0JBQXNCRyxXQUFXLEVBQUU7SUFDaEYsSUFBSUgseUJBQXlCLE9BQU8sS0FBSyxJQUFJQSxzQkFBc0JJLGtCQUFrQixFQUFFLE1BQU0sSUFBSVIsY0FBY1MsaUJBQWlCLENBQUNOO0FBQ3JJO0FBRUEsSUFBSSxDQUFDLE9BQU9SLFFBQVFlLE9BQU8sS0FBSyxjQUFlLE9BQU9mLFFBQVFlLE9BQU8sS0FBSyxZQUFZZixRQUFRZSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9mLFFBQVFlLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktsQixPQUFPQyxjQUFjLENBQUNDLFFBQVFlLE9BQU8sRUFBRSxjQUFjO1FBQUVkLE9BQU87SUFBSztJQUNuRUgsT0FBT21CLE1BQU0sQ0FBQ2pCLFFBQVFlLE9BQU8sRUFBRWY7SUFDL0JrQixPQUFPbEIsT0FBTyxHQUFHQSxRQUFRZSxPQUFPO0FBQ2xDLEVBRUEsdURBQXVEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYmFpbG91dC10by1jbGllbnQtcmVuZGVyaW5nLmpzP2IxNzciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiYWlsb3V0VG9DbGllbnRSZW5kZXJpbmdcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRUb0NsaWVudFJlbmRlcmluZztcbiAgICB9XG59KTtcbmNvbnN0IF9iYWlsb3V0dG9jc3IgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3JcIik7XG5jb25zdCBfc3RhdGljZ2VuZXJhdGlvbmFzeW5jc3RvcmFnZWV4dGVybmFsID0gcmVxdWlyZShcIi4vc3RhdGljLWdlbmVyYXRpb24tYXN5bmMtc3RvcmFnZS5leHRlcm5hbFwiKTtcbmZ1bmN0aW9uIGJhaWxvdXRUb0NsaWVudFJlbmRlcmluZyhyZWFzb24pIHtcbiAgICBjb25zdCBzdGF0aWNHZW5lcmF0aW9uU3RvcmUgPSBfc3RhdGljZ2VuZXJhdGlvbmFzeW5jc3RvcmFnZWV4dGVybmFsLnN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgICBpZiAoc3RhdGljR2VuZXJhdGlvblN0b3JlID09IG51bGwgPyB2b2lkIDAgOiBzdGF0aWNHZW5lcmF0aW9uU3RvcmUuZm9yY2VTdGF0aWMpIHJldHVybjtcbiAgICBpZiAoc3RhdGljR2VuZXJhdGlvblN0b3JlID09IG51bGwgPyB2b2lkIDAgOiBzdGF0aWNHZW5lcmF0aW9uU3RvcmUuaXNTdGF0aWNHZW5lcmF0aW9uKSB0aHJvdyBuZXcgX2JhaWxvdXR0b2Nzci5CYWlsb3V0VG9DU1JFcnJvcihyZWFzb24pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYWlsb3V0LXRvLWNsaWVudC1yZW5kZXJpbmcuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImJhaWxvdXRUb0NsaWVudFJlbmRlcmluZyIsIl9iYWlsb3V0dG9jc3IiLCJyZXF1aXJlIiwiX3N0YXRpY2dlbmVyYXRpb25hc3luY3N0b3JhZ2VleHRlcm5hbCIsInJlYXNvbiIsInN0YXRpY0dlbmVyYXRpb25TdG9yZSIsInN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UiLCJnZXRTdG9yZSIsImZvcmNlU3RhdGljIiwiaXNTdGF0aWNHZW5lcmF0aW9uIiwiQmFpbG91dFRvQ1NSRXJyb3IiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/bailout-to-client-rendering.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/client-hook-in-server-component-error.js": +/*!*******************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/client-hook-in-server-component-error.js ***! + \*******************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"clientHookInServerComponentError\", ({\n enumerable: true,\n get: function() {\n return clientHookInServerComponentError;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nfunction clientHookInServerComponentError(hookName) {\n if (true) {\n // If useState is undefined we're in a server component\n if (!_react.default.useState) {\n throw new Error(\"\" + hookName + ' only works in Client Components. Add the \"use client\" directive at the top of the file to use it. Read more: https://nextjs.org/docs/messages/react-client-hook-in-server-component');\n }\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=client-hook-in-server-component-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvY2xpZW50LWhvb2staW4tc2VydmVyLWNvbXBvbmVudC1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsb0VBQW1FO0lBQy9ESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxnSUFBeUM7QUFDbEYsTUFBTUMsU0FBUyxXQUFXLEdBQUdGLHlCQUF5QkcsQ0FBQyxDQUFDRixtQkFBT0EsQ0FBQyxtRkFBTztBQUN2RSxTQUFTRixpQ0FBaUNLLFFBQVE7SUFDOUMsSUFBSUMsSUFBcUMsRUFBRTtRQUN2Qyx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDSCxPQUFPSSxPQUFPLENBQUNDLFFBQVEsRUFBRTtZQUMxQixNQUFNLElBQUlDLE1BQU0sS0FBS0osV0FBVztRQUNwQztJQUNKO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT1QsUUFBUVcsT0FBTyxLQUFLLGNBQWUsT0FBT1gsUUFBUVcsT0FBTyxLQUFLLFlBQVlYLFFBQVFXLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1gsUUFBUVcsT0FBTyxDQUFDRyxVQUFVLEtBQUssYUFBYTtJQUNyS2hCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUVcsT0FBTyxFQUFFLGNBQWM7UUFBRVYsT0FBTztJQUFLO0lBQ25FSCxPQUFPaUIsTUFBTSxDQUFDZixRQUFRVyxPQUFPLEVBQUVYO0lBQy9CZ0IsT0FBT2hCLE9BQU8sR0FBR0EsUUFBUVcsT0FBTztBQUNsQyxFQUVBLGlFQUFpRSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2NsaWVudC1ob29rLWluLXNlcnZlci1jb21wb25lbnQtZXJyb3IuanM/M2RhYSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNsaWVudEhvb2tJblNlcnZlckNvbXBvbmVudEVycm9yXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjbGllbnRIb29rSW5TZXJ2ZXJDb21wb25lbnRFcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5mdW5jdGlvbiBjbGllbnRIb29rSW5TZXJ2ZXJDb21wb25lbnRFcnJvcihob29rTmFtZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgLy8gSWYgdXNlU3RhdGUgaXMgdW5kZWZpbmVkIHdlJ3JlIGluIGEgc2VydmVyIGNvbXBvbmVudFxuICAgICAgICBpZiAoIV9yZWFjdC5kZWZhdWx0LnVzZVN0YXRlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIiArIGhvb2tOYW1lICsgJyBvbmx5IHdvcmtzIGluIENsaWVudCBDb21wb25lbnRzLiBBZGQgdGhlIFwidXNlIGNsaWVudFwiIGRpcmVjdGl2ZSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIHRvIHVzZSBpdC4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9yZWFjdC1jbGllbnQtaG9vay1pbi1zZXJ2ZXItY29tcG9uZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsaWVudC1ob29rLWluLXNlcnZlci1jb21wb25lbnQtZXJyb3IuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImNsaWVudEhvb2tJblNlcnZlckNvbXBvbmVudEVycm9yIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdCIsIl8iLCJob29rTmFtZSIsInByb2Nlc3MiLCJkZWZhdWx0IiwidXNlU3RhdGUiLCJFcnJvciIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/client-hook-in-server-component-error.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/dev-root-not-found-boundary.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/dev-root-not-found-boundary.js ***! + \*********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n bailOnNotFound: function() {\n return bailOnNotFound;\n },\n DevRootNotFoundBoundary: function() {\n return DevRootNotFoundBoundary;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _notfoundboundary = __webpack_require__(/*! ./not-found-boundary */ \"(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js\");\nfunction bailOnNotFound() {\n throw new Error(\"notFound() is not allowed to use in root layout\");\n}\nfunction NotAllowedRootNotFoundError() {\n bailOnNotFound();\n return null;\n}\n_c = NotAllowedRootNotFoundError;\nfunction DevRootNotFoundBoundary(param) {\n let { children } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_notfoundboundary.NotFoundBoundary, {\n notFound: /*#__PURE__*/ (0, _jsxruntime.jsx)(NotAllowedRootNotFoundError, {}),\n children: children\n });\n}\n_c1 = DevRootNotFoundBoundary;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=dev-root-not-found-boundary.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"NotAllowedRootNotFoundError\");\n$RefreshReg$(_c1, \"DevRootNotFoundBoundary\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZGV2LXJvb3Qtbm90LWZvdW5kLWJvdW5kYXJ5LmpzIiwibWFwcGluZ3MiOiJxREFFYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtJQUNBQyx5QkFBeUI7UUFDckIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sMkJBQTJCQyxtQkFBT0EsQ0FBQyxnSUFBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsbUZBQU87QUFDdkUsTUFBTUksb0JBQW9CSixtQkFBT0EsQ0FBQyxrSEFBc0I7QUFDeEQsU0FBU1Q7SUFDTCxNQUFNLElBQUljLE1BQU07QUFDcEI7QUFDQSxTQUFTQztJQUNMZjtJQUNBLE9BQU87QUFDWDtLQUhTZTtBQUlULFNBQVNkLHdCQUF3QmUsS0FBSztJQUNsQyxJQUFJLEVBQUVDLFFBQVEsRUFBRSxHQUFHRDtJQUNuQixPQUFxQixXQUFILEdBQUksSUFBR04sWUFBWVEsR0FBRyxFQUFFTCxrQkFBa0JNLGdCQUFnQixFQUFFO1FBQzFFQyxVQUF3QixXQUFILEdBQUksSUFBR1YsWUFBWVEsR0FBRyxFQUFFSCw2QkFBNkIsQ0FBQztRQUMzRUUsVUFBVUE7SUFDZDtBQUNKO01BTlNoQjtBQVFULElBQUksQ0FBQyxPQUFPSixRQUFRd0IsT0FBTyxLQUFLLGNBQWUsT0FBT3hCLFFBQVF3QixPQUFPLEtBQUssWUFBWXhCLFFBQVF3QixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU94QixRQUFRd0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzNCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXdCLE9BQU8sRUFBRSxjQUFjO1FBQUV2QixPQUFPO0lBQUs7SUFDbkVILE9BQU80QixNQUFNLENBQUMxQixRQUFRd0IsT0FBTyxFQUFFeEI7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUXdCLE9BQU87QUFDbEMsRUFFQSx1REFBdUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9kZXYtcm9vdC1ub3QtZm91bmQtYm91bmRhcnkuanM/ZjFiYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBiYWlsT25Ob3RGb3VuZDogbnVsbCxcbiAgICBEZXZSb290Tm90Rm91bmRCb3VuZGFyeTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBiYWlsT25Ob3RGb3VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBiYWlsT25Ob3RGb3VuZDtcbiAgICB9LFxuICAgIERldlJvb3ROb3RGb3VuZEJvdW5kYXJ5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIERldlJvb3ROb3RGb3VuZEJvdW5kYXJ5O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX25vdGZvdW5kYm91bmRhcnkgPSByZXF1aXJlKFwiLi9ub3QtZm91bmQtYm91bmRhcnlcIik7XG5mdW5jdGlvbiBiYWlsT25Ob3RGb3VuZCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3RGb3VuZCgpIGlzIG5vdCBhbGxvd2VkIHRvIHVzZSBpbiByb290IGxheW91dFwiKTtcbn1cbmZ1bmN0aW9uIE5vdEFsbG93ZWRSb290Tm90Rm91bmRFcnJvcigpIHtcbiAgICBiYWlsT25Ob3RGb3VuZCgpO1xuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gRGV2Um9vdE5vdEZvdW5kQm91bmRhcnkocGFyYW0pIHtcbiAgICBsZXQgeyBjaGlsZHJlbiB9ID0gcGFyYW07XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX25vdGZvdW5kYm91bmRhcnkuTm90Rm91bmRCb3VuZGFyeSwge1xuICAgICAgICBub3RGb3VuZDogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShOb3RBbGxvd2VkUm9vdE5vdEZvdW5kRXJyb3IsIHt9KSxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRldi1yb290LW5vdC1mb3VuZC1ib3VuZGFyeS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJiYWlsT25Ob3RGb3VuZCIsIkRldlJvb3ROb3RGb3VuZEJvdW5kYXJ5IiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9ub3Rmb3VuZGJvdW5kYXJ5IiwiRXJyb3IiLCJOb3RBbGxvd2VkUm9vdE5vdEZvdW5kRXJyb3IiLCJwYXJhbSIsImNoaWxkcmVuIiwianN4IiwiTm90Rm91bmRCb3VuZGFyeSIsIm5vdEZvdW5kIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/dev-root-not-found-boundary.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js": +/*!********************************************************************!*\ + !*** ./node_modules/next/dist/client/components/error-boundary.js ***! + \********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ErrorBoundaryHandler: function() {\n return ErrorBoundaryHandler;\n },\n GlobalError: function() {\n return GlobalError;\n },\n // Exported so that the import signature in the loaders can be identical to user\n // supplied custom global error signatures.\n default: function() {\n return _default;\n },\n ErrorBoundary: function() {\n return ErrorBoundary;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _navigation = __webpack_require__(/*! ./navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\nconst _isnextroutererror = __webpack_require__(/*! ./is-next-router-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: \"100vh\",\n textAlign: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n text: {\n fontSize: \"14px\",\n fontWeight: 400,\n lineHeight: \"28px\",\n margin: \"0 8px\"\n }\n};\n// if we are revalidating we want to re-throw the error so the\n// function crashes so we can maintain our previous cache\n// instead of caching the error page\nfunction HandleISRError(param) {\n let { error } = param;\n if (typeof fetch.__nextGetStaticStore === \"function\") {\n var _fetch___nextGetStaticStore;\n const store = (_fetch___nextGetStaticStore = fetch.__nextGetStaticStore()) == null ? void 0 : _fetch___nextGetStaticStore.getStore();\n if ((store == null ? void 0 : store.isRevalidate) || (store == null ? void 0 : store.isStaticGeneration)) {\n console.error(error);\n throw error;\n }\n }\n return null;\n}\n_c = HandleISRError;\nclass ErrorBoundaryHandler extends _react.default.Component {\n static getDerivedStateFromError(error) {\n if ((0, _isnextroutererror.isNextRouterError)(error)) {\n // Re-throw if an expected internal Next.js router error occurs\n // this means it should be handled by a different boundary (such as a NotFound boundary in a parent segment)\n throw error;\n }\n return {\n error\n };\n }\n static getDerivedStateFromProps(props, state) {\n /**\n * Handles reset of the error boundary when a navigation happens.\n * Ensures the error boundary does not stay enabled when navigating to a new page.\n * Approach of setState in render is safe as it checks the previous pathname and then overrides\n * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */ if (props.pathname !== state.previousPathname && state.error) {\n return {\n error: null,\n previousPathname: props.pathname\n };\n }\n return {\n error: state.error,\n previousPathname: props.pathname\n };\n }\n render() {\n if (this.state.error) {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(HandleISRError, {\n error: this.state.error\n }),\n this.props.errorStyles,\n this.props.errorScripts,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(this.props.errorComponent, {\n error: this.state.error,\n reset: this.reset\n })\n ]\n });\n }\n return this.props.children;\n }\n constructor(props){\n super(props);\n this.reset = ()=>{\n this.setState({\n error: null\n });\n };\n this.state = {\n error: null,\n previousPathname: this.props.pathname\n };\n }\n}\nfunction GlobalError(param) {\n let { error } = param;\n const digest = error == null ? void 0 : error.digest;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"html\", {\n id: \"__next_error__\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"head\", {}),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"body\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(HandleISRError, {\n error: error\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.error,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n style: styles.text,\n children: \"Application error: a \" + (digest ? \"server\" : \"client\") + \"-side exception has occurred (see the \" + (digest ? \"server logs\" : \"browser console\") + \" for more information).\"\n }),\n digest ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n style: styles.text,\n children: \"Digest: \" + digest\n }) : null\n ]\n })\n })\n ]\n })\n ]\n });\n}\n_c1 = GlobalError;\nconst _default = GlobalError;\nfunction ErrorBoundary(param) {\n let { errorComponent, errorStyles, errorScripts, children } = param;\n const pathname = (0, _navigation.usePathname)();\n if (errorComponent) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorBoundaryHandler, {\n pathname: pathname,\n errorComponent: errorComponent,\n errorStyles: errorStyles,\n errorScripts: errorScripts,\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\n_c2 = ErrorBoundary;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=error-boundary.js.map\nvar _c, _c1, _c2;\n$RefreshReg$(_c, \"HandleISRError\");\n$RefreshReg$(_c1, \"GlobalError\");\n$RefreshReg$(_c2, \"ErrorBoundary\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnkuanMiLCJtYXBwaW5ncyI6InFEQUVhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBS047QUFDQSxTQUFTSyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJWCxPQUFPQyxjQUFjLENBQUNTLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUVAsU0FBUztJQUNiRyxzQkFBc0I7UUFDbEIsT0FBT0E7SUFDWDtJQUNBQyxhQUFhO1FBQ1QsT0FBT0E7SUFDWDtJQUNBLGdGQUFnRjtJQUNoRiwyQ0FBMkM7SUFDM0NDLFNBQVM7UUFDTCxPQUFPUTtJQUNYO0lBQ0FQLGVBQWU7UUFDWCxPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNUSwyQkFBMkJDLG1CQUFPQSxDQUFDLGdJQUF5QztBQUNsRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyxtRkFBTztBQUN2RSxNQUFNSSxjQUFjSixtQkFBT0EsQ0FBQyxrR0FBYztBQUMxQyxNQUFNSyxxQkFBcUJMLG1CQUFPQSxDQUFDLHNIQUF3QjtBQUMzRCxNQUFNTSxTQUFTO0lBQ1hDLE9BQU87UUFDSCwwRkFBMEY7UUFDMUZDLFlBQVk7UUFDWkMsUUFBUTtRQUNSQyxXQUFXO1FBQ1hDLFNBQVM7UUFDVEMsZUFBZTtRQUNmQyxZQUFZO1FBQ1pDLGdCQUFnQjtJQUNwQjtJQUNBQyxNQUFNO1FBQ0ZDLFVBQVU7UUFDVkMsWUFBWTtRQUNaQyxZQUFZO1FBQ1pDLFFBQVE7SUFDWjtBQUNKO0FBQ0EsOERBQThEO0FBQzlELHlEQUF5RDtBQUN6RCxvQ0FBb0M7QUFDcEMsU0FBU0MsZUFBZUMsS0FBSztJQUN6QixJQUFJLEVBQUVkLEtBQUssRUFBRSxHQUFHYztJQUNoQixJQUFJLE9BQU9DLE1BQU1DLG9CQUFvQixLQUFLLFlBQVk7UUFDbEQsSUFBSUM7UUFDSixNQUFNQyxRQUFRLENBQUNELDhCQUE4QkYsTUFBTUMsb0JBQW9CLEVBQUMsS0FBTSxPQUFPLEtBQUssSUFBSUMsNEJBQTRCRSxRQUFRO1FBQ2xJLElBQUksQ0FBQ0QsU0FBUyxPQUFPLEtBQUssSUFBSUEsTUFBTUUsWUFBWSxLQUFNRixDQUFBQSxTQUFTLE9BQU8sS0FBSyxJQUFJQSxNQUFNRyxrQkFBa0IsR0FBRztZQUN0R0MsUUFBUXRCLEtBQUssQ0FBQ0E7WUFDZCxNQUFNQTtRQUNWO0lBQ0o7SUFDQSxPQUFPO0FBQ1g7S0FYU2E7QUFZVCxNQUFNaEMsNkJBQTZCYyxPQUFPWixPQUFPLENBQUN3QyxTQUFTO0lBQ3ZELE9BQU9DLHlCQUF5QnhCLEtBQUssRUFBRTtRQUNuQyxJQUFJLENBQUMsR0FBR0YsbUJBQW1CMkIsaUJBQWlCLEVBQUV6QixRQUFRO1lBQ2xELCtEQUErRDtZQUMvRCw0R0FBNEc7WUFDNUcsTUFBTUE7UUFDVjtRQUNBLE9BQU87WUFDSEE7UUFDSjtJQUNKO0lBQ0EsT0FBTzBCLHlCQUF5QkMsS0FBSyxFQUFFQyxLQUFLLEVBQUU7UUFDMUM7Ozs7O0tBS0gsR0FBRyxJQUFJRCxNQUFNRSxRQUFRLEtBQUtELE1BQU1FLGdCQUFnQixJQUFJRixNQUFNNUIsS0FBSyxFQUFFO1lBQzFELE9BQU87Z0JBQ0hBLE9BQU87Z0JBQ1A4QixrQkFBa0JILE1BQU1FLFFBQVE7WUFDcEM7UUFDSjtRQUNBLE9BQU87WUFDSDdCLE9BQU80QixNQUFNNUIsS0FBSztZQUNsQjhCLGtCQUFrQkgsTUFBTUUsUUFBUTtRQUNwQztJQUNKO0lBQ0FFLFNBQVM7UUFDTCxJQUFJLElBQUksQ0FBQ0gsS0FBSyxDQUFDNUIsS0FBSyxFQUFFO1lBQ2xCLE9BQXFCLFdBQUgsR0FBSSxJQUFHTixZQUFZc0MsSUFBSSxFQUFFdEMsWUFBWXVDLFFBQVEsRUFBRTtnQkFDN0RDLFVBQVU7b0JBQ04sV0FBVyxHQUFJLElBQUd4QyxZQUFZeUMsR0FBRyxFQUFFdEIsZ0JBQWdCO3dCQUMvQ2IsT0FBTyxJQUFJLENBQUM0QixLQUFLLENBQUM1QixLQUFLO29CQUMzQjtvQkFDQSxJQUFJLENBQUMyQixLQUFLLENBQUNTLFdBQVc7b0JBQ3RCLElBQUksQ0FBQ1QsS0FBSyxDQUFDVSxZQUFZO29CQUN2QixXQUFXLEdBQUksSUFBRzNDLFlBQVl5QyxHQUFHLEVBQUUsSUFBSSxDQUFDUixLQUFLLENBQUNXLGNBQWMsRUFBRTt3QkFDMUR0QyxPQUFPLElBQUksQ0FBQzRCLEtBQUssQ0FBQzVCLEtBQUs7d0JBQ3ZCdUMsT0FBTyxJQUFJLENBQUNBLEtBQUs7b0JBQ3JCO2lCQUNIO1lBQ0w7UUFDSjtRQUNBLE9BQU8sSUFBSSxDQUFDWixLQUFLLENBQUNPLFFBQVE7SUFDOUI7SUFDQU0sWUFBWWIsS0FBSyxDQUFDO1FBQ2QsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ1ksS0FBSyxHQUFHO1lBQ1QsSUFBSSxDQUFDRSxRQUFRLENBQUM7Z0JBQ1Z6QyxPQUFPO1lBQ1g7UUFDSjtRQUNBLElBQUksQ0FBQzRCLEtBQUssR0FBRztZQUNUNUIsT0FBTztZQUNQOEIsa0JBQWtCLElBQUksQ0FBQ0gsS0FBSyxDQUFDRSxRQUFRO1FBQ3pDO0lBQ0o7QUFDSjtBQUNBLFNBQVMvQyxZQUFZZ0MsS0FBSztJQUN0QixJQUFJLEVBQUVkLEtBQUssRUFBRSxHQUFHYztJQUNoQixNQUFNNEIsU0FBUzFDLFNBQVMsT0FBTyxLQUFLLElBQUlBLE1BQU0wQyxNQUFNO0lBQ3BELE9BQXFCLFdBQUgsR0FBSSxJQUFHaEQsWUFBWXNDLElBQUksRUFBRSxRQUFRO1FBQy9DVyxJQUFJO1FBQ0pULFVBQVU7WUFDTixXQUFXLEdBQUksSUFBR3hDLFlBQVl5QyxHQUFHLEVBQUUsUUFBUSxDQUFDO1lBQzVDLFdBQVcsR0FBSSxJQUFHekMsWUFBWXNDLElBQUksRUFBRSxRQUFRO2dCQUN4Q0UsVUFBVTtvQkFDTixXQUFXLEdBQUksSUFBR3hDLFlBQVl5QyxHQUFHLEVBQUV0QixnQkFBZ0I7d0JBQy9DYixPQUFPQTtvQkFDWDtvQkFDQSxXQUFXLEdBQUksSUFBR04sWUFBWXlDLEdBQUcsRUFBRSxPQUFPO3dCQUN0Q1MsT0FBTzdDLE9BQU9DLEtBQUs7d0JBQ25Ca0MsVUFBd0IsV0FBSCxHQUFJLElBQUd4QyxZQUFZc0MsSUFBSSxFQUFFLE9BQU87NEJBQ2pERSxVQUFVO2dDQUNOLFdBQVcsR0FBSSxJQUFHeEMsWUFBWXlDLEdBQUcsRUFBRSxNQUFNO29DQUNyQ1MsT0FBTzdDLE9BQU9TLElBQUk7b0NBQ2xCMEIsVUFBVSwwQkFBMkJRLENBQUFBLFNBQVMsV0FBVyxRQUFPLElBQUssMkNBQTRDQSxDQUFBQSxTQUFTLGdCQUFnQixpQkFBZ0IsSUFBSztnQ0FDbks7Z0NBQ0FBLFNBQXVCLFdBQUgsR0FBSSxJQUFHaEQsWUFBWXlDLEdBQUcsRUFBRSxLQUFLO29DQUM3Q1MsT0FBTzdDLE9BQU9TLElBQUk7b0NBQ2xCMEIsVUFBVSxhQUFhUTtnQ0FDM0IsS0FBSzs2QkFDUjt3QkFDTDtvQkFDSjtpQkFDSDtZQUNMO1NBQ0g7SUFDTDtBQUNKO01BL0JTNUQ7QUFnQ1QsTUFBTVMsV0FBV1Q7QUFDakIsU0FBU0UsY0FBYzhCLEtBQUs7SUFDeEIsSUFBSSxFQUFFd0IsY0FBYyxFQUFFRixXQUFXLEVBQUVDLFlBQVksRUFBRUgsUUFBUSxFQUFFLEdBQUdwQjtJQUM5RCxNQUFNZSxXQUFXLENBQUMsR0FBR2hDLFlBQVlnRCxXQUFXO0lBQzVDLElBQUlQLGdCQUFnQjtRQUNoQixPQUFxQixXQUFILEdBQUksSUFBRzVDLFlBQVl5QyxHQUFHLEVBQUV0RCxzQkFBc0I7WUFDNURnRCxVQUFVQTtZQUNWUyxnQkFBZ0JBO1lBQ2hCRixhQUFhQTtZQUNiQyxjQUFjQTtZQUNkSCxVQUFVQTtRQUNkO0lBQ0o7SUFDQSxPQUFxQixXQUFILEdBQUksSUFBR3hDLFlBQVl5QyxHQUFHLEVBQUV6QyxZQUFZdUMsUUFBUSxFQUFFO1FBQzVEQyxVQUFVQTtJQUNkO0FBQ0o7TUFmU2xEO0FBaUJULElBQUksQ0FBQyxPQUFPTixRQUFRSyxPQUFPLEtBQUssY0FBZSxPQUFPTCxRQUFRSyxPQUFPLEtBQUssWUFBWUwsUUFBUUssT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPTCxRQUFRSyxPQUFPLENBQUMrRCxVQUFVLEtBQUssYUFBYTtJQUNyS3RFLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUUssT0FBTyxFQUFFLGNBQWM7UUFBRUosT0FBTztJQUFLO0lBQ25FSCxPQUFPdUUsTUFBTSxDQUFDckUsUUFBUUssT0FBTyxFQUFFTDtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRSyxPQUFPO0FBQ2xDLEVBRUEsMENBQTBDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnkuanM/NzY5NyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBFcnJvckJvdW5kYXJ5SGFuZGxlcjogbnVsbCxcbiAgICBHbG9iYWxFcnJvcjogbnVsbCxcbiAgICBkZWZhdWx0OiBudWxsLFxuICAgIEVycm9yQm91bmRhcnk6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgRXJyb3JCb3VuZGFyeUhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRXJyb3JCb3VuZGFyeUhhbmRsZXI7XG4gICAgfSxcbiAgICBHbG9iYWxFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBHbG9iYWxFcnJvcjtcbiAgICB9LFxuICAgIC8vIEV4cG9ydGVkIHNvIHRoYXQgdGhlIGltcG9ydCBzaWduYXR1cmUgaW4gdGhlIGxvYWRlcnMgY2FuIGJlIGlkZW50aWNhbCB0byB1c2VyXG4gICAgLy8gc3VwcGxpZWQgY3VzdG9tIGdsb2JhbCBlcnJvciBzaWduYXR1cmVzLlxuICAgIGRlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2RlZmF1bHQ7XG4gICAgfSxcbiAgICBFcnJvckJvdW5kYXJ5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEVycm9yQm91bmRhcnk7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfbmF2aWdhdGlvbiA9IHJlcXVpcmUoXCIuL25hdmlnYXRpb25cIik7XG5jb25zdCBfaXNuZXh0cm91dGVyZXJyb3IgPSByZXF1aXJlKFwiLi9pcy1uZXh0LXJvdXRlci1lcnJvclwiKTtcbmNvbnN0IHN0eWxlcyA9IHtcbiAgICBlcnJvcjoge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL21vZGVybi1ub3JtYWxpemUvYmxvYi9tYWluL21vZGVybi1ub3JtYWxpemUuY3NzI0wzOC1MNTJcbiAgICAgICAgZm9udEZhbWlseTogJ3N5c3RlbS11aSxcIlNlZ29lIFVJXCIsUm9ib3RvLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmLFwiQXBwbGUgQ29sb3IgRW1vamlcIixcIlNlZ29lIFVJIEVtb2ppXCInLFxuICAgICAgICBoZWlnaHQ6IFwiMTAwdmhcIixcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgZmxleERpcmVjdGlvbjogXCJjb2x1bW5cIixcbiAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCJcbiAgICB9LFxuICAgIHRleHQ6IHtcbiAgICAgICAgZm9udFNpemU6IFwiMTRweFwiLFxuICAgICAgICBmb250V2VpZ2h0OiA0MDAsXG4gICAgICAgIGxpbmVIZWlnaHQ6IFwiMjhweFwiLFxuICAgICAgICBtYXJnaW46IFwiMCA4cHhcIlxuICAgIH1cbn07XG4vLyBpZiB3ZSBhcmUgcmV2YWxpZGF0aW5nIHdlIHdhbnQgdG8gcmUtdGhyb3cgdGhlIGVycm9yIHNvIHRoZVxuLy8gZnVuY3Rpb24gY3Jhc2hlcyBzbyB3ZSBjYW4gbWFpbnRhaW4gb3VyIHByZXZpb3VzIGNhY2hlXG4vLyBpbnN0ZWFkIG9mIGNhY2hpbmcgdGhlIGVycm9yIHBhZ2VcbmZ1bmN0aW9uIEhhbmRsZUlTUkVycm9yKHBhcmFtKSB7XG4gICAgbGV0IHsgZXJyb3IgfSA9IHBhcmFtO1xuICAgIGlmICh0eXBlb2YgZmV0Y2guX19uZXh0R2V0U3RhdGljU3RvcmUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB2YXIgX2ZldGNoX19fbmV4dEdldFN0YXRpY1N0b3JlO1xuICAgICAgICBjb25zdCBzdG9yZSA9IChfZmV0Y2hfX19uZXh0R2V0U3RhdGljU3RvcmUgPSBmZXRjaC5fX25leHRHZXRTdGF0aWNTdG9yZSgpKSA9PSBudWxsID8gdm9pZCAwIDogX2ZldGNoX19fbmV4dEdldFN0YXRpY1N0b3JlLmdldFN0b3JlKCk7XG4gICAgICAgIGlmICgoc3RvcmUgPT0gbnVsbCA/IHZvaWQgMCA6IHN0b3JlLmlzUmV2YWxpZGF0ZSkgfHwgKHN0b3JlID09IG51bGwgPyB2b2lkIDAgOiBzdG9yZS5pc1N0YXRpY0dlbmVyYXRpb24pKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuY2xhc3MgRXJyb3JCb3VuZGFyeUhhbmRsZXIgZXh0ZW5kcyBfcmVhY3QuZGVmYXVsdC5Db21wb25lbnQge1xuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKCgwLCBfaXNuZXh0cm91dGVyZXJyb3IuaXNOZXh0Um91dGVyRXJyb3IpKGVycm9yKSkge1xuICAgICAgICAgICAgLy8gUmUtdGhyb3cgaWYgYW4gZXhwZWN0ZWQgaW50ZXJuYWwgTmV4dC5qcyByb3V0ZXIgZXJyb3Igb2NjdXJzXG4gICAgICAgICAgICAvLyB0aGlzIG1lYW5zIGl0IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGEgZGlmZmVyZW50IGJvdW5kYXJ5IChzdWNoIGFzIGEgTm90Rm91bmQgYm91bmRhcnkgaW4gYSBwYXJlbnQgc2VnbWVudClcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzLCBzdGF0ZSkge1xuICAgICAgICAvKipcbiAgICAgKiBIYW5kbGVzIHJlc2V0IG9mIHRoZSBlcnJvciBib3VuZGFyeSB3aGVuIGEgbmF2aWdhdGlvbiBoYXBwZW5zLlxuICAgICAqIEVuc3VyZXMgdGhlIGVycm9yIGJvdW5kYXJ5IGRvZXMgbm90IHN0YXkgZW5hYmxlZCB3aGVuIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZS5cbiAgICAgKiBBcHByb2FjaCBvZiBzZXRTdGF0ZSBpbiByZW5kZXIgaXMgc2FmZSBhcyBpdCBjaGVja3MgdGhlIHByZXZpb3VzIHBhdGhuYW1lIGFuZCB0aGVuIG92ZXJyaWRlc1xuICAgICAqIGl0IGFzIG91dGxpbmVkIGluIGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VTdGF0ZSNzdG9yaW5nLWluZm9ybWF0aW9uLWZyb20tcHJldmlvdXMtcmVuZGVyc1xuICAgICAqLyBpZiAocHJvcHMucGF0aG5hbWUgIT09IHN0YXRlLnByZXZpb3VzUGF0aG5hbWUgJiYgc3RhdGUuZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yOiBzdGF0ZS5lcnJvcixcbiAgICAgICAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoSGFuZGxlSVNSRXJyb3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB0aGlzLnN0YXRlLmVycm9yXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmVycm9yU3R5bGVzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmVycm9yU2NyaXB0cyxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KSh0aGlzLnByb3BzLmVycm9yQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdGhpcy5zdGF0ZS5lcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0OiB0aGlzLnJlc2V0XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLnJlc2V0ID0gKCk9PntcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgcHJldmlvdXNQYXRobmFtZTogdGhpcy5wcm9wcy5wYXRobmFtZVxuICAgICAgICB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIEdsb2JhbEVycm9yKHBhcmFtKSB7XG4gICAgbGV0IHsgZXJyb3IgfSA9IHBhcmFtO1xuICAgIGNvbnN0IGRpZ2VzdCA9IGVycm9yID09IG51bGwgPyB2b2lkIDAgOiBlcnJvci5kaWdlc3Q7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiaHRtbFwiLCB7XG4gICAgICAgIGlkOiBcIl9fbmV4dF9lcnJvcl9fXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiaGVhZFwiLCB7fSksXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImJvZHlcIiwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoSGFuZGxlSVNSRXJyb3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogc3R5bGVzLmVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiaDJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiQXBwbGljYXRpb24gZXJyb3I6IGEgXCIgKyAoZGlnZXN0ID8gXCJzZXJ2ZXJcIiA6IFwiY2xpZW50XCIpICsgXCItc2lkZSBleGNlcHRpb24gaGFzIG9jY3VycmVkIChzZWUgdGhlIFwiICsgKGRpZ2VzdCA/IFwic2VydmVyIGxvZ3NcIiA6IFwiYnJvd3NlciBjb25zb2xlXCIpICsgXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24pLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3QgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogc3R5bGVzLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJEaWdlc3Q6IFwiICsgZGlnZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xufVxuY29uc3QgX2RlZmF1bHQgPSBHbG9iYWxFcnJvcjtcbmZ1bmN0aW9uIEVycm9yQm91bmRhcnkocGFyYW0pIHtcbiAgICBsZXQgeyBlcnJvckNvbXBvbmVudCwgZXJyb3JTdHlsZXMsIGVycm9yU2NyaXB0cywgY2hpbGRyZW4gfSA9IHBhcmFtO1xuICAgIGNvbnN0IHBhdGhuYW1lID0gKDAsIF9uYXZpZ2F0aW9uLnVzZVBhdGhuYW1lKSgpO1xuICAgIGlmIChlcnJvckNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShFcnJvckJvdW5kYXJ5SGFuZGxlciwge1xuICAgICAgICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgICAgICAgICAgZXJyb3JDb21wb25lbnQ6IGVycm9yQ29tcG9uZW50LFxuICAgICAgICAgICAgZXJyb3JTdHlsZXM6IGVycm9yU3R5bGVzLFxuICAgICAgICAgICAgZXJyb3JTY3JpcHRzOiBlcnJvclNjcmlwdHMsXG4gICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvci1ib3VuZGFyeS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJFcnJvckJvdW5kYXJ5SGFuZGxlciIsIkdsb2JhbEVycm9yIiwiZGVmYXVsdCIsIkVycm9yQm91bmRhcnkiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZGVmYXVsdCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfbmF2aWdhdGlvbiIsIl9pc25leHRyb3V0ZXJlcnJvciIsInN0eWxlcyIsImVycm9yIiwiZm9udEZhbWlseSIsImhlaWdodCIsInRleHRBbGlnbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwidGV4dCIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImxpbmVIZWlnaHQiLCJtYXJnaW4iLCJIYW5kbGVJU1JFcnJvciIsInBhcmFtIiwiZmV0Y2giLCJfX25leHRHZXRTdGF0aWNTdG9yZSIsIl9mZXRjaF9fX25leHRHZXRTdGF0aWNTdG9yZSIsInN0b3JlIiwiZ2V0U3RvcmUiLCJpc1JldmFsaWRhdGUiLCJpc1N0YXRpY0dlbmVyYXRpb24iLCJjb25zb2xlIiwiQ29tcG9uZW50IiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiaXNOZXh0Um91dGVyRXJyb3IiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJwcm9wcyIsInN0YXRlIiwicGF0aG5hbWUiLCJwcmV2aW91c1BhdGhuYW1lIiwicmVuZGVyIiwianN4cyIsIkZyYWdtZW50IiwiY2hpbGRyZW4iLCJqc3giLCJlcnJvclN0eWxlcyIsImVycm9yU2NyaXB0cyIsImVycm9yQ29tcG9uZW50IiwicmVzZXQiLCJjb25zdHJ1Y3RvciIsInNldFN0YXRlIiwiZGlnZXN0IiwiaWQiLCJzdHlsZSIsInVzZVBhdGhuYW1lIiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/error-boundary.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/infinite-promise.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/client/components/infinite-promise.js ***! + \**********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * Used to cache in createInfinitePromise\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createInfinitePromise\", ({\n enumerable: true,\n get: function() {\n return createInfinitePromise;\n }\n}));\nlet infinitePromise;\nfunction createInfinitePromise() {\n if (!infinitePromise) {\n // Only create the Promise once\n infinitePromise = new Promise(()=>{\n // This is used to debug when the rendering is never updated.\n // setTimeout(() => {\n // infinitePromise = new Error('Infinite promise')\n // resolve()\n // }, 5000)\n });\n }\n return infinitePromise;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=infinite-promise.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaW5maW5pdGUtcHJvbWlzZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Q0FFQyxHQUFnQjtBQUNqQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHlEQUF3RDtJQUNwREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLElBQUlDO0FBQ0osU0FBU0Q7SUFDTCxJQUFJLENBQUNDLGlCQUFpQjtRQUNsQiwrQkFBK0I7UUFDL0JBLGtCQUFrQixJQUFJQyxRQUFRO1FBQzlCLDZEQUE2RDtRQUM3RCxxQkFBcUI7UUFDckIsb0RBQW9EO1FBQ3BELGNBQWM7UUFDZCxXQUFXO1FBQ1g7SUFDSjtJQUNBLE9BQU9EO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT0wsUUFBUU8sT0FBTyxLQUFLLGNBQWUsT0FBT1AsUUFBUU8sT0FBTyxLQUFLLFlBQVlQLFFBQVFPLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1AsUUFBUU8sT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS1YsT0FBT0MsY0FBYyxDQUFDQyxRQUFRTyxPQUFPLEVBQUUsY0FBYztRQUFFTixPQUFPO0lBQUs7SUFDbkVILE9BQU9XLE1BQU0sQ0FBQ1QsUUFBUU8sT0FBTyxFQUFFUDtJQUMvQlUsT0FBT1YsT0FBTyxHQUFHQSxRQUFRTyxPQUFPO0FBQ2xDLEVBRUEsNENBQTRDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaW5maW5pdGUtcHJvbWlzZS5qcz83MmZmIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlZCB0byBjYWNoZSBpbiBjcmVhdGVJbmZpbml0ZVByb21pc2VcbiAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZmluaXRlUHJvbWlzZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlSW5maW5pdGVQcm9taXNlO1xuICAgIH1cbn0pO1xubGV0IGluZmluaXRlUHJvbWlzZTtcbmZ1bmN0aW9uIGNyZWF0ZUluZmluaXRlUHJvbWlzZSgpIHtcbiAgICBpZiAoIWluZmluaXRlUHJvbWlzZSkge1xuICAgICAgICAvLyBPbmx5IGNyZWF0ZSB0aGUgUHJvbWlzZSBvbmNlXG4gICAgICAgIGluZmluaXRlUHJvbWlzZSA9IG5ldyBQcm9taXNlKCgpPT57XG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCB0byBkZWJ1ZyB3aGVuIHRoZSByZW5kZXJpbmcgaXMgbmV2ZXIgdXBkYXRlZC5cbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgaW5maW5pdGVQcm9taXNlID0gbmV3IEVycm9yKCdJbmZpbml0ZSBwcm9taXNlJylcbiAgICAgICAgLy8gICByZXNvbHZlKClcbiAgICAgICAgLy8gfSwgNTAwMClcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbmZpbml0ZVByb21pc2U7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZmluaXRlLXByb21pc2UuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImNyZWF0ZUluZmluaXRlUHJvbWlzZSIsImluZmluaXRlUHJvbWlzZSIsIlByb21pc2UiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/infinite-promise.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/is-next-router-error.js ***! + \**************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isNextRouterError\", ({\n enumerable: true,\n get: function() {\n return isNextRouterError;\n }\n}));\nconst _notfound = __webpack_require__(/*! ./not-found */ \"(app-pages-browser)/./node_modules/next/dist/client/components/not-found.js\");\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect.js\");\nfunction isNextRouterError(error) {\n return error && error.digest && ((0, _redirect.isRedirectError)(error) || (0, _notfound.isNotFoundError)(error));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=is-next-router-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvaXMtbmV4dC1yb3V0ZXItZXJyb3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHFEQUFvRDtJQUNoREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLFlBQVlDLG1CQUFPQSxDQUFDLGdHQUFhO0FBQ3ZDLE1BQU1DLFlBQVlELG1CQUFPQSxDQUFDLDhGQUFZO0FBQ3RDLFNBQVNGLGtCQUFrQkksS0FBSztJQUM1QixPQUFPQSxTQUFTQSxNQUFNQyxNQUFNLElBQUssRUFBQyxHQUFHRixVQUFVRyxlQUFlLEVBQUVGLFVBQVUsQ0FBQyxHQUFHSCxVQUFVTSxlQUFlLEVBQUVILE1BQUs7QUFDbEg7QUFFQSxJQUFJLENBQUMsT0FBT1IsUUFBUVksT0FBTyxLQUFLLGNBQWUsT0FBT1osUUFBUVksT0FBTyxLQUFLLFlBQVlaLFFBQVFZLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1osUUFBUVksT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2YsT0FBT0MsY0FBYyxDQUFDQyxRQUFRWSxPQUFPLEVBQUUsY0FBYztRQUFFWCxPQUFPO0lBQUs7SUFDbkVILE9BQU9nQixNQUFNLENBQUNkLFFBQVFZLE9BQU8sRUFBRVo7SUFDL0JlLE9BQU9mLE9BQU8sR0FBR0EsUUFBUVksT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2lzLW5leHQtcm91dGVyLWVycm9yLmpzP2Q5MDciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc05leHRSb3V0ZXJFcnJvclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNOZXh0Um91dGVyRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfbm90Zm91bmQgPSByZXF1aXJlKFwiLi9ub3QtZm91bmRcIik7XG5jb25zdCBfcmVkaXJlY3QgPSByZXF1aXJlKFwiLi9yZWRpcmVjdFwiKTtcbmZ1bmN0aW9uIGlzTmV4dFJvdXRlckVycm9yKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yICYmIGVycm9yLmRpZ2VzdCAmJiAoKDAsIF9yZWRpcmVjdC5pc1JlZGlyZWN0RXJyb3IpKGVycm9yKSB8fCAoMCwgX25vdGZvdW5kLmlzTm90Rm91bmRFcnJvcikoZXJyb3IpKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXMtbmV4dC1yb3V0ZXItZXJyb3IuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImlzTmV4dFJvdXRlckVycm9yIiwiX25vdGZvdW5kIiwicmVxdWlyZSIsIl9yZWRpcmVjdCIsImVycm9yIiwiZGlnZXN0IiwiaXNSZWRpcmVjdEVycm9yIiwiaXNOb3RGb3VuZEVycm9yIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js": +/*!********************************************************************!*\ + !*** ./node_modules/next/dist/client/components/match-segments.js ***! + \********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n matchSegment: function() {\n return matchSegment;\n },\n canSegmentBeOverridden: function() {\n return canSegmentBeOverridden;\n }\n});\nconst _getsegmentparam = __webpack_require__(/*! ../../server/app-render/get-segment-param */ \"(app-pages-browser)/./node_modules/next/dist/server/app-render/get-segment-param.js\");\nconst matchSegment = (existingSegment, segment)=>{\n // segment is either Array or string\n if (typeof existingSegment === \"string\") {\n if (typeof segment === \"string\") {\n // Common case: segment is just a string\n return existingSegment === segment;\n }\n return false;\n }\n if (typeof segment === \"string\") {\n return false;\n }\n return existingSegment[0] === segment[0] && existingSegment[1] === segment[1];\n};\nconst canSegmentBeOverridden = (existingSegment, segment)=>{\n var _getSegmentParam;\n if (Array.isArray(existingSegment) || !Array.isArray(segment)) {\n return false;\n }\n return ((_getSegmentParam = (0, _getsegmentparam.getSegmentParam)(existingSegment)) == null ? void 0 : _getSegmentParam.param) === segment[0];\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=match-segments.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbWF0Y2gtc2VnbWVudHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLGNBQWM7UUFDVixPQUFPQTtJQUNYO0lBQ0FDLHdCQUF3QjtRQUNwQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxtQkFBbUJDLG1CQUFPQSxDQUFDLHNJQUEyQztBQUM1RSxNQUFNVCxlQUFlLENBQUNVLGlCQUFpQkM7SUFDbkMsb0NBQW9DO0lBQ3BDLElBQUksT0FBT0Qsb0JBQW9CLFVBQVU7UUFDckMsSUFBSSxPQUFPQyxZQUFZLFVBQVU7WUFDN0Isd0NBQXdDO1lBQ3hDLE9BQU9ELG9CQUFvQkM7UUFDL0I7UUFDQSxPQUFPO0lBQ1g7SUFDQSxJQUFJLE9BQU9BLFlBQVksVUFBVTtRQUM3QixPQUFPO0lBQ1g7SUFDQSxPQUFPRCxlQUFlLENBQUMsRUFBRSxLQUFLQyxPQUFPLENBQUMsRUFBRSxJQUFJRCxlQUFlLENBQUMsRUFBRSxLQUFLQyxPQUFPLENBQUMsRUFBRTtBQUNqRjtBQUNBLE1BQU1WLHlCQUF5QixDQUFDUyxpQkFBaUJDO0lBQzdDLElBQUlDO0lBQ0osSUFBSUMsTUFBTUMsT0FBTyxDQUFDSixvQkFBb0IsQ0FBQ0csTUFBTUMsT0FBTyxDQUFDSCxVQUFVO1FBQzNELE9BQU87SUFDWDtJQUNBLE9BQU8sQ0FBQyxDQUFDQyxtQkFBbUIsQ0FBQyxHQUFHSixpQkFBaUJPLGVBQWUsRUFBRUwsZ0JBQWUsS0FBTSxPQUFPLEtBQUssSUFBSUUsaUJBQWlCSSxLQUFLLE1BQU1MLE9BQU8sQ0FBQyxFQUFFO0FBQ2pKO0FBRUEsSUFBSSxDQUFDLE9BQU9kLFFBQVFvQixPQUFPLEtBQUssY0FBZSxPQUFPcEIsUUFBUW9CLE9BQU8sS0FBSyxZQUFZcEIsUUFBUW9CLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3BCLFFBQVFvQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdkIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRb0IsT0FBTyxFQUFFLGNBQWM7UUFBRW5CLE9BQU87SUFBSztJQUNuRUgsT0FBT3dCLE1BQU0sQ0FBQ3RCLFFBQVFvQixPQUFPLEVBQUVwQjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRb0IsT0FBTztBQUNsQyxFQUVBLDBDQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL21hdGNoLXNlZ21lbnRzLmpzP2JjYjEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBtYXRjaFNlZ21lbnQ6IG51bGwsXG4gICAgY2FuU2VnbWVudEJlT3ZlcnJpZGRlbjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBtYXRjaFNlZ21lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hTZWdtZW50O1xuICAgIH0sXG4gICAgY2FuU2VnbWVudEJlT3ZlcnJpZGRlbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjYW5TZWdtZW50QmVPdmVycmlkZGVuO1xuICAgIH1cbn0pO1xuY29uc3QgX2dldHNlZ21lbnRwYXJhbSA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci9nZXQtc2VnbWVudC1wYXJhbVwiKTtcbmNvbnN0IG1hdGNoU2VnbWVudCA9IChleGlzdGluZ1NlZ21lbnQsIHNlZ21lbnQpPT57XG4gICAgLy8gc2VnbWVudCBpcyBlaXRoZXIgQXJyYXkgb3Igc3RyaW5nXG4gICAgaWYgKHR5cGVvZiBleGlzdGluZ1NlZ21lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWdtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAvLyBDb21tb24gY2FzZTogc2VnbWVudCBpcyBqdXN0IGEgc3RyaW5nXG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdTZWdtZW50ID09PSBzZWdtZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzZWdtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGV4aXN0aW5nU2VnbWVudFswXSA9PT0gc2VnbWVudFswXSAmJiBleGlzdGluZ1NlZ21lbnRbMV0gPT09IHNlZ21lbnRbMV07XG59O1xuY29uc3QgY2FuU2VnbWVudEJlT3ZlcnJpZGRlbiA9IChleGlzdGluZ1NlZ21lbnQsIHNlZ21lbnQpPT57XG4gICAgdmFyIF9nZXRTZWdtZW50UGFyYW07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdTZWdtZW50KSB8fCAhQXJyYXkuaXNBcnJheShzZWdtZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoKF9nZXRTZWdtZW50UGFyYW0gPSAoMCwgX2dldHNlZ21lbnRwYXJhbS5nZXRTZWdtZW50UGFyYW0pKGV4aXN0aW5nU2VnbWVudCkpID09IG51bGwgPyB2b2lkIDAgOiBfZ2V0U2VnbWVudFBhcmFtLnBhcmFtKSA9PT0gc2VnbWVudFswXTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hdGNoLXNlZ21lbnRzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIm1hdGNoU2VnbWVudCIsImNhblNlZ21lbnRCZU92ZXJyaWRkZW4iLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZ2V0c2VnbWVudHBhcmFtIiwicmVxdWlyZSIsImV4aXN0aW5nU2VnbWVudCIsInNlZ21lbnQiLCJfZ2V0U2VnbWVudFBhcmFtIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0U2VnbWVudFBhcmFtIiwicGFyYW0iLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js": +/*!****************************************************************!*\ + !*** ./node_modules/next/dist/client/components/navigation.js ***! + \****************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ReadonlyURLSearchParams: function() {\n return ReadonlyURLSearchParams;\n },\n useSearchParams: function() {\n return useSearchParams;\n },\n usePathname: function() {\n return usePathname;\n },\n ServerInsertedHTMLContext: function() {\n return _serverinsertedhtmlsharedruntime.ServerInsertedHTMLContext;\n },\n useServerInsertedHTML: function() {\n return _serverinsertedhtmlsharedruntime.useServerInsertedHTML;\n },\n useRouter: function() {\n return useRouter;\n },\n useParams: function() {\n return useParams;\n },\n useSelectedLayoutSegments: function() {\n return useSelectedLayoutSegments;\n },\n useSelectedLayoutSegment: function() {\n return useSelectedLayoutSegment;\n },\n redirect: function() {\n return _redirect.redirect;\n },\n permanentRedirect: function() {\n return _redirect.permanentRedirect;\n },\n RedirectType: function() {\n return _redirect.RedirectType;\n },\n notFound: function() {\n return _notfound.notFound;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _clienthookinservercomponenterror = __webpack_require__(/*! ./client-hook-in-server-component-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/client-hook-in-server-component-error.js\");\nconst _getsegmentvalue = __webpack_require__(/*! ./router-reducer/reducers/get-segment-value */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\");\nconst _segment = __webpack_require__(/*! ../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _serverinsertedhtmlsharedruntime = __webpack_require__(/*! ../../shared/lib/server-inserted-html.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js\");\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect.js\");\nconst _notfound = __webpack_require__(/*! ./not-found */ \"(app-pages-browser)/./node_modules/next/dist/client/components/not-found.js\");\nconst INTERNAL_URLSEARCHPARAMS_INSTANCE = Symbol(\"internal for urlsearchparams readonly\");\nfunction readonlyURLSearchParamsError() {\n return new Error(\"ReadonlyURLSearchParams cannot be modified\");\n}\nclass ReadonlyURLSearchParams {\n [Symbol.iterator]() {\n return this[INTERNAL_URLSEARCHPARAMS_INSTANCE][Symbol.iterator]();\n }\n append() {\n throw readonlyURLSearchParamsError();\n }\n delete() {\n throw readonlyURLSearchParamsError();\n }\n set() {\n throw readonlyURLSearchParamsError();\n }\n sort() {\n throw readonlyURLSearchParamsError();\n }\n constructor(urlSearchParams){\n this[INTERNAL_URLSEARCHPARAMS_INSTANCE] = urlSearchParams;\n this.entries = urlSearchParams.entries.bind(urlSearchParams);\n this.forEach = urlSearchParams.forEach.bind(urlSearchParams);\n this.get = urlSearchParams.get.bind(urlSearchParams);\n this.getAll = urlSearchParams.getAll.bind(urlSearchParams);\n this.has = urlSearchParams.has.bind(urlSearchParams);\n this.keys = urlSearchParams.keys.bind(urlSearchParams);\n this.values = urlSearchParams.values.bind(urlSearchParams);\n this.toString = urlSearchParams.toString.bind(urlSearchParams);\n this.size = urlSearchParams.size;\n }\n}\nfunction useSearchParams() {\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"useSearchParams\");\n const searchParams = (0, _react.useContext)(_hooksclientcontextsharedruntime.SearchParamsContext);\n // In the case where this is `null`, the compat types added in\n // `next-env.d.ts` will add a new overload that changes the return type to\n // include `null`.\n const readonlySearchParams = (0, _react.useMemo)(()=>{\n if (!searchParams) {\n // When the router is not ready in pages, we won't have the search params\n // available.\n return null;\n }\n return new ReadonlyURLSearchParams(searchParams);\n }, [\n searchParams\n ]);\n if (typeof window === \"undefined\") {\n // AsyncLocalStorage should not be included in the client bundle.\n const { bailoutToClientRendering } = __webpack_require__(/*! ./bailout-to-client-rendering */ \"(app-pages-browser)/./node_modules/next/dist/client/components/bailout-to-client-rendering.js\");\n // TODO-APP: handle dynamic = 'force-static' here and on the client\n bailoutToClientRendering(\"useSearchParams()\");\n }\n return readonlySearchParams;\n}\nfunction usePathname() {\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"usePathname\");\n // In the case where this is `null`, the compat types added in `next-env.d.ts`\n // will add a new overload that changes the return type to include `null`.\n return (0, _react.useContext)(_hooksclientcontextsharedruntime.PathnameContext);\n}\nfunction useRouter() {\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"useRouter\");\n const router = (0, _react.useContext)(_approutercontextsharedruntime.AppRouterContext);\n if (router === null) {\n throw new Error(\"invariant expected app router to be mounted\");\n }\n return router;\n}\n// this function performs a depth-first search of the tree to find the selected\n// params\nfunction getSelectedParams(tree, params) {\n if (params === void 0) params = {};\n const parallelRoutes = tree[1];\n for (const parallelRoute of Object.values(parallelRoutes)){\n const segment = parallelRoute[0];\n const isDynamicParameter = Array.isArray(segment);\n const segmentValue = isDynamicParameter ? segment[1] : segment;\n if (!segmentValue || segmentValue.startsWith(_segment.PAGE_SEGMENT_KEY)) continue;\n // Ensure catchAll and optional catchall are turned into an array\n const isCatchAll = isDynamicParameter && (segment[2] === \"c\" || segment[2] === \"oc\");\n if (isCatchAll) {\n params[segment[0]] = segment[1].split(\"/\");\n } else if (isDynamicParameter) {\n params[segment[0]] = segment[1];\n }\n params = getSelectedParams(parallelRoute, params);\n }\n return params;\n}\nfunction useParams() {\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"useParams\");\n const globalLayoutRouter = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n const pathParams = (0, _react.useContext)(_hooksclientcontextsharedruntime.PathParamsContext);\n return (0, _react.useMemo)(()=>{\n // When it's under app router\n if (globalLayoutRouter == null ? void 0 : globalLayoutRouter.tree) {\n return getSelectedParams(globalLayoutRouter.tree);\n }\n // When it's under client side pages router\n return pathParams;\n }, [\n globalLayoutRouter == null ? void 0 : globalLayoutRouter.tree,\n pathParams\n ]);\n}\n// TODO-APP: handle parallel routes\n/**\n * Get the canonical parameters from the current level to the leaf node.\n */ function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first, segmentPath) {\n if (first === void 0) first = true;\n if (segmentPath === void 0) segmentPath = [];\n let node;\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey];\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1];\n var _parallelRoutes_children;\n node = (_parallelRoutes_children = parallelRoutes.children) != null ? _parallelRoutes_children : Object.values(parallelRoutes)[0];\n }\n if (!node) return segmentPath;\n const segment = node[0];\n const segmentValue = (0, _getsegmentvalue.getSegmentValue)(segment);\n if (!segmentValue || segmentValue.startsWith(_segment.PAGE_SEGMENT_KEY)) {\n return segmentPath;\n }\n segmentPath.push(segmentValue);\n return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath);\n}\nfunction useSelectedLayoutSegments(parallelRouteKey) {\n if (parallelRouteKey === void 0) parallelRouteKey = \"children\";\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"useSelectedLayoutSegments\");\n const { tree } = (0, _react.useContext)(_approutercontextsharedruntime.LayoutRouterContext);\n return getSelectedLayoutSegmentPath(tree, parallelRouteKey);\n}\nfunction useSelectedLayoutSegment(parallelRouteKey) {\n _s();\n if (parallelRouteKey === void 0) parallelRouteKey = \"children\";\n (0, _clienthookinservercomponenterror.clientHookInServerComponentError)(\"useSelectedLayoutSegment\");\n const selectedLayoutSegments = useSelectedLayoutSegments(parallelRouteKey);\n if (selectedLayoutSegments.length === 0) {\n return null;\n }\n return selectedLayoutSegments[0];\n}\n_s(useSelectedLayoutSegment, \"rc1U92JxkDTv7MNGlutCvlwOCmc=\", false, function() {\n return [\n useSelectedLayoutSegments\n ];\n});\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=navigation.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbmF2aWdhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0FBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBY047QUFDQSxTQUFTYyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJcEIsT0FBT0MsY0FBYyxDQUFDa0IsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRaEIsU0FBUztJQUNiRyx5QkFBeUI7UUFDckIsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0lBQ0FDLGFBQWE7UUFDVCxPQUFPQTtJQUNYO0lBQ0FDLDJCQUEyQjtRQUN2QixPQUFPZ0IsaUNBQWlDaEIseUJBQXlCO0lBQ3JFO0lBQ0FDLHVCQUF1QjtRQUNuQixPQUFPZSxpQ0FBaUNmLHFCQUFxQjtJQUNqRTtJQUNBQyxXQUFXO1FBQ1AsT0FBT0E7SUFDWDtJQUNBQyxXQUFXO1FBQ1AsT0FBT0E7SUFDWDtJQUNBQywyQkFBMkI7UUFDdkIsT0FBT0E7SUFDWDtJQUNBQywwQkFBMEI7UUFDdEIsT0FBT0E7SUFDWDtJQUNBQyxVQUFVO1FBQ04sT0FBT1csVUFBVVgsUUFBUTtJQUM3QjtJQUNBQyxtQkFBbUI7UUFDZixPQUFPVSxVQUFVVixpQkFBaUI7SUFDdEM7SUFDQUMsY0FBYztRQUNWLE9BQU9TLFVBQVVULFlBQVk7SUFDakM7SUFDQUMsVUFBVTtRQUNOLE9BQU9TLFVBQVVULFFBQVE7SUFDN0I7QUFDSjtBQUNBLE1BQU1VLFNBQVNDLG1CQUFPQSxDQUFDLG1GQUFPO0FBQzlCLE1BQU1DLGlDQUFpQ0QsbUJBQU9BLENBQUMsd0pBQW9EO0FBQ25HLE1BQU1FLG1DQUFtQ0YsbUJBQU9BLENBQUMsNEpBQXNEO0FBQ3ZHLE1BQU1HLG9DQUFvQ0gsbUJBQU9BLENBQUMsd0pBQXlDO0FBQzNGLE1BQU1JLG1CQUFtQkosbUJBQU9BLENBQUMsZ0tBQTZDO0FBQzlFLE1BQU1LLFdBQVdMLG1CQUFPQSxDQUFDLG9HQUEwQjtBQUNuRCxNQUFNSixtQ0FBbUNJLG1CQUFPQSxDQUFDLDRKQUFzRDtBQUN2RyxNQUFNSCxZQUFZRyxtQkFBT0EsQ0FBQyw4RkFBWTtBQUN0QyxNQUFNRixZQUFZRSxtQkFBT0EsQ0FBQyxnR0FBYTtBQUN2QyxNQUFNTSxvQ0FBb0NDLE9BQU87QUFDakQsU0FBU0M7SUFDTCxPQUFPLElBQUlDLE1BQU07QUFDckI7QUFDQSxNQUFNaEM7SUFDRixDQUFDOEIsT0FBT0csUUFBUSxDQUFDLEdBQUc7UUFDaEIsT0FBTyxJQUFJLENBQUNKLGtDQUFrQyxDQUFDQyxPQUFPRyxRQUFRLENBQUM7SUFDbkU7SUFDQUMsU0FBUztRQUNMLE1BQU1IO0lBQ1Y7SUFDQUksU0FBUztRQUNMLE1BQU1KO0lBQ1Y7SUFDQUssTUFBTTtRQUNGLE1BQU1MO0lBQ1Y7SUFDQU0sT0FBTztRQUNILE1BQU1OO0lBQ1Y7SUFDQU8sWUFBWUMsZUFBZSxDQUFDO1FBQ3hCLElBQUksQ0FBQ1Ysa0NBQWtDLEdBQUdVO1FBQzFDLElBQUksQ0FBQ0MsT0FBTyxHQUFHRCxnQkFBZ0JDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDRjtRQUM1QyxJQUFJLENBQUNHLE9BQU8sR0FBR0gsZ0JBQWdCRyxPQUFPLENBQUNELElBQUksQ0FBQ0Y7UUFDNUMsSUFBSSxDQUFDckIsR0FBRyxHQUFHcUIsZ0JBQWdCckIsR0FBRyxDQUFDdUIsSUFBSSxDQUFDRjtRQUNwQyxJQUFJLENBQUNJLE1BQU0sR0FBR0osZ0JBQWdCSSxNQUFNLENBQUNGLElBQUksQ0FBQ0Y7UUFDMUMsSUFBSSxDQUFDSyxHQUFHLEdBQUdMLGdCQUFnQkssR0FBRyxDQUFDSCxJQUFJLENBQUNGO1FBQ3BDLElBQUksQ0FBQ00sSUFBSSxHQUFHTixnQkFBZ0JNLElBQUksQ0FBQ0osSUFBSSxDQUFDRjtRQUN0QyxJQUFJLENBQUNPLE1BQU0sR0FBR1AsZ0JBQWdCTyxNQUFNLENBQUNMLElBQUksQ0FBQ0Y7UUFDMUMsSUFBSSxDQUFDUSxRQUFRLEdBQUdSLGdCQUFnQlEsUUFBUSxDQUFDTixJQUFJLENBQUNGO1FBQzlDLElBQUksQ0FBQ1MsSUFBSSxHQUFHVCxnQkFBZ0JTLElBQUk7SUFDcEM7QUFDSjtBQUNBLFNBQVMvQztJQUNKLElBQUd5QixrQ0FBa0N1QixnQ0FBZ0MsRUFBRTtJQUN4RSxNQUFNQyxlQUFlLENBQUMsR0FBRzVCLE9BQU82QixVQUFVLEVBQUUxQixpQ0FBaUMyQixtQkFBbUI7SUFDaEcsOERBQThEO0lBQzlELDBFQUEwRTtJQUMxRSxrQkFBa0I7SUFDbEIsTUFBTUMsdUJBQXVCLENBQUMsR0FBRy9CLE9BQU9nQyxPQUFPLEVBQUU7UUFDN0MsSUFBSSxDQUFDSixjQUFjO1lBQ2YseUVBQXlFO1lBQ3pFLGFBQWE7WUFDYixPQUFPO1FBQ1g7UUFDQSxPQUFPLElBQUlsRCx3QkFBd0JrRDtJQUN2QyxHQUFHO1FBQ0NBO0tBQ0g7SUFDRCxJQUFJLE9BQU9LLFdBQVcsYUFBYTtRQUMvQixpRUFBaUU7UUFDakUsTUFBTSxFQUFFQyx3QkFBd0IsRUFBRSxHQUFHakMsbUJBQU9BLENBQUMsb0lBQStCO1FBQzVFLG1FQUFtRTtRQUNuRWlDLHlCQUF5QjtJQUM3QjtJQUNBLE9BQU9IO0FBQ1g7QUFDQSxTQUFTbkQ7SUFDSixJQUFHd0Isa0NBQWtDdUIsZ0NBQWdDLEVBQUU7SUFDeEUsOEVBQThFO0lBQzlFLDBFQUEwRTtJQUMxRSxPQUFPLENBQUMsR0FBRzNCLE9BQU82QixVQUFVLEVBQUUxQixpQ0FBaUNnQyxlQUFlO0FBQ2xGO0FBQ0EsU0FBU3BEO0lBQ0osSUFBR3FCLGtDQUFrQ3VCLGdDQUFnQyxFQUFFO0lBQ3hFLE1BQU1TLFNBQVMsQ0FBQyxHQUFHcEMsT0FBTzZCLFVBQVUsRUFBRTNCLCtCQUErQm1DLGdCQUFnQjtJQUNyRixJQUFJRCxXQUFXLE1BQU07UUFDakIsTUFBTSxJQUFJMUIsTUFBTTtJQUNwQjtJQUNBLE9BQU8wQjtBQUNYO0FBQ0EsK0VBQStFO0FBQy9FLFNBQVM7QUFDVCxTQUFTRSxrQkFBa0JDLElBQUksRUFBRUMsTUFBTTtJQUNuQyxJQUFJQSxXQUFXLEtBQUssR0FBR0EsU0FBUyxDQUFDO0lBQ2pDLE1BQU1DLGlCQUFpQkYsSUFBSSxDQUFDLEVBQUU7SUFDOUIsS0FBSyxNQUFNRyxpQkFBaUJyRSxPQUFPbUQsTUFBTSxDQUFDaUIsZ0JBQWdCO1FBQ3RELE1BQU1FLFVBQVVELGFBQWEsQ0FBQyxFQUFFO1FBQ2hDLE1BQU1FLHFCQUFxQkMsTUFBTUMsT0FBTyxDQUFDSDtRQUN6QyxNQUFNSSxlQUFlSCxxQkFBcUJELE9BQU8sQ0FBQyxFQUFFLEdBQUdBO1FBQ3ZELElBQUksQ0FBQ0ksZ0JBQWdCQSxhQUFhQyxVQUFVLENBQUMxQyxTQUFTMkMsZ0JBQWdCLEdBQUc7UUFDekUsaUVBQWlFO1FBQ2pFLE1BQU1DLGFBQWFOLHNCQUF1QkQsQ0FBQUEsT0FBTyxDQUFDLEVBQUUsS0FBSyxPQUFPQSxPQUFPLENBQUMsRUFBRSxLQUFLLElBQUc7UUFDbEYsSUFBSU8sWUFBWTtZQUNaVixNQUFNLENBQUNHLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBR0EsT0FBTyxDQUFDLEVBQUUsQ0FBQ1EsS0FBSyxDQUFDO1FBQzFDLE9BQU8sSUFBSVAsb0JBQW9CO1lBQzNCSixNQUFNLENBQUNHLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBR0EsT0FBTyxDQUFDLEVBQUU7UUFDbkM7UUFDQUgsU0FBU0Ysa0JBQWtCSSxlQUFlRjtJQUM5QztJQUNBLE9BQU9BO0FBQ1g7QUFDQSxTQUFTeEQ7SUFDSixJQUFHb0Isa0NBQWtDdUIsZ0NBQWdDLEVBQUU7SUFDeEUsTUFBTXlCLHFCQUFxQixDQUFDLEdBQUdwRCxPQUFPNkIsVUFBVSxFQUFFM0IsK0JBQStCbUQseUJBQXlCO0lBQzFHLE1BQU1DLGFBQWEsQ0FBQyxHQUFHdEQsT0FBTzZCLFVBQVUsRUFBRTFCLGlDQUFpQ29ELGlCQUFpQjtJQUM1RixPQUFPLENBQUMsR0FBR3ZELE9BQU9nQyxPQUFPLEVBQUU7UUFDdkIsNkJBQTZCO1FBQzdCLElBQUlvQixzQkFBc0IsT0FBTyxLQUFLLElBQUlBLG1CQUFtQmIsSUFBSSxFQUFFO1lBQy9ELE9BQU9ELGtCQUFrQmMsbUJBQW1CYixJQUFJO1FBQ3BEO1FBQ0EsMkNBQTJDO1FBQzNDLE9BQU9lO0lBQ1gsR0FBRztRQUNDRixzQkFBc0IsT0FBTyxLQUFLLElBQUlBLG1CQUFtQmIsSUFBSTtRQUM3RGU7S0FDSDtBQUNMO0FBQ0EsbUNBQW1DO0FBQ25DOztDQUVDLEdBQUcsU0FBU0UsNkJBQTZCakIsSUFBSSxFQUFFa0IsZ0JBQWdCLEVBQUVDLEtBQUssRUFBRUMsV0FBVztJQUNoRixJQUFJRCxVQUFVLEtBQUssR0FBR0EsUUFBUTtJQUM5QixJQUFJQyxnQkFBZ0IsS0FBSyxHQUFHQSxjQUFjLEVBQUU7SUFDNUMsSUFBSUM7SUFDSixJQUFJRixPQUFPO1FBQ1Asa0VBQWtFO1FBQ2xFRSxPQUFPckIsSUFBSSxDQUFDLEVBQUUsQ0FBQ2tCLGlCQUFpQjtJQUNwQyxPQUFPO1FBQ0gsb0dBQW9HO1FBQ3BHLE1BQU1oQixpQkFBaUJGLElBQUksQ0FBQyxFQUFFO1FBQzlCLElBQUlzQjtRQUNKRCxPQUFPLENBQUNDLDJCQUEyQnBCLGVBQWVxQixRQUFRLEtBQUssT0FBT0QsMkJBQTJCeEYsT0FBT21ELE1BQU0sQ0FBQ2lCLGVBQWUsQ0FBQyxFQUFFO0lBQ3JJO0lBQ0EsSUFBSSxDQUFDbUIsTUFBTSxPQUFPRDtJQUNsQixNQUFNaEIsVUFBVWlCLElBQUksQ0FBQyxFQUFFO0lBQ3ZCLE1BQU1iLGVBQWUsQ0FBQyxHQUFHMUMsaUJBQWlCMEQsZUFBZSxFQUFFcEI7SUFDM0QsSUFBSSxDQUFDSSxnQkFBZ0JBLGFBQWFDLFVBQVUsQ0FBQzFDLFNBQVMyQyxnQkFBZ0IsR0FBRztRQUNyRSxPQUFPVTtJQUNYO0lBQ0FBLFlBQVlLLElBQUksQ0FBQ2pCO0lBQ2pCLE9BQU9TLDZCQUE2QkksTUFBTUgsa0JBQWtCLE9BQU9FO0FBQ3ZFO0FBQ0EsU0FBUzFFLDBCQUEwQndFLGdCQUFnQjtJQUMvQyxJQUFJQSxxQkFBcUIsS0FBSyxHQUFHQSxtQkFBbUI7SUFDbkQsSUFBR3JELGtDQUFrQ3VCLGdDQUFnQyxFQUFFO0lBQ3hFLE1BQU0sRUFBRVksSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHdkMsT0FBTzZCLFVBQVUsRUFBRTNCLCtCQUErQitELG1CQUFtQjtJQUMxRixPQUFPVCw2QkFBNkJqQixNQUFNa0I7QUFDOUM7QUFDQSxTQUFTdkUseUJBQXlCdUUsZ0JBQWdCOztJQUM5QyxJQUFJQSxxQkFBcUIsS0FBSyxHQUFHQSxtQkFBbUI7SUFDbkQsSUFBR3JELGtDQUFrQ3VCLGdDQUFnQyxFQUFFO0lBQ3hFLE1BQU11Qyx5QkFBeUJqRiwwQkFBMEJ3RTtJQUN6RCxJQUFJUyx1QkFBdUJDLE1BQU0sS0FBSyxHQUFHO1FBQ3JDLE9BQU87SUFDWDtJQUNBLE9BQU9ELHNCQUFzQixDQUFDLEVBQUU7QUFDcEM7R0FSU2hGOztRQUcwQkQ7OztBQU9uQyxJQUFJLENBQUMsT0FBT1YsUUFBUTZGLE9BQU8sS0FBSyxjQUFlLE9BQU83RixRQUFRNkYsT0FBTyxLQUFLLFlBQVk3RixRQUFRNkYsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPN0YsUUFBUTZGLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktoRyxPQUFPQyxjQUFjLENBQUNDLFFBQVE2RixPQUFPLEVBQUUsY0FBYztRQUFFNUYsT0FBTztJQUFLO0lBQ25FSCxPQUFPaUcsTUFBTSxDQUFDL0YsUUFBUTZGLE9BQU8sRUFBRTdGO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVE2RixPQUFPO0FBQ2xDLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbmF2aWdhdGlvbi5qcz8zNDgyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXM6IG51bGwsXG4gICAgdXNlU2VhcmNoUGFyYW1zOiBudWxsLFxuICAgIHVzZVBhdGhuYW1lOiBudWxsLFxuICAgIFNlcnZlckluc2VydGVkSFRNTENvbnRleHQ6IG51bGwsXG4gICAgdXNlU2VydmVySW5zZXJ0ZWRIVE1MOiBudWxsLFxuICAgIHVzZVJvdXRlcjogbnVsbCxcbiAgICB1c2VQYXJhbXM6IG51bGwsXG4gICAgdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50czogbnVsbCxcbiAgICB1c2VTZWxlY3RlZExheW91dFNlZ21lbnQ6IG51bGwsXG4gICAgcmVkaXJlY3Q6IG51bGwsXG4gICAgcGVybWFuZW50UmVkaXJlY3Q6IG51bGwsXG4gICAgUmVkaXJlY3RUeXBlOiBudWxsLFxuICAgIG5vdEZvdW5kOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zO1xuICAgIH0sXG4gICAgdXNlU2VhcmNoUGFyYW1zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZVNlYXJjaFBhcmFtcztcbiAgICB9LFxuICAgIHVzZVBhdGhuYW1lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZVBhdGhuYW1lO1xuICAgIH0sXG4gICAgU2VydmVySW5zZXJ0ZWRIVE1MQ29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc2VydmVyaW5zZXJ0ZWRodG1sc2hhcmVkcnVudGltZS5TZXJ2ZXJJbnNlcnRlZEhUTUxDb250ZXh0O1xuICAgIH0sXG4gICAgdXNlU2VydmVySW5zZXJ0ZWRIVE1MOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zZXJ2ZXJpbnNlcnRlZGh0bWxzaGFyZWRydW50aW1lLnVzZVNlcnZlckluc2VydGVkSFRNTDtcbiAgICB9LFxuICAgIHVzZVJvdXRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VSb3V0ZXI7XG4gICAgfSxcbiAgICB1c2VQYXJhbXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXNlUGFyYW1zO1xuICAgIH0sXG4gICAgdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50czogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzO1xuICAgIH0sXG4gICAgdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZVNlbGVjdGVkTGF5b3V0U2VnbWVudDtcbiAgICB9LFxuICAgIHJlZGlyZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9yZWRpcmVjdC5yZWRpcmVjdDtcbiAgICB9LFxuICAgIHBlcm1hbmVudFJlZGlyZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9yZWRpcmVjdC5wZXJtYW5lbnRSZWRpcmVjdDtcbiAgICB9LFxuICAgIFJlZGlyZWN0VHlwZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfcmVkaXJlY3QuUmVkaXJlY3RUeXBlO1xuICAgIH0sXG4gICAgbm90Rm91bmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX25vdGZvdW5kLm5vdEZvdW5kO1xuICAgIH1cbn0pO1xuY29uc3QgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuY29uc3QgX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vLi4vc2hhcmVkL2xpYi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmNvbnN0IF9jbGllbnRob29raW5zZXJ2ZXJjb21wb25lbnRlcnJvciA9IHJlcXVpcmUoXCIuL2NsaWVudC1ob29rLWluLXNlcnZlci1jb21wb25lbnQtZXJyb3JcIik7XG5jb25zdCBfZ2V0c2VnbWVudHZhbHVlID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZ2V0LXNlZ21lbnQtdmFsdWVcIik7XG5jb25zdCBfc2VnbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL3NlZ21lbnRcIik7XG5jb25zdCBfc2VydmVyaW5zZXJ0ZWRodG1sc2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL3NlcnZlci1pbnNlcnRlZC1odG1sLnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX3JlZGlyZWN0ID0gcmVxdWlyZShcIi4vcmVkaXJlY3RcIik7XG5jb25zdCBfbm90Zm91bmQgPSByZXF1aXJlKFwiLi9ub3QtZm91bmRcIik7XG5jb25zdCBJTlRFUk5BTF9VUkxTRUFSQ0hQQVJBTVNfSU5TVEFOQ0UgPSBTeW1ib2woXCJpbnRlcm5hbCBmb3IgdXJsc2VhcmNocGFyYW1zIHJlYWRvbmx5XCIpO1xuZnVuY3Rpb24gcmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNFcnJvcigpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKFwiUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMgY2Fubm90IGJlIG1vZGlmaWVkXCIpO1xufVxuY2xhc3MgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMge1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tJTlRFUk5BTF9VUkxTRUFSQ0hQQVJBTVNfSU5TVEFOQ0VdW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgYXBwZW5kKCkge1xuICAgICAgICB0aHJvdyByZWFkb25seVVSTFNlYXJjaFBhcmFtc0Vycm9yKCk7XG4gICAgfVxuICAgIGRlbGV0ZSgpIHtcbiAgICAgICAgdGhyb3cgcmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNFcnJvcigpO1xuICAgIH1cbiAgICBzZXQoKSB7XG4gICAgICAgIHRocm93IHJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zRXJyb3IoKTtcbiAgICB9XG4gICAgc29ydCgpIHtcbiAgICAgICAgdGhyb3cgcmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNFcnJvcigpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih1cmxTZWFyY2hQYXJhbXMpe1xuICAgICAgICB0aGlzW0lOVEVSTkFMX1VSTFNFQVJDSFBBUkFNU19JTlNUQU5DRV0gPSB1cmxTZWFyY2hQYXJhbXM7XG4gICAgICAgIHRoaXMuZW50cmllcyA9IHVybFNlYXJjaFBhcmFtcy5lbnRyaWVzLmJpbmQodXJsU2VhcmNoUGFyYW1zKTtcbiAgICAgICAgdGhpcy5mb3JFYWNoID0gdXJsU2VhcmNoUGFyYW1zLmZvckVhY2guYmluZCh1cmxTZWFyY2hQYXJhbXMpO1xuICAgICAgICB0aGlzLmdldCA9IHVybFNlYXJjaFBhcmFtcy5nZXQuYmluZCh1cmxTZWFyY2hQYXJhbXMpO1xuICAgICAgICB0aGlzLmdldEFsbCA9IHVybFNlYXJjaFBhcmFtcy5nZXRBbGwuYmluZCh1cmxTZWFyY2hQYXJhbXMpO1xuICAgICAgICB0aGlzLmhhcyA9IHVybFNlYXJjaFBhcmFtcy5oYXMuYmluZCh1cmxTZWFyY2hQYXJhbXMpO1xuICAgICAgICB0aGlzLmtleXMgPSB1cmxTZWFyY2hQYXJhbXMua2V5cy5iaW5kKHVybFNlYXJjaFBhcmFtcyk7XG4gICAgICAgIHRoaXMudmFsdWVzID0gdXJsU2VhcmNoUGFyYW1zLnZhbHVlcy5iaW5kKHVybFNlYXJjaFBhcmFtcyk7XG4gICAgICAgIHRoaXMudG9TdHJpbmcgPSB1cmxTZWFyY2hQYXJhbXMudG9TdHJpbmcuYmluZCh1cmxTZWFyY2hQYXJhbXMpO1xuICAgICAgICB0aGlzLnNpemUgPSB1cmxTZWFyY2hQYXJhbXMuc2l6ZTtcbiAgICB9XG59XG5mdW5jdGlvbiB1c2VTZWFyY2hQYXJhbXMoKSB7XG4gICAgKDAsIF9jbGllbnRob29raW5zZXJ2ZXJjb21wb25lbnRlcnJvci5jbGllbnRIb29rSW5TZXJ2ZXJDb21wb25lbnRFcnJvcikoXCJ1c2VTZWFyY2hQYXJhbXNcIik7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfaG9va3NjbGllbnRjb250ZXh0c2hhcmVkcnVudGltZS5TZWFyY2hQYXJhbXNDb250ZXh0KTtcbiAgICAvLyBJbiB0aGUgY2FzZSB3aGVyZSB0aGlzIGlzIGBudWxsYCwgdGhlIGNvbXBhdCB0eXBlcyBhZGRlZCBpblxuICAgIC8vIGBuZXh0LWVudi5kLnRzYCB3aWxsIGFkZCBhIG5ldyBvdmVybG9hZCB0aGF0IGNoYW5nZXMgdGhlIHJldHVybiB0eXBlIHRvXG4gICAgLy8gaW5jbHVkZSBgbnVsbGAuXG4gICAgY29uc3QgcmVhZG9ubHlTZWFyY2hQYXJhbXMgPSAoMCwgX3JlYWN0LnVzZU1lbW8pKCgpPT57XG4gICAgICAgIGlmICghc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgICAgICAvLyBXaGVuIHRoZSByb3V0ZXIgaXMgbm90IHJlYWR5IGluIHBhZ2VzLCB3ZSB3b24ndCBoYXZlIHRoZSBzZWFyY2ggcGFyYW1zXG4gICAgICAgICAgICAvLyBhdmFpbGFibGUuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zKHNlYXJjaFBhcmFtcyk7XG4gICAgfSwgW1xuICAgICAgICBzZWFyY2hQYXJhbXNcbiAgICBdKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAvLyBBc3luY0xvY2FsU3RvcmFnZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBjbGllbnQgYnVuZGxlLlxuICAgICAgICBjb25zdCB7IGJhaWxvdXRUb0NsaWVudFJlbmRlcmluZyB9ID0gcmVxdWlyZShcIi4vYmFpbG91dC10by1jbGllbnQtcmVuZGVyaW5nXCIpO1xuICAgICAgICAvLyBUT0RPLUFQUDogaGFuZGxlIGR5bmFtaWMgPSAnZm9yY2Utc3RhdGljJyBoZXJlIGFuZCBvbiB0aGUgY2xpZW50XG4gICAgICAgIGJhaWxvdXRUb0NsaWVudFJlbmRlcmluZyhcInVzZVNlYXJjaFBhcmFtcygpXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVhZG9ubHlTZWFyY2hQYXJhbXM7XG59XG5mdW5jdGlvbiB1c2VQYXRobmFtZSgpIHtcbiAgICAoMCwgX2NsaWVudGhvb2tpbnNlcnZlcmNvbXBvbmVudGVycm9yLmNsaWVudEhvb2tJblNlcnZlckNvbXBvbmVudEVycm9yKShcInVzZVBhdGhuYW1lXCIpO1xuICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoaXMgaXMgYG51bGxgLCB0aGUgY29tcGF0IHR5cGVzIGFkZGVkIGluIGBuZXh0LWVudi5kLnRzYFxuICAgIC8vIHdpbGwgYWRkIGEgbmV3IG92ZXJsb2FkIHRoYXQgY2hhbmdlcyB0aGUgcmV0dXJuIHR5cGUgdG8gaW5jbHVkZSBgbnVsbGAuXG4gICAgcmV0dXJuICgwLCBfcmVhY3QudXNlQ29udGV4dCkoX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUuUGF0aG5hbWVDb250ZXh0KTtcbn1cbmZ1bmN0aW9uIHVzZVJvdXRlcigpIHtcbiAgICAoMCwgX2NsaWVudGhvb2tpbnNlcnZlcmNvbXBvbmVudGVycm9yLmNsaWVudEhvb2tJblNlcnZlckNvbXBvbmVudEVycm9yKShcInVzZVJvdXRlclwiKTtcbiAgICBjb25zdCByb3V0ZXIgPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5BcHBSb3V0ZXJDb250ZXh0KTtcbiAgICBpZiAocm91dGVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFyaWFudCBleHBlY3RlZCBhcHAgcm91dGVyIHRvIGJlIG1vdW50ZWRcIik7XG4gICAgfVxuICAgIHJldHVybiByb3V0ZXI7XG59XG4vLyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIG9mIHRoZSB0cmVlIHRvIGZpbmQgdGhlIHNlbGVjdGVkXG4vLyBwYXJhbXNcbmZ1bmN0aW9uIGdldFNlbGVjdGVkUGFyYW1zKHRyZWUsIHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMgPT09IHZvaWQgMCkgcGFyYW1zID0ge307XG4gICAgY29uc3QgcGFyYWxsZWxSb3V0ZXMgPSB0cmVlWzFdO1xuICAgIGZvciAoY29uc3QgcGFyYWxsZWxSb3V0ZSBvZiBPYmplY3QudmFsdWVzKHBhcmFsbGVsUm91dGVzKSl7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBwYXJhbGxlbFJvdXRlWzBdO1xuICAgICAgICBjb25zdCBpc0R5bmFtaWNQYXJhbWV0ZXIgPSBBcnJheS5pc0FycmF5KHNlZ21lbnQpO1xuICAgICAgICBjb25zdCBzZWdtZW50VmFsdWUgPSBpc0R5bmFtaWNQYXJhbWV0ZXIgPyBzZWdtZW50WzFdIDogc2VnbWVudDtcbiAgICAgICAgaWYgKCFzZWdtZW50VmFsdWUgfHwgc2VnbWVudFZhbHVlLnN0YXJ0c1dpdGgoX3NlZ21lbnQuUEFHRV9TRUdNRU5UX0tFWSkpIGNvbnRpbnVlO1xuICAgICAgICAvLyBFbnN1cmUgY2F0Y2hBbGwgYW5kIG9wdGlvbmFsIGNhdGNoYWxsIGFyZSB0dXJuZWQgaW50byBhbiBhcnJheVxuICAgICAgICBjb25zdCBpc0NhdGNoQWxsID0gaXNEeW5hbWljUGFyYW1ldGVyICYmIChzZWdtZW50WzJdID09PSBcImNcIiB8fCBzZWdtZW50WzJdID09PSBcIm9jXCIpO1xuICAgICAgICBpZiAoaXNDYXRjaEFsbCkge1xuICAgICAgICAgICAgcGFyYW1zW3NlZ21lbnRbMF1dID0gc2VnbWVudFsxXS5zcGxpdChcIi9cIik7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEeW5hbWljUGFyYW1ldGVyKSB7XG4gICAgICAgICAgICBwYXJhbXNbc2VnbWVudFswXV0gPSBzZWdtZW50WzFdO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtcyA9IGdldFNlbGVjdGVkUGFyYW1zKHBhcmFsbGVsUm91dGUsIHBhcmFtcyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG59XG5mdW5jdGlvbiB1c2VQYXJhbXMoKSB7XG4gICAgKDAsIF9jbGllbnRob29raW5zZXJ2ZXJjb21wb25lbnRlcnJvci5jbGllbnRIb29rSW5TZXJ2ZXJDb21wb25lbnRFcnJvcikoXCJ1c2VQYXJhbXNcIik7XG4gICAgY29uc3QgZ2xvYmFsTGF5b3V0Um91dGVyID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCk7XG4gICAgY29uc3QgcGF0aFBhcmFtcyA9ICgwLCBfcmVhY3QudXNlQ29udGV4dCkoX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUuUGF0aFBhcmFtc0NvbnRleHQpO1xuICAgIHJldHVybiAoMCwgX3JlYWN0LnVzZU1lbW8pKCgpPT57XG4gICAgICAgIC8vIFdoZW4gaXQncyB1bmRlciBhcHAgcm91dGVyXG4gICAgICAgIGlmIChnbG9iYWxMYXlvdXRSb3V0ZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGdsb2JhbExheW91dFJvdXRlci50cmVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRQYXJhbXMoZ2xvYmFsTGF5b3V0Um91dGVyLnRyZWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gaXQncyB1bmRlciBjbGllbnQgc2lkZSBwYWdlcyByb3V0ZXJcbiAgICAgICAgcmV0dXJuIHBhdGhQYXJhbXM7XG4gICAgfSwgW1xuICAgICAgICBnbG9iYWxMYXlvdXRSb3V0ZXIgPT0gbnVsbCA/IHZvaWQgMCA6IGdsb2JhbExheW91dFJvdXRlci50cmVlLFxuICAgICAgICBwYXRoUGFyYW1zXG4gICAgXSk7XG59XG4vLyBUT0RPLUFQUDogaGFuZGxlIHBhcmFsbGVsIHJvdXRlc1xuLyoqXG4gKiBHZXQgdGhlIGNhbm9uaWNhbCBwYXJhbWV0ZXJzIGZyb20gdGhlIGN1cnJlbnQgbGV2ZWwgdG8gdGhlIGxlYWYgbm9kZS5cbiAqLyBmdW5jdGlvbiBnZXRTZWxlY3RlZExheW91dFNlZ21lbnRQYXRoKHRyZWUsIHBhcmFsbGVsUm91dGVLZXksIGZpcnN0LCBzZWdtZW50UGF0aCkge1xuICAgIGlmIChmaXJzdCA9PT0gdm9pZCAwKSBmaXJzdCA9IHRydWU7XG4gICAgaWYgKHNlZ21lbnRQYXRoID09PSB2b2lkIDApIHNlZ21lbnRQYXRoID0gW107XG4gICAgbGV0IG5vZGU7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYWxsZWwgcm91dGUga2V5IG9uIHRoZSBmaXJzdCBwYXJhbGxlbCByb3V0ZVxuICAgICAgICBub2RlID0gdHJlZVsxXVtwYXJhbGxlbFJvdXRlS2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBZnRlciBmaXJzdCBwYXJhbGxlbCByb3V0ZSBwcmVmZXIgY2hpbGRyZW4sIGlmIHRoZXJlJ3Mgbm8gY2hpbGRyZW4gcGljayB0aGUgZmlyc3QgcGFyYWxsZWwgcm91dGUuXG4gICAgICAgIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gdHJlZVsxXTtcbiAgICAgICAgdmFyIF9wYXJhbGxlbFJvdXRlc19jaGlsZHJlbjtcbiAgICAgICAgbm9kZSA9IChfcGFyYWxsZWxSb3V0ZXNfY2hpbGRyZW4gPSBwYXJhbGxlbFJvdXRlcy5jaGlsZHJlbikgIT0gbnVsbCA/IF9wYXJhbGxlbFJvdXRlc19jaGlsZHJlbiA6IE9iamVjdC52YWx1ZXMocGFyYWxsZWxSb3V0ZXMpWzBdO1xuICAgIH1cbiAgICBpZiAoIW5vZGUpIHJldHVybiBzZWdtZW50UGF0aDtcbiAgICBjb25zdCBzZWdtZW50ID0gbm9kZVswXTtcbiAgICBjb25zdCBzZWdtZW50VmFsdWUgPSAoMCwgX2dldHNlZ21lbnR2YWx1ZS5nZXRTZWdtZW50VmFsdWUpKHNlZ21lbnQpO1xuICAgIGlmICghc2VnbWVudFZhbHVlIHx8IHNlZ21lbnRWYWx1ZS5zdGFydHNXaXRoKF9zZWdtZW50LlBBR0VfU0VHTUVOVF9LRVkpKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50UGF0aDtcbiAgICB9XG4gICAgc2VnbWVudFBhdGgucHVzaChzZWdtZW50VmFsdWUpO1xuICAgIHJldHVybiBnZXRTZWxlY3RlZExheW91dFNlZ21lbnRQYXRoKG5vZGUsIHBhcmFsbGVsUm91dGVLZXksIGZhbHNlLCBzZWdtZW50UGF0aCk7XG59XG5mdW5jdGlvbiB1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzKHBhcmFsbGVsUm91dGVLZXkpIHtcbiAgICBpZiAocGFyYWxsZWxSb3V0ZUtleSA9PT0gdm9pZCAwKSBwYXJhbGxlbFJvdXRlS2V5ID0gXCJjaGlsZHJlblwiO1xuICAgICgwLCBfY2xpZW50aG9va2luc2VydmVyY29tcG9uZW50ZXJyb3IuY2xpZW50SG9va0luU2VydmVyQ29tcG9uZW50RXJyb3IpKFwidXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50c1wiKTtcbiAgICBjb25zdCB7IHRyZWUgfSA9ICgwLCBfcmVhY3QudXNlQ29udGV4dCkoX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lLkxheW91dFJvdXRlckNvbnRleHQpO1xuICAgIHJldHVybiBnZXRTZWxlY3RlZExheW91dFNlZ21lbnRQYXRoKHRyZWUsIHBhcmFsbGVsUm91dGVLZXkpO1xufVxuZnVuY3Rpb24gdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50KHBhcmFsbGVsUm91dGVLZXkpIHtcbiAgICBpZiAocGFyYWxsZWxSb3V0ZUtleSA9PT0gdm9pZCAwKSBwYXJhbGxlbFJvdXRlS2V5ID0gXCJjaGlsZHJlblwiO1xuICAgICgwLCBfY2xpZW50aG9va2luc2VydmVyY29tcG9uZW50ZXJyb3IuY2xpZW50SG9va0luU2VydmVyQ29tcG9uZW50RXJyb3IpKFwidXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50XCIpO1xuICAgIGNvbnN0IHNlbGVjdGVkTGF5b3V0U2VnbWVudHMgPSB1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzKHBhcmFsbGVsUm91dGVLZXkpO1xuICAgIGlmIChzZWxlY3RlZExheW91dFNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkTGF5b3V0U2VnbWVudHNbMF07XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5hdmlnYXRpb24uanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VQYXRobmFtZSIsIlNlcnZlckluc2VydGVkSFRNTENvbnRleHQiLCJ1c2VTZXJ2ZXJJbnNlcnRlZEhUTUwiLCJ1c2VSb3V0ZXIiLCJ1c2VQYXJhbXMiLCJ1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzIiwidXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50IiwicmVkaXJlY3QiLCJwZXJtYW5lbnRSZWRpcmVjdCIsIlJlZGlyZWN0VHlwZSIsIm5vdEZvdW5kIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX3NlcnZlcmluc2VydGVkaHRtbHNoYXJlZHJ1bnRpbWUiLCJfcmVkaXJlY3QiLCJfbm90Zm91bmQiLCJfcmVhY3QiLCJyZXF1aXJlIiwiX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lIiwiX2hvb2tzY2xpZW50Y29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfY2xpZW50aG9va2luc2VydmVyY29tcG9uZW50ZXJyb3IiLCJfZ2V0c2VnbWVudHZhbHVlIiwiX3NlZ21lbnQiLCJJTlRFUk5BTF9VUkxTRUFSQ0hQQVJBTVNfSU5TVEFOQ0UiLCJTeW1ib2wiLCJyZWFkb25seVVSTFNlYXJjaFBhcmFtc0Vycm9yIiwiRXJyb3IiLCJpdGVyYXRvciIsImFwcGVuZCIsImRlbGV0ZSIsInNldCIsInNvcnQiLCJjb25zdHJ1Y3RvciIsInVybFNlYXJjaFBhcmFtcyIsImVudHJpZXMiLCJiaW5kIiwiZm9yRWFjaCIsImdldEFsbCIsImhhcyIsImtleXMiLCJ2YWx1ZXMiLCJ0b1N0cmluZyIsInNpemUiLCJjbGllbnRIb29rSW5TZXJ2ZXJDb21wb25lbnRFcnJvciIsInNlYXJjaFBhcmFtcyIsInVzZUNvbnRleHQiLCJTZWFyY2hQYXJhbXNDb250ZXh0IiwicmVhZG9ubHlTZWFyY2hQYXJhbXMiLCJ1c2VNZW1vIiwid2luZG93IiwiYmFpbG91dFRvQ2xpZW50UmVuZGVyaW5nIiwiUGF0aG5hbWVDb250ZXh0Iiwicm91dGVyIiwiQXBwUm91dGVyQ29udGV4dCIsImdldFNlbGVjdGVkUGFyYW1zIiwidHJlZSIsInBhcmFtcyIsInBhcmFsbGVsUm91dGVzIiwicGFyYWxsZWxSb3V0ZSIsInNlZ21lbnQiLCJpc0R5bmFtaWNQYXJhbWV0ZXIiLCJBcnJheSIsImlzQXJyYXkiLCJzZWdtZW50VmFsdWUiLCJzdGFydHNXaXRoIiwiUEFHRV9TRUdNRU5UX0tFWSIsImlzQ2F0Y2hBbGwiLCJzcGxpdCIsImdsb2JhbExheW91dFJvdXRlciIsIkdsb2JhbExheW91dFJvdXRlckNvbnRleHQiLCJwYXRoUGFyYW1zIiwiUGF0aFBhcmFtc0NvbnRleHQiLCJnZXRTZWxlY3RlZExheW91dFNlZ21lbnRQYXRoIiwicGFyYWxsZWxSb3V0ZUtleSIsImZpcnN0Iiwic2VnbWVudFBhdGgiLCJub2RlIiwiX3BhcmFsbGVsUm91dGVzX2NoaWxkcmVuIiwiY2hpbGRyZW4iLCJnZXRTZWdtZW50VmFsdWUiLCJwdXNoIiwiTGF5b3V0Um91dGVyQ29udGV4dCIsInNlbGVjdGVkTGF5b3V0U2VnbWVudHMiLCJsZW5ndGgiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js": +/*!************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/not-found-boundary.js ***! + \************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"NotFoundBoundary\", ({\n enumerable: true,\n get: function() {\n return NotFoundBoundary;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _navigation = __webpack_require__(/*! ./navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\nconst _notfound = __webpack_require__(/*! ./not-found */ \"(app-pages-browser)/./node_modules/next/dist/client/components/not-found.js\");\nconst _warnonce = __webpack_require__(/*! ../../shared/lib/utils/warn-once */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nclass NotFoundErrorBoundary extends _react.default.Component {\n componentDidCatch() {\n if ( true && // A missing children slot is the typical not-found case, so no need to warn\n !this.props.missingSlots.has(\"children\")) {\n let warningMessage = \"No default component was found for a parallel route rendered on this page. Falling back to nearest NotFound boundary.\\n\" + \"Learn more: https://nextjs.org/docs/app/building-your-application/routing/parallel-routes#defaultjs\\n\\n\";\n if (this.props.missingSlots.size > 0) {\n const formattedSlots = Array.from(this.props.missingSlots).sort((a, b)=>a.localeCompare(b)).map((slot)=>\"@\" + slot).join(\", \");\n warningMessage += \"Missing slots: \" + formattedSlots;\n }\n (0, _warnonce.warnOnce)(warningMessage);\n }\n }\n static getDerivedStateFromError(error) {\n if ((0, _notfound.isNotFoundError)(error)) {\n return {\n notFoundTriggered: true\n };\n }\n // Re-throw if error is not for 404\n throw error;\n }\n static getDerivedStateFromProps(props, state) {\n /**\n * Handles reset of the error boundary when a navigation happens.\n * Ensures the error boundary does not stay enabled when navigating to a new page.\n * Approach of setState in render is safe as it checks the previous pathname and then overrides\n * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n */ if (props.pathname !== state.previousPathname && state.notFoundTriggered) {\n return {\n notFoundTriggered: false,\n previousPathname: props.pathname\n };\n }\n return {\n notFoundTriggered: state.notFoundTriggered,\n previousPathname: props.pathname\n };\n }\n render() {\n if (this.state.notFoundTriggered) {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"robots\",\n content: \"noindex\"\n }),\n true && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"next-error\",\n content: \"not-found\"\n }),\n this.props.notFoundStyles,\n this.props.notFound\n ]\n });\n }\n return this.props.children;\n }\n constructor(props){\n super(props);\n this.state = {\n notFoundTriggered: !!props.asNotFound,\n previousPathname: props.pathname\n };\n }\n}\nfunction NotFoundBoundary(param) {\n let { notFound, notFoundStyles, asNotFound, children } = param;\n const pathname = (0, _navigation.usePathname)();\n const missingSlots = (0, _react.useContext)(_approutercontextsharedruntime.MissingSlotContext);\n return notFound ? /*#__PURE__*/ (0, _jsxruntime.jsx)(NotFoundErrorBoundary, {\n pathname: pathname,\n notFound: notFound,\n notFoundStyles: notFoundStyles,\n asNotFound: asNotFound,\n missingSlots: missingSlots,\n children: children\n }) : /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: children\n });\n}\n_c = NotFoundBoundary;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=not-found-boundary.js.map\nvar _c;\n$RefreshReg$(_c, \"NotFoundBoundary\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWJvdW5kYXJ5LmpzIiwibWFwcGluZ3MiOiJxREFFYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsb0RBQW1EO0lBQy9DSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsbUZBQU87QUFDeEUsTUFBTUksY0FBY0osbUJBQU9BLENBQUMsa0dBQWM7QUFDMUMsTUFBTUssWUFBWUwsbUJBQU9BLENBQUMsZ0dBQWE7QUFDdkMsTUFBTU0sWUFBWU4sbUJBQU9BLENBQUMsb0hBQWtDO0FBQzVELE1BQU1PLGlDQUFpQ1AsbUJBQU9BLENBQUMsd0pBQW9EO0FBQ25HLE1BQU1RLDhCQUE4Qk4sT0FBT08sT0FBTyxDQUFDQyxTQUFTO0lBQ3hEQyxvQkFBb0I7UUFDaEIsSUFBSUMsS0FBc0MsSUFBSSw0RUFBNEU7UUFDMUgsQ0FBQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsWUFBWSxDQUFDQyxHQUFHLENBQUMsYUFBYTtZQUN0QyxJQUFJQyxpQkFBaUIsNEhBQTRIO1lBQ2pKLElBQUksSUFBSSxDQUFDSCxLQUFLLENBQUNDLFlBQVksQ0FBQ0csSUFBSSxHQUFHLEdBQUc7Z0JBQ2xDLE1BQU1DLGlCQUFpQkMsTUFBTUMsSUFBSSxDQUFDLElBQUksQ0FBQ1AsS0FBSyxDQUFDQyxZQUFZLEVBQUVPLElBQUksQ0FBQyxDQUFDQyxHQUFHQyxJQUFJRCxFQUFFRSxhQUFhLENBQUNELElBQUlFLEdBQUcsQ0FBQyxDQUFDQyxPQUFPLE1BQU1BLE1BQU1DLElBQUksQ0FBQztnQkFDekhYLGtCQUFrQixvQkFBb0JFO1lBQzFDO1lBQ0MsSUFBR1osVUFBVXNCLFFBQVEsRUFBRVo7UUFDNUI7SUFDSjtJQUNBLE9BQU9hLHlCQUF5QkMsS0FBSyxFQUFFO1FBQ25DLElBQUksQ0FBQyxHQUFHekIsVUFBVTBCLGVBQWUsRUFBRUQsUUFBUTtZQUN2QyxPQUFPO2dCQUNIRSxtQkFBbUI7WUFDdkI7UUFDSjtRQUNBLG1DQUFtQztRQUNuQyxNQUFNRjtJQUNWO0lBQ0EsT0FBT0cseUJBQXlCcEIsS0FBSyxFQUFFcUIsS0FBSyxFQUFFO1FBQzFDOzs7OztLQUtILEdBQUcsSUFBSXJCLE1BQU1zQixRQUFRLEtBQUtELE1BQU1FLGdCQUFnQixJQUFJRixNQUFNRixpQkFBaUIsRUFBRTtZQUN0RSxPQUFPO2dCQUNIQSxtQkFBbUI7Z0JBQ25CSSxrQkFBa0J2QixNQUFNc0IsUUFBUTtZQUNwQztRQUNKO1FBQ0EsT0FBTztZQUNISCxtQkFBbUJFLE1BQU1GLGlCQUFpQjtZQUMxQ0ksa0JBQWtCdkIsTUFBTXNCLFFBQVE7UUFDcEM7SUFDSjtJQUNBRSxTQUFTO1FBQ0wsSUFBSSxJQUFJLENBQUNILEtBQUssQ0FBQ0YsaUJBQWlCLEVBQUU7WUFDOUIsT0FBcUIsV0FBSCxHQUFJLElBQUcvQixZQUFZcUMsSUFBSSxFQUFFckMsWUFBWXNDLFFBQVEsRUFBRTtnQkFDN0RDLFVBQVU7b0JBQ04sV0FBVyxHQUFJLElBQUd2QyxZQUFZd0MsR0FBRyxFQUFFLFFBQVE7d0JBQ3ZDQyxNQUFNO3dCQUNOQyxTQUFTO29CQUNiO29CQWhFcEIsS0FpRTBELElBQWtCLFdBQUgsR0FBSSxJQUFHMUMsWUFBWXdDLEdBQUcsRUFBRSxRQUFRO3dCQUNqRkMsTUFBTTt3QkFDTkMsU0FBUztvQkFDYjtvQkFDQSxJQUFJLENBQUM5QixLQUFLLENBQUMrQixjQUFjO29CQUN6QixJQUFJLENBQUMvQixLQUFLLENBQUNnQyxRQUFRO2lCQUN0QjtZQUNMO1FBQ0o7UUFDQSxPQUFPLElBQUksQ0FBQ2hDLEtBQUssQ0FBQzJCLFFBQVE7SUFDOUI7SUFDQU0sWUFBWWpDLEtBQUssQ0FBQztRQUNkLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNxQixLQUFLLEdBQUc7WUFDVEYsbUJBQW1CLENBQUMsQ0FBQ25CLE1BQU1rQyxVQUFVO1lBQ3JDWCxrQkFBa0J2QixNQUFNc0IsUUFBUTtRQUNwQztJQUNKO0FBQ0o7QUFDQSxTQUFTckMsaUJBQWlCa0QsS0FBSztJQUMzQixJQUFJLEVBQUVILFFBQVEsRUFBRUQsY0FBYyxFQUFFRyxVQUFVLEVBQUVQLFFBQVEsRUFBRSxHQUFHUTtJQUN6RCxNQUFNYixXQUFXLENBQUMsR0FBRy9CLFlBQVk2QyxXQUFXO0lBQzVDLE1BQU1uQyxlQUFlLENBQUMsR0FBR1osT0FBT2dELFVBQVUsRUFBRTNDLCtCQUErQjRDLGtCQUFrQjtJQUM3RixPQUFPTixXQUF5QixXQUFILEdBQUksSUFBRzVDLFlBQVl3QyxHQUFHLEVBQUVqQyx1QkFBdUI7UUFDeEUyQixVQUFVQTtRQUNWVSxVQUFVQTtRQUNWRCxnQkFBZ0JBO1FBQ2hCRyxZQUFZQTtRQUNaakMsY0FBY0E7UUFDZDBCLFVBQVVBO0lBQ2QsS0FBbUIsV0FBSCxHQUFJLElBQUd2QyxZQUFZd0MsR0FBRyxFQUFFeEMsWUFBWXNDLFFBQVEsRUFBRTtRQUMxREMsVUFBVUE7SUFDZDtBQUNKO0tBZFMxQztBQWdCVCxJQUFJLENBQUMsT0FBT0osUUFBUWUsT0FBTyxLQUFLLGNBQWUsT0FBT2YsUUFBUWUsT0FBTyxLQUFLLFlBQVlmLFFBQVFlLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2YsUUFBUWUsT0FBTyxDQUFDMkMsVUFBVSxLQUFLLGFBQWE7SUFDcks1RCxPQUFPQyxjQUFjLENBQUNDLFFBQVFlLE9BQU8sRUFBRSxjQUFjO1FBQUVkLE9BQU87SUFBSztJQUNuRUgsT0FBTzZELE1BQU0sQ0FBQzNELFFBQVFlLE9BQU8sRUFBRWY7SUFDL0I0RCxPQUFPNUQsT0FBTyxHQUFHQSxRQUFRZSxPQUFPO0FBQ2xDLEVBRUEsOENBQThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLWJvdW5kYXJ5LmpzPzMyYzkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTm90Rm91bmRCb3VuZGFyeVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTm90Rm91bmRCb3VuZGFyeTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9uYXZpZ2F0aW9uID0gcmVxdWlyZShcIi4vbmF2aWdhdGlvblwiKTtcbmNvbnN0IF9ub3Rmb3VuZCA9IHJlcXVpcmUoXCIuL25vdC1mb3VuZFwiKTtcbmNvbnN0IF93YXJub25jZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL3V0aWxzL3dhcm4tb25jZVwiKTtcbmNvbnN0IF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmNsYXNzIE5vdEZvdW5kRXJyb3JCb3VuZGFyeSBleHRlbmRzIF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudCB7XG4gICAgY29tcG9uZW50RGlkQ2F0Y2goKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiICYmIC8vIEEgbWlzc2luZyBjaGlsZHJlbiBzbG90IGlzIHRoZSB0eXBpY2FsIG5vdC1mb3VuZCBjYXNlLCBzbyBubyBuZWVkIHRvIHdhcm5cbiAgICAgICAgIXRoaXMucHJvcHMubWlzc2luZ1Nsb3RzLmhhcyhcImNoaWxkcmVuXCIpKSB7XG4gICAgICAgICAgICBsZXQgd2FybmluZ01lc3NhZ2UgPSBcIk5vIGRlZmF1bHQgY29tcG9uZW50IHdhcyBmb3VuZCBmb3IgYSBwYXJhbGxlbCByb3V0ZSByZW5kZXJlZCBvbiB0aGlzIHBhZ2UuIEZhbGxpbmcgYmFjayB0byBuZWFyZXN0IE5vdEZvdW5kIGJvdW5kYXJ5LlxcblwiICsgXCJMZWFybiBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL3BhcmFsbGVsLXJvdXRlcyNkZWZhdWx0anNcXG5cXG5cIjtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLm1pc3NpbmdTbG90cy5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFNsb3RzID0gQXJyYXkuZnJvbSh0aGlzLnByb3BzLm1pc3NpbmdTbG90cykuc29ydCgoYSwgYik9PmEubG9jYWxlQ29tcGFyZShiKSkubWFwKChzbG90KT0+XCJAXCIgKyBzbG90KS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2UgKz0gXCJNaXNzaW5nIHNsb3RzOiBcIiArIGZvcm1hdHRlZFNsb3RzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKDAsIF93YXJub25jZS53YXJuT25jZSkod2FybmluZ01lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKCgwLCBfbm90Zm91bmQuaXNOb3RGb3VuZEVycm9yKShlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbm90Rm91bmRUcmlnZ2VyZWQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmUtdGhyb3cgaWYgZXJyb3IgaXMgbm90IGZvciA0MDRcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgICAgIC8qKlxuICAgICAqIEhhbmRsZXMgcmVzZXQgb2YgdGhlIGVycm9yIGJvdW5kYXJ5IHdoZW4gYSBuYXZpZ2F0aW9uIGhhcHBlbnMuXG4gICAgICogRW5zdXJlcyB0aGUgZXJyb3IgYm91bmRhcnkgZG9lcyBub3Qgc3RheSBlbmFibGVkIHdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlLlxuICAgICAqIEFwcHJvYWNoIG9mIHNldFN0YXRlIGluIHJlbmRlciBpcyBzYWZlIGFzIGl0IGNoZWNrcyB0aGUgcHJldmlvdXMgcGF0aG5hbWUgYW5kIHRoZW4gb3ZlcnJpZGVzXG4gICAgICogaXQgYXMgb3V0bGluZWQgaW4gaHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L3VzZVN0YXRlI3N0b3JpbmctaW5mb3JtYXRpb24tZnJvbS1wcmV2aW91cy1yZW5kZXJzXG4gICAgICovIGlmIChwcm9wcy5wYXRobmFtZSAhPT0gc3RhdGUucHJldmlvdXNQYXRobmFtZSAmJiBzdGF0ZS5ub3RGb3VuZFRyaWdnZXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBub3RGb3VuZFRyaWdnZXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vdEZvdW5kVHJpZ2dlcmVkOiBzdGF0ZS5ub3RGb3VuZFRyaWdnZXJlZCxcbiAgICAgICAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUubm90Rm91bmRUcmlnZ2VyZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJtZXRhXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicm9ib3RzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcIm5vaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiAmJiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwibWV0YVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm5leHQtZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwibm90LWZvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubm90Rm91bmRTdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubm90Rm91bmRcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocHJvcHMpe1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBub3RGb3VuZFRyaWdnZXJlZDogISFwcm9wcy5hc05vdEZvdW5kLFxuICAgICAgICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICB9XG59XG5mdW5jdGlvbiBOb3RGb3VuZEJvdW5kYXJ5KHBhcmFtKSB7XG4gICAgbGV0IHsgbm90Rm91bmQsIG5vdEZvdW5kU3R5bGVzLCBhc05vdEZvdW5kLCBjaGlsZHJlbiB9ID0gcGFyYW07XG4gICAgY29uc3QgcGF0aG5hbWUgPSAoMCwgX25hdmlnYXRpb24udXNlUGF0aG5hbWUpKCk7XG4gICAgY29uc3QgbWlzc2luZ1Nsb3RzID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuTWlzc2luZ1Nsb3RDb250ZXh0KTtcbiAgICByZXR1cm4gbm90Rm91bmQgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKE5vdEZvdW5kRXJyb3JCb3VuZGFyeSwge1xuICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgICAgIG5vdEZvdW5kOiBub3RGb3VuZCxcbiAgICAgICAgbm90Rm91bmRTdHlsZXM6IG5vdEZvdW5kU3R5bGVzLFxuICAgICAgICBhc05vdEZvdW5kOiBhc05vdEZvdW5kLFxuICAgICAgICBtaXNzaW5nU2xvdHM6IG1pc3NpbmdTbG90cyxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkgOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub3QtZm91bmQtYm91bmRhcnkuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIk5vdEZvdW5kQm91bmRhcnkiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9uYXZpZ2F0aW9uIiwiX25vdGZvdW5kIiwiX3dhcm5vbmNlIiwiX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lIiwiTm90Rm91bmRFcnJvckJvdW5kYXJ5IiwiZGVmYXVsdCIsIkNvbXBvbmVudCIsImNvbXBvbmVudERpZENhdGNoIiwicHJvY2VzcyIsInByb3BzIiwibWlzc2luZ1Nsb3RzIiwiaGFzIiwid2FybmluZ01lc3NhZ2UiLCJzaXplIiwiZm9ybWF0dGVkU2xvdHMiLCJBcnJheSIsImZyb20iLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFwIiwic2xvdCIsImpvaW4iLCJ3YXJuT25jZSIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsImVycm9yIiwiaXNOb3RGb3VuZEVycm9yIiwibm90Rm91bmRUcmlnZ2VyZWQiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJzdGF0ZSIsInBhdGhuYW1lIiwicHJldmlvdXNQYXRobmFtZSIsInJlbmRlciIsImpzeHMiLCJGcmFnbWVudCIsImNoaWxkcmVuIiwianN4IiwibmFtZSIsImNvbnRlbnQiLCJub3RGb3VuZFN0eWxlcyIsIm5vdEZvdW5kIiwiY29uc3RydWN0b3IiLCJhc05vdEZvdW5kIiwicGFyYW0iLCJ1c2VQYXRobmFtZSIsInVzZUNvbnRleHQiLCJNaXNzaW5nU2xvdENvbnRleHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/not-found-boundary.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/not-found.js": +/*!***************************************************************!*\ + !*** ./node_modules/next/dist/client/components/not-found.js ***! + \***************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n notFound: function() {\n return notFound;\n },\n isNotFoundError: function() {\n return isNotFoundError;\n }\n});\nconst NOT_FOUND_ERROR_CODE = \"NEXT_NOT_FOUND\";\nfunction notFound() {\n // eslint-disable-next-line no-throw-literal\n const error = new Error(NOT_FOUND_ERROR_CODE);\n error.digest = NOT_FOUND_ERROR_CODE;\n throw error;\n}\nfunction isNotFoundError(error) {\n if (typeof error !== \"object\" || error === null || !(\"digest\" in error)) {\n return false;\n }\n return error.digest === NOT_FOUND_ERROR_CODE;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=not-found.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxVQUFVO1FBQ04sT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyx1QkFBdUI7QUFDN0IsU0FBU1I7SUFDTCw0Q0FBNEM7SUFDNUMsTUFBTVMsUUFBUSxJQUFJQyxNQUFNRjtJQUN4QkMsTUFBTUUsTUFBTSxHQUFHSDtJQUNmLE1BQU1DO0FBQ1Y7QUFDQSxTQUFTUixnQkFBZ0JRLEtBQUs7SUFDMUIsSUFBSSxPQUFPQSxVQUFVLFlBQVlBLFVBQVUsUUFBUSxDQUFFLGFBQVlBLEtBQUksR0FBSTtRQUNyRSxPQUFPO0lBQ1g7SUFDQSxPQUFPQSxNQUFNRSxNQUFNLEtBQUtIO0FBQzVCO0FBRUEsSUFBSSxDQUFDLE9BQU9YLFFBQVFlLE9BQU8sS0FBSyxjQUFlLE9BQU9mLFFBQVFlLE9BQU8sS0FBSyxZQUFZZixRQUFRZSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9mLFFBQVFlLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktsQixPQUFPQyxjQUFjLENBQUNDLFFBQVFlLE9BQU8sRUFBRSxjQUFjO1FBQUVkLE9BQU87SUFBSztJQUNuRUgsT0FBT21CLE1BQU0sQ0FBQ2pCLFFBQVFlLE9BQU8sRUFBRWY7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUWUsT0FBTztBQUNsQyxFQUVBLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZC5qcz80MjAzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbm90Rm91bmQ6IG51bGwsXG4gICAgaXNOb3RGb3VuZEVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIG5vdEZvdW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5vdEZvdW5kO1xuICAgIH0sXG4gICAgaXNOb3RGb3VuZEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzTm90Rm91bmRFcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IE5PVF9GT1VORF9FUlJPUl9DT0RFID0gXCJORVhUX05PVF9GT1VORFwiO1xuZnVuY3Rpb24gbm90Rm91bmQoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihOT1RfRk9VTkRfRVJST1JfQ09ERSk7XG4gICAgZXJyb3IuZGlnZXN0ID0gTk9UX0ZPVU5EX0VSUk9SX0NPREU7XG4gICAgdGhyb3cgZXJyb3I7XG59XG5mdW5jdGlvbiBpc05vdEZvdW5kRXJyb3IoZXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yICE9PSBcIm9iamVjdFwiIHx8IGVycm9yID09PSBudWxsIHx8ICEoXCJkaWdlc3RcIiBpbiBlcnJvcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3IuZGlnZXN0ID09PSBOT1RfRk9VTkRfRVJST1JfQ09ERTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LWZvdW5kLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIm5vdEZvdW5kIiwiaXNOb3RGb3VuZEVycm9yIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiTk9UX0ZPVU5EX0VSUk9SX0NPREUiLCJlcnJvciIsIkVycm9yIiwiZGlnZXN0IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/not-found.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/promise-queue.js": +/*!*******************************************************************!*\ + !*** ./node_modules/next/dist/client/components/promise-queue.js ***! + \*******************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/*\n This is a simple promise queue that allows you to limit the number of concurrent promises\n that are running at any given time. It's used to limit the number of concurrent\n prefetch requests that are being made to the server but could be used for other\n things as well.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"PromiseQueue\", ({\n enumerable: true,\n get: function() {\n return PromiseQueue;\n }\n}));\nconst _class_private_field_loose_base = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_base */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\");\nconst _class_private_field_loose_key = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_key */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\");\nvar _maxConcurrency = /*#__PURE__*/ _class_private_field_loose_key._(\"_maxConcurrency\"), _runningCount = /*#__PURE__*/ _class_private_field_loose_key._(\"_runningCount\"), _queue = /*#__PURE__*/ _class_private_field_loose_key._(\"_queue\"), _processNext = /*#__PURE__*/ _class_private_field_loose_key._(\"_processNext\");\nclass PromiseQueue {\n enqueue(promiseFn) {\n let taskResolve;\n let taskReject;\n const taskPromise = new Promise((resolve, reject)=>{\n taskResolve = resolve;\n taskReject = reject;\n });\n const task = async ()=>{\n try {\n _class_private_field_loose_base._(this, _runningCount)[_runningCount]++;\n const result = await promiseFn();\n taskResolve(result);\n } catch (error) {\n taskReject(error);\n } finally{\n _class_private_field_loose_base._(this, _runningCount)[_runningCount]--;\n _class_private_field_loose_base._(this, _processNext)[_processNext]();\n }\n };\n const enqueueResult = {\n promiseFn: taskPromise,\n task\n };\n // wonder if we should take a LIFO approach here\n _class_private_field_loose_base._(this, _queue)[_queue].push(enqueueResult);\n _class_private_field_loose_base._(this, _processNext)[_processNext]();\n return taskPromise;\n }\n bump(promiseFn) {\n const index = _class_private_field_loose_base._(this, _queue)[_queue].findIndex((item)=>item.promiseFn === promiseFn);\n if (index > -1) {\n const bumpedItem = _class_private_field_loose_base._(this, _queue)[_queue].splice(index, 1)[0];\n _class_private_field_loose_base._(this, _queue)[_queue].unshift(bumpedItem);\n _class_private_field_loose_base._(this, _processNext)[_processNext](true);\n }\n }\n constructor(maxConcurrency = 5){\n Object.defineProperty(this, _processNext, {\n value: processNext\n });\n Object.defineProperty(this, _maxConcurrency, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _runningCount, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _queue, {\n writable: true,\n value: void 0\n });\n _class_private_field_loose_base._(this, _maxConcurrency)[_maxConcurrency] = maxConcurrency;\n _class_private_field_loose_base._(this, _runningCount)[_runningCount] = 0;\n _class_private_field_loose_base._(this, _queue)[_queue] = [];\n }\n}\nfunction processNext(forced) {\n if (forced === void 0) forced = false;\n if ((_class_private_field_loose_base._(this, _runningCount)[_runningCount] < _class_private_field_loose_base._(this, _maxConcurrency)[_maxConcurrency] || forced) && _class_private_field_loose_base._(this, _queue)[_queue].length > 0) {\n var _class_private_field_loose_base__queue_shift;\n (_class_private_field_loose_base__queue_shift = _class_private_field_loose_base._(this, _queue)[_queue].shift()) == null ? void 0 : _class_private_field_loose_base__queue_shift.task();\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=promise-queue.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcHJvbWlzZS1xdWV1ZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7QUFLQSxHQUFnQjtBQUNoQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGdEQUErQztJQUMzQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGtDQUFrQ0MsbUJBQU9BLENBQUMsOElBQWdEO0FBQ2hHLE1BQU1DLGlDQUFpQ0QsbUJBQU9BLENBQUMsNElBQStDO0FBQzlGLElBQUlFLGtCQUFrQixXQUFXLEdBQUdELCtCQUErQkUsQ0FBQyxDQUFDLG9CQUFvQkMsZ0JBQWdCLFdBQVcsR0FBR0gsK0JBQStCRSxDQUFDLENBQUMsa0JBQWtCRSxTQUFTLFdBQVcsR0FBR0osK0JBQStCRSxDQUFDLENBQUMsV0FBV0csZUFBZSxXQUFXLEdBQUdMLCtCQUErQkUsQ0FBQyxDQUFDO0FBQzNTLE1BQU1MO0lBQ0ZTLFFBQVFDLFNBQVMsRUFBRTtRQUNmLElBQUlDO1FBQ0osSUFBSUM7UUFDSixNQUFNQyxjQUFjLElBQUlDLFFBQVEsQ0FBQ0MsU0FBU0M7WUFDdENMLGNBQWNJO1lBQ2RILGFBQWFJO1FBQ2pCO1FBQ0EsTUFBTUMsT0FBTztZQUNULElBQUk7Z0JBQ0FoQixnQ0FBZ0NJLENBQUMsQ0FBQyxJQUFJLEVBQUVDLGNBQWMsQ0FBQ0EsY0FBYztnQkFDckUsTUFBTVksU0FBUyxNQUFNUjtnQkFDckJDLFlBQVlPO1lBQ2hCLEVBQUUsT0FBT0MsT0FBTztnQkFDWlAsV0FBV087WUFDZixTQUFTO2dCQUNMbEIsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFQyxjQUFjLENBQUNBLGNBQWM7Z0JBQ3JFTCxnQ0FBZ0NJLENBQUMsQ0FBQyxJQUFJLEVBQUVHLGFBQWEsQ0FBQ0EsYUFBYTtZQUN2RTtRQUNKO1FBQ0EsTUFBTVksZ0JBQWdCO1lBQ2xCVixXQUFXRztZQUNYSTtRQUNKO1FBQ0EsZ0RBQWdEO1FBQ2hEaEIsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFRSxPQUFPLENBQUNBLE9BQU8sQ0FBQ2MsSUFBSSxDQUFDRDtRQUM3RG5CLGdDQUFnQ0ksQ0FBQyxDQUFDLElBQUksRUFBRUcsYUFBYSxDQUFDQSxhQUFhO1FBQ25FLE9BQU9LO0lBQ1g7SUFDQVMsS0FBS1osU0FBUyxFQUFFO1FBQ1osTUFBTWEsUUFBUXRCLGdDQUFnQ0ksQ0FBQyxDQUFDLElBQUksRUFBRUUsT0FBTyxDQUFDQSxPQUFPLENBQUNpQixTQUFTLENBQUMsQ0FBQ0MsT0FBT0EsS0FBS2YsU0FBUyxLQUFLQTtRQUMzRyxJQUFJYSxRQUFRLENBQUMsR0FBRztZQUNaLE1BQU1HLGFBQWF6QixnQ0FBZ0NJLENBQUMsQ0FBQyxJQUFJLEVBQUVFLE9BQU8sQ0FBQ0EsT0FBTyxDQUFDb0IsTUFBTSxDQUFDSixPQUFPLEVBQUUsQ0FBQyxFQUFFO1lBQzlGdEIsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFRSxPQUFPLENBQUNBLE9BQU8sQ0FBQ3FCLE9BQU8sQ0FBQ0Y7WUFDaEV6QixnQ0FBZ0NJLENBQUMsQ0FBQyxJQUFJLEVBQUVHLGFBQWEsQ0FBQ0EsYUFBYSxDQUFDO1FBQ3hFO0lBQ0o7SUFDQXFCLFlBQVlDLGlCQUFpQixDQUFDLENBQUM7UUFDM0JwQyxPQUFPQyxjQUFjLENBQUMsSUFBSSxFQUFFYSxjQUFjO1lBQ3RDWCxPQUFPa0M7UUFDWDtRQUNBckMsT0FBT0MsY0FBYyxDQUFDLElBQUksRUFBRVMsaUJBQWlCO1lBQ3pDNEIsVUFBVTtZQUNWbkMsT0FBTyxLQUFLO1FBQ2hCO1FBQ0FILE9BQU9DLGNBQWMsQ0FBQyxJQUFJLEVBQUVXLGVBQWU7WUFDdkMwQixVQUFVO1lBQ1ZuQyxPQUFPLEtBQUs7UUFDaEI7UUFDQUgsT0FBT0MsY0FBYyxDQUFDLElBQUksRUFBRVksUUFBUTtZQUNoQ3lCLFVBQVU7WUFDVm5DLE9BQU8sS0FBSztRQUNoQjtRQUNBSSxnQ0FBZ0NJLENBQUMsQ0FBQyxJQUFJLEVBQUVELGdCQUFnQixDQUFDQSxnQkFBZ0IsR0FBRzBCO1FBQzVFN0IsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFQyxjQUFjLENBQUNBLGNBQWMsR0FBRztRQUN4RUwsZ0NBQWdDSSxDQUFDLENBQUMsSUFBSSxFQUFFRSxPQUFPLENBQUNBLE9BQU8sR0FBRyxFQUFFO0lBQ2hFO0FBQ0o7QUFDQSxTQUFTd0IsWUFBWUUsTUFBTTtJQUN2QixJQUFJQSxXQUFXLEtBQUssR0FBR0EsU0FBUztJQUNoQyxJQUFJLENBQUNoQyxnQ0FBZ0NJLENBQUMsQ0FBQyxJQUFJLEVBQUVDLGNBQWMsQ0FBQ0EsY0FBYyxHQUFHTCxnQ0FBZ0NJLENBQUMsQ0FBQyxJQUFJLEVBQUVELGdCQUFnQixDQUFDQSxnQkFBZ0IsSUFBSTZCLE1BQUssS0FBTWhDLGdDQUFnQ0ksQ0FBQyxDQUFDLElBQUksRUFBRUUsT0FBTyxDQUFDQSxPQUFPLENBQUMyQixNQUFNLEdBQUcsR0FBRztRQUNyTyxJQUFJQztRQUNIQSxDQUFBQSwrQ0FBK0NsQyxnQ0FBZ0NJLENBQUMsQ0FBQyxJQUFJLEVBQUVFLE9BQU8sQ0FBQ0EsT0FBTyxDQUFDNkIsS0FBSyxFQUFDLEtBQU0sT0FBTyxLQUFLLElBQUlELDZDQUE2Q2xCLElBQUk7SUFDekw7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPckIsUUFBUXlDLE9BQU8sS0FBSyxjQUFlLE9BQU96QyxRQUFReUMsT0FBTyxLQUFLLFlBQVl6QyxRQUFReUMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPekMsUUFBUXlDLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcks1QyxPQUFPQyxjQUFjLENBQUNDLFFBQVF5QyxPQUFPLEVBQUUsY0FBYztRQUFFeEMsT0FBTztJQUFLO0lBQ25FSCxPQUFPNkMsTUFBTSxDQUFDM0MsUUFBUXlDLE9BQU8sRUFBRXpDO0lBQy9CNEMsT0FBTzVDLE9BQU8sR0FBR0EsUUFBUXlDLE9BQU87QUFDbEMsRUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9wcm9taXNlLXF1ZXVlLmpzPzgxNjciXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBUaGlzIGlzIGEgc2ltcGxlIHByb21pc2UgcXVldWUgdGhhdCBhbGxvd3MgeW91IHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCBwcm9taXNlc1xuICAgIHRoYXQgYXJlIHJ1bm5pbmcgYXQgYW55IGdpdmVuIHRpbWUuIEl0J3MgdXNlZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnRcbiAgICBwcmVmZXRjaCByZXF1ZXN0cyB0aGF0IGFyZSBiZWluZyBtYWRlIHRvIHRoZSBzZXJ2ZXIgYnV0IGNvdWxkIGJlIHVzZWQgZm9yIG90aGVyXG4gICAgdGhpbmdzIGFzIHdlbGwuXG4qLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlByb21pc2VRdWV1ZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZVF1ZXVlO1xuICAgIH1cbn0pO1xuY29uc3QgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZSA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9fY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlXCIpO1xuY29uc3QgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleVwiKTtcbnZhciBfbWF4Q29uY3VycmVuY3kgPSAvKiNfX1BVUkVfXyovIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleS5fKFwiX21heENvbmN1cnJlbmN5XCIpLCBfcnVubmluZ0NvdW50ID0gLyojX19QVVJFX18qLyBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXkuXyhcIl9ydW5uaW5nQ291bnRcIiksIF9xdWV1ZSA9IC8qI19fUFVSRV9fKi8gX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5Ll8oXCJfcXVldWVcIiksIF9wcm9jZXNzTmV4dCA9IC8qI19fUFVSRV9fKi8gX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5Ll8oXCJfcHJvY2Vzc05leHRcIik7XG5jbGFzcyBQcm9taXNlUXVldWUge1xuICAgIGVucXVldWUocHJvbWlzZUZuKSB7XG4gICAgICAgIGxldCB0YXNrUmVzb2x2ZTtcbiAgICAgICAgbGV0IHRhc2tSZWplY3Q7XG4gICAgICAgIGNvbnN0IHRhc2tQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk9PntcbiAgICAgICAgICAgIHRhc2tSZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRhc2tSZWplY3QgPSByZWplY3Q7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0YXNrID0gYXN5bmMgKCk9PntcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9ydW5uaW5nQ291bnQpW19ydW5uaW5nQ291bnRdKys7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvbWlzZUZuKCk7XG4gICAgICAgICAgICAgICAgdGFza1Jlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGFza1JlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9IGZpbmFsbHl7XG4gICAgICAgICAgICAgICAgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9ydW5uaW5nQ291bnQpW19ydW5uaW5nQ291bnRdLS07XG4gICAgICAgICAgICAgICAgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9wcm9jZXNzTmV4dClbX3Byb2Nlc3NOZXh0XSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlbnF1ZXVlUmVzdWx0ID0ge1xuICAgICAgICAgICAgcHJvbWlzZUZuOiB0YXNrUHJvbWlzZSxcbiAgICAgICAgICAgIHRhc2tcbiAgICAgICAgfTtcbiAgICAgICAgLy8gd29uZGVyIGlmIHdlIHNob3VsZCB0YWtlIGEgTElGTyBhcHByb2FjaCBoZXJlXG4gICAgICAgIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuXyh0aGlzLCBfcXVldWUpW19xdWV1ZV0ucHVzaChlbnF1ZXVlUmVzdWx0KTtcbiAgICAgICAgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9wcm9jZXNzTmV4dClbX3Byb2Nlc3NOZXh0XSgpO1xuICAgICAgICByZXR1cm4gdGFza1Byb21pc2U7XG4gICAgfVxuICAgIGJ1bXAocHJvbWlzZUZuKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9xdWV1ZSlbX3F1ZXVlXS5maW5kSW5kZXgoKGl0ZW0pPT5pdGVtLnByb21pc2VGbiA9PT0gcHJvbWlzZUZuKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1bXBlZEl0ZW0gPSBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlLl8odGhpcywgX3F1ZXVlKVtfcXVldWVdLnNwbGljZShpbmRleCwgMSlbMF07XG4gICAgICAgICAgICBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlLl8odGhpcywgX3F1ZXVlKVtfcXVldWVdLnVuc2hpZnQoYnVtcGVkSXRlbSk7XG4gICAgICAgICAgICBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlLl8odGhpcywgX3Byb2Nlc3NOZXh0KVtfcHJvY2Vzc05leHRdKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKG1heENvbmN1cnJlbmN5ID0gNSl7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBfcHJvY2Vzc05leHQsIHtcbiAgICAgICAgICAgIHZhbHVlOiBwcm9jZXNzTmV4dFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIF9tYXhDb25jdXJyZW5jeSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgX3J1bm5pbmdDb3VudCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgX3F1ZXVlLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICAgIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuXyh0aGlzLCBfbWF4Q29uY3VycmVuY3kpW19tYXhDb25jdXJyZW5jeV0gPSBtYXhDb25jdXJyZW5jeTtcbiAgICAgICAgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9ydW5uaW5nQ291bnQpW19ydW5uaW5nQ291bnRdID0gMDtcbiAgICAgICAgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9xdWV1ZSlbX3F1ZXVlXSA9IFtdO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHByb2Nlc3NOZXh0KGZvcmNlZCkge1xuICAgIGlmIChmb3JjZWQgPT09IHZvaWQgMCkgZm9yY2VkID0gZmFsc2U7XG4gICAgaWYgKChfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlLl8odGhpcywgX3J1bm5pbmdDb3VudClbX3J1bm5pbmdDb3VudF0gPCBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlLl8odGhpcywgX21heENvbmN1cnJlbmN5KVtfbWF4Q29uY3VycmVuY3ldIHx8IGZvcmNlZCkgJiYgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9xdWV1ZSlbX3F1ZXVlXS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlX19xdWV1ZV9zaGlmdDtcbiAgICAgICAgKF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2VfX3F1ZXVlX3NoaWZ0ID0gX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZS5fKHRoaXMsIF9xdWV1ZSlbX3F1ZXVlXS5zaGlmdCgpKSA9PSBudWxsID8gdm9pZCAwIDogX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZV9fcXVldWVfc2hpZnQudGFzaygpO1xuICAgIH1cbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvbWlzZS1xdWV1ZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiUHJvbWlzZVF1ZXVlIiwiX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZSIsInJlcXVpcmUiLCJfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXkiLCJfbWF4Q29uY3VycmVuY3kiLCJfIiwiX3J1bm5pbmdDb3VudCIsIl9xdWV1ZSIsIl9wcm9jZXNzTmV4dCIsImVucXVldWUiLCJwcm9taXNlRm4iLCJ0YXNrUmVzb2x2ZSIsInRhc2tSZWplY3QiLCJ0YXNrUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidGFzayIsInJlc3VsdCIsImVycm9yIiwiZW5xdWV1ZVJlc3VsdCIsInB1c2giLCJidW1wIiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJpdGVtIiwiYnVtcGVkSXRlbSIsInNwbGljZSIsInVuc2hpZnQiLCJjb25zdHJ1Y3RvciIsIm1heENvbmN1cnJlbmN5IiwicHJvY2Vzc05leHQiLCJ3cml0YWJsZSIsImZvcmNlZCIsImxlbmd0aCIsIl9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2VfX3F1ZXVlX3NoaWZ0Iiwic2hpZnQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/promise-queue.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/hot-reloader-client.js": +/*!*******************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/hot-reloader-client.js ***! + \*******************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return HotReload;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(app-pages-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js\"));\nconst _formatwebpackmessages = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../dev/error-overlay/format-webpack-messages */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js\"));\nconst _navigation = __webpack_require__(/*! ../navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\nconst _erroroverlayreducer = __webpack_require__(/*! ./internal/error-overlay-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js\");\nconst _parseStack = __webpack_require__(/*! ./internal/helpers/parseStack */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js\");\nconst _ReactDevOverlay = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./internal/ReactDevOverlay */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/ReactDevOverlay.js\"));\nconst _useerrorhandler = __webpack_require__(/*! ./internal/helpers/use-error-handler */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-error-handler.js\");\nconst _usewebsocket = __webpack_require__(/*! ./internal/helpers/use-websocket */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-websocket.js\");\nconst _parsecomponentstack = __webpack_require__(/*! ./internal/helpers/parse-component-stack */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../../../server/dev/hot-reloader-types */ \"(app-pages-browser)/./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nlet mostRecentCompilationHash = null;\nlet __nextDevClientId = Math.round(Math.random() * 100 + Date.now());\nlet reloading = false;\nlet startLatency = null;\nfunction onBeforeFastRefresh(dispatcher, hasUpdates) {\n if (hasUpdates) {\n dispatcher.onBeforeRefresh();\n }\n}\nfunction onFastRefresh(dispatcher, sendMessage, updatedModules) {\n let endLatency = Date.now();\n dispatcher.onBuildOk();\n sendMessage(JSON.stringify({\n event: \"client-hmr-latency\",\n id: window.__nextDevClientId,\n startTime: startLatency,\n endTime: endLatency,\n page: window.location.pathname,\n updatedModules,\n // Whether the page (tab) was hidden at the time the event occurred.\n // This can impact the accuracy of the event's timing.\n isPageHidden: document.visibilityState === \"hidden\"\n }));\n if (updatedModules.length > 0) {\n dispatcher.onRefresh();\n }\n}\n// There is a newer version of the code available.\nfunction handleAvailableHash(hash) {\n // Update last known compilation hash.\n mostRecentCompilationHash = hash;\n}\n/**\n * Is there a newer version of this code available?\n * For webpack: Check if the hash changed compared to __webpack_hash__\n * For Turbopack: Always true because it doesn't have __webpack_hash__\n */ function isUpdateAvailable() {\n if (false) {}\n /* globals __webpack_hash__ */ // __webpack_hash__ is the hash of the current compilation.\n // It's a global variable injected by Webpack.\n return mostRecentCompilationHash !== __webpack_require__.h();\n}\n// Webpack disallows updates in other states.\nfunction canApplyUpdates() {\n // @ts-expect-error module.hot exists\n return module.hot.status() === \"idle\";\n}\nfunction afterApplyUpdates(fn) {\n if (canApplyUpdates()) {\n fn();\n } else {\n function handler(status) {\n if (status === \"idle\") {\n // @ts-expect-error module.hot exists\n module.hot.removeStatusHandler(handler);\n fn();\n }\n }\n // @ts-expect-error module.hot exists\n module.hot.addStatusHandler(handler);\n }\n}\nfunction performFullReload(err, sendMessage) {\n const stackTrace = err && (err.stack && err.stack.split(\"\\n\").slice(0, 5).join(\"\\n\") || err.message || err + \"\");\n sendMessage(JSON.stringify({\n event: \"client-full-reload\",\n stackTrace,\n hadRuntimeError: !!_useerrorhandler.RuntimeErrorHandler.hadRuntimeError\n }));\n if (reloading) return;\n reloading = true;\n window.location.reload();\n}\n// Attempt to update code on the fly, fall back to a hard reload.\nfunction tryApplyUpdates(onBeforeUpdate, onHotUpdateSuccess, sendMessage, dispatcher) {\n if (!isUpdateAvailable() || !canApplyUpdates()) {\n dispatcher.onBuildOk();\n return;\n }\n function handleApplyUpdates(err, updatedModules) {\n if (err || _useerrorhandler.RuntimeErrorHandler.hadRuntimeError || !updatedModules) {\n if (err) {\n console.warn(\"[Fast Refresh] performing full reload\\n\\n\" + \"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\\n\" + \"You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\\n\" + \"Consider migrating the non-React component export to a separate file and importing it into both files.\\n\\n\" + \"It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\\n\" + \"Fast Refresh requires at least one parent function component in your React tree.\");\n } else if (_useerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n console.warn(\"[Fast Refresh] performing full reload because your application had an unrecoverable error\");\n }\n performFullReload(err, sendMessage);\n return;\n }\n const hasUpdates = Boolean(updatedModules.length);\n if (typeof onHotUpdateSuccess === \"function\") {\n // Maybe we want to do something.\n onHotUpdateSuccess(updatedModules);\n }\n if (isUpdateAvailable()) {\n // While we were updating, there was a new update! Do it again.\n tryApplyUpdates(hasUpdates ? ()=>{} : onBeforeUpdate, hasUpdates ? ()=>dispatcher.onBuildOk() : onHotUpdateSuccess, sendMessage, dispatcher);\n } else {\n dispatcher.onBuildOk();\n if (false) {}\n }\n }\n // https://webpack.js.org/api/hot-module-replacement/#check\n // @ts-expect-error module.hot exists\n module.hot.check(/* autoApply */ false).then((updatedModules)=>{\n if (!updatedModules) {\n return null;\n }\n if (typeof onBeforeUpdate === \"function\") {\n const hasUpdates = Boolean(updatedModules.length);\n onBeforeUpdate(hasUpdates);\n }\n // https://webpack.js.org/api/hot-module-replacement/#apply\n // @ts-expect-error module.hot exists\n return module.hot.apply();\n }).then((updatedModules)=>{\n handleApplyUpdates(null, updatedModules);\n }, (err)=>{\n handleApplyUpdates(err, null);\n });\n}\nfunction processMessage(obj, sendMessage, router, dispatcher) {\n if (!(\"action\" in obj)) {\n return;\n }\n function handleErrors(errors) {\n // \"Massage\" webpack messages.\n const formatted = (0, _formatwebpackmessages.default)({\n errors: errors,\n warnings: []\n });\n // Only show the first error.\n dispatcher.onBuildError(formatted.errors[0]);\n // Also log them to the console.\n for(let i = 0; i < formatted.errors.length; i++){\n console.error((0, _stripansi.default)(formatted.errors[i]));\n }\n // Do not attempt to reload now.\n // We will reload on next success instead.\n if (false) {}\n }\n function handleHotUpdate(updatedModules) {\n if (false) {} else {\n tryApplyUpdates(function onBeforeHotUpdate(hasUpdates) {\n onBeforeFastRefresh(dispatcher, hasUpdates);\n }, function onSuccessfulHotUpdate(webpackUpdatedModules) {\n // Only dismiss it when we're sure it's a hot update.\n // Otherwise it would flicker right before the reload.\n onFastRefresh(dispatcher, sendMessage, webpackUpdatedModules);\n }, sendMessage, dispatcher);\n }\n }\n switch(obj.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILDING:\n {\n startLatency = Date.now();\n console.log(\"[Fast Refresh] rebuilding\");\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.FINISH_BUILDING:\n {\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SYNC:\n {\n if (obj.hash) {\n handleAvailableHash(obj.hash);\n }\n const { errors, warnings } = obj;\n // Is undefined when it's a 'built' event\n if (\"versionInfo\" in obj) {\n dispatcher.onVersionInfo(obj.versionInfo);\n }\n const hasErrors = Boolean(errors && errors.length);\n // Compilation with errors (e.g. syntax error or missing modules).\n if (hasErrors) {\n sendMessage(JSON.stringify({\n event: \"client-error\",\n errorCount: errors.length,\n clientId: __nextDevClientId\n }));\n handleErrors(errors);\n return;\n }\n const hasWarnings = Boolean(warnings && warnings.length);\n if (hasWarnings) {\n sendMessage(JSON.stringify({\n event: \"client-warning\",\n warningCount: warnings.length,\n clientId: __nextDevClientId\n }));\n // Print warnings to the console.\n const formattedMessages = (0, _formatwebpackmessages.default)({\n warnings: warnings,\n errors: []\n });\n for(let i = 0; i < formattedMessages.warnings.length; i++){\n if (i === 5) {\n console.warn(\"There were more warnings in other files.\\n\" + \"You can find a complete log in the terminal.\");\n break;\n }\n console.warn((0, _stripansi.default)(formattedMessages.warnings[i]));\n }\n // No early return here as we need to apply modules in the same way between warnings only and compiles without warnings\n }\n sendMessage(JSON.stringify({\n event: \"client-success\",\n clientId: __nextDevClientId\n }));\n if (obj.action === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT) {\n // Handle hot updates\n handleHotUpdate(obj.updatedModules);\n }\n return;\n }\n // TODO-APP: make server component change more granular\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES:\n {\n sendMessage(JSON.stringify({\n event: \"server-component-reload-page\",\n clientId: __nextDevClientId\n }));\n if (_useerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n if (reloading) return;\n reloading = true;\n return window.location.reload();\n }\n (0, _react.startTransition)(()=>{\n // @ts-ignore it exists, it's just hidden\n router.fastRefresh();\n dispatcher.onRefresh();\n });\n if (false) {}\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE:\n {\n sendMessage(JSON.stringify({\n event: \"client-reload-page\",\n clientId: __nextDevClientId\n }));\n if (reloading) return;\n reloading = true;\n return window.location.reload();\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.REMOVED_PAGE:\n {\n // TODO-APP: potentially only refresh if the currently viewed page was removed.\n // @ts-ignore it exists, it's just hidden\n router.fastRefresh();\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.ADDED_PAGE:\n {\n // TODO-APP: potentially only refresh if the currently viewed page was added.\n // @ts-ignore it exists, it's just hidden\n router.fastRefresh();\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR:\n {\n const { errorJSON } = obj;\n if (errorJSON) {\n const { message, stack } = JSON.parse(errorJSON);\n const error = new Error(message);\n error.stack = stack;\n handleErrors([\n error\n ]);\n }\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE:\n {\n return;\n }\n default:\n {}\n }\n}\nfunction HotReload(param) {\n let { assetPrefix, children } = param;\n const [state, dispatch] = (0, _react.useReducer)(_erroroverlayreducer.errorOverlayReducer, _erroroverlayreducer.INITIAL_OVERLAY_STATE);\n const dispatcher = (0, _react.useMemo)(()=>{\n return {\n onBuildOk () {\n dispatch({\n type: _erroroverlayreducer.ACTION_BUILD_OK\n });\n },\n onBuildError (message) {\n dispatch({\n type: _erroroverlayreducer.ACTION_BUILD_ERROR,\n message\n });\n },\n onBeforeRefresh () {\n dispatch({\n type: _erroroverlayreducer.ACTION_BEFORE_REFRESH\n });\n },\n onRefresh () {\n dispatch({\n type: _erroroverlayreducer.ACTION_REFRESH\n });\n },\n onVersionInfo (versionInfo) {\n dispatch({\n type: _erroroverlayreducer.ACTION_VERSION_INFO,\n versionInfo\n });\n }\n };\n }, [\n dispatch\n ]);\n const handleOnUnhandledError = (0, _react.useCallback)((error)=>{\n // Component stack is added to the error in use-error-handler in case there was a hydration errror\n const componentStack = error._componentStack;\n dispatch({\n type: _erroroverlayreducer.ACTION_UNHANDLED_ERROR,\n reason: error,\n frames: (0, _parseStack.parseStack)(error.stack),\n componentStackFrames: componentStack && (0, _parsecomponentstack.parseComponentStack)(componentStack)\n });\n }, []);\n const handleOnUnhandledRejection = (0, _react.useCallback)((reason)=>{\n dispatch({\n type: _erroroverlayreducer.ACTION_UNHANDLED_REJECTION,\n reason: reason,\n frames: (0, _parseStack.parseStack)(reason.stack)\n });\n }, []);\n const handleOnReactError = (0, _react.useCallback)(()=>{\n _useerrorhandler.RuntimeErrorHandler.hadRuntimeError = true;\n }, []);\n (0, _useerrorhandler.useErrorHandler)(handleOnUnhandledError, handleOnUnhandledRejection);\n const webSocketRef = (0, _usewebsocket.useWebsocket)(assetPrefix);\n (0, _usewebsocket.useWebsocketPing)(webSocketRef);\n const sendMessage = (0, _usewebsocket.useSendMessage)(webSocketRef);\n const processTurbopackMessage = (0, _usewebsocket.useTurbopack)(sendMessage);\n const router = (0, _navigation.useRouter)();\n (0, _react.useEffect)(()=>{\n const handler = (event)=>{\n try {\n const obj = JSON.parse(event.data);\n const handledByTurbopack = processTurbopackMessage == null ? void 0 : processTurbopackMessage(obj);\n if (!handledByTurbopack) {\n processMessage(obj, sendMessage, router, dispatcher);\n }\n } catch (err) {\n var _err_stack;\n console.warn(\"[HMR] Invalid message: \" + event.data + \"\\n\" + ((_err_stack = err == null ? void 0 : err.stack) != null ? _err_stack : \"\"));\n }\n };\n const websocket = webSocketRef.current;\n if (websocket) {\n websocket.addEventListener(\"message\", handler);\n }\n return ()=>websocket && websocket.removeEventListener(\"message\", handler);\n }, [\n sendMessage,\n router,\n webSocketRef,\n dispatcher,\n processTurbopackMessage\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_ReactDevOverlay.default, {\n onReactError: handleOnReactError,\n state: state,\n children: children\n });\n}\n_c = HotReload;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hot-reloader-client.js.map\nvar _c;\n$RefreshReg$(_c, \"HotReload\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaG90LXJlbG9hZGVyLWNsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxnSUFBeUM7QUFDbEYsTUFBTUMsNEJBQTRCRCxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUUsY0FBY0YsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1HLFNBQVMsV0FBVyxHQUFHRiwwQkFBMEJHLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsbUZBQU87QUFDeEUsTUFBTUssYUFBYSxXQUFXLEdBQUdOLHlCQUF5QkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxnSEFBK0I7QUFDbkcsTUFBTU0seUJBQXlCLFdBQVcsR0FBR1AseUJBQXlCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLHlKQUFpRDtBQUNqSSxNQUFNTyxjQUFjUCxtQkFBT0EsQ0FBQyxtR0FBZTtBQUMzQyxNQUFNUSx1QkFBdUJSLG1CQUFPQSxDQUFDLDRKQUFrQztBQUN2RSxNQUFNUyxjQUFjVCxtQkFBT0EsQ0FBQyxzSkFBK0I7QUFDM0QsTUFBTVUsbUJBQW1CLFdBQVcsR0FBR1gseUJBQXlCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLGdKQUE0QjtBQUN0RyxNQUFNVyxtQkFBbUJYLG1CQUFPQSxDQUFDLG9LQUFzQztBQUN2RSxNQUFNWSxnQkFBZ0JaLG1CQUFPQSxDQUFDLDRKQUFrQztBQUNoRSxNQUFNYSx1QkFBdUJiLG1CQUFPQSxDQUFDLDRLQUEwQztBQUMvRSxNQUFNYyxvQkFBb0JkLG1CQUFPQSxDQUFDLDZIQUF3QztBQUMxRSxJQUFJZSw0QkFBNEI7QUFDaEMsSUFBSUMsb0JBQW9CQyxLQUFLQyxLQUFLLENBQUNELEtBQUtFLE1BQU0sS0FBSyxNQUFNQyxLQUFLQyxHQUFHO0FBQ2pFLElBQUlDLFlBQVk7QUFDaEIsSUFBSUMsZUFBZTtBQUNuQixTQUFTQyxvQkFBb0JDLFVBQVUsRUFBRUMsVUFBVTtJQUMvQyxJQUFJQSxZQUFZO1FBQ1pELFdBQVdFLGVBQWU7SUFDOUI7QUFDSjtBQUNBLFNBQVNDLGNBQWNILFVBQVUsRUFBRUksV0FBVyxFQUFFQyxjQUFjO0lBQzFELElBQUlDLGFBQWFYLEtBQUtDLEdBQUc7SUFDekJJLFdBQVdPLFNBQVM7SUFDcEJILFlBQVlJLEtBQUtDLFNBQVMsQ0FBQztRQUN2QkMsT0FBTztRQUNQQyxJQUFJQyxPQUFPckIsaUJBQWlCO1FBQzVCc0IsV0FBV2Y7UUFDWGdCLFNBQVNSO1FBQ1RTLE1BQU1ILE9BQU9JLFFBQVEsQ0FBQ0MsUUFBUTtRQUM5Qlo7UUFDQSxvRUFBb0U7UUFDcEUsc0RBQXNEO1FBQ3REYSxjQUFjQyxTQUFTQyxlQUFlLEtBQUs7SUFDL0M7SUFDQSxJQUFJZixlQUFlZ0IsTUFBTSxHQUFHLEdBQUc7UUFDM0JyQixXQUFXc0IsU0FBUztJQUN4QjtBQUNKO0FBQ0Esa0RBQWtEO0FBQ2xELFNBQVNDLG9CQUFvQkMsSUFBSTtJQUM3QixzQ0FBc0M7SUFDdENsQyw0QkFBNEJrQztBQUNoQztBQUNBOzs7O0NBSUMsR0FBRyxTQUFTQztJQUNULElBQUlDLEtBQXFCLEVBQUUsRUFFMUI7SUFDRCw0QkFBNEIsR0FBRywyREFBMkQ7SUFDMUYsOENBQThDO0lBQzlDLE9BQU9wQyw4QkFBOEJ1Qyx1QkFBZ0JBO0FBQ3pEO0FBQ0EsNkNBQTZDO0FBQzdDLFNBQVNDO0lBQ0wscUNBQXFDO0lBQ3JDLE9BQU9DLFVBQVUsQ0FBQ0UsTUFBTSxPQUFPO0FBQ25DO0FBQ0EsU0FBU0Msa0JBQWtCQyxFQUFFO0lBQ3pCLElBQUlMLG1CQUFtQjtRQUNuQks7SUFDSixPQUFPO1FBQ0gsU0FBU0MsUUFBUUgsTUFBTTtZQUNuQixJQUFJQSxXQUFXLFFBQVE7Z0JBQ25CLHFDQUFxQztnQkFDckNGLFVBQVUsQ0FBQ00sbUJBQW1CLENBQUNEO2dCQUMvQkQ7WUFDSjtRQUNKO1FBQ0EscUNBQXFDO1FBQ3JDSixVQUFVLENBQUNPLGdCQUFnQixDQUFDRjtJQUNoQztBQUNKO0FBQ0EsU0FBU0csa0JBQWtCQyxHQUFHLEVBQUVwQyxXQUFXO0lBQ3ZDLE1BQU1xQyxhQUFhRCxPQUFRQSxDQUFBQSxJQUFJRSxLQUFLLElBQUlGLElBQUlFLEtBQUssQ0FBQ0MsS0FBSyxDQUFDLE1BQU1DLEtBQUssQ0FBQyxHQUFHLEdBQUdDLElBQUksQ0FBQyxTQUFTTCxJQUFJTSxPQUFPLElBQUlOLE1BQU0sRUFBQztJQUM5R3BDLFlBQVlJLEtBQUtDLFNBQVMsQ0FBQztRQUN2QkMsT0FBTztRQUNQK0I7UUFDQU0saUJBQWlCLENBQUMsQ0FBQzdELGlCQUFpQjhELG1CQUFtQixDQUFDRCxlQUFlO0lBQzNFO0lBQ0EsSUFBSWxELFdBQVc7SUFDZkEsWUFBWTtJQUNaZSxPQUFPSSxRQUFRLENBQUNpQyxNQUFNO0FBQzFCO0FBQ0EsaUVBQWlFO0FBQ2pFLFNBQVNDLGdCQUFnQkMsY0FBYyxFQUFFQyxrQkFBa0IsRUFBRWhELFdBQVcsRUFBRUosVUFBVTtJQUNoRixJQUFJLENBQUN5Qix1QkFBdUIsQ0FBQ0ssbUJBQW1CO1FBQzVDOUIsV0FBV08sU0FBUztRQUNwQjtJQUNKO0lBQ0EsU0FBUzhDLG1CQUFtQmIsR0FBRyxFQUFFbkMsY0FBYztRQUMzQyxJQUFJbUMsT0FBT3RELGlCQUFpQjhELG1CQUFtQixDQUFDRCxlQUFlLElBQUksQ0FBQzFDLGdCQUFnQjtZQUNoRixJQUFJbUMsS0FBSztnQkFDTGMsUUFBUUMsSUFBSSxDQUFDLDhDQUE4QyxtSUFBbUkscUlBQXFJLCtHQUErRyw4SEFBOEg7WUFDcGpCLE9BQU8sSUFBSXJFLGlCQUFpQjhELG1CQUFtQixDQUFDRCxlQUFlLEVBQUU7Z0JBQzdETyxRQUFRQyxJQUFJLENBQUM7WUFDakI7WUFDQWhCLGtCQUFrQkMsS0FBS3BDO1lBQ3ZCO1FBQ0o7UUFDQSxNQUFNSCxhQUFhdUQsUUFBUW5ELGVBQWVnQixNQUFNO1FBQ2hELElBQUksT0FBTytCLHVCQUF1QixZQUFZO1lBQzFDLGlDQUFpQztZQUNqQ0EsbUJBQW1CL0M7UUFDdkI7UUFDQSxJQUFJb0IscUJBQXFCO1lBQ3JCLCtEQUErRDtZQUMvRHlCLGdCQUFnQmpELGFBQWEsS0FBSyxJQUFJa0QsZ0JBQWdCbEQsYUFBYSxJQUFJRCxXQUFXTyxTQUFTLEtBQUs2QyxvQkFBb0JoRCxhQUFhSjtRQUNySSxPQUFPO1lBQ0hBLFdBQVdPLFNBQVM7WUFDcEIsSUFBSW1CLEtBQTRCLEVBQUUsRUFPakM7UUFDTDtJQUNKO0lBQ0EsMkRBQTJEO0lBQzNELHFDQUFxQztJQUNyQ0ssVUFBVSxDQUFDNkIsS0FBSyxDQUFDLGFBQWEsR0FBRyxPQUFPQyxJQUFJLENBQUMsQ0FBQ3hEO1FBQzFDLElBQUksQ0FBQ0EsZ0JBQWdCO1lBQ2pCLE9BQU87UUFDWDtRQUNBLElBQUksT0FBTzhDLG1CQUFtQixZQUFZO1lBQ3RDLE1BQU1sRCxhQUFhdUQsUUFBUW5ELGVBQWVnQixNQUFNO1lBQ2hEOEIsZUFBZWxEO1FBQ25CO1FBQ0EsMkRBQTJEO1FBQzNELHFDQUFxQztRQUNyQyxPQUFPOEIsVUFBVSxDQUFDK0IsS0FBSztJQUMzQixHQUFHRCxJQUFJLENBQUMsQ0FBQ3hEO1FBQ0xnRCxtQkFBbUIsTUFBTWhEO0lBQzdCLEdBQUcsQ0FBQ21DO1FBQ0FhLG1CQUFtQmIsS0FBSztJQUM1QjtBQUNKO0FBQ0EsU0FBU3VCLGVBQWVDLEdBQUcsRUFBRTVELFdBQVcsRUFBRTZELE1BQU0sRUFBRWpFLFVBQVU7SUFDeEQsSUFBSSxDQUFFLGFBQVlnRSxHQUFFLEdBQUk7UUFDcEI7SUFDSjtJQUNBLFNBQVNFLGFBQWFDLE1BQU07UUFDeEIsOEJBQThCO1FBQzlCLE1BQU1DLFlBQVksQ0FBQyxHQUFHdkYsdUJBQXVCd0YsT0FBTyxFQUFFO1lBQ2xERixRQUFRQTtZQUNSRyxVQUFVLEVBQUU7UUFDaEI7UUFDQSw2QkFBNkI7UUFDN0J0RSxXQUFXdUUsWUFBWSxDQUFDSCxVQUFVRCxNQUFNLENBQUMsRUFBRTtRQUMzQyxnQ0FBZ0M7UUFDaEMsSUFBSSxJQUFJSyxJQUFJLEdBQUdBLElBQUlKLFVBQVVELE1BQU0sQ0FBQzlDLE1BQU0sRUFBRW1ELElBQUk7WUFDNUNsQixRQUFRbUIsS0FBSyxDQUFDLENBQUMsR0FBRzdGLFdBQVd5RixPQUFPLEVBQUVELFVBQVVELE1BQU0sQ0FBQ0ssRUFBRTtRQUM3RDtRQUNBLGdDQUFnQztRQUNoQywwQ0FBMEM7UUFDMUMsSUFBSTlDLEtBQTRCLEVBQUUsRUFLakM7SUFDTDtJQUNBLFNBQVNnRCxnQkFBZ0JyRSxjQUFjO1FBQ25DLElBQUlxQixLQUFxQixFQUFFLEVBRTFCLE1BQU07WUFDSHdCLGdCQUFnQixTQUFTeUIsa0JBQWtCMUUsVUFBVTtnQkFDakRGLG9CQUFvQkMsWUFBWUM7WUFDcEMsR0FBRyxTQUFTMkUsc0JBQXNCQyxxQkFBcUI7Z0JBQ25ELHFEQUFxRDtnQkFDckQsc0RBQXNEO2dCQUN0RDFFLGNBQWNILFlBQVlJLGFBQWF5RTtZQUMzQyxHQUFHekUsYUFBYUo7UUFDcEI7SUFDSjtJQUNBLE9BQU9nRSxJQUFJYyxNQUFNO1FBQ2IsS0FBS3pGLGtCQUFrQjBGLDJCQUEyQixDQUFDQyxRQUFRO1lBQ3ZEO2dCQUNJbEYsZUFBZUgsS0FBS0MsR0FBRztnQkFDdkIwRCxRQUFRMkIsR0FBRyxDQUFDO2dCQUNaO1lBQ0o7UUFDSixLQUFLNUYsa0JBQWtCMEYsMkJBQTJCLENBQUNHLGVBQWU7WUFDOUQ7Z0JBQ0k7WUFDSjtRQUNKLEtBQUs3RixrQkFBa0IwRiwyQkFBMkIsQ0FBQ0ksS0FBSztRQUN4RCxLQUFLOUYsa0JBQWtCMEYsMkJBQTJCLENBQUNLLElBQUk7WUFDbkQ7Z0JBQ0ksSUFBSXBCLElBQUl4QyxJQUFJLEVBQUU7b0JBQ1ZELG9CQUFvQnlDLElBQUl4QyxJQUFJO2dCQUNoQztnQkFDQSxNQUFNLEVBQUUyQyxNQUFNLEVBQUVHLFFBQVEsRUFBRSxHQUFHTjtnQkFDN0IseUNBQXlDO2dCQUN6QyxJQUFJLGlCQUFpQkEsS0FBSztvQkFDdEJoRSxXQUFXcUYsYUFBYSxDQUFDckIsSUFBSXNCLFdBQVc7Z0JBQzVDO2dCQUNBLE1BQU1DLFlBQVkvQixRQUFRVyxVQUFVQSxPQUFPOUMsTUFBTTtnQkFDakQsa0VBQWtFO2dCQUNsRSxJQUFJa0UsV0FBVztvQkFDWG5GLFlBQVlJLEtBQUtDLFNBQVMsQ0FBQzt3QkFDdkJDLE9BQU87d0JBQ1A4RSxZQUFZckIsT0FBTzlDLE1BQU07d0JBQ3pCb0UsVUFBVWxHO29CQUNkO29CQUNBMkUsYUFBYUM7b0JBQ2I7Z0JBQ0o7Z0JBQ0EsTUFBTXVCLGNBQWNsQyxRQUFRYyxZQUFZQSxTQUFTakQsTUFBTTtnQkFDdkQsSUFBSXFFLGFBQWE7b0JBQ2J0RixZQUFZSSxLQUFLQyxTQUFTLENBQUM7d0JBQ3ZCQyxPQUFPO3dCQUNQaUYsY0FBY3JCLFNBQVNqRCxNQUFNO3dCQUM3Qm9FLFVBQVVsRztvQkFDZDtvQkFDQSxpQ0FBaUM7b0JBQ2pDLE1BQU1xRyxvQkFBb0IsQ0FBQyxHQUFHL0csdUJBQXVCd0YsT0FBTyxFQUFFO3dCQUMxREMsVUFBVUE7d0JBQ1ZILFFBQVEsRUFBRTtvQkFDZDtvQkFDQSxJQUFJLElBQUlLLElBQUksR0FBR0EsSUFBSW9CLGtCQUFrQnRCLFFBQVEsQ0FBQ2pELE1BQU0sRUFBRW1ELElBQUk7d0JBQ3RELElBQUlBLE1BQU0sR0FBRzs0QkFDVGxCLFFBQVFDLElBQUksQ0FBQywrQ0FBK0M7NEJBQzVEO3dCQUNKO3dCQUNBRCxRQUFRQyxJQUFJLENBQUMsQ0FBQyxHQUFHM0UsV0FBV3lGLE9BQU8sRUFBRXVCLGtCQUFrQnRCLFFBQVEsQ0FBQ0UsRUFBRTtvQkFDdEU7Z0JBQ0osdUhBQXVIO2dCQUN2SDtnQkFDQXBFLFlBQVlJLEtBQUtDLFNBQVMsQ0FBQztvQkFDdkJDLE9BQU87b0JBQ1ArRSxVQUFVbEc7Z0JBQ2Q7Z0JBQ0EsSUFBSXlFLElBQUljLE1BQU0sS0FBS3pGLGtCQUFrQjBGLDJCQUEyQixDQUFDSSxLQUFLLEVBQUU7b0JBQ3BFLHFCQUFxQjtvQkFDckJULGdCQUFnQlYsSUFBSTNELGNBQWM7Z0JBQ3RDO2dCQUNBO1lBQ0o7UUFDSix1REFBdUQ7UUFDdkQsS0FBS2hCLGtCQUFrQjBGLDJCQUEyQixDQUFDYyx3QkFBd0I7WUFDdkU7Z0JBQ0l6RixZQUFZSSxLQUFLQyxTQUFTLENBQUM7b0JBQ3ZCQyxPQUFPO29CQUNQK0UsVUFBVWxHO2dCQUNkO2dCQUNBLElBQUlMLGlCQUFpQjhELG1CQUFtQixDQUFDRCxlQUFlLEVBQUU7b0JBQ3RELElBQUlsRCxXQUFXO29CQUNmQSxZQUFZO29CQUNaLE9BQU9lLE9BQU9JLFFBQVEsQ0FBQ2lDLE1BQU07Z0JBQ2pDO2dCQUNDLElBQUd2RSxPQUFPb0gsZUFBZSxFQUFFO29CQUN4Qix5Q0FBeUM7b0JBQ3pDN0IsT0FBTzhCLFdBQVc7b0JBQ2xCL0YsV0FBV3NCLFNBQVM7Z0JBQ3hCO2dCQUNBLElBQUlJLEtBQTRCLEVBQUUsRUFLakM7Z0JBQ0Q7WUFDSjtRQUNKLEtBQUtyQyxrQkFBa0IwRiwyQkFBMkIsQ0FBQ2lCLFdBQVc7WUFDMUQ7Z0JBQ0k1RixZQUFZSSxLQUFLQyxTQUFTLENBQUM7b0JBQ3ZCQyxPQUFPO29CQUNQK0UsVUFBVWxHO2dCQUNkO2dCQUNBLElBQUlNLFdBQVc7Z0JBQ2ZBLFlBQVk7Z0JBQ1osT0FBT2UsT0FBT0ksUUFBUSxDQUFDaUMsTUFBTTtZQUNqQztRQUNKLEtBQUs1RCxrQkFBa0IwRiwyQkFBMkIsQ0FBQ2tCLFlBQVk7WUFDM0Q7Z0JBQ0ksK0VBQStFO2dCQUMvRSx5Q0FBeUM7Z0JBQ3pDaEMsT0FBTzhCLFdBQVc7Z0JBQ2xCO1lBQ0o7UUFDSixLQUFLMUcsa0JBQWtCMEYsMkJBQTJCLENBQUNtQixVQUFVO1lBQ3pEO2dCQUNJLDZFQUE2RTtnQkFDN0UseUNBQXlDO2dCQUN6Q2pDLE9BQU84QixXQUFXO2dCQUNsQjtZQUNKO1FBQ0osS0FBSzFHLGtCQUFrQjBGLDJCQUEyQixDQUFDb0IsWUFBWTtZQUMzRDtnQkFDSSxNQUFNLEVBQUVDLFNBQVMsRUFBRSxHQUFHcEM7Z0JBQ3RCLElBQUlvQyxXQUFXO29CQUNYLE1BQU0sRUFBRXRELE9BQU8sRUFBRUosS0FBSyxFQUFFLEdBQUdsQyxLQUFLNkYsS0FBSyxDQUFDRDtvQkFDdEMsTUFBTTNCLFFBQVEsSUFBSTZCLE1BQU14RDtvQkFDeEIyQixNQUFNL0IsS0FBSyxHQUFHQTtvQkFDZHdCLGFBQWE7d0JBQ1RPO3FCQUNIO2dCQUNMO2dCQUNBO1lBQ0o7UUFDSixLQUFLcEYsa0JBQWtCMEYsMkJBQTJCLENBQUN3Qix5QkFBeUI7WUFDeEU7Z0JBQ0k7WUFDSjtRQUNKO1lBQ0ksQ0FBQztJQUNUO0FBQ0o7QUFDQSxTQUFTbEksVUFBVW1JLEtBQUs7SUFDcEIsSUFBSSxFQUFFQyxXQUFXLEVBQUVDLFFBQVEsRUFBRSxHQUFHRjtJQUNoQyxNQUFNLENBQUNHLE9BQU9DLFNBQVMsR0FBRyxDQUFDLEdBQUdsSSxPQUFPbUksVUFBVSxFQUFFOUgscUJBQXFCK0gsbUJBQW1CLEVBQUUvSCxxQkFBcUJnSSxxQkFBcUI7SUFDckksTUFBTS9HLGFBQWEsQ0FBQyxHQUFHdEIsT0FBT3NJLE9BQU8sRUFBRTtRQUNuQyxPQUFPO1lBQ0h6RztnQkFDSXFHLFNBQVM7b0JBQ0xLLE1BQU1sSSxxQkFBcUJtSSxlQUFlO2dCQUM5QztZQUNKO1lBQ0EzQyxjQUFjekIsT0FBTztnQkFDakI4RCxTQUFTO29CQUNMSyxNQUFNbEkscUJBQXFCb0ksa0JBQWtCO29CQUM3Q3JFO2dCQUNKO1lBQ0o7WUFDQTVDO2dCQUNJMEcsU0FBUztvQkFDTEssTUFBTWxJLHFCQUFxQnFJLHFCQUFxQjtnQkFDcEQ7WUFDSjtZQUNBOUY7Z0JBQ0lzRixTQUFTO29CQUNMSyxNQUFNbEkscUJBQXFCc0ksY0FBYztnQkFDN0M7WUFDSjtZQUNBaEMsZUFBZUMsV0FBVztnQkFDdEJzQixTQUFTO29CQUNMSyxNQUFNbEkscUJBQXFCdUksbUJBQW1CO29CQUM5Q2hDO2dCQUNKO1lBQ0o7UUFDSjtJQUNKLEdBQUc7UUFDQ3NCO0tBQ0g7SUFDRCxNQUFNVyx5QkFBeUIsQ0FBQyxHQUFHN0ksT0FBTzhJLFdBQVcsRUFBRSxDQUFDL0M7UUFDcEQsa0dBQWtHO1FBQ2xHLE1BQU1nRCxpQkFBaUJoRCxNQUFNaUQsZUFBZTtRQUM1Q2QsU0FBUztZQUNMSyxNQUFNbEkscUJBQXFCNEksc0JBQXNCO1lBQ2pEQyxRQUFRbkQ7WUFDUm9ELFFBQVEsQ0FBQyxHQUFHN0ksWUFBWThJLFVBQVUsRUFBRXJELE1BQU0vQixLQUFLO1lBQy9DcUYsc0JBQXNCTixrQkFBa0IsQ0FBQyxHQUFHckkscUJBQXFCNEksbUJBQW1CLEVBQUVQO1FBQzFGO0lBQ0osR0FBRyxFQUFFO0lBQ0wsTUFBTVEsNkJBQTZCLENBQUMsR0FBR3ZKLE9BQU84SSxXQUFXLEVBQUUsQ0FBQ0k7UUFDeERoQixTQUFTO1lBQ0xLLE1BQU1sSSxxQkFBcUJtSiwwQkFBMEI7WUFDckROLFFBQVFBO1lBQ1JDLFFBQVEsQ0FBQyxHQUFHN0ksWUFBWThJLFVBQVUsRUFBRUYsT0FBT2xGLEtBQUs7UUFDcEQ7SUFDSixHQUFHLEVBQUU7SUFDTCxNQUFNeUYscUJBQXFCLENBQUMsR0FBR3pKLE9BQU84SSxXQUFXLEVBQUU7UUFDL0N0SSxpQkFBaUI4RCxtQkFBbUIsQ0FBQ0QsZUFBZSxHQUFHO0lBQzNELEdBQUcsRUFBRTtJQUNKLElBQUc3RCxpQkFBaUJrSixlQUFlLEVBQUViLHdCQUF3QlU7SUFDOUQsTUFBTUksZUFBZSxDQUFDLEdBQUdsSixjQUFjbUosWUFBWSxFQUFFN0I7SUFDcEQsSUFBR3RILGNBQWNvSixnQkFBZ0IsRUFBRUY7SUFDcEMsTUFBTWpJLGNBQWMsQ0FBQyxHQUFHakIsY0FBY3FKLGNBQWMsRUFBRUg7SUFDdEQsTUFBTUksMEJBQTBCLENBQUMsR0FBR3RKLGNBQWN1SixZQUFZLEVBQUV0STtJQUNoRSxNQUFNNkQsU0FBUyxDQUFDLEdBQUduRixZQUFZNkosU0FBUztJQUN2QyxJQUFHakssT0FBT2tLLFNBQVMsRUFBRTtRQUNsQixNQUFNeEcsVUFBVSxDQUFDMUI7WUFDYixJQUFJO2dCQUNBLE1BQU1zRCxNQUFNeEQsS0FBSzZGLEtBQUssQ0FBQzNGLE1BQU1tSSxJQUFJO2dCQUNqQyxNQUFNQyxxQkFBcUJMLDJCQUEyQixPQUFPLEtBQUssSUFBSUEsd0JBQXdCekU7Z0JBQzlGLElBQUksQ0FBQzhFLG9CQUFvQjtvQkFDckIvRSxlQUFlQyxLQUFLNUQsYUFBYTZELFFBQVFqRTtnQkFDN0M7WUFDSixFQUFFLE9BQU93QyxLQUFLO2dCQUNWLElBQUl1RztnQkFDSnpGLFFBQVFDLElBQUksQ0FBQyw0QkFBNEI3QyxNQUFNbUksSUFBSSxHQUFHLE9BQVEsRUFBQ0UsYUFBYXZHLE9BQU8sT0FBTyxLQUFLLElBQUlBLElBQUlFLEtBQUssS0FBSyxPQUFPcUcsYUFBYSxFQUFDO1lBQzFJO1FBQ0o7UUFDQSxNQUFNQyxZQUFZWCxhQUFhWSxPQUFPO1FBQ3RDLElBQUlELFdBQVc7WUFDWEEsVUFBVUUsZ0JBQWdCLENBQUMsV0FBVzlHO1FBQzFDO1FBQ0EsT0FBTyxJQUFJNEcsYUFBYUEsVUFBVUcsbUJBQW1CLENBQUMsV0FBVy9HO0lBQ3JFLEdBQUc7UUFDQ2hDO1FBQ0E2RDtRQUNBb0U7UUFDQXJJO1FBQ0F5STtLQUNIO0lBQ0QsT0FBcUIsV0FBSCxHQUFJLElBQUdoSyxZQUFZMkssR0FBRyxFQUFFbkssaUJBQWlCb0YsT0FBTyxFQUFFO1FBQ2hFZ0YsY0FBY2xCO1FBQ2R4QixPQUFPQTtRQUNQRCxVQUFVQTtJQUNkO0FBQ0o7S0E1RlNySTtBQThGVCxJQUFJLENBQUMsT0FBT0osUUFBUW9HLE9BQU8sS0FBSyxjQUFlLE9BQU9wRyxRQUFRb0csT0FBTyxLQUFLLFlBQVlwRyxRQUFRb0csT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPcEcsUUFBUW9HLE9BQU8sQ0FBQ2lGLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdkwsT0FBT0MsY0FBYyxDQUFDQyxRQUFRb0csT0FBTyxFQUFFLGNBQWM7UUFBRW5HLE9BQU87SUFBSztJQUNuRUgsT0FBT3dMLE1BQU0sQ0FBQ3RMLFFBQVFvRyxPQUFPLEVBQUVwRztJQUMvQjhELE9BQU85RCxPQUFPLEdBQUdBLFFBQVFvRyxPQUFPO0FBQ2xDLEVBRUEsK0NBQStDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaG90LXJlbG9hZGVyLWNsaWVudC5qcz8wNjhiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSG90UmVsb2FkO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9zdHJpcGFuc2kgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaVwiKSk7XG5jb25zdCBfZm9ybWF0d2VicGFja21lc3NhZ2VzID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vLi4vZGV2L2Vycm9yLW92ZXJsYXkvZm9ybWF0LXdlYnBhY2stbWVzc2FnZXNcIikpO1xuY29uc3QgX25hdmlnYXRpb24gPSByZXF1aXJlKFwiLi4vbmF2aWdhdGlvblwiKTtcbmNvbnN0IF9lcnJvcm92ZXJsYXlyZWR1Y2VyID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvZXJyb3Itb3ZlcmxheS1yZWR1Y2VyXCIpO1xuY29uc3QgX3BhcnNlU3RhY2sgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9oZWxwZXJzL3BhcnNlU3RhY2tcIik7XG5jb25zdCBfUmVhY3REZXZPdmVybGF5ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi9pbnRlcm5hbC9SZWFjdERldk92ZXJsYXlcIikpO1xuY29uc3QgX3VzZWVycm9yaGFuZGxlciA9IHJlcXVpcmUoXCIuL2ludGVybmFsL2hlbHBlcnMvdXNlLWVycm9yLWhhbmRsZXJcIik7XG5jb25zdCBfdXNld2Vic29ja2V0ID0gcmVxdWlyZShcIi4vaW50ZXJuYWwvaGVscGVycy91c2Utd2Vic29ja2V0XCIpO1xuY29uc3QgX3BhcnNlY29tcG9uZW50c3RhY2sgPSByZXF1aXJlKFwiLi9pbnRlcm5hbC9oZWxwZXJzL3BhcnNlLWNvbXBvbmVudC1zdGFja1wiKTtcbmNvbnN0IF9ob3RyZWxvYWRlcnR5cGVzID0gcmVxdWlyZShcIi4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzXCIpO1xubGV0IG1vc3RSZWNlbnRDb21waWxhdGlvbkhhc2ggPSBudWxsO1xubGV0IF9fbmV4dERldkNsaWVudElkID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwICsgRGF0ZS5ub3coKSk7XG5sZXQgcmVsb2FkaW5nID0gZmFsc2U7XG5sZXQgc3RhcnRMYXRlbmN5ID0gbnVsbDtcbmZ1bmN0aW9uIG9uQmVmb3JlRmFzdFJlZnJlc2goZGlzcGF0Y2hlciwgaGFzVXBkYXRlcykge1xuICAgIGlmIChoYXNVcGRhdGVzKSB7XG4gICAgICAgIGRpc3BhdGNoZXIub25CZWZvcmVSZWZyZXNoKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gb25GYXN0UmVmcmVzaChkaXNwYXRjaGVyLCBzZW5kTWVzc2FnZSwgdXBkYXRlZE1vZHVsZXMpIHtcbiAgICBsZXQgZW5kTGF0ZW5jeSA9IERhdGUubm93KCk7XG4gICAgZGlzcGF0Y2hlci5vbkJ1aWxkT2soKTtcbiAgICBzZW5kTWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50OiBcImNsaWVudC1obXItbGF0ZW5jeVwiLFxuICAgICAgICBpZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkLFxuICAgICAgICBzdGFydFRpbWU6IHN0YXJ0TGF0ZW5jeSxcbiAgICAgICAgZW5kVGltZTogZW5kTGF0ZW5jeSxcbiAgICAgICAgcGFnZTogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICB1cGRhdGVkTW9kdWxlcyxcbiAgICAgICAgLy8gV2hldGhlciB0aGUgcGFnZSAodGFiKSB3YXMgaGlkZGVuIGF0IHRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnJlZC5cbiAgICAgICAgLy8gVGhpcyBjYW4gaW1wYWN0IHRoZSBhY2N1cmFjeSBvZiB0aGUgZXZlbnQncyB0aW1pbmcuXG4gICAgICAgIGlzUGFnZUhpZGRlbjogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSBcImhpZGRlblwiXG4gICAgfSkpO1xuICAgIGlmICh1cGRhdGVkTW9kdWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRpc3BhdGNoZXIub25SZWZyZXNoKCk7XG4gICAgfVxufVxuLy8gVGhlcmUgaXMgYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBjb2RlIGF2YWlsYWJsZS5cbmZ1bmN0aW9uIGhhbmRsZUF2YWlsYWJsZUhhc2goaGFzaCkge1xuICAgIC8vIFVwZGF0ZSBsYXN0IGtub3duIGNvbXBpbGF0aW9uIGhhc2guXG4gICAgbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCA9IGhhc2g7XG59XG4vKipcbiAqIElzIHRoZXJlIGEgbmV3ZXIgdmVyc2lvbiBvZiB0aGlzIGNvZGUgYXZhaWxhYmxlP1xuICogRm9yIHdlYnBhY2s6IENoZWNrIGlmIHRoZSBoYXNoIGNoYW5nZWQgY29tcGFyZWQgdG8gX193ZWJwYWNrX2hhc2hfX1xuICogRm9yIFR1cmJvcGFjazogQWx3YXlzIHRydWUgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgX193ZWJwYWNrX2hhc2hfX1xuICovIGZ1bmN0aW9uIGlzVXBkYXRlQXZhaWxhYmxlKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5UVVJCT1BBQ0spIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qIGdsb2JhbHMgX193ZWJwYWNrX2hhc2hfXyAqLyAvLyBfX3dlYnBhY2tfaGFzaF9fIGlzIHRoZSBoYXNoIG9mIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uLlxuICAgIC8vIEl0J3MgYSBnbG9iYWwgdmFyaWFibGUgaW5qZWN0ZWQgYnkgV2VicGFjay5cbiAgICByZXR1cm4gbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCAhPT0gX193ZWJwYWNrX2hhc2hfXztcbn1cbi8vIFdlYnBhY2sgZGlzYWxsb3dzIHVwZGF0ZXMgaW4gb3RoZXIgc3RhdGVzLlxuZnVuY3Rpb24gY2FuQXBwbHlVcGRhdGVzKCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbW9kdWxlLmhvdCBleGlzdHNcbiAgICByZXR1cm4gbW9kdWxlLmhvdC5zdGF0dXMoKSA9PT0gXCJpZGxlXCI7XG59XG5mdW5jdGlvbiBhZnRlckFwcGx5VXBkYXRlcyhmbikge1xuICAgIGlmIChjYW5BcHBseVVwZGF0ZXMoKSkge1xuICAgICAgICBmbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoc3RhdHVzKSB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSBcImlkbGVcIikge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbW9kdWxlLmhvdCBleGlzdHNcbiAgICAgICAgICAgICAgICBtb2R1bGUuaG90LnJlbW92ZVN0YXR1c0hhbmRsZXIoaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG1vZHVsZS5ob3QgZXhpc3RzXG4gICAgICAgIG1vZHVsZS5ob3QuYWRkU3RhdHVzSGFuZGxlcihoYW5kbGVyKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwZXJmb3JtRnVsbFJlbG9hZChlcnIsIHNlbmRNZXNzYWdlKSB7XG4gICAgY29uc3Qgc3RhY2tUcmFjZSA9IGVyciAmJiAoZXJyLnN0YWNrICYmIGVyci5zdGFjay5zcGxpdChcIlxcblwiKS5zbGljZSgwLCA1KS5qb2luKFwiXFxuXCIpIHx8IGVyci5tZXNzYWdlIHx8IGVyciArIFwiXCIpO1xuICAgIHNlbmRNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZXZlbnQ6IFwiY2xpZW50LWZ1bGwtcmVsb2FkXCIsXG4gICAgICAgIHN0YWNrVHJhY2UsXG4gICAgICAgIGhhZFJ1bnRpbWVFcnJvcjogISFfdXNlZXJyb3JoYW5kbGVyLlJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yXG4gICAgfSkpO1xuICAgIGlmIChyZWxvYWRpbmcpIHJldHVybjtcbiAgICByZWxvYWRpbmcgPSB0cnVlO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbn1cbi8vIEF0dGVtcHQgdG8gdXBkYXRlIGNvZGUgb24gdGhlIGZseSwgZmFsbCBiYWNrIHRvIGEgaGFyZCByZWxvYWQuXG5mdW5jdGlvbiB0cnlBcHBseVVwZGF0ZXMob25CZWZvcmVVcGRhdGUsIG9uSG90VXBkYXRlU3VjY2Vzcywgc2VuZE1lc3NhZ2UsIGRpc3BhdGNoZXIpIHtcbiAgICBpZiAoIWlzVXBkYXRlQXZhaWxhYmxlKCkgfHwgIWNhbkFwcGx5VXBkYXRlcygpKSB7XG4gICAgICAgIGRpc3BhdGNoZXIub25CdWlsZE9rKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlQXBwbHlVcGRhdGVzKGVyciwgdXBkYXRlZE1vZHVsZXMpIHtcbiAgICAgICAgaWYgKGVyciB8fCBfdXNlZXJyb3JoYW5kbGVyLlJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yIHx8ICF1cGRhdGVkTW9kdWxlcykge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIltGYXN0IFJlZnJlc2hdIHBlcmZvcm1pbmcgZnVsbCByZWxvYWRcXG5cXG5cIiArIFwiRmFzdCBSZWZyZXNoIHdpbGwgcGVyZm9ybSBhIGZ1bGwgcmVsb2FkIHdoZW4geW91IGVkaXQgYSBmaWxlIHRoYXQncyBpbXBvcnRlZCBieSBtb2R1bGVzIG91dHNpZGUgb2YgdGhlIFJlYWN0IHJlbmRlcmluZyB0cmVlLlxcblwiICsgXCJZb3UgbWlnaHQgaGF2ZSBhIGZpbGUgd2hpY2ggZXhwb3J0cyBhIFJlYWN0IGNvbXBvbmVudCBidXQgYWxzbyBleHBvcnRzIGEgdmFsdWUgdGhhdCBpcyBpbXBvcnRlZCBieSBhIG5vbi1SZWFjdCBjb21wb25lbnQgZmlsZS5cXG5cIiArIFwiQ29uc2lkZXIgbWlncmF0aW5nIHRoZSBub24tUmVhY3QgY29tcG9uZW50IGV4cG9ydCB0byBhIHNlcGFyYXRlIGZpbGUgYW5kIGltcG9ydGluZyBpdCBpbnRvIGJvdGggZmlsZXMuXFxuXFxuXCIgKyBcIkl0IGlzIGFsc28gcG9zc2libGUgdGhlIHBhcmVudCBjb21wb25lbnQgb2YgdGhlIGNvbXBvbmVudCB5b3UgZWRpdGVkIGlzIGEgY2xhc3MgY29tcG9uZW50LCB3aGljaCBkaXNhYmxlcyBGYXN0IFJlZnJlc2guXFxuXCIgKyBcIkZhc3QgUmVmcmVzaCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgcGFyZW50IGZ1bmN0aW9uIGNvbXBvbmVudCBpbiB5b3VyIFJlYWN0IHRyZWUuXCIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfdXNlZXJyb3JoYW5kbGVyLlJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW0Zhc3QgUmVmcmVzaF0gcGVyZm9ybWluZyBmdWxsIHJlbG9hZCBiZWNhdXNlIHlvdXIgYXBwbGljYXRpb24gaGFkIGFuIHVucmVjb3ZlcmFibGUgZXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZXJmb3JtRnVsbFJlbG9hZChlcnIsIHNlbmRNZXNzYWdlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNVcGRhdGVzID0gQm9vbGVhbih1cGRhdGVkTW9kdWxlcy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIG9uSG90VXBkYXRlU3VjY2VzcyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAvLyBNYXliZSB3ZSB3YW50IHRvIGRvIHNvbWV0aGluZy5cbiAgICAgICAgICAgIG9uSG90VXBkYXRlU3VjY2Vzcyh1cGRhdGVkTW9kdWxlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVXBkYXRlQXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIC8vIFdoaWxlIHdlIHdlcmUgdXBkYXRpbmcsIHRoZXJlIHdhcyBhIG5ldyB1cGRhdGUhIERvIGl0IGFnYWluLlxuICAgICAgICAgICAgdHJ5QXBwbHlVcGRhdGVzKGhhc1VwZGF0ZXMgPyAoKT0+e30gOiBvbkJlZm9yZVVwZGF0ZSwgaGFzVXBkYXRlcyA/ICgpPT5kaXNwYXRjaGVyLm9uQnVpbGRPaygpIDogb25Ib3RVcGRhdGVTdWNjZXNzLCBzZW5kTWVzc2FnZSwgZGlzcGF0Y2hlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaXNwYXRjaGVyLm9uQnVpbGRPaygpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgICAgICAgICAgICBhZnRlckFwcGx5VXBkYXRlcygoKT0+e1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX05FWFRfSE1SX0NCKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19ORVhUX0hNUl9DQiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBodHRwczovL3dlYnBhY2suanMub3JnL2FwaS9ob3QtbW9kdWxlLXJlcGxhY2VtZW50LyNjaGVja1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbW9kdWxlLmhvdCBleGlzdHNcbiAgICBtb2R1bGUuaG90LmNoZWNrKC8qIGF1dG9BcHBseSAqLyBmYWxzZSkudGhlbigodXBkYXRlZE1vZHVsZXMpPT57XG4gICAgICAgIGlmICghdXBkYXRlZE1vZHVsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb25CZWZvcmVVcGRhdGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgY29uc3QgaGFzVXBkYXRlcyA9IEJvb2xlYW4odXBkYXRlZE1vZHVsZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIG9uQmVmb3JlVXBkYXRlKGhhc1VwZGF0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGh0dHBzOi8vd2VicGFjay5qcy5vcmcvYXBpL2hvdC1tb2R1bGUtcmVwbGFjZW1lbnQvI2FwcGx5XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbW9kdWxlLmhvdCBleGlzdHNcbiAgICAgICAgcmV0dXJuIG1vZHVsZS5ob3QuYXBwbHkoKTtcbiAgICB9KS50aGVuKCh1cGRhdGVkTW9kdWxlcyk9PntcbiAgICAgICAgaGFuZGxlQXBwbHlVcGRhdGVzKG51bGwsIHVwZGF0ZWRNb2R1bGVzKTtcbiAgICB9LCAoZXJyKT0+e1xuICAgICAgICBoYW5kbGVBcHBseVVwZGF0ZXMoZXJyLCBudWxsKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHByb2Nlc3NNZXNzYWdlKG9iaiwgc2VuZE1lc3NhZ2UsIHJvdXRlciwgZGlzcGF0Y2hlcikge1xuICAgIGlmICghKFwiYWN0aW9uXCIgaW4gb2JqKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZUVycm9ycyhlcnJvcnMpIHtcbiAgICAgICAgLy8gXCJNYXNzYWdlXCIgd2VicGFjayBtZXNzYWdlcy5cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gKDAsIF9mb3JtYXR3ZWJwYWNrbWVzc2FnZXMuZGVmYXVsdCkoe1xuICAgICAgICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgICAgICAgICB3YXJuaW5nczogW11cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIE9ubHkgc2hvdyB0aGUgZmlyc3QgZXJyb3IuXG4gICAgICAgIGRpc3BhdGNoZXIub25CdWlsZEVycm9yKGZvcm1hdHRlZC5lcnJvcnNbMF0pO1xuICAgICAgICAvLyBBbHNvIGxvZyB0aGVtIHRvIHRoZSBjb25zb2xlLlxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkLmVycm9ycy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCgwLCBfc3RyaXBhbnNpLmRlZmF1bHQpKGZvcm1hdHRlZC5lcnJvcnNbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEbyBub3QgYXR0ZW1wdCB0byByZWxvYWQgbm93LlxuICAgICAgICAvLyBXZSB3aWxsIHJlbG9hZCBvbiBuZXh0IHN1Y2Nlc3MgaW5zdGVhZC5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9fTkVYVF9ITVJfQ0IpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IoZm9ybWF0dGVkLmVycm9yc1swXSk7XG4gICAgICAgICAgICAgICAgc2VsZi5fX05FWFRfSE1SX0NCID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVIb3RVcGRhdGUodXBkYXRlZE1vZHVsZXMpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgICAgICAgICAgb25GYXN0UmVmcmVzaChkaXNwYXRjaGVyLCBzZW5kTWVzc2FnZSwgdXBkYXRlZE1vZHVsZXMgfHwgW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5QXBwbHlVcGRhdGVzKGZ1bmN0aW9uIG9uQmVmb3JlSG90VXBkYXRlKGhhc1VwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBvbkJlZm9yZUZhc3RSZWZyZXNoKGRpc3BhdGNoZXIsIGhhc1VwZGF0ZXMpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gb25TdWNjZXNzZnVsSG90VXBkYXRlKHdlYnBhY2tVcGRhdGVkTW9kdWxlcykge1xuICAgICAgICAgICAgICAgIC8vIE9ubHkgZGlzbWlzcyBpdCB3aGVuIHdlJ3JlIHN1cmUgaXQncyBhIGhvdCB1cGRhdGUuXG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGl0IHdvdWxkIGZsaWNrZXIgcmlnaHQgYmVmb3JlIHRoZSByZWxvYWQuXG4gICAgICAgICAgICAgICAgb25GYXN0UmVmcmVzaChkaXNwYXRjaGVyLCBzZW5kTWVzc2FnZSwgd2VicGFja1VwZGF0ZWRNb2R1bGVzKTtcbiAgICAgICAgICAgIH0sIHNlbmRNZXNzYWdlLCBkaXNwYXRjaGVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2gob2JqLmFjdGlvbil7XG4gICAgICAgIGNhc2UgX2hvdHJlbG9hZGVydHlwZXMuSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkJVSUxESU5HOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXJ0TGF0ZW5jeSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJbRmFzdCBSZWZyZXNoXSByZWJ1aWxkaW5nXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5GSU5JU0hfQlVJTERJTkc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX2hvdHJlbG9hZGVydHlwZXMuSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkJVSUxUOlxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TWU5DOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzaCkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVBdmFpbGFibGVIYXNoKG9iai5oYXNoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvcnMsIHdhcm5pbmdzIH0gPSBvYmo7XG4gICAgICAgICAgICAgICAgLy8gSXMgdW5kZWZpbmVkIHdoZW4gaXQncyBhICdidWlsdCcgZXZlbnRcbiAgICAgICAgICAgICAgICBpZiAoXCJ2ZXJzaW9uSW5mb1wiIGluIG9iaikge1xuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyLm9uVmVyc2lvbkluZm8ob2JqLnZlcnNpb25JbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzRXJyb3JzID0gQm9vbGVhbihlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgLy8gQ29tcGlsYXRpb24gd2l0aCBlcnJvcnMgKGUuZy4gc3ludGF4IGVycm9yIG9yIG1pc3NpbmcgbW9kdWxlcykuXG4gICAgICAgICAgICAgICAgaWYgKGhhc0Vycm9ycykge1xuICAgICAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogXCJjbGllbnQtZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ291bnQ6IGVycm9ycy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJZDogX19uZXh0RGV2Q2xpZW50SWRcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNXYXJuaW5ncyA9IEJvb2xlYW4od2FybmluZ3MgJiYgd2FybmluZ3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzV2FybmluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IFwiY2xpZW50LXdhcm5pbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdDb3VudDogd2FybmluZ3MubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQ6IF9fbmV4dERldkNsaWVudElkXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUHJpbnQgd2FybmluZ3MgdG8gdGhlIGNvbnNvbGUuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2VzID0gKDAsIF9mb3JtYXR3ZWJwYWNrbWVzc2FnZXMuZGVmYXVsdCkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3M6IHdhcm5pbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBbXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZE1lc3NhZ2VzLndhcm5pbmdzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSA1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiVGhlcmUgd2VyZSBtb3JlIHdhcm5pbmdzIGluIG90aGVyIGZpbGVzLlxcblwiICsgXCJZb3UgY2FuIGZpbmQgYSBjb21wbGV0ZSBsb2cgaW4gdGhlIHRlcm1pbmFsLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigoMCwgX3N0cmlwYW5zaS5kZWZhdWx0KShmb3JtYXR0ZWRNZXNzYWdlcy53YXJuaW5nc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm8gZWFybHkgcmV0dXJuIGhlcmUgYXMgd2UgbmVlZCB0byBhcHBseSBtb2R1bGVzIGluIHRoZSBzYW1lIHdheSBiZXR3ZWVuIHdhcm5pbmdzIG9ubHkgYW5kIGNvbXBpbGVzIHdpdGhvdXQgd2FybmluZ3NcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBldmVudDogXCJjbGllbnQtc3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgICAgICBjbGllbnRJZDogX19uZXh0RGV2Q2xpZW50SWRcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5hY3Rpb24gPT09IF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5CVUlMVCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgaG90IHVwZGF0ZXNcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlSG90VXBkYXRlKG9iai51cGRhdGVkTW9kdWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgLy8gVE9ETy1BUFA6IG1ha2Ugc2VydmVyIGNvbXBvbmVudCBjaGFuZ2UgbW9yZSBncmFudWxhclxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TRVJWRVJfQ09NUE9ORU5UX0NIQU5HRVM6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBldmVudDogXCJzZXJ2ZXItY29tcG9uZW50LXJlbG9hZC1wYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsaWVudElkOiBfX25leHREZXZDbGllbnRJZFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBpZiAoX3VzZWVycm9yaGFuZGxlci5SdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVsb2FkaW5nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHJlbG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIGl0IGV4aXN0cywgaXQncyBqdXN0IGhpZGRlblxuICAgICAgICAgICAgICAgICAgICByb3V0ZXIuZmFzdFJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlci5vblJlZnJlc2goKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1RFU1RfTU9ERSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX05FWFRfSE1SX0NCKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19ORVhUX0hNUl9DQiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5SRUxPQURfUEFHRTpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBcImNsaWVudC1yZWxvYWQtcGFnZVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGllbnRJZDogX19uZXh0RGV2Q2xpZW50SWRcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlbG9hZGluZykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHJlbG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfaG90cmVsb2FkZXJ0eXBlcy5ITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuUkVNT1ZFRF9QQUdFOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8tQVBQOiBwb3RlbnRpYWxseSBvbmx5IHJlZnJlc2ggaWYgdGhlIGN1cnJlbnRseSB2aWV3ZWQgcGFnZSB3YXMgcmVtb3ZlZC5cbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIGl0IGV4aXN0cywgaXQncyBqdXN0IGhpZGRlblxuICAgICAgICAgICAgICAgIHJvdXRlci5mYXN0UmVmcmVzaCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfaG90cmVsb2FkZXJ0eXBlcy5ITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuQURERURfUEFHRTpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPLUFQUDogcG90ZW50aWFsbHkgb25seSByZWZyZXNoIGlmIHRoZSBjdXJyZW50bHkgdmlld2VkIHBhZ2Ugd2FzIGFkZGVkLlxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgaXQgZXhpc3RzLCBpdCdzIGp1c3QgaGlkZGVuXG4gICAgICAgICAgICAgICAgcm91dGVyLmZhc3RSZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TRVJWRVJfRVJST1I6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvckpTT04gfSA9IG9iajtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JKU09OKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IEpTT04ucGFyc2UoZXJyb3JKU09OKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUVycm9ycyhbXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5ERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHt9XG4gICAgfVxufVxuZnVuY3Rpb24gSG90UmVsb2FkKHBhcmFtKSB7XG4gICAgbGV0IHsgYXNzZXRQcmVmaXgsIGNoaWxkcmVuIH0gPSBwYXJhbTtcbiAgICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9ICgwLCBfcmVhY3QudXNlUmVkdWNlcikoX2Vycm9yb3ZlcmxheXJlZHVjZXIuZXJyb3JPdmVybGF5UmVkdWNlciwgX2Vycm9yb3ZlcmxheXJlZHVjZXIuSU5JVElBTF9PVkVSTEFZX1NUQVRFKTtcbiAgICBjb25zdCBkaXNwYXRjaGVyID0gKDAsIF9yZWFjdC51c2VNZW1vKSgoKT0+e1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb25CdWlsZE9rICgpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IF9lcnJvcm92ZXJsYXlyZWR1Y2VyLkFDVElPTl9CVUlMRF9PS1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQnVpbGRFcnJvciAobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogX2Vycm9yb3ZlcmxheXJlZHVjZXIuQUNUSU9OX0JVSUxEX0VSUk9SLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25CZWZvcmVSZWZyZXNoICgpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IF9lcnJvcm92ZXJsYXlyZWR1Y2VyLkFDVElPTl9CRUZPUkVfUkVGUkVTSFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVmcmVzaCAoKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBfZXJyb3JvdmVybGF5cmVkdWNlci5BQ1RJT05fUkVGUkVTSFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVmVyc2lvbkluZm8gKHZlcnNpb25JbmZvKSB7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBfZXJyb3JvdmVybGF5cmVkdWNlci5BQ1RJT05fVkVSU0lPTl9JTkZPLFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uSW5mb1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgZGlzcGF0Y2hcbiAgICBdKTtcbiAgICBjb25zdCBoYW5kbGVPblVuaGFuZGxlZEVycm9yID0gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKGVycm9yKT0+e1xuICAgICAgICAvLyBDb21wb25lbnQgc3RhY2sgaXMgYWRkZWQgdG8gdGhlIGVycm9yIGluIHVzZS1lcnJvci1oYW5kbGVyIGluIGNhc2UgdGhlcmUgd2FzIGEgaHlkcmF0aW9uIGVycnJvclxuICAgICAgICBjb25zdCBjb21wb25lbnRTdGFjayA9IGVycm9yLl9jb21wb25lbnRTdGFjaztcbiAgICAgICAgZGlzcGF0Y2goe1xuICAgICAgICAgICAgdHlwZTogX2Vycm9yb3ZlcmxheXJlZHVjZXIuQUNUSU9OX1VOSEFORExFRF9FUlJPUixcbiAgICAgICAgICAgIHJlYXNvbjogZXJyb3IsXG4gICAgICAgICAgICBmcmFtZXM6ICgwLCBfcGFyc2VTdGFjay5wYXJzZVN0YWNrKShlcnJvci5zdGFjayksXG4gICAgICAgICAgICBjb21wb25lbnRTdGFja0ZyYW1lczogY29tcG9uZW50U3RhY2sgJiYgKDAsIF9wYXJzZWNvbXBvbmVudHN0YWNrLnBhcnNlQ29tcG9uZW50U3RhY2spKGNvbXBvbmVudFN0YWNrKVxuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgaGFuZGxlT25VbmhhbmRsZWRSZWplY3Rpb24gPSAoMCwgX3JlYWN0LnVzZUNhbGxiYWNrKSgocmVhc29uKT0+e1xuICAgICAgICBkaXNwYXRjaCh7XG4gICAgICAgICAgICB0eXBlOiBfZXJyb3JvdmVybGF5cmVkdWNlci5BQ1RJT05fVU5IQU5ETEVEX1JFSkVDVElPTixcbiAgICAgICAgICAgIHJlYXNvbjogcmVhc29uLFxuICAgICAgICAgICAgZnJhbWVzOiAoMCwgX3BhcnNlU3RhY2sucGFyc2VTdGFjaykocmVhc29uLnN0YWNrKVxuICAgICAgICB9KTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgaGFuZGxlT25SZWFjdEVycm9yID0gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKCk9PntcbiAgICAgICAgX3VzZWVycm9yaGFuZGxlci5SdW50aW1lRXJyb3JIYW5kbGVyLmhhZFJ1bnRpbWVFcnJvciA9IHRydWU7XG4gICAgfSwgW10pO1xuICAgICgwLCBfdXNlZXJyb3JoYW5kbGVyLnVzZUVycm9ySGFuZGxlcikoaGFuZGxlT25VbmhhbmRsZWRFcnJvciwgaGFuZGxlT25VbmhhbmRsZWRSZWplY3Rpb24pO1xuICAgIGNvbnN0IHdlYlNvY2tldFJlZiA9ICgwLCBfdXNld2Vic29ja2V0LnVzZVdlYnNvY2tldCkoYXNzZXRQcmVmaXgpO1xuICAgICgwLCBfdXNld2Vic29ja2V0LnVzZVdlYnNvY2tldFBpbmcpKHdlYlNvY2tldFJlZik7XG4gICAgY29uc3Qgc2VuZE1lc3NhZ2UgPSAoMCwgX3VzZXdlYnNvY2tldC51c2VTZW5kTWVzc2FnZSkod2ViU29ja2V0UmVmKTtcbiAgICBjb25zdCBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZSA9ICgwLCBfdXNld2Vic29ja2V0LnVzZVR1cmJvcGFjaykoc2VuZE1lc3NhZ2UpO1xuICAgIGNvbnN0IHJvdXRlciA9ICgwLCBfbmF2aWdhdGlvbi51c2VSb3V0ZXIpKCk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQpPT57XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlZEJ5VHVyYm9wYWNrID0gcHJvY2Vzc1R1cmJvcGFja01lc3NhZ2UgPT0gbnVsbCA/IHZvaWQgMCA6IHByb2Nlc3NUdXJib3BhY2tNZXNzYWdlKG9iaik7XG4gICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVkQnlUdXJib3BhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc01lc3NhZ2Uob2JqLCBzZW5kTWVzc2FnZSwgcm91dGVyLCBkaXNwYXRjaGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2Vycl9zdGFjaztcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbSE1SXSBJbnZhbGlkIG1lc3NhZ2U6IFwiICsgZXZlbnQuZGF0YSArIFwiXFxuXCIgKyAoKF9lcnJfc3RhY2sgPSBlcnIgPT0gbnVsbCA/IHZvaWQgMCA6IGVyci5zdGFjaykgIT0gbnVsbCA/IF9lcnJfc3RhY2sgOiBcIlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHdlYnNvY2tldCA9IHdlYlNvY2tldFJlZi5jdXJyZW50O1xuICAgICAgICBpZiAod2Vic29ja2V0KSB7XG4gICAgICAgICAgICB3ZWJzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpPT53ZWJzb2NrZXQgJiYgd2Vic29ja2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGhhbmRsZXIpO1xuICAgIH0sIFtcbiAgICAgICAgc2VuZE1lc3NhZ2UsXG4gICAgICAgIHJvdXRlcixcbiAgICAgICAgd2ViU29ja2V0UmVmLFxuICAgICAgICBkaXNwYXRjaGVyLFxuICAgICAgICBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZVxuICAgIF0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9SZWFjdERldk92ZXJsYXkuZGVmYXVsdCwge1xuICAgICAgICBvblJlYWN0RXJyb3I6IGhhbmRsZU9uUmVhY3RFcnJvcixcbiAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG90LXJlbG9hZGVyLWNsaWVudC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiSG90UmVsb2FkIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfc3RyaXBhbnNpIiwiX2Zvcm1hdHdlYnBhY2ttZXNzYWdlcyIsIl9uYXZpZ2F0aW9uIiwiX2Vycm9yb3ZlcmxheXJlZHVjZXIiLCJfcGFyc2VTdGFjayIsIl9SZWFjdERldk92ZXJsYXkiLCJfdXNlZXJyb3JoYW5kbGVyIiwiX3VzZXdlYnNvY2tldCIsIl9wYXJzZWNvbXBvbmVudHN0YWNrIiwiX2hvdHJlbG9hZGVydHlwZXMiLCJtb3N0UmVjZW50Q29tcGlsYXRpb25IYXNoIiwiX19uZXh0RGV2Q2xpZW50SWQiLCJNYXRoIiwicm91bmQiLCJyYW5kb20iLCJEYXRlIiwibm93IiwicmVsb2FkaW5nIiwic3RhcnRMYXRlbmN5Iiwib25CZWZvcmVGYXN0UmVmcmVzaCIsImRpc3BhdGNoZXIiLCJoYXNVcGRhdGVzIiwib25CZWZvcmVSZWZyZXNoIiwib25GYXN0UmVmcmVzaCIsInNlbmRNZXNzYWdlIiwidXBkYXRlZE1vZHVsZXMiLCJlbmRMYXRlbmN5Iiwib25CdWlsZE9rIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiaWQiLCJ3aW5kb3ciLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwicGFnZSIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJpc1BhZ2VIaWRkZW4iLCJkb2N1bWVudCIsInZpc2liaWxpdHlTdGF0ZSIsImxlbmd0aCIsIm9uUmVmcmVzaCIsImhhbmRsZUF2YWlsYWJsZUhhc2giLCJoYXNoIiwiaXNVcGRhdGVBdmFpbGFibGUiLCJwcm9jZXNzIiwiZW52IiwiVFVSQk9QQUNLIiwiX193ZWJwYWNrX2hhc2hfXyIsImNhbkFwcGx5VXBkYXRlcyIsIm1vZHVsZSIsImhvdCIsInN0YXR1cyIsImFmdGVyQXBwbHlVcGRhdGVzIiwiZm4iLCJoYW5kbGVyIiwicmVtb3ZlU3RhdHVzSGFuZGxlciIsImFkZFN0YXR1c0hhbmRsZXIiLCJwZXJmb3JtRnVsbFJlbG9hZCIsImVyciIsInN0YWNrVHJhY2UiLCJzdGFjayIsInNwbGl0Iiwic2xpY2UiLCJqb2luIiwibWVzc2FnZSIsImhhZFJ1bnRpbWVFcnJvciIsIlJ1bnRpbWVFcnJvckhhbmRsZXIiLCJyZWxvYWQiLCJ0cnlBcHBseVVwZGF0ZXMiLCJvbkJlZm9yZVVwZGF0ZSIsIm9uSG90VXBkYXRlU3VjY2VzcyIsImhhbmRsZUFwcGx5VXBkYXRlcyIsImNvbnNvbGUiLCJ3YXJuIiwiQm9vbGVhbiIsIl9fTkVYVF9URVNUX01PREUiLCJzZWxmIiwiX19ORVhUX0hNUl9DQiIsImNoZWNrIiwidGhlbiIsImFwcGx5IiwicHJvY2Vzc01lc3NhZ2UiLCJvYmoiLCJyb3V0ZXIiLCJoYW5kbGVFcnJvcnMiLCJlcnJvcnMiLCJmb3JtYXR0ZWQiLCJkZWZhdWx0Iiwid2FybmluZ3MiLCJvbkJ1aWxkRXJyb3IiLCJpIiwiZXJyb3IiLCJoYW5kbGVIb3RVcGRhdGUiLCJvbkJlZm9yZUhvdFVwZGF0ZSIsIm9uU3VjY2Vzc2Z1bEhvdFVwZGF0ZSIsIndlYnBhY2tVcGRhdGVkTW9kdWxlcyIsImFjdGlvbiIsIkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUiIsIkJVSUxESU5HIiwibG9nIiwiRklOSVNIX0JVSUxESU5HIiwiQlVJTFQiLCJTWU5DIiwib25WZXJzaW9uSW5mbyIsInZlcnNpb25JbmZvIiwiaGFzRXJyb3JzIiwiZXJyb3JDb3VudCIsImNsaWVudElkIiwiaGFzV2FybmluZ3MiLCJ3YXJuaW5nQ291bnQiLCJmb3JtYXR0ZWRNZXNzYWdlcyIsIlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFUyIsInN0YXJ0VHJhbnNpdGlvbiIsImZhc3RSZWZyZXNoIiwiUkVMT0FEX1BBR0UiLCJSRU1PVkVEX1BBR0UiLCJBRERFRF9QQUdFIiwiU0VSVkVSX0VSUk9SIiwiZXJyb3JKU09OIiwicGFyc2UiLCJFcnJvciIsIkRFVl9QQUdFU19NQU5JRkVTVF9VUERBVEUiLCJwYXJhbSIsImFzc2V0UHJlZml4IiwiY2hpbGRyZW4iLCJzdGF0ZSIsImRpc3BhdGNoIiwidXNlUmVkdWNlciIsImVycm9yT3ZlcmxheVJlZHVjZXIiLCJJTklUSUFMX09WRVJMQVlfU1RBVEUiLCJ1c2VNZW1vIiwidHlwZSIsIkFDVElPTl9CVUlMRF9PSyIsIkFDVElPTl9CVUlMRF9FUlJPUiIsIkFDVElPTl9CRUZPUkVfUkVGUkVTSCIsIkFDVElPTl9SRUZSRVNIIiwiQUNUSU9OX1ZFUlNJT05fSU5GTyIsImhhbmRsZU9uVW5oYW5kbGVkRXJyb3IiLCJ1c2VDYWxsYmFjayIsImNvbXBvbmVudFN0YWNrIiwiX2NvbXBvbmVudFN0YWNrIiwiQUNUSU9OX1VOSEFORExFRF9FUlJPUiIsInJlYXNvbiIsImZyYW1lcyIsInBhcnNlU3RhY2siLCJjb21wb25lbnRTdGFja0ZyYW1lcyIsInBhcnNlQ29tcG9uZW50U3RhY2siLCJoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvbiIsIkFDVElPTl9VTkhBTkRMRURfUkVKRUNUSU9OIiwiaGFuZGxlT25SZWFjdEVycm9yIiwidXNlRXJyb3JIYW5kbGVyIiwid2ViU29ja2V0UmVmIiwidXNlV2Vic29ja2V0IiwidXNlV2Vic29ja2V0UGluZyIsInVzZVNlbmRNZXNzYWdlIiwicHJvY2Vzc1R1cmJvcGFja01lc3NhZ2UiLCJ1c2VUdXJib3BhY2siLCJ1c2VSb3V0ZXIiLCJ1c2VFZmZlY3QiLCJkYXRhIiwiaGFuZGxlZEJ5VHVyYm9wYWNrIiwiX2Vycl9zdGFjayIsIndlYnNvY2tldCIsImN1cnJlbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImpzeCIsIm9uUmVhY3RFcnJvciIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/hot-reloader-client.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/ReactDevOverlay.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/ReactDevOverlay.js ***! + \************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _erroroverlayreducer = __webpack_require__(/*! ./error-overlay-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js\");\nconst _ShadowPortal = __webpack_require__(/*! ./components/ShadowPortal */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js\");\nconst _BuildError = __webpack_require__(/*! ./container/BuildError */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js\");\nconst _Errors = __webpack_require__(/*! ./container/Errors */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js\");\nconst _RootLayoutError = __webpack_require__(/*! ./container/RootLayoutError */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RootLayoutError.js\");\nconst _parseStack = __webpack_require__(/*! ./helpers/parseStack */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js\");\nconst _Base = __webpack_require__(/*! ./styles/Base */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js\");\nconst _ComponentStyles = __webpack_require__(/*! ./styles/ComponentStyles */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js\");\nconst _CssReset = __webpack_require__(/*! ./styles/CssReset */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js\");\nclass ReactDevOverlay extends _react.PureComponent {\n static getDerivedStateFromError(error) {\n const e = error;\n const event = {\n type: _erroroverlayreducer.ACTION_UNHANDLED_ERROR,\n reason: error,\n frames: (0, _parseStack.parseStack)(e.stack)\n };\n const errorEvent = {\n id: 0,\n event\n };\n return {\n reactError: errorEvent\n };\n }\n componentDidCatch(componentErr) {\n this.props.onReactError(componentErr);\n }\n render() {\n const { state, children } = this.props;\n const { reactError } = this.state;\n const hasBuildError = state.buildError != null;\n const hasRuntimeErrors = Boolean(state.errors.length);\n const rootLayoutMissingTagsError = state.rootLayoutMissingTagsError;\n const isMounted = hasBuildError || hasRuntimeErrors || reactError || rootLayoutMissingTagsError;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n reactError ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"html\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"head\", {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"body\", {})\n ]\n }) : children,\n isMounted ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_ShadowPortal.ShadowPortal, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_CssReset.CssReset, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Base.Base, {}),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_ComponentStyles.ComponentStyles, {}),\n rootLayoutMissingTagsError ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_RootLayoutError.RootLayoutError, {\n missingTags: rootLayoutMissingTagsError.missingTags\n }) : hasBuildError ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_BuildError.BuildError, {\n message: state.buildError,\n versionInfo: state.versionInfo\n }) : reactError ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_Errors.Errors, {\n versionInfo: state.versionInfo,\n initialDisplayState: \"fullscreen\",\n errors: [\n reactError\n ]\n }) : hasRuntimeErrors ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_Errors.Errors, {\n initialDisplayState: \"minimized\",\n errors: state.errors,\n versionInfo: state.versionInfo\n }) : undefined\n ]\n }) : undefined\n ]\n });\n }\n constructor(...args){\n super(...args);\n this.state = {\n reactError: null\n };\n }\n}\nconst _default = ReactDevOverlay;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ReactDevOverlay.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvUmVhY3REZXZPdmVybGF5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyw0QkFBNEJDLG1CQUFPQSxDQUFDLGtJQUEwQztBQUNwRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILDBCQUEwQkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyxtRkFBTztBQUN4RSxNQUFNSSx1QkFBdUJKLG1CQUFPQSxDQUFDLG1KQUF5QjtBQUM5RCxNQUFNSyxnQkFBZ0JMLG1CQUFPQSxDQUFDLHVKQUEyQjtBQUN6RCxNQUFNTSxjQUFjTixtQkFBT0EsQ0FBQyxpSkFBd0I7QUFDcEQsTUFBTU8sVUFBVVAsbUJBQU9BLENBQUMseUlBQW9CO0FBQzVDLE1BQU1RLG1CQUFtQlIsbUJBQU9BLENBQUMsMkpBQTZCO0FBQzlELE1BQU1TLGNBQWNULG1CQUFPQSxDQUFDLDZJQUFzQjtBQUNsRCxNQUFNVSxRQUFRVixtQkFBT0EsQ0FBQywrSEFBZTtBQUNyQyxNQUFNVyxtQkFBbUJYLG1CQUFPQSxDQUFDLHFKQUEwQjtBQUMzRCxNQUFNWSxZQUFZWixtQkFBT0EsQ0FBQyx1SUFBbUI7QUFDN0MsTUFBTWEsd0JBQXdCWCxPQUFPWSxhQUFhO0lBQzlDLE9BQU9DLHlCQUF5QkMsS0FBSyxFQUFFO1FBQ25DLE1BQU1DLElBQUlEO1FBQ1YsTUFBTUUsUUFBUTtZQUNWQyxNQUFNZixxQkFBcUJnQixzQkFBc0I7WUFDakRDLFFBQVFMO1lBQ1JNLFFBQVEsQ0FBQyxHQUFHYixZQUFZYyxVQUFVLEVBQUVOLEVBQUVPLEtBQUs7UUFDL0M7UUFDQSxNQUFNQyxhQUFhO1lBQ2ZDLElBQUk7WUFDSlI7UUFDSjtRQUNBLE9BQU87WUFDSFMsWUFBWUY7UUFDaEI7SUFDSjtJQUNBRyxrQkFBa0JDLFlBQVksRUFBRTtRQUM1QixJQUFJLENBQUNDLEtBQUssQ0FBQ0MsWUFBWSxDQUFDRjtJQUM1QjtJQUNBRyxTQUFTO1FBQ0wsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQ0osS0FBSztRQUN0QyxNQUFNLEVBQUVILFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQ00sS0FBSztRQUNqQyxNQUFNRSxnQkFBZ0JGLE1BQU1HLFVBQVUsSUFBSTtRQUMxQyxNQUFNQyxtQkFBbUJDLFFBQVFMLE1BQU1NLE1BQU0sQ0FBQ0MsTUFBTTtRQUNwRCxNQUFNQyw2QkFBNkJSLE1BQU1RLDBCQUEwQjtRQUNuRSxNQUFNQyxZQUFZUCxpQkFBaUJFLG9CQUFvQlYsY0FBY2M7UUFDckUsT0FBcUIsV0FBSCxHQUFJLElBQUd4QyxZQUFZMEMsSUFBSSxFQUFFMUMsWUFBWTJDLFFBQVEsRUFBRTtZQUM3RFYsVUFBVTtnQkFDTlAsYUFBMkIsV0FBSCxHQUFJLElBQUcxQixZQUFZMEMsSUFBSSxFQUFFLFFBQVE7b0JBQ3JEVCxVQUFVO3dCQUNOLFdBQVcsR0FBSSxJQUFHakMsWUFBWTRDLEdBQUcsRUFBRSxRQUFRLENBQUM7d0JBQzVDLFdBQVcsR0FBSSxJQUFHNUMsWUFBWTRDLEdBQUcsRUFBRSxRQUFRLENBQUM7cUJBQy9DO2dCQUNMLEtBQUtYO2dCQUNMUSxZQUEwQixXQUFILEdBQUksSUFBR3pDLFlBQVkwQyxJQUFJLEVBQUV0QyxjQUFjeUMsWUFBWSxFQUFFO29CQUN4RVosVUFBVTt3QkFDTixXQUFXLEdBQUksSUFBR2pDLFlBQVk0QyxHQUFHLEVBQUVqQyxVQUFVbUMsUUFBUSxFQUFFLENBQUM7d0JBQ3hELFdBQVcsR0FBSSxJQUFHOUMsWUFBWTRDLEdBQUcsRUFBRW5DLE1BQU1zQyxJQUFJLEVBQUUsQ0FBQzt3QkFDaEQsV0FBVyxHQUFJLElBQUcvQyxZQUFZNEMsR0FBRyxFQUFFbEMsaUJBQWlCc0MsZUFBZSxFQUFFLENBQUM7d0JBQ3RFUiw2QkFBMkMsV0FBSCxHQUFJLElBQUd4QyxZQUFZNEMsR0FBRyxFQUFFckMsaUJBQWlCMEMsZUFBZSxFQUFFOzRCQUM5RkMsYUFBYVYsMkJBQTJCVSxXQUFXO3dCQUN2RCxLQUFLaEIsZ0JBQThCLFdBQUgsR0FBSSxJQUFHbEMsWUFBWTRDLEdBQUcsRUFBRXZDLFlBQVk4QyxVQUFVLEVBQUU7NEJBQzVFQyxTQUFTcEIsTUFBTUcsVUFBVTs0QkFDekJrQixhQUFhckIsTUFBTXFCLFdBQVc7d0JBQ2xDLEtBQUszQixhQUEyQixXQUFILEdBQUksSUFBRzFCLFlBQVk0QyxHQUFHLEVBQUV0QyxRQUFRZ0QsTUFBTSxFQUFFOzRCQUNqRUQsYUFBYXJCLE1BQU1xQixXQUFXOzRCQUM5QkUscUJBQXFCOzRCQUNyQmpCLFFBQVE7Z0NBQ0paOzZCQUNIO3dCQUNMLEtBQUtVLG1CQUFpQyxXQUFILEdBQUksSUFBR3BDLFlBQVk0QyxHQUFHLEVBQUV0QyxRQUFRZ0QsTUFBTSxFQUFFOzRCQUN2RUMscUJBQXFCOzRCQUNyQmpCLFFBQVFOLE1BQU1NLE1BQU07NEJBQ3BCZSxhQUFhckIsTUFBTXFCLFdBQVc7d0JBQ2xDLEtBQUtHO3FCQUNSO2dCQUNMLEtBQUtBO2FBQ1I7UUFDTDtJQUNKO0lBQ0FDLFlBQVksR0FBR0MsSUFBSSxDQUFDO1FBQ2hCLEtBQUssSUFBSUE7UUFDVCxJQUFJLENBQUMxQixLQUFLLEdBQUc7WUFDVE4sWUFBWTtRQUNoQjtJQUNKO0FBQ0o7QUFDQSxNQUFNN0IsV0FBV2U7QUFFakIsSUFBSSxDQUFDLE9BQU9uQixRQUFRa0UsT0FBTyxLQUFLLGNBQWUsT0FBT2xFLFFBQVFrRSxPQUFPLEtBQUssWUFBWWxFLFFBQVFrRSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9sRSxRQUFRa0UsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3JFLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWtFLE9BQU8sRUFBRSxjQUFjO1FBQUVqRSxPQUFPO0lBQUs7SUFDbkVILE9BQU9zRSxNQUFNLENBQUNwRSxRQUFRa0UsT0FBTyxFQUFFbEU7SUFDL0JxRSxPQUFPckUsT0FBTyxHQUFHQSxRQUFRa0UsT0FBTztBQUNsQyxFQUVBLDJDQUEyQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL1JlYWN0RGV2T3ZlcmxheS5qcz9kMmM3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2RlZmF1bHQ7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfZXJyb3JvdmVybGF5cmVkdWNlciA9IHJlcXVpcmUoXCIuL2Vycm9yLW92ZXJsYXktcmVkdWNlclwiKTtcbmNvbnN0IF9TaGFkb3dQb3J0YWwgPSByZXF1aXJlKFwiLi9jb21wb25lbnRzL1NoYWRvd1BvcnRhbFwiKTtcbmNvbnN0IF9CdWlsZEVycm9yID0gcmVxdWlyZShcIi4vY29udGFpbmVyL0J1aWxkRXJyb3JcIik7XG5jb25zdCBfRXJyb3JzID0gcmVxdWlyZShcIi4vY29udGFpbmVyL0Vycm9yc1wiKTtcbmNvbnN0IF9Sb290TGF5b3V0RXJyb3IgPSByZXF1aXJlKFwiLi9jb250YWluZXIvUm9vdExheW91dEVycm9yXCIpO1xuY29uc3QgX3BhcnNlU3RhY2sgPSByZXF1aXJlKFwiLi9oZWxwZXJzL3BhcnNlU3RhY2tcIik7XG5jb25zdCBfQmFzZSA9IHJlcXVpcmUoXCIuL3N0eWxlcy9CYXNlXCIpO1xuY29uc3QgX0NvbXBvbmVudFN0eWxlcyA9IHJlcXVpcmUoXCIuL3N0eWxlcy9Db21wb25lbnRTdHlsZXNcIik7XG5jb25zdCBfQ3NzUmVzZXQgPSByZXF1aXJlKFwiLi9zdHlsZXMvQ3NzUmVzZXRcIik7XG5jbGFzcyBSZWFjdERldk92ZXJsYXkgZXh0ZW5kcyBfcmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcikge1xuICAgICAgICBjb25zdCBlID0gZXJyb3I7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgICAgdHlwZTogX2Vycm9yb3ZlcmxheXJlZHVjZXIuQUNUSU9OX1VOSEFORExFRF9FUlJPUixcbiAgICAgICAgICAgIHJlYXNvbjogZXJyb3IsXG4gICAgICAgICAgICBmcmFtZXM6ICgwLCBfcGFyc2VTdGFjay5wYXJzZVN0YWNrKShlLnN0YWNrKVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0ge1xuICAgICAgICAgICAgaWQ6IDAsXG4gICAgICAgICAgICBldmVudFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVhY3RFcnJvcjogZXJyb3JFdmVudFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb21wb25lbnREaWRDYXRjaChjb21wb25lbnRFcnIpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vblJlYWN0RXJyb3IoY29tcG9uZW50RXJyKTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IHN0YXRlLCBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgeyByZWFjdEVycm9yIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCBoYXNCdWlsZEVycm9yID0gc3RhdGUuYnVpbGRFcnJvciAhPSBudWxsO1xuICAgICAgICBjb25zdCBoYXNSdW50aW1lRXJyb3JzID0gQm9vbGVhbihzdGF0ZS5lcnJvcnMubGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgcm9vdExheW91dE1pc3NpbmdUYWdzRXJyb3IgPSBzdGF0ZS5yb290TGF5b3V0TWlzc2luZ1RhZ3NFcnJvcjtcbiAgICAgICAgY29uc3QgaXNNb3VudGVkID0gaGFzQnVpbGRFcnJvciB8fCBoYXNSdW50aW1lRXJyb3JzIHx8IHJlYWN0RXJyb3IgfHwgcm9vdExheW91dE1pc3NpbmdUYWdzRXJyb3I7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICByZWFjdEVycm9yID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJodG1sXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoZWFkXCIsIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJib2R5XCIsIHt9KVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSkgOiBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICBpc01vdW50ZWQgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfU2hhZG93UG9ydGFsLlNoYWRvd1BvcnRhbCwge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfQ3NzUmVzZXQuQ3NzUmVzZXQsIHt9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0Jhc2UuQmFzZSwge30pLFxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfQ29tcG9uZW50U3R5bGVzLkNvbXBvbmVudFN0eWxlcywge30pLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdExheW91dE1pc3NpbmdUYWdzRXJyb3IgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9Sb290TGF5b3V0RXJyb3IuUm9vdExheW91dEVycm9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZ1RhZ3M6IHJvb3RMYXlvdXRNaXNzaW5nVGFnc0Vycm9yLm1pc3NpbmdUYWdzXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSA6IGhhc0J1aWxkRXJyb3IgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9CdWlsZEVycm9yLkJ1aWxkRXJyb3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBzdGF0ZS5idWlsZEVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25JbmZvOiBzdGF0ZS52ZXJzaW9uSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiByZWFjdEVycm9yID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfRXJyb3JzLkVycm9ycywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25JbmZvOiBzdGF0ZS52ZXJzaW9uSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsRGlzcGxheVN0YXRlOiBcImZ1bGxzY3JlZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3RFcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIDogaGFzUnVudGltZUVycm9ycyA/IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0Vycm9ycy5FcnJvcnMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsRGlzcGxheVN0YXRlOiBcIm1pbmltaXplZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yczogc3RhdGUuZXJyb3JzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb25JbmZvOiBzdGF0ZS52ZXJzaW9uSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pIDogdW5kZWZpbmVkXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICByZWFjdEVycm9yOiBudWxsXG4gICAgICAgIH07XG4gICAgfVxufVxuY29uc3QgX2RlZmF1bHQgPSBSZWFjdERldk92ZXJsYXk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlYWN0RGV2T3ZlcmxheS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2RlZmF1bHQiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9lcnJvcm92ZXJsYXlyZWR1Y2VyIiwiX1NoYWRvd1BvcnRhbCIsIl9CdWlsZEVycm9yIiwiX0Vycm9ycyIsIl9Sb290TGF5b3V0RXJyb3IiLCJfcGFyc2VTdGFjayIsIl9CYXNlIiwiX0NvbXBvbmVudFN0eWxlcyIsIl9Dc3NSZXNldCIsIlJlYWN0RGV2T3ZlcmxheSIsIlB1cmVDb21wb25lbnQiLCJnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IiLCJlcnJvciIsImUiLCJldmVudCIsInR5cGUiLCJBQ1RJT05fVU5IQU5ETEVEX0VSUk9SIiwicmVhc29uIiwiZnJhbWVzIiwicGFyc2VTdGFjayIsInN0YWNrIiwiZXJyb3JFdmVudCIsImlkIiwicmVhY3RFcnJvciIsImNvbXBvbmVudERpZENhdGNoIiwiY29tcG9uZW50RXJyIiwicHJvcHMiLCJvblJlYWN0RXJyb3IiLCJyZW5kZXIiLCJzdGF0ZSIsImNoaWxkcmVuIiwiaGFzQnVpbGRFcnJvciIsImJ1aWxkRXJyb3IiLCJoYXNSdW50aW1lRXJyb3JzIiwiQm9vbGVhbiIsImVycm9ycyIsImxlbmd0aCIsInJvb3RMYXlvdXRNaXNzaW5nVGFnc0Vycm9yIiwiaXNNb3VudGVkIiwianN4cyIsIkZyYWdtZW50IiwianN4IiwiU2hhZG93UG9ydGFsIiwiQ3NzUmVzZXQiLCJCYXNlIiwiQ29tcG9uZW50U3R5bGVzIiwiUm9vdExheW91dEVycm9yIiwibWlzc2luZ1RhZ3MiLCJCdWlsZEVycm9yIiwibWVzc2FnZSIsInZlcnNpb25JbmZvIiwiRXJyb3JzIiwiaW5pdGlhbERpc3BsYXlTdGF0ZSIsInVuZGVmaW5lZCIsImNvbnN0cnVjdG9yIiwiYXJncyIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/ReactDevOverlay.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js ***! + \***************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CodeFrame\", ({\n enumerable: true,\n get: function() {\n return CodeFrame;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _anser = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/anser */ \"(app-pages-browser)/./node_modules/next/dist/compiled/anser/index.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(app-pages-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js\"));\nconst _stackframe = __webpack_require__(/*! ../../helpers/stack-frame */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\");\nconst _useopenineditor = __webpack_require__(/*! ../../helpers/use-open-in-editor */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\");\nconst CodeFrame = function CodeFrame(param) {\n _s();\n let { stackFrame, codeFrame } = param;\n // Strip leading spaces out of the code frame:\n const formattedFrame = _react.useMemo(()=>{\n const lines = codeFrame.split(/\\r?\\n/g);\n const prefixLength = lines.map((line)=>/^>? +\\d+ +\\| [ ]+/.exec((0, _stripansi.default)(line)) === null ? null : /^>? +\\d+ +\\| ( *)/.exec((0, _stripansi.default)(line))).filter(Boolean).map((v)=>v.pop()).reduce((c, n)=>isNaN(c) ? n.length : Math.min(c, n.length), NaN);\n if (prefixLength > 1) {\n const p = \" \".repeat(prefixLength);\n return lines.map((line, a)=>~(a = line.indexOf(\"|\")) ? line.substring(0, a) + line.substring(a).replace(p, \"\") : line).join(\"\\n\");\n }\n return lines.join(\"\\n\");\n }, [\n codeFrame\n ]);\n const decoded = _react.useMemo(()=>{\n return _anser.default.ansiToJson(formattedFrame, {\n json: true,\n use_classes: true,\n remove_empty: true\n });\n }, [\n formattedFrame\n ]);\n const open = (0, _useopenineditor.useOpenInEditor)({\n file: stackFrame.file,\n lineNumber: stackFrame.lineNumber,\n column: stackFrame.column\n });\n // TODO: make the caret absolute\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-codeframe\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"p\", {\n role: \"link\",\n onClick: open,\n tabIndex: 1,\n title: \"Click to open in your editor\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"span\", {\n children: [\n (0, _stackframe.getFrameSource)(stackFrame),\n \" @ \",\n stackFrame.methodName\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n })\n ]\n })\n ]\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"pre\", {\n children: decoded.map((entry, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n style: {\n color: entry.fg ? \"var(--color-\" + entry.fg + \")\" : undefined,\n ...entry.decoration === \"bold\" ? {\n fontWeight: 800\n } : entry.decoration === \"italic\" ? {\n fontStyle: \"italic\"\n } : undefined\n },\n children: entry.content\n }, \"frame-\" + index))\n })\n ]\n });\n};\n_s(CodeFrame, \"4Gt+UceGaRqMOFv99GzJu8D2nx8=\");\n_c = CodeFrame;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CodeFrame.js.map\nvar _c;\n$RefreshReg$(_c, \"CodeFrame\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Db2RlRnJhbWUvQ29kZUZyYW1lLmpzIiwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQUEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDZDQUE0QztJQUN4Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsZ0lBQXlDO0FBQ2xGLE1BQU1DLDRCQUE0QkQsbUJBQU9BLENBQUMsa0lBQTBDO0FBQ3BGLE1BQU1FLGNBQWNGLG1CQUFPQSxDQUFDLHFHQUFtQjtBQUMvQyxNQUFNRyxTQUFTLFdBQVcsR0FBR0oseUJBQXlCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLHNHQUEwQjtBQUMxRixNQUFNSyxTQUFTLFdBQVcsR0FBR0osMEJBQTBCRyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLG1GQUFPO0FBQ3hFLE1BQU1NLGFBQWEsV0FBVyxHQUFHUCx5QkFBeUJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsZ0hBQStCO0FBQ25HLE1BQU1PLGNBQWNQLG1CQUFPQSxDQUFDLG1KQUEyQjtBQUN2RCxNQUFNUSxtQkFBbUJSLG1CQUFPQSxDQUFDLGlLQUFrQztBQUNuRSxNQUFNRixZQUFZLFNBQVNBLFVBQVVXLEtBQUs7O0lBQ3RDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUUsR0FBR0Y7SUFDaEMsOENBQThDO0lBQzlDLE1BQU1HLGlCQUFpQlAsT0FBT1EsT0FBTyxDQUFDO1FBQ2xDLE1BQU1DLFFBQVFILFVBQVVJLEtBQUssQ0FBQztRQUM5QixNQUFNQyxlQUFlRixNQUFNRyxHQUFHLENBQUMsQ0FBQ0MsT0FBTyxvQkFBb0JDLElBQUksQ0FBQyxDQUFDLEdBQUdiLFdBQVdjLE9BQU8sRUFBRUYsV0FBVyxPQUFPLE9BQU8sb0JBQW9CQyxJQUFJLENBQUMsQ0FBQyxHQUFHYixXQUFXYyxPQUFPLEVBQUVGLFFBQVFHLE1BQU0sQ0FBQ0MsU0FBU0wsR0FBRyxDQUFDLENBQUNNLElBQUlBLEVBQUVDLEdBQUcsSUFBSUMsTUFBTSxDQUFDLENBQUNDLEdBQUdDLElBQUlDLE1BQU1GLEtBQUtDLEVBQUVFLE1BQU0sR0FBR0MsS0FBS0MsR0FBRyxDQUFDTCxHQUFHQyxFQUFFRSxNQUFNLEdBQUdHO1FBQ3hRLElBQUloQixlQUFlLEdBQUc7WUFDbEIsTUFBTWlCLElBQUksSUFBSUMsTUFBTSxDQUFDbEI7WUFDckIsT0FBT0YsTUFBTUcsR0FBRyxDQUFDLENBQUNDLE1BQU1pQixJQUFJLENBQUVBLENBQUFBLElBQUlqQixLQUFLa0IsT0FBTyxDQUFDLElBQUcsSUFBS2xCLEtBQUttQixTQUFTLENBQUMsR0FBR0YsS0FBS2pCLEtBQUttQixTQUFTLENBQUNGLEdBQUdHLE9BQU8sQ0FBQ0wsR0FBRyxNQUFNZixNQUFNcUIsSUFBSSxDQUFDO1FBQ2hJO1FBQ0EsT0FBT3pCLE1BQU15QixJQUFJLENBQUM7SUFDdEIsR0FBRztRQUNDNUI7S0FDSDtJQUNELE1BQU02QixVQUFVbkMsT0FBT1EsT0FBTyxDQUFDO1FBQzNCLE9BQU9WLE9BQU9pQixPQUFPLENBQUNxQixVQUFVLENBQUM3QixnQkFBZ0I7WUFDN0M4QixNQUFNO1lBQ05DLGFBQWE7WUFDYkMsY0FBYztRQUNsQjtJQUNKLEdBQUc7UUFDQ2hDO0tBQ0g7SUFDRCxNQUFNaUMsT0FBTyxDQUFDLEdBQUdyQyxpQkFBaUJzQyxlQUFlLEVBQUU7UUFDL0NDLE1BQU1yQyxXQUFXcUMsSUFBSTtRQUNyQkMsWUFBWXRDLFdBQVdzQyxVQUFVO1FBQ2pDQyxRQUFRdkMsV0FBV3VDLE1BQU07SUFDN0I7SUFDQSxnQ0FBZ0M7SUFDaEMsT0FBcUIsV0FBSCxHQUFJLElBQUcvQyxZQUFZZ0QsSUFBSSxFQUFFLE9BQU87UUFDOUMseUJBQXlCO1FBQ3pCQyxVQUFVO1lBQ04sV0FBVyxHQUFJLElBQUdqRCxZQUFZa0QsR0FBRyxFQUFFLE9BQU87Z0JBQ3RDRCxVQUF3QixXQUFILEdBQUksSUFBR2pELFlBQVlnRCxJQUFJLEVBQUUsS0FBSztvQkFDL0NHLE1BQU07b0JBQ05DLFNBQVNUO29CQUNUVSxVQUFVO29CQUNWQyxPQUFPO29CQUNQTCxVQUFVO3dCQUNOLFdBQVcsR0FBSSxJQUFHakQsWUFBWWdELElBQUksRUFBRSxRQUFROzRCQUN4Q0MsVUFBVTtnQ0FDTCxJQUFHNUMsWUFBWWtELGNBQWMsRUFBRS9DO2dDQUNoQztnQ0FDQUEsV0FBV2dELFVBQVU7NkJBQ3hCO3dCQUNMO3dCQUNBLFdBQVcsR0FBSSxJQUFHeEQsWUFBWWdELElBQUksRUFBRSxPQUFPOzRCQUN2Q1MsT0FBTzs0QkFDUEMsU0FBUzs0QkFDVEMsTUFBTTs0QkFDTkMsUUFBUTs0QkFDUkMsYUFBYTs0QkFDYkMsZUFBZTs0QkFDZkMsZ0JBQWdCOzRCQUNoQmQsVUFBVTtnQ0FDTixXQUFXLEdBQUksSUFBR2pELFlBQVlrRCxHQUFHLEVBQUUsUUFBUTtvQ0FDdkNjLEdBQUc7Z0NBQ1A7Z0NBQ0EsV0FBVyxHQUFJLElBQUdoRSxZQUFZa0QsR0FBRyxFQUFFLFlBQVk7b0NBQzNDZSxRQUFRO2dDQUNaO2dDQUNBLFdBQVcsR0FBSSxJQUFHakUsWUFBWWtELEdBQUcsRUFBRSxRQUFRO29DQUN2Q2dCLElBQUk7b0NBQ0pDLElBQUk7b0NBQ0pDLElBQUk7b0NBQ0pDLElBQUk7Z0NBQ1I7NkJBQ0g7d0JBQ0w7cUJBQ0g7Z0JBQ0w7WUFDSjtZQUNBLFdBQVcsR0FBSSxJQUFHckUsWUFBWWtELEdBQUcsRUFBRSxPQUFPO2dCQUN0Q0QsVUFBVVgsUUFBUXZCLEdBQUcsQ0FBQyxDQUFDdUQsT0FBT0MsUUFBc0IsV0FBSCxHQUFJLElBQUd2RSxZQUFZa0QsR0FBRyxFQUFFLFFBQVE7d0JBQ3pFc0IsT0FBTzs0QkFDSEMsT0FBT0gsTUFBTUksRUFBRSxHQUFHLGlCQUFpQkosTUFBTUksRUFBRSxHQUFHLE1BQU1DOzRCQUNwRCxHQUFHTCxNQUFNTSxVQUFVLEtBQUssU0FBUztnQ0FDN0JDLFlBQVk7NEJBQ2hCLElBQUlQLE1BQU1NLFVBQVUsS0FBSyxXQUFXO2dDQUNoQ0UsV0FBVzs0QkFDZixJQUFJSCxTQUFTO3dCQUNqQjt3QkFDQTFCLFVBQVVxQixNQUFNUyxPQUFPO29CQUMzQixHQUFHLFdBQVdSO1lBQ3RCO1NBQ0g7SUFDTDtBQUNKO0dBdkZNM0U7S0FBQUE7QUF5Rk4sSUFBSSxDQUFDLE9BQU9KLFFBQVEwQixPQUFPLEtBQUssY0FBZSxPQUFPMUIsUUFBUTBCLE9BQU8sS0FBSyxZQUFZMUIsUUFBUTBCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzFCLFFBQVEwQixPQUFPLENBQUM4RCxVQUFVLEtBQUssYUFBYTtJQUNySzFGLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTBCLE9BQU8sRUFBRSxjQUFjO1FBQUV6QixPQUFPO0lBQUs7SUFDbkVILE9BQU8yRixNQUFNLENBQUN6RixRQUFRMEIsT0FBTyxFQUFFMUI7SUFDL0IwRixPQUFPMUYsT0FBTyxHQUFHQSxRQUFRMEIsT0FBTztBQUNsQyxFQUVBLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvQ29kZUZyYW1lL0NvZGVGcmFtZS5qcz9mNjIwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUZyYW1lXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDb2RlRnJhbWU7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfYW5zZXIgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvYW5zZXJcIikpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9zdHJpcGFuc2kgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaVwiKSk7XG5jb25zdCBfc3RhY2tmcmFtZSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL3N0YWNrLWZyYW1lXCIpO1xuY29uc3QgX3VzZW9wZW5pbmVkaXRvciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL3VzZS1vcGVuLWluLWVkaXRvclwiKTtcbmNvbnN0IENvZGVGcmFtZSA9IGZ1bmN0aW9uIENvZGVGcmFtZShwYXJhbSkge1xuICAgIGxldCB7IHN0YWNrRnJhbWUsIGNvZGVGcmFtZSB9ID0gcGFyYW07XG4gICAgLy8gU3RyaXAgbGVhZGluZyBzcGFjZXMgb3V0IG9mIHRoZSBjb2RlIGZyYW1lOlxuICAgIGNvbnN0IGZvcm1hdHRlZEZyYW1lID0gX3JlYWN0LnVzZU1lbW8oKCk9PntcbiAgICAgICAgY29uc3QgbGluZXMgPSBjb2RlRnJhbWUuc3BsaXQoL1xccj9cXG4vZyk7XG4gICAgICAgIGNvbnN0IHByZWZpeExlbmd0aCA9IGxpbmVzLm1hcCgobGluZSk9Pi9ePj8gK1xcZCsgK1xcfCBbIF0rLy5leGVjKCgwLCBfc3RyaXBhbnNpLmRlZmF1bHQpKGxpbmUpKSA9PT0gbnVsbCA/IG51bGwgOiAvXj4/ICtcXGQrICtcXHwgKCAqKS8uZXhlYygoMCwgX3N0cmlwYW5zaS5kZWZhdWx0KShsaW5lKSkpLmZpbHRlcihCb29sZWFuKS5tYXAoKHYpPT52LnBvcCgpKS5yZWR1Y2UoKGMsIG4pPT5pc05hTihjKSA/IG4ubGVuZ3RoIDogTWF0aC5taW4oYywgbi5sZW5ndGgpLCBOYU4pO1xuICAgICAgICBpZiAocHJlZml4TGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgcCA9IFwiIFwiLnJlcGVhdChwcmVmaXhMZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuIGxpbmVzLm1hcCgobGluZSwgYSk9Pn4oYSA9IGxpbmUuaW5kZXhPZihcInxcIikpID8gbGluZS5zdWJzdHJpbmcoMCwgYSkgKyBsaW5lLnN1YnN0cmluZyhhKS5yZXBsYWNlKHAsIFwiXCIpIDogbGluZSkuam9pbihcIlxcblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbiAgICB9LCBbXG4gICAgICAgIGNvZGVGcmFtZVxuICAgIF0pO1xuICAgIGNvbnN0IGRlY29kZWQgPSBfcmVhY3QudXNlTWVtbygoKT0+e1xuICAgICAgICByZXR1cm4gX2Fuc2VyLmRlZmF1bHQuYW5zaVRvSnNvbihmb3JtYXR0ZWRGcmFtZSwge1xuICAgICAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgICAgIHVzZV9jbGFzc2VzOiB0cnVlLFxuICAgICAgICAgICAgcmVtb3ZlX2VtcHR5OiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH0sIFtcbiAgICAgICAgZm9ybWF0dGVkRnJhbWVcbiAgICBdKTtcbiAgICBjb25zdCBvcGVuID0gKDAsIF91c2VvcGVuaW5lZGl0b3IudXNlT3BlbkluRWRpdG9yKSh7XG4gICAgICAgIGZpbGU6IHN0YWNrRnJhbWUuZmlsZSxcbiAgICAgICAgbGluZU51bWJlcjogc3RhY2tGcmFtZS5saW5lTnVtYmVyLFxuICAgICAgICBjb2x1bW46IHN0YWNrRnJhbWUuY29sdW1uXG4gICAgfSk7XG4gICAgLy8gVE9ETzogbWFrZSB0aGUgY2FyZXQgYWJzb2x1dGVcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkaXZcIiwge1xuICAgICAgICBcImRhdGEtbmV4dGpzLWNvZGVmcmFtZVwiOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwicFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHJvbGU6IFwibGlua1wiLFxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBvcGVuLFxuICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogMSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiQ2xpY2sgdG8gb3BlbiBpbiB5b3VyIGVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3N0YWNrZnJhbWUuZ2V0RnJhbWVTb3VyY2UpKHN0YWNrRnJhbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBAIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLm1ldGhvZE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiBcIk0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwb2x5bGluZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHM6IFwiMTUgMyAyMSAzIDIxIDlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImxpbmVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IFwiMTBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBcIjE0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogXCIyMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTI6IFwiM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwcmVcIiwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBkZWNvZGVkLm1hcCgoZW50cnksIGluZGV4KT0+LyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogZW50cnkuZmcgPyBcInZhcigtLWNvbG9yLVwiICsgZW50cnkuZmcgKyBcIilcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbnRyeS5kZWNvcmF0aW9uID09PSBcImJvbGRcIiA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogODAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6IGVudHJ5LmRlY29yYXRpb24gPT09IFwiaXRhbGljXCIgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTdHlsZTogXCJpdGFsaWNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZW50cnkuY29udGVudFxuICAgICAgICAgICAgICAgICAgICB9LCBcImZyYW1lLVwiICsgaW5kZXgpKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29kZUZyYW1lLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJDb2RlRnJhbWUiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsIl9qc3hydW50aW1lIiwiX2Fuc2VyIiwiXyIsIl9yZWFjdCIsIl9zdHJpcGFuc2kiLCJfc3RhY2tmcmFtZSIsIl91c2VvcGVuaW5lZGl0b3IiLCJwYXJhbSIsInN0YWNrRnJhbWUiLCJjb2RlRnJhbWUiLCJmb3JtYXR0ZWRGcmFtZSIsInVzZU1lbW8iLCJsaW5lcyIsInNwbGl0IiwicHJlZml4TGVuZ3RoIiwibWFwIiwibGluZSIsImV4ZWMiLCJkZWZhdWx0IiwiZmlsdGVyIiwiQm9vbGVhbiIsInYiLCJwb3AiLCJyZWR1Y2UiLCJjIiwibiIsImlzTmFOIiwibGVuZ3RoIiwiTWF0aCIsIm1pbiIsIk5hTiIsInAiLCJyZXBlYXQiLCJhIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInJlcGxhY2UiLCJqb2luIiwiZGVjb2RlZCIsImFuc2lUb0pzb24iLCJqc29uIiwidXNlX2NsYXNzZXMiLCJyZW1vdmVfZW1wdHkiLCJvcGVuIiwidXNlT3BlbkluRWRpdG9yIiwiZmlsZSIsImxpbmVOdW1iZXIiLCJjb2x1bW4iLCJqc3hzIiwiY2hpbGRyZW4iLCJqc3giLCJyb2xlIiwib25DbGljayIsInRhYkluZGV4IiwidGl0bGUiLCJnZXRGcmFtZVNvdXJjZSIsIm1ldGhvZE5hbWUiLCJ4bWxucyIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJkIiwicG9pbnRzIiwieDEiLCJ5MSIsIngyIiwieTIiLCJlbnRyeSIsImluZGV4Iiwic3R5bGUiLCJjb2xvciIsImZnIiwidW5kZWZpbmVkIiwiZGVjb3JhdGlvbiIsImZvbnRXZWlnaHQiLCJmb250U3R5bGUiLCJjb250ZW50IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js ***! + \***********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CodeFrame\", ({\n enumerable: true,\n get: function() {\n return _CodeFrame.CodeFrame;\n }\n}));\nconst _CodeFrame = __webpack_require__(/*! ./CodeFrame */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Db2RlRnJhbWUvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDZDQUE0QztJQUN4Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0MsV0FBV0MsU0FBUztJQUMvQjtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1ELGFBQWFFLG1CQUFPQSxDQUFDLGdKQUFhO0FBRXhDLElBQUksQ0FBQyxPQUFPTixRQUFRTyxPQUFPLEtBQUssY0FBZSxPQUFPUCxRQUFRTyxPQUFPLEtBQUssWUFBWVAsUUFBUU8sT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPUCxRQUFRTyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLVixPQUFPQyxjQUFjLENBQUNDLFFBQVFPLE9BQU8sRUFBRSxjQUFjO1FBQUVOLE9BQU87SUFBSztJQUNuRUgsT0FBT1csTUFBTSxDQUFDVCxRQUFRTyxPQUFPLEVBQUVQO0lBQy9CVSxPQUFPVixPQUFPLEdBQUdBLFFBQVFPLE9BQU87QUFDbEMsRUFFQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0NvZGVGcmFtZS9pbmRleC5qcz83MGY4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29kZUZyYW1lXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfQ29kZUZyYW1lLkNvZGVGcmFtZTtcbiAgICB9XG59KTtcbmNvbnN0IF9Db2RlRnJhbWUgPSByZXF1aXJlKFwiLi9Db2RlRnJhbWVcIik7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJfQ29kZUZyYW1lIiwiQ29kZUZyYW1lIiwicmVxdWlyZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js": +/*!************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js ***! + \************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-codeframe] {\\n overflow: auto;\\n border-radius: var(--size-gap-half);\\n background-color: var(--color-ansi-bg);\\n color: var(--color-ansi-fg);\\n }\\n [data-nextjs-codeframe]::selection,\\n [data-nextjs-codeframe] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n [data-nextjs-codeframe] * {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n\\n [data-nextjs-codeframe] > * {\\n margin: 0;\\n padding: calc(var(--size-gap) + var(--size-gap-half))\\n calc(var(--size-gap-double) + var(--size-gap-half));\\n }\\n [data-nextjs-codeframe] > div {\\n display: inline-block;\\n width: auto;\\n min-width: 100%;\\n border-bottom: 1px solid var(--color-ansi-bright-black);\\n }\\n [data-nextjs-codeframe] > div > p {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n cursor: pointer;\\n margin: 0;\\n }\\n [data-nextjs-codeframe] > div > p:hover {\\n text-decoration: underline dotted;\\n }\\n [data-nextjs-codeframe] div > p > svg {\\n width: auto;\\n height: 1em;\\n margin-left: 8px;\\n }\\n [data-nextjs-codeframe] div > pre {\\n overflow: hidden;\\n display: inline-block;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Db2RlRnJhbWUvc3R5bGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwwQ0FBeUM7SUFDckNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQ0FBaUNDLG1CQUFPQSxDQUFDLDRJQUErQztBQUM5RixNQUFNQyxnQkFBZ0JELG1CQUFPQSxDQUFDLHVKQUE2QjtBQUMzRCxTQUFTRTtJQUNMLE1BQU1DLE9BQU9KLCtCQUErQkssQ0FBQyxDQUFDO1FBQzFDO0tBQ0g7SUFDREYsa0JBQWtCO1FBQ2QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxNQUFNTCxTQUFTLENBQUMsR0FBR0csY0FBY0ksSUFBSSxFQUFFSDtBQUV2QyxJQUFJLENBQUMsT0FBT1IsUUFBUVksT0FBTyxLQUFLLGNBQWUsT0FBT1osUUFBUVksT0FBTyxLQUFLLFlBQVlaLFFBQVFZLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1osUUFBUVksT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2YsT0FBT0MsY0FBYyxDQUFDQyxRQUFRWSxPQUFPLEVBQUUsY0FBYztRQUFFWCxPQUFPO0lBQUs7SUFDbkVILE9BQU9nQixNQUFNLENBQUNkLFFBQVFZLE9BQU8sRUFBRVo7SUFDL0JlLE9BQU9mLE9BQU8sR0FBR0EsUUFBUVksT0FBTztBQUNsQyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvQ29kZUZyYW1lL3N0eWxlcy5qcz9kYmFiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3R5bGVzXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfVxufSk7XG5jb25zdCBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlXCIpO1xuY29uc3QgX25vb3B0ZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL25vb3AtdGVtcGxhdGVcIik7XG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QoKSB7XG4gICAgY29uc3QgZGF0YSA9IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZS5fKFtcbiAgICAgICAgXCJcXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdIHtcXG4gICAgb3ZlcmZsb3c6IGF1dG87XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXNpemUtZ2FwLWhhbGYpO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLWJnKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktZmcpO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV06OnNlbGVjdGlvbixcXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdICo6OnNlbGVjdGlvbiB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktc2VsZWN0aW9uKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdICoge1xcbiAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSA+ICoge1xcbiAgICBtYXJnaW46IDA7XFxuICAgIHBhZGRpbmc6IGNhbGModmFyKC0tc2l6ZS1nYXApICsgdmFyKC0tc2l6ZS1nYXAtaGFsZikpXFxuICAgICAgY2FsYyh2YXIoLS1zaXplLWdhcC1kb3VibGUpICsgdmFyKC0tc2l6ZS1nYXAtaGFsZikpO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gPiBkaXYge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtaW4td2lkdGg6IDEwMCU7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1hbnNpLWJyaWdodC1ibGFjayk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSA+IGRpdiA+IHAge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gPiBkaXYgPiBwOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gZGl2ID4gcCA+IHN2ZyB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBoZWlnaHQ6IDFlbTtcXG4gICAgbWFyZ2luLWxlZnQ6IDhweDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdIGRpdiA+IHByZSB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIH1cXG5cIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuY29uc3Qgc3R5bGVzID0gKDAsIF9ub29wdGVtcGxhdGUubm9vcCkoX3RlbXBsYXRlT2JqZWN0KCkpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHlsZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInN0eWxlcyIsIl90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSIsInJlcXVpcmUiLCJfbm9vcHRlbXBsYXRlIiwiX3RlbXBsYXRlT2JqZWN0IiwiZGF0YSIsIl8iLCJub29wIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js ***! + \*********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Dialog\", ({\n enumerable: true,\n get: function() {\n return Dialog;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _useonclickoutside = __webpack_require__(/*! ../../hooks/use-on-click-outside */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js\");\nconst Dialog = function Dialog(param) {\n _s();\n let { children, type, onClose, ...props } = param;\n const [dialog, setDialog] = _react.useState(null);\n const [role, setRole] = _react.useState(typeof document !== \"undefined\" && document.hasFocus() ? \"dialog\" : undefined);\n const onDialog = _react.useCallback((node)=>{\n setDialog(node);\n }, []);\n (0, _useonclickoutside.useOnClickOutside)(dialog, onClose);\n // Make HTMLElements with `role=link` accessible to be triggered by the\n // keyboard, i.e. [Enter].\n _react.useEffect(()=>{\n if (dialog == null) {\n return;\n }\n const root = dialog.getRootNode();\n // Always true, but we do this for TypeScript:\n if (!(root instanceof ShadowRoot)) {\n return;\n }\n const shadowRoot = root;\n function handler(e) {\n const el = shadowRoot.activeElement;\n if (e.key === \"Enter\" && el instanceof HTMLElement && el.getAttribute(\"role\") === \"link\") {\n e.preventDefault();\n e.stopPropagation();\n el.click();\n }\n }\n function handleFocus() {\n // safari will force itself as the active application when a background page triggers any sort of autofocus\n // this is a workaround to only set the dialog role if the document has focus\n setRole(document.hasFocus() ? \"dialog\" : undefined);\n }\n shadowRoot.addEventListener(\"keydown\", handler);\n window.addEventListener(\"focus\", handleFocus);\n window.addEventListener(\"blur\", handleFocus);\n return ()=>{\n shadowRoot.removeEventListener(\"keydown\", handler);\n window.removeEventListener(\"focus\", handleFocus);\n window.removeEventListener(\"blur\", handleFocus);\n };\n }, [\n dialog\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n ref: onDialog,\n \"data-nextjs-dialog\": true,\n tabIndex: -1,\n role: role,\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"],\n \"aria-modal\": \"true\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-banner\": true,\n className: \"banner-\" + type\n }),\n children\n ]\n });\n};\n_s(Dialog, \"2HYcMztUKT19xxjUDXr42PZl9rE=\");\n_c = Dialog;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Dialog.js.map\nvar _c;\n$RefreshReg$(_c, \"Dialog\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9EaWFsb2cvRGlhbG9nLmpzIiwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQUEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDBDQUF5QztJQUNyQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDRCQUE0QkMsbUJBQU9BLENBQUMsa0lBQTBDO0FBQ3BGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLHFHQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gsMEJBQTBCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLG1GQUFPO0FBQ3hFLE1BQU1JLHFCQUFxQkosbUJBQU9BLENBQUMsaUtBQWtDO0FBQ3JFLE1BQU1GLFNBQVMsU0FBU0EsT0FBT08sS0FBSzs7SUFDaEMsSUFBSSxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFFLEdBQUdDLE9BQU8sR0FBR0o7SUFDNUMsTUFBTSxDQUFDSyxRQUFRQyxVQUFVLEdBQUdULE9BQU9VLFFBQVEsQ0FBQztJQUM1QyxNQUFNLENBQUNDLE1BQU1DLFFBQVEsR0FBR1osT0FBT1UsUUFBUSxDQUFDLE9BQU9HLGFBQWEsZUFBZUEsU0FBU0MsUUFBUSxLQUFLLFdBQVdDO0lBQzVHLE1BQU1DLFdBQVdoQixPQUFPaUIsV0FBVyxDQUFDLENBQUNDO1FBQ2pDVCxVQUFVUztJQUNkLEdBQUcsRUFBRTtJQUNKLElBQUdoQixtQkFBbUJpQixpQkFBaUIsRUFBRVgsUUFBUUY7SUFDbEQsdUVBQXVFO0lBQ3ZFLDBCQUEwQjtJQUMxQk4sT0FBT29CLFNBQVMsQ0FBQztRQUNiLElBQUlaLFVBQVUsTUFBTTtZQUNoQjtRQUNKO1FBQ0EsTUFBTWEsT0FBT2IsT0FBT2MsV0FBVztRQUMvQiw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFFRCxDQUFBQSxnQkFBZ0JFLFVBQVMsR0FBSTtZQUMvQjtRQUNKO1FBQ0EsTUFBTUMsYUFBYUg7UUFDbkIsU0FBU0ksUUFBUUMsQ0FBQztZQUNkLE1BQU1DLEtBQUtILFdBQVdJLGFBQWE7WUFDbkMsSUFBSUYsRUFBRUcsR0FBRyxLQUFLLFdBQVdGLGNBQWNHLGVBQWVILEdBQUdJLFlBQVksQ0FBQyxZQUFZLFFBQVE7Z0JBQ3RGTCxFQUFFTSxjQUFjO2dCQUNoQk4sRUFBRU8sZUFBZTtnQkFDakJOLEdBQUdPLEtBQUs7WUFDWjtRQUNKO1FBQ0EsU0FBU0M7WUFDTCwyR0FBMkc7WUFDM0csNkVBQTZFO1lBQzdFdkIsUUFBUUMsU0FBU0MsUUFBUSxLQUFLLFdBQVdDO1FBQzdDO1FBQ0FTLFdBQVdZLGdCQUFnQixDQUFDLFdBQVdYO1FBQ3ZDWSxPQUFPRCxnQkFBZ0IsQ0FBQyxTQUFTRDtRQUNqQ0UsT0FBT0QsZ0JBQWdCLENBQUMsUUFBUUQ7UUFDaEMsT0FBTztZQUNIWCxXQUFXYyxtQkFBbUIsQ0FBQyxXQUFXYjtZQUMxQ1ksT0FBT0MsbUJBQW1CLENBQUMsU0FBU0g7WUFDcENFLE9BQU9DLG1CQUFtQixDQUFDLFFBQVFIO1FBQ3ZDO0lBQ0osR0FBRztRQUNDM0I7S0FDSDtJQUNELE9BQXFCLFdBQUgsR0FBSSxJQUFHVCxZQUFZd0MsSUFBSSxFQUFFLE9BQU87UUFDOUNDLEtBQUt4QjtRQUNMLHNCQUFzQjtRQUN0QnlCLFVBQVUsQ0FBQztRQUNYOUIsTUFBTUE7UUFDTixtQkFBbUJKLEtBQUssQ0FBQyxrQkFBa0I7UUFDM0Msb0JBQW9CQSxLQUFLLENBQUMsbUJBQW1CO1FBQzdDLGNBQWM7UUFDZEgsVUFBVTtZQUNOLFdBQVcsR0FBSSxJQUFHTCxZQUFZMkMsR0FBRyxFQUFFLE9BQU87Z0JBQ3RDLDZCQUE2QjtnQkFDN0JDLFdBQVcsWUFBWXRDO1lBQzNCO1lBQ0FEO1NBQ0g7SUFDTDtBQUNKO0dBNURNUjtLQUFBQTtBQThETixJQUFJLENBQUMsT0FBT0osUUFBUW9ELE9BQU8sS0FBSyxjQUFlLE9BQU9wRCxRQUFRb0QsT0FBTyxLQUFLLFlBQVlwRCxRQUFRb0QsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPcEQsUUFBUW9ELE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt2RCxPQUFPQyxjQUFjLENBQUNDLFFBQVFvRCxPQUFPLEVBQUUsY0FBYztRQUFFbkQsT0FBTztJQUFLO0lBQ25FSCxPQUFPd0QsTUFBTSxDQUFDdEQsUUFBUW9ELE9BQU8sRUFBRXBEO0lBQy9CdUQsT0FBT3ZELE9BQU8sR0FBR0EsUUFBUW9ELE9BQU87QUFDbEMsRUFFQSxrQ0FBa0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0RpYWxvZy9EaWFsb2cuanM/ZmQ5MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRpYWxvZ1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRGlhbG9nO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX3VzZW9uY2xpY2tvdXRzaWRlID0gcmVxdWlyZShcIi4uLy4uL2hvb2tzL3VzZS1vbi1jbGljay1vdXRzaWRlXCIpO1xuY29uc3QgRGlhbG9nID0gZnVuY3Rpb24gRGlhbG9nKHBhcmFtKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4sIHR5cGUsIG9uQ2xvc2UsIC4uLnByb3BzIH0gPSBwYXJhbTtcbiAgICBjb25zdCBbZGlhbG9nLCBzZXREaWFsb2ddID0gX3JlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtyb2xlLCBzZXRSb2xlXSA9IF9yZWFjdC51c2VTdGF0ZSh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuaGFzRm9jdXMoKSA/IFwiZGlhbG9nXCIgOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IG9uRGlhbG9nID0gX3JlYWN0LnVzZUNhbGxiYWNrKChub2RlKT0+e1xuICAgICAgICBzZXREaWFsb2cobm9kZSk7XG4gICAgfSwgW10pO1xuICAgICgwLCBfdXNlb25jbGlja291dHNpZGUudXNlT25DbGlja091dHNpZGUpKGRpYWxvZywgb25DbG9zZSk7XG4gICAgLy8gTWFrZSBIVE1MRWxlbWVudHMgd2l0aCBgcm9sZT1saW5rYCBhY2Nlc3NpYmxlIHRvIGJlIHRyaWdnZXJlZCBieSB0aGVcbiAgICAvLyBrZXlib2FyZCwgaS5lLiBbRW50ZXJdLlxuICAgIF9yZWFjdC51c2VFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKGRpYWxvZyA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm9vdCA9IGRpYWxvZy5nZXRSb290Tm9kZSgpO1xuICAgICAgICAvLyBBbHdheXMgdHJ1ZSwgYnV0IHdlIGRvIHRoaXMgZm9yIFR5cGVTY3JpcHQ6XG4gICAgICAgIGlmICghKHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSByb290O1xuICAgICAgICBmdW5jdGlvbiBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsID0gc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIgJiYgZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpID09PSBcImxpbmtcIikge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGVsLmNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgICAgICAvLyBzYWZhcmkgd2lsbCBmb3JjZSBpdHNlbGYgYXMgdGhlIGFjdGl2ZSBhcHBsaWNhdGlvbiB3aGVuIGEgYmFja2dyb3VuZCBwYWdlIHRyaWdnZXJzIGFueSBzb3J0IG9mIGF1dG9mb2N1c1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBhIHdvcmthcm91bmQgdG8gb25seSBzZXQgdGhlIGRpYWxvZyByb2xlIGlmIHRoZSBkb2N1bWVudCBoYXMgZm9jdXNcbiAgICAgICAgICAgIHNldFJvbGUoZG9jdW1lbnQuaGFzRm9jdXMoKSA/IFwiZGlhbG9nXCIgOiB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHNoYWRvd1Jvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlcik7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgaGFuZGxlRm9jdXMpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgaGFuZGxlRm9jdXMpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIHNoYWRvd1Jvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlcik7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGhhbmRsZUZvY3VzKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLCBoYW5kbGVGb2N1cyk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBkaWFsb2dcbiAgICBdKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkaXZcIiwge1xuICAgICAgICByZWY6IG9uRGlhbG9nLFxuICAgICAgICBcImRhdGEtbmV4dGpzLWRpYWxvZ1wiOiB0cnVlLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIHJvbGU6IHJvbGUsXG4gICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogcHJvcHNbXCJhcmlhLWRlc2NyaWJlZGJ5XCJdLFxuICAgICAgICBcImFyaWEtbW9kYWxcIjogXCJ0cnVlXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBcImRhdGEtbmV4dGpzLWRpYWxvZy1iYW5uZXJcIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYmFubmVyLVwiICsgdHlwZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjaGlsZHJlblxuICAgICAgICBdXG4gICAgfSk7XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1EaWFsb2cuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkRpYWxvZyIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX3VzZW9uY2xpY2tvdXRzaWRlIiwicGFyYW0iLCJjaGlsZHJlbiIsInR5cGUiLCJvbkNsb3NlIiwicHJvcHMiLCJkaWFsb2ciLCJzZXREaWFsb2ciLCJ1c2VTdGF0ZSIsInJvbGUiLCJzZXRSb2xlIiwiZG9jdW1lbnQiLCJoYXNGb2N1cyIsInVuZGVmaW5lZCIsIm9uRGlhbG9nIiwidXNlQ2FsbGJhY2siLCJub2RlIiwidXNlT25DbGlja091dHNpZGUiLCJ1c2VFZmZlY3QiLCJyb290IiwiZ2V0Um9vdE5vZGUiLCJTaGFkb3dSb290Iiwic2hhZG93Um9vdCIsImhhbmRsZXIiLCJlIiwiZWwiLCJhY3RpdmVFbGVtZW50Iiwia2V5IiwiSFRNTEVsZW1lbnQiLCJnZXRBdHRyaWJ1dGUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImNsaWNrIiwiaGFuZGxlRm9jdXMiLCJhZGRFdmVudExpc3RlbmVyIiwid2luZG93IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImpzeHMiLCJyZWYiLCJ0YWJJbmRleCIsImpzeCIsImNsYXNzTmFtZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js": +/*!*************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js ***! + \*************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"DialogBody\", ({\n enumerable: true,\n get: function() {\n return DialogBody;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst DialogBody = function DialogBody(param) {\n let { children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-body\": true,\n className: className,\n children: children\n });\n};\n_c = DialogBody;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=DialogBody.js.map\nvar _c;\n$RefreshReg$(_c, \"DialogBody\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9EaWFsb2cvRGlhbG9nQm9keS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsOENBQTZDO0lBQ3pDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsbUZBQU87QUFDeEUsTUFBTUYsYUFBYSxTQUFTQSxXQUFXTSxLQUFLO0lBQ3hDLElBQUksRUFBRUMsUUFBUSxFQUFFQyxTQUFTLEVBQUUsR0FBR0Y7SUFDOUIsT0FBcUIsV0FBSCxHQUFJLElBQUdILFlBQVlNLEdBQUcsRUFBRSxPQUFPO1FBQzdDLDJCQUEyQjtRQUMzQkQsV0FBV0E7UUFDWEQsVUFBVUE7SUFDZDtBQUNKO0tBUE1QO0FBU04sSUFBSSxDQUFDLE9BQU9KLFFBQVFjLE9BQU8sS0FBSyxjQUFlLE9BQU9kLFFBQVFjLE9BQU8sS0FBSyxZQUFZZCxRQUFRYyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9kLFFBQVFjLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktqQixPQUFPQyxjQUFjLENBQUNDLFFBQVFjLE9BQU8sRUFBRSxjQUFjO1FBQUViLE9BQU87SUFBSztJQUNuRUgsT0FBT2tCLE1BQU0sQ0FBQ2hCLFFBQVFjLE9BQU8sRUFBRWQ7SUFDL0JpQixPQUFPakIsT0FBTyxHQUFHQSxRQUFRYyxPQUFPO0FBQ2xDLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9EaWFsb2cvRGlhbG9nQm9keS5qcz9hMTBhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGlhbG9nQm9keVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRGlhbG9nQm9keTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IERpYWxvZ0JvZHkgPSBmdW5jdGlvbiBEaWFsb2dCb2R5KHBhcmFtKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4sIGNsYXNzTmFtZSB9ID0gcGFyYW07XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJkaXZcIiwge1xuICAgICAgICBcImRhdGEtbmV4dGpzLWRpYWxvZy1ib2R5XCI6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURpYWxvZ0JvZHkuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkRpYWxvZ0JvZHkiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsInBhcmFtIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJqc3giLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js": +/*!****************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js ***! + \****************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"DialogContent\", ({\n enumerable: true,\n get: function() {\n return DialogContent;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst DialogContent = function DialogContent(param) {\n let { children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-content\": true,\n className: className,\n children: children\n });\n};\n_c = DialogContent;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=DialogContent.js.map\nvar _c;\n$RefreshReg$(_c, \"DialogContent\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9EaWFsb2cvRGlhbG9nQ29udGVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsaURBQWdEO0lBQzVDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsbUZBQU87QUFDeEUsTUFBTUYsZ0JBQWdCLFNBQVNBLGNBQWNNLEtBQUs7SUFDOUMsSUFBSSxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBRSxHQUFHRjtJQUM5QixPQUFxQixXQUFILEdBQUksSUFBR0gsWUFBWU0sR0FBRyxFQUFFLE9BQU87UUFDN0MsOEJBQThCO1FBQzlCRCxXQUFXQTtRQUNYRCxVQUFVQTtJQUNkO0FBQ0o7S0FQTVA7QUFTTixJQUFJLENBQUMsT0FBT0osUUFBUWMsT0FBTyxLQUFLLGNBQWUsT0FBT2QsUUFBUWMsT0FBTyxLQUFLLFlBQVlkLFFBQVFjLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2QsUUFBUWMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2pCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWMsT0FBTyxFQUFFLGNBQWM7UUFBRWIsT0FBTztJQUFLO0lBQ25FSCxPQUFPa0IsTUFBTSxDQUFDaEIsUUFBUWMsT0FBTyxFQUFFZDtJQUMvQmlCLE9BQU9qQixPQUFPLEdBQUdBLFFBQVFjLE9BQU87QUFDbEMsRUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0RpYWxvZy9EaWFsb2dDb250ZW50LmpzPzk1MzYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEaWFsb2dDb250ZW50XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBEaWFsb2dDb250ZW50O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgRGlhbG9nQ29udGVudCA9IGZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQocGFyYW0pIHtcbiAgICBsZXQgeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH0gPSBwYXJhbTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImRpdlwiLCB7XG4gICAgICAgIFwiZGF0YS1uZXh0anMtZGlhbG9nLWNvbnRlbnRcIjogdHJ1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RGlhbG9nQ29udGVudC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiRGlhbG9nQ29udGVudCIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwicGFyYW0iLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsImpzeCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js ***! + \***************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"DialogHeader\", ({\n enumerable: true,\n get: function() {\n return DialogHeader;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst DialogHeader = function DialogHeader(param) {\n let { children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-header\": true,\n className: className,\n children: children\n });\n};\n_c = DialogHeader;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=DialogHeader.js.map\nvar _c;\n$RefreshReg$(_c, \"DialogHeader\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9EaWFsb2cvRGlhbG9nSGVhZGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxnREFBK0M7SUFDM0NJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyw0QkFBNEJDLG1CQUFPQSxDQUFDLGtJQUEwQztBQUNwRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILDBCQUEwQkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyxtRkFBTztBQUN4RSxNQUFNRixlQUFlLFNBQVNBLGFBQWFNLEtBQUs7SUFDNUMsSUFBSSxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBRSxHQUFHRjtJQUM5QixPQUFxQixXQUFILEdBQUksSUFBR0gsWUFBWU0sR0FBRyxFQUFFLE9BQU87UUFDN0MsNkJBQTZCO1FBQzdCRCxXQUFXQTtRQUNYRCxVQUFVQTtJQUNkO0FBQ0o7S0FQTVA7QUFTTixJQUFJLENBQUMsT0FBT0osUUFBUWMsT0FBTyxLQUFLLGNBQWUsT0FBT2QsUUFBUWMsT0FBTyxLQUFLLFlBQVlkLFFBQVFjLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2QsUUFBUWMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2pCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWMsT0FBTyxFQUFFLGNBQWM7UUFBRWIsT0FBTztJQUFLO0lBQ25FSCxPQUFPa0IsTUFBTSxDQUFDaEIsUUFBUWMsT0FBTyxFQUFFZDtJQUMvQmlCLE9BQU9qQixPQUFPLEdBQUdBLFFBQVFjLE9BQU87QUFDbEMsRUFFQSx3Q0FBd0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL0RpYWxvZy9EaWFsb2dIZWFkZXIuanM/ZmJlZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkRpYWxvZ0hlYWRlclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRGlhbG9nSGVhZGVyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgRGlhbG9nSGVhZGVyID0gZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHBhcmFtKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4sIGNsYXNzTmFtZSB9ID0gcGFyYW07XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJkaXZcIiwge1xuICAgICAgICBcImRhdGEtbmV4dGpzLWRpYWxvZy1oZWFkZXJcIjogdHJ1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RGlhbG9nSGVhZGVyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJEaWFsb2dIZWFkZXIiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsInBhcmFtIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJqc3giLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js": +/*!********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js ***! + \********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Dialog: function() {\n return _Dialog.Dialog;\n },\n DialogBody: function() {\n return _DialogBody.DialogBody;\n },\n DialogContent: function() {\n return _DialogContent.DialogContent;\n },\n DialogHeader: function() {\n return _DialogHeader.DialogHeader;\n },\n styles: function() {\n return _styles.styles;\n }\n});\nconst _Dialog = __webpack_require__(/*! ./Dialog */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js\");\nconst _DialogBody = __webpack_require__(/*! ./DialogBody */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js\");\nconst _DialogContent = __webpack_require__(/*! ./DialogContent */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js\");\nconst _DialogHeader = __webpack_require__(/*! ./DialogHeader */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js\");\nconst _styles = __webpack_require__(/*! ./styles */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9EaWFsb2cvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FNTjtBQUNBLFNBQVNNLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlaLE9BQU9DLGNBQWMsQ0FBQ1UsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRUixTQUFTO0lBQ2JHLFFBQVE7UUFDSixPQUFPVyxRQUFRWCxNQUFNO0lBQ3pCO0lBQ0FDLFlBQVk7UUFDUixPQUFPVyxZQUFZWCxVQUFVO0lBQ2pDO0lBQ0FDLGVBQWU7UUFDWCxPQUFPVyxlQUFlWCxhQUFhO0lBQ3ZDO0lBQ0FDLGNBQWM7UUFDVixPQUFPVyxjQUFjWCxZQUFZO0lBQ3JDO0lBQ0FDLFFBQVE7UUFDSixPQUFPVyxRQUFRWCxNQUFNO0lBQ3pCO0FBQ0o7QUFDQSxNQUFNTyxVQUFVSyxtQkFBT0EsQ0FBQyx1SUFBVTtBQUNsQyxNQUFNSixjQUFjSSxtQkFBT0EsQ0FBQywrSUFBYztBQUMxQyxNQUFNSCxpQkFBaUJHLG1CQUFPQSxDQUFDLHFKQUFpQjtBQUNoRCxNQUFNRixnQkFBZ0JFLG1CQUFPQSxDQUFDLG1KQUFnQjtBQUM5QyxNQUFNRCxVQUFVQyxtQkFBT0EsQ0FBQyx1SUFBVTtBQUVsQyxJQUFJLENBQUMsT0FBT25CLFFBQVFvQixPQUFPLEtBQUssY0FBZSxPQUFPcEIsUUFBUW9CLE9BQU8sS0FBSyxZQUFZcEIsUUFBUW9CLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3BCLFFBQVFvQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdkIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRb0IsT0FBTyxFQUFFLGNBQWM7UUFBRW5CLE9BQU87SUFBSztJQUNuRUgsT0FBT3dCLE1BQU0sQ0FBQ3RCLFFBQVFvQixPQUFPLEVBQUVwQjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRb0IsT0FBTztBQUNsQyxFQUVBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL2luZGV4LmpzPzIzOTMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBEaWFsb2c6IG51bGwsXG4gICAgRGlhbG9nQm9keTogbnVsbCxcbiAgICBEaWFsb2dDb250ZW50OiBudWxsLFxuICAgIERpYWxvZ0hlYWRlcjogbnVsbCxcbiAgICBzdHlsZXM6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgRGlhbG9nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9EaWFsb2cuRGlhbG9nO1xuICAgIH0sXG4gICAgRGlhbG9nQm9keTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfRGlhbG9nQm9keS5EaWFsb2dCb2R5O1xuICAgIH0sXG4gICAgRGlhbG9nQ29udGVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfRGlhbG9nQ29udGVudC5EaWFsb2dDb250ZW50O1xuICAgIH0sXG4gICAgRGlhbG9nSGVhZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9EaWFsb2dIZWFkZXIuRGlhbG9nSGVhZGVyO1xuICAgIH0sXG4gICAgc3R5bGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdHlsZXMuc3R5bGVzO1xuICAgIH1cbn0pO1xuY29uc3QgX0RpYWxvZyA9IHJlcXVpcmUoXCIuL0RpYWxvZ1wiKTtcbmNvbnN0IF9EaWFsb2dCb2R5ID0gcmVxdWlyZShcIi4vRGlhbG9nQm9keVwiKTtcbmNvbnN0IF9EaWFsb2dDb250ZW50ID0gcmVxdWlyZShcIi4vRGlhbG9nQ29udGVudFwiKTtcbmNvbnN0IF9EaWFsb2dIZWFkZXIgPSByZXF1aXJlKFwiLi9EaWFsb2dIZWFkZXJcIik7XG5jb25zdCBfc3R5bGVzID0gcmVxdWlyZShcIi4vc3R5bGVzXCIpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJEaWFsb2ciLCJEaWFsb2dCb2R5IiwiRGlhbG9nQ29udGVudCIsIkRpYWxvZ0hlYWRlciIsInN0eWxlcyIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9EaWFsb2ciLCJfRGlhbG9nQm9keSIsIl9EaWFsb2dDb250ZW50IiwiX0RpYWxvZ0hlYWRlciIsIl9zdHlsZXMiLCJyZXF1aXJlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js ***! + \*********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-dialog] {\\n display: flex;\\n flex-direction: column;\\n width: 100%;\\n margin-right: auto;\\n margin-left: auto;\\n outline: none;\\n background: white;\\n border-radius: var(--size-gap);\\n box-shadow: 0 var(--size-gap-half) var(--size-gap-double)\\n rgba(0, 0, 0, 0.25);\\n max-height: calc(100% - 56px);\\n overflow-y: hidden;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n max-height: calc(100% - 15px);\\n }\\n }\\n\\n @media (min-width: 576px) {\\n [data-nextjs-dialog] {\\n max-width: 540px;\\n box-shadow: 0 var(--size-gap) var(--size-gap-quad) rgba(0, 0, 0, 0.25);\\n }\\n }\\n\\n @media (min-width: 768px) {\\n [data-nextjs-dialog] {\\n max-width: 720px;\\n }\\n }\\n\\n @media (min-width: 992px) {\\n [data-nextjs-dialog] {\\n max-width: 960px;\\n }\\n }\\n\\n [data-nextjs-dialog-banner] {\\n position: relative;\\n }\\n [data-nextjs-dialog-banner].banner-warning {\\n border-color: var(--color-ansi-yellow);\\n }\\n [data-nextjs-dialog-banner].banner-error {\\n border-color: var(--color-ansi-red);\\n }\\n\\n [data-nextjs-dialog-banner]::after {\\n z-index: 2;\\n content: '';\\n position: absolute;\\n top: 0;\\n right: 0;\\n width: 100%;\\n /* banner width: */\\n border-top-width: var(--size-gap-half);\\n border-bottom-width: 0;\\n border-top-style: solid;\\n border-bottom-style: solid;\\n border-top-color: inherit;\\n border-bottom-color: transparent;\\n }\\n\\n [data-nextjs-dialog-content] {\\n overflow-y: auto;\\n border: none;\\n margin: 0;\\n /* calc(padding + banner width offset) */\\n padding: calc(var(--size-gap-double) + var(--size-gap-half))\\n var(--size-gap-double);\\n height: 100%;\\n display: flex;\\n flex-direction: column;\\n }\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-header] {\\n flex-shrink: 0;\\n margin-bottom: var(--size-gap-double);\\n }\\n [data-nextjs-dialog-content] > [data-nextjs-dialog-body] {\\n position: relative;\\n flex: 1 1 auto;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9EaWFsb2cvc3R5bGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwwQ0FBeUM7SUFDckNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQ0FBaUNDLG1CQUFPQSxDQUFDLDRJQUErQztBQUM5RixNQUFNQyxnQkFBZ0JELG1CQUFPQSxDQUFDLHVKQUE2QjtBQUMzRCxTQUFTRTtJQUNMLE1BQU1DLE9BQU9KLCtCQUErQkssQ0FBQyxDQUFDO1FBQzFDO0tBQ0g7SUFDREYsa0JBQWtCO1FBQ2QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxNQUFNTCxTQUFTLENBQUMsR0FBR0csY0FBY0ksSUFBSSxFQUFFSDtBQUV2QyxJQUFJLENBQUMsT0FBT1IsUUFBUVksT0FBTyxLQUFLLGNBQWUsT0FBT1osUUFBUVksT0FBTyxLQUFLLFlBQVlaLFFBQVFZLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1osUUFBUVksT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2YsT0FBT0MsY0FBYyxDQUFDQyxRQUFRWSxPQUFPLEVBQUUsY0FBYztRQUFFWCxPQUFPO0lBQUs7SUFDbkVILE9BQU9nQixNQUFNLENBQUNkLFFBQVFZLE9BQU8sRUFBRVo7SUFDL0JlLE9BQU9mLE9BQU8sR0FBR0EsUUFBUVksT0FBTztBQUNsQyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvRGlhbG9nL3N0eWxlcy5qcz82OGI5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3R5bGVzXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfVxufSk7XG5jb25zdCBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlXCIpO1xuY29uc3QgX25vb3B0ZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL25vb3AtdGVtcGxhdGVcIik7XG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QoKSB7XG4gICAgY29uc3QgZGF0YSA9IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZS5fKFtcbiAgICAgICAgXCJcXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ddIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIG1hcmdpbi1yaWdodDogYXV0bztcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICAgIG91dGxpbmU6IG5vbmU7XFxuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zaXplLWdhcCk7XFxuICAgIGJveC1zaGFkb3c6IDAgdmFyKC0tc2l6ZS1nYXAtaGFsZikgdmFyKC0tc2l6ZS1nYXAtZG91YmxlKVxcbiAgICAgIHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDU2cHgpO1xcbiAgICBvdmVyZmxvdy15OiBoaWRkZW47XFxuICB9XFxuXFxuICBAbWVkaWEgKG1heC1oZWlnaHQ6IDgxMnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV0ge1xcbiAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDE1cHgpO1xcbiAgICB9XFxuICB9XFxuXFxuICBAbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZ10ge1xcbiAgICAgIG1heC13aWR0aDogNTQwcHg7XFxuICAgICAgYm94LXNoYWRvdzogMCB2YXIoLS1zaXplLWdhcCkgdmFyKC0tc2l6ZS1nYXAtcXVhZCkgcmdiYSgwLCAwLCAwLCAwLjI1KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ddIHtcXG4gICAgICBtYXgtd2lkdGg6IDcyMHB4O1xcbiAgICB9XFxuICB9XFxuXFxuICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZ10ge1xcbiAgICAgIG1heC13aWR0aDogOTYwcHg7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctYmFubmVyXSB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctYmFubmVyXS5iYW5uZXItd2FybmluZyB7XFxuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS15ZWxsb3cpO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYW5uZXJdLmJhbm5lci1lcnJvciB7XFxuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYW5uZXJdOjphZnRlciB7XFxuICAgIHotaW5kZXg6IDI7XFxuICAgIGNvbnRlbnQ6ICcnO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRvcDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICAvKiBiYW5uZXIgd2lkdGg6ICovXFxuICAgIGJvcmRlci10b3Atd2lkdGg6IHZhcigtLXNpemUtZ2FwLWhhbGYpO1xcbiAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xcbiAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDtcXG4gICAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7XFxuICAgIGJvcmRlci10b3AtY29sb3I6IGluaGVyaXQ7XFxuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XSB7XFxuICAgIG92ZXJmbG93LXk6IGF1dG87XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICAvKiBjYWxjKHBhZGRpbmcgKyBiYW5uZXIgd2lkdGggb2Zmc2V0KSAqL1xcbiAgICBwYWRkaW5nOiBjYWxjKHZhcigtLXNpemUtZ2FwLWRvdWJsZSkgKyB2YXIoLS1zaXplLWdhcC1oYWxmKSlcXG4gICAgICB2YXIoLS1zaXplLWdhcC1kb3VibGUpO1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICB9XFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWNvbnRlbnRdID4gW2RhdGEtbmV4dGpzLWRpYWxvZy1oZWFkZXJdIHtcXG4gICAgZmxleC1zaHJpbms6IDA7XFxuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUtZ2FwLWRvdWJsZSk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWNvbnRlbnRdID4gW2RhdGEtbmV4dGpzLWRpYWxvZy1ib2R5XSB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgZmxleDogMSAxIGF1dG87XFxuICB9XFxuXCJcbiAgICBdKTtcbiAgICBfdGVtcGxhdGVPYmplY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcbiAgICByZXR1cm4gZGF0YTtcbn1cbmNvbnN0IHN0eWxlcyA9ICgwLCBfbm9vcHRlbXBsYXRlLm5vb3ApKF90ZW1wbGF0ZU9iamVjdCgpKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3R5bGVzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJzdHlsZXMiLCJfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UiLCJyZXF1aXJlIiwiX25vb3B0ZW1wbGF0ZSIsIl90ZW1wbGF0ZU9iamVjdCIsImRhdGEiLCJfIiwibm9vcCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js": +/*!***************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js ***! + \***************************************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"LeftRightDialogHeader\", ({\n enumerable: true,\n get: function() {\n return LeftRightDialogHeader;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _CloseIcon = __webpack_require__(/*! ../../icons/CloseIcon */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js\");\nconst LeftRightDialogHeader = function LeftRightDialogHeader(param) {\n _s();\n let { children, className, previous, next, close } = param;\n const buttonLeft = _react.useRef(null);\n const buttonRight = _react.useRef(null);\n const buttonClose = _react.useRef(null);\n const [nav, setNav] = _react.useState(null);\n const onNav = _react.useCallback((el)=>{\n setNav(el);\n }, []);\n _react.useEffect(()=>{\n if (nav == null) {\n return;\n }\n const root = nav.getRootNode();\n const d = self.document;\n function handler(e) {\n if (e.key === \"ArrowLeft\") {\n e.stopPropagation();\n if (buttonLeft.current) {\n buttonLeft.current.focus();\n }\n previous && previous();\n } else if (e.key === \"ArrowRight\") {\n e.stopPropagation();\n if (buttonRight.current) {\n buttonRight.current.focus();\n }\n next && next();\n } else if (e.key === \"Escape\") {\n e.stopPropagation();\n if (root instanceof ShadowRoot) {\n const a = root.activeElement;\n if (a && a !== buttonClose.current && a instanceof HTMLElement) {\n a.blur();\n return;\n }\n }\n if (close) {\n close();\n }\n }\n }\n root.addEventListener(\"keydown\", handler);\n if (root !== d) {\n d.addEventListener(\"keydown\", handler);\n }\n return function() {\n root.removeEventListener(\"keydown\", handler);\n if (root !== d) {\n d.removeEventListener(\"keydown\", handler);\n }\n };\n }, [\n close,\n nav,\n next,\n previous\n ]);\n // Unlock focus for browsers like Firefox, that break all user focus if the\n // currently focused item becomes disabled.\n _react.useEffect(()=>{\n if (nav == null) {\n return;\n }\n const root = nav.getRootNode();\n // Always true, but we do this for TypeScript:\n if (root instanceof ShadowRoot) {\n const a = root.activeElement;\n if (previous == null) {\n if (buttonLeft.current && a === buttonLeft.current) {\n buttonLeft.current.blur();\n }\n } else if (next == null) {\n if (buttonRight.current && a === buttonRight.current) {\n buttonRight.current.blur();\n }\n }\n }\n }, [\n nav,\n next,\n previous\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-dialog-left-right\": true,\n className: className,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"nav\", {\n ref: onNav,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n ref: buttonLeft,\n type: \"button\",\n disabled: previous == null ? true : undefined,\n \"aria-disabled\": previous == null ? true : undefined,\n onClick: previous != null ? previous : undefined,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: \"previous\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M6.99996 1.16666L1.16663 6.99999L6.99996 12.8333M12.8333 6.99999H1.99996H12.8333Z\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n ref: buttonRight,\n type: \"button\",\n disabled: next == null ? true : undefined,\n \"aria-disabled\": next == null ? true : undefined,\n onClick: next != null ? next : undefined,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n viewBox: \"0 0 14 14\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: \"next\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M6.99996 1.16666L12.8333 6.99999L6.99996 12.8333M1.16663 6.99999H12H1.16663Z\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n })\n }),\n \"\\xa0\",\n children\n ]\n }),\n close ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n \"data-nextjs-errors-dialog-left-right-close-button\": true,\n ref: buttonClose,\n type: \"button\",\n onClick: close,\n \"aria-label\": \"Close\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_CloseIcon.CloseIcon, {})\n })\n }) : null\n ]\n });\n};\n_s(LeftRightDialogHeader, \"BTIclYWDjFVmQ0IbTZR6SGMkDDk=\");\n_c = LeftRightDialogHeader;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=LeftRightDialogHeader.js.map\nvar _c;\n$RefreshReg$(_c, \"LeftRightDialogHeader\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9MZWZ0UmlnaHREaWFsb2dIZWFkZXIvTGVmdFJpZ2h0RGlhbG9nSGVhZGVyLmpzIiwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQUEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHlEQUF3RDtJQUNwREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDRCQUE0QkMsbUJBQU9BLENBQUMsa0lBQTBDO0FBQ3BGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLHFHQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gsMEJBQTBCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLG1GQUFPO0FBQ3hFLE1BQU1JLGFBQWFKLG1CQUFPQSxDQUFDLDJJQUF1QjtBQUNsRCxNQUFNRix3QkFBd0IsU0FBU0Esc0JBQXNCTyxLQUFLOztJQUM5RCxJQUFJLEVBQUVDLFFBQVEsRUFBRUMsU0FBUyxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdMO0lBQ3JELE1BQU1NLGFBQWFULE9BQU9VLE1BQU0sQ0FBQztJQUNqQyxNQUFNQyxjQUFjWCxPQUFPVSxNQUFNLENBQUM7SUFDbEMsTUFBTUUsY0FBY1osT0FBT1UsTUFBTSxDQUFDO0lBQ2xDLE1BQU0sQ0FBQ0csS0FBS0MsT0FBTyxHQUFHZCxPQUFPZSxRQUFRLENBQUM7SUFDdEMsTUFBTUMsUUFBUWhCLE9BQU9pQixXQUFXLENBQUMsQ0FBQ0M7UUFDOUJKLE9BQU9JO0lBQ1gsR0FBRyxFQUFFO0lBQ0xsQixPQUFPbUIsU0FBUyxDQUFDO1FBQ2IsSUFBSU4sT0FBTyxNQUFNO1lBQ2I7UUFDSjtRQUNBLE1BQU1PLE9BQU9QLElBQUlRLFdBQVc7UUFDNUIsTUFBTUMsSUFBSUMsS0FBS0MsUUFBUTtRQUN2QixTQUFTQyxRQUFRQyxDQUFDO1lBQ2QsSUFBSUEsRUFBRUMsR0FBRyxLQUFLLGFBQWE7Z0JBQ3ZCRCxFQUFFRSxlQUFlO2dCQUNqQixJQUFJbkIsV0FBV29CLE9BQU8sRUFBRTtvQkFDcEJwQixXQUFXb0IsT0FBTyxDQUFDQyxLQUFLO2dCQUM1QjtnQkFDQXhCLFlBQVlBO1lBQ2hCLE9BQU8sSUFBSW9CLEVBQUVDLEdBQUcsS0FBSyxjQUFjO2dCQUMvQkQsRUFBRUUsZUFBZTtnQkFDakIsSUFBSWpCLFlBQVlrQixPQUFPLEVBQUU7b0JBQ3JCbEIsWUFBWWtCLE9BQU8sQ0FBQ0MsS0FBSztnQkFDN0I7Z0JBQ0F2QixRQUFRQTtZQUNaLE9BQU8sSUFBSW1CLEVBQUVDLEdBQUcsS0FBSyxVQUFVO2dCQUMzQkQsRUFBRUUsZUFBZTtnQkFDakIsSUFBSVIsZ0JBQWdCVyxZQUFZO29CQUM1QixNQUFNQyxJQUFJWixLQUFLYSxhQUFhO29CQUM1QixJQUFJRCxLQUFLQSxNQUFNcEIsWUFBWWlCLE9BQU8sSUFBSUcsYUFBYUUsYUFBYTt3QkFDNURGLEVBQUVHLElBQUk7d0JBQ047b0JBQ0o7Z0JBQ0o7Z0JBQ0EsSUFBSTNCLE9BQU87b0JBQ1BBO2dCQUNKO1lBQ0o7UUFDSjtRQUNBWSxLQUFLZ0IsZ0JBQWdCLENBQUMsV0FBV1g7UUFDakMsSUFBSUwsU0FBU0UsR0FBRztZQUNaQSxFQUFFYyxnQkFBZ0IsQ0FBQyxXQUFXWDtRQUNsQztRQUNBLE9BQU87WUFDSEwsS0FBS2lCLG1CQUFtQixDQUFDLFdBQVdaO1lBQ3BDLElBQUlMLFNBQVNFLEdBQUc7Z0JBQ1pBLEVBQUVlLG1CQUFtQixDQUFDLFdBQVdaO1lBQ3JDO1FBQ0o7SUFDSixHQUFHO1FBQ0NqQjtRQUNBSztRQUNBTjtRQUNBRDtLQUNIO0lBQ0QsMkVBQTJFO0lBQzNFLDJDQUEyQztJQUMzQ04sT0FBT21CLFNBQVMsQ0FBQztRQUNiLElBQUlOLE9BQU8sTUFBTTtZQUNiO1FBQ0o7UUFDQSxNQUFNTyxPQUFPUCxJQUFJUSxXQUFXO1FBQzVCLDhDQUE4QztRQUM5QyxJQUFJRCxnQkFBZ0JXLFlBQVk7WUFDNUIsTUFBTUMsSUFBSVosS0FBS2EsYUFBYTtZQUM1QixJQUFJM0IsWUFBWSxNQUFNO2dCQUNsQixJQUFJRyxXQUFXb0IsT0FBTyxJQUFJRyxNQUFNdkIsV0FBV29CLE9BQU8sRUFBRTtvQkFDaERwQixXQUFXb0IsT0FBTyxDQUFDTSxJQUFJO2dCQUMzQjtZQUNKLE9BQU8sSUFBSTVCLFFBQVEsTUFBTTtnQkFDckIsSUFBSUksWUFBWWtCLE9BQU8sSUFBSUcsTUFBTXJCLFlBQVlrQixPQUFPLEVBQUU7b0JBQ2xEbEIsWUFBWWtCLE9BQU8sQ0FBQ00sSUFBSTtnQkFDNUI7WUFDSjtRQUNKO0lBQ0osR0FBRztRQUNDdEI7UUFDQU47UUFDQUQ7S0FDSDtJQUNELE9BQXFCLFdBQUgsR0FBSSxJQUFHUCxZQUFZdUMsSUFBSSxFQUFFLE9BQU87UUFDOUMsaUNBQWlDO1FBQ2pDakMsV0FBV0E7UUFDWEQsVUFBVTtZQUNOLFdBQVcsR0FBSSxJQUFHTCxZQUFZdUMsSUFBSSxFQUFFLE9BQU87Z0JBQ3ZDQyxLQUFLdkI7Z0JBQ0xaLFVBQVU7b0JBQ04sV0FBVyxHQUFJLElBQUdMLFlBQVl5QyxHQUFHLEVBQUUsVUFBVTt3QkFDekNELEtBQUs5Qjt3QkFDTGdDLE1BQU07d0JBQ05DLFVBQVVwQyxZQUFZLE9BQU8sT0FBT3FDO3dCQUNwQyxpQkFBaUJyQyxZQUFZLE9BQU8sT0FBT3FDO3dCQUMzQ0MsU0FBU3RDLFlBQVksT0FBT0EsV0FBV3FDO3dCQUN2Q3ZDLFVBQXdCLFdBQUgsR0FBSSxJQUFHTCxZQUFZdUMsSUFBSSxFQUFFLE9BQU87NEJBQ2pETyxTQUFTOzRCQUNUQyxNQUFNOzRCQUNOQyxPQUFPOzRCQUNQM0MsVUFBVTtnQ0FDTixXQUFXLEdBQUksSUFBR0wsWUFBWXlDLEdBQUcsRUFBRSxTQUFTO29DQUN4Q3BDLFVBQVU7Z0NBQ2Q7Z0NBQ0EsV0FBVyxHQUFJLElBQUdMLFlBQVl5QyxHQUFHLEVBQUUsUUFBUTtvQ0FDdkNsQixHQUFHO29DQUNIMEIsUUFBUTtvQ0FDUkMsYUFBYTtvQ0FDYkMsZUFBZTtvQ0FDZkMsZ0JBQWdCO2dDQUNwQjs2QkFDSDt3QkFDTDtvQkFDSjtvQkFDQSxXQUFXLEdBQUksSUFBR3BELFlBQVl5QyxHQUFHLEVBQUUsVUFBVTt3QkFDekNELEtBQUs1Qjt3QkFDTDhCLE1BQU07d0JBQ05DLFVBQVVuQyxRQUFRLE9BQU8sT0FBT29DO3dCQUNoQyxpQkFBaUJwQyxRQUFRLE9BQU8sT0FBT29DO3dCQUN2Q0MsU0FBU3JDLFFBQVEsT0FBT0EsT0FBT29DO3dCQUMvQnZDLFVBQXdCLFdBQUgsR0FBSSxJQUFHTCxZQUFZdUMsSUFBSSxFQUFFLE9BQU87NEJBQ2pETyxTQUFTOzRCQUNUQyxNQUFNOzRCQUNOQyxPQUFPOzRCQUNQM0MsVUFBVTtnQ0FDTixXQUFXLEdBQUksSUFBR0wsWUFBWXlDLEdBQUcsRUFBRSxTQUFTO29DQUN4Q3BDLFVBQVU7Z0NBQ2Q7Z0NBQ0EsV0FBVyxHQUFJLElBQUdMLFlBQVl5QyxHQUFHLEVBQUUsUUFBUTtvQ0FDdkNsQixHQUFHO29DQUNIMEIsUUFBUTtvQ0FDUkMsYUFBYTtvQ0FDYkMsZUFBZTtvQ0FDZkMsZ0JBQWdCO2dDQUNwQjs2QkFDSDt3QkFDTDtvQkFDSjtvQkFDQTtvQkFDQS9DO2lCQUNIO1lBQ0w7WUFDQUksUUFBc0IsV0FBSCxHQUFJLElBQUdULFlBQVl5QyxHQUFHLEVBQUUsVUFBVTtnQkFDakQscURBQXFEO2dCQUNyREQsS0FBSzNCO2dCQUNMNkIsTUFBTTtnQkFDTkcsU0FBU3BDO2dCQUNULGNBQWM7Z0JBQ2RKLFVBQXdCLFdBQUgsR0FBSSxJQUFHTCxZQUFZeUMsR0FBRyxFQUFFLFFBQVE7b0JBQ2pELGVBQWU7b0JBQ2ZwQyxVQUF3QixXQUFILEdBQUksSUFBR0wsWUFBWXlDLEdBQUcsRUFBRXRDLFdBQVdrRCxTQUFTLEVBQUUsQ0FBQztnQkFDeEU7WUFDSixLQUFLO1NBQ1I7SUFDTDtBQUNKO0dBM0pNeEQ7S0FBQUE7QUE2Sk4sSUFBSSxDQUFDLE9BQU9KLFFBQVE2RCxPQUFPLEtBQUssY0FBZSxPQUFPN0QsUUFBUTZELE9BQU8sS0FBSyxZQUFZN0QsUUFBUTZELE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzdELFFBQVE2RCxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLaEUsT0FBT0MsY0FBYyxDQUFDQyxRQUFRNkQsT0FBTyxFQUFFLGNBQWM7UUFBRTVELE9BQU87SUFBSztJQUNuRUgsT0FBT2lFLE1BQU0sQ0FBQy9ELFFBQVE2RCxPQUFPLEVBQUU3RDtJQUMvQmdFLE9BQU9oRSxPQUFPLEdBQUdBLFFBQVE2RCxPQUFPO0FBQ2xDLEVBRUEsaURBQWlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9MZWZ0UmlnaHREaWFsb2dIZWFkZXIvTGVmdFJpZ2h0RGlhbG9nSGVhZGVyLmpzP2IzMDYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMZWZ0UmlnaHREaWFsb2dIZWFkZXJcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIExlZnRSaWdodERpYWxvZ0hlYWRlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9DbG9zZUljb24gPSByZXF1aXJlKFwiLi4vLi4vaWNvbnMvQ2xvc2VJY29uXCIpO1xuY29uc3QgTGVmdFJpZ2h0RGlhbG9nSGVhZGVyID0gZnVuY3Rpb24gTGVmdFJpZ2h0RGlhbG9nSGVhZGVyKHBhcmFtKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4sIGNsYXNzTmFtZSwgcHJldmlvdXMsIG5leHQsIGNsb3NlIH0gPSBwYXJhbTtcbiAgICBjb25zdCBidXR0b25MZWZ0ID0gX3JlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBidXR0b25SaWdodCA9IF9yZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgYnV0dG9uQ2xvc2UgPSBfcmVhY3QudXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IFtuYXYsIHNldE5hdl0gPSBfcmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3Qgb25OYXYgPSBfcmVhY3QudXNlQ2FsbGJhY2soKGVsKT0+e1xuICAgICAgICBzZXROYXYoZWwpO1xuICAgIH0sIFtdKTtcbiAgICBfcmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmIChuYXYgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvb3QgPSBuYXYuZ2V0Um9vdE5vZGUoKTtcbiAgICAgICAgY29uc3QgZCA9IHNlbGYuZG9jdW1lbnQ7XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoZSkge1xuICAgICAgICAgICAgaWYgKGUua2V5ID09PSBcIkFycm93TGVmdFwiKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAoYnV0dG9uTGVmdC5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkxlZnQuY3VycmVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcmV2aW91cyAmJiBwcmV2aW91cygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmIChidXR0b25SaWdodC5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvblJpZ2h0LmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV4dCAmJiBuZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAocm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IHJvb3QuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEgJiYgYSAhPT0gYnV0dG9uQ2xvc2UuY3VycmVudCAmJiBhIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuYmx1cigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZXIpO1xuICAgICAgICBpZiAocm9vdCAhPT0gZCkge1xuICAgICAgICAgICAgZC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgaWYgKHJvb3QgIT09IGQpIHtcbiAgICAgICAgICAgICAgICBkLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgY2xvc2UsXG4gICAgICAgIG5hdixcbiAgICAgICAgbmV4dCxcbiAgICAgICAgcHJldmlvdXNcbiAgICBdKTtcbiAgICAvLyBVbmxvY2sgZm9jdXMgZm9yIGJyb3dzZXJzIGxpa2UgRmlyZWZveCwgdGhhdCBicmVhayBhbGwgdXNlciBmb2N1cyBpZiB0aGVcbiAgICAvLyBjdXJyZW50bHkgZm9jdXNlZCBpdGVtIGJlY29tZXMgZGlzYWJsZWQuXG4gICAgX3JlYWN0LnVzZUVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAobmF2ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb290ID0gbmF2LmdldFJvb3ROb2RlKCk7XG4gICAgICAgIC8vIEFsd2F5cyB0cnVlLCBidXQgd2UgZG8gdGhpcyBmb3IgVHlwZVNjcmlwdDpcbiAgICAgICAgaWYgKHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICBjb25zdCBhID0gcm9vdC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoYnV0dG9uTGVmdC5jdXJyZW50ICYmIGEgPT09IGJ1dHRvbkxlZnQuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICBidXR0b25MZWZ0LmN1cnJlbnQuYmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJ1dHRvblJpZ2h0LmN1cnJlbnQgJiYgYSA9PT0gYnV0dG9uUmlnaHQuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICBidXR0b25SaWdodC5jdXJyZW50LmJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbXG4gICAgICAgIG5hdixcbiAgICAgICAgbmV4dCxcbiAgICAgICAgcHJldmlvdXNcbiAgICBdKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkaXZcIiwge1xuICAgICAgICBcImRhdGEtbmV4dGpzLWRpYWxvZy1sZWZ0LXJpZ2h0XCI6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJuYXZcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogb25OYXYsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWY6IGJ1dHRvbkxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHByZXZpb3VzID09IG51bGwgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IHByZXZpb3VzID09IG51bGwgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogcHJldmlvdXMgIT0gbnVsbCA/IHByZXZpb3VzIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAxNCAxNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInRpdGxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcInByZXZpb3VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiTTYuOTk5OTYgMS4xNjY2NkwxLjE2NjYzIDYuOTk5OTlMNi45OTk5NiAxMi44MzMzTTEyLjgzMzMgNi45OTk5OUgxLjk5OTk2SDEyLjgzMzNaXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiBidXR0b25SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogbmV4dCA9PSBudWxsID8gdHJ1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1kaXNhYmxlZFwiOiBuZXh0ID09IG51bGwgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogbmV4dCAhPSBudWxsID8gbmV4dCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMTQgMTRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJ0aXRsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJuZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiTTYuOTk5OTYgMS4xNjY2NkwxMi44MzMzIDYuOTk5OTlMNi45OTk5NiAxMi44MzMzTTEuMTY2NjMgNi45OTk5OUgxMkgxLjE2NjYzWlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBcIlxceGEwXCIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjbG9zZSA/IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgIFwiZGF0YS1uZXh0anMtZXJyb3JzLWRpYWxvZy1sZWZ0LXJpZ2h0LWNsb3NlLWJ1dHRvblwiOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlZjogYnV0dG9uQ2xvc2UsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiBjbG9zZSxcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogXCJDbG9zZVwiLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9DbG9zZUljb24uQ2xvc2VJY29uLCB7fSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSkgOiBudWxsXG4gICAgICAgIF1cbiAgICB9KTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUxlZnRSaWdodERpYWxvZ0hlYWRlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiTGVmdFJpZ2h0RGlhbG9nSGVhZGVyIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfQ2xvc2VJY29uIiwicGFyYW0iLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsInByZXZpb3VzIiwibmV4dCIsImNsb3NlIiwiYnV0dG9uTGVmdCIsInVzZVJlZiIsImJ1dHRvblJpZ2h0IiwiYnV0dG9uQ2xvc2UiLCJuYXYiLCJzZXROYXYiLCJ1c2VTdGF0ZSIsIm9uTmF2IiwidXNlQ2FsbGJhY2siLCJlbCIsInVzZUVmZmVjdCIsInJvb3QiLCJnZXRSb290Tm9kZSIsImQiLCJzZWxmIiwiZG9jdW1lbnQiLCJoYW5kbGVyIiwiZSIsImtleSIsInN0b3BQcm9wYWdhdGlvbiIsImN1cnJlbnQiLCJmb2N1cyIsIlNoYWRvd1Jvb3QiLCJhIiwiYWN0aXZlRWxlbWVudCIsIkhUTUxFbGVtZW50IiwiYmx1ciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwianN4cyIsInJlZiIsImpzeCIsInR5cGUiLCJkaXNhYmxlZCIsInVuZGVmaW5lZCIsIm9uQ2xpY2siLCJ2aWV3Qm94IiwiZmlsbCIsInhtbG5zIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJDbG9zZUljb24iLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js": +/*!***********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js ***! + \***********************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n LeftRightDialogHeader: function() {\n return _LeftRightDialogHeader.LeftRightDialogHeader;\n },\n styles: function() {\n return _styles.styles;\n }\n});\nconst _LeftRightDialogHeader = __webpack_require__(/*! ./LeftRightDialogHeader */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js\");\nconst _styles = __webpack_require__(/*! ./styles */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9MZWZ0UmlnaHREaWFsb2dIZWFkZXIvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLHVCQUF1QjtRQUNuQixPQUFPUSx1QkFBdUJSLHFCQUFxQjtJQUN2RDtJQUNBQyxRQUFRO1FBQ0osT0FBT1EsUUFBUVIsTUFBTTtJQUN6QjtBQUNKO0FBQ0EsTUFBTU8seUJBQXlCRSxtQkFBT0EsQ0FBQyxvTEFBeUI7QUFDaEUsTUFBTUQsVUFBVUMsbUJBQU9BLENBQUMsc0pBQVU7QUFFbEMsSUFBSSxDQUFDLE9BQU9iLFFBQVFjLE9BQU8sS0FBSyxjQUFlLE9BQU9kLFFBQVFjLE9BQU8sS0FBSyxZQUFZZCxRQUFRYyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9kLFFBQVFjLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktqQixPQUFPQyxjQUFjLENBQUNDLFFBQVFjLE9BQU8sRUFBRSxjQUFjO1FBQUViLE9BQU87SUFBSztJQUNuRUgsT0FBT2tCLE1BQU0sQ0FBQ2hCLFFBQVFjLE9BQU8sRUFBRWQ7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUWMsT0FBTztBQUNsQyxFQUVBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvTGVmdFJpZ2h0RGlhbG9nSGVhZGVyL2luZGV4LmpzPzJhYzIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBMZWZ0UmlnaHREaWFsb2dIZWFkZXI6IG51bGwsXG4gICAgc3R5bGVzOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIExlZnRSaWdodERpYWxvZ0hlYWRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfTGVmdFJpZ2h0RGlhbG9nSGVhZGVyLkxlZnRSaWdodERpYWxvZ0hlYWRlcjtcbiAgICB9LFxuICAgIHN0eWxlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc3R5bGVzLnN0eWxlcztcbiAgICB9XG59KTtcbmNvbnN0IF9MZWZ0UmlnaHREaWFsb2dIZWFkZXIgPSByZXF1aXJlKFwiLi9MZWZ0UmlnaHREaWFsb2dIZWFkZXJcIik7XG5jb25zdCBfc3R5bGVzID0gcmVxdWlyZShcIi4vc3R5bGVzXCIpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJMZWZ0UmlnaHREaWFsb2dIZWFkZXIiLCJzdHlsZXMiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfTGVmdFJpZ2h0RGlhbG9nSGVhZGVyIiwiX3N0eWxlcyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js": +/*!************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js ***! + \************************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-dialog-left-right] {\\n display: flex;\\n flex-direction: row;\\n align-content: center;\\n align-items: center;\\n justify-content: space-between;\\n }\\n [data-nextjs-dialog-left-right] > nav {\\n flex: 1;\\n display: flex;\\n align-items: center;\\n margin-right: var(--size-gap);\\n }\\n [data-nextjs-dialog-left-right] > nav > button {\\n display: inline-flex;\\n align-items: center;\\n justify-content: center;\\n\\n width: calc(var(--size-gap-double) + var(--size-gap));\\n height: calc(var(--size-gap-double) + var(--size-gap));\\n font-size: 0;\\n border: none;\\n background-color: rgba(255, 85, 85, 0.1);\\n color: var(--color-ansi-red);\\n cursor: pointer;\\n transition: background-color 0.25s ease;\\n }\\n [data-nextjs-dialog-left-right] > nav > button > svg {\\n width: auto;\\n height: calc(var(--size-gap) + var(--size-gap-half));\\n }\\n [data-nextjs-dialog-left-right] > nav > button:hover {\\n background-color: rgba(255, 85, 85, 0.2);\\n }\\n [data-nextjs-dialog-left-right] > nav > button:disabled {\\n background-color: rgba(255, 85, 85, 0.1);\\n color: rgba(255, 85, 85, 0.4);\\n cursor: not-allowed;\\n }\\n\\n [data-nextjs-dialog-left-right] > nav > button:first-of-type {\\n border-radius: var(--size-gap-half) 0 0 var(--size-gap-half);\\n margin-right: 1px;\\n }\\n [data-nextjs-dialog-left-right] > nav > button:last-of-type {\\n border-radius: 0 var(--size-gap-half) var(--size-gap-half) 0;\\n }\\n\\n [data-nextjs-dialog-left-right] > button:last-of-type {\\n border: 0;\\n padding: 0;\\n\\n background-color: transparent;\\n appearance: none;\\n\\n opacity: 0.4;\\n transition: opacity 0.25s ease;\\n }\\n [data-nextjs-dialog-left-right] > button:last-of-type:hover {\\n opacity: 0.7;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9MZWZ0UmlnaHREaWFsb2dIZWFkZXIvc3R5bGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwwQ0FBeUM7SUFDckNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQ0FBaUNDLG1CQUFPQSxDQUFDLDRJQUErQztBQUM5RixNQUFNQyxnQkFBZ0JELG1CQUFPQSxDQUFDLHVKQUE2QjtBQUMzRCxTQUFTRTtJQUNMLE1BQU1DLE9BQU9KLCtCQUErQkssQ0FBQyxDQUFDO1FBQzFDO0tBQ0g7SUFDREYsa0JBQWtCO1FBQ2QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxNQUFNTCxTQUFTLENBQUMsR0FBR0csY0FBY0ksSUFBSSxFQUFFSDtBQUV2QyxJQUFJLENBQUMsT0FBT1IsUUFBUVksT0FBTyxLQUFLLGNBQWUsT0FBT1osUUFBUVksT0FBTyxLQUFLLFlBQVlaLFFBQVFZLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1osUUFBUVksT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2YsT0FBT0MsY0FBYyxDQUFDQyxRQUFRWSxPQUFPLEVBQUUsY0FBYztRQUFFWCxPQUFPO0lBQUs7SUFDbkVILE9BQU9nQixNQUFNLENBQUNkLFFBQVFZLE9BQU8sRUFBRVo7SUFDL0JlLE9BQU9mLE9BQU8sR0FBR0EsUUFBUVksT0FBTztBQUNsQyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvTGVmdFJpZ2h0RGlhbG9nSGVhZGVyL3N0eWxlcy5qcz9kYjczIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3R5bGVzXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfVxufSk7XG5jb25zdCBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlXCIpO1xuY29uc3QgX25vb3B0ZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL25vb3AtdGVtcGxhdGVcIik7XG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QoKSB7XG4gICAgY29uc3QgZGF0YSA9IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZS5fKFtcbiAgICAgICAgXCJcXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBuYXYge1xcbiAgICBmbGV4OiAxO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUtZ2FwKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBuYXYgPiBidXR0b24ge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXFxuICAgIHdpZHRoOiBjYWxjKHZhcigtLXNpemUtZ2FwLWRvdWJsZSkgKyB2YXIoLS1zaXplLWdhcCkpO1xcbiAgICBoZWlnaHQ6IGNhbGModmFyKC0tc2l6ZS1nYXAtZG91YmxlKSArIHZhcigtLXNpemUtZ2FwKSk7XFxuICAgIGZvbnQtc2l6ZTogMDtcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgODUsIDg1LCAwLjEpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yNXMgZWFzZTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBuYXYgPiBidXR0b24gPiBzdmcge1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgaGVpZ2h0OiBjYWxjKHZhcigtLXNpemUtZ2FwKSArIHZhcigtLXNpemUtZ2FwLWhhbGYpKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBuYXYgPiBidXR0b246aG92ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgODUsIDg1LCAwLjIpO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1sZWZ0LXJpZ2h0XSA+IG5hdiA+IGJ1dHRvbjpkaXNhYmxlZCB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA4NSwgODUsIDAuMSk7XFxuICAgIGNvbG9yOiByZ2JhKDI1NSwgODUsIDg1LCAwLjQpO1xcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1sZWZ0LXJpZ2h0XSA+IG5hdiA+IGJ1dHRvbjpmaXJzdC1vZi10eXBlIHtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2l6ZS1nYXAtaGFsZikgMCAwIHZhcigtLXNpemUtZ2FwLWhhbGYpO1xcbiAgICBtYXJnaW4tcmlnaHQ6IDFweDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBuYXYgPiBidXR0b246bGFzdC1vZi10eXBlIHtcXG4gICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1zaXplLWdhcC1oYWxmKSB2YXIoLS1zaXplLWdhcC1oYWxmKSAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1sZWZ0LXJpZ2h0XSA+IGJ1dHRvbjpsYXN0LW9mLXR5cGUge1xcbiAgICBib3JkZXI6IDA7XFxuICAgIHBhZGRpbmc6IDA7XFxuXFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICBhcHBlYXJhbmNlOiBub25lO1xcblxcbiAgICBvcGFjaXR5OiAwLjQ7XFxuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXMgZWFzZTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBidXR0b246bGFzdC1vZi10eXBlOmhvdmVyIHtcXG4gICAgb3BhY2l0eTogMC43O1xcbiAgfVxcblwiXG4gICAgXSk7XG4gICAgX3RlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIGRhdGE7XG59XG5jb25zdCBzdHlsZXMgPSAoMCwgX25vb3B0ZW1wbGF0ZS5ub29wKShfdGVtcGxhdGVPYmplY3QoKSk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic3R5bGVzIiwiX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlIiwicmVxdWlyZSIsIl9ub29wdGVtcGxhdGUiLCJfdGVtcGxhdGVPYmplY3QiLCJkYXRhIiwiXyIsIm5vb3AiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js ***! + \***********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// @ts-ignore\n\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Overlay\", ({\n enumerable: true,\n get: function() {\n return Overlay;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _maintaintabfocus = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./maintain--tab-focus */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _bodylocker = __webpack_require__(/*! ./body-locker */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js\");\nconst Overlay = function Overlay(param) {\n _s();\n let { className, children, fixed } = param;\n _react.useEffect(()=>{\n (0, _bodylocker.lock)();\n return ()=>{\n (0, _bodylocker.unlock)();\n };\n }, []);\n const [overlay, setOverlay] = _react.useState(null);\n const onOverlay = _react.useCallback((el)=>{\n setOverlay(el);\n }, []);\n _react.useEffect(()=>{\n if (overlay == null) {\n return;\n }\n const handle2 = (0, _maintaintabfocus.default)({\n context: overlay\n });\n return ()=>{\n handle2.disengage();\n };\n }, [\n overlay\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-dialog-overlay\": true,\n className: className,\n ref: onOverlay,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-dialog-backdrop\": true,\n \"data-nextjs-dialog-backdrop-fixed\": fixed ? true : undefined\n }),\n children\n ]\n });\n};\n_s(Overlay, \"7AKWSbA/gHapd2YTyFggUak94M8=\");\n_c = Overlay;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Overlay.js.map\nvar _c;\n$RefreshReg$(_c, \"Overlay\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkuanMiLCJtYXBwaW5ncyI6IkFBQUEsYUFBYTs7O0FBQ2I7QUFDQUEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsZ0lBQXlDO0FBQ2xGLE1BQU1DLDRCQUE0QkQsbUJBQU9BLENBQUMsa0lBQTBDO0FBQ3BGLE1BQU1FLGNBQWNGLG1CQUFPQSxDQUFDLHFHQUFtQjtBQUMvQyxNQUFNRyxvQkFBb0IsV0FBVyxHQUFHSix5QkFBeUJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsa0tBQXVCO0FBQ2xHLE1BQU1LLFNBQVMsV0FBVyxHQUFHSiwwQkFBMEJHLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsbUZBQU87QUFDeEUsTUFBTU0sY0FBY04sbUJBQU9BLENBQUMsa0pBQWU7QUFDM0MsTUFBTUYsVUFBVSxTQUFTQSxRQUFRUyxLQUFLOztJQUNsQyxJQUFJLEVBQUVDLFNBQVMsRUFBRUMsUUFBUSxFQUFFQyxLQUFLLEVBQUUsR0FBR0g7SUFDckNGLE9BQU9NLFNBQVMsQ0FBQztRQUNaLElBQUdMLFlBQVlNLElBQUk7UUFDcEIsT0FBTztZQUNGLElBQUdOLFlBQVlPLE1BQU07UUFDMUI7SUFDSixHQUFHLEVBQUU7SUFDTCxNQUFNLENBQUNDLFNBQVNDLFdBQVcsR0FBR1YsT0FBT1csUUFBUSxDQUFDO0lBQzlDLE1BQU1DLFlBQVlaLE9BQU9hLFdBQVcsQ0FBQyxDQUFDQztRQUNsQ0osV0FBV0k7SUFDZixHQUFHLEVBQUU7SUFDTGQsT0FBT00sU0FBUyxDQUFDO1FBQ2IsSUFBSUcsV0FBVyxNQUFNO1lBQ2pCO1FBQ0o7UUFDQSxNQUFNTSxVQUFVLENBQUMsR0FBR2pCLGtCQUFrQmtCLE9BQU8sRUFBRTtZQUMzQ0MsU0FBU1I7UUFDYjtRQUNBLE9BQU87WUFDSE0sUUFBUUcsU0FBUztRQUNyQjtJQUNKLEdBQUc7UUFDQ1Q7S0FDSDtJQUNELE9BQXFCLFdBQUgsR0FBSSxJQUFHWixZQUFZc0IsSUFBSSxFQUFFLE9BQU87UUFDOUMsOEJBQThCO1FBQzlCaEIsV0FBV0E7UUFDWGlCLEtBQUtSO1FBQ0xSLFVBQVU7WUFDTixXQUFXLEdBQUksSUFBR1AsWUFBWXdCLEdBQUcsRUFBRSxPQUFPO2dCQUN0QywrQkFBK0I7Z0JBQy9CLHFDQUFxQ2hCLFFBQVEsT0FBT2lCO1lBQ3hEO1lBQ0FsQjtTQUNIO0lBQ0w7QUFDSjtHQXJDTVg7S0FBQUE7QUF1Q04sSUFBSSxDQUFDLE9BQU9KLFFBQVEyQixPQUFPLEtBQUssY0FBZSxPQUFPM0IsUUFBUTJCLE9BQU8sS0FBSyxZQUFZM0IsUUFBUTJCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzNCLFFBQVEyQixPQUFPLENBQUNPLFVBQVUsS0FBSyxhQUFhO0lBQ3JLcEMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMkIsT0FBTyxFQUFFLGNBQWM7UUFBRTFCLE9BQU87SUFBSztJQUNuRUgsT0FBT3FDLE1BQU0sQ0FBQ25DLFFBQVEyQixPQUFPLEVBQUUzQjtJQUMvQm9DLE9BQU9wQyxPQUFPLEdBQUdBLFFBQVEyQixPQUFPO0FBQ2xDLEVBRUEsbUNBQW1DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkuanM/YWMyMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk92ZXJsYXlcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE92ZXJsYXk7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfbWFpbnRhaW50YWJmb2N1cyA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4vbWFpbnRhaW4tLXRhYi1mb2N1c1wiKSk7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX2JvZHlsb2NrZXIgPSByZXF1aXJlKFwiLi9ib2R5LWxvY2tlclwiKTtcbmNvbnN0IE92ZXJsYXkgPSBmdW5jdGlvbiBPdmVybGF5KHBhcmFtKSB7XG4gICAgbGV0IHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgZml4ZWQgfSA9IHBhcmFtO1xuICAgIF9yZWFjdC51c2VFZmZlY3QoKCk9PntcbiAgICAgICAgKDAsIF9ib2R5bG9ja2VyLmxvY2spKCk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgKDAsIF9ib2R5bG9ja2VyLnVubG9jaykoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgW292ZXJsYXksIHNldE92ZXJsYXldID0gX3JlYWN0LnVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IG9uT3ZlcmxheSA9IF9yZWFjdC51c2VDYWxsYmFjaygoZWwpPT57XG4gICAgICAgIHNldE92ZXJsYXkoZWwpO1xuICAgIH0sIFtdKTtcbiAgICBfcmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmIChvdmVybGF5ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYW5kbGUyID0gKDAsIF9tYWludGFpbnRhYmZvY3VzLmRlZmF1bHQpKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IG92ZXJsYXlcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgaGFuZGxlMi5kaXNlbmdhZ2UoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIG92ZXJsYXlcbiAgICBdKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkaXZcIiwge1xuICAgICAgICBcImRhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XCI6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICByZWY6IG9uT3ZlcmxheSxcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIFwiZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgXCJkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3AtZml4ZWRcIjogZml4ZWQgPyB0cnVlIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgIF1cbiAgICB9KTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU92ZXJsYXkuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIk92ZXJsYXkiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsIl9qc3hydW50aW1lIiwiX21haW50YWludGFiZm9jdXMiLCJfIiwiX3JlYWN0IiwiX2JvZHlsb2NrZXIiLCJwYXJhbSIsImNsYXNzTmFtZSIsImNoaWxkcmVuIiwiZml4ZWQiLCJ1c2VFZmZlY3QiLCJsb2NrIiwidW5sb2NrIiwib3ZlcmxheSIsInNldE92ZXJsYXkiLCJ1c2VTdGF0ZSIsIm9uT3ZlcmxheSIsInVzZUNhbGxiYWNrIiwiZWwiLCJoYW5kbGUyIiwiZGVmYXVsdCIsImNvbnRleHQiLCJkaXNlbmdhZ2UiLCJqc3hzIiwicmVmIiwianN4IiwidW5kZWZpbmVkIiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js ***! + \***************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n lock: function() {\n return lock;\n },\n unlock: function() {\n return unlock;\n }\n});\nlet previousBodyPaddingRight;\nlet previousBodyOverflowSetting;\nlet activeLocks = 0;\nfunction lock() {\n setTimeout(()=>{\n if (activeLocks++ > 0) {\n return;\n }\n const scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n if (scrollBarGap > 0) {\n previousBodyPaddingRight = document.body.style.paddingRight;\n document.body.style.paddingRight = \"\" + scrollBarGap + \"px\";\n }\n previousBodyOverflowSetting = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n });\n}\nfunction unlock() {\n setTimeout(()=>{\n if (activeLocks === 0 || --activeLocks !== 0) {\n return;\n }\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight;\n previousBodyPaddingRight = undefined;\n }\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting;\n previousBodyOverflowSetting = undefined;\n }\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=body-locker.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9PdmVybGF5L2JvZHktbG9ja2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxNQUFNO1FBQ0YsT0FBT0E7SUFDWDtJQUNBQyxRQUFRO1FBQ0osT0FBT0E7SUFDWDtBQUNKO0FBQ0EsSUFBSU87QUFDSixJQUFJQztBQUNKLElBQUlDLGNBQWM7QUFDbEIsU0FBU1Y7SUFDTFcsV0FBVztRQUNQLElBQUlELGdCQUFnQixHQUFHO1lBQ25CO1FBQ0o7UUFDQSxNQUFNRSxlQUFlQyxPQUFPQyxVQUFVLEdBQUdDLFNBQVNDLGVBQWUsQ0FBQ0MsV0FBVztRQUM3RSxJQUFJTCxlQUFlLEdBQUc7WUFDbEJKLDJCQUEyQk8sU0FBU0csSUFBSSxDQUFDQyxLQUFLLENBQUNDLFlBQVk7WUFDM0RMLFNBQVNHLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxZQUFZLEdBQUcsS0FBS1IsZUFBZTtRQUMzRDtRQUNBSCw4QkFBOEJNLFNBQVNHLElBQUksQ0FBQ0MsS0FBSyxDQUFDRSxRQUFRO1FBQzFETixTQUFTRyxJQUFJLENBQUNDLEtBQUssQ0FBQ0UsUUFBUSxHQUFHO0lBQ25DO0FBQ0o7QUFDQSxTQUFTcEI7SUFDTFUsV0FBVztRQUNQLElBQUlELGdCQUFnQixLQUFLLEVBQUVBLGdCQUFnQixHQUFHO1lBQzFDO1FBQ0o7UUFDQSxJQUFJRiw2QkFBNkJjLFdBQVc7WUFDeENQLFNBQVNHLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxZQUFZLEdBQUdaO1lBQ25DQSwyQkFBMkJjO1FBQy9CO1FBQ0EsSUFBSWIsZ0NBQWdDYSxXQUFXO1lBQzNDUCxTQUFTRyxJQUFJLENBQUNDLEtBQUssQ0FBQ0UsUUFBUSxHQUFHWjtZQUMvQkEsOEJBQThCYTtRQUNsQztJQUNKO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT3pCLFFBQVEwQixPQUFPLEtBQUssY0FBZSxPQUFPMUIsUUFBUTBCLE9BQU8sS0FBSyxZQUFZMUIsUUFBUTBCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzFCLFFBQVEwQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLN0IsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMEIsT0FBTyxFQUFFLGNBQWM7UUFBRXpCLE9BQU87SUFBSztJQUNuRUgsT0FBTzhCLE1BQU0sQ0FBQzVCLFFBQVEwQixPQUFPLEVBQUUxQjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRMEIsT0FBTztBQUNsQyxFQUVBLHVDQUF1QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvT3ZlcmxheS9ib2R5LWxvY2tlci5qcz84ZDFkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbG9jazogbnVsbCxcbiAgICB1bmxvY2s6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgbG9jazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBsb2NrO1xuICAgIH0sXG4gICAgdW5sb2NrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVubG9jaztcbiAgICB9XG59KTtcbmxldCBwcmV2aW91c0JvZHlQYWRkaW5nUmlnaHQ7XG5sZXQgcHJldmlvdXNCb2R5T3ZlcmZsb3dTZXR0aW5nO1xubGV0IGFjdGl2ZUxvY2tzID0gMDtcbmZ1bmN0aW9uIGxvY2soKSB7XG4gICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgICBpZiAoYWN0aXZlTG9ja3MrKyA+IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3JvbGxCYXJHYXAgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgaWYgKHNjcm9sbEJhckdhcCA+IDApIHtcbiAgICAgICAgICAgIHByZXZpb3VzQm9keVBhZGRpbmdSaWdodCA9IGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0O1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQgPSBcIlwiICsgc2Nyb2xsQmFyR2FwICsgXCJweFwiO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzQm9keU92ZXJmbG93U2V0dGluZyA9IGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdW5sb2NrKCkge1xuICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgaWYgKGFjdGl2ZUxvY2tzID09PSAwIHx8IC0tYWN0aXZlTG9ja3MgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldmlvdXNCb2R5UGFkZGluZ1JpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gcHJldmlvdXNCb2R5UGFkZGluZ1JpZ2h0O1xuICAgICAgICAgICAgcHJldmlvdXNCb2R5UGFkZGluZ1JpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2aW91c0JvZHlPdmVyZmxvd1NldHRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IHByZXZpb3VzQm9keU92ZXJmbG93U2V0dGluZztcbiAgICAgICAgICAgIHByZXZpb3VzQm9keU92ZXJmbG93U2V0dGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib2R5LWxvY2tlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJsb2NrIiwidW5sb2NrIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicHJldmlvdXNCb2R5UGFkZGluZ1JpZ2h0IiwicHJldmlvdXNCb2R5T3ZlcmZsb3dTZXR0aW5nIiwiYWN0aXZlTG9ja3MiLCJzZXRUaW1lb3V0Iiwic2Nyb2xsQmFyR2FwIiwid2luZG93IiwiaW5uZXJXaWR0aCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJib2R5Iiwic3R5bGUiLCJwYWRkaW5nUmlnaHQiLCJvdmVyZmxvdyIsInVuZGVmaW5lZCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js": +/*!*********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js ***! + \*********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Overlay\", ({\n enumerable: true,\n get: function() {\n return _Overlay.Overlay;\n }\n}));\nconst _Overlay = __webpack_require__(/*! ./Overlay */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DLFNBQVNDLE9BQU87SUFDM0I7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNRCxXQUFXRSxtQkFBT0EsQ0FBQywwSUFBVztBQUVwQyxJQUFJLENBQUMsT0FBT04sUUFBUU8sT0FBTyxLQUFLLGNBQWUsT0FBT1AsUUFBUU8sT0FBTyxLQUFLLFlBQVlQLFFBQVFPLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT1AsUUFBUU8sT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS1YsT0FBT0MsY0FBYyxDQUFDQyxRQUFRTyxPQUFPLEVBQUUsY0FBYztRQUFFTixPQUFPO0lBQUs7SUFDbkVILE9BQU9XLE1BQU0sQ0FBQ1QsUUFBUU8sT0FBTyxFQUFFUDtJQUMvQlUsT0FBT1YsT0FBTyxHQUFHQSxRQUFRTyxPQUFPO0FBQ2xDLEVBRUEsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LmpzP2E4OGYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPdmVybGF5XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfT3ZlcmxheS5PdmVybGF5O1xuICAgIH1cbn0pO1xuY29uc3QgX092ZXJsYXkgPSByZXF1aXJlKFwiLi9PdmVybGF5XCIpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX092ZXJsYXkiLCJPdmVybGF5IiwicmVxdWlyZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js": +/*!***********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js ***! + \***********************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* eslint-disable */ // @ts-nocheck\n// Copied from https://github.com/medialize/ally.js\n// License: MIT\n// Copyright (c) 2015 Rodney Rehm\n//\n// Entrypoint: ally.js/maintain/tab-focus\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _platform = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/platform */ \"(app-pages-browser)/./node_modules/next/dist/compiled/platform/platform.js\"));\nconst _cssescape = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/css.escape */ \"(app-pages-browser)/./node_modules/next/dist/compiled/css.escape/css.escape.js\"));\n// input may be undefined, selector-tring, Node, NodeList, HTMLCollection, array of Nodes\n// yes, to some extent this is a bad replica of jQuery's constructor function\nfunction nodeArray(input) {\n if (!input) {\n return [];\n }\n if (Array.isArray(input)) {\n return input;\n }\n // instanceof Node - does not work with iframes\n if (input.nodeType !== undefined) {\n return [\n input\n ];\n }\n if (typeof input === \"string\") {\n input = document.querySelectorAll(input);\n }\n if (input.length !== undefined) {\n return [].slice.call(input, 0);\n }\n throw new TypeError(\"unexpected input \" + String(input));\n}\nfunction contextToElement(_ref) {\n var context = _ref.context, _ref$label = _ref.label, label = _ref$label === undefined ? \"context-to-element\" : _ref$label, resolveDocument = _ref.resolveDocument, defaultToDocument = _ref.defaultToDocument;\n var element = nodeArray(context)[0];\n if (resolveDocument && element && element.nodeType === Node.DOCUMENT_NODE) {\n element = element.documentElement;\n }\n if (!element && defaultToDocument) {\n return document.documentElement;\n }\n if (!element) {\n throw new TypeError(label + \" requires valid options.context\");\n }\n if (element.nodeType !== Node.ELEMENT_NODE && element.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n throw new TypeError(label + \" requires options.context to be an Element\");\n }\n return element;\n}\nfunction getShadowHost() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context;\n var element = contextToElement({\n label: \"get/shadow-host\",\n context: context\n });\n // walk up to the root\n var container = null;\n while(element){\n container = element;\n element = element.parentNode;\n }\n // https://developer.mozilla.org/docs/Web/API/Node.nodeType\n // NOTE: Firefox 34 does not expose ShadowRoot.host (but 37 does)\n if (container.nodeType === container.DOCUMENT_FRAGMENT_NODE && container.host) {\n // the root is attached to a fragment node that has a host\n return container.host;\n }\n return null;\n}\nfunction getDocument(node) {\n if (!node) {\n return document;\n }\n if (node.nodeType === Node.DOCUMENT_NODE) {\n return node;\n }\n return node.ownerDocument || document;\n}\nfunction isActiveElement(context) {\n var element = contextToElement({\n label: \"is/active-element\",\n resolveDocument: true,\n context: context\n });\n var _document = getDocument(element);\n if (_document.activeElement === element) {\n return true;\n }\n var shadowHost = getShadowHost({\n context: element\n });\n if (shadowHost && shadowHost.shadowRoot.activeElement === element) {\n return true;\n }\n return false;\n}\n// [elem, elem.parent, elem.parent.parent, …, html]\n// will not contain the shadowRoot (DOCUMENT_FRAGMENT_NODE) and shadowHost\nfunction getParents() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context;\n var list = [];\n var element = contextToElement({\n label: \"get/parents\",\n context: context\n });\n while(element){\n list.push(element);\n // IE does know support parentElement on SVGElement\n element = element.parentNode;\n if (element && element.nodeType !== Node.ELEMENT_NODE) {\n element = null;\n }\n }\n return list;\n}\n// Element.prototype.matches may be available at a different name\n// https://developer.mozilla.org/en/docs/Web/API/Element/matches\nvar names = [\n \"matches\",\n \"webkitMatchesSelector\",\n \"mozMatchesSelector\",\n \"msMatchesSelector\"\n];\nvar name = null;\nfunction findMethodName(element) {\n names.some(function(_name) {\n if (!element[_name]) {\n return false;\n }\n name = _name;\n return true;\n });\n}\nfunction elementMatches(element, selector) {\n if (!name) {\n findMethodName(element);\n }\n return element[name](selector);\n}\n// deep clone of original platform\nvar platform = JSON.parse(JSON.stringify(_platform.default));\n// operating system\nvar os = platform.os.family || \"\";\nvar ANDROID = os === \"Android\";\nvar WINDOWS = os.slice(0, 7) === \"Windows\";\nvar OSX = os === \"OS X\";\nvar IOS = os === \"iOS\";\n// layout\nvar BLINK = platform.layout === \"Blink\";\nvar GECKO = platform.layout === \"Gecko\";\nvar TRIDENT = platform.layout === \"Trident\";\nvar EDGE = platform.layout === \"EdgeHTML\";\nvar WEBKIT = platform.layout === \"WebKit\";\n// browser version (not layout engine version!)\nvar version = parseFloat(platform.version);\nvar majorVersion = Math.floor(version);\nplatform.majorVersion = majorVersion;\nplatform.is = {\n // operating system\n ANDROID: ANDROID,\n WINDOWS: WINDOWS,\n OSX: OSX,\n IOS: IOS,\n // layout\n BLINK: BLINK,\n GECKO: GECKO,\n TRIDENT: TRIDENT,\n EDGE: EDGE,\n WEBKIT: WEBKIT,\n // INTERNET EXPLORERS\n IE9: TRIDENT && majorVersion === 9,\n IE10: TRIDENT && majorVersion === 10,\n IE11: TRIDENT && majorVersion === 11\n};\nfunction before() {\n var data = {\n // remember what had focus to restore after test\n activeElement: document.activeElement,\n // remember scroll positions to restore after test\n windowScrollTop: window.scrollTop,\n windowScrollLeft: window.scrollLeft,\n bodyScrollTop: document.body.scrollTop,\n bodyScrollLeft: document.body.scrollLeft\n };\n // wrap tests in an element hidden from screen readers to prevent them\n // from announcing focus, which can be quite irritating to the user\n var iframe = document.createElement(\"iframe\");\n iframe.setAttribute(\"style\", \"position:absolute; position:fixed; top:0; left:-2px; width:1px; height:1px; overflow:hidden;\");\n iframe.setAttribute(\"aria-live\", \"off\");\n iframe.setAttribute(\"aria-busy\", \"true\");\n iframe.setAttribute(\"aria-hidden\", \"true\");\n document.body.appendChild(iframe);\n var _window = iframe.contentWindow;\n var _document = _window.document;\n _document.open();\n _document.close();\n var wrapper = _document.createElement(\"div\");\n _document.body.appendChild(wrapper);\n data.iframe = iframe;\n data.wrapper = wrapper;\n data.window = _window;\n data.document = _document;\n return data;\n}\n// options.element:\n// {string} element name\n// {function} callback(wrapper, document) to generate an element\n// options.mutate: (optional)\n// {function} callback(element, wrapper, document) to manipulate element prior to focus-test.\n// Can return DOMElement to define focus target (default: element)\n// options.validate: (optional)\n// {function} callback(element, focusTarget, document) to manipulate test-result\nfunction test(data, options) {\n // make sure we operate on a clean slate\n data.wrapper.innerHTML = \"\";\n // create dummy element to test focusability of\n var element = typeof options.element === \"string\" ? data.document.createElement(options.element) : options.element(data.wrapper, data.document);\n // allow callback to further specify dummy element\n // and optionally define element to focus\n var focus = options.mutate && options.mutate(element, data.wrapper, data.document);\n if (!focus && focus !== false) {\n focus = element;\n }\n // element needs to be part of the DOM to be focusable\n !element.parentNode && data.wrapper.appendChild(element);\n // test if the element with invalid tabindex can be focused\n focus && focus.focus && focus.focus();\n // validate test's result\n return options.validate ? options.validate(element, focus, data.document) : data.document.activeElement === focus;\n}\nfunction after(data) {\n // restore focus to what it was before test and cleanup\n if (data.activeElement === document.body) {\n document.activeElement && document.activeElement.blur && document.activeElement.blur();\n if (platform.is.IE10) {\n // IE10 does not redirect focus to <body> when the activeElement is removed\n document.body.focus();\n }\n } else {\n data.activeElement && data.activeElement.focus && data.activeElement.focus();\n }\n document.body.removeChild(data.iframe);\n // restore scroll position\n window.scrollTop = data.windowScrollTop;\n window.scrollLeft = data.windowScrollLeft;\n document.body.scrollTop = data.bodyScrollTop;\n document.body.scrollLeft = data.bodyScrollLeft;\n}\nfunction detectFocus(tests) {\n var data = before();\n var results = {};\n Object.keys(tests).map(function(key) {\n results[key] = test(data, tests[key]);\n });\n after(data);\n return results;\n}\n// this file is overwritten by `npm run build:pre`\nvar version$1 = \"1.4.1\";\n/*\n Facility to cache test results in localStorage.\n\n USAGE:\n cache.get('key');\n cache.set('key', 'value');\n */ function readLocalStorage(key) {\n // allow reading from storage to retrieve previous support results\n // even while the document does not have focus\n var data = void 0;\n try {\n data = window.localStorage && window.localStorage.getItem(key);\n data = data ? JSON.parse(data) : {};\n } catch (e) {\n data = {};\n }\n return data;\n}\nfunction writeLocalStorage(key, value) {\n if (!document.hasFocus()) {\n // if the document does not have focus when tests are executed, focus() may\n // not be handled properly and events may not be dispatched immediately.\n // This can happen when a document is reloaded while Developer Tools have focus.\n try {\n window.localStorage && window.localStorage.removeItem(key);\n } catch (e) {\n // ignore\n }\n return;\n }\n try {\n window.localStorage && window.localStorage.setItem(key, JSON.stringify(value));\n } catch (e) {\n // ignore\n }\n}\nvar userAgent = typeof window !== \"undefined\" && window.navigator.userAgent || \"\";\nvar cacheKey = \"ally-supports-cache\";\nvar cache = readLocalStorage(cacheKey);\n// update the cache if ally or the user agent changed (newer version, etc)\nif (cache.userAgent !== userAgent || cache.version !== version$1) {\n cache = {};\n}\ncache.userAgent = userAgent;\ncache.version = version$1;\nvar cache$1 = {\n get: function get() {\n return cache;\n },\n set: function set(values) {\n Object.keys(values).forEach(function(key) {\n cache[key] = values[key];\n });\n cache.time = new Date().toISOString();\n writeLocalStorage(cacheKey, cache);\n }\n};\nfunction cssShadowPiercingDeepCombinator() {\n var combinator = void 0;\n // see https://dev.w3.org/csswg/css-scoping-1/#deep-combinator\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1117572\n // https://code.google.com/p/chromium/issues/detail?id=446051\n try {\n document.querySelector(\"html >>> :first-child\");\n combinator = \">>>\";\n } catch (noArrowArrowArrow) {\n try {\n // old syntax supported at least up to Chrome 41\n // https://code.google.com/p/chromium/issues/detail?id=446051\n document.querySelector(\"html /deep/ :first-child\");\n combinator = \"/deep/\";\n } catch (noDeep) {\n combinator = \"\";\n }\n }\n return combinator;\n}\nvar gif = \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\";\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaImgTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-tabindex-test\">' + '<area shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-tabindex-test\" tabindex=\"-1\" alt=\"\" src=\"' + gif + '\">';\n return element.querySelector(\"area\");\n }\n};\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-tabindex-test\">' + '<area href=\"#void\" tabindex=\"-1\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-tabindex-test\" alt=\"\" src=\"' + gif + '\">';\n return false;\n },\n validate: function validate(element, focusTarget, _document) {\n if (platform.is.GECKO) {\n // fixes https://github.com/medialize/ally.js/issues/35\n // Firefox loads the DataURI asynchronously, causing a false-negative\n return true;\n }\n var focus = element.querySelector(\"area\");\n focus.focus();\n return _document.activeElement === focus;\n }\n};\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusAreaWithoutHref = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-area-href-test\">' + '<area shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-area-href-test\" alt=\"\" src=\"' + gif + '\">';\n return element.querySelector(\"area\");\n },\n validate: function validate(element, focusTarget, _document) {\n if (platform.is.GECKO) {\n // fixes https://github.com/medialize/ally.js/issues/35\n // Firefox loads the DataURI asynchronously, causing a false-negative\n return true;\n }\n return _document.activeElement === focusTarget;\n }\n};\nvar focusAudioWithoutControls = {\n name: \"can-focus-audio-without-controls\",\n element: \"audio\",\n mutate: function mutate(element) {\n try {\n // invalid media file can trigger warning in console, data-uri to prevent HTTP request\n element.setAttribute(\"src\", gif);\n } catch (e) {\n // IE9 may throw \"Error: Not implemented\"\n }\n }\n};\nvar invalidGif = \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\";\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusBrokenImageMap = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"broken-image-map-test\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#broken-image-map-test\" alt=\"\" src=\"' + invalidGif + '\">';\n return element.querySelector(\"area\");\n }\n};\n// Children of focusable elements with display:flex are focusable in IE10-11\nvar focusChildrenOfFocusableFlexbox = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"-1\");\n element.setAttribute(\"style\", \"display: -webkit-flex; display: -ms-flexbox; display: flex;\");\n element.innerHTML = '<span style=\"display: block;\">hello</span>';\n return element.querySelector(\"span\");\n }\n};\n// fieldset[tabindex=0][disabled] should not be focusable, but Blink and WebKit disagree\n// @specification https://www.w3.org/TR/html5/disabled-elements.html#concept-element-disabled\n// @browser-issue Chromium https://crbug.com/453847\n// @browser-issue WebKit https://bugs.webkit.org/show_bug.cgi?id=141086\nvar focusFieldsetDisabled = {\n element: \"fieldset\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", 0);\n element.setAttribute(\"disabled\", \"disabled\");\n }\n};\nvar focusFieldset = {\n element: \"fieldset\",\n mutate: function mutate(element) {\n element.innerHTML = \"<legend>legend</legend><p>content</p>\";\n }\n};\n// elements with display:flex are focusable in IE10-11\nvar focusFlexboxContainer = {\n element: \"span\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"display: -webkit-flex; display: -ms-flexbox; display: flex;\");\n element.innerHTML = '<span style=\"display: block;\">hello</span>';\n }\n};\n// form[tabindex=0][disabled] should be focusable as the\n// specification doesn't know the disabled attribute on the form element\n// @specification https://www.w3.org/TR/html5/forms.html#the-form-element\nvar focusFormDisabled = {\n element: \"form\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", 0);\n element.setAttribute(\"disabled\", \"disabled\");\n }\n};\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// fixes https://github.com/medialize/ally.js/issues/20\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-ismap\nvar focusImgIsmap = {\n element: \"a\",\n mutate: function mutate(element) {\n element.href = \"#void\";\n element.innerHTML = '<img ismap src=\"' + gif + '\" alt=\"\">';\n return element.querySelector(\"img\");\n }\n};\n// NOTE: https://github.com/medialize/ally.js/issues/35\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\nvar focusImgUsemapTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"image-map-tabindex-test\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#image-map-tabindex-test\" tabindex=\"-1\" alt=\"\" ' + 'src=\"' + gif + '\">';\n return element.querySelector(\"img\");\n }\n};\nvar focusInHiddenIframe = {\n element: function element(wrapper, _document) {\n var iframe = _document.createElement(\"iframe\");\n // iframe must be part of the DOM before accessing the contentWindow is possible\n wrapper.appendChild(iframe);\n // create the iframe's default document (<html><head></head><body></body></html>)\n var iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.close();\n return iframe;\n },\n mutate: function mutate(iframe) {\n iframe.style.visibility = \"hidden\";\n var iframeDocument = iframe.contentWindow.document;\n var input = iframeDocument.createElement(\"input\");\n iframeDocument.body.appendChild(input);\n return input;\n },\n validate: function validate(iframe) {\n var iframeDocument = iframe.contentWindow.document;\n var focus = iframeDocument.querySelector(\"input\");\n return iframeDocument.activeElement === focus;\n }\n};\nvar result = !platform.is.WEBKIT;\nfunction focusInZeroDimensionObject() {\n return result;\n}\n// Firefox allows *any* value and treats invalid values like tabindex=\"-1\"\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\nvar focusInvalidTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"invalid-value\");\n }\n};\nvar focusLabelTabindex = {\n element: \"label\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"-1\");\n },\n validate: function validate(element, focusTarget, _document) {\n // force layout in Chrome 49, otherwise the element won't be focusable\n /* eslint-disable no-unused-vars */ var variableToPreventDeadCodeElimination = element.offsetHeight;\n /* eslint-enable no-unused-vars */ element.focus();\n return _document.activeElement === element;\n }\n};\nvar svg = \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtb\" + \"G5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBpZD0ic3ZnIj48dGV4dCB4PSIxMCIgeT0iMjAiIGlkPSJ\" + \"zdmctbGluay10ZXh0Ij50ZXh0PC90ZXh0Pjwvc3ZnPg==\";\n// Note: IE10 on BrowserStack does not like this test\nvar focusObjectSvgHidden = {\n element: \"object\",\n mutate: function mutate(element) {\n element.setAttribute(\"type\", \"image/svg+xml\");\n element.setAttribute(\"data\", svg);\n element.setAttribute(\"width\", \"200\");\n element.setAttribute(\"height\", \"50\");\n element.style.visibility = \"hidden\";\n }\n};\n// Note: IE10 on BrowserStack does not like this test\nvar focusObjectSvg = {\n name: \"can-focus-object-svg\",\n element: \"object\",\n mutate: function mutate(element) {\n element.setAttribute(\"type\", \"image/svg+xml\");\n element.setAttribute(\"data\", svg);\n element.setAttribute(\"width\", \"200\");\n element.setAttribute(\"height\", \"50\");\n },\n validate: function validate(element, focusTarget, _document) {\n if (platform.is.GECKO) {\n // Firefox seems to be handling the object creation asynchronously and thereby produces a false negative test result.\n // Because we know Firefox is able to focus object elements referencing SVGs, we simply cheat by sniffing the user agent string\n return true;\n }\n return _document.activeElement === element;\n }\n};\n// Every Environment except IE9 considers SWF objects focusable\nvar result$1 = !platform.is.IE9;\nfunction focusObjectSwf() {\n return result$1;\n}\nvar focusRedirectImgUsemap = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = '<map name=\"focus-redirect-img-usemap\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>' + '<img usemap=\"#focus-redirect-img-usemap\" alt=\"\" ' + 'src=\"' + gif + '\">';\n // focus the <img>, not the <div>\n return element.querySelector(\"img\");\n },\n validate: function validate(element, focusTarget, _document) {\n var target = element.querySelector(\"area\");\n return _document.activeElement === target;\n }\n};\n// see https://jsbin.com/nenirisage/edit?html,js,console,output\nvar focusRedirectLegend = {\n element: \"fieldset\",\n mutate: function mutate(element) {\n element.innerHTML = '<legend>legend</legend><input tabindex=\"-1\"><input tabindex=\"0\">';\n // take care of focus in validate();\n return false;\n },\n validate: function validate(element, focusTarget, _document) {\n var focusable = element.querySelector('input[tabindex=\"-1\"]');\n var tabbable = element.querySelector('input[tabindex=\"0\"]');\n // Firefox requires this test to focus the <fieldset> first, while this is not necessary in\n // https://jsbin.com/nenirisage/edit?html,js,console,output\n element.focus();\n element.querySelector(\"legend\").focus();\n return _document.activeElement === focusable && \"focusable\" || _document.activeElement === tabbable && \"tabbable\" || \"\";\n }\n};\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollBody = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"width: 100px; height: 50px; overflow: auto;\");\n element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n return element.querySelector(\"div\");\n }\n};\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollContainerWithoutOverflow = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"width: 100px; height: 50px;\");\n element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n }\n};\n// https://github.com/medialize/ally.js/issues/21\nvar focusScrollContainer = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"style\", \"width: 100px; height: 50px; overflow: auto;\");\n element.innerHTML = '<div style=\"width: 500px; height: 40px;\">scrollable content</div>';\n }\n};\nvar focusSummary = {\n element: \"details\",\n mutate: function mutate(element) {\n element.innerHTML = \"<summary>foo</summary><p>content</p>\";\n return element.firstElementChild;\n }\n};\nfunction makeFocusableForeignObject() {\n // Constructs <foreignObject width=\"30\" height=\"30\"><input type=\"text\"/></foreignObject>\n // without raising a Trusted Types violation\n var foreignObject = document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\");\n foreignObject.width.baseVal.value = 30;\n foreignObject.height.baseVal.value = 30;\n foreignObject.appendChild(document.createElement(\"input\"));\n foreignObject.lastChild.type = \"text\";\n return foreignObject;\n}\nfunction focusSvgForeignObjectHack(element) {\n // Edge13, Edge14: foreignObject focus hack\n // https://jsbin.com/kunehinugi/edit?html,js,output\n // https://jsbin.com/fajagi/3/edit?html,js,output\n var isSvgElement = element.ownerSVGElement || element.nodeName.toLowerCase() === \"svg\";\n if (!isSvgElement) {\n return false;\n }\n // inject and focus an <input> element into the SVG element to receive focus\n var foreignObject = makeFocusableForeignObject();\n element.appendChild(foreignObject);\n var input = foreignObject.querySelector(\"input\");\n input.focus();\n // upon disabling the activeElement, IE and Edge\n // will not shift focus to <body> like all the other\n // browsers, but instead find the first focusable\n // ancestor and shift focus to that\n input.disabled = true;\n // clean up\n element.removeChild(foreignObject);\n return true;\n}\nfunction generate(element) {\n return '<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">' + element + \"</svg>\";\n}\nfunction focus(element) {\n if (element.focus) {\n return;\n }\n try {\n HTMLElement.prototype.focus.call(element);\n } catch (e) {\n focusSvgForeignObjectHack(element);\n }\n}\nfunction validate(element, focusTarget, _document) {\n focus(focusTarget);\n return _document.activeElement === focusTarget;\n}\nvar focusSvgFocusableAttribute = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<text focusable=\"true\">a</text>');\n return element.querySelector(\"text\");\n },\n validate: validate\n};\nvar focusSvgTabindexAttribute = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<text tabindex=\"0\">a</text>');\n return element.querySelector(\"text\");\n },\n validate: validate\n};\nvar focusSvgNegativeTabindexAttribute = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<text tabindex=\"-1\">a</text>');\n return element.querySelector(\"text\");\n },\n validate: validate\n};\nvar focusSvgUseTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate([\n '<g id=\"ally-test-target\"><a xlink:href=\"#void\"><text>link</text></a></g>',\n '<use xlink:href=\"#ally-test-target\" x=\"0\" y=\"0\" tabindex=\"-1\" />'\n ].join(\"\"));\n return element.querySelector(\"use\");\n },\n validate: validate\n};\nvar focusSvgForeignobjectTabindex = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate('<foreignObject tabindex=\"-1\"><input type=\"text\" /></foreignObject>');\n // Safari 8's quersSelector() can't identify foreignObject, but getElementyByTagName() can\n return element.querySelector(\"foreignObject\") || element.getElementsByTagName(\"foreignObject\")[0];\n },\n validate: validate\n};\n// Firefox seems to be handling the SVG-document-in-iframe creation asynchronously\n// and thereby produces a false negative test result. Thus the test is pointless\n// and we resort to UA sniffing once again.\n// see http://jsbin.com/vunadohoko/1/edit?js,console,output\nvar result$2 = Boolean(platform.is.GECKO && typeof SVGElement !== \"undefined\" && SVGElement.prototype.focus);\nfunction focusSvgInIframe() {\n return result$2;\n}\nvar focusSvg = {\n element: \"div\",\n mutate: function mutate(element) {\n element.innerHTML = generate(\"\");\n return element.firstChild;\n },\n validate: validate\n};\n// Firefox allows *any* value and treats invalid values like tabindex=\"-1\"\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\nvar focusTabindexTrailingCharacters = {\n element: \"div\",\n mutate: function mutate(element) {\n element.setAttribute(\"tabindex\", \"3x\");\n }\n};\nvar focusTable = {\n element: \"table\",\n mutate: function mutate(element, wrapper, _document) {\n // IE9 has a problem replacing TBODY contents with innerHTML.\n // https://stackoverflow.com/a/8097055/515124\n // element.innerHTML = '<tr><td>cell</td></tr>';\n var fragment = _document.createDocumentFragment();\n fragment.innerHTML = \"<tr><td>cell</td></tr>\";\n element.appendChild(fragment);\n }\n};\nvar focusVideoWithoutControls = {\n element: \"video\",\n mutate: function mutate(element) {\n try {\n // invalid media file can trigger warning in console, data-uri to prevent HTTP request\n element.setAttribute(\"src\", gif);\n } catch (e) {\n // IE9 may throw \"Error: Not implemented\"\n }\n }\n};\n// https://jsbin.com/vafaba/3/edit?html,js,console,output\nvar result$3 = platform.is.GECKO || platform.is.TRIDENT || platform.is.EDGE;\nfunction tabsequenceAreaAtImgPosition() {\n return result$3;\n}\nvar testCallbacks = {\n cssShadowPiercingDeepCombinator: cssShadowPiercingDeepCombinator,\n focusInZeroDimensionObject: focusInZeroDimensionObject,\n focusObjectSwf: focusObjectSwf,\n focusSvgInIframe: focusSvgInIframe,\n tabsequenceAreaAtImgPosition: tabsequenceAreaAtImgPosition\n};\nvar testDescriptions = {\n focusAreaImgTabindex: focusAreaImgTabindex,\n focusAreaTabindex: focusAreaTabindex,\n focusAreaWithoutHref: focusAreaWithoutHref,\n focusAudioWithoutControls: focusAudioWithoutControls,\n focusBrokenImageMap: focusBrokenImageMap,\n focusChildrenOfFocusableFlexbox: focusChildrenOfFocusableFlexbox,\n focusFieldsetDisabled: focusFieldsetDisabled,\n focusFieldset: focusFieldset,\n focusFlexboxContainer: focusFlexboxContainer,\n focusFormDisabled: focusFormDisabled,\n focusImgIsmap: focusImgIsmap,\n focusImgUsemapTabindex: focusImgUsemapTabindex,\n focusInHiddenIframe: focusInHiddenIframe,\n focusInvalidTabindex: focusInvalidTabindex,\n focusLabelTabindex: focusLabelTabindex,\n focusObjectSvg: focusObjectSvg,\n focusObjectSvgHidden: focusObjectSvgHidden,\n focusRedirectImgUsemap: focusRedirectImgUsemap,\n focusRedirectLegend: focusRedirectLegend,\n focusScrollBody: focusScrollBody,\n focusScrollContainerWithoutOverflow: focusScrollContainerWithoutOverflow,\n focusScrollContainer: focusScrollContainer,\n focusSummary: focusSummary,\n focusSvgFocusableAttribute: focusSvgFocusableAttribute,\n focusSvgTabindexAttribute: focusSvgTabindexAttribute,\n focusSvgNegativeTabindexAttribute: focusSvgNegativeTabindexAttribute,\n focusSvgUseTabindex: focusSvgUseTabindex,\n focusSvgForeignobjectTabindex: focusSvgForeignobjectTabindex,\n focusSvg: focusSvg,\n focusTabindexTrailingCharacters: focusTabindexTrailingCharacters,\n focusTable: focusTable,\n focusVideoWithoutControls: focusVideoWithoutControls\n};\nfunction executeTests() {\n var results = detectFocus(testDescriptions);\n Object.keys(testCallbacks).forEach(function(key) {\n results[key] = testCallbacks[key]();\n });\n return results;\n}\nvar supportsCache = null;\nfunction _supports() {\n if (supportsCache) {\n return supportsCache;\n }\n supportsCache = cache$1.get();\n if (!supportsCache.time) {\n cache$1.set(executeTests());\n supportsCache = cache$1.get();\n }\n return supportsCache;\n}\nvar supports = void 0;\n// https://www.w3.org/TR/html5/infrastructure.html#rules-for-parsing-integers\n// NOTE: all browsers agree to allow trailing spaces as well\nvar validIntegerPatternNoTrailing = /^\\s*(-|\\+)?[0-9]+\\s*$/;\nvar validIntegerPatternWithTrailing = /^\\s*(-|\\+)?[0-9]+.*$/;\nfunction isValidTabindex(context) {\n if (!supports) {\n supports = _supports();\n }\n var validIntegerPattern = supports.focusTabindexTrailingCharacters ? validIntegerPatternWithTrailing : validIntegerPatternNoTrailing;\n var element = contextToElement({\n label: \"is/valid-tabindex\",\n resolveDocument: true,\n context: context\n });\n // Edge 14 has a capitalization problem on SVG elements,\n // see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9282058/\n var hasTabindex = element.hasAttribute(\"tabindex\");\n var hasTabIndex = element.hasAttribute(\"tabIndex\");\n if (!hasTabindex && !hasTabIndex) {\n return false;\n }\n // older Firefox and Internet Explorer don't support tabindex on SVG elements\n var isSvgElement = element.ownerSVGElement || element.nodeName.toLowerCase() === \"svg\";\n if (isSvgElement && !supports.focusSvgTabindexAttribute) {\n return false;\n }\n // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\n if (supports.focusInvalidTabindex) {\n return true;\n }\n // an element matches the tabindex selector even if its value is invalid\n var tabindex = element.getAttribute(hasTabindex ? \"tabindex\" : \"tabIndex\");\n // IE11 parses tabindex=\"\" as the value \"-32768\"\n // @browser-issue Trident https://connect.microsoft.com/IE/feedback/details/1072965\n if (tabindex === \"-32768\") {\n return false;\n }\n return Boolean(tabindex && validIntegerPattern.test(tabindex));\n}\nfunction tabindexValue(element) {\n if (!isValidTabindex(element)) {\n return null;\n }\n // Edge 14 has a capitalization problem on SVG elements,\n // see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9282058/\n var hasTabindex = element.hasAttribute(\"tabindex\");\n var attributeName = hasTabindex ? \"tabindex\" : \"tabIndex\";\n // @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\n var tabindex = parseInt(element.getAttribute(attributeName), 10);\n return isNaN(tabindex) ? -1 : tabindex;\n}\n// this is a shared utility file for focus-relevant.js and tabbable.js\n// separate testing of this file's functions is not necessary,\n// as they're implicitly tested by way of the consumers\nfunction isUserModifyWritable(style) {\n // https://www.w3.org/TR/1999/WD-css3-userint-19990916#user-modify\n // https://github.com/medialize/ally.js/issues/17\n var userModify = style.webkitUserModify || \"\";\n return Boolean(userModify && userModify.indexOf(\"write\") !== -1);\n}\nfunction hasCssOverflowScroll(style) {\n return [\n style.getPropertyValue(\"overflow\"),\n style.getPropertyValue(\"overflow-x\"),\n style.getPropertyValue(\"overflow-y\")\n ].some(function(overflow) {\n return overflow === \"auto\" || overflow === \"scroll\";\n });\n}\nfunction hasCssDisplayFlex(style) {\n return style.display.indexOf(\"flex\") > -1;\n}\nfunction isScrollableContainer(element, nodeName, parentNodeName, parentStyle) {\n if (nodeName !== \"div\" && nodeName !== \"span\") {\n // Internet Explorer advances scrollable containers and bodies to focusable\n // only if the scrollable container is <div> or <span> - this does *not*\n // happen for <section>, <article>, …\n return false;\n }\n if (parentNodeName && parentNodeName !== \"div\" && parentNodeName !== \"span\" && !hasCssOverflowScroll(parentStyle)) {\n return false;\n }\n return element.offsetHeight < element.scrollHeight || element.offsetWidth < element.scrollWidth;\n}\nvar supports$1 = void 0;\nfunction isFocusRelevantRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n flexbox: false,\n scrollable: false,\n shadow: false\n } : _ref$except;\n if (!supports$1) {\n supports$1 = _supports();\n }\n var element = contextToElement({\n label: \"is/focus-relevant\",\n resolveDocument: true,\n context: context\n });\n if (!except.shadow && element.shadowRoot) {\n // a ShadowDOM host receives focus when the focus moves to its content\n return true;\n }\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName === \"input\" && element.type === \"hidden\") {\n // input[type=\"hidden\"] supports.cannot be focused\n return false;\n }\n if (nodeName === \"input\" || nodeName === \"select\" || nodeName === \"button\" || nodeName === \"textarea\") {\n return true;\n }\n if (nodeName === \"legend\" && supports$1.focusRedirectLegend) {\n // specifics filtered in is/focusable\n return true;\n }\n if (nodeName === \"label\") {\n // specifics filtered in is/focusable\n return true;\n }\n if (nodeName === \"area\") {\n // specifics filtered in is/focusable\n return true;\n }\n if (nodeName === \"a\" && element.hasAttribute(\"href\")) {\n return true;\n }\n if (nodeName === \"object\" && element.hasAttribute(\"usemap\")) {\n // object[usemap] is not focusable in any browser\n return false;\n }\n if (nodeName === \"object\") {\n var svgType = element.getAttribute(\"type\");\n if (!supports$1.focusObjectSvg && svgType === \"image/svg+xml\") {\n // object[type=\"image/svg+xml\"] is not focusable in Internet Explorer\n return false;\n } else if (!supports$1.focusObjectSwf && svgType === \"application/x-shockwave-flash\") {\n // object[type=\"application/x-shockwave-flash\"] is not focusable in Internet Explorer 9\n return false;\n }\n }\n if (nodeName === \"iframe\" || nodeName === \"object\") {\n // browsing context containers\n return true;\n }\n if (nodeName === \"embed\" || nodeName === \"keygen\") {\n // embed is considered focus-relevant but not focusable\n // see https://github.com/medialize/ally.js/issues/82\n return true;\n }\n if (element.hasAttribute(\"contenteditable\")) {\n // also see CSS property user-modify below\n return true;\n }\n if (nodeName === \"audio\" && (supports$1.focusAudioWithoutControls || element.hasAttribute(\"controls\"))) {\n return true;\n }\n if (nodeName === \"video\" && (supports$1.focusVideoWithoutControls || element.hasAttribute(\"controls\"))) {\n return true;\n }\n if (supports$1.focusSummary && nodeName === \"summary\") {\n return true;\n }\n var validTabindex = isValidTabindex(element);\n if (nodeName === \"img\" && element.hasAttribute(\"usemap\")) {\n // Gecko, Trident and Edge do not allow an image with an image map and tabindex to be focused,\n // it appears the tabindex is overruled so focus is still forwarded to the <map>\n return validTabindex && supports$1.focusImgUsemapTabindex || supports$1.focusRedirectImgUsemap;\n }\n if (supports$1.focusTable && (nodeName === \"table\" || nodeName === \"td\")) {\n // IE10-11 supports.can focus <table> and <td>\n return true;\n }\n if (supports$1.focusFieldset && nodeName === \"fieldset\") {\n // IE10-11 supports.can focus <fieldset>\n return true;\n }\n var isSvgElement = nodeName === \"svg\";\n var isSvgContent = element.ownerSVGElement;\n var focusableAttribute = element.getAttribute(\"focusable\");\n var tabindex = tabindexValue(element);\n if (nodeName === \"use\" && tabindex !== null && !supports$1.focusSvgUseTabindex) {\n // <use> cannot be made focusable by adding a tabindex attribute anywhere but Blink and WebKit\n return false;\n }\n if (nodeName === \"foreignobject\") {\n // <use> can only be made focusable in Blink and WebKit\n return tabindex !== null && supports$1.focusSvgForeignobjectTabindex;\n }\n if (elementMatches(element, \"svg a\") && element.hasAttribute(\"xlink:href\")) {\n return true;\n }\n if ((isSvgElement || isSvgContent) && element.focus && !supports$1.focusSvgNegativeTabindexAttribute && tabindex < 0) {\n // Firefox 51 and 52 treat any natively tabbable SVG element with\n // tabindex=\"-1\" as tabbable and everything else as inert\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1302340\n return false;\n }\n if (isSvgElement) {\n return validTabindex || supports$1.focusSvg || supports$1.focusSvgInIframe || // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n Boolean(supports$1.focusSvgFocusableAttribute && focusableAttribute && focusableAttribute === \"true\");\n }\n if (isSvgContent) {\n if (supports$1.focusSvgTabindexAttribute && validTabindex) {\n return true;\n }\n if (supports$1.focusSvgFocusableAttribute) {\n // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n return focusableAttribute === \"true\";\n }\n }\n // https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute\n if (validTabindex) {\n return true;\n }\n var style = window.getComputedStyle(element, null);\n if (isUserModifyWritable(style)) {\n return true;\n }\n if (supports$1.focusImgIsmap && nodeName === \"img\" && element.hasAttribute(\"ismap\")) {\n // IE10-11 considers the <img> in <a href><img ismap> focusable\n // https://github.com/medialize/ally.js/issues/20\n var hasLinkParent = getParents({\n context: element\n }).some(function(parent) {\n return parent.nodeName.toLowerCase() === \"a\" && parent.hasAttribute(\"href\");\n });\n if (hasLinkParent) {\n return true;\n }\n }\n // https://github.com/medialize/ally.js/issues/21\n if (!except.scrollable && supports$1.focusScrollContainer) {\n if (supports$1.focusScrollContainerWithoutOverflow) {\n // Internet Explorer does will consider the scrollable area focusable\n // if the element is a <div> or a <span> and it is in fact scrollable,\n // regardless of the CSS overflow property\n if (isScrollableContainer(element, nodeName)) {\n return true;\n }\n } else if (hasCssOverflowScroll(style)) {\n // Firefox requires proper overflow setting, IE does not necessarily\n // https://developer.mozilla.org/docs/Web/CSS/overflow\n return true;\n }\n }\n if (!except.flexbox && supports$1.focusFlexboxContainer && hasCssDisplayFlex(style)) {\n // elements with display:flex are focusable in IE10-11\n return true;\n }\n var parent = element.parentElement;\n if (!except.scrollable && parent) {\n var parentNodeName = parent.nodeName.toLowerCase();\n var parentStyle = window.getComputedStyle(parent, null);\n if (supports$1.focusScrollBody && isScrollableContainer(parent, nodeName, parentNodeName, parentStyle)) {\n // scrollable bodies are focusable Internet Explorer\n // https://github.com/medialize/ally.js/issues/21\n return true;\n }\n // Children of focusable elements with display:flex are focusable in IE10-11\n if (supports$1.focusChildrenOfFocusableFlexbox) {\n if (hasCssDisplayFlex(parentStyle)) {\n return true;\n }\n }\n }\n // NOTE: elements marked as inert are not focusable,\n // but that property is not exposed to the DOM\n // https://www.w3.org/TR/html5/editing.html#inert\n return false;\n}\n// bind exceptions to an iterator callback\nisFocusRelevantRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isFocusRelevant = function isFocusRelevant(context) {\n return isFocusRelevantRules({\n context: context,\n except: except\n });\n };\n isFocusRelevant.rules = isFocusRelevantRules;\n return isFocusRelevant;\n};\n// provide isFocusRelevant(context) as default iterator callback\nvar isFocusRelevant = isFocusRelevantRules.except({});\nfunction findIndex(array, callback) {\n // attempt to use native or polyfilled Array#findIndex first\n if (array.findIndex) {\n return array.findIndex(callback);\n }\n var length = array.length;\n // shortcut if the array is empty\n if (length === 0) {\n return -1;\n }\n // otherwise loop over array\n for(var i = 0; i < length; i++){\n if (callback(array[i], i, array)) {\n return i;\n }\n }\n return -1;\n}\nfunction getContentDocument(node) {\n try {\n // works on <object> and <iframe>\n return node.contentDocument || // works on <object> and <iframe>\n node.contentWindow && node.contentWindow.document || // works on <object> and <iframe> that contain SVG\n node.getSVGDocument && node.getSVGDocument() || null;\n } catch (e) {\n // SecurityError: Failed to read the 'contentDocument' property from 'HTMLObjectElement'\n // also IE may throw member not found exception e.g. on <object type=\"image/png\">\n return null;\n }\n}\nfunction getWindow(node) {\n var _document = getDocument(node);\n return _document.defaultView || window;\n}\nvar shadowPrefix = void 0;\nfunction selectInShadows(selector) {\n if (typeof shadowPrefix !== \"string\") {\n var operator = cssShadowPiercingDeepCombinator();\n if (operator) {\n shadowPrefix = \", html \" + operator + \" \";\n }\n }\n if (!shadowPrefix) {\n return selector;\n }\n return selector + shadowPrefix + selector.replace(/\\s*,\\s*/g, \",\").split(\",\").join(shadowPrefix);\n}\nvar selector = void 0;\nfunction findDocumentHostElement(_window) {\n if (!selector) {\n selector = selectInShadows(\"object, iframe\");\n }\n if (_window._frameElement !== undefined) {\n return _window._frameElement;\n }\n _window._frameElement = null;\n var potentialHosts = _window.parent.document.querySelectorAll(selector);\n [].some.call(potentialHosts, function(element) {\n var _document = getContentDocument(element);\n if (_document !== _window.document) {\n return false;\n }\n _window._frameElement = element;\n return true;\n });\n return _window._frameElement;\n}\nfunction getFrameElement(element) {\n var _window = getWindow(element);\n if (!_window.parent || _window.parent === _window) {\n // if there is no parent browsing context,\n // we're not going to get a frameElement either way\n return null;\n }\n try {\n // see https://developer.mozilla.org/docs/Web/API/Window/frameElement\n // does not work within <embed> anywhere, and not within in <object> in IE\n return _window.frameElement || findDocumentHostElement(_window);\n } catch (e) {\n return null;\n }\n}\n// https://www.w3.org/TR/html5/rendering.html#being-rendered\n// <area> is not rendered, but we *consider* it visible to simplfiy this function's usage\nvar notRenderedElementsPattern = /^(area)$/;\nfunction computedStyle(element, property) {\n return window.getComputedStyle(element, null).getPropertyValue(property);\n}\nfunction notDisplayed(_path) {\n return _path.some(function(element) {\n // display:none is not visible (optimized away at layout)\n return computedStyle(element, \"display\") === \"none\";\n });\n}\nfunction notVisible(_path) {\n // https://github.com/jquery/jquery-ui/blob/master/ui/core.js#L109-L114\n // NOTE: a nested element can reverse visibility:hidden|collapse by explicitly setting visibility:visible\n // NOTE: visibility can be [\"\", \"visible\", \"hidden\", \"collapse\"]\n var hidden = findIndex(_path, function(element) {\n var visibility = computedStyle(element, \"visibility\");\n return visibility === \"hidden\" || visibility === \"collapse\";\n });\n if (hidden === -1) {\n // there is no hidden element\n return false;\n }\n var visible = findIndex(_path, function(element) {\n return computedStyle(element, \"visibility\") === \"visible\";\n });\n if (visible === -1) {\n // there is no visible element (but a hidden element)\n return true;\n }\n if (hidden < visible) {\n // there is a hidden element and it's closer than the first visible element\n return true;\n }\n // there may be a hidden element, but the closest element is visible\n return false;\n}\nfunction collapsedParent(_path) {\n var offset = 1;\n if (_path[0].nodeName.toLowerCase() === \"summary\") {\n offset = 2;\n }\n return _path.slice(offset).some(function(element) {\n // \"content children\" of a closed details element are not visible\n return element.nodeName.toLowerCase() === \"details\" && element.open === false;\n });\n}\nfunction isVisibleRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n notRendered: false,\n cssDisplay: false,\n cssVisibility: false,\n detailsElement: false,\n browsingContext: false\n } : _ref$except;\n var element = contextToElement({\n label: \"is/visible\",\n resolveDocument: true,\n context: context\n });\n var nodeName = element.nodeName.toLowerCase();\n if (!except.notRendered && notRenderedElementsPattern.test(nodeName)) {\n return true;\n }\n var _path = getParents({\n context: element\n });\n // in Internet Explorer <audio> has a default display: none, where others have display: inline\n // but IE allows focusing <audio style=\"display:none\">, but not <div display:none><audio>\n // this is irrelevant to other browsers, as the controls attribute is required to make <audio> focusable\n var isAudioWithoutControls = nodeName === \"audio\" && !element.hasAttribute(\"controls\");\n if (!except.cssDisplay && notDisplayed(isAudioWithoutControls ? _path.slice(1) : _path)) {\n return false;\n }\n if (!except.cssVisibility && notVisible(_path)) {\n return false;\n }\n if (!except.detailsElement && collapsedParent(_path)) {\n return false;\n }\n if (!except.browsingContext) {\n // elements within a browsing context are affected by the\n // browsing context host element's visibility and tabindex\n var frameElement = getFrameElement(element);\n var _isVisible = isVisibleRules.except(except);\n if (frameElement && !_isVisible(frameElement)) {\n return false;\n }\n }\n return true;\n}\n// bind exceptions to an iterator callback\nisVisibleRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isVisible = function isVisible(context) {\n return isVisibleRules({\n context: context,\n except: except\n });\n };\n isVisible.rules = isVisibleRules;\n return isVisible;\n};\n// provide isVisible(context) as default iterator callback\nvar isVisible = isVisibleRules.except({});\nfunction getMapByName(name, _document) {\n // apparently getElementsByName() also considers id attribute in IE & opera\n // https://developer.mozilla.org/docs/Web/API/Document/getElementsByName\n var map = _document.querySelector('map[name=\"' + (0, _cssescape.default)(name) + '\"]');\n return map || null;\n}\nfunction getImageOfArea(element) {\n var map = element.parentElement;\n if (!map.name || map.nodeName.toLowerCase() !== \"map\") {\n return null;\n }\n // NOTE: image maps can also be applied to <object> with image content,\n // but no browser supports this at the moment\n // HTML5 specifies HTMLMapElement.images to be an HTMLCollection of all\n // <img> and <object> referencing the <map> element, but no browser implements this\n // https://www.w3.org/TR/html5/embedded-content-0.html#the-map-element\n // https://developer.mozilla.org/docs/Web/API/HTMLMapElement\n // the image must be valid and loaded for the map to take effect\n var _document = getDocument(element);\n return _document.querySelector('img[usemap=\"#' + (0, _cssescape.default)(map.name) + '\"]') || null;\n}\nvar supports$2 = void 0;\n// https://developer.mozilla.org/docs/Web/HTML/Element/map\n// https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\n// https://github.com/jquery/jquery-ui/blob/master/ui/core.js#L88-L107\nfunction isValidArea(context) {\n if (!supports$2) {\n supports$2 = _supports();\n }\n var element = contextToElement({\n label: \"is/valid-area\",\n context: context\n });\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName !== \"area\") {\n return false;\n }\n var hasTabindex = element.hasAttribute(\"tabindex\");\n if (!supports$2.focusAreaTabindex && hasTabindex) {\n // Blink and WebKit do not consider <area tabindex=\"-1\" href=\"#void\"> focusable\n return false;\n }\n var img = getImageOfArea(element);\n if (!img || !isVisible(img)) {\n return false;\n }\n // Firefox only allows fully loaded images to reference image maps\n // https://stereochro.me/ideas/detecting-broken-images-js\n if (!supports$2.focusBrokenImageMap && (!img.complete || !img.naturalHeight || img.offsetWidth <= 0 || img.offsetHeight <= 0)) {\n return false;\n }\n // Firefox supports.can focus area elements even if they don't have an href attribute\n if (!supports$2.focusAreaWithoutHref && !element.href) {\n // Internet explorer supports.can focus area elements without href if either\n // the area element or the image element has a tabindex attribute\n return supports$2.focusAreaTabindex && hasTabindex || supports$2.focusAreaImgTabindex && img.hasAttribute(\"tabindex\");\n }\n // https://developer.mozilla.org/docs/Web/HTML/Element/img#attr-usemap\n var childOfInteractive = getParents({\n context: img\n }).slice(1).some(function(_element) {\n var name = _element.nodeName.toLowerCase();\n return name === \"button\" || name === \"a\";\n });\n if (childOfInteractive) {\n return false;\n }\n return true;\n}\nvar supports$3 = void 0;\n// https://www.w3.org/TR/html5/disabled-elements.html#concept-element-disabled\nvar disabledElementsPattern = void 0;\nvar disabledElements = {\n input: true,\n select: true,\n textarea: true,\n button: true,\n fieldset: true,\n form: true\n};\nfunction isNativeDisabledSupported(context) {\n if (!supports$3) {\n supports$3 = _supports();\n if (supports$3.focusFieldsetDisabled) {\n delete disabledElements.fieldset;\n }\n if (supports$3.focusFormDisabled) {\n delete disabledElements.form;\n }\n disabledElementsPattern = new RegExp(\"^(\" + Object.keys(disabledElements).join(\"|\") + \")$\");\n }\n var element = contextToElement({\n label: \"is/native-disabled-supported\",\n context: context\n });\n var nodeName = element.nodeName.toLowerCase();\n return Boolean(disabledElementsPattern.test(nodeName));\n}\nvar supports$4 = void 0;\nfunction isDisabledFieldset(element) {\n var nodeName = element.nodeName.toLowerCase();\n return nodeName === \"fieldset\" && element.disabled;\n}\nfunction isDisabledForm(element) {\n var nodeName = element.nodeName.toLowerCase();\n return nodeName === \"form\" && element.disabled;\n}\nfunction isDisabled(context) {\n if (!supports$4) {\n supports$4 = _supports();\n }\n var element = contextToElement({\n label: \"is/disabled\",\n context: context\n });\n if (element.hasAttribute(\"data-ally-disabled\")) {\n // treat ally's element/disabled like the DOM native element.disabled\n return true;\n }\n if (!isNativeDisabledSupported(element)) {\n // non-form elements do not support the disabled attribute\n return false;\n }\n if (element.disabled) {\n // the element itself is disabled\n return true;\n }\n var parents = getParents({\n context: element\n });\n if (parents.some(isDisabledFieldset)) {\n // a parental <fieldset> is disabld and inherits the state onto this element\n return true;\n }\n if (!supports$4.focusFormDisabled && parents.some(isDisabledForm)) {\n // a parental <form> is disabld and inherits the state onto this element\n return true;\n }\n return false;\n}\nfunction isOnlyTabbableRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n onlyFocusableBrowsingContext: false,\n visible: false\n } : _ref$except;\n var element = contextToElement({\n label: \"is/only-tabbable\",\n resolveDocument: true,\n context: context\n });\n if (!except.visible && !isVisible(element)) {\n return false;\n }\n if (!except.onlyFocusableBrowsingContext && (platform.is.GECKO || platform.is.TRIDENT || platform.is.EDGE)) {\n var frameElement = getFrameElement(element);\n if (frameElement) {\n if (tabindexValue(frameElement) < 0) {\n // iframe[tabindex=\"-1\"] and object[tabindex=\"-1\"] inherit the\n // tabbable demotion onto elements of their browsing contexts\n return false;\n }\n }\n }\n var nodeName = element.nodeName.toLowerCase();\n var tabindex = tabindexValue(element);\n if (nodeName === \"label\" && platform.is.GECKO) {\n // Firefox cannot focus, but tab to: label[tabindex=0]\n return tabindex !== null && tabindex >= 0;\n }\n // SVG Elements were keyboard focusable but not script focusable before Firefox 51.\n // Firefox 51 added the focus management DOM API (.focus and .blur) to SVGElement,\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=778654\n if (platform.is.GECKO && element.ownerSVGElement && !element.focus) {\n if (nodeName === \"a\" && element.hasAttribute(\"xlink:href\")) {\n // any focusable child of <svg> cannot be focused, but tabbed to\n if (platform.is.GECKO) {\n return true;\n }\n }\n }\n return false;\n}\n// bind exceptions to an iterator callback\nisOnlyTabbableRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isOnlyTabbable = function isOnlyTabbable(context) {\n return isOnlyTabbableRules({\n context: context,\n except: except\n });\n };\n isOnlyTabbable.rules = isOnlyTabbableRules;\n return isOnlyTabbable;\n};\n// provide isOnlyTabbable(context) as default iterator callback\nvar isOnlyTabbable = isOnlyTabbableRules.except({});\nvar supports$5 = void 0;\nfunction isOnlyFocusRelevant(element) {\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName === \"embed\" || nodeName === \"keygen\") {\n // embed is considered focus-relevant but not focusable\n // see https://github.com/medialize/ally.js/issues/82\n return true;\n }\n var _tabindex = tabindexValue(element);\n if (element.shadowRoot && _tabindex === null) {\n // ShadowDOM host elements *may* receive focus\n // even though they are not considered focuable\n return true;\n }\n if (nodeName === \"label\") {\n // <label tabindex=\"0\"> is only tabbable in Firefox, not script-focusable\n // there's no way to make an element focusable other than by adding a tabindex,\n // and focus behavior of the label element seems hard-wired to ignore tabindex\n // in some browsers (like Gecko, Blink and WebKit)\n return !supports$5.focusLabelTabindex || _tabindex === null;\n }\n if (nodeName === \"legend\") {\n return _tabindex === null;\n }\n if (supports$5.focusSvgFocusableAttribute && (element.ownerSVGElement || nodeName === \"svg\")) {\n // Internet Explorer understands the focusable attribute introduced in SVG Tiny 1.2\n var focusableAttribute = element.getAttribute(\"focusable\");\n return focusableAttribute && focusableAttribute === \"false\";\n }\n if (nodeName === \"img\" && element.hasAttribute(\"usemap\")) {\n // Gecko, Trident and Edge do not allow an image with an image map and tabindex to be focused,\n // it appears the tabindex is overruled so focus is still forwarded to the <map>\n return _tabindex === null || !supports$5.focusImgUsemapTabindex;\n }\n if (nodeName === \"area\") {\n // all <area>s are considered relevant,\n // but only the valid <area>s are focusable\n return !isValidArea(element);\n }\n return false;\n}\nfunction isFocusableRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n disabled: false,\n visible: false,\n onlyTabbable: false\n } : _ref$except;\n if (!supports$5) {\n supports$5 = _supports();\n }\n var _isOnlyTabbable = isOnlyTabbable.rules.except({\n onlyFocusableBrowsingContext: true,\n visible: except.visible\n });\n var element = contextToElement({\n label: \"is/focusable\",\n resolveDocument: true,\n context: context\n });\n var focusRelevant = isFocusRelevant.rules({\n context: element,\n except: except\n });\n if (!focusRelevant || isOnlyFocusRelevant(element)) {\n return false;\n }\n if (!except.disabled && isDisabled(element)) {\n return false;\n }\n if (!except.onlyTabbable && _isOnlyTabbable(element)) {\n // some elements may be keyboard focusable, but not script focusable\n return false;\n }\n // elements that are not rendered, cannot be focused\n if (!except.visible) {\n var visibilityOptions = {\n context: element,\n except: {}\n };\n if (supports$5.focusInHiddenIframe) {\n // WebKit and Blink can focus content in hidden <iframe> and <object>\n visibilityOptions.except.browsingContext = true;\n }\n if (supports$5.focusObjectSvgHidden) {\n // Blink allows focusing the object element, even if it has visibility: hidden;\n // @browser-issue Blink https://code.google.com/p/chromium/issues/detail?id=586191\n var _nodeName2 = element.nodeName.toLowerCase();\n if (_nodeName2 === \"object\") {\n visibilityOptions.except.cssVisibility = true;\n }\n }\n if (!isVisible.rules(visibilityOptions)) {\n return false;\n }\n }\n var frameElement = getFrameElement(element);\n if (frameElement) {\n var _nodeName = frameElement.nodeName.toLowerCase();\n if (_nodeName === \"object\" && !supports$5.focusInZeroDimensionObject) {\n if (!frameElement.offsetWidth || !frameElement.offsetHeight) {\n // WebKit can not focus content in <object> if it doesn't have dimensions\n return false;\n }\n }\n }\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName === \"svg\" && supports$5.focusSvgInIframe && !frameElement && element.getAttribute(\"tabindex\") === null) {\n return false;\n }\n return true;\n}\n// bind exceptions to an iterator callback\nisFocusableRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isFocusable = function isFocusable(context) {\n return isFocusableRules({\n context: context,\n except: except\n });\n };\n isFocusable.rules = isFocusableRules;\n return isFocusable;\n};\n// provide isFocusRelevant(context) as default iterator callback\nvar isFocusable = isFocusableRules.except({});\nfunction createFilter(condition) {\n // see https://developer.mozilla.org/docs/Web/API/NodeFilter\n var filter = function filter(node) {\n if (node.shadowRoot) {\n // return ShadowRoot elements regardless of them being focusable,\n // so they can be walked recursively later\n return NodeFilter.FILTER_ACCEPT;\n }\n if (condition(node)) {\n // finds elements that could have been found by document.querySelectorAll()\n return NodeFilter.FILTER_ACCEPT;\n }\n return NodeFilter.FILTER_SKIP;\n };\n // IE requires a function, Browsers require {acceptNode: function}\n // see http://www.bennadel.com/blog/2607-finding-html-comment-nodes-in-the-dom-using-treewalker.htm\n filter.acceptNode = filter;\n return filter;\n}\nvar PossiblyFocusableFilter = createFilter(isFocusRelevant);\nfunction queryFocusableStrict() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, strategy = _ref.strategy;\n if (!context) {\n context = document.documentElement;\n }\n var _isFocusable = isFocusable.rules.except({\n onlyTabbable: includeOnlyTabbable\n });\n var _document = getDocument(context);\n // see https://developer.mozilla.org/docs/Web/API/Document/createTreeWalker\n var walker = _document.createTreeWalker(context, NodeFilter.SHOW_ELEMENT, strategy === \"all\" ? PossiblyFocusableFilter : createFilter(_isFocusable), false);\n var list = [];\n while(walker.nextNode()){\n if (walker.currentNode.shadowRoot) {\n if (_isFocusable(walker.currentNode)) {\n list.push(walker.currentNode);\n }\n list = list.concat(queryFocusableStrict({\n context: walker.currentNode.shadowRoot,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n }));\n } else {\n list.push(walker.currentNode);\n }\n }\n // add context if requested and focusable\n if (includeContext) {\n if (strategy === \"all\") {\n if (isFocusRelevant(context)) {\n list.unshift(context);\n }\n } else if (_isFocusable(context)) {\n list.unshift(context);\n }\n }\n return list;\n}\n// NOTE: this selector MUST *never* be used directly,\nvar supports$6 = void 0;\nvar selector$1 = void 0;\nfunction selector$2() {\n if (!supports$6) {\n supports$6 = _supports();\n }\n if (typeof selector$1 === \"string\") {\n return selector$1;\n }\n // https://www.w3.org/TR/html5/editing.html#sequential-focus-navigation-and-the-tabindex-attribute\n selector$1 = \"\" + // IE11 supports.can focus <table> and <td>\n (supports$6.focusTable ? \"table, td,\" : \"\") + // IE11 supports.can focus <fieldset>\n (supports$6.focusFieldset ? \"fieldset,\" : \"\") + // Namespace problems of [xlink:href] explained in https://stackoverflow.com/a/23047888/515124\n // svg a[*|href] does not match in IE9, but since we're filtering\n // through is/focusable we can include all <a> from SVG\n \"svg a,\" + // may behave as 'svg, svg *,' in chrome as *every* svg element with a focus event listener is focusable\n // navigational elements\n \"a[href],\" + // validity determined by is/valid-area.js\n \"area[href],\" + // validity determined by is/disabled.js\n \"input, select, textarea, button,\" + // browsing context containers\n \"iframe, object, embed,\" + // interactive content\n \"keygen,\" + (supports$6.focusAudioWithoutControls ? \"audio,\" : \"audio[controls],\") + (supports$6.focusVideoWithoutControls ? \"video,\" : \"video[controls],\") + (supports$6.focusSummary ? \"summary,\" : \"\") + // validity determined by is/valid-tabindex.js\n \"[tabindex],\" + // editing hosts\n \"[contenteditable]\";\n // where ShadowDOM is supported, we also want the shadowed focusable elements (via \">>>\" or \"/deep/\")\n selector$1 = selectInShadows(selector$1);\n return selector$1;\n}\nfunction queryFocusableQuick() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable;\n var _selector = selector$2();\n var elements = context.querySelectorAll(_selector);\n // the selector potentially matches more than really is focusable\n var _isFocusable = isFocusable.rules.except({\n onlyTabbable: includeOnlyTabbable\n });\n var result = [].filter.call(elements, _isFocusable);\n // add context if requested and focusable\n if (includeContext && _isFocusable(context)) {\n result.unshift(context);\n }\n return result;\n}\nfunction queryFocusable() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, _ref$strategy = _ref.strategy, strategy = _ref$strategy === undefined ? \"quick\" : _ref$strategy;\n var element = contextToElement({\n label: \"query/focusable\",\n resolveDocument: true,\n defaultToDocument: true,\n context: context\n });\n var options = {\n context: element,\n includeContext: includeContext,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n };\n if (strategy === \"quick\") {\n return queryFocusableQuick(options);\n } else if (strategy === \"strict\" || strategy === \"all\") {\n return queryFocusableStrict(options);\n }\n throw new TypeError('query/focusable requires option.strategy to be one of [\"quick\", \"strict\", \"all\"]');\n}\nvar supports$7 = void 0;\n// Internet Explorer 11 considers fieldset, table, td focusable, but not tabbable\n// Internet Explorer 11 considers body to have [tabindex=0], but does not allow tabbing to it\nvar focusableElementsPattern = /^(fieldset|table|td|body)$/;\nfunction isTabbableRules() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, _ref$except = _ref.except, except = _ref$except === undefined ? {\n flexbox: false,\n scrollable: false,\n shadow: false,\n visible: false,\n onlyTabbable: false\n } : _ref$except;\n if (!supports$7) {\n supports$7 = _supports();\n }\n var element = contextToElement({\n label: \"is/tabbable\",\n resolveDocument: true,\n context: context\n });\n if (platform.is.BLINK && platform.is.ANDROID && platform.majorVersion > 42) {\n // External keyboard support worked fine in CHrome 42, but stopped working in Chrome 45.\n // The on-screen keyboard does not provide a way to focus the next input element (like iOS does).\n // That leaves us with no option to advance focus by keyboard, ergo nothing is tabbable (keyboard focusable).\n return false;\n }\n var frameElement = getFrameElement(element);\n if (frameElement) {\n if (platform.is.WEBKIT && platform.is.IOS) {\n // iOS only does not consider anything from another browsing context keyboard focusable\n return false;\n }\n // iframe[tabindex=\"-1\"] and object[tabindex=\"-1\"] inherit the\n // tabbable demotion onto elements of their browsing contexts\n if (tabindexValue(frameElement) < 0) {\n return false;\n }\n if (!except.visible && (platform.is.BLINK || platform.is.WEBKIT) && !isVisible(frameElement)) {\n // Blink and WebKit consider elements in hidden browsing contexts focusable, but not tabbable\n return false;\n }\n // Webkit and Blink don't consider anything in <object> tabbable\n // Blink fixed that fixed in Chrome 54, Opera 41\n var frameNodeName = frameElement.nodeName.toLowerCase();\n if (frameNodeName === \"object\") {\n var isFixedBlink = platform.name === \"Chrome\" && platform.majorVersion >= 54 || platform.name === \"Opera\" && platform.majorVersion >= 41;\n if (platform.is.WEBKIT || platform.is.BLINK && !isFixedBlink) {\n return false;\n }\n }\n }\n var nodeName = element.nodeName.toLowerCase();\n var _tabindex = tabindexValue(element);\n var tabindex = _tabindex === null ? null : _tabindex >= 0;\n if (platform.is.EDGE && platform.majorVersion >= 14 && frameElement && element.ownerSVGElement && _tabindex < 0) {\n // Edge 14+ considers <a xlink:href=\"…\" tabindex=\"-1\"> keyboard focusable\n // if the element is in a nested browsing context\n return true;\n }\n var hasTabbableTabindexOrNone = tabindex !== false;\n var hasTabbableTabindex = _tabindex !== null && _tabindex >= 0;\n // NOTE: Firefox 31 considers [contenteditable] to have [tabindex=-1], but allows tabbing to it\n // fixed in Firefox 40 the latest - https://bugzilla.mozilla.org/show_bug.cgi?id=1185657\n if (element.hasAttribute(\"contenteditable\")) {\n // tabbing can still be disabled by explicitly providing [tabindex=\"-1\"]\n return hasTabbableTabindexOrNone;\n }\n if (focusableElementsPattern.test(nodeName) && tabindex !== true) {\n return false;\n }\n if (platform.is.WEBKIT && platform.is.IOS) {\n // iOS only considers a hand full of elements tabbable (keyboard focusable)\n // this holds true even with external keyboards\n var potentiallyTabbable = nodeName === \"input\" && element.type === \"text\" || element.type === \"password\" || nodeName === \"select\" || nodeName === \"textarea\" || element.hasAttribute(\"contenteditable\");\n if (!potentiallyTabbable) {\n var style = window.getComputedStyle(element, null);\n potentiallyTabbable = isUserModifyWritable(style);\n }\n if (!potentiallyTabbable) {\n return false;\n }\n }\n if (nodeName === \"use\" && _tabindex !== null) {\n if (platform.is.BLINK || platform.is.WEBKIT && platform.majorVersion === 9) {\n // In Chrome and Safari 9 the <use> element is keyboard focusable even for tabindex=\"-1\"\n return true;\n }\n }\n if (elementMatches(element, \"svg a\") && element.hasAttribute(\"xlink:href\")) {\n if (hasTabbableTabindexOrNone) {\n // in Trident and Gecko SVGElement does not handle the tabIndex property properly\n return true;\n }\n if (element.focus && !supports$7.focusSvgNegativeTabindexAttribute) {\n // Firefox 51 and 52 treat any natively tabbable SVG element with\n // tabindex=\"-1\" as tabbable and everything else as inert\n // see https://bugzilla.mozilla.org/show_bug.cgi?id=1302340\n return true;\n }\n }\n if (nodeName === \"svg\" && supports$7.focusSvgInIframe && hasTabbableTabindexOrNone) {\n return true;\n }\n if (platform.is.TRIDENT || platform.is.EDGE) {\n if (nodeName === \"svg\") {\n if (supports$7.focusSvg) {\n // older Internet Explorers consider <svg> keyboard focusable\n // unless they have focsable=\"false\", but then they wouldn't\n // be focusable and thus not even reach this filter\n return true;\n }\n // elements that have [focusable] are automatically keyboard focusable regardless of the attribute's value\n return element.hasAttribute(\"focusable\") || hasTabbableTabindex;\n }\n if (element.ownerSVGElement) {\n if (supports$7.focusSvgTabindexAttribute && hasTabbableTabindex) {\n return true;\n }\n // elements that have [focusable] are automatically keyboard focusable regardless of the attribute's value\n return element.hasAttribute(\"focusable\");\n }\n }\n if (element.tabIndex === undefined) {\n return Boolean(except.onlyTabbable);\n }\n if (nodeName === \"audio\") {\n if (!element.hasAttribute(\"controls\")) {\n // In Internet Explorer the <audio> element is focusable, but not tabbable, and tabIndex property is wrong\n return false;\n } else if (platform.is.BLINK) {\n // In Chrome <audio controls tabindex=\"-1\"> remains keyboard focusable\n return true;\n }\n }\n if (nodeName === \"video\") {\n if (!element.hasAttribute(\"controls\")) {\n if (platform.is.TRIDENT || platform.is.EDGE) {\n // In Internet Explorer and Edge the <video> element is focusable, but not tabbable, and tabIndex property is wrong\n return false;\n }\n } else if (platform.is.BLINK || platform.is.GECKO) {\n // In Chrome and Firefox <video controls tabindex=\"-1\"> remains keyboard focusable\n return true;\n }\n }\n if (nodeName === \"object\") {\n if (platform.is.BLINK || platform.is.WEBKIT) {\n // In all Blink and WebKit based browsers <embed> and <object> are never keyboard focusable, even with tabindex=\"0\" set\n return false;\n }\n }\n if (nodeName === \"iframe\") {\n // In Internet Explorer all iframes are only focusable\n // In WebKit, Blink and Gecko iframes may be tabbable depending on content.\n // Since we can't reliably investigate iframe documents because of the\n // SameOriginPolicy, we're declaring everything only focusable.\n return false;\n }\n if (!except.scrollable && platform.is.GECKO) {\n // Firefox considers scrollable containers keyboard focusable,\n // even though their tabIndex property is -1\n var _style = window.getComputedStyle(element, null);\n if (hasCssOverflowScroll(_style)) {\n return hasTabbableTabindexOrNone;\n }\n }\n if (platform.is.TRIDENT || platform.is.EDGE) {\n // IE and Edge degrade <area> to script focusable, if the image\n // using the <map> has been given tabindex=\"-1\"\n if (nodeName === \"area\") {\n var img = getImageOfArea(element);\n if (img && tabindexValue(img) < 0) {\n return false;\n }\n }\n var _style2 = window.getComputedStyle(element, null);\n if (isUserModifyWritable(_style2)) {\n // prevent being swallowed by the overzealous isScrollableContainer() below\n return element.tabIndex >= 0;\n }\n if (!except.flexbox && hasCssDisplayFlex(_style2)) {\n if (_tabindex !== null) {\n return hasTabbableTabindex;\n }\n return isFocusRelevantWithoutFlexbox(element) && isTabbableWithoutFlexbox(element);\n }\n // IE considers scrollable containers script focusable only,\n // even though their tabIndex property is 0\n if (isScrollableContainer(element, nodeName)) {\n return false;\n }\n var parent = element.parentElement;\n if (parent) {\n var parentNodeName = parent.nodeName.toLowerCase();\n var parentStyle = window.getComputedStyle(parent, null);\n // IE considers scrollable bodies script focusable only,\n if (isScrollableContainer(parent, nodeName, parentNodeName, parentStyle)) {\n return false;\n }\n // Children of focusable elements with display:flex are focusable in IE10-11,\n // even though their tabIndex property suggests otherwise\n if (hasCssDisplayFlex(parentStyle)) {\n // value of tabindex takes precedence\n return hasTabbableTabindex;\n }\n }\n }\n // https://www.w3.org/WAI/PF/aria-practices/#focus_tabindex\n return element.tabIndex >= 0;\n}\n// bind exceptions to an iterator callback\nisTabbableRules.except = function() {\n var except = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isTabbable = function isTabbable(context) {\n return isTabbableRules({\n context: context,\n except: except\n });\n };\n isTabbable.rules = isTabbableRules;\n return isTabbable;\n};\nvar isFocusRelevantWithoutFlexbox = isFocusRelevant.rules.except({\n flexbox: true\n});\nvar isTabbableWithoutFlexbox = isTabbableRules.except({\n flexbox: true\n});\n// provide isTabbable(context) as default iterator callback\nvar isTabbable = isTabbableRules.except({});\nfunction queryTabbable() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, strategy = _ref.strategy;\n var _isTabbable = isTabbable.rules.except({\n onlyTabbable: includeOnlyTabbable\n });\n return queryFocusable({\n context: context,\n includeContext: includeContext,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n }).filter(_isTabbable);\n}\n// sorts a list of elements according to their order in the DOM\nfunction compareDomPosition(a, b) {\n return a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n}\nfunction sortDomOrder(elements) {\n return elements.sort(compareDomPosition);\n}\nfunction getFirstSuccessorOffset(list, target) {\n // find the first element that comes AFTER the target element\n return findIndex(list, function(element) {\n return target.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_FOLLOWING;\n });\n}\nfunction findInsertionOffsets(list, elements, resolveElement) {\n // instead of mutating the elements list directly, remember position and map\n // to inject later, when we can do this more efficiently\n var insertions = [];\n elements.forEach(function(element) {\n var replace = true;\n var offset = list.indexOf(element);\n if (offset === -1) {\n // element is not in target list\n offset = getFirstSuccessorOffset(list, element);\n replace = false;\n }\n if (offset === -1) {\n // there is no successor in the tabsequence,\n // meaning the image must be the last element\n offset = list.length;\n }\n // allow the consumer to replace the injected element\n var injections = nodeArray(resolveElement ? resolveElement(element) : element);\n if (!injections.length) {\n // we can't inject zero elements\n return;\n }\n insertions.push({\n offset: offset,\n replace: replace,\n elements: injections\n });\n });\n return insertions;\n}\nfunction insertElementsAtOffsets(list, insertions) {\n // remember the number of elements we have already injected\n // so we account for the caused index offset\n var inserted = 0;\n // make sure that we insert the elements in sequence,\n // otherwise the offset compensation won't work\n insertions.sort(function(a, b) {\n return a.offset - b.offset;\n });\n insertions.forEach(function(insertion) {\n // array.splice has an annoying function signature :(\n var remove = insertion.replace ? 1 : 0;\n var args = [\n insertion.offset + inserted,\n remove\n ].concat(insertion.elements);\n list.splice.apply(list, args);\n inserted += insertion.elements.length - remove;\n });\n}\nfunction mergeInDomOrder() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, list = _ref.list, elements = _ref.elements, resolveElement = _ref.resolveElement;\n // operate on a copy so we don't mutate the original array\n var _list = list.slice(0);\n // make sure the elements we're injecting are provided in DOM order\n var _elements = nodeArray(elements).slice(0);\n sortDomOrder(_elements);\n // find the offsets within the target array (list) at which to inject\n // each individual element (from elements)\n var insertions = findInsertionOffsets(_list, _elements, resolveElement);\n // actually inject the elements into the target array at the identified positions\n insertElementsAtOffsets(_list, insertions);\n return _list;\n}\nvar _createClass = function() {\n function defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nvar Maps = function() {\n function Maps(context) {\n _classCallCheck(this, Maps);\n this._document = getDocument(context);\n this.maps = {};\n }\n _createClass(Maps, [\n {\n key: \"getAreasFor\",\n value: function getAreasFor(name) {\n if (!this.maps[name]) {\n // the map is not defined within the context, so we\n // have to go find it elsewhere in the document\n this.addMapByName(name);\n }\n return this.maps[name];\n }\n },\n {\n key: \"addMapByName\",\n value: function addMapByName(name) {\n var map = getMapByName(name, this._document);\n if (!map) {\n // if there is no map, the img[usemap] wasn't doing anything anyway\n return;\n }\n this.maps[map.name] = queryTabbable({\n context: map\n });\n }\n },\n {\n key: \"extractAreasFromList\",\n value: function extractAreasFromList(elements) {\n // remove all <area> elements from the elements list,\n // but put them the map for later retrieval\n return elements.filter(function(element) {\n var nodeName = element.nodeName.toLowerCase();\n if (nodeName !== \"area\") {\n return true;\n }\n var map = element.parentNode;\n if (!this.maps[map.name]) {\n this.maps[map.name] = [];\n }\n this.maps[map.name].push(element);\n return false;\n }, this);\n }\n }\n ]);\n return Maps;\n}();\nfunction sortArea(elements, context) {\n // images - unless they are focusable themselves, likely not\n // part of the elements list, so we'll have to find them and\n // sort them into the elements list manually\n var usemaps = context.querySelectorAll(\"img[usemap]\");\n var maps = new Maps(context);\n // remove all <area> elements from the elements list,\n // but put them the map for later retrieval\n var _elements = maps.extractAreasFromList(elements);\n if (!usemaps.length) {\n // the context does not contain any <area>s so no need\n // to replace anything, just remove any maps\n return _elements;\n }\n return mergeInDomOrder({\n list: _elements,\n elements: usemaps,\n resolveElement: function resolveElement(image) {\n var name = image.getAttribute(\"usemap\").slice(1);\n return maps.getAreasFor(name);\n }\n });\n}\nvar _createClass$1 = function() {\n function defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck$1(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nvar Shadows = function() {\n function Shadows(context, sortElements) {\n _classCallCheck$1(this, Shadows);\n // document context we're working with\n this.context = context;\n // callback that sorts an array of elements\n this.sortElements = sortElements;\n // reference to create unique IDs for each ShadowHost\n this.hostCounter = 1;\n // reference map for child-ShadowHosts of a ShadowHost\n this.inHost = {};\n // reference map for child-ShadowHost of the document\n this.inDocument = [];\n // reference map for ShadowHosts\n this.hosts = {};\n // reference map for tabbable elements of a ShadowHost\n this.elements = {};\n }\n // remember which hosts we have to sort within later\n _createClass$1(Shadows, [\n {\n key: \"_registerHost\",\n value: function _registerHost(host) {\n if (host._sortingId) {\n return;\n }\n // make the ShadowHost identifiable (see cleanup() for undo)\n host._sortingId = \"shadow-\" + this.hostCounter++;\n this.hosts[host._sortingId] = host;\n // hosts may contain other hosts\n var parentHost = getShadowHost({\n context: host\n });\n if (parentHost) {\n this._registerHost(parentHost);\n this._registerHostParent(host, parentHost);\n } else {\n this.inDocument.push(host);\n }\n }\n },\n {\n key: \"_registerHostParent\",\n value: function _registerHostParent(host, parent) {\n if (!this.inHost[parent._sortingId]) {\n this.inHost[parent._sortingId] = [];\n }\n this.inHost[parent._sortingId].push(host);\n }\n },\n {\n key: \"_registerElement\",\n value: function _registerElement(element, host) {\n if (!this.elements[host._sortingId]) {\n this.elements[host._sortingId] = [];\n }\n this.elements[host._sortingId].push(element);\n }\n },\n {\n key: \"extractElements\",\n value: function extractElements(elements) {\n return elements.filter(function(element) {\n var host = getShadowHost({\n context: element\n });\n if (!host) {\n return true;\n }\n this._registerHost(host);\n this._registerElement(element, host);\n return false;\n }, this);\n }\n },\n {\n key: \"sort\",\n value: function sort(elements) {\n var _elements = this._injectHosts(elements);\n _elements = this._replaceHosts(_elements);\n this._cleanup();\n return _elements;\n }\n },\n {\n key: \"_injectHosts\",\n value: function _injectHosts(elements) {\n Object.keys(this.hosts).forEach(function(_sortingId) {\n var _list = this.elements[_sortingId];\n var _elements = this.inHost[_sortingId];\n var _context = this.hosts[_sortingId].shadowRoot;\n this.elements[_sortingId] = this._merge(_list, _elements, _context);\n }, this);\n return this._merge(elements, this.inDocument, this.context);\n }\n },\n {\n key: \"_merge\",\n value: function _merge(list, elements, context) {\n var merged = mergeInDomOrder({\n list: list,\n elements: elements\n });\n return this.sortElements(merged, context);\n }\n },\n {\n key: \"_replaceHosts\",\n value: function _replaceHosts(elements) {\n return mergeInDomOrder({\n list: elements,\n elements: this.inDocument,\n resolveElement: this._resolveHostElement.bind(this)\n });\n }\n },\n {\n key: \"_resolveHostElement\",\n value: function _resolveHostElement(host) {\n var merged = mergeInDomOrder({\n list: this.elements[host._sortingId],\n elements: this.inHost[host._sortingId],\n resolveElement: this._resolveHostElement.bind(this)\n });\n var _tabindex = tabindexValue(host);\n if (_tabindex !== null && _tabindex > -1) {\n return [\n host\n ].concat(merged);\n }\n return merged;\n }\n },\n {\n key: \"_cleanup\",\n value: function _cleanup() {\n // remove those identifers we put on the ShadowHost to avoid using Map()\n Object.keys(this.hosts).forEach(function(key) {\n delete this.hosts[key]._sortingId;\n }, this);\n }\n }\n ]);\n return Shadows;\n}();\nfunction sortShadowed(elements, context, sortElements) {\n var shadows = new Shadows(context, sortElements);\n var _elements = shadows.extractElements(elements);\n if (_elements.length === elements.length) {\n // no shadowed content found, no need to continue\n return sortElements(elements);\n }\n return shadows.sort(_elements);\n}\nfunction sortTabindex(elements) {\n // https://developer.mozilla.org/docs/Web/API/HTMLElement.tabIndex\n // elements with tabIndex \"0\" (including tabbableElements without tabIndex) should be navigated in the order they appear.\n // elements with a positive tabIndex:\n // Elements that have identical tabIndexes should be navigated in the order they appear.\n // Navigation proceeds from the lowest tabIndex to the highest tabIndex.\n // NOTE: sort implementation may be unstable and thus mess up DOM order,\n // that's why we build a map that's being sorted instead. If we were able to rely\n // on a stable sorting algorithm, sortTabindex() could be as simple as\n // elements.sort(function(a, b) { return a.tabIndex - b.tabIndex; });\n // at this time Chrome does not use a stable sorting algorithm\n // see http://blog.rodneyrehm.de/archives/14-Sorting-Were-Doing-It-Wrong.html#stability\n // NOTE: compareDocumentPosition seemed like more overhead than just sorting this with buckets\n // https://developer.mozilla.org/docs/Web/API/Node.compareDocumentPosition\n var map = {};\n var indexes = [];\n var normal = elements.filter(function(element) {\n // in Trident and Gecko SVGElement does not know about the tabIndex property\n var tabIndex = element.tabIndex;\n if (tabIndex === undefined) {\n tabIndex = tabindexValue(element);\n }\n // extract elements that don't need sorting\n if (tabIndex <= 0 || tabIndex === null || tabIndex === undefined) {\n return true;\n }\n if (!map[tabIndex]) {\n // create sortable bucket for dom-order-preservation of elements with the same tabIndex\n map[tabIndex] = [];\n // maintain a list of unique tabIndexes\n indexes.push(tabIndex);\n }\n // sort element into the proper bucket\n map[tabIndex].push(element);\n // element moved to sorting map, so not \"normal\" anymore\n return false;\n });\n // sort the tabindex ascending,\n // then resolve them to their appropriate buckets,\n // then flatten the array of arrays to an array\n var _elements = indexes.sort().map(function(tabIndex) {\n return map[tabIndex];\n }).reduceRight(function(previous, current) {\n return current.concat(previous);\n }, normal);\n return _elements;\n}\nvar supports$8 = void 0;\nfunction moveContextToBeginning(elements, context) {\n var pos = elements.indexOf(context);\n if (pos > 0) {\n var tmp = elements.splice(pos, 1);\n return tmp.concat(elements);\n }\n return elements;\n}\nfunction sortElements(elements, _context) {\n if (supports$8.tabsequenceAreaAtImgPosition) {\n // Some browsers sort <area> in DOM order, some place the <area>s\n // where the <img> referecing them would've been in DOM order.\n // https://github.com/medialize/ally.js/issues/5\n elements = sortArea(elements, _context);\n }\n elements = sortTabindex(elements);\n return elements;\n}\nfunction queryTabsequence() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, context = _ref.context, includeContext = _ref.includeContext, includeOnlyTabbable = _ref.includeOnlyTabbable, strategy = _ref.strategy;\n if (!supports$8) {\n supports$8 = _supports();\n }\n var _context = nodeArray(context)[0] || document.documentElement;\n var elements = queryTabbable({\n context: _context,\n includeContext: includeContext,\n includeOnlyTabbable: includeOnlyTabbable,\n strategy: strategy\n });\n if (document.body.createShadowRoot && platform.is.BLINK) {\n // sort tabindex localized to shadow dom\n // see https://github.com/medialize/ally.js/issues/6\n elements = sortShadowed(elements, _context, sortElements);\n } else {\n elements = sortElements(elements, _context);\n }\n if (includeContext) {\n // if we include the context itself, it has to be the first\n // element of the sequence\n elements = moveContextToBeginning(elements, _context);\n }\n return elements;\n}\n// codes mostly cloned from https://github.com/keithamus/jwerty/blob/master/jwerty.js\n// deliberately not exposing characters like <,.-#* because they vary *wildly*\n// across keyboard layouts and may cause various problems\n// (e.g. \"*\" is \"Shift +\" on a German Mac keyboard)\n// (e.g. \"@\" is \"Alt L\" on a German Mac keyboard)\nvar keycode = {\n // Element Focus\n tab: 9,\n // Navigation\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n pageUp: 33,\n \"page-up\": 33,\n pageDown: 34,\n \"page-down\": 34,\n end: 35,\n home: 36,\n // Action\n enter: 13,\n escape: 27,\n space: 32,\n // Modifier\n shift: 16,\n capsLock: 20,\n \"caps-lock\": 20,\n ctrl: 17,\n alt: 18,\n meta: 91,\n // in firefox: 224\n // on mac (chrome): meta-left=91, meta-right=93\n // on win (IE11): meta-left=91, meta-right=92\n pause: 19,\n // Content Manipulation\n insert: 45,\n delete: 46,\n backspace: 8,\n // the same logical key may be identified through different keyCodes\n _alias: {\n 91: [\n 92,\n 93,\n 224\n ]\n }\n};\n// Function keys (112 - 137)\n// NOTE: not every keyboard knows F13+\nfor(var n = 1; n < 26; n++){\n keycode[\"f\" + n] = n + 111;\n}\n// Number keys (48-57, numpad 96-105)\n// NOTE: not every keyboard knows num-0+\nfor(var _n = 0; _n < 10; _n++){\n var code = _n + 48;\n var numCode = _n + 96;\n keycode[_n] = code;\n keycode[\"num-\" + _n] = numCode;\n keycode._alias[code] = [\n numCode\n ];\n}\n// Latin characters (65 - 90)\nfor(var _n2 = 0; _n2 < 26; _n2++){\n var _code = _n2 + 65;\n var name$1 = String.fromCharCode(_code).toLowerCase();\n keycode[name$1] = _code;\n}\nvar modifier = {\n alt: \"altKey\",\n ctrl: \"ctrlKey\",\n meta: \"metaKey\",\n shift: \"shiftKey\"\n};\nvar modifierSequence = Object.keys(modifier).map(function(name) {\n return modifier[name];\n});\nfunction createExpectedModifiers(ignoreModifiers) {\n var value = ignoreModifiers ? null : false;\n return {\n altKey: value,\n ctrlKey: value,\n metaKey: value,\n shiftKey: value\n };\n}\nfunction resolveModifiers(modifiers) {\n var ignoreModifiers = modifiers.indexOf(\"*\") !== -1;\n var expected = createExpectedModifiers(ignoreModifiers);\n modifiers.forEach(function(token) {\n if (token === \"*\") {\n // we've already covered the all-in operator\n return;\n }\n // we want the modifier pressed\n var value = true;\n var operator = token.slice(0, 1);\n if (operator === \"?\") {\n // we don't care if the modifier is pressed\n value = null;\n } else if (operator === \"!\") {\n // we do not want the modifier pressed\n value = false;\n }\n if (value !== true) {\n // compensate for the modifier's operator\n token = token.slice(1);\n }\n var propertyName = modifier[token];\n if (!propertyName) {\n throw new TypeError('Unknown modifier \"' + token + '\"');\n }\n expected[propertyName] = value;\n });\n return expected;\n}\nfunction resolveKey(key) {\n var code = keycode[key] || parseInt(key, 10);\n if (!code || typeof code !== \"number\" || isNaN(code)) {\n throw new TypeError('Unknown key \"' + key + '\"');\n }\n return [\n code\n ].concat(keycode._alias[code] || []);\n}\nfunction matchModifiers(expected, event) {\n // returns true on match\n return !modifierSequence.some(function(prop) {\n // returns true on mismatch\n return typeof expected[prop] === \"boolean\" && Boolean(event[prop]) !== expected[prop];\n });\n}\nfunction keyBinding(text) {\n return text.split(/\\s+/).map(function(_text) {\n var tokens = _text.split(\"+\");\n var _modifiers = resolveModifiers(tokens.slice(0, -1));\n var _keyCodes = resolveKey(tokens.slice(-1));\n return {\n keyCodes: _keyCodes,\n modifiers: _modifiers,\n matchModifiers: matchModifiers.bind(null, _modifiers)\n };\n });\n}\n// Node.compareDocumentPosition is available since IE9\n// see https://developer.mozilla.org/docs/Web/API/Node.compareDocumentPosition\n// callback returns true when element is contained by parent or is the parent suited for use with Array.some()\n/*\n USAGE:\n var isChildOf = getParentComparator({parent: someNode});\n listOfElements.some(isChildOf)\n*/ function getParentComparator() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, parent = _ref.parent, element = _ref.element, includeSelf = _ref.includeSelf;\n if (parent) {\n return function isChildOf(node) {\n return Boolean(includeSelf && node === parent || parent.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n } else if (element) {\n return function isParentOf(node) {\n return Boolean(includeSelf && element === node || node.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n };\n }\n throw new TypeError(\"util/compare-position#getParentComparator required either options.parent or options.element\");\n}\n// Bug 286933 - Key events in the autocomplete popup should be hidden from page scripts\n// @browser-issue Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=286933\nfunction whenKey() {\n var map = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var bindings = {};\n var context = nodeArray(map.context)[0] || document.documentElement;\n delete map.context;\n var filter = nodeArray(map.filter);\n delete map.filter;\n var mapKeys = Object.keys(map);\n if (!mapKeys.length) {\n throw new TypeError(\"when/key requires at least one option key\");\n }\n var registerBinding = function registerBinding(event) {\n event.keyCodes.forEach(function(code) {\n if (!bindings[code]) {\n bindings[code] = [];\n }\n bindings[code].push(event);\n });\n };\n mapKeys.forEach(function(text) {\n if (typeof map[text] !== \"function\") {\n throw new TypeError('when/key requires option[\"' + text + '\"] to be a function');\n }\n var addCallback = function addCallback(event) {\n event.callback = map[text];\n return event;\n };\n keyBinding(text).map(addCallback).forEach(registerBinding);\n });\n var handleKeyDown = function handleKeyDown(event) {\n if (event.defaultPrevented) {\n return;\n }\n if (filter.length) {\n // ignore elements within the exempted sub-trees\n var isParentOfElement = getParentComparator({\n element: event.target,\n includeSelf: true\n });\n if (filter.some(isParentOfElement)) {\n return;\n }\n }\n var key = event.keyCode || event.which;\n if (!bindings[key]) {\n return;\n }\n bindings[key].forEach(function(_event) {\n if (!_event.matchModifiers(event)) {\n return;\n }\n _event.callback.call(context, event, disengage);\n });\n };\n context.addEventListener(\"keydown\", handleKeyDown, false);\n var disengage = function disengage() {\n context.removeEventListener(\"keydown\", handleKeyDown, false);\n };\n return {\n disengage: disengage\n };\n}\nfunction _default(param) {\n let { context } = param === void 0 ? {} : param;\n if (!context) {\n context = document.documentElement;\n }\n // Make sure the supports tests are run before intercepting the Tab key,\n // or IE10 and IE11 will fail to process the first Tab key event. Not\n // limiting this warm-up to IE because it may be a problem elsewhere, too.\n queryTabsequence();\n return whenKey({\n // Safari on OSX may require ALT+TAB to reach links,\n // see https://github.com/medialize/ally.js/issues/146\n \"?alt+?shift+tab\": function altShiftTab(event) {\n // we're completely taking over the Tab key handling\n event.preventDefault();\n var sequence = queryTabsequence({\n context: context\n });\n var backward = event.shiftKey;\n var first = sequence[0];\n var last = sequence[sequence.length - 1];\n // wrap around first to last, last to first\n var source = backward ? first : last;\n var target = backward ? last : first;\n if (isActiveElement(source)) {\n target.focus();\n return;\n }\n // find current position in tabsequence\n var currentIndex = void 0;\n var found = sequence.some(function(element, index) {\n if (!isActiveElement(element)) {\n return false;\n }\n currentIndex = index;\n return true;\n });\n if (!found) {\n // redirect to first as we're not in our tabsequence\n first.focus();\n return;\n }\n // shift focus to previous/next element in the sequence\n var offset = backward ? -1 : 1;\n sequence[currentIndex + offset].focus();\n }\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=maintain--tab-focus.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9PdmVybGF5L21haW50YWluLS10YWItZm9jdXMuanMiLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLEdBQUcsY0FBYztBQUNuQyxtREFBbUQ7QUFDbkQsZUFBZTtBQUNmLGlDQUFpQztBQUNqQyxFQUFFO0FBQ0YseUNBQXlDO0FBQzVCO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGdJQUF5QztBQUNsRixNQUFNQyxZQUFZLFdBQVcsR0FBR0YseUJBQXlCRyxDQUFDLENBQUNGLG1CQUFPQSxDQUFDLCtHQUE2QjtBQUNoRyxNQUFNRyxhQUFhLFdBQVcsR0FBR0oseUJBQXlCRyxDQUFDLENBQUNGLG1CQUFPQSxDQUFDLHFIQUErQjtBQUNuRyx5RkFBeUY7QUFDekYsNkVBQTZFO0FBQzdFLFNBQVNJLFVBQVVDLEtBQUs7SUFDcEIsSUFBSSxDQUFDQSxPQUFPO1FBQ1IsT0FBTyxFQUFFO0lBQ2I7SUFDQSxJQUFJQyxNQUFNQyxPQUFPLENBQUNGLFFBQVE7UUFDdEIsT0FBT0E7SUFDWDtJQUNBLCtDQUErQztJQUMvQyxJQUFJQSxNQUFNRyxRQUFRLEtBQUtDLFdBQVc7UUFDOUIsT0FBTztZQUNISjtTQUNIO0lBQ0w7SUFDQSxJQUFJLE9BQU9BLFVBQVUsVUFBVTtRQUMzQkEsUUFBUUssU0FBU0MsZ0JBQWdCLENBQUNOO0lBQ3RDO0lBQ0EsSUFBSUEsTUFBTU8sTUFBTSxLQUFLSCxXQUFXO1FBQzVCLE9BQU8sRUFBRSxDQUFDSSxLQUFLLENBQUNDLElBQUksQ0FBQ1QsT0FBTztJQUNoQztJQUNBLE1BQU0sSUFBSVUsVUFBVSxzQkFBc0JDLE9BQU9YO0FBQ3JEO0FBQ0EsU0FBU1ksaUJBQWlCQyxJQUFJO0lBQzFCLElBQUlDLFVBQVVELEtBQUtDLE9BQU8sRUFBRUMsYUFBYUYsS0FBS0csS0FBSyxFQUFFQSxRQUFRRCxlQUFlWCxZQUFZLHVCQUF1QlcsWUFBWUUsa0JBQWtCSixLQUFLSSxlQUFlLEVBQUVDLG9CQUFvQkwsS0FBS0ssaUJBQWlCO0lBQzdNLElBQUlDLFVBQVVwQixVQUFVZSxRQUFRLENBQUMsRUFBRTtJQUNuQyxJQUFJRyxtQkFBbUJFLFdBQVdBLFFBQVFoQixRQUFRLEtBQUtpQixLQUFLQyxhQUFhLEVBQUU7UUFDdkVGLFVBQVVBLFFBQVFHLGVBQWU7SUFDckM7SUFDQSxJQUFJLENBQUNILFdBQVdELG1CQUFtQjtRQUMvQixPQUFPYixTQUFTaUIsZUFBZTtJQUNuQztJQUNBLElBQUksQ0FBQ0gsU0FBUztRQUNWLE1BQU0sSUFBSVQsVUFBVU0sUUFBUTtJQUNoQztJQUNBLElBQUlHLFFBQVFoQixRQUFRLEtBQUtpQixLQUFLRyxZQUFZLElBQUlKLFFBQVFoQixRQUFRLEtBQUtpQixLQUFLSSxzQkFBc0IsRUFBRTtRQUM1RixNQUFNLElBQUlkLFVBQVVNLFFBQVE7SUFDaEM7SUFDQSxPQUFPRztBQUNYO0FBQ0EsU0FBU007SUFDTCxJQUFJWixPQUFPYSxVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHWixVQUFVRCxLQUFLQyxPQUFPO0lBQ3pHLElBQUlLLFVBQVVQLGlCQUFpQjtRQUMzQkksT0FBTztRQUNQRixTQUFTQTtJQUNiO0lBQ0Esc0JBQXNCO0lBQ3RCLElBQUlhLFlBQVk7SUFDaEIsTUFBTVIsUUFBUTtRQUNWUSxZQUFZUjtRQUNaQSxVQUFVQSxRQUFRUyxVQUFVO0lBQ2hDO0lBQ0EsMkRBQTJEO0lBQzNELGlFQUFpRTtJQUNqRSxJQUFJRCxVQUFVeEIsUUFBUSxLQUFLd0IsVUFBVUgsc0JBQXNCLElBQUlHLFVBQVVFLElBQUksRUFBRTtRQUMzRSwwREFBMEQ7UUFDMUQsT0FBT0YsVUFBVUUsSUFBSTtJQUN6QjtJQUNBLE9BQU87QUFDWDtBQUNBLFNBQVNDLFlBQVlDLElBQUk7SUFDckIsSUFBSSxDQUFDQSxNQUFNO1FBQ1AsT0FBTzFCO0lBQ1g7SUFDQSxJQUFJMEIsS0FBSzVCLFFBQVEsS0FBS2lCLEtBQUtDLGFBQWEsRUFBRTtRQUN0QyxPQUFPVTtJQUNYO0lBQ0EsT0FBT0EsS0FBS0MsYUFBYSxJQUFJM0I7QUFDakM7QUFDQSxTQUFTNEIsZ0JBQWdCbkIsT0FBTztJQUM1QixJQUFJSyxVQUFVUCxpQkFBaUI7UUFDM0JJLE9BQU87UUFDUEMsaUJBQWlCO1FBQ2pCSCxTQUFTQTtJQUNiO0lBQ0EsSUFBSW9CLFlBQVlKLFlBQVlYO0lBQzVCLElBQUllLFVBQVVDLGFBQWEsS0FBS2hCLFNBQVM7UUFDckMsT0FBTztJQUNYO0lBQ0EsSUFBSWlCLGFBQWFYLGNBQWM7UUFDM0JYLFNBQVNLO0lBQ2I7SUFDQSxJQUFJaUIsY0FBY0EsV0FBV0MsVUFBVSxDQUFDRixhQUFhLEtBQUtoQixTQUFTO1FBQy9ELE9BQU87SUFDWDtJQUNBLE9BQU87QUFDWDtBQUNBLG1EQUFtRDtBQUNuRCwwRUFBMEU7QUFDMUUsU0FBU21CO0lBQ0wsSUFBSXpCLE9BQU9hLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUdaLFVBQVVELEtBQUtDLE9BQU87SUFDekcsSUFBSXlCLE9BQU8sRUFBRTtJQUNiLElBQUlwQixVQUFVUCxpQkFBaUI7UUFDM0JJLE9BQU87UUFDUEYsU0FBU0E7SUFDYjtJQUNBLE1BQU1LLFFBQVE7UUFDVm9CLEtBQUtDLElBQUksQ0FBQ3JCO1FBQ1YsbURBQW1EO1FBQ25EQSxVQUFVQSxRQUFRUyxVQUFVO1FBQzVCLElBQUlULFdBQVdBLFFBQVFoQixRQUFRLEtBQUtpQixLQUFLRyxZQUFZLEVBQUU7WUFDbkRKLFVBQVU7UUFDZDtJQUNKO0lBQ0EsT0FBT29CO0FBQ1g7QUFDQSxpRUFBaUU7QUFDakUsZ0VBQWdFO0FBQ2hFLElBQUlFLFFBQVE7SUFDUjtJQUNBO0lBQ0E7SUFDQTtDQUNIO0FBQ0QsSUFBSUMsT0FBTztBQUNYLFNBQVNDLGVBQWV4QixPQUFPO0lBQzNCc0IsTUFBTUcsSUFBSSxDQUFDLFNBQVNDLEtBQUs7UUFDckIsSUFBSSxDQUFDMUIsT0FBTyxDQUFDMEIsTUFBTSxFQUFFO1lBQ2pCLE9BQU87UUFDWDtRQUNBSCxPQUFPRztRQUNQLE9BQU87SUFDWDtBQUNKO0FBQ0EsU0FBU0MsZUFBZTNCLE9BQU8sRUFBRTRCLFFBQVE7SUFDckMsSUFBSSxDQUFDTCxNQUFNO1FBQ1BDLGVBQWV4QjtJQUNuQjtJQUNBLE9BQU9BLE9BQU8sQ0FBQ3VCLEtBQUssQ0FBQ0s7QUFDekI7QUFDQSxrQ0FBa0M7QUFDbEMsSUFBSUMsV0FBV0MsS0FBS0MsS0FBSyxDQUFDRCxLQUFLRSxTQUFTLENBQUN2RCxVQUFVd0QsT0FBTztBQUMxRCxtQkFBbUI7QUFDbkIsSUFBSUMsS0FBS0wsU0FBU0ssRUFBRSxDQUFDQyxNQUFNLElBQUk7QUFDL0IsSUFBSUMsVUFBVUYsT0FBTztBQUNyQixJQUFJRyxVQUFVSCxHQUFHN0MsS0FBSyxDQUFDLEdBQUcsT0FBTztBQUNqQyxJQUFJaUQsTUFBTUosT0FBTztBQUNqQixJQUFJSyxNQUFNTCxPQUFPO0FBQ2pCLFNBQVM7QUFDVCxJQUFJTSxRQUFRWCxTQUFTWSxNQUFNLEtBQUs7QUFDaEMsSUFBSUMsUUFBUWIsU0FBU1ksTUFBTSxLQUFLO0FBQ2hDLElBQUlFLFVBQVVkLFNBQVNZLE1BQU0sS0FBSztBQUNsQyxJQUFJRyxPQUFPZixTQUFTWSxNQUFNLEtBQUs7QUFDL0IsSUFBSUksU0FBU2hCLFNBQVNZLE1BQU0sS0FBSztBQUNqQywrQ0FBK0M7QUFDL0MsSUFBSUssVUFBVUMsV0FBV2xCLFNBQVNpQixPQUFPO0FBQ3pDLElBQUlFLGVBQWVDLEtBQUtDLEtBQUssQ0FBQ0o7QUFDOUJqQixTQUFTbUIsWUFBWSxHQUFHQTtBQUN4Qm5CLFNBQVNzQixFQUFFLEdBQUc7SUFDVixtQkFBbUI7SUFDbkJmLFNBQVNBO0lBQ1RDLFNBQVNBO0lBQ1RDLEtBQUtBO0lBQ0xDLEtBQUtBO0lBQ0wsU0FBUztJQUNUQyxPQUFPQTtJQUNQRSxPQUFPQTtJQUNQQyxTQUFTQTtJQUNUQyxNQUFNQTtJQUNOQyxRQUFRQTtJQUNSLHFCQUFxQjtJQUNyQk8sS0FBS1QsV0FBV0ssaUJBQWlCO0lBQ2pDSyxNQUFNVixXQUFXSyxpQkFBaUI7SUFDbENNLE1BQU1YLFdBQVdLLGlCQUFpQjtBQUN0QztBQUNBLFNBQVNPO0lBQ0wsSUFBSUMsT0FBTztRQUNQLGdEQUFnRDtRQUNoRHhDLGVBQWU5QixTQUFTOEIsYUFBYTtRQUNyQyxrREFBa0Q7UUFDbER5QyxpQkFBaUJDLE9BQU9DLFNBQVM7UUFDakNDLGtCQUFrQkYsT0FBT0csVUFBVTtRQUNuQ0MsZUFBZTVFLFNBQVM2RSxJQUFJLENBQUNKLFNBQVM7UUFDdENLLGdCQUFnQjlFLFNBQVM2RSxJQUFJLENBQUNGLFVBQVU7SUFDNUM7SUFDQSxzRUFBc0U7SUFDdEUsbUVBQW1FO0lBQ25FLElBQUlJLFNBQVMvRSxTQUFTZ0YsYUFBYSxDQUFDO0lBQ3BDRCxPQUFPRSxZQUFZLENBQUMsU0FBUztJQUM3QkYsT0FBT0UsWUFBWSxDQUFDLGFBQWE7SUFDakNGLE9BQU9FLFlBQVksQ0FBQyxhQUFhO0lBQ2pDRixPQUFPRSxZQUFZLENBQUMsZUFBZTtJQUNuQ2pGLFNBQVM2RSxJQUFJLENBQUNLLFdBQVcsQ0FBQ0g7SUFDMUIsSUFBSUksVUFBVUosT0FBT0ssYUFBYTtJQUNsQyxJQUFJdkQsWUFBWXNELFFBQVFuRixRQUFRO0lBQ2hDNkIsVUFBVXdELElBQUk7SUFDZHhELFVBQVV5RCxLQUFLO0lBQ2YsSUFBSUMsVUFBVTFELFVBQVVtRCxhQUFhLENBQUM7SUFDdENuRCxVQUFVZ0QsSUFBSSxDQUFDSyxXQUFXLENBQUNLO0lBQzNCakIsS0FBS1MsTUFBTSxHQUFHQTtJQUNkVCxLQUFLaUIsT0FBTyxHQUFHQTtJQUNmakIsS0FBS0UsTUFBTSxHQUFHVztJQUNkYixLQUFLdEUsUUFBUSxHQUFHNkI7SUFDaEIsT0FBT3lDO0FBQ1g7QUFDQSxtQkFBbUI7QUFDbkIseUJBQXlCO0FBQ3pCLGlFQUFpRTtBQUNqRSw2QkFBNkI7QUFDN0IsOEZBQThGO0FBQzlGLDhFQUE4RTtBQUM5RSwrQkFBK0I7QUFDL0IsaUZBQWlGO0FBQ2pGLFNBQVNrQixLQUFLbEIsSUFBSSxFQUFFbUIsT0FBTztJQUN2Qix3Q0FBd0M7SUFDeENuQixLQUFLaUIsT0FBTyxDQUFDRyxTQUFTLEdBQUc7SUFDekIsK0NBQStDO0lBQy9DLElBQUk1RSxVQUFVLE9BQU8yRSxRQUFRM0UsT0FBTyxLQUFLLFdBQVd3RCxLQUFLdEUsUUFBUSxDQUFDZ0YsYUFBYSxDQUFDUyxRQUFRM0UsT0FBTyxJQUFJMkUsUUFBUTNFLE9BQU8sQ0FBQ3dELEtBQUtpQixPQUFPLEVBQUVqQixLQUFLdEUsUUFBUTtJQUM5SSxrREFBa0Q7SUFDbEQseUNBQXlDO0lBQ3pDLElBQUkyRixRQUFRRixRQUFRRyxNQUFNLElBQUlILFFBQVFHLE1BQU0sQ0FBQzlFLFNBQVN3RCxLQUFLaUIsT0FBTyxFQUFFakIsS0FBS3RFLFFBQVE7SUFDakYsSUFBSSxDQUFDMkYsU0FBU0EsVUFBVSxPQUFPO1FBQzNCQSxRQUFRN0U7SUFDWjtJQUNBLHNEQUFzRDtJQUN0RCxDQUFDQSxRQUFRUyxVQUFVLElBQUkrQyxLQUFLaUIsT0FBTyxDQUFDTCxXQUFXLENBQUNwRTtJQUNoRCwyREFBMkQ7SUFDM0Q2RSxTQUFTQSxNQUFNQSxLQUFLLElBQUlBLE1BQU1BLEtBQUs7SUFDbkMseUJBQXlCO0lBQ3pCLE9BQU9GLFFBQVFJLFFBQVEsR0FBR0osUUFBUUksUUFBUSxDQUFDL0UsU0FBUzZFLE9BQU9yQixLQUFLdEUsUUFBUSxJQUFJc0UsS0FBS3RFLFFBQVEsQ0FBQzhCLGFBQWEsS0FBSzZEO0FBQ2hIO0FBQ0EsU0FBU0csTUFBTXhCLElBQUk7SUFDZix1REFBdUQ7SUFDdkQsSUFBSUEsS0FBS3hDLGFBQWEsS0FBSzlCLFNBQVM2RSxJQUFJLEVBQUU7UUFDdEM3RSxTQUFTOEIsYUFBYSxJQUFJOUIsU0FBUzhCLGFBQWEsQ0FBQ2lFLElBQUksSUFBSS9GLFNBQVM4QixhQUFhLENBQUNpRSxJQUFJO1FBQ3BGLElBQUlwRCxTQUFTc0IsRUFBRSxDQUFDRSxJQUFJLEVBQUU7WUFDbEIsMkVBQTJFO1lBQzNFbkUsU0FBUzZFLElBQUksQ0FBQ2MsS0FBSztRQUN2QjtJQUNKLE9BQU87UUFDSHJCLEtBQUt4QyxhQUFhLElBQUl3QyxLQUFLeEMsYUFBYSxDQUFDNkQsS0FBSyxJQUFJckIsS0FBS3hDLGFBQWEsQ0FBQzZELEtBQUs7SUFDOUU7SUFDQTNGLFNBQVM2RSxJQUFJLENBQUNtQixXQUFXLENBQUMxQixLQUFLUyxNQUFNO0lBQ3JDLDBCQUEwQjtJQUMxQlAsT0FBT0MsU0FBUyxHQUFHSCxLQUFLQyxlQUFlO0lBQ3ZDQyxPQUFPRyxVQUFVLEdBQUdMLEtBQUtJLGdCQUFnQjtJQUN6QzFFLFNBQVM2RSxJQUFJLENBQUNKLFNBQVMsR0FBR0gsS0FBS00sYUFBYTtJQUM1QzVFLFNBQVM2RSxJQUFJLENBQUNGLFVBQVUsR0FBR0wsS0FBS1EsY0FBYztBQUNsRDtBQUNBLFNBQVNtQixZQUFZQyxLQUFLO0lBQ3RCLElBQUk1QixPQUFPRDtJQUNYLElBQUk4QixVQUFVLENBQUM7SUFDZnJILE9BQU9zSCxJQUFJLENBQUNGLE9BQU9HLEdBQUcsQ0FBQyxTQUFTQyxHQUFHO1FBQy9CSCxPQUFPLENBQUNHLElBQUksR0FBR2QsS0FBS2xCLE1BQU00QixLQUFLLENBQUNJLElBQUk7SUFDeEM7SUFDQVIsTUFBTXhCO0lBQ04sT0FBTzZCO0FBQ1g7QUFDQSxrREFBa0Q7QUFDbEQsSUFBSUksWUFBWTtBQUNoQjs7Ozs7O0NBTUMsR0FBRyxTQUFTQyxpQkFBaUJGLEdBQUc7SUFDN0Isa0VBQWtFO0lBQ2xFLDhDQUE4QztJQUM5QyxJQUFJaEMsT0FBTyxLQUFLO0lBQ2hCLElBQUk7UUFDQUEsT0FBT0UsT0FBT2lDLFlBQVksSUFBSWpDLE9BQU9pQyxZQUFZLENBQUNDLE9BQU8sQ0FBQ0o7UUFDMURoQyxPQUFPQSxPQUFPMUIsS0FBS0MsS0FBSyxDQUFDeUIsUUFBUSxDQUFDO0lBQ3RDLEVBQUUsT0FBT3FDLEdBQUc7UUFDUnJDLE9BQU8sQ0FBQztJQUNaO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLFNBQVNzQyxrQkFBa0JOLEdBQUcsRUFBRXJILEtBQUs7SUFDakMsSUFBSSxDQUFDZSxTQUFTNkcsUUFBUSxJQUFJO1FBQ3RCLDJFQUEyRTtRQUMzRSx3RUFBd0U7UUFDeEUsZ0ZBQWdGO1FBQ2hGLElBQUk7WUFDQXJDLE9BQU9pQyxZQUFZLElBQUlqQyxPQUFPaUMsWUFBWSxDQUFDSyxVQUFVLENBQUNSO1FBQzFELEVBQUUsT0FBT0ssR0FBRztRQUNaLFNBQVM7UUFDVDtRQUNBO0lBQ0o7SUFDQSxJQUFJO1FBQ0FuQyxPQUFPaUMsWUFBWSxJQUFJakMsT0FBT2lDLFlBQVksQ0FBQ00sT0FBTyxDQUFDVCxLQUFLMUQsS0FBS0UsU0FBUyxDQUFDN0Q7SUFDM0UsRUFBRSxPQUFPMEgsR0FBRztJQUNaLFNBQVM7SUFDVDtBQUNKO0FBQ0EsSUFBSUssWUFBWSxPQUFPeEMsV0FBVyxlQUFlQSxPQUFPeUMsU0FBUyxDQUFDRCxTQUFTLElBQUk7QUFDL0UsSUFBSUUsV0FBVztBQUNmLElBQUlDLFFBQVFYLGlCQUFpQlU7QUFDN0IsMEVBQTBFO0FBQzFFLElBQUlDLE1BQU1ILFNBQVMsS0FBS0EsYUFBYUcsTUFBTXZELE9BQU8sS0FBSzJDLFdBQVc7SUFDOURZLFFBQVEsQ0FBQztBQUNiO0FBQ0FBLE1BQU1ILFNBQVMsR0FBR0E7QUFDbEJHLE1BQU12RCxPQUFPLEdBQUcyQztBQUNoQixJQUFJYSxVQUFVO0lBQ1ZqSSxLQUFLLFNBQVNBO1FBQ1YsT0FBT2dJO0lBQ1g7SUFDQUUsS0FBSyxTQUFTQSxJQUFJQyxNQUFNO1FBQ3BCeEksT0FBT3NILElBQUksQ0FBQ2tCLFFBQVFDLE9BQU8sQ0FBQyxTQUFTakIsR0FBRztZQUNwQ2EsS0FBSyxDQUFDYixJQUFJLEdBQUdnQixNQUFNLENBQUNoQixJQUFJO1FBQzVCO1FBQ0FhLE1BQU1LLElBQUksR0FBRyxJQUFJQyxPQUFPQyxXQUFXO1FBQ25DZCxrQkFBa0JNLFVBQVVDO0lBQ2hDO0FBQ0o7QUFDQSxTQUFTUTtJQUNMLElBQUlDLGFBQWEsS0FBSztJQUN0Qiw4REFBOEQ7SUFDOUQsdURBQXVEO0lBQ3ZELDZEQUE2RDtJQUM3RCxJQUFJO1FBQ0E1SCxTQUFTNkgsYUFBYSxDQUFDO1FBQ3ZCRCxhQUFhO0lBQ2pCLEVBQUUsT0FBT0UsbUJBQW1CO1FBQ3hCLElBQUk7WUFDQSxnREFBZ0Q7WUFDaEQsNkRBQTZEO1lBQzdEOUgsU0FBUzZILGFBQWEsQ0FBQztZQUN2QkQsYUFBYTtRQUNqQixFQUFFLE9BQU9HLFFBQVE7WUFDYkgsYUFBYTtRQUNqQjtJQUNKO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLElBQUlJLE1BQU07QUFDVixzRUFBc0U7QUFDdEUsSUFBSUMsdUJBQXVCO0lBQ3ZCbkgsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUTRFLFNBQVMsR0FBRyx5Q0FBeUMsb0RBQW9ELHNFQUFzRXNDLE1BQU07UUFDN0wsT0FBT2xILFFBQVErRyxhQUFhLENBQUM7SUFDakM7QUFDSjtBQUNBLHNFQUFzRTtBQUN0RSxJQUFJSyxvQkFBb0I7SUFDcEJwSCxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHLHlDQUF5QywrRUFBK0Usd0RBQXdEc0MsTUFBTTtRQUMxTSxPQUFPO0lBQ1g7SUFDQW5DLFVBQVUsU0FBU0EsU0FBUy9FLE9BQU8sRUFBRXFILFdBQVcsRUFBRXRHLFNBQVM7UUFDdkQsSUFBSWMsU0FBU3NCLEVBQUUsQ0FBQ1QsS0FBSyxFQUFFO1lBQ25CLHVEQUF1RDtZQUN2RCxxRUFBcUU7WUFDckUsT0FBTztRQUNYO1FBQ0EsSUFBSW1DLFFBQVE3RSxRQUFRK0csYUFBYSxDQUFDO1FBQ2xDbEMsTUFBTUEsS0FBSztRQUNYLE9BQU85RCxVQUFVQyxhQUFhLEtBQUs2RDtJQUN2QztBQUNKO0FBQ0Esc0VBQXNFO0FBQ3RFLElBQUl5Qyx1QkFBdUI7SUFDdkJ0SCxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHLDBDQUEwQyxvREFBb0QseURBQXlEc0MsTUFBTTtRQUNqTCxPQUFPbEgsUUFBUStHLGFBQWEsQ0FBQztJQUNqQztJQUNBaEMsVUFBVSxTQUFTQSxTQUFTL0UsT0FBTyxFQUFFcUgsV0FBVyxFQUFFdEcsU0FBUztRQUN2RCxJQUFJYyxTQUFTc0IsRUFBRSxDQUFDVCxLQUFLLEVBQUU7WUFDbkIsdURBQXVEO1lBQ3ZELHFFQUFxRTtZQUNyRSxPQUFPO1FBQ1g7UUFDQSxPQUFPM0IsVUFBVUMsYUFBYSxLQUFLcUc7SUFDdkM7QUFDSjtBQUNBLElBQUlFLDRCQUE0QjtJQUM1QmhHLE1BQU07SUFDTnZCLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0IsSUFBSTtZQUNBLHNGQUFzRjtZQUN0RkEsUUFBUW1FLFlBQVksQ0FBQyxPQUFPK0M7UUFDaEMsRUFBRSxPQUFPckIsR0FBRztRQUNaLHlDQUF5QztRQUN6QztJQUNKO0FBQ0o7QUFDQSxJQUFJMkIsYUFBYTtBQUNqQix1REFBdUQ7QUFDdkQsc0VBQXNFO0FBQ3RFLElBQUlDLHNCQUFzQjtJQUN0QnpILFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVE0RSxTQUFTLEdBQUcsbUdBQW1HLHNEQUFzRDRDLGFBQWE7UUFDMUwsT0FBT3hILFFBQVErRyxhQUFhLENBQUM7SUFDakM7QUFDSjtBQUNBLDRFQUE0RTtBQUM1RSxJQUFJVyxrQ0FBa0M7SUFDbEMxSCxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRbUUsWUFBWSxDQUFDLFlBQVk7UUFDakNuRSxRQUFRbUUsWUFBWSxDQUFDLFNBQVM7UUFDOUJuRSxRQUFRNEUsU0FBUyxHQUFHO1FBQ3BCLE9BQU81RSxRQUFRK0csYUFBYSxDQUFDO0lBQ2pDO0FBQ0o7QUFDQSx3RkFBd0Y7QUFDeEYsNkZBQTZGO0FBQzdGLG1EQUFtRDtBQUNuRCx1RUFBdUU7QUFDdkUsSUFBSVksd0JBQXdCO0lBQ3hCM0gsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUW1FLFlBQVksQ0FBQyxZQUFZO1FBQ2pDbkUsUUFBUW1FLFlBQVksQ0FBQyxZQUFZO0lBQ3JDO0FBQ0o7QUFDQSxJQUFJeUQsZ0JBQWdCO0lBQ2hCNUgsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUTRFLFNBQVMsR0FBRztJQUN4QjtBQUNKO0FBQ0Esc0RBQXNEO0FBQ3RELElBQUlpRCx3QkFBd0I7SUFDeEI3SCxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRbUUsWUFBWSxDQUFDLFNBQVM7UUFDOUJuRSxRQUFRNEUsU0FBUyxHQUFHO0lBQ3hCO0FBQ0o7QUFDQSx3REFBd0Q7QUFDeEQsd0VBQXdFO0FBQ3hFLHlFQUF5RTtBQUN6RSxJQUFJa0Qsb0JBQW9CO0lBQ3BCOUgsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUW1FLFlBQVksQ0FBQyxZQUFZO1FBQ2pDbkUsUUFBUW1FLFlBQVksQ0FBQyxZQUFZO0lBQ3JDO0FBQ0o7QUFDQSx1REFBdUQ7QUFDdkQsdURBQXVEO0FBQ3ZELHFFQUFxRTtBQUNyRSxJQUFJNEQsZ0JBQWdCO0lBQ2hCL0gsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUWdJLElBQUksR0FBRztRQUNmaEksUUFBUTRFLFNBQVMsR0FBRyxxQkFBcUJzQyxNQUFNO1FBQy9DLE9BQU9sSCxRQUFRK0csYUFBYSxDQUFDO0lBQ2pDO0FBQ0o7QUFDQSx1REFBdUQ7QUFDdkQsc0VBQXNFO0FBQ3RFLElBQUlrQix5QkFBeUI7SUFDekJqSSxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHLHFHQUFxRyxpRUFBaUUsVUFBVXNDLE1BQU07UUFDMU0sT0FBT2xILFFBQVErRyxhQUFhLENBQUM7SUFDakM7QUFDSjtBQUNBLElBQUltQixzQkFBc0I7SUFDdEJsSSxTQUFTLFNBQVNBLFFBQVF5RSxPQUFPLEVBQUUxRCxTQUFTO1FBQ3hDLElBQUlrRCxTQUFTbEQsVUFBVW1ELGFBQWEsQ0FBQztRQUNyQyxnRkFBZ0Y7UUFDaEZPLFFBQVFMLFdBQVcsQ0FBQ0g7UUFDcEIsaUZBQWlGO1FBQ2pGLElBQUlrRSxpQkFBaUJsRSxPQUFPSyxhQUFhLENBQUNwRixRQUFRO1FBQ2xEaUosZUFBZTVELElBQUk7UUFDbkI0RCxlQUFlM0QsS0FBSztRQUNwQixPQUFPUDtJQUNYO0lBQ0FhLFFBQVEsU0FBU0EsT0FBT2IsTUFBTTtRQUMxQkEsT0FBT21FLEtBQUssQ0FBQ0MsVUFBVSxHQUFHO1FBQzFCLElBQUlGLGlCQUFpQmxFLE9BQU9LLGFBQWEsQ0FBQ3BGLFFBQVE7UUFDbEQsSUFBSUwsUUFBUXNKLGVBQWVqRSxhQUFhLENBQUM7UUFDekNpRSxlQUFlcEUsSUFBSSxDQUFDSyxXQUFXLENBQUN2RjtRQUNoQyxPQUFPQTtJQUNYO0lBQ0FrRyxVQUFVLFNBQVNBLFNBQVNkLE1BQU07UUFDOUIsSUFBSWtFLGlCQUFpQmxFLE9BQU9LLGFBQWEsQ0FBQ3BGLFFBQVE7UUFDbEQsSUFBSTJGLFFBQVFzRCxlQUFlcEIsYUFBYSxDQUFDO1FBQ3pDLE9BQU9vQixlQUFlbkgsYUFBYSxLQUFLNkQ7SUFDNUM7QUFDSjtBQUNBLElBQUl5RCxTQUFTLENBQUN6RyxTQUFTc0IsRUFBRSxDQUFDTixNQUFNO0FBQ2hDLFNBQVMwRjtJQUNMLE9BQU9EO0FBQ1g7QUFDQSwwRUFBMEU7QUFDMUUsNEVBQTRFO0FBQzVFLElBQUlFLHVCQUF1QjtJQUN2QnhJLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVFtRSxZQUFZLENBQUMsWUFBWTtJQUNyQztBQUNKO0FBQ0EsSUFBSXNFLHFCQUFxQjtJQUNyQnpJLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVFtRSxZQUFZLENBQUMsWUFBWTtJQUNyQztJQUNBWSxVQUFVLFNBQVNBLFNBQVMvRSxPQUFPLEVBQUVxSCxXQUFXLEVBQUV0RyxTQUFTO1FBQ3ZELHNFQUFzRTtRQUN0RSxpQ0FBaUMsR0FBRyxJQUFJMkgsdUNBQXVDMUksUUFBUTJJLFlBQVk7UUFDbkcsZ0NBQWdDLEdBQUczSSxRQUFRNkUsS0FBSztRQUNoRCxPQUFPOUQsVUFBVUMsYUFBYSxLQUFLaEI7SUFDdkM7QUFDSjtBQUNBLElBQUk0SSxNQUFNLHdGQUF3Rix1R0FBdUc7QUFDek0scURBQXFEO0FBQ3JELElBQUlDLHVCQUF1QjtJQUN2QjdJLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVFtRSxZQUFZLENBQUMsUUFBUTtRQUM3Qm5FLFFBQVFtRSxZQUFZLENBQUMsUUFBUXlFO1FBQzdCNUksUUFBUW1FLFlBQVksQ0FBQyxTQUFTO1FBQzlCbkUsUUFBUW1FLFlBQVksQ0FBQyxVQUFVO1FBQy9CbkUsUUFBUW9JLEtBQUssQ0FBQ0MsVUFBVSxHQUFHO0lBQy9CO0FBQ0o7QUFDQSxxREFBcUQ7QUFDckQsSUFBSVMsaUJBQWlCO0lBQ2pCdkgsTUFBTTtJQUNOdkIsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUW1FLFlBQVksQ0FBQyxRQUFRO1FBQzdCbkUsUUFBUW1FLFlBQVksQ0FBQyxRQUFReUU7UUFDN0I1SSxRQUFRbUUsWUFBWSxDQUFDLFNBQVM7UUFDOUJuRSxRQUFRbUUsWUFBWSxDQUFDLFVBQVU7SUFDbkM7SUFDQVksVUFBVSxTQUFTQSxTQUFTL0UsT0FBTyxFQUFFcUgsV0FBVyxFQUFFdEcsU0FBUztRQUN2RCxJQUFJYyxTQUFTc0IsRUFBRSxDQUFDVCxLQUFLLEVBQUU7WUFDbkIscUhBQXFIO1lBQ3JILCtIQUErSDtZQUMvSCxPQUFPO1FBQ1g7UUFDQSxPQUFPM0IsVUFBVUMsYUFBYSxLQUFLaEI7SUFDdkM7QUFDSjtBQUNBLCtEQUErRDtBQUMvRCxJQUFJK0ksV0FBVyxDQUFDbEgsU0FBU3NCLEVBQUUsQ0FBQ0MsR0FBRztBQUMvQixTQUFTNEY7SUFDTCxPQUFPRDtBQUNYO0FBQ0EsSUFBSUUseUJBQXlCO0lBQ3pCakosU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUTRFLFNBQVMsR0FBRyx1R0FBdUcscURBQXFELFVBQVVzQyxNQUFNO1FBQ2hNLGlDQUFpQztRQUNqQyxPQUFPbEgsUUFBUStHLGFBQWEsQ0FBQztJQUNqQztJQUNBaEMsVUFBVSxTQUFTQSxTQUFTL0UsT0FBTyxFQUFFcUgsV0FBVyxFQUFFdEcsU0FBUztRQUN2RCxJQUFJbUksU0FBU2xKLFFBQVErRyxhQUFhLENBQUM7UUFDbkMsT0FBT2hHLFVBQVVDLGFBQWEsS0FBS2tJO0lBQ3ZDO0FBQ0o7QUFDQSwrREFBK0Q7QUFDL0QsSUFBSUMsc0JBQXNCO0lBQ3RCbkosU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUTRFLFNBQVMsR0FBRztRQUNwQixvQ0FBb0M7UUFDcEMsT0FBTztJQUNYO0lBQ0FHLFVBQVUsU0FBU0EsU0FBUy9FLE9BQU8sRUFBRXFILFdBQVcsRUFBRXRHLFNBQVM7UUFDdkQsSUFBSXFJLFlBQVlwSixRQUFRK0csYUFBYSxDQUFDO1FBQ3RDLElBQUlzQyxXQUFXckosUUFBUStHLGFBQWEsQ0FBQztRQUNyQywyRkFBMkY7UUFDM0YsMkRBQTJEO1FBQzNEL0csUUFBUTZFLEtBQUs7UUFDYjdFLFFBQVErRyxhQUFhLENBQUMsVUFBVWxDLEtBQUs7UUFDckMsT0FBTzlELFVBQVVDLGFBQWEsS0FBS29JLGFBQWEsZUFBZXJJLFVBQVVDLGFBQWEsS0FBS3FJLFlBQVksY0FBYztJQUN6SDtBQUNKO0FBQ0EsaURBQWlEO0FBQ2pELElBQUlDLGtCQUFrQjtJQUNsQnRKLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVFtRSxZQUFZLENBQUMsU0FBUztRQUM5Qm5FLFFBQVE0RSxTQUFTLEdBQUc7UUFDcEIsT0FBTzVFLFFBQVErRyxhQUFhLENBQUM7SUFDakM7QUFDSjtBQUNBLGlEQUFpRDtBQUNqRCxJQUFJd0Msc0NBQXNDO0lBQ3RDdkosU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUW1FLFlBQVksQ0FBQyxTQUFTO1FBQzlCbkUsUUFBUTRFLFNBQVMsR0FBRztJQUN4QjtBQUNKO0FBQ0EsaURBQWlEO0FBQ2pELElBQUk0RSx1QkFBdUI7SUFDdkJ4SixTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRbUUsWUFBWSxDQUFDLFNBQVM7UUFDOUJuRSxRQUFRNEUsU0FBUyxHQUFHO0lBQ3hCO0FBQ0o7QUFDQSxJQUFJNkUsZUFBZTtJQUNmekosU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUTRFLFNBQVMsR0FBRztRQUNwQixPQUFPNUUsUUFBUTBKLGlCQUFpQjtJQUNwQztBQUNKO0FBQ0EsU0FBU0M7SUFDTCx3RkFBd0Y7SUFDeEYsNENBQTRDO0lBQzVDLElBQUlDLGdCQUFnQjFLLFNBQVMySyxlQUFlLENBQUMsOEJBQThCO0lBQzNFRCxjQUFjRSxLQUFLLENBQUNDLE9BQU8sQ0FBQzVMLEtBQUssR0FBRztJQUNwQ3lMLGNBQWNJLE1BQU0sQ0FBQ0QsT0FBTyxDQUFDNUwsS0FBSyxHQUFHO0lBQ3JDeUwsY0FBY3hGLFdBQVcsQ0FBQ2xGLFNBQVNnRixhQUFhLENBQUM7SUFDakQwRixjQUFjSyxTQUFTLENBQUNDLElBQUksR0FBRztJQUMvQixPQUFPTjtBQUNYO0FBQ0EsU0FBU08sMEJBQTBCbkssT0FBTztJQUN0QywyQ0FBMkM7SUFDM0MsbURBQW1EO0lBQ25ELGlEQUFpRDtJQUNqRCxJQUFJb0ssZUFBZXBLLFFBQVFxSyxlQUFlLElBQUlySyxRQUFRc0ssUUFBUSxDQUFDQyxXQUFXLE9BQU87SUFDakYsSUFBSSxDQUFDSCxjQUFjO1FBQ2YsT0FBTztJQUNYO0lBQ0EsNEVBQTRFO0lBQzVFLElBQUlSLGdCQUFnQkQ7SUFDcEIzSixRQUFRb0UsV0FBVyxDQUFDd0Y7SUFDcEIsSUFBSS9LLFFBQVErSyxjQUFjN0MsYUFBYSxDQUFDO0lBQ3hDbEksTUFBTWdHLEtBQUs7SUFDWCxnREFBZ0Q7SUFDaEQsb0RBQW9EO0lBQ3BELGlEQUFpRDtJQUNqRCxtQ0FBbUM7SUFDbkNoRyxNQUFNMkwsUUFBUSxHQUFHO0lBQ2pCLFdBQVc7SUFDWHhLLFFBQVFrRixXQUFXLENBQUMwRTtJQUNwQixPQUFPO0FBQ1g7QUFDQSxTQUFTYSxTQUFTekssT0FBTztJQUNyQixPQUFPLHdGQUF3RkEsVUFBVTtBQUM3RztBQUNBLFNBQVM2RSxNQUFNN0UsT0FBTztJQUNsQixJQUFJQSxRQUFRNkUsS0FBSyxFQUFFO1FBQ2Y7SUFDSjtJQUNBLElBQUk7UUFDQTZGLFlBQVlDLFNBQVMsQ0FBQzlGLEtBQUssQ0FBQ3ZGLElBQUksQ0FBQ1U7SUFDckMsRUFBRSxPQUFPNkYsR0FBRztRQUNSc0UsMEJBQTBCbks7SUFDOUI7QUFDSjtBQUNBLFNBQVMrRSxTQUFTL0UsT0FBTyxFQUFFcUgsV0FBVyxFQUFFdEcsU0FBUztJQUM3QzhELE1BQU13QztJQUNOLE9BQU90RyxVQUFVQyxhQUFhLEtBQUtxRztBQUN2QztBQUNBLElBQUl1RCw2QkFBNkI7SUFDN0I1SyxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHNkYsU0FBUztRQUM3QixPQUFPekssUUFBUStHLGFBQWEsQ0FBQztJQUNqQztJQUNBaEMsVUFBVUE7QUFDZDtBQUNBLElBQUk4Riw0QkFBNEI7SUFDNUI3SyxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHNkYsU0FBUztRQUM3QixPQUFPekssUUFBUStHLGFBQWEsQ0FBQztJQUNqQztJQUNBaEMsVUFBVUE7QUFDZDtBQUNBLElBQUkrRixvQ0FBb0M7SUFDcEM5SyxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHNkYsU0FBUztRQUM3QixPQUFPekssUUFBUStHLGFBQWEsQ0FBQztJQUNqQztJQUNBaEMsVUFBVUE7QUFDZDtBQUNBLElBQUlnRyxzQkFBc0I7SUFDdEIvSyxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCQSxRQUFRNEUsU0FBUyxHQUFHNkYsU0FBUztZQUN6QjtZQUNBO1NBQ0gsQ0FBQ08sSUFBSSxDQUFDO1FBQ1AsT0FBT2hMLFFBQVErRyxhQUFhLENBQUM7SUFDakM7SUFDQWhDLFVBQVVBO0FBQ2Q7QUFDQSxJQUFJa0csZ0NBQWdDO0lBQ2hDakwsU0FBUztJQUNUOEUsUUFBUSxTQUFTQSxPQUFPOUUsT0FBTztRQUMzQkEsUUFBUTRFLFNBQVMsR0FBRzZGLFNBQVM7UUFDN0IsMEZBQTBGO1FBQzFGLE9BQU96SyxRQUFRK0csYUFBYSxDQUFDLG9CQUFvQi9HLFFBQVFrTCxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO0lBQ3JHO0lBQ0FuRyxVQUFVQTtBQUNkO0FBQ0Esa0ZBQWtGO0FBQ2xGLGdGQUFnRjtBQUNoRiwyQ0FBMkM7QUFDM0MsMkRBQTJEO0FBQzNELElBQUlvRyxXQUFXQyxRQUFRdkosU0FBU3NCLEVBQUUsQ0FBQ1QsS0FBSyxJQUFJLE9BQU8ySSxlQUFlLGVBQWVBLFdBQVdWLFNBQVMsQ0FBQzlGLEtBQUs7QUFDM0csU0FBU3lHO0lBQ0wsT0FBT0g7QUFDWDtBQUNBLElBQUlJLFdBQVc7SUFDWHZMLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVE0RSxTQUFTLEdBQUc2RixTQUFTO1FBQzdCLE9BQU96SyxRQUFRd0wsVUFBVTtJQUM3QjtJQUNBekcsVUFBVUE7QUFDZDtBQUNBLDBFQUEwRTtBQUMxRSw0RUFBNEU7QUFDNUUsSUFBSTBHLGtDQUFrQztJQUNsQ3pMLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU87UUFDM0JBLFFBQVFtRSxZQUFZLENBQUMsWUFBWTtJQUNyQztBQUNKO0FBQ0EsSUFBSXVILGFBQWE7SUFDYjFMLFNBQVM7SUFDVDhFLFFBQVEsU0FBU0EsT0FBTzlFLE9BQU8sRUFBRXlFLE9BQU8sRUFBRTFELFNBQVM7UUFDL0MsNkRBQTZEO1FBQzdELDZDQUE2QztRQUM3QyxnREFBZ0Q7UUFDaEQsSUFBSTRLLFdBQVc1SyxVQUFVNkssc0JBQXNCO1FBQy9DRCxTQUFTL0csU0FBUyxHQUFHO1FBQ3JCNUUsUUFBUW9FLFdBQVcsQ0FBQ3VIO0lBQ3hCO0FBQ0o7QUFDQSxJQUFJRSw0QkFBNEI7SUFDNUI3TCxTQUFTO0lBQ1Q4RSxRQUFRLFNBQVNBLE9BQU85RSxPQUFPO1FBQzNCLElBQUk7WUFDQSxzRkFBc0Y7WUFDdEZBLFFBQVFtRSxZQUFZLENBQUMsT0FBTytDO1FBQ2hDLEVBQUUsT0FBT3JCLEdBQUc7UUFDWix5Q0FBeUM7UUFDekM7SUFDSjtBQUNKO0FBQ0EseURBQXlEO0FBQ3pELElBQUlpRyxXQUFXakssU0FBU3NCLEVBQUUsQ0FBQ1QsS0FBSyxJQUFJYixTQUFTc0IsRUFBRSxDQUFDUixPQUFPLElBQUlkLFNBQVNzQixFQUFFLENBQUNQLElBQUk7QUFDM0UsU0FBU21KO0lBQ0wsT0FBT0Q7QUFDWDtBQUNBLElBQUlFLGdCQUFnQjtJQUNoQm5GLGlDQUFpQ0E7SUFDakMwQiw0QkFBNEJBO0lBQzVCUyxnQkFBZ0JBO0lBQ2hCc0Msa0JBQWtCQTtJQUNsQlMsOEJBQThCQTtBQUNsQztBQUNBLElBQUlFLG1CQUFtQjtJQUNuQjlFLHNCQUFzQkE7SUFDdEJDLG1CQUFtQkE7SUFDbkJFLHNCQUFzQkE7SUFDdEJDLDJCQUEyQkE7SUFDM0JFLHFCQUFxQkE7SUFDckJDLGlDQUFpQ0E7SUFDakNDLHVCQUF1QkE7SUFDdkJDLGVBQWVBO0lBQ2ZDLHVCQUF1QkE7SUFDdkJDLG1CQUFtQkE7SUFDbkJDLGVBQWVBO0lBQ2ZFLHdCQUF3QkE7SUFDeEJDLHFCQUFxQkE7SUFDckJNLHNCQUFzQkE7SUFDdEJDLG9CQUFvQkE7SUFDcEJLLGdCQUFnQkE7SUFDaEJELHNCQUFzQkE7SUFDdEJJLHdCQUF3QkE7SUFDeEJFLHFCQUFxQkE7SUFDckJHLGlCQUFpQkE7SUFDakJDLHFDQUFxQ0E7SUFDckNDLHNCQUFzQkE7SUFDdEJDLGNBQWNBO0lBQ2RtQiw0QkFBNEJBO0lBQzVCQywyQkFBMkJBO0lBQzNCQyxtQ0FBbUNBO0lBQ25DQyxxQkFBcUJBO0lBQ3JCRSwrQkFBK0JBO0lBQy9CTSxVQUFVQTtJQUNWRSxpQ0FBaUNBO0lBQ2pDQyxZQUFZQTtJQUNaRywyQkFBMkJBO0FBQy9CO0FBQ0EsU0FBU0s7SUFDTCxJQUFJN0csVUFBVUYsWUFBWThHO0lBQzFCak8sT0FBT3NILElBQUksQ0FBQzBHLGVBQWV2RixPQUFPLENBQUMsU0FBU2pCLEdBQUc7UUFDM0NILE9BQU8sQ0FBQ0csSUFBSSxHQUFHd0csYUFBYSxDQUFDeEcsSUFBSTtJQUNyQztJQUNBLE9BQU9IO0FBQ1g7QUFDQSxJQUFJOEcsZ0JBQWdCO0FBQ3BCLFNBQVNDO0lBQ0wsSUFBSUQsZUFBZTtRQUNmLE9BQU9BO0lBQ1g7SUFDQUEsZ0JBQWdCN0YsUUFBUWpJLEdBQUc7SUFDM0IsSUFBSSxDQUFDOE4sY0FBY3pGLElBQUksRUFBRTtRQUNyQkosUUFBUUMsR0FBRyxDQUFDMkY7UUFDWkMsZ0JBQWdCN0YsUUFBUWpJLEdBQUc7SUFDL0I7SUFDQSxPQUFPOE47QUFDWDtBQUNBLElBQUlFLFdBQVcsS0FBSztBQUNwQiw2RUFBNkU7QUFDN0UsNERBQTREO0FBQzVELElBQUlDLGdDQUFnQztBQUNwQyxJQUFJQyxrQ0FBa0M7QUFDdEMsU0FBU0MsZ0JBQWdCN00sT0FBTztJQUM1QixJQUFJLENBQUMwTSxVQUFVO1FBQ1hBLFdBQVdEO0lBQ2Y7SUFDQSxJQUFJSyxzQkFBc0JKLFNBQVNaLCtCQUErQixHQUFHYyxrQ0FBa0NEO0lBQ3ZHLElBQUl0TSxVQUFVUCxpQkFBaUI7UUFDM0JJLE9BQU87UUFDUEMsaUJBQWlCO1FBQ2pCSCxTQUFTQTtJQUNiO0lBQ0Esd0RBQXdEO0lBQ3hELG9GQUFvRjtJQUNwRixJQUFJK00sY0FBYzFNLFFBQVEyTSxZQUFZLENBQUM7SUFDdkMsSUFBSUMsY0FBYzVNLFFBQVEyTSxZQUFZLENBQUM7SUFDdkMsSUFBSSxDQUFDRCxlQUFlLENBQUNFLGFBQWE7UUFDOUIsT0FBTztJQUNYO0lBQ0EsNkVBQTZFO0lBQzdFLElBQUl4QyxlQUFlcEssUUFBUXFLLGVBQWUsSUFBSXJLLFFBQVFzSyxRQUFRLENBQUNDLFdBQVcsT0FBTztJQUNqRixJQUFJSCxnQkFBZ0IsQ0FBQ2lDLFNBQVN4Qix5QkFBeUIsRUFBRTtRQUNyRCxPQUFPO0lBQ1g7SUFDQSw0RUFBNEU7SUFDNUUsSUFBSXdCLFNBQVM3RCxvQkFBb0IsRUFBRTtRQUMvQixPQUFPO0lBQ1g7SUFDQSx3RUFBd0U7SUFDeEUsSUFBSXFFLFdBQVc3TSxRQUFROE0sWUFBWSxDQUFDSixjQUFjLGFBQWE7SUFDL0QsZ0RBQWdEO0lBQ2hELG1GQUFtRjtJQUNuRixJQUFJRyxhQUFhLFVBQVU7UUFDdkIsT0FBTztJQUNYO0lBQ0EsT0FBT3pCLFFBQVF5QixZQUFZSixvQkFBb0IvSCxJQUFJLENBQUNtSTtBQUN4RDtBQUNBLFNBQVNFLGNBQWMvTSxPQUFPO0lBQzFCLElBQUksQ0FBQ3dNLGdCQUFnQnhNLFVBQVU7UUFDM0IsT0FBTztJQUNYO0lBQ0Esd0RBQXdEO0lBQ3hELG9GQUFvRjtJQUNwRixJQUFJME0sY0FBYzFNLFFBQVEyTSxZQUFZLENBQUM7SUFDdkMsSUFBSUssZ0JBQWdCTixjQUFjLGFBQWE7SUFDL0MsNEVBQTRFO0lBQzVFLElBQUlHLFdBQVdJLFNBQVNqTixRQUFROE0sWUFBWSxDQUFDRSxnQkFBZ0I7SUFDN0QsT0FBT0UsTUFBTUwsWUFBWSxDQUFDLElBQUlBO0FBQ2xDO0FBQ0Esc0VBQXNFO0FBQ3RFLDhEQUE4RDtBQUM5RCx1REFBdUQ7QUFDdkQsU0FBU00scUJBQXFCL0UsS0FBSztJQUMvQixrRUFBa0U7SUFDbEUsaURBQWlEO0lBQ2pELElBQUlnRixhQUFhaEYsTUFBTWlGLGdCQUFnQixJQUFJO0lBQzNDLE9BQU9qQyxRQUFRZ0MsY0FBY0EsV0FBV0UsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUNsRTtBQUNBLFNBQVNDLHFCQUFxQm5GLEtBQUs7SUFDL0IsT0FBTztRQUNIQSxNQUFNb0YsZ0JBQWdCLENBQUM7UUFDdkJwRixNQUFNb0YsZ0JBQWdCLENBQUM7UUFDdkJwRixNQUFNb0YsZ0JBQWdCLENBQUM7S0FDMUIsQ0FBQy9MLElBQUksQ0FBQyxTQUFTZ00sUUFBUTtRQUNwQixPQUFPQSxhQUFhLFVBQVVBLGFBQWE7SUFDL0M7QUFDSjtBQUNBLFNBQVNDLGtCQUFrQnRGLEtBQUs7SUFDNUIsT0FBT0EsTUFBTXVGLE9BQU8sQ0FBQ0wsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUM1QztBQUNBLFNBQVNNLHNCQUFzQjVOLE9BQU8sRUFBRXNLLFFBQVEsRUFBRXVELGNBQWMsRUFBRUMsV0FBVztJQUN6RSxJQUFJeEQsYUFBYSxTQUFTQSxhQUFhLFFBQVE7UUFDM0MsMkVBQTJFO1FBQzNFLHdFQUF3RTtRQUN4RSxxQ0FBcUM7UUFDckMsT0FBTztJQUNYO0lBQ0EsSUFBSXVELGtCQUFrQkEsbUJBQW1CLFNBQVNBLG1CQUFtQixVQUFVLENBQUNOLHFCQUFxQk8sY0FBYztRQUMvRyxPQUFPO0lBQ1g7SUFDQSxPQUFPOU4sUUFBUTJJLFlBQVksR0FBRzNJLFFBQVErTixZQUFZLElBQUkvTixRQUFRZ08sV0FBVyxHQUFHaE8sUUFBUWlPLFdBQVc7QUFDbkc7QUFDQSxJQUFJQyxhQUFhLEtBQUs7QUFDdEIsU0FBU0M7SUFDTCxJQUFJek8sT0FBT2EsVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBR1osVUFBVUQsS0FBS0MsT0FBTyxFQUFFeU8sY0FBYzFPLEtBQUsyTyxNQUFNLEVBQUVBLFNBQVNELGdCQUFnQm5QLFlBQVk7UUFDdktxUCxTQUFTO1FBQ1RDLFlBQVk7UUFDWkMsUUFBUTtJQUNaLElBQUlKO0lBQ0osSUFBSSxDQUFDRixZQUFZO1FBQ2JBLGFBQWE5QjtJQUNqQjtJQUNBLElBQUlwTSxVQUFVUCxpQkFBaUI7UUFDM0JJLE9BQU87UUFDUEMsaUJBQWlCO1FBQ2pCSCxTQUFTQTtJQUNiO0lBQ0EsSUFBSSxDQUFDME8sT0FBT0csTUFBTSxJQUFJeE8sUUFBUWtCLFVBQVUsRUFBRTtRQUN0QyxzRUFBc0U7UUFDdEUsT0FBTztJQUNYO0lBQ0EsSUFBSW9KLFdBQVd0SyxRQUFRc0ssUUFBUSxDQUFDQyxXQUFXO0lBQzNDLElBQUlELGFBQWEsV0FBV3RLLFFBQVFrSyxJQUFJLEtBQUssVUFBVTtRQUNuRCxrREFBa0Q7UUFDbEQsT0FBTztJQUNYO0lBQ0EsSUFBSUksYUFBYSxXQUFXQSxhQUFhLFlBQVlBLGFBQWEsWUFBWUEsYUFBYSxZQUFZO1FBQ25HLE9BQU87SUFDWDtJQUNBLElBQUlBLGFBQWEsWUFBWTRELFdBQVcvRSxtQkFBbUIsRUFBRTtRQUN6RCxxQ0FBcUM7UUFDckMsT0FBTztJQUNYO0lBQ0EsSUFBSW1CLGFBQWEsU0FBUztRQUN0QixxQ0FBcUM7UUFDckMsT0FBTztJQUNYO0lBQ0EsSUFBSUEsYUFBYSxRQUFRO1FBQ3JCLHFDQUFxQztRQUNyQyxPQUFPO0lBQ1g7SUFDQSxJQUFJQSxhQUFhLE9BQU90SyxRQUFRMk0sWUFBWSxDQUFDLFNBQVM7UUFDbEQsT0FBTztJQUNYO0lBQ0EsSUFBSXJDLGFBQWEsWUFBWXRLLFFBQVEyTSxZQUFZLENBQUMsV0FBVztRQUN6RCxpREFBaUQ7UUFDakQsT0FBTztJQUNYO0lBQ0EsSUFBSXJDLGFBQWEsVUFBVTtRQUN2QixJQUFJbUUsVUFBVXpPLFFBQVE4TSxZQUFZLENBQUM7UUFDbkMsSUFBSSxDQUFDb0IsV0FBV3BGLGNBQWMsSUFBSTJGLFlBQVksaUJBQWlCO1lBQzNELHFFQUFxRTtZQUNyRSxPQUFPO1FBQ1gsT0FBTyxJQUFJLENBQUNQLFdBQVdsRixjQUFjLElBQUl5RixZQUFZLGlDQUFpQztZQUNsRix1RkFBdUY7WUFDdkYsT0FBTztRQUNYO0lBQ0o7SUFDQSxJQUFJbkUsYUFBYSxZQUFZQSxhQUFhLFVBQVU7UUFDaEQsOEJBQThCO1FBQzlCLE9BQU87SUFDWDtJQUNBLElBQUlBLGFBQWEsV0FBV0EsYUFBYSxVQUFVO1FBQy9DLHVEQUF1RDtRQUN2RCxxREFBcUQ7UUFDckQsT0FBTztJQUNYO0lBQ0EsSUFBSXRLLFFBQVEyTSxZQUFZLENBQUMsb0JBQW9CO1FBQ3pDLDBDQUEwQztRQUMxQyxPQUFPO0lBQ1g7SUFDQSxJQUFJckMsYUFBYSxXQUFZNEQsQ0FBQUEsV0FBVzNHLHlCQUF5QixJQUFJdkgsUUFBUTJNLFlBQVksQ0FBQyxXQUFVLEdBQUk7UUFDcEcsT0FBTztJQUNYO0lBQ0EsSUFBSXJDLGFBQWEsV0FBWTRELENBQUFBLFdBQVdyQyx5QkFBeUIsSUFBSTdMLFFBQVEyTSxZQUFZLENBQUMsV0FBVSxHQUFJO1FBQ3BHLE9BQU87SUFDWDtJQUNBLElBQUl1QixXQUFXekUsWUFBWSxJQUFJYSxhQUFhLFdBQVc7UUFDbkQsT0FBTztJQUNYO0lBQ0EsSUFBSW9FLGdCQUFnQmxDLGdCQUFnQnhNO0lBQ3BDLElBQUlzSyxhQUFhLFNBQVN0SyxRQUFRMk0sWUFBWSxDQUFDLFdBQVc7UUFDdEQsOEZBQThGO1FBQzlGLGdGQUFnRjtRQUNoRixPQUFPK0IsaUJBQWlCUixXQUFXakcsc0JBQXNCLElBQUlpRyxXQUFXakYsc0JBQXNCO0lBQ2xHO0lBQ0EsSUFBSWlGLFdBQVd4QyxVQUFVLElBQUtwQixDQUFBQSxhQUFhLFdBQVdBLGFBQWEsSUFBRyxHQUFJO1FBQ3RFLDhDQUE4QztRQUM5QyxPQUFPO0lBQ1g7SUFDQSxJQUFJNEQsV0FBV3RHLGFBQWEsSUFBSTBDLGFBQWEsWUFBWTtRQUNyRCx3Q0FBd0M7UUFDeEMsT0FBTztJQUNYO0lBQ0EsSUFBSUYsZUFBZUUsYUFBYTtJQUNoQyxJQUFJcUUsZUFBZTNPLFFBQVFxSyxlQUFlO0lBQzFDLElBQUl1RSxxQkFBcUI1TyxRQUFROE0sWUFBWSxDQUFDO0lBQzlDLElBQUlELFdBQVdFLGNBQWMvTTtJQUM3QixJQUFJc0ssYUFBYSxTQUFTdUMsYUFBYSxRQUFRLENBQUNxQixXQUFXbkQsbUJBQW1CLEVBQUU7UUFDNUUsOEZBQThGO1FBQzlGLE9BQU87SUFDWDtJQUNBLElBQUlULGFBQWEsaUJBQWlCO1FBQzlCLHVEQUF1RDtRQUN2RCxPQUFPdUMsYUFBYSxRQUFRcUIsV0FBV2pELDZCQUE2QjtJQUN4RTtJQUNBLElBQUl0SixlQUFlM0IsU0FBUyxZQUFZQSxRQUFRMk0sWUFBWSxDQUFDLGVBQWU7UUFDeEUsT0FBTztJQUNYO0lBQ0EsSUFBSSxDQUFDdkMsZ0JBQWdCdUUsWUFBVyxLQUFNM08sUUFBUTZFLEtBQUssSUFBSSxDQUFDcUosV0FBV3BELGlDQUFpQyxJQUFJK0IsV0FBVyxHQUFHO1FBQ2xILGlFQUFpRTtRQUNqRSx5REFBeUQ7UUFDekQsMkRBQTJEO1FBQzNELE9BQU87SUFDWDtJQUNBLElBQUl6QyxjQUFjO1FBQ2QsT0FBT3NFLGlCQUFpQlIsV0FBVzNDLFFBQVEsSUFBSTJDLFdBQVc1QyxnQkFBZ0IsSUFBSSxtRkFBbUY7UUFDaktGLFFBQVE4QyxXQUFXdEQsMEJBQTBCLElBQUlnRSxzQkFBc0JBLHVCQUF1QjtJQUNsRztJQUNBLElBQUlELGNBQWM7UUFDZCxJQUFJVCxXQUFXckQseUJBQXlCLElBQUk2RCxlQUFlO1lBQ3ZELE9BQU87UUFDWDtRQUNBLElBQUlSLFdBQVd0RCwwQkFBMEIsRUFBRTtZQUN2QyxtRkFBbUY7WUFDbkYsT0FBT2dFLHVCQUF1QjtRQUNsQztJQUNKO0lBQ0Esa0dBQWtHO0lBQ2xHLElBQUlGLGVBQWU7UUFDZixPQUFPO0lBQ1g7SUFDQSxJQUFJdEcsUUFBUTFFLE9BQU9tTCxnQkFBZ0IsQ0FBQzdPLFNBQVM7SUFDN0MsSUFBSW1OLHFCQUFxQi9FLFFBQVE7UUFDN0IsT0FBTztJQUNYO0lBQ0EsSUFBSThGLFdBQVduRyxhQUFhLElBQUl1QyxhQUFhLFNBQVN0SyxRQUFRMk0sWUFBWSxDQUFDLFVBQVU7UUFDakYsK0RBQStEO1FBQy9ELGlEQUFpRDtRQUNqRCxJQUFJbUMsZ0JBQWdCM04sV0FBVztZQUMzQnhCLFNBQVNLO1FBQ2IsR0FBR3lCLElBQUksQ0FBQyxTQUFTc04sTUFBTTtZQUNuQixPQUFPQSxPQUFPekUsUUFBUSxDQUFDQyxXQUFXLE9BQU8sT0FBT3dFLE9BQU9wQyxZQUFZLENBQUM7UUFDeEU7UUFDQSxJQUFJbUMsZUFBZTtZQUNmLE9BQU87UUFDWDtJQUNKO0lBQ0EsaURBQWlEO0lBQ2pELElBQUksQ0FBQ1QsT0FBT0UsVUFBVSxJQUFJTCxXQUFXMUUsb0JBQW9CLEVBQUU7UUFDdkQsSUFBSTBFLFdBQVczRSxtQ0FBbUMsRUFBRTtZQUNoRCxxRUFBcUU7WUFDckUsc0VBQXNFO1lBQ3RFLDBDQUEwQztZQUMxQyxJQUFJcUUsc0JBQXNCNU4sU0FBU3NLLFdBQVc7Z0JBQzFDLE9BQU87WUFDWDtRQUNKLE9BQU8sSUFBSWlELHFCQUFxQm5GLFFBQVE7WUFDcEMsb0VBQW9FO1lBQ3BFLHNEQUFzRDtZQUN0RCxPQUFPO1FBQ1g7SUFDSjtJQUNBLElBQUksQ0FBQ2lHLE9BQU9DLE9BQU8sSUFBSUosV0FBV3JHLHFCQUFxQixJQUFJNkYsa0JBQWtCdEYsUUFBUTtRQUNqRixzREFBc0Q7UUFDdEQsT0FBTztJQUNYO0lBQ0EsSUFBSTJHLFNBQVMvTyxRQUFRZ1AsYUFBYTtJQUNsQyxJQUFJLENBQUNYLE9BQU9FLFVBQVUsSUFBSVEsUUFBUTtRQUM5QixJQUFJbEIsaUJBQWlCa0IsT0FBT3pFLFFBQVEsQ0FBQ0MsV0FBVztRQUNoRCxJQUFJdUQsY0FBY3BLLE9BQU9tTCxnQkFBZ0IsQ0FBQ0UsUUFBUTtRQUNsRCxJQUFJYixXQUFXNUUsZUFBZSxJQUFJc0Usc0JBQXNCbUIsUUFBUXpFLFVBQVV1RCxnQkFBZ0JDLGNBQWM7WUFDcEcsb0RBQW9EO1lBQ3BELGlEQUFpRDtZQUNqRCxPQUFPO1FBQ1g7UUFDQSw0RUFBNEU7UUFDNUUsSUFBSUksV0FBV3hHLCtCQUErQixFQUFFO1lBQzVDLElBQUlnRyxrQkFBa0JJLGNBQWM7Z0JBQ2hDLE9BQU87WUFDWDtRQUNKO0lBQ0o7SUFDQSxvREFBb0Q7SUFDcEQsOENBQThDO0lBQzlDLGlEQUFpRDtJQUNqRCxPQUFPO0FBQ1g7QUFDQSwwQ0FBMEM7QUFDMUNLLHFCQUFxQkUsTUFBTSxHQUFHO0lBQzFCLElBQUlBLFNBQVM5TixVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNsRixJQUFJME8sa0JBQWtCLFNBQVNBLGdCQUFnQnRQLE9BQU87UUFDbEQsT0FBT3dPLHFCQUFxQjtZQUN4QnhPLFNBQVNBO1lBQ1QwTyxRQUFRQTtRQUNaO0lBQ0o7SUFDQVksZ0JBQWdCQyxLQUFLLEdBQUdmO0lBQ3hCLE9BQU9jO0FBQ1g7QUFDQSxnRUFBZ0U7QUFDaEUsSUFBSUEsa0JBQWtCZCxxQkFBcUJFLE1BQU0sQ0FBQyxDQUFDO0FBQ25ELFNBQVNjLFVBQVVDLEtBQUssRUFBRUMsUUFBUTtJQUM5Qiw0REFBNEQ7SUFDNUQsSUFBSUQsTUFBTUQsU0FBUyxFQUFFO1FBQ2pCLE9BQU9DLE1BQU1ELFNBQVMsQ0FBQ0U7SUFDM0I7SUFDQSxJQUFJalEsU0FBU2dRLE1BQU1oUSxNQUFNO0lBQ3pCLGlDQUFpQztJQUNqQyxJQUFJQSxXQUFXLEdBQUc7UUFDZCxPQUFPLENBQUM7SUFDWjtJQUNBLDRCQUE0QjtJQUM1QixJQUFJLElBQUlrUSxJQUFJLEdBQUdBLElBQUlsUSxRQUFRa1EsSUFBSTtRQUMzQixJQUFJRCxTQUFTRCxLQUFLLENBQUNFLEVBQUUsRUFBRUEsR0FBR0YsUUFBUTtZQUM5QixPQUFPRTtRQUNYO0lBQ0o7SUFDQSxPQUFPLENBQUM7QUFDWjtBQUNBLFNBQVNDLG1CQUFtQjNPLElBQUk7SUFDNUIsSUFBSTtRQUNBLGlDQUFpQztRQUNqQyxPQUFPQSxLQUFLNE8sZUFBZSxJQUFJLGlDQUFpQztRQUNoRTVPLEtBQUswRCxhQUFhLElBQUkxRCxLQUFLMEQsYUFBYSxDQUFDcEYsUUFBUSxJQUFJLGtEQUFrRDtRQUN2RzBCLEtBQUs2TyxjQUFjLElBQUk3TyxLQUFLNk8sY0FBYyxNQUFNO0lBQ3BELEVBQUUsT0FBTzVKLEdBQUc7UUFDUix3RkFBd0Y7UUFDeEYsaUZBQWlGO1FBQ2pGLE9BQU87SUFDWDtBQUNKO0FBQ0EsU0FBUzZKLFVBQVU5TyxJQUFJO0lBQ25CLElBQUlHLFlBQVlKLFlBQVlDO0lBQzVCLE9BQU9HLFVBQVU0TyxXQUFXLElBQUlqTTtBQUNwQztBQUNBLElBQUlrTSxlQUFlLEtBQUs7QUFDeEIsU0FBU0MsZ0JBQWdCak8sUUFBUTtJQUM3QixJQUFJLE9BQU9nTyxpQkFBaUIsVUFBVTtRQUNsQyxJQUFJRSxXQUFXako7UUFDZixJQUFJaUosVUFBVTtZQUNWRixlQUFlLFlBQVlFLFdBQVc7UUFDMUM7SUFDSjtJQUNBLElBQUksQ0FBQ0YsY0FBYztRQUNmLE9BQU9oTztJQUNYO0lBQ0EsT0FBT0EsV0FBV2dPLGVBQWVoTyxTQUFTbU8sT0FBTyxDQUFDLFlBQVksS0FBS0MsS0FBSyxDQUFDLEtBQUtoRixJQUFJLENBQUM0RTtBQUN2RjtBQUNBLElBQUloTyxXQUFXLEtBQUs7QUFDcEIsU0FBU3FPLHdCQUF3QjVMLE9BQU87SUFDcEMsSUFBSSxDQUFDekMsVUFBVTtRQUNYQSxXQUFXaU8sZ0JBQWdCO0lBQy9CO0lBQ0EsSUFBSXhMLFFBQVE2TCxhQUFhLEtBQUtqUixXQUFXO1FBQ3JDLE9BQU9vRixRQUFRNkwsYUFBYTtJQUNoQztJQUNBN0wsUUFBUTZMLGFBQWEsR0FBRztJQUN4QixJQUFJQyxpQkFBaUI5TCxRQUFRMEssTUFBTSxDQUFDN1AsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQ3lDO0lBQzlELEVBQUUsQ0FBQ0gsSUFBSSxDQUFDbkMsSUFBSSxDQUFDNlEsZ0JBQWdCLFNBQVNuUSxPQUFPO1FBQ3pDLElBQUllLFlBQVl3TyxtQkFBbUJ2UDtRQUNuQyxJQUFJZSxjQUFjc0QsUUFBUW5GLFFBQVEsRUFBRTtZQUNoQyxPQUFPO1FBQ1g7UUFDQW1GLFFBQVE2TCxhQUFhLEdBQUdsUTtRQUN4QixPQUFPO0lBQ1g7SUFDQSxPQUFPcUUsUUFBUTZMLGFBQWE7QUFDaEM7QUFDQSxTQUFTRSxnQkFBZ0JwUSxPQUFPO0lBQzVCLElBQUlxRSxVQUFVcUwsVUFBVTFQO0lBQ3hCLElBQUksQ0FBQ3FFLFFBQVEwSyxNQUFNLElBQUkxSyxRQUFRMEssTUFBTSxLQUFLMUssU0FBUztRQUMvQywwQ0FBMEM7UUFDMUMsbURBQW1EO1FBQ25ELE9BQU87SUFDWDtJQUNBLElBQUk7UUFDQSxxRUFBcUU7UUFDckUsMEVBQTBFO1FBQzFFLE9BQU9BLFFBQVFnTSxZQUFZLElBQUlKLHdCQUF3QjVMO0lBQzNELEVBQUUsT0FBT3dCLEdBQUc7UUFDUixPQUFPO0lBQ1g7QUFDSjtBQUNBLDREQUE0RDtBQUM1RCx5RkFBeUY7QUFDekYsSUFBSXlLLDZCQUE2QjtBQUNqQyxTQUFTQyxjQUFjdlEsT0FBTyxFQUFFd1EsUUFBUTtJQUNwQyxPQUFPOU0sT0FBT21MLGdCQUFnQixDQUFDN08sU0FBUyxNQUFNd04sZ0JBQWdCLENBQUNnRDtBQUNuRTtBQUNBLFNBQVNDLGFBQWFDLEtBQUs7SUFDdkIsT0FBT0EsTUFBTWpQLElBQUksQ0FBQyxTQUFTekIsT0FBTztRQUM5Qix5REFBeUQ7UUFDekQsT0FBT3VRLGNBQWN2USxTQUFTLGVBQWU7SUFDakQ7QUFDSjtBQUNBLFNBQVMyUSxXQUFXRCxLQUFLO0lBQ3JCLHVFQUF1RTtJQUN2RSx5R0FBeUc7SUFDekcsZ0VBQWdFO0lBQ2hFLElBQUlFLFNBQVN6QixVQUFVdUIsT0FBTyxTQUFTMVEsT0FBTztRQUMxQyxJQUFJcUksYUFBYWtJLGNBQWN2USxTQUFTO1FBQ3hDLE9BQU9xSSxlQUFlLFlBQVlBLGVBQWU7SUFDckQ7SUFDQSxJQUFJdUksV0FBVyxDQUFDLEdBQUc7UUFDZiw2QkFBNkI7UUFDN0IsT0FBTztJQUNYO0lBQ0EsSUFBSUMsVUFBVTFCLFVBQVV1QixPQUFPLFNBQVMxUSxPQUFPO1FBQzNDLE9BQU91USxjQUFjdlEsU0FBUyxrQkFBa0I7SUFDcEQ7SUFDQSxJQUFJNlEsWUFBWSxDQUFDLEdBQUc7UUFDaEIscURBQXFEO1FBQ3JELE9BQU87SUFDWDtJQUNBLElBQUlELFNBQVNDLFNBQVM7UUFDbEIsMkVBQTJFO1FBQzNFLE9BQU87SUFDWDtJQUNBLG9FQUFvRTtJQUNwRSxPQUFPO0FBQ1g7QUFDQSxTQUFTQyxnQkFBZ0JKLEtBQUs7SUFDMUIsSUFBSUssU0FBUztJQUNiLElBQUlMLEtBQUssQ0FBQyxFQUFFLENBQUNwRyxRQUFRLENBQUNDLFdBQVcsT0FBTyxXQUFXO1FBQy9Dd0csU0FBUztJQUNiO0lBQ0EsT0FBT0wsTUFBTXJSLEtBQUssQ0FBQzBSLFFBQVF0UCxJQUFJLENBQUMsU0FBU3pCLE9BQU87UUFDNUMsaUVBQWlFO1FBQ2pFLE9BQU9BLFFBQVFzSyxRQUFRLENBQUNDLFdBQVcsT0FBTyxhQUFhdkssUUFBUXVFLElBQUksS0FBSztJQUM1RTtBQUNKO0FBQ0EsU0FBU3lNO0lBQ0wsSUFBSXRSLE9BQU9hLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUdaLFVBQVVELEtBQUtDLE9BQU8sRUFBRXlPLGNBQWMxTyxLQUFLMk8sTUFBTSxFQUFFQSxTQUFTRCxnQkFBZ0JuUCxZQUFZO1FBQ3ZLZ1MsYUFBYTtRQUNiQyxZQUFZO1FBQ1pDLGVBQWU7UUFDZkMsZ0JBQWdCO1FBQ2hCQyxpQkFBaUI7SUFDckIsSUFBSWpEO0lBQ0osSUFBSXBPLFVBQVVQLGlCQUFpQjtRQUMzQkksT0FBTztRQUNQQyxpQkFBaUI7UUFDakJILFNBQVNBO0lBQ2I7SUFDQSxJQUFJMkssV0FBV3RLLFFBQVFzSyxRQUFRLENBQUNDLFdBQVc7SUFDM0MsSUFBSSxDQUFDOEQsT0FBTzRDLFdBQVcsSUFBSVgsMkJBQTJCNUwsSUFBSSxDQUFDNEYsV0FBVztRQUNsRSxPQUFPO0lBQ1g7SUFDQSxJQUFJb0csUUFBUXZQLFdBQVc7UUFDbkJ4QixTQUFTSztJQUNiO0lBQ0EsOEZBQThGO0lBQzlGLHlGQUF5RjtJQUN6Rix3R0FBd0c7SUFDeEcsSUFBSXNSLHlCQUF5QmhILGFBQWEsV0FBVyxDQUFDdEssUUFBUTJNLFlBQVksQ0FBQztJQUMzRSxJQUFJLENBQUMwQixPQUFPNkMsVUFBVSxJQUFJVCxhQUFhYSx5QkFBeUJaLE1BQU1yUixLQUFLLENBQUMsS0FBS3FSLFFBQVE7UUFDckYsT0FBTztJQUNYO0lBQ0EsSUFBSSxDQUFDckMsT0FBTzhDLGFBQWEsSUFBSVIsV0FBV0QsUUFBUTtRQUM1QyxPQUFPO0lBQ1g7SUFDQSxJQUFJLENBQUNyQyxPQUFPK0MsY0FBYyxJQUFJTixnQkFBZ0JKLFFBQVE7UUFDbEQsT0FBTztJQUNYO0lBQ0EsSUFBSSxDQUFDckMsT0FBT2dELGVBQWUsRUFBRTtRQUN6Qix5REFBeUQ7UUFDekQsMERBQTBEO1FBQzFELElBQUloQixlQUFlRCxnQkFBZ0JwUTtRQUNuQyxJQUFJdVIsYUFBYVAsZUFBZTNDLE1BQU0sQ0FBQ0E7UUFDdkMsSUFBSWdDLGdCQUFnQixDQUFDa0IsV0FBV2xCLGVBQWU7WUFDM0MsT0FBTztRQUNYO0lBQ0o7SUFDQSxPQUFPO0FBQ1g7QUFDQSwwQ0FBMEM7QUFDMUNXLGVBQWUzQyxNQUFNLEdBQUc7SUFDcEIsSUFBSUEsU0FBUzlOLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ2xGLElBQUlpUixZQUFZLFNBQVNBLFVBQVU3UixPQUFPO1FBQ3RDLE9BQU9xUixlQUFlO1lBQ2xCclIsU0FBU0E7WUFDVDBPLFFBQVFBO1FBQ1o7SUFDSjtJQUNBbUQsVUFBVXRDLEtBQUssR0FBRzhCO0lBQ2xCLE9BQU9RO0FBQ1g7QUFDQSwwREFBMEQ7QUFDMUQsSUFBSUEsWUFBWVIsZUFBZTNDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLFNBQVNvRCxhQUFhbFEsSUFBSSxFQUFFUixTQUFTO0lBQ2pDLDJFQUEyRTtJQUMzRSx3RUFBd0U7SUFDeEUsSUFBSXdFLE1BQU14RSxVQUFVZ0csYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHcEksV0FBV3NELE9BQU8sRUFBRVYsUUFBUTtJQUNqRixPQUFPZ0UsT0FBTztBQUNsQjtBQUNBLFNBQVNtTSxlQUFlMVIsT0FBTztJQUMzQixJQUFJdUYsTUFBTXZGLFFBQVFnUCxhQUFhO0lBQy9CLElBQUksQ0FBQ3pKLElBQUloRSxJQUFJLElBQUlnRSxJQUFJK0UsUUFBUSxDQUFDQyxXQUFXLE9BQU8sT0FBTztRQUNuRCxPQUFPO0lBQ1g7SUFDQSx1RUFBdUU7SUFDdkUsNkNBQTZDO0lBQzdDLHVFQUF1RTtJQUN2RSxtRkFBbUY7SUFDbkYsd0VBQXdFO0lBQ3hFLDhEQUE4RDtJQUM5RCxnRUFBZ0U7SUFDaEUsSUFBSXhKLFlBQVlKLFlBQVlYO0lBQzVCLE9BQU9lLFVBQVVnRyxhQUFhLENBQUMsa0JBQWtCLENBQUMsR0FBR3BJLFdBQVdzRCxPQUFPLEVBQUVzRCxJQUFJaEUsSUFBSSxJQUFJLFNBQVM7QUFDbEc7QUFDQSxJQUFJb1EsYUFBYSxLQUFLO0FBQ3RCLDBEQUEwRDtBQUMxRCxzRUFBc0U7QUFDdEUsc0VBQXNFO0FBQ3RFLFNBQVNDLFlBQVlqUyxPQUFPO0lBQ3hCLElBQUksQ0FBQ2dTLFlBQVk7UUFDYkEsYUFBYXZGO0lBQ2pCO0lBQ0EsSUFBSXBNLFVBQVVQLGlCQUFpQjtRQUMzQkksT0FBTztRQUNQRixTQUFTQTtJQUNiO0lBQ0EsSUFBSTJLLFdBQVd0SyxRQUFRc0ssUUFBUSxDQUFDQyxXQUFXO0lBQzNDLElBQUlELGFBQWEsUUFBUTtRQUNyQixPQUFPO0lBQ1g7SUFDQSxJQUFJb0MsY0FBYzFNLFFBQVEyTSxZQUFZLENBQUM7SUFDdkMsSUFBSSxDQUFDZ0YsV0FBV3ZLLGlCQUFpQixJQUFJc0YsYUFBYTtRQUM5QywrRUFBK0U7UUFDL0UsT0FBTztJQUNYO0lBQ0EsSUFBSW1GLE1BQU1ILGVBQWUxUjtJQUN6QixJQUFJLENBQUM2UixPQUFPLENBQUNMLFVBQVVLLE1BQU07UUFDekIsT0FBTztJQUNYO0lBQ0Esa0VBQWtFO0lBQ2xFLHlEQUF5RDtJQUN6RCxJQUFJLENBQUNGLFdBQVdsSyxtQkFBbUIsSUFBSyxFQUFDb0ssSUFBSUMsUUFBUSxJQUFJLENBQUNELElBQUlFLGFBQWEsSUFBSUYsSUFBSTdELFdBQVcsSUFBSSxLQUFLNkQsSUFBSWxKLFlBQVksSUFBSSxJQUFJO1FBQzNILE9BQU87SUFDWDtJQUNBLHFGQUFxRjtJQUNyRixJQUFJLENBQUNnSixXQUFXckssb0JBQW9CLElBQUksQ0FBQ3RILFFBQVFnSSxJQUFJLEVBQUU7UUFDbkQsNEVBQTRFO1FBQzVFLGlFQUFpRTtRQUNqRSxPQUFPMkosV0FBV3ZLLGlCQUFpQixJQUFJc0YsZUFBZWlGLFdBQVd4SyxvQkFBb0IsSUFBSTBLLElBQUlsRixZQUFZLENBQUM7SUFDOUc7SUFDQSxzRUFBc0U7SUFDdEUsSUFBSXFGLHFCQUFxQjdRLFdBQVc7UUFDaEN4QixTQUFTa1M7SUFDYixHQUFHeFMsS0FBSyxDQUFDLEdBQUdvQyxJQUFJLENBQUMsU0FBU3dRLFFBQVE7UUFDOUIsSUFBSTFRLE9BQU8wUSxTQUFTM0gsUUFBUSxDQUFDQyxXQUFXO1FBQ3hDLE9BQU9oSixTQUFTLFlBQVlBLFNBQVM7SUFDekM7SUFDQSxJQUFJeVEsb0JBQW9CO1FBQ3BCLE9BQU87SUFDWDtJQUNBLE9BQU87QUFDWDtBQUNBLElBQUlFLGFBQWEsS0FBSztBQUN0Qiw4RUFBOEU7QUFDOUUsSUFBSUMsMEJBQTBCLEtBQUs7QUFDbkMsSUFBSUMsbUJBQW1CO0lBQ25CdlQsT0FBTztJQUNQd1QsUUFBUTtJQUNSQyxVQUFVO0lBQ1ZDLFFBQVE7SUFDUkMsVUFBVTtJQUNWQyxNQUFNO0FBQ1Y7QUFDQSxTQUFTQywwQkFBMEIvUyxPQUFPO0lBQ3RDLElBQUksQ0FBQ3VTLFlBQVk7UUFDYkEsYUFBYTlGO1FBQ2IsSUFBSThGLFdBQVd2SyxxQkFBcUIsRUFBRTtZQUNsQyxPQUFPeUssaUJBQWlCSSxRQUFRO1FBQ3BDO1FBQ0EsSUFBSU4sV0FBV3BLLGlCQUFpQixFQUFFO1lBQzlCLE9BQU9zSyxpQkFBaUJLLElBQUk7UUFDaEM7UUFDQU4sMEJBQTBCLElBQUlRLE9BQU8sT0FBTzNVLE9BQU9zSCxJQUFJLENBQUM4TSxrQkFBa0JwSCxJQUFJLENBQUMsT0FBTztJQUMxRjtJQUNBLElBQUloTCxVQUFVUCxpQkFBaUI7UUFDM0JJLE9BQU87UUFDUEYsU0FBU0E7SUFDYjtJQUNBLElBQUkySyxXQUFXdEssUUFBUXNLLFFBQVEsQ0FBQ0MsV0FBVztJQUMzQyxPQUFPYSxRQUFRK0csd0JBQXdCek4sSUFBSSxDQUFDNEY7QUFDaEQ7QUFDQSxJQUFJc0ksYUFBYSxLQUFLO0FBQ3RCLFNBQVNDLG1CQUFtQjdTLE9BQU87SUFDL0IsSUFBSXNLLFdBQVd0SyxRQUFRc0ssUUFBUSxDQUFDQyxXQUFXO0lBQzNDLE9BQU9ELGFBQWEsY0FBY3RLLFFBQVF3SyxRQUFRO0FBQ3REO0FBQ0EsU0FBU3NJLGVBQWU5UyxPQUFPO0lBQzNCLElBQUlzSyxXQUFXdEssUUFBUXNLLFFBQVEsQ0FBQ0MsV0FBVztJQUMzQyxPQUFPRCxhQUFhLFVBQVV0SyxRQUFRd0ssUUFBUTtBQUNsRDtBQUNBLFNBQVN1SSxXQUFXcFQsT0FBTztJQUN2QixJQUFJLENBQUNpVCxZQUFZO1FBQ2JBLGFBQWF4RztJQUNqQjtJQUNBLElBQUlwTSxVQUFVUCxpQkFBaUI7UUFDM0JJLE9BQU87UUFDUEYsU0FBU0E7SUFDYjtJQUNBLElBQUlLLFFBQVEyTSxZQUFZLENBQUMsdUJBQXVCO1FBQzVDLHFFQUFxRTtRQUNyRSxPQUFPO0lBQ1g7SUFDQSxJQUFJLENBQUMrRiwwQkFBMEIxUyxVQUFVO1FBQ3JDLDBEQUEwRDtRQUMxRCxPQUFPO0lBQ1g7SUFDQSxJQUFJQSxRQUFRd0ssUUFBUSxFQUFFO1FBQ2xCLGlDQUFpQztRQUNqQyxPQUFPO0lBQ1g7SUFDQSxJQUFJd0ksVUFBVTdSLFdBQVc7UUFDckJ4QixTQUFTSztJQUNiO0lBQ0EsSUFBSWdULFFBQVF2UixJQUFJLENBQUNvUixxQkFBcUI7UUFDbEMsNEVBQTRFO1FBQzVFLE9BQU87SUFDWDtJQUNBLElBQUksQ0FBQ0QsV0FBVzlLLGlCQUFpQixJQUFJa0wsUUFBUXZSLElBQUksQ0FBQ3FSLGlCQUFpQjtRQUMvRCx3RUFBd0U7UUFDeEUsT0FBTztJQUNYO0lBQ0EsT0FBTztBQUNYO0FBQ0EsU0FBU0c7SUFDTCxJQUFJdlQsT0FBT2EsVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBR1osVUFBVUQsS0FBS0MsT0FBTyxFQUFFeU8sY0FBYzFPLEtBQUsyTyxNQUFNLEVBQUVBLFNBQVNELGdCQUFnQm5QLFlBQVk7UUFDdktpVSw4QkFBOEI7UUFDOUJyQyxTQUFTO0lBQ2IsSUFBSXpDO0lBQ0osSUFBSXBPLFVBQVVQLGlCQUFpQjtRQUMzQkksT0FBTztRQUNQQyxpQkFBaUI7UUFDakJILFNBQVNBO0lBQ2I7SUFDQSxJQUFJLENBQUMwTyxPQUFPd0MsT0FBTyxJQUFJLENBQUNXLFVBQVV4UixVQUFVO1FBQ3hDLE9BQU87SUFDWDtJQUNBLElBQUksQ0FBQ3FPLE9BQU82RSw0QkFBNEIsSUFBS3JSLENBQUFBLFNBQVNzQixFQUFFLENBQUNULEtBQUssSUFBSWIsU0FBU3NCLEVBQUUsQ0FBQ1IsT0FBTyxJQUFJZCxTQUFTc0IsRUFBRSxDQUFDUCxJQUFJLEdBQUc7UUFDeEcsSUFBSXlOLGVBQWVELGdCQUFnQnBRO1FBQ25DLElBQUlxUSxjQUFjO1lBQ2QsSUFBSXRELGNBQWNzRCxnQkFBZ0IsR0FBRztnQkFDakMsOERBQThEO2dCQUM5RCw2REFBNkQ7Z0JBQzdELE9BQU87WUFDWDtRQUNKO0lBQ0o7SUFDQSxJQUFJL0YsV0FBV3RLLFFBQVFzSyxRQUFRLENBQUNDLFdBQVc7SUFDM0MsSUFBSXNDLFdBQVdFLGNBQWMvTTtJQUM3QixJQUFJc0ssYUFBYSxXQUFXekksU0FBU3NCLEVBQUUsQ0FBQ1QsS0FBSyxFQUFFO1FBQzNDLHNEQUFzRDtRQUN0RCxPQUFPbUssYUFBYSxRQUFRQSxZQUFZO0lBQzVDO0lBQ0EsbUZBQW1GO0lBQ25GLGtGQUFrRjtJQUNsRiwwREFBMEQ7SUFDMUQsSUFBSWhMLFNBQVNzQixFQUFFLENBQUNULEtBQUssSUFBSTFDLFFBQVFxSyxlQUFlLElBQUksQ0FBQ3JLLFFBQVE2RSxLQUFLLEVBQUU7UUFDaEUsSUFBSXlGLGFBQWEsT0FBT3RLLFFBQVEyTSxZQUFZLENBQUMsZUFBZTtZQUN4RCxnRUFBZ0U7WUFDaEUsSUFBSTlLLFNBQVNzQixFQUFFLENBQUNULEtBQUssRUFBRTtnQkFDbkIsT0FBTztZQUNYO1FBQ0o7SUFDSjtJQUNBLE9BQU87QUFDWDtBQUNBLDBDQUEwQztBQUMxQ3VRLG9CQUFvQjVFLE1BQU0sR0FBRztJQUN6QixJQUFJQSxTQUFTOU4sVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEYsSUFBSTRTLGlCQUFpQixTQUFTQSxlQUFleFQsT0FBTztRQUNoRCxPQUFPc1Qsb0JBQW9CO1lBQ3ZCdFQsU0FBU0E7WUFDVDBPLFFBQVFBO1FBQ1o7SUFDSjtJQUNBOEUsZUFBZWpFLEtBQUssR0FBRytEO0lBQ3ZCLE9BQU9FO0FBQ1g7QUFDQSwrREFBK0Q7QUFDL0QsSUFBSUEsaUJBQWlCRixvQkFBb0I1RSxNQUFNLENBQUMsQ0FBQztBQUNqRCxJQUFJK0UsYUFBYSxLQUFLO0FBQ3RCLFNBQVNDLG9CQUFvQnJULE9BQU87SUFDaEMsSUFBSXNLLFdBQVd0SyxRQUFRc0ssUUFBUSxDQUFDQyxXQUFXO0lBQzNDLElBQUlELGFBQWEsV0FBV0EsYUFBYSxVQUFVO1FBQy9DLHVEQUF1RDtRQUN2RCxxREFBcUQ7UUFDckQsT0FBTztJQUNYO0lBQ0EsSUFBSWdKLFlBQVl2RyxjQUFjL007SUFDOUIsSUFBSUEsUUFBUWtCLFVBQVUsSUFBSW9TLGNBQWMsTUFBTTtRQUMxQyw4Q0FBOEM7UUFDOUMsK0NBQStDO1FBQy9DLE9BQU87SUFDWDtJQUNBLElBQUloSixhQUFhLFNBQVM7UUFDdEIseUVBQXlFO1FBQ3pFLCtFQUErRTtRQUMvRSw4RUFBOEU7UUFDOUUsa0RBQWtEO1FBQ2xELE9BQU8sQ0FBQzhJLFdBQVczSyxrQkFBa0IsSUFBSTZLLGNBQWM7SUFDM0Q7SUFDQSxJQUFJaEosYUFBYSxVQUFVO1FBQ3ZCLE9BQU9nSixjQUFjO0lBQ3pCO0lBQ0EsSUFBSUYsV0FBV3hJLDBCQUEwQixJQUFLNUssQ0FBQUEsUUFBUXFLLGVBQWUsSUFBSUMsYUFBYSxLQUFJLEdBQUk7UUFDMUYsbUZBQW1GO1FBQ25GLElBQUlzRSxxQkFBcUI1TyxRQUFROE0sWUFBWSxDQUFDO1FBQzlDLE9BQU84QixzQkFBc0JBLHVCQUF1QjtJQUN4RDtJQUNBLElBQUl0RSxhQUFhLFNBQVN0SyxRQUFRMk0sWUFBWSxDQUFDLFdBQVc7UUFDdEQsOEZBQThGO1FBQzlGLGdGQUFnRjtRQUNoRixPQUFPMkcsY0FBYyxRQUFRLENBQUNGLFdBQVduTCxzQkFBc0I7SUFDbkU7SUFDQSxJQUFJcUMsYUFBYSxRQUFRO1FBQ3JCLHVDQUF1QztRQUN2QywyQ0FBMkM7UUFDM0MsT0FBTyxDQUFDc0gsWUFBWTVSO0lBQ3hCO0lBQ0EsT0FBTztBQUNYO0FBQ0EsU0FBU3VUO0lBQ0wsSUFBSTdULE9BQU9hLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUdaLFVBQVVELEtBQUtDLE9BQU8sRUFBRXlPLGNBQWMxTyxLQUFLMk8sTUFBTSxFQUFFQSxTQUFTRCxnQkFBZ0JuUCxZQUFZO1FBQ3ZLdUwsVUFBVTtRQUNWcUcsU0FBUztRQUNUMkMsY0FBYztJQUNsQixJQUFJcEY7SUFDSixJQUFJLENBQUNnRixZQUFZO1FBQ2JBLGFBQWFoSDtJQUNqQjtJQUNBLElBQUlxSCxrQkFBa0JOLGVBQWVqRSxLQUFLLENBQUNiLE1BQU0sQ0FBQztRQUM5QzZFLDhCQUE4QjtRQUM5QnJDLFNBQVN4QyxPQUFPd0MsT0FBTztJQUMzQjtJQUNBLElBQUk3USxVQUFVUCxpQkFBaUI7UUFDM0JJLE9BQU87UUFDUEMsaUJBQWlCO1FBQ2pCSCxTQUFTQTtJQUNiO0lBQ0EsSUFBSStULGdCQUFnQnpFLGdCQUFnQkMsS0FBSyxDQUFDO1FBQ3RDdlAsU0FBU0s7UUFDVHFPLFFBQVFBO0lBQ1o7SUFDQSxJQUFJLENBQUNxRixpQkFBaUJMLG9CQUFvQnJULFVBQVU7UUFDaEQsT0FBTztJQUNYO0lBQ0EsSUFBSSxDQUFDcU8sT0FBTzdELFFBQVEsSUFBSXVJLFdBQVcvUyxVQUFVO1FBQ3pDLE9BQU87SUFDWDtJQUNBLElBQUksQ0FBQ3FPLE9BQU9tRixZQUFZLElBQUlDLGdCQUFnQnpULFVBQVU7UUFDbEQsb0VBQW9FO1FBQ3BFLE9BQU87SUFDWDtJQUNBLG9EQUFvRDtJQUNwRCxJQUFJLENBQUNxTyxPQUFPd0MsT0FBTyxFQUFFO1FBQ2pCLElBQUk4QyxvQkFBb0I7WUFDcEJoVSxTQUFTSztZQUNUcU8sUUFBUSxDQUFDO1FBQ2I7UUFDQSxJQUFJK0UsV0FBV2xMLG1CQUFtQixFQUFFO1lBQ2hDLHFFQUFxRTtZQUNyRXlMLGtCQUFrQnRGLE1BQU0sQ0FBQ2dELGVBQWUsR0FBRztRQUMvQztRQUNBLElBQUkrQixXQUFXdkssb0JBQW9CLEVBQUU7WUFDakMsK0VBQStFO1lBQy9FLGtGQUFrRjtZQUNsRixJQUFJK0ssYUFBYTVULFFBQVFzSyxRQUFRLENBQUNDLFdBQVc7WUFDN0MsSUFBSXFKLGVBQWUsVUFBVTtnQkFDekJELGtCQUFrQnRGLE1BQU0sQ0FBQzhDLGFBQWEsR0FBRztZQUM3QztRQUNKO1FBQ0EsSUFBSSxDQUFDSyxVQUFVdEMsS0FBSyxDQUFDeUUsb0JBQW9CO1lBQ3JDLE9BQU87UUFDWDtJQUNKO0lBQ0EsSUFBSXRELGVBQWVELGdCQUFnQnBRO0lBQ25DLElBQUlxUSxjQUFjO1FBQ2QsSUFBSXdELFlBQVl4RCxhQUFhL0YsUUFBUSxDQUFDQyxXQUFXO1FBQ2pELElBQUlzSixjQUFjLFlBQVksQ0FBQ1QsV0FBVzdLLDBCQUEwQixFQUFFO1lBQ2xFLElBQUksQ0FBQzhILGFBQWFyQyxXQUFXLElBQUksQ0FBQ3FDLGFBQWExSCxZQUFZLEVBQUU7Z0JBQ3pELHlFQUF5RTtnQkFDekUsT0FBTztZQUNYO1FBQ0o7SUFDSjtJQUNBLElBQUkyQixXQUFXdEssUUFBUXNLLFFBQVEsQ0FBQ0MsV0FBVztJQUMzQyxJQUFJRCxhQUFhLFNBQVM4SSxXQUFXOUgsZ0JBQWdCLElBQUksQ0FBQytFLGdCQUFnQnJRLFFBQVE4TSxZQUFZLENBQUMsZ0JBQWdCLE1BQU07UUFDakgsT0FBTztJQUNYO0lBQ0EsT0FBTztBQUNYO0FBQ0EsMENBQTBDO0FBQzFDeUcsaUJBQWlCbEYsTUFBTSxHQUFHO0lBQ3RCLElBQUlBLFNBQVM5TixVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNsRixJQUFJdVQsY0FBYyxTQUFTQSxZQUFZblUsT0FBTztRQUMxQyxPQUFPNFQsaUJBQWlCO1lBQ3BCNVQsU0FBU0E7WUFDVDBPLFFBQVFBO1FBQ1o7SUFDSjtJQUNBeUYsWUFBWTVFLEtBQUssR0FBR3FFO0lBQ3BCLE9BQU9PO0FBQ1g7QUFDQSxnRUFBZ0U7QUFDaEUsSUFBSUEsY0FBY1AsaUJBQWlCbEYsTUFBTSxDQUFDLENBQUM7QUFDM0MsU0FBUzBGLGFBQWFDLFNBQVM7SUFDM0IsNERBQTREO0lBQzVELElBQUlDLFNBQVMsU0FBU0EsT0FBT3JULElBQUk7UUFDN0IsSUFBSUEsS0FBS00sVUFBVSxFQUFFO1lBQ2pCLGlFQUFpRTtZQUNqRSwwQ0FBMEM7WUFDMUMsT0FBT2dULFdBQVdDLGFBQWE7UUFDbkM7UUFDQSxJQUFJSCxVQUFVcFQsT0FBTztZQUNqQiwyRUFBMkU7WUFDM0UsT0FBT3NULFdBQVdDLGFBQWE7UUFDbkM7UUFDQSxPQUFPRCxXQUFXRSxXQUFXO0lBQ2pDO0lBQ0Esa0VBQWtFO0lBQ2xFLG1HQUFtRztJQUNuR0gsT0FBT0ksVUFBVSxHQUFHSjtJQUNwQixPQUFPQTtBQUNYO0FBQ0EsSUFBSUssMEJBQTBCUCxhQUFhOUU7QUFDM0MsU0FBU3NGO0lBQ0wsSUFBSTdVLE9BQU9hLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUdaLFVBQVVELEtBQUtDLE9BQU8sRUFBRTZVLGlCQUFpQjlVLEtBQUs4VSxjQUFjLEVBQUVDLHNCQUFzQi9VLEtBQUsrVSxtQkFBbUIsRUFBRUMsV0FBV2hWLEtBQUtnVixRQUFRO0lBQ3pOLElBQUksQ0FBQy9VLFNBQVM7UUFDVkEsVUFBVVQsU0FBU2lCLGVBQWU7SUFDdEM7SUFDQSxJQUFJd1UsZUFBZWIsWUFBWTVFLEtBQUssQ0FBQ2IsTUFBTSxDQUFDO1FBQ3hDbUYsY0FBY2lCO0lBQ2xCO0lBQ0EsSUFBSTFULFlBQVlKLFlBQVloQjtJQUM1QiwyRUFBMkU7SUFDM0UsSUFBSWlWLFNBQVM3VCxVQUFVOFQsZ0JBQWdCLENBQ3ZDbFYsU0FDQXVVLFdBQVdZLFlBQVksRUFDdkJKLGFBQWEsUUFBUUosMEJBQTBCUCxhQUFhWSxlQUM1RDtJQUNBLElBQUl2VCxPQUFPLEVBQUU7SUFDYixNQUFNd1QsT0FBT0csUUFBUSxHQUFHO1FBQ3BCLElBQUlILE9BQU9JLFdBQVcsQ0FBQzlULFVBQVUsRUFBRTtZQUMvQixJQUFJeVQsYUFBYUMsT0FBT0ksV0FBVyxHQUFHO2dCQUNsQzVULEtBQUtDLElBQUksQ0FBQ3VULE9BQU9JLFdBQVc7WUFDaEM7WUFDQTVULE9BQU9BLEtBQUs2VCxNQUFNLENBQUNWLHFCQUFxQjtnQkFDcEM1VSxTQUFTaVYsT0FBT0ksV0FBVyxDQUFDOVQsVUFBVTtnQkFDdEN1VCxxQkFBcUJBO2dCQUNyQkMsVUFBVUE7WUFDZDtRQUNKLE9BQU87WUFDSHRULEtBQUtDLElBQUksQ0FBQ3VULE9BQU9JLFdBQVc7UUFDaEM7SUFDSjtJQUNBLHlDQUF5QztJQUN6QyxJQUFJUixnQkFBZ0I7UUFDaEIsSUFBSUUsYUFBYSxPQUFPO1lBQ3BCLElBQUl6RixnQkFBZ0J0UCxVQUFVO2dCQUMxQnlCLEtBQUs4VCxPQUFPLENBQUN2VjtZQUNqQjtRQUNKLE9BQU8sSUFBSWdWLGFBQWFoVixVQUFVO1lBQzlCeUIsS0FBSzhULE9BQU8sQ0FBQ3ZWO1FBQ2pCO0lBQ0o7SUFDQSxPQUFPeUI7QUFDWDtBQUNBLHFEQUFxRDtBQUNyRCxJQUFJK1QsYUFBYSxLQUFLO0FBQ3RCLElBQUlDLGFBQWEsS0FBSztBQUN0QixTQUFTQztJQUNMLElBQUksQ0FBQ0YsWUFBWTtRQUNiQSxhQUFhL0k7SUFDakI7SUFDQSxJQUFJLE9BQU9nSixlQUFlLFVBQVU7UUFDaEMsT0FBT0E7SUFDWDtJQUNBLGtHQUFrRztJQUNsR0EsYUFBYSxLQUFLLDJDQUEyQztJQUM1REQsQ0FBQUEsV0FBV3pKLFVBQVUsR0FBRyxlQUFlLEVBQUMsSUFBSyxxQ0FBcUM7SUFDbEZ5SixDQUFBQSxXQUFXdk4sYUFBYSxHQUFHLGNBQWMsRUFBQyxJQUFLLDhGQUE4RjtJQUM5SSxpRUFBaUU7SUFDakUsdURBQXVEO0lBQ3ZELFdBQVcsd0dBQXdHO0lBQ25ILHdCQUF3QjtJQUN4QixhQUFhLDBDQUEwQztJQUN2RCxnQkFBZ0Isd0NBQXdDO0lBQ3hELHFDQUFxQyw4QkFBOEI7SUFDbkUsMkJBQTJCLHNCQUFzQjtJQUNqRCxZQUFhdU4sQ0FBQUEsV0FBVzVOLHlCQUF5QixHQUFHLFdBQVcsa0JBQWlCLElBQU00TixDQUFBQSxXQUFXdEoseUJBQXlCLEdBQUcsV0FBVyxrQkFBaUIsSUFBTXNKLENBQUFBLFdBQVcxTCxZQUFZLEdBQUcsYUFBYSxFQUFDLElBQUssOENBQThDO0lBQzFQLGdCQUFnQixnQkFBZ0I7SUFDaEM7SUFDQSxxR0FBcUc7SUFDckcyTCxhQUFhdkYsZ0JBQWdCdUY7SUFDN0IsT0FBT0E7QUFDWDtBQUNBLFNBQVNFO0lBQ0wsSUFBSTVWLE9BQU9hLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUdaLFVBQVVELEtBQUtDLE9BQU8sRUFBRTZVLGlCQUFpQjlVLEtBQUs4VSxjQUFjLEVBQUVDLHNCQUFzQi9VLEtBQUsrVSxtQkFBbUI7SUFDL0wsSUFBSWMsWUFBWUY7SUFDaEIsSUFBSUcsV0FBVzdWLFFBQVFSLGdCQUFnQixDQUFDb1c7SUFDeEMsaUVBQWlFO0lBQ2pFLElBQUlaLGVBQWViLFlBQVk1RSxLQUFLLENBQUNiLE1BQU0sQ0FBQztRQUN4Q21GLGNBQWNpQjtJQUNsQjtJQUNBLElBQUluTSxTQUFTLEVBQUUsQ0FBQzJMLE1BQU0sQ0FBQzNVLElBQUksQ0FBQ2tXLFVBQVViO0lBQ3RDLHlDQUF5QztJQUN6QyxJQUFJSCxrQkFBa0JHLGFBQWFoVixVQUFVO1FBQ3pDMkksT0FBTzRNLE9BQU8sQ0FBQ3ZWO0lBQ25CO0lBQ0EsT0FBTzJJO0FBQ1g7QUFDQSxTQUFTbU47SUFDTCxJQUFJL1YsT0FBT2EsVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBR1osVUFBVUQsS0FBS0MsT0FBTyxFQUFFNlUsaUJBQWlCOVUsS0FBSzhVLGNBQWMsRUFBRUMsc0JBQXNCL1UsS0FBSytVLG1CQUFtQixFQUFFaUIsZ0JBQWdCaFcsS0FBS2dWLFFBQVEsRUFBRUEsV0FBV2dCLGtCQUFrQnpXLFlBQVksVUFBVXlXO0lBQ25SLElBQUkxVixVQUFVUCxpQkFBaUI7UUFDM0JJLE9BQU87UUFDUEMsaUJBQWlCO1FBQ2pCQyxtQkFBbUI7UUFDbkJKLFNBQVNBO0lBQ2I7SUFDQSxJQUFJZ0YsVUFBVTtRQUNWaEYsU0FBU0s7UUFDVHdVLGdCQUFnQkE7UUFDaEJDLHFCQUFxQkE7UUFDckJDLFVBQVVBO0lBQ2Q7SUFDQSxJQUFJQSxhQUFhLFNBQVM7UUFDdEIsT0FBT1ksb0JBQW9CM1E7SUFDL0IsT0FBTyxJQUFJK1AsYUFBYSxZQUFZQSxhQUFhLE9BQU87UUFDcEQsT0FBT0gscUJBQXFCNVA7SUFDaEM7SUFDQSxNQUFNLElBQUlwRixVQUFVO0FBQ3hCO0FBQ0EsSUFBSW9XLGFBQWEsS0FBSztBQUN0QixpRkFBaUY7QUFDakYsNkZBQTZGO0FBQzdGLElBQUlDLDJCQUEyQjtBQUMvQixTQUFTQztJQUNMLElBQUluVyxPQUFPYSxVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHWixVQUFVRCxLQUFLQyxPQUFPLEVBQUV5TyxjQUFjMU8sS0FBSzJPLE1BQU0sRUFBRUEsU0FBU0QsZ0JBQWdCblAsWUFBWTtRQUN2S3FQLFNBQVM7UUFDVEMsWUFBWTtRQUNaQyxRQUFRO1FBQ1JxQyxTQUFTO1FBQ1QyQyxjQUFjO0lBQ2xCLElBQUlwRjtJQUNKLElBQUksQ0FBQ3VILFlBQVk7UUFDYkEsYUFBYXZKO0lBQ2pCO0lBQ0EsSUFBSXBNLFVBQVVQLGlCQUFpQjtRQUMzQkksT0FBTztRQUNQQyxpQkFBaUI7UUFDakJILFNBQVNBO0lBQ2I7SUFDQSxJQUFJa0MsU0FBU3NCLEVBQUUsQ0FBQ1gsS0FBSyxJQUFJWCxTQUFTc0IsRUFBRSxDQUFDZixPQUFPLElBQUlQLFNBQVNtQixZQUFZLEdBQUcsSUFBSTtRQUN4RSx3RkFBd0Y7UUFDeEYsaUdBQWlHO1FBQ2pHLDZHQUE2RztRQUM3RyxPQUFPO0lBQ1g7SUFDQSxJQUFJcU4sZUFBZUQsZ0JBQWdCcFE7SUFDbkMsSUFBSXFRLGNBQWM7UUFDZCxJQUFJeE8sU0FBU3NCLEVBQUUsQ0FBQ04sTUFBTSxJQUFJaEIsU0FBU3NCLEVBQUUsQ0FBQ1osR0FBRyxFQUFFO1lBQ3ZDLHVGQUF1RjtZQUN2RixPQUFPO1FBQ1g7UUFDQSw4REFBOEQ7UUFDOUQsNkRBQTZEO1FBQzdELElBQUl3SyxjQUFjc0QsZ0JBQWdCLEdBQUc7WUFDakMsT0FBTztRQUNYO1FBQ0EsSUFBSSxDQUFDaEMsT0FBT3dDLE9BQU8sSUFBS2hQLENBQUFBLFNBQVNzQixFQUFFLENBQUNYLEtBQUssSUFBSVgsU0FBU3NCLEVBQUUsQ0FBQ04sTUFBTSxLQUFLLENBQUMyTyxVQUFVbkIsZUFBZTtZQUMxRiw2RkFBNkY7WUFDN0YsT0FBTztRQUNYO1FBQ0EsZ0VBQWdFO1FBQ2hFLGdEQUFnRDtRQUNoRCxJQUFJeUYsZ0JBQWdCekYsYUFBYS9GLFFBQVEsQ0FBQ0MsV0FBVztRQUNyRCxJQUFJdUwsa0JBQWtCLFVBQVU7WUFDNUIsSUFBSUMsZUFBZWxVLFNBQVNOLElBQUksS0FBSyxZQUFZTSxTQUFTbUIsWUFBWSxJQUFJLE1BQU1uQixTQUFTTixJQUFJLEtBQUssV0FBV00sU0FBU21CLFlBQVksSUFBSTtZQUN0SSxJQUFJbkIsU0FBU3NCLEVBQUUsQ0FBQ04sTUFBTSxJQUFJaEIsU0FBU3NCLEVBQUUsQ0FBQ1gsS0FBSyxJQUFJLENBQUN1VCxjQUFjO2dCQUMxRCxPQUFPO1lBQ1g7UUFDSjtJQUNKO0lBQ0EsSUFBSXpMLFdBQVd0SyxRQUFRc0ssUUFBUSxDQUFDQyxXQUFXO0lBQzNDLElBQUkrSSxZQUFZdkcsY0FBYy9NO0lBQzlCLElBQUk2TSxXQUFXeUcsY0FBYyxPQUFPLE9BQU9BLGFBQWE7SUFDeEQsSUFBSXpSLFNBQVNzQixFQUFFLENBQUNQLElBQUksSUFBSWYsU0FBU21CLFlBQVksSUFBSSxNQUFNcU4sZ0JBQWdCclEsUUFBUXFLLGVBQWUsSUFBSWlKLFlBQVksR0FBRztRQUM3Ryx5RUFBeUU7UUFDekUsaURBQWlEO1FBQ2pELE9BQU87SUFDWDtJQUNBLElBQUkwQyw0QkFBNEJuSixhQUFhO0lBQzdDLElBQUlvSixzQkFBc0IzQyxjQUFjLFFBQVFBLGFBQWE7SUFDN0QsK0ZBQStGO0lBQy9GLHdGQUF3RjtJQUN4RixJQUFJdFQsUUFBUTJNLFlBQVksQ0FBQyxvQkFBb0I7UUFDekMsd0VBQXdFO1FBQ3hFLE9BQU9xSjtJQUNYO0lBQ0EsSUFBSUoseUJBQXlCbFIsSUFBSSxDQUFDNEYsYUFBYXVDLGFBQWEsTUFBTTtRQUM5RCxPQUFPO0lBQ1g7SUFDQSxJQUFJaEwsU0FBU3NCLEVBQUUsQ0FBQ04sTUFBTSxJQUFJaEIsU0FBU3NCLEVBQUUsQ0FBQ1osR0FBRyxFQUFFO1FBQ3ZDLDJFQUEyRTtRQUMzRSwrQ0FBK0M7UUFDL0MsSUFBSTJULHNCQUFzQjVMLGFBQWEsV0FBV3RLLFFBQVFrSyxJQUFJLEtBQUssVUFBVWxLLFFBQVFrSyxJQUFJLEtBQUssY0FBY0ksYUFBYSxZQUFZQSxhQUFhLGNBQWN0SyxRQUFRMk0sWUFBWSxDQUFDO1FBQ3JMLElBQUksQ0FBQ3VKLHFCQUFxQjtZQUN0QixJQUFJOU4sUUFBUTFFLE9BQU9tTCxnQkFBZ0IsQ0FBQzdPLFNBQVM7WUFDN0NrVyxzQkFBc0IvSSxxQkFBcUIvRTtRQUMvQztRQUNBLElBQUksQ0FBQzhOLHFCQUFxQjtZQUN0QixPQUFPO1FBQ1g7SUFDSjtJQUNBLElBQUk1TCxhQUFhLFNBQVNnSixjQUFjLE1BQU07UUFDMUMsSUFBSXpSLFNBQVNzQixFQUFFLENBQUNYLEtBQUssSUFBSVgsU0FBU3NCLEVBQUUsQ0FBQ04sTUFBTSxJQUFJaEIsU0FBU21CLFlBQVksS0FBSyxHQUFHO1lBQ3hFLHdGQUF3RjtZQUN4RixPQUFPO1FBQ1g7SUFDSjtJQUNBLElBQUlyQixlQUFlM0IsU0FBUyxZQUFZQSxRQUFRMk0sWUFBWSxDQUFDLGVBQWU7UUFDeEUsSUFBSXFKLDJCQUEyQjtZQUMzQixpRkFBaUY7WUFDakYsT0FBTztRQUNYO1FBQ0EsSUFBSWhXLFFBQVE2RSxLQUFLLElBQUksQ0FBQzhRLFdBQVc3SyxpQ0FBaUMsRUFBRTtZQUNoRSxpRUFBaUU7WUFDakUseURBQXlEO1lBQ3pELDJEQUEyRDtZQUMzRCxPQUFPO1FBQ1g7SUFDSjtJQUNBLElBQUlSLGFBQWEsU0FBU3FMLFdBQVdySyxnQkFBZ0IsSUFBSTBLLDJCQUEyQjtRQUNoRixPQUFPO0lBQ1g7SUFDQSxJQUFJblUsU0FBU3NCLEVBQUUsQ0FBQ1IsT0FBTyxJQUFJZCxTQUFTc0IsRUFBRSxDQUFDUCxJQUFJLEVBQUU7UUFDekMsSUFBSTBILGFBQWEsT0FBTztZQUNwQixJQUFJcUwsV0FBV3BLLFFBQVEsRUFBRTtnQkFDckIsNkRBQTZEO2dCQUM3RCw0REFBNEQ7Z0JBQzVELG1EQUFtRDtnQkFDbkQsT0FBTztZQUNYO1lBQ0EsMEdBQTBHO1lBQzFHLE9BQU92TCxRQUFRMk0sWUFBWSxDQUFDLGdCQUFnQnNKO1FBQ2hEO1FBQ0EsSUFBSWpXLFFBQVFxSyxlQUFlLEVBQUU7WUFDekIsSUFBSXNMLFdBQVc5Syx5QkFBeUIsSUFBSW9MLHFCQUFxQjtnQkFDN0QsT0FBTztZQUNYO1lBQ0EsMEdBQTBHO1lBQzFHLE9BQU9qVyxRQUFRMk0sWUFBWSxDQUFDO1FBQ2hDO0lBQ0o7SUFDQSxJQUFJM00sUUFBUW1XLFFBQVEsS0FBS2xYLFdBQVc7UUFDaEMsT0FBT21NLFFBQVFpRCxPQUFPbUYsWUFBWTtJQUN0QztJQUNBLElBQUlsSixhQUFhLFNBQVM7UUFDdEIsSUFBSSxDQUFDdEssUUFBUTJNLFlBQVksQ0FBQyxhQUFhO1lBQ25DLDBHQUEwRztZQUMxRyxPQUFPO1FBQ1gsT0FBTyxJQUFJOUssU0FBU3NCLEVBQUUsQ0FBQ1gsS0FBSyxFQUFFO1lBQzFCLHNFQUFzRTtZQUN0RSxPQUFPO1FBQ1g7SUFDSjtJQUNBLElBQUk4SCxhQUFhLFNBQVM7UUFDdEIsSUFBSSxDQUFDdEssUUFBUTJNLFlBQVksQ0FBQyxhQUFhO1lBQ25DLElBQUk5SyxTQUFTc0IsRUFBRSxDQUFDUixPQUFPLElBQUlkLFNBQVNzQixFQUFFLENBQUNQLElBQUksRUFBRTtnQkFDekMsbUhBQW1IO2dCQUNuSCxPQUFPO1lBQ1g7UUFDSixPQUFPLElBQUlmLFNBQVNzQixFQUFFLENBQUNYLEtBQUssSUFBSVgsU0FBU3NCLEVBQUUsQ0FBQ1QsS0FBSyxFQUFFO1lBQy9DLGtGQUFrRjtZQUNsRixPQUFPO1FBQ1g7SUFDSjtJQUNBLElBQUk0SCxhQUFhLFVBQVU7UUFDdkIsSUFBSXpJLFNBQVNzQixFQUFFLENBQUNYLEtBQUssSUFBSVgsU0FBU3NCLEVBQUUsQ0FBQ04sTUFBTSxFQUFFO1lBQ3pDLHVIQUF1SDtZQUN2SCxPQUFPO1FBQ1g7SUFDSjtJQUNBLElBQUl5SCxhQUFhLFVBQVU7UUFDdkIsc0RBQXNEO1FBQ3RELDJFQUEyRTtRQUMzRSxzRUFBc0U7UUFDdEUsK0RBQStEO1FBQy9ELE9BQU87SUFDWDtJQUNBLElBQUksQ0FBQytELE9BQU9FLFVBQVUsSUFBSTFNLFNBQVNzQixFQUFFLENBQUNULEtBQUssRUFBRTtRQUN6Qyw4REFBOEQ7UUFDOUQsNENBQTRDO1FBQzVDLElBQUkwVCxTQUFTMVMsT0FBT21MLGdCQUFnQixDQUFDN08sU0FBUztRQUM5QyxJQUFJdU4scUJBQXFCNkksU0FBUztZQUM5QixPQUFPSjtRQUNYO0lBQ0o7SUFDQSxJQUFJblUsU0FBU3NCLEVBQUUsQ0FBQ1IsT0FBTyxJQUFJZCxTQUFTc0IsRUFBRSxDQUFDUCxJQUFJLEVBQUU7UUFDekMsK0RBQStEO1FBQy9ELCtDQUErQztRQUMvQyxJQUFJMEgsYUFBYSxRQUFRO1lBQ3JCLElBQUl1SCxNQUFNSCxlQUFlMVI7WUFDekIsSUFBSTZSLE9BQU85RSxjQUFjOEUsT0FBTyxHQUFHO2dCQUMvQixPQUFPO1lBQ1g7UUFDSjtRQUNBLElBQUl3RSxVQUFVM1MsT0FBT21MLGdCQUFnQixDQUFDN08sU0FBUztRQUMvQyxJQUFJbU4scUJBQXFCa0osVUFBVTtZQUMvQiwyRUFBMkU7WUFDM0UsT0FBT3JXLFFBQVFtVyxRQUFRLElBQUk7UUFDL0I7UUFDQSxJQUFJLENBQUM5SCxPQUFPQyxPQUFPLElBQUlaLGtCQUFrQjJJLFVBQVU7WUFDL0MsSUFBSS9DLGNBQWMsTUFBTTtnQkFDcEIsT0FBTzJDO1lBQ1g7WUFDQSxPQUFPSyw4QkFBOEJ0VyxZQUFZdVcseUJBQXlCdlc7UUFDOUU7UUFDQSw0REFBNEQ7UUFDNUQsMkNBQTJDO1FBQzNDLElBQUk0TixzQkFBc0I1TixTQUFTc0ssV0FBVztZQUMxQyxPQUFPO1FBQ1g7UUFDQSxJQUFJeUUsU0FBUy9PLFFBQVFnUCxhQUFhO1FBQ2xDLElBQUlELFFBQVE7WUFDUixJQUFJbEIsaUJBQWlCa0IsT0FBT3pFLFFBQVEsQ0FBQ0MsV0FBVztZQUNoRCxJQUFJdUQsY0FBY3BLLE9BQU9tTCxnQkFBZ0IsQ0FBQ0UsUUFBUTtZQUNsRCx3REFBd0Q7WUFDeEQsSUFBSW5CLHNCQUFzQm1CLFFBQVF6RSxVQUFVdUQsZ0JBQWdCQyxjQUFjO2dCQUN0RSxPQUFPO1lBQ1g7WUFDQSw2RUFBNkU7WUFDN0UseURBQXlEO1lBQ3pELElBQUlKLGtCQUFrQkksY0FBYztnQkFDaEMscUNBQXFDO2dCQUNyQyxPQUFPbUk7WUFDWDtRQUNKO0lBQ0o7SUFDQSwyREFBMkQ7SUFDM0QsT0FBT2pXLFFBQVFtVyxRQUFRLElBQUk7QUFDL0I7QUFDQSwwQ0FBMEM7QUFDMUNOLGdCQUFnQnhILE1BQU0sR0FBRztJQUNyQixJQUFJQSxTQUFTOU4sVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDbEYsSUFBSWlXLGFBQWEsU0FBU0EsV0FBVzdXLE9BQU87UUFDeEMsT0FBT2tXLGdCQUFnQjtZQUNuQmxXLFNBQVNBO1lBQ1QwTyxRQUFRQTtRQUNaO0lBQ0o7SUFDQW1JLFdBQVd0SCxLQUFLLEdBQUcyRztJQUNuQixPQUFPVztBQUNYO0FBQ0EsSUFBSUYsZ0NBQWdDckgsZ0JBQWdCQyxLQUFLLENBQUNiLE1BQU0sQ0FBQztJQUM3REMsU0FBUztBQUNiO0FBQ0EsSUFBSWlJLDJCQUEyQlYsZ0JBQWdCeEgsTUFBTSxDQUFDO0lBQ2xEQyxTQUFTO0FBQ2I7QUFDQSwyREFBMkQ7QUFDM0QsSUFBSWtJLGFBQWFYLGdCQUFnQnhILE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLFNBQVNvSTtJQUNMLElBQUkvVyxPQUFPYSxVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHWixVQUFVRCxLQUFLQyxPQUFPLEVBQUU2VSxpQkFBaUI5VSxLQUFLOFUsY0FBYyxFQUFFQyxzQkFBc0IvVSxLQUFLK1UsbUJBQW1CLEVBQUVDLFdBQVdoVixLQUFLZ1YsUUFBUTtJQUN6TixJQUFJZ0MsY0FBY0YsV0FBV3RILEtBQUssQ0FBQ2IsTUFBTSxDQUFDO1FBQ3RDbUYsY0FBY2lCO0lBQ2xCO0lBQ0EsT0FBT2dCLGVBQWU7UUFDbEI5VixTQUFTQTtRQUNUNlUsZ0JBQWdCQTtRQUNoQkMscUJBQXFCQTtRQUNyQkMsVUFBVUE7SUFDZCxHQUFHVCxNQUFNLENBQUN5QztBQUNkO0FBQ0EsK0RBQStEO0FBQy9ELFNBQVNDLG1CQUFtQkMsQ0FBQyxFQUFFQyxDQUFDO0lBQzVCLE9BQU9ELEVBQUVFLHVCQUF1QixDQUFDRCxLQUFLNVcsS0FBSzhXLDJCQUEyQixHQUFHLENBQUMsSUFBSTtBQUNsRjtBQUNBLFNBQVNDLGFBQWF4QixRQUFRO0lBQzFCLE9BQU9BLFNBQVN5QixJQUFJLENBQUNOO0FBQ3pCO0FBQ0EsU0FBU08sd0JBQXdCOVYsSUFBSSxFQUFFOEgsTUFBTTtJQUN6Qyw2REFBNkQ7SUFDN0QsT0FBT2lHLFVBQVUvTixNQUFNLFNBQVNwQixPQUFPO1FBQ25DLE9BQU9rSixPQUFPNE4sdUJBQXVCLENBQUM5VyxXQUFXQyxLQUFLOFcsMkJBQTJCO0lBQ3JGO0FBQ0o7QUFDQSxTQUFTSSxxQkFBcUIvVixJQUFJLEVBQUVvVSxRQUFRLEVBQUU0QixjQUFjO0lBQ3hELDRFQUE0RTtJQUM1RSx3REFBd0Q7SUFDeEQsSUFBSUMsYUFBYSxFQUFFO0lBQ25CN0IsU0FBUy9PLE9BQU8sQ0FBQyxTQUFTekcsT0FBTztRQUM3QixJQUFJK1AsVUFBVTtRQUNkLElBQUlnQixTQUFTM1AsS0FBS2tNLE9BQU8sQ0FBQ3ROO1FBQzFCLElBQUkrUSxXQUFXLENBQUMsR0FBRztZQUNmLGdDQUFnQztZQUNoQ0EsU0FBU21HLHdCQUF3QjlWLE1BQU1wQjtZQUN2QytQLFVBQVU7UUFDZDtRQUNBLElBQUlnQixXQUFXLENBQUMsR0FBRztZQUNmLDRDQUE0QztZQUM1Qyw2Q0FBNkM7WUFDN0NBLFNBQVMzUCxLQUFLaEMsTUFBTTtRQUN4QjtRQUNBLHFEQUFxRDtRQUNyRCxJQUFJa1ksYUFBYTFZLFVBQVV3WSxpQkFBaUJBLGVBQWVwWCxXQUFXQTtRQUN0RSxJQUFJLENBQUNzWCxXQUFXbFksTUFBTSxFQUFFO1lBQ3BCLGdDQUFnQztZQUNoQztRQUNKO1FBQ0FpWSxXQUFXaFcsSUFBSSxDQUFDO1lBQ1owUCxRQUFRQTtZQUNSaEIsU0FBU0E7WUFDVHlGLFVBQVU4QjtRQUNkO0lBQ0o7SUFDQSxPQUFPRDtBQUNYO0FBQ0EsU0FBU0Usd0JBQXdCblcsSUFBSSxFQUFFaVcsVUFBVTtJQUM3QywyREFBMkQ7SUFDM0QsNENBQTRDO0lBQzVDLElBQUlHLFdBQVc7SUFDZixxREFBcUQ7SUFDckQsK0NBQStDO0lBQy9DSCxXQUFXSixJQUFJLENBQUMsU0FBU0wsQ0FBQyxFQUFFQyxDQUFDO1FBQ3pCLE9BQU9ELEVBQUU3RixNQUFNLEdBQUc4RixFQUFFOUYsTUFBTTtJQUM5QjtJQUNBc0csV0FBVzVRLE9BQU8sQ0FBQyxTQUFTZ1IsU0FBUztRQUNqQyxxREFBcUQ7UUFDckQsSUFBSUMsU0FBU0QsVUFBVTFILE9BQU8sR0FBRyxJQUFJO1FBQ3JDLElBQUk0SCxPQUFPO1lBQ1BGLFVBQVUxRyxNQUFNLEdBQUd5RztZQUNuQkU7U0FDSCxDQUFDekMsTUFBTSxDQUFDd0MsVUFBVWpDLFFBQVE7UUFDM0JwVSxLQUFLd1csTUFBTSxDQUFDQyxLQUFLLENBQUN6VyxNQUFNdVc7UUFDeEJILFlBQVlDLFVBQVVqQyxRQUFRLENBQUNwVyxNQUFNLEdBQUdzWTtJQUM1QztBQUNKO0FBQ0EsU0FBU0k7SUFDTCxJQUFJcFksT0FBT2EsVUFBVW5CLE1BQU0sR0FBRyxLQUFLbUIsU0FBUyxDQUFDLEVBQUUsS0FBS3RCLFlBQVlzQixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBR2EsT0FBTzFCLEtBQUswQixJQUFJLEVBQUVvVSxXQUFXOVYsS0FBSzhWLFFBQVEsRUFBRTRCLGlCQUFpQjFYLEtBQUswWCxjQUFjO0lBQ25LLDBEQUEwRDtJQUMxRCxJQUFJVyxRQUFRM1csS0FBSy9CLEtBQUssQ0FBQztJQUN2QixtRUFBbUU7SUFDbkUsSUFBSTJZLFlBQVlwWixVQUFVNFcsVUFBVW5XLEtBQUssQ0FBQztJQUMxQzJYLGFBQWFnQjtJQUNiLHFFQUFxRTtJQUNyRSwwQ0FBMEM7SUFDMUMsSUFBSVgsYUFBYUYscUJBQXFCWSxPQUFPQyxXQUFXWjtJQUN4RCxpRkFBaUY7SUFDakZHLHdCQUF3QlEsT0FBT1Y7SUFDL0IsT0FBT1U7QUFDWDtBQUNBLElBQUlFLGVBQWU7SUFDZixTQUFTQyxpQkFBaUJoUCxNQUFNLEVBQUVpUCxLQUFLO1FBQ25DLElBQUksSUFBSTdJLElBQUksR0FBR0EsSUFBSTZJLE1BQU0vWSxNQUFNLEVBQUVrUSxJQUFJO1lBQ2pDLElBQUk4SSxhQUFhRCxLQUFLLENBQUM3SSxFQUFFO1lBQ3pCOEksV0FBV2hhLFVBQVUsR0FBR2dhLFdBQVdoYSxVQUFVLElBQUk7WUFDakRnYSxXQUFXQyxZQUFZLEdBQUc7WUFDMUIsSUFBSSxXQUFXRCxZQUFZQSxXQUFXRSxRQUFRLEdBQUc7WUFDakR0YSxPQUFPQyxjQUFjLENBQUNpTCxRQUFRa1AsV0FBVzVTLEdBQUcsRUFBRTRTO1FBQ2xEO0lBQ0o7SUFDQSxPQUFPLFNBQVNHLFdBQVcsRUFBRUMsVUFBVSxFQUFFQyxXQUFXO1FBQ2hELElBQUlELFlBQVlOLGlCQUFpQkssWUFBWTVOLFNBQVMsRUFBRTZOO1FBQ3hELElBQUlDLGFBQWFQLGlCQUFpQkssYUFBYUU7UUFDL0MsT0FBT0Y7SUFDWDtBQUNKO0FBQ0EsU0FBU0csZ0JBQWdCQyxRQUFRLEVBQUVKLFdBQVc7SUFDMUMsSUFBSSxDQUFFSSxDQUFBQSxvQkFBb0JKLFdBQVUsR0FBSTtRQUNwQyxNQUFNLElBQUloWixVQUFVO0lBQ3hCO0FBQ0o7QUFDQSxJQUFJcVosT0FBTztJQUNQLFNBQVNBLEtBQUtqWixPQUFPO1FBQ2pCK1ksZ0JBQWdCLElBQUksRUFBRUU7UUFDdEIsSUFBSSxDQUFDN1gsU0FBUyxHQUFHSixZQUFZaEI7UUFDN0IsSUFBSSxDQUFDa1osSUFBSSxHQUFHLENBQUM7SUFDakI7SUFDQVosYUFBYVcsTUFBTTtRQUNmO1lBQ0lwVCxLQUFLO1lBQ0xySCxPQUFPLFNBQVMyYSxZQUFZdlgsSUFBSTtnQkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQ3NYLElBQUksQ0FBQ3RYLEtBQUssRUFBRTtvQkFDbEIsbURBQW1EO29CQUNuRCwrQ0FBK0M7b0JBQy9DLElBQUksQ0FBQ3dYLFlBQVksQ0FBQ3hYO2dCQUN0QjtnQkFDQSxPQUFPLElBQUksQ0FBQ3NYLElBQUksQ0FBQ3RYLEtBQUs7WUFDMUI7UUFDSjtRQUNBO1lBQ0lpRSxLQUFLO1lBQ0xySCxPQUFPLFNBQVM0YSxhQUFheFgsSUFBSTtnQkFDN0IsSUFBSWdFLE1BQU1rTSxhQUFhbFEsTUFBTSxJQUFJLENBQUNSLFNBQVM7Z0JBQzNDLElBQUksQ0FBQ3dFLEtBQUs7b0JBQ04sbUVBQW1FO29CQUNuRTtnQkFDSjtnQkFDQSxJQUFJLENBQUNzVCxJQUFJLENBQUN0VCxJQUFJaEUsSUFBSSxDQUFDLEdBQUdrVixjQUFjO29CQUNoQzlXLFNBQVM0RjtnQkFDYjtZQUNKO1FBQ0o7UUFDQTtZQUNJQyxLQUFLO1lBQ0xySCxPQUFPLFNBQVM2YSxxQkFBcUJ4RCxRQUFRO2dCQUN6QyxxREFBcUQ7Z0JBQ3JELDJDQUEyQztnQkFDM0MsT0FBT0EsU0FBU3ZCLE1BQU0sQ0FBQyxTQUFTalUsT0FBTztvQkFDbkMsSUFBSXNLLFdBQVd0SyxRQUFRc0ssUUFBUSxDQUFDQyxXQUFXO29CQUMzQyxJQUFJRCxhQUFhLFFBQVE7d0JBQ3JCLE9BQU87b0JBQ1g7b0JBQ0EsSUFBSS9FLE1BQU12RixRQUFRUyxVQUFVO29CQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDb1ksSUFBSSxDQUFDdFQsSUFBSWhFLElBQUksQ0FBQyxFQUFFO3dCQUN0QixJQUFJLENBQUNzWCxJQUFJLENBQUN0VCxJQUFJaEUsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDNUI7b0JBQ0EsSUFBSSxDQUFDc1gsSUFBSSxDQUFDdFQsSUFBSWhFLElBQUksQ0FBQyxDQUFDRixJQUFJLENBQUNyQjtvQkFDekIsT0FBTztnQkFDWCxHQUFHLElBQUk7WUFDWDtRQUNKO0tBQ0g7SUFDRCxPQUFPNFk7QUFDWDtBQUNBLFNBQVNLLFNBQVN6RCxRQUFRLEVBQUU3VixPQUFPO0lBQy9CLDREQUE0RDtJQUM1RCw0REFBNEQ7SUFDNUQsNENBQTRDO0lBQzVDLElBQUl1WixVQUFVdlosUUFBUVIsZ0JBQWdCLENBQUM7SUFDdkMsSUFBSTBaLE9BQU8sSUFBSUQsS0FBS2paO0lBQ3BCLHFEQUFxRDtJQUNyRCwyQ0FBMkM7SUFDM0MsSUFBSXFZLFlBQVlhLEtBQUtHLG9CQUFvQixDQUFDeEQ7SUFDMUMsSUFBSSxDQUFDMEQsUUFBUTlaLE1BQU0sRUFBRTtRQUNqQixzREFBc0Q7UUFDdEQsNENBQTRDO1FBQzVDLE9BQU80WTtJQUNYO0lBQ0EsT0FBT0YsZ0JBQWdCO1FBQ25CMVcsTUFBTTRXO1FBQ054QyxVQUFVMEQ7UUFDVjlCLGdCQUFnQixTQUFTQSxlQUFlK0IsS0FBSztZQUN6QyxJQUFJNVgsT0FBTzRYLE1BQU1yTSxZQUFZLENBQUMsVUFBVXpOLEtBQUssQ0FBQztZQUM5QyxPQUFPd1osS0FBS0MsV0FBVyxDQUFDdlg7UUFDNUI7SUFDSjtBQUNKO0FBQ0EsSUFBSTZYLGlCQUFpQjtJQUNqQixTQUFTbEIsaUJBQWlCaFAsTUFBTSxFQUFFaVAsS0FBSztRQUNuQyxJQUFJLElBQUk3SSxJQUFJLEdBQUdBLElBQUk2SSxNQUFNL1ksTUFBTSxFQUFFa1EsSUFBSTtZQUNqQyxJQUFJOEksYUFBYUQsS0FBSyxDQUFDN0ksRUFBRTtZQUN6QjhJLFdBQVdoYSxVQUFVLEdBQUdnYSxXQUFXaGEsVUFBVSxJQUFJO1lBQ2pEZ2EsV0FBV0MsWUFBWSxHQUFHO1lBQzFCLElBQUksV0FBV0QsWUFBWUEsV0FBV0UsUUFBUSxHQUFHO1lBQ2pEdGEsT0FBT0MsY0FBYyxDQUFDaUwsUUFBUWtQLFdBQVc1UyxHQUFHLEVBQUU0UztRQUNsRDtJQUNKO0lBQ0EsT0FBTyxTQUFTRyxXQUFXLEVBQUVDLFVBQVUsRUFBRUMsV0FBVztRQUNoRCxJQUFJRCxZQUFZTixpQkFBaUJLLFlBQVk1TixTQUFTLEVBQUU2TjtRQUN4RCxJQUFJQyxhQUFhUCxpQkFBaUJLLGFBQWFFO1FBQy9DLE9BQU9GO0lBQ1g7QUFDSjtBQUNBLFNBQVNjLGtCQUFrQlYsUUFBUSxFQUFFSixXQUFXO0lBQzVDLElBQUksQ0FBRUksQ0FBQUEsb0JBQW9CSixXQUFVLEdBQUk7UUFDcEMsTUFBTSxJQUFJaFosVUFBVTtJQUN4QjtBQUNKO0FBQ0EsSUFBSStaLFVBQVU7SUFDVixTQUFTQSxRQUFRM1osT0FBTyxFQUFFNFosWUFBWTtRQUNsQ0Ysa0JBQWtCLElBQUksRUFBRUM7UUFDeEIsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQzNaLE9BQU8sR0FBR0E7UUFDZiwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDNFosWUFBWSxHQUFHQTtRQUNwQixxREFBcUQ7UUFDckQsSUFBSSxDQUFDQyxXQUFXLEdBQUc7UUFDbkIsc0RBQXNEO1FBQ3RELElBQUksQ0FBQ0MsTUFBTSxHQUFHLENBQUM7UUFDZixxREFBcUQ7UUFDckQsSUFBSSxDQUFDQyxVQUFVLEdBQUcsRUFBRTtRQUNwQixnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDQyxLQUFLLEdBQUcsQ0FBQztRQUNkLHNEQUFzRDtRQUN0RCxJQUFJLENBQUNuRSxRQUFRLEdBQUcsQ0FBQztJQUNyQjtJQUNBLG9EQUFvRDtJQUNwRDRELGVBQWVFLFNBQVM7UUFDcEI7WUFDSTlULEtBQUs7WUFDTHJILE9BQU8sU0FBU3liLGNBQWNsWixJQUFJO2dCQUM5QixJQUFJQSxLQUFLbVosVUFBVSxFQUFFO29CQUNqQjtnQkFDSjtnQkFDQSw0REFBNEQ7Z0JBQzVEblosS0FBS21aLFVBQVUsR0FBRyxZQUFZLElBQUksQ0FBQ0wsV0FBVztnQkFDOUMsSUFBSSxDQUFDRyxLQUFLLENBQUNqWixLQUFLbVosVUFBVSxDQUFDLEdBQUduWjtnQkFDOUIsZ0NBQWdDO2dCQUNoQyxJQUFJb1osYUFBYXhaLGNBQWM7b0JBQzNCWCxTQUFTZTtnQkFDYjtnQkFDQSxJQUFJb1osWUFBWTtvQkFDWixJQUFJLENBQUNGLGFBQWEsQ0FBQ0U7b0JBQ25CLElBQUksQ0FBQ0MsbUJBQW1CLENBQUNyWixNQUFNb1o7Z0JBQ25DLE9BQU87b0JBQ0gsSUFBSSxDQUFDSixVQUFVLENBQUNyWSxJQUFJLENBQUNYO2dCQUN6QjtZQUNKO1FBQ0o7UUFDQTtZQUNJOEUsS0FBSztZQUNMckgsT0FBTyxTQUFTNGIsb0JBQW9CclosSUFBSSxFQUFFcU8sTUFBTTtnQkFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQzBLLE1BQU0sQ0FBQzFLLE9BQU84SyxVQUFVLENBQUMsRUFBRTtvQkFDakMsSUFBSSxDQUFDSixNQUFNLENBQUMxSyxPQUFPOEssVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDdkM7Z0JBQ0EsSUFBSSxDQUFDSixNQUFNLENBQUMxSyxPQUFPOEssVUFBVSxDQUFDLENBQUN4WSxJQUFJLENBQUNYO1lBQ3hDO1FBQ0o7UUFDQTtZQUNJOEUsS0FBSztZQUNMckgsT0FBTyxTQUFTNmIsaUJBQWlCaGEsT0FBTyxFQUFFVSxJQUFJO2dCQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDOFUsUUFBUSxDQUFDOVUsS0FBS21aLFVBQVUsQ0FBQyxFQUFFO29CQUNqQyxJQUFJLENBQUNyRSxRQUFRLENBQUM5VSxLQUFLbVosVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDdkM7Z0JBQ0EsSUFBSSxDQUFDckUsUUFBUSxDQUFDOVUsS0FBS21aLFVBQVUsQ0FBQyxDQUFDeFksSUFBSSxDQUFDckI7WUFDeEM7UUFDSjtRQUNBO1lBQ0l3RixLQUFLO1lBQ0xySCxPQUFPLFNBQVM4YixnQkFBZ0J6RSxRQUFRO2dCQUNwQyxPQUFPQSxTQUFTdkIsTUFBTSxDQUFDLFNBQVNqVSxPQUFPO29CQUNuQyxJQUFJVSxPQUFPSixjQUFjO3dCQUNyQlgsU0FBU0s7b0JBQ2I7b0JBQ0EsSUFBSSxDQUFDVSxNQUFNO3dCQUNQLE9BQU87b0JBQ1g7b0JBQ0EsSUFBSSxDQUFDa1osYUFBYSxDQUFDbFo7b0JBQ25CLElBQUksQ0FBQ3NaLGdCQUFnQixDQUFDaGEsU0FBU1U7b0JBQy9CLE9BQU87Z0JBQ1gsR0FBRyxJQUFJO1lBQ1g7UUFDSjtRQUNBO1lBQ0k4RSxLQUFLO1lBQ0xySCxPQUFPLFNBQVM4WSxLQUFLekIsUUFBUTtnQkFDekIsSUFBSXdDLFlBQVksSUFBSSxDQUFDa0MsWUFBWSxDQUFDMUU7Z0JBQ2xDd0MsWUFBWSxJQUFJLENBQUNtQyxhQUFhLENBQUNuQztnQkFDL0IsSUFBSSxDQUFDb0MsUUFBUTtnQkFDYixPQUFPcEM7WUFDWDtRQUNKO1FBQ0E7WUFDSXhTLEtBQUs7WUFDTHJILE9BQU8sU0FBUytiLGFBQWExRSxRQUFRO2dCQUNqQ3hYLE9BQU9zSCxJQUFJLENBQUMsSUFBSSxDQUFDcVUsS0FBSyxFQUFFbFQsT0FBTyxDQUFDLFNBQVNvVCxVQUFVO29CQUMvQyxJQUFJOUIsUUFBUSxJQUFJLENBQUN2QyxRQUFRLENBQUNxRSxXQUFXO29CQUNyQyxJQUFJN0IsWUFBWSxJQUFJLENBQUN5QixNQUFNLENBQUNJLFdBQVc7b0JBQ3ZDLElBQUlRLFdBQVcsSUFBSSxDQUFDVixLQUFLLENBQUNFLFdBQVcsQ0FBQzNZLFVBQVU7b0JBQ2hELElBQUksQ0FBQ3NVLFFBQVEsQ0FBQ3FFLFdBQVcsR0FBRyxJQUFJLENBQUNTLE1BQU0sQ0FBQ3ZDLE9BQU9DLFdBQVdxQztnQkFDOUQsR0FBRyxJQUFJO2dCQUNQLE9BQU8sSUFBSSxDQUFDQyxNQUFNLENBQUM5RSxVQUFVLElBQUksQ0FBQ2tFLFVBQVUsRUFBRSxJQUFJLENBQUMvWixPQUFPO1lBQzlEO1FBQ0o7UUFDQTtZQUNJNkYsS0FBSztZQUNMckgsT0FBTyxTQUFTbWMsT0FBT2xaLElBQUksRUFBRW9VLFFBQVEsRUFBRTdWLE9BQU87Z0JBQzFDLElBQUk0YSxTQUFTekMsZ0JBQWdCO29CQUN6QjFXLE1BQU1BO29CQUNOb1UsVUFBVUE7Z0JBQ2Q7Z0JBQ0EsT0FBTyxJQUFJLENBQUMrRCxZQUFZLENBQUNnQixRQUFRNWE7WUFDckM7UUFDSjtRQUNBO1lBQ0k2RixLQUFLO1lBQ0xySCxPQUFPLFNBQVNnYyxjQUFjM0UsUUFBUTtnQkFDbEMsT0FBT3NDLGdCQUFnQjtvQkFDbkIxVyxNQUFNb1U7b0JBQ05BLFVBQVUsSUFBSSxDQUFDa0UsVUFBVTtvQkFDekJ0QyxnQkFBZ0IsSUFBSSxDQUFDb0QsbUJBQW1CLENBQUNDLElBQUksQ0FBQyxJQUFJO2dCQUN0RDtZQUNKO1FBQ0o7UUFDQTtZQUNJalYsS0FBSztZQUNMckgsT0FBTyxTQUFTcWMsb0JBQW9COVosSUFBSTtnQkFDcEMsSUFBSTZaLFNBQVN6QyxnQkFBZ0I7b0JBQ3pCMVcsTUFBTSxJQUFJLENBQUNvVSxRQUFRLENBQUM5VSxLQUFLbVosVUFBVSxDQUFDO29CQUNwQ3JFLFVBQVUsSUFBSSxDQUFDaUUsTUFBTSxDQUFDL1ksS0FBS21aLFVBQVUsQ0FBQztvQkFDdEN6QyxnQkFBZ0IsSUFBSSxDQUFDb0QsbUJBQW1CLENBQUNDLElBQUksQ0FBQyxJQUFJO2dCQUN0RDtnQkFDQSxJQUFJbkgsWUFBWXZHLGNBQWNyTTtnQkFDOUIsSUFBSTRTLGNBQWMsUUFBUUEsWUFBWSxDQUFDLEdBQUc7b0JBQ3RDLE9BQU87d0JBQ0g1UztxQkFDSCxDQUFDdVUsTUFBTSxDQUFDc0Y7Z0JBQ2I7Z0JBQ0EsT0FBT0E7WUFDWDtRQUNKO1FBQ0E7WUFDSS9VLEtBQUs7WUFDTHJILE9BQU8sU0FBU2ljO2dCQUNaLHdFQUF3RTtnQkFDeEVwYyxPQUFPc0gsSUFBSSxDQUFDLElBQUksQ0FBQ3FVLEtBQUssRUFBRWxULE9BQU8sQ0FBQyxTQUFTakIsR0FBRztvQkFDeEMsT0FBTyxJQUFJLENBQUNtVSxLQUFLLENBQUNuVSxJQUFJLENBQUNxVSxVQUFVO2dCQUNyQyxHQUFHLElBQUk7WUFDWDtRQUNKO0tBQ0g7SUFDRCxPQUFPUDtBQUNYO0FBQ0EsU0FBU29CLGFBQWFsRixRQUFRLEVBQUU3VixPQUFPLEVBQUU0WixZQUFZO0lBQ2pELElBQUlvQixVQUFVLElBQUlyQixRQUFRM1osU0FBUzRaO0lBQ25DLElBQUl2QixZQUFZMkMsUUFBUVYsZUFBZSxDQUFDekU7SUFDeEMsSUFBSXdDLFVBQVU1WSxNQUFNLEtBQUtvVyxTQUFTcFcsTUFBTSxFQUFFO1FBQ3RDLGlEQUFpRDtRQUNqRCxPQUFPbWEsYUFBYS9EO0lBQ3hCO0lBQ0EsT0FBT21GLFFBQVExRCxJQUFJLENBQUNlO0FBQ3hCO0FBQ0EsU0FBUzRDLGFBQWFwRixRQUFRO0lBQzFCLGtFQUFrRTtJQUNsRSx5SEFBeUg7SUFDekgscUNBQXFDO0lBQ3JDLDBGQUEwRjtJQUMxRiwwRUFBMEU7SUFDMUUsd0VBQXdFO0lBQ3hFLGlGQUFpRjtJQUNqRixzRUFBc0U7SUFDdEUscUVBQXFFO0lBQ3JFLDhEQUE4RDtJQUM5RCx1RkFBdUY7SUFDdkYsOEZBQThGO0lBQzlGLDBFQUEwRTtJQUMxRSxJQUFJalEsTUFBTSxDQUFDO0lBQ1gsSUFBSXNWLFVBQVUsRUFBRTtJQUNoQixJQUFJQyxTQUFTdEYsU0FBU3ZCLE1BQU0sQ0FBQyxTQUFTalUsT0FBTztRQUN6Qyw0RUFBNEU7UUFDNUUsSUFBSW1XLFdBQVduVyxRQUFRbVcsUUFBUTtRQUMvQixJQUFJQSxhQUFhbFgsV0FBVztZQUN4QmtYLFdBQVdwSixjQUFjL007UUFDN0I7UUFDQSwyQ0FBMkM7UUFDM0MsSUFBSW1XLFlBQVksS0FBS0EsYUFBYSxRQUFRQSxhQUFhbFgsV0FBVztZQUM5RCxPQUFPO1FBQ1g7UUFDQSxJQUFJLENBQUNzRyxHQUFHLENBQUM0USxTQUFTLEVBQUU7WUFDaEIsdUZBQXVGO1lBQ3ZGNVEsR0FBRyxDQUFDNFEsU0FBUyxHQUFHLEVBQUU7WUFDbEIsdUNBQXVDO1lBQ3ZDMEUsUUFBUXhaLElBQUksQ0FBQzhVO1FBQ2pCO1FBQ0Esc0NBQXNDO1FBQ3RDNVEsR0FBRyxDQUFDNFEsU0FBUyxDQUFDOVUsSUFBSSxDQUFDckI7UUFDbkIsd0RBQXdEO1FBQ3hELE9BQU87SUFDWDtJQUNBLCtCQUErQjtJQUMvQixrREFBa0Q7SUFDbEQsK0NBQStDO0lBQy9DLElBQUlnWSxZQUFZNkMsUUFBUTVELElBQUksR0FBRzFSLEdBQUcsQ0FBQyxTQUFTNFEsUUFBUTtRQUNoRCxPQUFPNVEsR0FBRyxDQUFDNFEsU0FBUztJQUN4QixHQUFHNEUsV0FBVyxDQUFDLFNBQVNDLFFBQVEsRUFBRUMsT0FBTztRQUNyQyxPQUFPQSxRQUFRaEcsTUFBTSxDQUFDK0Y7SUFDMUIsR0FBR0Y7SUFDSCxPQUFPOUM7QUFDWDtBQUNBLElBQUlrRCxhQUFhLEtBQUs7QUFDdEIsU0FBU0MsdUJBQXVCM0YsUUFBUSxFQUFFN1YsT0FBTztJQUM3QyxJQUFJeWIsTUFBTTVGLFNBQVNsSSxPQUFPLENBQUMzTjtJQUMzQixJQUFJeWIsTUFBTSxHQUFHO1FBQ1QsSUFBSUMsTUFBTTdGLFNBQVNvQyxNQUFNLENBQUN3RCxLQUFLO1FBQy9CLE9BQU9DLElBQUlwRyxNQUFNLENBQUNPO0lBQ3RCO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLFNBQVMrRCxhQUFhL0QsUUFBUSxFQUFFNkUsUUFBUTtJQUNwQyxJQUFJYSxXQUFXblAsNEJBQTRCLEVBQUU7UUFDekMsaUVBQWlFO1FBQ2pFLDhEQUE4RDtRQUM5RCxnREFBZ0Q7UUFDaER5SixXQUFXeUQsU0FBU3pELFVBQVU2RTtJQUNsQztJQUNBN0UsV0FBV29GLGFBQWFwRjtJQUN4QixPQUFPQTtBQUNYO0FBQ0EsU0FBUzhGO0lBQ0wsSUFBSTViLE9BQU9hLFVBQVVuQixNQUFNLEdBQUcsS0FBS21CLFNBQVMsQ0FBQyxFQUFFLEtBQUt0QixZQUFZc0IsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUdaLFVBQVVELEtBQUtDLE9BQU8sRUFBRTZVLGlCQUFpQjlVLEtBQUs4VSxjQUFjLEVBQUVDLHNCQUFzQi9VLEtBQUsrVSxtQkFBbUIsRUFBRUMsV0FBV2hWLEtBQUtnVixRQUFRO0lBQ3pOLElBQUksQ0FBQ3dHLFlBQVk7UUFDYkEsYUFBYTlPO0lBQ2pCO0lBQ0EsSUFBSWlPLFdBQVd6YixVQUFVZSxRQUFRLENBQUMsRUFBRSxJQUFJVCxTQUFTaUIsZUFBZTtJQUNoRSxJQUFJcVYsV0FBV2lCLGNBQWM7UUFDekI5VyxTQUFTMGE7UUFDVDdGLGdCQUFnQkE7UUFDaEJDLHFCQUFxQkE7UUFDckJDLFVBQVVBO0lBQ2Q7SUFDQSxJQUFJeFYsU0FBUzZFLElBQUksQ0FBQ3dYLGdCQUFnQixJQUFJMVosU0FBU3NCLEVBQUUsQ0FBQ1gsS0FBSyxFQUFFO1FBQ3JELHdDQUF3QztRQUN4QyxvREFBb0Q7UUFDcERnVCxXQUFXa0YsYUFBYWxGLFVBQVU2RSxVQUFVZDtJQUNoRCxPQUFPO1FBQ0gvRCxXQUFXK0QsYUFBYS9ELFVBQVU2RTtJQUN0QztJQUNBLElBQUk3RixnQkFBZ0I7UUFDaEIsMkRBQTJEO1FBQzNELDBCQUEwQjtRQUMxQmdCLFdBQVcyRix1QkFBdUIzRixVQUFVNkU7SUFDaEQ7SUFDQSxPQUFPN0U7QUFDWDtBQUNBLHFGQUFxRjtBQUNyRiw4RUFBOEU7QUFDOUUseURBQXlEO0FBQ3pELG1EQUFtRDtBQUNuRCxpREFBaUQ7QUFDakQsSUFBSWdHLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEJDLEtBQUs7SUFDTCxhQUFhO0lBQ2JDLE1BQU07SUFDTkMsSUFBSTtJQUNKQyxPQUFPO0lBQ1BDLE1BQU07SUFDTkMsUUFBUTtJQUNSLFdBQVc7SUFDWEMsVUFBVTtJQUNWLGFBQWE7SUFDYkMsS0FBSztJQUNMQyxNQUFNO0lBQ04sU0FBUztJQUNUQyxPQUFPO0lBQ1BDLFFBQVE7SUFDUkMsT0FBTztJQUNQLFdBQVc7SUFDWEMsT0FBTztJQUNQQyxVQUFVO0lBQ1YsYUFBYTtJQUNiQyxNQUFNO0lBQ05DLEtBQUs7SUFDTEMsTUFBTTtJQUNOLGtCQUFrQjtJQUNsQiwrQ0FBK0M7SUFDL0MsNkNBQTZDO0lBQzdDQyxPQUFPO0lBQ1AsdUJBQXVCO0lBQ3ZCQyxRQUFRO0lBQ1JDLFFBQVE7SUFDUkMsV0FBVztJQUNYLG9FQUFvRTtJQUNwRUMsUUFBUTtRQUNKLElBQUk7WUFDQTtZQUNBO1lBQ0E7U0FDSDtJQUNMO0FBQ0o7QUFDQSw0QkFBNEI7QUFDNUIsc0NBQXNDO0FBQ3RDLElBQUksSUFBSUMsSUFBSSxHQUFHQSxJQUFJLElBQUlBLElBQUk7SUFDdkJ2QixPQUFPLENBQUMsTUFBTXVCLEVBQUUsR0FBR0EsSUFBSTtBQUMzQjtBQUNBLHFDQUFxQztBQUNyQyx3Q0FBd0M7QUFDeEMsSUFBSSxJQUFJQyxLQUFLLEdBQUdBLEtBQUssSUFBSUEsS0FBSztJQUMxQixJQUFJQyxPQUFPRCxLQUFLO0lBQ2hCLElBQUlFLFVBQVVGLEtBQUs7SUFDbkJ4QixPQUFPLENBQUN3QixHQUFHLEdBQUdDO0lBQ2R6QixPQUFPLENBQUMsU0FBU3dCLEdBQUcsR0FBR0U7SUFDdkIxQixRQUFRc0IsTUFBTSxDQUFDRyxLQUFLLEdBQUc7UUFDbkJDO0tBQ0g7QUFDTDtBQUNBLDZCQUE2QjtBQUM3QixJQUFJLElBQUlDLE1BQU0sR0FBR0EsTUFBTSxJQUFJQSxNQUFNO0lBQzdCLElBQUlDLFFBQVFELE1BQU07SUFDbEIsSUFBSUUsU0FBUzdkLE9BQU84ZCxZQUFZLENBQUNGLE9BQU83UyxXQUFXO0lBQ25EaVIsT0FBTyxDQUFDNkIsT0FBTyxHQUFHRDtBQUN0QjtBQUNBLElBQUlHLFdBQVc7SUFDWGYsS0FBSztJQUNMRCxNQUFNO0lBQ05FLE1BQU07SUFDTkosT0FBTztBQUNYO0FBQ0EsSUFBSW1CLG1CQUFtQnhmLE9BQU9zSCxJQUFJLENBQUNpWSxVQUFVaFksR0FBRyxDQUFDLFNBQVNoRSxJQUFJO0lBQzFELE9BQU9nYyxRQUFRLENBQUNoYyxLQUFLO0FBQ3pCO0FBQ0EsU0FBU2tjLHdCQUF3QkMsZUFBZTtJQUM1QyxJQUFJdmYsUUFBUXVmLGtCQUFrQixPQUFPO0lBQ3JDLE9BQU87UUFDSEMsUUFBUXhmO1FBQ1J5ZixTQUFTemY7UUFDVDBmLFNBQVMxZjtRQUNUMmYsVUFBVTNmO0lBQ2Q7QUFDSjtBQUNBLFNBQVM0ZixpQkFBaUJDLFNBQVM7SUFDL0IsSUFBSU4sa0JBQWtCTSxVQUFVMVEsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUNsRCxJQUFJMlEsV0FBV1Isd0JBQXdCQztJQUN2Q00sVUFBVXZYLE9BQU8sQ0FBQyxTQUFTeVgsS0FBSztRQUM1QixJQUFJQSxVQUFVLEtBQUs7WUFDZiw0Q0FBNEM7WUFDNUM7UUFDSjtRQUNBLCtCQUErQjtRQUMvQixJQUFJL2YsUUFBUTtRQUNaLElBQUkyUixXQUFXb08sTUFBTTdlLEtBQUssQ0FBQyxHQUFHO1FBQzlCLElBQUl5USxhQUFhLEtBQUs7WUFDbEIsMkNBQTJDO1lBQzNDM1IsUUFBUTtRQUNaLE9BQU8sSUFBSTJSLGFBQWEsS0FBSztZQUN6QixzQ0FBc0M7WUFDdEMzUixRQUFRO1FBQ1o7UUFDQSxJQUFJQSxVQUFVLE1BQU07WUFDaEIseUNBQXlDO1lBQ3pDK2YsUUFBUUEsTUFBTTdlLEtBQUssQ0FBQztRQUN4QjtRQUNBLElBQUk4ZSxlQUFlWixRQUFRLENBQUNXLE1BQU07UUFDbEMsSUFBSSxDQUFDQyxjQUFjO1lBQ2YsTUFBTSxJQUFJNWUsVUFBVSx1QkFBdUIyZSxRQUFRO1FBQ3ZEO1FBQ0FELFFBQVEsQ0FBQ0UsYUFBYSxHQUFHaGdCO0lBQzdCO0lBQ0EsT0FBTzhmO0FBQ1g7QUFDQSxTQUFTRyxXQUFXNVksR0FBRztJQUNuQixJQUFJeVgsT0FBT3pCLE9BQU8sQ0FBQ2hXLElBQUksSUFBSXlILFNBQVN6SCxLQUFLO0lBQ3pDLElBQUksQ0FBQ3lYLFFBQVEsT0FBT0EsU0FBUyxZQUFZL1AsTUFBTStQLE9BQU87UUFDbEQsTUFBTSxJQUFJMWQsVUFBVSxrQkFBa0JpRyxNQUFNO0lBQ2hEO0lBQ0EsT0FBTztRQUNIeVg7S0FDSCxDQUFDaEksTUFBTSxDQUFDdUcsUUFBUXNCLE1BQU0sQ0FBQ0csS0FBSyxJQUFJLEVBQUU7QUFDdkM7QUFDQSxTQUFTb0IsZUFBZUosUUFBUSxFQUFFSyxLQUFLO0lBQ25DLHdCQUF3QjtJQUN4QixPQUFPLENBQUNkLGlCQUFpQi9iLElBQUksQ0FBQyxTQUFTOGMsSUFBSTtRQUN2QywyQkFBMkI7UUFDM0IsT0FBTyxPQUFPTixRQUFRLENBQUNNLEtBQUssS0FBSyxhQUFhblQsUUFBUWtULEtBQUssQ0FBQ0MsS0FBSyxNQUFNTixRQUFRLENBQUNNLEtBQUs7SUFDekY7QUFDSjtBQUNBLFNBQVNDLFdBQVdDLElBQUk7SUFDcEIsT0FBT0EsS0FBS3pPLEtBQUssQ0FBQyxPQUFPekssR0FBRyxDQUFDLFNBQVNtWixLQUFLO1FBQ3ZDLElBQUlDLFNBQVNELE1BQU0xTyxLQUFLLENBQUM7UUFDekIsSUFBSTRPLGFBQWFiLGlCQUFpQlksT0FBT3RmLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDbkQsSUFBSXdmLFlBQVlULFdBQVdPLE9BQU90ZixLQUFLLENBQUMsQ0FBQztRQUN6QyxPQUFPO1lBQ0h5ZixVQUFVRDtZQUNWYixXQUFXWTtZQUNYUCxnQkFBZ0JBLGVBQWU1RCxJQUFJLENBQUMsTUFBTW1FO1FBQzlDO0lBQ0o7QUFDSjtBQUNBLHNEQUFzRDtBQUN0RCw4RUFBOEU7QUFDOUUsOEdBQThHO0FBQzlHOzs7O0FBSUEsR0FBRyxTQUFTRztJQUNSLElBQUlyZixPQUFPYSxVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHd08sU0FBU3JQLEtBQUtxUCxNQUFNLEVBQUUvTyxVQUFVTixLQUFLTSxPQUFPLEVBQUVnZixjQUFjdGYsS0FBS3NmLFdBQVc7SUFDL0osSUFBSWpRLFFBQVE7UUFDUixPQUFPLFNBQVNrUSxVQUFVcmUsSUFBSTtZQUMxQixPQUFPd0ssUUFBUTRULGVBQWVwZSxTQUFTbU8sVUFBVUEsT0FBTytILHVCQUF1QixDQUFDbFcsUUFBUVgsS0FBS2lmLDhCQUE4QjtRQUMvSDtJQUNKLE9BQU8sSUFBSWxmLFNBQVM7UUFDaEIsT0FBTyxTQUFTbWYsV0FBV3ZlLElBQUk7WUFDM0IsT0FBT3dLLFFBQVE0VCxlQUFlaGYsWUFBWVksUUFBUUEsS0FBS2tXLHVCQUF1QixDQUFDOVcsV0FBV0MsS0FBS2lmLDhCQUE4QjtRQUNqSTtJQUNKO0lBQ0EsTUFBTSxJQUFJM2YsVUFBVTtBQUN4QjtBQUNBLHVGQUF1RjtBQUN2RiwyRUFBMkU7QUFDM0UsU0FBUzZmO0lBQ0wsSUFBSTdaLE1BQU1oRixVQUFVbkIsTUFBTSxHQUFHLEtBQUttQixTQUFTLENBQUMsRUFBRSxLQUFLdEIsWUFBWXNCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUMvRSxJQUFJOGUsV0FBVyxDQUFDO0lBQ2hCLElBQUkxZixVQUFVZixVQUFVMkcsSUFBSTVGLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSVQsU0FBU2lCLGVBQWU7SUFDbkUsT0FBT29GLElBQUk1RixPQUFPO0lBQ2xCLElBQUlzVSxTQUFTclYsVUFBVTJHLElBQUkwTyxNQUFNO0lBQ2pDLE9BQU8xTyxJQUFJME8sTUFBTTtJQUNqQixJQUFJcUwsVUFBVXRoQixPQUFPc0gsSUFBSSxDQUFDQztJQUMxQixJQUFJLENBQUMrWixRQUFRbGdCLE1BQU0sRUFBRTtRQUNqQixNQUFNLElBQUlHLFVBQVU7SUFDeEI7SUFDQSxJQUFJZ2dCLGtCQUFrQixTQUFTQSxnQkFBZ0JqQixLQUFLO1FBQ2hEQSxNQUFNUSxRQUFRLENBQUNyWSxPQUFPLENBQUMsU0FBU3dXLElBQUk7WUFDaEMsSUFBSSxDQUFDb0MsUUFBUSxDQUFDcEMsS0FBSyxFQUFFO2dCQUNqQm9DLFFBQVEsQ0FBQ3BDLEtBQUssR0FBRyxFQUFFO1lBQ3ZCO1lBQ0FvQyxRQUFRLENBQUNwQyxLQUFLLENBQUM1YixJQUFJLENBQUNpZDtRQUN4QjtJQUNKO0lBQ0FnQixRQUFRN1ksT0FBTyxDQUFDLFNBQVNnWSxJQUFJO1FBQ3pCLElBQUksT0FBT2xaLEdBQUcsQ0FBQ2taLEtBQUssS0FBSyxZQUFZO1lBQ2pDLE1BQU0sSUFBSWxmLFVBQVUsK0JBQStCa2YsT0FBTztRQUM5RDtRQUNBLElBQUllLGNBQWMsU0FBU0EsWUFBWWxCLEtBQUs7WUFDeENBLE1BQU1qUCxRQUFRLEdBQUc5SixHQUFHLENBQUNrWixLQUFLO1lBQzFCLE9BQU9IO1FBQ1g7UUFDQUUsV0FBV0MsTUFBTWxaLEdBQUcsQ0FBQ2lhLGFBQWEvWSxPQUFPLENBQUM4WTtJQUM5QztJQUNBLElBQUlFLGdCQUFnQixTQUFTQSxjQUFjbkIsS0FBSztRQUM1QyxJQUFJQSxNQUFNb0IsZ0JBQWdCLEVBQUU7WUFDeEI7UUFDSjtRQUNBLElBQUl6TCxPQUFPN1UsTUFBTSxFQUFFO1lBQ2YsZ0RBQWdEO1lBQ2hELElBQUl1Z0Isb0JBQW9CWixvQkFBb0I7Z0JBQ3hDL2UsU0FBU3NlLE1BQU1wVixNQUFNO2dCQUNyQjhWLGFBQWE7WUFDakI7WUFDQSxJQUFJL0ssT0FBT3hTLElBQUksQ0FBQ2tlLG9CQUFvQjtnQkFDaEM7WUFDSjtRQUNKO1FBQ0EsSUFBSW5hLE1BQU04WSxNQUFNc0IsT0FBTyxJQUFJdEIsTUFBTXVCLEtBQUs7UUFDdEMsSUFBSSxDQUFDUixRQUFRLENBQUM3WixJQUFJLEVBQUU7WUFDaEI7UUFDSjtRQUNBNlosUUFBUSxDQUFDN1osSUFBSSxDQUFDaUIsT0FBTyxDQUFDLFNBQVNxWixNQUFNO1lBQ2pDLElBQUksQ0FBQ0EsT0FBT3pCLGNBQWMsQ0FBQ0MsUUFBUTtnQkFDL0I7WUFDSjtZQUNBd0IsT0FBT3pRLFFBQVEsQ0FBQy9QLElBQUksQ0FBQ0ssU0FBUzJlLE9BQU95QjtRQUN6QztJQUNKO0lBQ0FwZ0IsUUFBUXFnQixnQkFBZ0IsQ0FBQyxXQUFXUCxlQUFlO0lBQ25ELElBQUlNLFlBQVksU0FBU0E7UUFDckJwZ0IsUUFBUXNnQixtQkFBbUIsQ0FBQyxXQUFXUixlQUFlO0lBQzFEO0lBQ0EsT0FBTztRQUNITSxXQUFXQTtJQUNmO0FBQ0o7QUFDQSxTQUFTemhCLFNBQVM0aEIsS0FBSztJQUNuQixJQUFJLEVBQUV2Z0IsT0FBTyxFQUFFLEdBQUd1Z0IsVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJQTtJQUMxQyxJQUFJLENBQUN2Z0IsU0FBUztRQUNWQSxVQUFVVCxTQUFTaUIsZUFBZTtJQUN0QztJQUNBLHdFQUF3RTtJQUN4RSxxRUFBcUU7SUFDckUsMEVBQTBFO0lBQzFFbWI7SUFDQSxPQUFPOEQsUUFBUTtRQUNYLG9EQUFvRDtRQUNwRCxzREFBc0Q7UUFDdEQsbUJBQW1CLFNBQVNlLFlBQVk3QixLQUFLO1lBQ3pDLG9EQUFvRDtZQUNwREEsTUFBTThCLGNBQWM7WUFDcEIsSUFBSUMsV0FBVy9FLGlCQUFpQjtnQkFDNUIzYixTQUFTQTtZQUNiO1lBQ0EsSUFBSTJnQixXQUFXaEMsTUFBTVIsUUFBUTtZQUM3QixJQUFJeUMsUUFBUUYsUUFBUSxDQUFDLEVBQUU7WUFDdkIsSUFBSUcsT0FBT0gsUUFBUSxDQUFDQSxTQUFTamhCLE1BQU0sR0FBRyxFQUFFO1lBQ3hDLDJDQUEyQztZQUMzQyxJQUFJcWhCLFNBQVNILFdBQVdDLFFBQVFDO1lBQ2hDLElBQUl0WCxTQUFTb1gsV0FBV0UsT0FBT0Q7WUFDL0IsSUFBSXpmLGdCQUFnQjJmLFNBQVM7Z0JBQ3pCdlgsT0FBT3JFLEtBQUs7Z0JBQ1o7WUFDSjtZQUNBLHVDQUF1QztZQUN2QyxJQUFJNmIsZUFBZSxLQUFLO1lBQ3hCLElBQUlDLFFBQVFOLFNBQVM1ZSxJQUFJLENBQUMsU0FBU3pCLE9BQU8sRUFBRTRnQixLQUFLO2dCQUM3QyxJQUFJLENBQUM5ZixnQkFBZ0JkLFVBQVU7b0JBQzNCLE9BQU87Z0JBQ1g7Z0JBQ0EwZ0IsZUFBZUU7Z0JBQ2YsT0FBTztZQUNYO1lBQ0EsSUFBSSxDQUFDRCxPQUFPO2dCQUNSLG9EQUFvRDtnQkFDcERKLE1BQU0xYixLQUFLO2dCQUNYO1lBQ0o7WUFDQSx1REFBdUQ7WUFDdkQsSUFBSWtNLFNBQVN1UCxXQUFXLENBQUMsSUFBSTtZQUM3QkQsUUFBUSxDQUFDSyxlQUFlM1AsT0FBTyxDQUFDbE0sS0FBSztRQUN6QztJQUNKO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBTzNHLFFBQVErRCxPQUFPLEtBQUssY0FBZSxPQUFPL0QsUUFBUStELE9BQU8sS0FBSyxZQUFZL0QsUUFBUStELE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTy9ELFFBQVErRCxPQUFPLENBQUM0ZSxVQUFVLEtBQUssYUFBYTtJQUNySzdpQixPQUFPQyxjQUFjLENBQUNDLFFBQVErRCxPQUFPLEVBQUUsY0FBYztRQUFFOUQsT0FBTztJQUFLO0lBQ25FSCxPQUFPOGlCLE1BQU0sQ0FBQzVpQixRQUFRK0QsT0FBTyxFQUFFL0Q7SUFDL0I2aUIsT0FBTzdpQixPQUFPLEdBQUdBLFFBQVErRCxPQUFPO0FBQ2xDLEVBRUEsK0NBQStDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9PdmVybGF5L21haW50YWluLS10YWItZm9jdXMuanM/ODI1NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqLyAvLyBAdHMtbm9jaGVja1xuLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9hbGx5LmpzXG4vLyBMaWNlbnNlOiBNSVRcbi8vIENvcHlyaWdodCAoYykgMjAxNSBSb2RuZXkgUmVobVxuLy9cbi8vIEVudHJ5cG9pbnQ6IGFsbHkuanMvbWFpbnRhaW4vdGFiLWZvY3VzXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9kZWZhdWx0O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9wbGF0Zm9ybSA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9wbGF0Zm9ybVwiKSk7XG5jb25zdCBfY3NzZXNjYXBlID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy5lc2NhcGVcIikpO1xuLy8gaW5wdXQgbWF5IGJlIHVuZGVmaW5lZCwgc2VsZWN0b3ItdHJpbmcsIE5vZGUsIE5vZGVMaXN0LCBIVE1MQ29sbGVjdGlvbiwgYXJyYXkgb2YgTm9kZXNcbi8vIHllcywgdG8gc29tZSBleHRlbnQgdGhpcyBpcyBhIGJhZCByZXBsaWNhIG9mIGpRdWVyeSdzIGNvbnN0cnVjdG9yIGZ1bmN0aW9uXG5mdW5jdGlvbiBub2RlQXJyYXkoaW5wdXQpIHtcbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgLy8gaW5zdGFuY2VvZiBOb2RlIC0gZG9lcyBub3Qgd29yayB3aXRoIGlmcmFtZXNcbiAgICBpZiAoaW5wdXQubm9kZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoaW5wdXQpO1xuICAgIH1cbiAgICBpZiAoaW5wdXQubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtdLnNsaWNlLmNhbGwoaW5wdXQsIDApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5leHBlY3RlZCBpbnB1dCBcIiArIFN0cmluZyhpbnB1dCkpO1xufVxuZnVuY3Rpb24gY29udGV4dFRvRWxlbWVudChfcmVmKSB7XG4gICAgdmFyIGNvbnRleHQgPSBfcmVmLmNvbnRleHQsIF9yZWYkbGFiZWwgPSBfcmVmLmxhYmVsLCBsYWJlbCA9IF9yZWYkbGFiZWwgPT09IHVuZGVmaW5lZCA/IFwiY29udGV4dC10by1lbGVtZW50XCIgOiBfcmVmJGxhYmVsLCByZXNvbHZlRG9jdW1lbnQgPSBfcmVmLnJlc29sdmVEb2N1bWVudCwgZGVmYXVsdFRvRG9jdW1lbnQgPSBfcmVmLmRlZmF1bHRUb0RvY3VtZW50O1xuICAgIHZhciBlbGVtZW50ID0gbm9kZUFycmF5KGNvbnRleHQpWzBdO1xuICAgIGlmIChyZXNvbHZlRG9jdW1lbnQgJiYgZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cbiAgICBpZiAoIWVsZW1lbnQgJiYgZGVmYXVsdFRvRG9jdW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICB9XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IobGFiZWwgKyBcIiByZXF1aXJlcyB2YWxpZCBvcHRpb25zLmNvbnRleHRcIik7XG4gICAgfVxuICAgIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihsYWJlbCArIFwiIHJlcXVpcmVzIG9wdGlvbnMuY29udGV4dCB0byBiZSBhbiBFbGVtZW50XCIpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudDtcbn1cbmZ1bmN0aW9uIGdldFNoYWRvd0hvc3QoKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBjb250ZXh0ID0gX3JlZi5jb250ZXh0O1xuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcImdldC9zaGFkb3ctaG9zdFwiLFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfSk7XG4gICAgLy8gd2FsayB1cCB0byB0aGUgcm9vdFxuICAgIHZhciBjb250YWluZXIgPSBudWxsO1xuICAgIHdoaWxlKGVsZW1lbnQpe1xuICAgICAgICBjb250YWluZXIgPSBlbGVtZW50O1xuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgIH1cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvTm9kZS5ub2RlVHlwZVxuICAgIC8vIE5PVEU6IEZpcmVmb3ggMzQgZG9lcyBub3QgZXhwb3NlIFNoYWRvd1Jvb3QuaG9zdCAoYnV0IDM3IGRvZXMpXG4gICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gY29udGFpbmVyLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgJiYgY29udGFpbmVyLmhvc3QpIHtcbiAgICAgICAgLy8gdGhlIHJvb3QgaXMgYXR0YWNoZWQgdG8gYSBmcmFnbWVudCBub2RlIHRoYXQgaGFzIGEgaG9zdFxuICAgICAgICByZXR1cm4gY29udGFpbmVyLmhvc3Q7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0RG9jdW1lbnQobm9kZSkge1xuICAgIGlmICghbm9kZSkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgfVxuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG59XG5mdW5jdGlvbiBpc0FjdGl2ZUVsZW1lbnQoY29udGV4dCkge1xuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcImlzL2FjdGl2ZS1lbGVtZW50XCIsXG4gICAgICAgIHJlc29sdmVEb2N1bWVudDogdHJ1ZSxcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgIH0pO1xuICAgIHZhciBfZG9jdW1lbnQgPSBnZXREb2N1bWVudChlbGVtZW50KTtcbiAgICBpZiAoX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBzaGFkb3dIb3N0ID0gZ2V0U2hhZG93SG9zdCh7XG4gICAgICAgIGNvbnRleHQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgICBpZiAoc2hhZG93SG9zdCAmJiBzaGFkb3dIb3N0LnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLy8gW2VsZW0sIGVsZW0ucGFyZW50LCBlbGVtLnBhcmVudC5wYXJlbnQsIOKApiwgaHRtbF1cbi8vIHdpbGwgbm90IGNvbnRhaW4gdGhlIHNoYWRvd1Jvb3QgKERPQ1VNRU5UX0ZSQUdNRU5UX05PREUpIGFuZCBzaGFkb3dIb3N0XG5mdW5jdGlvbiBnZXRQYXJlbnRzKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSwgY29udGV4dCA9IF9yZWYuY29udGV4dDtcbiAgICB2YXIgbGlzdCA9IFtdO1xuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcImdldC9wYXJlbnRzXCIsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICB9KTtcbiAgICB3aGlsZShlbGVtZW50KXtcbiAgICAgICAgbGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAvLyBJRSBkb2VzIGtub3cgc3VwcG9ydCBwYXJlbnRFbGVtZW50IG9uIFNWR0VsZW1lbnRcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xufVxuLy8gRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyBtYXkgYmUgYXZhaWxhYmxlIGF0IGEgZGlmZmVyZW50IG5hbWVcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS9FbGVtZW50L21hdGNoZXNcbnZhciBuYW1lcyA9IFtcbiAgICBcIm1hdGNoZXNcIixcbiAgICBcIndlYmtpdE1hdGNoZXNTZWxlY3RvclwiLFxuICAgIFwibW96TWF0Y2hlc1NlbGVjdG9yXCIsXG4gICAgXCJtc01hdGNoZXNTZWxlY3RvclwiXG5dO1xudmFyIG5hbWUgPSBudWxsO1xuZnVuY3Rpb24gZmluZE1ldGhvZE5hbWUoZWxlbWVudCkge1xuICAgIG5hbWVzLnNvbWUoZnVuY3Rpb24oX25hbWUpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50W19uYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIG5hbWUgPSBfbmFtZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlcyhlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgICBmaW5kTWV0aG9kTmFtZShlbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRbbmFtZV0oc2VsZWN0b3IpO1xufVxuLy8gZGVlcCBjbG9uZSBvZiBvcmlnaW5hbCBwbGF0Zm9ybVxudmFyIHBsYXRmb3JtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShfcGxhdGZvcm0uZGVmYXVsdCkpO1xuLy8gb3BlcmF0aW5nIHN5c3RlbVxudmFyIG9zID0gcGxhdGZvcm0ub3MuZmFtaWx5IHx8IFwiXCI7XG52YXIgQU5EUk9JRCA9IG9zID09PSBcIkFuZHJvaWRcIjtcbnZhciBXSU5ET1dTID0gb3Muc2xpY2UoMCwgNykgPT09IFwiV2luZG93c1wiO1xudmFyIE9TWCA9IG9zID09PSBcIk9TIFhcIjtcbnZhciBJT1MgPSBvcyA9PT0gXCJpT1NcIjtcbi8vIGxheW91dFxudmFyIEJMSU5LID0gcGxhdGZvcm0ubGF5b3V0ID09PSBcIkJsaW5rXCI7XG52YXIgR0VDS08gPSBwbGF0Zm9ybS5sYXlvdXQgPT09IFwiR2Vja29cIjtcbnZhciBUUklERU5UID0gcGxhdGZvcm0ubGF5b3V0ID09PSBcIlRyaWRlbnRcIjtcbnZhciBFREdFID0gcGxhdGZvcm0ubGF5b3V0ID09PSBcIkVkZ2VIVE1MXCI7XG52YXIgV0VCS0lUID0gcGxhdGZvcm0ubGF5b3V0ID09PSBcIldlYktpdFwiO1xuLy8gYnJvd3NlciB2ZXJzaW9uIChub3QgbGF5b3V0IGVuZ2luZSB2ZXJzaW9uISlcbnZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdChwbGF0Zm9ybS52ZXJzaW9uKTtcbnZhciBtYWpvclZlcnNpb24gPSBNYXRoLmZsb29yKHZlcnNpb24pO1xucGxhdGZvcm0ubWFqb3JWZXJzaW9uID0gbWFqb3JWZXJzaW9uO1xucGxhdGZvcm0uaXMgPSB7XG4gICAgLy8gb3BlcmF0aW5nIHN5c3RlbVxuICAgIEFORFJPSUQ6IEFORFJPSUQsXG4gICAgV0lORE9XUzogV0lORE9XUyxcbiAgICBPU1g6IE9TWCxcbiAgICBJT1M6IElPUyxcbiAgICAvLyBsYXlvdXRcbiAgICBCTElOSzogQkxJTkssXG4gICAgR0VDS086IEdFQ0tPLFxuICAgIFRSSURFTlQ6IFRSSURFTlQsXG4gICAgRURHRTogRURHRSxcbiAgICBXRUJLSVQ6IFdFQktJVCxcbiAgICAvLyBJTlRFUk5FVCBFWFBMT1JFUlNcbiAgICBJRTk6IFRSSURFTlQgJiYgbWFqb3JWZXJzaW9uID09PSA5LFxuICAgIElFMTA6IFRSSURFTlQgJiYgbWFqb3JWZXJzaW9uID09PSAxMCxcbiAgICBJRTExOiBUUklERU5UICYmIG1ham9yVmVyc2lvbiA9PT0gMTFcbn07XG5mdW5jdGlvbiBiZWZvcmUoKSB7XG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICAgIC8vIHJlbWVtYmVyIHdoYXQgaGFkIGZvY3VzIHRvIHJlc3RvcmUgYWZ0ZXIgdGVzdFxuICAgICAgICBhY3RpdmVFbGVtZW50OiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LFxuICAgICAgICAvLyByZW1lbWJlciBzY3JvbGwgcG9zaXRpb25zIHRvIHJlc3RvcmUgYWZ0ZXIgdGVzdFxuICAgICAgICB3aW5kb3dTY3JvbGxUb3A6IHdpbmRvdy5zY3JvbGxUb3AsXG4gICAgICAgIHdpbmRvd1Njcm9sbExlZnQ6IHdpbmRvdy5zY3JvbGxMZWZ0LFxuICAgICAgICBib2R5U2Nyb2xsVG9wOiBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCxcbiAgICAgICAgYm9keVNjcm9sbExlZnQ6IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdFxuICAgIH07XG4gICAgLy8gd3JhcCB0ZXN0cyBpbiBhbiBlbGVtZW50IGhpZGRlbiBmcm9tIHNjcmVlbiByZWFkZXJzIHRvIHByZXZlbnQgdGhlbVxuICAgIC8vIGZyb20gYW5ub3VuY2luZyBmb2N1cywgd2hpY2ggY2FuIGJlIHF1aXRlIGlycml0YXRpbmcgdG8gdGhlIHVzZXJcbiAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICBpZnJhbWUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJwb3NpdGlvbjphYnNvbHV0ZTsgcG9zaXRpb246Zml4ZWQ7IHRvcDowOyBsZWZ0Oi0ycHg7IHdpZHRoOjFweDsgaGVpZ2h0OjFweDsgb3ZlcmZsb3c6aGlkZGVuO1wiKTtcbiAgICBpZnJhbWUuc2V0QXR0cmlidXRlKFwiYXJpYS1saXZlXCIsIFwib2ZmXCIpO1xuICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWJ1c3lcIiwgXCJ0cnVlXCIpO1xuICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAgIHZhciBfd2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7XG4gICAgdmFyIF9kb2N1bWVudCA9IF93aW5kb3cuZG9jdW1lbnQ7XG4gICAgX2RvY3VtZW50Lm9wZW4oKTtcbiAgICBfZG9jdW1lbnQuY2xvc2UoKTtcbiAgICB2YXIgd3JhcHBlciA9IF9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIF9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHdyYXBwZXIpO1xuICAgIGRhdGEuaWZyYW1lID0gaWZyYW1lO1xuICAgIGRhdGEud3JhcHBlciA9IHdyYXBwZXI7XG4gICAgZGF0YS53aW5kb3cgPSBfd2luZG93O1xuICAgIGRhdGEuZG9jdW1lbnQgPSBfZG9jdW1lbnQ7XG4gICAgcmV0dXJuIGRhdGE7XG59XG4vLyBvcHRpb25zLmVsZW1lbnQ6XG4vLyAge3N0cmluZ30gZWxlbWVudCBuYW1lXG4vLyAge2Z1bmN0aW9ufSBjYWxsYmFjayh3cmFwcGVyLCBkb2N1bWVudCkgdG8gZ2VuZXJhdGUgYW4gZWxlbWVudFxuLy8gb3B0aW9ucy5tdXRhdGU6IChvcHRpb25hbClcbi8vICB7ZnVuY3Rpb259IGNhbGxiYWNrKGVsZW1lbnQsIHdyYXBwZXIsIGRvY3VtZW50KSB0byBtYW5pcHVsYXRlIGVsZW1lbnQgcHJpb3IgdG8gZm9jdXMtdGVzdC5cbi8vICAgICAgICAgICAgIENhbiByZXR1cm4gRE9NRWxlbWVudCB0byBkZWZpbmUgZm9jdXMgdGFyZ2V0IChkZWZhdWx0OiBlbGVtZW50KVxuLy8gb3B0aW9ucy52YWxpZGF0ZTogKG9wdGlvbmFsKVxuLy8gIHtmdW5jdGlvbn0gY2FsbGJhY2soZWxlbWVudCwgZm9jdXNUYXJnZXQsIGRvY3VtZW50KSB0byBtYW5pcHVsYXRlIHRlc3QtcmVzdWx0XG5mdW5jdGlvbiB0ZXN0KGRhdGEsIG9wdGlvbnMpIHtcbiAgICAvLyBtYWtlIHN1cmUgd2Ugb3BlcmF0ZSBvbiBhIGNsZWFuIHNsYXRlXG4gICAgZGF0YS53cmFwcGVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgLy8gY3JlYXRlIGR1bW15IGVsZW1lbnQgdG8gdGVzdCBmb2N1c2FiaWxpdHkgb2ZcbiAgICB2YXIgZWxlbWVudCA9IHR5cGVvZiBvcHRpb25zLmVsZW1lbnQgPT09IFwic3RyaW5nXCIgPyBkYXRhLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQob3B0aW9ucy5lbGVtZW50KSA6IG9wdGlvbnMuZWxlbWVudChkYXRhLndyYXBwZXIsIGRhdGEuZG9jdW1lbnQpO1xuICAgIC8vIGFsbG93IGNhbGxiYWNrIHRvIGZ1cnRoZXIgc3BlY2lmeSBkdW1teSBlbGVtZW50XG4gICAgLy8gYW5kIG9wdGlvbmFsbHkgZGVmaW5lIGVsZW1lbnQgdG8gZm9jdXNcbiAgICB2YXIgZm9jdXMgPSBvcHRpb25zLm11dGF0ZSAmJiBvcHRpb25zLm11dGF0ZShlbGVtZW50LCBkYXRhLndyYXBwZXIsIGRhdGEuZG9jdW1lbnQpO1xuICAgIGlmICghZm9jdXMgJiYgZm9jdXMgIT09IGZhbHNlKSB7XG4gICAgICAgIGZvY3VzID0gZWxlbWVudDtcbiAgICB9XG4gICAgLy8gZWxlbWVudCBuZWVkcyB0byBiZSBwYXJ0IG9mIHRoZSBET00gdG8gYmUgZm9jdXNhYmxlXG4gICAgIWVsZW1lbnQucGFyZW50Tm9kZSAmJiBkYXRhLndyYXBwZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgLy8gdGVzdCBpZiB0aGUgZWxlbWVudCB3aXRoIGludmFsaWQgdGFiaW5kZXggY2FuIGJlIGZvY3VzZWRcbiAgICBmb2N1cyAmJiBmb2N1cy5mb2N1cyAmJiBmb2N1cy5mb2N1cygpO1xuICAgIC8vIHZhbGlkYXRlIHRlc3QncyByZXN1bHRcbiAgICByZXR1cm4gb3B0aW9ucy52YWxpZGF0ZSA/IG9wdGlvbnMudmFsaWRhdGUoZWxlbWVudCwgZm9jdXMsIGRhdGEuZG9jdW1lbnQpIDogZGF0YS5kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmb2N1cztcbn1cbmZ1bmN0aW9uIGFmdGVyKGRhdGEpIHtcbiAgICAvLyByZXN0b3JlIGZvY3VzIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB0ZXN0IGFuZCBjbGVhbnVwXG4gICAgaWYgKGRhdGEuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1ciAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgaWYgKHBsYXRmb3JtLmlzLklFMTApIHtcbiAgICAgICAgICAgIC8vIElFMTAgZG9lcyBub3QgcmVkaXJlY3QgZm9jdXMgdG8gPGJvZHk+IHdoZW4gdGhlIGFjdGl2ZUVsZW1lbnQgaXMgcmVtb3ZlZFxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5hY3RpdmVFbGVtZW50ICYmIGRhdGEuYWN0aXZlRWxlbWVudC5mb2N1cyAmJiBkYXRhLmFjdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkYXRhLmlmcmFtZSk7XG4gICAgLy8gcmVzdG9yZSBzY3JvbGwgcG9zaXRpb25cbiAgICB3aW5kb3cuc2Nyb2xsVG9wID0gZGF0YS53aW5kb3dTY3JvbGxUb3A7XG4gICAgd2luZG93LnNjcm9sbExlZnQgPSBkYXRhLndpbmRvd1Njcm9sbExlZnQ7XG4gICAgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgPSBkYXRhLmJvZHlTY3JvbGxUb3A7XG4gICAgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0ID0gZGF0YS5ib2R5U2Nyb2xsTGVmdDtcbn1cbmZ1bmN0aW9uIGRldGVjdEZvY3VzKHRlc3RzKSB7XG4gICAgdmFyIGRhdGEgPSBiZWZvcmUoKTtcbiAgICB2YXIgcmVzdWx0cyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHRlc3RzKS5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIHJlc3VsdHNba2V5XSA9IHRlc3QoZGF0YSwgdGVzdHNba2V5XSk7XG4gICAgfSk7XG4gICAgYWZ0ZXIoZGF0YSk7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG4vLyB0aGlzIGZpbGUgaXMgb3ZlcndyaXR0ZW4gYnkgYG5wbSBydW4gYnVpbGQ6cHJlYFxudmFyIHZlcnNpb24kMSA9IFwiMS40LjFcIjtcbi8qXG4gICAgRmFjaWxpdHkgdG8gY2FjaGUgdGVzdCByZXN1bHRzIGluIGxvY2FsU3RvcmFnZS5cblxuICAgIFVTQUdFOlxuICAgICAgY2FjaGUuZ2V0KCdrZXknKTtcbiAgICAgIGNhY2hlLnNldCgna2V5JywgJ3ZhbHVlJyk7XG4gKi8gZnVuY3Rpb24gcmVhZExvY2FsU3RvcmFnZShrZXkpIHtcbiAgICAvLyBhbGxvdyByZWFkaW5nIGZyb20gc3RvcmFnZSB0byByZXRyaWV2ZSBwcmV2aW91cyBzdXBwb3J0IHJlc3VsdHNcbiAgICAvLyBldmVuIHdoaWxlIHRoZSBkb2N1bWVudCBkb2VzIG5vdCBoYXZlIGZvY3VzXG4gICAgdmFyIGRhdGEgPSB2b2lkIDA7XG4gICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UgJiYgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICAgIGRhdGEgPSBkYXRhID8gSlNPTi5wYXJzZShkYXRhKSA6IHt9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGF0YSA9IHt9O1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIHdyaXRlTG9jYWxTdG9yYWdlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoIWRvY3VtZW50Lmhhc0ZvY3VzKCkpIHtcbiAgICAgICAgLy8gaWYgdGhlIGRvY3VtZW50IGRvZXMgbm90IGhhdmUgZm9jdXMgd2hlbiB0ZXN0cyBhcmUgZXhlY3V0ZWQsIGZvY3VzKCkgbWF5XG4gICAgICAgIC8vIG5vdCBiZSBoYW5kbGVkIHByb3Blcmx5IGFuZCBldmVudHMgbWF5IG5vdCBiZSBkaXNwYXRjaGVkIGltbWVkaWF0ZWx5LlxuICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGRvY3VtZW50IGlzIHJlbG9hZGVkIHdoaWxlIERldmVsb3BlciBUb29scyBoYXZlIGZvY3VzLlxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZSAmJiB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UgJiYgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgLy8gaWdub3JlXG4gICAgfVxufVxudmFyIHVzZXJBZ2VudCA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQgfHwgXCJcIjtcbnZhciBjYWNoZUtleSA9IFwiYWxseS1zdXBwb3J0cy1jYWNoZVwiO1xudmFyIGNhY2hlID0gcmVhZExvY2FsU3RvcmFnZShjYWNoZUtleSk7XG4vLyB1cGRhdGUgdGhlIGNhY2hlIGlmIGFsbHkgb3IgdGhlIHVzZXIgYWdlbnQgY2hhbmdlZCAobmV3ZXIgdmVyc2lvbiwgZXRjKVxuaWYgKGNhY2hlLnVzZXJBZ2VudCAhPT0gdXNlckFnZW50IHx8IGNhY2hlLnZlcnNpb24gIT09IHZlcnNpb24kMSkge1xuICAgIGNhY2hlID0ge307XG59XG5jYWNoZS51c2VyQWdlbnQgPSB1c2VyQWdlbnQ7XG5jYWNoZS52ZXJzaW9uID0gdmVyc2lvbiQxO1xudmFyIGNhY2hlJDEgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBjYWNoZTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlcykge1xuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZXMpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICBjYWNoZVtrZXldID0gdmFsdWVzW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgICBjYWNoZS50aW1lID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICB3cml0ZUxvY2FsU3RvcmFnZShjYWNoZUtleSwgY2FjaGUpO1xuICAgIH1cbn07XG5mdW5jdGlvbiBjc3NTaGFkb3dQaWVyY2luZ0RlZXBDb21iaW5hdG9yKCkge1xuICAgIHZhciBjb21iaW5hdG9yID0gdm9pZCAwO1xuICAgIC8vIHNlZSBodHRwczovL2Rldi53My5vcmcvY3Nzd2cvY3NzLXNjb3BpbmctMS8jZGVlcC1jb21iaW5hdG9yXG4gICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTExNzU3MlxuICAgIC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDYwNTFcbiAgICB0cnkge1xuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbCA+Pj4gOmZpcnN0LWNoaWxkXCIpO1xuICAgICAgICBjb21iaW5hdG9yID0gXCI+Pj5cIjtcbiAgICB9IGNhdGNoIChub0Fycm93QXJyb3dBcnJvdykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gb2xkIHN5bnRheCBzdXBwb3J0ZWQgYXQgbGVhc3QgdXAgdG8gQ2hyb21lIDQxXG4gICAgICAgICAgICAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ2MDUxXG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbCAvZGVlcC8gOmZpcnN0LWNoaWxkXCIpO1xuICAgICAgICAgICAgY29tYmluYXRvciA9IFwiL2RlZXAvXCI7XG4gICAgICAgIH0gY2F0Y2ggKG5vRGVlcCkge1xuICAgICAgICAgICAgY29tYmluYXRvciA9IFwiXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbWJpbmF0b3I7XG59XG52YXIgZ2lmID0gXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3lINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQlJBQTdcIjtcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbWcjYXR0ci11c2VtYXBcbnZhciBmb2N1c0FyZWFJbWdUYWJpbmRleCA9IHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPG1hcCBuYW1lPVwiaW1hZ2UtbWFwLXRhYmluZGV4LXRlc3RcIj4nICsgJzxhcmVhIHNoYXBlPVwicmVjdFwiIGNvb3Jkcz1cIjYzLDE5LDE0NCw0NVwiPjwvbWFwPicgKyAnPGltZyB1c2VtYXA9XCIjaW1hZ2UtbWFwLXRhYmluZGV4LXRlc3RcIiB0YWJpbmRleD1cIi0xXCIgYWx0PVwiXCIgc3JjPVwiJyArIGdpZiArICdcIj4nO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiYXJlYVwiKTtcbiAgICB9XG59O1xuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2ltZyNhdHRyLXVzZW1hcFxudmFyIGZvY3VzQXJlYVRhYmluZGV4ID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICc8bWFwIG5hbWU9XCJpbWFnZS1tYXAtdGFiaW5kZXgtdGVzdFwiPicgKyAnPGFyZWEgaHJlZj1cIiN2b2lkXCIgdGFiaW5kZXg9XCItMVwiIHNoYXBlPVwicmVjdFwiIGNvb3Jkcz1cIjYzLDE5LDE0NCw0NVwiPjwvbWFwPicgKyAnPGltZyB1c2VtYXA9XCIjaW1hZ2UtbWFwLXRhYmluZGV4LXRlc3RcIiBhbHQ9XCJcIiBzcmM9XCInICsgZ2lmICsgJ1wiPic7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZShlbGVtZW50LCBmb2N1c1RhcmdldCwgX2RvY3VtZW50KSB7XG4gICAgICAgIGlmIChwbGF0Zm9ybS5pcy5HRUNLTykge1xuICAgICAgICAgICAgLy8gZml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9hbGx5LmpzL2lzc3Vlcy8zNVxuICAgICAgICAgICAgLy8gRmlyZWZveCBsb2FkcyB0aGUgRGF0YVVSSSBhc3luY2hyb25vdXNseSwgY2F1c2luZyBhIGZhbHNlLW5lZ2F0aXZlXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZm9jdXMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJhcmVhXCIpO1xuICAgICAgICBmb2N1cy5mb2N1cygpO1xuICAgICAgICByZXR1cm4gX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGZvY3VzO1xuICAgIH1cbn07XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW1nI2F0dHItdXNlbWFwXG52YXIgZm9jdXNBcmVhV2l0aG91dEhyZWYgPSB7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxtYXAgbmFtZT1cImltYWdlLW1hcC1hcmVhLWhyZWYtdGVzdFwiPicgKyAnPGFyZWEgc2hhcGU9XCJyZWN0XCIgY29vcmRzPVwiNjMsMTksMTQ0LDQ1XCI+PC9tYXA+JyArICc8aW1nIHVzZW1hcD1cIiNpbWFnZS1tYXAtYXJlYS1ocmVmLXRlc3RcIiBhbHQ9XCJcIiBzcmM9XCInICsgZ2lmICsgJ1wiPic7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJhcmVhXCIpO1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlKGVsZW1lbnQsIGZvY3VzVGFyZ2V0LCBfZG9jdW1lbnQpIHtcbiAgICAgICAgaWYgKHBsYXRmb3JtLmlzLkdFQ0tPKSB7XG4gICAgICAgICAgICAvLyBmaXhlcyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzM1XG4gICAgICAgICAgICAvLyBGaXJlZm94IGxvYWRzIHRoZSBEYXRhVVJJIGFzeW5jaHJvbm91c2x5LCBjYXVzaW5nIGEgZmFsc2UtbmVnYXRpdmVcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZm9jdXNUYXJnZXQ7XG4gICAgfVxufTtcbnZhciBmb2N1c0F1ZGlvV2l0aG91dENvbnRyb2xzID0ge1xuICAgIG5hbWU6IFwiY2FuLWZvY3VzLWF1ZGlvLXdpdGhvdXQtY29udHJvbHNcIixcbiAgICBlbGVtZW50OiBcImF1ZGlvXCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gaW52YWxpZCBtZWRpYSBmaWxlIGNhbiB0cmlnZ2VyIHdhcm5pbmcgaW4gY29uc29sZSwgZGF0YS11cmkgdG8gcHJldmVudCBIVFRQIHJlcXVlc3RcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3JjXCIsIGdpZik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gSUU5IG1heSB0aHJvdyBcIkVycm9yOiBOb3QgaW1wbGVtZW50ZWRcIlxuICAgICAgICB9XG4gICAgfVxufTtcbnZhciBpbnZhbGlkR2lmID0gXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL1paWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpcIjtcbi8vIE5PVEU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvMzVcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbWcjYXR0ci11c2VtYXBcbnZhciBmb2N1c0Jyb2tlbkltYWdlTWFwID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICc8bWFwIG5hbWU9XCJicm9rZW4taW1hZ2UtbWFwLXRlc3RcIj48YXJlYSBocmVmPVwiI3ZvaWRcIiBzaGFwZT1cInJlY3RcIiBjb29yZHM9XCI2MywxOSwxNDQsNDVcIj48L21hcD4nICsgJzxpbWcgdXNlbWFwPVwiI2Jyb2tlbi1pbWFnZS1tYXAtdGVzdFwiIGFsdD1cIlwiIHNyYz1cIicgKyBpbnZhbGlkR2lmICsgJ1wiPic7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJhcmVhXCIpO1xuICAgIH1cbn07XG4vLyBDaGlsZHJlbiBvZiBmb2N1c2FibGUgZWxlbWVudHMgd2l0aCBkaXNwbGF5OmZsZXggYXJlIGZvY3VzYWJsZSBpbiBJRTEwLTExXG52YXIgZm9jdXNDaGlsZHJlbk9mRm9jdXNhYmxlRmxleGJveCA9IHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiZGlzcGxheTogLXdlYmtpdC1mbGV4OyBkaXNwbGF5OiAtbXMtZmxleGJveDsgZGlzcGxheTogZmxleDtcIik7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxzcGFuIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XCI+aGVsbG88L3NwYW4+JztcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihcInNwYW5cIik7XG4gICAgfVxufTtcbi8vIGZpZWxkc2V0W3RhYmluZGV4PTBdW2Rpc2FibGVkXSBzaG91bGQgbm90IGJlIGZvY3VzYWJsZSwgYnV0IEJsaW5rIGFuZCBXZWJLaXQgZGlzYWdyZWVcbi8vIEBzcGVjaWZpY2F0aW9uIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9kaXNhYmxlZC1lbGVtZW50cy5odG1sI2NvbmNlcHQtZWxlbWVudC1kaXNhYmxlZFxuLy8gQGJyb3dzZXItaXNzdWUgQ2hyb21pdW0gaHR0cHM6Ly9jcmJ1Zy5jb20vNDUzODQ3XG4vLyBAYnJvd3Nlci1pc3N1ZSBXZWJLaXQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTA4NlxudmFyIGZvY3VzRmllbGRzZXREaXNhYmxlZCA9IHtcbiAgICBlbGVtZW50OiBcImZpZWxkc2V0XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIDApO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgfVxufTtcbnZhciBmb2N1c0ZpZWxkc2V0ID0ge1xuICAgIGVsZW1lbnQ6IFwiZmllbGRzZXRcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gXCI8bGVnZW5kPmxlZ2VuZDwvbGVnZW5kPjxwPmNvbnRlbnQ8L3A+XCI7XG4gICAgfVxufTtcbi8vIGVsZW1lbnRzIHdpdGggZGlzcGxheTpmbGV4IGFyZSBmb2N1c2FibGUgaW4gSUUxMC0xMVxudmFyIGZvY3VzRmxleGJveENvbnRhaW5lciA9IHtcbiAgICBlbGVtZW50OiBcInNwYW5cIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJkaXNwbGF5OiAtd2Via2l0LWZsZXg7IGRpc3BsYXk6IC1tcy1mbGV4Ym94OyBkaXNwbGF5OiBmbGV4O1wiKTtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPHNwYW4gc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIj5oZWxsbzwvc3Bhbj4nO1xuICAgIH1cbn07XG4vLyBmb3JtW3RhYmluZGV4PTBdW2Rpc2FibGVkXSBzaG91bGQgYmUgZm9jdXNhYmxlIGFzIHRoZVxuLy8gc3BlY2lmaWNhdGlvbiBkb2Vzbid0IGtub3cgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSBvbiB0aGUgZm9ybSBlbGVtZW50XG4vLyBAc3BlY2lmaWNhdGlvbiBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZm9ybXMuaHRtbCN0aGUtZm9ybS1lbGVtZW50XG52YXIgZm9jdXNGb3JtRGlzYWJsZWQgPSB7XG4gICAgZWxlbWVudDogXCJmb3JtXCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIDApO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgfVxufTtcbi8vIE5PVEU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvMzVcbi8vIGZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvMjBcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbWcjYXR0ci1pc21hcFxudmFyIGZvY3VzSW1nSXNtYXAgPSB7XG4gICAgZWxlbWVudDogXCJhXCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmhyZWYgPSBcIiN2b2lkXCI7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxpbWcgaXNtYXAgc3JjPVwiJyArIGdpZiArICdcIiBhbHQ9XCJcIj4nO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiaW1nXCIpO1xuICAgIH1cbn07XG4vLyBOT1RFOiBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzM1XG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW1nI2F0dHItdXNlbWFwXG52YXIgZm9jdXNJbWdVc2VtYXBUYWJpbmRleCA9IHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPG1hcCBuYW1lPVwiaW1hZ2UtbWFwLXRhYmluZGV4LXRlc3RcIj48YXJlYSBocmVmPVwiI3ZvaWRcIiBzaGFwZT1cInJlY3RcIiBjb29yZHM9XCI2MywxOSwxNDQsNDVcIj48L21hcD4nICsgJzxpbWcgdXNlbWFwPVwiI2ltYWdlLW1hcC10YWJpbmRleC10ZXN0XCIgdGFiaW5kZXg9XCItMVwiIGFsdD1cIlwiICcgKyAnc3JjPVwiJyArIGdpZiArICdcIj4nO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiaW1nXCIpO1xuICAgIH1cbn07XG52YXIgZm9jdXNJbkhpZGRlbklmcmFtZSA9IHtcbiAgICBlbGVtZW50OiBmdW5jdGlvbiBlbGVtZW50KHdyYXBwZXIsIF9kb2N1bWVudCkge1xuICAgICAgICB2YXIgaWZyYW1lID0gX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICAgIC8vIGlmcmFtZSBtdXN0IGJlIHBhcnQgb2YgdGhlIERPTSBiZWZvcmUgYWNjZXNzaW5nIHRoZSBjb250ZW50V2luZG93IGlzIHBvc3NpYmxlXG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgICAgICAgLy8gY3JlYXRlIHRoZSBpZnJhbWUncyBkZWZhdWx0IGRvY3VtZW50ICg8aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4pXG4gICAgICAgIHZhciBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICAgICAgICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gICAgICAgIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gICAgICAgIHJldHVybiBpZnJhbWU7XG4gICAgfSxcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShpZnJhbWUpIHtcbiAgICAgICAgaWZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICB2YXIgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgICAgICAgdmFyIGlucHV0ID0gaWZyYW1lRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgICBpZnJhbWVEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlucHV0KTtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlKGlmcmFtZSkge1xuICAgICAgICB2YXIgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgICAgICAgdmFyIGZvY3VzID0gaWZyYW1lRG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgICAgICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZm9jdXM7XG4gICAgfVxufTtcbnZhciByZXN1bHQgPSAhcGxhdGZvcm0uaXMuV0VCS0lUO1xuZnVuY3Rpb24gZm9jdXNJblplcm9EaW1lbnNpb25PYmplY3QoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIEZpcmVmb3ggYWxsb3dzICphbnkqIHZhbHVlIGFuZCB0cmVhdHMgaW52YWxpZCB2YWx1ZXMgbGlrZSB0YWJpbmRleD1cIi0xXCJcbi8vIEBicm93c2VyLWlzc3VlIEdlY2tvIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTExMjgwNTRcbnZhciBmb2N1c0ludmFsaWRUYWJpbmRleCA9IHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCBcImludmFsaWQtdmFsdWVcIik7XG4gICAgfVxufTtcbnZhciBmb2N1c0xhYmVsVGFiaW5kZXggPSB7XG4gICAgZWxlbWVudDogXCJsYWJlbFwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlKGVsZW1lbnQsIGZvY3VzVGFyZ2V0LCBfZG9jdW1lbnQpIHtcbiAgICAgICAgLy8gZm9yY2UgbGF5b3V0IGluIENocm9tZSA0OSwgb3RoZXJ3aXNlIHRoZSBlbGVtZW50IHdvbid0IGJlIGZvY3VzYWJsZVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqLyB2YXIgdmFyaWFibGVUb1ByZXZlbnREZWFkQ29kZUVsaW1pbmF0aW9uID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi8gZWxlbWVudC5mb2N1cygpO1xuICAgICAgICByZXR1cm4gX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVsZW1lbnQ7XG4gICAgfVxufTtcbnZhciBzdmcgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIaHRiXCIgKyBcIkc1ek9uaHNhVzVyUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMM2hzYVc1cklpQnBaRDBpYzNabklqNDhkR1Y0ZENCNFBTSXhNQ0lnZVQwaU1qQWlJR2xrUFNKXCIgKyBcInpkbWN0YkdsdWF5MTBaWGgwSWo1MFpYaDBQQzkwWlhoMFBqd3ZjM1puUGc9PVwiO1xuLy8gTm90ZTogSUUxMCBvbiBCcm93c2VyU3RhY2sgZG9lcyBub3QgbGlrZSB0aGlzIHRlc3RcbnZhciBmb2N1c09iamVjdFN2Z0hpZGRlbiA9IHtcbiAgICBlbGVtZW50OiBcIm9iamVjdFwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiaW1hZ2Uvc3ZnK3htbFwiKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhXCIsIHN2Zyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCIyMDBcIik7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaGVpZ2h0XCIsIFwiNTBcIik7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgfVxufTtcbi8vIE5vdGU6IElFMTAgb24gQnJvd3NlclN0YWNrIGRvZXMgbm90IGxpa2UgdGhpcyB0ZXN0XG52YXIgZm9jdXNPYmplY3RTdmcgPSB7XG4gICAgbmFtZTogXCJjYW4tZm9jdXMtb2JqZWN0LXN2Z1wiLFxuICAgIGVsZW1lbnQ6IFwib2JqZWN0XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJpbWFnZS9zdmcreG1sXCIpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGFcIiwgc3ZnKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCBcIjIwMFwiKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgXCI1MFwiKTtcbiAgICB9LFxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZShlbGVtZW50LCBmb2N1c1RhcmdldCwgX2RvY3VtZW50KSB7XG4gICAgICAgIGlmIChwbGF0Zm9ybS5pcy5HRUNLTykge1xuICAgICAgICAgICAgLy8gRmlyZWZveCBzZWVtcyB0byBiZSBoYW5kbGluZyB0aGUgb2JqZWN0IGNyZWF0aW9uIGFzeW5jaHJvbm91c2x5IGFuZCB0aGVyZWJ5IHByb2R1Y2VzIGEgZmFsc2UgbmVnYXRpdmUgdGVzdCByZXN1bHQuXG4gICAgICAgICAgICAvLyBCZWNhdXNlIHdlIGtub3cgRmlyZWZveCBpcyBhYmxlIHRvIGZvY3VzIG9iamVjdCBlbGVtZW50cyByZWZlcmVuY2luZyBTVkdzLCB3ZSBzaW1wbHkgY2hlYXQgYnkgc25pZmZpbmcgdGhlIHVzZXIgYWdlbnQgc3RyaW5nXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVsZW1lbnQ7XG4gICAgfVxufTtcbi8vIEV2ZXJ5IEVudmlyb25tZW50IGV4Y2VwdCBJRTkgY29uc2lkZXJzIFNXRiBvYmplY3RzIGZvY3VzYWJsZVxudmFyIHJlc3VsdCQxID0gIXBsYXRmb3JtLmlzLklFOTtcbmZ1bmN0aW9uIGZvY3VzT2JqZWN0U3dmKCkge1xuICAgIHJldHVybiByZXN1bHQkMTtcbn1cbnZhciBmb2N1c1JlZGlyZWN0SW1nVXNlbWFwID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICc8bWFwIG5hbWU9XCJmb2N1cy1yZWRpcmVjdC1pbWctdXNlbWFwXCI+PGFyZWEgaHJlZj1cIiN2b2lkXCIgc2hhcGU9XCJyZWN0XCIgY29vcmRzPVwiNjMsMTksMTQ0LDQ1XCI+PC9tYXA+JyArICc8aW1nIHVzZW1hcD1cIiNmb2N1cy1yZWRpcmVjdC1pbWctdXNlbWFwXCIgYWx0PVwiXCIgJyArICdzcmM9XCInICsgZ2lmICsgJ1wiPic7XG4gICAgICAgIC8vIGZvY3VzIHRoZSA8aW1nPiwgbm90IHRoZSA8ZGl2PlxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiaW1nXCIpO1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlKGVsZW1lbnQsIGZvY3VzVGFyZ2V0LCBfZG9jdW1lbnQpIHtcbiAgICAgICAgdmFyIHRhcmdldCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcImFyZWFcIik7XG4gICAgICAgIHJldHVybiBfZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGFyZ2V0O1xuICAgIH1cbn07XG4vLyBzZWUgaHR0cHM6Ly9qc2Jpbi5jb20vbmVuaXJpc2FnZS9lZGl0P2h0bWwsanMsY29uc29sZSxvdXRwdXRcbnZhciBmb2N1c1JlZGlyZWN0TGVnZW5kID0ge1xuICAgIGVsZW1lbnQ6IFwiZmllbGRzZXRcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxsZWdlbmQ+bGVnZW5kPC9sZWdlbmQ+PGlucHV0IHRhYmluZGV4PVwiLTFcIj48aW5wdXQgdGFiaW5kZXg9XCIwXCI+JztcbiAgICAgICAgLy8gdGFrZSBjYXJlIG9mIGZvY3VzIGluIHZhbGlkYXRlKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZShlbGVtZW50LCBmb2N1c1RhcmdldCwgX2RvY3VtZW50KSB7XG4gICAgICAgIHZhciBmb2N1c2FibGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3RhYmluZGV4PVwiLTFcIl0nKTtcbiAgICAgICAgdmFyIHRhYmJhYmxlID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0YWJpbmRleD1cIjBcIl0nKTtcbiAgICAgICAgLy8gRmlyZWZveCByZXF1aXJlcyB0aGlzIHRlc3QgdG8gZm9jdXMgdGhlIDxmaWVsZHNldD4gZmlyc3QsIHdoaWxlIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBpblxuICAgICAgICAvLyBodHRwczovL2pzYmluLmNvbS9uZW5pcmlzYWdlL2VkaXQ/aHRtbCxqcyxjb25zb2xlLG91dHB1dFxuICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGVsZW1lbnQucXVlcnlTZWxlY3RvcihcImxlZ2VuZFwiKS5mb2N1cygpO1xuICAgICAgICByZXR1cm4gX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGZvY3VzYWJsZSAmJiBcImZvY3VzYWJsZVwiIHx8IF9kb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0YWJiYWJsZSAmJiBcInRhYmJhYmxlXCIgfHwgXCJcIjtcbiAgICB9XG59O1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9hbGx5LmpzL2lzc3Vlcy8yMVxudmFyIGZvY3VzU2Nyb2xsQm9keSA9IHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxvdzogYXV0bztcIik7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJ3aWR0aDogNTAwcHg7IGhlaWdodDogNDBweDtcIj5zY3JvbGxhYmxlIGNvbnRlbnQ8L2Rpdj4nO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiZGl2XCIpO1xuICAgIH1cbn07XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzIxXG52YXIgZm9jdXNTY3JvbGxDb250YWluZXJXaXRob3V0T3ZlcmZsb3cgPSB7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDogMTAwcHg7IGhlaWdodDogNTBweDtcIik7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJ3aWR0aDogNTAwcHg7IGhlaWdodDogNDBweDtcIj5zY3JvbGxhYmxlIGNvbnRlbnQ8L2Rpdj4nO1xuICAgIH1cbn07XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzIxXG52YXIgZm9jdXNTY3JvbGxDb250YWluZXIgPSB7XG4gICAgZWxlbWVudDogXCJkaXZcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDogMTAwcHg7IGhlaWdodDogNTBweDsgb3ZlcmZsb3c6IGF1dG87XCIpO1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPVwid2lkdGg6IDUwMHB4OyBoZWlnaHQ6IDQwcHg7XCI+c2Nyb2xsYWJsZSBjb250ZW50PC9kaXY+JztcbiAgICB9XG59O1xudmFyIGZvY3VzU3VtbWFyeSA9IHtcbiAgICBlbGVtZW50OiBcImRldGFpbHNcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gXCI8c3VtbWFyeT5mb288L3N1bW1hcnk+PHA+Y29udGVudDwvcD5cIjtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfVxufTtcbmZ1bmN0aW9uIG1ha2VGb2N1c2FibGVGb3JlaWduT2JqZWN0KCkge1xuICAgIC8vIENvbnN0cnVjdHMgPGZvcmVpZ25PYmplY3Qgd2lkdGg9XCIzMFwiIGhlaWdodD1cIjMwXCI+PGlucHV0IHR5cGU9XCJ0ZXh0XCIvPjwvZm9yZWlnbk9iamVjdD5cbiAgICAvLyB3aXRob3V0IHJhaXNpbmcgYSBUcnVzdGVkIFR5cGVzIHZpb2xhdGlvblxuICAgIHZhciBmb3JlaWduT2JqZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJmb3JlaWduT2JqZWN0XCIpO1xuICAgIGZvcmVpZ25PYmplY3Qud2lkdGguYmFzZVZhbC52YWx1ZSA9IDMwO1xuICAgIGZvcmVpZ25PYmplY3QuaGVpZ2h0LmJhc2VWYWwudmFsdWUgPSAzMDtcbiAgICBmb3JlaWduT2JqZWN0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKSk7XG4gICAgZm9yZWlnbk9iamVjdC5sYXN0Q2hpbGQudHlwZSA9IFwidGV4dFwiO1xuICAgIHJldHVybiBmb3JlaWduT2JqZWN0O1xufVxuZnVuY3Rpb24gZm9jdXNTdmdGb3JlaWduT2JqZWN0SGFjayhlbGVtZW50KSB7XG4gICAgLy8gRWRnZTEzLCBFZGdlMTQ6IGZvcmVpZ25PYmplY3QgZm9jdXMgaGFja1xuICAgIC8vIGh0dHBzOi8vanNiaW4uY29tL2t1bmVoaW51Z2kvZWRpdD9odG1sLGpzLG91dHB1dFxuICAgIC8vIGh0dHBzOi8vanNiaW4uY29tL2ZhamFnaS8zL2VkaXQ/aHRtbCxqcyxvdXRwdXRcbiAgICB2YXIgaXNTdmdFbGVtZW50ID0gZWxlbWVudC5vd25lclNWR0VsZW1lbnQgfHwgZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInN2Z1wiO1xuICAgIGlmICghaXNTdmdFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gaW5qZWN0IGFuZCBmb2N1cyBhbiA8aW5wdXQ+IGVsZW1lbnQgaW50byB0aGUgU1ZHIGVsZW1lbnQgdG8gcmVjZWl2ZSBmb2N1c1xuICAgIHZhciBmb3JlaWduT2JqZWN0ID0gbWFrZUZvY3VzYWJsZUZvcmVpZ25PYmplY3QoKTtcbiAgICBlbGVtZW50LmFwcGVuZENoaWxkKGZvcmVpZ25PYmplY3QpO1xuICAgIHZhciBpbnB1dCA9IGZvcmVpZ25PYmplY3QucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgIGlucHV0LmZvY3VzKCk7XG4gICAgLy8gdXBvbiBkaXNhYmxpbmcgdGhlIGFjdGl2ZUVsZW1lbnQsIElFIGFuZCBFZGdlXG4gICAgLy8gd2lsbCBub3Qgc2hpZnQgZm9jdXMgdG8gPGJvZHk+IGxpa2UgYWxsIHRoZSBvdGhlclxuICAgIC8vIGJyb3dzZXJzLCBidXQgaW5zdGVhZCBmaW5kIHRoZSBmaXJzdCBmb2N1c2FibGVcbiAgICAvLyBhbmNlc3RvciBhbmQgc2hpZnQgZm9jdXMgdG8gdGhhdFxuICAgIGlucHV0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAvLyBjbGVhbiB1cFxuICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQoZm9yZWlnbk9iamVjdCk7XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZShlbGVtZW50KSB7XG4gICAgcmV0dXJuICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIj4nICsgZWxlbWVudCArIFwiPC9zdmc+XCI7XG59XG5mdW5jdGlvbiBmb2N1cyhlbGVtZW50KSB7XG4gICAgaWYgKGVsZW1lbnQuZm9jdXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUuZm9jdXMuY2FsbChlbGVtZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGZvY3VzU3ZnRm9yZWlnbk9iamVjdEhhY2soZWxlbWVudCk7XG4gICAgfVxufVxuZnVuY3Rpb24gdmFsaWRhdGUoZWxlbWVudCwgZm9jdXNUYXJnZXQsIF9kb2N1bWVudCkge1xuICAgIGZvY3VzKGZvY3VzVGFyZ2V0KTtcbiAgICByZXR1cm4gX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGZvY3VzVGFyZ2V0O1xufVxudmFyIGZvY3VzU3ZnRm9jdXNhYmxlQXR0cmlidXRlID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGdlbmVyYXRlKCc8dGV4dCBmb2N1c2FibGU9XCJ0cnVlXCI+YTwvdGV4dD4nKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihcInRleHRcIik7XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogdmFsaWRhdGVcbn07XG52YXIgZm9jdXNTdmdUYWJpbmRleEF0dHJpYnV0ZSA9IHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBnZW5lcmF0ZSgnPHRleHQgdGFiaW5kZXg9XCIwXCI+YTwvdGV4dD4nKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihcInRleHRcIik7XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogdmFsaWRhdGVcbn07XG52YXIgZm9jdXNTdmdOZWdhdGl2ZVRhYmluZGV4QXR0cmlidXRlID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGdlbmVyYXRlKCc8dGV4dCB0YWJpbmRleD1cIi0xXCI+YTwvdGV4dD4nKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihcInRleHRcIik7XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogdmFsaWRhdGVcbn07XG52YXIgZm9jdXNTdmdVc2VUYWJpbmRleCA9IHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBnZW5lcmF0ZShbXG4gICAgICAgICAgICAnPGcgaWQ9XCJhbGx5LXRlc3QtdGFyZ2V0XCI+PGEgeGxpbms6aHJlZj1cIiN2b2lkXCI+PHRleHQ+bGluazwvdGV4dD48L2E+PC9nPicsXG4gICAgICAgICAgICAnPHVzZSB4bGluazpocmVmPVwiI2FsbHktdGVzdC10YXJnZXRcIiB4PVwiMFwiIHk9XCIwXCIgdGFiaW5kZXg9XCItMVwiIC8+J1xuICAgICAgICBdLmpvaW4oXCJcIikpO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidXNlXCIpO1xuICAgIH0sXG4gICAgdmFsaWRhdGU6IHZhbGlkYXRlXG59O1xudmFyIGZvY3VzU3ZnRm9yZWlnbm9iamVjdFRhYmluZGV4ID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGdlbmVyYXRlKCc8Zm9yZWlnbk9iamVjdCB0YWJpbmRleD1cIi0xXCI+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgLz48L2ZvcmVpZ25PYmplY3Q+Jyk7XG4gICAgICAgIC8vIFNhZmFyaSA4J3MgcXVlcnNTZWxlY3RvcigpIGNhbid0IGlkZW50aWZ5IGZvcmVpZ25PYmplY3QsIGJ1dCBnZXRFbGVtZW50eUJ5VGFnTmFtZSgpIGNhblxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiZm9yZWlnbk9iamVjdFwiKSB8fCBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZm9yZWlnbk9iamVjdFwiKVswXTtcbiAgICB9LFxuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZVxufTtcbi8vIEZpcmVmb3ggc2VlbXMgdG8gYmUgaGFuZGxpbmcgdGhlIFNWRy1kb2N1bWVudC1pbi1pZnJhbWUgY3JlYXRpb24gYXN5bmNocm9ub3VzbHlcbi8vIGFuZCB0aGVyZWJ5IHByb2R1Y2VzIGEgZmFsc2UgbmVnYXRpdmUgdGVzdCByZXN1bHQuIFRodXMgdGhlIHRlc3QgaXMgcG9pbnRsZXNzXG4vLyBhbmQgd2UgcmVzb3J0IHRvIFVBIHNuaWZmaW5nIG9uY2UgYWdhaW4uXG4vLyBzZWUgaHR0cDovL2pzYmluLmNvbS92dW5hZG9ob2tvLzEvZWRpdD9qcyxjb25zb2xlLG91dHB1dFxudmFyIHJlc3VsdCQyID0gQm9vbGVhbihwbGF0Zm9ybS5pcy5HRUNLTyAmJiB0eXBlb2YgU1ZHRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTVkdFbGVtZW50LnByb3RvdHlwZS5mb2N1cyk7XG5mdW5jdGlvbiBmb2N1c1N2Z0luSWZyYW1lKCkge1xuICAgIHJldHVybiByZXN1bHQkMjtcbn1cbnZhciBmb2N1c1N2ZyA9IHtcbiAgICBlbGVtZW50OiBcImRpdlwiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBnZW5lcmF0ZShcIlwiKTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuZmlyc3RDaGlsZDtcbiAgICB9LFxuICAgIHZhbGlkYXRlOiB2YWxpZGF0ZVxufTtcbi8vIEZpcmVmb3ggYWxsb3dzICphbnkqIHZhbHVlIGFuZCB0cmVhdHMgaW52YWxpZCB2YWx1ZXMgbGlrZSB0YWJpbmRleD1cIi0xXCJcbi8vIEBicm93c2VyLWlzc3VlIEdlY2tvIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTExMjgwNTRcbnZhciBmb2N1c1RhYmluZGV4VHJhaWxpbmdDaGFyYWN0ZXJzID0ge1xuICAgIGVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgbXV0YXRlOiBmdW5jdGlvbiBtdXRhdGUoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiM3hcIik7XG4gICAgfVxufTtcbnZhciBmb2N1c1RhYmxlID0ge1xuICAgIGVsZW1lbnQ6IFwidGFibGVcIixcbiAgICBtdXRhdGU6IGZ1bmN0aW9uIG11dGF0ZShlbGVtZW50LCB3cmFwcGVyLCBfZG9jdW1lbnQpIHtcbiAgICAgICAgLy8gSUU5IGhhcyBhIHByb2JsZW0gcmVwbGFjaW5nIFRCT0RZIGNvbnRlbnRzIHdpdGggaW5uZXJIVE1MLlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvODA5NzA1NS81MTUxMjRcbiAgICAgICAgLy8gZWxlbWVudC5pbm5lckhUTUwgPSAnPHRyPjx0ZD5jZWxsPC90ZD48L3RyPic7XG4gICAgICAgIHZhciBmcmFnbWVudCA9IF9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIGZyYWdtZW50LmlubmVySFRNTCA9IFwiPHRyPjx0ZD5jZWxsPC90ZD48L3RyPlwiO1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICB9XG59O1xudmFyIGZvY3VzVmlkZW9XaXRob3V0Q29udHJvbHMgPSB7XG4gICAgZWxlbWVudDogXCJ2aWRlb1wiLFxuICAgIG11dGF0ZTogZnVuY3Rpb24gbXV0YXRlKGVsZW1lbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIGludmFsaWQgbWVkaWEgZmlsZSBjYW4gdHJpZ2dlciB3YXJuaW5nIGluIGNvbnNvbGUsIGRhdGEtdXJpIHRvIHByZXZlbnQgSFRUUCByZXF1ZXN0XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcInNyY1wiLCBnaWYpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIElFOSBtYXkgdGhyb3cgXCJFcnJvcjogTm90IGltcGxlbWVudGVkXCJcbiAgICAgICAgfVxuICAgIH1cbn07XG4vLyBodHRwczovL2pzYmluLmNvbS92YWZhYmEvMy9lZGl0P2h0bWwsanMsY29uc29sZSxvdXRwdXRcbnZhciByZXN1bHQkMyA9IHBsYXRmb3JtLmlzLkdFQ0tPIHx8IHBsYXRmb3JtLmlzLlRSSURFTlQgfHwgcGxhdGZvcm0uaXMuRURHRTtcbmZ1bmN0aW9uIHRhYnNlcXVlbmNlQXJlYUF0SW1nUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHJlc3VsdCQzO1xufVxudmFyIHRlc3RDYWxsYmFja3MgPSB7XG4gICAgY3NzU2hhZG93UGllcmNpbmdEZWVwQ29tYmluYXRvcjogY3NzU2hhZG93UGllcmNpbmdEZWVwQ29tYmluYXRvcixcbiAgICBmb2N1c0luWmVyb0RpbWVuc2lvbk9iamVjdDogZm9jdXNJblplcm9EaW1lbnNpb25PYmplY3QsXG4gICAgZm9jdXNPYmplY3RTd2Y6IGZvY3VzT2JqZWN0U3dmLFxuICAgIGZvY3VzU3ZnSW5JZnJhbWU6IGZvY3VzU3ZnSW5JZnJhbWUsXG4gICAgdGFic2VxdWVuY2VBcmVhQXRJbWdQb3NpdGlvbjogdGFic2VxdWVuY2VBcmVhQXRJbWdQb3NpdGlvblxufTtcbnZhciB0ZXN0RGVzY3JpcHRpb25zID0ge1xuICAgIGZvY3VzQXJlYUltZ1RhYmluZGV4OiBmb2N1c0FyZWFJbWdUYWJpbmRleCxcbiAgICBmb2N1c0FyZWFUYWJpbmRleDogZm9jdXNBcmVhVGFiaW5kZXgsXG4gICAgZm9jdXNBcmVhV2l0aG91dEhyZWY6IGZvY3VzQXJlYVdpdGhvdXRIcmVmLFxuICAgIGZvY3VzQXVkaW9XaXRob3V0Q29udHJvbHM6IGZvY3VzQXVkaW9XaXRob3V0Q29udHJvbHMsXG4gICAgZm9jdXNCcm9rZW5JbWFnZU1hcDogZm9jdXNCcm9rZW5JbWFnZU1hcCxcbiAgICBmb2N1c0NoaWxkcmVuT2ZGb2N1c2FibGVGbGV4Ym94OiBmb2N1c0NoaWxkcmVuT2ZGb2N1c2FibGVGbGV4Ym94LFxuICAgIGZvY3VzRmllbGRzZXREaXNhYmxlZDogZm9jdXNGaWVsZHNldERpc2FibGVkLFxuICAgIGZvY3VzRmllbGRzZXQ6IGZvY3VzRmllbGRzZXQsXG4gICAgZm9jdXNGbGV4Ym94Q29udGFpbmVyOiBmb2N1c0ZsZXhib3hDb250YWluZXIsXG4gICAgZm9jdXNGb3JtRGlzYWJsZWQ6IGZvY3VzRm9ybURpc2FibGVkLFxuICAgIGZvY3VzSW1nSXNtYXA6IGZvY3VzSW1nSXNtYXAsXG4gICAgZm9jdXNJbWdVc2VtYXBUYWJpbmRleDogZm9jdXNJbWdVc2VtYXBUYWJpbmRleCxcbiAgICBmb2N1c0luSGlkZGVuSWZyYW1lOiBmb2N1c0luSGlkZGVuSWZyYW1lLFxuICAgIGZvY3VzSW52YWxpZFRhYmluZGV4OiBmb2N1c0ludmFsaWRUYWJpbmRleCxcbiAgICBmb2N1c0xhYmVsVGFiaW5kZXg6IGZvY3VzTGFiZWxUYWJpbmRleCxcbiAgICBmb2N1c09iamVjdFN2ZzogZm9jdXNPYmplY3RTdmcsXG4gICAgZm9jdXNPYmplY3RTdmdIaWRkZW46IGZvY3VzT2JqZWN0U3ZnSGlkZGVuLFxuICAgIGZvY3VzUmVkaXJlY3RJbWdVc2VtYXA6IGZvY3VzUmVkaXJlY3RJbWdVc2VtYXAsXG4gICAgZm9jdXNSZWRpcmVjdExlZ2VuZDogZm9jdXNSZWRpcmVjdExlZ2VuZCxcbiAgICBmb2N1c1Njcm9sbEJvZHk6IGZvY3VzU2Nyb2xsQm9keSxcbiAgICBmb2N1c1Njcm9sbENvbnRhaW5lcldpdGhvdXRPdmVyZmxvdzogZm9jdXNTY3JvbGxDb250YWluZXJXaXRob3V0T3ZlcmZsb3csXG4gICAgZm9jdXNTY3JvbGxDb250YWluZXI6IGZvY3VzU2Nyb2xsQ29udGFpbmVyLFxuICAgIGZvY3VzU3VtbWFyeTogZm9jdXNTdW1tYXJ5LFxuICAgIGZvY3VzU3ZnRm9jdXNhYmxlQXR0cmlidXRlOiBmb2N1c1N2Z0ZvY3VzYWJsZUF0dHJpYnV0ZSxcbiAgICBmb2N1c1N2Z1RhYmluZGV4QXR0cmlidXRlOiBmb2N1c1N2Z1RhYmluZGV4QXR0cmlidXRlLFxuICAgIGZvY3VzU3ZnTmVnYXRpdmVUYWJpbmRleEF0dHJpYnV0ZTogZm9jdXNTdmdOZWdhdGl2ZVRhYmluZGV4QXR0cmlidXRlLFxuICAgIGZvY3VzU3ZnVXNlVGFiaW5kZXg6IGZvY3VzU3ZnVXNlVGFiaW5kZXgsXG4gICAgZm9jdXNTdmdGb3JlaWdub2JqZWN0VGFiaW5kZXg6IGZvY3VzU3ZnRm9yZWlnbm9iamVjdFRhYmluZGV4LFxuICAgIGZvY3VzU3ZnOiBmb2N1c1N2ZyxcbiAgICBmb2N1c1RhYmluZGV4VHJhaWxpbmdDaGFyYWN0ZXJzOiBmb2N1c1RhYmluZGV4VHJhaWxpbmdDaGFyYWN0ZXJzLFxuICAgIGZvY3VzVGFibGU6IGZvY3VzVGFibGUsXG4gICAgZm9jdXNWaWRlb1dpdGhvdXRDb250cm9sczogZm9jdXNWaWRlb1dpdGhvdXRDb250cm9sc1xufTtcbmZ1bmN0aW9uIGV4ZWN1dGVUZXN0cygpIHtcbiAgICB2YXIgcmVzdWx0cyA9IGRldGVjdEZvY3VzKHRlc3REZXNjcmlwdGlvbnMpO1xuICAgIE9iamVjdC5rZXlzKHRlc3RDYWxsYmFja3MpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIHJlc3VsdHNba2V5XSA9IHRlc3RDYWxsYmFja3Nba2V5XSgpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHRzO1xufVxudmFyIHN1cHBvcnRzQ2FjaGUgPSBudWxsO1xuZnVuY3Rpb24gX3N1cHBvcnRzKCkge1xuICAgIGlmIChzdXBwb3J0c0NhY2hlKSB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0c0NhY2hlO1xuICAgIH1cbiAgICBzdXBwb3J0c0NhY2hlID0gY2FjaGUkMS5nZXQoKTtcbiAgICBpZiAoIXN1cHBvcnRzQ2FjaGUudGltZSkge1xuICAgICAgICBjYWNoZSQxLnNldChleGVjdXRlVGVzdHMoKSk7XG4gICAgICAgIHN1cHBvcnRzQ2FjaGUgPSBjYWNoZSQxLmdldCgpO1xuICAgIH1cbiAgICByZXR1cm4gc3VwcG9ydHNDYWNoZTtcbn1cbnZhciBzdXBwb3J0cyA9IHZvaWQgMDtcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9pbmZyYXN0cnVjdHVyZS5odG1sI3J1bGVzLWZvci1wYXJzaW5nLWludGVnZXJzXG4vLyBOT1RFOiBhbGwgYnJvd3NlcnMgYWdyZWUgdG8gYWxsb3cgdHJhaWxpbmcgc3BhY2VzIGFzIHdlbGxcbnZhciB2YWxpZEludGVnZXJQYXR0ZXJuTm9UcmFpbGluZyA9IC9eXFxzKigtfFxcKyk/WzAtOV0rXFxzKiQvO1xudmFyIHZhbGlkSW50ZWdlclBhdHRlcm5XaXRoVHJhaWxpbmcgPSAvXlxccyooLXxcXCspP1swLTldKy4qJC87XG5mdW5jdGlvbiBpc1ZhbGlkVGFiaW5kZXgoY29udGV4dCkge1xuICAgIGlmICghc3VwcG9ydHMpIHtcbiAgICAgICAgc3VwcG9ydHMgPSBfc3VwcG9ydHMoKTtcbiAgICB9XG4gICAgdmFyIHZhbGlkSW50ZWdlclBhdHRlcm4gPSBzdXBwb3J0cy5mb2N1c1RhYmluZGV4VHJhaWxpbmdDaGFyYWN0ZXJzID8gdmFsaWRJbnRlZ2VyUGF0dGVybldpdGhUcmFpbGluZyA6IHZhbGlkSW50ZWdlclBhdHRlcm5Ob1RyYWlsaW5nO1xuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcImlzL3ZhbGlkLXRhYmluZGV4XCIsXG4gICAgICAgIHJlc29sdmVEb2N1bWVudDogdHJ1ZSxcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgIH0pO1xuICAgIC8vIEVkZ2UgMTQgaGFzIGEgY2FwaXRhbGl6YXRpb24gcHJvYmxlbSBvbiBTVkcgZWxlbWVudHMsXG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vZW4tdXMvbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzkyODIwNTgvXG4gICAgdmFyIGhhc1RhYmluZGV4ID0gZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKTtcbiAgICB2YXIgaGFzVGFiSW5kZXggPSBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcInRhYkluZGV4XCIpO1xuICAgIGlmICghaGFzVGFiaW5kZXggJiYgIWhhc1RhYkluZGV4KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gb2xkZXIgRmlyZWZveCBhbmQgSW50ZXJuZXQgRXhwbG9yZXIgZG9uJ3Qgc3VwcG9ydCB0YWJpbmRleCBvbiBTVkcgZWxlbWVudHNcbiAgICB2YXIgaXNTdmdFbGVtZW50ID0gZWxlbWVudC5vd25lclNWR0VsZW1lbnQgfHwgZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInN2Z1wiO1xuICAgIGlmIChpc1N2Z0VsZW1lbnQgJiYgIXN1cHBvcnRzLmZvY3VzU3ZnVGFiaW5kZXhBdHRyaWJ1dGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBAYnJvd3Nlci1pc3N1ZSBHZWNrbyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTI4MDU0XG4gICAgaWYgKHN1cHBvcnRzLmZvY3VzSW52YWxpZFRhYmluZGV4KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHRhYmluZGV4IHNlbGVjdG9yIGV2ZW4gaWYgaXRzIHZhbHVlIGlzIGludmFsaWRcbiAgICB2YXIgdGFiaW5kZXggPSBlbGVtZW50LmdldEF0dHJpYnV0ZShoYXNUYWJpbmRleCA/IFwidGFiaW5kZXhcIiA6IFwidGFiSW5kZXhcIik7XG4gICAgLy8gSUUxMSBwYXJzZXMgdGFiaW5kZXg9XCJcIiBhcyB0aGUgdmFsdWUgXCItMzI3NjhcIlxuICAgIC8vIEBicm93c2VyLWlzc3VlIFRyaWRlbnQgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xMDcyOTY1XG4gICAgaWYgKHRhYmluZGV4ID09PSBcIi0zMjc2OFwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odGFiaW5kZXggJiYgdmFsaWRJbnRlZ2VyUGF0dGVybi50ZXN0KHRhYmluZGV4KSk7XG59XG5mdW5jdGlvbiB0YWJpbmRleFZhbHVlKGVsZW1lbnQpIHtcbiAgICBpZiAoIWlzVmFsaWRUYWJpbmRleChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gRWRnZSAxNCBoYXMgYSBjYXBpdGFsaXphdGlvbiBwcm9ibGVtIG9uIFNWRyBlbGVtZW50cyxcbiAgICAvLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9lbi11cy9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvOTI4MjA1OC9cbiAgICB2YXIgaGFzVGFiaW5kZXggPSBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcInRhYmluZGV4XCIpO1xuICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gaGFzVGFiaW5kZXggPyBcInRhYmluZGV4XCIgOiBcInRhYkluZGV4XCI7XG4gICAgLy8gQGJyb3dzZXItaXNzdWUgR2Vja28gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyODA1NFxuICAgIHZhciB0YWJpbmRleCA9IHBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpLCAxMCk7XG4gICAgcmV0dXJuIGlzTmFOKHRhYmluZGV4KSA/IC0xIDogdGFiaW5kZXg7XG59XG4vLyB0aGlzIGlzIGEgc2hhcmVkIHV0aWxpdHkgZmlsZSBmb3IgZm9jdXMtcmVsZXZhbnQuanMgYW5kIHRhYmJhYmxlLmpzXG4vLyBzZXBhcmF0ZSB0ZXN0aW5nIG9mIHRoaXMgZmlsZSdzIGZ1bmN0aW9ucyBpcyBub3QgbmVjZXNzYXJ5LFxuLy8gYXMgdGhleSdyZSBpbXBsaWNpdGx5IHRlc3RlZCBieSB3YXkgb2YgdGhlIGNvbnN1bWVyc1xuZnVuY3Rpb24gaXNVc2VyTW9kaWZ5V3JpdGFibGUoc3R5bGUpIHtcbiAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvMTk5OS9XRC1jc3MzLXVzZXJpbnQtMTk5OTA5MTYjdXNlci1tb2RpZnlcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzE3XG4gICAgdmFyIHVzZXJNb2RpZnkgPSBzdHlsZS53ZWJraXRVc2VyTW9kaWZ5IHx8IFwiXCI7XG4gICAgcmV0dXJuIEJvb2xlYW4odXNlck1vZGlmeSAmJiB1c2VyTW9kaWZ5LmluZGV4T2YoXCJ3cml0ZVwiKSAhPT0gLTEpO1xufVxuZnVuY3Rpb24gaGFzQ3NzT3ZlcmZsb3dTY3JvbGwoc3R5bGUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3ZlcmZsb3dcIiksXG4gICAgICAgIHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJvdmVyZmxvdy14XCIpLFxuICAgICAgICBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3ZlcmZsb3cteVwiKVxuICAgIF0uc29tZShmdW5jdGlvbihvdmVyZmxvdykge1xuICAgICAgICByZXR1cm4gb3ZlcmZsb3cgPT09IFwiYXV0b1wiIHx8IG92ZXJmbG93ID09PSBcInNjcm9sbFwiO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaGFzQ3NzRGlzcGxheUZsZXgoc3R5bGUpIHtcbiAgICByZXR1cm4gc3R5bGUuZGlzcGxheS5pbmRleE9mKFwiZmxleFwiKSA+IC0xO1xufVxuZnVuY3Rpb24gaXNTY3JvbGxhYmxlQ29udGFpbmVyKGVsZW1lbnQsIG5vZGVOYW1lLCBwYXJlbnROb2RlTmFtZSwgcGFyZW50U3R5bGUpIHtcbiAgICBpZiAobm9kZU5hbWUgIT09IFwiZGl2XCIgJiYgbm9kZU5hbWUgIT09IFwic3BhblwiKSB7XG4gICAgICAgIC8vIEludGVybmV0IEV4cGxvcmVyIGFkdmFuY2VzIHNjcm9sbGFibGUgY29udGFpbmVycyBhbmQgYm9kaWVzIHRvIGZvY3VzYWJsZVxuICAgICAgICAvLyBvbmx5IGlmIHRoZSBzY3JvbGxhYmxlIGNvbnRhaW5lciBpcyA8ZGl2PiBvciA8c3Bhbj4gLSB0aGlzIGRvZXMgKm5vdCpcbiAgICAgICAgLy8gaGFwcGVuIGZvciA8c2VjdGlvbj4sIDxhcnRpY2xlPiwg4oCmXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHBhcmVudE5vZGVOYW1lICYmIHBhcmVudE5vZGVOYW1lICE9PSBcImRpdlwiICYmIHBhcmVudE5vZGVOYW1lICE9PSBcInNwYW5cIiAmJiAhaGFzQ3NzT3ZlcmZsb3dTY3JvbGwocGFyZW50U3R5bGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDwgZWxlbWVudC5zY3JvbGxIZWlnaHQgfHwgZWxlbWVudC5vZmZzZXRXaWR0aCA8IGVsZW1lbnQuc2Nyb2xsV2lkdGg7XG59XG52YXIgc3VwcG9ydHMkMSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGlzRm9jdXNSZWxldmFudFJ1bGVzKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSwgY29udGV4dCA9IF9yZWYuY29udGV4dCwgX3JlZiRleGNlcHQgPSBfcmVmLmV4Y2VwdCwgZXhjZXB0ID0gX3JlZiRleGNlcHQgPT09IHVuZGVmaW5lZCA/IHtcbiAgICAgICAgZmxleGJveDogZmFsc2UsXG4gICAgICAgIHNjcm9sbGFibGU6IGZhbHNlLFxuICAgICAgICBzaGFkb3c6IGZhbHNlXG4gICAgfSA6IF9yZWYkZXhjZXB0O1xuICAgIGlmICghc3VwcG9ydHMkMSkge1xuICAgICAgICBzdXBwb3J0cyQxID0gX3N1cHBvcnRzKCk7XG4gICAgfVxuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcImlzL2ZvY3VzLXJlbGV2YW50XCIsXG4gICAgICAgIHJlc29sdmVEb2N1bWVudDogdHJ1ZSxcbiAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgIH0pO1xuICAgIGlmICghZXhjZXB0LnNoYWRvdyAmJiBlbGVtZW50LnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgLy8gYSBTaGFkb3dET00gaG9zdCByZWNlaXZlcyBmb2N1cyB3aGVuIHRoZSBmb2N1cyBtb3ZlcyB0byBpdHMgY29udGVudFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW1lbnQudHlwZSA9PT0gXCJoaWRkZW5cIikge1xuICAgICAgICAvLyBpbnB1dFt0eXBlPVwiaGlkZGVuXCJdIHN1cHBvcnRzLmNhbm5vdCBiZSBmb2N1c2VkXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwic2VsZWN0XCIgfHwgbm9kZU5hbWUgPT09IFwiYnV0dG9uXCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcImxlZ2VuZFwiICYmIHN1cHBvcnRzJDEuZm9jdXNSZWRpcmVjdExlZ2VuZCkge1xuICAgICAgICAvLyBzcGVjaWZpY3MgZmlsdGVyZWQgaW4gaXMvZm9jdXNhYmxlXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwibGFiZWxcIikge1xuICAgICAgICAvLyBzcGVjaWZpY3MgZmlsdGVyZWQgaW4gaXMvZm9jdXNhYmxlXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwiYXJlYVwiKSB7XG4gICAgICAgIC8vIHNwZWNpZmljcyBmaWx0ZXJlZCBpbiBpcy9mb2N1c2FibGVcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJhXCIgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJocmVmXCIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwib2JqZWN0XCIgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJ1c2VtYXBcIikpIHtcbiAgICAgICAgLy8gb2JqZWN0W3VzZW1hcF0gaXMgbm90IGZvY3VzYWJsZSBpbiBhbnkgYnJvd3NlclxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB2YXIgc3ZnVHlwZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtcbiAgICAgICAgaWYgKCFzdXBwb3J0cyQxLmZvY3VzT2JqZWN0U3ZnICYmIHN2Z1R5cGUgPT09IFwiaW1hZ2Uvc3ZnK3htbFwiKSB7XG4gICAgICAgICAgICAvLyBvYmplY3RbdHlwZT1cImltYWdlL3N2Zyt4bWxcIl0gaXMgbm90IGZvY3VzYWJsZSBpbiBJbnRlcm5ldCBFeHBsb3JlclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKCFzdXBwb3J0cyQxLmZvY3VzT2JqZWN0U3dmICYmIHN2Z1R5cGUgPT09IFwiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2hcIikge1xuICAgICAgICAgICAgLy8gb2JqZWN0W3R5cGU9XCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaFwiXSBpcyBub3QgZm9jdXNhYmxlIGluIEludGVybmV0IEV4cGxvcmVyIDlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwiaWZyYW1lXCIgfHwgbm9kZU5hbWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgLy8gYnJvd3NpbmcgY29udGV4dCBjb250YWluZXJzXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwiZW1iZWRcIiB8fCBub2RlTmFtZSA9PT0gXCJrZXlnZW5cIikge1xuICAgICAgICAvLyBlbWJlZCBpcyBjb25zaWRlcmVkIGZvY3VzLXJlbGV2YW50IGJ1dCBub3QgZm9jdXNhYmxlXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzgyXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikpIHtcbiAgICAgICAgLy8gYWxzbyBzZWUgQ1NTIHByb3BlcnR5IHVzZXItbW9kaWZ5IGJlbG93XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwiYXVkaW9cIiAmJiAoc3VwcG9ydHMkMS5mb2N1c0F1ZGlvV2l0aG91dENvbnRyb2xzIHx8IGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udHJvbHNcIikpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwidmlkZW9cIiAmJiAoc3VwcG9ydHMkMS5mb2N1c1ZpZGVvV2l0aG91dENvbnRyb2xzIHx8IGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udHJvbHNcIikpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc3VwcG9ydHMkMS5mb2N1c1N1bW1hcnkgJiYgbm9kZU5hbWUgPT09IFwic3VtbWFyeVwiKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgdmFsaWRUYWJpbmRleCA9IGlzVmFsaWRUYWJpbmRleChlbGVtZW50KTtcbiAgICBpZiAobm9kZU5hbWUgPT09IFwiaW1nXCIgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJ1c2VtYXBcIikpIHtcbiAgICAgICAgLy8gR2Vja28sIFRyaWRlbnQgYW5kIEVkZ2UgZG8gbm90IGFsbG93IGFuIGltYWdlIHdpdGggYW4gaW1hZ2UgbWFwIGFuZCB0YWJpbmRleCB0byBiZSBmb2N1c2VkLFxuICAgICAgICAvLyBpdCBhcHBlYXJzIHRoZSB0YWJpbmRleCBpcyBvdmVycnVsZWQgc28gZm9jdXMgaXMgc3RpbGwgZm9yd2FyZGVkIHRvIHRoZSA8bWFwPlxuICAgICAgICByZXR1cm4gdmFsaWRUYWJpbmRleCAmJiBzdXBwb3J0cyQxLmZvY3VzSW1nVXNlbWFwVGFiaW5kZXggfHwgc3VwcG9ydHMkMS5mb2N1c1JlZGlyZWN0SW1nVXNlbWFwO1xuICAgIH1cbiAgICBpZiAoc3VwcG9ydHMkMS5mb2N1c1RhYmxlICYmIChub2RlTmFtZSA9PT0gXCJ0YWJsZVwiIHx8IG5vZGVOYW1lID09PSBcInRkXCIpKSB7XG4gICAgICAgIC8vIElFMTAtMTEgc3VwcG9ydHMuY2FuIGZvY3VzIDx0YWJsZT4gYW5kIDx0ZD5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzdXBwb3J0cyQxLmZvY3VzRmllbGRzZXQgJiYgbm9kZU5hbWUgPT09IFwiZmllbGRzZXRcIikge1xuICAgICAgICAvLyBJRTEwLTExIHN1cHBvcnRzLmNhbiBmb2N1cyA8ZmllbGRzZXQ+XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgaXNTdmdFbGVtZW50ID0gbm9kZU5hbWUgPT09IFwic3ZnXCI7XG4gICAgdmFyIGlzU3ZnQ29udGVudCA9IGVsZW1lbnQub3duZXJTVkdFbGVtZW50O1xuICAgIHZhciBmb2N1c2FibGVBdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImZvY3VzYWJsZVwiKTtcbiAgICB2YXIgdGFiaW5kZXggPSB0YWJpbmRleFZhbHVlKGVsZW1lbnQpO1xuICAgIGlmIChub2RlTmFtZSA9PT0gXCJ1c2VcIiAmJiB0YWJpbmRleCAhPT0gbnVsbCAmJiAhc3VwcG9ydHMkMS5mb2N1c1N2Z1VzZVRhYmluZGV4KSB7XG4gICAgICAgIC8vIDx1c2U+IGNhbm5vdCBiZSBtYWRlIGZvY3VzYWJsZSBieSBhZGRpbmcgYSB0YWJpbmRleCBhdHRyaWJ1dGUgYW55d2hlcmUgYnV0IEJsaW5rIGFuZCBXZWJLaXRcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwiZm9yZWlnbm9iamVjdFwiKSB7XG4gICAgICAgIC8vIDx1c2U+IGNhbiBvbmx5IGJlIG1hZGUgZm9jdXNhYmxlIGluIEJsaW5rIGFuZCBXZWJLaXRcbiAgICAgICAgcmV0dXJuIHRhYmluZGV4ICE9PSBudWxsICYmIHN1cHBvcnRzJDEuZm9jdXNTdmdGb3JlaWdub2JqZWN0VGFiaW5kZXg7XG4gICAgfVxuICAgIGlmIChlbGVtZW50TWF0Y2hlcyhlbGVtZW50LCBcInN2ZyBhXCIpICYmIGVsZW1lbnQuaGFzQXR0cmlidXRlKFwieGxpbms6aHJlZlwiKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKChpc1N2Z0VsZW1lbnQgfHwgaXNTdmdDb250ZW50KSAmJiBlbGVtZW50LmZvY3VzICYmICFzdXBwb3J0cyQxLmZvY3VzU3ZnTmVnYXRpdmVUYWJpbmRleEF0dHJpYnV0ZSAmJiB0YWJpbmRleCA8IDApIHtcbiAgICAgICAgLy8gRmlyZWZveCA1MSBhbmQgNTIgdHJlYXQgYW55IG5hdGl2ZWx5IHRhYmJhYmxlIFNWRyBlbGVtZW50IHdpdGhcbiAgICAgICAgLy8gdGFiaW5kZXg9XCItMVwiIGFzIHRhYmJhYmxlIGFuZCBldmVyeXRoaW5nIGVsc2UgYXMgaW5lcnRcbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDIzNDBcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaXNTdmdFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB2YWxpZFRhYmluZGV4IHx8IHN1cHBvcnRzJDEuZm9jdXNTdmcgfHwgc3VwcG9ydHMkMS5mb2N1c1N2Z0luSWZyYW1lIHx8IC8vIEludGVybmV0IEV4cGxvcmVyIHVuZGVyc3RhbmRzIHRoZSBmb2N1c2FibGUgYXR0cmlidXRlIGludHJvZHVjZWQgaW4gU1ZHIFRpbnkgMS4yXG4gICAgICAgIEJvb2xlYW4oc3VwcG9ydHMkMS5mb2N1c1N2Z0ZvY3VzYWJsZUF0dHJpYnV0ZSAmJiBmb2N1c2FibGVBdHRyaWJ1dGUgJiYgZm9jdXNhYmxlQXR0cmlidXRlID09PSBcInRydWVcIik7XG4gICAgfVxuICAgIGlmIChpc1N2Z0NvbnRlbnQpIHtcbiAgICAgICAgaWYgKHN1cHBvcnRzJDEuZm9jdXNTdmdUYWJpbmRleEF0dHJpYnV0ZSAmJiB2YWxpZFRhYmluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3VwcG9ydHMkMS5mb2N1c1N2Z0ZvY3VzYWJsZUF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgLy8gSW50ZXJuZXQgRXhwbG9yZXIgdW5kZXJzdGFuZHMgdGhlIGZvY3VzYWJsZSBhdHRyaWJ1dGUgaW50cm9kdWNlZCBpbiBTVkcgVGlueSAxLjJcbiAgICAgICAgICAgIHJldHVybiBmb2N1c2FibGVBdHRyaWJ1dGUgPT09IFwidHJ1ZVwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lZGl0aW5nLmh0bWwjc2VxdWVudGlhbC1mb2N1cy1uYXZpZ2F0aW9uLWFuZC10aGUtdGFiaW5kZXgtYXR0cmlidXRlXG4gICAgaWYgKHZhbGlkVGFiaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuICAgIGlmIChpc1VzZXJNb2RpZnlXcml0YWJsZShzdHlsZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzdXBwb3J0cyQxLmZvY3VzSW1nSXNtYXAgJiYgbm9kZU5hbWUgPT09IFwiaW1nXCIgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJpc21hcFwiKSkge1xuICAgICAgICAvLyBJRTEwLTExIGNvbnNpZGVycyB0aGUgPGltZz4gaW4gPGEgaHJlZj48aW1nIGlzbWFwPiBmb2N1c2FibGVcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9hbGx5LmpzL2lzc3Vlcy8yMFxuICAgICAgICB2YXIgaGFzTGlua1BhcmVudCA9IGdldFBhcmVudHMoe1xuICAgICAgICAgICAgY29udGV4dDogZWxlbWVudFxuICAgICAgICB9KS5zb21lKGZ1bmN0aW9uKHBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImFcIiAmJiBwYXJlbnQuaGFzQXR0cmlidXRlKFwiaHJlZlwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChoYXNMaW5rUGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzIxXG4gICAgaWYgKCFleGNlcHQuc2Nyb2xsYWJsZSAmJiBzdXBwb3J0cyQxLmZvY3VzU2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICAgIGlmIChzdXBwb3J0cyQxLmZvY3VzU2Nyb2xsQ29udGFpbmVyV2l0aG91dE92ZXJmbG93KSB7XG4gICAgICAgICAgICAvLyBJbnRlcm5ldCBFeHBsb3JlciBkb2VzIHdpbGwgY29uc2lkZXIgdGhlIHNjcm9sbGFibGUgYXJlYSBmb2N1c2FibGVcbiAgICAgICAgICAgIC8vIGlmIHRoZSBlbGVtZW50IGlzIGEgPGRpdj4gb3IgYSA8c3Bhbj4gYW5kIGl0IGlzIGluIGZhY3Qgc2Nyb2xsYWJsZSxcbiAgICAgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhlIENTUyBvdmVyZmxvdyBwcm9wZXJ0eVxuICAgICAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZUNvbnRhaW5lcihlbGVtZW50LCBub2RlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChoYXNDc3NPdmVyZmxvd1Njcm9sbChzdHlsZSkpIHtcbiAgICAgICAgICAgIC8vIEZpcmVmb3ggcmVxdWlyZXMgcHJvcGVyIG92ZXJmbG93IHNldHRpbmcsIElFIGRvZXMgbm90IG5lY2Vzc2FyaWx5XG4gICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9DU1Mvb3ZlcmZsb3dcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghZXhjZXB0LmZsZXhib3ggJiYgc3VwcG9ydHMkMS5mb2N1c0ZsZXhib3hDb250YWluZXIgJiYgaGFzQ3NzRGlzcGxheUZsZXgoc3R5bGUpKSB7XG4gICAgICAgIC8vIGVsZW1lbnRzIHdpdGggZGlzcGxheTpmbGV4IGFyZSBmb2N1c2FibGUgaW4gSUUxMC0xMVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICBpZiAoIWV4Y2VwdC5zY3JvbGxhYmxlICYmIHBhcmVudCkge1xuICAgICAgICB2YXIgcGFyZW50Tm9kZU5hbWUgPSBwYXJlbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIHBhcmVudFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50LCBudWxsKTtcbiAgICAgICAgaWYgKHN1cHBvcnRzJDEuZm9jdXNTY3JvbGxCb2R5ICYmIGlzU2Nyb2xsYWJsZUNvbnRhaW5lcihwYXJlbnQsIG5vZGVOYW1lLCBwYXJlbnROb2RlTmFtZSwgcGFyZW50U3R5bGUpKSB7XG4gICAgICAgICAgICAvLyBzY3JvbGxhYmxlIGJvZGllcyBhcmUgZm9jdXNhYmxlIEludGVybmV0IEV4cGxvcmVyXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzIxXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGlsZHJlbiBvZiBmb2N1c2FibGUgZWxlbWVudHMgd2l0aCBkaXNwbGF5OmZsZXggYXJlIGZvY3VzYWJsZSBpbiBJRTEwLTExXG4gICAgICAgIGlmIChzdXBwb3J0cyQxLmZvY3VzQ2hpbGRyZW5PZkZvY3VzYWJsZUZsZXhib3gpIHtcbiAgICAgICAgICAgIGlmIChoYXNDc3NEaXNwbGF5RmxleChwYXJlbnRTdHlsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBOT1RFOiBlbGVtZW50cyBtYXJrZWQgYXMgaW5lcnQgYXJlIG5vdCBmb2N1c2FibGUsXG4gICAgLy8gYnV0IHRoYXQgcHJvcGVydHkgaXMgbm90IGV4cG9zZWQgdG8gdGhlIERPTVxuICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lZGl0aW5nLmh0bWwjaW5lcnRcbiAgICByZXR1cm4gZmFsc2U7XG59XG4vLyBiaW5kIGV4Y2VwdGlvbnMgdG8gYW4gaXRlcmF0b3IgY2FsbGJhY2tcbmlzRm9jdXNSZWxldmFudFJ1bGVzLmV4Y2VwdCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBleGNlcHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIHZhciBpc0ZvY3VzUmVsZXZhbnQgPSBmdW5jdGlvbiBpc0ZvY3VzUmVsZXZhbnQoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gaXNGb2N1c1JlbGV2YW50UnVsZXMoe1xuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgIGV4Y2VwdDogZXhjZXB0XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgaXNGb2N1c1JlbGV2YW50LnJ1bGVzID0gaXNGb2N1c1JlbGV2YW50UnVsZXM7XG4gICAgcmV0dXJuIGlzRm9jdXNSZWxldmFudDtcbn07XG4vLyBwcm92aWRlIGlzRm9jdXNSZWxldmFudChjb250ZXh0KSBhcyBkZWZhdWx0IGl0ZXJhdG9yIGNhbGxiYWNrXG52YXIgaXNGb2N1c1JlbGV2YW50ID0gaXNGb2N1c1JlbGV2YW50UnVsZXMuZXhjZXB0KHt9KTtcbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgY2FsbGJhY2spIHtcbiAgICAvLyBhdHRlbXB0IHRvIHVzZSBuYXRpdmUgb3IgcG9seWZpbGxlZCBBcnJheSNmaW5kSW5kZXggZmlyc3RcbiAgICBpZiAoYXJyYXkuZmluZEluZGV4KSB7XG4gICAgICAgIHJldHVybiBhcnJheS5maW5kSW5kZXgoY2FsbGJhY2spO1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgIC8vIHNob3J0Y3V0IGlmIHRoZSBhcnJheSBpcyBlbXB0eVxuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgbG9vcCBvdmVyIGFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKXtcbiAgICAgICAgaWYgKGNhbGxiYWNrKGFycmF5W2ldLCBpLCBhcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIGdldENvbnRlbnREb2N1bWVudChub2RlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd29ya3Mgb24gPG9iamVjdD4gYW5kIDxpZnJhbWU+XG4gICAgICAgIHJldHVybiBub2RlLmNvbnRlbnREb2N1bWVudCB8fCAvLyB3b3JrcyBvbiA8b2JqZWN0PiBhbmQgPGlmcmFtZT5cbiAgICAgICAgbm9kZS5jb250ZW50V2luZG93ICYmIG5vZGUuY29udGVudFdpbmRvdy5kb2N1bWVudCB8fCAvLyB3b3JrcyBvbiA8b2JqZWN0PiBhbmQgPGlmcmFtZT4gdGhhdCBjb250YWluIFNWR1xuICAgICAgICBub2RlLmdldFNWR0RvY3VtZW50ICYmIG5vZGUuZ2V0U1ZHRG9jdW1lbnQoKSB8fCBudWxsO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gU2VjdXJpdHlFcnJvcjogRmFpbGVkIHRvIHJlYWQgdGhlICdjb250ZW50RG9jdW1lbnQnIHByb3BlcnR5IGZyb20gJ0hUTUxPYmplY3RFbGVtZW50J1xuICAgICAgICAvLyBhbHNvIElFIG1heSB0aHJvdyBtZW1iZXIgbm90IGZvdW5kIGV4Y2VwdGlvbiBlLmcuIG9uIDxvYmplY3QgdHlwZT1cImltYWdlL3BuZ1wiPlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICAgIHZhciBfZG9jdW1lbnQgPSBnZXREb2N1bWVudChub2RlKTtcbiAgICByZXR1cm4gX2RvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbn1cbnZhciBzaGFkb3dQcmVmaXggPSB2b2lkIDA7XG5mdW5jdGlvbiBzZWxlY3RJblNoYWRvd3Moc2VsZWN0b3IpIHtcbiAgICBpZiAodHlwZW9mIHNoYWRvd1ByZWZpeCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgb3BlcmF0b3IgPSBjc3NTaGFkb3dQaWVyY2luZ0RlZXBDb21iaW5hdG9yKCk7XG4gICAgICAgIGlmIChvcGVyYXRvcikge1xuICAgICAgICAgICAgc2hhZG93UHJlZml4ID0gXCIsIGh0bWwgXCIgKyBvcGVyYXRvciArIFwiIFwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghc2hhZG93UHJlZml4KSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RvcjtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdG9yICsgc2hhZG93UHJlZml4ICsgc2VsZWN0b3IucmVwbGFjZSgvXFxzKixcXHMqL2csIFwiLFwiKS5zcGxpdChcIixcIikuam9pbihzaGFkb3dQcmVmaXgpO1xufVxudmFyIHNlbGVjdG9yID0gdm9pZCAwO1xuZnVuY3Rpb24gZmluZERvY3VtZW50SG9zdEVsZW1lbnQoX3dpbmRvdykge1xuICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RJblNoYWRvd3MoXCJvYmplY3QsIGlmcmFtZVwiKTtcbiAgICB9XG4gICAgaWYgKF93aW5kb3cuX2ZyYW1lRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBfd2luZG93Ll9mcmFtZUVsZW1lbnQ7XG4gICAgfVxuICAgIF93aW5kb3cuX2ZyYW1lRWxlbWVudCA9IG51bGw7XG4gICAgdmFyIHBvdGVudGlhbEhvc3RzID0gX3dpbmRvdy5wYXJlbnQuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgW10uc29tZS5jYWxsKHBvdGVudGlhbEhvc3RzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciBfZG9jdW1lbnQgPSBnZXRDb250ZW50RG9jdW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGlmIChfZG9jdW1lbnQgIT09IF93aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBfd2luZG93Ll9mcmFtZUVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gX3dpbmRvdy5fZnJhbWVFbGVtZW50O1xufVxuZnVuY3Rpb24gZ2V0RnJhbWVFbGVtZW50KGVsZW1lbnQpIHtcbiAgICB2YXIgX3dpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgICBpZiAoIV93aW5kb3cucGFyZW50IHx8IF93aW5kb3cucGFyZW50ID09PSBfd2luZG93KSB7XG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIHBhcmVudCBicm93c2luZyBjb250ZXh0LFxuICAgICAgICAvLyB3ZSdyZSBub3QgZ29pbmcgdG8gZ2V0IGEgZnJhbWVFbGVtZW50IGVpdGhlciB3YXlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvV2luZG93L2ZyYW1lRWxlbWVudFxuICAgICAgICAvLyBkb2VzIG5vdCB3b3JrIHdpdGhpbiA8ZW1iZWQ+IGFueXdoZXJlLCBhbmQgbm90IHdpdGhpbiBpbiA8b2JqZWN0PiBpbiBJRVxuICAgICAgICByZXR1cm4gX3dpbmRvdy5mcmFtZUVsZW1lbnQgfHwgZmluZERvY3VtZW50SG9zdEVsZW1lbnQoX3dpbmRvdyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvcmVuZGVyaW5nLmh0bWwjYmVpbmctcmVuZGVyZWRcbi8vIDxhcmVhPiBpcyBub3QgcmVuZGVyZWQsIGJ1dCB3ZSAqY29uc2lkZXIqIGl0IHZpc2libGUgdG8gc2ltcGxmaXkgdGhpcyBmdW5jdGlvbidzIHVzYWdlXG52YXIgbm90UmVuZGVyZWRFbGVtZW50c1BhdHRlcm4gPSAvXihhcmVhKSQvO1xuZnVuY3Rpb24gY29tcHV0ZWRTdHlsZShlbGVtZW50LCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcbn1cbmZ1bmN0aW9uIG5vdERpc3BsYXllZChfcGF0aCkge1xuICAgIHJldHVybiBfcGF0aC5zb21lKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgLy8gZGlzcGxheTpub25lIGlzIG5vdCB2aXNpYmxlIChvcHRpbWl6ZWQgYXdheSBhdCBsYXlvdXQpXG4gICAgICAgIHJldHVybiBjb21wdXRlZFN0eWxlKGVsZW1lbnQsIFwiZGlzcGxheVwiKSA9PT0gXCJub25lXCI7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBub3RWaXNpYmxlKF9wYXRoKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnktdWkvYmxvYi9tYXN0ZXIvdWkvY29yZS5qcyNMMTA5LUwxMTRcbiAgICAvLyBOT1RFOiBhIG5lc3RlZCBlbGVtZW50IGNhbiByZXZlcnNlIHZpc2liaWxpdHk6aGlkZGVufGNvbGxhcHNlIGJ5IGV4cGxpY2l0bHkgc2V0dGluZyB2aXNpYmlsaXR5OnZpc2libGVcbiAgICAvLyBOT1RFOiB2aXNpYmlsaXR5IGNhbiBiZSBbXCJcIiwgXCJ2aXNpYmxlXCIsIFwiaGlkZGVuXCIsIFwiY29sbGFwc2VcIl1cbiAgICB2YXIgaGlkZGVuID0gZmluZEluZGV4KF9wYXRoLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciB2aXNpYmlsaXR5ID0gY29tcHV0ZWRTdHlsZShlbGVtZW50LCBcInZpc2liaWxpdHlcIik7XG4gICAgICAgIHJldHVybiB2aXNpYmlsaXR5ID09PSBcImhpZGRlblwiIHx8IHZpc2liaWxpdHkgPT09IFwiY29sbGFwc2VcIjtcbiAgICB9KTtcbiAgICBpZiAoaGlkZGVuID09PSAtMSkge1xuICAgICAgICAvLyB0aGVyZSBpcyBubyBoaWRkZW4gZWxlbWVudFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciB2aXNpYmxlID0gZmluZEluZGV4KF9wYXRoLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBjb21wdXRlZFN0eWxlKGVsZW1lbnQsIFwidmlzaWJpbGl0eVwiKSA9PT0gXCJ2aXNpYmxlXCI7XG4gICAgfSk7XG4gICAgaWYgKHZpc2libGUgPT09IC0xKSB7XG4gICAgICAgIC8vIHRoZXJlIGlzIG5vIHZpc2libGUgZWxlbWVudCAoYnV0IGEgaGlkZGVuIGVsZW1lbnQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoaGlkZGVuIDwgdmlzaWJsZSkge1xuICAgICAgICAvLyB0aGVyZSBpcyBhIGhpZGRlbiBlbGVtZW50IGFuZCBpdCdzIGNsb3NlciB0aGFuIHRoZSBmaXJzdCB2aXNpYmxlIGVsZW1lbnRcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIHRoZXJlIG1heSBiZSBhIGhpZGRlbiBlbGVtZW50LCBidXQgdGhlIGNsb3Nlc3QgZWxlbWVudCBpcyB2aXNpYmxlXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gY29sbGFwc2VkUGFyZW50KF9wYXRoKSB7XG4gICAgdmFyIG9mZnNldCA9IDE7XG4gICAgaWYgKF9wYXRoWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwic3VtbWFyeVwiKSB7XG4gICAgICAgIG9mZnNldCA9IDI7XG4gICAgfVxuICAgIHJldHVybiBfcGF0aC5zbGljZShvZmZzZXQpLnNvbWUoZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAvLyBcImNvbnRlbnQgY2hpbGRyZW5cIiBvZiBhIGNsb3NlZCBkZXRhaWxzIGVsZW1lbnQgYXJlIG5vdCB2aXNpYmxlXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZGV0YWlsc1wiICYmIGVsZW1lbnQub3BlbiA9PT0gZmFsc2U7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1Zpc2libGVSdWxlcygpIHtcbiAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sIGNvbnRleHQgPSBfcmVmLmNvbnRleHQsIF9yZWYkZXhjZXB0ID0gX3JlZi5leGNlcHQsIGV4Y2VwdCA9IF9yZWYkZXhjZXB0ID09PSB1bmRlZmluZWQgPyB7XG4gICAgICAgIG5vdFJlbmRlcmVkOiBmYWxzZSxcbiAgICAgICAgY3NzRGlzcGxheTogZmFsc2UsXG4gICAgICAgIGNzc1Zpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICBkZXRhaWxzRWxlbWVudDogZmFsc2UsXG4gICAgICAgIGJyb3dzaW5nQ29udGV4dDogZmFsc2VcbiAgICB9IDogX3JlZiRleGNlcHQ7XG4gICAgdmFyIGVsZW1lbnQgPSBjb250ZXh0VG9FbGVtZW50KHtcbiAgICAgICAgbGFiZWw6IFwiaXMvdmlzaWJsZVwiLFxuICAgICAgICByZXNvbHZlRG9jdW1lbnQ6IHRydWUsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICB9KTtcbiAgICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFleGNlcHQubm90UmVuZGVyZWQgJiYgbm90UmVuZGVyZWRFbGVtZW50c1BhdHRlcm4udGVzdChub2RlTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBfcGF0aCA9IGdldFBhcmVudHMoe1xuICAgICAgICBjb250ZXh0OiBlbGVtZW50XG4gICAgfSk7XG4gICAgLy8gaW4gSW50ZXJuZXQgRXhwbG9yZXIgPGF1ZGlvPiBoYXMgYSBkZWZhdWx0IGRpc3BsYXk6IG5vbmUsIHdoZXJlIG90aGVycyBoYXZlIGRpc3BsYXk6IGlubGluZVxuICAgIC8vIGJ1dCBJRSBhbGxvd3MgZm9jdXNpbmcgPGF1ZGlvIHN0eWxlPVwiZGlzcGxheTpub25lXCI+LCBidXQgbm90IDxkaXYgZGlzcGxheTpub25lPjxhdWRpbz5cbiAgICAvLyB0aGlzIGlzIGlycmVsZXZhbnQgdG8gb3RoZXIgYnJvd3NlcnMsIGFzIHRoZSBjb250cm9scyBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgdG8gbWFrZSA8YXVkaW8+IGZvY3VzYWJsZVxuICAgIHZhciBpc0F1ZGlvV2l0aG91dENvbnRyb2xzID0gbm9kZU5hbWUgPT09IFwiYXVkaW9cIiAmJiAhZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250cm9sc1wiKTtcbiAgICBpZiAoIWV4Y2VwdC5jc3NEaXNwbGF5ICYmIG5vdERpc3BsYXllZChpc0F1ZGlvV2l0aG91dENvbnRyb2xzID8gX3BhdGguc2xpY2UoMSkgOiBfcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWV4Y2VwdC5jc3NWaXNpYmlsaXR5ICYmIG5vdFZpc2libGUoX3BhdGgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFleGNlcHQuZGV0YWlsc0VsZW1lbnQgJiYgY29sbGFwc2VkUGFyZW50KF9wYXRoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghZXhjZXB0LmJyb3dzaW5nQ29udGV4dCkge1xuICAgICAgICAvLyBlbGVtZW50cyB3aXRoaW4gYSBicm93c2luZyBjb250ZXh0IGFyZSBhZmZlY3RlZCBieSB0aGVcbiAgICAgICAgLy8gYnJvd3NpbmcgY29udGV4dCBob3N0IGVsZW1lbnQncyB2aXNpYmlsaXR5IGFuZCB0YWJpbmRleFxuICAgICAgICB2YXIgZnJhbWVFbGVtZW50ID0gZ2V0RnJhbWVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB2YXIgX2lzVmlzaWJsZSA9IGlzVmlzaWJsZVJ1bGVzLmV4Y2VwdChleGNlcHQpO1xuICAgICAgICBpZiAoZnJhbWVFbGVtZW50ICYmICFfaXNWaXNpYmxlKGZyYW1lRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIGJpbmQgZXhjZXB0aW9ucyB0byBhbiBpdGVyYXRvciBjYWxsYmFja1xuaXNWaXNpYmxlUnVsZXMuZXhjZXB0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGV4Y2VwdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIGlzVmlzaWJsZSA9IGZ1bmN0aW9uIGlzVmlzaWJsZShjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBpc1Zpc2libGVSdWxlcyh7XG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgICAgZXhjZXB0OiBleGNlcHRcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBpc1Zpc2libGUucnVsZXMgPSBpc1Zpc2libGVSdWxlcztcbiAgICByZXR1cm4gaXNWaXNpYmxlO1xufTtcbi8vIHByb3ZpZGUgaXNWaXNpYmxlKGNvbnRleHQpIGFzIGRlZmF1bHQgaXRlcmF0b3IgY2FsbGJhY2tcbnZhciBpc1Zpc2libGUgPSBpc1Zpc2libGVSdWxlcy5leGNlcHQoe30pO1xuZnVuY3Rpb24gZ2V0TWFwQnlOYW1lKG5hbWUsIF9kb2N1bWVudCkge1xuICAgIC8vIGFwcGFyZW50bHkgZ2V0RWxlbWVudHNCeU5hbWUoKSBhbHNvIGNvbnNpZGVycyBpZCBhdHRyaWJ1dGUgaW4gSUUgJiBvcGVyYVxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9nZXRFbGVtZW50c0J5TmFtZVxuICAgIHZhciBtYXAgPSBfZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWFwW25hbWU9XCInICsgKDAsIF9jc3Nlc2NhcGUuZGVmYXVsdCkobmFtZSkgKyAnXCJdJyk7XG4gICAgcmV0dXJuIG1hcCB8fCBudWxsO1xufVxuZnVuY3Rpb24gZ2V0SW1hZ2VPZkFyZWEoZWxlbWVudCkge1xuICAgIHZhciBtYXAgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKCFtYXAubmFtZSB8fCBtYXAubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJtYXBcIikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gTk9URTogaW1hZ2UgbWFwcyBjYW4gYWxzbyBiZSBhcHBsaWVkIHRvIDxvYmplY3Q+IHdpdGggaW1hZ2UgY29udGVudCxcbiAgICAvLyBidXQgbm8gYnJvd3NlciBzdXBwb3J0cyB0aGlzIGF0IHRoZSBtb21lbnRcbiAgICAvLyBIVE1MNSBzcGVjaWZpZXMgSFRNTE1hcEVsZW1lbnQuaW1hZ2VzIHRvIGJlIGFuIEhUTUxDb2xsZWN0aW9uIG9mIGFsbFxuICAgIC8vIDxpbWc+IGFuZCA8b2JqZWN0PiByZWZlcmVuY2luZyB0aGUgPG1hcD4gZWxlbWVudCwgYnV0IG5vIGJyb3dzZXIgaW1wbGVtZW50cyB0aGlzXG4gICAgLy8gICBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvZW1iZWRkZWQtY29udGVudC0wLmh0bWwjdGhlLW1hcC1lbGVtZW50XG4gICAgLy8gICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvSFRNTE1hcEVsZW1lbnRcbiAgICAvLyB0aGUgaW1hZ2UgbXVzdCBiZSB2YWxpZCBhbmQgbG9hZGVkIGZvciB0aGUgbWFwIHRvIHRha2UgZWZmZWN0XG4gICAgdmFyIF9kb2N1bWVudCA9IGdldERvY3VtZW50KGVsZW1lbnQpO1xuICAgIHJldHVybiBfZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW1nW3VzZW1hcD1cIiMnICsgKDAsIF9jc3Nlc2NhcGUuZGVmYXVsdCkobWFwLm5hbWUpICsgJ1wiXScpIHx8IG51bGw7XG59XG52YXIgc3VwcG9ydHMkMiA9IHZvaWQgMDtcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9tYXBcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbWcjYXR0ci11c2VtYXBcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5LXVpL2Jsb2IvbWFzdGVyL3VpL2NvcmUuanMjTDg4LUwxMDdcbmZ1bmN0aW9uIGlzVmFsaWRBcmVhKGNvbnRleHQpIHtcbiAgICBpZiAoIXN1cHBvcnRzJDIpIHtcbiAgICAgICAgc3VwcG9ydHMkMiA9IF9zdXBwb3J0cygpO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHRUb0VsZW1lbnQoe1xuICAgICAgICBsYWJlbDogXCJpcy92YWxpZC1hcmVhXCIsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICB9KTtcbiAgICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vZGVOYW1lICE9PSBcImFyZWFcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBoYXNUYWJpbmRleCA9IGVsZW1lbnQuaGFzQXR0cmlidXRlKFwidGFiaW5kZXhcIik7XG4gICAgaWYgKCFzdXBwb3J0cyQyLmZvY3VzQXJlYVRhYmluZGV4ICYmIGhhc1RhYmluZGV4KSB7XG4gICAgICAgIC8vIEJsaW5rIGFuZCBXZWJLaXQgZG8gbm90IGNvbnNpZGVyIDxhcmVhIHRhYmluZGV4PVwiLTFcIiBocmVmPVwiI3ZvaWRcIj4gZm9jdXNhYmxlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGltZyA9IGdldEltYWdlT2ZBcmVhKGVsZW1lbnQpO1xuICAgIGlmICghaW1nIHx8ICFpc1Zpc2libGUoaW1nKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEZpcmVmb3ggb25seSBhbGxvd3MgZnVsbHkgbG9hZGVkIGltYWdlcyB0byByZWZlcmVuY2UgaW1hZ2UgbWFwc1xuICAgIC8vIGh0dHBzOi8vc3RlcmVvY2hyby5tZS9pZGVhcy9kZXRlY3RpbmctYnJva2VuLWltYWdlcy1qc1xuICAgIGlmICghc3VwcG9ydHMkMi5mb2N1c0Jyb2tlbkltYWdlTWFwICYmICghaW1nLmNvbXBsZXRlIHx8ICFpbWcubmF0dXJhbEhlaWdodCB8fCBpbWcub2Zmc2V0V2lkdGggPD0gMCB8fCBpbWcub2Zmc2V0SGVpZ2h0IDw9IDApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gRmlyZWZveCBzdXBwb3J0cy5jYW4gZm9jdXMgYXJlYSBlbGVtZW50cyBldmVuIGlmIHRoZXkgZG9uJ3QgaGF2ZSBhbiBocmVmIGF0dHJpYnV0ZVxuICAgIGlmICghc3VwcG9ydHMkMi5mb2N1c0FyZWFXaXRob3V0SHJlZiAmJiAhZWxlbWVudC5ocmVmKSB7XG4gICAgICAgIC8vIEludGVybmV0IGV4cGxvcmVyIHN1cHBvcnRzLmNhbiBmb2N1cyBhcmVhIGVsZW1lbnRzIHdpdGhvdXQgaHJlZiBpZiBlaXRoZXJcbiAgICAgICAgLy8gdGhlIGFyZWEgZWxlbWVudCBvciB0aGUgaW1hZ2UgZWxlbWVudCBoYXMgYSB0YWJpbmRleCBhdHRyaWJ1dGVcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzJDIuZm9jdXNBcmVhVGFiaW5kZXggJiYgaGFzVGFiaW5kZXggfHwgc3VwcG9ydHMkMi5mb2N1c0FyZWFJbWdUYWJpbmRleCAmJiBpbWcuaGFzQXR0cmlidXRlKFwidGFiaW5kZXhcIik7XG4gICAgfVxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbWcjYXR0ci11c2VtYXBcbiAgICB2YXIgY2hpbGRPZkludGVyYWN0aXZlID0gZ2V0UGFyZW50cyh7XG4gICAgICAgIGNvbnRleHQ6IGltZ1xuICAgIH0pLnNsaWNlKDEpLnNvbWUoZnVuY3Rpb24oX2VsZW1lbnQpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gbmFtZSA9PT0gXCJidXR0b25cIiB8fCBuYW1lID09PSBcImFcIjtcbiAgICB9KTtcbiAgICBpZiAoY2hpbGRPZkludGVyYWN0aXZlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG52YXIgc3VwcG9ydHMkMyA9IHZvaWQgMDtcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9kaXNhYmxlZC1lbGVtZW50cy5odG1sI2NvbmNlcHQtZWxlbWVudC1kaXNhYmxlZFxudmFyIGRpc2FibGVkRWxlbWVudHNQYXR0ZXJuID0gdm9pZCAwO1xudmFyIGRpc2FibGVkRWxlbWVudHMgPSB7XG4gICAgaW5wdXQ6IHRydWUsXG4gICAgc2VsZWN0OiB0cnVlLFxuICAgIHRleHRhcmVhOiB0cnVlLFxuICAgIGJ1dHRvbjogdHJ1ZSxcbiAgICBmaWVsZHNldDogdHJ1ZSxcbiAgICBmb3JtOiB0cnVlXG59O1xuZnVuY3Rpb24gaXNOYXRpdmVEaXNhYmxlZFN1cHBvcnRlZChjb250ZXh0KSB7XG4gICAgaWYgKCFzdXBwb3J0cyQzKSB7XG4gICAgICAgIHN1cHBvcnRzJDMgPSBfc3VwcG9ydHMoKTtcbiAgICAgICAgaWYgKHN1cHBvcnRzJDMuZm9jdXNGaWVsZHNldERpc2FibGVkKSB7XG4gICAgICAgICAgICBkZWxldGUgZGlzYWJsZWRFbGVtZW50cy5maWVsZHNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3VwcG9ydHMkMy5mb2N1c0Zvcm1EaXNhYmxlZCkge1xuICAgICAgICAgICAgZGVsZXRlIGRpc2FibGVkRWxlbWVudHMuZm9ybTtcbiAgICAgICAgfVxuICAgICAgICBkaXNhYmxlZEVsZW1lbnRzUGF0dGVybiA9IG5ldyBSZWdFeHAoXCJeKFwiICsgT2JqZWN0LmtleXMoZGlzYWJsZWRFbGVtZW50cykuam9pbihcInxcIikgKyBcIikkXCIpO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHRUb0VsZW1lbnQoe1xuICAgICAgICBsYWJlbDogXCJpcy9uYXRpdmUtZGlzYWJsZWQtc3VwcG9ydGVkXCIsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICB9KTtcbiAgICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIEJvb2xlYW4oZGlzYWJsZWRFbGVtZW50c1BhdHRlcm4udGVzdChub2RlTmFtZSkpO1xufVxudmFyIHN1cHBvcnRzJDQgPSB2b2lkIDA7XG5mdW5jdGlvbiBpc0Rpc2FibGVkRmllbGRzZXQoZWxlbWVudCkge1xuICAgIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbm9kZU5hbWUgPT09IFwiZmllbGRzZXRcIiAmJiBlbGVtZW50LmRpc2FibGVkO1xufVxuZnVuY3Rpb24gaXNEaXNhYmxlZEZvcm0oZWxlbWVudCkge1xuICAgIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbm9kZU5hbWUgPT09IFwiZm9ybVwiICYmIGVsZW1lbnQuZGlzYWJsZWQ7XG59XG5mdW5jdGlvbiBpc0Rpc2FibGVkKGNvbnRleHQpIHtcbiAgICBpZiAoIXN1cHBvcnRzJDQpIHtcbiAgICAgICAgc3VwcG9ydHMkNCA9IF9zdXBwb3J0cygpO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHRUb0VsZW1lbnQoe1xuICAgICAgICBsYWJlbDogXCJpcy9kaXNhYmxlZFwiLFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfSk7XG4gICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiZGF0YS1hbGx5LWRpc2FibGVkXCIpKSB7XG4gICAgICAgIC8vIHRyZWF0IGFsbHkncyBlbGVtZW50L2Rpc2FibGVkIGxpa2UgdGhlIERPTSBuYXRpdmUgZWxlbWVudC5kaXNhYmxlZFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFpc05hdGl2ZURpc2FibGVkU3VwcG9ydGVkKGVsZW1lbnQpKSB7XG4gICAgICAgIC8vIG5vbi1mb3JtIGVsZW1lbnRzIGRvIG5vdCBzdXBwb3J0IHRoZSBkaXNhYmxlZCBhdHRyaWJ1dGVcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5kaXNhYmxlZCkge1xuICAgICAgICAvLyB0aGUgZWxlbWVudCBpdHNlbGYgaXMgZGlzYWJsZWRcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBwYXJlbnRzID0gZ2V0UGFyZW50cyh7XG4gICAgICAgIGNvbnRleHQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgICBpZiAocGFyZW50cy5zb21lKGlzRGlzYWJsZWRGaWVsZHNldCkpIHtcbiAgICAgICAgLy8gYSBwYXJlbnRhbCA8ZmllbGRzZXQ+IGlzIGRpc2FibGQgYW5kIGluaGVyaXRzIHRoZSBzdGF0ZSBvbnRvIHRoaXMgZWxlbWVudFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFzdXBwb3J0cyQ0LmZvY3VzRm9ybURpc2FibGVkICYmIHBhcmVudHMuc29tZShpc0Rpc2FibGVkRm9ybSkpIHtcbiAgICAgICAgLy8gYSBwYXJlbnRhbCA8Zm9ybT4gaXMgZGlzYWJsZCBhbmQgaW5oZXJpdHMgdGhlIHN0YXRlIG9udG8gdGhpcyBlbGVtZW50XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc09ubHlUYWJiYWJsZVJ1bGVzKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSwgY29udGV4dCA9IF9yZWYuY29udGV4dCwgX3JlZiRleGNlcHQgPSBfcmVmLmV4Y2VwdCwgZXhjZXB0ID0gX3JlZiRleGNlcHQgPT09IHVuZGVmaW5lZCA/IHtcbiAgICAgICAgb25seUZvY3VzYWJsZUJyb3dzaW5nQ29udGV4dDogZmFsc2UsXG4gICAgICAgIHZpc2libGU6IGZhbHNlXG4gICAgfSA6IF9yZWYkZXhjZXB0O1xuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcImlzL29ubHktdGFiYmFibGVcIixcbiAgICAgICAgcmVzb2x2ZURvY3VtZW50OiB0cnVlLFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfSk7XG4gICAgaWYgKCFleGNlcHQudmlzaWJsZSAmJiAhaXNWaXNpYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFleGNlcHQub25seUZvY3VzYWJsZUJyb3dzaW5nQ29udGV4dCAmJiAocGxhdGZvcm0uaXMuR0VDS08gfHwgcGxhdGZvcm0uaXMuVFJJREVOVCB8fCBwbGF0Zm9ybS5pcy5FREdFKSkge1xuICAgICAgICB2YXIgZnJhbWVFbGVtZW50ID0gZ2V0RnJhbWVFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBpZiAoZnJhbWVFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAodGFiaW5kZXhWYWx1ZShmcmFtZUVsZW1lbnQpIDwgMCkge1xuICAgICAgICAgICAgICAgIC8vIGlmcmFtZVt0YWJpbmRleD1cIi0xXCJdIGFuZCBvYmplY3RbdGFiaW5kZXg9XCItMVwiXSBpbmhlcml0IHRoZVxuICAgICAgICAgICAgICAgIC8vIHRhYmJhYmxlIGRlbW90aW9uIG9udG8gZWxlbWVudHMgb2YgdGhlaXIgYnJvd3NpbmcgY29udGV4dHNcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciB0YWJpbmRleCA9IHRhYmluZGV4VmFsdWUoZWxlbWVudCk7XG4gICAgaWYgKG5vZGVOYW1lID09PSBcImxhYmVsXCIgJiYgcGxhdGZvcm0uaXMuR0VDS08pIHtcbiAgICAgICAgLy8gRmlyZWZveCBjYW5ub3QgZm9jdXMsIGJ1dCB0YWIgdG86IGxhYmVsW3RhYmluZGV4PTBdXG4gICAgICAgIHJldHVybiB0YWJpbmRleCAhPT0gbnVsbCAmJiB0YWJpbmRleCA+PSAwO1xuICAgIH1cbiAgICAvLyBTVkcgRWxlbWVudHMgd2VyZSBrZXlib2FyZCBmb2N1c2FibGUgYnV0IG5vdCBzY3JpcHQgZm9jdXNhYmxlIGJlZm9yZSBGaXJlZm94IDUxLlxuICAgIC8vIEZpcmVmb3ggNTEgYWRkZWQgdGhlIGZvY3VzIG1hbmFnZW1lbnQgRE9NIEFQSSAoLmZvY3VzIGFuZCAuYmx1cikgdG8gU1ZHRWxlbWVudCxcbiAgICAvLyBzZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4NjU0XG4gICAgaWYgKHBsYXRmb3JtLmlzLkdFQ0tPICYmIGVsZW1lbnQub3duZXJTVkdFbGVtZW50ICYmICFlbGVtZW50LmZvY3VzKSB7XG4gICAgICAgIGlmIChub2RlTmFtZSA9PT0gXCJhXCIgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJ4bGluazpocmVmXCIpKSB7XG4gICAgICAgICAgICAvLyBhbnkgZm9jdXNhYmxlIGNoaWxkIG9mIDxzdmc+IGNhbm5vdCBiZSBmb2N1c2VkLCBidXQgdGFiYmVkIHRvXG4gICAgICAgICAgICBpZiAocGxhdGZvcm0uaXMuR0VDS08pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4vLyBiaW5kIGV4Y2VwdGlvbnMgdG8gYW4gaXRlcmF0b3IgY2FsbGJhY2tcbmlzT25seVRhYmJhYmxlUnVsZXMuZXhjZXB0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGV4Y2VwdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIGlzT25seVRhYmJhYmxlID0gZnVuY3Rpb24gaXNPbmx5VGFiYmFibGUoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gaXNPbmx5VGFiYmFibGVSdWxlcyh7XG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgICAgZXhjZXB0OiBleGNlcHRcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBpc09ubHlUYWJiYWJsZS5ydWxlcyA9IGlzT25seVRhYmJhYmxlUnVsZXM7XG4gICAgcmV0dXJuIGlzT25seVRhYmJhYmxlO1xufTtcbi8vIHByb3ZpZGUgaXNPbmx5VGFiYmFibGUoY29udGV4dCkgYXMgZGVmYXVsdCBpdGVyYXRvciBjYWxsYmFja1xudmFyIGlzT25seVRhYmJhYmxlID0gaXNPbmx5VGFiYmFibGVSdWxlcy5leGNlcHQoe30pO1xudmFyIHN1cHBvcnRzJDUgPSB2b2lkIDA7XG5mdW5jdGlvbiBpc09ubHlGb2N1c1JlbGV2YW50KGVsZW1lbnQpIHtcbiAgICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vZGVOYW1lID09PSBcImVtYmVkXCIgfHwgbm9kZU5hbWUgPT09IFwia2V5Z2VuXCIpIHtcbiAgICAgICAgLy8gZW1iZWQgaXMgY29uc2lkZXJlZCBmb2N1cy1yZWxldmFudCBidXQgbm90IGZvY3VzYWJsZVxuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9hbGx5LmpzL2lzc3Vlcy84MlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIF90YWJpbmRleCA9IHRhYmluZGV4VmFsdWUoZWxlbWVudCk7XG4gICAgaWYgKGVsZW1lbnQuc2hhZG93Um9vdCAmJiBfdGFiaW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgLy8gU2hhZG93RE9NIGhvc3QgZWxlbWVudHMgKm1heSogcmVjZWl2ZSBmb2N1c1xuICAgICAgICAvLyBldmVuIHRob3VnaCB0aGV5IGFyZSBub3QgY29uc2lkZXJlZCBmb2N1YWJsZVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcImxhYmVsXCIpIHtcbiAgICAgICAgLy8gPGxhYmVsIHRhYmluZGV4PVwiMFwiPiBpcyBvbmx5IHRhYmJhYmxlIGluIEZpcmVmb3gsIG5vdCBzY3JpcHQtZm9jdXNhYmxlXG4gICAgICAgIC8vIHRoZXJlJ3Mgbm8gd2F5IHRvIG1ha2UgYW4gZWxlbWVudCBmb2N1c2FibGUgb3RoZXIgdGhhbiBieSBhZGRpbmcgYSB0YWJpbmRleCxcbiAgICAgICAgLy8gYW5kIGZvY3VzIGJlaGF2aW9yIG9mIHRoZSBsYWJlbCBlbGVtZW50IHNlZW1zIGhhcmQtd2lyZWQgdG8gaWdub3JlIHRhYmluZGV4XG4gICAgICAgIC8vIGluIHNvbWUgYnJvd3NlcnMgKGxpa2UgR2Vja28sIEJsaW5rIGFuZCBXZWJLaXQpXG4gICAgICAgIHJldHVybiAhc3VwcG9ydHMkNS5mb2N1c0xhYmVsVGFiaW5kZXggfHwgX3RhYmluZGV4ID09PSBudWxsO1xuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwibGVnZW5kXCIpIHtcbiAgICAgICAgcmV0dXJuIF90YWJpbmRleCA9PT0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHN1cHBvcnRzJDUuZm9jdXNTdmdGb2N1c2FibGVBdHRyaWJ1dGUgJiYgKGVsZW1lbnQub3duZXJTVkdFbGVtZW50IHx8IG5vZGVOYW1lID09PSBcInN2Z1wiKSkge1xuICAgICAgICAvLyBJbnRlcm5ldCBFeHBsb3JlciB1bmRlcnN0YW5kcyB0aGUgZm9jdXNhYmxlIGF0dHJpYnV0ZSBpbnRyb2R1Y2VkIGluIFNWRyBUaW55IDEuMlxuICAgICAgICB2YXIgZm9jdXNhYmxlQXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJmb2N1c2FibGVcIik7XG4gICAgICAgIHJldHVybiBmb2N1c2FibGVBdHRyaWJ1dGUgJiYgZm9jdXNhYmxlQXR0cmlidXRlID09PSBcImZhbHNlXCI7XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJpbWdcIiAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcInVzZW1hcFwiKSkge1xuICAgICAgICAvLyBHZWNrbywgVHJpZGVudCBhbmQgRWRnZSBkbyBub3QgYWxsb3cgYW4gaW1hZ2Ugd2l0aCBhbiBpbWFnZSBtYXAgYW5kIHRhYmluZGV4IHRvIGJlIGZvY3VzZWQsXG4gICAgICAgIC8vIGl0IGFwcGVhcnMgdGhlIHRhYmluZGV4IGlzIG92ZXJydWxlZCBzbyBmb2N1cyBpcyBzdGlsbCBmb3J3YXJkZWQgdG8gdGhlIDxtYXA+XG4gICAgICAgIHJldHVybiBfdGFiaW5kZXggPT09IG51bGwgfHwgIXN1cHBvcnRzJDUuZm9jdXNJbWdVc2VtYXBUYWJpbmRleDtcbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcImFyZWFcIikge1xuICAgICAgICAvLyBhbGwgPGFyZWE+cyBhcmUgY29uc2lkZXJlZCByZWxldmFudCxcbiAgICAgICAgLy8gYnV0IG9ubHkgdGhlIHZhbGlkIDxhcmVhPnMgYXJlIGZvY3VzYWJsZVxuICAgICAgICByZXR1cm4gIWlzVmFsaWRBcmVhKGVsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBpc0ZvY3VzYWJsZVJ1bGVzKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSwgY29udGV4dCA9IF9yZWYuY29udGV4dCwgX3JlZiRleGNlcHQgPSBfcmVmLmV4Y2VwdCwgZXhjZXB0ID0gX3JlZiRleGNlcHQgPT09IHVuZGVmaW5lZCA/IHtcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb25seVRhYmJhYmxlOiBmYWxzZVxuICAgIH0gOiBfcmVmJGV4Y2VwdDtcbiAgICBpZiAoIXN1cHBvcnRzJDUpIHtcbiAgICAgICAgc3VwcG9ydHMkNSA9IF9zdXBwb3J0cygpO1xuICAgIH1cbiAgICB2YXIgX2lzT25seVRhYmJhYmxlID0gaXNPbmx5VGFiYmFibGUucnVsZXMuZXhjZXB0KHtcbiAgICAgICAgb25seUZvY3VzYWJsZUJyb3dzaW5nQ29udGV4dDogdHJ1ZSxcbiAgICAgICAgdmlzaWJsZTogZXhjZXB0LnZpc2libGVcbiAgICB9KTtcbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHRUb0VsZW1lbnQoe1xuICAgICAgICBsYWJlbDogXCJpcy9mb2N1c2FibGVcIixcbiAgICAgICAgcmVzb2x2ZURvY3VtZW50OiB0cnVlLFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfSk7XG4gICAgdmFyIGZvY3VzUmVsZXZhbnQgPSBpc0ZvY3VzUmVsZXZhbnQucnVsZXMoe1xuICAgICAgICBjb250ZXh0OiBlbGVtZW50LFxuICAgICAgICBleGNlcHQ6IGV4Y2VwdFxuICAgIH0pO1xuICAgIGlmICghZm9jdXNSZWxldmFudCB8fCBpc09ubHlGb2N1c1JlbGV2YW50KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFleGNlcHQuZGlzYWJsZWQgJiYgaXNEaXNhYmxlZChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghZXhjZXB0Lm9ubHlUYWJiYWJsZSAmJiBfaXNPbmx5VGFiYmFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgLy8gc29tZSBlbGVtZW50cyBtYXkgYmUga2V5Ym9hcmQgZm9jdXNhYmxlLCBidXQgbm90IHNjcmlwdCBmb2N1c2FibGVcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBlbGVtZW50cyB0aGF0IGFyZSBub3QgcmVuZGVyZWQsIGNhbm5vdCBiZSBmb2N1c2VkXG4gICAgaWYgKCFleGNlcHQudmlzaWJsZSkge1xuICAgICAgICB2YXIgdmlzaWJpbGl0eU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBjb250ZXh0OiBlbGVtZW50LFxuICAgICAgICAgICAgZXhjZXB0OiB7fVxuICAgICAgICB9O1xuICAgICAgICBpZiAoc3VwcG9ydHMkNS5mb2N1c0luSGlkZGVuSWZyYW1lKSB7XG4gICAgICAgICAgICAvLyBXZWJLaXQgYW5kIEJsaW5rIGNhbiBmb2N1cyBjb250ZW50IGluIGhpZGRlbiA8aWZyYW1lPiBhbmQgPG9iamVjdD5cbiAgICAgICAgICAgIHZpc2liaWxpdHlPcHRpb25zLmV4Y2VwdC5icm93c2luZ0NvbnRleHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdXBwb3J0cyQ1LmZvY3VzT2JqZWN0U3ZnSGlkZGVuKSB7XG4gICAgICAgICAgICAvLyBCbGluayBhbGxvd3MgZm9jdXNpbmcgdGhlIG9iamVjdCBlbGVtZW50LCBldmVuIGlmIGl0IGhhcyB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAvLyBAYnJvd3Nlci1pc3N1ZSBCbGluayBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg2MTkxXG4gICAgICAgICAgICB2YXIgX25vZGVOYW1lMiA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChfbm9kZU5hbWUyID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eU9wdGlvbnMuZXhjZXB0LmNzc1Zpc2liaWxpdHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghaXNWaXNpYmxlLnJ1bGVzKHZpc2liaWxpdHlPcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKGZyYW1lRWxlbWVudCkge1xuICAgICAgICB2YXIgX25vZGVOYW1lID0gZnJhbWVFbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChfbm9kZU5hbWUgPT09IFwib2JqZWN0XCIgJiYgIXN1cHBvcnRzJDUuZm9jdXNJblplcm9EaW1lbnNpb25PYmplY3QpIHtcbiAgICAgICAgICAgIGlmICghZnJhbWVFbGVtZW50Lm9mZnNldFdpZHRoIHx8ICFmcmFtZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgLy8gV2ViS2l0IGNhbiBub3QgZm9jdXMgY29udGVudCBpbiA8b2JqZWN0PiBpZiBpdCBkb2Vzbid0IGhhdmUgZGltZW5zaW9uc1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgbm9kZU5hbWUgPSBlbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vZGVOYW1lID09PSBcInN2Z1wiICYmIHN1cHBvcnRzJDUuZm9jdXNTdmdJbklmcmFtZSAmJiAhZnJhbWVFbGVtZW50ICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIikgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIGJpbmQgZXhjZXB0aW9ucyB0byBhbiBpdGVyYXRvciBjYWxsYmFja1xuaXNGb2N1c2FibGVSdWxlcy5leGNlcHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZXhjZXB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgaXNGb2N1c2FibGUgPSBmdW5jdGlvbiBpc0ZvY3VzYWJsZShjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBpc0ZvY3VzYWJsZVJ1bGVzKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICAgICAgICBleGNlcHQ6IGV4Y2VwdFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGlzRm9jdXNhYmxlLnJ1bGVzID0gaXNGb2N1c2FibGVSdWxlcztcbiAgICByZXR1cm4gaXNGb2N1c2FibGU7XG59O1xuLy8gcHJvdmlkZSBpc0ZvY3VzUmVsZXZhbnQoY29udGV4dCkgYXMgZGVmYXVsdCBpdGVyYXRvciBjYWxsYmFja1xudmFyIGlzRm9jdXNhYmxlID0gaXNGb2N1c2FibGVSdWxlcy5leGNlcHQoe30pO1xuZnVuY3Rpb24gY3JlYXRlRmlsdGVyKGNvbmRpdGlvbikge1xuICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvTm9kZUZpbHRlclxuICAgIHZhciBmaWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5zaGFkb3dSb290KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gU2hhZG93Um9vdCBlbGVtZW50cyByZWdhcmRsZXNzIG9mIHRoZW0gYmVpbmcgZm9jdXNhYmxlLFxuICAgICAgICAgICAgLy8gc28gdGhleSBjYW4gYmUgd2Fsa2VkIHJlY3Vyc2l2ZWx5IGxhdGVyXG4gICAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25kaXRpb24obm9kZSkpIHtcbiAgICAgICAgICAgIC8vIGZpbmRzIGVsZW1lbnRzIHRoYXQgY291bGQgaGF2ZSBiZWVuIGZvdW5kIGJ5IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoKVxuICAgICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICB9O1xuICAgIC8vIElFIHJlcXVpcmVzIGEgZnVuY3Rpb24sIEJyb3dzZXJzIHJlcXVpcmUge2FjY2VwdE5vZGU6IGZ1bmN0aW9ufVxuICAgIC8vIHNlZSBodHRwOi8vd3d3LmJlbm5hZGVsLmNvbS9ibG9nLzI2MDctZmluZGluZy1odG1sLWNvbW1lbnQtbm9kZXMtaW4tdGhlLWRvbS11c2luZy10cmVld2Fsa2VyLmh0bVxuICAgIGZpbHRlci5hY2NlcHROb2RlID0gZmlsdGVyO1xuICAgIHJldHVybiBmaWx0ZXI7XG59XG52YXIgUG9zc2libHlGb2N1c2FibGVGaWx0ZXIgPSBjcmVhdGVGaWx0ZXIoaXNGb2N1c1JlbGV2YW50KTtcbmZ1bmN0aW9uIHF1ZXJ5Rm9jdXNhYmxlU3RyaWN0KCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSwgY29udGV4dCA9IF9yZWYuY29udGV4dCwgaW5jbHVkZUNvbnRleHQgPSBfcmVmLmluY2x1ZGVDb250ZXh0LCBpbmNsdWRlT25seVRhYmJhYmxlID0gX3JlZi5pbmNsdWRlT25seVRhYmJhYmxlLCBzdHJhdGVneSA9IF9yZWYuc3RyYXRlZ3k7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIGNvbnRleHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHZhciBfaXNGb2N1c2FibGUgPSBpc0ZvY3VzYWJsZS5ydWxlcy5leGNlcHQoe1xuICAgICAgICBvbmx5VGFiYmFibGU6IGluY2x1ZGVPbmx5VGFiYmFibGVcbiAgICB9KTtcbiAgICB2YXIgX2RvY3VtZW50ID0gZ2V0RG9jdW1lbnQoY29udGV4dCk7XG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9jcmVhdGVUcmVlV2Fsa2VyXG4gICAgdmFyIHdhbGtlciA9IF9kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKC8vIHJvb3QgZWxlbWVudCB0byBzdGFydCBzZWFyY2ggaW5cbiAgICBjb250ZXh0LCAvLyBlbGVtZW50IHR5cGUgZmlsdGVyXG4gICAgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIC8vIGN1c3RvbSBOb2RlRmlsdGVyIGZpbHRlclxuICAgIHN0cmF0ZWd5ID09PSBcImFsbFwiID8gUG9zc2libHlGb2N1c2FibGVGaWx0ZXIgOiBjcmVhdGVGaWx0ZXIoX2lzRm9jdXNhYmxlKSwgLy8gZGVwcmVjYXRlZCwgYnV0IElFIHJlcXVpcmVzIGl0XG4gICAgZmFsc2UpO1xuICAgIHZhciBsaXN0ID0gW107XG4gICAgd2hpbGUod2Fsa2VyLm5leHROb2RlKCkpe1xuICAgICAgICBpZiAod2Fsa2VyLmN1cnJlbnROb2RlLnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgIGlmIChfaXNGb2N1c2FibGUod2Fsa2VyLmN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgICAgIGxpc3QucHVzaCh3YWxrZXIuY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGlzdCA9IGxpc3QuY29uY2F0KHF1ZXJ5Rm9jdXNhYmxlU3RyaWN0KHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB3YWxrZXIuY3VycmVudE5vZGUuc2hhZG93Um9vdCxcbiAgICAgICAgICAgICAgICBpbmNsdWRlT25seVRhYmJhYmxlOiBpbmNsdWRlT25seVRhYmJhYmxlLFxuICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBzdHJhdGVneVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGlzdC5wdXNoKHdhbGtlci5jdXJyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWRkIGNvbnRleHQgaWYgcmVxdWVzdGVkIGFuZCBmb2N1c2FibGVcbiAgICBpZiAoaW5jbHVkZUNvbnRleHQpIHtcbiAgICAgICAgaWYgKHN0cmF0ZWd5ID09PSBcImFsbFwiKSB7XG4gICAgICAgICAgICBpZiAoaXNGb2N1c1JlbGV2YW50KGNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgbGlzdC51bnNoaWZ0KGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKF9pc0ZvY3VzYWJsZShjb250ZXh0KSkge1xuICAgICAgICAgICAgbGlzdC51bnNoaWZ0KGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xufVxuLy8gTk9URTogdGhpcyBzZWxlY3RvciBNVVNUICpuZXZlciogYmUgdXNlZCBkaXJlY3RseSxcbnZhciBzdXBwb3J0cyQ2ID0gdm9pZCAwO1xudmFyIHNlbGVjdG9yJDEgPSB2b2lkIDA7XG5mdW5jdGlvbiBzZWxlY3RvciQyKCkge1xuICAgIGlmICghc3VwcG9ydHMkNikge1xuICAgICAgICBzdXBwb3J0cyQ2ID0gX3N1cHBvcnRzKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IkMSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gc2VsZWN0b3IkMTtcbiAgICB9XG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VkaXRpbmcuaHRtbCNzZXF1ZW50aWFsLWZvY3VzLW5hdmlnYXRpb24tYW5kLXRoZS10YWJpbmRleC1hdHRyaWJ1dGVcbiAgICBzZWxlY3RvciQxID0gXCJcIiArIC8vIElFMTEgc3VwcG9ydHMuY2FuIGZvY3VzIDx0YWJsZT4gYW5kIDx0ZD5cbiAgICAoc3VwcG9ydHMkNi5mb2N1c1RhYmxlID8gXCJ0YWJsZSwgdGQsXCIgOiBcIlwiKSArIC8vIElFMTEgc3VwcG9ydHMuY2FuIGZvY3VzIDxmaWVsZHNldD5cbiAgICAoc3VwcG9ydHMkNi5mb2N1c0ZpZWxkc2V0ID8gXCJmaWVsZHNldCxcIiA6IFwiXCIpICsgLy8gTmFtZXNwYWNlIHByb2JsZW1zIG9mIFt4bGluazpocmVmXSBleHBsYWluZWQgaW4gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIzMDQ3ODg4LzUxNTEyNFxuICAgIC8vIHN2ZyBhWyp8aHJlZl0gZG9lcyBub3QgbWF0Y2ggaW4gSUU5LCBidXQgc2luY2Ugd2UncmUgZmlsdGVyaW5nXG4gICAgLy8gdGhyb3VnaCBpcy9mb2N1c2FibGUgd2UgY2FuIGluY2x1ZGUgYWxsIDxhPiBmcm9tIFNWR1xuICAgIFwic3ZnIGEsXCIgKyAvLyBtYXkgYmVoYXZlIGFzICdzdmcsIHN2ZyAqLCcgaW4gY2hyb21lIGFzICpldmVyeSogc3ZnIGVsZW1lbnQgd2l0aCBhIGZvY3VzIGV2ZW50IGxpc3RlbmVyIGlzIGZvY3VzYWJsZVxuICAgIC8vIG5hdmlnYXRpb25hbCBlbGVtZW50c1xuICAgIFwiYVtocmVmXSxcIiArIC8vIHZhbGlkaXR5IGRldGVybWluZWQgYnkgaXMvdmFsaWQtYXJlYS5qc1xuICAgIFwiYXJlYVtocmVmXSxcIiArIC8vIHZhbGlkaXR5IGRldGVybWluZWQgYnkgaXMvZGlzYWJsZWQuanNcbiAgICBcImlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBidXR0b24sXCIgKyAvLyBicm93c2luZyBjb250ZXh0IGNvbnRhaW5lcnNcbiAgICBcImlmcmFtZSwgb2JqZWN0LCBlbWJlZCxcIiArIC8vIGludGVyYWN0aXZlIGNvbnRlbnRcbiAgICBcImtleWdlbixcIiArIChzdXBwb3J0cyQ2LmZvY3VzQXVkaW9XaXRob3V0Q29udHJvbHMgPyBcImF1ZGlvLFwiIDogXCJhdWRpb1tjb250cm9sc10sXCIpICsgKHN1cHBvcnRzJDYuZm9jdXNWaWRlb1dpdGhvdXRDb250cm9scyA/IFwidmlkZW8sXCIgOiBcInZpZGVvW2NvbnRyb2xzXSxcIikgKyAoc3VwcG9ydHMkNi5mb2N1c1N1bW1hcnkgPyBcInN1bW1hcnksXCIgOiBcIlwiKSArIC8vIHZhbGlkaXR5IGRldGVybWluZWQgYnkgaXMvdmFsaWQtdGFiaW5kZXguanNcbiAgICBcIlt0YWJpbmRleF0sXCIgKyAvLyBlZGl0aW5nIGhvc3RzXG4gICAgXCJbY29udGVudGVkaXRhYmxlXVwiO1xuICAgIC8vIHdoZXJlIFNoYWRvd0RPTSBpcyBzdXBwb3J0ZWQsIHdlIGFsc28gd2FudCB0aGUgc2hhZG93ZWQgZm9jdXNhYmxlIGVsZW1lbnRzICh2aWEgXCI+Pj5cIiBvciBcIi9kZWVwL1wiKVxuICAgIHNlbGVjdG9yJDEgPSBzZWxlY3RJblNoYWRvd3Moc2VsZWN0b3IkMSk7XG4gICAgcmV0dXJuIHNlbGVjdG9yJDE7XG59XG5mdW5jdGlvbiBxdWVyeUZvY3VzYWJsZVF1aWNrKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSwgY29udGV4dCA9IF9yZWYuY29udGV4dCwgaW5jbHVkZUNvbnRleHQgPSBfcmVmLmluY2x1ZGVDb250ZXh0LCBpbmNsdWRlT25seVRhYmJhYmxlID0gX3JlZi5pbmNsdWRlT25seVRhYmJhYmxlO1xuICAgIHZhciBfc2VsZWN0b3IgPSBzZWxlY3RvciQyKCk7XG4gICAgdmFyIGVsZW1lbnRzID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKF9zZWxlY3Rvcik7XG4gICAgLy8gdGhlIHNlbGVjdG9yIHBvdGVudGlhbGx5IG1hdGNoZXMgbW9yZSB0aGFuIHJlYWxseSBpcyBmb2N1c2FibGVcbiAgICB2YXIgX2lzRm9jdXNhYmxlID0gaXNGb2N1c2FibGUucnVsZXMuZXhjZXB0KHtcbiAgICAgICAgb25seVRhYmJhYmxlOiBpbmNsdWRlT25seVRhYmJhYmxlXG4gICAgfSk7XG4gICAgdmFyIHJlc3VsdCA9IFtdLmZpbHRlci5jYWxsKGVsZW1lbnRzLCBfaXNGb2N1c2FibGUpO1xuICAgIC8vIGFkZCBjb250ZXh0IGlmIHJlcXVlc3RlZCBhbmQgZm9jdXNhYmxlXG4gICAgaWYgKGluY2x1ZGVDb250ZXh0ICYmIF9pc0ZvY3VzYWJsZShjb250ZXh0KSkge1xuICAgICAgICByZXN1bHQudW5zaGlmdChjb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIHF1ZXJ5Rm9jdXNhYmxlKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSwgY29udGV4dCA9IF9yZWYuY29udGV4dCwgaW5jbHVkZUNvbnRleHQgPSBfcmVmLmluY2x1ZGVDb250ZXh0LCBpbmNsdWRlT25seVRhYmJhYmxlID0gX3JlZi5pbmNsdWRlT25seVRhYmJhYmxlLCBfcmVmJHN0cmF0ZWd5ID0gX3JlZi5zdHJhdGVneSwgc3RyYXRlZ3kgPSBfcmVmJHN0cmF0ZWd5ID09PSB1bmRlZmluZWQgPyBcInF1aWNrXCIgOiBfcmVmJHN0cmF0ZWd5O1xuICAgIHZhciBlbGVtZW50ID0gY29udGV4dFRvRWxlbWVudCh7XG4gICAgICAgIGxhYmVsOiBcInF1ZXJ5L2ZvY3VzYWJsZVwiLFxuICAgICAgICByZXNvbHZlRG9jdW1lbnQ6IHRydWUsXG4gICAgICAgIGRlZmF1bHRUb0RvY3VtZW50OiB0cnVlLFxuICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgfSk7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIGNvbnRleHQ6IGVsZW1lbnQsXG4gICAgICAgIGluY2x1ZGVDb250ZXh0OiBpbmNsdWRlQ29udGV4dCxcbiAgICAgICAgaW5jbHVkZU9ubHlUYWJiYWJsZTogaW5jbHVkZU9ubHlUYWJiYWJsZSxcbiAgICAgICAgc3RyYXRlZ3k6IHN0cmF0ZWd5XG4gICAgfTtcbiAgICBpZiAoc3RyYXRlZ3kgPT09IFwicXVpY2tcIikge1xuICAgICAgICByZXR1cm4gcXVlcnlGb2N1c2FibGVRdWljayhvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHN0cmF0ZWd5ID09PSBcInN0cmljdFwiIHx8IHN0cmF0ZWd5ID09PSBcImFsbFwiKSB7XG4gICAgICAgIHJldHVybiBxdWVyeUZvY3VzYWJsZVN0cmljdChvcHRpb25zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncXVlcnkvZm9jdXNhYmxlIHJlcXVpcmVzIG9wdGlvbi5zdHJhdGVneSB0byBiZSBvbmUgb2YgW1wicXVpY2tcIiwgXCJzdHJpY3RcIiwgXCJhbGxcIl0nKTtcbn1cbnZhciBzdXBwb3J0cyQ3ID0gdm9pZCAwO1xuLy8gSW50ZXJuZXQgRXhwbG9yZXIgMTEgY29uc2lkZXJzIGZpZWxkc2V0LCB0YWJsZSwgdGQgZm9jdXNhYmxlLCBidXQgbm90IHRhYmJhYmxlXG4vLyBJbnRlcm5ldCBFeHBsb3JlciAxMSBjb25zaWRlcnMgYm9keSB0byBoYXZlIFt0YWJpbmRleD0wXSwgYnV0IGRvZXMgbm90IGFsbG93IHRhYmJpbmcgdG8gaXRcbnZhciBmb2N1c2FibGVFbGVtZW50c1BhdHRlcm4gPSAvXihmaWVsZHNldHx0YWJsZXx0ZHxib2R5KSQvO1xuZnVuY3Rpb24gaXNUYWJiYWJsZVJ1bGVzKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSwgY29udGV4dCA9IF9yZWYuY29udGV4dCwgX3JlZiRleGNlcHQgPSBfcmVmLmV4Y2VwdCwgZXhjZXB0ID0gX3JlZiRleGNlcHQgPT09IHVuZGVmaW5lZCA/IHtcbiAgICAgICAgZmxleGJveDogZmFsc2UsXG4gICAgICAgIHNjcm9sbGFibGU6IGZhbHNlLFxuICAgICAgICBzaGFkb3c6IGZhbHNlLFxuICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgb25seVRhYmJhYmxlOiBmYWxzZVxuICAgIH0gOiBfcmVmJGV4Y2VwdDtcbiAgICBpZiAoIXN1cHBvcnRzJDcpIHtcbiAgICAgICAgc3VwcG9ydHMkNyA9IF9zdXBwb3J0cygpO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudCA9IGNvbnRleHRUb0VsZW1lbnQoe1xuICAgICAgICBsYWJlbDogXCJpcy90YWJiYWJsZVwiLFxuICAgICAgICByZXNvbHZlRG9jdW1lbnQ6IHRydWUsXG4gICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICB9KTtcbiAgICBpZiAocGxhdGZvcm0uaXMuQkxJTksgJiYgcGxhdGZvcm0uaXMuQU5EUk9JRCAmJiBwbGF0Zm9ybS5tYWpvclZlcnNpb24gPiA0Mikge1xuICAgICAgICAvLyBFeHRlcm5hbCBrZXlib2FyZCBzdXBwb3J0IHdvcmtlZCBmaW5lIGluIENIcm9tZSA0MiwgYnV0IHN0b3BwZWQgd29ya2luZyBpbiBDaHJvbWUgNDUuXG4gICAgICAgIC8vIFRoZSBvbi1zY3JlZW4ga2V5Ym9hcmQgZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBmb2N1cyB0aGUgbmV4dCBpbnB1dCBlbGVtZW50IChsaWtlIGlPUyBkb2VzKS5cbiAgICAgICAgLy8gVGhhdCBsZWF2ZXMgdXMgd2l0aCBubyBvcHRpb24gdG8gYWR2YW5jZSBmb2N1cyBieSBrZXlib2FyZCwgZXJnbyBub3RoaW5nIGlzIHRhYmJhYmxlIChrZXlib2FyZCBmb2N1c2FibGUpLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKGZyYW1lRWxlbWVudCkge1xuICAgICAgICBpZiAocGxhdGZvcm0uaXMuV0VCS0lUICYmIHBsYXRmb3JtLmlzLklPUykge1xuICAgICAgICAgICAgLy8gaU9TIG9ubHkgZG9lcyBub3QgY29uc2lkZXIgYW55dGhpbmcgZnJvbSBhbm90aGVyIGJyb3dzaW5nIGNvbnRleHQga2V5Ym9hcmQgZm9jdXNhYmxlXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWZyYW1lW3RhYmluZGV4PVwiLTFcIl0gYW5kIG9iamVjdFt0YWJpbmRleD1cIi0xXCJdIGluaGVyaXQgdGhlXG4gICAgICAgIC8vIHRhYmJhYmxlIGRlbW90aW9uIG9udG8gZWxlbWVudHMgb2YgdGhlaXIgYnJvd3NpbmcgY29udGV4dHNcbiAgICAgICAgaWYgKHRhYmluZGV4VmFsdWUoZnJhbWVFbGVtZW50KSA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4Y2VwdC52aXNpYmxlICYmIChwbGF0Zm9ybS5pcy5CTElOSyB8fCBwbGF0Zm9ybS5pcy5XRUJLSVQpICYmICFpc1Zpc2libGUoZnJhbWVFbGVtZW50KSkge1xuICAgICAgICAgICAgLy8gQmxpbmsgYW5kIFdlYktpdCBjb25zaWRlciBlbGVtZW50cyBpbiBoaWRkZW4gYnJvd3NpbmcgY29udGV4dHMgZm9jdXNhYmxlLCBidXQgbm90IHRhYmJhYmxlXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2Via2l0IGFuZCBCbGluayBkb24ndCBjb25zaWRlciBhbnl0aGluZyBpbiA8b2JqZWN0PiB0YWJiYWJsZVxuICAgICAgICAvLyBCbGluayBmaXhlZCB0aGF0IGZpeGVkIGluIENocm9tZSA1NCwgT3BlcmEgNDFcbiAgICAgICAgdmFyIGZyYW1lTm9kZU5hbWUgPSBmcmFtZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZyYW1lTm9kZU5hbWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHZhciBpc0ZpeGVkQmxpbmsgPSBwbGF0Zm9ybS5uYW1lID09PSBcIkNocm9tZVwiICYmIHBsYXRmb3JtLm1ham9yVmVyc2lvbiA+PSA1NCB8fCBwbGF0Zm9ybS5uYW1lID09PSBcIk9wZXJhXCIgJiYgcGxhdGZvcm0ubWFqb3JWZXJzaW9uID49IDQxO1xuICAgICAgICAgICAgaWYgKHBsYXRmb3JtLmlzLldFQktJVCB8fCBwbGF0Zm9ybS5pcy5CTElOSyAmJiAhaXNGaXhlZEJsaW5rKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgX3RhYmluZGV4ID0gdGFiaW5kZXhWYWx1ZShlbGVtZW50KTtcbiAgICB2YXIgdGFiaW5kZXggPSBfdGFiaW5kZXggPT09IG51bGwgPyBudWxsIDogX3RhYmluZGV4ID49IDA7XG4gICAgaWYgKHBsYXRmb3JtLmlzLkVER0UgJiYgcGxhdGZvcm0ubWFqb3JWZXJzaW9uID49IDE0ICYmIGZyYW1lRWxlbWVudCAmJiBlbGVtZW50Lm93bmVyU1ZHRWxlbWVudCAmJiBfdGFiaW5kZXggPCAwKSB7XG4gICAgICAgIC8vIEVkZ2UgMTQrIGNvbnNpZGVycyA8YSB4bGluazpocmVmPVwi4oCmXCIgdGFiaW5kZXg9XCItMVwiPiBrZXlib2FyZCBmb2N1c2FibGVcbiAgICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgaW4gYSBuZXN0ZWQgYnJvd3NpbmcgY29udGV4dFxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGhhc1RhYmJhYmxlVGFiaW5kZXhPck5vbmUgPSB0YWJpbmRleCAhPT0gZmFsc2U7XG4gICAgdmFyIGhhc1RhYmJhYmxlVGFiaW5kZXggPSBfdGFiaW5kZXggIT09IG51bGwgJiYgX3RhYmluZGV4ID49IDA7XG4gICAgLy8gTk9URTogRmlyZWZveCAzMSBjb25zaWRlcnMgW2NvbnRlbnRlZGl0YWJsZV0gdG8gaGF2ZSBbdGFiaW5kZXg9LTFdLCBidXQgYWxsb3dzIHRhYmJpbmcgdG8gaXRcbiAgICAvLyBmaXhlZCBpbiBGaXJlZm94IDQwIHRoZSBsYXRlc3QgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTg1NjU3XG4gICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpKSB7XG4gICAgICAgIC8vIHRhYmJpbmcgY2FuIHN0aWxsIGJlIGRpc2FibGVkIGJ5IGV4cGxpY2l0bHkgcHJvdmlkaW5nIFt0YWJpbmRleD1cIi0xXCJdXG4gICAgICAgIHJldHVybiBoYXNUYWJiYWJsZVRhYmluZGV4T3JOb25lO1xuICAgIH1cbiAgICBpZiAoZm9jdXNhYmxlRWxlbWVudHNQYXR0ZXJuLnRlc3Qobm9kZU5hbWUpICYmIHRhYmluZGV4ICE9PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHBsYXRmb3JtLmlzLldFQktJVCAmJiBwbGF0Zm9ybS5pcy5JT1MpIHtcbiAgICAgICAgLy8gaU9TIG9ubHkgY29uc2lkZXJzIGEgaGFuZCBmdWxsIG9mIGVsZW1lbnRzIHRhYmJhYmxlIChrZXlib2FyZCBmb2N1c2FibGUpXG4gICAgICAgIC8vIHRoaXMgaG9sZHMgdHJ1ZSBldmVuIHdpdGggZXh0ZXJuYWwga2V5Ym9hcmRzXG4gICAgICAgIHZhciBwb3RlbnRpYWxseVRhYmJhYmxlID0gbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtZW50LnR5cGUgPT09IFwidGV4dFwiIHx8IGVsZW1lbnQudHlwZSA9PT0gXCJwYXNzd29yZFwiIHx8IG5vZGVOYW1lID09PSBcInNlbGVjdFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgfHwgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIik7XG4gICAgICAgIGlmICghcG90ZW50aWFsbHlUYWJiYWJsZSkge1xuICAgICAgICAgICAgdmFyIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7XG4gICAgICAgICAgICBwb3RlbnRpYWxseVRhYmJhYmxlID0gaXNVc2VyTW9kaWZ5V3JpdGFibGUoc3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcG90ZW50aWFsbHlUYWJiYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJ1c2VcIiAmJiBfdGFiaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHBsYXRmb3JtLmlzLkJMSU5LIHx8IHBsYXRmb3JtLmlzLldFQktJVCAmJiBwbGF0Zm9ybS5tYWpvclZlcnNpb24gPT09IDkpIHtcbiAgICAgICAgICAgIC8vIEluIENocm9tZSBhbmQgU2FmYXJpIDkgdGhlIDx1c2U+IGVsZW1lbnQgaXMga2V5Ym9hcmQgZm9jdXNhYmxlIGV2ZW4gZm9yIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVsZW1lbnRNYXRjaGVzKGVsZW1lbnQsIFwic3ZnIGFcIikgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJ4bGluazpocmVmXCIpKSB7XG4gICAgICAgIGlmIChoYXNUYWJiYWJsZVRhYmluZGV4T3JOb25lKSB7XG4gICAgICAgICAgICAvLyBpbiBUcmlkZW50IGFuZCBHZWNrbyBTVkdFbGVtZW50IGRvZXMgbm90IGhhbmRsZSB0aGUgdGFiSW5kZXggcHJvcGVydHkgcHJvcGVybHlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50LmZvY3VzICYmICFzdXBwb3J0cyQ3LmZvY3VzU3ZnTmVnYXRpdmVUYWJpbmRleEF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgLy8gRmlyZWZveCA1MSBhbmQgNTIgdHJlYXQgYW55IG5hdGl2ZWx5IHRhYmJhYmxlIFNWRyBlbGVtZW50IHdpdGhcbiAgICAgICAgICAgIC8vIHRhYmluZGV4PVwiLTFcIiBhcyB0YWJiYWJsZSBhbmQgZXZlcnl0aGluZyBlbHNlIGFzIGluZXJ0XG4gICAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjM0MFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcInN2Z1wiICYmIHN1cHBvcnRzJDcuZm9jdXNTdmdJbklmcmFtZSAmJiBoYXNUYWJiYWJsZVRhYmluZGV4T3JOb25lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAocGxhdGZvcm0uaXMuVFJJREVOVCB8fCBwbGF0Zm9ybS5pcy5FREdFKSB7XG4gICAgICAgIGlmIChub2RlTmFtZSA9PT0gXCJzdmdcIikge1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRzJDcuZm9jdXNTdmcpIHtcbiAgICAgICAgICAgICAgICAvLyBvbGRlciBJbnRlcm5ldCBFeHBsb3JlcnMgY29uc2lkZXIgPHN2Zz4ga2V5Ym9hcmQgZm9jdXNhYmxlXG4gICAgICAgICAgICAgICAgLy8gdW5sZXNzIHRoZXkgaGF2ZSBmb2NzYWJsZT1cImZhbHNlXCIsIGJ1dCB0aGVuIHRoZXkgd291bGRuJ3RcbiAgICAgICAgICAgICAgICAvLyBiZSBmb2N1c2FibGUgYW5kIHRodXMgbm90IGV2ZW4gcmVhY2ggdGhpcyBmaWx0ZXJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVsZW1lbnRzIHRoYXQgaGF2ZSBbZm9jdXNhYmxlXSBhcmUgYXV0b21hdGljYWxseSBrZXlib2FyZCBmb2N1c2FibGUgcmVnYXJkbGVzcyBvZiB0aGUgYXR0cmlidXRlJ3MgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImZvY3VzYWJsZVwiKSB8fCBoYXNUYWJiYWJsZVRhYmluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50Lm93bmVyU1ZHRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRzJDcuZm9jdXNTdmdUYWJpbmRleEF0dHJpYnV0ZSAmJiBoYXNUYWJiYWJsZVRhYmluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbGVtZW50cyB0aGF0IGhhdmUgW2ZvY3VzYWJsZV0gYXJlIGF1dG9tYXRpY2FsbHkga2V5Ym9hcmQgZm9jdXNhYmxlIHJlZ2FyZGxlc3Mgb2YgdGhlIGF0dHJpYnV0ZSdzIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJmb2N1c2FibGVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVsZW1lbnQudGFiSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihleGNlcHQub25seVRhYmJhYmxlKTtcbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcImF1ZGlvXCIpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRyb2xzXCIpKSB7XG4gICAgICAgICAgICAvLyBJbiBJbnRlcm5ldCBFeHBsb3JlciB0aGUgPGF1ZGlvPiBlbGVtZW50IGlzIGZvY3VzYWJsZSwgYnV0IG5vdCB0YWJiYWJsZSwgYW5kIHRhYkluZGV4IHByb3BlcnR5IGlzIHdyb25nXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGxhdGZvcm0uaXMuQkxJTkspIHtcbiAgICAgICAgICAgIC8vIEluIENocm9tZSA8YXVkaW8gY29udHJvbHMgdGFiaW5kZXg9XCItMVwiPiByZW1haW5zIGtleWJvYXJkIGZvY3VzYWJsZVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5vZGVOYW1lID09PSBcInZpZGVvXCIpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImNvbnRyb2xzXCIpKSB7XG4gICAgICAgICAgICBpZiAocGxhdGZvcm0uaXMuVFJJREVOVCB8fCBwbGF0Zm9ybS5pcy5FREdFKSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgdGhlIDx2aWRlbz4gZWxlbWVudCBpcyBmb2N1c2FibGUsIGJ1dCBub3QgdGFiYmFibGUsIGFuZCB0YWJJbmRleCBwcm9wZXJ0eSBpcyB3cm9uZ1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybS5pcy5CTElOSyB8fCBwbGF0Zm9ybS5pcy5HRUNLTykge1xuICAgICAgICAgICAgLy8gSW4gQ2hyb21lIGFuZCBGaXJlZm94IDx2aWRlbyBjb250cm9scyB0YWJpbmRleD1cIi0xXCI+IHJlbWFpbnMga2V5Ym9hcmQgZm9jdXNhYmxlXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAobm9kZU5hbWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKHBsYXRmb3JtLmlzLkJMSU5LIHx8IHBsYXRmb3JtLmlzLldFQktJVCkge1xuICAgICAgICAgICAgLy8gSW4gYWxsIEJsaW5rIGFuZCBXZWJLaXQgYmFzZWQgYnJvd3NlcnMgPGVtYmVkPiBhbmQgPG9iamVjdD4gYXJlIG5ldmVyIGtleWJvYXJkIGZvY3VzYWJsZSwgZXZlbiB3aXRoIHRhYmluZGV4PVwiMFwiIHNldFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlTmFtZSA9PT0gXCJpZnJhbWVcIikge1xuICAgICAgICAvLyBJbiBJbnRlcm5ldCBFeHBsb3JlciBhbGwgaWZyYW1lcyBhcmUgb25seSBmb2N1c2FibGVcbiAgICAgICAgLy8gSW4gV2ViS2l0LCBCbGluayBhbmQgR2Vja28gaWZyYW1lcyBtYXkgYmUgdGFiYmFibGUgZGVwZW5kaW5nIG9uIGNvbnRlbnQuXG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbid0IHJlbGlhYmx5IGludmVzdGlnYXRlIGlmcmFtZSBkb2N1bWVudHMgYmVjYXVzZSBvZiB0aGVcbiAgICAgICAgLy8gU2FtZU9yaWdpblBvbGljeSwgd2UncmUgZGVjbGFyaW5nIGV2ZXJ5dGhpbmcgb25seSBmb2N1c2FibGUuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFleGNlcHQuc2Nyb2xsYWJsZSAmJiBwbGF0Zm9ybS5pcy5HRUNLTykge1xuICAgICAgICAvLyBGaXJlZm94IGNvbnNpZGVycyBzY3JvbGxhYmxlIGNvbnRhaW5lcnMga2V5Ym9hcmQgZm9jdXNhYmxlLFxuICAgICAgICAvLyBldmVuIHRob3VnaCB0aGVpciB0YWJJbmRleCBwcm9wZXJ0eSBpcyAtMVxuICAgICAgICB2YXIgX3N0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7XG4gICAgICAgIGlmIChoYXNDc3NPdmVyZmxvd1Njcm9sbChfc3R5bGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFzVGFiYmFibGVUYWJpbmRleE9yTm9uZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocGxhdGZvcm0uaXMuVFJJREVOVCB8fCBwbGF0Zm9ybS5pcy5FREdFKSB7XG4gICAgICAgIC8vIElFIGFuZCBFZGdlIGRlZ3JhZGUgPGFyZWE+IHRvIHNjcmlwdCBmb2N1c2FibGUsIGlmIHRoZSBpbWFnZVxuICAgICAgICAvLyB1c2luZyB0aGUgPG1hcD4gaGFzIGJlZW4gZ2l2ZW4gdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGlmIChub2RlTmFtZSA9PT0gXCJhcmVhXCIpIHtcbiAgICAgICAgICAgIHZhciBpbWcgPSBnZXRJbWFnZU9mQXJlYShlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChpbWcgJiYgdGFiaW5kZXhWYWx1ZShpbWcpIDwgMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgX3N0eWxlMiA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsIG51bGwpO1xuICAgICAgICBpZiAoaXNVc2VyTW9kaWZ5V3JpdGFibGUoX3N0eWxlMikpIHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgYmVpbmcgc3dhbGxvd2VkIGJ5IHRoZSBvdmVyemVhbG91cyBpc1Njcm9sbGFibGVDb250YWluZXIoKSBiZWxvd1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudGFiSW5kZXggPj0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4Y2VwdC5mbGV4Ym94ICYmIGhhc0Nzc0Rpc3BsYXlGbGV4KF9zdHlsZTIpKSB7XG4gICAgICAgICAgICBpZiAoX3RhYmluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhc1RhYmJhYmxlVGFiaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXNGb2N1c1JlbGV2YW50V2l0aG91dEZsZXhib3goZWxlbWVudCkgJiYgaXNUYWJiYWJsZVdpdGhvdXRGbGV4Ym94KGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElFIGNvbnNpZGVycyBzY3JvbGxhYmxlIGNvbnRhaW5lcnMgc2NyaXB0IGZvY3VzYWJsZSBvbmx5LFxuICAgICAgICAvLyBldmVuIHRob3VnaCB0aGVpciB0YWJJbmRleCBwcm9wZXJ0eSBpcyAwXG4gICAgICAgIGlmIChpc1Njcm9sbGFibGVDb250YWluZXIoZWxlbWVudCwgbm9kZU5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgdmFyIHBhcmVudE5vZGVOYW1lID0gcGFyZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB2YXIgcGFyZW50U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQsIG51bGwpO1xuICAgICAgICAgICAgLy8gSUUgY29uc2lkZXJzIHNjcm9sbGFibGUgYm9kaWVzIHNjcmlwdCBmb2N1c2FibGUgb25seSxcbiAgICAgICAgICAgIGlmIChpc1Njcm9sbGFibGVDb250YWluZXIocGFyZW50LCBub2RlTmFtZSwgcGFyZW50Tm9kZU5hbWUsIHBhcmVudFN0eWxlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoaWxkcmVuIG9mIGZvY3VzYWJsZSBlbGVtZW50cyB3aXRoIGRpc3BsYXk6ZmxleCBhcmUgZm9jdXNhYmxlIGluIElFMTAtMTEsXG4gICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGVpciB0YWJJbmRleCBwcm9wZXJ0eSBzdWdnZXN0cyBvdGhlcndpc2VcbiAgICAgICAgICAgIGlmIChoYXNDc3NEaXNwbGF5RmxleChwYXJlbnRTdHlsZSkpIHtcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZSBvZiB0YWJpbmRleCB0YWtlcyBwcmVjZWRlbmNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhc1RhYmJhYmxlVGFiaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1dBSS9QRi9hcmlhLXByYWN0aWNlcy8jZm9jdXNfdGFiaW5kZXhcbiAgICByZXR1cm4gZWxlbWVudC50YWJJbmRleCA+PSAwO1xufVxuLy8gYmluZCBleGNlcHRpb25zIHRvIGFuIGl0ZXJhdG9yIGNhbGxiYWNrXG5pc1RhYmJhYmxlUnVsZXMuZXhjZXB0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGV4Y2VwdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIGlzVGFiYmFibGUgPSBmdW5jdGlvbiBpc1RhYmJhYmxlKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGlzVGFiYmFibGVSdWxlcyh7XG4gICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgICAgZXhjZXB0OiBleGNlcHRcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBpc1RhYmJhYmxlLnJ1bGVzID0gaXNUYWJiYWJsZVJ1bGVzO1xuICAgIHJldHVybiBpc1RhYmJhYmxlO1xufTtcbnZhciBpc0ZvY3VzUmVsZXZhbnRXaXRob3V0RmxleGJveCA9IGlzRm9jdXNSZWxldmFudC5ydWxlcy5leGNlcHQoe1xuICAgIGZsZXhib3g6IHRydWVcbn0pO1xudmFyIGlzVGFiYmFibGVXaXRob3V0RmxleGJveCA9IGlzVGFiYmFibGVSdWxlcy5leGNlcHQoe1xuICAgIGZsZXhib3g6IHRydWVcbn0pO1xuLy8gcHJvdmlkZSBpc1RhYmJhYmxlKGNvbnRleHQpIGFzIGRlZmF1bHQgaXRlcmF0b3IgY2FsbGJhY2tcbnZhciBpc1RhYmJhYmxlID0gaXNUYWJiYWJsZVJ1bGVzLmV4Y2VwdCh7fSk7XG5mdW5jdGlvbiBxdWVyeVRhYmJhYmxlKCkge1xuICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSwgY29udGV4dCA9IF9yZWYuY29udGV4dCwgaW5jbHVkZUNvbnRleHQgPSBfcmVmLmluY2x1ZGVDb250ZXh0LCBpbmNsdWRlT25seVRhYmJhYmxlID0gX3JlZi5pbmNsdWRlT25seVRhYmJhYmxlLCBzdHJhdGVneSA9IF9yZWYuc3RyYXRlZ3k7XG4gICAgdmFyIF9pc1RhYmJhYmxlID0gaXNUYWJiYWJsZS5ydWxlcy5leGNlcHQoe1xuICAgICAgICBvbmx5VGFiYmFibGU6IGluY2x1ZGVPbmx5VGFiYmFibGVcbiAgICB9KTtcbiAgICByZXR1cm4gcXVlcnlGb2N1c2FibGUoe1xuICAgICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgICBpbmNsdWRlQ29udGV4dDogaW5jbHVkZUNvbnRleHQsXG4gICAgICAgIGluY2x1ZGVPbmx5VGFiYmFibGU6IGluY2x1ZGVPbmx5VGFiYmFibGUsXG4gICAgICAgIHN0cmF0ZWd5OiBzdHJhdGVneVxuICAgIH0pLmZpbHRlcihfaXNUYWJiYWJsZSk7XG59XG4vLyBzb3J0cyBhIGxpc3Qgb2YgZWxlbWVudHMgYWNjb3JkaW5nIHRvIHRoZWlyIG9yZGVyIGluIHRoZSBET01cbmZ1bmN0aW9uIGNvbXBhcmVEb21Qb3NpdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyA/IC0xIDogMTtcbn1cbmZ1bmN0aW9uIHNvcnREb21PcmRlcihlbGVtZW50cykge1xuICAgIHJldHVybiBlbGVtZW50cy5zb3J0KGNvbXBhcmVEb21Qb3NpdGlvbik7XG59XG5mdW5jdGlvbiBnZXRGaXJzdFN1Y2Nlc3Nvck9mZnNldChsaXN0LCB0YXJnZXQpIHtcbiAgICAvLyBmaW5kIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgY29tZXMgQUZURVIgdGhlIHRhcmdldCBlbGVtZW50XG4gICAgcmV0dXJuIGZpbmRJbmRleChsaXN0LCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZWxlbWVudCkgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORztcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZpbmRJbnNlcnRpb25PZmZzZXRzKGxpc3QsIGVsZW1lbnRzLCByZXNvbHZlRWxlbWVudCkge1xuICAgIC8vIGluc3RlYWQgb2YgbXV0YXRpbmcgdGhlIGVsZW1lbnRzIGxpc3QgZGlyZWN0bHksIHJlbWVtYmVyIHBvc2l0aW9uIGFuZCBtYXBcbiAgICAvLyB0byBpbmplY3QgbGF0ZXIsIHdoZW4gd2UgY2FuIGRvIHRoaXMgbW9yZSBlZmZpY2llbnRseVxuICAgIHZhciBpbnNlcnRpb25zID0gW107XG4gICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciByZXBsYWNlID0gdHJ1ZTtcbiAgICAgICAgdmFyIG9mZnNldCA9IGxpc3QuaW5kZXhPZihlbGVtZW50KTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIGVsZW1lbnQgaXMgbm90IGluIHRhcmdldCBsaXN0XG4gICAgICAgICAgICBvZmZzZXQgPSBnZXRGaXJzdFN1Y2Nlc3Nvck9mZnNldChsaXN0LCBlbGVtZW50KTtcbiAgICAgICAgICAgIHJlcGxhY2UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gdGhlcmUgaXMgbm8gc3VjY2Vzc29yIGluIHRoZSB0YWJzZXF1ZW5jZSxcbiAgICAgICAgICAgIC8vIG1lYW5pbmcgdGhlIGltYWdlIG11c3QgYmUgdGhlIGxhc3QgZWxlbWVudFxuICAgICAgICAgICAgb2Zmc2V0ID0gbGlzdC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWxsb3cgdGhlIGNvbnN1bWVyIHRvIHJlcGxhY2UgdGhlIGluamVjdGVkIGVsZW1lbnRcbiAgICAgICAgdmFyIGluamVjdGlvbnMgPSBub2RlQXJyYXkocmVzb2x2ZUVsZW1lbnQgPyByZXNvbHZlRWxlbWVudChlbGVtZW50KSA6IGVsZW1lbnQpO1xuICAgICAgICBpZiAoIWluamVjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyB3ZSBjYW4ndCBpbmplY3QgemVybyBlbGVtZW50c1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc2VydGlvbnMucHVzaCh7XG4gICAgICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgICAgIHJlcGxhY2U6IHJlcGxhY2UsXG4gICAgICAgICAgICBlbGVtZW50czogaW5qZWN0aW9uc1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gaW5zZXJ0aW9ucztcbn1cbmZ1bmN0aW9uIGluc2VydEVsZW1lbnRzQXRPZmZzZXRzKGxpc3QsIGluc2VydGlvbnMpIHtcbiAgICAvLyByZW1lbWJlciB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHdlIGhhdmUgYWxyZWFkeSBpbmplY3RlZFxuICAgIC8vIHNvIHdlIGFjY291bnQgZm9yIHRoZSBjYXVzZWQgaW5kZXggb2Zmc2V0XG4gICAgdmFyIGluc2VydGVkID0gMDtcbiAgICAvLyBtYWtlIHN1cmUgdGhhdCB3ZSBpbnNlcnQgdGhlIGVsZW1lbnRzIGluIHNlcXVlbmNlLFxuICAgIC8vIG90aGVyd2lzZSB0aGUgb2Zmc2V0IGNvbXBlbnNhdGlvbiB3b24ndCB3b3JrXG4gICAgaW5zZXJ0aW9ucy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEub2Zmc2V0IC0gYi5vZmZzZXQ7XG4gICAgfSk7XG4gICAgaW5zZXJ0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGluc2VydGlvbikge1xuICAgICAgICAvLyBhcnJheS5zcGxpY2UgaGFzIGFuIGFubm95aW5nIGZ1bmN0aW9uIHNpZ25hdHVyZSA6KFxuICAgICAgICB2YXIgcmVtb3ZlID0gaW5zZXJ0aW9uLnJlcGxhY2UgPyAxIDogMDtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXG4gICAgICAgICAgICBpbnNlcnRpb24ub2Zmc2V0ICsgaW5zZXJ0ZWQsXG4gICAgICAgICAgICByZW1vdmVcbiAgICAgICAgXS5jb25jYXQoaW5zZXJ0aW9uLmVsZW1lbnRzKTtcbiAgICAgICAgbGlzdC5zcGxpY2UuYXBwbHkobGlzdCwgYXJncyk7XG4gICAgICAgIGluc2VydGVkICs9IGluc2VydGlvbi5lbGVtZW50cy5sZW5ndGggLSByZW1vdmU7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBtZXJnZUluRG9tT3JkZXIoKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBsaXN0ID0gX3JlZi5saXN0LCBlbGVtZW50cyA9IF9yZWYuZWxlbWVudHMsIHJlc29sdmVFbGVtZW50ID0gX3JlZi5yZXNvbHZlRWxlbWVudDtcbiAgICAvLyBvcGVyYXRlIG9uIGEgY29weSBzbyB3ZSBkb24ndCBtdXRhdGUgdGhlIG9yaWdpbmFsIGFycmF5XG4gICAgdmFyIF9saXN0ID0gbGlzdC5zbGljZSgwKTtcbiAgICAvLyBtYWtlIHN1cmUgdGhlIGVsZW1lbnRzIHdlJ3JlIGluamVjdGluZyBhcmUgcHJvdmlkZWQgaW4gRE9NIG9yZGVyXG4gICAgdmFyIF9lbGVtZW50cyA9IG5vZGVBcnJheShlbGVtZW50cykuc2xpY2UoMCk7XG4gICAgc29ydERvbU9yZGVyKF9lbGVtZW50cyk7XG4gICAgLy8gZmluZCB0aGUgb2Zmc2V0cyB3aXRoaW4gdGhlIHRhcmdldCBhcnJheSAobGlzdCkgYXQgd2hpY2ggdG8gaW5qZWN0XG4gICAgLy8gZWFjaCBpbmRpdmlkdWFsIGVsZW1lbnQgKGZyb20gZWxlbWVudHMpXG4gICAgdmFyIGluc2VydGlvbnMgPSBmaW5kSW5zZXJ0aW9uT2Zmc2V0cyhfbGlzdCwgX2VsZW1lbnRzLCByZXNvbHZlRWxlbWVudCk7XG4gICAgLy8gYWN0dWFsbHkgaW5qZWN0IHRoZSBlbGVtZW50cyBpbnRvIHRoZSB0YXJnZXQgYXJyYXkgYXQgdGhlIGlkZW50aWZpZWQgcG9zaXRpb25zXG4gICAgaW5zZXJ0RWxlbWVudHNBdE9mZnNldHMoX2xpc3QsIGluc2VydGlvbnMpO1xuICAgIHJldHVybiBfbGlzdDtcbn1cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICAgICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgICB9O1xufSgpO1xuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgfVxufVxudmFyIE1hcHMgPSBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBNYXBzKGNvbnRleHQpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1hcHMpO1xuICAgICAgICB0aGlzLl9kb2N1bWVudCA9IGdldERvY3VtZW50KGNvbnRleHQpO1xuICAgICAgICB0aGlzLm1hcHMgPSB7fTtcbiAgICB9XG4gICAgX2NyZWF0ZUNsYXNzKE1hcHMsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImdldEFyZWFzRm9yXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QXJlYXNGb3IobmFtZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tYXBzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBtYXAgaXMgbm90IGRlZmluZWQgd2l0aGluIHRoZSBjb250ZXh0LCBzbyB3ZVxuICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHRvIGdvIGZpbmQgaXQgZWxzZXdoZXJlIGluIHRoZSBkb2N1bWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE1hcEJ5TmFtZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwc1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImFkZE1hcEJ5TmFtZVwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZE1hcEJ5TmFtZShuYW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hcCA9IGdldE1hcEJ5TmFtZShuYW1lLCB0aGlzLl9kb2N1bWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKCFtYXApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gbWFwLCB0aGUgaW1nW3VzZW1hcF0gd2Fzbid0IGRvaW5nIGFueXRoaW5nIGFueXdheVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubWFwc1ttYXAubmFtZV0gPSBxdWVyeVRhYmJhYmxlKHtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogbWFwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJleHRyYWN0QXJlYXNGcm9tTGlzdFwiLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGV4dHJhY3RBcmVhc0Zyb21MaXN0KGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFsbCA8YXJlYT4gZWxlbWVudHMgZnJvbSB0aGUgZWxlbWVudHMgbGlzdCxcbiAgICAgICAgICAgICAgICAvLyBidXQgcHV0IHRoZW0gdGhlIG1hcCBmb3IgbGF0ZXIgcmV0cmlldmFsXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub2RlTmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVOYW1lICE9PSBcImFyZWFcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hcCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1hcHNbbWFwLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcHNbbWFwLm5hbWVdID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBzW21hcC5uYW1lXS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBdKTtcbiAgICByZXR1cm4gTWFwcztcbn0oKTtcbmZ1bmN0aW9uIHNvcnRBcmVhKGVsZW1lbnRzLCBjb250ZXh0KSB7XG4gICAgLy8gaW1hZ2VzIC0gdW5sZXNzIHRoZXkgYXJlIGZvY3VzYWJsZSB0aGVtc2VsdmVzLCBsaWtlbHkgbm90XG4gICAgLy8gcGFydCBvZiB0aGUgZWxlbWVudHMgbGlzdCwgc28gd2UnbGwgaGF2ZSB0byBmaW5kIHRoZW0gYW5kXG4gICAgLy8gc29ydCB0aGVtIGludG8gdGhlIGVsZW1lbnRzIGxpc3QgbWFudWFsbHlcbiAgICB2YXIgdXNlbWFwcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChcImltZ1t1c2VtYXBdXCIpO1xuICAgIHZhciBtYXBzID0gbmV3IE1hcHMoY29udGV4dCk7XG4gICAgLy8gcmVtb3ZlIGFsbCA8YXJlYT4gZWxlbWVudHMgZnJvbSB0aGUgZWxlbWVudHMgbGlzdCxcbiAgICAvLyBidXQgcHV0IHRoZW0gdGhlIG1hcCBmb3IgbGF0ZXIgcmV0cmlldmFsXG4gICAgdmFyIF9lbGVtZW50cyA9IG1hcHMuZXh0cmFjdEFyZWFzRnJvbUxpc3QoZWxlbWVudHMpO1xuICAgIGlmICghdXNlbWFwcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gdGhlIGNvbnRleHQgZG9lcyBub3QgY29udGFpbiBhbnkgPGFyZWE+cyBzbyBubyBuZWVkXG4gICAgICAgIC8vIHRvIHJlcGxhY2UgYW55dGhpbmcsIGp1c3QgcmVtb3ZlIGFueSBtYXBzXG4gICAgICAgIHJldHVybiBfZWxlbWVudHM7XG4gICAgfVxuICAgIHJldHVybiBtZXJnZUluRG9tT3JkZXIoe1xuICAgICAgICBsaXN0OiBfZWxlbWVudHMsXG4gICAgICAgIGVsZW1lbnRzOiB1c2VtYXBzLFxuICAgICAgICByZXNvbHZlRWxlbWVudDogZnVuY3Rpb24gcmVzb2x2ZUVsZW1lbnQoaW1hZ2UpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gaW1hZ2UuZ2V0QXR0cmlidXRlKFwidXNlbWFwXCIpLnNsaWNlKDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hcHMuZ2V0QXJlYXNGb3IobmFtZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbnZhciBfY3JlYXRlQ2xhc3MkMSA9IGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgICAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgICAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICAgICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICAgIH07XG59KCk7XG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2skMShpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cbn1cbnZhciBTaGFkb3dzID0gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gU2hhZG93cyhjb250ZXh0LCBzb3J0RWxlbWVudHMpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrJDEodGhpcywgU2hhZG93cyk7XG4gICAgICAgIC8vIGRvY3VtZW50IGNvbnRleHQgd2UncmUgd29ya2luZyB3aXRoXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIC8vIGNhbGxiYWNrIHRoYXQgc29ydHMgYW4gYXJyYXkgb2YgZWxlbWVudHNcbiAgICAgICAgdGhpcy5zb3J0RWxlbWVudHMgPSBzb3J0RWxlbWVudHM7XG4gICAgICAgIC8vIHJlZmVyZW5jZSB0byBjcmVhdGUgdW5pcXVlIElEcyBmb3IgZWFjaCBTaGFkb3dIb3N0XG4gICAgICAgIHRoaXMuaG9zdENvdW50ZXIgPSAxO1xuICAgICAgICAvLyByZWZlcmVuY2UgbWFwIGZvciBjaGlsZC1TaGFkb3dIb3N0cyBvZiBhIFNoYWRvd0hvc3RcbiAgICAgICAgdGhpcy5pbkhvc3QgPSB7fTtcbiAgICAgICAgLy8gcmVmZXJlbmNlIG1hcCBmb3IgY2hpbGQtU2hhZG93SG9zdCBvZiB0aGUgZG9jdW1lbnRcbiAgICAgICAgdGhpcy5pbkRvY3VtZW50ID0gW107XG4gICAgICAgIC8vIHJlZmVyZW5jZSBtYXAgZm9yIFNoYWRvd0hvc3RzXG4gICAgICAgIHRoaXMuaG9zdHMgPSB7fTtcbiAgICAgICAgLy8gcmVmZXJlbmNlIG1hcCBmb3IgdGFiYmFibGUgZWxlbWVudHMgb2YgYSBTaGFkb3dIb3N0XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSB7fTtcbiAgICB9XG4gICAgLy8gcmVtZW1iZXIgd2hpY2ggaG9zdHMgd2UgaGF2ZSB0byBzb3J0IHdpdGhpbiBsYXRlclxuICAgIF9jcmVhdGVDbGFzcyQxKFNoYWRvd3MsIFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcIl9yZWdpc3Rlckhvc3RcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVnaXN0ZXJIb3N0KGhvc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoaG9zdC5fc29ydGluZ0lkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWFrZSB0aGUgU2hhZG93SG9zdCBpZGVudGlmaWFibGUgKHNlZSBjbGVhbnVwKCkgZm9yIHVuZG8pXG4gICAgICAgICAgICAgICAgaG9zdC5fc29ydGluZ0lkID0gXCJzaGFkb3ctXCIgKyB0aGlzLmhvc3RDb3VudGVyKys7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0c1tob3N0Ll9zb3J0aW5nSWRdID0gaG9zdDtcbiAgICAgICAgICAgICAgICAvLyBob3N0cyBtYXkgY29udGFpbiBvdGhlciBob3N0c1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRIb3N0ID0gZ2V0U2hhZG93SG9zdCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGhvc3RcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50SG9zdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWdpc3Rlckhvc3QocGFyZW50SG9zdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVySG9zdFBhcmVudChob3N0LCBwYXJlbnRIb3N0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluRG9jdW1lbnQucHVzaChob3N0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJfcmVnaXN0ZXJIb3N0UGFyZW50XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3JlZ2lzdGVySG9zdFBhcmVudChob3N0LCBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5Ib3N0W3BhcmVudC5fc29ydGluZ0lkXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluSG9zdFtwYXJlbnQuX3NvcnRpbmdJZF0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pbkhvc3RbcGFyZW50Ll9zb3J0aW5nSWRdLnB1c2goaG9zdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJfcmVnaXN0ZXJFbGVtZW50XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3JlZ2lzdGVyRWxlbWVudChlbGVtZW50LCBob3N0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRzW2hvc3QuX3NvcnRpbmdJZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50c1tob3N0Ll9zb3J0aW5nSWRdID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbaG9zdC5fc29ydGluZ0lkXS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiZXh0cmFjdEVsZW1lbnRzXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXh0cmFjdEVsZW1lbnRzKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBob3N0ID0gZ2V0U2hhZG93SG9zdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhvc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVySG9zdChob3N0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJFbGVtZW50KGVsZW1lbnQsIGhvc3QpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJzb3J0XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc29ydChlbGVtZW50cykge1xuICAgICAgICAgICAgICAgIHZhciBfZWxlbWVudHMgPSB0aGlzLl9pbmplY3RIb3N0cyhlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgX2VsZW1lbnRzID0gdGhpcy5fcmVwbGFjZUhvc3RzKF9lbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBfZWxlbWVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJfaW5qZWN0SG9zdHNcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5qZWN0SG9zdHMoZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmhvc3RzKS5mb3JFYWNoKGZ1bmN0aW9uKF9zb3J0aW5nSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9saXN0ID0gdGhpcy5lbGVtZW50c1tfc29ydGluZ0lkXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9lbGVtZW50cyA9IHRoaXMuaW5Ib3N0W19zb3J0aW5nSWRdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2NvbnRleHQgPSB0aGlzLmhvc3RzW19zb3J0aW5nSWRdLnNoYWRvd1Jvb3Q7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHNbX3NvcnRpbmdJZF0gPSB0aGlzLl9tZXJnZShfbGlzdCwgX2VsZW1lbnRzLCBfY29udGV4dCk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lcmdlKGVsZW1lbnRzLCB0aGlzLmluRG9jdW1lbnQsIHRoaXMuY29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJfbWVyZ2VcIixcbiAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfbWVyZ2UobGlzdCwgZWxlbWVudHMsIGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWVyZ2VkID0gbWVyZ2VJbkRvbU9yZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc29ydEVsZW1lbnRzKG1lcmdlZCwgY29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJfcmVwbGFjZUhvc3RzXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3JlcGxhY2VIb3N0cyhlbGVtZW50cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZUluRG9tT3JkZXIoe1xuICAgICAgICAgICAgICAgICAgICBsaXN0OiBlbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHM6IHRoaXMuaW5Eb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUVsZW1lbnQ6IHRoaXMuX3Jlc29sdmVIb3N0RWxlbWVudC5iaW5kKHRoaXMpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogXCJfcmVzb2x2ZUhvc3RFbGVtZW50XCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3Jlc29sdmVIb3N0RWxlbWVudChob3N0KSB7XG4gICAgICAgICAgICAgICAgdmFyIG1lcmdlZCA9IG1lcmdlSW5Eb21PcmRlcih7XG4gICAgICAgICAgICAgICAgICAgIGxpc3Q6IHRoaXMuZWxlbWVudHNbaG9zdC5fc29ydGluZ0lkXSxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudHM6IHRoaXMuaW5Ib3N0W2hvc3QuX3NvcnRpbmdJZF0sXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVFbGVtZW50OiB0aGlzLl9yZXNvbHZlSG9zdEVsZW1lbnQuYmluZCh0aGlzKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHZhciBfdGFiaW5kZXggPSB0YWJpbmRleFZhbHVlKGhvc3QpO1xuICAgICAgICAgICAgICAgIGlmIChfdGFiaW5kZXggIT09IG51bGwgJiYgX3RhYmluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RcbiAgICAgICAgICAgICAgICAgICAgXS5jb25jYXQobWVyZ2VkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lcmdlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcIl9jbGVhbnVwXCIsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2NsZWFudXAoKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRob3NlIGlkZW50aWZlcnMgd2UgcHV0IG9uIHRoZSBTaGFkb3dIb3N0IHRvIGF2b2lkIHVzaW5nIE1hcCgpXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5ob3N0cykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuaG9zdHNba2V5XS5fc29ydGluZ0lkO1xuICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXSk7XG4gICAgcmV0dXJuIFNoYWRvd3M7XG59KCk7XG5mdW5jdGlvbiBzb3J0U2hhZG93ZWQoZWxlbWVudHMsIGNvbnRleHQsIHNvcnRFbGVtZW50cykge1xuICAgIHZhciBzaGFkb3dzID0gbmV3IFNoYWRvd3MoY29udGV4dCwgc29ydEVsZW1lbnRzKTtcbiAgICB2YXIgX2VsZW1lbnRzID0gc2hhZG93cy5leHRyYWN0RWxlbWVudHMoZWxlbWVudHMpO1xuICAgIGlmIChfZWxlbWVudHMubGVuZ3RoID09PSBlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gbm8gc2hhZG93ZWQgY29udGVudCBmb3VuZCwgbm8gbmVlZCB0byBjb250aW51ZVxuICAgICAgICByZXR1cm4gc29ydEVsZW1lbnRzKGVsZW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNoYWRvd3Muc29ydChfZWxlbWVudHMpO1xufVxuZnVuY3Rpb24gc29ydFRhYmluZGV4KGVsZW1lbnRzKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50LnRhYkluZGV4XG4gICAgLy8gZWxlbWVudHMgd2l0aCB0YWJJbmRleCBcIjBcIiAoaW5jbHVkaW5nIHRhYmJhYmxlRWxlbWVudHMgd2l0aG91dCB0YWJJbmRleCkgc2hvdWxkIGJlIG5hdmlnYXRlZCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIuXG4gICAgLy8gZWxlbWVudHMgd2l0aCBhIHBvc2l0aXZlIHRhYkluZGV4OlxuICAgIC8vICAgRWxlbWVudHMgdGhhdCBoYXZlIGlkZW50aWNhbCB0YWJJbmRleGVzIHNob3VsZCBiZSBuYXZpZ2F0ZWQgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyLlxuICAgIC8vICAgTmF2aWdhdGlvbiBwcm9jZWVkcyBmcm9tIHRoZSBsb3dlc3QgdGFiSW5kZXggdG8gdGhlIGhpZ2hlc3QgdGFiSW5kZXguXG4gICAgLy8gTk9URTogc29ydCBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgdW5zdGFibGUgYW5kIHRodXMgbWVzcyB1cCBET00gb3JkZXIsXG4gICAgLy8gdGhhdCdzIHdoeSB3ZSBidWlsZCBhIG1hcCB0aGF0J3MgYmVpbmcgc29ydGVkIGluc3RlYWQuIElmIHdlIHdlcmUgYWJsZSB0byByZWx5XG4gICAgLy8gb24gYSBzdGFibGUgc29ydGluZyBhbGdvcml0aG0sIHNvcnRUYWJpbmRleCgpIGNvdWxkIGJlIGFzIHNpbXBsZSBhc1xuICAgIC8vIGVsZW1lbnRzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYS50YWJJbmRleCAtIGIudGFiSW5kZXg7IH0pO1xuICAgIC8vIGF0IHRoaXMgdGltZSBDaHJvbWUgZG9lcyBub3QgdXNlIGEgc3RhYmxlIHNvcnRpbmcgYWxnb3JpdGhtXG4gICAgLy8gc2VlIGh0dHA6Ly9ibG9nLnJvZG5leXJlaG0uZGUvYXJjaGl2ZXMvMTQtU29ydGluZy1XZXJlLURvaW5nLUl0LVdyb25nLmh0bWwjc3RhYmlsaXR5XG4gICAgLy8gTk9URTogY29tcGFyZURvY3VtZW50UG9zaXRpb24gc2VlbWVkIGxpa2UgbW9yZSBvdmVyaGVhZCB0aGFuIGp1c3Qgc29ydGluZyB0aGlzIHdpdGggYnVja2V0c1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9Ob2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIHZhciBpbmRleGVzID0gW107XG4gICAgdmFyIG5vcm1hbCA9IGVsZW1lbnRzLmZpbHRlcihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIC8vIGluIFRyaWRlbnQgYW5kIEdlY2tvIFNWR0VsZW1lbnQgZG9lcyBub3Qga25vdyBhYm91dCB0aGUgdGFiSW5kZXggcHJvcGVydHlcbiAgICAgICAgdmFyIHRhYkluZGV4ID0gZWxlbWVudC50YWJJbmRleDtcbiAgICAgICAgaWYgKHRhYkluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRhYkluZGV4ID0gdGFiaW5kZXhWYWx1ZShlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHRyYWN0IGVsZW1lbnRzIHRoYXQgZG9uJ3QgbmVlZCBzb3J0aW5nXG4gICAgICAgIGlmICh0YWJJbmRleCA8PSAwIHx8IHRhYkluZGV4ID09PSBudWxsIHx8IHRhYkluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWFwW3RhYkluZGV4XSkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIHNvcnRhYmxlIGJ1Y2tldCBmb3IgZG9tLW9yZGVyLXByZXNlcnZhdGlvbiBvZiBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIHRhYkluZGV4XG4gICAgICAgICAgICBtYXBbdGFiSW5kZXhdID0gW107XG4gICAgICAgICAgICAvLyBtYWludGFpbiBhIGxpc3Qgb2YgdW5pcXVlIHRhYkluZGV4ZXNcbiAgICAgICAgICAgIGluZGV4ZXMucHVzaCh0YWJJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc29ydCBlbGVtZW50IGludG8gdGhlIHByb3BlciBidWNrZXRcbiAgICAgICAgbWFwW3RhYkluZGV4XS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAvLyBlbGVtZW50IG1vdmVkIHRvIHNvcnRpbmcgbWFwLCBzbyBub3QgXCJub3JtYWxcIiBhbnltb3JlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICAvLyBzb3J0IHRoZSB0YWJpbmRleCBhc2NlbmRpbmcsXG4gICAgLy8gdGhlbiByZXNvbHZlIHRoZW0gdG8gdGhlaXIgYXBwcm9wcmlhdGUgYnVja2V0cyxcbiAgICAvLyB0aGVuIGZsYXR0ZW4gdGhlIGFycmF5IG9mIGFycmF5cyB0byBhbiBhcnJheVxuICAgIHZhciBfZWxlbWVudHMgPSBpbmRleGVzLnNvcnQoKS5tYXAoZnVuY3Rpb24odGFiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG1hcFt0YWJJbmRleF07XG4gICAgfSkucmVkdWNlUmlnaHQoZnVuY3Rpb24ocHJldmlvdXMsIGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQuY29uY2F0KHByZXZpb3VzKTtcbiAgICB9LCBub3JtYWwpO1xuICAgIHJldHVybiBfZWxlbWVudHM7XG59XG52YXIgc3VwcG9ydHMkOCA9IHZvaWQgMDtcbmZ1bmN0aW9uIG1vdmVDb250ZXh0VG9CZWdpbm5pbmcoZWxlbWVudHMsIGNvbnRleHQpIHtcbiAgICB2YXIgcG9zID0gZWxlbWVudHMuaW5kZXhPZihjb250ZXh0KTtcbiAgICBpZiAocG9zID4gMCkge1xuICAgICAgICB2YXIgdG1wID0gZWxlbWVudHMuc3BsaWNlKHBvcywgMSk7XG4gICAgICAgIHJldHVybiB0bXAuY29uY2F0KGVsZW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xufVxuZnVuY3Rpb24gc29ydEVsZW1lbnRzKGVsZW1lbnRzLCBfY29udGV4dCkge1xuICAgIGlmIChzdXBwb3J0cyQ4LnRhYnNlcXVlbmNlQXJlYUF0SW1nUG9zaXRpb24pIHtcbiAgICAgICAgLy8gU29tZSBicm93c2VycyBzb3J0IDxhcmVhPiBpbiBET00gb3JkZXIsIHNvbWUgcGxhY2UgdGhlIDxhcmVhPnNcbiAgICAgICAgLy8gd2hlcmUgdGhlIDxpbWc+IHJlZmVyZWNpbmcgdGhlbSB3b3VsZCd2ZSBiZWVuIGluIERPTSBvcmRlci5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21lZGlhbGl6ZS9hbGx5LmpzL2lzc3Vlcy81XG4gICAgICAgIGVsZW1lbnRzID0gc29ydEFyZWEoZWxlbWVudHMsIF9jb250ZXh0KTtcbiAgICB9XG4gICAgZWxlbWVudHMgPSBzb3J0VGFiaW5kZXgoZWxlbWVudHMpO1xuICAgIHJldHVybiBlbGVtZW50cztcbn1cbmZ1bmN0aW9uIHF1ZXJ5VGFic2VxdWVuY2UoKSB7XG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LCBjb250ZXh0ID0gX3JlZi5jb250ZXh0LCBpbmNsdWRlQ29udGV4dCA9IF9yZWYuaW5jbHVkZUNvbnRleHQsIGluY2x1ZGVPbmx5VGFiYmFibGUgPSBfcmVmLmluY2x1ZGVPbmx5VGFiYmFibGUsIHN0cmF0ZWd5ID0gX3JlZi5zdHJhdGVneTtcbiAgICBpZiAoIXN1cHBvcnRzJDgpIHtcbiAgICAgICAgc3VwcG9ydHMkOCA9IF9zdXBwb3J0cygpO1xuICAgIH1cbiAgICB2YXIgX2NvbnRleHQgPSBub2RlQXJyYXkoY29udGV4dClbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIHZhciBlbGVtZW50cyA9IHF1ZXJ5VGFiYmFibGUoe1xuICAgICAgICBjb250ZXh0OiBfY29udGV4dCxcbiAgICAgICAgaW5jbHVkZUNvbnRleHQ6IGluY2x1ZGVDb250ZXh0LFxuICAgICAgICBpbmNsdWRlT25seVRhYmJhYmxlOiBpbmNsdWRlT25seVRhYmJhYmxlLFxuICAgICAgICBzdHJhdGVneTogc3RyYXRlZ3lcbiAgICB9KTtcbiAgICBpZiAoZG9jdW1lbnQuYm9keS5jcmVhdGVTaGFkb3dSb290ICYmIHBsYXRmb3JtLmlzLkJMSU5LKSB7XG4gICAgICAgIC8vIHNvcnQgdGFiaW5kZXggbG9jYWxpemVkIHRvIHNoYWRvdyBkb21cbiAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpYWxpemUvYWxseS5qcy9pc3N1ZXMvNlxuICAgICAgICBlbGVtZW50cyA9IHNvcnRTaGFkb3dlZChlbGVtZW50cywgX2NvbnRleHQsIHNvcnRFbGVtZW50cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudHMgPSBzb3J0RWxlbWVudHMoZWxlbWVudHMsIF9jb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKGluY2x1ZGVDb250ZXh0KSB7XG4gICAgICAgIC8vIGlmIHdlIGluY2x1ZGUgdGhlIGNvbnRleHQgaXRzZWxmLCBpdCBoYXMgdG8gYmUgdGhlIGZpcnN0XG4gICAgICAgIC8vIGVsZW1lbnQgb2YgdGhlIHNlcXVlbmNlXG4gICAgICAgIGVsZW1lbnRzID0gbW92ZUNvbnRleHRUb0JlZ2lubmluZyhlbGVtZW50cywgX2NvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudHM7XG59XG4vLyBjb2RlcyBtb3N0bHkgY2xvbmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2tlaXRoYW11cy9qd2VydHkvYmxvYi9tYXN0ZXIvandlcnR5LmpzXG4vLyBkZWxpYmVyYXRlbHkgbm90IGV4cG9zaW5nIGNoYXJhY3RlcnMgbGlrZSA8LC4tIyogYmVjYXVzZSB0aGV5IHZhcnkgKndpbGRseSpcbi8vIGFjcm9zcyBrZXlib2FyZCBsYXlvdXRzIGFuZCBtYXkgY2F1c2UgdmFyaW91cyBwcm9ibGVtc1xuLy8gKGUuZy4gXCIqXCIgaXMgXCJTaGlmdCArXCIgb24gYSBHZXJtYW4gTWFjIGtleWJvYXJkKVxuLy8gKGUuZy4gXCJAXCIgaXMgXCJBbHQgTFwiIG9uIGEgR2VybWFuIE1hYyBrZXlib2FyZClcbnZhciBrZXljb2RlID0ge1xuICAgIC8vIEVsZW1lbnQgRm9jdXNcbiAgICB0YWI6IDksXG4gICAgLy8gTmF2aWdhdGlvblxuICAgIGxlZnQ6IDM3LFxuICAgIHVwOiAzOCxcbiAgICByaWdodDogMzksXG4gICAgZG93bjogNDAsXG4gICAgcGFnZVVwOiAzMyxcbiAgICBcInBhZ2UtdXBcIjogMzMsXG4gICAgcGFnZURvd246IDM0LFxuICAgIFwicGFnZS1kb3duXCI6IDM0LFxuICAgIGVuZDogMzUsXG4gICAgaG9tZTogMzYsXG4gICAgLy8gQWN0aW9uXG4gICAgZW50ZXI6IDEzLFxuICAgIGVzY2FwZTogMjcsXG4gICAgc3BhY2U6IDMyLFxuICAgIC8vIE1vZGlmaWVyXG4gICAgc2hpZnQ6IDE2LFxuICAgIGNhcHNMb2NrOiAyMCxcbiAgICBcImNhcHMtbG9ja1wiOiAyMCxcbiAgICBjdHJsOiAxNyxcbiAgICBhbHQ6IDE4LFxuICAgIG1ldGE6IDkxLFxuICAgIC8vIGluIGZpcmVmb3g6IDIyNFxuICAgIC8vIG9uIG1hYyAoY2hyb21lKTogbWV0YS1sZWZ0PTkxLCBtZXRhLXJpZ2h0PTkzXG4gICAgLy8gb24gd2luIChJRTExKTogbWV0YS1sZWZ0PTkxLCBtZXRhLXJpZ2h0PTkyXG4gICAgcGF1c2U6IDE5LFxuICAgIC8vIENvbnRlbnQgTWFuaXB1bGF0aW9uXG4gICAgaW5zZXJ0OiA0NSxcbiAgICBkZWxldGU6IDQ2LFxuICAgIGJhY2tzcGFjZTogOCxcbiAgICAvLyB0aGUgc2FtZSBsb2dpY2FsIGtleSBtYXkgYmUgaWRlbnRpZmllZCB0aHJvdWdoIGRpZmZlcmVudCBrZXlDb2Rlc1xuICAgIF9hbGlhczoge1xuICAgICAgICA5MTogW1xuICAgICAgICAgICAgOTIsXG4gICAgICAgICAgICA5MyxcbiAgICAgICAgICAgIDIyNFxuICAgICAgICBdXG4gICAgfVxufTtcbi8vIEZ1bmN0aW9uIGtleXMgKDExMiAtIDEzNylcbi8vIE5PVEU6IG5vdCBldmVyeSBrZXlib2FyZCBrbm93cyBGMTMrXG5mb3IodmFyIG4gPSAxOyBuIDwgMjY7IG4rKyl7XG4gICAga2V5Y29kZVtcImZcIiArIG5dID0gbiArIDExMTtcbn1cbi8vIE51bWJlciBrZXlzICg0OC01NywgbnVtcGFkIDk2LTEwNSlcbi8vIE5PVEU6IG5vdCBldmVyeSBrZXlib2FyZCBrbm93cyBudW0tMCtcbmZvcih2YXIgX24gPSAwOyBfbiA8IDEwOyBfbisrKXtcbiAgICB2YXIgY29kZSA9IF9uICsgNDg7XG4gICAgdmFyIG51bUNvZGUgPSBfbiArIDk2O1xuICAgIGtleWNvZGVbX25dID0gY29kZTtcbiAgICBrZXljb2RlW1wibnVtLVwiICsgX25dID0gbnVtQ29kZTtcbiAgICBrZXljb2RlLl9hbGlhc1tjb2RlXSA9IFtcbiAgICAgICAgbnVtQ29kZVxuICAgIF07XG59XG4vLyBMYXRpbiBjaGFyYWN0ZXJzICg2NSAtIDkwKVxuZm9yKHZhciBfbjIgPSAwOyBfbjIgPCAyNjsgX24yKyspe1xuICAgIHZhciBfY29kZSA9IF9uMiArIDY1O1xuICAgIHZhciBuYW1lJDEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKF9jb2RlKS50b0xvd2VyQ2FzZSgpO1xuICAgIGtleWNvZGVbbmFtZSQxXSA9IF9jb2RlO1xufVxudmFyIG1vZGlmaWVyID0ge1xuICAgIGFsdDogXCJhbHRLZXlcIixcbiAgICBjdHJsOiBcImN0cmxLZXlcIixcbiAgICBtZXRhOiBcIm1ldGFLZXlcIixcbiAgICBzaGlmdDogXCJzaGlmdEtleVwiXG59O1xudmFyIG1vZGlmaWVyU2VxdWVuY2UgPSBPYmplY3Qua2V5cyhtb2RpZmllcikubWFwKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gbW9kaWZpZXJbbmFtZV07XG59KTtcbmZ1bmN0aW9uIGNyZWF0ZUV4cGVjdGVkTW9kaWZpZXJzKGlnbm9yZU1vZGlmaWVycykge1xuICAgIHZhciB2YWx1ZSA9IGlnbm9yZU1vZGlmaWVycyA/IG51bGwgOiBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBhbHRLZXk6IHZhbHVlLFxuICAgICAgICBjdHJsS2V5OiB2YWx1ZSxcbiAgICAgICAgbWV0YUtleTogdmFsdWUsXG4gICAgICAgIHNoaWZ0S2V5OiB2YWx1ZVxuICAgIH07XG59XG5mdW5jdGlvbiByZXNvbHZlTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAgIHZhciBpZ25vcmVNb2RpZmllcnMgPSBtb2RpZmllcnMuaW5kZXhPZihcIipcIikgIT09IC0xO1xuICAgIHZhciBleHBlY3RlZCA9IGNyZWF0ZUV4cGVjdGVkTW9kaWZpZXJzKGlnbm9yZU1vZGlmaWVycyk7XG4gICAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgaWYgKHRva2VuID09PSBcIipcIikge1xuICAgICAgICAgICAgLy8gd2UndmUgYWxyZWFkeSBjb3ZlcmVkIHRoZSBhbGwtaW4gb3BlcmF0b3JcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSB3YW50IHRoZSBtb2RpZmllciBwcmVzc2VkXG4gICAgICAgIHZhciB2YWx1ZSA9IHRydWU7XG4gICAgICAgIHZhciBvcGVyYXRvciA9IHRva2VuLnNsaWNlKDAsIDEpO1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09IFwiP1wiKSB7XG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBjYXJlIGlmIHRoZSBtb2RpZmllciBpcyBwcmVzc2VkXG4gICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09IFwiIVwiKSB7XG4gICAgICAgICAgICAvLyB3ZSBkbyBub3Qgd2FudCB0aGUgbW9kaWZpZXIgcHJlc3NlZFxuICAgICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgIT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIGNvbXBlbnNhdGUgZm9yIHRoZSBtb2RpZmllcidzIG9wZXJhdG9yXG4gICAgICAgICAgICB0b2tlbiA9IHRva2VuLnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBtb2RpZmllclt0b2tlbl07XG4gICAgICAgIGlmICghcHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIG1vZGlmaWVyIFwiJyArIHRva2VuICsgJ1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0ZWRbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBleHBlY3RlZDtcbn1cbmZ1bmN0aW9uIHJlc29sdmVLZXkoa2V5KSB7XG4gICAgdmFyIGNvZGUgPSBrZXljb2RlW2tleV0gfHwgcGFyc2VJbnQoa2V5LCAxMCk7XG4gICAgaWYgKCFjb2RlIHx8IHR5cGVvZiBjb2RlICE9PSBcIm51bWJlclwiIHx8IGlzTmFOKGNvZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24ga2V5IFwiJyArIGtleSArICdcIicpO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgICBjb2RlXG4gICAgXS5jb25jYXQoa2V5Y29kZS5fYWxpYXNbY29kZV0gfHwgW10pO1xufVxuZnVuY3Rpb24gbWF0Y2hNb2RpZmllcnMoZXhwZWN0ZWQsIGV2ZW50KSB7XG4gICAgLy8gcmV0dXJucyB0cnVlIG9uIG1hdGNoXG4gICAgcmV0dXJuICFtb2RpZmllclNlcXVlbmNlLnNvbWUoZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAvLyByZXR1cm5zIHRydWUgb24gbWlzbWF0Y2hcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBleHBlY3RlZFtwcm9wXSA9PT0gXCJib29sZWFuXCIgJiYgQm9vbGVhbihldmVudFtwcm9wXSkgIT09IGV4cGVjdGVkW3Byb3BdO1xuICAgIH0pO1xufVxuZnVuY3Rpb24ga2V5QmluZGluZyh0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQuc3BsaXQoL1xccysvKS5tYXAoZnVuY3Rpb24oX3RleHQpIHtcbiAgICAgICAgdmFyIHRva2VucyA9IF90ZXh0LnNwbGl0KFwiK1wiKTtcbiAgICAgICAgdmFyIF9tb2RpZmllcnMgPSByZXNvbHZlTW9kaWZpZXJzKHRva2Vucy5zbGljZSgwLCAtMSkpO1xuICAgICAgICB2YXIgX2tleUNvZGVzID0gcmVzb2x2ZUtleSh0b2tlbnMuc2xpY2UoLTEpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleUNvZGVzOiBfa2V5Q29kZXMsXG4gICAgICAgICAgICBtb2RpZmllcnM6IF9tb2RpZmllcnMsXG4gICAgICAgICAgICBtYXRjaE1vZGlmaWVyczogbWF0Y2hNb2RpZmllcnMuYmluZChudWxsLCBfbW9kaWZpZXJzKVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuLy8gTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiBpcyBhdmFpbGFibGUgc2luY2UgSUU5XG4vLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL05vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb25cbi8vIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSB3aGVuIGVsZW1lbnQgaXMgY29udGFpbmVkIGJ5IHBhcmVudCBvciBpcyB0aGUgcGFyZW50IHN1aXRlZCBmb3IgdXNlIHdpdGggQXJyYXkuc29tZSgpXG4vKlxuICBVU0FHRTpcbiAgICB2YXIgaXNDaGlsZE9mID0gZ2V0UGFyZW50Q29tcGFyYXRvcih7cGFyZW50OiBzb21lTm9kZX0pO1xuICAgIGxpc3RPZkVsZW1lbnRzLnNvbWUoaXNDaGlsZE9mKVxuKi8gZnVuY3Rpb24gZ2V0UGFyZW50Q29tcGFyYXRvcigpIHtcbiAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sIHBhcmVudCA9IF9yZWYucGFyZW50LCBlbGVtZW50ID0gX3JlZi5lbGVtZW50LCBpbmNsdWRlU2VsZiA9IF9yZWYuaW5jbHVkZVNlbGY7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gaXNDaGlsZE9mKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGluY2x1ZGVTZWxmICYmIG5vZGUgPT09IHBhcmVudCB8fCBwYXJlbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24obm9kZSkgJiBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBpc1BhcmVudE9mKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGluY2x1ZGVTZWxmICYmIGVsZW1lbnQgPT09IG5vZGUgfHwgbm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlbGVtZW50KSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInV0aWwvY29tcGFyZS1wb3NpdGlvbiNnZXRQYXJlbnRDb21wYXJhdG9yIHJlcXVpcmVkIGVpdGhlciBvcHRpb25zLnBhcmVudCBvciBvcHRpb25zLmVsZW1lbnRcIik7XG59XG4vLyBCdWcgMjg2OTMzIC0gS2V5IGV2ZW50cyBpbiB0aGUgYXV0b2NvbXBsZXRlIHBvcHVwIHNob3VsZCBiZSBoaWRkZW4gZnJvbSBwYWdlIHNjcmlwdHNcbi8vIEBicm93c2VyLWlzc3VlIEdlY2tvIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTI4NjkzM1xuZnVuY3Rpb24gd2hlbktleSgpIHtcbiAgICB2YXIgbWFwID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgYmluZGluZ3MgPSB7fTtcbiAgICB2YXIgY29udGV4dCA9IG5vZGVBcnJheShtYXAuY29udGV4dClbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGRlbGV0ZSBtYXAuY29udGV4dDtcbiAgICB2YXIgZmlsdGVyID0gbm9kZUFycmF5KG1hcC5maWx0ZXIpO1xuICAgIGRlbGV0ZSBtYXAuZmlsdGVyO1xuICAgIHZhciBtYXBLZXlzID0gT2JqZWN0LmtleXMobWFwKTtcbiAgICBpZiAoIW1hcEtleXMubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ3aGVuL2tleSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgb3B0aW9uIGtleVwiKTtcbiAgICB9XG4gICAgdmFyIHJlZ2lzdGVyQmluZGluZyA9IGZ1bmN0aW9uIHJlZ2lzdGVyQmluZGluZyhldmVudCkge1xuICAgICAgICBldmVudC5rZXlDb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKGNvZGUpIHtcbiAgICAgICAgICAgIGlmICghYmluZGluZ3NbY29kZV0pIHtcbiAgICAgICAgICAgICAgICBiaW5kaW5nc1tjb2RlXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmluZGluZ3NbY29kZV0ucHVzaChldmVudCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgbWFwS2V5cy5mb3JFYWNoKGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXBbdGV4dF0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignd2hlbi9rZXkgcmVxdWlyZXMgb3B0aW9uW1wiJyArIHRleHQgKyAnXCJdIHRvIGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYWRkQ2FsbGJhY2sgPSBmdW5jdGlvbiBhZGRDYWxsYmFjayhldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuY2FsbGJhY2sgPSBtYXBbdGV4dF07XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH07XG4gICAgICAgIGtleUJpbmRpbmcodGV4dCkubWFwKGFkZENhbGxiYWNrKS5mb3JFYWNoKHJlZ2lzdGVyQmluZGluZyk7XG4gICAgfSk7XG4gICAgdmFyIGhhbmRsZUtleURvd24gPSBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBlbGVtZW50cyB3aXRoaW4gdGhlIGV4ZW1wdGVkIHN1Yi10cmVlc1xuICAgICAgICAgICAgdmFyIGlzUGFyZW50T2ZFbGVtZW50ID0gZ2V0UGFyZW50Q29tcGFyYXRvcih7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgIGluY2x1ZGVTZWxmOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuc29tZShpc1BhcmVudE9mRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG4gICAgICAgIGlmICghYmluZGluZ3Nba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGJpbmRpbmdzW2tleV0uZm9yRWFjaChmdW5jdGlvbihfZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghX2V2ZW50Lm1hdGNoTW9kaWZpZXJzKGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9ldmVudC5jYWxsYmFjay5jYWxsKGNvbnRleHQsIGV2ZW50LCBkaXNlbmdhZ2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93biwgZmFsc2UpO1xuICAgIHZhciBkaXNlbmdhZ2UgPSBmdW5jdGlvbiBkaXNlbmdhZ2UoKSB7XG4gICAgICAgIGNvbnRleHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93biwgZmFsc2UpO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGlzZW5nYWdlOiBkaXNlbmdhZ2VcbiAgICB9O1xufVxuZnVuY3Rpb24gX2RlZmF1bHQocGFyYW0pIHtcbiAgICBsZXQgeyBjb250ZXh0IH0gPSBwYXJhbSA9PT0gdm9pZCAwID8ge30gOiBwYXJhbTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgY29udGV4dCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBzdXBwb3J0cyB0ZXN0cyBhcmUgcnVuIGJlZm9yZSBpbnRlcmNlcHRpbmcgdGhlIFRhYiBrZXksXG4gICAgLy8gb3IgSUUxMCBhbmQgSUUxMSB3aWxsIGZhaWwgdG8gcHJvY2VzcyB0aGUgZmlyc3QgVGFiIGtleSBldmVudC4gTm90XG4gICAgLy8gbGltaXRpbmcgdGhpcyB3YXJtLXVwIHRvIElFIGJlY2F1c2UgaXQgbWF5IGJlIGEgcHJvYmxlbSBlbHNld2hlcmUsIHRvby5cbiAgICBxdWVyeVRhYnNlcXVlbmNlKCk7XG4gICAgcmV0dXJuIHdoZW5LZXkoe1xuICAgICAgICAvLyBTYWZhcmkgb24gT1NYIG1heSByZXF1aXJlIEFMVCtUQUIgdG8gcmVhY2ggbGlua3MsXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWVkaWFsaXplL2FsbHkuanMvaXNzdWVzLzE0NlxuICAgICAgICBcIj9hbHQrP3NoaWZ0K3RhYlwiOiBmdW5jdGlvbiBhbHRTaGlmdFRhYihldmVudCkge1xuICAgICAgICAgICAgLy8gd2UncmUgY29tcGxldGVseSB0YWtpbmcgb3ZlciB0aGUgVGFiIGtleSBoYW5kbGluZ1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHZhciBzZXF1ZW5jZSA9IHF1ZXJ5VGFic2VxdWVuY2Uoe1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGJhY2t3YXJkID0gZXZlbnQuc2hpZnRLZXk7XG4gICAgICAgICAgICB2YXIgZmlyc3QgPSBzZXF1ZW5jZVswXTtcbiAgICAgICAgICAgIHZhciBsYXN0ID0gc2VxdWVuY2Vbc2VxdWVuY2UubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAvLyB3cmFwIGFyb3VuZCBmaXJzdCB0byBsYXN0LCBsYXN0IHRvIGZpcnN0XG4gICAgICAgICAgICB2YXIgc291cmNlID0gYmFja3dhcmQgPyBmaXJzdCA6IGxhc3Q7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gYmFja3dhcmQgPyBsYXN0IDogZmlyc3Q7XG4gICAgICAgICAgICBpZiAoaXNBY3RpdmVFbGVtZW50KHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmaW5kIGN1cnJlbnQgcG9zaXRpb24gaW4gdGFic2VxdWVuY2VcbiAgICAgICAgICAgIHZhciBjdXJyZW50SW5kZXggPSB2b2lkIDA7XG4gICAgICAgICAgICB2YXIgZm91bmQgPSBzZXF1ZW5jZS5zb21lKGZ1bmN0aW9uKGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZUVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgIC8vIHJlZGlyZWN0IHRvIGZpcnN0IGFzIHdlJ3JlIG5vdCBpbiBvdXIgdGFic2VxdWVuY2VcbiAgICAgICAgICAgICAgICBmaXJzdC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNoaWZ0IGZvY3VzIHRvIHByZXZpb3VzL25leHQgZWxlbWVudCBpbiB0aGUgc2VxdWVuY2VcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBiYWNrd2FyZCA/IC0xIDogMTtcbiAgICAgICAgICAgIHNlcXVlbmNlW2N1cnJlbnRJbmRleCArIG9mZnNldF0uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYWludGFpbi0tdGFiLWZvY3VzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZGVmYXVsdCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfcGxhdGZvcm0iLCJfIiwiX2Nzc2VzY2FwZSIsIm5vZGVBcnJheSIsImlucHV0IiwiQXJyYXkiLCJpc0FycmF5Iiwibm9kZVR5cGUiLCJ1bmRlZmluZWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJzbGljZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJjb250ZXh0VG9FbGVtZW50IiwiX3JlZiIsImNvbnRleHQiLCJfcmVmJGxhYmVsIiwibGFiZWwiLCJyZXNvbHZlRG9jdW1lbnQiLCJkZWZhdWx0VG9Eb2N1bWVudCIsImVsZW1lbnQiLCJOb2RlIiwiRE9DVU1FTlRfTk9ERSIsImRvY3VtZW50RWxlbWVudCIsIkVMRU1FTlRfTk9ERSIsIkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUiLCJnZXRTaGFkb3dIb3N0IiwiYXJndW1lbnRzIiwiY29udGFpbmVyIiwicGFyZW50Tm9kZSIsImhvc3QiLCJnZXREb2N1bWVudCIsIm5vZGUiLCJvd25lckRvY3VtZW50IiwiaXNBY3RpdmVFbGVtZW50IiwiX2RvY3VtZW50IiwiYWN0aXZlRWxlbWVudCIsInNoYWRvd0hvc3QiLCJzaGFkb3dSb290IiwiZ2V0UGFyZW50cyIsImxpc3QiLCJwdXNoIiwibmFtZXMiLCJuYW1lIiwiZmluZE1ldGhvZE5hbWUiLCJzb21lIiwiX25hbWUiLCJlbGVtZW50TWF0Y2hlcyIsInNlbGVjdG9yIiwicGxhdGZvcm0iLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJkZWZhdWx0Iiwib3MiLCJmYW1pbHkiLCJBTkRST0lEIiwiV0lORE9XUyIsIk9TWCIsIklPUyIsIkJMSU5LIiwibGF5b3V0IiwiR0VDS08iLCJUUklERU5UIiwiRURHRSIsIldFQktJVCIsInZlcnNpb24iLCJwYXJzZUZsb2F0IiwibWFqb3JWZXJzaW9uIiwiTWF0aCIsImZsb29yIiwiaXMiLCJJRTkiLCJJRTEwIiwiSUUxMSIsImJlZm9yZSIsImRhdGEiLCJ3aW5kb3dTY3JvbGxUb3AiLCJ3aW5kb3ciLCJzY3JvbGxUb3AiLCJ3aW5kb3dTY3JvbGxMZWZ0Iiwic2Nyb2xsTGVmdCIsImJvZHlTY3JvbGxUb3AiLCJib2R5IiwiYm9keVNjcm9sbExlZnQiLCJpZnJhbWUiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJfd2luZG93IiwiY29udGVudFdpbmRvdyIsIm9wZW4iLCJjbG9zZSIsIndyYXBwZXIiLCJ0ZXN0Iiwib3B0aW9ucyIsImlubmVySFRNTCIsImZvY3VzIiwibXV0YXRlIiwidmFsaWRhdGUiLCJhZnRlciIsImJsdXIiLCJyZW1vdmVDaGlsZCIsImRldGVjdEZvY3VzIiwidGVzdHMiLCJyZXN1bHRzIiwia2V5cyIsIm1hcCIsImtleSIsInZlcnNpb24kMSIsInJlYWRMb2NhbFN0b3JhZ2UiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiZSIsIndyaXRlTG9jYWxTdG9yYWdlIiwiaGFzRm9jdXMiLCJyZW1vdmVJdGVtIiwic2V0SXRlbSIsInVzZXJBZ2VudCIsIm5hdmlnYXRvciIsImNhY2hlS2V5IiwiY2FjaGUiLCJjYWNoZSQxIiwic2V0IiwidmFsdWVzIiwiZm9yRWFjaCIsInRpbWUiLCJEYXRlIiwidG9JU09TdHJpbmciLCJjc3NTaGFkb3dQaWVyY2luZ0RlZXBDb21iaW5hdG9yIiwiY29tYmluYXRvciIsInF1ZXJ5U2VsZWN0b3IiLCJub0Fycm93QXJyb3dBcnJvdyIsIm5vRGVlcCIsImdpZiIsImZvY3VzQXJlYUltZ1RhYmluZGV4IiwiZm9jdXNBcmVhVGFiaW5kZXgiLCJmb2N1c1RhcmdldCIsImZvY3VzQXJlYVdpdGhvdXRIcmVmIiwiZm9jdXNBdWRpb1dpdGhvdXRDb250cm9scyIsImludmFsaWRHaWYiLCJmb2N1c0Jyb2tlbkltYWdlTWFwIiwiZm9jdXNDaGlsZHJlbk9mRm9jdXNhYmxlRmxleGJveCIsImZvY3VzRmllbGRzZXREaXNhYmxlZCIsImZvY3VzRmllbGRzZXQiLCJmb2N1c0ZsZXhib3hDb250YWluZXIiLCJmb2N1c0Zvcm1EaXNhYmxlZCIsImZvY3VzSW1nSXNtYXAiLCJocmVmIiwiZm9jdXNJbWdVc2VtYXBUYWJpbmRleCIsImZvY3VzSW5IaWRkZW5JZnJhbWUiLCJpZnJhbWVEb2N1bWVudCIsInN0eWxlIiwidmlzaWJpbGl0eSIsInJlc3VsdCIsImZvY3VzSW5aZXJvRGltZW5zaW9uT2JqZWN0IiwiZm9jdXNJbnZhbGlkVGFiaW5kZXgiLCJmb2N1c0xhYmVsVGFiaW5kZXgiLCJ2YXJpYWJsZVRvUHJldmVudERlYWRDb2RlRWxpbWluYXRpb24iLCJvZmZzZXRIZWlnaHQiLCJzdmciLCJmb2N1c09iamVjdFN2Z0hpZGRlbiIsImZvY3VzT2JqZWN0U3ZnIiwicmVzdWx0JDEiLCJmb2N1c09iamVjdFN3ZiIsImZvY3VzUmVkaXJlY3RJbWdVc2VtYXAiLCJ0YXJnZXQiLCJmb2N1c1JlZGlyZWN0TGVnZW5kIiwiZm9jdXNhYmxlIiwidGFiYmFibGUiLCJmb2N1c1Njcm9sbEJvZHkiLCJmb2N1c1Njcm9sbENvbnRhaW5lcldpdGhvdXRPdmVyZmxvdyIsImZvY3VzU2Nyb2xsQ29udGFpbmVyIiwiZm9jdXNTdW1tYXJ5IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJtYWtlRm9jdXNhYmxlRm9yZWlnbk9iamVjdCIsImZvcmVpZ25PYmplY3QiLCJjcmVhdGVFbGVtZW50TlMiLCJ3aWR0aCIsImJhc2VWYWwiLCJoZWlnaHQiLCJsYXN0Q2hpbGQiLCJ0eXBlIiwiZm9jdXNTdmdGb3JlaWduT2JqZWN0SGFjayIsImlzU3ZnRWxlbWVudCIsIm93bmVyU1ZHRWxlbWVudCIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJkaXNhYmxlZCIsImdlbmVyYXRlIiwiSFRNTEVsZW1lbnQiLCJwcm90b3R5cGUiLCJmb2N1c1N2Z0ZvY3VzYWJsZUF0dHJpYnV0ZSIsImZvY3VzU3ZnVGFiaW5kZXhBdHRyaWJ1dGUiLCJmb2N1c1N2Z05lZ2F0aXZlVGFiaW5kZXhBdHRyaWJ1dGUiLCJmb2N1c1N2Z1VzZVRhYmluZGV4Iiwiam9pbiIsImZvY3VzU3ZnRm9yZWlnbm9iamVjdFRhYmluZGV4IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJyZXN1bHQkMiIsIkJvb2xlYW4iLCJTVkdFbGVtZW50IiwiZm9jdXNTdmdJbklmcmFtZSIsImZvY3VzU3ZnIiwiZmlyc3RDaGlsZCIsImZvY3VzVGFiaW5kZXhUcmFpbGluZ0NoYXJhY3RlcnMiLCJmb2N1c1RhYmxlIiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiZm9jdXNWaWRlb1dpdGhvdXRDb250cm9scyIsInJlc3VsdCQzIiwidGFic2VxdWVuY2VBcmVhQXRJbWdQb3NpdGlvbiIsInRlc3RDYWxsYmFja3MiLCJ0ZXN0RGVzY3JpcHRpb25zIiwiZXhlY3V0ZVRlc3RzIiwic3VwcG9ydHNDYWNoZSIsIl9zdXBwb3J0cyIsInN1cHBvcnRzIiwidmFsaWRJbnRlZ2VyUGF0dGVybk5vVHJhaWxpbmciLCJ2YWxpZEludGVnZXJQYXR0ZXJuV2l0aFRyYWlsaW5nIiwiaXNWYWxpZFRhYmluZGV4IiwidmFsaWRJbnRlZ2VyUGF0dGVybiIsImhhc1RhYmluZGV4IiwiaGFzQXR0cmlidXRlIiwiaGFzVGFiSW5kZXgiLCJ0YWJpbmRleCIsImdldEF0dHJpYnV0ZSIsInRhYmluZGV4VmFsdWUiLCJhdHRyaWJ1dGVOYW1lIiwicGFyc2VJbnQiLCJpc05hTiIsImlzVXNlck1vZGlmeVdyaXRhYmxlIiwidXNlck1vZGlmeSIsIndlYmtpdFVzZXJNb2RpZnkiLCJpbmRleE9mIiwiaGFzQ3NzT3ZlcmZsb3dTY3JvbGwiLCJnZXRQcm9wZXJ0eVZhbHVlIiwib3ZlcmZsb3ciLCJoYXNDc3NEaXNwbGF5RmxleCIsImRpc3BsYXkiLCJpc1Njcm9sbGFibGVDb250YWluZXIiLCJwYXJlbnROb2RlTmFtZSIsInBhcmVudFN0eWxlIiwic2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0V2lkdGgiLCJzY3JvbGxXaWR0aCIsInN1cHBvcnRzJDEiLCJpc0ZvY3VzUmVsZXZhbnRSdWxlcyIsIl9yZWYkZXhjZXB0IiwiZXhjZXB0IiwiZmxleGJveCIsInNjcm9sbGFibGUiLCJzaGFkb3ciLCJzdmdUeXBlIiwidmFsaWRUYWJpbmRleCIsImlzU3ZnQ29udGVudCIsImZvY3VzYWJsZUF0dHJpYnV0ZSIsImdldENvbXB1dGVkU3R5bGUiLCJoYXNMaW5rUGFyZW50IiwicGFyZW50IiwicGFyZW50RWxlbWVudCIsImlzRm9jdXNSZWxldmFudCIsInJ1bGVzIiwiZmluZEluZGV4IiwiYXJyYXkiLCJjYWxsYmFjayIsImkiLCJnZXRDb250ZW50RG9jdW1lbnQiLCJjb250ZW50RG9jdW1lbnQiLCJnZXRTVkdEb2N1bWVudCIsImdldFdpbmRvdyIsImRlZmF1bHRWaWV3Iiwic2hhZG93UHJlZml4Iiwic2VsZWN0SW5TaGFkb3dzIiwib3BlcmF0b3IiLCJyZXBsYWNlIiwic3BsaXQiLCJmaW5kRG9jdW1lbnRIb3N0RWxlbWVudCIsIl9mcmFtZUVsZW1lbnQiLCJwb3RlbnRpYWxIb3N0cyIsImdldEZyYW1lRWxlbWVudCIsImZyYW1lRWxlbWVudCIsIm5vdFJlbmRlcmVkRWxlbWVudHNQYXR0ZXJuIiwiY29tcHV0ZWRTdHlsZSIsInByb3BlcnR5Iiwibm90RGlzcGxheWVkIiwiX3BhdGgiLCJub3RWaXNpYmxlIiwiaGlkZGVuIiwidmlzaWJsZSIsImNvbGxhcHNlZFBhcmVudCIsIm9mZnNldCIsImlzVmlzaWJsZVJ1bGVzIiwibm90UmVuZGVyZWQiLCJjc3NEaXNwbGF5IiwiY3NzVmlzaWJpbGl0eSIsImRldGFpbHNFbGVtZW50IiwiYnJvd3NpbmdDb250ZXh0IiwiaXNBdWRpb1dpdGhvdXRDb250cm9scyIsIl9pc1Zpc2libGUiLCJpc1Zpc2libGUiLCJnZXRNYXBCeU5hbWUiLCJnZXRJbWFnZU9mQXJlYSIsInN1cHBvcnRzJDIiLCJpc1ZhbGlkQXJlYSIsImltZyIsImNvbXBsZXRlIiwibmF0dXJhbEhlaWdodCIsImNoaWxkT2ZJbnRlcmFjdGl2ZSIsIl9lbGVtZW50Iiwic3VwcG9ydHMkMyIsImRpc2FibGVkRWxlbWVudHNQYXR0ZXJuIiwiZGlzYWJsZWRFbGVtZW50cyIsInNlbGVjdCIsInRleHRhcmVhIiwiYnV0dG9uIiwiZmllbGRzZXQiLCJmb3JtIiwiaXNOYXRpdmVEaXNhYmxlZFN1cHBvcnRlZCIsIlJlZ0V4cCIsInN1cHBvcnRzJDQiLCJpc0Rpc2FibGVkRmllbGRzZXQiLCJpc0Rpc2FibGVkRm9ybSIsImlzRGlzYWJsZWQiLCJwYXJlbnRzIiwiaXNPbmx5VGFiYmFibGVSdWxlcyIsIm9ubHlGb2N1c2FibGVCcm93c2luZ0NvbnRleHQiLCJpc09ubHlUYWJiYWJsZSIsInN1cHBvcnRzJDUiLCJpc09ubHlGb2N1c1JlbGV2YW50IiwiX3RhYmluZGV4IiwiaXNGb2N1c2FibGVSdWxlcyIsIm9ubHlUYWJiYWJsZSIsIl9pc09ubHlUYWJiYWJsZSIsImZvY3VzUmVsZXZhbnQiLCJ2aXNpYmlsaXR5T3B0aW9ucyIsIl9ub2RlTmFtZTIiLCJfbm9kZU5hbWUiLCJpc0ZvY3VzYWJsZSIsImNyZWF0ZUZpbHRlciIsImNvbmRpdGlvbiIsImZpbHRlciIsIk5vZGVGaWx0ZXIiLCJGSUxURVJfQUNDRVBUIiwiRklMVEVSX1NLSVAiLCJhY2NlcHROb2RlIiwiUG9zc2libHlGb2N1c2FibGVGaWx0ZXIiLCJxdWVyeUZvY3VzYWJsZVN0cmljdCIsImluY2x1ZGVDb250ZXh0IiwiaW5jbHVkZU9ubHlUYWJiYWJsZSIsInN0cmF0ZWd5IiwiX2lzRm9jdXNhYmxlIiwid2Fsa2VyIiwiY3JlYXRlVHJlZVdhbGtlciIsIlNIT1dfRUxFTUVOVCIsIm5leHROb2RlIiwiY3VycmVudE5vZGUiLCJjb25jYXQiLCJ1bnNoaWZ0Iiwic3VwcG9ydHMkNiIsInNlbGVjdG9yJDEiLCJzZWxlY3RvciQyIiwicXVlcnlGb2N1c2FibGVRdWljayIsIl9zZWxlY3RvciIsImVsZW1lbnRzIiwicXVlcnlGb2N1c2FibGUiLCJfcmVmJHN0cmF0ZWd5Iiwic3VwcG9ydHMkNyIsImZvY3VzYWJsZUVsZW1lbnRzUGF0dGVybiIsImlzVGFiYmFibGVSdWxlcyIsImZyYW1lTm9kZU5hbWUiLCJpc0ZpeGVkQmxpbmsiLCJoYXNUYWJiYWJsZVRhYmluZGV4T3JOb25lIiwiaGFzVGFiYmFibGVUYWJpbmRleCIsInBvdGVudGlhbGx5VGFiYmFibGUiLCJ0YWJJbmRleCIsIl9zdHlsZSIsIl9zdHlsZTIiLCJpc0ZvY3VzUmVsZXZhbnRXaXRob3V0RmxleGJveCIsImlzVGFiYmFibGVXaXRob3V0RmxleGJveCIsImlzVGFiYmFibGUiLCJxdWVyeVRhYmJhYmxlIiwiX2lzVGFiYmFibGUiLCJjb21wYXJlRG9tUG9zaXRpb24iLCJhIiwiYiIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwiRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HIiwic29ydERvbU9yZGVyIiwic29ydCIsImdldEZpcnN0U3VjY2Vzc29yT2Zmc2V0IiwiZmluZEluc2VydGlvbk9mZnNldHMiLCJyZXNvbHZlRWxlbWVudCIsImluc2VydGlvbnMiLCJpbmplY3Rpb25zIiwiaW5zZXJ0RWxlbWVudHNBdE9mZnNldHMiLCJpbnNlcnRlZCIsImluc2VydGlvbiIsInJlbW92ZSIsImFyZ3MiLCJzcGxpY2UiLCJhcHBseSIsIm1lcmdlSW5Eb21PcmRlciIsIl9saXN0IiwiX2VsZW1lbnRzIiwiX2NyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsInByb3BzIiwiZGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIk1hcHMiLCJtYXBzIiwiZ2V0QXJlYXNGb3IiLCJhZGRNYXBCeU5hbWUiLCJleHRyYWN0QXJlYXNGcm9tTGlzdCIsInNvcnRBcmVhIiwidXNlbWFwcyIsImltYWdlIiwiX2NyZWF0ZUNsYXNzJDEiLCJfY2xhc3NDYWxsQ2hlY2skMSIsIlNoYWRvd3MiLCJzb3J0RWxlbWVudHMiLCJob3N0Q291bnRlciIsImluSG9zdCIsImluRG9jdW1lbnQiLCJob3N0cyIsIl9yZWdpc3Rlckhvc3QiLCJfc29ydGluZ0lkIiwicGFyZW50SG9zdCIsIl9yZWdpc3Rlckhvc3RQYXJlbnQiLCJfcmVnaXN0ZXJFbGVtZW50IiwiZXh0cmFjdEVsZW1lbnRzIiwiX2luamVjdEhvc3RzIiwiX3JlcGxhY2VIb3N0cyIsIl9jbGVhbnVwIiwiX2NvbnRleHQiLCJfbWVyZ2UiLCJtZXJnZWQiLCJfcmVzb2x2ZUhvc3RFbGVtZW50IiwiYmluZCIsInNvcnRTaGFkb3dlZCIsInNoYWRvd3MiLCJzb3J0VGFiaW5kZXgiLCJpbmRleGVzIiwibm9ybWFsIiwicmVkdWNlUmlnaHQiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJzdXBwb3J0cyQ4IiwibW92ZUNvbnRleHRUb0JlZ2lubmluZyIsInBvcyIsInRtcCIsInF1ZXJ5VGFic2VxdWVuY2UiLCJjcmVhdGVTaGFkb3dSb290Iiwia2V5Y29kZSIsInRhYiIsImxlZnQiLCJ1cCIsInJpZ2h0IiwiZG93biIsInBhZ2VVcCIsInBhZ2VEb3duIiwiZW5kIiwiaG9tZSIsImVudGVyIiwiZXNjYXBlIiwic3BhY2UiLCJzaGlmdCIsImNhcHNMb2NrIiwiY3RybCIsImFsdCIsIm1ldGEiLCJwYXVzZSIsImluc2VydCIsImRlbGV0ZSIsImJhY2tzcGFjZSIsIl9hbGlhcyIsIm4iLCJfbiIsImNvZGUiLCJudW1Db2RlIiwiX24yIiwiX2NvZGUiLCJuYW1lJDEiLCJmcm9tQ2hhckNvZGUiLCJtb2RpZmllciIsIm1vZGlmaWVyU2VxdWVuY2UiLCJjcmVhdGVFeHBlY3RlZE1vZGlmaWVycyIsImlnbm9yZU1vZGlmaWVycyIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2hpZnRLZXkiLCJyZXNvbHZlTW9kaWZpZXJzIiwibW9kaWZpZXJzIiwiZXhwZWN0ZWQiLCJ0b2tlbiIsInByb3BlcnR5TmFtZSIsInJlc29sdmVLZXkiLCJtYXRjaE1vZGlmaWVycyIsImV2ZW50IiwicHJvcCIsImtleUJpbmRpbmciLCJ0ZXh0IiwiX3RleHQiLCJ0b2tlbnMiLCJfbW9kaWZpZXJzIiwiX2tleUNvZGVzIiwia2V5Q29kZXMiLCJnZXRQYXJlbnRDb21wYXJhdG9yIiwiaW5jbHVkZVNlbGYiLCJpc0NoaWxkT2YiLCJET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkiLCJpc1BhcmVudE9mIiwid2hlbktleSIsImJpbmRpbmdzIiwibWFwS2V5cyIsInJlZ2lzdGVyQmluZGluZyIsImFkZENhbGxiYWNrIiwiaGFuZGxlS2V5RG93biIsImRlZmF1bHRQcmV2ZW50ZWQiLCJpc1BhcmVudE9mRWxlbWVudCIsImtleUNvZGUiLCJ3aGljaCIsIl9ldmVudCIsImRpc2VuZ2FnZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicGFyYW0iLCJhbHRTaGlmdFRhYiIsInByZXZlbnREZWZhdWx0Iiwic2VxdWVuY2UiLCJiYWNrd2FyZCIsImZpcnN0IiwibGFzdCIsInNvdXJjZSIsImN1cnJlbnRJbmRleCIsImZvdW5kIiwiaW5kZXgiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js ***! + \**********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-dialog-overlay] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n overflow: auto;\\n z-index: 9000;\\n\\n display: flex;\\n align-content: center;\\n align-items: center;\\n flex-direction: column;\\n padding: 10vh 15px 0;\\n }\\n\\n @media (max-height: 812px) {\\n [data-nextjs-dialog-overlay] {\\n padding: 15px 15px 0;\\n }\\n }\\n\\n [data-nextjs-dialog-backdrop] {\\n position: fixed;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n left: 0;\\n background-color: rgba(17, 17, 17, 0.2);\\n pointer-events: all;\\n z-index: -1;\\n }\\n\\n [data-nextjs-dialog-backdrop-fixed] {\\n cursor: not-allowed;\\n -webkit-backdrop-filter: blur(8px);\\n backdrop-filter: blur(8px);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9PdmVybGF5L3N0eWxlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMENBQXlDO0lBQ3JDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsaUNBQWlDQyxtQkFBT0EsQ0FBQyw0SUFBK0M7QUFDOUYsTUFBTUMsZ0JBQWdCRCxtQkFBT0EsQ0FBQyx1SkFBNkI7QUFDM0QsU0FBU0U7SUFDTCxNQUFNQyxPQUFPSiwrQkFBK0JLLENBQUMsQ0FBQztRQUMxQztLQUNIO0lBQ0RGLGtCQUFrQjtRQUNkLE9BQU9DO0lBQ1g7SUFDQSxPQUFPQTtBQUNYO0FBQ0EsTUFBTUwsU0FBUyxDQUFDLEdBQUdHLGNBQWNJLElBQUksRUFBRUg7QUFFdkMsSUFBSSxDQUFDLE9BQU9SLFFBQVFZLE9BQU8sS0FBSyxjQUFlLE9BQU9aLFFBQVFZLE9BQU8sS0FBSyxZQUFZWixRQUFRWSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9aLFFBQVFZLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktmLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUVksT0FBTyxFQUFFLGNBQWM7UUFBRVgsT0FBTztJQUFLO0lBQ25FSCxPQUFPZ0IsTUFBTSxDQUFDZCxRQUFRWSxPQUFPLEVBQUVaO0lBQy9CZSxPQUFPZixPQUFPLEdBQUdBLFFBQVFZLE9BQU87QUFDbEMsRUFFQSxrQ0FBa0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL092ZXJsYXkvc3R5bGVzLmpzP2UyYjEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHlsZXNcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICB9XG59KTtcbmNvbnN0IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2VcIik7XG5jb25zdCBfbm9vcHRlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZVwiKTtcbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgICBjb25zdCBkYXRhID0gX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlLl8oW1xuICAgICAgICBcIlxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XSB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgdG9wOiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICBvdmVyZmxvdzogYXV0bztcXG4gICAgei1pbmRleDogOTAwMDtcXG5cXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24tY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBwYWRkaW5nOiAxMHZoIDE1cHggMDtcXG4gIH1cXG5cXG4gIEBtZWRpYSAobWF4LWhlaWdodDogODEycHgpIHtcXG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XSB7XFxuICAgICAgcGFkZGluZzogMTVweCAxNXB4IDA7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3BdIHtcXG4gICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICB0b3A6IDA7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICBib3R0b206IDA7XFxuICAgIGxlZnQ6IDA7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMTcsIDE3LCAxNywgMC4yKTtcXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG4gICAgei1pbmRleDogLTE7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wLWZpeGVkXSB7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XFxuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xcbiAgfVxcblwiXG4gICAgXSk7XG4gICAgX3RlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIGRhdGE7XG59XG5jb25zdCBzdHlsZXMgPSAoMCwgX25vb3B0ZW1wbGF0ZS5ub29wKShfdGVtcGxhdGVPYmplY3QoKSk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic3R5bGVzIiwiX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlIiwicmVxdWlyZSIsIl9ub29wdGVtcGxhdGUiLCJfdGVtcGxhdGVPYmplY3QiLCJkYXRhIiwiXyIsIm5vb3AiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js": +/*!********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js ***! + \********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ShadowPortal\", ({\n enumerable: true,\n get: function() {\n return ShadowPortal;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _reactdom = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\");\nfunction ShadowPortal(param) {\n _s();\n let { children } = param;\n let portalNode = _react.useRef(null);\n let shadowNode = _react.useRef(null);\n let [, forceUpdate] = _react.useState();\n _react.useLayoutEffect(()=>{\n const ownerDocument = document;\n portalNode.current = ownerDocument.createElement(\"nextjs-portal\");\n shadowNode.current = portalNode.current.attachShadow({\n mode: \"open\"\n });\n ownerDocument.body.appendChild(portalNode.current);\n forceUpdate({});\n return ()=>{\n if (portalNode.current && portalNode.current.ownerDocument) {\n portalNode.current.ownerDocument.body.removeChild(portalNode.current);\n }\n };\n }, []);\n return shadowNode.current ? /*#__PURE__*/ (0, _reactdom.createPortal)(children, shadowNode.current) : null;\n}\n_s(ShadowPortal, \"P7YL0rn/sjH62F7+OsEXN5GMw3U=\");\n_c = ShadowPortal;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ShadowPortal.js.map\nvar _c;\n$RefreshReg$(_c, \"ShadowPortal\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9TaGFkb3dQb3J0YWwuanMiLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsZ0RBQStDO0lBQzNDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUMsU0FBUyxXQUFXLEdBQUdGLDBCQUEwQkcsQ0FBQyxDQUFDRixtQkFBT0EsQ0FBQyxtRkFBTztBQUN4RSxNQUFNRyxZQUFZSCxtQkFBT0EsQ0FBQywyRkFBVztBQUNyQyxTQUFTRixhQUFhTSxLQUFLOztJQUN2QixJQUFJLEVBQUVDLFFBQVEsRUFBRSxHQUFHRDtJQUNuQixJQUFJRSxhQUFhTCxPQUFPTSxNQUFNLENBQUM7SUFDL0IsSUFBSUMsYUFBYVAsT0FBT00sTUFBTSxDQUFDO0lBQy9CLElBQUksR0FBR0UsWUFBWSxHQUFHUixPQUFPUyxRQUFRO0lBQ3JDVCxPQUFPVSxlQUFlLENBQUM7UUFDbkIsTUFBTUMsZ0JBQWdCQztRQUN0QlAsV0FBV1EsT0FBTyxHQUFHRixjQUFjRyxhQUFhLENBQUM7UUFDakRQLFdBQVdNLE9BQU8sR0FBR1IsV0FBV1EsT0FBTyxDQUFDRSxZQUFZLENBQUM7WUFDakRDLE1BQU07UUFDVjtRQUNBTCxjQUFjTSxJQUFJLENBQUNDLFdBQVcsQ0FBQ2IsV0FBV1EsT0FBTztRQUNqREwsWUFBWSxDQUFDO1FBQ2IsT0FBTztZQUNILElBQUlILFdBQVdRLE9BQU8sSUFBSVIsV0FBV1EsT0FBTyxDQUFDRixhQUFhLEVBQUU7Z0JBQ3hETixXQUFXUSxPQUFPLENBQUNGLGFBQWEsQ0FBQ00sSUFBSSxDQUFDRSxXQUFXLENBQUNkLFdBQVdRLE9BQU87WUFDeEU7UUFDSjtJQUNKLEdBQUcsRUFBRTtJQUNMLE9BQU9OLFdBQVdNLE9BQU8sR0FBaUIsV0FBSCxHQUFJLElBQUdYLFVBQVVrQixZQUFZLEVBQUVoQixVQUFVRyxXQUFXTSxPQUFPLElBQUk7QUFDMUc7R0FwQlNoQjtLQUFBQTtBQXNCVCxJQUFJLENBQUMsT0FBT0osUUFBUTRCLE9BQU8sS0FBSyxjQUFlLE9BQU81QixRQUFRNEIsT0FBTyxLQUFLLFlBQVk1QixRQUFRNEIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPNUIsUUFBUTRCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcksvQixPQUFPQyxjQUFjLENBQUNDLFFBQVE0QixPQUFPLEVBQUUsY0FBYztRQUFFM0IsT0FBTztJQUFLO0lBQ25FSCxPQUFPZ0MsTUFBTSxDQUFDOUIsUUFBUTRCLE9BQU8sRUFBRTVCO0lBQy9CK0IsT0FBTy9CLE9BQU8sR0FBR0EsUUFBUTRCLE9BQU87QUFDbEMsRUFFQSx3Q0FBd0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL1NoYWRvd1BvcnRhbC5qcz8xZjExIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU2hhZG93UG9ydGFsXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTaGFkb3dQb3J0YWw7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX3JlYWN0ZG9tID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcbmZ1bmN0aW9uIFNoYWRvd1BvcnRhbChwYXJhbSkge1xuICAgIGxldCB7IGNoaWxkcmVuIH0gPSBwYXJhbTtcbiAgICBsZXQgcG9ydGFsTm9kZSA9IF9yZWFjdC51c2VSZWYobnVsbCk7XG4gICAgbGV0IHNoYWRvd05vZGUgPSBfcmVhY3QudXNlUmVmKG51bGwpO1xuICAgIGxldCBbLCBmb3JjZVVwZGF0ZV0gPSBfcmVhY3QudXNlU3RhdGUoKTtcbiAgICBfcmVhY3QudXNlTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGNvbnN0IG93bmVyRG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICAgICAgcG9ydGFsTm9kZS5jdXJyZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibmV4dGpzLXBvcnRhbFwiKTtcbiAgICAgICAgc2hhZG93Tm9kZS5jdXJyZW50ID0gcG9ydGFsTm9kZS5jdXJyZW50LmF0dGFjaFNoYWRvdyh7XG4gICAgICAgICAgICBtb2RlOiBcIm9wZW5cIlxuICAgICAgICB9KTtcbiAgICAgICAgb3duZXJEb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcnRhbE5vZGUuY3VycmVudCk7XG4gICAgICAgIGZvcmNlVXBkYXRlKHt9KTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICBpZiAocG9ydGFsTm9kZS5jdXJyZW50ICYmIHBvcnRhbE5vZGUuY3VycmVudC5vd25lckRvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgcG9ydGFsTm9kZS5jdXJyZW50Lm93bmVyRG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChwb3J0YWxOb2RlLmN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gc2hhZG93Tm9kZS5jdXJyZW50ID8gLyojX19QVVJFX18qLyAoMCwgX3JlYWN0ZG9tLmNyZWF0ZVBvcnRhbCkoY2hpbGRyZW4sIHNoYWRvd05vZGUuY3VycmVudCkgOiBudWxsO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1TaGFkb3dQb3J0YWwuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIlNoYWRvd1BvcnRhbCIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiXyIsIl9yZWFjdGRvbSIsInBhcmFtIiwiY2hpbGRyZW4iLCJwb3J0YWxOb2RlIiwidXNlUmVmIiwic2hhZG93Tm9kZSIsImZvcmNlVXBkYXRlIiwidXNlU3RhdGUiLCJ1c2VMYXlvdXRFZmZlY3QiLCJvd25lckRvY3VtZW50IiwiZG9jdW1lbnQiLCJjdXJyZW50IiwiY3JlYXRlRWxlbWVudCIsImF0dGFjaFNoYWRvdyIsIm1vZGUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVDaGlsZCIsImNyZWF0ZVBvcnRhbCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js": +/*!***************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js ***! + \***************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"EditorLink\", ({\n enumerable: true,\n get: function() {\n return EditorLink;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _useopenineditor = __webpack_require__(/*! ../../helpers/use-open-in-editor */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\");\nfunction EditorLink(param) {\n let { file, isSourceFile, location } = param;\n var _location_line, _location_column;\n const open = (0, _useopenineditor.useOpenInEditor)({\n file,\n lineNumber: (_location_line = location == null ? void 0 : location.line) != null ? _location_line : 1,\n column: (_location_column = location == null ? void 0 : location.column) != null ? _location_column : 0\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-with-open-in-editor-link\": true,\n \"data-with-open-in-editor-link-source-file\": isSourceFile ? true : undefined,\n \"data-with-open-in-editor-link-import-trace\": isSourceFile ? undefined : true,\n tabIndex: 10,\n role: \"link\",\n onClick: open,\n title: \"Click to open in your editor\",\n children: [\n file,\n location ? \":\" + location.line + \":\" + location.column : null,\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n })\n ]\n })\n ]\n });\n}\n_c = EditorLink;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=EditorLink.js.map\nvar _c;\n$RefreshReg$(_c, \"EditorLink\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9UZXJtaW5hbC9FZGl0b3JMaW5rLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw4Q0FBNkM7SUFDekNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGdJQUF5QztBQUNsRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyxtRkFBTztBQUN2RSxNQUFNSSxtQkFBbUJKLG1CQUFPQSxDQUFDLGlLQUFrQztBQUNuRSxTQUFTRixXQUFXTyxLQUFLO0lBQ3JCLElBQUksRUFBRUMsSUFBSSxFQUFFQyxZQUFZLEVBQUVDLFFBQVEsRUFBRSxHQUFHSDtJQUN2QyxJQUFJSSxnQkFBZ0JDO0lBQ3BCLE1BQU1DLE9BQU8sQ0FBQyxHQUFHUCxpQkFBaUJRLGVBQWUsRUFBRTtRQUMvQ047UUFDQU8sWUFBWSxDQUFDSixpQkFBaUJELFlBQVksT0FBTyxLQUFLLElBQUlBLFNBQVNNLElBQUksS0FBSyxPQUFPTCxpQkFBaUI7UUFDcEdNLFFBQVEsQ0FBQ0wsbUJBQW1CRixZQUFZLE9BQU8sS0FBSyxJQUFJQSxTQUFTTyxNQUFNLEtBQUssT0FBT0wsbUJBQW1CO0lBQzFHO0lBQ0EsT0FBcUIsV0FBSCxHQUFJLElBQUdULFlBQVllLElBQUksRUFBRSxPQUFPO1FBQzlDLGlDQUFpQztRQUNqQyw2Q0FBNkNULGVBQWUsT0FBT1U7UUFDbkUsOENBQThDVixlQUFlVSxZQUFZO1FBQ3pFQyxVQUFVO1FBQ1ZDLE1BQU07UUFDTkMsU0FBU1Q7UUFDVFUsT0FBTztRQUNQQyxVQUFVO1lBQ05oQjtZQUNBRSxXQUFXLE1BQU1BLFNBQVNNLElBQUksR0FBRyxNQUFNTixTQUFTTyxNQUFNLEdBQUc7WUFDekQsV0FBVyxHQUFJLElBQUdkLFlBQVllLElBQUksRUFBRSxPQUFPO2dCQUN2Q08sT0FBTztnQkFDUEMsU0FBUztnQkFDVEMsTUFBTTtnQkFDTkMsUUFBUTtnQkFDUkMsYUFBYTtnQkFDYkMsZUFBZTtnQkFDZkMsZ0JBQWdCO2dCQUNoQlAsVUFBVTtvQkFDTixXQUFXLEdBQUksSUFBR3JCLFlBQVk2QixHQUFHLEVBQUUsUUFBUTt3QkFDdkNDLEdBQUc7b0JBQ1A7b0JBQ0EsV0FBVyxHQUFJLElBQUc5QixZQUFZNkIsR0FBRyxFQUFFLFlBQVk7d0JBQzNDRSxRQUFRO29CQUNaO29CQUNBLFdBQVcsR0FBSSxJQUFHL0IsWUFBWTZCLEdBQUcsRUFBRSxRQUFRO3dCQUN2Q0csSUFBSTt3QkFDSkMsSUFBSTt3QkFDSkMsSUFBSTt3QkFDSkMsSUFBSTtvQkFDUjtpQkFDSDtZQUNMO1NBQ0g7SUFDTDtBQUNKO0tBNUNTdEM7QUE4Q1QsSUFBSSxDQUFDLE9BQU9KLFFBQVEyQyxPQUFPLEtBQUssY0FBZSxPQUFPM0MsUUFBUTJDLE9BQU8sS0FBSyxZQUFZM0MsUUFBUTJDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzNDLFFBQVEyQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLOUMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMkMsT0FBTyxFQUFFLGNBQWM7UUFBRTFDLE9BQU87SUFBSztJQUNuRUgsT0FBTytDLE1BQU0sQ0FBQzdDLFFBQVEyQyxPQUFPLEVBQUUzQztJQUMvQjhDLE9BQU85QyxPQUFPLEdBQUdBLFFBQVEyQyxPQUFPO0FBQ2xDLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9UZXJtaW5hbC9FZGl0b3JMaW5rLmpzPzk2YzgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJFZGl0b3JMaW5rXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBFZGl0b3JMaW5rO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX3VzZW9wZW5pbmVkaXRvciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL3VzZS1vcGVuLWluLWVkaXRvclwiKTtcbmZ1bmN0aW9uIEVkaXRvckxpbmsocGFyYW0pIHtcbiAgICBsZXQgeyBmaWxlLCBpc1NvdXJjZUZpbGUsIGxvY2F0aW9uIH0gPSBwYXJhbTtcbiAgICB2YXIgX2xvY2F0aW9uX2xpbmUsIF9sb2NhdGlvbl9jb2x1bW47XG4gICAgY29uc3Qgb3BlbiA9ICgwLCBfdXNlb3BlbmluZWRpdG9yLnVzZU9wZW5JbkVkaXRvcikoe1xuICAgICAgICBmaWxlLFxuICAgICAgICBsaW5lTnVtYmVyOiAoX2xvY2F0aW9uX2xpbmUgPSBsb2NhdGlvbiA9PSBudWxsID8gdm9pZCAwIDogbG9jYXRpb24ubGluZSkgIT0gbnVsbCA/IF9sb2NhdGlvbl9saW5lIDogMSxcbiAgICAgICAgY29sdW1uOiAoX2xvY2F0aW9uX2NvbHVtbiA9IGxvY2F0aW9uID09IG51bGwgPyB2b2lkIDAgOiBsb2NhdGlvbi5jb2x1bW4pICE9IG51bGwgPyBfbG9jYXRpb25fY29sdW1uIDogMFxuICAgIH0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgIFwiZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmtcIjogdHJ1ZSxcbiAgICAgICAgXCJkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGluay1zb3VyY2UtZmlsZVwiOiBpc1NvdXJjZUZpbGUgPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgICAgICBcImRhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLWltcG9ydC10cmFjZVwiOiBpc1NvdXJjZUZpbGUgPyB1bmRlZmluZWQgOiB0cnVlLFxuICAgICAgICB0YWJJbmRleDogMTAsXG4gICAgICAgIHJvbGU6IFwibGlua1wiLFxuICAgICAgICBvbkNsaWNrOiBvcGVuLFxuICAgICAgICB0aXRsZTogXCJDbGljayB0byBvcGVuIGluIHlvdXIgZWRpdG9yXCIsXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgbG9jYXRpb24gPyBcIjpcIiArIGxvY2F0aW9uLmxpbmUgKyBcIjpcIiArIGxvY2F0aW9uLmNvbHVtbiA6IG51bGwsXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNMTggMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNlwiXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicG9seWxpbmVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBcIjE1IDMgMjEgMyAyMSA5XCJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJsaW5lXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHgxOiBcIjEwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MTogXCIxNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDI6IFwiMjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBcIjNcIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RWRpdG9yTGluay5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiRWRpdG9yTGluayIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfdXNlb3BlbmluZWRpdG9yIiwicGFyYW0iLCJmaWxlIiwiaXNTb3VyY2VGaWxlIiwibG9jYXRpb24iLCJfbG9jYXRpb25fbGluZSIsIl9sb2NhdGlvbl9jb2x1bW4iLCJvcGVuIiwidXNlT3BlbkluRWRpdG9yIiwibGluZU51bWJlciIsImxpbmUiLCJjb2x1bW4iLCJqc3hzIiwidW5kZWZpbmVkIiwidGFiSW5kZXgiLCJyb2xlIiwib25DbGljayIsInRpdGxlIiwiY2hpbGRyZW4iLCJ4bWxucyIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJqc3giLCJkIiwicG9pbnRzIiwieDEiLCJ5MSIsIngyIiwieTIiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js": +/*!*************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js ***! + \*************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Terminal\", ({\n enumerable: true,\n get: function() {\n return Terminal;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _anser = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/anser */ \"(app-pages-browser)/./node_modules/next/dist/compiled/anser/index.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _hotlinkedtext = __webpack_require__(/*! ../hot-linked-text */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js\");\nconst _EditorLink = __webpack_require__(/*! ./EditorLink */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js\");\nfunction getFile(lines) {\n const contentFileName = lines.shift();\n if (!contentFileName) return null;\n const [fileName, line, column] = contentFileName.split(\":\", 3);\n const parsedLine = Number(line);\n const parsedColumn = Number(column);\n const hasLocation = !Number.isNaN(parsedLine) && !Number.isNaN(parsedColumn);\n return {\n fileName: hasLocation ? fileName : contentFileName,\n location: hasLocation ? {\n line: parsedLine,\n column: parsedColumn\n } : undefined\n };\n}\nfunction getImportTraceFiles(lines) {\n if (lines.some((line)=>/ReactServerComponentsError:/.test(line)) || lines.some((line)=>/Import trace for requested module:/.test(line))) {\n // Grab the lines at the end containing the files\n const files = [];\n while(/.+\\..+/.test(lines[lines.length - 1]) && !lines[lines.length - 1].includes(\":\")){\n const file = lines.pop().trim();\n files.unshift(file);\n }\n return files;\n }\n return [];\n}\nfunction getEditorLinks(content) {\n const lines = content.split(\"\\n\");\n const file = getFile(lines);\n const importTraceFiles = getImportTraceFiles(lines);\n return {\n file,\n source: lines.join(\"\\n\"),\n importTraceFiles\n };\n}\nconst Terminal = function Terminal(param) {\n _s();\n let { content } = param;\n const { file, source, importTraceFiles } = _react.useMemo(()=>getEditorLinks(content), [\n content\n ]);\n const decoded = _react.useMemo(()=>{\n return _anser.default.ansiToJson(source, {\n json: true,\n use_classes: true,\n remove_empty: true\n });\n }, [\n source\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-terminal\": true,\n children: [\n file && /*#__PURE__*/ (0, _jsxruntime.jsx)(_EditorLink.EditorLink, {\n isSourceFile: true,\n file: file.fileName,\n location: file.location\n }, file.fileName),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"pre\", {\n children: [\n decoded.map((entry, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n style: {\n color: entry.fg ? \"var(--color-\" + entry.fg + \")\" : undefined,\n ...entry.decoration === \"bold\" ? {\n fontWeight: 800\n } : entry.decoration === \"italic\" ? {\n fontStyle: \"italic\"\n } : undefined\n },\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hotlinkedtext.HotlinkedText, {\n text: entry.content\n })\n }, \"terminal-entry-\" + index)),\n importTraceFiles.map((importTraceFile)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_EditorLink.EditorLink, {\n isSourceFile: false,\n file: importTraceFile\n }, importTraceFile))\n ]\n })\n ]\n });\n};\n_s(Terminal, \"nkmao/TIox3Jie/+6JvWO3hTKPQ=\");\n_c = Terminal;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Terminal.js.map\nvar _c;\n$RefreshReg$(_c, \"Terminal\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9UZXJtaW5hbC9UZXJtaW5hbC5qcyIsIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0FBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw0Q0FBMkM7SUFDdkNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGdJQUF5QztBQUNsRixNQUFNQyw0QkFBNEJELG1CQUFPQSxDQUFDLGtJQUEwQztBQUNwRixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUcsU0FBUyxXQUFXLEdBQUdKLHlCQUF5QkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxzR0FBMEI7QUFDMUYsTUFBTUssU0FBUyxXQUFXLEdBQUdKLDBCQUEwQkcsQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxtRkFBTztBQUN4RSxNQUFNTSxpQkFBaUJOLG1CQUFPQSxDQUFDLHlKQUFvQjtBQUNuRCxNQUFNTyxjQUFjUCxtQkFBT0EsQ0FBQyxpSkFBYztBQUMxQyxTQUFTUSxRQUFRQyxLQUFLO0lBQ2xCLE1BQU1DLGtCQUFrQkQsTUFBTUUsS0FBSztJQUNuQyxJQUFJLENBQUNELGlCQUFpQixPQUFPO0lBQzdCLE1BQU0sQ0FBQ0UsVUFBVUMsTUFBTUMsT0FBTyxHQUFHSixnQkFBZ0JLLEtBQUssQ0FBQyxLQUFLO0lBQzVELE1BQU1DLGFBQWFDLE9BQU9KO0lBQzFCLE1BQU1LLGVBQWVELE9BQU9IO0lBQzVCLE1BQU1LLGNBQWMsQ0FBQ0YsT0FBT0csS0FBSyxDQUFDSixlQUFlLENBQUNDLE9BQU9HLEtBQUssQ0FBQ0Y7SUFDL0QsT0FBTztRQUNITixVQUFVTyxjQUFjUCxXQUFXRjtRQUNuQ1csVUFBVUYsY0FBYztZQUNwQk4sTUFBTUc7WUFDTkYsUUFBUUk7UUFDWixJQUFJSTtJQUNSO0FBQ0o7QUFDQSxTQUFTQyxvQkFBb0JkLEtBQUs7SUFDOUIsSUFBSUEsTUFBTWUsSUFBSSxDQUFDLENBQUNYLE9BQU8sOEJBQThCWSxJQUFJLENBQUNaLFVBQVVKLE1BQU1lLElBQUksQ0FBQyxDQUFDWCxPQUFPLHFDQUFxQ1ksSUFBSSxDQUFDWixRQUFRO1FBQ3JJLGlEQUFpRDtRQUNqRCxNQUFNYSxRQUFRLEVBQUU7UUFDaEIsTUFBTSxTQUFTRCxJQUFJLENBQUNoQixLQUFLLENBQUNBLE1BQU1rQixNQUFNLEdBQUcsRUFBRSxLQUFLLENBQUNsQixLQUFLLENBQUNBLE1BQU1rQixNQUFNLEdBQUcsRUFBRSxDQUFDQyxRQUFRLENBQUMsS0FBSztZQUNuRixNQUFNQyxPQUFPcEIsTUFBTXFCLEdBQUcsR0FBR0MsSUFBSTtZQUM3QkwsTUFBTU0sT0FBTyxDQUFDSDtRQUNsQjtRQUNBLE9BQU9IO0lBQ1g7SUFDQSxPQUFPLEVBQUU7QUFDYjtBQUNBLFNBQVNPLGVBQWVDLE9BQU87SUFDM0IsTUFBTXpCLFFBQVF5QixRQUFRbkIsS0FBSyxDQUFDO0lBQzVCLE1BQU1jLE9BQU9yQixRQUFRQztJQUNyQixNQUFNMEIsbUJBQW1CWixvQkFBb0JkO0lBQzdDLE9BQU87UUFDSG9CO1FBQ0FPLFFBQVEzQixNQUFNNEIsSUFBSSxDQUFDO1FBQ25CRjtJQUNKO0FBQ0o7QUFDQSxNQUFNckMsV0FBVyxTQUFTQSxTQUFTd0MsS0FBSzs7SUFDcEMsSUFBSSxFQUFFSixPQUFPLEVBQUUsR0FBR0k7SUFDbEIsTUFBTSxFQUFFVCxJQUFJLEVBQUVPLE1BQU0sRUFBRUQsZ0JBQWdCLEVBQUUsR0FBRzlCLE9BQU9rQyxPQUFPLENBQUMsSUFBSU4sZUFBZUMsVUFBVTtRQUNuRkE7S0FDSDtJQUNELE1BQU1NLFVBQVVuQyxPQUFPa0MsT0FBTyxDQUFDO1FBQzNCLE9BQU9wQyxPQUFPc0MsT0FBTyxDQUFDQyxVQUFVLENBQUNOLFFBQVE7WUFDckNPLE1BQU07WUFDTkMsYUFBYTtZQUNiQyxjQUFjO1FBQ2xCO0lBQ0osR0FBRztRQUNDVDtLQUNIO0lBQ0QsT0FBcUIsV0FBSCxHQUFJLElBQUdsQyxZQUFZNEMsSUFBSSxFQUFFLE9BQU87UUFDOUMsd0JBQXdCO1FBQ3hCQyxVQUFVO1lBQ05sQixRQUFzQixXQUFILEdBQUksSUFBRzNCLFlBQVk4QyxHQUFHLEVBQUV6QyxZQUFZMEMsVUFBVSxFQUFFO2dCQUMvREMsY0FBYztnQkFDZHJCLE1BQU1BLEtBQUtqQixRQUFRO2dCQUNuQlMsVUFBVVEsS0FBS1IsUUFBUTtZQUMzQixHQUFHUSxLQUFLakIsUUFBUTtZQUNoQixXQUFXLEdBQUksSUFBR1YsWUFBWTRDLElBQUksRUFBRSxPQUFPO2dCQUN2Q0MsVUFBVTtvQkFDTlAsUUFBUVcsR0FBRyxDQUFDLENBQUNDLE9BQU9DLFFBQXNCLFdBQUgsR0FBSSxJQUFHbkQsWUFBWThDLEdBQUcsRUFBRSxRQUFROzRCQUMvRE0sT0FBTztnQ0FDSEMsT0FBT0gsTUFBTUksRUFBRSxHQUFHLGlCQUFpQkosTUFBTUksRUFBRSxHQUFHLE1BQU1sQztnQ0FDcEQsR0FBRzhCLE1BQU1LLFVBQVUsS0FBSyxTQUFTO29DQUM3QkMsWUFBWTtnQ0FDaEIsSUFBSU4sTUFBTUssVUFBVSxLQUFLLFdBQVc7b0NBQ2hDRSxXQUFXO2dDQUNmLElBQUlyQyxTQUFTOzRCQUNqQjs0QkFDQXlCLFVBQXdCLFdBQUgsR0FBSSxJQUFHN0MsWUFBWThDLEdBQUcsRUFBRTFDLGVBQWVzRCxhQUFhLEVBQUU7Z0NBQ3ZFQyxNQUFNVCxNQUFNbEIsT0FBTzs0QkFDdkI7d0JBQ0osR0FBRyxvQkFBb0JtQjtvQkFDM0JsQixpQkFBaUJnQixHQUFHLENBQUMsQ0FBQ1csa0JBQWdDLFdBQUgsR0FBSSxJQUFHNUQsWUFBWThDLEdBQUcsRUFBRXpDLFlBQVkwQyxVQUFVLEVBQUU7NEJBQzNGQyxjQUFjOzRCQUNkckIsTUFBTWlDO3dCQUNWLEdBQUdBO2lCQUNWO1lBQ0w7U0FDSDtJQUNMO0FBQ0o7R0E3Q01oRTtLQUFBQTtBQStDTixJQUFJLENBQUMsT0FBT0osUUFBUStDLE9BQU8sS0FBSyxjQUFlLE9BQU8vQyxRQUFRK0MsT0FBTyxLQUFLLFlBQVkvQyxRQUFRK0MsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPL0MsUUFBUStDLE9BQU8sQ0FBQ3NCLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdkUsT0FBT0MsY0FBYyxDQUFDQyxRQUFRK0MsT0FBTyxFQUFFLGNBQWM7UUFBRTlDLE9BQU87SUFBSztJQUNuRUgsT0FBT3dFLE1BQU0sQ0FBQ3RFLFFBQVErQyxPQUFPLEVBQUUvQztJQUMvQnVFLE9BQU92RSxPQUFPLEdBQUdBLFFBQVErQyxPQUFPO0FBQ2xDLEVBRUEsb0NBQW9DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9UZXJtaW5hbC9UZXJtaW5hbC5qcz8yNGEzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVGVybWluYWxcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFRlcm1pbmFsO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX2Fuc2VyID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL2Fuc2VyXCIpKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfaG90bGlua2VkdGV4dCA9IHJlcXVpcmUoXCIuLi9ob3QtbGlua2VkLXRleHRcIik7XG5jb25zdCBfRWRpdG9yTGluayA9IHJlcXVpcmUoXCIuL0VkaXRvckxpbmtcIik7XG5mdW5jdGlvbiBnZXRGaWxlKGxpbmVzKSB7XG4gICAgY29uc3QgY29udGVudEZpbGVOYW1lID0gbGluZXMuc2hpZnQoKTtcbiAgICBpZiAoIWNvbnRlbnRGaWxlTmFtZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgW2ZpbGVOYW1lLCBsaW5lLCBjb2x1bW5dID0gY29udGVudEZpbGVOYW1lLnNwbGl0KFwiOlwiLCAzKTtcbiAgICBjb25zdCBwYXJzZWRMaW5lID0gTnVtYmVyKGxpbmUpO1xuICAgIGNvbnN0IHBhcnNlZENvbHVtbiA9IE51bWJlcihjb2x1bW4pO1xuICAgIGNvbnN0IGhhc0xvY2F0aW9uID0gIU51bWJlci5pc05hTihwYXJzZWRMaW5lKSAmJiAhTnVtYmVyLmlzTmFOKHBhcnNlZENvbHVtbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZU5hbWU6IGhhc0xvY2F0aW9uID8gZmlsZU5hbWUgOiBjb250ZW50RmlsZU5hbWUsXG4gICAgICAgIGxvY2F0aW9uOiBoYXNMb2NhdGlvbiA/IHtcbiAgICAgICAgICAgIGxpbmU6IHBhcnNlZExpbmUsXG4gICAgICAgICAgICBjb2x1bW46IHBhcnNlZENvbHVtblxuICAgICAgICB9IDogdW5kZWZpbmVkXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldEltcG9ydFRyYWNlRmlsZXMobGluZXMpIHtcbiAgICBpZiAobGluZXMuc29tZSgobGluZSk9Pi9SZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvcjovLnRlc3QobGluZSkpIHx8IGxpbmVzLnNvbWUoKGxpbmUpPT4vSW1wb3J0IHRyYWNlIGZvciByZXF1ZXN0ZWQgbW9kdWxlOi8udGVzdChsaW5lKSkpIHtcbiAgICAgICAgLy8gR3JhYiB0aGUgbGluZXMgYXQgdGhlIGVuZCBjb250YWluaW5nIHRoZSBmaWxlc1xuICAgICAgICBjb25zdCBmaWxlcyA9IFtdO1xuICAgICAgICB3aGlsZSgvLitcXC4uKy8udGVzdChsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSkgJiYgIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmluY2x1ZGVzKFwiOlwiKSl7XG4gICAgICAgICAgICBjb25zdCBmaWxlID0gbGluZXMucG9wKCkudHJpbSgpO1xuICAgICAgICAgICAgZmlsZXMudW5zaGlmdChmaWxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsZXM7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cbmZ1bmN0aW9uIGdldEVkaXRvckxpbmtzKGNvbnRlbnQpIHtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XG4gICAgY29uc3QgZmlsZSA9IGdldEZpbGUobGluZXMpO1xuICAgIGNvbnN0IGltcG9ydFRyYWNlRmlsZXMgPSBnZXRJbXBvcnRUcmFjZUZpbGVzKGxpbmVzKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBmaWxlLFxuICAgICAgICBzb3VyY2U6IGxpbmVzLmpvaW4oXCJcXG5cIiksXG4gICAgICAgIGltcG9ydFRyYWNlRmlsZXNcbiAgICB9O1xufVxuY29uc3QgVGVybWluYWwgPSBmdW5jdGlvbiBUZXJtaW5hbChwYXJhbSkge1xuICAgIGxldCB7IGNvbnRlbnQgfSA9IHBhcmFtO1xuICAgIGNvbnN0IHsgZmlsZSwgc291cmNlLCBpbXBvcnRUcmFjZUZpbGVzIH0gPSBfcmVhY3QudXNlTWVtbygoKT0+Z2V0RWRpdG9yTGlua3MoY29udGVudCksIFtcbiAgICAgICAgY29udGVudFxuICAgIF0pO1xuICAgIGNvbnN0IGRlY29kZWQgPSBfcmVhY3QudXNlTWVtbygoKT0+e1xuICAgICAgICByZXR1cm4gX2Fuc2VyLmRlZmF1bHQuYW5zaVRvSnNvbihzb3VyY2UsIHtcbiAgICAgICAgICAgIGpzb246IHRydWUsXG4gICAgICAgICAgICB1c2VfY2xhc3NlczogdHJ1ZSxcbiAgICAgICAgICAgIHJlbW92ZV9lbXB0eTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9LCBbXG4gICAgICAgIHNvdXJjZVxuICAgIF0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgIFwiZGF0YS1uZXh0anMtdGVybWluYWxcIjogdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIGZpbGUgJiYgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfRWRpdG9yTGluay5FZGl0b3JMaW5rLCB7XG4gICAgICAgICAgICAgICAgaXNTb3VyY2VGaWxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGU6IGZpbGUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IGZpbGUubG9jYXRpb25cbiAgICAgICAgICAgIH0sIGZpbGUuZmlsZU5hbWUpLFxuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJwcmVcIiwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIGRlY29kZWQubWFwKChlbnRyeSwgaW5kZXgpPT4vKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVudHJ5LmZnID8gXCJ2YXIoLS1jb2xvci1cIiArIGVudHJ5LmZnICsgXCIpXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVudHJ5LmRlY29yYXRpb24gPT09IFwiYm9sZFwiID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogODAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBlbnRyeS5kZWNvcmF0aW9uID09PSBcIml0YWxpY1wiID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFN0eWxlOiBcIml0YWxpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9ob3RsaW5rZWR0ZXh0LkhvdGxpbmtlZFRleHQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZW50cnkuY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBcInRlcm1pbmFsLWVudHJ5LVwiICsgaW5kZXgpKSxcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0VHJhY2VGaWxlcy5tYXAoKGltcG9ydFRyYWNlRmlsZSk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0VkaXRvckxpbmsuRWRpdG9yTGluaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU291cmNlRmlsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogaW1wb3J0VHJhY2VGaWxlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBpbXBvcnRUcmFjZUZpbGUpKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRlcm1pbmFsLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJUZXJtaW5hbCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwiX2pzeHJ1bnRpbWUiLCJfYW5zZXIiLCJfIiwiX3JlYWN0IiwiX2hvdGxpbmtlZHRleHQiLCJfRWRpdG9yTGluayIsImdldEZpbGUiLCJsaW5lcyIsImNvbnRlbnRGaWxlTmFtZSIsInNoaWZ0IiwiZmlsZU5hbWUiLCJsaW5lIiwiY29sdW1uIiwic3BsaXQiLCJwYXJzZWRMaW5lIiwiTnVtYmVyIiwicGFyc2VkQ29sdW1uIiwiaGFzTG9jYXRpb24iLCJpc05hTiIsImxvY2F0aW9uIiwidW5kZWZpbmVkIiwiZ2V0SW1wb3J0VHJhY2VGaWxlcyIsInNvbWUiLCJ0ZXN0IiwiZmlsZXMiLCJsZW5ndGgiLCJpbmNsdWRlcyIsImZpbGUiLCJwb3AiLCJ0cmltIiwidW5zaGlmdCIsImdldEVkaXRvckxpbmtzIiwiY29udGVudCIsImltcG9ydFRyYWNlRmlsZXMiLCJzb3VyY2UiLCJqb2luIiwicGFyYW0iLCJ1c2VNZW1vIiwiZGVjb2RlZCIsImRlZmF1bHQiLCJhbnNpVG9Kc29uIiwianNvbiIsInVzZV9jbGFzc2VzIiwicmVtb3ZlX2VtcHR5IiwianN4cyIsImNoaWxkcmVuIiwianN4IiwiRWRpdG9yTGluayIsImlzU291cmNlRmlsZSIsIm1hcCIsImVudHJ5IiwiaW5kZXgiLCJzdHlsZSIsImNvbG9yIiwiZmciLCJkZWNvcmF0aW9uIiwiZm9udFdlaWdodCIsImZvbnRTdHlsZSIsIkhvdGxpbmtlZFRleHQiLCJ0ZXh0IiwiaW1wb3J0VHJhY2VGaWxlIiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js ***! + \**********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Terminal\", ({\n enumerable: true,\n get: function() {\n return _Terminal.Terminal;\n }\n}));\nconst _Terminal = __webpack_require__(/*! ./Terminal */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9UZXJtaW5hbC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsNENBQTJDO0lBQ3ZDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQyxVQUFVQyxRQUFRO0lBQzdCO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUQsWUFBWUUsbUJBQU9BLENBQUMsNklBQVk7QUFFdEMsSUFBSSxDQUFDLE9BQU9OLFFBQVFPLE9BQU8sS0FBSyxjQUFlLE9BQU9QLFFBQVFPLE9BQU8sS0FBSyxZQUFZUCxRQUFRTyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9QLFFBQVFPLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktWLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUU8sT0FBTyxFQUFFLGNBQWM7UUFBRU4sT0FBTztJQUFLO0lBQ25FSCxPQUFPVyxNQUFNLENBQUNULFFBQVFPLE9BQU8sRUFBRVA7SUFDL0JVLE9BQU9WLE9BQU8sR0FBR0EsUUFBUU8sT0FBTztBQUNsQyxFQUVBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVGVybWluYWwvaW5kZXguanM/OTUyZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRlcm1pbmFsXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfVGVybWluYWwuVGVybWluYWw7XG4gICAgfVxufSk7XG5jb25zdCBfVGVybWluYWwgPSByZXF1aXJlKFwiLi9UZXJtaW5hbFwiKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIl9UZXJtaW5hbCIsIlRlcm1pbmFsIiwicmVxdWlyZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js ***! + \***********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-terminal] {\\n border-radius: var(--size-gap-half);\\n background-color: var(--color-ansi-bg);\\n color: var(--color-ansi-fg);\\n }\\n [data-nextjs-terminal]::selection,\\n [data-nextjs-terminal] *::selection {\\n background-color: var(--color-ansi-selection);\\n }\\n [data-nextjs-terminal] * {\\n color: inherit;\\n background-color: transparent;\\n font-family: var(--font-stack-monospace);\\n }\\n [data-nextjs-terminal] > * {\\n margin: 0;\\n padding: calc(var(--size-gap) + var(--size-gap-half))\\n calc(var(--size-gap-double) + var(--size-gap-half));\\n }\\n\\n [data-nextjs-terminal] pre {\\n white-space: pre-wrap;\\n word-break: break-word;\\n }\\n\\n [data-with-open-in-editor-link] svg {\\n width: auto;\\n height: var(--size-font-small);\\n margin-left: var(--size-gap);\\n }\\n [data-with-open-in-editor-link] {\\n cursor: pointer;\\n }\\n [data-with-open-in-editor-link]:hover {\\n text-decoration: underline dotted;\\n }\\n [data-with-open-in-editor-link-source-file] {\\n border-bottom: 1px solid var(--color-ansi-bright-black);\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n }\\n [data-with-open-in-editor-link-import-trace] {\\n margin-left: var(--size-gap-double);\\n }\\n [data-nextjs-terminal] a {\\n color: inherit;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9UZXJtaW5hbC9zdHlsZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDBDQUF5QztJQUNyQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGlDQUFpQ0MsbUJBQU9BLENBQUMsNElBQStDO0FBQzlGLE1BQU1DLGdCQUFnQkQsbUJBQU9BLENBQUMsdUpBQTZCO0FBQzNELFNBQVNFO0lBQ0wsTUFBTUMsT0FBT0osK0JBQStCSyxDQUFDLENBQUM7UUFDMUM7S0FDSDtJQUNERixrQkFBa0I7UUFDZCxPQUFPQztJQUNYO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLE1BQU1MLFNBQVMsQ0FBQyxHQUFHRyxjQUFjSSxJQUFJLEVBQUVIO0FBRXZDLElBQUksQ0FBQyxPQUFPUixRQUFRWSxPQUFPLEtBQUssY0FBZSxPQUFPWixRQUFRWSxPQUFPLEtBQUssWUFBWVosUUFBUVksT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPWixRQUFRWSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLZixPQUFPQyxjQUFjLENBQUNDLFFBQVFZLE9BQU8sRUFBRSxjQUFjO1FBQUVYLE9BQU87SUFBSztJQUNuRUgsT0FBT2dCLE1BQU0sQ0FBQ2QsUUFBUVksT0FBTyxFQUFFWjtJQUMvQmUsT0FBT2YsT0FBTyxHQUFHQSxRQUFRWSxPQUFPO0FBQ2xDLEVBRUEsa0NBQWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9UZXJtaW5hbC9zdHlsZXMuanM/N2Q3MiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0eWxlc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgIH1cbn0pO1xuY29uc3QgX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZVwiKTtcbmNvbnN0IF9ub29wdGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9ub29wLXRlbXBsYXRlXCIpO1xuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuXyhbXG4gICAgICAgIFwiXFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdIHtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2l6ZS1nYXAtaGFsZik7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktYmcpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1mZyk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdOjpzZWxlY3Rpb24sXFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdICo6OnNlbGVjdGlvbiB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktc2VsZWN0aW9uKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gKiB7XFxuICAgIGNvbG9yOiBpbmhlcml0O1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gPiAqIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBwYWRkaW5nOiBjYWxjKHZhcigtLXNpemUtZ2FwKSArIHZhcigtLXNpemUtZ2FwLWhhbGYpKVxcbiAgICAgIGNhbGModmFyKC0tc2l6ZS1nYXAtZG91YmxlKSArIHZhcigtLXNpemUtZ2FwLWhhbGYpKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gcHJlIHtcXG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcbiAgfVxcblxcbiAgW2RhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rXSBzdmcge1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLWZvbnQtc21hbGwpO1xcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1nYXApO1xcbiAgfVxcbiAgW2RhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rXSB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gIH1cXG4gIFtkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGlua106aG92ZXIge1xcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XFxuICB9XFxuICBbZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmstc291cmNlLWZpbGVdIHtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWFuc2ktYnJpZ2h0LWJsYWNrKTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgfVxcbiAgW2RhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLWltcG9ydC10cmFjZV0ge1xcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1nYXAtZG91YmxlKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gYSB7XFxuICAgIGNvbG9yOiBpbmhlcml0O1xcbiAgfVxcblwiXG4gICAgXSk7XG4gICAgX3RlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIGRhdGE7XG59XG5jb25zdCBzdHlsZXMgPSAoMCwgX25vb3B0ZW1wbGF0ZS5ub29wKShfdGVtcGxhdGVPYmplY3QoKSk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic3R5bGVzIiwiX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlIiwicmVxdWlyZSIsIl9ub29wdGVtcGxhdGUiLCJfdGVtcGxhdGVPYmplY3QiLCJkYXRhIiwiXyIsIm5vb3AiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js ***! + \*******************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Toast\", ({\n enumerable: true,\n get: function() {\n return Toast;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst Toast = function Toast(param) {\n let { onClick, children, className } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-toast\": true,\n onClick: onClick,\n className: className,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n \"data-nextjs-toast-wrapper\": true,\n children: children\n })\n });\n};\n_c = Toast;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Toast.js.map\nvar _c;\n$RefreshReg$(_c, \"Toast\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgseUNBQXdDO0lBQ3BDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsbUZBQU87QUFDeEUsTUFBTUYsUUFBUSxTQUFTQSxNQUFNTSxLQUFLO0lBQzlCLElBQUksRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBRSxHQUFHSDtJQUN2QyxPQUFxQixXQUFILEdBQUksSUFBR0gsWUFBWU8sR0FBRyxFQUFFLE9BQU87UUFDN0MscUJBQXFCO1FBQ3JCSCxTQUFTQTtRQUNURSxXQUFXQTtRQUNYRCxVQUF3QixXQUFILEdBQUksSUFBR0wsWUFBWU8sR0FBRyxFQUFFLE9BQU87WUFDaEQsNkJBQTZCO1lBQzdCRixVQUFVQTtRQUNkO0lBQ0o7QUFDSjtLQVhNUjtBQWFOLElBQUksQ0FBQyxPQUFPSixRQUFRZSxPQUFPLEtBQUssY0FBZSxPQUFPZixRQUFRZSxPQUFPLEtBQUssWUFBWWYsUUFBUWUsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPZixRQUFRZSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLbEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRZSxPQUFPLEVBQUUsY0FBYztRQUFFZCxPQUFPO0lBQUs7SUFDbkVILE9BQU9tQixNQUFNLENBQUNqQixRQUFRZSxPQUFPLEVBQUVmO0lBQy9Ca0IsT0FBT2xCLE9BQU8sR0FBR0EsUUFBUWUsT0FBTztBQUNsQyxFQUVBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QuanM/ZGMzNCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlRvYXN0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBUb2FzdDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IFRvYXN0ID0gZnVuY3Rpb24gVG9hc3QocGFyYW0pIHtcbiAgICBsZXQgeyBvbkNsaWNrLCBjaGlsZHJlbiwgY2xhc3NOYW1lIH0gPSBwYXJhbTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImRpdlwiLCB7XG4gICAgICAgIFwiZGF0YS1uZXh0anMtdG9hc3RcIjogdHJ1ZSxcbiAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIFwiZGF0YS1uZXh0anMtdG9hc3Qtd3JhcHBlclwiOiB0cnVlLFxuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH0pXG4gICAgfSk7XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ub2FzdC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiVG9hc3QiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsInBhcmFtIiwib25DbGljayIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwianN4IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js ***! + \*******************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n styles: function() {\n return _styles.styles;\n },\n Toast: function() {\n return _Toast.Toast;\n }\n});\nconst _styles = __webpack_require__(/*! ./styles */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js\");\nconst _Toast = __webpack_require__(/*! ./Toast */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Ub2FzdC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsUUFBUTtRQUNKLE9BQU9RLFFBQVFSLE1BQU07SUFDekI7SUFDQUMsT0FBTztRQUNILE9BQU9RLE9BQU9SLEtBQUs7SUFDdkI7QUFDSjtBQUNBLE1BQU1PLFVBQVVFLG1CQUFPQSxDQUFDLHNJQUFVO0FBQ2xDLE1BQU1ELFNBQVNDLG1CQUFPQSxDQUFDLG9JQUFTO0FBRWhDLElBQUksQ0FBQyxPQUFPYixRQUFRYyxPQUFPLEtBQUssY0FBZSxPQUFPZCxRQUFRYyxPQUFPLEtBQUssWUFBWWQsUUFBUWMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPZCxRQUFRYyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLakIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRYyxPQUFPLEVBQUUsY0FBYztRQUFFYixPQUFPO0lBQUs7SUFDbkVILE9BQU9rQixNQUFNLENBQUNoQixRQUFRYyxPQUFPLEVBQUVkO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVFjLE9BQU87QUFDbEMsRUFFQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL1RvYXN0L2luZGV4LmpzP2QzYzgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzdHlsZXM6IG51bGwsXG4gICAgVG9hc3Q6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgc3R5bGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdHlsZXMuc3R5bGVzO1xuICAgIH0sXG4gICAgVG9hc3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX1RvYXN0LlRvYXN0O1xuICAgIH1cbn0pO1xuY29uc3QgX3N0eWxlcyA9IHJlcXVpcmUoXCIuL3N0eWxlc1wiKTtcbmNvbnN0IF9Ub2FzdCA9IHJlcXVpcmUoXCIuL1RvYXN0XCIpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJzdHlsZXMiLCJUb2FzdCIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9zdHlsZXMiLCJfVG9hc3QiLCJyZXF1aXJlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js": +/*!********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js ***! + \********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n [data-nextjs-toast] {\\n position: fixed;\\n bottom: var(--size-gap-double);\\n left: var(--size-gap-double);\\n max-width: 420px;\\n z-index: 9000;\\n }\\n\\n @media (max-width: 440px) {\\n [data-nextjs-toast] {\\n max-width: 90vw;\\n left: 5vw;\\n }\\n }\\n\\n [data-nextjs-toast-wrapper] {\\n padding: 16px;\\n border-radius: var(--size-gap-half);\\n font-weight: 500;\\n color: var(--color-ansi-bright-white);\\n background-color: var(--color-ansi-red);\\n box-shadow: 0px var(--size-gap-double) var(--size-gap-quad)\\n rgba(0, 0, 0, 0.25);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Ub2FzdC9zdHlsZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDBDQUF5QztJQUNyQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGlDQUFpQ0MsbUJBQU9BLENBQUMsNElBQStDO0FBQzlGLE1BQU1DLGdCQUFnQkQsbUJBQU9BLENBQUMsdUpBQTZCO0FBQzNELFNBQVNFO0lBQ0wsTUFBTUMsT0FBT0osK0JBQStCSyxDQUFDLENBQUM7UUFDMUM7S0FDSDtJQUNERixrQkFBa0I7UUFDZCxPQUFPQztJQUNYO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLE1BQU1MLFNBQVMsQ0FBQyxHQUFHRyxjQUFjSSxJQUFJLEVBQUVIO0FBRXZDLElBQUksQ0FBQyxPQUFPUixRQUFRWSxPQUFPLEtBQUssY0FBZSxPQUFPWixRQUFRWSxPQUFPLEtBQUssWUFBWVosUUFBUVksT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPWixRQUFRWSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLZixPQUFPQyxjQUFjLENBQUNDLFFBQVFZLE9BQU8sRUFBRSxjQUFjO1FBQUVYLE9BQU87SUFBSztJQUNuRUgsT0FBT2dCLE1BQU0sQ0FBQ2QsUUFBUVksT0FBTyxFQUFFWjtJQUMvQmUsT0FBT2YsT0FBTyxHQUFHQSxRQUFRWSxPQUFPO0FBQ2xDLEVBRUEsa0NBQWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9Ub2FzdC9zdHlsZXMuanM/N2ZjMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0eWxlc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgIH1cbn0pO1xuY29uc3QgX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZVwiKTtcbmNvbnN0IF9ub29wdGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9ub29wLXRlbXBsYXRlXCIpO1xuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuXyhbXG4gICAgICAgIFwiXFxuICBbZGF0YS1uZXh0anMtdG9hc3RdIHtcXG4gICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICBib3R0b206IHZhcigtLXNpemUtZ2FwLWRvdWJsZSk7XFxuICAgIGxlZnQ6IHZhcigtLXNpemUtZ2FwLWRvdWJsZSk7XFxuICAgIG1heC13aWR0aDogNDIwcHg7XFxuICAgIHotaW5kZXg6IDkwMDA7XFxuICB9XFxuXFxuICBAbWVkaWEgKG1heC13aWR0aDogNDQwcHgpIHtcXG4gICAgW2RhdGEtbmV4dGpzLXRvYXN0XSB7XFxuICAgICAgbWF4LXdpZHRoOiA5MHZ3O1xcbiAgICAgIGxlZnQ6IDV2dztcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLXRvYXN0LXdyYXBwZXJdIHtcXG4gICAgcGFkZGluZzogMTZweDtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2l6ZS1nYXAtaGFsZik7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLWJyaWdodC13aGl0ZSk7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktcmVkKTtcXG4gICAgYm94LXNoYWRvdzogMHB4IHZhcigtLXNpemUtZ2FwLWRvdWJsZSkgdmFyKC0tc2l6ZS1nYXAtcXVhZClcXG4gICAgICByZ2JhKDAsIDAsIDAsIDAuMjUpO1xcbiAgfVxcblwiXG4gICAgXSk7XG4gICAgX3RlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIGRhdGE7XG59XG5jb25zdCBzdHlsZXMgPSAoMCwgX25vb3B0ZW1wbGF0ZS5ub29wKShfdGVtcGxhdGVPYmplY3QoKSk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic3R5bGVzIiwiX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlIiwicmVxdWlyZSIsIl9ub29wdGVtcGxhdGUiLCJfdGVtcGxhdGVPYmplY3QiLCJkYXRhIiwiXyIsIm5vb3AiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js": +/*!*************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js ***! + \*************************************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"VersionStalenessInfo\", ({\n enumerable: true,\n get: function() {\n return VersionStalenessInfo;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nfunction VersionStalenessInfo(props) {\n if (!props) return null;\n const { staleness, installed, expected } = props;\n let text = \"\";\n let title = \"\";\n let indicatorClass = \"\";\n switch(staleness){\n case \"fresh\":\n text = \"Next.js is up to date\";\n title = \"Latest available version is detected (\" + installed + \").\";\n indicatorClass = \"fresh\";\n break;\n case \"stale-patch\":\n case \"stale-minor\":\n text = \"Next.js (\" + installed + \") out of date\";\n title = \"There is a newer version (\" + expected + \") available, upgrade recommended! \";\n indicatorClass = \"stale\";\n break;\n case \"stale-major\":\n {\n text = \"Next.js (\" + installed + \") is outdated\";\n title = \"An outdated version detected (latest is \" + expected + \"), upgrade is highly recommended!\";\n indicatorClass = \"outdated\";\n break;\n }\n case \"stale-prerelease\":\n {\n text = \"Next.js (\" + installed + \") is outdated\";\n title = \"There is a newer canary version (\" + expected + \") available, please upgrade! \";\n indicatorClass = \"stale\";\n break;\n }\n case \"newer-than-npm\":\n case \"unknown\":\n break;\n default:\n break;\n }\n if (!text) return null;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"small\", {\n className: \"nextjs-container-build-error-version-status\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n className: indicatorClass\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"small\", {\n className: \"nextjs-container-build-error-version-status\",\n title: title,\n children: text\n }),\n \" \",\n staleness === \"fresh\" || staleness === \"unknown\" ? null : /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n href: \"https://nextjs.org/docs/messages/version-staleness\",\n children: \"(learn more)\"\n })\n ]\n });\n}\n_c = VersionStalenessInfo;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=VersionStalenessInfo.js.map\nvar _c;\n$RefreshReg$(_c, \"VersionStalenessInfo\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9WZXJzaW9uU3RhbGVuZXNzSW5mby9WZXJzaW9uU3RhbGVuZXNzSW5mby5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsd0RBQXVEO0lBQ25ESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxnSUFBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsbUZBQU87QUFDdkUsU0FBU0YscUJBQXFCTSxLQUFLO0lBQy9CLElBQUksQ0FBQ0EsT0FBTyxPQUFPO0lBQ25CLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsRUFBRSxHQUFHSDtJQUMzQyxJQUFJSSxPQUFPO0lBQ1gsSUFBSUMsUUFBUTtJQUNaLElBQUlDLGlCQUFpQjtJQUNyQixPQUFPTDtRQUNILEtBQUs7WUFDREcsT0FBTztZQUNQQyxRQUFRLDJDQUEyQ0gsWUFBWTtZQUMvREksaUJBQWlCO1lBQ2pCO1FBQ0osS0FBSztRQUNMLEtBQUs7WUFDREYsT0FBTyxjQUFjRixZQUFZO1lBQ2pDRyxRQUFRLCtCQUErQkYsV0FBVztZQUNsREcsaUJBQWlCO1lBQ2pCO1FBQ0osS0FBSztZQUNEO2dCQUNJRixPQUFPLGNBQWNGLFlBQVk7Z0JBQ2pDRyxRQUFRLDZDQUE2Q0YsV0FBVztnQkFDaEVHLGlCQUFpQjtnQkFDakI7WUFDSjtRQUNKLEtBQUs7WUFDRDtnQkFDSUYsT0FBTyxjQUFjRixZQUFZO2dCQUNqQ0csUUFBUSxzQ0FBc0NGLFdBQVc7Z0JBQ3pERyxpQkFBaUI7Z0JBQ2pCO1lBQ0o7UUFDSixLQUFLO1FBQ0wsS0FBSztZQUNEO1FBQ0o7WUFDSTtJQUNSO0lBQ0EsSUFBSSxDQUFDRixNQUFNLE9BQU87SUFDbEIsT0FBcUIsV0FBSCxHQUFJLElBQUdQLFlBQVlVLElBQUksRUFBRSxTQUFTO1FBQ2hEQyxXQUFXO1FBQ1hDLFVBQVU7WUFDTixXQUFXLEdBQUksSUFBR1osWUFBWWEsR0FBRyxFQUFFLFFBQVE7Z0JBQ3ZDRixXQUFXRjtZQUNmO1lBQ0EsV0FBVyxHQUFJLElBQUdULFlBQVlhLEdBQUcsRUFBRSxTQUFTO2dCQUN4Q0YsV0FBVztnQkFDWEgsT0FBT0E7Z0JBQ1BJLFVBQVVMO1lBQ2Q7WUFDQTtZQUNBSCxjQUFjLFdBQVdBLGNBQWMsWUFBWSxPQUFxQixXQUFILEdBQUksSUFBR0osWUFBWWEsR0FBRyxFQUFFLEtBQUs7Z0JBQzlGQyxRQUFRO2dCQUNSQyxLQUFLO2dCQUNMQyxNQUFNO2dCQUNOSixVQUFVO1lBQ2Q7U0FDSDtJQUNMO0FBQ0o7S0EzRFNmO0FBNkRULElBQUksQ0FBQyxPQUFPSixRQUFRd0IsT0FBTyxLQUFLLGNBQWUsT0FBT3hCLFFBQVF3QixPQUFPLEtBQUssWUFBWXhCLFFBQVF3QixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU94QixRQUFRd0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzNCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXdCLE9BQU8sRUFBRSxjQUFjO1FBQUV2QixPQUFPO0lBQUs7SUFDbkVILE9BQU80QixNQUFNLENBQUMxQixRQUFRd0IsT0FBTyxFQUFFeEI7SUFDL0IyQixPQUFPM0IsT0FBTyxHQUFHQSxRQUFRd0IsT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbXBvbmVudHMvVmVyc2lvblN0YWxlbmVzc0luZm8vVmVyc2lvblN0YWxlbmVzc0luZm8uanM/YjdkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlZlcnNpb25TdGFsZW5lc3NJbmZvXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBWZXJzaW9uU3RhbGVuZXNzSW5mbztcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmZ1bmN0aW9uIFZlcnNpb25TdGFsZW5lc3NJbmZvKHByb3BzKSB7XG4gICAgaWYgKCFwcm9wcykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgeyBzdGFsZW5lc3MsIGluc3RhbGxlZCwgZXhwZWN0ZWQgfSA9IHByb3BzO1xuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICBsZXQgdGl0bGUgPSBcIlwiO1xuICAgIGxldCBpbmRpY2F0b3JDbGFzcyA9IFwiXCI7XG4gICAgc3dpdGNoKHN0YWxlbmVzcyl7XG4gICAgICAgIGNhc2UgXCJmcmVzaFwiOlxuICAgICAgICAgICAgdGV4dCA9IFwiTmV4dC5qcyBpcyB1cCB0byBkYXRlXCI7XG4gICAgICAgICAgICB0aXRsZSA9IFwiTGF0ZXN0IGF2YWlsYWJsZSB2ZXJzaW9uIGlzIGRldGVjdGVkIChcIiArIGluc3RhbGxlZCArIFwiKS5cIjtcbiAgICAgICAgICAgIGluZGljYXRvckNsYXNzID0gXCJmcmVzaFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdGFsZS1wYXRjaFwiOlxuICAgICAgICBjYXNlIFwic3RhbGUtbWlub3JcIjpcbiAgICAgICAgICAgIHRleHQgPSBcIk5leHQuanMgKFwiICsgaW5zdGFsbGVkICsgXCIpIG91dCBvZiBkYXRlXCI7XG4gICAgICAgICAgICB0aXRsZSA9IFwiVGhlcmUgaXMgYSBuZXdlciB2ZXJzaW9uIChcIiArIGV4cGVjdGVkICsgXCIpIGF2YWlsYWJsZSwgdXBncmFkZSByZWNvbW1lbmRlZCEgXCI7XG4gICAgICAgICAgICBpbmRpY2F0b3JDbGFzcyA9IFwic3RhbGVcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3RhbGUtbWFqb3JcIjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gXCJOZXh0LmpzIChcIiArIGluc3RhbGxlZCArIFwiKSBpcyBvdXRkYXRlZFwiO1xuICAgICAgICAgICAgICAgIHRpdGxlID0gXCJBbiBvdXRkYXRlZCB2ZXJzaW9uIGRldGVjdGVkIChsYXRlc3QgaXMgXCIgKyBleHBlY3RlZCArIFwiKSwgdXBncmFkZSBpcyBoaWdobHkgcmVjb21tZW5kZWQhXCI7XG4gICAgICAgICAgICAgICAgaW5kaWNhdG9yQ2xhc3MgPSBcIm91dGRhdGVkXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJzdGFsZS1wcmVyZWxlYXNlXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IFwiTmV4dC5qcyAoXCIgKyBpbnN0YWxsZWQgKyBcIikgaXMgb3V0ZGF0ZWRcIjtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IFwiVGhlcmUgaXMgYSBuZXdlciBjYW5hcnkgdmVyc2lvbiAoXCIgKyBleHBlY3RlZCArIFwiKSBhdmFpbGFibGUsIHBsZWFzZSB1cGdyYWRlISBcIjtcbiAgICAgICAgICAgICAgICBpbmRpY2F0b3JDbGFzcyA9IFwic3RhbGVcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm5ld2VyLXRoYW4tbnBtXCI6XG4gICAgICAgIGNhc2UgXCJ1bmtub3duXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoIXRleHQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInNtYWxsXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXNcIixcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IGluZGljYXRvckNsYXNzXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzbWFsbFwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHRleHRcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICBzdGFsZW5lc3MgPT09IFwiZnJlc2hcIiB8fCBzdGFsZW5lc3MgPT09IFwidW5rbm93blwiID8gbnVsbCA6IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJhXCIsIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCIsXG4gICAgICAgICAgICAgICAgcmVsOiBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixcbiAgICAgICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3ZlcnNpb24tc3RhbGVuZXNzXCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiKGxlYXJuIG1vcmUpXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VmVyc2lvblN0YWxlbmVzc0luZm8uanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIlZlcnNpb25TdGFsZW5lc3NJbmZvIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsInByb3BzIiwic3RhbGVuZXNzIiwiaW5zdGFsbGVkIiwiZXhwZWN0ZWQiLCJ0ZXh0IiwidGl0bGUiLCJpbmRpY2F0b3JDbGFzcyIsImpzeHMiLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsImpzeCIsInRhcmdldCIsInJlbCIsImhyZWYiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js": +/*!**********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js ***! + \**********************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n styles: function() {\n return _styles.styles;\n },\n VersionStalenessInfo: function() {\n return _VersionStalenessInfo.VersionStalenessInfo;\n }\n});\nconst _styles = __webpack_require__(/*! ./styles */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ./VersionStalenessInfo */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9WZXJzaW9uU3RhbGVuZXNzSW5mby9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsUUFBUTtRQUNKLE9BQU9RLFFBQVFSLE1BQU07SUFDekI7SUFDQUMsc0JBQXNCO1FBQ2xCLE9BQU9RLHNCQUFzQlIsb0JBQW9CO0lBQ3JEO0FBQ0o7QUFDQSxNQUFNTyxVQUFVRSxtQkFBT0EsQ0FBQyxxSkFBVTtBQUNsQyxNQUFNRCx3QkFBd0JDLG1CQUFPQSxDQUFDLGlMQUF3QjtBQUU5RCxJQUFJLENBQUMsT0FBT2IsUUFBUWMsT0FBTyxLQUFLLGNBQWUsT0FBT2QsUUFBUWMsT0FBTyxLQUFLLFlBQVlkLFFBQVFjLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2QsUUFBUWMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2pCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWMsT0FBTyxFQUFFLGNBQWM7UUFBRWIsT0FBTztJQUFLO0lBQ25FSCxPQUFPa0IsTUFBTSxDQUFDaEIsUUFBUWMsT0FBTyxFQUFFZDtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRYyxPQUFPO0FBQ2xDLEVBRUEsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9WZXJzaW9uU3RhbGVuZXNzSW5mby9pbmRleC5qcz8xZjNmIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgc3R5bGVzOiBudWxsLFxuICAgIFZlcnNpb25TdGFsZW5lc3NJbmZvOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIHN0eWxlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfc3R5bGVzLnN0eWxlcztcbiAgICB9LFxuICAgIFZlcnNpb25TdGFsZW5lc3NJbmZvOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9WZXJzaW9uU3RhbGVuZXNzSW5mby5WZXJzaW9uU3RhbGVuZXNzSW5mbztcbiAgICB9XG59KTtcbmNvbnN0IF9zdHlsZXMgPSByZXF1aXJlKFwiLi9zdHlsZXNcIik7XG5jb25zdCBfVmVyc2lvblN0YWxlbmVzc0luZm8gPSByZXF1aXJlKFwiLi9WZXJzaW9uU3RhbGVuZXNzSW5mb1wiKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwic3R5bGVzIiwiVmVyc2lvblN0YWxlbmVzc0luZm8iLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfc3R5bGVzIiwiX1ZlcnNpb25TdGFsZW5lc3NJbmZvIiwicmVxdWlyZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js": +/*!***********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js ***! + \***********************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"styles\", ({\n enumerable: true,\n get: function() {\n return styles;\n }\n}));\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n .nextjs-container-build-error-version-status {\\n flex: 1;\\n text-align: right;\\n }\\n .nextjs-container-build-error-version-status small {\\n margin-left: var(--size-gap);\\n font-size: var(--size-font-small);\\n }\\n .nextjs-container-build-error-version-status a {\\n font-size: var(--size-font-small);\\n }\\n .nextjs-container-build-error-version-status span {\\n display: inline-block;\\n width: 10px;\\n height: 10px;\\n border-radius: 5px;\\n background: var(--color-ansi-bright-black);\\n }\\n .nextjs-container-build-error-version-status span.fresh {\\n background: var(--color-ansi-green);\\n }\\n .nextjs-container-build-error-version-status span.stale {\\n background: var(--color-ansi-yellow);\\n }\\n .nextjs-container-build-error-version-status span.outdated {\\n background: var(--color-ansi-red);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=styles.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9WZXJzaW9uU3RhbGVuZXNzSW5mby9zdHlsZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDBDQUF5QztJQUNyQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGlDQUFpQ0MsbUJBQU9BLENBQUMsNElBQStDO0FBQzlGLE1BQU1DLGdCQUFnQkQsbUJBQU9BLENBQUMsdUpBQTZCO0FBQzNELFNBQVNFO0lBQ0wsTUFBTUMsT0FBT0osK0JBQStCSyxDQUFDLENBQUM7UUFDMUM7S0FDSDtJQUNERixrQkFBa0I7UUFDZCxPQUFPQztJQUNYO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLE1BQU1MLFNBQVMsQ0FBQyxHQUFHRyxjQUFjSSxJQUFJLEVBQUVIO0FBRXZDLElBQUksQ0FBQyxPQUFPUixRQUFRWSxPQUFPLEtBQUssY0FBZSxPQUFPWixRQUFRWSxPQUFPLEtBQUssWUFBWVosUUFBUVksT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPWixRQUFRWSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLZixPQUFPQyxjQUFjLENBQUNDLFFBQVFZLE9BQU8sRUFBRSxjQUFjO1FBQUVYLE9BQU87SUFBSztJQUNuRUgsT0FBT2dCLE1BQU0sQ0FBQ2QsUUFBUVksT0FBTyxFQUFFWjtJQUMvQmUsT0FBT2YsT0FBTyxHQUFHQSxRQUFRWSxPQUFPO0FBQ2xDLEVBRUEsa0NBQWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9WZXJzaW9uU3RhbGVuZXNzSW5mby9zdHlsZXMuanM/MThmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0eWxlc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgIH1cbn0pO1xuY29uc3QgX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZVwiKTtcbmNvbnN0IF9ub29wdGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9ub29wLXRlbXBsYXRlXCIpO1xuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuXyhbXG4gICAgICAgIFwiXFxuICAubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyB7XFxuICAgIGZsZXg6IDE7XFxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMgc21hbGwge1xcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1nYXApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtZm9udC1zbWFsbCk7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyBhIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLWZvbnQtc21hbGwpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMgc3BhbiB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgd2lkdGg6IDEwcHg7XFxuICAgIGhlaWdodDogMTBweDtcXG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hbnNpLWJyaWdodC1ibGFjayk7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyBzcGFuLmZyZXNoIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYW5zaS1ncmVlbik7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci12ZXJzaW9uLXN0YXR1cyBzcGFuLnN0YWxlIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYW5zaS15ZWxsb3cpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMgc3Bhbi5vdXRkYXRlZCB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFuc2ktcmVkKTtcXG4gIH1cXG5cIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuY29uc3Qgc3R5bGVzID0gKDAsIF9ub29wdGVtcGxhdGUubm9vcCkoX3RlbXBsYXRlT2JqZWN0KCkpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHlsZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInN0eWxlcyIsIl90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSIsInJlcXVpcmUiLCJfbm9vcHRlbXBsYXRlIiwiX3RlbXBsYXRlT2JqZWN0IiwiZGF0YSIsIl8iLCJub29wIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/get-words-and-whitespaces.js": +/*!*************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/get-words-and-whitespaces.js ***! + \*************************************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// Returns true if the given character is a whitespace character, false otherwise.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getWordsAndWhitespaces\", ({\n enumerable: true,\n get: function() {\n return getWordsAndWhitespaces;\n }\n}));\nfunction isWhitespace(char) {\n return char === \" \" || char === \"\\n\" || char === \"\t\" || char === \"\\r\";\n}\nfunction getWordsAndWhitespaces(text) {\n const wordsAndWhitespaces = [];\n let current = \"\";\n let currentIsWhitespace = false;\n for (const char of text){\n if (current.length === 0) {\n current += char;\n currentIsWhitespace = isWhitespace(char);\n continue;\n }\n const nextIsWhitespace = isWhitespace(char);\n if (currentIsWhitespace === nextIsWhitespace) {\n current += char;\n } else {\n wordsAndWhitespaces.push(current);\n current = char;\n currentIsWhitespace = nextIsWhitespace;\n }\n }\n if (current.length > 0) {\n wordsAndWhitespaces.push(current);\n }\n return wordsAndWhitespaces;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-words-and-whitespaces.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9ob3QtbGlua2VkLXRleHQvZ2V0LXdvcmRzLWFuZC13aGl0ZXNwYWNlcy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxrRkFBa0Y7QUFDckU7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDBEQUF5RDtJQUNyREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNDLGFBQWFDLElBQUk7SUFDdEIsT0FBT0EsU0FBUyxPQUFPQSxTQUFTLFFBQVFBLFNBQVMsT0FBT0EsU0FBUztBQUNyRTtBQUNBLFNBQVNGLHVCQUF1QkcsSUFBSTtJQUNoQyxNQUFNQyxzQkFBc0IsRUFBRTtJQUM5QixJQUFJQyxVQUFVO0lBQ2QsSUFBSUMsc0JBQXNCO0lBQzFCLEtBQUssTUFBTUosUUFBUUMsS0FBSztRQUNwQixJQUFJRSxRQUFRRSxNQUFNLEtBQUssR0FBRztZQUN0QkYsV0FBV0g7WUFDWEksc0JBQXNCTCxhQUFhQztZQUNuQztRQUNKO1FBQ0EsTUFBTU0sbUJBQW1CUCxhQUFhQztRQUN0QyxJQUFJSSx3QkFBd0JFLGtCQUFrQjtZQUMxQ0gsV0FBV0g7UUFDZixPQUFPO1lBQ0hFLG9CQUFvQkssSUFBSSxDQUFDSjtZQUN6QkEsVUFBVUg7WUFDVkksc0JBQXNCRTtRQUMxQjtJQUNKO0lBQ0EsSUFBSUgsUUFBUUUsTUFBTSxHQUFHLEdBQUc7UUFDcEJILG9CQUFvQkssSUFBSSxDQUFDSjtJQUM3QjtJQUNBLE9BQU9EO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT1IsUUFBUWMsT0FBTyxLQUFLLGNBQWUsT0FBT2QsUUFBUWMsT0FBTyxLQUFLLFlBQVlkLFFBQVFjLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2QsUUFBUWMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2pCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWMsT0FBTyxFQUFFLGNBQWM7UUFBRWIsT0FBTztJQUFLO0lBQ25FSCxPQUFPa0IsTUFBTSxDQUFDaEIsUUFBUWMsT0FBTyxFQUFFZDtJQUMvQmlCLE9BQU9qQixPQUFPLEdBQUdBLFFBQVFjLE9BQU87QUFDbEMsRUFFQSxxREFBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb21wb25lbnRzL2hvdC1saW5rZWQtdGV4dC9nZXQtd29yZHMtYW5kLXdoaXRlc3BhY2VzLmpzPzI0NmYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgYSB3aGl0ZXNwYWNlIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRXb3Jkc0FuZFdoaXRlc3BhY2VzXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRXb3Jkc0FuZFdoaXRlc3BhY2VzO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGNoYXIpIHtcbiAgICByZXR1cm4gY2hhciA9PT0gXCIgXCIgfHwgY2hhciA9PT0gXCJcXG5cIiB8fCBjaGFyID09PSBcIlx0XCIgfHwgY2hhciA9PT0gXCJcXHJcIjtcbn1cbmZ1bmN0aW9uIGdldFdvcmRzQW5kV2hpdGVzcGFjZXModGV4dCkge1xuICAgIGNvbnN0IHdvcmRzQW5kV2hpdGVzcGFjZXMgPSBbXTtcbiAgICBsZXQgY3VycmVudCA9IFwiXCI7XG4gICAgbGV0IGN1cnJlbnRJc1doaXRlc3BhY2UgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgdGV4dCl7XG4gICAgICAgIGlmIChjdXJyZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY3VycmVudCArPSBjaGFyO1xuICAgICAgICAgICAgY3VycmVudElzV2hpdGVzcGFjZSA9IGlzV2hpdGVzcGFjZShjaGFyKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHRJc1doaXRlc3BhY2UgPSBpc1doaXRlc3BhY2UoY2hhcik7XG4gICAgICAgIGlmIChjdXJyZW50SXNXaGl0ZXNwYWNlID09PSBuZXh0SXNXaGl0ZXNwYWNlKSB7XG4gICAgICAgICAgICBjdXJyZW50ICs9IGNoYXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3b3Jkc0FuZFdoaXRlc3BhY2VzLnB1c2goY3VycmVudCk7XG4gICAgICAgICAgICBjdXJyZW50ID0gY2hhcjtcbiAgICAgICAgICAgIGN1cnJlbnRJc1doaXRlc3BhY2UgPSBuZXh0SXNXaGl0ZXNwYWNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjdXJyZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgd29yZHNBbmRXaGl0ZXNwYWNlcy5wdXNoKGN1cnJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gd29yZHNBbmRXaGl0ZXNwYWNlcztcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0LXdvcmRzLWFuZC13aGl0ZXNwYWNlcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZ2V0V29yZHNBbmRXaGl0ZXNwYWNlcyIsImlzV2hpdGVzcGFjZSIsImNoYXIiLCJ0ZXh0Iiwid29yZHNBbmRXaGl0ZXNwYWNlcyIsImN1cnJlbnQiLCJjdXJyZW50SXNXaGl0ZXNwYWNlIiwibGVuZ3RoIiwibmV4dElzV2hpdGVzcGFjZSIsInB1c2giLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/get-words-and-whitespaces.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js": +/*!*****************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js ***! + \*****************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HotlinkedText\", ({\n enumerable: true,\n get: function() {\n return HotlinkedText;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _getwordsandwhitespaces = __webpack_require__(/*! ./get-words-and-whitespaces */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/get-words-and-whitespaces.js\");\nconst linkRegex = /https?:\\/\\/[^\\s/$.?#].[^\\s\"]*/i;\nconst HotlinkedText = function HotlinkedText(props) {\n const { text } = props;\n const wordsAndWhitespaces = (0, _getwordsandwhitespaces.getWordsAndWhitespaces)(text);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: linkRegex.test(text) ? wordsAndWhitespaces.map((word, index)=>{\n if (linkRegex.test(word)) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.default.Fragment, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n href: word,\n children: word\n })\n }, \"link-\" + index);\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.default.Fragment, {\n children: word\n }, \"text-\" + index);\n }) : text\n });\n};\n_c = HotlinkedText;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\nvar _c;\n$RefreshReg$(_c, \"HotlinkedText\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9ob3QtbGlua2VkLXRleHQvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGlEQUFnRDtJQUM1Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsZ0lBQXlDO0FBQ2xGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLHFHQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gseUJBQXlCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLG1GQUFPO0FBQ3ZFLE1BQU1JLDBCQUEwQkosbUJBQU9BLENBQUMsc0xBQTZCO0FBQ3JFLE1BQU1LLFlBQVk7QUFDbEIsTUFBTVAsZ0JBQWdCLFNBQVNBLGNBQWNRLEtBQUs7SUFDOUMsTUFBTSxFQUFFQyxJQUFJLEVBQUUsR0FBR0Q7SUFDakIsTUFBTUUsc0JBQXNCLENBQUMsR0FBR0osd0JBQXdCSyxzQkFBc0IsRUFBRUY7SUFDaEYsT0FBcUIsV0FBSCxHQUFJLElBQUdOLFlBQVlTLEdBQUcsRUFBRVQsWUFBWVUsUUFBUSxFQUFFO1FBQzVEQyxVQUFVUCxVQUFVUSxJQUFJLENBQUNOLFFBQVFDLG9CQUFvQk0sR0FBRyxDQUFDLENBQUNDLE1BQU1DO1lBQzVELElBQUlYLFVBQVVRLElBQUksQ0FBQ0UsT0FBTztnQkFDdEIsT0FBcUIsV0FBSCxHQUFJLElBQUdkLFlBQVlTLEdBQUcsRUFBRVIsT0FBT2UsT0FBTyxDQUFDTixRQUFRLEVBQUU7b0JBQy9EQyxVQUF3QixXQUFILEdBQUksSUFBR1gsWUFBWVMsR0FBRyxFQUFFLEtBQUs7d0JBQzlDUSxNQUFNSDt3QkFDTkgsVUFBVUc7b0JBQ2Q7Z0JBQ0osR0FBRyxVQUFVQztZQUNqQjtZQUNBLE9BQXFCLFdBQUgsR0FBSSxJQUFHZixZQUFZUyxHQUFHLEVBQUVSLE9BQU9lLE9BQU8sQ0FBQ04sUUFBUSxFQUFFO2dCQUMvREMsVUFBVUc7WUFDZCxHQUFHLFVBQVVDO1FBQ2pCLEtBQUtUO0lBQ1Q7QUFDSjtLQWxCTVQ7QUFvQk4sSUFBSSxDQUFDLE9BQU9KLFFBQVF1QixPQUFPLEtBQUssY0FBZSxPQUFPdkIsUUFBUXVCLE9BQU8sS0FBSyxZQUFZdkIsUUFBUXVCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3ZCLFFBQVF1QixPQUFPLENBQUNFLFVBQVUsS0FBSyxhQUFhO0lBQ3JLM0IsT0FBT0MsY0FBYyxDQUFDQyxRQUFRdUIsT0FBTyxFQUFFLGNBQWM7UUFBRXRCLE9BQU87SUFBSztJQUNuRUgsT0FBTzRCLE1BQU0sQ0FBQzFCLFFBQVF1QixPQUFPLEVBQUV2QjtJQUMvQjJCLE9BQU8zQixPQUFPLEdBQUdBLFFBQVF1QixPQUFPO0FBQ2xDLEVBRUEsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29tcG9uZW50cy9ob3QtbGlua2VkLXRleHQvaW5kZXguanM/OTVhMyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkhvdGxpbmtlZFRleHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEhvdGxpbmtlZFRleHQ7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfZ2V0d29yZHNhbmR3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoXCIuL2dldC13b3Jkcy1hbmQtd2hpdGVzcGFjZXNcIik7XG5jb25zdCBsaW5rUmVnZXggPSAvaHR0cHM/OlxcL1xcL1teXFxzLyQuPyNdLlteXFxzXCJdKi9pO1xuY29uc3QgSG90bGlua2VkVGV4dCA9IGZ1bmN0aW9uIEhvdGxpbmtlZFRleHQocHJvcHMpIHtcbiAgICBjb25zdCB7IHRleHQgfSA9IHByb3BzO1xuICAgIGNvbnN0IHdvcmRzQW5kV2hpdGVzcGFjZXMgPSAoMCwgX2dldHdvcmRzYW5kd2hpdGVzcGFjZXMuZ2V0V29yZHNBbmRXaGl0ZXNwYWNlcykodGV4dCk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IGxpbmtSZWdleC50ZXN0KHRleHQpID8gd29yZHNBbmRXaGl0ZXNwYWNlcy5tYXAoKHdvcmQsIGluZGV4KT0+e1xuICAgICAgICAgICAgaWYgKGxpbmtSZWdleC50ZXN0KHdvcmQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX3JlYWN0LmRlZmF1bHQuRnJhZ21lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJhXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IHdvcmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogd29yZFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIFwibGluay1cIiArIGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9yZWFjdC5kZWZhdWx0LkZyYWdtZW50LCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHdvcmRcbiAgICAgICAgICAgIH0sIFwidGV4dC1cIiArIGluZGV4KTtcbiAgICAgICAgfSkgOiB0ZXh0XG4gICAgfSk7XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiSG90bGlua2VkVGV4dCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfZ2V0d29yZHNhbmR3aGl0ZXNwYWNlcyIsImxpbmtSZWdleCIsInByb3BzIiwidGV4dCIsIndvcmRzQW5kV2hpdGVzcGFjZXMiLCJnZXRXb3Jkc0FuZFdoaXRlc3BhY2VzIiwianN4IiwiRnJhZ21lbnQiLCJjaGlsZHJlbiIsInRlc3QiLCJtYXAiLCJ3b3JkIiwiaW5kZXgiLCJkZWZhdWx0IiwiaHJlZiIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js ***! + \*****************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n BuildError: function() {\n return BuildError;\n },\n styles: function() {\n return styles;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _Dialog = __webpack_require__(/*! ../components/Dialog */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\");\nconst _Overlay = __webpack_require__(/*! ../components/Overlay */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js\");\nconst _Terminal = __webpack_require__(/*! ../components/Terminal */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ../components/VersionStalenessInfo */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\");\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n .nextjs-container-build-error-header {\\n display: flex;\\n align-items: center;\\n }\\n .nextjs-container-build-error-header > h4 {\\n line-height: 1.5;\\n margin: 0;\\n padding: 0;\\n }\\n\\n .nextjs-container-build-error-body footer {\\n margin-top: var(--size-gap);\\n }\\n .nextjs-container-build-error-body footer p {\\n margin: 0;\\n }\\n\\n .nextjs-container-build-error-body small {\\n color: #757575;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst BuildError = function BuildError(param) {\n _s();\n let { message, versionInfo } = param;\n const noop = _react.useCallback(()=>{}, []);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Overlay.Overlay, {\n fixed: true,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.Dialog, {\n type: \"error\",\n \"aria-labelledby\": \"nextjs__container_build_error_label\",\n \"aria-describedby\": \"nextjs__container_build_error_desc\",\n onClose: noop,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogContent, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogHeader, {\n className: \"nextjs-container-build-error-header\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h4\", {\n id: \"nextjs__container_build_error_label\",\n children: \"Failed to compile\"\n }),\n versionInfo ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_VersionStalenessInfo.VersionStalenessInfo, {\n ...versionInfo\n }) : null\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogBody, {\n className: \"nextjs-container-build-error-body\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Terminal.Terminal, {\n content: message\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"footer\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n id: \"nextjs__container_build_error_desc\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"small\", {\n children: \"This error occurred during the build process and can only be dismissed by fixing the error.\"\n })\n })\n })\n ]\n })\n ]\n })\n })\n });\n};\n_s(BuildError, \"hHp3im7kVRcdOeKmK0+3cSEjzLI=\");\n_c = BuildError;\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=BuildError.js.map\nvar _c;\n$RefreshReg$(_c, \"BuildError\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL0J1aWxkRXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsWUFBWTtRQUNSLE9BQU9BO0lBQ1g7SUFDQUMsUUFBUTtRQUNKLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLDRCQUE0QkMsbUJBQU9BLENBQUMsa0lBQTBDO0FBQ3BGLE1BQU1DLGlDQUFpQ0QsbUJBQU9BLENBQUMsNElBQStDO0FBQzlGLE1BQU1FLGNBQWNGLG1CQUFPQSxDQUFDLHFHQUFtQjtBQUMvQyxNQUFNRyxTQUFTLFdBQVcsR0FBR0osMEJBQTBCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLG1GQUFPO0FBQ3hFLE1BQU1LLFVBQVVMLG1CQUFPQSxDQUFDLGtKQUFzQjtBQUM5QyxNQUFNTSxXQUFXTixtQkFBT0EsQ0FBQyxvSkFBdUI7QUFDaEQsTUFBTU8sWUFBWVAsbUJBQU9BLENBQUMsc0pBQXdCO0FBQ2xELE1BQU1RLHdCQUF3QlIsbUJBQU9BLENBQUMsOEtBQW9DO0FBQzFFLE1BQU1TLGdCQUFnQlQsbUJBQU9BLENBQUMsb0pBQTBCO0FBQ3hELFNBQVNVO0lBQ0wsTUFBTUMsT0FBT1YsK0JBQStCRyxDQUFDLENBQUM7UUFDMUM7S0FDSDtJQUNETSxrQkFBa0I7UUFDZCxPQUFPQztJQUNYO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLE1BQU1wQixhQUFhLFNBQVNBLFdBQVdxQixLQUFLOztJQUN4QyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxFQUFFLEdBQUdGO0lBQy9CLE1BQU1HLE9BQU9aLE9BQU9hLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtJQUMxQyxPQUFxQixXQUFILEdBQUksSUFBR2QsWUFBWWUsR0FBRyxFQUFFWCxTQUFTWSxPQUFPLEVBQUU7UUFDeERDLE9BQU87UUFDUEMsVUFBd0IsV0FBSCxHQUFJLElBQUdsQixZQUFZZSxHQUFHLEVBQUVaLFFBQVFnQixNQUFNLEVBQUU7WUFDekRDLE1BQU07WUFDTixtQkFBbUI7WUFDbkIsb0JBQW9CO1lBQ3BCQyxTQUFTUjtZQUNUSyxVQUF3QixXQUFILEdBQUksSUFBR2xCLFlBQVlzQixJQUFJLEVBQUVuQixRQUFRb0IsYUFBYSxFQUFFO2dCQUNqRUwsVUFBVTtvQkFDTixXQUFXLEdBQUksSUFBR2xCLFlBQVlzQixJQUFJLEVBQUVuQixRQUFRcUIsWUFBWSxFQUFFO3dCQUN0REMsV0FBVzt3QkFDWFAsVUFBVTs0QkFDTixXQUFXLEdBQUksSUFBR2xCLFlBQVllLEdBQUcsRUFBRSxNQUFNO2dDQUNyQ1csSUFBSTtnQ0FDSlIsVUFBVTs0QkFDZDs0QkFDQU4sY0FBNEIsV0FBSCxHQUFJLElBQUdaLFlBQVllLEdBQUcsRUFBRVQsc0JBQXNCcUIsb0JBQW9CLEVBQUU7Z0NBQ3pGLEdBQUdmLFdBQVc7NEJBQ2xCLEtBQUs7eUJBQ1I7b0JBQ0w7b0JBQ0EsV0FBVyxHQUFJLElBQUdaLFlBQVlzQixJQUFJLEVBQUVuQixRQUFReUIsVUFBVSxFQUFFO3dCQUNwREgsV0FBVzt3QkFDWFAsVUFBVTs0QkFDTixXQUFXLEdBQUksSUFBR2xCLFlBQVllLEdBQUcsRUFBRVYsVUFBVXdCLFFBQVEsRUFBRTtnQ0FDbkRDLFNBQVNuQjs0QkFDYjs0QkFDQSxXQUFXLEdBQUksSUFBR1gsWUFBWWUsR0FBRyxFQUFFLFVBQVU7Z0NBQ3pDRyxVQUF3QixXQUFILEdBQUksSUFBR2xCLFlBQVllLEdBQUcsRUFBRSxLQUFLO29DQUM5Q1csSUFBSTtvQ0FDSlIsVUFBd0IsV0FBSCxHQUFJLElBQUdsQixZQUFZZSxHQUFHLEVBQUUsU0FBUzt3Q0FDbERHLFVBQVU7b0NBQ2Q7Z0NBQ0o7NEJBQ0o7eUJBQ0g7b0JBQ0w7aUJBQ0g7WUFDTDtRQUNKO0lBQ0o7QUFDSjtHQTVDTTdCO0tBQUFBO0FBNkNOLE1BQU1DLFNBQVMsQ0FBQyxHQUFHaUIsY0FBY00sSUFBSSxFQUFFTDtBQUV2QyxJQUFJLENBQUMsT0FBT3RCLFFBQVE2QyxPQUFPLEtBQUssY0FBZSxPQUFPN0MsUUFBUTZDLE9BQU8sS0FBSyxZQUFZN0MsUUFBUTZDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzdDLFFBQVE2QyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLaEQsT0FBT0MsY0FBYyxDQUFDQyxRQUFRNkMsT0FBTyxFQUFFLGNBQWM7UUFBRTVDLE9BQU87SUFBSztJQUNuRUgsT0FBT2lELE1BQU0sQ0FBQy9DLFFBQVE2QyxPQUFPLEVBQUU3QztJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRNkMsT0FBTztBQUNsQyxFQUVBLHNDQUFzQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9CdWlsZEVycm9yLmpzPzViZDMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBCdWlsZEVycm9yOiBudWxsLFxuICAgIHN0eWxlczogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBCdWlsZEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEJ1aWxkRXJyb3I7XG4gICAgfSxcbiAgICBzdHlsZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZVwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9EaWFsb2cgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9EaWFsb2dcIik7XG5jb25zdCBfT3ZlcmxheSA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL092ZXJsYXlcIik7XG5jb25zdCBfVGVybWluYWwgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9UZXJtaW5hbFwiKTtcbmNvbnN0IF9WZXJzaW9uU3RhbGVuZXNzSW5mbyA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL1ZlcnNpb25TdGFsZW5lc3NJbmZvXCIpO1xuY29uc3QgX25vb3B0ZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL25vb3AtdGVtcGxhdGVcIik7XG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QoKSB7XG4gICAgY29uc3QgZGF0YSA9IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZS5fKFtcbiAgICAgICAgXCJcXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLWhlYWRlciB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci1oZWFkZXIgPiBoNCB7XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgcGFkZGluZzogMDtcXG4gIH1cXG5cXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLWJvZHkgZm9vdGVyIHtcXG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1nYXApO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItYm9keSBmb290ZXIgcCB7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG5cXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLWJvZHkgc21hbGwge1xcbiAgICBjb2xvcjogIzc1NzU3NTtcXG4gIH1cXG5cIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuY29uc3QgQnVpbGRFcnJvciA9IGZ1bmN0aW9uIEJ1aWxkRXJyb3IocGFyYW0pIHtcbiAgICBsZXQgeyBtZXNzYWdlLCB2ZXJzaW9uSW5mbyB9ID0gcGFyYW07XG4gICAgY29uc3Qgbm9vcCA9IF9yZWFjdC51c2VDYWxsYmFjaygoKT0+e30sIFtdKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfT3ZlcmxheS5PdmVybGF5LCB7XG4gICAgICAgIGZpeGVkOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfRGlhbG9nLkRpYWxvZywge1xuICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogXCJuZXh0anNfX2NvbnRhaW5lcl9idWlsZF9lcnJvcl9sYWJlbFwiLFxuICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IFwibmV4dGpzX19jb250YWluZXJfYnVpbGRfZXJyb3JfZGVzY1wiLFxuICAgICAgICAgICAgb25DbG9zZTogbm9vcCxcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfRGlhbG9nLkRpYWxvZ0NvbnRlbnQsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfRGlhbG9nLkRpYWxvZ0hlYWRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItaGVhZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoNFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIm5leHRqc19fY29udGFpbmVyX2J1aWxkX2Vycm9yX2xhYmVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIkZhaWxlZCB0byBjb21waWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uSW5mbyA/IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX1ZlcnNpb25TdGFsZW5lc3NJbmZvLlZlcnNpb25TdGFsZW5lc3NJbmZvLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnZlcnNpb25JbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfRGlhbG9nLkRpYWxvZ0JvZHksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJuZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLWJvZHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfVGVybWluYWwuVGVybWluYWwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJmb290ZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwibmV4dGpzX19jb250YWluZXJfYnVpbGRfZXJyb3JfZGVzY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzbWFsbFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiVGhpcyBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGNhbiBvbmx5IGJlIGRpc21pc3NlZCBieSBmaXhpbmcgdGhlIGVycm9yLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9KTtcbn07XG5jb25zdCBzdHlsZXMgPSAoMCwgX25vb3B0ZW1wbGF0ZS5ub29wKShfdGVtcGxhdGVPYmplY3QoKSk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJ1aWxkRXJyb3IuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiQnVpbGRFcnJvciIsInN0eWxlcyIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX0RpYWxvZyIsIl9PdmVybGF5IiwiX1Rlcm1pbmFsIiwiX1ZlcnNpb25TdGFsZW5lc3NJbmZvIiwiX25vb3B0ZW1wbGF0ZSIsIl90ZW1wbGF0ZU9iamVjdCIsImRhdGEiLCJwYXJhbSIsIm1lc3NhZ2UiLCJ2ZXJzaW9uSW5mbyIsIm5vb3AiLCJ1c2VDYWxsYmFjayIsImpzeCIsIk92ZXJsYXkiLCJmaXhlZCIsImNoaWxkcmVuIiwiRGlhbG9nIiwidHlwZSIsIm9uQ2xvc2UiLCJqc3hzIiwiRGlhbG9nQ29udGVudCIsIkRpYWxvZ0hlYWRlciIsImNsYXNzTmFtZSIsImlkIiwiVmVyc2lvblN0YWxlbmVzc0luZm8iLCJEaWFsb2dCb2R5IiwiVGVybWluYWwiLCJjb250ZW50IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js": +/*!*************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js ***! + \*************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Errors: function() {\n return Errors;\n },\n styles: function() {\n return styles;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _erroroverlayreducer = __webpack_require__(/*! ../error-overlay-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js\");\nconst _Dialog = __webpack_require__(/*! ../components/Dialog */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\");\nconst _LeftRightDialogHeader = __webpack_require__(/*! ../components/LeftRightDialogHeader */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js\");\nconst _Overlay = __webpack_require__(/*! ../components/Overlay */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js\");\nconst _Toast = __webpack_require__(/*! ../components/Toast */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js\");\nconst _getErrorByType = __webpack_require__(/*! ../helpers/getErrorByType */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js\");\nconst _nodeStackFrames = __webpack_require__(/*! ../helpers/nodeStackFrames */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js\");\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nconst _CloseIcon = __webpack_require__(/*! ../icons/CloseIcon */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js\");\nconst _RuntimeError = __webpack_require__(/*! ./RuntimeError */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ../components/VersionStalenessInfo */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\");\nconst _hotlinkedtext = __webpack_require__(/*! ../components/hot-linked-text */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n .nextjs-container-errors-header > h1 {\\n font-size: var(--size-font-big);\\n line-height: var(--size-font-bigger);\\n font-weight: bold;\\n margin: 0;\\n margin-top: calc(var(--size-gap-double) + var(--size-gap-half));\\n }\\n .nextjs-container-errors-header small {\\n font-size: var(--size-font-small);\\n color: var(--color-accents-1);\\n margin-left: var(--size-gap-double);\\n }\\n .nextjs-container-errors-header small > span {\\n font-family: var(--font-stack-monospace);\\n }\\n .nextjs-container-errors-header > p {\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-font-small);\\n line-height: var(--size-font-big);\\n font-weight: bold;\\n margin: 0;\\n margin-top: var(--size-gap-half);\\n color: var(--color-ansi-red);\\n white-space: pre-wrap;\\n }\\n .nextjs-container-errors-header > div > small {\\n margin: 0;\\n margin-top: var(--size-gap-half);\\n }\\n .nextjs-container-errors-header > p > a {\\n color: var(--color-ansi-red);\\n }\\n\\n .nextjs-container-errors-body > h2:not(:first-child) {\\n margin-top: calc(var(--size-gap-double) + var(--size-gap));\\n }\\n .nextjs-container-errors-body > h2 {\\n margin-bottom: var(--size-gap);\\n font-size: var(--size-font-big);\\n }\\n\\n .nextjs-toast-errors-parent {\\n cursor: pointer;\\n transition: transform 0.2s ease;\\n }\\n .nextjs-toast-errors-parent:hover {\\n transform: scale(1.1);\\n }\\n .nextjs-toast-errors {\\n display: flex;\\n align-items: center;\\n justify-content: flex-start;\\n }\\n .nextjs-toast-errors > svg {\\n margin-right: var(--size-gap);\\n }\\n .nextjs-toast-errors-hide-button {\\n margin-left: var(--size-gap-triple);\\n border: none;\\n background: none;\\n color: var(--color-ansi-bright-white);\\n padding: 0;\\n transition: opacity 0.25s ease;\\n opacity: 0.7;\\n }\\n .nextjs-toast-errors-hide-button:hover {\\n opacity: 1;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction getErrorSignature(ev) {\n const { event } = ev;\n switch(event.type){\n case _erroroverlayreducer.ACTION_UNHANDLED_ERROR:\n case _erroroverlayreducer.ACTION_UNHANDLED_REJECTION:\n {\n return event.reason.name + \"::\" + event.reason.message + \"::\" + event.reason.stack;\n }\n default:\n {}\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = event;\n return \"\";\n}\nconst Errors = function Errors(param) {\n _s();\n let { errors, initialDisplayState, versionInfo } = param;\n const [lookups, setLookups] = _react.useState({});\n const [readyErrors, nextError] = _react.useMemo(()=>{\n let ready = [];\n let next = null;\n // Ensure errors are displayed in the order they occurred in:\n for(let idx = 0; idx < errors.length; ++idx){\n const e = errors[idx];\n const { id } = e;\n if (id in lookups) {\n ready.push(lookups[id]);\n continue;\n }\n // Check for duplicate errors\n if (idx > 0) {\n const prev = errors[idx - 1];\n if (getErrorSignature(prev) === getErrorSignature(e)) {\n continue;\n }\n }\n next = e;\n break;\n }\n return [\n ready,\n next\n ];\n }, [\n errors,\n lookups\n ]);\n const isLoading = _react.useMemo(()=>{\n return readyErrors.length < 1 && Boolean(errors.length);\n }, [\n errors.length,\n readyErrors.length\n ]);\n _react.useEffect(()=>{\n if (nextError == null) {\n return;\n }\n let mounted = true;\n (0, _getErrorByType.getErrorByType)(nextError).then((resolved)=>{\n // We don't care if the desired error changed while we were resolving,\n // thus we're not tracking it using a ref. Once the work has been done,\n // we'll store it.\n if (mounted) {\n setLookups((m)=>({\n ...m,\n [resolved.id]: resolved\n }));\n }\n }, ()=>{\n // TODO: handle this, though an edge case\n });\n return ()=>{\n mounted = false;\n };\n }, [\n nextError\n ]);\n const [displayState, setDisplayState] = _react.useState(initialDisplayState);\n const [activeIdx, setActiveIndex] = _react.useState(0);\n const previous = _react.useCallback((e)=>{\n e == null ? void 0 : e.preventDefault();\n setActiveIndex((v)=>Math.max(0, v - 1));\n }, []);\n const next = _react.useCallback((e)=>{\n e == null ? void 0 : e.preventDefault();\n setActiveIndex((v)=>Math.max(0, Math.min(readyErrors.length - 1, v + 1)));\n }, [\n readyErrors.length\n ]);\n var _readyErrors_activeIdx;\n const activeError = _react.useMemo(()=>(_readyErrors_activeIdx = readyErrors[activeIdx]) != null ? _readyErrors_activeIdx : null, [\n activeIdx,\n readyErrors\n ]);\n // Reset component state when there are no errors to be displayed.\n // This should never happen, but lets handle it.\n _react.useEffect(()=>{\n if (errors.length < 1) {\n setLookups({});\n setDisplayState(\"hidden\");\n setActiveIndex(0);\n }\n }, [\n errors.length\n ]);\n const minimize = _react.useCallback((e)=>{\n e == null ? void 0 : e.preventDefault();\n setDisplayState(\"minimized\");\n }, []);\n const hide = _react.useCallback((e)=>{\n e == null ? void 0 : e.preventDefault();\n setDisplayState(\"hidden\");\n }, []);\n const fullscreen = _react.useCallback((e)=>{\n e == null ? void 0 : e.preventDefault();\n setDisplayState(\"fullscreen\");\n }, []);\n // This component shouldn't be rendered with no errors, but if it is, let's\n // handle it gracefully by rendering nothing.\n if (errors.length < 1 || activeError == null) {\n return null;\n }\n if (isLoading) {\n // TODO: better loading state\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Overlay.Overlay, {});\n }\n if (displayState === \"hidden\") {\n return null;\n }\n if (displayState === \"minimized\") {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Toast.Toast, {\n className: \"nextjs-toast-errors-parent\",\n onClick: fullscreen,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n className: \"nextjs-toast-errors\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"circle\", {\n cx: \"12\",\n cy: \"12\",\n r: \"10\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"12\",\n y1: \"8\",\n x2: \"12\",\n y2: \"12\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"12\",\n y1: \"16\",\n x2: \"12.01\",\n y2: \"16\"\n })\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"span\", {\n children: [\n readyErrors.length,\n \" error\",\n readyErrors.length > 1 ? \"s\" : \"\"\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"button\", {\n \"data-nextjs-toast-errors-hide-button\": true,\n className: \"nextjs-toast-errors-hide-button\",\n type: \"button\",\n onClick: (e)=>{\n e.stopPropagation();\n hide();\n },\n \"aria-label\": \"Hide Errors\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_CloseIcon.CloseIcon, {})\n })\n ]\n })\n });\n }\n const isServerError = [\n \"server\",\n \"edge-server\"\n ].includes((0, _nodeStackFrames.getErrorSource)(activeError.error) || \"\");\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Overlay.Overlay, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.Dialog, {\n type: \"error\",\n \"aria-labelledby\": \"nextjs__container_errors_label\",\n \"aria-describedby\": \"nextjs__container_errors_desc\",\n onClose: isServerError ? undefined : minimize,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogContent, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogHeader, {\n className: \"nextjs-container-errors-header\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_LeftRightDialogHeader.LeftRightDialogHeader, {\n previous: activeIdx > 0 ? previous : null,\n next: activeIdx < readyErrors.length - 1 ? next : null,\n close: isServerError ? undefined : minimize,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"small\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n children: activeIdx + 1\n }),\n \" of\",\n \" \",\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n children: readyErrors.length\n }),\n \" unhandled error\",\n readyErrors.length < 2 ? \"\" : \"s\"\n ]\n }),\n versionInfo ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_VersionStalenessInfo.VersionStalenessInfo, {\n ...versionInfo\n }) : null\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n id: \"nextjs__container_errors_label\",\n children: isServerError ? \"Server Error\" : \"Unhandled Runtime Error\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"p\", {\n id: \"nextjs__container_errors_desc\",\n children: [\n activeError.error.name,\n \":\",\n \" \",\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_hotlinkedtext.HotlinkedText, {\n text: activeError.error.message\n })\n ]\n }),\n isServerError ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"small\", {\n children: \"This error happened while generating the page. Any console logs will be displayed in the terminal window.\"\n })\n }) : undefined\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.DialogBody, {\n className: \"nextjs-container-errors-body\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_RuntimeError.RuntimeError, {\n error: activeError\n }, activeError.id.toString())\n })\n ]\n })\n })\n });\n};\n_s(Errors, \"9RnOMwgyCHKGKiow/VpHS6P2Gq4=\");\n_c = Errors;\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Errors.js.map\nvar _c;\n$RefreshReg$(_c, \"Errors\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL0Vycm9ycy5qcyIsIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0FBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxRQUFRO1FBQ0osT0FBT0E7SUFDWDtJQUNBQyxRQUFRO1FBQ0osT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sNEJBQTRCQyxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUMsaUNBQWlDRCxtQkFBT0EsQ0FBQyw0SUFBK0M7QUFDOUYsTUFBTUUsY0FBY0YsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1HLFNBQVMsV0FBVyxHQUFHSiwwQkFBMEJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsbUZBQU87QUFDeEUsTUFBTUssdUJBQXVCTCxtQkFBT0EsQ0FBQyxvSkFBMEI7QUFDL0QsTUFBTU0sVUFBVU4sbUJBQU9BLENBQUMsa0pBQXNCO0FBQzlDLE1BQU1PLHlCQUF5QlAsbUJBQU9BLENBQUMsZ0xBQXFDO0FBQzVFLE1BQU1RLFdBQVdSLG1CQUFPQSxDQUFDLG9KQUF1QjtBQUNoRCxNQUFNUyxTQUFTVCxtQkFBT0EsQ0FBQyxnSkFBcUI7QUFDNUMsTUFBTVUsa0JBQWtCVixtQkFBT0EsQ0FBQyxzSkFBMkI7QUFDM0QsTUFBTVcsbUJBQW1CWCxtQkFBT0EsQ0FBQyx3SkFBNEI7QUFDN0QsTUFBTVksZ0JBQWdCWixtQkFBT0EsQ0FBQyxvSkFBMEI7QUFDeEQsTUFBTWEsYUFBYWIsbUJBQU9BLENBQUMsd0lBQW9CO0FBQy9DLE1BQU1jLGdCQUFnQmQsbUJBQU9BLENBQUMsaUpBQWdCO0FBQzlDLE1BQU1lLHdCQUF3QmYsbUJBQU9BLENBQUMsOEtBQW9DO0FBQzFFLE1BQU1nQixpQkFBaUJoQixtQkFBT0EsQ0FBQyxvS0FBK0I7QUFDOUQsU0FBU2lCO0lBQ0wsTUFBTUMsT0FBT2pCLCtCQUErQkcsQ0FBQyxDQUFDO1FBQzFDO0tBQ0g7SUFDRGEsa0JBQWtCO1FBQ2QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxTQUFTQyxrQkFBa0JDLEVBQUU7SUFDekIsTUFBTSxFQUFFQyxLQUFLLEVBQUUsR0FBR0Q7SUFDbEIsT0FBT0MsTUFBTUMsSUFBSTtRQUNiLEtBQUtqQixxQkFBcUJrQixzQkFBc0I7UUFDaEQsS0FBS2xCLHFCQUFxQm1CLDBCQUEwQjtZQUNoRDtnQkFDSSxPQUFPSCxNQUFNSSxNQUFNLENBQUM3QixJQUFJLEdBQUcsT0FBT3lCLE1BQU1JLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLE9BQU9MLE1BQU1JLE1BQU0sQ0FBQ0UsS0FBSztZQUN0RjtRQUNKO1lBQ0ksQ0FBQztJQUNUO0lBQ0EsNkRBQTZEO0lBQzdELE1BQU12QixJQUFJaUI7SUFDVixPQUFPO0FBQ1g7QUFDQSxNQUFNOUIsU0FBUyxTQUFTQSxPQUFPcUMsS0FBSzs7SUFDaEMsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLG1CQUFtQixFQUFFQyxXQUFXLEVBQUUsR0FBR0g7SUFDbkQsTUFBTSxDQUFDSSxTQUFTQyxXQUFXLEdBQUc5QixPQUFPK0IsUUFBUSxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDQyxhQUFhQyxVQUFVLEdBQUdqQyxPQUFPa0MsT0FBTyxDQUFDO1FBQzVDLElBQUlDLFFBQVEsRUFBRTtRQUNkLElBQUlDLE9BQU87UUFDWCw2REFBNkQ7UUFDN0QsSUFBSSxJQUFJQyxNQUFNLEdBQUdBLE1BQU1YLE9BQU9ZLE1BQU0sRUFBRSxFQUFFRCxJQUFJO1lBQ3hDLE1BQU1FLElBQUliLE1BQU0sQ0FBQ1csSUFBSTtZQUNyQixNQUFNLEVBQUVHLEVBQUUsRUFBRSxHQUFHRDtZQUNmLElBQUlDLE1BQU1YLFNBQVM7Z0JBQ2ZNLE1BQU1NLElBQUksQ0FBQ1osT0FBTyxDQUFDVyxHQUFHO2dCQUN0QjtZQUNKO1lBQ0EsNkJBQTZCO1lBQzdCLElBQUlILE1BQU0sR0FBRztnQkFDVCxNQUFNSyxPQUFPaEIsTUFBTSxDQUFDVyxNQUFNLEVBQUU7Z0JBQzVCLElBQUlyQixrQkFBa0IwQixVQUFVMUIsa0JBQWtCdUIsSUFBSTtvQkFDbEQ7Z0JBQ0o7WUFDSjtZQUNBSCxPQUFPRztZQUNQO1FBQ0o7UUFDQSxPQUFPO1lBQ0hKO1lBQ0FDO1NBQ0g7SUFDTCxHQUFHO1FBQ0NWO1FBQ0FHO0tBQ0g7SUFDRCxNQUFNYyxZQUFZM0MsT0FBT2tDLE9BQU8sQ0FBQztRQUM3QixPQUFPRixZQUFZTSxNQUFNLEdBQUcsS0FBS00sUUFBUWxCLE9BQU9ZLE1BQU07SUFDMUQsR0FBRztRQUNDWixPQUFPWSxNQUFNO1FBQ2JOLFlBQVlNLE1BQU07S0FDckI7SUFDRHRDLE9BQU82QyxTQUFTLENBQUM7UUFDYixJQUFJWixhQUFhLE1BQU07WUFDbkI7UUFDSjtRQUNBLElBQUlhLFVBQVU7UUFDYixJQUFHdkMsZ0JBQWdCd0MsY0FBYyxFQUFFZCxXQUFXZSxJQUFJLENBQUMsQ0FBQ0M7WUFDakQsc0VBQXNFO1lBQ3RFLHVFQUF1RTtZQUN2RSxrQkFBa0I7WUFDbEIsSUFBSUgsU0FBUztnQkFDVGhCLFdBQVcsQ0FBQ29CLElBQUs7d0JBQ1QsR0FBR0EsQ0FBQzt3QkFDSixDQUFDRCxTQUFTVCxFQUFFLENBQUMsRUFBRVM7b0JBQ25CO1lBQ1I7UUFDSixHQUFHO1FBQ0gseUNBQXlDO1FBQ3pDO1FBQ0EsT0FBTztZQUNISCxVQUFVO1FBQ2Q7SUFDSixHQUFHO1FBQ0NiO0tBQ0g7SUFDRCxNQUFNLENBQUNrQixjQUFjQyxnQkFBZ0IsR0FBR3BELE9BQU8rQixRQUFRLENBQUNKO0lBQ3hELE1BQU0sQ0FBQzBCLFdBQVdDLGVBQWUsR0FBR3RELE9BQU8rQixRQUFRLENBQUM7SUFDcEQsTUFBTXdCLFdBQVd2RCxPQUFPd0QsV0FBVyxDQUFDLENBQUNqQjtRQUNqQ0EsS0FBSyxPQUFPLEtBQUssSUFBSUEsRUFBRWtCLGNBQWM7UUFDckNILGVBQWUsQ0FBQ0ksSUFBSUMsS0FBS0MsR0FBRyxDQUFDLEdBQUdGLElBQUk7SUFDeEMsR0FBRyxFQUFFO0lBQ0wsTUFBTXRCLE9BQU9wQyxPQUFPd0QsV0FBVyxDQUFDLENBQUNqQjtRQUM3QkEsS0FBSyxPQUFPLEtBQUssSUFBSUEsRUFBRWtCLGNBQWM7UUFDckNILGVBQWUsQ0FBQ0ksSUFBSUMsS0FBS0MsR0FBRyxDQUFDLEdBQUdELEtBQUtFLEdBQUcsQ0FBQzdCLFlBQVlNLE1BQU0sR0FBRyxHQUFHb0IsSUFBSTtJQUN6RSxHQUFHO1FBQ0MxQixZQUFZTSxNQUFNO0tBQ3JCO0lBQ0QsSUFBSXdCO0lBQ0osTUFBTUMsY0FBYy9ELE9BQU9rQyxPQUFPLENBQUMsSUFBSSxDQUFDNEIseUJBQXlCOUIsV0FBVyxDQUFDcUIsVUFBVSxLQUFLLE9BQU9TLHlCQUF5QixNQUFNO1FBQzlIVDtRQUNBckI7S0FDSDtJQUNELGtFQUFrRTtJQUNsRSxnREFBZ0Q7SUFDaERoQyxPQUFPNkMsU0FBUyxDQUFDO1FBQ2IsSUFBSW5CLE9BQU9ZLE1BQU0sR0FBRyxHQUFHO1lBQ25CUixXQUFXLENBQUM7WUFDWnNCLGdCQUFnQjtZQUNoQkUsZUFBZTtRQUNuQjtJQUNKLEdBQUc7UUFDQzVCLE9BQU9ZLE1BQU07S0FDaEI7SUFDRCxNQUFNMEIsV0FBV2hFLE9BQU93RCxXQUFXLENBQUMsQ0FBQ2pCO1FBQ2pDQSxLQUFLLE9BQU8sS0FBSyxJQUFJQSxFQUFFa0IsY0FBYztRQUNyQ0wsZ0JBQWdCO0lBQ3BCLEdBQUcsRUFBRTtJQUNMLE1BQU1hLE9BQU9qRSxPQUFPd0QsV0FBVyxDQUFDLENBQUNqQjtRQUM3QkEsS0FBSyxPQUFPLEtBQUssSUFBSUEsRUFBRWtCLGNBQWM7UUFDckNMLGdCQUFnQjtJQUNwQixHQUFHLEVBQUU7SUFDTCxNQUFNYyxhQUFhbEUsT0FBT3dELFdBQVcsQ0FBQyxDQUFDakI7UUFDbkNBLEtBQUssT0FBTyxLQUFLLElBQUlBLEVBQUVrQixjQUFjO1FBQ3JDTCxnQkFBZ0I7SUFDcEIsR0FBRyxFQUFFO0lBQ0wsMkVBQTJFO0lBQzNFLDZDQUE2QztJQUM3QyxJQUFJMUIsT0FBT1ksTUFBTSxHQUFHLEtBQUt5QixlQUFlLE1BQU07UUFDMUMsT0FBTztJQUNYO0lBQ0EsSUFBSXBCLFdBQVc7UUFDWCw2QkFBNkI7UUFDN0IsT0FBcUIsV0FBSCxHQUFJLElBQUc1QyxZQUFZb0UsR0FBRyxFQUFFOUQsU0FBUytELE9BQU8sRUFBRSxDQUFDO0lBQ2pFO0lBQ0EsSUFBSWpCLGlCQUFpQixVQUFVO1FBQzNCLE9BQU87SUFDWDtJQUNBLElBQUlBLGlCQUFpQixhQUFhO1FBQzlCLE9BQXFCLFdBQUgsR0FBSSxJQUFHcEQsWUFBWW9FLEdBQUcsRUFBRTdELE9BQU8rRCxLQUFLLEVBQUU7WUFDcERDLFdBQVc7WUFDWEMsU0FBU0w7WUFDVE0sVUFBd0IsV0FBSCxHQUFJLElBQUd6RSxZQUFZMEUsSUFBSSxFQUFFLE9BQU87Z0JBQ2pESCxXQUFXO2dCQUNYRSxVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHekUsWUFBWTBFLElBQUksRUFBRSxPQUFPO3dCQUN2Q0MsT0FBTzt3QkFDUEMsT0FBTzt3QkFDUEMsUUFBUTt3QkFDUkMsU0FBUzt3QkFDVEMsTUFBTTt3QkFDTkMsUUFBUTt3QkFDUkMsYUFBYTt3QkFDYkMsZUFBZTt3QkFDZkMsZ0JBQWdCO3dCQUNoQlYsVUFBVTs0QkFDTixXQUFXLEdBQUksSUFBR3pFLFlBQVlvRSxHQUFHLEVBQUUsVUFBVTtnQ0FDekNnQixJQUFJO2dDQUNKQyxJQUFJO2dDQUNKQyxHQUFHOzRCQUNQOzRCQUNBLFdBQVcsR0FBSSxJQUFHdEYsWUFBWW9FLEdBQUcsRUFBRSxRQUFRO2dDQUN2Q21CLElBQUk7Z0NBQ0pDLElBQUk7Z0NBQ0pDLElBQUk7Z0NBQ0pDLElBQUk7NEJBQ1I7NEJBQ0EsV0FBVyxHQUFJLElBQUcxRixZQUFZb0UsR0FBRyxFQUFFLFFBQVE7Z0NBQ3ZDbUIsSUFBSTtnQ0FDSkMsSUFBSTtnQ0FDSkMsSUFBSTtnQ0FDSkMsSUFBSTs0QkFDUjt5QkFDSDtvQkFDTDtvQkFDQSxXQUFXLEdBQUksSUFBRzFGLFlBQVkwRSxJQUFJLEVBQUUsUUFBUTt3QkFDeENELFVBQVU7NEJBQ054QyxZQUFZTSxNQUFNOzRCQUNsQjs0QkFDQU4sWUFBWU0sTUFBTSxHQUFHLElBQUksTUFBTTt5QkFDbEM7b0JBQ0w7b0JBQ0EsV0FBVyxHQUFJLElBQUd2QyxZQUFZb0UsR0FBRyxFQUFFLFVBQVU7d0JBQ3pDLHdDQUF3Qzt3QkFDeENHLFdBQVc7d0JBQ1huRCxNQUFNO3dCQUNOb0QsU0FBUyxDQUFDaEM7NEJBQ05BLEVBQUVtRCxlQUFlOzRCQUNqQnpCO3dCQUNKO3dCQUNBLGNBQWM7d0JBQ2RPLFVBQXdCLFdBQUgsR0FBSSxJQUFHekUsWUFBWW9FLEdBQUcsRUFBRXpELFdBQVdpRixTQUFTLEVBQUUsQ0FBQztvQkFDeEU7aUJBQ0g7WUFDTDtRQUNKO0lBQ0o7SUFDQSxNQUFNQyxnQkFBZ0I7UUFDbEI7UUFDQTtLQUNILENBQUNDLFFBQVEsQ0FBQyxDQUFDLEdBQUdyRixpQkFBaUJzRixjQUFjLEVBQUUvQixZQUFZZ0MsS0FBSyxLQUFLO0lBQ3RFLE9BQXFCLFdBQUgsR0FBSSxJQUFHaEcsWUFBWW9FLEdBQUcsRUFBRTlELFNBQVMrRCxPQUFPLEVBQUU7UUFDeERJLFVBQXdCLFdBQUgsR0FBSSxJQUFHekUsWUFBWW9FLEdBQUcsRUFBRWhFLFFBQVE2RixNQUFNLEVBQUU7WUFDekQ3RSxNQUFNO1lBQ04sbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQjhFLFNBQVNMLGdCQUFnQk0sWUFBWWxDO1lBQ3JDUSxVQUF3QixXQUFILEdBQUksSUFBR3pFLFlBQVkwRSxJQUFJLEVBQUV0RSxRQUFRZ0csYUFBYSxFQUFFO2dCQUNqRTNCLFVBQVU7b0JBQ04sV0FBVyxHQUFJLElBQUd6RSxZQUFZMEUsSUFBSSxFQUFFdEUsUUFBUWlHLFlBQVksRUFBRTt3QkFDdEQ5QixXQUFXO3dCQUNYRSxVQUFVOzRCQUNOLFdBQVcsR0FBSSxJQUFHekUsWUFBWTBFLElBQUksRUFBRXJFLHVCQUF1QmlHLHFCQUFxQixFQUFFO2dDQUM5RTlDLFVBQVVGLFlBQVksSUFBSUUsV0FBVztnQ0FDckNuQixNQUFNaUIsWUFBWXJCLFlBQVlNLE1BQU0sR0FBRyxJQUFJRixPQUFPO2dDQUNsRGtFLE9BQU9WLGdCQUFnQk0sWUFBWWxDO2dDQUNuQ1EsVUFBVTtvQ0FDTixXQUFXLEdBQUksSUFBR3pFLFlBQVkwRSxJQUFJLEVBQUUsU0FBUzt3Q0FDekNELFVBQVU7NENBQ04sV0FBVyxHQUFJLElBQUd6RSxZQUFZb0UsR0FBRyxFQUFFLFFBQVE7Z0RBQ3ZDSyxVQUFVbkIsWUFBWTs0Q0FDMUI7NENBQ0E7NENBQ0E7NENBQ0EsV0FBVyxHQUFJLElBQUd0RCxZQUFZb0UsR0FBRyxFQUFFLFFBQVE7Z0RBQ3ZDSyxVQUFVeEMsWUFBWU0sTUFBTTs0Q0FDaEM7NENBQ0E7NENBQ0FOLFlBQVlNLE1BQU0sR0FBRyxJQUFJLEtBQUs7eUNBQ2pDO29DQUNMO29DQUNBVixjQUE0QixXQUFILEdBQUksSUFBRzdCLFlBQVlvRSxHQUFHLEVBQUV2RCxzQkFBc0IyRixvQkFBb0IsRUFBRTt3Q0FDekYsR0FBRzNFLFdBQVc7b0NBQ2xCLEtBQUs7aUNBQ1I7NEJBQ0w7NEJBQ0EsV0FBVyxHQUFJLElBQUc3QixZQUFZb0UsR0FBRyxFQUFFLE1BQU07Z0NBQ3JDM0IsSUFBSTtnQ0FDSmdDLFVBQVVvQixnQkFBZ0IsaUJBQWlCOzRCQUMvQzs0QkFDQSxXQUFXLEdBQUksSUFBRzdGLFlBQVkwRSxJQUFJLEVBQUUsS0FBSztnQ0FDckNqQyxJQUFJO2dDQUNKZ0MsVUFBVTtvQ0FDTlQsWUFBWWdDLEtBQUssQ0FBQ3RHLElBQUk7b0NBQ3RCO29DQUNBO29DQUNBLFdBQVcsR0FBSSxJQUFHTSxZQUFZb0UsR0FBRyxFQUFFdEQsZUFBZTJGLGFBQWEsRUFBRTt3Q0FDN0RDLE1BQU0xQyxZQUFZZ0MsS0FBSyxDQUFDeEUsT0FBTztvQ0FDbkM7aUNBQ0g7NEJBQ0w7NEJBQ0FxRSxnQkFBOEIsV0FBSCxHQUFJLElBQUc3RixZQUFZb0UsR0FBRyxFQUFFLE9BQU87Z0NBQ3RESyxVQUF3QixXQUFILEdBQUksSUFBR3pFLFlBQVlvRSxHQUFHLEVBQUUsU0FBUztvQ0FDbERLLFVBQVU7Z0NBQ2Q7NEJBQ0osS0FBSzBCO3lCQUNSO29CQUNMO29CQUNBLFdBQVcsR0FBSSxJQUFHbkcsWUFBWW9FLEdBQUcsRUFBRWhFLFFBQVF1RyxVQUFVLEVBQUU7d0JBQ25EcEMsV0FBVzt3QkFDWEUsVUFBd0IsV0FBSCxHQUFJLElBQUd6RSxZQUFZb0UsR0FBRyxFQUFFeEQsY0FBY2dHLFlBQVksRUFBRTs0QkFDckVaLE9BQU9oQzt3QkFDWCxHQUFHQSxZQUFZdkIsRUFBRSxDQUFDb0UsUUFBUTtvQkFDOUI7aUJBQ0g7WUFDTDtRQUNKO0lBQ0o7QUFDSjtHQXBQTXhIO0tBQUFBO0FBcVBOLE1BQU1DLFNBQVMsQ0FBQyxHQUFHb0IsY0FBY29HLElBQUksRUFBRS9GO0FBRXZDLElBQUksQ0FBQyxPQUFPN0IsUUFBUTZILE9BQU8sS0FBSyxjQUFlLE9BQU83SCxRQUFRNkgsT0FBTyxLQUFLLFlBQVk3SCxRQUFRNkgsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPN0gsUUFBUTZILE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktoSSxPQUFPQyxjQUFjLENBQUNDLFFBQVE2SCxPQUFPLEVBQUUsY0FBYztRQUFFNUgsT0FBTztJQUFLO0lBQ25FSCxPQUFPaUksTUFBTSxDQUFDL0gsUUFBUTZILE9BQU8sRUFBRTdIO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVE2SCxPQUFPO0FBQ2xDLEVBRUEsa0NBQWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL0Vycm9ycy5qcz80ZDJhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgRXJyb3JzOiBudWxsLFxuICAgIHN0eWxlczogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBFcnJvcnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRXJyb3JzO1xuICAgIH0sXG4gICAgc3R5bGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2VcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfZXJyb3JvdmVybGF5cmVkdWNlciA9IHJlcXVpcmUoXCIuLi9lcnJvci1vdmVybGF5LXJlZHVjZXJcIik7XG5jb25zdCBfRGlhbG9nID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvRGlhbG9nXCIpO1xuY29uc3QgX0xlZnRSaWdodERpYWxvZ0hlYWRlciA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL0xlZnRSaWdodERpYWxvZ0hlYWRlclwiKTtcbmNvbnN0IF9PdmVybGF5ID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvT3ZlcmxheVwiKTtcbmNvbnN0IF9Ub2FzdCA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL1RvYXN0XCIpO1xuY29uc3QgX2dldEVycm9yQnlUeXBlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZ2V0RXJyb3JCeVR5cGVcIik7XG5jb25zdCBfbm9kZVN0YWNrRnJhbWVzID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvbm9kZVN0YWNrRnJhbWVzXCIpO1xuY29uc3QgX25vb3B0ZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL25vb3AtdGVtcGxhdGVcIik7XG5jb25zdCBfQ2xvc2VJY29uID0gcmVxdWlyZShcIi4uL2ljb25zL0Nsb3NlSWNvblwiKTtcbmNvbnN0IF9SdW50aW1lRXJyb3IgPSByZXF1aXJlKFwiLi9SdW50aW1lRXJyb3JcIik7XG5jb25zdCBfVmVyc2lvblN0YWxlbmVzc0luZm8gPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9WZXJzaW9uU3RhbGVuZXNzSW5mb1wiKTtcbmNvbnN0IF9ob3RsaW5rZWR0ZXh0ID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvaG90LWxpbmtlZC10ZXh0XCIpO1xuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuXyhbXG4gICAgICAgIFwiXFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyID4gaDEge1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtZm9udC1iaWcpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS1mb250LWJpZ2dlcik7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICBtYXJnaW46IDA7XFxuICAgIG1hcmdpbi10b3A6IGNhbGModmFyKC0tc2l6ZS1nYXAtZG91YmxlKSArIHZhcigtLXNpemUtZ2FwLWhhbGYpKTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIgc21hbGwge1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtZm9udC1zbWFsbCk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnRzLTEpO1xcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1nYXAtZG91YmxlKTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIgc21hbGwgPiBzcGFuIHtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIgPiBwIHtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLWZvbnQtc21hbGwpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS1mb250LWJpZyk7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICBtYXJnaW46IDA7XFxuICAgIG1hcmdpbi10b3A6IHZhcigtLXNpemUtZ2FwLWhhbGYpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyID4gZGl2ID4gc21hbGwge1xcbiAgICBtYXJnaW46IDA7XFxuICAgIG1hcmdpbi10b3A6IHZhcigtLXNpemUtZ2FwLWhhbGYpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciA+IHAgPiBhIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktcmVkKTtcXG4gIH1cXG5cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1ib2R5ID4gaDI6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBtYXJnaW4tdG9wOiBjYWxjKHZhcigtLXNpemUtZ2FwLWRvdWJsZSkgKyB2YXIoLS1zaXplLWdhcCkpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWJvZHkgPiBoMiB7XFxuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUtZ2FwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLWZvbnQtYmlnKTtcXG4gIH1cXG5cXG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzLXBhcmVudCB7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTtcXG4gIH1cXG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzLXBhcmVudDpob3ZlciB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcXG4gIH1cXG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbiAgfVxcbiAgLm5leHRqcy10b2FzdC1lcnJvcnMgPiBzdmcge1xcbiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUtZ2FwKTtcXG4gIH1cXG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzLWhpZGUtYnV0dG9uIHtcXG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtZ2FwLXRyaXBsZSk7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgYmFja2dyb3VuZDogbm9uZTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktYnJpZ2h0LXdoaXRlKTtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjI1cyBlYXNlO1xcbiAgICBvcGFjaXR5OiAwLjc7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWVycm9ycy1oaWRlLWJ1dHRvbjpob3ZlciB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxuXCJcbiAgICBdKTtcbiAgICBfdGVtcGxhdGVPYmplY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIGdldEVycm9yU2lnbmF0dXJlKGV2KSB7XG4gICAgY29uc3QgeyBldmVudCB9ID0gZXY7XG4gICAgc3dpdGNoKGV2ZW50LnR5cGUpe1xuICAgICAgICBjYXNlIF9lcnJvcm92ZXJsYXlyZWR1Y2VyLkFDVElPTl9VTkhBTkRMRURfRVJST1I6XG4gICAgICAgIGNhc2UgX2Vycm9yb3ZlcmxheXJlZHVjZXIuQUNUSU9OX1VOSEFORExFRF9SRUpFQ1RJT046XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnJlYXNvbi5uYW1lICsgXCI6OlwiICsgZXZlbnQucmVhc29uLm1lc3NhZ2UgKyBcIjo6XCIgKyBldmVudC5yZWFzb24uc3RhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7fVxuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3QgXyA9IGV2ZW50O1xuICAgIHJldHVybiBcIlwiO1xufVxuY29uc3QgRXJyb3JzID0gZnVuY3Rpb24gRXJyb3JzKHBhcmFtKSB7XG4gICAgbGV0IHsgZXJyb3JzLCBpbml0aWFsRGlzcGxheVN0YXRlLCB2ZXJzaW9uSW5mbyB9ID0gcGFyYW07XG4gICAgY29uc3QgW2xvb2t1cHMsIHNldExvb2t1cHNdID0gX3JlYWN0LnVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBbcmVhZHlFcnJvcnMsIG5leHRFcnJvcl0gPSBfcmVhY3QudXNlTWVtbygoKT0+e1xuICAgICAgICBsZXQgcmVhZHkgPSBbXTtcbiAgICAgICAgbGV0IG5leHQgPSBudWxsO1xuICAgICAgICAvLyBFbnN1cmUgZXJyb3JzIGFyZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHRoZXkgb2NjdXJyZWQgaW46XG4gICAgICAgIGZvcihsZXQgaWR4ID0gMDsgaWR4IDwgZXJyb3JzLmxlbmd0aDsgKytpZHgpe1xuICAgICAgICAgICAgY29uc3QgZSA9IGVycm9yc1tpZHhdO1xuICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gZTtcbiAgICAgICAgICAgIGlmIChpZCBpbiBsb29rdXBzKSB7XG4gICAgICAgICAgICAgICAgcmVhZHkucHVzaChsb29rdXBzW2lkXSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIGVycm9yc1xuICAgICAgICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gZXJyb3JzW2lkeCAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChnZXRFcnJvclNpZ25hdHVyZShwcmV2KSA9PT0gZ2V0RXJyb3JTaWduYXR1cmUoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dCA9IGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgcmVhZHksXG4gICAgICAgICAgICBuZXh0XG4gICAgICAgIF07XG4gICAgfSwgW1xuICAgICAgICBlcnJvcnMsXG4gICAgICAgIGxvb2t1cHNcbiAgICBdKTtcbiAgICBjb25zdCBpc0xvYWRpbmcgPSBfcmVhY3QudXNlTWVtbygoKT0+e1xuICAgICAgICByZXR1cm4gcmVhZHlFcnJvcnMubGVuZ3RoIDwgMSAmJiBCb29sZWFuKGVycm9ycy5sZW5ndGgpO1xuICAgIH0sIFtcbiAgICAgICAgZXJyb3JzLmxlbmd0aCxcbiAgICAgICAgcmVhZHlFcnJvcnMubGVuZ3RoXG4gICAgXSk7XG4gICAgX3JlYWN0LnVzZUVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAobmV4dEVycm9yID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbW91bnRlZCA9IHRydWU7XG4gICAgICAgICgwLCBfZ2V0RXJyb3JCeVR5cGUuZ2V0RXJyb3JCeVR5cGUpKG5leHRFcnJvcikudGhlbigocmVzb2x2ZWQpPT57XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGlmIHRoZSBkZXNpcmVkIGVycm9yIGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSByZXNvbHZpbmcsXG4gICAgICAgICAgICAvLyB0aHVzIHdlJ3JlIG5vdCB0cmFja2luZyBpdCB1c2luZyBhIHJlZi4gT25jZSB0aGUgd29yayBoYXMgYmVlbiBkb25lLFxuICAgICAgICAgICAgLy8gd2UnbGwgc3RvcmUgaXQuXG4gICAgICAgICAgICBpZiAobW91bnRlZCkge1xuICAgICAgICAgICAgICAgIHNldExvb2t1cHMoKG0pPT4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlZC5pZF06IHJlc29sdmVkXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgKCk9PntcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHRoaXMsIHRob3VnaCBhbiBlZGdlIGNhc2VcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgbW91bnRlZCA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgbmV4dEVycm9yXG4gICAgXSk7XG4gICAgY29uc3QgW2Rpc3BsYXlTdGF0ZSwgc2V0RGlzcGxheVN0YXRlXSA9IF9yZWFjdC51c2VTdGF0ZShpbml0aWFsRGlzcGxheVN0YXRlKTtcbiAgICBjb25zdCBbYWN0aXZlSWR4LCBzZXRBY3RpdmVJbmRleF0gPSBfcmVhY3QudXNlU3RhdGUoMCk7XG4gICAgY29uc3QgcHJldmlvdXMgPSBfcmVhY3QudXNlQ2FsbGJhY2soKGUpPT57XG4gICAgICAgIGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0QWN0aXZlSW5kZXgoKHYpPT5NYXRoLm1heCgwLCB2IC0gMSkpO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBuZXh0ID0gX3JlYWN0LnVzZUNhbGxiYWNrKChlKT0+e1xuICAgICAgICBlID09IG51bGwgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNldEFjdGl2ZUluZGV4KCh2KT0+TWF0aC5tYXgoMCwgTWF0aC5taW4ocmVhZHlFcnJvcnMubGVuZ3RoIC0gMSwgdiArIDEpKSk7XG4gICAgfSwgW1xuICAgICAgICByZWFkeUVycm9ycy5sZW5ndGhcbiAgICBdKTtcbiAgICB2YXIgX3JlYWR5RXJyb3JzX2FjdGl2ZUlkeDtcbiAgICBjb25zdCBhY3RpdmVFcnJvciA9IF9yZWFjdC51c2VNZW1vKCgpPT4oX3JlYWR5RXJyb3JzX2FjdGl2ZUlkeCA9IHJlYWR5RXJyb3JzW2FjdGl2ZUlkeF0pICE9IG51bGwgPyBfcmVhZHlFcnJvcnNfYWN0aXZlSWR4IDogbnVsbCwgW1xuICAgICAgICBhY3RpdmVJZHgsXG4gICAgICAgIHJlYWR5RXJyb3JzXG4gICAgXSk7XG4gICAgLy8gUmVzZXQgY29tcG9uZW50IHN0YXRlIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyB0byBiZSBkaXNwbGF5ZWQuXG4gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgbGV0cyBoYW5kbGUgaXQuXG4gICAgX3JlYWN0LnVzZUVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHNldExvb2t1cHMoe30pO1xuICAgICAgICAgICAgc2V0RGlzcGxheVN0YXRlKFwiaGlkZGVuXCIpO1xuICAgICAgICAgICAgc2V0QWN0aXZlSW5kZXgoMCk7XG4gICAgICAgIH1cbiAgICB9LCBbXG4gICAgICAgIGVycm9ycy5sZW5ndGhcbiAgICBdKTtcbiAgICBjb25zdCBtaW5pbWl6ZSA9IF9yZWFjdC51c2VDYWxsYmFjaygoZSk9PntcbiAgICAgICAgZSA9PSBudWxsID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXREaXNwbGF5U3RhdGUoXCJtaW5pbWl6ZWRcIik7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGhpZGUgPSBfcmVhY3QudXNlQ2FsbGJhY2soKGUpPT57XG4gICAgICAgIGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0RGlzcGxheVN0YXRlKFwiaGlkZGVuXCIpO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBmdWxsc2NyZWVuID0gX3JlYWN0LnVzZUNhbGxiYWNrKChlKT0+e1xuICAgICAgICBlID09IG51bGwgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNldERpc3BsYXlTdGF0ZShcImZ1bGxzY3JlZW5cIik7XG4gICAgfSwgW10pO1xuICAgIC8vIFRoaXMgY29tcG9uZW50IHNob3VsZG4ndCBiZSByZW5kZXJlZCB3aXRoIG5vIGVycm9ycywgYnV0IGlmIGl0IGlzLCBsZXQnc1xuICAgIC8vIGhhbmRsZSBpdCBncmFjZWZ1bGx5IGJ5IHJlbmRlcmluZyBub3RoaW5nLlxuICAgIGlmIChlcnJvcnMubGVuZ3RoIDwgMSB8fCBhY3RpdmVFcnJvciA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICAgIC8vIFRPRE86IGJldHRlciBsb2FkaW5nIHN0YXRlXG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9PdmVybGF5Lk92ZXJsYXksIHt9KTtcbiAgICB9XG4gICAgaWYgKGRpc3BsYXlTdGF0ZSA9PT0gXCJoaWRkZW5cIikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRpc3BsYXlTdGF0ZSA9PT0gXCJtaW5pbWl6ZWRcIikge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfVG9hc3QuVG9hc3QsIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJuZXh0anMtdG9hc3QtZXJyb3JzLXBhcmVudFwiLFxuICAgICAgICAgICAgb25DbGljazogZnVsbHNjcmVlbixcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy10b2FzdC1lcnJvcnNcIixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMjRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIyNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImNpcmNsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4OiBcIjEyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN5OiBcIjEyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHI6IFwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJsaW5lXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IFwiMTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE6IFwiOFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogXCIxMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MjogXCIxMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImxpbmVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTogXCIxMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MTogXCIxNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogXCIxMi4wMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MjogXCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5RXJyb3JzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBlcnJvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5RXJyb3JzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLW5leHRqcy10b2FzdC1lcnJvcnMtaGlkZS1idXR0b25cIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJuZXh0anMtdG9hc3QtZXJyb3JzLWhpZGUtYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKGUpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiSGlkZSBFcnJvcnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9DbG9zZUljb24uQ2xvc2VJY29uLCB7fSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaXNTZXJ2ZXJFcnJvciA9IFtcbiAgICAgICAgXCJzZXJ2ZXJcIixcbiAgICAgICAgXCJlZGdlLXNlcnZlclwiXG4gICAgXS5pbmNsdWRlcygoMCwgX25vZGVTdGFja0ZyYW1lcy5nZXRFcnJvclNvdXJjZSkoYWN0aXZlRXJyb3IuZXJyb3IpIHx8IFwiXCIpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9PdmVybGF5Lk92ZXJsYXksIHtcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0RpYWxvZy5EaWFsb2csIHtcbiAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIixcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsXCIsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogXCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzY1wiLFxuICAgICAgICAgICAgb25DbG9zZTogaXNTZXJ2ZXJFcnJvciA/IHVuZGVmaW5lZCA6IG1pbmltaXplLFxuICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9EaWFsb2cuRGlhbG9nQ29udGVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9EaWFsb2cuRGlhbG9nSGVhZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwibmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9MZWZ0UmlnaHREaWFsb2dIZWFkZXIuTGVmdFJpZ2h0RGlhbG9nSGVhZGVyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzOiBhY3RpdmVJZHggPiAwID8gcHJldmlvdXMgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBhY3RpdmVJZHggPCByZWFkeUVycm9ycy5sZW5ndGggLSAxID8gbmV4dCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlOiBpc1NlcnZlckVycm9yID8gdW5kZWZpbmVkIDogbWluaW1pemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInNtYWxsXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogYWN0aXZlSWR4ICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgb2ZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiByZWFkeUVycm9ycy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHVuaGFuZGxlZCBlcnJvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeUVycm9ycy5sZW5ndGggPCAyID8gXCJcIiA6IFwic1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uSW5mbyA/IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX1ZlcnNpb25TdGFsZW5lc3NJbmZvLlZlcnNpb25TdGFsZW5lc3NJbmZvLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udmVyc2lvbkluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImgxXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBpc1NlcnZlckVycm9yID8gXCJTZXJ2ZXIgRXJyb3JcIiA6IFwiVW5oYW5kbGVkIFJ1bnRpbWUgRXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwicFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19kZXNjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVFcnJvci5lcnJvci5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI6XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2hvdGxpbmtlZHRleHQuSG90bGlua2VkVGV4dCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGFjdGl2ZUVycm9yLmVycm9yLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlcnZlckVycm9yID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic21hbGxcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiVGhpcyBlcnJvciBoYXBwZW5lZCB3aGlsZSBnZW5lcmF0aW5nIHRoZSBwYWdlLiBBbnkgY29uc29sZSBsb2dzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSB0ZXJtaW5hbCB3aW5kb3cuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfRGlhbG9nLkRpYWxvZ0JvZHksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJuZXh0anMtY29udGFpbmVyLWVycm9ycy1ib2R5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfUnVudGltZUVycm9yLlJ1bnRpbWVFcnJvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBhY3RpdmVFcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgYWN0aXZlRXJyb3IuaWQudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH0pO1xufTtcbmNvbnN0IHN0eWxlcyA9ICgwLCBfbm9vcHRlbXBsYXRlLm5vb3ApKF90ZW1wbGF0ZU9iamVjdCgpKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXJyb3JzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIkVycm9ycyIsInN0eWxlcyIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX2Vycm9yb3ZlcmxheXJlZHVjZXIiLCJfRGlhbG9nIiwiX0xlZnRSaWdodERpYWxvZ0hlYWRlciIsIl9PdmVybGF5IiwiX1RvYXN0IiwiX2dldEVycm9yQnlUeXBlIiwiX25vZGVTdGFja0ZyYW1lcyIsIl9ub29wdGVtcGxhdGUiLCJfQ2xvc2VJY29uIiwiX1J1bnRpbWVFcnJvciIsIl9WZXJzaW9uU3RhbGVuZXNzSW5mbyIsIl9ob3RsaW5rZWR0ZXh0IiwiX3RlbXBsYXRlT2JqZWN0IiwiZGF0YSIsImdldEVycm9yU2lnbmF0dXJlIiwiZXYiLCJldmVudCIsInR5cGUiLCJBQ1RJT05fVU5IQU5ETEVEX0VSUk9SIiwiQUNUSU9OX1VOSEFORExFRF9SRUpFQ1RJT04iLCJyZWFzb24iLCJtZXNzYWdlIiwic3RhY2siLCJwYXJhbSIsImVycm9ycyIsImluaXRpYWxEaXNwbGF5U3RhdGUiLCJ2ZXJzaW9uSW5mbyIsImxvb2t1cHMiLCJzZXRMb29rdXBzIiwidXNlU3RhdGUiLCJyZWFkeUVycm9ycyIsIm5leHRFcnJvciIsInVzZU1lbW8iLCJyZWFkeSIsIm5leHQiLCJpZHgiLCJsZW5ndGgiLCJlIiwiaWQiLCJwdXNoIiwicHJldiIsImlzTG9hZGluZyIsIkJvb2xlYW4iLCJ1c2VFZmZlY3QiLCJtb3VudGVkIiwiZ2V0RXJyb3JCeVR5cGUiLCJ0aGVuIiwicmVzb2x2ZWQiLCJtIiwiZGlzcGxheVN0YXRlIiwic2V0RGlzcGxheVN0YXRlIiwiYWN0aXZlSWR4Iiwic2V0QWN0aXZlSW5kZXgiLCJwcmV2aW91cyIsInVzZUNhbGxiYWNrIiwicHJldmVudERlZmF1bHQiLCJ2IiwiTWF0aCIsIm1heCIsIm1pbiIsIl9yZWFkeUVycm9yc19hY3RpdmVJZHgiLCJhY3RpdmVFcnJvciIsIm1pbmltaXplIiwiaGlkZSIsImZ1bGxzY3JlZW4iLCJqc3giLCJPdmVybGF5IiwiVG9hc3QiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwiY2hpbGRyZW4iLCJqc3hzIiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJjeCIsImN5IiwiciIsIngxIiwieTEiLCJ4MiIsInkyIiwic3RvcFByb3BhZ2F0aW9uIiwiQ2xvc2VJY29uIiwiaXNTZXJ2ZXJFcnJvciIsImluY2x1ZGVzIiwiZ2V0RXJyb3JTb3VyY2UiLCJlcnJvciIsIkRpYWxvZyIsIm9uQ2xvc2UiLCJ1bmRlZmluZWQiLCJEaWFsb2dDb250ZW50IiwiRGlhbG9nSGVhZGVyIiwiTGVmdFJpZ2h0RGlhbG9nSGVhZGVyIiwiY2xvc2UiLCJWZXJzaW9uU3RhbGVuZXNzSW5mbyIsIkhvdGxpbmtlZFRleHQiLCJ0ZXh0IiwiRGlhbG9nQm9keSIsIlJ1bnRpbWVFcnJvciIsInRvU3RyaW5nIiwibm9vcCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RootLayoutError.js": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RootLayoutError.js ***! + \**********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RootLayoutError: function() {\n return RootLayoutError;\n },\n styles: function() {\n return styles;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _Dialog = __webpack_require__(/*! ../components/Dialog */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\");\nconst _Overlay = __webpack_require__(/*! ../components/Overlay */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js\");\nconst _Terminal = __webpack_require__(/*! ../components/Terminal */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js\");\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n .nextjs-container-root-layout-error-header > h4 {\\n line-height: 1.5;\\n margin: 0;\\n padding: 0;\\n }\\n\\n .nextjs-container-root-layout-error-body footer {\\n margin-top: var(--size-gap);\\n }\\n .nextjs-container-root-layout-error-body footer p {\\n margin: 0;\\n }\\n\\n .nextjs-container-root-layout-error-body small {\\n color: #757575;\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst RootLayoutError = function BuildError(param) {\n _s();\n let { missingTags } = param;\n const message = \"Please make sure to include the following tags in your root layout: <html>, <body>.\\n\\n\" + (\"Missing required root layout tag\" + (missingTags.length === 1 ? \"\" : \"s\") + \": \") + missingTags.join(\", \");\n const noop = _react.default.useCallback(()=>{}, []);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_Overlay.Overlay, {\n fixed: true,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.Dialog, {\n type: \"error\",\n \"aria-labelledby\": \"nextjs__container_root_layout_error_label\",\n \"aria-describedby\": \"nextjs__container_root_layout_error_desc\",\n onClose: noop,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogContent, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Dialog.DialogHeader, {\n className: \"nextjs-container-root-layout-error-header\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h4\", {\n id: \"nextjs__container_root_layout_error_label\",\n children: \"Missing required tags\"\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(_Dialog.DialogBody, {\n className: \"nextjs-container-root-layout-error-body\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_Terminal.Terminal, {\n content: message\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"footer\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n id: \"nextjs__container_root_layout_error_desc\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"small\", {\n children: \"This error and can only be dismissed by providing all required tags.\"\n })\n })\n })\n ]\n })\n ]\n })\n })\n });\n};\n_s(RootLayoutError, \"hHp3im7kVRcdOeKmK0+3cSEjzLI=\");\n_c = RootLayoutError;\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=RootLayoutError.js.map\nvar _c;\n$RefreshReg$(_c, \"RootLayoutError\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1Jvb3RMYXlvdXRFcnJvci5qcyIsIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0FBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0lBQ0FDLFFBQVE7UUFDSixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTywyQkFBMkJDLG1CQUFPQSxDQUFDLGdJQUF5QztBQUNsRixNQUFNQyxpQ0FBaUNELG1CQUFPQSxDQUFDLDRJQUErQztBQUM5RixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUcsU0FBUyxXQUFXLEdBQUdKLHlCQUF5QkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxtRkFBTztBQUN2RSxNQUFNSyxVQUFVTCxtQkFBT0EsQ0FBQyxrSkFBc0I7QUFDOUMsTUFBTU0sV0FBV04sbUJBQU9BLENBQUMsb0pBQXVCO0FBQ2hELE1BQU1PLFlBQVlQLG1CQUFPQSxDQUFDLHNKQUF3QjtBQUNsRCxNQUFNUSxnQkFBZ0JSLG1CQUFPQSxDQUFDLG9KQUEwQjtBQUN4RCxTQUFTUztJQUNMLE1BQU1DLE9BQU9ULCtCQUErQkcsQ0FBQyxDQUFDO1FBQzFDO0tBQ0g7SUFDREssa0JBQWtCO1FBQ2QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxNQUFNbkIsa0JBQWtCLFNBQVNvQixXQUFXQyxLQUFLOztJQUM3QyxJQUFJLEVBQUVDLFdBQVcsRUFBRSxHQUFHRDtJQUN0QixNQUFNRSxVQUFVLDRGQUE2RixzQ0FBc0NELENBQUFBLFlBQVlFLE1BQU0sS0FBSyxJQUFJLEtBQUssR0FBRSxJQUFLLElBQUcsSUFBS0YsWUFBWUcsSUFBSSxDQUFDO0lBQ25OLE1BQU1DLE9BQU9kLE9BQU9lLE9BQU8sQ0FBQ0MsV0FBVyxDQUFDLEtBQUssR0FBRyxFQUFFO0lBQ2xELE9BQXFCLFdBQUgsR0FBSSxJQUFHakIsWUFBWWtCLEdBQUcsRUFBRWQsU0FBU2UsT0FBTyxFQUFFO1FBQ3hEQyxPQUFPO1FBQ1BDLFVBQXdCLFdBQUgsR0FBSSxJQUFHckIsWUFBWWtCLEdBQUcsRUFBRWYsUUFBUW1CLE1BQU0sRUFBRTtZQUN6REMsTUFBTTtZQUNOLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEJDLFNBQVNUO1lBQ1RNLFVBQXdCLFdBQUgsR0FBSSxJQUFHckIsWUFBWXlCLElBQUksRUFBRXRCLFFBQVF1QixhQUFhLEVBQUU7Z0JBQ2pFTCxVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHckIsWUFBWWtCLEdBQUcsRUFBRWYsUUFBUXdCLFlBQVksRUFBRTt3QkFDckRDLFdBQVc7d0JBQ1hQLFVBQXdCLFdBQUgsR0FBSSxJQUFHckIsWUFBWWtCLEdBQUcsRUFBRSxNQUFNOzRCQUMvQ1csSUFBSTs0QkFDSlIsVUFBVTt3QkFDZDtvQkFDSjtvQkFDQSxXQUFXLEdBQUksSUFBR3JCLFlBQVl5QixJQUFJLEVBQUV0QixRQUFRMkIsVUFBVSxFQUFFO3dCQUNwREYsV0FBVzt3QkFDWFAsVUFBVTs0QkFDTixXQUFXLEdBQUksSUFBR3JCLFlBQVlrQixHQUFHLEVBQUViLFVBQVUwQixRQUFRLEVBQUU7Z0NBQ25EQyxTQUFTcEI7NEJBQ2I7NEJBQ0EsV0FBVyxHQUFJLElBQUdaLFlBQVlrQixHQUFHLEVBQUUsVUFBVTtnQ0FDekNHLFVBQXdCLFdBQUgsR0FBSSxJQUFHckIsWUFBWWtCLEdBQUcsRUFBRSxLQUFLO29DQUM5Q1csSUFBSTtvQ0FDSlIsVUFBd0IsV0FBSCxHQUFJLElBQUdyQixZQUFZa0IsR0FBRyxFQUFFLFNBQVM7d0NBQ2xERyxVQUFVO29DQUNkO2dDQUNKOzRCQUNKO3lCQUNIO29CQUNMO2lCQUNIO1lBQ0w7UUFDSjtJQUNKO0FBQ0o7R0F4Q01oQztLQUFBQTtBQXlDTixNQUFNQyxTQUFTLENBQUMsR0FBR2dCLGNBQWNTLElBQUksRUFBRVI7QUFFdkMsSUFBSSxDQUFDLE9BQU9yQixRQUFROEIsT0FBTyxLQUFLLGNBQWUsT0FBTzlCLFFBQVE4QixPQUFPLEtBQUssWUFBWTlCLFFBQVE4QixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU85QixRQUFROEIsT0FBTyxDQUFDaUIsVUFBVSxLQUFLLGFBQWE7SUFDcktqRCxPQUFPQyxjQUFjLENBQUNDLFFBQVE4QixPQUFPLEVBQUUsY0FBYztRQUFFN0IsT0FBTztJQUFLO0lBQ25FSCxPQUFPa0QsTUFBTSxDQUFDaEQsUUFBUThCLE9BQU8sRUFBRTlCO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVE4QixPQUFPO0FBQ2xDLEVBRUEsMkNBQTJDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1Jvb3RMYXlvdXRFcnJvci5qcz9mYjg0Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUm9vdExheW91dEVycm9yOiBudWxsLFxuICAgIHN0eWxlczogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBSb290TGF5b3V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUm9vdExheW91dEVycm9yO1xuICAgIH0sXG4gICAgc3R5bGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfRGlhbG9nID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvRGlhbG9nXCIpO1xuY29uc3QgX092ZXJsYXkgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9PdmVybGF5XCIpO1xuY29uc3QgX1Rlcm1pbmFsID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvVGVybWluYWxcIik7XG5jb25zdCBfbm9vcHRlbXBsYXRlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZVwiKTtcbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgICBjb25zdCBkYXRhID0gX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlLl8oW1xuICAgICAgICBcIlxcbiAgLm5leHRqcy1jb250YWluZXItcm9vdC1sYXlvdXQtZXJyb3ItaGVhZGVyID4gaDQge1xcbiAgICBsaW5lLWhlaWdodDogMS41O1xcbiAgICBtYXJnaW46IDA7XFxuICAgIHBhZGRpbmc6IDA7XFxuICB9XFxuXFxuICAubmV4dGpzLWNvbnRhaW5lci1yb290LWxheW91dC1lcnJvci1ib2R5IGZvb3RlciB7XFxuICAgIG1hcmdpbi10b3A6IHZhcigtLXNpemUtZ2FwKTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLXJvb3QtbGF5b3V0LWVycm9yLWJvZHkgZm9vdGVyIHAge1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuXFxuICAubmV4dGpzLWNvbnRhaW5lci1yb290LWxheW91dC1lcnJvci1ib2R5IHNtYWxsIHtcXG4gICAgY29sb3I6ICM3NTc1NzU7XFxuICB9XFxuXCJcbiAgICBdKTtcbiAgICBfdGVtcGxhdGVPYmplY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcbiAgICByZXR1cm4gZGF0YTtcbn1cbmNvbnN0IFJvb3RMYXlvdXRFcnJvciA9IGZ1bmN0aW9uIEJ1aWxkRXJyb3IocGFyYW0pIHtcbiAgICBsZXQgeyBtaXNzaW5nVGFncyB9ID0gcGFyYW07XG4gICAgY29uc3QgbWVzc2FnZSA9IFwiUGxlYXNlIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgdGFncyBpbiB5b3VyIHJvb3QgbGF5b3V0OiA8aHRtbD4sIDxib2R5Pi5cXG5cXG5cIiArIChcIk1pc3NpbmcgcmVxdWlyZWQgcm9vdCBsYXlvdXQgdGFnXCIgKyAobWlzc2luZ1RhZ3MubGVuZ3RoID09PSAxID8gXCJcIiA6IFwic1wiKSArIFwiOiBcIikgKyBtaXNzaW5nVGFncy5qb2luKFwiLCBcIik7XG4gICAgY29uc3Qgbm9vcCA9IF9yZWFjdC5kZWZhdWx0LnVzZUNhbGxiYWNrKCgpPT57fSwgW10pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9PdmVybGF5Lk92ZXJsYXksIHtcbiAgICAgICAgZml4ZWQ6IHRydWUsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9EaWFsb2cuRGlhbG9nLCB7XG4gICAgICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBcIm5leHRqc19fY29udGFpbmVyX3Jvb3RfbGF5b3V0X2Vycm9yX2xhYmVsXCIsXG4gICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogXCJuZXh0anNfX2NvbnRhaW5lcl9yb290X2xheW91dF9lcnJvcl9kZXNjXCIsXG4gICAgICAgICAgICBvbkNsb3NlOiBub29wLFxuICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9EaWFsb2cuRGlhbG9nQ29udGVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0RpYWxvZy5EaWFsb2dIZWFkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJuZXh0anMtY29udGFpbmVyLXJvb3QtbGF5b3V0LWVycm9yLWhlYWRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoNFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwibmV4dGpzX19jb250YWluZXJfcm9vdF9sYXlvdXRfZXJyb3JfbGFiZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJNaXNzaW5nIHJlcXVpcmVkIHRhZ3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9EaWFsb2cuRGlhbG9nQm9keSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIm5leHRqcy1jb250YWluZXItcm9vdC1sYXlvdXQtZXJyb3ItYm9keVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9UZXJtaW5hbC5UZXJtaW5hbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImZvb3RlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJuZXh0anNfX2NvbnRhaW5lcl9yb290X2xheW91dF9lcnJvcl9kZXNjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInNtYWxsXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJUaGlzIGVycm9yIGFuZCBjYW4gb25seSBiZSBkaXNtaXNzZWQgYnkgcHJvdmlkaW5nIGFsbCByZXF1aXJlZCB0YWdzLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9KTtcbn07XG5jb25zdCBzdHlsZXMgPSAoMCwgX25vb3B0ZW1wbGF0ZS5ub29wKShfdGVtcGxhdGVPYmplY3QoKSk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJvb3RMYXlvdXRFcnJvci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJSb290TGF5b3V0RXJyb3IiLCJzdHlsZXMiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX0RpYWxvZyIsIl9PdmVybGF5IiwiX1Rlcm1pbmFsIiwiX25vb3B0ZW1wbGF0ZSIsIl90ZW1wbGF0ZU9iamVjdCIsImRhdGEiLCJCdWlsZEVycm9yIiwicGFyYW0iLCJtaXNzaW5nVGFncyIsIm1lc3NhZ2UiLCJsZW5ndGgiLCJqb2luIiwibm9vcCIsImRlZmF1bHQiLCJ1c2VDYWxsYmFjayIsImpzeCIsIk92ZXJsYXkiLCJmaXhlZCIsImNoaWxkcmVuIiwiRGlhbG9nIiwidHlwZSIsIm9uQ2xvc2UiLCJqc3hzIiwiRGlhbG9nQ29udGVudCIsIkRpYWxvZ0hlYWRlciIsImNsYXNzTmFtZSIsImlkIiwiRGlhbG9nQm9keSIsIlRlcm1pbmFsIiwiY29udGVudCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RootLayoutError.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js": +/*!**********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js ***! + \**********************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CallStackFrame\", ({\n enumerable: true,\n get: function() {\n return CallStackFrame;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _stackframe = __webpack_require__(/*! ../../helpers/stack-frame */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\");\nconst _useopenineditor = __webpack_require__(/*! ../../helpers/use-open-in-editor */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\");\nconst CallStackFrame = function CallStackFrame(param) {\n let { frame } = param;\n var _frame_originalStackFrame;\n // TODO: ability to expand resolved frames\n // TODO: render error or external indicator\n const f = (_frame_originalStackFrame = frame.originalStackFrame) != null ? _frame_originalStackFrame : frame.sourceStackFrame;\n const hasSource = Boolean(frame.originalCodeFrame);\n const open = (0, _useopenineditor.useOpenInEditor)(hasSource ? {\n file: f.file,\n lineNumber: f.lineNumber,\n column: f.column\n } : undefined);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-call-stack-frame\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h3\", {\n \"data-nextjs-frame-expanded\": Boolean(frame.expanded),\n children: f.methodName\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-has-source\": hasSource ? \"true\" : undefined,\n tabIndex: hasSource ? 10 : undefined,\n role: hasSource ? \"link\" : undefined,\n onClick: open,\n title: hasSource ? \"Click to open in your editor\" : undefined,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n children: (0, _stackframe.getFrameSource)(f)\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n })\n ]\n })\n ]\n })\n ]\n });\n};\n_c = CallStackFrame;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CallStackFrame.js.map\nvar _c;\n$RefreshReg$(_c, \"CallStackFrame\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1J1bnRpbWVFcnJvci9DYWxsU3RhY2tGcmFtZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsa0RBQWlEO0lBQzdDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxnSUFBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsbUZBQU87QUFDdkUsTUFBTUksY0FBY0osbUJBQU9BLENBQUMsbUpBQTJCO0FBQ3ZELE1BQU1LLG1CQUFtQkwsbUJBQU9BLENBQUMsaUtBQWtDO0FBQ25FLE1BQU1GLGlCQUFpQixTQUFTQSxlQUFlUSxLQUFLO0lBQ2hELElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdEO0lBQ2hCLElBQUlFO0lBQ0osMENBQTBDO0lBQzFDLDJDQUEyQztJQUMzQyxNQUFNQyxJQUFJLENBQUNELDRCQUE0QkQsTUFBTUcsa0JBQWtCLEtBQUssT0FBT0YsNEJBQTRCRCxNQUFNSSxnQkFBZ0I7SUFDN0gsTUFBTUMsWUFBWUMsUUFBUU4sTUFBTU8saUJBQWlCO0lBQ2pELE1BQU1DLE9BQU8sQ0FBQyxHQUFHVixpQkFBaUJXLGVBQWUsRUFBRUosWUFBWTtRQUMzREssTUFBTVIsRUFBRVEsSUFBSTtRQUNaQyxZQUFZVCxFQUFFUyxVQUFVO1FBQ3hCQyxRQUFRVixFQUFFVSxNQUFNO0lBQ3BCLElBQUlDO0lBQ0osT0FBcUIsV0FBSCxHQUFJLElBQUduQixZQUFZb0IsSUFBSSxFQUFFLE9BQU87UUFDOUMsZ0NBQWdDO1FBQ2hDQyxVQUFVO1lBQ04sV0FBVyxHQUFJLElBQUdyQixZQUFZc0IsR0FBRyxFQUFFLE1BQU07Z0JBQ3JDLDhCQUE4QlYsUUFBUU4sTUFBTWlCLFFBQVE7Z0JBQ3BERixVQUFVYixFQUFFZ0IsVUFBVTtZQUMxQjtZQUNBLFdBQVcsR0FBSSxJQUFHeEIsWUFBWW9CLElBQUksRUFBRSxPQUFPO2dCQUN2QyxtQkFBbUJULFlBQVksU0FBU1E7Z0JBQ3hDTSxVQUFVZCxZQUFZLEtBQUtRO2dCQUMzQk8sTUFBTWYsWUFBWSxTQUFTUTtnQkFDM0JRLFNBQVNiO2dCQUNUYyxPQUFPakIsWUFBWSxpQ0FBaUNRO2dCQUNwREUsVUFBVTtvQkFDTixXQUFXLEdBQUksSUFBR3JCLFlBQVlzQixHQUFHLEVBQUUsUUFBUTt3QkFDdkNELFVBQVUsQ0FBQyxHQUFHbEIsWUFBWTBCLGNBQWMsRUFBRXJCO29CQUM5QztvQkFDQSxXQUFXLEdBQUksSUFBR1IsWUFBWW9CLElBQUksRUFBRSxPQUFPO3dCQUN2Q1UsT0FBTzt3QkFDUEMsU0FBUzt3QkFDVEMsTUFBTTt3QkFDTkMsUUFBUTt3QkFDUkMsYUFBYTt3QkFDYkMsZUFBZTt3QkFDZkMsZ0JBQWdCO3dCQUNoQmYsVUFBVTs0QkFDTixXQUFXLEdBQUksSUFBR3JCLFlBQVlzQixHQUFHLEVBQUUsUUFBUTtnQ0FDdkNlLEdBQUc7NEJBQ1A7NEJBQ0EsV0FBVyxHQUFJLElBQUdyQyxZQUFZc0IsR0FBRyxFQUFFLFlBQVk7Z0NBQzNDZ0IsUUFBUTs0QkFDWjs0QkFDQSxXQUFXLEdBQUksSUFBR3RDLFlBQVlzQixHQUFHLEVBQUUsUUFBUTtnQ0FDdkNpQixJQUFJO2dDQUNKQyxJQUFJO2dDQUNKQyxJQUFJO2dDQUNKQyxJQUFJOzRCQUNSO3lCQUNIO29CQUNMO2lCQUNIO1lBQ0w7U0FDSDtJQUNMO0FBQ0o7S0F4RE03QztBQTBETixJQUFJLENBQUMsT0FBT0osUUFBUWtELE9BQU8sS0FBSyxjQUFlLE9BQU9sRCxRQUFRa0QsT0FBTyxLQUFLLFlBQVlsRCxRQUFRa0QsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPbEQsUUFBUWtELE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktyRCxPQUFPQyxjQUFjLENBQUNDLFFBQVFrRCxPQUFPLEVBQUUsY0FBYztRQUFFakQsT0FBTztJQUFLO0lBQ25FSCxPQUFPc0QsTUFBTSxDQUFDcEQsUUFBUWtELE9BQU8sRUFBRWxEO0lBQy9CcUQsT0FBT3JELE9BQU8sR0FBR0EsUUFBUWtELE9BQU87QUFDbEMsRUFFQSwwQ0FBMEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb250YWluZXIvUnVudGltZUVycm9yL0NhbGxTdGFja0ZyYW1lLmpzPzcxYjciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDYWxsU3RhY2tGcmFtZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQ2FsbFN0YWNrRnJhbWU7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfc3RhY2tmcmFtZSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL3N0YWNrLWZyYW1lXCIpO1xuY29uc3QgX3VzZW9wZW5pbmVkaXRvciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL3VzZS1vcGVuLWluLWVkaXRvclwiKTtcbmNvbnN0IENhbGxTdGFja0ZyYW1lID0gZnVuY3Rpb24gQ2FsbFN0YWNrRnJhbWUocGFyYW0pIHtcbiAgICBsZXQgeyBmcmFtZSB9ID0gcGFyYW07XG4gICAgdmFyIF9mcmFtZV9vcmlnaW5hbFN0YWNrRnJhbWU7XG4gICAgLy8gVE9ETzogYWJpbGl0eSB0byBleHBhbmQgcmVzb2x2ZWQgZnJhbWVzXG4gICAgLy8gVE9ETzogcmVuZGVyIGVycm9yIG9yIGV4dGVybmFsIGluZGljYXRvclxuICAgIGNvbnN0IGYgPSAoX2ZyYW1lX29yaWdpbmFsU3RhY2tGcmFtZSA9IGZyYW1lLm9yaWdpbmFsU3RhY2tGcmFtZSkgIT0gbnVsbCA/IF9mcmFtZV9vcmlnaW5hbFN0YWNrRnJhbWUgOiBmcmFtZS5zb3VyY2VTdGFja0ZyYW1lO1xuICAgIGNvbnN0IGhhc1NvdXJjZSA9IEJvb2xlYW4oZnJhbWUub3JpZ2luYWxDb2RlRnJhbWUpO1xuICAgIGNvbnN0IG9wZW4gPSAoMCwgX3VzZW9wZW5pbmVkaXRvci51c2VPcGVuSW5FZGl0b3IpKGhhc1NvdXJjZSA/IHtcbiAgICAgICAgZmlsZTogZi5maWxlLFxuICAgICAgICBsaW5lTnVtYmVyOiBmLmxpbmVOdW1iZXIsXG4gICAgICAgIGNvbHVtbjogZi5jb2x1bW5cbiAgICB9IDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkaXZcIiwge1xuICAgICAgICBcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVcIjogdHJ1ZSxcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoM1wiLCB7XG4gICAgICAgICAgICAgICAgXCJkYXRhLW5leHRqcy1mcmFtZS1leHBhbmRlZFwiOiBCb29sZWFuKGZyYW1lLmV4cGFuZGVkKSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogZi5tZXRob2ROYW1lXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICBcImRhdGEtaGFzLXNvdXJjZVwiOiBoYXNTb3VyY2UgPyBcInRydWVcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0YWJJbmRleDogaGFzU291cmNlID8gMTAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcm9sZTogaGFzU291cmNlID8gXCJsaW5rXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgb25DbGljazogb3BlbixcbiAgICAgICAgICAgICAgICB0aXRsZTogaGFzU291cmNlID8gXCJDbGljayB0byBvcGVuIGluIHlvdXIgZWRpdG9yXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46ICgwLCBfc3RhY2tmcmFtZS5nZXRGcmFtZVNvdXJjZSkoZilcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwb2x5bGluZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50czogXCIxNSAzIDIxIDMgMjEgOVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImxpbmVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTogXCIxMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MTogXCIxNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogXCIyMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MjogXCIzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNhbGxTdGFja0ZyYW1lLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJDYWxsU3RhY2tGcmFtZSIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfc3RhY2tmcmFtZSIsIl91c2VvcGVuaW5lZGl0b3IiLCJwYXJhbSIsImZyYW1lIiwiX2ZyYW1lX29yaWdpbmFsU3RhY2tGcmFtZSIsImYiLCJvcmlnaW5hbFN0YWNrRnJhbWUiLCJzb3VyY2VTdGFja0ZyYW1lIiwiaGFzU291cmNlIiwiQm9vbGVhbiIsIm9yaWdpbmFsQ29kZUZyYW1lIiwib3BlbiIsInVzZU9wZW5JbkVkaXRvciIsImZpbGUiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwidW5kZWZpbmVkIiwianN4cyIsImNoaWxkcmVuIiwianN4IiwiZXhwYW5kZWQiLCJtZXRob2ROYW1lIiwidGFiSW5kZXgiLCJyb2xlIiwib25DbGljayIsInRpdGxlIiwiZ2V0RnJhbWVTb3VyY2UiLCJ4bWxucyIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJkIiwicG9pbnRzIiwieDEiLCJ5MSIsIngyIiwieTIiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/ComponentStackFrameRow.js": +/*!******************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/ComponentStackFrameRow.js ***! + \******************************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ComponentStackFrameRow\", ({\n enumerable: true,\n get: function() {\n return ComponentStackFrameRow;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _useopenineditor = __webpack_require__(/*! ../../helpers/use-open-in-editor */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\");\nfunction EditorLink(param) {\n let { children, componentStackFrame: { file, column, lineNumber } } = param;\n const open = (0, _useopenineditor.useOpenInEditor)({\n file,\n column,\n lineNumber\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n tabIndex: 10,\n role: \"link\",\n onClick: open,\n title: \"Click to open in your editor\",\n children: [\n children,\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"polyline\", {\n points: \"15 3 21 3 21 9\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"line\", {\n x1: \"10\",\n y1: \"14\",\n x2: \"21\",\n y2: \"3\"\n })\n ]\n })\n ]\n });\n}\n_c = EditorLink;\nfunction formatLineNumber(lineNumber, column) {\n if (!column) {\n return lineNumber;\n }\n return lineNumber + \":\" + column;\n}\nfunction LocationLine(param) {\n let { componentStackFrame } = param;\n const { file, lineNumber, column } = componentStackFrame;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n file,\n \" \",\n lineNumber ? \"(\" + formatLineNumber(lineNumber, column) + \")\" : \"\"\n ]\n });\n}\n_c1 = LocationLine;\nfunction SourceLocation(param) {\n let { componentStackFrame } = param;\n const { file, canOpenInEditor } = componentStackFrame;\n if (file && canOpenInEditor) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(EditorLink, {\n componentStackFrame: componentStackFrame,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"span\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(LocationLine, {\n componentStackFrame: componentStackFrame\n })\n })\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(LocationLine, {\n componentStackFrame: componentStackFrame\n })\n });\n}\n_c2 = SourceLocation;\nfunction ComponentStackFrameRow(param) {\n let { componentStackFrame } = param;\n const { component } = componentStackFrame;\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n \"data-nextjs-component-stack-frame\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h3\", {\n children: component\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(SourceLocation, {\n componentStackFrame: componentStackFrame\n })\n ]\n });\n}\n_c3 = ComponentStackFrameRow;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ComponentStackFrameRow.js.map\nvar _c, _c1, _c2, _c3;\n$RefreshReg$(_c, \"EditorLink\");\n$RefreshReg$(_c1, \"LocationLine\");\n$RefreshReg$(_c2, \"SourceLocation\");\n$RefreshReg$(_c3, \"ComponentStackFrameRow\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1J1bnRpbWVFcnJvci9Db21wb25lbnRTdGFja0ZyYW1lUm93LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwwREFBeUQ7SUFDckRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGdJQUF5QztBQUNsRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyxtRkFBTztBQUN2RSxNQUFNSSxtQkFBbUJKLG1CQUFPQSxDQUFDLGlLQUFrQztBQUNuRSxTQUFTSyxXQUFXQyxLQUFLO0lBQ3JCLElBQUksRUFBRUMsUUFBUSxFQUFFQyxxQkFBcUIsRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLFVBQVUsRUFBRSxFQUFFLEdBQUdMO0lBQ3RFLE1BQU1NLE9BQU8sQ0FBQyxHQUFHUixpQkFBaUJTLGVBQWUsRUFBRTtRQUMvQ0o7UUFDQUM7UUFDQUM7SUFDSjtJQUNBLE9BQXFCLFdBQUgsR0FBSSxJQUFHVixZQUFZYSxJQUFJLEVBQUUsT0FBTztRQUM5Q0MsVUFBVTtRQUNWQyxNQUFNO1FBQ05DLFNBQVNMO1FBQ1RNLE9BQU87UUFDUFgsVUFBVTtZQUNOQTtZQUNBLFdBQVcsR0FBSSxJQUFHTixZQUFZYSxJQUFJLEVBQUUsT0FBTztnQkFDdkNLLE9BQU87Z0JBQ1BDLFNBQVM7Z0JBQ1RDLE1BQU07Z0JBQ05DLFFBQVE7Z0JBQ1JDLGFBQWE7Z0JBQ2JDLGVBQWU7Z0JBQ2ZDLGdCQUFnQjtnQkFDaEJsQixVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHTixZQUFZeUIsR0FBRyxFQUFFLFFBQVE7d0JBQ3ZDQyxHQUFHO29CQUNQO29CQUNBLFdBQVcsR0FBSSxJQUFHMUIsWUFBWXlCLEdBQUcsRUFBRSxZQUFZO3dCQUMzQ0UsUUFBUTtvQkFDWjtvQkFDQSxXQUFXLEdBQUksSUFBRzNCLFlBQVl5QixHQUFHLEVBQUUsUUFBUTt3QkFDdkNHLElBQUk7d0JBQ0pDLElBQUk7d0JBQ0pDLElBQUk7d0JBQ0pDLElBQUk7b0JBQ1I7aUJBQ0g7WUFDTDtTQUNIO0lBQ0w7QUFDSjtLQXZDUzNCO0FBd0NULFNBQVM0QixpQkFBaUJ0QixVQUFVLEVBQUVELE1BQU07SUFDeEMsSUFBSSxDQUFDQSxRQUFRO1FBQ1QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BLGFBQWEsTUFBTUQ7QUFDOUI7QUFDQSxTQUFTd0IsYUFBYTVCLEtBQUs7SUFDdkIsSUFBSSxFQUFFRSxtQkFBbUIsRUFBRSxHQUFHRjtJQUM5QixNQUFNLEVBQUVHLElBQUksRUFBRUUsVUFBVSxFQUFFRCxNQUFNLEVBQUUsR0FBR0Y7SUFDckMsT0FBcUIsV0FBSCxHQUFJLElBQUdQLFlBQVlhLElBQUksRUFBRWIsWUFBWWtDLFFBQVEsRUFBRTtRQUM3RDVCLFVBQVU7WUFDTkU7WUFDQTtZQUNBRSxhQUFhLE1BQU1zQixpQkFBaUJ0QixZQUFZRCxVQUFVLE1BQU07U0FDbkU7SUFDTDtBQUNKO01BVlN3QjtBQVdULFNBQVNFLGVBQWU5QixLQUFLO0lBQ3pCLElBQUksRUFBRUUsbUJBQW1CLEVBQUUsR0FBR0Y7SUFDOUIsTUFBTSxFQUFFRyxJQUFJLEVBQUU0QixlQUFlLEVBQUUsR0FBRzdCO0lBQ2xDLElBQUlDLFFBQVE0QixpQkFBaUI7UUFDekIsT0FBcUIsV0FBSCxHQUFJLElBQUdwQyxZQUFZeUIsR0FBRyxFQUFFckIsWUFBWTtZQUNsREcscUJBQXFCQTtZQUNyQkQsVUFBd0IsV0FBSCxHQUFJLElBQUdOLFlBQVl5QixHQUFHLEVBQUUsUUFBUTtnQkFDakRuQixVQUF3QixXQUFILEdBQUksSUFBR04sWUFBWXlCLEdBQUcsRUFBRVEsY0FBYztvQkFDdkQxQixxQkFBcUJBO2dCQUN6QjtZQUNKO1FBQ0o7SUFDSjtJQUNBLE9BQXFCLFdBQUgsR0FBSSxJQUFHUCxZQUFZeUIsR0FBRyxFQUFFLE9BQU87UUFDN0NuQixVQUF3QixXQUFILEdBQUksSUFBR04sWUFBWXlCLEdBQUcsRUFBRVEsY0FBYztZQUN2RDFCLHFCQUFxQkE7UUFDekI7SUFDSjtBQUNKO01BbEJTNEI7QUFtQlQsU0FBU3RDLHVCQUF1QlEsS0FBSztJQUNqQyxJQUFJLEVBQUVFLG1CQUFtQixFQUFFLEdBQUdGO0lBQzlCLE1BQU0sRUFBRWdDLFNBQVMsRUFBRSxHQUFHOUI7SUFDdEIsT0FBcUIsV0FBSCxHQUFJLElBQUdQLFlBQVlhLElBQUksRUFBRSxPQUFPO1FBQzlDLHFDQUFxQztRQUNyQ1AsVUFBVTtZQUNOLFdBQVcsR0FBSSxJQUFHTixZQUFZeUIsR0FBRyxFQUFFLE1BQU07Z0JBQ3JDbkIsVUFBVStCO1lBQ2Q7WUFDQSxXQUFXLEdBQUksSUFBR3JDLFlBQVl5QixHQUFHLEVBQUVVLGdCQUFnQjtnQkFDL0M1QixxQkFBcUJBO1lBQ3pCO1NBQ0g7SUFDTDtBQUNKO01BZFNWO0FBZ0JULElBQUksQ0FBQyxPQUFPSixRQUFRNkMsT0FBTyxLQUFLLGNBQWUsT0FBTzdDLFFBQVE2QyxPQUFPLEtBQUssWUFBWTdDLFFBQVE2QyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU83QyxRQUFRNkMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2hELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTZDLE9BQU8sRUFBRSxjQUFjO1FBQUU1QyxPQUFPO0lBQUs7SUFDbkVILE9BQU9pRCxNQUFNLENBQUMvQyxRQUFRNkMsT0FBTyxFQUFFN0M7SUFDL0JnRCxPQUFPaEQsT0FBTyxHQUFHQSxRQUFRNkMsT0FBTztBQUNsQyxFQUVBLGtEQUFrRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2NvbnRhaW5lci9SdW50aW1lRXJyb3IvQ29tcG9uZW50U3RhY2tGcmFtZVJvdy5qcz82ODg4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29tcG9uZW50U3RhY2tGcmFtZVJvd1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQ29tcG9uZW50U3RhY2tGcmFtZVJvdztcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF91c2VvcGVuaW5lZGl0b3IgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy91c2Utb3Blbi1pbi1lZGl0b3JcIik7XG5mdW5jdGlvbiBFZGl0b3JMaW5rKHBhcmFtKSB7XG4gICAgbGV0IHsgY2hpbGRyZW4sIGNvbXBvbmVudFN0YWNrRnJhbWU6IHsgZmlsZSwgY29sdW1uLCBsaW5lTnVtYmVyIH0gfSA9IHBhcmFtO1xuICAgIGNvbnN0IG9wZW4gPSAoMCwgX3VzZW9wZW5pbmVkaXRvci51c2VPcGVuSW5FZGl0b3IpKHtcbiAgICAgICAgZmlsZSxcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBsaW5lTnVtYmVyXG4gICAgfSk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiZGl2XCIsIHtcbiAgICAgICAgdGFiSW5kZXg6IDEwLFxuICAgICAgICByb2xlOiBcImxpbmtcIixcbiAgICAgICAgb25DbGljazogb3BlbixcbiAgICAgICAgdGl0bGU6IFwiQ2xpY2sgdG8gb3BlbiBpbiB5b3VyIGVkaXRvclwiLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInN2Z1wiLCB7XG4gICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNMTggMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNlwiXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicG9seWxpbmVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBcIjE1IDMgMjEgMyAyMSA5XCJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJsaW5lXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHgxOiBcIjEwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MTogXCIxNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDI6IFwiMjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBcIjNcIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZvcm1hdExpbmVOdW1iZXIobGluZU51bWJlciwgY29sdW1uKSB7XG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGxpbmVOdW1iZXI7XG4gICAgfVxuICAgIHJldHVybiBsaW5lTnVtYmVyICsgXCI6XCIgKyBjb2x1bW47XG59XG5mdW5jdGlvbiBMb2NhdGlvbkxpbmUocGFyYW0pIHtcbiAgICBsZXQgeyBjb21wb25lbnRTdGFja0ZyYW1lIH0gPSBwYXJhbTtcbiAgICBjb25zdCB7IGZpbGUsIGxpbmVOdW1iZXIsIGNvbHVtbiB9ID0gY29tcG9uZW50U3RhY2tGcmFtZTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICBcIiBcIixcbiAgICAgICAgICAgIGxpbmVOdW1iZXIgPyBcIihcIiArIGZvcm1hdExpbmVOdW1iZXIobGluZU51bWJlciwgY29sdW1uKSArIFwiKVwiIDogXCJcIlxuICAgICAgICBdXG4gICAgfSk7XG59XG5mdW5jdGlvbiBTb3VyY2VMb2NhdGlvbihwYXJhbSkge1xuICAgIGxldCB7IGNvbXBvbmVudFN0YWNrRnJhbWUgfSA9IHBhcmFtO1xuICAgIGNvbnN0IHsgZmlsZSwgY2FuT3BlbkluRWRpdG9yIH0gPSBjb21wb25lbnRTdGFja0ZyYW1lO1xuICAgIGlmIChmaWxlICYmIGNhbk9wZW5JbkVkaXRvcikge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShFZGl0b3JMaW5rLCB7XG4gICAgICAgICAgICBjb21wb25lbnRTdGFja0ZyYW1lOiBjb21wb25lbnRTdGFja0ZyYW1lLFxuICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShMb2NhdGlvbkxpbmUsIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U3RhY2tGcmFtZTogY29tcG9uZW50U3RhY2tGcmFtZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJkaXZcIiwge1xuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShMb2NhdGlvbkxpbmUsIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrRnJhbWU6IGNvbXBvbmVudFN0YWNrRnJhbWVcbiAgICAgICAgfSlcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIENvbXBvbmVudFN0YWNrRnJhbWVSb3cocGFyYW0pIHtcbiAgICBsZXQgeyBjb21wb25lbnRTdGFja0ZyYW1lIH0gPSBwYXJhbTtcbiAgICBjb25zdCB7IGNvbXBvbmVudCB9ID0gY29tcG9uZW50U3RhY2tGcmFtZTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkaXZcIiwge1xuICAgICAgICBcImRhdGEtbmV4dGpzLWNvbXBvbmVudC1zdGFjay1mcmFtZVwiOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImgzXCIsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY29tcG9uZW50XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoU291cmNlTG9jYXRpb24sIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRTdGFja0ZyYW1lOiBjb21wb25lbnRTdGFja0ZyYW1lXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbXBvbmVudFN0YWNrRnJhbWVSb3cuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkNvbXBvbmVudFN0YWNrRnJhbWVSb3ciLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX3VzZW9wZW5pbmVkaXRvciIsIkVkaXRvckxpbmsiLCJwYXJhbSIsImNoaWxkcmVuIiwiY29tcG9uZW50U3RhY2tGcmFtZSIsImZpbGUiLCJjb2x1bW4iLCJsaW5lTnVtYmVyIiwib3BlbiIsInVzZU9wZW5JbkVkaXRvciIsImpzeHMiLCJ0YWJJbmRleCIsInJvbGUiLCJvbkNsaWNrIiwidGl0bGUiLCJ4bWxucyIsInZpZXdCb3giLCJmaWxsIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJqc3giLCJkIiwicG9pbnRzIiwieDEiLCJ5MSIsIngyIiwieTIiLCJmb3JtYXRMaW5lTnVtYmVyIiwiTG9jYXRpb25MaW5lIiwiRnJhZ21lbnQiLCJTb3VyY2VMb2NhdGlvbiIsImNhbk9wZW5JbkVkaXRvciIsImNvbXBvbmVudCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/ComponentStackFrameRow.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/FrameworkIcon.js": +/*!*********************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/FrameworkIcon.js ***! + \*********************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"FrameworkIcon\", ({\n enumerable: true,\n get: function() {\n return FrameworkIcon;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nfunction FrameworkIcon(param) {\n let { framework } = param;\n if (framework === \"react\") {\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n \"data-nextjs-call-stack-framework-icon\": \"react\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 410 369\",\n fill: \"none\",\n shapeRendering: \"geometricPrecision\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"5\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M204.995 224.552C226.56 224.552 244.042 207.07 244.042 185.506C244.042 163.941 226.56 146.459 204.995 146.459C183.43 146.459 165.948 163.941 165.948 185.506C165.948 207.07 183.43 224.552 204.995 224.552Z\",\n fill: \"currentColor\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M409.99 184.505C409.99 153.707 381.437 126.667 335.996 108.925C343.342 60.6535 334.19 22.3878 307.492 6.98883C283.649 -6.77511 250.631 -0.0395641 214.512 25.9753C211.316 28.2692 208.143 30.7097 204.97 33.2477C201.822 30.7097 198.65 28.2692 195.477 25.9753C159.359 -0.0395641 126.34 -6.79951 102.497 6.98883C75.8237 22.3878 66.6721 60.6291 74.0422 108.852C28.5529 126.618 0 153.682 0 184.505C0 215.303 28.5528 242.342 73.9934 260.084C66.6477 308.356 75.7993 346.621 102.497 362.02C110.575 366.682 119.727 369 129.684 369C149.085 369 171.61 360.215 195.477 343.034C198.674 340.74 201.847 338.3 205.019 335.762C208.167 338.3 211.34 340.74 214.512 343.034C238.38 360.239 260.905 369 280.306 369C290.263 369 299.415 366.682 307.492 362.02C331.335 348.256 342 316.287 337.534 271.993C337.143 268.089 336.631 264.135 335.996 260.109C381.461 242.367 409.99 215.327 409.99 184.505ZM225.934 41.8136C246.238 27.1955 265.127 19.5814 280.306 19.5814C286.871 19.5814 292.728 20.9968 297.731 23.8765C315.204 33.9798 322.672 62.9475 317.327 102.433C299.756 97.0401 280.306 92.9158 259.392 90.2802C246.872 73.8074 233.597 58.9453 220.003 46.2551C221.98 44.7421 223.957 43.229 225.934 41.8136ZM112.259 23.8765C117.262 20.9968 123.119 19.5814 129.684 19.5814C144.863 19.5814 163.752 27.1711 184.056 41.8136C186.033 43.229 188.01 44.7176 189.986 46.2551C176.393 58.9453 163.142 73.783 150.622 90.2558C129.732 92.8914 110.258 97.0401 92.687 102.409C87.3424 62.9475 94.7857 33.9798 112.259 23.8765ZM19.5233 184.505C19.5233 164.322 40.9014 143.359 77.776 128.253C81.9003 146.141 88.0502 165.054 96.1768 184.456C88.0014 203.881 81.8515 222.819 77.7272 240.732C40.9014 225.626 19.5233 204.687 19.5233 184.505ZM184.056 327.196C154.966 348.134 128.805 354.675 112.259 345.133C94.7857 335.029 87.3181 306.062 92.6626 266.576C110.234 271.969 129.684 276.093 150.598 278.729C163.117 295.202 176.393 310.064 189.986 322.754C188.01 324.292 186.033 325.78 184.056 327.196ZM204.995 310.04C180.591 287.685 157.138 257.815 137.347 223.551C132.051 214.4 121.344 191.396 117 182.489C113.535 190.786 110.112 198.398 107.427 206.5C109.623 210.575 118.092 229.213 120.434 233.288C125.071 241.317 129.928 249.127 134.931 256.692C120.898 254.227 107.915 251.055 96.1035 247.321C102.815 217.011 116.213 182.064 137.347 145.458C142.545 136.453 153.838 116.346 159.5 108C150.568 109.147 143.395 108.767 135 110.5C132.56 114.453 122.777 131.645 120.434 135.721C115.749 143.823 111.454 151.925 107.427 159.978C102.546 146.581 98.8124 133.744 96.1524 121.64C125.755 112.293 162.727 106.411 204.995 106.411C215.562 106.411 237.63 106.197 247.49 106.905C242.048 99.7544 237.38 93.2819 231.694 86.888C227.082 86.7416 209.705 86.888 204.995 86.888C195.672 86.888 186.545 87.2053 177.589 87.7422C186.472 77.1752 195.672 67.5111 204.995 58.9697C229.375 81.3239 252.851 111.195 272.643 145.458C277.841 154.463 289.073 175.426 293.49 184.505C296.98 176.207 300.281 168.64 302.99 160.489C300.793 156.389 291.898 139.747 289.555 135.696C284.918 127.667 280.062 119.858 275.059 112.317C289.092 114.782 302.075 117.954 313.886 121.688C307.175 151.998 293.777 186.945 272.643 223.551C267.445 232.556 252.651 253.178 246.99 261.524C255.922 260.377 265.595 258.663 273.99 256.93C276.43 252.976 287.212 237.364 289.555 233.288C294.216 225.235 298.512 217.182 302.489 209.153C307.224 222.185 310.982 234.997 313.715 247.394C284.138 256.741 247.214 262.598 204.995 262.598C194.428 262.598 169.859 261.208 160 260.5C165.442 267.65 171.304 275.095 176.99 281.489C181.602 281.635 200.285 282.121 204.995 282.121C214.317 282.121 223.444 281.804 232.401 281.267C223.493 291.834 214.317 301.498 204.995 310.04ZM297.731 345.133C281.185 354.699 254.999 348.159 225.934 327.196C223.957 325.78 221.98 324.292 220.003 322.754C233.597 310.064 246.848 295.226 259.367 278.753C280.233 276.118 299.659 271.993 317.205 266.625C317.547 269.089 317.888 271.554 318.132 273.97C321.72 309.649 314.277 335.566 297.731 345.133ZM332.262 240.756C328.065 222.599 321.842 203.686 313.813 184.578C321.988 165.152 328.138 146.215 332.262 128.302C369.088 143.408 390.466 164.322 390.466 184.505C390.466 204.687 369.113 225.626 332.262 240.756Z\",\n fill: \"currentColor\"\n })\n ]\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n \"data-nextjs-call-stack-framework-icon\": \"next\",\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"20\",\n height: \"20\",\n viewBox: \"0 0 180 180\",\n fill: \"none\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"mask\", {\n id: \"mask0_408_139\",\n maskUnits: \"userSpaceOnUse\",\n x: \"0\",\n y: \"0\",\n width: \"180\",\n height: \"180\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"circle\", {\n cx: \"90\",\n cy: \"90\",\n r: \"90\",\n fill: \"black\"\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"g\", {\n mask: \"url(#mask0_408_139)\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"circle\", {\n cx: \"90\",\n cy: \"90\",\n r: \"87\",\n fill: \"black\",\n stroke: \"white\",\n strokeWidth: \"6\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M149.508 157.52L69.142 54H54V125.97H66.1136V69.3836L139.999 164.845C143.333 162.614 146.509 160.165 149.508 157.52Z\",\n fill: \"url(#paint0_linear_408_139)\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"rect\", {\n x: \"115\",\n y: \"54\",\n width: \"12\",\n height: \"72\",\n fill: \"url(#paint1_linear_408_139)\"\n })\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"defs\", {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"linearGradient\", {\n id: \"paint0_linear_408_139\",\n x1: \"109\",\n y1: \"116.5\",\n x2: \"144.5\",\n y2: \"160.5\",\n gradientUnits: \"userSpaceOnUse\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n stopColor: \"white\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n offset: \"1\",\n stopColor: \"white\",\n stopOpacity: \"0\"\n })\n ]\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"linearGradient\", {\n id: \"paint1_linear_408_139\",\n x1: \"121\",\n y1: \"54\",\n x2: \"120.799\",\n y2: \"106.875\",\n gradientUnits: \"userSpaceOnUse\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n stopColor: \"white\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"stop\", {\n offset: \"1\",\n stopColor: \"white\",\n stopOpacity: \"0\"\n })\n ]\n })\n ]\n })\n ]\n });\n}\n_c = FrameworkIcon;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=FrameworkIcon.js.map\nvar _c;\n$RefreshReg$(_c, \"FrameworkIcon\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1J1bnRpbWVFcnJvci9GcmFtZXdvcmtJY29uLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxpREFBZ0Q7SUFDNUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLGdJQUF5QztBQUNsRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyxtRkFBTztBQUN2RSxTQUFTRixjQUFjTSxLQUFLO0lBQ3hCLElBQUksRUFBRUMsU0FBUyxFQUFFLEdBQUdEO0lBQ3BCLElBQUlDLGNBQWMsU0FBUztRQUN2QixPQUFxQixXQUFILEdBQUksSUFBR0osWUFBWUssSUFBSSxFQUFFLE9BQU87WUFDOUMseUNBQXlDO1lBQ3pDQyxPQUFPO1lBQ1BDLE9BQU87WUFDUEMsUUFBUTtZQUNSQyxTQUFTO1lBQ1RDLE1BQU07WUFDTkMsZ0JBQWdCO1lBQ2hCQyxRQUFRO1lBQ1JDLGVBQWU7WUFDZkMsZ0JBQWdCO1lBQ2hCQyxhQUFhO1lBQ2JDLFVBQVU7Z0JBQ04sV0FBVyxHQUFJLElBQUdoQixZQUFZaUIsR0FBRyxFQUFFLFFBQVE7b0JBQ3ZDQyxHQUFHO29CQUNIUixNQUFNO2dCQUNWO2dCQUNBLFdBQVcsR0FBSSxJQUFHVixZQUFZaUIsR0FBRyxFQUFFLFFBQVE7b0JBQ3ZDQyxHQUFHO29CQUNIUixNQUFNO2dCQUNWO2FBQ0g7UUFDTDtJQUNKO0lBQ0EsT0FBcUIsV0FBSCxHQUFJLElBQUdWLFlBQVlLLElBQUksRUFBRSxPQUFPO1FBQzlDLHlDQUF5QztRQUN6Q0MsT0FBTztRQUNQQyxPQUFPO1FBQ1BDLFFBQVE7UUFDUkMsU0FBUztRQUNUQyxNQUFNO1FBQ05NLFVBQVU7WUFDTixXQUFXLEdBQUksSUFBR2hCLFlBQVlpQixHQUFHLEVBQUUsUUFBUTtnQkFDdkNFLElBQUk7Z0JBQ0pDLFdBQVc7Z0JBQ1hDLEdBQUc7Z0JBQ0hDLEdBQUc7Z0JBQ0hmLE9BQU87Z0JBQ1BDLFFBQVE7Z0JBQ1JRLFVBQXdCLFdBQUgsR0FBSSxJQUFHaEIsWUFBWWlCLEdBQUcsRUFBRSxVQUFVO29CQUNuRE0sSUFBSTtvQkFDSkMsSUFBSTtvQkFDSkMsR0FBRztvQkFDSGYsTUFBTTtnQkFDVjtZQUNKO1lBQ0EsV0FBVyxHQUFJLElBQUdWLFlBQVlLLElBQUksRUFBRSxLQUFLO2dCQUNyQ3FCLE1BQU07Z0JBQ05WLFVBQVU7b0JBQ04sV0FBVyxHQUFJLElBQUdoQixZQUFZaUIsR0FBRyxFQUFFLFVBQVU7d0JBQ3pDTSxJQUFJO3dCQUNKQyxJQUFJO3dCQUNKQyxHQUFHO3dCQUNIZixNQUFNO3dCQUNORSxRQUFRO3dCQUNSRyxhQUFhO29CQUNqQjtvQkFDQSxXQUFXLEdBQUksSUFBR2YsWUFBWWlCLEdBQUcsRUFBRSxRQUFRO3dCQUN2Q0MsR0FBRzt3QkFDSFIsTUFBTTtvQkFDVjtvQkFDQSxXQUFXLEdBQUksSUFBR1YsWUFBWWlCLEdBQUcsRUFBRSxRQUFRO3dCQUN2Q0ksR0FBRzt3QkFDSEMsR0FBRzt3QkFDSGYsT0FBTzt3QkFDUEMsUUFBUTt3QkFDUkUsTUFBTTtvQkFDVjtpQkFDSDtZQUNMO1lBQ0EsV0FBVyxHQUFJLElBQUdWLFlBQVlLLElBQUksRUFBRSxRQUFRO2dCQUN4Q1csVUFBVTtvQkFDTixXQUFXLEdBQUksSUFBR2hCLFlBQVlLLElBQUksRUFBRSxrQkFBa0I7d0JBQ2xEYyxJQUFJO3dCQUNKUSxJQUFJO3dCQUNKQyxJQUFJO3dCQUNKQyxJQUFJO3dCQUNKQyxJQUFJO3dCQUNKQyxlQUFlO3dCQUNmZixVQUFVOzRCQUNOLFdBQVcsR0FBSSxJQUFHaEIsWUFBWWlCLEdBQUcsRUFBRSxRQUFRO2dDQUN2Q2UsV0FBVzs0QkFDZjs0QkFDQSxXQUFXLEdBQUksSUFBR2hDLFlBQVlpQixHQUFHLEVBQUUsUUFBUTtnQ0FDdkNnQixRQUFRO2dDQUNSRCxXQUFXO2dDQUNYRSxhQUFhOzRCQUNqQjt5QkFDSDtvQkFDTDtvQkFDQSxXQUFXLEdBQUksSUFBR2xDLFlBQVlLLElBQUksRUFBRSxrQkFBa0I7d0JBQ2xEYyxJQUFJO3dCQUNKUSxJQUFJO3dCQUNKQyxJQUFJO3dCQUNKQyxJQUFJO3dCQUNKQyxJQUFJO3dCQUNKQyxlQUFlO3dCQUNmZixVQUFVOzRCQUNOLFdBQVcsR0FBSSxJQUFHaEIsWUFBWWlCLEdBQUcsRUFBRSxRQUFRO2dDQUN2Q2UsV0FBVzs0QkFDZjs0QkFDQSxXQUFXLEdBQUksSUFBR2hDLFlBQVlpQixHQUFHLEVBQUUsUUFBUTtnQ0FDdkNnQixRQUFRO2dDQUNSRCxXQUFXO2dDQUNYRSxhQUFhOzRCQUNqQjt5QkFDSDtvQkFDTDtpQkFDSDtZQUNMO1NBQ0g7SUFDTDtBQUNKO0tBbkhTckM7QUFxSFQsSUFBSSxDQUFDLE9BQU9KLFFBQVEwQyxPQUFPLEtBQUssY0FBZSxPQUFPMUMsUUFBUTBDLE9BQU8sS0FBSyxZQUFZMUMsUUFBUTBDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzFDLFFBQVEwQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLN0MsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMEMsT0FBTyxFQUFFLGNBQWM7UUFBRXpDLE9BQU87SUFBSztJQUNuRUgsT0FBTzhDLE1BQU0sQ0FBQzVDLFFBQVEwQyxPQUFPLEVBQUUxQztJQUMvQjZDLE9BQU83QyxPQUFPLEdBQUdBLFFBQVEwQyxPQUFPO0FBQ2xDLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1J1bnRpbWVFcnJvci9GcmFtZXdvcmtJY29uLmpzP2I4M2MiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGcmFtZXdvcmtJY29uXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBGcmFtZXdvcmtJY29uO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuZnVuY3Rpb24gRnJhbWV3b3JrSWNvbihwYXJhbSkge1xuICAgIGxldCB7IGZyYW1ld29yayB9ID0gcGFyYW07XG4gICAgaWYgKGZyYW1ld29yayA9PT0gXCJyZWFjdFwiKSB7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInN2Z1wiLCB7XG4gICAgICAgICAgICBcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWV3b3JrLWljb25cIjogXCJyZWFjdFwiLFxuICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMjBcIixcbiAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDQxMCAzNjlcIixcbiAgICAgICAgICAgIGZpbGw6IFwibm9uZVwiLFxuICAgICAgICAgICAgc2hhcGVSZW5kZXJpbmc6IFwiZ2VvbWV0cmljUHJlY2lzaW9uXCIsXG4gICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgICAgICAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IFwiNVwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IFwiTTIwNC45OTUgMjI0LjU1MkMyMjYuNTYgMjI0LjU1MiAyNDQuMDQyIDIwNy4wNyAyNDQuMDQyIDE4NS41MDZDMjQ0LjA0MiAxNjMuOTQxIDIyNi41NiAxNDYuNDU5IDIwNC45OTUgMTQ2LjQ1OUMxODMuNDMgMTQ2LjQ1OSAxNjUuOTQ4IDE2My45NDEgMTY1Ljk0OCAxODUuNTA2QzE2NS45NDggMjA3LjA3IDE4My40MyAyMjQuNTUyIDIwNC45OTUgMjI0LjU1MlpcIixcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZDogXCJNNDA5Ljk5IDE4NC41MDVDNDA5Ljk5IDE1My43MDcgMzgxLjQzNyAxMjYuNjY3IDMzNS45OTYgMTA4LjkyNUMzNDMuMzQyIDYwLjY1MzUgMzM0LjE5IDIyLjM4NzggMzA3LjQ5MiA2Ljk4ODgzQzI4My42NDkgLTYuNzc1MTEgMjUwLjYzMSAtMC4wMzk1NjQxIDIxNC41MTIgMjUuOTc1M0MyMTEuMzE2IDI4LjI2OTIgMjA4LjE0MyAzMC43MDk3IDIwNC45NyAzMy4yNDc3QzIwMS44MjIgMzAuNzA5NyAxOTguNjUgMjguMjY5MiAxOTUuNDc3IDI1Ljk3NTNDMTU5LjM1OSAtMC4wMzk1NjQxIDEyNi4zNCAtNi43OTk1MSAxMDIuNDk3IDYuOTg4ODNDNzUuODIzNyAyMi4zODc4IDY2LjY3MjEgNjAuNjI5MSA3NC4wNDIyIDEwOC44NTJDMjguNTUyOSAxMjYuNjE4IDAgMTUzLjY4MiAwIDE4NC41MDVDMCAyMTUuMzAzIDI4LjU1MjggMjQyLjM0MiA3My45OTM0IDI2MC4wODRDNjYuNjQ3NyAzMDguMzU2IDc1Ljc5OTMgMzQ2LjYyMSAxMDIuNDk3IDM2Mi4wMkMxMTAuNTc1IDM2Ni42ODIgMTE5LjcyNyAzNjkgMTI5LjY4NCAzNjlDMTQ5LjA4NSAzNjkgMTcxLjYxIDM2MC4yMTUgMTk1LjQ3NyAzNDMuMDM0QzE5OC42NzQgMzQwLjc0IDIwMS44NDcgMzM4LjMgMjA1LjAxOSAzMzUuNzYyQzIwOC4xNjcgMzM4LjMgMjExLjM0IDM0MC43NCAyMTQuNTEyIDM0My4wMzRDMjM4LjM4IDM2MC4yMzkgMjYwLjkwNSAzNjkgMjgwLjMwNiAzNjlDMjkwLjI2MyAzNjkgMjk5LjQxNSAzNjYuNjgyIDMwNy40OTIgMzYyLjAyQzMzMS4zMzUgMzQ4LjI1NiAzNDIgMzE2LjI4NyAzMzcuNTM0IDI3MS45OTNDMzM3LjE0MyAyNjguMDg5IDMzNi42MzEgMjY0LjEzNSAzMzUuOTk2IDI2MC4xMDlDMzgxLjQ2MSAyNDIuMzY3IDQwOS45OSAyMTUuMzI3IDQwOS45OSAxODQuNTA1Wk0yMjUuOTM0IDQxLjgxMzZDMjQ2LjIzOCAyNy4xOTU1IDI2NS4xMjcgMTkuNTgxNCAyODAuMzA2IDE5LjU4MTRDMjg2Ljg3MSAxOS41ODE0IDI5Mi43MjggMjAuOTk2OCAyOTcuNzMxIDIzLjg3NjVDMzE1LjIwNCAzMy45Nzk4IDMyMi42NzIgNjIuOTQ3NSAzMTcuMzI3IDEwMi40MzNDMjk5Ljc1NiA5Ny4wNDAxIDI4MC4zMDYgOTIuOTE1OCAyNTkuMzkyIDkwLjI4MDJDMjQ2Ljg3MiA3My44MDc0IDIzMy41OTcgNTguOTQ1MyAyMjAuMDAzIDQ2LjI1NTFDMjIxLjk4IDQ0Ljc0MjEgMjIzLjk1NyA0My4yMjkgMjI1LjkzNCA0MS44MTM2Wk0xMTIuMjU5IDIzLjg3NjVDMTE3LjI2MiAyMC45OTY4IDEyMy4xMTkgMTkuNTgxNCAxMjkuNjg0IDE5LjU4MTRDMTQ0Ljg2MyAxOS41ODE0IDE2My43NTIgMjcuMTcxMSAxODQuMDU2IDQxLjgxMzZDMTg2LjAzMyA0My4yMjkgMTg4LjAxIDQ0LjcxNzYgMTg5Ljk4NiA0Ni4yNTUxQzE3Ni4zOTMgNTguOTQ1MyAxNjMuMTQyIDczLjc4MyAxNTAuNjIyIDkwLjI1NThDMTI5LjczMiA5Mi44OTE0IDExMC4yNTggOTcuMDQwMSA5Mi42ODcgMTAyLjQwOUM4Ny4zNDI0IDYyLjk0NzUgOTQuNzg1NyAzMy45Nzk4IDExMi4yNTkgMjMuODc2NVpNMTkuNTIzMyAxODQuNTA1QzE5LjUyMzMgMTY0LjMyMiA0MC45MDE0IDE0My4zNTkgNzcuNzc2IDEyOC4yNTNDODEuOTAwMyAxNDYuMTQxIDg4LjA1MDIgMTY1LjA1NCA5Ni4xNzY4IDE4NC40NTZDODguMDAxNCAyMDMuODgxIDgxLjg1MTUgMjIyLjgxOSA3Ny43MjcyIDI0MC43MzJDNDAuOTAxNCAyMjUuNjI2IDE5LjUyMzMgMjA0LjY4NyAxOS41MjMzIDE4NC41MDVaTTE4NC4wNTYgMzI3LjE5NkMxNTQuOTY2IDM0OC4xMzQgMTI4LjgwNSAzNTQuNjc1IDExMi4yNTkgMzQ1LjEzM0M5NC43ODU3IDMzNS4wMjkgODcuMzE4MSAzMDYuMDYyIDkyLjY2MjYgMjY2LjU3NkMxMTAuMjM0IDI3MS45NjkgMTI5LjY4NCAyNzYuMDkzIDE1MC41OTggMjc4LjcyOUMxNjMuMTE3IDI5NS4yMDIgMTc2LjM5MyAzMTAuMDY0IDE4OS45ODYgMzIyLjc1NEMxODguMDEgMzI0LjI5MiAxODYuMDMzIDMyNS43OCAxODQuMDU2IDMyNy4xOTZaTTIwNC45OTUgMzEwLjA0QzE4MC41OTEgMjg3LjY4NSAxNTcuMTM4IDI1Ny44MTUgMTM3LjM0NyAyMjMuNTUxQzEzMi4wNTEgMjE0LjQgMTIxLjM0NCAxOTEuMzk2IDExNyAxODIuNDg5QzExMy41MzUgMTkwLjc4NiAxMTAuMTEyIDE5OC4zOTggMTA3LjQyNyAyMDYuNUMxMDkuNjIzIDIxMC41NzUgMTE4LjA5MiAyMjkuMjEzIDEyMC40MzQgMjMzLjI4OEMxMjUuMDcxIDI0MS4zMTcgMTI5LjkyOCAyNDkuMTI3IDEzNC45MzEgMjU2LjY5MkMxMjAuODk4IDI1NC4yMjcgMTA3LjkxNSAyNTEuMDU1IDk2LjEwMzUgMjQ3LjMyMUMxMDIuODE1IDIxNy4wMTEgMTE2LjIxMyAxODIuMDY0IDEzNy4zNDcgMTQ1LjQ1OEMxNDIuNTQ1IDEzNi40NTMgMTUzLjgzOCAxMTYuMzQ2IDE1OS41IDEwOEMxNTAuNTY4IDEwOS4xNDcgMTQzLjM5NSAxMDguNzY3IDEzNSAxMTAuNUMxMzIuNTYgMTE0LjQ1MyAxMjIuNzc3IDEzMS42NDUgMTIwLjQzNCAxMzUuNzIxQzExNS43NDkgMTQzLjgyMyAxMTEuNDU0IDE1MS45MjUgMTA3LjQyNyAxNTkuOTc4QzEwMi41NDYgMTQ2LjU4MSA5OC44MTI0IDEzMy43NDQgOTYuMTUyNCAxMjEuNjRDMTI1Ljc1NSAxMTIuMjkzIDE2Mi43MjcgMTA2LjQxMSAyMDQuOTk1IDEwNi40MTFDMjE1LjU2MiAxMDYuNDExIDIzNy42MyAxMDYuMTk3IDI0Ny40OSAxMDYuOTA1QzI0Mi4wNDggOTkuNzU0NCAyMzcuMzggOTMuMjgxOSAyMzEuNjk0IDg2Ljg4OEMyMjcuMDgyIDg2Ljc0MTYgMjA5LjcwNSA4Ni44ODggMjA0Ljk5NSA4Ni44ODhDMTk1LjY3MiA4Ni44ODggMTg2LjU0NSA4Ny4yMDUzIDE3Ny41ODkgODcuNzQyMkMxODYuNDcyIDc3LjE3NTIgMTk1LjY3MiA2Ny41MTExIDIwNC45OTUgNTguOTY5N0MyMjkuMzc1IDgxLjMyMzkgMjUyLjg1MSAxMTEuMTk1IDI3Mi42NDMgMTQ1LjQ1OEMyNzcuODQxIDE1NC40NjMgMjg5LjA3MyAxNzUuNDI2IDI5My40OSAxODQuNTA1QzI5Ni45OCAxNzYuMjA3IDMwMC4yODEgMTY4LjY0IDMwMi45OSAxNjAuNDg5QzMwMC43OTMgMTU2LjM4OSAyOTEuODk4IDEzOS43NDcgMjg5LjU1NSAxMzUuNjk2QzI4NC45MTggMTI3LjY2NyAyODAuMDYyIDExOS44NTggMjc1LjA1OSAxMTIuMzE3QzI4OS4wOTIgMTE0Ljc4MiAzMDIuMDc1IDExNy45NTQgMzEzLjg4NiAxMjEuNjg4QzMwNy4xNzUgMTUxLjk5OCAyOTMuNzc3IDE4Ni45NDUgMjcyLjY0MyAyMjMuNTUxQzI2Ny40NDUgMjMyLjU1NiAyNTIuNjUxIDI1My4xNzggMjQ2Ljk5IDI2MS41MjRDMjU1LjkyMiAyNjAuMzc3IDI2NS41OTUgMjU4LjY2MyAyNzMuOTkgMjU2LjkzQzI3Ni40MyAyNTIuOTc2IDI4Ny4yMTIgMjM3LjM2NCAyODkuNTU1IDIzMy4yODhDMjk0LjIxNiAyMjUuMjM1IDI5OC41MTIgMjE3LjE4MiAzMDIuNDg5IDIwOS4xNTNDMzA3LjIyNCAyMjIuMTg1IDMxMC45ODIgMjM0Ljk5NyAzMTMuNzE1IDI0Ny4zOTRDMjg0LjEzOCAyNTYuNzQxIDI0Ny4yMTQgMjYyLjU5OCAyMDQuOTk1IDI2Mi41OThDMTk0LjQyOCAyNjIuNTk4IDE2OS44NTkgMjYxLjIwOCAxNjAgMjYwLjVDMTY1LjQ0MiAyNjcuNjUgMTcxLjMwNCAyNzUuMDk1IDE3Ni45OSAyODEuNDg5QzE4MS42MDIgMjgxLjYzNSAyMDAuMjg1IDI4Mi4xMjEgMjA0Ljk5NSAyODIuMTIxQzIxNC4zMTcgMjgyLjEyMSAyMjMuNDQ0IDI4MS44MDQgMjMyLjQwMSAyODEuMjY3QzIyMy40OTMgMjkxLjgzNCAyMTQuMzE3IDMwMS40OTggMjA0Ljk5NSAzMTAuMDRaTTI5Ny43MzEgMzQ1LjEzM0MyODEuMTg1IDM1NC42OTkgMjU0Ljk5OSAzNDguMTU5IDIyNS45MzQgMzI3LjE5NkMyMjMuOTU3IDMyNS43OCAyMjEuOTggMzI0LjI5MiAyMjAuMDAzIDMyMi43NTRDMjMzLjU5NyAzMTAuMDY0IDI0Ni44NDggMjk1LjIyNiAyNTkuMzY3IDI3OC43NTNDMjgwLjIzMyAyNzYuMTE4IDI5OS42NTkgMjcxLjk5MyAzMTcuMjA1IDI2Ni42MjVDMzE3LjU0NyAyNjkuMDg5IDMxNy44ODggMjcxLjU1NCAzMTguMTMyIDI3My45N0MzMjEuNzIgMzA5LjY0OSAzMTQuMjc3IDMzNS41NjYgMjk3LjczMSAzNDUuMTMzWk0zMzIuMjYyIDI0MC43NTZDMzI4LjA2NSAyMjIuNTk5IDMyMS44NDIgMjAzLjY4NiAzMTMuODEzIDE4NC41NzhDMzIxLjk4OCAxNjUuMTUyIDMyOC4xMzggMTQ2LjIxNSAzMzIuMjYyIDEyOC4zMDJDMzY5LjA4OCAxNDMuNDA4IDM5MC40NjYgMTY0LjMyMiAzOTAuNDY2IDE4NC41MDVDMzkwLjQ2NiAyMDQuNjg3IDM2OS4xMTMgMjI1LjYyNiAzMzIuMjYyIDI0MC43NTZaXCIsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwic3ZnXCIsIHtcbiAgICAgICAgXCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1ld29yay1pY29uXCI6IFwibmV4dFwiLFxuICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICB3aWR0aDogXCIyMFwiLFxuICAgICAgICBoZWlnaHQ6IFwiMjBcIixcbiAgICAgICAgdmlld0JveDogXCIwIDAgMTgwIDE4MFwiLFxuICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJtYXNrXCIsIHtcbiAgICAgICAgICAgICAgICBpZDogXCJtYXNrMF80MDhfMTM5XCIsXG4gICAgICAgICAgICAgICAgbWFza1VuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICAgICAgeDogXCIwXCIsXG4gICAgICAgICAgICAgICAgeTogXCIwXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IFwiMTgwXCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjE4MFwiLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiY2lyY2xlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgY3g6IFwiOTBcIixcbiAgICAgICAgICAgICAgICAgICAgY3k6IFwiOTBcIixcbiAgICAgICAgICAgICAgICAgICAgcjogXCI5MFwiLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBcImJsYWNrXCJcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImdcIiwge1xuICAgICAgICAgICAgICAgIG1hc2s6IFwidXJsKCNtYXNrMF80MDhfMTM5KVwiLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJjaXJjbGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3g6IFwiOTBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGN5OiBcIjkwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByOiBcIjg3XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcImJsYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwid2hpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBcIjZcIlxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNMTQ5LjUwOCAxNTcuNTJMNjkuMTQyIDU0SDU0VjEyNS45N0g2Ni4xMTM2VjY5LjM4MzZMMTM5Ljk5OSAxNjQuODQ1QzE0My4zMzMgMTYyLjYxNCAxNDYuNTA5IDE2MC4xNjUgMTQ5LjUwOCAxNTcuNTJaXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcInVybCgjcGFpbnQwX2xpbmVhcl80MDhfMTM5KVwiXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicmVjdFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBcIjExNVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogXCI1NFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCI3MlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJ1cmwoI3BhaW50MV9saW5lYXJfNDA4XzEzOSlcIlxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkZWZzXCIsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInBhaW50MF9saW5lYXJfNDA4XzEzOVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDE6IFwiMTA5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MTogXCIxMTYuNVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDI6IFwiMTQ0LjVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBcIjE2MC41XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBncmFkaWVudFVuaXRzOiBcInVzZXJTcGFjZU9uVXNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzdG9wXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcENvbG9yOiBcIndoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3RvcFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BDb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wT3BhY2l0eTogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJwYWludDFfbGluZWFyXzQwOF8xMzlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHgxOiBcIjEyMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTE6IFwiNTRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHgyOiBcIjEyMC43OTlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBcIjEwNi44NzVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50VW5pdHM6IFwidXNlclNwYWNlT25Vc2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInN0b3BcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wQ29sb3I6IFwid2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzdG9wXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcENvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BPcGFjaXR5OiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1GcmFtZXdvcmtJY29uLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJGcmFtZXdvcmtJY29uIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsInBhcmFtIiwiZnJhbWV3b3JrIiwianN4cyIsInhtbG5zIiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZmlsbCIsInNoYXBlUmVuZGVyaW5nIiwic3Ryb2tlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJjaGlsZHJlbiIsImpzeCIsImQiLCJpZCIsIm1hc2tVbml0cyIsIngiLCJ5IiwiY3giLCJjeSIsInIiLCJtYXNrIiwieDEiLCJ5MSIsIngyIiwieTIiLCJncmFkaWVudFVuaXRzIiwic3RvcENvbG9yIiwib2Zmc2V0Iiwic3RvcE9wYWNpdHkiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/FrameworkIcon.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js": +/*!**************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js ***! + \**************************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"GroupedStackFrames\", ({\n enumerable: true,\n get: function() {\n return GroupedStackFrames;\n }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _CallStackFrame = __webpack_require__(/*! ./CallStackFrame */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js\");\nconst _FrameworkIcon = __webpack_require__(/*! ./FrameworkIcon */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/FrameworkIcon.js\");\nfunction FrameworkGroup(param) {\n let { framework, stackFrames, all } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"details\", {\n \"data-nextjs-collapsed-call-stack-details\": true,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"summary\", {\n tabIndex: 10,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"svg\", {\n \"data-nextjs-call-stack-chevron-icon\": true,\n fill: \"none\",\n height: \"20\",\n width: \"20\",\n shapeRendering: \"geometricPrecision\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n viewBox: \"0 0 24 24\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M9 18l6-6-6-6\"\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_FrameworkIcon.FrameworkIcon, {\n framework: framework\n }),\n framework === \"react\" ? \"React\" : \"Next.js\"\n ]\n }),\n stackFrames.map((frame, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_CallStackFrame.CallStackFrame, {\n frame: frame\n }, \"call-stack-\" + index + \"-\" + all))\n ]\n })\n });\n}\n_c = FrameworkGroup;\nfunction GroupedStackFrames(param) {\n let { groupedStackFrames, all } = param;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: groupedStackFrames.map((stackFramesGroup, groupIndex)=>{\n // Collapse React and Next.js frames\n if (stackFramesGroup.framework) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(FrameworkGroup, {\n framework: stackFramesGroup.framework,\n stackFrames: stackFramesGroup.stackFrames,\n all: all\n }, \"call-stack-framework-group-\" + groupIndex + \"-\" + all);\n }\n return stackFramesGroup.stackFrames.map((frame, frameIndex)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_CallStackFrame.CallStackFrame, {\n frame: frame\n }, \"call-stack-\" + groupIndex + \"-\" + frameIndex + \"-\" + all));\n })\n });\n}\n_c1 = GroupedStackFrames;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=GroupedStackFrames.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"FrameworkGroup\");\n$RefreshReg$(_c1, \"GroupedStackFrames\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1J1bnRpbWVFcnJvci9Hcm91cGVkU3RhY2tGcmFtZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGNBQWNDLG1CQUFPQSxDQUFDLHFHQUFtQjtBQUMvQyxNQUFNQyxrQkFBa0JELG1CQUFPQSxDQUFDLDRKQUFrQjtBQUNsRCxNQUFNRSxpQkFBaUJGLG1CQUFPQSxDQUFDLDBKQUFpQjtBQUNoRCxTQUFTRyxlQUFlQyxLQUFLO0lBQ3pCLElBQUksRUFBRUMsU0FBUyxFQUFFQyxXQUFXLEVBQUVDLEdBQUcsRUFBRSxHQUFHSDtJQUN0QyxPQUFxQixXQUFILEdBQUksSUFBR0wsWUFBWVMsR0FBRyxFQUFFVCxZQUFZVSxRQUFRLEVBQUU7UUFDNURDLFVBQXdCLFdBQUgsR0FBSSxJQUFHWCxZQUFZWSxJQUFJLEVBQUUsV0FBVztZQUNyRCw0Q0FBNEM7WUFDNUNELFVBQVU7Z0JBQ04sV0FBVyxHQUFJLElBQUdYLFlBQVlZLElBQUksRUFBRSxXQUFXO29CQUMzQ0MsVUFBVTtvQkFDVkYsVUFBVTt3QkFDTixXQUFXLEdBQUksSUFBR1gsWUFBWVMsR0FBRyxFQUFFLE9BQU87NEJBQ3RDLHVDQUF1Qzs0QkFDdkNLLE1BQU07NEJBQ05DLFFBQVE7NEJBQ1JDLE9BQU87NEJBQ1BDLGdCQUFnQjs0QkFDaEJDLFFBQVE7NEJBQ1JDLGVBQWU7NEJBQ2ZDLGdCQUFnQjs0QkFDaEJDLGFBQWE7NEJBQ2JDLFNBQVM7NEJBQ1RYLFVBQXdCLFdBQUgsR0FBSSxJQUFHWCxZQUFZUyxHQUFHLEVBQUUsUUFBUTtnQ0FDakRjLEdBQUc7NEJBQ1A7d0JBQ0o7d0JBQ0EsV0FBVyxHQUFJLElBQUd2QixZQUFZUyxHQUFHLEVBQUVOLGVBQWVxQixhQUFhLEVBQUU7NEJBQzdEbEIsV0FBV0E7d0JBQ2Y7d0JBQ0FBLGNBQWMsVUFBVSxVQUFVO3FCQUNyQztnQkFDTDtnQkFDQUMsWUFBWWtCLEdBQUcsQ0FBQyxDQUFDQyxPQUFPQyxRQUFzQixXQUFILEdBQUksSUFBRzNCLFlBQVlTLEdBQUcsRUFBRVAsZ0JBQWdCMEIsY0FBYyxFQUFFO3dCQUMzRkYsT0FBT0E7b0JBQ1gsR0FBRyxnQkFBZ0JDLFFBQVEsTUFBTW5CO2FBQ3hDO1FBQ0w7SUFDSjtBQUNKO0tBcENTSjtBQXFDVCxTQUFTTCxtQkFBbUJNLEtBQUs7SUFDN0IsSUFBSSxFQUFFd0Isa0JBQWtCLEVBQUVyQixHQUFHLEVBQUUsR0FBR0g7SUFDbEMsT0FBcUIsV0FBSCxHQUFJLElBQUdMLFlBQVlTLEdBQUcsRUFBRVQsWUFBWVUsUUFBUSxFQUFFO1FBQzVEQyxVQUFVa0IsbUJBQW1CSixHQUFHLENBQUMsQ0FBQ0ssa0JBQWtCQztZQUNoRCxvQ0FBb0M7WUFDcEMsSUFBSUQsaUJBQWlCeEIsU0FBUyxFQUFFO2dCQUM1QixPQUFxQixXQUFILEdBQUksSUFBR04sWUFBWVMsR0FBRyxFQUFFTCxnQkFBZ0I7b0JBQ3RERSxXQUFXd0IsaUJBQWlCeEIsU0FBUztvQkFDckNDLGFBQWF1QixpQkFBaUJ2QixXQUFXO29CQUN6Q0MsS0FBS0E7Z0JBQ1QsR0FBRyxnQ0FBZ0N1QixhQUFhLE1BQU12QjtZQUMxRDtZQUNBLE9BQ0FzQixpQkFBaUJ2QixXQUFXLENBQUNrQixHQUFHLENBQUMsQ0FBQ0MsT0FBT00sYUFBMkIsV0FBSCxHQUFJLElBQUdoQyxZQUFZUyxHQUFHLEVBQUVQLGdCQUFnQjBCLGNBQWMsRUFBRTtvQkFDakhGLE9BQU9BO2dCQUNYLEdBQUcsZ0JBQWdCSyxhQUFhLE1BQU1DLGFBQWEsTUFBTXhCO1FBQ2pFO0lBQ0o7QUFDSjtNQWxCU1Q7QUFvQlQsSUFBSSxDQUFDLE9BQU9KLFFBQVFzQyxPQUFPLEtBQUssY0FBZSxPQUFPdEMsUUFBUXNDLE9BQU8sS0FBSyxZQUFZdEMsUUFBUXNDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3RDLFFBQVFzQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLekMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRc0MsT0FBTyxFQUFFLGNBQWM7UUFBRXJDLE9BQU87SUFBSztJQUNuRUgsT0FBTzBDLE1BQU0sQ0FBQ3hDLFFBQVFzQyxPQUFPLEVBQUV0QztJQUMvQnlDLE9BQU96QyxPQUFPLEdBQUdBLFFBQVFzQyxPQUFPO0FBQ2xDLEVBRUEsOENBQThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1J1bnRpbWVFcnJvci9Hcm91cGVkU3RhY2tGcmFtZXMuanM/OWE5OCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdyb3VwZWRTdGFja0ZyYW1lc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gR3JvdXBlZFN0YWNrRnJhbWVzO1xuICAgIH1cbn0pO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfQ2FsbFN0YWNrRnJhbWUgPSByZXF1aXJlKFwiLi9DYWxsU3RhY2tGcmFtZVwiKTtcbmNvbnN0IF9GcmFtZXdvcmtJY29uID0gcmVxdWlyZShcIi4vRnJhbWV3b3JrSWNvblwiKTtcbmZ1bmN0aW9uIEZyYW1ld29ya0dyb3VwKHBhcmFtKSB7XG4gICAgbGV0IHsgZnJhbWV3b3JrLCBzdGFja0ZyYW1lcywgYWxsIH0gPSBwYXJhbTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJkZXRhaWxzXCIsIHtcbiAgICAgICAgICAgIFwiZGF0YS1uZXh0anMtY29sbGFwc2VkLWNhbGwtc3RhY2stZGV0YWlsc1wiOiB0cnVlLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInN1bW1hcnlcIiwge1xuICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogMTAsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic3ZnXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stY2hldnJvbi1pY29uXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZVJlbmRlcmluZzogXCJnZW9tZXRyaWNQcmVjaXNpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJNOSAxOGw2LTYtNi02XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9GcmFtZXdvcmtJY29uLkZyYW1ld29ya0ljb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcms6IGZyYW1ld29ya1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmsgPT09IFwicmVhY3RcIiA/IFwiUmVhY3RcIiA6IFwiTmV4dC5qc1wiXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFja0ZyYW1lcy5tYXAoKGZyYW1lLCBpbmRleCk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0NhbGxTdGFja0ZyYW1lLkNhbGxTdGFja0ZyYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZTogZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgfSwgXCJjYWxsLXN0YWNrLVwiICsgaW5kZXggKyBcIi1cIiArIGFsbCkpXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSk7XG59XG5mdW5jdGlvbiBHcm91cGVkU3RhY2tGcmFtZXMocGFyYW0pIHtcbiAgICBsZXQgeyBncm91cGVkU3RhY2tGcmFtZXMsIGFsbCB9ID0gcGFyYW07XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2pzeHJ1bnRpbWUuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IGdyb3VwZWRTdGFja0ZyYW1lcy5tYXAoKHN0YWNrRnJhbWVzR3JvdXAsIGdyb3VwSW5kZXgpPT57XG4gICAgICAgICAgICAvLyBDb2xsYXBzZSBSZWFjdCBhbmQgTmV4dC5qcyBmcmFtZXNcbiAgICAgICAgICAgIGlmIChzdGFja0ZyYW1lc0dyb3VwLmZyYW1ld29yaykge1xuICAgICAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKEZyYW1ld29ya0dyb3VwLCB7XG4gICAgICAgICAgICAgICAgICAgIGZyYW1ld29yazogc3RhY2tGcmFtZXNHcm91cC5mcmFtZXdvcmssXG4gICAgICAgICAgICAgICAgICAgIHN0YWNrRnJhbWVzOiBzdGFja0ZyYW1lc0dyb3VwLnN0YWNrRnJhbWVzLFxuICAgICAgICAgICAgICAgICAgICBhbGw6IGFsbFxuICAgICAgICAgICAgICAgIH0sIFwiY2FsbC1zdGFjay1mcmFtZXdvcmstZ3JvdXAtXCIgKyBncm91cEluZGV4ICsgXCItXCIgKyBhbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuKC8vIERvbid0IGdyb3VwIG5vbiBSZWFjdCBhbmQgTmV4dC5qcyBmcmFtZXNcbiAgICAgICAgICAgIHN0YWNrRnJhbWVzR3JvdXAuc3RhY2tGcmFtZXMubWFwKChmcmFtZSwgZnJhbWVJbmRleCk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0NhbGxTdGFja0ZyYW1lLkNhbGxTdGFja0ZyYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGZyYW1lOiBmcmFtZVxuICAgICAgICAgICAgICAgIH0sIFwiY2FsbC1zdGFjay1cIiArIGdyb3VwSW5kZXggKyBcIi1cIiArIGZyYW1lSW5kZXggKyBcIi1cIiArIGFsbCkpKTtcbiAgICAgICAgfSlcbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9R3JvdXBlZFN0YWNrRnJhbWVzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJHcm91cGVkU3RhY2tGcmFtZXMiLCJfanN4cnVudGltZSIsInJlcXVpcmUiLCJfQ2FsbFN0YWNrRnJhbWUiLCJfRnJhbWV3b3JrSWNvbiIsIkZyYW1ld29ya0dyb3VwIiwicGFyYW0iLCJmcmFtZXdvcmsiLCJzdGFja0ZyYW1lcyIsImFsbCIsImpzeCIsIkZyYWdtZW50IiwiY2hpbGRyZW4iLCJqc3hzIiwidGFiSW5kZXgiLCJmaWxsIiwiaGVpZ2h0Iiwid2lkdGgiLCJzaGFwZVJlbmRlcmluZyIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwidmlld0JveCIsImQiLCJGcmFtZXdvcmtJY29uIiwibWFwIiwiZnJhbWUiLCJpbmRleCIsIkNhbGxTdGFja0ZyYW1lIiwiZ3JvdXBlZFN0YWNrRnJhbWVzIiwic3RhY2tGcmFtZXNHcm91cCIsImdyb3VwSW5kZXgiLCJmcmFtZUluZGV4IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js": +/*!*************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js ***! + \*************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n styles: function() {\n return styles;\n },\n RuntimeError: function() {\n return RuntimeError;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _CodeFrame = __webpack_require__(/*! ../../components/CodeFrame */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js\");\nconst _nooptemplate = __webpack_require__(/*! ../../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nconst _groupstackframesbyframework = __webpack_require__(/*! ../../helpers/group-stack-frames-by-framework */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js\");\nconst _CallStackFrame = __webpack_require__(/*! ./CallStackFrame */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js\");\nconst _GroupedStackFrames = __webpack_require__(/*! ./GroupedStackFrames */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js\");\nconst _ComponentStackFrameRow = __webpack_require__(/*! ./ComponentStackFrameRow */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/ComponentStackFrameRow.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n button[data-nextjs-data-runtime-error-collapsed-action] {\\n background: none;\\n border: none;\\n padding: 0;\\n font-size: var(--size-font-small);\\n line-height: var(--size-font-bigger);\\n color: var(--color-accents-3);\\n }\\n\\n [data-nextjs-call-stack-frame]:not(:last-child),\\n [data-nextjs-component-stack-frame]:not(:last-child) {\\n margin-bottom: var(--size-gap-double);\\n }\\n\\n [data-nextjs-call-stack-frame] > h3,\\n [data-nextjs-component-stack-frame] > h3 {\\n margin-top: 0;\\n margin-bottom: var(--size-gap);\\n font-family: var(--font-stack-monospace);\\n font-size: var(--size-font);\\n color: #222;\\n }\\n [data-nextjs-call-stack-frame] > h3[data-nextjs-frame-expanded='false'] {\\n color: #666;\\n }\\n [data-nextjs-call-stack-frame] > div,\\n [data-nextjs-component-stack-frame] > div {\\n display: flex;\\n align-items: center;\\n padding-left: calc(var(--size-gap) + var(--size-gap-half));\\n font-size: var(--size-font-small);\\n color: #999;\\n }\\n [data-nextjs-call-stack-frame] > div > svg,\\n [data-nextjs-component-stack-frame] > [role='link'] > svg {\\n width: auto;\\n height: var(--size-font-small);\\n margin-left: var(--size-gap);\\n flex-shrink: 0;\\n\\n display: none;\\n }\\n\\n [data-nextjs-call-stack-frame] > div[data-has-source],\\n [data-nextjs-component-stack-frame] > [role='link'] {\\n cursor: pointer;\\n }\\n [data-nextjs-call-stack-frame] > div[data-has-source]:hover,\\n [data-nextjs-component-stack-frame] > [role='link']:hover {\\n text-decoration: underline dotted;\\n }\\n [data-nextjs-call-stack-frame] > div[data-has-source] > svg,\\n [data-nextjs-component-stack-frame] > [role='link'] > svg {\\n display: unset;\\n }\\n\\n [data-nextjs-call-stack-framework-icon] {\\n margin-right: var(--size-gap);\\n }\\n [data-nextjs-call-stack-framework-icon='next'] > mask {\\n mask-type: alpha;\\n }\\n [data-nextjs-call-stack-framework-icon='react'] {\\n color: rgb(20, 158, 202);\\n }\\n [data-nextjs-collapsed-call-stack-details][open]\\n [data-nextjs-call-stack-chevron-icon] {\\n transform: rotate(90deg);\\n }\\n [data-nextjs-collapsed-call-stack-details] summary {\\n display: flex;\\n align-items: center;\\n margin: var(--size-gap-double) 0;\\n list-style: none;\\n }\\n [data-nextjs-collapsed-call-stack-details] summary::-webkit-details-marker {\\n display: none;\\n }\\n\\n [data-nextjs-collapsed-call-stack-details] h3 {\\n color: #666;\\n }\\n [data-nextjs-collapsed-call-stack-details] [data-nextjs-call-stack-frame] {\\n margin-bottom: var(--size-gap-double);\\n }\\n\"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nconst RuntimeError = function RuntimeError(param) {\n _s();\n let { error } = param;\n const firstFirstPartyFrameIndex = _react.useMemo(()=>{\n return error.frames.findIndex((entry)=>entry.expanded && Boolean(entry.originalCodeFrame) && Boolean(entry.originalStackFrame));\n }, [\n error.frames\n ]);\n const firstFrame = _react.useMemo(()=>{\n var _error_frames_firstFirstPartyFrameIndex;\n return (_error_frames_firstFirstPartyFrameIndex = error.frames[firstFirstPartyFrameIndex]) != null ? _error_frames_firstFirstPartyFrameIndex : null;\n }, [\n error.frames,\n firstFirstPartyFrameIndex\n ]);\n const allLeadingFrames = _react.useMemo(()=>firstFirstPartyFrameIndex < 0 ? [] : error.frames.slice(0, firstFirstPartyFrameIndex), [\n error.frames,\n firstFirstPartyFrameIndex\n ]);\n const [all, setAll] = _react.useState(firstFrame == null);\n const toggleAll = _react.useCallback(()=>{\n setAll((v)=>!v);\n }, []);\n const leadingFrames = _react.useMemo(()=>allLeadingFrames.filter((f)=>f.expanded || all), [\n all,\n allLeadingFrames\n ]);\n const allCallStackFrames = _react.useMemo(()=>error.frames.slice(firstFirstPartyFrameIndex + 1), [\n error.frames,\n firstFirstPartyFrameIndex\n ]);\n const visibleCallStackFrames = _react.useMemo(()=>allCallStackFrames.filter((f)=>f.expanded || all), [\n all,\n allCallStackFrames\n ]);\n const canShowMore = _react.useMemo(()=>{\n return allCallStackFrames.length !== visibleCallStackFrames.length || all && firstFrame != null;\n }, [\n all,\n allCallStackFrames.length,\n firstFrame,\n visibleCallStackFrames.length\n ]);\n const stackFramesGroupedByFramework = _react.useMemo(()=>(0, _groupstackframesbyframework.groupStackFramesByFramework)(visibleCallStackFrames), [\n visibleCallStackFrames\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n firstFrame ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n children: \"Source\"\n }),\n leadingFrames.map((frame, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_CallStackFrame.CallStackFrame, {\n frame: frame\n }, \"leading-frame-\" + index + \"-\" + all)),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_CodeFrame.CodeFrame, {\n stackFrame: firstFrame.originalStackFrame,\n codeFrame: firstFrame.originalCodeFrame\n })\n ]\n }) : undefined,\n error.componentStackFrames ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n children: \"Component Stack\"\n }),\n error.componentStackFrames.map((componentStackFrame, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_ComponentStackFrameRow.ComponentStackFrameRow, {\n componentStackFrame: componentStackFrame\n }, index))\n ]\n }) : null,\n stackFramesGroupedByFramework.length ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h2\", {\n children: \"Call Stack\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_GroupedStackFrames.GroupedStackFrames, {\n groupedStackFrames: stackFramesGroupedByFramework,\n all: all\n })\n ]\n }) : undefined,\n canShowMore ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Fragment, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"button\", {\n tabIndex: 10,\n \"data-nextjs-data-runtime-error-collapsed-action\": true,\n type: \"button\",\n onClick: toggleAll,\n children: [\n all ? \"Hide\" : \"Show\",\n \" collapsed frames\"\n ]\n })\n }) : undefined\n ]\n });\n};\n_s(RuntimeError, \"WFPEdU7gcPz7APeSuJfuh3Ceu/U=\");\n_c = RuntimeError;\nconst styles = (0, _nooptemplate.noop)(_templateObject());\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\nvar _c;\n$RefreshReg$(_c, \"RuntimeError\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvY29udGFpbmVyL1J1bnRpbWVFcnJvci9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0FBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxRQUFRO1FBQ0osT0FBT0E7SUFDWDtJQUNBQyxjQUFjO1FBQ1YsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sNEJBQTRCQyxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUMsaUNBQWlDRCxtQkFBT0EsQ0FBQyw0SUFBK0M7QUFDOUYsTUFBTUUsY0FBY0YsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1HLFNBQVMsV0FBVyxHQUFHSiwwQkFBMEJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsbUZBQU87QUFDeEUsTUFBTUssYUFBYUwsbUJBQU9BLENBQUMsMkpBQTRCO0FBQ3ZELE1BQU1NLGdCQUFnQk4sbUJBQU9BLENBQUMsdUpBQTZCO0FBQzNELE1BQU1PLCtCQUErQlAsbUJBQU9BLENBQUMsMkxBQStDO0FBQzVGLE1BQU1RLGtCQUFrQlIsbUJBQU9BLENBQUMsNEpBQWtCO0FBQ2xELE1BQU1TLHNCQUFzQlQsbUJBQU9BLENBQUMsb0tBQXNCO0FBQzFELE1BQU1VLDBCQUEwQlYsbUJBQU9BLENBQUMsNEtBQTBCO0FBQ2xFLFNBQVNXO0lBQ0wsTUFBTUMsT0FBT1gsK0JBQStCRyxDQUFDLENBQUM7UUFDMUM7S0FDSDtJQUNETyxrQkFBa0I7UUFDZCxPQUFPQztJQUNYO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLE1BQU1wQixlQUFlLFNBQVNBLGFBQWFxQixLQUFLOztJQUM1QyxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHRDtJQUNoQixNQUFNRSw0QkFBNEJaLE9BQU9hLE9BQU8sQ0FBQztRQUM3QyxPQUFPRixNQUFNRyxNQUFNLENBQUNDLFNBQVMsQ0FBQyxDQUFDQyxRQUFRQSxNQUFNQyxRQUFRLElBQUlDLFFBQVFGLE1BQU1HLGlCQUFpQixLQUFLRCxRQUFRRixNQUFNSSxrQkFBa0I7SUFDakksR0FBRztRQUNDVCxNQUFNRyxNQUFNO0tBQ2Y7SUFDRCxNQUFNTyxhQUFhckIsT0FBT2EsT0FBTyxDQUFDO1FBQzlCLElBQUlTO1FBQ0osT0FBTyxDQUFDQSwwQ0FBMENYLE1BQU1HLE1BQU0sQ0FBQ0YsMEJBQTBCLEtBQUssT0FBT1UsMENBQTBDO0lBQ25KLEdBQUc7UUFDQ1gsTUFBTUcsTUFBTTtRQUNaRjtLQUNIO0lBQ0QsTUFBTVcsbUJBQW1CdkIsT0FBT2EsT0FBTyxDQUFDLElBQUlELDRCQUE0QixJQUFJLEVBQUUsR0FBR0QsTUFBTUcsTUFBTSxDQUFDVSxLQUFLLENBQUMsR0FBR1osNEJBQTRCO1FBQy9IRCxNQUFNRyxNQUFNO1FBQ1pGO0tBQ0g7SUFDRCxNQUFNLENBQUNwQixLQUFLaUMsT0FBTyxHQUFHekIsT0FBTzBCLFFBQVEsQ0FBQ0wsY0FBYztJQUNwRCxNQUFNTSxZQUFZM0IsT0FBTzRCLFdBQVcsQ0FBQztRQUNqQ0gsT0FBTyxDQUFDSSxJQUFJLENBQUNBO0lBQ2pCLEdBQUcsRUFBRTtJQUNMLE1BQU1DLGdCQUFnQjlCLE9BQU9hLE9BQU8sQ0FBQyxJQUFJVSxpQkFBaUJRLE1BQU0sQ0FBQyxDQUFDQyxJQUFJQSxFQUFFZixRQUFRLElBQUl6QixNQUFNO1FBQ3RGQTtRQUNBK0I7S0FDSDtJQUNELE1BQU1VLHFCQUFxQmpDLE9BQU9hLE9BQU8sQ0FBQyxJQUFJRixNQUFNRyxNQUFNLENBQUNVLEtBQUssQ0FBQ1osNEJBQTRCLElBQUk7UUFDN0ZELE1BQU1HLE1BQU07UUFDWkY7S0FDSDtJQUNELE1BQU1zQix5QkFBeUJsQyxPQUFPYSxPQUFPLENBQUMsSUFBSW9CLG1CQUFtQkYsTUFBTSxDQUFDLENBQUNDLElBQUlBLEVBQUVmLFFBQVEsSUFBSXpCLE1BQU07UUFDakdBO1FBQ0F5QztLQUNIO0lBQ0QsTUFBTUUsY0FBY25DLE9BQU9hLE9BQU8sQ0FBQztRQUMvQixPQUFPb0IsbUJBQW1CRyxNQUFNLEtBQUtGLHVCQUF1QkUsTUFBTSxJQUFJNUMsT0FBTzZCLGNBQWM7SUFDL0YsR0FBRztRQUNDN0I7UUFDQXlDLG1CQUFtQkcsTUFBTTtRQUN6QmY7UUFDQWEsdUJBQXVCRSxNQUFNO0tBQ2hDO0lBQ0QsTUFBTUMsZ0NBQWdDckMsT0FBT2EsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHVCw2QkFBNkJrQywyQkFBMkIsRUFBRUoseUJBQXlCO1FBQzVJQTtLQUNIO0lBQ0QsT0FBcUIsV0FBSCxHQUFJLElBQUduQyxZQUFZd0MsSUFBSSxFQUFFdkMsT0FBT3dDLFFBQVEsRUFBRTtRQUN4REMsVUFBVTtZQUNOcEIsYUFBMkIsV0FBSCxHQUFJLElBQUd0QixZQUFZd0MsSUFBSSxFQUFFdkMsT0FBT3dDLFFBQVEsRUFBRTtnQkFDOURDLFVBQVU7b0JBQ04sV0FBVyxHQUFJLElBQUcxQyxZQUFZMkMsR0FBRyxFQUFFLE1BQU07d0JBQ3JDRCxVQUFVO29CQUNkO29CQUNBWCxjQUFjYSxHQUFHLENBQUMsQ0FBQ0MsT0FBT0MsUUFBc0IsV0FBSCxHQUFJLElBQUc5QyxZQUFZMkMsR0FBRyxFQUFFckMsZ0JBQWdCeUMsY0FBYyxFQUFFOzRCQUM3RkYsT0FBT0E7d0JBQ1gsR0FBRyxtQkFBbUJDLFFBQVEsTUFBTXJEO29CQUN4QyxXQUFXLEdBQUksSUFBR08sWUFBWTJDLEdBQUcsRUFBRXhDLFdBQVc2QyxTQUFTLEVBQUU7d0JBQ3JEQyxZQUFZM0IsV0FBV0Qsa0JBQWtCO3dCQUN6QzZCLFdBQVc1QixXQUFXRixpQkFBaUI7b0JBQzNDO2lCQUNIO1lBQ0wsS0FBSytCO1lBQ0x2QyxNQUFNd0Msb0JBQW9CLEdBQWlCLFdBQUgsR0FBSSxJQUFHcEQsWUFBWXdDLElBQUksRUFBRXhDLFlBQVl5QyxRQUFRLEVBQUU7Z0JBQ25GQyxVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHMUMsWUFBWTJDLEdBQUcsRUFBRSxNQUFNO3dCQUNyQ0QsVUFBVTtvQkFDZDtvQkFDQTlCLE1BQU13QyxvQkFBb0IsQ0FBQ1IsR0FBRyxDQUFDLENBQUNTLHFCQUFxQlAsUUFBc0IsV0FBSCxHQUFJLElBQUc5QyxZQUFZMkMsR0FBRyxFQUFFbkMsd0JBQXdCOEMsc0JBQXNCLEVBQUU7NEJBQ3hJRCxxQkFBcUJBO3dCQUN6QixHQUFHUDtpQkFDVjtZQUNMLEtBQUs7WUFDTFIsOEJBQThCRCxNQUFNLEdBQWlCLFdBQUgsR0FBSSxJQUFHckMsWUFBWXdDLElBQUksRUFBRXZDLE9BQU93QyxRQUFRLEVBQUU7Z0JBQ3hGQyxVQUFVO29CQUNOLFdBQVcsR0FBSSxJQUFHMUMsWUFBWTJDLEdBQUcsRUFBRSxNQUFNO3dCQUNyQ0QsVUFBVTtvQkFDZDtvQkFDQSxXQUFXLEdBQUksSUFBRzFDLFlBQVkyQyxHQUFHLEVBQUVwQyxvQkFBb0JnRCxrQkFBa0IsRUFBRTt3QkFDdkVDLG9CQUFvQmxCO3dCQUNwQjdDLEtBQUtBO29CQUNUO2lCQUNIO1lBQ0wsS0FBSzBEO1lBQ0xmLGNBQTRCLFdBQUgsR0FBSSxJQUFHcEMsWUFBWTJDLEdBQUcsRUFBRTFDLE9BQU93QyxRQUFRLEVBQUU7Z0JBQzlEQyxVQUF3QixXQUFILEdBQUksSUFBRzFDLFlBQVl3QyxJQUFJLEVBQUUsVUFBVTtvQkFDcERpQixVQUFVO29CQUNWLG1EQUFtRDtvQkFDbkRDLE1BQU07b0JBQ05DLFNBQVMvQjtvQkFDVGMsVUFBVTt3QkFDTmpELE1BQU0sU0FBUzt3QkFDZjtxQkFDSDtnQkFDTDtZQUNKLEtBQUswRDtTQUNSO0lBQ0w7QUFDSjtHQWhHTTdEO0tBQUFBO0FBaUdOLE1BQU1ELFNBQVMsQ0FBQyxHQUFHZSxjQUFjd0QsSUFBSSxFQUFFbkQ7QUFFdkMsSUFBSSxDQUFDLE9BQU92QixRQUFRMkUsT0FBTyxLQUFLLGNBQWUsT0FBTzNFLFFBQVEyRSxPQUFPLEtBQUssWUFBWTNFLFFBQVEyRSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU8zRSxRQUFRMkUsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzlFLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTJFLE9BQU8sRUFBRSxjQUFjO1FBQUUxRSxPQUFPO0lBQUs7SUFDbkVILE9BQU8rRSxNQUFNLENBQUM3RSxRQUFRMkUsT0FBTyxFQUFFM0U7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUTJFLE9BQU87QUFDbEMsRUFFQSxpQ0FBaUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9jb250YWluZXIvUnVudGltZUVycm9yL2luZGV4LmpzP2ZjYjgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzdHlsZXM6IG51bGwsXG4gICAgUnVudGltZUVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIHN0eWxlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgfSxcbiAgICBSdW50aW1lRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUnVudGltZUVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZVwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9Db2RlRnJhbWUgPSByZXF1aXJlKFwiLi4vLi4vY29tcG9uZW50cy9Db2RlRnJhbWVcIik7XG5jb25zdCBfbm9vcHRlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZVwiKTtcbmNvbnN0IF9ncm91cHN0YWNrZnJhbWVzYnlmcmFtZXdvcmsgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9ncm91cC1zdGFjay1mcmFtZXMtYnktZnJhbWV3b3JrXCIpO1xuY29uc3QgX0NhbGxTdGFja0ZyYW1lID0gcmVxdWlyZShcIi4vQ2FsbFN0YWNrRnJhbWVcIik7XG5jb25zdCBfR3JvdXBlZFN0YWNrRnJhbWVzID0gcmVxdWlyZShcIi4vR3JvdXBlZFN0YWNrRnJhbWVzXCIpO1xuY29uc3QgX0NvbXBvbmVudFN0YWNrRnJhbWVSb3cgPSByZXF1aXJlKFwiLi9Db21wb25lbnRTdGFja0ZyYW1lUm93XCIpO1xuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuXyhbXG4gICAgICAgIFwiXFxuICBidXR0b25bZGF0YS1uZXh0anMtZGF0YS1ydW50aW1lLWVycm9yLWNvbGxhcHNlZC1hY3Rpb25dIHtcXG4gICAgYmFja2dyb3VuZDogbm9uZTtcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtZm9udC1zbWFsbCk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLWZvbnQtYmlnZ2VyKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudHMtMyk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZV06bm90KDpsYXN0LWNoaWxkKSxcXG4gIFtkYXRhLW5leHRqcy1jb21wb25lbnQtc3RhY2stZnJhbWVdOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLWdhcC1kb3VibGUpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVdID4gaDMsXFxuICBbZGF0YS1uZXh0anMtY29tcG9uZW50LXN0YWNrLWZyYW1lXSA+IGgzIHtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1nYXApO1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtZm9udCk7XFxuICAgIGNvbG9yOiAjMjIyO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVdID4gaDNbZGF0YS1uZXh0anMtZnJhbWUtZXhwYW5kZWQ9J2ZhbHNlJ10ge1xcbiAgICBjb2xvcjogIzY2NjtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lXSA+IGRpdixcXG4gIFtkYXRhLW5leHRqcy1jb21wb25lbnQtc3RhY2stZnJhbWVdID4gZGl2IHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLXNpemUtZ2FwKSArIHZhcigtLXNpemUtZ2FwLWhhbGYpKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLWZvbnQtc21hbGwpO1xcbiAgICBjb2xvcjogIzk5OTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lXSA+IGRpdiA+IHN2ZyxcXG4gIFtkYXRhLW5leHRqcy1jb21wb25lbnQtc3RhY2stZnJhbWVdID4gW3JvbGU9J2xpbmsnXSA+IHN2ZyB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtZm9udC1zbWFsbCk7XFxuICAgIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLWdhcCk7XFxuICAgIGZsZXgtc2hyaW5rOiAwO1xcblxcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVdID4gZGl2W2RhdGEtaGFzLXNvdXJjZV0sXFxuICBbZGF0YS1uZXh0anMtY29tcG9uZW50LXN0YWNrLWZyYW1lXSA+IFtyb2xlPSdsaW5rJ10ge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZV0gPiBkaXZbZGF0YS1oYXMtc291cmNlXTpob3ZlcixcXG4gIFtkYXRhLW5leHRqcy1jb21wb25lbnQtc3RhY2stZnJhbWVdID4gW3JvbGU9J2xpbmsnXTpob3ZlciB7XFxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lXSA+IGRpdltkYXRhLWhhcy1zb3VyY2VdID4gc3ZnLFxcbiAgW2RhdGEtbmV4dGpzLWNvbXBvbmVudC1zdGFjay1mcmFtZV0gPiBbcm9sZT0nbGluayddID4gc3ZnIHtcXG4gICAgZGlzcGxheTogdW5zZXQ7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZXdvcmstaWNvbl0ge1xcbiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUtZ2FwKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1ld29yay1pY29uPSduZXh0J10gPiBtYXNrIHtcXG4gICAgbWFzay10eXBlOiBhbHBoYTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1ld29yay1pY29uPSdyZWFjdCddIHtcXG4gICAgY29sb3I6IHJnYigyMCwgMTU4LCAyMDIpO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbGxhcHNlZC1jYWxsLXN0YWNrLWRldGFpbHNdW29wZW5dXFxuICAgIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNoZXZyb24taWNvbl0ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29sbGFwc2VkLWNhbGwtc3RhY2stZGV0YWlsc10gc3VtbWFyeSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIG1hcmdpbjogdmFyKC0tc2l6ZS1nYXAtZG91YmxlKSAwO1xcbiAgICBsaXN0LXN0eWxlOiBub25lO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbGxhcHNlZC1jYWxsLXN0YWNrLWRldGFpbHNdIHN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXIge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvbGxhcHNlZC1jYWxsLXN0YWNrLWRldGFpbHNdIGgzIHtcXG4gICAgY29sb3I6ICM2NjY7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29sbGFwc2VkLWNhbGwtc3RhY2stZGV0YWlsc10gW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVdIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1nYXAtZG91YmxlKTtcXG4gIH1cXG5cIlxuICAgIF0pO1xuICAgIF90ZW1wbGF0ZU9iamVjdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuICAgIHJldHVybiBkYXRhO1xufVxuY29uc3QgUnVudGltZUVycm9yID0gZnVuY3Rpb24gUnVudGltZUVycm9yKHBhcmFtKSB7XG4gICAgbGV0IHsgZXJyb3IgfSA9IHBhcmFtO1xuICAgIGNvbnN0IGZpcnN0Rmlyc3RQYXJ0eUZyYW1lSW5kZXggPSBfcmVhY3QudXNlTWVtbygoKT0+e1xuICAgICAgICByZXR1cm4gZXJyb3IuZnJhbWVzLmZpbmRJbmRleCgoZW50cnkpPT5lbnRyeS5leHBhbmRlZCAmJiBCb29sZWFuKGVudHJ5Lm9yaWdpbmFsQ29kZUZyYW1lKSAmJiBCb29sZWFuKGVudHJ5Lm9yaWdpbmFsU3RhY2tGcmFtZSkpO1xuICAgIH0sIFtcbiAgICAgICAgZXJyb3IuZnJhbWVzXG4gICAgXSk7XG4gICAgY29uc3QgZmlyc3RGcmFtZSA9IF9yZWFjdC51c2VNZW1vKCgpPT57XG4gICAgICAgIHZhciBfZXJyb3JfZnJhbWVzX2ZpcnN0Rmlyc3RQYXJ0eUZyYW1lSW5kZXg7XG4gICAgICAgIHJldHVybiAoX2Vycm9yX2ZyYW1lc19maXJzdEZpcnN0UGFydHlGcmFtZUluZGV4ID0gZXJyb3IuZnJhbWVzW2ZpcnN0Rmlyc3RQYXJ0eUZyYW1lSW5kZXhdKSAhPSBudWxsID8gX2Vycm9yX2ZyYW1lc19maXJzdEZpcnN0UGFydHlGcmFtZUluZGV4IDogbnVsbDtcbiAgICB9LCBbXG4gICAgICAgIGVycm9yLmZyYW1lcyxcbiAgICAgICAgZmlyc3RGaXJzdFBhcnR5RnJhbWVJbmRleFxuICAgIF0pO1xuICAgIGNvbnN0IGFsbExlYWRpbmdGcmFtZXMgPSBfcmVhY3QudXNlTWVtbygoKT0+Zmlyc3RGaXJzdFBhcnR5RnJhbWVJbmRleCA8IDAgPyBbXSA6IGVycm9yLmZyYW1lcy5zbGljZSgwLCBmaXJzdEZpcnN0UGFydHlGcmFtZUluZGV4KSwgW1xuICAgICAgICBlcnJvci5mcmFtZXMsXG4gICAgICAgIGZpcnN0Rmlyc3RQYXJ0eUZyYW1lSW5kZXhcbiAgICBdKTtcbiAgICBjb25zdCBbYWxsLCBzZXRBbGxdID0gX3JlYWN0LnVzZVN0YXRlKGZpcnN0RnJhbWUgPT0gbnVsbCk7XG4gICAgY29uc3QgdG9nZ2xlQWxsID0gX3JlYWN0LnVzZUNhbGxiYWNrKCgpPT57XG4gICAgICAgIHNldEFsbCgodik9PiF2KTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgbGVhZGluZ0ZyYW1lcyA9IF9yZWFjdC51c2VNZW1vKCgpPT5hbGxMZWFkaW5nRnJhbWVzLmZpbHRlcigoZik9PmYuZXhwYW5kZWQgfHwgYWxsKSwgW1xuICAgICAgICBhbGwsXG4gICAgICAgIGFsbExlYWRpbmdGcmFtZXNcbiAgICBdKTtcbiAgICBjb25zdCBhbGxDYWxsU3RhY2tGcmFtZXMgPSBfcmVhY3QudXNlTWVtbygoKT0+ZXJyb3IuZnJhbWVzLnNsaWNlKGZpcnN0Rmlyc3RQYXJ0eUZyYW1lSW5kZXggKyAxKSwgW1xuICAgICAgICBlcnJvci5mcmFtZXMsXG4gICAgICAgIGZpcnN0Rmlyc3RQYXJ0eUZyYW1lSW5kZXhcbiAgICBdKTtcbiAgICBjb25zdCB2aXNpYmxlQ2FsbFN0YWNrRnJhbWVzID0gX3JlYWN0LnVzZU1lbW8oKCk9PmFsbENhbGxTdGFja0ZyYW1lcy5maWx0ZXIoKGYpPT5mLmV4cGFuZGVkIHx8IGFsbCksIFtcbiAgICAgICAgYWxsLFxuICAgICAgICBhbGxDYWxsU3RhY2tGcmFtZXNcbiAgICBdKTtcbiAgICBjb25zdCBjYW5TaG93TW9yZSA9IF9yZWFjdC51c2VNZW1vKCgpPT57XG4gICAgICAgIHJldHVybiBhbGxDYWxsU3RhY2tGcmFtZXMubGVuZ3RoICE9PSB2aXNpYmxlQ2FsbFN0YWNrRnJhbWVzLmxlbmd0aCB8fCBhbGwgJiYgZmlyc3RGcmFtZSAhPSBudWxsO1xuICAgIH0sIFtcbiAgICAgICAgYWxsLFxuICAgICAgICBhbGxDYWxsU3RhY2tGcmFtZXMubGVuZ3RoLFxuICAgICAgICBmaXJzdEZyYW1lLFxuICAgICAgICB2aXNpYmxlQ2FsbFN0YWNrRnJhbWVzLmxlbmd0aFxuICAgIF0pO1xuICAgIGNvbnN0IHN0YWNrRnJhbWVzR3JvdXBlZEJ5RnJhbWV3b3JrID0gX3JlYWN0LnVzZU1lbW8oKCk9PigwLCBfZ3JvdXBzdGFja2ZyYW1lc2J5ZnJhbWV3b3JrLmdyb3VwU3RhY2tGcmFtZXNCeUZyYW1ld29yaykodmlzaWJsZUNhbGxTdGFja0ZyYW1lcyksIFtcbiAgICAgICAgdmlzaWJsZUNhbGxTdGFja0ZyYW1lc1xuICAgIF0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfcmVhY3QuRnJhZ21lbnQsIHtcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIGZpcnN0RnJhbWUgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfcmVhY3QuRnJhZ21lbnQsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiaDJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiU291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGxlYWRpbmdGcmFtZXMubWFwKChmcmFtZSwgaW5kZXgpPT4vKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9DYWxsU3RhY2tGcmFtZS5DYWxsU3RhY2tGcmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lOiBmcmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCJsZWFkaW5nLWZyYW1lLVwiICsgaW5kZXggKyBcIi1cIiArIGFsbCkpLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9Db2RlRnJhbWUuQ29kZUZyYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lOiBmaXJzdEZyYW1lLm9yaWdpbmFsU3RhY2tGcmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVGcmFtZTogZmlyc3RGcmFtZS5vcmlnaW5hbENvZGVGcmFtZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZXJyb3IuY29tcG9uZW50U3RhY2tGcmFtZXMgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJoMlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJDb21wb25lbnQgU3RhY2tcIlxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuY29tcG9uZW50U3RhY2tGcmFtZXMubWFwKChjb21wb25lbnRTdGFja0ZyYW1lLCBpbmRleCk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX0NvbXBvbmVudFN0YWNrRnJhbWVSb3cuQ29tcG9uZW50U3RhY2tGcmFtZVJvdywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrRnJhbWU6IGNvbXBvbmVudFN0YWNrRnJhbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGluZGV4KSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSA6IG51bGwsXG4gICAgICAgICAgICBzdGFja0ZyYW1lc0dyb3VwZWRCeUZyYW1ld29yay5sZW5ndGggPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShfcmVhY3QuRnJhZ21lbnQsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiaDJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiQ2FsbCBTdGFja1wiXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9Hcm91cGVkU3RhY2tGcmFtZXMuR3JvdXBlZFN0YWNrRnJhbWVzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkU3RhY2tGcmFtZXM6IHN0YWNrRnJhbWVzR3JvdXBlZEJ5RnJhbWV3b3JrLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsOiBhbGxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNhblNob3dNb3JlID8gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfcmVhY3QuRnJhZ21lbnQsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICB0YWJJbmRleDogMTAsXG4gICAgICAgICAgICAgICAgICAgIFwiZGF0YS1uZXh0anMtZGF0YS1ydW50aW1lLWVycm9yLWNvbGxhcHNlZC1hY3Rpb25cIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogdG9nZ2xlQWxsLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsID8gXCJIaWRlXCIgOiBcIlNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGNvbGxhcHNlZCBmcmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pIDogdW5kZWZpbmVkXG4gICAgICAgIF1cbiAgICB9KTtcbn07XG5jb25zdCBzdHlsZXMgPSAoMCwgX25vb3B0ZW1wbGF0ZS5ub29wKShfdGVtcGxhdGVPYmplY3QoKSk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsInN0eWxlcyIsIlJ1bnRpbWVFcnJvciIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX0NvZGVGcmFtZSIsIl9ub29wdGVtcGxhdGUiLCJfZ3JvdXBzdGFja2ZyYW1lc2J5ZnJhbWV3b3JrIiwiX0NhbGxTdGFja0ZyYW1lIiwiX0dyb3VwZWRTdGFja0ZyYW1lcyIsIl9Db21wb25lbnRTdGFja0ZyYW1lUm93IiwiX3RlbXBsYXRlT2JqZWN0IiwiZGF0YSIsInBhcmFtIiwiZXJyb3IiLCJmaXJzdEZpcnN0UGFydHlGcmFtZUluZGV4IiwidXNlTWVtbyIsImZyYW1lcyIsImZpbmRJbmRleCIsImVudHJ5IiwiZXhwYW5kZWQiLCJCb29sZWFuIiwib3JpZ2luYWxDb2RlRnJhbWUiLCJvcmlnaW5hbFN0YWNrRnJhbWUiLCJmaXJzdEZyYW1lIiwiX2Vycm9yX2ZyYW1lc19maXJzdEZpcnN0UGFydHlGcmFtZUluZGV4IiwiYWxsTGVhZGluZ0ZyYW1lcyIsInNsaWNlIiwic2V0QWxsIiwidXNlU3RhdGUiLCJ0b2dnbGVBbGwiLCJ1c2VDYWxsYmFjayIsInYiLCJsZWFkaW5nRnJhbWVzIiwiZmlsdGVyIiwiZiIsImFsbENhbGxTdGFja0ZyYW1lcyIsInZpc2libGVDYWxsU3RhY2tGcmFtZXMiLCJjYW5TaG93TW9yZSIsImxlbmd0aCIsInN0YWNrRnJhbWVzR3JvdXBlZEJ5RnJhbWV3b3JrIiwiZ3JvdXBTdGFja0ZyYW1lc0J5RnJhbWV3b3JrIiwianN4cyIsIkZyYWdtZW50IiwiY2hpbGRyZW4iLCJqc3giLCJtYXAiLCJmcmFtZSIsImluZGV4IiwiQ2FsbFN0YWNrRnJhbWUiLCJDb2RlRnJhbWUiLCJzdGFja0ZyYW1lIiwiY29kZUZyYW1lIiwidW5kZWZpbmVkIiwiY29tcG9uZW50U3RhY2tGcmFtZXMiLCJjb21wb25lbnRTdGFja0ZyYW1lIiwiQ29tcG9uZW50U3RhY2tGcmFtZVJvdyIsIkdyb3VwZWRTdGFja0ZyYW1lcyIsImdyb3VwZWRTdGFja0ZyYW1lcyIsInRhYkluZGV4IiwidHlwZSIsIm9uQ2xpY2siLCJub29wIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js": +/*!******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js ***! + \******************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ACTION_BUILD_OK: function() {\n return ACTION_BUILD_OK;\n },\n ACTION_BUILD_ERROR: function() {\n return ACTION_BUILD_ERROR;\n },\n ACTION_BEFORE_REFRESH: function() {\n return ACTION_BEFORE_REFRESH;\n },\n ACTION_REFRESH: function() {\n return ACTION_REFRESH;\n },\n ACTION_UNHANDLED_ERROR: function() {\n return ACTION_UNHANDLED_ERROR;\n },\n ACTION_UNHANDLED_REJECTION: function() {\n return ACTION_UNHANDLED_REJECTION;\n },\n ACTION_VERSION_INFO: function() {\n return ACTION_VERSION_INFO;\n },\n INITIAL_OVERLAY_STATE: function() {\n return INITIAL_OVERLAY_STATE;\n },\n errorOverlayReducer: function() {\n return errorOverlayReducer;\n }\n});\nconst ACTION_BUILD_OK = \"build-ok\";\nconst ACTION_BUILD_ERROR = \"build-error\";\nconst ACTION_BEFORE_REFRESH = \"before-fast-refresh\";\nconst ACTION_REFRESH = \"fast-refresh\";\nconst ACTION_UNHANDLED_ERROR = \"unhandled-error\";\nconst ACTION_UNHANDLED_REJECTION = \"unhandled-rejection\";\nconst ACTION_VERSION_INFO = \"version-info\";\nconst INITIAL_OVERLAY_STATE = {\n nextId: 1,\n buildError: null,\n errors: [],\n notFound: false,\n refreshState: {\n type: \"idle\"\n },\n versionInfo: {\n installed: \"0.0.0\",\n staleness: \"unknown\"\n }\n};\nfunction pushErrorFilterDuplicates(errors, err) {\n return [\n ...errors.filter((e)=>{\n // Filter out duplicate errors\n return e.event.reason !== err.event.reason;\n }),\n err\n ];\n}\nconst errorOverlayReducer = (state, action)=>{\n switch(action.type){\n case ACTION_BUILD_OK:\n {\n return {\n ...state,\n buildError: null\n };\n }\n case ACTION_BUILD_ERROR:\n {\n return {\n ...state,\n buildError: action.message\n };\n }\n case ACTION_BEFORE_REFRESH:\n {\n return {\n ...state,\n refreshState: {\n type: \"pending\",\n errors: []\n }\n };\n }\n case ACTION_REFRESH:\n {\n return {\n ...state,\n buildError: null,\n errors: // and UNHANDLED_REJECTION events might be dispatched between the\n // BEFORE_REFRESH and the REFRESH event. We want to keep those errors\n // around until the next refresh. Otherwise we run into a race\n // condition where those errors would be cleared on refresh completion\n // before they can be displayed.\n state.refreshState.type === \"pending\" ? state.refreshState.errors : [],\n refreshState: {\n type: \"idle\"\n }\n };\n }\n case ACTION_UNHANDLED_ERROR:\n case ACTION_UNHANDLED_REJECTION:\n {\n switch(state.refreshState.type){\n case \"idle\":\n {\n return {\n ...state,\n nextId: state.nextId + 1,\n errors: pushErrorFilterDuplicates(state.errors, {\n id: state.nextId,\n event: action\n })\n };\n }\n case \"pending\":\n {\n return {\n ...state,\n nextId: state.nextId + 1,\n refreshState: {\n ...state.refreshState,\n errors: pushErrorFilterDuplicates(state.refreshState.errors, {\n id: state.nextId,\n event: action\n })\n }\n };\n }\n default:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = state.refreshState;\n return state;\n }\n }\n case ACTION_VERSION_INFO:\n {\n return {\n ...state,\n versionInfo: action.versionInfo\n };\n }\n default:\n {\n return state;\n }\n }\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=error-overlay-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvZXJyb3Itb3ZlcmxheS1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBVU47QUFDQSxTQUFTVSxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJaEIsT0FBT0MsY0FBYyxDQUFDYyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFaLFNBQVM7SUFDYkcsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtJQUNBQyxvQkFBb0I7UUFDaEIsT0FBT0E7SUFDWDtJQUNBQyx1QkFBdUI7UUFDbkIsT0FBT0E7SUFDWDtJQUNBQyxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLHdCQUF3QjtRQUNwQixPQUFPQTtJQUNYO0lBQ0FDLDRCQUE0QjtRQUN4QixPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLHVCQUF1QjtRQUNuQixPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNUixrQkFBa0I7QUFDeEIsTUFBTUMscUJBQXFCO0FBQzNCLE1BQU1DLHdCQUF3QjtBQUM5QixNQUFNQyxpQkFBaUI7QUFDdkIsTUFBTUMseUJBQXlCO0FBQy9CLE1BQU1DLDZCQUE2QjtBQUNuQyxNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTUMsd0JBQXdCO0lBQzFCUSxRQUFRO0lBQ1JDLFlBQVk7SUFDWkMsUUFBUSxFQUFFO0lBQ1ZDLFVBQVU7SUFDVkMsY0FBYztRQUNWQyxNQUFNO0lBQ1Y7SUFDQUMsYUFBYTtRQUNUQyxXQUFXO1FBQ1hDLFdBQVc7SUFDZjtBQUNKO0FBQ0EsU0FBU0MsMEJBQTBCUCxNQUFNLEVBQUVRLEdBQUc7SUFDMUMsT0FBTztXQUNBUixPQUFPUyxNQUFNLENBQUMsQ0FBQ0M7WUFDZCw4QkFBOEI7WUFDOUIsT0FBT0EsRUFBRUMsS0FBSyxDQUFDQyxNQUFNLEtBQUtKLElBQUlHLEtBQUssQ0FBQ0MsTUFBTTtRQUM5QztRQUNBSjtLQUNIO0FBQ0w7QUFDQSxNQUFNakIsc0JBQXNCLENBQUNzQixPQUFPQztJQUNoQyxPQUFPQSxPQUFPWCxJQUFJO1FBQ2QsS0FBS3BCO1lBQ0Q7Z0JBQ0ksT0FBTztvQkFDSCxHQUFHOEIsS0FBSztvQkFDUmQsWUFBWTtnQkFDaEI7WUFDSjtRQUNKLEtBQUtmO1lBQ0Q7Z0JBQ0ksT0FBTztvQkFDSCxHQUFHNkIsS0FBSztvQkFDUmQsWUFBWWUsT0FBT0MsT0FBTztnQkFDOUI7WUFDSjtRQUNKLEtBQUs5QjtZQUNEO2dCQUNJLE9BQU87b0JBQ0gsR0FBRzRCLEtBQUs7b0JBQ1JYLGNBQWM7d0JBQ1ZDLE1BQU07d0JBQ05ILFFBQVEsRUFBRTtvQkFDZDtnQkFDSjtZQUNKO1FBQ0osS0FBS2Q7WUFDRDtnQkFDSSxPQUFPO29CQUNILEdBQUcyQixLQUFLO29CQUNSZCxZQUFZO29CQUNaQyxRQUNBLGlFQUFpRTtvQkFDakUscUVBQXFFO29CQUNyRSw4REFBOEQ7b0JBQzlELHNFQUFzRTtvQkFDdEUsZ0NBQWdDO29CQUNoQ2EsTUFBTVgsWUFBWSxDQUFDQyxJQUFJLEtBQUssWUFBWVUsTUFBTVgsWUFBWSxDQUFDRixNQUFNLEdBQUcsRUFBRTtvQkFDdEVFLGNBQWM7d0JBQ1ZDLE1BQU07b0JBQ1Y7Z0JBQ0o7WUFDSjtRQUNKLEtBQUtoQjtRQUNMLEtBQUtDO1lBQ0Q7Z0JBQ0ksT0FBT3lCLE1BQU1YLFlBQVksQ0FBQ0MsSUFBSTtvQkFDMUIsS0FBSzt3QkFDRDs0QkFDSSxPQUFPO2dDQUNILEdBQUdVLEtBQUs7Z0NBQ1JmLFFBQVFlLE1BQU1mLE1BQU0sR0FBRztnQ0FDdkJFLFFBQVFPLDBCQUEwQk0sTUFBTWIsTUFBTSxFQUFFO29DQUM1Q2dCLElBQUlILE1BQU1mLE1BQU07b0NBQ2hCYSxPQUFPRztnQ0FDWDs0QkFDSjt3QkFDSjtvQkFDSixLQUFLO3dCQUNEOzRCQUNJLE9BQU87Z0NBQ0gsR0FBR0QsS0FBSztnQ0FDUmYsUUFBUWUsTUFBTWYsTUFBTSxHQUFHO2dDQUN2QkksY0FBYztvQ0FDVixHQUFHVyxNQUFNWCxZQUFZO29DQUNyQkYsUUFBUU8sMEJBQTBCTSxNQUFNWCxZQUFZLENBQUNGLE1BQU0sRUFBRTt3Q0FDekRnQixJQUFJSCxNQUFNZixNQUFNO3dDQUNoQmEsT0FBT0c7b0NBQ1g7Z0NBQ0o7NEJBQ0o7d0JBQ0o7b0JBQ0o7d0JBQ0ksNkRBQTZEO3dCQUM3RCxNQUFNRyxJQUFJSixNQUFNWCxZQUFZO3dCQUM1QixPQUFPVztnQkFDZjtZQUNKO1FBQ0osS0FBS3hCO1lBQ0Q7Z0JBQ0ksT0FBTztvQkFDSCxHQUFHd0IsS0FBSztvQkFDUlQsYUFBYVUsT0FBT1YsV0FBVztnQkFDbkM7WUFDSjtRQUNKO1lBQ0k7Z0JBQ0ksT0FBT1M7WUFDWDtJQUNSO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT2pDLFFBQVFzQyxPQUFPLEtBQUssY0FBZSxPQUFPdEMsUUFBUXNDLE9BQU8sS0FBSyxZQUFZdEMsUUFBUXNDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3RDLFFBQVFzQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLekMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRc0MsT0FBTyxFQUFFLGNBQWM7UUFBRXJDLE9BQU87SUFBSztJQUNuRUgsT0FBTzBDLE1BQU0sQ0FBQ3hDLFFBQVFzQyxPQUFPLEVBQUV0QztJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRc0MsT0FBTztBQUNsQyxFQUVBLGlEQUFpRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2Vycm9yLW92ZXJsYXktcmVkdWNlci5qcz8yNWRjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQUNUSU9OX0JVSUxEX09LOiBudWxsLFxuICAgIEFDVElPTl9CVUlMRF9FUlJPUjogbnVsbCxcbiAgICBBQ1RJT05fQkVGT1JFX1JFRlJFU0g6IG51bGwsXG4gICAgQUNUSU9OX1JFRlJFU0g6IG51bGwsXG4gICAgQUNUSU9OX1VOSEFORExFRF9FUlJPUjogbnVsbCxcbiAgICBBQ1RJT05fVU5IQU5ETEVEX1JFSkVDVElPTjogbnVsbCxcbiAgICBBQ1RJT05fVkVSU0lPTl9JTkZPOiBudWxsLFxuICAgIElOSVRJQUxfT1ZFUkxBWV9TVEFURTogbnVsbCxcbiAgICBlcnJvck92ZXJsYXlSZWR1Y2VyOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIEFDVElPTl9CVUlMRF9PSzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBQ1RJT05fQlVJTERfT0s7XG4gICAgfSxcbiAgICBBQ1RJT05fQlVJTERfRVJST1I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OX0JVSUxEX0VSUk9SO1xuICAgIH0sXG4gICAgQUNUSU9OX0JFRk9SRV9SRUZSRVNIOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9CRUZPUkVfUkVGUkVTSDtcbiAgICB9LFxuICAgIEFDVElPTl9SRUZSRVNIOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9SRUZSRVNIO1xuICAgIH0sXG4gICAgQUNUSU9OX1VOSEFORExFRF9FUlJPUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBQ1RJT05fVU5IQU5ETEVEX0VSUk9SO1xuICAgIH0sXG4gICAgQUNUSU9OX1VOSEFORExFRF9SRUpFQ1RJT046IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OX1VOSEFORExFRF9SRUpFQ1RJT047XG4gICAgfSxcbiAgICBBQ1RJT05fVkVSU0lPTl9JTkZPOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9WRVJTSU9OX0lORk87XG4gICAgfSxcbiAgICBJTklUSUFMX09WRVJMQVlfU1RBVEU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSU5JVElBTF9PVkVSTEFZX1NUQVRFO1xuICAgIH0sXG4gICAgZXJyb3JPdmVybGF5UmVkdWNlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBlcnJvck92ZXJsYXlSZWR1Y2VyO1xuICAgIH1cbn0pO1xuY29uc3QgQUNUSU9OX0JVSUxEX09LID0gXCJidWlsZC1va1wiO1xuY29uc3QgQUNUSU9OX0JVSUxEX0VSUk9SID0gXCJidWlsZC1lcnJvclwiO1xuY29uc3QgQUNUSU9OX0JFRk9SRV9SRUZSRVNIID0gXCJiZWZvcmUtZmFzdC1yZWZyZXNoXCI7XG5jb25zdCBBQ1RJT05fUkVGUkVTSCA9IFwiZmFzdC1yZWZyZXNoXCI7XG5jb25zdCBBQ1RJT05fVU5IQU5ETEVEX0VSUk9SID0gXCJ1bmhhbmRsZWQtZXJyb3JcIjtcbmNvbnN0IEFDVElPTl9VTkhBTkRMRURfUkVKRUNUSU9OID0gXCJ1bmhhbmRsZWQtcmVqZWN0aW9uXCI7XG5jb25zdCBBQ1RJT05fVkVSU0lPTl9JTkZPID0gXCJ2ZXJzaW9uLWluZm9cIjtcbmNvbnN0IElOSVRJQUxfT1ZFUkxBWV9TVEFURSA9IHtcbiAgICBuZXh0SWQ6IDEsXG4gICAgYnVpbGRFcnJvcjogbnVsbCxcbiAgICBlcnJvcnM6IFtdLFxuICAgIG5vdEZvdW5kOiBmYWxzZSxcbiAgICByZWZyZXNoU3RhdGU6IHtcbiAgICAgICAgdHlwZTogXCJpZGxlXCJcbiAgICB9LFxuICAgIHZlcnNpb25JbmZvOiB7XG4gICAgICAgIGluc3RhbGxlZDogXCIwLjAuMFwiLFxuICAgICAgICBzdGFsZW5lc3M6IFwidW5rbm93blwiXG4gICAgfVxufTtcbmZ1bmN0aW9uIHB1c2hFcnJvckZpbHRlckR1cGxpY2F0ZXMoZXJyb3JzLCBlcnIpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAuLi5lcnJvcnMuZmlsdGVyKChlKT0+e1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBkdXBsaWNhdGUgZXJyb3JzXG4gICAgICAgICAgICByZXR1cm4gZS5ldmVudC5yZWFzb24gIT09IGVyci5ldmVudC5yZWFzb247XG4gICAgICAgIH0pLFxuICAgICAgICBlcnJcbiAgICBdO1xufVxuY29uc3QgZXJyb3JPdmVybGF5UmVkdWNlciA9IChzdGF0ZSwgYWN0aW9uKT0+e1xuICAgIHN3aXRjaChhY3Rpb24udHlwZSl7XG4gICAgICAgIGNhc2UgQUNUSU9OX0JVSUxEX09LOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBidWlsZEVycm9yOiBudWxsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBBQ1RJT05fQlVJTERfRVJST1I6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGJ1aWxkRXJyb3I6IGFjdGlvbi5tZXNzYWdlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBBQ1RJT05fQkVGT1JFX1JFRlJFU0g6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hTdGF0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIEFDVElPTl9SRUZSRVNIOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBidWlsZEVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IC8vIEVycm9ycyBjYW4gY29tZSBpbiBkdXJpbmcgdXBkYXRlcy4gSW4gdGhpcyBjYXNlLCBVTkhBTkRMRURfRVJST1JcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIFVOSEFORExFRF9SRUpFQ1RJT04gZXZlbnRzIG1pZ2h0IGJlIGRpc3BhdGNoZWQgYmV0d2VlbiB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gQkVGT1JFX1JFRlJFU0ggYW5kIHRoZSBSRUZSRVNIIGV2ZW50LiBXZSB3YW50IHRvIGtlZXAgdGhvc2UgZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgIC8vIGFyb3VuZCB1bnRpbCB0aGUgbmV4dCByZWZyZXNoLiBPdGhlcndpc2Ugd2UgcnVuIGludG8gYSByYWNlXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbmRpdGlvbiB3aGVyZSB0aG9zZSBlcnJvcnMgd291bGQgYmUgY2xlYXJlZCBvbiByZWZyZXNoIGNvbXBsZXRpb25cbiAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoZXkgY2FuIGJlIGRpc3BsYXllZC5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGUucmVmcmVzaFN0YXRlLnR5cGUgPT09IFwicGVuZGluZ1wiID8gc3RhdGUucmVmcmVzaFN0YXRlLmVycm9ycyA6IFtdLFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoU3RhdGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaWRsZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIEFDVElPTl9VTkhBTkRMRURfRVJST1I6XG4gICAgICAgIGNhc2UgQUNUSU9OX1VOSEFORExFRF9SRUpFQ1RJT046XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3dpdGNoKHN0YXRlLnJlZnJlc2hTdGF0ZS50eXBlKXtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImlkbGVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dElkOiBzdGF0ZS5uZXh0SWQgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IHB1c2hFcnJvckZpbHRlckR1cGxpY2F0ZXMoc3RhdGUuZXJyb3JzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogc3RhdGUubmV4dElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRJZDogc3RhdGUubmV4dElkICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFN0YXRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5yZWZyZXNoU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IHB1c2hFcnJvckZpbHRlckR1cGxpY2F0ZXMoc3RhdGUucmVmcmVzaFN0YXRlLmVycm9ycywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBzdGF0ZS5uZXh0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfID0gc3RhdGUucmVmcmVzaFN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBBQ1RJT05fVkVSU0lPTl9JTkZPOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uSW5mbzogYWN0aW9uLnZlcnNpb25JbmZvXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgfVxufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXJyb3Itb3ZlcmxheS1yZWR1Y2VyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIkFDVElPTl9CVUlMRF9PSyIsIkFDVElPTl9CVUlMRF9FUlJPUiIsIkFDVElPTl9CRUZPUkVfUkVGUkVTSCIsIkFDVElPTl9SRUZSRVNIIiwiQUNUSU9OX1VOSEFORExFRF9FUlJPUiIsIkFDVElPTl9VTkhBTkRMRURfUkVKRUNUSU9OIiwiQUNUSU9OX1ZFUlNJT05fSU5GTyIsIklOSVRJQUxfT1ZFUkxBWV9TVEFURSIsImVycm9yT3ZlcmxheVJlZHVjZXIiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJuZXh0SWQiLCJidWlsZEVycm9yIiwiZXJyb3JzIiwibm90Rm91bmQiLCJyZWZyZXNoU3RhdGUiLCJ0eXBlIiwidmVyc2lvbkluZm8iLCJpbnN0YWxsZWQiLCJzdGFsZW5lc3MiLCJwdXNoRXJyb3JGaWx0ZXJEdXBsaWNhdGVzIiwiZXJyIiwiZmlsdGVyIiwiZSIsImV2ZW50IiwicmVhc29uIiwic3RhdGUiLCJhY3Rpb24iLCJtZXNzYWdlIiwiaWQiLCJfIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js ***! + \*******************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSocketUrl\", ({\n enumerable: true,\n get: function() {\n return getSocketUrl;\n }\n}));\nfunction getSocketProtocol(assetPrefix) {\n let protocol = window.location.protocol;\n try {\n // assetPrefix is a url\n protocol = new URL(assetPrefix).protocol;\n } catch (e) {}\n return protocol === \"http:\" ? \"ws\" : \"wss\";\n}\nfunction getSocketUrl(assetPrefix) {\n const { hostname, port } = window.location;\n const protocol = getSocketProtocol(assetPrefix);\n const normalizedAssetPrefix = assetPrefix.replace(/^\\/+/, \"\");\n let url = protocol + \"://\" + hostname + \":\" + port + (normalizedAssetPrefix ? \"/\" + normalizedAssetPrefix : \"\");\n if (normalizedAssetPrefix.startsWith(\"http\")) {\n url = protocol + \"://\" + normalizedAssetPrefix.split(\"://\", 2)[1];\n }\n return url;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-socket-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9nZXQtc29ja2V0LXVybC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsZ0RBQStDO0lBQzNDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0Msa0JBQWtCQyxXQUFXO0lBQ2xDLElBQUlDLFdBQVdDLE9BQU9DLFFBQVEsQ0FBQ0YsUUFBUTtJQUN2QyxJQUFJO1FBQ0EsdUJBQXVCO1FBQ3ZCQSxXQUFXLElBQUlHLElBQUlKLGFBQWFDLFFBQVE7SUFDNUMsRUFBRSxPQUFPSSxHQUFHLENBQUM7SUFDYixPQUFPSixhQUFhLFVBQVUsT0FBTztBQUN6QztBQUNBLFNBQVNILGFBQWFFLFdBQVc7SUFDN0IsTUFBTSxFQUFFTSxRQUFRLEVBQUVDLElBQUksRUFBRSxHQUFHTCxPQUFPQyxRQUFRO0lBQzFDLE1BQU1GLFdBQVdGLGtCQUFrQkM7SUFDbkMsTUFBTVEsd0JBQXdCUixZQUFZUyxPQUFPLENBQUMsUUFBUTtJQUMxRCxJQUFJQyxNQUFNVCxXQUFXLFFBQVFLLFdBQVcsTUFBTUMsT0FBUUMsQ0FBQUEsd0JBQXdCLE1BQU1BLHdCQUF3QixFQUFDO0lBQzdHLElBQUlBLHNCQUFzQkcsVUFBVSxDQUFDLFNBQVM7UUFDMUNELE1BQU1ULFdBQVcsUUFBUU8sc0JBQXNCSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtJQUNyRTtJQUNBLE9BQU9GO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT2hCLFFBQVFtQixPQUFPLEtBQUssY0FBZSxPQUFPbkIsUUFBUW1CLE9BQU8sS0FBSyxZQUFZbkIsUUFBUW1CLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT25CLFFBQVFtQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRbUIsT0FBTyxFQUFFLGNBQWM7UUFBRWxCLE9BQU87SUFBSztJQUNuRUgsT0FBT3VCLE1BQU0sQ0FBQ3JCLFFBQVFtQixPQUFPLEVBQUVuQjtJQUMvQnNCLE9BQU90QixPQUFPLEdBQUdBLFFBQVFtQixPQUFPO0FBQ2xDLEVBRUEsMENBQTBDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9nZXQtc29ja2V0LXVybC5qcz85ZTA4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0U29ja2V0VXJsXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRTb2NrZXRVcmw7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBnZXRTb2NrZXRQcm90b2NvbChhc3NldFByZWZpeCkge1xuICAgIGxldCBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbDtcbiAgICB0cnkge1xuICAgICAgICAvLyBhc3NldFByZWZpeCBpcyBhIHVybFxuICAgICAgICBwcm90b2NvbCA9IG5ldyBVUkwoYXNzZXRQcmVmaXgpLnByb3RvY29sO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIHByb3RvY29sID09PSBcImh0dHA6XCIgPyBcIndzXCIgOiBcIndzc1wiO1xufVxuZnVuY3Rpb24gZ2V0U29ja2V0VXJsKGFzc2V0UHJlZml4KSB7XG4gICAgY29uc3QgeyBob3N0bmFtZSwgcG9ydCB9ID0gd2luZG93LmxvY2F0aW9uO1xuICAgIGNvbnN0IHByb3RvY29sID0gZ2V0U29ja2V0UHJvdG9jb2woYXNzZXRQcmVmaXgpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRBc3NldFByZWZpeCA9IGFzc2V0UHJlZml4LnJlcGxhY2UoL15cXC8rLywgXCJcIik7XG4gICAgbGV0IHVybCA9IHByb3RvY29sICsgXCI6Ly9cIiArIGhvc3RuYW1lICsgXCI6XCIgKyBwb3J0ICsgKG5vcm1hbGl6ZWRBc3NldFByZWZpeCA/IFwiL1wiICsgbm9ybWFsaXplZEFzc2V0UHJlZml4IDogXCJcIik7XG4gICAgaWYgKG5vcm1hbGl6ZWRBc3NldFByZWZpeC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgICAgICB1cmwgPSBwcm90b2NvbCArIFwiOi8vXCIgKyBub3JtYWxpemVkQXNzZXRQcmVmaXguc3BsaXQoXCI6Ly9cIiwgMilbMV07XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1zb2NrZXQtdXJsLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJnZXRTb2NrZXRVcmwiLCJnZXRTb2NrZXRQcm90b2NvbCIsImFzc2V0UHJlZml4IiwicHJvdG9jb2wiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIlVSTCIsImUiLCJob3N0bmFtZSIsInBvcnQiLCJub3JtYWxpemVkQXNzZXRQcmVmaXgiLCJyZXBsYWNlIiwidXJsIiwic3RhcnRzV2l0aCIsInNwbGl0IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js ***! + \*******************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getErrorByType\", ({\n enumerable: true,\n get: function() {\n return getErrorByType;\n }\n}));\nconst _erroroverlayreducer = __webpack_require__(/*! ../error-overlay-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/error-overlay-reducer.js\");\nconst _nodeStackFrames = __webpack_require__(/*! ./nodeStackFrames */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js\");\nconst _stackframe = __webpack_require__(/*! ./stack-frame */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\");\nasync function getErrorByType(ev) {\n const { id, event } = ev;\n switch(event.type){\n case _erroroverlayreducer.ACTION_UNHANDLED_ERROR:\n case _erroroverlayreducer.ACTION_UNHANDLED_REJECTION:\n {\n const readyRuntimeError = {\n id,\n runtime: true,\n error: event.reason,\n frames: await (0, _stackframe.getOriginalStackFrames)(event.frames, (0, _nodeStackFrames.getErrorSource)(event.reason), event.reason.toString())\n };\n if (event.type === _erroroverlayreducer.ACTION_UNHANDLED_ERROR) {\n readyRuntimeError.componentStackFrames = event.componentStackFrames;\n }\n return readyRuntimeError;\n }\n default:\n {\n break;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = event;\n throw new Error(\"type system invariant violation\");\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=getErrorByType.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9nZXRFcnJvckJ5VHlwZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsa0RBQWlEO0lBQzdDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsdUJBQXVCQyxtQkFBT0EsQ0FBQyxvSkFBMEI7QUFDL0QsTUFBTUMsbUJBQW1CRCxtQkFBT0EsQ0FBQywrSUFBbUI7QUFDcEQsTUFBTUUsY0FBY0YsbUJBQU9BLENBQUMsdUlBQWU7QUFDM0MsZUFBZUYsZUFBZUssRUFBRTtJQUM1QixNQUFNLEVBQUVDLEVBQUUsRUFBRUMsS0FBSyxFQUFFLEdBQUdGO0lBQ3RCLE9BQU9FLE1BQU1DLElBQUk7UUFDYixLQUFLUCxxQkFBcUJRLHNCQUFzQjtRQUNoRCxLQUFLUixxQkFBcUJTLDBCQUEwQjtZQUNoRDtnQkFDSSxNQUFNQyxvQkFBb0I7b0JBQ3RCTDtvQkFDQU0sU0FBUztvQkFDVEMsT0FBT04sTUFBTU8sTUFBTTtvQkFDbkJDLFFBQVEsTUFBTSxDQUFDLEdBQUdYLFlBQVlZLHNCQUFzQixFQUFFVCxNQUFNUSxNQUFNLEVBQUUsQ0FBQyxHQUFHWixpQkFBaUJjLGNBQWMsRUFBRVYsTUFBTU8sTUFBTSxHQUFHUCxNQUFNTyxNQUFNLENBQUNJLFFBQVE7Z0JBQ2pKO2dCQUNBLElBQUlYLE1BQU1DLElBQUksS0FBS1AscUJBQXFCUSxzQkFBc0IsRUFBRTtvQkFDNURFLGtCQUFrQlEsb0JBQW9CLEdBQUdaLE1BQU1ZLG9CQUFvQjtnQkFDdkU7Z0JBQ0EsT0FBT1I7WUFDWDtRQUNKO1lBQ0k7Z0JBQ0k7WUFDSjtJQUNSO0lBQ0EsNkRBQTZEO0lBQzdELE1BQU1TLElBQUliO0lBQ1YsTUFBTSxJQUFJYyxNQUFNO0FBQ3BCO0FBRUEsSUFBSSxDQUFDLE9BQU96QixRQUFRMEIsT0FBTyxLQUFLLGNBQWUsT0FBTzFCLFFBQVEwQixPQUFPLEtBQUssWUFBWTFCLFFBQVEwQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU8xQixRQUFRMEIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzdCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTBCLE9BQU8sRUFBRSxjQUFjO1FBQUV6QixPQUFPO0lBQUs7SUFDbkVILE9BQU84QixNQUFNLENBQUM1QixRQUFRMEIsT0FBTyxFQUFFMUI7SUFDL0I2QixPQUFPN0IsT0FBTyxHQUFHQSxRQUFRMEIsT0FBTztBQUNsQyxFQUVBLDBDQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ2V0RXJyb3JCeVR5cGUuanM/NWFjYiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldEVycm9yQnlUeXBlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRFcnJvckJ5VHlwZTtcbiAgICB9XG59KTtcbmNvbnN0IF9lcnJvcm92ZXJsYXlyZWR1Y2VyID0gcmVxdWlyZShcIi4uL2Vycm9yLW92ZXJsYXktcmVkdWNlclwiKTtcbmNvbnN0IF9ub2RlU3RhY2tGcmFtZXMgPSByZXF1aXJlKFwiLi9ub2RlU3RhY2tGcmFtZXNcIik7XG5jb25zdCBfc3RhY2tmcmFtZSA9IHJlcXVpcmUoXCIuL3N0YWNrLWZyYW1lXCIpO1xuYXN5bmMgZnVuY3Rpb24gZ2V0RXJyb3JCeVR5cGUoZXYpIHtcbiAgICBjb25zdCB7IGlkLCBldmVudCB9ID0gZXY7XG4gICAgc3dpdGNoKGV2ZW50LnR5cGUpe1xuICAgICAgICBjYXNlIF9lcnJvcm92ZXJsYXlyZWR1Y2VyLkFDVElPTl9VTkhBTkRMRURfRVJST1I6XG4gICAgICAgIGNhc2UgX2Vycm9yb3ZlcmxheXJlZHVjZXIuQUNUSU9OX1VOSEFORExFRF9SRUpFQ1RJT046XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZHlSdW50aW1lRXJyb3IgPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBydW50aW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXZlbnQucmVhc29uLFxuICAgICAgICAgICAgICAgICAgICBmcmFtZXM6IGF3YWl0ICgwLCBfc3RhY2tmcmFtZS5nZXRPcmlnaW5hbFN0YWNrRnJhbWVzKShldmVudC5mcmFtZXMsICgwLCBfbm9kZVN0YWNrRnJhbWVzLmdldEVycm9yU291cmNlKShldmVudC5yZWFzb24pLCBldmVudC5yZWFzb24udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBfZXJyb3JvdmVybGF5cmVkdWNlci5BQ1RJT05fVU5IQU5ETEVEX0VSUk9SKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWR5UnVudGltZUVycm9yLmNvbXBvbmVudFN0YWNrRnJhbWVzID0gZXZlbnQuY29tcG9uZW50U3RhY2tGcmFtZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZWFkeVJ1bnRpbWVFcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IF8gPSBldmVudDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIHN5c3RlbSBpbnZhcmlhbnQgdmlvbGF0aW9uXCIpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRFcnJvckJ5VHlwZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZ2V0RXJyb3JCeVR5cGUiLCJfZXJyb3JvdmVybGF5cmVkdWNlciIsInJlcXVpcmUiLCJfbm9kZVN0YWNrRnJhbWVzIiwiX3N0YWNrZnJhbWUiLCJldiIsImlkIiwiZXZlbnQiLCJ0eXBlIiwiQUNUSU9OX1VOSEFORExFRF9FUlJPUiIsIkFDVElPTl9VTkhBTkRMRURfUkVKRUNUSU9OIiwicmVhZHlSdW50aW1lRXJyb3IiLCJydW50aW1lIiwiZXJyb3IiLCJyZWFzb24iLCJmcmFtZXMiLCJnZXRPcmlnaW5hbFN0YWNrRnJhbWVzIiwiZ2V0RXJyb3JTb3VyY2UiLCJ0b1N0cmluZyIsImNvbXBvbmVudFN0YWNrRnJhbWVzIiwiXyIsIkVycm9yIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js": +/*!************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js ***! + \************************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"groupStackFramesByFramework\", ({\n enumerable: true,\n get: function() {\n return groupStackFramesByFramework;\n }\n}));\n/**\n * Get the origin framework of the stack frame by package name.\n */ function getFramework(sourcePackage) {\n if (!sourcePackage) return undefined;\n if (/^(react|react-dom|react-is|react-refresh|react-server-dom-webpack|react-server-dom-turbopack|scheduler)$/.test(sourcePackage)) {\n return \"react\";\n } else if (sourcePackage === \"next\") {\n return \"next\";\n }\n return undefined;\n}\nfunction groupStackFramesByFramework(stackFrames) {\n const stackFramesGroupedByFramework = [];\n for (const stackFrame of stackFrames){\n const currentGroup = stackFramesGroupedByFramework[stackFramesGroupedByFramework.length - 1];\n const framework = getFramework(stackFrame.sourcePackage);\n if (currentGroup && currentGroup.framework === framework) {\n currentGroup.stackFrames.push(stackFrame);\n } else {\n stackFramesGroupedByFramework.push({\n framework: framework,\n stackFrames: [\n stackFrame\n ]\n });\n }\n }\n return stackFramesGroupedByFramework;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=group-stack-frames-by-framework.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9ncm91cC1zdGFjay1mcmFtZXMtYnktZnJhbWV3b3JrLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwrREFBOEQ7SUFDMURJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRjs7Q0FFQyxHQUFHLFNBQVNDLGFBQWFDLGFBQWE7SUFDbkMsSUFBSSxDQUFDQSxlQUFlLE9BQU9DO0lBQzNCLElBQUksMkdBQTJHQyxJQUFJLENBQUNGLGdCQUFnQjtRQUNoSSxPQUFPO0lBQ1gsT0FBTyxJQUFJQSxrQkFBa0IsUUFBUTtRQUNqQyxPQUFPO0lBQ1g7SUFDQSxPQUFPQztBQUNYO0FBQ0EsU0FBU0gsNEJBQTRCSyxXQUFXO0lBQzVDLE1BQU1DLGdDQUFnQyxFQUFFO0lBQ3hDLEtBQUssTUFBTUMsY0FBY0YsWUFBWTtRQUNqQyxNQUFNRyxlQUFlRiw2QkFBNkIsQ0FBQ0EsOEJBQThCRyxNQUFNLEdBQUcsRUFBRTtRQUM1RixNQUFNQyxZQUFZVCxhQUFhTSxXQUFXTCxhQUFhO1FBQ3ZELElBQUlNLGdCQUFnQkEsYUFBYUUsU0FBUyxLQUFLQSxXQUFXO1lBQ3RERixhQUFhSCxXQUFXLENBQUNNLElBQUksQ0FBQ0o7UUFDbEMsT0FBTztZQUNIRCw4QkFBOEJLLElBQUksQ0FBQztnQkFDL0JELFdBQVdBO2dCQUNYTCxhQUFhO29CQUNURTtpQkFDSDtZQUNMO1FBQ0o7SUFDSjtJQUNBLE9BQU9EO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT1YsUUFBUWdCLE9BQU8sS0FBSyxjQUFlLE9BQU9oQixRQUFRZ0IsT0FBTyxLQUFLLFlBQVloQixRQUFRZ0IsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPaEIsUUFBUWdCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktuQixPQUFPQyxjQUFjLENBQUNDLFFBQVFnQixPQUFPLEVBQUUsY0FBYztRQUFFZixPQUFPO0lBQUs7SUFDbkVILE9BQU9vQixNQUFNLENBQUNsQixRQUFRZ0IsT0FBTyxFQUFFaEI7SUFDL0JtQixPQUFPbkIsT0FBTyxHQUFHQSxRQUFRZ0IsT0FBTztBQUNsQyxFQUVBLDJEQUEyRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvZ3JvdXAtc3RhY2stZnJhbWVzLWJ5LWZyYW1ld29yay5qcz9iODg5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ3JvdXBTdGFja0ZyYW1lc0J5RnJhbWV3b3JrXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBncm91cFN0YWNrRnJhbWVzQnlGcmFtZXdvcms7XG4gICAgfVxufSk7XG4vKipcbiAqIEdldCB0aGUgb3JpZ2luIGZyYW1ld29yayBvZiB0aGUgc3RhY2sgZnJhbWUgYnkgcGFja2FnZSBuYW1lLlxuICovIGZ1bmN0aW9uIGdldEZyYW1ld29yayhzb3VyY2VQYWNrYWdlKSB7XG4gICAgaWYgKCFzb3VyY2VQYWNrYWdlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICgvXihyZWFjdHxyZWFjdC1kb218cmVhY3QtaXN8cmVhY3QtcmVmcmVzaHxyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2t8cmVhY3Qtc2VydmVyLWRvbS10dXJib3BhY2t8c2NoZWR1bGVyKSQvLnRlc3Qoc291cmNlUGFja2FnZSkpIHtcbiAgICAgICAgcmV0dXJuIFwicmVhY3RcIjtcbiAgICB9IGVsc2UgaWYgKHNvdXJjZVBhY2thZ2UgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIHJldHVybiBcIm5leHRcIjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdyb3VwU3RhY2tGcmFtZXNCeUZyYW1ld29yayhzdGFja0ZyYW1lcykge1xuICAgIGNvbnN0IHN0YWNrRnJhbWVzR3JvdXBlZEJ5RnJhbWV3b3JrID0gW107XG4gICAgZm9yIChjb25zdCBzdGFja0ZyYW1lIG9mIHN0YWNrRnJhbWVzKXtcbiAgICAgICAgY29uc3QgY3VycmVudEdyb3VwID0gc3RhY2tGcmFtZXNHcm91cGVkQnlGcmFtZXdvcmtbc3RhY2tGcmFtZXNHcm91cGVkQnlGcmFtZXdvcmsubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IGZyYW1ld29yayA9IGdldEZyYW1ld29yayhzdGFja0ZyYW1lLnNvdXJjZVBhY2thZ2UpO1xuICAgICAgICBpZiAoY3VycmVudEdyb3VwICYmIGN1cnJlbnRHcm91cC5mcmFtZXdvcmsgPT09IGZyYW1ld29yaykge1xuICAgICAgICAgICAgY3VycmVudEdyb3VwLnN0YWNrRnJhbWVzLnB1c2goc3RhY2tGcmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFja0ZyYW1lc0dyb3VwZWRCeUZyYW1ld29yay5wdXNoKHtcbiAgICAgICAgICAgICAgICBmcmFtZXdvcms6IGZyYW1ld29yayxcbiAgICAgICAgICAgICAgICBzdGFja0ZyYW1lczogW1xuICAgICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YWNrRnJhbWVzR3JvdXBlZEJ5RnJhbWV3b3JrO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ncm91cC1zdGFjay1mcmFtZXMtYnktZnJhbWV3b3JrLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJncm91cFN0YWNrRnJhbWVzQnlGcmFtZXdvcmsiLCJnZXRGcmFtZXdvcmsiLCJzb3VyY2VQYWNrYWdlIiwidW5kZWZpbmVkIiwidGVzdCIsInN0YWNrRnJhbWVzIiwic3RhY2tGcmFtZXNHcm91cGVkQnlGcmFtZXdvcmsiLCJzdGFja0ZyYW1lIiwiY3VycmVudEdyb3VwIiwibGVuZ3RoIiwiZnJhbWV3b3JrIiwicHVzaCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js": +/*!*************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js ***! + \*************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n hydrationErrorWarning: function() {\n return hydrationErrorWarning;\n },\n hydrationErrorComponentStack: function() {\n return hydrationErrorComponentStack;\n },\n patchConsoleError: function() {\n return patchConsoleError;\n }\n});\nlet hydrationErrorWarning;\nlet hydrationErrorComponentStack;\n// https://github.com/facebook/react/blob/main/packages/react-dom/src/__tests__/ReactDOMHydrationDiff-test.js used as a reference\nconst knownHydrationWarnings = new Set([\n 'Warning: Text content did not match. Server: \"%s\" Client: \"%s\"%s',\n \"Warning: Expected server HTML to contain a matching <%s> in <%s>.%s\",\n 'Warning: Expected server HTML to contain a matching text node for \"%s\" in <%s>.%s',\n \"Warning: Did not expect server HTML to contain a <%s> in <%s>.%s\",\n 'Warning: Did not expect server HTML to contain the text node \"%s\" in <%s>.%s'\n]);\nfunction patchConsoleError() {\n const prev = console.error;\n console.error = function(msg, serverContent, clientContent, componentStack) {\n if (knownHydrationWarnings.has(msg)) {\n hydrationErrorWarning = msg.replace(\"%s\", serverContent).replace(\"%s\", clientContent).replace(\"%s\", \"\");\n hydrationErrorComponentStack = componentStack;\n }\n // @ts-expect-error argument is defined\n prev.apply(console, arguments);\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hydration-error-info.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9oeWRyYXRpb24tZXJyb3ItaW5mby5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUlOO0FBQ0EsU0FBU0ksUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVYsT0FBT0MsY0FBYyxDQUFDUSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFOLFNBQVM7SUFDYkcsdUJBQXVCO1FBQ25CLE9BQU9BO0lBQ1g7SUFDQUMsOEJBQThCO1FBQzFCLE9BQU9BO0lBQ1g7SUFDQUMsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsSUFBSUY7QUFDSixJQUFJQztBQUNKLGlJQUFpSTtBQUNqSSxNQUFNUSx5QkFBeUIsSUFBSUMsSUFBSTtJQUNuQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0g7QUFDRCxTQUFTUjtJQUNMLE1BQU1TLE9BQU9DLFFBQVFDLEtBQUs7SUFDMUJELFFBQVFDLEtBQUssR0FBRyxTQUFTQyxHQUFHLEVBQUVDLGFBQWEsRUFBRUMsYUFBYSxFQUFFQyxjQUFjO1FBQ3RFLElBQUlSLHVCQUF1QlMsR0FBRyxDQUFDSixNQUFNO1lBQ2pDZCx3QkFBd0JjLElBQUlLLE9BQU8sQ0FBQyxNQUFNSixlQUFlSSxPQUFPLENBQUMsTUFBTUgsZUFBZUcsT0FBTyxDQUFDLE1BQU07WUFDcEdsQiwrQkFBK0JnQjtRQUNuQztRQUNBLHVDQUF1QztRQUN2Q04sS0FBS1MsS0FBSyxDQUFDUixTQUFTUztJQUN4QjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU94QixRQUFReUIsT0FBTyxLQUFLLGNBQWUsT0FBT3pCLFFBQVF5QixPQUFPLEtBQUssWUFBWXpCLFFBQVF5QixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU96QixRQUFReUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzVCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXlCLE9BQU8sRUFBRSxjQUFjO1FBQUV4QixPQUFPO0lBQUs7SUFDbkVILE9BQU82QixNQUFNLENBQUMzQixRQUFReUIsT0FBTyxFQUFFekI7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUXlCLE9BQU87QUFDbEMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9oZWxwZXJzL2h5ZHJhdGlvbi1lcnJvci1pbmZvLmpzPzMyYWEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBoeWRyYXRpb25FcnJvcldhcm5pbmc6IG51bGwsXG4gICAgaHlkcmF0aW9uRXJyb3JDb21wb25lbnRTdGFjazogbnVsbCxcbiAgICBwYXRjaENvbnNvbGVFcnJvcjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBoeWRyYXRpb25FcnJvcldhcm5pbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaHlkcmF0aW9uRXJyb3JXYXJuaW5nO1xuICAgIH0sXG4gICAgaHlkcmF0aW9uRXJyb3JDb21wb25lbnRTdGFjazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoeWRyYXRpb25FcnJvckNvbXBvbmVudFN0YWNrO1xuICAgIH0sXG4gICAgcGF0Y2hDb25zb2xlRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcGF0Y2hDb25zb2xlRXJyb3I7XG4gICAgfVxufSk7XG5sZXQgaHlkcmF0aW9uRXJyb3JXYXJuaW5nO1xubGV0IGh5ZHJhdGlvbkVycm9yQ29tcG9uZW50U3RhY2s7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9tYWluL3BhY2thZ2VzL3JlYWN0LWRvbS9zcmMvX190ZXN0c19fL1JlYWN0RE9NSHlkcmF0aW9uRGlmZi10ZXN0LmpzIHVzZWQgYXMgYSByZWZlcmVuY2VcbmNvbnN0IGtub3duSHlkcmF0aW9uV2FybmluZ3MgPSBuZXcgU2V0KFtcbiAgICAnV2FybmluZzogVGV4dCBjb250ZW50IGRpZCBub3QgbWF0Y2guIFNlcnZlcjogXCIlc1wiIENsaWVudDogXCIlc1wiJXMnLFxuICAgIFwiV2FybmluZzogRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIDwlcz4gaW4gPCVzPi4lc1wiLFxuICAgICdXYXJuaW5nOiBFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgdGV4dCBub2RlIGZvciBcIiVzXCIgaW4gPCVzPi4lcycsXG4gICAgXCJXYXJuaW5nOiBEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgPCVzPiBpbiA8JXM+LiVzXCIsXG4gICAgJ1dhcm5pbmc6IERpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gdGhlIHRleHQgbm9kZSBcIiVzXCIgaW4gPCVzPi4lcydcbl0pO1xuZnVuY3Rpb24gcGF0Y2hDb25zb2xlRXJyb3IoKSB7XG4gICAgY29uc3QgcHJldiA9IGNvbnNvbGUuZXJyb3I7XG4gICAgY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uKG1zZywgc2VydmVyQ29udGVudCwgY2xpZW50Q29udGVudCwgY29tcG9uZW50U3RhY2spIHtcbiAgICAgICAgaWYgKGtub3duSHlkcmF0aW9uV2FybmluZ3MuaGFzKG1zZykpIHtcbiAgICAgICAgICAgIGh5ZHJhdGlvbkVycm9yV2FybmluZyA9IG1zZy5yZXBsYWNlKFwiJXNcIiwgc2VydmVyQ29udGVudCkucmVwbGFjZShcIiVzXCIsIGNsaWVudENvbnRlbnQpLnJlcGxhY2UoXCIlc1wiLCBcIlwiKTtcbiAgICAgICAgICAgIGh5ZHJhdGlvbkVycm9yQ29tcG9uZW50U3RhY2sgPSBjb21wb25lbnRTdGFjaztcbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGFyZ3VtZW50IGlzIGRlZmluZWRcbiAgICAgICAgcHJldi5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpO1xuICAgIH07XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWh5ZHJhdGlvbi1lcnJvci1pbmZvLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsImh5ZHJhdGlvbkVycm9yV2FybmluZyIsImh5ZHJhdGlvbkVycm9yQ29tcG9uZW50U3RhY2siLCJwYXRjaENvbnNvbGVFcnJvciIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsImtub3duSHlkcmF0aW9uV2FybmluZ3MiLCJTZXQiLCJwcmV2IiwiY29uc29sZSIsImVycm9yIiwibXNnIiwic2VydmVyQ29udGVudCIsImNsaWVudENvbnRlbnQiLCJjb21wb25lbnRTdGFjayIsImhhcyIsInJlcGxhY2UiLCJhcHBseSIsImFyZ3VtZW50cyIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js": +/*!********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js ***! + \********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getFilesystemFrame: function() {\n return getFilesystemFrame;\n },\n getErrorSource: function() {\n return getErrorSource;\n },\n decorateServerError: function() {\n return decorateServerError;\n },\n getServerError: function() {\n return getServerError;\n }\n});\nconst _stacktraceparser = __webpack_require__(/*! next/dist/compiled/stacktrace-parser */ \"(app-pages-browser)/./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\");\nfunction getFilesystemFrame(frame) {\n const f = {\n ...frame\n };\n if (typeof f.file === \"string\") {\n if (f.file.startsWith(\"/\") || // Win32:\n /^[a-z]:\\\\/i.test(f.file) || // Win32 UNC:\n f.file.startsWith(\"\\\\\\\\\")) {\n f.file = \"file://\" + f.file;\n }\n }\n return f;\n}\nconst symbolError = Symbol(\"NextjsError\");\nfunction getErrorSource(error) {\n return error[symbolError] || null;\n}\nfunction decorateServerError(error, type) {\n Object.defineProperty(error, symbolError, {\n writable: false,\n enumerable: false,\n configurable: false,\n value: type\n });\n}\nfunction getServerError(error, type) {\n let n;\n try {\n throw new Error(error.message);\n } catch (e) {\n n = e;\n }\n n.name = error.name;\n try {\n n.stack = n.toString() + \"\\n\" + (0, _stacktraceparser.parse)(error.stack).map(getFilesystemFrame).map((f)=>{\n let str = \" at \" + f.methodName;\n if (f.file) {\n let loc = f.file;\n if (f.lineNumber) {\n loc += \":\" + f.lineNumber;\n if (f.column) {\n loc += \":\" + f.column;\n }\n }\n str += \" (\" + loc + \")\";\n }\n return str;\n }).join(\"\\n\");\n } catch (e) {\n n.stack = error.stack;\n }\n decorateServerError(n, type);\n return n;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=nodeStackFrames.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9ub2RlU3RhY2tGcmFtZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FLTjtBQUNBLFNBQVNLLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlYLE9BQU9DLGNBQWMsQ0FBQ1MsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRUCxTQUFTO0lBQ2JHLG9CQUFvQjtRQUNoQixPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7SUFDQUMscUJBQXFCO1FBQ2pCLE9BQU9BO0lBQ1g7SUFDQUMsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sb0JBQW9CQyxtQkFBT0EsQ0FBQywrSUFBc0M7QUFDeEUsU0FBU1gsbUJBQW1CWSxLQUFLO0lBQzdCLE1BQU1DLElBQUk7UUFDTixHQUFHRCxLQUFLO0lBQ1o7SUFDQSxJQUFJLE9BQU9DLEVBQUVDLElBQUksS0FBSyxVQUFVO1FBQzVCLElBQ0FELEVBQUVDLElBQUksQ0FBQ0MsVUFBVSxDQUFDLFFBQVEsU0FBUztRQUNuQyxhQUFhQyxJQUFJLENBQUNILEVBQUVDLElBQUksS0FBSyxhQUFhO1FBQzFDRCxFQUFFQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxTQUFTO1lBQ3ZCRixFQUFFQyxJQUFJLEdBQUcsWUFBWUQsRUFBRUMsSUFBSTtRQUMvQjtJQUNKO0lBQ0EsT0FBT0Q7QUFDWDtBQUNBLE1BQU1JLGNBQWNDLE9BQU87QUFDM0IsU0FBU2pCLGVBQWVrQixLQUFLO0lBQ3pCLE9BQU9BLEtBQUssQ0FBQ0YsWUFBWSxJQUFJO0FBQ2pDO0FBQ0EsU0FBU2Ysb0JBQW9CaUIsS0FBSyxFQUFFQyxJQUFJO0lBQ3BDekIsT0FBT0MsY0FBYyxDQUFDdUIsT0FBT0YsYUFBYTtRQUN0Q0ksVUFBVTtRQUNWYixZQUFZO1FBQ1pjLGNBQWM7UUFDZHhCLE9BQU9zQjtJQUNYO0FBQ0o7QUFDQSxTQUFTakIsZUFBZWdCLEtBQUssRUFBRUMsSUFBSTtJQUMvQixJQUFJRztJQUNKLElBQUk7UUFDQSxNQUFNLElBQUlDLE1BQU1MLE1BQU1NLE9BQU87SUFDakMsRUFBRSxPQUFPQyxHQUFHO1FBQ1JILElBQUlHO0lBQ1I7SUFDQUgsRUFBRWhCLElBQUksR0FBR1ksTUFBTVosSUFBSTtJQUNuQixJQUFJO1FBQ0FnQixFQUFFSSxLQUFLLEdBQUdKLEVBQUVLLFFBQVEsS0FBSyxPQUFPLENBQUMsR0FBR2xCLGtCQUFrQm1CLEtBQUssRUFBRVYsTUFBTVEsS0FBSyxFQUFFRyxHQUFHLENBQUM5QixvQkFBb0I4QixHQUFHLENBQUMsQ0FBQ2pCO1lBQ25HLElBQUlrQixNQUFNLFlBQVlsQixFQUFFbUIsVUFBVTtZQUNsQyxJQUFJbkIsRUFBRUMsSUFBSSxFQUFFO2dCQUNSLElBQUltQixNQUFNcEIsRUFBRUMsSUFBSTtnQkFDaEIsSUFBSUQsRUFBRXFCLFVBQVUsRUFBRTtvQkFDZEQsT0FBTyxNQUFNcEIsRUFBRXFCLFVBQVU7b0JBQ3pCLElBQUlyQixFQUFFc0IsTUFBTSxFQUFFO3dCQUNWRixPQUFPLE1BQU1wQixFQUFFc0IsTUFBTTtvQkFDekI7Z0JBQ0o7Z0JBQ0FKLE9BQU8sT0FBT0UsTUFBTTtZQUN4QjtZQUNBLE9BQU9GO1FBQ1gsR0FBR0ssSUFBSSxDQUFDO0lBQ1osRUFBRSxPQUFPVixHQUFHO1FBQ1JILEVBQUVJLEtBQUssR0FBR1IsTUFBTVEsS0FBSztJQUN6QjtJQUNBekIsb0JBQW9CcUIsR0FBR0g7SUFDdkIsT0FBT0c7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPMUIsUUFBUXdDLE9BQU8sS0FBSyxjQUFlLE9BQU94QyxRQUFRd0MsT0FBTyxLQUFLLFlBQVl4QyxRQUFRd0MsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPeEMsUUFBUXdDLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckszQyxPQUFPQyxjQUFjLENBQUNDLFFBQVF3QyxPQUFPLEVBQUUsY0FBYztRQUFFdkMsT0FBTztJQUFLO0lBQ25FSCxPQUFPNEMsTUFBTSxDQUFDMUMsUUFBUXdDLE9BQU8sRUFBRXhDO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVF3QyxPQUFPO0FBQ2xDLEVBRUEsMkNBQTJDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9ub2RlU3RhY2tGcmFtZXMuanM/OWMzZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGdldEZpbGVzeXN0ZW1GcmFtZTogbnVsbCxcbiAgICBnZXRFcnJvclNvdXJjZTogbnVsbCxcbiAgICBkZWNvcmF0ZVNlcnZlckVycm9yOiBudWxsLFxuICAgIGdldFNlcnZlckVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGdldEZpbGVzeXN0ZW1GcmFtZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRGaWxlc3lzdGVtRnJhbWU7XG4gICAgfSxcbiAgICBnZXRFcnJvclNvdXJjZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRFcnJvclNvdXJjZTtcbiAgICB9LFxuICAgIGRlY29yYXRlU2VydmVyRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGVjb3JhdGVTZXJ2ZXJFcnJvcjtcbiAgICB9LFxuICAgIGdldFNlcnZlckVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFNlcnZlckVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgX3N0YWNrdHJhY2VwYXJzZXIgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3N0YWNrdHJhY2UtcGFyc2VyXCIpO1xuZnVuY3Rpb24gZ2V0RmlsZXN5c3RlbUZyYW1lKGZyYW1lKSB7XG4gICAgY29uc3QgZiA9IHtcbiAgICAgICAgLi4uZnJhbWVcbiAgICB9O1xuICAgIGlmICh0eXBlb2YgZi5maWxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICgvLyBQb3NpeDpcbiAgICAgICAgZi5maWxlLnN0YXJ0c1dpdGgoXCIvXCIpIHx8IC8vIFdpbjMyOlxuICAgICAgICAvXlthLXpdOlxcXFwvaS50ZXN0KGYuZmlsZSkgfHwgLy8gV2luMzIgVU5DOlxuICAgICAgICBmLmZpbGUuc3RhcnRzV2l0aChcIlxcXFxcXFxcXCIpKSB7XG4gICAgICAgICAgICBmLmZpbGUgPSBcImZpbGU6Ly9cIiArIGYuZmlsZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZjtcbn1cbmNvbnN0IHN5bWJvbEVycm9yID0gU3ltYm9sKFwiTmV4dGpzRXJyb3JcIik7XG5mdW5jdGlvbiBnZXRFcnJvclNvdXJjZShlcnJvcikge1xuICAgIHJldHVybiBlcnJvcltzeW1ib2xFcnJvcl0gfHwgbnVsbDtcbn1cbmZ1bmN0aW9uIGRlY29yYXRlU2VydmVyRXJyb3IoZXJyb3IsIHR5cGUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsIHN5bWJvbEVycm9yLCB7XG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiB0eXBlXG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXRTZXJ2ZXJFcnJvcihlcnJvciwgdHlwZSkge1xuICAgIGxldCBuO1xuICAgIHRyeSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG4gPSBlO1xuICAgIH1cbiAgICBuLm5hbWUgPSBlcnJvci5uYW1lO1xuICAgIHRyeSB7XG4gICAgICAgIG4uc3RhY2sgPSBuLnRvU3RyaW5nKCkgKyBcIlxcblwiICsgKDAsIF9zdGFja3RyYWNlcGFyc2VyLnBhcnNlKShlcnJvci5zdGFjaykubWFwKGdldEZpbGVzeXN0ZW1GcmFtZSkubWFwKChmKT0+e1xuICAgICAgICAgICAgbGV0IHN0ciA9IFwiICAgIGF0IFwiICsgZi5tZXRob2ROYW1lO1xuICAgICAgICAgICAgaWYgKGYuZmlsZSkge1xuICAgICAgICAgICAgICAgIGxldCBsb2MgPSBmLmZpbGU7XG4gICAgICAgICAgICAgICAgaWYgKGYubGluZU51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBsb2MgKz0gXCI6XCIgKyBmLmxpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmLmNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jICs9IFwiOlwiICsgZi5jb2x1bW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyICs9IFwiIChcIiArIGxvYyArIFwiKVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfSkuam9pbihcIlxcblwiKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIG4uc3RhY2sgPSBlcnJvci5zdGFjaztcbiAgICB9XG4gICAgZGVjb3JhdGVTZXJ2ZXJFcnJvcihuLCB0eXBlKTtcbiAgICByZXR1cm4gbjtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9kZVN0YWNrRnJhbWVzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsImdldEZpbGVzeXN0ZW1GcmFtZSIsImdldEVycm9yU291cmNlIiwiZGVjb3JhdGVTZXJ2ZXJFcnJvciIsImdldFNlcnZlckVycm9yIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX3N0YWNrdHJhY2VwYXJzZXIiLCJyZXF1aXJlIiwiZnJhbWUiLCJmIiwiZmlsZSIsInN0YXJ0c1dpdGgiLCJ0ZXN0Iiwic3ltYm9sRXJyb3IiLCJTeW1ib2wiLCJlcnJvciIsInR5cGUiLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsIm4iLCJFcnJvciIsIm1lc3NhZ2UiLCJlIiwic3RhY2siLCJ0b1N0cmluZyIsInBhcnNlIiwibWFwIiwic3RyIiwibWV0aG9kTmFtZSIsImxvYyIsImxpbmVOdW1iZXIiLCJjb2x1bW4iLCJqb2luIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js": +/*!******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js ***! + \******************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"noop\", ({\n enumerable: true,\n get: function() {\n return noop;\n }\n}));\nfunction noop(strings) {\n for(var _len = arguments.length, keys = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n keys[_key - 1] = arguments[_key];\n }\n const lastIndex = strings.length - 1;\n return strings.slice(0, lastIndex).reduce((p, s, i)=>p + s + keys[i], \"\") + strings[lastIndex];\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=noop-template.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9ub29wLXRlbXBsYXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx3Q0FBdUM7SUFDbkNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixTQUFTQSxLQUFLQyxPQUFPO0lBQ2pCLElBQUksSUFBSUMsT0FBT0MsVUFBVUMsTUFBTSxFQUFFQyxPQUFPLElBQUlDLE1BQU1KLE9BQU8sSUFBSUEsT0FBTyxJQUFJLElBQUlLLE9BQU8sR0FBR0EsT0FBT0wsTUFBTUssT0FBTztRQUN0R0YsSUFBSSxDQUFDRSxPQUFPLEVBQUUsR0FBR0osU0FBUyxDQUFDSSxLQUFLO0lBQ3BDO0lBQ0EsTUFBTUMsWUFBWVAsUUFBUUcsTUFBTSxHQUFHO0lBQ25DLE9BQU9ILFFBQVFRLEtBQUssQ0FBQyxHQUFHRCxXQUFXRSxNQUFNLENBQUMsQ0FBQ0MsR0FBR0MsR0FBR0MsSUFBSUYsSUFBSUMsSUFBSVAsSUFBSSxDQUFDUSxFQUFFLEVBQUUsTUFBTVosT0FBTyxDQUFDTyxVQUFVO0FBQ2xHO0FBRUEsSUFBSSxDQUFDLE9BQU9aLFFBQVFrQixPQUFPLEtBQUssY0FBZSxPQUFPbEIsUUFBUWtCLE9BQU8sS0FBSyxZQUFZbEIsUUFBUWtCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2xCLFFBQVFrQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLckIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRa0IsT0FBTyxFQUFFLGNBQWM7UUFBRWpCLE9BQU87SUFBSztJQUNuRUgsT0FBT3NCLE1BQU0sQ0FBQ3BCLFFBQVFrQixPQUFPLEVBQUVsQjtJQUMvQnFCLE9BQU9yQixPQUFPLEdBQUdBLFFBQVFrQixPQUFPO0FBQ2xDLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9ub29wLXRlbXBsYXRlLmpzP2U2NWYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJub29wXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBub29wO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gbm9vcChzdHJpbmdzKSB7XG4gICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwga2V5cyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAga2V5c1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIGNvbnN0IGxhc3RJbmRleCA9IHN0cmluZ3MubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gc3RyaW5ncy5zbGljZSgwLCBsYXN0SW5kZXgpLnJlZHVjZSgocCwgcywgaSk9PnAgKyBzICsga2V5c1tpXSwgXCJcIikgKyBzdHJpbmdzW2xhc3RJbmRleF07XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vb3AtdGVtcGxhdGUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIm5vb3AiLCJzdHJpbmdzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImtleXMiLCJBcnJheSIsIl9rZXkiLCJsYXN0SW5kZXgiLCJzbGljZSIsInJlZHVjZSIsInAiLCJzIiwiaSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js": +/*!**************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js ***! + \**************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseComponentStack\", ({\n enumerable: true,\n get: function() {\n return parseComponentStack;\n }\n}));\nvar LocationType;\n(function(LocationType) {\n LocationType[\"FILE\"] = \"file\";\n LocationType[\"WEBPACK_INTERNAL\"] = \"webpack-internal\";\n LocationType[\"HTTP\"] = \"http\";\n LocationType[\"PROTOCOL_RELATIVE\"] = \"protocol-relative\";\n LocationType[\"UNKNOWN\"] = \"unknown\";\n})(LocationType || (LocationType = {}));\n/**\n * Get the type of frame line based on the location\n */ function getLocationType(location) {\n if (location.startsWith(\"file://\")) {\n return \"file\";\n }\n if (location.startsWith(\"webpack-internal://\")) {\n return \"webpack-internal\";\n }\n if (location.startsWith(\"http://\") || location.startsWith(\"https://\")) {\n return \"http\";\n }\n if (location.startsWith(\"//\")) {\n return \"protocol-relative\";\n }\n return \"unknown\";\n}\nfunction parseStackFrameLocation(location) {\n const locationType = getLocationType(location);\n const modulePath = location == null ? void 0 : location.replace(/^(webpack-internal:\\/\\/\\/|file:\\/\\/)(\\(.*\\)\\/)?/, \"\");\n var _modulePath_match;\n const [, file, lineNumber, column] = (_modulePath_match = modulePath == null ? void 0 : modulePath.match(/^(.+):(\\d+):(\\d+)/)) != null ? _modulePath_match : [];\n switch(locationType){\n case \"file\":\n case \"webpack-internal\":\n return {\n canOpenInEditor: true,\n file,\n lineNumber: lineNumber ? Number(lineNumber) : undefined,\n column: column ? Number(column) : undefined\n };\n // When the location is a URL we only show the file\n // TODO: Resolve http(s) URLs through sourcemaps\n case \"http\":\n case \"protocol-relative\":\n case \"unknown\":\n default:\n {\n return {\n canOpenInEditor: false\n };\n }\n }\n}\nfunction parseComponentStack(componentStack) {\n const componentStackFrames = [];\n for (const line of componentStack.trim().split(\"\\n\")){\n // Get component and file from the component stack line\n const match = /at ([^ ]+)( \\((.*)\\))?/.exec(line);\n if (match == null ? void 0 : match[1]) {\n const component = match[1];\n const location = match[3];\n if (!location) {\n componentStackFrames.push({\n canOpenInEditor: false,\n component\n });\n continue;\n }\n // Stop parsing the component stack if we reach a Next.js component\n if (location == null ? void 0 : location.includes(\"next/dist\")) {\n break;\n }\n const frameLocation = parseStackFrameLocation(location);\n componentStackFrames.push({\n component,\n ...frameLocation\n });\n }\n }\n return componentStackFrames;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=parse-component-stack.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9wYXJzZS1jb21wb25lbnQtc3RhY2suanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHVEQUFzRDtJQUNsREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLElBQUlDO0FBQ0gsVUFBU0EsWUFBWTtJQUNsQkEsWUFBWSxDQUFDLE9BQU8sR0FBRztJQUN2QkEsWUFBWSxDQUFDLG1CQUFtQixHQUFHO0lBQ25DQSxZQUFZLENBQUMsT0FBTyxHQUFHO0lBQ3ZCQSxZQUFZLENBQUMsb0JBQW9CLEdBQUc7SUFDcENBLFlBQVksQ0FBQyxVQUFVLEdBQUc7QUFDOUIsR0FBR0EsZ0JBQWlCQSxDQUFBQSxlQUFlLENBQUM7QUFDcEM7O0NBRUMsR0FBRyxTQUFTQyxnQkFBZ0JDLFFBQVE7SUFDakMsSUFBSUEsU0FBU0MsVUFBVSxDQUFDLFlBQVk7UUFDaEMsT0FBTztJQUNYO0lBQ0EsSUFBSUQsU0FBU0MsVUFBVSxDQUFDLHdCQUF3QjtRQUM1QyxPQUFPO0lBQ1g7SUFDQSxJQUFJRCxTQUFTQyxVQUFVLENBQUMsY0FBY0QsU0FBU0MsVUFBVSxDQUFDLGFBQWE7UUFDbkUsT0FBTztJQUNYO0lBQ0EsSUFBSUQsU0FBU0MsVUFBVSxDQUFDLE9BQU87UUFDM0IsT0FBTztJQUNYO0lBQ0EsT0FBTztBQUNYO0FBQ0EsU0FBU0Msd0JBQXdCRixRQUFRO0lBQ3JDLE1BQU1HLGVBQWVKLGdCQUFnQkM7SUFDckMsTUFBTUksYUFBYUosWUFBWSxPQUFPLEtBQUssSUFBSUEsU0FBU0ssT0FBTyxDQUFDLG1EQUFtRDtJQUNuSCxJQUFJQztJQUNKLE1BQU0sR0FBR0MsTUFBTUMsWUFBWUMsT0FBTyxHQUFHLENBQUNILG9CQUFvQkYsY0FBYyxPQUFPLEtBQUssSUFBSUEsV0FBV00sS0FBSyxDQUFDLG9CQUFtQixLQUFNLE9BQU9KLG9CQUFvQixFQUFFO0lBQy9KLE9BQU9IO1FBQ0gsS0FBSztRQUNMLEtBQUs7WUFDRCxPQUFPO2dCQUNIUSxpQkFBaUI7Z0JBQ2pCSjtnQkFDQUMsWUFBWUEsYUFBYUksT0FBT0osY0FBY0s7Z0JBQzlDSixRQUFRQSxTQUFTRyxPQUFPSCxVQUFVSTtZQUN0QztRQUNKLG1EQUFtRDtRQUNuRCxnREFBZ0Q7UUFDaEQsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0w7WUFDSTtnQkFDSSxPQUFPO29CQUNIRixpQkFBaUI7Z0JBQ3JCO1lBQ0o7SUFDUjtBQUNKO0FBQ0EsU0FBU2Qsb0JBQW9CaUIsY0FBYztJQUN2QyxNQUFNQyx1QkFBdUIsRUFBRTtJQUMvQixLQUFLLE1BQU1DLFFBQVFGLGVBQWVHLElBQUksR0FBR0MsS0FBSyxDQUFDLE1BQU07UUFDakQsdURBQXVEO1FBQ3ZELE1BQU1SLFFBQVEseUJBQXlCUyxJQUFJLENBQUNIO1FBQzVDLElBQUlOLFNBQVMsT0FBTyxLQUFLLElBQUlBLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDbkMsTUFBTVUsWUFBWVYsS0FBSyxDQUFDLEVBQUU7WUFDMUIsTUFBTVYsV0FBV1UsS0FBSyxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDVixVQUFVO2dCQUNYZSxxQkFBcUJNLElBQUksQ0FBQztvQkFDdEJWLGlCQUFpQjtvQkFDakJTO2dCQUNKO2dCQUNBO1lBQ0o7WUFDQSxtRUFBbUU7WUFDbkUsSUFBSXBCLFlBQVksT0FBTyxLQUFLLElBQUlBLFNBQVNzQixRQUFRLENBQUMsY0FBYztnQkFDNUQ7WUFDSjtZQUNBLE1BQU1DLGdCQUFnQnJCLHdCQUF3QkY7WUFDOUNlLHFCQUFxQk0sSUFBSSxDQUFDO2dCQUN0QkQ7Z0JBQ0EsR0FBR0csYUFBYTtZQUNwQjtRQUNKO0lBQ0o7SUFDQSxPQUFPUjtBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU90QixRQUFRK0IsT0FBTyxLQUFLLGNBQWUsT0FBTy9CLFFBQVErQixPQUFPLEtBQUssWUFBWS9CLFFBQVErQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU8vQixRQUFRK0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2xDLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUStCLE9BQU8sRUFBRSxjQUFjO1FBQUU5QixPQUFPO0lBQUs7SUFDbkVILE9BQU9tQyxNQUFNLENBQUNqQyxRQUFRK0IsT0FBTyxFQUFFL0I7SUFDL0JrQyxPQUFPbEMsT0FBTyxHQUFHQSxRQUFRK0IsT0FBTztBQUNsQyxFQUVBLGlEQUFpRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvcGFyc2UtY29tcG9uZW50LXN0YWNrLmpzPzBjZjAiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZUNvbXBvbmVudFN0YWNrXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUNvbXBvbmVudFN0YWNrO1xuICAgIH1cbn0pO1xudmFyIExvY2F0aW9uVHlwZTtcbihmdW5jdGlvbihMb2NhdGlvblR5cGUpIHtcbiAgICBMb2NhdGlvblR5cGVbXCJGSUxFXCJdID0gXCJmaWxlXCI7XG4gICAgTG9jYXRpb25UeXBlW1wiV0VCUEFDS19JTlRFUk5BTFwiXSA9IFwid2VicGFjay1pbnRlcm5hbFwiO1xuICAgIExvY2F0aW9uVHlwZVtcIkhUVFBcIl0gPSBcImh0dHBcIjtcbiAgICBMb2NhdGlvblR5cGVbXCJQUk9UT0NPTF9SRUxBVElWRVwiXSA9IFwicHJvdG9jb2wtcmVsYXRpdmVcIjtcbiAgICBMb2NhdGlvblR5cGVbXCJVTktOT1dOXCJdID0gXCJ1bmtub3duXCI7XG59KShMb2NhdGlvblR5cGUgfHwgKExvY2F0aW9uVHlwZSA9IHt9KSk7XG4vKipcbiAqIEdldCB0aGUgdHlwZSBvZiBmcmFtZSBsaW5lIGJhc2VkIG9uIHRoZSBsb2NhdGlvblxuICovIGZ1bmN0aW9uIGdldExvY2F0aW9uVHlwZShsb2NhdGlvbikge1xuICAgIGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKFwiZmlsZTovL1wiKSkge1xuICAgICAgICByZXR1cm4gXCJmaWxlXCI7XG4gICAgfVxuICAgIGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKFwid2VicGFjay1pbnRlcm5hbDovL1wiKSkge1xuICAgICAgICByZXR1cm4gXCJ3ZWJwYWNrLWludGVybmFsXCI7XG4gICAgfVxuICAgIGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKFwiaHR0cDovL1wiKSB8fCBsb2NhdGlvbi5zdGFydHNXaXRoKFwiaHR0cHM6Ly9cIikpIHtcbiAgICAgICAgcmV0dXJuIFwiaHR0cFwiO1xuICAgIH1cbiAgICBpZiAobG9jYXRpb24uc3RhcnRzV2l0aChcIi8vXCIpKSB7XG4gICAgICAgIHJldHVybiBcInByb3RvY29sLXJlbGF0aXZlXCI7XG4gICAgfVxuICAgIHJldHVybiBcInVua25vd25cIjtcbn1cbmZ1bmN0aW9uIHBhcnNlU3RhY2tGcmFtZUxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gICAgY29uc3QgbG9jYXRpb25UeXBlID0gZ2V0TG9jYXRpb25UeXBlKGxvY2F0aW9uKTtcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gbG9jYXRpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGxvY2F0aW9uLnJlcGxhY2UoL14od2VicGFjay1pbnRlcm5hbDpcXC9cXC9cXC98ZmlsZTpcXC9cXC8pKFxcKC4qXFwpXFwvKT8vLCBcIlwiKTtcbiAgICB2YXIgX21vZHVsZVBhdGhfbWF0Y2g7XG4gICAgY29uc3QgWywgZmlsZSwgbGluZU51bWJlciwgY29sdW1uXSA9IChfbW9kdWxlUGF0aF9tYXRjaCA9IG1vZHVsZVBhdGggPT0gbnVsbCA/IHZvaWQgMCA6IG1vZHVsZVBhdGgubWF0Y2goL14oLispOihcXGQrKTooXFxkKykvKSkgIT0gbnVsbCA/IF9tb2R1bGVQYXRoX21hdGNoIDogW107XG4gICAgc3dpdGNoKGxvY2F0aW9uVHlwZSl7XG4gICAgICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICAgIGNhc2UgXCJ3ZWJwYWNrLWludGVybmFsXCI6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNhbk9wZW5JbkVkaXRvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIgPyBOdW1iZXIobGluZU51bWJlcikgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4gPyBOdW1iZXIoY29sdW1uKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgLy8gV2hlbiB0aGUgbG9jYXRpb24gaXMgYSBVUkwgd2Ugb25seSBzaG93IHRoZSBmaWxlXG4gICAgICAgIC8vIFRPRE86IFJlc29sdmUgaHR0cChzKSBVUkxzIHRocm91Z2ggc291cmNlbWFwc1xuICAgICAgICBjYXNlIFwiaHR0cFwiOlxuICAgICAgICBjYXNlIFwicHJvdG9jb2wtcmVsYXRpdmVcIjpcbiAgICAgICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBjYW5PcGVuSW5FZGl0b3I6IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZUNvbXBvbmVudFN0YWNrKGNvbXBvbmVudFN0YWNrKSB7XG4gICAgY29uc3QgY29tcG9uZW50U3RhY2tGcmFtZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgY29tcG9uZW50U3RhY2sudHJpbSgpLnNwbGl0KFwiXFxuXCIpKXtcbiAgICAgICAgLy8gR2V0IGNvbXBvbmVudCBhbmQgZmlsZSBmcm9tIHRoZSBjb21wb25lbnQgc3RhY2sgbGluZVxuICAgICAgICBjb25zdCBtYXRjaCA9IC9hdCAoW14gXSspKCBcXCgoLiopXFwpKT8vLmV4ZWMobGluZSk7XG4gICAgICAgIGlmIChtYXRjaCA9PSBudWxsID8gdm9pZCAwIDogbWF0Y2hbMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgY29uc3QgbG9jYXRpb24gPSBtYXRjaFszXTtcbiAgICAgICAgICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRTdGFja0ZyYW1lcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY2FuT3BlbkluRWRpdG9yOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdG9wIHBhcnNpbmcgdGhlIGNvbXBvbmVudCBzdGFjayBpZiB3ZSByZWFjaCBhIE5leHQuanMgY29tcG9uZW50XG4gICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGxvY2F0aW9uLmluY2x1ZGVzKFwibmV4dC9kaXN0XCIpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmcmFtZUxvY2F0aW9uID0gcGFyc2VTdGFja0ZyYW1lTG9jYXRpb24obG9jYXRpb24pO1xuICAgICAgICAgICAgY29tcG9uZW50U3RhY2tGcmFtZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LFxuICAgICAgICAgICAgICAgIC4uLmZyYW1lTG9jYXRpb25cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRTdGFja0ZyYW1lcztcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFyc2UtY29tcG9uZW50LXN0YWNrLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJwYXJzZUNvbXBvbmVudFN0YWNrIiwiTG9jYXRpb25UeXBlIiwiZ2V0TG9jYXRpb25UeXBlIiwibG9jYXRpb24iLCJzdGFydHNXaXRoIiwicGFyc2VTdGFja0ZyYW1lTG9jYXRpb24iLCJsb2NhdGlvblR5cGUiLCJtb2R1bGVQYXRoIiwicmVwbGFjZSIsIl9tb2R1bGVQYXRoX21hdGNoIiwiZmlsZSIsImxpbmVOdW1iZXIiLCJjb2x1bW4iLCJtYXRjaCIsImNhbk9wZW5JbkVkaXRvciIsIk51bWJlciIsInVuZGVmaW5lZCIsImNvbXBvbmVudFN0YWNrIiwiY29tcG9uZW50U3RhY2tGcmFtZXMiLCJsaW5lIiwidHJpbSIsInNwbGl0IiwiZXhlYyIsImNvbXBvbmVudCIsInB1c2giLCJpbmNsdWRlcyIsImZyYW1lTG9jYXRpb24iLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js": +/*!***************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js ***! + \***************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseStack\", ({\n enumerable: true,\n get: function() {\n return parseStack;\n }\n}));\nconst _stacktraceparser = __webpack_require__(/*! next/dist/compiled/stacktrace-parser */ \"(app-pages-browser)/./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\");\nconst regexNextStatic = /\\/_next(\\/static\\/.+)/;\nfunction parseStack(stack) {\n const frames = (0, _stacktraceparser.parse)(stack);\n return frames.map((frame)=>{\n try {\n const url = new URL(frame.file);\n const res = regexNextStatic.exec(url.pathname);\n if (res) {\n var _process_env___NEXT_DIST_DIR_replace, _process_env___NEXT_DIST_DIR;\n const distDir = (_process_env___NEXT_DIST_DIR = \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\.next\") == null ? void 0 : (_process_env___NEXT_DIST_DIR_replace = _process_env___NEXT_DIST_DIR.replace(/\\\\/g, \"/\")) == null ? void 0 : _process_env___NEXT_DIST_DIR_replace.replace(/\\/$/, \"\");\n if (distDir) {\n frame.file = \"file://\" + distDir.concat(res.pop());\n }\n }\n } catch (e) {}\n return frame;\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=parseStack.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9wYXJzZVN0YWNrLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw4Q0FBNkM7SUFDekNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxvQkFBb0JDLG1CQUFPQSxDQUFDLCtJQUFzQztBQUN4RSxNQUFNQyxrQkFBa0I7QUFDeEIsU0FBU0gsV0FBV0ksS0FBSztJQUNyQixNQUFNQyxTQUFTLENBQUMsR0FBR0osa0JBQWtCSyxLQUFLLEVBQUVGO0lBQzVDLE9BQU9DLE9BQU9FLEdBQUcsQ0FBQyxDQUFDQztRQUNmLElBQUk7WUFDQSxNQUFNQyxNQUFNLElBQUlDLElBQUlGLE1BQU1HLElBQUk7WUFDOUIsTUFBTUMsTUFBTVQsZ0JBQWdCVSxJQUFJLENBQUNKLElBQUlLLFFBQVE7WUFDN0MsSUFBSUYsS0FBSztnQkFDTCxJQUFJRyxzQ0FBc0NDO2dCQUMxQyxNQUFNQyxVQUFVLENBQUNELCtCQUErQkUsK0RBQTJCLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQ0gsdUNBQXVDQyw2QkFBNkJLLE9BQU8sQ0FBQyxPQUFPLElBQUcsS0FBTSxPQUFPLEtBQUssSUFBSU4scUNBQXFDTSxPQUFPLENBQUMsT0FBTztnQkFDalEsSUFBSUosU0FBUztvQkFDVFQsTUFBTUcsSUFBSSxHQUFHLFlBQVlNLFFBQVFLLE1BQU0sQ0FBQ1YsSUFBSVcsR0FBRztnQkFDbkQ7WUFDSjtRQUNKLEVBQUUsT0FBT0MsR0FBRyxDQUFDO1FBQ2IsT0FBT2hCO0lBQ1g7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPWixRQUFRNkIsT0FBTyxLQUFLLGNBQWUsT0FBTzdCLFFBQVE2QixPQUFPLEtBQUssWUFBWTdCLFFBQVE2QixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU83QixRQUFRNkIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2hDLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTZCLE9BQU8sRUFBRSxjQUFjO1FBQUU1QixPQUFPO0lBQUs7SUFDbkVILE9BQU9pQyxNQUFNLENBQUMvQixRQUFRNkIsT0FBTyxFQUFFN0I7SUFDL0JnQyxPQUFPaEMsT0FBTyxHQUFHQSxRQUFRNkIsT0FBTztBQUNsQyxFQUVBLHNDQUFzQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvcGFyc2VTdGFjay5qcz8zNTQyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VTdGFja1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcGFyc2VTdGFjaztcbiAgICB9XG59KTtcbmNvbnN0IF9zdGFja3RyYWNlcGFyc2VyID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9zdGFja3RyYWNlLXBhcnNlclwiKTtcbmNvbnN0IHJlZ2V4TmV4dFN0YXRpYyA9IC9cXC9fbmV4dChcXC9zdGF0aWNcXC8uKykvO1xuZnVuY3Rpb24gcGFyc2VTdGFjayhzdGFjaykge1xuICAgIGNvbnN0IGZyYW1lcyA9ICgwLCBfc3RhY2t0cmFjZXBhcnNlci5wYXJzZSkoc3RhY2spO1xuICAgIHJldHVybiBmcmFtZXMubWFwKChmcmFtZSk9PntcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoZnJhbWUuZmlsZSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSByZWdleE5leHRTdGF0aWMuZXhlYyh1cmwucGF0aG5hbWUpO1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHZhciBfcHJvY2Vzc19lbnZfX19ORVhUX0RJU1RfRElSX3JlcGxhY2UsIF9wcm9jZXNzX2Vudl9fX05FWFRfRElTVF9ESVI7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdERpciA9IChfcHJvY2Vzc19lbnZfX19ORVhUX0RJU1RfRElSID0gcHJvY2Vzcy5lbnYuX19ORVhUX0RJU1RfRElSKSA9PSBudWxsID8gdm9pZCAwIDogKF9wcm9jZXNzX2Vudl9fX05FWFRfRElTVF9ESVJfcmVwbGFjZSA9IF9wcm9jZXNzX2Vudl9fX05FWFRfRElTVF9ESVIucmVwbGFjZSgvXFxcXC9nLCBcIi9cIikpID09IG51bGwgPyB2b2lkIDAgOiBfcHJvY2Vzc19lbnZfX19ORVhUX0RJU1RfRElSX3JlcGxhY2UucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0RGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyYW1lLmZpbGUgPSBcImZpbGU6Ly9cIiArIGRpc3REaXIuY29uY2F0KHJlcy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICByZXR1cm4gZnJhbWU7XG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnNlU3RhY2suanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInBhcnNlU3RhY2siLCJfc3RhY2t0cmFjZXBhcnNlciIsInJlcXVpcmUiLCJyZWdleE5leHRTdGF0aWMiLCJzdGFjayIsImZyYW1lcyIsInBhcnNlIiwibWFwIiwiZnJhbWUiLCJ1cmwiLCJVUkwiLCJmaWxlIiwicmVzIiwiZXhlYyIsInBhdGhuYW1lIiwiX3Byb2Nlc3NfZW52X19fTkVYVF9ESVNUX0RJUl9yZXBsYWNlIiwiX3Byb2Nlc3NfZW52X19fTkVYVF9ESVNUX0RJUiIsImRpc3REaXIiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0RJU1RfRElSIiwicmVwbGFjZSIsImNvbmNhdCIsInBvcCIsImUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js": +/*!****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js ***! + \****************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getOriginalStackFrame: function() {\n return getOriginalStackFrame;\n },\n getOriginalStackFrames: function() {\n return getOriginalStackFrames;\n },\n getFrameSource: function() {\n return getFrameSource;\n }\n});\nfunction getOriginalStackFrame(source, type, errorMessage) {\n var _source_file, _source_file1;\n async function _getOriginalStackFrame() {\n var /* collapsed */ _source_file, _body_originalStackFrame_file, _body_originalStackFrame;\n const params = new URLSearchParams();\n params.append(\"isServer\", String(type === \"server\"));\n params.append(\"isEdgeServer\", String(type === \"edge-server\"));\n params.append(\"isAppDirectory\", \"true\");\n params.append(\"errorMessage\", errorMessage);\n for(const key in source){\n var _source_key;\n params.append(key, ((_source_key = source[key]) != null ? _source_key : \"\").toString());\n }\n const controller = new AbortController();\n const tm = setTimeout(()=>controller.abort(), 3000);\n const res = await self.fetch(( false || \"\") + \"/__nextjs_original-stack-frame?\" + params.toString(), {\n signal: controller.signal\n }).finally(()=>{\n clearTimeout(tm);\n });\n if (!res.ok || res.status === 204) {\n return Promise.reject(new Error(await res.text()));\n }\n const body = await res.json();\n var _ref;\n return {\n error: false,\n reason: null,\n external: false,\n expanded: !Boolean((_ref = ((_source_file = source.file) == null ? void 0 : _source_file.includes(\"node_modules\")) || ((_body_originalStackFrame = body.originalStackFrame) == null ? void 0 : (_body_originalStackFrame_file = _body_originalStackFrame.file) == null ? void 0 : _body_originalStackFrame_file.includes(\"node_modules\"))) != null ? _ref : true),\n sourceStackFrame: source,\n originalStackFrame: body.originalStackFrame,\n originalCodeFrame: body.originalCodeFrame || null,\n sourcePackage: body.sourcePackage\n };\n }\n if (source.file === \"<anonymous>\" || ((_source_file = source.file) == null ? void 0 : _source_file.match(/^node:/)) || ((_source_file1 = source.file) == null ? void 0 : _source_file1.match(/https?:\\/\\//))) {\n return Promise.resolve({\n error: false,\n reason: null,\n external: true,\n expanded: false,\n sourceStackFrame: source,\n originalStackFrame: null,\n originalCodeFrame: null\n });\n }\n var _err_message, _ref;\n return _getOriginalStackFrame().catch((err)=>({\n error: true,\n reason: (_ref = (_err_message = err == null ? void 0 : err.message) != null ? _err_message : err == null ? void 0 : err.toString()) != null ? _ref : \"Unknown Error\",\n external: false,\n expanded: false,\n sourceStackFrame: source,\n originalStackFrame: null,\n originalCodeFrame: null\n }));\n}\nfunction getOriginalStackFrames(frames, type, errorMessage) {\n return Promise.all(frames.map((frame)=>getOriginalStackFrame(frame, type, errorMessage)));\n}\nfunction formatFrameSourceFile(file) {\n return file.replace(/^webpack-internal:(\\/)+(\\.)?/, \"\").replace(/^webpack:(\\/)+(\\.)?/, \"\");\n}\nfunction getFrameSource(frame) {\n let str = \"\";\n try {\n var _globalThis_location;\n const u = new URL(frame.file);\n // Strip the origin for same-origin scripts.\n if (typeof globalThis !== \"undefined\" && ((_globalThis_location = globalThis.location) == null ? void 0 : _globalThis_location.origin) !== u.origin) {\n // URLs can be valid without an `origin`, so long as they have a\n // `protocol`. However, `origin` is preferred.\n if (u.origin === \"null\") {\n str += u.protocol;\n } else {\n str += u.origin;\n }\n }\n // Strip query string information as it's typically too verbose to be\n // meaningful.\n str += u.pathname;\n str += \" \";\n str = formatFrameSourceFile(str);\n } catch (e) {\n str += formatFrameSourceFile(frame.file || \"(unknown)\") + \" \";\n }\n if (frame.lineNumber != null) {\n if (frame.column != null) {\n str += \"(\" + frame.lineNumber + \":\" + frame.column + \") \";\n } else {\n str += \"(\" + frame.lineNumber + \") \";\n }\n }\n return str.slice(0, -1);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=stack-frame.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy9zdGFjay1mcmFtZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUlOO0FBQ0EsU0FBU0ksUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVYsT0FBT0MsY0FBYyxDQUFDUSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFOLFNBQVM7SUFDYkcsdUJBQXVCO1FBQ25CLE9BQU9BO0lBQ1g7SUFDQUMsd0JBQXdCO1FBQ3BCLE9BQU9BO0lBQ1g7SUFDQUMsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtBQUNKO0FBQ0EsU0FBU0Ysc0JBQXNCUyxNQUFNLEVBQUVDLElBQUksRUFBRUMsWUFBWTtJQUNyRCxJQUFJQyxjQUFjQztJQUNsQixlQUFlQztRQUNYLElBQUksYUFBYSxHQUFHRixjQUFjRywrQkFBK0JDO1FBQ2pFLE1BQU1DLFNBQVMsSUFBSUM7UUFDbkJELE9BQU9FLE1BQU0sQ0FBQyxZQUFZQyxPQUFPVixTQUFTO1FBQzFDTyxPQUFPRSxNQUFNLENBQUMsZ0JBQWdCQyxPQUFPVixTQUFTO1FBQzlDTyxPQUFPRSxNQUFNLENBQUMsa0JBQWtCO1FBQ2hDRixPQUFPRSxNQUFNLENBQUMsZ0JBQWdCUjtRQUM5QixJQUFJLE1BQU1VLE9BQU9aLE9BQU87WUFDcEIsSUFBSWE7WUFDSkwsT0FBT0UsTUFBTSxDQUFDRSxLQUFLLENBQUMsQ0FBQ0MsY0FBY2IsTUFBTSxDQUFDWSxJQUFJLEtBQUssT0FBT0MsY0FBYyxFQUFDLEVBQUdDLFFBQVE7UUFDeEY7UUFDQSxNQUFNQyxhQUFhLElBQUlDO1FBQ3ZCLE1BQU1DLEtBQUtDLFdBQVcsSUFBSUgsV0FBV0ksS0FBSyxJQUFJO1FBQzlDLE1BQU1DLE1BQU0sTUFBTUMsS0FBS0MsS0FBSyxDQUFDLENBQUNDLE1BQWtDLElBQUksRUFBQyxJQUFLLG9DQUFvQ2YsT0FBT00sUUFBUSxJQUFJO1lBQzdIWSxRQUFRWCxXQUFXVyxNQUFNO1FBQzdCLEdBQUdDLE9BQU8sQ0FBQztZQUNQQyxhQUFhWDtRQUNqQjtRQUNBLElBQUksQ0FBQ0csSUFBSVMsRUFBRSxJQUFJVCxJQUFJVSxNQUFNLEtBQUssS0FBSztZQUMvQixPQUFPQyxRQUFRQyxNQUFNLENBQUMsSUFBSUMsTUFBTSxNQUFNYixJQUFJYyxJQUFJO1FBQ2xEO1FBQ0EsTUFBTUMsT0FBTyxNQUFNZixJQUFJZ0IsSUFBSTtRQUMzQixJQUFJQztRQUNKLE9BQU87WUFDSEMsT0FBTztZQUNQQyxRQUFRO1lBQ1JDLFVBQVU7WUFDVkMsVUFBVSxDQUFDQyxRQUFRLENBQUNMLE9BQU8sQ0FBQyxDQUFDbEMsZUFBZUgsT0FBTzJDLElBQUksS0FBSyxPQUFPLEtBQUssSUFBSXhDLGFBQWF5QyxRQUFRLENBQUMsZUFBYyxLQUFPLEVBQUNyQywyQkFBMkI0QixLQUFLVSxrQkFBa0IsS0FBSyxPQUFPLEtBQUssSUFBSSxDQUFDdkMsZ0NBQWdDQyx5QkFBeUJvQyxJQUFJLEtBQUssT0FBTyxLQUFLLElBQUlyQyw4QkFBOEJzQyxRQUFRLENBQUMsZUFBYyxDQUFDLEtBQU0sT0FBT1AsT0FBTztZQUM1VlMsa0JBQWtCOUM7WUFDbEI2QyxvQkFBb0JWLEtBQUtVLGtCQUFrQjtZQUMzQ0UsbUJBQW1CWixLQUFLWSxpQkFBaUIsSUFBSTtZQUM3Q0MsZUFBZWIsS0FBS2EsYUFBYTtRQUNyQztJQUNKO0lBQ0EsSUFBSWhELE9BQU8yQyxJQUFJLEtBQUssaUJBQWtCLEVBQUN4QyxlQUFlSCxPQUFPMkMsSUFBSSxLQUFLLE9BQU8sS0FBSyxJQUFJeEMsYUFBYThDLEtBQUssQ0FBQyxTQUFRLEtBQU8sRUFBQzdDLGdCQUFnQkosT0FBTzJDLElBQUksS0FBSyxPQUFPLEtBQUssSUFBSXZDLGNBQWM2QyxLQUFLLENBQUMsY0FBYSxHQUFJO1FBQzFNLE9BQU9sQixRQUFRbUIsT0FBTyxDQUFDO1lBQ25CWixPQUFPO1lBQ1BDLFFBQVE7WUFDUkMsVUFBVTtZQUNWQyxVQUFVO1lBQ1ZLLGtCQUFrQjlDO1lBQ2xCNkMsb0JBQW9CO1lBQ3BCRSxtQkFBbUI7UUFDdkI7SUFDSjtJQUNBLElBQUlJLGNBQWNkO0lBQ2xCLE9BQU9oQyx5QkFBeUIrQyxLQUFLLENBQUMsQ0FBQ0MsTUFBTztZQUN0Q2YsT0FBTztZQUNQQyxRQUFRLENBQUNGLE9BQU8sQ0FBQ2MsZUFBZUUsT0FBTyxPQUFPLEtBQUssSUFBSUEsSUFBSUMsT0FBTyxLQUFLLE9BQU9ILGVBQWVFLE9BQU8sT0FBTyxLQUFLLElBQUlBLElBQUl2QyxRQUFRLEVBQUMsS0FBTSxPQUFPdUIsT0FBTztZQUNySkcsVUFBVTtZQUNWQyxVQUFVO1lBQ1ZLLGtCQUFrQjlDO1lBQ2xCNkMsb0JBQW9CO1lBQ3BCRSxtQkFBbUI7UUFDdkI7QUFDUjtBQUNBLFNBQVN2RCx1QkFBdUIrRCxNQUFNLEVBQUV0RCxJQUFJLEVBQUVDLFlBQVk7SUFDdEQsT0FBTzZCLFFBQVFuQyxHQUFHLENBQUMyRCxPQUFPQyxHQUFHLENBQUMsQ0FBQ0MsUUFBUWxFLHNCQUFzQmtFLE9BQU94RCxNQUFNQztBQUM5RTtBQUNBLFNBQVN3RCxzQkFBc0JmLElBQUk7SUFDL0IsT0FBT0EsS0FBS2dCLE9BQU8sQ0FBQyxnQ0FBZ0MsSUFBSUEsT0FBTyxDQUFDLHVCQUF1QjtBQUMzRjtBQUNBLFNBQVNsRSxlQUFlZ0UsS0FBSztJQUN6QixJQUFJRyxNQUFNO0lBQ1YsSUFBSTtRQUNBLElBQUlDO1FBQ0osTUFBTUMsSUFBSSxJQUFJQyxJQUFJTixNQUFNZCxJQUFJO1FBQzVCLDRDQUE0QztRQUM1QyxJQUFJLE9BQU9xQixlQUFlLGVBQWUsQ0FBQyxDQUFDSCx1QkFBdUJHLFdBQVdDLFFBQVEsS0FBSyxPQUFPLEtBQUssSUFBSUoscUJBQXFCSyxNQUFNLE1BQU1KLEVBQUVJLE1BQU0sRUFBRTtZQUNqSixnRUFBZ0U7WUFDaEUsOENBQThDO1lBQzlDLElBQUlKLEVBQUVJLE1BQU0sS0FBSyxRQUFRO2dCQUNyQk4sT0FBT0UsRUFBRUssUUFBUTtZQUNyQixPQUFPO2dCQUNIUCxPQUFPRSxFQUFFSSxNQUFNO1lBQ25CO1FBQ0o7UUFDQSxxRUFBcUU7UUFDckUsY0FBYztRQUNkTixPQUFPRSxFQUFFTSxRQUFRO1FBQ2pCUixPQUFPO1FBQ1BBLE1BQU1GLHNCQUFzQkU7SUFDaEMsRUFBRSxPQUFPUyxHQUFHO1FBQ1JULE9BQU9GLHNCQUFzQkQsTUFBTWQsSUFBSSxJQUFJLGVBQWU7SUFDOUQ7SUFDQSxJQUFJYyxNQUFNYSxVQUFVLElBQUksTUFBTTtRQUMxQixJQUFJYixNQUFNYyxNQUFNLElBQUksTUFBTTtZQUN0QlgsT0FBTyxNQUFNSCxNQUFNYSxVQUFVLEdBQUcsTUFBTWIsTUFBTWMsTUFBTSxHQUFHO1FBQ3pELE9BQU87WUFDSFgsT0FBTyxNQUFNSCxNQUFNYSxVQUFVLEdBQUc7UUFDcEM7SUFDSjtJQUNBLE9BQU9WLElBQUlZLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDekI7QUFFQSxJQUFJLENBQUMsT0FBT3BGLFFBQVFxRixPQUFPLEtBQUssY0FBZSxPQUFPckYsUUFBUXFGLE9BQU8sS0FBSyxZQUFZckYsUUFBUXFGLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3JGLFFBQVFxRixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLeEYsT0FBT0MsY0FBYyxDQUFDQyxRQUFRcUYsT0FBTyxFQUFFLGNBQWM7UUFBRXBGLE9BQU87SUFBSztJQUNuRUgsT0FBT3lGLE1BQU0sQ0FBQ3ZGLFFBQVFxRixPQUFPLEVBQUVyRjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRcUYsT0FBTztBQUNsQyxFQUVBLHVDQUF1QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvc3RhY2stZnJhbWUuanM/MzlhNCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGdldE9yaWdpbmFsU3RhY2tGcmFtZTogbnVsbCxcbiAgICBnZXRPcmlnaW5hbFN0YWNrRnJhbWVzOiBudWxsLFxuICAgIGdldEZyYW1lU291cmNlOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGdldE9yaWdpbmFsU3RhY2tGcmFtZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRPcmlnaW5hbFN0YWNrRnJhbWU7XG4gICAgfSxcbiAgICBnZXRPcmlnaW5hbFN0YWNrRnJhbWVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldE9yaWdpbmFsU3RhY2tGcmFtZXM7XG4gICAgfSxcbiAgICBnZXRGcmFtZVNvdXJjZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRGcmFtZVNvdXJjZTtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGdldE9yaWdpbmFsU3RhY2tGcmFtZShzb3VyY2UsIHR5cGUsIGVycm9yTWVzc2FnZSkge1xuICAgIHZhciBfc291cmNlX2ZpbGUsIF9zb3VyY2VfZmlsZTE7XG4gICAgYXN5bmMgZnVuY3Rpb24gX2dldE9yaWdpbmFsU3RhY2tGcmFtZSgpIHtcbiAgICAgICAgdmFyIC8qIGNvbGxhcHNlZCAqLyBfc291cmNlX2ZpbGUsIF9ib2R5X29yaWdpbmFsU3RhY2tGcmFtZV9maWxlLCBfYm9keV9vcmlnaW5hbFN0YWNrRnJhbWU7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgICAgcGFyYW1zLmFwcGVuZChcImlzU2VydmVyXCIsIFN0cmluZyh0eXBlID09PSBcInNlcnZlclwiKSk7XG4gICAgICAgIHBhcmFtcy5hcHBlbmQoXCJpc0VkZ2VTZXJ2ZXJcIiwgU3RyaW5nKHR5cGUgPT09IFwiZWRnZS1zZXJ2ZXJcIikpO1xuICAgICAgICBwYXJhbXMuYXBwZW5kKFwiaXNBcHBEaXJlY3RvcnlcIiwgXCJ0cnVlXCIpO1xuICAgICAgICBwYXJhbXMuYXBwZW5kKFwiZXJyb3JNZXNzYWdlXCIsIGVycm9yTWVzc2FnZSk7XG4gICAgICAgIGZvcihjb25zdCBrZXkgaW4gc291cmNlKXtcbiAgICAgICAgICAgIHZhciBfc291cmNlX2tleTtcbiAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoa2V5LCAoKF9zb3VyY2Vfa2V5ID0gc291cmNlW2tleV0pICE9IG51bGwgPyBfc291cmNlX2tleSA6IFwiXCIpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGNvbnN0IHRtID0gc2V0VGltZW91dCgoKT0+Y29udHJvbGxlci5hYm9ydCgpLCAzMDAwKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VsZi5mZXRjaCgocHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCB8fCBcIlwiKSArIFwiL19fbmV4dGpzX29yaWdpbmFsLXN0YWNrLWZyYW1lP1wiICsgcGFyYW1zLnRvU3RyaW5nKCksIHtcbiAgICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWxcbiAgICAgICAgfSkuZmluYWxseSgoKT0+e1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcmVzLm9rIHx8IHJlcy5zdGF0dXMgPT09IDIwNCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihhd2FpdCByZXMudGV4dCgpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAgIHZhciBfcmVmO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgICAgICAgcmVhc29uOiBudWxsLFxuICAgICAgICAgICAgZXh0ZXJuYWw6IGZhbHNlLFxuICAgICAgICAgICAgZXhwYW5kZWQ6ICFCb29sZWFuKChfcmVmID0gKChfc291cmNlX2ZpbGUgPSBzb3VyY2UuZmlsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9zb3VyY2VfZmlsZS5pbmNsdWRlcyhcIm5vZGVfbW9kdWxlc1wiKSkgfHwgKChfYm9keV9vcmlnaW5hbFN0YWNrRnJhbWUgPSBib2R5Lm9yaWdpbmFsU3RhY2tGcmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IChfYm9keV9vcmlnaW5hbFN0YWNrRnJhbWVfZmlsZSA9IF9ib2R5X29yaWdpbmFsU3RhY2tGcmFtZS5maWxlKSA9PSBudWxsID8gdm9pZCAwIDogX2JvZHlfb3JpZ2luYWxTdGFja0ZyYW1lX2ZpbGUuaW5jbHVkZXMoXCJub2RlX21vZHVsZXNcIikpKSAhPSBudWxsID8gX3JlZiA6IHRydWUpLFxuICAgICAgICAgICAgc291cmNlU3RhY2tGcmFtZTogc291cmNlLFxuICAgICAgICAgICAgb3JpZ2luYWxTdGFja0ZyYW1lOiBib2R5Lm9yaWdpbmFsU3RhY2tGcmFtZSxcbiAgICAgICAgICAgIG9yaWdpbmFsQ29kZUZyYW1lOiBib2R5Lm9yaWdpbmFsQ29kZUZyYW1lIHx8IG51bGwsXG4gICAgICAgICAgICBzb3VyY2VQYWNrYWdlOiBib2R5LnNvdXJjZVBhY2thZ2VcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHNvdXJjZS5maWxlID09PSBcIjxhbm9ueW1vdXM+XCIgfHwgKChfc291cmNlX2ZpbGUgPSBzb3VyY2UuZmlsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9zb3VyY2VfZmlsZS5tYXRjaCgvXm5vZGU6LykpIHx8ICgoX3NvdXJjZV9maWxlMSA9IHNvdXJjZS5maWxlKSA9PSBudWxsID8gdm9pZCAwIDogX3NvdXJjZV9maWxlMS5tYXRjaCgvaHR0cHM/OlxcL1xcLy8pKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgICAgICAgIHJlYXNvbjogbnVsbCxcbiAgICAgICAgICAgIGV4dGVybmFsOiB0cnVlLFxuICAgICAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc291cmNlU3RhY2tGcmFtZTogc291cmNlLFxuICAgICAgICAgICAgb3JpZ2luYWxTdGFja0ZyYW1lOiBudWxsLFxuICAgICAgICAgICAgb3JpZ2luYWxDb2RlRnJhbWU6IG51bGxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZhciBfZXJyX21lc3NhZ2UsIF9yZWY7XG4gICAgcmV0dXJuIF9nZXRPcmlnaW5hbFN0YWNrRnJhbWUoKS5jYXRjaCgoZXJyKT0+KHtcbiAgICAgICAgICAgIGVycm9yOiB0cnVlLFxuICAgICAgICAgICAgcmVhc29uOiAoX3JlZiA9IChfZXJyX21lc3NhZ2UgPSBlcnIgPT0gbnVsbCA/IHZvaWQgMCA6IGVyci5tZXNzYWdlKSAhPSBudWxsID8gX2Vycl9tZXNzYWdlIDogZXJyID09IG51bGwgPyB2b2lkIDAgOiBlcnIudG9TdHJpbmcoKSkgIT0gbnVsbCA/IF9yZWYgOiBcIlVua25vd24gRXJyb3JcIixcbiAgICAgICAgICAgIGV4dGVybmFsOiBmYWxzZSxcbiAgICAgICAgICAgIGV4cGFuZGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHNvdXJjZVN0YWNrRnJhbWU6IHNvdXJjZSxcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhY2tGcmFtZTogbnVsbCxcbiAgICAgICAgICAgIG9yaWdpbmFsQ29kZUZyYW1lOiBudWxsXG4gICAgICAgIH0pKTtcbn1cbmZ1bmN0aW9uIGdldE9yaWdpbmFsU3RhY2tGcmFtZXMoZnJhbWVzLCB0eXBlLCBlcnJvck1lc3NhZ2UpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoZnJhbWVzLm1hcCgoZnJhbWUpPT5nZXRPcmlnaW5hbFN0YWNrRnJhbWUoZnJhbWUsIHR5cGUsIGVycm9yTWVzc2FnZSkpKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdEZyYW1lU291cmNlRmlsZShmaWxlKSB7XG4gICAgcmV0dXJuIGZpbGUucmVwbGFjZSgvXndlYnBhY2staW50ZXJuYWw6KFxcLykrKFxcLik/LywgXCJcIikucmVwbGFjZSgvXndlYnBhY2s6KFxcLykrKFxcLik/LywgXCJcIik7XG59XG5mdW5jdGlvbiBnZXRGcmFtZVNvdXJjZShmcmFtZSkge1xuICAgIGxldCBzdHIgPSBcIlwiO1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBfZ2xvYmFsVGhpc19sb2NhdGlvbjtcbiAgICAgICAgY29uc3QgdSA9IG5ldyBVUkwoZnJhbWUuZmlsZSk7XG4gICAgICAgIC8vIFN0cmlwIHRoZSBvcmlnaW4gZm9yIHNhbWUtb3JpZ2luIHNjcmlwdHMuXG4gICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiAoKF9nbG9iYWxUaGlzX2xvY2F0aW9uID0gZ2xvYmFsVGhpcy5sb2NhdGlvbikgPT0gbnVsbCA/IHZvaWQgMCA6IF9nbG9iYWxUaGlzX2xvY2F0aW9uLm9yaWdpbikgIT09IHUub3JpZ2luKSB7XG4gICAgICAgICAgICAvLyBVUkxzIGNhbiBiZSB2YWxpZCB3aXRob3V0IGFuIGBvcmlnaW5gLCBzbyBsb25nIGFzIHRoZXkgaGF2ZSBhXG4gICAgICAgICAgICAvLyBgcHJvdG9jb2xgLiBIb3dldmVyLCBgb3JpZ2luYCBpcyBwcmVmZXJyZWQuXG4gICAgICAgICAgICBpZiAodS5vcmlnaW4gPT09IFwibnVsbFwiKSB7XG4gICAgICAgICAgICAgICAgc3RyICs9IHUucHJvdG9jb2w7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ciArPSB1Lm9yaWdpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTdHJpcCBxdWVyeSBzdHJpbmcgaW5mb3JtYXRpb24gYXMgaXQncyB0eXBpY2FsbHkgdG9vIHZlcmJvc2UgdG8gYmVcbiAgICAgICAgLy8gbWVhbmluZ2Z1bC5cbiAgICAgICAgc3RyICs9IHUucGF0aG5hbWU7XG4gICAgICAgIHN0ciArPSBcIiBcIjtcbiAgICAgICAgc3RyID0gZm9ybWF0RnJhbWVTb3VyY2VGaWxlKHN0cik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdHIgKz0gZm9ybWF0RnJhbWVTb3VyY2VGaWxlKGZyYW1lLmZpbGUgfHwgXCIodW5rbm93bilcIikgKyBcIiBcIjtcbiAgICB9XG4gICAgaWYgKGZyYW1lLmxpbmVOdW1iZXIgIT0gbnVsbCkge1xuICAgICAgICBpZiAoZnJhbWUuY29sdW1uICE9IG51bGwpIHtcbiAgICAgICAgICAgIHN0ciArPSBcIihcIiArIGZyYW1lLmxpbmVOdW1iZXIgKyBcIjpcIiArIGZyYW1lLmNvbHVtbiArIFwiKSBcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0ciArPSBcIihcIiArIGZyYW1lLmxpbmVOdW1iZXIgKyBcIikgXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0ci5zbGljZSgwLCAtMSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0YWNrLWZyYW1lLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsImdldE9yaWdpbmFsU3RhY2tGcmFtZSIsImdldE9yaWdpbmFsU3RhY2tGcmFtZXMiLCJnZXRGcmFtZVNvdXJjZSIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsInNvdXJjZSIsInR5cGUiLCJlcnJvck1lc3NhZ2UiLCJfc291cmNlX2ZpbGUiLCJfc291cmNlX2ZpbGUxIiwiX2dldE9yaWdpbmFsU3RhY2tGcmFtZSIsIl9ib2R5X29yaWdpbmFsU3RhY2tGcmFtZV9maWxlIiwiX2JvZHlfb3JpZ2luYWxTdGFja0ZyYW1lIiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBwZW5kIiwiU3RyaW5nIiwia2V5IiwiX3NvdXJjZV9rZXkiLCJ0b1N0cmluZyIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJ0bSIsInNldFRpbWVvdXQiLCJhYm9ydCIsInJlcyIsInNlbGYiLCJmZXRjaCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwic2lnbmFsIiwiZmluYWxseSIsImNsZWFyVGltZW91dCIsIm9rIiwic3RhdHVzIiwiUHJvbWlzZSIsInJlamVjdCIsIkVycm9yIiwidGV4dCIsImJvZHkiLCJqc29uIiwiX3JlZiIsImVycm9yIiwicmVhc29uIiwiZXh0ZXJuYWwiLCJleHBhbmRlZCIsIkJvb2xlYW4iLCJmaWxlIiwiaW5jbHVkZXMiLCJvcmlnaW5hbFN0YWNrRnJhbWUiLCJzb3VyY2VTdGFja0ZyYW1lIiwib3JpZ2luYWxDb2RlRnJhbWUiLCJzb3VyY2VQYWNrYWdlIiwibWF0Y2giLCJyZXNvbHZlIiwiX2Vycl9tZXNzYWdlIiwiY2F0Y2giLCJlcnIiLCJtZXNzYWdlIiwiZnJhbWVzIiwibWFwIiwiZnJhbWUiLCJmb3JtYXRGcmFtZVNvdXJjZUZpbGUiLCJyZXBsYWNlIiwic3RyIiwiX2dsb2JhbFRoaXNfbG9jYXRpb24iLCJ1IiwiVVJMIiwiZ2xvYmFsVGhpcyIsImxvY2F0aW9uIiwib3JpZ2luIiwicHJvdG9jb2wiLCJwYXRobmFtZSIsImUiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwic2xpY2UiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-error-handler.js": +/*!**********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-error-handler.js ***! + \**********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RuntimeErrorHandler: function() {\n return RuntimeErrorHandler;\n },\n useErrorHandler: function() {\n return useErrorHandler;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _hydrationerrorinfo = __webpack_require__(/*! ./hydration-error-info */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js\");\nconst _isnextroutererror = __webpack_require__(/*! ../../../is-next-router-error */ \"(app-pages-browser)/./node_modules/next/dist/client/components/is-next-router-error.js\");\nconst RuntimeErrorHandler = {\n hadRuntimeError: false\n};\nfunction isHydrationError(error) {\n return error.message.match(/(hydration|content does not match|did not match)/i) != null;\n}\nif (typeof window !== \"undefined\") {\n try {\n // Increase the number of stack frames on the client\n Error.stackTraceLimit = 50;\n } catch (e) {}\n}\nconst errorQueue = [];\nconst rejectionQueue = [];\nconst errorHandlers = [];\nconst rejectionHandlers = [];\nif (typeof window !== \"undefined\") {\n // These event handlers must be added outside of the hook because there is no\n // guarantee that the hook will be alive in a mounted component in time to\n // when the errors occur.\n window.addEventListener(\"error\", (ev)=>{\n if ((0, _isnextroutererror.isNextRouterError)(ev.error)) {\n ev.preventDefault();\n return;\n }\n const error = ev == null ? void 0 : ev.error;\n if (!error || !(error instanceof Error) || typeof error.stack !== \"string\") {\n // A non-error was thrown, we don't have anything to show. :-(\n return;\n }\n if (isHydrationError(error) && !error.message.includes(\"https://nextjs.org/docs/messages/react-hydration-error\")) {\n if (_hydrationerrorinfo.hydrationErrorWarning) {\n // The patched console.error found hydration errors logged by React\n // Append the logged warning to the error message\n error.message += \"\\n\\n\" + _hydrationerrorinfo.hydrationErrorWarning;\n }\n if (_hydrationerrorinfo.hydrationErrorComponentStack) {\n error._componentStack = _hydrationerrorinfo.hydrationErrorComponentStack;\n }\n error.message += \"\\n\\nSee more info here: https://nextjs.org/docs/messages/react-hydration-error\";\n }\n const e = error;\n errorQueue.push(e);\n for (const handler of errorHandlers){\n handler(e);\n }\n });\n window.addEventListener(\"unhandledrejection\", (ev)=>{\n const reason = ev == null ? void 0 : ev.reason;\n if (!reason || !(reason instanceof Error) || typeof reason.stack !== \"string\") {\n // A non-error was thrown, we don't have anything to show. :-(\n return;\n }\n const e = reason;\n rejectionQueue.push(e);\n for (const handler of rejectionHandlers){\n handler(e);\n }\n });\n}\nfunction useErrorHandler(handleOnUnhandledError, handleOnUnhandledRejection) {\n (0, _react.useEffect)(()=>{\n // Handle queued errors.\n errorQueue.forEach(handleOnUnhandledError);\n rejectionQueue.forEach(handleOnUnhandledRejection);\n // Listen to new errors.\n errorHandlers.push(handleOnUnhandledError);\n rejectionHandlers.push(handleOnUnhandledRejection);\n return ()=>{\n // Remove listeners.\n errorHandlers.splice(errorHandlers.indexOf(handleOnUnhandledError), 1);\n rejectionHandlers.splice(rejectionHandlers.indexOf(handleOnUnhandledRejection), 1);\n };\n }, [\n handleOnUnhandledError,\n handleOnUnhandledRejection\n ]);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-error-handler.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy91c2UtZXJyb3ItaGFuZGxlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcscUJBQXFCO1FBQ2pCLE9BQU9BO0lBQ1g7SUFDQUMsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sU0FBU0MsbUJBQU9BLENBQUMsbUZBQU87QUFDOUIsTUFBTUMsc0JBQXNCRCxtQkFBT0EsQ0FBQyx5SkFBd0I7QUFDNUQsTUFBTUUscUJBQXFCRixtQkFBT0EsQ0FBQyw2SEFBK0I7QUFDbEUsTUFBTVQsc0JBQXNCO0lBQ3hCWSxpQkFBaUI7QUFDckI7QUFDQSxTQUFTQyxpQkFBaUJDLEtBQUs7SUFDM0IsT0FBT0EsTUFBTUMsT0FBTyxDQUFDQyxLQUFLLENBQUMsd0RBQXdEO0FBQ3ZGO0FBQ0EsSUFBSSxPQUFPQyxXQUFXLGFBQWE7SUFDL0IsSUFBSTtRQUNBLG9EQUFvRDtRQUNwREMsTUFBTUMsZUFBZSxHQUFHO0lBQzVCLEVBQUUsT0FBT0MsR0FBRyxDQUFDO0FBQ2pCO0FBQ0EsTUFBTUMsYUFBYSxFQUFFO0FBQ3JCLE1BQU1DLGlCQUFpQixFQUFFO0FBQ3pCLE1BQU1DLGdCQUFnQixFQUFFO0FBQ3hCLE1BQU1DLG9CQUFvQixFQUFFO0FBQzVCLElBQUksT0FBT1AsV0FBVyxhQUFhO0lBQy9CLDZFQUE2RTtJQUM3RSwwRUFBMEU7SUFDMUUseUJBQXlCO0lBQ3pCQSxPQUFPUSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUNDO1FBQzlCLElBQUksQ0FBQyxHQUFHZixtQkFBbUJnQixpQkFBaUIsRUFBRUQsR0FBR1osS0FBSyxHQUFHO1lBQ3JEWSxHQUFHRSxjQUFjO1lBQ2pCO1FBQ0o7UUFDQSxNQUFNZCxRQUFRWSxNQUFNLE9BQU8sS0FBSyxJQUFJQSxHQUFHWixLQUFLO1FBQzVDLElBQUksQ0FBQ0EsU0FBUyxDQUFFQSxDQUFBQSxpQkFBaUJJLEtBQUksS0FBTSxPQUFPSixNQUFNZSxLQUFLLEtBQUssVUFBVTtZQUN4RSw4REFBOEQ7WUFDOUQ7UUFDSjtRQUNBLElBQUloQixpQkFBaUJDLFVBQVUsQ0FBQ0EsTUFBTUMsT0FBTyxDQUFDZSxRQUFRLENBQUMsMkRBQTJEO1lBQzlHLElBQUlwQixvQkFBb0JxQixxQkFBcUIsRUFBRTtnQkFDM0MsbUVBQW1FO2dCQUNuRSxpREFBaUQ7Z0JBQ2pEakIsTUFBTUMsT0FBTyxJQUFJLFNBQVNMLG9CQUFvQnFCLHFCQUFxQjtZQUN2RTtZQUNBLElBQUlyQixvQkFBb0JzQiw0QkFBNEIsRUFBRTtnQkFDbERsQixNQUFNbUIsZUFBZSxHQUFHdkIsb0JBQW9Cc0IsNEJBQTRCO1lBQzVFO1lBQ0FsQixNQUFNQyxPQUFPLElBQUk7UUFDckI7UUFDQSxNQUFNSyxJQUFJTjtRQUNWTyxXQUFXYSxJQUFJLENBQUNkO1FBQ2hCLEtBQUssTUFBTWUsV0FBV1osY0FBYztZQUNoQ1ksUUFBUWY7UUFDWjtJQUNKO0lBQ0FILE9BQU9RLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDQztRQUMzQyxNQUFNVSxTQUFTVixNQUFNLE9BQU8sS0FBSyxJQUFJQSxHQUFHVSxNQUFNO1FBQzlDLElBQUksQ0FBQ0EsVUFBVSxDQUFFQSxDQUFBQSxrQkFBa0JsQixLQUFJLEtBQU0sT0FBT2tCLE9BQU9QLEtBQUssS0FBSyxVQUFVO1lBQzNFLDhEQUE4RDtZQUM5RDtRQUNKO1FBQ0EsTUFBTVQsSUFBSWdCO1FBQ1ZkLGVBQWVZLElBQUksQ0FBQ2Q7UUFDcEIsS0FBSyxNQUFNZSxXQUFXWCxrQkFBa0I7WUFDcENXLFFBQVFmO1FBQ1o7SUFDSjtBQUNKO0FBQ0EsU0FBU25CLGdCQUFnQm9DLHNCQUFzQixFQUFFQywwQkFBMEI7SUFDdEUsSUFBRzlCLE9BQU8rQixTQUFTLEVBQUU7UUFDbEIsd0JBQXdCO1FBQ3hCbEIsV0FBV21CLE9BQU8sQ0FBQ0g7UUFDbkJmLGVBQWVrQixPQUFPLENBQUNGO1FBQ3ZCLHdCQUF3QjtRQUN4QmYsY0FBY1csSUFBSSxDQUFDRztRQUNuQmIsa0JBQWtCVSxJQUFJLENBQUNJO1FBQ3ZCLE9BQU87WUFDSCxvQkFBb0I7WUFDcEJmLGNBQWNrQixNQUFNLENBQUNsQixjQUFjbUIsT0FBTyxDQUFDTCx5QkFBeUI7WUFDcEViLGtCQUFrQmlCLE1BQU0sQ0FBQ2pCLGtCQUFrQmtCLE9BQU8sQ0FBQ0osNkJBQTZCO1FBQ3BGO0lBQ0osR0FBRztRQUNDRDtRQUNBQztLQUNIO0FBQ0w7QUFFQSxJQUFJLENBQUMsT0FBT3pDLFFBQVE4QyxPQUFPLEtBQUssY0FBZSxPQUFPOUMsUUFBUThDLE9BQU8sS0FBSyxZQUFZOUMsUUFBUThDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzlDLFFBQVE4QyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLakQsT0FBT0MsY0FBYyxDQUFDQyxRQUFROEMsT0FBTyxFQUFFLGNBQWM7UUFBRTdDLE9BQU87SUFBSztJQUNuRUgsT0FBT2tELE1BQU0sQ0FBQ2hELFFBQVE4QyxPQUFPLEVBQUU5QztJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFROEMsT0FBTztBQUNsQyxFQUVBLDZDQUE2QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvdXNlLWVycm9yLWhhbmRsZXIuanM/YTYwNSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFJ1bnRpbWVFcnJvckhhbmRsZXI6IG51bGwsXG4gICAgdXNlRXJyb3JIYW5kbGVyOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIFJ1bnRpbWVFcnJvckhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUnVudGltZUVycm9ySGFuZGxlcjtcbiAgICB9LFxuICAgIHVzZUVycm9ySGFuZGxlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VFcnJvckhhbmRsZXI7XG4gICAgfVxufSk7XG5jb25zdCBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5jb25zdCBfaHlkcmF0aW9uZXJyb3JpbmZvID0gcmVxdWlyZShcIi4vaHlkcmF0aW9uLWVycm9yLWluZm9cIik7XG5jb25zdCBfaXNuZXh0cm91dGVyZXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vaXMtbmV4dC1yb3V0ZXItZXJyb3JcIik7XG5jb25zdCBSdW50aW1lRXJyb3JIYW5kbGVyID0ge1xuICAgIGhhZFJ1bnRpbWVFcnJvcjogZmFsc2Vcbn07XG5mdW5jdGlvbiBpc0h5ZHJhdGlvbkVycm9yKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yLm1lc3NhZ2UubWF0Y2goLyhoeWRyYXRpb258Y29udGVudCBkb2VzIG5vdCBtYXRjaHxkaWQgbm90IG1hdGNoKS9pKSAhPSBudWxsO1xufVxuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBJbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHN0YWNrIGZyYW1lcyBvbiB0aGUgY2xpZW50XG4gICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IDUwO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG59XG5jb25zdCBlcnJvclF1ZXVlID0gW107XG5jb25zdCByZWplY3Rpb25RdWV1ZSA9IFtdO1xuY29uc3QgZXJyb3JIYW5kbGVycyA9IFtdO1xuY29uc3QgcmVqZWN0aW9uSGFuZGxlcnMgPSBbXTtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgLy8gVGhlc2UgZXZlbnQgaGFuZGxlcnMgbXVzdCBiZSBhZGRlZCBvdXRzaWRlIG9mIHRoZSBob29rIGJlY2F1c2UgdGhlcmUgaXMgbm9cbiAgICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgaG9vayB3aWxsIGJlIGFsaXZlIGluIGEgbW91bnRlZCBjb21wb25lbnQgaW4gdGltZSB0b1xuICAgIC8vIHdoZW4gdGhlIGVycm9ycyBvY2N1ci5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIChldik9PntcbiAgICAgICAgaWYgKCgwLCBfaXNuZXh0cm91dGVyZXJyb3IuaXNOZXh0Um91dGVyRXJyb3IpKGV2LmVycm9yKSkge1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlcnJvciA9IGV2ID09IG51bGwgPyB2b2lkIDAgOiBldi5lcnJvcjtcbiAgICAgICAgaWYgKCFlcnJvciB8fCAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHx8IHR5cGVvZiBlcnJvci5zdGFjayAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gQSBub24tZXJyb3Igd2FzIHRocm93biwgd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBzaG93LiA6LShcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNIeWRyYXRpb25FcnJvcihlcnJvcikgJiYgIWVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9yZWFjdC1oeWRyYXRpb24tZXJyb3JcIikpIHtcbiAgICAgICAgICAgIGlmIChfaHlkcmF0aW9uZXJyb3JpbmZvLmh5ZHJhdGlvbkVycm9yV2FybmluZykge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwYXRjaGVkIGNvbnNvbGUuZXJyb3IgZm91bmQgaHlkcmF0aW9uIGVycm9ycyBsb2dnZWQgYnkgUmVhY3RcbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIGxvZ2dlZCB3YXJuaW5nIHRvIHRoZSBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBcIlxcblxcblwiICsgX2h5ZHJhdGlvbmVycm9yaW5mby5oeWRyYXRpb25FcnJvcldhcm5pbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX2h5ZHJhdGlvbmVycm9yaW5mby5oeWRyYXRpb25FcnJvckNvbXBvbmVudFN0YWNrKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IuX2NvbXBvbmVudFN0YWNrID0gX2h5ZHJhdGlvbmVycm9yaW5mby5oeWRyYXRpb25FcnJvckNvbXBvbmVudFN0YWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBcIlxcblxcblNlZSBtb3JlIGluZm8gaGVyZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvcmVhY3QtaHlkcmF0aW9uLWVycm9yXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IGVycm9yO1xuICAgICAgICBlcnJvclF1ZXVlLnB1c2goZSk7XG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBlcnJvckhhbmRsZXJzKXtcbiAgICAgICAgICAgIGhhbmRsZXIoZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCAoZXYpPT57XG4gICAgICAgIGNvbnN0IHJlYXNvbiA9IGV2ID09IG51bGwgPyB2b2lkIDAgOiBldi5yZWFzb247XG4gICAgICAgIGlmICghcmVhc29uIHx8ICEocmVhc29uIGluc3RhbmNlb2YgRXJyb3IpIHx8IHR5cGVvZiByZWFzb24uc3RhY2sgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIEEgbm9uLWVycm9yIHdhcyB0aHJvd24sIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2hvdy4gOi0oXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IHJlYXNvbjtcbiAgICAgICAgcmVqZWN0aW9uUXVldWUucHVzaChlKTtcbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHJlamVjdGlvbkhhbmRsZXJzKXtcbiAgICAgICAgICAgIGhhbmRsZXIoZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHVzZUVycm9ySGFuZGxlcihoYW5kbGVPblVuaGFuZGxlZEVycm9yLCBoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvbikge1xuICAgICgwLCBfcmVhY3QudXNlRWZmZWN0KSgoKT0+e1xuICAgICAgICAvLyBIYW5kbGUgcXVldWVkIGVycm9ycy5cbiAgICAgICAgZXJyb3JRdWV1ZS5mb3JFYWNoKGhhbmRsZU9uVW5oYW5kbGVkRXJyb3IpO1xuICAgICAgICByZWplY3Rpb25RdWV1ZS5mb3JFYWNoKGhhbmRsZU9uVW5oYW5kbGVkUmVqZWN0aW9uKTtcbiAgICAgICAgLy8gTGlzdGVuIHRvIG5ldyBlcnJvcnMuXG4gICAgICAgIGVycm9ySGFuZGxlcnMucHVzaChoYW5kbGVPblVuaGFuZGxlZEVycm9yKTtcbiAgICAgICAgcmVqZWN0aW9uSGFuZGxlcnMucHVzaChoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvbik7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGxpc3RlbmVycy5cbiAgICAgICAgICAgIGVycm9ySGFuZGxlcnMuc3BsaWNlKGVycm9ySGFuZGxlcnMuaW5kZXhPZihoYW5kbGVPblVuaGFuZGxlZEVycm9yKSwgMSk7XG4gICAgICAgICAgICByZWplY3Rpb25IYW5kbGVycy5zcGxpY2UocmVqZWN0aW9uSGFuZGxlcnMuaW5kZXhPZihoYW5kbGVPblVuaGFuZGxlZFJlamVjdGlvbiksIDEpO1xuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgaGFuZGxlT25VbmhhbmRsZWRFcnJvcixcbiAgICAgICAgaGFuZGxlT25VbmhhbmRsZWRSZWplY3Rpb25cbiAgICBdKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLWVycm9yLWhhbmRsZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiUnVudGltZUVycm9ySGFuZGxlciIsInVzZUVycm9ySGFuZGxlciIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9yZWFjdCIsInJlcXVpcmUiLCJfaHlkcmF0aW9uZXJyb3JpbmZvIiwiX2lzbmV4dHJvdXRlcmVycm9yIiwiaGFkUnVudGltZUVycm9yIiwiaXNIeWRyYXRpb25FcnJvciIsImVycm9yIiwibWVzc2FnZSIsIm1hdGNoIiwid2luZG93IiwiRXJyb3IiLCJzdGFja1RyYWNlTGltaXQiLCJlIiwiZXJyb3JRdWV1ZSIsInJlamVjdGlvblF1ZXVlIiwiZXJyb3JIYW5kbGVycyIsInJlamVjdGlvbkhhbmRsZXJzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2IiwiaXNOZXh0Um91dGVyRXJyb3IiLCJwcmV2ZW50RGVmYXVsdCIsInN0YWNrIiwiaW5jbHVkZXMiLCJoeWRyYXRpb25FcnJvcldhcm5pbmciLCJoeWRyYXRpb25FcnJvckNvbXBvbmVudFN0YWNrIiwiX2NvbXBvbmVudFN0YWNrIiwicHVzaCIsImhhbmRsZXIiLCJyZWFzb24iLCJoYW5kbGVPblVuaGFuZGxlZEVycm9yIiwiaGFuZGxlT25VbmhhbmRsZWRSZWplY3Rpb24iLCJ1c2VFZmZlY3QiLCJmb3JFYWNoIiwic3BsaWNlIiwiaW5kZXhPZiIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-error-handler.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js ***! + \***********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useOpenInEditor\", ({\n enumerable: true,\n get: function() {\n return useOpenInEditor;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nfunction useOpenInEditor(param) {\n let { file, lineNumber, column } = param === void 0 ? {} : param;\n const openInEditor = (0, _react.useCallback)(()=>{\n if (file == null || lineNumber == null || column == null) return;\n const params = new URLSearchParams();\n params.append(\"file\", file);\n params.append(\"lineNumber\", String(lineNumber));\n params.append(\"column\", String(column));\n self.fetch(( false || \"\") + \"/__nextjs_launch-editor?\" + params.toString()).then(()=>{}, ()=>{\n console.error(\"There was an issue opening this code in your editor.\");\n });\n }, [\n file,\n lineNumber,\n column\n ]);\n return openInEditor;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-open-in-editor.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy91c2Utb3Blbi1pbi1lZGl0b3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILG1EQUFrRDtJQUM5Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLFNBQVNDLG1CQUFPQSxDQUFDLG1GQUFPO0FBQzlCLFNBQVNGLGdCQUFnQkcsS0FBSztJQUMxQixJQUFJLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxNQUFNLEVBQUUsR0FBR0gsVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJQTtJQUMzRCxNQUFNSSxlQUFlLENBQUMsR0FBR04sT0FBT08sV0FBVyxFQUFFO1FBQ3pDLElBQUlKLFFBQVEsUUFBUUMsY0FBYyxRQUFRQyxVQUFVLE1BQU07UUFDMUQsTUFBTUcsU0FBUyxJQUFJQztRQUNuQkQsT0FBT0UsTUFBTSxDQUFDLFFBQVFQO1FBQ3RCSyxPQUFPRSxNQUFNLENBQUMsY0FBY0MsT0FBT1A7UUFDbkNJLE9BQU9FLE1BQU0sQ0FBQyxVQUFVQyxPQUFPTjtRQUMvQk8sS0FBS0MsS0FBSyxDQUFDLENBQUNDLE1BQWtDLElBQUksRUFBQyxJQUFLLDZCQUE2Qk4sT0FBT1MsUUFBUSxJQUFJQyxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ2pIQyxRQUFRQyxLQUFLLENBQUM7UUFDbEI7SUFDSixHQUFHO1FBQ0NqQjtRQUNBQztRQUNBQztLQUNIO0lBQ0QsT0FBT0M7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPWCxRQUFRMEIsT0FBTyxLQUFLLGNBQWUsT0FBTzFCLFFBQVEwQixPQUFPLEtBQUssWUFBWTFCLFFBQVEwQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU8xQixRQUFRMEIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzdCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTBCLE9BQU8sRUFBRSxjQUFjO1FBQUV6QixPQUFPO0lBQUs7SUFDbkVILE9BQU84QixNQUFNLENBQUM1QixRQUFRMEIsT0FBTyxFQUFFMUI7SUFDL0I2QixPQUFPN0IsT0FBTyxHQUFHQSxRQUFRMEIsT0FBTztBQUNsQyxFQUVBLDhDQUE4QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2hlbHBlcnMvdXNlLW9wZW4taW4tZWRpdG9yLmpzPzE0MjIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1c2VPcGVuSW5FZGl0b3JcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZU9wZW5JbkVkaXRvcjtcbiAgICB9XG59KTtcbmNvbnN0IF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmZ1bmN0aW9uIHVzZU9wZW5JbkVkaXRvcihwYXJhbSkge1xuICAgIGxldCB7IGZpbGUsIGxpbmVOdW1iZXIsIGNvbHVtbiB9ID0gcGFyYW0gPT09IHZvaWQgMCA/IHt9IDogcGFyYW07XG4gICAgY29uc3Qgb3BlbkluRWRpdG9yID0gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKCk9PntcbiAgICAgICAgaWYgKGZpbGUgPT0gbnVsbCB8fCBsaW5lTnVtYmVyID09IG51bGwgfHwgY29sdW1uID09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgICBwYXJhbXMuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcbiAgICAgICAgcGFyYW1zLmFwcGVuZChcImxpbmVOdW1iZXJcIiwgU3RyaW5nKGxpbmVOdW1iZXIpKTtcbiAgICAgICAgcGFyYW1zLmFwcGVuZChcImNvbHVtblwiLCBTdHJpbmcoY29sdW1uKSk7XG4gICAgICAgIHNlbGYuZmV0Y2goKHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEggfHwgXCJcIikgKyBcIi9fX25leHRqc19sYXVuY2gtZWRpdG9yP1wiICsgcGFyYW1zLnRvU3RyaW5nKCkpLnRoZW4oKCk9Pnt9LCAoKT0+e1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZXJlIHdhcyBhbiBpc3N1ZSBvcGVuaW5nIHRoaXMgY29kZSBpbiB5b3VyIGVkaXRvci5cIik7XG4gICAgICAgIH0pO1xuICAgIH0sIFtcbiAgICAgICAgZmlsZSxcbiAgICAgICAgbGluZU51bWJlcixcbiAgICAgICAgY29sdW1uXG4gICAgXSk7XG4gICAgcmV0dXJuIG9wZW5JbkVkaXRvcjtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLW9wZW4taW4tZWRpdG9yLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJ1c2VPcGVuSW5FZGl0b3IiLCJfcmVhY3QiLCJyZXF1aXJlIiwicGFyYW0iLCJmaWxlIiwibGluZU51bWJlciIsImNvbHVtbiIsIm9wZW5JbkVkaXRvciIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBwZW5kIiwiU3RyaW5nIiwic2VsZiIsImZldGNoIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9ST1VURVJfQkFTRVBBVEgiLCJ0b1N0cmluZyIsInRoZW4iLCJjb25zb2xlIiwiZXJyb3IiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-websocket.js": +/*!******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-websocket.js ***! + \******************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n useWebsocket: function() {\n return useWebsocket;\n },\n useSendMessage: function() {\n return useSendMessage;\n },\n useTurbopack: function() {\n return useTurbopack;\n },\n useWebsocketPing: function() {\n return useWebsocketPing;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../../../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _getsocketurl = __webpack_require__(/*! ./get-socket-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/get-socket-url.js\");\nfunction useWebsocket(assetPrefix) {\n const webSocketRef = (0, _react.useRef)();\n (0, _react.useEffect)(()=>{\n if (webSocketRef.current) {\n return;\n }\n const url = (0, _getsocketurl.getSocketUrl)(assetPrefix);\n webSocketRef.current = new window.WebSocket(\"\" + url + \"/_next/webpack-hmr\");\n }, [\n assetPrefix\n ]);\n return webSocketRef;\n}\nfunction useSendMessage(webSocketRef) {\n const sendMessage = (0, _react.useCallback)((data)=>{\n const socket = webSocketRef.current;\n if (!socket || socket.readyState !== socket.OPEN) {\n return;\n }\n return socket.send(data);\n }, [\n webSocketRef\n ]);\n return sendMessage;\n}\nfunction useTurbopack(sendMessage) {\n const turbopackState = (0, _react.useRef)({\n init: false,\n // Until the dynamic import resolves, queue any turbopack messages which will be replayed.\n queue: [],\n callback: undefined\n });\n const processTurbopackMessage = (0, _react.useCallback)((msg)=>{\n var _msg_type;\n if (\"type\" in msg && ((_msg_type = msg.type) == null ? void 0 : _msg_type.startsWith(\"turbopack-\"))) {\n const { callback, queue } = turbopackState.current;\n if (callback) {\n callback(msg);\n } else {\n queue.push(msg);\n }\n return true;\n }\n return false;\n }, []);\n (0, _react.useEffect)(()=>{\n const { current: initCurrent } = turbopackState;\n // TODO(WEB-1589): only install if `process.turbopack` set.\n if (initCurrent.init) {\n return;\n }\n initCurrent.init = true;\n Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! @vercel/turbopack-ecmascript-runtime/dev/client/hmr-client.ts */ \"(app-pages-browser)/./node_modules/next/dist/client/dev/noop-turbopack-hmr.js\"))).then((param)=>{\n let { connect } = param;\n const { current } = turbopackState;\n connect({\n addMessageListener (cb) {\n current.callback = cb;\n // Replay all Turbopack messages before we were able to establish the HMR client.\n for (const msg of current.queue){\n cb(msg);\n }\n current.queue = undefined;\n },\n sendMessage\n });\n });\n }, [\n sendMessage\n ]);\n return processTurbopackMessage;\n}\nfunction useWebsocketPing(websocketRef) {\n _s();\n const sendMessage = useSendMessage(websocketRef);\n const { tree } = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n (0, _react.useEffect)(()=>{\n // Taken from on-demand-entries-client.js\n const interval = setInterval(()=>{\n sendMessage(JSON.stringify({\n event: \"ping\",\n tree,\n appDirRoute: true\n }));\n }, 2500);\n return ()=>clearInterval(interval);\n }, [\n tree,\n sendMessage\n ]);\n}\n_s(useWebsocketPing, \"wUse5NG7XMV1uhKK1kY0LLDje8k=\", false, function() {\n return [\n useSendMessage\n ];\n});\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-websocket.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaGVscGVycy91c2Utd2Vic29ja2V0LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0FBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBS047QUFDQSxTQUFTSyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJWCxPQUFPQyxjQUFjLENBQUNTLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUVAsU0FBUztJQUNiRyxjQUFjO1FBQ1YsT0FBT0E7SUFDWDtJQUNBQyxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLGNBQWM7UUFDVixPQUFPQTtJQUNYO0lBQ0FDLGtCQUFrQjtRQUNkLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLFNBQVNDLG1CQUFPQSxDQUFDLG1GQUFPO0FBQzlCLE1BQU1DLGlDQUFpQ0QsbUJBQU9BLENBQUMsaUtBQTZEO0FBQzVHLE1BQU1FLGdCQUFnQkYsbUJBQU9BLENBQUMsNklBQWtCO0FBQ2hELFNBQVNYLGFBQWFjLFdBQVc7SUFDN0IsTUFBTUMsZUFBZSxDQUFDLEdBQUdMLE9BQU9NLE1BQU07SUFDckMsSUFBR04sT0FBT08sU0FBUyxFQUFFO1FBQ2xCLElBQUlGLGFBQWFHLE9BQU8sRUFBRTtZQUN0QjtRQUNKO1FBQ0EsTUFBTUMsTUFBTSxDQUFDLEdBQUdOLGNBQWNPLFlBQVksRUFBRU47UUFDNUNDLGFBQWFHLE9BQU8sR0FBRyxJQUFJRyxPQUFPQyxTQUFTLENBQUMsS0FBS0gsTUFBTTtJQUMzRCxHQUFHO1FBQ0NMO0tBQ0g7SUFDRCxPQUFPQztBQUNYO0FBQ0EsU0FBU2QsZUFBZWMsWUFBWTtJQUNoQyxNQUFNUSxjQUFjLENBQUMsR0FBR2IsT0FBT2MsV0FBVyxFQUFFLENBQUNDO1FBQ3pDLE1BQU1DLFNBQVNYLGFBQWFHLE9BQU87UUFDbkMsSUFBSSxDQUFDUSxVQUFVQSxPQUFPQyxVQUFVLEtBQUtELE9BQU9FLElBQUksRUFBRTtZQUM5QztRQUNKO1FBQ0EsT0FBT0YsT0FBT0csSUFBSSxDQUFDSjtJQUN2QixHQUFHO1FBQ0NWO0tBQ0g7SUFDRCxPQUFPUTtBQUNYO0FBQ0EsU0FBU3JCLGFBQWFxQixXQUFXO0lBQzdCLE1BQU1PLGlCQUFpQixDQUFDLEdBQUdwQixPQUFPTSxNQUFNLEVBQUU7UUFDdENlLE1BQU07UUFDTiwwRkFBMEY7UUFDMUZDLE9BQU8sRUFBRTtRQUNUQyxVQUFVQztJQUNkO0lBQ0EsTUFBTUMsMEJBQTBCLENBQUMsR0FBR3pCLE9BQU9jLFdBQVcsRUFBRSxDQUFDWTtRQUNyRCxJQUFJQztRQUNKLElBQUksVUFBVUQsT0FBUSxFQUFDQyxZQUFZRCxJQUFJRSxJQUFJLEtBQUssT0FBTyxLQUFLLElBQUlELFVBQVVFLFVBQVUsQ0FBQyxhQUFZLEdBQUk7WUFDakcsTUFBTSxFQUFFTixRQUFRLEVBQUVELEtBQUssRUFBRSxHQUFHRixlQUFlWixPQUFPO1lBQ2xELElBQUllLFVBQVU7Z0JBQ1ZBLFNBQVNHO1lBQ2IsT0FBTztnQkFDSEosTUFBTVEsSUFBSSxDQUFDSjtZQUNmO1lBQ0EsT0FBTztRQUNYO1FBQ0EsT0FBTztJQUNYLEdBQUcsRUFBRTtJQUNKLElBQUcxQixPQUFPTyxTQUFTLEVBQUU7UUFDbEIsTUFBTSxFQUFFQyxTQUFTdUIsV0FBVyxFQUFFLEdBQUdYO1FBQ2pDLDJEQUEyRDtRQUMzRCxJQUFJVyxZQUFZVixJQUFJLEVBQUU7WUFDbEI7UUFDSjtRQUNBVSxZQUFZVixJQUFJLEdBQUc7UUFDbkIseUZBQ0Esb0pBQStELElBQUVXLElBQUksQ0FBQyxDQUFDQztZQUNuRSxJQUFJLEVBQUVDLE9BQU8sRUFBRSxHQUFHRDtZQUNsQixNQUFNLEVBQUV6QixPQUFPLEVBQUUsR0FBR1k7WUFDcEJjLFFBQVE7Z0JBQ0pDLG9CQUFvQkMsRUFBRTtvQkFDbEI1QixRQUFRZSxRQUFRLEdBQUdhO29CQUNuQixpRkFBaUY7b0JBQ2pGLEtBQUssTUFBTVYsT0FBT2xCLFFBQVFjLEtBQUssQ0FBQzt3QkFDNUJjLEdBQUdWO29CQUNQO29CQUNBbEIsUUFBUWMsS0FBSyxHQUFHRTtnQkFDcEI7Z0JBQ0FYO1lBQ0o7UUFDSjtJQUNKLEdBQUc7UUFDQ0E7S0FDSDtJQUNELE9BQU9ZO0FBQ1g7QUFDQSxTQUFTaEMsaUJBQWlCNEMsWUFBWTs7SUFDbEMsTUFBTXhCLGNBQWN0QixlQUFlOEM7SUFDbkMsTUFBTSxFQUFFQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUd0QyxPQUFPdUMsVUFBVSxFQUFFckMsK0JBQStCc0MseUJBQXlCO0lBQy9GLElBQUd4QyxPQUFPTyxTQUFTLEVBQUU7UUFDbEIseUNBQXlDO1FBQ3pDLE1BQU1rQyxXQUFXQyxZQUFZO1lBQ3pCN0IsWUFBWThCLEtBQUtDLFNBQVMsQ0FBQztnQkFDdkJDLE9BQU87Z0JBQ1BQO2dCQUNBUSxhQUFhO1lBQ2pCO1FBQ0osR0FBRztRQUNILE9BQU8sSUFBSUMsY0FBY047SUFDN0IsR0FBRztRQUNDSDtRQUNBekI7S0FDSDtBQUNMO0dBakJTcEI7O1FBQ2VGOzs7QUFrQnhCLElBQUksQ0FBQyxPQUFPSixRQUFRNkQsT0FBTyxLQUFLLGNBQWUsT0FBTzdELFFBQVE2RCxPQUFPLEtBQUssWUFBWTdELFFBQVE2RCxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU83RCxRQUFRNkQsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2hFLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTZELE9BQU8sRUFBRSxjQUFjO1FBQUU1RCxPQUFPO0lBQUs7SUFDbkVILE9BQU9pRSxNQUFNLENBQUMvRCxRQUFRNkQsT0FBTyxFQUFFN0Q7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUTZELE9BQU87QUFDbEMsRUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9oZWxwZXJzL3VzZS13ZWJzb2NrZXQuanM/N2I4MSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIHVzZVdlYnNvY2tldDogbnVsbCxcbiAgICB1c2VTZW5kTWVzc2FnZTogbnVsbCxcbiAgICB1c2VUdXJib3BhY2s6IG51bGwsXG4gICAgdXNlV2Vic29ja2V0UGluZzogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICB1c2VXZWJzb2NrZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXNlV2Vic29ja2V0O1xuICAgIH0sXG4gICAgdXNlU2VuZE1lc3NhZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXNlU2VuZE1lc3NhZ2U7XG4gICAgfSxcbiAgICB1c2VUdXJib3BhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXNlVHVyYm9wYWNrO1xuICAgIH0sXG4gICAgdXNlV2Vic29ja2V0UGluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VXZWJzb2NrZXRQaW5nO1xuICAgIH1cbn0pO1xuY29uc3QgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuY29uc3QgX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX2dldHNvY2tldHVybCA9IHJlcXVpcmUoXCIuL2dldC1zb2NrZXQtdXJsXCIpO1xuZnVuY3Rpb24gdXNlV2Vic29ja2V0KGFzc2V0UHJlZml4KSB7XG4gICAgY29uc3Qgd2ViU29ja2V0UmVmID0gKDAsIF9yZWFjdC51c2VSZWYpKCk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGlmICh3ZWJTb2NrZXRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVybCA9ICgwLCBfZ2V0c29ja2V0dXJsLmdldFNvY2tldFVybCkoYXNzZXRQcmVmaXgpO1xuICAgICAgICB3ZWJTb2NrZXRSZWYuY3VycmVudCA9IG5ldyB3aW5kb3cuV2ViU29ja2V0KFwiXCIgKyB1cmwgKyBcIi9fbmV4dC93ZWJwYWNrLWhtclwiKTtcbiAgICB9LCBbXG4gICAgICAgIGFzc2V0UHJlZml4XG4gICAgXSk7XG4gICAgcmV0dXJuIHdlYlNvY2tldFJlZjtcbn1cbmZ1bmN0aW9uIHVzZVNlbmRNZXNzYWdlKHdlYlNvY2tldFJlZikge1xuICAgIGNvbnN0IHNlbmRNZXNzYWdlID0gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKGRhdGEpPT57XG4gICAgICAgIGNvbnN0IHNvY2tldCA9IHdlYlNvY2tldFJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIXNvY2tldCB8fCBzb2NrZXQucmVhZHlTdGF0ZSAhPT0gc29ja2V0Lk9QRU4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc29ja2V0LnNlbmQoZGF0YSk7XG4gICAgfSwgW1xuICAgICAgICB3ZWJTb2NrZXRSZWZcbiAgICBdKTtcbiAgICByZXR1cm4gc2VuZE1lc3NhZ2U7XG59XG5mdW5jdGlvbiB1c2VUdXJib3BhY2soc2VuZE1lc3NhZ2UpIHtcbiAgICBjb25zdCB0dXJib3BhY2tTdGF0ZSA9ICgwLCBfcmVhY3QudXNlUmVmKSh7XG4gICAgICAgIGluaXQ6IGZhbHNlLFxuICAgICAgICAvLyBVbnRpbCB0aGUgZHluYW1pYyBpbXBvcnQgcmVzb2x2ZXMsIHF1ZXVlIGFueSB0dXJib3BhY2sgbWVzc2FnZXMgd2hpY2ggd2lsbCBiZSByZXBsYXllZC5cbiAgICAgICAgcXVldWU6IFtdLFxuICAgICAgICBjYWxsYmFjazogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgY29uc3QgcHJvY2Vzc1R1cmJvcGFja01lc3NhZ2UgPSAoMCwgX3JlYWN0LnVzZUNhbGxiYWNrKSgobXNnKT0+e1xuICAgICAgICB2YXIgX21zZ190eXBlO1xuICAgICAgICBpZiAoXCJ0eXBlXCIgaW4gbXNnICYmICgoX21zZ190eXBlID0gbXNnLnR5cGUpID09IG51bGwgPyB2b2lkIDAgOiBfbXNnX3R5cGUuc3RhcnRzV2l0aChcInR1cmJvcGFjay1cIikpKSB7XG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCBxdWV1ZSB9ID0gdHVyYm9wYWNrU3RhdGUuY3VycmVudDtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG1zZyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2gobXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LCBbXSk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogaW5pdEN1cnJlbnQgfSA9IHR1cmJvcGFja1N0YXRlO1xuICAgICAgICAvLyBUT0RPKFdFQi0xNTg5KTogb25seSBpbnN0YWxsIGlmIGBwcm9jZXNzLnR1cmJvcGFja2Agc2V0LlxuICAgICAgICBpZiAoaW5pdEN1cnJlbnQuaW5pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluaXRDdXJyZW50LmluaXQgPSB0cnVlO1xuICAgICAgICBpbXBvcnQoLy8gQHRzLWV4cGVjdC1lcnJvciByZXF1aXJlcyBcIm1vZHVsZVJlc29sdXRpb25cIjogXCJub2RlMTZcIiBpbiB0c2NvbmZpZy5qc29uIGFuZCBub3QgLnRzIGV4dGVuc2lvblxuICAgICAgICBcIkB2ZXJjZWwvdHVyYm9wYWNrLWVjbWFzY3JpcHQtcnVudGltZS9kZXYvY2xpZW50L2htci1jbGllbnQudHNcIikudGhlbigocGFyYW0pPT57XG4gICAgICAgICAgICBsZXQgeyBjb25uZWN0IH0gPSBwYXJhbTtcbiAgICAgICAgICAgIGNvbnN0IHsgY3VycmVudCB9ID0gdHVyYm9wYWNrU3RhdGU7XG4gICAgICAgICAgICBjb25uZWN0KHtcbiAgICAgICAgICAgICAgICBhZGRNZXNzYWdlTGlzdGVuZXIgKGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuY2FsbGJhY2sgPSBjYjtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGF5IGFsbCBUdXJib3BhY2sgbWVzc2FnZXMgYmVmb3JlIHdlIHdlcmUgYWJsZSB0byBlc3RhYmxpc2ggdGhlIEhNUiBjbGllbnQuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbXNnIG9mIGN1cnJlbnQucXVldWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IobXNnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnF1ZXVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9LCBbXG4gICAgICAgIHNlbmRNZXNzYWdlXG4gICAgXSk7XG4gICAgcmV0dXJuIHByb2Nlc3NUdXJib3BhY2tNZXNzYWdlO1xufVxuZnVuY3Rpb24gdXNlV2Vic29ja2V0UGluZyh3ZWJzb2NrZXRSZWYpIHtcbiAgICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZVNlbmRNZXNzYWdlKHdlYnNvY2tldFJlZik7XG4gICAgY29uc3QgeyB0cmVlIH0gPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5HbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0KTtcbiAgICAoMCwgX3JlYWN0LnVzZUVmZmVjdCkoKCk9PntcbiAgICAgICAgLy8gVGFrZW4gZnJvbSBvbi1kZW1hbmQtZW50cmllcy1jbGllbnQuanNcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKT0+e1xuICAgICAgICAgICAgc2VuZE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGV2ZW50OiBcInBpbmdcIixcbiAgICAgICAgICAgICAgICB0cmVlLFxuICAgICAgICAgICAgICAgIGFwcERpclJvdXRlOiB0cnVlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIDI1MDApO1xuICAgICAgICByZXR1cm4gKCk9PmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgIH0sIFtcbiAgICAgICAgdHJlZSxcbiAgICAgICAgc2VuZE1lc3NhZ2VcbiAgICBdKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLXdlYnNvY2tldC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJ1c2VXZWJzb2NrZXQiLCJ1c2VTZW5kTWVzc2FnZSIsInVzZVR1cmJvcGFjayIsInVzZVdlYnNvY2tldFBpbmciLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfcmVhY3QiLCJyZXF1aXJlIiwiX2FwcHJvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lIiwiX2dldHNvY2tldHVybCIsImFzc2V0UHJlZml4Iiwid2ViU29ja2V0UmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiY3VycmVudCIsInVybCIsImdldFNvY2tldFVybCIsIndpbmRvdyIsIldlYlNvY2tldCIsInNlbmRNZXNzYWdlIiwidXNlQ2FsbGJhY2siLCJkYXRhIiwic29ja2V0IiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJzZW5kIiwidHVyYm9wYWNrU3RhdGUiLCJpbml0IiwicXVldWUiLCJjYWxsYmFjayIsInVuZGVmaW5lZCIsInByb2Nlc3NUdXJib3BhY2tNZXNzYWdlIiwibXNnIiwiX21zZ190eXBlIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJwdXNoIiwiaW5pdEN1cnJlbnQiLCJ0aGVuIiwicGFyYW0iLCJjb25uZWN0IiwiYWRkTWVzc2FnZUxpc3RlbmVyIiwiY2IiLCJ3ZWJzb2NrZXRSZWYiLCJ0cmVlIiwidXNlQ29udGV4dCIsIkdsb2JhbExheW91dFJvdXRlckNvbnRleHQiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiYXBwRGlyUm91dGUiLCJjbGVhckludGVydmFsIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-websocket.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js": +/*!***********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js ***! + \***********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useOnClickOutside\", ({\n enumerable: true,\n get: function() {\n return useOnClickOutside;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nfunction useOnClickOutside(el, handler) {\n _s();\n _react.useEffect(()=>{\n if (el == null || handler == null) {\n return;\n }\n const listener = (e)=>{\n // Do nothing if clicking ref's element or descendent elements\n if (!el || el.contains(e.target)) {\n return;\n }\n handler(e);\n };\n const root = el.getRootNode();\n root.addEventListener(\"mousedown\", listener);\n root.addEventListener(\"touchstart\", listener);\n return function() {\n root.removeEventListener(\"mousedown\", listener);\n root.removeEventListener(\"touchstart\", listener);\n };\n }, [\n handler,\n el\n ]);\n}\n_s(useOnClickOutside, \"OD7bBpZva5O2jO+Puf00hKivP7c=\");\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-on-click-outside.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaG9va3MvdXNlLW9uLWNsaWNrLW91dHNpZGUuanMiLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgscURBQW9EO0lBQ2hESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUMsU0FBUyxXQUFXLEdBQUdGLDBCQUEwQkcsQ0FBQyxDQUFDRixtQkFBT0EsQ0FBQyxtRkFBTztBQUN4RSxTQUFTRixrQkFBa0JLLEVBQUUsRUFBRUMsT0FBTzs7SUFDbENILE9BQU9JLFNBQVMsQ0FBQztRQUNiLElBQUlGLE1BQU0sUUFBUUMsV0FBVyxNQUFNO1lBQy9CO1FBQ0o7UUFDQSxNQUFNRSxXQUFXLENBQUNDO1lBQ2QsOERBQThEO1lBQzlELElBQUksQ0FBQ0osTUFBTUEsR0FBR0ssUUFBUSxDQUFDRCxFQUFFRSxNQUFNLEdBQUc7Z0JBQzlCO1lBQ0o7WUFDQUwsUUFBUUc7UUFDWjtRQUNBLE1BQU1HLE9BQU9QLEdBQUdRLFdBQVc7UUFDM0JELEtBQUtFLGdCQUFnQixDQUFDLGFBQWFOO1FBQ25DSSxLQUFLRSxnQkFBZ0IsQ0FBQyxjQUFjTjtRQUNwQyxPQUFPO1lBQ0hJLEtBQUtHLG1CQUFtQixDQUFDLGFBQWFQO1lBQ3RDSSxLQUFLRyxtQkFBbUIsQ0FBQyxjQUFjUDtRQUMzQztJQUNKLEdBQUc7UUFDQ0Y7UUFDQUQ7S0FDSDtBQUNMO0dBdkJTTDtBQXlCVCxJQUFJLENBQUMsT0FBT0osUUFBUW9CLE9BQU8sS0FBSyxjQUFlLE9BQU9wQixRQUFRb0IsT0FBTyxLQUFLLFlBQVlwQixRQUFRb0IsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPcEIsUUFBUW9CLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt2QixPQUFPQyxjQUFjLENBQUNDLFFBQVFvQixPQUFPLEVBQUUsY0FBYztRQUFFbkIsT0FBTztJQUFLO0lBQ25FSCxPQUFPd0IsTUFBTSxDQUFDdEIsUUFBUW9CLE9BQU8sRUFBRXBCO0lBQy9CdUIsT0FBT3ZCLE9BQU8sR0FBR0EsUUFBUW9CLE9BQU87QUFDbEMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9ob29rcy91c2Utb24tY2xpY2stb3V0c2lkZS5qcz9jNjkwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidXNlT25DbGlja091dHNpZGVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZU9uQ2xpY2tPdXRzaWRlO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmZ1bmN0aW9uIHVzZU9uQ2xpY2tPdXRzaWRlKGVsLCBoYW5kbGVyKSB7XG4gICAgX3JlYWN0LnVzZUVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoZWwgPT0gbnVsbCB8fCBoYW5kbGVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaXN0ZW5lciA9IChlKT0+e1xuICAgICAgICAgICAgLy8gRG8gbm90aGluZyBpZiBjbGlja2luZyByZWYncyBlbGVtZW50IG9yIGRlc2NlbmRlbnQgZWxlbWVudHNcbiAgICAgICAgICAgIGlmICghZWwgfHwgZWwuY29udGFpbnMoZS50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFuZGxlcihlKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IGVsLmdldFJvb3ROb2RlKCk7XG4gICAgICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBsaXN0ZW5lcik7XG4gICAgICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIiwgbGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgcm9vdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLCBsaXN0ZW5lcik7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBoYW5kbGVyLFxuICAgICAgICBlbFxuICAgIF0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2Utb24tY2xpY2stb3V0c2lkZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwidXNlT25DbGlja091dHNpZGUiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdCIsIl8iLCJlbCIsImhhbmRsZXIiLCJ1c2VFZmZlY3QiLCJsaXN0ZW5lciIsImUiLCJjb250YWlucyIsInRhcmdldCIsInJvb3QiLCJnZXRSb290Tm9kZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js ***! + \************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CloseIcon\", ({\n enumerable: true,\n get: function() {\n return CloseIcon;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst CloseIcon = ()=>{\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"svg\", {\n width: \"24\",\n height: \"24\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M18 6L6 18\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"path\", {\n d: \"M6 6L18 18\",\n stroke: \"currentColor\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n })\n ]\n });\n};\n_c = CloseIcon;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CloseIcon.js.map\nvar _c;\n$RefreshReg$(_c, \"CloseIcon\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvaWNvbnMvQ2xvc2VJY29uLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw2Q0FBNEM7SUFDeENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyw0QkFBNEJDLG1CQUFPQSxDQUFDLGtJQUEwQztBQUNwRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILDBCQUEwQkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyxtRkFBTztBQUN4RSxNQUFNRixZQUFZO0lBQ2QsT0FBcUIsV0FBSCxHQUFJLElBQUdHLFlBQVlHLElBQUksRUFBRSxPQUFPO1FBQzlDQyxPQUFPO1FBQ1BDLFFBQVE7UUFDUkMsU0FBUztRQUNUQyxNQUFNO1FBQ05DLE9BQU87UUFDUEMsVUFBVTtZQUNOLFdBQVcsR0FBSSxJQUFHVCxZQUFZVSxHQUFHLEVBQUUsUUFBUTtnQkFDdkNDLEdBQUc7Z0JBQ0hDLFFBQVE7Z0JBQ1JDLGFBQWE7Z0JBQ2JDLGVBQWU7Z0JBQ2ZDLGdCQUFnQjtZQUNwQjtZQUNBLFdBQVcsR0FBSSxJQUFHZixZQUFZVSxHQUFHLEVBQUUsUUFBUTtnQkFDdkNDLEdBQUc7Z0JBQ0hDLFFBQVE7Z0JBQ1JDLGFBQWE7Z0JBQ2JDLGVBQWU7Z0JBQ2ZDLGdCQUFnQjtZQUNwQjtTQUNIO0lBQ0w7QUFDSjtLQXhCTWxCO0FBMEJOLElBQUksQ0FBQyxPQUFPSixRQUFRdUIsT0FBTyxLQUFLLGNBQWUsT0FBT3ZCLFFBQVF1QixPQUFPLEtBQUssWUFBWXZCLFFBQVF1QixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU92QixRQUFRdUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzFCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXVCLE9BQU8sRUFBRSxjQUFjO1FBQUV0QixPQUFPO0lBQUs7SUFDbkVILE9BQU8yQixNQUFNLENBQUN6QixRQUFRdUIsT0FBTyxFQUFFdkI7SUFDL0IwQixPQUFPMUIsT0FBTyxHQUFHQSxRQUFRdUIsT0FBTztBQUNsQyxFQUVBLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL2ljb25zL0Nsb3NlSWNvbi5qcz82OGM4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2xvc2VJY29uXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDbG9zZUljb247XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBDbG9zZUljb24gPSAoKT0+e1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcInN2Z1wiLCB7XG4gICAgICAgIHdpZHRoOiBcIjI0XCIsXG4gICAgICAgIGhlaWdodDogXCIyNFwiLFxuICAgICAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICBkOiBcIk0xOCA2TDYgMThcIixcbiAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICBkOiBcIk02IDZMMTggMThcIixcbiAgICAgICAgICAgICAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1DbG9zZUljb24uanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkNsb3NlSWNvbiIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwianN4cyIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJ4bWxucyIsImNoaWxkcmVuIiwianN4IiwiZCIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js ***! + \********************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Base\", ({\n enumerable: true,\n get: function() {\n return Base;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n :host {\\n --size-gap-half: 4px;\\n --size-gap: 8px;\\n --size-gap-double: 16px;\\n --size-gap-triple: 24px;\\n --size-gap-quad: 32px;\\n\\n --size-font-small: 14px;\\n --size-font: 16px;\\n --size-font-big: 20px;\\n --size-font-bigger: 24px;\\n\\n --color-accents-1: #808080;\\n --color-accents-2: #222222;\\n --color-accents-3: #404040;\\n\\n --font-stack-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono',\\n Menlo, Courier, monospace;\\n\\n --color-ansi-selection: rgba(95, 126, 151, 0.48);\\n --color-ansi-bg: #111111;\\n --color-ansi-fg: #cccccc;\\n\\n --color-ansi-white: #777777;\\n --color-ansi-black: #141414;\\n --color-ansi-blue: #00aaff;\\n --color-ansi-cyan: #88ddff;\\n --color-ansi-green: #98ec65;\\n --color-ansi-magenta: #aa88ff;\\n --color-ansi-red: #ff5555;\\n --color-ansi-yellow: #ffcc33;\\n --color-ansi-bright-white: #ffffff;\\n --color-ansi-bright-black: #777777;\\n --color-ansi-bright-blue: #33bbff;\\n --color-ansi-bright-cyan: #bbecff;\\n --color-ansi-bright-green: #b6f292;\\n --color-ansi-bright-magenta: #cebbff;\\n --color-ansi-bright-red: #ff8888;\\n --color-ansi-bright-yellow: #ffd966;\\n }\\n\\n .mono {\\n font-family: var(--font-stack-monospace);\\n }\\n\\n h1,\\n h2,\\n h3,\\n h4,\\n h5,\\n h6 {\\n margin-bottom: var(--size-gap);\\n font-weight: 500;\\n line-height: 1.5;\\n }\\n \"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction Base() {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n children: (0, _nooptemplate.noop)(_templateObject())\n });\n}\n_c = Base;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=Base.js.map\nvar _c;\n$RefreshReg$(_c, \"Base\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvc3R5bGVzL0Jhc2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHdDQUF1QztJQUNuQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDRCQUE0QkMsbUJBQU9BLENBQUMsa0lBQTBDO0FBQ3BGLE1BQU1DLGlDQUFpQ0QsbUJBQU9BLENBQUMsNElBQStDO0FBQzlGLE1BQU1FLGNBQWNGLG1CQUFPQSxDQUFDLHFHQUFtQjtBQUMvQyxNQUFNRyxTQUFTLFdBQVcsR0FBR0osMEJBQTBCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLG1GQUFPO0FBQ3hFLE1BQU1LLGdCQUFnQkwsbUJBQU9BLENBQUMsb0pBQTBCO0FBQ3hELFNBQVNNO0lBQ0wsTUFBTUMsT0FBT04sK0JBQStCRyxDQUFDLENBQUM7UUFDMUM7S0FDSDtJQUNERSxrQkFBa0I7UUFDZCxPQUFPQztJQUNYO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLFNBQVNUO0lBQ0wsT0FBcUIsV0FBSCxHQUFJLElBQUdJLFlBQVlNLEdBQUcsRUFBRSxTQUFTO1FBQy9DQyxVQUFVLENBQUMsR0FBR0osY0FBY0ssSUFBSSxFQUFFSjtJQUN0QztBQUNKO0tBSlNSO0FBTVQsSUFBSSxDQUFDLE9BQU9KLFFBQVFpQixPQUFPLEtBQUssY0FBZSxPQUFPakIsUUFBUWlCLE9BQU8sS0FBSyxZQUFZakIsUUFBUWlCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2pCLFFBQVFpQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLcEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRaUIsT0FBTyxFQUFFLGNBQWM7UUFBRWhCLE9BQU87SUFBSztJQUNuRUgsT0FBT3FCLE1BQU0sQ0FBQ25CLFFBQVFpQixPQUFPLEVBQUVqQjtJQUMvQm9CLE9BQU9wQixPQUFPLEdBQUdBLFFBQVFpQixPQUFPO0FBQ2xDLEVBRUEsZ0NBQWdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvc3R5bGVzL0Jhc2UuanM/ZTEyMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJhc2VcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEJhc2U7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlXCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX25vb3B0ZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL25vb3AtdGVtcGxhdGVcIik7XG5mdW5jdGlvbiBfdGVtcGxhdGVPYmplY3QoKSB7XG4gICAgY29uc3QgZGF0YSA9IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZS5fKFtcbiAgICAgICAgXCJcXG4gICAgICAgIDpob3N0IHtcXG4gICAgICAgICAgLS1zaXplLWdhcC1oYWxmOiA0cHg7XFxuICAgICAgICAgIC0tc2l6ZS1nYXA6IDhweDtcXG4gICAgICAgICAgLS1zaXplLWdhcC1kb3VibGU6IDE2cHg7XFxuICAgICAgICAgIC0tc2l6ZS1nYXAtdHJpcGxlOiAyNHB4O1xcbiAgICAgICAgICAtLXNpemUtZ2FwLXF1YWQ6IDMycHg7XFxuXFxuICAgICAgICAgIC0tc2l6ZS1mb250LXNtYWxsOiAxNHB4O1xcbiAgICAgICAgICAtLXNpemUtZm9udDogMTZweDtcXG4gICAgICAgICAgLS1zaXplLWZvbnQtYmlnOiAyMHB4O1xcbiAgICAgICAgICAtLXNpemUtZm9udC1iaWdnZXI6IDI0cHg7XFxuXFxuICAgICAgICAgIC0tY29sb3ItYWNjZW50cy0xOiAjODA4MDgwO1xcbiAgICAgICAgICAtLWNvbG9yLWFjY2VudHMtMjogIzIyMjIyMjtcXG4gICAgICAgICAgLS1jb2xvci1hY2NlbnRzLTM6ICM0MDQwNDA7XFxuXFxuICAgICAgICAgIC0tZm9udC1zdGFjay1tb25vc3BhY2U6ICdTRk1vbm8tUmVndWxhcicsIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJyxcXG4gICAgICAgICAgICBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlO1xcblxcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktc2VsZWN0aW9uOiByZ2JhKDk1LCAxMjYsIDE1MSwgMC40OCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1iZzogIzExMTExMTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWZnOiAjY2NjY2NjO1xcblxcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktd2hpdGU6ICM3Nzc3Nzc7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1ibGFjazogIzE0MTQxNDtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJsdWU6ICMwMGFhZmY7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1jeWFuOiAjODhkZGZmO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktZ3JlZW46ICM5OGVjNjU7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1tYWdlbnRhOiAjYWE4OGZmO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktcmVkOiAjZmY1NTU1O1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2kteWVsbG93OiAjZmZjYzMzO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LXdoaXRlOiAjZmZmZmZmO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LWJsYWNrOiAjNzc3Nzc3O1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LWJsdWU6ICMzM2JiZmY7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQtY3lhbjogI2JiZWNmZjtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1ncmVlbjogI2I2ZjI5MjtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1tYWdlbnRhOiAjY2ViYmZmO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LXJlZDogI2ZmODg4ODtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC15ZWxsb3c6ICNmZmQ5NjY7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAubW9ubyB7XFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBoMSxcXG4gICAgICAgIGgyLFxcbiAgICAgICAgaDMsXFxuICAgICAgICBoNCxcXG4gICAgICAgIGg1LFxcbiAgICAgICAgaDYge1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLWdhcCk7XFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAgICAgICB9XFxuICAgICAgXCJcbiAgICBdKTtcbiAgICBfdGVtcGxhdGVPYmplY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcbiAgICByZXR1cm4gZGF0YTtcbn1cbmZ1bmN0aW9uIEJhc2UoKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzdHlsZVwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiAoMCwgX25vb3B0ZW1wbGF0ZS5ub29wKShfdGVtcGxhdGVPYmplY3QoKSlcbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmFzZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQmFzZSIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX25vb3B0ZW1wbGF0ZSIsIl90ZW1wbGF0ZU9iamVjdCIsImRhdGEiLCJqc3giLCJjaGlsZHJlbiIsIm5vb3AiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js ***! + \*******************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ComponentStyles\", ({\n enumerable: true,\n get: function() {\n return ComponentStyles;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _styles = __webpack_require__(/*! ../components/CodeFrame/styles */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js\");\nconst _Dialog = __webpack_require__(/*! ../components/Dialog */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js\");\nconst _styles1 = __webpack_require__(/*! ../components/LeftRightDialogHeader/styles */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js\");\nconst _styles2 = __webpack_require__(/*! ../components/Overlay/styles */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js\");\nconst _styles3 = __webpack_require__(/*! ../components/Terminal/styles */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js\");\nconst _Toast = __webpack_require__(/*! ../components/Toast */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js\");\nconst _VersionStalenessInfo = __webpack_require__(/*! ../components/VersionStalenessInfo */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js\");\nconst _BuildError = __webpack_require__(/*! ../container/BuildError */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js\");\nconst _RootLayoutError = __webpack_require__(/*! ../container/RootLayoutError */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RootLayoutError.js\");\nconst _Errors = __webpack_require__(/*! ../container/Errors */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js\");\nconst _RuntimeError = __webpack_require__(/*! ../container/RuntimeError */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js\");\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \",\n \"\\n \"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction ComponentStyles() {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n children: (0, _nooptemplate.noop)(_templateObject(), _styles2.styles, _Toast.styles, _Dialog.styles, _styles1.styles, _styles.styles, _styles3.styles, _BuildError.styles, _RootLayoutError.styles, _Errors.styles, _RuntimeError.styles, _VersionStalenessInfo.styles)\n });\n}\n_c = ComponentStyles;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ComponentStyles.js.map\nvar _c;\n$RefreshReg$(_c, \"ComponentStyles\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvc3R5bGVzL0NvbXBvbmVudFN0eWxlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsbURBQWtEO0lBQzlDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsNEJBQTRCQyxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUMsaUNBQWlDRCxtQkFBT0EsQ0FBQyw0SUFBK0M7QUFDOUYsTUFBTUUsY0FBY0YsbUJBQU9BLENBQUMscUdBQW1CO0FBQy9DLE1BQU1HLFNBQVMsV0FBVyxHQUFHSiwwQkFBMEJLLENBQUMsQ0FBQ0osbUJBQU9BLENBQUMsbUZBQU87QUFDeEUsTUFBTUssVUFBVUwsbUJBQU9BLENBQUMsZ0tBQWdDO0FBQ3hELE1BQU1NLFVBQVVOLG1CQUFPQSxDQUFDLGtKQUFzQjtBQUM5QyxNQUFNTyxXQUFXUCxtQkFBT0EsQ0FBQyx3TEFBNEM7QUFDckUsTUFBTVEsV0FBV1IsbUJBQU9BLENBQUMsNEpBQThCO0FBQ3ZELE1BQU1TLFdBQVdULG1CQUFPQSxDQUFDLDhKQUErQjtBQUN4RCxNQUFNVSxTQUFTVixtQkFBT0EsQ0FBQyxnSkFBcUI7QUFDNUMsTUFBTVcsd0JBQXdCWCxtQkFBT0EsQ0FBQyw4S0FBb0M7QUFDMUUsTUFBTVksY0FBY1osbUJBQU9BLENBQUMsa0pBQXlCO0FBQ3JELE1BQU1hLG1CQUFtQmIsbUJBQU9BLENBQUMsNEpBQThCO0FBQy9ELE1BQU1jLFVBQVVkLG1CQUFPQSxDQUFDLDBJQUFxQjtBQUM3QyxNQUFNZSxnQkFBZ0JmLG1CQUFPQSxDQUFDLDRKQUEyQjtBQUN6RCxNQUFNZ0IsZ0JBQWdCaEIsbUJBQU9BLENBQUMsb0pBQTBCO0FBQ3hELFNBQVNpQjtJQUNMLE1BQU1DLE9BQU9qQiwrQkFBK0JHLENBQUMsQ0FBQztRQUMxQztRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7S0FDSDtJQUNEYSxrQkFBa0I7UUFDZCxPQUFPQztJQUNYO0lBQ0EsT0FBT0E7QUFDWDtBQUNBLFNBQVNwQjtJQUNMLE9BQXFCLFdBQUgsR0FBSSxJQUFHSSxZQUFZaUIsR0FBRyxFQUFFLFNBQVM7UUFDL0NDLFVBQVUsQ0FBQyxHQUFHSixjQUFjSyxJQUFJLEVBQUVKLG1CQUFtQlQsU0FBU2MsTUFBTSxFQUFFWixPQUFPWSxNQUFNLEVBQUVoQixRQUFRZ0IsTUFBTSxFQUFFZixTQUFTZSxNQUFNLEVBQUVqQixRQUFRaUIsTUFBTSxFQUFFYixTQUFTYSxNQUFNLEVBQUVWLFlBQVlVLE1BQU0sRUFBRVQsaUJBQWlCUyxNQUFNLEVBQUVSLFFBQVFRLE1BQU0sRUFBRVAsY0FBY08sTUFBTSxFQUFFWCxzQkFBc0JXLE1BQU07SUFDMVE7QUFDSjtLQUpTeEI7QUFNVCxJQUFJLENBQUMsT0FBT0osUUFBUTZCLE9BQU8sS0FBSyxjQUFlLE9BQU83QixRQUFRNkIsT0FBTyxLQUFLLFlBQVk3QixRQUFRNkIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPN0IsUUFBUTZCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktoQyxPQUFPQyxjQUFjLENBQUNDLFFBQVE2QixPQUFPLEVBQUUsY0FBYztRQUFFNUIsT0FBTztJQUFLO0lBQ25FSCxPQUFPaUMsTUFBTSxDQUFDL0IsUUFBUTZCLE9BQU8sRUFBRTdCO0lBQy9CZ0MsT0FBT2hDLE9BQU8sR0FBR0EsUUFBUTZCLE9BQU87QUFDbEMsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWFjdC1kZXYtb3ZlcmxheS9pbnRlcm5hbC9zdHlsZXMvQ29tcG9uZW50U3R5bGVzLmpzPzc4MTUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb21wb25lbnRTdHlsZXNcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVudFN0eWxlcztcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2VcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfc3R5bGVzID0gcmVxdWlyZShcIi4uL2NvbXBvbmVudHMvQ29kZUZyYW1lL3N0eWxlc1wiKTtcbmNvbnN0IF9EaWFsb2cgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9EaWFsb2dcIik7XG5jb25zdCBfc3R5bGVzMSA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL0xlZnRSaWdodERpYWxvZ0hlYWRlci9zdHlsZXNcIik7XG5jb25zdCBfc3R5bGVzMiA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL092ZXJsYXkvc3R5bGVzXCIpO1xuY29uc3QgX3N0eWxlczMgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9UZXJtaW5hbC9zdHlsZXNcIik7XG5jb25zdCBfVG9hc3QgPSByZXF1aXJlKFwiLi4vY29tcG9uZW50cy9Ub2FzdFwiKTtcbmNvbnN0IF9WZXJzaW9uU3RhbGVuZXNzSW5mbyA9IHJlcXVpcmUoXCIuLi9jb21wb25lbnRzL1ZlcnNpb25TdGFsZW5lc3NJbmZvXCIpO1xuY29uc3QgX0J1aWxkRXJyb3IgPSByZXF1aXJlKFwiLi4vY29udGFpbmVyL0J1aWxkRXJyb3JcIik7XG5jb25zdCBfUm9vdExheW91dEVycm9yID0gcmVxdWlyZShcIi4uL2NvbnRhaW5lci9Sb290TGF5b3V0RXJyb3JcIik7XG5jb25zdCBfRXJyb3JzID0gcmVxdWlyZShcIi4uL2NvbnRhaW5lci9FcnJvcnNcIik7XG5jb25zdCBfUnVudGltZUVycm9yID0gcmVxdWlyZShcIi4uL2NvbnRhaW5lci9SdW50aW1lRXJyb3JcIik7XG5jb25zdCBfbm9vcHRlbXBsYXRlID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvbm9vcC10ZW1wbGF0ZVwiKTtcbmZ1bmN0aW9uIF90ZW1wbGF0ZU9iamVjdCgpIHtcbiAgICBjb25zdCBkYXRhID0gX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlLl8oW1xuICAgICAgICBcIlxcbiAgICAgICAgXCIsXG4gICAgICAgIFwiXFxuICAgICAgICBcIixcbiAgICAgICAgXCJcXG4gICAgICAgIFwiLFxuICAgICAgICBcIlxcbiAgICAgICAgXCIsXG4gICAgICAgIFwiXFxuICAgICAgICBcIixcbiAgICAgICAgXCJcXG4gICAgICAgIFwiLFxuICAgICAgICBcIlxcbiAgICAgICAgXFxuICAgICAgICBcIixcbiAgICAgICAgXCJcXG4gICAgICAgIFwiLFxuICAgICAgICBcIlxcbiAgICAgICAgXCIsXG4gICAgICAgIFwiXFxuICAgICAgICBcIixcbiAgICAgICAgXCJcXG4gICAgICAgIFwiLFxuICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgXSk7XG4gICAgX3RlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBDb21wb25lbnRTdHlsZXMoKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzdHlsZVwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiAoMCwgX25vb3B0ZW1wbGF0ZS5ub29wKShfdGVtcGxhdGVPYmplY3QoKSwgX3N0eWxlczIuc3R5bGVzLCBfVG9hc3Quc3R5bGVzLCBfRGlhbG9nLnN0eWxlcywgX3N0eWxlczEuc3R5bGVzLCBfc3R5bGVzLnN0eWxlcywgX3N0eWxlczMuc3R5bGVzLCBfQnVpbGRFcnJvci5zdHlsZXMsIF9Sb290TGF5b3V0RXJyb3Iuc3R5bGVzLCBfRXJyb3JzLnN0eWxlcywgX1J1bnRpbWVFcnJvci5zdHlsZXMsIF9WZXJzaW9uU3RhbGVuZXNzSW5mby5zdHlsZXMpXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbXBvbmVudFN0eWxlcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ29tcG9uZW50U3R5bGVzIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfc3R5bGVzIiwiX0RpYWxvZyIsIl9zdHlsZXMxIiwiX3N0eWxlczIiLCJfc3R5bGVzMyIsIl9Ub2FzdCIsIl9WZXJzaW9uU3RhbGVuZXNzSW5mbyIsIl9CdWlsZEVycm9yIiwiX1Jvb3RMYXlvdXRFcnJvciIsIl9FcnJvcnMiLCJfUnVudGltZUVycm9yIiwiX25vb3B0ZW1wbGF0ZSIsIl90ZW1wbGF0ZU9iamVjdCIsImRhdGEiLCJqc3giLCJjaGlsZHJlbiIsIm5vb3AiLCJzdHlsZXMiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js ***! + \************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"CssReset\", ({\n enumerable: true,\n get: function() {\n return CssReset;\n }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _tagged_template_literal_loose = __webpack_require__(/*! @swc/helpers/_/_tagged_template_literal_loose */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _nooptemplate = __webpack_require__(/*! ../helpers/noop-template */ \"(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js\");\nfunction _templateObject() {\n const data = _tagged_template_literal_loose._([\n \"\\n :host {\\n all: initial;\\n\\n /* the direction property is not reset by 'all' */\\n direction: ltr;\\n }\\n\\n /*!\\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\\n * Copyright 2011-2019 The Bootstrap Authors\\n * Copyright 2011-2019 Twitter, Inc.\\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\\n */\\n *,\\n *::before,\\n *::after {\\n box-sizing: border-box;\\n }\\n\\n :host {\\n font-family: sans-serif;\\n line-height: 1.15;\\n -webkit-text-size-adjust: 100%;\\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n }\\n\\n article,\\n aside,\\n figcaption,\\n figure,\\n footer,\\n header,\\n hgroup,\\n main,\\n nav,\\n section {\\n display: block;\\n }\\n\\n :host {\\n margin: 0;\\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\\n 'Helvetica Neue', Arial, 'Noto Sans', sans-serif,\\n 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\\n 'Noto Color Emoji';\\n font-size: 16px;\\n font-weight: 400;\\n line-height: 1.5;\\n color: #212529;\\n text-align: left;\\n background-color: #fff;\\n }\\n\\n [tabindex='-1']:focus:not(:focus-visible) {\\n outline: 0 !important;\\n }\\n\\n hr {\\n box-sizing: content-box;\\n height: 0;\\n overflow: visible;\\n }\\n\\n h1,\\n h2,\\n h3,\\n h4,\\n h5,\\n h6 {\\n margin-top: 0;\\n margin-bottom: 8px;\\n }\\n\\n p {\\n margin-top: 0;\\n margin-bottom: 16px;\\n }\\n\\n abbr[title],\\n abbr[data-original-title] {\\n text-decoration: underline;\\n -webkit-text-decoration: underline dotted;\\n text-decoration: underline dotted;\\n cursor: help;\\n border-bottom: 0;\\n -webkit-text-decoration-skip-ink: none;\\n text-decoration-skip-ink: none;\\n }\\n\\n address {\\n margin-bottom: 16px;\\n font-style: normal;\\n line-height: inherit;\\n }\\n\\n ol,\\n ul,\\n dl {\\n margin-top: 0;\\n margin-bottom: 16px;\\n }\\n\\n ol ol,\\n ul ul,\\n ol ul,\\n ul ol {\\n margin-bottom: 0;\\n }\\n\\n dt {\\n font-weight: 700;\\n }\\n\\n dd {\\n margin-bottom: 8px;\\n margin-left: 0;\\n }\\n\\n blockquote {\\n margin: 0 0 16px;\\n }\\n\\n b,\\n strong {\\n font-weight: bolder;\\n }\\n\\n small {\\n font-size: 80%;\\n }\\n\\n sub,\\n sup {\\n position: relative;\\n font-size: 75%;\\n line-height: 0;\\n vertical-align: baseline;\\n }\\n\\n sub {\\n bottom: -0.25em;\\n }\\n\\n sup {\\n top: -0.5em;\\n }\\n\\n a {\\n color: #007bff;\\n text-decoration: none;\\n background-color: transparent;\\n }\\n\\n a:hover {\\n color: #0056b3;\\n text-decoration: underline;\\n }\\n\\n a:not([href]) {\\n color: inherit;\\n text-decoration: none;\\n }\\n\\n a:not([href]):hover {\\n color: inherit;\\n text-decoration: none;\\n }\\n\\n pre,\\n code,\\n kbd,\\n samp {\\n font-family: SFMono-Regular, Menlo, Monaco, Consolas,\\n 'Liberation Mono', 'Courier New', monospace;\\n font-size: 1em;\\n }\\n\\n pre {\\n margin-top: 0;\\n margin-bottom: 16px;\\n overflow: auto;\\n }\\n\\n figure {\\n margin: 0 0 16px;\\n }\\n\\n img {\\n vertical-align: middle;\\n border-style: none;\\n }\\n\\n svg {\\n overflow: hidden;\\n vertical-align: middle;\\n }\\n\\n table {\\n border-collapse: collapse;\\n }\\n\\n caption {\\n padding-top: 12px;\\n padding-bottom: 12px;\\n color: #6c757d;\\n text-align: left;\\n caption-side: bottom;\\n }\\n\\n th {\\n text-align: inherit;\\n }\\n\\n label {\\n display: inline-block;\\n margin-bottom: 8px;\\n }\\n\\n button {\\n border-radius: 0;\\n }\\n\\n button:focus {\\n outline: 1px dotted;\\n outline: 5px auto -webkit-focus-ring-color;\\n }\\n\\n input,\\n button,\\n select,\\n optgroup,\\n textarea {\\n margin: 0;\\n font-family: inherit;\\n font-size: inherit;\\n line-height: inherit;\\n }\\n\\n button,\\n input {\\n overflow: visible;\\n }\\n\\n button,\\n select {\\n text-transform: none;\\n }\\n\\n select {\\n word-wrap: normal;\\n }\\n\\n button,\\n [type='button'],\\n [type='reset'],\\n [type='submit'] {\\n -webkit-appearance: button;\\n }\\n\\n button:not(:disabled),\\n [type='button']:not(:disabled),\\n [type='reset']:not(:disabled),\\n [type='submit']:not(:disabled) {\\n cursor: pointer;\\n }\\n\\n button::-moz-focus-inner,\\n [type='button']::-moz-focus-inner,\\n [type='reset']::-moz-focus-inner,\\n [type='submit']::-moz-focus-inner {\\n padding: 0;\\n border-style: none;\\n }\\n\\n input[type='radio'],\\n input[type='checkbox'] {\\n box-sizing: border-box;\\n padding: 0;\\n }\\n\\n input[type='date'],\\n input[type='time'],\\n input[type='datetime-local'],\\n input[type='month'] {\\n -webkit-appearance: listbox;\\n }\\n\\n textarea {\\n overflow: auto;\\n resize: vertical;\\n }\\n\\n fieldset {\\n min-width: 0;\\n padding: 0;\\n margin: 0;\\n border: 0;\\n }\\n\\n legend {\\n display: block;\\n width: 100%;\\n max-width: 100%;\\n padding: 0;\\n margin-bottom: 8px;\\n font-size: 24px;\\n line-height: inherit;\\n color: inherit;\\n white-space: normal;\\n }\\n\\n progress {\\n vertical-align: baseline;\\n }\\n\\n [type='number']::-webkit-inner-spin-button,\\n [type='number']::-webkit-outer-spin-button {\\n height: auto;\\n }\\n\\n [type='search'] {\\n outline-offset: -2px;\\n -webkit-appearance: none;\\n }\\n\\n [type='search']::-webkit-search-decoration {\\n -webkit-appearance: none;\\n }\\n\\n ::-webkit-file-upload-button {\\n font: inherit;\\n -webkit-appearance: button;\\n }\\n\\n output {\\n display: inline-block;\\n }\\n\\n summary {\\n display: list-item;\\n cursor: pointer;\\n }\\n\\n template {\\n display: none;\\n }\\n\\n [hidden] {\\n display: none !important;\\n }\\n \"\n ]);\n _templateObject = function() {\n return data;\n };\n return data;\n}\nfunction CssReset() {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n children: (0, _nooptemplate.noop)(_templateObject())\n });\n}\n_c = CssReset;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=CssReset.js.map\nvar _c;\n$RefreshReg$(_c, \"CssReset\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVhY3QtZGV2LW92ZXJsYXkvaW50ZXJuYWwvc3R5bGVzL0Nzc1Jlc2V0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw0Q0FBMkM7SUFDdkNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyw0QkFBNEJDLG1CQUFPQSxDQUFDLGtJQUEwQztBQUNwRixNQUFNQyxpQ0FBaUNELG1CQUFPQSxDQUFDLDRJQUErQztBQUM5RixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUcsU0FBUyxXQUFXLEdBQUdKLDBCQUEwQkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxtRkFBTztBQUN4RSxNQUFNSyxnQkFBZ0JMLG1CQUFPQSxDQUFDLG9KQUEwQjtBQUN4RCxTQUFTTTtJQUNMLE1BQU1DLE9BQU9OLCtCQUErQkcsQ0FBQyxDQUFDO1FBQzFDO0tBQ0g7SUFDREUsa0JBQWtCO1FBQ2QsT0FBT0M7SUFDWDtJQUNBLE9BQU9BO0FBQ1g7QUFDQSxTQUFTVDtJQUNMLE9BQXFCLFdBQUgsR0FBSSxJQUFHSSxZQUFZTSxHQUFHLEVBQUUsU0FBUztRQUMvQ0MsVUFBVSxDQUFDLEdBQUdKLGNBQWNLLElBQUksRUFBRUo7SUFDdEM7QUFDSjtLQUpTUjtBQU1ULElBQUksQ0FBQyxPQUFPSixRQUFRaUIsT0FBTyxLQUFLLGNBQWUsT0FBT2pCLFFBQVFpQixPQUFPLEtBQUssWUFBWWpCLFFBQVFpQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9qQixRQUFRaUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3BCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWlCLE9BQU8sRUFBRSxjQUFjO1FBQUVoQixPQUFPO0lBQUs7SUFDbkVILE9BQU9xQixNQUFNLENBQUNuQixRQUFRaUIsT0FBTyxFQUFFakI7SUFDL0JvQixPQUFPcEIsT0FBTyxHQUFHQSxRQUFRaUIsT0FBTztBQUNsQyxFQUVBLG9DQUFvQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L2ludGVybmFsL3N0eWxlcy9Dc3NSZXNldC5qcz8xYTM4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ3NzUmVzZXRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENzc1Jlc2V0O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZVwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9ub29wdGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vaGVscGVycy9ub29wLXRlbXBsYXRlXCIpO1xuZnVuY3Rpb24gX3RlbXBsYXRlT2JqZWN0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBfdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuXyhbXG4gICAgICAgIFwiXFxuICAgICAgICA6aG9zdCB7XFxuICAgICAgICAgIGFsbDogaW5pdGlhbDtcXG5cXG4gICAgICAgICAgLyogdGhlIGRpcmVjdGlvbiBwcm9wZXJ0eSBpcyBub3QgcmVzZXQgYnkgJ2FsbCcgKi9cXG4gICAgICAgICAgZGlyZWN0aW9uOiBsdHI7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKiFcXG4gICAgICAgICAqIEJvb3RzdHJhcCBSZWJvb3QgdjQuNC4xIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxcbiAgICAgICAgICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUaGUgQm9vdHN0cmFwIEF1dGhvcnNcXG4gICAgICAgICAqIENvcHlyaWdodCAyMDExLTIwMTkgVHdpdHRlciwgSW5jLlxcbiAgICAgICAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcXG4gICAgICAgICAqIEZvcmtlZCBmcm9tIE5vcm1hbGl6ZS5jc3MsIGxpY2Vuc2VkIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcy9ibG9iL21hc3Rlci9MSUNFTlNFLm1kKVxcbiAgICAgICAgICovXFxuICAgICAgICAqLFxcbiAgICAgICAgKjo6YmVmb3JlLFxcbiAgICAgICAgKjo6YWZ0ZXIge1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgOmhvc3Qge1xcbiAgICAgICAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjtcXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU7XFxuICAgICAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcXG4gICAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYXJ0aWNsZSxcXG4gICAgICAgIGFzaWRlLFxcbiAgICAgICAgZmlnY2FwdGlvbixcXG4gICAgICAgIGZpZ3VyZSxcXG4gICAgICAgIGZvb3RlcixcXG4gICAgICAgIGhlYWRlcixcXG4gICAgICAgIGhncm91cCxcXG4gICAgICAgIG1haW4sXFxuICAgICAgICBuYXYsXFxuICAgICAgICBzZWN0aW9uIHtcXG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgICB9XFxuXFxuICAgICAgICA6aG9zdCB7XFxuICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLFxcbiAgICAgICAgICAgICdIZWx2ZXRpY2EgTmV1ZScsIEFyaWFsLCAnTm90byBTYW5zJywgc2Fucy1zZXJpZixcXG4gICAgICAgICAgICAnQXBwbGUgQ29sb3IgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJyxcXG4gICAgICAgICAgICAnTm90byBDb2xvciBFbW9qaSc7XFxuICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gICAgICAgICAgY29sb3I6ICMyMTI1Mjk7XFxuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBbdGFiaW5kZXg9Jy0xJ106Zm9jdXM6bm90KDpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgICAgIG91dGxpbmU6IDAgIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGhyIHtcXG4gICAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICAgICAgICAgIGhlaWdodDogMDtcXG4gICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBoMSxcXG4gICAgICAgIGgyLFxcbiAgICAgICAgaDMsXFxuICAgICAgICBoNCxcXG4gICAgICAgIGg1LFxcbiAgICAgICAgaDYge1xcbiAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBwIHtcXG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGFiYnJbdGl0bGVdLFxcbiAgICAgICAgYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICAgICAgICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgICAgICAgICBjdXJzb3I6IGhlbHA7XFxuICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7XFxuICAgICAgICAgIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBub25lO1xcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb24tc2tpcC1pbms6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhZGRyZXNzIHtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG9sLFxcbiAgICAgICAgdWwsXFxuICAgICAgICBkbCB7XFxuICAgICAgICAgIG1hcmdpbi10b3A6IDA7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBvbCBvbCxcXG4gICAgICAgIHVsIHVsLFxcbiAgICAgICAgb2wgdWwsXFxuICAgICAgICB1bCBvbCB7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBkdCB7XFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBkZCB7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcXG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBibG9ja3F1b3RlIHtcXG4gICAgICAgICAgbWFyZ2luOiAwIDAgMTZweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGIsXFxuICAgICAgICBzdHJvbmcge1xcbiAgICAgICAgICBmb250LXdlaWdodDogYm9sZGVyO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgc21hbGwge1xcbiAgICAgICAgICBmb250LXNpemU6IDgwJTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHN1YixcXG4gICAgICAgIHN1cCB7XFxuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgICAgZm9udC1zaXplOiA3NSU7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAwO1xcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzdWIge1xcbiAgICAgICAgICBib3R0b206IC0wLjI1ZW07XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzdXAge1xcbiAgICAgICAgICB0b3A6IC0wLjVlbTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGEge1xcbiAgICAgICAgICBjb2xvcjogIzAwN2JmZjtcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGE6aG92ZXIge1xcbiAgICAgICAgICBjb2xvcjogIzAwNTZiMztcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhOm5vdChbaHJlZl0pIHtcXG4gICAgICAgICAgY29sb3I6IGluaGVyaXQ7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGE6bm90KFtocmVmXSk6aG92ZXIge1xcbiAgICAgICAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgcHJlLFxcbiAgICAgICAgY29kZSxcXG4gICAgICAgIGtiZCxcXG4gICAgICAgIHNhbXAge1xcbiAgICAgICAgICBmb250LWZhbWlseTogU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLFxcbiAgICAgICAgICAgICdMaWJlcmF0aW9uIE1vbm8nLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuICAgICAgICAgIGZvbnQtc2l6ZTogMWVtO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgcHJlIHtcXG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XFxuICAgICAgICB9XFxuXFxuICAgICAgICBmaWd1cmUge1xcbiAgICAgICAgICBtYXJnaW46IDAgMCAxNnB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaW1nIHtcXG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gICAgICAgICAgYm9yZGVyLXN0eWxlOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgc3ZnIHtcXG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRhYmxlIHtcXG4gICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGNhcHRpb24ge1xcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMTJweDtcXG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDEycHg7XFxuICAgICAgICAgIGNvbG9yOiAjNmM3NTdkO1xcbiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgICAgICAgICBjYXB0aW9uLXNpZGU6IGJvdHRvbTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRoIHtcXG4gICAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxhYmVsIHtcXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBidXR0b24ge1xcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uOmZvY3VzIHtcXG4gICAgICAgICAgb3V0bGluZTogMXB4IGRvdHRlZDtcXG4gICAgICAgICAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaW5wdXQsXFxuICAgICAgICBidXR0b24sXFxuICAgICAgICBzZWxlY3QsXFxuICAgICAgICBvcHRncm91cCxcXG4gICAgICAgIHRleHRhcmVhIHtcXG4gICAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gICAgICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbixcXG4gICAgICAgIGlucHV0IHtcXG4gICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBidXR0b24sXFxuICAgICAgICBzZWxlY3Qge1xcbiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHNlbGVjdCB7XFxuICAgICAgICAgIHdvcmQtd3JhcDogbm9ybWFsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uLFxcbiAgICAgICAgW3R5cGU9J2J1dHRvbiddLFxcbiAgICAgICAgW3R5cGU9J3Jlc2V0J10sXFxuICAgICAgICBbdHlwZT0nc3VibWl0J10ge1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbjpub3QoOmRpc2FibGVkKSxcXG4gICAgICAgIFt0eXBlPSdidXR0b24nXTpub3QoOmRpc2FibGVkKSxcXG4gICAgICAgIFt0eXBlPSdyZXNldCddOm5vdCg6ZGlzYWJsZWQpLFxcbiAgICAgICAgW3R5cGU9J3N1Ym1pdCddOm5vdCg6ZGlzYWJsZWQpIHtcXG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxcbiAgICAgICAgW3R5cGU9J2J1dHRvbiddOjotbW96LWZvY3VzLWlubmVyLFxcbiAgICAgICAgW3R5cGU9J3Jlc2V0J106Oi1tb3otZm9jdXMtaW5uZXIsXFxuICAgICAgICBbdHlwZT0nc3VibWl0J106Oi1tb3otZm9jdXMtaW5uZXIge1xcbiAgICAgICAgICBwYWRkaW5nOiAwO1xcbiAgICAgICAgICBib3JkZXItc3R5bGU6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpbnB1dFt0eXBlPSdyYWRpbyddLFxcbiAgICAgICAgaW5wdXRbdHlwZT0nY2hlY2tib3gnXSB7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpbnB1dFt0eXBlPSdkYXRlJ10sXFxuICAgICAgICBpbnB1dFt0eXBlPSd0aW1lJ10sXFxuICAgICAgICBpbnB1dFt0eXBlPSdkYXRldGltZS1sb2NhbCddLFxcbiAgICAgICAgaW5wdXRbdHlwZT0nbW9udGgnXSB7XFxuICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbGlzdGJveDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRleHRhcmVhIHtcXG4gICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XFxuICAgICAgICAgIHJlc2l6ZTogdmVydGljYWw7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBmaWVsZHNldCB7XFxuICAgICAgICAgIG1pbi13aWR0aDogMDtcXG4gICAgICAgICAgcGFkZGluZzogMDtcXG4gICAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgICBib3JkZXI6IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBsZWdlbmQge1xcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcXG4gICAgICAgICAgcGFkZGluZzogMDtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgICAgICAgICBmb250LXNpemU6IDI0cHg7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgICAgICAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHByb2dyZXNzIHtcXG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgW3R5cGU9J251bWJlciddOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxcbiAgICAgICAgW3R5cGU9J251bWJlciddOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcXG4gICAgICAgICAgaGVpZ2h0OiBhdXRvO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgW3R5cGU9J3NlYXJjaCddIHtcXG4gICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxuICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFt0eXBlPSdzZWFyY2gnXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XFxuICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xcbiAgICAgICAgICBmb250OiBpbmhlcml0O1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG91dHB1dCB7XFxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHN1bW1hcnkge1xcbiAgICAgICAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XFxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRlbXBsYXRlIHtcXG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFtoaWRkZW5dIHtcXG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgICAgfVxcbiAgICAgIFwiXG4gICAgXSk7XG4gICAgX3RlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiBDc3NSZXNldCgpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInN0eWxlXCIsIHtcbiAgICAgICAgY2hpbGRyZW46ICgwLCBfbm9vcHRlbXBsYXRlLm5vb3ApKF90ZW1wbGF0ZU9iamVjdCgpKVxuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Dc3NSZXNldC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQ3NzUmVzZXQiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9ub29wdGVtcGxhdGUiLCJfdGVtcGxhdGVPYmplY3QiLCJkYXRhIiwianN4IiwiY2hpbGRyZW4iLCJub29wIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/redirect-boundary.js": +/*!***********************************************************************!*\ + !*** ./node_modules/next/dist/client/components/redirect-boundary.js ***! + \***********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RedirectErrorBoundary: function() {\n return RedirectErrorBoundary;\n },\n RedirectBoundary: function() {\n return RedirectBoundary;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _navigation = __webpack_require__(/*! ./navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect.js\");\nfunction HandleRedirect(param) {\n let { redirect, reset, redirectType } = param;\n const router = (0, _navigation.useRouter)();\n (0, _react.useEffect)(()=>{\n _react.default.startTransition(()=>{\n if (redirectType === _redirect.RedirectType.push) {\n router.push(redirect, {});\n } else {\n router.replace(redirect, {});\n }\n reset();\n });\n }, [\n redirect,\n redirectType,\n reset,\n router\n ]);\n return null;\n}\n_c = HandleRedirect;\nclass RedirectErrorBoundary extends _react.default.Component {\n static getDerivedStateFromError(error) {\n if ((0, _redirect.isRedirectError)(error)) {\n const url = (0, _redirect.getURLFromRedirectError)(error);\n const redirectType = (0, _redirect.getRedirectTypeFromError)(error);\n return {\n redirect: url,\n redirectType\n };\n }\n // Re-throw if error is not for redirect\n throw error;\n }\n render() {\n const { redirect, redirectType } = this.state;\n if (redirect !== null && redirectType !== null) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(HandleRedirect, {\n redirect: redirect,\n redirectType: redirectType,\n reset: ()=>this.setState({\n redirect: null\n })\n });\n }\n return this.props.children;\n }\n constructor(props){\n super(props);\n this.state = {\n redirect: null,\n redirectType: null\n };\n }\n}\nfunction RedirectBoundary(param) {\n let { children } = param;\n const router = (0, _navigation.useRouter)();\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(RedirectErrorBoundary, {\n router: router,\n children: children\n });\n}\n_c1 = RedirectBoundary;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect-boundary.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"HandleRedirect\");\n$RefreshReg$(_c1, \"RedirectBoundary\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QtYm91bmRhcnkuanMiLCJtYXBwaW5ncyI6InFEQUVhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyx1QkFBdUI7UUFDbkIsT0FBT0E7SUFDWDtJQUNBQyxrQkFBa0I7UUFDZCxPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyw0QkFBNEJDLG1CQUFPQSxDQUFDLGtJQUEwQztBQUNwRixNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxxR0FBbUI7QUFDL0MsTUFBTUUsU0FBUyxXQUFXLEdBQUdILDBCQUEwQkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyxtRkFBTztBQUN4RSxNQUFNSSxjQUFjSixtQkFBT0EsQ0FBQyxrR0FBYztBQUMxQyxNQUFNSyxZQUFZTCxtQkFBT0EsQ0FBQyw4RkFBWTtBQUN0QyxTQUFTTSxlQUFlQyxLQUFLO0lBQ3pCLElBQUksRUFBRUMsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLFlBQVksRUFBRSxHQUFHSDtJQUN4QyxNQUFNSSxTQUFTLENBQUMsR0FBR1AsWUFBWVEsU0FBUztJQUN2QyxJQUFHVixPQUFPVyxTQUFTLEVBQUU7UUFDbEJYLE9BQU9ZLE9BQU8sQ0FBQ0MsZUFBZSxDQUFDO1lBQzNCLElBQUlMLGlCQUFpQkwsVUFBVVcsWUFBWSxDQUFDQyxJQUFJLEVBQUU7Z0JBQzlDTixPQUFPTSxJQUFJLENBQUNULFVBQVUsQ0FBQztZQUMzQixPQUFPO2dCQUNIRyxPQUFPTyxPQUFPLENBQUNWLFVBQVUsQ0FBQztZQUM5QjtZQUNBQztRQUNKO0lBQ0osR0FBRztRQUNDRDtRQUNBRTtRQUNBRDtRQUNBRTtLQUNIO0lBQ0QsT0FBTztBQUNYO0tBbkJTTDtBQW9CVCxNQUFNZiw4QkFBOEJXLE9BQU9ZLE9BQU8sQ0FBQ0ssU0FBUztJQUN4RCxPQUFPQyx5QkFBeUJDLEtBQUssRUFBRTtRQUNuQyxJQUFJLENBQUMsR0FBR2hCLFVBQVVpQixlQUFlLEVBQUVELFFBQVE7WUFDdkMsTUFBTUUsTUFBTSxDQUFDLEdBQUdsQixVQUFVbUIsdUJBQXVCLEVBQUVIO1lBQ25ELE1BQU1YLGVBQWUsQ0FBQyxHQUFHTCxVQUFVb0Isd0JBQXdCLEVBQUVKO1lBQzdELE9BQU87Z0JBQ0hiLFVBQVVlO2dCQUNWYjtZQUNKO1FBQ0o7UUFDQSx3Q0FBd0M7UUFDeEMsTUFBTVc7SUFDVjtJQUNBSyxTQUFTO1FBQ0wsTUFBTSxFQUFFbEIsUUFBUSxFQUFFRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUNpQixLQUFLO1FBQzdDLElBQUluQixhQUFhLFFBQVFFLGlCQUFpQixNQUFNO1lBQzVDLE9BQXFCLFdBQUgsR0FBSSxJQUFHVCxZQUFZMkIsR0FBRyxFQUFFdEIsZ0JBQWdCO2dCQUN0REUsVUFBVUE7Z0JBQ1ZFLGNBQWNBO2dCQUNkRCxPQUFPLElBQUksSUFBSSxDQUFDb0IsUUFBUSxDQUFDO3dCQUNqQnJCLFVBQVU7b0JBQ2Q7WUFDUjtRQUNKO1FBQ0EsT0FBTyxJQUFJLENBQUNzQixLQUFLLENBQUNDLFFBQVE7SUFDOUI7SUFDQUMsWUFBWUYsS0FBSyxDQUFDO1FBQ2QsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0gsS0FBSyxHQUFHO1lBQ1RuQixVQUFVO1lBQ1ZFLGNBQWM7UUFDbEI7SUFDSjtBQUNKO0FBQ0EsU0FBU2xCLGlCQUFpQmUsS0FBSztJQUMzQixJQUFJLEVBQUV3QixRQUFRLEVBQUUsR0FBR3hCO0lBQ25CLE1BQU1JLFNBQVMsQ0FBQyxHQUFHUCxZQUFZUSxTQUFTO0lBQ3hDLE9BQXFCLFdBQUgsR0FBSSxJQUFHWCxZQUFZMkIsR0FBRyxFQUFFckMsdUJBQXVCO1FBQzdEb0IsUUFBUUE7UUFDUm9CLFVBQVVBO0lBQ2Q7QUFDSjtNQVBTdkM7QUFTVCxJQUFJLENBQUMsT0FBT0osUUFBUTBCLE9BQU8sS0FBSyxjQUFlLE9BQU8xQixRQUFRMEIsT0FBTyxLQUFLLFlBQVkxQixRQUFRMEIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPMUIsUUFBUTBCLE9BQU8sQ0FBQ21CLFVBQVUsS0FBSyxhQUFhO0lBQ3JLL0MsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMEIsT0FBTyxFQUFFLGNBQWM7UUFBRXpCLE9BQU87SUFBSztJQUNuRUgsT0FBT2dELE1BQU0sQ0FBQzlDLFFBQVEwQixPQUFPLEVBQUUxQjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRMEIsT0FBTztBQUNsQyxFQUVBLDZDQUE2QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlZGlyZWN0LWJvdW5kYXJ5LmpzP2I0NDQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUmVkaXJlY3RFcnJvckJvdW5kYXJ5OiBudWxsLFxuICAgIFJlZGlyZWN0Qm91bmRhcnk6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgUmVkaXJlY3RFcnJvckJvdW5kYXJ5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJlZGlyZWN0RXJyb3JCb3VuZGFyeTtcbiAgICB9LFxuICAgIFJlZGlyZWN0Qm91bmRhcnk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUmVkaXJlY3RCb3VuZGFyeTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9uYXZpZ2F0aW9uID0gcmVxdWlyZShcIi4vbmF2aWdhdGlvblwiKTtcbmNvbnN0IF9yZWRpcmVjdCA9IHJlcXVpcmUoXCIuL3JlZGlyZWN0XCIpO1xuZnVuY3Rpb24gSGFuZGxlUmVkaXJlY3QocGFyYW0pIHtcbiAgICBsZXQgeyByZWRpcmVjdCwgcmVzZXQsIHJlZGlyZWN0VHlwZSB9ID0gcGFyYW07XG4gICAgY29uc3Qgcm91dGVyID0gKDAsIF9uYXZpZ2F0aW9uLnVzZVJvdXRlcikoKTtcbiAgICAoMCwgX3JlYWN0LnVzZUVmZmVjdCkoKCk9PntcbiAgICAgICAgX3JlYWN0LmRlZmF1bHQuc3RhcnRUcmFuc2l0aW9uKCgpPT57XG4gICAgICAgICAgICBpZiAocmVkaXJlY3RUeXBlID09PSBfcmVkaXJlY3QuUmVkaXJlY3RUeXBlLnB1c2gpIHtcbiAgICAgICAgICAgICAgICByb3V0ZXIucHVzaChyZWRpcmVjdCwge30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByb3V0ZXIucmVwbGFjZShyZWRpcmVjdCwge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgfSk7XG4gICAgfSwgW1xuICAgICAgICByZWRpcmVjdCxcbiAgICAgICAgcmVkaXJlY3RUeXBlLFxuICAgICAgICByZXNldCxcbiAgICAgICAgcm91dGVyXG4gICAgXSk7XG4gICAgcmV0dXJuIG51bGw7XG59XG5jbGFzcyBSZWRpcmVjdEVycm9yQm91bmRhcnkgZXh0ZW5kcyBfcmVhY3QuZGVmYXVsdC5Db21wb25lbnQge1xuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpIHtcbiAgICAgICAgaWYgKCgwLCBfcmVkaXJlY3QuaXNSZWRpcmVjdEVycm9yKShlcnJvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9ICgwLCBfcmVkaXJlY3QuZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3IpKGVycm9yKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZGlyZWN0VHlwZSA9ICgwLCBfcmVkaXJlY3QuZ2V0UmVkaXJlY3RUeXBlRnJvbUVycm9yKShlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0OiB1cmwsXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RUeXBlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlLXRocm93IGlmIGVycm9yIGlzIG5vdCBmb3IgcmVkaXJlY3RcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyByZWRpcmVjdCwgcmVkaXJlY3RUeXBlIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBpZiAocmVkaXJlY3QgIT09IG51bGwgJiYgcmVkaXJlY3RUeXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShIYW5kbGVSZWRpcmVjdCwge1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0OiByZWRpcmVjdCxcbiAgICAgICAgICAgICAgICByZWRpcmVjdFR5cGU6IHJlZGlyZWN0VHlwZSxcbiAgICAgICAgICAgICAgICByZXNldDogKCk9PnRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Q6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHJlZGlyZWN0OiBudWxsLFxuICAgICAgICAgICAgcmVkaXJlY3RUeXBlOiBudWxsXG4gICAgICAgIH07XG4gICAgfVxufVxuZnVuY3Rpb24gUmVkaXJlY3RCb3VuZGFyeShwYXJhbSkge1xuICAgIGxldCB7IGNoaWxkcmVuIH0gPSBwYXJhbTtcbiAgICBjb25zdCByb3V0ZXIgPSAoMCwgX25hdmlnYXRpb24udXNlUm91dGVyKSgpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFJlZGlyZWN0RXJyb3JCb3VuZGFyeSwge1xuICAgICAgICByb3V0ZXI6IHJvdXRlcixcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZGlyZWN0LWJvdW5kYXJ5LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIlJlZGlyZWN0RXJyb3JCb3VuZGFyeSIsIlJlZGlyZWN0Qm91bmRhcnkiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9uYXZpZ2F0aW9uIiwiX3JlZGlyZWN0IiwiSGFuZGxlUmVkaXJlY3QiLCJwYXJhbSIsInJlZGlyZWN0IiwicmVzZXQiLCJyZWRpcmVjdFR5cGUiLCJyb3V0ZXIiLCJ1c2VSb3V0ZXIiLCJ1c2VFZmZlY3QiLCJkZWZhdWx0Iiwic3RhcnRUcmFuc2l0aW9uIiwiUmVkaXJlY3RUeXBlIiwicHVzaCIsInJlcGxhY2UiLCJDb21wb25lbnQiLCJnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IiLCJlcnJvciIsImlzUmVkaXJlY3RFcnJvciIsInVybCIsImdldFVSTEZyb21SZWRpcmVjdEVycm9yIiwiZ2V0UmVkaXJlY3RUeXBlRnJvbUVycm9yIiwicmVuZGVyIiwic3RhdGUiLCJqc3giLCJzZXRTdGF0ZSIsInByb3BzIiwiY2hpbGRyZW4iLCJjb25zdHJ1Y3RvciIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/redirect-boundary.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/redirect-status-code.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/redirect-status-code.js ***! + \**************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RedirectStatusCode\", ({\n enumerable: true,\n get: function() {\n return RedirectStatusCode;\n }\n}));\nvar RedirectStatusCode;\n(function(RedirectStatusCode) {\n RedirectStatusCode[RedirectStatusCode[\"SeeOther\"] = 303] = \"SeeOther\";\n RedirectStatusCode[RedirectStatusCode[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n RedirectStatusCode[RedirectStatusCode[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n})(RedirectStatusCode || (RedirectStatusCode = {}));\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect-status-code.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3Qtc3RhdHVzLWNvZGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLElBQUlBO0FBQ0gsVUFBU0Esa0JBQWtCO0lBQ3hCQSxrQkFBa0IsQ0FBQ0Esa0JBQWtCLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRztJQUMzREEsa0JBQWtCLENBQUNBLGtCQUFrQixDQUFDLG9CQUFvQixHQUFHLElBQUksR0FBRztJQUNwRUEsa0JBQWtCLENBQUNBLGtCQUFrQixDQUFDLG9CQUFvQixHQUFHLElBQUksR0FBRztBQUN4RSxHQUFHQSxzQkFBdUJBLENBQUFBLHFCQUFxQixDQUFDO0FBRWhELElBQUksQ0FBQyxPQUFPSixRQUFRSyxPQUFPLEtBQUssY0FBZSxPQUFPTCxRQUFRSyxPQUFPLEtBQUssWUFBWUwsUUFBUUssT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPTCxRQUFRSyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLUixPQUFPQyxjQUFjLENBQUNDLFFBQVFLLE9BQU8sRUFBRSxjQUFjO1FBQUVKLE9BQU87SUFBSztJQUNuRUgsT0FBT1MsTUFBTSxDQUFDUCxRQUFRSyxPQUFPLEVBQUVMO0lBQy9CUSxPQUFPUixPQUFPLEdBQUdBLFFBQVFLLE9BQU87QUFDbEMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWRpcmVjdC1zdGF0dXMtY29kZS5qcz80YjEzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVkaXJlY3RTdGF0dXNDb2RlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSZWRpcmVjdFN0YXR1c0NvZGU7XG4gICAgfVxufSk7XG52YXIgUmVkaXJlY3RTdGF0dXNDb2RlO1xuKGZ1bmN0aW9uKFJlZGlyZWN0U3RhdHVzQ29kZSkge1xuICAgIFJlZGlyZWN0U3RhdHVzQ29kZVtSZWRpcmVjdFN0YXR1c0NvZGVbXCJTZWVPdGhlclwiXSA9IDMwM10gPSBcIlNlZU90aGVyXCI7XG4gICAgUmVkaXJlY3RTdGF0dXNDb2RlW1JlZGlyZWN0U3RhdHVzQ29kZVtcIlRlbXBvcmFyeVJlZGlyZWN0XCJdID0gMzA3XSA9IFwiVGVtcG9yYXJ5UmVkaXJlY3RcIjtcbiAgICBSZWRpcmVjdFN0YXR1c0NvZGVbUmVkaXJlY3RTdGF0dXNDb2RlW1wiUGVybWFuZW50UmVkaXJlY3RcIl0gPSAzMDhdID0gXCJQZXJtYW5lbnRSZWRpcmVjdFwiO1xufSkoUmVkaXJlY3RTdGF0dXNDb2RlIHx8IChSZWRpcmVjdFN0YXR1c0NvZGUgPSB7fSkpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWRpcmVjdC1zdGF0dXMtY29kZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiUmVkaXJlY3RTdGF0dXNDb2RlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/redirect-status-code.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/redirect.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/client/components/redirect.js ***! + \**************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RedirectType: function() {\n return RedirectType;\n },\n getRedirectError: function() {\n return getRedirectError;\n },\n redirect: function() {\n return redirect;\n },\n permanentRedirect: function() {\n return permanentRedirect;\n },\n isRedirectError: function() {\n return isRedirectError;\n },\n getURLFromRedirectError: function() {\n return getURLFromRedirectError;\n },\n getRedirectTypeFromError: function() {\n return getRedirectTypeFromError;\n },\n getRedirectStatusCodeFromError: function() {\n return getRedirectStatusCodeFromError;\n }\n});\nconst _requestasyncstorageexternal = __webpack_require__(/*! ./request-async-storage.external */ \"(shared)/./node_modules/next/dist/client/components/request-async-storage.external.js\");\nconst _actionasyncstorageexternal = __webpack_require__(/*! ./action-async-storage.external */ \"(shared)/./node_modules/next/dist/client/components/action-async-storage.external.js\");\nconst _redirectstatuscode = __webpack_require__(/*! ./redirect-status-code */ \"(app-pages-browser)/./node_modules/next/dist/client/components/redirect-status-code.js\");\nconst REDIRECT_ERROR_CODE = \"NEXT_REDIRECT\";\nvar RedirectType;\n(function(RedirectType) {\n RedirectType[\"push\"] = \"push\";\n RedirectType[\"replace\"] = \"replace\";\n})(RedirectType || (RedirectType = {}));\nfunction getRedirectError(url, type, statusCode) {\n if (statusCode === void 0) statusCode = _redirectstatuscode.RedirectStatusCode.TemporaryRedirect;\n const error = new Error(REDIRECT_ERROR_CODE);\n error.digest = REDIRECT_ERROR_CODE + \";\" + type + \";\" + url + \";\" + statusCode + \";\";\n const requestStore = _requestasyncstorageexternal.requestAsyncStorage.getStore();\n if (requestStore) {\n error.mutableCookies = requestStore.mutableCookies;\n }\n return error;\n}\nfunction redirect(url, type) {\n if (type === void 0) type = \"replace\";\n const actionStore = _actionasyncstorageexternal.actionAsyncStorage.getStore();\n throw getRedirectError(url, type, // as we don't want the POST request to follow the redirect,\n // as it could result in erroneous re-submissions.\n (actionStore == null ? void 0 : actionStore.isAction) ? _redirectstatuscode.RedirectStatusCode.SeeOther : _redirectstatuscode.RedirectStatusCode.TemporaryRedirect);\n}\nfunction permanentRedirect(url, type) {\n if (type === void 0) type = \"replace\";\n const actionStore = _actionasyncstorageexternal.actionAsyncStorage.getStore();\n throw getRedirectError(url, type, // as we don't want the POST request to follow the redirect,\n // as it could result in erroneous re-submissions.\n (actionStore == null ? void 0 : actionStore.isAction) ? _redirectstatuscode.RedirectStatusCode.SeeOther : _redirectstatuscode.RedirectStatusCode.PermanentRedirect);\n}\nfunction isRedirectError(error) {\n if (typeof error !== \"object\" || error === null || !(\"digest\" in error) || typeof error.digest !== \"string\") {\n return false;\n }\n const [errorCode, type, destination, status] = error.digest.split(\";\", 4);\n const statusCode = Number(status);\n return errorCode === REDIRECT_ERROR_CODE && (type === \"replace\" || type === \"push\") && typeof destination === \"string\" && !isNaN(statusCode) && statusCode in _redirectstatuscode.RedirectStatusCode;\n}\nfunction getURLFromRedirectError(error) {\n if (!isRedirectError(error)) return null;\n // Slices off the beginning of the digest that contains the code and the\n // separating ';'.\n return error.digest.split(\";\", 3)[2];\n}\nfunction getRedirectTypeFromError(error) {\n if (!isRedirectError(error)) {\n throw new Error(\"Not a redirect error\");\n }\n return error.digest.split(\";\", 2)[1];\n}\nfunction getRedirectStatusCodeFromError(error) {\n if (!isRedirectError(error)) {\n throw new Error(\"Not a redirect error\");\n }\n return Number(error.digest.split(\";\", 4)[3]);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=redirect.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcmVkaXJlY3QuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FTTjtBQUNBLFNBQVNTLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlmLE9BQU9DLGNBQWMsQ0FBQ2EsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRWCxTQUFTO0lBQ2JHLGNBQWM7UUFDVixPQUFPQTtJQUNYO0lBQ0FDLGtCQUFrQjtRQUNkLE9BQU9BO0lBQ1g7SUFDQUMsVUFBVTtRQUNOLE9BQU9BO0lBQ1g7SUFDQUMsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLDBCQUEwQjtRQUN0QixPQUFPQTtJQUNYO0lBQ0FDLGdDQUFnQztRQUM1QixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTywrQkFBK0JDLG1CQUFPQSxDQUFDLCtIQUFrQztBQUMvRSxNQUFNQyw4QkFBOEJELG1CQUFPQSxDQUFDLDZIQUFpQztBQUM3RSxNQUFNRSxzQkFBc0JGLG1CQUFPQSxDQUFDLHNIQUF3QjtBQUM1RCxNQUFNRyxzQkFBc0I7QUFDNUIsSUFBSWxCO0FBQ0gsVUFBU0EsWUFBWTtJQUNsQkEsWUFBWSxDQUFDLE9BQU8sR0FBRztJQUN2QkEsWUFBWSxDQUFDLFVBQVUsR0FBRztBQUM5QixHQUFHQSxnQkFBaUJBLENBQUFBLGVBQWUsQ0FBQztBQUNwQyxTQUFTQyxpQkFBaUJrQixHQUFHLEVBQUVDLElBQUksRUFBRUMsVUFBVTtJQUMzQyxJQUFJQSxlQUFlLEtBQUssR0FBR0EsYUFBYUosb0JBQW9CSyxrQkFBa0IsQ0FBQ0MsaUJBQWlCO0lBQ2hHLE1BQU1DLFFBQVEsSUFBSUMsTUFBTVA7SUFDeEJNLE1BQU1FLE1BQU0sR0FBR1Isc0JBQXNCLE1BQU1FLE9BQU8sTUFBTUQsTUFBTSxNQUFNRSxhQUFhO0lBQ2pGLE1BQU1NLGVBQWViLDZCQUE2QmMsbUJBQW1CLENBQUNDLFFBQVE7SUFDOUUsSUFBSUYsY0FBYztRQUNkSCxNQUFNTSxjQUFjLEdBQUdILGFBQWFHLGNBQWM7SUFDdEQ7SUFDQSxPQUFPTjtBQUNYO0FBQ0EsU0FBU3RCLFNBQVNpQixHQUFHLEVBQUVDLElBQUk7SUFDdkIsSUFBSUEsU0FBUyxLQUFLLEdBQUdBLE9BQU87SUFDNUIsTUFBTVcsY0FBY2YsNEJBQTRCZ0Isa0JBQWtCLENBQUNILFFBQVE7SUFDM0UsTUFBTTVCLGlCQUFpQmtCLEtBQUtDLE1BRzVCLDREQUY0RDtJQUM1RCxrREFBa0Q7SUFDakRXLENBQUFBLGVBQWUsT0FBTyxLQUFLLElBQUlBLFlBQVlFLFFBQVEsSUFBSWhCLG9CQUFvQkssa0JBQWtCLENBQUNZLFFBQVEsR0FBR2pCLG9CQUFvQkssa0JBQWtCLENBQUNDLGlCQUFpQjtBQUN0SztBQUNBLFNBQVNwQixrQkFBa0JnQixHQUFHLEVBQUVDLElBQUk7SUFDaEMsSUFBSUEsU0FBUyxLQUFLLEdBQUdBLE9BQU87SUFDNUIsTUFBTVcsY0FBY2YsNEJBQTRCZ0Isa0JBQWtCLENBQUNILFFBQVE7SUFDM0UsTUFBTTVCLGlCQUFpQmtCLEtBQUtDLE1BRzVCLDREQUY0RDtJQUM1RCxrREFBa0Q7SUFDakRXLENBQUFBLGVBQWUsT0FBTyxLQUFLLElBQUlBLFlBQVlFLFFBQVEsSUFBSWhCLG9CQUFvQkssa0JBQWtCLENBQUNZLFFBQVEsR0FBR2pCLG9CQUFvQkssa0JBQWtCLENBQUNhLGlCQUFpQjtBQUN0SztBQUNBLFNBQVMvQixnQkFBZ0JvQixLQUFLO0lBQzFCLElBQUksT0FBT0EsVUFBVSxZQUFZQSxVQUFVLFFBQVEsQ0FBRSxhQUFZQSxLQUFJLEtBQU0sT0FBT0EsTUFBTUUsTUFBTSxLQUFLLFVBQVU7UUFDekcsT0FBTztJQUNYO0lBQ0EsTUFBTSxDQUFDVSxXQUFXaEIsTUFBTWlCLGFBQWFDLE9BQU8sR0FBR2QsTUFBTUUsTUFBTSxDQUFDYSxLQUFLLENBQUMsS0FBSztJQUN2RSxNQUFNbEIsYUFBYW1CLE9BQU9GO0lBQzFCLE9BQU9GLGNBQWNsQix1QkFBd0JFLENBQUFBLFNBQVMsYUFBYUEsU0FBUyxNQUFLLEtBQU0sT0FBT2lCLGdCQUFnQixZQUFZLENBQUNJLE1BQU1wQixlQUFlQSxjQUFjSixvQkFBb0JLLGtCQUFrQjtBQUN4TTtBQUNBLFNBQVNqQix3QkFBd0JtQixLQUFLO0lBQ2xDLElBQUksQ0FBQ3BCLGdCQUFnQm9CLFFBQVEsT0FBTztJQUNwQyx3RUFBd0U7SUFDeEUsa0JBQWtCO0lBQ2xCLE9BQU9BLE1BQU1FLE1BQU0sQ0FBQ2EsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDeEM7QUFDQSxTQUFTakMseUJBQXlCa0IsS0FBSztJQUNuQyxJQUFJLENBQUNwQixnQkFBZ0JvQixRQUFRO1FBQ3pCLE1BQU0sSUFBSUMsTUFBTTtJQUNwQjtJQUNBLE9BQU9ELE1BQU1FLE1BQU0sQ0FBQ2EsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDeEM7QUFDQSxTQUFTaEMsK0JBQStCaUIsS0FBSztJQUN6QyxJQUFJLENBQUNwQixnQkFBZ0JvQixRQUFRO1FBQ3pCLE1BQU0sSUFBSUMsTUFBTTtJQUNwQjtJQUNBLE9BQU9lLE9BQU9oQixNQUFNRSxNQUFNLENBQUNhLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQy9DO0FBRUEsSUFBSSxDQUFDLE9BQU8xQyxRQUFRNkMsT0FBTyxLQUFLLGNBQWUsT0FBTzdDLFFBQVE2QyxPQUFPLEtBQUssWUFBWTdDLFFBQVE2QyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU83QyxRQUFRNkMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2hELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTZDLE9BQU8sRUFBRSxjQUFjO1FBQUU1QyxPQUFPO0lBQUs7SUFDbkVILE9BQU9pRCxNQUFNLENBQUMvQyxRQUFRNkMsT0FBTyxFQUFFN0M7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUTZDLE9BQU87QUFDbEMsRUFFQSxvQ0FBb0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWRpcmVjdC5qcz9iMjViIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUmVkaXJlY3RUeXBlOiBudWxsLFxuICAgIGdldFJlZGlyZWN0RXJyb3I6IG51bGwsXG4gICAgcmVkaXJlY3Q6IG51bGwsXG4gICAgcGVybWFuZW50UmVkaXJlY3Q6IG51bGwsXG4gICAgaXNSZWRpcmVjdEVycm9yOiBudWxsLFxuICAgIGdldFVSTEZyb21SZWRpcmVjdEVycm9yOiBudWxsLFxuICAgIGdldFJlZGlyZWN0VHlwZUZyb21FcnJvcjogbnVsbCxcbiAgICBnZXRSZWRpcmVjdFN0YXR1c0NvZGVGcm9tRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgUmVkaXJlY3RUeXBlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJlZGlyZWN0VHlwZTtcbiAgICB9LFxuICAgIGdldFJlZGlyZWN0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0UmVkaXJlY3RFcnJvcjtcbiAgICB9LFxuICAgIHJlZGlyZWN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJlZGlyZWN0O1xuICAgIH0sXG4gICAgcGVybWFuZW50UmVkaXJlY3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcGVybWFuZW50UmVkaXJlY3Q7XG4gICAgfSxcbiAgICBpc1JlZGlyZWN0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNSZWRpcmVjdEVycm9yO1xuICAgIH0sXG4gICAgZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3I7XG4gICAgfSxcbiAgICBnZXRSZWRpcmVjdFR5cGVGcm9tRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0UmVkaXJlY3RUeXBlRnJvbUVycm9yO1xuICAgIH0sXG4gICAgZ2V0UmVkaXJlY3RTdGF0dXNDb2RlRnJvbUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFJlZGlyZWN0U3RhdHVzQ29kZUZyb21FcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IF9yZXF1ZXN0YXN5bmNzdG9yYWdlZXh0ZXJuYWwgPSByZXF1aXJlKFwiLi9yZXF1ZXN0LWFzeW5jLXN0b3JhZ2UuZXh0ZXJuYWxcIik7XG5jb25zdCBfYWN0aW9uYXN5bmNzdG9yYWdlZXh0ZXJuYWwgPSByZXF1aXJlKFwiLi9hY3Rpb24tYXN5bmMtc3RvcmFnZS5leHRlcm5hbFwiKTtcbmNvbnN0IF9yZWRpcmVjdHN0YXR1c2NvZGUgPSByZXF1aXJlKFwiLi9yZWRpcmVjdC1zdGF0dXMtY29kZVwiKTtcbmNvbnN0IFJFRElSRUNUX0VSUk9SX0NPREUgPSBcIk5FWFRfUkVESVJFQ1RcIjtcbnZhciBSZWRpcmVjdFR5cGU7XG4oZnVuY3Rpb24oUmVkaXJlY3RUeXBlKSB7XG4gICAgUmVkaXJlY3RUeXBlW1wicHVzaFwiXSA9IFwicHVzaFwiO1xuICAgIFJlZGlyZWN0VHlwZVtcInJlcGxhY2VcIl0gPSBcInJlcGxhY2VcIjtcbn0pKFJlZGlyZWN0VHlwZSB8fCAoUmVkaXJlY3RUeXBlID0ge30pKTtcbmZ1bmN0aW9uIGdldFJlZGlyZWN0RXJyb3IodXJsLCB0eXBlLCBzdGF0dXNDb2RlKSB7XG4gICAgaWYgKHN0YXR1c0NvZGUgPT09IHZvaWQgMCkgc3RhdHVzQ29kZSA9IF9yZWRpcmVjdHN0YXR1c2NvZGUuUmVkaXJlY3RTdGF0dXNDb2RlLlRlbXBvcmFyeVJlZGlyZWN0O1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFJFRElSRUNUX0VSUk9SX0NPREUpO1xuICAgIGVycm9yLmRpZ2VzdCA9IFJFRElSRUNUX0VSUk9SX0NPREUgKyBcIjtcIiArIHR5cGUgKyBcIjtcIiArIHVybCArIFwiO1wiICsgc3RhdHVzQ29kZSArIFwiO1wiO1xuICAgIGNvbnN0IHJlcXVlc3RTdG9yZSA9IF9yZXF1ZXN0YXN5bmNzdG9yYWdlZXh0ZXJuYWwucmVxdWVzdEFzeW5jU3RvcmFnZS5nZXRTdG9yZSgpO1xuICAgIGlmIChyZXF1ZXN0U3RvcmUpIHtcbiAgICAgICAgZXJyb3IubXV0YWJsZUNvb2tpZXMgPSByZXF1ZXN0U3RvcmUubXV0YWJsZUNvb2tpZXM7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcjtcbn1cbmZ1bmN0aW9uIHJlZGlyZWN0KHVybCwgdHlwZSkge1xuICAgIGlmICh0eXBlID09PSB2b2lkIDApIHR5cGUgPSBcInJlcGxhY2VcIjtcbiAgICBjb25zdCBhY3Rpb25TdG9yZSA9IF9hY3Rpb25hc3luY3N0b3JhZ2VleHRlcm5hbC5hY3Rpb25Bc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgICB0aHJvdyBnZXRSZWRpcmVjdEVycm9yKHVybCwgdHlwZSwgLy8gSWYgd2UncmUgaW4gYW4gYWN0aW9uLCB3ZSB3YW50IHRvIHVzZSBhIDMwMyByZWRpcmVjdFxuICAgIC8vIGFzIHdlIGRvbid0IHdhbnQgdGhlIFBPU1QgcmVxdWVzdCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0LFxuICAgIC8vIGFzIGl0IGNvdWxkIHJlc3VsdCBpbiBlcnJvbmVvdXMgcmUtc3VibWlzc2lvbnMuXG4gICAgKGFjdGlvblN0b3JlID09IG51bGwgPyB2b2lkIDAgOiBhY3Rpb25TdG9yZS5pc0FjdGlvbikgPyBfcmVkaXJlY3RzdGF0dXNjb2RlLlJlZGlyZWN0U3RhdHVzQ29kZS5TZWVPdGhlciA6IF9yZWRpcmVjdHN0YXR1c2NvZGUuUmVkaXJlY3RTdGF0dXNDb2RlLlRlbXBvcmFyeVJlZGlyZWN0KTtcbn1cbmZ1bmN0aW9uIHBlcm1hbmVudFJlZGlyZWN0KHVybCwgdHlwZSkge1xuICAgIGlmICh0eXBlID09PSB2b2lkIDApIHR5cGUgPSBcInJlcGxhY2VcIjtcbiAgICBjb25zdCBhY3Rpb25TdG9yZSA9IF9hY3Rpb25hc3luY3N0b3JhZ2VleHRlcm5hbC5hY3Rpb25Bc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKTtcbiAgICB0aHJvdyBnZXRSZWRpcmVjdEVycm9yKHVybCwgdHlwZSwgLy8gSWYgd2UncmUgaW4gYW4gYWN0aW9uLCB3ZSB3YW50IHRvIHVzZSBhIDMwMyByZWRpcmVjdFxuICAgIC8vIGFzIHdlIGRvbid0IHdhbnQgdGhlIFBPU1QgcmVxdWVzdCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0LFxuICAgIC8vIGFzIGl0IGNvdWxkIHJlc3VsdCBpbiBlcnJvbmVvdXMgcmUtc3VibWlzc2lvbnMuXG4gICAgKGFjdGlvblN0b3JlID09IG51bGwgPyB2b2lkIDAgOiBhY3Rpb25TdG9yZS5pc0FjdGlvbikgPyBfcmVkaXJlY3RzdGF0dXNjb2RlLlJlZGlyZWN0U3RhdHVzQ29kZS5TZWVPdGhlciA6IF9yZWRpcmVjdHN0YXR1c2NvZGUuUmVkaXJlY3RTdGF0dXNDb2RlLlBlcm1hbmVudFJlZGlyZWN0KTtcbn1cbmZ1bmN0aW9uIGlzUmVkaXJlY3RFcnJvcihlcnJvcikge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgIT09IFwib2JqZWN0XCIgfHwgZXJyb3IgPT09IG51bGwgfHwgIShcImRpZ2VzdFwiIGluIGVycm9yKSB8fCB0eXBlb2YgZXJyb3IuZGlnZXN0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgW2Vycm9yQ29kZSwgdHlwZSwgZGVzdGluYXRpb24sIHN0YXR1c10gPSBlcnJvci5kaWdlc3Quc3BsaXQoXCI7XCIsIDQpO1xuICAgIGNvbnN0IHN0YXR1c0NvZGUgPSBOdW1iZXIoc3RhdHVzKTtcbiAgICByZXR1cm4gZXJyb3JDb2RlID09PSBSRURJUkVDVF9FUlJPUl9DT0RFICYmICh0eXBlID09PSBcInJlcGxhY2VcIiB8fCB0eXBlID09PSBcInB1c2hcIikgJiYgdHlwZW9mIGRlc3RpbmF0aW9uID09PSBcInN0cmluZ1wiICYmICFpc05hTihzdGF0dXNDb2RlKSAmJiBzdGF0dXNDb2RlIGluIF9yZWRpcmVjdHN0YXR1c2NvZGUuUmVkaXJlY3RTdGF0dXNDb2RlO1xufVxuZnVuY3Rpb24gZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3IoZXJyb3IpIHtcbiAgICBpZiAoIWlzUmVkaXJlY3RFcnJvcihlcnJvcikpIHJldHVybiBudWxsO1xuICAgIC8vIFNsaWNlcyBvZmYgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlnZXN0IHRoYXQgY29udGFpbnMgdGhlIGNvZGUgYW5kIHRoZVxuICAgIC8vIHNlcGFyYXRpbmcgJzsnLlxuICAgIHJldHVybiBlcnJvci5kaWdlc3Quc3BsaXQoXCI7XCIsIDMpWzJdO1xufVxuZnVuY3Rpb24gZ2V0UmVkaXJlY3RUeXBlRnJvbUVycm9yKGVycm9yKSB7XG4gICAgaWYgKCFpc1JlZGlyZWN0RXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBhIHJlZGlyZWN0IGVycm9yXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZXJyb3IuZGlnZXN0LnNwbGl0KFwiO1wiLCAyKVsxXTtcbn1cbmZ1bmN0aW9uIGdldFJlZGlyZWN0U3RhdHVzQ29kZUZyb21FcnJvcihlcnJvcikge1xuICAgIGlmICghaXNSZWRpcmVjdEVycm9yKGVycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgYSByZWRpcmVjdCBlcnJvclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIE51bWJlcihlcnJvci5kaWdlc3Quc3BsaXQoXCI7XCIsIDQpWzNdKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkaXJlY3QuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiUmVkaXJlY3RUeXBlIiwiZ2V0UmVkaXJlY3RFcnJvciIsInJlZGlyZWN0IiwicGVybWFuZW50UmVkaXJlY3QiLCJpc1JlZGlyZWN0RXJyb3IiLCJnZXRVUkxGcm9tUmVkaXJlY3RFcnJvciIsImdldFJlZGlyZWN0VHlwZUZyb21FcnJvciIsImdldFJlZGlyZWN0U3RhdHVzQ29kZUZyb21FcnJvciIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9yZXF1ZXN0YXN5bmNzdG9yYWdlZXh0ZXJuYWwiLCJyZXF1aXJlIiwiX2FjdGlvbmFzeW5jc3RvcmFnZWV4dGVybmFsIiwiX3JlZGlyZWN0c3RhdHVzY29kZSIsIlJFRElSRUNUX0VSUk9SX0NPREUiLCJ1cmwiLCJ0eXBlIiwic3RhdHVzQ29kZSIsIlJlZGlyZWN0U3RhdHVzQ29kZSIsIlRlbXBvcmFyeVJlZGlyZWN0IiwiZXJyb3IiLCJFcnJvciIsImRpZ2VzdCIsInJlcXVlc3RTdG9yZSIsInJlcXVlc3RBc3luY1N0b3JhZ2UiLCJnZXRTdG9yZSIsIm11dGFibGVDb29raWVzIiwiYWN0aW9uU3RvcmUiLCJhY3Rpb25Bc3luY1N0b3JhZ2UiLCJpc0FjdGlvbiIsIlNlZU90aGVyIiwiUGVybWFuZW50UmVkaXJlY3QiLCJlcnJvckNvZGUiLCJkZXN0aW5hdGlvbiIsInN0YXR1cyIsInNwbGl0IiwiTnVtYmVyIiwiaXNOYU4iLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/redirect.js\n")); + +/***/ }), + +/***/ "(shared)/./node_modules/next/dist/client/components/request-async-storage.external.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/request-async-storage.external.js ***! + \************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"requestAsyncStorage\", ({\n enumerable: true,\n get: function() {\n return requestAsyncStorage;\n }\n}));\nconst _asynclocalstorage = __webpack_require__(/*! ./async-local-storage */ \"(shared)/./node_modules/next/dist/client/components/async-local-storage.js\");\nconst requestAsyncStorage = (0, _asynclocalstorage.createAsyncLocalStorage)();\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=request-async-storage.external.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNoYXJlZCkvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlcXVlc3QtYXN5bmMtc3RvcmFnZS5leHRlcm5hbC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsdURBQXNEO0lBQ2xESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMscUJBQXFCQyxtQkFBT0EsQ0FBQyx5R0FBdUI7QUFDMUQsTUFBTUYsc0JBQXNCLENBQUMsR0FBR0MsbUJBQW1CRSx1QkFBdUI7QUFFMUUsSUFBSSxDQUFDLE9BQU9QLFFBQVFRLE9BQU8sS0FBSyxjQUFlLE9BQU9SLFFBQVFRLE9BQU8sS0FBSyxZQUFZUixRQUFRUSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9SLFFBQVFRLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktYLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUVEsT0FBTyxFQUFFLGNBQWM7UUFBRVAsT0FBTztJQUFLO0lBQ25FSCxPQUFPWSxNQUFNLENBQUNWLFFBQVFRLE9BQU8sRUFBRVI7SUFDL0JXLE9BQU9YLE9BQU8sR0FBR0EsUUFBUVEsT0FBTztBQUNsQyxFQUVBLDBEQUEwRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JlcXVlc3QtYXN5bmMtc3RvcmFnZS5leHRlcm5hbC5qcz9mMDg2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVxdWVzdEFzeW5jU3RvcmFnZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmVxdWVzdEFzeW5jU3RvcmFnZTtcbiAgICB9XG59KTtcbmNvbnN0IF9hc3luY2xvY2Fsc3RvcmFnZSA9IHJlcXVpcmUoXCIuL2FzeW5jLWxvY2FsLXN0b3JhZ2VcIik7XG5jb25zdCByZXF1ZXN0QXN5bmNTdG9yYWdlID0gKDAsIF9hc3luY2xvY2Fsc3RvcmFnZS5jcmVhdGVBc3luY0xvY2FsU3RvcmFnZSkoKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVxdWVzdC1hc3luYy1zdG9yYWdlLmV4dGVybmFsLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJyZXF1ZXN0QXN5bmNTdG9yYWdlIiwiX2FzeW5jbG9jYWxzdG9yYWdlIiwicmVxdWlyZSIsImNyZWF0ZUFzeW5jTG9jYWxTdG9yYWdlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(shared)/./node_modules/next/dist/client/components/request-async-storage.external.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js": +/*!**************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js ***! + \**************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"applyFlightData\", ({\n enumerable: true,\n get: function() {\n return applyFlightData;\n }\n}));\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _fillcachewithnewsubtreedata = __webpack_require__(/*! ./fill-cache-with-new-subtree-data */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js\");\nfunction applyFlightData(existingCache, cache, flightDataPath, wasPrefetched) {\n if (wasPrefetched === void 0) wasPrefetched = false;\n // The one before last item is the router state tree patch\n const [treePatch, cacheNodeSeedData, head] = flightDataPath.slice(-3);\n // Handles case where prefetch only returns the router tree patch without rendered components.\n if (cacheNodeSeedData === null) {\n return false;\n }\n if (flightDataPath.length === 3) {\n const rsc = cacheNodeSeedData[2];\n cache.rsc = rsc;\n // This is a PPR-only field. When PPR is enabled, we shouldn't hit\n // this path during a navigation, but until PPR is fully implemented\n // yet it's possible the existing node does have a non-null\n // `prefetchRsc`. As an incremental step, we'll just de-opt to the\n // old behavior — no PPR value.\n cache.prefetchRsc = null;\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(cache, existingCache, treePatch, cacheNodeSeedData, head, wasPrefetched);\n } else {\n // Copy rsc for the root node of the cache.\n cache.rsc = existingCache.rsc;\n // This is a PPR-only field. Unlike the previous branch, since we're\n // just cloning the existing cache node, we might as well keep the\n // PPR value, if it exists.\n cache.prefetchRsc = existingCache.prefetchRsc;\n cache.parallelRoutes = new Map(existingCache.parallelRoutes);\n // Create a copy of the existing cache with the rsc applied.\n (0, _fillcachewithnewsubtreedata.fillCacheWithNewSubTreeData)(cache, existingCache, flightDataPath, wasPrefetched);\n }\n return true;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=apply-flight-data.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvYXBwbHktZmxpZ2h0LWRhdGEuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILG1EQUFrRDtJQUM5Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGlDQUFpQ0MsbUJBQU9BLENBQUMsbUtBQXVDO0FBQ3RGLE1BQU1DLCtCQUErQkQsbUJBQU9BLENBQUMsNkpBQW9DO0FBQ2pGLFNBQVNGLGdCQUFnQkksYUFBYSxFQUFFQyxLQUFLLEVBQUVDLGNBQWMsRUFBRUMsYUFBYTtJQUN4RSxJQUFJQSxrQkFBa0IsS0FBSyxHQUFHQSxnQkFBZ0I7SUFDOUMsMERBQTBEO0lBQzFELE1BQU0sQ0FBQ0MsV0FBV0MsbUJBQW1CQyxLQUFLLEdBQUdKLGVBQWVLLEtBQUssQ0FBQyxDQUFDO0lBQ25FLDhGQUE4RjtJQUM5RixJQUFJRixzQkFBc0IsTUFBTTtRQUM1QixPQUFPO0lBQ1g7SUFDQSxJQUFJSCxlQUFlTSxNQUFNLEtBQUssR0FBRztRQUM3QixNQUFNQyxNQUFNSixpQkFBaUIsQ0FBQyxFQUFFO1FBQ2hDSixNQUFNUSxHQUFHLEdBQUdBO1FBQ1osa0VBQWtFO1FBQ2xFLG9FQUFvRTtRQUNwRSwyREFBMkQ7UUFDM0Qsa0VBQWtFO1FBQ2xFLCtCQUErQjtRQUMvQlIsTUFBTVMsV0FBVyxHQUFHO1FBQ25CLElBQUdiLCtCQUErQmMsNkJBQTZCLEVBQUVWLE9BQU9ELGVBQWVJLFdBQVdDLG1CQUFtQkMsTUFBTUg7SUFDaEksT0FBTztRQUNILDJDQUEyQztRQUMzQ0YsTUFBTVEsR0FBRyxHQUFHVCxjQUFjUyxHQUFHO1FBQzdCLG9FQUFvRTtRQUNwRSxrRUFBa0U7UUFDbEUsMkJBQTJCO1FBQzNCUixNQUFNUyxXQUFXLEdBQUdWLGNBQWNVLFdBQVc7UUFDN0NULE1BQU1XLGNBQWMsR0FBRyxJQUFJQyxJQUFJYixjQUFjWSxjQUFjO1FBQzNELDREQUE0RDtRQUMzRCxJQUFHYiw2QkFBNkJlLDJCQUEyQixFQUFFYixPQUFPRCxlQUFlRSxnQkFBZ0JDO0lBQ3hHO0lBQ0EsT0FBTztBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU9YLFFBQVF1QixPQUFPLEtBQUssY0FBZSxPQUFPdkIsUUFBUXVCLE9BQU8sS0FBSyxZQUFZdkIsUUFBUXVCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3ZCLFFBQVF1QixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLMUIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRdUIsT0FBTyxFQUFFLGNBQWM7UUFBRXRCLE9BQU87SUFBSztJQUNuRUgsT0FBTzJCLE1BQU0sQ0FBQ3pCLFFBQVF1QixPQUFPLEVBQUV2QjtJQUMvQjBCLE9BQU8xQixPQUFPLEdBQUdBLFFBQVF1QixPQUFPO0FBQ2xDLEVBRUEsNkNBQTZDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvYXBwbHktZmxpZ2h0LWRhdGEuanM/ZjZkNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFwcGx5RmxpZ2h0RGF0YVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYXBwbHlGbGlnaHREYXRhO1xuICAgIH1cbn0pO1xuY29uc3QgX2ZpbGxsYXp5aXRlbXN0aWxsbGVhZndpdGhoZWFkID0gcmVxdWlyZShcIi4vZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWRcIik7XG5jb25zdCBfZmlsbGNhY2hld2l0aG5ld3N1YnRyZWVkYXRhID0gcmVxdWlyZShcIi4vZmlsbC1jYWNoZS13aXRoLW5ldy1zdWJ0cmVlLWRhdGFcIik7XG5mdW5jdGlvbiBhcHBseUZsaWdodERhdGEoZXhpc3RpbmdDYWNoZSwgY2FjaGUsIGZsaWdodERhdGFQYXRoLCB3YXNQcmVmZXRjaGVkKSB7XG4gICAgaWYgKHdhc1ByZWZldGNoZWQgPT09IHZvaWQgMCkgd2FzUHJlZmV0Y2hlZCA9IGZhbHNlO1xuICAgIC8vIFRoZSBvbmUgYmVmb3JlIGxhc3QgaXRlbSBpcyB0aGUgcm91dGVyIHN0YXRlIHRyZWUgcGF0Y2hcbiAgICBjb25zdCBbdHJlZVBhdGNoLCBjYWNoZU5vZGVTZWVkRGF0YSwgaGVhZF0gPSBmbGlnaHREYXRhUGF0aC5zbGljZSgtMyk7XG4gICAgLy8gSGFuZGxlcyBjYXNlIHdoZXJlIHByZWZldGNoIG9ubHkgcmV0dXJucyB0aGUgcm91dGVyIHRyZWUgcGF0Y2ggd2l0aG91dCByZW5kZXJlZCBjb21wb25lbnRzLlxuICAgIGlmIChjYWNoZU5vZGVTZWVkRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmbGlnaHREYXRhUGF0aC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgY29uc3QgcnNjID0gY2FjaGVOb2RlU2VlZERhdGFbMl07XG4gICAgICAgIGNhY2hlLnJzYyA9IHJzYztcbiAgICAgICAgLy8gVGhpcyBpcyBhIFBQUi1vbmx5IGZpZWxkLiBXaGVuIFBQUiBpcyBlbmFibGVkLCB3ZSBzaG91bGRuJ3QgaGl0XG4gICAgICAgIC8vIHRoaXMgcGF0aCBkdXJpbmcgYSBuYXZpZ2F0aW9uLCBidXQgdW50aWwgUFBSIGlzIGZ1bGx5IGltcGxlbWVudGVkXG4gICAgICAgIC8vIHlldCBpdCdzIHBvc3NpYmxlIHRoZSBleGlzdGluZyBub2RlIGRvZXMgaGF2ZSBhIG5vbi1udWxsXG4gICAgICAgIC8vIGBwcmVmZXRjaFJzY2AuIEFzIGFuIGluY3JlbWVudGFsIHN0ZXAsIHdlJ2xsIGp1c3QgZGUtb3B0IHRvIHRoZVxuICAgICAgICAvLyBvbGQgYmVoYXZpb3Ig4oCUIG5vIFBQUiB2YWx1ZS5cbiAgICAgICAgY2FjaGUucHJlZmV0Y2hSc2MgPSBudWxsO1xuICAgICAgICAoMCwgX2ZpbGxsYXp5aXRlbXN0aWxsbGVhZndpdGhoZWFkLmZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKShjYWNoZSwgZXhpc3RpbmdDYWNoZSwgdHJlZVBhdGNoLCBjYWNoZU5vZGVTZWVkRGF0YSwgaGVhZCwgd2FzUHJlZmV0Y2hlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ29weSByc2MgZm9yIHRoZSByb290IG5vZGUgb2YgdGhlIGNhY2hlLlxuICAgICAgICBjYWNoZS5yc2MgPSBleGlzdGluZ0NhY2hlLnJzYztcbiAgICAgICAgLy8gVGhpcyBpcyBhIFBQUi1vbmx5IGZpZWxkLiBVbmxpa2UgdGhlIHByZXZpb3VzIGJyYW5jaCwgc2luY2Ugd2UncmVcbiAgICAgICAgLy8ganVzdCBjbG9uaW5nIHRoZSBleGlzdGluZyBjYWNoZSBub2RlLCB3ZSBtaWdodCBhcyB3ZWxsIGtlZXAgdGhlXG4gICAgICAgIC8vIFBQUiB2YWx1ZSwgaWYgaXQgZXhpc3RzLlxuICAgICAgICBjYWNoZS5wcmVmZXRjaFJzYyA9IGV4aXN0aW5nQ2FjaGUucHJlZmV0Y2hSc2M7XG4gICAgICAgIGNhY2hlLnBhcmFsbGVsUm91dGVzID0gbmV3IE1hcChleGlzdGluZ0NhY2hlLnBhcmFsbGVsUm91dGVzKTtcbiAgICAgICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgZXhpc3RpbmcgY2FjaGUgd2l0aCB0aGUgcnNjIGFwcGxpZWQuXG4gICAgICAgICgwLCBfZmlsbGNhY2hld2l0aG5ld3N1YnRyZWVkYXRhLmZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YSkoY2FjaGUsIGV4aXN0aW5nQ2FjaGUsIGZsaWdodERhdGFQYXRoLCB3YXNQcmVmZXRjaGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcGx5LWZsaWdodC1kYXRhLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJhcHBseUZsaWdodERhdGEiLCJfZmlsbGxhenlpdGVtc3RpbGxsZWFmd2l0aGhlYWQiLCJyZXF1aXJlIiwiX2ZpbGxjYWNoZXdpdGhuZXdzdWJ0cmVlZGF0YSIsImV4aXN0aW5nQ2FjaGUiLCJjYWNoZSIsImZsaWdodERhdGFQYXRoIiwid2FzUHJlZmV0Y2hlZCIsInRyZWVQYXRjaCIsImNhY2hlTm9kZVNlZWREYXRhIiwiaGVhZCIsInNsaWNlIiwibGVuZ3RoIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCIsInBhcmFsbGVsUm91dGVzIiwiTWFwIiwiZmlsbENhY2hlV2l0aE5ld1N1YlRyZWVEYXRhIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js ***! + \*****************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n applyRouterStatePatchToFullTree: function() {\n return applyRouterStatePatchToFullTree;\n },\n applyRouterStatePatchToTreeSkipDefault: function() {\n return applyRouterStatePatchToTreeSkipDefault;\n }\n});\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js\");\n/**\n * Deep merge of the two router states. Parallel route keys are preserved if the patch doesn't have them.\n */ function applyPatch(initialTree, patchTree, applyPatchToDefaultSegment) {\n if (applyPatchToDefaultSegment === void 0) applyPatchToDefaultSegment = false;\n const [initialSegment, initialParallelRoutes] = initialTree;\n const [patchSegment, patchParallelRoutes] = patchTree;\n // if the applied patch segment is __DEFAULT__ then it can be ignored in favor of the initial tree\n // this is because the __DEFAULT__ segment is used as a placeholder on navigation\n // however, there are cases where we _do_ want to apply the patch to the default segment,\n // such as when revalidating the router cache with router.refresh/revalidatePath\n if (!applyPatchToDefaultSegment && patchSegment === _segment.DEFAULT_SEGMENT_KEY && initialSegment !== _segment.DEFAULT_SEGMENT_KEY) {\n return initialTree;\n }\n if ((0, _matchsegments.matchSegment)(initialSegment, patchSegment)) {\n const newParallelRoutes = {};\n for(const key in initialParallelRoutes){\n const isInPatchTreeParallelRoutes = typeof patchParallelRoutes[key] !== \"undefined\";\n if (isInPatchTreeParallelRoutes) {\n newParallelRoutes[key] = applyPatch(initialParallelRoutes[key], patchParallelRoutes[key], applyPatchToDefaultSegment);\n } else {\n newParallelRoutes[key] = initialParallelRoutes[key];\n }\n }\n for(const key in patchParallelRoutes){\n if (newParallelRoutes[key]) {\n continue;\n }\n newParallelRoutes[key] = patchParallelRoutes[key];\n }\n const tree = [\n initialSegment,\n newParallelRoutes\n ];\n if (initialTree[2]) {\n tree[2] = initialTree[2];\n }\n if (initialTree[3]) {\n tree[3] = initialTree[3];\n }\n if (initialTree[4]) {\n tree[4] = initialTree[4];\n }\n return tree;\n }\n return patchTree;\n}\nfunction applyRouterStatePatchToTreeImpl(flightSegmentPath, flightRouterState, treePatch, applyPatchDefaultSegment) {\n if (applyPatchDefaultSegment === void 0) applyPatchDefaultSegment = false;\n const [segment, parallelRoutes, , , isRootLayout] = flightRouterState;\n // Root refresh\n if (flightSegmentPath.length === 1) {\n const tree = applyPatch(flightRouterState, treePatch, applyPatchDefaultSegment);\n return tree;\n }\n const [currentSegment, parallelRouteKey] = flightSegmentPath;\n // Tree path returned from the server should always match up with the current tree in the browser\n if (!(0, _matchsegments.matchSegment)(currentSegment, segment)) {\n return null;\n }\n const lastSegment = flightSegmentPath.length === 2;\n let parallelRoutePatch;\n if (lastSegment) {\n parallelRoutePatch = applyPatch(parallelRoutes[parallelRouteKey], treePatch, applyPatchDefaultSegment);\n } else {\n parallelRoutePatch = applyRouterStatePatchToTreeImpl(flightSegmentPath.slice(2), parallelRoutes[parallelRouteKey], treePatch, applyPatchDefaultSegment);\n if (parallelRoutePatch === null) {\n return null;\n }\n }\n const tree = [\n flightSegmentPath[0],\n {\n ...parallelRoutes,\n [parallelRouteKey]: parallelRoutePatch\n }\n ];\n // Current segment is the root layout\n if (isRootLayout) {\n tree[4] = true;\n }\n return tree;\n}\nfunction applyRouterStatePatchToFullTree(flightSegmentPath, flightRouterState, treePatch) {\n return applyRouterStatePatchToTreeImpl(flightSegmentPath, flightRouterState, treePatch, true);\n}\nfunction applyRouterStatePatchToTreeSkipDefault(flightSegmentPath, flightRouterState, treePatch) {\n return applyRouterStatePatchToTreeImpl(flightSegmentPath, flightRouterState, treePatch, false);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=apply-router-state-patch-to-tree.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLGlDQUFpQztRQUM3QixPQUFPQTtJQUNYO0lBQ0FDLHdDQUF3QztRQUNwQyxPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxXQUFXQyxtQkFBT0EsQ0FBQyx1R0FBNkI7QUFDdEQsTUFBTUMsaUJBQWlCRCxtQkFBT0EsQ0FBQywyR0FBbUI7QUFDbEQ7O0NBRUMsR0FBRyxTQUFTRSxXQUFXQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsMEJBQTBCO0lBQ3RFLElBQUlBLCtCQUErQixLQUFLLEdBQUdBLDZCQUE2QjtJQUN4RSxNQUFNLENBQUNDLGdCQUFnQkMsc0JBQXNCLEdBQUdKO0lBQ2hELE1BQU0sQ0FBQ0ssY0FBY0Msb0JBQW9CLEdBQUdMO0lBQzVDLGtHQUFrRztJQUNsRyxpRkFBaUY7SUFDakYseUZBQXlGO0lBQ3pGLGdGQUFnRjtJQUNoRixJQUFJLENBQUNDLDhCQUE4QkcsaUJBQWlCVCxTQUFTVyxtQkFBbUIsSUFBSUosbUJBQW1CUCxTQUFTVyxtQkFBbUIsRUFBRTtRQUNqSSxPQUFPUDtJQUNYO0lBQ0EsSUFBSSxDQUFDLEdBQUdGLGVBQWVVLFlBQVksRUFBRUwsZ0JBQWdCRSxlQUFlO1FBQ2hFLE1BQU1JLG9CQUFvQixDQUFDO1FBQzNCLElBQUksTUFBTUMsT0FBT04sc0JBQXNCO1lBQ25DLE1BQU1PLDhCQUE4QixPQUFPTCxtQkFBbUIsQ0FBQ0ksSUFBSSxLQUFLO1lBQ3hFLElBQUlDLDZCQUE2QjtnQkFDN0JGLGlCQUFpQixDQUFDQyxJQUFJLEdBQUdYLFdBQVdLLHFCQUFxQixDQUFDTSxJQUFJLEVBQUVKLG1CQUFtQixDQUFDSSxJQUFJLEVBQUVSO1lBQzlGLE9BQU87Z0JBQ0hPLGlCQUFpQixDQUFDQyxJQUFJLEdBQUdOLHFCQUFxQixDQUFDTSxJQUFJO1lBQ3ZEO1FBQ0o7UUFDQSxJQUFJLE1BQU1BLE9BQU9KLG9CQUFvQjtZQUNqQyxJQUFJRyxpQkFBaUIsQ0FBQ0MsSUFBSSxFQUFFO2dCQUN4QjtZQUNKO1lBQ0FELGlCQUFpQixDQUFDQyxJQUFJLEdBQUdKLG1CQUFtQixDQUFDSSxJQUFJO1FBQ3JEO1FBQ0EsTUFBTUUsT0FBTztZQUNUVDtZQUNBTTtTQUNIO1FBQ0QsSUFBSVQsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUNoQlksSUFBSSxDQUFDLEVBQUUsR0FBR1osV0FBVyxDQUFDLEVBQUU7UUFDNUI7UUFDQSxJQUFJQSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQ2hCWSxJQUFJLENBQUMsRUFBRSxHQUFHWixXQUFXLENBQUMsRUFBRTtRQUM1QjtRQUNBLElBQUlBLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDaEJZLElBQUksQ0FBQyxFQUFFLEdBQUdaLFdBQVcsQ0FBQyxFQUFFO1FBQzVCO1FBQ0EsT0FBT1k7SUFDWDtJQUNBLE9BQU9YO0FBQ1g7QUFDQSxTQUFTWSxnQ0FBZ0NDLGlCQUFpQixFQUFFQyxpQkFBaUIsRUFBRUMsU0FBUyxFQUFFQyx3QkFBd0I7SUFDOUcsSUFBSUEsNkJBQTZCLEtBQUssR0FBR0EsMkJBQTJCO0lBQ3BFLE1BQU0sQ0FBQ0MsU0FBU0Msb0JBQW9CQyxhQUFhLEdBQUdMO0lBQ3BELGVBQWU7SUFDZixJQUFJRCxrQkFBa0JPLE1BQU0sS0FBSyxHQUFHO1FBQ2hDLE1BQU1ULE9BQU9iLFdBQVdnQixtQkFBbUJDLFdBQVdDO1FBQ3RELE9BQU9MO0lBQ1g7SUFDQSxNQUFNLENBQUNVLGdCQUFnQkMsaUJBQWlCLEdBQUdUO0lBQzNDLGlHQUFpRztJQUNqRyxJQUFJLENBQUMsQ0FBQyxHQUFHaEIsZUFBZVUsWUFBWSxFQUFFYyxnQkFBZ0JKLFVBQVU7UUFDNUQsT0FBTztJQUNYO0lBQ0EsTUFBTU0sY0FBY1Ysa0JBQWtCTyxNQUFNLEtBQUs7SUFDakQsSUFBSUk7SUFDSixJQUFJRCxhQUFhO1FBQ2JDLHFCQUFxQjFCLFdBQVdvQixjQUFjLENBQUNJLGlCQUFpQixFQUFFUCxXQUFXQztJQUNqRixPQUFPO1FBQ0hRLHFCQUFxQlosZ0NBQWdDQyxrQkFBa0JZLEtBQUssQ0FBQyxJQUFJUCxjQUFjLENBQUNJLGlCQUFpQixFQUFFUCxXQUFXQztRQUM5SCxJQUFJUSx1QkFBdUIsTUFBTTtZQUM3QixPQUFPO1FBQ1g7SUFDSjtJQUNBLE1BQU1iLE9BQU87UUFDVEUsaUJBQWlCLENBQUMsRUFBRTtRQUNwQjtZQUNJLEdBQUdLLGNBQWM7WUFDakIsQ0FBQ0ksaUJBQWlCLEVBQUVFO1FBQ3hCO0tBQ0g7SUFDRCxxQ0FBcUM7SUFDckMsSUFBSUwsY0FBYztRQUNkUixJQUFJLENBQUMsRUFBRSxHQUFHO0lBQ2Q7SUFDQSxPQUFPQTtBQUNYO0FBQ0EsU0FBU3hCLGdDQUFnQzBCLGlCQUFpQixFQUFFQyxpQkFBaUIsRUFBRUMsU0FBUztJQUNwRixPQUFPSCxnQ0FBZ0NDLG1CQUFtQkMsbUJBQW1CQyxXQUFXO0FBQzVGO0FBQ0EsU0FBUzNCLHVDQUF1Q3lCLGlCQUFpQixFQUFFQyxpQkFBaUIsRUFBRUMsU0FBUztJQUMzRixPQUFPSCxnQ0FBZ0NDLG1CQUFtQkMsbUJBQW1CQyxXQUFXO0FBQzVGO0FBRUEsSUFBSSxDQUFDLE9BQU8vQixRQUFRMEMsT0FBTyxLQUFLLGNBQWUsT0FBTzFDLFFBQVEwQyxPQUFPLEtBQUssWUFBWTFDLFFBQVEwQyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU8xQyxRQUFRMEMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzdDLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTBDLE9BQU8sRUFBRSxjQUFjO1FBQUV6QyxPQUFPO0lBQUs7SUFDbkVILE9BQU84QyxNQUFNLENBQUM1QyxRQUFRMEMsT0FBTyxFQUFFMUM7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUTBDLE9BQU87QUFDbEMsRUFFQSw0REFBNEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9hcHBseS1yb3V0ZXItc3RhdGUtcGF0Y2gtdG8tdHJlZS5qcz9mN2MzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9GdWxsVHJlZTogbnVsbCxcbiAgICBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdDogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb0Z1bGxUcmVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvRnVsbFRyZWU7XG4gICAgfSxcbiAgICBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdDtcbiAgICB9XG59KTtcbmNvbnN0IF9zZWdtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL3NoYXJlZC9saWIvc2VnbWVudFwiKTtcbmNvbnN0IF9tYXRjaHNlZ21lbnRzID0gcmVxdWlyZShcIi4uL21hdGNoLXNlZ21lbnRzXCIpO1xuLyoqXG4gKiBEZWVwIG1lcmdlIG9mIHRoZSB0d28gcm91dGVyIHN0YXRlcy4gUGFyYWxsZWwgcm91dGUga2V5cyBhcmUgcHJlc2VydmVkIGlmIHRoZSBwYXRjaCBkb2Vzbid0IGhhdmUgdGhlbS5cbiAqLyBmdW5jdGlvbiBhcHBseVBhdGNoKGluaXRpYWxUcmVlLCBwYXRjaFRyZWUsIGFwcGx5UGF0Y2hUb0RlZmF1bHRTZWdtZW50KSB7XG4gICAgaWYgKGFwcGx5UGF0Y2hUb0RlZmF1bHRTZWdtZW50ID09PSB2b2lkIDApIGFwcGx5UGF0Y2hUb0RlZmF1bHRTZWdtZW50ID0gZmFsc2U7XG4gICAgY29uc3QgW2luaXRpYWxTZWdtZW50LCBpbml0aWFsUGFyYWxsZWxSb3V0ZXNdID0gaW5pdGlhbFRyZWU7XG4gICAgY29uc3QgW3BhdGNoU2VnbWVudCwgcGF0Y2hQYXJhbGxlbFJvdXRlc10gPSBwYXRjaFRyZWU7XG4gICAgLy8gaWYgdGhlIGFwcGxpZWQgcGF0Y2ggc2VnbWVudCBpcyBfX0RFRkFVTFRfXyB0aGVuIGl0IGNhbiBiZSBpZ25vcmVkIGluIGZhdm9yIG9mIHRoZSBpbml0aWFsIHRyZWVcbiAgICAvLyB0aGlzIGlzIGJlY2F1c2UgdGhlIF9fREVGQVVMVF9fIHNlZ21lbnQgaXMgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIG9uIG5hdmlnYXRpb25cbiAgICAvLyBob3dldmVyLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgd2UgX2RvXyB3YW50IHRvIGFwcGx5IHRoZSBwYXRjaCB0byB0aGUgZGVmYXVsdCBzZWdtZW50LFxuICAgIC8vIHN1Y2ggYXMgd2hlbiByZXZhbGlkYXRpbmcgdGhlIHJvdXRlciBjYWNoZSB3aXRoIHJvdXRlci5yZWZyZXNoL3JldmFsaWRhdGVQYXRoXG4gICAgaWYgKCFhcHBseVBhdGNoVG9EZWZhdWx0U2VnbWVudCAmJiBwYXRjaFNlZ21lbnQgPT09IF9zZWdtZW50LkRFRkFVTFRfU0VHTUVOVF9LRVkgJiYgaW5pdGlhbFNlZ21lbnQgIT09IF9zZWdtZW50LkRFRkFVTFRfU0VHTUVOVF9LRVkpIHtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxUcmVlO1xuICAgIH1cbiAgICBpZiAoKDAsIF9tYXRjaHNlZ21lbnRzLm1hdGNoU2VnbWVudCkoaW5pdGlhbFNlZ21lbnQsIHBhdGNoU2VnbWVudCkpIHtcbiAgICAgICAgY29uc3QgbmV3UGFyYWxsZWxSb3V0ZXMgPSB7fTtcbiAgICAgICAgZm9yKGNvbnN0IGtleSBpbiBpbml0aWFsUGFyYWxsZWxSb3V0ZXMpe1xuICAgICAgICAgICAgY29uc3QgaXNJblBhdGNoVHJlZVBhcmFsbGVsUm91dGVzID0gdHlwZW9mIHBhdGNoUGFyYWxsZWxSb3V0ZXNba2V5XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgICAgIGlmIChpc0luUGF0Y2hUcmVlUGFyYWxsZWxSb3V0ZXMpIHtcbiAgICAgICAgICAgICAgICBuZXdQYXJhbGxlbFJvdXRlc1trZXldID0gYXBwbHlQYXRjaChpbml0aWFsUGFyYWxsZWxSb3V0ZXNba2V5XSwgcGF0Y2hQYXJhbGxlbFJvdXRlc1trZXldLCBhcHBseVBhdGNoVG9EZWZhdWx0U2VnbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1BhcmFsbGVsUm91dGVzW2tleV0gPSBpbml0aWFsUGFyYWxsZWxSb3V0ZXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IoY29uc3Qga2V5IGluIHBhdGNoUGFyYWxsZWxSb3V0ZXMpe1xuICAgICAgICAgICAgaWYgKG5ld1BhcmFsbGVsUm91dGVzW2tleV0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld1BhcmFsbGVsUm91dGVzW2tleV0gPSBwYXRjaFBhcmFsbGVsUm91dGVzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJlZSA9IFtcbiAgICAgICAgICAgIGluaXRpYWxTZWdtZW50LFxuICAgICAgICAgICAgbmV3UGFyYWxsZWxSb3V0ZXNcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKGluaXRpYWxUcmVlWzJdKSB7XG4gICAgICAgICAgICB0cmVlWzJdID0gaW5pdGlhbFRyZWVbMl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluaXRpYWxUcmVlWzNdKSB7XG4gICAgICAgICAgICB0cmVlWzNdID0gaW5pdGlhbFRyZWVbM107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluaXRpYWxUcmVlWzRdKSB7XG4gICAgICAgICAgICB0cmVlWzRdID0gaW5pdGlhbFRyZWVbNF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyZWU7XG4gICAgfVxuICAgIHJldHVybiBwYXRjaFRyZWU7XG59XG5mdW5jdGlvbiBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVJbXBsKGZsaWdodFNlZ21lbnRQYXRoLCBmbGlnaHRSb3V0ZXJTdGF0ZSwgdHJlZVBhdGNoLCBhcHBseVBhdGNoRGVmYXVsdFNlZ21lbnQpIHtcbiAgICBpZiAoYXBwbHlQYXRjaERlZmF1bHRTZWdtZW50ID09PSB2b2lkIDApIGFwcGx5UGF0Y2hEZWZhdWx0U2VnbWVudCA9IGZhbHNlO1xuICAgIGNvbnN0IFtzZWdtZW50LCBwYXJhbGxlbFJvdXRlcywgLCAsIGlzUm9vdExheW91dF0gPSBmbGlnaHRSb3V0ZXJTdGF0ZTtcbiAgICAvLyBSb290IHJlZnJlc2hcbiAgICBpZiAoZmxpZ2h0U2VnbWVudFBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IHRyZWUgPSBhcHBseVBhdGNoKGZsaWdodFJvdXRlclN0YXRlLCB0cmVlUGF0Y2gsIGFwcGx5UGF0Y2hEZWZhdWx0U2VnbWVudCk7XG4gICAgICAgIHJldHVybiB0cmVlO1xuICAgIH1cbiAgICBjb25zdCBbY3VycmVudFNlZ21lbnQsIHBhcmFsbGVsUm91dGVLZXldID0gZmxpZ2h0U2VnbWVudFBhdGg7XG4gICAgLy8gVHJlZSBwYXRoIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciBzaG91bGQgYWx3YXlzIG1hdGNoIHVwIHdpdGggdGhlIGN1cnJlbnQgdHJlZSBpbiB0aGUgYnJvd3NlclxuICAgIGlmICghKDAsIF9tYXRjaHNlZ21lbnRzLm1hdGNoU2VnbWVudCkoY3VycmVudFNlZ21lbnQsIHNlZ21lbnQpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBsYXN0U2VnbWVudCA9IGZsaWdodFNlZ21lbnRQYXRoLmxlbmd0aCA9PT0gMjtcbiAgICBsZXQgcGFyYWxsZWxSb3V0ZVBhdGNoO1xuICAgIGlmIChsYXN0U2VnbWVudCkge1xuICAgICAgICBwYXJhbGxlbFJvdXRlUGF0Y2ggPSBhcHBseVBhdGNoKHBhcmFsbGVsUm91dGVzW3BhcmFsbGVsUm91dGVLZXldLCB0cmVlUGF0Y2gsIGFwcGx5UGF0Y2hEZWZhdWx0U2VnbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYWxsZWxSb3V0ZVBhdGNoID0gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlSW1wbChmbGlnaHRTZWdtZW50UGF0aC5zbGljZSgyKSwgcGFyYWxsZWxSb3V0ZXNbcGFyYWxsZWxSb3V0ZUtleV0sIHRyZWVQYXRjaCwgYXBwbHlQYXRjaERlZmF1bHRTZWdtZW50KTtcbiAgICAgICAgaWYgKHBhcmFsbGVsUm91dGVQYXRjaCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdHJlZSA9IFtcbiAgICAgICAgZmxpZ2h0U2VnbWVudFBhdGhbMF0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIC4uLnBhcmFsbGVsUm91dGVzLFxuICAgICAgICAgICAgW3BhcmFsbGVsUm91dGVLZXldOiBwYXJhbGxlbFJvdXRlUGF0Y2hcbiAgICAgICAgfVxuICAgIF07XG4gICAgLy8gQ3VycmVudCBzZWdtZW50IGlzIHRoZSByb290IGxheW91dFxuICAgIGlmIChpc1Jvb3RMYXlvdXQpIHtcbiAgICAgICAgdHJlZVs0XSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0cmVlO1xufVxuZnVuY3Rpb24gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9GdWxsVHJlZShmbGlnaHRTZWdtZW50UGF0aCwgZmxpZ2h0Um91dGVyU3RhdGUsIHRyZWVQYXRjaCkge1xuICAgIHJldHVybiBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVJbXBsKGZsaWdodFNlZ21lbnRQYXRoLCBmbGlnaHRSb3V0ZXJTdGF0ZSwgdHJlZVBhdGNoLCB0cnVlKTtcbn1cbmZ1bmN0aW9uIGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZVNraXBEZWZhdWx0KGZsaWdodFNlZ21lbnRQYXRoLCBmbGlnaHRSb3V0ZXJTdGF0ZSwgdHJlZVBhdGNoKSB7XG4gICAgcmV0dXJuIGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZUltcGwoZmxpZ2h0U2VnbWVudFBhdGgsIGZsaWdodFJvdXRlclN0YXRlLCB0cmVlUGF0Y2gsIGZhbHNlKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9GdWxsVHJlZSIsImFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZVNraXBEZWZhdWx0IiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX3NlZ21lbnQiLCJyZXF1aXJlIiwiX21hdGNoc2VnbWVudHMiLCJhcHBseVBhdGNoIiwiaW5pdGlhbFRyZWUiLCJwYXRjaFRyZWUiLCJhcHBseVBhdGNoVG9EZWZhdWx0U2VnbWVudCIsImluaXRpYWxTZWdtZW50IiwiaW5pdGlhbFBhcmFsbGVsUm91dGVzIiwicGF0Y2hTZWdtZW50IiwicGF0Y2hQYXJhbGxlbFJvdXRlcyIsIkRFRkFVTFRfU0VHTUVOVF9LRVkiLCJtYXRjaFNlZ21lbnQiLCJuZXdQYXJhbGxlbFJvdXRlcyIsImtleSIsImlzSW5QYXRjaFRyZWVQYXJhbGxlbFJvdXRlcyIsInRyZWUiLCJhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVJbXBsIiwiZmxpZ2h0U2VnbWVudFBhdGgiLCJmbGlnaHRSb3V0ZXJTdGF0ZSIsInRyZWVQYXRjaCIsImFwcGx5UGF0Y2hEZWZhdWx0U2VnbWVudCIsInNlZ21lbnQiLCJwYXJhbGxlbFJvdXRlcyIsImlzUm9vdExheW91dCIsImxlbmd0aCIsImN1cnJlbnRTZWdtZW50IiwicGFyYWxsZWxSb3V0ZUtleSIsImxhc3RTZWdtZW50IiwicGFyYWxsZWxSb3V0ZVBhdGNoIiwic2xpY2UiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js ***! + \*****************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n extractPathFromFlightRouterState: function() {\n return extractPathFromFlightRouterState;\n },\n computeChangedPath: function() {\n return computeChangedPath;\n }\n});\nconst _interceptionroutes = __webpack_require__(/*! ../../../server/future/helpers/interception-routes */ \"(app-pages-browser)/./node_modules/next/dist/server/future/helpers/interception-routes.js\");\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js\");\nconst removeLeadingSlash = (segment)=>{\n return segment[0] === \"/\" ? segment.slice(1) : segment;\n};\nconst segmentToPathname = (segment)=>{\n if (typeof segment === \"string\") {\n return segment;\n }\n return segment[1];\n};\nfunction normalizeSegments(segments) {\n return segments.reduce((acc, segment)=>{\n segment = removeLeadingSlash(segment);\n if (segment === \"\" || (0, _segment.isGroupSegment)(segment)) {\n return acc;\n }\n return acc + \"/\" + segment;\n }, \"\") || \"/\";\n}\nfunction extractPathFromFlightRouterState(flightRouterState) {\n const segment = Array.isArray(flightRouterState[0]) ? flightRouterState[0][1] : flightRouterState[0];\n if (segment === _segment.DEFAULT_SEGMENT_KEY || _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m))) return undefined;\n if (segment.startsWith(_segment.PAGE_SEGMENT_KEY)) return \"\";\n const segments = [\n segment\n ];\n var _flightRouterState_;\n const parallelRoutes = (_flightRouterState_ = flightRouterState[1]) != null ? _flightRouterState_ : {};\n const childrenPath = parallelRoutes.children ? extractPathFromFlightRouterState(parallelRoutes.children) : undefined;\n if (childrenPath !== undefined) {\n segments.push(childrenPath);\n } else {\n for (const [key, value] of Object.entries(parallelRoutes)){\n if (key === \"children\") continue;\n const childPath = extractPathFromFlightRouterState(value);\n if (childPath !== undefined) {\n segments.push(childPath);\n }\n }\n }\n return normalizeSegments(segments);\n}\nfunction computeChangedPathImpl(treeA, treeB) {\n const [segmentA, parallelRoutesA] = treeA;\n const [segmentB, parallelRoutesB] = treeB;\n const normalizedSegmentA = segmentToPathname(segmentA);\n const normalizedSegmentB = segmentToPathname(segmentB);\n if (_interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>normalizedSegmentA.startsWith(m) || normalizedSegmentB.startsWith(m))) {\n return \"\";\n }\n if (!(0, _matchsegments.matchSegment)(segmentA, segmentB)) {\n var _extractPathFromFlightRouterState;\n // once we find where the tree changed, we compute the rest of the path by traversing the tree\n return (_extractPathFromFlightRouterState = extractPathFromFlightRouterState(treeB)) != null ? _extractPathFromFlightRouterState : \"\";\n }\n for(const parallelRouterKey in parallelRoutesA){\n if (parallelRoutesB[parallelRouterKey]) {\n const changedPath = computeChangedPathImpl(parallelRoutesA[parallelRouterKey], parallelRoutesB[parallelRouterKey]);\n if (changedPath !== null) {\n return segmentToPathname(segmentB) + \"/\" + changedPath;\n }\n }\n }\n return null;\n}\nfunction computeChangedPath(treeA, treeB) {\n const changedPath = computeChangedPathImpl(treeA, treeB);\n if (changedPath == null || changedPath === \"/\") {\n return changedPath;\n }\n // lightweight normalization to remove route groups\n return normalizeSegments(changedPath.split(\"/\"));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=compute-changed-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY29tcHV0ZS1jaGFuZ2VkLXBhdGguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLGtDQUFrQztRQUM5QixPQUFPQTtJQUNYO0lBQ0FDLG9CQUFvQjtRQUNoQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxzQkFBc0JDLG1CQUFPQSxDQUFDLHFKQUFvRDtBQUN4RixNQUFNQyxXQUFXRCxtQkFBT0EsQ0FBQyx1R0FBNkI7QUFDdEQsTUFBTUUsaUJBQWlCRixtQkFBT0EsQ0FBQywyR0FBbUI7QUFDbEQsTUFBTUcscUJBQXFCLENBQUNDO0lBQ3hCLE9BQU9BLE9BQU8sQ0FBQyxFQUFFLEtBQUssTUFBTUEsUUFBUUMsS0FBSyxDQUFDLEtBQUtEO0FBQ25EO0FBQ0EsTUFBTUUsb0JBQW9CLENBQUNGO0lBQ3ZCLElBQUksT0FBT0EsWUFBWSxVQUFVO1FBQzdCLE9BQU9BO0lBQ1g7SUFDQSxPQUFPQSxPQUFPLENBQUMsRUFBRTtBQUNyQjtBQUNBLFNBQVNHLGtCQUFrQkMsUUFBUTtJQUMvQixPQUFPQSxTQUFTQyxNQUFNLENBQUMsQ0FBQ0MsS0FBS047UUFDekJBLFVBQVVELG1CQUFtQkM7UUFDN0IsSUFBSUEsWUFBWSxNQUFNLENBQUMsR0FBR0gsU0FBU1UsY0FBYyxFQUFFUCxVQUFVO1lBQ3pELE9BQU9NO1FBQ1g7UUFDQSxPQUFPQSxNQUFNLE1BQU1OO0lBQ3ZCLEdBQUcsT0FBTztBQUNkO0FBQ0EsU0FBU2IsaUNBQWlDcUIsaUJBQWlCO0lBQ3ZELE1BQU1SLFVBQVVTLE1BQU1DLE9BQU8sQ0FBQ0YsaUJBQWlCLENBQUMsRUFBRSxJQUFJQSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHQSxpQkFBaUIsQ0FBQyxFQUFFO0lBQ3BHLElBQUlSLFlBQVlILFNBQVNjLG1CQUFtQixJQUFJaEIsb0JBQW9CaUIsMEJBQTBCLENBQUNDLElBQUksQ0FBQyxDQUFDQyxJQUFJZCxRQUFRZSxVQUFVLENBQUNELEtBQUssT0FBT0U7SUFDeEksSUFBSWhCLFFBQVFlLFVBQVUsQ0FBQ2xCLFNBQVNvQixnQkFBZ0IsR0FBRyxPQUFPO0lBQzFELE1BQU1iLFdBQVc7UUFDYko7S0FDSDtJQUNELElBQUlrQjtJQUNKLE1BQU1DLGlCQUFpQixDQUFDRCxzQkFBc0JWLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxPQUFPVSxzQkFBc0IsQ0FBQztJQUNyRyxNQUFNRSxlQUFlRCxlQUFlRSxRQUFRLEdBQUdsQyxpQ0FBaUNnQyxlQUFlRSxRQUFRLElBQUlMO0lBQzNHLElBQUlJLGlCQUFpQkosV0FBVztRQUM1QlosU0FBU2tCLElBQUksQ0FBQ0Y7SUFDbEIsT0FBTztRQUNILEtBQUssTUFBTSxDQUFDRyxLQUFLdEMsTUFBTSxJQUFJSCxPQUFPMEMsT0FBTyxDQUFDTCxnQkFBZ0I7WUFDdEQsSUFBSUksUUFBUSxZQUFZO1lBQ3hCLE1BQU1FLFlBQVl0QyxpQ0FBaUNGO1lBQ25ELElBQUl3QyxjQUFjVCxXQUFXO2dCQUN6QlosU0FBU2tCLElBQUksQ0FBQ0c7WUFDbEI7UUFDSjtJQUNKO0lBQ0EsT0FBT3RCLGtCQUFrQkM7QUFDN0I7QUFDQSxTQUFTc0IsdUJBQXVCQyxLQUFLLEVBQUVDLEtBQUs7SUFDeEMsTUFBTSxDQUFDQyxVQUFVQyxnQkFBZ0IsR0FBR0g7SUFDcEMsTUFBTSxDQUFDSSxVQUFVQyxnQkFBZ0IsR0FBR0o7SUFDcEMsTUFBTUsscUJBQXFCL0Isa0JBQWtCMkI7SUFDN0MsTUFBTUsscUJBQXFCaEMsa0JBQWtCNkI7SUFDN0MsSUFBSXBDLG9CQUFvQmlCLDBCQUEwQixDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsSUFBSW1CLG1CQUFtQmxCLFVBQVUsQ0FBQ0QsTUFBTW9CLG1CQUFtQm5CLFVBQVUsQ0FBQ0QsS0FBSztRQUNoSSxPQUFPO0lBQ1g7SUFDQSxJQUFJLENBQUMsQ0FBQyxHQUFHaEIsZUFBZXFDLFlBQVksRUFBRU4sVUFBVUUsV0FBVztRQUN2RCxJQUFJSztRQUNKLDhGQUE4RjtRQUM5RixPQUFPLENBQUNBLG9DQUFvQ2pELGlDQUFpQ3lDLE1BQUssS0FBTSxPQUFPUSxvQ0FBb0M7SUFDdkk7SUFDQSxJQUFJLE1BQU1DLHFCQUFxQlAsZ0JBQWdCO1FBQzNDLElBQUlFLGVBQWUsQ0FBQ0ssa0JBQWtCLEVBQUU7WUFDcEMsTUFBTUMsY0FBY1osdUJBQXVCSSxlQUFlLENBQUNPLGtCQUFrQixFQUFFTCxlQUFlLENBQUNLLGtCQUFrQjtZQUNqSCxJQUFJQyxnQkFBZ0IsTUFBTTtnQkFDdEIsT0FBT3BDLGtCQUFrQjZCLFlBQVksTUFBTU87WUFDL0M7UUFDSjtJQUNKO0lBQ0EsT0FBTztBQUNYO0FBQ0EsU0FBU2xELG1CQUFtQnVDLEtBQUssRUFBRUMsS0FBSztJQUNwQyxNQUFNVSxjQUFjWix1QkFBdUJDLE9BQU9DO0lBQ2xELElBQUlVLGVBQWUsUUFBUUEsZ0JBQWdCLEtBQUs7UUFDNUMsT0FBT0E7SUFDWDtJQUNBLG1EQUFtRDtJQUNuRCxPQUFPbkMsa0JBQWtCbUMsWUFBWUMsS0FBSyxDQUFDO0FBQy9DO0FBRUEsSUFBSSxDQUFDLE9BQU92RCxRQUFRd0QsT0FBTyxLQUFLLGNBQWUsT0FBT3hELFFBQVF3RCxPQUFPLEtBQUssWUFBWXhELFFBQVF3RCxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU94RCxRQUFRd0QsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySzNELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXdELE9BQU8sRUFBRSxjQUFjO1FBQUV2RCxPQUFPO0lBQUs7SUFDbkVILE9BQU80RCxNQUFNLENBQUMxRCxRQUFRd0QsT0FBTyxFQUFFeEQ7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUXdELE9BQU87QUFDbEMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9jb21wdXRlLWNoYW5nZWQtcGF0aC5qcz82MDkyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGU6IG51bGwsXG4gICAgY29tcHV0ZUNoYW5nZWRQYXRoOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlO1xuICAgIH0sXG4gICAgY29tcHV0ZUNoYW5nZWRQYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNvbXB1dGVDaGFuZ2VkUGF0aDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcmNlcHRpb25yb3V0ZXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2VydmVyL2Z1dHVyZS9oZWxwZXJzL2ludGVyY2VwdGlvbi1yb3V0ZXNcIik7XG5jb25zdCBfc2VnbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zaGFyZWQvbGliL3NlZ21lbnRcIik7XG5jb25zdCBfbWF0Y2hzZWdtZW50cyA9IHJlcXVpcmUoXCIuLi9tYXRjaC1zZWdtZW50c1wiKTtcbmNvbnN0IHJlbW92ZUxlYWRpbmdTbGFzaCA9IChzZWdtZW50KT0+e1xuICAgIHJldHVybiBzZWdtZW50WzBdID09PSBcIi9cIiA/IHNlZ21lbnQuc2xpY2UoMSkgOiBzZWdtZW50O1xufTtcbmNvbnN0IHNlZ21lbnRUb1BhdGhuYW1lID0gKHNlZ21lbnQpPT57XG4gICAgaWYgKHR5cGVvZiBzZWdtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBzZWdtZW50O1xuICAgIH1cbiAgICByZXR1cm4gc2VnbWVudFsxXTtcbn07XG5mdW5jdGlvbiBub3JtYWxpemVTZWdtZW50cyhzZWdtZW50cykge1xuICAgIHJldHVybiBzZWdtZW50cy5yZWR1Y2UoKGFjYywgc2VnbWVudCk9PntcbiAgICAgICAgc2VnbWVudCA9IHJlbW92ZUxlYWRpbmdTbGFzaChzZWdtZW50KTtcbiAgICAgICAgaWYgKHNlZ21lbnQgPT09IFwiXCIgfHwgKDAsIF9zZWdtZW50LmlzR3JvdXBTZWdtZW50KShzZWdtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjICsgXCIvXCIgKyBzZWdtZW50O1xuICAgIH0sIFwiXCIpIHx8IFwiL1wiO1xufVxuZnVuY3Rpb24gZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUoZmxpZ2h0Um91dGVyU3RhdGUpIHtcbiAgICBjb25zdCBzZWdtZW50ID0gQXJyYXkuaXNBcnJheShmbGlnaHRSb3V0ZXJTdGF0ZVswXSkgPyBmbGlnaHRSb3V0ZXJTdGF0ZVswXVsxXSA6IGZsaWdodFJvdXRlclN0YXRlWzBdO1xuICAgIGlmIChzZWdtZW50ID09PSBfc2VnbWVudC5ERUZBVUxUX1NFR01FTlRfS0VZIHx8IF9pbnRlcmNlcHRpb25yb3V0ZXMuSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuc29tZSgobSk9PnNlZ21lbnQuc3RhcnRzV2l0aChtKSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHNlZ21lbnQuc3RhcnRzV2l0aChfc2VnbWVudC5QQUdFX1NFR01FTlRfS0VZKSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBbXG4gICAgICAgIHNlZ21lbnRcbiAgICBdO1xuICAgIHZhciBfZmxpZ2h0Um91dGVyU3RhdGVfO1xuICAgIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gKF9mbGlnaHRSb3V0ZXJTdGF0ZV8gPSBmbGlnaHRSb3V0ZXJTdGF0ZVsxXSkgIT0gbnVsbCA/IF9mbGlnaHRSb3V0ZXJTdGF0ZV8gOiB7fTtcbiAgICBjb25zdCBjaGlsZHJlblBhdGggPSBwYXJhbGxlbFJvdXRlcy5jaGlsZHJlbiA/IGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKHBhcmFsbGVsUm91dGVzLmNoaWxkcmVuKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoY2hpbGRyZW5QYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VnbWVudHMucHVzaChjaGlsZHJlblBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFsbGVsUm91dGVzKSl7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBcImNoaWxkcmVuXCIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGNoaWxkUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VnbWVudHMucHVzaChjaGlsZFBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub3JtYWxpemVTZWdtZW50cyhzZWdtZW50cyk7XG59XG5mdW5jdGlvbiBjb21wdXRlQ2hhbmdlZFBhdGhJbXBsKHRyZWVBLCB0cmVlQikge1xuICAgIGNvbnN0IFtzZWdtZW50QSwgcGFyYWxsZWxSb3V0ZXNBXSA9IHRyZWVBO1xuICAgIGNvbnN0IFtzZWdtZW50QiwgcGFyYWxsZWxSb3V0ZXNCXSA9IHRyZWVCO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWdtZW50QSA9IHNlZ21lbnRUb1BhdGhuYW1lKHNlZ21lbnRBKTtcbiAgICBjb25zdCBub3JtYWxpemVkU2VnbWVudEIgPSBzZWdtZW50VG9QYXRobmFtZShzZWdtZW50Qik7XG4gICAgaWYgKF9pbnRlcmNlcHRpb25yb3V0ZXMuSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuc29tZSgobSk9Pm5vcm1hbGl6ZWRTZWdtZW50QS5zdGFydHNXaXRoKG0pIHx8IG5vcm1hbGl6ZWRTZWdtZW50Qi5zdGFydHNXaXRoKG0pKSkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgaWYgKCEoMCwgX21hdGNoc2VnbWVudHMubWF0Y2hTZWdtZW50KShzZWdtZW50QSwgc2VnbWVudEIpKSB7XG4gICAgICAgIHZhciBfZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGU7XG4gICAgICAgIC8vIG9uY2Ugd2UgZmluZCB3aGVyZSB0aGUgdHJlZSBjaGFuZ2VkLCB3ZSBjb21wdXRlIHRoZSByZXN0IG9mIHRoZSBwYXRoIGJ5IHRyYXZlcnNpbmcgdGhlIHRyZWVcbiAgICAgICAgcmV0dXJuIChfZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUgPSBleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZSh0cmVlQikpICE9IG51bGwgPyBfZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUgOiBcIlwiO1xuICAgIH1cbiAgICBmb3IoY29uc3QgcGFyYWxsZWxSb3V0ZXJLZXkgaW4gcGFyYWxsZWxSb3V0ZXNBKXtcbiAgICAgICAgaWYgKHBhcmFsbGVsUm91dGVzQltwYXJhbGxlbFJvdXRlcktleV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRQYXRoID0gY29tcHV0ZUNoYW5nZWRQYXRoSW1wbChwYXJhbGxlbFJvdXRlc0FbcGFyYWxsZWxSb3V0ZXJLZXldLCBwYXJhbGxlbFJvdXRlc0JbcGFyYWxsZWxSb3V0ZXJLZXldKTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VkUGF0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50VG9QYXRobmFtZShzZWdtZW50QikgKyBcIi9cIiArIGNoYW5nZWRQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY29tcHV0ZUNoYW5nZWRQYXRoKHRyZWVBLCB0cmVlQikge1xuICAgIGNvbnN0IGNoYW5nZWRQYXRoID0gY29tcHV0ZUNoYW5nZWRQYXRoSW1wbCh0cmVlQSwgdHJlZUIpO1xuICAgIGlmIChjaGFuZ2VkUGF0aCA9PSBudWxsIHx8IGNoYW5nZWRQYXRoID09PSBcIi9cIikge1xuICAgICAgICByZXR1cm4gY2hhbmdlZFBhdGg7XG4gICAgfVxuICAgIC8vIGxpZ2h0d2VpZ2h0IG5vcm1hbGl6YXRpb24gdG8gcmVtb3ZlIHJvdXRlIGdyb3Vwc1xuICAgIHJldHVybiBub3JtYWxpemVTZWdtZW50cyhjaGFuZ2VkUGF0aC5zcGxpdChcIi9cIikpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wdXRlLWNoYW5nZWQtcGF0aC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZSIsImNvbXB1dGVDaGFuZ2VkUGF0aCIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9pbnRlcmNlcHRpb25yb3V0ZXMiLCJyZXF1aXJlIiwiX3NlZ21lbnQiLCJfbWF0Y2hzZWdtZW50cyIsInJlbW92ZUxlYWRpbmdTbGFzaCIsInNlZ21lbnQiLCJzbGljZSIsInNlZ21lbnRUb1BhdGhuYW1lIiwibm9ybWFsaXplU2VnbWVudHMiLCJzZWdtZW50cyIsInJlZHVjZSIsImFjYyIsImlzR3JvdXBTZWdtZW50IiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJBcnJheSIsImlzQXJyYXkiLCJERUZBVUxUX1NFR01FTlRfS0VZIiwiSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMiLCJzb21lIiwibSIsInN0YXJ0c1dpdGgiLCJ1bmRlZmluZWQiLCJQQUdFX1NFR01FTlRfS0VZIiwiX2ZsaWdodFJvdXRlclN0YXRlXyIsInBhcmFsbGVsUm91dGVzIiwiY2hpbGRyZW5QYXRoIiwiY2hpbGRyZW4iLCJwdXNoIiwia2V5IiwiZW50cmllcyIsImNoaWxkUGF0aCIsImNvbXB1dGVDaGFuZ2VkUGF0aEltcGwiLCJ0cmVlQSIsInRyZWVCIiwic2VnbWVudEEiLCJwYXJhbGxlbFJvdXRlc0EiLCJzZWdtZW50QiIsInBhcmFsbGVsUm91dGVzQiIsIm5vcm1hbGl6ZWRTZWdtZW50QSIsIm5vcm1hbGl6ZWRTZWdtZW50QiIsIm1hdGNoU2VnbWVudCIsIl9leHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZSIsInBhcmFsbGVsUm91dGVyS2V5IiwiY2hhbmdlZFBhdGgiLCJzcGxpdCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js ***! + \*****************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createHrefFromUrl\", ({\n enumerable: true,\n get: function() {\n return createHrefFromUrl;\n }\n}));\nfunction createHrefFromUrl(url, includeHash) {\n if (includeHash === void 0) includeHash = true;\n return url.pathname + url.search + (includeHash ? url.hash : \"\");\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=create-href-from-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY3JlYXRlLWhyZWYtZnJvbS11cmwuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHFEQUFvRDtJQUNoREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLGtCQUFrQkMsR0FBRyxFQUFFQyxXQUFXO0lBQ3ZDLElBQUlBLGdCQUFnQixLQUFLLEdBQUdBLGNBQWM7SUFDMUMsT0FBT0QsSUFBSUUsUUFBUSxHQUFHRixJQUFJRyxNQUFNLEdBQUlGLENBQUFBLGNBQWNELElBQUlJLElBQUksR0FBRyxFQUFDO0FBQ2xFO0FBRUEsSUFBSSxDQUFDLE9BQU9ULFFBQVFVLE9BQU8sS0FBSyxjQUFlLE9BQU9WLFFBQVFVLE9BQU8sS0FBSyxZQUFZVixRQUFRVSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9WLFFBQVFVLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktiLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUVUsT0FBTyxFQUFFLGNBQWM7UUFBRVQsT0FBTztJQUFLO0lBQ25FSCxPQUFPYyxNQUFNLENBQUNaLFFBQVFVLE9BQU8sRUFBRVY7SUFDL0JhLE9BQU9iLE9BQU8sR0FBR0EsUUFBUVUsT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1ocmVmLWZyb20tdXJsLmpzP2E3NzQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVIcmVmRnJvbVVybFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlSHJlZkZyb21Vcmw7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBjcmVhdGVIcmVmRnJvbVVybCh1cmwsIGluY2x1ZGVIYXNoKSB7XG4gICAgaWYgKGluY2x1ZGVIYXNoID09PSB2b2lkIDApIGluY2x1ZGVIYXNoID0gdHJ1ZTtcbiAgICByZXR1cm4gdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCArIChpbmNsdWRlSGFzaCA/IHVybC5oYXNoIDogXCJcIik7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZS1ocmVmLWZyb20tdXJsLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJjcmVhdGVIcmVmRnJvbVVybCIsInVybCIsImluY2x1ZGVIYXNoIiwicGF0aG5hbWUiLCJzZWFyY2giLCJoYXNoIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js ***! + \************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createInitialRouterState\", ({\n enumerable: true,\n get: function() {\n return createInitialRouterState;\n }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ./create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _computechangedpath = __webpack_require__(/*! ./compute-changed-path */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nfunction createInitialRouterState(param) {\n let { buildId, initialTree, initialSeedData, initialCanonicalUrl, initialParallelRoutes, isServer, location, initialHead } = param;\n const rsc = initialSeedData[2];\n const cache = {\n lazyData: null,\n rsc: rsc,\n prefetchRsc: null,\n // The cache gets seeded during the first render. `initialParallelRoutes` ensures the cache from the first render is there during the second render.\n parallelRoutes: isServer ? new Map() : initialParallelRoutes\n };\n // When the cache hasn't been seeded yet we fill the cache with the head.\n if (initialParallelRoutes === null || initialParallelRoutes.size === 0) {\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(cache, undefined, initialTree, initialSeedData, initialHead);\n }\n var _ref;\n return {\n buildId,\n tree: initialTree,\n cache,\n prefetchCache: new Map(),\n pushRef: {\n pendingPush: false,\n mpaNavigation: false,\n // First render needs to preserve the previous window.history.state\n // to avoid it being overwritten on navigation back/forward with MPA Navigation.\n preserveCustomHistoryState: true\n },\n focusAndScrollRef: {\n apply: false,\n onlyHashChange: false,\n hashFragment: null,\n segmentPaths: []\n },\n canonicalUrl: // This is safe to do as canonicalUrl can't be rendered, it's only used to control the history updates in the useEffect further down in this file.\n location ? (0, _createhreffromurl.createHrefFromUrl)(location) : initialCanonicalUrl,\n nextUrl: (_ref = (0, _computechangedpath.extractPathFromFlightRouterState)(initialTree) || (location == null ? void 0 : location.pathname)) != null ? _ref : null\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=create-initial-router-state.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY3JlYXRlLWluaXRpYWwtcm91dGVyLXN0YXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw0REFBMkQ7SUFDdkRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxxQkFBcUJDLG1CQUFPQSxDQUFDLHFJQUF3QjtBQUMzRCxNQUFNQyxpQ0FBaUNELG1CQUFPQSxDQUFDLG1LQUF1QztBQUN0RixNQUFNRSxzQkFBc0JGLG1CQUFPQSxDQUFDLHFJQUF3QjtBQUM1RCxTQUFTRix5QkFBeUJLLEtBQUs7SUFDbkMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsRUFBRUMsZUFBZSxFQUFFQyxtQkFBbUIsRUFBRUMscUJBQXFCLEVBQUVDLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyxXQUFXLEVBQUUsR0FBR1I7SUFDN0gsTUFBTVMsTUFBTU4sZUFBZSxDQUFDLEVBQUU7SUFDOUIsTUFBTU8sUUFBUTtRQUNWQyxVQUFVO1FBQ1ZGLEtBQUtBO1FBQ0xHLGFBQWE7UUFDYixvSkFBb0o7UUFDcEpDLGdCQUFnQlAsV0FBVyxJQUFJUSxRQUFRVDtJQUMzQztJQUNBLHlFQUF5RTtJQUN6RSxJQUFJQSwwQkFBMEIsUUFBUUEsc0JBQXNCVSxJQUFJLEtBQUssR0FBRztRQUNuRSxJQUFHakIsK0JBQStCa0IsNkJBQTZCLEVBQUVOLE9BQU9PLFdBQVdmLGFBQWFDLGlCQUFpQks7SUFDdEg7SUFDQSxJQUNBVTtJQUNBLE9BQU87UUFDSGpCO1FBQ0FrQixNQUFNakI7UUFDTlE7UUFDQVUsZUFBZSxJQUFJTjtRQUNuQk8sU0FBUztZQUNMQyxhQUFhO1lBQ2JDLGVBQWU7WUFDZixtRUFBbUU7WUFDbkUsZ0ZBQWdGO1lBQ2hGQyw0QkFBNEI7UUFDaEM7UUFDQUMsbUJBQW1CO1lBQ2ZDLE9BQU87WUFDUEMsZ0JBQWdCO1lBQ2hCQyxjQUFjO1lBQ2RDLGNBQWMsRUFBRTtRQUNwQjtRQUNBQyxjQUNBLGtKQUFrSjtRQUNsSnZCLFdBQVcsQ0FBQyxHQUFHWCxtQkFBbUJtQyxpQkFBaUIsRUFBRXhCLFlBQVlIO1FBQ2pFNEIsU0FBUyxDQUFDZCxPQUFPLENBQUMsR0FBR25CLG9CQUFvQmtDLGdDQUFnQyxFQUFFL0IsZ0JBQWlCSyxDQUFBQSxZQUFZLE9BQU8sS0FBSyxJQUFJQSxTQUFTMkIsUUFBUSxNQUFNLE9BQU9oQixPQUFPO0lBQ2pLO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBTzNCLFFBQVE0QyxPQUFPLEtBQUssY0FBZSxPQUFPNUMsUUFBUTRDLE9BQU8sS0FBSyxZQUFZNUMsUUFBUTRDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzVDLFFBQVE0QyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLL0MsT0FBT0MsY0FBYyxDQUFDQyxRQUFRNEMsT0FBTyxFQUFFLGNBQWM7UUFBRTNDLE9BQU87SUFBSztJQUNuRUgsT0FBT2dELE1BQU0sQ0FBQzlDLFFBQVE0QyxPQUFPLEVBQUU1QztJQUMvQitDLE9BQU8vQyxPQUFPLEdBQUdBLFFBQVE0QyxPQUFPO0FBQ2xDLEVBRUEsdURBQXVEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY3JlYXRlLWluaXRpYWwtcm91dGVyLXN0YXRlLmpzP2RjYjQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbml0aWFsUm91dGVyU3RhdGVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxSb3V0ZXJTdGF0ZTtcbiAgICB9XG59KTtcbmNvbnN0IF9jcmVhdGVocmVmZnJvbXVybCA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1ocmVmLWZyb20tdXJsXCIpO1xuY29uc3QgX2ZpbGxsYXp5aXRlbXN0aWxsbGVhZndpdGhoZWFkID0gcmVxdWlyZShcIi4vZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWRcIik7XG5jb25zdCBfY29tcHV0ZWNoYW5nZWRwYXRoID0gcmVxdWlyZShcIi4vY29tcHV0ZS1jaGFuZ2VkLXBhdGhcIik7XG5mdW5jdGlvbiBjcmVhdGVJbml0aWFsUm91dGVyU3RhdGUocGFyYW0pIHtcbiAgICBsZXQgeyBidWlsZElkLCBpbml0aWFsVHJlZSwgaW5pdGlhbFNlZWREYXRhLCBpbml0aWFsQ2Fub25pY2FsVXJsLCBpbml0aWFsUGFyYWxsZWxSb3V0ZXMsIGlzU2VydmVyLCBsb2NhdGlvbiwgaW5pdGlhbEhlYWQgfSA9IHBhcmFtO1xuICAgIGNvbnN0IHJzYyA9IGluaXRpYWxTZWVkRGF0YVsyXTtcbiAgICBjb25zdCBjYWNoZSA9IHtcbiAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgIHJzYzogcnNjLFxuICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgLy8gVGhlIGNhY2hlIGdldHMgc2VlZGVkIGR1cmluZyB0aGUgZmlyc3QgcmVuZGVyLiBgaW5pdGlhbFBhcmFsbGVsUm91dGVzYCBlbnN1cmVzIHRoZSBjYWNoZSBmcm9tIHRoZSBmaXJzdCByZW5kZXIgaXMgdGhlcmUgZHVyaW5nIHRoZSBzZWNvbmQgcmVuZGVyLlxuICAgICAgICBwYXJhbGxlbFJvdXRlczogaXNTZXJ2ZXIgPyBuZXcgTWFwKCkgOiBpbml0aWFsUGFyYWxsZWxSb3V0ZXNcbiAgICB9O1xuICAgIC8vIFdoZW4gdGhlIGNhY2hlIGhhc24ndCBiZWVuIHNlZWRlZCB5ZXQgd2UgZmlsbCB0aGUgY2FjaGUgd2l0aCB0aGUgaGVhZC5cbiAgICBpZiAoaW5pdGlhbFBhcmFsbGVsUm91dGVzID09PSBudWxsIHx8IGluaXRpYWxQYXJhbGxlbFJvdXRlcy5zaXplID09PSAwKSB7XG4gICAgICAgICgwLCBfZmlsbGxhenlpdGVtc3RpbGxsZWFmd2l0aGhlYWQuZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQpKGNhY2hlLCB1bmRlZmluZWQsIGluaXRpYWxUcmVlLCBpbml0aWFsU2VlZERhdGEsIGluaXRpYWxIZWFkKTtcbiAgICB9XG4gICAgdmFyIC8vIHRoZSB8fCBvcGVyYXRvciBpcyBpbnRlbnRpb25hbCwgdGhlIHBhdGhuYW1lIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmdcbiAgICBfcmVmO1xuICAgIHJldHVybiB7XG4gICAgICAgIGJ1aWxkSWQsXG4gICAgICAgIHRyZWU6IGluaXRpYWxUcmVlLFxuICAgICAgICBjYWNoZSxcbiAgICAgICAgcHJlZmV0Y2hDYWNoZTogbmV3IE1hcCgpLFxuICAgICAgICBwdXNoUmVmOiB7XG4gICAgICAgICAgICBwZW5kaW5nUHVzaDogZmFsc2UsXG4gICAgICAgICAgICBtcGFOYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIEZpcnN0IHJlbmRlciBuZWVkcyB0byBwcmVzZXJ2ZSB0aGUgcHJldmlvdXMgd2luZG93Lmhpc3Rvcnkuc3RhdGVcbiAgICAgICAgICAgIC8vIHRvIGF2b2lkIGl0IGJlaW5nIG92ZXJ3cml0dGVuIG9uIG5hdmlnYXRpb24gYmFjay9mb3J3YXJkIHdpdGggTVBBIE5hdmlnYXRpb24uXG4gICAgICAgICAgICBwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBmb2N1c0FuZFNjcm9sbFJlZjoge1xuICAgICAgICAgICAgYXBwbHk6IGZhbHNlLFxuICAgICAgICAgICAgb25seUhhc2hDaGFuZ2U6IGZhbHNlLFxuICAgICAgICAgICAgaGFzaEZyYWdtZW50OiBudWxsLFxuICAgICAgICAgICAgc2VnbWVudFBhdGhzOiBbXVxuICAgICAgICB9LFxuICAgICAgICBjYW5vbmljYWxVcmw6IC8vIGxvY2F0aW9uLmhyZWYgaXMgcmVhZCBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgY2Fub25pY2FsVXJsIGluIHRoZSBicm93c2VyXG4gICAgICAgIC8vIFRoaXMgaXMgc2FmZSB0byBkbyBhcyBjYW5vbmljYWxVcmwgY2FuJ3QgYmUgcmVuZGVyZWQsIGl0J3Mgb25seSB1c2VkIHRvIGNvbnRyb2wgdGhlIGhpc3RvcnkgdXBkYXRlcyBpbiB0aGUgdXNlRWZmZWN0IGZ1cnRoZXIgZG93biBpbiB0aGlzIGZpbGUuXG4gICAgICAgIGxvY2F0aW9uID8gKDAsIF9jcmVhdGVocmVmZnJvbXVybC5jcmVhdGVIcmVmRnJvbVVybCkobG9jYXRpb24pIDogaW5pdGlhbENhbm9uaWNhbFVybCxcbiAgICAgICAgbmV4dFVybDogKF9yZWYgPSAoMCwgX2NvbXB1dGVjaGFuZ2VkcGF0aC5leHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZSkoaW5pdGlhbFRyZWUpIHx8IChsb2NhdGlvbiA9PSBudWxsID8gdm9pZCAwIDogbG9jYXRpb24ucGF0aG5hbWUpKSAhPSBudWxsID8gX3JlZiA6IG51bGxcbiAgICB9O1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGUtaW5pdGlhbC1yb3V0ZXItc3RhdGUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImNyZWF0ZUluaXRpYWxSb3V0ZXJTdGF0ZSIsIl9jcmVhdGVocmVmZnJvbXVybCIsInJlcXVpcmUiLCJfZmlsbGxhenlpdGVtc3RpbGxsZWFmd2l0aGhlYWQiLCJfY29tcHV0ZWNoYW5nZWRwYXRoIiwicGFyYW0iLCJidWlsZElkIiwiaW5pdGlhbFRyZWUiLCJpbml0aWFsU2VlZERhdGEiLCJpbml0aWFsQ2Fub25pY2FsVXJsIiwiaW5pdGlhbFBhcmFsbGVsUm91dGVzIiwiaXNTZXJ2ZXIiLCJsb2NhdGlvbiIsImluaXRpYWxIZWFkIiwicnNjIiwiY2FjaGUiLCJsYXp5RGF0YSIsInByZWZldGNoUnNjIiwicGFyYWxsZWxSb3V0ZXMiLCJNYXAiLCJzaXplIiwiZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQiLCJ1bmRlZmluZWQiLCJfcmVmIiwidHJlZSIsInByZWZldGNoQ2FjaGUiLCJwdXNoUmVmIiwicGVuZGluZ1B1c2giLCJtcGFOYXZpZ2F0aW9uIiwicHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUiLCJmb2N1c0FuZFNjcm9sbFJlZiIsImFwcGx5Iiwib25seUhhc2hDaGFuZ2UiLCJoYXNoRnJhZ21lbnQiLCJzZWdtZW50UGF0aHMiLCJjYW5vbmljYWxVcmwiLCJjcmVhdGVIcmVmRnJvbVVybCIsIm5leHRVcmwiLCJleHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZSIsInBhdGhuYW1lIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js ***! + \********************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createRouterCacheKey\", ({\n enumerable: true,\n get: function() {\n return createRouterCacheKey;\n }\n}));\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nfunction createRouterCacheKey(segment, withoutSearchParameters) {\n if (withoutSearchParameters === void 0) withoutSearchParameters = false;\n // if the segment is an array, it means it's a dynamic segment\n // for example, ['lang', 'en', 'd']. We need to convert it to a string to store it as a cache node key.\n if (Array.isArray(segment)) {\n return (segment[0] + \"|\" + segment[1] + \"|\" + segment[2]).toLowerCase();\n }\n // Page segments might have search parameters, ie __PAGE__?foo=bar\n // When `withoutSearchParameters` is true, we only want to return the page segment\n if (withoutSearchParameters && segment.startsWith(_segment.PAGE_SEGMENT_KEY)) {\n return _segment.PAGE_SEGMENT_KEY;\n }\n return segment;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=create-router-cache-key.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY3JlYXRlLXJvdXRlci1jYWNoZS1rZXkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHdEQUF1RDtJQUNuREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLFdBQVdDLG1CQUFPQSxDQUFDLHVHQUE2QjtBQUN0RCxTQUFTRixxQkFBcUJHLE9BQU8sRUFBRUMsdUJBQXVCO0lBQzFELElBQUlBLDRCQUE0QixLQUFLLEdBQUdBLDBCQUEwQjtJQUNsRSw4REFBOEQ7SUFDOUQsdUdBQXVHO0lBQ3ZHLElBQUlDLE1BQU1DLE9BQU8sQ0FBQ0gsVUFBVTtRQUN4QixPQUFPLENBQUNBLE9BQU8sQ0FBQyxFQUFFLEdBQUcsTUFBTUEsT0FBTyxDQUFDLEVBQUUsR0FBRyxNQUFNQSxPQUFPLENBQUMsRUFBRSxFQUFFSSxXQUFXO0lBQ3pFO0lBQ0Esa0VBQWtFO0lBQ2xFLGtGQUFrRjtJQUNsRixJQUFJSCwyQkFBMkJELFFBQVFLLFVBQVUsQ0FBQ1AsU0FBU1EsZ0JBQWdCLEdBQUc7UUFDMUUsT0FBT1IsU0FBU1EsZ0JBQWdCO0lBQ3BDO0lBQ0EsT0FBT047QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPUCxRQUFRYyxPQUFPLEtBQUssY0FBZSxPQUFPZCxRQUFRYyxPQUFPLEtBQUssWUFBWWQsUUFBUWMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPZCxRQUFRYyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLakIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRYyxPQUFPLEVBQUUsY0FBYztRQUFFYixPQUFPO0lBQUs7SUFDbkVILE9BQU9rQixNQUFNLENBQUNoQixRQUFRYyxPQUFPLEVBQUVkO0lBQy9CaUIsT0FBT2pCLE9BQU8sR0FBR0EsUUFBUWMsT0FBTztBQUNsQyxFQUVBLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5LmpzP2ZlYzIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSb3V0ZXJDYWNoZUtleVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUm91dGVyQ2FjaGVLZXk7XG4gICAgfVxufSk7XG5jb25zdCBfc2VnbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zaGFyZWQvbGliL3NlZ21lbnRcIik7XG5mdW5jdGlvbiBjcmVhdGVSb3V0ZXJDYWNoZUtleShzZWdtZW50LCB3aXRob3V0U2VhcmNoUGFyYW1ldGVycykge1xuICAgIGlmICh3aXRob3V0U2VhcmNoUGFyYW1ldGVycyA9PT0gdm9pZCAwKSB3aXRob3V0U2VhcmNoUGFyYW1ldGVycyA9IGZhbHNlO1xuICAgIC8vIGlmIHRoZSBzZWdtZW50IGlzIGFuIGFycmF5LCBpdCBtZWFucyBpdCdzIGEgZHluYW1pYyBzZWdtZW50XG4gICAgLy8gZm9yIGV4YW1wbGUsIFsnbGFuZycsICdlbicsICdkJ10uIFdlIG5lZWQgdG8gY29udmVydCBpdCB0byBhIHN0cmluZyB0byBzdG9yZSBpdCBhcyBhIGNhY2hlIG5vZGUga2V5LlxuICAgIGlmIChBcnJheS5pc0FycmF5KHNlZ21lbnQpKSB7XG4gICAgICAgIHJldHVybiAoc2VnbWVudFswXSArIFwifFwiICsgc2VnbWVudFsxXSArIFwifFwiICsgc2VnbWVudFsyXSkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgLy8gUGFnZSBzZWdtZW50cyBtaWdodCBoYXZlIHNlYXJjaCBwYXJhbWV0ZXJzLCBpZSBfX1BBR0VfXz9mb289YmFyXG4gICAgLy8gV2hlbiBgd2l0aG91dFNlYXJjaFBhcmFtZXRlcnNgIGlzIHRydWUsIHdlIG9ubHkgd2FudCB0byByZXR1cm4gdGhlIHBhZ2Ugc2VnbWVudFxuICAgIGlmICh3aXRob3V0U2VhcmNoUGFyYW1ldGVycyAmJiBzZWdtZW50LnN0YXJ0c1dpdGgoX3NlZ21lbnQuUEFHRV9TRUdNRU5UX0tFWSkpIHtcbiAgICAgICAgcmV0dXJuIF9zZWdtZW50LlBBR0VfU0VHTUVOVF9LRVk7XG4gICAgfVxuICAgIHJldHVybiBzZWdtZW50O1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGUtcm91dGVyLWNhY2hlLWtleS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiY3JlYXRlUm91dGVyQ2FjaGVLZXkiLCJfc2VnbWVudCIsInJlcXVpcmUiLCJzZWdtZW50Iiwid2l0aG91dFNlYXJjaFBhcmFtZXRlcnMiLCJBcnJheSIsImlzQXJyYXkiLCJ0b0xvd2VyQ2FzZSIsInN0YXJ0c1dpdGgiLCJQQUdFX1NFR01FTlRfS0VZIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js": +/*!******************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js ***! + \******************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fetchServerResponse\", ({\n enumerable: true,\n get: function() {\n return fetchServerResponse;\n }\n}));\nconst _approuterheaders = __webpack_require__(/*! ../app-router-headers */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _approuter = __webpack_require__(/*! ../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _appcallserver = __webpack_require__(/*! ../../app-call-server */ \"(app-pages-browser)/./node_modules/next/dist/client/app-call-server.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _hash = __webpack_require__(/*! ../../../shared/lib/hash */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/hash.js\");\n// @ts-ignore\n// eslint-disable-next-line import/no-extraneous-dependencies\n// import { createFromFetch } from 'react-server-dom-webpack/client'\nconst { createFromFetch } = false ? 0 : __webpack_require__(/*! react-server-dom-webpack/client */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.js\");\nfunction doMpaNavigation(url) {\n return [\n (0, _approuter.urlToUrlWithoutFlightMarker)(url).toString(),\n undefined\n ];\n}\nasync function fetchServerResponse(url, flightRouterState, nextUrl, currentBuildId, prefetchKind) {\n const headers = {\n // Enable flight response\n [_approuterheaders.RSC_HEADER]: \"1\",\n // Provide the current router state\n [_approuterheaders.NEXT_ROUTER_STATE_TREE]: encodeURIComponent(JSON.stringify(flightRouterState))\n };\n /**\n * Three cases:\n * - `prefetchKind` is `undefined`, it means it's a normal navigation, so we want to prefetch the page data fully\n * - `prefetchKind` is `full` - we want to prefetch the whole page so same as above\n * - `prefetchKind` is `auto` - if the page is dynamic, prefetch the page data partially, if static prefetch the page data fully\n */ if (prefetchKind === _routerreducertypes.PrefetchKind.AUTO) {\n headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = \"1\";\n }\n if (nextUrl) {\n headers[_approuterheaders.NEXT_URL] = nextUrl;\n }\n const uniqueCacheQuery = (0, _hash.hexHash)([\n headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] || \"0\",\n headers[_approuterheaders.NEXT_ROUTER_STATE_TREE],\n headers[_approuterheaders.NEXT_URL]\n ].join(\",\"));\n try {\n let fetchUrl = new URL(url);\n if (false) {}\n // Add unique cache query to avoid caching conflicts on CDN which don't respect to Vary header\n fetchUrl.searchParams.set(_approuterheaders.NEXT_RSC_UNION_QUERY, uniqueCacheQuery);\n const res = await fetch(fetchUrl, {\n // Backwards compat for older browsers. `same-origin` is the default in modern browsers.\n credentials: \"same-origin\",\n headers\n });\n const responseUrl = (0, _approuter.urlToUrlWithoutFlightMarker)(res.url);\n const canonicalUrl = res.redirected ? responseUrl : undefined;\n const contentType = res.headers.get(\"content-type\") || \"\";\n const postponed = !!res.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER);\n let isFlightResponse = contentType === _approuterheaders.RSC_CONTENT_TYPE_HEADER;\n if (false) {}\n // If fetch returns something different than flight response handle it like a mpa navigation\n // If the fetch was not 200, we also handle it like a mpa navigation\n if (!isFlightResponse || !res.ok) {\n // in case the original URL came with a hash, preserve it before redirecting to the new URL\n if (url.hash) {\n responseUrl.hash = url.hash;\n }\n return doMpaNavigation(responseUrl.toString());\n }\n // Handle the `fetch` readable stream that can be unwrapped by `React.use`.\n const [buildId, flightData] = await createFromFetch(Promise.resolve(res), {\n callServer: _appcallserver.callServer\n });\n if (currentBuildId !== buildId) {\n return doMpaNavigation(res.url);\n }\n return [\n flightData,\n canonicalUrl,\n postponed\n ];\n } catch (err) {\n console.error(\"Failed to fetch RSC payload for \" + url + \". Falling back to browser navigation.\", err);\n // If fetch fails handle it like a mpa navigation\n // TODO-APP: Add a test for the case where a CORS request fails, e.g. external url redirect coming from the response.\n // See https://github.com/vercel/next.js/issues/43605#issuecomment-1451617521 for a reproduction.\n return [\n url.toString(),\n undefined\n ];\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fetch-server-response.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmV0Y2gtc2VydmVyLXJlc3BvbnNlLmpzIiwibWFwcGluZ3MiOiJxREFFYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsdURBQXNEO0lBQ2xESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsb0JBQW9CQyxtQkFBT0EsQ0FBQyxtSEFBdUI7QUFDekQsTUFBTUMsYUFBYUQsbUJBQU9BLENBQUMsbUdBQWU7QUFDMUMsTUFBTUUsaUJBQWlCRixtQkFBT0EsQ0FBQyxxR0FBdUI7QUFDdEQsTUFBTUcsc0JBQXNCSCxtQkFBT0EsQ0FBQyxxSUFBd0I7QUFDNUQsTUFBTUksUUFBUUosbUJBQU9BLENBQUMsaUdBQTBCO0FBQ2hELGFBQWE7QUFDYiw2REFBNkQ7QUFDN0Qsb0VBQW9FO0FBQ3BFLE1BQU0sRUFBRUssZUFBZSxFQUFFLEdBQUcsTUFBMEIsR0FBR0wsQ0FBK0MsR0FBR0EsbUJBQU9BLENBQUMsaUlBQWlDO0FBQ3BKLFNBQVNTLGdCQUFnQkMsR0FBRztJQUN4QixPQUFPO1FBQ0YsSUFBR1QsV0FBV1UsMkJBQTJCLEVBQUVELEtBQUtFLFFBQVE7UUFDekRDO0tBQ0g7QUFDTDtBQUNBLGVBQWVmLG9CQUFvQlksR0FBRyxFQUFFSSxpQkFBaUIsRUFBRUMsT0FBTyxFQUFFQyxjQUFjLEVBQUVDLFlBQVk7SUFDNUYsTUFBTUMsVUFBVTtRQUNaLHlCQUF5QjtRQUN6QixDQUFDbkIsa0JBQWtCb0IsVUFBVSxDQUFDLEVBQUU7UUFDaEMsbUNBQW1DO1FBQ25DLENBQUNwQixrQkFBa0JxQixzQkFBc0IsQ0FBQyxFQUFFQyxtQkFBbUJDLEtBQUtDLFNBQVMsQ0FBQ1Q7SUFDbEY7SUFDQTs7Ozs7R0FLRCxHQUFHLElBQUlHLGlCQUFpQmQsb0JBQW9CcUIsWUFBWSxDQUFDQyxJQUFJLEVBQUU7UUFDMURQLE9BQU8sQ0FBQ25CLGtCQUFrQjJCLDJCQUEyQixDQUFDLEdBQUc7SUFDN0Q7SUFDQSxJQUFJWCxTQUFTO1FBQ1RHLE9BQU8sQ0FBQ25CLGtCQUFrQjRCLFFBQVEsQ0FBQyxHQUFHWjtJQUMxQztJQUNBLE1BQU1hLG1CQUFtQixDQUFDLEdBQUd4QixNQUFNeUIsT0FBTyxFQUFFO1FBQ3hDWCxPQUFPLENBQUNuQixrQkFBa0IyQiwyQkFBMkIsQ0FBQyxJQUFJO1FBQzFEUixPQUFPLENBQUNuQixrQkFBa0JxQixzQkFBc0IsQ0FBQztRQUNqREYsT0FBTyxDQUFDbkIsa0JBQWtCNEIsUUFBUSxDQUFDO0tBQ3RDLENBQUNHLElBQUksQ0FBQztJQUNQLElBQUk7UUFDQSxJQUFJQyxXQUFXLElBQUlDLElBQUl0QjtRQUN2QixJQUFJSixLQUFxQyxFQUFFLEVBUTFDO1FBQ0QsOEZBQThGO1FBQzlGeUIsU0FBU0ssWUFBWSxDQUFDQyxHQUFHLENBQUN0QyxrQkFBa0J1QyxvQkFBb0IsRUFBRVY7UUFDbEUsTUFBTVcsTUFBTSxNQUFNQyxNQUFNVCxVQUFVO1lBQzlCLHdGQUF3RjtZQUN4RlUsYUFBYTtZQUNidkI7UUFDSjtRQUNBLE1BQU13QixjQUFjLENBQUMsR0FBR3pDLFdBQVdVLDJCQUEyQixFQUFFNEIsSUFBSTdCLEdBQUc7UUFDdkUsTUFBTWlDLGVBQWVKLElBQUlLLFVBQVUsR0FBR0YsY0FBYzdCO1FBQ3BELE1BQU1nQyxjQUFjTixJQUFJckIsT0FBTyxDQUFDckIsR0FBRyxDQUFDLG1CQUFtQjtRQUN2RCxNQUFNaUQsWUFBWSxDQUFDLENBQUNQLElBQUlyQixPQUFPLENBQUNyQixHQUFHLENBQUNFLGtCQUFrQmdELHdCQUF3QjtRQUM5RSxJQUFJQyxtQkFBbUJILGdCQUFnQjlDLGtCQUFrQmtELHVCQUF1QjtRQUNoRixJQUFJM0MsS0FBcUMsRUFBRSxFQU0xQztRQUNELDRGQUE0RjtRQUM1RixvRUFBb0U7UUFDcEUsSUFBSSxDQUFDMEMsb0JBQW9CLENBQUNULElBQUlZLEVBQUUsRUFBRTtZQUM5QiwyRkFBMkY7WUFDM0YsSUFBSXpDLElBQUkwQyxJQUFJLEVBQUU7Z0JBQ1ZWLFlBQVlVLElBQUksR0FBRzFDLElBQUkwQyxJQUFJO1lBQy9CO1lBQ0EsT0FBTzNDLGdCQUFnQmlDLFlBQVk5QixRQUFRO1FBQy9DO1FBQ0EsMkVBQTJFO1FBQzNFLE1BQU0sQ0FBQ3lDLFNBQVNDLFdBQVcsR0FBRyxNQUFNakQsZ0JBQWdCa0QsUUFBUUMsT0FBTyxDQUFDakIsTUFBTTtZQUN0RWtCLFlBQVl2RCxlQUFldUQsVUFBVTtRQUN6QztRQUNBLElBQUl6QyxtQkFBbUJxQyxTQUFTO1lBQzVCLE9BQU81QyxnQkFBZ0I4QixJQUFJN0IsR0FBRztRQUNsQztRQUNBLE9BQU87WUFDSDRDO1lBQ0FYO1lBQ0FHO1NBQ0g7SUFDTCxFQUFFLE9BQU9ZLEtBQUs7UUFDVkMsUUFBUUMsS0FBSyxDQUFDLHFDQUFxQ2xELE1BQU0seUNBQXlDZ0Q7UUFDbEcsaURBQWlEO1FBQ2pELHFIQUFxSDtRQUNySCxpR0FBaUc7UUFDakcsT0FBTztZQUNIaEQsSUFBSUUsUUFBUTtZQUNaQztTQUNIO0lBQ0w7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPbkIsUUFBUW1FLE9BQU8sS0FBSyxjQUFlLE9BQU9uRSxRQUFRbUUsT0FBTyxLQUFLLFlBQVluRSxRQUFRbUUsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPbkUsUUFBUW1FLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt0RSxPQUFPQyxjQUFjLENBQUNDLFFBQVFtRSxPQUFPLEVBQUUsY0FBYztRQUFFbEUsT0FBTztJQUFLO0lBQ25FSCxPQUFPdUUsTUFBTSxDQUFDckUsUUFBUW1FLE9BQU8sRUFBRW5FO0lBQy9Cc0UsT0FBT3RFLE9BQU8sR0FBR0EsUUFBUW1FLE9BQU87QUFDbEMsRUFFQSxpREFBaUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9mZXRjaC1zZXJ2ZXItcmVzcG9uc2UuanM/ZmE3OCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmZXRjaFNlcnZlclJlc3BvbnNlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmZXRjaFNlcnZlclJlc3BvbnNlO1xuICAgIH1cbn0pO1xuY29uc3QgX2FwcHJvdXRlcmhlYWRlcnMgPSByZXF1aXJlKFwiLi4vYXBwLXJvdXRlci1oZWFkZXJzXCIpO1xuY29uc3QgX2FwcHJvdXRlciA9IHJlcXVpcmUoXCIuLi9hcHAtcm91dGVyXCIpO1xuY29uc3QgX2FwcGNhbGxzZXJ2ZXIgPSByZXF1aXJlKFwiLi4vLi4vYXBwLWNhbGwtc2VydmVyXCIpO1xuY29uc3QgX3JvdXRlcnJlZHVjZXJ0eXBlcyA9IHJlcXVpcmUoXCIuL3JvdXRlci1yZWR1Y2VyLXR5cGVzXCIpO1xuY29uc3QgX2hhc2ggPSByZXF1aXJlKFwiLi4vLi4vLi4vc2hhcmVkL2xpYi9oYXNoXCIpO1xuLy8gQHRzLWlnbm9yZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuLy8gaW1wb3J0IHsgY3JlYXRlRnJvbUZldGNoIH0gZnJvbSAncmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudCdcbmNvbnN0IHsgY3JlYXRlRnJvbUZldGNoIH0gPSAhIXByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSA/IHJlcXVpcmUoXCJyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50LmVkZ2VcIikgOiByZXF1aXJlKFwicmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudFwiKTtcbmZ1bmN0aW9uIGRvTXBhTmF2aWdhdGlvbih1cmwpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAoMCwgX2FwcHJvdXRlci51cmxUb1VybFdpdGhvdXRGbGlnaHRNYXJrZXIpKHVybCkudG9TdHJpbmcoKSxcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgXTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGZldGNoU2VydmVyUmVzcG9uc2UodXJsLCBmbGlnaHRSb3V0ZXJTdGF0ZSwgbmV4dFVybCwgY3VycmVudEJ1aWxkSWQsIHByZWZldGNoS2luZCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgIC8vIEVuYWJsZSBmbGlnaHQgcmVzcG9uc2VcbiAgICAgICAgW19hcHByb3V0ZXJoZWFkZXJzLlJTQ19IRUFERVJdOiBcIjFcIixcbiAgICAgICAgLy8gUHJvdmlkZSB0aGUgY3VycmVudCByb3V0ZXIgc3RhdGVcbiAgICAgICAgW19hcHByb3V0ZXJoZWFkZXJzLk5FWFRfUk9VVEVSX1NUQVRFX1RSRUVdOiBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoZmxpZ2h0Um91dGVyU3RhdGUpKVxuICAgIH07XG4gICAgLyoqXG4gICAqIFRocmVlIGNhc2VzOlxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGB1bmRlZmluZWRgLCBpdCBtZWFucyBpdCdzIGEgbm9ybWFsIG5hdmlnYXRpb24sIHNvIHdlIHdhbnQgdG8gcHJlZmV0Y2ggdGhlIHBhZ2UgZGF0YSBmdWxseVxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGBmdWxsYCAtIHdlIHdhbnQgdG8gcHJlZmV0Y2ggdGhlIHdob2xlIHBhZ2Ugc28gc2FtZSBhcyBhYm92ZVxuICAgKiAtIGBwcmVmZXRjaEtpbmRgIGlzIGBhdXRvYCAtIGlmIHRoZSBwYWdlIGlzIGR5bmFtaWMsIHByZWZldGNoIHRoZSBwYWdlIGRhdGEgcGFydGlhbGx5LCBpZiBzdGF0aWMgcHJlZmV0Y2ggdGhlIHBhZ2UgZGF0YSBmdWxseVxuICAgKi8gaWYgKHByZWZldGNoS2luZCA9PT0gX3JvdXRlcnJlZHVjZXJ0eXBlcy5QcmVmZXRjaEtpbmQuQVVUTykge1xuICAgICAgICBoZWFkZXJzW19hcHByb3V0ZXJoZWFkZXJzLk5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUl0gPSBcIjFcIjtcbiAgICB9XG4gICAgaWYgKG5leHRVcmwpIHtcbiAgICAgICAgaGVhZGVyc1tfYXBwcm91dGVyaGVhZGVycy5ORVhUX1VSTF0gPSBuZXh0VXJsO1xuICAgIH1cbiAgICBjb25zdCB1bmlxdWVDYWNoZVF1ZXJ5ID0gKDAsIF9oYXNoLmhleEhhc2gpKFtcbiAgICAgICAgaGVhZGVyc1tfYXBwcm91dGVyaGVhZGVycy5ORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVJdIHx8IFwiMFwiLFxuICAgICAgICBoZWFkZXJzW19hcHByb3V0ZXJoZWFkZXJzLk5FWFRfUk9VVEVSX1NUQVRFX1RSRUVdLFxuICAgICAgICBoZWFkZXJzW19hcHByb3V0ZXJoZWFkZXJzLk5FWFRfVVJMXVxuICAgIF0uam9pbihcIixcIikpO1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBmZXRjaFVybCA9IG5ldyBVUkwodXJsKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DT05GSUdfT1VUUFVUID09PSBcImV4cG9ydFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZldGNoVXJsLnBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgICAgICAgICBmZXRjaFVybC5wYXRobmFtZSArPSBcImluZGV4LnR4dFwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoVXJsLnBhdGhuYW1lICs9IFwiLnR4dFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgdW5pcXVlIGNhY2hlIHF1ZXJ5IHRvIGF2b2lkIGNhY2hpbmcgY29uZmxpY3RzIG9uIENETiB3aGljaCBkb24ndCByZXNwZWN0IHRvIFZhcnkgaGVhZGVyXG4gICAgICAgIGZldGNoVXJsLnNlYXJjaFBhcmFtcy5zZXQoX2FwcHJvdXRlcmhlYWRlcnMuTkVYVF9SU0NfVU5JT05fUVVFUlksIHVuaXF1ZUNhY2hlUXVlcnkpO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChmZXRjaFVybCwge1xuICAgICAgICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdCBmb3Igb2xkZXIgYnJvd3NlcnMuIGBzYW1lLW9yaWdpbmAgaXMgdGhlIGRlZmF1bHQgaW4gbW9kZXJuIGJyb3dzZXJzLlxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcbiAgICAgICAgICAgIGhlYWRlcnNcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlVXJsID0gKDAsIF9hcHByb3V0ZXIudXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyKShyZXMudXJsKTtcbiAgICAgICAgY29uc3QgY2Fub25pY2FsVXJsID0gcmVzLnJlZGlyZWN0ZWQgPyByZXNwb25zZVVybCA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXMuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIikgfHwgXCJcIjtcbiAgICAgICAgY29uc3QgcG9zdHBvbmVkID0gISFyZXMuaGVhZGVycy5nZXQoX2FwcHJvdXRlcmhlYWRlcnMuTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSKTtcbiAgICAgICAgbGV0IGlzRmxpZ2h0UmVzcG9uc2UgPSBjb250ZW50VHlwZSA9PT0gX2FwcHJvdXRlcmhlYWRlcnMuUlNDX0NPTlRFTlRfVFlQRV9IRUFERVI7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ09ORklHX09VVFBVVCA9PT0gXCJleHBvcnRcIikge1xuICAgICAgICAgICAgICAgIGlmICghaXNGbGlnaHRSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBpc0ZsaWdodFJlc3BvbnNlID0gY29udGVudFR5cGUuc3RhcnRzV2l0aChcInRleHQvcGxhaW5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIGZldGNoIHJldHVybnMgc29tZXRoaW5nIGRpZmZlcmVudCB0aGFuIGZsaWdodCByZXNwb25zZSBoYW5kbGUgaXQgbGlrZSBhIG1wYSBuYXZpZ2F0aW9uXG4gICAgICAgIC8vIElmIHRoZSBmZXRjaCB3YXMgbm90IDIwMCwgd2UgYWxzbyBoYW5kbGUgaXQgbGlrZSBhIG1wYSBuYXZpZ2F0aW9uXG4gICAgICAgIGlmICghaXNGbGlnaHRSZXNwb25zZSB8fCAhcmVzLm9rKSB7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBvcmlnaW5hbCBVUkwgY2FtZSB3aXRoIGEgaGFzaCwgcHJlc2VydmUgaXQgYmVmb3JlIHJlZGlyZWN0aW5nIHRvIHRoZSBuZXcgVVJMXG4gICAgICAgICAgICBpZiAodXJsLmhhc2gpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVVybC5oYXNoID0gdXJsLmhhc2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZG9NcGFOYXZpZ2F0aW9uKHJlc3BvbnNlVXJsLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSB0aGUgYGZldGNoYCByZWFkYWJsZSBzdHJlYW0gdGhhdCBjYW4gYmUgdW53cmFwcGVkIGJ5IGBSZWFjdC51c2VgLlxuICAgICAgICBjb25zdCBbYnVpbGRJZCwgZmxpZ2h0RGF0YV0gPSBhd2FpdCBjcmVhdGVGcm9tRmV0Y2goUHJvbWlzZS5yZXNvbHZlKHJlcyksIHtcbiAgICAgICAgICAgIGNhbGxTZXJ2ZXI6IF9hcHBjYWxsc2VydmVyLmNhbGxTZXJ2ZXJcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjdXJyZW50QnVpbGRJZCAhPT0gYnVpbGRJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvTXBhTmF2aWdhdGlvbihyZXMudXJsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgZmxpZ2h0RGF0YSxcbiAgICAgICAgICAgIGNhbm9uaWNhbFVybCxcbiAgICAgICAgICAgIHBvc3Rwb25lZFxuICAgICAgICBdO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGZldGNoIFJTQyBwYXlsb2FkIGZvciBcIiArIHVybCArIFwiLiBGYWxsaW5nIGJhY2sgdG8gYnJvd3NlciBuYXZpZ2F0aW9uLlwiLCBlcnIpO1xuICAgICAgICAvLyBJZiBmZXRjaCBmYWlscyBoYW5kbGUgaXQgbGlrZSBhIG1wYSBuYXZpZ2F0aW9uXG4gICAgICAgIC8vIFRPRE8tQVBQOiBBZGQgYSB0ZXN0IGZvciB0aGUgY2FzZSB3aGVyZSBhIENPUlMgcmVxdWVzdCBmYWlscywgZS5nLiBleHRlcm5hbCB1cmwgcmVkaXJlY3QgY29taW5nIGZyb20gdGhlIHJlc3BvbnNlLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2lzc3Vlcy80MzYwNSNpc3N1ZWNvbW1lbnQtMTQ1MTYxNzUyMSBmb3IgYSByZXByb2R1Y3Rpb24uXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB1cmwudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICBdO1xuICAgIH1cbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmV0Y2gtc2VydmVyLXJlc3BvbnNlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJmZXRjaFNlcnZlclJlc3BvbnNlIiwiX2FwcHJvdXRlcmhlYWRlcnMiLCJyZXF1aXJlIiwiX2FwcHJvdXRlciIsIl9hcHBjYWxsc2VydmVyIiwiX3JvdXRlcnJlZHVjZXJ0eXBlcyIsIl9oYXNoIiwiY3JlYXRlRnJvbUZldGNoIiwicHJvY2VzcyIsImVudiIsIk5FWFRfUlVOVElNRSIsImRvTXBhTmF2aWdhdGlvbiIsInVybCIsInVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlciIsInRvU3RyaW5nIiwidW5kZWZpbmVkIiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJuZXh0VXJsIiwiY3VycmVudEJ1aWxkSWQiLCJwcmVmZXRjaEtpbmQiLCJoZWFkZXJzIiwiUlNDX0hFQURFUiIsIk5FWFRfUk9VVEVSX1NUQVRFX1RSRUUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiUHJlZmV0Y2hLaW5kIiwiQVVUTyIsIk5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUiIsIk5FWFRfVVJMIiwidW5pcXVlQ2FjaGVRdWVyeSIsImhleEhhc2giLCJqb2luIiwiZmV0Y2hVcmwiLCJVUkwiLCJfX05FWFRfQ09ORklHX09VVFBVVCIsInBhdGhuYW1lIiwiZW5kc1dpdGgiLCJzZWFyY2hQYXJhbXMiLCJzZXQiLCJORVhUX1JTQ19VTklPTl9RVUVSWSIsInJlcyIsImZldGNoIiwiY3JlZGVudGlhbHMiLCJyZXNwb25zZVVybCIsImNhbm9uaWNhbFVybCIsInJlZGlyZWN0ZWQiLCJjb250ZW50VHlwZSIsInBvc3Rwb25lZCIsIk5FWFRfRElEX1BPU1RQT05FX0hFQURFUiIsImlzRmxpZ2h0UmVzcG9uc2UiLCJSU0NfQ09OVEVOVF9UWVBFX0hFQURFUiIsInN0YXJ0c1dpdGgiLCJvayIsImhhc2giLCJidWlsZElkIiwiZmxpZ2h0RGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2FsbFNlcnZlciIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-data-property.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/fill-cache-with-data-property.js ***! + \**************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fillCacheWithDataProperty\", ({\n enumerable: true,\n get: function() {\n return fillCacheWithDataProperty;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction fillCacheWithDataProperty(newCache, existingCache, flightSegmentPath, fetchResponse) {\n const isLastEntry = flightSegmentPath.length <= 2;\n const [parallelRouteKey, segment] = flightSegmentPath;\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const existingChildSegmentMap = existingCache.parallelRoutes.get(parallelRouteKey);\n let childSegmentMap = newCache.parallelRoutes.get(parallelRouteKey);\n if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n childSegmentMap = new Map(existingChildSegmentMap);\n newCache.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n }\n const existingChildCacheNode = existingChildSegmentMap == null ? void 0 : existingChildSegmentMap.get(cacheKey);\n let childCacheNode = childSegmentMap.get(cacheKey);\n // In case of last segment start off the fetch at this level and don't copy further down.\n if (isLastEntry) {\n if (!childCacheNode || !childCacheNode.lazyData || childCacheNode === existingChildCacheNode) {\n childSegmentMap.set(cacheKey, {\n lazyData: fetchResponse(),\n rsc: null,\n prefetchRsc: null,\n parallelRoutes: new Map()\n });\n }\n return;\n }\n if (!childCacheNode || !existingChildCacheNode) {\n // Start fetch in the place where the existing cache doesn't have the data yet.\n if (!childCacheNode) {\n childSegmentMap.set(cacheKey, {\n lazyData: fetchResponse(),\n rsc: null,\n prefetchRsc: null,\n parallelRoutes: new Map()\n });\n }\n return;\n }\n if (childCacheNode === existingChildCacheNode) {\n childCacheNode = {\n lazyData: childCacheNode.lazyData,\n rsc: childCacheNode.rsc,\n prefetchRsc: childCacheNode.prefetchRsc,\n parallelRoutes: new Map(childCacheNode.parallelRoutes)\n };\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n return fillCacheWithDataProperty(childCacheNode, existingChildCacheNode, flightSegmentPath.slice(2), fetchResponse);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fill-cache-with-data-property.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmlsbC1jYWNoZS13aXRoLWRhdGEtcHJvcGVydHkuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDZEQUE0RDtJQUN4REksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHdCQUF3QkMsbUJBQU9BLENBQUMsMklBQTJCO0FBQ2pFLFNBQVNGLDBCQUEwQkcsUUFBUSxFQUFFQyxhQUFhLEVBQUVDLGlCQUFpQixFQUFFQyxhQUFhO0lBQ3hGLE1BQU1DLGNBQWNGLGtCQUFrQkcsTUFBTSxJQUFJO0lBQ2hELE1BQU0sQ0FBQ0Msa0JBQWtCQyxRQUFRLEdBQUdMO0lBQ3BDLE1BQU1NLFdBQVcsQ0FBQyxHQUFHVixzQkFBc0JXLG9CQUFvQixFQUFFRjtJQUNqRSxNQUFNRywwQkFBMEJULGNBQWNVLGNBQWMsQ0FBQ2YsR0FBRyxDQUFDVTtJQUNqRSxJQUFJTSxrQkFBa0JaLFNBQVNXLGNBQWMsQ0FBQ2YsR0FBRyxDQUFDVTtJQUNsRCxJQUFJLENBQUNNLG1CQUFtQkEsb0JBQW9CRix5QkFBeUI7UUFDakVFLGtCQUFrQixJQUFJQyxJQUFJSDtRQUMxQlYsU0FBU1csY0FBYyxDQUFDRyxHQUFHLENBQUNSLGtCQUFrQk07SUFDbEQ7SUFDQSxNQUFNRyx5QkFBeUJMLDJCQUEyQixPQUFPLEtBQUssSUFBSUEsd0JBQXdCZCxHQUFHLENBQUNZO0lBQ3RHLElBQUlRLGlCQUFpQkosZ0JBQWdCaEIsR0FBRyxDQUFDWTtJQUN6Qyx5RkFBeUY7SUFDekYsSUFBSUosYUFBYTtRQUNiLElBQUksQ0FBQ1ksa0JBQWtCLENBQUNBLGVBQWVDLFFBQVEsSUFBSUQsbUJBQW1CRCx3QkFBd0I7WUFDMUZILGdCQUFnQkUsR0FBRyxDQUFDTixVQUFVO2dCQUMxQlMsVUFBVWQ7Z0JBQ1ZlLEtBQUs7Z0JBQ0xDLGFBQWE7Z0JBQ2JSLGdCQUFnQixJQUFJRTtZQUN4QjtRQUNKO1FBQ0E7SUFDSjtJQUNBLElBQUksQ0FBQ0csa0JBQWtCLENBQUNELHdCQUF3QjtRQUM1QywrRUFBK0U7UUFDL0UsSUFBSSxDQUFDQyxnQkFBZ0I7WUFDakJKLGdCQUFnQkUsR0FBRyxDQUFDTixVQUFVO2dCQUMxQlMsVUFBVWQ7Z0JBQ1ZlLEtBQUs7Z0JBQ0xDLGFBQWE7Z0JBQ2JSLGdCQUFnQixJQUFJRTtZQUN4QjtRQUNKO1FBQ0E7SUFDSjtJQUNBLElBQUlHLG1CQUFtQkQsd0JBQXdCO1FBQzNDQyxpQkFBaUI7WUFDYkMsVUFBVUQsZUFBZUMsUUFBUTtZQUNqQ0MsS0FBS0YsZUFBZUUsR0FBRztZQUN2QkMsYUFBYUgsZUFBZUcsV0FBVztZQUN2Q1IsZ0JBQWdCLElBQUlFLElBQUlHLGVBQWVMLGNBQWM7UUFDekQ7UUFDQUMsZ0JBQWdCRSxHQUFHLENBQUNOLFVBQVVRO0lBQ2xDO0lBQ0EsT0FBT25CLDBCQUEwQm1CLGdCQUFnQkQsd0JBQXdCYixrQkFBa0JrQixLQUFLLENBQUMsSUFBSWpCO0FBQ3pHO0FBRUEsSUFBSSxDQUFDLE9BQU9WLFFBQVE0QixPQUFPLEtBQUssY0FBZSxPQUFPNUIsUUFBUTRCLE9BQU8sS0FBSyxZQUFZNUIsUUFBUTRCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzVCLFFBQVE0QixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLL0IsT0FBT0MsY0FBYyxDQUFDQyxRQUFRNEIsT0FBTyxFQUFFLGNBQWM7UUFBRTNCLE9BQU87SUFBSztJQUNuRUgsT0FBT2dDLE1BQU0sQ0FBQzlCLFFBQVE0QixPQUFPLEVBQUU1QjtJQUMvQitCLE9BQU8vQixPQUFPLEdBQUdBLFFBQVE0QixPQUFPO0FBQ2xDLEVBRUEseURBQXlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmlsbC1jYWNoZS13aXRoLWRhdGEtcHJvcGVydHkuanM/ZjU1MiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbGxDYWNoZVdpdGhEYXRhUHJvcGVydHlcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZpbGxDYWNoZVdpdGhEYXRhUHJvcGVydHk7XG4gICAgfVxufSk7XG5jb25zdCBfY3JlYXRlcm91dGVyY2FjaGVrZXkgPSByZXF1aXJlKFwiLi9jcmVhdGUtcm91dGVyLWNhY2hlLWtleVwiKTtcbmZ1bmN0aW9uIGZpbGxDYWNoZVdpdGhEYXRhUHJvcGVydHkobmV3Q2FjaGUsIGV4aXN0aW5nQ2FjaGUsIGZsaWdodFNlZ21lbnRQYXRoLCBmZXRjaFJlc3BvbnNlKSB7XG4gICAgY29uc3QgaXNMYXN0RW50cnkgPSBmbGlnaHRTZWdtZW50UGF0aC5sZW5ndGggPD0gMjtcbiAgICBjb25zdCBbcGFyYWxsZWxSb3V0ZUtleSwgc2VnbWVudF0gPSBmbGlnaHRTZWdtZW50UGF0aDtcbiAgICBjb25zdCBjYWNoZUtleSA9ICgwLCBfY3JlYXRlcm91dGVyY2FjaGVrZXkuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKHNlZ21lbnQpO1xuICAgIGNvbnN0IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwID0gZXhpc3RpbmdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSk7XG4gICAgbGV0IGNoaWxkU2VnbWVudE1hcCA9IG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KTtcbiAgICBpZiAoIWNoaWxkU2VnbWVudE1hcCB8fCBjaGlsZFNlZ21lbnRNYXAgPT09IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKSB7XG4gICAgICAgIGNoaWxkU2VnbWVudE1hcCA9IG5ldyBNYXAoZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXApO1xuICAgICAgICBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5zZXQocGFyYWxsZWxSb3V0ZUtleSwgY2hpbGRTZWdtZW50TWFwKTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmdDaGlsZENhY2hlTm9kZSA9IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwID09IG51bGwgPyB2b2lkIDAgOiBleGlzdGluZ0NoaWxkU2VnbWVudE1hcC5nZXQoY2FjaGVLZXkpO1xuICAgIGxldCBjaGlsZENhY2hlTm9kZSA9IGNoaWxkU2VnbWVudE1hcC5nZXQoY2FjaGVLZXkpO1xuICAgIC8vIEluIGNhc2Ugb2YgbGFzdCBzZWdtZW50IHN0YXJ0IG9mZiB0aGUgZmV0Y2ggYXQgdGhpcyBsZXZlbCBhbmQgZG9uJ3QgY29weSBmdXJ0aGVyIGRvd24uXG4gICAgaWYgKGlzTGFzdEVudHJ5KSB7XG4gICAgICAgIGlmICghY2hpbGRDYWNoZU5vZGUgfHwgIWNoaWxkQ2FjaGVOb2RlLmxhenlEYXRhIHx8IGNoaWxkQ2FjaGVOb2RlID09PSBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKSB7XG4gICAgICAgICAgICBjaGlsZFNlZ21lbnRNYXAuc2V0KGNhY2hlS2V5LCB7XG4gICAgICAgICAgICAgICAgbGF6eURhdGE6IGZldGNoUmVzcG9uc2UoKSxcbiAgICAgICAgICAgICAgICByc2M6IG51bGwsXG4gICAgICAgICAgICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNoaWxkQ2FjaGVOb2RlIHx8ICFleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKSB7XG4gICAgICAgIC8vIFN0YXJ0IGZldGNoIGluIHRoZSBwbGFjZSB3aGVyZSB0aGUgZXhpc3RpbmcgY2FjaGUgZG9lc24ndCBoYXZlIHRoZSBkYXRhIHlldC5cbiAgICAgICAgaWYgKCFjaGlsZENhY2hlTm9kZSkge1xuICAgICAgICAgICAgY2hpbGRTZWdtZW50TWFwLnNldChjYWNoZUtleSwge1xuICAgICAgICAgICAgICAgIGxhenlEYXRhOiBmZXRjaFJlc3BvbnNlKCksXG4gICAgICAgICAgICAgICAgcnNjOiBudWxsLFxuICAgICAgICAgICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICAgICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoaWxkQ2FjaGVOb2RlID09PSBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKSB7XG4gICAgICAgIGNoaWxkQ2FjaGVOb2RlID0ge1xuICAgICAgICAgICAgbGF6eURhdGE6IGNoaWxkQ2FjaGVOb2RlLmxhenlEYXRhLFxuICAgICAgICAgICAgcnNjOiBjaGlsZENhY2hlTm9kZS5yc2MsXG4gICAgICAgICAgICBwcmVmZXRjaFJzYzogY2hpbGRDYWNoZU5vZGUucHJlZmV0Y2hSc2MsXG4gICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcChjaGlsZENhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcylcbiAgICAgICAgfTtcbiAgICAgICAgY2hpbGRTZWdtZW50TWFwLnNldChjYWNoZUtleSwgY2hpbGRDYWNoZU5vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmlsbENhY2hlV2l0aERhdGFQcm9wZXJ0eShjaGlsZENhY2hlTm9kZSwgZXhpc3RpbmdDaGlsZENhY2hlTm9kZSwgZmxpZ2h0U2VnbWVudFBhdGguc2xpY2UoMiksIGZldGNoUmVzcG9uc2UpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWxsLWNhY2hlLXdpdGgtZGF0YS1wcm9wZXJ0eS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZmlsbENhY2hlV2l0aERhdGFQcm9wZXJ0eSIsIl9jcmVhdGVyb3V0ZXJjYWNoZWtleSIsInJlcXVpcmUiLCJuZXdDYWNoZSIsImV4aXN0aW5nQ2FjaGUiLCJmbGlnaHRTZWdtZW50UGF0aCIsImZldGNoUmVzcG9uc2UiLCJpc0xhc3RFbnRyeSIsImxlbmd0aCIsInBhcmFsbGVsUm91dGVLZXkiLCJzZWdtZW50IiwiY2FjaGVLZXkiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsImV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwIiwicGFyYWxsZWxSb3V0ZXMiLCJjaGlsZFNlZ21lbnRNYXAiLCJNYXAiLCJzZXQiLCJleGlzdGluZ0NoaWxkQ2FjaGVOb2RlIiwiY2hpbGRDYWNoZU5vZGUiLCJsYXp5RGF0YSIsInJzYyIsInByZWZldGNoUnNjIiwic2xpY2UiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-data-property.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js ***! + \*****************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fillCacheWithNewSubTreeData\", ({\n enumerable: true,\n get: function() {\n return fillCacheWithNewSubTreeData;\n }\n}));\nconst _invalidatecachebyrouterstate = __webpack_require__(/*! ./invalidate-cache-by-router-state */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction fillCacheWithNewSubTreeData(newCache, existingCache, flightDataPath, wasPrefetched) {\n const isLastEntry = flightDataPath.length <= 5;\n const [parallelRouteKey, segment] = flightDataPath;\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const existingChildSegmentMap = existingCache.parallelRoutes.get(parallelRouteKey);\n if (!existingChildSegmentMap) {\n // Bailout because the existing cache does not have the path to the leaf node\n // Will trigger lazy fetch in layout-router because of missing segment\n return;\n }\n let childSegmentMap = newCache.parallelRoutes.get(parallelRouteKey);\n if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n childSegmentMap = new Map(existingChildSegmentMap);\n newCache.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n }\n const existingChildCacheNode = existingChildSegmentMap.get(cacheKey);\n let childCacheNode = childSegmentMap.get(cacheKey);\n if (isLastEntry) {\n if (!childCacheNode || !childCacheNode.lazyData || childCacheNode === existingChildCacheNode) {\n const seedData = flightDataPath[3];\n const rsc = seedData[2];\n childCacheNode = {\n lazyData: null,\n rsc,\n prefetchRsc: null,\n // Ensure segments other than the one we got data for are preserved.\n parallelRoutes: existingChildCacheNode ? new Map(existingChildCacheNode.parallelRoutes) : new Map()\n };\n if (existingChildCacheNode) {\n (0, _invalidatecachebyrouterstate.invalidateCacheByRouterState)(childCacheNode, existingChildCacheNode, flightDataPath[2]);\n }\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(childCacheNode, existingChildCacheNode, flightDataPath[2], seedData, flightDataPath[4], wasPrefetched);\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n return;\n }\n if (!childCacheNode || !existingChildCacheNode) {\n // Bailout because the existing cache does not have the path to the leaf node\n // Will trigger lazy fetch in layout-router because of missing segment\n return;\n }\n if (childCacheNode === existingChildCacheNode) {\n childCacheNode = {\n lazyData: childCacheNode.lazyData,\n rsc: childCacheNode.rsc,\n prefetchRsc: childCacheNode.prefetchRsc,\n parallelRoutes: new Map(childCacheNode.parallelRoutes)\n };\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n fillCacheWithNewSubTreeData(childCacheNode, existingChildCacheNode, flightDataPath.slice(2), wasPrefetched);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fill-cache-with-new-subtree-data.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmlsbC1jYWNoZS13aXRoLW5ldy1zdWJ0cmVlLWRhdGEuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILCtEQUE4RDtJQUMxREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGdDQUFnQ0MsbUJBQU9BLENBQUMsNkpBQW9DO0FBQ2xGLE1BQU1DLGlDQUFpQ0QsbUJBQU9BLENBQUMsbUtBQXVDO0FBQ3RGLE1BQU1FLHdCQUF3QkYsbUJBQU9BLENBQUMsMklBQTJCO0FBQ2pFLFNBQVNGLDRCQUE0QkssUUFBUSxFQUFFQyxhQUFhLEVBQUVDLGNBQWMsRUFBRUMsYUFBYTtJQUN2RixNQUFNQyxjQUFjRixlQUFlRyxNQUFNLElBQUk7SUFDN0MsTUFBTSxDQUFDQyxrQkFBa0JDLFFBQVEsR0FBR0w7SUFDcEMsTUFBTU0sV0FBVyxDQUFDLEdBQUdULHNCQUFzQlUsb0JBQW9CLEVBQUVGO0lBQ2pFLE1BQU1HLDBCQUEwQlQsY0FBY1UsY0FBYyxDQUFDakIsR0FBRyxDQUFDWTtJQUNqRSxJQUFJLENBQUNJLHlCQUF5QjtRQUMxQiw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFO0lBQ0o7SUFDQSxJQUFJRSxrQkFBa0JaLFNBQVNXLGNBQWMsQ0FBQ2pCLEdBQUcsQ0FBQ1k7SUFDbEQsSUFBSSxDQUFDTSxtQkFBbUJBLG9CQUFvQkYseUJBQXlCO1FBQ2pFRSxrQkFBa0IsSUFBSUMsSUFBSUg7UUFDMUJWLFNBQVNXLGNBQWMsQ0FBQ0csR0FBRyxDQUFDUixrQkFBa0JNO0lBQ2xEO0lBQ0EsTUFBTUcseUJBQXlCTCx3QkFBd0JoQixHQUFHLENBQUNjO0lBQzNELElBQUlRLGlCQUFpQkosZ0JBQWdCbEIsR0FBRyxDQUFDYztJQUN6QyxJQUFJSixhQUFhO1FBQ2IsSUFBSSxDQUFDWSxrQkFBa0IsQ0FBQ0EsZUFBZUMsUUFBUSxJQUFJRCxtQkFBbUJELHdCQUF3QjtZQUMxRixNQUFNRyxXQUFXaEIsY0FBYyxDQUFDLEVBQUU7WUFDbEMsTUFBTWlCLE1BQU1ELFFBQVEsQ0FBQyxFQUFFO1lBQ3ZCRixpQkFBaUI7Z0JBQ2JDLFVBQVU7Z0JBQ1ZFO2dCQUNBQyxhQUFhO2dCQUNiLG9FQUFvRTtnQkFDcEVULGdCQUFnQkkseUJBQXlCLElBQUlGLElBQUlFLHVCQUF1QkosY0FBYyxJQUFJLElBQUlFO1lBQ2xHO1lBQ0EsSUFBSUUsd0JBQXdCO2dCQUN2QixJQUFHbkIsOEJBQThCeUIsNEJBQTRCLEVBQUVMLGdCQUFnQkQsd0JBQXdCYixjQUFjLENBQUMsRUFBRTtZQUM3SDtZQUNDLElBQUdKLCtCQUErQndCLDZCQUE2QixFQUFFTixnQkFBZ0JELHdCQUF3QmIsY0FBYyxDQUFDLEVBQUUsRUFBRWdCLFVBQVVoQixjQUFjLENBQUMsRUFBRSxFQUFFQztZQUMxSlMsZ0JBQWdCRSxHQUFHLENBQUNOLFVBQVVRO1FBQ2xDO1FBQ0E7SUFDSjtJQUNBLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNELHdCQUF3QjtRQUM1Qyw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFO0lBQ0o7SUFDQSxJQUFJQyxtQkFBbUJELHdCQUF3QjtRQUMzQ0MsaUJBQWlCO1lBQ2JDLFVBQVVELGVBQWVDLFFBQVE7WUFDakNFLEtBQUtILGVBQWVHLEdBQUc7WUFDdkJDLGFBQWFKLGVBQWVJLFdBQVc7WUFDdkNULGdCQUFnQixJQUFJRSxJQUFJRyxlQUFlTCxjQUFjO1FBQ3pEO1FBQ0FDLGdCQUFnQkUsR0FBRyxDQUFDTixVQUFVUTtJQUNsQztJQUNBckIsNEJBQTRCcUIsZ0JBQWdCRCx3QkFBd0JiLGVBQWVxQixLQUFLLENBQUMsSUFBSXBCO0FBQ2pHO0FBRUEsSUFBSSxDQUFDLE9BQU9aLFFBQVFpQyxPQUFPLEtBQUssY0FBZSxPQUFPakMsUUFBUWlDLE9BQU8sS0FBSyxZQUFZakMsUUFBUWlDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2pDLFFBQVFpQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLcEMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRaUMsT0FBTyxFQUFFLGNBQWM7UUFBRWhDLE9BQU87SUFBSztJQUNuRUgsT0FBT3FDLE1BQU0sQ0FBQ25DLFFBQVFpQyxPQUFPLEVBQUVqQztJQUMvQm9DLE9BQU9wQyxPQUFPLEdBQUdBLFFBQVFpQyxPQUFPO0FBQ2xDLEVBRUEsNERBQTREIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmlsbC1jYWNoZS13aXRoLW5ldy1zdWJ0cmVlLWRhdGEuanM/OWZlNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmlsbENhY2hlV2l0aE5ld1N1YlRyZWVEYXRhO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludmFsaWRhdGVjYWNoZWJ5cm91dGVyc3RhdGUgPSByZXF1aXJlKFwiLi9pbnZhbGlkYXRlLWNhY2hlLWJ5LXJvdXRlci1zdGF0ZVwiKTtcbmNvbnN0IF9maWxsbGF6eWl0ZW1zdGlsbGxlYWZ3aXRoaGVhZCA9IHJlcXVpcmUoXCIuL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkXCIpO1xuY29uc3QgX2NyZWF0ZXJvdXRlcmNhY2hla2V5ID0gcmVxdWlyZShcIi4vY3JlYXRlLXJvdXRlci1jYWNoZS1rZXlcIik7XG5mdW5jdGlvbiBmaWxsQ2FjaGVXaXRoTmV3U3ViVHJlZURhdGEobmV3Q2FjaGUsIGV4aXN0aW5nQ2FjaGUsIGZsaWdodERhdGFQYXRoLCB3YXNQcmVmZXRjaGVkKSB7XG4gICAgY29uc3QgaXNMYXN0RW50cnkgPSBmbGlnaHREYXRhUGF0aC5sZW5ndGggPD0gNTtcbiAgICBjb25zdCBbcGFyYWxsZWxSb3V0ZUtleSwgc2VnbWVudF0gPSBmbGlnaHREYXRhUGF0aDtcbiAgICBjb25zdCBjYWNoZUtleSA9ICgwLCBfY3JlYXRlcm91dGVyY2FjaGVrZXkuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKHNlZ21lbnQpO1xuICAgIGNvbnN0IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwID0gZXhpc3RpbmdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSk7XG4gICAgaWYgKCFleGlzdGluZ0NoaWxkU2VnbWVudE1hcCkge1xuICAgICAgICAvLyBCYWlsb3V0IGJlY2F1c2UgdGhlIGV4aXN0aW5nIGNhY2hlIGRvZXMgbm90IGhhdmUgdGhlIHBhdGggdG8gdGhlIGxlYWYgbm9kZVxuICAgICAgICAvLyBXaWxsIHRyaWdnZXIgbGF6eSBmZXRjaCBpbiBsYXlvdXQtcm91dGVyIGJlY2F1c2Ugb2YgbWlzc2luZyBzZWdtZW50XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNoaWxkU2VnbWVudE1hcCA9IG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KTtcbiAgICBpZiAoIWNoaWxkU2VnbWVudE1hcCB8fCBjaGlsZFNlZ21lbnRNYXAgPT09IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKSB7XG4gICAgICAgIGNoaWxkU2VnbWVudE1hcCA9IG5ldyBNYXAoZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXApO1xuICAgICAgICBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5zZXQocGFyYWxsZWxSb3V0ZUtleSwgY2hpbGRTZWdtZW50TWFwKTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmdDaGlsZENhY2hlTm9kZSA9IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwLmdldChjYWNoZUtleSk7XG4gICAgbGV0IGNoaWxkQ2FjaGVOb2RlID0gY2hpbGRTZWdtZW50TWFwLmdldChjYWNoZUtleSk7XG4gICAgaWYgKGlzTGFzdEVudHJ5KSB7XG4gICAgICAgIGlmICghY2hpbGRDYWNoZU5vZGUgfHwgIWNoaWxkQ2FjaGVOb2RlLmxhenlEYXRhIHx8IGNoaWxkQ2FjaGVOb2RlID09PSBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWVkRGF0YSA9IGZsaWdodERhdGFQYXRoWzNdO1xuICAgICAgICAgICAgY29uc3QgcnNjID0gc2VlZERhdGFbMl07XG4gICAgICAgICAgICBjaGlsZENhY2hlTm9kZSA9IHtcbiAgICAgICAgICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICByc2MsXG4gICAgICAgICAgICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICAgICAgICAgICAgLy8gRW5zdXJlIHNlZ21lbnRzIG90aGVyIHRoYW4gdGhlIG9uZSB3ZSBnb3QgZGF0YSBmb3IgYXJlIHByZXNlcnZlZC5cbiAgICAgICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogZXhpc3RpbmdDaGlsZENhY2hlTm9kZSA/IG5ldyBNYXAoZXhpc3RpbmdDaGlsZENhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcykgOiBuZXcgTWFwKClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgICAgICAgICAgICAgICgwLCBfaW52YWxpZGF0ZWNhY2hlYnlyb3V0ZXJzdGF0ZS5pbnZhbGlkYXRlQ2FjaGVCeVJvdXRlclN0YXRlKShjaGlsZENhY2hlTm9kZSwgZXhpc3RpbmdDaGlsZENhY2hlTm9kZSwgZmxpZ2h0RGF0YVBhdGhbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKDAsIF9maWxsbGF6eWl0ZW1zdGlsbGxlYWZ3aXRoaGVhZC5maWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCkoY2hpbGRDYWNoZU5vZGUsIGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUsIGZsaWdodERhdGFQYXRoWzJdLCBzZWVkRGF0YSwgZmxpZ2h0RGF0YVBhdGhbNF0sIHdhc1ByZWZldGNoZWQpO1xuICAgICAgICAgICAgY2hpbGRTZWdtZW50TWFwLnNldChjYWNoZUtleSwgY2hpbGRDYWNoZU5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFjaGlsZENhY2hlTm9kZSB8fCAhZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgICAgICAvLyBCYWlsb3V0IGJlY2F1c2UgdGhlIGV4aXN0aW5nIGNhY2hlIGRvZXMgbm90IGhhdmUgdGhlIHBhdGggdG8gdGhlIGxlYWYgbm9kZVxuICAgICAgICAvLyBXaWxsIHRyaWdnZXIgbGF6eSBmZXRjaCBpbiBsYXlvdXQtcm91dGVyIGJlY2F1c2Ugb2YgbWlzc2luZyBzZWdtZW50XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoaWxkQ2FjaGVOb2RlID09PSBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKSB7XG4gICAgICAgIGNoaWxkQ2FjaGVOb2RlID0ge1xuICAgICAgICAgICAgbGF6eURhdGE6IGNoaWxkQ2FjaGVOb2RlLmxhenlEYXRhLFxuICAgICAgICAgICAgcnNjOiBjaGlsZENhY2hlTm9kZS5yc2MsXG4gICAgICAgICAgICBwcmVmZXRjaFJzYzogY2hpbGRDYWNoZU5vZGUucHJlZmV0Y2hSc2MsXG4gICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcChjaGlsZENhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcylcbiAgICAgICAgfTtcbiAgICAgICAgY2hpbGRTZWdtZW50TWFwLnNldChjYWNoZUtleSwgY2hpbGRDYWNoZU5vZGUpO1xuICAgIH1cbiAgICBmaWxsQ2FjaGVXaXRoTmV3U3ViVHJlZURhdGEoY2hpbGRDYWNoZU5vZGUsIGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUsIGZsaWdodERhdGFQYXRoLnNsaWNlKDIpLCB3YXNQcmVmZXRjaGVkKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsbC1jYWNoZS13aXRoLW5ldy1zdWJ0cmVlLWRhdGEuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YSIsIl9pbnZhbGlkYXRlY2FjaGVieXJvdXRlcnN0YXRlIiwicmVxdWlyZSIsIl9maWxsbGF6eWl0ZW1zdGlsbGxlYWZ3aXRoaGVhZCIsIl9jcmVhdGVyb3V0ZXJjYWNoZWtleSIsIm5ld0NhY2hlIiwiZXhpc3RpbmdDYWNoZSIsImZsaWdodERhdGFQYXRoIiwid2FzUHJlZmV0Y2hlZCIsImlzTGFzdEVudHJ5IiwibGVuZ3RoIiwicGFyYWxsZWxSb3V0ZUtleSIsInNlZ21lbnQiLCJjYWNoZUtleSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwiZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXAiLCJwYXJhbGxlbFJvdXRlcyIsImNoaWxkU2VnbWVudE1hcCIsIk1hcCIsInNldCIsImV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUiLCJjaGlsZENhY2hlTm9kZSIsImxhenlEYXRhIiwic2VlZERhdGEiLCJyc2MiLCJwcmVmZXRjaFJzYyIsImludmFsaWRhdGVDYWNoZUJ5Um91dGVyU3RhdGUiLCJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCIsInNsaWNlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js": +/*!********************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js ***! + \********************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fillLazyItemsTillLeafWithHead\", ({\n enumerable: true,\n get: function() {\n return fillLazyItemsTillLeafWithHead;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction fillLazyItemsTillLeafWithHead(newCache, existingCache, routerState, cacheNodeSeedData, head, wasPrefetched) {\n const isLastSegment = Object.keys(routerState[1]).length === 0;\n if (isLastSegment) {\n newCache.head = head;\n return;\n }\n // Remove segment that we got data for so that it is filled in during rendering of rsc.\n for(const key in routerState[1]){\n const parallelRouteState = routerState[1][key];\n const segmentForParallelRoute = parallelRouteState[0];\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segmentForParallelRoute);\n // TODO: We should traverse the cacheNodeSeedData tree instead of the router\n // state tree. Ideally, they would always be the same shape, but because of\n // the loading.js pattern, cacheNodeSeedData sometimes only represents a\n // partial tree. That's why this node is sometimes null. Once PPR lands,\n // loading.js will no longer have special behavior and we can traverse the\n // data tree instead.\n //\n // We should also consider merging the router state tree and the data tree\n // in the response format, so that we don't have to send the keys twice.\n // Then the client can convert them into separate representations.\n const parallelSeedData = cacheNodeSeedData !== null && cacheNodeSeedData[1][key] !== undefined ? cacheNodeSeedData[1][key] : null;\n if (existingCache) {\n const existingParallelRoutesCacheNode = existingCache.parallelRoutes.get(key);\n if (existingParallelRoutesCacheNode) {\n let parallelRouteCacheNode = new Map(existingParallelRoutesCacheNode);\n const existingCacheNode = parallelRouteCacheNode.get(cacheKey);\n let newCacheNode;\n if (parallelSeedData !== null) {\n // New data was sent from the server.\n const seedNode = parallelSeedData[2];\n newCacheNode = {\n lazyData: null,\n rsc: seedNode,\n // This is a PPR-only field. When PPR is enabled, we shouldn't hit\n // this path during a navigation, but until PPR is fully implemented\n // yet it's possible the existing node does have a non-null\n // `prefetchRsc`. As an incremental step, we'll just de-opt to the\n // old behavior — no PPR value.\n prefetchRsc: null,\n parallelRoutes: new Map(existingCacheNode == null ? void 0 : existingCacheNode.parallelRoutes)\n };\n } else if (wasPrefetched && existingCacheNode) {\n // No new data was sent from the server, but the existing cache node\n // was prefetched, so we should reuse that.\n newCacheNode = {\n lazyData: existingCacheNode.lazyData,\n rsc: existingCacheNode.rsc,\n // This is a PPR-only field. Unlike the previous branch, since we're\n // just cloning the existing cache node, we might as well keep the\n // PPR value, if it exists.\n prefetchRsc: existingCacheNode.prefetchRsc,\n parallelRoutes: new Map(existingCacheNode.parallelRoutes)\n };\n } else {\n // No data available for this node. This will trigger a lazy fetch\n // during render.\n newCacheNode = {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n parallelRoutes: new Map(existingCacheNode == null ? void 0 : existingCacheNode.parallelRoutes)\n };\n }\n // Overrides the cache key with the new cache node.\n parallelRouteCacheNode.set(cacheKey, newCacheNode);\n // Traverse deeper to apply the head / fill lazy items till the head.\n fillLazyItemsTillLeafWithHead(newCacheNode, existingCacheNode, parallelRouteState, parallelSeedData ? parallelSeedData : null, head, wasPrefetched);\n newCache.parallelRoutes.set(key, parallelRouteCacheNode);\n continue;\n }\n }\n let newCacheNode;\n if (parallelSeedData !== null) {\n // New data was sent from the server.\n const seedNode = parallelSeedData[2];\n newCacheNode = {\n lazyData: null,\n rsc: seedNode,\n prefetchRsc: null,\n parallelRoutes: new Map()\n };\n } else {\n // No data available for this node. This will trigger a lazy fetch\n // during render.\n newCacheNode = {\n lazyData: null,\n rsc: null,\n prefetchRsc: null,\n parallelRoutes: new Map()\n };\n }\n const existingParallelRoutes = newCache.parallelRoutes.get(key);\n if (existingParallelRoutes) {\n existingParallelRoutes.set(cacheKey, newCacheNode);\n } else {\n newCache.parallelRoutes.set(key, new Map([\n [\n cacheKey,\n newCacheNode\n ]\n ]));\n }\n fillLazyItemsTillLeafWithHead(newCacheNode, undefined, parallelRouteState, parallelSeedData, head, wasPrefetched);\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fill-lazy-items-till-leaf-with-head.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGlFQUFnRTtJQUM1REksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHdCQUF3QkMsbUJBQU9BLENBQUMsMklBQTJCO0FBQ2pFLFNBQVNGLDhCQUE4QkcsUUFBUSxFQUFFQyxhQUFhLEVBQUVDLFdBQVcsRUFBRUMsaUJBQWlCLEVBQUVDLElBQUksRUFBRUMsYUFBYTtJQUMvRyxNQUFNQyxnQkFBZ0JmLE9BQU9nQixJQUFJLENBQUNMLFdBQVcsQ0FBQyxFQUFFLEVBQUVNLE1BQU0sS0FBSztJQUM3RCxJQUFJRixlQUFlO1FBQ2ZOLFNBQVNJLElBQUksR0FBR0E7UUFDaEI7SUFDSjtJQUNBLHVGQUF1RjtJQUN2RixJQUFJLE1BQU1LLE9BQU9QLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDNUIsTUFBTVEscUJBQXFCUixXQUFXLENBQUMsRUFBRSxDQUFDTyxJQUFJO1FBQzlDLE1BQU1FLDBCQUEwQkQsa0JBQWtCLENBQUMsRUFBRTtRQUNyRCxNQUFNRSxXQUFXLENBQUMsR0FBR2Qsc0JBQXNCZSxvQkFBb0IsRUFBRUY7UUFDakUsNEVBQTRFO1FBQzVFLDJFQUEyRTtRQUMzRSx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLDBFQUEwRTtRQUMxRSxxQkFBcUI7UUFDckIsRUFBRTtRQUNGLDBFQUEwRTtRQUMxRSx3RUFBd0U7UUFDeEUsa0VBQWtFO1FBQ2xFLE1BQU1HLG1CQUFtQlgsc0JBQXNCLFFBQVFBLGlCQUFpQixDQUFDLEVBQUUsQ0FBQ00sSUFBSSxLQUFLTSxZQUFZWixpQkFBaUIsQ0FBQyxFQUFFLENBQUNNLElBQUksR0FBRztRQUM3SCxJQUFJUixlQUFlO1lBQ2YsTUFBTWUsa0NBQWtDZixjQUFjZ0IsY0FBYyxDQUFDckIsR0FBRyxDQUFDYTtZQUN6RSxJQUFJTyxpQ0FBaUM7Z0JBQ2pDLElBQUlFLHlCQUF5QixJQUFJQyxJQUFJSDtnQkFDckMsTUFBTUksb0JBQW9CRix1QkFBdUJ0QixHQUFHLENBQUNnQjtnQkFDckQsSUFBSVM7Z0JBQ0osSUFBSVAscUJBQXFCLE1BQU07b0JBQzNCLHFDQUFxQztvQkFDckMsTUFBTVEsV0FBV1IsZ0JBQWdCLENBQUMsRUFBRTtvQkFDcENPLGVBQWU7d0JBQ1hFLFVBQVU7d0JBQ1ZDLEtBQUtGO3dCQUNMLGtFQUFrRTt3QkFDbEUsb0VBQW9FO3dCQUNwRSwyREFBMkQ7d0JBQzNELGtFQUFrRTt3QkFDbEUsK0JBQStCO3dCQUMvQkcsYUFBYTt3QkFDYlIsZ0JBQWdCLElBQUlFLElBQUlDLHFCQUFxQixPQUFPLEtBQUssSUFBSUEsa0JBQWtCSCxjQUFjO29CQUNqRztnQkFDSixPQUFPLElBQUlaLGlCQUFpQmUsbUJBQW1CO29CQUMzQyxvRUFBb0U7b0JBQ3BFLDJDQUEyQztvQkFDM0NDLGVBQWU7d0JBQ1hFLFVBQVVILGtCQUFrQkcsUUFBUTt3QkFDcENDLEtBQUtKLGtCQUFrQkksR0FBRzt3QkFDMUIsb0VBQW9FO3dCQUNwRSxrRUFBa0U7d0JBQ2xFLDJCQUEyQjt3QkFDM0JDLGFBQWFMLGtCQUFrQkssV0FBVzt3QkFDMUNSLGdCQUFnQixJQUFJRSxJQUFJQyxrQkFBa0JILGNBQWM7b0JBQzVEO2dCQUNKLE9BQU87b0JBQ0gsa0VBQWtFO29CQUNsRSxpQkFBaUI7b0JBQ2pCSSxlQUFlO3dCQUNYRSxVQUFVO3dCQUNWQyxLQUFLO3dCQUNMQyxhQUFhO3dCQUNiUixnQkFBZ0IsSUFBSUUsSUFBSUMscUJBQXFCLE9BQU8sS0FBSyxJQUFJQSxrQkFBa0JILGNBQWM7b0JBQ2pHO2dCQUNKO2dCQUNBLG1EQUFtRDtnQkFDbkRDLHVCQUF1QlEsR0FBRyxDQUFDZCxVQUFVUztnQkFDckMscUVBQXFFO2dCQUNyRXhCLDhCQUE4QndCLGNBQWNELG1CQUFtQlYsb0JBQW9CSSxtQkFBbUJBLG1CQUFtQixNQUFNVixNQUFNQztnQkFDcklMLFNBQVNpQixjQUFjLENBQUNTLEdBQUcsQ0FBQ2pCLEtBQUtTO2dCQUNqQztZQUNKO1FBQ0o7UUFDQSxJQUFJRztRQUNKLElBQUlQLHFCQUFxQixNQUFNO1lBQzNCLHFDQUFxQztZQUNyQyxNQUFNUSxXQUFXUixnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3BDTyxlQUFlO2dCQUNYRSxVQUFVO2dCQUNWQyxLQUFLRjtnQkFDTEcsYUFBYTtnQkFDYlIsZ0JBQWdCLElBQUlFO1lBQ3hCO1FBQ0osT0FBTztZQUNILGtFQUFrRTtZQUNsRSxpQkFBaUI7WUFDakJFLGVBQWU7Z0JBQ1hFLFVBQVU7Z0JBQ1ZDLEtBQUs7Z0JBQ0xDLGFBQWE7Z0JBQ2JSLGdCQUFnQixJQUFJRTtZQUN4QjtRQUNKO1FBQ0EsTUFBTVEseUJBQXlCM0IsU0FBU2lCLGNBQWMsQ0FBQ3JCLEdBQUcsQ0FBQ2E7UUFDM0QsSUFBSWtCLHdCQUF3QjtZQUN4QkEsdUJBQXVCRCxHQUFHLENBQUNkLFVBQVVTO1FBQ3pDLE9BQU87WUFDSHJCLFNBQVNpQixjQUFjLENBQUNTLEdBQUcsQ0FBQ2pCLEtBQUssSUFBSVUsSUFBSTtnQkFDckM7b0JBQ0lQO29CQUNBUztpQkFDSDthQUNKO1FBQ0w7UUFDQXhCLDhCQUE4QndCLGNBQWNOLFdBQVdMLG9CQUFvQkksa0JBQWtCVixNQUFNQztJQUN2RztBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9aLFFBQVFtQyxPQUFPLEtBQUssY0FBZSxPQUFPbkMsUUFBUW1DLE9BQU8sS0FBSyxZQUFZbkMsUUFBUW1DLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT25DLFFBQVFtQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdEMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRbUMsT0FBTyxFQUFFLGNBQWM7UUFBRWxDLE9BQU87SUFBSztJQUNuRUgsT0FBT3VDLE1BQU0sQ0FBQ3JDLFFBQVFtQyxPQUFPLEVBQUVuQztJQUMvQnNDLE9BQU90QyxPQUFPLEdBQUdBLFFBQVFtQyxPQUFPO0FBQ2xDLEVBRUEsK0RBQStEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWQuanM/NmM5ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZDtcbiAgICB9XG59KTtcbmNvbnN0IF9jcmVhdGVyb3V0ZXJjYWNoZWtleSA9IHJlcXVpcmUoXCIuL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5XCIpO1xuZnVuY3Rpb24gZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQobmV3Q2FjaGUsIGV4aXN0aW5nQ2FjaGUsIHJvdXRlclN0YXRlLCBjYWNoZU5vZGVTZWVkRGF0YSwgaGVhZCwgd2FzUHJlZmV0Y2hlZCkge1xuICAgIGNvbnN0IGlzTGFzdFNlZ21lbnQgPSBPYmplY3Qua2V5cyhyb3V0ZXJTdGF0ZVsxXSkubGVuZ3RoID09PSAwO1xuICAgIGlmIChpc0xhc3RTZWdtZW50KSB7XG4gICAgICAgIG5ld0NhY2hlLmhlYWQgPSBoZWFkO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFJlbW92ZSBzZWdtZW50IHRoYXQgd2UgZ290IGRhdGEgZm9yIHNvIHRoYXQgaXQgaXMgZmlsbGVkIGluIGR1cmluZyByZW5kZXJpbmcgb2YgcnNjLlxuICAgIGZvcihjb25zdCBrZXkgaW4gcm91dGVyU3RhdGVbMV0pe1xuICAgICAgICBjb25zdCBwYXJhbGxlbFJvdXRlU3RhdGUgPSByb3V0ZXJTdGF0ZVsxXVtrZXldO1xuICAgICAgICBjb25zdCBzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZSA9IHBhcmFsbGVsUm91dGVTdGF0ZVswXTtcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSAoMCwgX2NyZWF0ZXJvdXRlcmNhY2hla2V5LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZSk7XG4gICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCB0cmF2ZXJzZSB0aGUgY2FjaGVOb2RlU2VlZERhdGEgdHJlZSBpbnN0ZWFkIG9mIHRoZSByb3V0ZXJcbiAgICAgICAgLy8gc3RhdGUgdHJlZS4gSWRlYWxseSwgdGhleSB3b3VsZCBhbHdheXMgYmUgdGhlIHNhbWUgc2hhcGUsIGJ1dCBiZWNhdXNlIG9mXG4gICAgICAgIC8vIHRoZSBsb2FkaW5nLmpzIHBhdHRlcm4sIGNhY2hlTm9kZVNlZWREYXRhIHNvbWV0aW1lcyBvbmx5IHJlcHJlc2VudHMgYVxuICAgICAgICAvLyBwYXJ0aWFsIHRyZWUuIFRoYXQncyB3aHkgdGhpcyBub2RlIGlzIHNvbWV0aW1lcyBudWxsLiBPbmNlIFBQUiBsYW5kcyxcbiAgICAgICAgLy8gbG9hZGluZy5qcyB3aWxsIG5vIGxvbmdlciBoYXZlIHNwZWNpYWwgYmVoYXZpb3IgYW5kIHdlIGNhbiB0cmF2ZXJzZSB0aGVcbiAgICAgICAgLy8gZGF0YSB0cmVlIGluc3RlYWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIHNob3VsZCBhbHNvIGNvbnNpZGVyIG1lcmdpbmcgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIGFuZCB0aGUgZGF0YSB0cmVlXG4gICAgICAgIC8vIGluIHRoZSByZXNwb25zZSBmb3JtYXQsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBzZW5kIHRoZSBrZXlzIHR3aWNlLlxuICAgICAgICAvLyBUaGVuIHRoZSBjbGllbnQgY2FuIGNvbnZlcnQgdGhlbSBpbnRvIHNlcGFyYXRlIHJlcHJlc2VudGF0aW9ucy5cbiAgICAgICAgY29uc3QgcGFyYWxsZWxTZWVkRGF0YSA9IGNhY2hlTm9kZVNlZWREYXRhICE9PSBudWxsICYmIGNhY2hlTm9kZVNlZWREYXRhWzFdW2tleV0gIT09IHVuZGVmaW5lZCA/IGNhY2hlTm9kZVNlZWREYXRhWzFdW2tleV0gOiBudWxsO1xuICAgICAgICBpZiAoZXhpc3RpbmdDYWNoZSkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSA9IGV4aXN0aW5nQ2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSkge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbGxlbFJvdXRlQ2FjaGVOb2RlID0gbmV3IE1hcChleGlzdGluZ1BhcmFsbGVsUm91dGVzQ2FjaGVOb2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0NhY2hlTm9kZSA9IHBhcmFsbGVsUm91dGVDYWNoZU5vZGUuZ2V0KGNhY2hlS2V5KTtcbiAgICAgICAgICAgICAgICBsZXQgbmV3Q2FjaGVOb2RlO1xuICAgICAgICAgICAgICAgIGlmIChwYXJhbGxlbFNlZWREYXRhICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5ldyBkYXRhIHdhcyBzZW50IGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VlZE5vZGUgPSBwYXJhbGxlbFNlZWREYXRhWzJdO1xuICAgICAgICAgICAgICAgICAgICBuZXdDYWNoZU5vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJzYzogc2VlZE5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgUFBSLW9ubHkgZmllbGQuIFdoZW4gUFBSIGlzIGVuYWJsZWQsIHdlIHNob3VsZG4ndCBoaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgcGF0aCBkdXJpbmcgYSBuYXZpZ2F0aW9uLCBidXQgdW50aWwgUFBSIGlzIGZ1bGx5IGltcGxlbWVudGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB5ZXQgaXQncyBwb3NzaWJsZSB0aGUgZXhpc3Rpbmcgbm9kZSBkb2VzIGhhdmUgYSBub24tbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYHByZWZldGNoUnNjYC4gQXMgYW4gaW5jcmVtZW50YWwgc3RlcCwgd2UnbGwganVzdCBkZS1vcHQgdG8gdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbGQgYmVoYXZpb3Ig4oCUIG5vIFBQUiB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoZXhpc3RpbmdDYWNoZU5vZGUgPT0gbnVsbCA/IHZvaWQgMCA6IGV4aXN0aW5nQ2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2FzUHJlZmV0Y2hlZCAmJiBleGlzdGluZ0NhY2hlTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBObyBuZXcgZGF0YSB3YXMgc2VudCBmcm9tIHRoZSBzZXJ2ZXIsIGJ1dCB0aGUgZXhpc3RpbmcgY2FjaGUgbm9kZVxuICAgICAgICAgICAgICAgICAgICAvLyB3YXMgcHJlZmV0Y2hlZCwgc28gd2Ugc2hvdWxkIHJldXNlIHRoYXQuXG4gICAgICAgICAgICAgICAgICAgIG5ld0NhY2hlTm9kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhenlEYXRhOiBleGlzdGluZ0NhY2hlTm9kZS5sYXp5RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJzYzogZXhpc3RpbmdDYWNoZU5vZGUucnNjLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFBQUi1vbmx5IGZpZWxkLiBVbmxpa2UgdGhlIHByZXZpb3VzIGJyYW5jaCwgc2luY2Ugd2UncmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgY2xvbmluZyB0aGUgZXhpc3RpbmcgY2FjaGUgbm9kZSwgd2UgbWlnaHQgYXMgd2VsbCBrZWVwIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUFBSIHZhbHVlLCBpZiBpdCBleGlzdHMuXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXRjaFJzYzogZXhpc3RpbmdDYWNoZU5vZGUucHJlZmV0Y2hSc2MsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcChleGlzdGluZ0NhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcylcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBObyBkYXRhIGF2YWlsYWJsZSBmb3IgdGhpcyBub2RlLiBUaGlzIHdpbGwgdHJpZ2dlciBhIGxhenkgZmV0Y2hcbiAgICAgICAgICAgICAgICAgICAgLy8gZHVyaW5nIHJlbmRlci5cbiAgICAgICAgICAgICAgICAgICAgbmV3Q2FjaGVOb2RlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICByc2M6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKGV4aXN0aW5nQ2FjaGVOb2RlID09IG51bGwgPyB2b2lkIDAgOiBleGlzdGluZ0NhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcylcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gT3ZlcnJpZGVzIHRoZSBjYWNoZSBrZXkgd2l0aCB0aGUgbmV3IGNhY2hlIG5vZGUuXG4gICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZUNhY2hlTm9kZS5zZXQoY2FjaGVLZXksIG5ld0NhY2hlTm9kZSk7XG4gICAgICAgICAgICAgICAgLy8gVHJhdmVyc2UgZGVlcGVyIHRvIGFwcGx5IHRoZSBoZWFkIC8gZmlsbCBsYXp5IGl0ZW1zIHRpbGwgdGhlIGhlYWQuXG4gICAgICAgICAgICAgICAgZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQobmV3Q2FjaGVOb2RlLCBleGlzdGluZ0NhY2hlTm9kZSwgcGFyYWxsZWxSb3V0ZVN0YXRlLCBwYXJhbGxlbFNlZWREYXRhID8gcGFyYWxsZWxTZWVkRGF0YSA6IG51bGwsIGhlYWQsIHdhc1ByZWZldGNoZWQpO1xuICAgICAgICAgICAgICAgIG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLnNldChrZXksIHBhcmFsbGVsUm91dGVDYWNoZU5vZGUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBuZXdDYWNoZU5vZGU7XG4gICAgICAgIGlmIChwYXJhbGxlbFNlZWREYXRhICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBOZXcgZGF0YSB3YXMgc2VudCBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICAgICAgICBjb25zdCBzZWVkTm9kZSA9IHBhcmFsbGVsU2VlZERhdGFbMl07XG4gICAgICAgICAgICBuZXdDYWNoZU5vZGUgPSB7XG4gICAgICAgICAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgcnNjOiBzZWVkTm9kZSxcbiAgICAgICAgICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gZGF0YSBhdmFpbGFibGUgZm9yIHRoaXMgbm9kZS4gVGhpcyB3aWxsIHRyaWdnZXIgYSBsYXp5IGZldGNoXG4gICAgICAgICAgICAvLyBkdXJpbmcgcmVuZGVyLlxuICAgICAgICAgICAgbmV3Q2FjaGVOb2RlID0ge1xuICAgICAgICAgICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgIHJzYzogbnVsbCxcbiAgICAgICAgICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcCgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXMgPSBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXMpIHtcbiAgICAgICAgICAgIGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXMuc2V0KGNhY2hlS2V5LCBuZXdDYWNoZU5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuc2V0KGtleSwgbmV3IE1hcChbXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBjYWNoZUtleSxcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2FjaGVOb2RlXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgXSkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKG5ld0NhY2hlTm9kZSwgdW5kZWZpbmVkLCBwYXJhbGxlbFJvdXRlU3RhdGUsIHBhcmFsbGVsU2VlZERhdGEsIGhlYWQsIHdhc1ByZWZldGNoZWQpO1xuICAgIH1cbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWQuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkIiwiX2NyZWF0ZXJvdXRlcmNhY2hla2V5IiwicmVxdWlyZSIsIm5ld0NhY2hlIiwiZXhpc3RpbmdDYWNoZSIsInJvdXRlclN0YXRlIiwiY2FjaGVOb2RlU2VlZERhdGEiLCJoZWFkIiwid2FzUHJlZmV0Y2hlZCIsImlzTGFzdFNlZ21lbnQiLCJrZXlzIiwibGVuZ3RoIiwia2V5IiwicGFyYWxsZWxSb3V0ZVN0YXRlIiwic2VnbWVudEZvclBhcmFsbGVsUm91dGUiLCJjYWNoZUtleSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwicGFyYWxsZWxTZWVkRGF0YSIsInVuZGVmaW5lZCIsImV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUiLCJwYXJhbGxlbFJvdXRlcyIsInBhcmFsbGVsUm91dGVDYWNoZU5vZGUiLCJNYXAiLCJleGlzdGluZ0NhY2hlTm9kZSIsIm5ld0NhY2hlTm9kZSIsInNlZWROb2RlIiwibGF6eURhdGEiLCJyc2MiLCJwcmVmZXRjaFJzYyIsInNldCIsImV4aXN0aW5nUGFyYWxsZWxSb3V0ZXMiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/get-prefetch-cache-entry-status.js": +/*!****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/get-prefetch-cache-entry-status.js ***! + \****************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PrefetchCacheEntryStatus: function() {\n return PrefetchCacheEntryStatus;\n },\n getPrefetchEntryCacheStatus: function() {\n return getPrefetchEntryCacheStatus;\n }\n});\nconst FIVE_MINUTES = 5 * 60 * 1000;\nconst THIRTY_SECONDS = 30 * 1000;\nvar PrefetchCacheEntryStatus;\n(function(PrefetchCacheEntryStatus) {\n PrefetchCacheEntryStatus[\"fresh\"] = \"fresh\";\n PrefetchCacheEntryStatus[\"reusable\"] = \"reusable\";\n PrefetchCacheEntryStatus[\"expired\"] = \"expired\";\n PrefetchCacheEntryStatus[\"stale\"] = \"stale\";\n})(PrefetchCacheEntryStatus || (PrefetchCacheEntryStatus = {}));\nfunction getPrefetchEntryCacheStatus(param) {\n let { kind, prefetchTime, lastUsedTime } = param;\n // if the cache entry was prefetched or read less than 30s ago, then we want to re-use it\n if (Date.now() < (lastUsedTime != null ? lastUsedTime : prefetchTime) + THIRTY_SECONDS) {\n return lastUsedTime ? \"reusable\" : \"fresh\";\n }\n // if the cache entry was prefetched less than 5 mins ago, then we want to re-use only the loading state\n if (kind === \"auto\") {\n if (Date.now() < prefetchTime + FIVE_MINUTES) {\n return \"stale\";\n }\n }\n // if the cache entry was prefetched less than 5 mins ago and was a \"full\" prefetch, then we want to re-use it \"full\n if (kind === \"full\") {\n if (Date.now() < prefetchTime + FIVE_MINUTES) {\n return \"reusable\";\n }\n }\n return \"expired\";\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-prefetch-cache-entry-status.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZ2V0LXByZWZldGNoLWNhY2hlLWVudHJ5LXN0YXR1cy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsMEJBQTBCO1FBQ3RCLE9BQU9BO0lBQ1g7SUFDQUMsNkJBQTZCO1FBQ3pCLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLGVBQWUsSUFBSSxLQUFLO0FBQzlCLE1BQU1DLGlCQUFpQixLQUFLO0FBQzVCLElBQUlUO0FBQ0gsVUFBU0Esd0JBQXdCO0lBQzlCQSx3QkFBd0IsQ0FBQyxRQUFRLEdBQUc7SUFDcENBLHdCQUF3QixDQUFDLFdBQVcsR0FBRztJQUN2Q0Esd0JBQXdCLENBQUMsVUFBVSxHQUFHO0lBQ3RDQSx3QkFBd0IsQ0FBQyxRQUFRLEdBQUc7QUFDeEMsR0FBR0EsNEJBQTZCQSxDQUFBQSwyQkFBMkIsQ0FBQztBQUM1RCxTQUFTQyw0QkFBNEJTLEtBQUs7SUFDdEMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLFlBQVksRUFBRUMsWUFBWSxFQUFFLEdBQUdIO0lBQzNDLHlGQUF5RjtJQUN6RixJQUFJSSxLQUFLQyxHQUFHLEtBQUssQ0FBQ0YsZ0JBQWdCLE9BQU9BLGVBQWVELFlBQVcsSUFBS0gsZ0JBQWdCO1FBQ3BGLE9BQU9JLGVBQWUsYUFBYTtJQUN2QztJQUNBLHdHQUF3RztJQUN4RyxJQUFJRixTQUFTLFFBQVE7UUFDakIsSUFBSUcsS0FBS0MsR0FBRyxLQUFLSCxlQUFlSixjQUFjO1lBQzFDLE9BQU87UUFDWDtJQUNKO0lBQ0Esb0hBQW9IO0lBQ3BILElBQUlHLFNBQVMsUUFBUTtRQUNqQixJQUFJRyxLQUFLQyxHQUFHLEtBQUtILGVBQWVKLGNBQWM7WUFDMUMsT0FBTztRQUNYO0lBQ0o7SUFDQSxPQUFPO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT1gsUUFBUW1CLE9BQU8sS0FBSyxjQUFlLE9BQU9uQixRQUFRbUIsT0FBTyxLQUFLLFlBQVluQixRQUFRbUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPbkIsUUFBUW1CLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt0QixPQUFPQyxjQUFjLENBQUNDLFFBQVFtQixPQUFPLEVBQUUsY0FBYztRQUFFbEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPdUIsTUFBTSxDQUFDckIsUUFBUW1CLE9BQU8sRUFBRW5CO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVFtQixPQUFPO0FBQ2xDLEVBRUEsMkRBQTJEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZ2V0LXByZWZldGNoLWNhY2hlLWVudHJ5LXN0YXR1cy5qcz82Y2RhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzOiBudWxsLFxuICAgIGdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1czogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzO1xuICAgIH0sXG4gICAgZ2V0UHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1cztcbiAgICB9XG59KTtcbmNvbnN0IEZJVkVfTUlOVVRFUyA9IDUgKiA2MCAqIDEwMDA7XG5jb25zdCBUSElSVFlfU0VDT05EUyA9IDMwICogMTAwMDtcbnZhciBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXM7XG4oZnVuY3Rpb24oUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzKSB7XG4gICAgUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzW1wiZnJlc2hcIl0gPSBcImZyZXNoXCI7XG4gICAgUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzW1wicmV1c2FibGVcIl0gPSBcInJldXNhYmxlXCI7XG4gICAgUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzW1wiZXhwaXJlZFwiXSA9IFwiZXhwaXJlZFwiO1xuICAgIFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1c1tcInN0YWxlXCJdID0gXCJzdGFsZVwiO1xufSkoUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzIHx8IChQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMgPSB7fSkpO1xuZnVuY3Rpb24gZ2V0UHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzKHBhcmFtKSB7XG4gICAgbGV0IHsga2luZCwgcHJlZmV0Y2hUaW1lLCBsYXN0VXNlZFRpbWUgfSA9IHBhcmFtO1xuICAgIC8vIGlmIHRoZSBjYWNoZSBlbnRyeSB3YXMgcHJlZmV0Y2hlZCBvciByZWFkIGxlc3MgdGhhbiAzMHMgYWdvLCB0aGVuIHdlIHdhbnQgdG8gcmUtdXNlIGl0XG4gICAgaWYgKERhdGUubm93KCkgPCAobGFzdFVzZWRUaW1lICE9IG51bGwgPyBsYXN0VXNlZFRpbWUgOiBwcmVmZXRjaFRpbWUpICsgVEhJUlRZX1NFQ09ORFMpIHtcbiAgICAgICAgcmV0dXJuIGxhc3RVc2VkVGltZSA/IFwicmV1c2FibGVcIiA6IFwiZnJlc2hcIjtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGNhY2hlIGVudHJ5IHdhcyBwcmVmZXRjaGVkIGxlc3MgdGhhbiA1IG1pbnMgYWdvLCB0aGVuIHdlIHdhbnQgdG8gcmUtdXNlIG9ubHkgdGhlIGxvYWRpbmcgc3RhdGVcbiAgICBpZiAoa2luZCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKERhdGUubm93KCkgPCBwcmVmZXRjaFRpbWUgKyBGSVZFX01JTlVURVMpIHtcbiAgICAgICAgICAgIHJldHVybiBcInN0YWxlXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gaWYgdGhlIGNhY2hlIGVudHJ5IHdhcyBwcmVmZXRjaGVkIGxlc3MgdGhhbiA1IG1pbnMgYWdvIGFuZCB3YXMgYSBcImZ1bGxcIiBwcmVmZXRjaCwgdGhlbiB3ZSB3YW50IHRvIHJlLXVzZSBpdCBcImZ1bGxcbiAgICBpZiAoa2luZCA9PT0gXCJmdWxsXCIpIHtcbiAgICAgICAgaWYgKERhdGUubm93KCkgPCBwcmVmZXRjaFRpbWUgKyBGSVZFX01JTlVURVMpIHtcbiAgICAgICAgICAgIHJldHVybiBcInJldXNhYmxlXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwiZXhwaXJlZFwiO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXQtcHJlZmV0Y2gtY2FjaGUtZW50cnktc3RhdHVzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cyIsImdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1cyIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIkZJVkVfTUlOVVRFUyIsIlRISVJUWV9TRUNPTkRTIiwicGFyYW0iLCJraW5kIiwicHJlZmV0Y2hUaW1lIiwibGFzdFVzZWRUaW1lIiwiRGF0ZSIsIm5vdyIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/get-prefetch-cache-entry-status.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/handle-mutable.js ***! + \***********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"handleMutable\", ({\n enumerable: true,\n get: function() {\n return handleMutable;\n }\n}));\nconst _computechangedpath = __webpack_require__(/*! ./compute-changed-path */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nfunction isNotUndefined(value) {\n return typeof value !== \"undefined\";\n}\nfunction handleMutable(state, mutable) {\n var _mutable_canonicalUrl;\n var _mutable_shouldScroll;\n // shouldScroll is true by default, can override to false.\n const shouldScroll = (_mutable_shouldScroll = mutable.shouldScroll) != null ? _mutable_shouldScroll : true;\n let nextUrl = state.nextUrl;\n if (isNotUndefined(mutable.patchedTree)) {\n // If we received a patched tree, we need to compute the changed path.\n const changedPath = (0, _computechangedpath.computeChangedPath)(state.tree, mutable.patchedTree);\n if (changedPath) {\n // If the tree changed, we need to update the nextUrl\n nextUrl = changedPath;\n } else if (!nextUrl) {\n // if the tree ends up being the same (ie, no changed path), and we don't have a nextUrl, then we should use the canonicalUrl\n nextUrl = state.canonicalUrl;\n }\n // otherwise this will be a no-op and continue to use the existing nextUrl\n }\n var _mutable_scrollableSegments;\n return {\n buildId: state.buildId,\n // Set href.\n canonicalUrl: isNotUndefined(mutable.canonicalUrl) ? mutable.canonicalUrl === state.canonicalUrl ? state.canonicalUrl : mutable.canonicalUrl : state.canonicalUrl,\n pushRef: {\n pendingPush: isNotUndefined(mutable.pendingPush) ? mutable.pendingPush : state.pushRef.pendingPush,\n mpaNavigation: isNotUndefined(mutable.mpaNavigation) ? mutable.mpaNavigation : state.pushRef.mpaNavigation,\n preserveCustomHistoryState: isNotUndefined(mutable.preserveCustomHistoryState) ? mutable.preserveCustomHistoryState : state.pushRef.preserveCustomHistoryState\n },\n // All navigation requires scroll and focus management to trigger.\n focusAndScrollRef: {\n apply: shouldScroll ? isNotUndefined(mutable == null ? void 0 : mutable.scrollableSegments) ? true : state.focusAndScrollRef.apply : false,\n onlyHashChange: !!mutable.hashFragment && state.canonicalUrl.split(\"#\", 1)[0] === ((_mutable_canonicalUrl = mutable.canonicalUrl) == null ? void 0 : _mutable_canonicalUrl.split(\"#\", 1)[0]),\n hashFragment: shouldScroll ? mutable.hashFragment && mutable.hashFragment !== \"\" ? decodeURIComponent(mutable.hashFragment.slice(1)) : state.focusAndScrollRef.hashFragment : null,\n segmentPaths: shouldScroll ? (_mutable_scrollableSegments = mutable == null ? void 0 : mutable.scrollableSegments) != null ? _mutable_scrollableSegments : state.focusAndScrollRef.segmentPaths : []\n },\n // Apply cache.\n cache: mutable.cache ? mutable.cache : state.cache,\n prefetchCache: mutable.prefetchCache ? mutable.prefetchCache : state.prefetchCache,\n // Apply patched router state.\n tree: isNotUndefined(mutable.patchedTree) ? mutable.patchedTree : state.tree,\n nextUrl\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=handle-mutable.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaGFuZGxlLW11dGFibGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGlEQUFnRDtJQUM1Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHNCQUFzQkMsbUJBQU9BLENBQUMscUlBQXdCO0FBQzVELFNBQVNDLGVBQWVOLEtBQUs7SUFDekIsT0FBTyxPQUFPQSxVQUFVO0FBQzVCO0FBQ0EsU0FBU0csY0FBY0ksS0FBSyxFQUFFQyxPQUFPO0lBQ2pDLElBQUlDO0lBQ0osSUFBSUM7SUFDSiwwREFBMEQ7SUFDMUQsTUFBTUMsZUFBZSxDQUFDRCx3QkFBd0JGLFFBQVFHLFlBQVksS0FBSyxPQUFPRCx3QkFBd0I7SUFDdEcsSUFBSUUsVUFBVUwsTUFBTUssT0FBTztJQUMzQixJQUFJTixlQUFlRSxRQUFRSyxXQUFXLEdBQUc7UUFDckMsc0VBQXNFO1FBQ3RFLE1BQU1DLGNBQWMsQ0FBQyxHQUFHVixvQkFBb0JXLGtCQUFrQixFQUFFUixNQUFNUyxJQUFJLEVBQUVSLFFBQVFLLFdBQVc7UUFDL0YsSUFBSUMsYUFBYTtZQUNiLHFEQUFxRDtZQUNyREYsVUFBVUU7UUFDZCxPQUFPLElBQUksQ0FBQ0YsU0FBUztZQUNqQiw2SEFBNkg7WUFDN0hBLFVBQVVMLE1BQU1VLFlBQVk7UUFDaEM7SUFDSiwwRUFBMEU7SUFDMUU7SUFDQSxJQUFJQztJQUNKLE9BQU87UUFDSEMsU0FBU1osTUFBTVksT0FBTztRQUN0QixZQUFZO1FBQ1pGLGNBQWNYLGVBQWVFLFFBQVFTLFlBQVksSUFBSVQsUUFBUVMsWUFBWSxLQUFLVixNQUFNVSxZQUFZLEdBQUdWLE1BQU1VLFlBQVksR0FBR1QsUUFBUVMsWUFBWSxHQUFHVixNQUFNVSxZQUFZO1FBQ2pLRyxTQUFTO1lBQ0xDLGFBQWFmLGVBQWVFLFFBQVFhLFdBQVcsSUFBSWIsUUFBUWEsV0FBVyxHQUFHZCxNQUFNYSxPQUFPLENBQUNDLFdBQVc7WUFDbEdDLGVBQWVoQixlQUFlRSxRQUFRYyxhQUFhLElBQUlkLFFBQVFjLGFBQWEsR0FBR2YsTUFBTWEsT0FBTyxDQUFDRSxhQUFhO1lBQzFHQyw0QkFBNEJqQixlQUFlRSxRQUFRZSwwQkFBMEIsSUFBSWYsUUFBUWUsMEJBQTBCLEdBQUdoQixNQUFNYSxPQUFPLENBQUNHLDBCQUEwQjtRQUNsSztRQUNBLGtFQUFrRTtRQUNsRUMsbUJBQW1CO1lBQ2ZDLE9BQU9kLGVBQWVMLGVBQWVFLFdBQVcsT0FBTyxLQUFLLElBQUlBLFFBQVFrQixrQkFBa0IsSUFBSSxPQUFPbkIsTUFBTWlCLGlCQUFpQixDQUFDQyxLQUFLLEdBQUc7WUFDcklFLGdCQUFnQixDQUFDLENBQUNuQixRQUFRb0IsWUFBWSxJQUFJckIsTUFBTVUsWUFBWSxDQUFDWSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFNLEVBQUNwQix3QkFBd0JELFFBQVFTLFlBQVksS0FBSyxPQUFPLEtBQUssSUFBSVIsc0JBQXNCb0IsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDM0xELGNBQWNqQixlQUNkSCxRQUFRb0IsWUFBWSxJQUFJcEIsUUFBUW9CLFlBQVksS0FBSyxLQUFLRSxtQkFBbUJ0QixRQUFRb0IsWUFBWSxDQUFDRyxLQUFLLENBQUMsTUFBTXhCLE1BQU1pQixpQkFBaUIsQ0FBQ0ksWUFBWSxHQUFHO1lBQ2pKSSxjQUFjckIsZUFBZSxDQUFDTyw4QkFBOEJWLFdBQVcsT0FBTyxLQUFLLElBQUlBLFFBQVFrQixrQkFBa0IsS0FBSyxPQUFPUiw4QkFBOEJYLE1BQU1pQixpQkFBaUIsQ0FBQ1EsWUFBWSxHQUFHLEVBQUU7UUFDeE07UUFDQSxlQUFlO1FBQ2ZDLE9BQU96QixRQUFReUIsS0FBSyxHQUFHekIsUUFBUXlCLEtBQUssR0FBRzFCLE1BQU0wQixLQUFLO1FBQ2xEQyxlQUFlMUIsUUFBUTBCLGFBQWEsR0FBRzFCLFFBQVEwQixhQUFhLEdBQUczQixNQUFNMkIsYUFBYTtRQUNsRiw4QkFBOEI7UUFDOUJsQixNQUFNVixlQUFlRSxRQUFRSyxXQUFXLElBQUlMLFFBQVFLLFdBQVcsR0FBR04sTUFBTVMsSUFBSTtRQUM1RUo7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9iLFFBQVFvQyxPQUFPLEtBQUssY0FBZSxPQUFPcEMsUUFBUW9DLE9BQU8sS0FBSyxZQUFZcEMsUUFBUW9DLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3BDLFFBQVFvQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdkMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRb0MsT0FBTyxFQUFFLGNBQWM7UUFBRW5DLE9BQU87SUFBSztJQUNuRUgsT0FBT3dDLE1BQU0sQ0FBQ3RDLFFBQVFvQyxPQUFPLEVBQUVwQztJQUMvQnVDLE9BQU92QyxPQUFPLEdBQUdBLFFBQVFvQyxPQUFPO0FBQ2xDLEVBRUEsMENBQTBDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaGFuZGxlLW11dGFibGUuanM/NDJmMyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhhbmRsZU11dGFibGVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZU11dGFibGU7XG4gICAgfVxufSk7XG5jb25zdCBfY29tcHV0ZWNoYW5nZWRwYXRoID0gcmVxdWlyZShcIi4vY29tcHV0ZS1jaGFuZ2VkLXBhdGhcIik7XG5mdW5jdGlvbiBpc05vdFVuZGVmaW5lZCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCI7XG59XG5mdW5jdGlvbiBoYW5kbGVNdXRhYmxlKHN0YXRlLCBtdXRhYmxlKSB7XG4gICAgdmFyIF9tdXRhYmxlX2Nhbm9uaWNhbFVybDtcbiAgICB2YXIgX211dGFibGVfc2hvdWxkU2Nyb2xsO1xuICAgIC8vIHNob3VsZFNjcm9sbCBpcyB0cnVlIGJ5IGRlZmF1bHQsIGNhbiBvdmVycmlkZSB0byBmYWxzZS5cbiAgICBjb25zdCBzaG91bGRTY3JvbGwgPSAoX211dGFibGVfc2hvdWxkU2Nyb2xsID0gbXV0YWJsZS5zaG91bGRTY3JvbGwpICE9IG51bGwgPyBfbXV0YWJsZV9zaG91bGRTY3JvbGwgOiB0cnVlO1xuICAgIGxldCBuZXh0VXJsID0gc3RhdGUubmV4dFVybDtcbiAgICBpZiAoaXNOb3RVbmRlZmluZWQobXV0YWJsZS5wYXRjaGVkVHJlZSkpIHtcbiAgICAgICAgLy8gSWYgd2UgcmVjZWl2ZWQgYSBwYXRjaGVkIHRyZWUsIHdlIG5lZWQgdG8gY29tcHV0ZSB0aGUgY2hhbmdlZCBwYXRoLlxuICAgICAgICBjb25zdCBjaGFuZ2VkUGF0aCA9ICgwLCBfY29tcHV0ZWNoYW5nZWRwYXRoLmNvbXB1dGVDaGFuZ2VkUGF0aCkoc3RhdGUudHJlZSwgbXV0YWJsZS5wYXRjaGVkVHJlZSk7XG4gICAgICAgIGlmIChjaGFuZ2VkUGF0aCkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHRyZWUgY2hhbmdlZCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIG5leHRVcmxcbiAgICAgICAgICAgIG5leHRVcmwgPSBjaGFuZ2VkUGF0aDtcbiAgICAgICAgfSBlbHNlIGlmICghbmV4dFVybCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIHRyZWUgZW5kcyB1cCBiZWluZyB0aGUgc2FtZSAoaWUsIG5vIGNoYW5nZWQgcGF0aCksIGFuZCB3ZSBkb24ndCBoYXZlIGEgbmV4dFVybCwgdGhlbiB3ZSBzaG91bGQgdXNlIHRoZSBjYW5vbmljYWxVcmxcbiAgICAgICAgICAgIG5leHRVcmwgPSBzdGF0ZS5jYW5vbmljYWxVcmw7XG4gICAgICAgIH1cbiAgICAvLyBvdGhlcndpc2UgdGhpcyB3aWxsIGJlIGEgbm8tb3AgYW5kIGNvbnRpbnVlIHRvIHVzZSB0aGUgZXhpc3RpbmcgbmV4dFVybFxuICAgIH1cbiAgICB2YXIgX211dGFibGVfc2Nyb2xsYWJsZVNlZ21lbnRzO1xuICAgIHJldHVybiB7XG4gICAgICAgIGJ1aWxkSWQ6IHN0YXRlLmJ1aWxkSWQsXG4gICAgICAgIC8vIFNldCBocmVmLlxuICAgICAgICBjYW5vbmljYWxVcmw6IGlzTm90VW5kZWZpbmVkKG11dGFibGUuY2Fub25pY2FsVXJsKSA/IG11dGFibGUuY2Fub25pY2FsVXJsID09PSBzdGF0ZS5jYW5vbmljYWxVcmwgPyBzdGF0ZS5jYW5vbmljYWxVcmwgOiBtdXRhYmxlLmNhbm9uaWNhbFVybCA6IHN0YXRlLmNhbm9uaWNhbFVybCxcbiAgICAgICAgcHVzaFJlZjoge1xuICAgICAgICAgICAgcGVuZGluZ1B1c2g6IGlzTm90VW5kZWZpbmVkKG11dGFibGUucGVuZGluZ1B1c2gpID8gbXV0YWJsZS5wZW5kaW5nUHVzaCA6IHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2gsXG4gICAgICAgICAgICBtcGFOYXZpZ2F0aW9uOiBpc05vdFVuZGVmaW5lZChtdXRhYmxlLm1wYU5hdmlnYXRpb24pID8gbXV0YWJsZS5tcGFOYXZpZ2F0aW9uIDogc3RhdGUucHVzaFJlZi5tcGFOYXZpZ2F0aW9uLFxuICAgICAgICAgICAgcHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU6IGlzTm90VW5kZWZpbmVkKG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUpID8gbXV0YWJsZS5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSA6IHN0YXRlLnB1c2hSZWYucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGVcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQWxsIG5hdmlnYXRpb24gcmVxdWlyZXMgc2Nyb2xsIGFuZCBmb2N1cyBtYW5hZ2VtZW50IHRvIHRyaWdnZXIuXG4gICAgICAgIGZvY3VzQW5kU2Nyb2xsUmVmOiB7XG4gICAgICAgICAgICBhcHBseTogc2hvdWxkU2Nyb2xsID8gaXNOb3RVbmRlZmluZWQobXV0YWJsZSA9PSBudWxsID8gdm9pZCAwIDogbXV0YWJsZS5zY3JvbGxhYmxlU2VnbWVudHMpID8gdHJ1ZSA6IHN0YXRlLmZvY3VzQW5kU2Nyb2xsUmVmLmFwcGx5IDogZmFsc2UsXG4gICAgICAgICAgICBvbmx5SGFzaENoYW5nZTogISFtdXRhYmxlLmhhc2hGcmFnbWVudCAmJiBzdGF0ZS5jYW5vbmljYWxVcmwuc3BsaXQoXCIjXCIsIDEpWzBdID09PSAoKF9tdXRhYmxlX2Nhbm9uaWNhbFVybCA9IG11dGFibGUuY2Fub25pY2FsVXJsKSA9PSBudWxsID8gdm9pZCAwIDogX211dGFibGVfY2Fub25pY2FsVXJsLnNwbGl0KFwiI1wiLCAxKVswXSksXG4gICAgICAgICAgICBoYXNoRnJhZ21lbnQ6IHNob3VsZFNjcm9sbCA/IC8vICN0b3AgaXMgaGFuZGxlZCBpbiBsYXlvdXQtcm91dGVyLlxuICAgICAgICAgICAgbXV0YWJsZS5oYXNoRnJhZ21lbnQgJiYgbXV0YWJsZS5oYXNoRnJhZ21lbnQgIT09IFwiXCIgPyBkZWNvZGVVUklDb21wb25lbnQobXV0YWJsZS5oYXNoRnJhZ21lbnQuc2xpY2UoMSkpIDogc3RhdGUuZm9jdXNBbmRTY3JvbGxSZWYuaGFzaEZyYWdtZW50IDogbnVsbCxcbiAgICAgICAgICAgIHNlZ21lbnRQYXRoczogc2hvdWxkU2Nyb2xsID8gKF9tdXRhYmxlX3Njcm9sbGFibGVTZWdtZW50cyA9IG11dGFibGUgPT0gbnVsbCA/IHZvaWQgMCA6IG11dGFibGUuc2Nyb2xsYWJsZVNlZ21lbnRzKSAhPSBudWxsID8gX211dGFibGVfc2Nyb2xsYWJsZVNlZ21lbnRzIDogc3RhdGUuZm9jdXNBbmRTY3JvbGxSZWYuc2VnbWVudFBhdGhzIDogW11cbiAgICAgICAgfSxcbiAgICAgICAgLy8gQXBwbHkgY2FjaGUuXG4gICAgICAgIGNhY2hlOiBtdXRhYmxlLmNhY2hlID8gbXV0YWJsZS5jYWNoZSA6IHN0YXRlLmNhY2hlLFxuICAgICAgICBwcmVmZXRjaENhY2hlOiBtdXRhYmxlLnByZWZldGNoQ2FjaGUgPyBtdXRhYmxlLnByZWZldGNoQ2FjaGUgOiBzdGF0ZS5wcmVmZXRjaENhY2hlLFxuICAgICAgICAvLyBBcHBseSBwYXRjaGVkIHJvdXRlciBzdGF0ZS5cbiAgICAgICAgdHJlZTogaXNOb3RVbmRlZmluZWQobXV0YWJsZS5wYXRjaGVkVHJlZSkgPyBtdXRhYmxlLnBhdGNoZWRUcmVlIDogc3RhdGUudHJlZSxcbiAgICAgICAgbmV4dFVybFxuICAgIH07XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbmRsZS1tdXRhYmxlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJoYW5kbGVNdXRhYmxlIiwiX2NvbXB1dGVjaGFuZ2VkcGF0aCIsInJlcXVpcmUiLCJpc05vdFVuZGVmaW5lZCIsInN0YXRlIiwibXV0YWJsZSIsIl9tdXRhYmxlX2Nhbm9uaWNhbFVybCIsIl9tdXRhYmxlX3Nob3VsZFNjcm9sbCIsInNob3VsZFNjcm9sbCIsIm5leHRVcmwiLCJwYXRjaGVkVHJlZSIsImNoYW5nZWRQYXRoIiwiY29tcHV0ZUNoYW5nZWRQYXRoIiwidHJlZSIsImNhbm9uaWNhbFVybCIsIl9tdXRhYmxlX3Njcm9sbGFibGVTZWdtZW50cyIsImJ1aWxkSWQiLCJwdXNoUmVmIiwicGVuZGluZ1B1c2giLCJtcGFOYXZpZ2F0aW9uIiwicHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUiLCJmb2N1c0FuZFNjcm9sbFJlZiIsImFwcGx5Iiwic2Nyb2xsYWJsZVNlZ21lbnRzIiwib25seUhhc2hDaGFuZ2UiLCJoYXNoRnJhZ21lbnQiLCJzcGxpdCIsImRlY29kZVVSSUNvbXBvbmVudCIsInNsaWNlIiwic2VnbWVudFBhdGhzIiwiY2FjaGUiLCJwcmVmZXRjaENhY2hlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js ***! + \********************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"handleSegmentMismatch\", ({\n enumerable: true,\n get: function() {\n return handleSegmentMismatch;\n }\n}));\nconst _navigatereducer = __webpack_require__(/*! ./reducers/navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nfunction handleSegmentMismatch(state, action, treePatch) {\n if (true) {\n console.warn(\"Performing hard navigation because your application experienced an unrecoverable error. If this keeps occurring, please file a Next.js issue.\\n\\n\" + \"Reason: Segment mismatch\\n\" + (\"Last Action: \" + action.type + \"\\n\\n\") + (\"Current Tree: \" + JSON.stringify(state.tree) + \"\\n\\n\") + (\"Tree Patch Payload: \" + JSON.stringify(treePatch)));\n }\n return (0, _navigatereducer.handleExternalUrl)(state, {}, state.canonicalUrl, true);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=handle-segment-mismatch.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaGFuZGxlLXNlZ21lbnQtbWlzbWF0Y2guanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHlEQUF3RDtJQUNwREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLG1CQUFtQkMsbUJBQU9BLENBQUMsK0lBQTZCO0FBQzlELFNBQVNGLHNCQUFzQkcsS0FBSyxFQUFFQyxNQUFNLEVBQUVDLFNBQVM7SUFDbkQsSUFBSUMsSUFBc0MsRUFBRTtRQUN4Q0MsUUFBUUMsSUFBSSxDQUFDLHNKQUFzSiwrQkFBZ0MsbUJBQWtCSixPQUFPSyxJQUFJLEdBQUcsTUFBSyxJQUFNLG9CQUFtQkMsS0FBS0MsU0FBUyxDQUFDUixNQUFNUyxJQUFJLElBQUksTUFBSyxJQUFNLDBCQUF5QkYsS0FBS0MsU0FBUyxDQUFDTixVQUFTO0lBQzlWO0lBQ0EsT0FBTyxDQUFDLEdBQUdKLGlCQUFpQlksaUJBQWlCLEVBQUVWLE9BQU8sQ0FBQyxHQUFHQSxNQUFNVyxZQUFZLEVBQUU7QUFDbEY7QUFFQSxJQUFJLENBQUMsT0FBT2xCLFFBQVFtQixPQUFPLEtBQUssY0FBZSxPQUFPbkIsUUFBUW1CLE9BQU8sS0FBSyxZQUFZbkIsUUFBUW1CLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT25CLFFBQVFtQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRbUIsT0FBTyxFQUFFLGNBQWM7UUFBRWxCLE9BQU87SUFBSztJQUNuRUgsT0FBT3VCLE1BQU0sQ0FBQ3JCLFFBQVFtQixPQUFPLEVBQUVuQjtJQUMvQnNCLE9BQU90QixPQUFPLEdBQUdBLFFBQVFtQixPQUFPO0FBQ2xDLEVBRUEsbURBQW1EIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaGFuZGxlLXNlZ21lbnQtbWlzbWF0Y2guanM/YWQyMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhhbmRsZVNlZ21lbnRNaXNtYXRjaFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaGFuZGxlU2VnbWVudE1pc21hdGNoO1xuICAgIH1cbn0pO1xuY29uc3QgX25hdmlnYXRlcmVkdWNlciA9IHJlcXVpcmUoXCIuL3JlZHVjZXJzL25hdmlnYXRlLXJlZHVjZXJcIik7XG5mdW5jdGlvbiBoYW5kbGVTZWdtZW50TWlzbWF0Y2goc3RhdGUsIGFjdGlvbiwgdHJlZVBhdGNoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiUGVyZm9ybWluZyBoYXJkIG5hdmlnYXRpb24gYmVjYXVzZSB5b3VyIGFwcGxpY2F0aW9uIGV4cGVyaWVuY2VkIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IuIElmIHRoaXMga2VlcHMgb2NjdXJyaW5nLCBwbGVhc2UgZmlsZSBhIE5leHQuanMgaXNzdWUuXFxuXFxuXCIgKyBcIlJlYXNvbjogU2VnbWVudCBtaXNtYXRjaFxcblwiICsgKFwiTGFzdCBBY3Rpb246IFwiICsgYWN0aW9uLnR5cGUgKyBcIlxcblxcblwiKSArIChcIkN1cnJlbnQgVHJlZTogXCIgKyBKU09OLnN0cmluZ2lmeShzdGF0ZS50cmVlKSArIFwiXFxuXFxuXCIpICsgKFwiVHJlZSBQYXRjaCBQYXlsb2FkOiBcIiArIEpTT04uc3RyaW5naWZ5KHRyZWVQYXRjaCkpKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBfbmF2aWdhdGVyZWR1Y2VyLmhhbmRsZUV4dGVybmFsVXJsKShzdGF0ZSwge30sIHN0YXRlLmNhbm9uaWNhbFVybCwgdHJ1ZSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhhbmRsZS1zZWdtZW50LW1pc21hdGNoLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJoYW5kbGVTZWdtZW50TWlzbWF0Y2giLCJfbmF2aWdhdGVyZWR1Y2VyIiwicmVxdWlyZSIsInN0YXRlIiwiYWN0aW9uIiwidHJlZVBhdGNoIiwicHJvY2VzcyIsImNvbnNvbGUiLCJ3YXJuIiwidHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0cmVlIiwiaGFuZGxlRXh0ZXJuYWxVcmwiLCJjYW5vbmljYWxVcmwiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js": +/*!**************************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js ***! + \**************************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"invalidateCacheBelowFlightSegmentPath\", ({\n enumerable: true,\n get: function() {\n return invalidateCacheBelowFlightSegmentPath;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction invalidateCacheBelowFlightSegmentPath(newCache, existingCache, flightSegmentPath) {\n const isLastEntry = flightSegmentPath.length <= 2;\n const [parallelRouteKey, segment] = flightSegmentPath;\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const existingChildSegmentMap = existingCache.parallelRoutes.get(parallelRouteKey);\n if (!existingChildSegmentMap) {\n // Bailout because the existing cache does not have the path to the leaf node\n // Will trigger lazy fetch in layout-router because of missing segment\n return;\n }\n let childSegmentMap = newCache.parallelRoutes.get(parallelRouteKey);\n if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n childSegmentMap = new Map(existingChildSegmentMap);\n newCache.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n }\n // In case of last entry don't copy further down.\n if (isLastEntry) {\n childSegmentMap.delete(cacheKey);\n return;\n }\n const existingChildCacheNode = existingChildSegmentMap.get(cacheKey);\n let childCacheNode = childSegmentMap.get(cacheKey);\n if (!childCacheNode || !existingChildCacheNode) {\n // Bailout because the existing cache does not have the path to the leaf node\n // Will trigger lazy fetch in layout-router because of missing segment\n return;\n }\n if (childCacheNode === existingChildCacheNode) {\n childCacheNode = {\n lazyData: childCacheNode.lazyData,\n rsc: childCacheNode.rsc,\n prefetchRsc: childCacheNode.prefetchRsc,\n parallelRoutes: new Map(childCacheNode.parallelRoutes)\n };\n childSegmentMap.set(cacheKey, childCacheNode);\n }\n invalidateCacheBelowFlightSegmentPath(childCacheNode, existingChildCacheNode, flightSegmentPath.slice(2));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=invalidate-cache-below-flight-segmentpath.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaW52YWxpZGF0ZS1jYWNoZS1iZWxvdy1mbGlnaHQtc2VnbWVudHBhdGguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHlFQUF3RTtJQUNwRUksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHdCQUF3QkMsbUJBQU9BLENBQUMsMklBQTJCO0FBQ2pFLFNBQVNGLHNDQUFzQ0csUUFBUSxFQUFFQyxhQUFhLEVBQUVDLGlCQUFpQjtJQUNyRixNQUFNQyxjQUFjRCxrQkFBa0JFLE1BQU0sSUFBSTtJQUNoRCxNQUFNLENBQUNDLGtCQUFrQkMsUUFBUSxHQUFHSjtJQUNwQyxNQUFNSyxXQUFXLENBQUMsR0FBR1Qsc0JBQXNCVSxvQkFBb0IsRUFBRUY7SUFDakUsTUFBTUcsMEJBQTBCUixjQUFjUyxjQUFjLENBQUNkLEdBQUcsQ0FBQ1M7SUFDakUsSUFBSSxDQUFDSSx5QkFBeUI7UUFDMUIsNkVBQTZFO1FBQzdFLHNFQUFzRTtRQUN0RTtJQUNKO0lBQ0EsSUFBSUUsa0JBQWtCWCxTQUFTVSxjQUFjLENBQUNkLEdBQUcsQ0FBQ1M7SUFDbEQsSUFBSSxDQUFDTSxtQkFBbUJBLG9CQUFvQkYseUJBQXlCO1FBQ2pFRSxrQkFBa0IsSUFBSUMsSUFBSUg7UUFDMUJULFNBQVNVLGNBQWMsQ0FBQ0csR0FBRyxDQUFDUixrQkFBa0JNO0lBQ2xEO0lBQ0EsaURBQWlEO0lBQ2pELElBQUlSLGFBQWE7UUFDYlEsZ0JBQWdCRyxNQUFNLENBQUNQO1FBQ3ZCO0lBQ0o7SUFDQSxNQUFNUSx5QkFBeUJOLHdCQUF3QmIsR0FBRyxDQUFDVztJQUMzRCxJQUFJUyxpQkFBaUJMLGdCQUFnQmYsR0FBRyxDQUFDVztJQUN6QyxJQUFJLENBQUNTLGtCQUFrQixDQUFDRCx3QkFBd0I7UUFDNUMsNkVBQTZFO1FBQzdFLHNFQUFzRTtRQUN0RTtJQUNKO0lBQ0EsSUFBSUMsbUJBQW1CRCx3QkFBd0I7UUFDM0NDLGlCQUFpQjtZQUNiQyxVQUFVRCxlQUFlQyxRQUFRO1lBQ2pDQyxLQUFLRixlQUFlRSxHQUFHO1lBQ3ZCQyxhQUFhSCxlQUFlRyxXQUFXO1lBQ3ZDVCxnQkFBZ0IsSUFBSUUsSUFBSUksZUFBZU4sY0FBYztRQUN6RDtRQUNBQyxnQkFBZ0JFLEdBQUcsQ0FBQ04sVUFBVVM7SUFDbEM7SUFDQW5CLHNDQUFzQ21CLGdCQUFnQkQsd0JBQXdCYixrQkFBa0JrQixLQUFLLENBQUM7QUFDMUc7QUFFQSxJQUFJLENBQUMsT0FBTzNCLFFBQVE0QixPQUFPLEtBQUssY0FBZSxPQUFPNUIsUUFBUTRCLE9BQU8sS0FBSyxZQUFZNUIsUUFBUTRCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzVCLFFBQVE0QixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLL0IsT0FBT0MsY0FBYyxDQUFDQyxRQUFRNEIsT0FBTyxFQUFFLGNBQWM7UUFBRTNCLE9BQU87SUFBSztJQUNuRUgsT0FBT2dDLE1BQU0sQ0FBQzlCLFFBQVE0QixPQUFPLEVBQUU1QjtJQUMvQitCLE9BQU8vQixPQUFPLEdBQUdBLFFBQVE0QixPQUFPO0FBQ2xDLEVBRUEscUVBQXFFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaW52YWxpZGF0ZS1jYWNoZS1iZWxvdy1mbGlnaHQtc2VnbWVudHBhdGguanM/OGZlMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGhcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGg7XG4gICAgfVxufSk7XG5jb25zdCBfY3JlYXRlcm91dGVyY2FjaGVrZXkgPSByZXF1aXJlKFwiLi9jcmVhdGUtcm91dGVyLWNhY2hlLWtleVwiKTtcbmZ1bmN0aW9uIGludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGgobmV3Q2FjaGUsIGV4aXN0aW5nQ2FjaGUsIGZsaWdodFNlZ21lbnRQYXRoKSB7XG4gICAgY29uc3QgaXNMYXN0RW50cnkgPSBmbGlnaHRTZWdtZW50UGF0aC5sZW5ndGggPD0gMjtcbiAgICBjb25zdCBbcGFyYWxsZWxSb3V0ZUtleSwgc2VnbWVudF0gPSBmbGlnaHRTZWdtZW50UGF0aDtcbiAgICBjb25zdCBjYWNoZUtleSA9ICgwLCBfY3JlYXRlcm91dGVyY2FjaGVrZXkuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKHNlZ21lbnQpO1xuICAgIGNvbnN0IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwID0gZXhpc3RpbmdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSk7XG4gICAgaWYgKCFleGlzdGluZ0NoaWxkU2VnbWVudE1hcCkge1xuICAgICAgICAvLyBCYWlsb3V0IGJlY2F1c2UgdGhlIGV4aXN0aW5nIGNhY2hlIGRvZXMgbm90IGhhdmUgdGhlIHBhdGggdG8gdGhlIGxlYWYgbm9kZVxuICAgICAgICAvLyBXaWxsIHRyaWdnZXIgbGF6eSBmZXRjaCBpbiBsYXlvdXQtcm91dGVyIGJlY2F1c2Ugb2YgbWlzc2luZyBzZWdtZW50XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNoaWxkU2VnbWVudE1hcCA9IG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KTtcbiAgICBpZiAoIWNoaWxkU2VnbWVudE1hcCB8fCBjaGlsZFNlZ21lbnRNYXAgPT09IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKSB7XG4gICAgICAgIGNoaWxkU2VnbWVudE1hcCA9IG5ldyBNYXAoZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXApO1xuICAgICAgICBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5zZXQocGFyYWxsZWxSb3V0ZUtleSwgY2hpbGRTZWdtZW50TWFwKTtcbiAgICB9XG4gICAgLy8gSW4gY2FzZSBvZiBsYXN0IGVudHJ5IGRvbid0IGNvcHkgZnVydGhlciBkb3duLlxuICAgIGlmIChpc0xhc3RFbnRyeSkge1xuICAgICAgICBjaGlsZFNlZ21lbnRNYXAuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlID0gZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXAuZ2V0KGNhY2hlS2V5KTtcbiAgICBsZXQgY2hpbGRDYWNoZU5vZGUgPSBjaGlsZFNlZ21lbnRNYXAuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoIWNoaWxkQ2FjaGVOb2RlIHx8ICFleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKSB7XG4gICAgICAgIC8vIEJhaWxvdXQgYmVjYXVzZSB0aGUgZXhpc3RpbmcgY2FjaGUgZG9lcyBub3QgaGF2ZSB0aGUgcGF0aCB0byB0aGUgbGVhZiBub2RlXG4gICAgICAgIC8vIFdpbGwgdHJpZ2dlciBsYXp5IGZldGNoIGluIGxheW91dC1yb3V0ZXIgYmVjYXVzZSBvZiBtaXNzaW5nIHNlZ21lbnRcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY2hpbGRDYWNoZU5vZGUgPT09IGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUpIHtcbiAgICAgICAgY2hpbGRDYWNoZU5vZGUgPSB7XG4gICAgICAgICAgICBsYXp5RGF0YTogY2hpbGRDYWNoZU5vZGUubGF6eURhdGEsXG4gICAgICAgICAgICByc2M6IGNoaWxkQ2FjaGVOb2RlLnJzYyxcbiAgICAgICAgICAgIHByZWZldGNoUnNjOiBjaGlsZENhY2hlTm9kZS5wcmVmZXRjaFJzYyxcbiAgICAgICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKGNoaWxkQ2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzKVxuICAgICAgICB9O1xuICAgICAgICBjaGlsZFNlZ21lbnRNYXAuc2V0KGNhY2hlS2V5LCBjaGlsZENhY2hlTm9kZSk7XG4gICAgfVxuICAgIGludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGgoY2hpbGRDYWNoZU5vZGUsIGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUsIGZsaWdodFNlZ21lbnRQYXRoLnNsaWNlKDIpKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW52YWxpZGF0ZS1jYWNoZS1iZWxvdy1mbGlnaHQtc2VnbWVudHBhdGguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGgiLCJfY3JlYXRlcm91dGVyY2FjaGVrZXkiLCJyZXF1aXJlIiwibmV3Q2FjaGUiLCJleGlzdGluZ0NhY2hlIiwiZmxpZ2h0U2VnbWVudFBhdGgiLCJpc0xhc3RFbnRyeSIsImxlbmd0aCIsInBhcmFsbGVsUm91dGVLZXkiLCJzZWdtZW50IiwiY2FjaGVLZXkiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsImV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwIiwicGFyYWxsZWxSb3V0ZXMiLCJjaGlsZFNlZ21lbnRNYXAiLCJNYXAiLCJzZXQiLCJkZWxldGUiLCJleGlzdGluZ0NoaWxkQ2FjaGVOb2RlIiwiY2hpbGRDYWNoZU5vZGUiLCJsYXp5RGF0YSIsInJzYyIsInByZWZldGNoUnNjIiwic2xpY2UiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js ***! + \*****************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"invalidateCacheByRouterState\", ({\n enumerable: true,\n get: function() {\n return invalidateCacheByRouterState;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction invalidateCacheByRouterState(newCache, existingCache, routerState) {\n // Remove segment that we got data for so that it is filled in during rendering of rsc.\n for(const key in routerState[1]){\n const segmentForParallelRoute = routerState[1][key][0];\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segmentForParallelRoute);\n const existingParallelRoutesCacheNode = existingCache.parallelRoutes.get(key);\n if (existingParallelRoutesCacheNode) {\n let parallelRouteCacheNode = new Map(existingParallelRoutesCacheNode);\n parallelRouteCacheNode.delete(cacheKey);\n newCache.parallelRoutes.set(key, parallelRouteCacheNode);\n }\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=invalidate-cache-by-router-state.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaW52YWxpZGF0ZS1jYWNoZS1ieS1yb3V0ZXItc3RhdGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGdFQUErRDtJQUMzREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHdCQUF3QkMsbUJBQU9BLENBQUMsMklBQTJCO0FBQ2pFLFNBQVNGLDZCQUE2QkcsUUFBUSxFQUFFQyxhQUFhLEVBQUVDLFdBQVc7SUFDdEUsdUZBQXVGO0lBQ3ZGLElBQUksTUFBTUMsT0FBT0QsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUM1QixNQUFNRSwwQkFBMEJGLFdBQVcsQ0FBQyxFQUFFLENBQUNDLElBQUksQ0FBQyxFQUFFO1FBQ3RELE1BQU1FLFdBQVcsQ0FBQyxHQUFHUCxzQkFBc0JRLG9CQUFvQixFQUFFRjtRQUNqRSxNQUFNRyxrQ0FBa0NOLGNBQWNPLGNBQWMsQ0FBQ1osR0FBRyxDQUFDTztRQUN6RSxJQUFJSSxpQ0FBaUM7WUFDakMsSUFBSUUseUJBQXlCLElBQUlDLElBQUlIO1lBQ3JDRSx1QkFBdUJFLE1BQU0sQ0FBQ047WUFDOUJMLFNBQVNRLGNBQWMsQ0FBQ0ksR0FBRyxDQUFDVCxLQUFLTTtRQUNyQztJQUNKO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT2hCLFFBQVFvQixPQUFPLEtBQUssY0FBZSxPQUFPcEIsUUFBUW9CLE9BQU8sS0FBSyxZQUFZcEIsUUFBUW9CLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3BCLFFBQVFvQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdkIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRb0IsT0FBTyxFQUFFLGNBQWM7UUFBRW5CLE9BQU87SUFBSztJQUNuRUgsT0FBT3dCLE1BQU0sQ0FBQ3RCLFFBQVFvQixPQUFPLEVBQUVwQjtJQUMvQnVCLE9BQU92QixPQUFPLEdBQUdBLFFBQVFvQixPQUFPO0FBQ2xDLEVBRUEsNERBQTREIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaW52YWxpZGF0ZS1jYWNoZS1ieS1yb3V0ZXItc3RhdGUuanM/MDY3NyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludmFsaWRhdGVDYWNoZUJ5Um91dGVyU3RhdGVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGludmFsaWRhdGVDYWNoZUJ5Um91dGVyU3RhdGU7XG4gICAgfVxufSk7XG5jb25zdCBfY3JlYXRlcm91dGVyY2FjaGVrZXkgPSByZXF1aXJlKFwiLi9jcmVhdGUtcm91dGVyLWNhY2hlLWtleVwiKTtcbmZ1bmN0aW9uIGludmFsaWRhdGVDYWNoZUJ5Um91dGVyU3RhdGUobmV3Q2FjaGUsIGV4aXN0aW5nQ2FjaGUsIHJvdXRlclN0YXRlKSB7XG4gICAgLy8gUmVtb3ZlIHNlZ21lbnQgdGhhdCB3ZSBnb3QgZGF0YSBmb3Igc28gdGhhdCBpdCBpcyBmaWxsZWQgaW4gZHVyaW5nIHJlbmRlcmluZyBvZiByc2MuXG4gICAgZm9yKGNvbnN0IGtleSBpbiByb3V0ZXJTdGF0ZVsxXSl7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRGb3JQYXJhbGxlbFJvdXRlID0gcm91dGVyU3RhdGVbMV1ba2V5XVswXTtcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSAoMCwgX2NyZWF0ZXJvdXRlcmNhY2hla2V5LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZSk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUgPSBleGlzdGluZ0NhY2hlLnBhcmFsbGVsUm91dGVzLmdldChrZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSkge1xuICAgICAgICAgICAgbGV0IHBhcmFsbGVsUm91dGVDYWNoZU5vZGUgPSBuZXcgTWFwKGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUpO1xuICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZUNhY2hlTm9kZS5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICAgICAgbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuc2V0KGtleSwgcGFyYWxsZWxSb3V0ZUNhY2hlTm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludmFsaWRhdGUtY2FjaGUtYnktcm91dGVyLXN0YXRlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJpbnZhbGlkYXRlQ2FjaGVCeVJvdXRlclN0YXRlIiwiX2NyZWF0ZXJvdXRlcmNhY2hla2V5IiwicmVxdWlyZSIsIm5ld0NhY2hlIiwiZXhpc3RpbmdDYWNoZSIsInJvdXRlclN0YXRlIiwia2V5Iiwic2VnbWVudEZvclBhcmFsbGVsUm91dGUiLCJjYWNoZUtleSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwiZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSIsInBhcmFsbGVsUm91dGVzIiwicGFyYWxsZWxSb3V0ZUNhY2hlTm9kZSIsIk1hcCIsImRlbGV0ZSIsInNldCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js ***! + \*****************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isNavigatingToNewRootLayout\", ({\n enumerable: true,\n get: function() {\n return isNavigatingToNewRootLayout;\n }\n}));\nfunction isNavigatingToNewRootLayout(currentTree, nextTree) {\n // Compare segments\n const currentTreeSegment = currentTree[0];\n const nextTreeSegment = nextTree[0];\n // If any segment is different before we find the root layout, the root layout has changed.\n // E.g. /same/(group1)/layout.js -> /same/(group2)/layout.js\n // First segment is 'same' for both, keep looking. (group1) changed to (group2) before the root layout was found, it must have changed.\n if (Array.isArray(currentTreeSegment) && Array.isArray(nextTreeSegment)) {\n // Compare dynamic param name and type but ignore the value, different values would not affect the current root layout\n // /[name] - /slug1 and /slug2, both values (slug1 & slug2) still has the same layout /[name]/layout.js\n if (currentTreeSegment[0] !== nextTreeSegment[0] || currentTreeSegment[2] !== nextTreeSegment[2]) {\n return true;\n }\n } else if (currentTreeSegment !== nextTreeSegment) {\n return true;\n }\n // Current tree root layout found\n if (currentTree[4]) {\n // If the next tree doesn't have the root layout flag, it must have changed.\n return !nextTree[4];\n }\n // Current tree didn't have its root layout here, must have changed.\n if (nextTree[4]) {\n return true;\n }\n // We can't assume it's `parallelRoutes.children` here in case the root layout is `app/@something/layout.js`\n // But it's not possible to be more than one parallelRoutes before the root layout is found\n // TODO-APP: change to traverse all parallel routes\n const currentTreeChild = Object.values(currentTree[1])[0];\n const nextTreeChild = Object.values(nextTree[1])[0];\n if (!currentTreeChild || !nextTreeChild) return true;\n return isNavigatingToNewRootLayout(currentTreeChild, nextTreeChild);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=is-navigating-to-new-root-layout.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILCtEQUE4RDtJQUMxREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLDRCQUE0QkMsV0FBVyxFQUFFQyxRQUFRO0lBQ3RELG1CQUFtQjtJQUNuQixNQUFNQyxxQkFBcUJGLFdBQVcsQ0FBQyxFQUFFO0lBQ3pDLE1BQU1HLGtCQUFrQkYsUUFBUSxDQUFDLEVBQUU7SUFDbkMsMkZBQTJGO0lBQzNGLDREQUE0RDtJQUM1RCx1SUFBdUk7SUFDdkksSUFBSUcsTUFBTUMsT0FBTyxDQUFDSCx1QkFBdUJFLE1BQU1DLE9BQU8sQ0FBQ0Ysa0JBQWtCO1FBQ3JFLHNIQUFzSDtRQUN0SCx1R0FBdUc7UUFDdkcsSUFBSUQsa0JBQWtCLENBQUMsRUFBRSxLQUFLQyxlQUFlLENBQUMsRUFBRSxJQUFJRCxrQkFBa0IsQ0FBQyxFQUFFLEtBQUtDLGVBQWUsQ0FBQyxFQUFFLEVBQUU7WUFDOUYsT0FBTztRQUNYO0lBQ0osT0FBTyxJQUFJRCx1QkFBdUJDLGlCQUFpQjtRQUMvQyxPQUFPO0lBQ1g7SUFDQSxpQ0FBaUM7SUFDakMsSUFBSUgsV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUNoQiw0RUFBNEU7UUFDNUUsT0FBTyxDQUFDQyxRQUFRLENBQUMsRUFBRTtJQUN2QjtJQUNBLHFFQUFxRTtJQUNyRSxJQUFJQSxRQUFRLENBQUMsRUFBRSxFQUFFO1FBQ2IsT0FBTztJQUNYO0lBQ0EsNEdBQTRHO0lBQzVHLDJGQUEyRjtJQUMzRixtREFBbUQ7SUFDbkQsTUFBTUssbUJBQW1CYixPQUFPYyxNQUFNLENBQUNQLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3pELE1BQU1RLGdCQUFnQmYsT0FBT2MsTUFBTSxDQUFDTixRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtJQUNuRCxJQUFJLENBQUNLLG9CQUFvQixDQUFDRSxlQUFlLE9BQU87SUFDaEQsT0FBT1QsNEJBQTRCTyxrQkFBa0JFO0FBQ3pEO0FBRUEsSUFBSSxDQUFDLE9BQU9iLFFBQVFjLE9BQU8sS0FBSyxjQUFlLE9BQU9kLFFBQVFjLE9BQU8sS0FBSyxZQUFZZCxRQUFRYyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9kLFFBQVFjLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktqQixPQUFPQyxjQUFjLENBQUNDLFFBQVFjLE9BQU8sRUFBRSxjQUFjO1FBQUViLE9BQU87SUFBSztJQUNuRUgsT0FBT2tCLE1BQU0sQ0FBQ2hCLFFBQVFjLE9BQU8sRUFBRWQ7SUFDL0JpQixPQUFPakIsT0FBTyxHQUFHQSxRQUFRYyxPQUFPO0FBQ2xDLEVBRUEsNERBQTREIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXQuanM/Y2M1OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0O1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0KGN1cnJlbnRUcmVlLCBuZXh0VHJlZSkge1xuICAgIC8vIENvbXBhcmUgc2VnbWVudHNcbiAgICBjb25zdCBjdXJyZW50VHJlZVNlZ21lbnQgPSBjdXJyZW50VHJlZVswXTtcbiAgICBjb25zdCBuZXh0VHJlZVNlZ21lbnQgPSBuZXh0VHJlZVswXTtcbiAgICAvLyBJZiBhbnkgc2VnbWVudCBpcyBkaWZmZXJlbnQgYmVmb3JlIHdlIGZpbmQgdGhlIHJvb3QgbGF5b3V0LCB0aGUgcm9vdCBsYXlvdXQgaGFzIGNoYW5nZWQuXG4gICAgLy8gRS5nLiAvc2FtZS8oZ3JvdXAxKS9sYXlvdXQuanMgLT4gL3NhbWUvKGdyb3VwMikvbGF5b3V0LmpzXG4gICAgLy8gRmlyc3Qgc2VnbWVudCBpcyAnc2FtZScgZm9yIGJvdGgsIGtlZXAgbG9va2luZy4gKGdyb3VwMSkgY2hhbmdlZCB0byAoZ3JvdXAyKSBiZWZvcmUgdGhlIHJvb3QgbGF5b3V0IHdhcyBmb3VuZCwgaXQgbXVzdCBoYXZlIGNoYW5nZWQuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudFRyZWVTZWdtZW50KSAmJiBBcnJheS5pc0FycmF5KG5leHRUcmVlU2VnbWVudCkpIHtcbiAgICAgICAgLy8gQ29tcGFyZSBkeW5hbWljIHBhcmFtIG5hbWUgYW5kIHR5cGUgYnV0IGlnbm9yZSB0aGUgdmFsdWUsIGRpZmZlcmVudCB2YWx1ZXMgd291bGQgbm90IGFmZmVjdCB0aGUgY3VycmVudCByb290IGxheW91dFxuICAgICAgICAvLyAvW25hbWVdIC0gL3NsdWcxIGFuZCAvc2x1ZzIsIGJvdGggdmFsdWVzIChzbHVnMSAmIHNsdWcyKSBzdGlsbCBoYXMgdGhlIHNhbWUgbGF5b3V0IC9bbmFtZV0vbGF5b3V0LmpzXG4gICAgICAgIGlmIChjdXJyZW50VHJlZVNlZ21lbnRbMF0gIT09IG5leHRUcmVlU2VnbWVudFswXSB8fCBjdXJyZW50VHJlZVNlZ21lbnRbMl0gIT09IG5leHRUcmVlU2VnbWVudFsyXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRUcmVlU2VnbWVudCAhPT0gbmV4dFRyZWVTZWdtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBDdXJyZW50IHRyZWUgcm9vdCBsYXlvdXQgZm91bmRcbiAgICBpZiAoY3VycmVudFRyZWVbNF0pIHtcbiAgICAgICAgLy8gSWYgdGhlIG5leHQgdHJlZSBkb2Vzbid0IGhhdmUgdGhlIHJvb3QgbGF5b3V0IGZsYWcsIGl0IG11c3QgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICByZXR1cm4gIW5leHRUcmVlWzRdO1xuICAgIH1cbiAgICAvLyBDdXJyZW50IHRyZWUgIGRpZG4ndCBoYXZlIGl0cyByb290IGxheW91dCBoZXJlLCBtdXN0IGhhdmUgY2hhbmdlZC5cbiAgICBpZiAobmV4dFRyZWVbNF0pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIFdlIGNhbid0IGFzc3VtZSBpdCdzIGBwYXJhbGxlbFJvdXRlcy5jaGlsZHJlbmAgaGVyZSBpbiBjYXNlIHRoZSByb290IGxheW91dCBpcyBgYXBwL0Bzb21ldGhpbmcvbGF5b3V0LmpzYFxuICAgIC8vIEJ1dCBpdCdzIG5vdCBwb3NzaWJsZSB0byBiZSBtb3JlIHRoYW4gb25lIHBhcmFsbGVsUm91dGVzIGJlZm9yZSB0aGUgcm9vdCBsYXlvdXQgaXMgZm91bmRcbiAgICAvLyBUT0RPLUFQUDogY2hhbmdlIHRvIHRyYXZlcnNlIGFsbCBwYXJhbGxlbCByb3V0ZXNcbiAgICBjb25zdCBjdXJyZW50VHJlZUNoaWxkID0gT2JqZWN0LnZhbHVlcyhjdXJyZW50VHJlZVsxXSlbMF07XG4gICAgY29uc3QgbmV4dFRyZWVDaGlsZCA9IE9iamVjdC52YWx1ZXMobmV4dFRyZWVbMV0pWzBdO1xuICAgIGlmICghY3VycmVudFRyZWVDaGlsZCB8fCAhbmV4dFRyZWVDaGlsZCkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dChjdXJyZW50VHJlZUNoaWxkLCBuZXh0VHJlZUNoaWxkKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXQuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCIsImN1cnJlbnRUcmVlIiwibmV4dFRyZWUiLCJjdXJyZW50VHJlZVNlZ21lbnQiLCJuZXh0VHJlZVNlZ21lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJjdXJyZW50VHJlZUNoaWxkIiwidmFsdWVzIiwibmV4dFRyZWVDaGlsZCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js ***! + \************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n updateCacheNodeOnNavigation: function() {\n return updateCacheNodeOnNavigation;\n },\n listenForDynamicRequest: function() {\n return listenForDynamicRequest;\n },\n abortTask: function() {\n return abortTask;\n },\n updateCacheNodeOnPopstateRestoration: function() {\n return updateCacheNodeOnPopstateRestoration;\n }\n});\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction updateCacheNodeOnNavigation(oldCacheNode, oldRouterState, newRouterState, prefetchData, prefetchHead, isPrefetchStale) {\n // Diff the old and new trees to reuse the shared layouts.\n const oldRouterStateChildren = oldRouterState[1];\n const newRouterStateChildren = newRouterState[1];\n const prefetchDataChildren = prefetchData[1];\n const oldParallelRoutes = oldCacheNode.parallelRoutes;\n // Clone the current set of segment children, even if they aren't active in\n // the new tree.\n // TODO: We currently retain all the inactive segments indefinitely, until\n // there's an explicit refresh, or a parent layout is lazily refreshed. We\n // rely on this for popstate navigations, which update the Router State Tree\n // but do not eagerly perform a data fetch, because they expect the segment\n // data to already be in the Cache Node tree. For highly static sites that\n // are mostly read-only, this may happen only rarely, causing memory to\n // leak. We should figure out a better model for the lifetime of inactive\n // segments, so we can maintain instant back/forward navigations without\n // leaking memory indefinitely.\n const prefetchParallelRoutes = new Map(oldParallelRoutes);\n // As we diff the trees, we may sometimes modify (copy-on-write, not mutate)\n // the Route Tree that was returned by the server — for example, in the case\n // of default parallel routes, we preserve the currently active segment. To\n // avoid mutating the original tree, we clone the router state children along\n // the return path.\n let patchedRouterStateChildren = {};\n let taskChildren = null;\n for(let parallelRouteKey in newRouterStateChildren){\n const newRouterStateChild = newRouterStateChildren[parallelRouteKey];\n const oldRouterStateChild = oldRouterStateChildren[parallelRouteKey];\n const oldSegmentMapChild = oldParallelRoutes.get(parallelRouteKey);\n const prefetchDataChild = prefetchDataChildren[parallelRouteKey];\n const newSegmentChild = newRouterStateChild[0];\n const newSegmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(newSegmentChild);\n const oldSegmentChild = oldRouterStateChild !== undefined ? oldRouterStateChild[0] : undefined;\n const oldCacheNodeChild = oldSegmentMapChild !== undefined ? oldSegmentMapChild.get(newSegmentKeyChild) : undefined;\n let taskChild;\n if (newSegmentChild === _segment.PAGE_SEGMENT_KEY) {\n // This is a leaf segment — a page, not a shared layout. We always apply\n // its data.\n taskChild = spawnPendingTask(newRouterStateChild, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchStale);\n } else if (newSegmentChild === _segment.DEFAULT_SEGMENT_KEY) {\n // This is another kind of leaf segment — a default route.\n //\n // Default routes have special behavior. When there's no matching segment\n // for a parallel route, Next.js preserves the currently active segment\n // during a client navigation — but not for initial render. The server\n // leaves it to the client to account for this. So we need to handle\n // it here.\n if (oldRouterStateChild !== undefined) {\n // Reuse the existing Router State for this segment. We spawn a \"task\"\n // just to keep track of the updated router state; unlike most, it's\n // already fulfilled and won't be affected by the dynamic response.\n taskChild = spawnReusedTask(oldRouterStateChild);\n } else {\n // There's no currently active segment. Switch to the \"create\" path.\n taskChild = spawnPendingTask(newRouterStateChild, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchStale);\n }\n } else if (oldSegmentChild !== undefined && (0, _matchsegments.matchSegment)(newSegmentChild, oldSegmentChild)) {\n if (oldCacheNodeChild !== undefined && oldRouterStateChild !== undefined) {\n // This segment exists in both the old and new trees.\n if (prefetchDataChild !== undefined && prefetchDataChild !== null) {\n // Recursively update the children.\n taskChild = updateCacheNodeOnNavigation(oldCacheNodeChild, oldRouterStateChild, newRouterStateChild, prefetchDataChild, prefetchHead, isPrefetchStale);\n } else {\n // The server didn't send any prefetch data for this segment. This\n // shouldn't happen because the Route Tree and the Seed Data tree\n // should always be the same shape, but until we unify those types\n // it's still possible. For now we're going to deopt and trigger a\n // lazy fetch during render.\n taskChild = spawnTaskForMissingData(newRouterStateChild);\n }\n } else {\n // Either there's no existing Cache Node for this segment, or this\n // segment doesn't exist in the old Router State tree. Switch to the\n // \"create\" path.\n taskChild = spawnPendingTask(newRouterStateChild, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchStale);\n }\n } else {\n // This is a new tree. Switch to the \"create\" path.\n taskChild = spawnPendingTask(newRouterStateChild, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchStale);\n }\n if (taskChild !== null) {\n // Something changed in the child tree. Keep track of the child task.\n if (taskChildren === null) {\n taskChildren = new Map();\n }\n taskChildren.set(parallelRouteKey, taskChild);\n const newCacheNodeChild = taskChild.node;\n if (newCacheNodeChild !== null) {\n const newSegmentMapChild = new Map(oldSegmentMapChild);\n newSegmentMapChild.set(newSegmentKeyChild, newCacheNodeChild);\n prefetchParallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n }\n // The child tree's route state may be different from the prefetched\n // route sent by the server. We need to clone it as we traverse back up\n // the tree.\n patchedRouterStateChildren[parallelRouteKey] = taskChild.route;\n } else {\n // The child didn't change. We can use the prefetched router state.\n patchedRouterStateChildren[parallelRouteKey] = newRouterStateChild;\n }\n }\n if (taskChildren === null) {\n // No new tasks were spawned.\n return null;\n }\n const newCacheNode = {\n lazyData: null,\n rsc: oldCacheNode.rsc,\n // We intentionally aren't updating the prefetchRsc field, since this node\n // is already part of the current tree, because it would be weird for\n // prefetch data to be newer than the final data. It probably won't ever be\n // observable anyway, but it could happen if the segment is unmounted then\n // mounted again, because LayoutRouter will momentarily switch to rendering\n // prefetchRsc, via useDeferredValue.\n prefetchRsc: oldCacheNode.prefetchRsc,\n head: oldCacheNode.head,\n prefetchHead: oldCacheNode.prefetchHead,\n // Everything is cloned except for the children, which we computed above.\n parallelRoutes: prefetchParallelRoutes\n };\n return {\n // Return a cloned copy of the router state with updated children.\n route: patchRouterStateWithNewChildren(newRouterState, patchedRouterStateChildren),\n node: newCacheNode,\n children: taskChildren\n };\n}\nfunction patchRouterStateWithNewChildren(baseRouterState, newChildren) {\n const clone = [\n baseRouterState[0],\n newChildren\n ];\n // Based on equivalent logic in apply-router-state-patch-to-tree, but should\n // confirm whether we need to copy all of these fields. Not sure the server\n // ever sends, e.g. the refetch marker.\n if (2 in baseRouterState) {\n clone[2] = baseRouterState[2];\n }\n if (3 in baseRouterState) {\n clone[3] = baseRouterState[3];\n }\n if (4 in baseRouterState) {\n clone[4] = baseRouterState[4];\n }\n return clone;\n}\nfunction spawnPendingTask(routerState, prefetchData, prefetchHead, isPrefetchStale) {\n // Create a task that will later be fulfilled by data from the server.\n const pendingCacheNode = createPendingCacheNode(routerState, prefetchData, prefetchHead, isPrefetchStale);\n return {\n route: routerState,\n node: pendingCacheNode,\n children: null\n };\n}\nfunction spawnReusedTask(reusedRouterState) {\n // Create a task that reuses an existing segment, e.g. when reusing\n // the current active segment in place of a default route.\n return {\n route: reusedRouterState,\n node: null,\n children: null\n };\n}\nfunction spawnTaskForMissingData(routerState) {\n // Create a task for a new subtree that wasn't prefetched by the server.\n // This shouldn't really ever happen but it's here just in case the Seed Data\n // Tree and the Router State Tree disagree unexpectedly.\n const pendingCacheNode = createPendingCacheNode(routerState, null, null, false);\n return {\n route: routerState,\n node: pendingCacheNode,\n children: null\n };\n}\nfunction listenForDynamicRequest(task, responsePromise) {\n responsePromise.then((response)=>{\n const flightData = response[0];\n for (const flightDataPath of flightData){\n const segmentPath = flightDataPath.slice(0, -3);\n const serverRouterState = flightDataPath[flightDataPath.length - 3];\n const dynamicData = flightDataPath[flightDataPath.length - 2];\n const dynamicHead = flightDataPath[flightDataPath.length - 1];\n if (typeof segmentPath === \"string\") {\n continue;\n }\n writeDynamicDataIntoPendingTask(task, segmentPath, serverRouterState, dynamicData, dynamicHead);\n }\n // Now that we've exhausted all the data we received from the server, if\n // there are any remaining pending tasks in the tree, abort them now.\n // If there's any missing data, it will trigger a lazy fetch.\n abortTask(task, null);\n }, (error)=>{\n // This will trigger an error during render\n abortTask(task, error);\n });\n}\nfunction writeDynamicDataIntoPendingTask(rootTask, segmentPath, serverRouterState, dynamicData, dynamicHead) {\n // The data sent by the server represents only a subtree of the app. We need\n // to find the part of the task tree that matches the server response, and\n // fulfill it using the dynamic data.\n //\n // segmentPath represents the parent path of subtree. It's a repeating pattern\n // of parallel route key and segment:\n //\n // [string, Segment, string, Segment, string, Segment, ...]\n //\n // Iterate through the path and finish any tasks that match this payload.\n let task = rootTask;\n for(let i = 0; i < segmentPath.length; i += 2){\n const parallelRouteKey = segmentPath[i];\n const segment = segmentPath[i + 1];\n const taskChildren = task.children;\n if (taskChildren !== null) {\n const taskChild = taskChildren.get(parallelRouteKey);\n if (taskChild !== undefined) {\n const taskSegment = taskChild.route[0];\n if ((0, _matchsegments.matchSegment)(segment, taskSegment)) {\n // Found a match for this task. Keep traversing down the task tree.\n task = taskChild;\n continue;\n }\n }\n }\n // We didn't find a child task that matches the server data. Exit. We won't\n // abort the task, though, because a different FlightDataPath may be able to\n // fulfill it (see loop in listenForDynamicRequest). We only abort tasks\n // once we've run out of data.\n return;\n }\n finishTaskUsingDynamicDataPayload(task, serverRouterState, dynamicData, dynamicHead);\n}\nfunction finishTaskUsingDynamicDataPayload(task, serverRouterState, dynamicData, dynamicHead) {\n // dynamicData may represent a larger subtree than the task. Before we can\n // finish the task, we need to line them up.\n const taskChildren = task.children;\n const taskNode = task.node;\n if (taskChildren === null) {\n // We've reached the leaf node of the pending task. The server data tree\n // lines up the pending Cache Node tree. We can now switch to the\n // normal algorithm.\n if (taskNode !== null) {\n finishPendingCacheNode(taskNode, task.route, serverRouterState, dynamicData, dynamicHead);\n // Null this out to indicate that the task is complete.\n task.node = null;\n }\n return;\n }\n // The server returned more data than we need to finish the task. Skip over\n // the extra segments until we reach the leaf task node.\n const serverChildren = serverRouterState[1];\n const dynamicDataChildren = dynamicData[1];\n for(const parallelRouteKey in serverRouterState){\n const serverRouterStateChild = serverChildren[parallelRouteKey];\n const dynamicDataChild = dynamicDataChildren[parallelRouteKey];\n const taskChild = taskChildren.get(parallelRouteKey);\n if (taskChild !== undefined) {\n const taskSegment = taskChild.route[0];\n if ((0, _matchsegments.matchSegment)(serverRouterStateChild[0], taskSegment) && dynamicDataChild !== null && dynamicDataChild !== undefined) {\n // Found a match for this task. Keep traversing down the task tree.\n return finishTaskUsingDynamicDataPayload(taskChild, serverRouterStateChild, dynamicDataChild, dynamicHead);\n }\n }\n // We didn't find a child task that matches the server data. We won't abort\n // the task, though, because a different FlightDataPath may be able to\n // fulfill it (see loop in listenForDynamicRequest). We only abort tasks\n // once we've run out of data.\n }\n}\nfunction createPendingCacheNode(routerState, prefetchData, prefetchHead, isPrefetchStale) {\n const routerStateChildren = routerState[1];\n const prefetchDataChildren = prefetchData !== null ? prefetchData[1] : null;\n const parallelRoutes = new Map();\n for(let parallelRouteKey in routerStateChildren){\n const routerStateChild = routerStateChildren[parallelRouteKey];\n const prefetchDataChild = prefetchDataChildren !== null ? prefetchDataChildren[parallelRouteKey] : null;\n const segmentChild = routerStateChild[0];\n const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n const newCacheNodeChild = createPendingCacheNode(routerStateChild, prefetchDataChild === undefined ? null : prefetchDataChild, prefetchHead, isPrefetchStale);\n const newSegmentMapChild = new Map();\n newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);\n parallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n }\n // The head is assigned to every leaf segment delivered by the server. Based\n // on corresponding logic in fill-lazy-items-till-leaf-with-head.ts\n const isLeafSegment = parallelRoutes.size === 0;\n const maybePrefetchRsc = prefetchData !== null ? prefetchData[2] : null;\n return {\n lazyData: null,\n parallelRoutes: parallelRoutes,\n prefetchRsc: // dynamic data to stream in.\n // TODO: This check is aruably too deep in the stack. Might be better to\n // pass an empty prefetchData Cache Seed object instead.\n !isPrefetchStale && maybePrefetchRsc !== undefined ? maybePrefetchRsc : null,\n prefetchHead: !isPrefetchStale && isLeafSegment ? prefetchHead : null,\n // Create a deferred promise. This will be fulfilled once the dynamic\n // response is received from the server.\n rsc: createDeferredRsc(),\n head: isLeafSegment ? createDeferredRsc() : null\n };\n}\nfunction finishPendingCacheNode(cacheNode, taskState, serverState, dynamicData, dynamicHead) {\n // Writes a dynamic response into an existing Cache Node tree. This does _not_\n // create a new tree, it updates the existing tree in-place. So it must follow\n // the Suspense rules of cache safety — it can resolve pending promises, but\n // it cannot overwrite existing data. It can add segments to the tree (because\n // a missing segment will cause the layout router to suspend).\n // but it cannot delete them.\n //\n // We must resolve every promise in the tree, or else it will suspend\n // indefinitely. If we did not receive data for a segment, we will resolve its\n // data promise to `null` to trigger a lazy fetch during render.\n const taskStateChildren = taskState[1];\n const serverStateChildren = serverState[1];\n const dataChildren = dynamicData[1];\n // The router state that we traverse the tree with (taskState) is the same one\n // that we used to construct the pending Cache Node tree. That way we're sure\n // to resolve all the pending promises.\n const parallelRoutes = cacheNode.parallelRoutes;\n for(let parallelRouteKey in taskStateChildren){\n const taskStateChild = taskStateChildren[parallelRouteKey];\n const serverStateChild = serverStateChildren[parallelRouteKey];\n const dataChild = dataChildren[parallelRouteKey];\n const segmentMapChild = parallelRoutes.get(parallelRouteKey);\n const taskSegmentChild = taskStateChild[0];\n const taskSegmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(taskSegmentChild);\n const cacheNodeChild = segmentMapChild !== undefined ? segmentMapChild.get(taskSegmentKeyChild) : undefined;\n if (cacheNodeChild !== undefined) {\n if (serverStateChild !== undefined && (0, _matchsegments.matchSegment)(taskSegmentChild, serverStateChild[0])) {\n if (dataChild !== undefined && dataChild !== null) {\n // This is the happy path. Recursively update all the children.\n finishPendingCacheNode(cacheNodeChild, taskStateChild, serverStateChild, dataChild, dynamicHead);\n } else {\n // The server never returned data for this segment. Trigger a lazy\n // fetch during render. This shouldn't happen because the Route Tree\n // and the Seed Data tree sent by the server should always be the same\n // shape when part of the same server response.\n abortPendingCacheNode(taskStateChild, cacheNodeChild, null);\n }\n } else {\n // The server never returned data for this segment. Trigger a lazy\n // fetch during render.\n abortPendingCacheNode(taskStateChild, cacheNodeChild, null);\n }\n } else {\n // The server response matches what was expected to receive, but there's\n // no matching Cache Node in the task tree. This is a bug in the\n // implementation because we should have created a node for every\n // segment in the tree that's associated with this task.\n }\n }\n // Use the dynamic data from the server to fulfill the deferred RSC promise\n // on the Cache Node.\n const rsc = cacheNode.rsc;\n const dynamicSegmentData = dynamicData[2];\n if (rsc === null) {\n // This is a lazy cache node. We can overwrite it. This is only safe\n // because we know that the LayoutRouter suspends if `rsc` is `null`.\n cacheNode.rsc = dynamicSegmentData;\n } else if (isDeferredRsc(rsc)) {\n // This is a deferred RSC promise. We can fulfill it with the data we just\n // received from the server. If it was already resolved by a different\n // navigation, then this does nothing because we can't overwrite data.\n rsc.resolve(dynamicSegmentData);\n } else {\n // This is not a deferred RSC promise, nor is it empty, so it must have\n // been populated by a different navigation. We must not overwrite it.\n }\n // Check if this is a leaf segment. If so, it will have a `head` property with\n // a pending promise that needs to be resolved with the dynamic head from\n // the server.\n const head = cacheNode.head;\n if (isDeferredRsc(head)) {\n head.resolve(dynamicHead);\n }\n}\nfunction abortTask(task, error) {\n const cacheNode = task.node;\n if (cacheNode === null) {\n // This indicates the task is already complete.\n return;\n }\n const taskChildren = task.children;\n if (taskChildren === null) {\n // Reached the leaf task node. This is the root of a pending cache\n // node tree.\n abortPendingCacheNode(task.route, cacheNode, error);\n } else {\n // This is an intermediate task node. Keep traversing until we reach a\n // task node with no children. That will be the root of the cache node tree\n // that needs to be resolved.\n for (const taskChild of taskChildren.values()){\n abortTask(taskChild, error);\n }\n }\n // Null this out to indicate that the task is complete.\n task.node = null;\n}\nfunction abortPendingCacheNode(routerState, cacheNode, error) {\n // For every pending segment in the tree, resolve its `rsc` promise to `null`\n // to trigger a lazy fetch during render.\n //\n // Or, if an error object is provided, it will error instead.\n const routerStateChildren = routerState[1];\n const parallelRoutes = cacheNode.parallelRoutes;\n for(let parallelRouteKey in routerStateChildren){\n const routerStateChild = routerStateChildren[parallelRouteKey];\n const segmentMapChild = parallelRoutes.get(parallelRouteKey);\n if (segmentMapChild === undefined) {\n continue;\n }\n const segmentChild = routerStateChild[0];\n const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n const cacheNodeChild = segmentMapChild.get(segmentKeyChild);\n if (cacheNodeChild !== undefined) {\n abortPendingCacheNode(routerStateChild, cacheNodeChild, error);\n } else {\n // This shouldn't happen because we're traversing the same tree that was\n // used to construct the cache nodes in the first place.\n }\n }\n const rsc = cacheNode.rsc;\n if (isDeferredRsc(rsc)) {\n if (error === null) {\n // This will trigger a lazy fetch during render.\n rsc.resolve(null);\n } else {\n // This will trigger an error during rendering.\n rsc.reject(error);\n }\n }\n // Check if this is a leaf segment. If so, it will have a `head` property with\n // a pending promise that needs to be resolved. If an error was provided, we\n // will not resolve it with an error, since this is rendered at the root of\n // the app. We want the segment to error, not the entire app.\n const head = cacheNode.head;\n if (isDeferredRsc(head)) {\n head.resolve(null);\n }\n}\nfunction updateCacheNodeOnPopstateRestoration(oldCacheNode, routerState) {\n // A popstate navigation reads data from the local cache. It does not issue\n // new network requests (unless the cache entries have been evicted). So, we\n // update the cache to drop the prefetch data for any segment whose dynamic\n // data was already received. This prevents an unnecessary flash back to PPR\n // state during a back/forward navigation.\n //\n // This function clones the entire cache node tree and sets the `prefetchRsc`\n // field to `null` to prevent it from being rendered. We can't mutate the node\n // in place because this is a concurrent data structure.\n const routerStateChildren = routerState[1];\n const oldParallelRoutes = oldCacheNode.parallelRoutes;\n const newParallelRoutes = new Map(oldParallelRoutes);\n for(let parallelRouteKey in routerStateChildren){\n const routerStateChild = routerStateChildren[parallelRouteKey];\n const segmentChild = routerStateChild[0];\n const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n const oldSegmentMapChild = oldParallelRoutes.get(parallelRouteKey);\n if (oldSegmentMapChild !== undefined) {\n const oldCacheNodeChild = oldSegmentMapChild.get(segmentKeyChild);\n if (oldCacheNodeChild !== undefined) {\n const newCacheNodeChild = updateCacheNodeOnPopstateRestoration(oldCacheNodeChild, routerStateChild);\n const newSegmentMapChild = new Map(oldSegmentMapChild);\n newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);\n newParallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n }\n }\n }\n // Only show prefetched data if the dynamic data is still pending.\n //\n // Tehnically, what we're actually checking is whether the dynamic network\n // response was received. But since it's a streaming response, this does not\n // mean that all the dynamic data has fully streamed in. It just means that\n // _some_ of the dynamic data was received. But as a heuristic, we assume that\n // the rest dynamic data will stream in quickly, so it's still better to skip\n // the prefetch state.\n const rsc = oldCacheNode.rsc;\n const shouldUsePrefetch = isDeferredRsc(rsc) && rsc.status === \"pending\";\n return {\n lazyData: null,\n rsc,\n head: oldCacheNode.head,\n prefetchHead: shouldUsePrefetch ? oldCacheNode.prefetchHead : null,\n prefetchRsc: shouldUsePrefetch ? oldCacheNode.prefetchRsc : null,\n // These are the cloned children we computed above\n parallelRoutes: newParallelRoutes\n };\n}\nconst DEFERRED = Symbol();\n// This type exists to distinguish a DeferredRsc from a Flight promise. It's a\n// compromise to avoid adding an extra field on every Cache Node, which would be\n// awkward because the pre-PPR parts of codebase would need to account for it,\n// too. We can remove it once type Cache Node type is more settled.\nfunction isDeferredRsc(value) {\n return value && value.tag === DEFERRED;\n}\nfunction createDeferredRsc() {\n let resolve;\n let reject;\n const pendingRsc = new Promise((res, rej)=>{\n resolve = res;\n reject = rej;\n });\n pendingRsc.status = \"pending\";\n pendingRsc.resolve = (value)=>{\n if (pendingRsc.status === \"pending\") {\n const fulfilledRsc = pendingRsc;\n fulfilledRsc.status = \"fulfilled\";\n fulfilledRsc.value = value;\n resolve(value);\n }\n };\n pendingRsc.reject = (error)=>{\n if (pendingRsc.status === \"pending\") {\n const rejectedRsc = pendingRsc;\n rejectedRsc.status = \"rejected\";\n rejectedRsc.reason = error;\n reject(error);\n }\n };\n pendingRsc.tag = DEFERRED;\n return pendingRsc;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=ppr-navigations.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcHByLW5hdmlnYXRpb25zLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBS047QUFDQSxTQUFTSyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJWCxPQUFPQyxjQUFjLENBQUNTLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUVAsU0FBUztJQUNiRyw2QkFBNkI7UUFDekIsT0FBT0E7SUFDWDtJQUNBQyx5QkFBeUI7UUFDckIsT0FBT0E7SUFDWDtJQUNBQyxXQUFXO1FBQ1AsT0FBT0E7SUFDWDtJQUNBQyxzQ0FBc0M7UUFDbEMsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sV0FBV0MsbUJBQU9BLENBQUMsdUdBQTZCO0FBQ3RELE1BQU1DLGlCQUFpQkQsbUJBQU9BLENBQUMsMkdBQW1CO0FBQ2xELE1BQU1FLHdCQUF3QkYsbUJBQU9BLENBQUMsMklBQTJCO0FBQ2pFLFNBQVNYLDRCQUE0QmMsWUFBWSxFQUFFQyxjQUFjLEVBQUVDLGNBQWMsRUFBRUMsWUFBWSxFQUFFQyxZQUFZLEVBQUVDLGVBQWU7SUFDMUgsMERBQTBEO0lBQzFELE1BQU1DLHlCQUF5QkwsY0FBYyxDQUFDLEVBQUU7SUFDaEQsTUFBTU0seUJBQXlCTCxjQUFjLENBQUMsRUFBRTtJQUNoRCxNQUFNTSx1QkFBdUJMLFlBQVksQ0FBQyxFQUFFO0lBQzVDLE1BQU1NLG9CQUFvQlQsYUFBYVUsY0FBYztJQUNyRCwyRUFBMkU7SUFDM0UsZ0JBQWdCO0lBQ2hCLDBFQUEwRTtJQUMxRSwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSwwRUFBMEU7SUFDMUUsdUVBQXVFO0lBQ3ZFLHlFQUF5RTtJQUN6RSx3RUFBd0U7SUFDeEUsK0JBQStCO0lBQy9CLE1BQU1DLHlCQUF5QixJQUFJQyxJQUFJSDtJQUN2Qyw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSw2RUFBNkU7SUFDN0UsbUJBQW1CO0lBQ25CLElBQUlJLDZCQUE2QixDQUFDO0lBQ2xDLElBQUlDLGVBQWU7SUFDbkIsSUFBSSxJQUFJQyxvQkFBb0JSLHVCQUF1QjtRQUMvQyxNQUFNUyxzQkFBc0JULHNCQUFzQixDQUFDUSxpQkFBaUI7UUFDcEUsTUFBTUUsc0JBQXNCWCxzQkFBc0IsQ0FBQ1MsaUJBQWlCO1FBQ3BFLE1BQU1HLHFCQUFxQlQsa0JBQWtCZCxHQUFHLENBQUNvQjtRQUNqRCxNQUFNSSxvQkFBb0JYLG9CQUFvQixDQUFDTyxpQkFBaUI7UUFDaEUsTUFBTUssa0JBQWtCSixtQkFBbUIsQ0FBQyxFQUFFO1FBQzlDLE1BQU1LLHFCQUFxQixDQUFDLEdBQUd0QixzQkFBc0J1QixvQkFBb0IsRUFBRUY7UUFDM0UsTUFBTUcsa0JBQWtCTix3QkFBd0JPLFlBQVlQLG1CQUFtQixDQUFDLEVBQUUsR0FBR087UUFDckYsTUFBTUMsb0JBQW9CUCx1QkFBdUJNLFlBQVlOLG1CQUFtQnZCLEdBQUcsQ0FBQzBCLHNCQUFzQkc7UUFDMUcsSUFBSUU7UUFDSixJQUFJTixvQkFBb0J4QixTQUFTK0IsZ0JBQWdCLEVBQUU7WUFDL0Msd0VBQXdFO1lBQ3hFLFlBQVk7WUFDWkQsWUFBWUUsaUJBQWlCWixxQkFBcUJHLHNCQUFzQkssWUFBWUwsb0JBQW9CLE1BQU1mLGNBQWNDO1FBQ2hJLE9BQU8sSUFBSWUsb0JBQW9CeEIsU0FBU2lDLG1CQUFtQixFQUFFO1lBQ3pELDBEQUEwRDtZQUMxRCxFQUFFO1lBQ0YseUVBQXlFO1lBQ3pFLHVFQUF1RTtZQUN2RSxzRUFBc0U7WUFDdEUsb0VBQW9FO1lBQ3BFLFdBQVc7WUFDWCxJQUFJWix3QkFBd0JPLFdBQVc7Z0JBQ25DLHNFQUFzRTtnQkFDdEUsb0VBQW9FO2dCQUNwRSxtRUFBbUU7Z0JBQ25FRSxZQUFZSSxnQkFBZ0JiO1lBQ2hDLE9BQU87Z0JBQ0gsb0VBQW9FO2dCQUNwRVMsWUFBWUUsaUJBQWlCWixxQkFBcUJHLHNCQUFzQkssWUFBWUwsb0JBQW9CLE1BQU1mLGNBQWNDO1lBQ2hJO1FBQ0osT0FBTyxJQUFJa0Isb0JBQW9CQyxhQUFhLENBQUMsR0FBRzFCLGVBQWVpQyxZQUFZLEVBQUVYLGlCQUFpQkcsa0JBQWtCO1lBQzVHLElBQUlFLHNCQUFzQkQsYUFBYVAsd0JBQXdCTyxXQUFXO2dCQUN0RSxxREFBcUQ7Z0JBQ3JELElBQUlMLHNCQUFzQkssYUFBYUwsc0JBQXNCLE1BQU07b0JBQy9ELG1DQUFtQztvQkFDbkNPLFlBQVl4Qyw0QkFBNEJ1QyxtQkFBbUJSLHFCQUFxQkQscUJBQXFCRyxtQkFBbUJmLGNBQWNDO2dCQUMxSSxPQUFPO29CQUNILGtFQUFrRTtvQkFDbEUsaUVBQWlFO29CQUNqRSxrRUFBa0U7b0JBQ2xFLGtFQUFrRTtvQkFDbEUsNEJBQTRCO29CQUM1QnFCLFlBQVlNLHdCQUF3QmhCO2dCQUN4QztZQUNKLE9BQU87Z0JBQ0gsa0VBQWtFO2dCQUNsRSxvRUFBb0U7Z0JBQ3BFLGlCQUFpQjtnQkFDakJVLFlBQVlFLGlCQUFpQloscUJBQXFCRyxzQkFBc0JLLFlBQVlMLG9CQUFvQixNQUFNZixjQUFjQztZQUNoSTtRQUNKLE9BQU87WUFDSCxtREFBbUQ7WUFDbkRxQixZQUFZRSxpQkFBaUJaLHFCQUFxQkcsc0JBQXNCSyxZQUFZTCxvQkFBb0IsTUFBTWYsY0FBY0M7UUFDaEk7UUFDQSxJQUFJcUIsY0FBYyxNQUFNO1lBQ3BCLHFFQUFxRTtZQUNyRSxJQUFJWixpQkFBaUIsTUFBTTtnQkFDdkJBLGVBQWUsSUFBSUY7WUFDdkI7WUFDQUUsYUFBYW1CLEdBQUcsQ0FBQ2xCLGtCQUFrQlc7WUFDbkMsTUFBTVEsb0JBQW9CUixVQUFVUyxJQUFJO1lBQ3hDLElBQUlELHNCQUFzQixNQUFNO2dCQUM1QixNQUFNRSxxQkFBcUIsSUFBSXhCLElBQUlNO2dCQUNuQ2tCLG1CQUFtQkgsR0FBRyxDQUFDWixvQkFBb0JhO2dCQUMzQ3ZCLHVCQUF1QnNCLEdBQUcsQ0FBQ2xCLGtCQUFrQnFCO1lBQ2pEO1lBQ0Esb0VBQW9FO1lBQ3BFLHVFQUF1RTtZQUN2RSxZQUFZO1lBQ1p2QiwwQkFBMEIsQ0FBQ0UsaUJBQWlCLEdBQUdXLFVBQVVXLEtBQUs7UUFDbEUsT0FBTztZQUNILG1FQUFtRTtZQUNuRXhCLDBCQUEwQixDQUFDRSxpQkFBaUIsR0FBR0M7UUFDbkQ7SUFDSjtJQUNBLElBQUlGLGlCQUFpQixNQUFNO1FBQ3ZCLDZCQUE2QjtRQUM3QixPQUFPO0lBQ1g7SUFDQSxNQUFNd0IsZUFBZTtRQUNqQkMsVUFBVTtRQUNWQyxLQUFLeEMsYUFBYXdDLEdBQUc7UUFDckIsMEVBQTBFO1FBQzFFLHFFQUFxRTtRQUNyRSwyRUFBMkU7UUFDM0UsMEVBQTBFO1FBQzFFLDJFQUEyRTtRQUMzRSxxQ0FBcUM7UUFDckNDLGFBQWF6QyxhQUFheUMsV0FBVztRQUNyQ0MsTUFBTTFDLGFBQWEwQyxJQUFJO1FBQ3ZCdEMsY0FBY0osYUFBYUksWUFBWTtRQUN2Qyx5RUFBeUU7UUFDekVNLGdCQUFnQkM7SUFDcEI7SUFDQSxPQUFPO1FBQ0gsa0VBQWtFO1FBQ2xFMEIsT0FBT00sZ0NBQWdDekMsZ0JBQWdCVztRQUN2RHNCLE1BQU1HO1FBQ05NLFVBQVU5QjtJQUNkO0FBQ0o7QUFDQSxTQUFTNkIsZ0NBQWdDRSxlQUFlLEVBQUVDLFdBQVc7SUFDakUsTUFBTUMsUUFBUTtRQUNWRixlQUFlLENBQUMsRUFBRTtRQUNsQkM7S0FDSDtJQUNELDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsdUNBQXVDO0lBQ3ZDLElBQUksS0FBS0QsaUJBQWlCO1FBQ3RCRSxLQUFLLENBQUMsRUFBRSxHQUFHRixlQUFlLENBQUMsRUFBRTtJQUNqQztJQUNBLElBQUksS0FBS0EsaUJBQWlCO1FBQ3RCRSxLQUFLLENBQUMsRUFBRSxHQUFHRixlQUFlLENBQUMsRUFBRTtJQUNqQztJQUNBLElBQUksS0FBS0EsaUJBQWlCO1FBQ3RCRSxLQUFLLENBQUMsRUFBRSxHQUFHRixlQUFlLENBQUMsRUFBRTtJQUNqQztJQUNBLE9BQU9FO0FBQ1g7QUFDQSxTQUFTbkIsaUJBQWlCb0IsV0FBVyxFQUFFN0MsWUFBWSxFQUFFQyxZQUFZLEVBQUVDLGVBQWU7SUFDOUUsc0VBQXNFO0lBQ3RFLE1BQU00QyxtQkFBbUJDLHVCQUF1QkYsYUFBYTdDLGNBQWNDLGNBQWNDO0lBQ3pGLE9BQU87UUFDSGdDLE9BQU9XO1FBQ1BiLE1BQU1jO1FBQ05MLFVBQVU7SUFDZDtBQUNKO0FBQ0EsU0FBU2QsZ0JBQWdCcUIsaUJBQWlCO0lBQ3RDLG1FQUFtRTtJQUNuRSwwREFBMEQ7SUFDMUQsT0FBTztRQUNIZCxPQUFPYztRQUNQaEIsTUFBTTtRQUNOUyxVQUFVO0lBQ2Q7QUFDSjtBQUNBLFNBQVNaLHdCQUF3QmdCLFdBQVc7SUFDeEMsd0VBQXdFO0lBQ3hFLDZFQUE2RTtJQUM3RSx3REFBd0Q7SUFDeEQsTUFBTUMsbUJBQW1CQyx1QkFBdUJGLGFBQWEsTUFBTSxNQUFNO0lBQ3pFLE9BQU87UUFDSFgsT0FBT1c7UUFDUGIsTUFBTWM7UUFDTkwsVUFBVTtJQUNkO0FBQ0o7QUFDQSxTQUFTekQsd0JBQXdCaUUsSUFBSSxFQUFFQyxlQUFlO0lBQ2xEQSxnQkFBZ0JDLElBQUksQ0FBQyxDQUFDQztRQUNsQixNQUFNQyxhQUFhRCxRQUFRLENBQUMsRUFBRTtRQUM5QixLQUFLLE1BQU1FLGtCQUFrQkQsV0FBVztZQUNwQyxNQUFNRSxjQUFjRCxlQUFlRSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQzdDLE1BQU1DLG9CQUFvQkgsY0FBYyxDQUFDQSxlQUFlSSxNQUFNLEdBQUcsRUFBRTtZQUNuRSxNQUFNQyxjQUFjTCxjQUFjLENBQUNBLGVBQWVJLE1BQU0sR0FBRyxFQUFFO1lBQzdELE1BQU1FLGNBQWNOLGNBQWMsQ0FBQ0EsZUFBZUksTUFBTSxHQUFHLEVBQUU7WUFDN0QsSUFBSSxPQUFPSCxnQkFBZ0IsVUFBVTtnQkFDakM7WUFDSjtZQUNBTSxnQ0FBZ0NaLE1BQU1NLGFBQWFFLG1CQUFtQkUsYUFBYUM7UUFDdkY7UUFDQSx3RUFBd0U7UUFDeEUscUVBQXFFO1FBQ3JFLDZEQUE2RDtRQUM3RDNFLFVBQVVnRSxNQUFNO0lBQ3BCLEdBQUcsQ0FBQ2E7UUFDQSwyQ0FBMkM7UUFDM0M3RSxVQUFVZ0UsTUFBTWE7SUFDcEI7QUFDSjtBQUNBLFNBQVNELGdDQUFnQ0UsUUFBUSxFQUFFUixXQUFXLEVBQUVFLGlCQUFpQixFQUFFRSxXQUFXLEVBQUVDLFdBQVc7SUFDdkcsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSxxQ0FBcUM7SUFDckMsRUFBRTtJQUNGLDhFQUE4RTtJQUM5RSxxQ0FBcUM7SUFDckMsRUFBRTtJQUNGLDZEQUE2RDtJQUM3RCxFQUFFO0lBQ0YseUVBQXlFO0lBQ3pFLElBQUlYLE9BQU9jO0lBQ1gsSUFBSSxJQUFJQyxJQUFJLEdBQUdBLElBQUlULFlBQVlHLE1BQU0sRUFBRU0sS0FBSyxFQUFFO1FBQzFDLE1BQU1wRCxtQkFBbUIyQyxXQUFXLENBQUNTLEVBQUU7UUFDdkMsTUFBTUMsVUFBVVYsV0FBVyxDQUFDUyxJQUFJLEVBQUU7UUFDbEMsTUFBTXJELGVBQWVzQyxLQUFLUixRQUFRO1FBQ2xDLElBQUk5QixpQkFBaUIsTUFBTTtZQUN2QixNQUFNWSxZQUFZWixhQUFhbkIsR0FBRyxDQUFDb0I7WUFDbkMsSUFBSVcsY0FBY0YsV0FBVztnQkFDekIsTUFBTTZDLGNBQWMzQyxVQUFVVyxLQUFLLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLEdBQUd2QyxlQUFlaUMsWUFBWSxFQUFFcUMsU0FBU0MsY0FBYztvQkFDeEQsbUVBQW1FO29CQUNuRWpCLE9BQU8xQjtvQkFDUDtnQkFDSjtZQUNKO1FBQ0o7UUFDQSwyRUFBMkU7UUFDM0UsNEVBQTRFO1FBQzVFLHdFQUF3RTtRQUN4RSw4QkFBOEI7UUFDOUI7SUFDSjtJQUNBNEMsa0NBQWtDbEIsTUFBTVEsbUJBQW1CRSxhQUFhQztBQUM1RTtBQUNBLFNBQVNPLGtDQUFrQ2xCLElBQUksRUFBRVEsaUJBQWlCLEVBQUVFLFdBQVcsRUFBRUMsV0FBVztJQUN4RiwwRUFBMEU7SUFDMUUsNENBQTRDO0lBQzVDLE1BQU1qRCxlQUFlc0MsS0FBS1IsUUFBUTtJQUNsQyxNQUFNMkIsV0FBV25CLEtBQUtqQixJQUFJO0lBQzFCLElBQUlyQixpQkFBaUIsTUFBTTtRQUN2Qix3RUFBd0U7UUFDeEUsaUVBQWlFO1FBQ2pFLG9CQUFvQjtRQUNwQixJQUFJeUQsYUFBYSxNQUFNO1lBQ25CQyx1QkFBdUJELFVBQVVuQixLQUFLZixLQUFLLEVBQUV1QixtQkFBbUJFLGFBQWFDO1lBQzdFLHVEQUF1RDtZQUN2RFgsS0FBS2pCLElBQUksR0FBRztRQUNoQjtRQUNBO0lBQ0o7SUFDQSwyRUFBMkU7SUFDM0Usd0RBQXdEO0lBQ3hELE1BQU1zQyxpQkFBaUJiLGlCQUFpQixDQUFDLEVBQUU7SUFDM0MsTUFBTWMsc0JBQXNCWixXQUFXLENBQUMsRUFBRTtJQUMxQyxJQUFJLE1BQU0vQyxvQkFBb0I2QyxrQkFBa0I7UUFDNUMsTUFBTWUseUJBQXlCRixjQUFjLENBQUMxRCxpQkFBaUI7UUFDL0QsTUFBTTZELG1CQUFtQkYsbUJBQW1CLENBQUMzRCxpQkFBaUI7UUFDOUQsTUFBTVcsWUFBWVosYUFBYW5CLEdBQUcsQ0FBQ29CO1FBQ25DLElBQUlXLGNBQWNGLFdBQVc7WUFDekIsTUFBTTZDLGNBQWMzQyxVQUFVVyxLQUFLLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsR0FBR3ZDLGVBQWVpQyxZQUFZLEVBQUU0QyxzQkFBc0IsQ0FBQyxFQUFFLEVBQUVOLGdCQUFnQk8scUJBQXFCLFFBQVFBLHFCQUFxQnBELFdBQVc7Z0JBQ3pJLG1FQUFtRTtnQkFDbkUsT0FBTzhDLGtDQUFrQzVDLFdBQVdpRCx3QkFBd0JDLGtCQUFrQmI7WUFDbEc7UUFDSjtJQUNKLDJFQUEyRTtJQUMzRSxzRUFBc0U7SUFDdEUsd0VBQXdFO0lBQ3hFLDhCQUE4QjtJQUM5QjtBQUNKO0FBQ0EsU0FBU2IsdUJBQXVCRixXQUFXLEVBQUU3QyxZQUFZLEVBQUVDLFlBQVksRUFBRUMsZUFBZTtJQUNwRixNQUFNd0Usc0JBQXNCN0IsV0FBVyxDQUFDLEVBQUU7SUFDMUMsTUFBTXhDLHVCQUF1QkwsaUJBQWlCLE9BQU9BLFlBQVksQ0FBQyxFQUFFLEdBQUc7SUFDdkUsTUFBTU8saUJBQWlCLElBQUlFO0lBQzNCLElBQUksSUFBSUcsb0JBQW9COEQsb0JBQW9CO1FBQzVDLE1BQU1DLG1CQUFtQkQsbUJBQW1CLENBQUM5RCxpQkFBaUI7UUFDOUQsTUFBTUksb0JBQW9CWCx5QkFBeUIsT0FBT0Esb0JBQW9CLENBQUNPLGlCQUFpQixHQUFHO1FBQ25HLE1BQU1nRSxlQUFlRCxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3hDLE1BQU1FLGtCQUFrQixDQUFDLEdBQUdqRixzQkFBc0J1QixvQkFBb0IsRUFBRXlEO1FBQ3hFLE1BQU03QyxvQkFBb0JnQix1QkFBdUI0QixrQkFBa0IzRCxzQkFBc0JLLFlBQVksT0FBT0wsbUJBQW1CZixjQUFjQztRQUM3SSxNQUFNK0IscUJBQXFCLElBQUl4QjtRQUMvQndCLG1CQUFtQkgsR0FBRyxDQUFDK0MsaUJBQWlCOUM7UUFDeEN4QixlQUFldUIsR0FBRyxDQUFDbEIsa0JBQWtCcUI7SUFDekM7SUFDQSw0RUFBNEU7SUFDNUUsbUVBQW1FO0lBQ25FLE1BQU02QyxnQkFBZ0J2RSxlQUFld0UsSUFBSSxLQUFLO0lBQzlDLE1BQU1DLG1CQUFtQmhGLGlCQUFpQixPQUFPQSxZQUFZLENBQUMsRUFBRSxHQUFHO0lBQ25FLE9BQU87UUFDSG9DLFVBQVU7UUFDVjdCLGdCQUFnQkE7UUFDaEIrQixhQUNBLDZCQUE2QjtRQUM3Qix3RUFBd0U7UUFDeEUsd0RBQXdEO1FBQ3hELENBQUNwQyxtQkFBbUI4RSxxQkFBcUIzRCxZQUFZMkQsbUJBQW1CO1FBQ3hFL0UsY0FBYyxDQUFDQyxtQkFBbUI0RSxnQkFBZ0I3RSxlQUFlO1FBQ2pFLHFFQUFxRTtRQUNyRSx3Q0FBd0M7UUFDeENvQyxLQUFLNEM7UUFDTDFDLE1BQU11QyxnQkFBZ0JHLHNCQUFzQjtJQUNoRDtBQUNKO0FBQ0EsU0FBU1osdUJBQXVCYSxTQUFTLEVBQUVDLFNBQVMsRUFBRUMsV0FBVyxFQUFFekIsV0FBVyxFQUFFQyxXQUFXO0lBQ3ZGLDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUM5RSw4REFBOEQ7SUFDOUQsNkJBQTZCO0lBQzdCLEVBQUU7SUFDRixxRUFBcUU7SUFDckUsOEVBQThFO0lBQzlFLGdFQUFnRTtJQUNoRSxNQUFNeUIsb0JBQW9CRixTQUFTLENBQUMsRUFBRTtJQUN0QyxNQUFNRyxzQkFBc0JGLFdBQVcsQ0FBQyxFQUFFO0lBQzFDLE1BQU1HLGVBQWU1QixXQUFXLENBQUMsRUFBRTtJQUNuQyw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLHVDQUF1QztJQUN2QyxNQUFNcEQsaUJBQWlCMkUsVUFBVTNFLGNBQWM7SUFDL0MsSUFBSSxJQUFJSyxvQkFBb0J5RSxrQkFBa0I7UUFDMUMsTUFBTUcsaUJBQWlCSCxpQkFBaUIsQ0FBQ3pFLGlCQUFpQjtRQUMxRCxNQUFNNkUsbUJBQW1CSCxtQkFBbUIsQ0FBQzFFLGlCQUFpQjtRQUM5RCxNQUFNOEUsWUFBWUgsWUFBWSxDQUFDM0UsaUJBQWlCO1FBQ2hELE1BQU0rRSxrQkFBa0JwRixlQUFlZixHQUFHLENBQUNvQjtRQUMzQyxNQUFNZ0YsbUJBQW1CSixjQUFjLENBQUMsRUFBRTtRQUMxQyxNQUFNSyxzQkFBc0IsQ0FBQyxHQUFHakcsc0JBQXNCdUIsb0JBQW9CLEVBQUV5RTtRQUM1RSxNQUFNRSxpQkFBaUJILG9CQUFvQnRFLFlBQVlzRSxnQkFBZ0JuRyxHQUFHLENBQUNxRyx1QkFBdUJ4RTtRQUNsRyxJQUFJeUUsbUJBQW1CekUsV0FBVztZQUM5QixJQUFJb0UscUJBQXFCcEUsYUFBYSxDQUFDLEdBQUcxQixlQUFlaUMsWUFBWSxFQUFFZ0Usa0JBQWtCSCxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUc7Z0JBQzNHLElBQUlDLGNBQWNyRSxhQUFhcUUsY0FBYyxNQUFNO29CQUMvQywrREFBK0Q7b0JBQy9EckIsdUJBQXVCeUIsZ0JBQWdCTixnQkFBZ0JDLGtCQUFrQkMsV0FBVzlCO2dCQUN4RixPQUFPO29CQUNILGtFQUFrRTtvQkFDbEUsb0VBQW9FO29CQUNwRSxzRUFBc0U7b0JBQ3RFLCtDQUErQztvQkFDL0NtQyxzQkFBc0JQLGdCQUFnQk0sZ0JBQWdCO2dCQUMxRDtZQUNKLE9BQU87Z0JBQ0gsa0VBQWtFO2dCQUNsRSx1QkFBdUI7Z0JBQ3ZCQyxzQkFBc0JQLGdCQUFnQk0sZ0JBQWdCO1lBQzFEO1FBQ0osT0FBTztRQUNQLHdFQUF3RTtRQUN4RSxnRUFBZ0U7UUFDaEUsaUVBQWlFO1FBQ2pFLHdEQUF3RDtRQUN4RDtJQUNKO0lBQ0EsMkVBQTJFO0lBQzNFLHFCQUFxQjtJQUNyQixNQUFNekQsTUFBTTZDLFVBQVU3QyxHQUFHO0lBQ3pCLE1BQU0yRCxxQkFBcUJyQyxXQUFXLENBQUMsRUFBRTtJQUN6QyxJQUFJdEIsUUFBUSxNQUFNO1FBQ2Qsb0VBQW9FO1FBQ3BFLHFFQUFxRTtRQUNyRTZDLFVBQVU3QyxHQUFHLEdBQUcyRDtJQUNwQixPQUFPLElBQUlDLGNBQWM1RCxNQUFNO1FBQzNCLDBFQUEwRTtRQUMxRSxzRUFBc0U7UUFDdEUsc0VBQXNFO1FBQ3RFQSxJQUFJNkQsT0FBTyxDQUFDRjtJQUNoQixPQUFPO0lBQ1AsdUVBQXVFO0lBQ3ZFLHNFQUFzRTtJQUN0RTtJQUNBLDhFQUE4RTtJQUM5RSx5RUFBeUU7SUFDekUsY0FBYztJQUNkLE1BQU16RCxPQUFPMkMsVUFBVTNDLElBQUk7SUFDM0IsSUFBSTBELGNBQWMxRCxPQUFPO1FBQ3JCQSxLQUFLMkQsT0FBTyxDQUFDdEM7SUFDakI7QUFDSjtBQUNBLFNBQVMzRSxVQUFVZ0UsSUFBSSxFQUFFYSxLQUFLO0lBQzFCLE1BQU1vQixZQUFZakMsS0FBS2pCLElBQUk7SUFDM0IsSUFBSWtELGNBQWMsTUFBTTtRQUNwQiwrQ0FBK0M7UUFDL0M7SUFDSjtJQUNBLE1BQU12RSxlQUFlc0MsS0FBS1IsUUFBUTtJQUNsQyxJQUFJOUIsaUJBQWlCLE1BQU07UUFDdkIsa0VBQWtFO1FBQ2xFLGFBQWE7UUFDYm9GLHNCQUFzQjlDLEtBQUtmLEtBQUssRUFBRWdELFdBQVdwQjtJQUNqRCxPQUFPO1FBQ0gsc0VBQXNFO1FBQ3RFLDJFQUEyRTtRQUMzRSw2QkFBNkI7UUFDN0IsS0FBSyxNQUFNdkMsYUFBYVosYUFBYXdGLE1BQU0sR0FBRztZQUMxQ2xILFVBQVVzQyxXQUFXdUM7UUFDekI7SUFDSjtJQUNBLHVEQUF1RDtJQUN2RGIsS0FBS2pCLElBQUksR0FBRztBQUNoQjtBQUNBLFNBQVMrRCxzQkFBc0JsRCxXQUFXLEVBQUVxQyxTQUFTLEVBQUVwQixLQUFLO0lBQ3hELDZFQUE2RTtJQUM3RSx5Q0FBeUM7SUFDekMsRUFBRTtJQUNGLDZEQUE2RDtJQUM3RCxNQUFNWSxzQkFBc0I3QixXQUFXLENBQUMsRUFBRTtJQUMxQyxNQUFNdEMsaUJBQWlCMkUsVUFBVTNFLGNBQWM7SUFDL0MsSUFBSSxJQUFJSyxvQkFBb0I4RCxvQkFBb0I7UUFDNUMsTUFBTUMsbUJBQW1CRCxtQkFBbUIsQ0FBQzlELGlCQUFpQjtRQUM5RCxNQUFNK0Usa0JBQWtCcEYsZUFBZWYsR0FBRyxDQUFDb0I7UUFDM0MsSUFBSStFLG9CQUFvQnRFLFdBQVc7WUFDL0I7UUFDSjtRQUNBLE1BQU11RCxlQUFlRCxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3hDLE1BQU1FLGtCQUFrQixDQUFDLEdBQUdqRixzQkFBc0J1QixvQkFBb0IsRUFBRXlEO1FBQ3hFLE1BQU1rQixpQkFBaUJILGdCQUFnQm5HLEdBQUcsQ0FBQ3FGO1FBQzNDLElBQUlpQixtQkFBbUJ6RSxXQUFXO1lBQzlCMEUsc0JBQXNCcEIsa0JBQWtCbUIsZ0JBQWdCaEM7UUFDNUQsT0FBTztRQUNQLHdFQUF3RTtRQUN4RSx3REFBd0Q7UUFDeEQ7SUFDSjtJQUNBLE1BQU16QixNQUFNNkMsVUFBVTdDLEdBQUc7SUFDekIsSUFBSTRELGNBQWM1RCxNQUFNO1FBQ3BCLElBQUl5QixVQUFVLE1BQU07WUFDaEIsZ0RBQWdEO1lBQ2hEekIsSUFBSTZELE9BQU8sQ0FBQztRQUNoQixPQUFPO1lBQ0gsK0NBQStDO1lBQy9DN0QsSUFBSStELE1BQU0sQ0FBQ3RDO1FBQ2Y7SUFDSjtJQUNBLDhFQUE4RTtJQUM5RSw0RUFBNEU7SUFDNUUsMkVBQTJFO0lBQzNFLDZEQUE2RDtJQUM3RCxNQUFNdkIsT0FBTzJDLFVBQVUzQyxJQUFJO0lBQzNCLElBQUkwRCxjQUFjMUQsT0FBTztRQUNyQkEsS0FBSzJELE9BQU8sQ0FBQztJQUNqQjtBQUNKO0FBQ0EsU0FBU2hILHFDQUFxQ1csWUFBWSxFQUFFZ0QsV0FBVztJQUNuRSwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLDRFQUE0RTtJQUM1RSw0RUFBNEU7SUFDNUUsMENBQTBDO0lBQzFDLEVBQUU7SUFDRiw2RUFBNkU7SUFDN0UsOEVBQThFO0lBQzlFLHdEQUF3RDtJQUN4RCxNQUFNNkIsc0JBQXNCN0IsV0FBVyxDQUFDLEVBQUU7SUFDMUMsTUFBTXZDLG9CQUFvQlQsYUFBYVUsY0FBYztJQUNyRCxNQUFNOEYsb0JBQW9CLElBQUk1RixJQUFJSDtJQUNsQyxJQUFJLElBQUlNLG9CQUFvQjhELG9CQUFvQjtRQUM1QyxNQUFNQyxtQkFBbUJELG1CQUFtQixDQUFDOUQsaUJBQWlCO1FBQzlELE1BQU1nRSxlQUFlRCxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3hDLE1BQU1FLGtCQUFrQixDQUFDLEdBQUdqRixzQkFBc0J1QixvQkFBb0IsRUFBRXlEO1FBQ3hFLE1BQU03RCxxQkFBcUJULGtCQUFrQmQsR0FBRyxDQUFDb0I7UUFDakQsSUFBSUcsdUJBQXVCTSxXQUFXO1lBQ2xDLE1BQU1DLG9CQUFvQlAsbUJBQW1CdkIsR0FBRyxDQUFDcUY7WUFDakQsSUFBSXZELHNCQUFzQkQsV0FBVztnQkFDakMsTUFBTVUsb0JBQW9CN0MscUNBQXFDb0MsbUJBQW1CcUQ7Z0JBQ2xGLE1BQU0xQyxxQkFBcUIsSUFBSXhCLElBQUlNO2dCQUNuQ2tCLG1CQUFtQkgsR0FBRyxDQUFDK0MsaUJBQWlCOUM7Z0JBQ3hDc0Usa0JBQWtCdkUsR0FBRyxDQUFDbEIsa0JBQWtCcUI7WUFDNUM7UUFDSjtJQUNKO0lBQ0Esa0VBQWtFO0lBQ2xFLEVBQUU7SUFDRiwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLHNCQUFzQjtJQUN0QixNQUFNSSxNQUFNeEMsYUFBYXdDLEdBQUc7SUFDNUIsTUFBTWlFLG9CQUFvQkwsY0FBYzVELFFBQVFBLElBQUlrRSxNQUFNLEtBQUs7SUFDL0QsT0FBTztRQUNIbkUsVUFBVTtRQUNWQztRQUNBRSxNQUFNMUMsYUFBYTBDLElBQUk7UUFDdkJ0QyxjQUFjcUcsb0JBQW9CekcsYUFBYUksWUFBWSxHQUFHO1FBQzlEcUMsYUFBYWdFLG9CQUFvQnpHLGFBQWF5QyxXQUFXLEdBQUc7UUFDNUQsa0RBQWtEO1FBQ2xEL0IsZ0JBQWdCOEY7SUFDcEI7QUFDSjtBQUNBLE1BQU1HLFdBQVdDO0FBQ2pCLDhFQUE4RTtBQUM5RSxnRkFBZ0Y7QUFDaEYsOEVBQThFO0FBQzlFLG1FQUFtRTtBQUNuRSxTQUFTUixjQUFjcEgsS0FBSztJQUN4QixPQUFPQSxTQUFTQSxNQUFNNkgsR0FBRyxLQUFLRjtBQUNsQztBQUNBLFNBQVN2QjtJQUNMLElBQUlpQjtJQUNKLElBQUlFO0lBQ0osTUFBTU8sYUFBYSxJQUFJQyxRQUFRLENBQUNDLEtBQUtDO1FBQ2pDWixVQUFVVztRQUNWVCxTQUFTVTtJQUNiO0lBQ0FILFdBQVdKLE1BQU0sR0FBRztJQUNwQkksV0FBV1QsT0FBTyxHQUFHLENBQUNySDtRQUNsQixJQUFJOEgsV0FBV0osTUFBTSxLQUFLLFdBQVc7WUFDakMsTUFBTVEsZUFBZUo7WUFDckJJLGFBQWFSLE1BQU0sR0FBRztZQUN0QlEsYUFBYWxJLEtBQUssR0FBR0E7WUFDckJxSCxRQUFRckg7UUFDWjtJQUNKO0lBQ0E4SCxXQUFXUCxNQUFNLEdBQUcsQ0FBQ3RDO1FBQ2pCLElBQUk2QyxXQUFXSixNQUFNLEtBQUssV0FBVztZQUNqQyxNQUFNUyxjQUFjTDtZQUNwQkssWUFBWVQsTUFBTSxHQUFHO1lBQ3JCUyxZQUFZQyxNQUFNLEdBQUduRDtZQUNyQnNDLE9BQU90QztRQUNYO0lBQ0o7SUFDQTZDLFdBQVdELEdBQUcsR0FBR0Y7SUFDakIsT0FBT0c7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPL0gsUUFBUXNJLE9BQU8sS0FBSyxjQUFlLE9BQU90SSxRQUFRc0ksT0FBTyxLQUFLLFlBQVl0SSxRQUFRc0ksT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPdEksUUFBUXNJLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt6SSxPQUFPQyxjQUFjLENBQUNDLFFBQVFzSSxPQUFPLEVBQUUsY0FBYztRQUFFckksT0FBTztJQUFLO0lBQ25FSCxPQUFPMEksTUFBTSxDQUFDeEksUUFBUXNJLE9BQU8sRUFBRXRJO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVFzSSxPQUFPO0FBQ2xDLEVBRUEsMkNBQTJDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcHByLW5hdmlnYXRpb25zLmpzPzY4NWIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICB1cGRhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb246IG51bGwsXG4gICAgbGlzdGVuRm9yRHluYW1pY1JlcXVlc3Q6IG51bGwsXG4gICAgYWJvcnRUYXNrOiBudWxsLFxuICAgIHVwZGF0ZUNhY2hlTm9kZU9uUG9wc3RhdGVSZXN0b3JhdGlvbjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICB1cGRhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uO1xuICAgIH0sXG4gICAgbGlzdGVuRm9yRHluYW1pY1JlcXVlc3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbGlzdGVuRm9yRHluYW1pY1JlcXVlc3Q7XG4gICAgfSxcbiAgICBhYm9ydFRhc2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYWJvcnRUYXNrO1xuICAgIH0sXG4gICAgdXBkYXRlQ2FjaGVOb2RlT25Qb3BzdGF0ZVJlc3RvcmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNhY2hlTm9kZU9uUG9wc3RhdGVSZXN0b3JhdGlvbjtcbiAgICB9XG59KTtcbmNvbnN0IF9zZWdtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL3NoYXJlZC9saWIvc2VnbWVudFwiKTtcbmNvbnN0IF9tYXRjaHNlZ21lbnRzID0gcmVxdWlyZShcIi4uL21hdGNoLXNlZ21lbnRzXCIpO1xuY29uc3QgX2NyZWF0ZXJvdXRlcmNhY2hla2V5ID0gcmVxdWlyZShcIi4vY3JlYXRlLXJvdXRlci1jYWNoZS1rZXlcIik7XG5mdW5jdGlvbiB1cGRhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb24ob2xkQ2FjaGVOb2RlLCBvbGRSb3V0ZXJTdGF0ZSwgbmV3Um91dGVyU3RhdGUsIHByZWZldGNoRGF0YSwgcHJlZmV0Y2hIZWFkLCBpc1ByZWZldGNoU3RhbGUpIHtcbiAgICAvLyBEaWZmIHRoZSBvbGQgYW5kIG5ldyB0cmVlcyB0byByZXVzZSB0aGUgc2hhcmVkIGxheW91dHMuXG4gICAgY29uc3Qgb2xkUm91dGVyU3RhdGVDaGlsZHJlbiA9IG9sZFJvdXRlclN0YXRlWzFdO1xuICAgIGNvbnN0IG5ld1JvdXRlclN0YXRlQ2hpbGRyZW4gPSBuZXdSb3V0ZXJTdGF0ZVsxXTtcbiAgICBjb25zdCBwcmVmZXRjaERhdGFDaGlsZHJlbiA9IHByZWZldGNoRGF0YVsxXTtcbiAgICBjb25zdCBvbGRQYXJhbGxlbFJvdXRlcyA9IG9sZENhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcztcbiAgICAvLyBDbG9uZSB0aGUgY3VycmVudCBzZXQgb2Ygc2VnbWVudCBjaGlsZHJlbiwgZXZlbiBpZiB0aGV5IGFyZW4ndCBhY3RpdmUgaW5cbiAgICAvLyB0aGUgbmV3IHRyZWUuXG4gICAgLy8gVE9ETzogV2UgY3VycmVudGx5IHJldGFpbiBhbGwgdGhlIGluYWN0aXZlIHNlZ21lbnRzIGluZGVmaW5pdGVseSwgdW50aWxcbiAgICAvLyB0aGVyZSdzIGFuIGV4cGxpY2l0IHJlZnJlc2gsIG9yIGEgcGFyZW50IGxheW91dCBpcyBsYXppbHkgcmVmcmVzaGVkLiBXZVxuICAgIC8vIHJlbHkgb24gdGhpcyBmb3IgcG9wc3RhdGUgbmF2aWdhdGlvbnMsIHdoaWNoIHVwZGF0ZSB0aGUgUm91dGVyIFN0YXRlIFRyZWVcbiAgICAvLyBidXQgZG8gbm90IGVhZ2VybHkgcGVyZm9ybSBhIGRhdGEgZmV0Y2gsIGJlY2F1c2UgdGhleSBleHBlY3QgdGhlIHNlZ21lbnRcbiAgICAvLyBkYXRhIHRvIGFscmVhZHkgYmUgaW4gdGhlIENhY2hlIE5vZGUgdHJlZS4gRm9yIGhpZ2hseSBzdGF0aWMgc2l0ZXMgdGhhdFxuICAgIC8vIGFyZSBtb3N0bHkgcmVhZC1vbmx5LCB0aGlzIG1heSBoYXBwZW4gb25seSByYXJlbHksIGNhdXNpbmcgbWVtb3J5IHRvXG4gICAgLy8gbGVhay4gV2Ugc2hvdWxkIGZpZ3VyZSBvdXQgYSBiZXR0ZXIgbW9kZWwgZm9yIHRoZSBsaWZldGltZSBvZiBpbmFjdGl2ZVxuICAgIC8vIHNlZ21lbnRzLCBzbyB3ZSBjYW4gbWFpbnRhaW4gaW5zdGFudCBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbnMgd2l0aG91dFxuICAgIC8vIGxlYWtpbmcgbWVtb3J5IGluZGVmaW5pdGVseS5cbiAgICBjb25zdCBwcmVmZXRjaFBhcmFsbGVsUm91dGVzID0gbmV3IE1hcChvbGRQYXJhbGxlbFJvdXRlcyk7XG4gICAgLy8gQXMgd2UgZGlmZiB0aGUgdHJlZXMsIHdlIG1heSBzb21ldGltZXMgbW9kaWZ5IChjb3B5LW9uLXdyaXRlLCBub3QgbXV0YXRlKVxuICAgIC8vIHRoZSBSb3V0ZSBUcmVlIHRoYXQgd2FzIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIg4oCUIGZvciBleGFtcGxlLCBpbiB0aGUgY2FzZVxuICAgIC8vIG9mIGRlZmF1bHQgcGFyYWxsZWwgcm91dGVzLCB3ZSBwcmVzZXJ2ZSB0aGUgY3VycmVudGx5IGFjdGl2ZSBzZWdtZW50LiBUb1xuICAgIC8vIGF2b2lkIG11dGF0aW5nIHRoZSBvcmlnaW5hbCB0cmVlLCB3ZSBjbG9uZSB0aGUgcm91dGVyIHN0YXRlIGNoaWxkcmVuIGFsb25nXG4gICAgLy8gdGhlIHJldHVybiBwYXRoLlxuICAgIGxldCBwYXRjaGVkUm91dGVyU3RhdGVDaGlsZHJlbiA9IHt9O1xuICAgIGxldCB0YXNrQ2hpbGRyZW4gPSBudWxsO1xuICAgIGZvcihsZXQgcGFyYWxsZWxSb3V0ZUtleSBpbiBuZXdSb3V0ZXJTdGF0ZUNoaWxkcmVuKXtcbiAgICAgICAgY29uc3QgbmV3Um91dGVyU3RhdGVDaGlsZCA9IG5ld1JvdXRlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV07XG4gICAgICAgIGNvbnN0IG9sZFJvdXRlclN0YXRlQ2hpbGQgPSBvbGRSb3V0ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldO1xuICAgICAgICBjb25zdCBvbGRTZWdtZW50TWFwQ2hpbGQgPSBvbGRQYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSk7XG4gICAgICAgIGNvbnN0IHByZWZldGNoRGF0YUNoaWxkID0gcHJlZmV0Y2hEYXRhQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV07XG4gICAgICAgIGNvbnN0IG5ld1NlZ21lbnRDaGlsZCA9IG5ld1JvdXRlclN0YXRlQ2hpbGRbMF07XG4gICAgICAgIGNvbnN0IG5ld1NlZ21lbnRLZXlDaGlsZCA9ICgwLCBfY3JlYXRlcm91dGVyY2FjaGVrZXkuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKG5ld1NlZ21lbnRDaGlsZCk7XG4gICAgICAgIGNvbnN0IG9sZFNlZ21lbnRDaGlsZCA9IG9sZFJvdXRlclN0YXRlQ2hpbGQgIT09IHVuZGVmaW5lZCA/IG9sZFJvdXRlclN0YXRlQ2hpbGRbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IG9sZENhY2hlTm9kZUNoaWxkID0gb2xkU2VnbWVudE1hcENoaWxkICE9PSB1bmRlZmluZWQgPyBvbGRTZWdtZW50TWFwQ2hpbGQuZ2V0KG5ld1NlZ21lbnRLZXlDaGlsZCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCB0YXNrQ2hpbGQ7XG4gICAgICAgIGlmIChuZXdTZWdtZW50Q2hpbGQgPT09IF9zZWdtZW50LlBBR0VfU0VHTUVOVF9LRVkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsZWFmIHNlZ21lbnQg4oCUIGEgcGFnZSwgbm90IGEgc2hhcmVkIGxheW91dC4gV2UgYWx3YXlzIGFwcGx5XG4gICAgICAgICAgICAvLyBpdHMgZGF0YS5cbiAgICAgICAgICAgIHRhc2tDaGlsZCA9IHNwYXduUGVuZGluZ1Rhc2sobmV3Um91dGVyU3RhdGVDaGlsZCwgcHJlZmV0Y2hEYXRhQ2hpbGQgIT09IHVuZGVmaW5lZCA/IHByZWZldGNoRGF0YUNoaWxkIDogbnVsbCwgcHJlZmV0Y2hIZWFkLCBpc1ByZWZldGNoU3RhbGUpO1xuICAgICAgICB9IGVsc2UgaWYgKG5ld1NlZ21lbnRDaGlsZCA9PT0gX3NlZ21lbnQuREVGQVVMVF9TRUdNRU5UX0tFWSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhbm90aGVyIGtpbmQgb2YgbGVhZiBzZWdtZW50IOKAlCBhIGRlZmF1bHQgcm91dGUuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gRGVmYXVsdCByb3V0ZXMgaGF2ZSBzcGVjaWFsIGJlaGF2aW9yLiBXaGVuIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgc2VnbWVudFxuICAgICAgICAgICAgLy8gZm9yIGEgcGFyYWxsZWwgcm91dGUsIE5leHQuanMgcHJlc2VydmVzIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNlZ21lbnRcbiAgICAgICAgICAgIC8vIGR1cmluZyBhIGNsaWVudCBuYXZpZ2F0aW9uIOKAlCBidXQgbm90IGZvciBpbml0aWFsIHJlbmRlci4gVGhlIHNlcnZlclxuICAgICAgICAgICAgLy8gbGVhdmVzIGl0IHRvIHRoZSBjbGllbnQgdG8gYWNjb3VudCBmb3IgdGhpcy4gU28gd2UgbmVlZCB0byBoYW5kbGVcbiAgICAgICAgICAgIC8vIGl0IGhlcmUuXG4gICAgICAgICAgICBpZiAob2xkUm91dGVyU3RhdGVDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV1c2UgdGhlIGV4aXN0aW5nIFJvdXRlciBTdGF0ZSBmb3IgdGhpcyBzZWdtZW50LiBXZSBzcGF3biBhIFwidGFza1wiXG4gICAgICAgICAgICAgICAgLy8ganVzdCB0byBrZWVwIHRyYWNrIG9mIHRoZSB1cGRhdGVkIHJvdXRlciBzdGF0ZTsgdW5saWtlIG1vc3QsIGl0J3NcbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGZ1bGZpbGxlZCBhbmQgd29uJ3QgYmUgYWZmZWN0ZWQgYnkgdGhlIGR5bmFtaWMgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgdGFza0NoaWxkID0gc3Bhd25SZXVzZWRUYXNrKG9sZFJvdXRlclN0YXRlQ2hpbGQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGVyZSdzIG5vIGN1cnJlbnRseSBhY3RpdmUgc2VnbWVudC4gU3dpdGNoIHRvIHRoZSBcImNyZWF0ZVwiIHBhdGguXG4gICAgICAgICAgICAgICAgdGFza0NoaWxkID0gc3Bhd25QZW5kaW5nVGFzayhuZXdSb3V0ZXJTdGF0ZUNoaWxkLCBwcmVmZXRjaERhdGFDaGlsZCAhPT0gdW5kZWZpbmVkID8gcHJlZmV0Y2hEYXRhQ2hpbGQgOiBudWxsLCBwcmVmZXRjaEhlYWQsIGlzUHJlZmV0Y2hTdGFsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob2xkU2VnbWVudENoaWxkICE9PSB1bmRlZmluZWQgJiYgKDAsIF9tYXRjaHNlZ21lbnRzLm1hdGNoU2VnbWVudCkobmV3U2VnbWVudENoaWxkLCBvbGRTZWdtZW50Q2hpbGQpKSB7XG4gICAgICAgICAgICBpZiAob2xkQ2FjaGVOb2RlQ2hpbGQgIT09IHVuZGVmaW5lZCAmJiBvbGRSb3V0ZXJTdGF0ZUNoaWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIHNlZ21lbnQgZXhpc3RzIGluIGJvdGggdGhlIG9sZCBhbmQgbmV3IHRyZWVzLlxuICAgICAgICAgICAgICAgIGlmIChwcmVmZXRjaERhdGFDaGlsZCAhPT0gdW5kZWZpbmVkICYmIHByZWZldGNoRGF0YUNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHVwZGF0ZSB0aGUgY2hpbGRyZW4uXG4gICAgICAgICAgICAgICAgICAgIHRhc2tDaGlsZCA9IHVwZGF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbihvbGRDYWNoZU5vZGVDaGlsZCwgb2xkUm91dGVyU3RhdGVDaGlsZCwgbmV3Um91dGVyU3RhdGVDaGlsZCwgcHJlZmV0Y2hEYXRhQ2hpbGQsIHByZWZldGNoSGVhZCwgaXNQcmVmZXRjaFN0YWxlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc2VydmVyIGRpZG4ndCBzZW5kIGFueSBwcmVmZXRjaCBkYXRhIGZvciB0aGlzIHNlZ21lbnQuIFRoaXNcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkbid0IGhhcHBlbiBiZWNhdXNlIHRoZSBSb3V0ZSBUcmVlIGFuZCB0aGUgU2VlZCBEYXRhIHRyZWVcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGFsd2F5cyBiZSB0aGUgc2FtZSBzaGFwZSwgYnV0IHVudGlsIHdlIHVuaWZ5IHRob3NlIHR5cGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3RpbGwgcG9zc2libGUuIEZvciBub3cgd2UncmUgZ29pbmcgdG8gZGVvcHQgYW5kIHRyaWdnZXIgYVxuICAgICAgICAgICAgICAgICAgICAvLyBsYXp5IGZldGNoIGR1cmluZyByZW5kZXIuXG4gICAgICAgICAgICAgICAgICAgIHRhc2tDaGlsZCA9IHNwYXduVGFza0Zvck1pc3NpbmdEYXRhKG5ld1JvdXRlclN0YXRlQ2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRWl0aGVyIHRoZXJlJ3Mgbm8gZXhpc3RpbmcgQ2FjaGUgTm9kZSBmb3IgdGhpcyBzZWdtZW50LCBvciB0aGlzXG4gICAgICAgICAgICAgICAgLy8gc2VnbWVudCBkb2Vzbid0IGV4aXN0IGluIHRoZSBvbGQgUm91dGVyIFN0YXRlIHRyZWUuIFN3aXRjaCB0byB0aGVcbiAgICAgICAgICAgICAgICAvLyBcImNyZWF0ZVwiIHBhdGguXG4gICAgICAgICAgICAgICAgdGFza0NoaWxkID0gc3Bhd25QZW5kaW5nVGFzayhuZXdSb3V0ZXJTdGF0ZUNoaWxkLCBwcmVmZXRjaERhdGFDaGlsZCAhPT0gdW5kZWZpbmVkID8gcHJlZmV0Y2hEYXRhQ2hpbGQgOiBudWxsLCBwcmVmZXRjaEhlYWQsIGlzUHJlZmV0Y2hTdGFsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHRyZWUuIFN3aXRjaCB0byB0aGUgXCJjcmVhdGVcIiBwYXRoLlxuICAgICAgICAgICAgdGFza0NoaWxkID0gc3Bhd25QZW5kaW5nVGFzayhuZXdSb3V0ZXJTdGF0ZUNoaWxkLCBwcmVmZXRjaERhdGFDaGlsZCAhPT0gdW5kZWZpbmVkID8gcHJlZmV0Y2hEYXRhQ2hpbGQgOiBudWxsLCBwcmVmZXRjaEhlYWQsIGlzUHJlZmV0Y2hTdGFsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhc2tDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gU29tZXRoaW5nIGNoYW5nZWQgaW4gdGhlIGNoaWxkIHRyZWUuIEtlZXAgdHJhY2sgb2YgdGhlIGNoaWxkIHRhc2suXG4gICAgICAgICAgICBpZiAodGFza0NoaWxkcmVuID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGFza0NoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFza0NoaWxkcmVuLnNldChwYXJhbGxlbFJvdXRlS2V5LCB0YXNrQ2hpbGQpO1xuICAgICAgICAgICAgY29uc3QgbmV3Q2FjaGVOb2RlQ2hpbGQgPSB0YXNrQ2hpbGQubm9kZTtcbiAgICAgICAgICAgIGlmIChuZXdDYWNoZU5vZGVDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NlZ21lbnRNYXBDaGlsZCA9IG5ldyBNYXAob2xkU2VnbWVudE1hcENoaWxkKTtcbiAgICAgICAgICAgICAgICBuZXdTZWdtZW50TWFwQ2hpbGQuc2V0KG5ld1NlZ21lbnRLZXlDaGlsZCwgbmV3Q2FjaGVOb2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgIHByZWZldGNoUGFyYWxsZWxSb3V0ZXMuc2V0KHBhcmFsbGVsUm91dGVLZXksIG5ld1NlZ21lbnRNYXBDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGUgY2hpbGQgdHJlZSdzIHJvdXRlIHN0YXRlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgcHJlZmV0Y2hlZFxuICAgICAgICAgICAgLy8gcm91dGUgc2VudCBieSB0aGUgc2VydmVyLiBXZSBuZWVkIHRvIGNsb25lIGl0IGFzIHdlIHRyYXZlcnNlIGJhY2sgdXBcbiAgICAgICAgICAgIC8vIHRoZSB0cmVlLlxuICAgICAgICAgICAgcGF0Y2hlZFJvdXRlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV0gPSB0YXNrQ2hpbGQucm91dGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGUgY2hpbGQgZGlkbid0IGNoYW5nZS4gV2UgY2FuIHVzZSB0aGUgcHJlZmV0Y2hlZCByb3V0ZXIgc3RhdGUuXG4gICAgICAgICAgICBwYXRjaGVkUm91dGVyU3RhdGVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XSA9IG5ld1JvdXRlclN0YXRlQ2hpbGQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRhc2tDaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBObyBuZXcgdGFza3Mgd2VyZSBzcGF3bmVkLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbmV3Q2FjaGVOb2RlID0ge1xuICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgcnNjOiBvbGRDYWNoZU5vZGUucnNjLFxuICAgICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGFyZW4ndCB1cGRhdGluZyB0aGUgcHJlZmV0Y2hSc2MgZmllbGQsIHNpbmNlIHRoaXMgbm9kZVxuICAgICAgICAvLyBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlIGN1cnJlbnQgdHJlZSwgYmVjYXVzZSBpdCB3b3VsZCBiZSB3ZWlyZCBmb3JcbiAgICAgICAgLy8gcHJlZmV0Y2ggZGF0YSB0byBiZSBuZXdlciB0aGFuIHRoZSBmaW5hbCBkYXRhLiBJdCBwcm9iYWJseSB3b24ndCBldmVyIGJlXG4gICAgICAgIC8vIG9ic2VydmFibGUgYW55d2F5LCBidXQgaXQgY291bGQgaGFwcGVuIGlmIHRoZSBzZWdtZW50IGlzIHVubW91bnRlZCB0aGVuXG4gICAgICAgIC8vIG1vdW50ZWQgYWdhaW4sIGJlY2F1c2UgTGF5b3V0Um91dGVyIHdpbGwgbW9tZW50YXJpbHkgc3dpdGNoIHRvIHJlbmRlcmluZ1xuICAgICAgICAvLyBwcmVmZXRjaFJzYywgdmlhIHVzZURlZmVycmVkVmFsdWUuXG4gICAgICAgIHByZWZldGNoUnNjOiBvbGRDYWNoZU5vZGUucHJlZmV0Y2hSc2MsXG4gICAgICAgIGhlYWQ6IG9sZENhY2hlTm9kZS5oZWFkLFxuICAgICAgICBwcmVmZXRjaEhlYWQ6IG9sZENhY2hlTm9kZS5wcmVmZXRjaEhlYWQsXG4gICAgICAgIC8vIEV2ZXJ5dGhpbmcgaXMgY2xvbmVkIGV4Y2VwdCBmb3IgdGhlIGNoaWxkcmVuLCB3aGljaCB3ZSBjb21wdXRlZCBhYm92ZS5cbiAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IHByZWZldGNoUGFyYWxsZWxSb3V0ZXNcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIC8vIFJldHVybiBhIGNsb25lZCBjb3B5IG9mIHRoZSByb3V0ZXIgc3RhdGUgd2l0aCB1cGRhdGVkIGNoaWxkcmVuLlxuICAgICAgICByb3V0ZTogcGF0Y2hSb3V0ZXJTdGF0ZVdpdGhOZXdDaGlsZHJlbihuZXdSb3V0ZXJTdGF0ZSwgcGF0Y2hlZFJvdXRlclN0YXRlQ2hpbGRyZW4pLFxuICAgICAgICBub2RlOiBuZXdDYWNoZU5vZGUsXG4gICAgICAgIGNoaWxkcmVuOiB0YXNrQ2hpbGRyZW5cbiAgICB9O1xufVxuZnVuY3Rpb24gcGF0Y2hSb3V0ZXJTdGF0ZVdpdGhOZXdDaGlsZHJlbihiYXNlUm91dGVyU3RhdGUsIG5ld0NoaWxkcmVuKSB7XG4gICAgY29uc3QgY2xvbmUgPSBbXG4gICAgICAgIGJhc2VSb3V0ZXJTdGF0ZVswXSxcbiAgICAgICAgbmV3Q2hpbGRyZW5cbiAgICBdO1xuICAgIC8vIEJhc2VkIG9uIGVxdWl2YWxlbnQgbG9naWMgaW4gYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWUsIGJ1dCBzaG91bGRcbiAgICAvLyBjb25maXJtIHdoZXRoZXIgd2UgbmVlZCB0byBjb3B5IGFsbCBvZiB0aGVzZSBmaWVsZHMuIE5vdCBzdXJlIHRoZSBzZXJ2ZXJcbiAgICAvLyBldmVyIHNlbmRzLCBlLmcuIHRoZSByZWZldGNoIG1hcmtlci5cbiAgICBpZiAoMiBpbiBiYXNlUm91dGVyU3RhdGUpIHtcbiAgICAgICAgY2xvbmVbMl0gPSBiYXNlUm91dGVyU3RhdGVbMl07XG4gICAgfVxuICAgIGlmICgzIGluIGJhc2VSb3V0ZXJTdGF0ZSkge1xuICAgICAgICBjbG9uZVszXSA9IGJhc2VSb3V0ZXJTdGF0ZVszXTtcbiAgICB9XG4gICAgaWYgKDQgaW4gYmFzZVJvdXRlclN0YXRlKSB7XG4gICAgICAgIGNsb25lWzRdID0gYmFzZVJvdXRlclN0YXRlWzRdO1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmU7XG59XG5mdW5jdGlvbiBzcGF3blBlbmRpbmdUYXNrKHJvdXRlclN0YXRlLCBwcmVmZXRjaERhdGEsIHByZWZldGNoSGVhZCwgaXNQcmVmZXRjaFN0YWxlKSB7XG4gICAgLy8gQ3JlYXRlIGEgdGFzayB0aGF0IHdpbGwgbGF0ZXIgYmUgZnVsZmlsbGVkIGJ5IGRhdGEgZnJvbSB0aGUgc2VydmVyLlxuICAgIGNvbnN0IHBlbmRpbmdDYWNoZU5vZGUgPSBjcmVhdGVQZW5kaW5nQ2FjaGVOb2RlKHJvdXRlclN0YXRlLCBwcmVmZXRjaERhdGEsIHByZWZldGNoSGVhZCwgaXNQcmVmZXRjaFN0YWxlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICByb3V0ZTogcm91dGVyU3RhdGUsXG4gICAgICAgIG5vZGU6IHBlbmRpbmdDYWNoZU5vZGUsXG4gICAgICAgIGNoaWxkcmVuOiBudWxsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHNwYXduUmV1c2VkVGFzayhyZXVzZWRSb3V0ZXJTdGF0ZSkge1xuICAgIC8vIENyZWF0ZSBhIHRhc2sgdGhhdCByZXVzZXMgYW4gZXhpc3Rpbmcgc2VnbWVudCwgZS5nLiB3aGVuIHJldXNpbmdcbiAgICAvLyB0aGUgY3VycmVudCBhY3RpdmUgc2VnbWVudCBpbiBwbGFjZSBvZiBhIGRlZmF1bHQgcm91dGUuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcm91dGU6IHJldXNlZFJvdXRlclN0YXRlLFxuICAgICAgICBub2RlOiBudWxsLFxuICAgICAgICBjaGlsZHJlbjogbnVsbFxuICAgIH07XG59XG5mdW5jdGlvbiBzcGF3blRhc2tGb3JNaXNzaW5nRGF0YShyb3V0ZXJTdGF0ZSkge1xuICAgIC8vIENyZWF0ZSBhIHRhc2sgZm9yIGEgbmV3IHN1YnRyZWUgdGhhdCB3YXNuJ3QgcHJlZmV0Y2hlZCBieSB0aGUgc2VydmVyLlxuICAgIC8vIFRoaXMgc2hvdWxkbid0IHJlYWxseSBldmVyIGhhcHBlbiBidXQgaXQncyBoZXJlIGp1c3QgaW4gY2FzZSB0aGUgU2VlZCBEYXRhXG4gICAgLy8gVHJlZSBhbmQgdGhlIFJvdXRlciBTdGF0ZSBUcmVlIGRpc2FncmVlIHVuZXhwZWN0ZWRseS5cbiAgICBjb25zdCBwZW5kaW5nQ2FjaGVOb2RlID0gY3JlYXRlUGVuZGluZ0NhY2hlTm9kZShyb3V0ZXJTdGF0ZSwgbnVsbCwgbnVsbCwgZmFsc2UpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJvdXRlOiByb3V0ZXJTdGF0ZSxcbiAgICAgICAgbm9kZTogcGVuZGluZ0NhY2hlTm9kZSxcbiAgICAgICAgY2hpbGRyZW46IG51bGxcbiAgICB9O1xufVxuZnVuY3Rpb24gbGlzdGVuRm9yRHluYW1pY1JlcXVlc3QodGFzaywgcmVzcG9uc2VQcm9taXNlKSB7XG4gICAgcmVzcG9uc2VQcm9taXNlLnRoZW4oKHJlc3BvbnNlKT0+e1xuICAgICAgICBjb25zdCBmbGlnaHREYXRhID0gcmVzcG9uc2VbMF07XG4gICAgICAgIGZvciAoY29uc3QgZmxpZ2h0RGF0YVBhdGggb2YgZmxpZ2h0RGF0YSl7XG4gICAgICAgICAgICBjb25zdCBzZWdtZW50UGF0aCA9IGZsaWdodERhdGFQYXRoLnNsaWNlKDAsIC0zKTtcbiAgICAgICAgICAgIGNvbnN0IHNlcnZlclJvdXRlclN0YXRlID0gZmxpZ2h0RGF0YVBhdGhbZmxpZ2h0RGF0YVBhdGgubGVuZ3RoIC0gM107XG4gICAgICAgICAgICBjb25zdCBkeW5hbWljRGF0YSA9IGZsaWdodERhdGFQYXRoW2ZsaWdodERhdGFQYXRoLmxlbmd0aCAtIDJdO1xuICAgICAgICAgICAgY29uc3QgZHluYW1pY0hlYWQgPSBmbGlnaHREYXRhUGF0aFtmbGlnaHREYXRhUGF0aC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2VnbWVudFBhdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyaXRlRHluYW1pY0RhdGFJbnRvUGVuZGluZ1Rhc2sodGFzaywgc2VnbWVudFBhdGgsIHNlcnZlclJvdXRlclN0YXRlLCBkeW5hbWljRGF0YSwgZHluYW1pY0hlYWQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIGV4aGF1c3RlZCBhbGwgdGhlIGRhdGEgd2UgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLCBpZlxuICAgICAgICAvLyB0aGVyZSBhcmUgYW55IHJlbWFpbmluZyBwZW5kaW5nIHRhc2tzIGluIHRoZSB0cmVlLCBhYm9ydCB0aGVtIG5vdy5cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhbnkgbWlzc2luZyBkYXRhLCBpdCB3aWxsIHRyaWdnZXIgYSBsYXp5IGZldGNoLlxuICAgICAgICBhYm9ydFRhc2sodGFzaywgbnVsbCk7XG4gICAgfSwgKGVycm9yKT0+e1xuICAgICAgICAvLyBUaGlzIHdpbGwgdHJpZ2dlciBhbiBlcnJvciBkdXJpbmcgcmVuZGVyXG4gICAgICAgIGFib3J0VGFzayh0YXNrLCBlcnJvcik7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB3cml0ZUR5bmFtaWNEYXRhSW50b1BlbmRpbmdUYXNrKHJvb3RUYXNrLCBzZWdtZW50UGF0aCwgc2VydmVyUm91dGVyU3RhdGUsIGR5bmFtaWNEYXRhLCBkeW5hbWljSGVhZCkge1xuICAgIC8vIFRoZSBkYXRhIHNlbnQgYnkgdGhlIHNlcnZlciByZXByZXNlbnRzIG9ubHkgYSBzdWJ0cmVlIG9mIHRoZSBhcHAuIFdlIG5lZWRcbiAgICAvLyB0byBmaW5kIHRoZSBwYXJ0IG9mIHRoZSB0YXNrIHRyZWUgdGhhdCBtYXRjaGVzIHRoZSBzZXJ2ZXIgcmVzcG9uc2UsIGFuZFxuICAgIC8vIGZ1bGZpbGwgaXQgdXNpbmcgdGhlIGR5bmFtaWMgZGF0YS5cbiAgICAvL1xuICAgIC8vIHNlZ21lbnRQYXRoIHJlcHJlc2VudHMgdGhlIHBhcmVudCBwYXRoIG9mIHN1YnRyZWUuIEl0J3MgYSByZXBlYXRpbmcgcGF0dGVyblxuICAgIC8vIG9mIHBhcmFsbGVsIHJvdXRlIGtleSBhbmQgc2VnbWVudDpcbiAgICAvL1xuICAgIC8vICAgW3N0cmluZywgU2VnbWVudCwgc3RyaW5nLCBTZWdtZW50LCBzdHJpbmcsIFNlZ21lbnQsIC4uLl1cbiAgICAvL1xuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgcGF0aCBhbmQgZmluaXNoIGFueSB0YXNrcyB0aGF0IG1hdGNoIHRoaXMgcGF5bG9hZC5cbiAgICBsZXQgdGFzayA9IHJvb3RUYXNrO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBzZWdtZW50UGF0aC5sZW5ndGg7IGkgKz0gMil7XG4gICAgICAgIGNvbnN0IHBhcmFsbGVsUm91dGVLZXkgPSBzZWdtZW50UGF0aFtpXTtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRQYXRoW2kgKyAxXTtcbiAgICAgICAgY29uc3QgdGFza0NoaWxkcmVuID0gdGFzay5jaGlsZHJlbjtcbiAgICAgICAgaWYgKHRhc2tDaGlsZHJlbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgdGFza0NoaWxkID0gdGFza0NoaWxkcmVuLmdldChwYXJhbGxlbFJvdXRlS2V5KTtcbiAgICAgICAgICAgIGlmICh0YXNrQ2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tTZWdtZW50ID0gdGFza0NoaWxkLnJvdXRlWzBdO1xuICAgICAgICAgICAgICAgIGlmICgoMCwgX21hdGNoc2VnbWVudHMubWF0Y2hTZWdtZW50KShzZWdtZW50LCB0YXNrU2VnbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm91bmQgYSBtYXRjaCBmb3IgdGhpcyB0YXNrLiBLZWVwIHRyYXZlcnNpbmcgZG93biB0aGUgdGFzayB0cmVlLlxuICAgICAgICAgICAgICAgICAgICB0YXNrID0gdGFza0NoaWxkO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgZGlkbid0IGZpbmQgYSBjaGlsZCB0YXNrIHRoYXQgbWF0Y2hlcyB0aGUgc2VydmVyIGRhdGEuIEV4aXQuIFdlIHdvbid0XG4gICAgICAgIC8vIGFib3J0IHRoZSB0YXNrLCB0aG91Z2gsIGJlY2F1c2UgYSBkaWZmZXJlbnQgRmxpZ2h0RGF0YVBhdGggbWF5IGJlIGFibGUgdG9cbiAgICAgICAgLy8gZnVsZmlsbCBpdCAoc2VlIGxvb3AgaW4gbGlzdGVuRm9yRHluYW1pY1JlcXVlc3QpLiBXZSBvbmx5IGFib3J0IHRhc2tzXG4gICAgICAgIC8vIG9uY2Ugd2UndmUgcnVuIG91dCBvZiBkYXRhLlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZpbmlzaFRhc2tVc2luZ0R5bmFtaWNEYXRhUGF5bG9hZCh0YXNrLCBzZXJ2ZXJSb3V0ZXJTdGF0ZSwgZHluYW1pY0RhdGEsIGR5bmFtaWNIZWFkKTtcbn1cbmZ1bmN0aW9uIGZpbmlzaFRhc2tVc2luZ0R5bmFtaWNEYXRhUGF5bG9hZCh0YXNrLCBzZXJ2ZXJSb3V0ZXJTdGF0ZSwgZHluYW1pY0RhdGEsIGR5bmFtaWNIZWFkKSB7XG4gICAgLy8gZHluYW1pY0RhdGEgbWF5IHJlcHJlc2VudCBhIGxhcmdlciBzdWJ0cmVlIHRoYW4gdGhlIHRhc2suIEJlZm9yZSB3ZSBjYW5cbiAgICAvLyBmaW5pc2ggdGhlIHRhc2ssIHdlIG5lZWQgdG8gbGluZSB0aGVtIHVwLlxuICAgIGNvbnN0IHRhc2tDaGlsZHJlbiA9IHRhc2suY2hpbGRyZW47XG4gICAgY29uc3QgdGFza05vZGUgPSB0YXNrLm5vZGU7XG4gICAgaWYgKHRhc2tDaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBsZWFmIG5vZGUgb2YgdGhlIHBlbmRpbmcgdGFzay4gVGhlIHNlcnZlciBkYXRhIHRyZWVcbiAgICAgICAgLy8gbGluZXMgdXAgdGhlIHBlbmRpbmcgQ2FjaGUgTm9kZSB0cmVlLiBXZSBjYW4gbm93IHN3aXRjaCB0byB0aGVcbiAgICAgICAgLy8gbm9ybWFsIGFsZ29yaXRobS5cbiAgICAgICAgaWYgKHRhc2tOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmaW5pc2hQZW5kaW5nQ2FjaGVOb2RlKHRhc2tOb2RlLCB0YXNrLnJvdXRlLCBzZXJ2ZXJSb3V0ZXJTdGF0ZSwgZHluYW1pY0RhdGEsIGR5bmFtaWNIZWFkKTtcbiAgICAgICAgICAgIC8vIE51bGwgdGhpcyBvdXQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdGFzayBpcyBjb21wbGV0ZS5cbiAgICAgICAgICAgIHRhc2subm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgc2VydmVyIHJldHVybmVkIG1vcmUgZGF0YSB0aGFuIHdlIG5lZWQgdG8gZmluaXNoIHRoZSB0YXNrLiBTa2lwIG92ZXJcbiAgICAvLyB0aGUgZXh0cmEgc2VnbWVudHMgdW50aWwgd2UgcmVhY2ggdGhlIGxlYWYgdGFzayBub2RlLlxuICAgIGNvbnN0IHNlcnZlckNoaWxkcmVuID0gc2VydmVyUm91dGVyU3RhdGVbMV07XG4gICAgY29uc3QgZHluYW1pY0RhdGFDaGlsZHJlbiA9IGR5bmFtaWNEYXRhWzFdO1xuICAgIGZvcihjb25zdCBwYXJhbGxlbFJvdXRlS2V5IGluIHNlcnZlclJvdXRlclN0YXRlKXtcbiAgICAgICAgY29uc3Qgc2VydmVyUm91dGVyU3RhdGVDaGlsZCA9IHNlcnZlckNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldO1xuICAgICAgICBjb25zdCBkeW5hbWljRGF0YUNoaWxkID0gZHluYW1pY0RhdGFDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XTtcbiAgICAgICAgY29uc3QgdGFza0NoaWxkID0gdGFza0NoaWxkcmVuLmdldChwYXJhbGxlbFJvdXRlS2V5KTtcbiAgICAgICAgaWYgKHRhc2tDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB0YXNrU2VnbWVudCA9IHRhc2tDaGlsZC5yb3V0ZVswXTtcbiAgICAgICAgICAgIGlmICgoMCwgX21hdGNoc2VnbWVudHMubWF0Y2hTZWdtZW50KShzZXJ2ZXJSb3V0ZXJTdGF0ZUNoaWxkWzBdLCB0YXNrU2VnbWVudCkgJiYgZHluYW1pY0RhdGFDaGlsZCAhPT0gbnVsbCAmJiBkeW5hbWljRGF0YUNoaWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIG1hdGNoIGZvciB0aGlzIHRhc2suIEtlZXAgdHJhdmVyc2luZyBkb3duIHRoZSB0YXNrIHRyZWUuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbmlzaFRhc2tVc2luZ0R5bmFtaWNEYXRhUGF5bG9hZCh0YXNrQ2hpbGQsIHNlcnZlclJvdXRlclN0YXRlQ2hpbGQsIGR5bmFtaWNEYXRhQ2hpbGQsIGR5bmFtaWNIZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIC8vIFdlIGRpZG4ndCBmaW5kIGEgY2hpbGQgdGFzayB0aGF0IG1hdGNoZXMgdGhlIHNlcnZlciBkYXRhLiBXZSB3b24ndCBhYm9ydFxuICAgIC8vIHRoZSB0YXNrLCB0aG91Z2gsIGJlY2F1c2UgYSBkaWZmZXJlbnQgRmxpZ2h0RGF0YVBhdGggbWF5IGJlIGFibGUgdG9cbiAgICAvLyBmdWxmaWxsIGl0IChzZWUgbG9vcCBpbiBsaXN0ZW5Gb3JEeW5hbWljUmVxdWVzdCkuIFdlIG9ubHkgYWJvcnQgdGFza3NcbiAgICAvLyBvbmNlIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YS5cbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVQZW5kaW5nQ2FjaGVOb2RlKHJvdXRlclN0YXRlLCBwcmVmZXRjaERhdGEsIHByZWZldGNoSGVhZCwgaXNQcmVmZXRjaFN0YWxlKSB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVDaGlsZHJlbiA9IHJvdXRlclN0YXRlWzFdO1xuICAgIGNvbnN0IHByZWZldGNoRGF0YUNoaWxkcmVuID0gcHJlZmV0Y2hEYXRhICE9PSBudWxsID8gcHJlZmV0Y2hEYXRhWzFdIDogbnVsbDtcbiAgICBjb25zdCBwYXJhbGxlbFJvdXRlcyA9IG5ldyBNYXAoKTtcbiAgICBmb3IobGV0IHBhcmFsbGVsUm91dGVLZXkgaW4gcm91dGVyU3RhdGVDaGlsZHJlbil7XG4gICAgICAgIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGQgPSByb3V0ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldO1xuICAgICAgICBjb25zdCBwcmVmZXRjaERhdGFDaGlsZCA9IHByZWZldGNoRGF0YUNoaWxkcmVuICE9PSBudWxsID8gcHJlZmV0Y2hEYXRhQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV0gOiBudWxsO1xuICAgICAgICBjb25zdCBzZWdtZW50Q2hpbGQgPSByb3V0ZXJTdGF0ZUNoaWxkWzBdO1xuICAgICAgICBjb25zdCBzZWdtZW50S2V5Q2hpbGQgPSAoMCwgX2NyZWF0ZXJvdXRlcmNhY2hla2V5LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShzZWdtZW50Q2hpbGQpO1xuICAgICAgICBjb25zdCBuZXdDYWNoZU5vZGVDaGlsZCA9IGNyZWF0ZVBlbmRpbmdDYWNoZU5vZGUocm91dGVyU3RhdGVDaGlsZCwgcHJlZmV0Y2hEYXRhQ2hpbGQgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBwcmVmZXRjaERhdGFDaGlsZCwgcHJlZmV0Y2hIZWFkLCBpc1ByZWZldGNoU3RhbGUpO1xuICAgICAgICBjb25zdCBuZXdTZWdtZW50TWFwQ2hpbGQgPSBuZXcgTWFwKCk7XG4gICAgICAgIG5ld1NlZ21lbnRNYXBDaGlsZC5zZXQoc2VnbWVudEtleUNoaWxkLCBuZXdDYWNoZU5vZGVDaGlsZCk7XG4gICAgICAgIHBhcmFsbGVsUm91dGVzLnNldChwYXJhbGxlbFJvdXRlS2V5LCBuZXdTZWdtZW50TWFwQ2hpbGQpO1xuICAgIH1cbiAgICAvLyBUaGUgaGVhZCBpcyBhc3NpZ25lZCB0byBldmVyeSBsZWFmIHNlZ21lbnQgZGVsaXZlcmVkIGJ5IHRoZSBzZXJ2ZXIuIEJhc2VkXG4gICAgLy8gb24gY29ycmVzcG9uZGluZyBsb2dpYyBpbiBmaWxsLWxhenktaXRlbXMtdGlsbC1sZWFmLXdpdGgtaGVhZC50c1xuICAgIGNvbnN0IGlzTGVhZlNlZ21lbnQgPSBwYXJhbGxlbFJvdXRlcy5zaXplID09PSAwO1xuICAgIGNvbnN0IG1heWJlUHJlZmV0Y2hSc2MgPSBwcmVmZXRjaERhdGEgIT09IG51bGwgPyBwcmVmZXRjaERhdGFbMl0gOiBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICBwYXJhbGxlbFJvdXRlczogcGFyYWxsZWxSb3V0ZXMsXG4gICAgICAgIHByZWZldGNoUnNjOiAvLyBJZiB0aGUgcHJlZmV0Y2hlZCBjYWNoZSBlbnRyeSBpcyBzdGFsZSwgd2UgZG9uJ3Qgc2hvdyBpdC4gV2Ugd2FpdCBmb3IgdGhlXG4gICAgICAgIC8vIGR5bmFtaWMgZGF0YSB0byBzdHJlYW0gaW4uXG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2hlY2sgaXMgYXJ1YWJseSB0b28gZGVlcCBpbiB0aGUgc3RhY2suIE1pZ2h0IGJlIGJldHRlciB0b1xuICAgICAgICAvLyBwYXNzIGFuIGVtcHR5IHByZWZldGNoRGF0YSBDYWNoZSBTZWVkIG9iamVjdCBpbnN0ZWFkLlxuICAgICAgICAhaXNQcmVmZXRjaFN0YWxlICYmIG1heWJlUHJlZmV0Y2hSc2MgIT09IHVuZGVmaW5lZCA/IG1heWJlUHJlZmV0Y2hSc2MgOiBudWxsLFxuICAgICAgICBwcmVmZXRjaEhlYWQ6ICFpc1ByZWZldGNoU3RhbGUgJiYgaXNMZWFmU2VnbWVudCA/IHByZWZldGNoSGVhZCA6IG51bGwsXG4gICAgICAgIC8vIENyZWF0ZSBhIGRlZmVycmVkIHByb21pc2UuIFRoaXMgd2lsbCBiZSBmdWxmaWxsZWQgb25jZSB0aGUgZHluYW1pY1xuICAgICAgICAvLyByZXNwb25zZSBpcyByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICAgIHJzYzogY3JlYXRlRGVmZXJyZWRSc2MoKSxcbiAgICAgICAgaGVhZDogaXNMZWFmU2VnbWVudCA/IGNyZWF0ZURlZmVycmVkUnNjKCkgOiBudWxsXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGZpbmlzaFBlbmRpbmdDYWNoZU5vZGUoY2FjaGVOb2RlLCB0YXNrU3RhdGUsIHNlcnZlclN0YXRlLCBkeW5hbWljRGF0YSwgZHluYW1pY0hlYWQpIHtcbiAgICAvLyBXcml0ZXMgYSBkeW5hbWljIHJlc3BvbnNlIGludG8gYW4gZXhpc3RpbmcgQ2FjaGUgTm9kZSB0cmVlLiBUaGlzIGRvZXMgX25vdF9cbiAgICAvLyBjcmVhdGUgYSBuZXcgdHJlZSwgaXQgdXBkYXRlcyB0aGUgZXhpc3RpbmcgdHJlZSBpbi1wbGFjZS4gU28gaXQgbXVzdCBmb2xsb3dcbiAgICAvLyB0aGUgU3VzcGVuc2UgcnVsZXMgb2YgY2FjaGUgc2FmZXR5IOKAlCBpdCBjYW4gcmVzb2x2ZSBwZW5kaW5nIHByb21pc2VzLCBidXRcbiAgICAvLyBpdCBjYW5ub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGRhdGEuIEl0IGNhbiBhZGQgc2VnbWVudHMgdG8gdGhlIHRyZWUgKGJlY2F1c2VcbiAgICAvLyBhIG1pc3Npbmcgc2VnbWVudCB3aWxsIGNhdXNlIHRoZSBsYXlvdXQgcm91dGVyIHRvIHN1c3BlbmQpLlxuICAgIC8vIGJ1dCBpdCBjYW5ub3QgZGVsZXRlIHRoZW0uXG4gICAgLy9cbiAgICAvLyBXZSBtdXN0IHJlc29sdmUgZXZlcnkgcHJvbWlzZSBpbiB0aGUgdHJlZSwgb3IgZWxzZSBpdCB3aWxsIHN1c3BlbmRcbiAgICAvLyBpbmRlZmluaXRlbHkuIElmIHdlIGRpZCBub3QgcmVjZWl2ZSBkYXRhIGZvciBhIHNlZ21lbnQsIHdlIHdpbGwgcmVzb2x2ZSBpdHNcbiAgICAvLyBkYXRhIHByb21pc2UgdG8gYG51bGxgIHRvIHRyaWdnZXIgYSBsYXp5IGZldGNoIGR1cmluZyByZW5kZXIuXG4gICAgY29uc3QgdGFza1N0YXRlQ2hpbGRyZW4gPSB0YXNrU3RhdGVbMV07XG4gICAgY29uc3Qgc2VydmVyU3RhdGVDaGlsZHJlbiA9IHNlcnZlclN0YXRlWzFdO1xuICAgIGNvbnN0IGRhdGFDaGlsZHJlbiA9IGR5bmFtaWNEYXRhWzFdO1xuICAgIC8vIFRoZSByb3V0ZXIgc3RhdGUgdGhhdCB3ZSB0cmF2ZXJzZSB0aGUgdHJlZSB3aXRoICh0YXNrU3RhdGUpIGlzIHRoZSBzYW1lIG9uZVxuICAgIC8vIHRoYXQgd2UgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHBlbmRpbmcgQ2FjaGUgTm9kZSB0cmVlLiBUaGF0IHdheSB3ZSdyZSBzdXJlXG4gICAgLy8gdG8gcmVzb2x2ZSBhbGwgdGhlIHBlbmRpbmcgcHJvbWlzZXMuXG4gICAgY29uc3QgcGFyYWxsZWxSb3V0ZXMgPSBjYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXM7XG4gICAgZm9yKGxldCBwYXJhbGxlbFJvdXRlS2V5IGluIHRhc2tTdGF0ZUNoaWxkcmVuKXtcbiAgICAgICAgY29uc3QgdGFza1N0YXRlQ2hpbGQgPSB0YXNrU3RhdGVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XTtcbiAgICAgICAgY29uc3Qgc2VydmVyU3RhdGVDaGlsZCA9IHNlcnZlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV07XG4gICAgICAgIGNvbnN0IGRhdGFDaGlsZCA9IGRhdGFDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XTtcbiAgICAgICAgY29uc3Qgc2VnbWVudE1hcENoaWxkID0gcGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpO1xuICAgICAgICBjb25zdCB0YXNrU2VnbWVudENoaWxkID0gdGFza1N0YXRlQ2hpbGRbMF07XG4gICAgICAgIGNvbnN0IHRhc2tTZWdtZW50S2V5Q2hpbGQgPSAoMCwgX2NyZWF0ZXJvdXRlcmNhY2hla2V5LmNyZWF0ZVJvdXRlckNhY2hlS2V5KSh0YXNrU2VnbWVudENoaWxkKTtcbiAgICAgICAgY29uc3QgY2FjaGVOb2RlQ2hpbGQgPSBzZWdtZW50TWFwQ2hpbGQgIT09IHVuZGVmaW5lZCA/IHNlZ21lbnRNYXBDaGlsZC5nZXQodGFza1NlZ21lbnRLZXlDaGlsZCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChjYWNoZU5vZGVDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoc2VydmVyU3RhdGVDaGlsZCAhPT0gdW5kZWZpbmVkICYmICgwLCBfbWF0Y2hzZWdtZW50cy5tYXRjaFNlZ21lbnQpKHRhc2tTZWdtZW50Q2hpbGQsIHNlcnZlclN0YXRlQ2hpbGRbMF0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFDaGlsZCAhPT0gdW5kZWZpbmVkICYmIGRhdGFDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBoYXBweSBwYXRoLiBSZWN1cnNpdmVseSB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbi5cbiAgICAgICAgICAgICAgICAgICAgZmluaXNoUGVuZGluZ0NhY2hlTm9kZShjYWNoZU5vZGVDaGlsZCwgdGFza1N0YXRlQ2hpbGQsIHNlcnZlclN0YXRlQ2hpbGQsIGRhdGFDaGlsZCwgZHluYW1pY0hlYWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzZXJ2ZXIgbmV2ZXIgcmV0dXJuZWQgZGF0YSBmb3IgdGhpcyBzZWdtZW50LiBUcmlnZ2VyIGEgbGF6eVxuICAgICAgICAgICAgICAgICAgICAvLyBmZXRjaCBkdXJpbmcgcmVuZGVyLiBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYmVjYXVzZSB0aGUgUm91dGUgVHJlZVxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIFNlZWQgRGF0YSB0cmVlIHNlbnQgYnkgdGhlIHNlcnZlciBzaG91bGQgYWx3YXlzIGJlIHRoZSBzYW1lXG4gICAgICAgICAgICAgICAgICAgIC8vIHNoYXBlIHdoZW4gcGFydCBvZiB0aGUgc2FtZSBzZXJ2ZXIgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0UGVuZGluZ0NhY2hlTm9kZSh0YXNrU3RhdGVDaGlsZCwgY2FjaGVOb2RlQ2hpbGQsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHNlcnZlciBuZXZlciByZXR1cm5lZCBkYXRhIGZvciB0aGlzIHNlZ21lbnQuIFRyaWdnZXIgYSBsYXp5XG4gICAgICAgICAgICAgICAgLy8gZmV0Y2ggZHVyaW5nIHJlbmRlci5cbiAgICAgICAgICAgICAgICBhYm9ydFBlbmRpbmdDYWNoZU5vZGUodGFza1N0YXRlQ2hpbGQsIGNhY2hlTm9kZUNoaWxkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlIHNlcnZlciByZXNwb25zZSBtYXRjaGVzIHdoYXQgd2FzIGV4cGVjdGVkIHRvIHJlY2VpdmUsIGJ1dCB0aGVyZSdzXG4gICAgICAgIC8vIG5vIG1hdGNoaW5nIENhY2hlIE5vZGUgaW4gdGhlIHRhc2sgdHJlZS4gVGhpcyBpcyBhIGJ1ZyBpbiB0aGVcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gYmVjYXVzZSB3ZSBzaG91bGQgaGF2ZSBjcmVhdGVkIGEgbm9kZSBmb3IgZXZlcnlcbiAgICAgICAgLy8gc2VnbWVudCBpbiB0aGUgdHJlZSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFzay5cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBVc2UgdGhlIGR5bmFtaWMgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdG8gZnVsZmlsbCB0aGUgZGVmZXJyZWQgUlNDIHByb21pc2VcbiAgICAvLyBvbiB0aGUgQ2FjaGUgTm9kZS5cbiAgICBjb25zdCByc2MgPSBjYWNoZU5vZGUucnNjO1xuICAgIGNvbnN0IGR5bmFtaWNTZWdtZW50RGF0YSA9IGR5bmFtaWNEYXRhWzJdO1xuICAgIGlmIChyc2MgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIGxhenkgY2FjaGUgbm9kZS4gV2UgY2FuIG92ZXJ3cml0ZSBpdC4gVGhpcyBpcyBvbmx5IHNhZmVcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlIExheW91dFJvdXRlciBzdXNwZW5kcyBpZiBgcnNjYCBpcyBgbnVsbGAuXG4gICAgICAgIGNhY2hlTm9kZS5yc2MgPSBkeW5hbWljU2VnbWVudERhdGE7XG4gICAgfSBlbHNlIGlmIChpc0RlZmVycmVkUnNjKHJzYykpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIGRlZmVycmVkIFJTQyBwcm9taXNlLiBXZSBjYW4gZnVsZmlsbCBpdCB3aXRoIHRoZSBkYXRhIHdlIGp1c3RcbiAgICAgICAgLy8gcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLiBJZiBpdCB3YXMgYWxyZWFkeSByZXNvbHZlZCBieSBhIGRpZmZlcmVudFxuICAgICAgICAvLyBuYXZpZ2F0aW9uLCB0aGVuIHRoaXMgZG9lcyBub3RoaW5nIGJlY2F1c2Ugd2UgY2FuJ3Qgb3ZlcndyaXRlIGRhdGEuXG4gICAgICAgIHJzYy5yZXNvbHZlKGR5bmFtaWNTZWdtZW50RGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIG5vdCBhIGRlZmVycmVkIFJTQyBwcm9taXNlLCBub3IgaXMgaXQgZW1wdHksIHNvIGl0IG11c3QgaGF2ZVxuICAgIC8vIGJlZW4gcG9wdWxhdGVkIGJ5IGEgZGlmZmVyZW50IG5hdmlnYXRpb24uIFdlIG11c3Qgbm90IG92ZXJ3cml0ZSBpdC5cbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIGxlYWYgc2VnbWVudC4gSWYgc28sIGl0IHdpbGwgaGF2ZSBhIGBoZWFkYCBwcm9wZXJ0eSB3aXRoXG4gICAgLy8gYSBwZW5kaW5nIHByb21pc2UgdGhhdCBuZWVkcyB0byBiZSByZXNvbHZlZCB3aXRoIHRoZSBkeW5hbWljIGhlYWQgZnJvbVxuICAgIC8vIHRoZSBzZXJ2ZXIuXG4gICAgY29uc3QgaGVhZCA9IGNhY2hlTm9kZS5oZWFkO1xuICAgIGlmIChpc0RlZmVycmVkUnNjKGhlYWQpKSB7XG4gICAgICAgIGhlYWQucmVzb2x2ZShkeW5hbWljSGVhZCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYWJvcnRUYXNrKHRhc2ssIGVycm9yKSB7XG4gICAgY29uc3QgY2FjaGVOb2RlID0gdGFzay5ub2RlO1xuICAgIGlmIChjYWNoZU5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpbmRpY2F0ZXMgdGhlIHRhc2sgaXMgYWxyZWFkeSBjb21wbGV0ZS5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YXNrQ2hpbGRyZW4gPSB0YXNrLmNoaWxkcmVuO1xuICAgIGlmICh0YXNrQ2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICAgICAgLy8gUmVhY2hlZCB0aGUgbGVhZiB0YXNrIG5vZGUuIFRoaXMgaXMgdGhlIHJvb3Qgb2YgYSBwZW5kaW5nIGNhY2hlXG4gICAgICAgIC8vIG5vZGUgdHJlZS5cbiAgICAgICAgYWJvcnRQZW5kaW5nQ2FjaGVOb2RlKHRhc2sucm91dGUsIGNhY2hlTm9kZSwgZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYW4gaW50ZXJtZWRpYXRlIHRhc2sgbm9kZS4gS2VlcCB0cmF2ZXJzaW5nIHVudGlsIHdlIHJlYWNoIGFcbiAgICAgICAgLy8gdGFzayBub2RlIHdpdGggbm8gY2hpbGRyZW4uIFRoYXQgd2lsbCBiZSB0aGUgcm9vdCBvZiB0aGUgY2FjaGUgbm9kZSB0cmVlXG4gICAgICAgIC8vIHRoYXQgbmVlZHMgdG8gYmUgcmVzb2x2ZWQuXG4gICAgICAgIGZvciAoY29uc3QgdGFza0NoaWxkIG9mIHRhc2tDaGlsZHJlbi52YWx1ZXMoKSl7XG4gICAgICAgICAgICBhYm9ydFRhc2sodGFza0NoaWxkLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTnVsbCB0aGlzIG91dCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0YXNrIGlzIGNvbXBsZXRlLlxuICAgIHRhc2subm9kZSA9IG51bGw7XG59XG5mdW5jdGlvbiBhYm9ydFBlbmRpbmdDYWNoZU5vZGUocm91dGVyU3RhdGUsIGNhY2hlTm9kZSwgZXJyb3IpIHtcbiAgICAvLyBGb3IgZXZlcnkgcGVuZGluZyBzZWdtZW50IGluIHRoZSB0cmVlLCByZXNvbHZlIGl0cyBgcnNjYCBwcm9taXNlIHRvIGBudWxsYFxuICAgIC8vIHRvIHRyaWdnZXIgYSBsYXp5IGZldGNoIGR1cmluZyByZW5kZXIuXG4gICAgLy9cbiAgICAvLyBPciwgaWYgYW4gZXJyb3Igb2JqZWN0IGlzIHByb3ZpZGVkLCBpdCB3aWxsIGVycm9yIGluc3RlYWQuXG4gICAgY29uc3Qgcm91dGVyU3RhdGVDaGlsZHJlbiA9IHJvdXRlclN0YXRlWzFdO1xuICAgIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gY2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzO1xuICAgIGZvcihsZXQgcGFyYWxsZWxSb3V0ZUtleSBpbiByb3V0ZXJTdGF0ZUNoaWxkcmVuKXtcbiAgICAgICAgY29uc3Qgcm91dGVyU3RhdGVDaGlsZCA9IHJvdXRlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV07XG4gICAgICAgIGNvbnN0IHNlZ21lbnRNYXBDaGlsZCA9IHBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KTtcbiAgICAgICAgaWYgKHNlZ21lbnRNYXBDaGlsZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWdtZW50Q2hpbGQgPSByb3V0ZXJTdGF0ZUNoaWxkWzBdO1xuICAgICAgICBjb25zdCBzZWdtZW50S2V5Q2hpbGQgPSAoMCwgX2NyZWF0ZXJvdXRlcmNhY2hla2V5LmNyZWF0ZVJvdXRlckNhY2hlS2V5KShzZWdtZW50Q2hpbGQpO1xuICAgICAgICBjb25zdCBjYWNoZU5vZGVDaGlsZCA9IHNlZ21lbnRNYXBDaGlsZC5nZXQoc2VnbWVudEtleUNoaWxkKTtcbiAgICAgICAgaWYgKGNhY2hlTm9kZUNoaWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFib3J0UGVuZGluZ0NhY2hlTm9kZShyb3V0ZXJTdGF0ZUNoaWxkLCBjYWNoZU5vZGVDaGlsZCwgZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYmVjYXVzZSB3ZSdyZSB0cmF2ZXJzaW5nIHRoZSBzYW1lIHRyZWUgdGhhdCB3YXNcbiAgICAgICAgLy8gdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGNhY2hlIG5vZGVzIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByc2MgPSBjYWNoZU5vZGUucnNjO1xuICAgIGlmIChpc0RlZmVycmVkUnNjKHJzYykpIHtcbiAgICAgICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGlzIHdpbGwgdHJpZ2dlciBhIGxhenkgZmV0Y2ggZHVyaW5nIHJlbmRlci5cbiAgICAgICAgICAgIHJzYy5yZXNvbHZlKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgYW4gZXJyb3IgZHVyaW5nIHJlbmRlcmluZy5cbiAgICAgICAgICAgIHJzYy5yZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBsZWFmIHNlZ21lbnQuIElmIHNvLCBpdCB3aWxsIGhhdmUgYSBgaGVhZGAgcHJvcGVydHkgd2l0aFxuICAgIC8vIGEgcGVuZGluZyBwcm9taXNlIHRoYXQgbmVlZHMgdG8gYmUgcmVzb2x2ZWQuIElmIGFuIGVycm9yIHdhcyBwcm92aWRlZCwgd2VcbiAgICAvLyB3aWxsIG5vdCByZXNvbHZlIGl0IHdpdGggYW4gZXJyb3IsIHNpbmNlIHRoaXMgaXMgcmVuZGVyZWQgYXQgdGhlIHJvb3Qgb2ZcbiAgICAvLyB0aGUgYXBwLiBXZSB3YW50IHRoZSBzZWdtZW50IHRvIGVycm9yLCBub3QgdGhlIGVudGlyZSBhcHAuXG4gICAgY29uc3QgaGVhZCA9IGNhY2hlTm9kZS5oZWFkO1xuICAgIGlmIChpc0RlZmVycmVkUnNjKGhlYWQpKSB7XG4gICAgICAgIGhlYWQucmVzb2x2ZShudWxsKTtcbiAgICB9XG59XG5mdW5jdGlvbiB1cGRhdGVDYWNoZU5vZGVPblBvcHN0YXRlUmVzdG9yYXRpb24ob2xkQ2FjaGVOb2RlLCByb3V0ZXJTdGF0ZSkge1xuICAgIC8vIEEgcG9wc3RhdGUgbmF2aWdhdGlvbiByZWFkcyBkYXRhIGZyb20gdGhlIGxvY2FsIGNhY2hlLiBJdCBkb2VzIG5vdCBpc3N1ZVxuICAgIC8vIG5ldyBuZXR3b3JrIHJlcXVlc3RzICh1bmxlc3MgdGhlIGNhY2hlIGVudHJpZXMgaGF2ZSBiZWVuIGV2aWN0ZWQpLiBTbywgd2VcbiAgICAvLyB1cGRhdGUgdGhlIGNhY2hlIHRvIGRyb3AgdGhlIHByZWZldGNoICBkYXRhIGZvciBhbnkgc2VnbWVudCB3aG9zZSBkeW5hbWljXG4gICAgLy8gZGF0YSB3YXMgYWxyZWFkeSByZWNlaXZlZC4gVGhpcyBwcmV2ZW50cyBhbiB1bm5lY2Vzc2FyeSBmbGFzaCBiYWNrIHRvIFBQUlxuICAgIC8vIHN0YXRlIGR1cmluZyBhIGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uLlxuICAgIC8vXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBjbG9uZXMgdGhlIGVudGlyZSBjYWNoZSBub2RlIHRyZWUgYW5kIHNldHMgdGhlIGBwcmVmZXRjaFJzY2BcbiAgICAvLyBmaWVsZCB0byBgbnVsbGAgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHJlbmRlcmVkLiBXZSBjYW4ndCBtdXRhdGUgdGhlIG5vZGVcbiAgICAvLyBpbiBwbGFjZSBiZWNhdXNlIHRoaXMgaXMgYSBjb25jdXJyZW50IGRhdGEgc3RydWN0dXJlLlxuICAgIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGRyZW4gPSByb3V0ZXJTdGF0ZVsxXTtcbiAgICBjb25zdCBvbGRQYXJhbGxlbFJvdXRlcyA9IG9sZENhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcztcbiAgICBjb25zdCBuZXdQYXJhbGxlbFJvdXRlcyA9IG5ldyBNYXAob2xkUGFyYWxsZWxSb3V0ZXMpO1xuICAgIGZvcihsZXQgcGFyYWxsZWxSb3V0ZUtleSBpbiByb3V0ZXJTdGF0ZUNoaWxkcmVuKXtcbiAgICAgICAgY29uc3Qgcm91dGVyU3RhdGVDaGlsZCA9IHJvdXRlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV07XG4gICAgICAgIGNvbnN0IHNlZ21lbnRDaGlsZCA9IHJvdXRlclN0YXRlQ2hpbGRbMF07XG4gICAgICAgIGNvbnN0IHNlZ21lbnRLZXlDaGlsZCA9ICgwLCBfY3JlYXRlcm91dGVyY2FjaGVrZXkuY3JlYXRlUm91dGVyQ2FjaGVLZXkpKHNlZ21lbnRDaGlsZCk7XG4gICAgICAgIGNvbnN0IG9sZFNlZ21lbnRNYXBDaGlsZCA9IG9sZFBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KTtcbiAgICAgICAgaWYgKG9sZFNlZ21lbnRNYXBDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBvbGRDYWNoZU5vZGVDaGlsZCA9IG9sZFNlZ21lbnRNYXBDaGlsZC5nZXQoc2VnbWVudEtleUNoaWxkKTtcbiAgICAgICAgICAgIGlmIChvbGRDYWNoZU5vZGVDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2FjaGVOb2RlQ2hpbGQgPSB1cGRhdGVDYWNoZU5vZGVPblBvcHN0YXRlUmVzdG9yYXRpb24ob2xkQ2FjaGVOb2RlQ2hpbGQsIHJvdXRlclN0YXRlQ2hpbGQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NlZ21lbnRNYXBDaGlsZCA9IG5ldyBNYXAob2xkU2VnbWVudE1hcENoaWxkKTtcbiAgICAgICAgICAgICAgICBuZXdTZWdtZW50TWFwQ2hpbGQuc2V0KHNlZ21lbnRLZXlDaGlsZCwgbmV3Q2FjaGVOb2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgIG5ld1BhcmFsbGVsUm91dGVzLnNldChwYXJhbGxlbFJvdXRlS2V5LCBuZXdTZWdtZW50TWFwQ2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE9ubHkgc2hvdyBwcmVmZXRjaGVkIGRhdGEgaWYgdGhlIGR5bmFtaWMgZGF0YSBpcyBzdGlsbCBwZW5kaW5nLlxuICAgIC8vXG4gICAgLy8gVGVobmljYWxseSwgd2hhdCB3ZSdyZSBhY3R1YWxseSBjaGVja2luZyBpcyB3aGV0aGVyIHRoZSBkeW5hbWljIG5ldHdvcmtcbiAgICAvLyByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIEJ1dCBzaW5jZSBpdCdzIGEgc3RyZWFtaW5nIHJlc3BvbnNlLCB0aGlzIGRvZXMgbm90XG4gICAgLy8gbWVhbiB0aGF0IGFsbCB0aGUgZHluYW1pYyBkYXRhIGhhcyBmdWxseSBzdHJlYW1lZCBpbi4gSXQganVzdCBtZWFucyB0aGF0XG4gICAgLy8gX3NvbWVfIG9mIHRoZSBkeW5hbWljIGRhdGEgd2FzIHJlY2VpdmVkLiBCdXQgYXMgYSBoZXVyaXN0aWMsIHdlIGFzc3VtZSB0aGF0XG4gICAgLy8gdGhlIHJlc3QgZHluYW1pYyBkYXRhIHdpbGwgc3RyZWFtIGluIHF1aWNrbHksIHNvIGl0J3Mgc3RpbGwgYmV0dGVyIHRvIHNraXBcbiAgICAvLyB0aGUgcHJlZmV0Y2ggc3RhdGUuXG4gICAgY29uc3QgcnNjID0gb2xkQ2FjaGVOb2RlLnJzYztcbiAgICBjb25zdCBzaG91bGRVc2VQcmVmZXRjaCA9IGlzRGVmZXJyZWRSc2MocnNjKSAmJiByc2Muc3RhdHVzID09PSBcInBlbmRpbmdcIjtcbiAgICByZXR1cm4ge1xuICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgcnNjLFxuICAgICAgICBoZWFkOiBvbGRDYWNoZU5vZGUuaGVhZCxcbiAgICAgICAgcHJlZmV0Y2hIZWFkOiBzaG91bGRVc2VQcmVmZXRjaCA/IG9sZENhY2hlTm9kZS5wcmVmZXRjaEhlYWQgOiBudWxsLFxuICAgICAgICBwcmVmZXRjaFJzYzogc2hvdWxkVXNlUHJlZmV0Y2ggPyBvbGRDYWNoZU5vZGUucHJlZmV0Y2hSc2MgOiBudWxsLFxuICAgICAgICAvLyBUaGVzZSBhcmUgdGhlIGNsb25lZCBjaGlsZHJlbiB3ZSBjb21wdXRlZCBhYm92ZVxuICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3UGFyYWxsZWxSb3V0ZXNcbiAgICB9O1xufVxuY29uc3QgREVGRVJSRUQgPSBTeW1ib2woKTtcbi8vIFRoaXMgdHlwZSBleGlzdHMgdG8gZGlzdGluZ3Vpc2ggYSBEZWZlcnJlZFJzYyBmcm9tIGEgRmxpZ2h0IHByb21pc2UuIEl0J3MgYVxuLy8gY29tcHJvbWlzZSB0byBhdm9pZCBhZGRpbmcgYW4gZXh0cmEgZmllbGQgb24gZXZlcnkgQ2FjaGUgTm9kZSwgd2hpY2ggd291bGQgYmVcbi8vIGF3a3dhcmQgYmVjYXVzZSB0aGUgcHJlLVBQUiBwYXJ0cyBvZiBjb2RlYmFzZSB3b3VsZCBuZWVkIHRvIGFjY291bnQgZm9yIGl0LFxuLy8gdG9vLiBXZSBjYW4gcmVtb3ZlIGl0IG9uY2UgdHlwZSBDYWNoZSBOb2RlIHR5cGUgaXMgbW9yZSBzZXR0bGVkLlxuZnVuY3Rpb24gaXNEZWZlcnJlZFJzYyh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS50YWcgPT09IERFRkVSUkVEO1xufVxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRSc2MoKSB7XG4gICAgbGV0IHJlc29sdmU7XG4gICAgbGV0IHJlamVjdDtcbiAgICBjb25zdCBwZW5kaW5nUnNjID0gbmV3IFByb21pc2UoKHJlcywgcmVqKT0+e1xuICAgICAgICByZXNvbHZlID0gcmVzO1xuICAgICAgICByZWplY3QgPSByZWo7XG4gICAgfSk7XG4gICAgcGVuZGluZ1JzYy5zdGF0dXMgPSBcInBlbmRpbmdcIjtcbiAgICBwZW5kaW5nUnNjLnJlc29sdmUgPSAodmFsdWUpPT57XG4gICAgICAgIGlmIChwZW5kaW5nUnNjLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGZpbGxlZFJzYyA9IHBlbmRpbmdSc2M7XG4gICAgICAgICAgICBmdWxmaWxsZWRSc2Muc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICAgIGZ1bGZpbGxlZFJzYy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHBlbmRpbmdSc2MucmVqZWN0ID0gKGVycm9yKT0+e1xuICAgICAgICBpZiAocGVuZGluZ1JzYy5zdGF0dXMgPT09IFwicGVuZGluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCByZWplY3RlZFJzYyA9IHBlbmRpbmdSc2M7XG4gICAgICAgICAgICByZWplY3RlZFJzYy5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgICByZWplY3RlZFJzYy5yZWFzb24gPSBlcnJvcjtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHBlbmRpbmdSc2MudGFnID0gREVGRVJSRUQ7XG4gICAgcmV0dXJuIHBlbmRpbmdSc2M7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBwci1uYXZpZ2F0aW9ucy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJ1cGRhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb24iLCJsaXN0ZW5Gb3JEeW5hbWljUmVxdWVzdCIsImFib3J0VGFzayIsInVwZGF0ZUNhY2hlTm9kZU9uUG9wc3RhdGVSZXN0b3JhdGlvbiIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9zZWdtZW50IiwicmVxdWlyZSIsIl9tYXRjaHNlZ21lbnRzIiwiX2NyZWF0ZXJvdXRlcmNhY2hla2V5Iiwib2xkQ2FjaGVOb2RlIiwib2xkUm91dGVyU3RhdGUiLCJuZXdSb3V0ZXJTdGF0ZSIsInByZWZldGNoRGF0YSIsInByZWZldGNoSGVhZCIsImlzUHJlZmV0Y2hTdGFsZSIsIm9sZFJvdXRlclN0YXRlQ2hpbGRyZW4iLCJuZXdSb3V0ZXJTdGF0ZUNoaWxkcmVuIiwicHJlZmV0Y2hEYXRhQ2hpbGRyZW4iLCJvbGRQYXJhbGxlbFJvdXRlcyIsInBhcmFsbGVsUm91dGVzIiwicHJlZmV0Y2hQYXJhbGxlbFJvdXRlcyIsIk1hcCIsInBhdGNoZWRSb3V0ZXJTdGF0ZUNoaWxkcmVuIiwidGFza0NoaWxkcmVuIiwicGFyYWxsZWxSb3V0ZUtleSIsIm5ld1JvdXRlclN0YXRlQ2hpbGQiLCJvbGRSb3V0ZXJTdGF0ZUNoaWxkIiwib2xkU2VnbWVudE1hcENoaWxkIiwicHJlZmV0Y2hEYXRhQ2hpbGQiLCJuZXdTZWdtZW50Q2hpbGQiLCJuZXdTZWdtZW50S2V5Q2hpbGQiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsIm9sZFNlZ21lbnRDaGlsZCIsInVuZGVmaW5lZCIsIm9sZENhY2hlTm9kZUNoaWxkIiwidGFza0NoaWxkIiwiUEFHRV9TRUdNRU5UX0tFWSIsInNwYXduUGVuZGluZ1Rhc2siLCJERUZBVUxUX1NFR01FTlRfS0VZIiwic3Bhd25SZXVzZWRUYXNrIiwibWF0Y2hTZWdtZW50Iiwic3Bhd25UYXNrRm9yTWlzc2luZ0RhdGEiLCJzZXQiLCJuZXdDYWNoZU5vZGVDaGlsZCIsIm5vZGUiLCJuZXdTZWdtZW50TWFwQ2hpbGQiLCJyb3V0ZSIsIm5ld0NhY2hlTm9kZSIsImxhenlEYXRhIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJoZWFkIiwicGF0Y2hSb3V0ZXJTdGF0ZVdpdGhOZXdDaGlsZHJlbiIsImNoaWxkcmVuIiwiYmFzZVJvdXRlclN0YXRlIiwibmV3Q2hpbGRyZW4iLCJjbG9uZSIsInJvdXRlclN0YXRlIiwicGVuZGluZ0NhY2hlTm9kZSIsImNyZWF0ZVBlbmRpbmdDYWNoZU5vZGUiLCJyZXVzZWRSb3V0ZXJTdGF0ZSIsInRhc2siLCJyZXNwb25zZVByb21pc2UiLCJ0aGVuIiwicmVzcG9uc2UiLCJmbGlnaHREYXRhIiwiZmxpZ2h0RGF0YVBhdGgiLCJzZWdtZW50UGF0aCIsInNsaWNlIiwic2VydmVyUm91dGVyU3RhdGUiLCJsZW5ndGgiLCJkeW5hbWljRGF0YSIsImR5bmFtaWNIZWFkIiwid3JpdGVEeW5hbWljRGF0YUludG9QZW5kaW5nVGFzayIsImVycm9yIiwicm9vdFRhc2siLCJpIiwic2VnbWVudCIsInRhc2tTZWdtZW50IiwiZmluaXNoVGFza1VzaW5nRHluYW1pY0RhdGFQYXlsb2FkIiwidGFza05vZGUiLCJmaW5pc2hQZW5kaW5nQ2FjaGVOb2RlIiwic2VydmVyQ2hpbGRyZW4iLCJkeW5hbWljRGF0YUNoaWxkcmVuIiwic2VydmVyUm91dGVyU3RhdGVDaGlsZCIsImR5bmFtaWNEYXRhQ2hpbGQiLCJyb3V0ZXJTdGF0ZUNoaWxkcmVuIiwicm91dGVyU3RhdGVDaGlsZCIsInNlZ21lbnRDaGlsZCIsInNlZ21lbnRLZXlDaGlsZCIsImlzTGVhZlNlZ21lbnQiLCJzaXplIiwibWF5YmVQcmVmZXRjaFJzYyIsImNyZWF0ZURlZmVycmVkUnNjIiwiY2FjaGVOb2RlIiwidGFza1N0YXRlIiwic2VydmVyU3RhdGUiLCJ0YXNrU3RhdGVDaGlsZHJlbiIsInNlcnZlclN0YXRlQ2hpbGRyZW4iLCJkYXRhQ2hpbGRyZW4iLCJ0YXNrU3RhdGVDaGlsZCIsInNlcnZlclN0YXRlQ2hpbGQiLCJkYXRhQ2hpbGQiLCJzZWdtZW50TWFwQ2hpbGQiLCJ0YXNrU2VnbWVudENoaWxkIiwidGFza1NlZ21lbnRLZXlDaGlsZCIsImNhY2hlTm9kZUNoaWxkIiwiYWJvcnRQZW5kaW5nQ2FjaGVOb2RlIiwiZHluYW1pY1NlZ21lbnREYXRhIiwiaXNEZWZlcnJlZFJzYyIsInJlc29sdmUiLCJ2YWx1ZXMiLCJyZWplY3QiLCJuZXdQYXJhbGxlbFJvdXRlcyIsInNob3VsZFVzZVByZWZldGNoIiwic3RhdHVzIiwiREVGRVJSRUQiLCJTeW1ib2wiLCJ0YWciLCJwZW5kaW5nUnNjIiwiUHJvbWlzZSIsInJlcyIsInJlaiIsImZ1bGZpbGxlZFJzYyIsInJlamVjdGVkUnNjIiwicmVhc29uIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/create-prefetch-cache-key.js": +/*!*******************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/create-prefetch-cache-key.js ***! + \*******************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createPrefetchCacheKey\", ({\n enumerable: true,\n get: function() {\n return createPrefetchCacheKey;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ../../../../shared/lib/router/utils/add-path-prefix */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ../../../../shared/lib/router/utils/path-has-prefix */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nfunction createPrefetchCacheKey(url, nextUrl) {\n const pathnameFromUrl = (0, _createhreffromurl.createHrefFromUrl)(url, false);\n // delimit the prefix so we don't conflict with other pages\n const nextUrlPrefix = \"\" + nextUrl + \"%\";\n // Route interception depends on `nextUrl` values which aren't a 1:1 mapping to a URL\n // The cache key that we store needs to use `nextUrl` to properly distinguish cache entries\n if (nextUrl && !(0, _pathhasprefix.pathHasPrefix)(pathnameFromUrl, nextUrl)) {\n return (0, _addpathprefix.addPathPrefix)(pathnameFromUrl, nextUrlPrefix);\n }\n return pathnameFromUrl;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=create-prefetch-cache-key.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvY3JlYXRlLXByZWZldGNoLWNhY2hlLWtleS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMERBQXlEO0lBQ3JESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsaUJBQWlCQyxtQkFBT0EsQ0FBQyxvSkFBcUQ7QUFDcEYsTUFBTUMsaUJBQWlCRCxtQkFBT0EsQ0FBQyxvSkFBcUQ7QUFDcEYsTUFBTUUscUJBQXFCRixtQkFBT0EsQ0FBQyxzSUFBeUI7QUFDNUQsU0FBU0YsdUJBQXVCSyxHQUFHLEVBQUVDLE9BQU87SUFDeEMsTUFBTUMsa0JBQWtCLENBQUMsR0FBR0gsbUJBQW1CSSxpQkFBaUIsRUFBRUgsS0FDbEU7SUFDQSwyREFBMkQ7SUFDM0QsTUFBTUksZ0JBQWdCLEtBQUtILFVBQVU7SUFDckMscUZBQXFGO0lBQ3JGLDJGQUEyRjtJQUMzRixJQUFJQSxXQUFXLENBQUMsQ0FBQyxHQUFHSCxlQUFlTyxhQUFhLEVBQUVILGlCQUFpQkQsVUFBVTtRQUN6RSxPQUFPLENBQUMsR0FBR0wsZUFBZVUsYUFBYSxFQUFFSixpQkFBaUJFO0lBQzlEO0lBQ0EsT0FBT0Y7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPWCxRQUFRZ0IsT0FBTyxLQUFLLGNBQWUsT0FBT2hCLFFBQVFnQixPQUFPLEtBQUssWUFBWWhCLFFBQVFnQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9oQixRQUFRZ0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS25CLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWdCLE9BQU8sRUFBRSxjQUFjO1FBQUVmLE9BQU87SUFBSztJQUNuRUgsT0FBT29CLE1BQU0sQ0FBQ2xCLFFBQVFnQixPQUFPLEVBQUVoQjtJQUMvQm1CLE9BQU9uQixPQUFPLEdBQUdBLFFBQVFnQixPQUFPO0FBQ2xDLEVBRUEscURBQXFEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvY3JlYXRlLXByZWZldGNoLWNhY2hlLWtleS5qcz9mNDkzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUHJlZmV0Y2hDYWNoZUtleVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUHJlZmV0Y2hDYWNoZUtleTtcbiAgICB9XG59KTtcbmNvbnN0IF9hZGRwYXRocHJlZml4ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1wYXRoLXByZWZpeFwiKTtcbmNvbnN0IF9wYXRoaGFzcHJlZml4ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtaGFzLXByZWZpeFwiKTtcbmNvbnN0IF9jcmVhdGVocmVmZnJvbXVybCA9IHJlcXVpcmUoXCIuLi9jcmVhdGUtaHJlZi1mcm9tLXVybFwiKTtcbmZ1bmN0aW9uIGNyZWF0ZVByZWZldGNoQ2FjaGVLZXkodXJsLCBuZXh0VXJsKSB7XG4gICAgY29uc3QgcGF0aG5hbWVGcm9tVXJsID0gKDAsIF9jcmVhdGVocmVmZnJvbXVybC5jcmVhdGVIcmVmRnJvbVVybCkodXJsLCAvLyBFbnN1cmVzIHRoZSBoYXNoIGlzIG5vdCBwYXJ0IG9mIHRoZSBjYWNoZSBrZXkgYXMgaXQgZG9lcyBub3QgaW1wYWN0IHRoZSBzZXJ2ZXIgZmV0Y2hcbiAgICBmYWxzZSk7XG4gICAgLy8gZGVsaW1pdCB0aGUgcHJlZml4IHNvIHdlIGRvbid0IGNvbmZsaWN0IHdpdGggb3RoZXIgcGFnZXNcbiAgICBjb25zdCBuZXh0VXJsUHJlZml4ID0gXCJcIiArIG5leHRVcmwgKyBcIiVcIjtcbiAgICAvLyBSb3V0ZSBpbnRlcmNlcHRpb24gZGVwZW5kcyBvbiBgbmV4dFVybGAgdmFsdWVzIHdoaWNoIGFyZW4ndCBhIDE6MSBtYXBwaW5nIHRvIGEgVVJMXG4gICAgLy8gVGhlIGNhY2hlIGtleSB0aGF0IHdlIHN0b3JlIG5lZWRzIHRvIHVzZSBgbmV4dFVybGAgdG8gcHJvcGVybHkgZGlzdGluZ3Vpc2ggY2FjaGUgZW50cmllc1xuICAgIGlmIChuZXh0VXJsICYmICEoMCwgX3BhdGhoYXNwcmVmaXgucGF0aEhhc1ByZWZpeCkocGF0aG5hbWVGcm9tVXJsLCBuZXh0VXJsKSkge1xuICAgICAgICByZXR1cm4gKDAsIF9hZGRwYXRocHJlZml4LmFkZFBhdGhQcmVmaXgpKHBhdGhuYW1lRnJvbVVybCwgbmV4dFVybFByZWZpeCk7XG4gICAgfVxuICAgIHJldHVybiBwYXRobmFtZUZyb21Vcmw7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZS1wcmVmZXRjaC1jYWNoZS1rZXkuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImNyZWF0ZVByZWZldGNoQ2FjaGVLZXkiLCJfYWRkcGF0aHByZWZpeCIsInJlcXVpcmUiLCJfcGF0aGhhc3ByZWZpeCIsIl9jcmVhdGVocmVmZnJvbXVybCIsInVybCIsIm5leHRVcmwiLCJwYXRobmFtZUZyb21VcmwiLCJjcmVhdGVIcmVmRnJvbVVybCIsIm5leHRVcmxQcmVmaXgiLCJwYXRoSGFzUHJlZml4IiwiYWRkUGF0aFByZWZpeCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/create-prefetch-cache-key.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/fast-refresh-reducer.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/fast-refresh-reducer.js ***! + \**************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"fastRefreshReducer\", ({\n enumerable: true,\n get: function() {\n return fastRefreshReducer;\n }\n}));\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\n// A version of refresh reducer that keeps the cache around instead of wiping all of it.\nfunction fastRefreshReducerImpl(state, action) {\n const { origin } = action;\n const mutable = {};\n const href = state.canonicalUrl;\n mutable.preserveCustomHistoryState = false;\n const cache = (0, _approuter.createEmptyCacheNode)();\n // TODO-APP: verify that `href` is not an external url.\n // Fetch data from the root of the tree.\n cache.lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(href, origin), [\n state.tree[0],\n state.tree[1],\n state.tree[2],\n \"refetch\"\n ], state.nextUrl, state.buildId);\n return cache.lazyData.then((param)=>{\n let [flightData, canonicalUrlOverride] = param;\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === \"string\") {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n // Remove cache.lazyData as it has been resolved at this point.\n cache.lazyData = null;\n let currentTree = state.tree;\n let currentCache = state.cache;\n for (const flightDataPath of flightData){\n // FlightDataPath with more than two items means unexpected Flight data was returned\n if (flightDataPath.length !== 3) {\n // TODO-APP: handle this case better\n console.log(\"REFRESH FAILED\");\n return state;\n }\n // Given the path can only have two items the items are only the router state and rsc for the root.\n const [treePatch] = flightDataPath;\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)([\n \"\"\n ], currentTree, treePatch);\n if (newTree === null) {\n return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, href, state.pushRef.pendingPush);\n }\n const canonicalUrlOverrideHref = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : undefined;\n if (canonicalUrlOverride) {\n mutable.canonicalUrl = canonicalUrlOverrideHref;\n }\n const applied = (0, _applyflightdata.applyFlightData)(currentCache, cache, flightDataPath);\n if (applied) {\n mutable.cache = cache;\n currentCache = cache;\n }\n mutable.patchedTree = newTree;\n mutable.canonicalUrl = href;\n currentTree = newTree;\n }\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, ()=>state);\n}\nfunction fastRefreshReducerNoop(state, _action) {\n return state;\n}\nconst fastRefreshReducer = false ? 0 : fastRefreshReducerImpl;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fast-refresh-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZmFzdC1yZWZyZXNoLXJlZHVjZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHVCQUF1QkMsbUJBQU9BLENBQUMsd0lBQTBCO0FBQy9ELE1BQU1DLHFCQUFxQkQsbUJBQU9BLENBQUMsc0lBQXlCO0FBQzVELE1BQU1FLCtCQUErQkYsbUJBQU9BLENBQUMsOEpBQXFDO0FBQ2xGLE1BQU1HLCtCQUErQkgsbUJBQU9BLENBQUMsOEpBQXFDO0FBQ2xGLE1BQU1JLG1CQUFtQkosbUJBQU9BLENBQUMsc0lBQW9CO0FBQ3JELE1BQU1LLGlCQUFpQkwsbUJBQU9BLENBQUMsMEhBQW1CO0FBQ2xELE1BQU1NLG1CQUFtQk4sbUJBQU9BLENBQUMsZ0lBQXNCO0FBQ3ZELE1BQU1PLGFBQWFQLG1CQUFPQSxDQUFDLHNHQUFrQjtBQUM3QyxNQUFNUSx5QkFBeUJSLG1CQUFPQSxDQUFDLDRJQUE0QjtBQUNuRSx3RkFBd0Y7QUFDeEYsU0FBU1MsdUJBQXVCQyxLQUFLLEVBQUVDLE1BQU07SUFDekMsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR0Q7SUFDbkIsTUFBTUUsVUFBVSxDQUFDO0lBQ2pCLE1BQU1DLE9BQU9KLE1BQU1LLFlBQVk7SUFDL0JGLFFBQVFHLDBCQUEwQixHQUFHO0lBQ3JDLE1BQU1DLFFBQVEsQ0FBQyxHQUFHVixXQUFXVyxvQkFBb0I7SUFDakQsdURBQXVEO0lBQ3ZELHdDQUF3QztJQUN4Q0QsTUFBTUUsUUFBUSxHQUFHLENBQUMsR0FBR3BCLHFCQUFxQnFCLG1CQUFtQixFQUFFLElBQUlDLElBQUlQLE1BQU1GLFNBQVM7UUFDbEZGLE1BQU1ZLElBQUksQ0FBQyxFQUFFO1FBQ2JaLE1BQU1ZLElBQUksQ0FBQyxFQUFFO1FBQ2JaLE1BQU1ZLElBQUksQ0FBQyxFQUFFO1FBQ2I7S0FDSCxFQUFFWixNQUFNYSxPQUFPLEVBQUViLE1BQU1jLE9BQU87SUFDL0IsT0FBT1AsTUFBTUUsUUFBUSxDQUFDTSxJQUFJLENBQUMsQ0FBQ0M7UUFDeEIsSUFBSSxDQUFDQyxZQUFZQyxxQkFBcUIsR0FBR0Y7UUFDekMsNERBQTREO1FBQzVELElBQUksT0FBT0MsZUFBZSxVQUFVO1lBQ2hDLE9BQU8sQ0FBQyxHQUFHdkIsaUJBQWlCeUIsaUJBQWlCLEVBQUVuQixPQUFPRyxTQUFTYyxZQUFZakIsTUFBTW9CLE9BQU8sQ0FBQ0MsV0FBVztRQUN4RztRQUNBLCtEQUErRDtRQUMvRGQsTUFBTUUsUUFBUSxHQUFHO1FBQ2pCLElBQUlhLGNBQWN0QixNQUFNWSxJQUFJO1FBQzVCLElBQUlXLGVBQWV2QixNQUFNTyxLQUFLO1FBQzlCLEtBQUssTUFBTWlCLGtCQUFrQlAsV0FBVztZQUNwQyxvRkFBb0Y7WUFDcEYsSUFBSU8sZUFBZUMsTUFBTSxLQUFLLEdBQUc7Z0JBQzdCLG9DQUFvQztnQkFDcENDLFFBQVFDLEdBQUcsQ0FBQztnQkFDWixPQUFPM0I7WUFDWDtZQUNBLG1HQUFtRztZQUNuRyxNQUFNLENBQUM0QixVQUFVLEdBQUdKO1lBQ3BCLE1BQU1LLFVBQVUsQ0FBQyxHQUFHckMsNkJBQTZCc0Msc0NBQXNDLEVBQ3ZGO2dCQUNJO2FBQ0gsRUFBRVIsYUFBYU07WUFDaEIsSUFBSUMsWUFBWSxNQUFNO2dCQUNsQixPQUFPLENBQUMsR0FBRy9CLHVCQUF1QmlDLHFCQUFxQixFQUFFL0IsT0FBT0MsUUFBUTJCO1lBQzVFO1lBQ0EsSUFBSSxDQUFDLEdBQUduQyw2QkFBNkJ1QywyQkFBMkIsRUFBRVYsYUFBYU8sVUFBVTtnQkFDckYsT0FBTyxDQUFDLEdBQUduQyxpQkFBaUJ5QixpQkFBaUIsRUFBRW5CLE9BQU9HLFNBQVNDLE1BQU1KLE1BQU1vQixPQUFPLENBQUNDLFdBQVc7WUFDbEc7WUFDQSxNQUFNWSwyQkFBMkJmLHVCQUF1QixDQUFDLEdBQUczQixtQkFBbUIyQyxpQkFBaUIsRUFBRWhCLHdCQUF3QmlCO1lBQzFILElBQUlqQixzQkFBc0I7Z0JBQ3RCZixRQUFRRSxZQUFZLEdBQUc0QjtZQUMzQjtZQUNBLE1BQU1HLFVBQVUsQ0FBQyxHQUFHeEMsaUJBQWlCeUMsZUFBZSxFQUFFZCxjQUFjaEIsT0FBT2lCO1lBQzNFLElBQUlZLFNBQVM7Z0JBQ1RqQyxRQUFRSSxLQUFLLEdBQUdBO2dCQUNoQmdCLGVBQWVoQjtZQUNuQjtZQUNBSixRQUFRbUMsV0FBVyxHQUFHVDtZQUN0QjFCLFFBQVFFLFlBQVksR0FBR0Q7WUFDdkJrQixjQUFjTztRQUNsQjtRQUNBLE9BQU8sQ0FBQyxHQUFHbEMsZUFBZTRDLGFBQWEsRUFBRXZDLE9BQU9HO0lBQ3BELEdBQUcsSUFBSUg7QUFDWDtBQUNBLFNBQVN3Qyx1QkFBdUJ4QyxLQUFLLEVBQUV5QyxPQUFPO0lBQzFDLE9BQU96QztBQUNYO0FBQ0EsTUFBTVoscUJBQXFCc0QsTUFBcUMsR0FBR0YsQ0FBc0JBLEdBQUd6QztBQUU1RixJQUFJLENBQUMsT0FBT2YsUUFBUTJELE9BQU8sS0FBSyxjQUFlLE9BQU8zRCxRQUFRMkQsT0FBTyxLQUFLLFlBQVkzRCxRQUFRMkQsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPM0QsUUFBUTJELE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcks5RCxPQUFPQyxjQUFjLENBQUNDLFFBQVEyRCxPQUFPLEVBQUUsY0FBYztRQUFFMUQsT0FBTztJQUFLO0lBQ25FSCxPQUFPK0QsTUFBTSxDQUFDN0QsUUFBUTJELE9BQU8sRUFBRTNEO0lBQy9COEQsT0FBTzlELE9BQU8sR0FBR0EsUUFBUTJELE9BQU87QUFDbEMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9mYXN0LXJlZnJlc2gtcmVkdWNlci5qcz8xM2EwIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmFzdFJlZnJlc2hSZWR1Y2VyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmYXN0UmVmcmVzaFJlZHVjZXI7XG4gICAgfVxufSk7XG5jb25zdCBfZmV0Y2hzZXJ2ZXJyZXNwb25zZSA9IHJlcXVpcmUoXCIuLi9mZXRjaC1zZXJ2ZXItcmVzcG9uc2VcIik7XG5jb25zdCBfY3JlYXRlaHJlZmZyb211cmwgPSByZXF1aXJlKFwiLi4vY3JlYXRlLWhyZWYtZnJvbS11cmxcIik7XG5jb25zdCBfYXBwbHlyb3V0ZXJzdGF0ZXBhdGNodG90cmVlID0gcmVxdWlyZShcIi4uL2FwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlXCIpO1xuY29uc3QgX2lzbmF2aWdhdGluZ3RvbmV3cm9vdGxheW91dCA9IHJlcXVpcmUoXCIuLi9pcy1uYXZpZ2F0aW5nLXRvLW5ldy1yb290LWxheW91dFwiKTtcbmNvbnN0IF9uYXZpZ2F0ZXJlZHVjZXIgPSByZXF1aXJlKFwiLi9uYXZpZ2F0ZS1yZWR1Y2VyXCIpO1xuY29uc3QgX2hhbmRsZW11dGFibGUgPSByZXF1aXJlKFwiLi4vaGFuZGxlLW11dGFibGVcIik7XG5jb25zdCBfYXBwbHlmbGlnaHRkYXRhID0gcmVxdWlyZShcIi4uL2FwcGx5LWZsaWdodC1kYXRhXCIpO1xuY29uc3QgX2FwcHJvdXRlciA9IHJlcXVpcmUoXCIuLi8uLi9hcHAtcm91dGVyXCIpO1xuY29uc3QgX2hhbmRsZXNlZ21lbnRtaXNtYXRjaCA9IHJlcXVpcmUoXCIuLi9oYW5kbGUtc2VnbWVudC1taXNtYXRjaFwiKTtcbi8vIEEgdmVyc2lvbiBvZiByZWZyZXNoIHJlZHVjZXIgdGhhdCBrZWVwcyB0aGUgY2FjaGUgYXJvdW5kIGluc3RlYWQgb2Ygd2lwaW5nIGFsbCBvZiBpdC5cbmZ1bmN0aW9uIGZhc3RSZWZyZXNoUmVkdWNlckltcGwoc3RhdGUsIGFjdGlvbikge1xuICAgIGNvbnN0IHsgb3JpZ2luIH0gPSBhY3Rpb247XG4gICAgY29uc3QgbXV0YWJsZSA9IHt9O1xuICAgIGNvbnN0IGhyZWYgPSBzdGF0ZS5jYW5vbmljYWxVcmw7XG4gICAgbXV0YWJsZS5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSA9IGZhbHNlO1xuICAgIGNvbnN0IGNhY2hlID0gKDAsIF9hcHByb3V0ZXIuY3JlYXRlRW1wdHlDYWNoZU5vZGUpKCk7XG4gICAgLy8gVE9ETy1BUFA6IHZlcmlmeSB0aGF0IGBocmVmYCBpcyBub3QgYW4gZXh0ZXJuYWwgdXJsLlxuICAgIC8vIEZldGNoIGRhdGEgZnJvbSB0aGUgcm9vdCBvZiB0aGUgdHJlZS5cbiAgICBjYWNoZS5sYXp5RGF0YSA9ICgwLCBfZmV0Y2hzZXJ2ZXJyZXNwb25zZS5mZXRjaFNlcnZlclJlc3BvbnNlKShuZXcgVVJMKGhyZWYsIG9yaWdpbiksIFtcbiAgICAgICAgc3RhdGUudHJlZVswXSxcbiAgICAgICAgc3RhdGUudHJlZVsxXSxcbiAgICAgICAgc3RhdGUudHJlZVsyXSxcbiAgICAgICAgXCJyZWZldGNoXCJcbiAgICBdLCBzdGF0ZS5uZXh0VXJsLCBzdGF0ZS5idWlsZElkKTtcbiAgICByZXR1cm4gY2FjaGUubGF6eURhdGEudGhlbigocGFyYW0pPT57XG4gICAgICAgIGxldCBbZmxpZ2h0RGF0YSwgY2Fub25pY2FsVXJsT3ZlcnJpZGVdID0gcGFyYW07XG4gICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZW4gbmF2aWdhdGluZyB0byBwYWdlIGluIGBwYWdlc2AgZnJvbSBgYXBwYFxuICAgICAgICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgX25hdmlnYXRlcmVkdWNlci5oYW5kbGVFeHRlcm5hbFVybCkoc3RhdGUsIG11dGFibGUsIGZsaWdodERhdGEsIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2gpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlbW92ZSBjYWNoZS5sYXp5RGF0YSBhcyBpdCBoYXMgYmVlbiByZXNvbHZlZCBhdCB0aGlzIHBvaW50LlxuICAgICAgICBjYWNoZS5sYXp5RGF0YSA9IG51bGw7XG4gICAgICAgIGxldCBjdXJyZW50VHJlZSA9IHN0YXRlLnRyZWU7XG4gICAgICAgIGxldCBjdXJyZW50Q2FjaGUgPSBzdGF0ZS5jYWNoZTtcbiAgICAgICAgZm9yIChjb25zdCBmbGlnaHREYXRhUGF0aCBvZiBmbGlnaHREYXRhKXtcbiAgICAgICAgICAgIC8vIEZsaWdodERhdGFQYXRoIHdpdGggbW9yZSB0aGFuIHR3byBpdGVtcyBtZWFucyB1bmV4cGVjdGVkIEZsaWdodCBkYXRhIHdhcyByZXR1cm5lZFxuICAgICAgICAgICAgaWYgKGZsaWdodERhdGFQYXRoLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8tQVBQOiBoYW5kbGUgdGhpcyBjYXNlIGJldHRlclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUkVGUkVTSCBGQUlMRURcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2l2ZW4gdGhlIHBhdGggY2FuIG9ubHkgaGF2ZSB0d28gaXRlbXMgdGhlIGl0ZW1zIGFyZSBvbmx5IHRoZSByb3V0ZXIgc3RhdGUgYW5kIHJzYyBmb3IgdGhlIHJvb3QuXG4gICAgICAgICAgICBjb25zdCBbdHJlZVBhdGNoXSA9IGZsaWdodERhdGFQYXRoO1xuICAgICAgICAgICAgY29uc3QgbmV3VHJlZSA9ICgwLCBfYXBwbHlyb3V0ZXJzdGF0ZXBhdGNodG90cmVlLmFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZVNraXBEZWZhdWx0KSgvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgXSwgY3VycmVudFRyZWUsIHRyZWVQYXRjaCk7XG4gICAgICAgICAgICBpZiAobmV3VHJlZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX2hhbmRsZXNlZ21lbnRtaXNtYXRjaC5oYW5kbGVTZWdtZW50TWlzbWF0Y2gpKHN0YXRlLCBhY3Rpb24sIHRyZWVQYXRjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIF9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQuaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0KShjdXJyZW50VHJlZSwgbmV3VHJlZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9uYXZpZ2F0ZXJlZHVjZXIuaGFuZGxlRXh0ZXJuYWxVcmwpKHN0YXRlLCBtdXRhYmxlLCBocmVmLCBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZiA9IGNhbm9uaWNhbFVybE92ZXJyaWRlID8gKDAsIF9jcmVhdGVocmVmZnJvbXVybC5jcmVhdGVIcmVmRnJvbVVybCkoY2Fub25pY2FsVXJsT3ZlcnJpZGUpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGNhbm9uaWNhbFVybE92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSBjYW5vbmljYWxVcmxPdmVycmlkZUhyZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhcHBsaWVkID0gKDAsIF9hcHBseWZsaWdodGRhdGEuYXBwbHlGbGlnaHREYXRhKShjdXJyZW50Q2FjaGUsIGNhY2hlLCBmbGlnaHREYXRhUGF0aCk7XG4gICAgICAgICAgICBpZiAoYXBwbGllZCkge1xuICAgICAgICAgICAgICAgIG11dGFibGUuY2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG11dGFibGUucGF0Y2hlZFRyZWUgPSBuZXdUcmVlO1xuICAgICAgICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSBocmVmO1xuICAgICAgICAgICAgY3VycmVudFRyZWUgPSBuZXdUcmVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoMCwgX2hhbmRsZW11dGFibGUuaGFuZGxlTXV0YWJsZSkoc3RhdGUsIG11dGFibGUpO1xuICAgIH0sICgpPT5zdGF0ZSk7XG59XG5mdW5jdGlvbiBmYXN0UmVmcmVzaFJlZHVjZXJOb29wKHN0YXRlLCBfYWN0aW9uKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xufVxuY29uc3QgZmFzdFJlZnJlc2hSZWR1Y2VyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZmFzdFJlZnJlc2hSZWR1Y2VyTm9vcCA6IGZhc3RSZWZyZXNoUmVkdWNlckltcGw7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZhc3QtcmVmcmVzaC1yZWR1Y2VyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJmYXN0UmVmcmVzaFJlZHVjZXIiLCJfZmV0Y2hzZXJ2ZXJyZXNwb25zZSIsInJlcXVpcmUiLCJfY3JlYXRlaHJlZmZyb211cmwiLCJfYXBwbHlyb3V0ZXJzdGF0ZXBhdGNodG90cmVlIiwiX2lzbmF2aWdhdGluZ3RvbmV3cm9vdGxheW91dCIsIl9uYXZpZ2F0ZXJlZHVjZXIiLCJfaGFuZGxlbXV0YWJsZSIsIl9hcHBseWZsaWdodGRhdGEiLCJfYXBwcm91dGVyIiwiX2hhbmRsZXNlZ21lbnRtaXNtYXRjaCIsImZhc3RSZWZyZXNoUmVkdWNlckltcGwiLCJzdGF0ZSIsImFjdGlvbiIsIm9yaWdpbiIsIm11dGFibGUiLCJocmVmIiwiY2Fub25pY2FsVXJsIiwicHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUiLCJjYWNoZSIsImNyZWF0ZUVtcHR5Q2FjaGVOb2RlIiwibGF6eURhdGEiLCJmZXRjaFNlcnZlclJlc3BvbnNlIiwiVVJMIiwidHJlZSIsIm5leHRVcmwiLCJidWlsZElkIiwidGhlbiIsInBhcmFtIiwiZmxpZ2h0RGF0YSIsImNhbm9uaWNhbFVybE92ZXJyaWRlIiwiaGFuZGxlRXh0ZXJuYWxVcmwiLCJwdXNoUmVmIiwicGVuZGluZ1B1c2giLCJjdXJyZW50VHJlZSIsImN1cnJlbnRDYWNoZSIsImZsaWdodERhdGFQYXRoIiwibGVuZ3RoIiwiY29uc29sZSIsImxvZyIsInRyZWVQYXRjaCIsIm5ld1RyZWUiLCJhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdCIsImhhbmRsZVNlZ21lbnRNaXNtYXRjaCIsImlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCIsImNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZiIsImNyZWF0ZUhyZWZGcm9tVXJsIiwidW5kZWZpbmVkIiwiYXBwbGllZCIsImFwcGx5RmxpZ2h0RGF0YSIsInBhdGNoZWRUcmVlIiwiaGFuZGxlTXV0YWJsZSIsImZhc3RSZWZyZXNoUmVkdWNlck5vb3AiLCJfYWN0aW9uIiwicHJvY2VzcyIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/fast-refresh-reducer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js ***! + \************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"findHeadInCache\", ({\n enumerable: true,\n get: function() {\n return findHeadInCache;\n }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ../create-router-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction findHeadInCache(cache, parallelRoutes) {\n return findHeadInCacheImpl(cache, parallelRoutes, \"\");\n}\nfunction findHeadInCacheImpl(cache, parallelRoutes, keyPrefix) {\n const isLastItem = Object.keys(parallelRoutes).length === 0;\n if (isLastItem) {\n // Returns the entire Cache Node of the segment whose head we will render.\n return [\n cache,\n keyPrefix\n ];\n }\n for(const key in parallelRoutes){\n const [segment, childParallelRoutes] = parallelRoutes[key];\n const childSegmentMap = cache.parallelRoutes.get(key);\n if (!childSegmentMap) {\n continue;\n }\n const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n const cacheNode = childSegmentMap.get(cacheKey);\n if (!cacheNode) {\n continue;\n }\n const item = findHeadInCacheImpl(cacheNode, childParallelRoutes, keyPrefix + \"/\" + cacheKey);\n if (item) {\n return item;\n }\n }\n return null;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=find-head-in-cache.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZmluZC1oZWFkLWluLWNhY2hlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxtREFBa0Q7SUFDOUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyx3QkFBd0JDLG1CQUFPQSxDQUFDLDRJQUE0QjtBQUNsRSxTQUFTRixnQkFBZ0JHLEtBQUssRUFBRUMsY0FBYztJQUMxQyxPQUFPQyxvQkFBb0JGLE9BQU9DLGdCQUFnQjtBQUN0RDtBQUNBLFNBQVNDLG9CQUFvQkYsS0FBSyxFQUFFQyxjQUFjLEVBQUVFLFNBQVM7SUFDekQsTUFBTUMsYUFBYWIsT0FBT2MsSUFBSSxDQUFDSixnQkFBZ0JLLE1BQU0sS0FBSztJQUMxRCxJQUFJRixZQUFZO1FBQ1osMEVBQTBFO1FBQzFFLE9BQU87WUFDSEo7WUFDQUc7U0FDSDtJQUNMO0lBQ0EsSUFBSSxNQUFNSSxPQUFPTixlQUFlO1FBQzVCLE1BQU0sQ0FBQ08sU0FBU0Msb0JBQW9CLEdBQUdSLGNBQWMsQ0FBQ00sSUFBSTtRQUMxRCxNQUFNRyxrQkFBa0JWLE1BQU1DLGNBQWMsQ0FBQ0wsR0FBRyxDQUFDVztRQUNqRCxJQUFJLENBQUNHLGlCQUFpQjtZQUNsQjtRQUNKO1FBQ0EsTUFBTUMsV0FBVyxDQUFDLEdBQUdiLHNCQUFzQmMsb0JBQW9CLEVBQUVKO1FBQ2pFLE1BQU1LLFlBQVlILGdCQUFnQmQsR0FBRyxDQUFDZTtRQUN0QyxJQUFJLENBQUNFLFdBQVc7WUFDWjtRQUNKO1FBQ0EsTUFBTUMsT0FBT1osb0JBQW9CVyxXQUFXSixxQkFBcUJOLFlBQVksTUFBTVE7UUFDbkYsSUFBSUcsTUFBTTtZQUNOLE9BQU9BO1FBQ1g7SUFDSjtJQUNBLE9BQU87QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPckIsUUFBUXNCLE9BQU8sS0FBSyxjQUFlLE9BQU90QixRQUFRc0IsT0FBTyxLQUFLLFlBQVl0QixRQUFRc0IsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPdEIsUUFBUXNCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt6QixPQUFPQyxjQUFjLENBQUNDLFFBQVFzQixPQUFPLEVBQUUsY0FBYztRQUFFckIsT0FBTztJQUFLO0lBQ25FSCxPQUFPMEIsTUFBTSxDQUFDeEIsUUFBUXNCLE9BQU8sRUFBRXRCO0lBQy9CeUIsT0FBT3pCLE9BQU8sR0FBR0EsUUFBUXNCLE9BQU87QUFDbEMsRUFFQSw4Q0FBOEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9maW5kLWhlYWQtaW4tY2FjaGUuanM/NzVjNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbmRIZWFkSW5DYWNoZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZmluZEhlYWRJbkNhY2hlO1xuICAgIH1cbn0pO1xuY29uc3QgX2NyZWF0ZXJvdXRlcmNhY2hla2V5ID0gcmVxdWlyZShcIi4uL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5XCIpO1xuZnVuY3Rpb24gZmluZEhlYWRJbkNhY2hlKGNhY2hlLCBwYXJhbGxlbFJvdXRlcykge1xuICAgIHJldHVybiBmaW5kSGVhZEluQ2FjaGVJbXBsKGNhY2hlLCBwYXJhbGxlbFJvdXRlcywgXCJcIik7XG59XG5mdW5jdGlvbiBmaW5kSGVhZEluQ2FjaGVJbXBsKGNhY2hlLCBwYXJhbGxlbFJvdXRlcywga2V5UHJlZml4KSB7XG4gICAgY29uc3QgaXNMYXN0SXRlbSA9IE9iamVjdC5rZXlzKHBhcmFsbGVsUm91dGVzKS5sZW5ndGggPT09IDA7XG4gICAgaWYgKGlzTGFzdEl0ZW0pIHtcbiAgICAgICAgLy8gUmV0dXJucyB0aGUgZW50aXJlIENhY2hlIE5vZGUgb2YgdGhlIHNlZ21lbnQgd2hvc2UgaGVhZCB3ZSB3aWxsIHJlbmRlci5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGNhY2hlLFxuICAgICAgICAgICAga2V5UHJlZml4XG4gICAgICAgIF07XG4gICAgfVxuICAgIGZvcihjb25zdCBrZXkgaW4gcGFyYWxsZWxSb3V0ZXMpe1xuICAgICAgICBjb25zdCBbc2VnbWVudCwgY2hpbGRQYXJhbGxlbFJvdXRlc10gPSBwYXJhbGxlbFJvdXRlc1trZXldO1xuICAgICAgICBjb25zdCBjaGlsZFNlZ21lbnRNYXAgPSBjYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFjaGlsZFNlZ21lbnRNYXApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gKDAsIF9jcmVhdGVyb3V0ZXJjYWNoZWtleS5jcmVhdGVSb3V0ZXJDYWNoZUtleSkoc2VnbWVudCk7XG4gICAgICAgIGNvbnN0IGNhY2hlTm9kZSA9IGNoaWxkU2VnbWVudE1hcC5nZXQoY2FjaGVLZXkpO1xuICAgICAgICBpZiAoIWNhY2hlTm9kZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbSA9IGZpbmRIZWFkSW5DYWNoZUltcGwoY2FjaGVOb2RlLCBjaGlsZFBhcmFsbGVsUm91dGVzLCBrZXlQcmVmaXggKyBcIi9cIiArIGNhY2hlS2V5KTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1maW5kLWhlYWQtaW4tY2FjaGUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImZpbmRIZWFkSW5DYWNoZSIsIl9jcmVhdGVyb3V0ZXJjYWNoZWtleSIsInJlcXVpcmUiLCJjYWNoZSIsInBhcmFsbGVsUm91dGVzIiwiZmluZEhlYWRJbkNhY2hlSW1wbCIsImtleVByZWZpeCIsImlzTGFzdEl0ZW0iLCJrZXlzIiwibGVuZ3RoIiwia2V5Iiwic2VnbWVudCIsImNoaWxkUGFyYWxsZWxSb3V0ZXMiLCJjaGlsZFNlZ21lbnRNYXAiLCJjYWNoZUtleSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwiY2FjaGVOb2RlIiwiaXRlbSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js": +/*!***********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js ***! + \***********************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSegmentValue\", ({\n enumerable: true,\n get: function() {\n return getSegmentValue;\n }\n}));\nfunction getSegmentValue(segment) {\n return Array.isArray(segment) ? segment[1] : segment;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=get-segment-value.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZ2V0LXNlZ21lbnQtdmFsdWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILG1EQUFrRDtJQUM5Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLGdCQUFnQkMsT0FBTztJQUM1QixPQUFPQyxNQUFNQyxPQUFPLENBQUNGLFdBQVdBLE9BQU8sQ0FBQyxFQUFFLEdBQUdBO0FBQ2pEO0FBRUEsSUFBSSxDQUFDLE9BQU9MLFFBQVFRLE9BQU8sS0FBSyxjQUFlLE9BQU9SLFFBQVFRLE9BQU8sS0FBSyxZQUFZUixRQUFRUSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9SLFFBQVFRLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktYLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUVEsT0FBTyxFQUFFLGNBQWM7UUFBRVAsT0FBTztJQUFLO0lBQ25FSCxPQUFPWSxNQUFNLENBQUNWLFFBQVFRLE9BQU8sRUFBRVI7SUFDL0JXLE9BQU9YLE9BQU8sR0FBR0EsUUFBUVEsT0FBTztBQUNsQyxFQUVBLDZDQUE2QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2dldC1zZWdtZW50LXZhbHVlLmpzPzRlNjMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTZWdtZW50VmFsdWVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFNlZ21lbnRWYWx1ZTtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGdldFNlZ21lbnRWYWx1ZShzZWdtZW50KSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc2VnbWVudCkgPyBzZWdtZW50WzFdIDogc2VnbWVudDtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0LXNlZ21lbnQtdmFsdWUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImdldFNlZ21lbnRWYWx1ZSIsInNlZ21lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js": +/*!**********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js ***! + \**********************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n handleExternalUrl: function() {\n return handleExternalUrl;\n },\n navigateReducer: function() {\n return navigateReducer;\n }\n});\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _invalidatecachebelowflightsegmentpath = __webpack_require__(/*! ../invalidate-cache-below-flight-segmentpath */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js\");\nconst _fillcachewithdataproperty = __webpack_require__(/*! ../fill-cache-with-data-property */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-cache-with-data-property.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _shouldhardnavigate = __webpack_require__(/*! ../should-hard-navigate */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _routerreducertypes = __webpack_require__(/*! ../router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _getprefetchcacheentrystatus = __webpack_require__(/*! ../get-prefetch-cache-entry-status */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/get-prefetch-cache-entry-status.js\");\nconst _pruneprefetchcache = __webpack_require__(/*! ./prune-prefetch-cache */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prune-prefetch-cache.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./prefetch-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _segment = __webpack_require__(/*! ../../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nconst _pprnavigations = __webpack_require__(/*! ../ppr-navigations */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\");\nconst _createprefetchcachekey = __webpack_require__(/*! ./create-prefetch-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/create-prefetch-cache-key.js\");\nfunction handleExternalUrl(state, mutable, url, pendingPush) {\n mutable.mpaNavigation = true;\n mutable.canonicalUrl = url;\n mutable.pendingPush = pendingPush;\n mutable.scrollableSegments = undefined;\n return (0, _handlemutable.handleMutable)(state, mutable);\n}\nfunction generateSegmentsFromPatch(flightRouterPatch) {\n const segments = [];\n const [segment, parallelRoutes] = flightRouterPatch;\n if (Object.keys(parallelRoutes).length === 0) {\n return [\n [\n segment\n ]\n ];\n }\n for (const [parallelRouteKey, parallelRoute] of Object.entries(parallelRoutes)){\n for (const childSegment of generateSegmentsFromPatch(parallelRoute)){\n // If the segment is empty, it means we are at the root of the tree\n if (segment === \"\") {\n segments.push([\n parallelRouteKey,\n ...childSegment\n ]);\n } else {\n segments.push([\n segment,\n parallelRouteKey,\n ...childSegment\n ]);\n }\n }\n }\n return segments;\n}\nfunction addRefetchToLeafSegments(newCache, currentCache, flightSegmentPath, treePatch, data) {\n let appliedPatch = false;\n newCache.rsc = currentCache.rsc;\n newCache.prefetchRsc = currentCache.prefetchRsc;\n newCache.parallelRoutes = new Map(currentCache.parallelRoutes);\n const segmentPathsToFill = generateSegmentsFromPatch(treePatch).map((segment)=>[\n ...flightSegmentPath,\n ...segment\n ]);\n for (const segmentPaths of segmentPathsToFill){\n (0, _fillcachewithdataproperty.fillCacheWithDataProperty)(newCache, currentCache, segmentPaths, data);\n appliedPatch = true;\n }\n return appliedPatch;\n}\nconst navigateReducer = false ? 0 : navigateReducer_noPPR;\n// This is the implementation when PPR is disabled. We can assume its behavior\n// is relatively stable because it's been running in production for a while.\nfunction navigateReducer_noPPR(state, action) {\n const { url, isExternalUrl, navigateType, shouldScroll } = action;\n const mutable = {};\n const { hash } = url;\n const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n const pendingPush = navigateType === \"push\";\n // we want to prune the prefetch cache on every navigation to avoid it growing too large\n (0, _pruneprefetchcache.prunePrefetchCache)(state.prefetchCache);\n mutable.preserveCustomHistoryState = false;\n if (isExternalUrl) {\n return handleExternalUrl(state, mutable, url.toString(), pendingPush);\n }\n const prefetchCacheKey = (0, _createprefetchcachekey.createPrefetchCacheKey)(url, state.nextUrl);\n let prefetchValues = state.prefetchCache.get(prefetchCacheKey);\n // If we don't have a prefetch value, we need to create one\n if (!prefetchValues) {\n const data = (0, _fetchserverresponse.fetchServerResponse)(url, state.tree, state.nextUrl, state.buildId, // in order to simulate the behavior of the prefetch cache\n true ? _routerreducertypes.PrefetchKind.AUTO : 0);\n const newPrefetchValue = {\n data,\n // this will make sure that the entry will be discarded after 30s\n kind: true ? _routerreducertypes.PrefetchKind.AUTO : 0,\n prefetchTime: Date.now(),\n treeAtTimeOfPrefetch: state.tree,\n lastUsedTime: null\n };\n state.prefetchCache.set(prefetchCacheKey, newPrefetchValue);\n prefetchValues = newPrefetchValue;\n }\n const prefetchEntryCacheStatus = (0, _getprefetchcacheentrystatus.getPrefetchEntryCacheStatus)(prefetchValues);\n // The one before last item is the router state tree patch\n const { treeAtTimeOfPrefetch, data } = prefetchValues;\n _prefetchreducer.prefetchQueue.bump(data);\n return data.then((param)=>{\n let [flightData, canonicalUrlOverride, postponed] = param;\n // we only want to mark this once\n if (prefetchValues && !prefetchValues.lastUsedTime) {\n // important: we should only mark the cache node as dirty after we unsuspend from the call above\n prefetchValues.lastUsedTime = Date.now();\n }\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === \"string\") {\n return handleExternalUrl(state, mutable, flightData, pendingPush);\n }\n let currentTree = state.tree;\n let currentCache = state.cache;\n let scrollableSegments = [];\n for (const flightDataPath of flightData){\n const flightSegmentPath = flightDataPath.slice(0, -4);\n // The one before last item is the router state tree patch\n const treePatch = flightDataPath.slice(-3)[0];\n // TODO-APP: remove ''\n const flightSegmentPathWithLeadingEmpty = [\n \"\",\n ...flightSegmentPath\n ];\n // Create new tree based on the flightSegmentPath and router state patch\n let newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)(flightSegmentPathWithLeadingEmpty, currentTree, treePatch);\n // If the tree patch can't be applied to the current tree then we use the tree at time of prefetch\n // TODO-APP: This should instead fill in the missing pieces in `currentTree` with the data from `treeAtTimeOfPrefetch`, then apply the patch.\n if (newTree === null) {\n newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)(flightSegmentPathWithLeadingEmpty, treeAtTimeOfPrefetch, treePatch);\n }\n if (newTree !== null) {\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return handleExternalUrl(state, mutable, href, pendingPush);\n }\n const cache = (0, _approuter.createEmptyCacheNode)();\n let applied = (0, _applyflightdata.applyFlightData)(currentCache, cache, flightDataPath, (prefetchValues == null ? void 0 : prefetchValues.kind) === \"auto\" && prefetchEntryCacheStatus === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.reusable);\n if (!applied && prefetchEntryCacheStatus === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.stale || // TODO-APP: If the prefetch was postponed, we don't want to apply it\n // until we land router changes to handle the postponed case.\n postponed) {\n applied = addRefetchToLeafSegments(cache, currentCache, flightSegmentPath, treePatch, ()=>(0, _fetchserverresponse.fetchServerResponse)(url, currentTree, state.nextUrl, state.buildId));\n }\n const hardNavigate = (0, _shouldhardnavigate.shouldHardNavigate)(flightSegmentPathWithLeadingEmpty, currentTree);\n if (hardNavigate) {\n // Copy rsc for the root node of the cache.\n cache.rsc = currentCache.rsc;\n cache.prefetchRsc = currentCache.prefetchRsc;\n (0, _invalidatecachebelowflightsegmentpath.invalidateCacheBelowFlightSegmentPath)(cache, currentCache, flightSegmentPath);\n // Ensure the existing cache value is used when the cache was not invalidated.\n mutable.cache = cache;\n } else if (applied) {\n mutable.cache = cache;\n }\n currentCache = cache;\n currentTree = newTree;\n for (const subSegment of generateSegmentsFromPatch(treePatch)){\n const scrollableSegmentPath = [\n ...flightSegmentPath,\n ...subSegment\n ];\n // Filter out the __DEFAULT__ paths as they shouldn't be scrolled to in this case.\n if (scrollableSegmentPath[scrollableSegmentPath.length - 1] !== _segment.DEFAULT_SEGMENT_KEY) {\n scrollableSegments.push(scrollableSegmentPath);\n }\n }\n }\n }\n mutable.patchedTree = currentTree;\n mutable.canonicalUrl = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : href;\n mutable.pendingPush = pendingPush;\n mutable.scrollableSegments = scrollableSegments;\n mutable.hashFragment = hash;\n mutable.shouldScroll = shouldScroll;\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, ()=>state);\n}\n// This is the experimental PPR implementation. It's closer to the behavior we\n// want, but is likelier to include accidental regressions because it rewrites\n// existing functionality.\nfunction navigateReducer_PPR(state, action) {\n const { url, isExternalUrl, navigateType, shouldScroll } = action;\n const mutable = {};\n const { hash } = url;\n const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n const pendingPush = navigateType === \"push\";\n // we want to prune the prefetch cache on every navigation to avoid it growing too large\n (0, _pruneprefetchcache.prunePrefetchCache)(state.prefetchCache);\n mutable.preserveCustomHistoryState = false;\n if (isExternalUrl) {\n return handleExternalUrl(state, mutable, url.toString(), pendingPush);\n }\n const prefetchCacheKey = (0, _createprefetchcachekey.createPrefetchCacheKey)(url, state.nextUrl);\n let prefetchValues = state.prefetchCache.get(prefetchCacheKey);\n // If we don't have a prefetch value, we need to create one\n if (!prefetchValues) {\n const data = (0, _fetchserverresponse.fetchServerResponse)(url, state.tree, state.nextUrl, state.buildId, // in order to simulate the behavior of the prefetch cache\n true ? _routerreducertypes.PrefetchKind.AUTO : 0);\n const newPrefetchValue = {\n data,\n // this will make sure that the entry will be discarded after 30s\n kind: true ? _routerreducertypes.PrefetchKind.AUTO : 0,\n prefetchTime: Date.now(),\n treeAtTimeOfPrefetch: state.tree,\n lastUsedTime: null\n };\n state.prefetchCache.set(prefetchCacheKey, newPrefetchValue);\n prefetchValues = newPrefetchValue;\n }\n const prefetchEntryCacheStatus = (0, _getprefetchcacheentrystatus.getPrefetchEntryCacheStatus)(prefetchValues);\n // The one before last item is the router state tree patch\n const { treeAtTimeOfPrefetch, data } = prefetchValues;\n _prefetchreducer.prefetchQueue.bump(data);\n return data.then((param)=>{\n let [flightData, canonicalUrlOverride, _postponed] = param;\n // we only want to mark this once\n if (prefetchValues && !prefetchValues.lastUsedTime) {\n // important: we should only mark the cache node as dirty after we unsuspend from the call above\n prefetchValues.lastUsedTime = Date.now();\n }\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === \"string\") {\n return handleExternalUrl(state, mutable, flightData, pendingPush);\n }\n let currentTree = state.tree;\n let currentCache = state.cache;\n let scrollableSegments = [];\n // TODO: In practice, this is always a single item array. We probably\n // aren't going to every send multiple segments, at least not in this\n // format. So we could remove the extra wrapper for now until\n // that settles.\n for (const flightDataPath of flightData){\n const flightSegmentPath = flightDataPath.slice(0, -4);\n // The one before last item is the router state tree patch\n const treePatch = flightDataPath.slice(-3)[0];\n // TODO-APP: remove ''\n const flightSegmentPathWithLeadingEmpty = [\n \"\",\n ...flightSegmentPath\n ];\n // Create new tree based on the flightSegmentPath and router state patch\n let newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)(flightSegmentPathWithLeadingEmpty, currentTree, treePatch);\n // If the tree patch can't be applied to the current tree then we use the tree at time of prefetch\n // TODO-APP: This should instead fill in the missing pieces in `currentTree` with the data from `treeAtTimeOfPrefetch`, then apply the patch.\n if (newTree === null) {\n newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)(flightSegmentPathWithLeadingEmpty, treeAtTimeOfPrefetch, treePatch);\n }\n if (newTree !== null) {\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return handleExternalUrl(state, mutable, href, pendingPush);\n }\n if (// will always send back a static response that's rendered from\n // the root. If for some reason it doesn't, we fall back to the\n // non-PPR implementation.\n // TODO: We should get rid of the else branch and do all navigations\n // via updateCacheNodeOnNavigation. The current structure is just\n // an incremental step.\n flightDataPath.length === 3) {\n const prefetchedTree = flightDataPath[0];\n const seedData = flightDataPath[1];\n const head = flightDataPath[2];\n // Check whether the prefetched data is stale. If so, we'll\n // ignore it and wait for the dynamic data to stream in before\n // showing new segments.\n const isPrefetchStale = prefetchEntryCacheStatus === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.stale;\n const task = (0, _pprnavigations.updateCacheNodeOnNavigation)(currentCache, currentTree, prefetchedTree, seedData, head, isPrefetchStale);\n if (task !== null && task.node !== null) {\n // We've created a new Cache Node tree that contains a prefetched\n // version of the next page. This can be rendered instantly.\n // Use the tree computed by updateCacheNodeOnNavigation instead\n // of the one computed by applyRouterStatePatchToTreeSkipDefault.\n // TODO: We should remove applyRouterStatePatchToTreeSkipDefault\n // from the PPR path entirely.\n const patchedRouterState = task.route;\n newTree = patchedRouterState;\n const newCache = task.node;\n // The prefetched tree has dynamic holes in it. We initiate a\n // dynamic request to fill them in.\n //\n // Do not block on the result. We'll immediately render the Cache\n // Node tree and suspend on the dynamic parts. When the request\n // comes in, we'll fill in missing data and ping React to\n // re-render. Unlike the lazy fetching model in the non-PPR\n // implementation, this is modeled as a single React update +\n // streaming, rather than multiple top-level updates. (However,\n // even in the new model, we'll still need to sometimes update the\n // root multiple times per navigation, like if the server sends us\n // a different response than we expected. For now, we revert back\n // to the lazy fetching mechanism in that case.)\n (0, _pprnavigations.listenForDynamicRequest)(task, (0, _fetchserverresponse.fetchServerResponse)(url, currentTree, state.nextUrl, state.buildId));\n mutable.cache = newCache;\n } else {\n // Nothing changed, so reuse the old cache.\n // TODO: What if the head changed but not any of the segment data?\n // Is that possible? If so, we should clone the whole tree and\n // update the head.\n newTree = prefetchedTree;\n }\n } else {\n // The static response does not include any dynamic holes, so\n // there's no need to do a second request.\n // TODO: As an incremental step this just reverts back to the\n // non-PPR implementation. We can simplify this branch further,\n // given that PPR prefetches are always static and return the whole\n // tree. Or in the meantime we could factor it out into a\n // separate function.\n const cache = (0, _approuter.createEmptyCacheNode)();\n let applied = (0, _applyflightdata.applyFlightData)(currentCache, cache, flightDataPath, (prefetchValues == null ? void 0 : prefetchValues.kind) === \"auto\" && prefetchEntryCacheStatus === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.reusable);\n if (!applied && prefetchEntryCacheStatus === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.stale) {\n applied = addRefetchToLeafSegments(cache, currentCache, flightSegmentPath, treePatch, ()=>(0, _fetchserverresponse.fetchServerResponse)(url, currentTree, state.nextUrl, state.buildId));\n }\n const hardNavigate = (0, _shouldhardnavigate.shouldHardNavigate)(flightSegmentPathWithLeadingEmpty, currentTree);\n if (hardNavigate) {\n // Copy rsc for the root node of the cache.\n cache.rsc = currentCache.rsc;\n cache.prefetchRsc = currentCache.prefetchRsc;\n (0, _invalidatecachebelowflightsegmentpath.invalidateCacheBelowFlightSegmentPath)(cache, currentCache, flightSegmentPath);\n // Ensure the existing cache value is used when the cache was not invalidated.\n mutable.cache = cache;\n } else if (applied) {\n mutable.cache = cache;\n }\n }\n currentTree = newTree;\n for (const subSegment of generateSegmentsFromPatch(treePatch)){\n const scrollableSegmentPath = [\n ...flightSegmentPath,\n ...subSegment\n ];\n // Filter out the __DEFAULT__ paths as they shouldn't be scrolled to in this case.\n if (scrollableSegmentPath[scrollableSegmentPath.length - 1] !== _segment.DEFAULT_SEGMENT_KEY) {\n scrollableSegments.push(scrollableSegmentPath);\n }\n }\n }\n }\n mutable.patchedTree = currentTree;\n mutable.canonicalUrl = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : href;\n mutable.pendingPush = pendingPush;\n mutable.scrollableSegments = scrollableSegments;\n mutable.hashFragment = hash;\n mutable.shouldScroll = shouldScroll;\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, ()=>state);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=navigate-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvbmF2aWdhdGUtcmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyx1QkFBdUJDLG1CQUFPQSxDQUFDLHdJQUEwQjtBQUMvRCxNQUFNQyxxQkFBcUJELG1CQUFPQSxDQUFDLHNJQUF5QjtBQUM1RCxNQUFNRSx5Q0FBeUNGLG1CQUFPQSxDQUFDLGdMQUE4QztBQUNyRyxNQUFNRyw2QkFBNkJILG1CQUFPQSxDQUFDLHdKQUFrQztBQUM3RSxNQUFNSSwrQkFBK0JKLG1CQUFPQSxDQUFDLDhKQUFxQztBQUNsRixNQUFNSyxzQkFBc0JMLG1CQUFPQSxDQUFDLHNJQUF5QjtBQUM3RCxNQUFNTSwrQkFBK0JOLG1CQUFPQSxDQUFDLDhKQUFxQztBQUNsRixNQUFNTyxzQkFBc0JQLG1CQUFPQSxDQUFDLHNJQUF5QjtBQUM3RCxNQUFNUSxpQkFBaUJSLG1CQUFPQSxDQUFDLDBIQUFtQjtBQUNsRCxNQUFNUyxtQkFBbUJULG1CQUFPQSxDQUFDLGdJQUFzQjtBQUN2RCxNQUFNVSwrQkFBK0JWLG1CQUFPQSxDQUFDLDRKQUFvQztBQUNqRixNQUFNVyxzQkFBc0JYLG1CQUFPQSxDQUFDLDhJQUF3QjtBQUM1RCxNQUFNWSxtQkFBbUJaLG1CQUFPQSxDQUFDLHNJQUFvQjtBQUNyRCxNQUFNYSxhQUFhYixtQkFBT0EsQ0FBQyxzR0FBa0I7QUFDN0MsTUFBTWMsV0FBV2QsbUJBQU9BLENBQUMsMEdBQWdDO0FBQ3pELE1BQU1lLGtCQUFrQmYsbUJBQU9BLENBQUMsNEhBQW9CO0FBQ3BELE1BQU1nQiwwQkFBMEJoQixtQkFBT0EsQ0FBQyx3SkFBNkI7QUFDckUsU0FBU1Qsa0JBQWtCMEIsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLEdBQUcsRUFBRUMsV0FBVztJQUN2REYsUUFBUUcsYUFBYSxHQUFHO0lBQ3hCSCxRQUFRSSxZQUFZLEdBQUdIO0lBQ3ZCRCxRQUFRRSxXQUFXLEdBQUdBO0lBQ3RCRixRQUFRSyxrQkFBa0IsR0FBR0M7SUFDN0IsT0FBTyxDQUFDLEdBQUdoQixlQUFlaUIsYUFBYSxFQUFFUixPQUFPQztBQUNwRDtBQUNBLFNBQVNRLDBCQUEwQkMsaUJBQWlCO0lBQ2hELE1BQU1DLFdBQVcsRUFBRTtJQUNuQixNQUFNLENBQUNDLFNBQVNDLGVBQWUsR0FBR0g7SUFDbEMsSUFBSXpDLE9BQU82QyxJQUFJLENBQUNELGdCQUFnQkUsTUFBTSxLQUFLLEdBQUc7UUFDMUMsT0FBTztZQUNIO2dCQUNJSDthQUNIO1NBQ0o7SUFDTDtJQUNBLEtBQUssTUFBTSxDQUFDSSxrQkFBa0JDLGNBQWMsSUFBSWhELE9BQU9pRCxPQUFPLENBQUNMLGdCQUFnQjtRQUMzRSxLQUFLLE1BQU1NLGdCQUFnQlYsMEJBQTBCUSxlQUFlO1lBQ2hFLG1FQUFtRTtZQUNuRSxJQUFJTCxZQUFZLElBQUk7Z0JBQ2hCRCxTQUFTUyxJQUFJLENBQUM7b0JBQ1ZKO3VCQUNHRztpQkFDTjtZQUNMLE9BQU87Z0JBQ0hSLFNBQVNTLElBQUksQ0FBQztvQkFDVlI7b0JBQ0FJO3VCQUNHRztpQkFDTjtZQUNMO1FBQ0o7SUFDSjtJQUNBLE9BQU9SO0FBQ1g7QUFDQSxTQUFTVSx5QkFBeUJDLFFBQVEsRUFBRUMsWUFBWSxFQUFFQyxpQkFBaUIsRUFBRUMsU0FBUyxFQUFFQyxJQUFJO0lBQ3hGLElBQUlDLGVBQWU7SUFDbkJMLFNBQVNNLEdBQUcsR0FBR0wsYUFBYUssR0FBRztJQUMvQk4sU0FBU08sV0FBVyxHQUFHTixhQUFhTSxXQUFXO0lBQy9DUCxTQUFTVCxjQUFjLEdBQUcsSUFBSWlCLElBQUlQLGFBQWFWLGNBQWM7SUFDN0QsTUFBTWtCLHFCQUFxQnRCLDBCQUEwQmdCLFdBQVdPLEdBQUcsQ0FBQyxDQUFDcEIsVUFBVTtlQUNwRVk7ZUFDQVo7U0FDTjtJQUNMLEtBQUssTUFBTXFCLGdCQUFnQkYsbUJBQW1CO1FBQ3pDLElBQUc3QywyQkFBMkJnRCx5QkFBeUIsRUFBRVosVUFBVUMsY0FBY1UsY0FBY1A7UUFDaEdDLGVBQWU7SUFDbkI7SUFDQSxPQUFPQTtBQUNYO0FBQ0EsTUFBTXBELGtCQUFrQjRELE1BQXNCLEdBQUdHLENBQW1CQSxHQUFHQztBQUN2RSw4RUFBOEU7QUFDOUUsNEVBQTRFO0FBQzVFLFNBQVNBLHNCQUFzQnZDLEtBQUssRUFBRXdDLE1BQU07SUFDeEMsTUFBTSxFQUFFdEMsR0FBRyxFQUFFdUMsYUFBYSxFQUFFQyxZQUFZLEVBQUVDLFlBQVksRUFBRSxHQUFHSDtJQUMzRCxNQUFNdkMsVUFBVSxDQUFDO0lBQ2pCLE1BQU0sRUFBRTJDLElBQUksRUFBRSxHQUFHMUM7SUFDakIsTUFBTTJDLE9BQU8sQ0FBQyxHQUFHN0QsbUJBQW1COEQsaUJBQWlCLEVBQUU1QztJQUN2RCxNQUFNQyxjQUFjdUMsaUJBQWlCO0lBQ3JDLHdGQUF3RjtJQUN2RixJQUFHaEQsb0JBQW9CcUQsa0JBQWtCLEVBQUUvQyxNQUFNZ0QsYUFBYTtJQUMvRC9DLFFBQVFnRCwwQkFBMEIsR0FBRztJQUNyQyxJQUFJUixlQUFlO1FBQ2YsT0FBT25FLGtCQUFrQjBCLE9BQU9DLFNBQVNDLElBQUlnRCxRQUFRLElBQUkvQztJQUM3RDtJQUNBLE1BQU1nRCxtQkFBbUIsQ0FBQyxHQUFHcEQsd0JBQXdCcUQsc0JBQXNCLEVBQUVsRCxLQUFLRixNQUFNcUQsT0FBTztJQUMvRixJQUFJQyxpQkFBaUJ0RCxNQUFNZ0QsYUFBYSxDQUFDbkUsR0FBRyxDQUFDc0U7SUFDN0MsMkRBQTJEO0lBQzNELElBQUksQ0FBQ0csZ0JBQWdCO1FBQ2pCLE1BQU01QixPQUFPLENBQUMsR0FBRzVDLHFCQUFxQnlFLG1CQUFtQixFQUFFckQsS0FBS0YsTUFBTXdELElBQUksRUFBRXhELE1BQU1xRCxPQUFPLEVBQUVyRCxNQUFNeUQsT0FBTyxFQUN4RywwREFBMEQ7UUE5R2xFLEtBK0c4QyxHQUFHbkUsb0JBQW9Cb0UsWUFBWSxDQUFDQyxJQUFJLEdBQUdwRCxDQUFTQTtRQUMxRixNQUFNcUQsbUJBQW1CO1lBQ3JCbEM7WUFDQSxpRUFBaUU7WUFDakVtQyxNQUFNMUIsS0FBc0MsR0FBRzdDLG9CQUFvQm9FLFlBQVksQ0FBQ0MsSUFBSSxHQUFHckUsQ0FBMEM7WUFDakl5RSxjQUFjQyxLQUFLQyxHQUFHO1lBQ3RCQyxzQkFBc0JsRSxNQUFNd0QsSUFBSTtZQUNoQ1csY0FBYztRQUNsQjtRQUNBbkUsTUFBTWdELGFBQWEsQ0FBQ29CLEdBQUcsQ0FBQ2pCLGtCQUFrQlM7UUFDMUNOLGlCQUFpQk07SUFDckI7SUFDQSxNQUFNUywyQkFBMkIsQ0FBQyxHQUFHNUUsNkJBQTZCNkUsMkJBQTJCLEVBQUVoQjtJQUMvRiwwREFBMEQ7SUFDMUQsTUFBTSxFQUFFWSxvQkFBb0IsRUFBRXhDLElBQUksRUFBRSxHQUFHNEI7SUFDdkMzRCxpQkFBaUI0RSxhQUFhLENBQUNDLElBQUksQ0FBQzlDO0lBQ3BDLE9BQU9BLEtBQUsrQyxJQUFJLENBQUMsQ0FBQ0M7UUFDZCxJQUFJLENBQUNDLFlBQVlDLHNCQUFzQkMsVUFBVSxHQUFHSDtRQUNwRCxpQ0FBaUM7UUFDakMsSUFBSXBCLGtCQUFrQixDQUFDQSxlQUFlYSxZQUFZLEVBQUU7WUFDaEQsZ0dBQWdHO1lBQ2hHYixlQUFlYSxZQUFZLEdBQUdILEtBQUtDLEdBQUc7UUFDMUM7UUFDQSw0REFBNEQ7UUFDNUQsSUFBSSxPQUFPVSxlQUFlLFVBQVU7WUFDaEMsT0FBT3JHLGtCQUFrQjBCLE9BQU9DLFNBQVMwRSxZQUFZeEU7UUFDekQ7UUFDQSxJQUFJMkUsY0FBYzlFLE1BQU13RCxJQUFJO1FBQzVCLElBQUlqQyxlQUFldkIsTUFBTStFLEtBQUs7UUFDOUIsSUFBSXpFLHFCQUFxQixFQUFFO1FBQzNCLEtBQUssTUFBTTBFLGtCQUFrQkwsV0FBVztZQUNwQyxNQUFNbkQsb0JBQW9Cd0QsZUFBZUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUNuRCwwREFBMEQ7WUFDMUQsTUFBTXhELFlBQVl1RCxlQUFlQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM3QyxzQkFBc0I7WUFDdEIsTUFBTUMsb0NBQW9DO2dCQUN0QzttQkFDRzFEO2FBQ047WUFDRCx3RUFBd0U7WUFDeEUsSUFBSTJELFVBQVUsQ0FBQyxHQUFHaEcsNkJBQTZCaUcsc0NBQXNDLEVBQ3JGRixtQ0FBbUNKLGFBQWFyRDtZQUNoRCxrR0FBa0c7WUFDbEcsNklBQTZJO1lBQzdJLElBQUkwRCxZQUFZLE1BQU07Z0JBQ2xCQSxVQUFVLENBQUMsR0FBR2hHLDZCQUE2QmlHLHNDQUFzQyxFQUNqRkYsbUNBQW1DaEIsc0JBQXNCekM7WUFDN0Q7WUFDQSxJQUFJMEQsWUFBWSxNQUFNO2dCQUNsQixJQUFJLENBQUMsR0FBRzlGLDZCQUE2QmdHLDJCQUEyQixFQUFFUCxhQUFhSyxVQUFVO29CQUNyRixPQUFPN0csa0JBQWtCMEIsT0FBT0MsU0FBUzRDLE1BQU0xQztnQkFDbkQ7Z0JBQ0EsTUFBTTRFLFFBQVEsQ0FBQyxHQUFHbkYsV0FBVzBGLG9CQUFvQjtnQkFDakQsSUFBSUMsVUFBVSxDQUFDLEdBQUcvRixpQkFBaUJnRyxlQUFlLEVBQUVqRSxjQUFjd0QsT0FBT0MsZ0JBQWdCLENBQUMxQixrQkFBa0IsT0FBTyxLQUFLLElBQUlBLGVBQWVPLElBQUksTUFBTSxVQUFVUSw2QkFBNkI1RSw2QkFBNkJnRyx3QkFBd0IsQ0FBQ0MsUUFBUTtnQkFDMVAsSUFBSSxDQUFDSCxXQUFXbEIsNkJBQTZCNUUsNkJBQTZCZ0csd0JBQXdCLENBQUNFLEtBQUssSUFBSSxxRUFBcUU7Z0JBQ2pMLDZEQUE2RDtnQkFDN0RkLFdBQVc7b0JBQ1BVLFVBQVVsRSx5QkFBeUIwRCxPQUFPeEQsY0FBY0MsbUJBQW1CQyxXQUMzRSxJQUFJLENBQUMsR0FBRzNDLHFCQUFxQnlFLG1CQUFtQixFQUFFckQsS0FBSzRFLGFBQWE5RSxNQUFNcUQsT0FBTyxFQUFFckQsTUFBTXlELE9BQU87Z0JBQ3BHO2dCQUNBLE1BQU1tQyxlQUFlLENBQUMsR0FBR3hHLG9CQUFvQnlHLGtCQUFrQixFQUMvRFgsbUNBQW1DSjtnQkFDbkMsSUFBSWMsY0FBYztvQkFDZCwyQ0FBMkM7b0JBQzNDYixNQUFNbkQsR0FBRyxHQUFHTCxhQUFhSyxHQUFHO29CQUM1Qm1ELE1BQU1sRCxXQUFXLEdBQUdOLGFBQWFNLFdBQVc7b0JBQzNDLElBQUc1Qyx1Q0FBdUM2RyxxQ0FBcUMsRUFBRWYsT0FBT3hELGNBQWNDO29CQUN2Ryw4RUFBOEU7b0JBQzlFdkIsUUFBUThFLEtBQUssR0FBR0E7Z0JBQ3BCLE9BQU8sSUFBSVEsU0FBUztvQkFDaEJ0RixRQUFROEUsS0FBSyxHQUFHQTtnQkFDcEI7Z0JBQ0F4RCxlQUFld0Q7Z0JBQ2ZELGNBQWNLO2dCQUNkLEtBQUssTUFBTVksY0FBY3RGLDBCQUEwQmdCLFdBQVc7b0JBQzFELE1BQU11RSx3QkFBd0I7MkJBQ3ZCeEU7MkJBQ0F1RTtxQkFDTjtvQkFDRCxrRkFBa0Y7b0JBQ2xGLElBQUlDLHFCQUFxQixDQUFDQSxzQkFBc0JqRixNQUFNLEdBQUcsRUFBRSxLQUFLbEIsU0FBU29HLG1CQUFtQixFQUFFO3dCQUMxRjNGLG1CQUFtQmMsSUFBSSxDQUFDNEU7b0JBQzVCO2dCQUNKO1lBQ0o7UUFDSjtRQUNBL0YsUUFBUWlHLFdBQVcsR0FBR3BCO1FBQ3RCN0UsUUFBUUksWUFBWSxHQUFHdUUsdUJBQXVCLENBQUMsR0FBRzVGLG1CQUFtQjhELGlCQUFpQixFQUFFOEIsd0JBQXdCL0I7UUFDaEg1QyxRQUFRRSxXQUFXLEdBQUdBO1FBQ3RCRixRQUFRSyxrQkFBa0IsR0FBR0E7UUFDN0JMLFFBQVFrRyxZQUFZLEdBQUd2RDtRQUN2QjNDLFFBQVEwQyxZQUFZLEdBQUdBO1FBQ3ZCLE9BQU8sQ0FBQyxHQUFHcEQsZUFBZWlCLGFBQWEsRUFBRVIsT0FBT0M7SUFDcEQsR0FBRyxJQUFJRDtBQUNYO0FBQ0EsOEVBQThFO0FBQzlFLDhFQUE4RTtBQUM5RSwwQkFBMEI7QUFDMUIsU0FBU3NDLG9CQUFvQnRDLEtBQUssRUFBRXdDLE1BQU07SUFDdEMsTUFBTSxFQUFFdEMsR0FBRyxFQUFFdUMsYUFBYSxFQUFFQyxZQUFZLEVBQUVDLFlBQVksRUFBRSxHQUFHSDtJQUMzRCxNQUFNdkMsVUFBVSxDQUFDO0lBQ2pCLE1BQU0sRUFBRTJDLElBQUksRUFBRSxHQUFHMUM7SUFDakIsTUFBTTJDLE9BQU8sQ0FBQyxHQUFHN0QsbUJBQW1COEQsaUJBQWlCLEVBQUU1QztJQUN2RCxNQUFNQyxjQUFjdUMsaUJBQWlCO0lBQ3JDLHdGQUF3RjtJQUN2RixJQUFHaEQsb0JBQW9CcUQsa0JBQWtCLEVBQUUvQyxNQUFNZ0QsYUFBYTtJQUMvRC9DLFFBQVFnRCwwQkFBMEIsR0FBRztJQUNyQyxJQUFJUixlQUFlO1FBQ2YsT0FBT25FLGtCQUFrQjBCLE9BQU9DLFNBQVNDLElBQUlnRCxRQUFRLElBQUkvQztJQUM3RDtJQUNBLE1BQU1nRCxtQkFBbUIsQ0FBQyxHQUFHcEQsd0JBQXdCcUQsc0JBQXNCLEVBQUVsRCxLQUFLRixNQUFNcUQsT0FBTztJQUMvRixJQUFJQyxpQkFBaUJ0RCxNQUFNZ0QsYUFBYSxDQUFDbkUsR0FBRyxDQUFDc0U7SUFDN0MsMkRBQTJEO0lBQzNELElBQUksQ0FBQ0csZ0JBQWdCO1FBQ2pCLE1BQU01QixPQUFPLENBQUMsR0FBRzVDLHFCQUFxQnlFLG1CQUFtQixFQUFFckQsS0FBS0YsTUFBTXdELElBQUksRUFBRXhELE1BQU1xRCxPQUFPLEVBQUVyRCxNQUFNeUQsT0FBTyxFQUN4RywwREFBMEQ7UUFsT2xFLEtBbU84QyxHQUFHbkUsb0JBQW9Cb0UsWUFBWSxDQUFDQyxJQUFJLEdBQUdwRCxDQUFTQTtRQUMxRixNQUFNcUQsbUJBQW1CO1lBQ3JCbEM7WUFDQSxpRUFBaUU7WUFDakVtQyxNQUFNMUIsS0FBc0MsR0FBRzdDLG9CQUFvQm9FLFlBQVksQ0FBQ0MsSUFBSSxHQUFHckUsQ0FBMEM7WUFDakl5RSxjQUFjQyxLQUFLQyxHQUFHO1lBQ3RCQyxzQkFBc0JsRSxNQUFNd0QsSUFBSTtZQUNoQ1csY0FBYztRQUNsQjtRQUNBbkUsTUFBTWdELGFBQWEsQ0FBQ29CLEdBQUcsQ0FBQ2pCLGtCQUFrQlM7UUFDMUNOLGlCQUFpQk07SUFDckI7SUFDQSxNQUFNUywyQkFBMkIsQ0FBQyxHQUFHNUUsNkJBQTZCNkUsMkJBQTJCLEVBQUVoQjtJQUMvRiwwREFBMEQ7SUFDMUQsTUFBTSxFQUFFWSxvQkFBb0IsRUFBRXhDLElBQUksRUFBRSxHQUFHNEI7SUFDdkMzRCxpQkFBaUI0RSxhQUFhLENBQUNDLElBQUksQ0FBQzlDO0lBQ3BDLE9BQU9BLEtBQUsrQyxJQUFJLENBQUMsQ0FBQ0M7UUFDZCxJQUFJLENBQUNDLFlBQVlDLHNCQUFzQndCLFdBQVcsR0FBRzFCO1FBQ3JELGlDQUFpQztRQUNqQyxJQUFJcEIsa0JBQWtCLENBQUNBLGVBQWVhLFlBQVksRUFBRTtZQUNoRCxnR0FBZ0c7WUFDaEdiLGVBQWVhLFlBQVksR0FBR0gsS0FBS0MsR0FBRztRQUMxQztRQUNBLDREQUE0RDtRQUM1RCxJQUFJLE9BQU9VLGVBQWUsVUFBVTtZQUNoQyxPQUFPckcsa0JBQWtCMEIsT0FBT0MsU0FBUzBFLFlBQVl4RTtRQUN6RDtRQUNBLElBQUkyRSxjQUFjOUUsTUFBTXdELElBQUk7UUFDNUIsSUFBSWpDLGVBQWV2QixNQUFNK0UsS0FBSztRQUM5QixJQUFJekUscUJBQXFCLEVBQUU7UUFDM0IscUVBQXFFO1FBQ3JFLHFFQUFxRTtRQUNyRSw2REFBNkQ7UUFDN0QsZ0JBQWdCO1FBQ2hCLEtBQUssTUFBTTBFLGtCQUFrQkwsV0FBVztZQUNwQyxNQUFNbkQsb0JBQW9Cd0QsZUFBZUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUNuRCwwREFBMEQ7WUFDMUQsTUFBTXhELFlBQVl1RCxlQUFlQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM3QyxzQkFBc0I7WUFDdEIsTUFBTUMsb0NBQW9DO2dCQUN0QzttQkFDRzFEO2FBQ047WUFDRCx3RUFBd0U7WUFDeEUsSUFBSTJELFVBQVUsQ0FBQyxHQUFHaEcsNkJBQTZCaUcsc0NBQXNDLEVBQ3JGRixtQ0FBbUNKLGFBQWFyRDtZQUNoRCxrR0FBa0c7WUFDbEcsNklBQTZJO1lBQzdJLElBQUkwRCxZQUFZLE1BQU07Z0JBQ2xCQSxVQUFVLENBQUMsR0FBR2hHLDZCQUE2QmlHLHNDQUFzQyxFQUNqRkYsbUNBQW1DaEIsc0JBQXNCekM7WUFDN0Q7WUFDQSxJQUFJMEQsWUFBWSxNQUFNO2dCQUNsQixJQUFJLENBQUMsR0FBRzlGLDZCQUE2QmdHLDJCQUEyQixFQUFFUCxhQUFhSyxVQUFVO29CQUNyRixPQUFPN0csa0JBQWtCMEIsT0FBT0MsU0FBUzRDLE1BQU0xQztnQkFDbkQ7Z0JBQ0EsSUFDQSwrREFBK0Q7Z0JBQy9ELCtEQUErRDtnQkFDL0QsMEJBQTBCO2dCQUMxQixvRUFBb0U7Z0JBQ3BFLGlFQUFpRTtnQkFDakUsdUJBQXVCO2dCQUN2QjZFLGVBQWVqRSxNQUFNLEtBQUssR0FBRztvQkFDekIsTUFBTXNGLGlCQUFpQnJCLGNBQWMsQ0FBQyxFQUFFO29CQUN4QyxNQUFNc0IsV0FBV3RCLGNBQWMsQ0FBQyxFQUFFO29CQUNsQyxNQUFNdUIsT0FBT3ZCLGNBQWMsQ0FBQyxFQUFFO29CQUM5QiwyREFBMkQ7b0JBQzNELDhEQUE4RDtvQkFDOUQsd0JBQXdCO29CQUN4QixNQUFNd0Isa0JBQWtCbkMsNkJBQTZCNUUsNkJBQTZCZ0csd0JBQXdCLENBQUNFLEtBQUs7b0JBQ2hILE1BQU1jLE9BQU8sQ0FBQyxHQUFHM0csZ0JBQWdCNEcsMkJBQTJCLEVBQUVuRixjQUFjdUQsYUFBYXVCLGdCQUFnQkMsVUFBVUMsTUFBTUM7b0JBQ3pILElBQUlDLFNBQVMsUUFBUUEsS0FBS0UsSUFBSSxLQUFLLE1BQU07d0JBQ3JDLGlFQUFpRTt3QkFDakUsNERBQTREO3dCQUM1RCwrREFBK0Q7d0JBQy9ELGlFQUFpRTt3QkFDakUsZ0VBQWdFO3dCQUNoRSw4QkFBOEI7d0JBQzlCLE1BQU1DLHFCQUFxQkgsS0FBS0ksS0FBSzt3QkFDckMxQixVQUFVeUI7d0JBQ1YsTUFBTXRGLFdBQVdtRixLQUFLRSxJQUFJO3dCQUMxQiw2REFBNkQ7d0JBQzdELG1DQUFtQzt3QkFDbkMsRUFBRTt3QkFDRixpRUFBaUU7d0JBQ2pFLCtEQUErRDt3QkFDL0QseURBQXlEO3dCQUN6RCwyREFBMkQ7d0JBQzNELDZEQUE2RDt3QkFDN0QsK0RBQStEO3dCQUMvRCxrRUFBa0U7d0JBQ2xFLGtFQUFrRTt3QkFDbEUsaUVBQWlFO3dCQUNqRSxnREFBZ0Q7d0JBQy9DLElBQUc3RyxnQkFBZ0JnSCx1QkFBdUIsRUFBRUwsTUFBTSxDQUFDLEdBQUczSCxxQkFBcUJ5RSxtQkFBbUIsRUFBRXJELEtBQUs0RSxhQUFhOUUsTUFBTXFELE9BQU8sRUFBRXJELE1BQU15RCxPQUFPO3dCQUMvSXhELFFBQVE4RSxLQUFLLEdBQUd6RDtvQkFDcEIsT0FBTzt3QkFDSCwyQ0FBMkM7d0JBQzNDLGtFQUFrRTt3QkFDbEUsOERBQThEO3dCQUM5RCxtQkFBbUI7d0JBQ25CNkQsVUFBVWtCO29CQUNkO2dCQUNKLE9BQU87b0JBQ0gsNkRBQTZEO29CQUM3RCwwQ0FBMEM7b0JBQzFDLDZEQUE2RDtvQkFDN0QsK0RBQStEO29CQUMvRCxtRUFBbUU7b0JBQ25FLHlEQUF5RDtvQkFDekQscUJBQXFCO29CQUNyQixNQUFNdEIsUUFBUSxDQUFDLEdBQUduRixXQUFXMEYsb0JBQW9CO29CQUNqRCxJQUFJQyxVQUFVLENBQUMsR0FBRy9GLGlCQUFpQmdHLGVBQWUsRUFBRWpFLGNBQWN3RCxPQUFPQyxnQkFBZ0IsQ0FBQzFCLGtCQUFrQixPQUFPLEtBQUssSUFBSUEsZUFBZU8sSUFBSSxNQUFNLFVBQVVRLDZCQUE2QjVFLDZCQUE2QmdHLHdCQUF3QixDQUFDQyxRQUFRO29CQUMxUCxJQUFJLENBQUNILFdBQVdsQiw2QkFBNkI1RSw2QkFBNkJnRyx3QkFBd0IsQ0FBQ0UsS0FBSyxFQUFFO3dCQUN0R0osVUFBVWxFLHlCQUF5QjBELE9BQU94RCxjQUFjQyxtQkFBbUJDLFdBQzNFLElBQUksQ0FBQyxHQUFHM0MscUJBQXFCeUUsbUJBQW1CLEVBQUVyRCxLQUFLNEUsYUFBYTlFLE1BQU1xRCxPQUFPLEVBQUVyRCxNQUFNeUQsT0FBTztvQkFDcEc7b0JBQ0EsTUFBTW1DLGVBQWUsQ0FBQyxHQUFHeEcsb0JBQW9CeUcsa0JBQWtCLEVBQy9EWCxtQ0FBbUNKO29CQUNuQyxJQUFJYyxjQUFjO3dCQUNkLDJDQUEyQzt3QkFDM0NiLE1BQU1uRCxHQUFHLEdBQUdMLGFBQWFLLEdBQUc7d0JBQzVCbUQsTUFBTWxELFdBQVcsR0FBR04sYUFBYU0sV0FBVzt3QkFDM0MsSUFBRzVDLHVDQUF1QzZHLHFDQUFxQyxFQUFFZixPQUFPeEQsY0FBY0M7d0JBQ3ZHLDhFQUE4RTt3QkFDOUV2QixRQUFROEUsS0FBSyxHQUFHQTtvQkFDcEIsT0FBTyxJQUFJUSxTQUFTO3dCQUNoQnRGLFFBQVE4RSxLQUFLLEdBQUdBO29CQUNwQjtnQkFDSjtnQkFDQUQsY0FBY0s7Z0JBQ2QsS0FBSyxNQUFNWSxjQUFjdEYsMEJBQTBCZ0IsV0FBVztvQkFDMUQsTUFBTXVFLHdCQUF3QjsyQkFDdkJ4RTsyQkFDQXVFO3FCQUNOO29CQUNELGtGQUFrRjtvQkFDbEYsSUFBSUMscUJBQXFCLENBQUNBLHNCQUFzQmpGLE1BQU0sR0FBRyxFQUFFLEtBQUtsQixTQUFTb0csbUJBQW1CLEVBQUU7d0JBQzFGM0YsbUJBQW1CYyxJQUFJLENBQUM0RTtvQkFDNUI7Z0JBQ0o7WUFDSjtRQUNKO1FBQ0EvRixRQUFRaUcsV0FBVyxHQUFHcEI7UUFDdEI3RSxRQUFRSSxZQUFZLEdBQUd1RSx1QkFBdUIsQ0FBQyxHQUFHNUYsbUJBQW1COEQsaUJBQWlCLEVBQUU4Qix3QkFBd0IvQjtRQUNoSDVDLFFBQVFFLFdBQVcsR0FBR0E7UUFDdEJGLFFBQVFLLGtCQUFrQixHQUFHQTtRQUM3QkwsUUFBUWtHLFlBQVksR0FBR3ZEO1FBQ3ZCM0MsUUFBUTBDLFlBQVksR0FBR0E7UUFDdkIsT0FBTyxDQUFDLEdBQUdwRCxlQUFlaUIsYUFBYSxFQUFFUixPQUFPQztJQUNwRCxHQUFHLElBQUlEO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBTzdCLFFBQVE0SSxPQUFPLEtBQUssY0FBZSxPQUFPNUksUUFBUTRJLE9BQU8sS0FBSyxZQUFZNUksUUFBUTRJLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzVJLFFBQVE0SSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLL0ksT0FBT0MsY0FBYyxDQUFDQyxRQUFRNEksT0FBTyxFQUFFLGNBQWM7UUFBRTNJLE9BQU87SUFBSztJQUNuRUgsT0FBT2dKLE1BQU0sQ0FBQzlJLFFBQVE0SSxPQUFPLEVBQUU1STtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRNEksT0FBTztBQUNsQyxFQUVBLDRDQUE0QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL25hdmlnYXRlLXJlZHVjZXIuanM/ZDgxNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGhhbmRsZUV4dGVybmFsVXJsOiBudWxsLFxuICAgIG5hdmlnYXRlUmVkdWNlcjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBoYW5kbGVFeHRlcm5hbFVybDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybDtcbiAgICB9LFxuICAgIG5hdmlnYXRlUmVkdWNlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuYXZpZ2F0ZVJlZHVjZXI7XG4gICAgfVxufSk7XG5jb25zdCBfZmV0Y2hzZXJ2ZXJyZXNwb25zZSA9IHJlcXVpcmUoXCIuLi9mZXRjaC1zZXJ2ZXItcmVzcG9uc2VcIik7XG5jb25zdCBfY3JlYXRlaHJlZmZyb211cmwgPSByZXF1aXJlKFwiLi4vY3JlYXRlLWhyZWYtZnJvbS11cmxcIik7XG5jb25zdCBfaW52YWxpZGF0ZWNhY2hlYmVsb3dmbGlnaHRzZWdtZW50cGF0aCA9IHJlcXVpcmUoXCIuLi9pbnZhbGlkYXRlLWNhY2hlLWJlbG93LWZsaWdodC1zZWdtZW50cGF0aFwiKTtcbmNvbnN0IF9maWxsY2FjaGV3aXRoZGF0YXByb3BlcnR5ID0gcmVxdWlyZShcIi4uL2ZpbGwtY2FjaGUtd2l0aC1kYXRhLXByb3BlcnR5XCIpO1xuY29uc3QgX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZSA9IHJlcXVpcmUoXCIuLi9hcHBseS1yb3V0ZXItc3RhdGUtcGF0Y2gtdG8tdHJlZVwiKTtcbmNvbnN0IF9zaG91bGRoYXJkbmF2aWdhdGUgPSByZXF1aXJlKFwiLi4vc2hvdWxkLWhhcmQtbmF2aWdhdGVcIik7XG5jb25zdCBfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0ID0gcmVxdWlyZShcIi4uL2lzLW5hdmlnYXRpbmctdG8tbmV3LXJvb3QtbGF5b3V0XCIpO1xuY29uc3QgX3JvdXRlcnJlZHVjZXJ0eXBlcyA9IHJlcXVpcmUoXCIuLi9yb3V0ZXItcmVkdWNlci10eXBlc1wiKTtcbmNvbnN0IF9oYW5kbGVtdXRhYmxlID0gcmVxdWlyZShcIi4uL2hhbmRsZS1tdXRhYmxlXCIpO1xuY29uc3QgX2FwcGx5ZmxpZ2h0ZGF0YSA9IHJlcXVpcmUoXCIuLi9hcHBseS1mbGlnaHQtZGF0YVwiKTtcbmNvbnN0IF9nZXRwcmVmZXRjaGNhY2hlZW50cnlzdGF0dXMgPSByZXF1aXJlKFwiLi4vZ2V0LXByZWZldGNoLWNhY2hlLWVudHJ5LXN0YXR1c1wiKTtcbmNvbnN0IF9wcnVuZXByZWZldGNoY2FjaGUgPSByZXF1aXJlKFwiLi9wcnVuZS1wcmVmZXRjaC1jYWNoZVwiKTtcbmNvbnN0IF9wcmVmZXRjaHJlZHVjZXIgPSByZXF1aXJlKFwiLi9wcmVmZXRjaC1yZWR1Y2VyXCIpO1xuY29uc3QgX2FwcHJvdXRlciA9IHJlcXVpcmUoXCIuLi8uLi9hcHAtcm91dGVyXCIpO1xuY29uc3QgX3NlZ21lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9zZWdtZW50XCIpO1xuY29uc3QgX3Bwcm5hdmlnYXRpb25zID0gcmVxdWlyZShcIi4uL3Bwci1uYXZpZ2F0aW9uc1wiKTtcbmNvbnN0IF9jcmVhdGVwcmVmZXRjaGNhY2hla2V5ID0gcmVxdWlyZShcIi4vY3JlYXRlLXByZWZldGNoLWNhY2hlLWtleVwiKTtcbmZ1bmN0aW9uIGhhbmRsZUV4dGVybmFsVXJsKHN0YXRlLCBtdXRhYmxlLCB1cmwsIHBlbmRpbmdQdXNoKSB7XG4gICAgbXV0YWJsZS5tcGFOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICBtdXRhYmxlLmNhbm9uaWNhbFVybCA9IHVybDtcbiAgICBtdXRhYmxlLnBlbmRpbmdQdXNoID0gcGVuZGluZ1B1c2g7XG4gICAgbXV0YWJsZS5zY3JvbGxhYmxlU2VnbWVudHMgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICgwLCBfaGFuZGxlbXV0YWJsZS5oYW5kbGVNdXRhYmxlKShzdGF0ZSwgbXV0YWJsZSk7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZVNlZ21lbnRzRnJvbVBhdGNoKGZsaWdodFJvdXRlclBhdGNoKSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBbXTtcbiAgICBjb25zdCBbc2VnbWVudCwgcGFyYWxsZWxSb3V0ZXNdID0gZmxpZ2h0Um91dGVyUGF0Y2g7XG4gICAgaWYgKE9iamVjdC5rZXlzKHBhcmFsbGVsUm91dGVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBzZWdtZW50XG4gICAgICAgICAgICBdXG4gICAgICAgIF07XG4gICAgfVxuICAgIGZvciAoY29uc3QgW3BhcmFsbGVsUm91dGVLZXksIHBhcmFsbGVsUm91dGVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFsbGVsUm91dGVzKSl7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRTZWdtZW50IG9mIGdlbmVyYXRlU2VnbWVudHNGcm9tUGF0Y2gocGFyYWxsZWxSb3V0ZSkpe1xuICAgICAgICAgICAgLy8gSWYgdGhlIHNlZ21lbnQgaXMgZW1wdHksIGl0IG1lYW5zIHdlIGFyZSBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZVxuICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBzZWdtZW50cy5wdXNoKFtcbiAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZUtleSxcbiAgICAgICAgICAgICAgICAgICAgLi4uY2hpbGRTZWdtZW50XG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goW1xuICAgICAgICAgICAgICAgICAgICBzZWdtZW50LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbGxlbFJvdXRlS2V5LFxuICAgICAgICAgICAgICAgICAgICAuLi5jaGlsZFNlZ21lbnRcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VnbWVudHM7XG59XG5mdW5jdGlvbiBhZGRSZWZldGNoVG9MZWFmU2VnbWVudHMobmV3Q2FjaGUsIGN1cnJlbnRDYWNoZSwgZmxpZ2h0U2VnbWVudFBhdGgsIHRyZWVQYXRjaCwgZGF0YSkge1xuICAgIGxldCBhcHBsaWVkUGF0Y2ggPSBmYWxzZTtcbiAgICBuZXdDYWNoZS5yc2MgPSBjdXJyZW50Q2FjaGUucnNjO1xuICAgIG5ld0NhY2hlLnByZWZldGNoUnNjID0gY3VycmVudENhY2hlLnByZWZldGNoUnNjO1xuICAgIG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzID0gbmV3IE1hcChjdXJyZW50Q2FjaGUucGFyYWxsZWxSb3V0ZXMpO1xuICAgIGNvbnN0IHNlZ21lbnRQYXRoc1RvRmlsbCA9IGdlbmVyYXRlU2VnbWVudHNGcm9tUGF0Y2godHJlZVBhdGNoKS5tYXAoKHNlZ21lbnQpPT5bXG4gICAgICAgICAgICAuLi5mbGlnaHRTZWdtZW50UGF0aCxcbiAgICAgICAgICAgIC4uLnNlZ21lbnRcbiAgICAgICAgXSk7XG4gICAgZm9yIChjb25zdCBzZWdtZW50UGF0aHMgb2Ygc2VnbWVudFBhdGhzVG9GaWxsKXtcbiAgICAgICAgKDAsIF9maWxsY2FjaGV3aXRoZGF0YXByb3BlcnR5LmZpbGxDYWNoZVdpdGhEYXRhUHJvcGVydHkpKG5ld0NhY2hlLCBjdXJyZW50Q2FjaGUsIHNlZ21lbnRQYXRocywgZGF0YSk7XG4gICAgICAgIGFwcGxpZWRQYXRjaCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBhcHBsaWVkUGF0Y2g7XG59XG5jb25zdCBuYXZpZ2F0ZVJlZHVjZXIgPSBwcm9jZXNzLmVudi5fX05FWFRfUFBSID8gbmF2aWdhdGVSZWR1Y2VyX1BQUiA6IG5hdmlnYXRlUmVkdWNlcl9ub1BQUjtcbi8vIFRoaXMgaXMgdGhlIGltcGxlbWVudGF0aW9uIHdoZW4gUFBSIGlzIGRpc2FibGVkLiBXZSBjYW4gYXNzdW1lIGl0cyBiZWhhdmlvclxuLy8gaXMgcmVsYXRpdmVseSBzdGFibGUgYmVjYXVzZSBpdCdzIGJlZW4gcnVubmluZyBpbiBwcm9kdWN0aW9uIGZvciBhIHdoaWxlLlxuZnVuY3Rpb24gbmF2aWdhdGVSZWR1Y2VyX25vUFBSKHN0YXRlLCBhY3Rpb24pIHtcbiAgICBjb25zdCB7IHVybCwgaXNFeHRlcm5hbFVybCwgbmF2aWdhdGVUeXBlLCBzaG91bGRTY3JvbGwgfSA9IGFjdGlvbjtcbiAgICBjb25zdCBtdXRhYmxlID0ge307XG4gICAgY29uc3QgeyBoYXNoIH0gPSB1cmw7XG4gICAgY29uc3QgaHJlZiA9ICgwLCBfY3JlYXRlaHJlZmZyb211cmwuY3JlYXRlSHJlZkZyb21VcmwpKHVybCk7XG4gICAgY29uc3QgcGVuZGluZ1B1c2ggPSBuYXZpZ2F0ZVR5cGUgPT09IFwicHVzaFwiO1xuICAgIC8vIHdlIHdhbnQgdG8gcHJ1bmUgdGhlIHByZWZldGNoIGNhY2hlIG9uIGV2ZXJ5IG5hdmlnYXRpb24gdG8gYXZvaWQgaXQgZ3Jvd2luZyB0b28gbGFyZ2VcbiAgICAoMCwgX3BydW5lcHJlZmV0Y2hjYWNoZS5wcnVuZVByZWZldGNoQ2FjaGUpKHN0YXRlLnByZWZldGNoQ2FjaGUpO1xuICAgIG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUgPSBmYWxzZTtcbiAgICBpZiAoaXNFeHRlcm5hbFVybCkge1xuICAgICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoc3RhdGUsIG11dGFibGUsIHVybC50b1N0cmluZygpLCBwZW5kaW5nUHVzaCk7XG4gICAgfVxuICAgIGNvbnN0IHByZWZldGNoQ2FjaGVLZXkgPSAoMCwgX2NyZWF0ZXByZWZldGNoY2FjaGVrZXkuY3JlYXRlUHJlZmV0Y2hDYWNoZUtleSkodXJsLCBzdGF0ZS5uZXh0VXJsKTtcbiAgICBsZXQgcHJlZmV0Y2hWYWx1ZXMgPSBzdGF0ZS5wcmVmZXRjaENhY2hlLmdldChwcmVmZXRjaENhY2hlS2V5KTtcbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcHJlZmV0Y2ggdmFsdWUsIHdlIG5lZWQgdG8gY3JlYXRlIG9uZVxuICAgIGlmICghcHJlZmV0Y2hWYWx1ZXMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9ICgwLCBfZmV0Y2hzZXJ2ZXJyZXNwb25zZS5mZXRjaFNlcnZlclJlc3BvbnNlKSh1cmwsIHN0YXRlLnRyZWUsIHN0YXRlLm5leHRVcmwsIHN0YXRlLmJ1aWxkSWQsIC8vIGluIGRldiwgdGhlcmUncyBuZXZlciBnb25uYSBiZSBhIHByZWZldGNoIGVudHJ5IHNvIHdlIHdhbnQgdG8gcHJlZmV0Y2ggaGVyZVxuICAgICAgICAvLyBpbiBvcmRlciB0byBzaW11bGF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIHByZWZldGNoIGNhY2hlXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgPyBfcm91dGVycmVkdWNlcnR5cGVzLlByZWZldGNoS2luZC5BVVRPIDogdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgbmV3UHJlZmV0Y2hWYWx1ZSA9IHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIGVudHJ5IHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIDMwc1xuICAgICAgICAgICAga2luZDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiA/IF9yb3V0ZXJyZWR1Y2VydHlwZXMuUHJlZmV0Y2hLaW5kLkFVVE8gOiBfcm91dGVycmVkdWNlcnR5cGVzLlByZWZldGNoS2luZC5URU1QT1JBUlksXG4gICAgICAgICAgICBwcmVmZXRjaFRpbWU6IERhdGUubm93KCksXG4gICAgICAgICAgICB0cmVlQXRUaW1lT2ZQcmVmZXRjaDogc3RhdGUudHJlZSxcbiAgICAgICAgICAgIGxhc3RVc2VkVGltZTogbnVsbFxuICAgICAgICB9O1xuICAgICAgICBzdGF0ZS5wcmVmZXRjaENhY2hlLnNldChwcmVmZXRjaENhY2hlS2V5LCBuZXdQcmVmZXRjaFZhbHVlKTtcbiAgICAgICAgcHJlZmV0Y2hWYWx1ZXMgPSBuZXdQcmVmZXRjaFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBwcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXMgPSAoMCwgX2dldHByZWZldGNoY2FjaGVlbnRyeXN0YXR1cy5nZXRQcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXMpKHByZWZldGNoVmFsdWVzKTtcbiAgICAvLyBUaGUgb25lIGJlZm9yZSBsYXN0IGl0ZW0gaXMgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIHBhdGNoXG4gICAgY29uc3QgeyB0cmVlQXRUaW1lT2ZQcmVmZXRjaCwgZGF0YSB9ID0gcHJlZmV0Y2hWYWx1ZXM7XG4gICAgX3ByZWZldGNocmVkdWNlci5wcmVmZXRjaFF1ZXVlLmJ1bXAoZGF0YSk7XG4gICAgcmV0dXJuIGRhdGEudGhlbigocGFyYW0pPT57XG4gICAgICAgIGxldCBbZmxpZ2h0RGF0YSwgY2Fub25pY2FsVXJsT3ZlcnJpZGUsIHBvc3Rwb25lZF0gPSBwYXJhbTtcbiAgICAgICAgLy8gd2Ugb25seSB3YW50IHRvIG1hcmsgdGhpcyBvbmNlXG4gICAgICAgIGlmIChwcmVmZXRjaFZhbHVlcyAmJiAhcHJlZmV0Y2hWYWx1ZXMubGFzdFVzZWRUaW1lKSB7XG4gICAgICAgICAgICAvLyBpbXBvcnRhbnQ6IHdlIHNob3VsZCBvbmx5IG1hcmsgdGhlIGNhY2hlIG5vZGUgYXMgZGlydHkgYWZ0ZXIgd2UgdW5zdXNwZW5kIGZyb20gdGhlIGNhbGwgYWJvdmVcbiAgICAgICAgICAgIHByZWZldGNoVmFsdWVzLmxhc3RVc2VkVGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBuYXZpZ2F0aW5nIHRvIHBhZ2UgaW4gYHBhZ2VzYCBmcm9tIGBhcHBgXG4gICAgICAgIGlmICh0eXBlb2YgZmxpZ2h0RGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKHN0YXRlLCBtdXRhYmxlLCBmbGlnaHREYXRhLCBwZW5kaW5nUHVzaCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGN1cnJlbnRUcmVlID0gc3RhdGUudHJlZTtcbiAgICAgICAgbGV0IGN1cnJlbnRDYWNoZSA9IHN0YXRlLmNhY2hlO1xuICAgICAgICBsZXQgc2Nyb2xsYWJsZVNlZ21lbnRzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmxpZ2h0RGF0YVBhdGggb2YgZmxpZ2h0RGF0YSl7XG4gICAgICAgICAgICBjb25zdCBmbGlnaHRTZWdtZW50UGF0aCA9IGZsaWdodERhdGFQYXRoLnNsaWNlKDAsIC00KTtcbiAgICAgICAgICAgIC8vIFRoZSBvbmUgYmVmb3JlIGxhc3QgaXRlbSBpcyB0aGUgcm91dGVyIHN0YXRlIHRyZWUgcGF0Y2hcbiAgICAgICAgICAgIGNvbnN0IHRyZWVQYXRjaCA9IGZsaWdodERhdGFQYXRoLnNsaWNlKC0zKVswXTtcbiAgICAgICAgICAgIC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgICAgICAgIGNvbnN0IGZsaWdodFNlZ21lbnRQYXRoV2l0aExlYWRpbmdFbXB0eSA9IFtcbiAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgICAgIC4uLmZsaWdodFNlZ21lbnRQYXRoXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyB0cmVlIGJhc2VkIG9uIHRoZSBmbGlnaHRTZWdtZW50UGF0aCBhbmQgcm91dGVyIHN0YXRlIHBhdGNoXG4gICAgICAgICAgICBsZXQgbmV3VHJlZSA9ICgwLCBfYXBwbHlyb3V0ZXJzdGF0ZXBhdGNodG90cmVlLmFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZVNraXBEZWZhdWx0KSgvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgICBmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHksIGN1cnJlbnRUcmVlLCB0cmVlUGF0Y2gpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHRyZWUgcGF0Y2ggY2FuJ3QgYmUgYXBwbGllZCB0byB0aGUgY3VycmVudCB0cmVlIHRoZW4gd2UgdXNlIHRoZSB0cmVlIGF0IHRpbWUgb2YgcHJlZmV0Y2hcbiAgICAgICAgICAgIC8vIFRPRE8tQVBQOiBUaGlzIHNob3VsZCBpbnN0ZWFkIGZpbGwgaW4gdGhlIG1pc3NpbmcgcGllY2VzIGluIGBjdXJyZW50VHJlZWAgd2l0aCB0aGUgZGF0YSBmcm9tIGB0cmVlQXRUaW1lT2ZQcmVmZXRjaGAsIHRoZW4gYXBwbHkgdGhlIHBhdGNoLlxuICAgICAgICAgICAgaWYgKG5ld1RyZWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBuZXdUcmVlID0gKDAsIF9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUuYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlU2tpcERlZmF1bHQpKC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgICAgICAgICAgICBmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHksIHRyZWVBdFRpbWVPZlByZWZldGNoLCB0cmVlUGF0Y2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld1RyZWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIF9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQuaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0KShjdXJyZW50VHJlZSwgbmV3VHJlZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKHN0YXRlLCBtdXRhYmxlLCBocmVmLCBwZW5kaW5nUHVzaCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlID0gKDAsIF9hcHByb3V0ZXIuY3JlYXRlRW1wdHlDYWNoZU5vZGUpKCk7XG4gICAgICAgICAgICAgICAgbGV0IGFwcGxpZWQgPSAoMCwgX2FwcGx5ZmxpZ2h0ZGF0YS5hcHBseUZsaWdodERhdGEpKGN1cnJlbnRDYWNoZSwgY2FjaGUsIGZsaWdodERhdGFQYXRoLCAocHJlZmV0Y2hWYWx1ZXMgPT0gbnVsbCA/IHZvaWQgMCA6IHByZWZldGNoVmFsdWVzLmtpbmQpID09PSBcImF1dG9cIiAmJiBwcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXMgPT09IF9nZXRwcmVmZXRjaGNhY2hlZW50cnlzdGF0dXMuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnJldXNhYmxlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFwcGxpZWQgJiYgcHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzID09PSBfZ2V0cHJlZmV0Y2hjYWNoZWVudHJ5c3RhdHVzLlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5zdGFsZSB8fCAvLyBUT0RPLUFQUDogSWYgdGhlIHByZWZldGNoIHdhcyBwb3N0cG9uZWQsIHdlIGRvbid0IHdhbnQgdG8gYXBwbHkgaXRcbiAgICAgICAgICAgICAgICAvLyB1bnRpbCB3ZSBsYW5kIHJvdXRlciBjaGFuZ2VzIHRvIGhhbmRsZSB0aGUgcG9zdHBvbmVkIGNhc2UuXG4gICAgICAgICAgICAgICAgcG9zdHBvbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpZWQgPSBhZGRSZWZldGNoVG9MZWFmU2VnbWVudHMoY2FjaGUsIGN1cnJlbnRDYWNoZSwgZmxpZ2h0U2VnbWVudFBhdGgsIHRyZWVQYXRjaCwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgICAgICAgICAgICAgICAoKT0+KDAsIF9mZXRjaHNlcnZlcnJlc3BvbnNlLmZldGNoU2VydmVyUmVzcG9uc2UpKHVybCwgY3VycmVudFRyZWUsIHN0YXRlLm5leHRVcmwsIHN0YXRlLmJ1aWxkSWQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaGFyZE5hdmlnYXRlID0gKDAsIF9zaG91bGRoYXJkbmF2aWdhdGUuc2hvdWxkSGFyZE5hdmlnYXRlKSgvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgICAgICAgZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5LCBjdXJyZW50VHJlZSk7XG4gICAgICAgICAgICAgICAgaWYgKGhhcmROYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb3B5IHJzYyBmb3IgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlLnJzYyA9IGN1cnJlbnRDYWNoZS5yc2M7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlLnByZWZldGNoUnNjID0gY3VycmVudENhY2hlLnByZWZldGNoUnNjO1xuICAgICAgICAgICAgICAgICAgICAoMCwgX2ludmFsaWRhdGVjYWNoZWJlbG93ZmxpZ2h0c2VnbWVudHBhdGguaW52YWxpZGF0ZUNhY2hlQmVsb3dGbGlnaHRTZWdtZW50UGF0aCkoY2FjaGUsIGN1cnJlbnRDYWNoZSwgZmxpZ2h0U2VnbWVudFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhlIGV4aXN0aW5nIGNhY2hlIHZhbHVlIGlzIHVzZWQgd2hlbiB0aGUgY2FjaGUgd2FzIG5vdCBpbnZhbGlkYXRlZC5cbiAgICAgICAgICAgICAgICAgICAgbXV0YWJsZS5jYWNoZSA9IGNhY2hlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBwbGllZCkge1xuICAgICAgICAgICAgICAgICAgICBtdXRhYmxlLmNhY2hlID0gY2FjaGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRDYWNoZSA9IGNhY2hlO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN1YlNlZ21lbnQgb2YgZ2VuZXJhdGVTZWdtZW50c0Zyb21QYXRjaCh0cmVlUGF0Y2gpKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZVNlZ21lbnRQYXRoID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmxpZ2h0U2VnbWVudFBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5zdWJTZWdtZW50XG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdGhlIF9fREVGQVVMVF9fIHBhdGhzIGFzIHRoZXkgc2hvdWxkbid0IGJlIHNjcm9sbGVkIHRvIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVTZWdtZW50UGF0aFtzY3JvbGxhYmxlU2VnbWVudFBhdGgubGVuZ3RoIC0gMV0gIT09IF9zZWdtZW50LkRFRkFVTFRfU0VHTUVOVF9LRVkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVTZWdtZW50cy5wdXNoKHNjcm9sbGFibGVTZWdtZW50UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbXV0YWJsZS5wYXRjaGVkVHJlZSA9IGN1cnJlbnRUcmVlO1xuICAgICAgICBtdXRhYmxlLmNhbm9uaWNhbFVybCA9IGNhbm9uaWNhbFVybE92ZXJyaWRlID8gKDAsIF9jcmVhdGVocmVmZnJvbXVybC5jcmVhdGVIcmVmRnJvbVVybCkoY2Fub25pY2FsVXJsT3ZlcnJpZGUpIDogaHJlZjtcbiAgICAgICAgbXV0YWJsZS5wZW5kaW5nUHVzaCA9IHBlbmRpbmdQdXNoO1xuICAgICAgICBtdXRhYmxlLnNjcm9sbGFibGVTZWdtZW50cyA9IHNjcm9sbGFibGVTZWdtZW50cztcbiAgICAgICAgbXV0YWJsZS5oYXNoRnJhZ21lbnQgPSBoYXNoO1xuICAgICAgICBtdXRhYmxlLnNob3VsZFNjcm9sbCA9IHNob3VsZFNjcm9sbDtcbiAgICAgICAgcmV0dXJuICgwLCBfaGFuZGxlbXV0YWJsZS5oYW5kbGVNdXRhYmxlKShzdGF0ZSwgbXV0YWJsZSk7XG4gICAgfSwgKCk9PnN0YXRlKTtcbn1cbi8vIFRoaXMgaXMgdGhlIGV4cGVyaW1lbnRhbCBQUFIgaW1wbGVtZW50YXRpb24uIEl0J3MgY2xvc2VyIHRvIHRoZSBiZWhhdmlvciB3ZVxuLy8gd2FudCwgYnV0IGlzIGxpa2VsaWVyIHRvIGluY2x1ZGUgYWNjaWRlbnRhbCByZWdyZXNzaW9ucyBiZWNhdXNlIGl0IHJld3JpdGVzXG4vLyBleGlzdGluZyBmdW5jdGlvbmFsaXR5LlxuZnVuY3Rpb24gbmF2aWdhdGVSZWR1Y2VyX1BQUihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgY29uc3QgeyB1cmwsIGlzRXh0ZXJuYWxVcmwsIG5hdmlnYXRlVHlwZSwgc2hvdWxkU2Nyb2xsIH0gPSBhY3Rpb247XG4gICAgY29uc3QgbXV0YWJsZSA9IHt9O1xuICAgIGNvbnN0IHsgaGFzaCB9ID0gdXJsO1xuICAgIGNvbnN0IGhyZWYgPSAoMCwgX2NyZWF0ZWhyZWZmcm9tdXJsLmNyZWF0ZUhyZWZGcm9tVXJsKSh1cmwpO1xuICAgIGNvbnN0IHBlbmRpbmdQdXNoID0gbmF2aWdhdGVUeXBlID09PSBcInB1c2hcIjtcbiAgICAvLyB3ZSB3YW50IHRvIHBydW5lIHRoZSBwcmVmZXRjaCBjYWNoZSBvbiBldmVyeSBuYXZpZ2F0aW9uIHRvIGF2b2lkIGl0IGdyb3dpbmcgdG9vIGxhcmdlXG4gICAgKDAsIF9wcnVuZXByZWZldGNoY2FjaGUucHJ1bmVQcmVmZXRjaENhY2hlKShzdGF0ZS5wcmVmZXRjaENhY2hlKTtcbiAgICBtdXRhYmxlLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlID0gZmFsc2U7XG4gICAgaWYgKGlzRXh0ZXJuYWxVcmwpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKHN0YXRlLCBtdXRhYmxlLCB1cmwudG9TdHJpbmcoKSwgcGVuZGluZ1B1c2gpO1xuICAgIH1cbiAgICBjb25zdCBwcmVmZXRjaENhY2hlS2V5ID0gKDAsIF9jcmVhdGVwcmVmZXRjaGNhY2hla2V5LmNyZWF0ZVByZWZldGNoQ2FjaGVLZXkpKHVybCwgc3RhdGUubmV4dFVybCk7XG4gICAgbGV0IHByZWZldGNoVmFsdWVzID0gc3RhdGUucHJlZmV0Y2hDYWNoZS5nZXQocHJlZmV0Y2hDYWNoZUtleSk7XG4gICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHByZWZldGNoIHZhbHVlLCB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmVcbiAgICBpZiAoIXByZWZldGNoVmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSAoMCwgX2ZldGNoc2VydmVycmVzcG9uc2UuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkodXJsLCBzdGF0ZS50cmVlLCBzdGF0ZS5uZXh0VXJsLCBzdGF0ZS5idWlsZElkLCAvLyBpbiBkZXYsIHRoZXJlJ3MgbmV2ZXIgZ29ubmEgYmUgYSBwcmVmZXRjaCBlbnRyeSBzbyB3ZSB3YW50IHRvIHByZWZldGNoIGhlcmVcbiAgICAgICAgLy8gaW4gb3JkZXIgdG8gc2ltdWxhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBwcmVmZXRjaCBjYWNoZVxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiID8gX3JvdXRlcnJlZHVjZXJ0eXBlcy5QcmVmZXRjaEtpbmQuQVVUTyA6IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IG5ld1ByZWZldGNoVmFsdWUgPSB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSBlbnRyeSB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciAzMHNcbiAgICAgICAgICAgIGtpbmQ6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgPyBfcm91dGVycmVkdWNlcnR5cGVzLlByZWZldGNoS2luZC5BVVRPIDogX3JvdXRlcnJlZHVjZXJ0eXBlcy5QcmVmZXRjaEtpbmQuVEVNUE9SQVJZLFxuICAgICAgICAgICAgcHJlZmV0Y2hUaW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgdHJlZUF0VGltZU9mUHJlZmV0Y2g6IHN0YXRlLnRyZWUsXG4gICAgICAgICAgICBsYXN0VXNlZFRpbWU6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgc3RhdGUucHJlZmV0Y2hDYWNoZS5zZXQocHJlZmV0Y2hDYWNoZUtleSwgbmV3UHJlZmV0Y2hWYWx1ZSk7XG4gICAgICAgIHByZWZldGNoVmFsdWVzID0gbmV3UHJlZmV0Y2hWYWx1ZTtcbiAgICB9XG4gICAgY29uc3QgcHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzID0gKDAsIF9nZXRwcmVmZXRjaGNhY2hlZW50cnlzdGF0dXMuZ2V0UHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzKShwcmVmZXRjaFZhbHVlcyk7XG4gICAgLy8gVGhlIG9uZSBiZWZvcmUgbGFzdCBpdGVtIGlzIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSBwYXRjaFxuICAgIGNvbnN0IHsgdHJlZUF0VGltZU9mUHJlZmV0Y2gsIGRhdGEgfSA9IHByZWZldGNoVmFsdWVzO1xuICAgIF9wcmVmZXRjaHJlZHVjZXIucHJlZmV0Y2hRdWV1ZS5idW1wKGRhdGEpO1xuICAgIHJldHVybiBkYXRhLnRoZW4oKHBhcmFtKT0+e1xuICAgICAgICBsZXQgW2ZsaWdodERhdGEsIGNhbm9uaWNhbFVybE92ZXJyaWRlLCBfcG9zdHBvbmVkXSA9IHBhcmFtO1xuICAgICAgICAvLyB3ZSBvbmx5IHdhbnQgdG8gbWFyayB0aGlzIG9uY2VcbiAgICAgICAgaWYgKHByZWZldGNoVmFsdWVzICYmICFwcmVmZXRjaFZhbHVlcy5sYXN0VXNlZFRpbWUpIHtcbiAgICAgICAgICAgIC8vIGltcG9ydGFudDogd2Ugc2hvdWxkIG9ubHkgbWFyayB0aGUgY2FjaGUgbm9kZSBhcyBkaXJ0eSBhZnRlciB3ZSB1bnN1c3BlbmQgZnJvbSB0aGUgY2FsbCBhYm92ZVxuICAgICAgICAgICAgcHJlZmV0Y2hWYWx1ZXMubGFzdFVzZWRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIG5hdmlnYXRpbmcgdG8gcGFnZSBpbiBgcGFnZXNgIGZyb20gYGFwcGBcbiAgICAgICAgaWYgKHR5cGVvZiBmbGlnaHREYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoc3RhdGUsIG11dGFibGUsIGZsaWdodERhdGEsIHBlbmRpbmdQdXNoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3VycmVudFRyZWUgPSBzdGF0ZS50cmVlO1xuICAgICAgICBsZXQgY3VycmVudENhY2hlID0gc3RhdGUuY2FjaGU7XG4gICAgICAgIGxldCBzY3JvbGxhYmxlU2VnbWVudHMgPSBbXTtcbiAgICAgICAgLy8gVE9ETzogSW4gcHJhY3RpY2UsIHRoaXMgaXMgYWx3YXlzIGEgc2luZ2xlIGl0ZW0gYXJyYXkuIFdlIHByb2JhYmx5XG4gICAgICAgIC8vIGFyZW4ndCBnb2luZyB0byBldmVyeSBzZW5kIG11bHRpcGxlIHNlZ21lbnRzLCBhdCBsZWFzdCBub3QgaW4gdGhpc1xuICAgICAgICAvLyBmb3JtYXQuIFNvIHdlIGNvdWxkIHJlbW92ZSB0aGUgZXh0cmEgd3JhcHBlciBmb3Igbm93IHVudGlsXG4gICAgICAgIC8vIHRoYXQgc2V0dGxlcy5cbiAgICAgICAgZm9yIChjb25zdCBmbGlnaHREYXRhUGF0aCBvZiBmbGlnaHREYXRhKXtcbiAgICAgICAgICAgIGNvbnN0IGZsaWdodFNlZ21lbnRQYXRoID0gZmxpZ2h0RGF0YVBhdGguc2xpY2UoMCwgLTQpO1xuICAgICAgICAgICAgLy8gVGhlIG9uZSBiZWZvcmUgbGFzdCBpdGVtIGlzIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSBwYXRjaFxuICAgICAgICAgICAgY29uc3QgdHJlZVBhdGNoID0gZmxpZ2h0RGF0YVBhdGguc2xpY2UoLTMpWzBdO1xuICAgICAgICAgICAgLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICAgICAgY29uc3QgZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5ID0gW1xuICAgICAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICAgICAgLi4uZmxpZ2h0U2VnbWVudFBhdGhcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICAvLyBDcmVhdGUgbmV3IHRyZWUgYmFzZWQgb24gdGhlIGZsaWdodFNlZ21lbnRQYXRoIGFuZCByb3V0ZXIgc3RhdGUgcGF0Y2hcbiAgICAgICAgICAgIGxldCBuZXdUcmVlID0gKDAsIF9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUuYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlU2tpcERlZmF1bHQpKC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgICAgICAgIGZsaWdodFNlZ21lbnRQYXRoV2l0aExlYWRpbmdFbXB0eSwgY3VycmVudFRyZWUsIHRyZWVQYXRjaCk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgdHJlZSBwYXRjaCBjYW4ndCBiZSBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IHRyZWUgdGhlbiB3ZSB1c2UgdGhlIHRyZWUgYXQgdGltZSBvZiBwcmVmZXRjaFxuICAgICAgICAgICAgLy8gVE9ETy1BUFA6IFRoaXMgc2hvdWxkIGluc3RlYWQgZmlsbCBpbiB0aGUgbWlzc2luZyBwaWVjZXMgaW4gYGN1cnJlbnRUcmVlYCB3aXRoIHRoZSBkYXRhIGZyb20gYHRyZWVBdFRpbWVPZlByZWZldGNoYCwgdGhlbiBhcHBseSB0aGUgcGF0Y2guXG4gICAgICAgICAgICBpZiAobmV3VHJlZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5ld1RyZWUgPSAoMCwgX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdCkoLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICAgICAgICAgIGZsaWdodFNlZ21lbnRQYXRoV2l0aExlYWRpbmdFbXB0eSwgdHJlZUF0VGltZU9mUHJlZmV0Y2gsIHRyZWVQYXRjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV3VHJlZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgX2lzbmF2aWdhdGluZ3RvbmV3cm9vdGxheW91dC5pc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQpKGN1cnJlbnRUcmVlLCBuZXdUcmVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoc3RhdGUsIG11dGFibGUsIGhyZWYsIHBlbmRpbmdQdXNoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC8vIFRoaXMgaXMganVzdCBhIHBhcmFub2lkIGNoZWNrLiBXaGVuIFBQUiBpcyBlbmFibGVkLCB0aGUgc2VydmVyXG4gICAgICAgICAgICAgICAgLy8gd2lsbCBhbHdheXMgc2VuZCBiYWNrIGEgc3RhdGljIHJlc3BvbnNlIHRoYXQncyByZW5kZXJlZCBmcm9tXG4gICAgICAgICAgICAgICAgLy8gdGhlIHJvb3QuIElmIGZvciBzb21lIHJlYXNvbiBpdCBkb2Vzbid0LCB3ZSBmYWxsIGJhY2sgdG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gbm9uLVBQUiBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgZ2V0IHJpZCBvZiB0aGUgZWxzZSBicmFuY2ggYW5kIGRvIGFsbCBuYXZpZ2F0aW9uc1xuICAgICAgICAgICAgICAgIC8vIHZpYSB1cGRhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb24uIFRoZSBjdXJyZW50IHN0cnVjdHVyZSBpcyBqdXN0XG4gICAgICAgICAgICAgICAgLy8gYW4gaW5jcmVtZW50YWwgc3RlcC5cbiAgICAgICAgICAgICAgICBmbGlnaHREYXRhUGF0aC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlZmV0Y2hlZFRyZWUgPSBmbGlnaHREYXRhUGF0aFswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VlZERhdGEgPSBmbGlnaHREYXRhUGF0aFsxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZCA9IGZsaWdodERhdGFQYXRoWzJdO1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBwcmVmZXRjaGVkIGRhdGEgaXMgc3RhbGUuIElmIHNvLCB3ZSdsbFxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgaXQgYW5kIHdhaXQgZm9yIHRoZSBkeW5hbWljIGRhdGEgdG8gc3RyZWFtIGluIGJlZm9yZVxuICAgICAgICAgICAgICAgICAgICAvLyBzaG93aW5nIG5ldyBzZWdtZW50cy5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNQcmVmZXRjaFN0YWxlID0gcHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzID09PSBfZ2V0cHJlZmV0Y2hjYWNoZWVudHJ5c3RhdHVzLlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5zdGFsZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFzayA9ICgwLCBfcHBybmF2aWdhdGlvbnMudXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uKShjdXJyZW50Q2FjaGUsIGN1cnJlbnRUcmVlLCBwcmVmZXRjaGVkVHJlZSwgc2VlZERhdGEsIGhlYWQsIGlzUHJlZmV0Y2hTdGFsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXNrICE9PSBudWxsICYmIHRhc2subm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgY3JlYXRlZCBhIG5ldyBDYWNoZSBOb2RlIHRyZWUgdGhhdCBjb250YWlucyBhIHByZWZldGNoZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZlcnNpb24gb2YgdGhlIG5leHQgcGFnZS4gVGhpcyBjYW4gYmUgcmVuZGVyZWQgaW5zdGFudGx5LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSB0cmVlIGNvbXB1dGVkIGJ5IHVwZGF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbiBpbnN0ZWFkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgb25lIGNvbXB1dGVkIGJ5IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZVNraXBEZWZhdWx0LlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIHJlbW92ZSBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVTa2lwRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgUFBSIHBhdGggZW50aXJlbHkuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRjaGVkUm91dGVyU3RhdGUgPSB0YXNrLnJvdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VHJlZSA9IHBhdGNoZWRSb3V0ZXJTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NhY2hlID0gdGFzay5ub2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHByZWZldGNoZWQgdHJlZSBoYXMgZHluYW1pYyBob2xlcyBpbiBpdC4gV2UgaW5pdGlhdGUgYVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHluYW1pYyByZXF1ZXN0IHRvIGZpbGwgdGhlbSBpbi5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgYmxvY2sgb24gdGhlIHJlc3VsdC4gV2UnbGwgaW1tZWRpYXRlbHkgcmVuZGVyIHRoZSBDYWNoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSB0cmVlIGFuZCBzdXNwZW5kIG9uIHRoZSBkeW5hbWljIHBhcnRzLiBXaGVuIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21lcyBpbiwgd2UnbGwgZmlsbCBpbiBtaXNzaW5nIGRhdGEgYW5kIHBpbmcgUmVhY3QgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlLXJlbmRlci4gVW5saWtlIHRoZSBsYXp5IGZldGNoaW5nIG1vZGVsIGluIHRoZSBub24tUFBSXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiwgdGhpcyBpcyBtb2RlbGVkIGFzIGEgc2luZ2xlIFJlYWN0IHVwZGF0ZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJlYW1pbmcsIHJhdGhlciB0aGFuIG11bHRpcGxlIHRvcC1sZXZlbCB1cGRhdGVzLiAoSG93ZXZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW4gaW4gdGhlIG5ldyBtb2RlbCwgd2UnbGwgc3RpbGwgbmVlZCB0byBzb21ldGltZXMgdXBkYXRlIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm9vdCBtdWx0aXBsZSB0aW1lcyBwZXIgbmF2aWdhdGlvbiwgbGlrZSBpZiB0aGUgc2VydmVyIHNlbmRzIHVzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGRpZmZlcmVudCByZXNwb25zZSB0aGFuIHdlIGV4cGVjdGVkLiBGb3Igbm93LCB3ZSByZXZlcnQgYmFja1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIGxhenkgZmV0Y2hpbmcgbWVjaGFuaXNtIGluIHRoYXQgY2FzZS4pXG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3Bwcm5hdmlnYXRpb25zLmxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0KSh0YXNrLCAoMCwgX2ZldGNoc2VydmVycmVzcG9uc2UuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkodXJsLCBjdXJyZW50VHJlZSwgc3RhdGUubmV4dFVybCwgc3RhdGUuYnVpbGRJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbXV0YWJsZS5jYWNoZSA9IG5ld0NhY2hlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90aGluZyBjaGFuZ2VkLCBzbyByZXVzZSB0aGUgb2xkIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogV2hhdCBpZiB0aGUgaGVhZCBjaGFuZ2VkIGJ1dCBub3QgYW55IG9mIHRoZSBzZWdtZW50IGRhdGE/XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJcyB0aGF0IHBvc3NpYmxlPyBJZiBzbywgd2Ugc2hvdWxkIGNsb25lIHRoZSB3aG9sZSB0cmVlIGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBoZWFkLlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VHJlZSA9IHByZWZldGNoZWRUcmVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHN0YXRpYyByZXNwb25zZSBkb2VzIG5vdCBpbmNsdWRlIGFueSBkeW5hbWljIGhvbGVzLCBzb1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gYSBzZWNvbmQgcmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQXMgYW4gaW5jcmVtZW50YWwgc3RlcCB0aGlzIGp1c3QgcmV2ZXJ0cyBiYWNrIHRvIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBub24tUFBSIGltcGxlbWVudGF0aW9uLiBXZSBjYW4gc2ltcGxpZnkgdGhpcyBicmFuY2ggZnVydGhlcixcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZW4gdGhhdCBQUFIgcHJlZmV0Y2hlcyBhcmUgYWx3YXlzIHN0YXRpYyBhbmQgcmV0dXJuIHRoZSB3aG9sZVxuICAgICAgICAgICAgICAgICAgICAvLyB0cmVlLiBPciBpbiB0aGUgbWVhbnRpbWUgd2UgY291bGQgZmFjdG9yIGl0IG91dCBpbnRvIGFcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VwYXJhdGUgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlID0gKDAsIF9hcHByb3V0ZXIuY3JlYXRlRW1wdHlDYWNoZU5vZGUpKCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhcHBsaWVkID0gKDAsIF9hcHBseWZsaWdodGRhdGEuYXBwbHlGbGlnaHREYXRhKShjdXJyZW50Q2FjaGUsIGNhY2hlLCBmbGlnaHREYXRhUGF0aCwgKHByZWZldGNoVmFsdWVzID09IG51bGwgPyB2b2lkIDAgOiBwcmVmZXRjaFZhbHVlcy5raW5kKSA9PT0gXCJhdXRvXCIgJiYgcHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzID09PSBfZ2V0cHJlZmV0Y2hjYWNoZWVudHJ5c3RhdHVzLlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5yZXVzYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYXBwbGllZCAmJiBwcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXMgPT09IF9nZXRwcmVmZXRjaGNhY2hlZW50cnlzdGF0dXMuUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnN0YWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWVkID0gYWRkUmVmZXRjaFRvTGVhZlNlZ21lbnRzKGNhY2hlLCBjdXJyZW50Q2FjaGUsIGZsaWdodFNlZ21lbnRQYXRoLCB0cmVlUGF0Y2gsIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgICAgICAgICAgICAgICAgICAgICgpPT4oMCwgX2ZldGNoc2VydmVycmVzcG9uc2UuZmV0Y2hTZXJ2ZXJSZXNwb25zZSkodXJsLCBjdXJyZW50VHJlZSwgc3RhdGUubmV4dFVybCwgc3RhdGUuYnVpbGRJZCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhcmROYXZpZ2F0ZSA9ICgwLCBfc2hvdWxkaGFyZG5hdmlnYXRlLnNob3VsZEhhcmROYXZpZ2F0ZSkoLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgICAgICAgICAgICAgICBmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHksIGN1cnJlbnRUcmVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhcmROYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29weSByc2MgZm9yIHRoZSByb290IG5vZGUgb2YgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUucnNjID0gY3VycmVudENhY2hlLnJzYztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnByZWZldGNoUnNjID0gY3VycmVudENhY2hlLnByZWZldGNoUnNjO1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF9pbnZhbGlkYXRlY2FjaGViZWxvd2ZsaWdodHNlZ21lbnRwYXRoLmludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGgpKGNhY2hlLCBjdXJyZW50Q2FjaGUsIGZsaWdodFNlZ21lbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgZXhpc3RpbmcgY2FjaGUgdmFsdWUgaXMgdXNlZCB3aGVuIHRoZSBjYWNoZSB3YXMgbm90IGludmFsaWRhdGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgbXV0YWJsZS5jYWNoZSA9IGNhY2hlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcGxpZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG11dGFibGUuY2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50VHJlZSA9IG5ld1RyZWU7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJTZWdtZW50IG9mIGdlbmVyYXRlU2VnbWVudHNGcm9tUGF0Y2godHJlZVBhdGNoKSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVTZWdtZW50UGF0aCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZsaWdodFNlZ21lbnRQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3ViU2VnbWVudFxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSBfX0RFRkFVTFRfXyBwYXRocyBhcyB0aGV5IHNob3VsZG4ndCBiZSBzY3JvbGxlZCB0byBpbiB0aGlzIGNhc2UuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlU2VnbWVudFBhdGhbc2Nyb2xsYWJsZVNlZ21lbnRQYXRoLmxlbmd0aCAtIDFdICE9PSBfc2VnbWVudC5ERUZBVUxUX1NFR01FTlRfS0VZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlU2VnbWVudHMucHVzaChzY3JvbGxhYmxlU2VnbWVudFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG11dGFibGUucGF0Y2hlZFRyZWUgPSBjdXJyZW50VHJlZTtcbiAgICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSBjYW5vbmljYWxVcmxPdmVycmlkZSA/ICgwLCBfY3JlYXRlaHJlZmZyb211cmwuY3JlYXRlSHJlZkZyb21VcmwpKGNhbm9uaWNhbFVybE92ZXJyaWRlKSA6IGhyZWY7XG4gICAgICAgIG11dGFibGUucGVuZGluZ1B1c2ggPSBwZW5kaW5nUHVzaDtcbiAgICAgICAgbXV0YWJsZS5zY3JvbGxhYmxlU2VnbWVudHMgPSBzY3JvbGxhYmxlU2VnbWVudHM7XG4gICAgICAgIG11dGFibGUuaGFzaEZyYWdtZW50ID0gaGFzaDtcbiAgICAgICAgbXV0YWJsZS5zaG91bGRTY3JvbGwgPSBzaG91bGRTY3JvbGw7XG4gICAgICAgIHJldHVybiAoMCwgX2hhbmRsZW11dGFibGUuaGFuZGxlTXV0YWJsZSkoc3RhdGUsIG11dGFibGUpO1xuICAgIH0sICgpPT5zdGF0ZSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5hdmlnYXRlLXJlZHVjZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiaGFuZGxlRXh0ZXJuYWxVcmwiLCJuYXZpZ2F0ZVJlZHVjZXIiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZmV0Y2hzZXJ2ZXJyZXNwb25zZSIsInJlcXVpcmUiLCJfY3JlYXRlaHJlZmZyb211cmwiLCJfaW52YWxpZGF0ZWNhY2hlYmVsb3dmbGlnaHRzZWdtZW50cGF0aCIsIl9maWxsY2FjaGV3aXRoZGF0YXByb3BlcnR5IiwiX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZSIsIl9zaG91bGRoYXJkbmF2aWdhdGUiLCJfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0IiwiX3JvdXRlcnJlZHVjZXJ0eXBlcyIsIl9oYW5kbGVtdXRhYmxlIiwiX2FwcGx5ZmxpZ2h0ZGF0YSIsIl9nZXRwcmVmZXRjaGNhY2hlZW50cnlzdGF0dXMiLCJfcHJ1bmVwcmVmZXRjaGNhY2hlIiwiX3ByZWZldGNocmVkdWNlciIsIl9hcHByb3V0ZXIiLCJfc2VnbWVudCIsIl9wcHJuYXZpZ2F0aW9ucyIsIl9jcmVhdGVwcmVmZXRjaGNhY2hla2V5Iiwic3RhdGUiLCJtdXRhYmxlIiwidXJsIiwicGVuZGluZ1B1c2giLCJtcGFOYXZpZ2F0aW9uIiwiY2Fub25pY2FsVXJsIiwic2Nyb2xsYWJsZVNlZ21lbnRzIiwidW5kZWZpbmVkIiwiaGFuZGxlTXV0YWJsZSIsImdlbmVyYXRlU2VnbWVudHNGcm9tUGF0Y2giLCJmbGlnaHRSb3V0ZXJQYXRjaCIsInNlZ21lbnRzIiwic2VnbWVudCIsInBhcmFsbGVsUm91dGVzIiwia2V5cyIsImxlbmd0aCIsInBhcmFsbGVsUm91dGVLZXkiLCJwYXJhbGxlbFJvdXRlIiwiZW50cmllcyIsImNoaWxkU2VnbWVudCIsInB1c2giLCJhZGRSZWZldGNoVG9MZWFmU2VnbWVudHMiLCJuZXdDYWNoZSIsImN1cnJlbnRDYWNoZSIsImZsaWdodFNlZ21lbnRQYXRoIiwidHJlZVBhdGNoIiwiZGF0YSIsImFwcGxpZWRQYXRjaCIsInJzYyIsInByZWZldGNoUnNjIiwiTWFwIiwic2VnbWVudFBhdGhzVG9GaWxsIiwibWFwIiwic2VnbWVudFBhdGhzIiwiZmlsbENhY2hlV2l0aERhdGFQcm9wZXJ0eSIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUFBSIiwibmF2aWdhdGVSZWR1Y2VyX1BQUiIsIm5hdmlnYXRlUmVkdWNlcl9ub1BQUiIsImFjdGlvbiIsImlzRXh0ZXJuYWxVcmwiLCJuYXZpZ2F0ZVR5cGUiLCJzaG91bGRTY3JvbGwiLCJoYXNoIiwiaHJlZiIsImNyZWF0ZUhyZWZGcm9tVXJsIiwicHJ1bmVQcmVmZXRjaENhY2hlIiwicHJlZmV0Y2hDYWNoZSIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwidG9TdHJpbmciLCJwcmVmZXRjaENhY2hlS2V5IiwiY3JlYXRlUHJlZmV0Y2hDYWNoZUtleSIsIm5leHRVcmwiLCJwcmVmZXRjaFZhbHVlcyIsImZldGNoU2VydmVyUmVzcG9uc2UiLCJ0cmVlIiwiYnVpbGRJZCIsIlByZWZldGNoS2luZCIsIkFVVE8iLCJuZXdQcmVmZXRjaFZhbHVlIiwia2luZCIsIlRFTVBPUkFSWSIsInByZWZldGNoVGltZSIsIkRhdGUiLCJub3ciLCJ0cmVlQXRUaW1lT2ZQcmVmZXRjaCIsImxhc3RVc2VkVGltZSIsInNldCIsInByZWZldGNoRW50cnlDYWNoZVN0YXR1cyIsImdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1cyIsInByZWZldGNoUXVldWUiLCJidW1wIiwidGhlbiIsInBhcmFtIiwiZmxpZ2h0RGF0YSIsImNhbm9uaWNhbFVybE92ZXJyaWRlIiwicG9zdHBvbmVkIiwiY3VycmVudFRyZWUiLCJjYWNoZSIsImZsaWdodERhdGFQYXRoIiwic2xpY2UiLCJmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHkiLCJuZXdUcmVlIiwiYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlU2tpcERlZmF1bHQiLCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLCJjcmVhdGVFbXB0eUNhY2hlTm9kZSIsImFwcGxpZWQiLCJhcHBseUZsaWdodERhdGEiLCJQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMiLCJyZXVzYWJsZSIsInN0YWxlIiwiaGFyZE5hdmlnYXRlIiwic2hvdWxkSGFyZE5hdmlnYXRlIiwiaW52YWxpZGF0ZUNhY2hlQmVsb3dGbGlnaHRTZWdtZW50UGF0aCIsInN1YlNlZ21lbnQiLCJzY3JvbGxhYmxlU2VnbWVudFBhdGgiLCJERUZBVUxUX1NFR01FTlRfS0VZIiwicGF0Y2hlZFRyZWUiLCJoYXNoRnJhZ21lbnQiLCJfcG9zdHBvbmVkIiwicHJlZmV0Y2hlZFRyZWUiLCJzZWVkRGF0YSIsImhlYWQiLCJpc1ByZWZldGNoU3RhbGUiLCJ0YXNrIiwidXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uIiwibm9kZSIsInBhdGNoZWRSb3V0ZXJTdGF0ZSIsInJvdXRlIiwibGlzdGVuRm9yRHluYW1pY1JlcXVlc3QiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js": +/*!**********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js ***! + \**********************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n prefetchQueue: function() {\n return prefetchQueue;\n },\n prefetchReducer: function() {\n return prefetchReducer;\n }\n});\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _routerreducertypes = __webpack_require__(/*! ../router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _pruneprefetchcache = __webpack_require__(/*! ./prune-prefetch-cache */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prune-prefetch-cache.js\");\nconst _approuterheaders = __webpack_require__(/*! ../../app-router-headers */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _promisequeue = __webpack_require__(/*! ../../promise-queue */ \"(app-pages-browser)/./node_modules/next/dist/client/components/promise-queue.js\");\nconst _createprefetchcachekey = __webpack_require__(/*! ./create-prefetch-cache-key */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/create-prefetch-cache-key.js\");\nconst prefetchQueue = new _promisequeue.PromiseQueue(5);\nfunction prefetchReducer(state, action) {\n // let's prune the prefetch cache before we do anything else\n (0, _pruneprefetchcache.prunePrefetchCache)(state.prefetchCache);\n const { url } = action;\n url.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);\n const prefetchCacheKey = (0, _createprefetchcachekey.createPrefetchCacheKey)(url, state.nextUrl);\n const cacheEntry = state.prefetchCache.get(prefetchCacheKey);\n if (cacheEntry) {\n /**\n * If the cache entry present was marked as temporary, it means that we prefetched it from the navigate reducer,\n * where we didn't have the prefetch intent. We want to update it to the new, more accurate, kind here.\n */ if (cacheEntry.kind === _routerreducertypes.PrefetchKind.TEMPORARY) {\n state.prefetchCache.set(prefetchCacheKey, {\n ...cacheEntry,\n kind: action.kind\n });\n }\n /**\n * if the prefetch action was a full prefetch and that the current cache entry wasn't one, we want to re-prefetch,\n * otherwise we can re-use the current cache entry\n **/ if (!(cacheEntry.kind === _routerreducertypes.PrefetchKind.AUTO && action.kind === _routerreducertypes.PrefetchKind.FULL)) {\n return state;\n }\n }\n // fetchServerResponse is intentionally not awaited so that it can be unwrapped in the navigate-reducer\n const serverResponse = prefetchQueue.enqueue(()=>(0, _fetchserverresponse.fetchServerResponse)(url, state.tree, state.nextUrl, state.buildId, action.kind));\n // Create new tree based on the flightSegmentPath and router state patch\n state.prefetchCache.set(prefetchCacheKey, {\n // Create new tree based on the flightSegmentPath and router state patch\n treeAtTimeOfPrefetch: state.tree,\n data: serverResponse,\n kind: action.kind,\n prefetchTime: Date.now(),\n lastUsedTime: null\n });\n return state;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=prefetch-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvcHJlZmV0Y2gtcmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sdUJBQXVCQyxtQkFBT0EsQ0FBQyx3SUFBMEI7QUFDL0QsTUFBTUMsc0JBQXNCRCxtQkFBT0EsQ0FBQyxzSUFBeUI7QUFDN0QsTUFBTUUsc0JBQXNCRixtQkFBT0EsQ0FBQyw4SUFBd0I7QUFDNUQsTUFBTUcsb0JBQW9CSCxtQkFBT0EsQ0FBQyxzSEFBMEI7QUFDNUQsTUFBTUksZ0JBQWdCSixtQkFBT0EsQ0FBQyw0R0FBcUI7QUFDbkQsTUFBTUssMEJBQTBCTCxtQkFBT0EsQ0FBQyx3SkFBNkI7QUFDckUsTUFBTVQsZ0JBQWdCLElBQUlhLGNBQWNFLFlBQVksQ0FBQztBQUNyRCxTQUFTZCxnQkFBZ0JlLEtBQUssRUFBRUMsTUFBTTtJQUNsQyw0REFBNEQ7SUFDM0QsSUFBR04sb0JBQW9CTyxrQkFBa0IsRUFBRUYsTUFBTUcsYUFBYTtJQUMvRCxNQUFNLEVBQUVDLEdBQUcsRUFBRSxHQUFHSDtJQUNoQkcsSUFBSUMsWUFBWSxDQUFDQyxNQUFNLENBQUNWLGtCQUFrQlcsb0JBQW9CO0lBQzlELE1BQU1DLG1CQUFtQixDQUFDLEdBQUdWLHdCQUF3Qlcsc0JBQXNCLEVBQUVMLEtBQUtKLE1BQU1VLE9BQU87SUFDL0YsTUFBTUMsYUFBYVgsTUFBTUcsYUFBYSxDQUFDWixHQUFHLENBQUNpQjtJQUMzQyxJQUFJRyxZQUFZO1FBQ1o7OztLQUdILEdBQUcsSUFBSUEsV0FBV0MsSUFBSSxLQUFLbEIsb0JBQW9CbUIsWUFBWSxDQUFDQyxTQUFTLEVBQUU7WUFDaEVkLE1BQU1HLGFBQWEsQ0FBQ1ksR0FBRyxDQUFDUCxrQkFBa0I7Z0JBQ3RDLEdBQUdHLFVBQVU7Z0JBQ2JDLE1BQU1YLE9BQU9XLElBQUk7WUFDckI7UUFDSjtRQUNBOzs7TUFHRixHQUFHLElBQUksQ0FBRUQsQ0FBQUEsV0FBV0MsSUFBSSxLQUFLbEIsb0JBQW9CbUIsWUFBWSxDQUFDRyxJQUFJLElBQUlmLE9BQU9XLElBQUksS0FBS2xCLG9CQUFvQm1CLFlBQVksQ0FBQ0ksSUFBSSxHQUFHO1lBQ3hILE9BQU9qQjtRQUNYO0lBQ0o7SUFDQSx1R0FBdUc7SUFDdkcsTUFBTWtCLGlCQUFpQmxDLGNBQWNtQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUczQixxQkFBcUI0QixtQkFBbUIsRUFBRWhCLEtBQzNGSixNQUFNcUIsSUFBSSxFQUFFckIsTUFBTVUsT0FBTyxFQUFFVixNQUFNc0IsT0FBTyxFQUFFckIsT0FBT1csSUFBSTtJQUN6RCx3RUFBd0U7SUFDeEVaLE1BQU1HLGFBQWEsQ0FBQ1ksR0FBRyxDQUFDUCxrQkFBa0I7UUFDdEMsd0VBQXdFO1FBQ3hFZSxzQkFBc0J2QixNQUFNcUIsSUFBSTtRQUNoQ0csTUFBTU47UUFDTk4sTUFBTVgsT0FBT1csSUFBSTtRQUNqQmEsY0FBY0MsS0FBS0MsR0FBRztRQUN0QkMsY0FBYztJQUNsQjtJQUNBLE9BQU81QjtBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU9uQixRQUFRZ0QsT0FBTyxLQUFLLGNBQWUsT0FBT2hELFFBQVFnRCxPQUFPLEtBQUssWUFBWWhELFFBQVFnRCxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9oRCxRQUFRZ0QsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS25ELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWdELE9BQU8sRUFBRSxjQUFjO1FBQUUvQyxPQUFPO0lBQUs7SUFDbkVILE9BQU9vRCxNQUFNLENBQUNsRCxRQUFRZ0QsT0FBTyxFQUFFaEQ7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUWdELE9BQU87QUFDbEMsRUFFQSw0Q0FBNEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9wcmVmZXRjaC1yZWR1Y2VyLmpzPzNiM2IiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBwcmVmZXRjaFF1ZXVlOiBudWxsLFxuICAgIHByZWZldGNoUmVkdWNlcjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBwcmVmZXRjaFF1ZXVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHByZWZldGNoUXVldWU7XG4gICAgfSxcbiAgICBwcmVmZXRjaFJlZHVjZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcHJlZmV0Y2hSZWR1Y2VyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ZldGNoc2VydmVycmVzcG9uc2UgPSByZXF1aXJlKFwiLi4vZmV0Y2gtc2VydmVyLXJlc3BvbnNlXCIpO1xuY29uc3QgX3JvdXRlcnJlZHVjZXJ0eXBlcyA9IHJlcXVpcmUoXCIuLi9yb3V0ZXItcmVkdWNlci10eXBlc1wiKTtcbmNvbnN0IF9wcnVuZXByZWZldGNoY2FjaGUgPSByZXF1aXJlKFwiLi9wcnVuZS1wcmVmZXRjaC1jYWNoZVwiKTtcbmNvbnN0IF9hcHByb3V0ZXJoZWFkZXJzID0gcmVxdWlyZShcIi4uLy4uL2FwcC1yb3V0ZXItaGVhZGVyc1wiKTtcbmNvbnN0IF9wcm9taXNlcXVldWUgPSByZXF1aXJlKFwiLi4vLi4vcHJvbWlzZS1xdWV1ZVwiKTtcbmNvbnN0IF9jcmVhdGVwcmVmZXRjaGNhY2hla2V5ID0gcmVxdWlyZShcIi4vY3JlYXRlLXByZWZldGNoLWNhY2hlLWtleVwiKTtcbmNvbnN0IHByZWZldGNoUXVldWUgPSBuZXcgX3Byb21pc2VxdWV1ZS5Qcm9taXNlUXVldWUoNSk7XG5mdW5jdGlvbiBwcmVmZXRjaFJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIC8vIGxldCdzIHBydW5lIHRoZSBwcmVmZXRjaCBjYWNoZSBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxzZVxuICAgICgwLCBfcHJ1bmVwcmVmZXRjaGNhY2hlLnBydW5lUHJlZmV0Y2hDYWNoZSkoc3RhdGUucHJlZmV0Y2hDYWNoZSk7XG4gICAgY29uc3QgeyB1cmwgfSA9IGFjdGlvbjtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLmRlbGV0ZShfYXBwcm91dGVyaGVhZGVycy5ORVhUX1JTQ19VTklPTl9RVUVSWSk7XG4gICAgY29uc3QgcHJlZmV0Y2hDYWNoZUtleSA9ICgwLCBfY3JlYXRlcHJlZmV0Y2hjYWNoZWtleS5jcmVhdGVQcmVmZXRjaENhY2hlS2V5KSh1cmwsIHN0YXRlLm5leHRVcmwpO1xuICAgIGNvbnN0IGNhY2hlRW50cnkgPSBzdGF0ZS5wcmVmZXRjaENhY2hlLmdldChwcmVmZXRjaENhY2hlS2V5KTtcbiAgICBpZiAoY2FjaGVFbnRyeSkge1xuICAgICAgICAvKipcbiAgICAgKiBJZiB0aGUgY2FjaGUgZW50cnkgcHJlc2VudCB3YXMgbWFya2VkIGFzIHRlbXBvcmFyeSwgaXQgbWVhbnMgdGhhdCB3ZSBwcmVmZXRjaGVkIGl0IGZyb20gdGhlIG5hdmlnYXRlIHJlZHVjZXIsXG4gICAgICogd2hlcmUgd2UgZGlkbid0IGhhdmUgdGhlIHByZWZldGNoIGludGVudC4gV2Ugd2FudCB0byB1cGRhdGUgaXQgdG8gdGhlIG5ldywgbW9yZSBhY2N1cmF0ZSwga2luZCBoZXJlLlxuICAgICAqLyBpZiAoY2FjaGVFbnRyeS5raW5kID09PSBfcm91dGVycmVkdWNlcnR5cGVzLlByZWZldGNoS2luZC5URU1QT1JBUlkpIHtcbiAgICAgICAgICAgIHN0YXRlLnByZWZldGNoQ2FjaGUuc2V0KHByZWZldGNoQ2FjaGVLZXksIHtcbiAgICAgICAgICAgICAgICAuLi5jYWNoZUVudHJ5LFxuICAgICAgICAgICAgICAgIGtpbmQ6IGFjdGlvbi5raW5kXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgKiBpZiB0aGUgcHJlZmV0Y2ggYWN0aW9uIHdhcyBhIGZ1bGwgcHJlZmV0Y2ggYW5kIHRoYXQgdGhlIGN1cnJlbnQgY2FjaGUgZW50cnkgd2Fzbid0IG9uZSwgd2Ugd2FudCB0byByZS1wcmVmZXRjaCxcbiAgICAgKiBvdGhlcndpc2Ugd2UgY2FuIHJlLXVzZSB0aGUgY3VycmVudCBjYWNoZSBlbnRyeVxuICAgICAqKi8gaWYgKCEoY2FjaGVFbnRyeS5raW5kID09PSBfcm91dGVycmVkdWNlcnR5cGVzLlByZWZldGNoS2luZC5BVVRPICYmIGFjdGlvbi5raW5kID09PSBfcm91dGVycmVkdWNlcnR5cGVzLlByZWZldGNoS2luZC5GVUxMKSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGZldGNoU2VydmVyUmVzcG9uc2UgaXMgaW50ZW50aW9uYWxseSBub3QgYXdhaXRlZCBzbyB0aGF0IGl0IGNhbiBiZSB1bndyYXBwZWQgaW4gdGhlIG5hdmlnYXRlLXJlZHVjZXJcbiAgICBjb25zdCBzZXJ2ZXJSZXNwb25zZSA9IHByZWZldGNoUXVldWUuZW5xdWV1ZSgoKT0+KDAsIF9mZXRjaHNlcnZlcnJlc3BvbnNlLmZldGNoU2VydmVyUmVzcG9uc2UpKHVybCwgLy8gaW5pdGlhbFRyZWUgaXMgdXNlZCB3aGVuIGhpc3Rvcnkuc3RhdGUudHJlZSBpcyBtaXNzaW5nIGJlY2F1c2UgdGhlIGhpc3Rvcnkgc3RhdGUgaXMgc2V0IGluIGB1c2VFZmZlY3RgIGJlbG93LCBpdCBiZWluZyBtaXNzaW5nIG1lYW5zIHRoaXMgaXMgdGhlIGh5ZHJhdGlvbiBjYXNlLlxuICAgICAgICBzdGF0ZS50cmVlLCBzdGF0ZS5uZXh0VXJsLCBzdGF0ZS5idWlsZElkLCBhY3Rpb24ua2luZCkpO1xuICAgIC8vIENyZWF0ZSBuZXcgdHJlZSBiYXNlZCBvbiB0aGUgZmxpZ2h0U2VnbWVudFBhdGggYW5kIHJvdXRlciBzdGF0ZSBwYXRjaFxuICAgIHN0YXRlLnByZWZldGNoQ2FjaGUuc2V0KHByZWZldGNoQ2FjaGVLZXksIHtcbiAgICAgICAgLy8gQ3JlYXRlIG5ldyB0cmVlIGJhc2VkIG9uIHRoZSBmbGlnaHRTZWdtZW50UGF0aCBhbmQgcm91dGVyIHN0YXRlIHBhdGNoXG4gICAgICAgIHRyZWVBdFRpbWVPZlByZWZldGNoOiBzdGF0ZS50cmVlLFxuICAgICAgICBkYXRhOiBzZXJ2ZXJSZXNwb25zZSxcbiAgICAgICAga2luZDogYWN0aW9uLmtpbmQsXG4gICAgICAgIHByZWZldGNoVGltZTogRGF0ZS5ub3coKSxcbiAgICAgICAgbGFzdFVzZWRUaW1lOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHN0YXRlO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVmZXRjaC1yZWR1Y2VyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsInByZWZldGNoUXVldWUiLCJwcmVmZXRjaFJlZHVjZXIiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZmV0Y2hzZXJ2ZXJyZXNwb25zZSIsInJlcXVpcmUiLCJfcm91dGVycmVkdWNlcnR5cGVzIiwiX3BydW5lcHJlZmV0Y2hjYWNoZSIsIl9hcHByb3V0ZXJoZWFkZXJzIiwiX3Byb21pc2VxdWV1ZSIsIl9jcmVhdGVwcmVmZXRjaGNhY2hla2V5IiwiUHJvbWlzZVF1ZXVlIiwic3RhdGUiLCJhY3Rpb24iLCJwcnVuZVByZWZldGNoQ2FjaGUiLCJwcmVmZXRjaENhY2hlIiwidXJsIiwic2VhcmNoUGFyYW1zIiwiZGVsZXRlIiwiTkVYVF9SU0NfVU5JT05fUVVFUlkiLCJwcmVmZXRjaENhY2hlS2V5IiwiY3JlYXRlUHJlZmV0Y2hDYWNoZUtleSIsIm5leHRVcmwiLCJjYWNoZUVudHJ5Iiwia2luZCIsIlByZWZldGNoS2luZCIsIlRFTVBPUkFSWSIsInNldCIsIkFVVE8iLCJGVUxMIiwic2VydmVyUmVzcG9uc2UiLCJlbnF1ZXVlIiwiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIsInRyZWUiLCJidWlsZElkIiwidHJlZUF0VGltZU9mUHJlZmV0Y2giLCJkYXRhIiwicHJlZmV0Y2hUaW1lIiwiRGF0ZSIsIm5vdyIsImxhc3RVc2VkVGltZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prune-prefetch-cache.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/prune-prefetch-cache.js ***! + \**************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"prunePrefetchCache\", ({\n enumerable: true,\n get: function() {\n return prunePrefetchCache;\n }\n}));\nconst _getprefetchcacheentrystatus = __webpack_require__(/*! ../get-prefetch-cache-entry-status */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/get-prefetch-cache-entry-status.js\");\nfunction prunePrefetchCache(prefetchCache) {\n for (const [href, prefetchCacheEntry] of prefetchCache){\n if ((0, _getprefetchcacheentrystatus.getPrefetchEntryCacheStatus)(prefetchCacheEntry) === _getprefetchcacheentrystatus.PrefetchCacheEntryStatus.expired) {\n prefetchCache.delete(href);\n }\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=prune-prefetch-cache.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvcHJ1bmUtcHJlZmV0Y2gtY2FjaGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLCtCQUErQkMsbUJBQU9BLENBQUMsNEpBQW9DO0FBQ2pGLFNBQVNGLG1CQUFtQkcsYUFBYTtJQUNyQyxLQUFLLE1BQU0sQ0FBQ0MsTUFBTUMsbUJBQW1CLElBQUlGLGNBQWM7UUFDbkQsSUFBSSxDQUFDLEdBQUdGLDZCQUE2QkssMkJBQTJCLEVBQUVELHdCQUF3QkosNkJBQTZCTSx3QkFBd0IsQ0FBQ0MsT0FBTyxFQUFFO1lBQ3JKTCxjQUFjTSxNQUFNLENBQUNMO1FBQ3pCO0lBQ0o7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPUixRQUFRYyxPQUFPLEtBQUssY0FBZSxPQUFPZCxRQUFRYyxPQUFPLEtBQUssWUFBWWQsUUFBUWMsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPZCxRQUFRYyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLakIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRYyxPQUFPLEVBQUUsY0FBYztRQUFFYixPQUFPO0lBQUs7SUFDbkVILE9BQU9rQixNQUFNLENBQUNoQixRQUFRYyxPQUFPLEVBQUVkO0lBQy9CaUIsT0FBT2pCLE9BQU8sR0FBR0EsUUFBUWMsT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3BydW5lLXByZWZldGNoLWNhY2hlLmpzPzFiZmMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcnVuZVByZWZldGNoQ2FjaGVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHBydW5lUHJlZmV0Y2hDYWNoZTtcbiAgICB9XG59KTtcbmNvbnN0IF9nZXRwcmVmZXRjaGNhY2hlZW50cnlzdGF0dXMgPSByZXF1aXJlKFwiLi4vZ2V0LXByZWZldGNoLWNhY2hlLWVudHJ5LXN0YXR1c1wiKTtcbmZ1bmN0aW9uIHBydW5lUHJlZmV0Y2hDYWNoZShwcmVmZXRjaENhY2hlKSB7XG4gICAgZm9yIChjb25zdCBbaHJlZiwgcHJlZmV0Y2hDYWNoZUVudHJ5XSBvZiBwcmVmZXRjaENhY2hlKXtcbiAgICAgICAgaWYgKCgwLCBfZ2V0cHJlZmV0Y2hjYWNoZWVudHJ5c3RhdHVzLmdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1cykocHJlZmV0Y2hDYWNoZUVudHJ5KSA9PT0gX2dldHByZWZldGNoY2FjaGVlbnRyeXN0YXR1cy5QcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuZXhwaXJlZCkge1xuICAgICAgICAgICAgcHJlZmV0Y2hDYWNoZS5kZWxldGUoaHJlZik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBydW5lLXByZWZldGNoLWNhY2hlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJwcnVuZVByZWZldGNoQ2FjaGUiLCJfZ2V0cHJlZmV0Y2hjYWNoZWVudHJ5c3RhdHVzIiwicmVxdWlyZSIsInByZWZldGNoQ2FjaGUiLCJocmVmIiwicHJlZmV0Y2hDYWNoZUVudHJ5IiwiZ2V0UHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzIiwiUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzIiwiZXhwaXJlZCIsImRlbGV0ZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prune-prefetch-cache.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js": +/*!*********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js ***! + \*********************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"refreshReducer\", ({\n enumerable: true,\n get: function() {\n return refreshReducer;\n }\n}));\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ../fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\nfunction refreshReducer(state, action) {\n const { origin } = action;\n const mutable = {};\n const href = state.canonicalUrl;\n let currentTree = state.tree;\n mutable.preserveCustomHistoryState = false;\n const cache = (0, _approuter.createEmptyCacheNode)();\n // TODO-APP: verify that `href` is not an external url.\n // Fetch data from the root of the tree.\n cache.lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(href, origin), [\n currentTree[0],\n currentTree[1],\n currentTree[2],\n \"refetch\"\n ], state.nextUrl, state.buildId);\n return cache.lazyData.then((param)=>{\n let [flightData, canonicalUrlOverride] = param;\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === \"string\") {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n // Remove cache.lazyData as it has been resolved at this point.\n cache.lazyData = null;\n for (const flightDataPath of flightData){\n // FlightDataPath with more than two items means unexpected Flight data was returned\n if (flightDataPath.length !== 3) {\n // TODO-APP: handle this case better\n console.log(\"REFRESH FAILED\");\n return state;\n }\n // Given the path can only have two items the items are only the router state and rsc for the root.\n const [treePatch] = flightDataPath;\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToFullTree)([\n \"\"\n ], currentTree, treePatch);\n if (newTree === null) {\n return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, href, state.pushRef.pendingPush);\n }\n const canonicalUrlOverrideHref = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : undefined;\n if (canonicalUrlOverride) {\n mutable.canonicalUrl = canonicalUrlOverrideHref;\n }\n // The one before last item is the router state tree patch\n const [cacheNodeSeedData, head] = flightDataPath.slice(-2);\n // Handles case where prefetch only returns the router tree patch without rendered components.\n if (cacheNodeSeedData !== null) {\n const rsc = cacheNodeSeedData[2];\n cache.rsc = rsc;\n cache.prefetchRsc = null;\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(cache, undefined, treePatch, cacheNodeSeedData, head);\n mutable.cache = cache;\n mutable.prefetchCache = new Map();\n }\n mutable.patchedTree = newTree;\n mutable.canonicalUrl = href;\n currentTree = newTree;\n }\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, ()=>state);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=refresh-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvcmVmcmVzaC1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxrREFBaUQ7SUFDN0NJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyx1QkFBdUJDLG1CQUFPQSxDQUFDLHdJQUEwQjtBQUMvRCxNQUFNQyxxQkFBcUJELG1CQUFPQSxDQUFDLHNJQUF5QjtBQUM1RCxNQUFNRSwrQkFBK0JGLG1CQUFPQSxDQUFDLDhKQUFxQztBQUNsRixNQUFNRywrQkFBK0JILG1CQUFPQSxDQUFDLDhKQUFxQztBQUNsRixNQUFNSSxtQkFBbUJKLG1CQUFPQSxDQUFDLHNJQUFvQjtBQUNyRCxNQUFNSyxpQkFBaUJMLG1CQUFPQSxDQUFDLDBIQUFtQjtBQUNsRCxNQUFNTSxpQ0FBaUNOLG1CQUFPQSxDQUFDLG9LQUF3QztBQUN2RixNQUFNTyxhQUFhUCxtQkFBT0EsQ0FBQyxzR0FBa0I7QUFDN0MsTUFBTVEseUJBQXlCUixtQkFBT0EsQ0FBQyw0SUFBNEI7QUFDbkUsU0FBU0YsZUFBZVcsS0FBSyxFQUFFQyxNQUFNO0lBQ2pDLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdEO0lBQ25CLE1BQU1FLFVBQVUsQ0FBQztJQUNqQixNQUFNQyxPQUFPSixNQUFNSyxZQUFZO0lBQy9CLElBQUlDLGNBQWNOLE1BQU1PLElBQUk7SUFDNUJKLFFBQVFLLDBCQUEwQixHQUFHO0lBQ3JDLE1BQU1DLFFBQVEsQ0FBQyxHQUFHWCxXQUFXWSxvQkFBb0I7SUFDakQsdURBQXVEO0lBQ3ZELHdDQUF3QztJQUN4Q0QsTUFBTUUsUUFBUSxHQUFHLENBQUMsR0FBR3JCLHFCQUFxQnNCLG1CQUFtQixFQUFFLElBQUlDLElBQUlULE1BQU1GLFNBQVM7UUFDbEZJLFdBQVcsQ0FBQyxFQUFFO1FBQ2RBLFdBQVcsQ0FBQyxFQUFFO1FBQ2RBLFdBQVcsQ0FBQyxFQUFFO1FBQ2Q7S0FDSCxFQUFFTixNQUFNYyxPQUFPLEVBQUVkLE1BQU1lLE9BQU87SUFDL0IsT0FBT04sTUFBTUUsUUFBUSxDQUFDSyxJQUFJLENBQUMsQ0FBQ0M7UUFDeEIsSUFBSSxDQUFDQyxZQUFZQyxxQkFBcUIsR0FBR0Y7UUFDekMsNERBQTREO1FBQzVELElBQUksT0FBT0MsZUFBZSxVQUFVO1lBQ2hDLE9BQU8sQ0FBQyxHQUFHdkIsaUJBQWlCeUIsaUJBQWlCLEVBQUVwQixPQUFPRyxTQUFTZSxZQUFZbEIsTUFBTXFCLE9BQU8sQ0FBQ0MsV0FBVztRQUN4RztRQUNBLCtEQUErRDtRQUMvRGIsTUFBTUUsUUFBUSxHQUFHO1FBQ2pCLEtBQUssTUFBTVksa0JBQWtCTCxXQUFXO1lBQ3BDLG9GQUFvRjtZQUNwRixJQUFJSyxlQUFlQyxNQUFNLEtBQUssR0FBRztnQkFDN0Isb0NBQW9DO2dCQUNwQ0MsUUFBUUMsR0FBRyxDQUFDO2dCQUNaLE9BQU8xQjtZQUNYO1lBQ0EsbUdBQW1HO1lBQ25HLE1BQU0sQ0FBQzJCLFVBQVUsR0FBR0o7WUFDcEIsTUFBTUssVUFBVSxDQUFDLEdBQUduQyw2QkFBNkJvQywrQkFBK0IsRUFDaEY7Z0JBQ0k7YUFDSCxFQUFFdkIsYUFBYXFCO1lBQ2hCLElBQUlDLFlBQVksTUFBTTtnQkFDbEIsT0FBTyxDQUFDLEdBQUc3Qix1QkFBdUIrQixxQkFBcUIsRUFBRTlCLE9BQU9DLFFBQVEwQjtZQUM1RTtZQUNBLElBQUksQ0FBQyxHQUFHakMsNkJBQTZCcUMsMkJBQTJCLEVBQUV6QixhQUFhc0IsVUFBVTtnQkFDckYsT0FBTyxDQUFDLEdBQUdqQyxpQkFBaUJ5QixpQkFBaUIsRUFBRXBCLE9BQU9HLFNBQVNDLE1BQU1KLE1BQU1xQixPQUFPLENBQUNDLFdBQVc7WUFDbEc7WUFDQSxNQUFNVSwyQkFBMkJiLHVCQUF1QixDQUFDLEdBQUczQixtQkFBbUJ5QyxpQkFBaUIsRUFBRWQsd0JBQXdCZTtZQUMxSCxJQUFJZixzQkFBc0I7Z0JBQ3RCaEIsUUFBUUUsWUFBWSxHQUFHMkI7WUFDM0I7WUFDQSwwREFBMEQ7WUFDMUQsTUFBTSxDQUFDRyxtQkFBbUJDLEtBQUssR0FBR2IsZUFBZWMsS0FBSyxDQUFDLENBQUM7WUFDeEQsOEZBQThGO1lBQzlGLElBQUlGLHNCQUFzQixNQUFNO2dCQUM1QixNQUFNRyxNQUFNSCxpQkFBaUIsQ0FBQyxFQUFFO2dCQUNoQzFCLE1BQU02QixHQUFHLEdBQUdBO2dCQUNaN0IsTUFBTThCLFdBQVcsR0FBRztnQkFDbkIsSUFBRzFDLCtCQUErQjJDLDZCQUE2QixFQUFFL0IsT0FDbEV5QixXQUFXUCxXQUFXUSxtQkFBbUJDO2dCQUN6Q2pDLFFBQVFNLEtBQUssR0FBR0E7Z0JBQ2hCTixRQUFRc0MsYUFBYSxHQUFHLElBQUlDO1lBQ2hDO1lBQ0F2QyxRQUFRd0MsV0FBVyxHQUFHZjtZQUN0QnpCLFFBQVFFLFlBQVksR0FBR0Q7WUFDdkJFLGNBQWNzQjtRQUNsQjtRQUNBLE9BQU8sQ0FBQyxHQUFHaEMsZUFBZWdELGFBQWEsRUFBRTVDLE9BQU9HO0lBQ3BELEdBQUcsSUFBSUg7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPZixRQUFRNEQsT0FBTyxLQUFLLGNBQWUsT0FBTzVELFFBQVE0RCxPQUFPLEtBQUssWUFBWTVELFFBQVE0RCxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU81RCxRQUFRNEQsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNySy9ELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUTRELE9BQU8sRUFBRSxjQUFjO1FBQUUzRCxPQUFPO0lBQUs7SUFDbkVILE9BQU9nRSxNQUFNLENBQUM5RCxRQUFRNEQsT0FBTyxFQUFFNUQ7SUFDL0IrRCxPQUFPL0QsT0FBTyxHQUFHQSxRQUFRNEQsT0FBTztBQUNsQyxFQUVBLDJDQUEyQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3JlZnJlc2gtcmVkdWNlci5qcz8yOTNiIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVmcmVzaFJlZHVjZXJcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJlZnJlc2hSZWR1Y2VyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ZldGNoc2VydmVycmVzcG9uc2UgPSByZXF1aXJlKFwiLi4vZmV0Y2gtc2VydmVyLXJlc3BvbnNlXCIpO1xuY29uc3QgX2NyZWF0ZWhyZWZmcm9tdXJsID0gcmVxdWlyZShcIi4uL2NyZWF0ZS1ocmVmLWZyb20tdXJsXCIpO1xuY29uc3QgX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZSA9IHJlcXVpcmUoXCIuLi9hcHBseS1yb3V0ZXItc3RhdGUtcGF0Y2gtdG8tdHJlZVwiKTtcbmNvbnN0IF9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQgPSByZXF1aXJlKFwiLi4vaXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXRcIik7XG5jb25zdCBfbmF2aWdhdGVyZWR1Y2VyID0gcmVxdWlyZShcIi4vbmF2aWdhdGUtcmVkdWNlclwiKTtcbmNvbnN0IF9oYW5kbGVtdXRhYmxlID0gcmVxdWlyZShcIi4uL2hhbmRsZS1tdXRhYmxlXCIpO1xuY29uc3QgX2ZpbGxsYXp5aXRlbXN0aWxsbGVhZndpdGhoZWFkID0gcmVxdWlyZShcIi4uL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkXCIpO1xuY29uc3QgX2FwcHJvdXRlciA9IHJlcXVpcmUoXCIuLi8uLi9hcHAtcm91dGVyXCIpO1xuY29uc3QgX2hhbmRsZXNlZ21lbnRtaXNtYXRjaCA9IHJlcXVpcmUoXCIuLi9oYW5kbGUtc2VnbWVudC1taXNtYXRjaFwiKTtcbmZ1bmN0aW9uIHJlZnJlc2hSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICBjb25zdCB7IG9yaWdpbiB9ID0gYWN0aW9uO1xuICAgIGNvbnN0IG11dGFibGUgPSB7fTtcbiAgICBjb25zdCBocmVmID0gc3RhdGUuY2Fub25pY2FsVXJsO1xuICAgIGxldCBjdXJyZW50VHJlZSA9IHN0YXRlLnRyZWU7XG4gICAgbXV0YWJsZS5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSA9IGZhbHNlO1xuICAgIGNvbnN0IGNhY2hlID0gKDAsIF9hcHByb3V0ZXIuY3JlYXRlRW1wdHlDYWNoZU5vZGUpKCk7XG4gICAgLy8gVE9ETy1BUFA6IHZlcmlmeSB0aGF0IGBocmVmYCBpcyBub3QgYW4gZXh0ZXJuYWwgdXJsLlxuICAgIC8vIEZldGNoIGRhdGEgZnJvbSB0aGUgcm9vdCBvZiB0aGUgdHJlZS5cbiAgICBjYWNoZS5sYXp5RGF0YSA9ICgwLCBfZmV0Y2hzZXJ2ZXJyZXNwb25zZS5mZXRjaFNlcnZlclJlc3BvbnNlKShuZXcgVVJMKGhyZWYsIG9yaWdpbiksIFtcbiAgICAgICAgY3VycmVudFRyZWVbMF0sXG4gICAgICAgIGN1cnJlbnRUcmVlWzFdLFxuICAgICAgICBjdXJyZW50VHJlZVsyXSxcbiAgICAgICAgXCJyZWZldGNoXCJcbiAgICBdLCBzdGF0ZS5uZXh0VXJsLCBzdGF0ZS5idWlsZElkKTtcbiAgICByZXR1cm4gY2FjaGUubGF6eURhdGEudGhlbigocGFyYW0pPT57XG4gICAgICAgIGxldCBbZmxpZ2h0RGF0YSwgY2Fub25pY2FsVXJsT3ZlcnJpZGVdID0gcGFyYW07XG4gICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZW4gbmF2aWdhdGluZyB0byBwYWdlIGluIGBwYWdlc2AgZnJvbSBgYXBwYFxuICAgICAgICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgX25hdmlnYXRlcmVkdWNlci5oYW5kbGVFeHRlcm5hbFVybCkoc3RhdGUsIG11dGFibGUsIGZsaWdodERhdGEsIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2gpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlbW92ZSBjYWNoZS5sYXp5RGF0YSBhcyBpdCBoYXMgYmVlbiByZXNvbHZlZCBhdCB0aGlzIHBvaW50LlxuICAgICAgICBjYWNoZS5sYXp5RGF0YSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZmxpZ2h0RGF0YVBhdGggb2YgZmxpZ2h0RGF0YSl7XG4gICAgICAgICAgICAvLyBGbGlnaHREYXRhUGF0aCB3aXRoIG1vcmUgdGhhbiB0d28gaXRlbXMgbWVhbnMgdW5leHBlY3RlZCBGbGlnaHQgZGF0YSB3YXMgcmV0dXJuZWRcbiAgICAgICAgICAgIGlmIChmbGlnaHREYXRhUGF0aC5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPLUFQUDogaGFuZGxlIHRoaXMgY2FzZSBiZXR0ZXJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJFRlJFU0ggRkFJTEVEXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEdpdmVuIHRoZSBwYXRoIGNhbiBvbmx5IGhhdmUgdHdvIGl0ZW1zIHRoZSBpdGVtcyBhcmUgb25seSB0aGUgcm91dGVyIHN0YXRlIGFuZCByc2MgZm9yIHRoZSByb290LlxuICAgICAgICAgICAgY29uc3QgW3RyZWVQYXRjaF0gPSBmbGlnaHREYXRhUGF0aDtcbiAgICAgICAgICAgIGNvbnN0IG5ld1RyZWUgPSAoMCwgX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZS5hcHBseVJvdXRlclN0YXRlUGF0Y2hUb0Z1bGxUcmVlKSgvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgXSwgY3VycmVudFRyZWUsIHRyZWVQYXRjaCk7XG4gICAgICAgICAgICBpZiAobmV3VHJlZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX2hhbmRsZXNlZ21lbnRtaXNtYXRjaC5oYW5kbGVTZWdtZW50TWlzbWF0Y2gpKHN0YXRlLCBhY3Rpb24sIHRyZWVQYXRjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKDAsIF9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQuaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0KShjdXJyZW50VHJlZSwgbmV3VHJlZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9uYXZpZ2F0ZXJlZHVjZXIuaGFuZGxlRXh0ZXJuYWxVcmwpKHN0YXRlLCBtdXRhYmxlLCBocmVmLCBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZiA9IGNhbm9uaWNhbFVybE92ZXJyaWRlID8gKDAsIF9jcmVhdGVocmVmZnJvbXVybC5jcmVhdGVIcmVmRnJvbVVybCkoY2Fub25pY2FsVXJsT3ZlcnJpZGUpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGNhbm9uaWNhbFVybE92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSBjYW5vbmljYWxVcmxPdmVycmlkZUhyZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUaGUgb25lIGJlZm9yZSBsYXN0IGl0ZW0gaXMgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIHBhdGNoXG4gICAgICAgICAgICBjb25zdCBbY2FjaGVOb2RlU2VlZERhdGEsIGhlYWRdID0gZmxpZ2h0RGF0YVBhdGguc2xpY2UoLTIpO1xuICAgICAgICAgICAgLy8gSGFuZGxlcyBjYXNlIHdoZXJlIHByZWZldGNoIG9ubHkgcmV0dXJucyB0aGUgcm91dGVyIHRyZWUgcGF0Y2ggd2l0aG91dCByZW5kZXJlZCBjb21wb25lbnRzLlxuICAgICAgICAgICAgaWYgKGNhY2hlTm9kZVNlZWREYXRhICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnNjID0gY2FjaGVOb2RlU2VlZERhdGFbMl07XG4gICAgICAgICAgICAgICAgY2FjaGUucnNjID0gcnNjO1xuICAgICAgICAgICAgICAgIGNhY2hlLnByZWZldGNoUnNjID0gbnVsbDtcbiAgICAgICAgICAgICAgICAoMCwgX2ZpbGxsYXp5aXRlbXN0aWxsbGVhZndpdGhoZWFkLmZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKShjYWNoZSwgLy8gRXhpc3RpbmcgY2FjaGUgaXMgbm90IHBhc3NlZCBpbiBhcyBgcm91dGVyLnJlZnJlc2goKWAgaGFzIHRvIGludmFsaWRhdGUgdGhlIGVudGlyZSBjYWNoZS5cbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsIHRyZWVQYXRjaCwgY2FjaGVOb2RlU2VlZERhdGEsIGhlYWQpO1xuICAgICAgICAgICAgICAgIG11dGFibGUuY2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICBtdXRhYmxlLnByZWZldGNoQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtdXRhYmxlLnBhdGNoZWRUcmVlID0gbmV3VHJlZTtcbiAgICAgICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gaHJlZjtcbiAgICAgICAgICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKDAsIF9oYW5kbGVtdXRhYmxlLmhhbmRsZU11dGFibGUpKHN0YXRlLCBtdXRhYmxlKTtcbiAgICB9LCAoKT0+c3RhdGUpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWZyZXNoLXJlZHVjZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInJlZnJlc2hSZWR1Y2VyIiwiX2ZldGNoc2VydmVycmVzcG9uc2UiLCJyZXF1aXJlIiwiX2NyZWF0ZWhyZWZmcm9tdXJsIiwiX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZSIsIl9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQiLCJfbmF2aWdhdGVyZWR1Y2VyIiwiX2hhbmRsZW11dGFibGUiLCJfZmlsbGxhenlpdGVtc3RpbGxsZWFmd2l0aGhlYWQiLCJfYXBwcm91dGVyIiwiX2hhbmRsZXNlZ21lbnRtaXNtYXRjaCIsInN0YXRlIiwiYWN0aW9uIiwib3JpZ2luIiwibXV0YWJsZSIsImhyZWYiLCJjYW5vbmljYWxVcmwiLCJjdXJyZW50VHJlZSIsInRyZWUiLCJwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSIsImNhY2hlIiwiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJsYXp5RGF0YSIsImZldGNoU2VydmVyUmVzcG9uc2UiLCJVUkwiLCJuZXh0VXJsIiwiYnVpbGRJZCIsInRoZW4iLCJwYXJhbSIsImZsaWdodERhdGEiLCJjYW5vbmljYWxVcmxPdmVycmlkZSIsImhhbmRsZUV4dGVybmFsVXJsIiwicHVzaFJlZiIsInBlbmRpbmdQdXNoIiwiZmxpZ2h0RGF0YVBhdGgiLCJsZW5ndGgiLCJjb25zb2xlIiwibG9nIiwidHJlZVBhdGNoIiwibmV3VHJlZSIsImFwcGx5Um91dGVyU3RhdGVQYXRjaFRvRnVsbFRyZWUiLCJoYW5kbGVTZWdtZW50TWlzbWF0Y2giLCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLCJjYW5vbmljYWxVcmxPdmVycmlkZUhyZWYiLCJjcmVhdGVIcmVmRnJvbVVybCIsInVuZGVmaW5lZCIsImNhY2hlTm9kZVNlZWREYXRhIiwiaGVhZCIsInNsaWNlIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCIsInByZWZldGNoQ2FjaGUiLCJNYXAiLCJwYXRjaGVkVHJlZSIsImhhbmRsZU11dGFibGUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js": +/*!*********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js ***! + \*********************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"restoreReducer\", ({\n enumerable: true,\n get: function() {\n return restoreReducer;\n }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _computechangedpath = __webpack_require__(/*! ../compute-changed-path */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nconst _pprnavigations = __webpack_require__(/*! ../ppr-navigations */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\");\nfunction restoreReducer(state, action) {\n const { url, tree } = action;\n const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n // This action is used to restore the router state from the history state.\n // However, it's possible that the history state no longer contains the `FlightRouterState`.\n // We will copy over the internal state on pushState/replaceState events, but if a history entry\n // occurred before hydration, or if the user navigated to a hash using a regular anchor link,\n // the history state will not contain the `FlightRouterState`.\n // In this case, we'll continue to use the existing tree so the router doesn't get into an invalid state.\n const treeToRestore = tree || state.tree;\n const oldCache = state.cache;\n const newCache = false ? // prevents an unnecessary flash back to PPR state during a\n // back/forward navigation.\n 0 : oldCache;\n var _extractPathFromFlightRouterState;\n return {\n buildId: state.buildId,\n // Set canonical url\n canonicalUrl: href,\n pushRef: {\n pendingPush: false,\n mpaNavigation: false,\n // Ensures that the custom history state that was set is preserved when applying this update.\n preserveCustomHistoryState: true\n },\n focusAndScrollRef: state.focusAndScrollRef,\n cache: newCache,\n prefetchCache: state.prefetchCache,\n // Restore provided tree\n tree: treeToRestore,\n nextUrl: (_extractPathFromFlightRouterState = (0, _computechangedpath.extractPathFromFlightRouterState)(treeToRestore)) != null ? _extractPathFromFlightRouterState : url.pathname\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=restore-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvcmVzdG9yZS1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxrREFBaUQ7SUFDN0NJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxxQkFBcUJDLG1CQUFPQSxDQUFDLHNJQUF5QjtBQUM1RCxNQUFNQyxzQkFBc0JELG1CQUFPQSxDQUFDLHNJQUF5QjtBQUM3RCxNQUFNRSxrQkFBa0JGLG1CQUFPQSxDQUFDLDRIQUFvQjtBQUNwRCxTQUFTRixlQUFlSyxLQUFLLEVBQUVDLE1BQU07SUFDakMsTUFBTSxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRSxHQUFHRjtJQUN0QixNQUFNRyxPQUFPLENBQUMsR0FBR1IsbUJBQW1CUyxpQkFBaUIsRUFBRUg7SUFDdkQsMEVBQTBFO0lBQzFFLDRGQUE0RjtJQUM1RixnR0FBZ0c7SUFDaEcsNkZBQTZGO0lBQzdGLDhEQUE4RDtJQUM5RCx5R0FBeUc7SUFDekcsTUFBTUksZ0JBQWdCSCxRQUFRSCxNQUFNRyxJQUFJO0lBQ3hDLE1BQU1JLFdBQVdQLE1BQU1RLEtBQUs7SUFDNUIsTUFBTUMsV0FBV0MsTUFBc0IsR0FHdkMsMkRBRjJEO0lBQzNELDJCQUEyQjtJQUMxQixDQUFpRkosR0FBR0M7SUFDckYsSUFBSU87SUFDSixPQUFPO1FBQ0hDLFNBQVNmLE1BQU1lLE9BQU87UUFDdEIsb0JBQW9CO1FBQ3BCQyxjQUFjWjtRQUNkYSxTQUFTO1lBQ0xDLGFBQWE7WUFDYkMsZUFBZTtZQUNmLDZGQUE2RjtZQUM3RkMsNEJBQTRCO1FBQ2hDO1FBQ0FDLG1CQUFtQnJCLE1BQU1xQixpQkFBaUI7UUFDMUNiLE9BQU9DO1FBQ1BhLGVBQWV0QixNQUFNc0IsYUFBYTtRQUNsQyx3QkFBd0I7UUFDeEJuQixNQUFNRztRQUNOaUIsU0FBUyxDQUFDVCxvQ0FBb0MsQ0FBQyxHQUFHaEIsb0JBQW9CMEIsZ0NBQWdDLEVBQUVsQixjQUFhLEtBQU0sT0FBT1Esb0NBQW9DWixJQUFJdUIsUUFBUTtJQUN0TDtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9sQyxRQUFRbUMsT0FBTyxLQUFLLGNBQWUsT0FBT25DLFFBQVFtQyxPQUFPLEtBQUssWUFBWW5DLFFBQVFtQyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9uQyxRQUFRbUMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3RDLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW1DLE9BQU8sRUFBRSxjQUFjO1FBQUVsQyxPQUFPO0lBQUs7SUFDbkVILE9BQU91QyxNQUFNLENBQUNyQyxRQUFRbUMsT0FBTyxFQUFFbkM7SUFDL0JzQyxPQUFPdEMsT0FBTyxHQUFHQSxRQUFRbUMsT0FBTztBQUNsQyxFQUVBLDJDQUEyQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3Jlc3RvcmUtcmVkdWNlci5qcz83OTNmIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVzdG9yZVJlZHVjZXJcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJlc3RvcmVSZWR1Y2VyO1xuICAgIH1cbn0pO1xuY29uc3QgX2NyZWF0ZWhyZWZmcm9tdXJsID0gcmVxdWlyZShcIi4uL2NyZWF0ZS1ocmVmLWZyb20tdXJsXCIpO1xuY29uc3QgX2NvbXB1dGVjaGFuZ2VkcGF0aCA9IHJlcXVpcmUoXCIuLi9jb21wdXRlLWNoYW5nZWQtcGF0aFwiKTtcbmNvbnN0IF9wcHJuYXZpZ2F0aW9ucyA9IHJlcXVpcmUoXCIuLi9wcHItbmF2aWdhdGlvbnNcIik7XG5mdW5jdGlvbiByZXN0b3JlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgY29uc3QgeyB1cmwsIHRyZWUgfSA9IGFjdGlvbjtcbiAgICBjb25zdCBocmVmID0gKDAsIF9jcmVhdGVocmVmZnJvbXVybC5jcmVhdGVIcmVmRnJvbVVybCkodXJsKTtcbiAgICAvLyBUaGlzIGFjdGlvbiBpcyB1c2VkIHRvIHJlc3RvcmUgdGhlIHJvdXRlciBzdGF0ZSBmcm9tIHRoZSBoaXN0b3J5IHN0YXRlLlxuICAgIC8vIEhvd2V2ZXIsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgaGlzdG9yeSBzdGF0ZSBubyBsb25nZXIgY29udGFpbnMgdGhlIGBGbGlnaHRSb3V0ZXJTdGF0ZWAuXG4gICAgLy8gV2Ugd2lsbCBjb3B5IG92ZXIgdGhlIGludGVybmFsIHN0YXRlIG9uIHB1c2hTdGF0ZS9yZXBsYWNlU3RhdGUgZXZlbnRzLCBidXQgaWYgYSBoaXN0b3J5IGVudHJ5XG4gICAgLy8gb2NjdXJyZWQgYmVmb3JlIGh5ZHJhdGlvbiwgb3IgaWYgdGhlIHVzZXIgbmF2aWdhdGVkIHRvIGEgaGFzaCB1c2luZyBhIHJlZ3VsYXIgYW5jaG9yIGxpbmssXG4gICAgLy8gdGhlIGhpc3Rvcnkgc3RhdGUgd2lsbCBub3QgY29udGFpbiB0aGUgYEZsaWdodFJvdXRlclN0YXRlYC5cbiAgICAvLyBJbiB0aGlzIGNhc2UsIHdlJ2xsIGNvbnRpbnVlIHRvIHVzZSB0aGUgZXhpc3RpbmcgdHJlZSBzbyB0aGUgcm91dGVyIGRvZXNuJ3QgZ2V0IGludG8gYW4gaW52YWxpZCBzdGF0ZS5cbiAgICBjb25zdCB0cmVlVG9SZXN0b3JlID0gdHJlZSB8fCBzdGF0ZS50cmVlO1xuICAgIGNvbnN0IG9sZENhY2hlID0gc3RhdGUuY2FjaGU7XG4gICAgY29uc3QgbmV3Q2FjaGUgPSBwcm9jZXNzLmVudi5fX05FWFRfUFBSID8gLy8gZGF0YSBmb3IgYW55IHNlZ21lbnQgd2hvc2UgZHluYW1pYyBkYXRhIHdhcyBhbHJlYWR5IHJlY2VpdmVkLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYW4gdW5uZWNlc3NhcnkgZmxhc2ggYmFjayB0byBQUFIgc3RhdGUgZHVyaW5nIGFcbiAgICAvLyBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbi5cbiAgICAoMCwgX3Bwcm5hdmlnYXRpb25zLnVwZGF0ZUNhY2hlTm9kZU9uUG9wc3RhdGVSZXN0b3JhdGlvbikob2xkQ2FjaGUsIHRyZWVUb1Jlc3RvcmUpIDogb2xkQ2FjaGU7XG4gICAgdmFyIF9leHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZTtcbiAgICByZXR1cm4ge1xuICAgICAgICBidWlsZElkOiBzdGF0ZS5idWlsZElkLFxuICAgICAgICAvLyBTZXQgY2Fub25pY2FsIHVybFxuICAgICAgICBjYW5vbmljYWxVcmw6IGhyZWYsXG4gICAgICAgIHB1c2hSZWY6IHtcbiAgICAgICAgICAgIHBlbmRpbmdQdXNoOiBmYWxzZSxcbiAgICAgICAgICAgIG1wYU5hdmlnYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgLy8gRW5zdXJlcyB0aGF0IHRoZSBjdXN0b20gaGlzdG9yeSBzdGF0ZSB0aGF0IHdhcyBzZXQgaXMgcHJlc2VydmVkIHdoZW4gYXBwbHlpbmcgdGhpcyB1cGRhdGUuXG4gICAgICAgICAgICBwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBmb2N1c0FuZFNjcm9sbFJlZjogc3RhdGUuZm9jdXNBbmRTY3JvbGxSZWYsXG4gICAgICAgIGNhY2hlOiBuZXdDYWNoZSxcbiAgICAgICAgcHJlZmV0Y2hDYWNoZTogc3RhdGUucHJlZmV0Y2hDYWNoZSxcbiAgICAgICAgLy8gUmVzdG9yZSBwcm92aWRlZCB0cmVlXG4gICAgICAgIHRyZWU6IHRyZWVUb1Jlc3RvcmUsXG4gICAgICAgIG5leHRVcmw6IChfZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUgPSAoMCwgX2NvbXB1dGVjaGFuZ2VkcGF0aC5leHRyYWN0UGF0aEZyb21GbGlnaHRSb3V0ZXJTdGF0ZSkodHJlZVRvUmVzdG9yZSkpICE9IG51bGwgPyBfZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUgOiB1cmwucGF0aG5hbWVcbiAgICB9O1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXN0b3JlLXJlZHVjZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInJlc3RvcmVSZWR1Y2VyIiwiX2NyZWF0ZWhyZWZmcm9tdXJsIiwicmVxdWlyZSIsIl9jb21wdXRlY2hhbmdlZHBhdGgiLCJfcHBybmF2aWdhdGlvbnMiLCJzdGF0ZSIsImFjdGlvbiIsInVybCIsInRyZWUiLCJocmVmIiwiY3JlYXRlSHJlZkZyb21VcmwiLCJ0cmVlVG9SZXN0b3JlIiwib2xkQ2FjaGUiLCJjYWNoZSIsIm5ld0NhY2hlIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9QUFIiLCJ1cGRhdGVDYWNoZU5vZGVPblBvcHN0YXRlUmVzdG9yYXRpb24iLCJfZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUiLCJidWlsZElkIiwiY2Fub25pY2FsVXJsIiwicHVzaFJlZiIsInBlbmRpbmdQdXNoIiwibXBhTmF2aWdhdGlvbiIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiZm9jdXNBbmRTY3JvbGxSZWYiLCJwcmVmZXRjaENhY2hlIiwibmV4dFVybCIsImV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlIiwicGF0aG5hbWUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js": +/*!***************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js ***! + \***************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"serverActionReducer\", ({\n enumerable: true,\n get: function() {\n return serverActionReducer;\n }\n}));\nconst _appcallserver = __webpack_require__(/*! ../../../app-call-server */ \"(app-pages-browser)/./node_modules/next/dist/client/app-call-server.js\");\nconst _approuterheaders = __webpack_require__(/*! ../../app-router-headers */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _addbasepath = __webpack_require__(/*! ../../../add-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ../fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _computechangedpath = __webpack_require__(/*! ../compute-changed-path */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\n// // eslint-disable-next-line import/no-extraneous-dependencies\n// import { createFromFetch } from 'react-server-dom-webpack/client'\n// // eslint-disable-next-line import/no-extraneous-dependencies\n// import { encodeReply } from 'react-server-dom-webpack/client'\nconst { createFromFetch, encodeReply } = false ? 0 : __webpack_require__(/*! react-server-dom-webpack/client */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.js\");\nasync function fetchServerAction(state, param) {\n let { actionId, actionArgs } = param;\n const body = await encodeReply(actionArgs);\n const newNextUrl = (0, _computechangedpath.extractPathFromFlightRouterState)(state.tree);\n // only pass along the `nextUrl` param (used for interception routes) if it exists and\n // if it's different from the current `nextUrl`. This indicates the route has already been intercepted,\n // and so the action should be as well. Otherwise the server action might be intercepted\n // with the wrong action id (ie, one that corresponds with the intercepted route)\n const includeNextUrl = state.nextUrl && state.nextUrl !== newNextUrl;\n const res = await fetch(\"\", {\n method: \"POST\",\n headers: {\n Accept: _approuterheaders.RSC_CONTENT_TYPE_HEADER,\n [_approuterheaders.ACTION]: actionId,\n [_approuterheaders.NEXT_ROUTER_STATE_TREE]: encodeURIComponent(JSON.stringify(state.tree)),\n ... false ? 0 : {},\n ...includeNextUrl ? {\n [_approuterheaders.NEXT_URL]: state.nextUrl\n } : {}\n },\n body\n });\n const location = res.headers.get(\"x-action-redirect\");\n let revalidatedParts;\n try {\n const revalidatedHeader = JSON.parse(res.headers.get(\"x-action-revalidated\") || \"[[],0,0]\");\n revalidatedParts = {\n paths: revalidatedHeader[0] || [],\n tag: !!revalidatedHeader[1],\n cookie: revalidatedHeader[2]\n };\n } catch (e) {\n revalidatedParts = {\n paths: [],\n tag: false,\n cookie: false\n };\n }\n const redirectLocation = location ? new URL((0, _addbasepath.addBasePath)(location), new URL(state.canonicalUrl, window.location.href)) : undefined;\n let isFlightResponse = res.headers.get(\"content-type\") === _approuterheaders.RSC_CONTENT_TYPE_HEADER;\n if (isFlightResponse) {\n const response = await createFromFetch(Promise.resolve(res), {\n callServer: _appcallserver.callServer\n });\n if (location) {\n // if it was a redirection, then result is just a regular RSC payload\n const [, actionFlightData] = response != null ? response : [];\n return {\n actionFlightData: actionFlightData,\n redirectLocation,\n revalidatedParts\n };\n }\n // otherwise it's a tuple of [actionResult, actionFlightData]\n const [actionResult, [, actionFlightData]] = response != null ? response : [];\n return {\n actionResult,\n actionFlightData,\n redirectLocation,\n revalidatedParts\n };\n }\n return {\n redirectLocation,\n revalidatedParts\n };\n}\nfunction serverActionReducer(state, action) {\n const { resolve, reject } = action;\n const mutable = {};\n const href = state.canonicalUrl;\n let currentTree = state.tree;\n mutable.preserveCustomHistoryState = false;\n mutable.inFlightServerAction = fetchServerAction(state, action);\n return mutable.inFlightServerAction.then((param)=>{\n let { actionResult, actionFlightData: flightData, redirectLocation } = param;\n // Make sure the redirection is a push instead of a replace.\n // Issue: https://github.com/vercel/next.js/issues/53911\n if (redirectLocation) {\n state.pushRef.pendingPush = true;\n mutable.pendingPush = true;\n }\n if (!flightData) {\n resolve(actionResult);\n // If there is a redirect but no flight data we need to do a mpaNavigation.\n if (redirectLocation) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, redirectLocation.href, state.pushRef.pendingPush);\n }\n return state;\n }\n if (typeof flightData === \"string\") {\n // Handle case when navigating to page in `pages` from `app`\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n // Remove cache.data as it has been resolved at this point.\n mutable.inFlightServerAction = null;\n for (const flightDataPath of flightData){\n // FlightDataPath with more than two items means unexpected Flight data was returned\n if (flightDataPath.length !== 3) {\n // TODO-APP: handle this case better\n console.log(\"SERVER ACTION APPLY FAILED\");\n return state;\n }\n // Given the path can only have two items the items are only the router state and rsc for the root.\n const [treePatch] = flightDataPath;\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToFullTree)([\n \"\"\n ], currentTree, treePatch);\n if (newTree === null) {\n return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, href, state.pushRef.pendingPush);\n }\n // The one before last item is the router state tree patch\n const [cacheNodeSeedData, head] = flightDataPath.slice(-2);\n const rsc = cacheNodeSeedData !== null ? cacheNodeSeedData[2] : null;\n // Handles case where prefetch only returns the router tree patch without rendered components.\n if (rsc !== null) {\n const cache = (0, _approuter.createEmptyCacheNode)();\n cache.rsc = rsc;\n cache.prefetchRsc = null;\n (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(cache, undefined, treePatch, cacheNodeSeedData, head);\n mutable.cache = cache;\n mutable.prefetchCache = new Map();\n }\n mutable.patchedTree = newTree;\n mutable.canonicalUrl = href;\n currentTree = newTree;\n }\n if (redirectLocation) {\n const newHref = (0, _createhreffromurl.createHrefFromUrl)(redirectLocation, false);\n mutable.canonicalUrl = newHref;\n }\n resolve(actionResult);\n return (0, _handlemutable.handleMutable)(state, mutable);\n }, (e)=>{\n // When the server action is rejected we don't update the state and instead call the reject handler of the promise.\n reject(e.reason);\n return state;\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=server-action-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvc2VydmVyLWFjdGlvbi1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx1REFBc0Q7SUFDbERJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQkFBaUJDLG1CQUFPQSxDQUFDLHdHQUEwQjtBQUN6RCxNQUFNQyxvQkFBb0JELG1CQUFPQSxDQUFDLHNIQUEwQjtBQUM1RCxNQUFNRSxlQUFlRixtQkFBT0EsQ0FBQyxvR0FBd0I7QUFDckQsTUFBTUcscUJBQXFCSCxtQkFBT0EsQ0FBQyxzSUFBeUI7QUFDNUQsTUFBTUksbUJBQW1CSixtQkFBT0EsQ0FBQyxzSUFBb0I7QUFDckQsTUFBTUssK0JBQStCTCxtQkFBT0EsQ0FBQyw4SkFBcUM7QUFDbEYsTUFBTU0sK0JBQStCTixtQkFBT0EsQ0FBQyw4SkFBcUM7QUFDbEYsTUFBTU8saUJBQWlCUCxtQkFBT0EsQ0FBQywwSEFBbUI7QUFDbEQsTUFBTVEsaUNBQWlDUixtQkFBT0EsQ0FBQyxvS0FBd0M7QUFDdkYsTUFBTVMsYUFBYVQsbUJBQU9BLENBQUMsc0dBQWtCO0FBQzdDLE1BQU1VLHNCQUFzQlYsbUJBQU9BLENBQUMsc0lBQXlCO0FBQzdELE1BQU1XLHlCQUF5QlgsbUJBQU9BLENBQUMsNElBQTRCO0FBQ25FLGdFQUFnRTtBQUNoRSxvRUFBb0U7QUFDcEUsZ0VBQWdFO0FBQ2hFLGdFQUFnRTtBQUNoRSxNQUFNLEVBQUVZLGVBQWUsRUFBRUMsV0FBVyxFQUFFLEdBQUcsTUFBMEIsR0FBR2IsQ0FBK0MsR0FBR0EsbUJBQU9BLENBQUMsaUlBQWlDO0FBQ2pLLGVBQWVpQixrQkFBa0JDLEtBQUssRUFBRUMsS0FBSztJQUN6QyxJQUFJLEVBQUVDLFFBQVEsRUFBRUMsVUFBVSxFQUFFLEdBQUdGO0lBQy9CLE1BQU1HLE9BQU8sTUFBTVQsWUFBWVE7SUFDL0IsTUFBTUUsYUFBYSxDQUFDLEdBQUdiLG9CQUFvQmMsZ0NBQWdDLEVBQUVOLE1BQU1PLElBQUk7SUFDdkYsc0ZBQXNGO0lBQ3RGLHVHQUF1RztJQUN2Ryx3RkFBd0Y7SUFDeEYsaUZBQWlGO0lBQ2pGLE1BQU1DLGlCQUFpQlIsTUFBTVMsT0FBTyxJQUFJVCxNQUFNUyxPQUFPLEtBQUtKO0lBQzFELE1BQU1LLE1BQU0sTUFBTUMsTUFBTSxJQUFJO1FBQ3hCQyxRQUFRO1FBQ1JDLFNBQVM7WUFDTEMsUUFBUS9CLGtCQUFrQmdDLHVCQUF1QjtZQUNqRCxDQUFDaEMsa0JBQWtCaUMsTUFBTSxDQUFDLEVBQUVkO1lBQzVCLENBQUNuQixrQkFBa0JrQyxzQkFBc0IsQ0FBQyxFQUFFQyxtQkFBbUJDLEtBQUtDLFNBQVMsQ0FBQ3BCLE1BQU1PLElBQUk7WUFDeEYsR0FBR1gsTUFBMEUsR0FBRyxDQUUvRSxHQUFHLENBQUMsQ0FBQztZQUNOLEdBQUdZLGlCQUFpQjtnQkFDaEIsQ0FBQ3pCLGtCQUFrQndDLFFBQVEsQ0FBQyxFQUFFdkIsTUFBTVMsT0FBTztZQUMvQyxJQUFJLENBQUMsQ0FBQztRQUNWO1FBQ0FMO0lBQ0o7SUFDQSxNQUFNb0IsV0FBV2QsSUFBSUcsT0FBTyxDQUFDbEMsR0FBRyxDQUFDO0lBQ2pDLElBQUk4QztJQUNKLElBQUk7UUFDQSxNQUFNQyxvQkFBb0JQLEtBQUtRLEtBQUssQ0FBQ2pCLElBQUlHLE9BQU8sQ0FBQ2xDLEdBQUcsQ0FBQywyQkFBMkI7UUFDaEY4QyxtQkFBbUI7WUFDZkcsT0FBT0YsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUU7WUFDakNHLEtBQUssQ0FBQyxDQUFDSCxpQkFBaUIsQ0FBQyxFQUFFO1lBQzNCSSxRQUFRSixpQkFBaUIsQ0FBQyxFQUFFO1FBQ2hDO0lBQ0osRUFBRSxPQUFPSyxHQUFHO1FBQ1JOLG1CQUFtQjtZQUNmRyxPQUFPLEVBQUU7WUFDVEMsS0FBSztZQUNMQyxRQUFRO1FBQ1o7SUFDSjtJQUNBLE1BQU1FLG1CQUFtQlIsV0FBVyxJQUFJUyxJQUFJLENBQUMsR0FBR2pELGFBQWFrRCxXQUFXLEVBQUVWLFdBQzFFLElBQUlTLElBQUlqQyxNQUFNbUMsWUFBWSxFQUFFQyxPQUFPWixRQUFRLENBQUNhLElBQUksS0FBS0M7SUFDckQsSUFBSUMsbUJBQW1CN0IsSUFBSUcsT0FBTyxDQUFDbEMsR0FBRyxDQUFDLG9CQUFvQkksa0JBQWtCZ0MsdUJBQXVCO0lBQ3BHLElBQUl3QixrQkFBa0I7UUFDbEIsTUFBTUMsV0FBVyxNQUFNOUMsZ0JBQWdCK0MsUUFBUUMsT0FBTyxDQUFDaEMsTUFBTTtZQUN6RGlDLFlBQVk5RCxlQUFlOEQsVUFBVTtRQUN6QztRQUNBLElBQUluQixVQUFVO1lBQ1YscUVBQXFFO1lBQ3JFLE1BQU0sR0FBR29CLGlCQUFpQixHQUFHSixZQUFZLE9BQU9BLFdBQVcsRUFBRTtZQUM3RCxPQUFPO2dCQUNISSxrQkFBa0JBO2dCQUNsQlo7Z0JBQ0FQO1lBQ0o7UUFDSjtRQUNBLDZEQUE2RDtRQUM3RCxNQUFNLENBQUNvQixjQUFjLEdBQUdELGlCQUFpQixDQUFDLEdBQUdKLFlBQVksT0FBT0EsV0FBVyxFQUFFO1FBQzdFLE9BQU87WUFDSEs7WUFDQUQ7WUFDQVo7WUFDQVA7UUFDSjtJQUNKO0lBQ0EsT0FBTztRQUNITztRQUNBUDtJQUNKO0FBQ0o7QUFDQSxTQUFTN0Msb0JBQW9Cb0IsS0FBSyxFQUFFOEMsTUFBTTtJQUN0QyxNQUFNLEVBQUVKLE9BQU8sRUFBRUssTUFBTSxFQUFFLEdBQUdEO0lBQzVCLE1BQU1FLFVBQVUsQ0FBQztJQUNqQixNQUFNWCxPQUFPckMsTUFBTW1DLFlBQVk7SUFDL0IsSUFBSWMsY0FBY2pELE1BQU1PLElBQUk7SUFDNUJ5QyxRQUFRRSwwQkFBMEIsR0FBRztJQUNyQ0YsUUFBUUcsb0JBQW9CLEdBQUdwRCxrQkFBa0JDLE9BQU84QztJQUN4RCxPQUFPRSxRQUFRRyxvQkFBb0IsQ0FBQ0MsSUFBSSxDQUFDLENBQUNuRDtRQUN0QyxJQUFJLEVBQUU0QyxZQUFZLEVBQUVELGtCQUFrQlMsVUFBVSxFQUFFckIsZ0JBQWdCLEVBQUUsR0FBRy9CO1FBQ3ZFLDREQUE0RDtRQUM1RCx3REFBd0Q7UUFDeEQsSUFBSStCLGtCQUFrQjtZQUNsQmhDLE1BQU1zRCxPQUFPLENBQUNDLFdBQVcsR0FBRztZQUM1QlAsUUFBUU8sV0FBVyxHQUFHO1FBQzFCO1FBQ0EsSUFBSSxDQUFDRixZQUFZO1lBQ2JYLFFBQVFHO1lBQ1IsMkVBQTJFO1lBQzNFLElBQUliLGtCQUFrQjtnQkFDbEIsT0FBTyxDQUFDLEdBQUc5QyxpQkFBaUJzRSxpQkFBaUIsRUFBRXhELE9BQU9nRCxTQUFTaEIsaUJBQWlCSyxJQUFJLEVBQUVyQyxNQUFNc0QsT0FBTyxDQUFDQyxXQUFXO1lBQ25IO1lBQ0EsT0FBT3ZEO1FBQ1g7UUFDQSxJQUFJLE9BQU9xRCxlQUFlLFVBQVU7WUFDaEMsNERBQTREO1lBQzVELE9BQU8sQ0FBQyxHQUFHbkUsaUJBQWlCc0UsaUJBQWlCLEVBQUV4RCxPQUFPZ0QsU0FBU0ssWUFBWXJELE1BQU1zRCxPQUFPLENBQUNDLFdBQVc7UUFDeEc7UUFDQSwyREFBMkQ7UUFDM0RQLFFBQVFHLG9CQUFvQixHQUFHO1FBQy9CLEtBQUssTUFBTU0sa0JBQWtCSixXQUFXO1lBQ3BDLG9GQUFvRjtZQUNwRixJQUFJSSxlQUFlQyxNQUFNLEtBQUssR0FBRztnQkFDN0Isb0NBQW9DO2dCQUNwQ0MsUUFBUUMsR0FBRyxDQUFDO2dCQUNaLE9BQU81RDtZQUNYO1lBQ0EsbUdBQW1HO1lBQ25HLE1BQU0sQ0FBQzZELFVBQVUsR0FBR0o7WUFDcEIsTUFBTUssVUFBVSxDQUFDLEdBQUczRSw2QkFBNkI0RSwrQkFBK0IsRUFDaEY7Z0JBQ0k7YUFDSCxFQUFFZCxhQUFhWTtZQUNoQixJQUFJQyxZQUFZLE1BQU07Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHckUsdUJBQXVCdUUscUJBQXFCLEVBQUVoRSxPQUFPOEMsUUFBUWU7WUFDNUU7WUFDQSxJQUFJLENBQUMsR0FBR3pFLDZCQUE2QjZFLDJCQUEyQixFQUFFaEIsYUFBYWEsVUFBVTtnQkFDckYsT0FBTyxDQUFDLEdBQUc1RSxpQkFBaUJzRSxpQkFBaUIsRUFBRXhELE9BQU9nRCxTQUFTWCxNQUFNckMsTUFBTXNELE9BQU8sQ0FBQ0MsV0FBVztZQUNsRztZQUNBLDBEQUEwRDtZQUMxRCxNQUFNLENBQUNXLG1CQUFtQkMsS0FBSyxHQUFHVixlQUFlVyxLQUFLLENBQUMsQ0FBQztZQUN4RCxNQUFNQyxNQUFNSCxzQkFBc0IsT0FBT0EsaUJBQWlCLENBQUMsRUFBRSxHQUFHO1lBQ2hFLDhGQUE4RjtZQUM5RixJQUFJRyxRQUFRLE1BQU07Z0JBQ2QsTUFBTUMsUUFBUSxDQUFDLEdBQUcvRSxXQUFXZ0Ysb0JBQW9CO2dCQUNqREQsTUFBTUQsR0FBRyxHQUFHQTtnQkFDWkMsTUFBTUUsV0FBVyxHQUFHO2dCQUNuQixJQUFHbEYsK0JBQStCbUYsNkJBQTZCLEVBQUVILE9BQ2xFaEMsV0FBV3VCLFdBQVdLLG1CQUFtQkM7Z0JBQ3pDbkIsUUFBUXNCLEtBQUssR0FBR0E7Z0JBQ2hCdEIsUUFBUTBCLGFBQWEsR0FBRyxJQUFJQztZQUNoQztZQUNBM0IsUUFBUTRCLFdBQVcsR0FBR2Q7WUFDdEJkLFFBQVFiLFlBQVksR0FBR0U7WUFDdkJZLGNBQWNhO1FBQ2xCO1FBQ0EsSUFBSTlCLGtCQUFrQjtZQUNsQixNQUFNNkMsVUFBVSxDQUFDLEdBQUc1RixtQkFBbUI2RixpQkFBaUIsRUFBRTlDLGtCQUFrQjtZQUM1RWdCLFFBQVFiLFlBQVksR0FBRzBDO1FBQzNCO1FBQ0FuQyxRQUFRRztRQUNSLE9BQU8sQ0FBQyxHQUFHeEQsZUFBZTBGLGFBQWEsRUFBRS9FLE9BQU9nRDtJQUNwRCxHQUFHLENBQUNqQjtRQUNBLG1IQUFtSDtRQUNuSGdCLE9BQU9oQixFQUFFaUQsTUFBTTtRQUNmLE9BQU9oRjtJQUNYO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT3hCLFFBQVF5RyxPQUFPLEtBQUssY0FBZSxPQUFPekcsUUFBUXlHLE9BQU8sS0FBSyxZQUFZekcsUUFBUXlHLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3pHLFFBQVF5RyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLNUcsT0FBT0MsY0FBYyxDQUFDQyxRQUFReUcsT0FBTyxFQUFFLGNBQWM7UUFBRXhHLE9BQU87SUFBSztJQUNuRUgsT0FBTzZHLE1BQU0sQ0FBQzNHLFFBQVF5RyxPQUFPLEVBQUV6RztJQUMvQjRHLE9BQU81RyxPQUFPLEdBQUdBLFFBQVF5RyxPQUFPO0FBQ2xDLEVBRUEsaURBQWlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvc2VydmVyLWFjdGlvbi1yZWR1Y2VyLmpzPzA2MTYiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXJ2ZXJBY3Rpb25SZWR1Y2VyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzZXJ2ZXJBY3Rpb25SZWR1Y2VyO1xuICAgIH1cbn0pO1xuY29uc3QgX2FwcGNhbGxzZXJ2ZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vYXBwLWNhbGwtc2VydmVyXCIpO1xuY29uc3QgX2FwcHJvdXRlcmhlYWRlcnMgPSByZXF1aXJlKFwiLi4vLi4vYXBwLXJvdXRlci1oZWFkZXJzXCIpO1xuY29uc3QgX2FkZGJhc2VwYXRoID0gcmVxdWlyZShcIi4uLy4uLy4uL2FkZC1iYXNlLXBhdGhcIik7XG5jb25zdCBfY3JlYXRlaHJlZmZyb211cmwgPSByZXF1aXJlKFwiLi4vY3JlYXRlLWhyZWYtZnJvbS11cmxcIik7XG5jb25zdCBfbmF2aWdhdGVyZWR1Y2VyID0gcmVxdWlyZShcIi4vbmF2aWdhdGUtcmVkdWNlclwiKTtcbmNvbnN0IF9hcHBseXJvdXRlcnN0YXRlcGF0Y2h0b3RyZWUgPSByZXF1aXJlKFwiLi4vYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWVcIik7XG5jb25zdCBfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0ID0gcmVxdWlyZShcIi4uL2lzLW5hdmlnYXRpbmctdG8tbmV3LXJvb3QtbGF5b3V0XCIpO1xuY29uc3QgX2hhbmRsZW11dGFibGUgPSByZXF1aXJlKFwiLi4vaGFuZGxlLW11dGFibGVcIik7XG5jb25zdCBfZmlsbGxhenlpdGVtc3RpbGxsZWFmd2l0aGhlYWQgPSByZXF1aXJlKFwiLi4vZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWRcIik7XG5jb25zdCBfYXBwcm91dGVyID0gcmVxdWlyZShcIi4uLy4uL2FwcC1yb3V0ZXJcIik7XG5jb25zdCBfY29tcHV0ZWNoYW5nZWRwYXRoID0gcmVxdWlyZShcIi4uL2NvbXB1dGUtY2hhbmdlZC1wYXRoXCIpO1xuY29uc3QgX2hhbmRsZXNlZ21lbnRtaXNtYXRjaCA9IHJlcXVpcmUoXCIuLi9oYW5kbGUtc2VnbWVudC1taXNtYXRjaFwiKTtcbi8vIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbi8vIGltcG9ydCB7IGNyZWF0ZUZyb21GZXRjaCB9IGZyb20gJ3JlYWN0LXNlcnZlci1kb20td2VicGFjay9jbGllbnQnXG4vLyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG4vLyBpbXBvcnQgeyBlbmNvZGVSZXBseSB9IGZyb20gJ3JlYWN0LXNlcnZlci1kb20td2VicGFjay9jbGllbnQnXG5jb25zdCB7IGNyZWF0ZUZyb21GZXRjaCwgZW5jb2RlUmVwbHkgfSA9ICEhcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FID8gcmVxdWlyZShcInJlYWN0LXNlcnZlci1kb20td2VicGFjay9jbGllbnQuZWRnZVwiKSA6IHJlcXVpcmUoXCJyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50XCIpO1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hTZXJ2ZXJBY3Rpb24oc3RhdGUsIHBhcmFtKSB7XG4gICAgbGV0IHsgYWN0aW9uSWQsIGFjdGlvbkFyZ3MgfSA9IHBhcmFtO1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBlbmNvZGVSZXBseShhY3Rpb25BcmdzKTtcbiAgICBjb25zdCBuZXdOZXh0VXJsID0gKDAsIF9jb21wdXRlY2hhbmdlZHBhdGguZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUpKHN0YXRlLnRyZWUpO1xuICAgIC8vIG9ubHkgcGFzcyBhbG9uZyB0aGUgYG5leHRVcmxgIHBhcmFtICh1c2VkIGZvciBpbnRlcmNlcHRpb24gcm91dGVzKSBpZiBpdCBleGlzdHMgYW5kXG4gICAgLy8gaWYgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBgbmV4dFVybGAuIFRoaXMgaW5kaWNhdGVzIHRoZSByb3V0ZSBoYXMgYWxyZWFkeSBiZWVuIGludGVyY2VwdGVkLFxuICAgIC8vIGFuZCBzbyB0aGUgYWN0aW9uIHNob3VsZCBiZSBhcyB3ZWxsLiBPdGhlcndpc2UgdGhlIHNlcnZlciBhY3Rpb24gbWlnaHQgYmUgaW50ZXJjZXB0ZWRcbiAgICAvLyB3aXRoIHRoZSB3cm9uZyBhY3Rpb24gaWQgKGllLCBvbmUgdGhhdCBjb3JyZXNwb25kcyB3aXRoIHRoZSBpbnRlcmNlcHRlZCByb3V0ZSlcbiAgICBjb25zdCBpbmNsdWRlTmV4dFVybCA9IHN0YXRlLm5leHRVcmwgJiYgc3RhdGUubmV4dFVybCAhPT0gbmV3TmV4dFVybDtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChcIlwiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIEFjY2VwdDogX2FwcHJvdXRlcmhlYWRlcnMuUlNDX0NPTlRFTlRfVFlQRV9IRUFERVIsXG4gICAgICAgICAgICBbX2FwcHJvdXRlcmhlYWRlcnMuQUNUSU9OXTogYWN0aW9uSWQsXG4gICAgICAgICAgICBbX2FwcHJvdXRlcmhlYWRlcnMuTkVYVF9ST1VURVJfU1RBVEVfVFJFRV06IGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzdGF0ZS50cmVlKSksXG4gICAgICAgICAgICAuLi5wcm9jZXNzLmVudi5fX05FWFRfQUNUSU9OU19ERVBMT1lNRU5UX0lEICYmIHByb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRCA/IHtcbiAgICAgICAgICAgICAgICBcIngtZGVwbG95bWVudC1pZFwiOiBwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSURcbiAgICAgICAgICAgIH0gOiB7fSxcbiAgICAgICAgICAgIC4uLmluY2x1ZGVOZXh0VXJsID8ge1xuICAgICAgICAgICAgICAgIFtfYXBwcm91dGVyaGVhZGVycy5ORVhUX1VSTF06IHN0YXRlLm5leHRVcmxcbiAgICAgICAgICAgIH0gOiB7fVxuICAgICAgICB9LFxuICAgICAgICBib2R5XG4gICAgfSk7XG4gICAgY29uc3QgbG9jYXRpb24gPSByZXMuaGVhZGVycy5nZXQoXCJ4LWFjdGlvbi1yZWRpcmVjdFwiKTtcbiAgICBsZXQgcmV2YWxpZGF0ZWRQYXJ0cztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXZhbGlkYXRlZEhlYWRlciA9IEpTT04ucGFyc2UocmVzLmhlYWRlcnMuZ2V0KFwieC1hY3Rpb24tcmV2YWxpZGF0ZWRcIikgfHwgXCJbW10sMCwwXVwiKTtcbiAgICAgICAgcmV2YWxpZGF0ZWRQYXJ0cyA9IHtcbiAgICAgICAgICAgIHBhdGhzOiByZXZhbGlkYXRlZEhlYWRlclswXSB8fCBbXSxcbiAgICAgICAgICAgIHRhZzogISFyZXZhbGlkYXRlZEhlYWRlclsxXSxcbiAgICAgICAgICAgIGNvb2tpZTogcmV2YWxpZGF0ZWRIZWFkZXJbMl1cbiAgICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldmFsaWRhdGVkUGFydHMgPSB7XG4gICAgICAgICAgICBwYXRoczogW10sXG4gICAgICAgICAgICB0YWc6IGZhbHNlLFxuICAgICAgICAgICAgY29va2llOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCByZWRpcmVjdExvY2F0aW9uID0gbG9jYXRpb24gPyBuZXcgVVJMKCgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKGxvY2F0aW9uKSwgLy8gRW5zdXJlIHJlbGF0aXZlIHJlZGlyZWN0cyBpbiBTZXJ2ZXIgQWN0aW9ucyB3b3JrLCBlLmcuIHJlZGlyZWN0KCcuL3NvbWV3aGVyZS1lbHNlJylcbiAgICBuZXcgVVJMKHN0YXRlLmNhbm9uaWNhbFVybCwgd2luZG93LmxvY2F0aW9uLmhyZWYpKSA6IHVuZGVmaW5lZDtcbiAgICBsZXQgaXNGbGlnaHRSZXNwb25zZSA9IHJlcy5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKSA9PT0gX2FwcHJvdXRlcmhlYWRlcnMuUlNDX0NPTlRFTlRfVFlQRV9IRUFERVI7XG4gICAgaWYgKGlzRmxpZ2h0UmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjcmVhdGVGcm9tRmV0Y2goUHJvbWlzZS5yZXNvbHZlKHJlcyksIHtcbiAgICAgICAgICAgIGNhbGxTZXJ2ZXI6IF9hcHBjYWxsc2VydmVyLmNhbGxTZXJ2ZXJcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICAgICAgLy8gaWYgaXQgd2FzIGEgcmVkaXJlY3Rpb24sIHRoZW4gcmVzdWx0IGlzIGp1c3QgYSByZWd1bGFyIFJTQyBwYXlsb2FkXG4gICAgICAgICAgICBjb25zdCBbLCBhY3Rpb25GbGlnaHREYXRhXSA9IHJlc3BvbnNlICE9IG51bGwgPyByZXNwb25zZSA6IFtdO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25GbGlnaHREYXRhOiBhY3Rpb25GbGlnaHREYXRhLFxuICAgICAgICAgICAgICAgIHJlZGlyZWN0TG9jYXRpb24sXG4gICAgICAgICAgICAgICAgcmV2YWxpZGF0ZWRQYXJ0c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UgaXQncyBhIHR1cGxlIG9mIFthY3Rpb25SZXN1bHQsIGFjdGlvbkZsaWdodERhdGFdXG4gICAgICAgIGNvbnN0IFthY3Rpb25SZXN1bHQsIFssIGFjdGlvbkZsaWdodERhdGFdXSA9IHJlc3BvbnNlICE9IG51bGwgPyByZXNwb25zZSA6IFtdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWN0aW9uUmVzdWx0LFxuICAgICAgICAgICAgYWN0aW9uRmxpZ2h0RGF0YSxcbiAgICAgICAgICAgIHJlZGlyZWN0TG9jYXRpb24sXG4gICAgICAgICAgICByZXZhbGlkYXRlZFBhcnRzXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHJlZGlyZWN0TG9jYXRpb24sXG4gICAgICAgIHJldmFsaWRhdGVkUGFydHNcbiAgICB9O1xufVxuZnVuY3Rpb24gc2VydmVyQWN0aW9uUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgY29uc3QgeyByZXNvbHZlLCByZWplY3QgfSA9IGFjdGlvbjtcbiAgICBjb25zdCBtdXRhYmxlID0ge307XG4gICAgY29uc3QgaHJlZiA9IHN0YXRlLmNhbm9uaWNhbFVybDtcbiAgICBsZXQgY3VycmVudFRyZWUgPSBzdGF0ZS50cmVlO1xuICAgIG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUgPSBmYWxzZTtcbiAgICBtdXRhYmxlLmluRmxpZ2h0U2VydmVyQWN0aW9uID0gZmV0Y2hTZXJ2ZXJBY3Rpb24oc3RhdGUsIGFjdGlvbik7XG4gICAgcmV0dXJuIG11dGFibGUuaW5GbGlnaHRTZXJ2ZXJBY3Rpb24udGhlbigocGFyYW0pPT57XG4gICAgICAgIGxldCB7IGFjdGlvblJlc3VsdCwgYWN0aW9uRmxpZ2h0RGF0YTogZmxpZ2h0RGF0YSwgcmVkaXJlY3RMb2NhdGlvbiB9ID0gcGFyYW07XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVkaXJlY3Rpb24gaXMgYSBwdXNoIGluc3RlYWQgb2YgYSByZXBsYWNlLlxuICAgICAgICAvLyBJc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2lzc3Vlcy81MzkxMVxuICAgICAgICBpZiAocmVkaXJlY3RMb2NhdGlvbikge1xuICAgICAgICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaCA9IHRydWU7XG4gICAgICAgICAgICBtdXRhYmxlLnBlbmRpbmdQdXNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZsaWdodERhdGEpIHtcbiAgICAgICAgICAgIHJlc29sdmUoYWN0aW9uUmVzdWx0KTtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVkaXJlY3QgYnV0IG5vIGZsaWdodCBkYXRhIHdlIG5lZWQgdG8gZG8gYSBtcGFOYXZpZ2F0aW9uLlxuICAgICAgICAgICAgaWYgKHJlZGlyZWN0TG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9uYXZpZ2F0ZXJlZHVjZXIuaGFuZGxlRXh0ZXJuYWxVcmwpKHN0YXRlLCBtdXRhYmxlLCByZWRpcmVjdExvY2F0aW9uLmhyZWYsIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZmxpZ2h0RGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBuYXZpZ2F0aW5nIHRvIHBhZ2UgaW4gYHBhZ2VzYCBmcm9tIGBhcHBgXG4gICAgICAgICAgICByZXR1cm4gKDAsIF9uYXZpZ2F0ZXJlZHVjZXIuaGFuZGxlRXh0ZXJuYWxVcmwpKHN0YXRlLCBtdXRhYmxlLCBmbGlnaHREYXRhLCBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgY2FjaGUuZGF0YSBhcyBpdCBoYXMgYmVlbiByZXNvbHZlZCBhdCB0aGlzIHBvaW50LlxuICAgICAgICBtdXRhYmxlLmluRmxpZ2h0U2VydmVyQWN0aW9uID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBmbGlnaHREYXRhUGF0aCBvZiBmbGlnaHREYXRhKXtcbiAgICAgICAgICAgIC8vIEZsaWdodERhdGFQYXRoIHdpdGggbW9yZSB0aGFuIHR3byBpdGVtcyBtZWFucyB1bmV4cGVjdGVkIEZsaWdodCBkYXRhIHdhcyByZXR1cm5lZFxuICAgICAgICAgICAgaWYgKGZsaWdodERhdGFQYXRoLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8tQVBQOiBoYW5kbGUgdGhpcyBjYXNlIGJldHRlclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiU0VSVkVSIEFDVElPTiBBUFBMWSBGQUlMRURcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2l2ZW4gdGhlIHBhdGggY2FuIG9ubHkgaGF2ZSB0d28gaXRlbXMgdGhlIGl0ZW1zIGFyZSBvbmx5IHRoZSByb3V0ZXIgc3RhdGUgYW5kIHJzYyBmb3IgdGhlIHJvb3QuXG4gICAgICAgICAgICBjb25zdCBbdHJlZVBhdGNoXSA9IGZsaWdodERhdGFQYXRoO1xuICAgICAgICAgICAgY29uc3QgbmV3VHJlZSA9ICgwLCBfYXBwbHlyb3V0ZXJzdGF0ZXBhdGNodG90cmVlLmFwcGx5Um91dGVyU3RhdGVQYXRjaFRvRnVsbFRyZWUpKC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcIlwiXG4gICAgICAgICAgICBdLCBjdXJyZW50VHJlZSwgdHJlZVBhdGNoKTtcbiAgICAgICAgICAgIGlmIChuZXdUcmVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfaGFuZGxlc2VnbWVudG1pc21hdGNoLmhhbmRsZVNlZ21lbnRNaXNtYXRjaCkoc3RhdGUsIGFjdGlvbiwgdHJlZVBhdGNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoMCwgX2lzbmF2aWdhdGluZ3RvbmV3cm9vdGxheW91dC5pc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQpKGN1cnJlbnRUcmVlLCBuZXdUcmVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX25hdmlnYXRlcmVkdWNlci5oYW5kbGVFeHRlcm5hbFVybCkoc3RhdGUsIG11dGFibGUsIGhyZWYsIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGhlIG9uZSBiZWZvcmUgbGFzdCBpdGVtIGlzIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSBwYXRjaFxuICAgICAgICAgICAgY29uc3QgW2NhY2hlTm9kZVNlZWREYXRhLCBoZWFkXSA9IGZsaWdodERhdGFQYXRoLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIGNvbnN0IHJzYyA9IGNhY2hlTm9kZVNlZWREYXRhICE9PSBudWxsID8gY2FjaGVOb2RlU2VlZERhdGFbMl0gOiBudWxsO1xuICAgICAgICAgICAgLy8gSGFuZGxlcyBjYXNlIHdoZXJlIHByZWZldGNoIG9ubHkgcmV0dXJucyB0aGUgcm91dGVyIHRyZWUgcGF0Y2ggd2l0aG91dCByZW5kZXJlZCBjb21wb25lbnRzLlxuICAgICAgICAgICAgaWYgKHJzYyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlID0gKDAsIF9hcHByb3V0ZXIuY3JlYXRlRW1wdHlDYWNoZU5vZGUpKCk7XG4gICAgICAgICAgICAgICAgY2FjaGUucnNjID0gcnNjO1xuICAgICAgICAgICAgICAgIGNhY2hlLnByZWZldGNoUnNjID0gbnVsbDtcbiAgICAgICAgICAgICAgICAoMCwgX2ZpbGxsYXp5aXRlbXN0aWxsbGVhZndpdGhoZWFkLmZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKShjYWNoZSwgLy8gRXhpc3RpbmcgY2FjaGUgaXMgbm90IHBhc3NlZCBpbiBhcyBgcm91dGVyLnJlZnJlc2goKWAgaGFzIHRvIGludmFsaWRhdGUgdGhlIGVudGlyZSBjYWNoZS5cbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsIHRyZWVQYXRjaCwgY2FjaGVOb2RlU2VlZERhdGEsIGhlYWQpO1xuICAgICAgICAgICAgICAgIG11dGFibGUuY2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICBtdXRhYmxlLnByZWZldGNoQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtdXRhYmxlLnBhdGNoZWRUcmVlID0gbmV3VHJlZTtcbiAgICAgICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gaHJlZjtcbiAgICAgICAgICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVkaXJlY3RMb2NhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgbmV3SHJlZiA9ICgwLCBfY3JlYXRlaHJlZmZyb211cmwuY3JlYXRlSHJlZkZyb21VcmwpKHJlZGlyZWN0TG9jYXRpb24sIGZhbHNlKTtcbiAgICAgICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gbmV3SHJlZjtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGFjdGlvblJlc3VsdCk7XG4gICAgICAgIHJldHVybiAoMCwgX2hhbmRsZW11dGFibGUuaGFuZGxlTXV0YWJsZSkoc3RhdGUsIG11dGFibGUpO1xuICAgIH0sIChlKT0+e1xuICAgICAgICAvLyBXaGVuIHRoZSBzZXJ2ZXIgYWN0aW9uIGlzIHJlamVjdGVkIHdlIGRvbid0IHVwZGF0ZSB0aGUgc3RhdGUgYW5kIGluc3RlYWQgY2FsbCB0aGUgcmVqZWN0IGhhbmRsZXIgb2YgdGhlIHByb21pc2UuXG4gICAgICAgIHJlamVjdChlLnJlYXNvbik7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VydmVyLWFjdGlvbi1yZWR1Y2VyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJzZXJ2ZXJBY3Rpb25SZWR1Y2VyIiwiX2FwcGNhbGxzZXJ2ZXIiLCJyZXF1aXJlIiwiX2FwcHJvdXRlcmhlYWRlcnMiLCJfYWRkYmFzZXBhdGgiLCJfY3JlYXRlaHJlZmZyb211cmwiLCJfbmF2aWdhdGVyZWR1Y2VyIiwiX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZSIsIl9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQiLCJfaGFuZGxlbXV0YWJsZSIsIl9maWxsbGF6eWl0ZW1zdGlsbGxlYWZ3aXRoaGVhZCIsIl9hcHByb3V0ZXIiLCJfY29tcHV0ZWNoYW5nZWRwYXRoIiwiX2hhbmRsZXNlZ21lbnRtaXNtYXRjaCIsImNyZWF0ZUZyb21GZXRjaCIsImVuY29kZVJlcGx5IiwicHJvY2VzcyIsImVudiIsIk5FWFRfUlVOVElNRSIsImZldGNoU2VydmVyQWN0aW9uIiwic3RhdGUiLCJwYXJhbSIsImFjdGlvbklkIiwiYWN0aW9uQXJncyIsImJvZHkiLCJuZXdOZXh0VXJsIiwiZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUiLCJ0cmVlIiwiaW5jbHVkZU5leHRVcmwiLCJuZXh0VXJsIiwicmVzIiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwiUlNDX0NPTlRFTlRfVFlQRV9IRUFERVIiLCJBQ1RJT04iLCJORVhUX1JPVVRFUl9TVEFURV9UUkVFIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIl9fTkVYVF9BQ1RJT05TX0RFUExPWU1FTlRfSUQiLCJORVhUX0RFUExPWU1FTlRfSUQiLCJORVhUX1VSTCIsImxvY2F0aW9uIiwicmV2YWxpZGF0ZWRQYXJ0cyIsInJldmFsaWRhdGVkSGVhZGVyIiwicGFyc2UiLCJwYXRocyIsInRhZyIsImNvb2tpZSIsImUiLCJyZWRpcmVjdExvY2F0aW9uIiwiVVJMIiwiYWRkQmFzZVBhdGgiLCJjYW5vbmljYWxVcmwiLCJ3aW5kb3ciLCJocmVmIiwidW5kZWZpbmVkIiwiaXNGbGlnaHRSZXNwb25zZSIsInJlc3BvbnNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjYWxsU2VydmVyIiwiYWN0aW9uRmxpZ2h0RGF0YSIsImFjdGlvblJlc3VsdCIsImFjdGlvbiIsInJlamVjdCIsIm11dGFibGUiLCJjdXJyZW50VHJlZSIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiaW5GbGlnaHRTZXJ2ZXJBY3Rpb24iLCJ0aGVuIiwiZmxpZ2h0RGF0YSIsInB1c2hSZWYiLCJwZW5kaW5nUHVzaCIsImhhbmRsZUV4dGVybmFsVXJsIiwiZmxpZ2h0RGF0YVBhdGgiLCJsZW5ndGgiLCJjb25zb2xlIiwibG9nIiwidHJlZVBhdGNoIiwibmV3VHJlZSIsImFwcGx5Um91dGVyU3RhdGVQYXRjaFRvRnVsbFRyZWUiLCJoYW5kbGVTZWdtZW50TWlzbWF0Y2giLCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLCJjYWNoZU5vZGVTZWVkRGF0YSIsImhlYWQiLCJzbGljZSIsInJzYyIsImNhY2hlIiwiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJwcmVmZXRjaFJzYyIsImZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkIiwicHJlZmV0Y2hDYWNoZSIsIk1hcCIsInBhdGNoZWRUcmVlIiwibmV3SHJlZiIsImNyZWF0ZUhyZWZGcm9tVXJsIiwiaGFuZGxlTXV0YWJsZSIsInJlYXNvbiIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js ***! + \**************************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"serverPatchReducer\", ({\n enumerable: true,\n get: function() {\n return serverPatchReducer;\n }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\nfunction serverPatchReducer(state, action) {\n const { flightData, overrideCanonicalUrl } = action;\n const mutable = {};\n mutable.preserveCustomHistoryState = false;\n // Handle case when navigating to page in `pages` from `app`\n if (typeof flightData === \"string\") {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n }\n let currentTree = state.tree;\n let currentCache = state.cache;\n for (const flightDataPath of flightData){\n // Slices off the last segment (which is at -4) as it doesn't exist in the tree yet\n const flightSegmentPath = flightDataPath.slice(0, -4);\n const [treePatch] = flightDataPath.slice(-3, -2);\n const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTreeSkipDefault)([\n \"\",\n ...flightSegmentPath\n ], currentTree, treePatch);\n if (newTree === null) {\n return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n }\n if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n return (0, _navigatereducer.handleExternalUrl)(state, mutable, state.canonicalUrl, state.pushRef.pendingPush);\n }\n const canonicalUrlOverrideHref = overrideCanonicalUrl ? (0, _createhreffromurl.createHrefFromUrl)(overrideCanonicalUrl) : undefined;\n if (canonicalUrlOverrideHref) {\n mutable.canonicalUrl = canonicalUrlOverrideHref;\n }\n const cache = (0, _approuter.createEmptyCacheNode)();\n (0, _applyflightdata.applyFlightData)(currentCache, cache, flightDataPath);\n mutable.patchedTree = newTree;\n mutable.cache = cache;\n currentCache = cache;\n currentTree = newTree;\n }\n return (0, _handlemutable.handleMutable)(state, mutable);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=server-patch-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvc2VydmVyLXBhdGNoLXJlZHVjZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHFCQUFxQkMsbUJBQU9BLENBQUMsc0lBQXlCO0FBQzVELE1BQU1DLCtCQUErQkQsbUJBQU9BLENBQUMsOEpBQXFDO0FBQ2xGLE1BQU1FLCtCQUErQkYsbUJBQU9BLENBQUMsOEpBQXFDO0FBQ2xGLE1BQU1HLG1CQUFtQkgsbUJBQU9BLENBQUMsc0lBQW9CO0FBQ3JELE1BQU1JLG1CQUFtQkosbUJBQU9BLENBQUMsZ0lBQXNCO0FBQ3ZELE1BQU1LLGlCQUFpQkwsbUJBQU9BLENBQUMsMEhBQW1CO0FBQ2xELE1BQU1NLGFBQWFOLG1CQUFPQSxDQUFDLHNHQUFrQjtBQUM3QyxNQUFNTyx5QkFBeUJQLG1CQUFPQSxDQUFDLDRJQUE0QjtBQUNuRSxTQUFTRixtQkFBbUJVLEtBQUssRUFBRUMsTUFBTTtJQUNyQyxNQUFNLEVBQUVDLFVBQVUsRUFBRUMsb0JBQW9CLEVBQUUsR0FBR0Y7SUFDN0MsTUFBTUcsVUFBVSxDQUFDO0lBQ2pCQSxRQUFRQywwQkFBMEIsR0FBRztJQUNyQyw0REFBNEQ7SUFDNUQsSUFBSSxPQUFPSCxlQUFlLFVBQVU7UUFDaEMsT0FBTyxDQUFDLEdBQUdQLGlCQUFpQlcsaUJBQWlCLEVBQUVOLE9BQU9JLFNBQVNGLFlBQVlGLE1BQU1PLE9BQU8sQ0FBQ0MsV0FBVztJQUN4RztJQUNBLElBQUlDLGNBQWNULE1BQU1VLElBQUk7SUFDNUIsSUFBSUMsZUFBZVgsTUFBTVksS0FBSztJQUM5QixLQUFLLE1BQU1DLGtCQUFrQlgsV0FBVztRQUNwQyxtRkFBbUY7UUFDbkYsTUFBTVksb0JBQW9CRCxlQUFlRSxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ25ELE1BQU0sQ0FBQ0MsVUFBVSxHQUFHSCxlQUFlRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDOUMsTUFBTUUsVUFBVSxDQUFDLEdBQUd4Qiw2QkFBNkJ5QixzQ0FBc0MsRUFDdkY7WUFDSTtlQUNHSjtTQUNOLEVBQUVMLGFBQWFPO1FBQ2hCLElBQUlDLFlBQVksTUFBTTtZQUNsQixPQUFPLENBQUMsR0FBR2xCLHVCQUF1Qm9CLHFCQUFxQixFQUFFbkIsT0FBT0MsUUFBUWU7UUFDNUU7UUFDQSxJQUFJLENBQUMsR0FBR3RCLDZCQUE2QjBCLDJCQUEyQixFQUFFWCxhQUFhUSxVQUFVO1lBQ3JGLE9BQU8sQ0FBQyxHQUFHdEIsaUJBQWlCVyxpQkFBaUIsRUFBRU4sT0FBT0ksU0FBU0osTUFBTXFCLFlBQVksRUFBRXJCLE1BQU1PLE9BQU8sQ0FBQ0MsV0FBVztRQUNoSDtRQUNBLE1BQU1jLDJCQUEyQm5CLHVCQUF1QixDQUFDLEdBQUdaLG1CQUFtQmdDLGlCQUFpQixFQUFFcEIsd0JBQXdCcUI7UUFDMUgsSUFBSUYsMEJBQTBCO1lBQzFCbEIsUUFBUWlCLFlBQVksR0FBR0M7UUFDM0I7UUFDQSxNQUFNVixRQUFRLENBQUMsR0FBR2QsV0FBVzJCLG9CQUFvQjtRQUNoRCxJQUFHN0IsaUJBQWlCOEIsZUFBZSxFQUFFZixjQUFjQyxPQUFPQztRQUMzRFQsUUFBUXVCLFdBQVcsR0FBR1Y7UUFDdEJiLFFBQVFRLEtBQUssR0FBR0E7UUFDaEJELGVBQWVDO1FBQ2ZILGNBQWNRO0lBQ2xCO0lBQ0EsT0FBTyxDQUFDLEdBQUdwQixlQUFlK0IsYUFBYSxFQUFFNUIsT0FBT0k7QUFDcEQ7QUFFQSxJQUFJLENBQUMsT0FBT2xCLFFBQVEyQyxPQUFPLEtBQUssY0FBZSxPQUFPM0MsUUFBUTJDLE9BQU8sS0FBSyxZQUFZM0MsUUFBUTJDLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzNDLFFBQVEyQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLOUMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMkMsT0FBTyxFQUFFLGNBQWM7UUFBRTFDLE9BQU87SUFBSztJQUNuRUgsT0FBTytDLE1BQU0sQ0FBQzdDLFFBQVEyQyxPQUFPLEVBQUUzQztJQUMvQjhDLE9BQU85QyxPQUFPLEdBQUdBLFFBQVEyQyxPQUFPO0FBQ2xDLEVBRUEsZ0RBQWdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvc2VydmVyLXBhdGNoLXJlZHVjZXIuanM/ZGFmMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlcnZlclBhdGNoUmVkdWNlclwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2VydmVyUGF0Y2hSZWR1Y2VyO1xuICAgIH1cbn0pO1xuY29uc3QgX2NyZWF0ZWhyZWZmcm9tdXJsID0gcmVxdWlyZShcIi4uL2NyZWF0ZS1ocmVmLWZyb20tdXJsXCIpO1xuY29uc3QgX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZSA9IHJlcXVpcmUoXCIuLi9hcHBseS1yb3V0ZXItc3RhdGUtcGF0Y2gtdG8tdHJlZVwiKTtcbmNvbnN0IF9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQgPSByZXF1aXJlKFwiLi4vaXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXRcIik7XG5jb25zdCBfbmF2aWdhdGVyZWR1Y2VyID0gcmVxdWlyZShcIi4vbmF2aWdhdGUtcmVkdWNlclwiKTtcbmNvbnN0IF9hcHBseWZsaWdodGRhdGEgPSByZXF1aXJlKFwiLi4vYXBwbHktZmxpZ2h0LWRhdGFcIik7XG5jb25zdCBfaGFuZGxlbXV0YWJsZSA9IHJlcXVpcmUoXCIuLi9oYW5kbGUtbXV0YWJsZVwiKTtcbmNvbnN0IF9hcHByb3V0ZXIgPSByZXF1aXJlKFwiLi4vLi4vYXBwLXJvdXRlclwiKTtcbmNvbnN0IF9oYW5kbGVzZWdtZW50bWlzbWF0Y2ggPSByZXF1aXJlKFwiLi4vaGFuZGxlLXNlZ21lbnQtbWlzbWF0Y2hcIik7XG5mdW5jdGlvbiBzZXJ2ZXJQYXRjaFJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIGNvbnN0IHsgZmxpZ2h0RGF0YSwgb3ZlcnJpZGVDYW5vbmljYWxVcmwgfSA9IGFjdGlvbjtcbiAgICBjb25zdCBtdXRhYmxlID0ge307XG4gICAgbXV0YWJsZS5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSA9IGZhbHNlO1xuICAgIC8vIEhhbmRsZSBjYXNlIHdoZW4gbmF2aWdhdGluZyB0byBwYWdlIGluIGBwYWdlc2AgZnJvbSBgYXBwYFxuICAgIGlmICh0eXBlb2YgZmxpZ2h0RGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gKDAsIF9uYXZpZ2F0ZXJlZHVjZXIuaGFuZGxlRXh0ZXJuYWxVcmwpKHN0YXRlLCBtdXRhYmxlLCBmbGlnaHREYXRhLCBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoKTtcbiAgICB9XG4gICAgbGV0IGN1cnJlbnRUcmVlID0gc3RhdGUudHJlZTtcbiAgICBsZXQgY3VycmVudENhY2hlID0gc3RhdGUuY2FjaGU7XG4gICAgZm9yIChjb25zdCBmbGlnaHREYXRhUGF0aCBvZiBmbGlnaHREYXRhKXtcbiAgICAgICAgLy8gU2xpY2VzIG9mZiB0aGUgbGFzdCBzZWdtZW50ICh3aGljaCBpcyBhdCAtNCkgYXMgaXQgZG9lc24ndCBleGlzdCBpbiB0aGUgdHJlZSB5ZXRcbiAgICAgICAgY29uc3QgZmxpZ2h0U2VnbWVudFBhdGggPSBmbGlnaHREYXRhUGF0aC5zbGljZSgwLCAtNCk7XG4gICAgICAgIGNvbnN0IFt0cmVlUGF0Y2hdID0gZmxpZ2h0RGF0YVBhdGguc2xpY2UoLTMsIC0yKTtcbiAgICAgICAgY29uc3QgbmV3VHJlZSA9ICgwLCBfYXBwbHlyb3V0ZXJzdGF0ZXBhdGNodG90cmVlLmFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZVNraXBEZWZhdWx0KSgvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgIFtcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICAuLi5mbGlnaHRTZWdtZW50UGF0aFxuICAgICAgICBdLCBjdXJyZW50VHJlZSwgdHJlZVBhdGNoKTtcbiAgICAgICAgaWYgKG5ld1RyZWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgX2hhbmRsZXNlZ21lbnRtaXNtYXRjaC5oYW5kbGVTZWdtZW50TWlzbWF0Y2gpKHN0YXRlLCBhY3Rpb24sIHRyZWVQYXRjaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgwLCBfaXNuYXZpZ2F0aW5ndG9uZXdyb290bGF5b3V0LmlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCkoY3VycmVudFRyZWUsIG5ld1RyZWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIF9uYXZpZ2F0ZXJlZHVjZXIuaGFuZGxlRXh0ZXJuYWxVcmwpKHN0YXRlLCBtdXRhYmxlLCBzdGF0ZS5jYW5vbmljYWxVcmwsIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2gpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZiA9IG92ZXJyaWRlQ2Fub25pY2FsVXJsID8gKDAsIF9jcmVhdGVocmVmZnJvbXVybC5jcmVhdGVIcmVmRnJvbVVybCkob3ZlcnJpZGVDYW5vbmljYWxVcmwpIDogdW5kZWZpbmVkO1xuICAgICAgICBpZiAoY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmKSB7XG4gICAgICAgICAgICBtdXRhYmxlLmNhbm9uaWNhbFVybCA9IGNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZSA9ICgwLCBfYXBwcm91dGVyLmNyZWF0ZUVtcHR5Q2FjaGVOb2RlKSgpO1xuICAgICAgICAoMCwgX2FwcGx5ZmxpZ2h0ZGF0YS5hcHBseUZsaWdodERhdGEpKGN1cnJlbnRDYWNoZSwgY2FjaGUsIGZsaWdodERhdGFQYXRoKTtcbiAgICAgICAgbXV0YWJsZS5wYXRjaGVkVHJlZSA9IG5ld1RyZWU7XG4gICAgICAgIG11dGFibGUuY2FjaGUgPSBjYWNoZTtcbiAgICAgICAgY3VycmVudENhY2hlID0gY2FjaGU7XG4gICAgICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBfaGFuZGxlbXV0YWJsZS5oYW5kbGVNdXRhYmxlKShzdGF0ZSwgbXV0YWJsZSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcnZlci1wYXRjaC1yZWR1Y2VyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJzZXJ2ZXJQYXRjaFJlZHVjZXIiLCJfY3JlYXRlaHJlZmZyb211cmwiLCJyZXF1aXJlIiwiX2FwcGx5cm91dGVyc3RhdGVwYXRjaHRvdHJlZSIsIl9pc25hdmlnYXRpbmd0b25ld3Jvb3RsYXlvdXQiLCJfbmF2aWdhdGVyZWR1Y2VyIiwiX2FwcGx5ZmxpZ2h0ZGF0YSIsIl9oYW5kbGVtdXRhYmxlIiwiX2FwcHJvdXRlciIsIl9oYW5kbGVzZWdtZW50bWlzbWF0Y2giLCJzdGF0ZSIsImFjdGlvbiIsImZsaWdodERhdGEiLCJvdmVycmlkZUNhbm9uaWNhbFVybCIsIm11dGFibGUiLCJwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSIsImhhbmRsZUV4dGVybmFsVXJsIiwicHVzaFJlZiIsInBlbmRpbmdQdXNoIiwiY3VycmVudFRyZWUiLCJ0cmVlIiwiY3VycmVudENhY2hlIiwiY2FjaGUiLCJmbGlnaHREYXRhUGF0aCIsImZsaWdodFNlZ21lbnRQYXRoIiwic2xpY2UiLCJ0cmVlUGF0Y2giLCJuZXdUcmVlIiwiYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlU2tpcERlZmF1bHQiLCJoYW5kbGVTZWdtZW50TWlzbWF0Y2giLCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLCJjYW5vbmljYWxVcmwiLCJjYW5vbmljYWxVcmxPdmVycmlkZUhyZWYiLCJjcmVhdGVIcmVmRnJvbVVybCIsInVuZGVmaW5lZCIsImNyZWF0ZUVtcHR5Q2FjaGVOb2RlIiwiYXBwbHlGbGlnaHREYXRhIiwicGF0Y2hlZFRyZWUiLCJoYW5kbGVNdXRhYmxlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js ***! + \*****************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n PrefetchKind: function() {\n return PrefetchKind;\n },\n ACTION_REFRESH: function() {\n return ACTION_REFRESH;\n },\n ACTION_NAVIGATE: function() {\n return ACTION_NAVIGATE;\n },\n ACTION_RESTORE: function() {\n return ACTION_RESTORE;\n },\n ACTION_SERVER_PATCH: function() {\n return ACTION_SERVER_PATCH;\n },\n ACTION_PREFETCH: function() {\n return ACTION_PREFETCH;\n },\n ACTION_FAST_REFRESH: function() {\n return ACTION_FAST_REFRESH;\n },\n ACTION_SERVER_ACTION: function() {\n return ACTION_SERVER_ACTION;\n },\n isThenable: function() {\n return isThenable;\n }\n});\nconst ACTION_REFRESH = \"refresh\";\nconst ACTION_NAVIGATE = \"navigate\";\nconst ACTION_RESTORE = \"restore\";\nconst ACTION_SERVER_PATCH = \"server-patch\";\nconst ACTION_PREFETCH = \"prefetch\";\nconst ACTION_FAST_REFRESH = \"fast-refresh\";\nconst ACTION_SERVER_ACTION = \"server-action\";\nvar PrefetchKind;\n(function(PrefetchKind) {\n PrefetchKind[\"AUTO\"] = \"auto\";\n PrefetchKind[\"FULL\"] = \"full\";\n PrefetchKind[\"TEMPORARY\"] = \"temporary\";\n})(PrefetchKind || (PrefetchKind = {}));\nfunction isThenable(value) {\n // TODO: We don't gain anything from this abstraction. It's unsound, and only\n // makes sense in the specific places where we use it. So it's better to keep\n // the type coercion inline, instead of leaking this to other places in\n // the codebase.\n return value && (typeof value === \"object\" || typeof value === \"function\") && typeof value.then === \"function\";\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=router-reducer-types.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FVTjtBQUNBLFNBQVNVLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUloQixPQUFPQyxjQUFjLENBQUNjLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUVosU0FBUztJQUNiRyxjQUFjO1FBQ1YsT0FBT0E7SUFDWDtJQUNBQyxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLGlCQUFpQjtRQUNiLE9BQU9BO0lBQ1g7SUFDQUMsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtJQUNBQyxxQkFBcUI7UUFDakIsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLHNCQUFzQjtRQUNsQixPQUFPQTtJQUNYO0lBQ0FDLFlBQVk7UUFDUixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNUCxpQkFBaUI7QUFDdkIsTUFBTUMsa0JBQWtCO0FBQ3hCLE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyxzQkFBc0I7QUFDNUIsTUFBTUMsa0JBQWtCO0FBQ3hCLE1BQU1DLHNCQUFzQjtBQUM1QixNQUFNQyx1QkFBdUI7QUFDN0IsSUFBSVA7QUFDSCxVQUFTQSxZQUFZO0lBQ2xCQSxZQUFZLENBQUMsT0FBTyxHQUFHO0lBQ3ZCQSxZQUFZLENBQUMsT0FBTyxHQUFHO0lBQ3ZCQSxZQUFZLENBQUMsWUFBWSxHQUFHO0FBQ2hDLEdBQUdBLGdCQUFpQkEsQ0FBQUEsZUFBZSxDQUFDO0FBQ3BDLFNBQVNRLFdBQVdWLEtBQUs7SUFDckIsNkVBQTZFO0lBQzdFLDZFQUE2RTtJQUM3RSx1RUFBdUU7SUFDdkUsZ0JBQWdCO0lBQ2hCLE9BQU9BLFNBQVUsUUFBT0EsVUFBVSxZQUFZLE9BQU9BLFVBQVUsVUFBUyxLQUFNLE9BQU9BLE1BQU1pQixJQUFJLEtBQUs7QUFDeEc7QUFFQSxJQUFJLENBQUMsT0FBT2xCLFFBQVFtQixPQUFPLEtBQUssY0FBZSxPQUFPbkIsUUFBUW1CLE9BQU8sS0FBSyxZQUFZbkIsUUFBUW1CLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT25CLFFBQVFtQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRbUIsT0FBTyxFQUFFLGNBQWM7UUFBRWxCLE9BQU87SUFBSztJQUNuRUgsT0FBT3VCLE1BQU0sQ0FBQ3JCLFFBQVFtQixPQUFPLEVBQUVuQjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRbUIsT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JvdXRlci1yZWR1Y2VyLXR5cGVzLmpzPzY1N2QiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBQcmVmZXRjaEtpbmQ6IG51bGwsXG4gICAgQUNUSU9OX1JFRlJFU0g6IG51bGwsXG4gICAgQUNUSU9OX05BVklHQVRFOiBudWxsLFxuICAgIEFDVElPTl9SRVNUT1JFOiBudWxsLFxuICAgIEFDVElPTl9TRVJWRVJfUEFUQ0g6IG51bGwsXG4gICAgQUNUSU9OX1BSRUZFVENIOiBudWxsLFxuICAgIEFDVElPTl9GQVNUX1JFRlJFU0g6IG51bGwsXG4gICAgQUNUSU9OX1NFUlZFUl9BQ1RJT046IG51bGwsXG4gICAgaXNUaGVuYWJsZTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBQcmVmZXRjaEtpbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUHJlZmV0Y2hLaW5kO1xuICAgIH0sXG4gICAgQUNUSU9OX1JFRlJFU0g6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OX1JFRlJFU0g7XG4gICAgfSxcbiAgICBBQ1RJT05fTkFWSUdBVEU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OX05BVklHQVRFO1xuICAgIH0sXG4gICAgQUNUSU9OX1JFU1RPUkU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OX1JFU1RPUkU7XG4gICAgfSxcbiAgICBBQ1RJT05fU0VSVkVSX1BBVENIOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTl9TRVJWRVJfUEFUQ0g7XG4gICAgfSxcbiAgICBBQ1RJT05fUFJFRkVUQ0g6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OX1BSRUZFVENIO1xuICAgIH0sXG4gICAgQUNUSU9OX0ZBU1RfUkVGUkVTSDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBQ1RJT05fRkFTVF9SRUZSRVNIO1xuICAgIH0sXG4gICAgQUNUSU9OX1NFUlZFUl9BQ1RJT046IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQUNUSU9OX1NFUlZFUl9BQ1RJT047XG4gICAgfSxcbiAgICBpc1RoZW5hYmxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzVGhlbmFibGU7XG4gICAgfVxufSk7XG5jb25zdCBBQ1RJT05fUkVGUkVTSCA9IFwicmVmcmVzaFwiO1xuY29uc3QgQUNUSU9OX05BVklHQVRFID0gXCJuYXZpZ2F0ZVwiO1xuY29uc3QgQUNUSU9OX1JFU1RPUkUgPSBcInJlc3RvcmVcIjtcbmNvbnN0IEFDVElPTl9TRVJWRVJfUEFUQ0ggPSBcInNlcnZlci1wYXRjaFwiO1xuY29uc3QgQUNUSU9OX1BSRUZFVENIID0gXCJwcmVmZXRjaFwiO1xuY29uc3QgQUNUSU9OX0ZBU1RfUkVGUkVTSCA9IFwiZmFzdC1yZWZyZXNoXCI7XG5jb25zdCBBQ1RJT05fU0VSVkVSX0FDVElPTiA9IFwic2VydmVyLWFjdGlvblwiO1xudmFyIFByZWZldGNoS2luZDtcbihmdW5jdGlvbihQcmVmZXRjaEtpbmQpIHtcbiAgICBQcmVmZXRjaEtpbmRbXCJBVVRPXCJdID0gXCJhdXRvXCI7XG4gICAgUHJlZmV0Y2hLaW5kW1wiRlVMTFwiXSA9IFwiZnVsbFwiO1xuICAgIFByZWZldGNoS2luZFtcIlRFTVBPUkFSWVwiXSA9IFwidGVtcG9yYXJ5XCI7XG59KShQcmVmZXRjaEtpbmQgfHwgKFByZWZldGNoS2luZCA9IHt9KSk7XG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlKSB7XG4gICAgLy8gVE9ETzogV2UgZG9uJ3QgZ2FpbiBhbnl0aGluZyBmcm9tIHRoaXMgYWJzdHJhY3Rpb24uIEl0J3MgdW5zb3VuZCwgYW5kIG9ubHlcbiAgICAvLyBtYWtlcyBzZW5zZSBpbiB0aGUgc3BlY2lmaWMgcGxhY2VzIHdoZXJlIHdlIHVzZSBpdC4gU28gaXQncyBiZXR0ZXIgdG8ga2VlcFxuICAgIC8vIHRoZSB0eXBlIGNvZXJjaW9uIGlubGluZSwgaW5zdGVhZCBvZiBsZWFraW5nIHRoaXMgdG8gb3RoZXIgcGxhY2VzIGluXG4gICAgLy8gdGhlIGNvZGViYXNlLlxuICAgIHJldHVybiB2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yb3V0ZXItcmVkdWNlci10eXBlcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJQcmVmZXRjaEtpbmQiLCJBQ1RJT05fUkVGUkVTSCIsIkFDVElPTl9OQVZJR0FURSIsIkFDVElPTl9SRVNUT1JFIiwiQUNUSU9OX1NFUlZFUl9QQVRDSCIsIkFDVElPTl9QUkVGRVRDSCIsIkFDVElPTl9GQVNUX1JFRlJFU0giLCJBQ1RJT05fU0VSVkVSX0FDVElPTiIsImlzVGhlbmFibGUiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJ0aGVuIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/router-reducer.js ***! + \***********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"reducer\", ({\n enumerable: true,\n get: function() {\n return reducer;\n }\n}));\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _navigatereducer = __webpack_require__(/*! ./reducers/navigate-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _serverpatchreducer = __webpack_require__(/*! ./reducers/server-patch-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js\");\nconst _restorereducer = __webpack_require__(/*! ./reducers/restore-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js\");\nconst _refreshreducer = __webpack_require__(/*! ./reducers/refresh-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./reducers/prefetch-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst _fastrefreshreducer = __webpack_require__(/*! ./reducers/fast-refresh-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/fast-refresh-reducer.js\");\nconst _serveractionreducer = __webpack_require__(/*! ./reducers/server-action-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js\");\n/**\n * Reducer that handles the app-router state updates.\n */ function clientReducer(state, action) {\n switch(action.type){\n case _routerreducertypes.ACTION_NAVIGATE:\n {\n return (0, _navigatereducer.navigateReducer)(state, action);\n }\n case _routerreducertypes.ACTION_SERVER_PATCH:\n {\n return (0, _serverpatchreducer.serverPatchReducer)(state, action);\n }\n case _routerreducertypes.ACTION_RESTORE:\n {\n return (0, _restorereducer.restoreReducer)(state, action);\n }\n case _routerreducertypes.ACTION_REFRESH:\n {\n return (0, _refreshreducer.refreshReducer)(state, action);\n }\n case _routerreducertypes.ACTION_FAST_REFRESH:\n {\n return (0, _fastrefreshreducer.fastRefreshReducer)(state, action);\n }\n case _routerreducertypes.ACTION_PREFETCH:\n {\n return (0, _prefetchreducer.prefetchReducer)(state, action);\n }\n case _routerreducertypes.ACTION_SERVER_ACTION:\n {\n return (0, _serveractionreducer.serverActionReducer)(state, action);\n }\n // This case should never be hit as dispatch is strongly typed.\n default:\n throw new Error(\"Unknown action\");\n }\n}\nfunction serverReducer(state, _action) {\n return state;\n}\nconst reducer = typeof window === \"undefined\" ? serverReducer : clientReducer;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=router-reducer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHNCQUFzQkMsbUJBQU9BLENBQUMscUlBQXdCO0FBQzVELE1BQU1DLG1CQUFtQkQsbUJBQU9BLENBQUMsK0lBQTZCO0FBQzlELE1BQU1FLHNCQUFzQkYsbUJBQU9BLENBQUMsdUpBQWlDO0FBQ3JFLE1BQU1HLGtCQUFrQkgsbUJBQU9BLENBQUMsNklBQTRCO0FBQzVELE1BQU1JLGtCQUFrQkosbUJBQU9BLENBQUMsNklBQTRCO0FBQzVELE1BQU1LLG1CQUFtQkwsbUJBQU9BLENBQUMsK0lBQTZCO0FBQzlELE1BQU1NLHNCQUFzQk4sbUJBQU9BLENBQUMsdUpBQWlDO0FBQ3JFLE1BQU1PLHVCQUF1QlAsbUJBQU9BLENBQUMseUpBQWtDO0FBQ3ZFOztDQUVDLEdBQUcsU0FBU1EsY0FBY0MsS0FBSyxFQUFFQyxNQUFNO0lBQ3BDLE9BQU9BLE9BQU9DLElBQUk7UUFDZCxLQUFLWixvQkFBb0JhLGVBQWU7WUFDcEM7Z0JBQ0ksT0FBTyxDQUFDLEdBQUdYLGlCQUFpQlksZUFBZSxFQUFFSixPQUFPQztZQUN4RDtRQUNKLEtBQUtYLG9CQUFvQmUsbUJBQW1CO1lBQ3hDO2dCQUNJLE9BQU8sQ0FBQyxHQUFHWixvQkFBb0JhLGtCQUFrQixFQUFFTixPQUFPQztZQUM5RDtRQUNKLEtBQUtYLG9CQUFvQmlCLGNBQWM7WUFDbkM7Z0JBQ0ksT0FBTyxDQUFDLEdBQUdiLGdCQUFnQmMsY0FBYyxFQUFFUixPQUFPQztZQUN0RDtRQUNKLEtBQUtYLG9CQUFvQm1CLGNBQWM7WUFDbkM7Z0JBQ0ksT0FBTyxDQUFDLEdBQUdkLGdCQUFnQmUsY0FBYyxFQUFFVixPQUFPQztZQUN0RDtRQUNKLEtBQUtYLG9CQUFvQnFCLG1CQUFtQjtZQUN4QztnQkFDSSxPQUFPLENBQUMsR0FBR2Qsb0JBQW9CZSxrQkFBa0IsRUFBRVosT0FBT0M7WUFDOUQ7UUFDSixLQUFLWCxvQkFBb0J1QixlQUFlO1lBQ3BDO2dCQUNJLE9BQU8sQ0FBQyxHQUFHakIsaUJBQWlCa0IsZUFBZSxFQUFFZCxPQUFPQztZQUN4RDtRQUNKLEtBQUtYLG9CQUFvQnlCLG9CQUFvQjtZQUN6QztnQkFDSSxPQUFPLENBQUMsR0FBR2pCLHFCQUFxQmtCLG1CQUFtQixFQUFFaEIsT0FBT0M7WUFDaEU7UUFDSiwrREFBK0Q7UUFDL0Q7WUFDSSxNQUFNLElBQUlnQixNQUFNO0lBQ3hCO0FBQ0o7QUFDQSxTQUFTQyxjQUFjbEIsS0FBSyxFQUFFbUIsT0FBTztJQUNqQyxPQUFPbkI7QUFDWDtBQUNBLE1BQU1YLFVBQVUsT0FBTytCLFdBQVcsY0FBY0YsZ0JBQWdCbkI7QUFFaEUsSUFBSSxDQUFDLE9BQU9kLFFBQVFvQyxPQUFPLEtBQUssY0FBZSxPQUFPcEMsUUFBUW9DLE9BQU8sS0FBSyxZQUFZcEMsUUFBUW9DLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3BDLFFBQVFvQyxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdkMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRb0MsT0FBTyxFQUFFLGNBQWM7UUFBRW5DLE9BQU87SUFBSztJQUNuRUgsT0FBT3dDLE1BQU0sQ0FBQ3RDLFFBQVFvQyxPQUFPLEVBQUVwQztJQUMvQnVDLE9BQU92QyxPQUFPLEdBQUdBLFFBQVFvQyxPQUFPO0FBQ2xDLEVBRUEsMENBQTBDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXIuanM/MWRkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZHVjZXJcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJlZHVjZXI7XG4gICAgfVxufSk7XG5jb25zdCBfcm91dGVycmVkdWNlcnR5cGVzID0gcmVxdWlyZShcIi4vcm91dGVyLXJlZHVjZXItdHlwZXNcIik7XG5jb25zdCBfbmF2aWdhdGVyZWR1Y2VyID0gcmVxdWlyZShcIi4vcmVkdWNlcnMvbmF2aWdhdGUtcmVkdWNlclwiKTtcbmNvbnN0IF9zZXJ2ZXJwYXRjaHJlZHVjZXIgPSByZXF1aXJlKFwiLi9yZWR1Y2Vycy9zZXJ2ZXItcGF0Y2gtcmVkdWNlclwiKTtcbmNvbnN0IF9yZXN0b3JlcmVkdWNlciA9IHJlcXVpcmUoXCIuL3JlZHVjZXJzL3Jlc3RvcmUtcmVkdWNlclwiKTtcbmNvbnN0IF9yZWZyZXNocmVkdWNlciA9IHJlcXVpcmUoXCIuL3JlZHVjZXJzL3JlZnJlc2gtcmVkdWNlclwiKTtcbmNvbnN0IF9wcmVmZXRjaHJlZHVjZXIgPSByZXF1aXJlKFwiLi9yZWR1Y2Vycy9wcmVmZXRjaC1yZWR1Y2VyXCIpO1xuY29uc3QgX2Zhc3RyZWZyZXNocmVkdWNlciA9IHJlcXVpcmUoXCIuL3JlZHVjZXJzL2Zhc3QtcmVmcmVzaC1yZWR1Y2VyXCIpO1xuY29uc3QgX3NlcnZlcmFjdGlvbnJlZHVjZXIgPSByZXF1aXJlKFwiLi9yZWR1Y2Vycy9zZXJ2ZXItYWN0aW9uLXJlZHVjZXJcIik7XG4vKipcbiAqIFJlZHVjZXIgdGhhdCBoYW5kbGVzIHRoZSBhcHAtcm91dGVyIHN0YXRlIHVwZGF0ZXMuXG4gKi8gZnVuY3Rpb24gY2xpZW50UmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gICAgc3dpdGNoKGFjdGlvbi50eXBlKXtcbiAgICAgICAgY2FzZSBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9OQVZJR0FURTpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9uYXZpZ2F0ZXJlZHVjZXIubmF2aWdhdGVSZWR1Y2VyKShzdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9TRVJWRVJfUEFUQ0g6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfc2VydmVycGF0Y2hyZWR1Y2VyLnNlcnZlclBhdGNoUmVkdWNlcikoc3RhdGUsIGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fUkVTVE9SRTpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9yZXN0b3JlcmVkdWNlci5yZXN0b3JlUmVkdWNlcikoc3RhdGUsIGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fUkVGUkVTSDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9yZWZyZXNocmVkdWNlci5yZWZyZXNoUmVkdWNlcikoc3RhdGUsIGFjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fRkFTVF9SRUZSRVNIOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX2Zhc3RyZWZyZXNocmVkdWNlci5mYXN0UmVmcmVzaFJlZHVjZXIpKHN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1BSRUZFVENIOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3ByZWZldGNocmVkdWNlci5wcmVmZXRjaFJlZHVjZXIpKHN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1NFUlZFUl9BQ1RJT046XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfc2VydmVyYWN0aW9ucmVkdWNlci5zZXJ2ZXJBY3Rpb25SZWR1Y2VyKShzdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBuZXZlciBiZSBoaXQgYXMgZGlzcGF0Y2ggaXMgc3Ryb25nbHkgdHlwZWQuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGFjdGlvblwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzZXJ2ZXJSZWR1Y2VyKHN0YXRlLCBfYWN0aW9uKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xufVxuY29uc3QgcmVkdWNlciA9IHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyBzZXJ2ZXJSZWR1Y2VyIDogY2xpZW50UmVkdWNlcjtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGVyLXJlZHVjZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInJlZHVjZXIiLCJfcm91dGVycmVkdWNlcnR5cGVzIiwicmVxdWlyZSIsIl9uYXZpZ2F0ZXJlZHVjZXIiLCJfc2VydmVycGF0Y2hyZWR1Y2VyIiwiX3Jlc3RvcmVyZWR1Y2VyIiwiX3JlZnJlc2hyZWR1Y2VyIiwiX3ByZWZldGNocmVkdWNlciIsIl9mYXN0cmVmcmVzaHJlZHVjZXIiLCJfc2VydmVyYWN0aW9ucmVkdWNlciIsImNsaWVudFJlZHVjZXIiLCJzdGF0ZSIsImFjdGlvbiIsInR5cGUiLCJBQ1RJT05fTkFWSUdBVEUiLCJuYXZpZ2F0ZVJlZHVjZXIiLCJBQ1RJT05fU0VSVkVSX1BBVENIIiwic2VydmVyUGF0Y2hSZWR1Y2VyIiwiQUNUSU9OX1JFU1RPUkUiLCJyZXN0b3JlUmVkdWNlciIsIkFDVElPTl9SRUZSRVNIIiwicmVmcmVzaFJlZHVjZXIiLCJBQ1RJT05fRkFTVF9SRUZSRVNIIiwiZmFzdFJlZnJlc2hSZWR1Y2VyIiwiQUNUSU9OX1BSRUZFVENIIiwicHJlZmV0Y2hSZWR1Y2VyIiwiQUNUSU9OX1NFUlZFUl9BQ1RJT04iLCJzZXJ2ZXJBY3Rpb25SZWR1Y2VyIiwiRXJyb3IiLCJzZXJ2ZXJSZWR1Y2VyIiwiX2FjdGlvbiIsIndpbmRvdyIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js": +/*!*****************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js ***! + \*****************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"shouldHardNavigate\", ({\n enumerable: true,\n get: function() {\n return shouldHardNavigate;\n }\n}));\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/next/dist/client/components/match-segments.js\");\nfunction shouldHardNavigate(flightSegmentPath, flightRouterState) {\n const [segment, parallelRoutes] = flightRouterState;\n // TODO-APP: Check if `as` can be replaced.\n const [currentSegment, parallelRouteKey] = flightSegmentPath;\n // Check if current segment matches the existing segment.\n if (!(0, _matchsegments.matchSegment)(currentSegment, segment)) {\n // If dynamic parameter in tree doesn't match up with segment path a hard navigation is triggered.\n if (Array.isArray(currentSegment)) {\n return true;\n }\n // If the existing segment did not match soft navigation is triggered.\n return false;\n }\n const lastSegment = flightSegmentPath.length <= 2;\n if (lastSegment) {\n return false;\n }\n return shouldHardNavigate(flightSegmentPath.slice(2), parallelRoutes[parallelRouteKey]);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=should-hard-navigate.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvc2hvdWxkLWhhcmQtbmF2aWdhdGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGlCQUFpQkMsbUJBQU9BLENBQUMsMkdBQW1CO0FBQ2xELFNBQVNGLG1CQUFtQkcsaUJBQWlCLEVBQUVDLGlCQUFpQjtJQUM1RCxNQUFNLENBQUNDLFNBQVNDLGVBQWUsR0FBR0Y7SUFDbEMsMkNBQTJDO0lBQzNDLE1BQU0sQ0FBQ0csZ0JBQWdCQyxpQkFBaUIsR0FBR0w7SUFDM0MseURBQXlEO0lBQ3pELElBQUksQ0FBQyxDQUFDLEdBQUdGLGVBQWVRLFlBQVksRUFBRUYsZ0JBQWdCRixVQUFVO1FBQzVELGtHQUFrRztRQUNsRyxJQUFJSyxNQUFNQyxPQUFPLENBQUNKLGlCQUFpQjtZQUMvQixPQUFPO1FBQ1g7UUFDQSxzRUFBc0U7UUFDdEUsT0FBTztJQUNYO0lBQ0EsTUFBTUssY0FBY1Qsa0JBQWtCVSxNQUFNLElBQUk7SUFDaEQsSUFBSUQsYUFBYTtRQUNiLE9BQU87SUFDWDtJQUNBLE9BQU9aLG1CQUFtQkcsa0JBQWtCVyxLQUFLLENBQUMsSUFBSVIsY0FBYyxDQUFDRSxpQkFBaUI7QUFDMUY7QUFFQSxJQUFJLENBQUMsT0FBT1osUUFBUW1CLE9BQU8sS0FBSyxjQUFlLE9BQU9uQixRQUFRbUIsT0FBTyxLQUFLLFlBQVluQixRQUFRbUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPbkIsUUFBUW1CLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt0QixPQUFPQyxjQUFjLENBQUNDLFFBQVFtQixPQUFPLEVBQUUsY0FBYztRQUFFbEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPdUIsTUFBTSxDQUFDckIsUUFBUW1CLE9BQU8sRUFBRW5CO0lBQy9Cc0IsT0FBT3RCLE9BQU8sR0FBR0EsUUFBUW1CLE9BQU87QUFDbEMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9zaG91bGQtaGFyZC1uYXZpZ2F0ZS5qcz82NjMxIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2hvdWxkSGFyZE5hdmlnYXRlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzaG91bGRIYXJkTmF2aWdhdGU7XG4gICAgfVxufSk7XG5jb25zdCBfbWF0Y2hzZWdtZW50cyA9IHJlcXVpcmUoXCIuLi9tYXRjaC1zZWdtZW50c1wiKTtcbmZ1bmN0aW9uIHNob3VsZEhhcmROYXZpZ2F0ZShmbGlnaHRTZWdtZW50UGF0aCwgZmxpZ2h0Um91dGVyU3RhdGUpIHtcbiAgICBjb25zdCBbc2VnbWVudCwgcGFyYWxsZWxSb3V0ZXNdID0gZmxpZ2h0Um91dGVyU3RhdGU7XG4gICAgLy8gVE9ETy1BUFA6IENoZWNrIGlmIGBhc2AgY2FuIGJlIHJlcGxhY2VkLlxuICAgIGNvbnN0IFtjdXJyZW50U2VnbWVudCwgcGFyYWxsZWxSb3V0ZUtleV0gPSBmbGlnaHRTZWdtZW50UGF0aDtcbiAgICAvLyBDaGVjayBpZiBjdXJyZW50IHNlZ21lbnQgbWF0Y2hlcyB0aGUgZXhpc3Rpbmcgc2VnbWVudC5cbiAgICBpZiAoISgwLCBfbWF0Y2hzZWdtZW50cy5tYXRjaFNlZ21lbnQpKGN1cnJlbnRTZWdtZW50LCBzZWdtZW50KSkge1xuICAgICAgICAvLyBJZiBkeW5hbWljIHBhcmFtZXRlciBpbiB0cmVlIGRvZXNuJ3QgbWF0Y2ggdXAgd2l0aCBzZWdtZW50IHBhdGggYSBoYXJkIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkLlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50U2VnbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBleGlzdGluZyBzZWdtZW50IGRpZCBub3QgbWF0Y2ggc29mdCBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZC5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBsYXN0U2VnbWVudCA9IGZsaWdodFNlZ21lbnRQYXRoLmxlbmd0aCA8PSAyO1xuICAgIGlmIChsYXN0U2VnbWVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzaG91bGRIYXJkTmF2aWdhdGUoZmxpZ2h0U2VnbWVudFBhdGguc2xpY2UoMiksIHBhcmFsbGVsUm91dGVzW3BhcmFsbGVsUm91dGVLZXldKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hvdWxkLWhhcmQtbmF2aWdhdGUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInNob3VsZEhhcmROYXZpZ2F0ZSIsIl9tYXRjaHNlZ21lbnRzIiwicmVxdWlyZSIsImZsaWdodFNlZ21lbnRQYXRoIiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJzZWdtZW50IiwicGFyYWxsZWxSb3V0ZXMiLCJjdXJyZW50U2VnbWVudCIsInBhcmFsbGVsUm91dGVLZXkiLCJtYXRjaFNlZ21lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJsYXN0U2VnbWVudCIsImxlbmd0aCIsInNsaWNlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js\n")); + +/***/ }), + +/***/ "(shared)/./node_modules/next/dist/client/components/static-generation-async-storage.external.js": +/*!**********************************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/static-generation-async-storage.external.js ***! + \**********************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"staticGenerationAsyncStorage\", ({\n enumerable: true,\n get: function() {\n return staticGenerationAsyncStorage;\n }\n}));\nconst _asynclocalstorage = __webpack_require__(/*! ./async-local-storage */ \"(shared)/./node_modules/next/dist/client/components/async-local-storage.js\");\nconst staticGenerationAsyncStorage = (0, _asynclocalstorage.createAsyncLocalStorage)();\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=static-generation-async-storage.external.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNoYXJlZCkvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3N0YXRpYy1nZW5lcmF0aW9uLWFzeW5jLXN0b3JhZ2UuZXh0ZXJuYWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGdFQUErRDtJQUMzREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHFCQUFxQkMsbUJBQU9BLENBQUMseUdBQXVCO0FBQzFELE1BQU1GLCtCQUErQixDQUFDLEdBQUdDLG1CQUFtQkUsdUJBQXVCO0FBRW5GLElBQUksQ0FBQyxPQUFPUCxRQUFRUSxPQUFPLEtBQUssY0FBZSxPQUFPUixRQUFRUSxPQUFPLEtBQUssWUFBWVIsUUFBUVEsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPUixRQUFRUSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLWCxPQUFPQyxjQUFjLENBQUNDLFFBQVFRLE9BQU8sRUFBRSxjQUFjO1FBQUVQLE9BQU87SUFBSztJQUNuRUgsT0FBT1ksTUFBTSxDQUFDVixRQUFRUSxPQUFPLEVBQUVSO0lBQy9CVyxPQUFPWCxPQUFPLEdBQUdBLFFBQVFRLE9BQU87QUFDbEMsRUFFQSxvRUFBb0UiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9zdGF0aWMtZ2VuZXJhdGlvbi1hc3luYy1zdG9yYWdlLmV4dGVybmFsLmpzPzVlNjkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlO1xuICAgIH1cbn0pO1xuY29uc3QgX2FzeW5jbG9jYWxzdG9yYWdlID0gcmVxdWlyZShcIi4vYXN5bmMtbG9jYWwtc3RvcmFnZVwiKTtcbmNvbnN0IHN0YXRpY0dlbmVyYXRpb25Bc3luY1N0b3JhZ2UgPSAoMCwgX2FzeW5jbG9jYWxzdG9yYWdlLmNyZWF0ZUFzeW5jTG9jYWxTdG9yYWdlKSgpO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGF0aWMtZ2VuZXJhdGlvbi1hc3luYy1zdG9yYWdlLmV4dGVybmFsLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJzdGF0aWNHZW5lcmF0aW9uQXN5bmNTdG9yYWdlIiwiX2FzeW5jbG9jYWxzdG9yYWdlIiwicmVxdWlyZSIsImNyZWF0ZUFzeW5jTG9jYWxTdG9yYWdlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(shared)/./node_modules/next/dist/client/components/static-generation-async-storage.external.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/components/use-reducer-with-devtools.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/use-reducer-with-devtools.js ***! + \*******************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n useUnwrapState: function() {\n return useUnwrapState;\n },\n useReducerWithReduxDevtools: function() {\n return useReducerWithReduxDevtools;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _actionqueue = __webpack_require__(/*! ../../shared/lib/router/action-queue */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/action-queue.js\");\nfunction normalizeRouterState(val) {\n if (val instanceof Map) {\n const obj = {};\n for (const [key, value] of val.entries()){\n if (typeof value === \"function\") {\n obj[key] = \"fn()\";\n continue;\n }\n if (typeof value === \"object\" && value !== null) {\n if (value.$$typeof) {\n obj[key] = value.$$typeof.toString();\n continue;\n }\n if (value._bundlerConfig) {\n obj[key] = \"FlightData\";\n continue;\n }\n }\n obj[key] = normalizeRouterState(value);\n }\n return obj;\n }\n if (typeof val === \"object\" && val !== null) {\n const obj = {};\n for(const key in val){\n const value = val[key];\n if (typeof value === \"function\") {\n obj[key] = \"fn()\";\n continue;\n }\n if (typeof value === \"object\" && value !== null) {\n if (value.$$typeof) {\n obj[key] = value.$$typeof.toString();\n continue;\n }\n if (value.hasOwnProperty(\"_bundlerConfig\")) {\n obj[key] = \"FlightData\";\n continue;\n }\n }\n obj[key] = normalizeRouterState(value);\n }\n return obj;\n }\n if (Array.isArray(val)) {\n return val.map(normalizeRouterState);\n }\n return val;\n}\nfunction useUnwrapState(state) {\n // reducer actions can be async, so sometimes we need to suspend until the state is resolved\n if ((0, _routerreducertypes.isThenable)(state)) {\n const result = (0, _react.use)(state);\n return result;\n }\n return state;\n}\nfunction useReducerWithReduxDevtoolsNoop(initialState) {\n return [\n initialState,\n ()=>{},\n ()=>{}\n ];\n}\nfunction useReducerWithReduxDevtoolsImpl(initialState) {\n _s();\n const [state, setState] = _react.default.useState(initialState);\n const actionQueue = (0, _react.useContext)(_actionqueue.ActionQueueContext);\n if (!actionQueue) {\n throw new Error(\"Invariant: Missing ActionQueueContext\");\n }\n const devtoolsConnectionRef = (0, _react.useRef)();\n const enabledRef = (0, _react.useRef)();\n (0, _react.useEffect)(()=>{\n if (devtoolsConnectionRef.current || enabledRef.current === false) {\n return;\n }\n if (enabledRef.current === undefined && typeof window.__REDUX_DEVTOOLS_EXTENSION__ === \"undefined\") {\n enabledRef.current = false;\n return;\n }\n devtoolsConnectionRef.current = window.__REDUX_DEVTOOLS_EXTENSION__.connect({\n instanceId: 8000,\n name: \"next-router\"\n });\n if (devtoolsConnectionRef.current) {\n devtoolsConnectionRef.current.init(normalizeRouterState(initialState));\n if (actionQueue) {\n actionQueue.devToolsInstance = devtoolsConnectionRef.current;\n }\n }\n return ()=>{\n devtoolsConnectionRef.current = undefined;\n };\n }, [\n initialState,\n actionQueue\n ]);\n const dispatch = (0, _react.useCallback)((action)=>{\n if (!actionQueue.state) {\n // we lazy initialize the mutable action queue state since the data needed\n // to generate the state is not available when the actionQueue context is created\n actionQueue.state = initialState;\n }\n actionQueue.dispatch(action, setState);\n }, [\n actionQueue,\n initialState\n ]);\n // Sync is called after a state update in the HistoryUpdater,\n // for debugging purposes. Since the reducer state may be a Promise,\n // we let the app router use() it and sync on the resolved value if\n // something changed.\n // Using the `state` here would be referentially unstable and cause\n // undesirable re-renders and history updates.\n const sync = (0, _react.useCallback)((resolvedState)=>{\n if (devtoolsConnectionRef.current) {\n devtoolsConnectionRef.current.send({\n type: \"RENDER_SYNC\"\n }, normalizeRouterState(resolvedState));\n }\n }, []);\n return [\n state,\n dispatch,\n sync\n ];\n}\n_s(useReducerWithReduxDevtoolsImpl, \"2/eSVXfk2V5ZKttKXeUPXMa6Sd8=\");\nconst useReducerWithReduxDevtools = typeof window !== \"undefined\" ? useReducerWithReduxDevtoolsImpl : useReducerWithReduxDevtoolsNoop;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-reducer-with-devtools.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvdXNlLXJlZHVjZXItd2l0aC1kZXZ0b29scy5qcyIsIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0FBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLDZCQUE2QjtRQUN6QixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyw0QkFBNEJDLG1CQUFPQSxDQUFDLGtJQUEwQztBQUNwRixNQUFNQyxTQUFTLFdBQVcsR0FBR0YsMEJBQTBCRyxDQUFDLENBQUNGLG1CQUFPQSxDQUFDLG1GQUFPO0FBQ3hFLE1BQU1HLHNCQUFzQkgsbUJBQU9BLENBQUMsb0pBQXVDO0FBQzNFLE1BQU1JLGVBQWVKLG1CQUFPQSxDQUFDLDRIQUFzQztBQUNuRSxTQUFTSyxxQkFBcUJDLEdBQUc7SUFDN0IsSUFBSUEsZUFBZUMsS0FBSztRQUNwQixNQUFNQyxNQUFNLENBQUM7UUFDYixLQUFLLE1BQU0sQ0FBQ0MsS0FBS3BCLE1BQU0sSUFBSWlCLElBQUlJLE9BQU8sR0FBRztZQUNyQyxJQUFJLE9BQU9yQixVQUFVLFlBQVk7Z0JBQzdCbUIsR0FBRyxDQUFDQyxJQUFJLEdBQUc7Z0JBQ1g7WUFDSjtZQUNBLElBQUksT0FBT3BCLFVBQVUsWUFBWUEsVUFBVSxNQUFNO2dCQUM3QyxJQUFJQSxNQUFNc0IsUUFBUSxFQUFFO29CQUNoQkgsR0FBRyxDQUFDQyxJQUFJLEdBQUdwQixNQUFNc0IsUUFBUSxDQUFDQyxRQUFRO29CQUNsQztnQkFDSjtnQkFDQSxJQUFJdkIsTUFBTXdCLGNBQWMsRUFBRTtvQkFDdEJMLEdBQUcsQ0FBQ0MsSUFBSSxHQUFHO29CQUNYO2dCQUNKO1lBQ0o7WUFDQUQsR0FBRyxDQUFDQyxJQUFJLEdBQUdKLHFCQUFxQmhCO1FBQ3BDO1FBQ0EsT0FBT21CO0lBQ1g7SUFDQSxJQUFJLE9BQU9GLFFBQVEsWUFBWUEsUUFBUSxNQUFNO1FBQ3pDLE1BQU1FLE1BQU0sQ0FBQztRQUNiLElBQUksTUFBTUMsT0FBT0gsSUFBSTtZQUNqQixNQUFNakIsUUFBUWlCLEdBQUcsQ0FBQ0csSUFBSTtZQUN0QixJQUFJLE9BQU9wQixVQUFVLFlBQVk7Z0JBQzdCbUIsR0FBRyxDQUFDQyxJQUFJLEdBQUc7Z0JBQ1g7WUFDSjtZQUNBLElBQUksT0FBT3BCLFVBQVUsWUFBWUEsVUFBVSxNQUFNO2dCQUM3QyxJQUFJQSxNQUFNc0IsUUFBUSxFQUFFO29CQUNoQkgsR0FBRyxDQUFDQyxJQUFJLEdBQUdwQixNQUFNc0IsUUFBUSxDQUFDQyxRQUFRO29CQUNsQztnQkFDSjtnQkFDQSxJQUFJdkIsTUFBTXlCLGNBQWMsQ0FBQyxtQkFBbUI7b0JBQ3hDTixHQUFHLENBQUNDLElBQUksR0FBRztvQkFDWDtnQkFDSjtZQUNKO1lBQ0FELEdBQUcsQ0FBQ0MsSUFBSSxHQUFHSixxQkFBcUJoQjtRQUNwQztRQUNBLE9BQU9tQjtJQUNYO0lBQ0EsSUFBSU8sTUFBTUMsT0FBTyxDQUFDVixNQUFNO1FBQ3BCLE9BQU9BLElBQUlXLEdBQUcsQ0FBQ1o7SUFDbkI7SUFDQSxPQUFPQztBQUNYO0FBQ0EsU0FBU2YsZUFBZTJCLEtBQUs7SUFDekIsNEZBQTRGO0lBQzVGLElBQUksQ0FBQyxHQUFHZixvQkFBb0JnQixVQUFVLEVBQUVELFFBQVE7UUFDNUMsTUFBTUUsU0FBUyxDQUFDLEdBQUduQixPQUFPb0IsR0FBRyxFQUFFSDtRQUMvQixPQUFPRTtJQUNYO0lBQ0EsT0FBT0Y7QUFDWDtBQUNBLFNBQVNJLGdDQUFnQ0MsWUFBWTtJQUNqRCxPQUFPO1FBQ0hBO1FBQ0EsS0FBSztRQUNMLEtBQUs7S0FDUjtBQUNMO0FBQ0EsU0FBU0MsZ0NBQWdDRCxZQUFZOztJQUNqRCxNQUFNLENBQUNMLE9BQU9PLFNBQVMsR0FBR3hCLE9BQU95QixPQUFPLENBQUNDLFFBQVEsQ0FBQ0o7SUFDbEQsTUFBTUssY0FBYyxDQUFDLEdBQUczQixPQUFPNEIsVUFBVSxFQUFFekIsYUFBYTBCLGtCQUFrQjtJQUMxRSxJQUFJLENBQUNGLGFBQWE7UUFDZCxNQUFNLElBQUlHLE1BQU07SUFDcEI7SUFDQSxNQUFNQyx3QkFBd0IsQ0FBQyxHQUFHL0IsT0FBT2dDLE1BQU07SUFDL0MsTUFBTUMsYUFBYSxDQUFDLEdBQUdqQyxPQUFPZ0MsTUFBTTtJQUNuQyxJQUFHaEMsT0FBT2tDLFNBQVMsRUFBRTtRQUNsQixJQUFJSCxzQkFBc0JJLE9BQU8sSUFBSUYsV0FBV0UsT0FBTyxLQUFLLE9BQU87WUFDL0Q7UUFDSjtRQUNBLElBQUlGLFdBQVdFLE9BQU8sS0FBS0MsYUFBYSxPQUFPQyxPQUFPQyw0QkFBNEIsS0FBSyxhQUFhO1lBQ2hHTCxXQUFXRSxPQUFPLEdBQUc7WUFDckI7UUFDSjtRQUNBSixzQkFBc0JJLE9BQU8sR0FBR0UsT0FBT0MsNEJBQTRCLENBQUNDLE9BQU8sQ0FBQztZQUN4RUMsWUFBWTtZQUNaN0MsTUFBTTtRQUNWO1FBQ0EsSUFBSW9DLHNCQUFzQkksT0FBTyxFQUFFO1lBQy9CSixzQkFBc0JJLE9BQU8sQ0FBQ00sSUFBSSxDQUFDckMscUJBQXFCa0I7WUFDeEQsSUFBSUssYUFBYTtnQkFDYkEsWUFBWWUsZ0JBQWdCLEdBQUdYLHNCQUFzQkksT0FBTztZQUNoRTtRQUNKO1FBQ0EsT0FBTztZQUNISixzQkFBc0JJLE9BQU8sR0FBR0M7UUFDcEM7SUFDSixHQUFHO1FBQ0NkO1FBQ0FLO0tBQ0g7SUFDRCxNQUFNZ0IsV0FBVyxDQUFDLEdBQUczQyxPQUFPNEMsV0FBVyxFQUFFLENBQUNDO1FBQ3RDLElBQUksQ0FBQ2xCLFlBQVlWLEtBQUssRUFBRTtZQUNwQiwwRUFBMEU7WUFDMUUsaUZBQWlGO1lBQ2pGVSxZQUFZVixLQUFLLEdBQUdLO1FBQ3hCO1FBQ0FLLFlBQVlnQixRQUFRLENBQUNFLFFBQVFyQjtJQUNqQyxHQUFHO1FBQ0NHO1FBQ0FMO0tBQ0g7SUFDRCw2REFBNkQ7SUFDN0Qsb0VBQW9FO0lBQ3BFLG1FQUFtRTtJQUNuRSxxQkFBcUI7SUFDckIsbUVBQW1FO0lBQ25FLDhDQUE4QztJQUM5QyxNQUFNd0IsT0FBTyxDQUFDLEdBQUc5QyxPQUFPNEMsV0FBVyxFQUFFLENBQUNHO1FBQ2xDLElBQUloQixzQkFBc0JJLE9BQU8sRUFBRTtZQUMvQkosc0JBQXNCSSxPQUFPLENBQUNhLElBQUksQ0FBQztnQkFDL0JDLE1BQU07WUFDVixHQUFHN0MscUJBQXFCMkM7UUFDNUI7SUFDSixHQUFHLEVBQUU7SUFDTCxPQUFPO1FBQ0g5QjtRQUNBMEI7UUFDQUc7S0FDSDtBQUNMO0dBOURTdkI7QUErRFQsTUFBTWhDLDhCQUE4QixPQUFPOEMsV0FBVyxjQUFjZCxrQ0FBa0NGO0FBRXRHLElBQUksQ0FBQyxPQUFPbEMsUUFBUXNDLE9BQU8sS0FBSyxjQUFlLE9BQU90QyxRQUFRc0MsT0FBTyxLQUFLLFlBQVl0QyxRQUFRc0MsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPdEMsUUFBUXNDLE9BQU8sQ0FBQ3lCLFVBQVUsS0FBSyxhQUFhO0lBQ3JLakUsT0FBT0MsY0FBYyxDQUFDQyxRQUFRc0MsT0FBTyxFQUFFLGNBQWM7UUFBRXJDLE9BQU87SUFBSztJQUNuRUgsT0FBT2tFLE1BQU0sQ0FBQ2hFLFFBQVFzQyxPQUFPLEVBQUV0QztJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFRc0MsT0FBTztBQUNsQyxFQUVBLHFEQUFxRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL3VzZS1yZWR1Y2VyLXdpdGgtZGV2dG9vbHMuanM/NDUwMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIHVzZVVud3JhcFN0YXRlOiBudWxsLFxuICAgIHVzZVJlZHVjZXJXaXRoUmVkdXhEZXZ0b29sczogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICB1c2VVbndyYXBTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VVbndyYXBTdGF0ZTtcbiAgICB9LFxuICAgIHVzZVJlZHVjZXJXaXRoUmVkdXhEZXZ0b29sczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VSZWR1Y2VyV2l0aFJlZHV4RGV2dG9vbHM7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX3JvdXRlcnJlZHVjZXJ0eXBlcyA9IHJlcXVpcmUoXCIuL3JvdXRlci1yZWR1Y2VyL3JvdXRlci1yZWR1Y2VyLXR5cGVzXCIpO1xuY29uc3QgX2FjdGlvbnF1ZXVlID0gcmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvcm91dGVyL2FjdGlvbi1xdWV1ZVwiKTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVJvdXRlclN0YXRlKHZhbCkge1xuICAgIGlmICh2YWwgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHZhbC5lbnRyaWVzKCkpe1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgb2JqW2tleV0gPSBcImZuKClcIjtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZS4kJHR5cGVvZi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLl9idW5kbGVyQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gXCJGbGlnaHREYXRhXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ialtrZXldID0gbm9ybWFsaXplUm91dGVyU3RhdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgICAgZm9yKGNvbnN0IGtleSBpbiB2YWwpe1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWxba2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIG9ialtrZXldID0gXCJmbigpXCI7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWUuJCR0eXBlb2YudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eShcIl9idW5kbGVyQ29uZmlnXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gXCJGbGlnaHREYXRhXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ialtrZXldID0gbm9ybWFsaXplUm91dGVyU3RhdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIHZhbC5tYXAobm9ybWFsaXplUm91dGVyU3RhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufVxuZnVuY3Rpb24gdXNlVW53cmFwU3RhdGUoc3RhdGUpIHtcbiAgICAvLyByZWR1Y2VyIGFjdGlvbnMgY2FuIGJlIGFzeW5jLCBzbyBzb21ldGltZXMgd2UgbmVlZCB0byBzdXNwZW5kIHVudGlsIHRoZSBzdGF0ZSBpcyByZXNvbHZlZFxuICAgIGlmICgoMCwgX3JvdXRlcnJlZHVjZXJ0eXBlcy5pc1RoZW5hYmxlKShzdGF0ZSkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKDAsIF9yZWFjdC51c2UpKHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xufVxuZnVuY3Rpb24gdXNlUmVkdWNlcldpdGhSZWR1eERldnRvb2xzTm9vcChpbml0aWFsU3RhdGUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBpbml0aWFsU3RhdGUsXG4gICAgICAgICgpPT57fSxcbiAgICAgICAgKCk9Pnt9XG4gICAgXTtcbn1cbmZ1bmN0aW9uIHVzZVJlZHVjZXJXaXRoUmVkdXhEZXZ0b29sc0ltcGwoaW5pdGlhbFN0YXRlKSB7XG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSBfcmVhY3QuZGVmYXVsdC51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgIGNvbnN0IGFjdGlvblF1ZXVlID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfYWN0aW9ucXVldWUuQWN0aW9uUXVldWVDb250ZXh0KTtcbiAgICBpZiAoIWFjdGlvblF1ZXVlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFyaWFudDogTWlzc2luZyBBY3Rpb25RdWV1ZUNvbnRleHRcIik7XG4gICAgfVxuICAgIGNvbnN0IGRldnRvb2xzQ29ubmVjdGlvblJlZiA9ICgwLCBfcmVhY3QudXNlUmVmKSgpO1xuICAgIGNvbnN0IGVuYWJsZWRSZWYgPSAoMCwgX3JlYWN0LnVzZVJlZikoKTtcbiAgICAoMCwgX3JlYWN0LnVzZUVmZmVjdCkoKCk9PntcbiAgICAgICAgaWYgKGRldnRvb2xzQ29ubmVjdGlvblJlZi5jdXJyZW50IHx8IGVuYWJsZWRSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5hYmxlZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBlbmFibGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkZXZ0b29sc0Nvbm5lY3Rpb25SZWYuY3VycmVudCA9IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fLmNvbm5lY3Qoe1xuICAgICAgICAgICAgaW5zdGFuY2VJZDogODAwMCxcbiAgICAgICAgICAgIG5hbWU6IFwibmV4dC1yb3V0ZXJcIlxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGRldnRvb2xzQ29ubmVjdGlvblJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBkZXZ0b29sc0Nvbm5lY3Rpb25SZWYuY3VycmVudC5pbml0KG5vcm1hbGl6ZVJvdXRlclN0YXRlKGluaXRpYWxTdGF0ZSkpO1xuICAgICAgICAgICAgaWYgKGFjdGlvblF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uUXVldWUuZGV2VG9vbHNJbnN0YW5jZSA9IGRldnRvb2xzQ29ubmVjdGlvblJlZi5jdXJyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgZGV2dG9vbHNDb25uZWN0aW9uUmVmLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBpbml0aWFsU3RhdGUsXG4gICAgICAgIGFjdGlvblF1ZXVlXG4gICAgXSk7XG4gICAgY29uc3QgZGlzcGF0Y2ggPSAoMCwgX3JlYWN0LnVzZUNhbGxiYWNrKSgoYWN0aW9uKT0+e1xuICAgICAgICBpZiAoIWFjdGlvblF1ZXVlLnN0YXRlKSB7XG4gICAgICAgICAgICAvLyB3ZSBsYXp5IGluaXRpYWxpemUgdGhlIG11dGFibGUgYWN0aW9uIHF1ZXVlIHN0YXRlIHNpbmNlIHRoZSBkYXRhIG5lZWRlZFxuICAgICAgICAgICAgLy8gdG8gZ2VuZXJhdGUgdGhlIHN0YXRlIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB0aGUgYWN0aW9uUXVldWUgY29udGV4dCBpcyBjcmVhdGVkXG4gICAgICAgICAgICBhY3Rpb25RdWV1ZS5zdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBhY3Rpb25RdWV1ZS5kaXNwYXRjaChhY3Rpb24sIHNldFN0YXRlKTtcbiAgICB9LCBbXG4gICAgICAgIGFjdGlvblF1ZXVlLFxuICAgICAgICBpbml0aWFsU3RhdGVcbiAgICBdKTtcbiAgICAvLyBTeW5jIGlzIGNhbGxlZCBhZnRlciBhIHN0YXRlIHVwZGF0ZSBpbiB0aGUgSGlzdG9yeVVwZGF0ZXIsXG4gICAgLy8gZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gU2luY2UgdGhlIHJlZHVjZXIgc3RhdGUgbWF5IGJlIGEgUHJvbWlzZSxcbiAgICAvLyB3ZSBsZXQgdGhlIGFwcCByb3V0ZXIgdXNlKCkgaXQgYW5kIHN5bmMgb24gdGhlIHJlc29sdmVkIHZhbHVlIGlmXG4gICAgLy8gc29tZXRoaW5nIGNoYW5nZWQuXG4gICAgLy8gVXNpbmcgdGhlIGBzdGF0ZWAgaGVyZSB3b3VsZCBiZSByZWZlcmVudGlhbGx5IHVuc3RhYmxlIGFuZCBjYXVzZVxuICAgIC8vIHVuZGVzaXJhYmxlIHJlLXJlbmRlcnMgYW5kIGhpc3RvcnkgdXBkYXRlcy5cbiAgICBjb25zdCBzeW5jID0gKDAsIF9yZWFjdC51c2VDYWxsYmFjaykoKHJlc29sdmVkU3RhdGUpPT57XG4gICAgICAgIGlmIChkZXZ0b29sc0Nvbm5lY3Rpb25SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgZGV2dG9vbHNDb25uZWN0aW9uUmVmLmN1cnJlbnQuc2VuZCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJSRU5ERVJfU1lOQ1wiXG4gICAgICAgICAgICB9LCBub3JtYWxpemVSb3V0ZXJTdGF0ZShyZXNvbHZlZFN0YXRlKSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIGRpc3BhdGNoLFxuICAgICAgICBzeW5jXG4gICAgXTtcbn1cbmNvbnN0IHVzZVJlZHVjZXJXaXRoUmVkdXhEZXZ0b29scyA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB1c2VSZWR1Y2VyV2l0aFJlZHV4RGV2dG9vbHNJbXBsIDogdXNlUmVkdWNlcldpdGhSZWR1eERldnRvb2xzTm9vcDtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLXJlZHVjZXItd2l0aC1kZXZ0b29scy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJ1c2VVbndyYXBTdGF0ZSIsInVzZVJlZHVjZXJXaXRoUmVkdXhEZXZ0b29scyIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiXyIsIl9yb3V0ZXJyZWR1Y2VydHlwZXMiLCJfYWN0aW9ucXVldWUiLCJub3JtYWxpemVSb3V0ZXJTdGF0ZSIsInZhbCIsIk1hcCIsIm9iaiIsImtleSIsImVudHJpZXMiLCIkJHR5cGVvZiIsInRvU3RyaW5nIiwiX2J1bmRsZXJDb25maWciLCJoYXNPd25Qcm9wZXJ0eSIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsInN0YXRlIiwiaXNUaGVuYWJsZSIsInJlc3VsdCIsInVzZSIsInVzZVJlZHVjZXJXaXRoUmVkdXhEZXZ0b29sc05vb3AiLCJpbml0aWFsU3RhdGUiLCJ1c2VSZWR1Y2VyV2l0aFJlZHV4RGV2dG9vbHNJbXBsIiwic2V0U3RhdGUiLCJkZWZhdWx0IiwidXNlU3RhdGUiLCJhY3Rpb25RdWV1ZSIsInVzZUNvbnRleHQiLCJBY3Rpb25RdWV1ZUNvbnRleHQiLCJFcnJvciIsImRldnRvb2xzQ29ubmVjdGlvblJlZiIsInVzZVJlZiIsImVuYWJsZWRSZWYiLCJ1c2VFZmZlY3QiLCJjdXJyZW50IiwidW5kZWZpbmVkIiwid2luZG93IiwiX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyIsImNvbm5lY3QiLCJpbnN0YW5jZUlkIiwiaW5pdCIsImRldlRvb2xzSW5zdGFuY2UiLCJkaXNwYXRjaCIsInVzZUNhbGxiYWNrIiwiYWN0aW9uIiwic3luYyIsInJlc29sdmVkU3RhdGUiLCJzZW5kIiwidHlwZSIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/components/use-reducer-with-devtools.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js ***! + \************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\nMIT License\n\nCopyright (c) 2015-present, Facebook, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return formatWebpackMessages;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(app-pages-browser)/./node_modules/next/dist/compiled/strip-ansi/index.js\"));\n// This file is based on https://github.com/facebook/create-react-app/blob/7b1a32be6ec9f99a6c9a3c66813f3ac09c4736b9/packages/react-dev-utils/formatWebpackMessages.js\n// It's been edited to remove chalk and CRA-specific logic\nconst friendlySyntaxErrorLabel = \"Syntax error:\";\nconst WEBPACK_BREAKING_CHANGE_POLYFILLS = \"\\n\\nBREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.\";\nfunction isLikelyASyntaxError(message) {\n return (0, _stripansi.default)(message).includes(friendlySyntaxErrorLabel);\n}\nlet hadMissingSassError = false;\n// Cleans up webpack error messages.\nfunction formatMessage(message, verbose, importTraceNote) {\n // TODO: Replace this once webpack 5 is stable\n if (typeof message === \"object\" && message.message) {\n const filteredModuleTrace = message.moduleTrace && message.moduleTrace.filter((trace)=>!/next-(middleware|client-pages|route|edge-function)-loader\\.js/.test(trace.originName));\n let body = message.message;\n const breakingChangeIndex = body.indexOf(WEBPACK_BREAKING_CHANGE_POLYFILLS);\n if (breakingChangeIndex >= 0) {\n body = body.slice(0, breakingChangeIndex);\n }\n message = (message.moduleName ? (0, _stripansi.default)(message.moduleName) + \"\\n\" : \"\") + (message.file ? (0, _stripansi.default)(message.file) + \"\\n\" : \"\") + body + (message.details && verbose ? \"\\n\" + message.details : \"\") + (filteredModuleTrace && filteredModuleTrace.length ? (importTraceNote || \"\\n\\nImport trace for requested module:\") + filteredModuleTrace.map((trace)=>\"\\n\" + trace.moduleName).join(\"\") : \"\") + (message.stack && verbose ? \"\\n\" + message.stack : \"\");\n }\n let lines = message.split(\"\\n\");\n // Strip Webpack-added headers off errors/warnings\n // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n lines = lines.filter((line)=>!/Module [A-z ]+\\(from/.test(line));\n // Transform parsing error into syntax error\n // TODO: move this to our ESLint formatter?\n lines = lines.map((line)=>{\n const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n if (!parsingError) {\n return line;\n }\n const [, errorLine, errorColumn, errorMessage] = parsingError;\n return friendlySyntaxErrorLabel + \" \" + errorMessage + \" (\" + errorLine + \":\" + errorColumn + \")\";\n });\n message = lines.join(\"\\n\");\n // Smoosh syntax errors (commonly found in CSS)\n message = message.replace(/SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g, \"\" + friendlySyntaxErrorLabel + \" $3 ($1:$2)\\n\");\n // Clean up export errors\n message = message.replace(/^.*export '(.+?)' was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$2'.\");\n message = message.replace(/^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$2' does not contain a default export (imported as '$1').\");\n message = message.replace(/^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$3' (imported as '$2').\");\n lines = message.split(\"\\n\");\n // Remove leading newline\n if (lines.length > 2 && lines[1].trim() === \"\") {\n lines.splice(1, 1);\n }\n // Cleans up verbose \"module not found\" messages for files and packages.\n if (lines[1] && lines[1].indexOf(\"Module not found: \") === 0) {\n lines = [\n lines[0],\n lines[1].replace(\"Error: \", \"\").replace(\"Module not found: Cannot find file:\", \"Cannot find file:\"),\n ...lines.slice(2)\n ];\n }\n // Add helpful message for users trying to use Sass for the first time\n if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n // ./file.module.scss (<<loader info>>) => ./file.module.scss\n const firstLine = lines[0].split(\"!\");\n lines[0] = firstLine[firstLine.length - 1];\n lines[1] = \"To use Next.js' built-in Sass support, you first need to install `sass`.\\n\";\n lines[1] += \"Run `npm i sass` or `yarn add sass` inside your workspace.\\n\";\n lines[1] += \"\\nLearn more: https://nextjs.org/docs/messages/install-sass\";\n // dispose of unhelpful stack trace\n lines = lines.slice(0, 2);\n hadMissingSassError = true;\n } else if (hadMissingSassError && message.match(/(sass-loader|resolve-url-loader: CSS error)/)) {\n // dispose of unhelpful stack trace following missing sass module\n lines = [];\n }\n if (!verbose) {\n message = lines.join(\"\\n\");\n // Internal stacks are generally useless so we strip them... with the\n // exception of stacks containing `webpack:` because they're normally\n // from user code generated by Webpack. For more information see\n // https://github.com/facebook/create-react-app/pull/1050\n message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, \"\") // at ... ...:x:y\n ;\n message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, \"\") // at <anonymous>\n ;\n message = message.replace(/File was processed with these loaders:\\n(.+[\\\\/](next[\\\\/]dist[\\\\/].+|@next[\\\\/]react-refresh-utils[\\\\/]loader)\\.js\\n)*You may need an additional loader to handle the result of these loaders.\\n/g, \"\");\n lines = message.split(\"\\n\");\n }\n // Remove duplicated newlines\n lines = lines.filter((line, index, arr)=>index === 0 || line.trim() !== \"\" || line.trim() !== arr[index - 1].trim());\n // Reassemble the message\n message = lines.join(\"\\n\");\n return message.trim();\n}\nfunction formatWebpackMessages(json, verbose) {\n const formattedErrors = json.errors.map((message)=>{\n const isUnknownNextFontError = message.message.includes(\"An error occured in `next/font`.\");\n return formatMessage(message, isUnknownNextFontError || verbose);\n });\n const formattedWarnings = json.warnings.map((message)=>{\n return formatMessage(message, verbose);\n });\n // Reorder errors to put the most relevant ones first.\n let reactServerComponentsError = -1;\n for(let i = 0; i < formattedErrors.length; i++){\n const error = formattedErrors[i];\n if (error.includes(\"ReactServerComponentsError\")) {\n reactServerComponentsError = i;\n break;\n }\n }\n // Move the reactServerComponentsError to the top if it exists\n if (reactServerComponentsError !== -1) {\n const error = formattedErrors.splice(reactServerComponentsError, 1);\n formattedErrors.unshift(error[0]);\n }\n const result = {\n ...json,\n errors: formattedErrors,\n warnings: formattedWarnings\n };\n if (!verbose && result.errors.some(isLikelyASyntaxError)) {\n // If there are any syntax errors, show just them.\n result.errors = result.errors.filter(isLikelyASyntaxError);\n result.warnings = [];\n }\n return result;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=format-webpack-messages.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9lcnJvci1vdmVybGF5L2Zvcm1hdC13ZWJwYWNrLW1lc3NhZ2VzLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLEdBQWdCO0FBQ2hCQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxnSUFBeUM7QUFDbEYsTUFBTUMsYUFBYSxXQUFXLEdBQUdGLHlCQUF5QkcsQ0FBQyxDQUFDRixtQkFBT0EsQ0FBQyxnSEFBK0I7QUFDbkcscUtBQXFLO0FBQ3JLLDBEQUEwRDtBQUMxRCxNQUFNRywyQkFBMkI7QUFDakMsTUFBTUMsb0NBQW9DO0FBQzFDLFNBQVNDLHFCQUFxQkMsT0FBTztJQUNqQyxPQUFPLENBQUMsR0FBR0wsV0FBV00sT0FBTyxFQUFFRCxTQUFTRSxRQUFRLENBQUNMO0FBQ3JEO0FBQ0EsSUFBSU0sc0JBQXNCO0FBQzFCLG9DQUFvQztBQUNwQyxTQUFTQyxjQUFjSixPQUFPLEVBQUVLLE9BQU8sRUFBRUMsZUFBZTtJQUNwRCw4Q0FBOEM7SUFDOUMsSUFBSSxPQUFPTixZQUFZLFlBQVlBLFFBQVFBLE9BQU8sRUFBRTtRQUNoRCxNQUFNTyxzQkFBc0JQLFFBQVFRLFdBQVcsSUFBSVIsUUFBUVEsV0FBVyxDQUFDQyxNQUFNLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLGdFQUFnRUMsSUFBSSxDQUFDRCxNQUFNRSxVQUFVO1FBQzdLLElBQUlDLE9BQU9iLFFBQVFBLE9BQU87UUFDMUIsTUFBTWMsc0JBQXNCRCxLQUFLRSxPQUFPLENBQUNqQjtRQUN6QyxJQUFJZ0IsdUJBQXVCLEdBQUc7WUFDMUJELE9BQU9BLEtBQUtHLEtBQUssQ0FBQyxHQUFHRjtRQUN6QjtRQUNBZCxVQUFVLENBQUNBLFFBQVFpQixVQUFVLEdBQUcsQ0FBQyxHQUFHdEIsV0FBV00sT0FBTyxFQUFFRCxRQUFRaUIsVUFBVSxJQUFJLE9BQU8sRUFBQyxJQUFNakIsQ0FBQUEsUUFBUWtCLElBQUksR0FBRyxDQUFDLEdBQUd2QixXQUFXTSxPQUFPLEVBQUVELFFBQVFrQixJQUFJLElBQUksT0FBTyxFQUFDLElBQUtMLE9BQVFiLENBQUFBLFFBQVFtQixPQUFPLElBQUlkLFVBQVUsT0FBT0wsUUFBUW1CLE9BQU8sR0FBRyxFQUFDLElBQU1aLENBQUFBLHVCQUF1QkEsb0JBQW9CYSxNQUFNLEdBQUcsQ0FBQ2QsbUJBQW1CLHdDQUF1QyxJQUFLQyxvQkFBb0JjLEdBQUcsQ0FBQyxDQUFDWCxRQUFRLE9BQU9BLE1BQU1PLFVBQVUsRUFBRUssSUFBSSxDQUFDLE1BQU0sRUFBQyxJQUFNdEIsQ0FBQUEsUUFBUXVCLEtBQUssSUFBSWxCLFVBQVUsT0FBT0wsUUFBUXVCLEtBQUssR0FBRyxFQUFDO0lBQzVkO0lBQ0EsSUFBSUMsUUFBUXhCLFFBQVF5QixLQUFLLENBQUM7SUFDMUIsa0RBQWtEO0lBQ2xELG9FQUFvRTtJQUNwRUQsUUFBUUEsTUFBTWYsTUFBTSxDQUFDLENBQUNpQixPQUFPLENBQUMsdUJBQXVCZixJQUFJLENBQUNlO0lBQzFELDRDQUE0QztJQUM1QywyQ0FBMkM7SUFDM0NGLFFBQVFBLE1BQU1ILEdBQUcsQ0FBQyxDQUFDSztRQUNmLE1BQU1DLGVBQWUsZ0RBQWdEQyxJQUFJLENBQUNGO1FBQzFFLElBQUksQ0FBQ0MsY0FBYztZQUNmLE9BQU9EO1FBQ1g7UUFDQSxNQUFNLEdBQUdHLFdBQVdDLGFBQWFDLGFBQWEsR0FBR0o7UUFDakQsT0FBTzlCLDJCQUEyQixNQUFNa0MsZUFBZSxPQUFPRixZQUFZLE1BQU1DLGNBQWM7SUFDbEc7SUFDQTlCLFVBQVV3QixNQUFNRixJQUFJLENBQUM7SUFDckIsK0NBQStDO0lBQy9DdEIsVUFBVUEsUUFBUWdDLE9BQU8sQ0FBQyw0Q0FBNEMsS0FBS25DLDJCQUEyQjtJQUN0Ryx5QkFBeUI7SUFDekJHLFVBQVVBLFFBQVFnQyxPQUFPLENBQUMsbURBQW1EO0lBQzdFaEMsVUFBVUEsUUFBUWdDLE9BQU8sQ0FBQyw2RUFBNkU7SUFDdkdoQyxVQUFVQSxRQUFRZ0MsT0FBTyxDQUFDLDJFQUEyRTtJQUNyR1IsUUFBUXhCLFFBQVF5QixLQUFLLENBQUM7SUFDdEIseUJBQXlCO0lBQ3pCLElBQUlELE1BQU1KLE1BQU0sR0FBRyxLQUFLSSxLQUFLLENBQUMsRUFBRSxDQUFDUyxJQUFJLE9BQU8sSUFBSTtRQUM1Q1QsTUFBTVUsTUFBTSxDQUFDLEdBQUc7SUFDcEI7SUFDQSx3RUFBd0U7SUFDeEUsSUFBSVYsS0FBSyxDQUFDLEVBQUUsSUFBSUEsS0FBSyxDQUFDLEVBQUUsQ0FBQ1QsT0FBTyxDQUFDLDBCQUEwQixHQUFHO1FBQzFEUyxRQUFRO1lBQ0pBLEtBQUssQ0FBQyxFQUFFO1lBQ1JBLEtBQUssQ0FBQyxFQUFFLENBQUNRLE9BQU8sQ0FBQyxXQUFXLElBQUlBLE9BQU8sQ0FBQyx1Q0FBdUM7ZUFDNUVSLE1BQU1SLEtBQUssQ0FBQztTQUNsQjtJQUNMO0lBQ0Esc0VBQXNFO0lBQ3RFLElBQUlRLEtBQUssQ0FBQyxFQUFFLElBQUlBLEtBQUssQ0FBQyxFQUFFLENBQUNXLEtBQUssQ0FBQyw2QkFBNkI7UUFDeEQsNkRBQTZEO1FBQzdELE1BQU1DLFlBQVlaLEtBQUssQ0FBQyxFQUFFLENBQUNDLEtBQUssQ0FBQztRQUNqQ0QsS0FBSyxDQUFDLEVBQUUsR0FBR1ksU0FBUyxDQUFDQSxVQUFVaEIsTUFBTSxHQUFHLEVBQUU7UUFDMUNJLEtBQUssQ0FBQyxFQUFFLEdBQUc7UUFDWEEsS0FBSyxDQUFDLEVBQUUsSUFBSTtRQUNaQSxLQUFLLENBQUMsRUFBRSxJQUFJO1FBQ1osbUNBQW1DO1FBQ25DQSxRQUFRQSxNQUFNUixLQUFLLENBQUMsR0FBRztRQUN2QmIsc0JBQXNCO0lBQzFCLE9BQU8sSUFBSUEsdUJBQXVCSCxRQUFRbUMsS0FBSyxDQUFDLGdEQUFnRDtRQUM1RixpRUFBaUU7UUFDakVYLFFBQVEsRUFBRTtJQUNkO0lBQ0EsSUFBSSxDQUFDbkIsU0FBUztRQUNWTCxVQUFVd0IsTUFBTUYsSUFBSSxDQUFDO1FBQ3JCLHFFQUFxRTtRQUNyRSxxRUFBcUU7UUFDckUsZ0VBQWdFO1FBQ2hFLHlEQUF5RDtRQUN6RHRCLFVBQVVBLFFBQVFnQyxPQUFPLENBQUMsa0RBQWtELElBQUksaUJBQWlCOztRQUVqR2hDLFVBQVVBLFFBQVFnQyxPQUFPLENBQUMsK0JBQStCLElBQUksaUJBQWlCOztRQUU5RWhDLFVBQVVBLFFBQVFnQyxPQUFPLENBQUMsc01BQXNNO1FBQ2hPUixRQUFReEIsUUFBUXlCLEtBQUssQ0FBQztJQUMxQjtJQUNBLDZCQUE2QjtJQUM3QkQsUUFBUUEsTUFBTWYsTUFBTSxDQUFDLENBQUNpQixNQUFNVyxPQUFPQyxNQUFNRCxVQUFVLEtBQUtYLEtBQUtPLElBQUksT0FBTyxNQUFNUCxLQUFLTyxJQUFJLE9BQU9LLEdBQUcsQ0FBQ0QsUUFBUSxFQUFFLENBQUNKLElBQUk7SUFDakgseUJBQXlCO0lBQ3pCakMsVUFBVXdCLE1BQU1GLElBQUksQ0FBQztJQUNyQixPQUFPdEIsUUFBUWlDLElBQUk7QUFDdkI7QUFDQSxTQUFTekMsc0JBQXNCK0MsSUFBSSxFQUFFbEMsT0FBTztJQUN4QyxNQUFNbUMsa0JBQWtCRCxLQUFLRSxNQUFNLENBQUNwQixHQUFHLENBQUMsQ0FBQ3JCO1FBQ3JDLE1BQU0wQyx5QkFBeUIxQyxRQUFRQSxPQUFPLENBQUNFLFFBQVEsQ0FBQztRQUN4RCxPQUFPRSxjQUFjSixTQUFTMEMsMEJBQTBCckM7SUFDNUQ7SUFDQSxNQUFNc0Msb0JBQW9CSixLQUFLSyxRQUFRLENBQUN2QixHQUFHLENBQUMsQ0FBQ3JCO1FBQ3pDLE9BQU9JLGNBQWNKLFNBQVNLO0lBQ2xDO0lBQ0Esc0RBQXNEO0lBQ3RELElBQUl3Qyw2QkFBNkIsQ0FBQztJQUNsQyxJQUFJLElBQUlDLElBQUksR0FBR0EsSUFBSU4sZ0JBQWdCcEIsTUFBTSxFQUFFMEIsSUFBSTtRQUMzQyxNQUFNQyxRQUFRUCxlQUFlLENBQUNNLEVBQUU7UUFDaEMsSUFBSUMsTUFBTTdDLFFBQVEsQ0FBQywrQkFBK0I7WUFDOUMyQyw2QkFBNkJDO1lBQzdCO1FBQ0o7SUFDSjtJQUNBLDhEQUE4RDtJQUM5RCxJQUFJRCwrQkFBK0IsQ0FBQyxHQUFHO1FBQ25DLE1BQU1FLFFBQVFQLGdCQUFnQk4sTUFBTSxDQUFDVyw0QkFBNEI7UUFDakVMLGdCQUFnQlEsT0FBTyxDQUFDRCxLQUFLLENBQUMsRUFBRTtJQUNwQztJQUNBLE1BQU1FLFNBQVM7UUFDWCxHQUFHVixJQUFJO1FBQ1BFLFFBQVFEO1FBQ1JJLFVBQVVEO0lBQ2Q7SUFDQSxJQUFJLENBQUN0QyxXQUFXNEMsT0FBT1IsTUFBTSxDQUFDUyxJQUFJLENBQUNuRCx1QkFBdUI7UUFDdEQsa0RBQWtEO1FBQ2xEa0QsT0FBT1IsTUFBTSxHQUFHUSxPQUFPUixNQUFNLENBQUNoQyxNQUFNLENBQUNWO1FBQ3JDa0QsT0FBT0wsUUFBUSxHQUFHLEVBQUU7SUFDeEI7SUFDQSxPQUFPSztBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU83RCxRQUFRYSxPQUFPLEtBQUssY0FBZSxPQUFPYixRQUFRYSxPQUFPLEtBQUssWUFBWWIsUUFBUWEsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPYixRQUFRYSxPQUFPLENBQUNrRCxVQUFVLEtBQUssYUFBYTtJQUNyS2pFLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWEsT0FBTyxFQUFFLGNBQWM7UUFBRVosT0FBTztJQUFLO0lBQ25FSCxPQUFPa0UsTUFBTSxDQUFDaEUsUUFBUWEsT0FBTyxFQUFFYjtJQUMvQmlFLE9BQU9qRSxPQUFPLEdBQUdBLFFBQVFhLE9BQU87QUFDbEMsRUFFQSxtREFBbUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV2L2Vycm9yLW92ZXJsYXkvZm9ybWF0LXdlYnBhY2stbWVzc2FnZXMuanM/NzVlYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbk1JVCBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuXG5QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG5vZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG5pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG50byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG5jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG5PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuU09GVFdBUkUuXG4qLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdFdlYnBhY2tNZXNzYWdlcztcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfc3RyaXBhbnNpID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3N0cmlwLWFuc2lcIikpO1xuLy8gVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9jcmVhdGUtcmVhY3QtYXBwL2Jsb2IvN2IxYTMyYmU2ZWM5Zjk5YTZjOWEzYzY2ODEzZjNhYzA5YzQ3MzZiOS9wYWNrYWdlcy9yZWFjdC1kZXYtdXRpbHMvZm9ybWF0V2VicGFja01lc3NhZ2VzLmpzXG4vLyBJdCdzIGJlZW4gZWRpdGVkIHRvIHJlbW92ZSBjaGFsayBhbmQgQ1JBLXNwZWNpZmljIGxvZ2ljXG5jb25zdCBmcmllbmRseVN5bnRheEVycm9yTGFiZWwgPSBcIlN5bnRheCBlcnJvcjpcIjtcbmNvbnN0IFdFQlBBQ0tfQlJFQUtJTkdfQ0hBTkdFX1BPTFlGSUxMUyA9IFwiXFxuXFxuQlJFQUtJTkcgQ0hBTkdFOiB3ZWJwYWNrIDwgNSB1c2VkIHRvIGluY2x1ZGUgcG9seWZpbGxzIGZvciBub2RlLmpzIGNvcmUgbW9kdWxlcyBieSBkZWZhdWx0LlwiO1xuZnVuY3Rpb24gaXNMaWtlbHlBU3ludGF4RXJyb3IobWVzc2FnZSkge1xuICAgIHJldHVybiAoMCwgX3N0cmlwYW5zaS5kZWZhdWx0KShtZXNzYWdlKS5pbmNsdWRlcyhmcmllbmRseVN5bnRheEVycm9yTGFiZWwpO1xufVxubGV0IGhhZE1pc3NpbmdTYXNzRXJyb3IgPSBmYWxzZTtcbi8vIENsZWFucyB1cCB3ZWJwYWNrIGVycm9yIG1lc3NhZ2VzLlxuZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShtZXNzYWdlLCB2ZXJib3NlLCBpbXBvcnRUcmFjZU5vdGUpIHtcbiAgICAvLyBUT0RPOiBSZXBsYWNlIHRoaXMgb25jZSB3ZWJwYWNrIDUgaXMgc3RhYmxlXG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSBcIm9iamVjdFwiICYmIG1lc3NhZ2UubWVzc2FnZSkge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZE1vZHVsZVRyYWNlID0gbWVzc2FnZS5tb2R1bGVUcmFjZSAmJiBtZXNzYWdlLm1vZHVsZVRyYWNlLmZpbHRlcigodHJhY2UpPT4hL25leHQtKG1pZGRsZXdhcmV8Y2xpZW50LXBhZ2VzfHJvdXRlfGVkZ2UtZnVuY3Rpb24pLWxvYWRlclxcLmpzLy50ZXN0KHRyYWNlLm9yaWdpbk5hbWUpKTtcbiAgICAgICAgbGV0IGJvZHkgPSBtZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgIGNvbnN0IGJyZWFraW5nQ2hhbmdlSW5kZXggPSBib2R5LmluZGV4T2YoV0VCUEFDS19CUkVBS0lOR19DSEFOR0VfUE9MWUZJTExTKTtcbiAgICAgICAgaWYgKGJyZWFraW5nQ2hhbmdlSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgYm9keSA9IGJvZHkuc2xpY2UoMCwgYnJlYWtpbmdDaGFuZ2VJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZSA9IChtZXNzYWdlLm1vZHVsZU5hbWUgPyAoMCwgX3N0cmlwYW5zaS5kZWZhdWx0KShtZXNzYWdlLm1vZHVsZU5hbWUpICsgXCJcXG5cIiA6IFwiXCIpICsgKG1lc3NhZ2UuZmlsZSA/ICgwLCBfc3RyaXBhbnNpLmRlZmF1bHQpKG1lc3NhZ2UuZmlsZSkgKyBcIlxcblwiIDogXCJcIikgKyBib2R5ICsgKG1lc3NhZ2UuZGV0YWlscyAmJiB2ZXJib3NlID8gXCJcXG5cIiArIG1lc3NhZ2UuZGV0YWlscyA6IFwiXCIpICsgKGZpbHRlcmVkTW9kdWxlVHJhY2UgJiYgZmlsdGVyZWRNb2R1bGVUcmFjZS5sZW5ndGggPyAoaW1wb3J0VHJhY2VOb3RlIHx8IFwiXFxuXFxuSW1wb3J0IHRyYWNlIGZvciByZXF1ZXN0ZWQgbW9kdWxlOlwiKSArIGZpbHRlcmVkTW9kdWxlVHJhY2UubWFwKCh0cmFjZSk9PlwiXFxuXCIgKyB0cmFjZS5tb2R1bGVOYW1lKS5qb2luKFwiXCIpIDogXCJcIikgKyAobWVzc2FnZS5zdGFjayAmJiB2ZXJib3NlID8gXCJcXG5cIiArIG1lc3NhZ2Uuc3RhY2sgOiBcIlwiKTtcbiAgICB9XG4gICAgbGV0IGxpbmVzID0gbWVzc2FnZS5zcGxpdChcIlxcblwiKTtcbiAgICAvLyBTdHJpcCBXZWJwYWNrLWFkZGVkIGhlYWRlcnMgb2ZmIGVycm9ycy93YXJuaW5nc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2svYmxvYi9tYXN0ZXIvbGliL01vZHVsZUVycm9yLmpzXG4gICAgbGluZXMgPSBsaW5lcy5maWx0ZXIoKGxpbmUpPT4hL01vZHVsZSBbQS16IF0rXFwoZnJvbS8udGVzdChsaW5lKSk7XG4gICAgLy8gVHJhbnNmb3JtIHBhcnNpbmcgZXJyb3IgaW50byBzeW50YXggZXJyb3JcbiAgICAvLyBUT0RPOiBtb3ZlIHRoaXMgdG8gb3VyIEVTTGludCBmb3JtYXR0ZXI/XG4gICAgbGluZXMgPSBsaW5lcy5tYXAoKGxpbmUpPT57XG4gICAgICAgIGNvbnN0IHBhcnNpbmdFcnJvciA9IC9MaW5lIChcXGQrKTooPzooXFxkKyk6KT9cXHMqUGFyc2luZyBlcnJvcjogKC4rKSQvLmV4ZWMobGluZSk7XG4gICAgICAgIGlmICghcGFyc2luZ0Vycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbGluZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbLCBlcnJvckxpbmUsIGVycm9yQ29sdW1uLCBlcnJvck1lc3NhZ2VdID0gcGFyc2luZ0Vycm9yO1xuICAgICAgICByZXR1cm4gZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsICsgXCIgXCIgKyBlcnJvck1lc3NhZ2UgKyBcIiAoXCIgKyBlcnJvckxpbmUgKyBcIjpcIiArIGVycm9yQ29sdW1uICsgXCIpXCI7XG4gICAgfSk7XG4gICAgbWVzc2FnZSA9IGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgLy8gU21vb3NoIHN5bnRheCBlcnJvcnMgKGNvbW1vbmx5IGZvdW5kIGluIENTUylcbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9TeW50YXhFcnJvclxccytcXCgoXFxkKyk6KFxcZCspXFwpXFxzKiguKz8pXFxuL2csIFwiXCIgKyBmcmllbmRseVN5bnRheEVycm9yTGFiZWwgKyBcIiAkMyAoJDE6JDIpXFxuXCIpO1xuICAgIC8vIENsZWFuIHVwIGV4cG9ydCBlcnJvcnNcbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9eLipleHBvcnQgJyguKz8pJyB3YXMgbm90IGZvdW5kIGluICcoLis/KScuKiQvZ20sIFwiQXR0ZW1wdGVkIGltcG9ydCBlcnJvcjogJyQxJyBpcyBub3QgZXhwb3J0ZWQgZnJvbSAnJDInLlwiKTtcbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9eLipleHBvcnQgJ2RlZmF1bHQnIFxcKGltcG9ydGVkIGFzICcoLis/KSdcXCkgd2FzIG5vdCBmb3VuZCBpbiAnKC4rPyknLiokL2dtLCBcIkF0dGVtcHRlZCBpbXBvcnQgZXJyb3I6ICckMicgZG9lcyBub3QgY29udGFpbiBhIGRlZmF1bHQgZXhwb3J0IChpbXBvcnRlZCBhcyAnJDEnKS5cIik7XG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXi4qZXhwb3J0ICcoLis/KScgXFwoaW1wb3J0ZWQgYXMgJyguKz8pJ1xcKSB3YXMgbm90IGZvdW5kIGluICcoLis/KScuKiQvZ20sIFwiQXR0ZW1wdGVkIGltcG9ydCBlcnJvcjogJyQxJyBpcyBub3QgZXhwb3J0ZWQgZnJvbSAnJDMnIChpbXBvcnRlZCBhcyAnJDInKS5cIik7XG4gICAgbGluZXMgPSBtZXNzYWdlLnNwbGl0KFwiXFxuXCIpO1xuICAgIC8vIFJlbW92ZSBsZWFkaW5nIG5ld2xpbmVcbiAgICBpZiAobGluZXMubGVuZ3RoID4gMiAmJiBsaW5lc1sxXS50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgICAgbGluZXMuc3BsaWNlKDEsIDEpO1xuICAgIH1cbiAgICAvLyBDbGVhbnMgdXAgdmVyYm9zZSBcIm1vZHVsZSBub3QgZm91bmRcIiBtZXNzYWdlcyBmb3IgZmlsZXMgYW5kIHBhY2thZ2VzLlxuICAgIGlmIChsaW5lc1sxXSAmJiBsaW5lc1sxXS5pbmRleE9mKFwiTW9kdWxlIG5vdCBmb3VuZDogXCIpID09PSAwKSB7XG4gICAgICAgIGxpbmVzID0gW1xuICAgICAgICAgICAgbGluZXNbMF0sXG4gICAgICAgICAgICBsaW5lc1sxXS5yZXBsYWNlKFwiRXJyb3I6IFwiLCBcIlwiKS5yZXBsYWNlKFwiTW9kdWxlIG5vdCBmb3VuZDogQ2Fubm90IGZpbmQgZmlsZTpcIiwgXCJDYW5ub3QgZmluZCBmaWxlOlwiKSxcbiAgICAgICAgICAgIC4uLmxpbmVzLnNsaWNlKDIpXG4gICAgICAgIF07XG4gICAgfVxuICAgIC8vIEFkZCBoZWxwZnVsIG1lc3NhZ2UgZm9yIHVzZXJzIHRyeWluZyB0byB1c2UgU2FzcyBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICBpZiAobGluZXNbMV0gJiYgbGluZXNbMV0ubWF0Y2goL0Nhbm5vdCBmaW5kIG1vZHVsZS4rc2Fzcy8pKSB7XG4gICAgICAgIC8vIC4vZmlsZS5tb2R1bGUuc2NzcyAoPDxsb2FkZXIgaW5mbz4+KSA9PiAuL2ZpbGUubW9kdWxlLnNjc3NcbiAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gbGluZXNbMF0uc3BsaXQoXCIhXCIpO1xuICAgICAgICBsaW5lc1swXSA9IGZpcnN0TGluZVtmaXJzdExpbmUubGVuZ3RoIC0gMV07XG4gICAgICAgIGxpbmVzWzFdID0gXCJUbyB1c2UgTmV4dC5qcycgYnVpbHQtaW4gU2FzcyBzdXBwb3J0LCB5b3UgZmlyc3QgbmVlZCB0byBpbnN0YWxsIGBzYXNzYC5cXG5cIjtcbiAgICAgICAgbGluZXNbMV0gKz0gXCJSdW4gYG5wbSBpIHNhc3NgIG9yIGB5YXJuIGFkZCBzYXNzYCBpbnNpZGUgeW91ciB3b3Jrc3BhY2UuXFxuXCI7XG4gICAgICAgIGxpbmVzWzFdICs9IFwiXFxuTGVhcm4gbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvaW5zdGFsbC1zYXNzXCI7XG4gICAgICAgIC8vIGRpc3Bvc2Ugb2YgdW5oZWxwZnVsIHN0YWNrIHRyYWNlXG4gICAgICAgIGxpbmVzID0gbGluZXMuc2xpY2UoMCwgMik7XG4gICAgICAgIGhhZE1pc3NpbmdTYXNzRXJyb3IgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaGFkTWlzc2luZ1Nhc3NFcnJvciAmJiBtZXNzYWdlLm1hdGNoKC8oc2Fzcy1sb2FkZXJ8cmVzb2x2ZS11cmwtbG9hZGVyOiBDU1MgZXJyb3IpLykpIHtcbiAgICAgICAgLy8gZGlzcG9zZSBvZiB1bmhlbHBmdWwgc3RhY2sgdHJhY2UgZm9sbG93aW5nIG1pc3Npbmcgc2FzcyBtb2R1bGVcbiAgICAgICAgbGluZXMgPSBbXTtcbiAgICB9XG4gICAgaWYgKCF2ZXJib3NlKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICAgICAgICAvLyBJbnRlcm5hbCBzdGFja3MgYXJlIGdlbmVyYWxseSB1c2VsZXNzIHNvIHdlIHN0cmlwIHRoZW0uLi4gd2l0aCB0aGVcbiAgICAgICAgLy8gZXhjZXB0aW9uIG9mIHN0YWNrcyBjb250YWluaW5nIGB3ZWJwYWNrOmAgYmVjYXVzZSB0aGV5J3JlIG5vcm1hbGx5XG4gICAgICAgIC8vIGZyb20gdXNlciBjb2RlIGdlbmVyYXRlZCBieSBXZWJwYWNrLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWVcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2NyZWF0ZS1yZWFjdC1hcHAvcHVsbC8xMDUwXG4gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL15cXHMqYXRcXHMoKD8hd2VicGFjazopLikqOlxcZCs6XFxkK1tcXHMpXSooXFxufCQpL2dtLCBcIlwiKSAvLyBhdCAuLi4gLi4uOng6eVxuICAgICAgICA7XG4gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL15cXHMqYXRcXHM8YW5vbnltb3VzPihcXG58JCkvZ20sIFwiXCIpIC8vIGF0IDxhbm9ueW1vdXM+XG4gICAgICAgIDtcbiAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvRmlsZSB3YXMgcHJvY2Vzc2VkIHdpdGggdGhlc2UgbG9hZGVyczpcXG4oLitbXFxcXC9dKG5leHRbXFxcXC9dZGlzdFtcXFxcL10uK3xAbmV4dFtcXFxcL11yZWFjdC1yZWZyZXNoLXV0aWxzW1xcXFwvXWxvYWRlcilcXC5qc1xcbikqWW91IG1heSBuZWVkIGFuIGFkZGl0aW9uYWwgbG9hZGVyIHRvIGhhbmRsZSB0aGUgcmVzdWx0IG9mIHRoZXNlIGxvYWRlcnMuXFxuL2csIFwiXCIpO1xuICAgICAgICBsaW5lcyA9IG1lc3NhZ2Uuc3BsaXQoXCJcXG5cIik7XG4gICAgfVxuICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVkIG5ld2xpbmVzXG4gICAgbGluZXMgPSBsaW5lcy5maWx0ZXIoKGxpbmUsIGluZGV4LCBhcnIpPT5pbmRleCA9PT0gMCB8fCBsaW5lLnRyaW0oKSAhPT0gXCJcIiB8fCBsaW5lLnRyaW0oKSAhPT0gYXJyW2luZGV4IC0gMV0udHJpbSgpKTtcbiAgICAvLyBSZWFzc2VtYmxlIHRoZSBtZXNzYWdlXG4gICAgbWVzc2FnZSA9IGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgcmV0dXJuIG1lc3NhZ2UudHJpbSgpO1xufVxuZnVuY3Rpb24gZm9ybWF0V2VicGFja01lc3NhZ2VzKGpzb24sIHZlcmJvc2UpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWRFcnJvcnMgPSBqc29uLmVycm9ycy5tYXAoKG1lc3NhZ2UpPT57XG4gICAgICAgIGNvbnN0IGlzVW5rbm93bk5leHRGb250RXJyb3IgPSBtZXNzYWdlLm1lc3NhZ2UuaW5jbHVkZXMoXCJBbiBlcnJvciBvY2N1cmVkIGluIGBuZXh0L2ZvbnRgLlwiKTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdE1lc3NhZ2UobWVzc2FnZSwgaXNVbmtub3duTmV4dEZvbnRFcnJvciB8fCB2ZXJib3NlKTtcbiAgICB9KTtcbiAgICBjb25zdCBmb3JtYXR0ZWRXYXJuaW5ncyA9IGpzb24ud2FybmluZ3MubWFwKChtZXNzYWdlKT0+e1xuICAgICAgICByZXR1cm4gZm9ybWF0TWVzc2FnZShtZXNzYWdlLCB2ZXJib3NlKTtcbiAgICB9KTtcbiAgICAvLyBSZW9yZGVyIGVycm9ycyB0byBwdXQgdGhlIG1vc3QgcmVsZXZhbnQgb25lcyBmaXJzdC5cbiAgICBsZXQgcmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgPSAtMTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkRXJyb3JzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBmb3JtYXR0ZWRFcnJvcnNbaV07XG4gICAgICAgIGlmIChlcnJvci5pbmNsdWRlcyhcIlJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yXCIpKSB7XG4gICAgICAgICAgICByZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNb3ZlIHRoZSByZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciB0byB0aGUgdG9wIGlmIGl0IGV4aXN0c1xuICAgIGlmIChyZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBmb3JtYXR0ZWRFcnJvcnMuc3BsaWNlKHJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yLCAxKTtcbiAgICAgICAgZm9ybWF0dGVkRXJyb3JzLnVuc2hpZnQoZXJyb3JbMF0pO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgIC4uLmpzb24sXG4gICAgICAgIGVycm9yczogZm9ybWF0dGVkRXJyb3JzLFxuICAgICAgICB3YXJuaW5nczogZm9ybWF0dGVkV2FybmluZ3NcbiAgICB9O1xuICAgIGlmICghdmVyYm9zZSAmJiByZXN1bHQuZXJyb3JzLnNvbWUoaXNMaWtlbHlBU3ludGF4RXJyb3IpKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgc3ludGF4IGVycm9ycywgc2hvdyBqdXN0IHRoZW0uXG4gICAgICAgIHJlc3VsdC5lcnJvcnMgPSByZXN1bHQuZXJyb3JzLmZpbHRlcihpc0xpa2VseUFTeW50YXhFcnJvcik7XG4gICAgICAgIHJlc3VsdC53YXJuaW5ncyA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtYXQtd2VicGFjay1tZXNzYWdlcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZm9ybWF0V2VicGFja01lc3NhZ2VzIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9zdHJpcGFuc2kiLCJfIiwiZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsIiwiV0VCUEFDS19CUkVBS0lOR19DSEFOR0VfUE9MWUZJTExTIiwiaXNMaWtlbHlBU3ludGF4RXJyb3IiLCJtZXNzYWdlIiwiZGVmYXVsdCIsImluY2x1ZGVzIiwiaGFkTWlzc2luZ1Nhc3NFcnJvciIsImZvcm1hdE1lc3NhZ2UiLCJ2ZXJib3NlIiwiaW1wb3J0VHJhY2VOb3RlIiwiZmlsdGVyZWRNb2R1bGVUcmFjZSIsIm1vZHVsZVRyYWNlIiwiZmlsdGVyIiwidHJhY2UiLCJ0ZXN0Iiwib3JpZ2luTmFtZSIsImJvZHkiLCJicmVha2luZ0NoYW5nZUluZGV4IiwiaW5kZXhPZiIsInNsaWNlIiwibW9kdWxlTmFtZSIsImZpbGUiLCJkZXRhaWxzIiwibGVuZ3RoIiwibWFwIiwiam9pbiIsInN0YWNrIiwibGluZXMiLCJzcGxpdCIsImxpbmUiLCJwYXJzaW5nRXJyb3IiLCJleGVjIiwiZXJyb3JMaW5lIiwiZXJyb3JDb2x1bW4iLCJlcnJvck1lc3NhZ2UiLCJyZXBsYWNlIiwidHJpbSIsInNwbGljZSIsIm1hdGNoIiwiZmlyc3RMaW5lIiwiaW5kZXgiLCJhcnIiLCJqc29uIiwiZm9ybWF0dGVkRXJyb3JzIiwiZXJyb3JzIiwiaXNVbmtub3duTmV4dEZvbnRFcnJvciIsImZvcm1hdHRlZFdhcm5pbmdzIiwid2FybmluZ3MiLCJyZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciIsImkiLCJlcnJvciIsInVuc2hpZnQiLCJyZXN1bHQiLCJzb21lIiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/dev/noop-turbopack-hmr.js": +/*!*****************************************************************!*\ + !*** ./node_modules/next/dist/client/dev/noop-turbopack-hmr.js ***! + \*****************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// The Turbopack HMR client can't be properly omitted at the moment (WEB-1589),\n// so instead we remap its import to this file in webpack builds.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"connect\", ({\n enumerable: true,\n get: function() {\n return connect;\n }\n}));\nfunction connect() {}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=noop-turbopack-hmr.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ub29wLXR1cmJvcGFjay1obXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsK0VBQStFO0FBQy9FLGlFQUFpRTtBQUNwRDtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0EsV0FBVztBQUVwQixJQUFJLENBQUMsT0FBT0osUUFBUUssT0FBTyxLQUFLLGNBQWUsT0FBT0wsUUFBUUssT0FBTyxLQUFLLFlBQVlMLFFBQVFLLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT0wsUUFBUUssT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS1IsT0FBT0MsY0FBYyxDQUFDQyxRQUFRSyxPQUFPLEVBQUUsY0FBYztRQUFFSixPQUFPO0lBQUs7SUFDbkVILE9BQU9TLE1BQU0sQ0FBQ1AsUUFBUUssT0FBTyxFQUFFTDtJQUMvQlEsT0FBT1IsT0FBTyxHQUFHQSxRQUFRSyxPQUFPO0FBQ2xDLEVBRUEsOENBQThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ub29wLXR1cmJvcGFjay1obXIuanM/NDE0YyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgVHVyYm9wYWNrIEhNUiBjbGllbnQgY2FuJ3QgYmUgcHJvcGVybHkgb21pdHRlZCBhdCB0aGUgbW9tZW50IChXRUItMTU4OSksXG4vLyBzbyBpbnN0ZWFkIHdlIHJlbWFwIGl0cyBpbXBvcnQgdG8gdGhpcyBmaWxlIGluIHdlYnBhY2sgYnVpbGRzLlxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25uZWN0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjb25uZWN0O1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gY29ubmVjdCgpIHt9XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vb3AtdHVyYm9wYWNrLWhtci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiY29ubmVjdCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/dev/noop-turbopack-hmr.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/client/has-base-path.js ***! + \********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hasBasePath\", ({\n enumerable: true,\n get: function() {\n return hasBasePath;\n }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ../shared/lib/router/utils/path-has-prefix */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nconst basePath = false || \"\";\nfunction hasBasePath(path) {\n return (0, _pathhasprefix.pathHasPrefix)(path, basePath);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=has-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2hhcy1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILCtDQUE4QztJQUMxQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGlCQUFpQkMsbUJBQU9BLENBQUMsMklBQTRDO0FBQzNFLE1BQU1DLFdBQVdDLE1BQWtDLElBQUk7QUFDdkQsU0FBU0osWUFBWU8sSUFBSTtJQUNyQixPQUFPLENBQUMsR0FBR04sZUFBZU8sYUFBYSxFQUFFRCxNQUFNSjtBQUNuRDtBQUVBLElBQUksQ0FBQyxPQUFPUCxRQUFRYSxPQUFPLEtBQUssY0FBZSxPQUFPYixRQUFRYSxPQUFPLEtBQUssWUFBWWIsUUFBUWEsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPYixRQUFRYSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLaEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRYSxPQUFPLEVBQUUsY0FBYztRQUFFWixPQUFPO0lBQUs7SUFDbkVILE9BQU9pQixNQUFNLENBQUNmLFFBQVFhLE9BQU8sRUFBRWI7SUFDL0JnQixPQUFPaEIsT0FBTyxHQUFHQSxRQUFRYSxPQUFPO0FBQ2xDLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2hhcy1iYXNlLXBhdGguanM/NWE0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhhc0Jhc2VQYXRoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoYXNCYXNlUGF0aDtcbiAgICB9XG59KTtcbmNvbnN0IF9wYXRoaGFzcHJlZml4ID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtaGFzLXByZWZpeFwiKTtcbmNvbnN0IGJhc2VQYXRoID0gcHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCB8fCBcIlwiO1xuZnVuY3Rpb24gaGFzQmFzZVBhdGgocGF0aCkge1xuICAgIHJldHVybiAoMCwgX3BhdGhoYXNwcmVmaXgucGF0aEhhc1ByZWZpeCkocGF0aCwgYmFzZVBhdGgpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXMtYmFzZS1wYXRoLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJoYXNCYXNlUGF0aCIsIl9wYXRoaGFzcHJlZml4IiwicmVxdWlyZSIsImJhc2VQYXRoIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9ST1VURVJfQkFTRVBBVEgiLCJwYXRoIiwicGF0aEhhc1ByZWZpeCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js": +/*!*******************************************************************!*\ + !*** ./node_modules/next/dist/client/normalize-trailing-slash.js ***! + \*******************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return normalizePathTrailingSlash;\n }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst normalizePathTrailingSlash = (path)=>{\n if (!path.startsWith(\"/\") || undefined) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n if (false) {}\n return \"\" + (0, _removetrailingslash.removeTrailingSlash)(pathname) + query + hash;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=normalize-trailing-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L25vcm1hbGl6ZS10cmFpbGluZy1zbGFzaC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsOERBQTZEO0lBQ3pESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsdUJBQXVCQyxtQkFBT0EsQ0FBQyx1SkFBa0Q7QUFDdkYsTUFBTUMsYUFBYUQsbUJBQU9BLENBQUMsaUlBQXVDO0FBQ2xFLE1BQU1GLDZCQUE2QixDQUFDSTtJQUNoQyxJQUFJLENBQUNBLEtBQUtDLFVBQVUsQ0FBQyxRQUFRQyxTQUF3QyxFQUFFO1FBQ25FLE9BQU9GO0lBQ1g7SUFDQSxNQUFNLEVBQUVLLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUdSLFdBQVdTLFNBQVMsRUFBRVI7SUFDNUQsSUFBSUUsS0FBaUMsRUFBRSxFQVF0QztJQUNELE9BQU8sS0FBSyxDQUFDLEdBQUdMLHFCQUFxQmMsbUJBQW1CLEVBQUVOLFlBQVlDLFFBQVFDO0FBQ2xGO0FBRUEsSUFBSSxDQUFDLE9BQU9mLFFBQVFxQixPQUFPLEtBQUssY0FBZSxPQUFPckIsUUFBUXFCLE9BQU8sS0FBSyxZQUFZckIsUUFBUXFCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3JCLFFBQVFxQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLeEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRcUIsT0FBTyxFQUFFLGNBQWM7UUFBRXBCLE9BQU87SUFBSztJQUNuRUgsT0FBT3lCLE1BQU0sQ0FBQ3ZCLFFBQVFxQixPQUFPLEVBQUVyQjtJQUMvQndCLE9BQU94QixPQUFPLEdBQUdBLFFBQVFxQixPQUFPO0FBQ2xDLEVBRUEsb0RBQW9EIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L25vcm1hbGl6ZS10cmFpbGluZy1zbGFzaC5qcz80YzJlIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2hcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoO1xuICAgIH1cbn0pO1xuY29uc3QgX3JlbW92ZXRyYWlsaW5nc2xhc2ggPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoXCIpO1xuY29uc3QgX3BhcnNlcGF0aCA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1wYXRoXCIpO1xuY29uc3Qgbm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2ggPSAocGF0aCk9PntcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChcIi9cIikgfHwgcHJvY2Vzcy5lbnYuX19ORVhUX01BTlVBTF9UUkFJTElOR19TTEFTSCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgeyBwYXRobmFtZSwgcXVlcnksIGhhc2ggfSA9ICgwLCBfcGFyc2VwYXRoLnBhcnNlUGF0aCkocGF0aCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9UUkFJTElOR19TTEFTSCkge1xuICAgICAgICBpZiAoL1xcLlteL10rXFwvPyQvLnRlc3QocGF0aG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIiArICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShwYXRobmFtZSkgKyBxdWVyeSArIGhhc2g7XG4gICAgICAgIH0gZWxzZSBpZiAocGF0aG5hbWUuZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIiArIHBhdGhuYW1lICsgcXVlcnkgKyBoYXNoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lICsgXCIvXCIgKyBxdWVyeSArIGhhc2g7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwiXCIgKyAoMCwgX3JlbW92ZXRyYWlsaW5nc2xhc2gucmVtb3ZlVHJhaWxpbmdTbGFzaCkocGF0aG5hbWUpICsgcXVlcnkgKyBoYXNoO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCIsIl9yZW1vdmV0cmFpbGluZ3NsYXNoIiwicmVxdWlyZSIsIl9wYXJzZXBhdGgiLCJwYXRoIiwic3RhcnRzV2l0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfTUFOVUFMX1RSQUlMSU5HX1NMQVNIIiwicGF0aG5hbWUiLCJxdWVyeSIsImhhc2giLCJwYXJzZVBhdGgiLCJfX05FWFRfVFJBSUxJTkdfU0xBU0giLCJ0ZXN0IiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsImVuZHNXaXRoIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/normalize-trailing-slash.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/on-recoverable-error.js": +/*!***************************************************************!*\ + !*** ./node_modules/next/dist/client/on-recoverable-error.js ***! + \***************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return onRecoverableError;\n }\n}));\nconst _bailouttocsr = __webpack_require__(/*! ../shared/lib/lazy-dynamic/bailout-to-csr */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nfunction onRecoverableError(err) {\n // Using default react onRecoverableError\n // x-ref: https://github.com/facebook/react/blob/d4bc16a7d69eb2ea38a88c8ac0b461d5f72cdcab/packages/react-dom/src/client/ReactDOMRoot.js#L83\n const defaultOnRecoverableError = typeof reportError === \"function\" ? reportError : (error)=>{\n window.console.error(error);\n };\n // Skip certain custom errors which are not expected to be reported on client\n if ((0, _bailouttocsr.isBailoutToCSRError)(err)) return;\n defaultOnRecoverableError(err);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=on-recoverable-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L29uLXJlY292ZXJhYmxlLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxnQkFBZ0JDLG1CQUFPQSxDQUFDLHlJQUEyQztBQUN6RSxTQUFTRixtQkFBbUJHLEdBQUc7SUFDM0IseUNBQXlDO0lBQ3pDLDJJQUEySTtJQUMzSSxNQUFNQyw0QkFBNEIsT0FBT0MsZ0JBQWdCLGFBQ3pEQSxjQUFjLENBQUNDO1FBQ1hDLE9BQU9DLE9BQU8sQ0FBQ0YsS0FBSyxDQUFDQTtJQUN6QjtJQUNBLDZFQUE2RTtJQUM3RSxJQUFJLENBQUMsR0FBR0wsY0FBY1EsbUJBQW1CLEVBQUVOLE1BQU07SUFDakRDLDBCQUEwQkQ7QUFDOUI7QUFFQSxJQUFJLENBQUMsT0FBT1AsUUFBUWMsT0FBTyxLQUFLLGNBQWUsT0FBT2QsUUFBUWMsT0FBTyxLQUFLLFlBQVlkLFFBQVFjLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2QsUUFBUWMsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2pCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWMsT0FBTyxFQUFFLGNBQWM7UUFBRWIsT0FBTztJQUFLO0lBQ25FSCxPQUFPa0IsTUFBTSxDQUFDaEIsUUFBUWMsT0FBTyxFQUFFZDtJQUMvQmlCLE9BQU9qQixPQUFPLEdBQUdBLFFBQVFjLE9BQU87QUFDbEMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvb24tcmVjb3ZlcmFibGUtZXJyb3IuanM/ZWI5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG9uUmVjb3ZlcmFibGVFcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IF9iYWlsb3V0dG9jc3IgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3JcIik7XG5mdW5jdGlvbiBvblJlY292ZXJhYmxlRXJyb3IoZXJyKSB7XG4gICAgLy8gVXNpbmcgZGVmYXVsdCByZWFjdCBvblJlY292ZXJhYmxlRXJyb3JcbiAgICAvLyB4LXJlZjogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvZDRiYzE2YTdkNjllYjJlYTM4YTg4YzhhYzBiNDYxZDVmNzJjZGNhYi9wYWNrYWdlcy9yZWFjdC1kb20vc3JjL2NsaWVudC9SZWFjdERPTVJvb3QuanMjTDgzXG4gICAgY29uc3QgZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvciA9IHR5cGVvZiByZXBvcnRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gLy8gZW11bGF0aW5nIGFuIHVuY2F1Z2h0IEphdmFTY3JpcHQgZXJyb3IuXG4gICAgcmVwb3J0RXJyb3IgOiAoZXJyb3IpPT57XG4gICAgICAgIHdpbmRvdy5jb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIC8vIFNraXAgY2VydGFpbiBjdXN0b20gZXJyb3JzIHdoaWNoIGFyZSBub3QgZXhwZWN0ZWQgdG8gYmUgcmVwb3J0ZWQgb24gY2xpZW50XG4gICAgaWYgKCgwLCBfYmFpbG91dHRvY3NyLmlzQmFpbG91dFRvQ1NSRXJyb3IpKGVycikpIHJldHVybjtcbiAgICBkZWZhdWx0T25SZWNvdmVyYWJsZUVycm9yKGVycik7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uLXJlY292ZXJhYmxlLWVycm9yLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJvblJlY292ZXJhYmxlRXJyb3IiLCJfYmFpbG91dHRvY3NyIiwicmVxdWlyZSIsImVyciIsImRlZmF1bHRPblJlY292ZXJhYmxlRXJyb3IiLCJyZXBvcnRFcnJvciIsImVycm9yIiwid2luZG93IiwiY29uc29sZSIsImlzQmFpbG91dFRvQ1NSRXJyb3IiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/on-recoverable-error.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/client/remove-base-path.js": +/*!***********************************************************!*\ + !*** ./node_modules/next/dist/client/remove-base-path.js ***! + \***********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeBasePath\", ({\n enumerable: true,\n get: function() {\n return removeBasePath;\n }\n}));\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js\");\nconst basePath = false || \"\";\nfunction removeBasePath(path) {\n if (false) {}\n // Can't trim the basePath if it has zero length!\n if (basePath.length === 0) return path;\n path = path.slice(basePath.length);\n if (!path.startsWith(\"/\")) path = \"/\" + path;\n return path;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=remove-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlbW92ZS1iYXNlLXBhdGguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGtEQUFpRDtJQUM3Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGVBQWVDLG1CQUFPQSxDQUFDLDZGQUFpQjtBQUM5QyxNQUFNQyxXQUFXQyxNQUFrQyxJQUFJO0FBQ3ZELFNBQVNKLGVBQWVPLElBQUk7SUFDeEIsSUFBSUgsS0FBMEMsRUFBRSxFQUkvQztJQUNELGlEQUFpRDtJQUNqRCxJQUFJRCxTQUFTTyxNQUFNLEtBQUssR0FBRyxPQUFPSDtJQUNsQ0EsT0FBT0EsS0FBS0ksS0FBSyxDQUFDUixTQUFTTyxNQUFNO0lBQ2pDLElBQUksQ0FBQ0gsS0FBS0ssVUFBVSxDQUFDLE1BQU1MLE9BQU8sTUFBTUE7SUFDeEMsT0FBT0E7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPWCxRQUFRaUIsT0FBTyxLQUFLLGNBQWUsT0FBT2pCLFFBQVFpQixPQUFPLEtBQUssWUFBWWpCLFFBQVFpQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9qQixRQUFRaUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3BCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWlCLE9BQU8sRUFBRSxjQUFjO1FBQUVoQixPQUFPO0lBQUs7SUFDbkVILE9BQU9xQixNQUFNLENBQUNuQixRQUFRaUIsT0FBTyxFQUFFakI7SUFDL0JvQixPQUFPcEIsT0FBTyxHQUFHQSxRQUFRaUIsT0FBTztBQUNsQyxFQUVBLDRDQUE0QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZW1vdmUtYmFzZS1wYXRoLmpzP2I0ZjEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZW1vdmVCYXNlUGF0aFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlQmFzZVBhdGg7XG4gICAgfVxufSk7XG5jb25zdCBfaGFzYmFzZXBhdGggPSByZXF1aXJlKFwiLi9oYXMtYmFzZS1wYXRoXCIpO1xuY29uc3QgYmFzZVBhdGggPSBwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIIHx8IFwiXCI7XG5mdW5jdGlvbiByZW1vdmVCYXNlUGF0aChwYXRoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9NQU5VQUxfQ0xJRU5UX0JBU0VfUEFUSCkge1xuICAgICAgICBpZiAoISgwLCBfaGFzYmFzZXBhdGguaGFzQmFzZVBhdGgpKHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYW4ndCB0cmltIHRoZSBiYXNlUGF0aCBpZiBpdCBoYXMgemVybyBsZW5ndGghXG4gICAgaWYgKGJhc2VQYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHBhdGg7XG4gICAgcGF0aCA9IHBhdGguc2xpY2UoYmFzZVBhdGgubGVuZ3RoKTtcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChcIi9cIikpIHBhdGggPSBcIi9cIiArIHBhdGg7XG4gICAgcmV0dXJuIHBhdGg7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlbW92ZS1iYXNlLXBhdGguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInJlbW92ZUJhc2VQYXRoIiwiX2hhc2Jhc2VwYXRoIiwicmVxdWlyZSIsImJhc2VQYXRoIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9ST1VURVJfQkFTRVBBVEgiLCJwYXRoIiwiX19ORVhUX01BTlVBTF9DTElFTlRfQkFTRV9QQVRIIiwiaGFzQmFzZVBhdGgiLCJsZW5ndGgiLCJzbGljZSIsInN0YXJ0c1dpdGgiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/remove-base-path.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js": +/*!********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js ***! + \********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n AppRouterContext: function() {\n return AppRouterContext;\n },\n LayoutRouterContext: function() {\n return LayoutRouterContext;\n },\n GlobalLayoutRouterContext: function() {\n return GlobalLayoutRouterContext;\n },\n TemplateContext: function() {\n return TemplateContext;\n },\n MissingSlotContext: function() {\n return MissingSlotContext;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst AppRouterContext = _react.default.createContext(null);\nconst LayoutRouterContext = _react.default.createContext(null);\nconst GlobalLayoutRouterContext = _react.default.createContext(null);\nconst TemplateContext = _react.default.createContext(null);\nif (true) {\n AppRouterContext.displayName = \"AppRouterContext\";\n LayoutRouterContext.displayName = \"LayoutRouterContext\";\n GlobalLayoutRouterContext.displayName = \"GlobalLayoutRouterContext\";\n TemplateContext.displayName = \"TemplateContext\";\n}\nconst MissingSlotContext = _react.default.createContext(new Set()); //# sourceMappingURL=app-router-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6InFEQUVhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBTU47QUFDQSxTQUFTTSxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJWixPQUFPQyxjQUFjLENBQUNVLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUVIsU0FBUztJQUNiRyxrQkFBa0I7UUFDZCxPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLDJCQUEyQjtRQUN2QixPQUFPQTtJQUNYO0lBQ0FDLGlCQUFpQjtRQUNiLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLDJCQUEyQkMsbUJBQU9BLENBQUMsZ0lBQXlDO0FBQ2xGLE1BQU1DLFNBQVMsV0FBVyxHQUFHRix5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsbUZBQU87QUFDdkUsTUFBTVosbUJBQW1CYSxPQUFPRSxPQUFPLENBQUNDLGFBQWEsQ0FBQztBQUN0RCxNQUFNZixzQkFBc0JZLE9BQU9FLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDO0FBQ3pELE1BQU1kLDRCQUE0QlcsT0FBT0UsT0FBTyxDQUFDQyxhQUFhLENBQUM7QUFDL0QsTUFBTWIsa0JBQWtCVSxPQUFPRSxPQUFPLENBQUNDLGFBQWEsQ0FBQztBQUNyRCxJQUFJQyxJQUFxQyxFQUFFO0lBQ3ZDakIsaUJBQWlCa0IsV0FBVyxHQUFHO0lBQy9CakIsb0JBQW9CaUIsV0FBVyxHQUFHO0lBQ2xDaEIsMEJBQTBCZ0IsV0FBVyxHQUFHO0lBQ3hDZixnQkFBZ0JlLFdBQVcsR0FBRztBQUNsQztBQUNBLE1BQU1kLHFCQUFxQlMsT0FBT0UsT0FBTyxDQUFDQyxhQUFhLENBQUMsSUFBSUcsUUFFNUQsNkRBQTZEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanM/YzBhMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBcHBSb3V0ZXJDb250ZXh0OiBudWxsLFxuICAgIExheW91dFJvdXRlckNvbnRleHQ6IG51bGwsXG4gICAgR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dDogbnVsbCxcbiAgICBUZW1wbGF0ZUNvbnRleHQ6IG51bGwsXG4gICAgTWlzc2luZ1Nsb3RDb250ZXh0OiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIEFwcFJvdXRlckNvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQXBwUm91dGVyQ29udGV4dDtcbiAgICB9LFxuICAgIExheW91dFJvdXRlckNvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTGF5b3V0Um91dGVyQ29udGV4dDtcbiAgICB9LFxuICAgIEdsb2JhbExheW91dFJvdXRlckNvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dDtcbiAgICB9LFxuICAgIFRlbXBsYXRlQ29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBUZW1wbGF0ZUNvbnRleHQ7XG4gICAgfSxcbiAgICBNaXNzaW5nU2xvdENvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTWlzc2luZ1Nsb3RDb250ZXh0O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IEFwcFJvdXRlckNvbnRleHQgPSBfcmVhY3QuZGVmYXVsdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuY29uc3QgTGF5b3V0Um91dGVyQ29udGV4dCA9IF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5jb25zdCBHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0ID0gX3JlYWN0LmRlZmF1bHQuY3JlYXRlQ29udGV4dChudWxsKTtcbmNvbnN0IFRlbXBsYXRlQ29udGV4dCA9IF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgQXBwUm91dGVyQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiQXBwUm91dGVyQ29udGV4dFwiO1xuICAgIExheW91dFJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSBcIkxheW91dFJvdXRlckNvbnRleHRcIjtcbiAgICBHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0XCI7XG4gICAgVGVtcGxhdGVDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJUZW1wbGF0ZUNvbnRleHRcIjtcbn1cbmNvbnN0IE1pc3NpbmdTbG90Q29udGV4dCA9IF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQobmV3IFNldCgpKTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIkFwcFJvdXRlckNvbnRleHQiLCJMYXlvdXRSb3V0ZXJDb250ZXh0IiwiR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCIsIlRlbXBsYXRlQ29udGV4dCIsIk1pc3NpbmdTbG90Q29udGV4dCIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfcmVhY3QiLCJfIiwiZGVmYXVsdCIsImNyZWF0ZUNvbnRleHQiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiLCJTZXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/hash.js": +/*!***************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/hash.js ***! + \***************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// http://www.cse.yorku.ca/~oz/hash.html\n// More specifically, 32-bit hash via djbxor\n// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765)\n// This is due to number type differences between rust for turbopack to js number types,\n// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching\n// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation\n// as can gaurantee determinstic output from 32bit hash.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n djb2Hash: function() {\n return djb2Hash;\n },\n hexHash: function() {\n return hexHash;\n }\n});\nfunction djb2Hash(str) {\n let hash = 5381;\n for(let i = 0; i < str.length; i++){\n const char = str.charCodeAt(i);\n hash = (hash << 5) + hash + char & 0xffffffff;\n }\n return hash >>> 0;\n}\nfunction hexHash(str) {\n return djb2Hash(str).toString(36).slice(0, 5);\n} //# sourceMappingURL=hash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9oYXNoLmpzIiwibWFwcGluZ3MiOiJBQUFBLHdDQUF3QztBQUN4Qyw0Q0FBNEM7QUFDNUMsaUhBQWlIO0FBQ2pILHdGQUF3RjtBQUN4RixnR0FBZ0c7QUFDaEcsd0hBQXdIO0FBQ3hILHdEQUF3RDtBQUMzQztBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsVUFBVTtRQUNOLE9BQU9BO0lBQ1g7SUFDQUMsU0FBUztRQUNMLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLFNBQVNELFNBQVNRLEdBQUc7SUFDakIsSUFBSUMsT0FBTztJQUNYLElBQUksSUFBSUMsSUFBSSxHQUFHQSxJQUFJRixJQUFJRyxNQUFNLEVBQUVELElBQUk7UUFDL0IsTUFBTUUsT0FBT0osSUFBSUssVUFBVSxDQUFDSDtRQUM1QkQsT0FBTyxDQUFDQSxRQUFRLEtBQUtBLE9BQU9HLE9BQU87SUFDdkM7SUFDQSxPQUFPSCxTQUFTO0FBQ3BCO0FBQ0EsU0FBU1IsUUFBUU8sR0FBRztJQUNoQixPQUFPUixTQUFTUSxLQUFLTSxRQUFRLENBQUMsSUFBSUMsS0FBSyxDQUFDLEdBQUc7QUFDL0MsRUFFQSxnQ0FBZ0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2hhc2guanM/Y2I2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwOi8vd3d3LmNzZS55b3JrdS5jYS9+b3ovaGFzaC5odG1sXG4vLyBNb3JlIHNwZWNpZmljYWxseSwgMzItYml0IGhhc2ggdmlhIGRqYnhvclxuLy8gKHJlZjogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZXBsYXdsZXNzLzUyODEzYjFkOGFkOWFmNTEwZDg1P3Blcm1hbGlua19jb21tZW50X2lkPTMzNjc3NjUjZ2lzdGNvbW1lbnQtMzM2Nzc2NSlcbi8vIFRoaXMgaXMgZHVlIHRvIG51bWJlciB0eXBlIGRpZmZlcmVuY2VzIGJldHdlZW4gcnVzdCBmb3IgdHVyYm9wYWNrIHRvIGpzIG51bWJlciB0eXBlcyxcbi8vIHdoZXJlIHJ1c3QgZG9lcyBub3QgaGF2ZSBlYXN5IHdheSB0byByZXByZWVzbnQganMncyA1My1iaXQgZmxvYXQgbnVtYmVyIHR5cGUgZm9yIHRoZSBtYXRjaGluZ1xuLy8gb3ZlcmZsb3cgYmVoYXZpb3IuIFRoaXMgaXMgbW9yZSBgY29ycmVjdGAgaW4gdGVybXMgb2YgaGF2aW5nIGNhbm9uaWNhbCBoYXNoIGFjcm9zcyBkaWZmZXJlbnQgcnVudGltZSAvIGltcGxlbWVudGF0aW9uXG4vLyBhcyBjYW4gZ2F1cmFudGVlIGRldGVybWluc3RpYyBvdXRwdXQgZnJvbSAzMmJpdCBoYXNoLlxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBkamIySGFzaDogbnVsbCxcbiAgICBoZXhIYXNoOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGRqYjJIYXNoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRqYjJIYXNoO1xuICAgIH0sXG4gICAgaGV4SGFzaDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoZXhIYXNoO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gZGpiMkhhc2goc3RyKSB7XG4gICAgbGV0IGhhc2ggPSA1MzgxO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspe1xuICAgICAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSArIGhhc2ggKyBjaGFyICYgMHhmZmZmZmZmZjtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2ggPj4+IDA7XG59XG5mdW5jdGlvbiBoZXhIYXNoKHN0cikge1xuICAgIHJldHVybiBkamIySGFzaChzdHIpLnRvU3RyaW5nKDM2KS5zbGljZSgwLCA1KTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzaC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJkamIySGFzaCIsImhleEhhc2giLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJzdHIiLCJoYXNoIiwiaSIsImxlbmd0aCIsImNoYXIiLCJjaGFyQ29kZUF0IiwidG9TdHJpbmciLCJzbGljZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/hash.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js ***! + \**********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HeadManagerContext\", ({\n enumerable: true,\n get: function() {\n return HeadManagerContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst HeadManagerContext = _react.default.createContext({});\nif (true) {\n HeadManagerContext.displayName = \"HeadManagerContext\";\n} //# sourceMappingURL=head-manager-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsc0RBQXFEO0lBQ2pESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyxnSUFBeUM7QUFDbEYsTUFBTUMsU0FBUyxXQUFXLEdBQUdGLHlCQUF5QkcsQ0FBQyxDQUFDRixtQkFBT0EsQ0FBQyxtRkFBTztBQUN2RSxNQUFNRixxQkFBcUJHLE9BQU9FLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDLENBQUM7QUFDekQsSUFBSUMsSUFBcUMsRUFBRTtJQUN2Q1AsbUJBQW1CUSxXQUFXLEdBQUc7QUFDckMsRUFFQSwrREFBK0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2hlYWQtbWFuYWdlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLmpzP2VmNDgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJIZWFkTWFuYWdlckNvbnRleHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEhlYWRNYW5hZ2VyQ29udGV4dDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBIZWFkTWFuYWdlckNvbnRleHQgPSBfcmVhY3QuZGVmYXVsdC5jcmVhdGVDb250ZXh0KHt9KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBIZWFkTWFuYWdlckNvbnRleHQuZGlzcGxheU5hbWUgPSBcIkhlYWRNYW5hZ2VyQ29udGV4dFwiO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiSGVhZE1hbmFnZXJDb250ZXh0IiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdCIsIl8iLCJkZWZhdWx0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js ***! + \**********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n SearchParamsContext: function() {\n return SearchParamsContext;\n },\n PathnameContext: function() {\n return PathnameContext;\n },\n PathParamsContext: function() {\n return PathParamsContext;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst SearchParamsContext = (0, _react.createContext)(null);\nconst PathnameContext = (0, _react.createContext)(null);\nconst PathParamsContext = (0, _react.createContext)(null);\nif (true) {\n SearchParamsContext.displayName = \"SearchParamsContext\";\n PathnameContext.displayName = \"PathnameContext\";\n PathParamsContext.displayName = \"PathParamsContext\";\n} //# sourceMappingURL=hooks-client-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoicURBRWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FJTjtBQUNBLFNBQVNJLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlWLE9BQU9DLGNBQWMsQ0FBQ1EsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTixTQUFTO0lBQ2JHLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLGlCQUFpQjtRQUNiLE9BQU9BO0lBQ1g7SUFDQUMsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sU0FBU0MsbUJBQU9BLENBQUMsbUZBQU87QUFDOUIsTUFBTVYsc0JBQXNCLENBQUMsR0FBR1MsT0FBT0UsYUFBYSxFQUFFO0FBQ3RELE1BQU1WLGtCQUFrQixDQUFDLEdBQUdRLE9BQU9FLGFBQWEsRUFBRTtBQUNsRCxNQUFNVCxvQkFBb0IsQ0FBQyxHQUFHTyxPQUFPRSxhQUFhLEVBQUU7QUFDcEQsSUFBSUMsSUFBcUMsRUFBRTtJQUN2Q1osb0JBQW9CYSxXQUFXLEdBQUc7SUFDbENaLGdCQUFnQlksV0FBVyxHQUFHO0lBQzlCWCxrQkFBa0JXLFdBQVcsR0FBRztBQUNwQyxFQUVBLCtEQUErRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaG9va3MtY2xpZW50LWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanM/N2E2NSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBTZWFyY2hQYXJhbXNDb250ZXh0OiBudWxsLFxuICAgIFBhdGhuYW1lQ29udGV4dDogbnVsbCxcbiAgICBQYXRoUGFyYW1zQ29udGV4dDogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBTZWFyY2hQYXJhbXNDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNlYXJjaFBhcmFtc0NvbnRleHQ7XG4gICAgfSxcbiAgICBQYXRobmFtZUNvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUGF0aG5hbWVDb250ZXh0O1xuICAgIH0sXG4gICAgUGF0aFBhcmFtc0NvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUGF0aFBhcmFtc0NvbnRleHQ7XG4gICAgfVxufSk7XG5jb25zdCBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5jb25zdCBTZWFyY2hQYXJhbXNDb250ZXh0ID0gKDAsIF9yZWFjdC5jcmVhdGVDb250ZXh0KShudWxsKTtcbmNvbnN0IFBhdGhuYW1lQ29udGV4dCA9ICgwLCBfcmVhY3QuY3JlYXRlQ29udGV4dCkobnVsbCk7XG5jb25zdCBQYXRoUGFyYW1zQ29udGV4dCA9ICgwLCBfcmVhY3QuY3JlYXRlQ29udGV4dCkobnVsbCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgU2VhcmNoUGFyYW1zQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiU2VhcmNoUGFyYW1zQ29udGV4dFwiO1xuICAgIFBhdGhuYW1lQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiUGF0aG5hbWVDb250ZXh0XCI7XG4gICAgUGF0aFBhcmFtc0NvbnRleHQuZGlzcGxheU5hbWUgPSBcIlBhdGhQYXJhbXNDb250ZXh0XCI7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhvb2tzLWNsaWVudC1jb250ZXh0LnNoYXJlZC1ydW50aW1lLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIlNlYXJjaFBhcmFtc0NvbnRleHQiLCJQYXRobmFtZUNvbnRleHQiLCJQYXRoUGFyYW1zQ29udGV4dCIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9yZWFjdCIsInJlcXVpcmUiLCJjcmVhdGVDb250ZXh0IiwicHJvY2VzcyIsImRpc3BsYXlOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js ***! + \**************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// This has to be a shared module which is shared between client component error boundary and dynamic component\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n BailoutToCSRError: function() {\n return BailoutToCSRError;\n },\n isBailoutToCSRError: function() {\n return isBailoutToCSRError;\n }\n});\nconst BAILOUT_TO_CSR = \"BAILOUT_TO_CLIENT_SIDE_RENDERING\";\nclass BailoutToCSRError extends Error {\n constructor(reason){\n super(\"Bail out to client-side rendering: \" + reason);\n this.reason = reason;\n this.digest = BAILOUT_TO_CSR;\n }\n}\nfunction isBailoutToCSRError(err) {\n if (typeof err !== \"object\" || err === null || !(\"digest\" in err)) {\n return false;\n }\n return err.digest === BAILOUT_TO_CSR;\n} //# sourceMappingURL=bailout-to-csr.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3IuanMiLCJtYXBwaW5ncyI6IkFBQUEsK0dBQStHO0FBQ2xHO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxtQkFBbUI7UUFDZixPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxpQkFBaUI7QUFDdkIsTUFBTVIsMEJBQTBCUztJQUM1QkMsWUFBWUMsTUFBTSxDQUFDO1FBQ2YsS0FBSyxDQUFDLHdDQUF3Q0E7UUFDOUMsSUFBSSxDQUFDQSxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxNQUFNLEdBQUdKO0lBQ2xCO0FBQ0o7QUFDQSxTQUFTUCxvQkFBb0JZLEdBQUc7SUFDNUIsSUFBSSxPQUFPQSxRQUFRLFlBQVlBLFFBQVEsUUFBUSxDQUFFLGFBQVlBLEdBQUUsR0FBSTtRQUMvRCxPQUFPO0lBQ1g7SUFDQSxPQUFPQSxJQUFJRCxNQUFNLEtBQUtKO0FBQzFCLEVBRUEsMENBQTBDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3IuanM/MDA5OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGhhcyB0byBiZSBhIHNoYXJlZCBtb2R1bGUgd2hpY2ggaXMgc2hhcmVkIGJldHdlZW4gY2xpZW50IGNvbXBvbmVudCBlcnJvciBib3VuZGFyeSBhbmQgZHluYW1pYyBjb21wb25lbnRcblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQmFpbG91dFRvQ1NSRXJyb3I6IG51bGwsXG4gICAgaXNCYWlsb3V0VG9DU1JFcnJvcjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBCYWlsb3V0VG9DU1JFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBCYWlsb3V0VG9DU1JFcnJvcjtcbiAgICB9LFxuICAgIGlzQmFpbG91dFRvQ1NSRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNCYWlsb3V0VG9DU1JFcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IEJBSUxPVVRfVE9fQ1NSID0gXCJCQUlMT1VUX1RPX0NMSUVOVF9TSURFX1JFTkRFUklOR1wiO1xuY2xhc3MgQmFpbG91dFRvQ1NSRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocmVhc29uKXtcbiAgICAgICAgc3VwZXIoXCJCYWlsIG91dCB0byBjbGllbnQtc2lkZSByZW5kZXJpbmc6IFwiICsgcmVhc29uKTtcbiAgICAgICAgdGhpcy5yZWFzb24gPSByZWFzb247XG4gICAgICAgIHRoaXMuZGlnZXN0ID0gQkFJTE9VVF9UT19DU1I7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNCYWlsb3V0VG9DU1JFcnJvcihlcnIpIHtcbiAgICBpZiAodHlwZW9mIGVyciAhPT0gXCJvYmplY3RcIiB8fCBlcnIgPT09IG51bGwgfHwgIShcImRpZ2VzdFwiIGluIGVycikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZXJyLmRpZ2VzdCA9PT0gQkFJTE9VVF9UT19DU1I7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhaWxvdXQtdG8tY3NyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIkJhaWxvdXRUb0NTUkVycm9yIiwiaXNCYWlsb3V0VG9DU1JFcnJvciIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIkJBSUxPVVRfVE9fQ1NSIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsInJlYXNvbiIsImRpZ2VzdCIsImVyciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js ***! + \*****************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ensureLeadingSlash\", ({\n enumerable: true,\n get: function() {\n return ensureLeadingSlash;\n }\n}));\nfunction ensureLeadingSlash(path) {\n return path.startsWith(\"/\") ? path : \"/\" + path;\n} //# sourceMappingURL=ensure-leading-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9wYWdlLXBhdGgvZW5zdXJlLWxlYWRpbmctc2xhc2guanMiLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQWdCO0FBQ2pCQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsc0RBQXFEO0lBQ2pESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0EsbUJBQW1CQyxJQUFJO0lBQzVCLE9BQU9BLEtBQUtDLFVBQVUsQ0FBQyxPQUFPRCxPQUFPLE1BQU1BO0FBQy9DLEVBRUEsZ0RBQWdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9wYWdlLXBhdGgvZW5zdXJlLWxlYWRpbmctc2xhc2guanM/Y2YzMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvciBhIGdpdmVuIHBhZ2UgcGF0aCwgdGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlcmUgaXMgYSBsZWFkaW5nIHNsYXNoLlxuICogSWYgdGhlcmUgaXMgbm90IGEgbGVhZGluZyBzbGFzaCwgb25lIGlzIGFkZGVkLCBvdGhlcndpc2UgaXQgaXMgbm9vcC5cbiAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVuc3VyZUxlYWRpbmdTbGFzaFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZW5zdXJlTGVhZGluZ1NsYXNoO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gZW5zdXJlTGVhZGluZ1NsYXNoKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IHBhdGggOiBcIi9cIiArIHBhdGg7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVuc3VyZS1sZWFkaW5nLXNsYXNoLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJlbnN1cmVMZWFkaW5nU2xhc2giLCJwYXRoIiwic3RhcnRzV2l0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/action-queue.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/action-queue.js ***! + \******************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ActionQueueContext: function() {\n return ActionQueueContext;\n },\n createMutableActionQueue: function() {\n return createMutableActionQueue;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _routerreducertypes = __webpack_require__(/*! ../../../client/components/router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _routerreducer = __webpack_require__(/*! ../../../client/components/router-reducer/router-reducer */ \"(app-pages-browser)/./node_modules/next/dist/client/components/router-reducer/router-reducer.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst ActionQueueContext = _react.default.createContext(null);\nfunction runRemainingActions(actionQueue, setState) {\n if (actionQueue.pending !== null) {\n actionQueue.pending = actionQueue.pending.next;\n if (actionQueue.pending !== null) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n runAction({\n actionQueue,\n action: actionQueue.pending,\n setState\n });\n }\n }\n}\nasync function runAction(param) {\n let { actionQueue, action, setState } = param;\n const prevState = actionQueue.state;\n if (!prevState) {\n // This shouldn't happen as the state is initialized in the dispatcher if it's not set\n throw new Error(\"Invariant: Router state not initialized\");\n }\n actionQueue.pending = action;\n const payload = action.payload;\n const actionResult = actionQueue.action(prevState, payload);\n function handleResult(nextState) {\n // if we discarded this action, the state should also be discarded\n if (action.discarded) {\n // if a refresh is needed, we only want to trigger it once the action queue is empty\n if (actionQueue.needsRefresh && actionQueue.pending === null) {\n actionQueue.needsRefresh = false;\n actionQueue.dispatch({\n type: _routerreducertypes.ACTION_REFRESH,\n origin: window.location.origin\n }, setState);\n }\n return;\n }\n actionQueue.state = nextState;\n if (actionQueue.devToolsInstance) {\n actionQueue.devToolsInstance.send(payload, nextState);\n }\n runRemainingActions(actionQueue, setState);\n action.resolve(nextState);\n }\n // if the action is a promise, set up a callback to resolve it\n if ((0, _routerreducertypes.isThenable)(actionResult)) {\n actionResult.then(handleResult, (err)=>{\n runRemainingActions(actionQueue, setState);\n action.reject(err);\n });\n } else {\n handleResult(actionResult);\n }\n}\nfunction dispatchAction(actionQueue, payload, setState) {\n let resolvers = {\n resolve: setState,\n reject: ()=>{}\n };\n // most of the action types are async with the exception of restore\n // it's important that restore is handled quickly since it's fired on the popstate event\n // and we don't want to add any delay on a back/forward nav\n // this only creates a promise for the async actions\n if (payload.type !== _routerreducertypes.ACTION_RESTORE) {\n // Create the promise and assign the resolvers to the object.\n const deferredPromise = new Promise((resolve, reject)=>{\n resolvers = {\n resolve,\n reject\n };\n });\n (0, _react.startTransition)(()=>{\n // we immediately notify React of the pending promise -- the resolver is attached to the action node\n // and will be called when the associated action promise resolves\n setState(deferredPromise);\n });\n }\n const newAction = {\n payload,\n next: null,\n resolve: resolvers.resolve,\n reject: resolvers.reject\n };\n // Check if the queue is empty\n if (actionQueue.pending === null) {\n // The queue is empty, so add the action and start it immediately\n // Mark this action as the last in the queue\n actionQueue.last = newAction;\n runAction({\n actionQueue,\n action: newAction,\n setState\n });\n } else if (payload.type === _routerreducertypes.ACTION_NAVIGATE) {\n // Navigations take priority over any pending actions.\n // Mark the pending action as discarded (so the state is never applied) and start the navigation action immediately.\n actionQueue.pending.discarded = true;\n // Mark this action as the last in the queue\n actionQueue.last = newAction;\n // if the pending action was a server action, mark the queue as needing a refresh once events are processed\n if (actionQueue.pending.payload.type === _routerreducertypes.ACTION_SERVER_ACTION) {\n actionQueue.needsRefresh = true;\n }\n runAction({\n actionQueue,\n action: newAction,\n setState\n });\n } else {\n // The queue is not empty, so add the action to the end of the queue\n // It will be started by runRemainingActions after the previous action finishes\n if (actionQueue.last !== null) {\n actionQueue.last.next = newAction;\n }\n actionQueue.last = newAction;\n }\n}\nfunction createMutableActionQueue() {\n const actionQueue = {\n state: null,\n dispatch: (payload, setState)=>dispatchAction(actionQueue, payload, setState),\n action: async (state, action)=>{\n if (state === null) {\n throw new Error(\"Invariant: Router state not initialized\");\n }\n const result = (0, _routerreducer.reducer)(state, action);\n return result;\n },\n pending: null,\n last: null\n };\n return actionQueue;\n} //# sourceMappingURL=action-queue.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvYWN0aW9uLXF1ZXVlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxvQkFBb0I7UUFDaEIsT0FBT0E7SUFDWDtJQUNBQywwQkFBMEI7UUFDdEIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sNEJBQTRCQyxtQkFBT0EsQ0FBQyxrSUFBMEM7QUFDcEYsTUFBTUMsc0JBQXNCRCxtQkFBT0EsQ0FBQyw2S0FBZ0U7QUFDcEcsTUFBTUUsaUJBQWlCRixtQkFBT0EsQ0FBQyxpS0FBMEQ7QUFDekYsTUFBTUcsU0FBUyxXQUFXLEdBQUdKLDBCQUEwQkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxtRkFBTztBQUN4RSxNQUFNVCxxQkFBcUJZLE9BQU9FLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDO0FBQ3hELFNBQVNDLG9CQUFvQkMsV0FBVyxFQUFFQyxRQUFRO0lBQzlDLElBQUlELFlBQVlFLE9BQU8sS0FBSyxNQUFNO1FBQzlCRixZQUFZRSxPQUFPLEdBQUdGLFlBQVlFLE9BQU8sQ0FBQ0MsSUFBSTtRQUM5QyxJQUFJSCxZQUFZRSxPQUFPLEtBQUssTUFBTTtZQUM5QixtRUFBbUU7WUFDbkVFLFVBQVU7Z0JBQ05KO2dCQUNBSyxRQUFRTCxZQUFZRSxPQUFPO2dCQUMzQkQ7WUFDSjtRQUNKO0lBQ0o7QUFDSjtBQUNBLGVBQWVHLFVBQVVFLEtBQUs7SUFDMUIsSUFBSSxFQUFFTixXQUFXLEVBQUVLLE1BQU0sRUFBRUosUUFBUSxFQUFFLEdBQUdLO0lBQ3hDLE1BQU1DLFlBQVlQLFlBQVlRLEtBQUs7SUFDbkMsSUFBSSxDQUFDRCxXQUFXO1FBQ1osc0ZBQXNGO1FBQ3RGLE1BQU0sSUFBSUUsTUFBTTtJQUNwQjtJQUNBVCxZQUFZRSxPQUFPLEdBQUdHO0lBQ3RCLE1BQU1LLFVBQVVMLE9BQU9LLE9BQU87SUFDOUIsTUFBTUMsZUFBZVgsWUFBWUssTUFBTSxDQUFDRSxXQUFXRztJQUNuRCxTQUFTRSxhQUFhQyxTQUFTO1FBQzNCLGtFQUFrRTtRQUNsRSxJQUFJUixPQUFPUyxTQUFTLEVBQUU7WUFDbEIsb0ZBQW9GO1lBQ3BGLElBQUlkLFlBQVllLFlBQVksSUFBSWYsWUFBWUUsT0FBTyxLQUFLLE1BQU07Z0JBQzFERixZQUFZZSxZQUFZLEdBQUc7Z0JBQzNCZixZQUFZZ0IsUUFBUSxDQUFDO29CQUNqQkMsTUFBTXhCLG9CQUFvQnlCLGNBQWM7b0JBQ3hDQyxRQUFRQyxPQUFPQyxRQUFRLENBQUNGLE1BQU07Z0JBQ2xDLEdBQUdsQjtZQUNQO1lBQ0E7UUFDSjtRQUNBRCxZQUFZUSxLQUFLLEdBQUdLO1FBQ3BCLElBQUliLFlBQVlzQixnQkFBZ0IsRUFBRTtZQUM5QnRCLFlBQVlzQixnQkFBZ0IsQ0FBQ0MsSUFBSSxDQUFDYixTQUFTRztRQUMvQztRQUNBZCxvQkFBb0JDLGFBQWFDO1FBQ2pDSSxPQUFPbUIsT0FBTyxDQUFDWDtJQUNuQjtJQUNBLDhEQUE4RDtJQUM5RCxJQUFJLENBQUMsR0FBR3BCLG9CQUFvQmdDLFVBQVUsRUFBRWQsZUFBZTtRQUNuREEsYUFBYWUsSUFBSSxDQUFDZCxjQUFjLENBQUNlO1lBQzdCNUIsb0JBQW9CQyxhQUFhQztZQUNqQ0ksT0FBT3VCLE1BQU0sQ0FBQ0Q7UUFDbEI7SUFDSixPQUFPO1FBQ0hmLGFBQWFEO0lBQ2pCO0FBQ0o7QUFDQSxTQUFTa0IsZUFBZTdCLFdBQVcsRUFBRVUsT0FBTyxFQUFFVCxRQUFRO0lBQ2xELElBQUk2QixZQUFZO1FBQ1pOLFNBQVN2QjtRQUNUMkIsUUFBUSxLQUFLO0lBQ2pCO0lBQ0EsbUVBQW1FO0lBQ25FLHdGQUF3RjtJQUN4RiwyREFBMkQ7SUFDM0Qsb0RBQW9EO0lBQ3BELElBQUlsQixRQUFRTyxJQUFJLEtBQUt4QixvQkFBb0JzQyxjQUFjLEVBQUU7UUFDckQsNkRBQTZEO1FBQzdELE1BQU1DLGtCQUFrQixJQUFJQyxRQUFRLENBQUNULFNBQVNJO1lBQzFDRSxZQUFZO2dCQUNSTjtnQkFDQUk7WUFDSjtRQUNKO1FBQ0MsSUFBR2pDLE9BQU91QyxlQUFlLEVBQUU7WUFDeEIsb0dBQW9HO1lBQ3BHLGlFQUFpRTtZQUNqRWpDLFNBQVMrQjtRQUNiO0lBQ0o7SUFDQSxNQUFNRyxZQUFZO1FBQ2R6QjtRQUNBUCxNQUFNO1FBQ05xQixTQUFTTSxVQUFVTixPQUFPO1FBQzFCSSxRQUFRRSxVQUFVRixNQUFNO0lBQzVCO0lBQ0EsOEJBQThCO0lBQzlCLElBQUk1QixZQUFZRSxPQUFPLEtBQUssTUFBTTtRQUM5QixpRUFBaUU7UUFDakUsNENBQTRDO1FBQzVDRixZQUFZb0MsSUFBSSxHQUFHRDtRQUNuQi9CLFVBQVU7WUFDTko7WUFDQUssUUFBUThCO1lBQ1JsQztRQUNKO0lBQ0osT0FBTyxJQUFJUyxRQUFRTyxJQUFJLEtBQUt4QixvQkFBb0I0QyxlQUFlLEVBQUU7UUFDN0Qsc0RBQXNEO1FBQ3RELG9IQUFvSDtRQUNwSHJDLFlBQVlFLE9BQU8sQ0FBQ1ksU0FBUyxHQUFHO1FBQ2hDLDRDQUE0QztRQUM1Q2QsWUFBWW9DLElBQUksR0FBR0Q7UUFDbkIsMkdBQTJHO1FBQzNHLElBQUluQyxZQUFZRSxPQUFPLENBQUNRLE9BQU8sQ0FBQ08sSUFBSSxLQUFLeEIsb0JBQW9CNkMsb0JBQW9CLEVBQUU7WUFDL0V0QyxZQUFZZSxZQUFZLEdBQUc7UUFDL0I7UUFDQVgsVUFBVTtZQUNOSjtZQUNBSyxRQUFROEI7WUFDUmxDO1FBQ0o7SUFDSixPQUFPO1FBQ0gsb0VBQW9FO1FBQ3BFLCtFQUErRTtRQUMvRSxJQUFJRCxZQUFZb0MsSUFBSSxLQUFLLE1BQU07WUFDM0JwQyxZQUFZb0MsSUFBSSxDQUFDakMsSUFBSSxHQUFHZ0M7UUFDNUI7UUFDQW5DLFlBQVlvQyxJQUFJLEdBQUdEO0lBQ3ZCO0FBQ0o7QUFDQSxTQUFTbkQ7SUFDTCxNQUFNZ0IsY0FBYztRQUNoQlEsT0FBTztRQUNQUSxVQUFVLENBQUNOLFNBQVNULFdBQVc0QixlQUFlN0IsYUFBYVUsU0FBU1Q7UUFDcEVJLFFBQVEsT0FBT0csT0FBT0g7WUFDbEIsSUFBSUcsVUFBVSxNQUFNO2dCQUNoQixNQUFNLElBQUlDLE1BQU07WUFDcEI7WUFDQSxNQUFNOEIsU0FBUyxDQUFDLEdBQUc3QyxlQUFlOEMsT0FBTyxFQUFFaEMsT0FBT0g7WUFDbEQsT0FBT2tDO1FBQ1g7UUFDQXJDLFNBQVM7UUFDVGtDLE1BQU07SUFDVjtJQUNBLE9BQU9wQztBQUNYLEVBRUEsd0NBQXdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvYWN0aW9uLXF1ZXVlLmpzPzg0NzkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBY3Rpb25RdWV1ZUNvbnRleHQ6IG51bGwsXG4gICAgY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIEFjdGlvblF1ZXVlQ29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBY3Rpb25RdWV1ZUNvbnRleHQ7XG4gICAgfSxcbiAgICBjcmVhdGVNdXRhYmxlQWN0aW9uUXVldWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkXCIpO1xuY29uc3QgX3JvdXRlcnJlZHVjZXJ0eXBlcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlc1wiKTtcbmNvbnN0IF9yb3V0ZXJyZWR1Y2VyID0gcmVxdWlyZShcIi4uLy4uLy4uL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JvdXRlci1yZWR1Y2VyXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IEFjdGlvblF1ZXVlQ29udGV4dCA9IF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5mdW5jdGlvbiBydW5SZW1haW5pbmdBY3Rpb25zKGFjdGlvblF1ZXVlLCBzZXRTdGF0ZSkge1xuICAgIGlmIChhY3Rpb25RdWV1ZS5wZW5kaW5nICE9PSBudWxsKSB7XG4gICAgICAgIGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBhY3Rpb25RdWV1ZS5wZW5kaW5nLm5leHQ7XG4gICAgICAgIGlmIChhY3Rpb25RdWV1ZS5wZW5kaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgICBydW5BY3Rpb24oe1xuICAgICAgICAgICAgICAgIGFjdGlvblF1ZXVlLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uUXVldWUucGVuZGluZyxcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBydW5BY3Rpb24ocGFyYW0pIHtcbiAgICBsZXQgeyBhY3Rpb25RdWV1ZSwgYWN0aW9uLCBzZXRTdGF0ZSB9ID0gcGFyYW07XG4gICAgY29uc3QgcHJldlN0YXRlID0gYWN0aW9uUXVldWUuc3RhdGU7XG4gICAgaWYgKCFwcmV2U3RhdGUpIHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGFzIHRoZSBzdGF0ZSBpcyBpbml0aWFsaXplZCBpbiB0aGUgZGlzcGF0Y2hlciBpZiBpdCdzIG5vdCBzZXRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YXJpYW50OiBSb3V0ZXIgc3RhdGUgbm90IGluaXRpYWxpemVkXCIpO1xuICAgIH1cbiAgICBhY3Rpb25RdWV1ZS5wZW5kaW5nID0gYWN0aW9uO1xuICAgIGNvbnN0IHBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICBjb25zdCBhY3Rpb25SZXN1bHQgPSBhY3Rpb25RdWV1ZS5hY3Rpb24ocHJldlN0YXRlLCBwYXlsb2FkKTtcbiAgICBmdW5jdGlvbiBoYW5kbGVSZXN1bHQobmV4dFN0YXRlKSB7XG4gICAgICAgIC8vIGlmIHdlIGRpc2NhcmRlZCB0aGlzIGFjdGlvbiwgdGhlIHN0YXRlIHNob3VsZCBhbHNvIGJlIGRpc2NhcmRlZFxuICAgICAgICBpZiAoYWN0aW9uLmRpc2NhcmRlZCkge1xuICAgICAgICAgICAgLy8gaWYgYSByZWZyZXNoIGlzIG5lZWRlZCwgd2Ugb25seSB3YW50IHRvIHRyaWdnZXIgaXQgb25jZSB0aGUgYWN0aW9uIHF1ZXVlIGlzIGVtcHR5XG4gICAgICAgICAgICBpZiAoYWN0aW9uUXVldWUubmVlZHNSZWZyZXNoICYmIGFjdGlvblF1ZXVlLnBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25RdWV1ZS5uZWVkc1JlZnJlc2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBhY3Rpb25RdWV1ZS5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX1JFRlJFU0gsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgICAgICAgICAgIH0sIHNldFN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhY3Rpb25RdWV1ZS5zdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgICAgaWYgKGFjdGlvblF1ZXVlLmRldlRvb2xzSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGFjdGlvblF1ZXVlLmRldlRvb2xzSW5zdGFuY2Uuc2VuZChwYXlsb2FkLCBuZXh0U3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJ1blJlbWFpbmluZ0FjdGlvbnMoYWN0aW9uUXVldWUsIHNldFN0YXRlKTtcbiAgICAgICAgYWN0aW9uLnJlc29sdmUobmV4dFN0YXRlKTtcbiAgICB9XG4gICAgLy8gaWYgdGhlIGFjdGlvbiBpcyBhIHByb21pc2UsIHNldCB1cCBhIGNhbGxiYWNrIHRvIHJlc29sdmUgaXRcbiAgICBpZiAoKDAsIF9yb3V0ZXJyZWR1Y2VydHlwZXMuaXNUaGVuYWJsZSkoYWN0aW9uUmVzdWx0KSkge1xuICAgICAgICBhY3Rpb25SZXN1bHQudGhlbihoYW5kbGVSZXN1bHQsIChlcnIpPT57XG4gICAgICAgICAgICBydW5SZW1haW5pbmdBY3Rpb25zKGFjdGlvblF1ZXVlLCBzZXRTdGF0ZSk7XG4gICAgICAgICAgICBhY3Rpb24ucmVqZWN0KGVycik7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZVJlc3VsdChhY3Rpb25SZXN1bHQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uKGFjdGlvblF1ZXVlLCBwYXlsb2FkLCBzZXRTdGF0ZSkge1xuICAgIGxldCByZXNvbHZlcnMgPSB7XG4gICAgICAgIHJlc29sdmU6IHNldFN0YXRlLFxuICAgICAgICByZWplY3Q6ICgpPT57fVxuICAgIH07XG4gICAgLy8gbW9zdCBvZiB0aGUgYWN0aW9uIHR5cGVzIGFyZSBhc3luYyB3aXRoIHRoZSBleGNlcHRpb24gb2YgcmVzdG9yZVxuICAgIC8vIGl0J3MgaW1wb3J0YW50IHRoYXQgcmVzdG9yZSBpcyBoYW5kbGVkIHF1aWNrbHkgc2luY2UgaXQncyBmaXJlZCBvbiB0aGUgcG9wc3RhdGUgZXZlbnRcbiAgICAvLyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBhZGQgYW55IGRlbGF5IG9uIGEgYmFjay9mb3J3YXJkIG5hdlxuICAgIC8vIHRoaXMgb25seSBjcmVhdGVzIGEgcHJvbWlzZSBmb3IgdGhlIGFzeW5jIGFjdGlvbnNcbiAgICBpZiAocGF5bG9hZC50eXBlICE9PSBfcm91dGVycmVkdWNlcnR5cGVzLkFDVElPTl9SRVNUT1JFKSB7XG4gICAgICAgIC8vIENyZWF0ZSB0aGUgcHJvbWlzZSBhbmQgYXNzaWduIHRoZSByZXNvbHZlcnMgdG8gdGhlIG9iamVjdC5cbiAgICAgICAgY29uc3QgZGVmZXJyZWRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk9PntcbiAgICAgICAgICAgIHJlc29sdmVycyA9IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCBfcmVhY3Quc3RhcnRUcmFuc2l0aW9uKSgoKT0+e1xuICAgICAgICAgICAgLy8gd2UgaW1tZWRpYXRlbHkgbm90aWZ5IFJlYWN0IG9mIHRoZSBwZW5kaW5nIHByb21pc2UgLS0gdGhlIHJlc29sdmVyIGlzIGF0dGFjaGVkIHRvIHRoZSBhY3Rpb24gbm9kZVxuICAgICAgICAgICAgLy8gYW5kIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGFzc29jaWF0ZWQgYWN0aW9uIHByb21pc2UgcmVzb2x2ZXNcbiAgICAgICAgICAgIHNldFN0YXRlKGRlZmVycmVkUHJvbWlzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBuZXdBY3Rpb24gPSB7XG4gICAgICAgIHBheWxvYWQsXG4gICAgICAgIG5leHQ6IG51bGwsXG4gICAgICAgIHJlc29sdmU6IHJlc29sdmVycy5yZXNvbHZlLFxuICAgICAgICByZWplY3Q6IHJlc29sdmVycy5yZWplY3RcbiAgICB9O1xuICAgIC8vIENoZWNrIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eVxuICAgIGlmIChhY3Rpb25RdWV1ZS5wZW5kaW5nID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoZSBxdWV1ZSBpcyBlbXB0eSwgc28gYWRkIHRoZSBhY3Rpb24gYW5kIHN0YXJ0IGl0IGltbWVkaWF0ZWx5XG4gICAgICAgIC8vIE1hcmsgdGhpcyBhY3Rpb24gYXMgdGhlIGxhc3QgaW4gdGhlIHF1ZXVlXG4gICAgICAgIGFjdGlvblF1ZXVlLmxhc3QgPSBuZXdBY3Rpb247XG4gICAgICAgIHJ1bkFjdGlvbih7XG4gICAgICAgICAgICBhY3Rpb25RdWV1ZSxcbiAgICAgICAgICAgIGFjdGlvbjogbmV3QWN0aW9uLFxuICAgICAgICAgICAgc2V0U3RhdGVcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChwYXlsb2FkLnR5cGUgPT09IF9yb3V0ZXJyZWR1Y2VydHlwZXMuQUNUSU9OX05BVklHQVRFKSB7XG4gICAgICAgIC8vIE5hdmlnYXRpb25zIHRha2UgcHJpb3JpdHkgb3ZlciBhbnkgcGVuZGluZyBhY3Rpb25zLlxuICAgICAgICAvLyBNYXJrIHRoZSBwZW5kaW5nIGFjdGlvbiBhcyBkaXNjYXJkZWQgKHNvIHRoZSBzdGF0ZSBpcyBuZXZlciBhcHBsaWVkKSBhbmQgc3RhcnQgdGhlIG5hdmlnYXRpb24gYWN0aW9uIGltbWVkaWF0ZWx5LlxuICAgICAgICBhY3Rpb25RdWV1ZS5wZW5kaW5nLmRpc2NhcmRlZCA9IHRydWU7XG4gICAgICAgIC8vIE1hcmsgdGhpcyBhY3Rpb24gYXMgdGhlIGxhc3QgaW4gdGhlIHF1ZXVlXG4gICAgICAgIGFjdGlvblF1ZXVlLmxhc3QgPSBuZXdBY3Rpb247XG4gICAgICAgIC8vIGlmIHRoZSBwZW5kaW5nIGFjdGlvbiB3YXMgYSBzZXJ2ZXIgYWN0aW9uLCBtYXJrIHRoZSBxdWV1ZSBhcyBuZWVkaW5nIGEgcmVmcmVzaCBvbmNlIGV2ZW50cyBhcmUgcHJvY2Vzc2VkXG4gICAgICAgIGlmIChhY3Rpb25RdWV1ZS5wZW5kaW5nLnBheWxvYWQudHlwZSA9PT0gX3JvdXRlcnJlZHVjZXJ0eXBlcy5BQ1RJT05fU0VSVkVSX0FDVElPTikge1xuICAgICAgICAgICAgYWN0aW9uUXVldWUubmVlZHNSZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBydW5BY3Rpb24oe1xuICAgICAgICAgICAgYWN0aW9uUXVldWUsXG4gICAgICAgICAgICBhY3Rpb246IG5ld0FjdGlvbixcbiAgICAgICAgICAgIHNldFN0YXRlXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSBxdWV1ZSBpcyBub3QgZW1wdHksIHNvIGFkZCB0aGUgYWN0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG4gICAgICAgIC8vIEl0IHdpbGwgYmUgc3RhcnRlZCBieSBydW5SZW1haW5pbmdBY3Rpb25zIGFmdGVyIHRoZSBwcmV2aW91cyBhY3Rpb24gZmluaXNoZXNcbiAgICAgICAgaWYgKGFjdGlvblF1ZXVlLmxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGFjdGlvblF1ZXVlLmxhc3QubmV4dCA9IG5ld0FjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBhY3Rpb25RdWV1ZS5sYXN0ID0gbmV3QWN0aW9uO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZU11dGFibGVBY3Rpb25RdWV1ZSgpIHtcbiAgICBjb25zdCBhY3Rpb25RdWV1ZSA9IHtcbiAgICAgICAgc3RhdGU6IG51bGwsXG4gICAgICAgIGRpc3BhdGNoOiAocGF5bG9hZCwgc2V0U3RhdGUpPT5kaXNwYXRjaEFjdGlvbihhY3Rpb25RdWV1ZSwgcGF5bG9hZCwgc2V0U3RhdGUpLFxuICAgICAgICBhY3Rpb246IGFzeW5jIChzdGF0ZSwgYWN0aW9uKT0+e1xuICAgICAgICAgICAgaWYgKHN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YXJpYW50OiBSb3V0ZXIgc3RhdGUgbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gKDAsIF9yb3V0ZXJyZWR1Y2VyLnJlZHVjZXIpKHN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgbGFzdDogbnVsbFxuICAgIH07XG4gICAgcmV0dXJuIGFjdGlvblF1ZXVlO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hY3Rpb24tcXVldWUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiQWN0aW9uUXVldWVDb250ZXh0IiwiY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfcm91dGVycmVkdWNlcnR5cGVzIiwiX3JvdXRlcnJlZHVjZXIiLCJfcmVhY3QiLCJfIiwiZGVmYXVsdCIsImNyZWF0ZUNvbnRleHQiLCJydW5SZW1haW5pbmdBY3Rpb25zIiwiYWN0aW9uUXVldWUiLCJzZXRTdGF0ZSIsInBlbmRpbmciLCJuZXh0IiwicnVuQWN0aW9uIiwiYWN0aW9uIiwicGFyYW0iLCJwcmV2U3RhdGUiLCJzdGF0ZSIsIkVycm9yIiwicGF5bG9hZCIsImFjdGlvblJlc3VsdCIsImhhbmRsZVJlc3VsdCIsIm5leHRTdGF0ZSIsImRpc2NhcmRlZCIsIm5lZWRzUmVmcmVzaCIsImRpc3BhdGNoIiwidHlwZSIsIkFDVElPTl9SRUZSRVNIIiwib3JpZ2luIiwid2luZG93IiwibG9jYXRpb24iLCJkZXZUb29sc0luc3RhbmNlIiwic2VuZCIsInJlc29sdmUiLCJpc1RoZW5hYmxlIiwidGhlbiIsImVyciIsInJlamVjdCIsImRpc3BhdGNoQWN0aW9uIiwicmVzb2x2ZXJzIiwiQUNUSU9OX1JFU1RPUkUiLCJkZWZlcnJlZFByb21pc2UiLCJQcm9taXNlIiwic3RhcnRUcmFuc2l0aW9uIiwibmV3QWN0aW9uIiwibGFzdCIsIkFDVElPTl9OQVZJR0FURSIsIkFDVElPTl9TRVJWRVJfQUNUSU9OIiwicmVzdWx0IiwicmVkdWNlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/action-queue.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js": +/*!***************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js ***! + \***************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addPathPrefix\", ({\n enumerable: true,\n get: function() {\n return addPathPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathPrefix(path, prefix) {\n if (!path.startsWith(\"/\") || !prefix) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n return \"\" + prefix + pathname + query + hash;\n} //# sourceMappingURL=add-path-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLXBhdGgtcHJlZml4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxpREFBZ0Q7SUFDNUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxhQUFhQyxtQkFBT0EsQ0FBQyx3R0FBYztBQUN6QyxTQUFTRixjQUFjRyxJQUFJLEVBQUVDLE1BQU07SUFDL0IsSUFBSSxDQUFDRCxLQUFLRSxVQUFVLENBQUMsUUFBUSxDQUFDRCxRQUFRO1FBQ2xDLE9BQU9EO0lBQ1g7SUFDQSxNQUFNLEVBQUVHLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUdQLFdBQVdRLFNBQVMsRUFBRU47SUFDNUQsT0FBTyxLQUFLQyxTQUFTRSxXQUFXQyxRQUFRQztBQUM1QyxFQUVBLDJDQUEyQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1wYXRoLXByZWZpeC5qcz9jMTI5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWRkUGF0aFByZWZpeFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYWRkUGF0aFByZWZpeDtcbiAgICB9XG59KTtcbmNvbnN0IF9wYXJzZXBhdGggPSByZXF1aXJlKFwiLi9wYXJzZS1wYXRoXCIpO1xuZnVuY3Rpb24gYWRkUGF0aFByZWZpeChwYXRoLCBwcmVmaXgpIHtcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChcIi9cIikgfHwgIXByZWZpeCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgeyBwYXRobmFtZSwgcXVlcnksIGhhc2ggfSA9ICgwLCBfcGFyc2VwYXRoLnBhcnNlUGF0aCkocGF0aCk7XG4gICAgcmV0dXJuIFwiXCIgKyBwcmVmaXggKyBwYXRobmFtZSArIHF1ZXJ5ICsgaGFzaDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWRkLXBhdGgtcHJlZml4LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJhZGRQYXRoUHJlZml4IiwiX3BhcnNlcGF0aCIsInJlcXVpcmUiLCJwYXRoIiwicHJlZml4Iiwic3RhcnRzV2l0aCIsInBhdGhuYW1lIiwicXVlcnkiLCJoYXNoIiwicGFyc2VQYXRoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js": +/*!*********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/app-paths.js ***! + \*********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n normalizeAppPath: function() {\n return normalizeAppPath;\n },\n normalizeRscURL: function() {\n return normalizeRscURL;\n }\n});\nconst _ensureleadingslash = __webpack_require__(/*! ../../page-path/ensure-leading-slash */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _segment = __webpack_require__(/*! ../../segment */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\");\nfunction normalizeAppPath(route) {\n return (0, _ensureleadingslash.ensureLeadingSlash)(route.split(\"/\").reduce((pathname, segment, index, segments)=>{\n // Empty segments are ignored.\n if (!segment) {\n return pathname;\n }\n // Groups are ignored.\n if ((0, _segment.isGroupSegment)(segment)) {\n return pathname;\n }\n // Parallel segments are ignored.\n if (segment[0] === \"@\") {\n return pathname;\n }\n // The last segment (if it's a leaf) should be ignored.\n if ((segment === \"page\" || segment === \"route\") && index === segments.length - 1) {\n return pathname;\n }\n return pathname + \"/\" + segment;\n }, \"\"));\n}\nfunction normalizeRscURL(url) {\n return url.replace(/\\.rsc($|\\?)/, \"$1\");\n} //# sourceMappingURL=app-paths.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYXBwLXBhdGhzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxrQkFBa0I7UUFDZCxPQUFPQTtJQUNYO0lBQ0FDLGlCQUFpQjtRQUNiLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLHNCQUFzQkMsbUJBQU9BLENBQUMsdUlBQXNDO0FBQzFFLE1BQU1DLFdBQVdELG1CQUFPQSxDQUFDLHlGQUFlO0FBQ3hDLFNBQVNULGlCQUFpQlcsS0FBSztJQUMzQixPQUFPLENBQUMsR0FBR0gsb0JBQW9CSSxrQkFBa0IsRUFBRUQsTUFBTUUsS0FBSyxDQUFDLEtBQUtDLE1BQU0sQ0FBQyxDQUFDQyxVQUFVQyxTQUFTQyxPQUFPQztRQUNsRyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDRixTQUFTO1lBQ1YsT0FBT0Q7UUFDWDtRQUNBLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsR0FBR0wsU0FBU1MsY0FBYyxFQUFFSCxVQUFVO1lBQ3ZDLE9BQU9EO1FBQ1g7UUFDQSxpQ0FBaUM7UUFDakMsSUFBSUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLO1lBQ3BCLE9BQU9EO1FBQ1g7UUFDQSx1REFBdUQ7UUFDdkQsSUFBSSxDQUFDQyxZQUFZLFVBQVVBLFlBQVksT0FBTSxLQUFNQyxVQUFVQyxTQUFTRSxNQUFNLEdBQUcsR0FBRztZQUM5RSxPQUFPTDtRQUNYO1FBQ0EsT0FBT0EsV0FBVyxNQUFNQztJQUM1QixHQUFHO0FBQ1A7QUFDQSxTQUFTZixnQkFBZ0JvQixHQUFHO0lBQ3hCLE9BQU9BLElBQUlDLE9BQU8sQ0FBQyxlQUNuQjtBQUNKLEVBRUEscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYXBwLXBhdGhzLmpzPzdlNTIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBub3JtYWxpemVBcHBQYXRoOiBudWxsLFxuICAgIG5vcm1hbGl6ZVJzY1VSTDogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBub3JtYWxpemVBcHBQYXRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUFwcFBhdGg7XG4gICAgfSxcbiAgICBub3JtYWxpemVSc2NVUkw6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplUnNjVVJMO1xuICAgIH1cbn0pO1xuY29uc3QgX2Vuc3VyZWxlYWRpbmdzbGFzaCA9IHJlcXVpcmUoXCIuLi8uLi9wYWdlLXBhdGgvZW5zdXJlLWxlYWRpbmctc2xhc2hcIik7XG5jb25zdCBfc2VnbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9zZWdtZW50XCIpO1xuZnVuY3Rpb24gbm9ybWFsaXplQXBwUGF0aChyb3V0ZSkge1xuICAgIHJldHVybiAoMCwgX2Vuc3VyZWxlYWRpbmdzbGFzaC5lbnN1cmVMZWFkaW5nU2xhc2gpKHJvdXRlLnNwbGl0KFwiL1wiKS5yZWR1Y2UoKHBhdGhuYW1lLCBzZWdtZW50LCBpbmRleCwgc2VnbWVudHMpPT57XG4gICAgICAgIC8vIEVtcHR5IHNlZ21lbnRzIGFyZSBpZ25vcmVkLlxuICAgICAgICBpZiAoIXNlZ21lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRobmFtZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHcm91cHMgYXJlIGlnbm9yZWQuXG4gICAgICAgIGlmICgoMCwgX3NlZ21lbnQuaXNHcm91cFNlZ21lbnQpKHNlZ21lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUGFyYWxsZWwgc2VnbWVudHMgYXJlIGlnbm9yZWQuXG4gICAgICAgIGlmIChzZWdtZW50WzBdID09PSBcIkBcIikge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBsYXN0IHNlZ21lbnQgKGlmIGl0J3MgYSBsZWFmKSBzaG91bGQgYmUgaWdub3JlZC5cbiAgICAgICAgaWYgKChzZWdtZW50ID09PSBcInBhZ2VcIiB8fCBzZWdtZW50ID09PSBcInJvdXRlXCIpICYmIGluZGV4ID09PSBzZWdtZW50cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGhuYW1lICsgXCIvXCIgKyBzZWdtZW50O1xuICAgIH0sIFwiXCIpKTtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJzY1VSTCh1cmwpIHtcbiAgICByZXR1cm4gdXJsLnJlcGxhY2UoL1xcLnJzYygkfFxcPykvLCAvLyAkMSBlbnN1cmVzIGA/YCBpcyBwcmVzZXJ2ZWRcbiAgICBcIiQxXCIpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtcGF0aHMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwibm9ybWFsaXplQXBwUGF0aCIsIm5vcm1hbGl6ZVJzY1VSTCIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9lbnN1cmVsZWFkaW5nc2xhc2giLCJyZXF1aXJlIiwiX3NlZ21lbnQiLCJyb3V0ZSIsImVuc3VyZUxlYWRpbmdTbGFzaCIsInNwbGl0IiwicmVkdWNlIiwicGF0aG5hbWUiLCJzZWdtZW50IiwiaW5kZXgiLCJzZWdtZW50cyIsImlzR3JvdXBTZWdtZW50IiwibGVuZ3RoIiwidXJsIiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/app-paths.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/is-bot.js ***! + \******************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isBot\", ({\n enumerable: true,\n get: function() {\n return isBot;\n }\n}));\nfunction isBot(userAgent) {\n return /Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver/i.test(userAgent);\n} //# sourceMappingURL=is-bot.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtYm90LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx5Q0FBd0M7SUFDcENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixTQUFTQSxNQUFNQyxTQUFTO0lBQ3BCLE9BQU8sb1ZBQW9WQyxJQUFJLENBQUNEO0FBQ3BXLEVBRUEsa0NBQWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtYm90LmpzPzA3MTUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0JvdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNCb3Q7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBpc0JvdCh1c2VyQWdlbnQpIHtcbiAgICByZXR1cm4gL0dvb2dsZWJvdHxNZWRpYXBhcnRuZXJzLUdvb2dsZXxBZHNCb3QtR29vZ2xlfGdvb2dsZXdlYmxpZ2h0fFN0b3JlYm90LUdvb2dsZXxHb29nbGUtUGFnZVJlbmRlcmVyfEJpbmdib3R8QmluZ1ByZXZpZXd8U2x1cnB8RHVja0R1Y2tCb3R8YmFpZHVzcGlkZXJ8eWFuZGV4fHNvZ291fExpbmtlZEluQm90fGJpdGx5Ym90fHR1bWJscnx2a1NoYXJlfHF1b3JhIGxpbmsgcHJldmlld3xmYWNlYm9va2V4dGVybmFsaGl0fGZhY2Vib29rY2F0YWxvZ3xUd2l0dGVyYm90fGFwcGxlYm90fHJlZGRpdGJvdHxTbGFja2JvdHxEaXNjb3JkYm90fFdoYXRzQXBwfFNreXBlVXJpUHJldmlld3xpYV9hcmNoaXZlci9pLnRlc3QodXNlckFnZW50KTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXMtYm90LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJpc0JvdCIsInVzZXJBZ2VudCIsInRlc3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-bot.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/parse-path.js ***! + \**********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parsePath\", ({\n enumerable: true,\n get: function() {\n return parsePath;\n }\n}));\nfunction parsePath(path) {\n const hashIndex = path.indexOf(\"#\");\n const queryIndex = path.indexOf(\"?\");\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex);\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : \"\",\n hash: hashIndex > -1 ? path.slice(hashIndex) : \"\"\n };\n }\n return {\n pathname: path,\n query: \"\",\n hash: \"\"\n };\n} //# sourceMappingURL=parse-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcGF0aC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7OztDQUlDLEdBQWdCO0FBQ2pCQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsNkNBQTRDO0lBQ3hDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0EsVUFBVUMsSUFBSTtJQUNuQixNQUFNQyxZQUFZRCxLQUFLRSxPQUFPLENBQUM7SUFDL0IsTUFBTUMsYUFBYUgsS0FBS0UsT0FBTyxDQUFDO0lBQ2hDLE1BQU1FLFdBQVdELGFBQWEsQ0FBQyxLQUFNRixDQUFBQSxZQUFZLEtBQUtFLGFBQWFGLFNBQVE7SUFDM0UsSUFBSUcsWUFBWUgsWUFBWSxDQUFDLEdBQUc7UUFDNUIsT0FBTztZQUNISSxVQUFVTCxLQUFLTSxTQUFTLENBQUMsR0FBR0YsV0FBV0QsYUFBYUY7WUFDcERNLE9BQU9ILFdBQVdKLEtBQUtNLFNBQVMsQ0FBQ0gsWUFBWUYsWUFBWSxDQUFDLElBQUlBLFlBQVlPLGFBQWE7WUFDdkZDLE1BQU1SLFlBQVksQ0FBQyxJQUFJRCxLQUFLVSxLQUFLLENBQUNULGFBQWE7UUFDbkQ7SUFDSjtJQUNBLE9BQU87UUFDSEksVUFBVUw7UUFDVk8sT0FBTztRQUNQRSxNQUFNO0lBQ1Y7QUFDSixFQUVBLHNDQUFzQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXBhdGguanM/ZTUyYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdpdmVuIGEgcGF0aCB0aGlzIGZ1bmN0aW9uIHdpbGwgZmluZCB0aGUgcGF0aG5hbWUsIHF1ZXJ5IGFuZCBoYXNoIGFuZCByZXR1cm5cbiAqIHRoZW0uIFRoaXMgaXMgdXNlZnVsIHRvIHBhcnNlIGZ1bGwgcGF0aHMgb24gdGhlIGNsaWVudCBzaWRlLlxuICogQHBhcmFtIHBhdGggQSBwYXRoIHRvIHBhcnNlIGUuZy4gL2Zvby9iYXI/aWQ9MSNoYXNoXG4gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZVBhdGhcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlUGF0aDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gICAgY29uc3QgaGFzaEluZGV4ID0gcGF0aC5pbmRleE9mKFwiI1wiKTtcbiAgICBjb25zdCBxdWVyeUluZGV4ID0gcGF0aC5pbmRleE9mKFwiP1wiKTtcbiAgICBjb25zdCBoYXNRdWVyeSA9IHF1ZXJ5SW5kZXggPiAtMSAmJiAoaGFzaEluZGV4IDwgMCB8fCBxdWVyeUluZGV4IDwgaGFzaEluZGV4KTtcbiAgICBpZiAoaGFzUXVlcnkgfHwgaGFzaEluZGV4ID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGhuYW1lOiBwYXRoLnN1YnN0cmluZygwLCBoYXNRdWVyeSA/IHF1ZXJ5SW5kZXggOiBoYXNoSW5kZXgpLFxuICAgICAgICAgICAgcXVlcnk6IGhhc1F1ZXJ5ID8gcGF0aC5zdWJzdHJpbmcocXVlcnlJbmRleCwgaGFzaEluZGV4ID4gLTEgPyBoYXNoSW5kZXggOiB1bmRlZmluZWQpIDogXCJcIixcbiAgICAgICAgICAgIGhhc2g6IGhhc2hJbmRleCA+IC0xID8gcGF0aC5zbGljZShoYXNoSW5kZXgpIDogXCJcIlxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwYXRobmFtZTogcGF0aCxcbiAgICAgICAgcXVlcnk6IFwiXCIsXG4gICAgICAgIGhhc2g6IFwiXCJcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJzZS1wYXRoLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJwYXJzZVBhdGgiLCJwYXRoIiwiaGFzaEluZGV4IiwiaW5kZXhPZiIsInF1ZXJ5SW5kZXgiLCJoYXNRdWVyeSIsInBhdGhuYW1lIiwic3Vic3RyaW5nIiwicXVlcnkiLCJ1bmRlZmluZWQiLCJoYXNoIiwic2xpY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js": +/*!***************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js ***! + \***************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"pathHasPrefix\", ({\n enumerable: true,\n get: function() {\n return pathHasPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction pathHasPrefix(path, prefix) {\n if (typeof path !== \"string\") {\n return false;\n }\n const { pathname } = (0, _parsepath.parsePath)(path);\n return pathname === prefix || pathname.startsWith(prefix + \"/\");\n} //# sourceMappingURL=path-has-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGF0aC1oYXMtcHJlZml4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxpREFBZ0Q7SUFDNUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxhQUFhQyxtQkFBT0EsQ0FBQyx3R0FBYztBQUN6QyxTQUFTRixjQUFjRyxJQUFJLEVBQUVDLE1BQU07SUFDL0IsSUFBSSxPQUFPRCxTQUFTLFVBQVU7UUFDMUIsT0FBTztJQUNYO0lBQ0EsTUFBTSxFQUFFRSxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUdKLFdBQVdLLFNBQVMsRUFBRUg7SUFDL0MsT0FBT0UsYUFBYUQsVUFBVUMsU0FBU0UsVUFBVSxDQUFDSCxTQUFTO0FBQy9ELEVBRUEsMkNBQTJDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGF0aC1oYXMtcHJlZml4LmpzP2I1MzgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXRoSGFzUHJlZml4XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwYXRoSGFzUHJlZml4O1xuICAgIH1cbn0pO1xuY29uc3QgX3BhcnNlcGF0aCA9IHJlcXVpcmUoXCIuL3BhcnNlLXBhdGhcIik7XG5mdW5jdGlvbiBwYXRoSGFzUHJlZml4KHBhdGgsIHByZWZpeCkge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHsgcGF0aG5hbWUgfSA9ICgwLCBfcGFyc2VwYXRoLnBhcnNlUGF0aCkocGF0aCk7XG4gICAgcmV0dXJuIHBhdGhuYW1lID09PSBwcmVmaXggfHwgcGF0aG5hbWUuc3RhcnRzV2l0aChwcmVmaXggKyBcIi9cIik7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhdGgtaGFzLXByZWZpeC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicGF0aEhhc1ByZWZpeCIsIl9wYXJzZXBhdGgiLCJyZXF1aXJlIiwicGF0aCIsInByZWZpeCIsInBhdGhuYW1lIiwicGFyc2VQYXRoIiwic3RhcnRzV2l0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js ***! + \*********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return removeTrailingSlash;\n }\n}));\nfunction removeTrailingSlash(route) {\n return route.replace(/\\/$/, \"\") || \"/\";\n} //# sourceMappingURL=remove-trailing-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Q0FNQyxHQUFnQjtBQUNqQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHVEQUFzRDtJQUNsREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLG9CQUFvQkMsS0FBSztJQUM5QixPQUFPQSxNQUFNQyxPQUFPLENBQUMsT0FBTyxPQUFPO0FBQ3ZDLEVBRUEsaURBQWlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcmVtb3ZlLXRyYWlsaW5nLXNsYXNoLmpzP2VjMDYiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmb3IgYSBnaXZlbiByb3V0ZSBvciBwYWdlIHBhdGguIFByZXNlcnZlcyB0aGVcbiAqIHJvb3QgcGFnZS4gRXhhbXBsZXM6XG4gKiAgIC0gYC9mb28vYmFyL2AgLT4gYC9mb28vYmFyYFxuICogICAtIGAvZm9vL2JhcmAgLT4gYC9mb28vYmFyYFxuICogICAtIGAvYCAtPiBgL2BcbiAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlbW92ZVRyYWlsaW5nU2xhc2hcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZVRyYWlsaW5nU2xhc2g7XG4gICAgfVxufSk7XG5mdW5jdGlvbiByZW1vdmVUcmFpbGluZ1NsYXNoKHJvdXRlKSB7XG4gICAgcmV0dXJuIHJvdXRlLnJlcGxhY2UoL1xcLyQvLCBcIlwiKSB8fCBcIi9cIjtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVtb3ZlLXRyYWlsaW5nLXNsYXNoLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwicm91dGUiLCJyZXBsYWNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js": +/*!******************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/segment.js ***! + \******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n isGroupSegment: function() {\n return isGroupSegment;\n },\n PAGE_SEGMENT_KEY: function() {\n return PAGE_SEGMENT_KEY;\n },\n DEFAULT_SEGMENT_KEY: function() {\n return DEFAULT_SEGMENT_KEY;\n }\n});\nfunction isGroupSegment(segment) {\n // Use array[0] for performant purpose\n return segment[0] === \"(\" && segment.endsWith(\")\");\n}\nconst PAGE_SEGMENT_KEY = \"__PAGE__\";\nconst DEFAULT_SEGMENT_KEY = \"__DEFAULT__\"; //# sourceMappingURL=segment.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zZWdtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBSU47QUFDQSxTQUFTSSxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVixPQUFPQyxjQUFjLENBQUNRLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUU4sU0FBUztJQUNiRyxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLGtCQUFrQjtRQUNkLE9BQU9BO0lBQ1g7SUFDQUMscUJBQXFCO1FBQ2pCLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLFNBQVNGLGVBQWVTLE9BQU87SUFDM0Isc0NBQXNDO0lBQ3RDLE9BQU9BLE9BQU8sQ0FBQyxFQUFFLEtBQUssT0FBT0EsUUFBUUMsUUFBUSxDQUFDO0FBQ2xEO0FBQ0EsTUFBTVQsbUJBQW1CO0FBQ3pCLE1BQU1DLHNCQUFzQixlQUU1QixtQ0FBbUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3NlZ21lbnQuanM/ZmY3MiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGlzR3JvdXBTZWdtZW50OiBudWxsLFxuICAgIFBBR0VfU0VHTUVOVF9LRVk6IG51bGwsXG4gICAgREVGQVVMVF9TRUdNRU5UX0tFWTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBpc0dyb3VwU2VnbWVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0dyb3VwU2VnbWVudDtcbiAgICB9LFxuICAgIFBBR0VfU0VHTUVOVF9LRVk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUEFHRV9TRUdNRU5UX0tFWTtcbiAgICB9LFxuICAgIERFRkFVTFRfU0VHTUVOVF9LRVk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gREVGQVVMVF9TRUdNRU5UX0tFWTtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGlzR3JvdXBTZWdtZW50KHNlZ21lbnQpIHtcbiAgICAvLyBVc2UgYXJyYXlbMF0gZm9yIHBlcmZvcm1hbnQgcHVycG9zZVxuICAgIHJldHVybiBzZWdtZW50WzBdID09PSBcIihcIiAmJiBzZWdtZW50LmVuZHNXaXRoKFwiKVwiKTtcbn1cbmNvbnN0IFBBR0VfU0VHTUVOVF9LRVkgPSBcIl9fUEFHRV9fXCI7XG5jb25zdCBERUZBVUxUX1NFR01FTlRfS0VZID0gXCJfX0RFRkFVTFRfX1wiO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZWdtZW50LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsImlzR3JvdXBTZWdtZW50IiwiUEFHRV9TRUdNRU5UX0tFWSIsIkRFRkFVTFRfU0VHTUVOVF9LRVkiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJzZWdtZW50IiwiZW5kc1dpdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/segment.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js ***! + \**********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n ServerInsertedHTMLContext: function() {\n return ServerInsertedHTMLContext;\n },\n useServerInsertedHTML: function() {\n return useServerInsertedHTML;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst ServerInsertedHTMLContext = /*#__PURE__*/ _react.default.createContext(null);\nfunction useServerInsertedHTML(callback) {\n const addInsertedServerHTMLCallback = (0, _react.useContext)(ServerInsertedHTMLContext);\n // Should have no effects on client where there's no flush effects provider\n if (addInsertedServerHTMLCallback) {\n addInsertedServerHTMLCallback(callback);\n }\n} //# sourceMappingURL=server-inserted-html.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zZXJ2ZXItaW5zZXJ0ZWQtaHRtbC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoicURBRWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLDJCQUEyQjtRQUN2QixPQUFPQTtJQUNYO0lBQ0FDLHVCQUF1QjtRQUNuQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyw0QkFBNEJDLG1CQUFPQSxDQUFDLGtJQUEwQztBQUNwRixNQUFNQyxTQUFTLFdBQVcsR0FBR0YsMEJBQTBCRyxDQUFDLENBQUNGLG1CQUFPQSxDQUFDLG1GQUFPO0FBQ3hFLE1BQU1ULDRCQUE0QixXQUFXLEdBQUdVLE9BQU9FLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDO0FBQzdFLFNBQVNaLHNCQUFzQmEsUUFBUTtJQUNuQyxNQUFNQyxnQ0FBZ0MsQ0FBQyxHQUFHTCxPQUFPTSxVQUFVLEVBQUVoQjtJQUM3RCwyRUFBMkU7SUFDM0UsSUFBSWUsK0JBQStCO1FBQy9CQSw4QkFBOEJEO0lBQ2xDO0FBQ0osRUFFQSwrREFBK0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3NlcnZlci1pbnNlcnRlZC1odG1sLnNoYXJlZC1ydW50aW1lLmpzPzNhNzQiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgU2VydmVySW5zZXJ0ZWRIVE1MQ29udGV4dDogbnVsbCxcbiAgICB1c2VTZXJ2ZXJJbnNlcnRlZEhUTUw6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgU2VydmVySW5zZXJ0ZWRIVE1MQ29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTZXJ2ZXJJbnNlcnRlZEhUTUxDb250ZXh0O1xuICAgIH0sXG4gICAgdXNlU2VydmVySW5zZXJ0ZWRIVE1MOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVzZVNlcnZlckluc2VydGVkSFRNTDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBTZXJ2ZXJJbnNlcnRlZEhUTUxDb250ZXh0ID0gLyojX19QVVJFX18qLyBfcmVhY3QuZGVmYXVsdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuZnVuY3Rpb24gdXNlU2VydmVySW5zZXJ0ZWRIVE1MKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgYWRkSW5zZXJ0ZWRTZXJ2ZXJIVE1MQ2FsbGJhY2sgPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKFNlcnZlckluc2VydGVkSFRNTENvbnRleHQpO1xuICAgIC8vIFNob3VsZCBoYXZlIG5vIGVmZmVjdHMgb24gY2xpZW50IHdoZXJlIHRoZXJlJ3Mgbm8gZmx1c2ggZWZmZWN0cyBwcm92aWRlclxuICAgIGlmIChhZGRJbnNlcnRlZFNlcnZlckhUTUxDYWxsYmFjaykge1xuICAgICAgICBhZGRJbnNlcnRlZFNlcnZlckhUTUxDYWxsYmFjayhjYWxsYmFjayk7XG4gICAgfVxufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXJ2ZXItaW5zZXJ0ZWQtaHRtbC5zaGFyZWQtcnVudGltZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJTZXJ2ZXJJbnNlcnRlZEhUTUxDb250ZXh0IiwidXNlU2VydmVySW5zZXJ0ZWRIVE1MIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3QiLCJfIiwiZGVmYXVsdCIsImNyZWF0ZUNvbnRleHQiLCJjYWxsYmFjayIsImFkZEluc2VydGVkU2VydmVySFRNTENhbGxiYWNrIiwidXNlQ29udGV4dCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/utils/warn-once.js ***! + \**************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"warnOnce\", ({\n enumerable: true,\n get: function() {\n return warnOnce;\n }\n}));\nlet warnOnce = (_)=>{};\nif (true) {\n const warnings = new Set();\n warnOnce = (msg)=>{\n if (!warnings.has(msg)) {\n console.warn(msg);\n }\n warnings.add(msg);\n };\n} //# sourceMappingURL=warn-once.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDRDQUEyQztJQUN2Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLElBQUlBLFdBQVcsQ0FBQ0MsS0FBSztBQUNyQixJQUFJQyxJQUFxQyxFQUFFO0lBQ3ZDLE1BQU1DLFdBQVcsSUFBSUM7SUFDckJKLFdBQVcsQ0FBQ0s7UUFDUixJQUFJLENBQUNGLFNBQVNHLEdBQUcsQ0FBQ0QsTUFBTTtZQUNwQkUsUUFBUUMsSUFBSSxDQUFDSDtRQUNqQjtRQUNBRixTQUFTTSxHQUFHLENBQUNKO0lBQ2pCO0FBQ0osRUFFQSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3V0aWxzL3dhcm4tb25jZS5qcz83Mzk1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2Fybk9uY2VcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHdhcm5PbmNlO1xuICAgIH1cbn0pO1xubGV0IHdhcm5PbmNlID0gKF8pPT57fTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBjb25zdCB3YXJuaW5ncyA9IG5ldyBTZXQoKTtcbiAgICB3YXJuT25jZSA9IChtc2cpPT57XG4gICAgICAgIGlmICghd2FybmluZ3MuaGFzKG1zZykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybihtc2cpO1xuICAgICAgICB9XG4gICAgICAgIHdhcm5pbmdzLmFkZChtc2cpO1xuICAgIH07XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdhcm4tb25jZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwid2Fybk9uY2UiLCJfIiwicHJvY2VzcyIsIndhcm5pbmdzIiwiU2V0IiwibXNnIiwiaGFzIiwiY29uc29sZSIsIndhcm4iLCJhZGQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js\n")); + +/***/ }), + +/***/ "(shared)/./node_modules/next/dist/client/components/async-local-storage.js": +/*!*************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/async-local-storage.js ***! + \*************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"createAsyncLocalStorage\", ({\n enumerable: true,\n get: function() {\n return createAsyncLocalStorage;\n }\n}));\nconst sharedAsyncLocalStorageNotAvailableError = new Error(\"Invariant: AsyncLocalStorage accessed in runtime where it is not available\");\nclass FakeAsyncLocalStorage {\n disable() {\n throw sharedAsyncLocalStorageNotAvailableError;\n }\n getStore() {\n // This fake implementation of AsyncLocalStorage always returns `undefined`.\n return undefined;\n }\n run() {\n throw sharedAsyncLocalStorageNotAvailableError;\n }\n exit() {\n throw sharedAsyncLocalStorageNotAvailableError;\n }\n enterWith() {\n throw sharedAsyncLocalStorageNotAvailableError;\n }\n}\nconst maybeGlobalAsyncLocalStorage = globalThis.AsyncLocalStorage;\nfunction createAsyncLocalStorage() {\n if (maybeGlobalAsyncLocalStorage) {\n return new maybeGlobalAsyncLocalStorage();\n }\n return new FakeAsyncLocalStorage();\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=async-local-storage.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNoYXJlZCkvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2FzeW5jLWxvY2FsLXN0b3JhZ2UuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJEQUEwRDtJQUN0REksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJDQUEyQyxJQUFJQyxNQUFNO0FBQzNELE1BQU1DO0lBQ0ZDLFVBQVU7UUFDTixNQUFNSDtJQUNWO0lBQ0FJLFdBQVc7UUFDUCw0RUFBNEU7UUFDNUUsT0FBT0M7SUFDWDtJQUNBQyxNQUFNO1FBQ0YsTUFBTU47SUFDVjtJQUNBTyxPQUFPO1FBQ0gsTUFBTVA7SUFDVjtJQUNBUSxZQUFZO1FBQ1IsTUFBTVI7SUFDVjtBQUNKO0FBQ0EsTUFBTVMsK0JBQStCQyxXQUFXQyxpQkFBaUI7QUFDakUsU0FBU1o7SUFDTCxJQUFJVSw4QkFBOEI7UUFDOUIsT0FBTyxJQUFJQTtJQUNmO0lBQ0EsT0FBTyxJQUFJUDtBQUNmO0FBRUEsSUFBSSxDQUFDLE9BQU9QLFFBQVFpQixPQUFPLEtBQUssY0FBZSxPQUFPakIsUUFBUWlCLE9BQU8sS0FBSyxZQUFZakIsUUFBUWlCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2pCLFFBQVFpQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLcEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRaUIsT0FBTyxFQUFFLGNBQWM7UUFBRWhCLE9BQU87SUFBSztJQUNuRUgsT0FBT3FCLE1BQU0sQ0FBQ25CLFFBQVFpQixPQUFPLEVBQUVqQjtJQUMvQm9CLE9BQU9wQixPQUFPLEdBQUdBLFFBQVFpQixPQUFPO0FBQ2xDLEVBRUEsK0NBQStDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2NvbXBvbmVudHMvYXN5bmMtbG9jYWwtc3RvcmFnZS5qcz9hZjQzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXN5bmNMb2NhbFN0b3JhZ2VcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFzeW5jTG9jYWxTdG9yYWdlO1xuICAgIH1cbn0pO1xuY29uc3Qgc2hhcmVkQXN5bmNMb2NhbFN0b3JhZ2VOb3RBdmFpbGFibGVFcnJvciA9IG5ldyBFcnJvcihcIkludmFyaWFudDogQXN5bmNMb2NhbFN0b3JhZ2UgYWNjZXNzZWQgaW4gcnVudGltZSB3aGVyZSBpdCBpcyBub3QgYXZhaWxhYmxlXCIpO1xuY2xhc3MgRmFrZUFzeW5jTG9jYWxTdG9yYWdlIHtcbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aHJvdyBzaGFyZWRBc3luY0xvY2FsU3RvcmFnZU5vdEF2YWlsYWJsZUVycm9yO1xuICAgIH1cbiAgICBnZXRTdG9yZSgpIHtcbiAgICAgICAgLy8gVGhpcyBmYWtlIGltcGxlbWVudGF0aW9uIG9mIEFzeW5jTG9jYWxTdG9yYWdlIGFsd2F5cyByZXR1cm5zIGB1bmRlZmluZWRgLlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBydW4oKSB7XG4gICAgICAgIHRocm93IHNoYXJlZEFzeW5jTG9jYWxTdG9yYWdlTm90QXZhaWxhYmxlRXJyb3I7XG4gICAgfVxuICAgIGV4aXQoKSB7XG4gICAgICAgIHRocm93IHNoYXJlZEFzeW5jTG9jYWxTdG9yYWdlTm90QXZhaWxhYmxlRXJyb3I7XG4gICAgfVxuICAgIGVudGVyV2l0aCgpIHtcbiAgICAgICAgdGhyb3cgc2hhcmVkQXN5bmNMb2NhbFN0b3JhZ2VOb3RBdmFpbGFibGVFcnJvcjtcbiAgICB9XG59XG5jb25zdCBtYXliZUdsb2JhbEFzeW5jTG9jYWxTdG9yYWdlID0gZ2xvYmFsVGhpcy5Bc3luY0xvY2FsU3RvcmFnZTtcbmZ1bmN0aW9uIGNyZWF0ZUFzeW5jTG9jYWxTdG9yYWdlKCkge1xuICAgIGlmIChtYXliZUdsb2JhbEFzeW5jTG9jYWxTdG9yYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgbWF5YmVHbG9iYWxBc3luY0xvY2FsU3RvcmFnZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZha2VBc3luY0xvY2FsU3RvcmFnZSgpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3luYy1sb2NhbC1zdG9yYWdlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJjcmVhdGVBc3luY0xvY2FsU3RvcmFnZSIsInNoYXJlZEFzeW5jTG9jYWxTdG9yYWdlTm90QXZhaWxhYmxlRXJyb3IiLCJFcnJvciIsIkZha2VBc3luY0xvY2FsU3RvcmFnZSIsImRpc2FibGUiLCJnZXRTdG9yZSIsInVuZGVmaW5lZCIsInJ1biIsImV4aXQiLCJlbnRlcldpdGgiLCJtYXliZUdsb2JhbEFzeW5jTG9jYWxTdG9yYWdlIiwiZ2xvYmFsVGhpcyIsIkFzeW5jTG9jYWxTdG9yYWdlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(shared)/./node_modules/next/dist/client/components/async-local-storage.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js": +/*!********************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js ***! + \********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * react-dom.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nvar Scheduler = __webpack_require__(/*! next/dist/compiled/scheduler */ \"(app-pages-browser)/./node_modules/next/dist/compiled/scheduler/index.js\");\n\nvar Internals = {\n usingClientEntryPoint: false,\n Events: null,\n Dispatcher: {\n current: null\n }\n};\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nvar suppressWarning = false;\nfunction setSuppressWarning(newSuppressWarning) {\n {\n suppressWarning = newSuppressWarning;\n }\n} // In DEV, calls to console.warn and console.error get replaced\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n {\n if (!suppressWarning) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n printWarning('warn', format, args);\n }\n }\n}\nfunction error(format) {\n {\n if (!suppressWarning) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\nvar assign = Object.assign;\n\n// -----------------------------------------------------------------------------\n// Killswitch\n//\n// Flags that exist solely to turn off a change in case it causes a regression\n// when it rolls out to prod. We should remove these as soon as possible.\n// -----------------------------------------------------------------------------\n// -----------------------------------------------------------------------------\n// Land or remove (moderate effort)\n//\n// Flags that can be probably deleted or landed, but might require extra effort\n// like migrating internal callers or performance testing.\n// -----------------------------------------------------------------------------\n// TODO: Finish rolling out in www\n\nvar enableClientRenderFallbackOnTextMismatch = true;\nvar enableFormActions = true;\nvar enableAsyncActions = true; // Not sure if www still uses this. We don't have a replacement but whatever we\n// Slated for removal in the future (significant effort)\n//\n// These are experiments that didn't work out, and never shipped, but we can't\n// delete from the codebase until we migrate internal callers.\n// -----------------------------------------------------------------------------\n// Add a callback property to suspense to notify which promises are currently\n// in the update queue. This allows reporting and tracing of what is causing\n// the user to see a loading state.\n//\n// Also allows hydration callbacks to fire when a dehydrated boundary gets\n// hydrated or deleted.\n//\n// This will eventually be replaced by the Transition Tracing proposal.\n\nvar enableSuspenseCallback = false; // Experimental Scope support.\n\nvar enableLazyContextPropagation = false; // FB-only usage. The new API has different semantics.\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\nvar alwaysThrottleRetries = true;\nvar syncLaneExpirationMs = 250;\nvar transitionLaneExpirationMs = 5000; // -----------------------------------------------------------------------------\n// Chopping Block\n//\n// Planned feature deprecations and breaking changes. Sorted roughly in order of\n// when we plan to enable them.\n// -----------------------------------------------------------------------------\n// This flag enables Strict Effects by default. We're not turning this on until\n// after 18 because it requires migration work. Recommendation is to use\n// <StrictMode /> to gradually upgrade components.\n// If TRUE, trees rendered with createRoot will be StrictEffectsMode.\n// If FALSE, these trees will be StrictLegacyMode.\n\nvar createRootStrictEffectsByDefault = false;\n// React DOM Chopping Block\n//\n// Similar to main Chopping Block but only flags related to React DOM. These are\n// grouped because we will likely batch all of them into a single major release.\n// -----------------------------------------------------------------------------\n// Disable support for comment nodes as React DOM containers. Already disabled\n// in open source, but www codebase still relies on it. Need to remove.\n\nvar disableCommentsAsDOMContainers = true; // Disable javascript: URL strings in href for XSS protection.\n// Debugging and DevTools\n// -----------------------------------------------------------------------------\n// Adds user timing marks for e.g. state updates, suspense, and work loop stuff,\n// for an experimental timeline tool.\n\nvar enableSchedulingProfiler = true; // Helps identify side effects in render-phase lifecycle hooks and setState\n\nvar enableProfilerTimer = true; // Record durations for commit and passive effects phases.\n\nvar enableProfilerCommitHooks = true; // Phase param passed to onRender callback differentiates between an \"update\" and a \"cascading-update\".\n\nvar enableProfilerNestedUpdatePhase = true; // Adds verbose console logging for e.g. state updates, suspense, and work loop\n\nvar ReactCurrentDispatcher$3 = ReactSharedInternals.ReactCurrentDispatcher; // Since the \"not pending\" value is always the same, we can reuse the\n// same object across all transitions.\n\nvar sharedNotPendingObject = {\n pending: false,\n data: null,\n method: null,\n action: null\n};\nvar NotPending = Object.freeze(sharedNotPendingObject) ;\n\nfunction resolveDispatcher() {\n // Copied from react/src/ReactHooks.js. It's the same thing but in a\n // different package.\n var dispatcher = ReactCurrentDispatcher$3.current;\n\n {\n if (dispatcher === null) {\n error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\\n' + '2. You might be breaking the Rules of Hooks\\n' + '3. You might have more than one copy of React in the same app\\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');\n }\n } // Will result in a null access error if accessed outside render phase. We\n // intentionally don't throw our own error because this is in a hot path.\n // Also helps ensure this is inlined.\n\n\n return dispatcher;\n}\n\nfunction useFormStatus() {\n {\n var dispatcher = resolveDispatcher(); // $FlowFixMe[not-a-function] We know this exists because of the feature check above.\n\n return dispatcher.useHostTransitionStatus();\n }\n}\nfunction useFormState(action, initialState, permalink) {\n {\n var dispatcher = resolveDispatcher(); // $FlowFixMe[not-a-function] This is unstable, thus optional\n\n return dispatcher.useFormState(action, initialState, permalink);\n }\n}\n\nvar valueStack = [];\nvar fiberStack;\n\n{\n fiberStack = [];\n}\n\nvar index = -1;\n\nfunction createCursor(defaultValue) {\n return {\n current: defaultValue\n };\n}\n\nfunction pop(cursor, fiber) {\n if (index < 0) {\n {\n error('Unexpected pop.');\n }\n\n return;\n }\n\n {\n if (fiber !== fiberStack[index]) {\n error('Unexpected Fiber popped.');\n }\n }\n\n cursor.current = valueStack[index];\n valueStack[index] = null;\n\n {\n fiberStack[index] = null;\n }\n\n index--;\n}\n\nfunction push(cursor, value, fiber) {\n index++;\n valueStack[index] = cursor.current;\n\n {\n fiberStack[index] = fiber;\n }\n\n cursor.current = value;\n}\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_SCOPE_TYPE = Symbol.for('react.scope');\nvar REACT_DEBUG_TRACING_MODE_TYPE = Symbol.for('react.debug_trace_mode');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_LEGACY_HIDDEN_TYPE = Symbol.for('react.legacy_hidden');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar REACT_TRACING_MARKER_TYPE = Symbol.for('react.tracing_marker');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar contextStackCursor$1 = createCursor(null);\nvar contextFiberStackCursor = createCursor(null);\nvar rootInstanceStackCursor = createCursor(null); // Represents the nearest host transition provider (in React DOM, a <form />)\n// NOTE: Since forms cannot be nested, and this feature is only implemented by\n// React DOM, we don't technically need this to be a stack. It could be a single\n// module variable instead.\n\nvar hostTransitionProviderCursor = createCursor(null); // TODO: This should initialize to NotPendingTransition, a constant\n// imported from the fiber config. However, because of a cycle in the module\n// graph, that value isn't defined during this module's initialization. I can't\n// think of a way to work around this without moving that value out of the\n// fiber config. For now, the \"no provider\" case is handled when reading,\n// inside useHostTransitionStatus.\n\nvar HostTransitionContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0,\n Provider: null,\n Consumer: null,\n _defaultValue: null,\n _globalName: null\n};\n\nfunction requiredContext(c) {\n {\n if (c === null) {\n error('Expected host context to exist. This error is likely caused by a bug ' + 'in React. Please file an issue.');\n }\n }\n\n return c;\n}\n\nfunction getCurrentRootHostContainer() {\n return rootInstanceStackCursor.current;\n}\n\nfunction getRootHostContainer() {\n var rootInstance = requiredContext(rootInstanceStackCursor.current);\n return rootInstance;\n}\n\nfunction pushHostContainer(fiber, nextRootInstance) {\n // Push current root instance onto the stack;\n // This allows us to reset root when portals are popped.\n push(rootInstanceStackCursor, nextRootInstance, fiber); // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n\n push(contextFiberStackCursor, fiber, fiber); // Finally, we need to push the host context to the stack.\n // However, we can't just call getRootHostContext() and push it because\n // we'd have a different number of entries on the stack depending on\n // whether getRootHostContext() throws somewhere in renderer code or not.\n // So we push an empty value first. This lets us safely unwind on errors.\n\n push(contextStackCursor$1, null, fiber);\n var nextRootContext = getRootHostContext(nextRootInstance); // Now that we know this function doesn't throw, replace it.\n\n pop(contextStackCursor$1, fiber);\n push(contextStackCursor$1, nextRootContext, fiber);\n}\n\nfunction popHostContainer(fiber) {\n pop(contextStackCursor$1, fiber);\n pop(contextFiberStackCursor, fiber);\n pop(rootInstanceStackCursor, fiber);\n}\n\nfunction getHostContext() {\n var context = requiredContext(contextStackCursor$1.current);\n return context;\n}\n\nfunction pushHostContext(fiber) {\n {\n var stateHook = fiber.memoizedState;\n\n if (stateHook !== null) {\n // Only provide context if this fiber has been upgraded by a host\n // transition. We use the same optimization for regular host context below.\n push(hostTransitionProviderCursor, fiber, fiber);\n }\n }\n\n var context = requiredContext(contextStackCursor$1.current);\n var nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique.\n\n if (context !== nextContext) {\n // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n push(contextFiberStackCursor, fiber, fiber);\n push(contextStackCursor$1, nextContext, fiber);\n }\n}\n\nfunction popHostContext(fiber) {\n if (contextFiberStackCursor.current === fiber) {\n // Do not pop unless this Fiber provided the current context.\n // pushHostContext() only pushes Fibers that provide unique contexts.\n pop(contextStackCursor$1, fiber);\n pop(contextFiberStackCursor, fiber);\n }\n\n {\n if (hostTransitionProviderCursor.current === fiber) {\n // Do not pop unless this Fiber provided the current context. This is mostly\n // a performance optimization, but conveniently it also prevents a potential\n // data race where a host provider is upgraded (i.e. memoizedState becomes\n // non-null) during a concurrent event. This is a bit of a flaw in the way\n // we upgrade host components, but because we're accounting for it here, it\n // should be fine.\n pop(hostTransitionProviderCursor, fiber); // When popping the transition provider, we reset the context value back\n // to `null`. We can do this because you're not allowd to nest forms. If\n // we allowed for multiple nested host transition providers, then we'd\n // need to reset this to the parent provider's status.\n\n {\n HostTransitionContext._currentValue = null;\n }\n }\n }\n}\n\nvar NoFlags$1 =\n/* */\n0;\nvar PerformedWork =\n/* */\n1;\nvar Placement =\n/* */\n2;\nvar DidCapture =\n/* */\n128;\nvar Hydrating =\n/* */\n4096; // You can change the rest (and add more).\n\nvar Update =\n/* */\n4;\n/* Skipped value: 0b0000000000000000000000001000; */\n\nvar ChildDeletion =\n/* */\n16;\nvar ContentReset =\n/* */\n32;\nvar Callback =\n/* */\n64;\n/* Used by DidCapture: 0b0000000000000000000010000000; */\n\nvar ForceClientRender =\n/* */\n256;\nvar Ref =\n/* */\n512;\nvar Snapshot =\n/* */\n1024;\nvar Passive$1 =\n/* */\n2048;\n/* Used by Hydrating: 0b0000000000000001000000000000; */\n\nvar Visibility =\n/* */\n8192;\nvar StoreConsistency =\n/* */\n16384; // It's OK to reuse these bits because these flags are mutually exclusive for\n// different fiber types. We should really be doing this for as many flags as\n// possible, because we're about to run out of bits.\n\nvar ScheduleRetry = StoreConsistency;\nvar ShouldSuspendCommit = Visibility;\nvar DidDefer = ContentReset;\nvar LifecycleEffectMask = Passive$1 | Update | Callback | Ref | Snapshot | StoreConsistency; // Union of all commit flags (flags with the lifetime of a particular commit)\n\nvar HostEffectMask =\n/* */\n32767; // These are not really side effects, but we still reuse this field.\n\nvar Incomplete =\n/* */\n32768;\nvar ShouldCapture =\n/* */\n65536;\nvar ForceUpdateForLegacySuspense =\n/* */\n131072;\nvar Forked =\n/* */\n1048576; // Static tags describe aspects of a fiber that are not specific to a render,\n// e.g. a fiber uses a passive effect (even if there are no updates on this particular render).\n// This enables us to defer more work in the unmount case,\n// since we can defer traversing the tree during layout to look for Passive effects,\n// and instead rely on the static flag as a signal that there may be cleanup work.\n\nvar RefStatic =\n/* */\n2097152;\nvar LayoutStatic =\n/* */\n4194304;\nvar PassiveStatic =\n/* */\n8388608;\nvar MaySuspendCommit =\n/* */\n16777216; // Flag used to identify newly inserted fibers. It isn't reset after commit unlike `Placement`.\n\nvar PlacementDEV =\n/* */\n33554432;\nvar MountLayoutDev =\n/* */\n67108864;\nvar MountPassiveDev =\n/* */\n134217728; // Groups of flags that are used in the commit phase to skip over trees that\n// don't contain effects, by checking subtreeFlags.\n\nvar BeforeMutationMask = // TODO: Remove Update flag from before mutation phase by re-landing Visibility\n// flag logic (see #20043)\nUpdate | Snapshot | (0);\nvar MutationMask = Placement | Update | ChildDeletion | ContentReset | Ref | Hydrating | Visibility;\nvar LayoutMask = Update | Callback | Ref | Visibility; // TODO: Split into PassiveMountMask and PassiveUnmountMask\n\nvar PassiveMask = Passive$1 | Visibility | ChildDeletion; // Union of tags that don't get reset on clones.\n// This allows certain concepts to persist without recalculating them,\n// e.g. whether a subtree contains passive effects or portals.\n\nvar StaticMask = LayoutStatic | PassiveStatic | RefStatic | MaySuspendCommit;\n\n// This module only exists as an ESM wrapper around the external CommonJS\nvar scheduleCallback$3 = Scheduler.unstable_scheduleCallback;\nvar cancelCallback$1 = Scheduler.unstable_cancelCallback;\nvar shouldYield = Scheduler.unstable_shouldYield;\nvar requestPaint = Scheduler.unstable_requestPaint;\nvar now$1 = Scheduler.unstable_now;\nvar getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel;\nvar ImmediatePriority = Scheduler.unstable_ImmediatePriority;\nvar UserBlockingPriority = Scheduler.unstable_UserBlockingPriority;\nvar NormalPriority$1 = Scheduler.unstable_NormalPriority;\nvar LowPriority = Scheduler.unstable_LowPriority;\nvar IdlePriority = Scheduler.unstable_IdlePriority; // this doesn't actually exist on the scheduler, but it *does*\n// on scheduler/unstable_mock, which we'll need for internal testing\n\nvar log$1 = Scheduler.log;\nvar unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar rendererID = null;\nvar injectedHook = null;\nvar injectedProfilingHooks = null;\nvar hasLoggedError = false;\nvar isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined';\nfunction injectInternals(internals) {\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n // No DevTools\n return false;\n }\n\n var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n if (hook.isDisabled) {\n // This isn't a real property on the hook, but it can be set to opt out\n // of DevTools integration and associated warnings and logs.\n // https://github.com/facebook/react/issues/3877\n return true;\n }\n\n if (!hook.supportsFiber) {\n {\n error('The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://reactjs.org/link/react-devtools');\n } // DevTools exists, even though it doesn't support Fiber.\n\n\n return true;\n }\n\n try {\n if (enableSchedulingProfiler) {\n // Conditionally inject these hooks only if Timeline profiler is supported by this build.\n // This gives DevTools a way to feature detect that isn't tied to version number\n // (since profiling and timeline are controlled by different feature flags).\n internals = assign({}, internals, {\n getLaneLabelMap: getLaneLabelMap,\n injectProfilingHooks: injectProfilingHooks\n });\n }\n\n rendererID = hook.inject(internals); // We have successfully injected, so now it is safe to set up hooks.\n\n injectedHook = hook;\n } catch (err) {\n // Catch all errors because it is unsafe to throw during initialization.\n {\n error('React instrumentation encountered an error: %s.', err);\n }\n }\n\n if (hook.checkDCE) {\n // This is the real DevTools.\n return true;\n } else {\n // This is likely a hook installed by Fast Refresh runtime.\n return false;\n }\n}\nfunction onScheduleRoot(root, children) {\n {\n if (injectedHook && typeof injectedHook.onScheduleFiberRoot === 'function') {\n try {\n injectedHook.onScheduleFiberRoot(rendererID, root, children);\n } catch (err) {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n }\n}\nfunction onCommitRoot$1(root, eventPriority) {\n if (injectedHook && typeof injectedHook.onCommitFiberRoot === 'function') {\n try {\n var didError = (root.current.flags & DidCapture) === DidCapture;\n\n if (enableProfilerTimer) {\n var schedulerPriority;\n\n switch (eventPriority) {\n case DiscreteEventPriority:\n schedulerPriority = ImmediatePriority;\n break;\n\n case ContinuousEventPriority:\n schedulerPriority = UserBlockingPriority;\n break;\n\n case DefaultEventPriority:\n schedulerPriority = NormalPriority$1;\n break;\n\n case IdleEventPriority:\n schedulerPriority = IdlePriority;\n break;\n\n default:\n schedulerPriority = NormalPriority$1;\n break;\n }\n\n injectedHook.onCommitFiberRoot(rendererID, root, schedulerPriority, didError);\n }\n } catch (err) {\n {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n }\n}\nfunction onPostCommitRoot(root) {\n if (injectedHook && typeof injectedHook.onPostCommitFiberRoot === 'function') {\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, root);\n } catch (err) {\n {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n }\n}\nfunction onCommitUnmount(fiber) {\n if (injectedHook && typeof injectedHook.onCommitFiberUnmount === 'function') {\n try {\n injectedHook.onCommitFiberUnmount(rendererID, fiber);\n } catch (err) {\n {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n }\n}\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n {\n if (typeof log$1 === 'function') {\n // We're in a test because Scheduler.log only exists\n // in SchedulerMock. To reduce the noise in strict mode tests,\n // suppress warnings and disable scheduler yielding during the double render\n unstable_setDisableYieldValue(newIsStrictMode);\n setSuppressWarning(newIsStrictMode);\n }\n\n if (injectedHook && typeof injectedHook.setStrictMode === 'function') {\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {\n {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n }\n }\n} // Profiler API hooks\n\nfunction injectProfilingHooks(profilingHooks) {\n injectedProfilingHooks = profilingHooks;\n}\n\nfunction getLaneLabelMap() {\n {\n var map = new Map();\n var lane = 1;\n\n for (var index = 0; index < TotalLanes; index++) {\n var label = getLabelForLane(lane);\n map.set(lane, label);\n lane *= 2;\n }\n\n return map;\n }\n}\n\nfunction markCommitStarted(lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markCommitStarted === 'function') {\n injectedProfilingHooks.markCommitStarted(lanes);\n }\n }\n}\nfunction markCommitStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markCommitStopped === 'function') {\n injectedProfilingHooks.markCommitStopped();\n }\n }\n}\nfunction markComponentRenderStarted(fiber) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentRenderStarted === 'function') {\n injectedProfilingHooks.markComponentRenderStarted(fiber);\n }\n }\n}\nfunction markComponentRenderStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentRenderStopped === 'function') {\n injectedProfilingHooks.markComponentRenderStopped();\n }\n }\n}\nfunction markComponentPassiveEffectMountStarted(fiber) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted === 'function') {\n injectedProfilingHooks.markComponentPassiveEffectMountStarted(fiber);\n }\n }\n}\nfunction markComponentPassiveEffectMountStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped === 'function') {\n injectedProfilingHooks.markComponentPassiveEffectMountStopped();\n }\n }\n}\nfunction markComponentPassiveEffectUnmountStarted(fiber) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted === 'function') {\n injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(fiber);\n }\n }\n}\nfunction markComponentPassiveEffectUnmountStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped === 'function') {\n injectedProfilingHooks.markComponentPassiveEffectUnmountStopped();\n }\n }\n}\nfunction markComponentLayoutEffectMountStarted(fiber) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted === 'function') {\n injectedProfilingHooks.markComponentLayoutEffectMountStarted(fiber);\n }\n }\n}\nfunction markComponentLayoutEffectMountStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped === 'function') {\n injectedProfilingHooks.markComponentLayoutEffectMountStopped();\n }\n }\n}\nfunction markComponentLayoutEffectUnmountStarted(fiber) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted === 'function') {\n injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(fiber);\n }\n }\n}\nfunction markComponentLayoutEffectUnmountStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped === 'function') {\n injectedProfilingHooks.markComponentLayoutEffectUnmountStopped();\n }\n }\n}\nfunction markComponentErrored(fiber, thrownValue, lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentErrored === 'function') {\n injectedProfilingHooks.markComponentErrored(fiber, thrownValue, lanes);\n }\n }\n}\nfunction markComponentSuspended(fiber, wakeable, lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentSuspended === 'function') {\n injectedProfilingHooks.markComponentSuspended(fiber, wakeable, lanes);\n }\n }\n}\nfunction markLayoutEffectsStarted(lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markLayoutEffectsStarted === 'function') {\n injectedProfilingHooks.markLayoutEffectsStarted(lanes);\n }\n }\n}\nfunction markLayoutEffectsStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markLayoutEffectsStopped === 'function') {\n injectedProfilingHooks.markLayoutEffectsStopped();\n }\n }\n}\nfunction markPassiveEffectsStarted(lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markPassiveEffectsStarted === 'function') {\n injectedProfilingHooks.markPassiveEffectsStarted(lanes);\n }\n }\n}\nfunction markPassiveEffectsStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markPassiveEffectsStopped === 'function') {\n injectedProfilingHooks.markPassiveEffectsStopped();\n }\n }\n}\nfunction markRenderStarted(lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderStarted === 'function') {\n injectedProfilingHooks.markRenderStarted(lanes);\n }\n }\n}\nfunction markRenderYielded() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderYielded === 'function') {\n injectedProfilingHooks.markRenderYielded();\n }\n }\n}\nfunction markRenderStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderStopped === 'function') {\n injectedProfilingHooks.markRenderStopped();\n }\n }\n}\nfunction markRenderScheduled(lane) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderScheduled === 'function') {\n injectedProfilingHooks.markRenderScheduled(lane);\n }\n }\n}\nfunction markForceUpdateScheduled(fiber, lane) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markForceUpdateScheduled === 'function') {\n injectedProfilingHooks.markForceUpdateScheduled(fiber, lane);\n }\n }\n}\nfunction markStateUpdateScheduled(fiber, lane) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markStateUpdateScheduled === 'function') {\n injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);\n }\n }\n}\n\nvar NoMode =\n/* */\n0; // TODO: Remove ConcurrentMode by reading from the root tag instead\n\nvar ConcurrentMode =\n/* */\n1;\nvar ProfileMode =\n/* */\n2;\nvar StrictLegacyMode =\n/* */\n8;\nvar StrictEffectsMode =\n/* */\n16;\nvar NoStrictPassiveEffectsMode =\n/* */\n64;\n\n// TODO: This is pretty well supported by browsers. Maybe we can drop it.\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback; // Count leading zeros.\n// Based on:\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nfunction clz32Fallback(x) {\n var asUint = x >>> 0;\n\n if (asUint === 0) {\n return 32;\n }\n\n return 31 - (log(asUint) / LN2 | 0) | 0;\n}\n\n// If those values are changed that package should be rebuilt and redeployed.\n\nvar TotalLanes = 31;\nvar NoLanes =\n/* */\n0;\nvar NoLane =\n/* */\n0;\nvar SyncHydrationLane =\n/* */\n1;\nvar SyncLane =\n/* */\n2;\nvar SyncLaneIndex = 1;\nvar InputContinuousHydrationLane =\n/* */\n4;\nvar InputContinuousLane =\n/* */\n8;\nvar DefaultHydrationLane =\n/* */\n16;\nvar DefaultLane =\n/* */\n32;\nvar SyncUpdateLanes = SyncLane | InputContinuousLane | DefaultLane ;\nvar TransitionHydrationLane =\n/* */\n64;\nvar TransitionLanes =\n/* */\n4194176;\nvar TransitionLane1 =\n/* */\n128;\nvar TransitionLane2 =\n/* */\n256;\nvar TransitionLane3 =\n/* */\n512;\nvar TransitionLane4 =\n/* */\n1024;\nvar TransitionLane5 =\n/* */\n2048;\nvar TransitionLane6 =\n/* */\n4096;\nvar TransitionLane7 =\n/* */\n8192;\nvar TransitionLane8 =\n/* */\n16384;\nvar TransitionLane9 =\n/* */\n32768;\nvar TransitionLane10 =\n/* */\n65536;\nvar TransitionLane11 =\n/* */\n131072;\nvar TransitionLane12 =\n/* */\n262144;\nvar TransitionLane13 =\n/* */\n524288;\nvar TransitionLane14 =\n/* */\n1048576;\nvar TransitionLane15 =\n/* */\n2097152;\nvar RetryLanes =\n/* */\n62914560;\nvar RetryLane1 =\n/* */\n4194304;\nvar RetryLane2 =\n/* */\n8388608;\nvar RetryLane3 =\n/* */\n16777216;\nvar RetryLane4 =\n/* */\n33554432;\nvar SomeRetryLane = RetryLane1;\nvar SelectiveHydrationLane =\n/* */\n67108864;\nvar NonIdleLanes =\n/* */\n134217727;\nvar IdleHydrationLane =\n/* */\n134217728;\nvar IdleLane =\n/* */\n268435456;\nvar OffscreenLane =\n/* */\n536870912;\nvar DeferredLane =\n/* */\n1073741824; // Any lane that might schedule an update. This is used to detect infinite\n// update loops, so it doesn't include hydration lanes or retries.\n\nvar UpdateLanes = SyncLane | InputContinuousLane | DefaultLane | TransitionLanes; // This function is used for the experimental timeline (react-devtools-timeline)\n// It should be kept in sync with the Lanes values above.\n\nfunction getLabelForLane(lane) {\n {\n if (lane & SyncHydrationLane) {\n return 'SyncHydrationLane';\n }\n\n if (lane & SyncLane) {\n return 'Sync';\n }\n\n if (lane & InputContinuousHydrationLane) {\n return 'InputContinuousHydration';\n }\n\n if (lane & InputContinuousLane) {\n return 'InputContinuous';\n }\n\n if (lane & DefaultHydrationLane) {\n return 'DefaultHydration';\n }\n\n if (lane & DefaultLane) {\n return 'Default';\n }\n\n if (lane & TransitionHydrationLane) {\n return 'TransitionHydration';\n }\n\n if (lane & TransitionLanes) {\n return 'Transition';\n }\n\n if (lane & RetryLanes) {\n return 'Retry';\n }\n\n if (lane & SelectiveHydrationLane) {\n return 'SelectiveHydration';\n }\n\n if (lane & IdleHydrationLane) {\n return 'IdleHydration';\n }\n\n if (lane & IdleLane) {\n return 'Idle';\n }\n\n if (lane & OffscreenLane) {\n return 'Offscreen';\n }\n\n if (lane & DeferredLane) {\n return 'Deferred';\n }\n }\n}\nvar NoTimestamp = -1;\nvar nextTransitionLane = TransitionLane1;\nvar nextRetryLane = RetryLane1;\n\nfunction getHighestPriorityLanes(lanes) {\n {\n var pendingSyncLanes = lanes & SyncUpdateLanes;\n\n if (pendingSyncLanes !== 0) {\n return pendingSyncLanes;\n }\n }\n\n switch (getHighestPriorityLane(lanes)) {\n case SyncHydrationLane:\n return SyncHydrationLane;\n\n case SyncLane:\n return SyncLane;\n\n case InputContinuousHydrationLane:\n return InputContinuousHydrationLane;\n\n case InputContinuousLane:\n return InputContinuousLane;\n\n case DefaultHydrationLane:\n return DefaultHydrationLane;\n\n case DefaultLane:\n return DefaultLane;\n\n case TransitionHydrationLane:\n return TransitionHydrationLane;\n\n case TransitionLane1:\n case TransitionLane2:\n case TransitionLane3:\n case TransitionLane4:\n case TransitionLane5:\n case TransitionLane6:\n case TransitionLane7:\n case TransitionLane8:\n case TransitionLane9:\n case TransitionLane10:\n case TransitionLane11:\n case TransitionLane12:\n case TransitionLane13:\n case TransitionLane14:\n case TransitionLane15:\n return lanes & TransitionLanes;\n\n case RetryLane1:\n case RetryLane2:\n case RetryLane3:\n case RetryLane4:\n return lanes & RetryLanes;\n\n case SelectiveHydrationLane:\n return SelectiveHydrationLane;\n\n case IdleHydrationLane:\n return IdleHydrationLane;\n\n case IdleLane:\n return IdleLane;\n\n case OffscreenLane:\n return OffscreenLane;\n\n case DeferredLane:\n // This shouldn't be reachable because deferred work is always entangled\n // with something else.\n return NoLanes;\n\n default:\n {\n error('Should have found matching lanes. This is a bug in React.');\n } // This shouldn't be reachable, but as a fallback, return the entire bitmask.\n\n\n return lanes;\n }\n}\n\nfunction getNextLanes(root, wipLanes) {\n // Early bailout if there's no pending work left.\n var pendingLanes = root.pendingLanes;\n\n if (pendingLanes === NoLanes) {\n return NoLanes;\n }\n\n var nextLanes = NoLanes;\n var suspendedLanes = root.suspendedLanes;\n var pingedLanes = root.pingedLanes; // Do not work on any idle work until all the non-idle work has finished,\n // even if the work is suspended.\n\n var nonIdlePendingLanes = pendingLanes & NonIdleLanes;\n\n if (nonIdlePendingLanes !== NoLanes) {\n var nonIdleUnblockedLanes = nonIdlePendingLanes & ~suspendedLanes;\n\n if (nonIdleUnblockedLanes !== NoLanes) {\n nextLanes = getHighestPriorityLanes(nonIdleUnblockedLanes);\n } else {\n var nonIdlePingedLanes = nonIdlePendingLanes & pingedLanes;\n\n if (nonIdlePingedLanes !== NoLanes) {\n nextLanes = getHighestPriorityLanes(nonIdlePingedLanes);\n }\n }\n } else {\n // The only remaining work is Idle.\n var unblockedLanes = pendingLanes & ~suspendedLanes;\n\n if (unblockedLanes !== NoLanes) {\n nextLanes = getHighestPriorityLanes(unblockedLanes);\n } else {\n if (pingedLanes !== NoLanes) {\n nextLanes = getHighestPriorityLanes(pingedLanes);\n }\n }\n }\n\n if (nextLanes === NoLanes) {\n // This should only be reachable if we're suspended\n // TODO: Consider warning in this path if a fallback timer is not scheduled.\n return NoLanes;\n } // If we're already in the middle of a render, switching lanes will interrupt\n // it and we'll lose our progress. We should only do this if the new lanes are\n // higher priority.\n\n\n if (wipLanes !== NoLanes && wipLanes !== nextLanes && // If we already suspended with a delay, then interrupting is fine. Don't\n // bother waiting until the root is complete.\n (wipLanes & suspendedLanes) === NoLanes) {\n var nextLane = getHighestPriorityLane(nextLanes);\n var wipLane = getHighestPriorityLane(wipLanes);\n\n if ( // Tests whether the next lane is equal or lower priority than the wip\n // one. This works because the bits decrease in priority as you go left.\n nextLane >= wipLane || // Default priority updates should not interrupt transition updates. The\n // only difference between default updates and transition updates is that\n // default updates do not support refresh transitions.\n nextLane === DefaultLane && (wipLane & TransitionLanes) !== NoLanes) {\n // Keep working on the existing in-progress tree. Do not interrupt.\n return wipLanes;\n }\n }\n\n return nextLanes;\n}\nfunction getEntangledLanes(root, renderLanes) {\n var entangledLanes = renderLanes;\n\n if ((entangledLanes & InputContinuousLane) !== NoLanes) {\n // When updates are sync by default, we entangle continuous priority updates\n // and default updates, so they render in the same batch. The only reason\n // they use separate lanes is because continuous updates should interrupt\n // transitions, but default updates should not.\n entangledLanes |= entangledLanes & DefaultLane;\n } // Check for entangled lanes and add them to the batch.\n //\n // A lane is said to be entangled with another when it's not allowed to render\n // in a batch that does not also include the other lane. Typically we do this\n // when multiple updates have the same source, and we only want to respond to\n // the most recent event from that source.\n //\n // Note that we apply entanglements *after* checking for partial work above.\n // This means that if a lane is entangled during an interleaved event while\n // it's already rendering, we won't interrupt it. This is intentional, since\n // entanglement is usually \"best effort\": we'll try our best to render the\n // lanes in the same batch, but it's not worth throwing out partially\n // completed work in order to do it.\n // TODO: Reconsider this. The counter-argument is that the partial work\n // represents an intermediate state, which we don't want to show to the user.\n // And by spending extra time finishing it, we're increasing the amount of\n // time it takes to show the final state, which is what they are actually\n // waiting for.\n //\n // For those exceptions where entanglement is semantically important,\n // we should ensure that there is no partial work at the\n // time we apply the entanglement.\n\n\n var allEntangledLanes = root.entangledLanes;\n\n if (allEntangledLanes !== NoLanes) {\n var entanglements = root.entanglements;\n var lanes = entangledLanes & allEntangledLanes;\n\n while (lanes > 0) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n entangledLanes |= entanglements[index];\n lanes &= ~lane;\n }\n }\n\n return entangledLanes;\n}\n\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case SyncHydrationLane:\n case SyncLane:\n case InputContinuousHydrationLane:\n case InputContinuousLane:\n // User interactions should expire slightly more quickly.\n //\n // NOTE: This is set to the corresponding constant as in Scheduler.js.\n // When we made it larger, a product metric in www regressed, suggesting\n // there's a user interaction that's being starved by a series of\n // synchronous updates. If that theory is correct, the proper solution is\n // to fix the starvation. However, this scenario supports the idea that\n // expiration times are an important safeguard when starvation\n // does happen.\n return currentTime + syncLaneExpirationMs;\n\n case DefaultHydrationLane:\n case DefaultLane:\n case TransitionHydrationLane:\n case TransitionLane1:\n case TransitionLane2:\n case TransitionLane3:\n case TransitionLane4:\n case TransitionLane5:\n case TransitionLane6:\n case TransitionLane7:\n case TransitionLane8:\n case TransitionLane9:\n case TransitionLane10:\n case TransitionLane11:\n case TransitionLane12:\n case TransitionLane13:\n case TransitionLane14:\n case TransitionLane15:\n return currentTime + transitionLaneExpirationMs;\n\n case RetryLane1:\n case RetryLane2:\n case RetryLane3:\n case RetryLane4:\n // TODO: Retries should be allowed to expire if they are CPU bound for\n // too long, but when I made this change it caused a spike in browser\n // crashes. There must be some other underlying bug; not super urgent but\n // ideally should figure out why and fix it. Unfortunately we don't have\n // a repro for the crashes, only detected via production metrics.\n return NoTimestamp;\n\n case SelectiveHydrationLane:\n case IdleHydrationLane:\n case IdleLane:\n case OffscreenLane:\n case DeferredLane:\n // Anything idle priority or lower should never expire.\n return NoTimestamp;\n\n default:\n {\n error('Should have found matching lanes. This is a bug in React.');\n }\n\n return NoTimestamp;\n }\n}\n\nfunction markStarvedLanesAsExpired(root, currentTime) {\n // TODO: This gets called every time we yield. We can optimize by storing\n // the earliest expiration time on the root. Then use that to quickly bail out\n // of this function.\n var pendingLanes = root.pendingLanes;\n var suspendedLanes = root.suspendedLanes;\n var pingedLanes = root.pingedLanes;\n var expirationTimes = root.expirationTimes; // Iterate through the pending lanes and check if we've reached their\n // expiration time. If so, we'll assume the update is being starved and mark\n // it as expired to force it to finish.\n // TODO: We should be able to replace this with upgradePendingLanesToSync\n //\n // We exclude retry lanes because those must always be time sliced, in order\n // to unwrap uncached promises.\n // TODO: Write a test for this\n\n var lanes = pendingLanes & ~RetryLanes;\n\n while (lanes > 0) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n var expirationTime = expirationTimes[index];\n\n if (expirationTime === NoTimestamp) {\n // Found a pending lane with no expiration time. If it's not suspended, or\n // if it's pinged, assume it's CPU-bound. Compute a new expiration time\n // using the current time.\n if ((lane & suspendedLanes) === NoLanes || (lane & pingedLanes) !== NoLanes) {\n // Assumes timestamps are monotonically increasing.\n expirationTimes[index] = computeExpirationTime(lane, currentTime);\n }\n } else if (expirationTime <= currentTime) {\n // This lane expired\n root.expiredLanes |= lane;\n }\n\n lanes &= ~lane;\n }\n} // This returns the highest priority pending lanes regardless of whether they\n// are suspended.\n\nfunction getHighestPriorityPendingLanes(root) {\n return getHighestPriorityLanes(root.pendingLanes);\n}\nfunction getLanesToRetrySynchronouslyOnError(root, originallyAttemptedLanes) {\n if (root.errorRecoveryDisabledLanes & originallyAttemptedLanes) {\n // The error recovery mechanism is disabled until these lanes are cleared.\n return NoLanes;\n }\n\n var everythingButOffscreen = root.pendingLanes & ~OffscreenLane;\n\n if (everythingButOffscreen !== NoLanes) {\n return everythingButOffscreen;\n }\n\n if (everythingButOffscreen & OffscreenLane) {\n return OffscreenLane;\n }\n\n return NoLanes;\n}\nfunction includesSyncLane(lanes) {\n return (lanes & (SyncLane | SyncHydrationLane)) !== NoLanes;\n}\nfunction includesNonIdleWork(lanes) {\n return (lanes & NonIdleLanes) !== NoLanes;\n}\nfunction includesOnlyRetries(lanes) {\n return (lanes & RetryLanes) === lanes;\n}\nfunction includesOnlyNonUrgentLanes(lanes) {\n // TODO: Should hydration lanes be included here? This function is only\n // used in `updateDeferredValueImpl`.\n var UrgentLanes = SyncLane | InputContinuousLane | DefaultLane;\n return (lanes & UrgentLanes) === NoLanes;\n}\nfunction includesOnlyTransitions(lanes) {\n return (lanes & TransitionLanes) === lanes;\n}\nfunction includesBlockingLane(root, lanes) {\n\n var SyncDefaultLanes = InputContinuousHydrationLane | InputContinuousLane | DefaultHydrationLane | DefaultLane;\n return (lanes & SyncDefaultLanes) !== NoLanes;\n}\nfunction includesExpiredLane(root, lanes) {\n // This is a separate check from includesBlockingLane because a lane can\n // expire after a render has already started.\n return (lanes & root.expiredLanes) !== NoLanes;\n}\nfunction isTransitionLane(lane) {\n return (lane & TransitionLanes) !== NoLanes;\n}\nfunction claimNextTransitionLane() {\n // Cycle through the lanes, assigning each new transition to the next lane.\n // In most cases, this means every transition gets its own lane, until we\n // run out of lanes and cycle back to the beginning.\n var lane = nextTransitionLane;\n nextTransitionLane <<= 1;\n\n if ((nextTransitionLane & TransitionLanes) === NoLanes) {\n nextTransitionLane = TransitionLane1;\n }\n\n return lane;\n}\nfunction claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n\n if ((nextRetryLane & RetryLanes) === NoLanes) {\n nextRetryLane = RetryLane1;\n }\n\n return lane;\n}\nfunction getHighestPriorityLane(lanes) {\n return lanes & -lanes;\n}\nfunction pickArbitraryLane(lanes) {\n // This wrapper function gets inlined. Only exists so to communicate that it\n // doesn't matter which bit is selected; you can pick any bit without\n // affecting the algorithms where its used. Here I'm using\n // getHighestPriorityLane because it requires the fewest operations.\n return getHighestPriorityLane(lanes);\n}\n\nfunction pickArbitraryLaneIndex(lanes) {\n return 31 - clz32(lanes);\n}\n\nfunction laneToIndex(lane) {\n return pickArbitraryLaneIndex(lane);\n}\n\nfunction includesSomeLane(a, b) {\n return (a & b) !== NoLanes;\n}\nfunction isSubsetOfLanes(set, subset) {\n return (set & subset) === subset;\n}\nfunction mergeLanes(a, b) {\n return a | b;\n}\nfunction removeLanes(set, subset) {\n return set & ~subset;\n}\nfunction intersectLanes(a, b) {\n return a & b;\n} // Seems redundant, but it changes the type from a single lane (used for\n// updates) to a group of lanes (used for flushing work).\n\nfunction laneToLanes(lane) {\n return lane;\n}\nfunction higherPriorityLane(a, b) {\n // This works because the bit ranges decrease in priority as you go left.\n return a !== NoLane && a < b ? a : b;\n}\nfunction createLaneMap(initial) {\n // Intentionally pushing one by one.\n // https://v8.dev/blog/elements-kinds#avoid-creating-holes\n var laneMap = [];\n\n for (var i = 0; i < TotalLanes; i++) {\n laneMap.push(initial);\n }\n\n return laneMap;\n}\nfunction markRootUpdated(root, updateLane) {\n root.pendingLanes |= updateLane; // If there are any suspended transitions, it's possible this new update\n // could unblock them. Clear the suspended lanes so that we can try rendering\n // them again.\n //\n // TODO: We really only need to unsuspend only lanes that are in the\n // `subtreeLanes` of the updated fiber, or the update lanes of the return\n // path. This would exclude suspended updates in an unrelated sibling tree,\n // since there's no way for this update to unblock it.\n //\n // We don't do this if the incoming update is idle, because we never process\n // idle updates until after all the regular updates have finished; there's no\n // way it could unblock a transition.\n\n if (updateLane !== IdleLane) {\n root.suspendedLanes = NoLanes;\n root.pingedLanes = NoLanes;\n }\n}\nfunction markRootSuspended$1(root, suspendedLanes, spawnedLane) {\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes; // The suspended lanes are no longer CPU-bound. Clear their expiration times.\n\n var expirationTimes = root.expirationTimes;\n var lanes = suspendedLanes;\n\n while (lanes > 0) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n expirationTimes[index] = NoTimestamp;\n lanes &= ~lane;\n }\n\n if (spawnedLane !== NoLane) {\n markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n }\n}\nfunction markRootPinged(root, pingedLanes) {\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n}\nfunction markRootFinished(root, remainingLanes, spawnedLane) {\n var noLongerPendingLanes = root.pendingLanes & ~remainingLanes;\n root.pendingLanes = remainingLanes; // Let's try everything again\n\n root.suspendedLanes = NoLanes;\n root.pingedLanes = NoLanes;\n root.expiredLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n root.errorRecoveryDisabledLanes &= remainingLanes;\n root.shellSuspendCounter = 0;\n var entanglements = root.entanglements;\n var expirationTimes = root.expirationTimes;\n var hiddenUpdates = root.hiddenUpdates; // Clear the lanes that no longer have pending work\n\n var lanes = noLongerPendingLanes;\n\n while (lanes > 0) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n entanglements[index] = NoLanes;\n expirationTimes[index] = NoTimestamp;\n var hiddenUpdatesForLane = hiddenUpdates[index];\n\n if (hiddenUpdatesForLane !== null) {\n hiddenUpdates[index] = null; // \"Hidden\" updates are updates that were made to a hidden component. They\n // have special logic associated with them because they may be entangled\n // with updates that occur outside that tree. But once the outer tree\n // commits, they behave like regular updates.\n\n for (var i = 0; i < hiddenUpdatesForLane.length; i++) {\n var update = hiddenUpdatesForLane[i];\n\n if (update !== null) {\n update.lane &= ~OffscreenLane;\n }\n }\n }\n\n lanes &= ~lane;\n }\n\n if (spawnedLane !== NoLane) {\n markSpawnedDeferredLane(root, spawnedLane, // This render finished successfully without suspending, so we don't need\n // to entangle the spawned task with the parent task.\n NoLanes);\n }\n}\n\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n // This render spawned a deferred task. Mark it as pending.\n root.pendingLanes |= spawnedLane;\n root.suspendedLanes &= ~spawnedLane; // Entangle the spawned lane with the DeferredLane bit so that we know it\n // was the result of another render. This lets us avoid a useDeferredValue\n // waterfall — only the first level will defer.\n\n var spawnedLaneIndex = laneToIndex(spawnedLane);\n root.entangledLanes |= spawnedLane;\n root.entanglements[spawnedLaneIndex] |= DeferredLane | // If the parent render task suspended, we must also entangle those lanes\n // with the spawned task, so that the deferred task includes all the same\n // updates that the parent task did. We can exclude any lane that is not\n // used for updates (e.g. Offscreen).\n entangledLanes & UpdateLanes;\n}\n\nfunction markRootEntangled(root, entangledLanes) {\n // In addition to entangling each of the given lanes with each other, we also\n // have to consider _transitive_ entanglements. For each lane that is already\n // entangled with *any* of the given lanes, that lane is now transitively\n // entangled with *all* the given lanes.\n //\n // Translated: If C is entangled with A, then entangling A with B also\n // entangles C with B.\n //\n // If this is hard to grasp, it might help to intentionally break this\n // function and look at the tests that fail in ReactTransition-test.js. Try\n // commenting out one of the conditions below.\n var rootEntangledLanes = root.entangledLanes |= entangledLanes;\n var entanglements = root.entanglements;\n var lanes = rootEntangledLanes;\n\n while (lanes) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n\n if ( // Is this one of the newly entangled lanes?\n lane & entangledLanes | // Is this lane transitively entangled with the newly entangled lanes?\n entanglements[index] & entangledLanes) {\n entanglements[index] |= entangledLanes;\n }\n\n lanes &= ~lane;\n }\n}\nfunction upgradePendingLaneToSync(root, lane) {\n // Since we're upgrading the priority of the given lane, there is now pending\n // sync work.\n root.pendingLanes |= SyncLane; // Entangle the sync lane with the lane we're upgrading. This means SyncLane\n // will not be allowed to finish without also finishing the given lane.\n\n root.entangledLanes |= SyncLane;\n root.entanglements[SyncLaneIndex] |= lane;\n}\nfunction upgradePendingLanesToSync(root, lanesToUpgrade) {\n // Same as upgradePendingLaneToSync but accepts multiple lanes, so it's a\n // bit slower.\n root.pendingLanes |= SyncLane;\n root.entangledLanes |= SyncLane;\n var lanes = lanesToUpgrade;\n\n while (lanes) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n root.entanglements[SyncLaneIndex] |= lane;\n lanes &= ~lane;\n }\n}\nfunction markHiddenUpdate(root, update, lane) {\n var index = laneToIndex(lane);\n var hiddenUpdates = root.hiddenUpdates;\n var hiddenUpdatesForLane = hiddenUpdates[index];\n\n if (hiddenUpdatesForLane === null) {\n hiddenUpdates[index] = [update];\n } else {\n hiddenUpdatesForLane.push(update);\n }\n\n update.lane = lane | OffscreenLane;\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = getHighestPriorityLane(renderLanes);\n var lane;\n\n if ((renderLane & SyncUpdateLanes) !== NoLane) {\n lane = SyncHydrationLane;\n } else {\n switch (renderLane) {\n case SyncLane:\n lane = SyncHydrationLane;\n break;\n\n case InputContinuousLane:\n lane = InputContinuousHydrationLane;\n break;\n\n case DefaultLane:\n lane = DefaultHydrationLane;\n break;\n\n case TransitionLane1:\n case TransitionLane2:\n case TransitionLane3:\n case TransitionLane4:\n case TransitionLane5:\n case TransitionLane6:\n case TransitionLane7:\n case TransitionLane8:\n case TransitionLane9:\n case TransitionLane10:\n case TransitionLane11:\n case TransitionLane12:\n case TransitionLane13:\n case TransitionLane14:\n case TransitionLane15:\n case RetryLane1:\n case RetryLane2:\n case RetryLane3:\n case RetryLane4:\n lane = TransitionHydrationLane;\n break;\n\n case IdleLane:\n lane = IdleHydrationLane;\n break;\n\n default:\n // Everything else is already either a hydration lane, or shouldn't\n // be retried at a hydration lane.\n lane = NoLane;\n break;\n }\n } // Check if the lane we chose is suspended. If so, that indicates that we\n // already attempted and failed to hydrate at that level. Also check if we're\n // already rendering that lane, which is rare but could happen.\n\n\n if ((lane & (root.suspendedLanes | renderLanes)) !== NoLane) {\n // Give up trying to hydrate and fall back to client render.\n return NoLane;\n }\n\n return lane;\n}\nfunction addFiberToLanesMap(root, fiber, lanes) {\n\n if (!isDevToolsPresent) {\n return;\n }\n\n var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap;\n\n while (lanes > 0) {\n var index = laneToIndex(lanes);\n var lane = 1 << index;\n var updaters = pendingUpdatersLaneMap[index];\n updaters.add(fiber);\n lanes &= ~lane;\n }\n}\nfunction movePendingFibersToMemoized(root, lanes) {\n\n if (!isDevToolsPresent) {\n return;\n }\n\n var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap;\n var memoizedUpdaters = root.memoizedUpdaters;\n\n while (lanes > 0) {\n var index = laneToIndex(lanes);\n var lane = 1 << index;\n var updaters = pendingUpdatersLaneMap[index];\n\n if (updaters.size > 0) {\n updaters.forEach(function (fiber) {\n var alternate = fiber.alternate;\n\n if (alternate === null || !memoizedUpdaters.has(alternate)) {\n memoizedUpdaters.add(fiber);\n }\n });\n updaters.clear();\n }\n\n lanes &= ~lane;\n }\n}\nfunction getTransitionsForLanes(root, lanes) {\n {\n return null;\n }\n}\n\nvar DiscreteEventPriority = SyncLane;\nvar ContinuousEventPriority = InputContinuousLane;\nvar DefaultEventPriority = DefaultLane;\nvar IdleEventPriority = IdleLane;\nvar currentUpdatePriority = NoLane;\nfunction getCurrentUpdatePriority() {\n return currentUpdatePriority;\n}\nfunction setCurrentUpdatePriority(newPriority) {\n currentUpdatePriority = newPriority;\n}\nfunction runWithPriority(priority, fn) {\n var previousPriority = currentUpdatePriority;\n\n try {\n currentUpdatePriority = priority;\n return fn();\n } finally {\n currentUpdatePriority = previousPriority;\n }\n}\nfunction higherEventPriority(a, b) {\n return a !== 0 && a < b ? a : b;\n}\nfunction lowerEventPriority(a, b) {\n return a === 0 || a > b ? a : b;\n}\nfunction isHigherEventPriority(a, b) {\n return a !== 0 && a < b;\n}\nfunction lanesToEventPriority(lanes) {\n var lane = getHighestPriorityLane(lanes);\n\n if (!isHigherEventPriority(DiscreteEventPriority, lane)) {\n return DiscreteEventPriority;\n }\n\n if (!isHigherEventPriority(ContinuousEventPriority, lane)) {\n return ContinuousEventPriority;\n }\n\n if (includesNonIdleWork(lane)) {\n return DefaultEventPriority;\n }\n\n return IdleEventPriority;\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n return type;\n }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\n\nfunction checkAttributeStringCoercion(value, attributeName) {\n {\n if (willCoercionThrow(value)) {\n error('The provided `%s` attribute is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', attributeName, typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\nfunction checkPropStringCoercion(value, propName) {\n {\n if (willCoercionThrow(value)) {\n error('The provided `%s` prop is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', propName, typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\nfunction checkCSSPropertyStringCoercion(value, propName) {\n {\n if (willCoercionThrow(value)) {\n error('The provided `%s` CSS property is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', propName, typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\nfunction checkHtmlStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided HTML markup uses a value of unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\nfunction checkFormFieldValueStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('Form field values (value, checked, defaultValue, or defaultChecked props)' + ' must be strings, not %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar FunctionComponent = 0;\nvar ClassComponent = 1;\nvar IndeterminateComponent = 2; // Before we know whether it is function or class\n\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\n\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\n\nvar HostComponent = 5;\nvar HostText = 6;\nvar Fragment = 7;\nvar Mode = 8;\nvar ContextConsumer = 9;\nvar ContextProvider = 10;\nvar ForwardRef = 11;\nvar Profiler = 12;\nvar SuspenseComponent = 13;\nvar MemoComponent = 14;\nvar SimpleMemoComponent = 15;\nvar LazyComponent = 16;\nvar IncompleteClassComponent = 17;\nvar DehydratedFragment = 18;\nvar SuspenseListComponent = 19;\nvar ScopeComponent = 21;\nvar OffscreenComponent = 22;\nvar LegacyHiddenComponent = 23;\nvar CacheComponent = 24;\nvar TracingMarkerComponent = 25;\nvar HostHoistable = 26;\nvar HostSingleton = 27;\n\nvar randomKey = Math.random().toString(36).slice(2);\nvar internalInstanceKey = '__reactFiber$' + randomKey;\nvar internalPropsKey = '__reactProps$' + randomKey;\nvar internalContainerInstanceKey = '__reactContainer$' + randomKey;\nvar internalEventHandlersKey = '__reactEvents$' + randomKey;\nvar internalEventHandlerListenersKey = '__reactListeners$' + randomKey;\nvar internalEventHandlesSetKey = '__reactHandles$' + randomKey;\nvar internalRootNodeResourcesKey = '__reactResources$' + randomKey;\nvar internalHoistableMarker = '__reactMarker$' + randomKey;\nfunction detachDeletedInstance(node) {\n // TODO: This function is only called on host components. I don't think all of\n // these fields are relevant.\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n}\nfunction precacheFiberNode(hostInst, node) {\n node[internalInstanceKey] = hostInst;\n}\nfunction markContainerAsRoot(hostRoot, node) {\n // $FlowFixMe[prop-missing]\n node[internalContainerInstanceKey] = hostRoot;\n}\nfunction unmarkContainerAsRoot(node) {\n // $FlowFixMe[prop-missing]\n node[internalContainerInstanceKey] = null;\n}\nfunction isContainerMarkedAsRoot(node) {\n // $FlowFixMe[prop-missing]\n return !!node[internalContainerInstanceKey];\n} // Given a DOM node, return the closest HostComponent or HostText fiber ancestor.\n// If the target node is part of a hydrated or not yet rendered subtree, then\n// this may also return a SuspenseComponent or HostRoot to indicate that.\n// Conceptually the HostRoot fiber is a child of the Container node. So if you\n// pass the Container node as the targetNode, you will not actually get the\n// HostRoot back. To get to the HostRoot, you need to pass a child of it.\n// The same thing applies to Suspense boundaries.\n\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n\n if (targetInst) {\n // Don't return HostRoot or SuspenseComponent here.\n return targetInst;\n } // If the direct event target isn't a React owned DOM node, we need to look\n // to see if one of its parents is a React owned DOM node.\n\n\n var parentNode = targetNode.parentNode;\n\n while (parentNode) {\n // We'll check if this is a container root that could include\n // React nodes in the future. We need to check this first because\n // if we're a child of a dehydrated container, we need to first\n // find that inner container before moving on to finding the parent\n // instance. Note that we don't check this field on the targetNode\n // itself because the fibers are conceptually between the container\n // node and the first child. It isn't surrounding the container node.\n // If it's not a container, we check if it's an instance.\n targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey];\n\n if (targetInst) {\n // Since this wasn't the direct target of the event, we might have\n // stepped past dehydrated DOM nodes to get here. However they could\n // also have been non-React nodes. We need to answer which one.\n // If we the instance doesn't have any children, then there can't be\n // a nested suspense boundary within it. So we can use this as a fast\n // bailout. Most of the time, when people add non-React children to\n // the tree, it is using a ref to a child-less DOM node.\n // Normally we'd only need to check one of the fibers because if it\n // has ever gone from having children to deleting them or vice versa\n // it would have deleted the dehydrated boundary nested inside already.\n // However, since the HostRoot starts out with an alternate it might\n // have one on the alternate so we need to check in case this was a\n // root.\n var alternate = targetInst.alternate;\n\n if (targetInst.child !== null || alternate !== null && alternate.child !== null) {\n // Next we need to figure out if the node that skipped past is\n // nested within a dehydrated boundary and if so, which one.\n var suspenseInstance = getParentSuspenseInstance(targetNode);\n\n while (suspenseInstance !== null) {\n // We found a suspense instance. That means that we haven't\n // hydrated it yet. Even though we leave the comments in the\n // DOM after hydrating, and there are boundaries in the DOM\n // that could already be hydrated, we wouldn't have found them\n // through this pass since if the target is hydrated it would\n // have had an internalInstanceKey on it.\n // Let's get the fiber associated with the SuspenseComponent\n // as the deepest instance.\n // $FlowFixMe[prop-missing]\n var targetSuspenseInst = suspenseInstance[internalInstanceKey];\n\n if (targetSuspenseInst) {\n return targetSuspenseInst;\n } // If we don't find a Fiber on the comment, it might be because\n // we haven't gotten to hydrate it yet. There might still be a\n // parent boundary that hasn't above this one so we need to find\n // the outer most that is known.\n\n\n suspenseInstance = getParentSuspenseInstance(suspenseInstance); // If we don't find one, then that should mean that the parent\n // host component also hasn't hydrated yet. We can return it\n // below since it will bail out on the isMounted check later.\n }\n }\n\n return targetInst;\n }\n\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n\n return null;\n}\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\n\nfunction getInstanceFromNode(node) {\n var inst = node[internalInstanceKey] || node[internalContainerInstanceKey];\n\n if (inst) {\n var tag = inst.tag;\n\n if (tag === HostComponent || tag === HostText || tag === SuspenseComponent || (tag === HostHoistable ) || tag === HostSingleton || tag === HostRoot) {\n return inst;\n } else {\n return null;\n }\n }\n\n return null;\n}\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\n\nfunction getNodeFromInstance(inst) {\n var tag = inst.tag;\n\n if (tag === HostComponent || (tag === HostHoistable ) || tag === HostSingleton || tag === HostText) {\n // In Fiber this, is just the state node right now. We assume it will be\n // a host component or host text.\n return inst.stateNode;\n } // Without this first invariant, passing a non-DOM-component triggers the next\n // invariant for a missing parent, which is super confusing.\n\n\n throw new Error('getNodeFromInstance: Invalid argument.');\n}\nfunction getFiberCurrentPropsFromNode(node) {\n return node[internalPropsKey] || null;\n}\nfunction updateFiberProps(node, props) {\n node[internalPropsKey] = props;\n}\nfunction getEventListenerSet(node) {\n var elementListenerSet = node[internalEventHandlersKey];\n\n if (elementListenerSet === undefined) {\n elementListenerSet = node[internalEventHandlersKey] = new Set();\n }\n\n return elementListenerSet;\n}\nfunction getResourcesFromRoot(root) {\n var resources = root[internalRootNodeResourcesKey];\n\n if (!resources) {\n resources = root[internalRootNodeResourcesKey] = {\n hoistableStyles: new Map(),\n hoistableScripts: new Map()\n };\n }\n\n return resources;\n}\nfunction isMarkedHoistable(node) {\n return !!node[internalHoistableMarker];\n}\nfunction markNodeAsHoistable(node) {\n node[internalHoistableMarker] = true;\n}\nfunction isOwnedInstance(node) {\n return !!(node[internalHoistableMarker] || node[internalInstanceKey]);\n}\n\nvar allNativeEvents = new Set();\n/**\n * Mapping from registration name to event name\n */\n\n\nvar registrationNameDependencies = {};\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in __DEV__.\n * @type {Object}\n */\n\nvar possibleRegistrationNames = {} ; // Trust the developer to only use possibleRegistrationNames in true\n\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + 'Capture', dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n {\n if (registrationNameDependencies[registrationName]) {\n error('EventRegistry: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName);\n }\n }\n\n registrationNameDependencies[registrationName] = dependencies;\n\n {\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n\n for (var i = 0; i < dependencies.length; i++) {\n allNativeEvents.add(dependencies[i]);\n }\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar hasReadOnlyValue = {\n button: true,\n checkbox: true,\n image: true,\n hidden: true,\n radio: true,\n reset: true,\n submit: true\n};\nfunction checkControlledValueProps(tagName, props) {\n {\n if (!(hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null)) {\n if (tagName === 'select') {\n error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, set `onChange`.');\n } else {\n error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.');\n }\n }\n\n if (!(props.onChange || props.readOnly || props.disabled || props.checked == null)) {\n error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n }\n }\n}\n\n/* eslint-disable max-len */\n\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n\n illegalAttributeNameCache[attributeName] = true;\n\n {\n error('Invalid attribute name: `%s`', attributeName);\n }\n\n return false;\n}\n\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\n\nfunction getValueForAttribute(node, name, expected) {\n {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n\n if (!node.hasAttribute(name)) {\n // shouldRemoveAttribute\n switch (typeof expected) {\n case 'function':\n case 'symbol':\n // eslint-disable-line\n return expected;\n\n case 'boolean':\n {\n var prefix = name.toLowerCase().slice(0, 5);\n\n if (prefix !== 'data-' && prefix !== 'aria-') {\n return expected;\n }\n }\n }\n\n return expected === undefined ? undefined : null;\n }\n\n var value = node.getAttribute(name);\n\n {\n checkAttributeStringCoercion(expected, name);\n }\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n}\nfunction getValueForAttributeOnCustomComponent(node, name, expected) {\n {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n\n if (!node.hasAttribute(name)) {\n // shouldRemoveAttribute\n switch (typeof expected) {\n case 'symbol':\n case 'object':\n // Symbols and objects are ignored when they're emitted so\n // it would be expected that they end up not having an attribute.\n return expected;\n\n }\n\n return expected === undefined ? undefined : null;\n }\n\n var value = node.getAttribute(name);\n\n {\n checkAttributeStringCoercion(expected, name);\n }\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n}\nfunction setValueForAttribute(node, name, value) {\n if (isAttributeNameSafe(name)) {\n // If the prop isn't in the special list, treat it as a simple attribute.\n // shouldRemoveAttribute\n if (value === null) {\n node.removeAttribute(name);\n return;\n }\n\n switch (typeof value) {\n case 'undefined':\n case 'function':\n case 'symbol':\n // eslint-disable-line\n node.removeAttribute(name);\n return;\n\n case 'boolean':\n {\n var prefix = name.toLowerCase().slice(0, 5);\n\n if (prefix !== 'data-' && prefix !== 'aria-') {\n node.removeAttribute(name);\n return;\n }\n }\n }\n\n {\n checkAttributeStringCoercion(value, name);\n }\n\n node.setAttribute(name, '' + value);\n }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n if (value === null) {\n node.removeAttribute(name);\n return;\n }\n\n switch (typeof value) {\n case 'undefined':\n case 'function':\n case 'symbol':\n case 'boolean':\n {\n node.removeAttribute(name);\n return;\n }\n }\n\n {\n checkAttributeStringCoercion(value, name);\n }\n\n node.setAttribute(name, '' + value);\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n if (value === null) {\n node.removeAttribute(name);\n return;\n }\n\n switch (typeof value) {\n case 'undefined':\n case 'function':\n case 'symbol':\n case 'boolean':\n {\n node.removeAttribute(name);\n return;\n }\n }\n\n {\n checkAttributeStringCoercion(value, name);\n }\n\n node.setAttributeNS(namespace, name, '' + value);\n}\n\nvar ReactCurrentDispatcher$2 = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap$1 = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap$1();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n * (1) throwing and catching an error in the function - this will be our\n * control error.\n * (2) calling the component which will eventually throw an error that we'll\n * catch - this will be our sample error.\n * (3) diffing the control and sample error stacks to find the stack frame\n * which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher$2.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher$2.current = null;\n disableLogs();\n }\n /**\n * Finding a common stack frame between sample and control errors can be\n * tricky given the different types and levels of stack trace truncation from\n * different JS VMs. So instead we'll attempt to control what that common\n * frame should be through this object method:\n * Having both the sample and control errors be in the function under the\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n * `displayName` properties of the function ensures that a stack\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n * it for both control and sample stacks.\n */\n\n\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n var control;\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe[prop-missing]\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n } // TODO(luna): This will currently only throw if the function component\n // tries to access React/ReactDOM/props. We should probably make this throw\n // in simple components too\n\n\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n // component, which we don't yet support. Attach a noop catch handler to\n // silence the error.\n // TODO: Implement component stacks for async client components?\n\n if (maybePromise && typeof maybePromise.catch === 'function') {\n maybePromise.catch(function () {});\n }\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n return [sample.stack, control.stack];\n }\n }\n\n return [null, null];\n }\n }; // $FlowFixMe[prop-missing]\n\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n if (namePropDescriptor && namePropDescriptor.configurable) {\n // V8 utilizes a function's `name` property when generating a stack trace.\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n // is set to `false`.\n // $FlowFixMe[cannot-write]\n 'name', {\n value: 'DetermineComponentFrameRoot'\n });\n }\n\n try {\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n\n if (sampleStack && controlStack) {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sampleStack.split('\\n');\n var controlLines = controlStack.split('\\n');\n var s = 0;\n var c = 0;\n\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n s++;\n }\n\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n c++;\n } // We couldn't find our intentionally injected common root frame, attempt\n // to find another common root frame by search from the bottom of the\n // control stack...\n\n\n if (s === sampleLines.length || c === controlLines.length) {\n s = sampleLines.length - 1;\n c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n if (true) {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher$2.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\n\nfunction describeClassComponentFrame(ctor, source, ownerFn) {\n {\n return describeNativeComponentFrame(ctor, true);\n }\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct$1(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct$1(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nfunction describeFiber(fiber) {\n\n switch (fiber.tag) {\n case HostHoistable:\n case HostSingleton:\n case HostComponent:\n return describeBuiltInComponentFrame(fiber.type);\n\n case LazyComponent:\n return describeBuiltInComponentFrame('Lazy');\n\n case SuspenseComponent:\n return describeBuiltInComponentFrame('Suspense');\n\n case SuspenseListComponent:\n return describeBuiltInComponentFrame('SuspenseList');\n\n case FunctionComponent:\n case IndeterminateComponent:\n case SimpleMemoComponent:\n return describeFunctionComponentFrame(fiber.type);\n\n case ForwardRef:\n return describeFunctionComponentFrame(fiber.type.render);\n\n case ClassComponent:\n return describeClassComponentFrame(fiber.type);\n\n default:\n return '';\n }\n}\n\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = '';\n var node = workInProgress;\n\n do {\n info += describeFiber(node); // $FlowFixMe[incompatible-type] we bail out when we get a null\n\n node = node.return;\n } while (node);\n\n return info;\n } catch (x) {\n return '\\nError generating stack: ' + x.message + '\\n' + x.stack;\n }\n}\n\nfunction getWrappedName$1(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName$1(type) {\n return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n if (typeof type === 'function') {\n if (type.$$typeof === REACT_CLIENT_REFERENCE) {\n // TODO: Create a convention for naming client references with debug info.\n return null;\n }\n\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n case REACT_CACHE_TYPE:\n {\n return 'Cache';\n }\n\n }\n\n if (typeof type === 'object') {\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName$1(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName$1(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName$1(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n }\n }\n\n return null;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n} // Keep in sync with shared/getComponentNameFromType\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nfunction getComponentNameFromFiber(fiber) {\n var tag = fiber.tag,\n type = fiber.type;\n\n switch (tag) {\n case CacheComponent:\n return 'Cache';\n\n case ContextConsumer:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case ContextProvider:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case DehydratedFragment:\n return 'DehydratedFragment';\n\n case ForwardRef:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case Fragment:\n return 'Fragment';\n\n case HostHoistable:\n case HostSingleton:\n case HostComponent:\n // Host component type is the display name (e.g. \"div\", \"View\")\n return type;\n\n case HostPortal:\n return 'Portal';\n\n case HostRoot:\n return 'Root';\n\n case HostText:\n return 'Text';\n\n case LazyComponent:\n // Name comes from the type in this case; we don't have a tag.\n return getComponentNameFromType(type);\n\n case Mode:\n if (type === REACT_STRICT_MODE_TYPE) {\n // Don't be less specific than shared/getComponentNameFromType\n return 'StrictMode';\n }\n\n return 'Mode';\n\n case OffscreenComponent:\n return 'Offscreen';\n\n case Profiler:\n return 'Profiler';\n\n case ScopeComponent:\n return 'Scope';\n\n case SuspenseComponent:\n return 'Suspense';\n\n case SuspenseListComponent:\n return 'SuspenseList';\n\n case TracingMarkerComponent:\n return 'TracingMarker';\n // The display name for this tags come from the user-provided type:\n\n case ClassComponent:\n case FunctionComponent:\n case IncompleteClassComponent:\n case IndeterminateComponent:\n case MemoComponent:\n case SimpleMemoComponent:\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n break;\n\n }\n\n return null;\n}\n\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\nvar current = null;\nvar isRendering = false;\nfunction getCurrentFiberOwnerNameInDevOrNull() {\n {\n if (current === null) {\n return null;\n }\n\n var owner = current._debugOwner;\n\n if (owner !== null && typeof owner !== 'undefined') {\n return getComponentNameFromFiber(owner);\n }\n }\n\n return null;\n}\n\nfunction getCurrentFiberStackInDev() {\n {\n if (current === null) {\n return '';\n } // Safe because if current fiber exists, we are reconciling,\n // and it is guaranteed to be the work-in-progress version.\n\n\n return getStackByFiberInDevAndProd(current);\n }\n}\n\nfunction resetCurrentFiber() {\n {\n ReactDebugCurrentFrame$1.getCurrentStack = null;\n current = null;\n isRendering = false;\n }\n}\nfunction setCurrentFiber(fiber) {\n {\n ReactDebugCurrentFrame$1.getCurrentStack = fiber === null ? null : getCurrentFiberStackInDev;\n current = fiber;\n isRendering = false;\n }\n}\nfunction getCurrentFiber() {\n {\n return current;\n }\n}\nfunction setIsRendering(rendering) {\n {\n isRendering = rendering;\n }\n}\n\n// around this limitation, we use an opaque type that can only be obtained by\n// passing the value through getToStringValue first.\n\nfunction toString(value) {\n // The coercion safety check is performed in getToStringValue().\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n case 'string':\n case 'undefined':\n return value;\n\n case 'object':\n {\n checkFormFieldValueStringCoercion(value);\n }\n\n return value;\n\n default:\n // function, symbol are assigned as empty strings\n return '';\n }\n}\n\nfunction isCheckable(elem) {\n var type = elem.type;\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n var value = '';\n\n if (!node) {\n return value;\n }\n\n if (isCheckable(node)) {\n value = node.checked ? 'true' : 'false';\n } else {\n value = node.value;\n }\n\n return value;\n}\n\nfunction trackValueOnNode(node) {\n var valueField = isCheckable(node) ? 'checked' : 'value';\n var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n\n {\n checkFormFieldValueStringCoercion(node[valueField]);\n }\n\n var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail\n // and don't track value will cause over reporting of changes,\n // but it's better then a hard failure\n // (needed for certain tests that spyOn input values and Safari)\n\n if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n return;\n }\n\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: true,\n // $FlowFixMe[missing-this-annot]\n get: function () {\n return get.call(this);\n },\n // $FlowFixMe[missing-local-annot]\n // $FlowFixMe[missing-this-annot]\n set: function (value) {\n {\n checkFormFieldValueStringCoercion(value);\n }\n\n currentValue = '' + value;\n set.call(this, value);\n }\n }); // We could've passed this the first time\n // but it triggers a bug in IE11 and Edge 14/15.\n // Calling defineProperty() again should be equivalent.\n // https://github.com/facebook/react/issues/11768\n\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n var tracker = {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n {\n checkFormFieldValueStringCoercion(value);\n }\n\n currentValue = '' + value;\n },\n stopTracking: function () {\n detachTracker(node);\n delete node[valueField];\n }\n };\n return tracker;\n}\n\nfunction track(node) {\n if (getTracker(node)) {\n return;\n }\n\n node._valueTracker = trackValueOnNode(node);\n}\nfunction updateValueIfChanged(node) {\n if (!node) {\n return false;\n }\n\n var tracker = getTracker(node); // if there is no tracker at this point it's unlikely\n // that trying again will succeed\n\n if (!tracker) {\n return true;\n }\n\n var lastValue = tracker.getValue();\n var nextValue = getValueFromNode(node);\n\n if (nextValue !== lastValue) {\n tracker.setValue(nextValue);\n return true;\n }\n\n return false;\n}\n\nfunction getActiveElement(doc) {\n doc = doc || (typeof document !== 'undefined' ? document : undefined);\n\n if (typeof doc === 'undefined') {\n return null;\n }\n\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\n\n// When passing user input into querySelector(All) the embedded string must not alter\n// the semantics of the query. This escape function is safe to use when we know the\n// provided value is going to be wrapped in double quotes as part of an attribute selector\n// Do not use it anywhere else\n// we escape double quotes and backslashes\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\\\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n return value.replace(escapeSelectorAttributeValueInsideDoubleQuotesRegex, function (ch) {\n return '\\\\' + ch.charCodeAt(0).toString(16) + ' ';\n });\n}\n\nvar didWarnValueDefaultValue$1 = false;\nvar didWarnCheckedDefaultChecked = false;\n/**\n * Implements an <input> host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\nfunction validateInputProps(element, props) {\n {\n // Normally we check for undefined and null the same, but explicitly specifying both\n // properties, at all is probably worth warning for. We could move this either direction\n // and just make it ok to pass null or just check hasOwnProperty.\n if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnCheckedDefaultChecked = true;\n }\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {\n error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnValueDefaultValue$1 = true;\n }\n }\n}\nfunction updateInput(element, value, defaultValue, lastDefaultValue, checked, defaultChecked, type, name) {\n var node = element; // Temporarily disconnect the input from any radio buttons.\n // Changing the type or name as the same time as changing the checked value\n // needs to be atomically applied. We can only ensure that by disconnecting\n // the name while do the mutations and then reapply the name after that's done.\n\n node.name = '';\n\n if (type != null && typeof type !== 'function' && typeof type !== 'symbol' && typeof type !== 'boolean') {\n {\n checkAttributeStringCoercion(type, 'type');\n }\n\n node.type = type;\n } else {\n node.removeAttribute('type');\n }\n\n if (value != null) {\n if (type === 'number') {\n if ( // $FlowFixMe[incompatible-type]\n value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.\n // eslint-disable-next-line\n node.value != value) {\n node.value = toString(getToStringValue(value));\n }\n } else if (node.value !== toString(getToStringValue(value))) {\n node.value = toString(getToStringValue(value));\n }\n } else if (type === 'submit' || type === 'reset') {\n // Submit/reset inputs need the attribute removed completely to avoid\n // blank-text buttons.\n node.removeAttribute('value');\n }\n\n {\n // When syncing the value attribute, the value comes from a cascade of\n // properties:\n // 1. The value React property\n // 2. The defaultValue React property\n // 3. Otherwise there should be no change\n if (value != null) {\n setDefaultValue(node, type, getToStringValue(value));\n } else if (defaultValue != null) {\n setDefaultValue(node, type, getToStringValue(defaultValue));\n } else if (lastDefaultValue != null) {\n node.removeAttribute('value');\n }\n }\n\n {\n // When syncing the checked attribute, it only changes when it needs\n // to be removed, such as transitioning from a checkbox into a text input\n if (checked == null && defaultChecked != null) {\n node.defaultChecked = !!defaultChecked;\n }\n }\n\n if (checked != null) {\n // Important to set this even if it's not a change in order to update input\n // value tracking with radio buttons\n // TODO: Should really update input value tracking for the whole radio\n // button group in an effect or something (similar to #27024)\n node.checked = checked && typeof checked !== 'function' && typeof checked !== 'symbol';\n }\n\n if (name != null && typeof name !== 'function' && typeof name !== 'symbol' && typeof name !== 'boolean') {\n {\n checkAttributeStringCoercion(name, 'name');\n }\n\n node.name = toString(getToStringValue(name));\n } else {\n node.removeAttribute('name');\n }\n}\nfunction initInput(element, value, defaultValue, checked, defaultChecked, type, name, isHydrating) {\n var node = element;\n\n if (type != null && typeof type !== 'function' && typeof type !== 'symbol' && typeof type !== 'boolean') {\n {\n checkAttributeStringCoercion(type, 'type');\n }\n\n node.type = type;\n }\n\n if (value != null || defaultValue != null) {\n var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the\n // default value provided by the browser. See: #12872\n\n if (isButton && (value === undefined || value === null)) {\n return;\n }\n\n var defaultValueStr = defaultValue != null ? toString(getToStringValue(defaultValue)) : '';\n var initialValue = value != null ? toString(getToStringValue(value)) : defaultValueStr; // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (!isHydrating) {\n {\n // When syncing the value attribute, the value property should use\n // the wrapperState._initialValue property. This uses:\n //\n // 1. The value React property when present\n // 2. The defaultValue React property when present\n // 3. An empty string\n if (initialValue !== node.value) {\n node.value = initialValue;\n }\n }\n }\n\n {\n // Otherwise, the value attribute is synchronized to the property,\n // so we assign defaultValue to the same thing as the value property\n // assignment step above.\n node.defaultValue = initialValue;\n }\n } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n // this is needed to work around a chrome bug where setting defaultChecked\n // will sometimes influence the value of checked (even after detachment).\n // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n // We need to temporarily unset name to avoid disrupting radio button groups.\n\n\n var checkedOrDefault = checked != null ? checked : defaultChecked; // TODO: This 'function' or 'symbol' check isn't replicated in other places\n // so this semantic is inconsistent.\n\n var initialChecked = typeof checkedOrDefault !== 'function' && typeof checkedOrDefault !== 'symbol' && !!checkedOrDefault;\n\n if (isHydrating) {\n // Detach .checked from .defaultChecked but leave user input alone\n node.checked = node.checked;\n } else {\n node.checked = !!initialChecked;\n }\n\n {\n // When syncing the checked attribute, both the checked property and\n // attribute are assigned at the same time using defaultChecked. This uses:\n //\n // 1. The checked React property when present\n // 2. The defaultChecked React property when present\n // 3. Otherwise, false\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !!initialChecked;\n } // Name needs to be set at the end so that it applies atomically to connected radio buttons.\n\n\n if (name != null && typeof name !== 'function' && typeof name !== 'symbol' && typeof name !== 'boolean') {\n {\n checkAttributeStringCoercion(name, 'name');\n }\n\n node.name = name;\n }\n}\nfunction restoreControlledInputState(element, props) {\n var rootNode = element;\n updateInput(rootNode, props.value, props.defaultValue, props.defaultValue, props.checked, props.defaultChecked, props.type, props.name);\n var name = props.name;\n\n if (props.type === 'radio' && name != null) {\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n } // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form. It might not even be in the\n // document. Let's just use the local `querySelectorAll` to ensure we don't\n // miss anything.\n\n\n {\n checkAttributeStringCoercion(name, 'name');\n }\n\n var group = queryRoot.querySelectorAll('input[name=\"' + escapeSelectorAttributeValueInsideDoubleQuotes('' + name) + '\"][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n } // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React radio buttons with non-React ones.\n\n\n var otherProps = getFiberCurrentPropsFromNode(otherNode);\n\n if (!otherProps) {\n throw new Error('ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.');\n } // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n\n\n updateInput(otherNode, otherProps.value, otherProps.defaultValue, otherProps.defaultValue, otherProps.checked, otherProps.defaultChecked, otherProps.type, otherProps.name);\n } // If any updateInput() call set .checked to true, an input in this group\n // (often, `rootNode` itself) may have become unchecked\n\n\n for (var _i = 0; _i < group.length; _i++) {\n var _otherNode = group[_i];\n\n if (_otherNode.form !== rootNode.form) {\n continue;\n }\n\n updateValueIfChanged(_otherNode);\n }\n }\n} // In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value <x> is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\n\nfunction setDefaultValue(node, type, value) {\n if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n type !== 'number' || getActiveElement(node.ownerDocument) !== node) {\n if (node.defaultValue !== toString(value)) {\n node.defaultValue = toString(value);\n }\n }\n}\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\nvar didWarnInvalidInnerHTML = false;\n/**\n * Implements an <option> host component that warns when `selected` is set.\n */\n\nfunction validateOptionProps(element, props) {\n {\n // If a value is not provided, then the children must be simple.\n if (props.value == null) {\n if (typeof props.children === 'object' && props.children !== null) {\n React.Children.forEach(props.children, function (child) {\n if (child == null) {\n return;\n }\n\n if (typeof child === 'string' || typeof child === 'number') {\n return;\n }\n\n if (!didWarnInvalidChild) {\n didWarnInvalidChild = true;\n\n error('Cannot infer the option value of complex children. ' + 'Pass a `value` prop or use a plain string as children to <option>.');\n }\n });\n } else if (props.dangerouslySetInnerHTML != null) {\n if (!didWarnInvalidInnerHTML) {\n didWarnInvalidInnerHTML = true;\n\n error('Pass a `value` prop if you set dangerouslyInnerHTML so React knows ' + 'which value should be selected.');\n }\n }\n } // TODO: Remove support for `selected` in <option>.\n\n\n if (props.selected != null && !didWarnSelectedSetOnOption) {\n error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');\n\n didWarnSelectedSetOnOption = true;\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\nvar didWarnValueDefaultValue;\n\n{\n didWarnValueDefaultValue = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n if (ownerName) {\n return '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n\n return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n/**\n * Validation function for `value` and `defaultValue`.\n */\n\nfunction checkSelectPropTypes(props) {\n {\n for (var i = 0; i < valuePropNames.length; i++) {\n var propName = valuePropNames[i];\n\n if (props[propName] == null) {\n continue;\n }\n\n var propNameIsArray = isArray(props[propName]);\n\n if (props.multiple && !propNameIsArray) {\n error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());\n } else if (!props.multiple && propNameIsArray) {\n error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());\n }\n }\n }\n}\n\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n var options = node.options;\n\n if (multiple) {\n var selectedValues = propValue;\n var selectedValue = {};\n\n for (var i = 0; i < selectedValues.length; i++) {\n // Prefix to avoid chaos with special keys.\n selectedValue['$' + selectedValues[i]] = true;\n }\n\n for (var _i = 0; _i < options.length; _i++) {\n var selected = selectedValue.hasOwnProperty('$' + options[_i].value);\n\n if (options[_i].selected !== selected) {\n options[_i].selected = selected;\n }\n\n if (selected && setDefaultSelected) {\n options[_i].defaultSelected = true;\n }\n }\n } else {\n // Do not set `select.value` as exact behavior isn't consistent across all\n // browsers for all cases.\n var _selectedValue = toString(getToStringValue(propValue));\n\n var defaultSelected = null;\n\n for (var _i2 = 0; _i2 < options.length; _i2++) {\n if (options[_i2].value === _selectedValue) {\n options[_i2].selected = true;\n\n if (setDefaultSelected) {\n options[_i2].defaultSelected = true;\n }\n\n return;\n }\n\n if (defaultSelected === null && !options[_i2].disabled) {\n defaultSelected = options[_i2];\n }\n }\n\n if (defaultSelected !== null) {\n defaultSelected.selected = true;\n }\n }\n}\n/**\n * Implements a <select> host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\n\n\nfunction validateSelectProps(element, props) {\n {\n checkSelectPropTypes(props);\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components');\n\n didWarnValueDefaultValue = true;\n }\n }\n}\nfunction initSelect(element, value, defaultValue, multiple) {\n var node = element;\n node.multiple = !!multiple;\n\n if (value != null) {\n updateOptions(node, !!multiple, value, false);\n } else if (defaultValue != null) {\n updateOptions(node, !!multiple, defaultValue, true);\n }\n}\nfunction updateSelect(element, value, defaultValue, multiple, wasMultiple) {\n var node = element;\n\n if (value != null) {\n updateOptions(node, !!multiple, value, false);\n } else if (!!wasMultiple !== !!multiple) {\n // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n if (defaultValue != null) {\n updateOptions(node, !!multiple, defaultValue, true);\n } else {\n // Revert the select back to its default unselected state.\n updateOptions(node, !!multiple, multiple ? [] : '', false);\n }\n }\n}\nfunction restoreControlledSelectState(element, props) {\n var node = element;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n }\n}\n\nvar didWarnValDefaultVal = false;\n/**\n * Implements a <textarea> host component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\n\nfunction validateTextareaProps(element, props) {\n {\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\n error('%s contains a textarea with both value and defaultValue props. ' + 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component');\n\n didWarnValDefaultVal = true;\n }\n\n if (props.children != null && props.value == null) {\n error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');\n }\n }\n}\nfunction updateTextarea(element, value, defaultValue) {\n var node = element;\n\n if (value != null) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n var newValue = toString(getToStringValue(value)); // To avoid side effects (such as losing text selection), only set value if changed\n\n if (newValue !== node.value) {\n node.value = newValue;\n } // TOOO: This should respect disableInputAttributeSyncing flag.\n\n\n if (defaultValue == null) {\n if (node.defaultValue !== newValue) {\n node.defaultValue = newValue;\n }\n\n return;\n }\n }\n\n if (defaultValue != null) {\n node.defaultValue = toString(getToStringValue(defaultValue));\n } else {\n node.defaultValue = '';\n }\n}\nfunction initTextarea(element, value, defaultValue, children) {\n var node = element;\n var initialValue = value; // Only bother fetching default value if we're going to use it\n\n if (initialValue == null) {\n if (children != null) {\n {\n if (defaultValue != null) {\n throw new Error('If you supply `defaultValue` on a <textarea>, do not pass children.');\n }\n\n if (isArray(children)) {\n if (children.length > 1) {\n throw new Error('<textarea> can only have at most one child.');\n }\n\n children = children[0];\n }\n\n defaultValue = children;\n }\n }\n\n if (defaultValue == null) {\n defaultValue = '';\n }\n\n initialValue = defaultValue;\n }\n\n var stringValue = getToStringValue(initialValue);\n node.defaultValue = stringValue; // This will be toString:ed.\n // This is in postMount because we need access to the DOM node, which is not\n // available until after the component has mounted.\n\n var textContent = node.textContent; // Only set node.value if textContent is equal to the expected\n // initial value. In IE10/IE11 there is a bug where the placeholder attribute\n // will populate textContent as well.\n // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/\n\n if (textContent === stringValue) {\n if (textContent !== '' && textContent !== null) {\n node.value = textContent;\n }\n }\n}\nfunction restoreControlledTextareaState(element, props) {\n // DOM component is still mounted; update\n updateTextarea(element, props.value, props.defaultValue);\n}\n\n// This validation code was written based on the HTML5 parsing spec:\n// https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n//\n// Note: this does not catch all invalid nesting, nor does it try to (as it's\n// not clear what practical benefit doing so provides); instead, we warn only\n// for cases where the parser will give a parse tree differing from what React\n// intended. For example, <b><div></div></b> is invalid but we don't warn\n// because it still parses correctly; we do warn for other cases like nested\n// <p> tags where the beginning of the second element implicitly closes the\n// first, causing a confusing mess.\n// https://html.spec.whatwg.org/multipage/syntax.html#special\nvar specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n\nvar inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n// TODO: Distinguish by namespace here -- for <title>, including it here\n// errs on the side of fewer warnings\n'foreignObject', 'desc', 'title']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n\nvar buttonScopeTags = inScopeTags.concat(['button']) ; // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n\nvar impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\nvar emptyAncestorInfoDev = {\n current: null,\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null,\n containerTagInScope: null\n};\n\nfunction updatedAncestorInfoDev(oldInfo, tag) {\n {\n var ancestorInfo = assign({}, oldInfo || emptyAncestorInfoDev);\n\n var info = {\n tag: tag\n };\n\n if (inScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.aTagInScope = null;\n ancestorInfo.buttonTagInScope = null;\n ancestorInfo.nobrTagInScope = null;\n }\n\n if (buttonScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.pTagInButtonScope = null;\n } // See rules for 'li', 'dd', 'dt' start tags in\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n ancestorInfo.listItemTagAutoclosing = null;\n ancestorInfo.dlItemTagAutoclosing = null;\n }\n\n ancestorInfo.current = info;\n\n if (tag === 'form') {\n ancestorInfo.formTag = info;\n }\n\n if (tag === 'a') {\n ancestorInfo.aTagInScope = info;\n }\n\n if (tag === 'button') {\n ancestorInfo.buttonTagInScope = info;\n }\n\n if (tag === 'nobr') {\n ancestorInfo.nobrTagInScope = info;\n }\n\n if (tag === 'p') {\n ancestorInfo.pTagInButtonScope = info;\n }\n\n if (tag === 'li') {\n ancestorInfo.listItemTagAutoclosing = info;\n }\n\n if (tag === 'dd' || tag === 'dt') {\n ancestorInfo.dlItemTagAutoclosing = info;\n }\n\n if (tag === '#document' || tag === 'html') {\n ancestorInfo.containerTagInScope = null;\n } else if (!ancestorInfo.containerTagInScope) {\n ancestorInfo.containerTagInScope = info;\n }\n\n return ancestorInfo;\n }\n}\n/**\n * Returns whether\n */\n\n\nfunction isTagValidWithParent(tag, parentTag) {\n // First, let's check if we're in an unusual parsing mode...\n switch (parentTag) {\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n case 'select':\n return tag === 'hr' || tag === 'option' || tag === 'optgroup' || tag === '#text';\n\n case 'optgroup':\n return tag === 'option' || tag === '#text';\n // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n // but\n\n case 'option':\n return tag === '#text';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n // No special behavior since these rules fall back to \"in body\" mode for\n // all except special table nodes which cause bad parsing behavior anyway.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n\n case 'tr':\n return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n\n case 'tbody':\n case 'thead':\n case 'tfoot':\n return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n\n case 'colgroup':\n return tag === 'col' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n\n case 'table':\n return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n\n case 'head':\n return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n\n case 'html':\n return tag === 'head' || tag === 'body' || tag === 'frameset';\n\n case 'frameset':\n return tag === 'frame';\n\n case '#document':\n return tag === 'html';\n } // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n // where the parsing rules cause implicit opens or closes to be added.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n switch (tag) {\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n case 'rp':\n case 'rt':\n return impliedEndTags.indexOf(parentTag) === -1;\n\n case 'body':\n case 'caption':\n case 'col':\n case 'colgroup':\n case 'frameset':\n case 'frame':\n case 'head':\n case 'html':\n case 'tbody':\n case 'td':\n case 'tfoot':\n case 'th':\n case 'thead':\n case 'tr':\n // These tags are only valid with a few parents that have special child\n // parsing rules -- if we're down here, then none of those matched and\n // so we allow it only if we don't know what the parent is, as all other\n // cases are invalid.\n return parentTag == null;\n }\n\n return true;\n}\n/**\n * Returns whether\n */\n\n\nfunction findInvalidAncestorForTag(tag, ancestorInfo) {\n switch (tag) {\n case 'address':\n case 'article':\n case 'aside':\n case 'blockquote':\n case 'center':\n case 'details':\n case 'dialog':\n case 'dir':\n case 'div':\n case 'dl':\n case 'fieldset':\n case 'figcaption':\n case 'figure':\n case 'footer':\n case 'header':\n case 'hgroup':\n case 'main':\n case 'menu':\n case 'nav':\n case 'ol':\n case 'p':\n case 'section':\n case 'summary':\n case 'ul':\n case 'pre':\n case 'listing':\n case 'table':\n case 'hr':\n case 'xmp':\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return ancestorInfo.pTagInButtonScope;\n\n case 'form':\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n case 'li':\n return ancestorInfo.listItemTagAutoclosing;\n\n case 'dd':\n case 'dt':\n return ancestorInfo.dlItemTagAutoclosing;\n\n case 'button':\n return ancestorInfo.buttonTagInScope;\n\n case 'a':\n // Spec says something about storing a list of markers, but it sounds\n // equivalent to this check.\n return ancestorInfo.aTagInScope;\n\n case 'nobr':\n return ancestorInfo.nobrTagInScope;\n }\n\n return null;\n}\n\nvar didWarn$1 = {};\n\nfunction validateDOMNesting(childTag, ancestorInfo) {\n {\n ancestorInfo = ancestorInfo || emptyAncestorInfoDev;\n var parentInfo = ancestorInfo.current;\n var parentTag = parentInfo && parentInfo.tag;\n var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n var invalidParentOrAncestor = invalidParent || invalidAncestor;\n\n if (!invalidParentOrAncestor) {\n return;\n }\n\n var ancestorTag = invalidParentOrAncestor.tag;\n var warnKey = // eslint-disable-next-line react-internal/safe-string-coercion\n String(!!invalidParent) + '|' + childTag + '|' + ancestorTag;\n\n if (didWarn$1[warnKey]) {\n return;\n }\n\n didWarn$1[warnKey] = true;\n var tagDisplayName = '<' + childTag + '>';\n\n if (invalidParent) {\n var info = '';\n\n if (ancestorTag === 'table' && childTag === 'tr') {\n info += ' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by ' + 'the browser.';\n }\n\n error('validateDOMNesting(...): %s cannot appear as a child of <%s>.%s', tagDisplayName, ancestorTag, info);\n } else {\n error('validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.', tagDisplayName, ancestorTag);\n }\n }\n}\n\nfunction validateTextNesting(childText, parentTag) {\n {\n if (isTagValidWithParent('#text', parentTag)) {\n return;\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var warnKey = '#text|' + parentTag;\n\n if (didWarn$1[warnKey]) {\n return;\n }\n\n didWarn$1[warnKey] = true;\n\n if (/\\S/.test(childText)) {\n error('validateDOMNesting(...): Text nodes cannot appear as a child of <%s>.', parentTag);\n } else {\n error('validateDOMNesting(...): Whitespace text nodes cannot appear as a child of <%s>. ' + \"Make sure you don't have any extra whitespace between tags on \" + 'each line of your source code.', parentTag);\n }\n }\n}\n\nvar MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n\nvar reusableSVGContainer;\n\nfunction setInnerHTMLImpl(node, html) {\n if (node.namespaceURI === SVG_NAMESPACE) {\n\n if (!('innerHTML' in node)) {\n // IE does not have innerHTML for SVG nodes, so instead we inject the\n // new markup in a temp node and then move the child nodes across into\n // the target node\n reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n reusableSVGContainer.innerHTML = '<svg>' + html.valueOf().toString() + '</svg>';\n var svgNode = reusableSVGContainer.firstChild;\n\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n } // $FlowFixMe[incompatible-use]\n // $FlowFixMe[incompatible-type]\n\n\n while (svgNode.firstChild) {\n node.appendChild(svgNode.firstChild);\n }\n\n return;\n }\n }\n\n node.innerHTML = html;\n}\n\nvar setInnerHTML = setInnerHTMLImpl; // $FlowFixMe[cannot-resolve-name]\n\nif (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n /**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\n setInnerHTML = function (node, html) {\n // $FlowFixMe[cannot-resolve-name]\n return MSApp.execUnsafeLocalFunction(function () {\n return setInnerHTMLImpl(node, html);\n });\n };\n}\n\nvar setInnerHTML$1 = setInnerHTML;\n\n/**\n * HTML nodeType values that represent the type of the node\n */\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\nvar DOCUMENT_NODE = 9;\nvar DOCUMENT_TYPE_NODE = 10;\nvar DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Set the textContent property of a node. For text updates, it's faster\n * to set the `nodeValue` of the Text node directly instead of using\n * `.textContent` which will remove the existing node and create a new one.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\n\nfunction setTextContent(node, text) {\n if (text) {\n var firstChild = node.firstChild;\n\n if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) {\n firstChild.nodeValue = text;\n return;\n }\n }\n\n node.textContent = text;\n}\n\n// List derived from Gecko source code:\n// https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js\nvar shorthandToLonghand = {\n animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'],\n background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'],\n backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],\n border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'],\n borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'],\n borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'],\n borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'],\n borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'],\n borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'],\n borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'],\n borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'],\n borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'],\n borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'],\n borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'],\n borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'],\n columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'],\n columns: ['columnCount', 'columnWidth'],\n flex: ['flexBasis', 'flexGrow', 'flexShrink'],\n flexFlow: ['flexDirection', 'flexWrap'],\n font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'],\n fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'],\n gap: ['columnGap', 'rowGap'],\n grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'],\n gridColumn: ['gridColumnEnd', 'gridColumnStart'],\n gridColumnGap: ['columnGap'],\n gridGap: ['columnGap', 'rowGap'],\n gridRow: ['gridRowEnd', 'gridRowStart'],\n gridRowGap: ['rowGap'],\n gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'],\n margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'],\n marker: ['markerEnd', 'markerMid', 'markerStart'],\n mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'],\n maskPosition: ['maskPositionX', 'maskPositionY'],\n outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],\n overflow: ['overflowX', 'overflowY'],\n padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'],\n placeContent: ['alignContent', 'justifyContent'],\n placeItems: ['alignItems', 'justifyItems'],\n placeSelf: ['alignSelf', 'justifySelf'],\n textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'],\n textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'],\n transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'],\n wordWrap: ['overflowWrap']\n};\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern$1 = /^ms-/;\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\n\nfunction hyphenateStyleName(name) {\n return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern$1, '-ms-');\n}\n\n// 'msTransform' is correct, but the other prefixes should be capitalized\nvar badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\nvar msPattern = /^-ms-/;\nvar hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon\n\nvar badStyleValueWithSemicolonPattern = /;\\s*$/;\nvar warnedStyleNames = {};\nvar warnedStyleValues = {};\nvar warnedForNaNValue = false;\nvar warnedForInfinityValue = false;\n\nfunction camelize(string) {\n return string.replace(hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n}\n\nfunction warnHyphenatedStyleName(name) {\n {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n\n error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests\n // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n // is converted to lowercase `ms`.\n camelize(name.replace(msPattern, 'ms-')));\n }\n}\n\nfunction warnBadVendoredStyleName(name) {\n {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n\n error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));\n }\n}\n\nfunction warnStyleValueWithSemicolon(name, value) {\n {\n if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n return;\n }\n\n warnedStyleValues[value] = true;\n\n error(\"Style property values shouldn't contain a semicolon. \" + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));\n }\n}\n\nfunction warnStyleValueIsNaN(name, value) {\n {\n if (warnedForNaNValue) {\n return;\n }\n\n warnedForNaNValue = true;\n\n error('`NaN` is an invalid value for the `%s` css style property.', name);\n }\n}\n\nfunction warnStyleValueIsInfinity(name, value) {\n {\n if (warnedForInfinityValue) {\n return;\n }\n\n warnedForInfinityValue = true;\n\n error('`Infinity` is an invalid value for the `%s` css style property.', name);\n }\n}\n\nfunction warnValidStyle(name, value) {\n {\n if (name.indexOf('-') > -1) {\n warnHyphenatedStyleName(name);\n } else if (badVendoredStyleNamePattern.test(name)) {\n warnBadVendoredStyleName(name);\n } else if (badStyleValueWithSemicolonPattern.test(value)) {\n warnStyleValueWithSemicolon(name, value);\n }\n\n if (typeof value === 'number') {\n if (isNaN(value)) {\n warnStyleValueIsNaN(name);\n } else if (!isFinite(value)) {\n warnStyleValueIsInfinity(name);\n }\n }\n }\n}\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar unitlessNumbers = new Set(['animationIterationCount', 'aspectRatio', 'borderImageOutset', 'borderImageSlice', 'borderImageWidth', 'boxFlex', 'boxFlexGroup', 'boxOrdinalGroup', 'columnCount', 'columns', 'flex', 'flexGrow', 'flexPositive', 'flexShrink', 'flexNegative', 'flexOrder', 'gridArea', 'gridRow', 'gridRowEnd', 'gridRowSpan', 'gridRowStart', 'gridColumn', 'gridColumnEnd', 'gridColumnSpan', 'gridColumnStart', 'fontWeight', 'lineClamp', 'lineHeight', 'opacity', 'order', 'orphans', 'scale', 'tabSize', 'widows', 'zIndex', 'zoom', 'fillOpacity', // SVG-related properties\n'floodOpacity', 'stopOpacity', 'strokeDasharray', 'strokeDashoffset', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'MozAnimationIterationCount', // Known Prefixed Properties\n'MozBoxFlex', // TODO: Remove these since they shouldn't be used in modern code\n'MozBoxFlexGroup', 'MozLineClamp', 'msAnimationIterationCount', 'msFlex', 'msZoom', 'msFlexGrow', 'msFlexNegative', 'msFlexOrder', 'msFlexPositive', 'msFlexShrink', 'msGridColumn', 'msGridColumnSpan', 'msGridRow', 'msGridRowSpan', 'WebkitAnimationIterationCount', 'WebkitBoxFlex', 'WebKitBoxFlexGroup', 'WebkitBoxOrdinalGroup', 'WebkitColumnCount', 'WebkitColumns', 'WebkitFlex', 'WebkitFlexGrow', 'WebkitFlexPositive', 'WebkitFlexShrink', 'WebkitLineClamp']);\nfunction isUnitlessNumber (name) {\n return unitlessNumbers.has(name);\n}\n\n/**\n * Operations for dealing with CSS properties.\n */\n\n/**\n * This creates a string that is expected to be equivalent to the style\n * attribute generated by server-side rendering. It by-passes warnings and\n * security checks so it's not safe to use this value for anything other than\n * comparison. It is only used in DEV for SSR validation.\n */\n\nfunction createDangerousStringForStyles(styles) {\n {\n var serialized = '';\n var delimiter = '';\n\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n\n var value = styles[styleName];\n\n if (value != null && typeof value !== 'boolean' && value !== '') {\n var isCustomProperty = styleName.indexOf('--') === 0;\n\n if (isCustomProperty) {\n {\n checkCSSPropertyStringCoercion(value, styleName);\n }\n\n serialized += delimiter + styleName + ':' + ('' + value).trim();\n } else {\n if (typeof value === 'number' && value !== 0 && !isUnitlessNumber(styleName)) {\n serialized += delimiter + hyphenateStyleName(styleName) + ':' + value + 'px';\n } else {\n {\n checkCSSPropertyStringCoercion(value, styleName);\n }\n\n serialized += delimiter + hyphenateStyleName(styleName) + ':' + ('' + value).trim();\n }\n }\n\n delimiter = ';';\n }\n }\n\n return serialized || null;\n }\n}\n\nfunction setValueForStyle(style, styleName, value) {\n var isCustomProperty = styleName.indexOf('--') === 0;\n\n {\n if (!isCustomProperty) {\n warnValidStyle(styleName, value);\n }\n }\n\n if (value == null || typeof value === 'boolean' || value === '') {\n if (isCustomProperty) {\n style.setProperty(styleName, '');\n } else if (styleName === 'float') {\n style.cssFloat = '';\n } else {\n style[styleName] = '';\n }\n } else if (isCustomProperty) {\n style.setProperty(styleName, value);\n } else if (typeof value === 'number' && value !== 0 && !isUnitlessNumber(styleName)) {\n style[styleName] = value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n } else {\n if (styleName === 'float') {\n style.cssFloat = value;\n } else {\n {\n checkCSSPropertyStringCoercion(value, styleName);\n }\n\n style[styleName] = ('' + value).trim();\n }\n }\n}\n/**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\n\n\nfunction setValueForStyles(node, styles, prevStyles) {\n if (styles != null && typeof styles !== 'object') {\n throw new Error('The `style` prop expects a mapping from style properties to values, ' + \"not a string. For example, style={{marginRight: spacing + 'em'}} when \" + 'using JSX.');\n }\n\n {\n if (styles) {\n // Freeze the next style object so that we can assume it won't be\n // mutated. We have already warned for this in the past.\n Object.freeze(styles);\n }\n }\n\n var style = node.style;\n\n if (prevStyles != null) {\n {\n validateShorthandPropertyCollisionInDev(prevStyles, styles);\n }\n\n for (var styleName in prevStyles) {\n if (prevStyles.hasOwnProperty(styleName) && (styles == null || !styles.hasOwnProperty(styleName))) {\n // Clear style\n var isCustomProperty = styleName.indexOf('--') === 0;\n\n if (isCustomProperty) {\n style.setProperty(styleName, '');\n } else if (styleName === 'float') {\n style.cssFloat = '';\n } else {\n style[styleName] = '';\n }\n }\n }\n\n for (var _styleName in styles) {\n var value = styles[_styleName];\n\n if (styles.hasOwnProperty(_styleName) && prevStyles[_styleName] !== value) {\n setValueForStyle(style, _styleName, value);\n }\n }\n } else {\n for (var _styleName2 in styles) {\n if (styles.hasOwnProperty(_styleName2)) {\n var _value = styles[_styleName2];\n setValueForStyle(style, _styleName2, _value);\n }\n }\n }\n}\n\nfunction isValueEmpty(value) {\n return value == null || typeof value === 'boolean' || value === '';\n}\n/**\n * Given {color: 'red', overflow: 'hidden'} returns {\n * color: 'color',\n * overflowX: 'overflow',\n * overflowY: 'overflow',\n * }. This can be read as \"the overflowY property was set by the overflow\n * shorthand\". That is, the values are the property that each was derived from.\n */\n\n\nfunction expandShorthandMap(styles) {\n var expanded = {};\n\n for (var key in styles) {\n var longhands = shorthandToLonghand[key] || [key];\n\n for (var i = 0; i < longhands.length; i++) {\n expanded[longhands[i]] = key;\n }\n }\n\n return expanded;\n}\n/**\n * When mixing shorthand and longhand property names, we warn during updates if\n * we expect an incorrect result to occur. In particular, we warn for:\n *\n * Updating a shorthand property (longhand gets overwritten):\n * {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'}\n * becomes .style.font = 'baz'\n * Removing a shorthand property (longhand gets lost too):\n * {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'}\n * becomes .style.font = ''\n * Removing a longhand property (should revert to shorthand; doesn't):\n * {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'}\n * becomes .style.fontVariant = ''\n */\n\n\nfunction validateShorthandPropertyCollisionInDev(prevStyles, nextStyles) {\n {\n if (!nextStyles) {\n return;\n } // Compute the diff as it would happen elsewhere.\n\n\n var expandedUpdates = {};\n\n if (prevStyles) {\n for (var key in prevStyles) {\n if (prevStyles.hasOwnProperty(key) && !nextStyles.hasOwnProperty(key)) {\n var longhands = shorthandToLonghand[key] || [key];\n\n for (var i = 0; i < longhands.length; i++) {\n expandedUpdates[longhands[i]] = key;\n }\n }\n }\n }\n\n for (var _key in nextStyles) {\n if (nextStyles.hasOwnProperty(_key) && (!prevStyles || prevStyles[_key] !== nextStyles[_key])) {\n var _longhands = shorthandToLonghand[_key] || [_key];\n\n for (var _i = 0; _i < _longhands.length; _i++) {\n expandedUpdates[_longhands[_i]] = _key;\n }\n }\n }\n\n var expandedStyles = expandShorthandMap(nextStyles);\n var warnedAbout = {};\n\n for (var _key2 in expandedUpdates) {\n var originalKey = expandedUpdates[_key2];\n var correctOriginalKey = expandedStyles[_key2];\n\n if (correctOriginalKey && originalKey !== correctOriginalKey) {\n var warningKey = originalKey + ',' + correctOriginalKey;\n\n if (warnedAbout[warningKey]) {\n continue;\n }\n\n warnedAbout[warningKey] = true;\n\n error('%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + \"avoid this, don't mix shorthand and non-shorthand properties \" + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(nextStyles[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey);\n }\n }\n }\n}\n\nfunction isCustomElement(tagName, props) {\n if (tagName.indexOf('-') === -1) {\n return false;\n }\n\n switch (tagName) {\n // These are reserved SVG and MathML elements.\n // We don't mind this list too much because we expect it to never grow.\n // The alternative is to track the namespace in a few places which is convoluted.\n // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n case 'annotation-xml':\n case 'color-profile':\n case 'font-face':\n case 'font-face-src':\n case 'font-face-uri':\n case 'font-face-format':\n case 'font-face-name':\n case 'missing-glyph':\n return false;\n\n default:\n return true;\n }\n}\n\nvar aliases = new Map([['acceptCharset', 'accept-charset'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv'], // HTML and SVG attributes, but the SVG attribute is case sensitive.],\n['crossOrigin', 'crossorigin'], // This is a list of all SVG attributes that need special casing.\n// Regular attributes that just accept strings.],\n['accentHeight', 'accent-height'], ['alignmentBaseline', 'alignment-baseline'], ['arabicForm', 'arabic-form'], ['baselineShift', 'baseline-shift'], ['capHeight', 'cap-height'], ['clipPath', 'clip-path'], ['clipRule', 'clip-rule'], ['colorInterpolation', 'color-interpolation'], ['colorInterpolationFilters', 'color-interpolation-filters'], ['colorProfile', 'color-profile'], ['colorRendering', 'color-rendering'], ['dominantBaseline', 'dominant-baseline'], ['enableBackground', 'enable-background'], ['fillOpacity', 'fill-opacity'], ['fillRule', 'fill-rule'], ['floodColor', 'flood-color'], ['floodOpacity', 'flood-opacity'], ['fontFamily', 'font-family'], ['fontSize', 'font-size'], ['fontSizeAdjust', 'font-size-adjust'], ['fontStretch', 'font-stretch'], ['fontStyle', 'font-style'], ['fontVariant', 'font-variant'], ['fontWeight', 'font-weight'], ['glyphName', 'glyph-name'], ['glyphOrientationHorizontal', 'glyph-orientation-horizontal'], ['glyphOrientationVertical', 'glyph-orientation-vertical'], ['horizAdvX', 'horiz-adv-x'], ['horizOriginX', 'horiz-origin-x'], ['imageRendering', 'image-rendering'], ['letterSpacing', 'letter-spacing'], ['lightingColor', 'lighting-color'], ['markerEnd', 'marker-end'], ['markerMid', 'marker-mid'], ['markerStart', 'marker-start'], ['overlinePosition', 'overline-position'], ['overlineThickness', 'overline-thickness'], ['paintOrder', 'paint-order'], ['panose-1', 'panose-1'], ['pointerEvents', 'pointer-events'], ['renderingIntent', 'rendering-intent'], ['shapeRendering', 'shape-rendering'], ['stopColor', 'stop-color'], ['stopOpacity', 'stop-opacity'], ['strikethroughPosition', 'strikethrough-position'], ['strikethroughThickness', 'strikethrough-thickness'], ['strokeDasharray', 'stroke-dasharray'], ['strokeDashoffset', 'stroke-dashoffset'], ['strokeLinecap', 'stroke-linecap'], ['strokeLinejoin', 'stroke-linejoin'], ['strokeMiterlimit', 'stroke-miterlimit'], ['strokeOpacity', 'stroke-opacity'], ['strokeWidth', 'stroke-width'], ['textAnchor', 'text-anchor'], ['textDecoration', 'text-decoration'], ['textRendering', 'text-rendering'], ['transformOrigin', 'transform-origin'], ['underlinePosition', 'underline-position'], ['underlineThickness', 'underline-thickness'], ['unicodeBidi', 'unicode-bidi'], ['unicodeRange', 'unicode-range'], ['unitsPerEm', 'units-per-em'], ['vAlphabetic', 'v-alphabetic'], ['vHanging', 'v-hanging'], ['vIdeographic', 'v-ideographic'], ['vMathematical', 'v-mathematical'], ['vectorEffect', 'vector-effect'], ['vertAdvY', 'vert-adv-y'], ['vertOriginX', 'vert-origin-x'], ['vertOriginY', 'vert-origin-y'], ['wordSpacing', 'word-spacing'], ['writingMode', 'writing-mode'], ['xmlnsXlink', 'xmlns:xlink'], ['xHeight', 'x-height']]);\nfunction getAttributeAlias (name) {\n return aliases.get(name) || name;\n}\n\n// When adding attributes to the HTML or SVG allowed attribute list, be sure to\n// also add them to this module to ensure casing and incorrect name\n// warnings.\nvar possibleStandardNames = {\n // HTML\n accept: 'accept',\n acceptcharset: 'acceptCharset',\n 'accept-charset': 'acceptCharset',\n accesskey: 'accessKey',\n action: 'action',\n allowfullscreen: 'allowFullScreen',\n alt: 'alt',\n as: 'as',\n async: 'async',\n autocapitalize: 'autoCapitalize',\n autocomplete: 'autoComplete',\n autocorrect: 'autoCorrect',\n autofocus: 'autoFocus',\n autoplay: 'autoPlay',\n autosave: 'autoSave',\n capture: 'capture',\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing',\n challenge: 'challenge',\n charset: 'charSet',\n checked: 'checked',\n children: 'children',\n cite: 'cite',\n class: 'className',\n classid: 'classID',\n classname: 'className',\n cols: 'cols',\n colspan: 'colSpan',\n content: 'content',\n contenteditable: 'contentEditable',\n contextmenu: 'contextMenu',\n controls: 'controls',\n controlslist: 'controlsList',\n coords: 'coords',\n crossorigin: 'crossOrigin',\n dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n data: 'data',\n datetime: 'dateTime',\n default: 'default',\n defaultchecked: 'defaultChecked',\n defaultvalue: 'defaultValue',\n defer: 'defer',\n dir: 'dir',\n disabled: 'disabled',\n disablepictureinpicture: 'disablePictureInPicture',\n disableremoteplayback: 'disableRemotePlayback',\n download: 'download',\n draggable: 'draggable',\n enctype: 'encType',\n enterkeyhint: 'enterKeyHint',\n fetchpriority: 'fetchPriority',\n for: 'htmlFor',\n form: 'form',\n formmethod: 'formMethod',\n formaction: 'formAction',\n formenctype: 'formEncType',\n formnovalidate: 'formNoValidate',\n formtarget: 'formTarget',\n frameborder: 'frameBorder',\n headers: 'headers',\n height: 'height',\n hidden: 'hidden',\n high: 'high',\n href: 'href',\n hreflang: 'hrefLang',\n htmlfor: 'htmlFor',\n httpequiv: 'httpEquiv',\n 'http-equiv': 'httpEquiv',\n icon: 'icon',\n id: 'id',\n imagesizes: 'imageSizes',\n imagesrcset: 'imageSrcSet',\n innerhtml: 'innerHTML',\n inputmode: 'inputMode',\n integrity: 'integrity',\n is: 'is',\n itemid: 'itemID',\n itemprop: 'itemProp',\n itemref: 'itemRef',\n itemscope: 'itemScope',\n itemtype: 'itemType',\n keyparams: 'keyParams',\n keytype: 'keyType',\n kind: 'kind',\n label: 'label',\n lang: 'lang',\n list: 'list',\n loop: 'loop',\n low: 'low',\n manifest: 'manifest',\n marginwidth: 'marginWidth',\n marginheight: 'marginHeight',\n max: 'max',\n maxlength: 'maxLength',\n media: 'media',\n mediagroup: 'mediaGroup',\n method: 'method',\n min: 'min',\n minlength: 'minLength',\n multiple: 'multiple',\n muted: 'muted',\n name: 'name',\n nomodule: 'noModule',\n nonce: 'nonce',\n novalidate: 'noValidate',\n open: 'open',\n optimum: 'optimum',\n pattern: 'pattern',\n placeholder: 'placeholder',\n playsinline: 'playsInline',\n poster: 'poster',\n preload: 'preload',\n profile: 'profile',\n radiogroup: 'radioGroup',\n readonly: 'readOnly',\n referrerpolicy: 'referrerPolicy',\n rel: 'rel',\n required: 'required',\n reversed: 'reversed',\n role: 'role',\n rows: 'rows',\n rowspan: 'rowSpan',\n sandbox: 'sandbox',\n scope: 'scope',\n scoped: 'scoped',\n scrolling: 'scrolling',\n seamless: 'seamless',\n selected: 'selected',\n shape: 'shape',\n size: 'size',\n sizes: 'sizes',\n span: 'span',\n spellcheck: 'spellCheck',\n src: 'src',\n srcdoc: 'srcDoc',\n srclang: 'srcLang',\n srcset: 'srcSet',\n start: 'start',\n step: 'step',\n style: 'style',\n summary: 'summary',\n tabindex: 'tabIndex',\n target: 'target',\n title: 'title',\n type: 'type',\n usemap: 'useMap',\n value: 'value',\n width: 'width',\n wmode: 'wmode',\n wrap: 'wrap',\n // SVG\n about: 'about',\n accentheight: 'accentHeight',\n 'accent-height': 'accentHeight',\n accumulate: 'accumulate',\n additive: 'additive',\n alignmentbaseline: 'alignmentBaseline',\n 'alignment-baseline': 'alignmentBaseline',\n allowreorder: 'allowReorder',\n alphabetic: 'alphabetic',\n amplitude: 'amplitude',\n arabicform: 'arabicForm',\n 'arabic-form': 'arabicForm',\n ascent: 'ascent',\n attributename: 'attributeName',\n attributetype: 'attributeType',\n autoreverse: 'autoReverse',\n azimuth: 'azimuth',\n basefrequency: 'baseFrequency',\n baselineshift: 'baselineShift',\n 'baseline-shift': 'baselineShift',\n baseprofile: 'baseProfile',\n bbox: 'bbox',\n begin: 'begin',\n bias: 'bias',\n by: 'by',\n calcmode: 'calcMode',\n capheight: 'capHeight',\n 'cap-height': 'capHeight',\n clip: 'clip',\n clippath: 'clipPath',\n 'clip-path': 'clipPath',\n clippathunits: 'clipPathUnits',\n cliprule: 'clipRule',\n 'clip-rule': 'clipRule',\n color: 'color',\n colorinterpolation: 'colorInterpolation',\n 'color-interpolation': 'colorInterpolation',\n colorinterpolationfilters: 'colorInterpolationFilters',\n 'color-interpolation-filters': 'colorInterpolationFilters',\n colorprofile: 'colorProfile',\n 'color-profile': 'colorProfile',\n colorrendering: 'colorRendering',\n 'color-rendering': 'colorRendering',\n contentscripttype: 'contentScriptType',\n contentstyletype: 'contentStyleType',\n cursor: 'cursor',\n cx: 'cx',\n cy: 'cy',\n d: 'd',\n datatype: 'datatype',\n decelerate: 'decelerate',\n descent: 'descent',\n diffuseconstant: 'diffuseConstant',\n direction: 'direction',\n display: 'display',\n divisor: 'divisor',\n dominantbaseline: 'dominantBaseline',\n 'dominant-baseline': 'dominantBaseline',\n dur: 'dur',\n dx: 'dx',\n dy: 'dy',\n edgemode: 'edgeMode',\n elevation: 'elevation',\n enablebackground: 'enableBackground',\n 'enable-background': 'enableBackground',\n end: 'end',\n exponent: 'exponent',\n externalresourcesrequired: 'externalResourcesRequired',\n fill: 'fill',\n fillopacity: 'fillOpacity',\n 'fill-opacity': 'fillOpacity',\n fillrule: 'fillRule',\n 'fill-rule': 'fillRule',\n filter: 'filter',\n filterres: 'filterRes',\n filterunits: 'filterUnits',\n floodopacity: 'floodOpacity',\n 'flood-opacity': 'floodOpacity',\n floodcolor: 'floodColor',\n 'flood-color': 'floodColor',\n focusable: 'focusable',\n fontfamily: 'fontFamily',\n 'font-family': 'fontFamily',\n fontsize: 'fontSize',\n 'font-size': 'fontSize',\n fontsizeadjust: 'fontSizeAdjust',\n 'font-size-adjust': 'fontSizeAdjust',\n fontstretch: 'fontStretch',\n 'font-stretch': 'fontStretch',\n fontstyle: 'fontStyle',\n 'font-style': 'fontStyle',\n fontvariant: 'fontVariant',\n 'font-variant': 'fontVariant',\n fontweight: 'fontWeight',\n 'font-weight': 'fontWeight',\n format: 'format',\n from: 'from',\n fx: 'fx',\n fy: 'fy',\n g1: 'g1',\n g2: 'g2',\n glyphname: 'glyphName',\n 'glyph-name': 'glyphName',\n glyphorientationhorizontal: 'glyphOrientationHorizontal',\n 'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n glyphorientationvertical: 'glyphOrientationVertical',\n 'glyph-orientation-vertical': 'glyphOrientationVertical',\n glyphref: 'glyphRef',\n gradienttransform: 'gradientTransform',\n gradientunits: 'gradientUnits',\n hanging: 'hanging',\n horizadvx: 'horizAdvX',\n 'horiz-adv-x': 'horizAdvX',\n horizoriginx: 'horizOriginX',\n 'horiz-origin-x': 'horizOriginX',\n ideographic: 'ideographic',\n imagerendering: 'imageRendering',\n 'image-rendering': 'imageRendering',\n in2: 'in2',\n in: 'in',\n inlist: 'inlist',\n intercept: 'intercept',\n k1: 'k1',\n k2: 'k2',\n k3: 'k3',\n k4: 'k4',\n k: 'k',\n kernelmatrix: 'kernelMatrix',\n kernelunitlength: 'kernelUnitLength',\n kerning: 'kerning',\n keypoints: 'keyPoints',\n keysplines: 'keySplines',\n keytimes: 'keyTimes',\n lengthadjust: 'lengthAdjust',\n letterspacing: 'letterSpacing',\n 'letter-spacing': 'letterSpacing',\n lightingcolor: 'lightingColor',\n 'lighting-color': 'lightingColor',\n limitingconeangle: 'limitingConeAngle',\n local: 'local',\n markerend: 'markerEnd',\n 'marker-end': 'markerEnd',\n markerheight: 'markerHeight',\n markermid: 'markerMid',\n 'marker-mid': 'markerMid',\n markerstart: 'markerStart',\n 'marker-start': 'markerStart',\n markerunits: 'markerUnits',\n markerwidth: 'markerWidth',\n mask: 'mask',\n maskcontentunits: 'maskContentUnits',\n maskunits: 'maskUnits',\n mathematical: 'mathematical',\n mode: 'mode',\n numoctaves: 'numOctaves',\n offset: 'offset',\n opacity: 'opacity',\n operator: 'operator',\n order: 'order',\n orient: 'orient',\n orientation: 'orientation',\n origin: 'origin',\n overflow: 'overflow',\n overlineposition: 'overlinePosition',\n 'overline-position': 'overlinePosition',\n overlinethickness: 'overlineThickness',\n 'overline-thickness': 'overlineThickness',\n paintorder: 'paintOrder',\n 'paint-order': 'paintOrder',\n panose1: 'panose1',\n 'panose-1': 'panose1',\n pathlength: 'pathLength',\n patterncontentunits: 'patternContentUnits',\n patterntransform: 'patternTransform',\n patternunits: 'patternUnits',\n pointerevents: 'pointerEvents',\n 'pointer-events': 'pointerEvents',\n points: 'points',\n pointsatx: 'pointsAtX',\n pointsaty: 'pointsAtY',\n pointsatz: 'pointsAtZ',\n prefix: 'prefix',\n preservealpha: 'preserveAlpha',\n preserveaspectratio: 'preserveAspectRatio',\n primitiveunits: 'primitiveUnits',\n property: 'property',\n r: 'r',\n radius: 'radius',\n refx: 'refX',\n refy: 'refY',\n renderingintent: 'renderingIntent',\n 'rendering-intent': 'renderingIntent',\n repeatcount: 'repeatCount',\n repeatdur: 'repeatDur',\n requiredextensions: 'requiredExtensions',\n requiredfeatures: 'requiredFeatures',\n resource: 'resource',\n restart: 'restart',\n result: 'result',\n results: 'results',\n rotate: 'rotate',\n rx: 'rx',\n ry: 'ry',\n scale: 'scale',\n security: 'security',\n seed: 'seed',\n shaperendering: 'shapeRendering',\n 'shape-rendering': 'shapeRendering',\n slope: 'slope',\n spacing: 'spacing',\n specularconstant: 'specularConstant',\n specularexponent: 'specularExponent',\n speed: 'speed',\n spreadmethod: 'spreadMethod',\n startoffset: 'startOffset',\n stddeviation: 'stdDeviation',\n stemh: 'stemh',\n stemv: 'stemv',\n stitchtiles: 'stitchTiles',\n stopcolor: 'stopColor',\n 'stop-color': 'stopColor',\n stopopacity: 'stopOpacity',\n 'stop-opacity': 'stopOpacity',\n strikethroughposition: 'strikethroughPosition',\n 'strikethrough-position': 'strikethroughPosition',\n strikethroughthickness: 'strikethroughThickness',\n 'strikethrough-thickness': 'strikethroughThickness',\n string: 'string',\n stroke: 'stroke',\n strokedasharray: 'strokeDasharray',\n 'stroke-dasharray': 'strokeDasharray',\n strokedashoffset: 'strokeDashoffset',\n 'stroke-dashoffset': 'strokeDashoffset',\n strokelinecap: 'strokeLinecap',\n 'stroke-linecap': 'strokeLinecap',\n strokelinejoin: 'strokeLinejoin',\n 'stroke-linejoin': 'strokeLinejoin',\n strokemiterlimit: 'strokeMiterlimit',\n 'stroke-miterlimit': 'strokeMiterlimit',\n strokewidth: 'strokeWidth',\n 'stroke-width': 'strokeWidth',\n strokeopacity: 'strokeOpacity',\n 'stroke-opacity': 'strokeOpacity',\n suppresscontenteditablewarning: 'suppressContentEditableWarning',\n suppresshydrationwarning: 'suppressHydrationWarning',\n surfacescale: 'surfaceScale',\n systemlanguage: 'systemLanguage',\n tablevalues: 'tableValues',\n targetx: 'targetX',\n targety: 'targetY',\n textanchor: 'textAnchor',\n 'text-anchor': 'textAnchor',\n textdecoration: 'textDecoration',\n 'text-decoration': 'textDecoration',\n textlength: 'textLength',\n textrendering: 'textRendering',\n 'text-rendering': 'textRendering',\n to: 'to',\n transform: 'transform',\n transformorigin: 'transformOrigin',\n 'transform-origin': 'transformOrigin',\n typeof: 'typeof',\n u1: 'u1',\n u2: 'u2',\n underlineposition: 'underlinePosition',\n 'underline-position': 'underlinePosition',\n underlinethickness: 'underlineThickness',\n 'underline-thickness': 'underlineThickness',\n unicode: 'unicode',\n unicodebidi: 'unicodeBidi',\n 'unicode-bidi': 'unicodeBidi',\n unicoderange: 'unicodeRange',\n 'unicode-range': 'unicodeRange',\n unitsperem: 'unitsPerEm',\n 'units-per-em': 'unitsPerEm',\n unselectable: 'unselectable',\n valphabetic: 'vAlphabetic',\n 'v-alphabetic': 'vAlphabetic',\n values: 'values',\n vectoreffect: 'vectorEffect',\n 'vector-effect': 'vectorEffect',\n version: 'version',\n vertadvy: 'vertAdvY',\n 'vert-adv-y': 'vertAdvY',\n vertoriginx: 'vertOriginX',\n 'vert-origin-x': 'vertOriginX',\n vertoriginy: 'vertOriginY',\n 'vert-origin-y': 'vertOriginY',\n vhanging: 'vHanging',\n 'v-hanging': 'vHanging',\n videographic: 'vIdeographic',\n 'v-ideographic': 'vIdeographic',\n viewbox: 'viewBox',\n viewtarget: 'viewTarget',\n visibility: 'visibility',\n vmathematical: 'vMathematical',\n 'v-mathematical': 'vMathematical',\n vocab: 'vocab',\n widths: 'widths',\n wordspacing: 'wordSpacing',\n 'word-spacing': 'wordSpacing',\n writingmode: 'writingMode',\n 'writing-mode': 'writingMode',\n x1: 'x1',\n x2: 'x2',\n x: 'x',\n xchannelselector: 'xChannelSelector',\n xheight: 'xHeight',\n 'x-height': 'xHeight',\n xlinkactuate: 'xlinkActuate',\n 'xlink:actuate': 'xlinkActuate',\n xlinkarcrole: 'xlinkArcrole',\n 'xlink:arcrole': 'xlinkArcrole',\n xlinkhref: 'xlinkHref',\n 'xlink:href': 'xlinkHref',\n xlinkrole: 'xlinkRole',\n 'xlink:role': 'xlinkRole',\n xlinkshow: 'xlinkShow',\n 'xlink:show': 'xlinkShow',\n xlinktitle: 'xlinkTitle',\n 'xlink:title': 'xlinkTitle',\n xlinktype: 'xlinkType',\n 'xlink:type': 'xlinkType',\n xmlbase: 'xmlBase',\n 'xml:base': 'xmlBase',\n xmllang: 'xmlLang',\n 'xml:lang': 'xmlLang',\n xmlns: 'xmlns',\n 'xml:space': 'xmlSpace',\n xmlnsxlink: 'xmlnsXlink',\n 'xmlns:xlink': 'xmlnsXlink',\n xmlspace: 'xmlSpace',\n y1: 'y1',\n y2: 'y2',\n y: 'y',\n ychannelselector: 'yChannelSelector',\n z: 'z',\n zoomandpan: 'zoomAndPan'\n};\n\nvar ariaProperties = {\n 'aria-current': 0,\n // state\n 'aria-description': 0,\n 'aria-details': 0,\n 'aria-disabled': 0,\n // state\n 'aria-hidden': 0,\n // state\n 'aria-invalid': 0,\n // state\n 'aria-keyshortcuts': 0,\n 'aria-label': 0,\n 'aria-roledescription': 0,\n // Widget Attributes\n 'aria-autocomplete': 0,\n 'aria-checked': 0,\n 'aria-expanded': 0,\n 'aria-haspopup': 0,\n 'aria-level': 0,\n 'aria-modal': 0,\n 'aria-multiline': 0,\n 'aria-multiselectable': 0,\n 'aria-orientation': 0,\n 'aria-placeholder': 0,\n 'aria-pressed': 0,\n 'aria-readonly': 0,\n 'aria-required': 0,\n 'aria-selected': 0,\n 'aria-sort': 0,\n 'aria-valuemax': 0,\n 'aria-valuemin': 0,\n 'aria-valuenow': 0,\n 'aria-valuetext': 0,\n // Live Region Attributes\n 'aria-atomic': 0,\n 'aria-busy': 0,\n 'aria-live': 0,\n 'aria-relevant': 0,\n // Drag-and-Drop Attributes\n 'aria-dropeffect': 0,\n 'aria-grabbed': 0,\n // Relationship Attributes\n 'aria-activedescendant': 0,\n 'aria-colcount': 0,\n 'aria-colindex': 0,\n 'aria-colspan': 0,\n 'aria-controls': 0,\n 'aria-describedby': 0,\n 'aria-errormessage': 0,\n 'aria-flowto': 0,\n 'aria-labelledby': 0,\n 'aria-owns': 0,\n 'aria-posinset': 0,\n 'aria-rowcount': 0,\n 'aria-rowindex': 0,\n 'aria-rowspan': 0,\n 'aria-setsize': 0\n};\n\nvar warnedProperties$1 = {};\nvar rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\nfunction validateProperty$1(tagName, name) {\n {\n if (hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {\n return true;\n }\n\n if (rARIACamel$1.test(name)) {\n var ariaName = 'aria-' + name.slice(4).toLowerCase();\n var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n\n if (correctName == null) {\n error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);\n\n warnedProperties$1[name] = true;\n return true;\n } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n if (name !== correctName) {\n error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);\n\n warnedProperties$1[name] = true;\n return true;\n }\n }\n\n if (rARIA$1.test(name)) {\n var lowerCasedName = name.toLowerCase();\n var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n\n if (standardName == null) {\n warnedProperties$1[name] = true;\n return false;\n } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n if (name !== standardName) {\n error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);\n\n warnedProperties$1[name] = true;\n return true;\n }\n }\n }\n\n return true;\n}\n\nfunction validateProperties$2(type, props) {\n {\n var invalidProps = [];\n\n for (var key in props) {\n var isValid = validateProperty$1(type, key);\n\n if (!isValid) {\n invalidProps.push(key);\n }\n }\n\n var unknownPropString = invalidProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n\n if (invalidProps.length === 1) {\n error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);\n } else if (invalidProps.length > 1) {\n error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);\n }\n }\n}\n\nvar didWarnValueNull = false;\nfunction validateProperties$1(type, props) {\n {\n if (type !== 'input' && type !== 'textarea' && type !== 'select') {\n return;\n }\n\n if (props != null && props.value === null && !didWarnValueNull) {\n didWarnValueNull = true;\n\n if (type === 'select' && props.multiple) {\n error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);\n } else {\n error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);\n }\n }\n }\n}\n\nvar warnedProperties = {};\nvar EVENT_NAME_REGEX = /^on./;\nvar INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;\nvar rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$') ;\nvar rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$') ;\n\nfunction validateProperty(tagName, name, value, eventRegistry) {\n {\n if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name]) {\n return true;\n }\n\n var lowerCasedName = name.toLowerCase();\n\n if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {\n error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');\n\n warnedProperties[name] = true;\n return true;\n }\n\n {\n // Actions are special because unlike events they can have other value types.\n if (typeof value === 'function') {\n if (tagName === 'form' && name === 'action') {\n return true;\n }\n\n if (tagName === 'input' && name === 'formAction') {\n return true;\n }\n\n if (tagName === 'button' && name === 'formAction') {\n return true;\n }\n }\n } // We can't rely on the event system being injected on the server.\n\n\n if (eventRegistry != null) {\n var registrationNameDependencies = eventRegistry.registrationNameDependencies,\n possibleRegistrationNames = eventRegistry.possibleRegistrationNames;\n\n if (registrationNameDependencies.hasOwnProperty(name)) {\n return true;\n }\n\n var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;\n\n if (registrationName != null) {\n error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);\n\n warnedProperties[name] = true;\n return true;\n }\n\n if (EVENT_NAME_REGEX.test(name)) {\n error('Unknown event handler property `%s`. It will be ignored.', name);\n\n warnedProperties[name] = true;\n return true;\n }\n } else if (EVENT_NAME_REGEX.test(name)) {\n // If no event plugins have been injected, we are in a server environment.\n // So we can't tell if the event name is correct for sure, but we can filter\n // out known bad ones like `onclick`. We can't suggest a specific replacement though.\n if (INVALID_EVENT_NAME_REGEX.test(name)) {\n error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);\n }\n\n warnedProperties[name] = true;\n return true;\n } // Let the ARIA attribute hook validate ARIA attributes\n\n\n if (rARIA.test(name) || rARIACamel.test(name)) {\n return true;\n }\n\n if (lowerCasedName === 'innerhtml') {\n error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');\n\n warnedProperties[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'aria') {\n error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');\n\n warnedProperties[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {\n error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);\n\n warnedProperties[name] = true;\n return true;\n }\n\n if (typeof value === 'number' && isNaN(value)) {\n error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);\n\n warnedProperties[name] = true;\n return true;\n } // Known attributes should match the casing specified in the property config.\n\n\n if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n var standardName = possibleStandardNames[lowerCasedName];\n\n if (standardName !== name) {\n error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);\n\n warnedProperties[name] = true;\n return true;\n }\n } else if (name !== lowerCasedName) {\n // Unknown attributes should have lowercase casing since that's how they\n // will be cased anyway with server rendering.\n error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);\n\n warnedProperties[name] = true;\n return true;\n } // Now that we've validated casing, do not validate\n // data types for reserved props\n\n\n switch (name) {\n case 'dangerouslySetInnerHTML':\n case 'children':\n case 'style':\n case 'suppressContentEditableWarning':\n case 'suppressHydrationWarning':\n case 'defaultValue': // Reserved\n\n case 'defaultChecked':\n case 'innerHTML':\n {\n return true;\n }\n\n }\n\n switch (typeof value) {\n case 'boolean':\n {\n switch (name) {\n case 'autoFocus':\n case 'checked':\n case 'multiple':\n case 'muted':\n case 'selected':\n case 'contentEditable':\n case 'spellCheck':\n case 'draggable':\n case 'value':\n case 'autoReverse':\n case 'externalResourcesRequired':\n case 'focusable':\n case 'preserveAlpha':\n case 'allowFullScreen':\n case 'async':\n case 'autoPlay':\n case 'controls':\n case 'default':\n case 'defer':\n case 'disabled':\n case 'disablePictureInPicture':\n case 'disableRemotePlayback':\n case 'formNoValidate':\n case 'hidden':\n case 'loop':\n case 'noModule':\n case 'noValidate':\n case 'open':\n case 'playsInline':\n case 'readOnly':\n case 'required':\n case 'reversed':\n case 'scoped':\n case 'seamless':\n case 'itemScope':\n case 'capture':\n case 'download':\n {\n // Boolean properties can accept boolean values\n return true;\n }\n\n default:\n {\n var prefix = name.toLowerCase().slice(0, 5);\n\n if (prefix === 'data-' || prefix === 'aria-') {\n return true;\n }\n\n if (value) {\n error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.', value, name, name, value, name);\n } else {\n error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);\n }\n\n warnedProperties[name] = true;\n return true;\n }\n }\n }\n\n case 'function':\n case 'symbol':\n // eslint-disable-line\n // Warn when a known attribute is a bad type\n warnedProperties[name] = true;\n return false;\n\n case 'string':\n {\n // Warn when passing the strings 'false' or 'true' into a boolean prop\n if (value === 'false' || value === 'true') {\n switch (name) {\n case 'checked':\n case 'selected':\n case 'multiple':\n case 'muted':\n case 'allowFullScreen':\n case 'async':\n case 'autoPlay':\n case 'controls':\n case 'default':\n case 'defer':\n case 'disabled':\n case 'disablePictureInPicture':\n case 'disableRemotePlayback':\n case 'formNoValidate':\n case 'hidden':\n case 'loop':\n case 'noModule':\n case 'noValidate':\n case 'open':\n case 'playsInline':\n case 'readOnly':\n case 'required':\n case 'reversed':\n case 'scoped':\n case 'seamless':\n case 'itemScope':\n {\n break;\n }\n\n default:\n {\n return true;\n }\n }\n\n error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string \"false\".', name, value);\n\n warnedProperties[name] = true;\n return true;\n }\n }\n }\n\n return true;\n }\n}\n\nfunction warnUnknownProperties(type, props, eventRegistry) {\n {\n var unknownProps = [];\n\n for (var key in props) {\n var isValid = validateProperty(type, key, props[key], eventRegistry);\n\n if (!isValid) {\n unknownProps.push(key);\n }\n }\n\n var unknownPropString = unknownProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n\n if (unknownProps.length === 1) {\n error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);\n } else if (unknownProps.length > 1) {\n error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);\n }\n }\n}\n\nfunction validateProperties(type, props, eventRegistry) {\n if (isCustomElement(type) || typeof props.is === 'string') {\n return;\n }\n\n warnUnknownProperties(type, props, eventRegistry);\n}\n\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\nvar isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n // We should never have symbols here because they get filtered out elsewhere.\n // eslint-disable-next-line react-internal/safe-string-coercion\n var stringifiedURL = '' + url;\n\n {\n if (!didWarn && isJavaScriptProtocol.test(stringifiedURL)) {\n didWarn = true;\n\n error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(stringifiedURL));\n }\n }\n\n return url;\n}\n\nvar IS_EVENT_HANDLE_NON_MANAGED_NODE = 1;\nvar IS_NON_DELEGATED = 1 << 1;\nvar IS_CAPTURE_PHASE = 1 << 2;\n// set to LEGACY_FB_SUPPORT. LEGACY_FB_SUPPORT only gets set when\n// we call willDeferLaterForLegacyFBSupport, thus not bailing out\n// will result in endless cycles like an infinite loop.\n// We also don't want to defer during event replaying.\n\nvar SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS = IS_EVENT_HANDLE_NON_MANAGED_NODE | IS_NON_DELEGATED | IS_CAPTURE_PHASE;\n\n// This exists to avoid circular dependency between ReactDOMEventReplaying\n// and DOMPluginEventSystem.\nvar currentReplayingEvent = null;\nfunction setReplayingEvent(event) {\n {\n if (currentReplayingEvent !== null) {\n error('Expected currently replaying event to be null. This error ' + 'is likely caused by a bug in React. Please file an issue.');\n }\n }\n\n currentReplayingEvent = event;\n}\nfunction resetReplayingEvent() {\n {\n if (currentReplayingEvent === null) {\n error('Expected currently replaying event to not be null. This error ' + 'is likely caused by a bug in React. Please file an issue.');\n }\n }\n\n currentReplayingEvent = null;\n}\nfunction isReplayingEvent(event) {\n return event === currentReplayingEvent;\n}\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n // Fallback to nativeEvent.srcElement for IE9\n // https://github.com/facebook/react/issues/12506\n var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG <use> element events #4963\n\n if (target.correspondingUseElement) {\n target = target.correspondingUseElement;\n } // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n // @see http://www.quirksmode.org/js/events_properties.html\n\n\n return target.nodeType === TEXT_NODE ? target.parentNode : target;\n}\n\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n // We perform this translation at the end of the event loop so that we\n // always receive the correct fiber here\n var internalInstance = getInstanceFromNode(target);\n\n if (!internalInstance) {\n // Unmounted\n return;\n }\n\n var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.\n\n if (stateNode) {\n var props = getFiberCurrentPropsFromNode(stateNode);\n restoreControlledState(internalInstance.stateNode, internalInstance.type, props);\n }\n}\n\nfunction enqueueStateRestore(target) {\n if (restoreTarget) {\n if (restoreQueue) {\n restoreQueue.push(target);\n } else {\n restoreQueue = [target];\n }\n } else {\n restoreTarget = target;\n }\n}\nfunction needsStateRestore() {\n return restoreTarget !== null || restoreQueue !== null;\n}\nfunction restoreStateIfNeeded() {\n if (!restoreTarget) {\n return;\n }\n\n var target = restoreTarget;\n var queuedTargets = restoreQueue;\n restoreTarget = null;\n restoreQueue = null;\n restoreStateOfTarget(target);\n\n if (queuedTargets) {\n for (var i = 0; i < queuedTargets.length; i++) {\n restoreStateOfTarget(queuedTargets[i]);\n }\n }\n}\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n *\n * Note that this module is currently shared and assumed to be stateless.\n * If this becomes an actual Map, that will break.\n */\nfunction get(key) {\n return key._reactInternals;\n}\nfunction has(key) {\n return key._reactInternals !== undefined;\n}\nfunction set(key, value) {\n key._reactInternals = value;\n}\n\nvar ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner;\nfunction getNearestMountedFiber(fiber) {\n var node = fiber;\n var nearestMounted = fiber;\n\n if (!fiber.alternate) {\n // If there is no alternate, this might be a new tree that isn't inserted\n // yet. If it is, then it will have a pending insertion effect on it.\n var nextNode = node;\n\n do {\n node = nextNode;\n\n if ((node.flags & (Placement | Hydrating)) !== NoFlags$1) {\n // This is an insertion or in-progress hydration. The nearest possible\n // mounted fiber is the parent but we need to continue to figure out\n // if that one is still mounted.\n nearestMounted = node.return;\n } // $FlowFixMe[incompatible-type] we bail out when we get a null\n\n\n nextNode = node.return;\n } while (nextNode);\n } else {\n while (node.return) {\n node = node.return;\n }\n }\n\n if (node.tag === HostRoot) {\n // TODO: Check if this was a nested HostRoot when used with\n // renderContainerIntoSubtree.\n return nearestMounted;\n } // If we didn't hit the root, that means that we're in an disconnected tree\n // that has been unmounted.\n\n\n return null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (fiber.tag === SuspenseComponent) {\n var suspenseState = fiber.memoizedState;\n\n if (suspenseState === null) {\n var current = fiber.alternate;\n\n if (current !== null) {\n suspenseState = current.memoizedState;\n }\n }\n\n if (suspenseState !== null) {\n return suspenseState.dehydrated;\n }\n }\n\n return null;\n}\nfunction getContainerFromFiber(fiber) {\n return fiber.tag === HostRoot ? fiber.stateNode.containerInfo : null;\n}\nfunction isFiberMounted(fiber) {\n return getNearestMountedFiber(fiber) === fiber;\n}\nfunction isMounted(component) {\n {\n var owner = ReactCurrentOwner$3.current;\n\n if (owner !== null && owner.tag === ClassComponent) {\n var ownerFiber = owner;\n var instance = ownerFiber.stateNode;\n\n if (!instance._warnedAboutRefsInRender) {\n error('%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentNameFromFiber(ownerFiber) || 'A component');\n }\n\n instance._warnedAboutRefsInRender = true;\n }\n }\n\n var fiber = get(component);\n\n if (!fiber) {\n return false;\n }\n\n return getNearestMountedFiber(fiber) === fiber;\n}\n\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber) {\n throw new Error('Unable to find node on an unmounted component.');\n }\n}\n\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n\n if (!alternate) {\n // If there is no alternate, then we only need to check if it is mounted.\n var nearestMounted = getNearestMountedFiber(fiber);\n\n if (nearestMounted === null) {\n throw new Error('Unable to find node on an unmounted component.');\n }\n\n if (nearestMounted !== fiber) {\n return null;\n }\n\n return fiber;\n } // If we have two possible branches, we'll walk backwards up to the root\n // to see what path the root points to. On the way we may hit one of the\n // special cases and we'll deal with them.\n\n\n var a = fiber;\n var b = alternate;\n\n while (true) {\n var parentA = a.return;\n\n if (parentA === null) {\n // We're at the root.\n break;\n }\n\n var parentB = parentA.alternate;\n\n if (parentB === null) {\n // There is no alternate. This is an unusual case. Currently, it only\n // happens when a Suspense component is hidden. An extra fragment fiber\n // is inserted in between the Suspense fiber and its children. Skip\n // over this extra fragment fiber and proceed to the next parent.\n var nextParent = parentA.return;\n\n if (nextParent !== null) {\n a = b = nextParent;\n continue;\n } // If there's no parent, we're at the root.\n\n\n break;\n } // If both copies of the parent fiber point to the same child, we can\n // assume that the child is current. This happens when we bailout on low\n // priority: the bailed out fiber's child reuses the current child.\n\n\n if (parentA.child === parentB.child) {\n var child = parentA.child;\n\n while (child) {\n if (child === a) {\n // We've determined that A is the current branch.\n assertIsMounted(parentA);\n return fiber;\n }\n\n if (child === b) {\n // We've determined that B is the current branch.\n assertIsMounted(parentA);\n return alternate;\n }\n\n child = child.sibling;\n } // We should never have an alternate for any mounting node. So the only\n // way this could possibly happen is if this was unmounted, if at all.\n\n\n throw new Error('Unable to find node on an unmounted component.');\n }\n\n if (a.return !== b.return) {\n // The return pointer of A and the return pointer of B point to different\n // fibers. We assume that return pointers never criss-cross, so A must\n // belong to the child set of A.return, and B must belong to the child\n // set of B.return.\n a = parentA;\n b = parentB;\n } else {\n // The return pointers point to the same fiber. We'll have to use the\n // default, slow path: scan the child sets of each parent alternate to see\n // which child belongs to which set.\n //\n // Search parent A's child set\n var didFindChild = false;\n var _child = parentA.child;\n\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentA;\n b = parentB;\n break;\n }\n\n if (_child === b) {\n didFindChild = true;\n b = parentA;\n a = parentB;\n break;\n }\n\n _child = _child.sibling;\n }\n\n if (!didFindChild) {\n // Search parent B's child set\n _child = parentB.child;\n\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentB;\n b = parentA;\n break;\n }\n\n if (_child === b) {\n didFindChild = true;\n b = parentB;\n a = parentA;\n break;\n }\n\n _child = _child.sibling;\n }\n\n if (!didFindChild) {\n throw new Error('Child was not found in either parent set. This indicates a bug ' + 'in React related to the return pointer. Please file an issue.');\n }\n }\n }\n\n if (a.alternate !== b) {\n throw new Error(\"Return fibers should always be each others' alternates. \" + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n } // If the root is not a host container, we're in a disconnected tree. I.e.\n // unmounted.\n\n\n if (a.tag !== HostRoot) {\n throw new Error('Unable to find node on an unmounted component.');\n }\n\n if (a.stateNode.current === a) {\n // We've determined that A is the current branch.\n return fiber;\n } // Otherwise B has to be current branch.\n\n\n return alternate;\n}\nfunction findCurrentHostFiber(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n return currentParent !== null ? findCurrentHostFiberImpl(currentParent) : null;\n}\n\nfunction findCurrentHostFiberImpl(node) {\n // Next we'll drill down this component to find the first HostComponent/Text.\n var tag = node.tag;\n\n if (tag === HostComponent || (tag === HostHoistable ) || tag === HostSingleton || tag === HostText) {\n return node;\n }\n\n var child = node.child;\n\n while (child !== null) {\n var match = findCurrentHostFiberImpl(child);\n\n if (match !== null) {\n return match;\n }\n\n child = child.sibling;\n }\n\n return null;\n}\n\nfunction findCurrentHostFiberWithNoPortals(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n return currentParent !== null ? findCurrentHostFiberWithNoPortalsImpl(currentParent) : null;\n}\n\nfunction findCurrentHostFiberWithNoPortalsImpl(node) {\n // Next we'll drill down this component to find the first HostComponent/Text.\n var tag = node.tag;\n\n if (tag === HostComponent || (tag === HostHoistable ) || tag === HostSingleton || tag === HostText) {\n return node;\n }\n\n var child = node.child;\n\n while (child !== null) {\n if (child.tag !== HostPortal) {\n var match = findCurrentHostFiberWithNoPortalsImpl(child);\n\n if (match !== null) {\n return match;\n }\n }\n\n child = child.sibling;\n }\n\n return null;\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe[incompatible-use] This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar warnedAboutMissingGetChildContext;\n\n{\n warnedAboutMissingGetChildContext = {};\n}\n\nvar emptyContextObject = {};\n\n{\n Object.freeze(emptyContextObject);\n} // A cursor to the current merged context object on the stack.\n\n\nvar contextStackCursor = createCursor(emptyContextObject); // A cursor to a boolean indicating whether the context has changed.\n\nvar didPerformWorkStackCursor = createCursor(false); // Keep track of the previous context object that was on the stack.\n// We use this to get access to the parent context after we have already\n// pushed the next context provider, and now need to merge their contexts.\n\nvar previousContext = emptyContextObject;\n\nfunction getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) {\n {\n if (didPushOwnContextIfProvider && isContextProvider(Component)) {\n // If the fiber is a context provider itself, when we read its context\n // we may have already pushed its own child context on the stack. A context\n // provider should not \"see\" its own child context. Therefore we read the\n // previous (parent) context instead for a context provider.\n return previousContext;\n }\n\n return contextStackCursor.current;\n }\n}\n\nfunction cacheContext(workInProgress, unmaskedContext, maskedContext) {\n {\n var instance = workInProgress.stateNode;\n instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;\n instance.__reactInternalMemoizedMaskedChildContext = maskedContext;\n }\n}\n\nfunction getMaskedContext(workInProgress, unmaskedContext) {\n {\n var type = workInProgress.type;\n var contextTypes = type.contextTypes;\n\n if (!contextTypes) {\n return emptyContextObject;\n } // Avoid recreating masked context unless unmasked context has changed.\n // Failing to do this will result in unnecessary calls to componentWillReceiveProps.\n // This may trigger infinite loops if componentWillReceiveProps calls setState.\n\n\n var instance = workInProgress.stateNode;\n\n if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {\n return instance.__reactInternalMemoizedMaskedChildContext;\n }\n\n var context = {};\n\n for (var key in contextTypes) {\n context[key] = unmaskedContext[key];\n }\n\n {\n var name = getComponentNameFromFiber(workInProgress) || 'Unknown';\n checkPropTypes(contextTypes, context, 'context', name);\n } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // Context is created before the class component is instantiated so check for instance.\n\n\n if (instance) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return context;\n }\n}\n\nfunction hasContextChanged() {\n {\n return didPerformWorkStackCursor.current;\n }\n}\n\nfunction isContextProvider(type) {\n {\n var childContextTypes = type.childContextTypes;\n return childContextTypes !== null && childContextTypes !== undefined;\n }\n}\n\nfunction popContext(fiber) {\n {\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n }\n}\n\nfunction popTopLevelContextObject(fiber) {\n {\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n }\n}\n\nfunction pushTopLevelContextObject(fiber, context, didChange) {\n {\n if (contextStackCursor.current !== emptyContextObject) {\n throw new Error('Unexpected context found on stack. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n\n push(contextStackCursor, context, fiber);\n push(didPerformWorkStackCursor, didChange, fiber);\n }\n}\n\nfunction processChildContext(fiber, type, parentContext) {\n {\n var instance = fiber.stateNode;\n var childContextTypes = type.childContextTypes; // TODO (bvaughn) Replace this behavior with an invariant() in the future.\n // It has only been added in Fiber to match the (unintentional) behavior in Stack.\n\n if (typeof instance.getChildContext !== 'function') {\n {\n var componentName = getComponentNameFromFiber(fiber) || 'Unknown';\n\n if (!warnedAboutMissingGetChildContext[componentName]) {\n warnedAboutMissingGetChildContext[componentName] = true;\n\n error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);\n }\n }\n\n return parentContext;\n }\n\n var childContext = instance.getChildContext();\n\n for (var contextKey in childContext) {\n if (!(contextKey in childContextTypes)) {\n throw new Error((getComponentNameFromFiber(fiber) || 'Unknown') + \".getChildContext(): key \\\"\" + contextKey + \"\\\" is not defined in childContextTypes.\");\n }\n }\n\n {\n var name = getComponentNameFromFiber(fiber) || 'Unknown';\n checkPropTypes(childContextTypes, childContext, 'child context', name);\n }\n\n return assign({}, parentContext, childContext);\n }\n}\n\nfunction pushContextProvider(workInProgress) {\n {\n var instance = workInProgress.stateNode; // We push the context as early as possible to ensure stack integrity.\n // If the instance does not exist yet, we will push null at first,\n // and replace it on the stack later when invalidating the context.\n\n var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject; // Remember the parent context so we can merge with it later.\n // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.\n\n previousContext = contextStackCursor.current;\n push(contextStackCursor, memoizedMergedChildContext, workInProgress);\n push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);\n return true;\n }\n}\n\nfunction invalidateContextProvider(workInProgress, type, didChange) {\n {\n var instance = workInProgress.stateNode;\n\n if (!instance) {\n throw new Error('Expected to have an instance by this point. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n\n if (didChange) {\n // Merge parent and own context.\n // Skip this if we're not updating due to sCU.\n // This avoids unnecessarily recomputing memoized values.\n var mergedContext = processChildContext(workInProgress, type, previousContext);\n instance.__reactInternalMemoizedMergedChildContext = mergedContext; // Replace the old (or empty) context with the new one.\n // It is important to unwind the context in the reverse order.\n\n pop(didPerformWorkStackCursor, workInProgress);\n pop(contextStackCursor, workInProgress); // Now push the new context and mark that it has changed.\n\n push(contextStackCursor, mergedContext, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n } else {\n pop(didPerformWorkStackCursor, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n }\n }\n}\n\nfunction findCurrentUnmaskedContext(fiber) {\n {\n // Currently this is only used with renderSubtreeIntoContainer; not sure if it\n // makes sense elsewhere\n if (!isFiberMounted(fiber) || fiber.tag !== ClassComponent) {\n throw new Error('Expected subtree parent to be a mounted class component. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n\n var node = fiber;\n\n do {\n switch (node.tag) {\n case HostRoot:\n return node.stateNode.context;\n\n case ClassComponent:\n {\n var Component = node.type;\n\n if (isContextProvider(Component)) {\n return node.stateNode.__reactInternalMemoizedMergedChildContext;\n }\n\n break;\n }\n } // $FlowFixMe[incompatible-type] we bail out when we get a null\n\n\n node = node.return;\n } while (node !== null);\n\n throw new Error('Found unexpected detached subtree parent. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n}\n\nvar LegacyRoot = 0;\nvar ConcurrentRoot = 1;\n\n// We use the existence of the state object as an indicator that the component\n// is hidden.\nvar OffscreenVisible =\n/* */\n1;\nvar OffscreenDetached =\n/* */\n2;\nvar OffscreenPassiveEffectsConnected =\n/* */\n4;\nfunction isOffscreenManual(offscreenFiber) {\n return offscreenFiber.memoizedProps !== null && offscreenFiber.memoizedProps.mode === 'manual';\n}\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = // $FlowFixMe[method-unbinding]\ntypeof Object.is === 'function' ? Object.is : is;\n\n// This is imported by the event replaying implementation in React DOM. It's\n// in a separate file to break a circular dependency between the renderer and\n// the reconciler.\nfunction isRootDehydrated(root) {\n var currentState = root.current.memoizedState;\n return currentState.isDehydrated;\n}\n\n// Intentionally not using it yet to derisk the initial implementation, because\n// the way we push/pop these values is a bit unusual. If there's a mistake, I'd\n// rather the ids be wrong than crash the whole reconciler.\n\nvar forkStack = [];\nvar forkStackIndex = 0;\nvar treeForkProvider = null;\nvar treeForkCount = 0;\nvar idStack = [];\nvar idStackIndex = 0;\nvar treeContextProvider = null;\nvar treeContextId = 1;\nvar treeContextOverflow = '';\nfunction isForkedChild(workInProgress) {\n warnIfNotHydrating();\n return (workInProgress.flags & Forked) !== NoFlags$1;\n}\nfunction getForksAtLevel(workInProgress) {\n warnIfNotHydrating();\n return treeForkCount;\n}\nfunction getTreeId() {\n var overflow = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n var id = idWithLeadingBit & ~getLeadingBit(idWithLeadingBit);\n return id.toString(32) + overflow;\n}\nfunction pushTreeFork(workInProgress, totalChildren) {\n // This is called right after we reconcile an array (or iterator) of child\n // fibers, because that's the only place where we know how many children in\n // the whole set without doing extra work later, or storing addtional\n // information on the fiber.\n //\n // That's why this function is separate from pushTreeId — it's called during\n // the render phase of the fork parent, not the child, which is where we push\n // the other context values.\n //\n // In the Fizz implementation this is much simpler because the child is\n // rendered in the same callstack as the parent.\n //\n // It might be better to just add a `forks` field to the Fiber type. It would\n // make this module simpler.\n warnIfNotHydrating();\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n warnIfNotHydrating();\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n var baseOverflow = treeContextOverflow; // The leftmost 1 marks the end of the sequence, non-inclusive. It's not part\n // of the id; we use it to account for leading 0s.\n\n var baseLength = getBitLength(baseIdWithLeadingBit) - 1;\n var baseId = baseIdWithLeadingBit & ~(1 << baseLength);\n var slot = index + 1;\n var length = getBitLength(totalChildren) + baseLength; // 30 is the max length we can store without overflowing, taking into\n // consideration the leading 1 we use to mark the end of the sequence.\n\n if (length > 30) {\n // We overflowed the bitwise-safe range. Fall back to slower algorithm.\n // This branch assumes the length of the base id is greater than 5; it won't\n // work for smaller ids, because you need 5 bits per character.\n //\n // We encode the id in multiple steps: first the base id, then the\n // remaining digits.\n //\n // Each 5 bit sequence corresponds to a single base 32 character. So for\n // example, if the current id is 23 bits long, we can convert 20 of those\n // bits into a string of 4 characters, with 3 bits left over.\n //\n // First calculate how many bits in the base id represent a complete\n // sequence of characters.\n var numberOfOverflowBits = baseLength - baseLength % 5; // Then create a bitmask that selects only those bits.\n\n var newOverflowBits = (1 << numberOfOverflowBits) - 1; // Select the bits, and convert them to a base 32 string.\n\n var newOverflow = (baseId & newOverflowBits).toString(32); // Now we can remove those bits from the base id.\n\n var restOfBaseId = baseId >> numberOfOverflowBits;\n var restOfBaseLength = baseLength - numberOfOverflowBits; // Finally, encode the rest of the bits using the normal algorithm. Because\n // we made more room, this time it won't overflow.\n\n var restOfLength = getBitLength(totalChildren) + restOfBaseLength;\n var restOfNewBits = slot << restOfBaseLength;\n var id = restOfNewBits | restOfBaseId;\n var overflow = newOverflow + baseOverflow;\n treeContextId = 1 << restOfLength | id;\n treeContextOverflow = overflow;\n } else {\n // Normal path\n var newBits = slot << baseLength;\n\n var _id = newBits | baseId;\n\n var _overflow = baseOverflow;\n treeContextId = 1 << length | _id;\n treeContextOverflow = _overflow;\n }\n}\nfunction pushMaterializedTreeId(workInProgress) {\n warnIfNotHydrating(); // This component materialized an id. This will affect any ids that appear\n // in its children.\n\n var returnFiber = workInProgress.return;\n\n if (returnFiber !== null) {\n var numberOfForks = 1;\n var slotIndex = 0;\n pushTreeFork(workInProgress, numberOfForks);\n pushTreeId(workInProgress, numberOfForks, slotIndex);\n }\n}\n\nfunction getBitLength(number) {\n return 32 - clz32(number);\n}\n\nfunction getLeadingBit(id) {\n return 1 << getBitLength(id) - 1;\n}\n\nfunction popTreeContext(workInProgress) {\n // Restore the previous values.\n // This is a bit more complicated than other context-like modules in Fiber\n // because the same Fiber may appear on the stack multiple times and for\n // different reasons. We have to keep popping until the work-in-progress is\n // no longer at the top of the stack.\n while (workInProgress === treeForkProvider) {\n treeForkProvider = forkStack[--forkStackIndex];\n forkStack[forkStackIndex] = null;\n treeForkCount = forkStack[--forkStackIndex];\n forkStack[forkStackIndex] = null;\n }\n\n while (workInProgress === treeContextProvider) {\n treeContextProvider = idStack[--idStackIndex];\n idStack[idStackIndex] = null;\n treeContextOverflow = idStack[--idStackIndex];\n idStack[idStackIndex] = null;\n treeContextId = idStack[--idStackIndex];\n idStack[idStackIndex] = null;\n }\n}\nfunction getSuspendedTreeContext() {\n warnIfNotHydrating();\n\n if (treeContextProvider !== null) {\n return {\n id: treeContextId,\n overflow: treeContextOverflow\n };\n } else {\n return null;\n }\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n warnIfNotHydrating();\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n}\n\nfunction warnIfNotHydrating() {\n {\n if (!getIsHydrating()) {\n error('Expected to be hydrating. This is a bug in React. Please file ' + 'an issue.');\n }\n }\n}\n\n// This may have been an insertion or a hydration.\n\nvar hydrationParentFiber = null;\nvar nextHydratableInstance = null;\nvar isHydrating = false; // This flag allows for warning supression when we expect there to be mismatches\n// due to earlier mismatches or a suspended fiber.\n\nvar didSuspendOrErrorDEV = false; // Hydration errors that were thrown inside this boundary\n\nvar hydrationErrors = null;\nvar rootOrSingletonContext = false;\n\nfunction warnIfHydrating() {\n {\n if (isHydrating) {\n error('We should not be hydrating here. This is a bug in React. Please file a bug.');\n }\n }\n}\n\nfunction markDidThrowWhileHydratingDEV() {\n {\n didSuspendOrErrorDEV = true;\n }\n}\nfunction didSuspendOrErrorWhileHydratingDEV() {\n {\n return didSuspendOrErrorDEV;\n }\n}\n\nfunction enterHydrationState(fiber) {\n\n var parentInstance = fiber.stateNode.containerInfo;\n nextHydratableInstance = getFirstHydratableChildWithinContainer(parentInstance);\n hydrationParentFiber = fiber;\n isHydrating = true;\n hydrationErrors = null;\n didSuspendOrErrorDEV = false;\n rootOrSingletonContext = true;\n return true;\n}\n\nfunction reenterHydrationStateFromDehydratedSuspenseInstance(fiber, suspenseInstance, treeContext) {\n\n nextHydratableInstance = getFirstHydratableChildWithinSuspenseInstance(suspenseInstance);\n hydrationParentFiber = fiber;\n isHydrating = true;\n hydrationErrors = null;\n didSuspendOrErrorDEV = false;\n rootOrSingletonContext = false;\n\n if (treeContext !== null) {\n restoreSuspendedTreeContext(fiber, treeContext);\n }\n\n return true;\n}\n\nfunction warnUnhydratedInstance(returnFiber, instance) {\n {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n didNotHydrateInstanceWithinContainer(returnFiber.stateNode.containerInfo, instance);\n break;\n }\n\n case HostSingleton:\n case HostComponent:\n {\n var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance, // TODO: Delete this argument when we remove the legacy root API.\n isConcurrentMode);\n break;\n }\n\n case SuspenseComponent:\n {\n var suspenseState = returnFiber.memoizedState;\n if (suspenseState.dehydrated !== null) didNotHydrateInstanceWithinSuspenseInstance(suspenseState.dehydrated, instance);\n break;\n }\n }\n }\n}\n\nfunction deleteHydratableInstance(returnFiber, instance) {\n warnUnhydratedInstance(returnFiber, instance);\n var childToDelete = createFiberFromHostInstanceForDeletion();\n childToDelete.stateNode = instance;\n childToDelete.return = returnFiber;\n var deletions = returnFiber.deletions;\n\n if (deletions === null) {\n returnFiber.deletions = [childToDelete];\n returnFiber.flags |= ChildDeletion;\n } else {\n deletions.push(childToDelete);\n }\n}\n\nfunction warnNonhydratedInstance(returnFiber, fiber) {\n {\n if (didSuspendOrErrorDEV) {\n // Inside a boundary that already suspended. We're currently rendering the\n // siblings of a suspended node. The mismatch may be due to the missing\n // data, so it's probably a false positive.\n return;\n }\n\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n\n switch (fiber.tag) {\n case HostSingleton:\n case HostComponent:\n var type = fiber.type;\n didNotFindHydratableInstanceWithinContainer(parentContainer, type);\n break;\n\n case HostText:\n var text = fiber.pendingProps;\n didNotFindHydratableTextInstanceWithinContainer(parentContainer, text);\n break;\n }\n\n break;\n }\n\n case HostSingleton:\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n\n switch (fiber.tag) {\n case HostSingleton:\n case HostComponent:\n {\n var _type = fiber.type;\n var _props = fiber.pendingProps;\n var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type, _props, // TODO: Delete this argument when we remove the legacy root API.\n isConcurrentMode);\n break;\n }\n\n case HostText:\n {\n var _text = fiber.pendingProps;\n\n var _isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n\n didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text, // TODO: Delete this argument when we remove the legacy root API.\n _isConcurrentMode);\n break;\n }\n }\n\n break;\n }\n\n case SuspenseComponent:\n {\n var suspenseState = returnFiber.memoizedState;\n var _parentInstance = suspenseState.dehydrated;\n if (_parentInstance !== null) switch (fiber.tag) {\n case HostSingleton:\n case HostComponent:\n var _type2 = fiber.type;\n didNotFindHydratableInstanceWithinSuspenseInstance(_parentInstance, _type2);\n break;\n\n case HostText:\n var _text2 = fiber.pendingProps;\n didNotFindHydratableTextInstanceWithinSuspenseInstance(_parentInstance, _text2);\n break;\n }\n break;\n }\n\n default:\n return;\n }\n }\n}\n\nfunction insertNonHydratedInstance(returnFiber, fiber) {\n fiber.flags = fiber.flags & ~Hydrating | Placement;\n warnNonhydratedInstance(returnFiber, fiber);\n}\n\nfunction tryHydrateInstance(fiber, nextInstance) {\n // fiber is a HostComponent Fiber\n var instance = canHydrateInstance(nextInstance, fiber.type, fiber.pendingProps, rootOrSingletonContext);\n\n if (instance !== null) {\n fiber.stateNode = instance;\n hydrationParentFiber = fiber;\n nextHydratableInstance = getFirstHydratableChild(instance);\n rootOrSingletonContext = false;\n return true;\n }\n\n return false;\n}\n\nfunction tryHydrateText(fiber, nextInstance) {\n // fiber is a HostText Fiber\n var text = fiber.pendingProps;\n var textInstance = canHydrateTextInstance(nextInstance, text, rootOrSingletonContext);\n\n if (textInstance !== null) {\n fiber.stateNode = textInstance;\n hydrationParentFiber = fiber; // Text Instances don't have children so there's nothing to hydrate.\n\n nextHydratableInstance = null;\n return true;\n }\n\n return false;\n}\n\nfunction tryHydrateSuspense(fiber, nextInstance) {\n // fiber is a SuspenseComponent Fiber\n var suspenseInstance = canHydrateSuspenseInstance(nextInstance, rootOrSingletonContext);\n\n if (suspenseInstance !== null) {\n var suspenseState = {\n dehydrated: suspenseInstance,\n treeContext: getSuspendedTreeContext(),\n retryLane: OffscreenLane\n };\n fiber.memoizedState = suspenseState; // Store the dehydrated fragment as a child fiber.\n // This simplifies the code for getHostSibling and deleting nodes,\n // since it doesn't have to consider all Suspense boundaries and\n // check if they're dehydrated ones or not.\n\n var dehydratedFragment = createFiberFromDehydratedFragment(suspenseInstance);\n dehydratedFragment.return = fiber;\n fiber.child = dehydratedFragment;\n hydrationParentFiber = fiber; // While a Suspense Instance does have children, we won't step into\n // it during the first pass. Instead, we'll reenter it later.\n\n nextHydratableInstance = null;\n return true;\n }\n\n return false;\n}\n\nfunction shouldClientRenderOnMismatch(fiber) {\n return (fiber.mode & ConcurrentMode) !== NoMode && (fiber.flags & DidCapture) === NoFlags$1;\n}\n\nfunction throwOnHydrationMismatch(fiber) {\n throw new Error('Hydration failed because the initial UI does not match what was ' + 'rendered on the server.');\n}\n\nfunction claimHydratableSingleton(fiber) {\n {\n if (!isHydrating) {\n return;\n }\n\n var currentRootContainer = getRootHostContainer();\n var currentHostContext = getHostContext();\n var instance = fiber.stateNode = resolveSingletonInstance(fiber.type, fiber.pendingProps, currentRootContainer, currentHostContext, false);\n hydrationParentFiber = fiber;\n rootOrSingletonContext = true;\n nextHydratableInstance = getFirstHydratableChild(instance);\n }\n}\n\nfunction tryToClaimNextHydratableInstance(fiber) {\n if (!isHydrating) {\n return;\n }\n\n var initialInstance = nextHydratableInstance;\n var nextInstance = nextHydratableInstance;\n\n if (!nextInstance) {\n if (shouldClientRenderOnMismatch(fiber)) {\n warnNonhydratedInstance(hydrationParentFiber, fiber);\n throwOnHydrationMismatch();\n } // Nothing to hydrate. Make it an insertion.\n\n\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n nextHydratableInstance = initialInstance;\n return;\n }\n\n var firstAttemptedInstance = nextInstance;\n\n if (!tryHydrateInstance(fiber, nextInstance)) {\n if (shouldClientRenderOnMismatch(fiber)) {\n warnNonhydratedInstance(hydrationParentFiber, fiber);\n throwOnHydrationMismatch();\n } // If we can't hydrate this instance let's try the next one.\n // We use this as a heuristic. It's based on intuition and not data so it\n // might be flawed or unnecessary.\n\n\n nextHydratableInstance = getNextHydratableSibling(nextInstance);\n var prevHydrationParentFiber = hydrationParentFiber;\n\n if (!nextHydratableInstance || !tryHydrateInstance(fiber, nextHydratableInstance)) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n nextHydratableInstance = initialInstance;\n return;\n } // We matched the next one, we'll now assume that the first one was\n // superfluous and we'll delete it. Since we can't eagerly delete it\n // we'll have to schedule a deletion. To do that, this node needs a dummy\n // fiber associated with it.\n\n\n deleteHydratableInstance(prevHydrationParentFiber, firstAttemptedInstance);\n }\n}\n\nfunction tryToClaimNextHydratableTextInstance(fiber) {\n if (!isHydrating) {\n return;\n }\n\n var text = fiber.pendingProps;\n var isHydratable = isHydratableText(text);\n var initialInstance = nextHydratableInstance;\n var nextInstance = nextHydratableInstance;\n\n if (!nextInstance || !isHydratable) {\n // We exclude non hydrabable text because we know there are no matching hydratables.\n // We either throw or insert depending on the render mode.\n if (shouldClientRenderOnMismatch(fiber)) {\n warnNonhydratedInstance(hydrationParentFiber, fiber);\n throwOnHydrationMismatch();\n } // Nothing to hydrate. Make it an insertion.\n\n\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n nextHydratableInstance = initialInstance;\n return;\n }\n\n var firstAttemptedInstance = nextInstance;\n\n if (!tryHydrateText(fiber, nextInstance)) {\n if (shouldClientRenderOnMismatch(fiber)) {\n warnNonhydratedInstance(hydrationParentFiber, fiber);\n throwOnHydrationMismatch();\n } // If we can't hydrate this instance let's try the next one.\n // We use this as a heuristic. It's based on intuition and not data so it\n // might be flawed or unnecessary.\n\n\n nextHydratableInstance = getNextHydratableSibling(nextInstance);\n var prevHydrationParentFiber = hydrationParentFiber;\n\n if (!nextHydratableInstance || !tryHydrateText(fiber, nextHydratableInstance)) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n nextHydratableInstance = initialInstance;\n return;\n } // We matched the next one, we'll now assume that the first one was\n // superfluous and we'll delete it. Since we can't eagerly delete it\n // we'll have to schedule a deletion. To do that, this node needs a dummy\n // fiber associated with it.\n\n\n deleteHydratableInstance(prevHydrationParentFiber, firstAttemptedInstance);\n }\n}\n\nfunction tryToClaimNextHydratableSuspenseInstance(fiber) {\n if (!isHydrating) {\n return;\n }\n\n var initialInstance = nextHydratableInstance;\n var nextInstance = nextHydratableInstance;\n\n if (!nextInstance) {\n if (shouldClientRenderOnMismatch(fiber)) {\n warnNonhydratedInstance(hydrationParentFiber, fiber);\n throwOnHydrationMismatch();\n } // Nothing to hydrate. Make it an insertion.\n\n\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n nextHydratableInstance = initialInstance;\n return;\n }\n\n var firstAttemptedInstance = nextInstance;\n\n if (!tryHydrateSuspense(fiber, nextInstance)) {\n if (shouldClientRenderOnMismatch(fiber)) {\n warnNonhydratedInstance(hydrationParentFiber, fiber);\n throwOnHydrationMismatch();\n } // If we can't hydrate this instance let's try the next one.\n // We use this as a heuristic. It's based on intuition and not data so it\n // might be flawed or unnecessary.\n\n\n nextHydratableInstance = getNextHydratableSibling(nextInstance);\n var prevHydrationParentFiber = hydrationParentFiber;\n\n if (!nextHydratableInstance || !tryHydrateSuspense(fiber, nextHydratableInstance)) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n nextHydratableInstance = initialInstance;\n return;\n } // We matched the next one, we'll now assume that the first one was\n // superfluous and we'll delete it. Since we can't eagerly delete it\n // we'll have to schedule a deletion. To do that, this node needs a dummy\n // fiber associated with it.\n\n\n deleteHydratableInstance(prevHydrationParentFiber, firstAttemptedInstance);\n }\n}\n\nfunction tryToClaimNextHydratableFormMarkerInstance(fiber) {\n if (!isHydrating) {\n return false;\n }\n\n if (nextHydratableInstance) {\n var markerInstance = canHydrateFormStateMarker(nextHydratableInstance, rootOrSingletonContext);\n\n if (markerInstance) {\n // Found the marker instance.\n nextHydratableInstance = getNextHydratableSibling(markerInstance); // Return true if this marker instance should use the state passed\n // to hydrateRoot.\n // TODO: As an optimization, Fizz should only emit these markers if form\n // state is passed at the root.\n\n return isFormStateMarkerMatching(markerInstance);\n }\n } // Should have found a marker instance. Throw an error to trigger client\n // rendering. We don't bother to check if we're in a concurrent root because\n // useFormState is a new API, so backwards compat is not an issue.\n\n\n throwOnHydrationMismatch();\n return false;\n}\n\nfunction prepareToHydrateHostInstance(fiber, hostContext) {\n\n var instance = fiber.stateNode;\n var shouldWarnIfMismatchDev = !didSuspendOrErrorDEV;\n hydrateInstance(instance, fiber.type, fiber.memoizedProps, hostContext, fiber, shouldWarnIfMismatchDev);\n}\n\nfunction prepareToHydrateHostTextInstance(fiber) {\n\n var textInstance = fiber.stateNode;\n var textContent = fiber.memoizedProps;\n var shouldWarnIfMismatchDev = !didSuspendOrErrorDEV;\n var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);\n\n if (shouldUpdate) {\n // We assume that prepareToHydrateHostTextInstance is called in a context where the\n // hydration parent is the parent host component of this host text.\n var returnFiber = hydrationParentFiber;\n\n if (returnFiber !== null) {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent, // TODO: Delete this argument when we remove the legacy root API.\n isConcurrentMode, shouldWarnIfMismatchDev);\n\n if (isConcurrentMode && enableClientRenderFallbackOnTextMismatch) {\n // In concurrent mode we never update the mismatched text,\n // even if the error was ignored.\n return false;\n }\n\n break;\n }\n\n case HostSingleton:\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n\n var _isConcurrentMode2 = (returnFiber.mode & ConcurrentMode) !== NoMode;\n\n didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent, // TODO: Delete this argument when we remove the legacy root API.\n _isConcurrentMode2, shouldWarnIfMismatchDev);\n\n if (_isConcurrentMode2 && enableClientRenderFallbackOnTextMismatch) {\n // In concurrent mode we never update the mismatched text,\n // even if the error was ignored.\n return false;\n }\n\n break;\n }\n }\n }\n }\n\n return shouldUpdate;\n}\n\nfunction prepareToHydrateHostSuspenseInstance(fiber) {\n\n var suspenseState = fiber.memoizedState;\n var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;\n\n if (!suspenseInstance) {\n throw new Error('Expected to have a hydrated suspense instance. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n\n hydrateSuspenseInstance(suspenseInstance, fiber);\n}\n\nfunction skipPastDehydratedSuspenseInstance(fiber) {\n\n var suspenseState = fiber.memoizedState;\n var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;\n\n if (!suspenseInstance) {\n throw new Error('Expected to have a hydrated suspense instance. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n\n return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);\n}\n\nfunction popToNextHostParent(fiber) {\n hydrationParentFiber = fiber.return;\n\n while (hydrationParentFiber) {\n switch (hydrationParentFiber.tag) {\n case HostRoot:\n case HostSingleton:\n rootOrSingletonContext = true;\n return;\n\n case HostComponent:\n case SuspenseComponent:\n rootOrSingletonContext = false;\n return;\n\n default:\n hydrationParentFiber = hydrationParentFiber.return;\n }\n }\n}\n\nfunction popHydrationState(fiber) {\n\n if (fiber !== hydrationParentFiber) {\n // We're deeper than the current hydration context, inside an inserted\n // tree.\n return false;\n }\n\n if (!isHydrating) {\n // If we're not currently hydrating but we're in a hydration context, then\n // we were an insertion and now need to pop up reenter hydration of our\n // siblings.\n popToNextHostParent(fiber);\n isHydrating = true;\n return false;\n }\n\n var shouldClear = false;\n\n {\n // With float we never clear the Root, or Singleton instances. We also do not clear Instances\n // that have singleton text content\n if (fiber.tag !== HostRoot && fiber.tag !== HostSingleton && !(fiber.tag === HostComponent && (!shouldDeleteUnhydratedTailInstances(fiber.type) || shouldSetTextContent(fiber.type, fiber.memoizedProps)))) {\n shouldClear = true;\n }\n }\n\n if (shouldClear) {\n var nextInstance = nextHydratableInstance;\n\n if (nextInstance) {\n if (shouldClientRenderOnMismatch(fiber)) {\n warnIfUnhydratedTailNodes(fiber);\n throwOnHydrationMismatch();\n } else {\n while (nextInstance) {\n deleteHydratableInstance(fiber, nextInstance);\n nextInstance = getNextHydratableSibling(nextInstance);\n }\n }\n }\n }\n\n popToNextHostParent(fiber);\n\n if (fiber.tag === SuspenseComponent) {\n nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber);\n } else {\n nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;\n }\n\n return true;\n}\n\nfunction hasUnhydratedTailNodes() {\n return isHydrating && nextHydratableInstance !== null;\n}\n\nfunction warnIfUnhydratedTailNodes(fiber) {\n var nextInstance = nextHydratableInstance;\n\n while (nextInstance) {\n warnUnhydratedInstance(fiber, nextInstance);\n nextInstance = getNextHydratableSibling(nextInstance);\n }\n}\n\nfunction resetHydrationState() {\n\n hydrationParentFiber = null;\n nextHydratableInstance = null;\n isHydrating = false;\n didSuspendOrErrorDEV = false;\n}\n\nfunction upgradeHydrationErrorsToRecoverable() {\n if (hydrationErrors !== null) {\n // Successfully completed a forced client render. The errors that occurred\n // during the hydration attempt are now recovered. We will log them in\n // commit phase, once the entire tree has finished.\n queueRecoverableErrors(hydrationErrors);\n hydrationErrors = null;\n }\n}\n\nfunction getIsHydrating() {\n return isHydrating;\n}\n\nfunction queueHydrationError(error) {\n if (hydrationErrors === null) {\n hydrationErrors = [error];\n } else {\n hydrationErrors.push(error);\n }\n}\n\n// we wait until the current render is over (either finished or interrupted)\n// before adding it to the fiber/hook queue. Push to this array so we can\n// access the queue, fiber, update, et al later.\n\nvar concurrentQueues = [];\nvar concurrentQueuesIndex = 0;\nvar concurrentlyUpdatedLanes = NoLanes;\nfunction finishQueueingConcurrentUpdates() {\n var endIndex = concurrentQueuesIndex;\n concurrentQueuesIndex = 0;\n concurrentlyUpdatedLanes = NoLanes;\n var i = 0;\n\n while (i < endIndex) {\n var fiber = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var queue = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var update = concurrentQueues[i];\n concurrentQueues[i++] = null;\n var lane = concurrentQueues[i];\n concurrentQueues[i++] = null;\n\n if (queue !== null && update !== null) {\n var pending = queue.pending;\n\n if (pending === null) {\n // This is the first update. Create a circular list.\n update.next = update;\n } else {\n update.next = pending.next;\n pending.next = update;\n }\n\n queue.pending = update;\n }\n\n if (lane !== NoLane) {\n markUpdateLaneFromFiberToRoot(fiber, update, lane);\n }\n }\n}\nfunction getConcurrentlyUpdatedLanes() {\n return concurrentlyUpdatedLanes;\n}\n\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n // Don't update the `childLanes` on the return path yet. If we already in\n // the middle of rendering, wait until after it has completed.\n concurrentQueues[concurrentQueuesIndex++] = fiber;\n concurrentQueues[concurrentQueuesIndex++] = queue;\n concurrentQueues[concurrentQueuesIndex++] = update;\n concurrentQueues[concurrentQueuesIndex++] = lane;\n concurrentlyUpdatedLanes = mergeLanes(concurrentlyUpdatedLanes, lane); // The fiber's `lane` field is used in some places to check if any work is\n // scheduled, to perform an eager bailout, so we need to update it immediately.\n // TODO: We should probably move this to the \"shared\" queue instead.\n\n fiber.lanes = mergeLanes(fiber.lanes, lane);\n var alternate = fiber.alternate;\n\n if (alternate !== null) {\n alternate.lanes = mergeLanes(alternate.lanes, lane);\n }\n}\n\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n var concurrentQueue = queue;\n var concurrentUpdate = update;\n enqueueUpdate$1(fiber, concurrentQueue, concurrentUpdate, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentHookUpdateAndEagerlyBailout(fiber, queue, update) {\n // This function is used to queue an update that doesn't need a rerender. The\n // only reason we queue it is in case there's a subsequent higher priority\n // update that causes it to be rebased.\n var lane = NoLane;\n var concurrentQueue = queue;\n var concurrentUpdate = update;\n enqueueUpdate$1(fiber, concurrentQueue, concurrentUpdate, lane); // Usually we can rely on the upcoming render phase to process the concurrent\n // queue. However, since this is a bail out, we're not scheduling any work\n // here. So the update we just queued will leak until something else happens\n // to schedule work (if ever).\n //\n // Check if we're currently in the middle of rendering a tree, and if not,\n // process the queue immediately to prevent a leak.\n\n var isConcurrentlyRendering = getWorkInProgressRoot() !== null;\n\n if (!isConcurrentlyRendering) {\n finishQueueingConcurrentUpdates();\n }\n}\nfunction enqueueConcurrentClassUpdate(fiber, queue, update, lane) {\n var concurrentQueue = queue;\n var concurrentUpdate = update;\n enqueueUpdate$1(fiber, concurrentQueue, concurrentUpdate, lane);\n return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n enqueueUpdate$1(fiber, null, null, lane);\n return getRootForUpdatedFiber(fiber);\n} // Calling this function outside this module should only be done for backwards\n// compatibility and should always be accompanied by a warning.\n\nfunction unsafe_markUpdateLaneFromFiberToRoot(sourceFiber, lane) {\n // NOTE: For Hyrum's Law reasons, if an infinite update loop is detected, it\n // should throw before `markUpdateLaneFromFiberToRoot` is called. But this is\n // undefined behavior and we can change it if we need to; it just so happens\n // that, at the time of this writing, there's an internal product test that\n // happens to rely on this.\n var root = getRootForUpdatedFiber(sourceFiber);\n markUpdateLaneFromFiberToRoot(sourceFiber, null, lane);\n return root;\n}\n\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n // Update the source fiber's lanes\n sourceFiber.lanes = mergeLanes(sourceFiber.lanes, lane);\n var alternate = sourceFiber.alternate;\n\n if (alternate !== null) {\n alternate.lanes = mergeLanes(alternate.lanes, lane);\n } // Walk the parent path to the root and update the child lanes.\n\n\n var isHidden = false;\n var parent = sourceFiber.return;\n var node = sourceFiber;\n\n while (parent !== null) {\n parent.childLanes = mergeLanes(parent.childLanes, lane);\n alternate = parent.alternate;\n\n if (alternate !== null) {\n alternate.childLanes = mergeLanes(alternate.childLanes, lane);\n }\n\n if (parent.tag === OffscreenComponent) {\n // Check if this offscreen boundary is currently hidden.\n //\n // The instance may be null if the Offscreen parent was unmounted. Usually\n // the parent wouldn't be reachable in that case because we disconnect\n // fibers from the tree when they are deleted. However, there's a weird\n // edge case where setState is called on a fiber that was interrupted\n // before it ever mounted. Because it never mounts, it also never gets\n // deleted. Because it never gets deleted, its return pointer never gets\n // disconnected. Which means it may be attached to a deleted Offscreen\n // parent node. (This discovery suggests it may be better for memory usage\n // if we don't attach the `return` pointer until the commit phase, though\n // in order to do that we'd need some other way to track the return\n // pointer during the initial render, like on the stack.)\n //\n // This case is always accompanied by a warning, but we still need to\n // account for it. (There may be other cases that we haven't discovered,\n // too.)\n var offscreenInstance = parent.stateNode;\n\n if (offscreenInstance !== null && !(offscreenInstance._visibility & OffscreenVisible)) {\n isHidden = true;\n }\n }\n\n node = parent;\n parent = parent.return;\n }\n\n if (isHidden && update !== null && node.tag === HostRoot) {\n var root = node.stateNode;\n markHiddenUpdate(root, update, lane);\n }\n}\n\nfunction getRootForUpdatedFiber(sourceFiber) {\n // TODO: We will detect and infinite update loop and throw even if this fiber\n // has already unmounted. This isn't really necessary but it happens to be the\n // current behavior we've used for several release cycles. Consider not\n // performing this check if the updated fiber already unmounted, since it's\n // not possible for that to cause an infinite update loop.\n throwIfInfiniteUpdateLoopDetected(); // When a setState happens, we must ensure the root is scheduled. Because\n // update queues do not have a backpointer to the root, the only way to do\n // this currently is to walk up the return path. This used to not be a big\n // deal because we would have to walk up the return path to set\n // the `childLanes`, anyway, but now those two traversals happen at\n // different times.\n // TODO: Consider adding a `root` backpointer on the update queue.\n\n detectUpdateOnUnmountedFiber(sourceFiber, sourceFiber);\n var node = sourceFiber;\n var parent = node.return;\n\n while (parent !== null) {\n detectUpdateOnUnmountedFiber(sourceFiber, node);\n node = parent;\n parent = node.return;\n }\n\n return node.tag === HostRoot ? node.stateNode : null;\n}\n\nfunction detectUpdateOnUnmountedFiber(sourceFiber, parent) {\n {\n var alternate = parent.alternate;\n\n if (alternate === null && (parent.flags & (Placement | Hydrating)) !== NoFlags$1) {\n warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);\n }\n }\n}\n\nvar UpdateState = 0;\nvar ReplaceState = 1;\nvar ForceUpdate = 2;\nvar CaptureUpdate = 3; // Global state that is reset at the beginning of calling `processUpdateQueue`.\n// It should only be read right after calling `processUpdateQueue`, via\n// `checkHasForceUpdateAfterProcessing`.\n\nvar hasForceUpdate = false;\nvar didWarnUpdateInsideUpdate;\nvar currentlyProcessingQueue;\n\n{\n didWarnUpdateInsideUpdate = false;\n currentlyProcessingQueue = null;\n}\n\nfunction initializeUpdateQueue(fiber) {\n var queue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: {\n pending: null,\n lanes: NoLanes,\n hiddenCallbacks: null\n },\n callbacks: null\n };\n fiber.updateQueue = queue;\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n // Clone the update queue from current. Unless it's already a clone.\n var queue = workInProgress.updateQueue;\n var currentQueue = current.updateQueue;\n\n if (queue === currentQueue) {\n var clone = {\n baseState: currentQueue.baseState,\n firstBaseUpdate: currentQueue.firstBaseUpdate,\n lastBaseUpdate: currentQueue.lastBaseUpdate,\n shared: currentQueue.shared,\n callbacks: null\n };\n workInProgress.updateQueue = clone;\n }\n}\nfunction createUpdate(lane) {\n var update = {\n lane: lane,\n tag: UpdateState,\n payload: null,\n callback: null,\n next: null\n };\n return update;\n}\nfunction enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n\n if (updateQueue === null) {\n // Only occurs if the fiber has been unmounted.\n return null;\n }\n\n var sharedQueue = updateQueue.shared;\n\n {\n if (currentlyProcessingQueue === sharedQueue && !didWarnUpdateInsideUpdate) {\n var componentName = getComponentNameFromFiber(fiber);\n\n error('An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.\\n\\nPlease update the following component: %s', componentName);\n\n didWarnUpdateInsideUpdate = true;\n }\n }\n\n if (isUnsafeClassRenderPhaseUpdate()) {\n // This is an unsafe render phase update. Add directly to the update\n // queue so we can process it immediately during the current render.\n var pending = sharedQueue.pending;\n\n if (pending === null) {\n // This is the first update. Create a circular list.\n update.next = update;\n } else {\n update.next = pending.next;\n pending.next = update;\n }\n\n sharedQueue.pending = update; // Update the childLanes even though we're most likely already rendering\n // this fiber. This is for backwards compatibility in the case where you\n // update a different component during render phase than the one that is\n // currently renderings (a pattern that is accompanied by a warning).\n\n return unsafe_markUpdateLaneFromFiberToRoot(fiber, lane);\n } else {\n return enqueueConcurrentClassUpdate(fiber, sharedQueue, update, lane);\n }\n}\nfunction entangleTransitions(root, fiber, lane) {\n var updateQueue = fiber.updateQueue;\n\n if (updateQueue === null) {\n // Only occurs if the fiber has been unmounted.\n return;\n }\n\n var sharedQueue = updateQueue.shared;\n\n if (isTransitionLane(lane)) {\n var queueLanes = sharedQueue.lanes; // If any entangled lanes are no longer pending on the root, then they must\n // have finished. We can remove them from the shared queue, which represents\n // a superset of the actually pending lanes. In some cases we may entangle\n // more than we need to, but that's OK. In fact it's worse if we *don't*\n // entangle when we should.\n\n queueLanes = intersectLanes(queueLanes, root.pendingLanes); // Entangle the new transition lane with the other transition lanes.\n\n var newQueueLanes = mergeLanes(queueLanes, lane);\n sharedQueue.lanes = newQueueLanes; // Even if queue.lanes already include lane, we don't know for certain if\n // the lane finished since the last time we entangled it. So we need to\n // entangle it again, just to be sure.\n\n markRootEntangled(root, newQueueLanes);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n // Captured updates are updates that are thrown by a child during the render\n // phase. They should be discarded if the render is aborted. Therefore,\n // we should only put them on the work-in-progress queue, not the current one.\n var queue = workInProgress.updateQueue; // Check if the work-in-progress queue is a clone.\n\n var current = workInProgress.alternate;\n\n if (current !== null) {\n var currentQueue = current.updateQueue;\n\n if (queue === currentQueue) {\n // The work-in-progress queue is the same as current. This happens when\n // we bail out on a parent fiber that then captures an error thrown by\n // a child. Since we want to append the update only to the work-in\n // -progress queue, we need to clone the updates. We usually clone during\n // processUpdateQueue, but that didn't happen in this case because we\n // skipped over the parent when we bailed out.\n var newFirst = null;\n var newLast = null;\n var firstBaseUpdate = queue.firstBaseUpdate;\n\n if (firstBaseUpdate !== null) {\n // Loop through the updates and clone them.\n var update = firstBaseUpdate;\n\n do {\n var clone = {\n lane: update.lane,\n tag: update.tag,\n payload: update.payload,\n // When this update is rebased, we should not fire its\n // callback again.\n callback: null,\n next: null\n };\n\n if (newLast === null) {\n newFirst = newLast = clone;\n } else {\n newLast.next = clone;\n newLast = clone;\n } // $FlowFixMe[incompatible-type] we bail out when we get a null\n\n\n update = update.next;\n } while (update !== null); // Append the captured update the end of the cloned list.\n\n\n if (newLast === null) {\n newFirst = newLast = capturedUpdate;\n } else {\n newLast.next = capturedUpdate;\n newLast = capturedUpdate;\n }\n } else {\n // There are no base updates.\n newFirst = newLast = capturedUpdate;\n }\n\n queue = {\n baseState: currentQueue.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: currentQueue.shared,\n callbacks: currentQueue.callbacks\n };\n workInProgress.updateQueue = queue;\n return;\n }\n } // Append the update to the end of the list.\n\n\n var lastBaseUpdate = queue.lastBaseUpdate;\n\n if (lastBaseUpdate === null) {\n queue.firstBaseUpdate = capturedUpdate;\n } else {\n lastBaseUpdate.next = capturedUpdate;\n }\n\n queue.lastBaseUpdate = capturedUpdate;\n}\n\nfunction getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) {\n switch (update.tag) {\n case ReplaceState:\n {\n var payload = update.payload;\n\n if (typeof payload === 'function') {\n // Updater function\n {\n enterDisallowedContextReadInDEV();\n }\n\n var nextState = payload.call(instance, prevState, nextProps);\n\n {\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n payload.call(instance, prevState, nextProps);\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n exitDisallowedContextReadInDEV();\n }\n\n return nextState;\n } // State object\n\n\n return payload;\n }\n\n case CaptureUpdate:\n {\n workInProgress.flags = workInProgress.flags & ~ShouldCapture | DidCapture;\n }\n // Intentional fallthrough\n\n case UpdateState:\n {\n var _payload = update.payload;\n var partialState;\n\n if (typeof _payload === 'function') {\n // Updater function\n {\n enterDisallowedContextReadInDEV();\n }\n\n partialState = _payload.call(instance, prevState, nextProps);\n\n {\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n _payload.call(instance, prevState, nextProps);\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n exitDisallowedContextReadInDEV();\n }\n } else {\n // Partial state object\n partialState = _payload;\n }\n\n if (partialState === null || partialState === undefined) {\n // Null and undefined are treated as no-ops.\n return prevState;\n } // Merge the partial state and the previous state.\n\n\n return assign({}, prevState, partialState);\n }\n\n case ForceUpdate:\n {\n hasForceUpdate = true;\n return prevState;\n }\n }\n\n return prevState;\n}\n\nfunction processUpdateQueue(workInProgress, props, instance, renderLanes) {\n // This is always non-null on a ClassComponent or HostRoot\n var queue = workInProgress.updateQueue;\n hasForceUpdate = false;\n\n {\n currentlyProcessingQueue = queue.shared;\n }\n\n var firstBaseUpdate = queue.firstBaseUpdate;\n var lastBaseUpdate = queue.lastBaseUpdate; // Check if there are pending updates. If so, transfer them to the base queue.\n\n var pendingQueue = queue.shared.pending;\n\n if (pendingQueue !== null) {\n queue.shared.pending = null; // The pending queue is circular. Disconnect the pointer between first\n // and last so that it's non-circular.\n\n var lastPendingUpdate = pendingQueue;\n var firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null; // Append pending updates to base queue\n\n if (lastBaseUpdate === null) {\n firstBaseUpdate = firstPendingUpdate;\n } else {\n lastBaseUpdate.next = firstPendingUpdate;\n }\n\n lastBaseUpdate = lastPendingUpdate; // If there's a current queue, and it's different from the base queue, then\n // we need to transfer the updates to that queue, too. Because the base\n // queue is a singly-linked list with no cycles, we can append to both\n // lists and take advantage of structural sharing.\n // TODO: Pass `current` as argument\n\n var current = workInProgress.alternate;\n\n if (current !== null) {\n // This is always non-null on a ClassComponent or HostRoot\n var currentQueue = current.updateQueue;\n var currentLastBaseUpdate = currentQueue.lastBaseUpdate;\n\n if (currentLastBaseUpdate !== lastBaseUpdate) {\n if (currentLastBaseUpdate === null) {\n currentQueue.firstBaseUpdate = firstPendingUpdate;\n } else {\n currentLastBaseUpdate.next = firstPendingUpdate;\n }\n\n currentQueue.lastBaseUpdate = lastPendingUpdate;\n }\n }\n } // These values may change as we process the queue.\n\n\n if (firstBaseUpdate !== null) {\n // Iterate through the list of updates to compute the result.\n var newState = queue.baseState; // TODO: Don't need to accumulate this. Instead, we can remove renderLanes\n // from the original lanes.\n\n var newLanes = NoLanes;\n var newBaseState = null;\n var newFirstBaseUpdate = null;\n var newLastBaseUpdate = null;\n var update = firstBaseUpdate;\n\n do {\n // An extra OffscreenLane bit is added to updates that were made to\n // a hidden tree, so that we can distinguish them from updates that were\n // already there when the tree was hidden.\n var updateLane = removeLanes(update.lane, OffscreenLane);\n var isHiddenUpdate = updateLane !== update.lane; // Check if this update was made while the tree was hidden. If so, then\n // it's not a \"base\" update and we should disregard the extra base lanes\n // that were added to renderLanes when we entered the Offscreen tree.\n\n var shouldSkipUpdate = isHiddenUpdate ? !isSubsetOfLanes(getWorkInProgressRootRenderLanes(), updateLane) : !isSubsetOfLanes(renderLanes, updateLane);\n\n if (shouldSkipUpdate) {\n // Priority is insufficient. Skip this update. If this is the first\n // skipped update, the previous update/state is the new base\n // update/state.\n var clone = {\n lane: updateLane,\n tag: update.tag,\n payload: update.payload,\n callback: update.callback,\n next: null\n };\n\n if (newLastBaseUpdate === null) {\n newFirstBaseUpdate = newLastBaseUpdate = clone;\n newBaseState = newState;\n } else {\n newLastBaseUpdate = newLastBaseUpdate.next = clone;\n } // Update the remaining priority in the queue.\n\n\n newLanes = mergeLanes(newLanes, updateLane);\n } else {\n // This update does have sufficient priority.\n if (newLastBaseUpdate !== null) {\n var _clone = {\n // This update is going to be committed so we never want uncommit\n // it. Using NoLane works because 0 is a subset of all bitmasks, so\n // this will never be skipped by the check above.\n lane: NoLane,\n tag: update.tag,\n payload: update.payload,\n // When this update is rebased, we should not fire its\n // callback again.\n callback: null,\n next: null\n };\n newLastBaseUpdate = newLastBaseUpdate.next = _clone;\n } // Process this update.\n\n\n newState = getStateFromUpdate(workInProgress, queue, update, newState, props, instance);\n var callback = update.callback;\n\n if (callback !== null) {\n workInProgress.flags |= Callback;\n\n if (isHiddenUpdate) {\n workInProgress.flags |= Visibility;\n }\n\n var callbacks = queue.callbacks;\n\n if (callbacks === null) {\n queue.callbacks = [callback];\n } else {\n callbacks.push(callback);\n }\n }\n } // $FlowFixMe[incompatible-type] we bail out when we get a null\n\n\n update = update.next;\n\n if (update === null) {\n pendingQueue = queue.shared.pending;\n\n if (pendingQueue === null) {\n break;\n } else {\n // An update was scheduled from inside a reducer. Add the new\n // pending updates to the end of the list and keep processing.\n var _lastPendingUpdate = pendingQueue; // Intentionally unsound. Pending updates form a circular list, but we\n // unravel them when transferring them to the base queue.\n\n var _firstPendingUpdate = _lastPendingUpdate.next;\n _lastPendingUpdate.next = null;\n update = _firstPendingUpdate;\n queue.lastBaseUpdate = _lastPendingUpdate;\n queue.shared.pending = null;\n }\n }\n } while (true);\n\n if (newLastBaseUpdate === null) {\n newBaseState = newState;\n }\n\n queue.baseState = newBaseState;\n queue.firstBaseUpdate = newFirstBaseUpdate;\n queue.lastBaseUpdate = newLastBaseUpdate;\n\n if (firstBaseUpdate === null) {\n // `queue.lanes` is used for entangling transitions. We can set it back to\n // zero once the queue is empty.\n queue.shared.lanes = NoLanes;\n } // Set the remaining expiration time to be whatever is remaining in the queue.\n // This should be fine because the only two other things that contribute to\n // expiration time are props and context. We're already in the middle of the\n // begin phase by the time we start processing the queue, so we've already\n // dealt with the props. Context in components that specify\n // shouldComponentUpdate is tricky; but we'll have to account for\n // that regardless.\n\n\n markSkippedUpdateLanes(newLanes);\n workInProgress.lanes = newLanes;\n workInProgress.memoizedState = newState;\n }\n\n {\n currentlyProcessingQueue = null;\n }\n}\n\nfunction callCallback(callback, context) {\n if (typeof callback !== 'function') {\n throw new Error('Invalid argument passed as callback. Expected a function. Instead ' + (\"received: \" + callback));\n }\n\n callback.call(context);\n}\n\nfunction resetHasForceUpdateBeforeProcessing() {\n hasForceUpdate = false;\n}\nfunction checkHasForceUpdateAfterProcessing() {\n return hasForceUpdate;\n}\nfunction deferHiddenCallbacks(updateQueue) {\n // When an update finishes on a hidden component, its callback should not\n // be fired until/unless the component is made visible again. Stash the\n // callback on the shared queue object so it can be fired later.\n var newHiddenCallbacks = updateQueue.callbacks;\n\n if (newHiddenCallbacks !== null) {\n var existingHiddenCallbacks = updateQueue.shared.hiddenCallbacks;\n\n if (existingHiddenCallbacks === null) {\n updateQueue.shared.hiddenCallbacks = newHiddenCallbacks;\n } else {\n updateQueue.shared.hiddenCallbacks = existingHiddenCallbacks.concat(newHiddenCallbacks);\n }\n }\n}\nfunction commitHiddenCallbacks(updateQueue, context) {\n // This component is switching from hidden -> visible. Commit any callbacks\n // that were previously deferred.\n var hiddenCallbacks = updateQueue.shared.hiddenCallbacks;\n\n if (hiddenCallbacks !== null) {\n updateQueue.shared.hiddenCallbacks = null;\n\n for (var i = 0; i < hiddenCallbacks.length; i++) {\n var callback = hiddenCallbacks[i];\n callCallback(callback, context);\n }\n }\n}\nfunction commitCallbacks(updateQueue, context) {\n var callbacks = updateQueue.callbacks;\n\n if (callbacks !== null) {\n updateQueue.callbacks = null;\n\n for (var i = 0; i < callbacks.length; i++) {\n var callback = callbacks[i];\n callCallback(callback, context);\n }\n }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\n\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n } // Test for A's keys different from B.\n\n\n for (var i = 0; i < keysA.length; i++) {\n var currentKey = keysA[i];\n\n if (!hasOwnProperty.call(objB, currentKey) || // $FlowFixMe[incompatible-use] lost refinement of `objB`\n !objectIs(objA[currentKey], objB[currentKey])) {\n return false;\n }\n }\n\n return true;\n}\n\nvar ReactStrictModeWarnings = {\n recordUnsafeLifecycleWarnings: function (fiber, instance) {},\n flushPendingUnsafeLifecycleWarnings: function () {},\n recordLegacyContextWarning: function (fiber, instance) {},\n flushLegacyContextWarning: function () {},\n discardPendingWarnings: function () {}\n};\n\n{\n var findStrictRoot = function (fiber) {\n var maybeStrictRoot = null;\n var node = fiber;\n\n while (node !== null) {\n if (node.mode & StrictLegacyMode) {\n maybeStrictRoot = node;\n }\n\n node = node.return;\n }\n\n return maybeStrictRoot;\n };\n\n var setToSortedString = function (set) {\n var array = [];\n set.forEach(function (value) {\n array.push(value);\n });\n return array.sort().join(', ');\n };\n\n var pendingComponentWillMountWarnings = [];\n var pendingUNSAFE_ComponentWillMountWarnings = [];\n var pendingComponentWillReceivePropsWarnings = [];\n var pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n var pendingComponentWillUpdateWarnings = [];\n var pendingUNSAFE_ComponentWillUpdateWarnings = []; // Tracks components we have already warned about.\n\n var didWarnAboutUnsafeLifecycles = new Set();\n\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) {\n // Dedupe strategy: Warn once per component.\n if (didWarnAboutUnsafeLifecycles.has(fiber.type)) {\n return;\n }\n\n if (typeof instance.componentWillMount === 'function' && // Don't warn about react-lifecycles-compat polyfilled components.\n instance.componentWillMount.__suppressDeprecationWarning !== true) {\n pendingComponentWillMountWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillMount === 'function') {\n pendingUNSAFE_ComponentWillMountWarnings.push(fiber);\n }\n\n if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n pendingComponentWillReceivePropsWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber);\n }\n\n if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n pendingComponentWillUpdateWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillUpdate === 'function') {\n pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber);\n }\n };\n\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n // We do an initial pass to gather component names\n var componentWillMountUniqueNames = new Set();\n\n if (pendingComponentWillMountWarnings.length > 0) {\n pendingComponentWillMountWarnings.forEach(function (fiber) {\n componentWillMountUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillMountWarnings = [];\n }\n\n var UNSAFE_componentWillMountUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) {\n pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n UNSAFE_componentWillMountUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillMountWarnings = [];\n }\n\n var componentWillReceivePropsUniqueNames = new Set();\n\n if (pendingComponentWillReceivePropsWarnings.length > 0) {\n pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n componentWillReceivePropsUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillReceivePropsWarnings = [];\n }\n\n var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) {\n pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) {\n UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n }\n\n var componentWillUpdateUniqueNames = new Set();\n\n if (pendingComponentWillUpdateWarnings.length > 0) {\n pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n componentWillUpdateUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillUpdateWarnings = [];\n }\n\n var UNSAFE_componentWillUpdateUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) {\n pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n UNSAFE_componentWillUpdateUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n } // Finally, we flush all the warnings\n // UNSAFE_ ones before the deprecated ones, since they'll be 'louder'\n\n\n if (UNSAFE_componentWillMountUniqueNames.size > 0) {\n var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames);\n\n error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '\\nPlease update the following components: %s', sortedNames);\n }\n\n if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) {\n var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames);\n\n error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, \" + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\\n' + '\\nPlease update the following components: %s', _sortedNames);\n }\n\n if (UNSAFE_componentWillUpdateUniqueNames.size > 0) {\n var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames);\n\n error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '\\nPlease update the following components: %s', _sortedNames2);\n }\n\n if (componentWillMountUniqueNames.size > 0) {\n var _sortedNames3 = setToSortedString(componentWillMountUniqueNames);\n\n warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames3);\n }\n\n if (componentWillReceivePropsUniqueNames.size > 0) {\n var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);\n\n warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, refactor your \" + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames4);\n }\n\n if (componentWillUpdateUniqueNames.size > 0) {\n var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames);\n\n warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames5);\n }\n };\n\n var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about.\n\n var didWarnAboutLegacyContext = new Set();\n\n ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) {\n var strictRoot = findStrictRoot(fiber);\n\n if (strictRoot === null) {\n error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n\n return;\n } // Dedup strategy: Warn once per component.\n\n\n if (didWarnAboutLegacyContext.has(fiber.type)) {\n return;\n }\n\n var warningsForRoot = pendingLegacyContextWarning.get(strictRoot);\n\n if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') {\n if (warningsForRoot === undefined) {\n warningsForRoot = [];\n pendingLegacyContextWarning.set(strictRoot, warningsForRoot);\n }\n\n warningsForRoot.push(fiber);\n }\n };\n\n ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) {\n if (fiberArray.length === 0) {\n return;\n }\n\n var firstFiber = fiberArray[0];\n var uniqueNames = new Set();\n fiberArray.forEach(function (fiber) {\n uniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutLegacyContext.add(fiber.type);\n });\n var sortedNames = setToSortedString(uniqueNames);\n\n try {\n setCurrentFiber(firstFiber);\n\n error('Legacy context API has been detected within a strict-mode tree.' + '\\n\\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\\n\\nPlease update the following components: %s' + '\\n\\nLearn more about this warning here: https://reactjs.org/link/legacy-context', sortedNames);\n } finally {\n resetCurrentFiber();\n }\n });\n };\n\n ReactStrictModeWarnings.discardPendingWarnings = function () {\n pendingComponentWillMountWarnings = [];\n pendingUNSAFE_ComponentWillMountWarnings = [];\n pendingComponentWillReceivePropsWarnings = [];\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n pendingComponentWillUpdateWarnings = [];\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n pendingLegacyContextWarning = new Map();\n };\n}\n\nvar ReactCurrentActQueue$3 = ReactSharedInternals.ReactCurrentActQueue; // An error that is thrown (e.g. by `use`) to trigger Suspense. If we\n// detect this is caught by userspace, we'll log a warning in development.\n\nvar SuspenseException = new Error(\"Suspense Exception: This is not a real error! It's an implementation \" + 'detail of `use` to interrupt the current render. You must either ' + 'rethrow it immediately, or move the `use` call outside of the ' + '`try/catch` block. Capturing without rethrowing will lead to ' + 'unexpected behavior.\\n\\n' + 'To handle async errors, wrap your component in an error boundary, or ' + \"call the promise's `.catch` method and pass the result to `use`\");\nvar SuspenseyCommitException = new Error('Suspense Exception: This is not a real error, and should not leak into ' + \"userspace. If you're seeing this, it's likely a bug in React.\"); // This is a noop thenable that we use to trigger a fallback in throwException.\n// TODO: It would be better to refactor throwException into multiple functions\n// so we can trigger a fallback directly without having to check the type. But\n// for now this will do.\n\nvar noopSuspenseyCommitThenable = {\n then: function () {\n {\n error('Internal React error: A listener was unexpectedly attached to a ' + '\"noop\" thenable. This is a bug in React. Please file an issue.');\n }\n }\n};\nfunction createThenableState() {\n // The ThenableState is created the first time a component suspends. If it\n // suspends again, we'll reuse the same state.\n return [];\n}\nfunction isThenableResolved(thenable) {\n var status = thenable.status;\n return status === 'fulfilled' || status === 'rejected';\n}\n\nfunction noop$2() {}\n\nfunction trackUsedThenable(thenableState, thenable, index) {\n if (ReactCurrentActQueue$3.current !== null) {\n ReactCurrentActQueue$3.didUsePromise = true;\n }\n\n var previous = thenableState[index];\n\n if (previous === undefined) {\n thenableState.push(thenable);\n } else {\n if (previous !== thenable) {\n // Reuse the previous thenable, and drop the new one. We can assume\n // they represent the same value, because components are idempotent.\n // Avoid an unhandled rejection errors for the Promises that we'll\n // intentionally ignore.\n thenable.then(noop$2, noop$2);\n thenable = previous;\n }\n } // We use an expando to track the status and result of a thenable so that we\n // can synchronously unwrap the value. Think of this as an extension of the\n // Promise API, or a custom interface that is a superset of Thenable.\n //\n // If the thenable doesn't have a status, set it to \"pending\" and attach\n // a listener that will update its status and result when it resolves.\n\n\n switch (thenable.status) {\n case 'fulfilled':\n {\n var fulfilledValue = thenable.value;\n return fulfilledValue;\n }\n\n case 'rejected':\n {\n var rejectedError = thenable.reason;\n checkIfUseWrappedInAsyncCatch(rejectedError);\n throw rejectedError;\n }\n\n default:\n {\n if (typeof thenable.status === 'string') {\n // Only instrument the thenable if the status if not defined. If\n // it's defined, but an unknown value, assume it's been instrumented by\n // some custom userspace implementation. We treat it as \"pending\".\n // Attach a dummy listener, to ensure that any lazy initialization can\n // happen. Flight lazily parses JSON when the value is actually awaited.\n thenable.then(noop$2, noop$2);\n } else {\n // This is an uncached thenable that we haven't seen before.\n // Detect infinite ping loops caused by uncached promises.\n var root = getWorkInProgressRoot();\n\n if (root !== null && root.shellSuspendCounter > 100) {\n // This root has suspended repeatedly in the shell without making any\n // progress (i.e. committing something). This is highly suggestive of\n // an infinite ping loop, often caused by an accidental Async Client\n // Component.\n //\n // During a transition, we can suspend the work loop until the promise\n // to resolve, but this is a sync render, so that's not an option. We\n // also can't show a fallback, because none was provided. So our last\n // resort is to throw an error.\n //\n // TODO: Remove this error in a future release. Other ways of handling\n // this case include forcing a concurrent render, or putting the whole\n // root into offscreen mode.\n throw new Error('async/await is not yet supported in Client Components, only ' + 'Server Components. This error is often caused by accidentally ' + \"adding `'use client'` to a module that was originally written \" + 'for the server.');\n }\n\n var pendingThenable = thenable;\n pendingThenable.status = 'pending';\n pendingThenable.then(function (fulfilledValue) {\n if (thenable.status === 'pending') {\n var fulfilledThenable = thenable;\n fulfilledThenable.status = 'fulfilled';\n fulfilledThenable.value = fulfilledValue;\n }\n }, function (error) {\n if (thenable.status === 'pending') {\n var rejectedThenable = thenable;\n rejectedThenable.status = 'rejected';\n rejectedThenable.reason = error;\n }\n }); // Check one more time in case the thenable resolved synchronously.\n\n switch (thenable.status) {\n case 'fulfilled':\n {\n var fulfilledThenable = thenable;\n return fulfilledThenable.value;\n }\n\n case 'rejected':\n {\n var rejectedThenable = thenable;\n var _rejectedError = rejectedThenable.reason;\n checkIfUseWrappedInAsyncCatch(_rejectedError);\n throw _rejectedError;\n }\n }\n } // Suspend.\n //\n // Throwing here is an implementation detail that allows us to unwind the\n // call stack. But we shouldn't allow it to leak into userspace. Throw an\n // opaque placeholder value instead of the actual thenable. If it doesn't\n // get captured by the work loop, log a warning, because that means\n // something in userspace must have caught it.\n\n\n suspendedThenable = thenable;\n\n {\n needsToResetSuspendedThenableDEV = true;\n }\n\n throw SuspenseException;\n }\n }\n}\nfunction suspendCommit() {\n // This extra indirection only exists so it can handle passing\n // noopSuspenseyCommitThenable through to throwException.\n // TODO: Factor the thenable check out of throwException\n suspendedThenable = noopSuspenseyCommitThenable;\n throw SuspenseyCommitException;\n} // This is used to track the actual thenable that suspended so it can be\n// passed to the rest of the Suspense implementation — which, for historical\n// reasons, expects to receive a thenable.\n\nvar suspendedThenable = null;\nvar needsToResetSuspendedThenableDEV = false;\nfunction getSuspendedThenable() {\n // This is called right after `use` suspends by throwing an exception. `use`\n // throws an opaque value instead of the thenable itself so that it can't be\n // caught in userspace. Then the work loop accesses the actual thenable using\n // this function.\n if (suspendedThenable === null) {\n throw new Error('Expected a suspended thenable. This is a bug in React. Please file ' + 'an issue.');\n }\n\n var thenable = suspendedThenable;\n suspendedThenable = null;\n\n {\n needsToResetSuspendedThenableDEV = false;\n }\n\n return thenable;\n}\nfunction checkIfUseWrappedInTryCatch() {\n {\n // This was set right before SuspenseException was thrown, and it should\n // have been cleared when the exception was handled. If it wasn't,\n // it must have been caught by userspace.\n if (needsToResetSuspendedThenableDEV) {\n needsToResetSuspendedThenableDEV = false;\n return true;\n }\n }\n\n return false;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n // This check runs in prod, too, because it prevents a more confusing\n // downstream error, where SuspenseException is caught by a promise and\n // thrown asynchronously.\n // TODO: Another way to prevent SuspenseException from leaking into an async\n // execution context is to check the dispatcher every time `use` is called,\n // or some equivalent. That might be preferable for other reasons, too, since\n // it matches how we prevent similar mistakes for other hooks.\n if (rejectedReason === SuspenseException) {\n throw new Error('Hooks are not supported inside an async component. This ' + \"error is often caused by accidentally adding `'use client'` \" + 'to a module that was originally written for the server.');\n }\n}\n\nvar thenableState$1 = null;\nvar thenableIndexCounter$1 = 0;\nvar didWarnAboutMaps;\nvar didWarnAboutGenerators;\nvar didWarnAboutStringRefs;\nvar ownerHasKeyUseWarning;\nvar ownerHasFunctionTypeWarning;\n\nvar warnForMissingKey = function (child, returnFiber) {};\n\n{\n didWarnAboutMaps = false;\n didWarnAboutGenerators = false;\n didWarnAboutStringRefs = {};\n /**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n ownerHasKeyUseWarning = {};\n ownerHasFunctionTypeWarning = {};\n\n warnForMissingKey = function (child, returnFiber) {\n if (child === null || typeof child !== 'object') {\n return;\n }\n\n if (!child._store || child._store.validated || child.key != null) {\n return;\n }\n\n if (typeof child._store !== 'object') {\n throw new Error('React Component in warnForMissingKey should have a _store. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n } // $FlowFixMe[cannot-write] unable to narrow type from mixed to writable object\n\n\n child._store.validated = true;\n var componentName = getComponentNameFromFiber(returnFiber) || 'Component';\n\n if (ownerHasKeyUseWarning[componentName]) {\n return;\n }\n\n ownerHasKeyUseWarning[componentName] = true;\n\n error('Each child in a list should have a unique ' + '\"key\" prop. See https://reactjs.org/link/warning-keys for ' + 'more information.');\n };\n}\n\nfunction isReactClass(type) {\n return type.prototype && type.prototype.isReactComponent;\n}\n\nfunction unwrapThenable(thenable) {\n var index = thenableIndexCounter$1;\n thenableIndexCounter$1 += 1;\n\n if (thenableState$1 === null) {\n thenableState$1 = createThenableState();\n }\n\n return trackUsedThenable(thenableState$1, thenable, index);\n}\n\nfunction coerceRef(returnFiber, current, element) {\n var mixedRef = element.ref;\n\n if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') {\n {\n if ( // We warn in ReactElement.js if owner and self are equal for string refs\n // because these cannot be automatically converted to an arrow function\n // using a codemod. Therefore, we don't have to warn about string refs again.\n !(element._owner && element._self && element._owner.stateNode !== element._self) && // Will already throw with \"Function components cannot have string refs\"\n !(element._owner && element._owner.tag !== ClassComponent) && // Will already warn with \"Function components cannot be given refs\"\n !(typeof element.type === 'function' && !isReactClass(element.type)) && // Will already throw with \"Element ref was specified as a string (someStringRef) but no owner was set\"\n element._owner) {\n var componentName = getComponentNameFromFiber(returnFiber) || 'Component';\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". Support for string refs ' + 'will be removed in a future major release. We recommend using ' + 'useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, mixedRef);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n\n if (element._owner) {\n var owner = element._owner;\n var inst;\n\n if (owner) {\n var ownerFiber = owner;\n\n if (ownerFiber.tag !== ClassComponent) {\n throw new Error('Function components cannot have string refs. ' + 'We recommend using useRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref');\n }\n\n inst = ownerFiber.stateNode;\n }\n\n if (!inst) {\n throw new Error(\"Missing owner for string ref \" + mixedRef + \". This error is likely caused by a \" + 'bug in React. Please file an issue.');\n } // Assigning this to a const so Flow knows it won't change in the closure\n\n\n var resolvedInst = inst;\n\n {\n checkPropStringCoercion(mixedRef, 'ref');\n }\n\n var stringRef = '' + mixedRef; // Check if previous string ref matches new string ref\n\n if (current !== null && current.ref !== null && typeof current.ref === 'function' && current.ref._stringRef === stringRef) {\n return current.ref;\n }\n\n var ref = function (value) {\n var refs = resolvedInst.refs;\n\n if (value === null) {\n delete refs[stringRef];\n } else {\n refs[stringRef] = value;\n }\n };\n\n ref._stringRef = stringRef;\n return ref;\n } else {\n if (typeof mixedRef !== 'string') {\n throw new Error('Expected ref to be a function, a string, an object returned by React.createRef(), or null.');\n }\n\n if (!element._owner) {\n throw new Error(\"Element ref was specified as a string (\" + mixedRef + \") but no owner was set. This could happen for one of\" + ' the following reasons:\\n' + '1. You may be adding a ref to a function component\\n' + \"2. You may be adding a ref to a component that was not created inside a component's render method\\n\" + '3. You have multiple copies of React loaded\\n' + 'See https://reactjs.org/link/refs-must-have-owner for more information.');\n }\n }\n }\n\n return mixedRef;\n}\n\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n // $FlowFixMe[method-unbinding]\n var childString = Object.prototype.toString.call(newChild);\n throw new Error(\"Objects are not valid as a React child (found: \" + (childString === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : childString) + \"). \" + 'If you meant to render a collection of children, use an array ' + 'instead.');\n}\n\nfunction warnOnFunctionType(returnFiber) {\n {\n var componentName = getComponentNameFromFiber(returnFiber) || 'Component';\n\n if (ownerHasFunctionTypeWarning[componentName]) {\n return;\n }\n\n ownerHasFunctionTypeWarning[componentName] = true;\n\n error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');\n }\n}\n\nfunction resolveLazy(lazyType) {\n var payload = lazyType._payload;\n var init = lazyType._init;\n return init(payload);\n} // This wrapper function exists because I expect to clone the code in each path\n// to be able to optimize each path individually by branching early. This needs\n// a compiler or we can do it manually. Helpers that don't need this branching\n// live outside of this function.\n\n\nfunction createChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return;\n }\n\n var deletions = returnFiber.deletions;\n\n if (deletions === null) {\n returnFiber.deletions = [childToDelete];\n returnFiber.flags |= ChildDeletion;\n } else {\n deletions.push(childToDelete);\n }\n }\n\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return null;\n } // TODO: For the shouldClone case, this could be micro-optimized a bit by\n // assuming that after the first child we've already added everything.\n\n\n var childToDelete = currentFirstChild;\n\n while (childToDelete !== null) {\n deleteChild(returnFiber, childToDelete);\n childToDelete = childToDelete.sibling;\n }\n\n return null;\n }\n\n function mapRemainingChildren(returnFiber, currentFirstChild) {\n // Add the remaining children to a temporary map so that we can find them by\n // keys quickly. Implicit (null) keys get added to this set with their index\n // instead.\n var existingChildren = new Map();\n var existingChild = currentFirstChild;\n\n while (existingChild !== null) {\n if (existingChild.key !== null) {\n existingChildren.set(existingChild.key, existingChild);\n } else {\n existingChildren.set(existingChild.index, existingChild);\n }\n\n existingChild = existingChild.sibling;\n }\n\n return existingChildren;\n }\n\n function useFiber(fiber, pendingProps) {\n // We currently set sibling to null and index to 0 here because it is easy\n // to forget to do before returning it. E.g. for the single child case.\n var clone = createWorkInProgress(fiber, pendingProps);\n clone.index = 0;\n clone.sibling = null;\n return clone;\n }\n\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n\n if (!shouldTrackSideEffects) {\n // During hydration, the useId algorithm needs to know which fibers are\n // part of a list of children (arrays, iterators).\n newFiber.flags |= Forked;\n return lastPlacedIndex;\n }\n\n var current = newFiber.alternate;\n\n if (current !== null) {\n var oldIndex = current.index;\n\n if (oldIndex < lastPlacedIndex) {\n // This is a move.\n newFiber.flags |= Placement | PlacementDEV;\n return lastPlacedIndex;\n } else {\n // This item can stay in place.\n return oldIndex;\n }\n } else {\n // This is an insertion.\n newFiber.flags |= Placement | PlacementDEV;\n return lastPlacedIndex;\n }\n }\n\n function placeSingleChild(newFiber) {\n // This is simpler for the single child case. We only need to do a\n // placement for inserting new children.\n if (shouldTrackSideEffects && newFiber.alternate === null) {\n newFiber.flags |= Placement | PlacementDEV;\n }\n\n return newFiber;\n }\n\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (current === null || current.tag !== HostText) {\n // Insert\n var created = createFiberFromText(textContent, returnFiber.mode, lanes);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, textContent);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n\n if (elementType === REACT_FRAGMENT_TYPE) {\n return updateFragment(returnFiber, current, element.props.children, lanes, element.key);\n }\n\n if (current !== null) {\n if (current.elementType === elementType || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(current, element) ) || // Lazy types should reconcile their resolved type.\n // We need to do this after the Hot Reloading check above,\n // because hot reloading has different semantics than prod because\n // it doesn't resuspend. So we can't let the call below suspend.\n typeof elementType === 'object' && elementType !== null && elementType.$$typeof === REACT_LAZY_TYPE && resolveLazy(elementType) === current.type) {\n // Move based on index\n var existing = useFiber(current, element.props);\n existing.ref = coerceRef(returnFiber, current, element);\n existing.return = returnFiber;\n\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n\n return existing;\n }\n } // Insert\n\n\n var created = createFiberFromElement(element, returnFiber.mode, lanes);\n created.ref = coerceRef(returnFiber, current, element);\n created.return = returnFiber;\n return created;\n }\n\n function updatePortal(returnFiber, current, portal, lanes) {\n if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {\n // Insert\n var created = createFiberFromPortal(portal, returnFiber.mode, lanes);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, portal.children || []);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (current === null || current.tag !== Fragment) {\n // Insert\n var created = createFiberFromFragment(fragment, returnFiber.mode, lanes, key);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, fragment);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function createChild(returnFiber, newChild, lanes) {\n if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n var created = createFiberFromText('' + newChild, returnFiber.mode, lanes);\n created.return = returnFiber;\n return created;\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n var _created = createFiberFromElement(newChild, returnFiber.mode, lanes);\n\n _created.ref = coerceRef(returnFiber, null, newChild);\n _created.return = returnFiber;\n return _created;\n }\n\n case REACT_PORTAL_TYPE:\n {\n var _created2 = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n\n _created2.return = returnFiber;\n return _created2;\n }\n\n case REACT_LAZY_TYPE:\n {\n var payload = newChild._payload;\n var init = newChild._init;\n return createChild(returnFiber, init(payload), lanes);\n }\n }\n\n if (isArray(newChild) || getIteratorFn(newChild)) {\n var _created3 = createFiberFromFragment(newChild, returnFiber.mode, lanes, null);\n\n _created3.return = returnFiber;\n return _created3;\n } // Usable node types\n //\n // Unwrap the inner value and recursively call this function again.\n\n\n if (typeof newChild.then === 'function') {\n var thenable = newChild;\n return createChild(returnFiber, unwrapThenable(thenable), lanes);\n }\n\n if (newChild.$$typeof === REACT_CONTEXT_TYPE || newChild.$$typeof === REACT_SERVER_CONTEXT_TYPE) {\n var context = newChild;\n return createChild(returnFiber, readContextDuringReconcilation(returnFiber, context, lanes), lanes);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType(returnFiber);\n }\n }\n\n return null;\n }\n\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n // Update the fiber if the keys match, otherwise return null.\n var key = oldFiber !== null ? oldFiber.key : null;\n\n if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n if (key !== null) {\n return null;\n }\n\n return updateTextNode(returnFiber, oldFiber, '' + newChild, lanes);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n if (newChild.key === key) {\n return updateElement(returnFiber, oldFiber, newChild, lanes);\n } else {\n return null;\n }\n }\n\n case REACT_PORTAL_TYPE:\n {\n if (newChild.key === key) {\n return updatePortal(returnFiber, oldFiber, newChild, lanes);\n } else {\n return null;\n }\n }\n\n case REACT_LAZY_TYPE:\n {\n var payload = newChild._payload;\n var init = newChild._init;\n return updateSlot(returnFiber, oldFiber, init(payload), lanes);\n }\n }\n\n if (isArray(newChild) || getIteratorFn(newChild)) {\n if (key !== null) {\n return null;\n }\n\n return updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n } // Usable node types\n //\n // Unwrap the inner value and recursively call this function again.\n\n\n if (typeof newChild.then === 'function') {\n var thenable = newChild;\n return updateSlot(returnFiber, oldFiber, unwrapThenable(thenable), lanes);\n }\n\n if (newChild.$$typeof === REACT_CONTEXT_TYPE || newChild.$$typeof === REACT_SERVER_CONTEXT_TYPE) {\n var context = newChild;\n return updateSlot(returnFiber, oldFiber, readContextDuringReconcilation(returnFiber, context, lanes), lanes);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType(returnFiber);\n }\n }\n\n return null;\n }\n\n function updateFromMap(existingChildren, returnFiber, newIdx, newChild, lanes) {\n if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n // Text nodes don't have keys, so we neither have to check the old nor\n // new node for the key. If both are text nodes, they match.\n var matchedFiber = existingChildren.get(newIdx) || null;\n return updateTextNode(returnFiber, matchedFiber, '' + newChild, lanes);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n return updateElement(returnFiber, _matchedFiber, newChild, lanes);\n }\n\n case REACT_PORTAL_TYPE:\n {\n var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n return updatePortal(returnFiber, _matchedFiber2, newChild, lanes);\n }\n\n case REACT_LAZY_TYPE:\n var payload = newChild._payload;\n var init = newChild._init;\n return updateFromMap(existingChildren, returnFiber, newIdx, init(payload), lanes);\n }\n\n if (isArray(newChild) || getIteratorFn(newChild)) {\n var _matchedFiber3 = existingChildren.get(newIdx) || null;\n\n return updateFragment(returnFiber, _matchedFiber3, newChild, lanes, null);\n } // Usable node types\n //\n // Unwrap the inner value and recursively call this function again.\n\n\n if (typeof newChild.then === 'function') {\n var thenable = newChild;\n return updateFromMap(existingChildren, returnFiber, newIdx, unwrapThenable(thenable), lanes);\n }\n\n if (newChild.$$typeof === REACT_CONTEXT_TYPE || newChild.$$typeof === REACT_SERVER_CONTEXT_TYPE) {\n var context = newChild;\n return updateFromMap(existingChildren, returnFiber, newIdx, readContextDuringReconcilation(returnFiber, context, lanes), lanes);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType(returnFiber);\n }\n }\n\n return null;\n }\n /**\n * Warns if there is a duplicate or missing key\n */\n\n\n function warnOnInvalidKey(child, knownKeys, returnFiber) {\n {\n if (typeof child !== 'object' || child === null) {\n return knownKeys;\n }\n\n switch (child.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n warnForMissingKey(child, returnFiber);\n var key = child.key;\n\n if (typeof key !== 'string') {\n break;\n }\n\n if (knownKeys === null) {\n knownKeys = new Set();\n knownKeys.add(key);\n break;\n }\n\n if (!knownKeys.has(key)) {\n knownKeys.add(key);\n break;\n }\n\n error('Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', key);\n\n break;\n\n case REACT_LAZY_TYPE:\n var payload = child._payload;\n var init = child._init;\n warnOnInvalidKey(init(payload), knownKeys, returnFiber);\n break;\n }\n }\n\n return knownKeys;\n }\n\n function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, lanes) {\n // This algorithm can't optimize by searching from both ends since we\n // don't have backpointers on fibers. I'm trying to see how far we can get\n // with that model. If it ends up not being worth the tradeoffs, we can\n // add it later.\n // Even with a two ended optimization, we'd want to optimize for the case\n // where there are few changes and brute force the comparison instead of\n // going for the Map. It'd like to explore hitting that path first in\n // forward-only mode and only go for the Map once we notice that we need\n // lots of look ahead. This doesn't handle reversal as well as two ended\n // search but that's unusual. Besides, for the two ended optimization to\n // work on Iterables, we'd need to copy the whole set.\n // In this first iteration, we'll just live with hitting the bad case\n // (adding everything to a Map) in for every insert/move.\n // If you change this code, also update reconcileChildrenIterator() which\n // uses the same algorithm.\n {\n // First, validate keys.\n var knownKeys = null;\n\n for (var i = 0; i < newChildren.length; i++) {\n var child = newChildren[i];\n knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);\n }\n }\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n\n for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n\n var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], lanes);\n\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (oldFiber === null) {\n oldFiber = nextOldFiber;\n }\n\n break;\n }\n\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (newIdx === newChildren.length) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n\n if (getIsHydrating()) {\n var numberOfForks = newIdx;\n pushTreeFork(returnFiber, numberOfForks);\n }\n\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber = createChild(returnFiber, newChildren[newIdx], lanes);\n\n if (_newFiber === null) {\n continue;\n }\n\n lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber;\n } else {\n previousNewFiber.sibling = _newFiber;\n }\n\n previousNewFiber = _newFiber;\n }\n\n if (getIsHydrating()) {\n var _numberOfForks = newIdx;\n pushTreeFork(returnFiber, _numberOfForks);\n }\n\n return resultingFirstChild;\n } // Add all children to a key map for quick lookups.\n\n\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], lanes);\n\n if (_newFiber2 !== null) {\n if (shouldTrackSideEffects) {\n if (_newFiber2.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);\n }\n }\n\n lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber2;\n } else {\n previousNewFiber.sibling = _newFiber2;\n }\n\n previousNewFiber = _newFiber2;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n if (getIsHydrating()) {\n var _numberOfForks2 = newIdx;\n pushTreeFork(returnFiber, _numberOfForks2);\n }\n\n return resultingFirstChild;\n }\n\n function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, lanes) {\n // This is the same implementation as reconcileChildrenArray(),\n // but using the iterator instead.\n var iteratorFn = getIteratorFn(newChildrenIterable);\n\n if (typeof iteratorFn !== 'function') {\n throw new Error('An object is not an iterable. This error is likely caused by a bug in ' + 'React. Please file an issue.');\n }\n\n {\n // We don't support rendering Generators because it's a mutation.\n // See https://github.com/facebook/react/issues/12995\n if (typeof Symbol === 'function' && // $FlowFixMe[prop-missing] Flow doesn't know about toStringTag\n newChildrenIterable[Symbol.toStringTag] === 'Generator') {\n if (!didWarnAboutGenerators) {\n error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');\n }\n\n didWarnAboutGenerators = true;\n } // Warn about using Maps as children\n\n\n if (newChildrenIterable.entries === iteratorFn) {\n if (!didWarnAboutMaps) {\n error('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');\n }\n\n didWarnAboutMaps = true;\n } // First, validate keys.\n // We'll get a different iterator later for the main pass.\n\n\n var _newChildren = iteratorFn.call(newChildrenIterable);\n\n if (_newChildren) {\n var knownKeys = null;\n\n var _step = _newChildren.next();\n\n for (; !_step.done; _step = _newChildren.next()) {\n var child = _step.value;\n knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);\n }\n }\n }\n\n var newChildren = iteratorFn.call(newChildrenIterable);\n\n if (newChildren == null) {\n throw new Error('An iterable object provided no iterator.');\n }\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n var step = newChildren.next();\n\n for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (oldFiber === null) {\n oldFiber = nextOldFiber;\n }\n\n break;\n }\n\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (step.done) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n\n if (getIsHydrating()) {\n var numberOfForks = newIdx;\n pushTreeFork(returnFiber, numberOfForks);\n }\n\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber3 = createChild(returnFiber, step.value, lanes);\n\n if (_newFiber3 === null) {\n continue;\n }\n\n lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber3;\n } else {\n previousNewFiber.sibling = _newFiber3;\n }\n\n previousNewFiber = _newFiber3;\n }\n\n if (getIsHydrating()) {\n var _numberOfForks3 = newIdx;\n pushTreeFork(returnFiber, _numberOfForks3);\n }\n\n return resultingFirstChild;\n } // Add all children to a key map for quick lookups.\n\n\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, lanes);\n\n if (_newFiber4 !== null) {\n if (shouldTrackSideEffects) {\n if (_newFiber4.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);\n }\n }\n\n lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber4;\n } else {\n previousNewFiber.sibling = _newFiber4;\n }\n\n previousNewFiber = _newFiber4;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n if (getIsHydrating()) {\n var _numberOfForks4 = newIdx;\n pushTreeFork(returnFiber, _numberOfForks4);\n }\n\n return resultingFirstChild;\n }\n\n function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, lanes) {\n // There's no need to check for keys on text nodes since we don't have a\n // way to define them.\n if (currentFirstChild !== null && currentFirstChild.tag === HostText) {\n // We already have an existing node so let's just update it and delete\n // the rest.\n deleteRemainingChildren(returnFiber, currentFirstChild.sibling);\n var existing = useFiber(currentFirstChild, textContent);\n existing.return = returnFiber;\n return existing;\n } // The existing first child is not a text node so we need to create one\n // and delete the existing ones.\n\n\n deleteRemainingChildren(returnFiber, currentFirstChild);\n var created = createFiberFromText(textContent, returnFiber.mode, lanes);\n created.return = returnFiber;\n return created;\n }\n\n function reconcileSingleElement(returnFiber, currentFirstChild, element, lanes) {\n var key = element.key;\n var child = currentFirstChild;\n\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n var elementType = element.type;\n\n if (elementType === REACT_FRAGMENT_TYPE) {\n if (child.tag === Fragment) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, element.props.children);\n existing.return = returnFiber;\n\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n\n return existing;\n }\n } else {\n if (child.elementType === elementType || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(child, element) ) || // Lazy types should reconcile their resolved type.\n // We need to do this after the Hot Reloading check above,\n // because hot reloading has different semantics than prod because\n // it doesn't resuspend. So we can't let the call below suspend.\n typeof elementType === 'object' && elementType !== null && elementType.$$typeof === REACT_LAZY_TYPE && resolveLazy(elementType) === child.type) {\n deleteRemainingChildren(returnFiber, child.sibling);\n\n var _existing = useFiber(child, element.props);\n\n _existing.ref = coerceRef(returnFiber, child, element);\n _existing.return = returnFiber;\n\n {\n _existing._debugSource = element._source;\n _existing._debugOwner = element._owner;\n }\n\n return _existing;\n }\n } // Didn't match.\n\n\n deleteRemainingChildren(returnFiber, child);\n break;\n } else {\n deleteChild(returnFiber, child);\n }\n\n child = child.sibling;\n }\n\n if (element.type === REACT_FRAGMENT_TYPE) {\n var created = createFiberFromFragment(element.props.children, returnFiber.mode, lanes, element.key);\n created.return = returnFiber;\n return created;\n } else {\n var _created4 = createFiberFromElement(element, returnFiber.mode, lanes);\n\n _created4.ref = coerceRef(returnFiber, currentFirstChild, element);\n _created4.return = returnFiber;\n return _created4;\n }\n }\n\n function reconcileSinglePortal(returnFiber, currentFirstChild, portal, lanes) {\n var key = portal.key;\n var child = currentFirstChild;\n\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, portal.children || []);\n existing.return = returnFiber;\n return existing;\n } else {\n deleteRemainingChildren(returnFiber, child);\n break;\n }\n } else {\n deleteChild(returnFiber, child);\n }\n\n child = child.sibling;\n }\n\n var created = createFiberFromPortal(portal, returnFiber.mode, lanes);\n created.return = returnFiber;\n return created;\n } // This API will tag the children with the side-effect of the reconciliation\n // itself. They will be added to the side-effect list as we pass through the\n // children and the parent.\n\n\n function reconcileChildFibersImpl(returnFiber, currentFirstChild, newChild, lanes) {\n // This function is not recursive.\n // If the top level item is an array, we treat it as a set of children,\n // not as a fragment. Nested arrays on the other hand will be treated as\n // fragment nodes. Recursion happens at the normal flow.\n // Handle top level unkeyed fragments as if they were arrays.\n // This leads to an ambiguity between <>{[...]}</> and <>...</>.\n // We treat the ambiguous cases above the same.\n // TODO: Let's use recursion like we do for Usable nodes?\n var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null;\n\n if (isUnkeyedTopLevelFragment) {\n newChild = newChild.props.children;\n } // Handle object types\n\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, lanes));\n\n case REACT_PORTAL_TYPE:\n return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, lanes));\n\n case REACT_LAZY_TYPE:\n var payload = newChild._payload;\n var init = newChild._init; // TODO: This function is supposed to be non-recursive.\n\n return reconcileChildFibers(returnFiber, currentFirstChild, init(payload), lanes);\n }\n\n if (isArray(newChild)) {\n return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, lanes);\n }\n\n if (getIteratorFn(newChild)) {\n return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, lanes);\n } // Usables are a valid React node type. When React encounters a Usable in\n // a child position, it unwraps it using the same algorithm as `use`. For\n // example, for promises, React will throw an exception to unwind the\n // stack, then replay the component once the promise resolves.\n //\n // A difference from `use` is that React will keep unwrapping the value\n // until it reaches a non-Usable type.\n //\n // e.g. Usable<Usable<Usable<T>>> should resolve to T\n //\n // The structure is a bit unfortunate. Ideally, we shouldn't need to\n // replay the entire begin phase of the parent fiber in order to reconcile\n // the children again. This would require a somewhat significant refactor,\n // because reconcilation happens deep within the begin phase, and\n // depending on the type of work, not always at the end. We should\n // consider as an future improvement.\n\n\n if (typeof newChild.then === 'function') {\n var thenable = newChild;\n return reconcileChildFibersImpl(returnFiber, currentFirstChild, unwrapThenable(thenable), lanes);\n }\n\n if (newChild.$$typeof === REACT_CONTEXT_TYPE || newChild.$$typeof === REACT_SERVER_CONTEXT_TYPE) {\n var context = newChild;\n return reconcileChildFibersImpl(returnFiber, currentFirstChild, readContextDuringReconcilation(returnFiber, context, lanes), lanes);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, lanes));\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType(returnFiber);\n }\n } // Remaining cases are all treated as empty.\n\n\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n\n function reconcileChildFibers(returnFiber, currentFirstChild, newChild, lanes) {\n // This indirection only exists so we can reset `thenableState` at the end.\n // It should get inlined by Closure.\n thenableIndexCounter$1 = 0;\n var firstChildFiber = reconcileChildFibersImpl(returnFiber, currentFirstChild, newChild, lanes);\n thenableState$1 = null; // Don't bother to reset `thenableIndexCounter` to 0 because it always gets\n // set at the beginning.\n\n return firstChildFiber;\n }\n\n return reconcileChildFibers;\n}\n\nvar reconcileChildFibers = createChildReconciler(true);\nvar mountChildFibers = createChildReconciler(false);\nfunction resetChildReconcilerOnUnwind() {\n // On unwind, clear any pending thenables that were used.\n thenableState$1 = null;\n thenableIndexCounter$1 = 0;\n}\nfunction cloneChildFibers(current, workInProgress) {\n if (current !== null && workInProgress.child !== current.child) {\n throw new Error('Resuming work not yet implemented.');\n }\n\n if (workInProgress.child === null) {\n return;\n }\n\n var currentChild = workInProgress.child;\n var newChild = createWorkInProgress(currentChild, currentChild.pendingProps);\n workInProgress.child = newChild;\n newChild.return = workInProgress;\n\n while (currentChild.sibling !== null) {\n currentChild = currentChild.sibling;\n newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps);\n newChild.return = workInProgress;\n }\n\n newChild.sibling = null;\n} // Reset a workInProgress child set to prepare it for a second pass.\n\nfunction resetChildFibers(workInProgress, lanes) {\n var child = workInProgress.child;\n\n while (child !== null) {\n resetWorkInProgress(child, lanes);\n child = child.sibling;\n }\n}\n\n// TODO: This isn't being used yet, but it's intended to replace the\n// InvisibleParentContext that is currently managed by SuspenseContext.\n\nvar currentTreeHiddenStackCursor = createCursor(null);\nvar prevEntangledRenderLanesCursor = createCursor(NoLanes);\nfunction pushHiddenContext(fiber, context) {\n var prevEntangledRenderLanes = getEntangledRenderLanes();\n push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber);\n push(currentTreeHiddenStackCursor, context, fiber); // When rendering a subtree that's currently hidden, we must include all\n // lanes that would have rendered if the hidden subtree hadn't been deferred.\n // That is, in order to reveal content from hidden -> visible, we must commit\n // all the updates that we skipped when we originally hid the tree.\n\n setEntangledRenderLanes(mergeLanes(prevEntangledRenderLanes, context.baseLanes));\n}\nfunction reuseHiddenContextOnStack(fiber) {\n // This subtree is not currently hidden, so we don't need to add any lanes\n // to the render lanes. But we still need to push something to avoid a\n // context mismatch. Reuse the existing context on the stack.\n push(prevEntangledRenderLanesCursor, getEntangledRenderLanes(), fiber);\n push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current, fiber);\n}\nfunction popHiddenContext(fiber) {\n // Restore the previous render lanes from the stack\n setEntangledRenderLanes(prevEntangledRenderLanesCursor.current);\n pop(currentTreeHiddenStackCursor, fiber);\n pop(prevEntangledRenderLanesCursor, fiber);\n}\nfunction isCurrentTreeHidden() {\n return currentTreeHiddenStackCursor.current !== null;\n}\n\n// suspends, i.e. it's the nearest `catch` block on the stack.\n\nvar suspenseHandlerStackCursor = createCursor(null); // Represents the outermost boundary that is not visible in the current tree.\n// Everything above this is the \"shell\". When this is null, it means we're\n// rendering in the shell of the app. If it's non-null, it means we're rendering\n// deeper than the shell, inside a new tree that wasn't already visible.\n//\n// The main way we use this concept is to determine whether showing a fallback\n// would result in a desirable or undesirable loading state. Activing a fallback\n// in the shell is considered an undersirable loading state, because it would\n// mean hiding visible (albeit stale) content in the current tree — we prefer to\n// show the stale content, rather than switch to a fallback. But showing a\n// fallback in a new tree is fine, because there's no stale content to\n// prefer instead.\n\nvar shellBoundary = null;\nfunction getShellBoundary() {\n return shellBoundary;\n}\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n // TODO: Pass as argument\n var current = handler.alternate;\n // propagated a single level. For example, when ForceSuspenseFallback is set,\n // it should only force the nearest Suspense boundary into fallback mode.\n\n pushSuspenseListContext(handler, setDefaultShallowSuspenseListContext(suspenseStackCursor.current)); // Experimental feature: Some Suspense boundaries are marked as having an\n // to push a nested Suspense handler, because it will get replaced by the\n // outer fallback, anyway. Consider this as a future optimization.\n\n\n push(suspenseHandlerStackCursor, handler, handler);\n\n if (shellBoundary === null) {\n if (current === null || isCurrentTreeHidden()) {\n // This boundary is not visible in the current UI.\n shellBoundary = handler;\n } else {\n var prevState = current.memoizedState;\n\n if (prevState !== null) {\n // This boundary is showing a fallback in the current UI.\n shellBoundary = handler;\n }\n }\n }\n}\nfunction pushFallbackTreeSuspenseHandler(fiber) {\n // We're about to render the fallback. If something in the fallback suspends,\n // it's akin to throwing inside of a `catch` block. This boundary should not\n // capture. Reuse the existing handler on the stack.\n reuseSuspenseHandlerOnStack(fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n if (fiber.tag === OffscreenComponent) {\n // A SuspenseList context is only pushed here to avoid a push/pop mismatch.\n // Reuse the current value on the stack.\n // TODO: We can avoid needing to push here by by forking popSuspenseHandler\n // into separate functions for Suspense and Offscreen.\n pushSuspenseListContext(fiber, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, fiber, fiber);\n\n if (shellBoundary !== null) ; else {\n var current = fiber.alternate;\n\n if (current !== null) {\n var prevState = current.memoizedState;\n\n if (prevState !== null) {\n // This is the first boundary in the stack that's already showing\n // a fallback. So everything outside is considered the shell.\n shellBoundary = fiber;\n }\n }\n }\n } else {\n // This is a LegacyHidden component.\n reuseSuspenseHandlerOnStack(fiber);\n }\n}\nfunction reuseSuspenseHandlerOnStack(fiber) {\n pushSuspenseListContext(fiber, suspenseStackCursor.current);\n push(suspenseHandlerStackCursor, getSuspenseHandler(), fiber);\n}\nfunction getSuspenseHandler() {\n return suspenseHandlerStackCursor.current;\n}\nfunction popSuspenseHandler(fiber) {\n pop(suspenseHandlerStackCursor, fiber);\n\n if (shellBoundary === fiber) {\n // Popping back into the shell.\n shellBoundary = null;\n }\n\n popSuspenseListContext(fiber);\n} // SuspenseList context\n// TODO: Move to a separate module? We may change the SuspenseList\n// implementation to hide/show in the commit phase, anyway.\n\nvar DefaultSuspenseContext = 0;\nvar SubtreeSuspenseContextMask = 1; // ForceSuspenseFallback can be used by SuspenseList to force newly added\n// items into their fallback state during one of the render passes.\n\nvar ForceSuspenseFallback = 2;\nvar suspenseStackCursor = createCursor(DefaultSuspenseContext);\nfunction hasSuspenseListContext(parentContext, flag) {\n return (parentContext & flag) !== 0;\n}\nfunction setDefaultShallowSuspenseListContext(parentContext) {\n return parentContext & SubtreeSuspenseContextMask;\n}\nfunction setShallowSuspenseListContext(parentContext, shallowContext) {\n return parentContext & SubtreeSuspenseContextMask | shallowContext;\n}\nfunction pushSuspenseListContext(fiber, newContext) {\n push(suspenseStackCursor, newContext, fiber);\n}\nfunction popSuspenseListContext(fiber) {\n pop(suspenseStackCursor, fiber);\n}\n\n// A non-null SuspenseState means that it is blocked for one reason or another.\n// - A non-null dehydrated field means it's blocked pending hydration.\n// - A non-null dehydrated field can use isSuspenseInstancePending or\n// isSuspenseInstanceFallback to query the reason for being dehydrated.\n// - A null dehydrated field means it's blocked by something suspending and\n// we're currently showing a fallback instead.\n\nfunction findFirstSuspended(row) {\n var node = row;\n\n while (node !== null) {\n if (node.tag === SuspenseComponent) {\n var state = node.memoizedState;\n\n if (state !== null) {\n var dehydrated = state.dehydrated;\n\n if (dehydrated === null || isSuspenseInstancePending(dehydrated) || isSuspenseInstanceFallback(dehydrated)) {\n return node;\n }\n }\n } else if (node.tag === SuspenseListComponent && // revealOrder undefined can't be trusted because it don't\n // keep track of whether it suspended or not.\n node.memoizedProps.revealOrder !== undefined) {\n var didSuspend = (node.flags & DidCapture) !== NoFlags$1;\n\n if (didSuspend) {\n return node;\n }\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === row) {\n return null;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === row) {\n return null;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n\n return null;\n}\n\nvar NoFlags =\n/* */\n0; // Represents whether effect should fire.\n\nvar HasEffect =\n/* */\n1; // Represents the phase in which the effect (not the clean-up) fires.\n\nvar Insertion =\n/* */\n2;\nvar Layout =\n/* */\n4;\nvar Passive =\n/* */\n8;\n\nvar ReactCurrentActQueue$2 = ReactSharedInternals.ReactCurrentActQueue; // A linked list of all the roots with pending work. In an idiomatic app,\n// there's only a single root, but we do support multi root apps, hence this\n// extra complexity. But this module is optimized for the single root case.\n\nvar firstScheduledRoot = null;\nvar lastScheduledRoot = null; // Used to prevent redundant mircotasks from being scheduled.\n\nvar didScheduleMicrotask = false; // `act` \"microtasks\" are scheduled on the `act` queue instead of an actual\n// microtask, so we have to dedupe those separately. This wouldn't be an issue\n// if we required all `act` calls to be awaited, which we might in the future.\n\nvar didScheduleMicrotask_act = false; // Used to quickly bail out of flushSync if there's no sync work to do.\n\nvar mightHavePendingSyncWork = false;\nvar isFlushingWork = false;\nvar currentEventTransitionLane = NoLane;\nfunction ensureRootIsScheduled(root) {\n // This function is called whenever a root receives an update. It does two\n // things 1) it ensures the root is in the root schedule, and 2) it ensures\n // there's a pending microtask to process the root schedule.\n //\n // Most of the actual scheduling logic does not happen until\n // `scheduleTaskForRootDuringMicrotask` runs.\n // Add the root to the schedule\n if (root === lastScheduledRoot || root.next !== null) ; else {\n if (lastScheduledRoot === null) {\n firstScheduledRoot = lastScheduledRoot = root;\n } else {\n lastScheduledRoot.next = root;\n lastScheduledRoot = root;\n }\n } // Any time a root received an update, we set this to true until the next time\n // we process the schedule. If it's false, then we can quickly exit flushSync\n // without consulting the schedule.\n\n\n mightHavePendingSyncWork = true; // At the end of the current event, go through each of the roots and ensure\n // there's a task scheduled for each one at the correct priority.\n\n if (ReactCurrentActQueue$2.current !== null) {\n // We're inside an `act` scope.\n if (!didScheduleMicrotask_act) {\n didScheduleMicrotask_act = true;\n scheduleImmediateTask(processRootScheduleInMicrotask);\n }\n } else {\n if (!didScheduleMicrotask) {\n didScheduleMicrotask = true;\n scheduleImmediateTask(processRootScheduleInMicrotask);\n }\n }\n\n if (ReactCurrentActQueue$2.isBatchingLegacy && root.tag === LegacyRoot) {\n // Special `act` case: Record whenever a legacy update is scheduled.\n ReactCurrentActQueue$2.didScheduleLegacyUpdate = true;\n }\n}\nfunction flushSyncWorkOnAllRoots() {\n // This is allowed to be called synchronously, but the caller should check\n // the execution context first.\n flushSyncWorkAcrossRoots_impl(false);\n}\nfunction flushSyncWorkOnLegacyRootsOnly() {\n // This is allowed to be called synchronously, but the caller should check\n // the execution context first.\n flushSyncWorkAcrossRoots_impl(true);\n}\n\nfunction flushSyncWorkAcrossRoots_impl(onlyLegacy) {\n if (isFlushingWork) {\n // Prevent reentrancy.\n // TODO: Is this overly defensive? The callers must check the execution\n // context first regardless.\n return;\n }\n\n if (!mightHavePendingSyncWork) {\n // Fast path. There's no sync work to do.\n return;\n } // There may or may not be synchronous work scheduled. Let's check.\n\n\n var didPerformSomeWork;\n var errors = null;\n isFlushingWork = true;\n\n do {\n didPerformSomeWork = false;\n var root = firstScheduledRoot;\n\n while (root !== null) {\n if (onlyLegacy && root.tag !== LegacyRoot) ; else {\n var workInProgressRoot = getWorkInProgressRoot();\n var workInProgressRootRenderLanes = getWorkInProgressRootRenderLanes();\n var nextLanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);\n\n if (includesSyncLane(nextLanes)) {\n // This root has pending sync work. Flush it now.\n try {\n didPerformSomeWork = true;\n performSyncWorkOnRoot(root, nextLanes);\n } catch (error) {\n // Collect errors so we can rethrow them at the end\n if (errors === null) {\n errors = [error];\n } else {\n errors.push(error);\n }\n }\n }\n }\n\n root = root.next;\n }\n } while (didPerformSomeWork);\n\n isFlushingWork = false; // If any errors were thrown, rethrow them right before exiting.\n // TODO: Consider returning these to the caller, to allow them to decide\n // how/when to rethrow.\n\n if (errors !== null) {\n if (errors.length > 1) {\n if (typeof AggregateError === 'function') {\n // eslint-disable-next-line no-undef\n throw new AggregateError(errors);\n } else {\n for (var i = 1; i < errors.length; i++) {\n scheduleImmediateTask(throwError.bind(null, errors[i]));\n }\n\n var firstError = errors[0];\n throw firstError;\n }\n } else {\n var error = errors[0];\n throw error;\n }\n }\n}\n\nfunction throwError(error) {\n throw error;\n}\n\nfunction processRootScheduleInMicrotask() {\n // This function is always called inside a microtask. It should never be\n // called synchronously.\n didScheduleMicrotask = false;\n\n {\n didScheduleMicrotask_act = false;\n } // We'll recompute this as we iterate through all the roots and schedule them.\n\n\n mightHavePendingSyncWork = false;\n var currentTime = now$1();\n var prev = null;\n var root = firstScheduledRoot;\n\n while (root !== null) {\n var next = root.next;\n\n if (currentEventTransitionLane !== NoLane && shouldAttemptEagerTransition()) {\n // A transition was scheduled during an event, but we're going to try to\n // render it synchronously anyway. We do this during a popstate event to\n // preserve the scroll position of the previous page.\n upgradePendingLaneToSync(root, currentEventTransitionLane);\n }\n\n var nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n\n if (nextLanes === NoLane) {\n // This root has no more pending work. Remove it from the schedule. To\n // guard against subtle reentrancy bugs, this microtask is the only place\n // we do this — you can add roots to the schedule whenever, but you can\n // only remove them here.\n // Null this out so we know it's been removed from the schedule.\n root.next = null;\n\n if (prev === null) {\n // This is the new head of the list\n firstScheduledRoot = next;\n } else {\n prev.next = next;\n }\n\n if (next === null) {\n // This is the new tail of the list\n lastScheduledRoot = prev;\n }\n } else {\n // This root still has work. Keep it in the list.\n prev = root;\n\n if (includesSyncLane(nextLanes)) {\n mightHavePendingSyncWork = true;\n }\n }\n\n root = next;\n }\n\n currentEventTransitionLane = NoLane; // At the end of the microtask, flush any pending synchronous work. This has\n // to come at the end, because it does actual rendering work that might throw.\n\n flushSyncWorkOnAllRoots();\n}\n\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n // This function is always called inside a microtask, or at the very end of a\n // rendering task right before we yield to the main thread. It should never be\n // called synchronously.\n //\n // TODO: Unless enableDeferRootSchedulingToMicrotask is off. We need to land\n // that ASAP to unblock additional features we have planned.\n //\n // This function also never performs React work synchronously; it should\n // only schedule work to be performed later, in a separate task or microtask.\n // Check if any lanes are being starved by other work. If so, mark them as\n // expired so we know to work on those next.\n markStarvedLanesAsExpired(root, currentTime); // Determine the next lanes to work on, and their priority.\n\n var workInProgressRoot = getWorkInProgressRoot();\n var workInProgressRootRenderLanes = getWorkInProgressRootRenderLanes();\n var nextLanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);\n var existingCallbackNode = root.callbackNode;\n\n if ( // Check if there's nothing to work on\n nextLanes === NoLanes || // If this root is currently suspended and waiting for data to resolve, don't\n // schedule a task to render it. We'll either wait for a ping, or wait to\n // receive an update.\n //\n // Suspended render phase\n root === workInProgressRoot && isWorkLoopSuspendedOnData() || // Suspended commit phase\n root.cancelPendingCommit !== null) {\n // Fast path: There's nothing to work on.\n if (existingCallbackNode !== null) {\n cancelCallback(existingCallbackNode);\n }\n\n root.callbackNode = null;\n root.callbackPriority = NoLane;\n return NoLane;\n } // Schedule a new callback in the host environment.\n\n\n if (includesSyncLane(nextLanes)) {\n // Synchronous work is always flushed at the end of the microtask, so we\n // don't need to schedule an additional task.\n if (existingCallbackNode !== null) {\n cancelCallback(existingCallbackNode);\n }\n\n root.callbackPriority = SyncLane;\n root.callbackNode = null;\n return SyncLane;\n } else {\n // We use the highest priority lane to represent the priority of the callback.\n var existingCallbackPriority = root.callbackPriority;\n var newCallbackPriority = getHighestPriorityLane(nextLanes);\n\n if (newCallbackPriority === existingCallbackPriority && // Special case related to `act`. If the currently scheduled task is a\n // Scheduler task, rather than an `act` task, cancel it and re-schedule\n // on the `act` queue.\n !(ReactCurrentActQueue$2.current !== null && existingCallbackNode !== fakeActCallbackNode$1)) {\n // The priority hasn't changed. We can reuse the existing task.\n return newCallbackPriority;\n } else {\n // Cancel the existing callback. We'll schedule a new one below.\n cancelCallback(existingCallbackNode);\n }\n\n var schedulerPriorityLevel;\n\n switch (lanesToEventPriority(nextLanes)) {\n case DiscreteEventPriority:\n schedulerPriorityLevel = ImmediatePriority;\n break;\n\n case ContinuousEventPriority:\n schedulerPriorityLevel = UserBlockingPriority;\n break;\n\n case DefaultEventPriority:\n schedulerPriorityLevel = NormalPriority$1;\n break;\n\n case IdleEventPriority:\n schedulerPriorityLevel = IdlePriority;\n break;\n\n default:\n schedulerPriorityLevel = NormalPriority$1;\n break;\n }\n\n var newCallbackNode = scheduleCallback$2(schedulerPriorityLevel, performConcurrentWorkOnRoot.bind(null, root));\n root.callbackPriority = newCallbackPriority;\n root.callbackNode = newCallbackNode;\n return newCallbackPriority;\n }\n}\n\nfunction getContinuationForRoot(root, originalCallbackNode) {\n // This is called at the end of `performConcurrentWorkOnRoot` to determine\n // if we need to schedule a continuation task.\n //\n // Usually `scheduleTaskForRootDuringMicrotask` only runs inside a microtask;\n // however, since most of the logic for determining if we need a continuation\n // versus a new task is the same, we cheat a bit and call it here. This is\n // only safe to do because we know we're at the end of the browser task.\n // So although it's not an actual microtask, it might as well be.\n scheduleTaskForRootDuringMicrotask(root, now$1());\n\n if (root.callbackNode === originalCallbackNode) {\n // The task node scheduled for this root is the same one that's\n // currently executed. Need to return a continuation.\n return performConcurrentWorkOnRoot.bind(null, root);\n }\n\n return null;\n}\nvar fakeActCallbackNode$1 = {};\n\nfunction scheduleCallback$2(priorityLevel, callback) {\n if (ReactCurrentActQueue$2.current !== null) {\n // Special case: We're inside an `act` scope (a testing utility).\n // Instead of scheduling work in the host environment, add it to a\n // fake internal queue that's managed by the `act` implementation.\n ReactCurrentActQueue$2.current.push(callback);\n return fakeActCallbackNode$1;\n } else {\n return scheduleCallback$3(priorityLevel, callback);\n }\n}\n\nfunction cancelCallback(callbackNode) {\n if (callbackNode === fakeActCallbackNode$1) ; else if (callbackNode !== null) {\n cancelCallback$1(callbackNode);\n }\n}\n\nfunction scheduleImmediateTask(cb) {\n if (ReactCurrentActQueue$2.current !== null) {\n // Special case: Inside an `act` scope, we push microtasks to the fake `act`\n // callback queue. This is because we currently support calling `act`\n // without awaiting the result. The plan is to deprecate that, and require\n // that you always await the result so that the microtasks have a chance to\n // run. But it hasn't happened yet.\n ReactCurrentActQueue$2.current.push(function () {\n cb();\n return null;\n });\n } // TODO: Can we land supportsMicrotasks? Which environments don't support it?\n // Alternatively, can we move this check to the host config?\n\n\n {\n scheduleMicrotask(function () {\n // In Safari, appending an iframe forces microtasks to run.\n // https://github.com/facebook/react/issues/22459\n // We don't support running callbacks in the middle of render\n // or commit so we need to check against that.\n var executionContext = getExecutionContext();\n\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n // Note that this would still prematurely flush the callbacks\n // if this happens outside render or commit phase (e.g. in an event).\n // Intentionally using a macrotask instead of a microtask here. This is\n // wrong semantically but it prevents an infinite loop. The bug is\n // Safari's, not ours, so we just do our best to not crash even though\n // the behavior isn't completely correct.\n scheduleCallback$3(ImmediatePriority, cb);\n return;\n }\n\n cb();\n });\n }\n}\n\nfunction requestTransitionLane() {\n // The algorithm for assigning an update to a lane should be stable for all\n // updates at the same priority within the same event. To do this, the\n // inputs to the algorithm must be the same.\n //\n // The trick we use is to cache the first of each of these inputs within an\n // event. Then reset the cached values once we can be sure the event is\n // over. Our heuristic for that is whenever we enter a concurrent work loop.\n if (currentEventTransitionLane === NoLane) {\n // All transitions within the same event are assigned the same lane.\n currentEventTransitionLane = claimNextTransitionLane();\n }\n\n return currentEventTransitionLane;\n}\n\n// transition updates that occur while the async action is still in progress\n// are treated as part of the action.\n//\n// The ideal behavior would be to treat each async function as an independent\n// action. However, without a mechanism like AsyncContext, we can't tell which\n// action an update corresponds to. So instead, we entangle them all into one.\n// The listeners to notify once the entangled scope completes.\n\nvar currentEntangledListeners = null; // The number of pending async actions in the entangled scope.\n\nvar currentEntangledPendingCount = 0; // The transition lane shared by all updates in the entangled scope.\n\nvar currentEntangledLane = NoLane;\nfunction requestAsyncActionContext(actionReturnValue, // If this is provided, this resulting thenable resolves to this value instead\n// of the return value of the action. This is a perf trick to avoid composing\n// an extra async function.\noverrideReturnValue) {\n // This is an async action.\n //\n // Return a thenable that resolves once the action scope (i.e. the async\n // function passed to startTransition) has finished running.\n var thenable = actionReturnValue;\n var entangledListeners;\n\n if (currentEntangledListeners === null) {\n // There's no outer async action scope. Create a new one.\n entangledListeners = currentEntangledListeners = [];\n currentEntangledPendingCount = 0;\n currentEntangledLane = requestTransitionLane();\n } else {\n entangledListeners = currentEntangledListeners;\n }\n\n currentEntangledPendingCount++; // Create a thenable that represents the result of this action, but doesn't\n // resolve until the entire entangled scope has finished.\n //\n // Expressed using promises:\n // const [thisResult] = await Promise.all([thisAction, entangledAction]);\n // return thisResult;\n\n var resultThenable = createResultThenable(entangledListeners);\n var resultStatus = 'pending';\n var resultValue;\n var rejectedReason;\n thenable.then(function (value) {\n resultStatus = 'fulfilled';\n resultValue = overrideReturnValue !== null ? overrideReturnValue : value;\n pingEngtangledActionScope();\n }, function (error) {\n resultStatus = 'rejected';\n rejectedReason = error;\n pingEngtangledActionScope();\n }); // Attach a listener to fill in the result.\n\n entangledListeners.push(function () {\n switch (resultStatus) {\n case 'fulfilled':\n {\n var fulfilledThenable = resultThenable;\n fulfilledThenable.status = 'fulfilled';\n fulfilledThenable.value = resultValue;\n break;\n }\n\n case 'rejected':\n {\n var rejectedThenable = resultThenable;\n rejectedThenable.status = 'rejected';\n rejectedThenable.reason = rejectedReason;\n break;\n }\n\n case 'pending':\n default:\n {\n // The listener above should have been called first, so `resultStatus`\n // should already be set to the correct value.\n throw new Error('Thenable should have already resolved. This ' + 'is a bug in React.');\n }\n }\n });\n return resultThenable;\n}\nfunction requestSyncActionContext(actionReturnValue, // If this is provided, this resulting thenable resolves to this value instead\n// of the return value of the action. This is a perf trick to avoid composing\n// an extra async function.\noverrideReturnValue) {\n var resultValue = overrideReturnValue !== null ? overrideReturnValue : actionReturnValue; // This is not an async action, but it may be part of an outer async action.\n\n if (currentEntangledListeners === null) {\n return resultValue;\n } else {\n // Return a thenable that does not resolve until the entangled actions\n // have finished.\n var entangledListeners = currentEntangledListeners;\n var resultThenable = createResultThenable(entangledListeners);\n entangledListeners.push(function () {\n var fulfilledThenable = resultThenable;\n fulfilledThenable.status = 'fulfilled';\n fulfilledThenable.value = resultValue;\n });\n return resultThenable;\n }\n}\n\nfunction pingEngtangledActionScope() {\n if (currentEntangledListeners !== null && --currentEntangledPendingCount === 0) {\n // All the actions have finished. Close the entangled async action scope\n // and notify all the listeners.\n var listeners = currentEntangledListeners;\n currentEntangledListeners = null;\n currentEntangledLane = NoLane;\n\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener();\n }\n }\n}\n\nfunction createResultThenable(entangledListeners) {\n // Waits for the entangled async action to complete, then resolves to the\n // result of an individual action.\n var resultThenable = {\n status: 'pending',\n value: null,\n reason: null,\n then: function (resolve) {\n // This is a bit of a cheat. `resolve` expects a value of type `S` to be\n // passed, but because we're instrumenting the `status` field ourselves,\n // and we know this thenable will only be used by React, we also know\n // the value isn't actually needed. So we add the resolve function\n // directly to the entangled listeners.\n //\n // This is also why we don't need to check if the thenable is still\n // pending; the Suspense implementation already performs that check.\n var ping = resolve;\n entangledListeners.push(ping);\n }\n };\n return resultThenable;\n}\n\nfunction peekEntangledActionLane() {\n return currentEntangledLane;\n}\n\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentBatchConfig$3 = ReactSharedInternals.ReactCurrentBatchConfig;\nvar didWarnAboutMismatchedHooksForComponent;\nvar didWarnUncachedGetSnapshot;\nvar didWarnAboutUseWrappedInTryCatch;\nvar didWarnAboutAsyncClientComponent;\n\n{\n didWarnAboutMismatchedHooksForComponent = new Set();\n didWarnAboutUseWrappedInTryCatch = new Set();\n didWarnAboutAsyncClientComponent = new Set();\n} // The effect \"instance\" is a shared object that remains the same for the entire\n// lifetime of an effect. In Rust terms, a RefCell. We use it to store the\n// \"destroy\" function that is returned from an effect, because that is stateful.\n// The field is `undefined` if the effect is unmounted, or if the effect ran\n// but is not stateful. We don't explicitly track whether the effect is mounted\n// or unmounted because that can be inferred by the hiddenness of the fiber in\n// the tree, i.e. whether there is a hidden Offscreen fiber above it.\n//\n// It's unfortunate that this is stored on a separate object, because it adds\n// more memory per effect instance, but it's conceptually sound. I think there's\n// likely a better data structure we could use for effects; perhaps just one\n// array of effect instances per fiber. But I think this is OK for now despite\n// the additional memory and we can follow up with performance\n// optimizations later.\n// These are set right before calling the component.\n\n\nvar renderLanes = NoLanes; // The work-in-progress fiber. I've named it differently to distinguish it from\n// the work-in-progress hook.\n\nvar currentlyRenderingFiber$1 = null; // Hooks are stored as a linked list on the fiber's memoizedState field. The\n// current hook list is the list that belongs to the current fiber. The\n// work-in-progress hook list is a new list that will be added to the\n// work-in-progress fiber.\n\nvar currentHook = null;\nvar workInProgressHook = null; // Whether an update was scheduled at any point during the render phase. This\n// does not get reset if we do another render pass; only when we're completely\n// finished evaluating this component. This is an optimization so we know\n// whether we need to clear render phase updates after a throw.\n\nvar didScheduleRenderPhaseUpdate = false; // Where an update was scheduled only during the current render pass. This\n// gets reset after each attempt.\n// TODO: Maybe there's some way to consolidate this with\n// `didScheduleRenderPhaseUpdate`. Or with `numberOfReRenders`.\n\nvar didScheduleRenderPhaseUpdateDuringThisPass = false;\nvar shouldDoubleInvokeUserFnsInHooksDEV = false; // Counts the number of useId hooks in this component.\n\nvar localIdCounter = 0; // Counts number of `use`-d thenables\n\nvar thenableIndexCounter = 0;\nvar thenableState = null; // Used for ids that are generated completely client-side (i.e. not during\n// hydration). This counter is global, so client ids are not stable across\n// render attempts.\n\nvar globalClientIdCounter = 0;\nvar RE_RENDER_LIMIT = 25; // In DEV, this is the name of the currently executing primitive hook\n\nvar currentHookNameInDev = null; // In DEV, this list ensures that hooks are called in the same order between renders.\n// The list stores the order of hooks used during the initial render (mount).\n// Subsequent renders (updates) reference this list.\n\nvar hookTypesDev = null;\nvar hookTypesUpdateIndexDev = -1; // In DEV, this tracks whether currently rendering component needs to ignore\n// the dependencies for Hooks that need them (e.g. useEffect or useMemo).\n// When true, such Hooks will always be \"remounted\". Only used during hot reload.\n\nvar ignorePreviousDependencies = false;\n\nfunction mountHookTypesDev() {\n {\n var hookName = currentHookNameInDev;\n\n if (hookTypesDev === null) {\n hookTypesDev = [hookName];\n } else {\n hookTypesDev.push(hookName);\n }\n }\n}\n\nfunction updateHookTypesDev() {\n {\n var hookName = currentHookNameInDev;\n\n if (hookTypesDev !== null) {\n hookTypesUpdateIndexDev++;\n\n if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) {\n warnOnHookMismatchInDev(hookName);\n }\n }\n }\n}\n\nfunction checkDepsAreArrayDev(deps) {\n {\n if (deps !== undefined && deps !== null && !isArray(deps)) {\n // Verify deps, but only on mount to avoid extra checks.\n // It's unlikely their type would change as usually you define them inline.\n error('%s received a final argument that is not an array (instead, received `%s`). When ' + 'specified, the final argument must be an array.', currentHookNameInDev, typeof deps);\n }\n }\n}\n\nfunction warnOnHookMismatchInDev(currentHookName) {\n {\n var componentName = getComponentNameFromFiber(currentlyRenderingFiber$1);\n\n if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) {\n didWarnAboutMismatchedHooksForComponent.add(componentName);\n\n if (hookTypesDev !== null) {\n var table = '';\n var secondColumnStart = 30;\n\n for (var i = 0; i <= hookTypesUpdateIndexDev; i++) {\n var oldHookName = hookTypesDev[i];\n var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName;\n var row = i + 1 + \". \" + oldHookName; // Extra space so second column lines up\n // lol @ IE not supporting String#repeat\n\n while (row.length < secondColumnStart) {\n row += ' ';\n }\n\n row += newHookName + '\\n';\n table += row;\n }\n\n error('React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://reactjs.org/link/rules-of-hooks\\n\\n' + ' Previous render Next render\\n' + ' ------------------------------------------------------\\n' + '%s' + ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n', componentName, table);\n }\n }\n }\n}\n\nfunction warnIfAsyncClientComponent(Component, componentDoesIncludeHooks) {\n {\n // This dev-only check only works for detecting native async functions,\n // not transpiled ones. There's also a prod check that we use to prevent\n // async client components from crashing the app; the prod one works even\n // for transpiled async functions. Neither mechanism is completely\n // bulletproof but together they cover the most common cases.\n var isAsyncFunction = // $FlowIgnore[method-unbinding]\n Object.prototype.toString.call(Component) === '[object AsyncFunction]';\n\n if (isAsyncFunction) {\n // Encountered an async Client Component. This is not yet supported,\n // except in certain constrained cases, like during a route navigation.\n var componentName = getComponentNameFromFiber(currentlyRenderingFiber$1);\n\n if (!didWarnAboutAsyncClientComponent.has(componentName)) {\n didWarnAboutAsyncClientComponent.add(componentName); // Check if this is a sync update. We use the \"root\" render lanes here\n // because the \"subtree\" render lanes may include additional entangled\n // lanes related to revealing previously hidden content.\n\n var root = getWorkInProgressRoot();\n var rootRenderLanes = getWorkInProgressRootRenderLanes();\n\n if (root !== null && includesBlockingLane(root, rootRenderLanes)) {\n error('async/await is not yet supported in Client Components, only ' + 'Server Components. This error is often caused by accidentally ' + \"adding `'use client'` to a module that was originally written \" + 'for the server.');\n } else {\n // This is a concurrent (Transition, Retry, etc) render. We don't\n // warn in these cases.\n //\n // However, Async Components are forbidden to include hooks, even\n // during a transition, so let's check for that here.\n //\n // TODO: Add a corresponding warning to Server Components runtime.\n if (componentDoesIncludeHooks) {\n error('Hooks are not supported inside an async component. This ' + \"error is often caused by accidentally adding `'use client'` \" + 'to a module that was originally written for the server.');\n }\n }\n }\n }\n }\n}\n\nfunction throwInvalidHookError() {\n throw new Error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\\n' + '2. You might be breaking the Rules of Hooks\\n' + '3. You might have more than one copy of React in the same app\\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');\n}\n\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n {\n if (ignorePreviousDependencies) {\n // Only true when this component is being hot reloaded.\n return false;\n }\n }\n\n if (prevDeps === null) {\n {\n error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);\n }\n\n return false;\n }\n\n {\n // Don't bother comparing lengths in prod because these arrays should be\n // passed inline.\n if (nextDeps.length !== prevDeps.length) {\n error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\\n\\n' + 'Previous: %s\\n' + 'Incoming: %s', currentHookNameInDev, \"[\" + prevDeps.join(', ') + \"]\", \"[\" + nextDeps.join(', ') + \"]\");\n }\n } // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {\n // $FlowFixMe[incompatible-use] found when upgrading Flow\n if (objectIs(nextDeps[i], prevDeps[i])) {\n continue;\n }\n\n return false;\n }\n\n return true;\n}\n\nfunction renderWithHooks(current, workInProgress, Component, props, secondArg, nextRenderLanes) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber$1 = workInProgress;\n\n {\n hookTypesDev = current !== null ? current._debugHookTypes : null;\n hookTypesUpdateIndexDev = -1; // Used for hot reloading:\n\n ignorePreviousDependencies = current !== null && current.type !== workInProgress.type;\n }\n\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = NoLanes; // The following should have already been reset\n // currentHook = null;\n // workInProgressHook = null;\n // didScheduleRenderPhaseUpdate = false;\n // localIdCounter = 0;\n // thenableIndexCounter = 0;\n // thenableState = null;\n // TODO Warn if no hooks are used at all during mount, then some are used during update.\n // Currently we will identify the update render as a mount because memoizedState === null.\n // This is tricky because it's valid for certain types of components (e.g. React.lazy)\n // Using memoizedState to differentiate between mount/update only works if at least one stateful hook is used.\n // Non-stateful hooks (e.g. context) don't get added to memoizedState,\n // so memoizedState would be null during updates and mounts.\n\n {\n if (current !== null && current.memoizedState !== null) {\n ReactCurrentDispatcher$1.current = HooksDispatcherOnUpdateInDEV;\n } else if (hookTypesDev !== null) {\n // This dispatcher handles an edge case where a component is updating,\n // but no stateful hooks have been used.\n // We want to match the production code behavior (which will use HooksDispatcherOnMount),\n // but with the extra DEV validation to ensure hooks ordering hasn't changed.\n // This dispatcher does that.\n ReactCurrentDispatcher$1.current = HooksDispatcherOnMountWithHookTypesInDEV;\n } else {\n ReactCurrentDispatcher$1.current = HooksDispatcherOnMountInDEV;\n }\n } // In Strict Mode, during development, user functions are double invoked to\n // help detect side effects. The logic for how this is implemented for in\n // hook components is a bit complex so let's break it down.\n //\n // We will invoke the entire component function twice. However, during the\n // second invocation of the component, the hook state from the first\n // invocation will be reused. That means things like `useMemo` functions won't\n // run again, because the deps will match and the memoized result will\n // be reused.\n //\n // We want memoized functions to run twice, too, so account for this, user\n // functions are double invoked during the *first* invocation of the component\n // function, and are *not* double invoked during the second incovation:\n //\n // - First execution of component function: user functions are double invoked\n // - Second execution of component function (in Strict Mode, during\n // development): user functions are not double invoked.\n //\n // This is intentional for a few reasons; most importantly, it's because of\n // how `use` works when something suspends: it reuses the promise that was\n // passed during the first attempt. This is itself a form of memoization.\n // We need to be able to memoize the reactive inputs to the `use` call using\n // a hook (i.e. `useMemo`), which means, the reactive inputs to `use` must\n // come from the same component invocation as the output.\n //\n // There are plenty of tests to ensure this behavior is correct.\n\n\n var shouldDoubleRenderDEV = (workInProgress.mode & StrictLegacyMode) !== NoMode;\n shouldDoubleInvokeUserFnsInHooksDEV = shouldDoubleRenderDEV;\n var children = Component(props, secondArg);\n shouldDoubleInvokeUserFnsInHooksDEV = false; // Check if there was a render phase update\n\n if (didScheduleRenderPhaseUpdateDuringThisPass) {\n // Keep rendering until the component stabilizes (there are no more render\n // phase updates).\n children = renderWithHooksAgain(workInProgress, Component, props, secondArg);\n }\n\n if (shouldDoubleRenderDEV) {\n // In development, components are invoked twice to help detect side effects.\n setIsStrictModeForDevtools(true);\n\n try {\n children = renderWithHooksAgain(workInProgress, Component, props, secondArg);\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n finishRenderingHooks(current, workInProgress, Component);\n return children;\n}\n\nfunction finishRenderingHooks(current, workInProgress, Component) {\n {\n workInProgress._debugHookTypes = hookTypesDev;\n var componentDoesIncludeHooks = workInProgressHook !== null || thenableIndexCounter !== 0;\n warnIfAsyncClientComponent(Component, componentDoesIncludeHooks);\n } // We can assume the previous dispatcher is always this one, since we set it\n // at the beginning of the render phase and there's no re-entrance.\n\n\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher; // This check uses currentHook so that it works the same in DEV and prod bundles.\n // hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.\n\n var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null;\n renderLanes = NoLanes;\n currentlyRenderingFiber$1 = null;\n currentHook = null;\n workInProgressHook = null;\n\n {\n currentHookNameInDev = null;\n hookTypesDev = null;\n hookTypesUpdateIndexDev = -1; // Confirm that a static flag was not added or removed since the last\n // render. If this fires, it suggests that we incorrectly reset the static\n // flags in some other part of the codebase. This has happened before, for\n // example, in the SuspenseList implementation.\n\n if (current !== null && (current.flags & StaticMask) !== (workInProgress.flags & StaticMask) && // Disable this warning in legacy mode, because legacy Suspense is weird\n // and creates false positives. To make this work in legacy mode, we'd\n // need to mark fibers that commit in an incomplete state, somehow. For\n // now I'll disable the warning that most of the bugs that would trigger\n // it are either exclusive to concurrent mode or exist in both.\n (current.mode & ConcurrentMode) !== NoMode) {\n error('Internal React error: Expected static flag was missing. Please ' + 'notify the React team.');\n }\n }\n\n didScheduleRenderPhaseUpdate = false; // This is reset by checkDidRenderIdHook\n // localIdCounter = 0;\n\n thenableIndexCounter = 0;\n thenableState = null;\n\n if (didRenderTooFewHooks) {\n throw new Error('Rendered fewer hooks than expected. This may be caused by an accidental ' + 'early return statement.');\n }\n\n {\n if (checkIfUseWrappedInTryCatch()) {\n var componentName = getComponentNameFromFiber(workInProgress) || 'Unknown';\n\n if (!didWarnAboutUseWrappedInTryCatch.has(componentName) && // This warning also fires if you suspend with `use` inside an\n // async component. Since we warn for that above, we'll silence this\n // second warning by checking here.\n !didWarnAboutAsyncClientComponent.has(componentName)) {\n didWarnAboutUseWrappedInTryCatch.add(componentName);\n\n error('`use` was called from inside a try/catch block. This is not allowed ' + 'and can lead to unexpected behavior. To handle errors triggered ' + 'by `use`, wrap your component in a error boundary.');\n }\n }\n }\n}\n\nfunction replaySuspendedComponentWithHooks(current, workInProgress, Component, props, secondArg) {\n // This function is used to replay a component that previously suspended,\n // after its data resolves.\n //\n // It's a simplified version of renderWithHooks, but it doesn't need to do\n // most of the set up work because they weren't reset when we suspended; they\n // only get reset when the component either completes (finishRenderingHooks)\n // or unwinds (resetHooksOnUnwind).\n {\n hookTypesUpdateIndexDev = -1; // Used for hot reloading:\n\n ignorePreviousDependencies = current !== null && current.type !== workInProgress.type;\n }\n\n var children = renderWithHooksAgain(workInProgress, Component, props, secondArg);\n finishRenderingHooks(current, workInProgress, Component);\n return children;\n}\n\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n // This is used to perform another render pass. It's used when setState is\n // called during render, and for double invoking components in Strict Mode\n // during development.\n //\n // The state from the previous pass is reused whenever possible. So, state\n // updates that were already processed are not processed again, and memoized\n // functions (`useMemo`) are not invoked again.\n //\n // Keep rendering in a loop for as long as render phase updates continue to\n // be scheduled. Use a counter to prevent infinite loops.\n currentlyRenderingFiber$1 = workInProgress;\n var numberOfReRenders = 0;\n var children;\n\n do {\n if (didScheduleRenderPhaseUpdateDuringThisPass) {\n // It's possible that a use() value depended on a state that was updated in\n // this rerender, so we need to watch for different thenables this time.\n thenableState = null;\n }\n\n thenableIndexCounter = 0;\n didScheduleRenderPhaseUpdateDuringThisPass = false;\n\n if (numberOfReRenders >= RE_RENDER_LIMIT) {\n throw new Error('Too many re-renders. React limits the number of renders to prevent ' + 'an infinite loop.');\n }\n\n numberOfReRenders += 1;\n\n {\n // Even when hot reloading, allow dependencies to stabilize\n // after first render to prevent infinite render phase updates.\n ignorePreviousDependencies = false;\n } // Start over from the beginning of the list\n\n\n currentHook = null;\n workInProgressHook = null;\n workInProgress.updateQueue = null;\n\n {\n // Also validate hook order for cascading updates.\n hookTypesUpdateIndexDev = -1;\n }\n\n ReactCurrentDispatcher$1.current = HooksDispatcherOnRerenderInDEV ;\n children = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n\n return children;\n}\n\nfunction renderTransitionAwareHostComponentWithHooks(current, workInProgress, lanes) {\n\n return renderWithHooks(current, workInProgress, TransitionAwareHostComponent, null, null, lanes);\n}\nfunction TransitionAwareHostComponent() {\n\n var dispatcher = ReactCurrentDispatcher$1.current;\n\n var _dispatcher$useState = dispatcher.useState(),\n maybeThenable = _dispatcher$useState[0];\n\n if (typeof maybeThenable.then === 'function') {\n var thenable = maybeThenable;\n return useThenable(thenable);\n } else {\n var status = maybeThenable;\n return status;\n }\n}\nfunction checkDidRenderIdHook() {\n // This should be called immediately after every renderWithHooks call.\n // Conceptually, it's part of the return value of renderWithHooks; it's only a\n // separate function to avoid using an array tuple.\n var didRenderIdHook = localIdCounter !== 0;\n localIdCounter = 0;\n return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue; // TODO: Don't need to reset the flags here, because they're reset in the\n // complete phase (bubbleProperties).\n\n if ((workInProgress.mode & StrictEffectsMode) !== NoMode) {\n workInProgress.flags &= ~(MountPassiveDev | MountLayoutDev | Passive$1 | Update);\n } else {\n workInProgress.flags &= ~(Passive$1 | Update);\n }\n\n current.lanes = removeLanes(current.lanes, lanes);\n}\nfunction resetHooksAfterThrow() {\n // This is called immediaetly after a throw. It shouldn't reset the entire\n // module state, because the work loop might decide to replay the component\n // again without rewinding.\n //\n // It should only reset things like the current dispatcher, to prevent hooks\n // from being called outside of a component.\n currentlyRenderingFiber$1 = null; // We can assume the previous dispatcher is always this one, since we set it\n // at the beginning of the render phase and there's no re-entrance.\n\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n if (didScheduleRenderPhaseUpdate) {\n // There were render phase updates. These are only valid for this render\n // phase, which we are now aborting. Remove the updates from the queues so\n // they do not persist to the next render. Do not remove updates from hooks\n // that weren't processed.\n //\n // Only reset the updates from the queue if it has a clone. If it does\n // not have a clone, that means it wasn't processed, and the updates were\n // scheduled before we entered the render phase.\n var hook = workInProgress.memoizedState;\n\n while (hook !== null) {\n var queue = hook.queue;\n\n if (queue !== null) {\n queue.pending = null;\n }\n\n hook = hook.next;\n }\n\n didScheduleRenderPhaseUpdate = false;\n }\n\n renderLanes = NoLanes;\n currentlyRenderingFiber$1 = null;\n currentHook = null;\n workInProgressHook = null;\n\n {\n hookTypesDev = null;\n hookTypesUpdateIndexDev = -1;\n currentHookNameInDev = null;\n }\n\n didScheduleRenderPhaseUpdateDuringThisPass = false;\n localIdCounter = 0;\n thenableIndexCounter = 0;\n thenableState = null;\n}\n\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n\n if (workInProgressHook === null) {\n // This is the first hook in the list\n currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook;\n } else {\n // Append to the end of the list\n workInProgressHook = workInProgressHook.next = hook;\n }\n\n return workInProgressHook;\n}\n\nfunction updateWorkInProgressHook() {\n // This function is used both for updates and for re-renders triggered by a\n // render phase update. It assumes there is either a current hook we can\n // clone, or a work-in-progress hook from a previous render pass that we can\n // use as a base.\n var nextCurrentHook;\n\n if (currentHook === null) {\n var current = currentlyRenderingFiber$1.alternate;\n\n if (current !== null) {\n nextCurrentHook = current.memoizedState;\n } else {\n nextCurrentHook = null;\n }\n } else {\n nextCurrentHook = currentHook.next;\n }\n\n var nextWorkInProgressHook;\n\n if (workInProgressHook === null) {\n nextWorkInProgressHook = currentlyRenderingFiber$1.memoizedState;\n } else {\n nextWorkInProgressHook = workInProgressHook.next;\n }\n\n if (nextWorkInProgressHook !== null) {\n // There's already a work-in-progress. Reuse it.\n workInProgressHook = nextWorkInProgressHook;\n nextWorkInProgressHook = workInProgressHook.next;\n currentHook = nextCurrentHook;\n } else {\n // Clone from the current hook.\n if (nextCurrentHook === null) {\n var currentFiber = currentlyRenderingFiber$1.alternate;\n\n if (currentFiber === null) {\n // This is the initial render. This branch is reached when the component\n // suspends, resumes, then renders an additional hook.\n // Should never be reached because we should switch to the mount dispatcher first.\n throw new Error('Update hook called on initial render. This is likely a bug in React. Please file an issue.');\n } else {\n // This is an update. We should always have a current hook.\n throw new Error('Rendered more hooks than during the previous render.');\n }\n }\n\n currentHook = nextCurrentHook;\n var newHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n\n if (workInProgressHook === null) {\n // This is the first hook in the list.\n currentlyRenderingFiber$1.memoizedState = workInProgressHook = newHook;\n } else {\n // Append to the end of the list.\n workInProgressHook = workInProgressHook.next = newHook;\n }\n }\n\n return workInProgressHook;\n} // NOTE: defining two versions of this function to avoid size impact when this feature is disabled.\n// Previously this function was inlined, the additional `memoCache` property makes it not inlined.\n\n\nvar createFunctionComponentUpdateQueue;\n\n{\n createFunctionComponentUpdateQueue = function () {\n return {\n lastEffect: null,\n events: null,\n stores: null\n };\n };\n}\n\nfunction useThenable(thenable) {\n // Track the position of the thenable within this fiber.\n var index = thenableIndexCounter;\n thenableIndexCounter += 1;\n\n if (thenableState === null) {\n thenableState = createThenableState();\n }\n\n var result = trackUsedThenable(thenableState, thenable, index);\n\n if (currentlyRenderingFiber$1.alternate === null && (workInProgressHook === null ? currentlyRenderingFiber$1.memoizedState === null : workInProgressHook.next === null)) {\n // Initial render, and either this is the first time the component is\n // called, or there were no Hooks called after this use() the previous\n // time (perhaps because it threw). Subsequent Hook calls should use the\n // mount dispatcher.\n {\n ReactCurrentDispatcher$1.current = HooksDispatcherOnMountInDEV;\n }\n }\n\n return result;\n}\n\nfunction use(usable) {\n if (usable !== null && typeof usable === 'object') {\n // $FlowFixMe[method-unbinding]\n if (typeof usable.then === 'function') {\n // This is a thenable.\n var thenable = usable;\n return useThenable(thenable);\n } else if (usable.$$typeof === REACT_CONTEXT_TYPE || usable.$$typeof === REACT_SERVER_CONTEXT_TYPE) {\n var context = usable;\n return readContext(context);\n }\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n throw new Error('An unsupported type was passed to use(): ' + String(usable));\n}\n\nfunction basicStateReducer(state, action) {\n // $FlowFixMe[incompatible-use]: Flow doesn't like mixed types\n return typeof action === 'function' ? action(state) : action;\n}\n\nfunction mountReducer(reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n var initialState;\n\n if (init !== undefined) {\n initialState = init(initialArg);\n } else {\n initialState = initialArg;\n }\n\n hook.memoizedState = hook.baseState = initialState;\n var queue = {\n pending: null,\n lanes: NoLanes,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = queue;\n var dispatch = queue.dispatch = dispatchReducerAction.bind(null, currentlyRenderingFiber$1, queue);\n return [hook.memoizedState, dispatch];\n}\n\nfunction updateReducer(reducer, initialArg, init) {\n var hook = updateWorkInProgressHook();\n return updateReducerImpl(hook, currentHook, reducer);\n}\n\nfunction updateReducerImpl(hook, current, reducer) {\n var queue = hook.queue;\n\n if (queue === null) {\n throw new Error('Should have a queue. This is likely a bug in React. Please file an issue.');\n }\n\n queue.lastRenderedReducer = reducer; // The last rebase update that is NOT part of the base state.\n\n var baseQueue = hook.baseQueue; // The last pending update that hasn't been processed yet.\n\n var pendingQueue = queue.pending;\n\n if (pendingQueue !== null) {\n // We have new updates that haven't been processed yet.\n // We'll add them to the base queue.\n if (baseQueue !== null) {\n // Merge the pending queue and the base queue.\n var baseFirst = baseQueue.next;\n var pendingFirst = pendingQueue.next;\n baseQueue.next = pendingFirst;\n pendingQueue.next = baseFirst;\n }\n\n {\n if (current.baseQueue !== baseQueue) {\n // Internal invariant that should never happen, but feasibly could in\n // the future if we implement resuming, or some form of that.\n error('Internal error: Expected work-in-progress queue to be a clone. ' + 'This is a bug in React.');\n }\n }\n\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n\n var baseState = hook.baseState;\n\n if (baseQueue === null) {\n // If there are no pending updates, then the memoized state should be the\n // same as the base state. Currently these only diverge in the case of\n // useOptimistic, because useOptimistic accepts a new baseState on\n // every render.\n hook.memoizedState = baseState; // We don't need to call markWorkInProgressReceivedUpdate because\n // baseState is derived from other reactive values.\n } else {\n // We have a queue to process.\n var first = baseQueue.next;\n var newState = baseState;\n var newBaseState = null;\n var newBaseQueueFirst = null;\n var newBaseQueueLast = null;\n var update = first;\n\n do {\n // An extra OffscreenLane bit is added to updates that were made to\n // a hidden tree, so that we can distinguish them from updates that were\n // already there when the tree was hidden.\n var updateLane = removeLanes(update.lane, OffscreenLane);\n var isHiddenUpdate = updateLane !== update.lane; // Check if this update was made while the tree was hidden. If so, then\n // it's not a \"base\" update and we should disregard the extra base lanes\n // that were added to renderLanes when we entered the Offscreen tree.\n\n var shouldSkipUpdate = isHiddenUpdate ? !isSubsetOfLanes(getWorkInProgressRootRenderLanes(), updateLane) : !isSubsetOfLanes(renderLanes, updateLane);\n\n if (shouldSkipUpdate) {\n // Priority is insufficient. Skip this update. If this is the first\n // skipped update, the previous update/state is the new base\n // update/state.\n var clone = {\n lane: updateLane,\n revertLane: update.revertLane,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n };\n\n if (newBaseQueueLast === null) {\n newBaseQueueFirst = newBaseQueueLast = clone;\n newBaseState = newState;\n } else {\n newBaseQueueLast = newBaseQueueLast.next = clone;\n } // Update the remaining priority in the queue.\n // TODO: Don't need to accumulate this. Instead, we can remove\n // renderLanes from the original lanes.\n\n\n currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, updateLane);\n markSkippedUpdateLanes(updateLane);\n } else {\n // This update does have sufficient priority.\n // Check if this is an optimistic update.\n var revertLane = update.revertLane;\n\n if (revertLane === NoLane) {\n // This is not an optimistic update, and we're going to apply it now.\n // But, if there were earlier updates that were skipped, we need to\n // leave this update in the queue so it can be rebased later.\n if (newBaseQueueLast !== null) {\n var _clone = {\n // This update is going to be committed so we never want uncommit\n // it. Using NoLane works because 0 is a subset of all bitmasks, so\n // this will never be skipped by the check above.\n lane: NoLane,\n revertLane: NoLane,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n };\n newBaseQueueLast = newBaseQueueLast.next = _clone;\n }\n } else {\n // This is an optimistic update. If the \"revert\" priority is\n // sufficient, don't apply the update. Otherwise, apply the update,\n // but leave it in the queue so it can be either reverted or\n // rebased in a subsequent render.\n if (isSubsetOfLanes(renderLanes, revertLane)) {\n // The transition that this optimistic update is associated with\n // has finished. Pretend the update doesn't exist by skipping\n // over it.\n update = update.next;\n continue;\n } else {\n var _clone2 = {\n // Once we commit an optimistic update, we shouldn't uncommit it\n // until the transition it is associated with has finished\n // (represented by revertLane). Using NoLane here works because 0\n // is a subset of all bitmasks, so this will never be skipped by\n // the check above.\n lane: NoLane,\n // Reuse the same revertLane so we know when the transition\n // has finished.\n revertLane: update.revertLane,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n };\n\n if (newBaseQueueLast === null) {\n newBaseQueueFirst = newBaseQueueLast = _clone2;\n newBaseState = newState;\n } else {\n newBaseQueueLast = newBaseQueueLast.next = _clone2;\n } // Update the remaining priority in the queue.\n // TODO: Don't need to accumulate this. Instead, we can remove\n // renderLanes from the original lanes.\n\n\n currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, revertLane);\n markSkippedUpdateLanes(revertLane);\n }\n } // Process this update.\n\n\n var action = update.action;\n\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n reducer(newState, action);\n }\n\n if (update.hasEagerState) {\n // If this update is a state update (not a reducer) and was processed eagerly,\n // we can use the eagerly computed state\n newState = update.eagerState;\n } else {\n newState = reducer(newState, action);\n }\n }\n\n update = update.next;\n } while (update !== null && update !== first);\n\n if (newBaseQueueLast === null) {\n newBaseState = newState;\n } else {\n newBaseQueueLast.next = newBaseQueueFirst;\n } // Mark that the fiber performed work, but only if the new state is\n // different from the current state.\n\n\n if (!objectIs(newState, hook.memoizedState)) {\n markWorkInProgressReceivedUpdate();\n }\n\n hook.memoizedState = newState;\n hook.baseState = newBaseState;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = newState;\n }\n\n if (baseQueue === null) {\n // `queue.lanes` is used for entangling transitions. We can set it back to\n // zero once the queue is empty.\n queue.lanes = NoLanes;\n }\n\n var dispatch = queue.dispatch;\n return [hook.memoizedState, dispatch];\n}\n\nfunction rerenderReducer(reducer, initialArg, init) {\n var hook = updateWorkInProgressHook();\n var queue = hook.queue;\n\n if (queue === null) {\n throw new Error('Should have a queue. This is likely a bug in React. Please file an issue.');\n }\n\n queue.lastRenderedReducer = reducer; // This is a re-render. Apply the new render phase updates to the previous\n // work-in-progress hook.\n\n var dispatch = queue.dispatch;\n var lastRenderPhaseUpdate = queue.pending;\n var newState = hook.memoizedState;\n\n if (lastRenderPhaseUpdate !== null) {\n // The queue doesn't persist past this render pass.\n queue.pending = null;\n var firstRenderPhaseUpdate = lastRenderPhaseUpdate.next;\n var update = firstRenderPhaseUpdate;\n\n do {\n // Process this render phase update. We don't have to check the\n // priority because it will always be the same as the current\n // render's.\n var action = update.action;\n newState = reducer(newState, action);\n update = update.next;\n } while (update !== firstRenderPhaseUpdate); // Mark that the fiber performed work, but only if the new state is\n // different from the current state.\n\n\n if (!objectIs(newState, hook.memoizedState)) {\n markWorkInProgressReceivedUpdate();\n }\n\n hook.memoizedState = newState; // Don't persist the state accumulated from the render phase updates to\n // the base state unless the queue is empty.\n // TODO: Not sure if this is the desired semantics, but it's what we\n // do for gDSFP. I can't remember why.\n\n if (hook.baseQueue === null) {\n hook.baseState = newState;\n }\n\n queue.lastRenderedState = newState;\n }\n\n return [newState, dispatch];\n}\n\nfunction mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber$1;\n var hook = mountWorkInProgressHook();\n var nextSnapshot;\n var isHydrating = getIsHydrating();\n\n if (isHydrating) {\n if (getServerSnapshot === undefined) {\n throw new Error('Missing getServerSnapshot, which is required for ' + 'server-rendered content. Will revert to client rendering.');\n }\n\n nextSnapshot = getServerSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n if (nextSnapshot !== getServerSnapshot()) {\n error('The result of getServerSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n }\n } else {\n nextSnapshot = getSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n var cachedSnapshot = getSnapshot();\n\n if (!objectIs(nextSnapshot, cachedSnapshot)) {\n error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n } // Unless we're rendering a blocking lane, schedule a consistency check.\n // Right before committing, we will walk the tree and check if any of the\n // stores were mutated.\n //\n // We won't do this if we're hydrating server-rendered content, because if\n // the content is stale, it's already visible anyway. Instead we'll patch\n // it up in a passive effect.\n\n\n var root = getWorkInProgressRoot();\n\n if (root === null) {\n throw new Error('Expected a work-in-progress root. This is a bug in React. Please file an issue.');\n }\n\n var rootRenderLanes = getWorkInProgressRootRenderLanes();\n\n if (!includesBlockingLane(root, rootRenderLanes)) {\n pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);\n }\n } // Read the current snapshot from the store on every render. This breaks the\n // normal rules of React, and only works because store updates are\n // always synchronous.\n\n\n hook.memoizedState = nextSnapshot;\n var inst = {\n value: nextSnapshot,\n getSnapshot: getSnapshot\n };\n hook.queue = inst; // Schedule an effect to subscribe to the store.\n\n mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [subscribe]); // Schedule an effect to update the mutable instance fields. We will update\n // this whenever subscribe, getSnapshot, or value changes. Because there's no\n // clean-up function, and we track the deps correctly, we can call pushEffect\n // directly, without storing any additional state. For the same reason, we\n // don't need to set a static flag, either.\n\n fiber.flags |= Passive$1;\n pushEffect(HasEffect | Passive, updateStoreInstance.bind(null, fiber, inst, nextSnapshot, getSnapshot), createEffectInstance(), null);\n return nextSnapshot;\n}\n\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber$1;\n var hook = updateWorkInProgressHook(); // Read the current snapshot from the store on every render. This breaks the\n // normal rules of React, and only works because store updates are\n // always synchronous.\n\n var nextSnapshot;\n var isHydrating = getIsHydrating();\n\n if (isHydrating) {\n // Needed for strict mode double render\n if (getServerSnapshot === undefined) {\n throw new Error('Missing getServerSnapshot, which is required for ' + 'server-rendered content. Will revert to client rendering.');\n }\n\n nextSnapshot = getServerSnapshot();\n } else {\n nextSnapshot = getSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n var cachedSnapshot = getSnapshot();\n\n if (!objectIs(nextSnapshot, cachedSnapshot)) {\n error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n }\n }\n\n var prevSnapshot = (currentHook || hook).memoizedState;\n var snapshotChanged = !objectIs(prevSnapshot, nextSnapshot);\n\n if (snapshotChanged) {\n hook.memoizedState = nextSnapshot;\n markWorkInProgressReceivedUpdate();\n }\n\n var inst = hook.queue;\n updateEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [subscribe]); // Whenever getSnapshot or subscribe changes, we need to check in the\n // commit phase if there was an interleaved mutation. In concurrent mode\n // this can happen all the time, but even in synchronous mode, an earlier\n // effect may have mutated the store.\n\n if (inst.getSnapshot !== getSnapshot || snapshotChanged || // Check if the subscribe function changed. We can save some memory by\n // checking whether we scheduled a subscription effect above.\n workInProgressHook !== null && workInProgressHook.memoizedState.tag & HasEffect) {\n fiber.flags |= Passive$1;\n pushEffect(HasEffect | Passive, updateStoreInstance.bind(null, fiber, inst, nextSnapshot, getSnapshot), createEffectInstance(), null); // Unless we're rendering a blocking lane, schedule a consistency check.\n // Right before committing, we will walk the tree and check if any of the\n // stores were mutated.\n\n var root = getWorkInProgressRoot();\n\n if (root === null) {\n throw new Error('Expected a work-in-progress root. This is a bug in React. Please file an issue.');\n }\n\n if (!isHydrating && !includesBlockingLane(root, renderLanes)) {\n pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);\n }\n }\n\n return nextSnapshot;\n}\n\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= StoreConsistency;\n var check = {\n getSnapshot: getSnapshot,\n value: renderedSnapshot\n };\n var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;\n\n if (componentUpdateQueue === null) {\n componentUpdateQueue = createFunctionComponentUpdateQueue();\n currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;\n componentUpdateQueue.stores = [check];\n } else {\n var stores = componentUpdateQueue.stores;\n\n if (stores === null) {\n componentUpdateQueue.stores = [check];\n } else {\n stores.push(check);\n }\n }\n}\n\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n // These are updated in the passive phase\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot; // Something may have been mutated in between render and commit. This could\n // have been in an event that fired before the passive effects, or it could\n // have been in a layout effect. In that case, we would have used the old\n // snapsho and getSnapshot values to bail out. We need to check one more time.\n\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceStoreRerender(fiber);\n }\n}\n\nfunction subscribeToStore(fiber, inst, subscribe) {\n var handleStoreChange = function () {\n // The store changed. Check if the snapshot changed since the last time we\n // read from the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceStoreRerender(fiber);\n }\n }; // Subscribe to the store and return a clean-up function.\n\n\n return subscribe(handleStoreChange);\n}\n\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n var prevValue = inst.value;\n\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(prevValue, nextValue);\n } catch (error) {\n return true;\n }\n}\n\nfunction forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n}\n\nfunction mountStateImpl(initialState) {\n var hook = mountWorkInProgressHook();\n\n if (typeof initialState === 'function') {\n // $FlowFixMe[incompatible-use]: Flow doesn't like mixed types\n initialState = initialState();\n }\n\n hook.memoizedState = hook.baseState = initialState;\n var queue = {\n pending: null,\n lanes: NoLanes,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n hook.queue = queue;\n return hook;\n}\n\nfunction mountState(initialState) {\n var hook = mountStateImpl(initialState);\n var queue = hook.queue;\n var dispatch = dispatchSetState.bind(null, currentlyRenderingFiber$1, queue);\n queue.dispatch = dispatch;\n return [hook.memoizedState, dispatch];\n}\n\nfunction updateState(initialState) {\n return updateReducer(basicStateReducer);\n}\n\nfunction rerenderState(initialState) {\n return rerenderReducer(basicStateReducer);\n}\n\nfunction mountOptimistic(passthrough, reducer) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = hook.baseState = passthrough;\n var queue = {\n pending: null,\n lanes: NoLanes,\n dispatch: null,\n // Optimistic state does not use the eager update optimization.\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n hook.queue = queue; // This is different than the normal setState function.\n\n var dispatch = dispatchOptimisticSetState.bind(null, currentlyRenderingFiber$1, true, queue);\n queue.dispatch = dispatch;\n return [passthrough, dispatch];\n}\n\nfunction updateOptimistic(passthrough, reducer) {\n var hook = updateWorkInProgressHook();\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n}\n\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n // Optimistic updates are always rebased on top of the latest value passed in\n // as an argument. It's called a passthrough because if there are no pending\n // updates, it will be returned as-is.\n //\n // Reset the base state to the passthrough. Future updates will be applied\n // on top of this.\n hook.baseState = passthrough; // If a reducer is not provided, default to the same one used by useState.\n\n var resolvedReducer = typeof reducer === 'function' ? reducer : basicStateReducer;\n return updateReducerImpl(hook, currentHook, resolvedReducer);\n}\n\nfunction rerenderOptimistic(passthrough, reducer) {\n // Unlike useState, useOptimistic doesn't support render phase updates.\n // Also unlike useState, we need to replay all pending updates again in case\n // the passthrough value changed.\n //\n // So instead of a forked re-render implementation that knows how to handle\n // render phase udpates, we can use the same implementation as during a\n // regular mount or update.\n var hook = updateWorkInProgressHook();\n\n if (currentHook !== null) {\n // This is an update. Process the update queue.\n return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n } // This is a mount. No updates to process.\n // Reset the base state to the passthrough. Future updates will be applied\n // on top of this.\n\n\n hook.baseState = passthrough;\n var dispatch = hook.queue.dispatch;\n return [passthrough, dispatch];\n} // useFormState actions run sequentially, because each action receives the\n// previous state as an argument. We store pending actions on a queue.\n\n\nfunction dispatchFormState(fiber, actionQueue, setState, payload) {\n if (isRenderPhaseUpdate(fiber)) {\n throw new Error('Cannot update form state while rendering.');\n }\n\n var last = actionQueue.pending;\n\n if (last === null) {\n // There are no pending actions; this is the first one. We can run\n // it immediately.\n var newLast = {\n payload: payload,\n next: null // circular\n\n };\n newLast.next = actionQueue.pending = newLast;\n runFormStateAction(actionQueue, setState, payload);\n } else {\n // There's already an action running. Add to the queue.\n var first = last.next;\n var _newLast = {\n payload: payload,\n next: first\n };\n actionQueue.pending = last.next = _newLast;\n }\n}\n\nfunction runFormStateAction(actionQueue, setState, payload) {\n var action = actionQueue.action;\n var prevState = actionQueue.state; // This is a fork of startTransition\n\n var prevTransition = ReactCurrentBatchConfig$3.transition;\n ReactCurrentBatchConfig$3.transition = {};\n var currentTransition = ReactCurrentBatchConfig$3.transition;\n\n {\n ReactCurrentBatchConfig$3.transition._updatedFibers = new Set();\n }\n\n try {\n var returnValue = action(prevState, payload);\n\n if (returnValue !== null && typeof returnValue === 'object' && // $FlowFixMe[method-unbinding]\n typeof returnValue.then === 'function') {\n var thenable = returnValue; // Attach a listener to read the return state of the action. As soon as\n // this resolves, we can run the next action in the sequence.\n\n thenable.then(function (nextState) {\n actionQueue.state = nextState;\n finishRunningFormStateAction(actionQueue, setState);\n }, function () {\n return finishRunningFormStateAction(actionQueue, setState);\n });\n var entangledResult = requestAsyncActionContext(thenable, null);\n setState(entangledResult);\n } else {\n // This is either `returnValue` or a thenable that resolves to\n // `returnValue`, depending on whether we're inside an async action scope.\n var _entangledResult = requestSyncActionContext(returnValue, null);\n\n setState(_entangledResult);\n var nextState = returnValue;\n actionQueue.state = nextState;\n finishRunningFormStateAction(actionQueue, setState);\n }\n } catch (error) {\n // This is a trick to get the `useFormState` hook to rethrow the error.\n // When it unwraps the thenable with the `use` algorithm, the error\n // will be thrown.\n var rejectedThenable = {\n then: function () {},\n status: 'rejected',\n reason: error // $FlowFixMe: Not sure why this doesn't work\n\n };\n setState(rejectedThenable);\n finishRunningFormStateAction(actionQueue, setState);\n } finally {\n ReactCurrentBatchConfig$3.transition = prevTransition;\n\n {\n if (prevTransition === null && currentTransition._updatedFibers) {\n var updatedFibersCount = currentTransition._updatedFibers.size;\n\n currentTransition._updatedFibers.clear();\n\n if (updatedFibersCount > 10) {\n warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');\n }\n }\n }\n }\n}\n\nfunction finishRunningFormStateAction(actionQueue, setState) {\n // The action finished running. Pop it from the queue and run the next pending\n // action, if there are any.\n var last = actionQueue.pending;\n\n if (last !== null) {\n var first = last.next;\n\n if (first === last) {\n // This was the last action in the queue.\n actionQueue.pending = null;\n } else {\n // Remove the first node from the circular queue.\n var next = first.next;\n last.next = next; // Run the next action.\n\n runFormStateAction(actionQueue, setState, next.payload);\n }\n }\n}\n\nfunction formStateReducer(oldState, newState) {\n return newState;\n}\n\nfunction mountFormState(action, initialStateProp, permalink) {\n var initialState = initialStateProp;\n\n if (getIsHydrating()) {\n var root = getWorkInProgressRoot();\n var ssrFormState = root.formState; // If a formState option was passed to the root, there are form state\n // markers that we need to hydrate. These indicate whether the form state\n // matches this hook instance.\n\n if (ssrFormState !== null) {\n var isMatching = tryToClaimNextHydratableFormMarkerInstance();\n\n if (isMatching) {\n initialState = ssrFormState[0];\n }\n }\n } // State hook. The state is stored in a thenable which is then unwrapped by\n // the `use` algorithm during render.\n\n\n var stateHook = mountWorkInProgressHook();\n stateHook.memoizedState = stateHook.baseState = initialState; // TODO: Typing this \"correctly\" results in recursion limit errors\n // const stateQueue: UpdateQueue<S | Awaited<S>, S | Awaited<S>> = {\n\n var stateQueue = {\n pending: null,\n lanes: NoLanes,\n dispatch: null,\n lastRenderedReducer: formStateReducer,\n lastRenderedState: initialState\n };\n stateHook.queue = stateQueue;\n var setState = dispatchSetState.bind(null, currentlyRenderingFiber$1, stateQueue);\n stateQueue.dispatch = setState; // Action queue hook. This is used to queue pending actions. The queue is\n // shared between all instances of the hook. Similar to a regular state queue,\n // but different because the actions are run sequentially, and they run in\n // an event instead of during render.\n\n var actionQueueHook = mountWorkInProgressHook();\n var actionQueue = {\n state: initialState,\n dispatch: null,\n // circular\n action: action,\n pending: null\n };\n actionQueueHook.queue = actionQueue;\n var dispatch = dispatchFormState.bind(null, currentlyRenderingFiber$1, actionQueue, setState);\n actionQueue.dispatch = dispatch; // Stash the action function on the memoized state of the hook. We'll use this\n // to detect when the action function changes so we can update it in\n // an effect.\n\n actionQueueHook.memoizedState = action;\n return [initialState, dispatch];\n}\n\nfunction updateFormState(action, initialState, permalink) {\n var stateHook = updateWorkInProgressHook();\n var currentStateHook = currentHook;\n return updateFormStateImpl(stateHook, currentStateHook, action);\n}\n\nfunction updateFormStateImpl(stateHook, currentStateHook, action, initialState, permalink) {\n var _updateReducerImpl = updateReducerImpl(stateHook, currentStateHook, formStateReducer),\n actionResult = _updateReducerImpl[0]; // This will suspend until the action finishes.\n\n\n var state = typeof actionResult === 'object' && actionResult !== null && // $FlowFixMe[method-unbinding]\n typeof actionResult.then === 'function' ? useThenable(actionResult) : actionResult;\n var actionQueueHook = updateWorkInProgressHook();\n var actionQueue = actionQueueHook.queue;\n var dispatch = actionQueue.dispatch; // Check if a new action was passed. If so, update it in an effect.\n\n var prevAction = actionQueueHook.memoizedState;\n\n if (action !== prevAction) {\n currentlyRenderingFiber$1.flags |= Passive$1;\n pushEffect(HasEffect | Passive, formStateActionEffect.bind(null, actionQueue, action), createEffectInstance(), null);\n }\n\n return [state, dispatch];\n}\n\nfunction formStateActionEffect(actionQueue, action) {\n actionQueue.action = action;\n}\n\nfunction rerenderFormState(action, initialState, permalink) {\n // Unlike useState, useFormState doesn't support render phase updates.\n // Also unlike useState, we need to replay all pending updates again in case\n // the passthrough value changed.\n //\n // So instead of a forked re-render implementation that knows how to handle\n // render phase udpates, we can use the same implementation as during a\n // regular mount or update.\n var stateHook = updateWorkInProgressHook();\n var currentStateHook = currentHook;\n\n if (currentStateHook !== null) {\n // This is an update. Process the update queue.\n return updateFormStateImpl(stateHook, currentStateHook, action);\n } // This is a mount. No updates to process.\n\n\n var state = stateHook.memoizedState;\n var actionQueueHook = updateWorkInProgressHook();\n var actionQueue = actionQueueHook.queue;\n var dispatch = actionQueue.dispatch; // This may have changed during the rerender.\n\n actionQueueHook.memoizedState = action;\n return [state, dispatch];\n}\n\nfunction pushEffect(tag, create, inst, deps) {\n var effect = {\n tag: tag,\n create: create,\n inst: inst,\n deps: deps,\n // Circular\n next: null\n };\n var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;\n\n if (componentUpdateQueue === null) {\n componentUpdateQueue = createFunctionComponentUpdateQueue();\n currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;\n componentUpdateQueue.lastEffect = effect.next = effect;\n } else {\n var lastEffect = componentUpdateQueue.lastEffect;\n\n if (lastEffect === null) {\n componentUpdateQueue.lastEffect = effect.next = effect;\n } else {\n var firstEffect = lastEffect.next;\n lastEffect.next = effect;\n effect.next = firstEffect;\n componentUpdateQueue.lastEffect = effect;\n }\n }\n\n return effect;\n}\n\nfunction createEffectInstance() {\n return {\n destroy: undefined\n };\n}\n\nfunction mountRef(initialValue) {\n var hook = mountWorkInProgressHook();\n\n {\n var _ref2 = {\n current: initialValue\n };\n hook.memoizedState = _ref2;\n return _ref2;\n }\n}\n\nfunction updateRef(initialValue) {\n var hook = updateWorkInProgressHook();\n return hook.memoizedState;\n}\n\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n currentlyRenderingFiber$1.flags |= fiberFlags;\n hook.memoizedState = pushEffect(HasEffect | hookFlags, create, createEffectInstance(), nextDeps);\n}\n\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var effect = hook.memoizedState;\n var inst = effect.inst; // currentHook is null on initial mount when rerendering after a render phase\n // state update or for strict mode.\n\n if (currentHook !== null) {\n if (nextDeps !== null) {\n var prevEffect = currentHook.memoizedState;\n var prevDeps = prevEffect.deps;\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n hook.memoizedState = pushEffect(hookFlags, create, inst, nextDeps);\n return;\n }\n }\n }\n\n currentlyRenderingFiber$1.flags |= fiberFlags;\n hook.memoizedState = pushEffect(HasEffect | hookFlags, create, inst, nextDeps);\n}\n\nfunction mountEffect(create, deps) {\n if ((currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode && (currentlyRenderingFiber$1.mode & NoStrictPassiveEffectsMode) === NoMode) {\n mountEffectImpl(MountPassiveDev | Passive$1 | PassiveStatic, Passive, create, deps);\n } else {\n mountEffectImpl(Passive$1 | PassiveStatic, Passive, create, deps);\n }\n}\n\nfunction updateEffect(create, deps) {\n updateEffectImpl(Passive$1, Passive, create, deps);\n}\n\nfunction mountInsertionEffect(create, deps) {\n mountEffectImpl(Update, Insertion, create, deps);\n}\n\nfunction updateInsertionEffect(create, deps) {\n return updateEffectImpl(Update, Insertion, create, deps);\n}\n\nfunction mountLayoutEffect(create, deps) {\n var fiberFlags = Update | LayoutStatic;\n\n if ((currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {\n fiberFlags |= MountLayoutDev;\n }\n\n return mountEffectImpl(fiberFlags, Layout, create, deps);\n}\n\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(Update, Layout, create, deps);\n}\n\nfunction imperativeHandleEffect(create, ref) {\n if (typeof ref === 'function') {\n var refCallback = ref;\n var inst = create();\n refCallback(inst);\n return function () {\n refCallback(null);\n };\n } else if (ref !== null && ref !== undefined) {\n var refObject = ref;\n\n {\n if (!refObject.hasOwnProperty('current')) {\n error('Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}');\n }\n }\n\n var _inst = create();\n\n refObject.current = _inst;\n return function () {\n refObject.current = null;\n };\n }\n}\n\nfunction mountImperativeHandle(ref, create, deps) {\n {\n if (typeof create !== 'function') {\n error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n }\n } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n var fiberFlags = Update | LayoutStatic;\n\n if ((currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {\n fiberFlags |= MountLayoutDev;\n }\n\n mountEffectImpl(fiberFlags, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction updateImperativeHandle(ref, create, deps) {\n {\n if (typeof create !== 'function') {\n error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n }\n } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n updateEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction mountDebugValue(value, formatterFn) {// This hook is normally a no-op.\n // The react-debug-hooks package injects its own implementation\n // so that e.g. DevTools can display custom hook values.\n}\n\nvar updateDebugValue = mountDebugValue;\n\nfunction mountCallback(callback, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n hook.memoizedState = [callback, nextDeps];\n return callback;\n}\n\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var prevState = hook.memoizedState;\n\n if (nextDeps !== null) {\n var prevDeps = prevState[1];\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n return prevState[0];\n }\n }\n\n hook.memoizedState = [callback, nextDeps];\n return callback;\n}\n\nfunction mountMemo(nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n nextCreate();\n }\n\n var nextValue = nextCreate();\n hook.memoizedState = [nextValue, nextDeps];\n return nextValue;\n}\n\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var prevState = hook.memoizedState; // Assume these are defined. If they're not, areHookInputsEqual will warn.\n\n if (nextDeps !== null) {\n var prevDeps = prevState[1];\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n return prevState[0];\n }\n }\n\n if (shouldDoubleInvokeUserFnsInHooksDEV) {\n nextCreate();\n }\n\n var nextValue = nextCreate();\n hook.memoizedState = [nextValue, nextDeps];\n return nextValue;\n}\n\nfunction mountDeferredValue(value, initialValue) {\n var hook = mountWorkInProgressHook();\n return mountDeferredValueImpl(hook, value);\n}\n\nfunction updateDeferredValue(value, initialValue) {\n var hook = updateWorkInProgressHook();\n var resolvedCurrentHook = currentHook;\n var prevValue = resolvedCurrentHook.memoizedState;\n return updateDeferredValueImpl(hook, prevValue, value);\n}\n\nfunction rerenderDeferredValue(value, initialValue) {\n var hook = updateWorkInProgressHook();\n\n if (currentHook === null) {\n // This is a rerender during a mount.\n return mountDeferredValueImpl(hook, value);\n } else {\n // This is a rerender during an update.\n var prevValue = currentHook.memoizedState;\n return updateDeferredValueImpl(hook, prevValue, value);\n }\n}\n\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n {\n hook.memoizedState = value;\n return value;\n }\n}\n\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n if (objectIs(value, prevValue)) {\n // The incoming value is referentially identical to the currently rendered\n // value, so we can bail out quickly.\n return value;\n } else {\n // Received a new value that's different from the current value.\n // Check if we're inside a hidden tree\n if (isCurrentTreeHidden()) {\n // Revealing a prerendered tree is considered the same as mounting new\n // one, so we reuse the \"mount\" path in this case.\n var resultValue = mountDeferredValueImpl(hook, value); // Unlike during an actual mount, we need to mark this as an update if\n // the value changed.\n\n if (!objectIs(resultValue, prevValue)) {\n markWorkInProgressReceivedUpdate();\n }\n\n return resultValue;\n }\n\n var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes);\n\n if (shouldDeferValue) {\n // This is an urgent update. Since the value has changed, keep using the\n // previous value and spawn a deferred render to update it later.\n // Schedule a deferred render\n var deferredLane = requestDeferredLane();\n currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, deferredLane);\n markSkippedUpdateLanes(deferredLane); // Reuse the previous value. We do not need to mark this as an update,\n // because we did not render a new value.\n\n return prevValue;\n } else {\n // This is not an urgent update, so we can use the latest value regardless\n // of what it is. No need to defer it.\n // Mark this as an update to prevent the fiber from bailing out.\n markWorkInProgressReceivedUpdate();\n hook.memoizedState = value;\n return value;\n }\n }\n}\n\nfunction startTransition(fiber, queue, pendingState, finishedState, callback, options) {\n var previousPriority = getCurrentUpdatePriority();\n setCurrentUpdatePriority(higherEventPriority(previousPriority, ContinuousEventPriority));\n var prevTransition = ReactCurrentBatchConfig$3.transition;\n var currentTransition = {};\n\n {\n // We don't really need to use an optimistic update here, because we\n // schedule a second \"revert\" update below (which we use to suspend the\n // transition until the async action scope has finished). But we'll use an\n // optimistic update anyway to make it less likely the behavior accidentally\n // diverges; for example, both an optimistic update and this one should\n // share the same lane.\n ReactCurrentBatchConfig$3.transition = currentTransition;\n dispatchOptimisticSetState(fiber, false, queue, pendingState);\n }\n\n {\n ReactCurrentBatchConfig$3.transition._updatedFibers = new Set();\n }\n\n try {\n if (enableAsyncActions) {\n var returnValue = callback(); // Check if we're inside an async action scope. If so, we'll entangle\n // this new action with the existing scope.\n //\n // If we're not already inside an async action scope, and this action is\n // async, then we'll create a new async scope.\n //\n // In the async case, the resulting render will suspend until the async\n // action scope has finished.\n\n if (returnValue !== null && typeof returnValue === 'object' && typeof returnValue.then === 'function') {\n var thenable = returnValue; // This is a thenable that resolves to `finishedState` once the async\n // action scope has finished.\n\n var entangledResult = requestAsyncActionContext(thenable, finishedState);\n dispatchSetState(fiber, queue, entangledResult);\n } else {\n // This is either `finishedState` or a thenable that resolves to\n // `finishedState`, depending on whether we're inside an async\n // action scope.\n var _entangledResult2 = requestSyncActionContext(returnValue, finishedState);\n\n dispatchSetState(fiber, queue, _entangledResult2);\n }\n }\n } catch (error) {\n {\n // This is a trick to get the `useTransition` hook to rethrow the error.\n // When it unwraps the thenable with the `use` algorithm, the error\n // will be thrown.\n var rejectedThenable = {\n then: function () {},\n status: 'rejected',\n reason: error\n };\n dispatchSetState(fiber, queue, rejectedThenable);\n }\n } finally {\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig$3.transition = prevTransition;\n\n {\n if (prevTransition === null && currentTransition._updatedFibers) {\n var updatedFibersCount = currentTransition._updatedFibers.size;\n\n currentTransition._updatedFibers.clear();\n\n if (updatedFibersCount > 10) {\n warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');\n }\n }\n }\n }\n}\n\nfunction startHostTransition(formFiber, pendingState, callback, formData) {\n\n if (formFiber.tag !== HostComponent) {\n throw new Error('Expected the form instance to be a HostComponent. This ' + 'is a bug in React.');\n }\n\n var queue;\n\n if (formFiber.memoizedState === null) {\n // Upgrade this host component fiber to be stateful. We're going to pretend\n // it was stateful all along so we can reuse most of the implementation\n // for function components and useTransition.\n //\n // Create the state hook used by TransitionAwareHostComponent. This is\n // essentially an inlined version of mountState.\n var newQueue = {\n pending: null,\n lanes: NoLanes,\n // We're going to cheat and intentionally not create a bound dispatch\n // method, because we can call it directly in startTransition.\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: NotPendingTransition\n };\n queue = newQueue;\n var stateHook = {\n memoizedState: NotPendingTransition,\n baseState: NotPendingTransition,\n baseQueue: null,\n queue: newQueue,\n next: null\n }; // Add the state hook to both fiber alternates. The idea is that the fiber\n // had this hook all along.\n\n formFiber.memoizedState = stateHook;\n var alternate = formFiber.alternate;\n\n if (alternate !== null) {\n alternate.memoizedState = stateHook;\n }\n } else {\n // This fiber was already upgraded to be stateful.\n var _stateHook = formFiber.memoizedState;\n queue = _stateHook.queue;\n }\n\n startTransition(formFiber, queue, pendingState, NotPendingTransition, // TODO: We can avoid this extra wrapper, somehow. Figure out layering\n // once more of this function is implemented.\n function () {\n return callback(formData);\n });\n}\n\nfunction mountTransition() {\n var stateHook = mountStateImpl(false); // The `start` method never changes.\n\n var start = startTransition.bind(null, currentlyRenderingFiber$1, stateHook.queue, true, false);\n var hook = mountWorkInProgressHook();\n hook.memoizedState = start;\n return [false, start];\n}\n\nfunction updateTransition() {\n var _updateState = updateState(),\n booleanOrThenable = _updateState[0];\n\n var hook = updateWorkInProgressHook();\n var start = hook.memoizedState;\n var isPending = typeof booleanOrThenable === 'boolean' ? booleanOrThenable : // This will suspend until the async action scope has finished.\n useThenable(booleanOrThenable);\n return [isPending, start];\n}\n\nfunction rerenderTransition() {\n var _rerenderState = rerenderState(),\n booleanOrThenable = _rerenderState[0];\n\n var hook = updateWorkInProgressHook();\n var start = hook.memoizedState;\n var isPending = typeof booleanOrThenable === 'boolean' ? booleanOrThenable : // This will suspend until the async action scope has finished.\n useThenable(booleanOrThenable);\n return [isPending, start];\n}\n\nfunction useHostTransitionStatus() {\n\n var status = readContext(HostTransitionContext);\n return status !== null ? status : NotPendingTransition;\n}\n\nfunction mountId() {\n var hook = mountWorkInProgressHook();\n var root = getWorkInProgressRoot(); // TODO: In Fizz, id generation is specific to each server config. Maybe we\n // should do this in Fiber, too? Deferring this decision for now because\n // there's no other place to store the prefix except for an internal field on\n // the public createRoot object, which the fiber tree does not currently have\n // a reference to.\n\n var identifierPrefix = root.identifierPrefix;\n var id;\n\n if (getIsHydrating()) {\n var treeId = getTreeId(); // Use a captial R prefix for server-generated ids.\n\n id = ':' + identifierPrefix + 'R' + treeId; // Unless this is the first id at this level, append a number at the end\n // that represents the position of this useId hook among all the useId\n // hooks for this fiber.\n\n var localId = localIdCounter++;\n\n if (localId > 0) {\n id += 'H' + localId.toString(32);\n }\n\n id += ':';\n } else {\n // Use a lowercase r prefix for client-generated ids.\n var globalClientId = globalClientIdCounter++;\n id = ':' + identifierPrefix + 'r' + globalClientId.toString(32) + ':';\n }\n\n hook.memoizedState = id;\n return id;\n}\n\nfunction updateId() {\n var hook = updateWorkInProgressHook();\n var id = hook.memoizedState;\n return id;\n}\n\nfunction mountRefresh() {\n var hook = mountWorkInProgressHook();\n var refresh = hook.memoizedState = refreshCache.bind(null, currentlyRenderingFiber$1);\n return refresh;\n}\n\nfunction updateRefresh() {\n var hook = updateWorkInProgressHook();\n return hook.memoizedState;\n}\n\nfunction refreshCache(fiber, seedKey, seedValue) {\n // TODO: Consider warning if the refresh is at discrete priority, or if we\n // otherwise suspect that it wasn't batched properly.\n\n\n var provider = fiber.return;\n\n while (provider !== null) {\n switch (provider.tag) {\n case CacheComponent:\n case HostRoot:\n {\n // Schedule an update on the cache boundary to trigger a refresh.\n var lane = requestUpdateLane(provider);\n var refreshUpdate = createUpdate(lane);\n var root = enqueueUpdate(provider, refreshUpdate, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, provider, lane);\n entangleTransitions(root, provider, lane);\n } // TODO: If a refresh never commits, the new cache created here must be\n // released. A simple case is start refreshing a cache boundary, but then\n // unmount that boundary before the refresh completes.\n\n\n var seededCache = createCache();\n\n if (seedKey !== null && seedKey !== undefined && root !== null) {\n {\n {\n error('The seed argument is not enabled outside experimental channels.');\n }\n }\n }\n\n var payload = {\n cache: seededCache\n };\n refreshUpdate.payload = payload;\n return;\n }\n }\n\n provider = provider.return;\n } // TODO: Warn if unmounted?\n\n}\n\nfunction dispatchReducerAction(fiber, queue, action) {\n {\n if (typeof arguments[3] === 'function') {\n error(\"State updates from the useState() and useReducer() Hooks don't support the \" + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');\n }\n }\n\n var lane = requestUpdateLane(fiber);\n var update = {\n lane: lane,\n revertLane: NoLane,\n action: action,\n hasEagerState: false,\n eagerState: null,\n next: null\n };\n\n if (isRenderPhaseUpdate(fiber)) {\n enqueueRenderPhaseUpdate(queue, update);\n } else {\n var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, lane);\n entangleTransitionUpdate(root, queue, lane);\n }\n }\n\n markUpdateInDevTools(fiber, lane);\n}\n\nfunction dispatchSetState(fiber, queue, action) {\n {\n if (typeof arguments[3] === 'function') {\n error(\"State updates from the useState() and useReducer() Hooks don't support the \" + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');\n }\n }\n\n var lane = requestUpdateLane(fiber);\n var update = {\n lane: lane,\n revertLane: NoLane,\n action: action,\n hasEagerState: false,\n eagerState: null,\n next: null\n };\n\n if (isRenderPhaseUpdate(fiber)) {\n enqueueRenderPhaseUpdate(queue, update);\n } else {\n var alternate = fiber.alternate;\n\n if (fiber.lanes === NoLanes && (alternate === null || alternate.lanes === NoLanes)) {\n // The queue is currently empty, which means we can eagerly compute the\n // next state before entering the render phase. If the new state is the\n // same as the current state, we may be able to bail out entirely.\n var lastRenderedReducer = queue.lastRenderedReducer;\n\n if (lastRenderedReducer !== null) {\n var prevDispatcher;\n\n {\n prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n }\n\n try {\n var currentState = queue.lastRenderedState;\n var eagerState = lastRenderedReducer(currentState, action); // Stash the eagerly computed state, and the reducer used to compute\n // it, on the update object. If the reducer hasn't changed by the\n // time we enter the render phase, then the eager state can be used\n // without calling the reducer again.\n\n update.hasEagerState = true;\n update.eagerState = eagerState;\n\n if (objectIs(eagerState, currentState)) {\n // Fast path. We can bail out without scheduling React to re-render.\n // It's still possible that we'll need to rebase this update later,\n // if the component re-renders for a different reason and by that\n // time the reducer has changed.\n // TODO: Do we still need to entangle transitions in this case?\n enqueueConcurrentHookUpdateAndEagerlyBailout(fiber, queue, update);\n return;\n }\n } catch (error) {// Suppress the error. It will throw again in the render phase.\n } finally {\n {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n }\n }\n }\n\n var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, lane);\n entangleTransitionUpdate(root, queue, lane);\n }\n }\n\n markUpdateInDevTools(fiber, lane);\n}\n\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n {\n if (ReactCurrentBatchConfig$3.transition === null) {\n // An optimistic update occurred, but startTransition is not on the stack.\n // There are two likely scenarios.\n // One possibility is that the optimistic update is triggered by a regular\n // event handler (e.g. `onSubmit`) instead of an action. This is a mistake\n // and we will warn.\n // The other possibility is the optimistic update is inside an async\n // action, but after an `await`. In this case, we can make it \"just work\"\n // by associating the optimistic update with the pending async action.\n // Technically it's possible that the optimistic update is unrelated to\n // the pending action, but we don't have a way of knowing this for sure\n // because browsers currently do not provide a way to track async scope.\n // (The AsyncContext proposal, if it lands, will solve this in the\n // future.) However, this is no different than the problem of unrelated\n // transitions being grouped together — it's not wrong per se, but it's\n // not ideal.\n // Once AsyncContext starts landing in browsers, we will provide better\n // warnings in development for these cases.\n if (peekEntangledActionLane() !== NoLane) ; else {\n // There's no pending async action. The most likely cause is that we're\n // inside a regular event handler (e.g. onSubmit) instead of an action.\n error('An optimistic state update occurred outside a transition or ' + 'action. To fix, move the update to an action, or wrap ' + 'with startTransition.');\n }\n }\n }\n\n var update = {\n // An optimistic update commits synchronously.\n lane: SyncLane,\n // After committing, the optimistic update is \"reverted\" using the same\n // lane as the transition it's associated with.\n revertLane: requestTransitionLane(),\n action: action,\n hasEagerState: false,\n eagerState: null,\n next: null\n };\n\n if (isRenderPhaseUpdate(fiber)) {\n // When calling startTransition during render, this warns instead of\n // throwing because throwing would be a breaking change. setOptimisticState\n // is a new API so it's OK to throw.\n if (throwIfDuringRender) {\n throw new Error('Cannot update optimistic state while rendering.');\n } else {\n // startTransition was called during render. We don't need to do anything\n // besides warn here because the render phase update would be overidden by\n // the second update, anyway. We can remove this branch and make it throw\n // in a future release.\n {\n error('Cannot call startTransition while rendering.');\n }\n }\n } else {\n var root = enqueueConcurrentHookUpdate(fiber, queue, update, SyncLane);\n\n if (root !== null) {\n // NOTE: The optimistic update implementation assumes that the transition\n // will never be attempted before the optimistic update. This currently\n // holds because the optimistic update is always synchronous. If we ever\n // change that, we'll need to account for this.\n scheduleUpdateOnFiber(root, fiber, SyncLane); // Optimistic updates are always synchronous, so we don't need to call\n // entangleTransitionUpdate here.\n }\n }\n\n markUpdateInDevTools(fiber, SyncLane);\n}\n\nfunction isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1;\n}\n\nfunction enqueueRenderPhaseUpdate(queue, update) {\n // This is a render phase update. Stash it in a lazily-created map of\n // queue -> linked list of updates. After this render pass, we'll restart\n // and apply the stashed updates on top of the work-in-progress hook.\n didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate = true;\n var pending = queue.pending;\n\n if (pending === null) {\n // This is the first update. Create a circular list.\n update.next = update;\n } else {\n update.next = pending.next;\n pending.next = update;\n }\n\n queue.pending = update;\n} // TODO: Move to ReactFiberConcurrentUpdates?\n\n\nfunction entangleTransitionUpdate(root, queue, lane) {\n if (isTransitionLane(lane)) {\n var queueLanes = queue.lanes; // If any entangled lanes are no longer pending on the root, then they\n // must have finished. We can remove them from the shared queue, which\n // represents a superset of the actually pending lanes. In some cases we\n // may entangle more than we need to, but that's OK. In fact it's worse if\n // we *don't* entangle when we should.\n\n queueLanes = intersectLanes(queueLanes, root.pendingLanes); // Entangle the new transition lane with the other transition lanes.\n\n var newQueueLanes = mergeLanes(queueLanes, lane);\n queue.lanes = newQueueLanes; // Even if queue.lanes already include lane, we don't know for certain if\n // the lane finished since the last time we entangled it. So we need to\n // entangle it again, just to be sure.\n\n markRootEntangled(root, newQueueLanes);\n }\n}\n\nfunction markUpdateInDevTools(fiber, lane, action) {\n\n {\n markStateUpdateScheduled(fiber, lane);\n }\n}\n\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n use: use,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError\n};\n\n{\n ContextOnlyDispatcher.useCacheRefresh = throwInvalidHookError;\n}\n\n{\n ContextOnlyDispatcher.useHostTransitionStatus = throwInvalidHookError;\n ContextOnlyDispatcher.useFormState = throwInvalidHookError;\n}\n\n{\n ContextOnlyDispatcher.useOptimistic = throwInvalidHookError;\n}\n\nvar HooksDispatcherOnMountInDEV = null;\nvar HooksDispatcherOnMountWithHookTypesInDEV = null;\nvar HooksDispatcherOnUpdateInDEV = null;\nvar HooksDispatcherOnRerenderInDEV = null;\nvar InvalidNestedHooksDispatcherOnMountInDEV = null;\nvar InvalidNestedHooksDispatcherOnUpdateInDEV = null;\nvar InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n\n{\n var warnInvalidContextAccess = function () {\n error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n };\n\n var warnInvalidHookAccess = function () {\n error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://reactjs.org/link/rules-of-hooks');\n };\n\n HooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n mountHookTypesDev();\n return mountDebugValue();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = 'useDeferredValue';\n mountHookTypesDev();\n return mountDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n mountHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n mountHookTypesDev();\n return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n mountHookTypesDev();\n return mountId();\n }\n };\n\n {\n HooksDispatcherOnMountInDEV.useCacheRefresh = function useCacheRefresh() {\n currentHookNameInDev = 'useCacheRefresh';\n mountHookTypesDev();\n return mountRefresh();\n };\n }\n\n {\n HooksDispatcherOnMountInDEV.useHostTransitionStatus = useHostTransitionStatus;\n\n HooksDispatcherOnMountInDEV.useFormState = function useFormState(action, initialState, permalink) {\n currentHookNameInDev = 'useFormState';\n mountHookTypesDev();\n return mountFormState(action, initialState);\n };\n }\n\n {\n HooksDispatcherOnMountInDEV.useOptimistic = function useOptimistic(passthrough, reducer) {\n currentHookNameInDev = 'useOptimistic';\n mountHookTypesDev();\n return mountOptimistic(passthrough);\n };\n }\n\n HooksDispatcherOnMountWithHookTypesInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n updateHookTypesDev();\n return mountInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return mountDebugValue();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return mountDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n updateHookTypesDev();\n return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n updateHookTypesDev();\n return mountId();\n }\n };\n\n {\n HooksDispatcherOnMountWithHookTypesInDEV.useCacheRefresh = function useCacheRefresh() {\n currentHookNameInDev = 'useCacheRefresh';\n updateHookTypesDev();\n return mountRefresh();\n };\n }\n\n {\n HooksDispatcherOnMountWithHookTypesInDEV.useHostTransitionStatus = useHostTransitionStatus;\n\n HooksDispatcherOnMountWithHookTypesInDEV.useFormState = function useFormState(action, initialState, permalink) {\n currentHookNameInDev = 'useFormState';\n updateHookTypesDev();\n return mountFormState(action, initialState);\n };\n }\n\n {\n HooksDispatcherOnMountWithHookTypesInDEV.useOptimistic = function useOptimistic(passthrough, reducer) {\n currentHookNameInDev = 'useOptimistic';\n updateHookTypesDev();\n return mountOptimistic(passthrough);\n };\n }\n\n HooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n updateHookTypesDev();\n return updateInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return updateDebugValue();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return updateDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return updateTransition();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n updateHookTypesDev();\n return updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n updateHookTypesDev();\n return updateId();\n }\n };\n\n {\n HooksDispatcherOnUpdateInDEV.useCacheRefresh = function useCacheRefresh() {\n currentHookNameInDev = 'useCacheRefresh';\n updateHookTypesDev();\n return updateRefresh();\n };\n }\n\n {\n HooksDispatcherOnUpdateInDEV.useHostTransitionStatus = useHostTransitionStatus;\n\n HooksDispatcherOnUpdateInDEV.useFormState = function useFormState(action, initialState, permalink) {\n currentHookNameInDev = 'useFormState';\n updateHookTypesDev();\n return updateFormState(action);\n };\n }\n\n {\n HooksDispatcherOnUpdateInDEV.useOptimistic = function useOptimistic(passthrough, reducer) {\n currentHookNameInDev = 'useOptimistic';\n updateHookTypesDev();\n return updateOptimistic(passthrough, reducer);\n };\n }\n\n HooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n use: use,\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n updateHookTypesDev();\n return updateInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return rerenderState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return updateDebugValue();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return rerenderDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return rerenderTransition();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n updateHookTypesDev();\n return updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n updateHookTypesDev();\n return updateId();\n }\n };\n\n {\n HooksDispatcherOnRerenderInDEV.useCacheRefresh = function useCacheRefresh() {\n currentHookNameInDev = 'useCacheRefresh';\n updateHookTypesDev();\n return updateRefresh();\n };\n }\n\n {\n HooksDispatcherOnRerenderInDEV.useHostTransitionStatus = useHostTransitionStatus;\n\n HooksDispatcherOnRerenderInDEV.useFormState = function useFormState(action, initialState, permalink) {\n currentHookNameInDev = 'useFormState';\n updateHookTypesDev();\n return rerenderFormState(action);\n };\n }\n\n {\n HooksDispatcherOnRerenderInDEV.useOptimistic = function useOptimistic(passthrough, reducer) {\n currentHookNameInDev = 'useOptimistic';\n updateHookTypesDev();\n return rerenderOptimistic(passthrough, reducer);\n };\n }\n\n InvalidNestedHooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDebugValue();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountTransition();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountId();\n }\n };\n\n {\n InvalidNestedHooksDispatcherOnMountInDEV.useCacheRefresh = function useCacheRefresh() {\n currentHookNameInDev = 'useCacheRefresh';\n mountHookTypesDev();\n return mountRefresh();\n };\n }\n\n {\n InvalidNestedHooksDispatcherOnMountInDEV.useHostTransitionStatus = useHostTransitionStatus;\n\n InvalidNestedHooksDispatcherOnMountInDEV.useFormState = function useFormState(action, initialState, permalink) {\n currentHookNameInDev = 'useFormState';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountFormState(action, initialState);\n };\n }\n\n {\n InvalidNestedHooksDispatcherOnMountInDEV.useOptimistic = function useOptimistic(passthrough, reducer) {\n currentHookNameInDev = 'useOptimistic';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountOptimistic(passthrough);\n };\n }\n\n InvalidNestedHooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDebugValue();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateTransition();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateId();\n }\n };\n\n {\n InvalidNestedHooksDispatcherOnUpdateInDEV.useCacheRefresh = function useCacheRefresh() {\n currentHookNameInDev = 'useCacheRefresh';\n updateHookTypesDev();\n return updateRefresh();\n };\n }\n\n {\n InvalidNestedHooksDispatcherOnUpdateInDEV.useHostTransitionStatus = useHostTransitionStatus;\n\n InvalidNestedHooksDispatcherOnUpdateInDEV.useFormState = function useFormState(action, initialState, permalink) {\n currentHookNameInDev = 'useFormState';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateFormState(action);\n };\n }\n\n {\n InvalidNestedHooksDispatcherOnUpdateInDEV.useOptimistic = function useOptimistic(passthrough, reducer) {\n currentHookNameInDev = 'useOptimistic';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateOptimistic(passthrough, reducer);\n };\n }\n\n InvalidNestedHooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n use: function (usable) {\n warnInvalidHookAccess();\n return use(usable);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return rerenderState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDebugValue();\n },\n useDeferredValue: function (value, initialValue) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderTransition();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateId();\n }\n };\n\n {\n InvalidNestedHooksDispatcherOnRerenderInDEV.useCacheRefresh = function useCacheRefresh() {\n currentHookNameInDev = 'useCacheRefresh';\n updateHookTypesDev();\n return updateRefresh();\n };\n }\n\n {\n InvalidNestedHooksDispatcherOnRerenderInDEV.useHostTransitionStatus = useHostTransitionStatus;\n\n InvalidNestedHooksDispatcherOnRerenderInDEV.useFormState = function useFormState(action, initialState, permalink) {\n currentHookNameInDev = 'useFormState';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderFormState(action);\n };\n }\n\n {\n InvalidNestedHooksDispatcherOnRerenderInDEV.useOptimistic = function useOptimistic(passthrough, reducer) {\n currentHookNameInDev = 'useOptimistic';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderOptimistic(passthrough, reducer);\n };\n }\n}\n\nvar now = Scheduler.unstable_now;\nvar commitTime = 0;\nvar layoutEffectStartTime = -1;\nvar profilerStartTime = -1;\nvar passiveEffectStartTime = -1;\n/**\n * Tracks whether the current update was a nested/cascading update (scheduled from a layout effect).\n *\n * The overall sequence is:\n * 1. render\n * 2. commit (and call `onRender`, `onCommit`)\n * 3. check for nested updates\n * 4. flush passive effects (and call `onPostCommit`)\n *\n * Nested updates are identified in step 3 above,\n * but step 4 still applies to the work that was just committed.\n * We use two flags to track nested updates then:\n * one tracks whether the upcoming update is a nested update,\n * and the other tracks whether the current update was a nested update.\n * The first value gets synced to the second at the start of the render phase.\n */\n\nvar currentUpdateIsNested = false;\nvar nestedUpdateScheduled = false;\n\nfunction isCurrentUpdateNested() {\n return currentUpdateIsNested;\n}\n\nfunction markNestedUpdateScheduled() {\n {\n nestedUpdateScheduled = true;\n }\n}\n\nfunction resetNestedUpdateFlag() {\n {\n currentUpdateIsNested = false;\n nestedUpdateScheduled = false;\n }\n}\n\nfunction syncNestedUpdateFlag() {\n {\n currentUpdateIsNested = nestedUpdateScheduled;\n nestedUpdateScheduled = false;\n }\n}\n\nfunction getCommitTime() {\n return commitTime;\n}\n\nfunction recordCommitTime() {\n\n commitTime = now();\n}\n\nfunction startProfilerTimer(fiber) {\n\n profilerStartTime = now();\n\n if (fiber.actualStartTime < 0) {\n fiber.actualStartTime = now();\n }\n}\n\nfunction stopProfilerTimerIfRunning(fiber) {\n\n profilerStartTime = -1;\n}\n\nfunction stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) {\n\n if (profilerStartTime >= 0) {\n var elapsedTime = now() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n\n if (overrideBaseTime) {\n fiber.selfBaseDuration = elapsedTime;\n }\n\n profilerStartTime = -1;\n }\n}\n\nfunction recordLayoutEffectDuration(fiber) {\n\n if (layoutEffectStartTime >= 0) {\n var elapsedTime = now() - layoutEffectStartTime;\n layoutEffectStartTime = -1; // Store duration on the next nearest Profiler ancestor\n // Or the root (for the DevTools Profiler to read)\n\n var parentFiber = fiber.return;\n\n while (parentFiber !== null) {\n switch (parentFiber.tag) {\n case HostRoot:\n var root = parentFiber.stateNode;\n root.effectDuration += elapsedTime;\n return;\n\n case Profiler:\n var parentStateNode = parentFiber.stateNode;\n parentStateNode.effectDuration += elapsedTime;\n return;\n }\n\n parentFiber = parentFiber.return;\n }\n }\n}\n\nfunction recordPassiveEffectDuration(fiber) {\n\n if (passiveEffectStartTime >= 0) {\n var elapsedTime = now() - passiveEffectStartTime;\n passiveEffectStartTime = -1; // Store duration on the next nearest Profiler ancestor\n // Or the root (for the DevTools Profiler to read)\n\n var parentFiber = fiber.return;\n\n while (parentFiber !== null) {\n switch (parentFiber.tag) {\n case HostRoot:\n var root = parentFiber.stateNode;\n\n if (root !== null) {\n root.passiveEffectDuration += elapsedTime;\n }\n\n return;\n\n case Profiler:\n var parentStateNode = parentFiber.stateNode;\n\n if (parentStateNode !== null) {\n // Detached fibers have their state node cleared out.\n // In this case, the return pointer is also cleared out,\n // so we won't be able to report the time spent in this Profiler's subtree.\n parentStateNode.passiveEffectDuration += elapsedTime;\n }\n\n return;\n }\n\n parentFiber = parentFiber.return;\n }\n }\n}\n\nfunction startLayoutEffectTimer() {\n\n layoutEffectStartTime = now();\n}\n\nfunction startPassiveEffectTimer() {\n\n passiveEffectStartTime = now();\n}\n\nfunction transferActualDuration(fiber) {\n // Transfer time spent rendering these children so we don't lose it\n // after we rerender. This is used as a helper in special cases\n // where we should count the work of multiple passes.\n var child = fiber.child;\n\n while (child) {\n // $FlowFixMe[unsafe-addition] addition with possible null/undefined value\n fiber.actualDuration += child.actualDuration;\n child = child.sibling;\n }\n}\n\nfunction resolveDefaultProps(Component, baseProps) {\n if (Component && Component.defaultProps) {\n // Resolve default props. Taken from ReactElement\n var props = assign({}, baseProps);\n var defaultProps = Component.defaultProps;\n\n for (var propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n\n return props;\n }\n\n return baseProps;\n}\n\nvar fakeInternalInstance = {};\nvar didWarnAboutStateAssignmentForComponent;\nvar didWarnAboutUninitializedState;\nvar didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;\nvar didWarnAboutLegacyLifecyclesAndDerivedState;\nvar didWarnAboutUndefinedDerivedState;\nvar didWarnAboutDirectlyAssigningPropsToState;\nvar didWarnAboutContextTypeAndContextTypes;\nvar didWarnAboutInvalidateContextType;\nvar didWarnOnInvalidCallback;\n\n{\n didWarnAboutStateAssignmentForComponent = new Set();\n didWarnAboutUninitializedState = new Set();\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n didWarnAboutDirectlyAssigningPropsToState = new Set();\n didWarnAboutUndefinedDerivedState = new Set();\n didWarnAboutContextTypeAndContextTypes = new Set();\n didWarnAboutInvalidateContextType = new Set();\n didWarnOnInvalidCallback = new Set(); // This is so gross but it's at least non-critical and can be removed if\n // it causes problems. This is meant to give a nicer error message for\n // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,\n // ...)) which otherwise throws a \"_processChildContext is not a function\"\n // exception.\n\n Object.defineProperty(fakeInternalInstance, '_processChildContext', {\n enumerable: false,\n value: function () {\n throw new Error('_processChildContext is not available in React 16+. This likely ' + 'means you have multiple copies of React and are attempting to nest ' + 'a React 15 tree inside a React 16 tree using ' + \"unstable_renderSubtreeIntoContainer, which isn't supported. Try \" + 'to make sure you have only one copy of React (and ideally, switch ' + 'to ReactDOM.createPortal).');\n }\n });\n Object.freeze(fakeInternalInstance);\n}\n\nfunction warnOnInvalidCallback$1(callback, callerName) {\n {\n if (callback === null || typeof callback === 'function') {\n return;\n }\n\n var key = callerName + '_' + callback;\n\n if (!didWarnOnInvalidCallback.has(key)) {\n didWarnOnInvalidCallback.add(key);\n\n error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n }\n }\n}\n\nfunction warnOnUndefinedDerivedState(type, partialState) {\n {\n if (partialState === undefined) {\n var componentName = getComponentNameFromType(type) || 'Component';\n\n if (!didWarnAboutUndefinedDerivedState.has(componentName)) {\n didWarnAboutUndefinedDerivedState.add(componentName);\n\n error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);\n }\n }\n }\n}\n\nfunction applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) {\n var prevState = workInProgress.memoizedState;\n var partialState = getDerivedStateFromProps(nextProps, prevState);\n\n {\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n // Invoke the function an extra time to help detect side-effects.\n partialState = getDerivedStateFromProps(nextProps, prevState);\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n warnOnUndefinedDerivedState(ctor, partialState);\n } // Merge the partial state and the previous state.\n\n\n var memoizedState = partialState === null || partialState === undefined ? prevState : assign({}, prevState, partialState);\n workInProgress.memoizedState = memoizedState; // Once the update queue is empty, persist the derived state onto the\n // base state.\n\n if (workInProgress.lanes === NoLanes) {\n // Queue is always non-null for classes\n var updateQueue = workInProgress.updateQueue;\n updateQueue.baseState = memoizedState;\n }\n}\n\nvar classComponentUpdater = {\n isMounted: isMounted,\n // $FlowFixMe[missing-local-annot]\n enqueueSetState: function (inst, payload, callback) {\n var fiber = get(inst);\n var lane = requestUpdateLane(fiber);\n var update = createUpdate(lane);\n update.payload = payload;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback$1(callback, 'setState');\n }\n\n update.callback = callback;\n }\n\n var root = enqueueUpdate(fiber, update, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, lane);\n entangleTransitions(root, fiber, lane);\n }\n\n {\n markStateUpdateScheduled(fiber, lane);\n }\n },\n enqueueReplaceState: function (inst, payload, callback) {\n var fiber = get(inst);\n var lane = requestUpdateLane(fiber);\n var update = createUpdate(lane);\n update.tag = ReplaceState;\n update.payload = payload;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback$1(callback, 'replaceState');\n }\n\n update.callback = callback;\n }\n\n var root = enqueueUpdate(fiber, update, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, lane);\n entangleTransitions(root, fiber, lane);\n }\n\n {\n markStateUpdateScheduled(fiber, lane);\n }\n },\n // $FlowFixMe[missing-local-annot]\n enqueueForceUpdate: function (inst, callback) {\n var fiber = get(inst);\n var lane = requestUpdateLane(fiber);\n var update = createUpdate(lane);\n update.tag = ForceUpdate;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback$1(callback, 'forceUpdate');\n }\n\n update.callback = callback;\n }\n\n var root = enqueueUpdate(fiber, update, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, lane);\n entangleTransitions(root, fiber, lane);\n }\n\n {\n markForceUpdateScheduled(fiber, lane);\n }\n }\n};\n\nfunction checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {\n var instance = workInProgress.stateNode;\n\n if (typeof instance.shouldComponentUpdate === 'function') {\n var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);\n\n {\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n // Invoke the function an extra time to help detect side-effects.\n shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n if (shouldUpdate === undefined) {\n error('%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentNameFromType(ctor) || 'Component');\n }\n }\n\n return shouldUpdate;\n }\n\n if (ctor.prototype && ctor.prototype.isPureReactComponent) {\n return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);\n }\n\n return true;\n}\n\nfunction checkClassInstance(workInProgress, ctor, newProps) {\n var instance = workInProgress.stateNode;\n\n {\n var name = getComponentNameFromType(ctor) || 'Component';\n var renderPresent = instance.render;\n\n if (!renderPresent) {\n if (ctor.prototype && typeof ctor.prototype.render === 'function') {\n error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);\n } else {\n error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);\n }\n }\n\n if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {\n error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);\n }\n\n if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);\n }\n\n if (instance.propTypes) {\n error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);\n }\n\n if (instance.contextType) {\n error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);\n }\n\n {\n if (instance.contextTypes) {\n error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);\n }\n\n if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {\n didWarnAboutContextTypeAndContextTypes.add(ctor);\n\n error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);\n }\n }\n\n if (typeof instance.componentShouldUpdate === 'function') {\n error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name);\n }\n\n if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {\n error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentNameFromType(ctor) || 'A pure component');\n }\n\n if (typeof instance.componentDidUnmount === 'function') {\n error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);\n }\n\n if (typeof instance.componentDidReceiveProps === 'function') {\n error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);\n }\n\n if (typeof instance.componentWillRecieveProps === 'function') {\n error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);\n }\n\n if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {\n error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);\n }\n\n var hasMutatedProps = instance.props !== newProps;\n\n if (instance.props !== undefined && hasMutatedProps) {\n error('%s(...): When calling super() in `%s`, make sure to pass ' + \"up the same props that your component's constructor was passed.\", name, name);\n }\n\n if (instance.defaultProps) {\n error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);\n\n error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentNameFromType(ctor));\n }\n\n if (typeof instance.getDerivedStateFromProps === 'function') {\n error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n }\n\n if (typeof instance.getDerivedStateFromError === 'function') {\n error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n }\n\n if (typeof ctor.getSnapshotBeforeUpdate === 'function') {\n error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);\n }\n\n var state = instance.state;\n\n if (state && (typeof state !== 'object' || isArray(state))) {\n error('%s.state: must be set to an object or null', name);\n }\n\n if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {\n error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);\n }\n }\n}\n\nfunction adoptClassInstance(workInProgress, instance) {\n instance.updater = classComponentUpdater;\n workInProgress.stateNode = instance; // The instance needs access to the fiber so that it can schedule updates\n\n set(instance, workInProgress);\n\n {\n instance._reactInternalInstance = fakeInternalInstance;\n }\n}\n\nfunction constructClassInstance(workInProgress, ctor, props) {\n var isLegacyContextConsumer = false;\n var unmaskedContext = emptyContextObject;\n var context = emptyContextObject;\n var contextType = ctor.contextType;\n\n {\n if ('contextType' in ctor) {\n var isValid = // Allow null for conditional declaration\n contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>\n\n if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {\n didWarnAboutInvalidateContextType.add(ctor);\n var addendum = '';\n\n if (contextType === undefined) {\n addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';\n } else if (typeof contextType !== 'object') {\n addendum = ' However, it is set to a ' + typeof contextType + '.';\n } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {\n addendum = ' Did you accidentally pass the Context.Provider instead?';\n } else if (contextType._context !== undefined) {\n // <Context.Consumer>\n addendum = ' Did you accidentally pass the Context.Consumer instead?';\n } else {\n addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';\n }\n\n error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentNameFromType(ctor) || 'Component', addendum);\n }\n }\n }\n\n if (typeof contextType === 'object' && contextType !== null) {\n context = readContext(contextType);\n } else {\n unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n var contextTypes = ctor.contextTypes;\n isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined;\n context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject;\n }\n\n var instance = new ctor(props, context); // Instantiate twice to help detect side-effects.\n\n {\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n instance = new ctor(props, context); // eslint-disable-line no-new\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n }\n\n var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null;\n adoptClassInstance(workInProgress, instance);\n\n {\n if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) {\n var componentName = getComponentNameFromType(ctor) || 'Component';\n\n if (!didWarnAboutUninitializedState.has(componentName)) {\n didWarnAboutUninitializedState.add(componentName);\n\n error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);\n }\n } // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Warn about these lifecycles if they are present.\n // Don't warn about react-lifecycles-compat polyfilled methods though.\n\n\n if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n\n if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {\n foundWillMountName = 'componentWillMount';\n } else if (typeof instance.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n\n if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n\n if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n\n if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {\n var _componentName = getComponentNameFromType(ctor) || 'Component';\n\n var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';\n\n if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {\n didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);\n\n error('Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\n' + 'The above lifecycles should be removed. Learn more about this warning here:\\n' + 'https://reactjs.org/link/unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? \"\\n \" + foundWillMountName : '', foundWillReceivePropsName !== null ? \"\\n \" + foundWillReceivePropsName : '', foundWillUpdateName !== null ? \"\\n \" + foundWillUpdateName : '');\n }\n }\n }\n } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // ReactFiberContext usually updates this cache but can't for newly-created instances.\n\n\n if (isLegacyContextConsumer) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return instance;\n}\n\nfunction callComponentWillMount(workInProgress, instance) {\n var oldState = instance.state;\n\n if (typeof instance.componentWillMount === 'function') {\n instance.componentWillMount();\n }\n\n if (typeof instance.UNSAFE_componentWillMount === 'function') {\n instance.UNSAFE_componentWillMount();\n }\n\n if (oldState !== instance.state) {\n {\n error('%s.componentWillMount(): Assigning directly to this.state is ' + \"deprecated (except inside a component's \" + 'constructor). Use setState instead.', getComponentNameFromFiber(workInProgress) || 'Component');\n }\n\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n }\n}\n\nfunction callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) {\n var oldState = instance.state;\n\n if (typeof instance.componentWillReceiveProps === 'function') {\n instance.componentWillReceiveProps(newProps, nextContext);\n }\n\n if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n }\n\n if (instance.state !== oldState) {\n {\n var componentName = getComponentNameFromFiber(workInProgress) || 'Component';\n\n if (!didWarnAboutStateAssignmentForComponent.has(componentName)) {\n didWarnAboutStateAssignmentForComponent.add(componentName);\n\n error('%s.componentWillReceiveProps(): Assigning directly to ' + \"this.state is deprecated (except inside a component's \" + 'constructor). Use setState instead.', componentName);\n }\n }\n\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n }\n} // Invokes the mount life-cycles on a previously never rendered instance.\n\n\nfunction mountClassInstance(workInProgress, ctor, newProps, renderLanes) {\n {\n checkClassInstance(workInProgress, ctor, newProps);\n }\n\n var instance = workInProgress.stateNode;\n instance.props = newProps;\n instance.state = workInProgress.memoizedState;\n instance.refs = {};\n initializeUpdateQueue(workInProgress);\n var contextType = ctor.contextType;\n\n if (typeof contextType === 'object' && contextType !== null) {\n instance.context = readContext(contextType);\n } else {\n var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n instance.context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n {\n if (instance.state === newProps) {\n var componentName = getComponentNameFromType(ctor) || 'Component';\n\n if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {\n didWarnAboutDirectlyAssigningPropsToState.add(componentName);\n\n error('%s: It is not recommended to assign props directly to state ' + \"because updates to props won't be reflected in state. \" + 'In most cases, it is better to use props directly.', componentName);\n }\n }\n\n if (workInProgress.mode & StrictLegacyMode) {\n ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance);\n }\n\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance);\n }\n\n instance.state = workInProgress.memoizedState;\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n instance.state = workInProgress.memoizedState;\n } // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n\n if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n callComponentWillMount(workInProgress, instance); // If we had additional state updates during this life-cycle, let's\n // process them now.\n\n processUpdateQueue(workInProgress, newProps, instance, renderLanes);\n instance.state = workInProgress.memoizedState;\n }\n\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.flags |= Update | LayoutStatic;\n }\n\n if ((workInProgress.mode & StrictEffectsMode) !== NoMode) {\n workInProgress.flags |= MountLayoutDev;\n }\n}\n\nfunction resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) {\n var instance = workInProgress.stateNode;\n var oldProps = workInProgress.memoizedProps;\n instance.props = oldProps;\n var oldContext = instance.context;\n var contextType = ctor.contextType;\n var nextContext = emptyContextObject;\n\n if (typeof contextType === 'object' && contextType !== null) {\n nextContext = readContext(contextType);\n } else {\n var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext);\n }\n\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n // ever the previously attempted to render - not the \"current\". However,\n // during componentDidUpdate we pass the \"current\" props.\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n if (oldProps !== newProps || oldContext !== nextContext) {\n callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n }\n }\n\n resetHasForceUpdateBeforeProcessing();\n var oldState = workInProgress.memoizedState;\n var newState = instance.state = oldState;\n processUpdateQueue(workInProgress, newProps, instance, renderLanes);\n newState = workInProgress.memoizedState;\n\n if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.flags |= Update | LayoutStatic;\n }\n\n if ((workInProgress.mode & StrictEffectsMode) !== NoMode) {\n workInProgress.flags |= MountLayoutDev;\n }\n\n return false;\n }\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n newState = workInProgress.memoizedState;\n }\n\n var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n if (shouldUpdate) {\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n if (typeof instance.componentWillMount === 'function') {\n instance.componentWillMount();\n }\n\n if (typeof instance.UNSAFE_componentWillMount === 'function') {\n instance.UNSAFE_componentWillMount();\n }\n }\n\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.flags |= Update | LayoutStatic;\n }\n\n if ((workInProgress.mode & StrictEffectsMode) !== NoMode) {\n workInProgress.flags |= MountLayoutDev;\n }\n } else {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.flags |= Update | LayoutStatic;\n }\n\n if ((workInProgress.mode & StrictEffectsMode) !== NoMode) {\n workInProgress.flags |= MountLayoutDev;\n } // If shouldComponentUpdate returned false, we should still update the\n // memoized state to indicate that this work can be reused.\n\n\n workInProgress.memoizedProps = newProps;\n workInProgress.memoizedState = newState;\n } // Update the existing instance's state, props, and context pointers even\n // if shouldComponentUpdate returns false.\n\n\n instance.props = newProps;\n instance.state = newState;\n instance.context = nextContext;\n return shouldUpdate;\n} // Invokes the update life-cycles and returns false if it shouldn't rerender.\n\n\nfunction updateClassInstance(current, workInProgress, ctor, newProps, renderLanes) {\n var instance = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n var unresolvedOldProps = workInProgress.memoizedProps;\n var oldProps = workInProgress.type === workInProgress.elementType ? unresolvedOldProps : resolveDefaultProps(workInProgress.type, unresolvedOldProps);\n instance.props = oldProps;\n var unresolvedNewProps = workInProgress.pendingProps;\n var oldContext = instance.context;\n var contextType = ctor.contextType;\n var nextContext = emptyContextObject;\n\n if (typeof contextType === 'object' && contextType !== null) {\n nextContext = readContext(contextType);\n } else {\n var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n nextContext = getMaskedContext(workInProgress, nextUnmaskedContext);\n }\n\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n // ever the previously attempted to render - not the \"current\". However,\n // during componentDidUpdate we pass the \"current\" props.\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n if (unresolvedOldProps !== unresolvedNewProps || oldContext !== nextContext) {\n callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n }\n }\n\n resetHasForceUpdateBeforeProcessing();\n var oldState = workInProgress.memoizedState;\n var newState = instance.state = oldState;\n processUpdateQueue(workInProgress, newProps, instance, renderLanes);\n newState = workInProgress.memoizedState;\n\n if (unresolvedOldProps === unresolvedNewProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing() && !(enableLazyContextPropagation )) {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.flags |= Update;\n }\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.flags |= Snapshot;\n }\n }\n\n return false;\n }\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n newState = workInProgress.memoizedState;\n }\n\n var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) || // TODO: In some cases, we'll end up checking if context has changed twice,\n // both before and after `shouldComponentUpdate` has been called. Not ideal,\n // but I'm loath to refactor this function. This only happens for memoized\n // components so it's not that common.\n enableLazyContextPropagation ;\n\n if (shouldUpdate) {\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) {\n if (typeof instance.componentWillUpdate === 'function') {\n instance.componentWillUpdate(newProps, newState, nextContext);\n }\n\n if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext);\n }\n }\n\n if (typeof instance.componentDidUpdate === 'function') {\n workInProgress.flags |= Update;\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n workInProgress.flags |= Snapshot;\n }\n } else {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.flags |= Update;\n }\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.flags |= Snapshot;\n }\n } // If shouldComponentUpdate returned false, we should still update the\n // memoized props/state to indicate that this work can be reused.\n\n\n workInProgress.memoizedProps = newProps;\n workInProgress.memoizedState = newState;\n } // Update the existing instance's state, props, and context pointers even\n // if shouldComponentUpdate returns false.\n\n\n instance.props = newProps;\n instance.state = newState;\n instance.context = nextContext;\n return shouldUpdate;\n}\n\nfunction createCapturedValueAtFiber(value, source) {\n // If the value is an error, call this function immediately after it is thrown\n // so the stack is accurate.\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source),\n digest: null\n };\n}\nfunction createCapturedValue(value, digest, stack) {\n return {\n value: value,\n source: null,\n stack: stack != null ? stack : null,\n digest: digest != null ? digest : null\n };\n}\n\n// This module is forked in different environments.\n// By default, return `true` to log errors to the console.\n// Forks can return `false` if this isn't desirable.\nfunction showErrorDialog(boundary, errorInfo) {\n return true;\n}\n\nfunction logCapturedError(boundary, errorInfo) {\n try {\n var logError = showErrorDialog(boundary, errorInfo); // Allow injected showErrorDialog() to prevent default console.error logging.\n // This enables renderers like ReactNative to better manage redbox behavior.\n\n if (logError === false) {\n return;\n }\n\n var error = errorInfo.value;\n\n if (true) {\n var source = errorInfo.source;\n var stack = errorInfo.stack;\n var componentStack = stack !== null ? stack : ''; // Browsers support silencing uncaught errors by calling\n // `preventDefault()` in window `error` handler.\n // We record this information as an expando on the error.\n\n if (error != null && error._suppressLogging) {\n if (boundary.tag === ClassComponent) {\n // The error is recoverable and was silenced.\n // Ignore it and don't print the stack addendum.\n // This is handy for testing error boundaries without noise.\n return;\n } // The error is fatal. Since the silencing might have\n // been accidental, we'll surface it anyway.\n // However, the browser would have silenced the original error\n // so we'll print it first, and then print the stack addendum.\n\n\n console['error'](error); // Don't transform to our wrapper\n // For a more detailed description of this block, see:\n // https://github.com/facebook/react/pull/13384\n }\n\n var componentName = source ? getComponentNameFromFiber(source) : null;\n var componentNameMessage = componentName ? \"The above error occurred in the <\" + componentName + \"> component:\" : 'The above error occurred in one of your React components:';\n var errorBoundaryMessage;\n\n if (boundary.tag === HostRoot) {\n errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\\n' + 'Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.';\n } else {\n var errorBoundaryName = getComponentNameFromFiber(boundary) || 'Anonymous';\n errorBoundaryMessage = \"React will try to recreate this component tree from scratch \" + (\"using the error boundary you provided, \" + errorBoundaryName + \".\");\n }\n\n var combinedMessage = componentNameMessage + \"\\n\" + componentStack + \"\\n\\n\" + (\"\" + errorBoundaryMessage); // In development, we provide our own message with just the component stack.\n // We don't include the original error message and JS stack because the browser\n // has already printed it. Even if the application swallows the error, it is still\n // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.\n\n console['error'](combinedMessage); // Don't transform to our wrapper\n }\n } catch (e) {\n // This method must not throw, or React internal state will get messed up.\n // If console.error is overridden, or logCapturedError() shows a dialog that throws,\n // we want to report this error outside of the normal stack as a last resort.\n // https://github.com/facebook/react/issues/13188\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nfunction createRootErrorUpdate(fiber, errorInfo, lane) {\n var update = createUpdate(lane); // Unmount the root by rendering null.\n\n update.tag = CaptureUpdate; // Caution: React DevTools currently depends on this property\n // being called \"element\".\n\n update.payload = {\n element: null\n };\n var error = errorInfo.value;\n\n update.callback = function () {\n onUncaughtError(error);\n logCapturedError(fiber, errorInfo);\n };\n\n return update;\n}\n\nfunction createClassErrorUpdate(fiber, errorInfo, lane) {\n var update = createUpdate(lane);\n update.tag = CaptureUpdate;\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n\n if (typeof getDerivedStateFromError === 'function') {\n var error$1 = errorInfo.value;\n\n update.payload = function () {\n return getDerivedStateFromError(error$1);\n };\n\n update.callback = function () {\n {\n markFailedErrorBoundaryForHotReloading(fiber);\n }\n\n logCapturedError(fiber, errorInfo);\n };\n }\n\n var inst = fiber.stateNode;\n\n if (inst !== null && typeof inst.componentDidCatch === 'function') {\n // $FlowFixMe[missing-this-annot]\n update.callback = function callback() {\n {\n markFailedErrorBoundaryForHotReloading(fiber);\n }\n\n logCapturedError(fiber, errorInfo);\n\n if (typeof getDerivedStateFromError !== 'function') {\n // To preserve the preexisting retry behavior of error boundaries,\n // we keep track of which ones already failed during this batch.\n // This gets reset before we yield back to the browser.\n // TODO: Warn in strict mode if getDerivedStateFromError is\n // not defined.\n markLegacyErrorBoundaryAsFailed(this);\n }\n\n var error$1 = errorInfo.value;\n var stack = errorInfo.stack;\n this.componentDidCatch(error$1, {\n componentStack: stack !== null ? stack : ''\n });\n\n {\n if (typeof getDerivedStateFromError !== 'function') {\n // If componentDidCatch is the only error boundary method defined,\n // then it needs to call setState to recover from errors.\n // If no state update is scheduled then the boundary will swallow the error.\n if (!includesSomeLane(fiber.lanes, SyncLane)) {\n error('%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentNameFromFiber(fiber) || 'Unknown');\n }\n }\n }\n };\n }\n\n return update;\n}\n\nfunction resetSuspendedComponent(sourceFiber, rootRenderLanes) {\n // A legacy mode Suspense quirk, only relevant to hook components.\n\n\n var tag = sourceFiber.tag;\n\n if ((sourceFiber.mode & ConcurrentMode) === NoMode && (tag === FunctionComponent || tag === ForwardRef || tag === SimpleMemoComponent)) {\n var currentSource = sourceFiber.alternate;\n\n if (currentSource) {\n sourceFiber.updateQueue = currentSource.updateQueue;\n sourceFiber.memoizedState = currentSource.memoizedState;\n sourceFiber.lanes = currentSource.lanes;\n } else {\n sourceFiber.updateQueue = null;\n sourceFiber.memoizedState = null;\n }\n }\n}\n\nfunction markSuspenseBoundaryShouldCapture(suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes) {\n // This marks a Suspense boundary so that when we're unwinding the stack,\n // it captures the suspended \"exception\" and does a second (fallback) pass.\n if ((suspenseBoundary.mode & ConcurrentMode) === NoMode) {\n // Legacy Mode Suspense\n //\n // If the boundary is in legacy mode, we should *not*\n // suspend the commit. Pretend as if the suspended component rendered\n // null and keep rendering. When the Suspense boundary completes,\n // we'll do a second pass to render the fallback.\n if (suspenseBoundary === returnFiber) {\n // Special case where we suspended while reconciling the children of\n // a Suspense boundary's inner Offscreen wrapper fiber. This happens\n // when a React.lazy component is a direct child of a\n // Suspense boundary.\n //\n // Suspense boundaries are implemented as multiple fibers, but they\n // are a single conceptual unit. The legacy mode behavior where we\n // pretend the suspended fiber committed as `null` won't work,\n // because in this case the \"suspended\" fiber is the inner\n // Offscreen wrapper.\n //\n // Because the contents of the boundary haven't started rendering\n // yet (i.e. nothing in the tree has partially rendered) we can\n // switch to the regular, concurrent mode behavior: mark the\n // boundary with ShouldCapture and enter the unwind phase.\n suspenseBoundary.flags |= ShouldCapture;\n } else {\n suspenseBoundary.flags |= DidCapture;\n sourceFiber.flags |= ForceUpdateForLegacySuspense; // We're going to commit this fiber even though it didn't complete.\n // But we shouldn't call any lifecycle methods or callbacks. Remove\n // all lifecycle effect tags.\n\n sourceFiber.flags &= ~(LifecycleEffectMask | Incomplete);\n\n if (sourceFiber.tag === ClassComponent) {\n var currentSourceFiber = sourceFiber.alternate;\n\n if (currentSourceFiber === null) {\n // This is a new mount. Change the tag so it's not mistaken for a\n // completed class component. For example, we should not call\n // componentWillUnmount if it is deleted.\n sourceFiber.tag = IncompleteClassComponent;\n } else {\n // When we try rendering again, we should not reuse the current fiber,\n // since it's known to be in an inconsistent state. Use a force update to\n // prevent a bail out.\n var update = createUpdate(SyncLane);\n update.tag = ForceUpdate;\n enqueueUpdate(sourceFiber, update, SyncLane);\n }\n } // The source fiber did not complete. Mark it with Sync priority to\n // indicate that it still has pending work.\n\n\n sourceFiber.lanes = mergeLanes(sourceFiber.lanes, SyncLane);\n }\n\n return suspenseBoundary;\n } // Confirmed that the boundary is in a concurrent mode tree. Continue\n // with the normal suspend path.\n //\n // After this we'll use a set of heuristics to determine whether this\n // render pass will run to completion or restart or \"suspend\" the commit.\n // The actual logic for this is spread out in different places.\n //\n // This first principle is that if we're going to suspend when we complete\n // a root, then we should also restart if we get an update or ping that\n // might unsuspend it, and vice versa. The only reason to suspend is\n // because you think you might want to restart before committing. However,\n // it doesn't make sense to restart only while in the period we're suspended.\n //\n // Restarting too aggressively is also not good because it starves out any\n // intermediate loading state. So we use heuristics to determine when.\n // Suspense Heuristics\n //\n // If nothing threw a Promise or all the same fallbacks are already showing,\n // then don't suspend/restart.\n //\n // If this is an initial render of a new tree of Suspense boundaries and\n // those trigger a fallback, then don't suspend/restart. We want to ensure\n // that we can show the initial loading state as quickly as possible.\n //\n // If we hit a \"Delayed\" case, such as when we'd switch from content back into\n // a fallback, then we should always suspend/restart. Transitions apply\n // to this case. If none is defined, JND is used instead.\n //\n // If we're already showing a fallback and it gets \"retried\", allowing us to show\n // another level, but there's still an inner boundary that would show a fallback,\n // then we suspend/restart for 500ms since the last time we showed a fallback\n // anywhere in the tree. This effectively throttles progressive loading into a\n // consistent train of commits. This also gives us an opportunity to restart to\n // get to the completed state slightly earlier.\n //\n // If there's ambiguity due to batching it's resolved in preference of:\n // 1) \"delayed\", 2) \"initial render\", 3) \"retry\".\n //\n // We want to ensure that a \"busy\" state doesn't get force committed. We want to\n // ensure that new initial loading states can commit as soon as possible.\n\n\n suspenseBoundary.flags |= ShouldCapture; // TODO: I think we can remove this, since we now use `DidCapture` in\n // the begin phase to prevent an early bailout.\n\n suspenseBoundary.lanes = rootRenderLanes;\n return suspenseBoundary;\n}\n\nfunction throwException(root, returnFiber, sourceFiber, value, rootRenderLanes) {\n // The source fiber did not complete.\n sourceFiber.flags |= Incomplete;\n\n {\n if (isDevToolsPresent) {\n // If we have pending work still, restore the original updaters\n restorePendingUpdaters(root, rootRenderLanes);\n }\n }\n\n if (value !== null && typeof value === 'object') {\n\n if (typeof value.then === 'function') {\n // This is a wakeable. The component suspended.\n var wakeable = value;\n resetSuspendedComponent(sourceFiber);\n\n {\n if (getIsHydrating() && sourceFiber.mode & ConcurrentMode) {\n markDidThrowWhileHydratingDEV();\n }\n }\n\n\n var suspenseBoundary = getSuspenseHandler();\n\n if (suspenseBoundary !== null) {\n switch (suspenseBoundary.tag) {\n case SuspenseComponent:\n {\n // If this suspense boundary is not already showing a fallback, mark\n // the in-progress render as suspended. We try to perform this logic\n // as soon as soon as possible during the render phase, so the work\n // loop can know things like whether it's OK to switch to other tasks,\n // or whether it can wait for data to resolve before continuing.\n // TODO: Most of these checks are already performed when entering a\n // Suspense boundary. We should track the information on the stack so\n // we don't have to recompute it on demand. This would also allow us\n // to unify with `use` which needs to perform this logic even sooner,\n // before `throwException` is called.\n if (sourceFiber.mode & ConcurrentMode) {\n if (getShellBoundary() === null) {\n // Suspended in the \"shell\" of the app. This is an undesirable\n // loading state. We should avoid committing this tree.\n renderDidSuspendDelayIfPossible();\n } else {\n // If we suspended deeper than the shell, we don't need to delay\n // the commmit. However, we still call renderDidSuspend if this is\n // a new boundary, to tell the work loop that a new fallback has\n // appeared during this render.\n // TODO: Theoretically we should be able to delete this branch.\n // It's currently used for two things: 1) to throttle the\n // appearance of successive loading states, and 2) in\n // SuspenseList, to determine whether the children include any\n // pending fallbacks. For 1, we should apply throttling to all\n // retries, not just ones that render an additional fallback. For\n // 2, we should check subtreeFlags instead. Then we can delete\n // this branch.\n var current = suspenseBoundary.alternate;\n\n if (current === null) {\n renderDidSuspend();\n }\n }\n }\n\n suspenseBoundary.flags &= ~ForceClientRender;\n markSuspenseBoundaryShouldCapture(suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes); // Retry listener\n //\n // If the fallback does commit, we need to attach a different type of\n // listener. This one schedules an update on the Suspense boundary to\n // turn the fallback state off.\n //\n // Stash the wakeable on the boundary fiber so we can access it in the\n // commit phase.\n //\n // When the wakeable resolves, we'll attempt to render the boundary\n // again (\"retry\").\n // Check if this is a Suspensey resource. We do not attach retry\n // listeners to these, because we don't actually need them for\n // rendering. Only for committing. Instead, if a fallback commits\n // and the only thing that suspended was a Suspensey resource, we\n // retry immediately.\n // TODO: Refactor throwException so that we don't have to do this type\n // check. The caller already knows what the cause was.\n\n var isSuspenseyResource = wakeable === noopSuspenseyCommitThenable;\n\n if (isSuspenseyResource) {\n suspenseBoundary.flags |= ScheduleRetry;\n } else {\n var retryQueue = suspenseBoundary.updateQueue;\n\n if (retryQueue === null) {\n suspenseBoundary.updateQueue = new Set([wakeable]);\n } else {\n retryQueue.add(wakeable);\n } // We only attach ping listeners in concurrent mode. Legacy\n // Suspense always commits fallbacks synchronously, so there are\n // no pings.\n\n\n if (suspenseBoundary.mode & ConcurrentMode) {\n attachPingListener(root, wakeable, rootRenderLanes);\n }\n }\n\n return;\n }\n\n case OffscreenComponent:\n {\n if (suspenseBoundary.mode & ConcurrentMode) {\n suspenseBoundary.flags |= ShouldCapture;\n\n var _isSuspenseyResource = wakeable === noopSuspenseyCommitThenable;\n\n if (_isSuspenseyResource) {\n suspenseBoundary.flags |= ScheduleRetry;\n } else {\n var offscreenQueue = suspenseBoundary.updateQueue;\n\n if (offscreenQueue === null) {\n var newOffscreenQueue = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([wakeable])\n };\n suspenseBoundary.updateQueue = newOffscreenQueue;\n } else {\n var _retryQueue = offscreenQueue.retryQueue;\n\n if (_retryQueue === null) {\n offscreenQueue.retryQueue = new Set([wakeable]);\n } else {\n _retryQueue.add(wakeable);\n }\n }\n\n attachPingListener(root, wakeable, rootRenderLanes);\n }\n\n return;\n }\n }\n }\n\n throw new Error(\"Unexpected Suspense handler tag (\" + suspenseBoundary.tag + \"). This \" + 'is a bug in React.');\n } else {\n // No boundary was found. Unless this is a sync update, this is OK.\n // We can suspend and wait for more data to arrive.\n if (root.tag === ConcurrentRoot) {\n // In a concurrent root, suspending without a Suspense boundary is\n // allowed. It will suspend indefinitely without committing.\n //\n // TODO: Should we have different behavior for discrete updates? What\n // about flushSync? Maybe it should put the tree into an inert state,\n // and potentially log a warning. Revisit this for a future release.\n attachPingListener(root, wakeable, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return;\n } else {\n // In a legacy root, suspending without a boundary is always an error.\n var uncaughtSuspenseError = new Error('A component suspended while responding to synchronous input. This ' + 'will cause the UI to be replaced with a loading indicator. To ' + 'fix, updates that suspend should be wrapped ' + 'with startTransition.');\n value = uncaughtSuspenseError;\n }\n }\n }\n } // This is a regular error, not a Suspense wakeable.\n\n\n if (getIsHydrating() && sourceFiber.mode & ConcurrentMode) {\n markDidThrowWhileHydratingDEV();\n\n var _suspenseBoundary = getSuspenseHandler(); // If the error was thrown during hydration, we may be able to recover by\n // discarding the dehydrated content and switching to a client render.\n // Instead of surfacing the error, find the nearest Suspense boundary\n // and render it again without hydration.\n\n\n if (_suspenseBoundary !== null) {\n if ((_suspenseBoundary.flags & ShouldCapture) === NoFlags$1) {\n // Set a flag to indicate that we should try rendering the normal\n // children again, not the fallback.\n _suspenseBoundary.flags |= ForceClientRender;\n }\n\n markSuspenseBoundaryShouldCapture(_suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes); // Even though the user may not be affected by this error, we should\n // still log it so it can be fixed.\n\n queueHydrationError(createCapturedValueAtFiber(value, sourceFiber));\n return;\n }\n }\n\n value = createCapturedValueAtFiber(value, sourceFiber);\n renderDidError(value); // We didn't find a boundary that could handle this type of exception. Start\n // over and traverse parent path again, this time treating the exception\n // as an error.\n\n var workInProgress = returnFiber;\n\n do {\n switch (workInProgress.tag) {\n case HostRoot:\n {\n var _errorInfo = value;\n workInProgress.flags |= ShouldCapture;\n var lane = pickArbitraryLane(rootRenderLanes);\n workInProgress.lanes = mergeLanes(workInProgress.lanes, lane);\n var update = createRootErrorUpdate(workInProgress, _errorInfo, lane);\n enqueueCapturedUpdate(workInProgress, update);\n return;\n }\n\n case ClassComponent:\n // Capture and retry\n var errorInfo = value;\n var ctor = workInProgress.type;\n var instance = workInProgress.stateNode;\n\n if ((workInProgress.flags & DidCapture) === NoFlags$1 && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) {\n workInProgress.flags |= ShouldCapture;\n\n var _lane = pickArbitraryLane(rootRenderLanes);\n\n workInProgress.lanes = mergeLanes(workInProgress.lanes, _lane); // Schedule the error boundary to re-render using updated state\n\n var _update = createClassErrorUpdate(workInProgress, errorInfo, _lane);\n\n enqueueCapturedUpdate(workInProgress, _update);\n return;\n }\n\n break;\n } // $FlowFixMe[incompatible-type] we bail out when we get a null\n\n\n workInProgress = workInProgress.return;\n } while (workInProgress !== null);\n}\n\nvar ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner; // A special exception that's used to unwind the stack when an update flows\n// into a dehydrated boundary.\n\nvar SelectiveHydrationException = new Error(\"This is not a real error. It's an implementation detail of React's \" + \"selective hydration feature. If this leaks into userspace, it's a bug in \" + 'React. Please file an issue.');\nvar didReceiveUpdate = false;\nvar didWarnAboutBadClass;\nvar didWarnAboutModulePatternComponent;\nvar didWarnAboutContextTypeOnFunctionComponent;\nvar didWarnAboutGetDerivedStateOnFunctionComponent;\nvar didWarnAboutFunctionRefs;\nvar didWarnAboutReassigningProps;\nvar didWarnAboutRevealOrder;\nvar didWarnAboutTailOptions;\nvar didWarnAboutDefaultPropsOnFunctionComponent;\n\n{\n didWarnAboutBadClass = {};\n didWarnAboutModulePatternComponent = {};\n didWarnAboutContextTypeOnFunctionComponent = {};\n didWarnAboutGetDerivedStateOnFunctionComponent = {};\n didWarnAboutFunctionRefs = {};\n didWarnAboutReassigningProps = false;\n didWarnAboutRevealOrder = {};\n didWarnAboutTailOptions = {};\n didWarnAboutDefaultPropsOnFunctionComponent = {};\n}\n\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n if (current === null) {\n // If this is a fresh new component that hasn't been rendered yet, we\n // won't update its child set by applying minimal side-effects. Instead,\n // we will add them all to the child before it gets rendered. That means\n // we can optimize this reconciliation pass by not tracking side-effects.\n workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);\n } else {\n // If the current child is the same as the work in progress, it means that\n // we haven't yet started any work on these children. Therefore, we use\n // the clone algorithm to create a copy of all the current children.\n // If we had any progressed work already, that is invalid at this point so\n // let's throw it out.\n workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderLanes);\n }\n}\n\nfunction forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes) {\n // This function is fork of reconcileChildren. It's used in cases where we\n // want to reconcile without matching against the existing set. This has the\n // effect of all current children being unmounted; even if the type and key\n // are the same, the old child is unmounted and a new child is created.\n //\n // To do this, we're going to go through the reconcile algorithm twice. In\n // the first pass, we schedule a deletion for all the current children by\n // passing null.\n workInProgress.child = reconcileChildFibers(workInProgress, current.child, null, renderLanes); // In the second pass, we mount the new children. The trick here is that we\n // pass null in place of where we usually pass the current child set. This has\n // the effect of remounting all children regardless of whether their\n // identities match.\n\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);\n}\n\nfunction updateForwardRef(current, workInProgress, Component, nextProps, renderLanes) {\n // TODO: current can be non-null here even if the component\n // hasn't yet mounted. This happens after the first render suspends.\n // We'll need to figure out if this is fine or can cause issues.\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentNameFromType(Component));\n }\n }\n }\n\n var render = Component.render;\n var ref = workInProgress.ref; // The rest is a fork of updateFunctionComponent\n\n var nextChildren;\n var hasId;\n prepareToReadContext(workInProgress, renderLanes);\n\n {\n markComponentRenderStarted(workInProgress);\n }\n\n {\n ReactCurrentOwner$2.current = workInProgress;\n setIsRendering(true);\n nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes);\n hasId = checkDidRenderIdHook();\n setIsRendering(false);\n }\n\n {\n markComponentRenderStopped();\n }\n\n if (current !== null && !didReceiveUpdate) {\n bailoutHooks(current, workInProgress, renderLanes);\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n\n if (getIsHydrating() && hasId) {\n pushMaterializedTreeId(workInProgress);\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateMemoComponent(current, workInProgress, Component, nextProps, renderLanes) {\n if (current === null) {\n var type = Component.type;\n\n if (isSimpleFunctionComponent(type) && Component.compare === null && // SimpleMemoComponent codepath doesn't resolve outer props either.\n Component.defaultProps === undefined) {\n var resolvedType = type;\n\n {\n resolvedType = resolveFunctionForHotReloading(type);\n } // If this is a plain function component without default props,\n // and with only the default shallow comparison, we upgrade it\n // to a SimpleMemoComponent to allow fast path updates.\n\n\n workInProgress.tag = SimpleMemoComponent;\n workInProgress.type = resolvedType;\n\n {\n validateFunctionComponentInDev(workInProgress, type);\n }\n\n return updateSimpleMemoComponent(current, workInProgress, resolvedType, nextProps, renderLanes);\n }\n\n {\n var innerPropTypes = type.propTypes;\n\n if (innerPropTypes) {\n // Inner memo component props aren't currently validated in createElement.\n // We could move it there, but we'd still need this for lazy code path.\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentNameFromType(type));\n }\n\n if (Component.defaultProps !== undefined) {\n var componentName = getComponentNameFromType(type) || 'Unknown';\n\n if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {\n error('%s: Support for defaultProps will be removed from memo components ' + 'in a future major release. Use JavaScript default parameters instead.', componentName);\n\n didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;\n }\n }\n }\n\n var child = createFiberFromTypeAndProps(Component.type, null, nextProps, null, workInProgress, workInProgress.mode, renderLanes);\n child.ref = workInProgress.ref;\n child.return = workInProgress;\n workInProgress.child = child;\n return child;\n }\n\n {\n var _type = Component.type;\n var _innerPropTypes = _type.propTypes;\n\n if (_innerPropTypes) {\n // Inner memo component props aren't currently validated in createElement.\n // We could move it there, but we'd still need this for lazy code path.\n checkPropTypes(_innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentNameFromType(_type));\n }\n }\n\n var currentChild = current.child; // This is always exactly one child\n\n var hasScheduledUpdateOrContext = checkScheduledUpdateOrContext(current, renderLanes);\n\n if (!hasScheduledUpdateOrContext) {\n // This will be the props with resolved defaultProps,\n // unlike current.memoizedProps which will be the unresolved ones.\n var prevProps = currentChild.memoizedProps; // Default to shallow comparison\n\n var compare = Component.compare;\n compare = compare !== null ? compare : shallowEqual;\n\n if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n var newChild = createWorkInProgress(currentChild, nextProps);\n newChild.ref = workInProgress.ref;\n newChild.return = workInProgress;\n workInProgress.child = newChild;\n return newChild;\n}\n\nfunction updateSimpleMemoComponent(current, workInProgress, Component, nextProps, renderLanes) {\n // TODO: current can be non-null here even if the component\n // hasn't yet mounted. This happens when the inner render suspends.\n // We'll need to figure out if this is fine or can cause issues.\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var outerMemoType = workInProgress.elementType;\n\n if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {\n // We warn when you define propTypes on lazy()\n // so let's just skip over it to find memo() outer wrapper.\n // Inner props for memo are validated later.\n var lazyComponent = outerMemoType;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n outerMemoType = init(payload);\n } catch (x) {\n outerMemoType = null;\n } // Inner propTypes will be validated in the function component path.\n\n\n var outerPropTypes = outerMemoType && outerMemoType.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps)\n 'prop', getComponentNameFromType(outerMemoType));\n }\n }\n }\n }\n\n if (current !== null) {\n var prevProps = current.memoizedProps;\n\n if (shallowEqual(prevProps, nextProps) && current.ref === workInProgress.ref && ( // Prevent bailout if the implementation changed due to hot reload.\n workInProgress.type === current.type )) {\n didReceiveUpdate = false; // The props are shallowly equal. Reuse the previous props object, like we\n // would during a normal fiber bailout.\n //\n // We don't have strong guarantees that the props object is referentially\n // equal during updates where we can't bail out anyway — like if the props\n // are shallowly equal, but there's a local state or context update in the\n // same batch.\n //\n // However, as a principle, we should aim to make the behavior consistent\n // across different ways of memoizing a component. For example, React.memo\n // has a different internal Fiber layout if you pass a normal function\n // component (SimpleMemoComponent) versus if you pass a different type\n // like forwardRef (MemoComponent). But this is an implementation detail.\n // Wrapping a component in forwardRef (or React.lazy, etc) shouldn't\n // affect whether the props object is reused during a bailout.\n\n workInProgress.pendingProps = nextProps = prevProps;\n\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n // The pending lanes were cleared at the beginning of beginWork. We're\n // about to bail out, but there might be other lanes that weren't\n // included in the current render. Usually, the priority level of the\n // remaining updates is accumulated during the evaluation of the\n // component (i.e. when processing the update queue). But since since\n // we're bailing out early *without* evaluating the component, we need\n // to account for it here, too. Reset to the value of the current fiber.\n // NOTE: This only applies to SimpleMemoComponent, not MemoComponent,\n // because a MemoComponent fiber does not have hooks or an update queue;\n // rather, it wraps around an inner component, which may or may not\n // contains hooks.\n // TODO: Move the reset at in beginWork out of the common path so that\n // this is no longer necessary.\n workInProgress.lanes = current.lanes;\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n } else if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags$1) {\n // This is a special case that only exists for legacy mode.\n // See https://github.com/facebook/react/pull/19216.\n didReceiveUpdate = true;\n }\n }\n }\n\n return updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes);\n}\n\nfunction updateOffscreenComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps;\n var nextChildren = nextProps.children;\n var nextIsDetached = (workInProgress.stateNode._pendingVisibility & OffscreenDetached) !== 0;\n var prevState = current !== null ? current.memoizedState : null;\n markRef$1(current, workInProgress);\n\n if (nextProps.mode === 'hidden' || enableLegacyHidden || nextIsDetached) {\n // Rendering a hidden tree.\n var didSuspend = (workInProgress.flags & DidCapture) !== NoFlags$1;\n\n if (didSuspend) {\n // Something suspended inside a hidden tree\n // Include the base lanes from the last render\n var nextBaseLanes = prevState !== null ? mergeLanes(prevState.baseLanes, renderLanes) : renderLanes;\n\n if (current !== null) {\n // Reset to the current children\n var currentChild = workInProgress.child = current.child; // The current render suspended, but there may be other lanes with\n // pending work. We can't read `childLanes` from the current Offscreen\n // fiber because we reset it when it was deferred; however, we can read\n // the pending lanes from the child fibers.\n\n var currentChildLanes = NoLanes;\n\n while (currentChild !== null) {\n currentChildLanes = mergeLanes(mergeLanes(currentChildLanes, currentChild.lanes), currentChild.childLanes);\n currentChild = currentChild.sibling;\n }\n\n var lanesWeJustAttempted = nextBaseLanes;\n var remainingChildLanes = removeLanes(currentChildLanes, lanesWeJustAttempted);\n workInProgress.childLanes = remainingChildLanes;\n } else {\n workInProgress.childLanes = NoLanes;\n workInProgress.child = null;\n }\n\n return deferHiddenOffscreenComponent(current, workInProgress, nextBaseLanes);\n }\n\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n // In legacy sync mode, don't defer the subtree. Render it now.\n // TODO: Consider how Offscreen should work with transitions in the future\n var nextState = {\n baseLanes: NoLanes,\n cachePool: null\n };\n workInProgress.memoizedState = nextState;\n\n {\n // push the cache pool even though we're going to bail out\n // because otherwise there'd be a context mismatch\n if (current !== null) {\n pushTransition(workInProgress, null);\n }\n }\n\n reuseHiddenContextOnStack(workInProgress);\n pushOffscreenSuspenseHandler(workInProgress);\n } else if (!includesSomeLane(renderLanes, OffscreenLane)) {\n // We're hidden, and we're not rendering at Offscreen. We will bail out\n // and resume this tree later.\n // Schedule this fiber to re-render at Offscreen priority\n workInProgress.lanes = workInProgress.childLanes = laneToLanes(OffscreenLane); // Include the base lanes from the last render\n\n var _nextBaseLanes = prevState !== null ? mergeLanes(prevState.baseLanes, renderLanes) : renderLanes;\n\n return deferHiddenOffscreenComponent(current, workInProgress, _nextBaseLanes);\n } else {\n // This is the second render. The surrounding visible content has already\n // committed. Now we resume rendering the hidden tree.\n // Rendering at offscreen, so we can clear the base lanes.\n var _nextState = {\n baseLanes: NoLanes,\n cachePool: null\n };\n workInProgress.memoizedState = _nextState;\n\n if (current !== null) {\n // If the render that spawned this one accessed the cache pool, resume\n // using the same cache. Unless the parent changed, since that means\n // there was a refresh.\n var prevCachePool = prevState !== null ? prevState.cachePool : null; // TODO: Consider if and how Offscreen pre-rendering should\n // be attributed to the transition that spawned it\n\n pushTransition(workInProgress, prevCachePool);\n } // Push the lanes that were skipped when we bailed out.\n\n\n if (prevState !== null) {\n pushHiddenContext(workInProgress, prevState);\n } else {\n reuseHiddenContextOnStack(workInProgress);\n }\n\n pushOffscreenSuspenseHandler(workInProgress);\n }\n } else {\n // Rendering a visible tree.\n if (prevState !== null) {\n // We're going from hidden -> visible.\n var _prevCachePool = null;\n\n {\n // If the render that spawned this one accessed the cache pool, resume\n // using the same cache. Unless the parent changed, since that means\n // there was a refresh.\n _prevCachePool = prevState.cachePool;\n }\n\n pushTransition(workInProgress, _prevCachePool); // Push the lanes that were skipped when we bailed out.\n\n pushHiddenContext(workInProgress, prevState);\n reuseSuspenseHandlerOnStack(workInProgress); // Since we're not hidden anymore, reset the state\n\n workInProgress.memoizedState = null;\n } else {\n // We weren't previously hidden, and we still aren't, so there's nothing\n // special to do. Need to push to the stack regardless, though, to avoid\n // a push/pop misalignment.\n {\n // If the render that spawned this one accessed the cache pool, resume\n // using the same cache. Unless the parent changed, since that means\n // there was a refresh.\n if (current !== null) {\n pushTransition(workInProgress, null);\n }\n } // We're about to bail out, but we need to push this to the stack anyway\n // to avoid a push/pop misalignment.\n\n\n reuseHiddenContextOnStack(workInProgress);\n reuseSuspenseHandlerOnStack(workInProgress);\n }\n }\n\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction deferHiddenOffscreenComponent(current, workInProgress, nextBaseLanes, renderLanes) {\n var nextState = {\n baseLanes: nextBaseLanes,\n // Save the cache pool so we can resume later.\n cachePool: getOffscreenDeferredCache() \n };\n workInProgress.memoizedState = nextState;\n\n {\n // push the cache pool even though we're going to bail out\n // because otherwise there'd be a context mismatch\n if (current !== null) {\n pushTransition(workInProgress, null);\n }\n } // We're about to bail out, but we need to push this to the stack anyway\n // to avoid a push/pop misalignment.\n\n\n reuseHiddenContextOnStack(workInProgress);\n pushOffscreenSuspenseHandler(workInProgress);\n\n return null;\n} // Note: These happen to have identical begin phases, for now. We shouldn't hold\n\nfunction updateCacheComponent(current, workInProgress, renderLanes) {\n\n prepareToReadContext(workInProgress, renderLanes);\n var parentCache = readContext(CacheContext);\n\n if (current === null) {\n // Initial mount. Request a fresh cache from the pool.\n var freshCache = requestCacheFromPool(renderLanes);\n var initialState = {\n parent: parentCache,\n cache: freshCache\n };\n workInProgress.memoizedState = initialState;\n initializeUpdateQueue(workInProgress);\n pushCacheProvider(workInProgress, freshCache);\n } else {\n // Check for updates\n if (includesSomeLane(current.lanes, renderLanes)) {\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, null, null, renderLanes);\n }\n\n var prevState = current.memoizedState;\n var nextState = workInProgress.memoizedState; // Compare the new parent cache to the previous to see detect there was\n // a refresh.\n\n if (prevState.parent !== parentCache) {\n // Refresh in parent. Update the parent.\n var derivedState = {\n parent: parentCache,\n cache: parentCache\n }; // Copied from getDerivedStateFromProps implementation. Once the update\n // queue is empty, persist the derived state onto the base state.\n\n workInProgress.memoizedState = derivedState;\n\n if (workInProgress.lanes === NoLanes) {\n var updateQueue = workInProgress.updateQueue;\n workInProgress.memoizedState = updateQueue.baseState = derivedState;\n }\n\n pushCacheProvider(workInProgress, parentCache); // No need to propagate a context change because the refreshed parent\n // already did.\n } else {\n // The parent didn't refresh. Now check if this cache did.\n var nextCache = nextState.cache;\n pushCacheProvider(workInProgress, nextCache);\n\n if (nextCache !== prevState.cache) {\n // This cache refreshed. Propagate a context change.\n propagateContextChange(workInProgress, CacheContext, renderLanes);\n }\n }\n }\n\n var nextChildren = workInProgress.pendingProps.children;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n} // This should only be called if the name changes\n\nfunction updateFragment(current, workInProgress, renderLanes) {\n var nextChildren = workInProgress.pendingProps;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateMode(current, workInProgress, renderLanes) {\n var nextChildren = workInProgress.pendingProps.children;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateProfiler(current, workInProgress, renderLanes) {\n {\n workInProgress.flags |= Update;\n\n {\n // Reset effect durations for the next eventual effect phase.\n // These are reset during render to allow the DevTools commit hook a chance to read them,\n var stateNode = workInProgress.stateNode;\n stateNode.effectDuration = 0;\n stateNode.passiveEffectDuration = 0;\n }\n }\n\n var nextProps = workInProgress.pendingProps;\n var nextChildren = nextProps.children;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction markRef$1(current, workInProgress) {\n var ref = workInProgress.ref;\n\n if (current === null && ref !== null || current !== null && current.ref !== ref) {\n // Schedule a Ref effect\n workInProgress.flags |= Ref;\n workInProgress.flags |= RefStatic;\n }\n}\n\nfunction updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes) {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentNameFromType(Component));\n }\n }\n }\n\n var context;\n\n {\n var unmaskedContext = getUnmaskedContext(workInProgress, Component, true);\n context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n var nextChildren;\n var hasId;\n prepareToReadContext(workInProgress, renderLanes);\n\n {\n markComponentRenderStarted(workInProgress);\n }\n\n {\n ReactCurrentOwner$2.current = workInProgress;\n setIsRendering(true);\n nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes);\n hasId = checkDidRenderIdHook();\n setIsRendering(false);\n }\n\n {\n markComponentRenderStopped();\n }\n\n if (current !== null && !didReceiveUpdate) {\n bailoutHooks(current, workInProgress, renderLanes);\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n\n if (getIsHydrating() && hasId) {\n pushMaterializedTreeId(workInProgress);\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction replayFunctionComponent(current, workInProgress, nextProps, Component, secondArg, renderLanes) {\n // This function is used to replay a component that previously suspended,\n // after its data resolves. It's a simplified version of\n // updateFunctionComponent that reuses the hooks from the previous attempt.\n prepareToReadContext(workInProgress, renderLanes);\n\n {\n markComponentRenderStarted(workInProgress);\n }\n\n var nextChildren = replaySuspendedComponentWithHooks(current, workInProgress, Component, nextProps, secondArg);\n var hasId = checkDidRenderIdHook();\n\n {\n markComponentRenderStopped();\n }\n\n if (current !== null && !didReceiveUpdate) {\n bailoutHooks(current, workInProgress, renderLanes);\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n\n if (getIsHydrating() && hasId) {\n pushMaterializedTreeId(workInProgress);\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateClassComponent(current, workInProgress, Component, nextProps, renderLanes) {\n {\n // This is used by DevTools to force a boundary to error.\n switch (shouldError(workInProgress)) {\n case false:\n {\n var _instance = workInProgress.stateNode;\n var ctor = workInProgress.type; // TODO This way of resetting the error boundary state is a hack.\n // Is there a better way to do this?\n\n var tempInstance = new ctor(workInProgress.memoizedProps, _instance.context);\n var state = tempInstance.state;\n\n _instance.updater.enqueueSetState(_instance, state, null);\n\n break;\n }\n\n case true:\n {\n workInProgress.flags |= DidCapture;\n workInProgress.flags |= ShouldCapture; // eslint-disable-next-line react-internal/prod-error-codes\n\n var error$1 = new Error('Simulated error coming from DevTools');\n var lane = pickArbitraryLane(renderLanes);\n workInProgress.lanes = mergeLanes(workInProgress.lanes, lane); // Schedule the error boundary to re-render using updated state\n\n var update = createClassErrorUpdate(workInProgress, createCapturedValueAtFiber(error$1, workInProgress), lane);\n enqueueCapturedUpdate(workInProgress, update);\n break;\n }\n }\n\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentNameFromType(Component));\n }\n }\n } // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n\n var hasContext;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n prepareToReadContext(workInProgress, renderLanes);\n var instance = workInProgress.stateNode;\n var shouldUpdate;\n\n if (instance === null) {\n resetSuspendedCurrentOnMountInLegacyMode(current, workInProgress); // In the initial pass we might need to construct the instance.\n\n constructClassInstance(workInProgress, Component, nextProps);\n mountClassInstance(workInProgress, Component, nextProps, renderLanes);\n shouldUpdate = true;\n } else if (current === null) {\n // In a resume, we'll already have an instance we can reuse.\n shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderLanes);\n } else {\n shouldUpdate = updateClassInstance(current, workInProgress, Component, nextProps, renderLanes);\n }\n\n var nextUnitOfWork = finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes);\n\n {\n var inst = workInProgress.stateNode;\n\n if (shouldUpdate && inst.props !== nextProps) {\n if (!didWarnAboutReassigningProps) {\n error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentNameFromFiber(workInProgress) || 'a component');\n }\n\n didWarnAboutReassigningProps = true;\n }\n }\n\n return nextUnitOfWork;\n}\n\nfunction finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes) {\n // Refs should update even if shouldComponentUpdate returns false\n markRef$1(current, workInProgress);\n var didCaptureError = (workInProgress.flags & DidCapture) !== NoFlags$1;\n\n if (!shouldUpdate && !didCaptureError) {\n // Context providers should defer to sCU for rendering\n if (hasContext) {\n invalidateContextProvider(workInProgress, Component, false);\n }\n\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n\n var instance = workInProgress.stateNode; // Rerender\n\n ReactCurrentOwner$2.current = workInProgress;\n var nextChildren;\n\n if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') {\n // If we captured an error, but getDerivedStateFromError is not defined,\n // unmount all the children. componentDidCatch will schedule an update to\n // re-render a fallback. This is temporary until we migrate everyone to\n // the new API.\n // TODO: Warn in a future release.\n nextChildren = null;\n\n {\n stopProfilerTimerIfRunning();\n }\n } else {\n {\n markComponentRenderStarted(workInProgress);\n }\n\n {\n setIsRendering(true);\n nextChildren = instance.render();\n\n if (workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n instance.render();\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n setIsRendering(false);\n }\n\n {\n markComponentRenderStopped();\n }\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n\n if (current !== null && didCaptureError) {\n // If we're recovering from an error, reconcile without reusing any of\n // the existing children. Conceptually, the normal children and the children\n // that are shown on error are two different sets, so we shouldn't reuse\n // normal children even if their identities match.\n forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes);\n } else {\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n } // Memoize state using the values we just used to render.\n // TODO: Restructure so we never read values from the instance.\n\n\n workInProgress.memoizedState = instance.state; // The context might have changed so we need to recalculate it.\n\n if (hasContext) {\n invalidateContextProvider(workInProgress, Component, true);\n }\n\n return workInProgress.child;\n}\n\nfunction pushHostRootContext(workInProgress) {\n var root = workInProgress.stateNode;\n\n if (root.pendingContext) {\n pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);\n } else if (root.context) {\n // Should always be set\n pushTopLevelContextObject(workInProgress, root.context, false);\n }\n\n pushHostContainer(workInProgress, root.containerInfo);\n}\n\nfunction updateHostRoot(current, workInProgress, renderLanes) {\n pushHostRootContext(workInProgress);\n\n if (current === null) {\n throw new Error('Should have a current fiber. This is a bug in React.');\n }\n\n var nextProps = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n var prevChildren = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, nextProps, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n\n {\n var nextCache = nextState.cache;\n pushCacheProvider(workInProgress, nextCache);\n\n if (nextCache !== prevState.cache) {\n // The root cache refreshed.\n propagateContextChange(workInProgress, CacheContext, renderLanes);\n }\n } // Caution: React DevTools currently depends on this property\n // being called \"element\".\n\n\n var nextChildren = nextState.element;\n\n if (prevState.isDehydrated) {\n // This is a hydration root whose shell has not yet hydrated. We should\n // attempt to hydrate.\n // Flip isDehydrated to false to indicate that when this render\n // finishes, the root will no longer be dehydrated.\n var overrideState = {\n element: nextChildren,\n isDehydrated: false,\n cache: nextState.cache\n };\n var updateQueue = workInProgress.updateQueue; // `baseState` can always be the last state because the root doesn't\n // have reducer functions so it doesn't need rebasing.\n\n updateQueue.baseState = overrideState;\n workInProgress.memoizedState = overrideState;\n\n if (workInProgress.flags & ForceClientRender) {\n // Something errored during a previous attempt to hydrate the shell, so we\n // forced a client render.\n var recoverableError = createCapturedValueAtFiber(new Error('There was an error while hydrating. Because the error happened outside ' + 'of a Suspense boundary, the entire root will switch to ' + 'client rendering.'), workInProgress);\n return mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, recoverableError);\n } else if (nextChildren !== prevChildren) {\n var _recoverableError = createCapturedValueAtFiber(new Error('This root received an early update, before anything was able ' + 'hydrate. Switched the entire root to client rendering.'), workInProgress);\n\n return mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, _recoverableError);\n } else {\n // The outermost shell has not hydrated yet. Start hydrating.\n enterHydrationState(workInProgress);\n var child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);\n workInProgress.child = child;\n var node = child;\n\n while (node) {\n // Mark each child as hydrating. This is a fast path to know whether this\n // tree is part of a hydrating tree. This is used to determine if a child\n // node has fully mounted yet, and for scheduling event replaying.\n // Conceptually this is similar to Placement in that a new subtree is\n // inserted into the React tree here. It just happens to not need DOM\n // mutations because it already exists.\n node.flags = node.flags & ~Placement | Hydrating;\n node = node.sibling;\n }\n }\n } else {\n // Root is not dehydrated. Either this is a client-only root, or it\n // already hydrated.\n resetHydrationState();\n\n if (nextChildren === prevChildren) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n }\n\n return workInProgress.child;\n}\n\nfunction mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, recoverableError) {\n // Revert to client rendering.\n resetHydrationState();\n queueHydrationError(recoverableError);\n workInProgress.flags |= ForceClientRender;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateHostComponent$1(current, workInProgress, renderLanes) {\n pushHostContext(workInProgress);\n\n if (current === null) {\n tryToClaimNextHydratableInstance(workInProgress);\n }\n\n var type = workInProgress.type;\n var nextProps = workInProgress.pendingProps;\n var prevProps = current !== null ? current.memoizedProps : null;\n var nextChildren = nextProps.children;\n var isDirectTextChild = shouldSetTextContent(type, nextProps);\n\n if (isDirectTextChild) {\n // We special case a direct text child of a host node. This is a common\n // case. We won't handle it as a reified child. We will instead handle\n // this in the host environment that also has access to this prop. That\n // avoids allocating another HostText fiber and traversing it.\n nextChildren = null;\n } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {\n // If we're switching from a direct text child to a normal child, or to\n // empty, we need to schedule the text content to be reset.\n workInProgress.flags |= ContentReset;\n }\n\n {\n var memoizedState = workInProgress.memoizedState;\n\n if (memoizedState !== null) {\n // This fiber has been upgraded to a stateful component. The only way\n // happens currently is for form actions. We use hooks to track the\n // pending and error state of the form.\n //\n // Once a fiber is upgraded to be stateful, it remains stateful for the\n // rest of its lifetime.\n var newState = renderTransitionAwareHostComponentWithHooks(current, workInProgress, renderLanes); // If the transition state changed, propagate the change to all the\n // descendents. We use Context as an implementation detail for this.\n //\n // This is intentionally set here instead of pushHostContext because\n // pushHostContext gets called before we process the state hook, to avoid\n // a state mismatch in the event that something suspends.\n //\n // NOTE: This assumes that there cannot be nested transition providers,\n // because the only renderer that implements this feature is React DOM,\n // and forms cannot be nested. If we did support nested providers, then\n // we would need to push a context value even for host fibers that\n // haven't been upgraded yet.\n\n {\n HostTransitionContext._currentValue = newState;\n }\n\n {\n if (didReceiveUpdate) {\n if (current !== null) {\n var oldStateHook = current.memoizedState;\n var oldState = oldStateHook.memoizedState; // This uses regular equality instead of Object.is because we assume\n // that host transition state doesn't include NaN as a valid type.\n\n if (oldState !== newState) {\n propagateContextChange(workInProgress, HostTransitionContext, renderLanes);\n }\n }\n }\n }\n }\n }\n\n markRef$1(current, workInProgress);\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateHostHoistable(current, workInProgress, renderLanes) {\n markRef$1(current, workInProgress);\n var currentProps = current === null ? null : current.memoizedProps;\n var resource = workInProgress.memoizedState = getResource(workInProgress.type, currentProps, workInProgress.pendingProps);\n\n if (current === null) {\n if (!getIsHydrating() && resource === null) {\n // This is not a Resource Hoistable and we aren't hydrating so we construct the instance.\n workInProgress.stateNode = createHoistableInstance(workInProgress.type, workInProgress.pendingProps, getRootHostContainer(), workInProgress);\n }\n } // Resources never have reconciler managed children. It is possible for\n // the host implementation of getResource to consider children in the\n // resource construction but they will otherwise be discarded. In practice\n // this precludes all but the simplest children and Host specific warnings\n // should be implemented to warn when children are passsed when otherwise not\n // expected\n\n\n return null;\n}\n\nfunction updateHostSingleton(current, workInProgress, renderLanes) {\n pushHostContext(workInProgress);\n\n if (current === null) {\n claimHydratableSingleton(workInProgress);\n }\n\n var nextChildren = workInProgress.pendingProps.children;\n\n if (current === null && !getIsHydrating()) {\n // Similar to Portals we append Singleton children in the commit phase. So we\n // Track insertions even on mount.\n // TODO: Consider unifying this with how the root works.\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);\n } else {\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n }\n\n markRef$1(current, workInProgress);\n return workInProgress.child;\n}\n\nfunction updateHostText$1(current, workInProgress) {\n if (current === null) {\n tryToClaimNextHydratableTextInstance(workInProgress);\n } // Nothing to do here. This is terminal. We'll do the completion step\n // immediately after.\n\n\n return null;\n}\n\nfunction mountLazyComponent(_current, workInProgress, elementType, renderLanes) {\n resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress);\n var props = workInProgress.pendingProps;\n var lazyComponent = elementType;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n var Component = init(payload); // Store the unwrapped component in the type.\n\n workInProgress.type = Component;\n var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component);\n var resolvedProps = resolveDefaultProps(Component, props);\n var child;\n\n switch (resolvedTag) {\n case FunctionComponent:\n {\n {\n validateFunctionComponentInDev(workInProgress, Component);\n workInProgress.type = Component = resolveFunctionForHotReloading(Component);\n }\n\n child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderLanes);\n return child;\n }\n\n case ClassComponent:\n {\n {\n workInProgress.type = Component = resolveClassForHotReloading(Component);\n }\n\n child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderLanes);\n return child;\n }\n\n case ForwardRef:\n {\n {\n workInProgress.type = Component = resolveForwardRefForHotReloading(Component);\n }\n\n child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderLanes);\n return child;\n }\n\n case MemoComponent:\n {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n var outerPropTypes = Component.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only\n 'prop', getComponentNameFromType(Component));\n }\n }\n }\n\n child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too\n renderLanes);\n return child;\n }\n }\n\n var hint = '';\n\n {\n if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) {\n hint = ' Did you wrap a component in React.lazy() more than once?';\n }\n } // This message intentionally doesn't mention ForwardRef or MemoComponent\n // because the fact that it's a separate type of work is an\n // implementation detail.\n\n\n throw new Error(\"Element type is invalid. Received a promise that resolves to: \" + Component + \". \" + (\"Lazy element type must resolve to a class or function.\" + hint));\n}\n\nfunction mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderLanes) {\n resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress); // Promote the fiber to a class and try rendering again.\n\n workInProgress.tag = ClassComponent; // The rest of this function is a fork of `updateClassComponent`\n // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n var hasContext;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n prepareToReadContext(workInProgress, renderLanes);\n constructClassInstance(workInProgress, Component, nextProps);\n mountClassInstance(workInProgress, Component, nextProps, renderLanes);\n return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);\n}\n\nfunction mountIndeterminateComponent(_current, workInProgress, Component, renderLanes) {\n resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress);\n var props = workInProgress.pendingProps;\n var context;\n\n {\n var unmaskedContext = getUnmaskedContext(workInProgress, Component, false);\n context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n prepareToReadContext(workInProgress, renderLanes);\n var value;\n var hasId;\n\n {\n markComponentRenderStarted(workInProgress);\n }\n\n {\n if (Component.prototype && typeof Component.prototype.render === 'function') {\n var componentName = getComponentNameFromType(Component) || 'Unknown';\n\n if (!didWarnAboutBadClass[componentName]) {\n error(\"The <%s /> component appears to have a render method, but doesn't extend React.Component. \" + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);\n\n didWarnAboutBadClass[componentName] = true;\n }\n }\n\n if (workInProgress.mode & StrictLegacyMode) {\n ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);\n }\n\n setIsRendering(true);\n ReactCurrentOwner$2.current = workInProgress;\n value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes);\n hasId = checkDidRenderIdHook();\n setIsRendering(false);\n }\n\n {\n markComponentRenderStopped();\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n\n {\n // Support for module components is deprecated and is removed behind a flag.\n // Whether or not it would crash later, we want to show a good message in DEV first.\n if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n var _componentName = getComponentNameFromType(Component) || 'Unknown';\n\n if (!didWarnAboutModulePatternComponent[_componentName]) {\n error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName);\n\n didWarnAboutModulePatternComponent[_componentName] = true;\n }\n }\n }\n\n if ( // Run these checks in production only if the flag is off.\n // Eventually we'll delete this branch altogether.\n typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n {\n var _componentName2 = getComponentNameFromType(Component) || 'Unknown';\n\n if (!didWarnAboutModulePatternComponent[_componentName2]) {\n error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName2, _componentName2, _componentName2);\n\n didWarnAboutModulePatternComponent[_componentName2] = true;\n }\n } // Proceed under the assumption that this is a class instance\n\n\n workInProgress.tag = ClassComponent; // Throw out any hooks that were used.\n\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null; // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n var hasContext = false;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null;\n initializeUpdateQueue(workInProgress);\n adoptClassInstance(workInProgress, value);\n mountClassInstance(workInProgress, Component, props, renderLanes);\n return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);\n } else {\n // Proceed under the assumption that this is a function component\n workInProgress.tag = FunctionComponent;\n\n if (getIsHydrating() && hasId) {\n pushMaterializedTreeId(workInProgress);\n }\n\n reconcileChildren(null, workInProgress, value, renderLanes);\n\n {\n validateFunctionComponentInDev(workInProgress, Component);\n }\n\n return workInProgress.child;\n }\n}\n\nfunction validateFunctionComponentInDev(workInProgress, Component) {\n {\n if (Component) {\n if (Component.childContextTypes) {\n error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');\n }\n }\n\n if (workInProgress.ref !== null) {\n var info = '';\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n\n var warningKey = ownerName || '';\n var debugSource = workInProgress._debugSource;\n\n if (debugSource) {\n warningKey = debugSource.fileName + ':' + debugSource.lineNumber;\n }\n\n if (!didWarnAboutFunctionRefs[warningKey]) {\n didWarnAboutFunctionRefs[warningKey] = true;\n\n error('Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info);\n }\n }\n\n if (Component.defaultProps !== undefined) {\n var componentName = getComponentNameFromType(Component) || 'Unknown';\n\n if (!didWarnAboutDefaultPropsOnFunctionComponent[componentName]) {\n error('%s: Support for defaultProps will be removed from function components ' + 'in a future major release. Use JavaScript default parameters instead.', componentName);\n\n didWarnAboutDefaultPropsOnFunctionComponent[componentName] = true;\n }\n }\n\n if (typeof Component.getDerivedStateFromProps === 'function') {\n var _componentName3 = getComponentNameFromType(Component) || 'Unknown';\n\n if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3]) {\n error('%s: Function components do not support getDerivedStateFromProps.', _componentName3);\n\n didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3] = true;\n }\n }\n\n if (typeof Component.contextType === 'object' && Component.contextType !== null) {\n var _componentName4 = getComponentNameFromType(Component) || 'Unknown';\n\n if (!didWarnAboutContextTypeOnFunctionComponent[_componentName4]) {\n error('%s: Function components do not support contextType.', _componentName4);\n\n didWarnAboutContextTypeOnFunctionComponent[_componentName4] = true;\n }\n }\n }\n}\n\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: NoLane\n};\n\nfunction mountSuspenseOffscreenState(renderLanes) {\n return {\n baseLanes: renderLanes,\n cachePool: getSuspendedCache()\n };\n}\n\nfunction updateSuspenseOffscreenState(prevOffscreenState, renderLanes) {\n var cachePool = null;\n\n {\n var prevCachePool = prevOffscreenState.cachePool;\n\n if (prevCachePool !== null) {\n var parentCache = CacheContext._currentValue ;\n\n if (prevCachePool.parent !== parentCache) {\n // Detected a refresh in the parent. This overrides any previously\n // suspended cache.\n cachePool = {\n parent: parentCache,\n pool: parentCache\n };\n } else {\n // We can reuse the cache from last time. The only thing that would have\n // overridden it is a parent refresh, which we checked for above.\n cachePool = prevCachePool;\n }\n } else {\n // If there's no previous cache pool, grab the current one.\n cachePool = getSuspendedCache();\n }\n }\n\n return {\n baseLanes: mergeLanes(prevOffscreenState.baseLanes, renderLanes),\n cachePool: cachePool\n };\n} // TODO: Probably should inline this back\n\n\nfunction shouldRemainOnFallback(current, workInProgress, renderLanes) {\n // If we're already showing a fallback, there are cases where we need to\n // remain on that fallback regardless of whether the content has resolved.\n // For example, SuspenseList coordinates when nested content appears.\n // TODO: For compatibility with offscreen prerendering, this should also check\n // whether the current fiber (if it exists) was visible in the previous tree.\n if (current !== null) {\n var suspenseState = current.memoizedState;\n\n if (suspenseState === null) {\n // Currently showing content. Don't hide it, even if ForceSuspenseFallback\n // is true. More precise name might be \"ForceRemainSuspenseFallback\".\n // Note: This is a factoring smell. Can't remain on a fallback if there's\n // no fallback to remain on.\n return false;\n }\n } // Not currently showing content. Consult the Suspense context.\n\n\n var suspenseContext = suspenseStackCursor.current;\n return hasSuspenseListContext(suspenseContext, ForceSuspenseFallback);\n}\n\nfunction getRemainingWorkInPrimaryTree(current, primaryTreeDidDefer, renderLanes) {\n var remainingLanes = current !== null ? removeLanes(current.childLanes, renderLanes) : NoLanes;\n\n if (primaryTreeDidDefer) {\n // A useDeferredValue hook spawned a deferred task inside the primary tree.\n // Ensure that we retry this component at the deferred priority.\n // TODO: We could make this a per-subtree value instead of a global one.\n // Would need to track it on the context stack somehow, similar to what\n // we'd have to do for resumable contexts.\n remainingLanes = mergeLanes(remainingLanes, peekDeferredLane());\n }\n\n return remainingLanes;\n}\n\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps; // This is used by DevTools to force a boundary to suspend.\n\n {\n if (shouldSuspend(workInProgress)) {\n workInProgress.flags |= DidCapture;\n }\n }\n\n var showFallback = false;\n var didSuspend = (workInProgress.flags & DidCapture) !== NoFlags$1;\n\n if (didSuspend || shouldRemainOnFallback(current)) {\n // Something in this boundary's subtree already suspended. Switch to\n // rendering the fallback children.\n showFallback = true;\n workInProgress.flags &= ~DidCapture;\n } // Check if the primary children spawned a deferred task (useDeferredValue)\n // during the first pass.\n\n\n var didPrimaryChildrenDefer = (workInProgress.flags & DidDefer) !== NoFlags$1;\n workInProgress.flags &= ~DidDefer; // OK, the next part is confusing. We're about to reconcile the Suspense\n // boundary's children. This involves some custom reconciliation logic. Two\n // main reasons this is so complicated.\n //\n // First, Legacy Mode has different semantics for backwards compatibility. The\n // primary tree will commit in an inconsistent state, so when we do the\n // second pass to render the fallback, we do some exceedingly, uh, clever\n // hacks to make that not totally break. Like transferring effects and\n // deletions from hidden tree. In Concurrent Mode, it's much simpler,\n // because we bailout on the primary tree completely and leave it in its old\n // state, no effects. Same as what we do for Offscreen (except that\n // Offscreen doesn't have the first render pass).\n //\n // Second is hydration. During hydration, the Suspense fiber has a slightly\n // different layout, where the child points to a dehydrated fragment, which\n // contains the DOM rendered by the server.\n //\n // Third, even if you set all that aside, Suspense is like error boundaries in\n // that we first we try to render one tree, and if that fails, we render again\n // and switch to a different tree. Like a try/catch block. So we have to track\n // which branch we're currently rendering. Ideally we would model this using\n // a stack.\n\n if (current === null) {\n // Initial mount\n // Special path for hydration\n // If we're currently hydrating, try to hydrate this boundary.\n if (getIsHydrating()) {\n // We must push the suspense handler context *before* attempting to\n // hydrate, to avoid a mismatch in case it errors.\n if (showFallback) {\n pushPrimaryTreeSuspenseHandler(workInProgress);\n } else {\n pushFallbackTreeSuspenseHandler(workInProgress);\n }\n\n tryToClaimNextHydratableSuspenseInstance(workInProgress); // This could've been a dehydrated suspense component.\n\n var suspenseState = workInProgress.memoizedState;\n\n if (suspenseState !== null) {\n var dehydrated = suspenseState.dehydrated;\n\n if (dehydrated !== null) {\n return mountDehydratedSuspenseComponent(workInProgress, dehydrated);\n }\n } // If hydration didn't succeed, fall through to the normal Suspense path.\n // To avoid a stack mismatch we need to pop the Suspense handler that we\n // pushed above. This will become less awkward when move the hydration\n // logic to its own fiber.\n\n\n popSuspenseHandler(workInProgress);\n }\n\n var nextPrimaryChildren = nextProps.children;\n var nextFallbackChildren = nextProps.fallback;\n\n if (showFallback) {\n pushFallbackTreeSuspenseHandler(workInProgress);\n var fallbackFragment = mountSuspenseFallbackChildren(workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);\n var primaryChildFragment = workInProgress.child;\n primaryChildFragment.memoizedState = mountSuspenseOffscreenState(renderLanes);\n primaryChildFragment.childLanes = getRemainingWorkInPrimaryTree(current, didPrimaryChildrenDefer, renderLanes);\n workInProgress.memoizedState = SUSPENDED_MARKER;\n\n return fallbackFragment;\n } else {\n pushPrimaryTreeSuspenseHandler(workInProgress);\n return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n }\n } else {\n // This is an update.\n // Special path for hydration\n var prevState = current.memoizedState;\n\n if (prevState !== null) {\n var _dehydrated = prevState.dehydrated;\n\n if (_dehydrated !== null) {\n return updateDehydratedSuspenseComponent(current, workInProgress, didSuspend, didPrimaryChildrenDefer, nextProps, _dehydrated, prevState, renderLanes);\n }\n }\n\n if (showFallback) {\n pushFallbackTreeSuspenseHandler(workInProgress);\n var _nextFallbackChildren = nextProps.fallback;\n var _nextPrimaryChildren = nextProps.children;\n var fallbackChildFragment = updateSuspenseFallbackChildren(current, workInProgress, _nextPrimaryChildren, _nextFallbackChildren, renderLanes);\n var _primaryChildFragment2 = workInProgress.child;\n var prevOffscreenState = current.child.memoizedState;\n _primaryChildFragment2.memoizedState = prevOffscreenState === null ? mountSuspenseOffscreenState(renderLanes) : updateSuspenseOffscreenState(prevOffscreenState, renderLanes);\n\n _primaryChildFragment2.childLanes = getRemainingWorkInPrimaryTree(current, didPrimaryChildrenDefer, renderLanes);\n workInProgress.memoizedState = SUSPENDED_MARKER;\n return fallbackChildFragment;\n } else {\n pushPrimaryTreeSuspenseHandler(workInProgress);\n var _nextPrimaryChildren2 = nextProps.children;\n\n var _primaryChildFragment3 = updateSuspensePrimaryChildren(current, workInProgress, _nextPrimaryChildren2, renderLanes);\n\n workInProgress.memoizedState = null;\n return _primaryChildFragment3;\n }\n }\n}\n\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren, renderLanes) {\n var mode = workInProgress.mode;\n var primaryChildProps = {\n mode: 'visible',\n children: primaryChildren\n };\n var primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, mode);\n primaryChildFragment.return = workInProgress;\n workInProgress.child = primaryChildFragment;\n return primaryChildFragment;\n}\n\nfunction mountSuspenseFallbackChildren(workInProgress, primaryChildren, fallbackChildren, renderLanes) {\n var mode = workInProgress.mode;\n var progressedPrimaryFragment = workInProgress.child;\n var primaryChildProps = {\n mode: 'hidden',\n children: primaryChildren\n };\n var primaryChildFragment;\n var fallbackChildFragment;\n\n if ((mode & ConcurrentMode) === NoMode && progressedPrimaryFragment !== null) {\n // In legacy mode, we commit the primary tree as if it successfully\n // completed, even though it's in an inconsistent state.\n primaryChildFragment = progressedPrimaryFragment;\n primaryChildFragment.childLanes = NoLanes;\n primaryChildFragment.pendingProps = primaryChildProps;\n\n if (workInProgress.mode & ProfileMode) {\n // Reset the durations from the first pass so they aren't included in the\n // final amounts. This seems counterintuitive, since we're intentionally\n // not measuring part of the render phase, but this makes it match what we\n // do in Concurrent Mode.\n primaryChildFragment.actualDuration = 0;\n primaryChildFragment.actualStartTime = -1;\n primaryChildFragment.selfBaseDuration = 0;\n primaryChildFragment.treeBaseDuration = 0;\n }\n\n fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);\n } else {\n primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, mode);\n fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);\n }\n\n primaryChildFragment.return = workInProgress;\n fallbackChildFragment.return = workInProgress;\n primaryChildFragment.sibling = fallbackChildFragment;\n workInProgress.child = primaryChildFragment;\n return fallbackChildFragment;\n}\n\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode, renderLanes) {\n // The props argument to `createFiberFromOffscreen` is `any` typed, so we use\n // this wrapper function to constrain it.\n return createFiberFromOffscreen(offscreenProps, mode, NoLanes, null);\n}\n\nfunction updateWorkInProgressOffscreenFiber(current, offscreenProps) {\n // The props argument to `createWorkInProgress` is `any` typed, so we use this\n // wrapper function to constrain it.\n return createWorkInProgress(current, offscreenProps);\n}\n\nfunction updateSuspensePrimaryChildren(current, workInProgress, primaryChildren, renderLanes) {\n var currentPrimaryChildFragment = current.child;\n var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;\n var primaryChildFragment = updateWorkInProgressOffscreenFiber(currentPrimaryChildFragment, {\n mode: 'visible',\n children: primaryChildren\n });\n\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n primaryChildFragment.lanes = renderLanes;\n }\n\n primaryChildFragment.return = workInProgress;\n primaryChildFragment.sibling = null;\n\n if (currentFallbackChildFragment !== null) {\n // Delete the fallback child fragment\n var deletions = workInProgress.deletions;\n\n if (deletions === null) {\n workInProgress.deletions = [currentFallbackChildFragment];\n workInProgress.flags |= ChildDeletion;\n } else {\n deletions.push(currentFallbackChildFragment);\n }\n }\n\n workInProgress.child = primaryChildFragment;\n return primaryChildFragment;\n}\n\nfunction updateSuspenseFallbackChildren(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) {\n var mode = workInProgress.mode;\n var currentPrimaryChildFragment = current.child;\n var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;\n var primaryChildProps = {\n mode: 'hidden',\n children: primaryChildren\n };\n var primaryChildFragment;\n\n if ( // In legacy mode, we commit the primary tree as if it successfully\n // completed, even though it's in an inconsistent state.\n (mode & ConcurrentMode) === NoMode && // Make sure we're on the second pass, i.e. the primary child fragment was\n // already cloned. In legacy mode, the only case where this isn't true is\n // when DevTools forces us to display a fallback; we skip the first render\n // pass entirely and go straight to rendering the fallback. (In Concurrent\n // Mode, SuspenseList can also trigger this scenario, but this is a legacy-\n // only codepath.)\n workInProgress.child !== currentPrimaryChildFragment) {\n var progressedPrimaryFragment = workInProgress.child;\n primaryChildFragment = progressedPrimaryFragment;\n primaryChildFragment.childLanes = NoLanes;\n primaryChildFragment.pendingProps = primaryChildProps;\n\n if (workInProgress.mode & ProfileMode) {\n // Reset the durations from the first pass so they aren't included in the\n // final amounts. This seems counterintuitive, since we're intentionally\n // not measuring part of the render phase, but this makes it match what we\n // do in Concurrent Mode.\n primaryChildFragment.actualDuration = 0;\n primaryChildFragment.actualStartTime = -1;\n primaryChildFragment.selfBaseDuration = currentPrimaryChildFragment.selfBaseDuration;\n primaryChildFragment.treeBaseDuration = currentPrimaryChildFragment.treeBaseDuration;\n } // The fallback fiber was added as a deletion during the first pass.\n // However, since we're going to remain on the fallback, we no longer want\n // to delete it.\n\n\n workInProgress.deletions = null;\n } else {\n primaryChildFragment = updateWorkInProgressOffscreenFiber(currentPrimaryChildFragment, primaryChildProps); // Since we're reusing a current tree, we need to reuse the flags, too.\n // (We don't do this in legacy mode, because in legacy mode we don't re-use\n // the current tree; see previous branch.)\n\n primaryChildFragment.subtreeFlags = currentPrimaryChildFragment.subtreeFlags & StaticMask;\n }\n\n var fallbackChildFragment;\n\n if (currentFallbackChildFragment !== null) {\n fallbackChildFragment = createWorkInProgress(currentFallbackChildFragment, fallbackChildren);\n } else {\n fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null); // Needs a placement effect because the parent (the Suspense boundary) already\n // mounted but this is a new fiber.\n\n fallbackChildFragment.flags |= Placement;\n }\n\n fallbackChildFragment.return = workInProgress;\n primaryChildFragment.return = workInProgress;\n primaryChildFragment.sibling = fallbackChildFragment;\n workInProgress.child = primaryChildFragment;\n return fallbackChildFragment;\n}\n\nfunction retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, recoverableError) {\n // Falling back to client rendering. Because this has performance\n // implications, it's considered a recoverable error, even though the user\n // likely won't observe anything wrong with the UI.\n //\n // The error is passed in as an argument to enforce that every caller provide\n // a custom message, or explicitly opt out (currently the only path that opts\n // out is legacy mode; every concurrent path provides an error).\n if (recoverableError !== null) {\n queueHydrationError(recoverableError);\n } // This will add the old fiber to the deletion list\n\n\n reconcileChildFibers(workInProgress, current.child, null, renderLanes); // We're now not suspended nor dehydrated.\n\n var nextProps = workInProgress.pendingProps;\n var primaryChildren = nextProps.children;\n var primaryChildFragment = mountSuspensePrimaryChildren(workInProgress, primaryChildren); // Needs a placement effect because the parent (the Suspense boundary) already\n // mounted but this is a new fiber.\n\n primaryChildFragment.flags |= Placement;\n workInProgress.memoizedState = null;\n return primaryChildFragment;\n}\n\nfunction mountSuspenseFallbackAfterRetryWithoutHydrating(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) {\n var fiberMode = workInProgress.mode;\n var primaryChildProps = {\n mode: 'visible',\n children: primaryChildren\n };\n var primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, fiberMode);\n var fallbackChildFragment = createFiberFromFragment(fallbackChildren, fiberMode, renderLanes, null); // Needs a placement effect because the parent (the Suspense\n // boundary) already mounted but this is a new fiber.\n\n fallbackChildFragment.flags |= Placement;\n primaryChildFragment.return = workInProgress;\n fallbackChildFragment.return = workInProgress;\n primaryChildFragment.sibling = fallbackChildFragment;\n workInProgress.child = primaryChildFragment;\n\n if ((workInProgress.mode & ConcurrentMode) !== NoMode) {\n // We will have dropped the effect list which contains the\n // deletion. We need to reconcile to delete the current child.\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n }\n\n return fallbackChildFragment;\n}\n\nfunction mountDehydratedSuspenseComponent(workInProgress, suspenseInstance, renderLanes) {\n // During the first pass, we'll bail out and not drill into the children.\n // Instead, we'll leave the content in place and try to hydrate it later.\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n {\n error('Cannot hydrate Suspense in legacy mode. Switch from ' + 'ReactDOM.hydrate(element, container) to ' + 'ReactDOMClient.hydrateRoot(container, <App />)' + '.render(element) or remove the Suspense components from ' + 'the server rendered components.');\n }\n\n workInProgress.lanes = laneToLanes(SyncLane);\n } else if (isSuspenseInstanceFallback(suspenseInstance)) {\n // This is a client-only boundary. Since we won't get any content from the server\n // for this, we need to schedule that at a higher priority based on when it would\n // have timed out. In theory we could render it in this pass but it would have the\n // wrong priority associated with it and will prevent hydration of parent path.\n // Instead, we'll leave work left on it to render it in a separate commit.\n // TODO This time should be the time at which the server rendered response that is\n // a parent to this boundary was displayed. However, since we currently don't have\n // a protocol to transfer that time, we'll just estimate it by using the current\n // time. This will mean that Suspense timeouts are slightly shifted to later than\n // they should be.\n // Schedule a normal pri update to render this content.\n workInProgress.lanes = laneToLanes(DefaultHydrationLane);\n } else {\n // We'll continue hydrating the rest at offscreen priority since we'll already\n // be showing the right content coming from the server, it is no rush.\n workInProgress.lanes = laneToLanes(OffscreenLane);\n }\n\n return null;\n}\n\nfunction updateDehydratedSuspenseComponent(current, workInProgress, didSuspend, didPrimaryChildrenDefer, nextProps, suspenseInstance, suspenseState, renderLanes) {\n if (!didSuspend) {\n // This is the first render pass. Attempt to hydrate.\n pushPrimaryTreeSuspenseHandler(workInProgress); // We should never be hydrating at this point because it is the first pass,\n // but after we've already committed once.\n\n warnIfHydrating();\n\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, null);\n }\n\n if (isSuspenseInstanceFallback(suspenseInstance)) {\n // This boundary is in a permanent fallback state. In this case, we'll never\n // get an update and we'll never be able to hydrate the final content. Let's just try the\n // client side render instead.\n var digest;\n var message, stack;\n\n {\n var _getSuspenseInstanceF = getSuspenseInstanceFallbackErrorDetails(suspenseInstance);\n\n digest = _getSuspenseInstanceF.digest;\n message = _getSuspenseInstanceF.message;\n stack = _getSuspenseInstanceF.stack;\n }\n\n var capturedValue = null; // TODO: Figure out a better signal than encoding a magic digest value.\n\n {\n var error;\n\n if (message) {\n // eslint-disable-next-line react-internal/prod-error-codes\n error = new Error(message);\n } else {\n error = new Error('The server could not finish this Suspense boundary, likely ' + 'due to an error during server rendering. Switched to ' + 'client rendering.');\n }\n\n error.digest = digest;\n capturedValue = createCapturedValue(error, digest, stack);\n }\n\n return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, capturedValue);\n }\n // any context has changed, we need to treat is as if the input might have changed.\n\n\n var hasContextChanged = includesSomeLane(renderLanes, current.childLanes);\n\n if (didReceiveUpdate || hasContextChanged) {\n // This boundary has changed since the first render. This means that we are now unable to\n // hydrate it. We might still be able to hydrate it using a higher priority lane.\n var root = getWorkInProgressRoot();\n\n if (root !== null) {\n var attemptHydrationAtLane = getBumpedLaneForHydration(root, renderLanes);\n\n if (attemptHydrationAtLane !== NoLane && attemptHydrationAtLane !== suspenseState.retryLane) {\n // Intentionally mutating since this render will get interrupted. This\n // is one of the very rare times where we mutate the current tree\n // during the render phase.\n suspenseState.retryLane = attemptHydrationAtLane;\n enqueueConcurrentRenderForLane(current, attemptHydrationAtLane);\n scheduleUpdateOnFiber(root, current, attemptHydrationAtLane); // Throw a special object that signals to the work loop that it should\n // interrupt the current render.\n //\n // Because we're inside a React-only execution stack, we don't\n // strictly need to throw here — we could instead modify some internal\n // work loop state. But using an exception means we don't need to\n // check for this case on every iteration of the work loop. So doing\n // it this way moves the check out of the fast path.\n\n throw SelectiveHydrationException;\n }\n } // If we did not selectively hydrate, we'll continue rendering without\n // hydrating. Mark this tree as suspended to prevent it from committing\n // outside a transition.\n //\n // This path should only happen if the hydration lane already suspended.\n // Currently, it also happens during sync updates because there is no\n // hydration lane for sync updates.\n // TODO: We should ideally have a sync hydration lane that we can apply to do\n // a pass where we hydrate this subtree in place using the previous Context and then\n // reapply the update afterwards.\n\n\n if (isSuspenseInstancePending(suspenseInstance)) ; else {\n renderDidSuspendDelayIfPossible();\n }\n\n return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, null);\n } else if (isSuspenseInstancePending(suspenseInstance)) {\n // This component is still pending more data from the server, so we can't hydrate its\n // content. We treat it as if this component suspended itself. It might seem as if\n // we could just try to render it client-side instead. However, this will perform a\n // lot of unnecessary work and is unlikely to complete since it often will suspend\n // on missing data anyway. Additionally, the server might be able to render more\n // than we can on the client yet. In that case we'd end up with more fallback states\n // on the client than if we just leave it alone. If the server times out or errors\n // these should update this boundary to the permanent Fallback state instead.\n // Mark it as having captured (i.e. suspended).\n workInProgress.flags |= DidCapture; // Leave the child in place. I.e. the dehydrated fragment.\n\n workInProgress.child = current.child; // Register a callback to retry this boundary once the server has sent the result.\n\n var retry = retryDehydratedSuspenseBoundary.bind(null, current);\n registerSuspenseInstanceRetry(suspenseInstance, retry);\n return null;\n } else {\n // This is the first attempt.\n reenterHydrationStateFromDehydratedSuspenseInstance(workInProgress, suspenseInstance, suspenseState.treeContext);\n var primaryChildren = nextProps.children;\n var primaryChildFragment = mountSuspensePrimaryChildren(workInProgress, primaryChildren); // Mark the children as hydrating. This is a fast path to know whether this\n // tree is part of a hydrating tree. This is used to determine if a child\n // node has fully mounted yet, and for scheduling event replaying.\n // Conceptually this is similar to Placement in that a new subtree is\n // inserted into the React tree here. It just happens to not need DOM\n // mutations because it already exists.\n\n primaryChildFragment.flags |= Hydrating;\n return primaryChildFragment;\n }\n } else {\n // This is the second render pass. We already attempted to hydrated, but\n // something either suspended or errored.\n if (workInProgress.flags & ForceClientRender) {\n // Something errored during hydration. Try again without hydrating.\n pushPrimaryTreeSuspenseHandler(workInProgress);\n workInProgress.flags &= ~ForceClientRender;\n\n var _capturedValue = createCapturedValue(new Error('There was an error while hydrating this Suspense boundary. ' + 'Switched to client rendering.'));\n\n return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, _capturedValue);\n } else if (workInProgress.memoizedState !== null) {\n // Something suspended and we should still be in dehydrated mode.\n // Leave the existing child in place.\n // Push to avoid a mismatch\n pushFallbackTreeSuspenseHandler(workInProgress);\n workInProgress.child = current.child; // The dehydrated completion pass expects this flag to be there\n // but the normal suspense pass doesn't.\n\n workInProgress.flags |= DidCapture;\n return null;\n } else {\n // Suspended but we should no longer be in dehydrated mode.\n // Therefore we now have to render the fallback.\n pushFallbackTreeSuspenseHandler(workInProgress);\n var nextPrimaryChildren = nextProps.children;\n var nextFallbackChildren = nextProps.fallback;\n var fallbackChildFragment = mountSuspenseFallbackAfterRetryWithoutHydrating(current, workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);\n var _primaryChildFragment4 = workInProgress.child;\n _primaryChildFragment4.memoizedState = mountSuspenseOffscreenState(renderLanes);\n _primaryChildFragment4.childLanes = getRemainingWorkInPrimaryTree(current, didPrimaryChildrenDefer, renderLanes);\n workInProgress.memoizedState = SUSPENDED_MARKER;\n return fallbackChildFragment;\n }\n }\n}\n\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes = mergeLanes(fiber.lanes, renderLanes);\n var alternate = fiber.alternate;\n\n if (alternate !== null) {\n alternate.lanes = mergeLanes(alternate.lanes, renderLanes);\n }\n\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\n\nfunction propagateSuspenseContextChange(workInProgress, firstChild, renderLanes) {\n // Mark any Suspense boundaries with fallbacks as having work to do.\n // If they were previously forced into fallbacks, they may now be able\n // to unblock.\n var node = firstChild;\n\n while (node !== null) {\n if (node.tag === SuspenseComponent) {\n var state = node.memoizedState;\n\n if (state !== null) {\n scheduleSuspenseWorkOnFiber(node, renderLanes, workInProgress);\n }\n } else if (node.tag === SuspenseListComponent) {\n // If the tail is hidden there might not be an Suspense boundaries\n // to schedule work on. In this case we have to schedule it on the\n // list itself.\n // We don't have to traverse to the children of the list since\n // the list will propagate the change when it rerenders.\n scheduleSuspenseWorkOnFiber(node, renderLanes, workInProgress);\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === workInProgress) {\n return;\n } // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n\n while (node.sibling === null) {\n // $FlowFixMe[incompatible-use] found when upgrading Flow\n if (node.return === null || node.return === workInProgress) {\n return;\n }\n\n node = node.return;\n } // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\n\nfunction findLastContentRow(firstChild) {\n // This is going to find the last row among these children that is already\n // showing content on the screen, as opposed to being in fallback state or\n // new. If a row has multiple Suspense boundaries, any of them being in the\n // fallback state, counts as the whole row being in a fallback state.\n // Note that the \"rows\" will be workInProgress, but any nested children\n // will still be current since we haven't rendered them yet. The mounted\n // order may not be the same as the new order. We use the new order.\n var row = firstChild;\n var lastContentRow = null;\n\n while (row !== null) {\n var currentRow = row.alternate; // New rows can't be content rows.\n\n if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n lastContentRow = row;\n }\n\n row = row.sibling;\n }\n\n return lastContentRow;\n}\n\nfunction validateRevealOrder(revealOrder) {\n {\n if (revealOrder !== undefined && revealOrder !== 'forwards' && revealOrder !== 'backwards' && revealOrder !== 'together' && !didWarnAboutRevealOrder[revealOrder]) {\n didWarnAboutRevealOrder[revealOrder] = true;\n\n if (typeof revealOrder === 'string') {\n switch (revealOrder.toLowerCase()) {\n case 'together':\n case 'forwards':\n case 'backwards':\n {\n error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'Use lowercase \"%s\" instead.', revealOrder, revealOrder.toLowerCase());\n\n break;\n }\n\n case 'forward':\n case 'backward':\n {\n error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'React uses the -s suffix in the spelling. Use \"%ss\" instead.', revealOrder, revealOrder.toLowerCase());\n\n break;\n }\n\n default:\n error('\"%s\" is not a supported revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n\n break;\n }\n } else {\n error('%s is not a supported value for revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n }\n }\n }\n}\n\nfunction validateTailOptions(tailMode, revealOrder) {\n {\n if (tailMode !== undefined && !didWarnAboutTailOptions[tailMode]) {\n if (tailMode !== 'collapsed' && tailMode !== 'hidden') {\n didWarnAboutTailOptions[tailMode] = true;\n\n error('\"%s\" is not a supported value for tail on <SuspenseList />. ' + 'Did you mean \"collapsed\" or \"hidden\"?', tailMode);\n } else if (revealOrder !== 'forwards' && revealOrder !== 'backwards') {\n didWarnAboutTailOptions[tailMode] = true;\n\n error('<SuspenseList tail=\"%s\" /> is only valid if revealOrder is ' + '\"forwards\" or \"backwards\". ' + 'Did you mean to specify revealOrder=\"forwards\"?', tailMode);\n }\n }\n }\n}\n\nfunction validateSuspenseListNestedChild(childSlot, index) {\n {\n var isAnArray = isArray(childSlot);\n var isIterable = !isAnArray && typeof getIteratorFn(childSlot) === 'function';\n\n if (isAnArray || isIterable) {\n var type = isAnArray ? 'array' : 'iterable';\n\n error('A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' + 'an additional SuspenseList to configure its revealOrder: ' + '<SuspenseList revealOrder=...> ... ' + '<SuspenseList revealOrder=...>{%s}</SuspenseList> ... ' + '</SuspenseList>', type, index, type);\n\n return false;\n }\n }\n\n return true;\n}\n\nfunction validateSuspenseListChildren(children, revealOrder) {\n {\n if ((revealOrder === 'forwards' || revealOrder === 'backwards') && children !== undefined && children !== null && children !== false) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n if (!validateSuspenseListNestedChild(children[i], i)) {\n return;\n }\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n\n if (typeof iteratorFn === 'function') {\n var childrenIterator = iteratorFn.call(children);\n\n if (childrenIterator) {\n var step = childrenIterator.next();\n var _i = 0;\n\n for (; !step.done; step = childrenIterator.next()) {\n if (!validateSuspenseListNestedChild(step.value, _i)) {\n return;\n }\n\n _i++;\n }\n }\n } else {\n error('A single row was passed to a <SuspenseList revealOrder=\"%s\" />. ' + 'This is not useful since it needs multiple rows. ' + 'Did you mean to pass multiple children or an array?', revealOrder);\n }\n }\n }\n }\n}\n\nfunction initSuspenseListRenderState(workInProgress, isBackwards, tail, lastContentRow, tailMode) {\n var renderState = workInProgress.memoizedState;\n\n if (renderState === null) {\n workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode\n };\n } else {\n // We can reuse the existing object from previous renders.\n renderState.isBackwards = isBackwards;\n renderState.rendering = null;\n renderState.renderingStartTime = 0;\n renderState.last = lastContentRow;\n renderState.tail = tail;\n renderState.tailMode = tailMode;\n }\n} // This can end up rendering this component multiple passes.\n// The first pass splits the children fibers into two sets. A head and tail.\n// We first render the head. If anything is in fallback state, we do another\n// pass through beginWork to rerender all children (including the tail) with\n// the force suspend context. If the first render didn't have anything in\n// in fallback state. Then we render each row in the tail one-by-one.\n// That happens in the completeWork phase without going back to beginWork.\n\n\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps;\n var revealOrder = nextProps.revealOrder;\n var tailMode = nextProps.tail;\n var newChildren = nextProps.children;\n validateRevealOrder(revealOrder);\n validateTailOptions(tailMode, revealOrder);\n validateSuspenseListChildren(newChildren, revealOrder);\n reconcileChildren(current, workInProgress, newChildren, renderLanes);\n var suspenseContext = suspenseStackCursor.current;\n var shouldForceFallback = hasSuspenseListContext(suspenseContext, ForceSuspenseFallback);\n\n if (shouldForceFallback) {\n suspenseContext = setShallowSuspenseListContext(suspenseContext, ForceSuspenseFallback);\n workInProgress.flags |= DidCapture;\n } else {\n var didSuspendBefore = current !== null && (current.flags & DidCapture) !== NoFlags$1;\n\n if (didSuspendBefore) {\n // If we previously forced a fallback, we need to schedule work\n // on any nested boundaries to let them know to try to render\n // again. This is the same as context updating.\n propagateSuspenseContextChange(workInProgress, workInProgress.child, renderLanes);\n }\n\n suspenseContext = setDefaultShallowSuspenseListContext(suspenseContext);\n }\n\n pushSuspenseListContext(workInProgress, suspenseContext);\n\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n // In legacy mode, SuspenseList doesn't work so we just\n // use make it a noop by treating it as the default revealOrder.\n workInProgress.memoizedState = null;\n } else {\n switch (revealOrder) {\n case 'forwards':\n {\n var lastContentRow = findLastContentRow(workInProgress.child);\n var tail;\n\n if (lastContentRow === null) {\n // The whole list is part of the tail.\n // TODO: We could fast path by just rendering the tail now.\n tail = workInProgress.child;\n workInProgress.child = null;\n } else {\n // Disconnect the tail rows after the content row.\n // We're going to render them separately later.\n tail = lastContentRow.sibling;\n lastContentRow.sibling = null;\n }\n\n initSuspenseListRenderState(workInProgress, false, // isBackwards\n tail, lastContentRow, tailMode);\n break;\n }\n\n case 'backwards':\n {\n // We're going to find the first row that has existing content.\n // At the same time we're going to reverse the list of everything\n // we pass in the meantime. That's going to be our tail in reverse\n // order.\n var _tail = null;\n var row = workInProgress.child;\n workInProgress.child = null;\n\n while (row !== null) {\n var currentRow = row.alternate; // New rows can't be content rows.\n\n if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n // This is the beginning of the main content.\n workInProgress.child = row;\n break;\n }\n\n var nextRow = row.sibling;\n row.sibling = _tail;\n _tail = row;\n row = nextRow;\n } // TODO: If workInProgress.child is null, we can continue on the tail immediately.\n\n\n initSuspenseListRenderState(workInProgress, true, // isBackwards\n _tail, null, // last\n tailMode);\n break;\n }\n\n case 'together':\n {\n initSuspenseListRenderState(workInProgress, false, // isBackwards\n null, // tail\n null, // last\n undefined);\n break;\n }\n\n default:\n {\n // The default reveal order is the same as not having\n // a boundary.\n workInProgress.memoizedState = null;\n }\n }\n }\n\n return workInProgress.child;\n}\n\nfunction updatePortalComponent(current, workInProgress, renderLanes) {\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n var nextChildren = workInProgress.pendingProps;\n\n if (current === null) {\n // Portals are special because we don't append the children during mount\n // but at commit. Therefore we need to track insertions which the normal\n // flow doesn't do during mount. This doesn't happen at the root because\n // the root always starts with a \"current\" with a null child.\n // TODO: Consider unifying this with how the root works.\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);\n } else {\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n }\n\n return workInProgress.child;\n}\n\nvar hasWarnedAboutUsingNoValuePropOnContextProvider = false;\n\nfunction updateContextProvider(current, workInProgress, renderLanes) {\n var providerType = workInProgress.type;\n var context = providerType._context;\n var newProps = workInProgress.pendingProps;\n var oldProps = workInProgress.memoizedProps;\n var newValue = newProps.value;\n\n {\n if (!('value' in newProps)) {\n if (!hasWarnedAboutUsingNoValuePropOnContextProvider) {\n hasWarnedAboutUsingNoValuePropOnContextProvider = true;\n\n error('The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?');\n }\n }\n\n var providerPropTypes = workInProgress.type.propTypes;\n\n if (providerPropTypes) {\n checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider');\n }\n }\n\n pushProvider(workInProgress, context, newValue);\n\n {\n if (oldProps !== null) {\n var oldValue = oldProps.value;\n\n if (objectIs(oldValue, newValue)) {\n // No change. Bailout early if children are the same.\n if (oldProps.children === newProps.children && !hasContextChanged()) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n } else {\n // The context value changed. Search for matching consumers and schedule\n // them to update.\n propagateContextChange(workInProgress, context, renderLanes);\n }\n }\n }\n\n var newChildren = newProps.children;\n reconcileChildren(current, workInProgress, newChildren, renderLanes);\n return workInProgress.child;\n}\n\nvar hasWarnedAboutUsingContextAsConsumer = false;\n\nfunction updateContextConsumer(current, workInProgress, renderLanes) {\n var context = workInProgress.type; // The logic below for Context differs depending on PROD or DEV mode. In\n // DEV mode, we create a separate object for Context.Consumer that acts\n // like a proxy to Context. This proxy object adds unnecessary code in PROD\n // so we use the old behaviour (Context.Consumer references Context) to\n // reduce size and overhead. The separate object references context via\n // a property called \"_context\", which also gives us the ability to check\n // in DEV mode if this property exists or not and warn if it does not.\n\n {\n if (context._context === undefined) {\n // This may be because it's a Context (rather than a Consumer).\n // Or it may be because it's older React where they're the same thing.\n // We only want to warn if we're sure it's a new React.\n if (context !== context.Consumer) {\n if (!hasWarnedAboutUsingContextAsConsumer) {\n hasWarnedAboutUsingContextAsConsumer = true;\n\n error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n }\n } else {\n context = context._context;\n }\n }\n\n var newProps = workInProgress.pendingProps;\n var render = newProps.children;\n\n {\n if (typeof render !== 'function') {\n error('A context consumer was rendered with multiple children, or a child ' + \"that isn't a function. A context consumer expects a single child \" + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');\n }\n }\n\n prepareToReadContext(workInProgress, renderLanes);\n var newValue = readContext(context);\n\n {\n markComponentRenderStarted(workInProgress);\n }\n\n var newChildren;\n\n {\n ReactCurrentOwner$2.current = workInProgress;\n setIsRendering(true);\n newChildren = render(newValue);\n setIsRendering(false);\n }\n\n {\n markComponentRenderStopped();\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n reconcileChildren(current, workInProgress, newChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction markWorkInProgressReceivedUpdate() {\n didReceiveUpdate = true;\n}\n\nfunction resetSuspendedCurrentOnMountInLegacyMode(current, workInProgress) {\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n if (current !== null) {\n // A lazy component only mounts if it suspended inside a non-\n // concurrent tree, in an inconsistent state. We want to treat it like\n // a new mount, even though an empty version of it already committed.\n // Disconnect the alternate pointers.\n current.alternate = null;\n workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n workInProgress.flags |= Placement;\n }\n }\n}\n\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n if (current !== null) {\n // Reuse previous dependencies\n workInProgress.dependencies = current.dependencies;\n }\n\n {\n // Don't update \"base\" render times for bailouts.\n stopProfilerTimerIfRunning();\n }\n\n markSkippedUpdateLanes(workInProgress.lanes); // Check if the children have any pending work.\n\n if (!includesSomeLane(renderLanes, workInProgress.childLanes)) {\n // The children don't have any work either. We can skip them.\n // TODO: Once we add back resuming, we should check if the children are\n // a work-in-progress set. If so, we need to transfer their effects.\n {\n return null;\n }\n } // This fiber doesn't have work, but its subtree does. Clone the child\n // fibers and continue.\n\n\n cloneChildFibers(current, workInProgress);\n return workInProgress.child;\n}\n\nfunction remountFiber(current, oldWorkInProgress, newWorkInProgress) {\n {\n var returnFiber = oldWorkInProgress.return;\n\n if (returnFiber === null) {\n // eslint-disable-next-line react-internal/prod-error-codes\n throw new Error('Cannot swap the root fiber.');\n } // Disconnect from the old current.\n // It will get deleted.\n\n\n current.alternate = null;\n oldWorkInProgress.alternate = null; // Connect to the new tree.\n\n newWorkInProgress.index = oldWorkInProgress.index;\n newWorkInProgress.sibling = oldWorkInProgress.sibling;\n newWorkInProgress.return = oldWorkInProgress.return;\n newWorkInProgress.ref = oldWorkInProgress.ref; // Replace the child/sibling pointers above it.\n\n if (oldWorkInProgress === returnFiber.child) {\n returnFiber.child = newWorkInProgress;\n } else {\n var prevSibling = returnFiber.child;\n\n if (prevSibling === null) {\n // eslint-disable-next-line react-internal/prod-error-codes\n throw new Error('Expected parent to have a child.');\n } // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n\n while (prevSibling.sibling !== oldWorkInProgress) {\n // $FlowFixMe[incompatible-use] found when upgrading Flow\n prevSibling = prevSibling.sibling;\n\n if (prevSibling === null) {\n // eslint-disable-next-line react-internal/prod-error-codes\n throw new Error('Expected to find the previous sibling.');\n }\n } // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n\n prevSibling.sibling = newWorkInProgress;\n } // Delete the old fiber and place the new one.\n // Since the old fiber is disconnected, we have to schedule it manually.\n\n\n var deletions = returnFiber.deletions;\n\n if (deletions === null) {\n returnFiber.deletions = [current];\n returnFiber.flags |= ChildDeletion;\n } else {\n deletions.push(current);\n }\n\n newWorkInProgress.flags |= Placement; // Restart work from the new fiber.\n\n return newWorkInProgress;\n }\n}\n\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n // Before performing an early bailout, we must check if there are pending\n // updates or context.\n var updateLanes = current.lanes;\n\n if (includesSomeLane(updateLanes, renderLanes)) {\n return true;\n } // No pending update, but because context is propagated lazily, we need\n\n return false;\n}\n\nfunction attemptEarlyBailoutIfNoScheduledUpdate(current, workInProgress, renderLanes) {\n // This fiber does not have any pending work. Bailout without entering\n // the begin phase. There's still some bookkeeping we that needs to be done\n // in this optimized path, mostly pushing stuff onto the stack.\n switch (workInProgress.tag) {\n case HostRoot:\n pushHostRootContext(workInProgress);\n\n {\n var cache = current.memoizedState.cache;\n pushCacheProvider(workInProgress, cache);\n }\n\n resetHydrationState();\n break;\n\n case HostSingleton:\n case HostComponent:\n pushHostContext(workInProgress);\n break;\n\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n pushContextProvider(workInProgress);\n }\n\n break;\n }\n\n case HostPortal:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n\n case ContextProvider:\n {\n var newValue = workInProgress.memoizedProps.value;\n var context = workInProgress.type._context;\n pushProvider(workInProgress, context, newValue);\n break;\n }\n\n case Profiler:\n {\n // Profiler should only call onRender when one of its descendants actually rendered.\n var hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);\n\n if (hasChildWork) {\n workInProgress.flags |= Update;\n }\n\n {\n // Reset effect durations for the next eventual effect phase.\n // These are reset during render to allow the DevTools commit hook a chance to read them,\n var stateNode = workInProgress.stateNode;\n stateNode.effectDuration = 0;\n stateNode.passiveEffectDuration = 0;\n }\n }\n\n break;\n\n case SuspenseComponent:\n {\n var state = workInProgress.memoizedState;\n\n if (state !== null) {\n if (state.dehydrated !== null) {\n // We're not going to render the children, so this is just to maintain\n // push/pop symmetry\n pushPrimaryTreeSuspenseHandler(workInProgress); // We know that this component will suspend again because if it has\n // been unsuspended it has committed as a resolved Suspense component.\n // If it needs to be retried, it should have work scheduled on it.\n\n workInProgress.flags |= DidCapture; // We should never render the children of a dehydrated boundary until we\n // upgrade it. We return null instead of bailoutOnAlreadyFinishedWork.\n\n return null;\n } // If this boundary is currently timed out, we need to decide\n // whether to retry the primary children, or to skip over it and\n // go straight to the fallback. Check the priority of the primary\n // child fragment.\n\n\n var primaryChildFragment = workInProgress.child;\n var primaryChildLanes = primaryChildFragment.childLanes;\n\n if (includesSomeLane(renderLanes, primaryChildLanes)) {\n // The primary children have pending work. Use the normal path\n // to attempt to render the primary children again.\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n } else {\n // The primary child fragment does not have pending work marked\n // on it\n pushPrimaryTreeSuspenseHandler(workInProgress); // The primary children do not have pending work with sufficient\n // priority. Bailout.\n\n var child = bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n\n if (child !== null) {\n // The fallback children have pending work. Skip over the\n // primary children and work on the fallback.\n return child.sibling;\n } else {\n // Note: We can return `null` here because we already checked\n // whether there were nested context consumers, via the call to\n // `bailoutOnAlreadyFinishedWork` above.\n return null;\n }\n }\n } else {\n pushPrimaryTreeSuspenseHandler(workInProgress);\n }\n\n break;\n }\n\n case SuspenseListComponent:\n {\n var didSuspendBefore = (current.flags & DidCapture) !== NoFlags$1;\n\n var _hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);\n\n if (didSuspendBefore) {\n if (_hasChildWork) {\n // If something was in fallback state last time, and we have all the\n // same children then we're still in progressive loading state.\n // Something might get unblocked by state updates or retries in the\n // tree which will affect the tail. So we need to use the normal\n // path to compute the correct tail.\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n } // If none of the children had any work, that means that none of\n // them got retried so they'll still be blocked in the same way\n // as before. We can fast bail out.\n\n\n workInProgress.flags |= DidCapture;\n } // If nothing suspended before and we're rendering the same children,\n // then the tail doesn't matter. Anything new that suspends will work\n // in the \"together\" mode, so we can continue from the state we had.\n\n\n var renderState = workInProgress.memoizedState;\n\n if (renderState !== null) {\n // Reset to the \"together\" mode in case we've started a different\n // update in the past but didn't complete it.\n renderState.rendering = null;\n renderState.tail = null;\n renderState.lastEffect = null;\n }\n\n pushSuspenseListContext(workInProgress, suspenseStackCursor.current);\n\n if (_hasChildWork) {\n break;\n } else {\n // If none of the children had any work, that means that none of\n // them got retried so they'll still be blocked in the same way\n // as before. We can fast bail out.\n return null;\n }\n }\n\n case OffscreenComponent:\n case LegacyHiddenComponent:\n {\n // Need to check if the tree still needs to be deferred. This is\n // almost identical to the logic used in the normal update path,\n // so we'll just enter that. The only difference is we'll bail out\n // at the next level instead of this one, because the child props\n // have not changed. Which is fine.\n // TODO: Probably should refactor `beginWork` to split the bailout\n // path from the normal path. I'm tempted to do a labeled break here\n // but I won't :)\n workInProgress.lanes = NoLanes;\n return updateOffscreenComponent(current, workInProgress, renderLanes);\n }\n\n case CacheComponent:\n {\n {\n var _cache = current.memoizedState.cache;\n pushCacheProvider(workInProgress, _cache);\n }\n\n break;\n }\n }\n\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\n\nfunction beginWork$1(current, workInProgress, renderLanes) {\n {\n if (workInProgress._debugNeedsRemount && current !== null) {\n // This will restart the begin phase with a new fiber.\n return remountFiber(current, workInProgress, createFiberFromTypeAndProps(workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugSource || null, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.lanes));\n }\n }\n\n if (current !== null) {\n var oldProps = current.memoizedProps;\n var newProps = workInProgress.pendingProps;\n\n if (oldProps !== newProps || hasContextChanged() || ( // Force a re-render if the implementation changed due to hot reload:\n workInProgress.type !== current.type )) {\n // If props or context changed, mark the fiber as having performed work.\n // This may be unset if the props are determined to be equal later (memo).\n didReceiveUpdate = true;\n } else {\n // Neither props nor legacy context changes. Check if there's a pending\n // update or context change.\n var hasScheduledUpdateOrContext = checkScheduledUpdateOrContext(current, renderLanes);\n\n if (!hasScheduledUpdateOrContext && // If this is the second pass of an error or suspense boundary, there\n // may not be work scheduled on `current`, so we check for this flag.\n (workInProgress.flags & DidCapture) === NoFlags$1) {\n // No pending updates or context. Bail out now.\n didReceiveUpdate = false;\n return attemptEarlyBailoutIfNoScheduledUpdate(current, workInProgress, renderLanes);\n }\n\n if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags$1) {\n // This is a special case that only exists for legacy mode.\n // See https://github.com/facebook/react/pull/19216.\n didReceiveUpdate = true;\n } else {\n // An update was scheduled on this fiber, but there are no new props\n // nor legacy context. Set this to false. If an update queue or context\n // consumer produces a changed value, it will set this to true. Otherwise,\n // the component will assume the children have not changed and bail out.\n didReceiveUpdate = false;\n }\n }\n } else {\n didReceiveUpdate = false;\n\n if (getIsHydrating() && isForkedChild(workInProgress)) {\n // Check if this child belongs to a list of muliple children in\n // its parent.\n //\n // In a true multi-threaded implementation, we would render children on\n // parallel threads. This would represent the beginning of a new render\n // thread for this subtree.\n //\n // We only use this for id generation during hydration, which is why the\n // logic is located in this special branch.\n var slotIndex = workInProgress.index;\n var numberOfForks = getForksAtLevel();\n pushTreeId(workInProgress, numberOfForks, slotIndex);\n }\n } // Before entering the begin phase, clear pending update priority.\n // TODO: This assumes that we're about to evaluate the component and process\n // the update queue. However, there's an exception: SimpleMemoComponent\n // sometimes bails out later in the begin phase. This indicates that we should\n // move this assignment out of the common path and into each branch.\n\n\n workInProgress.lanes = NoLanes;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n {\n return mountIndeterminateComponent(current, workInProgress, workInProgress.type, renderLanes);\n }\n\n case LazyComponent:\n {\n var elementType = workInProgress.elementType;\n return mountLazyComponent(current, workInProgress, elementType, renderLanes);\n }\n\n case FunctionComponent:\n {\n var Component = workInProgress.type;\n var unresolvedProps = workInProgress.pendingProps;\n var resolvedProps = workInProgress.elementType === Component ? unresolvedProps : resolveDefaultProps(Component, unresolvedProps);\n return updateFunctionComponent(current, workInProgress, Component, resolvedProps, renderLanes);\n }\n\n case ClassComponent:\n {\n var _Component = workInProgress.type;\n var _unresolvedProps = workInProgress.pendingProps;\n\n var _resolvedProps = workInProgress.elementType === _Component ? _unresolvedProps : resolveDefaultProps(_Component, _unresolvedProps);\n\n return updateClassComponent(current, workInProgress, _Component, _resolvedProps, renderLanes);\n }\n\n case HostRoot:\n return updateHostRoot(current, workInProgress, renderLanes);\n\n case HostHoistable:\n {\n return updateHostHoistable(current, workInProgress);\n }\n\n // Fall through\n\n case HostSingleton:\n {\n return updateHostSingleton(current, workInProgress, renderLanes);\n }\n\n // Fall through\n\n case HostComponent:\n return updateHostComponent$1(current, workInProgress, renderLanes);\n\n case HostText:\n return updateHostText$1(current, workInProgress);\n\n case SuspenseComponent:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n\n case HostPortal:\n return updatePortalComponent(current, workInProgress, renderLanes);\n\n case ForwardRef:\n {\n var type = workInProgress.type;\n var _unresolvedProps2 = workInProgress.pendingProps;\n\n var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2);\n\n return updateForwardRef(current, workInProgress, type, _resolvedProps2, renderLanes);\n }\n\n case Fragment:\n return updateFragment(current, workInProgress, renderLanes);\n\n case Mode:\n return updateMode(current, workInProgress, renderLanes);\n\n case Profiler:\n return updateProfiler(current, workInProgress, renderLanes);\n\n case ContextProvider:\n return updateContextProvider(current, workInProgress, renderLanes);\n\n case ContextConsumer:\n return updateContextConsumer(current, workInProgress, renderLanes);\n\n case MemoComponent:\n {\n var _type2 = workInProgress.type;\n var _unresolvedProps3 = workInProgress.pendingProps; // Resolve outer props first, then resolve inner props.\n\n var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3);\n\n {\n if (workInProgress.type !== workInProgress.elementType) {\n var outerPropTypes = _type2.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only\n 'prop', getComponentNameFromType(_type2));\n }\n }\n }\n\n _resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3);\n return updateMemoComponent(current, workInProgress, _type2, _resolvedProps3, renderLanes);\n }\n\n case SimpleMemoComponent:\n {\n return updateSimpleMemoComponent(current, workInProgress, workInProgress.type, workInProgress.pendingProps, renderLanes);\n }\n\n case IncompleteClassComponent:\n {\n var _Component2 = workInProgress.type;\n var _unresolvedProps4 = workInProgress.pendingProps;\n\n var _resolvedProps4 = workInProgress.elementType === _Component2 ? _unresolvedProps4 : resolveDefaultProps(_Component2, _unresolvedProps4);\n\n return mountIncompleteClassComponent(current, workInProgress, _Component2, _resolvedProps4, renderLanes);\n }\n\n case SuspenseListComponent:\n {\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n }\n\n case ScopeComponent:\n {\n\n break;\n }\n\n case OffscreenComponent:\n {\n return updateOffscreenComponent(current, workInProgress, renderLanes);\n }\n\n case LegacyHiddenComponent:\n {\n\n break;\n }\n\n case CacheComponent:\n {\n {\n return updateCacheComponent(current, workInProgress, renderLanes);\n }\n }\n }\n\n throw new Error(\"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in \" + 'React. Please file an issue.');\n}\n\nvar valueCursor = createCursor(null);\nvar rendererCursorDEV;\n\n{\n rendererCursorDEV = createCursor(null);\n}\n\nvar rendererSigil;\n\n{\n // Use this to detect multiple renderers using the same context\n rendererSigil = {};\n}\n\nvar currentlyRenderingFiber = null;\nvar lastContextDependency = null;\nvar lastFullyObservedContext = null;\nvar isDisallowedContextReadInDEV = false;\nfunction resetContextDependencies() {\n // This is called right before React yields execution, to ensure `readContext`\n // cannot be called outside the render phase.\n currentlyRenderingFiber = null;\n lastContextDependency = null;\n lastFullyObservedContext = null;\n\n {\n isDisallowedContextReadInDEV = false;\n }\n}\nfunction enterDisallowedContextReadInDEV() {\n {\n isDisallowedContextReadInDEV = true;\n }\n}\nfunction exitDisallowedContextReadInDEV() {\n {\n isDisallowedContextReadInDEV = false;\n }\n}\nfunction pushProvider(providerFiber, context, nextValue) {\n {\n push(valueCursor, context._currentValue, providerFiber);\n context._currentValue = nextValue;\n\n {\n push(rendererCursorDEV, context._currentRenderer, providerFiber);\n\n if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {\n error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');\n }\n\n context._currentRenderer = rendererSigil;\n }\n }\n}\nfunction popProvider(context, providerFiber) {\n var currentValue = valueCursor.current;\n\n {\n {\n context._currentValue = currentValue;\n }\n\n {\n var currentRenderer = rendererCursorDEV.current;\n pop(rendererCursorDEV, providerFiber);\n context._currentRenderer = currentRenderer;\n }\n }\n\n pop(valueCursor, providerFiber);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n // Update the child lanes of all the ancestors, including the alternates.\n var node = parent;\n\n while (node !== null) {\n var alternate = node.alternate;\n\n if (!isSubsetOfLanes(node.childLanes, renderLanes)) {\n node.childLanes = mergeLanes(node.childLanes, renderLanes);\n\n if (alternate !== null) {\n alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);\n }\n } else if (alternate !== null && !isSubsetOfLanes(alternate.childLanes, renderLanes)) {\n alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);\n } else ;\n\n if (node === propagationRoot) {\n break;\n }\n\n node = node.return;\n }\n\n {\n if (node !== propagationRoot) {\n error('Expected to find the propagation root when scheduling context work. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n}\nfunction propagateContextChange(workInProgress, context, renderLanes) {\n {\n propagateContextChange_eager(workInProgress, context, renderLanes);\n }\n}\n\nfunction propagateContextChange_eager(workInProgress, context, renderLanes) {\n\n var fiber = workInProgress.child;\n\n if (fiber !== null) {\n // Set the return pointer of the child to the work-in-progress fiber.\n fiber.return = workInProgress;\n }\n\n while (fiber !== null) {\n var nextFiber = void 0; // Visit this fiber.\n\n var list = fiber.dependencies;\n\n if (list !== null) {\n nextFiber = fiber.child;\n var dependency = list.firstContext;\n\n while (dependency !== null) {\n // Check if the context matches.\n if (dependency.context === context) {\n // Match! Schedule an update on this fiber.\n if (fiber.tag === ClassComponent) {\n // Schedule a force update on the work-in-progress.\n var lane = pickArbitraryLane(renderLanes);\n var update = createUpdate(lane);\n update.tag = ForceUpdate; // TODO: Because we don't have a work-in-progress, this will add the\n // update to the current fiber, too, which means it will persist even if\n // this render is thrown away. Since it's a race condition, not sure it's\n // worth fixing.\n // Inlined `enqueueUpdate` to remove interleaved update check\n\n var updateQueue = fiber.updateQueue;\n\n if (updateQueue === null) ; else {\n var sharedQueue = updateQueue.shared;\n var pending = sharedQueue.pending;\n\n if (pending === null) {\n // This is the first update. Create a circular list.\n update.next = update;\n } else {\n update.next = pending.next;\n pending.next = update;\n }\n\n sharedQueue.pending = update;\n }\n }\n\n fiber.lanes = mergeLanes(fiber.lanes, renderLanes);\n var alternate = fiber.alternate;\n\n if (alternate !== null) {\n alternate.lanes = mergeLanes(alternate.lanes, renderLanes);\n }\n\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, workInProgress); // Mark the updated lanes on the list, too.\n\n list.lanes = mergeLanes(list.lanes, renderLanes); // Since we already found a match, we can stop traversing the\n // dependency list.\n\n break;\n }\n\n dependency = dependency.next;\n }\n } else if (fiber.tag === ContextProvider) {\n // Don't scan deeper if this is a matching provider\n nextFiber = fiber.type === workInProgress.type ? null : fiber.child;\n } else if (fiber.tag === DehydratedFragment) {\n // If a dehydrated suspense boundary is in this subtree, we don't know\n // if it will have any context consumers in it. The best we can do is\n // mark it as having updates.\n var parentSuspense = fiber.return;\n\n if (parentSuspense === null) {\n throw new Error('We just came from a parent so we must have had a parent. This is a bug in React.');\n }\n\n parentSuspense.lanes = mergeLanes(parentSuspense.lanes, renderLanes);\n var _alternate = parentSuspense.alternate;\n\n if (_alternate !== null) {\n _alternate.lanes = mergeLanes(_alternate.lanes, renderLanes);\n } // This is intentionally passing this fiber as the parent\n // because we want to schedule this fiber as having work\n // on its children. We'll use the childLanes on\n // this fiber to indicate that a context has changed.\n\n\n scheduleContextWorkOnParentPath(parentSuspense, renderLanes, workInProgress);\n nextFiber = fiber.sibling;\n } else {\n // Traverse down.\n nextFiber = fiber.child;\n }\n\n if (nextFiber !== null) {\n // Set the return pointer of the child to the work-in-progress fiber.\n nextFiber.return = fiber;\n } else {\n // No child. Traverse to next sibling.\n nextFiber = fiber;\n\n while (nextFiber !== null) {\n if (nextFiber === workInProgress) {\n // We're back to the root of this subtree. Exit.\n nextFiber = null;\n break;\n }\n\n var sibling = nextFiber.sibling;\n\n if (sibling !== null) {\n // Set the return pointer of the sibling to the work-in-progress fiber.\n sibling.return = nextFiber.return;\n nextFiber = sibling;\n break;\n } // No more siblings. Traverse up.\n\n\n nextFiber = nextFiber.return;\n }\n }\n\n fiber = nextFiber;\n }\n}\nfunction prepareToReadContext(workInProgress, renderLanes) {\n currentlyRenderingFiber = workInProgress;\n lastContextDependency = null;\n lastFullyObservedContext = null;\n var dependencies = workInProgress.dependencies;\n\n if (dependencies !== null) {\n {\n var firstContext = dependencies.firstContext;\n\n if (firstContext !== null) {\n if (includesSomeLane(dependencies.lanes, renderLanes)) {\n // Context list has a pending update. Mark that this fiber performed work.\n markWorkInProgressReceivedUpdate();\n } // Reset the work-in-progress list\n\n\n dependencies.firstContext = null;\n }\n }\n }\n}\nfunction readContext(context) {\n {\n // This warning would fire if you read context inside a Hook like useMemo.\n // Unlike the class check below, it's not enforced in production for perf.\n if (isDisallowedContextReadInDEV) {\n error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n }\n }\n\n return readContextForConsumer(currentlyRenderingFiber, context);\n}\nfunction readContextDuringReconcilation(consumer, context, renderLanes) {\n if (currentlyRenderingFiber === null) {\n prepareToReadContext(consumer, renderLanes);\n }\n\n return readContextForConsumer(consumer, context);\n}\n\nfunction readContextForConsumer(consumer, context) {\n var value = context._currentValue ;\n\n if (lastFullyObservedContext === context) ; else {\n var contextItem = {\n context: context,\n memoizedValue: value,\n next: null\n };\n\n if (lastContextDependency === null) {\n if (consumer === null) {\n throw new Error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n } // This is the first dependency for this component. Create a new list.\n\n\n lastContextDependency = contextItem;\n consumer.dependencies = {\n lanes: NoLanes,\n firstContext: contextItem\n };\n } else {\n // Append a new context item.\n lastContextDependency = lastContextDependency.next = contextItem;\n }\n }\n\n return value;\n}\n\n// replace it with a lightweight shim that only has the features we use.\n\nvar AbortControllerLocal = typeof AbortController !== 'undefined' ? AbortController : // $FlowFixMe[missing-this-annot]\n// $FlowFixMe[prop-missing]\nfunction AbortControllerShim() {\n var listeners = [];\n var signal = this.signal = {\n aborted: false,\n addEventListener: function (type, listener) {\n listeners.push(listener);\n }\n };\n\n this.abort = function () {\n signal.aborted = true;\n listeners.forEach(function (listener) {\n return listener();\n });\n };\n} ; // Intentionally not named imports because Rollup would\n// use dynamic dispatch for CommonJS interop named imports.\n\nvar scheduleCallback$1 = Scheduler.unstable_scheduleCallback,\n NormalPriority = Scheduler.unstable_NormalPriority;\nvar CacheContext = {\n $$typeof: REACT_CONTEXT_TYPE,\n // We don't use Consumer/Provider for Cache components. So we'll cheat.\n Consumer: null,\n Provider: null,\n // We'll initialize these at the root.\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0,\n _defaultValue: null,\n _globalName: null\n} ;\n\n{\n CacheContext._currentRenderer = null;\n CacheContext._currentRenderer2 = null;\n} // Creates a new empty Cache instance with a ref-count of 0. The caller is responsible\n// for retaining the cache once it is in use (retainCache), and releasing the cache\n// once it is no longer needed (releaseCache).\n\n\nfunction createCache() {\n\n var cache = {\n controller: new AbortControllerLocal(),\n data: new Map(),\n refCount: 0\n };\n return cache;\n}\nfunction retainCache(cache) {\n\n {\n if (cache.controller.signal.aborted) {\n warn('A cache instance was retained after it was already freed. ' + 'This likely indicates a bug in React.');\n }\n }\n\n cache.refCount++;\n} // Cleanup a cache instance, potentially freeing it if there are no more references\n\nfunction releaseCache(cache) {\n\n cache.refCount--;\n\n {\n if (cache.refCount < 0) {\n warn('A cache instance was released after it was already freed. ' + 'This likely indicates a bug in React.');\n }\n }\n\n if (cache.refCount === 0) {\n scheduleCallback$1(NormalPriority, function () {\n cache.controller.abort();\n });\n }\n}\nfunction pushCacheProvider(workInProgress, cache) {\n\n pushProvider(workInProgress, CacheContext, cache);\n}\nfunction popCacheProvider(workInProgress, cache) {\n\n popProvider(CacheContext, workInProgress);\n}\n\nvar ReactCurrentBatchConfig$2 = ReactSharedInternals.ReactCurrentBatchConfig;\nvar NoTransition = null;\nfunction requestCurrentTransition() {\n return ReactCurrentBatchConfig$2.transition;\n} // When retrying a Suspense/Offscreen boundary, we restore the cache that was\n// used during the previous render by placing it here, on the stack.\n\nvar resumedCache = createCursor(null); // During the render/synchronous commit phase, we don't actually process the\n\nfunction peekCacheFromPool() {\n // If we're rendering inside a Suspense boundary that is currently hidden,\n // we should use the same cache that we used during the previous render, if\n // one exists.\n\n\n var cacheResumedFromPreviousRender = resumedCache.current;\n\n if (cacheResumedFromPreviousRender !== null) {\n return cacheResumedFromPreviousRender;\n } // Otherwise, check the root's cache pool.\n\n\n var root = getWorkInProgressRoot();\n var cacheFromRootCachePool = root.pooledCache;\n return cacheFromRootCachePool;\n}\n\nfunction requestCacheFromPool(renderLanes) {\n // Similar to previous function, except if there's not already a cache in the\n // pool, we allocate a new one.\n var cacheFromPool = peekCacheFromPool();\n\n if (cacheFromPool !== null) {\n return cacheFromPool;\n } // Create a fresh cache and add it to the root cache pool. A cache can have\n // multiple owners:\n // - A cache pool that lives on the FiberRoot. This is where all fresh caches\n // are originally created (TODO: except during refreshes, until we implement\n // this correctly). The root takes ownership immediately when the cache is\n // created. Conceptually, root.pooledCache is an Option<Arc<Cache>> (owned),\n // and the return value of this function is a &Arc<Cache> (borrowed).\n // - One of several fiber types: host root, cache boundary, suspense\n // component. These retain and release in the commit phase.\n\n\n var root = getWorkInProgressRoot();\n var freshCache = createCache();\n root.pooledCache = freshCache;\n retainCache(freshCache);\n\n if (freshCache !== null) {\n root.pooledCacheLanes |= renderLanes;\n }\n\n return freshCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool, newTransitions) {\n {\n if (prevCachePool === null) {\n push(resumedCache, resumedCache.current, offscreenWorkInProgress);\n } else {\n push(resumedCache, prevCachePool.pool, offscreenWorkInProgress);\n }\n }\n}\nfunction popTransition(workInProgress, current) {\n if (current !== null) {\n\n {\n pop(resumedCache, workInProgress);\n }\n }\n}\nfunction getSuspendedCache() {\n // cache that would have been used to render fresh data during this render,\n // if there was any, so that we can resume rendering with the same cache when\n // we receive more data.\n\n\n var cacheFromPool = peekCacheFromPool();\n\n if (cacheFromPool === null) {\n return null;\n }\n\n return {\n // We must also save the parent, so that when we resume we can detect\n // a refresh.\n parent: CacheContext._currentValue ,\n pool: cacheFromPool\n };\n}\nfunction getOffscreenDeferredCache() {\n\n var cacheFromPool = peekCacheFromPool();\n\n if (cacheFromPool === null) {\n return null;\n }\n\n return {\n // We must also store the parent, so that when we resume we can detect\n // a refresh.\n parent: CacheContext._currentValue ,\n pool: cacheFromPool\n };\n}\n\n/**\n * Tag the fiber with an update effect. This turns a Placement into\n * a PlacementAndUpdate.\n */\n\nfunction markUpdate(workInProgress) {\n workInProgress.flags |= Update;\n}\n\nfunction markRef(workInProgress) {\n workInProgress.flags |= Ref | RefStatic;\n}\n\nfunction appendAllChildren(parent, workInProgress, needsVisibilityToggle, isHidden) {\n {\n // We only have the top Fiber that was created but we need recurse down its\n // children to find all the terminal nodes.\n var node = workInProgress.child;\n\n while (node !== null) {\n if (node.tag === HostComponent || node.tag === HostText) {\n appendInitialChild(parent, node.stateNode);\n } else if (node.tag === HostPortal || (node.tag === HostSingleton )) ; else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === workInProgress) {\n return;\n } // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n\n while (node.sibling === null) {\n // $FlowFixMe[incompatible-use] found when upgrading Flow\n if (node.return === null || node.return === workInProgress) {\n return;\n }\n\n node = node.return;\n } // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n} // An unfortunate fork of appendAllChildren because we have two different parent types.\n\nfunction updateHostComponent(current, workInProgress, type, newProps, renderLanes) {\n {\n // If we have an alternate, that means this is an update and we need to\n // schedule a side-effect to do the updates.\n var oldProps = current.memoizedProps;\n\n if (oldProps === newProps) {\n // In mutation mode, this is sufficient for a bailout because\n // we won't touch this node even if children changed.\n return;\n }\n\n markUpdate(workInProgress);\n }\n} // This function must be called at the very end of the complete phase, because\n// it might throw to suspend, and if the resource immediately loads, the work\n// loop will resume rendering as if the work-in-progress completed. So it must\n// fully complete.\n// TODO: This should ideally move to begin phase, but currently the instance is\n// not created until the complete phase. For our existing use cases, host nodes\n// that suspend don't have children, so it doesn't matter. But that might not\n// always be true in the future.\n\n\nfunction preloadInstanceAndSuspendIfNeeded(workInProgress, type, props, renderLanes) {\n {\n // If this flag was set previously, we can remove it. The flag\n // represents whether this particular set of props might ever need to\n // suspend. The safest thing to do is for maySuspendCommit to always\n // return true, but if the renderer is reasonably confident that the\n // underlying resource won't be evicted, it can return false as a\n // performance optimization.\n workInProgress.flags &= ~MaySuspendCommit;\n return;\n } // Mark this fiber with a flag. This gets set on all host instances\n}\n\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource, type, props, renderLanes) {\n // This is a fork of preloadInstanceAndSuspendIfNeeded, but for resources.\n if (!mayResourceSuspendCommit(resource)) {\n workInProgress.flags &= ~MaySuspendCommit;\n return;\n }\n\n workInProgress.flags |= MaySuspendCommit;\n var rootRenderLanes = getWorkInProgressRootRenderLanes();\n\n if (!includesOnlyNonUrgentLanes(rootRenderLanes)) ; else {\n var isReady = preloadResource(resource);\n\n if (!isReady) {\n if (shouldRemainOnPreviousScreen()) {\n workInProgress.flags |= ShouldSuspendCommit;\n } else {\n suspendCommit();\n }\n }\n }\n}\n\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n var wakeables = retryQueue;\n\n if (wakeables !== null) {\n // Schedule an effect to attach a retry listener to the promise.\n // TODO: Move to passive phase\n workInProgress.flags |= Update;\n } else {\n // This boundary suspended, but no wakeables were added to the retry\n // queue. Check if the renderer suspended commit. If so, this means\n // that once the fallback is committed, we can immediately retry\n // rendering again, because rendering wasn't actually blocked. Only\n // the commit phase.\n // TODO: Consider a model where we always schedule an immediate retry, even\n // for normal Suspense. That way the retry can partially render up to the\n // first thing that suspends.\n if (workInProgress.flags & ScheduleRetry) {\n var retryLane = // TODO: This check should probably be moved into claimNextRetryLane\n // I also suspect that we need some further consolidation of offscreen\n // and retry lanes.\n workInProgress.tag !== OffscreenComponent ? claimNextRetryLane() : OffscreenLane;\n workInProgress.lanes = mergeLanes(workInProgress.lanes, retryLane);\n }\n }\n}\n\nfunction updateHostText(current, workInProgress, oldText, newText) {\n {\n // If the text differs, mark it as an update. All the work in done in commitWork.\n if (oldText !== newText) {\n markUpdate(workInProgress);\n }\n }\n}\n\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (getIsHydrating()) {\n // If we're hydrating, we should consume as many items as we can\n // so we don't leave any behind.\n return;\n }\n\n switch (renderState.tailMode) {\n case 'hidden':\n {\n // Any insertions at the end of the tail list after this point\n // should be invisible. If there are already mounted boundaries\n // anything before them are not considered for collapsing.\n // Therefore we need to go through the whole tail to find if\n // there are any.\n var tailNode = renderState.tail;\n var lastTailNode = null;\n\n while (tailNode !== null) {\n if (tailNode.alternate !== null) {\n lastTailNode = tailNode;\n }\n\n tailNode = tailNode.sibling;\n } // Next we're simply going to delete all insertions after the\n // last rendered item.\n\n\n if (lastTailNode === null) {\n // All remaining items in the tail are insertions.\n renderState.tail = null;\n } else {\n // Detach the insertion after the last node that was already\n // inserted.\n lastTailNode.sibling = null;\n }\n\n break;\n }\n\n case 'collapsed':\n {\n // Any insertions at the end of the tail list after this point\n // should be invisible. If there are already mounted boundaries\n // anything before them are not considered for collapsing.\n // Therefore we need to go through the whole tail to find if\n // there are any.\n var _tailNode = renderState.tail;\n var _lastTailNode = null;\n\n while (_tailNode !== null) {\n if (_tailNode.alternate !== null) {\n _lastTailNode = _tailNode;\n }\n\n _tailNode = _tailNode.sibling;\n } // Next we're simply going to delete all insertions after the\n // last rendered item.\n\n\n if (_lastTailNode === null) {\n // All remaining items in the tail are insertions.\n if (!hasRenderedATailFallback && renderState.tail !== null) {\n // We suspended during the head. We want to show at least one\n // row at the tail. So we'll keep on and cut off the rest.\n renderState.tail.sibling = null;\n } else {\n renderState.tail = null;\n }\n } else {\n // Detach the insertion after the last node that was already\n // inserted.\n _lastTailNode.sibling = null;\n }\n\n break;\n }\n }\n}\n\nfunction bubbleProperties(completedWork) {\n var didBailout = completedWork.alternate !== null && completedWork.alternate.child === completedWork.child;\n var newChildLanes = NoLanes;\n var subtreeFlags = NoFlags$1;\n\n if (!didBailout) {\n // Bubble up the earliest expiration time.\n if ((completedWork.mode & ProfileMode) !== NoMode) {\n // In profiling mode, resetChildExpirationTime is also used to reset\n // profiler durations.\n var actualDuration = completedWork.actualDuration;\n var treeBaseDuration = completedWork.selfBaseDuration;\n var child = completedWork.child;\n\n while (child !== null) {\n newChildLanes = mergeLanes(newChildLanes, mergeLanes(child.lanes, child.childLanes));\n subtreeFlags |= child.subtreeFlags;\n subtreeFlags |= child.flags; // When a fiber is cloned, its actualDuration is reset to 0. This value will\n // only be updated if work is done on the fiber (i.e. it doesn't bailout).\n // When work is done, it should bubble to the parent's actualDuration. If\n // the fiber has not been cloned though, (meaning no work was done), then\n // this value will reflect the amount of time spent working on a previous\n // render. In that case it should not bubble. We determine whether it was\n // cloned by comparing the child pointer.\n // $FlowFixMe[unsafe-addition] addition with possible null/undefined value\n\n actualDuration += child.actualDuration; // $FlowFixMe[unsafe-addition] addition with possible null/undefined value\n\n treeBaseDuration += child.treeBaseDuration;\n child = child.sibling;\n }\n\n completedWork.actualDuration = actualDuration;\n completedWork.treeBaseDuration = treeBaseDuration;\n } else {\n var _child = completedWork.child;\n\n while (_child !== null) {\n newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child.lanes, _child.childLanes));\n subtreeFlags |= _child.subtreeFlags;\n subtreeFlags |= _child.flags; // Update the return pointer so the tree is consistent. This is a code\n // smell because it assumes the commit phase is never concurrent with\n // the render phase. Will address during refactor to alternate model.\n\n _child.return = completedWork;\n _child = _child.sibling;\n }\n }\n\n completedWork.subtreeFlags |= subtreeFlags;\n } else {\n // Bubble up the earliest expiration time.\n if ((completedWork.mode & ProfileMode) !== NoMode) {\n // In profiling mode, resetChildExpirationTime is also used to reset\n // profiler durations.\n var _treeBaseDuration = completedWork.selfBaseDuration;\n var _child2 = completedWork.child;\n\n while (_child2 !== null) {\n newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child2.lanes, _child2.childLanes)); // \"Static\" flags share the lifetime of the fiber/hook they belong to,\n // so we should bubble those up even during a bailout. All the other\n // flags have a lifetime only of a single render + commit, so we should\n // ignore them.\n\n subtreeFlags |= _child2.subtreeFlags & StaticMask;\n subtreeFlags |= _child2.flags & StaticMask; // $FlowFixMe[unsafe-addition] addition with possible null/undefined value\n\n _treeBaseDuration += _child2.treeBaseDuration;\n _child2 = _child2.sibling;\n }\n\n completedWork.treeBaseDuration = _treeBaseDuration;\n } else {\n var _child3 = completedWork.child;\n\n while (_child3 !== null) {\n newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child3.lanes, _child3.childLanes)); // \"Static\" flags share the lifetime of the fiber/hook they belong to,\n // so we should bubble those up even during a bailout. All the other\n // flags have a lifetime only of a single render + commit, so we should\n // ignore them.\n\n subtreeFlags |= _child3.subtreeFlags & StaticMask;\n subtreeFlags |= _child3.flags & StaticMask; // Update the return pointer so the tree is consistent. This is a code\n // smell because it assumes the commit phase is never concurrent with\n // the render phase. Will address during refactor to alternate model.\n\n _child3.return = completedWork;\n _child3 = _child3.sibling;\n }\n }\n\n completedWork.subtreeFlags |= subtreeFlags;\n }\n\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\n\nfunction completeDehydratedSuspenseBoundary(current, workInProgress, nextState) {\n if (hasUnhydratedTailNodes() && (workInProgress.mode & ConcurrentMode) !== NoMode && (workInProgress.flags & DidCapture) === NoFlags$1) {\n warnIfUnhydratedTailNodes(workInProgress);\n resetHydrationState();\n workInProgress.flags |= ForceClientRender | DidCapture;\n return false;\n }\n\n var wasHydrated = popHydrationState(workInProgress);\n\n if (nextState !== null && nextState.dehydrated !== null) {\n // We might be inside a hydration state the first time we're picking up this\n // Suspense boundary, and also after we've reentered it for further hydration.\n if (current === null) {\n if (!wasHydrated) {\n throw new Error('A dehydrated suspense component was completed without a hydrated node. ' + 'This is probably a bug in React.');\n }\n\n prepareToHydrateHostSuspenseInstance(workInProgress);\n bubbleProperties(workInProgress);\n\n {\n if ((workInProgress.mode & ProfileMode) !== NoMode) {\n var isTimedOutSuspense = nextState !== null;\n\n if (isTimedOutSuspense) {\n // Don't count time spent in a timed out Suspense subtree as part of the base duration.\n var primaryChildFragment = workInProgress.child;\n\n if (primaryChildFragment !== null) {\n // $FlowFixMe[unsafe-arithmetic] Flow doesn't support type casting in combination with the -= operator\n workInProgress.treeBaseDuration -= primaryChildFragment.treeBaseDuration;\n }\n }\n }\n }\n\n return false;\n } else {\n // We might have reentered this boundary to hydrate it. If so, we need to reset the hydration\n // state since we're now exiting out of it. popHydrationState doesn't do that for us.\n resetHydrationState();\n\n if ((workInProgress.flags & DidCapture) === NoFlags$1) {\n // This boundary did not suspend so it's now hydrated and unsuspended.\n workInProgress.memoizedState = null;\n } // If nothing suspended, we need to schedule an effect to mark this boundary\n // as having hydrated so events know that they're free to be invoked.\n // It's also a signal to replay events and the suspense callback.\n // If something suspended, schedule an effect to attach retry listeners.\n // So we might as well always mark this.\n\n\n workInProgress.flags |= Update;\n bubbleProperties(workInProgress);\n\n {\n if ((workInProgress.mode & ProfileMode) !== NoMode) {\n var _isTimedOutSuspense = nextState !== null;\n\n if (_isTimedOutSuspense) {\n // Don't count time spent in a timed out Suspense subtree as part of the base duration.\n var _primaryChildFragment = workInProgress.child;\n\n if (_primaryChildFragment !== null) {\n // $FlowFixMe[unsafe-arithmetic] Flow doesn't support type casting in combination with the -= operator\n workInProgress.treeBaseDuration -= _primaryChildFragment.treeBaseDuration;\n }\n }\n }\n }\n\n return false;\n }\n } else {\n // Successfully completed this tree. If this was a forced client render,\n // there may have been recoverable errors during first hydration\n // attempt. If so, add them to a queue so we can log them in the\n // commit phase.\n upgradeHydrationErrorsToRecoverable(); // Fall through to normal Suspense path\n\n return true;\n }\n}\n\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps; // Note: This intentionally doesn't check if we're hydrating because comparing\n // to the current tree provider fiber is just as fast and less error-prone.\n // Ideally we would have a special version of the work loop only\n // for hydration.\n\n popTreeContext(workInProgress);\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n case LazyComponent:\n case SimpleMemoComponent:\n case FunctionComponent:\n case ForwardRef:\n case Fragment:\n case Mode:\n case Profiler:\n case ContextConsumer:\n case MemoComponent:\n bubbleProperties(workInProgress);\n return null;\n\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n popContext(workInProgress);\n }\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n case HostRoot:\n {\n var fiberRoot = workInProgress.stateNode;\n\n {\n var previousCache = null;\n\n if (current !== null) {\n previousCache = current.memoizedState.cache;\n }\n\n var cache = workInProgress.memoizedState.cache;\n\n if (cache !== previousCache) {\n // Run passive effects to retain/release the cache.\n workInProgress.flags |= Passive$1;\n }\n\n popCacheProvider(workInProgress);\n }\n popHostContainer(workInProgress);\n popTopLevelContextObject(workInProgress);\n\n if (fiberRoot.pendingContext) {\n fiberRoot.context = fiberRoot.pendingContext;\n fiberRoot.pendingContext = null;\n }\n\n if (current === null || current.child === null) {\n // If we hydrated, pop so that we can delete any remaining children\n // that weren't hydrated.\n var wasHydrated = popHydrationState(workInProgress);\n\n if (wasHydrated) {\n // If we hydrated, then we'll need to schedule an update for\n // the commit side-effects on the root.\n markUpdate(workInProgress);\n } else {\n if (current !== null) {\n var prevState = current.memoizedState;\n\n if ( // Check if this is a client root\n !prevState.isDehydrated || // Check if we reverted to client rendering (e.g. due to an error)\n (workInProgress.flags & ForceClientRender) !== NoFlags$1) {\n // Schedule an effect to clear this container at the start of the\n // next commit. This handles the case of React rendering into a\n // container with previous children. It's also safe to do for\n // updates too, because current.child would only be null if the\n // previous render was null (so the container would already\n // be empty).\n workInProgress.flags |= Snapshot; // If this was a forced client render, there may have been\n // recoverable errors during first hydration attempt. If so, add\n // them to a queue so we can log them in the commit phase.\n\n upgradeHydrationErrorsToRecoverable();\n }\n }\n }\n }\n bubbleProperties(workInProgress);\n\n return null;\n }\n\n case HostHoistable:\n {\n {\n var nextResource = workInProgress.memoizedState;\n\n if (current === null) {\n // We are mounting and must Update this Hoistable in this commit\n // @TODO refactor this block to create the instance here in complete\n // phase if we are not hydrating.\n markUpdate(workInProgress);\n\n if (workInProgress.ref !== null) {\n markRef(workInProgress);\n }\n\n if (nextResource !== null) {\n // This is a Hoistable Resource\n // This must come at the very end of the complete phase.\n bubbleProperties(workInProgress);\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource);\n return null;\n } else {\n // This is a Hoistable Instance\n // This must come at the very end of the complete phase.\n bubbleProperties(workInProgress);\n preloadInstanceAndSuspendIfNeeded(workInProgress);\n return null;\n }\n } else {\n // We are updating.\n var currentResource = current.memoizedState;\n\n if (nextResource !== currentResource) {\n // We are transitioning to, from, or between Hoistable Resources\n // and require an update\n markUpdate(workInProgress);\n }\n\n if (current.ref !== workInProgress.ref) {\n markRef(workInProgress);\n }\n\n if (nextResource !== null) {\n // This is a Hoistable Resource\n // This must come at the very end of the complete phase.\n bubbleProperties(workInProgress);\n\n if (nextResource === currentResource) {\n workInProgress.flags &= ~MaySuspendCommit;\n } else {\n preloadResourceAndSuspendIfNeeded(workInProgress, nextResource);\n }\n\n return null;\n } else {\n // This is a Hoistable Instance\n // We may have props to update on the Hoistable instance.\n {\n var oldProps = current.memoizedProps;\n\n if (oldProps !== newProps) {\n markUpdate(workInProgress);\n }\n } // This must come at the very end of the complete phase.\n\n\n bubbleProperties(workInProgress);\n preloadInstanceAndSuspendIfNeeded(workInProgress);\n return null;\n }\n }\n } // Fall through\n\n }\n\n case HostSingleton:\n {\n {\n popHostContext(workInProgress);\n var rootContainerInstance = getRootHostContainer();\n var _type = workInProgress.type;\n\n if (current !== null && workInProgress.stateNode != null) {\n {\n var _oldProps2 = current.memoizedProps;\n\n if (_oldProps2 !== newProps) {\n markUpdate(workInProgress);\n }\n }\n\n if (current.ref !== workInProgress.ref) {\n markRef(workInProgress);\n }\n } else {\n if (!newProps) {\n if (workInProgress.stateNode === null) {\n throw new Error('We must have new props for new mounts. This error is likely ' + 'caused by a bug in React. Please file an issue.');\n } // This can happen when we abort work.\n\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n var currentHostContext = getHostContext();\n\n var _wasHydrated = popHydrationState(workInProgress);\n\n var instance;\n\n if (_wasHydrated) {\n // We ignore the boolean indicating there is an updateQueue because\n // it is used only to set text children and HostSingletons do not\n // use them.\n prepareToHydrateHostInstance(workInProgress, currentHostContext);\n instance = workInProgress.stateNode;\n } else {\n instance = resolveSingletonInstance(_type, newProps, rootContainerInstance, currentHostContext, true);\n workInProgress.stateNode = instance;\n markUpdate(workInProgress);\n }\n\n if (workInProgress.ref !== null) {\n // If there is a ref on a host node we need to schedule a callback\n markRef(workInProgress);\n }\n }\n\n bubbleProperties(workInProgress);\n return null;\n } // Fall through\n\n }\n\n case HostComponent:\n {\n popHostContext(workInProgress);\n var _type2 = workInProgress.type;\n\n if (current !== null && workInProgress.stateNode != null) {\n updateHostComponent(current, workInProgress, _type2, newProps);\n\n if (current.ref !== workInProgress.ref) {\n markRef(workInProgress);\n }\n } else {\n if (!newProps) {\n if (workInProgress.stateNode === null) {\n throw new Error('We must have new props for new mounts. This error is likely ' + 'caused by a bug in React. Please file an issue.');\n } // This can happen when we abort work.\n\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n var _currentHostContext = getHostContext(); // TODO: Move createInstance to beginWork and keep it on a context\n // \"stack\" as the parent. Then append children as we go in beginWork\n // or completeWork depending on whether we want to add them top->down or\n // bottom->up. Top->down is faster in IE11.\n\n\n var _wasHydrated2 = popHydrationState(workInProgress);\n\n if (_wasHydrated2) {\n // TODO: Move this and createInstance step into the beginPhase\n // to consolidate.\n prepareToHydrateHostInstance(workInProgress, _currentHostContext);\n } else {\n var _rootContainerInstance = getRootHostContainer();\n\n var _instance3 = createInstance(_type2, newProps, _rootContainerInstance, _currentHostContext, workInProgress); // TODO: For persistent renderers, we should pass children as part\n // of the initial instance creation\n\n\n appendAllChildren(_instance3, workInProgress);\n workInProgress.stateNode = _instance3; // Certain renderers require commit-time effects for initial mount.\n // (eg DOM renderer supports auto-focus for certain elements).\n // Make sure such renderers get scheduled for later work.\n\n if (finalizeInitialChildren(_instance3, _type2, newProps)) {\n markUpdate(workInProgress);\n }\n }\n\n if (workInProgress.ref !== null) {\n // If there is a ref on a host node we need to schedule a callback\n markRef(workInProgress);\n }\n }\n\n bubbleProperties(workInProgress); // This must come at the very end of the complete phase, because it might\n // throw to suspend, and if the resource immediately loads, the work loop\n // will resume rendering as if the work-in-progress completed. So it must\n // fully complete.\n\n preloadInstanceAndSuspendIfNeeded(workInProgress);\n return null;\n }\n\n case HostText:\n {\n var newText = newProps;\n\n if (current && workInProgress.stateNode != null) {\n var oldText = current.memoizedProps; // If we have an alternate, that means this is an update and we need\n // to schedule a side-effect to do the updates.\n\n updateHostText(current, workInProgress, oldText, newText);\n } else {\n if (typeof newText !== 'string') {\n if (workInProgress.stateNode === null) {\n throw new Error('We must have new props for new mounts. This error is likely ' + 'caused by a bug in React. Please file an issue.');\n } // This can happen when we abort work.\n\n }\n\n var _rootContainerInstance2 = getRootHostContainer();\n\n var _currentHostContext2 = getHostContext();\n\n var _wasHydrated3 = popHydrationState(workInProgress);\n\n if (_wasHydrated3) {\n if (prepareToHydrateHostTextInstance(workInProgress)) {\n markUpdate(workInProgress);\n }\n } else {\n workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance2, _currentHostContext2, workInProgress);\n }\n }\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n case SuspenseComponent:\n {\n popSuspenseHandler(workInProgress);\n var nextState = workInProgress.memoizedState; // Special path for dehydrated boundaries. We may eventually move this\n // to its own fiber type so that we can add other kinds of hydration\n // boundaries that aren't associated with a Suspense tree. In anticipation\n // of such a refactor, all the hydration logic is contained in\n // this branch.\n\n if (current === null || current.memoizedState !== null && current.memoizedState.dehydrated !== null) {\n var fallthroughToNormalSuspensePath = completeDehydratedSuspenseBoundary(current, workInProgress, nextState);\n\n if (!fallthroughToNormalSuspensePath) {\n if (workInProgress.flags & ForceClientRender) {\n // Special case. There were remaining unhydrated nodes. We treat\n // this as a mismatch. Revert to client rendering.\n return workInProgress;\n } else {\n // Did not finish hydrating, either because this is the initial\n // render or because something suspended.\n return null;\n }\n } // Continue with the normal Suspense path.\n\n }\n\n if ((workInProgress.flags & DidCapture) !== NoFlags$1) {\n // Something suspended. Re-render with the fallback children.\n workInProgress.lanes = renderLanes; // Do not reset the effect list.\n\n if ((workInProgress.mode & ProfileMode) !== NoMode) {\n transferActualDuration(workInProgress);\n } // Don't bubble properties in this case.\n\n\n return workInProgress;\n }\n\n var nextDidTimeout = nextState !== null;\n var prevDidTimeout = current !== null && current.memoizedState !== null;\n\n if (nextDidTimeout) {\n var offscreenFiber = workInProgress.child;\n var _previousCache = null;\n\n if (offscreenFiber.alternate !== null && offscreenFiber.alternate.memoizedState !== null && offscreenFiber.alternate.memoizedState.cachePool !== null) {\n _previousCache = offscreenFiber.alternate.memoizedState.cachePool.pool;\n }\n\n var _cache = null;\n\n if (offscreenFiber.memoizedState !== null && offscreenFiber.memoizedState.cachePool !== null) {\n _cache = offscreenFiber.memoizedState.cachePool.pool;\n }\n\n if (_cache !== _previousCache) {\n // Run passive effects to retain/release the cache.\n offscreenFiber.flags |= Passive$1;\n }\n } // If the suspended state of the boundary changes, we need to schedule\n // a passive effect, which is when we process the transitions\n\n\n if (nextDidTimeout !== prevDidTimeout) {\n // an effect to toggle the subtree's visibility. When we switch from\n // fallback -> primary, the inner Offscreen fiber schedules this effect\n // as part of its normal complete phase. But when we switch from\n // primary -> fallback, the inner Offscreen fiber does not have a complete\n // phase. So we need to schedule its effect here.\n //\n // We also use this flag to connect/disconnect the effects, but the same\n // logic applies: when re-connecting, the Offscreen fiber's complete\n // phase will handle scheduling the effect. It's only when the fallback\n // is active that we have to do anything special.\n\n\n if (nextDidTimeout) {\n var _offscreenFiber2 = workInProgress.child;\n _offscreenFiber2.flags |= Visibility;\n }\n }\n\n var retryQueue = workInProgress.updateQueue;\n scheduleRetryEffect(workInProgress, retryQueue);\n\n bubbleProperties(workInProgress);\n\n {\n if ((workInProgress.mode & ProfileMode) !== NoMode) {\n if (nextDidTimeout) {\n // Don't count time spent in a timed out Suspense subtree as part of the base duration.\n var primaryChildFragment = workInProgress.child;\n\n if (primaryChildFragment !== null) {\n // $FlowFixMe[unsafe-arithmetic] Flow doesn't support type casting in combination with the -= operator\n workInProgress.treeBaseDuration -= primaryChildFragment.treeBaseDuration;\n }\n }\n }\n }\n\n return null;\n }\n\n case HostPortal:\n popHostContainer(workInProgress);\n\n if (current === null) {\n preparePortalMount(workInProgress.stateNode.containerInfo);\n }\n\n bubbleProperties(workInProgress);\n return null;\n\n case ContextProvider:\n // Pop provider fiber\n var context = workInProgress.type._context;\n popProvider(context, workInProgress);\n bubbleProperties(workInProgress);\n return null;\n\n case IncompleteClassComponent:\n {\n // Same as class component case. I put it down here so that the tags are\n // sequential to ensure this switch is compiled to a jump table.\n var _Component = workInProgress.type;\n\n if (isContextProvider(_Component)) {\n popContext(workInProgress);\n }\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n case SuspenseListComponent:\n {\n popSuspenseListContext(workInProgress);\n var renderState = workInProgress.memoizedState;\n\n if (renderState === null) {\n // We're running in the default, \"independent\" mode.\n // We don't do anything in this mode.\n bubbleProperties(workInProgress);\n return null;\n }\n\n var didSuspendAlready = (workInProgress.flags & DidCapture) !== NoFlags$1;\n var renderedTail = renderState.rendering;\n\n if (renderedTail === null) {\n // We just rendered the head.\n if (!didSuspendAlready) {\n // This is the first pass. We need to figure out if anything is still\n // suspended in the rendered set.\n // If new content unsuspended, but there's still some content that\n // didn't. Then we need to do a second pass that forces everything\n // to keep showing their fallbacks.\n // We might be suspended if something in this render pass suspended, or\n // something in the previous committed pass suspended. Otherwise,\n // there's no chance so we can skip the expensive call to\n // findFirstSuspended.\n var cannotBeSuspended = renderHasNotSuspendedYet() && (current === null || (current.flags & DidCapture) === NoFlags$1);\n\n if (!cannotBeSuspended) {\n var row = workInProgress.child;\n\n while (row !== null) {\n var suspended = findFirstSuspended(row);\n\n if (suspended !== null) {\n didSuspendAlready = true;\n workInProgress.flags |= DidCapture;\n cutOffTailIfNeeded(renderState, false); // If this is a newly suspended tree, it might not get committed as\n // part of the second pass. In that case nothing will subscribe to\n // its thenables. Instead, we'll transfer its thenables to the\n // SuspenseList so that it can retry if they resolve.\n // There might be multiple of these in the list but since we're\n // going to wait for all of them anyway, it doesn't really matter\n // which ones gets to ping. In theory we could get clever and keep\n // track of how many dependencies remain but it gets tricky because\n // in the meantime, we can add/remove/change items and dependencies.\n // We might bail out of the loop before finding any but that\n // doesn't matter since that means that the other boundaries that\n // we did find already has their listeners attached.\n\n var _retryQueue = suspended.updateQueue;\n workInProgress.updateQueue = _retryQueue;\n scheduleRetryEffect(workInProgress, _retryQueue); // Rerender the whole list, but this time, we'll force fallbacks\n // to stay in place.\n // Reset the effect flags before doing the second pass since that's now invalid.\n // Reset the child fibers to their original state.\n\n workInProgress.subtreeFlags = NoFlags$1;\n resetChildFibers(workInProgress, renderLanes); // Set up the Suspense List Context to force suspense and\n // immediately rerender the children.\n\n pushSuspenseListContext(workInProgress, setShallowSuspenseListContext(suspenseStackCursor.current, ForceSuspenseFallback)); // Don't bubble properties in this case.\n\n return workInProgress.child;\n }\n\n row = row.sibling;\n }\n }\n\n if (renderState.tail !== null && now$1() > getRenderTargetTime()) {\n // We have already passed our CPU deadline but we still have rows\n // left in the tail. We'll just give up further attempts to render\n // the main content and only render fallbacks.\n workInProgress.flags |= DidCapture;\n didSuspendAlready = true;\n cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this\n // to get it started back up to attempt the next item. While in terms\n // of priority this work has the same priority as this current render,\n // it's not part of the same transition once the transition has\n // committed. If it's sync, we still want to yield so that it can be\n // painted. Conceptually, this is really the same as pinging.\n // We can use any RetryLane even if it's the one currently rendering\n // since we're leaving it behind on this node.\n\n workInProgress.lanes = SomeRetryLane;\n }\n } else {\n cutOffTailIfNeeded(renderState, false);\n } // Next we're going to render the tail.\n\n } else {\n // Append the rendered row to the child list.\n if (!didSuspendAlready) {\n var _suspended = findFirstSuspended(renderedTail);\n\n if (_suspended !== null) {\n workInProgress.flags |= DidCapture;\n didSuspendAlready = true; // Ensure we transfer the update queue to the parent so that it doesn't\n // get lost if this row ends up dropped during a second pass.\n\n var _retryQueue2 = _suspended.updateQueue;\n workInProgress.updateQueue = _retryQueue2;\n scheduleRetryEffect(workInProgress, _retryQueue2);\n cutOffTailIfNeeded(renderState, true); // This might have been modified.\n\n if (renderState.tail === null && renderState.tailMode === 'hidden' && !renderedTail.alternate && !getIsHydrating() // We don't cut it if we're hydrating.\n ) {\n // We're done.\n bubbleProperties(workInProgress);\n return null;\n }\n } else if ( // The time it took to render last row is greater than the remaining\n // time we have to render. So rendering one more row would likely\n // exceed it.\n now$1() * 2 - renderState.renderingStartTime > getRenderTargetTime() && renderLanes !== OffscreenLane) {\n // We have now passed our CPU deadline and we'll just give up further\n // attempts to render the main content and only render fallbacks.\n // The assumption is that this is usually faster.\n workInProgress.flags |= DidCapture;\n didSuspendAlready = true;\n cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this\n // to get it started back up to attempt the next item. While in terms\n // of priority this work has the same priority as this current render,\n // it's not part of the same transition once the transition has\n // committed. If it's sync, we still want to yield so that it can be\n // painted. Conceptually, this is really the same as pinging.\n // We can use any RetryLane even if it's the one currently rendering\n // since we're leaving it behind on this node.\n\n workInProgress.lanes = SomeRetryLane;\n }\n }\n\n if (renderState.isBackwards) {\n // The effect list of the backwards tail will have been added\n // to the end. This breaks the guarantee that life-cycles fire in\n // sibling order but that isn't a strong guarantee promised by React.\n // Especially since these might also just pop in during future commits.\n // Append to the beginning of the list.\n renderedTail.sibling = workInProgress.child;\n workInProgress.child = renderedTail;\n } else {\n var previousSibling = renderState.last;\n\n if (previousSibling !== null) {\n previousSibling.sibling = renderedTail;\n } else {\n workInProgress.child = renderedTail;\n }\n\n renderState.last = renderedTail;\n }\n }\n\n if (renderState.tail !== null) {\n // We still have tail rows to render.\n // Pop a row.\n var next = renderState.tail;\n renderState.rendering = next;\n renderState.tail = next.sibling;\n renderState.renderingStartTime = now$1();\n next.sibling = null; // Restore the context.\n // TODO: We can probably just avoid popping it instead and only\n // setting it the first time we go from not suspended to suspended.\n\n var suspenseContext = suspenseStackCursor.current;\n\n if (didSuspendAlready) {\n suspenseContext = setShallowSuspenseListContext(suspenseContext, ForceSuspenseFallback);\n } else {\n suspenseContext = setDefaultShallowSuspenseListContext(suspenseContext);\n }\n\n pushSuspenseListContext(workInProgress, suspenseContext); // Do a pass over the next row.\n // Don't bubble properties in this case.\n\n return next;\n }\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n case ScopeComponent:\n {\n\n break;\n }\n\n case OffscreenComponent:\n case LegacyHiddenComponent:\n {\n popSuspenseHandler(workInProgress);\n popHiddenContext(workInProgress);\n var _nextState = workInProgress.memoizedState;\n var nextIsHidden = _nextState !== null; // Schedule a Visibility effect if the visibility has changed\n\n {\n if (current !== null) {\n var _prevState = current.memoizedState;\n var prevIsHidden = _prevState !== null;\n\n if (prevIsHidden !== nextIsHidden) {\n workInProgress.flags |= Visibility;\n }\n } else {\n // On initial mount, we only need a Visibility effect if the tree\n // is hidden.\n if (nextIsHidden) {\n workInProgress.flags |= Visibility;\n }\n }\n }\n\n if (!nextIsHidden || (workInProgress.mode & ConcurrentMode) === NoMode) {\n bubbleProperties(workInProgress);\n } else {\n // Don't bubble properties for hidden children unless we're rendering\n // at offscreen priority.\n if (includesSomeLane(renderLanes, OffscreenLane) && // Also don't bubble if the tree suspended\n (workInProgress.flags & DidCapture) === NoLanes) {\n bubbleProperties(workInProgress); // Check if there was an insertion or update in the hidden subtree.\n // If so, we need to hide those nodes in the commit phase, so\n // schedule a visibility effect.\n\n if (workInProgress.subtreeFlags & (Placement | Update)) {\n workInProgress.flags |= Visibility;\n }\n }\n }\n\n var offscreenQueue = workInProgress.updateQueue;\n\n if (offscreenQueue !== null) {\n var _retryQueue3 = offscreenQueue.retryQueue;\n scheduleRetryEffect(workInProgress, _retryQueue3);\n }\n\n {\n var _previousCache2 = null;\n\n if (current !== null && current.memoizedState !== null && current.memoizedState.cachePool !== null) {\n _previousCache2 = current.memoizedState.cachePool.pool;\n }\n\n var _cache2 = null;\n\n if (workInProgress.memoizedState !== null && workInProgress.memoizedState.cachePool !== null) {\n _cache2 = workInProgress.memoizedState.cachePool.pool;\n }\n\n if (_cache2 !== _previousCache2) {\n // Run passive effects to retain/release the cache.\n workInProgress.flags |= Passive$1;\n }\n }\n\n popTransition(workInProgress, current);\n return null;\n }\n\n case CacheComponent:\n {\n {\n var _previousCache3 = null;\n\n if (current !== null) {\n _previousCache3 = current.memoizedState.cache;\n }\n\n var _cache3 = workInProgress.memoizedState.cache;\n\n if (_cache3 !== _previousCache3) {\n // Run passive effects to retain/release the cache.\n workInProgress.flags |= Passive$1;\n }\n\n popCacheProvider(workInProgress);\n bubbleProperties(workInProgress);\n }\n\n return null;\n }\n\n case TracingMarkerComponent:\n {\n\n return null;\n }\n }\n\n throw new Error(\"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in \" + 'React. Please file an issue.');\n}\n\nfunction unwindWork(current, workInProgress, renderLanes) {\n // Note: This intentionally doesn't check if we're hydrating because comparing\n // to the current tree provider fiber is just as fast and less error-prone.\n // Ideally we would have a special version of the work loop only\n // for hydration.\n popTreeContext(workInProgress);\n\n switch (workInProgress.tag) {\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n popContext(workInProgress);\n }\n\n var flags = workInProgress.flags;\n\n if (flags & ShouldCapture) {\n workInProgress.flags = flags & ~ShouldCapture | DidCapture;\n\n if ((workInProgress.mode & ProfileMode) !== NoMode) {\n transferActualDuration(workInProgress);\n }\n\n return workInProgress;\n }\n\n return null;\n }\n\n case HostRoot:\n {\n\n {\n popCacheProvider(workInProgress);\n }\n popHostContainer(workInProgress);\n popTopLevelContextObject(workInProgress);\n var _flags = workInProgress.flags;\n\n if ((_flags & ShouldCapture) !== NoFlags$1 && (_flags & DidCapture) === NoFlags$1) {\n // There was an error during render that wasn't captured by a suspense\n // boundary. Do a second pass on the root to unmount the children.\n workInProgress.flags = _flags & ~ShouldCapture | DidCapture;\n return workInProgress;\n } // We unwound to the root without completing it. Exit.\n\n\n return null;\n }\n\n case HostHoistable:\n case HostSingleton:\n case HostComponent:\n {\n // TODO: popHydrationState\n popHostContext(workInProgress);\n return null;\n }\n\n case SuspenseComponent:\n {\n popSuspenseHandler(workInProgress);\n var suspenseState = workInProgress.memoizedState;\n\n if (suspenseState !== null && suspenseState.dehydrated !== null) {\n if (workInProgress.alternate === null) {\n throw new Error('Threw in newly mounted dehydrated component. This is likely a bug in ' + 'React. Please file an issue.');\n }\n\n resetHydrationState();\n }\n\n var _flags2 = workInProgress.flags;\n\n if (_flags2 & ShouldCapture) {\n workInProgress.flags = _flags2 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary.\n\n if ((workInProgress.mode & ProfileMode) !== NoMode) {\n transferActualDuration(workInProgress);\n }\n\n return workInProgress;\n }\n\n return null;\n }\n\n case SuspenseListComponent:\n {\n popSuspenseListContext(workInProgress); // SuspenseList doesn't actually catch anything. It should've been\n // caught by a nested boundary. If not, it should bubble through.\n\n return null;\n }\n\n case HostPortal:\n popHostContainer(workInProgress);\n return null;\n\n case ContextProvider:\n var context = workInProgress.type._context;\n popProvider(context, workInProgress);\n return null;\n\n case OffscreenComponent:\n case LegacyHiddenComponent:\n {\n popSuspenseHandler(workInProgress);\n popHiddenContext(workInProgress);\n popTransition(workInProgress, current);\n var _flags3 = workInProgress.flags;\n\n if (_flags3 & ShouldCapture) {\n workInProgress.flags = _flags3 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary.\n\n if ((workInProgress.mode & ProfileMode) !== NoMode) {\n transferActualDuration(workInProgress);\n }\n\n return workInProgress;\n }\n\n return null;\n }\n\n case CacheComponent:\n {\n popCacheProvider(workInProgress);\n }\n\n return null;\n\n case TracingMarkerComponent:\n\n return null;\n\n default:\n return null;\n }\n}\n\nfunction unwindInterruptedWork(current, interruptedWork, renderLanes) {\n // Note: This intentionally doesn't check if we're hydrating because comparing\n // to the current tree provider fiber is just as fast and less error-prone.\n // Ideally we would have a special version of the work loop only\n // for hydration.\n popTreeContext(interruptedWork);\n\n switch (interruptedWork.tag) {\n case ClassComponent:\n {\n var childContextTypes = interruptedWork.type.childContextTypes;\n\n if (childContextTypes !== null && childContextTypes !== undefined) {\n popContext(interruptedWork);\n }\n\n break;\n }\n\n case HostRoot:\n {\n\n {\n popCacheProvider(interruptedWork);\n }\n popHostContainer(interruptedWork);\n popTopLevelContextObject(interruptedWork);\n break;\n }\n\n case HostHoistable:\n case HostSingleton:\n case HostComponent:\n {\n popHostContext(interruptedWork);\n break;\n }\n\n case HostPortal:\n popHostContainer(interruptedWork);\n break;\n\n case SuspenseComponent:\n popSuspenseHandler(interruptedWork);\n break;\n\n case SuspenseListComponent:\n popSuspenseListContext(interruptedWork);\n break;\n\n case ContextProvider:\n var context = interruptedWork.type._context;\n popProvider(context, interruptedWork);\n break;\n\n case OffscreenComponent:\n case LegacyHiddenComponent:\n popSuspenseHandler(interruptedWork);\n popHiddenContext(interruptedWork);\n popTransition(interruptedWork, current);\n break;\n\n case CacheComponent:\n {\n popCacheProvider(interruptedWork);\n }\n\n break;\n }\n}\n\nvar fakeNode = null;\n\n{\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && // $FlowFixMe[method-unbinding]\n typeof document.createEvent === 'function') {\n fakeNode = document.createElement('react');\n }\n}\n\nfunction invokeGuardedCallbackImpl(name, func, context) {\n {\n // In DEV mode, we use a special version\n // that plays more nicely with the browser's DevTools. The idea is to preserve\n // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n // functions in invokeGuardedCallback, and the production version of\n // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n // like caught exceptions, and the DevTools won't pause unless the developer\n // takes the extra step of enabling pause on caught exceptions. This is\n // unintuitive, though, because even though React has caught the error, from\n // the developer's perspective, the error is uncaught.\n //\n // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n // DOM node, and call the user-provided callback from inside an event handler\n // for that fake event. If the callback throws, the error is \"captured\" using\n // event loop context, it does not interrupt the normal program flow.\n // Effectively, this gives us try-catch behavior without actually using\n // try-catch. Neat!\n // fakeNode signifies we are in an environment with a document and window object\n if (fakeNode) {\n var evt = document.createEvent('Event');\n var didCall = false; // Keeps track of whether the user-provided callback threw an error. We\n // set this to true at the beginning, then set it to false right after\n // calling the function. If the function errors, `didError` will never be\n // set to false. This strategy works even if the browser is flaky and\n // fails to call our global error handler, because it doesn't rely on\n // the error event at all.\n\n var didError = true; // Keeps track of the value of window.event so that we can reset it\n // during the callback to let user code access window.event in the\n // browsers that support it.\n\n var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event\n // dispatching: https://github.com/facebook/react/issues/13688\n\n var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event');\n\n var restoreAfterDispatch = function () {\n // We immediately remove the callback from event listeners so that\n // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n // nested call would trigger the fake event handlers of any call higher\n // in the stack.\n fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the\n // window.event assignment in both IE <= 10 as they throw an error\n // \"Member not found\" in strict mode, and in Firefox which does not\n // support window.event.\n\n if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {\n window.event = windowEvent;\n }\n }; // Create an event handler for our fake event. We will synchronously\n // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n // call the user-provided callback.\n // $FlowFixMe[method-unbinding]\n\n\n var _funcArgs = Array.prototype.slice.call(arguments, 3);\n\n var callCallback = function () {\n didCall = true;\n restoreAfterDispatch(); // $FlowFixMe[incompatible-call] Flow doesn't understand the arguments splicing.\n\n func.apply(context, _funcArgs);\n didError = false;\n }; // Create a global error event handler. We use this to capture the value\n // that was thrown. It's possible that this error handler will fire more\n // than once; for example, if non-React code also calls `dispatchEvent`\n // and a handler for that event throws. We should be resilient to most of\n // those cases. Even if our error event handler fires more than once, the\n // last error event is always used. If the callback actually does error,\n // we know that the last error event is the correct one, because it's not\n // possible for anything else to have happened in between our callback\n // erroring and the code that follows the `dispatchEvent` call below. If\n // the callback doesn't error, but the error event was fired, we know to\n // ignore it because `didError` will be false, as described above.\n\n\n var error; // Use this to track whether the error event is ever called.\n\n var didSetError = false;\n var isCrossOriginError = false;\n\n var handleWindowError = function (event) {\n error = event.error;\n didSetError = true;\n\n if (error === null && event.colno === 0 && event.lineno === 0) {\n isCrossOriginError = true;\n }\n\n if (event.defaultPrevented) {\n // Some other error handler has prevented default.\n // Browsers silence the error report if this happens.\n // We'll remember this to later decide whether to log it or not.\n if (error != null && typeof error === 'object') {\n try {\n error._suppressLogging = true;\n } catch (inner) {// Ignore.\n }\n }\n }\n }; // Create a fake event type.\n\n\n var evtType = \"react-\" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers\n\n window.addEventListener('error', handleWindowError);\n fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function\n // errors, it will trigger our global error handler.\n\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n\n if (windowEventDescriptor) {\n Object.defineProperty(window, 'event', windowEventDescriptor);\n }\n\n if (didCall && didError) {\n if (!didSetError) {\n // The callback errored, but the error event never fired.\n // eslint-disable-next-line react-internal/prod-error-codes\n error = new Error('An error was thrown inside one of your components, but React ' + \"doesn't know what it was. This is likely due to browser \" + 'flakiness. React does its best to preserve the \"Pause on ' + 'exceptions\" behavior of the DevTools, which requires some ' + \"DEV-mode only tricks. It's possible that these don't work in \" + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');\n } else if (isCrossOriginError) {\n // eslint-disable-next-line react-internal/prod-error-codes\n error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://reactjs.org/link/crossorigin-error for more information.');\n }\n\n this.onError(error);\n } // Remove our event listeners\n\n\n window.removeEventListener('error', handleWindowError);\n\n if (didCall) {\n return;\n } else {\n // Something went really wrong, and our event was not dispatched.\n // https://github.com/facebook/react/issues/16734\n // https://github.com/facebook/react/issues/16585\n // Fall back to the production implementation.\n restoreAfterDispatch(); // we fall through and call the prod version instead\n }\n } // We only get here if we are in an environment that either does not support the browser\n // variant or we had trouble getting the browser to emit the error.\n // $FlowFixMe[method-unbinding]\n\n\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n try {\n // $FlowFixMe[incompatible-call] Flow doesn't understand the arguments splicing.\n func.apply(context, funcArgs);\n } catch (error) {\n this.onError(error);\n }\n }\n}\n\nvar hasError = false;\nvar caughtError = null; // Used by event system to capture/rethrow the first error.\n\nvar hasRethrowError = false;\nvar rethrowError = null;\nvar reporter = {\n onError: function (error) {\n hasError = true;\n caughtError = error;\n }\n};\n/**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n hasError = false;\n caughtError = null;\n invokeGuardedCallbackImpl.apply(reporter, arguments);\n}\n/**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if caughtError and rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {\n invokeGuardedCallback.apply(this, arguments);\n\n if (hasError) {\n var error = clearCaughtError();\n\n if (!hasRethrowError) {\n hasRethrowError = true;\n rethrowError = error;\n }\n }\n}\n/**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n\nfunction rethrowCaughtError() {\n if (hasRethrowError) {\n var error = rethrowError;\n hasRethrowError = false;\n rethrowError = null;\n throw error;\n }\n}\nfunction hasCaughtError() {\n return hasError;\n}\nfunction clearCaughtError() {\n if (hasError) {\n var error = caughtError;\n hasError = false;\n caughtError = null;\n return error;\n } else {\n throw new Error('clearCaughtError was called but no error was captured. This error ' + 'is likely caused by a bug in React. Please file an issue.');\n }\n}\n\nvar didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n\n{\n didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n} // Used during the commit phase to track the state of the Offscreen component stack.\n// Allows us to avoid traversing the return path to find the nearest Offscreen ancestor.\n\n\nvar offscreenSubtreeIsHidden = false;\nvar offscreenSubtreeWasHidden = false;\nvar PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;\nvar nextEffect = null; // Used for Profiling builds to track updaters.\n\nvar inProgressLanes = null;\nvar inProgressRoot = null;\n\nfunction shouldProfile(current) {\n return (current.mode & ProfileMode) !== NoMode && (getExecutionContext() & CommitContext) !== NoContext;\n}\n\nfunction reportUncaughtErrorInDEV(error) {\n // Wrapping each small part of the commit phase into a guarded\n // callback is a bit too slow (https://github.com/facebook/react/pull/21666).\n // But we rely on it to surface errors to DEV tools like overlays\n // (https://github.com/facebook/react/issues/21712).\n // As a compromise, rethrow only caught errors in a guard.\n {\n invokeGuardedCallback(null, function () {\n throw error;\n });\n clearCaughtError();\n }\n}\n\nfunction callComponentWillUnmountWithTimer(current, instance) {\n instance.props = current.memoizedProps;\n instance.state = current.memoizedState;\n\n if (shouldProfile(current)) {\n try {\n startLayoutEffectTimer();\n instance.componentWillUnmount();\n } finally {\n recordLayoutEffectDuration(current);\n }\n } else {\n instance.componentWillUnmount();\n }\n} // Capture errors so they don't interrupt unmounting.\n\n\nfunction safelyCallComponentWillUnmount(current, nearestMountedAncestor, instance) {\n try {\n callComponentWillUnmountWithTimer(current, instance);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n} // Capture errors so they don't interrupt mounting.\n\n\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n try {\n commitAttachRef(current);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\n\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref;\n var refCleanup = current.refCleanup;\n\n if (ref !== null) {\n if (typeof refCleanup === 'function') {\n try {\n if (shouldProfile(current)) {\n try {\n startLayoutEffectTimer();\n refCleanup();\n } finally {\n recordLayoutEffectDuration(current);\n }\n } else {\n refCleanup();\n }\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n } finally {\n // `refCleanup` has been called. Nullify all references to it to prevent double invocation.\n current.refCleanup = null;\n var finishedWork = current.alternate;\n\n if (finishedWork != null) {\n finishedWork.refCleanup = null;\n }\n }\n } else if (typeof ref === 'function') {\n var retVal;\n\n try {\n if (shouldProfile(current)) {\n try {\n startLayoutEffectTimer();\n retVal = ref(null);\n } finally {\n recordLayoutEffectDuration(current);\n }\n } else {\n retVal = ref(null);\n }\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n\n {\n if (typeof retVal === 'function') {\n error('Unexpected return value from a callback ref in %s. ' + 'A callback ref should not return a function.', getComponentNameFromFiber(current));\n }\n }\n } else {\n // $FlowFixMe[incompatible-use] unable to narrow type to RefObject\n ref.current = null;\n }\n }\n}\n\nfunction safelyCallDestroy(current, nearestMountedAncestor, destroy) {\n try {\n destroy();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\nvar shouldFireAfterActiveInstanceBlur = false;\nfunction commitBeforeMutationEffects(root, firstChild) {\n prepareForCommit();\n nextEffect = firstChild;\n commitBeforeMutationEffects_begin(); // We no longer need to track the active instance fiber\n\n var shouldFire = shouldFireAfterActiveInstanceBlur;\n shouldFireAfterActiveInstanceBlur = false;\n return shouldFire;\n}\n\nfunction commitBeforeMutationEffects_begin() {\n while (nextEffect !== null) {\n var fiber = nextEffect; // This phase is only used for beforeActiveInstanceBlur.\n\n var child = fiber.child;\n\n if ((fiber.subtreeFlags & BeforeMutationMask) !== NoFlags$1 && child !== null) {\n child.return = fiber;\n nextEffect = child;\n } else {\n commitBeforeMutationEffects_complete();\n }\n }\n}\n\nfunction commitBeforeMutationEffects_complete() {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n setCurrentFiber(fiber);\n\n try {\n commitBeforeMutationEffectsOnFiber(fiber);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n resetCurrentFiber();\n var sibling = fiber.sibling;\n\n if (sibling !== null) {\n sibling.return = fiber.return;\n nextEffect = sibling;\n return;\n }\n\n nextEffect = fiber.return;\n }\n}\n\nfunction commitBeforeMutationEffectsOnFiber(finishedWork) {\n var current = finishedWork.alternate;\n var flags = finishedWork.flags;\n\n if ((flags & Snapshot) !== NoFlags$1) {\n setCurrentFiber(finishedWork);\n }\n\n switch (finishedWork.tag) {\n case FunctionComponent:\n {\n\n break;\n }\n\n case ForwardRef:\n case SimpleMemoComponent:\n {\n break;\n }\n\n case ClassComponent:\n {\n if ((flags & Snapshot) !== NoFlags$1) {\n if (current !== null) {\n var prevProps = current.memoizedProps;\n var prevState = current.memoizedState;\n var instance = finishedWork.stateNode; // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n }\n }\n\n var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState);\n\n {\n var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate;\n\n if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) {\n didWarnSet.add(finishedWork.type);\n\n error('%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentNameFromFiber(finishedWork));\n }\n }\n\n instance.__reactInternalSnapshotBeforeUpdate = snapshot;\n }\n }\n\n break;\n }\n\n case HostRoot:\n {\n if ((flags & Snapshot) !== NoFlags$1) {\n {\n var root = finishedWork.stateNode;\n clearContainer(root.containerInfo);\n }\n }\n\n break;\n }\n\n case HostComponent:\n case HostHoistable:\n case HostSingleton:\n case HostText:\n case HostPortal:\n case IncompleteClassComponent:\n // Nothing to do for these component types\n break;\n\n default:\n {\n if ((flags & Snapshot) !== NoFlags$1) {\n throw new Error('This unit of work tag should not have side-effects. This error is ' + 'likely caused by a bug in React. Please file an issue.');\n }\n }\n }\n\n if ((flags & Snapshot) !== NoFlags$1) {\n resetCurrentFiber();\n }\n}\n\nfunction commitHookEffectListUnmount(flags, finishedWork, nearestMountedAncestor) {\n var updateQueue = finishedWork.updateQueue;\n var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n\n do {\n if ((effect.tag & flags) === flags) {\n // Unmount\n var inst = effect.inst;\n var destroy = inst.destroy;\n\n if (destroy !== undefined) {\n inst.destroy = undefined;\n\n {\n if ((flags & Passive) !== NoFlags) {\n markComponentPassiveEffectUnmountStarted(finishedWork);\n } else if ((flags & Layout) !== NoFlags) {\n markComponentLayoutEffectUnmountStarted(finishedWork);\n }\n }\n\n {\n if ((flags & Insertion) !== NoFlags) {\n setIsRunningInsertionEffect(true);\n }\n }\n\n safelyCallDestroy(finishedWork, nearestMountedAncestor, destroy);\n\n {\n if ((flags & Insertion) !== NoFlags) {\n setIsRunningInsertionEffect(false);\n }\n }\n\n {\n if ((flags & Passive) !== NoFlags) {\n markComponentPassiveEffectUnmountStopped();\n } else if ((flags & Layout) !== NoFlags) {\n markComponentLayoutEffectUnmountStopped();\n }\n }\n }\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n}\n\nfunction commitHookEffectListMount(flags, finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n\n do {\n if ((effect.tag & flags) === flags) {\n {\n if ((flags & Passive) !== NoFlags) {\n markComponentPassiveEffectMountStarted(finishedWork);\n } else if ((flags & Layout) !== NoFlags) {\n markComponentLayoutEffectMountStarted(finishedWork);\n }\n } // Mount\n\n\n var create = effect.create;\n\n {\n if ((flags & Insertion) !== NoFlags) {\n setIsRunningInsertionEffect(true);\n }\n }\n\n var inst = effect.inst;\n var destroy = create();\n inst.destroy = destroy;\n\n {\n if ((flags & Insertion) !== NoFlags) {\n setIsRunningInsertionEffect(false);\n }\n }\n\n {\n if ((flags & Passive) !== NoFlags) {\n markComponentPassiveEffectMountStopped();\n } else if ((flags & Layout) !== NoFlags) {\n markComponentLayoutEffectMountStopped();\n }\n }\n\n {\n if (destroy !== undefined && typeof destroy !== 'function') {\n var hookName = void 0;\n\n if ((effect.tag & Layout) !== NoFlags$1) {\n hookName = 'useLayoutEffect';\n } else if ((effect.tag & Insertion) !== NoFlags$1) {\n hookName = 'useInsertionEffect';\n } else {\n hookName = 'useEffect';\n }\n\n var addendum = void 0;\n\n if (destroy === null) {\n addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).';\n } else if (typeof destroy.then === 'function') {\n addendum = '\\n\\nIt looks like you wrote ' + hookName + '(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\\n\\n' + hookName + '(() => {\\n' + ' async function fetchData() {\\n' + ' // You can await here\\n' + ' const response = await MyAPI.getData(someId);\\n' + ' // ...\\n' + ' }\\n' + ' fetchData();\\n' + \"}, [someId]); // Or [] if effect doesn't need props or state\\n\\n\" + 'Learn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching';\n } else {\n addendum = ' You returned: ' + destroy;\n }\n\n error('%s must not return anything besides a function, ' + 'which is used for clean-up.%s', hookName, addendum);\n }\n }\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n}\n\nfunction commitPassiveEffectDurations(finishedRoot, finishedWork) {\n if (getExecutionContext() & CommitContext) {\n // Only Profilers with work in their subtree will have an Update effect scheduled.\n if ((finishedWork.flags & Update) !== NoFlags$1) {\n switch (finishedWork.tag) {\n case Profiler:\n {\n var passiveEffectDuration = finishedWork.stateNode.passiveEffectDuration;\n var _finishedWork$memoize = finishedWork.memoizedProps,\n id = _finishedWork$memoize.id,\n onPostCommit = _finishedWork$memoize.onPostCommit; // This value will still reflect the previous commit phase.\n // It does not get reset until the start of the next commit phase.\n\n var commitTime = getCommitTime();\n var phase = finishedWork.alternate === null ? 'mount' : 'update';\n\n {\n if (isCurrentUpdateNested()) {\n phase = 'nested-update';\n }\n }\n\n if (typeof onPostCommit === 'function') {\n onPostCommit(id, phase, passiveEffectDuration, commitTime);\n } // Bubble times to the next nearest ancestor Profiler.\n // After we process that Profiler, we'll bubble further up.\n\n\n var parentFiber = finishedWork.return;\n\n outer: while (parentFiber !== null) {\n switch (parentFiber.tag) {\n case HostRoot:\n var root = parentFiber.stateNode;\n root.passiveEffectDuration += passiveEffectDuration;\n break outer;\n\n case Profiler:\n var parentStateNode = parentFiber.stateNode;\n parentStateNode.passiveEffectDuration += passiveEffectDuration;\n break outer;\n }\n\n parentFiber = parentFiber.return;\n }\n\n break;\n }\n }\n }\n }\n}\n\nfunction commitHookLayoutEffects(finishedWork, hookFlags) {\n // At this point layout effects have already been destroyed (during mutation phase).\n // This is done to prevent sibling component effects from interfering with each other,\n // e.g. a destroy function in one component should never override a ref set\n // by a create function in another component during the same commit.\n if (shouldProfile(finishedWork)) {\n try {\n startLayoutEffectTimer();\n commitHookEffectListMount(hookFlags, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n\n recordLayoutEffectDuration(finishedWork);\n } else {\n try {\n commitHookEffectListMount(hookFlags, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\n\nfunction commitClassLayoutLifecycles(finishedWork, current) {\n var instance = finishedWork.stateNode;\n\n if (current === null) {\n // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n }\n }\n\n if (shouldProfile(finishedWork)) {\n try {\n startLayoutEffectTimer();\n instance.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n\n recordLayoutEffectDuration(finishedWork);\n } else {\n try {\n instance.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n } else {\n var prevProps = finishedWork.elementType === finishedWork.type ? current.memoizedProps : resolveDefaultProps(finishedWork.type, current.memoizedProps);\n var prevState = current.memoizedState; // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n }\n }\n\n if (shouldProfile(finishedWork)) {\n try {\n startLayoutEffectTimer();\n instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n\n recordLayoutEffectDuration(finishedWork);\n } else {\n try {\n instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n}\n\nfunction commitClassCallbacks(finishedWork) {\n // TODO: I think this is now always non-null by the time it reaches the\n // commit phase. Consider removing the type check.\n var updateQueue = finishedWork.updateQueue;\n\n if (updateQueue !== null) {\n var instance = finishedWork.stateNode;\n\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n }\n } // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n\n try {\n commitCallbacks(updateQueue, instance);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\n\nfunction commitHostComponentMount(finishedWork) {\n var type = finishedWork.type;\n var props = finishedWork.memoizedProps;\n var instance = finishedWork.stateNode;\n\n try {\n commitMount(instance, type, props, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n}\n\nfunction commitProfilerUpdate(finishedWork, current) {\n if (getExecutionContext() & CommitContext) {\n try {\n var _finishedWork$memoize2 = finishedWork.memoizedProps,\n onCommit = _finishedWork$memoize2.onCommit,\n onRender = _finishedWork$memoize2.onRender;\n var effectDuration = finishedWork.stateNode.effectDuration;\n var commitTime = getCommitTime();\n var phase = current === null ? 'mount' : 'update';\n\n if (enableProfilerNestedUpdatePhase) {\n if (isCurrentUpdateNested()) {\n phase = 'nested-update';\n }\n }\n\n if (typeof onRender === 'function') {\n onRender(finishedWork.memoizedProps.id, phase, finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, commitTime);\n }\n\n if (enableProfilerCommitHooks) {\n if (typeof onCommit === 'function') {\n onCommit(finishedWork.memoizedProps.id, phase, effectDuration, commitTime);\n } // Schedule a passive effect for this Profiler to call onPostCommit hooks.\n // This effect should be scheduled even if there is no onPostCommit callback for this Profiler,\n // because the effect is also where times bubble to parent Profilers.\n\n\n enqueuePendingPassiveProfilerEffect(finishedWork); // Propagate layout effect durations to the next nearest Profiler ancestor.\n // Do not reset these values until the next render so DevTools has a chance to read them first.\n\n var parentFiber = finishedWork.return;\n\n outer: while (parentFiber !== null) {\n switch (parentFiber.tag) {\n case HostRoot:\n var root = parentFiber.stateNode;\n root.effectDuration += effectDuration;\n break outer;\n\n case Profiler:\n var parentStateNode = parentFiber.stateNode;\n parentStateNode.effectDuration += effectDuration;\n break outer;\n }\n\n parentFiber = parentFiber.return;\n }\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\n\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork, committedLanes) {\n // When updating this function, also update reappearLayoutEffects, which does\n // most of the same things when an offscreen tree goes from hidden -> visible.\n var flags = finishedWork.flags;\n\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n\n if (flags & Update) {\n commitHookLayoutEffects(finishedWork, Layout | HasEffect);\n }\n\n break;\n }\n\n case ClassComponent:\n {\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n\n if (flags & Update) {\n commitClassLayoutLifecycles(finishedWork, current);\n }\n\n if (flags & Callback) {\n commitClassCallbacks(finishedWork);\n }\n\n if (flags & Ref) {\n safelyAttachRef(finishedWork, finishedWork.return);\n }\n\n break;\n }\n\n case HostRoot:\n {\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n\n if (flags & Callback) {\n // TODO: I think this is now always non-null by the time it reaches the\n // commit phase. Consider removing the type check.\n var updateQueue = finishedWork.updateQueue;\n\n if (updateQueue !== null) {\n var instance = null;\n\n if (finishedWork.child !== null) {\n switch (finishedWork.child.tag) {\n case HostSingleton:\n case HostComponent:\n instance = getPublicInstance(finishedWork.child.stateNode);\n break;\n\n case ClassComponent:\n instance = finishedWork.child.stateNode;\n break;\n }\n }\n\n try {\n commitCallbacks(updateQueue, instance);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n\n break;\n }\n\n case HostHoistable:\n {\n {\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n\n if (flags & Ref) {\n safelyAttachRef(finishedWork, finishedWork.return);\n }\n\n break;\n } // Fall through\n\n }\n\n case HostSingleton:\n case HostComponent:\n {\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); // Renderers may schedule work to be done after host components are mounted\n // (eg DOM renderer may schedule auto-focus for inputs and form controls).\n // These effects should only be committed when components are first mounted,\n // aka when there is no current/alternate.\n\n if (current === null && flags & Update) {\n commitHostComponentMount(finishedWork);\n }\n\n if (flags & Ref) {\n safelyAttachRef(finishedWork, finishedWork.return);\n }\n\n break;\n }\n\n case Profiler:\n {\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); // TODO: Should this fire inside an offscreen tree? Or should it wait to\n // fire when the tree becomes visible again.\n\n if (flags & Update) {\n commitProfilerUpdate(finishedWork, current);\n }\n\n break;\n }\n\n case SuspenseComponent:\n {\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n\n if (flags & Update) {\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n }\n\n break;\n }\n\n case OffscreenComponent:\n {\n var isModernRoot = (finishedWork.mode & ConcurrentMode) !== NoMode;\n\n if (isModernRoot) {\n var isHidden = finishedWork.memoizedState !== null;\n var newOffscreenSubtreeIsHidden = isHidden || offscreenSubtreeIsHidden;\n\n if (newOffscreenSubtreeIsHidden) ; else {\n // The Offscreen tree is visible.\n var wasHidden = current !== null && current.memoizedState !== null;\n var newOffscreenSubtreeWasHidden = wasHidden || offscreenSubtreeWasHidden;\n var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden;\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden;\n offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden;\n\n if (offscreenSubtreeWasHidden && !prevOffscreenSubtreeWasHidden) {\n // This is the root of a reappearing boundary. As we continue\n // traversing the layout effects, we must also re-mount layout\n // effects that were unmounted when the Offscreen subtree was\n // hidden. So this is a superset of the normal commitLayoutEffects.\n var includeWorkInProgressEffects = (finishedWork.subtreeFlags & LayoutMask) !== NoFlags$1;\n recursivelyTraverseReappearLayoutEffects(finishedRoot, finishedWork, includeWorkInProgressEffects);\n } else {\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n }\n\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n }\n } else {\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n }\n\n if (flags & Ref) {\n var props = finishedWork.memoizedProps;\n\n if (props.mode === 'manual') {\n safelyAttachRef(finishedWork, finishedWork.return);\n } else {\n safelyDetachRef(finishedWork, finishedWork.return);\n }\n }\n\n break;\n }\n\n default:\n {\n recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n break;\n }\n }\n}\n\nfunction hideOrUnhideAllChildren(finishedWork, isHidden) {\n // Only hide or unhide the top-most host nodes.\n var hostSubtreeRoot = null;\n\n {\n // We only have the top Fiber that was inserted but we need to recurse down its\n // children to find all the terminal nodes.\n var node = finishedWork;\n\n while (true) {\n if (node.tag === HostComponent || (node.tag === HostHoistable ) || (node.tag === HostSingleton )) {\n if (hostSubtreeRoot === null) {\n hostSubtreeRoot = node;\n\n try {\n var instance = node.stateNode;\n\n if (isHidden) {\n hideInstance(instance);\n } else {\n unhideInstance(node.stateNode, node.memoizedProps);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n } else if (node.tag === HostText) {\n if (hostSubtreeRoot === null) {\n try {\n var _instance = node.stateNode;\n\n if (isHidden) {\n hideTextInstance(_instance);\n } else {\n unhideTextInstance(_instance, node.memoizedProps);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n } else if ((node.tag === OffscreenComponent || node.tag === LegacyHiddenComponent) && node.memoizedState !== null && node !== finishedWork) ; else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === finishedWork) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === finishedWork) {\n return;\n }\n\n if (hostSubtreeRoot === node) {\n hostSubtreeRoot = null;\n }\n\n node = node.return;\n }\n\n if (hostSubtreeRoot === node) {\n hostSubtreeRoot = null;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n}\n\nfunction commitAttachRef(finishedWork) {\n var ref = finishedWork.ref;\n\n if (ref !== null) {\n var instance = finishedWork.stateNode;\n var instanceToUse;\n\n switch (finishedWork.tag) {\n case HostHoistable:\n case HostSingleton:\n case HostComponent:\n instanceToUse = getPublicInstance(instance);\n break;\n\n default:\n instanceToUse = instance;\n } // Moved outside to ensure DCE works with this flag\n\n if (typeof ref === 'function') {\n if (shouldProfile(finishedWork)) {\n try {\n startLayoutEffectTimer();\n finishedWork.refCleanup = ref(instanceToUse);\n } finally {\n recordLayoutEffectDuration(finishedWork);\n }\n } else {\n finishedWork.refCleanup = ref(instanceToUse);\n }\n } else {\n {\n if (!ref.hasOwnProperty('current')) {\n error('Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().', getComponentNameFromFiber(finishedWork));\n }\n } // $FlowFixMe[incompatible-use] unable to narrow type to the non-function case\n\n\n ref.current = instanceToUse;\n }\n }\n}\n\nfunction detachFiberMutation(fiber) {\n // Cut off the return pointer to disconnect it from the tree.\n // This enables us to detect and warn against state updates on an unmounted component.\n // It also prevents events from bubbling from within disconnected components.\n //\n // Ideally, we should also clear the child pointer of the parent alternate to let this\n // get GC:ed but we don't know which for sure which parent is the current\n // one so we'll settle for GC:ing the subtree of this child.\n // This child itself will be GC:ed when the parent updates the next time.\n //\n // Note that we can't clear child or sibling pointers yet.\n // They're needed for passive effects and for findDOMNode.\n // We defer those fields, and all other cleanup, to the passive phase (see detachFiberAfterEffects).\n //\n // Don't reset the alternate yet, either. We need that so we can detach the\n // alternate's fields in the passive phase. Clearing the return pointer is\n // sufficient for findDOMNode semantics.\n var alternate = fiber.alternate;\n\n if (alternate !== null) {\n alternate.return = null;\n }\n\n fiber.return = null;\n}\n\nfunction detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n\n if (alternate !== null) {\n fiber.alternate = null;\n detachFiberAfterEffects(alternate);\n } // Clear cyclical Fiber fields. This level alone is designed to roughly\n // approximate the planned Fiber refactor. In that world, `setState` will be\n // bound to a special \"instance\" object instead of a Fiber. The Instance\n // object will not have any of these fields. It will only be connected to\n // the fiber tree via a single link at the root. So if this level alone is\n // sufficient to fix memory issues, that bodes well for our plans.\n\n\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null; // The `stateNode` is cyclical because on host nodes it points to the host\n // tree, which has its own pointers to children, parents, and siblings.\n // The other host nodes also point back to fibers, so we should detach that\n // one, too.\n\n if (fiber.tag === HostComponent) {\n var hostInstance = fiber.stateNode;\n\n if (hostInstance !== null) {\n detachDeletedInstance(hostInstance);\n }\n }\n\n fiber.stateNode = null;\n\n {\n fiber._debugSource = null;\n fiber._debugOwner = null;\n } // Theoretically, nothing in here should be necessary, because we already\n // disconnected the fiber from the tree. So even if something leaks this\n // particular fiber, it won't leak anything else.\n\n\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null; // TODO: Move to `commitPassiveUnmountInsideDeletedTreeOnFiber` instead.\n\n fiber.updateQueue = null;\n}\n\nfunction getHostParentFiber(fiber) {\n var parent = fiber.return;\n\n while (parent !== null) {\n if (isHostParent(parent)) {\n return parent;\n }\n\n parent = parent.return;\n }\n\n throw new Error('Expected to find a host parent. This error is likely caused by a bug ' + 'in React. Please file an issue.');\n}\n\nfunction isHostParent(fiber) {\n return fiber.tag === HostComponent || fiber.tag === HostRoot || (fiber.tag === HostHoistable ) || (fiber.tag === HostSingleton ) || fiber.tag === HostPortal;\n}\n\nfunction getHostSibling(fiber) {\n // We're going to search forward into the tree until we find a sibling host\n // node. Unfortunately, if multiple insertions are done in a row we have to\n // search past them. This leads to exponential search for the next sibling.\n // TODO: Find a more efficient way to do this.\n var node = fiber;\n\n siblings: while (true) {\n // If we didn't find anything, let's try the next sibling.\n while (node.sibling === null) {\n if (node.return === null || isHostParent(node.return)) {\n // If we pop out of the root or hit the parent the fiber we are the\n // last sibling.\n return null;\n } // $FlowFixMe[incompatible-type] found when upgrading Flow\n\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n\n while (node.tag !== HostComponent && node.tag !== HostText && (node.tag !== HostSingleton) && node.tag !== DehydratedFragment) {\n // If it is not host node and, we might have a host node inside it.\n // Try to search down until we find one.\n if (node.flags & Placement) {\n // If we don't have a child, try the siblings instead.\n continue siblings;\n } // If we don't have a child, try the siblings instead.\n // We also skip portals because they are not part of this host tree.\n\n\n if (node.child === null || node.tag === HostPortal) {\n continue siblings;\n } else {\n node.child.return = node;\n node = node.child;\n }\n } // Check if this host node is stable or about to be placed.\n\n\n if (!(node.flags & Placement)) {\n // Found it!\n return node.stateNode;\n }\n }\n}\n\nfunction commitPlacement(finishedWork) {\n\n {\n if (finishedWork.tag === HostSingleton) {\n // Singletons are already in the Host and don't need to be placed\n // Since they operate somewhat like Portals though their children will\n // have Placement and will get placed inside them\n return;\n }\n } // Recursively insert all host nodes into the parent.\n\n\n var parentFiber = getHostParentFiber(finishedWork);\n\n switch (parentFiber.tag) {\n case HostSingleton:\n {\n {\n var parent = parentFiber.stateNode;\n var before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its\n // children to find all the terminal nodes.\n\n insertOrAppendPlacementNode(finishedWork, before, parent);\n break;\n } // Fall through\n\n }\n\n case HostComponent:\n {\n var _parent = parentFiber.stateNode;\n\n if (parentFiber.flags & ContentReset) {\n // Reset the text content of the parent before doing any insertions\n resetTextContent(_parent); // Clear ContentReset from the effect tag\n\n parentFiber.flags &= ~ContentReset;\n }\n\n var _before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its\n // children to find all the terminal nodes.\n\n\n insertOrAppendPlacementNode(finishedWork, _before, _parent);\n break;\n }\n\n case HostRoot:\n case HostPortal:\n {\n var _parent2 = parentFiber.stateNode.containerInfo;\n\n var _before2 = getHostSibling(finishedWork);\n\n insertOrAppendPlacementNodeIntoContainer(finishedWork, _before2, _parent2);\n break;\n }\n\n default:\n throw new Error('Invalid host parent fiber. This error is likely caused by a bug ' + 'in React. Please file an issue.');\n }\n}\n\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n var isHost = tag === HostComponent || tag === HostText;\n\n if (isHost) {\n var stateNode = node.stateNode;\n\n if (before) {\n insertInContainerBefore(parent, stateNode, before);\n } else {\n appendChildToContainer(parent, stateNode);\n }\n } else if (tag === HostPortal || (tag === HostSingleton )) ; else {\n var child = node.child;\n\n if (child !== null) {\n insertOrAppendPlacementNodeIntoContainer(child, before, parent);\n var sibling = child.sibling;\n\n while (sibling !== null) {\n insertOrAppendPlacementNodeIntoContainer(sibling, before, parent);\n sibling = sibling.sibling;\n }\n }\n }\n}\n\nfunction insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n var isHost = tag === HostComponent || tag === HostText;\n\n if (isHost) {\n var stateNode = node.stateNode;\n\n if (before) {\n insertBefore(parent, stateNode, before);\n } else {\n appendChild(parent, stateNode);\n }\n } else if (tag === HostPortal || (tag === HostSingleton )) ; else {\n var child = node.child;\n\n if (child !== null) {\n insertOrAppendPlacementNode(child, before, parent);\n var sibling = child.sibling;\n\n while (sibling !== null) {\n insertOrAppendPlacementNode(sibling, before, parent);\n sibling = sibling.sibling;\n }\n }\n }\n} // These are tracked on the stack as we recursively traverse a\n// deleted subtree.\n// TODO: Update these during the whole mutation phase, not just during\n// a deletion.\n\n\nvar hostParent = null;\nvar hostParentIsContainer = false;\n\nfunction commitDeletionEffects(root, returnFiber, deletedFiber) {\n {\n // We only have the top Fiber that was deleted but we need to recurse down its\n // children to find all the terminal nodes.\n // Recursively delete all host nodes from the parent, detach refs, clean\n // up mounted layout effects, and call componentWillUnmount.\n // We only need to remove the topmost host child in each branch. But then we\n // still need to keep traversing to unmount effects, refs, and cWU. TODO: We\n // could split this into two separate traversals functions, where the second\n // one doesn't include any removeChild logic. This is maybe the same\n // function as \"disappearLayoutEffects\" (or whatever that turns into after\n // the layout phase is refactored to use recursion).\n // Before starting, find the nearest host parent on the stack so we know\n // which instance/container to remove the children from.\n // TODO: Instead of searching up the fiber return path on every deletion, we\n // can track the nearest host component on the JS stack as we traverse the\n // tree during the commit phase. This would make insertions faster, too.\n var parent = returnFiber;\n\n findParent: while (parent !== null) {\n switch (parent.tag) {\n case HostSingleton:\n case HostComponent:\n {\n hostParent = parent.stateNode;\n hostParentIsContainer = false;\n break findParent;\n }\n\n case HostRoot:\n {\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = true;\n break findParent;\n }\n\n case HostPortal:\n {\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = true;\n break findParent;\n }\n }\n\n parent = parent.return;\n }\n\n if (hostParent === null) {\n throw new Error('Expected to find a host parent. This error is likely caused by ' + 'a bug in React. Please file an issue.');\n }\n\n commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);\n hostParent = null;\n hostParentIsContainer = false;\n }\n\n detachFiberMutation(deletedFiber);\n}\n\nfunction recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, parent) {\n // TODO: Use a static flag to skip trees that don't have unmount effects\n var child = parent.child;\n\n while (child !== null) {\n commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, child);\n child = child.sibling;\n }\n}\n\nfunction commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, deletedFiber) {\n onCommitUnmount(deletedFiber); // The cases in this outer switch modify the stack before they traverse\n // into their subtree. There are simpler cases in the inner switch\n // that don't modify the stack.\n\n switch (deletedFiber.tag) {\n case HostHoistable:\n {\n {\n if (!offscreenSubtreeWasHidden) {\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n }\n\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n\n if (deletedFiber.memoizedState) {\n releaseResource(deletedFiber.memoizedState);\n } else if (deletedFiber.stateNode) {\n unmountHoistable(deletedFiber.stateNode);\n }\n\n return;\n } // Fall through\n\n }\n\n case HostSingleton:\n {\n {\n if (!offscreenSubtreeWasHidden) {\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n }\n\n var prevHostParent = hostParent;\n var prevHostParentIsContainer = hostParentIsContainer;\n hostParent = deletedFiber.stateNode;\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber); // Normally this is called in passive unmount effect phase however with\n // HostSingleton we warn if you acquire one that is already associated to\n // a different fiber. To increase our chances of avoiding this, specifically\n // if you keyed a HostSingleton so there will be a delete followed by a Placement\n // we treat detach eagerly here\n\n releaseSingletonInstance(deletedFiber.stateNode);\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n return;\n } // Fall through\n\n }\n\n case HostComponent:\n {\n if (!offscreenSubtreeWasHidden) {\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n } // Intentional fallthrough to next branch\n\n }\n\n case HostText:\n {\n // We only need to remove the nearest host child. Set the host parent\n // to `null` on the stack to indicate that nested children don't\n // need to be removed.\n {\n var _prevHostParent = hostParent;\n var _prevHostParentIsContainer = hostParentIsContainer;\n hostParent = null;\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n hostParent = _prevHostParent;\n hostParentIsContainer = _prevHostParentIsContainer;\n\n if (hostParent !== null) {\n // Now that all the child effects have unmounted, we can remove the\n // node from the tree.\n if (hostParentIsContainer) {\n removeChildFromContainer(hostParent, deletedFiber.stateNode);\n } else {\n removeChild(hostParent, deletedFiber.stateNode);\n }\n }\n }\n\n return;\n }\n\n case DehydratedFragment:\n {\n // Delete the dehydrated suspense boundary and all of its content.\n\n\n {\n if (hostParent !== null) {\n if (hostParentIsContainer) {\n clearSuspenseBoundaryFromContainer(hostParent, deletedFiber.stateNode);\n } else {\n clearSuspenseBoundary(hostParent, deletedFiber.stateNode);\n }\n }\n }\n\n return;\n }\n\n case HostPortal:\n {\n {\n // When we go into a portal, it becomes the parent to remove from.\n var _prevHostParent2 = hostParent;\n var _prevHostParentIsContainer2 = hostParentIsContainer;\n hostParent = deletedFiber.stateNode.containerInfo;\n hostParentIsContainer = true;\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n hostParent = _prevHostParent2;\n hostParentIsContainer = _prevHostParentIsContainer2;\n }\n\n return;\n }\n\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n {\n if (!offscreenSubtreeWasHidden) {\n var updateQueue = deletedFiber.updateQueue;\n\n if (updateQueue !== null) {\n var lastEffect = updateQueue.lastEffect;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n\n do {\n var tag = effect.tag;\n var inst = effect.inst;\n var destroy = inst.destroy;\n\n if (destroy !== undefined) {\n if ((tag & Insertion) !== NoFlags) {\n inst.destroy = undefined;\n safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);\n } else if ((tag & Layout) !== NoFlags) {\n {\n markComponentLayoutEffectUnmountStarted(deletedFiber);\n }\n\n if (shouldProfile(deletedFiber)) {\n startLayoutEffectTimer();\n inst.destroy = undefined;\n safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);\n recordLayoutEffectDuration(deletedFiber);\n } else {\n inst.destroy = undefined;\n safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);\n }\n\n {\n markComponentLayoutEffectUnmountStopped();\n }\n }\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n }\n }\n\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n return;\n }\n\n case ClassComponent:\n {\n if (!offscreenSubtreeWasHidden) {\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n var instance = deletedFiber.stateNode;\n\n if (typeof instance.componentWillUnmount === 'function') {\n safelyCallComponentWillUnmount(deletedFiber, nearestMountedAncestor, instance);\n }\n }\n\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n return;\n }\n\n case ScopeComponent:\n {\n\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n return;\n }\n\n case OffscreenComponent:\n {\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n\n if (deletedFiber.mode & ConcurrentMode) {\n // If this offscreen component is hidden, we already unmounted it. Before\n // deleting the children, track that it's already unmounted so that we\n // don't attempt to unmount the effects again.\n // TODO: If the tree is hidden, in most cases we should be able to skip\n // over the nested children entirely. An exception is we haven't yet found\n // the topmost host node to delete, which we already track on the stack.\n // But the other case is portals, which need to be detached no matter how\n // deeply they are nested. We should use a subtree flag to track whether a\n // subtree includes a nested portal.\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || deletedFiber.memoizedState !== null;\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n } else {\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n }\n\n break;\n }\n\n default:\n {\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n return;\n }\n }\n}\n\nfunction commitSuspenseCallback(finishedWork) {\n}\n\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n\n var newState = finishedWork.memoizedState;\n\n if (newState === null) {\n var current = finishedWork.alternate;\n\n if (current !== null) {\n var prevState = current.memoizedState;\n\n if (prevState !== null) {\n var suspenseInstance = prevState.dehydrated;\n\n if (suspenseInstance !== null) {\n try {\n commitHydratedSuspenseInstance(suspenseInstance);\n\n var hydrationCallbacks, onHydrated; if (enableSuspenseCallback) ;\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n }\n }\n}\n\nfunction getRetryCache(finishedWork) {\n // TODO: Unify the interface for the retry cache so we don't have to switch\n // on the tag like this.\n switch (finishedWork.tag) {\n case SuspenseComponent:\n case SuspenseListComponent:\n {\n var retryCache = finishedWork.stateNode;\n\n if (retryCache === null) {\n retryCache = finishedWork.stateNode = new PossiblyWeakSet();\n }\n\n return retryCache;\n }\n\n case OffscreenComponent:\n {\n var instance = finishedWork.stateNode;\n var _retryCache = instance._retryCache;\n\n if (_retryCache === null) {\n _retryCache = instance._retryCache = new PossiblyWeakSet();\n }\n\n return _retryCache;\n }\n\n default:\n {\n throw new Error(\"Unexpected Suspense handler tag (\" + finishedWork.tag + \"). This is a \" + 'bug in React.');\n }\n }\n}\n\nfunction detachOffscreenInstance(instance) {\n var fiber = instance._current;\n\n if (fiber === null) {\n throw new Error('Calling Offscreen.detach before instance handle has been set.');\n }\n\n if ((instance._pendingVisibility & OffscreenDetached) !== NoFlags$1) {\n // The instance is already detached, this is a noop.\n return;\n } // TODO: There is an opportunity to optimise this by not entering commit phase\n // and unmounting effects directly.\n\n\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n instance._pendingVisibility |= OffscreenDetached;\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n}\nfunction attachOffscreenInstance(instance) {\n var fiber = instance._current;\n\n if (fiber === null) {\n throw new Error('Calling Offscreen.detach before instance handle has been set.');\n }\n\n if ((instance._pendingVisibility & OffscreenDetached) === NoFlags$1) {\n // The instance is already attached, this is a noop.\n return;\n }\n\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n instance._pendingVisibility &= ~OffscreenDetached;\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n}\n\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n // If this boundary just timed out, then it will have a set of wakeables.\n // For each wakeable, attach a listener so that when it resolves, React\n // attempts to re-render the boundary in the primary (pre-timeout) state.\n var retryCache = getRetryCache(finishedWork);\n wakeables.forEach(function (wakeable) {\n // Memoize using the boundary fiber to prevent redundant listeners.\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n\n if (!retryCache.has(wakeable)) {\n retryCache.add(wakeable);\n\n {\n if (isDevToolsPresent) {\n if (inProgressLanes !== null && inProgressRoot !== null) {\n // If we have pending work still, associate the original updaters with it.\n restorePendingUpdaters(inProgressRoot, inProgressLanes);\n } else {\n throw Error('Expected finished root and lanes to be set. This is a bug in React.');\n }\n }\n }\n\n wakeable.then(retry, retry);\n }\n });\n} // This function detects when a Suspense boundary goes from visible to hidden.\nfunction commitMutationEffects(root, finishedWork, committedLanes) {\n inProgressLanes = committedLanes;\n inProgressRoot = root;\n setCurrentFiber(finishedWork);\n commitMutationEffectsOnFiber(finishedWork, root);\n setCurrentFiber(finishedWork);\n inProgressLanes = null;\n inProgressRoot = null;\n}\n\nfunction recursivelyTraverseMutationEffects(root, parentFiber, lanes) {\n // Deletions effects can be scheduled on any fiber type. They need to happen\n // before the children effects hae fired.\n var deletions = parentFiber.deletions;\n\n if (deletions !== null) {\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n\n try {\n commitDeletionEffects(root, parentFiber, childToDelete);\n } catch (error) {\n captureCommitPhaseError(childToDelete, parentFiber, error);\n }\n }\n }\n\n var prevDebugFiber = getCurrentFiber();\n\n if (parentFiber.subtreeFlags & MutationMask) {\n var child = parentFiber.child;\n\n while (child !== null) {\n setCurrentFiber(child);\n commitMutationEffectsOnFiber(child, root);\n child = child.sibling;\n }\n }\n\n setCurrentFiber(prevDebugFiber);\n}\n\nvar currentHoistableRoot = null;\n\nfunction commitMutationEffectsOnFiber(finishedWork, root, lanes) {\n var current = finishedWork.alternate;\n var flags = finishedWork.flags; // The effect flag should be checked *after* we refine the type of fiber,\n // because the fiber tag is more specific. An exception is any flag related\n // to reconciliation, because those can be set on all fiber types.\n\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Update) {\n try {\n commitHookEffectListUnmount(Insertion | HasEffect, finishedWork, finishedWork.return);\n commitHookEffectListMount(Insertion | HasEffect, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n } // Layout effects are destroyed during the mutation phase so that all\n // destroy functions for all fibers are called before any create functions.\n // This prevents sibling component effects from interfering with each other,\n // e.g. a destroy function in one component should never override a ref set\n // by a create function in another component during the same commit.\n\n\n if (shouldProfile(finishedWork)) {\n try {\n startLayoutEffectTimer();\n commitHookEffectListUnmount(Layout | HasEffect, finishedWork, finishedWork.return);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n\n recordLayoutEffectDuration(finishedWork);\n } else {\n try {\n commitHookEffectListUnmount(Layout | HasEffect, finishedWork, finishedWork.return);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n\n return;\n }\n\n case ClassComponent:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Ref) {\n if (current !== null) {\n safelyDetachRef(current, current.return);\n }\n }\n\n if (flags & Callback && offscreenSubtreeIsHidden) {\n var updateQueue = finishedWork.updateQueue;\n\n if (updateQueue !== null) {\n deferHiddenCallbacks(updateQueue);\n }\n }\n\n return;\n }\n\n case HostHoistable:\n {\n {\n // We cast because we always set the root at the React root and so it cannot be\n // null while we are processing mutation effects\n var hoistableRoot = currentHoistableRoot;\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Ref) {\n if (current !== null) {\n safelyDetachRef(current, current.return);\n }\n }\n\n if (flags & Update) {\n var currentResource = current !== null ? current.memoizedState : null;\n var newResource = finishedWork.memoizedState;\n\n if (current === null) {\n // We are mounting a new HostHoistable Fiber. We fork the mount\n // behavior based on whether this instance is a Hoistable Instance\n // or a Hoistable Resource\n if (newResource === null) {\n if (finishedWork.stateNode === null) {\n finishedWork.stateNode = hydrateHoistable(hoistableRoot, finishedWork.type, finishedWork.memoizedProps, finishedWork);\n } else {\n mountHoistable(hoistableRoot, finishedWork.type, finishedWork.stateNode);\n }\n } else {\n finishedWork.stateNode = acquireResource(hoistableRoot, newResource, finishedWork.memoizedProps);\n }\n } else if (currentResource !== newResource) {\n // We are moving to or from Hoistable Resource, or between different Hoistable Resources\n if (currentResource === null) {\n if (current.stateNode !== null) {\n unmountHoistable(current.stateNode);\n }\n } else {\n releaseResource(currentResource);\n }\n\n if (newResource === null) {\n mountHoistable(hoistableRoot, finishedWork.type, finishedWork.stateNode);\n } else {\n acquireResource(hoistableRoot, newResource, finishedWork.memoizedProps);\n }\n } else if (newResource === null && finishedWork.stateNode !== null) {\n // We may have an update on a Hoistable element\n var updatePayload = finishedWork.updateQueue;\n finishedWork.updateQueue = null;\n\n try {\n commitUpdate(finishedWork.stateNode, updatePayload, finishedWork.type, current.memoizedProps, finishedWork.memoizedProps, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n\n return;\n } // Fall through\n\n }\n\n case HostSingleton:\n {\n {\n if (flags & Update) {\n var previousWork = finishedWork.alternate;\n\n if (previousWork === null) {\n var singleton = finishedWork.stateNode;\n var props = finishedWork.memoizedProps; // This was a new mount, we need to clear and set initial properties\n\n clearSingleton(singleton);\n acquireSingletonInstance(finishedWork.type, props, singleton, finishedWork);\n }\n }\n } // Fall through\n\n }\n\n case HostComponent:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Ref) {\n if (current !== null) {\n safelyDetachRef(current, current.return);\n }\n }\n\n {\n // TODO: ContentReset gets cleared by the children during the commit\n // phase. This is a refactor hazard because it means we must read\n // flags the flags after `commitReconciliationEffects` has already run;\n // the order matters. We should refactor so that ContentReset does not\n // rely on mutating the flag during commit. Like by setting a flag\n // during the render phase instead.\n if (finishedWork.flags & ContentReset) {\n var instance = finishedWork.stateNode;\n\n try {\n resetTextContent(instance);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n\n if (flags & Update) {\n var _instance2 = finishedWork.stateNode;\n\n if (_instance2 != null) {\n // Commit the work prepared earlier.\n var newProps = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n\n var oldProps = current !== null ? current.memoizedProps : newProps;\n var type = finishedWork.type; // TODO: Type the updateQueue to be specific to host components.\n\n var _updatePayload = finishedWork.updateQueue;\n finishedWork.updateQueue = null;\n\n try {\n commitUpdate(_instance2, _updatePayload, type, oldProps, newProps, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n }\n\n return;\n }\n\n case HostText:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Update) {\n {\n if (finishedWork.stateNode === null) {\n throw new Error('This should have a text node initialized. This error is likely ' + 'caused by a bug in React. Please file an issue.');\n }\n\n var textInstance = finishedWork.stateNode;\n var newText = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n\n var oldText = current !== null ? current.memoizedProps : newText;\n\n try {\n commitTextUpdate(textInstance, oldText, newText);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n\n return;\n }\n\n case HostRoot:\n {\n {\n prepareToCommitHoistables();\n var previousHoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(root.containerInfo);\n recursivelyTraverseMutationEffects(root, finishedWork);\n currentHoistableRoot = previousHoistableRoot;\n commitReconciliationEffects(finishedWork);\n }\n\n if (flags & Update) {\n {\n if (current !== null) {\n var prevRootState = current.memoizedState;\n\n if (prevRootState.isDehydrated) {\n try {\n commitHydratedContainer(root.containerInfo);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n }\n }\n\n return;\n }\n\n case HostPortal:\n {\n {\n var _previousHoistableRoot = currentHoistableRoot;\n currentHoistableRoot = getHoistableRoot(finishedWork.stateNode.containerInfo);\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n currentHoistableRoot = _previousHoistableRoot;\n }\n\n return;\n }\n\n case SuspenseComponent:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork); // TODO: We should mark a flag on the Suspense fiber itself, rather than\n // relying on the Offscreen fiber having a flag also being marked. The\n // reason is that this offscreen fiber might not be part of the work-in-\n // progress tree! It could have been reused from a previous render. This\n // doesn't lead to incorrect behavior because we don't rely on the flag\n // check alone; we also compare the states explicitly below. But for\n // modeling purposes, we _should_ be able to rely on the flag check alone.\n // So this is a bit fragile.\n //\n // Also, all this logic could/should move to the passive phase so it\n // doesn't block paint.\n\n var offscreenFiber = finishedWork.child;\n\n if (offscreenFiber.flags & Visibility) {\n // Throttle the appearance and disappearance of Suspense fallbacks.\n var isShowingFallback = finishedWork.memoizedState !== null;\n var wasShowingFallback = current !== null && current.memoizedState !== null;\n\n {\n if (isShowingFallback !== wasShowingFallback) {\n // A fallback is either appearing or disappearing.\n markCommitTimeOfFallback();\n }\n }\n }\n\n if (flags & Update) {\n try {\n commitSuspenseCallback(finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n\n var retryQueue = finishedWork.updateQueue;\n\n if (retryQueue !== null) {\n finishedWork.updateQueue = null;\n attachSuspenseRetryListeners(finishedWork, retryQueue);\n }\n }\n\n return;\n }\n\n case OffscreenComponent:\n {\n if (flags & Ref) {\n if (current !== null) {\n safelyDetachRef(current, current.return);\n }\n }\n\n var newState = finishedWork.memoizedState;\n var isHidden = newState !== null;\n var wasHidden = current !== null && current.memoizedState !== null;\n\n if (finishedWork.mode & ConcurrentMode) {\n // Before committing the children, track on the stack whether this\n // offscreen subtree was already hidden, so that we don't unmount the\n // effects again.\n var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden;\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || isHidden;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n recursivelyTraverseMutationEffects(root, finishedWork);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n } else {\n recursivelyTraverseMutationEffects(root, finishedWork);\n }\n\n commitReconciliationEffects(finishedWork);\n var offscreenInstance = finishedWork.stateNode; // TODO: Add explicit effect flag to set _current.\n\n offscreenInstance._current = finishedWork; // Offscreen stores pending changes to visibility in `_pendingVisibility`. This is\n // to support batching of `attach` and `detach` calls.\n\n offscreenInstance._visibility &= ~OffscreenDetached;\n offscreenInstance._visibility |= offscreenInstance._pendingVisibility & OffscreenDetached;\n\n if (flags & Visibility) {\n // Track the current state on the Offscreen instance so we can\n // read it during an event\n if (isHidden) {\n offscreenInstance._visibility &= ~OffscreenVisible;\n } else {\n offscreenInstance._visibility |= OffscreenVisible;\n }\n\n if (isHidden) {\n var isUpdate = current !== null;\n var wasHiddenByAncestorOffscreen = offscreenSubtreeIsHidden || offscreenSubtreeWasHidden; // Only trigger disapper layout effects if:\n // - This is an update, not first mount.\n // - This Offscreen was not hidden before.\n // - Ancestor Offscreen was not hidden in previous commit.\n\n if (isUpdate && !wasHidden && !wasHiddenByAncestorOffscreen) {\n if ((finishedWork.mode & ConcurrentMode) !== NoMode) {\n // Disappear the layout effects of all the children\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n }\n }\n } // Offscreen with manual mode manages visibility manually.\n\n\n if (!isOffscreenManual(finishedWork)) {\n // TODO: This needs to run whenever there's an insertion or update\n // inside a hidden Offscreen tree.\n hideOrUnhideAllChildren(finishedWork, isHidden);\n }\n } // TODO: Move to passive phase\n\n\n if (flags & Update) {\n var offscreenQueue = finishedWork.updateQueue;\n\n if (offscreenQueue !== null) {\n var _retryQueue = offscreenQueue.retryQueue;\n\n if (_retryQueue !== null) {\n offscreenQueue.retryQueue = null;\n attachSuspenseRetryListeners(finishedWork, _retryQueue);\n }\n }\n }\n\n return;\n }\n\n case SuspenseListComponent:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Update) {\n var _retryQueue2 = finishedWork.updateQueue;\n\n if (_retryQueue2 !== null) {\n finishedWork.updateQueue = null;\n attachSuspenseRetryListeners(finishedWork, _retryQueue2);\n }\n }\n\n return;\n }\n\n case ScopeComponent:\n {\n\n return;\n }\n\n default:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n return;\n }\n }\n}\n\nfunction commitReconciliationEffects(finishedWork) {\n // Placement effects (insertions, reorders) can be scheduled on any fiber\n // type. They needs to happen after the children effects have fired, but\n // before the effects on this fiber have fired.\n var flags = finishedWork.flags;\n\n if (flags & Placement) {\n try {\n commitPlacement(finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n } // Clear the \"placement\" from effect tag so that we know that this is\n // inserted, before any life-cycles like componentDidMount gets called.\n // TODO: findDOMNode doesn't rely on this any more but isMounted does\n // and isMounted is deprecated anyway so we should be able to kill this.\n\n\n finishedWork.flags &= ~Placement;\n }\n\n if (flags & Hydrating) {\n finishedWork.flags &= ~Hydrating;\n }\n}\n\nfunction commitLayoutEffects(finishedWork, root, committedLanes) {\n inProgressLanes = committedLanes;\n inProgressRoot = root;\n var current = finishedWork.alternate;\n commitLayoutEffectOnFiber(root, current, finishedWork);\n inProgressLanes = null;\n inProgressRoot = null;\n}\n\nfunction recursivelyTraverseLayoutEffects(root, parentFiber, lanes) {\n var prevDebugFiber = getCurrentFiber();\n\n if (parentFiber.subtreeFlags & LayoutMask) {\n var child = parentFiber.child;\n\n while (child !== null) {\n setCurrentFiber(child);\n var current = child.alternate;\n commitLayoutEffectOnFiber(root, current, child);\n child = child.sibling;\n }\n }\n\n setCurrentFiber(prevDebugFiber);\n}\n\nfunction disappearLayoutEffects(finishedWork) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n {\n // TODO (Offscreen) Check: flags & LayoutStatic\n if (shouldProfile(finishedWork)) {\n try {\n startLayoutEffectTimer();\n commitHookEffectListUnmount(Layout, finishedWork, finishedWork.return);\n } finally {\n recordLayoutEffectDuration(finishedWork);\n }\n } else {\n commitHookEffectListUnmount(Layout, finishedWork, finishedWork.return);\n }\n\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n }\n\n case ClassComponent:\n {\n // TODO (Offscreen) Check: flags & RefStatic\n safelyDetachRef(finishedWork, finishedWork.return);\n var instance = finishedWork.stateNode;\n\n if (typeof instance.componentWillUnmount === 'function') {\n safelyCallComponentWillUnmount(finishedWork, finishedWork.return, instance);\n }\n\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n }\n\n case HostHoistable:\n case HostSingleton:\n case HostComponent:\n {\n // TODO (Offscreen) Check: flags & RefStatic\n safelyDetachRef(finishedWork, finishedWork.return);\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n }\n\n case OffscreenComponent:\n {\n // TODO (Offscreen) Check: flags & RefStatic\n safelyDetachRef(finishedWork, finishedWork.return);\n var isHidden = finishedWork.memoizedState !== null;\n\n if (isHidden) ; else {\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n }\n\n break;\n }\n\n default:\n {\n recursivelyTraverseDisappearLayoutEffects(finishedWork);\n break;\n }\n }\n}\n\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic)\n var child = parentFiber.child;\n\n while (child !== null) {\n disappearLayoutEffects(child);\n child = child.sibling;\n }\n}\n\nfunction reappearLayoutEffects(finishedRoot, current, finishedWork, // This function visits both newly finished work and nodes that were re-used\n// from a previously committed tree. We cannot check non-static flags if the\n// node was reused.\nincludeWorkInProgressEffects) {\n // Turn on layout effects in a tree that previously disappeared.\n var flags = finishedWork.flags;\n\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n recursivelyTraverseReappearLayoutEffects(finishedRoot, finishedWork, includeWorkInProgressEffects); // TODO: Check flags & LayoutStatic\n\n commitHookLayoutEffects(finishedWork, Layout);\n break;\n }\n\n case ClassComponent:\n {\n recursivelyTraverseReappearLayoutEffects(finishedRoot, finishedWork, includeWorkInProgressEffects); // TODO: Check for LayoutStatic flag\n\n var instance = finishedWork.stateNode;\n\n if (typeof instance.componentDidMount === 'function') {\n try {\n instance.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n } // Commit any callbacks that would have fired while the component\n // was hidden.\n\n\n var updateQueue = finishedWork.updateQueue;\n\n if (updateQueue !== null) {\n commitHiddenCallbacks(updateQueue, instance);\n } // If this is newly finished work, check for setState callbacks\n\n\n if (includeWorkInProgressEffects && flags & Callback) {\n commitClassCallbacks(finishedWork);\n } // TODO: Check flags & RefStatic\n\n\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n }\n // Unlike commitLayoutEffectsOnFiber, we don't need to handle HostRoot\n // because this function only visits nodes that are inside an\n // Offscreen fiber.\n // case HostRoot: {\n // ...\n // }\n\n case HostHoistable:\n case HostSingleton:\n case HostComponent:\n {\n recursivelyTraverseReappearLayoutEffects(finishedRoot, finishedWork, includeWorkInProgressEffects); // Renderers may schedule work to be done after host components are mounted\n // (eg DOM renderer may schedule auto-focus for inputs and form controls).\n // These effects should only be committed when components are first mounted,\n // aka when there is no current/alternate.\n\n if (includeWorkInProgressEffects && current === null && flags & Update) {\n commitHostComponentMount(finishedWork);\n } // TODO: Check flags & Ref\n\n\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n }\n\n case Profiler:\n {\n recursivelyTraverseReappearLayoutEffects(finishedRoot, finishedWork, includeWorkInProgressEffects); // TODO: Figure out how Profiler updates should work with Offscreen\n\n if (includeWorkInProgressEffects && flags & Update) {\n commitProfilerUpdate(finishedWork, current);\n }\n\n break;\n }\n\n case SuspenseComponent:\n {\n recursivelyTraverseReappearLayoutEffects(finishedRoot, finishedWork, includeWorkInProgressEffects); // TODO: Figure out how Suspense hydration callbacks should work\n // with Offscreen.\n\n if (includeWorkInProgressEffects && flags & Update) {\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n }\n\n break;\n }\n\n case OffscreenComponent:\n {\n var offscreenState = finishedWork.memoizedState;\n var isHidden = offscreenState !== null;\n\n if (isHidden) ; else {\n recursivelyTraverseReappearLayoutEffects(finishedRoot, finishedWork, includeWorkInProgressEffects);\n } // TODO: Check flags & Ref\n\n\n safelyAttachRef(finishedWork, finishedWork.return);\n break;\n }\n\n default:\n {\n recursivelyTraverseReappearLayoutEffects(finishedRoot, finishedWork, includeWorkInProgressEffects);\n break;\n }\n }\n}\n\nfunction recursivelyTraverseReappearLayoutEffects(finishedRoot, parentFiber, includeWorkInProgressEffects) {\n // This function visits both newly finished work and nodes that were re-used\n // from a previously committed tree. We cannot check non-static flags if the\n // node was reused.\n var childShouldIncludeWorkInProgressEffects = includeWorkInProgressEffects && (parentFiber.subtreeFlags & LayoutMask) !== NoFlags$1; // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic)\n\n var prevDebugFiber = getCurrentFiber();\n var child = parentFiber.child;\n\n while (child !== null) {\n var current = child.alternate;\n reappearLayoutEffects(finishedRoot, current, child, childShouldIncludeWorkInProgressEffects);\n child = child.sibling;\n }\n\n setCurrentFiber(prevDebugFiber);\n}\n\nfunction commitHookPassiveMountEffects(finishedWork, hookFlags) {\n if (shouldProfile(finishedWork)) {\n startPassiveEffectTimer();\n\n try {\n commitHookEffectListMount(hookFlags, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n\n recordPassiveEffectDuration(finishedWork);\n } else {\n try {\n commitHookEffectListMount(hookFlags, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n}\n\nfunction commitOffscreenPassiveMountEffects(current, finishedWork, instance) {\n {\n var previousCache = null;\n\n if (current !== null && current.memoizedState !== null && current.memoizedState.cachePool !== null) {\n previousCache = current.memoizedState.cachePool.pool;\n }\n\n var nextCache = null;\n\n if (finishedWork.memoizedState !== null && finishedWork.memoizedState.cachePool !== null) {\n nextCache = finishedWork.memoizedState.cachePool.pool;\n } // Retain/release the cache used for pending (suspended) nodes.\n // Note that this is only reached in the non-suspended/visible case:\n // when the content is suspended/hidden, the retain/release occurs\n // via the parent Suspense component (see case above).\n\n\n if (nextCache !== previousCache) {\n if (nextCache != null) {\n retainCache(nextCache);\n }\n\n if (previousCache != null) {\n releaseCache(previousCache);\n }\n }\n }\n}\n\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n {\n var previousCache = null;\n\n if (finishedWork.alternate !== null) {\n previousCache = finishedWork.alternate.memoizedState.cache;\n }\n\n var nextCache = finishedWork.memoizedState.cache; // Retain/release the cache. In theory the cache component\n // could be \"borrowing\" a cache instance owned by some parent,\n // in which case we could avoid retaining/releasing. But it\n // is non-trivial to determine when that is the case, so we\n // always retain/release.\n\n if (nextCache !== previousCache) {\n retainCache(nextCache);\n\n if (previousCache != null) {\n releaseCache(previousCache);\n }\n }\n }\n}\n\nfunction commitPassiveMountEffects(root, finishedWork, committedLanes, committedTransitions) {\n setCurrentFiber(finishedWork);\n commitPassiveMountOnFiber(root, finishedWork, committedLanes, committedTransitions);\n resetCurrentFiber();\n}\n\nfunction recursivelyTraversePassiveMountEffects(root, parentFiber, committedLanes, committedTransitions) {\n var prevDebugFiber = getCurrentFiber();\n\n if (parentFiber.subtreeFlags & PassiveMask) {\n var child = parentFiber.child;\n\n while (child !== null) {\n setCurrentFiber(child);\n commitPassiveMountOnFiber(root, child, committedLanes, committedTransitions);\n child = child.sibling;\n }\n }\n\n setCurrentFiber(prevDebugFiber);\n}\n\nfunction commitPassiveMountOnFiber(finishedRoot, finishedWork, committedLanes, committedTransitions) {\n // When updating this function, also update reconnectPassiveEffects, which does\n // most of the same things when an offscreen tree goes from hidden -> visible,\n // or when toggling effects inside a hidden tree.\n var flags = finishedWork.flags;\n\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n recursivelyTraversePassiveMountEffects(finishedRoot, finishedWork, committedLanes, committedTransitions);\n\n if (flags & Passive$1) {\n commitHookPassiveMountEffects(finishedWork, Passive | HasEffect);\n }\n\n break;\n }\n\n case HostRoot:\n {\n recursivelyTraversePassiveMountEffects(finishedRoot, finishedWork, committedLanes, committedTransitions);\n\n if (flags & Passive$1) {\n {\n var previousCache = null;\n\n if (finishedWork.alternate !== null) {\n previousCache = finishedWork.alternate.memoizedState.cache;\n }\n\n var nextCache = finishedWork.memoizedState.cache; // Retain/release the root cache.\n // Note that on initial mount, previousCache and nextCache will be the same\n // and this retain won't occur. To counter this, we instead retain the HostRoot's\n // initial cache when creating the root itself (see createFiberRoot() in\n // ReactFiberRoot.js). Subsequent updates that change the cache are reflected\n // here, such that previous/next caches are retained correctly.\n\n if (nextCache !== previousCache) {\n retainCache(nextCache);\n\n if (previousCache != null) {\n releaseCache(previousCache);\n }\n }\n }\n }\n\n break;\n }\n\n case LegacyHiddenComponent:\n {\n\n break;\n }\n\n case OffscreenComponent:\n {\n // TODO: Pass `current` as argument to this function\n var _instance3 = finishedWork.stateNode;\n var nextState = finishedWork.memoizedState;\n var isHidden = nextState !== null;\n\n if (isHidden) {\n if (_instance3._visibility & OffscreenPassiveEffectsConnected) {\n // The effects are currently connected. Update them.\n recursivelyTraversePassiveMountEffects(finishedRoot, finishedWork, committedLanes, committedTransitions);\n } else {\n if (finishedWork.mode & ConcurrentMode) {\n // The effects are currently disconnected. Since the tree is hidden,\n // don't connect them. This also applies to the initial render.\n {\n // \"Atomic\" effects are ones that need to fire on every commit,\n // even during pre-rendering. An example is updating the reference\n // count on cache instances.\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n }\n } else {\n // Legacy Mode: Fire the effects even if the tree is hidden.\n _instance3._visibility |= OffscreenPassiveEffectsConnected;\n recursivelyTraversePassiveMountEffects(finishedRoot, finishedWork, committedLanes, committedTransitions);\n }\n }\n } else {\n // Tree is visible\n if (_instance3._visibility & OffscreenPassiveEffectsConnected) {\n // The effects are currently connected. Update them.\n recursivelyTraversePassiveMountEffects(finishedRoot, finishedWork, committedLanes, committedTransitions);\n } else {\n // The effects are currently disconnected. Reconnect them, while also\n // firing effects inside newly mounted trees. This also applies to\n // the initial render.\n _instance3._visibility |= OffscreenPassiveEffectsConnected;\n var includeWorkInProgressEffects = (finishedWork.subtreeFlags & PassiveMask) !== NoFlags$1;\n recursivelyTraverseReconnectPassiveEffects(finishedRoot, finishedWork, committedLanes, committedTransitions, includeWorkInProgressEffects);\n }\n }\n\n if (flags & Passive$1) {\n var _current = finishedWork.alternate;\n commitOffscreenPassiveMountEffects(_current, finishedWork);\n }\n\n break;\n }\n\n case CacheComponent:\n {\n recursivelyTraversePassiveMountEffects(finishedRoot, finishedWork, committedLanes, committedTransitions);\n\n if (flags & Passive$1) {\n // TODO: Pass `current` as argument to this function\n var _current2 = finishedWork.alternate;\n commitCachePassiveMountEffect(_current2, finishedWork);\n }\n\n break;\n }\n\n case TracingMarkerComponent:\n\n default:\n {\n recursivelyTraversePassiveMountEffects(finishedRoot, finishedWork, committedLanes, committedTransitions);\n break;\n }\n }\n}\n\nfunction recursivelyTraverseReconnectPassiveEffects(finishedRoot, parentFiber, committedLanes, committedTransitions, includeWorkInProgressEffects) {\n // This function visits both newly finished work and nodes that were re-used\n // from a previously committed tree. We cannot check non-static flags if the\n // node was reused.\n var childShouldIncludeWorkInProgressEffects = includeWorkInProgressEffects && (parentFiber.subtreeFlags & PassiveMask) !== NoFlags$1; // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic)\n\n var prevDebugFiber = getCurrentFiber();\n var child = parentFiber.child;\n\n while (child !== null) {\n reconnectPassiveEffects(finishedRoot, child, committedLanes, committedTransitions, childShouldIncludeWorkInProgressEffects);\n child = child.sibling;\n }\n\n setCurrentFiber(prevDebugFiber);\n}\n\nfunction reconnectPassiveEffects(finishedRoot, finishedWork, committedLanes, committedTransitions, // This function visits both newly finished work and nodes that were re-used\n// from a previously committed tree. We cannot check non-static flags if the\n// node was reused.\nincludeWorkInProgressEffects) {\n var flags = finishedWork.flags;\n\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n recursivelyTraverseReconnectPassiveEffects(finishedRoot, finishedWork, committedLanes, committedTransitions, includeWorkInProgressEffects); // TODO: Check for PassiveStatic flag\n\n commitHookPassiveMountEffects(finishedWork, Passive);\n break;\n }\n // Unlike commitPassiveMountOnFiber, we don't need to handle HostRoot\n // because this function only visits nodes that are inside an\n // Offscreen fiber.\n // case HostRoot: {\n // ...\n // }\n\n case LegacyHiddenComponent:\n {\n\n break;\n }\n\n case OffscreenComponent:\n {\n var _instance4 = finishedWork.stateNode;\n var nextState = finishedWork.memoizedState;\n var isHidden = nextState !== null;\n\n if (isHidden) {\n if (_instance4._visibility & OffscreenPassiveEffectsConnected) {\n // The effects are currently connected. Update them.\n recursivelyTraverseReconnectPassiveEffects(finishedRoot, finishedWork, committedLanes, committedTransitions, includeWorkInProgressEffects);\n } else {\n if (finishedWork.mode & ConcurrentMode) {\n // The effects are currently disconnected. Since the tree is hidden,\n // don't connect them. This also applies to the initial render.\n {\n // \"Atomic\" effects are ones that need to fire on every commit,\n // even during pre-rendering. An example is updating the reference\n // count on cache instances.\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n }\n } else {\n // Legacy Mode: Fire the effects even if the tree is hidden.\n _instance4._visibility |= OffscreenPassiveEffectsConnected;\n recursivelyTraverseReconnectPassiveEffects(finishedRoot, finishedWork, committedLanes, committedTransitions, includeWorkInProgressEffects);\n }\n }\n } else {\n // Tree is visible\n // Since we're already inside a reconnecting tree, it doesn't matter\n // whether the effects are currently connected. In either case, we'll\n // continue traversing the tree and firing all the effects.\n //\n // We do need to set the \"connected\" flag on the instance, though.\n _instance4._visibility |= OffscreenPassiveEffectsConnected;\n recursivelyTraverseReconnectPassiveEffects(finishedRoot, finishedWork, committedLanes, committedTransitions, includeWorkInProgressEffects);\n }\n\n if (includeWorkInProgressEffects && flags & Passive$1) {\n // TODO: Pass `current` as argument to this function\n var _current3 = finishedWork.alternate;\n commitOffscreenPassiveMountEffects(_current3, finishedWork);\n }\n\n break;\n }\n\n case CacheComponent:\n {\n recursivelyTraverseReconnectPassiveEffects(finishedRoot, finishedWork, committedLanes, committedTransitions, includeWorkInProgressEffects);\n\n if (includeWorkInProgressEffects && flags & Passive$1) {\n // TODO: Pass `current` as argument to this function\n var _current4 = finishedWork.alternate;\n commitCachePassiveMountEffect(_current4, finishedWork);\n }\n\n break;\n }\n\n case TracingMarkerComponent:\n\n default:\n {\n recursivelyTraverseReconnectPassiveEffects(finishedRoot, finishedWork, committedLanes, committedTransitions, includeWorkInProgressEffects);\n break;\n }\n }\n}\n\nfunction recursivelyTraverseAtomicPassiveEffects(finishedRoot, parentFiber, committedLanes, committedTransitions) {\n // \"Atomic\" effects are ones that need to fire on every commit, even during\n // pre-rendering. We call this function when traversing a hidden tree whose\n // regular effects are currently disconnected.\n var prevDebugFiber = getCurrentFiber(); // TODO: Add special flag for atomic effects\n\n if (parentFiber.subtreeFlags & PassiveMask) {\n var child = parentFiber.child;\n\n while (child !== null) {\n setCurrentFiber(child);\n commitAtomicPassiveEffects(finishedRoot, child);\n child = child.sibling;\n }\n }\n\n setCurrentFiber(prevDebugFiber);\n}\n\nfunction commitAtomicPassiveEffects(finishedRoot, finishedWork, committedLanes, committedTransitions) {\n // \"Atomic\" effects are ones that need to fire on every commit, even during\n // pre-rendering. We call this function when traversing a hidden tree whose\n // regular effects are currently disconnected.\n var flags = finishedWork.flags;\n\n switch (finishedWork.tag) {\n case OffscreenComponent:\n {\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n\n if (flags & Passive$1) {\n // TODO: Pass `current` as argument to this function\n var current = finishedWork.alternate;\n commitOffscreenPassiveMountEffects(current, finishedWork);\n }\n\n break;\n }\n\n case CacheComponent:\n {\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n\n if (flags & Passive$1) {\n // TODO: Pass `current` as argument to this function\n var _current5 = finishedWork.alternate;\n commitCachePassiveMountEffect(_current5, finishedWork);\n }\n\n break;\n }\n\n default:\n {\n recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n break;\n }\n }\n}\n\nfunction commitPassiveUnmountEffects(finishedWork) {\n setCurrentFiber(finishedWork);\n commitPassiveUnmountOnFiber(finishedWork);\n resetCurrentFiber();\n} // If we're inside a brand new tree, or a tree that was already visible, then we\n// should only suspend host components that have a ShouldSuspendCommit flag.\n// Components without it haven't changed since the last commit, so we can skip\n// over those.\n//\n// When we enter a tree that is being revealed (going from hidden -> visible),\n// we need to suspend _any_ component that _may_ suspend. Even if they're\n// already in the \"current\" tree. Because their visibility has changed, the\n// browser may not have prerendered them yet. So we check the MaySuspendCommit\n// flag instead.\n\nvar suspenseyCommitFlag = ShouldSuspendCommit;\nfunction accumulateSuspenseyCommit(finishedWork) {\n accumulateSuspenseyCommitOnFiber(finishedWork);\n}\n\nfunction recursivelyAccumulateSuspenseyCommit(parentFiber) {\n if (parentFiber.subtreeFlags & suspenseyCommitFlag) {\n var child = parentFiber.child;\n\n while (child !== null) {\n accumulateSuspenseyCommitOnFiber(child);\n child = child.sibling;\n }\n }\n}\n\nfunction accumulateSuspenseyCommitOnFiber(fiber) {\n switch (fiber.tag) {\n case HostHoistable:\n {\n recursivelyAccumulateSuspenseyCommit(fiber);\n\n if (fiber.flags & suspenseyCommitFlag) {\n if (fiber.memoizedState !== null) {\n suspendResource( // This should always be set by visiting HostRoot first\n currentHoistableRoot, fiber.memoizedState, fiber.memoizedProps);\n }\n }\n\n break;\n }\n\n case HostComponent:\n {\n recursivelyAccumulateSuspenseyCommit(fiber);\n\n break;\n }\n\n case HostRoot:\n case HostPortal:\n {\n {\n var previousHoistableRoot = currentHoistableRoot;\n var container = fiber.stateNode.containerInfo;\n currentHoistableRoot = getHoistableRoot(container);\n recursivelyAccumulateSuspenseyCommit(fiber);\n currentHoistableRoot = previousHoistableRoot;\n }\n\n break;\n }\n\n case OffscreenComponent:\n {\n var isHidden = fiber.memoizedState !== null;\n\n if (isHidden) ; else {\n var current = fiber.alternate;\n var wasHidden = current !== null && current.memoizedState !== null;\n\n if (wasHidden) {\n // This tree is being revealed. Visit all newly visible suspensey\n // instances, even if they're in the current tree.\n var prevFlags = suspenseyCommitFlag;\n suspenseyCommitFlag = MaySuspendCommit;\n recursivelyAccumulateSuspenseyCommit(fiber);\n suspenseyCommitFlag = prevFlags;\n } else {\n recursivelyAccumulateSuspenseyCommit(fiber);\n }\n }\n\n break;\n }\n\n default:\n {\n recursivelyAccumulateSuspenseyCommit(fiber);\n }\n }\n}\n\nfunction detachAlternateSiblings(parentFiber) {\n // A fiber was deleted from this parent fiber, but it's still part of the\n // previous (alternate) parent fiber's list of children. Because children\n // are a linked list, an earlier sibling that's still alive will be\n // connected to the deleted fiber via its `alternate`:\n //\n // live fiber --alternate--> previous live fiber --sibling--> deleted\n // fiber\n //\n // We can't disconnect `alternate` on nodes that haven't been deleted yet,\n // but we can disconnect the `sibling` and `child` pointers.\n var previousFiber = parentFiber.alternate;\n\n if (previousFiber !== null) {\n var detachedChild = previousFiber.child;\n\n if (detachedChild !== null) {\n previousFiber.child = null;\n\n do {\n // $FlowFixMe[incompatible-use] found when upgrading Flow\n var detachedSibling = detachedChild.sibling; // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n detachedChild.sibling = null;\n detachedChild = detachedSibling;\n } while (detachedChild !== null);\n }\n }\n}\n\nfunction commitHookPassiveUnmountEffects(finishedWork, nearestMountedAncestor, hookFlags) {\n if (shouldProfile(finishedWork)) {\n startPassiveEffectTimer();\n commitHookEffectListUnmount(hookFlags, finishedWork, nearestMountedAncestor);\n recordPassiveEffectDuration(finishedWork);\n } else {\n commitHookEffectListUnmount(hookFlags, finishedWork, nearestMountedAncestor);\n }\n}\n\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n // Deletions effects can be scheduled on any fiber type. They need to happen\n // before the children effects have fired.\n var deletions = parentFiber.deletions;\n\n if ((parentFiber.flags & ChildDeletion) !== NoFlags$1) {\n if (deletions !== null) {\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i]; // TODO: Convert this to use recursion\n\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(childToDelete, parentFiber);\n }\n }\n\n detachAlternateSiblings(parentFiber);\n }\n\n var prevDebugFiber = getCurrentFiber(); // TODO: Split PassiveMask into separate masks for mount and unmount?\n\n if (parentFiber.subtreeFlags & PassiveMask) {\n var child = parentFiber.child;\n\n while (child !== null) {\n setCurrentFiber(child);\n commitPassiveUnmountOnFiber(child);\n child = child.sibling;\n }\n }\n\n setCurrentFiber(prevDebugFiber);\n}\n\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n\n if (finishedWork.flags & Passive$1) {\n commitHookPassiveUnmountEffects(finishedWork, finishedWork.return, Passive | HasEffect);\n }\n\n break;\n }\n\n case OffscreenComponent:\n {\n var instance = finishedWork.stateNode;\n var nextState = finishedWork.memoizedState;\n var isHidden = nextState !== null;\n\n if (isHidden && instance._visibility & OffscreenPassiveEffectsConnected && ( // For backwards compatibility, don't unmount when a tree suspends. In\n // the future we may change this to unmount after a delay.\n finishedWork.return === null || finishedWork.return.tag !== SuspenseComponent)) {\n // The effects are currently connected. Disconnect them.\n // TODO: Add option or heuristic to delay before disconnecting the\n // effects. Then if the tree reappears before the delay has elapsed, we\n // can skip toggling the effects entirely.\n instance._visibility &= ~OffscreenPassiveEffectsConnected;\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n } else {\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n }\n\n break;\n }\n\n default:\n {\n recursivelyTraversePassiveUnmountEffects(finishedWork);\n break;\n }\n }\n}\n\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n // Deletions effects can be scheduled on any fiber type. They need to happen\n // before the children effects have fired.\n var deletions = parentFiber.deletions;\n\n if ((parentFiber.flags & ChildDeletion) !== NoFlags$1) {\n if (deletions !== null) {\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i]; // TODO: Convert this to use recursion\n\n nextEffect = childToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(childToDelete, parentFiber);\n }\n }\n\n detachAlternateSiblings(parentFiber);\n }\n\n var prevDebugFiber = getCurrentFiber(); // TODO: Check PassiveStatic flag\n\n var child = parentFiber.child;\n\n while (child !== null) {\n setCurrentFiber(child);\n disconnectPassiveEffect(child);\n child = child.sibling;\n }\n\n setCurrentFiber(prevDebugFiber);\n}\n\nfunction disconnectPassiveEffect(finishedWork) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n // TODO: Check PassiveStatic flag\n commitHookPassiveUnmountEffects(finishedWork, finishedWork.return, Passive); // When disconnecting passive effects, we fire the effects in the same\n // order as during a deletiong: parent before child\n\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n break;\n }\n\n case OffscreenComponent:\n {\n var instance = finishedWork.stateNode;\n\n if (instance._visibility & OffscreenPassiveEffectsConnected) {\n instance._visibility &= ~OffscreenPassiveEffectsConnected;\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n }\n\n break;\n }\n\n default:\n {\n recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n break;\n }\n }\n}\n\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(deletedSubtreeRoot, nearestMountedAncestor) {\n while (nextEffect !== null) {\n var fiber = nextEffect; // Deletion effects fire in parent -> child order\n // TODO: Check if fiber has a PassiveStatic flag\n\n setCurrentFiber(fiber);\n commitPassiveUnmountInsideDeletedTreeOnFiber(fiber, nearestMountedAncestor);\n resetCurrentFiber();\n var child = fiber.child; // TODO: Only traverse subtree if it has a PassiveStatic flag.\n\n if (child !== null) {\n child.return = fiber;\n nextEffect = child;\n } else {\n commitPassiveUnmountEffectsInsideOfDeletedTree_complete(deletedSubtreeRoot);\n }\n }\n}\n\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_complete(deletedSubtreeRoot) {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n var sibling = fiber.sibling;\n var returnFiber = fiber.return; // Recursively traverse the entire deleted tree and clean up fiber fields.\n // This is more aggressive than ideal, and the long term goal is to only\n // have to detach the deleted tree at the root.\n\n detachFiberAfterEffects(fiber);\n\n if (fiber === deletedSubtreeRoot) {\n nextEffect = null;\n return;\n }\n\n if (sibling !== null) {\n sibling.return = returnFiber;\n nextEffect = sibling;\n return;\n }\n\n nextEffect = returnFiber;\n }\n}\n\nfunction commitPassiveUnmountInsideDeletedTreeOnFiber(current, nearestMountedAncestor) {\n switch (current.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n commitHookPassiveUnmountEffects(current, nearestMountedAncestor, Passive);\n break;\n }\n // TODO: run passive unmount effects when unmounting a root.\n // Because passive unmount effects are not currently run,\n // the cache instance owned by the root will never be freed.\n // When effects are run, the cache should be freed here:\n // case HostRoot: {\n // if (enableCache) {\n // const cache = current.memoizedState.cache;\n // releaseCache(cache);\n // }\n // break;\n // }\n\n case LegacyHiddenComponent:\n case OffscreenComponent:\n {\n {\n if (current.memoizedState !== null && current.memoizedState.cachePool !== null) {\n var cache = current.memoizedState.cachePool.pool; // Retain/release the cache used for pending (suspended) nodes.\n // Note that this is only reached in the non-suspended/visible case:\n // when the content is suspended/hidden, the retain/release occurs\n // via the parent Suspense component (see case above).\n\n if (cache != null) {\n retainCache(cache);\n }\n }\n }\n\n break;\n }\n\n case SuspenseComponent:\n {\n\n break;\n }\n\n case CacheComponent:\n {\n {\n var _cache = current.memoizedState.cache;\n releaseCache(_cache);\n }\n\n break;\n }\n }\n}\n\nfunction invokeLayoutEffectMountInDEV(fiber) {\n {\n // We don't need to re-check StrictEffectsMode here.\n // This function is only called if that check has already passed.\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n try {\n commitHookEffectListMount(Layout | HasEffect, fiber);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n break;\n }\n\n case ClassComponent:\n {\n var instance = fiber.stateNode;\n\n if (typeof instance.componentDidMount === 'function') {\n try {\n instance.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n }\n\n break;\n }\n }\n }\n}\n\nfunction invokePassiveEffectMountInDEV(fiber) {\n {\n // We don't need to re-check StrictEffectsMode here.\n // This function is only called if that check has already passed.\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n try {\n commitHookEffectListMount(Passive | HasEffect, fiber);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n break;\n }\n }\n }\n}\n\nfunction invokeLayoutEffectUnmountInDEV(fiber) {\n {\n // We don't need to re-check StrictEffectsMode here.\n // This function is only called if that check has already passed.\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n try {\n commitHookEffectListUnmount(Layout | HasEffect, fiber, fiber.return);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n break;\n }\n\n case ClassComponent:\n {\n var instance = fiber.stateNode;\n\n if (typeof instance.componentWillUnmount === 'function') {\n safelyCallComponentWillUnmount(fiber, fiber.return, instance);\n }\n\n break;\n }\n }\n }\n}\n\nfunction invokePassiveEffectUnmountInDEV(fiber) {\n {\n // We don't need to re-check StrictEffectsMode here.\n // This function is only called if that check has already passed.\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n try {\n commitHookEffectListUnmount(Passive | HasEffect, fiber, fiber.return);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n }\n }\n }\n}\n\nfunction getCacheSignal() {\n\n var cache = readContext(CacheContext);\n return cache.controller.signal;\n}\n\nfunction getCacheForType(resourceType) {\n\n var cache = readContext(CacheContext);\n var cacheForType = cache.data.get(resourceType);\n\n if (cacheForType === undefined) {\n cacheForType = resourceType();\n cache.data.set(resourceType, cacheForType);\n }\n\n return cacheForType;\n}\n\nvar DefaultCacheDispatcher = {\n getCacheSignal: getCacheSignal,\n getCacheForType: getCacheForType\n};\n\nif (typeof Symbol === 'function' && Symbol.for) {\n var symbolFor = Symbol.for;\n symbolFor('selector.component');\n symbolFor('selector.has_pseudo_class');\n symbolFor('selector.role');\n symbolFor('selector.test_id');\n symbolFor('selector.text');\n}\nvar commitHooks = [];\nfunction onCommitRoot() {\n {\n commitHooks.forEach(function (commitHook) {\n return commitHook();\n });\n }\n}\n\nvar ReactCurrentActQueue$1 = ReactSharedInternals.ReactCurrentActQueue;\nfunction isLegacyActEnvironment(fiber) {\n {\n // Legacy mode. We preserve the behavior of React 17's act. It assumes an\n // act environment whenever `jest` is defined, but you can still turn off\n // spurious warnings by setting IS_REACT_ACT_ENVIRONMENT explicitly\n // to false.\n var isReactActEnvironmentGlobal = // $FlowFixMe[cannot-resolve-name] Flow doesn't know about IS_REACT_ACT_ENVIRONMENT global\n typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined' ? // $FlowFixMe[cannot-resolve-name]\n IS_REACT_ACT_ENVIRONMENT : undefined; // $FlowFixMe[cannot-resolve-name] - Flow doesn't know about jest\n\n var jestIsDefined = typeof jest !== 'undefined';\n return jestIsDefined && isReactActEnvironmentGlobal !== false;\n }\n}\nfunction isConcurrentActEnvironment() {\n {\n var isReactActEnvironmentGlobal = // $FlowFixMe[cannot-resolve-name] Flow doesn't know about IS_REACT_ACT_ENVIRONMENT global\n typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined' ? // $FlowFixMe[cannot-resolve-name]\n IS_REACT_ACT_ENVIRONMENT : undefined;\n\n if (!isReactActEnvironmentGlobal && ReactCurrentActQueue$1.current !== null) {\n // TODO: Include link to relevant documentation page.\n error('The current testing environment is not configured to support ' + 'act(...)');\n }\n\n return isReactActEnvironmentGlobal;\n }\n}\n\nvar PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentCache = ReactSharedInternals.ReactCurrentCache,\n ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner,\n ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig,\n ReactCurrentActQueue = ReactSharedInternals.ReactCurrentActQueue;\nvar NoContext =\n/* */\n0;\nvar BatchedContext =\n/* */\n1;\nvar RenderContext =\n/* */\n2;\nvar CommitContext =\n/* */\n4;\nvar RootInProgress = 0;\nvar RootFatalErrored = 1;\nvar RootErrored = 2;\nvar RootSuspended = 3;\nvar RootSuspendedWithDelay = 4;\nvar RootCompleted = 5;\nvar RootDidNotComplete = 6; // Describes where we are in the React execution stack\n\nvar executionContext = NoContext; // The root we're working on\n\nvar workInProgressRoot = null; // The fiber we're working on\n\nvar workInProgress = null; // The lanes we're rendering\n\nvar workInProgressRootRenderLanes = NoLanes;\nvar NotSuspended = 0;\nvar SuspendedOnError = 1;\nvar SuspendedOnData = 2;\nvar SuspendedOnImmediate = 3;\nvar SuspendedOnInstance = 4;\nvar SuspendedOnInstanceAndReadyToContinue = 5;\nvar SuspendedOnDeprecatedThrowPromise = 6;\nvar SuspendedAndReadyToContinue = 7;\nvar SuspendedOnHydration = 8; // When this is true, the work-in-progress fiber just suspended (or errored) and\n// we've yet to unwind the stack. In some cases, we may yield to the main thread\n// after this happens. If the fiber is pinged before we resume, we can retry\n// immediately instead of unwinding the stack.\n\nvar workInProgressSuspendedReason = NotSuspended;\nvar workInProgressThrownValue = null; // Whether a ping listener was attached during this render. This is slightly\n// different that whether something suspended, because we don't add multiple\n// listeners to a promise we've already seen (per root and lane).\n\nvar workInProgressRootDidAttachPingListener = false; // A contextual version of workInProgressRootRenderLanes. It is a superset of\n// the lanes that we started working on at the root. When we enter a subtree\n// that is currently hidden, we add the lanes that would have committed if\n// the hidden tree hadn't been deferred. This is modified by the\n// HiddenContext module.\n//\n// Most things in the work loop should deal with workInProgressRootRenderLanes.\n// Most things in begin/complete phases should deal with entangledRenderLanes.\n\nvar entangledRenderLanes = NoLanes; // Whether to root completed, errored, suspended, etc.\n\nvar workInProgressRootExitStatus = RootInProgress; // A fatal error, if one is thrown\n\nvar workInProgressRootFatalError = null; // The work left over by components that were visited during this render. Only\n// includes unprocessed updates, not work in bailed out children.\n\nvar workInProgressRootSkippedLanes = NoLanes; // Lanes that were updated (in an interleaved event) during this render.\n\nvar workInProgressRootInterleavedUpdatedLanes = NoLanes; // Lanes that were updated during the render phase (*not* an interleaved event).\n\nvar workInProgressRootPingedLanes = NoLanes; // If this lane scheduled deferred work, this is the lane of the deferred task.\n\nvar workInProgressDeferredLane = NoLane; // Errors that are thrown during the render phase.\n\nvar workInProgressRootConcurrentErrors = null; // These are errors that we recovered from without surfacing them to the UI.\n// We will log them once the tree commits.\n\nvar workInProgressRootRecoverableErrors = null; // The most recent time we either committed a fallback, or when a fallback was\n// filled in with the resolved UI. This lets us throttle the appearance of new\n// content as it streams in, to minimize jank.\n// TODO: Think of a better name for this variable?\n\nvar globalMostRecentFallbackTime = 0;\nvar FALLBACK_THROTTLE_MS = 300; // The absolute time for when we should start giving up on rendering\n// more and prefer CPU suspense heuristics instead.\n\nvar workInProgressRootRenderTargetTime = Infinity; // How long a render is supposed to take before we start following CPU\n// suspense heuristics and opt out of rendering more content.\n\nvar RENDER_TIMEOUT_MS = 500;\nvar workInProgressTransitions = null;\n\nfunction resetRenderTimer() {\n workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS;\n}\n\nfunction getRenderTargetTime() {\n return workInProgressRootRenderTargetTime;\n}\nvar hasUncaughtError = false;\nvar firstUncaughtError = null;\nvar legacyErrorBoundariesThatAlreadyFailed = null; // Only used when enableProfilerNestedUpdateScheduledHook is true;\nvar rootDoesHavePassiveEffects = false;\nvar rootWithPendingPassiveEffects = null;\nvar pendingPassiveEffectsLanes = NoLanes;\nvar pendingPassiveProfilerEffects = [];\nvar pendingPassiveEffectsRemainingLanes = NoLanes;\nvar pendingPassiveTransitions = null; // Use these to prevent an infinite loop of nested updates\n\nvar NESTED_UPDATE_LIMIT = 50;\nvar nestedUpdateCount = 0;\nvar rootWithNestedUpdates = null;\nvar isFlushingPassiveEffects = false;\nvar didScheduleUpdateDuringPassiveEffects = false;\nvar NESTED_PASSIVE_UPDATE_LIMIT = 50;\nvar nestedPassiveUpdateCount = 0;\nvar rootWithPassiveNestedUpdates = null;\nvar isRunningInsertionEffect = false;\nfunction getWorkInProgressRoot() {\n return workInProgressRoot;\n}\nfunction getWorkInProgressRootRenderLanes() {\n return workInProgressRootRenderLanes;\n}\nfunction isWorkLoopSuspendedOnData() {\n return workInProgressSuspendedReason === SuspendedOnData;\n}\nfunction requestUpdateLane(fiber) {\n // Special cases\n var mode = fiber.mode;\n\n if ((mode & ConcurrentMode) === NoMode) {\n return SyncLane;\n } else if ((executionContext & RenderContext) !== NoContext && workInProgressRootRenderLanes !== NoLanes) {\n // This is a render phase update. These are not officially supported. The\n // old behavior is to give this the same \"thread\" (lanes) as\n // whatever is currently rendering. So if you call `setState` on a component\n // that happens later in the same render, it will flush. Ideally, we want to\n // remove the special case and treat them as if they came from an\n // interleaved event. Regardless, this pattern is not officially supported.\n // This behavior is only a fallback. The flag only exists until we can roll\n // out the setState warning, since existing code might accidentally rely on\n // the current behavior.\n return pickArbitraryLane(workInProgressRootRenderLanes);\n }\n\n var isTransition = requestCurrentTransition() !== NoTransition;\n\n if (isTransition) {\n if (ReactCurrentBatchConfig$1.transition !== null) {\n var transition = ReactCurrentBatchConfig$1.transition;\n\n if (!transition._updatedFibers) {\n transition._updatedFibers = new Set();\n }\n\n transition._updatedFibers.add(fiber);\n }\n\n var actionScopeLane = peekEntangledActionLane();\n return actionScopeLane !== NoLane ? // We're inside an async action scope. Reuse the same lane.\n actionScopeLane : // We may or may not be inside an async action scope. If we are, this\n // is the first update in that scope. Either way, we need to get a\n // fresh transition lane.\n requestTransitionLane();\n } // Updates originating inside certain React methods, like flushSync, have\n // their priority set by tracking it with a context variable.\n //\n // The opaque type returned by the host config is internally a lane, so we can\n // use that directly.\n // TODO: Move this type conversion to the event priority module.\n\n\n var updateLane = getCurrentUpdatePriority();\n\n if (updateLane !== NoLane) {\n return updateLane;\n } // This update originated outside React. Ask the host environment for an\n // appropriate priority, based on the type of event.\n //\n // The opaque type returned by the host config is internally a lane, so we can\n // use that directly.\n // TODO: Move this type conversion to the event priority module.\n\n\n var eventLane = getCurrentEventPriority();\n return eventLane;\n}\n\nfunction requestRetryLane(fiber) {\n // This is a fork of `requestUpdateLane` designed specifically for Suspense\n // \"retries\" — a special update that attempts to flip a Suspense boundary\n // from its placeholder state to its primary/resolved state.\n // Special cases\n var mode = fiber.mode;\n\n if ((mode & ConcurrentMode) === NoMode) {\n return SyncLane;\n }\n\n return claimNextRetryLane();\n}\n\nfunction requestDeferredLane() {\n if (workInProgressDeferredLane === NoLane) {\n // If there are multiple useDeferredValue hooks in the same render, the\n // tasks that they spawn should all be batched together, so they should all\n // receive the same lane.\n // Check the priority of the current render to decide the priority of the\n // deferred task.\n // OffscreenLane is used for prerendering, but we also use OffscreenLane\n // for incremental hydration. It's given the lowest priority because the\n // initial HTML is the same as the final UI. But useDeferredValue during\n // hydration is an exception — we need to upgrade the UI to the final\n // value. So if we're currently hydrating, we treat it like a transition.\n var isPrerendering = includesSomeLane(workInProgressRootRenderLanes, OffscreenLane) && !getIsHydrating();\n\n if (isPrerendering) {\n // There's only one OffscreenLane, so if it contains deferred work, we\n // should just reschedule using the same lane.\n workInProgressDeferredLane = OffscreenLane;\n } else {\n // Everything else is spawned as a transition.\n workInProgressDeferredLane = requestTransitionLane();\n }\n } // Mark the parent Suspense boundary so it knows to spawn the deferred lane.\n\n\n var suspenseHandler = getSuspenseHandler();\n\n if (suspenseHandler !== null) {\n // TODO: As an optimization, we shouldn't entangle the lanes at the root; we\n // can entangle them using the baseLanes of the Suspense boundary instead.\n // We only need to do something special if there's no Suspense boundary.\n suspenseHandler.flags |= DidDefer;\n }\n\n return workInProgressDeferredLane;\n}\nfunction peekDeferredLane() {\n return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n {\n if (isRunningInsertionEffect) {\n error('useInsertionEffect must not schedule updates.');\n }\n }\n\n {\n if (isFlushingPassiveEffects) {\n didScheduleUpdateDuringPassiveEffects = true;\n }\n } // Check if the work loop is currently suspended and waiting for data to\n // finish loading.\n\n\n if ( // Suspended render phase\n root === workInProgressRoot && workInProgressSuspendedReason === SuspendedOnData || // Suspended commit phase\n root.cancelPendingCommit !== null) {\n // The incoming update might unblock the current render. Interrupt the\n // current attempt and restart from the top.\n prepareFreshStack(root, NoLanes);\n markRootSuspended(root, workInProgressRootRenderLanes, workInProgressDeferredLane);\n } // Mark that the root has a pending update.\n\n\n markRootUpdated(root, lane);\n\n if ((executionContext & RenderContext) !== NoLanes && root === workInProgressRoot) {\n // This update was dispatched during the render phase. This is a mistake\n // if the update originates from user space (with the exception of local\n // hook updates, which are handled differently and don't reach this\n // function), but there are some internal React features that use this as\n // an implementation detail, like selective hydration.\n warnAboutRenderPhaseUpdatesInDEV(fiber); // Track lanes that were updated during the render phase\n } else {\n // This is a normal update, scheduled from outside the render phase. For\n // example, during an input event.\n {\n if (isDevToolsPresent) {\n addFiberToLanesMap(root, fiber, lane);\n }\n }\n\n warnIfUpdatesNotWrappedWithActDEV(fiber);\n\n if (root === workInProgressRoot) {\n // Received an update to a tree that's in the middle of rendering. Mark\n // that there was an interleaved update work on this root.\n if ((executionContext & RenderContext) === NoContext) {\n workInProgressRootInterleavedUpdatedLanes = mergeLanes(workInProgressRootInterleavedUpdatedLanes, lane);\n }\n\n if (workInProgressRootExitStatus === RootSuspendedWithDelay) {\n // The root already suspended with a delay, which means this render\n // definitely won't finish. Since we have a new update, let's mark it as\n // suspended now, right before marking the incoming update. This has the\n // effect of interrupting the current render and switching to the update.\n // TODO: Make sure this doesn't override pings that happen while we've\n // already started rendering.\n markRootSuspended(root, workInProgressRootRenderLanes, workInProgressDeferredLane);\n }\n }\n\n ensureRootIsScheduled(root);\n\n if (lane === SyncLane && executionContext === NoContext && (fiber.mode & ConcurrentMode) === NoMode) {\n if (ReactCurrentActQueue.isBatchingLegacy) ; else {\n // Flush the synchronous work now, unless we're already working or inside\n // a batch. This is intentionally inside scheduleUpdateOnFiber instead of\n // scheduleCallbackForFiber to preserve the ability to schedule a callback\n // without immediately flushing it. We only do this for user-initiated\n // updates, to preserve historical behavior of legacy mode.\n resetRenderTimer();\n flushSyncWorkOnLegacyRootsOnly();\n }\n }\n }\n}\nfunction scheduleInitialHydrationOnRoot(root, lane) {\n // This is a special fork of scheduleUpdateOnFiber that is only used to\n // schedule the initial hydration of a root that has just been created. Most\n // of the stuff in scheduleUpdateOnFiber can be skipped.\n //\n // The main reason for this separate path, though, is to distinguish the\n // initial children from subsequent updates. In fully client-rendered roots\n // (createRoot instead of hydrateRoot), all top-level renders are modeled as\n // updates, but hydration roots are special because the initial render must\n // match what was rendered on the server.\n var current = root.current;\n current.lanes = lane;\n markRootUpdated(root, lane);\n ensureRootIsScheduled(root);\n}\nfunction isUnsafeClassRenderPhaseUpdate(fiber) {\n // Check if this is a render phase update. Only called by class components,\n // which special (deprecated) behavior for UNSAFE_componentWillReceive props.\n return (executionContext & RenderContext) !== NoContext;\n} // This is the entry point for every concurrent task, i.e. anything that\n// goes through Scheduler.\n\nfunction performConcurrentWorkOnRoot(root, didTimeout) {\n {\n resetNestedUpdateFlag();\n }\n\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n throw new Error('Should not already be working.');\n } // Flush any pending passive effects before deciding which lanes to work on,\n // in case they schedule additional work.\n\n\n var originalCallbackNode = root.callbackNode;\n var didFlushPassiveEffects = flushPassiveEffects();\n\n if (didFlushPassiveEffects) {\n // Something in the passive effect phase may have canceled the current task.\n // Check if the task node for this root was changed.\n if (root.callbackNode !== originalCallbackNode) {\n // The current task was canceled. Exit. We don't need to call\n // `ensureRootIsScheduled` because the check above implies either that\n // there's a new task, or that there's no remaining work on this root.\n return null;\n }\n } // Determine the next lanes to work on, using the fields stored\n // on the root.\n // TODO: This was already computed in the caller. Pass it as an argument.\n\n\n var lanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);\n\n if (lanes === NoLanes) {\n // Defensive coding. This is never expected to happen.\n return null;\n } // We disable time-slicing in some cases: if the work has been CPU-bound\n // for too long (\"expired\" work, to prevent starvation), or we're in\n // sync-updates-by-default mode.\n // TODO: We only check `didTimeout` defensively, to account for a Scheduler\n // bug we're still investigating. Once the bug in Scheduler is fixed,\n // we can remove this, since we track expiration ourselves.\n\n\n var shouldTimeSlice = !includesBlockingLane(root, lanes) && !includesExpiredLane(root, lanes) && (!didTimeout);\n var exitStatus = shouldTimeSlice ? renderRootConcurrent(root, lanes) : renderRootSync(root, lanes);\n\n if (exitStatus !== RootInProgress) {\n var renderWasConcurrent = shouldTimeSlice;\n\n do {\n if (exitStatus === RootDidNotComplete) {\n // The render unwound without completing the tree. This happens in special\n // cases where need to exit the current render without producing a\n // consistent tree or committing.\n markRootSuspended(root, lanes, NoLane);\n } else {\n // The render completed.\n // Check if this render may have yielded to a concurrent event, and if so,\n // confirm that any newly rendered stores are consistent.\n // TODO: It's possible that even a concurrent render may never have yielded\n // to the main thread, if it was fast enough, or if it expired. We could\n // skip the consistency check in that case, too.\n var finishedWork = root.current.alternate;\n\n if (renderWasConcurrent && !isRenderConsistentWithExternalStores(finishedWork)) {\n // A store was mutated in an interleaved event. Render again,\n // synchronously, to block further mutations.\n exitStatus = renderRootSync(root, lanes); // We assume the tree is now consistent because we didn't yield to any\n // concurrent events.\n\n renderWasConcurrent = false; // Need to check the exit status again.\n\n continue;\n } // Check if something threw\n\n\n if (exitStatus === RootErrored) {\n var originallyAttemptedLanes = lanes;\n var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root, originallyAttemptedLanes);\n\n if (errorRetryLanes !== NoLanes) {\n lanes = errorRetryLanes;\n exitStatus = recoverFromConcurrentError(root, originallyAttemptedLanes, errorRetryLanes);\n renderWasConcurrent = false;\n }\n }\n\n if (exitStatus === RootFatalErrored) {\n var fatalError = workInProgressRootFatalError;\n prepareFreshStack(root, NoLanes);\n markRootSuspended(root, lanes, NoLane);\n ensureRootIsScheduled(root);\n throw fatalError;\n } // We now have a consistent tree. The next step is either to commit it,\n // or, if something suspended, wait to commit it after a timeout.\n\n\n root.finishedWork = finishedWork;\n root.finishedLanes = lanes;\n finishConcurrentRender(root, exitStatus, finishedWork, lanes);\n }\n\n break;\n } while (true);\n }\n\n ensureRootIsScheduled(root);\n return getContinuationForRoot(root, originalCallbackNode);\n}\n\nfunction recoverFromConcurrentError(root, originallyAttemptedLanes, errorRetryLanes) {\n // If an error occurred during hydration, discard server response and fall\n // back to client side render.\n // Before rendering again, save the errors from the previous attempt.\n var errorsFromFirstAttempt = workInProgressRootConcurrentErrors;\n var wasRootDehydrated = isRootDehydrated(root);\n\n if (wasRootDehydrated) {\n // The shell failed to hydrate. Set a flag to force a client rendering\n // during the next attempt. To do this, we call prepareFreshStack now\n // to create the root work-in-progress fiber. This is a bit weird in terms\n // of factoring, because it relies on renderRootSync not calling\n // prepareFreshStack again in the call below, which happens because the\n // root and lanes haven't changed.\n //\n // TODO: I think what we should do is set ForceClientRender inside\n // throwException, like we do for nested Suspense boundaries. The reason\n // it's here instead is so we can switch to the synchronous work loop, too.\n // Something to consider for a future refactor.\n var rootWorkInProgress = prepareFreshStack(root, errorRetryLanes);\n rootWorkInProgress.flags |= ForceClientRender;\n\n {\n errorHydratingContainer(root.containerInfo);\n }\n }\n\n var exitStatus = renderRootSync(root, errorRetryLanes);\n\n if (exitStatus !== RootErrored) {\n // Successfully finished rendering on retry\n if (workInProgressRootDidAttachPingListener && !wasRootDehydrated) {\n // During the synchronous render, we attached additional ping listeners.\n // This is highly suggestive of an uncached promise (though it's not the\n // only reason this would happen). If it was an uncached promise, then\n // it may have masked a downstream error from ocurring without actually\n // fixing it. Example:\n //\n // use(Promise.resolve('uncached'))\n // throw new Error('Oops!')\n //\n // When this happens, there's a conflict between blocking potential\n // concurrent data races and unwrapping uncached promise values. We\n // have to choose one or the other. Because the data race recovery is\n // a last ditch effort, we'll disable it.\n root.errorRecoveryDisabledLanes = mergeLanes(root.errorRecoveryDisabledLanes, originallyAttemptedLanes); // Mark the current render as suspended and force it to restart. Once\n // these lanes finish successfully, we'll re-enable the error recovery\n // mechanism for subsequent updates.\n\n workInProgressRootInterleavedUpdatedLanes |= originallyAttemptedLanes;\n return RootSuspendedWithDelay;\n } // The errors from the failed first attempt have been recovered. Add\n // them to the collection of recoverable errors. We'll log them in the\n // commit phase.\n\n\n var errorsFromSecondAttempt = workInProgressRootRecoverableErrors;\n workInProgressRootRecoverableErrors = errorsFromFirstAttempt; // The errors from the second attempt should be queued after the errors\n // from the first attempt, to preserve the causal sequence.\n\n if (errorsFromSecondAttempt !== null) {\n queueRecoverableErrors(errorsFromSecondAttempt);\n }\n }\n\n return exitStatus;\n}\n\nfunction queueRecoverableErrors(errors) {\n if (workInProgressRootRecoverableErrors === null) {\n workInProgressRootRecoverableErrors = errors;\n } else {\n // $FlowFixMe[method-unbinding]\n workInProgressRootRecoverableErrors.push.apply(workInProgressRootRecoverableErrors, errors);\n }\n}\n\nfunction finishConcurrentRender(root, exitStatus, finishedWork, lanes) {\n // TODO: The fact that most of these branches are identical suggests that some\n // of the exit statuses are not best modeled as exit statuses and should be\n // tracked orthogonally.\n switch (exitStatus) {\n case RootInProgress:\n case RootFatalErrored:\n {\n throw new Error('Root did not complete. This is a bug in React.');\n }\n\n case RootSuspendedWithDelay:\n {\n if (includesOnlyTransitions(lanes)) {\n // This is a transition, so we should exit without committing a\n // placeholder and without scheduling a timeout. Delay indefinitely\n // until we receive more data.\n markRootSuspended(root, lanes, workInProgressDeferredLane);\n return;\n } // Commit the placeholder.\n\n\n break;\n }\n\n case RootErrored:\n case RootSuspended:\n case RootCompleted:\n {\n break;\n }\n\n default:\n {\n throw new Error('Unknown root exit status.');\n }\n }\n\n if (shouldForceFlushFallbacksInDEV()) {\n // We're inside an `act` scope. Commit immediately.\n commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions, workInProgressDeferredLane);\n } else {\n if (includesOnlyRetries(lanes) && (alwaysThrottleRetries )) {\n // This render only included retries, no updates. Throttle committing\n // retries so that we don't show too many loading states too quickly.\n var msUntilTimeout = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now$1(); // Don't bother with a very short suspense time.\n\n if (msUntilTimeout > 10) {\n markRootSuspended(root, lanes, workInProgressDeferredLane);\n var nextLanes = getNextLanes(root, NoLanes);\n\n if (nextLanes !== NoLanes) {\n // There's additional work we can do on this root. We might as well\n // attempt to work on that while we're suspended.\n return;\n } // The render is suspended, it hasn't timed out, and there's no\n // lower priority work to do. Instead of committing the fallback\n // immediately, wait for more data to arrive.\n // TODO: Combine retry throttling with Suspensey commits. Right now they\n // run one after the other.\n\n\n root.timeoutHandle = scheduleTimeout(commitRootWhenReady.bind(null, root, finishedWork, workInProgressRootRecoverableErrors, workInProgressTransitions, lanes, workInProgressDeferredLane), msUntilTimeout);\n return;\n }\n }\n\n commitRootWhenReady(root, finishedWork, workInProgressRootRecoverableErrors, workInProgressTransitions, lanes, workInProgressDeferredLane);\n }\n}\n\nfunction commitRootWhenReady(root, finishedWork, recoverableErrors, transitions, lanes, spawnedLane) {\n // TODO: Combine retry throttling with Suspensey commits. Right now they run\n // one after the other.\n if (includesOnlyNonUrgentLanes(lanes)) {\n // Before committing, ask the renderer whether the host tree is ready.\n // If it's not, we'll wait until it notifies us.\n startSuspendingCommit(); // This will walk the completed fiber tree and attach listeners to all\n // the suspensey resources. The renderer is responsible for accumulating\n // all the load events. This all happens in a single synchronous\n // transaction, so it track state in its own module scope.\n\n accumulateSuspenseyCommit(finishedWork); // At the end, ask the renderer if it's ready to commit, or if we should\n // suspend. If it's not ready, it will return a callback to subscribe to\n // a ready event.\n\n var schedulePendingCommit = waitForCommitToBeReady();\n\n if (schedulePendingCommit !== null) {\n // NOTE: waitForCommitToBeReady returns a subscribe function so that we\n // only allocate a function if the commit isn't ready yet. The other\n // pattern would be to always pass a callback to waitForCommitToBeReady.\n // Not yet ready to commit. Delay the commit until the renderer notifies\n // us that it's ready. This will be canceled if we start work on the\n // root again.\n root.cancelPendingCommit = schedulePendingCommit(commitRoot.bind(null, root, recoverableErrors, transitions));\n markRootSuspended(root, lanes, spawnedLane);\n return;\n }\n } // Otherwise, commit immediately.\n\n\n commitRoot(root, recoverableErrors, transitions, spawnedLane);\n}\n\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n // Search the rendered tree for external store reads, and check whether the\n // stores were mutated in a concurrent event. Intentionally using an iterative\n // loop instead of recursion so we can exit early.\n var node = finishedWork;\n\n while (true) {\n if (node.flags & StoreConsistency) {\n var updateQueue = node.updateQueue;\n\n if (updateQueue !== null) {\n var checks = updateQueue.stores;\n\n if (checks !== null) {\n for (var i = 0; i < checks.length; i++) {\n var check = checks[i];\n var getSnapshot = check.getSnapshot;\n var renderedValue = check.value;\n\n try {\n if (!objectIs(getSnapshot(), renderedValue)) {\n // Found an inconsistent store.\n return false;\n }\n } catch (error) {\n // If `getSnapshot` throws, return `false`. This will schedule\n // a re-render, and the error will be rethrown during render.\n return false;\n }\n }\n }\n }\n }\n\n var child = node.child;\n\n if (node.subtreeFlags & StoreConsistency && child !== null) {\n child.return = node;\n node = child;\n continue;\n }\n\n if (node === finishedWork) {\n return true;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === finishedWork) {\n return true;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n } // Flow doesn't know this is unreachable, but eslint does\n // eslint-disable-next-line no-unreachable\n\n\n return true;\n}\n\nfunction markRootSuspended(root, suspendedLanes, spawnedLane) {\n // When suspending, we should always exclude lanes that were pinged or (more\n // rarely, since we try to avoid it) updated during the render phase.\n // TODO: Lol maybe there's a better way to factor this besides this\n // obnoxiously named function :)\n suspendedLanes = removeLanes(suspendedLanes, workInProgressRootPingedLanes);\n suspendedLanes = removeLanes(suspendedLanes, workInProgressRootInterleavedUpdatedLanes);\n markRootSuspended$1(root, suspendedLanes, spawnedLane);\n} // This is the entry point for synchronous tasks that don't go\n// through Scheduler\n\n\nfunction performSyncWorkOnRoot(root, lanes) {\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n throw new Error('Should not already be working.');\n }\n\n var didFlushPassiveEffects = flushPassiveEffects();\n\n if (didFlushPassiveEffects) {\n // If passive effects were flushed, exit to the outer work loop in the root\n // scheduler, so we can recompute the priority.\n // TODO: We don't actually need this `ensureRootIsScheduled` call because\n // this path is only reachable if the root is already part of the schedule.\n // I'm including it only for consistency with the other exit points from\n // this function. Can address in a subsequent refactor.\n ensureRootIsScheduled(root);\n return null;\n }\n\n {\n syncNestedUpdateFlag();\n }\n\n var exitStatus = renderRootSync(root, lanes);\n\n if (root.tag !== LegacyRoot && exitStatus === RootErrored) {\n // If something threw an error, try rendering one more time. We'll render\n // synchronously to block concurrent data mutations, and we'll includes\n // all pending updates are included. If it still fails after the second\n // attempt, we'll give up and commit the resulting tree.\n var originallyAttemptedLanes = lanes;\n var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root, originallyAttemptedLanes);\n\n if (errorRetryLanes !== NoLanes) {\n lanes = errorRetryLanes;\n exitStatus = recoverFromConcurrentError(root, originallyAttemptedLanes, errorRetryLanes);\n }\n }\n\n if (exitStatus === RootFatalErrored) {\n var fatalError = workInProgressRootFatalError;\n prepareFreshStack(root, NoLanes);\n markRootSuspended(root, lanes, NoLane);\n ensureRootIsScheduled(root);\n throw fatalError;\n }\n\n if (exitStatus === RootDidNotComplete) {\n // The render unwound without completing the tree. This happens in special\n // cases where need to exit the current render without producing a\n // consistent tree or committing.\n markRootSuspended(root, lanes, workInProgressDeferredLane);\n ensureRootIsScheduled(root);\n return null;\n } // We now have a consistent tree. Because this is a sync render, we\n // will commit it even if something suspended.\n\n\n var finishedWork = root.current.alternate;\n root.finishedWork = finishedWork;\n root.finishedLanes = lanes;\n commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions, workInProgressDeferredLane); // Before exiting, make sure there's a callback scheduled for the next\n // pending level.\n\n ensureRootIsScheduled(root);\n return null;\n}\nfunction flushRoot(root, lanes) {\n if (lanes !== NoLanes) {\n upgradePendingLanesToSync(root, lanes);\n ensureRootIsScheduled(root);\n\n if ((executionContext & (RenderContext | CommitContext)) === NoContext) {\n resetRenderTimer(); // TODO: For historical reasons this flushes all sync work across all\n // roots. It shouldn't really matter either way, but we could change this\n // to only flush the given root.\n\n flushSyncWorkOnAllRoots();\n }\n }\n}\nfunction getExecutionContext() {\n return executionContext;\n}\nfunction batchedUpdates$1(fn, a) {\n var prevExecutionContext = executionContext;\n executionContext |= BatchedContext;\n\n try {\n return fn(a);\n } finally {\n executionContext = prevExecutionContext; // If there were legacy sync updates, flush them at the end of the outer\n // most batchedUpdates-like method.\n\n if (executionContext === NoContext && // Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.\n !(ReactCurrentActQueue.isBatchingLegacy)) {\n resetRenderTimer();\n flushSyncWorkOnLegacyRootsOnly();\n }\n }\n}\n// Warning, this opts-out of checking the function body.\n// eslint-disable-next-line no-unused-vars\n// eslint-disable-next-line no-redeclare\n// eslint-disable-next-line no-redeclare\n\nfunction flushSync$1(fn) {\n // In legacy mode, we flush pending passive effects at the beginning of the\n // next event, not at the end of the previous one.\n if (rootWithPendingPassiveEffects !== null && rootWithPendingPassiveEffects.tag === LegacyRoot && (executionContext & (RenderContext | CommitContext)) === NoContext) {\n flushPassiveEffects();\n }\n\n var prevExecutionContext = executionContext;\n executionContext |= BatchedContext;\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n var previousPriority = getCurrentUpdatePriority();\n\n try {\n ReactCurrentBatchConfig$1.transition = null;\n setCurrentUpdatePriority(DiscreteEventPriority);\n\n if (fn) {\n return fn();\n } else {\n return undefined;\n }\n } finally {\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig$1.transition = prevTransition;\n executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch.\n // Note that this will happen even if batchedUpdates is higher up\n // the stack.\n\n if ((executionContext & (RenderContext | CommitContext)) === NoContext) {\n flushSyncWorkOnAllRoots();\n }\n }\n}\nfunction isAlreadyRendering() {\n // Used by the renderer to print a warning if certain APIs are called from\n // the wrong context.\n return (executionContext & (RenderContext | CommitContext)) !== NoContext;\n}\n// hidden subtree. The stack logic is managed there because that's the only\n// place that ever modifies it. Which module it lives in doesn't matter for\n// performance because this function will get inlined regardless\n\nfunction setEntangledRenderLanes(newEntangledRenderLanes) {\n entangledRenderLanes = newEntangledRenderLanes;\n}\nfunction getEntangledRenderLanes() {\n return entangledRenderLanes;\n}\n\nfunction resetWorkInProgressStack() {\n if (workInProgress === null) return;\n var interruptedWork;\n\n if (workInProgressSuspendedReason === NotSuspended) {\n // Normal case. Work-in-progress hasn't started yet. Unwind all\n // its parents.\n interruptedWork = workInProgress.return;\n } else {\n // Work-in-progress is in suspended state. Reset the work loop and unwind\n // both the suspended fiber and all its parents.\n resetSuspendedWorkLoopOnUnwind(workInProgress);\n interruptedWork = workInProgress;\n }\n\n while (interruptedWork !== null) {\n var current = interruptedWork.alternate;\n unwindInterruptedWork(current, interruptedWork);\n interruptedWork = interruptedWork.return;\n }\n\n workInProgress = null;\n}\n\nfunction prepareFreshStack(root, lanes) {\n root.finishedWork = null;\n root.finishedLanes = NoLanes;\n var timeoutHandle = root.timeoutHandle;\n\n if (timeoutHandle !== noTimeout) {\n // The root previous suspended and scheduled a timeout to commit a fallback\n // state. Now that we have additional work, cancel the timeout.\n root.timeoutHandle = noTimeout; // $FlowFixMe[incompatible-call] Complains noTimeout is not a TimeoutID, despite the check above\n\n cancelTimeout(timeoutHandle);\n }\n\n var cancelPendingCommit = root.cancelPendingCommit;\n\n if (cancelPendingCommit !== null) {\n root.cancelPendingCommit = null;\n cancelPendingCommit();\n }\n\n resetWorkInProgressStack();\n workInProgressRoot = root;\n var rootWorkInProgress = createWorkInProgress(root.current, null);\n workInProgress = rootWorkInProgress;\n workInProgressRootRenderLanes = lanes;\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n workInProgressRootDidAttachPingListener = false;\n workInProgressRootExitStatus = RootInProgress;\n workInProgressRootFatalError = null;\n workInProgressRootSkippedLanes = NoLanes;\n workInProgressRootInterleavedUpdatedLanes = NoLanes;\n workInProgressRootPingedLanes = NoLanes;\n workInProgressDeferredLane = NoLane;\n workInProgressRootConcurrentErrors = null;\n workInProgressRootRecoverableErrors = null; // Get the lanes that are entangled with whatever we're about to render. We\n // track these separately so we can distinguish the priority of the render\n // task from the priority of the lanes it is entangled with. For example, a\n // transition may not be allowed to finish unless it includes the Sync lane,\n // which is currently suspended. We should be able to render the Transition\n // and Sync lane in the same batch, but at Transition priority, because the\n // Sync lane already suspended.\n\n entangledRenderLanes = getEntangledLanes(root, lanes);\n finishQueueingConcurrentUpdates();\n\n {\n ReactStrictModeWarnings.discardPendingWarnings();\n }\n\n return rootWorkInProgress;\n}\n\nfunction resetSuspendedWorkLoopOnUnwind(fiber) {\n // Reset module-level state that was set during the render phase.\n resetContextDependencies();\n resetHooksOnUnwind(fiber);\n resetChildReconcilerOnUnwind();\n}\n\nfunction handleThrow(root, thrownValue) {\n // A component threw an exception. Usually this is because it suspended, but\n // it also includes regular program errors.\n //\n // We're either going to unwind the stack to show a Suspense or error\n // boundary, or we're going to replay the component again. Like after a\n // promise resolves.\n //\n // Until we decide whether we're going to unwind or replay, we should preserve\n // the current state of the work loop without resetting anything.\n //\n // If we do decide to unwind the stack, module-level variables will be reset\n // in resetSuspendedWorkLoopOnUnwind.\n // These should be reset immediately because they're only supposed to be set\n // when React is executing user code.\n resetHooksAfterThrow();\n resetCurrentFiber();\n ReactCurrentOwner$1.current = null;\n\n if (thrownValue === SuspenseException) {\n // This is a special type of exception used for Suspense. For historical\n // reasons, the rest of the Suspense implementation expects the thrown value\n // to be a thenable, because before `use` existed that was the (unstable)\n // API for suspending. This implementation detail can change later, once we\n // deprecate the old API in favor of `use`.\n thrownValue = getSuspendedThenable();\n workInProgressSuspendedReason = shouldRemainOnPreviousScreen() && // Check if there are other pending updates that might possibly unblock this\n // component from suspending. This mirrors the check in\n // renderDidSuspendDelayIfPossible. We should attempt to unify them somehow.\n // TODO: Consider unwinding immediately, using the\n // SuspendedOnHydration mechanism.\n !includesNonIdleWork(workInProgressRootSkippedLanes) && !includesNonIdleWork(workInProgressRootInterleavedUpdatedLanes) ? // Suspend work loop until data resolves\n SuspendedOnData : // Don't suspend work loop, except to check if the data has\n // immediately resolved (i.e. in a microtask). Otherwise, trigger the\n // nearest Suspense fallback.\n SuspendedOnImmediate;\n } else if (thrownValue === SuspenseyCommitException) {\n thrownValue = getSuspendedThenable();\n workInProgressSuspendedReason = SuspendedOnInstance;\n } else if (thrownValue === SelectiveHydrationException) {\n // An update flowed into a dehydrated boundary. Before we can apply the\n // update, we need to finish hydrating. Interrupt the work-in-progress\n // render so we can restart at the hydration lane.\n //\n // The ideal implementation would be able to switch contexts without\n // unwinding the current stack.\n //\n // We could name this something more general but as of now it's the only\n // case where we think this should happen.\n workInProgressSuspendedReason = SuspendedOnHydration;\n } else {\n // This is a regular error.\n var isWakeable = thrownValue !== null && typeof thrownValue === 'object' && typeof thrownValue.then === 'function';\n workInProgressSuspendedReason = isWakeable ? // A wakeable object was thrown by a legacy Suspense implementation.\n // This has slightly different behavior than suspending with `use`.\n SuspendedOnDeprecatedThrowPromise : // This is a regular error. If something earlier in the component already\n // suspended, we must clear the thenable state to unblock the work loop.\n SuspendedOnError;\n }\n\n workInProgressThrownValue = thrownValue;\n var erroredWork = workInProgress;\n\n if (erroredWork === null) {\n // This is a fatal error\n workInProgressRootExitStatus = RootFatalErrored;\n workInProgressRootFatalError = thrownValue;\n return;\n }\n\n if (erroredWork.mode & ProfileMode) {\n // Record the time spent rendering before an error was thrown. This\n // avoids inaccurate Profiler durations in the case of a\n // suspended render.\n stopProfilerTimerIfRunningAndRecordDelta(erroredWork, true);\n }\n\n {\n markComponentRenderStopped();\n\n switch (workInProgressSuspendedReason) {\n case SuspendedOnError:\n {\n markComponentErrored(erroredWork, thrownValue, workInProgressRootRenderLanes);\n break;\n }\n\n case SuspendedOnData:\n case SuspendedOnImmediate:\n case SuspendedOnDeprecatedThrowPromise:\n case SuspendedAndReadyToContinue:\n {\n var wakeable = thrownValue;\n markComponentSuspended(erroredWork, wakeable, workInProgressRootRenderLanes);\n break;\n }\n }\n }\n}\n\nfunction shouldRemainOnPreviousScreen() {\n // This is asking whether it's better to suspend the transition and remain\n // on the previous screen, versus showing a fallback as soon as possible. It\n // takes into account both the priority of render and also whether showing a\n // fallback would produce a desirable user experience.\n var handler = getSuspenseHandler();\n\n if (handler === null) {\n // There's no Suspense boundary that can provide a fallback. We have no\n // choice but to remain on the previous screen.\n // NOTE: We do this even for sync updates, for lack of any better option. In\n // the future, we may change how we handle this, like by putting the whole\n // root into a \"detached\" mode.\n return true;\n } // TODO: Once `use` has fully replaced the `throw promise` pattern, we should\n // be able to remove the equivalent check in finishConcurrentRender, and rely\n // just on this one.\n\n\n if (includesOnlyTransitions(workInProgressRootRenderLanes)) {\n if (getShellBoundary() === null) {\n // We're rendering inside the \"shell\" of the app. Activating the nearest\n // fallback would cause visible content to disappear. It's better to\n // suspend the transition and remain on the previous screen.\n return true;\n } else {\n // We're rendering content that wasn't part of the previous screen.\n // Rather than block the transition, it's better to show a fallback as\n // soon as possible. The appearance of any nested fallbacks will be\n // throttled to avoid jank.\n return false;\n }\n }\n\n if (includesOnlyRetries(workInProgressRootRenderLanes) || // In this context, an OffscreenLane counts as a Retry\n // TODO: It's become increasingly clear that Retries and Offscreen are\n // deeply connected. They probably can be unified further.\n includesSomeLane(workInProgressRootRenderLanes, OffscreenLane)) {\n // During a retry, we can suspend rendering if the nearest Suspense boundary\n // is the boundary of the \"shell\", because we're guaranteed not to block\n // any new content from appearing.\n //\n // The reason we must check if this is a retry is because it guarantees\n // that suspending the work loop won't block an actual update, because\n // retries don't \"update\" anything; they fill in fallbacks that were left\n // behind by a previous transition.\n return handler === getShellBoundary();\n } // For all other Lanes besides Transitions and Retries, we should not wait\n // for the data to load.\n\n\n return false;\n}\n\nfunction pushDispatcher(container) {\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = ContextOnlyDispatcher;\n\n if (prevDispatcher === null) {\n // The React isomorphic package does not include a default dispatcher.\n // Instead the first renderer will lazily attach one, in order to give\n // nicer error messages.\n return ContextOnlyDispatcher;\n } else {\n return prevDispatcher;\n }\n}\n\nfunction popDispatcher(prevDispatcher) {\n ReactCurrentDispatcher.current = prevDispatcher;\n}\n\nfunction pushCacheDispatcher() {\n {\n var prevCacheDispatcher = ReactCurrentCache.current;\n ReactCurrentCache.current = DefaultCacheDispatcher;\n return prevCacheDispatcher;\n }\n}\n\nfunction popCacheDispatcher(prevCacheDispatcher) {\n {\n ReactCurrentCache.current = prevCacheDispatcher;\n }\n}\n\nfunction markCommitTimeOfFallback() {\n globalMostRecentFallbackTime = now$1();\n}\nfunction markSkippedUpdateLanes(lane) {\n workInProgressRootSkippedLanes = mergeLanes(lane, workInProgressRootSkippedLanes);\n}\nfunction renderDidSuspend() {\n if (workInProgressRootExitStatus === RootInProgress) {\n workInProgressRootExitStatus = RootSuspended;\n }\n}\nfunction renderDidSuspendDelayIfPossible() {\n workInProgressRootExitStatus = RootSuspendedWithDelay; // Check if there are updates that we skipped tree that might have unblocked\n // this render.\n\n if ((includesNonIdleWork(workInProgressRootSkippedLanes) || includesNonIdleWork(workInProgressRootInterleavedUpdatedLanes)) && workInProgressRoot !== null) {\n // Mark the current render as suspended so that we switch to working on\n // the updates that were skipped. Usually we only suspend at the end of\n // the render phase.\n // TODO: We should probably always mark the root as suspended immediately\n // (inside this function), since by suspending at the end of the render\n // phase introduces a potential mistake where we suspend lanes that were\n // pinged or updated while we were rendering.\n // TODO: Consider unwinding immediately, using the\n // SuspendedOnHydration mechanism.\n markRootSuspended(workInProgressRoot, workInProgressRootRenderLanes, workInProgressDeferredLane);\n }\n}\nfunction renderDidError(error) {\n if (workInProgressRootExitStatus !== RootSuspendedWithDelay) {\n workInProgressRootExitStatus = RootErrored;\n }\n\n if (workInProgressRootConcurrentErrors === null) {\n workInProgressRootConcurrentErrors = [error];\n } else {\n workInProgressRootConcurrentErrors.push(error);\n }\n} // Called during render to determine if anything has suspended.\n// Returns false if we're not sure.\n\nfunction renderHasNotSuspendedYet() {\n // If something errored or completed, we can't really be sure,\n // so those are false.\n return workInProgressRootExitStatus === RootInProgress;\n} // TODO: Over time, this function and renderRootConcurrent have become more\n// and more similar. Not sure it makes sense to maintain forked paths. Consider\n// unifying them again.\n\nfunction renderRootSync(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher();\n var prevCacheDispatcher = pushCacheDispatcher(); // If the root or lanes have changed, throw out the existing stack\n // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {\n {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n\n if (memoizedUpdaters.size > 0) {\n restorePendingUpdaters(root, workInProgressRootRenderLanes);\n memoizedUpdaters.clear();\n } // At this point, move Fibers that scheduled the upcoming work from the Map to the Set.\n // If we bailout on this work, we'll move them back (like above).\n // It's important to move them now in case the work spawns more work at the same priority with different updaters.\n // That way we can keep the current update and future updates separate.\n\n\n movePendingFibersToMemoized(root, lanes);\n }\n }\n\n workInProgressTransitions = getTransitionsForLanes();\n prepareFreshStack(root, lanes);\n }\n\n {\n markRenderStarted(lanes);\n }\n\n var didSuspendInShell = false;\n\n outer: do {\n try {\n if (workInProgressSuspendedReason !== NotSuspended && workInProgress !== null) {\n // The work loop is suspended. During a synchronous render, we don't\n // yield to the main thread. Immediately unwind the stack. This will\n // trigger either a fallback or an error boundary.\n // TODO: For discrete and \"default\" updates (anything that's not\n // flushSync), we want to wait for the microtasks the flush before\n // unwinding. Will probably implement this using renderRootConcurrent,\n // or merge renderRootSync and renderRootConcurrent into the same\n // function and fork the behavior some other way.\n var unitOfWork = workInProgress;\n var thrownValue = workInProgressThrownValue;\n\n switch (workInProgressSuspendedReason) {\n case SuspendedOnHydration:\n {\n // Selective hydration. An update flowed into a dehydrated tree.\n // Interrupt the current render so the work loop can switch to the\n // hydration lane.\n resetWorkInProgressStack();\n workInProgressRootExitStatus = RootDidNotComplete;\n break outer;\n }\n\n case SuspendedOnImmediate:\n case SuspendedOnData:\n {\n if (!didSuspendInShell && getSuspenseHandler() === null) {\n didSuspendInShell = true;\n } // Intentional fallthrough\n\n }\n\n default:\n {\n // Unwind then continue with the normal work loop.\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(unitOfWork, thrownValue);\n break;\n }\n }\n }\n\n workLoopSync();\n break;\n } catch (thrownValue) {\n handleThrow(root, thrownValue);\n }\n } while (true); // Check if something suspended in the shell. We use this to detect an\n // infinite ping loop caused by an uncached promise.\n //\n // Only increment this counter once per synchronous render attempt across the\n // whole tree. Even if there are many sibling components that suspend, this\n // counter only gets incremented once.\n\n\n if (didSuspendInShell) {\n root.shellSuspendCounter++;\n }\n\n resetContextDependencies();\n executionContext = prevExecutionContext;\n popDispatcher(prevDispatcher);\n popCacheDispatcher(prevCacheDispatcher);\n\n if (workInProgress !== null) {\n // This is a sync render, so we should have finished the whole tree.\n throw new Error('Cannot commit an incomplete root. This error is likely caused by a ' + 'bug in React. Please file an issue.');\n }\n\n {\n markRenderStopped();\n } // Set this to null to indicate there's no in-progress render.\n\n\n workInProgressRoot = null;\n workInProgressRootRenderLanes = NoLanes; // It's safe to process the queue now that the render phase is complete.\n\n finishQueueingConcurrentUpdates();\n return workInProgressRootExitStatus;\n} // The work loop is an extremely hot path. Tell Closure not to inline it.\n\n/** @noinline */\n\n\nfunction workLoopSync() {\n // Perform work without checking if we need to yield between fiber.\n while (workInProgress !== null) {\n performUnitOfWork(workInProgress);\n }\n}\n\nfunction renderRootConcurrent(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher();\n var prevCacheDispatcher = pushCacheDispatcher(); // If the root or lanes have changed, throw out the existing stack\n // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {\n {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n\n if (memoizedUpdaters.size > 0) {\n restorePendingUpdaters(root, workInProgressRootRenderLanes);\n memoizedUpdaters.clear();\n } // At this point, move Fibers that scheduled the upcoming work from the Map to the Set.\n // If we bailout on this work, we'll move them back (like above).\n // It's important to move them now in case the work spawns more work at the same priority with different updaters.\n // That way we can keep the current update and future updates separate.\n\n\n movePendingFibersToMemoized(root, lanes);\n }\n }\n\n workInProgressTransitions = getTransitionsForLanes();\n resetRenderTimer();\n prepareFreshStack(root, lanes);\n }\n\n {\n markRenderStarted(lanes);\n }\n\n outer: do {\n try {\n if (workInProgressSuspendedReason !== NotSuspended && workInProgress !== null) {\n // The work loop is suspended. We need to either unwind the stack or\n // replay the suspended component.\n var unitOfWork = workInProgress;\n var thrownValue = workInProgressThrownValue;\n\n resumeOrUnwind: switch (workInProgressSuspendedReason) {\n case SuspendedOnError:\n {\n // Unwind then continue with the normal work loop.\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(unitOfWork, thrownValue);\n break;\n }\n\n case SuspendedOnData:\n {\n var thenable = thrownValue;\n\n if (isThenableResolved(thenable)) {\n // The data resolved. Try rendering the component again.\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n replaySuspendedUnitOfWork(unitOfWork);\n break;\n } // The work loop is suspended on data. We should wait for it to\n // resolve before continuing to render.\n // TODO: Handle the case where the promise resolves synchronously.\n // Usually this is handled when we instrument the promise to add a\n // `status` field, but if the promise already has a status, we won't\n // have added a listener until right here.\n\n\n var onResolution = function () {\n // Check if the root is still suspended on this promise.\n if (workInProgressSuspendedReason === SuspendedOnData && workInProgressRoot === root) {\n // Mark the root as ready to continue rendering.\n workInProgressSuspendedReason = SuspendedAndReadyToContinue;\n } // Ensure the root is scheduled. We should do this even if we're\n // currently working on a different root, so that we resume\n // rendering later.\n\n\n ensureRootIsScheduled(root);\n };\n\n thenable.then(onResolution, onResolution);\n break outer;\n }\n\n case SuspendedOnImmediate:\n {\n // If this fiber just suspended, it's possible the data is already\n // cached. Yield to the main thread to give it a chance to ping. If\n // it does, we can retry immediately without unwinding the stack.\n workInProgressSuspendedReason = SuspendedAndReadyToContinue;\n break outer;\n }\n\n case SuspendedOnInstance:\n {\n workInProgressSuspendedReason = SuspendedOnInstanceAndReadyToContinue;\n break outer;\n }\n\n case SuspendedAndReadyToContinue:\n {\n var _thenable = thrownValue;\n\n if (isThenableResolved(_thenable)) {\n // The data resolved. Try rendering the component again.\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n replaySuspendedUnitOfWork(unitOfWork);\n } else {\n // Otherwise, unwind then continue with the normal work loop.\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(unitOfWork, thrownValue);\n }\n\n break;\n }\n\n case SuspendedOnInstanceAndReadyToContinue:\n {\n switch (workInProgress.tag) {\n case HostComponent:\n case HostHoistable:\n case HostSingleton:\n {\n // Before unwinding the stack, check one more time if the\n // instance is ready. It may have loaded when React yielded to\n // the main thread.\n // Assigning this to a constant so Flow knows the binding won't\n // be mutated by `preloadInstance`.\n var hostFiber = workInProgress;\n var type = hostFiber.type;\n var props = hostFiber.pendingProps;\n var isReady = preloadInstance(type, props);\n\n if (isReady) {\n // The data resolved. Resume the work loop as if nothing\n // suspended. Unlike when a user component suspends, we don't\n // have to replay anything because the host fiber\n // already completed.\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n var sibling = hostFiber.sibling;\n\n if (sibling !== null) {\n workInProgress = sibling;\n } else {\n var returnFiber = hostFiber.return;\n\n if (returnFiber !== null) {\n workInProgress = returnFiber;\n completeUnitOfWork(returnFiber);\n } else {\n workInProgress = null;\n }\n }\n\n break resumeOrUnwind;\n }\n\n break;\n }\n\n default:\n {\n // This will fail gracefully but it's not correct, so log a\n // warning in dev.\n if (true) {\n error('Unexpected type of fiber triggered a suspensey commit. ' + 'This is a bug in React.');\n }\n\n break;\n }\n } // Otherwise, unwind then continue with the normal work loop.\n\n\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(unitOfWork, thrownValue);\n break;\n }\n\n case SuspendedOnDeprecatedThrowPromise:\n {\n // Suspended by an old implementation that uses the `throw promise`\n // pattern. The newer replaying behavior can cause subtle issues\n // like infinite ping loops. So we maintain the old behavior and\n // always unwind.\n workInProgressSuspendedReason = NotSuspended;\n workInProgressThrownValue = null;\n throwAndUnwindWorkLoop(unitOfWork, thrownValue);\n break;\n }\n\n case SuspendedOnHydration:\n {\n // Selective hydration. An update flowed into a dehydrated tree.\n // Interrupt the current render so the work loop can switch to the\n // hydration lane.\n resetWorkInProgressStack();\n workInProgressRootExitStatus = RootDidNotComplete;\n break outer;\n }\n\n default:\n {\n throw new Error('Unexpected SuspendedReason. This is a bug in React.');\n }\n }\n }\n\n if ( true && ReactCurrentActQueue.current !== null) {\n // `act` special case: If we're inside an `act` scope, don't consult\n // `shouldYield`. Always keep working until the render is complete.\n // This is not just an optimization: in a unit test environment, we\n // can't trust the result of `shouldYield`, because the host I/O is\n // likely mocked.\n workLoopSync();\n } else {\n workLoopConcurrent();\n }\n\n break;\n } catch (thrownValue) {\n handleThrow(root, thrownValue);\n }\n } while (true);\n\n resetContextDependencies();\n popDispatcher(prevDispatcher);\n popCacheDispatcher(prevCacheDispatcher);\n executionContext = prevExecutionContext;\n\n\n if (workInProgress !== null) {\n // Still work remaining.\n {\n markRenderYielded();\n }\n\n return RootInProgress;\n } else {\n // Completed the tree.\n {\n markRenderStopped();\n } // Set this to null to indicate there's no in-progress render.\n\n\n workInProgressRoot = null;\n workInProgressRootRenderLanes = NoLanes; // It's safe to process the queue now that the render phase is complete.\n\n finishQueueingConcurrentUpdates(); // Return the final exit status.\n\n return workInProgressRootExitStatus;\n }\n}\n/** @noinline */\n\n\nfunction workLoopConcurrent() {\n // Perform work until Scheduler asks us to yield\n while (workInProgress !== null && !shouldYield()) {\n // $FlowFixMe[incompatible-call] found when upgrading Flow\n performUnitOfWork(workInProgress);\n }\n}\n\nfunction performUnitOfWork(unitOfWork) {\n // The current, flushed, state of this fiber is the alternate. Ideally\n // nothing should rely on this, but relying on it here means that we don't\n // need an additional field on the work in progress.\n var current = unitOfWork.alternate;\n setCurrentFiber(unitOfWork);\n var next;\n\n if ((unitOfWork.mode & ProfileMode) !== NoMode) {\n startProfilerTimer(unitOfWork);\n next = beginWork(current, unitOfWork, entangledRenderLanes);\n stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true);\n } else {\n next = beginWork(current, unitOfWork, entangledRenderLanes);\n }\n\n resetCurrentFiber();\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n\n if (next === null) {\n // If this doesn't spawn new work, complete the current work.\n completeUnitOfWork(unitOfWork);\n } else {\n workInProgress = next;\n }\n\n ReactCurrentOwner$1.current = null;\n}\n\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n // This is a fork of performUnitOfWork specifcally for replaying a fiber that\n // just suspended.\n //\n var current = unitOfWork.alternate;\n setCurrentFiber(unitOfWork);\n var next;\n setCurrentFiber(unitOfWork);\n var isProfilingMode = (unitOfWork.mode & ProfileMode) !== NoMode;\n\n if (isProfilingMode) {\n startProfilerTimer(unitOfWork);\n }\n\n switch (unitOfWork.tag) {\n case IndeterminateComponent:\n {\n // Because it suspended with `use`, we can assume it's a\n // function component.\n unitOfWork.tag = FunctionComponent; // Fallthrough to the next branch.\n }\n\n case SimpleMemoComponent:\n case FunctionComponent:\n {\n // Resolve `defaultProps`. This logic is copied from `beginWork`.\n // TODO: Consider moving this switch statement into that module. Also,\n // could maybe use this as an opportunity to say `use` doesn't work with\n // `defaultProps` :)\n var Component = unitOfWork.type;\n var unresolvedProps = unitOfWork.pendingProps;\n var resolvedProps = unitOfWork.elementType === Component ? unresolvedProps : resolveDefaultProps(Component, unresolvedProps);\n var context;\n\n {\n var unmaskedContext = getUnmaskedContext(unitOfWork, Component, true);\n context = getMaskedContext(unitOfWork, unmaskedContext);\n }\n\n next = replayFunctionComponent(current, unitOfWork, resolvedProps, Component, context, workInProgressRootRenderLanes);\n break;\n }\n\n case ForwardRef:\n {\n // Resolve `defaultProps`. This logic is copied from `beginWork`.\n // TODO: Consider moving this switch statement into that module. Also,\n // could maybe use this as an opportunity to say `use` doesn't work with\n // `defaultProps` :)\n var _Component = unitOfWork.type.render;\n var _unresolvedProps = unitOfWork.pendingProps;\n\n var _resolvedProps = unitOfWork.elementType === _Component ? _unresolvedProps : resolveDefaultProps(_Component, _unresolvedProps);\n\n next = replayFunctionComponent(current, unitOfWork, _resolvedProps, _Component, unitOfWork.ref, workInProgressRootRenderLanes);\n break;\n }\n\n case HostComponent:\n {\n // Some host components are stateful (that's how we implement form\n // actions) but we don't bother to reuse the memoized state because it's\n // not worth the extra code. The main reason to reuse the previous hooks\n // is to reuse uncached promises, but we happen to know that the only\n // promises that a host component might suspend on are definitely cached\n // because they are controlled by us. So don't bother.\n resetHooksOnUnwind(unitOfWork); // Fallthrough to the next branch.\n }\n\n default:\n {\n // Other types besides function components are reset completely before\n // being replayed. Currently this only happens when a Usable type is\n // reconciled — the reconciler will suspend.\n //\n // We reset the fiber back to its original state; however, this isn't\n // a full \"unwind\" because we're going to reuse the promises that were\n // reconciled previously. So it's intentional that we don't call\n // resetSuspendedWorkLoopOnUnwind here.\n unwindInterruptedWork(current, unitOfWork);\n unitOfWork = workInProgress = resetWorkInProgress(unitOfWork, entangledRenderLanes);\n next = beginWork(current, unitOfWork, entangledRenderLanes);\n break;\n }\n }\n\n if (isProfilingMode) {\n stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true);\n } // The begin phase finished successfully without suspending. Return to the\n // normal work loop.\n\n\n resetCurrentFiber();\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n\n if (next === null) {\n // If this doesn't spawn new work, complete the current work.\n completeUnitOfWork(unitOfWork);\n } else {\n workInProgress = next;\n }\n\n ReactCurrentOwner$1.current = null;\n}\n\nfunction throwAndUnwindWorkLoop(unitOfWork, thrownValue) {\n // This is a fork of performUnitOfWork specifcally for unwinding a fiber\n // that threw an exception.\n //\n // Return to the normal work loop. This will unwind the stack, and potentially\n // result in showing a fallback.\n resetSuspendedWorkLoopOnUnwind(unitOfWork);\n var returnFiber = unitOfWork.return;\n\n if (returnFiber === null || workInProgressRoot === null) {\n // Expected to be working on a non-root fiber. This is a fatal error\n // because there's no ancestor that can handle it; the root is\n // supposed to capture all errors that weren't caught by an error\n // boundary.\n workInProgressRootExitStatus = RootFatalErrored;\n workInProgressRootFatalError = thrownValue; // Set `workInProgress` to null. This represents advancing to the next\n // sibling, or the parent if there are no siblings. But since the root\n // has no siblings nor a parent, we set it to null. Usually this is\n // handled by `completeUnitOfWork` or `unwindWork`, but since we're\n // intentionally not calling those, we need set it here.\n // TODO: Consider calling `unwindWork` to pop the contexts.\n\n workInProgress = null;\n return;\n }\n\n try {\n // Find and mark the nearest Suspense or error boundary that can handle\n // this \"exception\".\n throwException(workInProgressRoot, returnFiber, unitOfWork, thrownValue, workInProgressRootRenderLanes);\n } catch (error) {\n // We had trouble processing the error. An example of this happening is\n // when accessing the `componentDidCatch` property of an error boundary\n // throws an error. A weird edge case. There's a regression test for this.\n // To prevent an infinite loop, bubble the error up to the next parent.\n workInProgress = returnFiber;\n throw error;\n }\n\n if (unitOfWork.flags & Incomplete) {\n // Unwind the stack until we reach the nearest boundary.\n unwindUnitOfWork(unitOfWork);\n } else {\n // Although the fiber suspended, we're intentionally going to commit it in\n // an inconsistent state. We can do this safely in cases where we know the\n // inconsistent tree will be hidden.\n //\n // This currently only applies to Legacy Suspense implementation, but we may\n // port a version of this to concurrent roots, too, when performing a\n // synchronous render. Because that will allow us to mutate the tree as we\n // go instead of buffering mutations until the end. Though it's unclear if\n // this particular path is how that would be implemented.\n completeUnitOfWork(unitOfWork);\n }\n}\n\nfunction completeUnitOfWork(unitOfWork) {\n // Attempt to complete the current unit of work, then move to the next\n // sibling. If there are no more siblings, return to the parent fiber.\n var completedWork = unitOfWork;\n\n do {\n {\n if ((completedWork.flags & Incomplete) !== NoFlags$1) {\n // NOTE: If we re-enable sibling prerendering in some cases, this branch\n // is where we would switch to the unwinding path.\n error('Internal React error: Expected this fiber to be complete, but ' + \"it isn't. It should have been unwound. This is a bug in React.\");\n }\n } // The current, flushed, state of this fiber is the alternate. Ideally\n // nothing should rely on this, but relying on it here means that we don't\n // need an additional field on the work in progress.\n\n\n var current = completedWork.alternate;\n var returnFiber = completedWork.return;\n setCurrentFiber(completedWork);\n var next = void 0;\n\n if ((completedWork.mode & ProfileMode) === NoMode) {\n next = completeWork(current, completedWork, entangledRenderLanes);\n } else {\n startProfilerTimer(completedWork);\n next = completeWork(current, completedWork, entangledRenderLanes); // Update render duration assuming we didn't error.\n\n stopProfilerTimerIfRunningAndRecordDelta(completedWork, false);\n }\n\n resetCurrentFiber();\n\n if (next !== null) {\n // Completing this fiber spawned new work. Work on that next.\n workInProgress = next;\n return;\n }\n\n var siblingFiber = completedWork.sibling;\n\n if (siblingFiber !== null) {\n // If there is more work to do in this returnFiber, do that next.\n workInProgress = siblingFiber;\n return;\n } // Otherwise, return to the parent\n // $FlowFixMe[incompatible-type] we bail out when we get a null\n\n\n completedWork = returnFiber; // Update the next thing we're working on in case something throws.\n\n workInProgress = completedWork;\n } while (completedWork !== null); // We've reached the root.\n\n\n if (workInProgressRootExitStatus === RootInProgress) {\n workInProgressRootExitStatus = RootCompleted;\n }\n}\n\nfunction unwindUnitOfWork(unitOfWork) {\n var incompleteWork = unitOfWork;\n\n do {\n // The current, flushed, state of this fiber is the alternate. Ideally\n // nothing should rely on this, but relying on it here means that we don't\n // need an additional field on the work in progress.\n var current = incompleteWork.alternate; // This fiber did not complete because something threw. Pop values off\n // the stack without entering the complete phase. If this is a boundary,\n // capture values if possible.\n\n var next = unwindWork(current, incompleteWork); // Because this fiber did not complete, don't reset its lanes.\n\n if (next !== null) {\n // Found a boundary that can handle this exception. Re-renter the\n // begin phase. This branch will return us to the normal work loop.\n //\n // Since we're restarting, remove anything that is not a host effect\n // from the effect tag.\n next.flags &= HostEffectMask;\n workInProgress = next;\n return;\n } // Keep unwinding until we reach either a boundary or the root.\n\n\n if ((incompleteWork.mode & ProfileMode) !== NoMode) {\n // Record the render duration for the fiber that errored.\n stopProfilerTimerIfRunningAndRecordDelta(incompleteWork, false); // Include the time spent working on failed children before continuing.\n\n var actualDuration = incompleteWork.actualDuration;\n var child = incompleteWork.child;\n\n while (child !== null) {\n // $FlowFixMe[unsafe-addition] addition with possible null/undefined value\n actualDuration += child.actualDuration;\n child = child.sibling;\n }\n\n incompleteWork.actualDuration = actualDuration;\n } // TODO: Once we stop prerendering siblings, instead of resetting the parent\n // of the node being unwound, we should be able to reset node itself as we\n // unwind the stack. Saves an additional null check.\n\n\n var returnFiber = incompleteWork.return;\n\n if (returnFiber !== null) {\n // Mark the parent fiber as incomplete and clear its subtree flags.\n // TODO: Once we stop prerendering siblings, we may be able to get rid of\n // the Incomplete flag because unwinding to the nearest boundary will\n // happen synchronously.\n returnFiber.flags |= Incomplete;\n returnFiber.subtreeFlags = NoFlags$1;\n returnFiber.deletions = null;\n } // NOTE: If we re-enable sibling prerendering in some cases, here we\n // would switch to the normal completion path: check if a sibling\n // exists, and if so, begin work on it.\n // Otherwise, return to the parent\n // $FlowFixMe[incompatible-type] we bail out when we get a null\n\n\n incompleteWork = returnFiber; // Update the next thing we're working on in case something throws.\n\n workInProgress = incompleteWork;\n } while (incompleteWork !== null); // We've unwound all the way to the root.\n\n\n workInProgressRootExitStatus = RootDidNotComplete;\n workInProgress = null;\n}\n\nfunction commitRoot(root, recoverableErrors, transitions, spawnedLane) {\n // TODO: This no longer makes any sense. We already wrap the mutation and\n // layout phases. Should be able to remove.\n var previousUpdateLanePriority = getCurrentUpdatePriority();\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n\n try {\n ReactCurrentBatchConfig$1.transition = null;\n setCurrentUpdatePriority(DiscreteEventPriority);\n commitRootImpl(root, recoverableErrors, transitions, previousUpdateLanePriority, spawnedLane);\n } finally {\n ReactCurrentBatchConfig$1.transition = prevTransition;\n setCurrentUpdatePriority(previousUpdateLanePriority);\n }\n\n return null;\n}\n\nfunction commitRootImpl(root, recoverableErrors, transitions, renderPriorityLevel, spawnedLane) {\n do {\n // `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which\n // means `flushPassiveEffects` will sometimes result in additional\n // passive effects. So we need to keep flushing in a loop until there are\n // no more pending effects.\n // TODO: Might be better if `flushPassiveEffects` did not automatically\n // flush synchronous work at the end, to avoid factoring hazards like this.\n flushPassiveEffects();\n } while (rootWithPendingPassiveEffects !== null);\n\n flushRenderPhaseStrictModeWarningsInDEV();\n\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n throw new Error('Should not already be working.');\n }\n\n var finishedWork = root.finishedWork;\n var lanes = root.finishedLanes;\n\n {\n markCommitStarted(lanes);\n }\n\n if (finishedWork === null) {\n\n {\n markCommitStopped();\n }\n\n return null;\n } else {\n {\n if (lanes === NoLanes) {\n error('root.finishedLanes should not be empty during a commit. This is a ' + 'bug in React.');\n }\n }\n }\n\n root.finishedWork = null;\n root.finishedLanes = NoLanes;\n\n if (finishedWork === root.current) {\n throw new Error('Cannot commit the same tree as before. This error is likely caused by ' + 'a bug in React. Please file an issue.');\n } // commitRoot never returns a continuation; it always finishes synchronously.\n // So we can clear these now to allow a new callback to be scheduled.\n\n\n root.callbackNode = null;\n root.callbackPriority = NoLane;\n root.cancelPendingCommit = null; // Check which lanes no longer have any work scheduled on them, and mark\n // those as finished.\n\n var remainingLanes = mergeLanes(finishedWork.lanes, finishedWork.childLanes); // Make sure to account for lanes that were updated by a concurrent event\n // during the render phase; don't mark them as finished.\n\n var concurrentlyUpdatedLanes = getConcurrentlyUpdatedLanes();\n remainingLanes = mergeLanes(remainingLanes, concurrentlyUpdatedLanes);\n markRootFinished(root, remainingLanes, spawnedLane);\n\n if (root === workInProgressRoot) {\n // We can reset these now that they are finished.\n workInProgressRoot = null;\n workInProgress = null;\n workInProgressRootRenderLanes = NoLanes;\n } // If there are pending passive effects, schedule a callback to process them.\n // Do this as early as possible, so it is queued before anything else that\n // might get scheduled in the commit phase. (See #16714.)\n // TODO: Delete all other places that schedule the passive effect callback\n // They're redundant.\n\n\n if ((finishedWork.subtreeFlags & PassiveMask) !== NoFlags$1 || (finishedWork.flags & PassiveMask) !== NoFlags$1) {\n if (!rootDoesHavePassiveEffects) {\n rootDoesHavePassiveEffects = true;\n pendingPassiveEffectsRemainingLanes = remainingLanes; // workInProgressTransitions might be overwritten, so we want\n // to store it in pendingPassiveTransitions until they get processed\n // We need to pass this through as an argument to commitRoot\n // because workInProgressTransitions might have changed between\n // the previous render and commit if we throttle the commit\n // with setTimeout\n\n pendingPassiveTransitions = transitions;\n scheduleCallback(NormalPriority$1, function () {\n flushPassiveEffects(); // This render triggered passive effects: release the root cache pool\n // *after* passive effects fire to avoid freeing a cache pool that may\n // be referenced by a node in the tree (HostRoot, Cache boundary etc)\n\n return null;\n });\n }\n } // Check if there are any effects in the whole tree.\n // TODO: This is left over from the effect list implementation, where we had\n // to check for the existence of `firstEffect` to satisfy Flow. I think the\n // only other reason this optimization exists is because it affects profiling.\n // Reconsider whether this is necessary.\n\n\n var subtreeHasEffects = (finishedWork.subtreeFlags & (BeforeMutationMask | MutationMask | LayoutMask | PassiveMask)) !== NoFlags$1;\n var rootHasEffect = (finishedWork.flags & (BeforeMutationMask | MutationMask | LayoutMask | PassiveMask)) !== NoFlags$1;\n\n if (subtreeHasEffects || rootHasEffect) {\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n ReactCurrentBatchConfig$1.transition = null;\n var previousPriority = getCurrentUpdatePriority();\n setCurrentUpdatePriority(DiscreteEventPriority);\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext; // Reset this to null before calling lifecycles\n\n ReactCurrentOwner$1.current = null; // The commit phase is broken into several sub-phases. We do a separate pass\n // of the effect list for each phase: all mutation effects come before all\n // layout effects, and so on.\n // The first phase a \"before mutation\" phase. We use this phase to read the\n // state of the host tree right before we mutate it. This is where\n // getSnapshotBeforeUpdate is called.\n\n commitBeforeMutationEffects(root, finishedWork);\n\n {\n // Mark the current commit time to be shared by all Profilers in this\n // batch. This enables them to be grouped later.\n recordCommitTime();\n }\n\n\n commitMutationEffects(root, finishedWork, lanes);\n\n resetAfterCommit(); // The work-in-progress tree is now the current tree. This must come after\n // the mutation phase, so that the previous tree is still current during\n // componentWillUnmount, but before the layout phase, so that the finished\n // work is current during componentDidMount/Update.\n\n root.current = finishedWork; // The next phase is the layout phase, where we call effects that read\n\n {\n markLayoutEffectsStarted(lanes);\n }\n\n commitLayoutEffects(finishedWork, root, lanes);\n\n {\n markLayoutEffectsStopped();\n }\n // opportunity to paint.\n\n\n requestPaint();\n executionContext = prevExecutionContext; // Reset the priority to the previous non-sync value.\n\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig$1.transition = prevTransition;\n } else {\n // No effects.\n root.current = finishedWork; // Measure these anyway so the flamegraph explicitly shows that there were\n // no effects.\n // TODO: Maybe there's a better way to report this.\n\n {\n recordCommitTime();\n }\n }\n\n var rootDidHavePassiveEffects = rootDoesHavePassiveEffects;\n\n if (rootDoesHavePassiveEffects) {\n // This commit has passive effects. Stash a reference to them. But don't\n // schedule a callback until after flushing layout work.\n rootDoesHavePassiveEffects = false;\n rootWithPendingPassiveEffects = root;\n pendingPassiveEffectsLanes = lanes;\n } else {\n // There were no passive effects, so we can immediately release the cache\n // pool for this render.\n releaseRootPooledCache(root, remainingLanes);\n\n {\n nestedPassiveUpdateCount = 0;\n rootWithPassiveNestedUpdates = null;\n }\n } // Read this again, since an effect might have updated it\n\n\n remainingLanes = root.pendingLanes; // Check if there's remaining work on this root\n // TODO: This is part of the `componentDidCatch` implementation. Its purpose\n // is to detect whether something might have called setState inside\n // `componentDidCatch`. The mechanism is known to be flawed because `setState`\n // inside `componentDidCatch` is itself flawed — that's why we recommend\n // `getDerivedStateFromError` instead. However, it could be improved by\n // checking if remainingLanes includes Sync work, instead of whether there's\n // any work remaining at all (which would also include stuff like Suspense\n // retries or transitions). It's been like this for a while, though, so fixing\n // it probably isn't that urgent.\n\n if (remainingLanes === NoLanes) {\n // If there's no remaining work, we can clear the set of already failed\n // error boundaries.\n legacyErrorBoundariesThatAlreadyFailed = null;\n }\n\n {\n if (!rootDidHavePassiveEffects) {\n commitDoubleInvokeEffectsInDEV(root, false);\n }\n }\n\n onCommitRoot$1(finishedWork.stateNode, renderPriorityLevel);\n\n {\n if (isDevToolsPresent) {\n root.memoizedUpdaters.clear();\n }\n }\n\n {\n onCommitRoot();\n } // Always call this before exiting `commitRoot`, to ensure that any\n // additional work on this root is scheduled.\n\n\n ensureRootIsScheduled(root);\n\n if (recoverableErrors !== null) {\n // There were errors during this render, but recovered from them without\n // needing to surface it to the UI. We log them here.\n var onRecoverableError = root.onRecoverableError;\n\n for (var i = 0; i < recoverableErrors.length; i++) {\n var recoverableError = recoverableErrors[i];\n var errorInfo = makeErrorInfo(recoverableError.digest, recoverableError.stack);\n onRecoverableError(recoverableError.value, errorInfo);\n }\n }\n\n if (hasUncaughtError) {\n hasUncaughtError = false;\n var error$1 = firstUncaughtError;\n firstUncaughtError = null;\n throw error$1;\n } // If the passive effects are the result of a discrete render, flush them\n // synchronously at the end of the current task so that the result is\n // immediately observable. Otherwise, we assume that they are not\n // order-dependent and do not need to be observed by external systems, so we\n // can wait until after paint.\n // TODO: We can optimize this by not scheduling the callback earlier. Since we\n // currently schedule the callback in multiple places, will wait until those\n // are consolidated.\n\n\n if (includesSyncLane(pendingPassiveEffectsLanes) && root.tag !== LegacyRoot) {\n flushPassiveEffects();\n } // Read this again, since a passive effect might have updated it\n\n\n remainingLanes = root.pendingLanes; // Check if this render scheduled a cascading synchronous update. This is a\n // heurstic to detect infinite update loops. We are intentionally excluding\n // hydration lanes in this check, because render triggered by selective\n // hydration is conceptually not an update.\n\n if ( // Was the finished render the result of an update (not hydration)?\n includesSomeLane(lanes, UpdateLanes) && // Did it schedule a sync update?\n includesSomeLane(remainingLanes, SyncUpdateLanes)) {\n {\n markNestedUpdateScheduled();\n } // Count the number of times the root synchronously re-renders without\n // finishing. If there are too many, it indicates an infinite update loop.\n\n\n if (root === rootWithNestedUpdates) {\n nestedUpdateCount++;\n } else {\n nestedUpdateCount = 0;\n rootWithNestedUpdates = root;\n }\n } else {\n nestedUpdateCount = 0;\n } // If layout work was scheduled, flush it now.\n\n\n flushSyncWorkOnAllRoots();\n\n {\n markCommitStopped();\n }\n\n return null;\n}\n\nfunction makeErrorInfo(digest, componentStack) {\n {\n var errorInfo = {\n componentStack: componentStack,\n digest: digest\n };\n Object.defineProperty(errorInfo, 'digest', {\n configurable: false,\n enumerable: true,\n get: function () {\n error('You are accessing \"digest\" from the errorInfo object passed to onRecoverableError.' + ' This property is deprecated and will be removed in a future version of React.' + ' To access the digest of an Error look for this property on the Error instance itself.');\n\n return digest;\n }\n });\n return errorInfo;\n }\n}\n\nfunction releaseRootPooledCache(root, remainingLanes) {\n {\n var pooledCacheLanes = root.pooledCacheLanes &= remainingLanes;\n\n if (pooledCacheLanes === NoLanes) {\n // None of the remaining work relies on the cache pool. Clear it so\n // subsequent requests get a new cache\n var pooledCache = root.pooledCache;\n\n if (pooledCache != null) {\n root.pooledCache = null;\n releaseCache(pooledCache);\n }\n }\n }\n}\n\nfunction flushPassiveEffects() {\n // Returns whether passive effects were flushed.\n // TODO: Combine this check with the one in flushPassiveEFfectsImpl. We should\n // probably just combine the two functions. I believe they were only separate\n // in the first place because we used to wrap it with\n // `Scheduler.runWithPriority`, which accepts a function. But now we track the\n // priority within React itself, so we can mutate the variable directly.\n if (rootWithPendingPassiveEffects !== null) {\n // Cache the root since rootWithPendingPassiveEffects is cleared in\n // flushPassiveEffectsImpl\n var root = rootWithPendingPassiveEffects; // Cache and clear the remaining lanes flag; it must be reset since this\n // method can be called from various places, not always from commitRoot\n // where the remaining lanes are known\n\n var remainingLanes = pendingPassiveEffectsRemainingLanes;\n pendingPassiveEffectsRemainingLanes = NoLanes;\n var renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes);\n var priority = lowerEventPriority(DefaultEventPriority, renderPriority);\n var prevTransition = ReactCurrentBatchConfig$1.transition;\n var previousPriority = getCurrentUpdatePriority();\n\n try {\n ReactCurrentBatchConfig$1.transition = null;\n setCurrentUpdatePriority(priority);\n return flushPassiveEffectsImpl();\n } finally {\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig$1.transition = prevTransition; // Once passive effects have run for the tree - giving components a\n // chance to retain cache instances they use - release the pooled\n // cache at the root (if there is one)\n\n releaseRootPooledCache(root, remainingLanes);\n }\n }\n\n return false;\n}\nfunction enqueuePendingPassiveProfilerEffect(fiber) {\n {\n pendingPassiveProfilerEffects.push(fiber);\n\n if (!rootDoesHavePassiveEffects) {\n rootDoesHavePassiveEffects = true;\n scheduleCallback(NormalPriority$1, function () {\n flushPassiveEffects();\n return null;\n });\n }\n }\n}\n\nfunction flushPassiveEffectsImpl() {\n if (rootWithPendingPassiveEffects === null) {\n return false;\n } // Cache and clear the transitions flag\n\n\n var transitions = pendingPassiveTransitions;\n pendingPassiveTransitions = null;\n var root = rootWithPendingPassiveEffects;\n var lanes = pendingPassiveEffectsLanes;\n rootWithPendingPassiveEffects = null; // TODO: This is sometimes out of sync with rootWithPendingPassiveEffects.\n // Figure out why and fix it. It's not causing any known issues (probably\n // because it's only used for profiling), but it's a refactor hazard.\n\n pendingPassiveEffectsLanes = NoLanes;\n\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n throw new Error('Cannot flush passive effects while already rendering.');\n }\n\n {\n isFlushingPassiveEffects = true;\n didScheduleUpdateDuringPassiveEffects = false;\n }\n\n {\n markPassiveEffectsStarted(lanes);\n }\n\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n commitPassiveUnmountEffects(root.current);\n commitPassiveMountEffects(root, root.current, lanes, transitions); // TODO: Move to commitPassiveMountEffects\n\n {\n var profilerEffects = pendingPassiveProfilerEffects;\n pendingPassiveProfilerEffects = [];\n\n for (var i = 0; i < profilerEffects.length; i++) {\n var fiber = profilerEffects[i];\n commitPassiveEffectDurations(root, fiber);\n }\n }\n\n {\n markPassiveEffectsStopped();\n }\n\n {\n commitDoubleInvokeEffectsInDEV(root, true);\n }\n\n executionContext = prevExecutionContext;\n flushSyncWorkOnAllRoots();\n\n {\n // If additional passive effects were scheduled, increment a counter. If this\n // exceeds the limit, we'll fire a warning.\n if (didScheduleUpdateDuringPassiveEffects) {\n if (root === rootWithPassiveNestedUpdates) {\n nestedPassiveUpdateCount++;\n } else {\n nestedPassiveUpdateCount = 0;\n rootWithPassiveNestedUpdates = root;\n }\n } else {\n nestedPassiveUpdateCount = 0;\n }\n\n isFlushingPassiveEffects = false;\n didScheduleUpdateDuringPassiveEffects = false;\n } // TODO: Move to commitPassiveMountEffects\n\n\n onPostCommitRoot(root);\n\n {\n var stateNode = root.current.stateNode;\n stateNode.effectDuration = 0;\n stateNode.passiveEffectDuration = 0;\n }\n\n return true;\n}\n\nfunction isAlreadyFailedLegacyErrorBoundary(instance) {\n return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance);\n}\nfunction markLegacyErrorBoundaryAsFailed(instance) {\n if (legacyErrorBoundariesThatAlreadyFailed === null) {\n legacyErrorBoundariesThatAlreadyFailed = new Set([instance]);\n } else {\n legacyErrorBoundariesThatAlreadyFailed.add(instance);\n }\n}\n\nfunction prepareToThrowUncaughtError(error) {\n if (!hasUncaughtError) {\n hasUncaughtError = true;\n firstUncaughtError = error;\n }\n}\n\nvar onUncaughtError = prepareToThrowUncaughtError;\n\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n var errorInfo = createCapturedValueAtFiber(error, sourceFiber);\n var update = createRootErrorUpdate(rootFiber, errorInfo, SyncLane);\n var root = enqueueUpdate(rootFiber, update, SyncLane);\n\n if (root !== null) {\n markRootUpdated(root, SyncLane);\n ensureRootIsScheduled(root);\n }\n}\n\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error$1) {\n {\n reportUncaughtErrorInDEV(error$1);\n setIsRunningInsertionEffect(false);\n }\n\n if (sourceFiber.tag === HostRoot) {\n // Error was thrown at the root. There is no parent, so the root\n // itself should capture it.\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error$1);\n return;\n }\n\n var fiber = nearestMountedAncestor;\n\n while (fiber !== null) {\n if (fiber.tag === HostRoot) {\n captureCommitPhaseErrorOnRoot(fiber, sourceFiber, error$1);\n return;\n } else if (fiber.tag === ClassComponent) {\n var ctor = fiber.type;\n var instance = fiber.stateNode;\n\n if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {\n var errorInfo = createCapturedValueAtFiber(error$1, sourceFiber);\n var update = createClassErrorUpdate(fiber, errorInfo, SyncLane);\n var root = enqueueUpdate(fiber, update, SyncLane);\n\n if (root !== null) {\n markRootUpdated(root, SyncLane);\n ensureRootIsScheduled(root);\n }\n\n return;\n }\n }\n\n fiber = fiber.return;\n }\n\n {\n error('Internal React error: Attempted to capture a commit phase error ' + 'inside a detached tree. This indicates a bug in React. Potential ' + 'causes include deleting the same fiber more than once, committing an ' + 'already-finished tree, or an inconsistent return pointer.\\n\\n' + 'Error message:\\n\\n%s', error$1);\n }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n // Attach a ping listener\n //\n // The data might resolve before we have a chance to commit the fallback. Or,\n // in the case of a refresh, we'll never commit a fallback. So we need to\n // attach a listener now. When it resolves (\"pings\"), we can decide whether to\n // try rendering the tree again.\n //\n // Only attach a listener if one does not already exist for the lanes\n // we're currently rendering (which acts like a \"thread ID\" here).\n //\n // We only need to do this in concurrent mode. Legacy Suspense always\n // commits fallbacks synchronously, so there are no pings.\n var pingCache = root.pingCache;\n var threadIDs;\n\n if (pingCache === null) {\n pingCache = root.pingCache = new PossiblyWeakMap();\n threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n } else {\n threadIDs = pingCache.get(wakeable);\n\n if (threadIDs === undefined) {\n threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n }\n }\n\n if (!threadIDs.has(lanes)) {\n workInProgressRootDidAttachPingListener = true; // Memoize using the thread ID to prevent redundant listeners.\n\n threadIDs.add(lanes);\n var ping = pingSuspendedRoot.bind(null, root, wakeable, lanes);\n\n {\n if (isDevToolsPresent) {\n // If we have pending work still, restore the original updaters\n restorePendingUpdaters(root, lanes);\n }\n }\n\n wakeable.then(ping, ping);\n }\n}\n\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n\n if (pingCache !== null) {\n // The wakeable resolved, so we no longer need to memoize, because it will\n // never be thrown again.\n pingCache.delete(wakeable);\n }\n\n markRootPinged(root, pingedLanes);\n warnIfSuspenseResolutionNotWrappedWithActDEV(root);\n\n if (workInProgressRoot === root && isSubsetOfLanes(workInProgressRootRenderLanes, pingedLanes)) {\n // Received a ping at the same priority level at which we're currently\n // rendering. We might want to restart this render. This should mirror\n // the logic of whether or not a root suspends once it completes.\n // TODO: If we're rendering sync either due to Sync, Batched or expired,\n // we should probably never restart.\n // If we're suspended with delay, or if it's a retry, we'll always suspend\n // so we can always restart.\n if (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && includesOnlyRetries(workInProgressRootRenderLanes) && now$1() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS) {\n // Force a restart from the root by unwinding the stack. Unless this is\n // being called from the render phase, because that would cause a crash.\n if ((executionContext & RenderContext) === NoContext) {\n prepareFreshStack(root, NoLanes);\n }\n } else {\n // Even though we can't restart right now, we might get an\n // opportunity later. So we mark this render as having a ping.\n workInProgressRootPingedLanes = mergeLanes(workInProgressRootPingedLanes, pingedLanes);\n }\n }\n\n ensureRootIsScheduled(root);\n}\n\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n // The boundary fiber (a Suspense component or SuspenseList component)\n // previously was rendered in its fallback state. One of the promises that\n // suspended it has resolved, which means at least part of the tree was\n // likely unblocked. Try rendering again, at a new lanes.\n if (retryLane === NoLane) {\n // TODO: Assign this to `suspenseState.retryLane`? to avoid\n // unnecessary entanglement?\n retryLane = requestRetryLane(boundaryFiber);\n } // TODO: Special case idle priority?\n\n\n var root = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n\n if (root !== null) {\n markRootUpdated(root, retryLane);\n ensureRootIsScheduled(root);\n }\n}\n\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n var suspenseState = boundaryFiber.memoizedState;\n var retryLane = NoLane;\n\n if (suspenseState !== null) {\n retryLane = suspenseState.retryLane;\n }\n\n retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryLane = NoLane; // Default\n\n var retryCache;\n\n switch (boundaryFiber.tag) {\n case SuspenseComponent:\n retryCache = boundaryFiber.stateNode;\n var suspenseState = boundaryFiber.memoizedState;\n\n if (suspenseState !== null) {\n retryLane = suspenseState.retryLane;\n }\n\n break;\n\n case SuspenseListComponent:\n retryCache = boundaryFiber.stateNode;\n break;\n\n case OffscreenComponent:\n {\n var instance = boundaryFiber.stateNode;\n retryCache = instance._retryCache;\n break;\n }\n\n default:\n throw new Error('Pinged unknown suspense boundary type. ' + 'This is probably a bug in React.');\n }\n\n if (retryCache !== null) {\n // The wakeable resolved, so we no longer need to memoize, because it will\n // never be thrown again.\n retryCache.delete(wakeable);\n }\n\n retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction throwIfInfiniteUpdateLoopDetected() {\n if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {\n nestedUpdateCount = 0;\n nestedPassiveUpdateCount = 0;\n rootWithNestedUpdates = null;\n rootWithPassiveNestedUpdates = null;\n throw new Error('Maximum update depth exceeded. This can happen when a component ' + 'repeatedly calls setState inside componentWillUpdate or ' + 'componentDidUpdate. React limits the number of nested updates to ' + 'prevent infinite loops.');\n }\n\n {\n if (nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT) {\n nestedPassiveUpdateCount = 0;\n rootWithPassiveNestedUpdates = null;\n\n error('Maximum update depth exceeded. This can happen when a component ' + \"calls setState inside useEffect, but useEffect either doesn't \" + 'have a dependency array, or one of the dependencies changes on ' + 'every render.');\n }\n }\n}\n\nfunction flushRenderPhaseStrictModeWarningsInDEV() {\n {\n ReactStrictModeWarnings.flushLegacyContextWarning();\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n }\n}\n\nfunction commitDoubleInvokeEffectsInDEV(root, hasPassiveEffects) {\n {\n {\n legacyCommitDoubleInvokeEffectsInDEV(root.current, hasPassiveEffects);\n }\n }\n}\n\nfunction legacyCommitDoubleInvokeEffectsInDEV(fiber, hasPassiveEffects) {\n // TODO (StrictEffects) Should we set a marker on the root if it contains strict effects\n // so we don't traverse unnecessarily? similar to subtreeFlags but just at the root level.\n // Maybe not a big deal since this is DEV only behavior.\n setCurrentFiber(fiber);\n invokeEffectsInDev(fiber, MountLayoutDev, invokeLayoutEffectUnmountInDEV);\n\n if (hasPassiveEffects) {\n invokeEffectsInDev(fiber, MountPassiveDev, invokePassiveEffectUnmountInDEV);\n }\n\n invokeEffectsInDev(fiber, MountLayoutDev, invokeLayoutEffectMountInDEV);\n\n if (hasPassiveEffects) {\n invokeEffectsInDev(fiber, MountPassiveDev, invokePassiveEffectMountInDEV);\n }\n\n resetCurrentFiber();\n}\n\nfunction invokeEffectsInDev(firstChild, fiberFlags, invokeEffectFn) {\n var current = firstChild;\n var subtreeRoot = null;\n\n while (current != null) {\n var primarySubtreeFlag = current.subtreeFlags & fiberFlags;\n\n if (current !== subtreeRoot && current.child != null && primarySubtreeFlag !== NoFlags$1) {\n current = current.child;\n } else {\n if ((current.flags & fiberFlags) !== NoFlags$1) {\n invokeEffectFn(current);\n }\n\n if (current.sibling !== null) {\n current = current.sibling;\n } else {\n current = subtreeRoot = current.return;\n }\n }\n }\n}\n\nvar didWarnStateUpdateForNotYetMountedComponent = null;\nfunction warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {\n {\n if ((executionContext & RenderContext) !== NoContext) {\n // We let the other warning about render phase updates deal with this one.\n return;\n }\n\n if (!(fiber.mode & ConcurrentMode)) {\n return;\n }\n\n var tag = fiber.tag;\n\n if (tag !== IndeterminateComponent && tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent) {\n // Only warn for user-defined components, not internal ones like Suspense.\n return;\n } // We show the whole stack but dedupe on the top component's name because\n // the problematic code almost always lies inside that component.\n\n\n var componentName = getComponentNameFromFiber(fiber) || 'ReactComponent';\n\n if (didWarnStateUpdateForNotYetMountedComponent !== null) {\n if (didWarnStateUpdateForNotYetMountedComponent.has(componentName)) {\n return;\n } // $FlowFixMe[incompatible-use] found when upgrading Flow\n\n\n didWarnStateUpdateForNotYetMountedComponent.add(componentName);\n } else {\n didWarnStateUpdateForNotYetMountedComponent = new Set([componentName]);\n }\n\n var previousFiber = current;\n\n try {\n setCurrentFiber(fiber);\n\n error(\"Can't perform a React state update on a component that hasn't mounted yet. \" + 'This indicates that you have a side-effect in your render function that ' + 'asynchronously later calls tries to update the component. Move this work to ' + 'useEffect instead.');\n } finally {\n if (previousFiber) {\n setCurrentFiber(fiber);\n } else {\n resetCurrentFiber();\n }\n }\n }\n}\nvar beginWork;\n\n{\n var dummyFiber = null;\n\n beginWork = function (current, unitOfWork, lanes) {\n // If a component throws an error, we replay it again in a synchronously\n // dispatched event, so that the debugger will treat it as an uncaught\n // error See ReactErrorUtils for more information.\n // Before entering the begin phase, copy the work-in-progress onto a dummy\n // fiber. If beginWork throws, we'll use this to reset the state.\n var originalWorkInProgressCopy = assignFiberPropertiesInDEV(dummyFiber, unitOfWork);\n\n try {\n return beginWork$1(current, unitOfWork, lanes);\n } catch (originalError) {\n if (didSuspendOrErrorWhileHydratingDEV() || originalError === SuspenseException || originalError === SelectiveHydrationException || originalError !== null && typeof originalError === 'object' && typeof originalError.then === 'function') {\n // Don't replay promises.\n // Don't replay errors if we are hydrating and have already suspended or handled an error\n throw originalError;\n } // Don't reset current debug fiber, since we're about to work on the\n // same fiber again.\n // Unwind the failed stack frame\n\n\n resetSuspendedWorkLoopOnUnwind(unitOfWork);\n unwindInterruptedWork(current, unitOfWork); // Restore the original properties of the fiber.\n\n assignFiberPropertiesInDEV(unitOfWork, originalWorkInProgressCopy);\n\n if (unitOfWork.mode & ProfileMode) {\n // Reset the profiler timer.\n startProfilerTimer(unitOfWork);\n } // Run beginWork again.\n\n\n invokeGuardedCallback(null, beginWork$1, null, current, unitOfWork, lanes);\n\n if (hasCaughtError()) {\n var replayError = clearCaughtError();\n\n if (typeof replayError === 'object' && replayError !== null && replayError._suppressLogging && typeof originalError === 'object' && originalError !== null && !originalError._suppressLogging) {\n // If suppressed, let the flag carry over to the original error which is the one we'll rethrow.\n originalError._suppressLogging = true;\n }\n } // We always throw the original error in case the second render pass is not idempotent.\n // This can happen if a memoized function or CommonJS module doesn't throw after first invocation.\n\n\n throw originalError;\n }\n };\n}\n\nvar didWarnAboutUpdateInRender = false;\nvar didWarnAboutUpdateInRenderForAnotherComponent;\n\n{\n didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n}\n\nfunction warnAboutRenderPhaseUpdatesInDEV(fiber) {\n {\n if (isRendering) {\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n var renderingComponentName = workInProgress && getComponentNameFromFiber(workInProgress) || 'Unknown'; // Dedupe by the rendering component because it's the one that needs to be fixed.\n\n var dedupeKey = renderingComponentName;\n\n if (!didWarnAboutUpdateInRenderForAnotherComponent.has(dedupeKey)) {\n didWarnAboutUpdateInRenderForAnotherComponent.add(dedupeKey);\n var setStateComponentName = getComponentNameFromFiber(fiber) || 'Unknown';\n\n error('Cannot update a component (`%s`) while rendering a ' + 'different component (`%s`). To locate the bad setState() call inside `%s`, ' + 'follow the stack trace as described in https://reactjs.org/link/setstate-in-render', setStateComponentName, renderingComponentName, renderingComponentName);\n }\n\n break;\n }\n\n case ClassComponent:\n {\n if (!didWarnAboutUpdateInRender) {\n error('Cannot update during an existing state transition (such as ' + 'within `render`). Render methods should be a pure ' + 'function of props and state.');\n\n didWarnAboutUpdateInRender = true;\n }\n\n break;\n }\n }\n }\n }\n}\n\nfunction restorePendingUpdaters(root, lanes) {\n {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n memoizedUpdaters.forEach(function (schedulingFiber) {\n addFiberToLanesMap(root, schedulingFiber, lanes);\n }); // This function intentionally does not clear memoized updaters.\n // Those may still be relevant to the current commit\n // and a future one (e.g. Suspense).\n }\n }\n}\nvar fakeActCallbackNode = {}; // $FlowFixMe[missing-local-annot]\n\nfunction scheduleCallback(priorityLevel, callback) {\n {\n // If we're currently inside an `act` scope, bypass Scheduler and push to\n // the `act` queue instead.\n var actQueue = ReactCurrentActQueue.current;\n\n if (actQueue !== null) {\n actQueue.push(callback);\n return fakeActCallbackNode;\n } else {\n return scheduleCallback$3(priorityLevel, callback);\n }\n }\n}\n\nfunction shouldForceFlushFallbacksInDEV() {\n // Never force flush in production. This function should get stripped out.\n return ReactCurrentActQueue.current !== null;\n}\n\nfunction warnIfUpdatesNotWrappedWithActDEV(fiber) {\n {\n if (fiber.mode & ConcurrentMode) {\n if (!isConcurrentActEnvironment()) {\n // Not in an act environment. No need to warn.\n return;\n }\n } else {\n // Legacy mode has additional cases where we suppress a warning.\n if (!isLegacyActEnvironment()) {\n // Not in an act environment. No need to warn.\n return;\n }\n\n if (executionContext !== NoContext) {\n // Legacy mode doesn't warn if the update is batched, i.e.\n // batchedUpdates or flushSync.\n return;\n }\n\n if (fiber.tag !== FunctionComponent && fiber.tag !== ForwardRef && fiber.tag !== SimpleMemoComponent) {\n // For backwards compatibility with pre-hooks code, legacy mode only\n // warns for updates that originate from a hook.\n return;\n }\n }\n\n if (ReactCurrentActQueue.current === null) {\n var previousFiber = current;\n\n try {\n setCurrentFiber(fiber);\n\n error('An update to %s inside a test was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\\n\\n' + 'act(() => {\\n' + ' /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act', getComponentNameFromFiber(fiber));\n } finally {\n if (previousFiber) {\n setCurrentFiber(fiber);\n } else {\n resetCurrentFiber();\n }\n }\n }\n }\n}\n\nfunction warnIfSuspenseResolutionNotWrappedWithActDEV(root) {\n {\n if (root.tag !== LegacyRoot && isConcurrentActEnvironment() && ReactCurrentActQueue.current === null) {\n error('A suspended resource finished loading inside a test, but the event ' + 'was not wrapped in act(...).\\n\\n' + 'When testing, code that resolves suspended data should be wrapped ' + 'into act(...):\\n\\n' + 'act(() => {\\n' + ' /* finish loading suspended data */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act');\n }\n }\n}\n\nfunction setIsRunningInsertionEffect(isRunning) {\n {\n isRunningInsertionEffect = isRunning;\n }\n}\n\n/* eslint-disable react-internal/prod-error-codes */\n// Used by React Refresh runtime through DevTools Global Hook.\n\nvar resolveFamily = null;\nvar failedBoundaries = null;\nvar setRefreshHandler = function (handler) {\n {\n resolveFamily = handler;\n }\n};\nfunction resolveFunctionForHotReloading(type) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return type;\n }\n\n var family = resolveFamily(type);\n\n if (family === undefined) {\n return type;\n } // Use the latest known implementation.\n\n\n return family.current;\n }\n}\nfunction resolveClassForHotReloading(type) {\n // No implementation differences.\n return resolveFunctionForHotReloading(type);\n}\nfunction resolveForwardRefForHotReloading(type) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return type;\n }\n\n var family = resolveFamily(type);\n\n if (family === undefined) {\n // Check if we're dealing with a real forwardRef. Don't want to crash early.\n if (type !== null && type !== undefined && typeof type.render === 'function') {\n // ForwardRef is special because its resolved .type is an object,\n // but it's possible that we only have its inner render function in the map.\n // If that inner render function is different, we'll build a new forwardRef type.\n var currentRender = resolveFunctionForHotReloading(type.render);\n\n if (type.render !== currentRender) {\n var syntheticType = {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: currentRender\n };\n\n if (type.displayName !== undefined) {\n syntheticType.displayName = type.displayName;\n }\n\n return syntheticType;\n }\n }\n\n return type;\n } // Use the latest known implementation.\n\n\n return family.current;\n }\n}\nfunction isCompatibleFamilyForHotReloading(fiber, element) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return false;\n }\n\n var prevType = fiber.elementType;\n var nextType = element.type; // If we got here, we know types aren't === equal.\n\n var needsCompareFamilies = false;\n var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null;\n\n switch (fiber.tag) {\n case ClassComponent:\n {\n if (typeof nextType === 'function') {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case FunctionComponent:\n {\n if (typeof nextType === 'function') {\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n // We don't know the inner type yet.\n // We're going to assume that the lazy inner type is stable,\n // and so it is sufficient to avoid reconciling it away.\n // We're not going to unwrap or actually use the new lazy type.\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case ForwardRef:\n {\n if ($$typeofNextType === REACT_FORWARD_REF_TYPE) {\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case MemoComponent:\n case SimpleMemoComponent:\n {\n if ($$typeofNextType === REACT_MEMO_TYPE) {\n // TODO: if it was but can no longer be simple,\n // we shouldn't set this.\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n default:\n return false;\n } // Check if both types have a family and it's the same one.\n\n\n if (needsCompareFamilies) {\n // Note: memo() and forwardRef() we'll compare outer rather than inner type.\n // This means both of them need to be registered to preserve state.\n // If we unwrapped and compared the inner types for wrappers instead,\n // then we would risk falsely saying two separate memo(Foo)\n // calls are equivalent because they wrap the same Foo function.\n var prevFamily = resolveFamily(prevType); // $FlowFixMe[not-a-function] found when upgrading Flow\n\n if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) {\n return true;\n }\n }\n\n return false;\n }\n}\nfunction markFailedErrorBoundaryForHotReloading(fiber) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return;\n }\n\n if (typeof WeakSet !== 'function') {\n return;\n }\n\n if (failedBoundaries === null) {\n failedBoundaries = new WeakSet();\n }\n\n failedBoundaries.add(fiber);\n }\n}\nvar scheduleRefresh = function (root, update) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return;\n }\n\n var staleFamilies = update.staleFamilies,\n updatedFamilies = update.updatedFamilies;\n flushPassiveEffects();\n flushSync$1(function () {\n scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies);\n });\n }\n};\nvar scheduleRoot = function (root, element) {\n {\n if (root.context !== emptyContextObject) {\n // Super edge case: root has a legacy _renderSubtree context\n // but we don't know the parentComponent so we can't pass it.\n // Just ignore. We'll delete this with _renderSubtree code path later.\n return;\n }\n\n flushPassiveEffects();\n flushSync$1(function () {\n updateContainer(element, root, null, null);\n });\n }\n};\n\nfunction scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) {\n {\n var alternate = fiber.alternate,\n child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type;\n var candidateType = null;\n\n switch (tag) {\n case FunctionComponent:\n case SimpleMemoComponent:\n case ClassComponent:\n candidateType = type;\n break;\n\n case ForwardRef:\n candidateType = type.render;\n break;\n }\n\n if (resolveFamily === null) {\n throw new Error('Expected resolveFamily to be set during hot reload.');\n }\n\n var needsRender = false;\n var needsRemount = false;\n\n if (candidateType !== null) {\n var family = resolveFamily(candidateType);\n\n if (family !== undefined) {\n if (staleFamilies.has(family)) {\n needsRemount = true;\n } else if (updatedFamilies.has(family)) {\n if (tag === ClassComponent) {\n needsRemount = true;\n } else {\n needsRender = true;\n }\n }\n }\n }\n\n if (failedBoundaries !== null) {\n if (failedBoundaries.has(fiber) || // $FlowFixMe[incompatible-use] found when upgrading Flow\n alternate !== null && failedBoundaries.has(alternate)) {\n needsRemount = true;\n }\n }\n\n if (needsRemount) {\n fiber._debugNeedsRemount = true;\n }\n\n if (needsRemount || needsRender) {\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n }\n\n if (child !== null && !needsRemount) {\n scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies);\n }\n\n if (sibling !== null) {\n scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies);\n }\n }\n}\n\nvar findHostInstancesForRefresh = function (root, families) {\n {\n var hostInstances = new Set();\n var types = new Set(families.map(function (family) {\n return family.current;\n }));\n findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances);\n return hostInstances;\n }\n};\n\nfunction findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) {\n {\n var child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type;\n var candidateType = null;\n\n switch (tag) {\n case FunctionComponent:\n case SimpleMemoComponent:\n case ClassComponent:\n candidateType = type;\n break;\n\n case ForwardRef:\n candidateType = type.render;\n break;\n }\n\n var didMatch = false;\n\n if (candidateType !== null) {\n if (types.has(candidateType)) {\n didMatch = true;\n }\n }\n\n if (didMatch) {\n // We have a match. This only drills down to the closest host components.\n // There's no need to search deeper because for the purpose of giving\n // visual feedback, \"flashing\" outermost parent rectangles is sufficient.\n findHostInstancesForFiberShallowly(fiber, hostInstances);\n } else {\n // If there's no match, maybe there will be one further down in the child tree.\n if (child !== null) {\n findHostInstancesForMatchingFibersRecursively(child, types, hostInstances);\n }\n }\n\n if (sibling !== null) {\n findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances);\n }\n }\n}\n\nfunction findHostInstancesForFiberShallowly(fiber, hostInstances) {\n {\n var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances);\n\n if (foundHostInstances) {\n return;\n } // If we didn't find any host children, fallback to closest host parent.\n\n\n var node = fiber;\n\n while (true) {\n switch (node.tag) {\n case HostSingleton:\n case HostComponent:\n hostInstances.add(node.stateNode);\n return;\n\n case HostPortal:\n hostInstances.add(node.stateNode.containerInfo);\n return;\n\n case HostRoot:\n hostInstances.add(node.stateNode.containerInfo);\n return;\n }\n\n if (node.return === null) {\n throw new Error('Expected to reach root first.');\n }\n\n node = node.return;\n }\n }\n}\n\nfunction findChildHostInstancesForFiberShallowly(fiber, hostInstances) {\n {\n var node = fiber;\n var foundHostInstances = false;\n\n while (true) {\n if (node.tag === HostComponent || (node.tag === HostHoistable ) || (node.tag === HostSingleton )) {\n // We got a match.\n foundHostInstances = true;\n hostInstances.add(node.stateNode); // There may still be more, so keep searching.\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === fiber) {\n return foundHostInstances;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === fiber) {\n return foundHostInstances;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n\n return false;\n}\n\nvar hasBadMapPolyfill;\n\n{\n hasBadMapPolyfill = false;\n\n try {\n var nonExtensibleObject = Object.preventExtensions({});\n /* eslint-disable no-new */\n\n new Map([[nonExtensibleObject, null]]);\n new Set([nonExtensibleObject]);\n /* eslint-enable no-new */\n } catch (e) {\n // TODO: Consider warning about bad polyfills\n hasBadMapPolyfill = true;\n }\n}\n\nfunction FiberNode(tag, pendingProps, key, mode) {\n // Instance\n this.tag = tag;\n this.key = key;\n this.elementType = null;\n this.type = null;\n this.stateNode = null; // Fiber\n\n this.return = null;\n this.child = null;\n this.sibling = null;\n this.index = 0;\n this.ref = null;\n this.refCleanup = null;\n this.pendingProps = pendingProps;\n this.memoizedProps = null;\n this.updateQueue = null;\n this.memoizedState = null;\n this.dependencies = null;\n this.mode = mode; // Effects\n\n this.flags = NoFlags$1;\n this.subtreeFlags = NoFlags$1;\n this.deletions = null;\n this.lanes = NoLanes;\n this.childLanes = NoLanes;\n this.alternate = null;\n\n {\n // Note: The following is done to avoid a v8 performance cliff.\n //\n // Initializing the fields below to smis and later updating them with\n // double values will cause Fibers to end up having separate shapes.\n // This behavior/bug has something to do with Object.preventExtension().\n // Fortunately this only impacts DEV builds.\n // Unfortunately it makes React unusably slow for some applications.\n // To work around this, initialize the fields below with doubles.\n //\n // Learn more about this here:\n // https://github.com/facebook/react/issues/14365\n // https://bugs.chromium.org/p/v8/issues/detail?id=8538\n this.actualDuration = Number.NaN;\n this.actualStartTime = Number.NaN;\n this.selfBaseDuration = Number.NaN;\n this.treeBaseDuration = Number.NaN; // It's okay to replace the initial doubles with smis after initialization.\n // This won't trigger the performance cliff mentioned above,\n // and it simplifies other profiler code (including DevTools).\n\n this.actualDuration = 0;\n this.actualStartTime = -1;\n this.selfBaseDuration = 0;\n this.treeBaseDuration = 0;\n }\n\n {\n // This isn't directly used but is handy for debugging internals:\n this._debugSource = null;\n this._debugOwner = null;\n this._debugNeedsRemount = false;\n this._debugHookTypes = null;\n\n if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {\n Object.preventExtensions(this);\n }\n }\n} // This is a constructor function, rather than a POJO constructor, still\n// please ensure we do the following:\n// 1) Nobody should add any instance methods on this. Instance methods can be\n// more difficult to predict when they get optimized and they are almost\n// never inlined properly in static compilers.\n// 2) Nobody should rely on `instanceof Fiber` for type testing. We should\n// always know when it is a fiber.\n// 3) We might want to experiment with using numeric keys since they are easier\n// to optimize in a non-JIT environment.\n// 4) We can easily go from a constructor to a createFiber object literal if that\n// is faster.\n// 5) It should be easy to port this to a C struct and keep a C implementation\n// compatible.\n\n\nfunction createFiber(tag, pendingProps, key, mode) {\n // $FlowFixMe[invalid-constructor]: the shapes are exact here but Flow doesn't like constructors\n return new FiberNode(tag, pendingProps, key, mode);\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction isSimpleFunctionComponent(type) {\n return typeof type === 'function' && !shouldConstruct(type) && type.defaultProps === undefined;\n}\nfunction resolveLazyComponentTag(Component) {\n if (typeof Component === 'function') {\n return shouldConstruct(Component) ? ClassComponent : FunctionComponent;\n } else if (Component !== undefined && Component !== null) {\n var $$typeof = Component.$$typeof;\n\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n return ForwardRef;\n }\n\n if ($$typeof === REACT_MEMO_TYPE) {\n return MemoComponent;\n }\n }\n\n return IndeterminateComponent;\n} // This is used to create an alternate fiber to do work on.\n\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n\n if (workInProgress === null) {\n // We use a double buffering pooling technique because we know that we'll\n // only ever need at most two versions of a tree. We pool the \"other\" unused\n // node that we're free to reuse. This is lazily created to avoid allocating\n // extra objects for things that are never updated. It also allow us to\n // reclaim the extra memory if needed.\n workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode);\n workInProgress.elementType = current.elementType;\n workInProgress.type = current.type;\n workInProgress.stateNode = current.stateNode;\n\n {\n // DEV-only fields\n workInProgress._debugSource = current._debugSource;\n workInProgress._debugOwner = current._debugOwner;\n workInProgress._debugHookTypes = current._debugHookTypes;\n }\n\n workInProgress.alternate = current;\n current.alternate = workInProgress;\n } else {\n workInProgress.pendingProps = pendingProps; // Needed because Blocks store data on type.\n\n workInProgress.type = current.type; // We already have an alternate.\n // Reset the effect tag.\n\n workInProgress.flags = NoFlags$1; // The effects are no longer valid.\n\n workInProgress.subtreeFlags = NoFlags$1;\n workInProgress.deletions = null;\n\n {\n // We intentionally reset, rather than copy, actualDuration & actualStartTime.\n // This prevents time from endlessly accumulating in new commits.\n // This has the downside of resetting values for different priority renders,\n // But works for yielding (the common case) and should support resuming.\n workInProgress.actualDuration = 0;\n workInProgress.actualStartTime = -1;\n }\n } // Reset all effects except static ones.\n // Static effects are not specific to a render.\n\n\n workInProgress.flags = current.flags & StaticMask;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so\n // it cannot be shared with the current fiber.\n\n var currentDependencies = current.dependencies;\n workInProgress.dependencies = currentDependencies === null ? null : {\n lanes: currentDependencies.lanes,\n firstContext: currentDependencies.firstContext\n }; // These will be overridden during the parent's reconciliation\n\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n workInProgress.refCleanup = current.refCleanup;\n\n {\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n }\n\n {\n workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n case FunctionComponent:\n case SimpleMemoComponent:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n\n case ClassComponent:\n workInProgress.type = resolveClassForHotReloading(current.type);\n break;\n\n case ForwardRef:\n workInProgress.type = resolveForwardRefForHotReloading(current.type);\n break;\n }\n }\n\n return workInProgress;\n} // Used to reuse a Fiber for a second pass.\n\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n // This resets the Fiber to what createFiber or createWorkInProgress would\n // have set the values to before during the first pass. Ideally this wouldn't\n // be necessary but unfortunately many code paths reads from the workInProgress\n // when they should be reading from current and writing to workInProgress.\n // We assume pendingProps, index, key, ref, return are still untouched to\n // avoid doing another reconciliation.\n // Reset the effect flags but keep any Placement tags, since that's something\n // that child fiber is setting, not the reconciliation.\n workInProgress.flags &= StaticMask | Placement; // The effects are no longer valid.\n\n var current = workInProgress.alternate;\n\n if (current === null) {\n // Reset to createFiber's initial values.\n workInProgress.childLanes = NoLanes;\n workInProgress.lanes = renderLanes;\n workInProgress.child = null;\n workInProgress.subtreeFlags = NoFlags$1;\n workInProgress.memoizedProps = null;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.dependencies = null;\n workInProgress.stateNode = null;\n\n {\n // Note: We don't reset the actualTime counts. It's useful to accumulate\n // actual time across multiple render passes.\n workInProgress.selfBaseDuration = 0;\n workInProgress.treeBaseDuration = 0;\n }\n } else {\n // Reset to the cloned values that createWorkInProgress would've.\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.subtreeFlags = NoFlags$1;\n workInProgress.deletions = null;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue; // Needed because Blocks store data on type.\n\n workInProgress.type = current.type; // Clone the dependencies object. This is mutated during the render phase, so\n // it cannot be shared with the current fiber.\n\n var currentDependencies = current.dependencies;\n workInProgress.dependencies = currentDependencies === null ? null : {\n lanes: currentDependencies.lanes,\n firstContext: currentDependencies.firstContext\n };\n\n {\n // Note: We don't reset the actualTime counts. It's useful to accumulate\n // actual time across multiple render passes.\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n }\n }\n\n return workInProgress;\n}\nfunction createHostRootFiber(tag, isStrictMode, concurrentUpdatesByDefaultOverride) {\n var mode;\n\n if (tag === ConcurrentRoot) {\n mode = ConcurrentMode;\n\n if (isStrictMode === true || createRootStrictEffectsByDefault) {\n mode |= StrictLegacyMode | StrictEffectsMode;\n }\n } else {\n mode = NoMode;\n }\n\n if (isDevToolsPresent) {\n // Always collect profile timings when DevTools are present.\n // This enables DevTools to start capturing timing at any point–\n // Without some nodes in the tree having empty base times.\n mode |= ProfileMode;\n }\n\n return createFiber(HostRoot, null, null, mode);\n}\nfunction createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, source, owner, mode, lanes) {\n var fiberTag = IndeterminateComponent; // The resolved type is set if we know what the final type will be. I.e. it's not lazy.\n\n var resolvedType = type;\n\n if (typeof type === 'function') {\n if (shouldConstruct(type)) {\n fiberTag = ClassComponent;\n\n {\n resolvedType = resolveClassForHotReloading(resolvedType);\n }\n } else {\n {\n resolvedType = resolveFunctionForHotReloading(resolvedType);\n }\n }\n } else if (typeof type === 'string') {\n {\n var hostContext = getHostContext();\n fiberTag = isHostHoistableType(type, pendingProps, hostContext) ? HostHoistable : isHostSingletonType(type) ? HostSingleton : HostComponent;\n }\n } else {\n getTag: switch (type) {\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n\n case REACT_STRICT_MODE_TYPE:\n fiberTag = Mode;\n mode |= StrictLegacyMode;\n\n if ((mode & ConcurrentMode) !== NoMode) {\n // Strict effects should never run on legacy roots\n mode |= StrictEffectsMode;\n }\n\n break;\n\n case REACT_PROFILER_TYPE:\n return createFiberFromProfiler(pendingProps, mode, lanes, key);\n\n case REACT_SUSPENSE_TYPE:\n return createFiberFromSuspense(pendingProps, mode, lanes, key);\n\n case REACT_SUSPENSE_LIST_TYPE:\n return createFiberFromSuspenseList(pendingProps, mode, lanes, key);\n\n case REACT_OFFSCREEN_TYPE:\n return createFiberFromOffscreen(pendingProps, mode, lanes, key);\n\n case REACT_LEGACY_HIDDEN_TYPE:\n\n // Fall through\n\n case REACT_SCOPE_TYPE:\n\n // Fall through\n\n case REACT_CACHE_TYPE:\n {\n return createFiberFromCache(pendingProps, mode, lanes, key);\n }\n\n // Fall through\n\n case REACT_TRACING_MARKER_TYPE:\n\n // Fall through\n\n case REACT_DEBUG_TRACING_MODE_TYPE:\n\n // Fall through\n\n default:\n {\n if (typeof type === 'object' && type !== null) {\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n fiberTag = ContextProvider;\n break getTag;\n\n case REACT_CONTEXT_TYPE:\n // This is a consumer\n fiberTag = ContextConsumer;\n break getTag;\n\n case REACT_FORWARD_REF_TYPE:\n fiberTag = ForwardRef;\n\n {\n resolvedType = resolveForwardRefForHotReloading(resolvedType);\n }\n\n break getTag;\n\n case REACT_MEMO_TYPE:\n fiberTag = MemoComponent;\n break getTag;\n\n case REACT_LAZY_TYPE:\n fiberTag = LazyComponent;\n resolvedType = null;\n break getTag;\n }\n }\n\n var info = '';\n\n {\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and \" + 'named imports.';\n }\n\n var ownerName = owner ? getComponentNameFromFiber(owner) : null;\n\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n }\n\n throw new Error('Element type is invalid: expected a string (for built-in ' + 'components) or a class/function (for composite components) ' + (\"but got: \" + (type == null ? type : typeof type) + \".\" + info));\n }\n }\n }\n\n var fiber = createFiber(fiberTag, pendingProps, key, mode);\n fiber.elementType = type;\n fiber.type = resolvedType;\n fiber.lanes = lanes;\n\n {\n fiber._debugSource = source;\n fiber._debugOwner = owner;\n }\n\n return fiber;\n}\nfunction createFiberFromElement(element, mode, lanes) {\n var source = null;\n var owner = null;\n\n {\n source = element._source;\n owner = element._owner;\n }\n\n var type = element.type;\n var key = element.key;\n var pendingProps = element.props;\n var fiber = createFiberFromTypeAndProps(type, key, pendingProps, source, owner, mode, lanes);\n\n {\n fiber._debugSource = element._source;\n fiber._debugOwner = element._owner;\n }\n\n return fiber;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n var fiber = createFiber(Fragment, elements, key, mode);\n fiber.lanes = lanes;\n return fiber;\n}\n\nfunction createFiberFromProfiler(pendingProps, mode, lanes, key) {\n {\n if (typeof pendingProps.id !== 'string') {\n error('Profiler must specify an \"id\" of type `string` as a prop. Received the type `%s` instead.', typeof pendingProps.id);\n }\n }\n\n var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode);\n fiber.elementType = REACT_PROFILER_TYPE;\n fiber.lanes = lanes;\n\n {\n fiber.stateNode = {\n effectDuration: 0,\n passiveEffectDuration: 0\n };\n }\n\n return fiber;\n}\n\nfunction createFiberFromSuspense(pendingProps, mode, lanes, key) {\n var fiber = createFiber(SuspenseComponent, pendingProps, key, mode);\n fiber.elementType = REACT_SUSPENSE_TYPE;\n fiber.lanes = lanes;\n return fiber;\n}\nfunction createFiberFromSuspenseList(pendingProps, mode, lanes, key) {\n var fiber = createFiber(SuspenseListComponent, pendingProps, key, mode);\n fiber.elementType = REACT_SUSPENSE_LIST_TYPE;\n fiber.lanes = lanes;\n return fiber;\n}\nfunction createFiberFromOffscreen(pendingProps, mode, lanes, key) {\n var fiber = createFiber(OffscreenComponent, pendingProps, key, mode);\n fiber.elementType = REACT_OFFSCREEN_TYPE;\n fiber.lanes = lanes;\n var primaryChildInstance = {\n _visibility: OffscreenVisible,\n _pendingVisibility: OffscreenVisible,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null,\n _current: null,\n detach: function () {\n return detachOffscreenInstance(primaryChildInstance);\n },\n attach: function () {\n return attachOffscreenInstance(primaryChildInstance);\n }\n };\n fiber.stateNode = primaryChildInstance;\n return fiber;\n}\nfunction createFiberFromCache(pendingProps, mode, lanes, key) {\n var fiber = createFiber(CacheComponent, pendingProps, key, mode);\n fiber.elementType = REACT_CACHE_TYPE;\n fiber.lanes = lanes;\n return fiber;\n}\nfunction createFiberFromText(content, mode, lanes) {\n var fiber = createFiber(HostText, content, null, mode);\n fiber.lanes = lanes;\n return fiber;\n}\nfunction createFiberFromHostInstanceForDeletion() {\n var fiber = createFiber(HostComponent, null, null, NoMode);\n fiber.elementType = 'DELETED';\n return fiber;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiber(DehydratedFragment, null, null, NoMode);\n fiber.stateNode = dehydratedNode;\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n var pendingProps = portal.children !== null ? portal.children : [];\n var fiber = createFiber(HostPortal, pendingProps, portal.key, mode);\n fiber.lanes = lanes;\n fiber.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n // Used by persistent updates\n implementation: portal.implementation\n };\n return fiber;\n} // Used for stashing WIP properties to replay failed work in DEV.\n\nfunction assignFiberPropertiesInDEV(target, source) {\n if (target === null) {\n // This Fiber's initial properties will always be overwritten.\n // We only use a Fiber to ensure the same hidden class so DEV isn't slow.\n target = createFiber(IndeterminateComponent, null, null, NoMode);\n } // This is intentionally written as a list of all properties.\n // We tried to use Object.assign() instead but this is called in\n // the hottest path, and Object.assign() was too slow:\n // https://github.com/facebook/react/issues/12502\n // This code is DEV-only so size is not a concern.\n\n\n target.tag = source.tag;\n target.key = source.key;\n target.elementType = source.elementType;\n target.type = source.type;\n target.stateNode = source.stateNode;\n target.return = source.return;\n target.child = source.child;\n target.sibling = source.sibling;\n target.index = source.index;\n target.ref = source.ref;\n target.refCleanup = source.refCleanup;\n target.pendingProps = source.pendingProps;\n target.memoizedProps = source.memoizedProps;\n target.updateQueue = source.updateQueue;\n target.memoizedState = source.memoizedState;\n target.dependencies = source.dependencies;\n target.mode = source.mode;\n target.flags = source.flags;\n target.subtreeFlags = source.subtreeFlags;\n target.deletions = source.deletions;\n target.lanes = source.lanes;\n target.childLanes = source.childLanes;\n target.alternate = source.alternate;\n\n {\n target.actualDuration = source.actualDuration;\n target.actualStartTime = source.actualStartTime;\n target.selfBaseDuration = source.selfBaseDuration;\n target.treeBaseDuration = source.treeBaseDuration;\n }\n\n target._debugSource = source._debugSource;\n target._debugOwner = source._debugOwner;\n target._debugNeedsRemount = source._debugNeedsRemount;\n target._debugHookTypes = source._debugHookTypes;\n return target;\n}\n\nfunction FiberRootNode(containerInfo, // $FlowFixMe[missing-local-annot]\ntag, hydrate, identifierPrefix, onRecoverableError, formState) {\n this.tag = tag;\n this.containerInfo = containerInfo;\n this.pendingChildren = null;\n this.current = null;\n this.pingCache = null;\n this.finishedWork = null;\n this.timeoutHandle = noTimeout;\n this.cancelPendingCommit = null;\n this.context = null;\n this.pendingContext = null;\n this.next = null;\n this.callbackNode = null;\n this.callbackPriority = NoLane;\n this.expirationTimes = createLaneMap(NoTimestamp);\n this.pendingLanes = NoLanes;\n this.suspendedLanes = NoLanes;\n this.pingedLanes = NoLanes;\n this.expiredLanes = NoLanes;\n this.finishedLanes = NoLanes;\n this.errorRecoveryDisabledLanes = NoLanes;\n this.shellSuspendCounter = 0;\n this.entangledLanes = NoLanes;\n this.entanglements = createLaneMap(NoLanes);\n this.hiddenUpdates = createLaneMap(null);\n this.identifierPrefix = identifierPrefix;\n this.onRecoverableError = onRecoverableError;\n\n {\n this.pooledCache = null;\n this.pooledCacheLanes = NoLanes;\n }\n\n this.formState = formState;\n this.incompleteTransitions = new Map();\n\n {\n this.effectDuration = 0;\n this.passiveEffectDuration = 0;\n }\n\n {\n this.memoizedUpdaters = new Set();\n var pendingUpdatersLaneMap = this.pendingUpdatersLaneMap = [];\n\n for (var _i = 0; _i < TotalLanes; _i++) {\n pendingUpdatersLaneMap.push(new Set());\n }\n }\n\n {\n switch (tag) {\n case ConcurrentRoot:\n this._debugRootType = hydrate ? 'hydrateRoot()' : 'createRoot()';\n break;\n\n case LegacyRoot:\n this._debugRootType = hydrate ? 'hydrate()' : 'render()';\n break;\n }\n }\n}\n\nfunction createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, // TODO: We have several of these arguments that are conceptually part of the\n// host config, but because they are passed in at runtime, we have to thread\n// them through the root constructor. Perhaps we should put them all into a\n// single type, like a DynamicHostConfig that is defined by the renderer.\nidentifierPrefix, onRecoverableError, transitionCallbacks, formState) {\n // $FlowFixMe[invalid-constructor] Flow no longer supports calling new on functions\n var root = new FiberRootNode(containerInfo, tag, hydrate, identifierPrefix, onRecoverableError, formState);\n // stateNode is any.\n\n\n var uninitializedFiber = createHostRootFiber(tag, isStrictMode);\n root.current = uninitializedFiber;\n uninitializedFiber.stateNode = root;\n\n {\n var initialCache = createCache();\n retainCache(initialCache); // The pooledCache is a fresh cache instance that is used temporarily\n // for newly mounted boundaries during a render. In general, the\n // pooledCache is always cleared from the root at the end of a render:\n // it is either released when render commits, or moved to an Offscreen\n // component if rendering suspends. Because the lifetime of the pooled\n // cache is distinct from the main memoizedState.cache, it must be\n // retained separately.\n\n root.pooledCache = initialCache;\n retainCache(initialCache);\n var initialState = {\n element: initialChildren,\n isDehydrated: hydrate,\n cache: initialCache\n };\n uninitializedFiber.memoizedState = initialState;\n }\n\n initializeUpdateQueue(uninitializedFiber);\n return root;\n}\n\nvar ReactVersion = '18.3.0-canary-60a927d04-20240113';\n\nfunction createPortal$1(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.\nimplementation) {\n var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n {\n checkKeyStringCoercion(key);\n }\n\n return {\n // This tag allow us to uniquely identify this as a React Portal\n $$typeof: REACT_PORTAL_TYPE,\n key: key == null ? null : '' + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\n\n// Might add PROFILE later.\n\nvar didWarnAboutNestedUpdates;\nvar didWarnAboutFindNodeInStrictMode;\n\n{\n didWarnAboutNestedUpdates = false;\n didWarnAboutFindNodeInStrictMode = {};\n}\n\nfunction getContextForSubtree(parentComponent) {\n if (!parentComponent) {\n return emptyContextObject;\n }\n\n var fiber = get(parentComponent);\n var parentContext = findCurrentUnmaskedContext(fiber);\n\n if (fiber.tag === ClassComponent) {\n var Component = fiber.type;\n\n if (isContextProvider(Component)) {\n return processChildContext(fiber, Component, parentContext);\n }\n }\n\n return parentContext;\n}\n\nfunction findHostInstanceWithWarning(component, methodName) {\n {\n var fiber = get(component);\n\n if (fiber === undefined) {\n if (typeof component.render === 'function') {\n throw new Error('Unable to find node on an unmounted component.');\n } else {\n var keys = Object.keys(component).join(',');\n throw new Error(\"Argument appears to not be a ReactComponent. Keys: \" + keys);\n }\n }\n\n var hostFiber = findCurrentHostFiber(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n if (hostFiber.mode & StrictLegacyMode) {\n var componentName = getComponentNameFromFiber(fiber) || 'Component';\n\n if (!didWarnAboutFindNodeInStrictMode[componentName]) {\n didWarnAboutFindNodeInStrictMode[componentName] = true;\n var previousFiber = current;\n\n try {\n setCurrentFiber(hostFiber);\n\n if (fiber.mode & StrictLegacyMode) {\n error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);\n } else {\n error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);\n }\n } finally {\n // Ideally this should reset to previous but this shouldn't be called in\n // render and there's another warning for that anyway.\n if (previousFiber) {\n setCurrentFiber(previousFiber);\n } else {\n resetCurrentFiber();\n }\n }\n }\n }\n\n return getPublicInstance(hostFiber.stateNode);\n }\n}\n\nfunction createContainer(containerInfo, tag, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks) {\n var hydrate = false;\n var initialChildren = null;\n return createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks, null);\n}\nfunction createHydrationContainer(initialChildren, // TODO: Remove `callback` when we delete legacy mode.\ncallback, containerInfo, tag, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks, formState) {\n var hydrate = true;\n var root = createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks, formState); // TODO: Move this to FiberRoot constructor\n\n root.context = getContextForSubtree(null); // Schedule the initial render. In a hydration root, this is different from\n // a regular update because the initial render must match was was rendered\n // on the server.\n // NOTE: This update intentionally doesn't have a payload. We're only using\n // the update to schedule work on the root fiber (and, for legacy roots, to\n // enqueue the callback if one is provided).\n\n var current = root.current;\n var lane = requestUpdateLane(current);\n var update = createUpdate(lane);\n update.callback = callback !== undefined && callback !== null ? callback : null;\n enqueueUpdate(current, update, lane);\n scheduleInitialHydrationOnRoot(root, lane);\n return root;\n}\nfunction updateContainer(element, container, parentComponent, callback) {\n {\n onScheduleRoot(container, element);\n }\n\n var current$1 = container.current;\n var lane = requestUpdateLane(current$1);\n\n {\n markRenderScheduled(lane);\n }\n\n var context = getContextForSubtree(parentComponent);\n\n if (container.context === null) {\n container.context = context;\n } else {\n container.pendingContext = context;\n }\n\n {\n if (isRendering && current !== null && !didWarnAboutNestedUpdates) {\n didWarnAboutNestedUpdates = true;\n\n error('Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\\n\\n' + 'Check the render method of %s.', getComponentNameFromFiber(current) || 'Unknown');\n }\n }\n\n var update = createUpdate(lane); // Caution: React DevTools currently depends on this property\n // being called \"element\".\n\n update.payload = {\n element: element\n };\n callback = callback === undefined ? null : callback;\n\n if (callback !== null) {\n {\n if (typeof callback !== 'function') {\n error('render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback);\n }\n }\n\n update.callback = callback;\n }\n\n var root = enqueueUpdate(current$1, update, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, current$1, lane);\n entangleTransitions(root, current$1, lane);\n }\n\n return lane;\n}\nfunction getPublicRootInstance(container) {\n var containerFiber = container.current;\n\n if (!containerFiber.child) {\n return null;\n }\n\n switch (containerFiber.child.tag) {\n case HostSingleton:\n case HostComponent:\n return getPublicInstance(containerFiber.child.stateNode);\n\n default:\n return containerFiber.child.stateNode;\n }\n}\nfunction attemptSynchronousHydration(fiber) {\n switch (fiber.tag) {\n case HostRoot:\n {\n var root = fiber.stateNode;\n\n if (isRootDehydrated(root)) {\n // Flush the first scheduled \"update\".\n var lanes = getHighestPriorityPendingLanes(root);\n flushRoot(root, lanes);\n }\n\n break;\n }\n\n case SuspenseComponent:\n {\n flushSync$1(function () {\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n }); // If we're still blocked after this, we need to increase\n // the priority of any promises resolving within this\n // boundary so that they next attempt also has higher pri.\n\n var retryLane = SyncLane;\n markRetryLaneIfNotHydrated(fiber, retryLane);\n break;\n }\n }\n}\n\nfunction markRetryLaneImpl(fiber, retryLane) {\n var suspenseState = fiber.memoizedState;\n\n if (suspenseState !== null && suspenseState.dehydrated !== null) {\n suspenseState.retryLane = higherPriorityLane(suspenseState.retryLane, retryLane);\n }\n} // Increases the priority of thenables when they resolve within this boundary.\n\n\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n markRetryLaneImpl(fiber, retryLane);\n var alternate = fiber.alternate;\n\n if (alternate) {\n markRetryLaneImpl(alternate, retryLane);\n }\n}\n\nfunction attemptContinuousHydration(fiber) {\n if (fiber.tag !== SuspenseComponent) {\n // We ignore HostRoots here because we can't increase\n // their priority and they should not suspend on I/O,\n // since you have to wrap anything that might suspend in\n // Suspense.\n return;\n }\n\n var lane = SelectiveHydrationLane;\n var root = enqueueConcurrentRenderForLane(fiber, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, lane);\n }\n\n markRetryLaneIfNotHydrated(fiber, lane);\n}\nfunction attemptHydrationAtCurrentPriority(fiber) {\n if (fiber.tag !== SuspenseComponent) {\n // We ignore HostRoots here because we can't increase\n // their priority other than synchronously flush it.\n return;\n }\n\n var lane = requestUpdateLane(fiber);\n var root = enqueueConcurrentRenderForLane(fiber, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, lane);\n }\n\n markRetryLaneIfNotHydrated(fiber, lane);\n}\nfunction findHostInstanceWithNoPortals(fiber) {\n var hostFiber = findCurrentHostFiberWithNoPortals(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n return getPublicInstance(hostFiber.stateNode);\n}\n\nvar shouldErrorImpl = function (fiber) {\n return null;\n};\n\nfunction shouldError(fiber) {\n return shouldErrorImpl(fiber);\n}\n\nvar shouldSuspendImpl = function (fiber) {\n return false;\n};\n\nfunction shouldSuspend(fiber) {\n return shouldSuspendImpl(fiber);\n}\nvar overrideHookState = null;\nvar overrideHookStateDeletePath = null;\nvar overrideHookStateRenamePath = null;\nvar overrideProps = null;\nvar overridePropsDeletePath = null;\nvar overridePropsRenamePath = null;\nvar scheduleUpdate = null;\nvar setErrorHandler = null;\nvar setSuspenseHandler = null;\n\n{\n var copyWithDeleteImpl = function (obj, path, index) {\n var key = path[index];\n var updated = isArray(obj) ? obj.slice() : assign({}, obj);\n\n if (index + 1 === path.length) {\n if (isArray(updated)) {\n updated.splice(key, 1);\n } else {\n delete updated[key];\n }\n\n return updated;\n } // $FlowFixMe[incompatible-use] number or string is fine here\n\n\n updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);\n return updated;\n };\n\n var copyWithDelete = function (obj, path) {\n return copyWithDeleteImpl(obj, path, 0);\n };\n\n var copyWithRenameImpl = function (obj, oldPath, newPath, index) {\n var oldKey = oldPath[index];\n var updated = isArray(obj) ? obj.slice() : assign({}, obj);\n\n if (index + 1 === oldPath.length) {\n var newKey = newPath[index]; // $FlowFixMe[incompatible-use] number or string is fine here\n\n updated[newKey] = updated[oldKey];\n\n if (isArray(updated)) {\n updated.splice(oldKey, 1);\n } else {\n delete updated[oldKey];\n }\n } else {\n // $FlowFixMe[incompatible-use] number or string is fine here\n updated[oldKey] = copyWithRenameImpl( // $FlowFixMe[incompatible-use] number or string is fine here\n obj[oldKey], oldPath, newPath, index + 1);\n }\n\n return updated;\n };\n\n var copyWithRename = function (obj, oldPath, newPath) {\n if (oldPath.length !== newPath.length) {\n warn('copyWithRename() expects paths of the same length');\n\n return;\n } else {\n for (var i = 0; i < newPath.length - 1; i++) {\n if (oldPath[i] !== newPath[i]) {\n warn('copyWithRename() expects paths to be the same except for the deepest key');\n\n return;\n }\n }\n }\n\n return copyWithRenameImpl(obj, oldPath, newPath, 0);\n };\n\n var copyWithSetImpl = function (obj, path, index, value) {\n if (index >= path.length) {\n return value;\n }\n\n var key = path[index];\n var updated = isArray(obj) ? obj.slice() : assign({}, obj); // $FlowFixMe[incompatible-use] number or string is fine here\n\n updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);\n return updated;\n };\n\n var copyWithSet = function (obj, path, value) {\n return copyWithSetImpl(obj, path, 0, value);\n };\n\n var findHook = function (fiber, id) {\n // For now, the \"id\" of stateful hooks is just the stateful hook index.\n // This may change in the future with e.g. nested hooks.\n var currentHook = fiber.memoizedState;\n\n while (currentHook !== null && id > 0) {\n currentHook = currentHook.next;\n id--;\n }\n\n return currentHook;\n }; // Support DevTools editable values for useState and useReducer.\n\n\n overrideHookState = function (fiber, id, path, value) {\n var hook = findHook(fiber, id);\n\n if (hook !== null) {\n var newState = copyWithSet(hook.memoizedState, path, value);\n hook.memoizedState = newState;\n hook.baseState = newState; // We aren't actually adding an update to the queue,\n // because there is no update we can add for useReducer hooks that won't trigger an error.\n // (There's no appropriate action type for DevTools overrides.)\n // As a result though, React will see the scheduled update as a noop and bailout.\n // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n fiber.memoizedProps = assign({}, fiber.memoizedProps);\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n }\n };\n\n overrideHookStateDeletePath = function (fiber, id, path) {\n var hook = findHook(fiber, id);\n\n if (hook !== null) {\n var newState = copyWithDelete(hook.memoizedState, path);\n hook.memoizedState = newState;\n hook.baseState = newState; // We aren't actually adding an update to the queue,\n // because there is no update we can add for useReducer hooks that won't trigger an error.\n // (There's no appropriate action type for DevTools overrides.)\n // As a result though, React will see the scheduled update as a noop and bailout.\n // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n fiber.memoizedProps = assign({}, fiber.memoizedProps);\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n }\n };\n\n overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {\n var hook = findHook(fiber, id);\n\n if (hook !== null) {\n var newState = copyWithRename(hook.memoizedState, oldPath, newPath);\n hook.memoizedState = newState;\n hook.baseState = newState; // We aren't actually adding an update to the queue,\n // because there is no update we can add for useReducer hooks that won't trigger an error.\n // (There's no appropriate action type for DevTools overrides.)\n // As a result though, React will see the scheduled update as a noop and bailout.\n // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n fiber.memoizedProps = assign({}, fiber.memoizedProps);\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n }\n }; // Support DevTools props for function components, forwardRef, memo, host components, etc.\n\n\n overrideProps = function (fiber, path, value) {\n fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value);\n\n if (fiber.alternate) {\n fiber.alternate.pendingProps = fiber.pendingProps;\n }\n\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n };\n\n overridePropsDeletePath = function (fiber, path) {\n fiber.pendingProps = copyWithDelete(fiber.memoizedProps, path);\n\n if (fiber.alternate) {\n fiber.alternate.pendingProps = fiber.pendingProps;\n }\n\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n };\n\n overridePropsRenamePath = function (fiber, oldPath, newPath) {\n fiber.pendingProps = copyWithRename(fiber.memoizedProps, oldPath, newPath);\n\n if (fiber.alternate) {\n fiber.alternate.pendingProps = fiber.pendingProps;\n }\n\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n };\n\n scheduleUpdate = function (fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane);\n }\n };\n\n setErrorHandler = function (newShouldErrorImpl) {\n shouldErrorImpl = newShouldErrorImpl;\n };\n\n setSuspenseHandler = function (newShouldSuspendImpl) {\n shouldSuspendImpl = newShouldSuspendImpl;\n };\n}\n\nfunction findHostInstanceByFiber(fiber) {\n var hostFiber = findCurrentHostFiber(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n return hostFiber.stateNode;\n}\n\nfunction emptyFindFiberByHostInstance(instance) {\n return null;\n}\n\nfunction getCurrentFiberForDevTools() {\n return current;\n}\n\nfunction injectIntoDevTools(devToolsConfig) {\n var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;\n var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\n return injectInternals({\n bundleType: devToolsConfig.bundleType,\n version: devToolsConfig.version,\n rendererPackageName: devToolsConfig.rendererPackageName,\n rendererConfig: devToolsConfig.rendererConfig,\n overrideHookState: overrideHookState,\n overrideHookStateDeletePath: overrideHookStateDeletePath,\n overrideHookStateRenamePath: overrideHookStateRenamePath,\n overrideProps: overrideProps,\n overridePropsDeletePath: overridePropsDeletePath,\n overridePropsRenamePath: overridePropsRenamePath,\n setErrorHandler: setErrorHandler,\n setSuspenseHandler: setSuspenseHandler,\n scheduleUpdate: scheduleUpdate,\n currentDispatcherRef: ReactCurrentDispatcher,\n findHostInstanceByFiber: findHostInstanceByFiber,\n findFiberByHostInstance: findFiberByHostInstance || emptyFindFiberByHostInstance,\n // React Refresh\n findHostInstancesForRefresh: findHostInstancesForRefresh ,\n scheduleRefresh: scheduleRefresh ,\n scheduleRoot: scheduleRoot ,\n setRefreshHandler: setRefreshHandler ,\n // Enables DevTools to append owner stacks to error messages in DEV mode.\n getCurrentFiber: getCurrentFiberForDevTools ,\n // Enables DevTools to detect reconciler version rather than renderer version\n // which may not match for third party renderers.\n reconcilerVersion: ReactVersion\n });\n}\n\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n\nvar isInsideEventHandler = false;\n\nfunction finishEventHandler() {\n // Here we wait until all updates have propagated, which is important\n // when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n // Then we restore state of any controlled component.\n var controlledComponentsHavePendingUpdates = needsStateRestore();\n\n if (controlledComponentsHavePendingUpdates) {\n // If a controlled event was fired, we may need to restore the state of\n // the DOM node back to the controlled value. This is necessary when React\n // bails out of the update without touching the DOM.\n // TODO: Restore state in the microtask, after the discrete updates flush,\n // instead of early flushing them here.\n flushSync$1();\n restoreStateIfNeeded();\n }\n}\n\nfunction batchedUpdates(fn, a, b) {\n if (isInsideEventHandler) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(a, b);\n }\n\n isInsideEventHandler = true;\n\n try {\n return batchedUpdates$1(fn, a, b);\n } finally {\n isInsideEventHandler = false;\n finishEventHandler();\n }\n} // TODO: Replace with flushSync\n\nfunction isInteractive(tag) {\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nfunction shouldPreventMouseEvent(name, type, props) {\n switch (name) {\n case 'onClick':\n case 'onClickCapture':\n case 'onDoubleClick':\n case 'onDoubleClickCapture':\n case 'onMouseDown':\n case 'onMouseDownCapture':\n case 'onMouseMove':\n case 'onMouseMoveCapture':\n case 'onMouseUp':\n case 'onMouseUpCapture':\n case 'onMouseEnter':\n return !!(props.disabled && isInteractive(type));\n\n default:\n return false;\n }\n}\n/**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n\n\nfunction getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n\n if (stateNode === null) {\n // Work in progress (ex: onload events in incremental mode).\n return null;\n }\n\n var props = getFiberCurrentPropsFromNode(stateNode);\n\n if (props === null) {\n // Work in progress.\n return null;\n }\n\n var listener = props[registrationName];\n\n if (shouldPreventMouseEvent(registrationName, inst.type, props)) {\n return null;\n }\n\n if (listener && typeof listener !== 'function') {\n throw new Error(\"Expected `\" + registrationName + \"` listener to be a function, instead got a value of `\" + typeof listener + \"` type.\");\n }\n\n return listener;\n}\n\nvar passiveBrowserEventsSupported = false; // Check if browser support events with passive listeners\n// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n\nif (canUseDOM) {\n try {\n var options = {};\n Object.defineProperty(options, 'passive', {\n get: function () {\n passiveBrowserEventsSupported = true;\n }\n });\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, options);\n } catch (e) {\n passiveBrowserEventsSupported = false;\n }\n}\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n var charCode;\n var keyCode = nativeEvent.keyCode;\n\n if ('charCode' in nativeEvent) {\n charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n\n if (charCode === 0 && keyCode === 13) {\n charCode = 13;\n }\n } else {\n // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n charCode = keyCode;\n } // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux)\n // report Enter as charCode 10 when ctrl is pressed.\n\n\n if (charCode === 10) {\n charCode = 13;\n } // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n // Must not discard the (non-)printable Enter-key.\n\n\n if (charCode >= 32 || charCode === 13) {\n return charCode;\n }\n\n return 0;\n}\n\nfunction functionThatReturnsTrue() {\n return true;\n}\n\nfunction functionThatReturnsFalse() {\n return false;\n} // This is intentionally a factory so that we have different returned constructors.\n// If we had a single constructor, it would be megamorphic and engines would deopt.\n\n\nfunction createSyntheticEvent(Interface) {\n /**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n */\n // $FlowFixMe[missing-this-annot]\n function SyntheticBaseEvent(reactName, reactEventType, targetInst, nativeEvent, nativeEventTarget) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n\n for (var propName in Interface) {\n if (!Interface.hasOwnProperty(propName)) {\n continue;\n }\n\n var normalize = Interface[propName];\n\n if (normalize) {\n this[propName] = normalize(nativeEvent);\n } else {\n this[propName] = nativeEvent[propName];\n }\n }\n\n var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n\n if (defaultPrevented) {\n this.isDefaultPrevented = functionThatReturnsTrue;\n } else {\n this.isDefaultPrevented = functionThatReturnsFalse;\n }\n\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n assign(SyntheticBaseEvent.prototype, {\n // $FlowFixMe[missing-this-annot]\n preventDefault: function () {\n this.defaultPrevented = true;\n var event = this.nativeEvent;\n\n if (!event) {\n return;\n }\n\n if (event.preventDefault) {\n event.preventDefault(); // $FlowFixMe[illegal-typeof] - flow is not aware of `unknown` in IE\n } else if (typeof event.returnValue !== 'unknown') {\n event.returnValue = false;\n }\n\n this.isDefaultPrevented = functionThatReturnsTrue;\n },\n // $FlowFixMe[missing-this-annot]\n stopPropagation: function () {\n var event = this.nativeEvent;\n\n if (!event) {\n return;\n }\n\n if (event.stopPropagation) {\n event.stopPropagation(); // $FlowFixMe[illegal-typeof] - flow is not aware of `unknown` in IE\n } else if (typeof event.cancelBubble !== 'unknown') {\n // The ChangeEventPlugin registers a \"propertychange\" event for\n // IE. This event does not support bubbling or cancelling, and\n // any references to cancelBubble throw \"Member not found\". A\n // typeof check of \"unknown\" circumvents this issue (and is also\n // IE specific).\n event.cancelBubble = true;\n }\n\n this.isPropagationStopped = functionThatReturnsTrue;\n },\n\n /**\n * We release all dispatched `SyntheticEvent`s after each event loop, adding\n * them back into the pool. This allows a way to hold onto a reference that\n * won't be added back into the pool.\n */\n persist: function () {// Modern event system doesn't use pooling.\n },\n\n /**\n * Checks if this event should be released back into the pool.\n *\n * @return {boolean} True if this should not be released, false otherwise.\n */\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n}\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\n\nvar EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n};\nvar SyntheticEvent = createSyntheticEvent(EventInterface);\n\nvar UIEventInterface = assign({}, EventInterface, {\n view: 0,\n detail: 0\n});\n\nvar SyntheticUIEvent = createSyntheticEvent(UIEventInterface);\nvar lastMovementX;\nvar lastMovementY;\nvar lastMouseEvent;\n\nfunction updateMouseMovementPolyfillState(event) {\n if (event !== lastMouseEvent) {\n if (lastMouseEvent && event.type === 'mousemove') {\n // $FlowFixMe[unsafe-arithmetic] assuming this is a number\n lastMovementX = event.screenX - lastMouseEvent.screenX; // $FlowFixMe[unsafe-arithmetic] assuming this is a number\n\n lastMovementY = event.screenY - lastMouseEvent.screenY;\n } else {\n lastMovementX = 0;\n lastMovementY = 0;\n }\n\n lastMouseEvent = event;\n }\n}\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\n\nvar MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n if (event.relatedTarget === undefined) return event.fromElement === event.srcElement ? event.toElement : event.fromElement;\n return event.relatedTarget;\n },\n movementX: function (event) {\n if ('movementX' in event) {\n return event.movementX;\n }\n\n updateMouseMovementPolyfillState(event);\n return lastMovementX;\n },\n movementY: function (event) {\n if ('movementY' in event) {\n return event.movementY;\n } // Don't need to call updateMouseMovementPolyfillState() here\n // because it's guaranteed to have already run when movementX\n // was copied.\n\n\n return lastMovementY;\n }\n});\n\nvar SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface);\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar DragEventInterface = assign({}, MouseEventInterface, {\n dataTransfer: 0\n});\n\nvar SyntheticDragEvent = createSyntheticEvent(DragEventInterface);\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar FocusEventInterface = assign({}, UIEventInterface, {\n relatedTarget: 0\n});\n\nvar SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\n\nvar AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n});\n\nvar SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\n\nvar ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n }\n});\n\nvar SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\n\nvar CompositionEventInterface = assign({}, EventInterface, {\n data: 0\n});\n\nvar SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n * /#events-inputevents\n */\n// Happens to share the same list for now.\n\nvar SyntheticInputEvent = SyntheticCompositionEvent;\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar normalizeKey = {\n Esc: 'Escape',\n Spacebar: ' ',\n Left: 'ArrowLeft',\n Up: 'ArrowUp',\n Right: 'ArrowRight',\n Down: 'ArrowDown',\n Del: 'Delete',\n Win: 'OS',\n Menu: 'ContextMenu',\n Apps: 'ContextMenu',\n Scroll: 'ScrollLock',\n MozPrintableKey: 'Unidentified'\n};\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar translateToKey = {\n '8': 'Backspace',\n '9': 'Tab',\n '12': 'Clear',\n '13': 'Enter',\n '16': 'Shift',\n '17': 'Control',\n '18': 'Alt',\n '19': 'Pause',\n '20': 'CapsLock',\n '27': 'Escape',\n '32': ' ',\n '33': 'PageUp',\n '34': 'PageDown',\n '35': 'End',\n '36': 'Home',\n '37': 'ArrowLeft',\n '38': 'ArrowUp',\n '39': 'ArrowRight',\n '40': 'ArrowDown',\n '45': 'Insert',\n '46': 'Delete',\n '112': 'F1',\n '113': 'F2',\n '114': 'F3',\n '115': 'F4',\n '116': 'F5',\n '117': 'F6',\n '118': 'F7',\n '119': 'F8',\n '120': 'F9',\n '121': 'F10',\n '122': 'F11',\n '123': 'F12',\n '144': 'NumLock',\n '145': 'ScrollLock',\n '224': 'Meta'\n};\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\n\nfunction getEventKey(nativeEvent) {\n if (nativeEvent.key) {\n // Normalize inconsistent values reported by browsers due to\n // implementations of a working draft specification.\n // FireFox implements `key` but returns `MozPrintableKey` for all\n // printable characters (normalized to `Unidentified`), ignore it.\n var key = // $FlowFixMe[invalid-computed-prop] unable to index with a `mixed` value\n normalizeKey[nativeEvent.key] || nativeEvent.key;\n\n if (key !== 'Unidentified') {\n return key;\n }\n } // Browser does not implement `key`, polyfill as much of it as we can.\n\n\n if (nativeEvent.type === 'keypress') {\n var charCode = getEventCharCode( // $FlowFixMe[incompatible-call] unable to narrow to `KeyboardEvent`\n nativeEvent); // The enter-key is technically both printable and non-printable and can\n // thus be captured by `keypress`, no other non-printable key should.\n\n return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n }\n\n if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n // While user keyboard layout determines the actual meaning of each\n // `keyCode` value, almost all function keys have a universal value.\n // $FlowFixMe[invalid-computed-prop] unable to index with a `mixed` value\n return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n }\n\n return '';\n}\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\n\nvar modifierKeyToProp = {\n Alt: 'altKey',\n Control: 'ctrlKey',\n Meta: 'metaKey',\n Shift: 'shiftKey'\n}; // Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support\n// getModifierState. If getModifierState is not supported, we map it to a set of\n// modifier keys exposed by the event. In this case, Lock-keys are not supported.\n// $FlowFixMe[missing-local-annot]\n// $FlowFixMe[missing-this-annot]\n\nfunction modifierStateGetter(keyArg) {\n var syntheticEvent = this;\n var nativeEvent = syntheticEvent.nativeEvent;\n\n if (nativeEvent.getModifierState) {\n return nativeEvent.getModifierState(keyArg);\n }\n\n var keyProp = modifierKeyToProp[keyArg];\n return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n return modifierStateGetter;\n}\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\n\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n key: getEventKey,\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n // Legacy Interface\n charCode: function (event) {\n // `charCode` is the result of a KeyPress event and represents the value of\n // the actual printable character.\n // KeyPress is deprecated, but its replacement is not yet final and not\n // implemented in any major browser. Only KeyPress has charCode.\n if (event.type === 'keypress') {\n return getEventCharCode( // $FlowFixMe[incompatible-call] unable to narrow to `KeyboardEvent`\n event);\n }\n\n return 0;\n },\n keyCode: function (event) {\n // `keyCode` is the result of a KeyDown/Up event and represents the value of\n // physical keyboard key.\n // The actual meaning of the value depends on the users' keyboard layout\n // which cannot be detected. Assuming that it is a US keyboard layout\n // provides a surprisingly accurate mapping for US and European users.\n // Due to this, it is left to the user to implement at this time.\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n\n return 0;\n },\n which: function (event) {\n // `which` is an alias for either `keyCode` or `charCode` depending on the\n // type of the event.\n if (event.type === 'keypress') {\n return getEventCharCode( // $FlowFixMe[incompatible-call] unable to narrow to `KeyboardEvent`\n event);\n }\n\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n\n return 0;\n }\n});\n\nvar SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface);\n/**\n * @interface PointerEvent\n * @see http://www.w3.org/TR/pointerevents/\n */\n\nvar PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n});\n\nvar SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface);\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\n\nvar TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n});\n\nvar SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\n\nvar TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n});\n\nvar SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface);\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n 'wheelDeltaX' in event ? // $FlowFixMe[unsafe-arithmetic] assuming this is a number\n -event.wheelDeltaX : 0;\n },\n deltaY: function (event) {\n return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n 'wheelDeltaY' in event ? // $FlowFixMe[unsafe-arithmetic] assuming this is a number\n -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n 'wheelDelta' in event ? // $FlowFixMe[unsafe-arithmetic] assuming this is a number\n -event.wheelDelta : 0;\n },\n deltaZ: 0,\n // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n deltaMode: 0\n});\n\nvar SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface);\n\n/**\n * This plugin invokes action functions on forms, inputs and buttons if\n * the form doesn't prevent default.\n */\n\nfunction extractEvents$6(dispatchQueue, domEventName, maybeTargetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n if (domEventName !== 'submit') {\n return;\n }\n\n if (!maybeTargetInst || maybeTargetInst.stateNode !== nativeEventTarget) {\n // If we're inside a parent root that itself is a parent of this root, then\n // its deepest target won't be the actual form that's being submitted.\n return;\n }\n\n var formInst = maybeTargetInst;\n var form = nativeEventTarget;\n var action = getFiberCurrentPropsFromNode(form).action;\n var submitter = nativeEvent.submitter;\n var submitterAction;\n\n if (submitter) {\n var submitterProps = getFiberCurrentPropsFromNode(submitter);\n submitterAction = submitterProps ? submitterProps.formAction : submitter.getAttribute('formAction');\n\n if (submitterAction != null) {\n // The submitter overrides the form action.\n action = submitterAction; // If the action is a function, we don't want to pass its name\n // value to the FormData since it's controlled by the server.\n\n submitter = null;\n }\n }\n\n if (typeof action !== 'function') {\n return;\n }\n\n var event = new SyntheticEvent('action', 'action', null, nativeEvent, nativeEventTarget);\n\n function submitForm() {\n if (nativeEvent.defaultPrevented) {\n // We let earlier events to prevent the action from submitting.\n return;\n } // Prevent native navigation.\n\n\n event.preventDefault();\n var formData;\n\n if (submitter) {\n // The submitter's value should be included in the FormData.\n // It should be in the document order in the form.\n // Since the FormData constructor invokes the formdata event it also\n // needs to be available before that happens so after construction it's too\n // late. We use a temporary fake node for the duration of this event.\n // TODO: FormData takes a second argument that it's the submitter but this\n // is fairly new so not all browsers support it yet. Switch to that technique\n // when available.\n var temp = submitter.ownerDocument.createElement('input');\n temp.name = submitter.name;\n temp.value = submitter.value;\n submitter.parentNode.insertBefore(temp, submitter);\n formData = new FormData(form);\n temp.parentNode.removeChild(temp);\n } else {\n formData = new FormData(form);\n }\n\n var pendingState = {\n pending: true,\n data: formData,\n method: form.method,\n action: action\n };\n\n {\n Object.freeze(pendingState);\n }\n\n startHostTransition(formInst, pendingState, action, formData);\n }\n\n dispatchQueue.push({\n event: event,\n listeners: [{\n instance: null,\n listener: submitForm,\n currentTarget: form\n }]\n });\n}\nfunction dispatchReplayedFormAction(formInst, form, action, formData) {\n var pendingState = {\n pending: true,\n data: formData,\n method: form.method,\n action: action\n };\n\n {\n Object.freeze(pendingState);\n }\n\n startHostTransition(formInst, pendingState, action, formData);\n}\n\n// has this definition built-in.\n\nvar hasScheduledReplayAttempt = false; // The last of each continuous event type. We only need to replay the last one\n// if the last target was dehydrated.\n\nvar queuedFocus = null;\nvar queuedDrag = null;\nvar queuedMouse = null; // For pointer events there can be one latest event per pointerId.\n\nvar queuedPointers = new Map();\nvar queuedPointerCaptures = new Map(); // We could consider replaying selectionchange and touchmoves too.\n\nvar queuedExplicitHydrationTargets = [];\nvar discreteReplayableEvents = ['mousedown', 'mouseup', 'touchcancel', 'touchend', 'touchstart', 'auxclick', 'dblclick', 'pointercancel', 'pointerdown', 'pointerup', 'dragend', 'dragstart', 'drop', 'compositionend', 'compositionstart', 'keydown', 'keypress', 'keyup', 'input', 'textInput', // Intentionally camelCase\n'copy', 'cut', 'paste', 'click', 'change', 'contextmenu', 'reset' // 'submit', // stopPropagation blocks the replay mechanism\n];\nfunction isDiscreteEventThatRequiresHydration(eventType) {\n return discreteReplayableEvents.indexOf(eventType) > -1;\n}\n\nfunction createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n return {\n blockedOn: blockedOn,\n domEventName: domEventName,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetContainers: [targetContainer]\n };\n} // Resets the replaying for this type of continuous event to no event.\n\n\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n switch (domEventName) {\n case 'focusin':\n case 'focusout':\n queuedFocus = null;\n break;\n\n case 'dragenter':\n case 'dragleave':\n queuedDrag = null;\n break;\n\n case 'mouseover':\n case 'mouseout':\n queuedMouse = null;\n break;\n\n case 'pointerover':\n case 'pointerout':\n {\n var pointerId = nativeEvent.pointerId;\n queuedPointers.delete(pointerId);\n break;\n }\n\n case 'gotpointercapture':\n case 'lostpointercapture':\n {\n var _pointerId = nativeEvent.pointerId;\n queuedPointerCaptures.delete(_pointerId);\n break;\n }\n }\n}\n\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n if (existingQueuedEvent === null || existingQueuedEvent.nativeEvent !== nativeEvent) {\n var queuedEvent = createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent);\n\n if (blockedOn !== null) {\n var fiber = getInstanceFromNode(blockedOn);\n\n if (fiber !== null) {\n // Attempt to increase the priority of this target.\n attemptContinuousHydration(fiber);\n }\n }\n\n return queuedEvent;\n } // If we have already queued this exact event, then it's because\n // the different event systems have different DOM event listeners.\n // We can accumulate the flags, and the targetContainers, and\n // store a single event to be replayed.\n\n\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n var targetContainers = existingQueuedEvent.targetContainers;\n\n if (targetContainer !== null && targetContainers.indexOf(targetContainer) === -1) {\n targetContainers.push(targetContainer);\n }\n\n return existingQueuedEvent;\n}\n\nfunction queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n // These set relatedTarget to null because the replayed event will be treated as if we\n // moved from outside the window (no target) onto the target once it hydrates.\n // Instead of mutating we could clone the event.\n switch (domEventName) {\n case 'focusin':\n {\n var focusEvent = nativeEvent;\n queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(queuedFocus, blockedOn, domEventName, eventSystemFlags, targetContainer, focusEvent);\n return true;\n }\n\n case 'dragenter':\n {\n var dragEvent = nativeEvent;\n queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(queuedDrag, blockedOn, domEventName, eventSystemFlags, targetContainer, dragEvent);\n return true;\n }\n\n case 'mouseover':\n {\n var mouseEvent = nativeEvent;\n queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(queuedMouse, blockedOn, domEventName, eventSystemFlags, targetContainer, mouseEvent);\n return true;\n }\n\n case 'pointerover':\n {\n var pointerEvent = nativeEvent;\n var pointerId = pointerEvent.pointerId;\n queuedPointers.set(pointerId, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointers.get(pointerId) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, pointerEvent));\n return true;\n }\n\n case 'gotpointercapture':\n {\n var _pointerEvent = nativeEvent;\n var _pointerId2 = _pointerEvent.pointerId;\n queuedPointerCaptures.set(_pointerId2, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointerCaptures.get(_pointerId2) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, _pointerEvent));\n return true;\n }\n }\n\n return false;\n} // Check if this target is unblocked. Returns true if it's unblocked.\n\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n // TODO: This function shares a lot of logic with findInstanceBlockingEvent.\n // Try to unify them. It's a bit tricky since it would require two return\n // values.\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n\n if (targetInst !== null) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n\n if (nearestMounted !== null) {\n var tag = nearestMounted.tag;\n\n if (tag === SuspenseComponent) {\n var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n if (instance !== null) {\n // We're blocked on hydrating this boundary.\n // Increase its priority.\n queuedTarget.blockedOn = instance;\n runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (tag === HostRoot) {\n var root = nearestMounted.stateNode;\n\n if (isRootDehydrated(root)) {\n queuedTarget.blockedOn = getContainerFromFiber(nearestMounted); // We don't currently have a way to increase the priority of\n // a root other than sync.\n\n return;\n }\n }\n }\n }\n\n queuedTarget.blockedOn = null;\n}\n\nfunction queueExplicitHydrationTarget(target) {\n // TODO: This will read the priority if it's dispatched by the React\n // event system but not native events. Should read window.event.type, like\n // we do for updates (getCurrentEventPriority).\n var updatePriority = getCurrentUpdatePriority();\n var queuedTarget = {\n blockedOn: null,\n target: target,\n priority: updatePriority\n };\n var i = 0;\n\n for (; i < queuedExplicitHydrationTargets.length; i++) {\n // Stop once we hit the first target with lower priority than\n if (!isHigherEventPriority(updatePriority, queuedExplicitHydrationTargets[i].priority)) {\n break;\n }\n }\n\n queuedExplicitHydrationTargets.splice(i, 0, queuedTarget);\n\n if (i === 0) {\n attemptExplicitHydrationTarget(queuedTarget);\n }\n}\n\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (queuedEvent.blockedOn !== null) {\n return false;\n }\n\n var targetContainers = queuedEvent.targetContainers;\n\n while (targetContainers.length > 0) {\n var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n\n if (nextBlockedOn === null) {\n var nativeEvent = queuedEvent.nativeEvent;\n var nativeEventClone = new nativeEvent.constructor(nativeEvent.type, nativeEvent);\n setReplayingEvent(nativeEventClone);\n nativeEvent.target.dispatchEvent(nativeEventClone);\n resetReplayingEvent();\n } else {\n // We're still blocked. Try again later.\n var fiber = getInstanceFromNode(nextBlockedOn);\n\n if (fiber !== null) {\n attemptContinuousHydration(fiber);\n }\n\n queuedEvent.blockedOn = nextBlockedOn;\n return false;\n } // This target container was successfully dispatched. Try the next.\n\n\n targetContainers.shift();\n }\n\n return true;\n}\n\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n if (attemptReplayContinuousQueuedEvent(queuedEvent)) {\n map.delete(key);\n }\n}\n\nfunction replayUnblockedEvents() {\n hasScheduledReplayAttempt = false; // Replay any continuous events.\n\n if (queuedFocus !== null && attemptReplayContinuousQueuedEvent(queuedFocus)) {\n queuedFocus = null;\n }\n\n if (queuedDrag !== null && attemptReplayContinuousQueuedEvent(queuedDrag)) {\n queuedDrag = null;\n }\n\n if (queuedMouse !== null && attemptReplayContinuousQueuedEvent(queuedMouse)) {\n queuedMouse = null;\n }\n\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\n\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n if (queuedEvent.blockedOn === unblocked) {\n queuedEvent.blockedOn = null;\n\n if (!hasScheduledReplayAttempt) {\n hasScheduledReplayAttempt = true; // Schedule a callback to attempt replaying as many events as are\n // now unblocked. This first might not actually be unblocked yet.\n // We could check it early to avoid scheduling an unnecessary callback.\n\n Scheduler.unstable_scheduleCallback(Scheduler.unstable_NormalPriority, replayUnblockedEvents);\n }\n }\n} // [form, submitter or action, formData...]\n\n\nvar lastScheduledReplayQueue = null;\n\nfunction replayUnblockedFormActions(formReplayingQueue) {\n if (lastScheduledReplayQueue === formReplayingQueue) {\n lastScheduledReplayQueue = null;\n }\n\n for (var i = 0; i < formReplayingQueue.length; i += 3) {\n var form = formReplayingQueue[i];\n var submitterOrAction = formReplayingQueue[i + 1];\n var formData = formReplayingQueue[i + 2];\n\n if (typeof submitterOrAction !== 'function') {\n // This action is not hydrated yet. This might be because it's blocked on\n // a different React instance or higher up our tree.\n var blockedOn = findInstanceBlockingTarget(submitterOrAction || form);\n\n if (blockedOn === null) {\n // We're not blocked but we don't have an action. This must mean that\n // this is in another React instance. We'll just skip past it.\n continue;\n } else {\n // We're blocked on something in this React instance. We'll retry later.\n break;\n }\n }\n\n var formInst = getInstanceFromNode(form);\n\n if (formInst !== null) {\n // This is part of our instance.\n // We're ready to replay this. Let's delete it from the queue.\n formReplayingQueue.splice(i, 3);\n i -= 3;\n dispatchReplayedFormAction(formInst, form, submitterOrAction, formData); // Continue without incrementing the index.\n\n continue;\n } // This form must've been part of a different React instance.\n // If we want to preserve ordering between React instances on the same root\n // we'd need some way for the other instance to ping us when it's done.\n // We'll just skip this and let the other instance execute it.\n\n }\n}\n\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n // Schedule a callback to execute any unblocked form actions in.\n // We only keep track of the last queue which means that if multiple React oscillate\n // commits, we could schedule more callbacks than necessary but it's not a big deal\n // and we only really except one instance.\n if (lastScheduledReplayQueue !== formReplayingQueue) {\n lastScheduledReplayQueue = formReplayingQueue;\n Scheduler.unstable_scheduleCallback(Scheduler.unstable_NormalPriority, function () {\n return replayUnblockedFormActions(formReplayingQueue);\n });\n }\n}\n\nfunction retryIfBlockedOn(unblocked) {\n if (queuedFocus !== null) {\n scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n }\n\n if (queuedDrag !== null) {\n scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n }\n\n if (queuedMouse !== null) {\n scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n }\n\n var unblock = function (queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n };\n\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n\n for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n var queuedTarget = queuedExplicitHydrationTargets[i];\n\n if (queuedTarget.blockedOn === unblocked) {\n queuedTarget.blockedOn = null;\n }\n }\n\n while (queuedExplicitHydrationTargets.length > 0) {\n var nextExplicitTarget = queuedExplicitHydrationTargets[0];\n\n if (nextExplicitTarget.blockedOn !== null) {\n // We're still blocked.\n break;\n } else {\n attemptExplicitHydrationTarget(nextExplicitTarget);\n\n if (nextExplicitTarget.blockedOn === null) {\n // We're unblocked.\n queuedExplicitHydrationTargets.shift();\n }\n }\n }\n\n {\n // Check the document if there are any queued form actions.\n var root = unblocked.getRootNode();\n var formReplayingQueue = root.$$reactFormReplay;\n\n if (formReplayingQueue != null) {\n for (var _i = 0; _i < formReplayingQueue.length; _i += 3) {\n var form = formReplayingQueue[_i];\n var submitterOrAction = formReplayingQueue[_i + 1];\n var formProps = getFiberCurrentPropsFromNode(form);\n\n if (typeof submitterOrAction === 'function') {\n // This action has already resolved. We're just waiting to dispatch it.\n if (!formProps) {\n // This was not part of this React instance. It might have been recently\n // unblocking us from dispatching our events. So let's make sure we schedule\n // a retry.\n scheduleReplayQueueIfNeeded(formReplayingQueue);\n }\n\n continue;\n }\n\n var target = form;\n\n if (formProps) {\n // This form belongs to this React instance but the submitter might\n // not be done yet.\n var action = null;\n var submitter = submitterOrAction;\n\n if (submitter && submitter.hasAttribute('formAction')) {\n // The submitter is the one that is responsible for the action.\n target = submitter;\n var submitterProps = getFiberCurrentPropsFromNode(submitter);\n\n if (submitterProps) {\n // The submitter is part of this instance.\n action = submitterProps.formAction;\n } else {\n var blockedOn = findInstanceBlockingTarget(target);\n\n if (blockedOn !== null) {\n // The submitter is not hydrated yet. We'll wait for it.\n continue;\n } // The submitter must have been a part of a different React instance.\n // Except the form isn't. We don't dispatch actions in this scenario.\n\n }\n } else {\n action = formProps.action;\n }\n\n if (typeof action === 'function') {\n formReplayingQueue[_i + 1] = action;\n } else {\n // Something went wrong so let's just delete this action.\n formReplayingQueue.splice(_i, 3);\n _i -= 3;\n } // Schedule a replay in case this unblocked something.\n\n\n scheduleReplayQueueIfNeeded(formReplayingQueue);\n continue;\n } // Something above this target is still blocked so we can't continue yet.\n // We're not sure if this target is actually part of this React instance\n // yet. It could be a different React as a child but at least some parent is.\n // We must continue for any further queued actions.\n\n }\n }\n }\n}\n\nvar ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig; // TODO: can we stop exporting these?\n\nvar _enabled = true; // This is exported in FB builds for use by legacy FB layer infra.\n// We'd like to remove this but it's not clear if this is safe.\n\nfunction setEnabled(enabled) {\n _enabled = !!enabled;\n}\nfunction isEnabled() {\n return _enabled;\n}\nfunction createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags) {\n var eventPriority = getEventPriority(domEventName);\n var listenerWrapper;\n\n switch (eventPriority) {\n case DiscreteEventPriority:\n listenerWrapper = dispatchDiscreteEvent;\n break;\n\n case ContinuousEventPriority:\n listenerWrapper = dispatchContinuousEvent;\n break;\n\n case DefaultEventPriority:\n default:\n listenerWrapper = dispatchEvent;\n break;\n }\n\n return listenerWrapper.bind(null, domEventName, eventSystemFlags, targetContainer);\n}\n\nfunction dispatchDiscreteEvent(domEventName, eventSystemFlags, container, nativeEvent) {\n var previousPriority = getCurrentUpdatePriority();\n var prevTransition = ReactCurrentBatchConfig.transition;\n ReactCurrentBatchConfig.transition = null;\n\n try {\n setCurrentUpdatePriority(DiscreteEventPriority);\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig.transition = prevTransition;\n }\n}\n\nfunction dispatchContinuousEvent(domEventName, eventSystemFlags, container, nativeEvent) {\n var previousPriority = getCurrentUpdatePriority();\n var prevTransition = ReactCurrentBatchConfig.transition;\n ReactCurrentBatchConfig.transition = null;\n\n try {\n setCurrentUpdatePriority(ContinuousEventPriority);\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig.transition = prevTransition;\n }\n}\n\nfunction dispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n if (!_enabled) {\n return;\n }\n\n var blockedOn = findInstanceBlockingEvent(nativeEvent);\n\n if (blockedOn === null) {\n dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, return_targetInst, targetContainer);\n clearIfContinuousEvent(domEventName, nativeEvent);\n return;\n }\n\n if (queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent)) {\n nativeEvent.stopPropagation();\n return;\n } // We need to clear only if we didn't queue because\n // queueing is accumulative.\n\n\n clearIfContinuousEvent(domEventName, nativeEvent);\n\n if (eventSystemFlags & IS_CAPTURE_PHASE && isDiscreteEventThatRequiresHydration(domEventName)) {\n while (blockedOn !== null) {\n var fiber = getInstanceFromNode(blockedOn);\n\n if (fiber !== null) {\n attemptSynchronousHydration(fiber);\n }\n\n var nextBlockedOn = findInstanceBlockingEvent(nativeEvent);\n\n if (nextBlockedOn === null) {\n dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, return_targetInst, targetContainer);\n }\n\n if (nextBlockedOn === blockedOn) {\n break;\n }\n\n blockedOn = nextBlockedOn;\n }\n\n if (blockedOn !== null) {\n nativeEvent.stopPropagation();\n }\n\n return;\n } // This is not replayable so we'll invoke it but without a target,\n // in case the event system needs to trace it.\n\n\n dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, null, targetContainer);\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n var nativeEventTarget = getEventTarget(nativeEvent);\n return findInstanceBlockingTarget(nativeEventTarget);\n}\nvar return_targetInst = null; // Returns a SuspenseInstance or Container if it's blocked.\n// The return_targetInst field above is conceptually part of the return value.\n\nfunction findInstanceBlockingTarget(targetNode) {\n // TODO: Warn if _enabled is false.\n return_targetInst = null;\n var targetInst = getClosestInstanceFromNode(targetNode);\n\n if (targetInst !== null) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n\n if (nearestMounted === null) {\n // This tree has been unmounted already. Dispatch without a target.\n targetInst = null;\n } else {\n var tag = nearestMounted.tag;\n\n if (tag === SuspenseComponent) {\n var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n if (instance !== null) {\n // Queue the event to be replayed later. Abort dispatching since we\n // don't want this event dispatched twice through the event system.\n // TODO: If this is the first discrete event in the queue. Schedule an increased\n // priority for this boundary.\n return instance;\n } // This shouldn't happen, something went wrong but to avoid blocking\n // the whole system, dispatch the event without a target.\n // TODO: Warn.\n\n\n targetInst = null;\n } else if (tag === HostRoot) {\n var root = nearestMounted.stateNode;\n\n if (isRootDehydrated(root)) {\n // If this happens during a replay something went wrong and it might block\n // the whole system.\n return getContainerFromFiber(nearestMounted);\n }\n\n targetInst = null;\n } else if (nearestMounted !== targetInst) {\n // If we get an event (ex: img onload) before committing that\n // component's mount, ignore it for now (that is, treat it as if it was an\n // event on a non-React tree). We might also consider queueing events and\n // dispatching them after the mount.\n targetInst = null;\n }\n }\n }\n\n return_targetInst = targetInst; // We're not blocked on anything.\n\n return null;\n}\nfunction getEventPriority(domEventName) {\n switch (domEventName) {\n // Used by SimpleEventPlugin:\n case 'cancel':\n case 'click':\n case 'close':\n case 'contextmenu':\n case 'copy':\n case 'cut':\n case 'auxclick':\n case 'dblclick':\n case 'dragend':\n case 'dragstart':\n case 'drop':\n case 'focusin':\n case 'focusout':\n case 'input':\n case 'invalid':\n case 'keydown':\n case 'keypress':\n case 'keyup':\n case 'mousedown':\n case 'mouseup':\n case 'paste':\n case 'pause':\n case 'play':\n case 'pointercancel':\n case 'pointerdown':\n case 'pointerup':\n case 'ratechange':\n case 'reset':\n case 'resize':\n case 'seeked':\n case 'submit':\n case 'touchcancel':\n case 'touchend':\n case 'touchstart':\n case 'volumechange': // Used by polyfills: (fall through)\n\n case 'change':\n case 'selectionchange':\n case 'textInput':\n case 'compositionstart':\n case 'compositionend':\n case 'compositionupdate': // Only enableCreateEventHandleAPI: (fall through)\n\n case 'beforeblur':\n case 'afterblur': // Not used by React but could be by user code: (fall through)\n\n case 'beforeinput':\n case 'blur':\n case 'fullscreenchange':\n case 'focus':\n case 'hashchange':\n case 'popstate':\n case 'select':\n case 'selectstart':\n return DiscreteEventPriority;\n\n case 'drag':\n case 'dragenter':\n case 'dragexit':\n case 'dragleave':\n case 'dragover':\n case 'mousemove':\n case 'mouseout':\n case 'mouseover':\n case 'pointermove':\n case 'pointerout':\n case 'pointerover':\n case 'scroll':\n case 'toggle':\n case 'touchmove':\n case 'wheel': // Not used by React but could be by user code: (fall through)\n\n case 'mouseenter':\n case 'mouseleave':\n case 'pointerenter':\n case 'pointerleave':\n return ContinuousEventPriority;\n\n case 'message':\n {\n // We might be in the Scheduler callback.\n // Eventually this mechanism will be replaced by a check\n // of the current priority on the native scheduler.\n var schedulerPriority = getCurrentPriorityLevel();\n\n switch (schedulerPriority) {\n case ImmediatePriority:\n return DiscreteEventPriority;\n\n case UserBlockingPriority:\n return ContinuousEventPriority;\n\n case NormalPriority$1:\n case LowPriority:\n // TODO: Handle LowSchedulerPriority, somehow. Maybe the same lane as hydration.\n return DefaultEventPriority;\n\n case IdlePriority:\n return IdleEventPriority;\n\n default:\n return DefaultEventPriority;\n }\n }\n\n default:\n return DefaultEventPriority;\n }\n}\n\nfunction addEventBubbleListener(target, eventType, listener) {\n target.addEventListener(eventType, listener, false);\n return listener;\n}\nfunction addEventCaptureListener(target, eventType, listener) {\n target.addEventListener(eventType, listener, true);\n return listener;\n}\nfunction addEventCaptureListenerWithPassiveFlag(target, eventType, listener, passive) {\n target.addEventListener(eventType, listener, {\n capture: true,\n passive: passive\n });\n return listener;\n}\nfunction addEventBubbleListenerWithPassiveFlag(target, eventType, listener, passive) {\n target.addEventListener(eventType, listener, {\n passive: passive\n });\n return listener;\n}\n\n/**\n * These variables store information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n *\n */\nvar root = null;\nvar startText = null;\nvar fallbackText = null;\nfunction initialize(nativeEventTarget) {\n root = nativeEventTarget;\n startText = getText();\n return true;\n}\nfunction reset() {\n root = null;\n startText = null;\n fallbackText = null;\n}\nfunction getData() {\n if (fallbackText) {\n return fallbackText;\n }\n\n var start;\n var startValue = startText;\n var startLength = startValue.length;\n var end;\n var endValue = getText();\n var endLength = endValue.length;\n\n for (start = 0; start < startLength; start++) {\n if (startValue[start] !== endValue[start]) {\n break;\n }\n }\n\n var minEnd = startLength - start;\n\n for (end = 1; end <= minEnd; end++) {\n if (startValue[startLength - end] !== endValue[endLength - end]) {\n break;\n }\n }\n\n var sliceTail = end > 1 ? 1 - end : undefined;\n fallbackText = endValue.slice(start, sliceTail);\n return fallbackText;\n}\nfunction getText() {\n if ('value' in root) {\n return root.value;\n }\n\n return root.textContent;\n}\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\n\nvar START_KEYCODE = 229;\nvar canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;\nvar documentMode = null;\n\nif (canUseDOM && 'documentMode' in document) {\n documentMode = document.documentMode;\n} // Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\n\n\nvar canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode; // In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\n\nvar useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\nfunction registerEvents$3() {\n registerTwoPhaseEvent('onBeforeInput', ['compositionend', 'keypress', 'textInput', 'paste']);\n registerTwoPhaseEvent('onCompositionEnd', ['compositionend', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);\n registerTwoPhaseEvent('onCompositionStart', ['compositionstart', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);\n registerTwoPhaseEvent('onCompositionUpdate', ['compositionupdate', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);\n} // Track whether we've ever handled a keypress on the space key.\n\n\nvar hasSpaceKeypress = false;\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\n\nfunction isKeypressCommand(nativeEvent) {\n return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n/**\n * Translate native top level events into event types.\n */\n\n\nfunction getCompositionEventType(domEventName) {\n switch (domEventName) {\n case 'compositionstart':\n return 'onCompositionStart';\n\n case 'compositionend':\n return 'onCompositionEnd';\n\n case 'compositionupdate':\n return 'onCompositionUpdate';\n }\n}\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n */\n\n\nfunction isFallbackCompositionStart(domEventName, nativeEvent) {\n return domEventName === 'keydown' && nativeEvent.keyCode === START_KEYCODE;\n}\n/**\n * Does our fallback mode think that this event is the end of composition?\n */\n\n\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case 'keyup':\n // Command keys insert or clear IME input.\n return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n\n case 'keydown':\n // Expect IME keyCode on each keydown. If we get any other\n // code we must have exited earlier.\n return nativeEvent.keyCode !== START_KEYCODE;\n\n case 'keypress':\n case 'mousedown':\n case 'focusout':\n // Events are not possible without cancelling IME.\n return true;\n\n default:\n return false;\n }\n}\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\n\n\nfunction getDataFromCustomEvent(nativeEvent) {\n var detail = nativeEvent.detail;\n\n if (typeof detail === 'object' && 'data' in detail) {\n return detail.data;\n }\n\n return null;\n}\n/**\n * Check if a composition event was triggered by Korean IME.\n * Our fallback mode does not work well with IE's Korean IME,\n * so just use native composition events when Korean IME is used.\n * Although CompositionEvent.locale property is deprecated,\n * it is available in IE, where our fallback mode is enabled.\n *\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isUsingKoreanIME(nativeEvent) {\n return nativeEvent.locale === 'ko';\n} // Track the current IME composition status, if any.\n\n\nvar isComposing = false;\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\n\nfunction extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {\n var eventType;\n var fallbackData;\n\n if (canUseCompositionEvent) {\n eventType = getCompositionEventType(domEventName);\n } else if (!isComposing) {\n if (isFallbackCompositionStart(domEventName, nativeEvent)) {\n eventType = 'onCompositionStart';\n }\n } else if (isFallbackCompositionEnd(domEventName, nativeEvent)) {\n eventType = 'onCompositionEnd';\n }\n\n if (!eventType) {\n return null;\n }\n\n if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) {\n // The current composition is stored statically and must not be\n // overwritten while composition continues.\n if (!isComposing && eventType === 'onCompositionStart') {\n isComposing = initialize(nativeEventTarget);\n } else if (eventType === 'onCompositionEnd') {\n if (isComposing) {\n fallbackData = getData();\n }\n }\n }\n\n var listeners = accumulateTwoPhaseListeners(targetInst, eventType);\n\n if (listeners.length > 0) {\n var event = new SyntheticCompositionEvent(eventType, domEventName, null, nativeEvent, nativeEventTarget);\n dispatchQueue.push({\n event: event,\n listeners: listeners\n });\n\n if (fallbackData) {\n // Inject data generated from fallback path into the synthetic event.\n // This matches the property of native CompositionEventInterface.\n // $FlowFixMe[incompatible-use]\n event.data = fallbackData;\n } else {\n var customData = getDataFromCustomEvent(nativeEvent);\n\n if (customData !== null) {\n // $FlowFixMe[incompatible-use]\n event.data = customData;\n }\n }\n }\n}\n\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case 'compositionend':\n return getDataFromCustomEvent(nativeEvent);\n\n case 'keypress':\n /**\n * If native `textInput` events are available, our goal is to make\n * use of them. However, there is a special case: the spacebar key.\n * In Webkit, preventing default on a spacebar `textInput` event\n * cancels character insertion, but it *also* causes the browser\n * to fall back to its default spacebar behavior of scrolling the\n * page.\n *\n * Tracking at:\n * https://code.google.com/p/chromium/issues/detail?id=355103\n *\n * To avoid this issue, use the keypress event as if no `textInput`\n * event is available.\n */\n var which = nativeEvent.which;\n\n if (which !== SPACEBAR_CODE) {\n return null;\n }\n\n hasSpaceKeypress = true;\n return SPACEBAR_CHAR;\n\n case 'textInput':\n // Record the characters to be added to the DOM.\n var chars = nativeEvent.data; // If it's a spacebar character, assume that we have already handled\n // it at the keypress level and bail immediately. Android Chrome\n // doesn't give us keycodes, so we need to ignore it.\n\n if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n return null;\n }\n\n return chars;\n\n default:\n // For other native event types, do nothing.\n return null;\n }\n}\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n */\n\n\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n // If we are currently composing (IME) and using a fallback to do so,\n // try to extract the composed characters from the fallback object.\n // If composition event is available, we extract a string only at\n // compositionevent, otherwise extract it at fallback events.\n if (isComposing) {\n if (domEventName === 'compositionend' || !canUseCompositionEvent && isFallbackCompositionEnd(domEventName, nativeEvent)) {\n var chars = getData();\n reset();\n isComposing = false;\n return chars;\n }\n\n return null;\n }\n\n switch (domEventName) {\n case 'paste':\n // If a paste event occurs after a keypress, throw out the input\n // chars. Paste events should not lead to BeforeInput events.\n return null;\n\n case 'keypress':\n /**\n * As of v27, Firefox may fire keypress events even when no character\n * will be inserted. A few possibilities:\n *\n * - `which` is `0`. Arrow keys, Esc key, etc.\n *\n * - `which` is the pressed key code, but no char is available.\n * Ex: 'AltGr + d` in Polish. There is no modified character for\n * this key combination and no character is inserted into the\n * document, but FF fires the keypress for char code `100` anyway.\n * No `input` event will occur.\n *\n * - `which` is the pressed key code, but a command combination is\n * being used. Ex: `Cmd+C`. No character is inserted, and no\n * `input` event will occur.\n */\n if (!isKeypressCommand(nativeEvent)) {\n // IE fires the `keypress` event when a user types an emoji via\n // Touch keyboard of Windows. In such a case, the `char` property\n // holds an emoji character like `\\uD83D\\uDE0A`. Because its length\n // is 2, the property `which` does not represent an emoji correctly.\n // In such a case, we directly return the `char` property instead of\n // using `which`.\n if (nativeEvent.char && nativeEvent.char.length > 1) {\n return nativeEvent.char;\n } else if (nativeEvent.which) {\n return String.fromCharCode(nativeEvent.which);\n }\n }\n\n return null;\n\n case 'compositionend':\n return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;\n\n default:\n return null;\n }\n}\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\n\n\nfunction extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {\n var chars;\n\n if (canUseTextInputEvent) {\n chars = getNativeBeforeInputChars(domEventName, nativeEvent);\n } else {\n chars = getFallbackBeforeInputChars(domEventName, nativeEvent);\n } // If no characters are being inserted, no BeforeInput event should\n // be fired.\n\n\n if (!chars) {\n return null;\n }\n\n var listeners = accumulateTwoPhaseListeners(targetInst, 'onBeforeInput');\n\n if (listeners.length > 0) {\n var event = new SyntheticInputEvent('onBeforeInput', 'beforeinput', null, nativeEvent, nativeEventTarget);\n dispatchQueue.push({\n event: event,\n listeners: listeners\n }); // $FlowFixMe[incompatible-use]\n\n event.data = chars;\n }\n}\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\n\n\nfunction extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n}\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n color: true,\n date: true,\n datetime: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n password: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true\n};\n\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n if (nodeName === 'input') {\n return !!supportedInputTypes[elem.type];\n }\n\n if (nodeName === 'textarea') {\n return true;\n }\n\n return false;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\n\nfunction isEventSupported(eventNameSuffix) {\n if (!canUseDOM) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = (eventName in document);\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n return isSupported;\n}\n\nfunction registerEvents$2() {\n registerTwoPhaseEvent('onChange', ['change', 'click', 'focusin', 'focusout', 'input', 'keydown', 'keyup', 'selectionchange']);\n}\n\nfunction createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, target) {\n // Flag this event loop as needing state restore.\n enqueueStateRestore(target);\n var listeners = accumulateTwoPhaseListeners(inst, 'onChange');\n\n if (listeners.length > 0) {\n var event = new SyntheticEvent('onChange', 'change', null, nativeEvent, target);\n dispatchQueue.push({\n event: event,\n listeners: listeners\n });\n }\n}\n/**\n * For IE shims\n */\n\n\nvar activeElement$1 = null;\nvar activeElementInst$1 = null;\n/**\n * SECTION: handle `change` event\n */\n\nfunction shouldUseChangeEvent(elem) {\n var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(dispatchQueue, activeElementInst$1, nativeEvent, getEventTarget(nativeEvent)); // If change and propertychange bubbled, we'd just bind to it like all the\n // other events and have it go through ReactBrowserEventEmitter. Since it\n // doesn't, we manually listen for the events and so we have to enqueue and\n // process the abstract event manually.\n //\n // Batching is necessary here in order to ensure that all event handlers run\n // before the next rerender (including event handlers attached to ancestor\n // elements instead of directly on the input). Without this, controlled\n // components don't work properly in conjunction with event bubbling because\n // the component is rerendered and the value reverted before all the event\n // handlers can run. See https://github.com/facebook/react/issues/708.\n\n batchedUpdates(runEventInBatch, dispatchQueue);\n}\n\nfunction runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n}\n\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n\n if (updateValueIfChanged(targetNode)) {\n return targetInst;\n }\n}\n\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n if (domEventName === 'change') {\n return targetInst;\n }\n}\n/**\n * SECTION: handle `input` event\n */\n\n\nvar isInputEventSupported = false;\n\nif (canUseDOM) {\n // IE9 claims to support the input event but fails to trigger it when\n // deleting text, so we ignore its input events.\n isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);\n}\n/**\n * (For IE <=9) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\n\n\nfunction startWatchingForValueChange(target, targetInst) {\n activeElement$1 = target;\n activeElementInst$1 = targetInst;\n activeElement$1.attachEvent('onpropertychange', handlePropertyChange);\n}\n/**\n * (For IE <=9) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\n\n\nfunction stopWatchingForValueChange() {\n if (!activeElement$1) {\n return;\n }\n\n activeElement$1.detachEvent('onpropertychange', handlePropertyChange);\n activeElement$1 = null;\n activeElementInst$1 = null;\n}\n/**\n * (For IE <=9) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\n// $FlowFixMe[missing-local-annot]\n\n\nfunction handlePropertyChange(nativeEvent) {\n if (nativeEvent.propertyName !== 'value') {\n return;\n }\n\n if (getInstIfValueChanged(activeElementInst$1)) {\n manualDispatchChangeEvent(nativeEvent);\n }\n}\n\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n if (domEventName === 'focusin') {\n // In IE9, propertychange fires for most input events but is buggy and\n // doesn't fire when text is deleted, but conveniently, selectionchange\n // appears to fire in all of the remaining cases so we catch those and\n // forward the event if the value has changed\n // In either case, we don't want to call the event handler if the value\n // is changed from JS so we redefine a setter for `.value` that updates\n // our activeElementValue variable, allowing us to ignore those changes\n //\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForValueChange();\n startWatchingForValueChange(target, targetInst);\n } else if (domEventName === 'focusout') {\n stopWatchingForValueChange();\n }\n} // For IE8 and IE9.\n\n\nfunction getTargetInstForInputEventPolyfill(domEventName, targetInst) {\n if (domEventName === 'selectionchange' || domEventName === 'keyup' || domEventName === 'keydown') {\n // On the selectionchange event, the target is just document which isn't\n // helpful for us so just check activeElement instead.\n //\n // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n // propertychange on the first input event after setting `value` from a\n // script and fires only keydown, keypress, keyup. Catching keyup usually\n // gets it and catching keydown lets us fire an event for the first\n // keystroke if user does a key repeat (it'll be a little delayed: right\n // before the second keystroke). Other input methods (e.g., paste) seem to\n // fire selectionchange normally.\n return getInstIfValueChanged(activeElementInst$1);\n }\n}\n/**\n * SECTION: handle `click` event\n */\n\n\nfunction shouldUseClickEvent(elem) {\n // Use the `click` event to detect changes to checkbox and radio inputs.\n // This approach works across all browsers, whereas `change` does not fire\n // until `blur` in IE8.\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n if (domEventName === 'click') {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (domEventName === 'input' || domEventName === 'change') {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction handleControlledInputBlur(node, props) {\n if (node.type !== 'number') {\n return;\n }\n\n {\n var isControlled = props.value != null;\n\n if (isControlled) {\n // If controlled, assign the value attribute to the current value on blur\n setDefaultValue(node, 'number', node.value);\n }\n }\n}\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\n\n\nfunction extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;\n var getTargetInstFunc, handleEventFunc;\n\n if (shouldUseChangeEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForChangeEvent;\n } else if (isTextInputElement(targetNode)) {\n if (isInputEventSupported) {\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n } else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n handleEventFunc = handleEventsForInputEventPolyfill;\n }\n } else if (shouldUseClickEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForClickEvent;\n } else ;\n\n if (getTargetInstFunc) {\n var inst = getTargetInstFunc(domEventName, targetInst);\n\n if (inst) {\n createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, nativeEventTarget);\n return;\n }\n }\n\n if (handleEventFunc) {\n handleEventFunc(domEventName, targetNode, targetInst);\n } // When blurring, set the value attribute for number inputs\n\n\n if (domEventName === 'focusout' && targetInst) {\n // These props aren't necessarily the most current but we warn for changing\n // between controlled and uncontrolled, so it doesn't matter and the previous\n // code was also broken for changes.\n var props = targetInst.memoizedProps;\n handleControlledInputBlur(targetNode, props);\n }\n}\n\nfunction registerEvents$1() {\n registerDirectEvent('onMouseEnter', ['mouseout', 'mouseover']);\n registerDirectEvent('onMouseLeave', ['mouseout', 'mouseover']);\n registerDirectEvent('onPointerEnter', ['pointerout', 'pointerover']);\n registerDirectEvent('onPointerLeave', ['pointerout', 'pointerover']);\n}\n/**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n */\n\n\nfunction extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n var isOverEvent = domEventName === 'mouseover' || domEventName === 'pointerover';\n var isOutEvent = domEventName === 'mouseout' || domEventName === 'pointerout';\n\n if (isOverEvent && !isReplayingEvent(nativeEvent)) {\n // If this is an over event with a target, we might have already dispatched\n // the event in the out event of the other target. If this is replayed,\n // then it's because we couldn't dispatch against this target previously\n // so we have to do it now instead.\n var related = nativeEvent.relatedTarget || nativeEvent.fromElement;\n\n if (related) {\n // If the related node is managed by React, we can assume that we have\n // already dispatched the corresponding events during its mouseout.\n if (getClosestInstanceFromNode(related) || isContainerMarkedAsRoot(related)) {\n return;\n }\n }\n }\n\n if (!isOutEvent && !isOverEvent) {\n // Must not be a mouse or pointer in or out - ignoring.\n return;\n }\n\n var win; // TODO: why is this nullable in the types but we read from it?\n\n if (nativeEventTarget.window === nativeEventTarget) {\n // `nativeEventTarget` is probably a window object.\n win = nativeEventTarget;\n } else {\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n var doc = nativeEventTarget.ownerDocument;\n\n if (doc) {\n win = doc.defaultView || doc.parentWindow;\n } else {\n win = window;\n }\n }\n\n var from;\n var to;\n\n if (isOutEvent) {\n var _related = nativeEvent.relatedTarget || nativeEvent.toElement;\n\n from = targetInst;\n to = _related ? getClosestInstanceFromNode(_related) : null;\n\n if (to !== null) {\n var nearestMounted = getNearestMountedFiber(to);\n var tag = to.tag;\n\n if (to !== nearestMounted || tag !== HostComponent && tag !== HostSingleton && tag !== HostText) {\n to = null;\n }\n }\n } else {\n // Moving to a node from outside the window.\n from = null;\n to = targetInst;\n }\n\n if (from === to) {\n // Nothing pertains to our managed components.\n return;\n }\n\n var SyntheticEventCtor = SyntheticMouseEvent;\n var leaveEventType = 'onMouseLeave';\n var enterEventType = 'onMouseEnter';\n var eventTypePrefix = 'mouse';\n\n if (domEventName === 'pointerout' || domEventName === 'pointerover') {\n SyntheticEventCtor = SyntheticPointerEvent;\n leaveEventType = 'onPointerLeave';\n enterEventType = 'onPointerEnter';\n eventTypePrefix = 'pointer';\n }\n\n var fromNode = from == null ? win : getNodeFromInstance(from);\n var toNode = to == null ? win : getNodeFromInstance(to);\n var leave = new SyntheticEventCtor(leaveEventType, eventTypePrefix + 'leave', from, nativeEvent, nativeEventTarget);\n leave.target = fromNode;\n leave.relatedTarget = toNode;\n var enter = null; // We should only process this nativeEvent if we are processing\n // the first ancestor. Next time, we will ignore the event.\n\n var nativeTargetInst = getClosestInstanceFromNode(nativeEventTarget);\n\n if (nativeTargetInst === targetInst) {\n var enterEvent = new SyntheticEventCtor(enterEventType, eventTypePrefix + 'enter', to, nativeEvent, nativeEventTarget);\n enterEvent.target = toNode;\n enterEvent.relatedTarget = fromNode;\n enter = enterEvent;\n }\n\n accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leave, enter, from, to);\n}\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\n\nfunction getLeafNode(node) {\n while (node && node.firstChild) {\n node = node.firstChild;\n }\n\n return node;\n}\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\n\n\nfunction getSiblingNode(node) {\n while (node) {\n if (node.nextSibling) {\n return node.nextSibling;\n }\n\n node = node.parentNode;\n }\n}\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\n\n\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n var nodeStart = 0;\n var nodeEnd = 0;\n\n while (node) {\n if (node.nodeType === TEXT_NODE) {\n nodeEnd = nodeStart + node.textContent.length;\n\n if (nodeStart <= offset && nodeEnd >= offset) {\n return {\n node: node,\n offset: offset - nodeStart\n };\n }\n\n nodeStart = nodeEnd;\n }\n\n node = getLeafNode(getSiblingNode(node));\n }\n}\n\n/**\n * @param {DOMElement} outerNode\n * @return {?object}\n */\n\nfunction getOffsets(outerNode) {\n var ownerDocument = outerNode.ownerDocument;\n var win = ownerDocument && ownerDocument.defaultView || window;\n var selection = win.getSelection && win.getSelection();\n\n if (!selection || selection.rangeCount === 0) {\n return null;\n }\n\n var anchorNode = selection.anchorNode,\n anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode,\n focusOffset = selection.focusOffset; // In Firefox, anchorNode and focusNode can be \"anonymous divs\", e.g. the\n // up/down buttons on an <input type=\"number\">. Anonymous divs do not seem to\n // expose properties, triggering a \"Permission denied error\" if any of its\n // properties are accessed. The only seemingly possible way to avoid erroring\n // is to access a property that typically works for non-anonymous divs and\n // catch any error that may otherwise arise. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n\n try {\n /* eslint-disable ft-flow/no-unused-expressions */\n anchorNode.nodeType;\n focusNode.nodeType;\n /* eslint-enable ft-flow/no-unused-expressions */\n } catch (e) {\n return null;\n }\n\n return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset);\n}\n/**\n * Returns {start, end} where `start` is the character/codepoint index of\n * (anchorNode, anchorOffset) within the textContent of `outerNode`, and\n * `end` is the index of (focusNode, focusOffset).\n *\n * Returns null if you pass in garbage input but we should probably just crash.\n *\n * Exported only for testing.\n */\n\nfunction getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) {\n var length = 0;\n var start = -1;\n var end = -1;\n var indexWithinAnchor = 0;\n var indexWithinFocus = 0;\n var node = outerNode;\n var parentNode = null;\n\n outer: while (true) {\n var next = null;\n\n while (true) {\n if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {\n start = length + anchorOffset;\n }\n\n if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {\n end = length + focusOffset;\n }\n\n if (node.nodeType === TEXT_NODE) {\n length += node.nodeValue.length;\n }\n\n if ((next = node.firstChild) === null) {\n break;\n } // Moving from `node` to its first child `next`.\n\n\n parentNode = node;\n node = next;\n }\n\n while (true) {\n if (node === outerNode) {\n // If `outerNode` has children, this is always the second time visiting\n // it. If it has no children, this is still the first loop, and the only\n // valid selection is anchorNode and focusNode both equal to this node\n // and both offsets 0, in which case we will have handled above.\n break outer;\n }\n\n if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {\n start = length;\n }\n\n if (parentNode === focusNode && ++indexWithinFocus === focusOffset) {\n end = length;\n }\n\n if ((next = node.nextSibling) !== null) {\n break;\n }\n\n node = parentNode;\n parentNode = node.parentNode;\n } // Moving from `node` to its next sibling `next`.\n\n\n node = next;\n }\n\n if (start === -1 || end === -1) {\n // This should never happen. (Would happen if the anchor/focus nodes aren't\n // actually inside the passed-in node.)\n return null;\n }\n\n return {\n start: start,\n end: end\n };\n}\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\n\nfunction setOffsets(node, offsets) {\n var doc = node.ownerDocument || document;\n var win = doc && doc.defaultView || window; // Edge fails with \"Object expected\" in some scenarios.\n // (For instance: TinyMCE editor used in a list component that supports pasting to add more,\n // fails when pasting 100+ items)\n\n if (!win.getSelection) {\n return;\n }\n\n var selection = win.getSelection();\n var length = node.textContent.length;\n var start = Math.min(offsets.start, length);\n var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method.\n // Flip backward selections, so we can set with a single range.\n\n if (!selection.extend && start > end) {\n var temp = end;\n end = start;\n start = temp;\n }\n\n var startMarker = getNodeForCharacterOffset(node, start);\n var endMarker = getNodeForCharacterOffset(node, end);\n\n if (startMarker && endMarker) {\n if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {\n return;\n }\n\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n\n if (start > end) {\n selection.addRange(range);\n selection.extend(endMarker.node, endMarker.offset);\n } else {\n range.setEnd(endMarker.node, endMarker.offset);\n selection.addRange(range);\n }\n }\n}\n\nfunction isTextNode(node) {\n return node && node.nodeType === TEXT_NODE;\n}\n\nfunction containsNode(outerNode, innerNode) {\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n return containsNode(outerNode, innerNode.parentNode);\n } else if ('contains' in outerNode) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n}\n\nfunction isInDocument(node) {\n return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node);\n}\n\nfunction isSameOriginFrame(iframe) {\n try {\n // Accessing the contentDocument of a HTMLIframeElement can cause the browser\n // to throw, e.g. if it has a cross-origin src attribute.\n // Safari will show an error in the console when the access results in \"Blocked a frame with origin\". e.g:\n // iframe.contentDocument.defaultView;\n // A safety way is to access one of the cross origin properties: Window or Location\n // Which might result in \"SecurityError\" DOM Exception and it is compatible to Safari.\n // https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl\n return typeof iframe.contentWindow.location.href === 'string';\n } catch (err) {\n return false;\n }\n}\n\nfunction getActiveElementDeep() {\n var win = window;\n var element = getActiveElement();\n\n while (element instanceof win.HTMLIFrameElement) {\n if (isSameOriginFrame(element)) {\n win = element.contentWindow;\n } else {\n return element;\n }\n\n element = getActiveElement(win.document);\n }\n\n return element;\n}\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\n\n/**\n * @hasSelectionCapabilities: we get the element types that support selection\n * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart`\n * and `selectionEnd` rows.\n */\n\n\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true');\n}\nfunction getSelectionInformation() {\n var focusedElem = getActiveElementDeep();\n return {\n focusedElem: focusedElem,\n selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection$1(focusedElem) : null\n };\n}\n/**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\n\nfunction restoreSelection(priorSelectionInformation) {\n var curFocusedElem = getActiveElementDeep();\n var priorFocusedElem = priorSelectionInformation.focusedElem;\n var priorSelectionRange = priorSelectionInformation.selectionRange;\n\n if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) {\n setSelection(priorFocusedElem, priorSelectionRange);\n } // Focusing a node can change the scroll position, which is undesirable\n\n\n var ancestors = [];\n var ancestor = priorFocusedElem;\n\n while (ancestor = ancestor.parentNode) {\n if (ancestor.nodeType === ELEMENT_NODE) {\n ancestors.push({\n element: ancestor,\n left: ancestor.scrollLeft,\n top: ancestor.scrollTop\n });\n }\n }\n\n if (typeof priorFocusedElem.focus === 'function') {\n priorFocusedElem.focus();\n }\n\n for (var i = 0; i < ancestors.length; i++) {\n var info = ancestors[i];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n}\n/**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\n\nfunction getSelection$1(input) {\n var selection;\n\n if ('selectionStart' in input) {\n // Modern browser with input or textarea.\n selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n } else {\n // Content editable or old IE textarea.\n selection = getOffsets(input);\n }\n\n return selection || {\n start: 0,\n end: 0\n };\n}\n/**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input Set selection bounds of this input or textarea\n * -@offsets Object of same form that is returned from get*\n */\n\nfunction setSelection(input, offsets) {\n var start = offsets.start;\n var end = offsets.end;\n\n if (end === undefined) {\n end = start;\n }\n\n if ('selectionStart' in input) {\n input.selectionStart = start;\n input.selectionEnd = Math.min(end, input.value.length);\n } else {\n setOffsets(input, offsets);\n }\n}\n\nvar skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nfunction registerEvents() {\n registerTwoPhaseEvent('onSelect', ['focusout', 'contextmenu', 'dragend', 'focusin', 'keydown', 'keyup', 'mousedown', 'mouseup', 'selectionchange']);\n}\n\nvar activeElement = null;\nvar activeElementInst = null;\nvar lastSelection = null;\nvar mouseDown = false;\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n */\n\nfunction getSelection(node) {\n if ('selectionStart' in node && hasSelectionCapabilities(node)) {\n return {\n start: node.selectionStart,\n end: node.selectionEnd\n };\n } else {\n var win = node.ownerDocument && node.ownerDocument.defaultView || window;\n var selection = win.getSelection();\n return {\n anchorNode: selection.anchorNode,\n anchorOffset: selection.anchorOffset,\n focusNode: selection.focusNode,\n focusOffset: selection.focusOffset\n };\n }\n}\n/**\n * Get document associated with the event target.\n */\n\n\nfunction getEventTargetDocument(eventTarget) {\n return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument;\n}\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @param {object} nativeEventTarget\n * @return {?SyntheticEvent}\n */\n\n\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n // Ensure we have the right element, and that the user is not dragging a\n // selection (this matches native `select` event behavior). In HTML5, select\n // fires only on input and textarea thus if there's no focused element we\n // won't dispatch.\n var doc = getEventTargetDocument(nativeEventTarget);\n\n if (mouseDown || activeElement == null || activeElement !== getActiveElement(doc)) {\n return;\n } // Only fire when selection has actually changed.\n\n\n var currentSelection = getSelection(activeElement);\n\n if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n lastSelection = currentSelection;\n var listeners = accumulateTwoPhaseListeners(activeElementInst, 'onSelect');\n\n if (listeners.length > 0) {\n var event = new SyntheticEvent('onSelect', 'select', null, nativeEvent, nativeEventTarget);\n dispatchQueue.push({\n event: event,\n listeners: listeners\n });\n event.target = activeElement;\n }\n }\n}\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\n\n\nfunction extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;\n\n switch (domEventName) {\n // Track the input node that has focus.\n case 'focusin':\n if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n activeElement = targetNode;\n activeElementInst = targetInst;\n lastSelection = null;\n }\n\n break;\n\n case 'focusout':\n activeElement = null;\n activeElementInst = null;\n lastSelection = null;\n break;\n // Don't fire the event while the user is dragging. This matches the\n // semantics of the native select event.\n\n case 'mousedown':\n mouseDown = true;\n break;\n\n case 'contextmenu':\n case 'mouseup':\n case 'dragend':\n mouseDown = false;\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n break;\n // Chrome and IE fire non-standard event when selection is changed (and\n // sometimes when it hasn't). IE's event fires out of order with respect\n // to key and input events on deletion, so we discard it.\n //\n // Firefox doesn't support selectionchange, so check selection status\n // after each key entry. The selection changes after keydown and before\n // keyup, but we check on keydown as well in the case of holding down a\n // key, when multiple keydown events are fired but only one keyup is.\n // This is also our approach for IE handling, for the reason above.\n\n case 'selectionchange':\n if (skipSelectionChangeEvent) {\n break;\n }\n\n // falls through\n\n case 'keydown':\n case 'keyup':\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n }\n}\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\n\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n prefixes['Moz' + styleProp] = 'moz' + eventName;\n return prefixes;\n}\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\n\n\nvar vendorPrefixes = {\n animationend: makePrefixMap('Animation', 'AnimationEnd'),\n animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n animationstart: makePrefixMap('Animation', 'AnimationStart'),\n transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\n\nvar prefixedEventNames = {};\n/**\n * Element to check for prefixes on.\n */\n\nvar style = {};\n/**\n * Bootstrap if a DOM exists.\n */\n\nif (canUseDOM) {\n style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,\n // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n // style object but the events that fire will still be prefixed, so we need\n // to check if the un-prefixed events are usable, and if not remove them from the map.\n\n if (!('AnimationEvent' in window)) {\n delete vendorPrefixes.animationend.animation;\n delete vendorPrefixes.animationiteration.animation;\n delete vendorPrefixes.animationstart.animation;\n } // Same as above\n\n\n if (!('TransitionEvent' in window)) {\n delete vendorPrefixes.transitionend.transition;\n }\n}\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\n\n\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) {\n return prefixedEventNames[eventName];\n } else if (!vendorPrefixes[eventName]) {\n return eventName;\n }\n\n var prefixMap = vendorPrefixes[eventName];\n\n for (var styleProp in prefixMap) {\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n return prefixedEventNames[eventName] = prefixMap[styleProp];\n }\n }\n\n return eventName;\n}\n\nvar ANIMATION_END = getVendorPrefixedEventName('animationend');\nvar ANIMATION_ITERATION = getVendorPrefixedEventName('animationiteration');\nvar ANIMATION_START = getVendorPrefixedEventName('animationstart');\nvar TRANSITION_END = getVendorPrefixedEventName('transitionend');\n\nvar topLevelEventsToReactNames = new Map(); // NOTE: Capitalization is important in this list!\n//\n// E.g. it needs \"pointerDown\", not \"pointerdown\".\n// This is because we derive both React name (\"onPointerDown\")\n// and DOM name (\"pointerdown\") from the same list.\n//\n// Exceptions that don't match this convention are listed separately.\n//\n// prettier-ignore\n\nvar simpleEventPluginEvents = ['abort', 'auxClick', 'cancel', 'canPlay', 'canPlayThrough', 'click', 'close', 'contextMenu', 'copy', 'cut', 'drag', 'dragEnd', 'dragEnter', 'dragExit', 'dragLeave', 'dragOver', 'dragStart', 'drop', 'durationChange', 'emptied', 'encrypted', 'ended', 'error', 'gotPointerCapture', 'input', 'invalid', 'keyDown', 'keyPress', 'keyUp', 'load', 'loadedData', 'loadedMetadata', 'loadStart', 'lostPointerCapture', 'mouseDown', 'mouseMove', 'mouseOut', 'mouseOver', 'mouseUp', 'paste', 'pause', 'play', 'playing', 'pointerCancel', 'pointerDown', 'pointerMove', 'pointerOut', 'pointerOver', 'pointerUp', 'progress', 'rateChange', 'reset', 'resize', 'seeked', 'seeking', 'stalled', 'submit', 'suspend', 'timeUpdate', 'touchCancel', 'touchEnd', 'touchStart', 'volumeChange', 'scroll', 'scrollEnd', 'toggle', 'touchMove', 'waiting', 'wheel'];\n\nfunction registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n}\n\nfunction registerSimpleEvents() {\n for (var i = 0; i < simpleEventPluginEvents.length; i++) {\n var eventName = simpleEventPluginEvents[i];\n var domEventName = eventName.toLowerCase();\n var capitalizedEvent = eventName[0].toUpperCase() + eventName.slice(1);\n registerSimpleEvent(domEventName, 'on' + capitalizedEvent);\n } // Special cases where event names don't match.\n\n\n registerSimpleEvent(ANIMATION_END, 'onAnimationEnd');\n registerSimpleEvent(ANIMATION_ITERATION, 'onAnimationIteration');\n registerSimpleEvent(ANIMATION_START, 'onAnimationStart');\n registerSimpleEvent('dblclick', 'onDoubleClick');\n registerSimpleEvent('focusin', 'onFocus');\n registerSimpleEvent('focusout', 'onBlur');\n registerSimpleEvent(TRANSITION_END, 'onTransitionEnd');\n}\n\nfunction extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n var reactName = topLevelEventsToReactNames.get(domEventName);\n\n if (reactName === undefined) {\n return;\n }\n\n var SyntheticEventCtor = SyntheticEvent;\n var reactEventType = domEventName;\n\n switch (domEventName) {\n case 'keypress':\n // Firefox creates a keypress event for function keys too. This removes\n // the unwanted keypress events. Enter is however both printable and\n // non-printable. One would expect Tab to be as well (but it isn't).\n // TODO: Fixed in https://bugzilla.mozilla.org/show_bug.cgi?id=968056. Can\n // probably remove.\n if (getEventCharCode(nativeEvent) === 0) {\n return;\n }\n\n /* falls through */\n\n case 'keydown':\n case 'keyup':\n SyntheticEventCtor = SyntheticKeyboardEvent;\n break;\n\n case 'focusin':\n reactEventType = 'focus';\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n\n case 'focusout':\n reactEventType = 'blur';\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n\n case 'beforeblur':\n case 'afterblur':\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n\n case 'click':\n // Firefox creates a click event on right mouse clicks. This removes the\n // unwanted click events.\n // TODO: Fixed in https://phabricator.services.mozilla.com/D26793. Can\n // probably remove.\n if (nativeEvent.button === 2) {\n return;\n }\n\n /* falls through */\n\n case 'auxclick':\n case 'dblclick':\n case 'mousedown':\n case 'mousemove':\n case 'mouseup': // TODO: Disabled elements should not respond to mouse events\n\n /* falls through */\n\n case 'mouseout':\n case 'mouseover':\n case 'contextmenu':\n SyntheticEventCtor = SyntheticMouseEvent;\n break;\n\n case 'drag':\n case 'dragend':\n case 'dragenter':\n case 'dragexit':\n case 'dragleave':\n case 'dragover':\n case 'dragstart':\n case 'drop':\n SyntheticEventCtor = SyntheticDragEvent;\n break;\n\n case 'touchcancel':\n case 'touchend':\n case 'touchmove':\n case 'touchstart':\n SyntheticEventCtor = SyntheticTouchEvent;\n break;\n\n case ANIMATION_END:\n case ANIMATION_ITERATION:\n case ANIMATION_START:\n SyntheticEventCtor = SyntheticAnimationEvent;\n break;\n\n case TRANSITION_END:\n SyntheticEventCtor = SyntheticTransitionEvent;\n break;\n\n case 'scroll':\n case 'scrollend':\n SyntheticEventCtor = SyntheticUIEvent;\n break;\n\n case 'wheel':\n SyntheticEventCtor = SyntheticWheelEvent;\n break;\n\n case 'copy':\n case 'cut':\n case 'paste':\n SyntheticEventCtor = SyntheticClipboardEvent;\n break;\n\n case 'gotpointercapture':\n case 'lostpointercapture':\n case 'pointercancel':\n case 'pointerdown':\n case 'pointermove':\n case 'pointerout':\n case 'pointerover':\n case 'pointerup':\n SyntheticEventCtor = SyntheticPointerEvent;\n break;\n }\n\n var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;\n\n {\n // Some events don't bubble in the browser.\n // In the past, React has always bubbled them, but this can be surprising.\n // We're going to try aligning closer to the browser behavior by not bubbling\n // them in React either. We'll start by not bubbling onScroll, and then expand.\n var accumulateTargetOnly = !inCapturePhase && ( // TODO: ideally, we'd eventually add all events from\n // nonDelegatedEvents list in DOMPluginEventSystem.\n // Then we can remove this special list.\n // This is a breaking change that can wait until React 18.\n domEventName === 'scroll' || domEventName === 'scrollend');\n\n var _listeners = accumulateSinglePhaseListeners(targetInst, reactName, nativeEvent.type, inCapturePhase, accumulateTargetOnly);\n\n if (_listeners.length > 0) {\n // Intentionally create event lazily.\n var _event = new SyntheticEventCtor(reactName, reactEventType, null, nativeEvent, nativeEventTarget);\n\n dispatchQueue.push({\n event: _event,\n listeners: _listeners\n });\n }\n }\n}\n\nregisterSimpleEvents();\nregisterEvents$1();\nregisterEvents$2();\nregisterEvents();\nregisterEvents$3();\n\nfunction extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n // TODO: we should remove the concept of a \"SimpleEventPlugin\".\n // This is the basic functionality of the event system. All\n // the other plugins are essentially polyfills. So the plugin\n // should probably be inlined somewhere and have its logic\n // be core the to event system. This would potentially allow\n // us to ship builds of React without the polyfilled plugins below.\n extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n var shouldProcessPolyfillPlugins = (eventSystemFlags & SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS) === 0; // We don't process these events unless we are in the\n // event's native \"bubble\" phase, which means that we're\n // not in the capture phase. That's because we emulate\n // the capture phase here still. This is a trade-off,\n // because in an ideal world we would not emulate and use\n // the phases properly, like we do with the SimpleEvent\n // plugin. However, the plugins below either expect\n // emulation (EnterLeave) or use state localized to that\n // plugin (BeforeInput, Change, Select). The state in\n // these modules complicates things, as you'll essentially\n // get the case where the capture phase event might change\n // state, only for the following bubble event to come in\n // later and not trigger anything as the state now\n // invalidates the heuristics of the event plugin. We\n // could alter all these plugins to work in such ways, but\n // that might cause other unknown side-effects that we\n // can't foresee right now.\n\n if (shouldProcessPolyfillPlugins) {\n extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n\n {\n extractEvents$6(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n }\n }\n} // List of events that need to be individually attached to media elements.\n\n\nvar mediaEventTypes = ['abort', 'canplay', 'canplaythrough', 'durationchange', 'emptied', 'encrypted', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart', 'pause', 'play', 'playing', 'progress', 'ratechange', 'resize', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting']; // We should not delegate these events to the container, but rather\n// set them on the actual target element itself. This is primarily\n// because these events do not consistently bubble in the DOM.\n\nvar nonDelegatedEvents = new Set(['cancel', 'close', 'invalid', 'load', 'scroll', 'scrollend', 'toggle'].concat(mediaEventTypes));\n\nfunction executeDispatch(event, listener, currentTarget) {\n var type = event.type || 'unknown-event';\n event.currentTarget = currentTarget;\n invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n event.currentTarget = null;\n}\n\nfunction processDispatchQueueItemsInOrder(event, dispatchListeners, inCapturePhase) {\n var previousInstance;\n\n if (inCapturePhase) {\n for (var i = dispatchListeners.length - 1; i >= 0; i--) {\n var _dispatchListeners$i = dispatchListeners[i],\n instance = _dispatchListeners$i.instance,\n currentTarget = _dispatchListeners$i.currentTarget,\n listener = _dispatchListeners$i.listener;\n\n if (instance !== previousInstance && event.isPropagationStopped()) {\n return;\n }\n\n executeDispatch(event, listener, currentTarget);\n previousInstance = instance;\n }\n } else {\n for (var _i = 0; _i < dispatchListeners.length; _i++) {\n var _dispatchListeners$_i = dispatchListeners[_i],\n _instance = _dispatchListeners$_i.instance,\n _currentTarget = _dispatchListeners$_i.currentTarget,\n _listener = _dispatchListeners$_i.listener;\n\n if (_instance !== previousInstance && event.isPropagationStopped()) {\n return;\n }\n\n executeDispatch(event, _listener, _currentTarget);\n previousInstance = _instance;\n }\n }\n}\n\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;\n\n for (var i = 0; i < dispatchQueue.length; i++) {\n var _dispatchQueue$i = dispatchQueue[i],\n event = _dispatchQueue$i.event,\n listeners = _dispatchQueue$i.listeners;\n processDispatchQueueItemsInOrder(event, listeners, inCapturePhase); // event system doesn't use pooling.\n } // This would be a good time to rethrow if any of the event handlers threw.\n\n\n rethrowCaughtError();\n}\n\nfunction dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {\n var nativeEventTarget = getEventTarget(nativeEvent);\n var dispatchQueue = [];\n extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n processDispatchQueue(dispatchQueue, eventSystemFlags);\n}\n\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n {\n if (!nonDelegatedEvents.has(domEventName)) {\n error('Did not expect a listenToNonDelegatedEvent() call for \"%s\". ' + 'This is a bug in React. Please file an issue.', domEventName);\n }\n }\n\n var isCapturePhaseListener = false;\n var listenerSet = getEventListenerSet(targetElement);\n var listenerSetKey = getListenerSetKey(domEventName, isCapturePhaseListener);\n\n if (!listenerSet.has(listenerSetKey)) {\n addTrappedEventListener(targetElement, domEventName, IS_NON_DELEGATED, isCapturePhaseListener);\n listenerSet.add(listenerSetKey);\n }\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n {\n if (nonDelegatedEvents.has(domEventName) && !isCapturePhaseListener) {\n error('Did not expect a listenToNativeEvent() call for \"%s\" in the bubble phase. ' + 'This is a bug in React. Please file an issue.', domEventName);\n }\n }\n\n var eventSystemFlags = 0;\n\n if (isCapturePhaseListener) {\n eventSystemFlags |= IS_CAPTURE_PHASE;\n }\n\n addTrappedEventListener(target, domEventName, eventSystemFlags, isCapturePhaseListener);\n} // This is only used by createEventHandle when the\nvar listeningMarker = '_reactListening' + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n if (!rootContainerElement[listeningMarker]) {\n rootContainerElement[listeningMarker] = true;\n allNativeEvents.forEach(function (domEventName) {\n // We handle selectionchange separately because it\n // doesn't bubble and needs to be on the document.\n if (domEventName !== 'selectionchange') {\n if (!nonDelegatedEvents.has(domEventName)) {\n listenToNativeEvent(domEventName, false, rootContainerElement);\n }\n\n listenToNativeEvent(domEventName, true, rootContainerElement);\n }\n });\n var ownerDocument = rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;\n\n if (ownerDocument !== null) {\n // The selectionchange event also needs deduplication\n // but it is attached to the document.\n if (!ownerDocument[listeningMarker]) {\n ownerDocument[listeningMarker] = true;\n listenToNativeEvent('selectionchange', false, ownerDocument);\n }\n }\n }\n}\n\nfunction addTrappedEventListener(targetContainer, domEventName, eventSystemFlags, isCapturePhaseListener, isDeferredListenerForLegacyFBSupport) {\n var listener = createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags); // If passive option is not supported, then the event will be\n // active and not passive.\n\n var isPassiveListener = undefined;\n\n if (passiveBrowserEventsSupported) {\n // Browsers introduced an intervention, making these events\n // passive by default on document. React doesn't bind them\n // to document anymore, but changing this now would undo\n // the performance wins from the change. So we emulate\n // the existing behavior manually on the roots now.\n // https://github.com/facebook/react/issues/19651\n if (domEventName === 'touchstart' || domEventName === 'touchmove' || domEventName === 'wheel') {\n isPassiveListener = true;\n }\n }\n\n targetContainer = targetContainer;\n\n\n if (isCapturePhaseListener) {\n if (isPassiveListener !== undefined) {\n addEventCaptureListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);\n } else {\n addEventCaptureListener(targetContainer, domEventName, listener);\n }\n } else {\n if (isPassiveListener !== undefined) {\n addEventBubbleListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);\n } else {\n addEventBubbleListener(targetContainer, domEventName, listener);\n }\n }\n}\n\nfunction isMatchingRootContainer(grandContainer, targetContainer) {\n return grandContainer === targetContainer || grandContainer.nodeType === COMMENT_NODE && grandContainer.parentNode === targetContainer;\n}\n\nfunction dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {\n var ancestorInst = targetInst;\n\n if ((eventSystemFlags & IS_EVENT_HANDLE_NON_MANAGED_NODE) === 0 && (eventSystemFlags & IS_NON_DELEGATED) === 0) {\n var targetContainerNode = targetContainer; // If we are using the legacy FB support flag, we\n\n if (targetInst !== null) {\n // The below logic attempts to work out if we need to change\n // the target fiber to a different ancestor. We had similar logic\n // in the legacy event system, except the big difference between\n // systems is that the modern event system now has an event listener\n // attached to each React Root and React Portal Root. Together,\n // the DOM nodes representing these roots are the \"rootContainer\".\n // To figure out which ancestor instance we should use, we traverse\n // up the fiber tree from the target instance and attempt to find\n // root boundaries that match that of our current \"rootContainer\".\n // If we find that \"rootContainer\", we find the parent fiber\n // sub-tree for that root and make that our ancestor instance.\n var node = targetInst;\n\n mainLoop: while (true) {\n if (node === null) {\n return;\n }\n\n var nodeTag = node.tag;\n\n if (nodeTag === HostRoot || nodeTag === HostPortal) {\n var container = node.stateNode.containerInfo;\n\n if (isMatchingRootContainer(container, targetContainerNode)) {\n break;\n }\n\n if (nodeTag === HostPortal) {\n // The target is a portal, but it's not the rootContainer we're looking for.\n // Normally portals handle their own events all the way down to the root.\n // So we should be able to stop now. However, we don't know if this portal\n // was part of *our* root.\n var grandNode = node.return;\n\n while (grandNode !== null) {\n var grandTag = grandNode.tag;\n\n if (grandTag === HostRoot || grandTag === HostPortal) {\n var grandContainer = grandNode.stateNode.containerInfo;\n\n if (isMatchingRootContainer(grandContainer, targetContainerNode)) {\n // This is the rootContainer we're looking for and we found it as\n // a parent of the Portal. That means we can ignore it because the\n // Portal will bubble through to us.\n return;\n }\n }\n\n grandNode = grandNode.return;\n }\n } // Now we need to find it's corresponding host fiber in the other\n // tree. To do this we can use getClosestInstanceFromNode, but we\n // need to validate that the fiber is a host instance, otherwise\n // we need to traverse up through the DOM till we find the correct\n // node that is from the other tree.\n\n\n while (container !== null) {\n var parentNode = getClosestInstanceFromNode(container);\n\n if (parentNode === null) {\n return;\n }\n\n var parentTag = parentNode.tag;\n\n if (parentTag === HostComponent || parentTag === HostText || (parentTag === HostHoistable ) || parentTag === HostSingleton) {\n node = ancestorInst = parentNode;\n continue mainLoop;\n }\n\n container = container.parentNode;\n }\n }\n\n node = node.return;\n }\n }\n }\n\n batchedUpdates(function () {\n return dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, ancestorInst);\n });\n}\n\nfunction createDispatchListener(instance, listener, currentTarget) {\n return {\n instance: instance,\n listener: listener,\n currentTarget: currentTarget\n };\n}\n\nfunction accumulateSinglePhaseListeners(targetFiber, reactName, nativeEventType, inCapturePhase, accumulateTargetOnly, nativeEvent) {\n var captureName = reactName !== null ? reactName + 'Capture' : null;\n var reactEventName = inCapturePhase ? captureName : reactName;\n var listeners = [];\n var instance = targetFiber;\n var lastHostComponent = null; // Accumulate all instances and listeners via the target -> root path.\n\n while (instance !== null) {\n var _instance2 = instance,\n stateNode = _instance2.stateNode,\n tag = _instance2.tag; // Handle listeners that are on HostComponents (i.e. <div>)\n\n if ((tag === HostComponent || (tag === HostHoistable ) || tag === HostSingleton) && stateNode !== null) {\n lastHostComponent = stateNode; // createEventHandle listeners\n\n\n if (reactEventName !== null) {\n var listener = getListener(instance, reactEventName);\n\n if (listener != null) {\n listeners.push(createDispatchListener(instance, listener, lastHostComponent));\n }\n }\n } // If we are only accumulating events for the target, then we don't\n // continue to propagate through the React fiber tree to find other\n // listeners.\n\n\n if (accumulateTargetOnly) {\n break;\n } // If we are processing the onBeforeBlur event, then we need to take\n\n instance = instance.return;\n }\n\n return listeners;\n} // We should only use this function for:\n// - BeforeInputEventPlugin\n// - ChangeEventPlugin\n// - SelectEventPlugin\n// This is because we only process these plugins\n// in the bubble phase, so we need to accumulate two\n// phase event listeners (via emulation).\n\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n var captureName = reactName + 'Capture';\n var listeners = [];\n var instance = targetFiber; // Accumulate all instances and listeners via the target -> root path.\n\n while (instance !== null) {\n var _instance3 = instance,\n stateNode = _instance3.stateNode,\n tag = _instance3.tag; // Handle listeners that are on HostComponents (i.e. <div>)\n\n if ((tag === HostComponent || (tag === HostHoistable ) || tag === HostSingleton) && stateNode !== null) {\n var currentTarget = stateNode;\n var captureListener = getListener(instance, captureName);\n\n if (captureListener != null) {\n listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));\n }\n\n var bubbleListener = getListener(instance, reactName);\n\n if (bubbleListener != null) {\n listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));\n }\n }\n\n instance = instance.return;\n }\n\n return listeners;\n}\n\nfunction getParent(inst) {\n if (inst === null) {\n return null;\n }\n\n do {\n // $FlowFixMe[incompatible-use] found when upgrading Flow\n inst = inst.return; // TODO: If this is a HostRoot we might want to bail out.\n // That is depending on if we want nested subtrees (layers) to bubble\n // events to their parent. We could also go through parentNode on the\n // host node but that wouldn't work for React Native and doesn't let us\n // do the portal feature.\n } while (inst && inst.tag !== HostComponent && inst.tag !== HostSingleton);\n\n if (inst) {\n return inst;\n }\n\n return null;\n}\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\n\n\nfunction getLowestCommonAncestor(instA, instB) {\n var nodeA = instA;\n var nodeB = instB;\n var depthA = 0;\n\n for (var tempA = nodeA; tempA; tempA = getParent(tempA)) {\n depthA++;\n }\n\n var depthB = 0;\n\n for (var tempB = nodeB; tempB; tempB = getParent(tempB)) {\n depthB++;\n } // If A is deeper, crawl up.\n\n\n while (depthA - depthB > 0) {\n nodeA = getParent(nodeA);\n depthA--;\n } // If B is deeper, crawl up.\n\n\n while (depthB - depthA > 0) {\n nodeB = getParent(nodeB);\n depthB--;\n } // Walk in lockstep until we find a match.\n\n\n var depth = depthA;\n\n while (depth--) {\n if (nodeA === nodeB || nodeB !== null && nodeA === nodeB.alternate) {\n return nodeA;\n }\n\n nodeA = getParent(nodeA);\n nodeB = getParent(nodeB);\n }\n\n return null;\n}\n\nfunction accumulateEnterLeaveListenersForEvent(dispatchQueue, event, target, common, inCapturePhase) {\n var registrationName = event._reactName;\n var listeners = [];\n var instance = target;\n\n while (instance !== null) {\n if (instance === common) {\n break;\n }\n\n var _instance4 = instance,\n alternate = _instance4.alternate,\n stateNode = _instance4.stateNode,\n tag = _instance4.tag;\n\n if (alternate !== null && alternate === common) {\n break;\n }\n\n if ((tag === HostComponent || (tag === HostHoistable ) || tag === HostSingleton) && stateNode !== null) {\n var currentTarget = stateNode;\n\n if (inCapturePhase) {\n var captureListener = getListener(instance, registrationName);\n\n if (captureListener != null) {\n listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));\n }\n } else if (!inCapturePhase) {\n var bubbleListener = getListener(instance, registrationName);\n\n if (bubbleListener != null) {\n listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));\n }\n }\n }\n\n instance = instance.return;\n }\n\n if (listeners.length !== 0) {\n dispatchQueue.push({\n event: event,\n listeners: listeners\n });\n }\n} // We should only use this function for:\n// - EnterLeaveEventPlugin\n// This is because we only process this plugin\n// in the bubble phase, so we need to accumulate two\n// phase event listeners.\n\n\nfunction accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leaveEvent, enterEvent, from, to) {\n var common = from && to ? getLowestCommonAncestor(from, to) : null;\n\n if (from !== null) {\n accumulateEnterLeaveListenersForEvent(dispatchQueue, leaveEvent, from, common, false);\n }\n\n if (to !== null && enterEvent !== null) {\n accumulateEnterLeaveListenersForEvent(dispatchQueue, enterEvent, to, common, true);\n }\n}\nfunction getListenerSetKey(domEventName, capture) {\n return domEventName + \"__\" + (capture ? 'capture' : 'bubble');\n}\n\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\nvar didWarnInvalidHydration = false;\nvar didWarnFormActionType = false;\nvar didWarnFormActionName = false;\nvar didWarnFormActionTarget = false;\nvar didWarnFormActionMethod = false;\nvar canDiffStyleForHydrationWarning;\n\n{\n // IE 11 parses & normalizes the style attribute as opposed to other\n // browsers. It adds spaces and sorts the properties in some\n // non-alphabetical order. Handling that would require sorting CSS\n // properties in the client & server versions or applying\n // `expectedStyle` to a temporary DOM node to read its `style` attribute\n // normalized. Since it only affects IE, we're skipping style warnings\n // in that browser completely in favor of doing all that work.\n // See https://github.com/facebook/react/issues/11807\n canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode;\n}\n\nfunction validatePropertiesInDevelopment(type, props) {\n {\n validateProperties$2(type, props);\n validateProperties$1(type, props);\n validateProperties(type, props, {\n registrationNameDependencies: registrationNameDependencies,\n possibleRegistrationNames: possibleRegistrationNames\n });\n\n if (props.contentEditable && !props.suppressContentEditableWarning && props.children != null) {\n error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');\n }\n }\n}\n\nfunction validateFormActionInDevelopment(tag, key, value, props) {\n {\n if (value == null) {\n return;\n }\n\n if (tag === 'form') {\n if (key === 'formAction') {\n error('You can only pass the formAction prop to <input> or <button>. Use the action prop on <form>.');\n } else if (typeof value === 'function') {\n if ((props.encType != null || props.method != null) && !didWarnFormActionMethod) {\n didWarnFormActionMethod = true;\n\n error('Cannot specify a encType or method for a form that specifies a ' + 'function as the action. React provides those automatically. ' + 'They will get overridden.');\n }\n\n if (props.target != null && !didWarnFormActionTarget) {\n didWarnFormActionTarget = true;\n\n error('Cannot specify a target for a form that specifies a function as the action. ' + 'The function will always be executed in the same window.');\n }\n }\n } else if (tag === 'input' || tag === 'button') {\n if (key === 'action') {\n error('You can only pass the action prop to <form>. Use the formAction prop on <input> or <button>.');\n } else if (tag === 'input' && props.type !== 'submit' && props.type !== 'image' && !didWarnFormActionType) {\n didWarnFormActionType = true;\n\n error('An input can only specify a formAction along with type=\"submit\" or type=\"image\".');\n } else if (tag === 'button' && props.type != null && props.type !== 'submit' && !didWarnFormActionType) {\n didWarnFormActionType = true;\n\n error('A button can only specify a formAction along with type=\"submit\" or no type.');\n } else if (typeof value === 'function') {\n // Function form actions cannot control the form properties\n if (props.name != null && !didWarnFormActionName) {\n didWarnFormActionName = true;\n\n error('Cannot specify a \"name\" prop for a button that specifies a function as a formAction. ' + 'React needs it to encode which action should be invoked. It will get overridden.');\n }\n\n if ((props.formEncType != null || props.formMethod != null) && !didWarnFormActionMethod) {\n didWarnFormActionMethod = true;\n\n error('Cannot specify a formEncType or formMethod for a button that specifies a ' + 'function as a formAction. React provides those automatically. They will get overridden.');\n }\n\n if (props.formTarget != null && !didWarnFormActionTarget) {\n didWarnFormActionTarget = true;\n\n error('Cannot specify a formTarget for a button that specifies a function as a formAction. ' + 'The function will always be executed in the same window.');\n }\n }\n } else {\n if (key === 'action') {\n error('You can only pass the action prop to <form>.');\n } else {\n error('You can only pass the formAction prop to <input> or <button>.');\n }\n }\n }\n}\n\nfunction warnForPropDifference(propName, serverValue, clientValue) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n if (serverValue === clientValue) {\n return;\n }\n\n var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue);\n var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue);\n\n if (normalizedServerValue === normalizedClientValue) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue));\n }\n}\n\nfunction warnForExtraAttributes(attributeNames) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n var names = [];\n attributeNames.forEach(function (name) {\n names.push(name);\n });\n\n error('Extra attributes from the server: %s', names);\n }\n}\n\nfunction warnForInvalidEventListener(registrationName, listener) {\n {\n if (listener === false) {\n error('Expected `%s` listener to be a function, instead got `false`.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName);\n } else {\n error('Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener);\n }\n }\n} // Parse the HTML and read it back to normalize the HTML string so that it\n// can be used for comparison.\n\n\nfunction normalizeHTML(parent, html) {\n {\n // We could have created a separate document here to avoid\n // re-initializing custom elements if they exist. But this breaks\n // how <noscript> is being handled. So we use the same document.\n // See the discussion in https://github.com/facebook/react/pull/11157.\n var testElement = parent.namespaceURI === MATH_NAMESPACE || parent.namespaceURI === SVG_NAMESPACE ? parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName) : parent.ownerDocument.createElement(parent.tagName);\n testElement.innerHTML = html;\n return testElement.innerHTML;\n }\n} // HTML parsing normalizes CR and CRLF to LF.\n// It also can turn \\u0000 into \\uFFFD inside attributes.\n// https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream\n// If we have a mismatch, it might be caused by that.\n// We will still patch up in this case but not fire the warning.\n\n\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g;\nvar NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\n\nfunction normalizeMarkupForTextOrAttribute(markup) {\n {\n checkHtmlStringCoercion(markup);\n }\n\n var markupString = typeof markup === 'string' ? markup : '' + markup;\n return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');\n}\n\nfunction checkForUnmatchedText(serverText, clientText, isConcurrentMode, shouldWarnDev) {\n var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);\n var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);\n\n if (normalizedServerText === normalizedClientText) {\n return;\n }\n\n if (shouldWarnDev) {\n {\n if (!didWarnInvalidHydration) {\n didWarnInvalidHydration = true;\n\n error('Text content did not match. Server: \"%s\" Client: \"%s\"', normalizedServerText, normalizedClientText);\n }\n }\n }\n\n if (isConcurrentMode && enableClientRenderFallbackOnTextMismatch) {\n // In concurrent roots, we throw when there's a text mismatch and revert to\n // client rendering, up to the nearest Suspense boundary.\n throw new Error('Text content does not match server-rendered HTML.');\n }\n}\n\nfunction noop$1() {}\n\nfunction trapClickOnNonInteractiveElement(node) {\n // Mobile Safari does not fire properly bubble click events on\n // non-interactive elements, which means delegated click listeners do not\n // fire. The workaround for this bug involves attaching an empty click\n // listener on the target node.\n // https://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n // Just set it using the onclick property so that we don't have to manage any\n // bookkeeping for it. Not sure if we need to clear it when the listener is\n // removed.\n // TODO: Only do this for the relevant Safaris maybe?\n node.onclick = noop$1;\n}\nvar xlinkNamespace = 'http://www.w3.org/1999/xlink';\nvar xmlNamespace = 'http://www.w3.org/XML/1998/namespace';\n\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case 'children':\n {\n if (typeof value === 'string') {\n {\n validateTextNesting(value, tag);\n } // Avoid setting initial textContent when the text is empty. In IE11 setting\n // textContent on a <textarea> will cause the placeholder to not\n // show within the <textarea> until it has been focused and blurred again.\n // https://github.com/facebook/react/issues/6731#issuecomment-254874553\n\n\n var canSetTextContent = tag !== 'body' && (tag !== 'textarea' || value !== '');\n\n if (canSetTextContent) {\n setTextContent(domElement, value);\n }\n } else if (typeof value === 'number') {\n {\n validateTextNesting('' + value, tag);\n }\n\n var _canSetTextContent = tag !== 'body';\n\n if (_canSetTextContent) {\n setTextContent(domElement, '' + value);\n }\n }\n\n break;\n }\n // These are very common props and therefore are in the beginning of the switch.\n // TODO: aria-label is a very common prop but allows booleans so is not like the others\n // but should ideally go in this list too.\n\n case 'className':\n setValueForKnownAttribute(domElement, 'class', value);\n break;\n\n case 'tabIndex':\n // This has to be case sensitive in SVG.\n setValueForKnownAttribute(domElement, 'tabindex', value);\n break;\n\n case 'dir':\n case 'role':\n case 'viewBox':\n case 'width':\n case 'height':\n {\n setValueForKnownAttribute(domElement, key, value);\n break;\n }\n\n case 'style':\n {\n setValueForStyles(domElement, value, prevValue);\n break;\n }\n // These attributes accept URLs. These must not allow javascript: URLS.\n\n case 'src':\n case 'href':\n {\n\n if (value == null || typeof value === 'function' || typeof value === 'symbol' || typeof value === 'boolean') {\n domElement.removeAttribute(key);\n break;\n } // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n\n\n {\n checkAttributeStringCoercion(value, key);\n }\n\n var sanitizedValue = sanitizeURL('' + value);\n domElement.setAttribute(key, sanitizedValue);\n break;\n }\n\n case 'action':\n case 'formAction':\n {\n // TODO: Consider moving these special cases to the form, input and button tags.\n {\n validateFormActionInDevelopment(tag, key, value, props);\n }\n\n {\n if (typeof value === 'function') {\n // Set a javascript URL that doesn't do anything. We don't expect this to be invoked\n // because we'll preventDefault, but it can happen if a form is manually submitted or\n // if someone calls stopPropagation before React gets the event.\n // If CSP is used to block javascript: URLs that's fine too. It just won't show this\n // error message but the URL will be logged.\n domElement.setAttribute(key, // eslint-disable-next-line no-script-url\n \"javascript:throw new Error('\" + 'A React form was unexpectedly submitted. If you called form.submit() manually, ' + \"consider using form.requestSubmit() instead. If you\\\\'re trying to use \" + 'event.stopPropagation() in a submit event handler, consider also calling ' + 'event.preventDefault().' + \"')\");\n break;\n } else if (typeof prevValue === 'function') {\n // When we're switching off a Server Action that was originally hydrated.\n // The server control these fields during SSR that are now trailing.\n // The regular diffing doesn't apply since we compare against the previous props.\n // Instead, we need to force them to be set to whatever they should be now.\n // This would be a lot cleaner if we did this whole fork in the per-tag approach.\n if (key === 'formAction') {\n if (tag !== 'input') {\n // Setting the name here isn't completely safe for inputs if this is switching\n // to become a radio button. In that case we let the tag based override take\n // control.\n setProp(domElement, tag, 'name', props.name, props, null);\n }\n\n setProp(domElement, tag, 'formEncType', props.formEncType, props, null);\n setProp(domElement, tag, 'formMethod', props.formMethod, props, null);\n setProp(domElement, tag, 'formTarget', props.formTarget, props, null);\n } else {\n setProp(domElement, tag, 'encType', props.encType, props, null);\n setProp(domElement, tag, 'method', props.method, props, null);\n setProp(domElement, tag, 'target', props.target, props, null);\n }\n }\n }\n\n if (value == null || !enableFormActions || typeof value === 'symbol' || typeof value === 'boolean') {\n domElement.removeAttribute(key);\n break;\n } // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n\n\n {\n checkAttributeStringCoercion(value, key);\n }\n\n var _sanitizedValue = sanitizeURL('' + value);\n\n domElement.setAttribute(key, _sanitizedValue);\n break;\n }\n\n case 'onClick':\n {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n if (value != null) {\n if (typeof value !== 'function') {\n warnForInvalidEventListener(key, value);\n }\n\n trapClickOnNonInteractiveElement(domElement);\n }\n\n break;\n }\n\n case 'onScroll':\n {\n if (value != null) {\n if (typeof value !== 'function') {\n warnForInvalidEventListener(key, value);\n }\n\n listenToNonDelegatedEvent('scroll', domElement);\n }\n\n break;\n }\n\n case 'onScrollEnd':\n {\n if (value != null) {\n if (typeof value !== 'function') {\n warnForInvalidEventListener(key, value);\n }\n\n listenToNonDelegatedEvent('scrollend', domElement);\n }\n\n break;\n }\n\n case 'dangerouslySetInnerHTML':\n {\n if (value != null) {\n if (typeof value !== 'object' || !('__html' in value)) {\n throw new Error('`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://reactjs.org/link/dangerously-set-inner-html ' + 'for more information.');\n }\n\n var nextHtml = value.__html;\n\n if (nextHtml != null) {\n if (props.children != null) {\n throw new Error('Can only set one of `children` or `props.dangerouslySetInnerHTML`.');\n }\n\n {\n setInnerHTML$1(domElement, nextHtml);\n }\n }\n }\n\n break;\n }\n // Note: `option.selected` is not updated if `select.multiple` is\n // disabled with `removeAttribute`. We have special logic for handling this.\n\n case 'multiple':\n {\n domElement.multiple = value && typeof value !== 'function' && typeof value !== 'symbol';\n break;\n }\n\n case 'muted':\n {\n domElement.muted = value && typeof value !== 'function' && typeof value !== 'symbol';\n break;\n }\n\n case 'suppressContentEditableWarning':\n case 'suppressHydrationWarning':\n case 'defaultValue': // Reserved\n\n case 'defaultChecked':\n case 'innerHTML':\n {\n // Noop\n break;\n }\n\n case 'autoFocus':\n {\n // We polyfill it separately on the client during commit.\n // We could have excluded it in the property list instead of\n // adding a special case here, but then it wouldn't be emitted\n // on server rendering (but we *do* want to emit it in SSR).\n break;\n }\n\n case 'xlinkHref':\n {\n if (value == null || typeof value === 'function' || typeof value === 'boolean' || typeof value === 'symbol') {\n domElement.removeAttribute('xlink:href');\n break;\n } // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n\n\n {\n checkAttributeStringCoercion(value, key);\n }\n\n var _sanitizedValue2 = sanitizeURL('' + value);\n\n domElement.setAttributeNS(xlinkNamespace, 'xlink:href', _sanitizedValue2);\n break;\n }\n\n case 'contentEditable':\n case 'spellCheck':\n case 'draggable':\n case 'value':\n case 'autoReverse':\n case 'externalResourcesRequired':\n case 'focusable':\n case 'preserveAlpha':\n {\n // Booleanish String\n // These are \"enumerated\" attributes that accept \"true\" and \"false\".\n // In React, we let users pass `true` and `false` even though technically\n // these aren't boolean attributes (they are coerced to strings).\n // The SVG attributes are case-sensitive. Since the HTML attributes are\n // insensitive they also work even though we canonically use lower case.\n if (value != null && typeof value !== 'function' && typeof value !== 'symbol') {\n {\n checkAttributeStringCoercion(value, key);\n }\n\n domElement.setAttribute(key, '' + value);\n } else {\n domElement.removeAttribute(key);\n }\n\n break;\n }\n // Boolean\n\n case 'allowFullScreen':\n case 'async':\n case 'autoPlay':\n case 'controls':\n case 'default':\n case 'defer':\n case 'disabled':\n case 'disablePictureInPicture':\n case 'disableRemotePlayback':\n case 'formNoValidate':\n case 'hidden':\n case 'loop':\n case 'noModule':\n case 'noValidate':\n case 'open':\n case 'playsInline':\n case 'readOnly':\n case 'required':\n case 'reversed':\n case 'scoped':\n case 'seamless':\n case 'itemScope':\n {\n if (value && typeof value !== 'function' && typeof value !== 'symbol') {\n domElement.setAttribute(key, '');\n } else {\n domElement.removeAttribute(key);\n }\n\n break;\n }\n // Overloaded Boolean\n\n case 'capture':\n case 'download':\n {\n // An attribute that can be used as a flag as well as with a value.\n // When true, it should be present (set either to an empty string or its name).\n // When false, it should be omitted.\n // For any other value, should be present with that value.\n if (value === true) {\n domElement.setAttribute(key, '');\n } else if (value !== false && value != null && typeof value !== 'function' && typeof value !== 'symbol') {\n {\n checkAttributeStringCoercion(value, key);\n }\n\n domElement.setAttribute(key, value);\n } else {\n domElement.removeAttribute(key);\n }\n\n break;\n }\n\n case 'cols':\n case 'rows':\n case 'size':\n case 'span':\n {\n // These are HTML attributes that must be positive numbers.\n if (value != null && typeof value !== 'function' && typeof value !== 'symbol' && !isNaN(value) && value >= 1) {\n {\n checkAttributeStringCoercion(value, key);\n }\n\n domElement.setAttribute(key, value);\n } else {\n domElement.removeAttribute(key);\n }\n\n break;\n }\n\n case 'rowSpan':\n case 'start':\n {\n // These are HTML attributes that must be numbers.\n if (value != null && typeof value !== 'function' && typeof value !== 'symbol' && !isNaN(value)) {\n {\n checkAttributeStringCoercion(value, key);\n }\n\n domElement.setAttribute(key, value);\n } else {\n domElement.removeAttribute(key);\n }\n\n break;\n }\n\n case 'xlinkActuate':\n setValueForNamespacedAttribute(domElement, xlinkNamespace, 'xlink:actuate', value);\n break;\n\n case 'xlinkArcrole':\n setValueForNamespacedAttribute(domElement, xlinkNamespace, 'xlink:arcrole', value);\n break;\n\n case 'xlinkRole':\n setValueForNamespacedAttribute(domElement, xlinkNamespace, 'xlink:role', value);\n break;\n\n case 'xlinkShow':\n setValueForNamespacedAttribute(domElement, xlinkNamespace, 'xlink:show', value);\n break;\n\n case 'xlinkTitle':\n setValueForNamespacedAttribute(domElement, xlinkNamespace, 'xlink:title', value);\n break;\n\n case 'xlinkType':\n setValueForNamespacedAttribute(domElement, xlinkNamespace, 'xlink:type', value);\n break;\n\n case 'xmlBase':\n setValueForNamespacedAttribute(domElement, xmlNamespace, 'xml:base', value);\n break;\n\n case 'xmlLang':\n setValueForNamespacedAttribute(domElement, xmlNamespace, 'xml:lang', value);\n break;\n\n case 'xmlSpace':\n setValueForNamespacedAttribute(domElement, xmlNamespace, 'xml:space', value);\n break;\n // Properties that should not be allowed on custom elements.\n\n case 'is':\n {\n {\n if (prevValue != null) {\n error('Cannot update the \"is\" prop after it has been initialized.');\n }\n } // TODO: We shouldn't actually set this attribute, because we've already\n // passed it to createElement. We don't also need the attribute.\n // However, our tests currently query for it so it's plausible someone\n // else does too so it's break.\n\n\n setValueForAttribute(domElement, 'is', value);\n break;\n }\n\n case 'innerText':\n case 'textContent':\n\n // Fall through\n\n default:\n {\n if (key.length > 2 && (key[0] === 'o' || key[0] === 'O') && (key[1] === 'n' || key[1] === 'N')) {\n if (registrationNameDependencies.hasOwnProperty(key) && value != null && typeof value !== 'function') {\n warnForInvalidEventListener(key, value);\n }\n } else {\n var attributeName = getAttributeAlias(key);\n setValueForAttribute(domElement, attributeName, value);\n }\n }\n }\n}\n\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n switch (key) {\n case 'style':\n {\n setValueForStyles(domElement, value, prevValue);\n break;\n }\n\n case 'dangerouslySetInnerHTML':\n {\n if (value != null) {\n if (typeof value !== 'object' || !('__html' in value)) {\n throw new Error('`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://reactjs.org/link/dangerously-set-inner-html ' + 'for more information.');\n }\n\n var nextHtml = value.__html;\n\n if (nextHtml != null) {\n if (props.children != null) {\n throw new Error('Can only set one of `children` or `props.dangerouslySetInnerHTML`.');\n }\n\n {\n setInnerHTML$1(domElement, nextHtml);\n }\n }\n }\n\n break;\n }\n\n case 'children':\n {\n if (typeof value === 'string') {\n setTextContent(domElement, value);\n } else if (typeof value === 'number') {\n setTextContent(domElement, '' + value);\n }\n\n break;\n }\n\n case 'onScroll':\n {\n if (value != null) {\n if (typeof value !== 'function') {\n warnForInvalidEventListener(key, value);\n }\n\n listenToNonDelegatedEvent('scroll', domElement);\n }\n\n break;\n }\n\n case 'onScrollEnd':\n {\n if (value != null) {\n if (typeof value !== 'function') {\n warnForInvalidEventListener(key, value);\n }\n\n listenToNonDelegatedEvent('scrollend', domElement);\n }\n\n break;\n }\n\n case 'onClick':\n {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n if (value != null) {\n if (typeof value !== 'function') {\n warnForInvalidEventListener(key, value);\n }\n\n trapClickOnNonInteractiveElement(domElement);\n }\n\n break;\n }\n\n case 'suppressContentEditableWarning':\n case 'suppressHydrationWarning':\n case 'innerHTML':\n {\n // Noop\n break;\n }\n\n case 'innerText': // Properties\n\n case 'textContent':\n\n // Fall through\n\n default:\n {\n if (registrationNameDependencies.hasOwnProperty(key)) {\n if (value != null && typeof value !== 'function') {\n warnForInvalidEventListener(key, value);\n }\n } else {\n {\n if (typeof value === 'boolean') {\n // Special case before the new flag is on\n value = '' + value;\n }\n\n setValueForAttribute(domElement, key, value);\n }\n }\n }\n }\n}\n\nfunction setInitialProperties(domElement, tag, props) {\n {\n validatePropertiesInDevelopment(tag, props);\n } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n switch (tag) {\n case 'div':\n case 'span':\n case 'svg':\n case 'path':\n case 'a':\n case 'g':\n case 'p':\n case 'li':\n {\n // Fast track the most common tag types\n break;\n }\n\n case 'input':\n {\n {\n checkControlledValueProps('input', props);\n } // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n\n listenToNonDelegatedEvent('invalid', domElement);\n var name = null;\n var type = null;\n var value = null;\n var defaultValue = null;\n var checked = null;\n var defaultChecked = null;\n\n for (var propKey in props) {\n if (!props.hasOwnProperty(propKey)) {\n continue;\n }\n\n var propValue = props[propKey];\n\n if (propValue == null) {\n continue;\n }\n\n switch (propKey) {\n case 'name':\n {\n name = propValue;\n break;\n }\n\n case 'type':\n {\n type = propValue;\n break;\n }\n\n case 'checked':\n {\n checked = propValue;\n break;\n }\n\n case 'defaultChecked':\n {\n defaultChecked = propValue;\n break;\n }\n\n case 'value':\n {\n value = propValue;\n break;\n }\n\n case 'defaultValue':\n {\n defaultValue = propValue;\n break;\n }\n\n case 'children':\n case 'dangerouslySetInnerHTML':\n {\n if (propValue != null) {\n throw new Error(tag + \" is a void element tag and must neither have `children` nor \" + 'use `dangerouslySetInnerHTML`.');\n }\n\n break;\n }\n\n default:\n {\n setProp(domElement, tag, propKey, propValue, props, null);\n }\n }\n } // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n\n\n validateInputProps(domElement, props);\n initInput(domElement, value, defaultValue, checked, defaultChecked, type, name, false);\n track(domElement);\n return;\n }\n\n case 'select':\n {\n {\n checkControlledValueProps('select', props);\n } // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n\n listenToNonDelegatedEvent('invalid', domElement);\n var _value = null;\n var _defaultValue = null;\n var multiple = null;\n\n for (var _propKey in props) {\n if (!props.hasOwnProperty(_propKey)) {\n continue;\n }\n\n var _propValue = props[_propKey];\n\n if (_propValue == null) {\n continue;\n }\n\n switch (_propKey) {\n case 'value':\n {\n _value = _propValue; // This is handled by initSelect below.\n\n break;\n }\n\n case 'defaultValue':\n {\n _defaultValue = _propValue; // This is handled by initSelect below.\n\n break;\n }\n\n case 'multiple':\n {\n multiple = _propValue; // TODO: We don't actually have to fall through here because we set it\n // in initSelect anyway. We can remove the special case in setProp.\n }\n // Fallthrough\n\n default:\n {\n setProp(domElement, tag, _propKey, _propValue, props, null);\n }\n }\n }\n\n validateSelectProps(domElement, props);\n initSelect(domElement, _value, _defaultValue, multiple);\n return;\n }\n\n case 'textarea':\n {\n {\n checkControlledValueProps('textarea', props);\n } // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n\n listenToNonDelegatedEvent('invalid', domElement);\n var _value2 = null;\n var _defaultValue2 = null;\n var children = null;\n\n for (var _propKey2 in props) {\n if (!props.hasOwnProperty(_propKey2)) {\n continue;\n }\n\n var _propValue2 = props[_propKey2];\n\n if (_propValue2 == null) {\n continue;\n }\n\n switch (_propKey2) {\n case 'value':\n {\n _value2 = _propValue2; // This is handled by initTextarea below.\n\n break;\n }\n\n case 'defaultValue':\n {\n _defaultValue2 = _propValue2;\n break;\n }\n\n case 'children':\n {\n children = _propValue2; // Handled by initTextarea above.\n\n break;\n }\n\n case 'dangerouslySetInnerHTML':\n {\n if (_propValue2 != null) {\n // TODO: Do we really need a special error message for this. It's also pretty blunt.\n throw new Error('`dangerouslySetInnerHTML` does not make sense on <textarea>.');\n }\n\n break;\n }\n\n default:\n {\n setProp(domElement, tag, _propKey2, _propValue2, props, null);\n }\n }\n } // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n\n\n validateTextareaProps(domElement, props);\n initTextarea(domElement, _value2, _defaultValue2, children);\n track(domElement);\n return;\n }\n\n case 'option':\n {\n validateOptionProps(domElement, props);\n\n for (var _propKey3 in props) {\n if (!props.hasOwnProperty(_propKey3)) {\n continue;\n }\n\n var _propValue3 = props[_propKey3];\n\n if (_propValue3 == null) {\n continue;\n }\n\n switch (_propKey3) {\n case 'selected':\n {\n // TODO: Remove support for selected on option.\n domElement.selected = _propValue3 && typeof _propValue3 !== 'function' && typeof _propValue3 !== 'symbol';\n break;\n }\n\n default:\n {\n setProp(domElement, tag, _propKey3, _propValue3, props, null);\n }\n }\n }\n\n return;\n }\n\n case 'dialog':\n {\n listenToNonDelegatedEvent('cancel', domElement);\n listenToNonDelegatedEvent('close', domElement);\n break;\n }\n\n case 'iframe':\n case 'object':\n {\n // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the load event.\n listenToNonDelegatedEvent('load', domElement);\n break;\n }\n\n case 'video':\n case 'audio':\n {\n // We listen to these events in case to ensure emulated bubble\n // listeners still fire for all the media events.\n for (var i = 0; i < mediaEventTypes.length; i++) {\n listenToNonDelegatedEvent(mediaEventTypes[i], domElement);\n }\n\n break;\n }\n\n case 'image':\n {\n // We listen to these events in case to ensure emulated bubble\n // listeners still fire for error and load events.\n listenToNonDelegatedEvent('error', domElement);\n listenToNonDelegatedEvent('load', domElement);\n break;\n }\n\n case 'details':\n {\n // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the toggle event.\n listenToNonDelegatedEvent('toggle', domElement);\n break;\n }\n\n case 'embed':\n case 'source':\n case 'img':\n case 'link':\n {\n // These are void elements that also need delegated events.\n listenToNonDelegatedEvent('error', domElement);\n listenToNonDelegatedEvent('load', domElement); // We fallthrough to the return of the void elements\n }\n\n case 'area':\n case 'base':\n case 'br':\n case 'col':\n case 'hr':\n case 'keygen':\n case 'meta':\n case 'param':\n case 'track':\n case 'wbr':\n case 'menuitem':\n {\n // Void elements\n for (var _propKey4 in props) {\n if (!props.hasOwnProperty(_propKey4)) {\n continue;\n }\n\n var _propValue4 = props[_propKey4];\n\n if (_propValue4 == null) {\n continue;\n }\n\n switch (_propKey4) {\n case 'children':\n case 'dangerouslySetInnerHTML':\n {\n // TODO: Can we make this a DEV warning to avoid this deny list?\n throw new Error(tag + \" is a void element tag and must neither have `children` nor \" + 'use `dangerouslySetInnerHTML`.');\n }\n // defaultChecked and defaultValue are ignored by setProp\n\n default:\n {\n setProp(domElement, tag, _propKey4, _propValue4, props, null);\n }\n }\n }\n\n return;\n }\n\n default:\n {\n if (isCustomElement(tag)) {\n for (var _propKey5 in props) {\n if (!props.hasOwnProperty(_propKey5)) {\n continue;\n }\n\n var _propValue5 = props[_propKey5];\n\n if (_propValue5 == null) {\n continue;\n }\n\n setPropOnCustomElement(domElement, tag, _propKey5, _propValue5, props, null);\n }\n\n return;\n }\n }\n }\n\n for (var _propKey6 in props) {\n if (!props.hasOwnProperty(_propKey6)) {\n continue;\n }\n\n var _propValue6 = props[_propKey6];\n\n if (_propValue6 == null) {\n continue;\n }\n\n setProp(domElement, tag, _propKey6, _propValue6, props, null);\n }\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n {\n validatePropertiesInDevelopment(tag, nextProps);\n }\n\n switch (tag) {\n case 'div':\n case 'span':\n case 'svg':\n case 'path':\n case 'a':\n case 'g':\n case 'p':\n case 'li':\n {\n // Fast track the most common tag types\n break;\n }\n\n case 'input':\n {\n var name = null;\n var type = null;\n var value = null;\n var defaultValue = null;\n var lastDefaultValue = null;\n var checked = null;\n var defaultChecked = null;\n\n for (var propKey in lastProps) {\n var lastProp = lastProps[propKey];\n\n if (lastProps.hasOwnProperty(propKey) && lastProp != null) {\n switch (propKey) {\n case 'checked':\n {\n break;\n }\n\n case 'value':\n {\n // This is handled by updateWrapper below.\n break;\n }\n\n case 'defaultValue':\n {\n lastDefaultValue = lastProp;\n }\n // defaultChecked and defaultValue are ignored by setProp\n // Fallthrough\n\n default:\n {\n if (!nextProps.hasOwnProperty(propKey)) setProp(domElement, tag, propKey, null, nextProps, lastProp);\n }\n }\n }\n }\n\n for (var _propKey7 in nextProps) {\n var nextProp = nextProps[_propKey7];\n var _lastProp = lastProps[_propKey7];\n\n if (nextProps.hasOwnProperty(_propKey7) && (nextProp != null || _lastProp != null)) {\n switch (_propKey7) {\n case 'type':\n {\n type = nextProp;\n break;\n }\n\n case 'name':\n {\n name = nextProp;\n break;\n }\n\n case 'checked':\n {\n checked = nextProp;\n break;\n }\n\n case 'defaultChecked':\n {\n defaultChecked = nextProp;\n break;\n }\n\n case 'value':\n {\n value = nextProp;\n break;\n }\n\n case 'defaultValue':\n {\n defaultValue = nextProp;\n break;\n }\n\n case 'children':\n case 'dangerouslySetInnerHTML':\n {\n if (nextProp != null) {\n throw new Error(tag + \" is a void element tag and must neither have `children` nor \" + 'use `dangerouslySetInnerHTML`.');\n }\n\n break;\n }\n\n default:\n {\n if (nextProp !== _lastProp) setProp(domElement, tag, _propKey7, nextProp, nextProps, _lastProp);\n }\n }\n }\n }\n\n {\n var wasControlled = lastProps.type === 'checkbox' || lastProps.type === 'radio' ? lastProps.checked != null : lastProps.value != null;\n var isControlled = nextProps.type === 'checkbox' || nextProps.type === 'radio' ? nextProps.checked != null : nextProps.value != null;\n\n if (!wasControlled && isControlled && !didWarnUncontrolledToControlled) {\n error('A component is changing an uncontrolled input to be controlled. ' + 'This is likely caused by the value changing from undefined to ' + 'a defined value, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');\n\n didWarnUncontrolledToControlled = true;\n }\n\n if (wasControlled && !isControlled && !didWarnControlledToUncontrolled) {\n error('A component is changing a controlled input to be uncontrolled. ' + 'This is likely caused by the value changing from a defined to ' + 'undefined, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');\n\n didWarnControlledToUncontrolled = true;\n }\n } // Update the wrapper around inputs *after* updating props. This has to\n // happen after updating the rest of props. Otherwise HTML5 input validations\n // raise warnings and prevent the new value from being assigned.\n\n\n updateInput(domElement, value, defaultValue, lastDefaultValue, checked, defaultChecked, type, name);\n return;\n }\n\n case 'select':\n {\n var _value3 = null;\n var _defaultValue3 = null;\n var multiple = null;\n var wasMultiple = null;\n\n for (var _propKey8 in lastProps) {\n var _lastProp2 = lastProps[_propKey8];\n\n if (lastProps.hasOwnProperty(_propKey8) && _lastProp2 != null) {\n switch (_propKey8) {\n case 'value':\n {\n // This is handled by updateWrapper below.\n break;\n }\n // defaultValue are ignored by setProp\n\n case 'multiple':\n {\n wasMultiple = _lastProp2; // TODO: Move special case in here from setProp.\n }\n // Fallthrough\n\n default:\n {\n if (!nextProps.hasOwnProperty(_propKey8)) setProp(domElement, tag, _propKey8, null, nextProps, _lastProp2);\n }\n }\n }\n }\n\n for (var _propKey9 in nextProps) {\n var _nextProp = nextProps[_propKey9];\n var _lastProp3 = lastProps[_propKey9];\n\n if (nextProps.hasOwnProperty(_propKey9) && (_nextProp != null || _lastProp3 != null)) {\n switch (_propKey9) {\n case 'value':\n {\n _value3 = _nextProp; // This is handled by updateSelect below.\n\n break;\n }\n\n case 'defaultValue':\n {\n _defaultValue3 = _nextProp;\n break;\n }\n\n case 'multiple':\n {\n multiple = _nextProp; // TODO: Just move the special case in here from setProp.\n }\n // Fallthrough\n\n default:\n {\n if (_nextProp !== _lastProp3) setProp(domElement, tag, _propKey9, _nextProp, nextProps, _lastProp3);\n }\n }\n }\n } // <select> value update needs to occur after <option> children\n // reconciliation\n\n\n updateSelect(domElement, _value3, _defaultValue3, multiple, wasMultiple);\n return;\n }\n\n case 'textarea':\n {\n var _value4 = null;\n var _defaultValue4 = null;\n\n for (var _propKey10 in lastProps) {\n var _lastProp4 = lastProps[_propKey10];\n\n if (lastProps.hasOwnProperty(_propKey10) && _lastProp4 != null && !nextProps.hasOwnProperty(_propKey10)) {\n switch (_propKey10) {\n case 'value':\n {\n // This is handled by updateTextarea below.\n break;\n }\n\n case 'children':\n {\n // TODO: This doesn't actually do anything if it updates.\n break;\n }\n // defaultValue is ignored by setProp\n\n default:\n {\n setProp(domElement, tag, _propKey10, null, nextProps, _lastProp4);\n }\n }\n }\n }\n\n for (var _propKey11 in nextProps) {\n var _nextProp2 = nextProps[_propKey11];\n var _lastProp5 = lastProps[_propKey11];\n\n if (nextProps.hasOwnProperty(_propKey11) && (_nextProp2 != null || _lastProp5 != null)) {\n switch (_propKey11) {\n case 'value':\n {\n _value4 = _nextProp2; // This is handled by updateTextarea below.\n\n break;\n }\n\n case 'defaultValue':\n {\n _defaultValue4 = _nextProp2;\n break;\n }\n\n case 'children':\n {\n // TODO: This doesn't actually do anything if it updates.\n break;\n }\n\n case 'dangerouslySetInnerHTML':\n {\n if (_nextProp2 != null) {\n // TODO: Do we really need a special error message for this. It's also pretty blunt.\n throw new Error('`dangerouslySetInnerHTML` does not make sense on <textarea>.');\n }\n\n break;\n }\n\n default:\n {\n if (_nextProp2 !== _lastProp5) setProp(domElement, tag, _propKey11, _nextProp2, nextProps, _lastProp5);\n }\n }\n }\n }\n\n updateTextarea(domElement, _value4, _defaultValue4);\n return;\n }\n\n case 'option':\n {\n for (var _propKey12 in lastProps) {\n var _lastProp6 = lastProps[_propKey12];\n\n if (lastProps.hasOwnProperty(_propKey12) && _lastProp6 != null && !nextProps.hasOwnProperty(_propKey12)) {\n switch (_propKey12) {\n case 'selected':\n {\n // TODO: Remove support for selected on option.\n domElement.selected = false;\n break;\n }\n\n default:\n {\n setProp(domElement, tag, _propKey12, null, nextProps, _lastProp6);\n }\n }\n }\n }\n\n for (var _propKey13 in nextProps) {\n var _nextProp3 = nextProps[_propKey13];\n var _lastProp7 = lastProps[_propKey13];\n\n if (nextProps.hasOwnProperty(_propKey13) && _nextProp3 !== _lastProp7 && (_nextProp3 != null || _lastProp7 != null)) {\n switch (_propKey13) {\n case 'selected':\n {\n // TODO: Remove support for selected on option.\n domElement.selected = _nextProp3 && typeof _nextProp3 !== 'function' && typeof _nextProp3 !== 'symbol';\n break;\n }\n\n default:\n {\n setProp(domElement, tag, _propKey13, _nextProp3, nextProps, _lastProp7);\n }\n }\n }\n }\n\n return;\n }\n\n case 'img':\n case 'link':\n case 'area':\n case 'base':\n case 'br':\n case 'col':\n case 'embed':\n case 'hr':\n case 'keygen':\n case 'meta':\n case 'param':\n case 'source':\n case 'track':\n case 'wbr':\n case 'menuitem':\n {\n // Void elements\n for (var _propKey14 in lastProps) {\n var _lastProp8 = lastProps[_propKey14];\n\n if (lastProps.hasOwnProperty(_propKey14) && _lastProp8 != null && !nextProps.hasOwnProperty(_propKey14)) {\n setProp(domElement, tag, _propKey14, null, nextProps, _lastProp8);\n }\n }\n\n for (var _propKey15 in nextProps) {\n var _nextProp4 = nextProps[_propKey15];\n var _lastProp9 = lastProps[_propKey15];\n\n if (nextProps.hasOwnProperty(_propKey15) && _nextProp4 !== _lastProp9 && (_nextProp4 != null || _lastProp9 != null)) {\n switch (_propKey15) {\n case 'children':\n case 'dangerouslySetInnerHTML':\n {\n if (_nextProp4 != null) {\n // TODO: Can we make this a DEV warning to avoid this deny list?\n throw new Error(tag + \" is a void element tag and must neither have `children` nor \" + 'use `dangerouslySetInnerHTML`.');\n }\n\n break;\n }\n // defaultChecked and defaultValue are ignored by setProp\n\n default:\n {\n setProp(domElement, tag, _propKey15, _nextProp4, nextProps, _lastProp9);\n }\n }\n }\n }\n\n return;\n }\n\n default:\n {\n if (isCustomElement(tag)) {\n for (var _propKey16 in lastProps) {\n var _lastProp10 = lastProps[_propKey16];\n\n if (lastProps.hasOwnProperty(_propKey16) && _lastProp10 != null && !nextProps.hasOwnProperty(_propKey16)) {\n setPropOnCustomElement(domElement, tag, _propKey16, null, nextProps, _lastProp10);\n }\n }\n\n for (var _propKey17 in nextProps) {\n var _nextProp5 = nextProps[_propKey17];\n var _lastProp11 = lastProps[_propKey17];\n\n if (nextProps.hasOwnProperty(_propKey17) && _nextProp5 !== _lastProp11 && (_nextProp5 != null || _lastProp11 != null)) {\n setPropOnCustomElement(domElement, tag, _propKey17, _nextProp5, nextProps, _lastProp11);\n }\n }\n\n return;\n }\n }\n }\n\n for (var _propKey18 in lastProps) {\n var _lastProp12 = lastProps[_propKey18];\n\n if (lastProps.hasOwnProperty(_propKey18) && _lastProp12 != null && !nextProps.hasOwnProperty(_propKey18)) {\n setProp(domElement, tag, _propKey18, null, nextProps, _lastProp12);\n }\n }\n\n for (var _propKey19 in nextProps) {\n var _nextProp6 = nextProps[_propKey19];\n var _lastProp13 = lastProps[_propKey19];\n\n if (nextProps.hasOwnProperty(_propKey19) && _nextProp6 !== _lastProp13 && (_nextProp6 != null || _lastProp13 != null)) {\n setProp(domElement, tag, _propKey19, _nextProp6, nextProps, _lastProp13);\n }\n }\n}\n\nfunction getPossibleStandardName(propName) {\n {\n var lowerCasedName = propName.toLowerCase();\n\n if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n return null;\n }\n\n return possibleStandardNames[lowerCasedName] || null;\n }\n}\n\nfunction diffHydratedStyles(domElement, value) {\n if (value != null && typeof value !== 'object') {\n throw new Error('The `style` prop expects a mapping from style properties to values, ' + \"not a string. For example, style={{marginRight: spacing + 'em'}} when \" + 'using JSX.');\n }\n\n if (canDiffStyleForHydrationWarning) {\n var expectedStyle = createDangerousStringForStyles(value);\n var serverValue = domElement.getAttribute('style');\n warnForPropDifference('style', serverValue, expectedStyle);\n }\n}\n\nfunction hydrateAttribute(domElement, propKey, attributeName, value, extraAttributes) {\n extraAttributes.delete(attributeName);\n var serverValue = domElement.getAttribute(attributeName);\n\n if (serverValue === null) {\n switch (typeof value) {\n case 'undefined':\n case 'function':\n case 'symbol':\n case 'boolean':\n return;\n }\n } else {\n if (value == null) ; else {\n switch (typeof value) {\n case 'function':\n case 'symbol':\n case 'boolean':\n break;\n\n default:\n {\n {\n checkAttributeStringCoercion(value, propKey);\n }\n\n if (serverValue === '' + value) {\n return;\n }\n }\n }\n }\n }\n\n warnForPropDifference(propKey, serverValue, value);\n}\n\nfunction hydrateBooleanAttribute(domElement, propKey, attributeName, value, extraAttributes) {\n extraAttributes.delete(attributeName);\n var serverValue = domElement.getAttribute(attributeName);\n\n if (serverValue === null) {\n switch (typeof value) {\n case 'function':\n case 'symbol':\n return;\n }\n\n if (!value) {\n return;\n }\n } else {\n switch (typeof value) {\n case 'function':\n case 'symbol':\n break;\n\n default:\n {\n if (value) {\n // If this was a boolean, it doesn't matter what the value is\n // the fact that we have it is the same as the expected.\n // As long as it's positive.\n return;\n }\n }\n }\n }\n\n warnForPropDifference(propKey, serverValue, value);\n}\n\nfunction hydrateOverloadedBooleanAttribute(domElement, propKey, attributeName, value, extraAttributes) {\n extraAttributes.delete(attributeName);\n var serverValue = domElement.getAttribute(attributeName);\n\n if (serverValue === null) {\n switch (typeof value) {\n case 'undefined':\n case 'function':\n case 'symbol':\n return;\n\n default:\n if (value === false) {\n return;\n }\n\n }\n } else {\n if (value == null) ; else {\n switch (typeof value) {\n case 'function':\n case 'symbol':\n break;\n\n case 'boolean':\n if (value === true && serverValue === '') {\n return;\n }\n\n break;\n\n default:\n {\n {\n checkAttributeStringCoercion(value, propKey);\n }\n\n if (serverValue === '' + value) {\n return;\n }\n }\n }\n }\n }\n\n warnForPropDifference(propKey, serverValue, value);\n}\n\nfunction hydrateBooleanishAttribute(domElement, propKey, attributeName, value, extraAttributes) {\n extraAttributes.delete(attributeName);\n var serverValue = domElement.getAttribute(attributeName);\n\n if (serverValue === null) {\n switch (typeof value) {\n case 'undefined':\n case 'function':\n case 'symbol':\n return;\n }\n } else {\n if (value == null) ; else {\n switch (typeof value) {\n case 'function':\n case 'symbol':\n break;\n\n default:\n {\n {\n checkAttributeStringCoercion(value, attributeName);\n }\n\n if (serverValue === '' + value) {\n return;\n }\n }\n }\n }\n }\n\n warnForPropDifference(propKey, serverValue, value);\n}\n\nfunction hydrateNumericAttribute(domElement, propKey, attributeName, value, extraAttributes) {\n extraAttributes.delete(attributeName);\n var serverValue = domElement.getAttribute(attributeName);\n\n if (serverValue === null) {\n switch (typeof value) {\n case 'undefined':\n case 'function':\n case 'symbol':\n case 'boolean':\n return;\n\n default:\n if (isNaN(value)) {\n return;\n }\n\n }\n } else {\n if (value == null) ; else {\n switch (typeof value) {\n case 'function':\n case 'symbol':\n case 'boolean':\n break;\n\n default:\n {\n if (isNaN(value)) {\n // We had an attribute but shouldn't have had one, so read it\n // for the error message.\n break;\n }\n\n {\n checkAttributeStringCoercion(value, propKey);\n }\n\n if (serverValue === '' + value) {\n return;\n }\n }\n }\n }\n }\n\n warnForPropDifference(propKey, serverValue, value);\n}\n\nfunction hydratePositiveNumericAttribute(domElement, propKey, attributeName, value, extraAttributes) {\n extraAttributes.delete(attributeName);\n var serverValue = domElement.getAttribute(attributeName);\n\n if (serverValue === null) {\n switch (typeof value) {\n case 'undefined':\n case 'function':\n case 'symbol':\n case 'boolean':\n return;\n\n default:\n if (isNaN(value) || value < 1) {\n return;\n }\n\n }\n } else {\n if (value == null) ; else {\n switch (typeof value) {\n case 'function':\n case 'symbol':\n case 'boolean':\n break;\n\n default:\n {\n if (isNaN(value) || value < 1) {\n // We had an attribute but shouldn't have had one, so read it\n // for the error message.\n break;\n }\n\n {\n checkAttributeStringCoercion(value, propKey);\n }\n\n if (serverValue === '' + value) {\n return;\n }\n }\n }\n }\n }\n\n warnForPropDifference(propKey, serverValue, value);\n}\n\nfunction hydrateSanitizedAttribute(domElement, propKey, attributeName, value, extraAttributes) {\n extraAttributes.delete(attributeName);\n var serverValue = domElement.getAttribute(attributeName);\n\n if (serverValue === null) {\n switch (typeof value) {\n case 'undefined':\n case 'function':\n case 'symbol':\n case 'boolean':\n return;\n }\n } else {\n if (value == null) ; else {\n switch (typeof value) {\n case 'function':\n case 'symbol':\n case 'boolean':\n break;\n\n default:\n {\n {\n checkAttributeStringCoercion(value, propKey);\n }\n\n var sanitizedValue = sanitizeURL('' + value);\n\n if (serverValue === sanitizedValue) {\n return;\n }\n }\n }\n }\n }\n\n warnForPropDifference(propKey, serverValue, value);\n}\n\nfunction diffHydratedCustomComponent(domElement, tag, props, hostContext, extraAttributes) {\n for (var propKey in props) {\n if (!props.hasOwnProperty(propKey)) {\n continue;\n }\n\n var value = props[propKey];\n\n if (value == null) {\n continue;\n }\n\n if (registrationNameDependencies.hasOwnProperty(propKey)) {\n if (typeof value !== 'function') {\n warnForInvalidEventListener(propKey, value);\n }\n\n continue;\n }\n\n if (props.suppressHydrationWarning === true) {\n // Don't bother comparing. We're ignoring all these warnings.\n continue;\n } // Validate that the properties correspond to their expected values.\n\n\n switch (propKey) {\n case 'children': // Checked above already\n\n case 'suppressContentEditableWarning':\n case 'suppressHydrationWarning':\n case 'defaultValue':\n case 'defaultChecked':\n case 'innerHTML':\n // Noop\n continue;\n\n case 'dangerouslySetInnerHTML':\n var serverHTML = domElement.innerHTML;\n var nextHtml = value ? value.__html : undefined;\n\n if (nextHtml != null) {\n var expectedHTML = normalizeHTML(domElement, nextHtml);\n warnForPropDifference(propKey, serverHTML, expectedHTML);\n }\n\n continue;\n\n case 'style':\n extraAttributes.delete(propKey);\n diffHydratedStyles(domElement, value);\n continue;\n\n case 'offsetParent':\n case 'offsetTop':\n case 'offsetLeft':\n case 'offsetWidth':\n case 'offsetHeight':\n case 'isContentEditable':\n case 'outerText':\n case 'outerHTML':\n\n // Fall through\n\n case 'className':\n\n // Fall through\n\n default:\n {\n // This is a DEV-only path\n var hostContextDev = hostContext;\n var hostContextProd = hostContextDev.context;\n\n if (hostContextProd === HostContextNamespaceNone && tag !== 'svg' && tag !== 'math') {\n extraAttributes.delete(propKey.toLowerCase());\n } else {\n extraAttributes.delete(propKey);\n }\n\n var _serverValue = getValueForAttributeOnCustomComponent(domElement, propKey, value);\n\n warnForPropDifference(propKey, _serverValue, value);\n }\n }\n }\n} // This is the exact URL string we expect that Fizz renders if we provide a function action.\n// We use this for hydration warnings. It needs to be in sync with Fizz. Maybe makes sense\n// as a shared module for that reason.\n\n\nvar EXPECTED_FORM_ACTION_URL = // eslint-disable-next-line no-script-url\n\"javascript:throw new Error('A React form was unexpectedly submitted.')\";\n\nfunction diffHydratedGenericElement(domElement, tag, props, hostContext, extraAttributes) {\n for (var propKey in props) {\n if (!props.hasOwnProperty(propKey)) {\n continue;\n }\n\n var value = props[propKey];\n\n if (value == null) {\n continue;\n }\n\n if (registrationNameDependencies.hasOwnProperty(propKey)) {\n if (typeof value !== 'function') {\n warnForInvalidEventListener(propKey, value);\n }\n\n continue;\n }\n\n if (props.suppressHydrationWarning === true) {\n // Don't bother comparing. We're ignoring all these warnings.\n continue;\n } // Validate that the properties correspond to their expected values.\n\n\n switch (propKey) {\n case 'children': // Checked above already\n\n case 'suppressContentEditableWarning':\n case 'suppressHydrationWarning':\n case 'value': // Controlled attributes are not validated\n\n case 'checked': // TODO: Only ignore them on controlled tags.\n\n case 'selected':\n case 'defaultValue':\n case 'defaultChecked':\n case 'innerHTML':\n // Noop\n continue;\n\n case 'dangerouslySetInnerHTML':\n var serverHTML = domElement.innerHTML;\n var nextHtml = value ? value.__html : undefined;\n\n if (nextHtml != null) {\n var expectedHTML = normalizeHTML(domElement, nextHtml);\n warnForPropDifference(propKey, serverHTML, expectedHTML);\n }\n\n continue;\n\n case 'className':\n hydrateAttribute(domElement, propKey, 'class', value, extraAttributes);\n continue;\n\n case 'tabIndex':\n hydrateAttribute(domElement, propKey, 'tabindex', value, extraAttributes);\n continue;\n\n case 'style':\n extraAttributes.delete(propKey);\n diffHydratedStyles(domElement, value);\n continue;\n\n case 'multiple':\n {\n extraAttributes.delete(propKey);\n var serverValue = domElement.multiple;\n warnForPropDifference(propKey, serverValue, value);\n continue;\n }\n\n case 'muted':\n {\n extraAttributes.delete(propKey);\n var _serverValue2 = domElement.muted;\n warnForPropDifference(propKey, _serverValue2, value);\n continue;\n }\n\n case 'autoFocus':\n {\n extraAttributes.delete('autofocus');\n var _serverValue3 = domElement.autofocus;\n warnForPropDifference(propKey, _serverValue3, value);\n continue;\n }\n\n case 'src':\n case 'href':\n\n hydrateSanitizedAttribute(domElement, propKey, propKey, value, extraAttributes);\n continue;\n\n case 'action':\n case 'formAction':\n {\n var _serverValue4 = domElement.getAttribute(propKey);\n\n if (typeof value === 'function') {\n extraAttributes.delete(propKey.toLowerCase()); // The server can set these extra properties to implement actions.\n // So we remove them from the extra attributes warnings.\n\n if (propKey === 'formAction') {\n extraAttributes.delete('name');\n extraAttributes.delete('formenctype');\n extraAttributes.delete('formmethod');\n extraAttributes.delete('formtarget');\n } else {\n extraAttributes.delete('enctype');\n extraAttributes.delete('method');\n extraAttributes.delete('target');\n } // Ideally we should be able to warn if the server value was not a function\n // however since the function can return any of these attributes any way it\n // wants as a custom progressive enhancement, there's nothing to compare to.\n // We can check if the function has the $FORM_ACTION property on the client\n // and if it's not, warn, but that's an unnecessary constraint that they\n // have to have the extra extension that doesn't do anything on the client.\n\n\n continue;\n } else if (_serverValue4 === EXPECTED_FORM_ACTION_URL) {\n extraAttributes.delete(propKey.toLowerCase());\n warnForPropDifference(propKey, 'function', value);\n continue;\n }\n }\n\n hydrateSanitizedAttribute(domElement, propKey, propKey.toLowerCase(), value, extraAttributes);\n continue;\n\n case 'xlinkHref':\n hydrateSanitizedAttribute(domElement, propKey, 'xlink:href', value, extraAttributes);\n continue;\n\n case 'contentEditable':\n {\n // Lower-case Booleanish String\n hydrateBooleanishAttribute(domElement, propKey, 'contenteditable', value, extraAttributes);\n continue;\n }\n\n case 'spellCheck':\n {\n // Lower-case Booleanish String\n hydrateBooleanishAttribute(domElement, propKey, 'spellcheck', value, extraAttributes);\n continue;\n }\n\n case 'draggable':\n case 'autoReverse':\n case 'externalResourcesRequired':\n case 'focusable':\n case 'preserveAlpha':\n {\n // Case-sensitive Booleanish String\n hydrateBooleanishAttribute(domElement, propKey, propKey, value, extraAttributes);\n continue;\n }\n\n case 'allowFullScreen':\n case 'async':\n case 'autoPlay':\n case 'controls':\n case 'default':\n case 'defer':\n case 'disabled':\n case 'disablePictureInPicture':\n case 'disableRemotePlayback':\n case 'formNoValidate':\n case 'hidden':\n case 'loop':\n case 'noModule':\n case 'noValidate':\n case 'open':\n case 'playsInline':\n case 'readOnly':\n case 'required':\n case 'reversed':\n case 'scoped':\n case 'seamless':\n case 'itemScope':\n {\n // Some of these need to be lower case to remove them from the extraAttributes list.\n hydrateBooleanAttribute(domElement, propKey, propKey.toLowerCase(), value, extraAttributes);\n continue;\n }\n\n case 'capture':\n case 'download':\n {\n hydrateOverloadedBooleanAttribute(domElement, propKey, propKey, value, extraAttributes);\n continue;\n }\n\n case 'cols':\n case 'rows':\n case 'size':\n case 'span':\n {\n hydratePositiveNumericAttribute(domElement, propKey, propKey, value, extraAttributes);\n continue;\n }\n\n case 'rowSpan':\n {\n hydrateNumericAttribute(domElement, propKey, 'rowspan', value, extraAttributes);\n continue;\n }\n\n case 'start':\n {\n hydrateNumericAttribute(domElement, propKey, propKey, value, extraAttributes);\n continue;\n }\n\n case 'xHeight':\n hydrateAttribute(domElement, propKey, 'x-height', value, extraAttributes);\n continue;\n\n case 'xlinkActuate':\n hydrateAttribute(domElement, propKey, 'xlink:actuate', value, extraAttributes);\n continue;\n\n case 'xlinkArcrole':\n hydrateAttribute(domElement, propKey, 'xlink:arcrole', value, extraAttributes);\n continue;\n\n case 'xlinkRole':\n hydrateAttribute(domElement, propKey, 'xlink:role', value, extraAttributes);\n continue;\n\n case 'xlinkShow':\n hydrateAttribute(domElement, propKey, 'xlink:show', value, extraAttributes);\n continue;\n\n case 'xlinkTitle':\n hydrateAttribute(domElement, propKey, 'xlink:title', value, extraAttributes);\n continue;\n\n case 'xlinkType':\n hydrateAttribute(domElement, propKey, 'xlink:type', value, extraAttributes);\n continue;\n\n case 'xmlBase':\n hydrateAttribute(domElement, propKey, 'xml:base', value, extraAttributes);\n continue;\n\n case 'xmlLang':\n hydrateAttribute(domElement, propKey, 'xml:lang', value, extraAttributes);\n continue;\n\n case 'xmlSpace':\n hydrateAttribute(domElement, propKey, 'xml:space', value, extraAttributes);\n continue;\n\n default:\n {\n if ( // shouldIgnoreAttribute\n // We have already filtered out null/undefined and reserved words.\n propKey.length > 2 && (propKey[0] === 'o' || propKey[0] === 'O') && (propKey[1] === 'n' || propKey[1] === 'N')) {\n continue;\n }\n\n var attributeName = getAttributeAlias(propKey);\n var isMismatchDueToBadCasing = false; // This is a DEV-only path\n\n var hostContextDev = hostContext;\n var hostContextProd = hostContextDev.context;\n\n if (hostContextProd === HostContextNamespaceNone && tag !== 'svg' && tag !== 'math') {\n extraAttributes.delete(attributeName.toLowerCase());\n } else {\n var standardName = getPossibleStandardName(propKey);\n\n if (standardName !== null && standardName !== propKey) {\n // If an SVG prop is supplied with bad casing, it will\n // be successfully parsed from HTML, but will produce a mismatch\n // (and would be incorrectly rendered on the client).\n // However, we already warn about bad casing elsewhere.\n // So we'll skip the misleading extra mismatch warning in this case.\n isMismatchDueToBadCasing = true;\n extraAttributes.delete(standardName);\n }\n\n extraAttributes.delete(attributeName);\n }\n\n var _serverValue5 = getValueForAttribute(domElement, attributeName, value);\n\n if (!isMismatchDueToBadCasing) {\n warnForPropDifference(propKey, _serverValue5, value);\n }\n }\n }\n }\n}\n\nfunction diffHydratedProperties(domElement, tag, props, isConcurrentMode, shouldWarnDev, hostContext) {\n {\n validatePropertiesInDevelopment(tag, props);\n } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n switch (tag) {\n case 'dialog':\n listenToNonDelegatedEvent('cancel', domElement);\n listenToNonDelegatedEvent('close', domElement);\n break;\n\n case 'iframe':\n case 'object':\n case 'embed':\n // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the load event.\n listenToNonDelegatedEvent('load', domElement);\n break;\n\n case 'video':\n case 'audio':\n // We listen to these events in case to ensure emulated bubble\n // listeners still fire for all the media events.\n for (var i = 0; i < mediaEventTypes.length; i++) {\n listenToNonDelegatedEvent(mediaEventTypes[i], domElement);\n }\n\n break;\n\n case 'source':\n // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the error event.\n listenToNonDelegatedEvent('error', domElement);\n break;\n\n case 'img':\n case 'image':\n case 'link':\n // We listen to these events in case to ensure emulated bubble\n // listeners still fire for error and load events.\n listenToNonDelegatedEvent('error', domElement);\n listenToNonDelegatedEvent('load', domElement);\n break;\n\n case 'details':\n // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the toggle event.\n listenToNonDelegatedEvent('toggle', domElement);\n break;\n\n case 'input':\n {\n checkControlledValueProps('input', props);\n } // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n\n listenToNonDelegatedEvent('invalid', domElement); // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n\n validateInputProps(domElement, props); // For input and textarea we current always set the value property at\n // post mount to force it to diverge from attributes. However, for\n // option and select we don't quite do the same thing and select\n // is not resilient to the DOM state changing so we don't do that here.\n // TODO: Consider not doing this for input and textarea.\n\n initInput(domElement, props.value, props.defaultValue, props.checked, props.defaultChecked, props.type, props.name, true);\n track(domElement);\n break;\n\n case 'option':\n validateOptionProps(domElement, props);\n break;\n\n case 'select':\n {\n checkControlledValueProps('select', props);\n } // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n\n listenToNonDelegatedEvent('invalid', domElement);\n validateSelectProps(domElement, props);\n break;\n\n case 'textarea':\n {\n checkControlledValueProps('textarea', props);\n } // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n\n listenToNonDelegatedEvent('invalid', domElement); // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n\n validateTextareaProps(domElement, props);\n initTextarea(domElement, props.value, props.defaultValue, props.children);\n track(domElement);\n break;\n }\n\n var children = props.children; // For text content children we compare against textContent. This\n // might match additional HTML that is hidden when we read it using\n // textContent. E.g. \"foo\" will match \"f<span>oo</span>\" but that still\n // satisfies our requirement. Our requirement is not to produce perfect\n // HTML and attributes. Ideally we should preserve structure but it's\n // ok not to if the visible content is still enough to indicate what\n // even listeners these nodes might be wired up to.\n // TODO: Warn if there is more than a single textNode as a child.\n // TODO: Should we use domElement.firstChild.nodeValue to compare?\n\n if (typeof children === 'string' || typeof children === 'number') {\n if (domElement.textContent !== '' + children) {\n if (props.suppressHydrationWarning !== true) {\n checkForUnmatchedText(domElement.textContent, children, isConcurrentMode, shouldWarnDev);\n }\n\n if (!isConcurrentMode || !enableClientRenderFallbackOnTextMismatch) {\n // We really should be patching this in the commit phase but since\n // this only affects legacy mode hydration which is deprecated anyway\n // we can get away with it.\n // Host singletons get their children appended and don't use the text\n // content mechanism.\n if (tag !== 'body') {\n domElement.textContent = children;\n }\n }\n }\n }\n\n if (props.onScroll != null) {\n listenToNonDelegatedEvent('scroll', domElement);\n }\n\n if (props.onScrollEnd != null) {\n listenToNonDelegatedEvent('scrollend', domElement);\n }\n\n if (props.onClick != null) {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n\n if (shouldWarnDev) {\n var extraAttributes = new Set();\n var attributes = domElement.attributes;\n\n for (var _i = 0; _i < attributes.length; _i++) {\n var name = attributes[_i].name.toLowerCase();\n\n switch (name) {\n // Controlled attributes are not validated\n // TODO: Only ignore them on controlled tags.\n case 'value':\n break;\n\n case 'checked':\n break;\n\n case 'selected':\n break;\n\n default:\n // Intentionally use the original name.\n // See discussion in https://github.com/facebook/react/pull/10676.\n extraAttributes.add(attributes[_i].name);\n }\n }\n\n if (isCustomElement(tag)) {\n diffHydratedCustomComponent(domElement, tag, props, hostContext, extraAttributes);\n } else {\n diffHydratedGenericElement(domElement, tag, props, hostContext, extraAttributes);\n }\n\n if (extraAttributes.size > 0 && props.suppressHydrationWarning !== true) {\n warnForExtraAttributes(extraAttributes);\n }\n }\n}\nfunction diffHydratedText(textNode, text, isConcurrentMode) {\n var isDifferent = textNode.nodeValue !== text;\n return isDifferent;\n}\nfunction warnForDeletedHydratableElement(parentNode, child) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForDeletedHydratableText(parentNode, child) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Did not expect server HTML to contain the text node \"%s\" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForInsertedHydratedElement(parentNode, tag, props) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForInsertedHydratedText(parentNode, text) {\n {\n if (text === '') {\n // We expect to insert empty text nodes since they're not represented in\n // the HTML.\n // TODO: Remove this special case if we can just avoid inserting empty\n // text nodes.\n return;\n }\n\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Expected server HTML to contain a matching text node for \"%s\" in <%s>.', text, parentNode.nodeName.toLowerCase());\n }\n}\nfunction restoreControlledState(domElement, tag, props) {\n switch (tag) {\n case 'input':\n restoreControlledInputState(domElement, props);\n return;\n\n case 'textarea':\n restoreControlledTextareaState(domElement, props);\n return;\n\n case 'select':\n restoreControlledSelectState(domElement, props);\n return;\n }\n}\n\nfunction validateLinkPropsForStyleResource(props) {\n {\n // This should only be called when we know we are opting into Resource semantics (i.e. precedence is not null)\n var href = props.href,\n onLoad = props.onLoad,\n onError = props.onError,\n disabled = props.disabled;\n var includedProps = [];\n if (onLoad) includedProps.push('`onLoad`');\n if (onError) includedProps.push('`onError`');\n if (disabled != null) includedProps.push('`disabled`');\n var includedPropsPhrase = propNamesListJoin(includedProps, 'and');\n includedPropsPhrase += includedProps.length === 1 ? ' prop' : ' props';\n var withArticlePhrase = includedProps.length === 1 ? 'an ' + includedPropsPhrase : 'the ' + includedPropsPhrase;\n\n if (includedProps.length) {\n error('React encountered a <link rel=\"stylesheet\" href=\"%s\" ... /> with a `precedence` prop that' + ' also included %s. The presence of loading and error handlers indicates an intent to manage' + ' the stylesheet loading state from your from your Component code and React will not hoist or' + ' deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet' + ' using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.', href, withArticlePhrase, includedPropsPhrase);\n\n return true;\n }\n }\n\n return false;\n}\n\nfunction propNamesListJoin(list, combinator) {\n switch (list.length) {\n case 0:\n return '';\n\n case 1:\n return list[0];\n\n case 2:\n return list[0] + ' ' + combinator + ' ' + list[1];\n\n default:\n return list.slice(0, -1).join(', ') + ', ' + combinator + ' ' + list[list.length - 1];\n }\n}\n\nvar SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning';\nvar SUSPENSE_START_DATA = '$';\nvar SUSPENSE_END_DATA = '/$';\nvar SUSPENSE_PENDING_START_DATA = '$?';\nvar SUSPENSE_FALLBACK_START_DATA = '$!';\nvar FORM_STATE_IS_MATCHING = 'F!';\nvar FORM_STATE_IS_NOT_MATCHING = 'F';\nvar STYLE = 'style';\nvar HostContextNamespaceNone = 0;\nvar HostContextNamespaceSvg = 1;\nvar HostContextNamespaceMath = 2;\nvar eventsEnabled = null;\nvar selectionInformation = null;\n\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;\n}\n\nfunction getRootHostContext(rootContainerInstance) {\n var type;\n var context;\n var nodeType = rootContainerInstance.nodeType;\n\n switch (nodeType) {\n case DOCUMENT_NODE:\n case DOCUMENT_FRAGMENT_NODE:\n {\n type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';\n var root = rootContainerInstance.documentElement;\n\n if (root) {\n var namespaceURI = root.namespaceURI;\n context = namespaceURI ? getOwnHostContext(namespaceURI) : HostContextNamespaceNone;\n } else {\n context = HostContextNamespaceNone;\n }\n\n break;\n }\n\n default:\n {\n var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance;\n type = container.tagName;\n var _namespaceURI = container.namespaceURI;\n\n if (!_namespaceURI) {\n switch (type) {\n case 'svg':\n context = HostContextNamespaceSvg;\n break;\n\n case 'math':\n context = HostContextNamespaceMath;\n break;\n\n default:\n context = HostContextNamespaceNone;\n break;\n }\n } else {\n var ownContext = getOwnHostContext(_namespaceURI);\n context = getChildHostContextProd(ownContext, type);\n }\n\n break;\n }\n }\n\n {\n var validatedTag = type.toLowerCase();\n var ancestorInfo = updatedAncestorInfoDev(null, validatedTag);\n return {\n context: context,\n ancestorInfo: ancestorInfo\n };\n }\n}\n\nfunction getOwnHostContext(namespaceURI) {\n switch (namespaceURI) {\n case SVG_NAMESPACE:\n return HostContextNamespaceSvg;\n\n case MATH_NAMESPACE:\n return HostContextNamespaceMath;\n\n default:\n return HostContextNamespaceNone;\n }\n}\n\nfunction getChildHostContextProd(parentNamespace, type) {\n if (parentNamespace === HostContextNamespaceNone) {\n // No (or default) parent namespace: potential entry point.\n switch (type) {\n case 'svg':\n return HostContextNamespaceSvg;\n\n case 'math':\n return HostContextNamespaceMath;\n\n default:\n return HostContextNamespaceNone;\n }\n }\n\n if (parentNamespace === HostContextNamespaceSvg && type === 'foreignObject') {\n // We're leaving SVG.\n return HostContextNamespaceNone;\n } // By default, pass namespace below.\n\n\n return parentNamespace;\n}\n\nfunction getChildHostContext(parentHostContext, type) {\n {\n var parentHostContextDev = parentHostContext;\n var context = getChildHostContextProd(parentHostContextDev.context, type);\n var ancestorInfo = updatedAncestorInfoDev(parentHostContextDev.ancestorInfo, type);\n return {\n context: context,\n ancestorInfo: ancestorInfo\n };\n }\n}\nfunction getPublicInstance(instance) {\n return instance;\n}\nfunction prepareForCommit(containerInfo) {\n eventsEnabled = isEnabled();\n selectionInformation = getSelectionInformation();\n var activeInstance = null;\n\n setEnabled(false);\n return activeInstance;\n}\nfunction resetAfterCommit(containerInfo) {\n restoreSelection(selectionInformation);\n setEnabled(eventsEnabled);\n eventsEnabled = null;\n selectionInformation = null;\n}\nfunction createHoistableInstance(type, props, rootContainerInstance, internalInstanceHandle) {\n var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerInstance);\n var domElement = ownerDocument.createElement(type);\n precacheFiberNode(internalInstanceHandle, domElement);\n updateFiberProps(domElement, props);\n setInitialProperties(domElement, type, props);\n markNodeAsHoistable(domElement);\n return domElement;\n}\nvar warnedUnknownTags = {\n // There are working polyfills for <dialog>. Let people use it.\n dialog: true,\n // Electron ships a custom <webview> tag to display external web content in\n // an isolated frame and process.\n // This tag is not present in non Electron environments such as JSDom which\n // is often used for testing purposes.\n // @see https://electronjs.org/docs/api/webview-tag\n webview: true\n};\nfunction createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n var hostContextProd;\n\n {\n // TODO: take namespace into account when validating.\n var hostContextDev = hostContext;\n validateDOMNesting(type, hostContextDev.ancestorInfo);\n hostContextProd = hostContextDev.context;\n }\n\n var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerInstance);\n var domElement;\n\n switch (hostContextProd) {\n case HostContextNamespaceSvg:\n domElement = ownerDocument.createElementNS(SVG_NAMESPACE, type);\n break;\n\n case HostContextNamespaceMath:\n domElement = ownerDocument.createElementNS(MATH_NAMESPACE, type);\n break;\n\n default:\n switch (type) {\n case 'svg':\n {\n domElement = ownerDocument.createElementNS(SVG_NAMESPACE, type);\n break;\n }\n\n case 'math':\n {\n domElement = ownerDocument.createElementNS(MATH_NAMESPACE, type);\n break;\n }\n\n case 'script':\n {\n // Create the script via .innerHTML so its \"parser-inserted\" flag is\n // set to true and it does not execute\n var div = ownerDocument.createElement('div');\n\n div.innerHTML = '<script><' + '/script>'; // eslint-disable-line\n // This is guaranteed to yield a script element.\n\n var firstChild = div.firstChild;\n domElement = div.removeChild(firstChild);\n break;\n }\n\n case 'select':\n {\n if (typeof props.is === 'string') {\n domElement = ownerDocument.createElement('select', {\n is: props.is\n });\n } else {\n // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.\n // See discussion in https://github.com/facebook/react/pull/6896\n // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\n domElement = ownerDocument.createElement('select');\n }\n\n if (props.multiple) {\n domElement.multiple = true;\n } else if (props.size) {\n // Setting a size greater than 1 causes a select to behave like `multiple=true`, where\n // it is possible that no option is selected.\n //\n // This is only necessary when a select in \"single selection mode\".\n domElement.size = props.size;\n }\n\n break;\n }\n\n default:\n {\n if (typeof props.is === 'string') {\n domElement = ownerDocument.createElement(type, {\n is: props.is\n });\n } else {\n // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.\n // See discussion in https://github.com/facebook/react/pull/6896\n // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\n domElement = ownerDocument.createElement(type);\n }\n\n {\n if (type.indexOf('-') === -1) {\n // We're not SVG/MathML and we don't have a dash, so we're not a custom element\n // Even if you use `is`, these should be of known type and lower case.\n if (type !== type.toLowerCase()) {\n error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);\n }\n\n if ( // $FlowFixMe[method-unbinding]\n Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !hasOwnProperty.call(warnedUnknownTags, type)) {\n warnedUnknownTags[type] = true;\n\n error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);\n }\n }\n }\n }\n }\n\n }\n\n precacheFiberNode(internalInstanceHandle, domElement);\n updateFiberProps(domElement, props);\n return domElement;\n}\nfunction appendInitialChild(parentInstance, child) {\n parentInstance.appendChild(child);\n}\nfunction finalizeInitialChildren(domElement, type, props, hostContext) {\n setInitialProperties(domElement, type, props);\n\n switch (type) {\n case 'button':\n case 'input':\n case 'select':\n case 'textarea':\n return !!props.autoFocus;\n\n case 'img':\n return true;\n\n default:\n return false;\n }\n}\nfunction shouldSetTextContent(type, props) {\n return type === 'textarea' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null;\n}\nfunction createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {\n {\n var hostContextDev = hostContext;\n var ancestor = hostContextDev.ancestorInfo.current;\n\n if (ancestor != null) {\n validateTextNesting(text, ancestor.tag);\n }\n }\n\n var textNode = getOwnerDocumentFromRootContainer(rootContainerInstance).createTextNode(text);\n precacheFiberNode(internalInstanceHandle, textNode);\n return textNode;\n}\nfunction getCurrentEventPriority() {\n var currentEvent = window.event;\n\n if (currentEvent === undefined) {\n return DefaultEventPriority;\n }\n\n return getEventPriority(currentEvent.type);\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n var event = window.event;\n\n if (event && event.type === 'popstate') {\n // This is a popstate event. Attempt to render any transition during this\n // event synchronously. Unless we already attempted during this event.\n if (event === currentPopstateTransitionEvent) {\n // We already attempted to render this popstate transition synchronously.\n // Any subsequent attempts must have happened as the result of a derived\n // update, like startTransition inside useEffect, or useDV. Switch back to\n // the default behavior for all remaining transitions during the current\n // popstate event.\n return false;\n } else {\n // Cache the current event in case a derived transition is scheduled.\n // (Refer to previous branch.)\n currentPopstateTransitionEvent = event;\n return true;\n }\n } // We're not inside a popstate event.\n\n\n currentPopstateTransitionEvent = null;\n return false;\n}\n// if a component just imports ReactDOM (e.g. for findDOMNode).\n// Some environments might not have setTimeout or clearTimeout.\n\nvar scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;\nvar cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;\nvar noTimeout = -1;\nvar localPromise = typeof Promise === 'function' ? Promise : undefined;\nfunction preparePortalMount(portalInstance) {\n listenToAllSupportedEvents(portalInstance);\n}\nvar scheduleMicrotask = typeof queueMicrotask === 'function' ? queueMicrotask : typeof localPromise !== 'undefined' ? function (callback) {\n return localPromise.resolve(null).then(callback).catch(handleErrorInNextTick);\n} : scheduleTimeout; // TODO: Determine the best fallback here.\n\nfunction handleErrorInNextTick(error) {\n setTimeout(function () {\n throw error;\n });\n} // -------------------\nfunction commitMount(domElement, type, newProps, internalInstanceHandle) {\n // Despite the naming that might imply otherwise, this method only\n // fires if there is an `Update` effect scheduled during mounting.\n // This happens if `finalizeInitialChildren` returns `true` (which it\n // does to implement the `autoFocus` attribute on the client). But\n // there are also other cases when this might happen (such as patching\n // up text content during hydration mismatch). So we'll check this again.\n switch (type) {\n case 'button':\n case 'input':\n case 'select':\n case 'textarea':\n if (newProps.autoFocus) {\n domElement.focus();\n }\n\n return;\n\n case 'img':\n {\n if (newProps.src) {\n domElement.src = newProps.src;\n }\n\n return;\n }\n }\n}\nfunction commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) {\n // Diff and update the properties.\n updateProperties(domElement, type, oldProps, newProps); // Update the props handle so that we know which props are the ones with\n // with current event handlers.\n\n updateFiberProps(domElement, newProps);\n}\nfunction resetTextContent(domElement) {\n setTextContent(domElement, '');\n}\nfunction commitTextUpdate(textInstance, oldText, newText) {\n textInstance.nodeValue = newText;\n}\nfunction appendChild(parentInstance, child) {\n parentInstance.appendChild(child);\n}\nfunction appendChildToContainer(container, child) {\n var parentNode;\n\n if (container.nodeType === COMMENT_NODE) {\n parentNode = container.parentNode;\n parentNode.insertBefore(child, container);\n } else {\n parentNode = container;\n parentNode.appendChild(child);\n } // This container might be used for a portal.\n // If something inside a portal is clicked, that click should bubble\n // through the React tree. However, on Mobile Safari the click would\n // never bubble through the *DOM* tree unless an ancestor with onclick\n // event exists. So we wouldn't see it and dispatch it.\n // This is why we ensure that non React root containers have inline onclick\n // defined.\n // https://github.com/facebook/react/issues/11918\n\n\n var reactRootContainer = container._reactRootContainer;\n\n if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(parentNode);\n }\n}\nfunction insertBefore(parentInstance, child, beforeChild) {\n parentInstance.insertBefore(child, beforeChild);\n}\nfunction insertInContainerBefore(container, child, beforeChild) {\n if (container.nodeType === COMMENT_NODE) {\n container.parentNode.insertBefore(child, beforeChild);\n } else {\n container.insertBefore(child, beforeChild);\n }\n}\n\nfunction removeChild(parentInstance, child) {\n parentInstance.removeChild(child);\n}\nfunction removeChildFromContainer(container, child) {\n if (container.nodeType === COMMENT_NODE) {\n container.parentNode.removeChild(child);\n } else {\n container.removeChild(child);\n }\n}\nfunction clearSuspenseBoundary(parentInstance, suspenseInstance) {\n var node = suspenseInstance; // Delete all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n\n var depth = 0;\n\n do {\n var nextNode = node.nextSibling;\n parentInstance.removeChild(node);\n\n if (nextNode && nextNode.nodeType === COMMENT_NODE) {\n var data = nextNode.data;\n\n if (data === SUSPENSE_END_DATA) {\n if (depth === 0) {\n parentInstance.removeChild(nextNode); // Retry if any event replaying was blocked on this.\n\n retryIfBlockedOn(suspenseInstance);\n return;\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_PENDING_START_DATA || data === SUSPENSE_FALLBACK_START_DATA) {\n depth++;\n }\n } // $FlowFixMe[incompatible-type] we bail out when we get a null\n\n\n node = nextNode;\n } while (node); // TODO: Warn, we didn't find the end comment boundary.\n // Retry if any event replaying was blocked on this.\n\n\n retryIfBlockedOn(suspenseInstance);\n}\nfunction clearSuspenseBoundaryFromContainer(container, suspenseInstance) {\n if (container.nodeType === COMMENT_NODE) {\n clearSuspenseBoundary(container.parentNode, suspenseInstance);\n } else if (container.nodeType === ELEMENT_NODE) {\n clearSuspenseBoundary(container, suspenseInstance);\n } else ; // Retry if any event replaying was blocked on this.\n\n\n retryIfBlockedOn(container);\n}\nfunction hideInstance(instance) {\n // TODO: Does this work for all element types? What about MathML? Should we\n // pass host context to this method?\n instance = instance;\n var style = instance.style; // $FlowFixMe[method-unbinding]\n\n if (typeof style.setProperty === 'function') {\n style.setProperty('display', 'none', 'important');\n } else {\n style.display = 'none';\n }\n}\nfunction hideTextInstance(textInstance) {\n textInstance.nodeValue = '';\n}\nfunction unhideInstance(instance, props) {\n instance = instance;\n var styleProp = props[STYLE];\n var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null;\n instance.style.display = display == null || typeof display === 'boolean' ? '' : // The value would've errored already if it wasn't safe.\n // eslint-disable-next-line react-internal/safe-string-coercion\n ('' + display).trim();\n}\nfunction unhideTextInstance(textInstance, text) {\n textInstance.nodeValue = text;\n}\nfunction clearContainer(container) {\n var nodeType = container.nodeType;\n\n if (nodeType === DOCUMENT_NODE) {\n clearContainerSparingly(container);\n } else if (nodeType === ELEMENT_NODE) {\n switch (container.nodeName) {\n case 'HEAD':\n case 'HTML':\n case 'BODY':\n clearContainerSparingly(container);\n return;\n\n default:\n {\n container.textContent = '';\n }\n }\n }\n}\n\nfunction clearContainerSparingly(container) {\n var node;\n var nextNode = container.firstChild;\n\n if (nextNode && nextNode.nodeType === DOCUMENT_TYPE_NODE) {\n nextNode = nextNode.nextSibling;\n }\n\n while (nextNode) {\n node = nextNode;\n nextNode = nextNode.nextSibling;\n\n switch (node.nodeName) {\n case 'HTML':\n case 'HEAD':\n case 'BODY':\n {\n var element = node;\n clearContainerSparingly(element); // If these singleton instances had previously been rendered with React they\n // may still hold on to references to the previous fiber tree. We detatch them\n // prospectively to reset them to a baseline starting state since we cannot create\n // new instances.\n\n detachDeletedInstance(element);\n continue;\n }\n // Script tags are retained to avoid an edge case bug. Normally scripts will execute if they\n // are ever inserted into the DOM. However when streaming if a script tag is opened but not\n // yet closed some browsers create and insert the script DOM Node but the script cannot execute\n // yet until the closing tag is parsed. If something causes React to call clearContainer while\n // this DOM node is in the document but not yet executable the DOM node will be removed from the\n // document and when the script closing tag comes in the script will not end up running. This seems\n // to happen in Chrome/Firefox but not Safari at the moment though this is not necessarily specified\n // behavior so it could change in future versions of browsers. While leaving all scripts is broader\n // than strictly necessary this is the least amount of additional code to avoid this breaking\n // edge case.\n //\n // Style tags are retained because they may likely come from 3rd party scripts and extensions\n\n case 'SCRIPT':\n case 'STYLE':\n {\n continue;\n }\n // Stylesheet tags are retained because tehy may likely come from 3rd party scripts and extensions\n\n case 'LINK':\n {\n if (node.rel.toLowerCase() === 'stylesheet') {\n continue;\n }\n }\n }\n\n container.removeChild(node);\n }\n\n return;\n} // Making this so we can eventually move all of the instance caching to the commit phase.\nfunction isHydratableText(text) {\n return text !== '';\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n while (instance.nodeType === ELEMENT_NODE) {\n var element = instance;\n var anyProps = props;\n\n if (element.nodeName.toLowerCase() !== type.toLowerCase()) {\n if (!inRootOrSingleton) {\n // Usually we error for mismatched tags.\n if (element.nodeName === 'INPUT' && element.type === 'hidden') ; else {\n return null;\n }\n } // In root or singleton parents we skip past mismatched instances.\n\n } else if (!inRootOrSingleton) {\n // Match\n if (type === 'input' && element.type === 'hidden') {\n {\n checkAttributeStringCoercion(anyProps.name, 'name');\n }\n\n var name = anyProps.name == null ? null : '' + anyProps.name;\n\n if (anyProps.type !== 'hidden' || element.getAttribute('name') !== name) ; else {\n return element;\n }\n } else {\n return element;\n }\n } else if (isMarkedHoistable(element)) ; else {\n // We have an Element with the right type.\n // We are going to try to exclude it if we can definitely identify it as a hoisted Node or if\n // we can guess that the node is likely hoisted or was inserted by a 3rd party script or browser extension\n // using high entropy attributes for certain types. This technique will fail for strange insertions like\n // extension prepending <div> in the <body> but that already breaks before and that is an edge case.\n switch (type) {\n // case 'title':\n //We assume all titles are matchable. You should only have one in the Document, at least in a hoistable scope\n // and if you are a HostComponent with type title we must either be in an <svg> context or this title must have an `itemProp` prop.\n case 'meta':\n {\n // The only way to opt out of hoisting meta tags is to give it an itemprop attribute. We assume there will be\n // not 3rd party meta tags that are prepended, accepting the cases where this isn't true because meta tags\n // are usually only functional for SSR so even in a rare case where we did bind to an injected tag the runtime\n // implications are minimal\n if (!element.hasAttribute('itemprop')) {\n // This is a Hoistable\n break;\n }\n\n return element;\n }\n\n case 'link':\n {\n // Links come in many forms and we do expect 3rd parties to inject them into <head> / <body>. We exclude known resources\n // and then use high-entroy attributes like href which are almost always used and almost always unique to filter out unlikely\n // matches.\n var rel = element.getAttribute('rel');\n\n if (rel === 'stylesheet' && element.hasAttribute('data-precedence')) {\n // This is a stylesheet resource\n break;\n } else if (rel !== anyProps.rel || element.getAttribute('href') !== (anyProps.href == null ? null : anyProps.href) || element.getAttribute('crossorigin') !== (anyProps.crossOrigin == null ? null : anyProps.crossOrigin) || element.getAttribute('title') !== (anyProps.title == null ? null : anyProps.title)) {\n // rel + href should usually be enough to uniquely identify a link however crossOrigin can vary for rel preconnect\n // and title could vary for rel alternate\n break;\n }\n\n return element;\n }\n\n case 'style':\n {\n // Styles are hard to match correctly. We can exclude known resources but otherwise we accept the fact that a non-hoisted style tags\n // in <head> or <body> are likely never going to be unmounted given their position in the document and the fact they likely hold global styles\n if (element.hasAttribute('data-precedence')) {\n // This is a style resource\n break;\n }\n\n return element;\n }\n\n case 'script':\n {\n // Scripts are a little tricky, we exclude known resources and then similar to links try to use high-entropy attributes\n // to reject poor matches. One challenge with scripts are inline scripts. We don't attempt to check text content which could\n // in theory lead to a hydration error later if a 3rd party injected an inline script before the React rendered nodes.\n // Falling back to client rendering if this happens should be seemless though so we will try this hueristic and revisit later\n // if we learn it is problematic\n var srcAttr = element.getAttribute('src');\n\n if (srcAttr !== (anyProps.src == null ? null : anyProps.src) || element.getAttribute('type') !== (anyProps.type == null ? null : anyProps.type) || element.getAttribute('crossorigin') !== (anyProps.crossOrigin == null ? null : anyProps.crossOrigin)) {\n // This script is for a different src/type/crossOrigin. It may be a script resource\n // or it may just be a mistmatch\n if (srcAttr && element.hasAttribute('async') && !element.hasAttribute('itemprop')) {\n // This is an async script resource\n break;\n }\n }\n\n return element;\n }\n\n default:\n {\n // We have excluded the most likely cases of mismatch between hoistable tags, 3rd party script inserted tags,\n // and browser extension inserted tags. While it is possible this is not the right match it is a decent hueristic\n // that should work in the vast majority of cases.\n return element;\n }\n }\n }\n\n var nextInstance = getNextHydratableSibling(element);\n\n if (nextInstance === null) {\n break;\n }\n\n instance = nextInstance;\n } // This is a suspense boundary or Text node or we got the end.\n // Suspense Boundaries are never expected to be injected by 3rd parties. If we see one it should be matched\n // and this is a hydration error.\n // Text Nodes are also not expected to be injected by 3rd parties. This is less of a guarantee for <body>\n // but it seems reasonable and conservative to reject this as a hydration error as well\n\n\n return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n // Empty strings are not parsed by HTML so there won't be a correct match here.\n if (text === '') return null;\n\n while (instance.nodeType !== TEXT_NODE) {\n if (instance.nodeType === ELEMENT_NODE && instance.nodeName === 'INPUT' && instance.type === 'hidden') ; else if (!inRootOrSingleton) {\n return null;\n }\n\n var nextInstance = getNextHydratableSibling(instance);\n\n if (nextInstance === null) {\n return null;\n }\n\n instance = nextInstance;\n } // This has now been refined to a text node.\n\n\n return instance;\n}\nfunction canHydrateSuspenseInstance(instance, inRootOrSingleton) {\n while (instance.nodeType !== COMMENT_NODE) {\n if (!inRootOrSingleton) {\n return null;\n }\n\n var nextInstance = getNextHydratableSibling(instance);\n\n if (nextInstance === null) {\n return null;\n }\n\n instance = nextInstance;\n } // This has now been refined to a suspense node.\n\n\n return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n return instance.data === SUSPENSE_PENDING_START_DATA;\n}\nfunction isSuspenseInstanceFallback(instance) {\n return instance.data === SUSPENSE_FALLBACK_START_DATA;\n}\nfunction getSuspenseInstanceFallbackErrorDetails(instance) {\n var dataset = instance.nextSibling && instance.nextSibling.dataset;\n var digest, message, stack;\n\n if (dataset) {\n digest = dataset.dgst;\n\n {\n message = dataset.msg;\n stack = dataset.stck;\n }\n }\n\n {\n return {\n message: message,\n digest: digest,\n stack: stack\n };\n }\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n instance._reactRetry = callback;\n}\nfunction canHydrateFormStateMarker(instance, inRootOrSingleton) {\n while (instance.nodeType !== COMMENT_NODE) {\n if (!inRootOrSingleton) {\n return null;\n }\n\n var nextInstance = getNextHydratableSibling(instance);\n\n if (nextInstance === null) {\n return null;\n }\n\n instance = nextInstance;\n }\n\n var nodeData = instance.data;\n\n if (nodeData === FORM_STATE_IS_MATCHING || nodeData === FORM_STATE_IS_NOT_MATCHING) {\n var markerInstance = instance;\n return markerInstance;\n }\n\n return null;\n}\nfunction isFormStateMarkerMatching(markerInstance) {\n return markerInstance.data === FORM_STATE_IS_MATCHING;\n}\n\nfunction getNextHydratable(node) {\n // Skip non-hydratable nodes.\n for (; node != null; node = node.nextSibling) {\n var nodeType = node.nodeType;\n\n if (nodeType === ELEMENT_NODE || nodeType === TEXT_NODE) {\n break;\n }\n\n if (nodeType === COMMENT_NODE) {\n var nodeData = node.data;\n\n if (nodeData === SUSPENSE_START_DATA || nodeData === SUSPENSE_FALLBACK_START_DATA || nodeData === SUSPENSE_PENDING_START_DATA || (nodeData === FORM_STATE_IS_MATCHING || nodeData === FORM_STATE_IS_NOT_MATCHING)) {\n break;\n }\n\n if (nodeData === SUSPENSE_END_DATA) {\n return null;\n }\n }\n }\n\n return node;\n}\n\nfunction getNextHydratableSibling(instance) {\n return getNextHydratable(instance.nextSibling);\n}\nfunction getFirstHydratableChild(parentInstance) {\n return getNextHydratable(parentInstance.firstChild);\n}\nfunction getFirstHydratableChildWithinContainer(parentContainer) {\n return getNextHydratable(parentContainer.firstChild);\n}\nfunction getFirstHydratableChildWithinSuspenseInstance(parentInstance) {\n return getNextHydratable(parentInstance.nextSibling);\n}\nfunction hydrateInstance(instance, type, props, hostContext, internalInstanceHandle, shouldWarnDev) {\n precacheFiberNode(internalInstanceHandle, instance); // TODO: Possibly defer this until the commit phase where all the events\n // get attached.\n\n updateFiberProps(instance, props); // TODO: Temporary hack to check if we're in a concurrent root. We can delete\n // when the legacy root API is removed.\n\n var isConcurrentMode = (internalInstanceHandle.mode & ConcurrentMode) !== NoMode;\n diffHydratedProperties(instance, type, props, isConcurrentMode, shouldWarnDev, hostContext);\n}\nfunction hydrateTextInstance(textInstance, text, internalInstanceHandle, shouldWarnDev) {\n precacheFiberNode(internalInstanceHandle, textInstance); // TODO: Temporary hack to check if we're in a concurrent root. We can delete\n return diffHydratedText(textInstance, text);\n}\nfunction hydrateSuspenseInstance(suspenseInstance, internalInstanceHandle) {\n precacheFiberNode(internalInstanceHandle, suspenseInstance);\n}\nfunction getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {\n var node = suspenseInstance.nextSibling; // Skip past all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n\n var depth = 0;\n\n while (node) {\n if (node.nodeType === COMMENT_NODE) {\n var data = node.data;\n\n if (data === SUSPENSE_END_DATA) {\n if (depth === 0) {\n return getNextHydratableSibling(node);\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n depth++;\n }\n }\n\n node = node.nextSibling;\n } // TODO: Warn, we didn't find the end comment boundary.\n\n\n return null;\n} // Returns the SuspenseInstance if this node is a direct child of a\n// SuspenseInstance. I.e. if its previous sibling is a Comment with\n// SUSPENSE_x_START_DATA. Otherwise, null.\n\nfunction getParentSuspenseInstance(targetInstance) {\n var node = targetInstance.previousSibling; // Skip past all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n\n var depth = 0;\n\n while (node) {\n if (node.nodeType === COMMENT_NODE) {\n var data = node.data;\n\n if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n if (depth === 0) {\n return node;\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_END_DATA) {\n depth++;\n }\n }\n\n node = node.previousSibling;\n }\n\n return null;\n}\nfunction commitHydratedContainer(container) {\n // Retry if any event replaying was blocked on this.\n retryIfBlockedOn(container);\n}\nfunction commitHydratedSuspenseInstance(suspenseInstance) {\n // Retry if any event replaying was blocked on this.\n retryIfBlockedOn(suspenseInstance);\n}\nfunction shouldDeleteUnhydratedTailInstances(parentType) {\n return parentType !== 'form' && parentType !== 'button';\n}\nfunction didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text, isConcurrentMode, shouldWarnDev) {\n checkForUnmatchedText(textInstance.nodeValue, text, isConcurrentMode, shouldWarnDev);\n}\nfunction didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text, isConcurrentMode, shouldWarnDev) {\n if (parentProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n checkForUnmatchedText(textInstance.nodeValue, text, isConcurrentMode, shouldWarnDev);\n }\n}\nfunction didNotHydrateInstanceWithinContainer(parentContainer, instance) {\n {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentContainer, instance);\n } else if (instance.nodeType === COMMENT_NODE) ; else {\n warnForDeletedHydratableText(parentContainer, instance);\n }\n }\n}\nfunction didNotHydrateInstanceWithinSuspenseInstance(parentInstance, instance) {\n {\n // $FlowFixMe[incompatible-type]: Only Element or Document can be parent nodes.\n var parentNode = parentInstance.parentNode;\n\n if (parentNode !== null) {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentNode, instance);\n } else if (instance.nodeType === COMMENT_NODE) ; else {\n warnForDeletedHydratableText(parentNode, instance);\n }\n }\n }\n}\nfunction didNotHydrateInstance(parentType, parentProps, parentInstance, instance, isConcurrentMode) {\n {\n if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentInstance, instance);\n } else if (instance.nodeType === COMMENT_NODE) ; else {\n warnForDeletedHydratableText(parentInstance, instance);\n }\n }\n }\n}\nfunction didNotFindHydratableInstanceWithinContainer(parentContainer, type, props) {\n {\n warnForInsertedHydratedElement(parentContainer, type);\n }\n}\nfunction didNotFindHydratableTextInstanceWithinContainer(parentContainer, text) {\n {\n warnForInsertedHydratedText(parentContainer, text);\n }\n}\nfunction didNotFindHydratableInstanceWithinSuspenseInstance(parentInstance, type, props) {\n {\n // $FlowFixMe[incompatible-type]: Only Element or Document can be parent nodes.\n var parentNode = parentInstance.parentNode;\n if (parentNode !== null) warnForInsertedHydratedElement(parentNode, type);\n }\n}\nfunction didNotFindHydratableTextInstanceWithinSuspenseInstance(parentInstance, text) {\n {\n // $FlowFixMe[incompatible-type]: Only Element or Document can be parent nodes.\n var parentNode = parentInstance.parentNode;\n if (parentNode !== null) warnForInsertedHydratedText(parentNode, text);\n }\n}\nfunction didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props, isConcurrentMode) {\n {\n if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n warnForInsertedHydratedElement(parentInstance, type);\n }\n }\n}\nfunction didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text, isConcurrentMode) {\n {\n if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n warnForInsertedHydratedText(parentInstance, text);\n }\n }\n}\nfunction errorHydratingContainer(parentContainer) {\n {\n // TODO: This gets logged by onRecoverableError, too, so we should be\n // able to remove it.\n error('An error occurred during hydration. The server HTML was replaced with client content in <%s>.', parentContainer.nodeName.toLowerCase());\n }\n} // -------------------\nfunction isHostSingletonType(type) {\n return type === 'html' || type === 'head' || type === 'body';\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance, hostContext, validateDOMNestingDev) {\n {\n var hostContextDev = hostContext;\n\n if (validateDOMNestingDev) {\n validateDOMNesting(type, hostContextDev.ancestorInfo);\n }\n }\n\n var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerInstance);\n\n switch (type) {\n case 'html':\n {\n var documentElement = ownerDocument.documentElement;\n\n if (!documentElement) {\n throw new Error('React expected an <html> element (document.documentElement) to exist in the Document but one was' + ' not found. React never removes the documentElement for any Document it renders into so' + ' the cause is likely in some other script running on this page.');\n }\n\n return documentElement;\n }\n\n case 'head':\n {\n var head = ownerDocument.head;\n\n if (!head) {\n throw new Error('React expected a <head> element (document.head) to exist in the Document but one was' + ' not found. React never removes the head for any Document it renders into so' + ' the cause is likely in some other script running on this page.');\n }\n\n return head;\n }\n\n case 'body':\n {\n var body = ownerDocument.body;\n\n if (!body) {\n throw new Error('React expected a <body> element (document.body) to exist in the Document but one was' + ' not found. React never removes the body for any Document it renders into so' + ' the cause is likely in some other script running on this page.');\n }\n\n return body;\n }\n\n default:\n {\n throw new Error('resolveSingletonInstance was called with an element type that is not supported. This is a bug in React.');\n }\n }\n}\nfunction acquireSingletonInstance(type, props, instance, internalInstanceHandle) {\n {\n var currentInstanceHandle = getInstanceFromNode(instance);\n\n if (currentInstanceHandle) {\n var tagName = instance.tagName.toLowerCase();\n\n error('You are mounting a new %s component when a previous one has not first unmounted. It is an' + ' error to render more than one %s component at a time and attributes and children of these' + ' components will likely fail in unpredictable ways. Please only render a single instance of' + ' <%s> and if you need to mount a new one, ensure any previous ones have unmounted first.', tagName, tagName, tagName);\n }\n\n switch (type) {\n case 'html':\n case 'head':\n case 'body':\n {\n break;\n }\n\n default:\n {\n error('acquireSingletonInstance was called with an element type that is not supported. This is a bug in React.');\n }\n }\n }\n\n var attributes = instance.attributes;\n\n while (attributes.length) {\n instance.removeAttributeNode(attributes[0]);\n }\n\n setInitialProperties(instance, type, props);\n precacheFiberNode(internalInstanceHandle, instance);\n updateFiberProps(instance, props);\n}\nfunction releaseSingletonInstance(instance) {\n var attributes = instance.attributes;\n\n while (attributes.length) {\n instance.removeAttributeNode(attributes[0]);\n }\n\n detachDeletedInstance(instance);\n}\nfunction clearSingleton(instance) {\n var element = instance;\n var node = element.firstChild;\n\n while (node) {\n var nextNode = node.nextSibling;\n var nodeName = node.nodeName;\n\n if (isMarkedHoistable(node) || nodeName === 'HEAD' || nodeName === 'BODY' || nodeName === 'SCRIPT' || nodeName === 'STYLE' || nodeName === 'LINK' && node.rel.toLowerCase() === 'stylesheet') ; else {\n element.removeChild(node);\n }\n\n node = nextNode;\n }\n\n return;\n} // -------------------\nvar NotLoaded =\n/* */\n0;\nvar Loaded =\n/* */\n1;\nvar Errored =\n/* */\n2;\nvar Settled =\n/* */\n3;\nvar Inserted =\n/* */\n4;\nfunction prepareToCommitHoistables() {\n tagCaches = null;\n} // global collections of Resources\n\nvar preloadPropsMap = new Map();\nvar preconnectsSet = new Set(); // getRootNode is missing from IE and old jsdom versions\n\nfunction getHoistableRoot(container) {\n // $FlowFixMe[method-unbinding]\n return typeof container.getRootNode === 'function' ?\n /* $FlowFixMe[incompatible-return] Flow types this as returning a `Node`,\n * but it's either a `Document` or `ShadowRoot`. */\n container.getRootNode() : container.ownerDocument;\n}\n\nfunction getCurrentResourceRoot() {\n var currentContainer = getCurrentRootHostContainer();\n return currentContainer ? getHoistableRoot(currentContainer) : null;\n}\n\nfunction getDocumentFromRoot(root) {\n return root.ownerDocument || root;\n} // We want this to be the default dispatcher on ReactDOMSharedInternals but we don't want to mutate\n// internals in Module scope. Instead we export it and Internals will import it. There is already a cycle\n// from Internals -> ReactDOM -> HostConfig -> Internals so this doesn't introduce a new one.\n\n\nvar ReactDOMClientDispatcher = {\n prefetchDNS: prefetchDNS$1,\n preconnect: preconnect$1,\n preload: preload$1,\n preloadModule: preloadModule$1,\n preinitStyle: preinitStyle,\n preinitScript: preinitScript,\n preinitModuleScript: preinitModuleScript\n}; // We expect this to get inlined. It is a function mostly to communicate the special nature of\n// how we resolve the HoistableRoot for ReactDOM.pre*() methods. Because we support calling\n// these methods outside of render there is no way to know which Document or ShadowRoot is 'scoped'\n// and so we have to fall back to something universal. Currently we just refer to the global document.\n// This is notable because nowhere else in ReactDOM do we actually reference the global document or window\n// because we may be rendering inside an iframe.\n\nfunction getDocumentForImperativeFloatMethods() {\n return document;\n}\n\nfunction preconnectAs(rel, href, crossOrigin) {\n var ownerDocument = getDocumentForImperativeFloatMethods();\n\n if (typeof href === 'string' && href) {\n var limitedEscapedHref = escapeSelectorAttributeValueInsideDoubleQuotes(href);\n var key = \"link[rel=\\\"\" + rel + \"\\\"][href=\\\"\" + limitedEscapedHref + \"\\\"]\";\n\n if (typeof crossOrigin === 'string') {\n key += \"[crossorigin=\\\"\" + crossOrigin + \"\\\"]\";\n }\n\n if (!preconnectsSet.has(key)) {\n preconnectsSet.add(key);\n var preconnectProps = {\n rel: rel,\n crossOrigin: crossOrigin,\n href: href\n };\n\n if (null === ownerDocument.querySelector(key)) {\n var instance = ownerDocument.createElement('link');\n setInitialProperties(instance, 'link', preconnectProps);\n markNodeAsHoistable(instance);\n ownerDocument.head.appendChild(instance);\n }\n }\n }\n}\n\nfunction prefetchDNS$1(href) {\n\n preconnectAs('dns-prefetch', href, null);\n}\n\nfunction preconnect$1(href, crossOrigin) {\n\n preconnectAs('preconnect', href, crossOrigin);\n}\n\nfunction preload$1(href, as, options) {\n\n var ownerDocument = getDocumentForImperativeFloatMethods();\n\n if (href && as && ownerDocument) {\n var preloadSelector = \"link[rel=\\\"preload\\\"][as=\\\"\" + escapeSelectorAttributeValueInsideDoubleQuotes(as) + \"\\\"]\";\n\n if (as === 'image') {\n if (options && options.imageSrcSet) {\n preloadSelector += \"[imagesrcset=\\\"\" + escapeSelectorAttributeValueInsideDoubleQuotes(options.imageSrcSet) + \"\\\"]\";\n\n if (typeof options.imageSizes === 'string') {\n preloadSelector += \"[imagesizes=\\\"\" + escapeSelectorAttributeValueInsideDoubleQuotes(options.imageSizes) + \"\\\"]\";\n }\n } else {\n preloadSelector += \"[href=\\\"\" + escapeSelectorAttributeValueInsideDoubleQuotes(href) + \"\\\"]\";\n }\n } else {\n preloadSelector += \"[href=\\\"\" + escapeSelectorAttributeValueInsideDoubleQuotes(href) + \"\\\"]\";\n } // Some preloads are keyed under their selector. This happens when the preload is for\n // an arbitrary type. Other preloads are keyed under the resource key they represent a preload for.\n // Here we figure out which key to use to determine if we have a preload already.\n\n\n var key = preloadSelector;\n\n switch (as) {\n case 'style':\n key = getStyleKey(href);\n break;\n\n case 'script':\n key = getScriptKey(href);\n break;\n }\n\n if (!preloadPropsMap.has(key)) {\n var preloadProps = assign({\n rel: 'preload',\n // There is a bug in Safari where imageSrcSet is not respected on preload links\n // so we omit the href here if we have imageSrcSet b/c safari will load the wrong image.\n // This harms older browers that do not support imageSrcSet by making their preloads not work\n // but this population is shrinking fast and is already small so we accept this tradeoff.\n href: as === 'image' && options && options.imageSrcSet ? undefined : href,\n as: as\n }, options);\n\n preloadPropsMap.set(key, preloadProps);\n\n if (null === ownerDocument.querySelector(preloadSelector)) {\n if (as === 'style' && ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) {\n // We already have a stylesheet for this key. We don't need to preload it.\n return;\n } else if (as === 'script' && ownerDocument.querySelector(getScriptSelectorFromKey(key))) {\n // We already have a stylesheet for this key. We don't need to preload it.\n return;\n }\n\n var instance = ownerDocument.createElement('link');\n setInitialProperties(instance, 'link', preloadProps);\n markNodeAsHoistable(instance);\n ownerDocument.head.appendChild(instance);\n }\n }\n }\n}\n\nfunction preloadModule$1(href, options) {\n\n var ownerDocument = getDocumentForImperativeFloatMethods();\n\n if (href) {\n var as = options && typeof options.as === 'string' ? options.as : 'script';\n var preloadSelector = \"link[rel=\\\"modulepreload\\\"][as=\\\"\" + escapeSelectorAttributeValueInsideDoubleQuotes(as) + \"\\\"][href=\\\"\" + escapeSelectorAttributeValueInsideDoubleQuotes(href) + \"\\\"]\"; // Some preloads are keyed under their selector. This happens when the preload is for\n // an arbitrary type. Other preloads are keyed under the resource key they represent a preload for.\n // Here we figure out which key to use to determine if we have a preload already.\n\n var key = preloadSelector;\n\n switch (as) {\n case 'audioworklet':\n case 'paintworklet':\n case 'serviceworker':\n case 'sharedworker':\n case 'worker':\n case 'script':\n {\n key = getScriptKey(href);\n break;\n }\n }\n\n if (!preloadPropsMap.has(key)) {\n var props = assign({\n rel: 'modulepreload',\n href: href\n }, options);\n\n preloadPropsMap.set(key, props);\n\n if (null === ownerDocument.querySelector(preloadSelector)) {\n switch (as) {\n case 'audioworklet':\n case 'paintworklet':\n case 'serviceworker':\n case 'sharedworker':\n case 'worker':\n case 'script':\n {\n if (ownerDocument.querySelector(getScriptSelectorFromKey(key))) {\n return;\n }\n }\n }\n\n var instance = ownerDocument.createElement('link');\n setInitialProperties(instance, 'link', props);\n markNodeAsHoistable(instance);\n ownerDocument.head.appendChild(instance);\n }\n }\n }\n}\n\nfunction preinitStyle(href, precedence, options) {\n\n var ownerDocument = getDocumentForImperativeFloatMethods();\n\n if (href) {\n var styles = getResourcesFromRoot(ownerDocument).hoistableStyles;\n var key = getStyleKey(href);\n precedence = precedence || 'default'; // Check if this resource already exists\n\n var resource = styles.get(key);\n\n if (resource) {\n // We can early return. The resource exists and there is nothing\n // more to do\n return;\n }\n\n var state = {\n loading: NotLoaded,\n preload: null\n }; // Attempt to hydrate instance from DOM\n\n var instance = ownerDocument.querySelector(getStylesheetSelectorFromKey(key));\n\n if (instance) {\n state.loading = Loaded | Inserted;\n } else {\n // Construct a new instance and insert it\n var stylesheetProps = assign({\n rel: 'stylesheet',\n href: href,\n 'data-precedence': precedence\n }, options);\n\n var preloadProps = preloadPropsMap.get(key);\n\n if (preloadProps) {\n adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps);\n }\n\n var link = instance = ownerDocument.createElement('link');\n markNodeAsHoistable(link);\n setInitialProperties(link, 'link', stylesheetProps);\n link._p = new Promise(function (resolve, reject) {\n link.onload = resolve;\n link.onerror = reject;\n });\n link.addEventListener('load', function () {\n state.loading |= Loaded;\n });\n link.addEventListener('error', function () {\n state.loading |= Errored;\n });\n state.loading |= Inserted;\n insertStylesheet(instance, precedence, ownerDocument);\n } // Construct a Resource and cache it\n\n\n resource = {\n type: 'stylesheet',\n instance: instance,\n count: 1,\n state: state\n };\n styles.set(key, resource);\n return;\n }\n}\n\nfunction preinitScript(src, options) {\n\n var ownerDocument = getDocumentForImperativeFloatMethods();\n\n if (src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts;\n var key = getScriptKey(src); // Check if this resource already exists\n\n var resource = scripts.get(key);\n\n if (resource) {\n // We can early return. The resource exists and there is nothing\n // more to do\n return;\n } // Attempt to hydrate instance from DOM\n\n\n var instance = ownerDocument.querySelector(getScriptSelectorFromKey(key));\n\n if (!instance) {\n // Construct a new instance and insert it\n var scriptProps = assign({\n src: src,\n async: true\n }, options); // Adopt certain preload props\n\n\n var preloadProps = preloadPropsMap.get(key);\n\n if (preloadProps) {\n adoptPreloadPropsForScript(scriptProps, preloadProps);\n }\n\n instance = ownerDocument.createElement('script');\n markNodeAsHoistable(instance);\n setInitialProperties(instance, 'link', scriptProps);\n ownerDocument.head.appendChild(instance);\n } // Construct a Resource and cache it\n\n\n resource = {\n type: 'script',\n instance: instance,\n count: 1,\n state: null\n };\n scripts.set(key, resource);\n return;\n }\n}\n\nfunction preinitModuleScript(src, options) {\n\n var ownerDocument = getDocumentForImperativeFloatMethods();\n\n if (src) {\n var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts;\n var key = getScriptKey(src); // Check if this resource already exists\n\n var resource = scripts.get(key);\n\n if (resource) {\n // We can early return. The resource exists and there is nothing\n // more to do\n return;\n } // Attempt to hydrate instance from DOM\n\n\n var instance = ownerDocument.querySelector(getScriptSelectorFromKey(key));\n\n if (!instance) {\n // Construct a new instance and insert it\n var scriptProps = assign({\n src: src,\n async: true,\n type: 'module'\n }, options); // Adopt certain preload props\n\n\n var preloadProps = preloadPropsMap.get(key);\n\n if (preloadProps) {\n adoptPreloadPropsForScript(scriptProps, preloadProps);\n }\n\n instance = ownerDocument.createElement('script');\n markNodeAsHoistable(instance);\n setInitialProperties(instance, 'link', scriptProps);\n ownerDocument.head.appendChild(instance);\n } // Construct a Resource and cache it\n\n\n resource = {\n type: 'script',\n instance: instance,\n count: 1,\n state: null\n };\n scripts.set(key, resource);\n return;\n }\n} // This function is called in begin work and we should always have a currentDocument set\n\n\nfunction getResource(type, currentProps, pendingProps) {\n var resourceRoot = getCurrentResourceRoot();\n\n if (!resourceRoot) {\n throw new Error('\"resourceRoot\" was expected to exist. This is a bug in React.');\n }\n\n switch (type) {\n case 'meta':\n case 'title':\n {\n return null;\n }\n\n case 'style':\n {\n if (typeof pendingProps.precedence === 'string' && typeof pendingProps.href === 'string') {\n var key = getStyleKey(pendingProps.href);\n var styles = getResourcesFromRoot(resourceRoot).hoistableStyles;\n var resource = styles.get(key);\n\n if (!resource) {\n resource = {\n type: 'style',\n instance: null,\n count: 0,\n state: null\n };\n styles.set(key, resource);\n }\n\n return resource;\n }\n\n return {\n type: 'void',\n instance: null,\n count: 0,\n state: null\n };\n }\n\n case 'link':\n {\n if (pendingProps.rel === 'stylesheet' && typeof pendingProps.href === 'string' && typeof pendingProps.precedence === 'string') {\n var qualifiedProps = pendingProps;\n\n var _key = getStyleKey(qualifiedProps.href);\n\n var _styles = getResourcesFromRoot(resourceRoot).hoistableStyles;\n\n var _resource = _styles.get(_key);\n\n if (!_resource) {\n // We asserted this above but Flow can't figure out that the type satisfies\n var ownerDocument = getDocumentFromRoot(resourceRoot);\n _resource = {\n type: 'stylesheet',\n instance: null,\n count: 0,\n state: {\n loading: NotLoaded,\n preload: null\n }\n };\n\n _styles.set(_key, _resource);\n\n if (!preloadPropsMap.has(_key)) {\n preloadStylesheet(ownerDocument, _key, preloadPropsFromStylesheet(qualifiedProps), _resource.state);\n }\n }\n\n return _resource;\n }\n\n return null;\n }\n\n case 'script':\n {\n if (typeof pendingProps.src === 'string' && pendingProps.async === true) {\n var scriptProps = pendingProps;\n\n var _key2 = getScriptKey(scriptProps.src);\n\n var scripts = getResourcesFromRoot(resourceRoot).hoistableScripts;\n\n var _resource2 = scripts.get(_key2);\n\n if (!_resource2) {\n _resource2 = {\n type: 'script',\n instance: null,\n count: 0,\n state: null\n };\n scripts.set(_key2, _resource2);\n }\n\n return _resource2;\n }\n\n return {\n type: 'void',\n instance: null,\n count: 0,\n state: null\n };\n }\n\n default:\n {\n throw new Error(\"getResource encountered a type it did not expect: \\\"\" + type + \"\\\". this is a bug in React.\");\n }\n }\n}\n\nfunction styleTagPropsFromRawProps(rawProps) {\n return assign({}, rawProps, {\n 'data-href': rawProps.href,\n 'data-precedence': rawProps.precedence,\n href: null,\n precedence: null\n });\n}\n\nfunction getStyleKey(href) {\n var limitedEscapedHref = escapeSelectorAttributeValueInsideDoubleQuotes(href);\n return \"href=\\\"\" + limitedEscapedHref + \"\\\"\";\n}\n\nfunction getStyleTagSelector(href) {\n var limitedEscapedHref = escapeSelectorAttributeValueInsideDoubleQuotes(href);\n return \"style[data-href~=\\\"\" + limitedEscapedHref + \"\\\"]\";\n}\n\nfunction getStylesheetSelectorFromKey(key) {\n return \"link[rel=\\\"stylesheet\\\"][\" + key + \"]\";\n}\n\nfunction getPreloadStylesheetSelectorFromKey(key) {\n return \"link[rel=\\\"preload\\\"][as=\\\"style\\\"][\" + key + \"]\";\n}\n\nfunction stylesheetPropsFromRawProps(rawProps) {\n return assign({}, rawProps, {\n 'data-precedence': rawProps.precedence,\n precedence: null\n });\n}\n\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n preloadPropsMap.set(key, preloadProps);\n\n if (!ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) {\n // There is no matching stylesheet instance in the Document.\n // We will insert a preload now to kick off loading because\n // we expect this stylesheet to commit\n var preloadEl = ownerDocument.querySelector(getPreloadStylesheetSelectorFromKey(key));\n\n if (preloadEl) {\n // If we find a preload already it was SSR'd and we won't have an actual\n // loading state to track. For now we will just assume it is loaded\n state.loading = Loaded;\n } else {\n var instance = ownerDocument.createElement('link');\n state.preload = instance;\n instance.addEventListener('load', function () {\n return state.loading |= Loaded;\n });\n instance.addEventListener('error', function () {\n return state.loading |= Errored;\n });\n setInitialProperties(instance, 'link', preloadProps);\n markNodeAsHoistable(instance);\n ownerDocument.head.appendChild(instance);\n }\n }\n}\n\nfunction preloadPropsFromStylesheet(props) {\n return {\n rel: 'preload',\n as: 'style',\n href: props.href,\n crossOrigin: props.crossOrigin,\n integrity: props.integrity,\n media: props.media,\n hrefLang: props.hrefLang,\n referrerPolicy: props.referrerPolicy\n };\n}\n\nfunction getScriptKey(src) {\n var limitedEscapedSrc = escapeSelectorAttributeValueInsideDoubleQuotes(src);\n return \"[src=\\\"\" + limitedEscapedSrc + \"\\\"]\";\n}\n\nfunction getScriptSelectorFromKey(key) {\n return 'script[async]' + key;\n}\n\nfunction acquireResource(hoistableRoot, resource, props) {\n resource.count++;\n\n if (resource.instance === null) {\n switch (resource.type) {\n case 'style':\n {\n var qualifiedProps = props; // Attempt to hydrate instance from DOM\n\n var instance = hoistableRoot.querySelector(getStyleTagSelector(qualifiedProps.href));\n\n if (instance) {\n resource.instance = instance;\n markNodeAsHoistable(instance);\n return instance;\n }\n\n var styleProps = styleTagPropsFromRawProps(props);\n var ownerDocument = getDocumentFromRoot(hoistableRoot);\n instance = ownerDocument.createElement('style');\n markNodeAsHoistable(instance);\n setInitialProperties(instance, 'style', styleProps); // TODO: `style` does not have loading state for tracking insertions. I\n // guess because these aren't suspensey? Not sure whether this is a\n // factoring smell.\n // resource.state.loading |= Inserted;\n\n insertStylesheet(instance, qualifiedProps.precedence, hoistableRoot);\n resource.instance = instance;\n return instance;\n }\n\n case 'stylesheet':\n {\n // This typing is enforce by `getResource`. If we change the logic\n // there for what qualifies as a stylesheet resource we need to ensure\n // this cast still makes sense;\n var _qualifiedProps = props;\n var key = getStyleKey(_qualifiedProps.href); // Attempt to hydrate instance from DOM\n\n var _instance = hoistableRoot.querySelector(getStylesheetSelectorFromKey(key));\n\n if (_instance) {\n resource.state.loading |= Inserted;\n resource.instance = _instance;\n markNodeAsHoistable(_instance);\n return _instance;\n }\n\n var stylesheetProps = stylesheetPropsFromRawProps(props);\n var preloadProps = preloadPropsMap.get(key);\n\n if (preloadProps) {\n adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps);\n } // Construct and insert a new instance\n\n\n var _ownerDocument = getDocumentFromRoot(hoistableRoot);\n\n _instance = _ownerDocument.createElement('link');\n markNodeAsHoistable(_instance);\n var linkInstance = _instance;\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(_instance, 'link', stylesheetProps);\n resource.state.loading |= Inserted;\n insertStylesheet(_instance, _qualifiedProps.precedence, hoistableRoot);\n resource.instance = _instance;\n return _instance;\n }\n\n case 'script':\n {\n // This typing is enforce by `getResource`. If we change the logic\n // there for what qualifies as a stylesheet resource we need to ensure\n // this cast still makes sense;\n var borrowedScriptProps = props;\n\n var _key3 = getScriptKey(borrowedScriptProps.src); // Attempt to hydrate instance from DOM\n\n\n var _instance2 = hoistableRoot.querySelector(getScriptSelectorFromKey(_key3));\n\n if (_instance2) {\n resource.instance = _instance2;\n markNodeAsHoistable(_instance2);\n return _instance2;\n }\n\n var scriptProps = borrowedScriptProps;\n\n var _preloadProps = preloadPropsMap.get(_key3);\n\n if (_preloadProps) {\n scriptProps = assign({}, borrowedScriptProps);\n adoptPreloadPropsForScript(scriptProps, _preloadProps);\n } // Construct and insert a new instance\n\n\n var _ownerDocument2 = getDocumentFromRoot(hoistableRoot);\n\n _instance2 = _ownerDocument2.createElement('script');\n markNodeAsHoistable(_instance2);\n setInitialProperties(_instance2, 'link', scriptProps);\n\n _ownerDocument2.head.appendChild(_instance2);\n\n resource.instance = _instance2;\n return _instance2;\n }\n\n case 'void':\n {\n return null;\n }\n\n default:\n {\n throw new Error(\"acquireResource encountered a resource type it did not expect: \\\"\" + resource.type + \"\\\". this is a bug in React.\");\n }\n }\n } else {\n // In the case of stylesheets, they might have already been assigned an\n // instance during `suspendResource`. But that doesn't mean they were\n // inserted, because the commit might have been interrupted. So we need to\n // check now.\n //\n // The other resource types are unaffected because they are not\n // yet suspensey.\n //\n // TODO: This is a bit of a code smell. Consider refactoring how\n // `suspendResource` and `acquireResource` work together. The idea is that\n // `suspendResource` does all the same stuff as `acquireResource` except\n // for the insertion.\n if (resource.type === 'stylesheet' && (resource.state.loading & Inserted) === NotLoaded) {\n var _qualifiedProps2 = props;\n var _instance3 = resource.instance;\n resource.state.loading |= Inserted;\n insertStylesheet(_instance3, _qualifiedProps2.precedence, hoistableRoot);\n }\n }\n\n return resource.instance;\n}\nfunction releaseResource(resource) {\n resource.count--;\n}\n\nfunction insertStylesheet(instance, precedence, root) {\n var nodes = root.querySelectorAll('link[rel=\"stylesheet\"][data-precedence],style[data-precedence]');\n var last = nodes.length ? nodes[nodes.length - 1] : null;\n var prior = last;\n\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n var nodePrecedence = node.dataset.precedence;\n\n if (nodePrecedence === precedence) {\n prior = node;\n } else if (prior !== last) {\n break;\n }\n }\n\n if (prior) {\n // We get the prior from the document so we know it is in the tree.\n // We also know that links can't be the topmost Node so the parentNode\n // must exist.\n prior.parentNode.insertBefore(instance, prior.nextSibling);\n } else {\n var parent = root.nodeType === DOCUMENT_NODE ? root.head : root;\n parent.insertBefore(instance, parent.firstChild);\n }\n}\n\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n if (stylesheetProps.crossOrigin == null) stylesheetProps.crossOrigin = preloadProps.crossOrigin;\n if (stylesheetProps.referrerPolicy == null) stylesheetProps.referrerPolicy = preloadProps.referrerPolicy;\n if (stylesheetProps.title == null) stylesheetProps.title = preloadProps.title;\n}\n\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n if (scriptProps.crossOrigin == null) scriptProps.crossOrigin = preloadProps.crossOrigin;\n if (scriptProps.referrerPolicy == null) scriptProps.referrerPolicy = preloadProps.referrerPolicy;\n if (scriptProps.integrity == null) scriptProps.integrity = preloadProps.integrity;\n}\n\nvar tagCaches = null;\nfunction hydrateHoistable(hoistableRoot, type, props, internalInstanceHandle) {\n var ownerDocument = getDocumentFromRoot(hoistableRoot);\n var instance = null;\n\n getInstance: switch (type) {\n case 'title':\n {\n instance = ownerDocument.getElementsByTagName('title')[0];\n\n if (!instance || isOwnedInstance(instance) || instance.namespaceURI === SVG_NAMESPACE || instance.hasAttribute('itemprop')) {\n instance = ownerDocument.createElement(type);\n ownerDocument.head.insertBefore(instance, ownerDocument.querySelector('head > title'));\n }\n\n setInitialProperties(instance, type, props);\n precacheFiberNode(internalInstanceHandle, instance);\n markNodeAsHoistable(instance);\n return instance;\n }\n\n case 'link':\n {\n var cache = getHydratableHoistableCache('link', 'href', ownerDocument);\n var key = type + (props.href || '');\n var maybeNodes = cache.get(key);\n\n if (maybeNodes) {\n var nodes = maybeNodes;\n\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n\n if (node.getAttribute('href') !== (props.href == null ? null : props.href) || node.getAttribute('rel') !== (props.rel == null ? null : props.rel) || node.getAttribute('title') !== (props.title == null ? null : props.title) || node.getAttribute('crossorigin') !== (props.crossOrigin == null ? null : props.crossOrigin)) {\n // mismatch, try the next node;\n continue;\n }\n\n instance = node;\n nodes.splice(i, 1);\n break getInstance;\n }\n }\n\n instance = ownerDocument.createElement(type);\n setInitialProperties(instance, type, props);\n ownerDocument.head.appendChild(instance);\n break;\n }\n\n case 'meta':\n {\n var _cache = getHydratableHoistableCache('meta', 'content', ownerDocument);\n\n var _key4 = type + (props.content || '');\n\n var _maybeNodes = _cache.get(_key4);\n\n if (_maybeNodes) {\n var _nodes = _maybeNodes;\n\n for (var _i = 0; _i < _nodes.length; _i++) {\n var _node = _nodes[_i]; // We coerce content to string because it is the most likely one to\n // use a `toString` capable value. For the rest we just do identity match\n // passing non-strings here is not really valid anyway.\n\n {\n checkAttributeStringCoercion(props.content, 'content');\n }\n\n if (_node.getAttribute('content') !== (props.content == null ? null : '' + props.content) || _node.getAttribute('name') !== (props.name == null ? null : props.name) || _node.getAttribute('property') !== (props.property == null ? null : props.property) || _node.getAttribute('http-equiv') !== (props.httpEquiv == null ? null : props.httpEquiv) || _node.getAttribute('charset') !== (props.charSet == null ? null : props.charSet)) {\n // mismatch, try the next node;\n continue;\n }\n\n instance = _node;\n\n _nodes.splice(_i, 1);\n\n break getInstance;\n }\n }\n\n instance = ownerDocument.createElement(type);\n setInitialProperties(instance, type, props);\n ownerDocument.head.appendChild(instance);\n break;\n }\n\n default:\n throw new Error(\"getNodesForType encountered a type it did not expect: \\\"\" + type + \"\\\". This is a bug in React.\");\n } // This node is a match\n\n\n precacheFiberNode(internalInstanceHandle, instance);\n markNodeAsHoistable(instance);\n return instance;\n}\n\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n var cache;\n var caches;\n\n if (tagCaches === null) {\n cache = new Map();\n caches = tagCaches = new Map();\n caches.set(ownerDocument, cache);\n } else {\n caches = tagCaches;\n var maybeCache = caches.get(ownerDocument);\n\n if (!maybeCache) {\n cache = new Map();\n caches.set(ownerDocument, cache);\n } else {\n cache = maybeCache;\n }\n }\n\n if (cache.has(type)) {\n // We use type as a special key that signals that this cache has been seeded for this type\n return cache;\n } // Mark this cache as seeded for this type\n\n\n cache.set(type, null);\n var nodes = ownerDocument.getElementsByTagName(type);\n\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n\n if (!isOwnedInstance(node) && (type !== 'link' || node.getAttribute('rel') !== 'stylesheet') && node.namespaceURI !== SVG_NAMESPACE) {\n var nodeKey = node.getAttribute(keyAttribute) || '';\n var key = type + nodeKey;\n var existing = cache.get(key);\n\n if (existing) {\n existing.push(node);\n } else {\n cache.set(key, [node]);\n }\n }\n }\n\n return cache;\n}\n\nfunction mountHoistable(hoistableRoot, type, instance) {\n var ownerDocument = getDocumentFromRoot(hoistableRoot);\n ownerDocument.head.insertBefore(instance, type === 'title' ? ownerDocument.querySelector('head > title') : null);\n}\nfunction unmountHoistable(instance) {\n instance.parentNode.removeChild(instance);\n}\nfunction isHostHoistableType(type, props, hostContext) {\n var outsideHostContainerContext;\n var hostContextProd;\n\n {\n var hostContextDev = hostContext; // We can only render resources when we are not within the host container context\n\n outsideHostContainerContext = !hostContextDev.ancestorInfo.containerTagInScope;\n hostContextProd = hostContextDev.context;\n } // Global opt out of hoisting for anything in SVG Namespace or anything with an itemProp inside an itemScope\n\n\n if (hostContextProd === HostContextNamespaceSvg || props.itemProp != null) {\n {\n if (outsideHostContainerContext && props.itemProp != null && (type === 'meta' || type === 'title' || type === 'style' || type === 'link' || type === 'script')) {\n error('Cannot render a <%s> outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an' + ' `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this <%s> remove the `itemProp` prop.' + ' Otherwise, try moving this tag into the <head> or <body> of the Document.', type, type);\n }\n }\n\n return false;\n }\n\n switch (type) {\n case 'meta':\n case 'title':\n {\n return true;\n }\n\n case 'style':\n {\n if (typeof props.precedence !== 'string' || typeof props.href !== 'string' || props.href === '') {\n {\n if (outsideHostContainerContext) {\n error('Cannot render a <style> outside the main document without knowing its precedence and a unique href key.' + ' React can hoist and deduplicate <style> tags if you provide a `precedence` prop along with an `href` prop that' + ' does not conflic with the `href` values used in any other hoisted <style> or <link rel=\"stylesheet\" ...> tags. ' + ' Note that hoisting <style> tags is considered an advanced feature that most will not use directly.' + ' Consider moving the <style> tag to the <head> or consider adding a `precedence=\"default\"` and `href=\"some unique resource identifier\"`, or move the <style>' + ' to the <style> tag.');\n }\n }\n\n return false;\n }\n\n return true;\n }\n\n case 'link':\n {\n if (typeof props.rel !== 'string' || typeof props.href !== 'string' || props.href === '' || props.onLoad || props.onError) {\n {\n if (props.rel === 'stylesheet' && typeof props.precedence === 'string') {\n validateLinkPropsForStyleResource(props);\n }\n\n if (outsideHostContainerContext) {\n if (typeof props.rel !== 'string' || typeof props.href !== 'string' || props.href === '') {\n error('Cannot render a <link> outside the main document without a `rel` and `href` prop.' + ' Try adding a `rel` and/or `href` prop to this <link> or moving the link into the <head> tag');\n } else if (props.onError || props.onLoad) {\n error('Cannot render a <link> with onLoad or onError listeners outside the main document.' + ' Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or' + ' somewhere in the <body>.');\n }\n }\n }\n\n return false;\n }\n\n switch (props.rel) {\n case 'stylesheet':\n {\n var precedence = props.precedence,\n disabled = props.disabled;\n\n {\n if (typeof precedence !== 'string') {\n if (outsideHostContainerContext) {\n error('Cannot render a <link rel=\"stylesheet\" /> outside the main document without knowing its precedence.' + ' Consider adding precedence=\"default\" or moving it into the root <head> tag.');\n }\n }\n }\n\n return typeof precedence === 'string' && disabled == null;\n }\n\n default:\n {\n return true;\n }\n }\n }\n\n case 'script':\n {\n if (props.async !== true || props.onLoad || props.onError || typeof props.src !== 'string' || !props.src) {\n {\n if (outsideHostContainerContext) {\n if (props.async !== true) {\n error('Cannot render a sync or defer <script> outside the main document without knowing its order.' + ' Try adding async=\"\" or moving it into the root <head> tag.');\n } else if (props.onLoad || props.onError) {\n error('Cannot render a <script> with onLoad or onError listeners outside the main document.' + ' Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or' + ' somewhere in the <body>.');\n } else {\n error('Cannot render a <script> outside the main document without `async={true}` and a non-empty `src` prop.' + ' Ensure there is a valid `src` and either make the script async or move it into the root <head> tag or' + ' somewhere in the <body>.');\n }\n }\n }\n\n return false;\n }\n\n return true;\n }\n\n case 'noscript':\n case 'template':\n {\n {\n if (outsideHostContainerContext) {\n error('Cannot render <%s> outside the main document. Try moving it into the root <head> tag.', type);\n }\n }\n\n return false;\n }\n }\n\n return false;\n}\nfunction mayResourceSuspendCommit(resource) {\n return resource.type === 'stylesheet' && (resource.state.loading & Inserted) === NotLoaded;\n}\nfunction preloadInstance(type, props) {\n // Return true to indicate it's already loaded\n return true;\n}\nfunction preloadResource(resource) {\n if (resource.type === 'stylesheet' && (resource.state.loading & Settled) === NotLoaded) {\n // we have not finished loading the underlying stylesheet yet.\n return false;\n } // Return true to indicate it's already loaded\n\n\n return true;\n}\nvar suspendedState = null; // We use a noop function when we begin suspending because if possible we want the\n// waitfor step to finish synchronously. If it doesn't we'll return a function to\n// provide the actual unsuspend function and that will get completed when the count\n// hits zero or it will get cancelled if the root starts new work.\n\nfunction noop() {}\n\nfunction startSuspendingCommit() {\n suspendedState = {\n stylesheets: null,\n count: 0,\n unsuspend: noop\n };\n}\nfunction suspendResource(hoistableRoot, resource, props) {\n if (suspendedState === null) {\n throw new Error('Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.');\n }\n\n var state = suspendedState;\n\n if (resource.type === 'stylesheet') {\n if (typeof props.media === 'string') {\n // If we don't currently match media we avoid suspending on this resource\n // and let it insert on the mutation path\n if (matchMedia(props.media).matches === false) {\n return;\n }\n }\n\n if ((resource.state.loading & Inserted) === NotLoaded) {\n if (resource.instance === null) {\n var qualifiedProps = props;\n var key = getStyleKey(qualifiedProps.href); // Attempt to hydrate instance from DOM\n\n var instance = hoistableRoot.querySelector(getStylesheetSelectorFromKey(key));\n\n if (instance) {\n // If this instance has a loading state it came from the Fizz runtime.\n // If there is not loading state it is assumed to have been server rendered\n // as part of the preamble and therefore synchronously loaded. It could have\n // errored however which we still do not yet have a means to detect. For now\n // we assume it is loaded.\n var maybeLoadingState = instance._p;\n\n if (maybeLoadingState !== null && typeof maybeLoadingState === 'object' && // $FlowFixMe[method-unbinding]\n typeof maybeLoadingState.then === 'function') {\n var loadingState = maybeLoadingState;\n state.count++;\n var ping = onUnsuspend.bind(state);\n loadingState.then(ping, ping);\n }\n\n resource.state.loading |= Inserted;\n resource.instance = instance;\n markNodeAsHoistable(instance);\n return;\n }\n\n var ownerDocument = getDocumentFromRoot(hoistableRoot);\n var stylesheetProps = stylesheetPropsFromRawProps(props);\n var preloadProps = preloadPropsMap.get(key);\n\n if (preloadProps) {\n adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps);\n } // Construct and insert a new instance\n\n\n instance = ownerDocument.createElement('link');\n markNodeAsHoistable(instance);\n var linkInstance = instance; // This Promise is a loading state used by the Fizz runtime. We need this incase there is a race\n // between this resource being rendered on the client and being rendered with a late completed boundary.\n\n linkInstance._p = new Promise(function (resolve, reject) {\n linkInstance.onload = resolve;\n linkInstance.onerror = reject;\n });\n setInitialProperties(instance, 'link', stylesheetProps);\n resource.instance = instance;\n }\n\n if (state.stylesheets === null) {\n state.stylesheets = new Map();\n }\n\n state.stylesheets.set(resource, hoistableRoot);\n var preloadEl = resource.state.preload;\n\n if (preloadEl && (resource.state.loading & Settled) === NotLoaded) {\n state.count++;\n\n var _ping = onUnsuspend.bind(state);\n\n preloadEl.addEventListener('load', _ping);\n preloadEl.addEventListener('error', _ping);\n }\n }\n }\n}\nfunction waitForCommitToBeReady() {\n if (suspendedState === null) {\n throw new Error('Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.');\n }\n\n var state = suspendedState;\n\n if (state.stylesheets && state.count === 0) {\n // We are not currently blocked but we have not inserted all stylesheets.\n // If this insertion happens and loads or errors synchronously then we can\n // avoid suspending the commit. To do this we check the count again immediately after\n insertSuspendedStylesheets(state, state.stylesheets);\n } // We need to check the count again because the inserted stylesheets may have led to new\n // tasks to wait on.\n\n\n if (state.count > 0) {\n return function (commit) {\n // We almost never want to show content before its styles have loaded. But\n // eventually we will give up and allow unstyled content. So this number is\n // somewhat arbitrary — big enough that you'd only reach it under\n // extreme circumstances.\n // TODO: Figure out what the browser engines do during initial page load and\n // consider aligning our behavior with that.\n var stylesheetTimer = setTimeout(function () {\n if (state.stylesheets) {\n insertSuspendedStylesheets(state, state.stylesheets);\n }\n\n if (state.unsuspend) {\n var unsuspend = state.unsuspend;\n state.unsuspend = null;\n unsuspend();\n }\n }, 60000); // one minute\n\n state.unsuspend = commit;\n return function () {\n state.unsuspend = null;\n clearTimeout(stylesheetTimer);\n };\n };\n }\n\n return null;\n}\n\nfunction onUnsuspend() {\n this.count--;\n\n if (this.count === 0) {\n if (this.stylesheets) {\n // If we haven't actually inserted the stylesheets yet we need to do so now before starting the commit.\n // The reason we do this after everything else has finished is because we want to have all the stylesheets\n // load synchronously right before mutating. Ideally the new styles will cause a single recalc only on the\n // new tree. When we filled up stylesheets we only inlcuded stylesheets with matching media attributes so we\n // wait for them to load before actually continuing. We expect this to increase the count above zero\n insertSuspendedStylesheets(this, this.stylesheets);\n } else if (this.unsuspend) {\n var unsuspend = this.unsuspend;\n this.unsuspend = null;\n unsuspend();\n }\n }\n} // This is typecast to non-null because it will always be set before read.\n// it is important that this not be used except when the stack guarantees it exists.\n// Currentlyt his is only during insertSuspendedStylesheet.\n\n\nvar precedencesByRoot = null;\n\nfunction insertSuspendedStylesheets(state, resources) {\n // We need to clear this out so we don't try to reinsert after the stylesheets have loaded\n state.stylesheets = null;\n\n if (state.unsuspend === null) {\n // The suspended commit was cancelled. We don't need to insert any stylesheets.\n return;\n } // Temporarily increment count. we don't want any synchronously loaded stylesheets to try to unsuspend\n // before we finish inserting all stylesheets.\n\n\n state.count++;\n precedencesByRoot = new Map();\n resources.forEach(insertStylesheetIntoRoot, state);\n precedencesByRoot = null; // We can remove our temporary count and if we're still at zero we can unsuspend.\n // If we are in the synchronous phase before deciding if the commit should suspend and this\n // ends up hitting the unsuspend path it will just invoke the noop unsuspend.\n\n onUnsuspend.call(state);\n}\n\nfunction insertStylesheetIntoRoot(root, resource, map) {\n if (resource.state.loading & Inserted) {\n // This resource was inserted by another root committing. we don't need to insert it again\n return;\n }\n\n var last;\n var precedences = precedencesByRoot.get(root);\n\n if (!precedences) {\n precedences = new Map();\n precedencesByRoot.set(root, precedences);\n var nodes = root.querySelectorAll('link[data-precedence],style[data-precedence]');\n\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n\n if (node.nodeName === 'link' || // We omit style tags with media=\"not all\" because they are not in the right position\n // and will be hoisted by the Fizz runtime imminently.\n node.getAttribute('media') !== 'not all') {\n precedences.set('p' + node.dataset.precedence, node);\n last = node;\n }\n }\n\n if (last) {\n precedences.set('last', last);\n }\n } else {\n last = precedences.get('last');\n } // We only call this after we have constructed an instance so we assume it here\n\n\n var instance = resource.instance; // We will always have a precedence for stylesheet instances\n\n var precedence = instance.getAttribute('data-precedence');\n var prior = precedences.get('p' + precedence) || last;\n\n if (prior === last) {\n precedences.set('last', instance);\n }\n\n precedences.set(precedence, instance);\n this.count++;\n var onComplete = onUnsuspend.bind(this);\n instance.addEventListener('load', onComplete);\n instance.addEventListener('error', onComplete);\n\n if (prior) {\n prior.parentNode.insertBefore(instance, prior.nextSibling);\n } else {\n var parent = root.nodeType === DOCUMENT_NODE ? root.head : root;\n parent.insertBefore(instance, parent.firstChild);\n }\n\n resource.state.loading |= Inserted;\n}\n\nvar NotPendingTransition = NotPending;\n\nvar Dispatcher$1 = Internals.Dispatcher;\n\nif (typeof document !== 'undefined') {\n // Set the default dispatcher to the client dispatcher\n Dispatcher$1.current = ReactDOMClientDispatcher;\n}\n/* global reportError */\n\nvar defaultOnRecoverableError = typeof reportError === 'function' ? // In modern browsers, reportError will dispatch an error event,\n// emulating an uncaught JavaScript error.\nreportError : function (error) {\n // In older browsers and test environments, fallback to console.error.\n // eslint-disable-next-line react-internal/no-production-logging\n console['error'](error);\n}; // $FlowFixMe[missing-this-annot]\n\nfunction ReactDOMRoot(internalRoot) {\n this._internalRoot = internalRoot;\n} // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render = // $FlowFixMe[missing-this-annot]\nfunction (children) {\n var root = this._internalRoot;\n\n if (root === null) {\n throw new Error('Cannot update an unmounted root.');\n }\n\n {\n if (typeof arguments[1] === 'function') {\n error('render(...): does not support the second callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n } else if (isValidContainer(arguments[1])) {\n error('You passed a container to the second argument of root.render(...). ' + \"You don't need to pass it again since you already passed it to create the root.\");\n } else if (typeof arguments[1] !== 'undefined') {\n error('You passed a second argument to root.render(...) but it only accepts ' + 'one argument.');\n }\n }\n\n updateContainer(children, root, null, null);\n}; // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount = // $FlowFixMe[missing-this-annot]\nfunction () {\n {\n if (typeof arguments[0] === 'function') {\n error('unmount(...): does not support a callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n }\n }\n\n var root = this._internalRoot;\n\n if (root !== null) {\n this._internalRoot = null;\n var container = root.containerInfo;\n\n {\n if (isAlreadyRendering()) {\n error('Attempted to synchronously unmount a root while React was already ' + 'rendering. React cannot finish unmounting the root until the ' + 'current render has completed, which may lead to a race condition.');\n }\n }\n\n flushSync$1(function () {\n updateContainer(null, root, null, null);\n });\n unmarkContainerAsRoot(container);\n }\n};\n\nfunction createRoot$1(container, options) {\n if (!isValidContainer(container)) {\n throw new Error('createRoot(...): Target container is not a DOM element.');\n }\n\n warnIfReactDOMContainerInDEV(container);\n var isStrictMode = false;\n var concurrentUpdatesByDefaultOverride = false;\n var identifierPrefix = '';\n var onRecoverableError = defaultOnRecoverableError;\n var transitionCallbacks = null;\n\n if (options !== null && options !== undefined) {\n {\n if (options.hydrate) {\n warn('hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead.');\n } else {\n if (typeof options === 'object' && options !== null && options.$$typeof === REACT_ELEMENT_TYPE) {\n error('You passed a JSX element to createRoot. You probably meant to ' + 'call root.render instead. ' + 'Example usage:\\n\\n' + ' let root = createRoot(domContainer);\\n' + ' root.render(<App />);');\n }\n }\n }\n\n if (options.unstable_strictMode === true) {\n isStrictMode = true;\n }\n\n if (options.identifierPrefix !== undefined) {\n identifierPrefix = options.identifierPrefix;\n }\n\n if (options.onRecoverableError !== undefined) {\n onRecoverableError = options.onRecoverableError;\n }\n\n if (options.unstable_transitionCallbacks !== undefined) {\n transitionCallbacks = options.unstable_transitionCallbacks;\n }\n }\n\n var root = createContainer(container, ConcurrentRoot, null, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks);\n markContainerAsRoot(root.current, container);\n Dispatcher$1.current = ReactDOMClientDispatcher;\n var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;\n listenToAllSupportedEvents(rootContainerElement); // $FlowFixMe[invalid-constructor] Flow no longer supports calling new on functions\n\n return new ReactDOMRoot(root);\n} // $FlowFixMe[missing-this-annot]\n\nfunction ReactDOMHydrationRoot(internalRoot) {\n this._internalRoot = internalRoot;\n}\n\nfunction scheduleHydration(target) {\n if (target) {\n queueExplicitHydrationTarget(target);\n }\n} // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = scheduleHydration;\nfunction hydrateRoot$1(container, initialChildren, options) {\n if (!isValidContainer(container)) {\n throw new Error('hydrateRoot(...): Target container is not a DOM element.');\n }\n\n warnIfReactDOMContainerInDEV(container);\n\n {\n if (initialChildren === undefined) {\n error('Must provide initial children as second argument to hydrateRoot. ' + 'Example usage: hydrateRoot(domContainer, <App />)');\n }\n } // For now we reuse the whole bag of options since they contain\n // the hydration callbacks.\n\n\n var hydrationCallbacks = options != null ? options : null;\n var isStrictMode = false;\n var concurrentUpdatesByDefaultOverride = false;\n var identifierPrefix = '';\n var onRecoverableError = defaultOnRecoverableError;\n var transitionCallbacks = null;\n var formState = null;\n\n if (options !== null && options !== undefined) {\n if (options.unstable_strictMode === true) {\n isStrictMode = true;\n }\n\n if (options.identifierPrefix !== undefined) {\n identifierPrefix = options.identifierPrefix;\n }\n\n if (options.onRecoverableError !== undefined) {\n onRecoverableError = options.onRecoverableError;\n }\n\n if (options.unstable_transitionCallbacks !== undefined) {\n transitionCallbacks = options.unstable_transitionCallbacks;\n }\n\n {\n if (options.formState !== undefined) {\n formState = options.formState;\n }\n }\n }\n\n var root = createHydrationContainer(initialChildren, null, container, ConcurrentRoot, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks, formState);\n markContainerAsRoot(root.current, container);\n Dispatcher$1.current = ReactDOMClientDispatcher; // This can't be a comment node since hydration doesn't work on comment nodes anyway.\n\n listenToAllSupportedEvents(container); // $FlowFixMe[invalid-constructor] Flow no longer supports calling new on functions\n\n return new ReactDOMHydrationRoot(root);\n}\nfunction isValidContainer(node) {\n return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || !disableCommentsAsDOMContainers ));\n} // TODO: Remove this function which also includes comment nodes.\n// We only use it in places that are currently more relaxed.\n\nfunction isValidContainerLegacy(node) {\n return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable '));\n}\n\nfunction warnIfReactDOMContainerInDEV(container) {\n {\n if (isContainerMarkedAsRoot(container)) {\n if (container._reactRootContainer) {\n error('You are calling ReactDOMClient.createRoot() on a container that was previously ' + 'passed to ReactDOM.render(). This is not supported.');\n } else {\n error('You are calling ReactDOMClient.createRoot() on a container that ' + 'has already been passed to createRoot() before. Instead, call ' + 'root.render() on the existing root instead if you want to update it.');\n }\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar topLevelUpdateWarnings;\n\n{\n topLevelUpdateWarnings = function (container) {\n if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {\n var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer.current);\n\n if (hostInstance) {\n if (hostInstance.parentNode !== container) {\n error('render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.');\n }\n }\n }\n\n var isRootRenderedBySomeReact = !!container._reactRootContainer;\n var rootEl = getReactRootElementInContainer(container);\n var hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));\n\n if (hasNonRootReactChild && !isRootRenderedBySomeReact) {\n error('render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.');\n }\n };\n}\n\nfunction getReactRootElementInContainer(container) {\n if (!container) {\n return null;\n }\n\n if (container.nodeType === DOCUMENT_NODE) {\n return container.documentElement;\n } else {\n return container.firstChild;\n }\n}\n\nfunction noopOnRecoverableError() {// This isn't reachable because onRecoverableError isn't called in the\n // legacy API.\n}\n\nfunction legacyCreateRootFromDOMContainer(container, initialChildren, parentComponent, callback, isHydrationContainer) {\n if (isHydrationContainer) {\n if (typeof callback === 'function') {\n var originalCallback = callback;\n\n callback = function () {\n var instance = getPublicRootInstance(root);\n originalCallback.call(instance);\n };\n }\n\n var root = createHydrationContainer(initialChildren, callback, container, LegacyRoot, null, // hydrationCallbacks\n false, // isStrictMode\n false, // concurrentUpdatesByDefaultOverride,\n '', // identifierPrefix\n noopOnRecoverableError, // TODO(luna) Support hydration later\n null, null);\n container._reactRootContainer = root;\n markContainerAsRoot(root.current, container);\n var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container; // $FlowFixMe[incompatible-call]\n\n listenToAllSupportedEvents(rootContainerElement);\n flushSync$1();\n return root;\n } else {\n // First clear any existing content.\n clearContainer(container);\n\n if (typeof callback === 'function') {\n var _originalCallback = callback;\n\n callback = function () {\n var instance = getPublicRootInstance(_root);\n\n _originalCallback.call(instance);\n };\n }\n\n var _root = createContainer(container, LegacyRoot, null, // hydrationCallbacks\n false, // isStrictMode\n false, // concurrentUpdatesByDefaultOverride,\n '', // identifierPrefix\n noopOnRecoverableError, // onRecoverableError\n null // transitionCallbacks\n );\n\n container._reactRootContainer = _root;\n markContainerAsRoot(_root.current, container);\n\n var _rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container; // $FlowFixMe[incompatible-call]\n\n\n listenToAllSupportedEvents(_rootContainerElement); // Initial mount should not be batched.\n\n flushSync$1(function () {\n updateContainer(initialChildren, _root, parentComponent, callback);\n });\n return _root;\n }\n}\n\nfunction warnOnInvalidCallback(callback, callerName) {\n {\n if (callback !== null && typeof callback !== 'function') {\n error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n }\n }\n}\n\nfunction legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) {\n {\n topLevelUpdateWarnings(container);\n warnOnInvalidCallback(callback === undefined ? null : callback, 'render');\n }\n\n var maybeRoot = container._reactRootContainer;\n var root;\n\n if (!maybeRoot) {\n // Initial mount\n root = legacyCreateRootFromDOMContainer(container, children, parentComponent, callback, forceHydrate);\n } else {\n root = maybeRoot;\n\n if (typeof callback === 'function') {\n var originalCallback = callback;\n\n callback = function () {\n var instance = getPublicRootInstance(root);\n originalCallback.call(instance);\n };\n } // Update\n\n\n updateContainer(children, root, parentComponent, callback);\n }\n\n return getPublicRootInstance(root);\n}\n\nfunction findDOMNode(componentOrElement) {\n {\n var owner = ReactCurrentOwner.current;\n\n if (owner !== null && owner.stateNode !== null) {\n var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;\n\n if (!warnedAboutRefsInRender) {\n error('%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentNameFromType(owner.type) || 'A component');\n }\n\n owner.stateNode._warnedAboutRefsInRender = true;\n }\n }\n\n if (componentOrElement == null) {\n return null;\n }\n\n if (componentOrElement.nodeType === ELEMENT_NODE) {\n return componentOrElement;\n }\n\n {\n return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');\n }\n}\nfunction hydrate(element, container, callback) {\n {\n error('ReactDOM.hydrate is no longer supported in React 18. Use hydrateRoot ' + 'instead. Until you switch to the new API, your app will behave as ' + \"if it's running React 17. Learn \" + 'more: https://reactjs.org/link/switch-to-createroot');\n }\n\n if (!isValidContainerLegacy(container)) {\n throw new Error('Target container is not a DOM element.');\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. ' + 'Did you mean to call hydrateRoot(container, element)?');\n }\n } // TODO: throw or warn if we couldn't hydrate?\n\n\n return legacyRenderSubtreeIntoContainer(null, element, container, true, callback);\n}\nfunction render(element, container, callback) {\n {\n error('ReactDOM.render is no longer supported in React 18. Use createRoot ' + 'instead. Until you switch to the new API, your app will behave as ' + \"if it's running React 17. Learn \" + 'more: https://reactjs.org/link/switch-to-createroot');\n }\n\n if (!isValidContainerLegacy(container)) {\n throw new Error('Target container is not a DOM element.');\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?');\n }\n }\n\n return legacyRenderSubtreeIntoContainer(null, element, container, false, callback);\n}\nfunction unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n {\n error('ReactDOM.unstable_renderSubtreeIntoContainer() is no longer supported ' + 'in React 18. Consider using a portal instead. Until you switch to ' + \"the createRoot API, your app will behave as if it's running React \" + '17. Learn more: https://reactjs.org/link/switch-to-createroot');\n }\n\n if (!isValidContainerLegacy(containerNode)) {\n throw new Error('Target container is not a DOM element.');\n }\n\n if (parentComponent == null || !has(parentComponent)) {\n throw new Error('parentComponent must be a valid React Component');\n }\n\n return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback);\n}\nfunction unmountComponentAtNode(container) {\n if (!isValidContainerLegacy(container)) {\n throw new Error('unmountComponentAtNode(...): Target container is not a DOM element.');\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. Did you mean to call root.unmount()?');\n }\n }\n\n if (container._reactRootContainer) {\n {\n var rootEl = getReactRootElementInContainer(container);\n var renderedByDifferentReact = rootEl && !getInstanceFromNode(rootEl);\n\n if (renderedByDifferentReact) {\n error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by another copy of React.');\n }\n } // Unmount should not be batched.\n\n\n flushSync$1(function () {\n legacyRenderSubtreeIntoContainer(null, null, container, false, function () {\n // $FlowFixMe[incompatible-type] This should probably use `delete container._reactRootContainer`\n container._reactRootContainer = null;\n unmarkContainerAsRoot(container);\n });\n }); // If you call unmountComponentAtNode twice in quick succession, you'll\n // get `true` twice. That's probably fine?\n\n return true;\n } else {\n {\n var _rootEl = getReactRootElementInContainer(container);\n\n var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode(_rootEl)); // Check if the container itself is a React root node.\n\n var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainerLegacy(container.parentNode) && // $FlowFixMe[prop-missing]\n // $FlowFixMe[incompatible-use]\n !!container.parentNode._reactRootContainer;\n\n if (hasNonRootReactChild) {\n error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.');\n }\n }\n\n return false;\n }\n}\n\nfunction getCrossOriginString(input) {\n if (typeof input === 'string') {\n return input === 'use-credentials' ? input : '';\n }\n\n return undefined;\n}\nfunction getCrossOriginStringAs(as, input) {\n if (as === 'font') {\n return '';\n }\n\n if (typeof input === 'string') {\n return input === 'use-credentials' ? input : '';\n }\n\n return undefined;\n}\n\nvar Dispatcher = Internals.Dispatcher;\nfunction prefetchDNS(href) {\n {\n if (typeof href !== 'string' || !href) {\n error('ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.', getValueDescriptorExpectingObjectForWarning(href));\n } else if (arguments.length > 1) {\n var options = arguments[1];\n\n if (typeof options === 'object' && options.hasOwnProperty('crossOrigin')) {\n error('ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.', getValueDescriptorExpectingEnumForWarning(options));\n } else {\n error('ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.', getValueDescriptorExpectingEnumForWarning(options));\n }\n }\n }\n\n var dispatcher = Dispatcher.current;\n\n if (dispatcher && typeof href === 'string') {\n dispatcher.prefetchDNS(href);\n } // We don't error because preconnect needs to be resilient to being called in a variety of scopes\n // and the runtime may not be capable of responding. The function is optimistic and not critical\n // so we favor silent bailout over warning or erroring.\n\n}\nfunction preconnect(href, options) {\n {\n if (typeof href !== 'string' || !href) {\n error('ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.', getValueDescriptorExpectingObjectForWarning(href));\n } else if (options != null && typeof options !== 'object') {\n error('ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.', getValueDescriptorExpectingEnumForWarning(options));\n } else if (options != null && typeof options.crossOrigin !== 'string') {\n error('ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.', getValueDescriptorExpectingObjectForWarning(options.crossOrigin));\n }\n }\n\n var dispatcher = Dispatcher.current;\n\n if (dispatcher && typeof href === 'string') {\n var crossOrigin = options ? getCrossOriginString(options.crossOrigin) : null;\n dispatcher.preconnect(href, crossOrigin);\n } // We don't error because preconnect needs to be resilient to being called in a variety of scopes\n // and the runtime may not be capable of responding. The function is optimistic and not critical\n // so we favor silent bailout over warning or erroring.\n\n}\nfunction preload(href, options) {\n {\n var encountered = '';\n\n if (typeof href !== 'string' || !href) {\n encountered += \" The `href` argument encountered was \" + getValueDescriptorExpectingObjectForWarning(href) + \".\";\n }\n\n if (options == null || typeof options !== 'object') {\n encountered += \" The `options` argument encountered was \" + getValueDescriptorExpectingObjectForWarning(options) + \".\";\n } else if (typeof options.as !== 'string' || !options.as) {\n encountered += \" The `as` option encountered was \" + getValueDescriptorExpectingObjectForWarning(options.as) + \".\";\n }\n\n if (encountered) {\n error('ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel=\"preload\" as=\"...\" />` tag.%s', encountered);\n }\n }\n\n var dispatcher = Dispatcher.current;\n\n if (dispatcher && typeof href === 'string' && // We check existence because we cannot enforce this function is actually called with the stated type\n typeof options === 'object' && options !== null && typeof options.as === 'string') {\n var as = options.as;\n var crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n dispatcher.preload(href, as, {\n crossOrigin: crossOrigin,\n integrity: typeof options.integrity === 'string' ? options.integrity : undefined,\n nonce: typeof options.nonce === 'string' ? options.nonce : undefined,\n type: typeof options.type === 'string' ? options.type : undefined,\n fetchPriority: typeof options.fetchPriority === 'string' ? options.fetchPriority : undefined,\n referrerPolicy: typeof options.referrerPolicy === 'string' ? options.referrerPolicy : undefined,\n imageSrcSet: typeof options.imageSrcSet === 'string' ? options.imageSrcSet : undefined,\n imageSizes: typeof options.imageSizes === 'string' ? options.imageSizes : undefined\n });\n } // We don't error because preload needs to be resilient to being called in a variety of scopes\n // and the runtime may not be capable of responding. The function is optimistic and not critical\n // so we favor silent bailout over warning or erroring.\n\n}\nfunction preloadModule(href, options) {\n {\n var encountered = '';\n\n if (typeof href !== 'string' || !href) {\n encountered += \" The `href` argument encountered was \" + getValueDescriptorExpectingObjectForWarning(href) + \".\";\n }\n\n if (options !== undefined && typeof options !== 'object') {\n encountered += \" The `options` argument encountered was \" + getValueDescriptorExpectingObjectForWarning(options) + \".\";\n } else if (options && 'as' in options && typeof options.as !== 'string') {\n encountered += \" The `as` option encountered was \" + getValueDescriptorExpectingObjectForWarning(options.as) + \".\";\n }\n\n if (encountered) {\n error('ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel=\"modulepreload\" as=\"...\" />` tag.%s', encountered);\n }\n }\n\n var dispatcher = Dispatcher.current;\n\n if (dispatcher && typeof href === 'string') {\n if (options) {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n dispatcher.preloadModule(href, {\n as: typeof options.as === 'string' && options.as !== 'script' ? options.as : undefined,\n crossOrigin: crossOrigin,\n integrity: typeof options.integrity === 'string' ? options.integrity : undefined\n });\n } else {\n dispatcher.preloadModule(href);\n }\n } // We don't error because preload needs to be resilient to being called in a variety of scopes\n // and the runtime may not be capable of responding. The function is optimistic and not critical\n // so we favor silent bailout over warning or erroring.\n\n}\nfunction preinit(href, options) {\n {\n if (typeof href !== 'string' || !href) {\n error('ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.', getValueDescriptorExpectingObjectForWarning(href));\n } else if (options == null || typeof options !== 'object') {\n error('ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.', getValueDescriptorExpectingEnumForWarning(options));\n } else if (options.as !== 'style' && options.as !== 'script') {\n error('ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are \"style\" and \"script\".', getValueDescriptorExpectingEnumForWarning(options.as));\n }\n }\n\n var dispatcher = Dispatcher.current;\n\n if (dispatcher && typeof href === 'string' && options && typeof options.as === 'string') {\n var as = options.as;\n var crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n var integrity = typeof options.integrity === 'string' ? options.integrity : undefined;\n var fetchPriority = typeof options.fetchPriority === 'string' ? options.fetchPriority : undefined;\n\n if (as === 'style') {\n dispatcher.preinitStyle(href, typeof options.precedence === 'string' ? options.precedence : undefined, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority\n });\n } else if (as === 'script') {\n dispatcher.preinitScript(href, {\n crossOrigin: crossOrigin,\n integrity: integrity,\n fetchPriority: fetchPriority,\n nonce: typeof options.nonce === 'string' ? options.nonce : undefined\n });\n }\n } // We don't error because preinit needs to be resilient to being called in a variety of scopes\n // and the runtime may not be capable of responding. The function is optimistic and not critical\n // so we favor silent bailout over warning or erroring.\n\n}\nfunction preinitModule(href, options) {\n {\n var encountered = '';\n\n if (typeof href !== 'string' || !href) {\n encountered += \" The `href` argument encountered was \" + getValueDescriptorExpectingObjectForWarning(href) + \".\";\n }\n\n if (options !== undefined && typeof options !== 'object') {\n encountered += \" The `options` argument encountered was \" + getValueDescriptorExpectingObjectForWarning(options) + \".\";\n } else if (options && 'as' in options && options.as !== 'script') {\n encountered += \" The `as` option encountered was \" + getValueDescriptorExpectingEnumForWarning(options.as) + \".\";\n }\n\n if (encountered) {\n error('ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s', encountered);\n } else {\n var as = options && typeof options.as === 'string' ? options.as : 'script';\n\n switch (as) {\n case 'script':\n {\n break;\n }\n // We have an invalid as type and need to warn\n\n default:\n {\n var typeOfAs = getValueDescriptorExpectingEnumForWarning(as);\n\n error('ReactDOM.preinitModule(): Currently the only supported \"as\" type for this function is \"script\"' + ' but received \"%s\" instead. This warning was generated for `href` \"%s\". In the future other' + ' module types will be supported, aligning with the import-attributes proposal. Learn more here:' + ' (https://github.com/tc39/proposal-import-attributes)', typeOfAs, href);\n }\n }\n }\n }\n\n var dispatcher = Dispatcher.current;\n\n if (dispatcher && typeof href === 'string') {\n if (typeof options === 'object' && options !== null) {\n if (options.as == null || options.as === 'script') {\n var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n dispatcher.preinitModuleScript(href, {\n crossOrigin: crossOrigin,\n integrity: typeof options.integrity === 'string' ? options.integrity : undefined,\n nonce: typeof options.nonce === 'string' ? options.nonce : undefined\n });\n }\n } else if (options == null) {\n dispatcher.preinitModuleScript(href);\n }\n } // We don't error because preinit needs to be resilient to being called in a variety of scopes\n // and the runtime may not be capable of responding. The function is optimistic and not critical\n // so we favor silent bailout over warning or erroring.\n\n}\n\nfunction getValueDescriptorExpectingObjectForWarning(thing) {\n return thing === null ? '`null`' : thing === undefined ? '`undefined`' : thing === '' ? 'an empty string' : \"something with type \\\"\" + typeof thing + \"\\\"\";\n}\n\nfunction getValueDescriptorExpectingEnumForWarning(thing) {\n return thing === null ? '`null`' : thing === undefined ? '`undefined`' : thing === '' ? 'an empty string' : typeof thing === 'string' ? JSON.stringify(thing) : typeof thing === 'number' ? '`' + thing + '`' : \"something with type \\\"\" + typeof thing + \"\\\"\";\n}\n\n{\n if (typeof Map !== 'function' || // $FlowFixMe[prop-missing] Flow incorrectly thinks Map has no prototype\n Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' || // $FlowFixMe[prop-missing] Flow incorrectly thinks Set has no prototype\n Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') {\n error('React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://reactjs.org/link/react-polyfills');\n }\n}\n\nfunction createPortal(children, container) {\n var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n if (!isValidContainer(container)) {\n throw new Error('Target container is not a DOM element.');\n } // TODO: pass ReactDOM portal implementation as third argument\n // $FlowFixMe[incompatible-return] The Flow type is opaque but there's no way to actually create it.\n\n\n return createPortal$1(children, container, null, key);\n}\n\nfunction renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback);\n}\n\nfunction createRoot(container, options) {\n {\n if (!Internals.usingClientEntryPoint && !false) {\n error('You are importing createRoot from \"react-dom\" which is not supported. ' + 'You should instead import it from \"react-dom/client\".');\n }\n }\n\n return createRoot$1(container, options);\n}\n\nfunction hydrateRoot(container, initialChildren, options) {\n {\n if (!Internals.usingClientEntryPoint && !false) {\n error('You are importing hydrateRoot from \"react-dom\" which is not supported. ' + 'You should instead import it from \"react-dom/client\".');\n }\n }\n\n return hydrateRoot$1(container, initialChildren, options);\n} // Overload the definition to the two valid signatures.\n// Warning, this opts-out of checking the function body.\n// eslint-disable-next-line no-redeclare\n// eslint-disable-next-line no-redeclare\n\n\nfunction flushSync(fn) {\n {\n if (isAlreadyRendering()) {\n error('flushSync was called from inside a lifecycle method. React cannot ' + 'flush when React is already rendering. Consider moving this call to ' + 'a scheduler task or micro task.');\n }\n }\n\n return flushSync$1(fn);\n}\n// This is an array for better minification.\n\nInternals.Events = [getInstanceFromNode, getNodeFromInstance, getFiberCurrentPropsFromNode, enqueueStateRestore, restoreStateIfNeeded, batchedUpdates$1];\nvar foundDevTools = injectIntoDevTools({\n findFiberByHostInstance: getClosestInstanceFromNode,\n bundleType: 1 ,\n version: ReactVersion,\n rendererPackageName: 'react-dom'\n});\n\n{\n if (!foundDevTools && canUseDOM && window.top === window.self) {\n // If we're in Chrome or Firefox, provide a download link if not installed.\n if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n var protocol = window.location.protocol; // Don't warn in exotic cases like chrome-extension://.\n\n if (/^(https?|file):$/.test(protocol)) {\n // eslint-disable-next-line react-internal/no-production-logging\n console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://reactjs.org/link/react-devtools' + (protocol === 'file:' ? '\\nYou might need to use a local HTTP server (instead of file://): ' + 'https://reactjs.org/link/react-devtools-faq' : ''), 'font-weight:bold');\n }\n }\n }\n}\n\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;\nexports.createPortal = createPortal;\nexports.createRoot = createRoot;\nexports.findDOMNode = findDOMNode;\nexports.flushSync = flushSync;\nexports.hydrate = hydrate;\nexports.hydrateRoot = hydrateRoot;\nexports.preconnect = preconnect;\nexports.prefetchDNS = prefetchDNS;\nexports.preinit = preinit;\nexports.preinitModule = preinitModule;\nexports.preload = preload;\nexports.preloadModule = preloadModule;\nexports.render = render;\nexports.unmountComponentAtNode = unmountComponentAtNode;\nexports.unstable_batchedUpdates = batchedUpdates$1;\nexports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer;\nexports.useFormState = useFormState;\nexports.useFormStatus = useFormStatus;\nexports.version = ReactVersion;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLElBQUksSUFBcUM7QUFDekM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixtQkFBTyxDQUFDLHNHQUEwQjtBQUN4RCxnQkFBZ0IsbUJBQU8sQ0FBQyw4R0FBOEI7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkZBQTZGLGFBQWE7QUFDMUc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxlQUFlO0FBQ2hIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVIsa0RBQWtEO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DOztBQUVwQywwQ0FBMEM7O0FBRTFDLGdDQUFnQztBQUNoQztBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckMsZ0NBQWdDOztBQUVoQyxzQ0FBc0M7O0FBRXRDLDRDQUE0Qzs7QUFFNUMsNEVBQTRFO0FBQzVFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEOztBQUVBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUE4RDs7QUFFOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUE4RDs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRjs7QUFFbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGOztBQUVsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRkFBa0Y7O0FBRWxGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2RkFBNkY7O0FBRTdGO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDs7QUFFdkQsMERBQTBEO0FBQzFEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxTQUFTO0FBQ1QsdUJBQXVCO0FBQ3ZCO0FBQ0EsU0FBUztBQUNULHVCQUF1QjtBQUN2QjtBQUNBLFNBQVM7QUFDVCx3QkFBd0I7QUFDeEI7QUFDQSxTQUFTO0FBQ1Qsd0JBQXdCO0FBQ3hCO0FBQ0EsU0FBUztBQUNULGlDQUFpQztBQUNqQztBQUNBLFNBQVM7QUFDVCwyQkFBMkI7QUFDM0I7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEseUNBQXlDOztBQUV6QztBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLG9CQUFvQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUEsa0ZBQWtGO0FBQ2xGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsZ0JBQWdCO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRTtBQUNyRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixpQ0FBaUM7QUFDdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHOztBQUVsRztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrQkFBa0I7O0FBRWxCLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOzs7QUFHQSwwRUFBMEU7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQix5QkFBeUI7QUFDM0M7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyREFBMkQ7O0FBRTNEO0FBQ0E7O0FBRUE7QUFDQSwyREFBMkQ7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7OztBQUdiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjOzs7QUFHZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7O0FBR0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxnSEFBZ0g7O0FBRWhIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQSxnRkFBZ0Y7QUFDaEY7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixJQUFJO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7O0FBR2xCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0EsTUFBTTs7QUFFTjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTs7QUFFQSxtRUFBbUU7O0FBRW5FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxnREFBZ0Q7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRyxHQUFHO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwwREFBMEQ7QUFDMUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEZBQTRGO0FBQzVGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EscUVBQXFFO0FBQ3JFOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0Isa0JBQWtCO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSwrQkFBK0I7QUFDL0I7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7O0FBR0E7QUFDQSxNQUFNO0FBQ047OztBQUdBLHFCQUFxQixtQkFBbUI7QUFDeEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsMkJBQTJCO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDJCQUEyQjtBQUMvQztBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLHFCQUFxQjtBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBLHNCQUFzQixzQkFBc0I7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDs7QUFFdEQ7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLHl2QkFBeXZCOztBQUV6dkI7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQyx1REFBdUQ7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0IsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSixxQ0FBcUM7QUFDckMsSUFBSTtBQUNKO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkIsV0FBVyxRQUFRO0FBQ25COzs7QUFHQTtBQUNBO0FBQ0EsaUlBQWlJLDhCQUE4QjtBQUMvSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0NBQWtDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0JBQW9CLHNCQUFzQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGlDQUFpQyxJQUFJO0FBQzNDO0FBQ0E7QUFDQSxNQUFNLGlDQUFpQyxJQUFJO0FBQzNDO0FBQ0EsNkRBQTZEO0FBQzdELE1BQU0saUNBQWlDLElBQUk7QUFDM0M7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIsc0JBQXNCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlCQUF5Qix3QkFBd0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsNk5BQTZOO0FBQzdOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLDBDQUEwQzs7O0FBR2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdHQUFnRztBQUNoRzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDBDQUEwQzs7O0FBR2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0tBQWdLLGlCQUFpQjtBQUNqTCxrQkFBa0I7QUFDbEIsZ0tBQWdLLGlCQUFpQix3REFBd0QsbUJBQW1CLGdCQUFnQiwrQkFBK0I7QUFDM1M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwR0FBMEcsR0FBRzs7QUFFN0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxnQkFBZ0I7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFOztBQUV2RTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQiwwQkFBMEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkhBQTJIO0FBQzNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0VBQW9FOztBQUVwRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0YsMkRBQTJEOztBQUUzRCxxREFBcUQ7QUFDckQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQjtBQUNwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTs7QUFFQSwySEFBMkg7QUFDM0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRTtBQUMxRTs7QUFFQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvRUFBb0U7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUMsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQTtBQUNBLHdFQUF3RTtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREOztBQUU1RCwyREFBMkQ7O0FBRTNELCtEQUErRDs7QUFFL0Q7QUFDQSw4REFBOEQ7QUFDOUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHlCQUF5QjtBQUN6Qjs7QUFFQSxrQ0FBa0M7O0FBRWxDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUVBQXlFO0FBQ3pFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFO0FBQ3pFO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0VBQWdFOztBQUVoRTtBQUNBLHVDQUF1QztBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDOztBQUUxQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZOzs7QUFHWjtBQUNBLFVBQVUseUJBQXlCOzs7QUFHbkM7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7OztBQUdWLHdCQUF3QjtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkM7O0FBRTdDOztBQUVBO0FBQ0EsaUNBQWlDO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBLG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7OztBQUdWO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0JBQW9CLDRCQUE0QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQixzQkFBc0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSixrQkFBa0Isa0JBQWtCO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhEQUE4RDtBQUM5RCxxREFBcUQ7QUFDckQsMkRBQTJEO0FBQzNELDJDQUEyQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDOztBQUUvQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3RUFBd0U7QUFDeEU7O0FBRUE7QUFDQSx1TEFBdUw7QUFDdkw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHOztBQUVkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7OztBQUdSOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4SEFBOEgseUNBQXlDO0FBQ3ZLOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0Isd0JBQXdCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLGtEQUFrRDtBQUM3RDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSw2QkFBNkI7QUFDMUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOzs7QUFHTix3RUFBd0U7O0FBRXhFLFdBQVcsNkJBQTZCO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsZUFBZSxhQUFhO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVcsaUNBQWlDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFlBQVk7QUFDekI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOzs7QUFHTix3RUFBd0U7O0FBRXhFLFdBQVcsWUFBWTtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxNQUFNO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUNBQXFDOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUdBQXVHO0FBQ3ZHO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0VBQXdFO0FBQ3hFO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEI7O0FBRTlCLGtDQUFrQztBQUNsQztBQUNBOztBQUVBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUosMEJBQTBCO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUix3QkFBd0IsbUJBQW1CO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRTtBQUNqRTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7O0FBRXRDLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHLEdBQUc7O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEZBQTRGOztBQUU1RjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixzQkFBc0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSwyQkFBMkI7QUFDM0I7O0FBRUEsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQixvREFBb0Q7QUFDcEQ7QUFDQTs7QUFFQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlEOztBQUVqRCx3QkFBd0I7O0FBRXhCO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7O0FBRTFCLGlDQUFpQztBQUNqQztBQUNBOztBQUVBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLDhCQUE4QjtBQUN0RDtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0osa0JBQWtCLDRDQUE0QztBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7O0FBRWxDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBLDREQUE0RDtBQUM1RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRTtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDOztBQUV2QyxrQ0FBa0M7O0FBRWxDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7OztBQUdWOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSwyQ0FBMkM7QUFDakQ7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCLGlGQUFpRjtBQUNqRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtGQUFrRjtBQUNsRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwySUFBMkk7QUFDM0k7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBLGdFQUFnRTtBQUNoRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7O0FBRzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0EseUtBQXlLLDBDQUEwQztBQUNuTjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEO0FBQzdEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1Qzs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhCQUE4Qjs7QUFFOUIsZ0RBQWdEO0FBQ2hEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7QUFFSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGVBQWU7QUFDekIsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnRUFBZ0U7O0FBRWhFO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0osaUdBQWlHO0FBQ2pHLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUNBQXVDOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhJQUE4STs7QUFFOUk7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVixrRUFBa0UsNENBQTRDO0FBQzlHOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QztBQUM3QyxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBLHNEQUFzRDtBQUN0RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUlBQW1JO0FBQ25JO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtSUFBbUk7QUFDbkk7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFFBQVEsSUFBSTtBQUNaO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOzs7QUFHQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQSxpSEFBaUg7QUFDakg7QUFDQTtBQUNBOztBQUVBLHlDQUF5QztBQUN6QztBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQzs7QUFFbkMsOEJBQThCO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsMkNBQTJDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvSEFBb0g7QUFDcEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUEsa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZHQUE2RztBQUM3Rzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsMEVBQTBFOztBQUUxRTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOzs7QUFHTjtBQUNBLElBQUk7QUFDSjs7QUFFQSxrRUFBa0U7QUFDbEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUc7QUFDakc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQzs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEOztBQUVoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTs7O0FBR1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUVBQWlFO0FBQ2pFO0FBQ0EsMkRBQTJEO0FBQzNEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EscUZBQXFGOztBQUVyRjs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkVBQTZFO0FBQzdFOztBQUVBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNEQUFzRDs7QUFFdEQ7QUFDQSxtREFBbUQ7O0FBRW5EO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrREFBa0Q7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzREFBc0Q7QUFDdEQ7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQzs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0EseUVBQXlFOztBQUV6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUVBQXVFOztBQUV2RTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDJDQUEyQzs7QUFFM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQSxpREFBaUQ7O0FBRWpEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdHQUF3RztBQUN4RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQSxzRUFBc0U7O0FBRXRFLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTix5Q0FBeUM7O0FBRXpDO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQSxnRUFBZ0U7O0FBRWhFOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTtBQUNBLElBQUk7QUFDSiwrR0FBK0c7QUFDL0c7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSixnR0FBZ0c7QUFDaEc7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLElBQUk7OztBQUdKLDBFQUEwRTs7QUFFMUU7QUFDQTtBQUNBLDRGQUE0RjtBQUM1Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVHQUF1RztBQUN2Rzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdDQUFnQzs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RTtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EseURBQXlEO0FBQ3pEO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDOztBQUUxQyw0Q0FBNEM7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxnR0FBZ0c7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx5TkFBeU4sR0FBRzs7QUFFNU47QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixZQUFZO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEM7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOzs7QUFHWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0Q7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQSx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDs7QUFFbkQ7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBLE1BQU07QUFDTjs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsMENBQTBDOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7O0FBRUEsZ0RBQWdEO0FBQ2hEOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsNERBQTREO0FBQzVEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7O0FBR0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7O0FBRTdEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRCQUE0Qjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0ZBQXNGOztBQUV0Riw0REFBNEQ7QUFDNUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUEsdUNBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEscUVBQXFFO0FBQzdFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxzREFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdEQUFnRDs7QUFFaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0dBQWtHO0FBQ2xHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9EQUFvRDs7QUFFcEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0Esa0dBQWtHO0FBQ2xHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQzs7QUFFM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBOztBQUVBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7O0FBR2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVOztBQUVWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7O0FBR2hCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxjQUFjOzs7QUFHZDtBQUNBO0FBQ0E7O0FBRUEsc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUEsNEhBQTRIO0FBQzVIOzs7QUFHQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0NBQStDO0FBQy9DOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjs7QUFFQTtBQUNBO0FBQ0EsOENBQThDOztBQUU5QztBQUNBO0FBQ0EsWUFBWTs7O0FBR1o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9FQUFvRTtBQUNwRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpRUFBaUU7QUFDakU7O0FBRUEsOElBQThJOztBQUU5STtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7O0FBRVosVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQSxvRUFBb0U7QUFDcEU7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx3RUFBd0U7O0FBRXhFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdFQUF3RTs7QUFFeEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBOztBQUVBLHNDQUFzQztBQUN0Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0VBQW9FO0FBQ3BFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLGlCQUFpQjs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxlQUFlO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdULHdFQUF3RTs7QUFFeEU7QUFDQSwrREFBK0Q7QUFDL0Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFROzs7QUFHUjs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsR0FBRztBQUNkLFdBQVcsTUFBTTtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFVBQVU7QUFDckIsV0FBVyxHQUFHO0FBQ2QsV0FBVyxNQUFNO0FBQ2pCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7O0FBRXZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7OztBQUdWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Qsa09BQWtPLHFDQUFxQyx3RkFBd0YsMkJBQTJCLHFCQUFxQixRQUFRLGFBQWE7QUFDcGEsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTtBQUNuRTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOzs7QUFHQSwyREFBMkQ7QUFDM0Q7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTs7QUFFVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0U7QUFDdEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0VBQXNFO0FBQ3RFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsUUFBUSw0SUFBNEk7QUFDcEo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCOztBQUUxQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOzs7QUFHQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7O0FBRUE7QUFDQTtBQUNBLFVBQVU7O0FBRVY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7O0FBRUEsb0RBQW9EO0FBQ3BEOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUksMkRBQTJEO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJLDJEQUEyRDtBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsVUFBVTs7QUFFVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7O0FBRVY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsZ0RBQWdEO0FBQ2hELFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixzQkFBc0I7QUFDMUM7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTs7QUFFVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTs7QUFFQTtBQUNBLDRDQUE0Qzs7QUFFNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBLHdEQUF3RDs7QUFFeEQsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzR0FBc0c7QUFDdEc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7OztBQUdaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3QjtBQUN4QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0R0FBNEc7O0FBRTVHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNEdBQTRHOztBQUU1Rzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0R0FBNEc7QUFDNUc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRHQUE0Rzs7QUFFNUc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRHQUE0RztBQUM1Rzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0I7QUFDeEI7QUFDQSxVQUFVOzs7QUFHVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1SUFBdUk7O0FBRXZJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsOERBQThEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0lBQXdJOztBQUV4STtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0pBQW9KOztBQUVwSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDOztBQUUxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0I7QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscURBQXFEOztBQUVyRDtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLHNCQUFzQjtBQUM1QywwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMENBQTBDOztBQUUxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLHNCQUFzQjtBQUM1QywwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMENBQTBDOztBQUUxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRkFBcUY7QUFDckY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQ7QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1QixrQ0FBa0M7O0FBRWxDLCtCQUErQjs7QUFFL0IsMkJBQTJCOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7O0FBRUEscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQzs7QUFFcEMsbURBQW1EOztBQUVuRCx5Q0FBeUM7QUFDekM7O0FBRUEsOENBQThDOztBQUU5Qyx5REFBeUQ7O0FBRXpELDZDQUE2Qzs7QUFFN0MseUNBQXlDOztBQUV6QywrQ0FBK0M7QUFDL0M7O0FBRUEsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQzs7QUFFQSxtREFBbUQ7QUFDbkQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKOztBQUVBO0FBQ0EsOEVBQThFO0FBQzlFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQSx1Q0FBdUM7O0FBRXZDO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtHQUErRztBQUMvRztBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQSxrRUFBa0U7QUFDbEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLDBGQUEwRjs7QUFFMUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQSw2Q0FBNkM7QUFDN0M7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCLG1CQUFtQjtBQUM3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsZ0hBQWdIO0FBQ2hIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSiw2Q0FBNkM7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUksY0FBYztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixJQUFJO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjs7O0FBR2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsS0FBSTtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0EsNkNBQTZDOztBQUU3Qyx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLHlFQUF5RTs7QUFFekU7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQSxpQ0FBaUM7O0FBRWpDO0FBQ0EsSUFBSSxnQ0FBZ0M7OztBQUdwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7O0FBRUEsb0RBQW9EOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0EsdUVBQXVFOztBQUV2RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0Esa0NBQWtDOztBQUVsQztBQUNBLElBQUksaUNBQWlDOzs7QUFHckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLDRDQUE0QztBQUNoRDs7O0FBR0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQSxnRkFBZ0Y7QUFDaEYsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkMsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUEsd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0osc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsOEJBQThCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLElBQUk7OztBQUdKLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qyw2Q0FBNkM7QUFDM0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUVBQXFFOztBQUVyRTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDRCQUE0QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvREFBb0Q7O0FBRXBEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCOztBQUUxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBLGtEQUFrRDs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1IQUFtSDs7QUFFbkg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLEdBQUc7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4TEFBOEwsb0RBQW9ELEVBQUU7QUFDcFAsUUFBUTtBQUNSO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1PQUFtTyxvREFBb0QsRUFBRTtBQUN6UjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdEOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQyxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSixnREFBZ0Q7O0FBRWhELHdDQUF3QztBQUN4Qzs7QUFFQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEOztBQUVsRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEOztBQUV0RCx3Q0FBd0M7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd05BQXdOOztBQUV4Tiw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwwRUFBMEU7QUFDMUU7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUyxHQUFHO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Q7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0RBQXdEOztBQUV4RDtBQUNBLG1DQUFtQzs7QUFFbkM7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOLHNCQUFzQix3QkFBd0I7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0RBQXdELFFBQVE7O0FBRWhFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7QUFDckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7QUFDckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7QUFDckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFlBQVksV0FBVztBQUN2Qjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEMsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQztBQUNqQyxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUIsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RDs7QUFFOUQ7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEM7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlDQUF5QztBQUN6QztBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxRQUFRO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdDQUFnQztBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHVDQUF1QztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCOztBQUV4QjtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQSwwRUFBMEU7QUFDMUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUywyQ0FBMkM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsK0JBQStCO0FBQ2pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFOztBQUUvRTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQiwyQ0FBMkM7QUFDN0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLGdDQUFnQztBQUN2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7O0FBR1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEVBQTRFOztBQUU1RSxxQkFBcUI7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7O0FBR0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsZ0JBQWdCLGVBQWU7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0EsZ0ZBQWdGO0FBQ2hGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBLFlBQVksU0FBUztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVksU0FBUztBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnSEFBZ0g7QUFDaEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHdCQUF3QjtBQUNuQyxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3QkFBd0I7QUFDbkMsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsUUFBUTtBQUNuQixZQUFZO0FBQ1o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFlBQVk7QUFDdkIsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DLFdBQVcsUUFBUTtBQUNuQjs7QUFFQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtFQUErRTtBQUMvRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtDQUErQztBQUMvQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixhQUFhO0FBQ2I7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixvQ0FBb0M7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkdBQTJHO0FBQzNHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRiwyVEFBMlQ7QUFDM1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0oscUJBQXFCLCtCQUErQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQiwwQkFBMEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFO0FBQ3hFLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEdBQTBHO0FBQzFHOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBLHFDQUFxQzs7O0FBR3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQixPQUFPO0FBQ2pDO0FBQ0E7O0FBRUE7O0FBRUEsMEJBQTBCLE9BQU87QUFDakM7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUlBQWlJLG1CQUFtQixnQkFBZ0IsK0JBQStCO0FBQ25NLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRixZQUFZO0FBQy9GOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRkFBbUYsWUFBWTtBQUMvRjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUNBQXFDOztBQUVyQztBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qiw0QkFBNEI7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpSUFBaUksOEJBQThCO0FBQy9KOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSix5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0oseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0oseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0oseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyREFBMkQ7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0RBQWdEOztBQUVoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiw0QkFBNEI7QUFDbEQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7OztBQUdBLHdEQUF3RDtBQUN4RDs7QUFFQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7OztBQUdBLHdEQUF3RDtBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQix3QkFBd0I7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNEQUFzRDtBQUN0RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFtQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnREFBZ0Q7O0FBRWhEO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQSxJQUFJLGNBQWM7QUFDbEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJLE9BQU87OztBQUdYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5RUFBeUU7QUFDekU7QUFDQTtBQUNBLFFBQVE7O0FBRVIsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsbUZBQW1GO0FBQ25GO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU0sdUNBQXVDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkdBQTZHO0FBQzdHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUyxjQUFjO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7O0FBRUEscUNBQXFDO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOzs7QUFHSjtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSwrQ0FBK0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLCtDQUErQztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsK0NBQStDO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9NQUFvTTtBQUNwTTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxtTUFBbU07QUFDbk07QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7O0FBRTFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFlBQVk7OztBQUduQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sWUFBWTs7O0FBR25COztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0Q7QUFDL0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDs7QUFFdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7OztBQUdaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZEQUE2RDs7O0FBRzdEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQSxZQUFZOzs7QUFHWjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isa0JBQWtCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMEJBQTBCLGtCQUFrQjtBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsMkJBQTJCLG9CQUFvQjtBQUMvQyxvQ0FBb0M7QUFDcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQSxrQkFBa0Isa0JBQWtCO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsb0lBQW9JLEtBQUssYUFBYSxLQUFLO0FBQzNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsc0lBQXNJLEtBQUssYUFBYSxLQUFLO0FBQzdKLGdCQUFnQjtBQUNoQiwwRkFBMEYsS0FBSztBQUMvRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDs7QUFFcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxVQUFVOztBQUVqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixrQkFBa0I7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTs7O0FBR0osb0NBQW9DOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxnTEFBZ0wsOEJBQThCO0FBQzlNO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDs7QUFFcEQ7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbURBQW1EOztBQUVuRCx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUdBQXVHOztBQUV2RztBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsd0dBQXdHOzs7QUFHeEcsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxHQUFHO0FBQ1I7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQSw4RUFBOEU7O0FBRTlFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwREFBMEQ7QUFDMUQsb0JBQW9CO0FBQ3BCLGtCQUFrQjtBQUNsQixtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCLGVBQWU7QUFDZixtQkFBbUI7QUFDbkIsa0JBQWtCO0FBQ2xCLG1CQUFtQjtBQUNuQixlQUFlO0FBQ2YscUJBQXFCO0FBQ3JCLGVBQWU7QUFDZixxQkFBcUI7QUFDckIsY0FBYztBQUNkLDhCQUE4QjtBQUM5QiwrQkFBK0I7QUFDL0IsMkNBQTJDO0FBQzNDLG9CQUFvQjtBQUNwQixxQkFBcUI7QUFDckIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzP2EwODEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgJ3VzZSBzdHJpY3QnO1xuXG4vKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ID09PVxuICAgICdmdW5jdGlvbidcbikge1xuICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KG5ldyBFcnJvcigpKTtcbn1cbiAgICAgICAgICB2YXIgUmVhY3QgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0XCIpO1xudmFyIFNjaGVkdWxlciA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvc2NoZWR1bGVyXCIpO1xuXG52YXIgSW50ZXJuYWxzID0ge1xuICB1c2luZ0NsaWVudEVudHJ5UG9pbnQ6IGZhbHNlLFxuICBFdmVudHM6IG51bGwsXG4gIERpc3BhdGNoZXI6IHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH1cbn07XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuXG52YXIgc3VwcHJlc3NXYXJuaW5nID0gZmFsc2U7XG5mdW5jdGlvbiBzZXRTdXBwcmVzc1dhcm5pbmcobmV3U3VwcHJlc3NXYXJuaW5nKSB7XG4gIHtcbiAgICBzdXBwcmVzc1dhcm5pbmcgPSBuZXdTdXBwcmVzc1dhcm5pbmc7XG4gIH1cbn0gLy8gSW4gREVWLCBjYWxscyB0byBjb25zb2xlLndhcm4gYW5kIGNvbnNvbGUuZXJyb3IgZ2V0IHJlcGxhY2VkXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBpZiAoIXN1cHByZXNzV2FybmluZykge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAgaWYgKCFzdXBwcmVzc1dhcm5pbmcpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuXG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIFN0cmluZyhpdGVtKTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gS2lsbHN3aXRjaFxuLy9cbi8vIEZsYWdzIHRoYXQgZXhpc3Qgc29sZWx5IHRvIHR1cm4gb2ZmIGEgY2hhbmdlIGluIGNhc2UgaXQgY2F1c2VzIGEgcmVncmVzc2lvblxuLy8gd2hlbiBpdCByb2xscyBvdXQgdG8gcHJvZC4gV2Ugc2hvdWxkIHJlbW92ZSB0aGVzZSBhcyBzb29uIGFzIHBvc3NpYmxlLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMYW5kIG9yIHJlbW92ZSAobW9kZXJhdGUgZWZmb3J0KVxuLy9cbi8vIEZsYWdzIHRoYXQgY2FuIGJlIHByb2JhYmx5IGRlbGV0ZWQgb3IgbGFuZGVkLCBidXQgbWlnaHQgcmVxdWlyZSBleHRyYSBlZmZvcnRcbi8vIGxpa2UgbWlncmF0aW5nIGludGVybmFsIGNhbGxlcnMgb3IgcGVyZm9ybWFuY2UgdGVzdGluZy5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUT0RPOiBGaW5pc2ggcm9sbGluZyBvdXQgaW4gd3d3XG5cbnZhciBlbmFibGVDbGllbnRSZW5kZXJGYWxsYmFja09uVGV4dE1pc21hdGNoID0gdHJ1ZTtcbnZhciBlbmFibGVGb3JtQWN0aW9ucyA9IHRydWU7XG52YXIgZW5hYmxlQXN5bmNBY3Rpb25zID0gdHJ1ZTsgLy8gTm90IHN1cmUgaWYgd3d3IHN0aWxsIHVzZXMgdGhpcy4gV2UgZG9uJ3QgaGF2ZSBhIHJlcGxhY2VtZW50IGJ1dCB3aGF0ZXZlciB3ZVxuLy8gU2xhdGVkIGZvciByZW1vdmFsIGluIHRoZSBmdXR1cmUgKHNpZ25pZmljYW50IGVmZm9ydClcbi8vXG4vLyBUaGVzZSBhcmUgZXhwZXJpbWVudHMgdGhhdCBkaWRuJ3Qgd29yayBvdXQsIGFuZCBuZXZlciBzaGlwcGVkLCBidXQgd2UgY2FuJ3Rcbi8vIGRlbGV0ZSBmcm9tIHRoZSBjb2RlYmFzZSB1bnRpbCB3ZSBtaWdyYXRlIGludGVybmFsIGNhbGxlcnMuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQWRkIGEgY2FsbGJhY2sgcHJvcGVydHkgdG8gc3VzcGVuc2UgdG8gbm90aWZ5IHdoaWNoIHByb21pc2VzIGFyZSBjdXJyZW50bHlcbi8vIGluIHRoZSB1cGRhdGUgcXVldWUuIFRoaXMgYWxsb3dzIHJlcG9ydGluZyBhbmQgdHJhY2luZyBvZiB3aGF0IGlzIGNhdXNpbmdcbi8vIHRoZSB1c2VyIHRvIHNlZSBhIGxvYWRpbmcgc3RhdGUuXG4vL1xuLy8gQWxzbyBhbGxvd3MgaHlkcmF0aW9uIGNhbGxiYWNrcyB0byBmaXJlIHdoZW4gYSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGdldHNcbi8vIGh5ZHJhdGVkIG9yIGRlbGV0ZWQuXG4vL1xuLy8gVGhpcyB3aWxsIGV2ZW50dWFsbHkgYmUgcmVwbGFjZWQgYnkgdGhlIFRyYW5zaXRpb24gVHJhY2luZyBwcm9wb3NhbC5cblxudmFyIGVuYWJsZVN1c3BlbnNlQ2FsbGJhY2sgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIFNjb3BlIHN1cHBvcnQuXG5cbnZhciBlbmFibGVMYXp5Q29udGV4dFByb3BhZ2F0aW9uID0gZmFsc2U7IC8vIEZCLW9ubHkgdXNhZ2UuIFRoZSBuZXcgQVBJIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzLlxuXG52YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7IC8vIEVuYWJsZXMgdW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgZmVhdHVyZSBpbiBGaWJlclxudmFyIGFsd2F5c1Rocm90dGxlUmV0cmllcyA9IHRydWU7XG52YXIgc3luY0xhbmVFeHBpcmF0aW9uTXMgPSAyNTA7XG52YXIgdHJhbnNpdGlvbkxhbmVFeHBpcmF0aW9uTXMgPSA1MDAwOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hvcHBpbmcgQmxvY2tcbi8vXG4vLyBQbGFubmVkIGZlYXR1cmUgZGVwcmVjYXRpb25zIGFuZCBicmVha2luZyBjaGFuZ2VzLiBTb3J0ZWQgcm91Z2hseSBpbiBvcmRlciBvZlxuLy8gd2hlbiB3ZSBwbGFuIHRvIGVuYWJsZSB0aGVtLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoaXMgZmxhZyBlbmFibGVzIFN0cmljdCBFZmZlY3RzIGJ5IGRlZmF1bHQuIFdlJ3JlIG5vdCB0dXJuaW5nIHRoaXMgb24gdW50aWxcbi8vIGFmdGVyIDE4IGJlY2F1c2UgaXQgcmVxdWlyZXMgbWlncmF0aW9uIHdvcmsuIFJlY29tbWVuZGF0aW9uIGlzIHRvIHVzZVxuLy8gPFN0cmljdE1vZGUgLz4gdG8gZ3JhZHVhbGx5IHVwZ3JhZGUgY29tcG9uZW50cy5cbi8vIElmIFRSVUUsIHRyZWVzIHJlbmRlcmVkIHdpdGggY3JlYXRlUm9vdCB3aWxsIGJlIFN0cmljdEVmZmVjdHNNb2RlLlxuLy8gSWYgRkFMU0UsIHRoZXNlIHRyZWVzIHdpbGwgYmUgU3RyaWN0TGVnYWN5TW9kZS5cblxudmFyIGNyZWF0ZVJvb3RTdHJpY3RFZmZlY3RzQnlEZWZhdWx0ID0gZmFsc2U7XG4vLyBSZWFjdCBET00gQ2hvcHBpbmcgQmxvY2tcbi8vXG4vLyBTaW1pbGFyIHRvIG1haW4gQ2hvcHBpbmcgQmxvY2sgYnV0IG9ubHkgZmxhZ3MgcmVsYXRlZCB0byBSZWFjdCBET00uIFRoZXNlIGFyZVxuLy8gZ3JvdXBlZCBiZWNhdXNlIHdlIHdpbGwgbGlrZWx5IGJhdGNoIGFsbCBvZiB0aGVtIGludG8gYSBzaW5nbGUgbWFqb3IgcmVsZWFzZS5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBEaXNhYmxlIHN1cHBvcnQgZm9yIGNvbW1lbnQgbm9kZXMgYXMgUmVhY3QgRE9NIGNvbnRhaW5lcnMuIEFscmVhZHkgZGlzYWJsZWRcbi8vIGluIG9wZW4gc291cmNlLCBidXQgd3d3IGNvZGViYXNlIHN0aWxsIHJlbGllcyBvbiBpdC4gTmVlZCB0byByZW1vdmUuXG5cbnZhciBkaXNhYmxlQ29tbWVudHNBc0RPTUNvbnRhaW5lcnMgPSB0cnVlOyAvLyBEaXNhYmxlIGphdmFzY3JpcHQ6IFVSTCBzdHJpbmdzIGluIGhyZWYgZm9yIFhTUyBwcm90ZWN0aW9uLlxuLy8gRGVidWdnaW5nIGFuZCBEZXZUb29sc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFkZHMgdXNlciB0aW1pbmcgbWFya3MgZm9yIGUuZy4gc3RhdGUgdXBkYXRlcywgc3VzcGVuc2UsIGFuZCB3b3JrIGxvb3Agc3R1ZmYsXG4vLyBmb3IgYW4gZXhwZXJpbWVudGFsIHRpbWVsaW5lIHRvb2wuXG5cbnZhciBlbmFibGVTY2hlZHVsaW5nUHJvZmlsZXIgPSB0cnVlOyAvLyBIZWxwcyBpZGVudGlmeSBzaWRlIGVmZmVjdHMgaW4gcmVuZGVyLXBoYXNlIGxpZmVjeWNsZSBob29rcyBhbmQgc2V0U3RhdGVcblxudmFyIGVuYWJsZVByb2ZpbGVyVGltZXIgPSB0cnVlOyAvLyBSZWNvcmQgZHVyYXRpb25zIGZvciBjb21taXQgYW5kIHBhc3NpdmUgZWZmZWN0cyBwaGFzZXMuXG5cbnZhciBlbmFibGVQcm9maWxlckNvbW1pdEhvb2tzID0gdHJ1ZTsgLy8gUGhhc2UgcGFyYW0gcGFzc2VkIHRvIG9uUmVuZGVyIGNhbGxiYWNrIGRpZmZlcmVudGlhdGVzIGJldHdlZW4gYW4gXCJ1cGRhdGVcIiBhbmQgYSBcImNhc2NhZGluZy11cGRhdGVcIi5cblxudmFyIGVuYWJsZVByb2ZpbGVyTmVzdGVkVXBkYXRlUGhhc2UgPSB0cnVlOyAvLyBBZGRzIHZlcmJvc2UgY29uc29sZSBsb2dnaW5nIGZvciBlLmcuIHN0YXRlIHVwZGF0ZXMsIHN1c3BlbnNlLCBhbmQgd29yayBsb29wXG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDMgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyOyAvLyBTaW5jZSB0aGUgXCJub3QgcGVuZGluZ1wiIHZhbHVlIGlzIGFsd2F5cyB0aGUgc2FtZSwgd2UgY2FuIHJldXNlIHRoZVxuLy8gc2FtZSBvYmplY3QgYWNyb3NzIGFsbCB0cmFuc2l0aW9ucy5cblxudmFyIHNoYXJlZE5vdFBlbmRpbmdPYmplY3QgPSB7XG4gIHBlbmRpbmc6IGZhbHNlLFxuICBkYXRhOiBudWxsLFxuICBtZXRob2Q6IG51bGwsXG4gIGFjdGlvbjogbnVsbFxufTtcbnZhciBOb3RQZW5kaW5nID0gT2JqZWN0LmZyZWV6ZShzaGFyZWROb3RQZW5kaW5nT2JqZWN0KSA7XG5cbmZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICAvLyBDb3BpZWQgZnJvbSByZWFjdC9zcmMvUmVhY3RIb29rcy5qcy4gSXQncyB0aGUgc2FtZSB0aGluZyBidXQgaW4gYVxuICAvLyBkaWZmZXJlbnQgcGFja2FnZS5cbiAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDMuY3VycmVudDtcblxuICB7XG4gICAgaWYgKGRpc3BhdGNoZXIgPT09IG51bGwpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yJyArICcgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4nICsgJzEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbicgKyAnMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbicgKyAnMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcbicgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uJyk7XG4gICAgfVxuICB9IC8vIFdpbGwgcmVzdWx0IGluIGEgbnVsbCBhY2Nlc3MgZXJyb3IgaWYgYWNjZXNzZWQgb3V0c2lkZSByZW5kZXIgcGhhc2UuIFdlXG4gIC8vIGludGVudGlvbmFsbHkgZG9uJ3QgdGhyb3cgb3VyIG93biBlcnJvciBiZWNhdXNlIHRoaXMgaXMgaW4gYSBob3QgcGF0aC5cbiAgLy8gQWxzbyBoZWxwcyBlbnN1cmUgdGhpcyBpcyBpbmxpbmVkLlxuXG5cbiAgcmV0dXJuIGRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHVzZUZvcm1TdGF0dXMoKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7IC8vICRGbG93Rml4TWVbbm90LWEtZnVuY3Rpb25dIFdlIGtub3cgdGhpcyBleGlzdHMgYmVjYXVzZSBvZiB0aGUgZmVhdHVyZSBjaGVjayBhYm92ZS5cblxuICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHVzZUZvcm1TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7IC8vICRGbG93Rml4TWVbbm90LWEtZnVuY3Rpb25dIFRoaXMgaXMgdW5zdGFibGUsIHRodXMgb3B0aW9uYWxcblxuICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZUZvcm1TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKTtcbiAgfVxufVxuXG52YXIgdmFsdWVTdGFjayA9IFtdO1xudmFyIGZpYmVyU3RhY2s7XG5cbntcbiAgZmliZXJTdGFjayA9IFtdO1xufVxuXG52YXIgaW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY3JlYXRlQ3Vyc29yKGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQ6IGRlZmF1bHRWYWx1ZVxuICB9O1xufVxuXG5mdW5jdGlvbiBwb3AoY3Vyc29yLCBmaWJlcikge1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAge1xuICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgcG9wLicpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICBpZiAoZmliZXIgIT09IGZpYmVyU3RhY2tbaW5kZXhdKSB7XG4gICAgICBlcnJvcignVW5leHBlY3RlZCBGaWJlciBwb3BwZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZVN0YWNrW2luZGV4XTtcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IG51bGw7XG4gIH1cblxuICBpbmRleC0tO1xufVxuXG5mdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUsIGZpYmVyKSB7XG4gIGluZGV4Kys7XG4gIHZhbHVlU3RhY2tbaW5kZXhdID0gY3Vyc29yLmN1cnJlbnQ7XG5cbiAge1xuICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gZmliZXI7XG4gIH1cblxuICBjdXJzb3IuY3VycmVudCA9IHZhbHVlO1xufVxuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc2VydmVyX2NvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKTtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbnZhciBSRUFDVF9DQUNIRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY2FjaGUnKTtcbnZhciBSRUFDVF9UUkFDSU5HX01BUktFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QudHJhY2luZ19tYXJrZXInKTtcbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIGNvbnRleHRTdGFja0N1cnNvciQxID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xudmFyIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xudmFyIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpOyAvLyBSZXByZXNlbnRzIHRoZSBuZWFyZXN0IGhvc3QgdHJhbnNpdGlvbiBwcm92aWRlciAoaW4gUmVhY3QgRE9NLCBhIDxmb3JtIC8+KVxuLy8gTk9URTogU2luY2UgZm9ybXMgY2Fubm90IGJlIG5lc3RlZCwgYW5kIHRoaXMgZmVhdHVyZSBpcyBvbmx5IGltcGxlbWVudGVkIGJ5XG4vLyBSZWFjdCBET00sIHdlIGRvbid0IHRlY2huaWNhbGx5IG5lZWQgdGhpcyB0byBiZSBhIHN0YWNrLiBJdCBjb3VsZCBiZSBhIHNpbmdsZVxuLy8gbW9kdWxlIHZhcmlhYmxlIGluc3RlYWQuXG5cbnZhciBob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpOyAvLyBUT0RPOiBUaGlzIHNob3VsZCBpbml0aWFsaXplIHRvIE5vdFBlbmRpbmdUcmFuc2l0aW9uLCBhIGNvbnN0YW50XG4vLyBpbXBvcnRlZCBmcm9tIHRoZSBmaWJlciBjb25maWcuIEhvd2V2ZXIsIGJlY2F1c2Ugb2YgYSBjeWNsZSBpbiB0aGUgbW9kdWxlXG4vLyBncmFwaCwgdGhhdCB2YWx1ZSBpc24ndCBkZWZpbmVkIGR1cmluZyB0aGlzIG1vZHVsZSdzIGluaXRpYWxpemF0aW9uLiBJIGNhbid0XG4vLyB0aGluayBvZiBhIHdheSB0byB3b3JrIGFyb3VuZCB0aGlzIHdpdGhvdXQgbW92aW5nIHRoYXQgdmFsdWUgb3V0IG9mIHRoZVxuLy8gZmliZXIgY29uZmlnLiBGb3Igbm93LCB0aGUgXCJubyBwcm92aWRlclwiIGNhc2UgaXMgaGFuZGxlZCB3aGVuIHJlYWRpbmcsXG4vLyBpbnNpZGUgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMuXG5cbnZhciBIb3N0VHJhbnNpdGlvbkNvbnRleHQgPSB7XG4gICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gIF9jdXJyZW50VmFsdWU6IG51bGwsXG4gIF9jdXJyZW50VmFsdWUyOiBudWxsLFxuICBfdGhyZWFkQ291bnQ6IDAsXG4gIFByb3ZpZGVyOiBudWxsLFxuICBDb25zdW1lcjogbnVsbCxcbiAgX2RlZmF1bHRWYWx1ZTogbnVsbCxcbiAgX2dsb2JhbE5hbWU6IG51bGxcbn07XG5cbmZ1bmN0aW9uIHJlcXVpcmVkQ29udGV4dChjKSB7XG4gIHtcbiAgICBpZiAoYyA9PT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGhvc3QgY29udGV4dCB0byBleGlzdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnICcgKyAnaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50Um9vdEhvc3RDb250YWluZXIoKSB7XG4gIHJldHVybiByb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50O1xufVxuXG5mdW5jdGlvbiBnZXRSb290SG9zdENvbnRhaW5lcigpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgcmV0dXJuIHJvb3RJbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RDb250YWluZXIoZmliZXIsIG5leHRSb290SW5zdGFuY2UpIHtcbiAgLy8gUHVzaCBjdXJyZW50IHJvb3QgaW5zdGFuY2Ugb250byB0aGUgc3RhY2s7XG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHJlc2V0IHJvb3Qgd2hlbiBwb3J0YWxzIGFyZSBwb3BwZWQuXG4gIHB1c2gocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIG5leHRSb290SW5zdGFuY2UsIGZpYmVyKTsgLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTsgLy8gRmluYWxseSwgd2UgbmVlZCB0byBwdXNoIHRoZSBob3N0IGNvbnRleHQgdG8gdGhlIHN0YWNrLlxuICAvLyBIb3dldmVyLCB3ZSBjYW4ndCBqdXN0IGNhbGwgZ2V0Um9vdEhvc3RDb250ZXh0KCkgYW5kIHB1c2ggaXQgYmVjYXVzZVxuICAvLyB3ZSdkIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVudHJpZXMgb24gdGhlIHN0YWNrIGRlcGVuZGluZyBvblxuICAvLyB3aGV0aGVyIGdldFJvb3RIb3N0Q29udGV4dCgpIHRocm93cyBzb21ld2hlcmUgaW4gcmVuZGVyZXIgY29kZSBvciBub3QuXG4gIC8vIFNvIHdlIHB1c2ggYW4gZW1wdHkgdmFsdWUgZmlyc3QuIFRoaXMgbGV0cyB1cyBzYWZlbHkgdW53aW5kIG9uIGVycm9ycy5cblxuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBudWxsLCBmaWJlcik7XG4gIHZhciBuZXh0Um9vdENvbnRleHQgPSBnZXRSb290SG9zdENvbnRleHQobmV4dFJvb3RJbnN0YW5jZSk7IC8vIE5vdyB0aGF0IHdlIGtub3cgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHRocm93LCByZXBsYWNlIGl0LlxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBuZXh0Um9vdENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRhaW5lcihmaWJlcikge1xuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIHBvcChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0Q29udGV4dCgpIHtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIHZhciBzdGF0ZUhvb2sgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHN0YXRlSG9vayAhPT0gbnVsbCkge1xuICAgICAgLy8gT25seSBwcm92aWRlIGNvbnRleHQgaWYgdGhpcyBmaWJlciBoYXMgYmVlbiB1cGdyYWRlZCBieSBhIGhvc3RcbiAgICAgIC8vIHRyYW5zaXRpb24uIFdlIHVzZSB0aGUgc2FtZSBvcHRpbWl6YXRpb24gZm9yIHJlZ3VsYXIgaG9zdCBjb250ZXh0IGJlbG93LlxuICAgICAgcHVzaChob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yLCBmaWJlciwgZmliZXIpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpO1xuICB2YXIgbmV4dENvbnRleHQgPSBnZXRDaGlsZEhvc3RDb250ZXh0KGNvbnRleHQsIGZpYmVyLnR5cGUpOyAvLyBEb24ndCBwdXNoIHRoaXMgRmliZXIncyBjb250ZXh0IHVubGVzcyBpdCdzIHVuaXF1ZS5cblxuICBpZiAoY29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gICAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuICAgIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dENvbnRleHQsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BIb3N0Q29udGV4dChmaWJlcikge1xuICBpZiAoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IuY3VycmVudCA9PT0gZmliZXIpIHtcbiAgICAvLyBEbyBub3QgcG9wIHVubGVzcyB0aGlzIEZpYmVyIHByb3ZpZGVkIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gICAgLy8gcHVzaEhvc3RDb250ZXh0KCkgb25seSBwdXNoZXMgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIH1cblxuICB7XG4gICAgaWYgKGhvc3RUcmFuc2l0aW9uUHJvdmlkZXJDdXJzb3IuY3VycmVudCA9PT0gZmliZXIpIHtcbiAgICAgIC8vIERvIG5vdCBwb3AgdW5sZXNzIHRoaXMgRmliZXIgcHJvdmlkZWQgdGhlIGN1cnJlbnQgY29udGV4dC4gVGhpcyBpcyBtb3N0bHlcbiAgICAgIC8vIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBidXQgY29udmVuaWVudGx5IGl0IGFsc28gcHJldmVudHMgYSBwb3RlbnRpYWxcbiAgICAgIC8vIGRhdGEgcmFjZSB3aGVyZSBhIGhvc3QgcHJvdmlkZXIgaXMgdXBncmFkZWQgKGkuZS4gbWVtb2l6ZWRTdGF0ZSBiZWNvbWVzXG4gICAgICAvLyBub24tbnVsbCkgZHVyaW5nIGEgY29uY3VycmVudCBldmVudC4gVGhpcyBpcyBhIGJpdCBvZiBhIGZsYXcgaW4gdGhlIHdheVxuICAgICAgLy8gd2UgdXBncmFkZSBob3N0IGNvbXBvbmVudHMsIGJ1dCBiZWNhdXNlIHdlJ3JlIGFjY291bnRpbmcgZm9yIGl0IGhlcmUsIGl0XG4gICAgICAvLyBzaG91bGQgYmUgZmluZS5cbiAgICAgIHBvcChob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yLCBmaWJlcik7IC8vIFdoZW4gcG9wcGluZyB0aGUgdHJhbnNpdGlvbiBwcm92aWRlciwgd2UgcmVzZXQgdGhlIGNvbnRleHQgdmFsdWUgYmFja1xuICAgICAgLy8gdG8gYG51bGxgLiBXZSBjYW4gZG8gdGhpcyBiZWNhdXNlIHlvdSdyZSBub3QgYWxsb3dkIHRvIG5lc3QgZm9ybXMuIElmXG4gICAgICAvLyB3ZSBhbGxvd2VkIGZvciBtdWx0aXBsZSBuZXN0ZWQgaG9zdCB0cmFuc2l0aW9uIHByb3ZpZGVycywgdGhlbiB3ZSdkXG4gICAgICAvLyBuZWVkIHRvIHJlc2V0IHRoaXMgdG8gdGhlIHBhcmVudCBwcm92aWRlcidzIHN0YXR1cy5cblxuICAgICAge1xuICAgICAgICBIb3N0VHJhbnNpdGlvbkNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBOb0ZsYWdzJDEgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgUGVyZm9ybWVkV29yayA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMTtcbnZhciBQbGFjZW1lbnQgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yO1xudmFyIERpZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjEyODtcbnZhciBIeWRyYXRpbmcgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG40MDk2OyAvLyBZb3UgY2FuIGNoYW5nZSB0aGUgcmVzdCAoYW5kIGFkZCBtb3JlKS5cblxudmFyIFVwZGF0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQ7XG4vKiBTa2lwcGVkIHZhbHVlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDsgKi9cblxudmFyIENoaWxkRGVsZXRpb24gPVxuLyogICAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIENvbnRlbnRSZXNldCA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIENhbGxiYWNrID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjY0O1xuLyogVXNlZCBieSBEaWRDYXB0dXJlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDA7ICovXG5cbnZhciBGb3JjZUNsaWVudFJlbmRlciA9XG4vKiAgICAgICAgICAgICovXG4yNTY7XG52YXIgUmVmID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuNTEyO1xudmFyIFNuYXBzaG90ID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjEwMjQ7XG52YXIgUGFzc2l2ZSQxID1cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG4yMDQ4O1xuLyogVXNlZCBieSBIeWRyYXRpbmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwYjAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDA7ICovXG5cbnZhciBWaXNpYmlsaXR5ID1cbi8qICAgICAgICAgICAgICAgICAgICovXG44MTkyO1xudmFyIFN0b3JlQ29uc2lzdGVuY3kgPVxuLyogICAgICAgICAgICAgKi9cbjE2Mzg0OyAvLyBJdCdzIE9LIHRvIHJldXNlIHRoZXNlIGJpdHMgYmVjYXVzZSB0aGVzZSBmbGFncyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGZvclxuLy8gZGlmZmVyZW50IGZpYmVyIHR5cGVzLiBXZSBzaG91bGQgcmVhbGx5IGJlIGRvaW5nIHRoaXMgZm9yIGFzIG1hbnkgZmxhZ3MgYXNcbi8vIHBvc3NpYmxlLCBiZWNhdXNlIHdlJ3JlIGFib3V0IHRvIHJ1biBvdXQgb2YgYml0cy5cblxudmFyIFNjaGVkdWxlUmV0cnkgPSBTdG9yZUNvbnNpc3RlbmN5O1xudmFyIFNob3VsZFN1c3BlbmRDb21taXQgPSBWaXNpYmlsaXR5O1xudmFyIERpZERlZmVyID0gQ29udGVudFJlc2V0O1xudmFyIExpZmVjeWNsZUVmZmVjdE1hc2sgPSBQYXNzaXZlJDEgfCBVcGRhdGUgfCBDYWxsYmFjayB8IFJlZiB8IFNuYXBzaG90IHwgU3RvcmVDb25zaXN0ZW5jeTsgLy8gVW5pb24gb2YgYWxsIGNvbW1pdCBmbGFncyAoZmxhZ3Mgd2l0aCB0aGUgbGlmZXRpbWUgb2YgYSBwYXJ0aWN1bGFyIGNvbW1pdClcblxudmFyIEhvc3RFZmZlY3RNYXNrID1cbi8qICAgICAgICAgICAgICAgKi9cbjMyNzY3OyAvLyBUaGVzZSBhcmUgbm90IHJlYWxseSBzaWRlIGVmZmVjdHMsIGJ1dCB3ZSBzdGlsbCByZXVzZSB0aGlzIGZpZWxkLlxuXG52YXIgSW5jb21wbGV0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMzI3Njg7XG52YXIgU2hvdWxkQ2FwdHVyZSA9XG4vKiAgICAgICAgICAgICAgICAqL1xuNjU1MzY7XG52YXIgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSA9XG4vKiAqL1xuMTMxMDcyO1xudmFyIEZvcmtlZCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEwNDg1NzY7IC8vIFN0YXRpYyB0YWdzIGRlc2NyaWJlIGFzcGVjdHMgb2YgYSBmaWJlciB0aGF0IGFyZSBub3Qgc3BlY2lmaWMgdG8gYSByZW5kZXIsXG4vLyBlLmcuIGEgZmliZXIgdXNlcyBhIHBhc3NpdmUgZWZmZWN0IChldmVuIGlmIHRoZXJlIGFyZSBubyB1cGRhdGVzIG9uIHRoaXMgcGFydGljdWxhciByZW5kZXIpLlxuLy8gVGhpcyBlbmFibGVzIHVzIHRvIGRlZmVyIG1vcmUgd29yayBpbiB0aGUgdW5tb3VudCBjYXNlLFxuLy8gc2luY2Ugd2UgY2FuIGRlZmVyIHRyYXZlcnNpbmcgdGhlIHRyZWUgZHVyaW5nIGxheW91dCB0byBsb29rIGZvciBQYXNzaXZlIGVmZmVjdHMsXG4vLyBhbmQgaW5zdGVhZCByZWx5IG9uIHRoZSBzdGF0aWMgZmxhZyBhcyBhIHNpZ25hbCB0aGF0IHRoZXJlIG1heSBiZSBjbGVhbnVwIHdvcmsuXG5cbnZhciBSZWZTdGF0aWMgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yMDk3MTUyO1xudmFyIExheW91dFN0YXRpYyA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjQxOTQzMDQ7XG52YXIgUGFzc2l2ZVN0YXRpYyA9XG4vKiAgICAgICAgICAgICAgICAqL1xuODM4ODYwODtcbnZhciBNYXlTdXNwZW5kQ29tbWl0ID1cbi8qICAgICAgICAgICAgICovXG4xNjc3NzIxNjsgLy8gRmxhZyB1c2VkIHRvIGlkZW50aWZ5IG5ld2x5IGluc2VydGVkIGZpYmVycy4gSXQgaXNuJ3QgcmVzZXQgYWZ0ZXIgY29tbWl0IHVubGlrZSBgUGxhY2VtZW50YC5cblxudmFyIFBsYWNlbWVudERFViA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjMzNTU0NDMyO1xudmFyIE1vdW50TGF5b3V0RGV2ID1cbi8qICAgICAgICAgICAgICAgKi9cbjY3MTA4ODY0O1xudmFyIE1vdW50UGFzc2l2ZURldiA9XG4vKiAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyODsgLy8gR3JvdXBzIG9mIGZsYWdzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIGNvbW1pdCBwaGFzZSB0byBza2lwIG92ZXIgdHJlZXMgdGhhdFxuLy8gZG9uJ3QgY29udGFpbiBlZmZlY3RzLCBieSBjaGVja2luZyBzdWJ0cmVlRmxhZ3MuXG5cbnZhciBCZWZvcmVNdXRhdGlvbk1hc2sgPSAvLyBUT0RPOiBSZW1vdmUgVXBkYXRlIGZsYWcgZnJvbSBiZWZvcmUgbXV0YXRpb24gcGhhc2UgYnkgcmUtbGFuZGluZyBWaXNpYmlsaXR5XG4vLyBmbGFnIGxvZ2ljIChzZWUgIzIwMDQzKVxuVXBkYXRlIHwgU25hcHNob3QgfCAoMCk7XG52YXIgTXV0YXRpb25NYXNrID0gUGxhY2VtZW50IHwgVXBkYXRlIHwgQ2hpbGREZWxldGlvbiB8IENvbnRlbnRSZXNldCB8IFJlZiB8IEh5ZHJhdGluZyB8IFZpc2liaWxpdHk7XG52YXIgTGF5b3V0TWFzayA9IFVwZGF0ZSB8IENhbGxiYWNrIHwgUmVmIHwgVmlzaWJpbGl0eTsgLy8gVE9ETzogU3BsaXQgaW50byBQYXNzaXZlTW91bnRNYXNrIGFuZCBQYXNzaXZlVW5tb3VudE1hc2tcblxudmFyIFBhc3NpdmVNYXNrID0gUGFzc2l2ZSQxIHwgVmlzaWJpbGl0eSB8IENoaWxkRGVsZXRpb247IC8vIFVuaW9uIG9mIHRhZ3MgdGhhdCBkb24ndCBnZXQgcmVzZXQgb24gY2xvbmVzLlxuLy8gVGhpcyBhbGxvd3MgY2VydGFpbiBjb25jZXB0cyB0byBwZXJzaXN0IHdpdGhvdXQgcmVjYWxjdWxhdGluZyB0aGVtLFxuLy8gZS5nLiB3aGV0aGVyIGEgc3VidHJlZSBjb250YWlucyBwYXNzaXZlIGVmZmVjdHMgb3IgcG9ydGFscy5cblxudmFyIFN0YXRpY01hc2sgPSBMYXlvdXRTdGF0aWMgfCBQYXNzaXZlU3RhdGljIHwgUmVmU3RhdGljIHwgTWF5U3VzcGVuZENvbW1pdDtcblxuLy8gVGhpcyBtb2R1bGUgb25seSBleGlzdHMgYXMgYW4gRVNNIHdyYXBwZXIgYXJvdW5kIHRoZSBleHRlcm5hbCBDb21tb25KU1xudmFyIHNjaGVkdWxlQ2FsbGJhY2skMyA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrO1xudmFyIGNhbmNlbENhbGxiYWNrJDEgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s7XG52YXIgc2hvdWxkWWllbGQgPSBTY2hlZHVsZXIudW5zdGFibGVfc2hvdWxkWWllbGQ7XG52YXIgcmVxdWVzdFBhaW50ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3JlcXVlc3RQYWludDtcbnZhciBub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG52YXIgZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSBTY2hlZHVsZXIudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw7XG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk7XG52YXIgTm9ybWFsUHJpb3JpdHkkMSA9IFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eTtcbnZhciBMb3dQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Mb3dQcmlvcml0eTtcbnZhciBJZGxlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSWRsZVByaW9yaXR5OyAvLyB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3Qgb24gdGhlIHNjaGVkdWxlciwgYnV0IGl0ICpkb2VzKlxuLy8gb24gc2NoZWR1bGVyL3Vuc3RhYmxlX21vY2ssIHdoaWNoIHdlJ2xsIG5lZWQgZm9yIGludGVybmFsIHRlc3RpbmdcblxudmFyIGxvZyQxID0gU2NoZWR1bGVyLmxvZztcbnZhciB1bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZSA9IFNjaGVkdWxlci51bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZTtcblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHJlbmRlcmVySUQgPSBudWxsO1xudmFyIGluamVjdGVkSG9vayA9IG51bGw7XG52YXIgaW5qZWN0ZWRQcm9maWxpbmdIb29rcyA9IG51bGw7XG52YXIgaGFzTG9nZ2VkRXJyb3IgPSBmYWxzZTtcbnZhciBpc0RldlRvb2xzUHJlc2VudCA9IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnO1xuZnVuY3Rpb24gaW5qZWN0SW50ZXJuYWxzKGludGVybmFscykge1xuICBpZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBObyBEZXZUb29sc1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBob29rID0gX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4gIGlmIChob29rLmlzRGlzYWJsZWQpIHtcbiAgICAvLyBUaGlzIGlzbid0IGEgcmVhbCBwcm9wZXJ0eSBvbiB0aGUgaG9vaywgYnV0IGl0IGNhbiBiZSBzZXQgdG8gb3B0IG91dFxuICAgIC8vIG9mIERldlRvb2xzIGludGVncmF0aW9uIGFuZCBhc3NvY2lhdGVkIHdhcm5pbmdzIGFuZCBsb2dzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzg3N1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFob29rLnN1cHBvcnRzRmliZXIpIHtcbiAgICB7XG4gICAgICBlcnJvcignVGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFJlYWN0IERldlRvb2xzIGlzIHRvbyBvbGQgYW5kIHdpbGwgbm90IHdvcmsgJyArICd3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUmVhY3QuIFBsZWFzZSB1cGRhdGUgUmVhY3QgRGV2VG9vbHMuICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyk7XG4gICAgfSAvLyBEZXZUb29scyBleGlzdHMsIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3Qgc3VwcG9ydCBGaWJlci5cblxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChlbmFibGVTY2hlZHVsaW5nUHJvZmlsZXIpIHtcbiAgICAgIC8vIENvbmRpdGlvbmFsbHkgaW5qZWN0IHRoZXNlIGhvb2tzIG9ubHkgaWYgVGltZWxpbmUgcHJvZmlsZXIgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQuXG4gICAgICAvLyBUaGlzIGdpdmVzIERldlRvb2xzIGEgd2F5IHRvIGZlYXR1cmUgZGV0ZWN0IHRoYXQgaXNuJ3QgdGllZCB0byB2ZXJzaW9uIG51bWJlclxuICAgICAgLy8gKHNpbmNlIHByb2ZpbGluZyBhbmQgdGltZWxpbmUgYXJlIGNvbnRyb2xsZWQgYnkgZGlmZmVyZW50IGZlYXR1cmUgZmxhZ3MpLlxuICAgICAgaW50ZXJuYWxzID0gYXNzaWduKHt9LCBpbnRlcm5hbHMsIHtcbiAgICAgICAgZ2V0TGFuZUxhYmVsTWFwOiBnZXRMYW5lTGFiZWxNYXAsXG4gICAgICAgIGluamVjdFByb2ZpbGluZ0hvb2tzOiBpbmplY3RQcm9maWxpbmdIb29rc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyZXJJRCA9IGhvb2suaW5qZWN0KGludGVybmFscyk7IC8vIFdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGluamVjdGVkLCBzbyBub3cgaXQgaXMgc2FmZSB0byBzZXQgdXAgaG9va3MuXG5cbiAgICBpbmplY3RlZEhvb2sgPSBob29rO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBDYXRjaCBhbGwgZXJyb3JzIGJlY2F1c2UgaXQgaXMgdW5zYWZlIHRvIHRocm93IGR1cmluZyBpbml0aWFsaXphdGlvbi5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy4nLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChob29rLmNoZWNrRENFKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgcmVhbCBEZXZUb29scy5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGxpa2VseSBhIGhvb2sgaW5zdGFsbGVkIGJ5IEZhc3QgUmVmcmVzaCBydW50aW1lLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gb25TY2hlZHVsZVJvb3Qocm9vdCwgY2hpbGRyZW4pIHtcbiAge1xuICAgIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBjaGlsZHJlbik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25Db21taXRSb290JDEocm9vdCwgZXZlbnRQcmlvcml0eSkge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGRpZEVycm9yID0gKHJvb3QuY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBEaWRDYXB0dXJlO1xuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHk7XG5cbiAgICAgICAgc3dpdGNoIChldmVudFByaW9yaXR5KSB7XG4gICAgICAgICAgY2FzZSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IEltbWVkaWF0ZVByaW9yaXR5O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIENvbnRpbnVvdXNFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBEZWZhdWx0RXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHkkMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBJZGxlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5ID0gSWRsZVByaW9yaXR5O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBOb3JtYWxQcmlvcml0eSQxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgc2NoZWR1bGVyUHJpb3JpdHksIGRpZEVycm9yKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25Qb3N0Q29tbWl0Um9vdChyb290KSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vblBvc3RDb21taXRGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgaW5qZWN0ZWRIb29rLm9uUG9zdENvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25Db21taXRVbm1vdW50KGZpYmVyKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQocmVuZGVyZXJJRCwgZmliZXIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAge1xuICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhuZXdJc1N0cmljdE1vZGUpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgbG9nJDEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFdlJ3JlIGluIGEgdGVzdCBiZWNhdXNlIFNjaGVkdWxlci5sb2cgb25seSBleGlzdHNcbiAgICAgIC8vIGluIFNjaGVkdWxlck1vY2suIFRvIHJlZHVjZSB0aGUgbm9pc2UgaW4gc3RyaWN0IG1vZGUgdGVzdHMsXG4gICAgICAvLyBzdXBwcmVzcyB3YXJuaW5ncyBhbmQgZGlzYWJsZSBzY2hlZHVsZXIgeWllbGRpbmcgZHVyaW5nIHRoZSBkb3VibGUgcmVuZGVyXG4gICAgICB1bnN0YWJsZV9zZXREaXNhYmxlWWllbGRWYWx1ZShuZXdJc1N0cmljdE1vZGUpO1xuICAgICAgc2V0U3VwcHJlc3NXYXJuaW5nKG5ld0lzU3RyaWN0TW9kZSk7XG4gICAgfVxuXG4gICAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLnNldFN0cmljdE1vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGluamVjdGVkSG9vay5zZXRTdHJpY3RNb2RlKHJlbmRlcmVySUQsIG5ld0lzU3RyaWN0TW9kZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBQcm9maWxlciBBUEkgaG9va3NcblxuZnVuY3Rpb24gaW5qZWN0UHJvZmlsaW5nSG9va3MocHJvZmlsaW5nSG9va3MpIHtcbiAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcyA9IHByb2ZpbGluZ0hvb2tzO1xufVxuXG5mdW5jdGlvbiBnZXRMYW5lTGFiZWxNYXAoKSB7XG4gIHtcbiAgICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICAgIHZhciBsYW5lID0gMTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBUb3RhbExhbmVzOyBpbmRleCsrKSB7XG4gICAgICB2YXIgbGFiZWwgPSBnZXRMYWJlbEZvckxhbmUobGFuZSk7XG4gICAgICBtYXAuc2V0KGxhbmUsIGxhYmVsKTtcbiAgICAgIGxhbmUgKj0gMjtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtDb21taXRTdGFydGVkKGxhbmVzKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tbWl0U3RhcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tbWl0U3RhcnRlZChsYW5lcyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrQ29tbWl0U3RvcHBlZCgpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21taXRTdG9wcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21taXRTdG9wcGVkKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZChmaWJlcikge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQoZmliZXIpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0YXJ0ZWQoZmliZXIpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdGFydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdGFydGVkKGZpYmVyKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdG9wcGVkKCkge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0YXJ0ZWQoZmliZXIpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0YXJ0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RhcnRlZChmaWJlcik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdG9wcGVkKCkge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RvcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdG9wcGVkKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdGFydGVkKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdGFydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0YXJ0ZWQoZmliZXIpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RvcHBlZCgpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0b3BwZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RvcHBlZCgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdGFydGVkKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0YXJ0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdGFydGVkKGZpYmVyKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCgpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0b3BwZWQoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtDb21wb25lbnRFcnJvcmVkKGZpYmVyLCB0aHJvd25WYWx1ZSwgbGFuZXMpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRFcnJvcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRFcnJvcmVkKGZpYmVyLCB0aHJvd25WYWx1ZSwgbGFuZXMpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya0NvbXBvbmVudFN1c3BlbmRlZChmaWJlciwgd2FrZWFibGUsIGxhbmVzKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50U3VzcGVuZGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRTdXNwZW5kZWQoZmliZXIsIHdha2VhYmxlLCBsYW5lcyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrTGF5b3V0RWZmZWN0c1N0YXJ0ZWQobGFuZXMpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtMYXlvdXRFZmZlY3RzU3RhcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrTGF5b3V0RWZmZWN0c1N0YXJ0ZWQobGFuZXMpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya0xheW91dEVmZmVjdHNTdG9wcGVkKCkge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0xheW91dEVmZmVjdHNTdG9wcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtMYXlvdXRFZmZlY3RzU3RvcHBlZCgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya1Bhc3NpdmVFZmZlY3RzU3RhcnRlZChsYW5lcykge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1Bhc3NpdmVFZmZlY3RzU3RhcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkKGxhbmVzKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtQYXNzaXZlRWZmZWN0c1N0b3BwZWQoKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUGFzc2l2ZUVmZmVjdHNTdG9wcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtQYXNzaXZlRWZmZWN0c1N0b3BwZWQoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSZW5kZXJTdGFydGVkKGxhbmVzKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU3RhcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU3RhcnRlZChsYW5lcyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrUmVuZGVyWWllbGRlZCgpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJZaWVsZGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJZaWVsZGVkKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrUmVuZGVyU3RvcHBlZCgpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTdG9wcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTdG9wcGVkKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrUmVuZGVyU2NoZWR1bGVkKGxhbmUpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTY2hlZHVsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclNjaGVkdWxlZChsYW5lKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtGb3JjZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSkge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0ZvcmNlVXBkYXRlU2NoZWR1bGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtGb3JjZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGxhbmUpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGxhbmUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgTm9Nb2RlID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG4wOyAvLyBUT0RPOiBSZW1vdmUgQ29uY3VycmVudE1vZGUgYnkgcmVhZGluZyBmcm9tIHRoZSByb290IHRhZyBpbnN0ZWFkXG5cbnZhciBDb25jdXJyZW50TW9kZSA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgUHJvZmlsZU1vZGUgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yO1xudmFyIFN0cmljdExlZ2FjeU1vZGUgPVxuLyogICAgICAgICAgICAgICAqL1xuODtcbnZhciBTdHJpY3RFZmZlY3RzTW9kZSA9XG4vKiAgICAgICAgICAgICAgKi9cbjE2O1xudmFyIE5vU3RyaWN0UGFzc2l2ZUVmZmVjdHNNb2RlID1cbi8qICAgICAqL1xuNjQ7XG5cbi8vIFRPRE86IFRoaXMgaXMgcHJldHR5IHdlbGwgc3VwcG9ydGVkIGJ5IGJyb3dzZXJzLiBNYXliZSB3ZSBjYW4gZHJvcCBpdC5cbnZhciBjbHozMiA9IE1hdGguY2x6MzIgPyBNYXRoLmNsejMyIDogY2x6MzJGYWxsYmFjazsgLy8gQ291bnQgbGVhZGluZyB6ZXJvcy5cbi8vIEJhc2VkIG9uOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9jbHozMlxuXG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG5cbmZ1bmN0aW9uIGNsejMyRmFsbGJhY2soeCkge1xuICB2YXIgYXNVaW50ID0geCA+Pj4gMDtcblxuICBpZiAoYXNVaW50ID09PSAwKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9XG5cbiAgcmV0dXJuIDMxIC0gKGxvZyhhc1VpbnQpIC8gTE4yIHwgMCkgfCAwO1xufVxuXG4vLyBJZiB0aG9zZSB2YWx1ZXMgYXJlIGNoYW5nZWQgdGhhdCBwYWNrYWdlIHNob3VsZCBiZSByZWJ1aWx0IGFuZCByZWRlcGxveWVkLlxuXG52YXIgVG90YWxMYW5lcyA9IDMxO1xudmFyIE5vTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBOb0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIFN5bmNIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgU3luY0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBTeW5jTGFuZUluZGV4ID0gMTtcbnZhciBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lID1cbi8qICAgICovXG40O1xudmFyIElucHV0Q29udGludW91c0xhbmUgPVxuLyogICAgICAgICAgICAgKi9cbjg7XG52YXIgRGVmYXVsdEh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAqL1xuMTY7XG52YXIgRGVmYXVsdExhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuMzI7XG52YXIgU3luY1VwZGF0ZUxhbmVzID0gU3luY0xhbmUgfCBJbnB1dENvbnRpbnVvdXNMYW5lIHwgRGVmYXVsdExhbmUgO1xudmFyIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgICovXG42NDtcbnZhciBUcmFuc2l0aW9uTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG40MTk0MTc2O1xudmFyIFRyYW5zaXRpb25MYW5lMSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMjg7XG52YXIgVHJhbnNpdGlvbkxhbmUyID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjI1NjtcbnZhciBUcmFuc2l0aW9uTGFuZTMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuNTEyO1xudmFyIFRyYW5zaXRpb25MYW5lNCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMDI0O1xudmFyIFRyYW5zaXRpb25MYW5lNSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4yMDQ4O1xudmFyIFRyYW5zaXRpb25MYW5lNiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIFRyYW5zaXRpb25MYW5lNyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG44MTkyO1xudmFyIFRyYW5zaXRpb25MYW5lOCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4xNjM4NDtcbnZhciBUcmFuc2l0aW9uTGFuZTkgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMzI3Njg7XG52YXIgVHJhbnNpdGlvbkxhbmUxMCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjY1NTM2O1xudmFyIFRyYW5zaXRpb25MYW5lMTEgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4xMzEwNzI7XG52YXIgVHJhbnNpdGlvbkxhbmUxMiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjI2MjE0NDtcbnZhciBUcmFuc2l0aW9uTGFuZTEzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuNTI0Mjg4O1xudmFyIFRyYW5zaXRpb25MYW5lMTQgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4xMDQ4NTc2O1xudmFyIFRyYW5zaXRpb25MYW5lMTUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4yMDk3MTUyO1xudmFyIFJldHJ5TGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjYyOTE0NTYwO1xudmFyIFJldHJ5TGFuZTEgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG40MTk0MzA0O1xudmFyIFJldHJ5TGFuZTIgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG44Mzg4NjA4O1xudmFyIFJldHJ5TGFuZTMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4xNjc3NzIxNjtcbnZhciBSZXRyeUxhbmU0ID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMzM1NTQ0MzI7XG52YXIgU29tZVJldHJ5TGFuZSA9IFJldHJ5TGFuZTE7XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAqL1xuNjcxMDg4NjQ7XG52YXIgTm9uSWRsZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTM0MjE3NzI3O1xudmFyIElkbGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyODtcbnZhciBJZGxlTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4yNjg0MzU0NTY7XG52YXIgT2Zmc2NyZWVuTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuNTM2ODcwOTEyO1xudmFyIERlZmVycmVkTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjEwNzM3NDE4MjQ7IC8vIEFueSBsYW5lIHRoYXQgbWlnaHQgc2NoZWR1bGUgYW4gdXBkYXRlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZWN0IGluZmluaXRlXG4vLyB1cGRhdGUgbG9vcHMsIHNvIGl0IGRvZXNuJ3QgaW5jbHVkZSBoeWRyYXRpb24gbGFuZXMgb3IgcmV0cmllcy5cblxudmFyIFVwZGF0ZUxhbmVzID0gU3luY0xhbmUgfCBJbnB1dENvbnRpbnVvdXNMYW5lIHwgRGVmYXVsdExhbmUgfCBUcmFuc2l0aW9uTGFuZXM7IC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdGhlIGV4cGVyaW1lbnRhbCB0aW1lbGluZSAocmVhY3QtZGV2dG9vbHMtdGltZWxpbmUpXG4vLyBJdCBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIExhbmVzIHZhbHVlcyBhYm92ZS5cblxuZnVuY3Rpb24gZ2V0TGFiZWxGb3JMYW5lKGxhbmUpIHtcbiAge1xuICAgIGlmIChsYW5lICYgU3luY0h5ZHJhdGlvbkxhbmUpIHtcbiAgICAgIHJldHVybiAnU3luY0h5ZHJhdGlvbkxhbmUnO1xuICAgIH1cblxuICAgIGlmIChsYW5lICYgU3luY0xhbmUpIHtcbiAgICAgIHJldHVybiAnU3luYyc7XG4gICAgfVxuXG4gICAgaWYgKGxhbmUgJiBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lKSB7XG4gICAgICByZXR1cm4gJ0lucHV0Q29udGludW91c0h5ZHJhdGlvbic7XG4gICAgfVxuXG4gICAgaWYgKGxhbmUgJiBJbnB1dENvbnRpbnVvdXNMYW5lKSB7XG4gICAgICByZXR1cm4gJ0lucHV0Q29udGludW91cyc7XG4gICAgfVxuXG4gICAgaWYgKGxhbmUgJiBEZWZhdWx0SHlkcmF0aW9uTGFuZSkge1xuICAgICAgcmV0dXJuICdEZWZhdWx0SHlkcmF0aW9uJztcbiAgICB9XG5cbiAgICBpZiAobGFuZSAmIERlZmF1bHRMYW5lKSB7XG4gICAgICByZXR1cm4gJ0RlZmF1bHQnO1xuICAgIH1cblxuICAgIGlmIChsYW5lICYgVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmUpIHtcbiAgICAgIHJldHVybiAnVHJhbnNpdGlvbkh5ZHJhdGlvbic7XG4gICAgfVxuXG4gICAgaWYgKGxhbmUgJiBUcmFuc2l0aW9uTGFuZXMpIHtcbiAgICAgIHJldHVybiAnVHJhbnNpdGlvbic7XG4gICAgfVxuXG4gICAgaWYgKGxhbmUgJiBSZXRyeUxhbmVzKSB7XG4gICAgICByZXR1cm4gJ1JldHJ5JztcbiAgICB9XG5cbiAgICBpZiAobGFuZSAmIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmUpIHtcbiAgICAgIHJldHVybiAnU2VsZWN0aXZlSHlkcmF0aW9uJztcbiAgICB9XG5cbiAgICBpZiAobGFuZSAmIElkbGVIeWRyYXRpb25MYW5lKSB7XG4gICAgICByZXR1cm4gJ0lkbGVIeWRyYXRpb24nO1xuICAgIH1cblxuICAgIGlmIChsYW5lICYgSWRsZUxhbmUpIHtcbiAgICAgIHJldHVybiAnSWRsZSc7XG4gICAgfVxuXG4gICAgaWYgKGxhbmUgJiBPZmZzY3JlZW5MYW5lKSB7XG4gICAgICByZXR1cm4gJ09mZnNjcmVlbic7XG4gICAgfVxuXG4gICAgaWYgKGxhbmUgJiBEZWZlcnJlZExhbmUpIHtcbiAgICAgIHJldHVybiAnRGVmZXJyZWQnO1xuICAgIH1cbiAgfVxufVxudmFyIE5vVGltZXN0YW1wID0gLTE7XG52YXIgbmV4dFRyYW5zaXRpb25MYW5lID0gVHJhbnNpdGlvbkxhbmUxO1xudmFyIG5leHRSZXRyeUxhbmUgPSBSZXRyeUxhbmUxO1xuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICB7XG4gICAgdmFyIHBlbmRpbmdTeW5jTGFuZXMgPSBsYW5lcyAmIFN5bmNVcGRhdGVMYW5lcztcblxuICAgIGlmIChwZW5kaW5nU3luY0xhbmVzICE9PSAwKSB7XG4gICAgICByZXR1cm4gcGVuZGluZ1N5bmNMYW5lcztcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpKSB7XG4gICAgY2FzZSBTeW5jSHlkcmF0aW9uTGFuZTpcbiAgICAgIHJldHVybiBTeW5jSHlkcmF0aW9uTGFuZTtcblxuICAgIGNhc2UgU3luY0xhbmU6XG4gICAgICByZXR1cm4gU3luY0xhbmU7XG5cbiAgICBjYXNlIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmU6XG4gICAgICByZXR1cm4gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTtcblxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZTpcbiAgICAgIHJldHVybiBJbnB1dENvbnRpbnVvdXNMYW5lO1xuXG4gICAgY2FzZSBEZWZhdWx0SHlkcmF0aW9uTGFuZTpcbiAgICAgIHJldHVybiBEZWZhdWx0SHlkcmF0aW9uTGFuZTtcblxuICAgIGNhc2UgRGVmYXVsdExhbmU6XG4gICAgICByZXR1cm4gRGVmYXVsdExhbmU7XG5cbiAgICBjYXNlIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lOlxuICAgICAgcmV0dXJuIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lO1xuXG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTI6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTM6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTQ6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTU6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTY6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTc6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTg6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTk6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEwOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMTpcbiAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTI6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEzOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxNDpcbiAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTU6XG4gICAgICByZXR1cm4gbGFuZXMgJiBUcmFuc2l0aW9uTGFuZXM7XG5cbiAgICBjYXNlIFJldHJ5TGFuZTE6XG4gICAgY2FzZSBSZXRyeUxhbmUyOlxuICAgIGNhc2UgUmV0cnlMYW5lMzpcbiAgICBjYXNlIFJldHJ5TGFuZTQ6XG4gICAgICByZXR1cm4gbGFuZXMgJiBSZXRyeUxhbmVzO1xuXG4gICAgY2FzZSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lOlxuICAgICAgcmV0dXJuIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG5cbiAgICBjYXNlIElkbGVIeWRyYXRpb25MYW5lOlxuICAgICAgcmV0dXJuIElkbGVIeWRyYXRpb25MYW5lO1xuXG4gICAgY2FzZSBJZGxlTGFuZTpcbiAgICAgIHJldHVybiBJZGxlTGFuZTtcblxuICAgIGNhc2UgT2Zmc2NyZWVuTGFuZTpcbiAgICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuXG4gICAgY2FzZSBEZWZlcnJlZExhbmU6XG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSByZWFjaGFibGUgYmVjYXVzZSBkZWZlcnJlZCB3b3JrIGlzIGFsd2F5cyBlbnRhbmdsZWRcbiAgICAgIC8vIHdpdGggc29tZXRoaW5nIGVsc2UuXG4gICAgICByZXR1cm4gTm9MYW5lcztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIGVycm9yKCdTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH0gLy8gVGhpcyBzaG91bGRuJ3QgYmUgcmVhY2hhYmxlLCBidXQgYXMgYSBmYWxsYmFjaywgcmV0dXJuIHRoZSBlbnRpcmUgYml0bWFzay5cblxuXG4gICAgICByZXR1cm4gbGFuZXM7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TmV4dExhbmVzKHJvb3QsIHdpcExhbmVzKSB7XG4gIC8vIEVhcmx5IGJhaWxvdXQgaWYgdGhlcmUncyBubyBwZW5kaW5nIHdvcmsgbGVmdC5cbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuXG4gIGlmIChwZW5kaW5nTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm4gTm9MYW5lcztcbiAgfVxuXG4gIHZhciBuZXh0TGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzOyAvLyBEbyBub3Qgd29yayBvbiBhbnkgaWRsZSB3b3JrIHVudGlsIGFsbCB0aGUgbm9uLWlkbGUgd29yayBoYXMgZmluaXNoZWQsXG4gIC8vIGV2ZW4gaWYgdGhlIHdvcmsgaXMgc3VzcGVuZGVkLlxuXG4gIHZhciBub25JZGxlUGVuZGluZ0xhbmVzID0gcGVuZGluZ0xhbmVzICYgTm9uSWRsZUxhbmVzO1xuXG4gIGlmIChub25JZGxlUGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgdmFyIG5vbklkbGVVbmJsb2NrZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICBpZiAobm9uSWRsZVVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlVW5ibG9ja2VkTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbm9uSWRsZVBpbmdlZExhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIHBpbmdlZExhbmVzO1xuXG4gICAgICBpZiAobm9uSWRsZVBpbmdlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKG5vbklkbGVQaW5nZWRMYW5lcyk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyB3b3JrIGlzIElkbGUuXG4gICAgdmFyIHVuYmxvY2tlZExhbmVzID0gcGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgaWYgKHVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh1bmJsb2NrZWRMYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwaW5nZWRMYW5lcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgcmVhY2hhYmxlIGlmIHdlJ3JlIHN1c3BlbmRlZFxuICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgaW4gdGhpcyBwYXRoIGlmIGEgZmFsbGJhY2sgdGltZXIgaXMgbm90IHNjaGVkdWxlZC5cbiAgICByZXR1cm4gTm9MYW5lcztcbiAgfSAvLyBJZiB3ZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgYSByZW5kZXIsIHN3aXRjaGluZyBsYW5lcyB3aWxsIGludGVycnVwdFxuICAvLyBpdCBhbmQgd2UnbGwgbG9zZSBvdXIgcHJvZ3Jlc3MuIFdlIHNob3VsZCBvbmx5IGRvIHRoaXMgaWYgdGhlIG5ldyBsYW5lcyBhcmVcbiAgLy8gaGlnaGVyIHByaW9yaXR5LlxuXG5cbiAgaWYgKHdpcExhbmVzICE9PSBOb0xhbmVzICYmIHdpcExhbmVzICE9PSBuZXh0TGFuZXMgJiYgLy8gSWYgd2UgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB0aGVuIGludGVycnVwdGluZyBpcyBmaW5lLiBEb24ndFxuICAvLyBib3RoZXIgd2FpdGluZyB1bnRpbCB0aGUgcm9vdCBpcyBjb21wbGV0ZS5cbiAgKHdpcExhbmVzICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzKSB7XG4gICAgdmFyIG5leHRMYW5lID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShuZXh0TGFuZXMpO1xuICAgIHZhciB3aXBMYW5lID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZSh3aXBMYW5lcyk7XG5cbiAgICBpZiAoIC8vIFRlc3RzIHdoZXRoZXIgdGhlIG5leHQgbGFuZSBpcyBlcXVhbCBvciBsb3dlciBwcmlvcml0eSB0aGFuIHRoZSB3aXBcbiAgICAvLyBvbmUuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYml0cyBkZWNyZWFzZSBpbiBwcmlvcml0eSBhcyB5b3UgZ28gbGVmdC5cbiAgICBuZXh0TGFuZSA+PSB3aXBMYW5lIHx8IC8vIERlZmF1bHQgcHJpb3JpdHkgdXBkYXRlcyBzaG91bGQgbm90IGludGVycnVwdCB0cmFuc2l0aW9uIHVwZGF0ZXMuIFRoZVxuICAgIC8vIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIGRlZmF1bHQgdXBkYXRlcyBhbmQgdHJhbnNpdGlvbiB1cGRhdGVzIGlzIHRoYXRcbiAgICAvLyBkZWZhdWx0IHVwZGF0ZXMgZG8gbm90IHN1cHBvcnQgcmVmcmVzaCB0cmFuc2l0aW9ucy5cbiAgICBuZXh0TGFuZSA9PT0gRGVmYXVsdExhbmUgJiYgKHdpcExhbmUgJiBUcmFuc2l0aW9uTGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgICAvLyBLZWVwIHdvcmtpbmcgb24gdGhlIGV4aXN0aW5nIGluLXByb2dyZXNzIHRyZWUuIERvIG5vdCBpbnRlcnJ1cHQuXG4gICAgICByZXR1cm4gd2lwTGFuZXM7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRMYW5lcztcbn1cbmZ1bmN0aW9uIGdldEVudGFuZ2xlZExhbmVzKHJvb3QsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBlbnRhbmdsZWRMYW5lcyA9IHJlbmRlckxhbmVzO1xuXG4gIGlmICgoZW50YW5nbGVkTGFuZXMgJiBJbnB1dENvbnRpbnVvdXNMYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIC8vIFdoZW4gdXBkYXRlcyBhcmUgc3luYyBieSBkZWZhdWx0LCB3ZSBlbnRhbmdsZSBjb250aW51b3VzIHByaW9yaXR5IHVwZGF0ZXNcbiAgICAvLyBhbmQgZGVmYXVsdCB1cGRhdGVzLCBzbyB0aGV5IHJlbmRlciBpbiB0aGUgc2FtZSBiYXRjaC4gVGhlIG9ubHkgcmVhc29uXG4gICAgLy8gdGhleSB1c2Ugc2VwYXJhdGUgbGFuZXMgaXMgYmVjYXVzZSBjb250aW51b3VzIHVwZGF0ZXMgc2hvdWxkIGludGVycnVwdFxuICAgIC8vIHRyYW5zaXRpb25zLCBidXQgZGVmYXVsdCB1cGRhdGVzIHNob3VsZCBub3QuXG4gICAgZW50YW5nbGVkTGFuZXMgfD0gZW50YW5nbGVkTGFuZXMgJiBEZWZhdWx0TGFuZTtcbiAgfSAvLyBDaGVjayBmb3IgZW50YW5nbGVkIGxhbmVzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmF0Y2guXG4gIC8vXG4gIC8vIEEgbGFuZSBpcyBzYWlkIHRvIGJlIGVudGFuZ2xlZCB3aXRoIGFub3RoZXIgd2hlbiBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlbmRlclxuICAvLyBpbiBhIGJhdGNoIHRoYXQgZG9lcyBub3QgYWxzbyBpbmNsdWRlIHRoZSBvdGhlciBsYW5lLiBUeXBpY2FsbHkgd2UgZG8gdGhpc1xuICAvLyB3aGVuIG11bHRpcGxlIHVwZGF0ZXMgaGF2ZSB0aGUgc2FtZSBzb3VyY2UsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gcmVzcG9uZCB0b1xuICAvLyB0aGUgbW9zdCByZWNlbnQgZXZlbnQgZnJvbSB0aGF0IHNvdXJjZS5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IHdlIGFwcGx5IGVudGFuZ2xlbWVudHMgKmFmdGVyKiBjaGVja2luZyBmb3IgcGFydGlhbCB3b3JrIGFib3ZlLlxuICAvLyBUaGlzIG1lYW5zIHRoYXQgaWYgYSBsYW5lIGlzIGVudGFuZ2xlZCBkdXJpbmcgYW4gaW50ZXJsZWF2ZWQgZXZlbnQgd2hpbGVcbiAgLy8gaXQncyBhbHJlYWR5IHJlbmRlcmluZywgd2Ugd29uJ3QgaW50ZXJydXB0IGl0LiBUaGlzIGlzIGludGVudGlvbmFsLCBzaW5jZVxuICAvLyBlbnRhbmdsZW1lbnQgaXMgdXN1YWxseSBcImJlc3QgZWZmb3J0XCI6IHdlJ2xsIHRyeSBvdXIgYmVzdCB0byByZW5kZXIgdGhlXG4gIC8vIGxhbmVzIGluIHRoZSBzYW1lIGJhdGNoLCBidXQgaXQncyBub3Qgd29ydGggdGhyb3dpbmcgb3V0IHBhcnRpYWxseVxuICAvLyBjb21wbGV0ZWQgd29yayBpbiBvcmRlciB0byBkbyBpdC5cbiAgLy8gVE9ETzogUmVjb25zaWRlciB0aGlzLiBUaGUgY291bnRlci1hcmd1bWVudCBpcyB0aGF0IHRoZSBwYXJ0aWFsIHdvcmtcbiAgLy8gcmVwcmVzZW50cyBhbiBpbnRlcm1lZGlhdGUgc3RhdGUsIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gc2hvdyB0byB0aGUgdXNlci5cbiAgLy8gQW5kIGJ5IHNwZW5kaW5nIGV4dHJhIHRpbWUgZmluaXNoaW5nIGl0LCB3ZSdyZSBpbmNyZWFzaW5nIHRoZSBhbW91bnQgb2ZcbiAgLy8gdGltZSBpdCB0YWtlcyB0byBzaG93IHRoZSBmaW5hbCBzdGF0ZSwgd2hpY2ggaXMgd2hhdCB0aGV5IGFyZSBhY3R1YWxseVxuICAvLyB3YWl0aW5nIGZvci5cbiAgLy9cbiAgLy8gRm9yIHRob3NlIGV4Y2VwdGlvbnMgd2hlcmUgZW50YW5nbGVtZW50IGlzIHNlbWFudGljYWxseSBpbXBvcnRhbnQsXG4gIC8vIHdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBwYXJ0aWFsIHdvcmsgYXQgdGhlXG4gIC8vIHRpbWUgd2UgYXBwbHkgdGhlIGVudGFuZ2xlbWVudC5cblxuXG4gIHZhciBhbGxFbnRhbmdsZWRMYW5lcyA9IHJvb3QuZW50YW5nbGVkTGFuZXM7XG5cbiAgaWYgKGFsbEVudGFuZ2xlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gICAgdmFyIGxhbmVzID0gZW50YW5nbGVkTGFuZXMgJiBhbGxFbnRhbmdsZWRMYW5lcztcblxuICAgIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgZW50YW5nbGVkTGFuZXMgfD0gZW50YW5nbGVtZW50c1tpbmRleF07XG4gICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZW50YW5nbGVkTGFuZXM7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSkge1xuICBzd2l0Y2ggKGxhbmUpIHtcbiAgICBjYXNlIFN5bmNIeWRyYXRpb25MYW5lOlxuICAgIGNhc2UgU3luY0xhbmU6XG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lOlxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZTpcbiAgICAgIC8vIFVzZXIgaW50ZXJhY3Rpb25zIHNob3VsZCBleHBpcmUgc2xpZ2h0bHkgbW9yZSBxdWlja2x5LlxuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50IGFzIGluIFNjaGVkdWxlci5qcy5cbiAgICAgIC8vIFdoZW4gd2UgbWFkZSBpdCBsYXJnZXIsIGEgcHJvZHVjdCBtZXRyaWMgaW4gd3d3IHJlZ3Jlc3NlZCwgc3VnZ2VzdGluZ1xuICAgICAgLy8gdGhlcmUncyBhIHVzZXIgaW50ZXJhY3Rpb24gdGhhdCdzIGJlaW5nIHN0YXJ2ZWQgYnkgYSBzZXJpZXMgb2ZcbiAgICAgIC8vIHN5bmNocm9ub3VzIHVwZGF0ZXMuIElmIHRoYXQgdGhlb3J5IGlzIGNvcnJlY3QsIHRoZSBwcm9wZXIgc29sdXRpb24gaXNcbiAgICAgIC8vIHRvIGZpeCB0aGUgc3RhcnZhdGlvbi4gSG93ZXZlciwgdGhpcyBzY2VuYXJpbyBzdXBwb3J0cyB0aGUgaWRlYSB0aGF0XG4gICAgICAvLyBleHBpcmF0aW9uIHRpbWVzIGFyZSBhbiBpbXBvcnRhbnQgc2FmZWd1YXJkIHdoZW4gc3RhcnZhdGlvblxuICAgICAgLy8gZG9lcyBoYXBwZW4uXG4gICAgICByZXR1cm4gY3VycmVudFRpbWUgKyBzeW5jTGFuZUV4cGlyYXRpb25NcztcblxuICAgIGNhc2UgRGVmYXVsdEh5ZHJhdGlvbkxhbmU6XG4gICAgY2FzZSBEZWZhdWx0TGFuZTpcbiAgICBjYXNlIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUyOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUzOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU0OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU1OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU2OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU3OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU4OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU5OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMDpcbiAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTE6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEyOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMzpcbiAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTQ6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE1OlxuICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgdHJhbnNpdGlvbkxhbmVFeHBpcmF0aW9uTXM7XG5cbiAgICBjYXNlIFJldHJ5TGFuZTE6XG4gICAgY2FzZSBSZXRyeUxhbmUyOlxuICAgIGNhc2UgUmV0cnlMYW5lMzpcbiAgICBjYXNlIFJldHJ5TGFuZTQ6XG4gICAgICAvLyBUT0RPOiBSZXRyaWVzIHNob3VsZCBiZSBhbGxvd2VkIHRvIGV4cGlyZSBpZiB0aGV5IGFyZSBDUFUgYm91bmQgZm9yXG4gICAgICAvLyB0b28gbG9uZywgYnV0IHdoZW4gSSBtYWRlIHRoaXMgY2hhbmdlIGl0IGNhdXNlZCBhIHNwaWtlIGluIGJyb3dzZXJcbiAgICAgIC8vIGNyYXNoZXMuIFRoZXJlIG11c3QgYmUgc29tZSBvdGhlciB1bmRlcmx5aW5nIGJ1Zzsgbm90IHN1cGVyIHVyZ2VudCBidXRcbiAgICAgIC8vIGlkZWFsbHkgc2hvdWxkIGZpZ3VyZSBvdXQgd2h5IGFuZCBmaXggaXQuIFVuZm9ydHVuYXRlbHkgd2UgZG9uJ3QgaGF2ZVxuICAgICAgLy8gYSByZXBybyBmb3IgdGhlIGNyYXNoZXMsIG9ubHkgZGV0ZWN0ZWQgdmlhIHByb2R1Y3Rpb24gbWV0cmljcy5cbiAgICAgIHJldHVybiBOb1RpbWVzdGFtcDtcblxuICAgIGNhc2UgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTpcbiAgICBjYXNlIElkbGVIeWRyYXRpb25MYW5lOlxuICAgIGNhc2UgSWRsZUxhbmU6XG4gICAgY2FzZSBPZmZzY3JlZW5MYW5lOlxuICAgIGNhc2UgRGVmZXJyZWRMYW5lOlxuICAgICAgLy8gQW55dGhpbmcgaWRsZSBwcmlvcml0eSBvciBsb3dlciBzaG91bGQgbmV2ZXIgZXhwaXJlLlxuICAgICAgcmV0dXJuIE5vVGltZXN0YW1wO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgZXJyb3IoJ1Nob3VsZCBoYXZlIGZvdW5kIG1hdGNoaW5nIGxhbmVzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gTm9UaW1lc3RhbXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSkge1xuICAvLyBUT0RPOiBUaGlzIGdldHMgY2FsbGVkIGV2ZXJ5IHRpbWUgd2UgeWllbGQuIFdlIGNhbiBvcHRpbWl6ZSBieSBzdG9yaW5nXG4gIC8vIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUgb24gdGhlIHJvb3QuIFRoZW4gdXNlIHRoYXQgdG8gcXVpY2tseSBiYWlsIG91dFxuICAvLyBvZiB0aGlzIGZ1bmN0aW9uLlxuICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7XG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBwZW5kaW5nIGxhbmVzIGFuZCBjaGVjayBpZiB3ZSd2ZSByZWFjaGVkIHRoZWlyXG4gIC8vIGV4cGlyYXRpb24gdGltZS4gSWYgc28sIHdlJ2xsIGFzc3VtZSB0aGUgdXBkYXRlIGlzIGJlaW5nIHN0YXJ2ZWQgYW5kIG1hcmtcbiAgLy8gaXQgYXMgZXhwaXJlZCB0byBmb3JjZSBpdCB0byBmaW5pc2guXG4gIC8vIFRPRE86IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyB3aXRoIHVwZ3JhZGVQZW5kaW5nTGFuZXNUb1N5bmNcbiAgLy9cbiAgLy8gV2UgZXhjbHVkZSByZXRyeSBsYW5lcyBiZWNhdXNlIHRob3NlIG11c3QgYWx3YXlzIGJlIHRpbWUgc2xpY2VkLCBpbiBvcmRlclxuICAvLyB0byB1bndyYXAgdW5jYWNoZWQgcHJvbWlzZXMuXG4gIC8vIFRPRE86IFdyaXRlIGEgdGVzdCBmb3IgdGhpc1xuXG4gIHZhciBsYW5lcyA9IHBlbmRpbmdMYW5lcyAmIH5SZXRyeUxhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgdmFyIGV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVzW2luZGV4XTtcblxuICAgIGlmIChleHBpcmF0aW9uVGltZSA9PT0gTm9UaW1lc3RhbXApIHtcbiAgICAgIC8vIEZvdW5kIGEgcGVuZGluZyBsYW5lIHdpdGggbm8gZXhwaXJhdGlvbiB0aW1lLiBJZiBpdCdzIG5vdCBzdXNwZW5kZWQsIG9yXG4gICAgICAvLyBpZiBpdCdzIHBpbmdlZCwgYXNzdW1lIGl0J3MgQ1BVLWJvdW5kLiBDb21wdXRlIGEgbmV3IGV4cGlyYXRpb24gdGltZVxuICAgICAgLy8gdXNpbmcgdGhlIGN1cnJlbnQgdGltZS5cbiAgICAgIGlmICgobGFuZSAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcyB8fCAobGFuZSAmIHBpbmdlZExhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgICAgICAvLyBBc3N1bWVzIHRpbWVzdGFtcHMgYXJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cbiAgICAgICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IGNvbXB1dGVFeHBpcmF0aW9uVGltZShsYW5lLCBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGhpcyBsYW5lIGV4cGlyZWRcbiAgICAgIHJvb3QuZXhwaXJlZExhbmVzIHw9IGxhbmU7XG4gICAgfVxuXG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn0gLy8gVGhpcyByZXR1cm5zIHRoZSBoaWdoZXN0IHByaW9yaXR5IHBlbmRpbmcgbGFuZXMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXlcbi8vIGFyZSBzdXNwZW5kZWQuXG5cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eVBlbmRpbmdMYW5lcyhyb290KSB7XG4gIHJldHVybiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhyb290LnBlbmRpbmdMYW5lcyk7XG59XG5mdW5jdGlvbiBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290LCBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMpIHtcbiAgaWYgKHJvb3QuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgJiBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMpIHtcbiAgICAvLyBUaGUgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIGRpc2FibGVkIHVudGlsIHRoZXNlIGxhbmVzIGFyZSBjbGVhcmVkLlxuICAgIHJldHVybiBOb0xhbmVzO1xuICB9XG5cbiAgdmFyIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gPSByb290LnBlbmRpbmdMYW5lcyAmIH5PZmZzY3JlZW5MYW5lO1xuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuIGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW47XG4gIH1cblxuICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAmIE9mZnNjcmVlbkxhbmUpIHtcbiAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgfVxuXG4gIHJldHVybiBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNTeW5jTGFuZShsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgKFN5bmNMYW5lIHwgU3luY0h5ZHJhdGlvbkxhbmUpKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzTm9uSWRsZVdvcmsobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIE5vbklkbGVMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlSZXRyaWVzKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBSZXRyeUxhbmVzKSA9PT0gbGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlOb25VcmdlbnRMYW5lcyhsYW5lcykge1xuICAvLyBUT0RPOiBTaG91bGQgaHlkcmF0aW9uIGxhbmVzIGJlIGluY2x1ZGVkIGhlcmU/IFRoaXMgZnVuY3Rpb24gaXMgb25seVxuICAvLyB1c2VkIGluIGB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbGAuXG4gIHZhciBVcmdlbnRMYW5lcyA9IFN5bmNMYW5lIHwgSW5wdXRDb250aW51b3VzTGFuZSB8IERlZmF1bHRMYW5lO1xuICByZXR1cm4gKGxhbmVzICYgVXJnZW50TGFuZXMpID09PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIFRyYW5zaXRpb25MYW5lcykgPT09IGxhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNCbG9ja2luZ0xhbmUocm9vdCwgbGFuZXMpIHtcblxuICB2YXIgU3luY0RlZmF1bHRMYW5lcyA9IElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUgfCBJbnB1dENvbnRpbnVvdXNMYW5lIHwgRGVmYXVsdEh5ZHJhdGlvbkxhbmUgfCBEZWZhdWx0TGFuZTtcbiAgcmV0dXJuIChsYW5lcyAmIFN5bmNEZWZhdWx0TGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNFeHBpcmVkTGFuZShyb290LCBsYW5lcykge1xuICAvLyBUaGlzIGlzIGEgc2VwYXJhdGUgY2hlY2sgZnJvbSBpbmNsdWRlc0Jsb2NraW5nTGFuZSBiZWNhdXNlIGEgbGFuZSBjYW5cbiAgLy8gZXhwaXJlIGFmdGVyIGEgcmVuZGVyIGhhcyBhbHJlYWR5IHN0YXJ0ZWQuXG4gIHJldHVybiAobGFuZXMgJiByb290LmV4cGlyZWRMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpc1RyYW5zaXRpb25MYW5lKGxhbmUpIHtcbiAgcmV0dXJuIChsYW5lICYgVHJhbnNpdGlvbkxhbmVzKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGNsYWltTmV4dFRyYW5zaXRpb25MYW5lKCkge1xuICAvLyBDeWNsZSB0aHJvdWdoIHRoZSBsYW5lcywgYXNzaWduaW5nIGVhY2ggbmV3IHRyYW5zaXRpb24gdG8gdGhlIG5leHQgbGFuZS5cbiAgLy8gSW4gbW9zdCBjYXNlcywgdGhpcyBtZWFucyBldmVyeSB0cmFuc2l0aW9uIGdldHMgaXRzIG93biBsYW5lLCB1bnRpbCB3ZVxuICAvLyBydW4gb3V0IG9mIGxhbmVzIGFuZCBjeWNsZSBiYWNrIHRvIHRoZSBiZWdpbm5pbmcuXG4gIHZhciBsYW5lID0gbmV4dFRyYW5zaXRpb25MYW5lO1xuICBuZXh0VHJhbnNpdGlvbkxhbmUgPDw9IDE7XG5cbiAgaWYgKChuZXh0VHJhbnNpdGlvbkxhbmUgJiBUcmFuc2l0aW9uTGFuZXMpID09PSBOb0xhbmVzKSB7XG4gICAgbmV4dFRyYW5zaXRpb25MYW5lID0gVHJhbnNpdGlvbkxhbmUxO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBjbGFpbU5leHRSZXRyeUxhbmUoKSB7XG4gIHZhciBsYW5lID0gbmV4dFJldHJ5TGFuZTtcbiAgbmV4dFJldHJ5TGFuZSA8PD0gMTtcblxuICBpZiAoKG5leHRSZXRyeUxhbmUgJiBSZXRyeUxhbmVzKSA9PT0gTm9MYW5lcykge1xuICAgIG5leHRSZXRyeUxhbmUgPSBSZXRyeUxhbmUxO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSB7XG4gIHJldHVybiBsYW5lcyAmIC1sYW5lcztcbn1cbmZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lKGxhbmVzKSB7XG4gIC8vIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBnZXRzIGlubGluZWQuIE9ubHkgZXhpc3RzIHNvIHRvIGNvbW11bmljYXRlIHRoYXQgaXRcbiAgLy8gZG9lc24ndCBtYXR0ZXIgd2hpY2ggYml0IGlzIHNlbGVjdGVkOyB5b3UgY2FuIHBpY2sgYW55IGJpdCB3aXRob3V0XG4gIC8vIGFmZmVjdGluZyB0aGUgYWxnb3JpdGhtcyB3aGVyZSBpdHMgdXNlZC4gSGVyZSBJJ20gdXNpbmdcbiAgLy8gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZSBiZWNhdXNlIGl0IHJlcXVpcmVzIHRoZSBmZXdlc3Qgb3BlcmF0aW9ucy5cbiAgcmV0dXJuIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKSB7XG4gIHJldHVybiAzMSAtIGNsejMyKGxhbmVzKTtcbn1cblxuZnVuY3Rpb24gbGFuZVRvSW5kZXgobGFuZSkge1xuICByZXR1cm4gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lKTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXNTb21lTGFuZShhLCBiKSB7XG4gIHJldHVybiAoYSAmIGIpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaXNTdWJzZXRPZkxhbmVzKHNldCwgc3Vic2V0KSB7XG4gIHJldHVybiAoc2V0ICYgc3Vic2V0KSA9PT0gc3Vic2V0O1xufVxuZnVuY3Rpb24gbWVyZ2VMYW5lcyhhLCBiKSB7XG4gIHJldHVybiBhIHwgYjtcbn1cbmZ1bmN0aW9uIHJlbW92ZUxhbmVzKHNldCwgc3Vic2V0KSB7XG4gIHJldHVybiBzZXQgJiB+c3Vic2V0O1xufVxuZnVuY3Rpb24gaW50ZXJzZWN0TGFuZXMoYSwgYikge1xuICByZXR1cm4gYSAmIGI7XG59IC8vIFNlZW1zIHJlZHVuZGFudCwgYnV0IGl0IGNoYW5nZXMgdGhlIHR5cGUgZnJvbSBhIHNpbmdsZSBsYW5lICh1c2VkIGZvclxuLy8gdXBkYXRlcykgdG8gYSBncm91cCBvZiBsYW5lcyAodXNlZCBmb3IgZmx1c2hpbmcgd29yaykuXG5cbmZ1bmN0aW9uIGxhbmVUb0xhbmVzKGxhbmUpIHtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBoaWdoZXJQcmlvcml0eUxhbmUoYSwgYikge1xuICAvLyBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGJpdCByYW5nZXMgZGVjcmVhc2UgaW4gcHJpb3JpdHkgYXMgeW91IGdvIGxlZnQuXG4gIHJldHVybiBhICE9PSBOb0xhbmUgJiYgYSA8IGIgPyBhIDogYjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxhbmVNYXAoaW5pdGlhbCkge1xuICAvLyBJbnRlbnRpb25hbGx5IHB1c2hpbmcgb25lIGJ5IG9uZS5cbiAgLy8gaHR0cHM6Ly92OC5kZXYvYmxvZy9lbGVtZW50cy1raW5kcyNhdm9pZC1jcmVhdGluZy1ob2xlc1xuICB2YXIgbGFuZU1hcCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgVG90YWxMYW5lczsgaSsrKSB7XG4gICAgbGFuZU1hcC5wdXNoKGluaXRpYWwpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmVNYXA7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgdXBkYXRlTGFuZSkge1xuICByb290LnBlbmRpbmdMYW5lcyB8PSB1cGRhdGVMYW5lOyAvLyBJZiB0aGVyZSBhcmUgYW55IHN1c3BlbmRlZCB0cmFuc2l0aW9ucywgaXQncyBwb3NzaWJsZSB0aGlzIG5ldyB1cGRhdGVcbiAgLy8gY291bGQgdW5ibG9jayB0aGVtLiBDbGVhciB0aGUgc3VzcGVuZGVkIGxhbmVzIHNvIHRoYXQgd2UgY2FuIHRyeSByZW5kZXJpbmdcbiAgLy8gdGhlbSBhZ2Fpbi5cbiAgLy9cbiAgLy8gVE9ETzogV2UgcmVhbGx5IG9ubHkgbmVlZCB0byB1bnN1c3BlbmQgb25seSBsYW5lcyB0aGF0IGFyZSBpbiB0aGVcbiAgLy8gYHN1YnRyZWVMYW5lc2Agb2YgdGhlIHVwZGF0ZWQgZmliZXIsIG9yIHRoZSB1cGRhdGUgbGFuZXMgb2YgdGhlIHJldHVyblxuICAvLyBwYXRoLiBUaGlzIHdvdWxkIGV4Y2x1ZGUgc3VzcGVuZGVkIHVwZGF0ZXMgaW4gYW4gdW5yZWxhdGVkIHNpYmxpbmcgdHJlZSxcbiAgLy8gc2luY2UgdGhlcmUncyBubyB3YXkgZm9yIHRoaXMgdXBkYXRlIHRvIHVuYmxvY2sgaXQuXG4gIC8vXG4gIC8vIFdlIGRvbid0IGRvIHRoaXMgaWYgdGhlIGluY29taW5nIHVwZGF0ZSBpcyBpZGxlLCBiZWNhdXNlIHdlIG5ldmVyIHByb2Nlc3NcbiAgLy8gaWRsZSB1cGRhdGVzIHVudGlsIGFmdGVyIGFsbCB0aGUgcmVndWxhciB1cGRhdGVzIGhhdmUgZmluaXNoZWQ7IHRoZXJlJ3Mgbm9cbiAgLy8gd2F5IGl0IGNvdWxkIHVuYmxvY2sgYSB0cmFuc2l0aW9uLlxuXG4gIGlmICh1cGRhdGVMYW5lICE9PSBJZGxlTGFuZSkge1xuICAgIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHJvb3QucGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHN1c3BlbmRlZExhbmVzLCBzcGF3bmVkTGFuZSkge1xuICByb290LnN1c3BlbmRlZExhbmVzIHw9IHN1c3BlbmRlZExhbmVzO1xuICByb290LnBpbmdlZExhbmVzICY9IH5zdXNwZW5kZWRMYW5lczsgLy8gVGhlIHN1c3BlbmRlZCBsYW5lcyBhcmUgbm8gbG9uZ2VyIENQVS1ib3VuZC4gQ2xlYXIgdGhlaXIgZXhwaXJhdGlvbiB0aW1lcy5cblxuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7XG4gIHZhciBsYW5lcyA9IHN1c3BlbmRlZExhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG5cbiAgaWYgKHNwYXduZWRMYW5lICE9PSBOb0xhbmUpIHtcbiAgICBtYXJrU3Bhd25lZERlZmVycmVkTGFuZShyb290LCBzcGF3bmVkTGFuZSwgc3VzcGVuZGVkTGFuZXMpO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdFBpbmdlZChyb290LCBwaW5nZWRMYW5lcykge1xuICByb290LnBpbmdlZExhbmVzIHw9IHJvb3Quc3VzcGVuZGVkTGFuZXMgJiBwaW5nZWRMYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMsIHNwYXduZWRMYW5lKSB7XG4gIHZhciBub0xvbmdlclBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgfnJlbWFpbmluZ0xhbmVzO1xuICByb290LnBlbmRpbmdMYW5lcyA9IHJlbWFpbmluZ0xhbmVzOyAvLyBMZXQncyB0cnkgZXZlcnl0aGluZyBhZ2FpblxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSBOb0xhbmVzO1xuICByb290LnBpbmdlZExhbmVzID0gTm9MYW5lcztcbiAgcm9vdC5leHBpcmVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QuZW50YW5nbGVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlciA9IDA7XG4gIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7XG4gIHZhciBoaWRkZW5VcGRhdGVzID0gcm9vdC5oaWRkZW5VcGRhdGVzOyAvLyBDbGVhciB0aGUgbGFuZXMgdGhhdCBubyBsb25nZXIgaGF2ZSBwZW5kaW5nIHdvcmtcblxuICB2YXIgbGFuZXMgPSBub0xvbmdlclBlbmRpbmdMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdID0gTm9MYW5lcztcbiAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgdmFyIGhpZGRlblVwZGF0ZXNGb3JMYW5lID0gaGlkZGVuVXBkYXRlc1tpbmRleF07XG5cbiAgICBpZiAoaGlkZGVuVXBkYXRlc0ZvckxhbmUgIT09IG51bGwpIHtcbiAgICAgIGhpZGRlblVwZGF0ZXNbaW5kZXhdID0gbnVsbDsgLy8gXCJIaWRkZW5cIiB1cGRhdGVzIGFyZSB1cGRhdGVzIHRoYXQgd2VyZSBtYWRlIHRvIGEgaGlkZGVuIGNvbXBvbmVudC4gVGhleVxuICAgICAgLy8gaGF2ZSBzcGVjaWFsIGxvZ2ljIGFzc29jaWF0ZWQgd2l0aCB0aGVtIGJlY2F1c2UgdGhleSBtYXkgYmUgZW50YW5nbGVkXG4gICAgICAvLyB3aXRoIHVwZGF0ZXMgdGhhdCBvY2N1ciBvdXRzaWRlIHRoYXQgdHJlZS4gQnV0IG9uY2UgdGhlIG91dGVyIHRyZWVcbiAgICAgIC8vIGNvbW1pdHMsIHRoZXkgYmVoYXZlIGxpa2UgcmVndWxhciB1cGRhdGVzLlxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpZGRlblVwZGF0ZXNGb3JMYW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB1cGRhdGUgPSBoaWRkZW5VcGRhdGVzRm9yTGFuZVtpXTtcblxuICAgICAgICBpZiAodXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdXBkYXRlLmxhbmUgJj0gfk9mZnNjcmVlbkxhbmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxuXG4gIGlmIChzcGF3bmVkTGFuZSAhPT0gTm9MYW5lKSB7XG4gICAgbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIC8vIFRoaXMgcmVuZGVyIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSB3aXRob3V0IHN1c3BlbmRpbmcsIHNvIHdlIGRvbid0IG5lZWRcbiAgICAvLyB0byBlbnRhbmdsZSB0aGUgc3Bhd25lZCB0YXNrIHdpdGggdGhlIHBhcmVudCB0YXNrLlxuICAgIE5vTGFuZXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTcGF3bmVkRGVmZXJyZWRMYW5lKHJvb3QsIHNwYXduZWRMYW5lLCBlbnRhbmdsZWRMYW5lcykge1xuICAvLyBUaGlzIHJlbmRlciBzcGF3bmVkIGEgZGVmZXJyZWQgdGFzay4gTWFyayBpdCBhcyBwZW5kaW5nLlxuICByb290LnBlbmRpbmdMYW5lcyB8PSBzcGF3bmVkTGFuZTtcbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyAmPSB+c3Bhd25lZExhbmU7IC8vIEVudGFuZ2xlIHRoZSBzcGF3bmVkIGxhbmUgd2l0aCB0aGUgRGVmZXJyZWRMYW5lIGJpdCBzbyB0aGF0IHdlIGtub3cgaXRcbiAgLy8gd2FzIHRoZSByZXN1bHQgb2YgYW5vdGhlciByZW5kZXIuIFRoaXMgbGV0cyB1cyBhdm9pZCBhIHVzZURlZmVycmVkVmFsdWVcbiAgLy8gd2F0ZXJmYWxsIOKAlCBvbmx5IHRoZSBmaXJzdCBsZXZlbCB3aWxsIGRlZmVyLlxuXG4gIHZhciBzcGF3bmVkTGFuZUluZGV4ID0gbGFuZVRvSW5kZXgoc3Bhd25lZExhbmUpO1xuICByb290LmVudGFuZ2xlZExhbmVzIHw9IHNwYXduZWRMYW5lO1xuICByb290LmVudGFuZ2xlbWVudHNbc3Bhd25lZExhbmVJbmRleF0gfD0gRGVmZXJyZWRMYW5lIHwgLy8gSWYgdGhlIHBhcmVudCByZW5kZXIgdGFzayBzdXNwZW5kZWQsIHdlIG11c3QgYWxzbyBlbnRhbmdsZSB0aG9zZSBsYW5lc1xuICAvLyB3aXRoIHRoZSBzcGF3bmVkIHRhc2ssIHNvIHRoYXQgdGhlIGRlZmVycmVkIHRhc2sgaW5jbHVkZXMgYWxsIHRoZSBzYW1lXG4gIC8vIHVwZGF0ZXMgdGhhdCB0aGUgcGFyZW50IHRhc2sgZGlkLiBXZSBjYW4gZXhjbHVkZSBhbnkgbGFuZSB0aGF0IGlzIG5vdFxuICAvLyB1c2VkIGZvciB1cGRhdGVzIChlLmcuIE9mZnNjcmVlbikuXG4gIGVudGFuZ2xlZExhbmVzICYgVXBkYXRlTGFuZXM7XG59XG5cbmZ1bmN0aW9uIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIGVudGFuZ2xlZExhbmVzKSB7XG4gIC8vIEluIGFkZGl0aW9uIHRvIGVudGFuZ2xpbmcgZWFjaCBvZiB0aGUgZ2l2ZW4gbGFuZXMgd2l0aCBlYWNoIG90aGVyLCB3ZSBhbHNvXG4gIC8vIGhhdmUgdG8gY29uc2lkZXIgX3RyYW5zaXRpdmVfIGVudGFuZ2xlbWVudHMuIEZvciBlYWNoIGxhbmUgdGhhdCBpcyBhbHJlYWR5XG4gIC8vIGVudGFuZ2xlZCB3aXRoICphbnkqIG9mIHRoZSBnaXZlbiBsYW5lcywgdGhhdCBsYW5lIGlzIG5vdyB0cmFuc2l0aXZlbHlcbiAgLy8gZW50YW5nbGVkIHdpdGggKmFsbCogdGhlIGdpdmVuIGxhbmVzLlxuICAvL1xuICAvLyBUcmFuc2xhdGVkOiBJZiBDIGlzIGVudGFuZ2xlZCB3aXRoIEEsIHRoZW4gZW50YW5nbGluZyBBIHdpdGggQiBhbHNvXG4gIC8vIGVudGFuZ2xlcyBDIHdpdGggQi5cbiAgLy9cbiAgLy8gSWYgdGhpcyBpcyBoYXJkIHRvIGdyYXNwLCBpdCBtaWdodCBoZWxwIHRvIGludGVudGlvbmFsbHkgYnJlYWsgdGhpc1xuICAvLyBmdW5jdGlvbiBhbmQgbG9vayBhdCB0aGUgdGVzdHMgdGhhdCBmYWlsIGluIFJlYWN0VHJhbnNpdGlvbi10ZXN0LmpzLiBUcnlcbiAgLy8gY29tbWVudGluZyBvdXQgb25lIG9mIHRoZSBjb25kaXRpb25zIGJlbG93LlxuICB2YXIgcm9vdEVudGFuZ2xlZExhbmVzID0gcm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBlbnRhbmdsZWRMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBsYW5lcyA9IHJvb3RFbnRhbmdsZWRMYW5lcztcblxuICB3aGlsZSAobGFuZXMpIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG5cbiAgICBpZiAoIC8vIElzIHRoaXMgb25lIG9mIHRoZSBuZXdseSBlbnRhbmdsZWQgbGFuZXM/XG4gICAgbGFuZSAmIGVudGFuZ2xlZExhbmVzIHwgLy8gSXMgdGhpcyBsYW5lIHRyYW5zaXRpdmVseSBlbnRhbmdsZWQgd2l0aCB0aGUgbmV3bHkgZW50YW5nbGVkIGxhbmVzP1xuICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdICYgZW50YW5nbGVkTGFuZXMpIHtcbiAgICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdIHw9IGVudGFuZ2xlZExhbmVzO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiB1cGdyYWRlUGVuZGluZ0xhbmVUb1N5bmMocm9vdCwgbGFuZSkge1xuICAvLyBTaW5jZSB3ZSdyZSB1cGdyYWRpbmcgdGhlIHByaW9yaXR5IG9mIHRoZSBnaXZlbiBsYW5lLCB0aGVyZSBpcyBub3cgcGVuZGluZ1xuICAvLyBzeW5jIHdvcmsuXG4gIHJvb3QucGVuZGluZ0xhbmVzIHw9IFN5bmNMYW5lOyAvLyBFbnRhbmdsZSB0aGUgc3luYyBsYW5lIHdpdGggdGhlIGxhbmUgd2UncmUgdXBncmFkaW5nLiBUaGlzIG1lYW5zIFN5bmNMYW5lXG4gIC8vIHdpbGwgbm90IGJlIGFsbG93ZWQgdG8gZmluaXNoIHdpdGhvdXQgYWxzbyBmaW5pc2hpbmcgdGhlIGdpdmVuIGxhbmUuXG5cbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBTeW5jTGFuZTtcbiAgcm9vdC5lbnRhbmdsZW1lbnRzW1N5bmNMYW5lSW5kZXhdIHw9IGxhbmU7XG59XG5mdW5jdGlvbiB1cGdyYWRlUGVuZGluZ0xhbmVzVG9TeW5jKHJvb3QsIGxhbmVzVG9VcGdyYWRlKSB7XG4gIC8vIFNhbWUgYXMgdXBncmFkZVBlbmRpbmdMYW5lVG9TeW5jIGJ1dCBhY2NlcHRzIG11bHRpcGxlIGxhbmVzLCBzbyBpdCdzIGFcbiAgLy8gYml0IHNsb3dlci5cbiAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gU3luY0xhbmU7XG4gIHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gU3luY0xhbmU7XG4gIHZhciBsYW5lcyA9IGxhbmVzVG9VcGdyYWRlO1xuXG4gIHdoaWxlIChsYW5lcykge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICByb290LmVudGFuZ2xlbWVudHNbU3luY0xhbmVJbmRleF0gfD0gbGFuZTtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya0hpZGRlblVwZGF0ZShyb290LCB1cGRhdGUsIGxhbmUpIHtcbiAgdmFyIGluZGV4ID0gbGFuZVRvSW5kZXgobGFuZSk7XG4gIHZhciBoaWRkZW5VcGRhdGVzID0gcm9vdC5oaWRkZW5VcGRhdGVzO1xuICB2YXIgaGlkZGVuVXBkYXRlc0ZvckxhbmUgPSBoaWRkZW5VcGRhdGVzW2luZGV4XTtcblxuICBpZiAoaGlkZGVuVXBkYXRlc0ZvckxhbmUgPT09IG51bGwpIHtcbiAgICBoaWRkZW5VcGRhdGVzW2luZGV4XSA9IFt1cGRhdGVdO1xuICB9IGVsc2Uge1xuICAgIGhpZGRlblVwZGF0ZXNGb3JMYW5lLnB1c2godXBkYXRlKTtcbiAgfVxuXG4gIHVwZGF0ZS5sYW5lID0gbGFuZSB8IE9mZnNjcmVlbkxhbmU7XG59XG5mdW5jdGlvbiBnZXRCdW1wZWRMYW5lRm9ySHlkcmF0aW9uKHJvb3QsIHJlbmRlckxhbmVzKSB7XG4gIHZhciByZW5kZXJMYW5lID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShyZW5kZXJMYW5lcyk7XG4gIHZhciBsYW5lO1xuXG4gIGlmICgocmVuZGVyTGFuZSAmIFN5bmNVcGRhdGVMYW5lcykgIT09IE5vTGFuZSkge1xuICAgIGxhbmUgPSBTeW5jSHlkcmF0aW9uTGFuZTtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHJlbmRlckxhbmUpIHtcbiAgICAgIGNhc2UgU3luY0xhbmU6XG4gICAgICAgIGxhbmUgPSBTeW5jSHlkcmF0aW9uTGFuZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZTpcbiAgICAgICAgbGFuZSA9IElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIERlZmF1bHRMYW5lOlxuICAgICAgICBsYW5lID0gRGVmYXVsdEh5ZHJhdGlvbkxhbmU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTpcbiAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUyOlxuICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTM6XG4gICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNDpcbiAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU1OlxuICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTY6XG4gICAgICBjYXNlIFRyYW5zaXRpb25MYW5lNzpcbiAgICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU4OlxuICAgICAgY2FzZSBUcmFuc2l0aW9uTGFuZTk6XG4gICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTA6XG4gICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTE6XG4gICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTI6XG4gICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTM6XG4gICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTQ6XG4gICAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTU6XG4gICAgICBjYXNlIFJldHJ5TGFuZTE6XG4gICAgICBjYXNlIFJldHJ5TGFuZTI6XG4gICAgICBjYXNlIFJldHJ5TGFuZTM6XG4gICAgICBjYXNlIFJldHJ5TGFuZTQ6XG4gICAgICAgIGxhbmUgPSBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSWRsZUxhbmU6XG4gICAgICAgIGxhbmUgPSBJZGxlSHlkcmF0aW9uTGFuZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpcyBhbHJlYWR5IGVpdGhlciBhIGh5ZHJhdGlvbiBsYW5lLCBvciBzaG91bGRuJ3RcbiAgICAgICAgLy8gYmUgcmV0cmllZCBhdCBhIGh5ZHJhdGlvbiBsYW5lLlxuICAgICAgICBsYW5lID0gTm9MYW5lO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0gLy8gQ2hlY2sgaWYgdGhlIGxhbmUgd2UgY2hvc2UgaXMgc3VzcGVuZGVkLiBJZiBzbywgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZVxuICAvLyBhbHJlYWR5IGF0dGVtcHRlZCBhbmQgZmFpbGVkIHRvIGh5ZHJhdGUgYXQgdGhhdCBsZXZlbC4gQWxzbyBjaGVjayBpZiB3ZSdyZVxuICAvLyBhbHJlYWR5IHJlbmRlcmluZyB0aGF0IGxhbmUsIHdoaWNoIGlzIHJhcmUgYnV0IGNvdWxkIGhhcHBlbi5cblxuXG4gIGlmICgobGFuZSAmIChyb290LnN1c3BlbmRlZExhbmVzIHwgcmVuZGVyTGFuZXMpKSAhPT0gTm9MYW5lKSB7XG4gICAgLy8gR2l2ZSB1cCB0cnlpbmcgdG8gaHlkcmF0ZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCByZW5kZXIuXG4gICAgcmV0dXJuIE5vTGFuZTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gYWRkRmliZXJUb0xhbmVzTWFwKHJvb3QsIGZpYmVyLCBsYW5lcykge1xuXG4gIGlmICghaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGVuZGluZ1VwZGF0ZXJzTGFuZU1hcCA9IHJvb3QucGVuZGluZ1VwZGF0ZXJzTGFuZU1hcDtcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gbGFuZVRvSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICB2YXIgdXBkYXRlcnMgPSBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwW2luZGV4XTtcbiAgICB1cGRhdGVycy5hZGQoZmliZXIpO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtb3ZlUGVuZGluZ0ZpYmVyc1RvTWVtb2l6ZWQocm9vdCwgbGFuZXMpIHtcblxuICBpZiAoIWlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBlbmRpbmdVcGRhdGVyc0xhbmVNYXAgPSByb290LnBlbmRpbmdVcGRhdGVyc0xhbmVNYXA7XG4gIHZhciBtZW1vaXplZFVwZGF0ZXJzID0gcm9vdC5tZW1vaXplZFVwZGF0ZXJzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBsYW5lVG9JbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciB1cGRhdGVycyA9IHBlbmRpbmdVcGRhdGVyc0xhbmVNYXBbaW5kZXhdO1xuXG4gICAgaWYgKHVwZGF0ZXJzLnNpemUgPiAwKSB7XG4gICAgICB1cGRhdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgIGlmIChhbHRlcm5hdGUgPT09IG51bGwgfHwgIW1lbW9pemVkVXBkYXRlcnMuaGFzKGFsdGVybmF0ZSkpIHtcbiAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmFkZChmaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdXBkYXRlcnMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbnNGb3JMYW5lcyhyb290LCBsYW5lcykge1xuICB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxudmFyIERpc2NyZXRlRXZlbnRQcmlvcml0eSA9IFN5bmNMYW5lO1xudmFyIENvbnRpbnVvdXNFdmVudFByaW9yaXR5ID0gSW5wdXRDb250aW51b3VzTGFuZTtcbnZhciBEZWZhdWx0RXZlbnRQcmlvcml0eSA9IERlZmF1bHRMYW5lO1xudmFyIElkbGVFdmVudFByaW9yaXR5ID0gSWRsZUxhbmU7XG52YXIgY3VycmVudFVwZGF0ZVByaW9yaXR5ID0gTm9MYW5lO1xuZnVuY3Rpb24gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCkge1xuICByZXR1cm4gY3VycmVudFVwZGF0ZVByaW9yaXR5O1xufVxuZnVuY3Rpb24gc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KG5ld1ByaW9yaXR5KSB7XG4gIGN1cnJlbnRVcGRhdGVQcmlvcml0eSA9IG5ld1ByaW9yaXR5O1xufVxuZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5LCBmbikge1xuICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IGN1cnJlbnRVcGRhdGVQcmlvcml0eTtcblxuICB0cnkge1xuICAgIGN1cnJlbnRVcGRhdGVQcmlvcml0eSA9IHByaW9yaXR5O1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRVcGRhdGVQcmlvcml0eSA9IHByZXZpb3VzUHJpb3JpdHk7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZ2hlckV2ZW50UHJpb3JpdHkoYSwgYikge1xuICByZXR1cm4gYSAhPT0gMCAmJiBhIDwgYiA/IGEgOiBiO1xufVxuZnVuY3Rpb24gbG93ZXJFdmVudFByaW9yaXR5KGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IDAgfHwgYSA+IGIgPyBhIDogYjtcbn1cbmZ1bmN0aW9uIGlzSGlnaGVyRXZlbnRQcmlvcml0eShhLCBiKSB7XG4gIHJldHVybiBhICE9PSAwICYmIGEgPCBiO1xufVxuZnVuY3Rpb24gbGFuZXNUb0V2ZW50UHJpb3JpdHkobGFuZXMpIHtcbiAgdmFyIGxhbmUgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKTtcblxuICBpZiAoIWlzSGlnaGVyRXZlbnRQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHksIGxhbmUpKSB7XG4gICAgcmV0dXJuIERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgfVxuXG4gIGlmICghaXNIaWdoZXJFdmVudFByaW9yaXR5KENvbnRpbnVvdXNFdmVudFByaW9yaXR5LCBsYW5lKSkge1xuICAgIHJldHVybiBDb250aW51b3VzRXZlbnRQcmlvcml0eTtcbiAgfVxuXG4gIGlmIChpbmNsdWRlc05vbklkbGVXb3JrKGxhbmUpKSB7XG4gICAgcmV0dXJuIERlZmF1bHRFdmVudFByaW9yaXR5O1xuICB9XG5cbiAgcmV0dXJuIElkbGVFdmVudFByaW9yaXR5O1xufVxuXG4vLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKlxuICogVGhlIGAnJyArIHZhbHVlYCBwYXR0ZXJuICh1c2VkIGluIHBlcmYtc2Vuc2l0aXZlIGNvZGUpIHRocm93cyBmb3IgU3ltYm9sXG4gKiBhbmQgVGVtcG9yYWwuKiB0eXBlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzIyMDY0LlxuICpcbiAqIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgd2lsbCB0aHJvdyBhbiBlYXNpZXItdG8tdW5kZXJzdGFuZCxcbiAqIGVhc2llci10by1kZWJ1ZyBleGNlcHRpb24gd2l0aCBhIGNsZWFyIGVycm9ycyBtZXNzYWdlIG1lc3NhZ2UgZXhwbGFpbmluZyB0aGVcbiAqIHByb2JsZW0uIChJbnN0ZWFkIG9mIGEgY29uZnVzaW5nIGV4Y2VwdGlvbiB0aHJvd24gaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvblxuICogb2YgdGhlIGB2YWx1ZWAgb2JqZWN0KS5cbiAqL1xuLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cbmZ1bmN0aW9uIHR5cGVOYW1lKHZhbHVlKSB7XG4gIHtcbiAgICAvLyB0b1N0cmluZ1RhZyBpcyBuZWVkZWQgZm9yIG5hbWVzcGFjZWQgdHlwZXMgbGlrZSBUZW1wb3JhbC5JbnN0YW50XG4gICAgdmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wudG9TdHJpbmdUYWc7XG4gICAgdmFyIHR5cGUgPSBoYXNUb1N0cmluZ1RhZyAmJiB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddIHx8IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ09iamVjdCc7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG59IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5cblxuZnVuY3Rpb24gd2lsbENvZXJjaW9uVGhyb3codmFsdWUpIHtcbiAge1xuICAgIHRyeSB7XG4gICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgLy8gSWYgeW91IGVuZGVkIHVwIGhlcmUgYnkgZm9sbG93aW5nIGFuIGV4Y2VwdGlvbiBjYWxsIHN0YWNrLCBoZXJlJ3Mgd2hhdCdzXG4gIC8vIGhhcHBlbmVkOiB5b3Ugc3VwcGxpZWQgYW4gb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBSZWFjdCAoYXMgYSBwcm9wLCBrZXksXG4gIC8vIERPTSBhdHRyaWJ1dGUsIENTUyBwcm9wZXJ0eSwgc3RyaW5nIHJlZiwgZXRjLikgYW5kIHdoZW4gUmVhY3QgdHJpZWQgdG9cbiAgLy8gY29lcmNlIGl0IHRvIGEgc3RyaW5nIHVzaW5nIGAnJyArIHZhbHVlYCwgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uXG4gIC8vXG4gIC8vIFRoZSBtb3N0IGNvbW1vbiB0eXBlcyB0aGF0IHdpbGwgY2F1c2UgdGhpcyBleGNlcHRpb24gYXJlIGBTeW1ib2xgIGluc3RhbmNlc1xuICAvLyBhbmQgVGVtcG9yYWwgb2JqZWN0cyBsaWtlIGBUZW1wb3JhbC5JbnN0YW50YC4gQnV0IGFueSBvYmplY3QgdGhhdCBoYXMgYVxuICAvLyBgdmFsdWVPZmAgb3IgYFtTeW1ib2wudG9QcmltaXRpdmVdYCBtZXRob2QgdGhhdCB0aHJvd3Mgd2lsbCBhbHNvIGNhdXNlIHRoaXNcbiAgLy8gZXhjZXB0aW9uLiAoTGlicmFyeSBhdXRob3JzIGRvIHRoaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIHVzaW5nIGJ1aWx0LWluXG4gIC8vIG51bWVyaWMgb3BlcmF0b3JzIGxpa2UgYCtgIG9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGxpa2UgYD49YCBiZWNhdXNlIGN1c3RvbVxuICAvLyBtZXRob2RzIGFyZSBuZWVkZWQgdG8gcGVyZm9ybSBhY2N1cmF0ZSBhcml0aG1ldGljIG9yIGNvbXBhcmlzb24uKVxuICAvL1xuICAvLyBUbyBmaXggdGhlIHByb2JsZW0sIGNvZXJjZSB0aGlzIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXG4gIC8vIHBhc3NpbmcgaXQgdG8gUmVhY3QuIFRoZSBtb3N0IHJlbGlhYmxlIHdheSBpcyB1c3VhbGx5IGBTdHJpbmcodmFsdWUpYC5cbiAgLy9cbiAgLy8gVG8gZmluZCB3aGljaCB2YWx1ZSBpcyB0aHJvd2luZywgY2hlY2sgdGhlIGJyb3dzZXIgb3IgZGVidWdnZXIgY29uc29sZS5cbiAgLy8gQmVmb3JlIHRoaXMgZXhjZXB0aW9uIHdhcyB0aHJvd24sIHRoZXJlIHNob3VsZCBiZSBgY29uc29sZS5lcnJvcmAgb3V0cHV0XG4gIC8vIHRoYXQgc2hvd3MgdGhlIHR5cGUgKFN5bWJvbCwgVGVtcG9yYWwuUGxhaW5EYXRlLCBldGMuKSB0aGF0IGNhdXNlZCB0aGVcbiAgLy8gcHJvYmxlbSBhbmQgaG93IHRoYXQgdHlwZSB3YXMgdXNlZDoga2V5LCBhdHJyaWJ1dGUsIGlucHV0IHZhbHVlIHByb3AsIGV0Yy5cbiAgLy8gSW4gbW9zdCBjYXNlcywgdGhpcyBjb25zb2xlIG91dHB1dCBhbHNvIHNob3dzIHRoZSBjb21wb25lbnQgYW5kIGl0c1xuICAvLyBhbmNlc3RvciBjb21wb25lbnRzIHdoZXJlIHRoZSBleGNlcHRpb24gaGFwcGVuZWQuXG4gIC8vXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgYXR0cmlidXRlTmFtZSkge1xuICB7XG4gICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1RoZSBwcm92aWRlZCBgJXNgIGF0dHJpYnV0ZSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIGF0dHJpYnV0ZU5hbWUsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICB7XG4gICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1RoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4nICsgJyBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCB0eXBlTmFtZSh2YWx1ZSkpO1xuXG4gICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTsgLy8gdGhyb3cgKHRvIGhlbHAgY2FsbGVycyBmaW5kIHRyb3VibGVzaG9vdGluZyBjb21tZW50cylcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNoZWNrUHJvcFN0cmluZ0NvZXJjaW9uKHZhbHVlLCBwcm9wTmFtZSkge1xuICB7XG4gICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1RoZSBwcm92aWRlZCBgJXNgIHByb3AgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4nICsgJyBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCBwcm9wTmFtZSwgdHlwZU5hbWUodmFsdWUpKTtcblxuICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BOYW1lKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGAlc2AgQ1NTIHByb3BlcnR5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuJyArICcgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuJywgcHJvcE5hbWUsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY2hlY2tIdG1sU3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAge1xuICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdUaGUgcHJvdmlkZWQgSFRNTCBtYXJrdXAgdXNlcyBhIHZhbHVlIG9mIHVuc3VwcG9ydGVkIHR5cGUgJXMuJyArICcgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuJywgdHlwZU5hbWUodmFsdWUpKTtcblxuICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAge1xuICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdGb3JtIGZpZWxkIHZhbHVlcyAodmFsdWUsIGNoZWNrZWQsIGRlZmF1bHRWYWx1ZSwgb3IgZGVmYXVsdENoZWNrZWQgcHJvcHMpJyArICcgbXVzdCBiZSBzdHJpbmdzLCBub3QgJXMuJyArICcgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuJywgdHlwZU5hbWUodmFsdWUpKTtcblxuICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXG4gICAgfVxuICB9XG59XG5cbnZhciBGdW5jdGlvbkNvbXBvbmVudCA9IDA7XG52YXIgQ2xhc3NDb21wb25lbnQgPSAxO1xudmFyIEluZGV0ZXJtaW5hdGVDb21wb25lbnQgPSAyOyAvLyBCZWZvcmUgd2Uga25vdyB3aGV0aGVyIGl0IGlzIGZ1bmN0aW9uIG9yIGNsYXNzXG5cbnZhciBIb3N0Um9vdCA9IDM7IC8vIFJvb3Qgb2YgYSBob3N0IHRyZWUuIENvdWxkIGJlIG5lc3RlZCBpbnNpZGUgYW5vdGhlciBub2RlLlxuXG52YXIgSG9zdFBvcnRhbCA9IDQ7IC8vIEEgc3VidHJlZS4gQ291bGQgYmUgYW4gZW50cnkgcG9pbnQgdG8gYSBkaWZmZXJlbnQgcmVuZGVyZXIuXG5cbnZhciBIb3N0Q29tcG9uZW50ID0gNTtcbnZhciBIb3N0VGV4dCA9IDY7XG52YXIgRnJhZ21lbnQgPSA3O1xudmFyIE1vZGUgPSA4O1xudmFyIENvbnRleHRDb25zdW1lciA9IDk7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gMTA7XG52YXIgRm9yd2FyZFJlZiA9IDExO1xudmFyIFByb2ZpbGVyID0gMTI7XG52YXIgU3VzcGVuc2VDb21wb25lbnQgPSAxMztcbnZhciBNZW1vQ29tcG9uZW50ID0gMTQ7XG52YXIgU2ltcGxlTWVtb0NvbXBvbmVudCA9IDE1O1xudmFyIExhenlDb21wb25lbnQgPSAxNjtcbnZhciBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQgPSAxNztcbnZhciBEZWh5ZHJhdGVkRnJhZ21lbnQgPSAxODtcbnZhciBTdXNwZW5zZUxpc3RDb21wb25lbnQgPSAxOTtcbnZhciBTY29wZUNvbXBvbmVudCA9IDIxO1xudmFyIE9mZnNjcmVlbkNvbXBvbmVudCA9IDIyO1xudmFyIExlZ2FjeUhpZGRlbkNvbXBvbmVudCA9IDIzO1xudmFyIENhY2hlQ29tcG9uZW50ID0gMjQ7XG52YXIgVHJhY2luZ01hcmtlckNvbXBvbmVudCA9IDI1O1xudmFyIEhvc3RIb2lzdGFibGUgPSAyNjtcbnZhciBIb3N0U2luZ2xldG9uID0gMjc7XG5cbnZhciByYW5kb21LZXkgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbnZhciBpbnRlcm5hbEluc3RhbmNlS2V5ID0gJ19fcmVhY3RGaWJlciQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsUHJvcHNLZXkgPSAnX19yZWFjdFByb3BzJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleSA9ICdfX3JlYWN0Q29udGFpbmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5ID0gJ19fcmVhY3RFdmVudHMkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbEV2ZW50SGFuZGxlckxpc3RlbmVyc0tleSA9ICdfX3JlYWN0TGlzdGVuZXJzJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxFdmVudEhhbmRsZXNTZXRLZXkgPSAnX19yZWFjdEhhbmRsZXMkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbFJvb3ROb2RlUmVzb3VyY2VzS2V5ID0gJ19fcmVhY3RSZXNvdXJjZXMkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbEhvaXN0YWJsZU1hcmtlciA9ICdfX3JlYWN0TWFya2VyJCcgKyByYW5kb21LZXk7XG5mdW5jdGlvbiBkZXRhY2hEZWxldGVkSW5zdGFuY2Uobm9kZSkge1xuICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIG9uIGhvc3QgY29tcG9uZW50cy4gSSBkb24ndCB0aGluayBhbGwgb2ZcbiAgLy8gdGhlc2UgZmllbGRzIGFyZSByZWxldmFudC5cbiAgZGVsZXRlIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG4gIGRlbGV0ZSBub2RlW2ludGVybmFsUHJvcHNLZXldO1xuICBkZWxldGUgbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldO1xuICBkZWxldGUgbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlckxpc3RlbmVyc0tleV07XG4gIGRlbGV0ZSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVzU2V0S2V5XTtcbn1cbmZ1bmN0aW9uIHByZWNhY2hlRmliZXJOb2RlKGhvc3RJbnN0LCBub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBob3N0SW5zdDtcbn1cbmZ1bmN0aW9uIG1hcmtDb250YWluZXJBc1Jvb3QoaG9zdFJvb3QsIG5vZGUpIHtcbiAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBob3N0Um9vdDtcbn1cbmZ1bmN0aW9uIHVubWFya0NvbnRhaW5lckFzUm9vdChub2RlKSB7XG4gIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQ29udGFpbmVyTWFya2VkQXNSb290KG5vZGUpIHtcbiAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIHJldHVybiAhIW5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV07XG59IC8vIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgY2xvc2VzdCBIb3N0Q29tcG9uZW50IG9yIEhvc3RUZXh0IGZpYmVyIGFuY2VzdG9yLlxuLy8gSWYgdGhlIHRhcmdldCBub2RlIGlzIHBhcnQgb2YgYSBoeWRyYXRlZCBvciBub3QgeWV0IHJlbmRlcmVkIHN1YnRyZWUsIHRoZW5cbi8vIHRoaXMgbWF5IGFsc28gcmV0dXJuIGEgU3VzcGVuc2VDb21wb25lbnQgb3IgSG9zdFJvb3QgdG8gaW5kaWNhdGUgdGhhdC5cbi8vIENvbmNlcHR1YWxseSB0aGUgSG9zdFJvb3QgZmliZXIgaXMgYSBjaGlsZCBvZiB0aGUgQ29udGFpbmVyIG5vZGUuIFNvIGlmIHlvdVxuLy8gcGFzcyB0aGUgQ29udGFpbmVyIG5vZGUgYXMgdGhlIHRhcmdldE5vZGUsIHlvdSB3aWxsIG5vdCBhY3R1YWxseSBnZXQgdGhlXG4vLyBIb3N0Um9vdCBiYWNrLiBUbyBnZXQgdG8gdGhlIEhvc3RSb290LCB5b3UgbmVlZCB0byBwYXNzIGEgY2hpbGQgb2YgaXQuXG4vLyBUaGUgc2FtZSB0aGluZyBhcHBsaWVzIHRvIFN1c3BlbnNlIGJvdW5kYXJpZXMuXG5cbmZ1bmN0aW9uIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpIHtcbiAgdmFyIHRhcmdldEluc3QgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgLy8gRG9uJ3QgcmV0dXJuIEhvc3RSb290IG9yIFN1c3BlbnNlQ29tcG9uZW50IGhlcmUuXG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH0gLy8gSWYgdGhlIGRpcmVjdCBldmVudCB0YXJnZXQgaXNuJ3QgYSBSZWFjdCBvd25lZCBET00gbm9kZSwgd2UgbmVlZCB0byBsb29rXG4gIC8vIHRvIHNlZSBpZiBvbmUgb2YgaXRzIHBhcmVudHMgaXMgYSBSZWFjdCBvd25lZCBET00gbm9kZS5cblxuXG4gIHZhciBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuXG4gIHdoaWxlIChwYXJlbnROb2RlKSB7XG4gICAgLy8gV2UnbGwgY2hlY2sgaWYgdGhpcyBpcyBhIGNvbnRhaW5lciByb290IHRoYXQgY291bGQgaW5jbHVkZVxuICAgIC8vIFJlYWN0IG5vZGVzIGluIHRoZSBmdXR1cmUuIFdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmaXJzdCBiZWNhdXNlXG4gICAgLy8gaWYgd2UncmUgYSBjaGlsZCBvZiBhIGRlaHlkcmF0ZWQgY29udGFpbmVyLCB3ZSBuZWVkIHRvIGZpcnN0XG4gICAgLy8gZmluZCB0aGF0IGlubmVyIGNvbnRhaW5lciBiZWZvcmUgbW92aW5nIG9uIHRvIGZpbmRpbmcgdGhlIHBhcmVudFxuICAgIC8vIGluc3RhbmNlLiBOb3RlIHRoYXQgd2UgZG9uJ3QgY2hlY2sgdGhpcyBmaWVsZCBvbiAgdGhlIHRhcmdldE5vZGVcbiAgICAvLyBpdHNlbGYgYmVjYXVzZSB0aGUgZmliZXJzIGFyZSBjb25jZXB0dWFsbHkgYmV0d2VlbiB0aGUgY29udGFpbmVyXG4gICAgLy8gbm9kZSBhbmQgdGhlIGZpcnN0IGNoaWxkLiBJdCBpc24ndCBzdXJyb3VuZGluZyB0aGUgY29udGFpbmVyIG5vZGUuXG4gICAgLy8gSWYgaXQncyBub3QgYSBjb250YWluZXIsIHdlIGNoZWNrIGlmIGl0J3MgYW4gaW5zdGFuY2UuXG4gICAgdGFyZ2V0SW5zdCA9IHBhcmVudE5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gfHwgcGFyZW50Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgICAvLyBTaW5jZSB0aGlzIHdhc24ndCB0aGUgZGlyZWN0IHRhcmdldCBvZiB0aGUgZXZlbnQsIHdlIG1pZ2h0IGhhdmVcbiAgICAgIC8vIHN0ZXBwZWQgcGFzdCBkZWh5ZHJhdGVkIERPTSBub2RlcyB0byBnZXQgaGVyZS4gSG93ZXZlciB0aGV5IGNvdWxkXG4gICAgICAvLyBhbHNvIGhhdmUgYmVlbiBub24tUmVhY3Qgbm9kZXMuIFdlIG5lZWQgdG8gYW5zd2VyIHdoaWNoIG9uZS5cbiAgICAgIC8vIElmIHdlIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGhhdmUgYW55IGNoaWxkcmVuLCB0aGVuIHRoZXJlIGNhbid0IGJlXG4gICAgICAvLyBhIG5lc3RlZCBzdXNwZW5zZSBib3VuZGFyeSB3aXRoaW4gaXQuIFNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIGZhc3RcbiAgICAgIC8vIGJhaWxvdXQuIE1vc3Qgb2YgdGhlIHRpbWUsIHdoZW4gcGVvcGxlIGFkZCBub24tUmVhY3QgY2hpbGRyZW4gdG9cbiAgICAgIC8vIHRoZSB0cmVlLCBpdCBpcyB1c2luZyBhIHJlZiB0byBhIGNoaWxkLWxlc3MgRE9NIG5vZGUuXG4gICAgICAvLyBOb3JtYWxseSB3ZSdkIG9ubHkgbmVlZCB0byBjaGVjayBvbmUgb2YgdGhlIGZpYmVycyBiZWNhdXNlIGlmIGl0XG4gICAgICAvLyBoYXMgZXZlciBnb25lIGZyb20gaGF2aW5nIGNoaWxkcmVuIHRvIGRlbGV0aW5nIHRoZW0gb3IgdmljZSB2ZXJzYVxuICAgICAgLy8gaXQgd291bGQgaGF2ZSBkZWxldGVkIHRoZSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IG5lc3RlZCBpbnNpZGUgYWxyZWFkeS5cbiAgICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBIb3N0Um9vdCBzdGFydHMgb3V0IHdpdGggYW4gYWx0ZXJuYXRlIGl0IG1pZ2h0XG4gICAgICAvLyBoYXZlIG9uZSBvbiB0aGUgYWx0ZXJuYXRlIHNvIHdlIG5lZWQgdG8gY2hlY2sgaW4gY2FzZSB0aGlzIHdhcyBhXG4gICAgICAvLyByb290LlxuICAgICAgdmFyIGFsdGVybmF0ZSA9IHRhcmdldEluc3QuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAodGFyZ2V0SW5zdC5jaGlsZCAhPT0gbnVsbCB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIE5leHQgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBub2RlIHRoYXQgc2tpcHBlZCBwYXN0IGlzXG4gICAgICAgIC8vIG5lc3RlZCB3aXRoaW4gYSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGFuZCBpZiBzbywgd2hpY2ggb25lLlxuICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0Tm9kZSk7XG5cbiAgICAgICAgd2hpbGUgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBmb3VuZCBhIHN1c3BlbnNlIGluc3RhbmNlLiBUaGF0IG1lYW5zIHRoYXQgd2UgaGF2ZW4ndFxuICAgICAgICAgIC8vIGh5ZHJhdGVkIGl0IHlldC4gRXZlbiB0aG91Z2ggd2UgbGVhdmUgdGhlIGNvbW1lbnRzIGluIHRoZVxuICAgICAgICAgIC8vIERPTSBhZnRlciBoeWRyYXRpbmcsIGFuZCB0aGVyZSBhcmUgYm91bmRhcmllcyBpbiB0aGUgRE9NXG4gICAgICAgICAgLy8gdGhhdCBjb3VsZCBhbHJlYWR5IGJlIGh5ZHJhdGVkLCB3ZSB3b3VsZG4ndCBoYXZlIGZvdW5kIHRoZW1cbiAgICAgICAgICAvLyB0aHJvdWdoIHRoaXMgcGFzcyBzaW5jZSBpZiB0aGUgdGFyZ2V0IGlzIGh5ZHJhdGVkIGl0IHdvdWxkXG4gICAgICAgICAgLy8gaGF2ZSBoYWQgYW4gaW50ZXJuYWxJbnN0YW5jZUtleSBvbiBpdC5cbiAgICAgICAgICAvLyBMZXQncyBnZXQgdGhlIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3VzcGVuc2VDb21wb25lbnRcbiAgICAgICAgICAvLyBhcyB0aGUgZGVlcGVzdCBpbnN0YW5jZS5cbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgICAgICB2YXIgdGFyZ2V0U3VzcGVuc2VJbnN0ID0gc3VzcGVuc2VJbnN0YW5jZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgICAgICAgIGlmICh0YXJnZXRTdXNwZW5zZUluc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRTdXNwZW5zZUluc3Q7XG4gICAgICAgICAgfSAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgRmliZXIgb24gdGhlIGNvbW1lbnQsIGl0IG1pZ2h0IGJlIGJlY2F1c2VcbiAgICAgICAgICAvLyB3ZSBoYXZlbid0IGdvdHRlbiB0byBoeWRyYXRlIGl0IHlldC4gVGhlcmUgbWlnaHQgc3RpbGwgYmUgYVxuICAgICAgICAgIC8vIHBhcmVudCBib3VuZGFyeSB0aGF0IGhhc24ndCBhYm92ZSB0aGlzIG9uZSBzbyB3ZSBuZWVkIHRvIGZpbmRcbiAgICAgICAgICAvLyB0aGUgb3V0ZXIgbW9zdCB0aGF0IGlzIGtub3duLlxuXG5cbiAgICAgICAgICBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTsgLy8gSWYgd2UgZG9uJ3QgZmluZCBvbmUsIHRoZW4gdGhhdCBzaG91bGQgbWVhbiB0aGF0IHRoZSBwYXJlbnRcbiAgICAgICAgICAvLyBob3N0IGNvbXBvbmVudCBhbHNvIGhhc24ndCBoeWRyYXRlZCB5ZXQuIFdlIGNhbiByZXR1cm4gaXRcbiAgICAgICAgICAvLyBiZWxvdyBzaW5jZSBpdCB3aWxsIGJhaWwgb3V0IG9uIHRoZSBpc01vdW50ZWQgY2hlY2sgbGF0ZXIuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgfVxuXG4gICAgdGFyZ2V0Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogaW5zdGFuY2UsIG9yIG51bGwgaWYgdGhlIG5vZGUgd2FzIG5vdCByZW5kZXJlZCBieSB0aGlzIFJlYWN0LlxuICovXG5cbmZ1bmN0aW9uIGdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgaW5zdCA9IG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHwgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcblxuICBpZiAoaW5zdCkge1xuICAgIHZhciB0YWcgPSBpbnN0LnRhZztcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dCB8fCB0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50IHx8ICh0YWcgPT09IEhvc3RIb2lzdGFibGUgKSB8fCB0YWcgPT09IEhvc3RTaW5nbGV0b24gfHwgdGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgcmV0dXJuIGluc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHaXZlbiBhIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudCwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBET00gbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXROb2RlRnJvbUluc3RhbmNlKGluc3QpIHtcbiAgdmFyIHRhZyA9IGluc3QudGFnO1xuXG4gIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgKHRhZyA9PT0gSG9zdEhvaXN0YWJsZSApIHx8IHRhZyA9PT0gSG9zdFNpbmdsZXRvbiB8fCB0YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgLy8gSW4gRmliZXIgdGhpcywgaXMganVzdCB0aGUgc3RhdGUgbm9kZSByaWdodCBub3cuIFdlIGFzc3VtZSBpdCB3aWxsIGJlXG4gICAgLy8gYSBob3N0IGNvbXBvbmVudCBvciBob3N0IHRleHQuXG4gICAgcmV0dXJuIGluc3Quc3RhdGVOb2RlO1xuICB9IC8vIFdpdGhvdXQgdGhpcyBmaXJzdCBpbnZhcmlhbnQsIHBhc3NpbmcgYSBub24tRE9NLWNvbXBvbmVudCB0cmlnZ2VycyB0aGUgbmV4dFxuICAvLyBpbnZhcmlhbnQgZm9yIGEgbWlzc2luZyBwYXJlbnQsIHdoaWNoIGlzIHN1cGVyIGNvbmZ1c2luZy5cblxuXG4gIHRocm93IG5ldyBFcnJvcignZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC4nKTtcbn1cbmZ1bmN0aW9uIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZVtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xufVxuZnVuY3Rpb24gdXBkYXRlRmliZXJQcm9wcyhub2RlLCBwcm9wcykge1xuICBub2RlW2ludGVybmFsUHJvcHNLZXldID0gcHJvcHM7XG59XG5mdW5jdGlvbiBnZXRFdmVudExpc3RlbmVyU2V0KG5vZGUpIHtcbiAgdmFyIGVsZW1lbnRMaXN0ZW5lclNldCA9IG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XTtcblxuICBpZiAoZWxlbWVudExpc3RlbmVyU2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV0gPSBuZXcgU2V0KCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudExpc3RlbmVyU2V0O1xufVxuZnVuY3Rpb24gZ2V0UmVzb3VyY2VzRnJvbVJvb3Qocm9vdCkge1xuICB2YXIgcmVzb3VyY2VzID0gcm9vdFtpbnRlcm5hbFJvb3ROb2RlUmVzb3VyY2VzS2V5XTtcblxuICBpZiAoIXJlc291cmNlcykge1xuICAgIHJlc291cmNlcyA9IHJvb3RbaW50ZXJuYWxSb290Tm9kZVJlc291cmNlc0tleV0gPSB7XG4gICAgICBob2lzdGFibGVTdHlsZXM6IG5ldyBNYXAoKSxcbiAgICAgIGhvaXN0YWJsZVNjcmlwdHM6IG5ldyBNYXAoKVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gcmVzb3VyY2VzO1xufVxuZnVuY3Rpb24gaXNNYXJrZWRIb2lzdGFibGUobm9kZSkge1xuICByZXR1cm4gISFub2RlW2ludGVybmFsSG9pc3RhYmxlTWFya2VyXTtcbn1cbmZ1bmN0aW9uIG1hcmtOb2RlQXNIb2lzdGFibGUobm9kZSkge1xuICBub2RlW2ludGVybmFsSG9pc3RhYmxlTWFya2VyXSA9IHRydWU7XG59XG5mdW5jdGlvbiBpc093bmVkSW5zdGFuY2Uobm9kZSkge1xuICByZXR1cm4gISEobm9kZVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gfHwgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSk7XG59XG5cbnZhciBhbGxOYXRpdmVFdmVudHMgPSBuZXcgU2V0KCk7XG4vKipcbiAqIE1hcHBpbmcgZnJvbSByZWdpc3RyYXRpb24gbmFtZSB0byBldmVudCBuYW1lXG4gKi9cblxuXG52YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IHt9O1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gbG93ZXJjYXNlIHJlZ2lzdHJhdGlvbiBuYW1lcyB0byB0aGUgcHJvcGVybHkgY2FzZWQgdmVyc2lvbixcbiAqIHVzZWQgdG8gd2FybiBpbiB0aGUgY2FzZSBvZiBtaXNzaW5nIGV2ZW50IGhhbmRsZXJzLiBBdmFpbGFibGVcbiAqIG9ubHkgaW4gX19ERVZfXy5cbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxudmFyIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSB7fSA7IC8vIFRydXN0IHRoZSBkZXZlbG9wZXIgdG8gb25seSB1c2UgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyBpbiB0cnVlXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUgKyAnQ2FwdHVyZScsIGRlcGVuZGVuY2llcyk7XG59XG5mdW5jdGlvbiByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICB7XG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0pIHtcbiAgICAgIGVycm9yKCdFdmVudFJlZ2lzdHJ5OiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSAnICsgJ3JlZ2lzdHJhdGlvbiBuYW1lLCBgJXNgLicsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBkZXBlbmRlbmNpZXM7XG5cbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHJlZ2lzdHJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA9IHJlZ2lzdHJhdGlvbk5hbWU7XG5cbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSA9PT0gJ29uRG91YmxlQ2xpY2snKSB7XG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLm9uZGJsY2xpY2sgPSByZWdpc3RyYXRpb25OYW1lO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmFkZChkZXBlbmRlbmNpZXNbaV0pO1xuICB9XG59XG5cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKTtcblxudmFyIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gIGJ1dHRvbjogdHJ1ZSxcbiAgY2hlY2tib3g6IHRydWUsXG4gIGltYWdlOiB0cnVlLFxuICBoaWRkZW46IHRydWUsXG4gIHJhZGlvOiB0cnVlLFxuICByZXNldDogdHJ1ZSxcbiAgc3VibWl0OiB0cnVlXG59O1xuZnVuY3Rpb24gY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyh0YWdOYW1lLCBwcm9wcykge1xuICB7XG4gICAgaWYgKCEoaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fCBwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5vbklucHV0IHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLnZhbHVlID09IG51bGwpKSB7XG4gICAgICBpZiAodGFnTmFtZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsIHNldCBgb25DaGFuZ2VgLicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsIHNldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLmNoZWNrZWQgPT0gbnVsbCkpIHtcbiAgICAgIGVycm9yKCdZb3UgcHJvdmlkZWQgYSBgY2hlY2tlZGAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgICB9XG4gIH1cbn1cblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG52YXIgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiA9IFwiOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFwiO1xuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cbnZhciBBVFRSSUJVVEVfTkFNRV9DSEFSID0gQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArIFwiXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBcIjtcbnZhciBWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWCA9IG5ldyBSZWdFeHAoJ15bJyArIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyAnXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG52YXIgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG5mdW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVTYWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVgudGVzdChhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblxuICB7XG4gICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIG5hbWU6IGAlc2AnLCBhdHRyaWJ1dGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIGF0dHJpYnV0ZSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLiBTb21lXG4gKiBhdHRyaWJ1dGVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgZXhwZWN0ZWQpIHtcbiAge1xuICAgIGlmICghaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghbm9kZS5oYXNBdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIC8vIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVxuICAgICAgc3dpdGNoICh0eXBlb2YgZXhwZWN0ZWQpIHtcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG5cbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHByZWZpeCA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLCA1KTtcblxuICAgICAgICAgICAgaWYgKHByZWZpeCAhPT0gJ2RhdGEtJyAmJiBwcmVmaXggIT09ICdhcmlhLScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV4cGVjdGVkID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBudWxsO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXG4gICAge1xuICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihleHBlY3RlZCwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBnZXRWYWx1ZUZvckF0dHJpYnV0ZU9uQ3VzdG9tQ29tcG9uZW50KG5vZGUsIG5hbWUsIGV4cGVjdGVkKSB7XG4gIHtcbiAgICBpZiAoIWlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW5vZGUuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICAvLyBzaG91bGRSZW1vdmVBdHRyaWJ1dGVcbiAgICAgIHN3aXRjaCAodHlwZW9mIGV4cGVjdGVkKSB7XG4gICAgICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgLy8gU3ltYm9scyBhbmQgb2JqZWN0cyBhcmUgaWdub3JlZCB3aGVuIHRoZXkncmUgZW1pdHRlZCBzb1xuICAgICAgICAgIC8vIGl0IHdvdWxkIGJlIGV4cGVjdGVkIHRoYXQgdGhleSBlbmQgdXAgbm90IGhhdmluZyBhbiBhdHRyaWJ1dGUuXG4gICAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBleHBlY3RlZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShuYW1lKTtcblxuICAgIHtcbiAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24oZXhwZWN0ZWQsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKGlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAvLyBJZiB0aGUgcHJvcCBpc24ndCBpbiB0aGUgc3BlY2lhbCBsaXN0LCB0cmVhdCBpdCBhcyBhIHNpbXBsZSBhdHRyaWJ1dGUuXG4gICAgLy8gc2hvdWxkUmVtb3ZlQXR0cmlidXRlXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIHJldHVybjtcblxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcHJlZml4ID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDUpO1xuXG4gICAgICAgICAgaWYgKHByZWZpeCAhPT0gJ2RhdGEtJyAmJiBwcmVmaXggIT09ICdhcmlhLScpIHtcbiAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIG5hbWUpO1xuICAgIH1cblxuICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnICsgdmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgY2FzZSAnc3ltYm9sJzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBuYW1lKTtcbiAgfVxuXG4gIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnICsgdmFsdWUpO1xufVxuZnVuY3Rpb24gc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKG5vZGUsIG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICBjYXNlICdzeW1ib2wnOlxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIG5hbWUpO1xuICB9XG5cbiAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2UsIG5hbWUsICcnICsgdmFsdWUpO1xufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAkMSA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAkMSgpO1xufVxuLyoqXG4gKiBMZXZlcmFnZXMgbmF0aXZlIGJyb3dzZXIvVk0gc3RhY2sgZnJhbWVzIHRvIGdldCBwcm9wZXIgZGV0YWlscyAoZS5nLlxuICogZmlsZW5hbWUsIGxpbmUgKyBjb2wgbnVtYmVyKSBmb3IgYSBzaW5nbGUgY29tcG9uZW50IGluIGEgY29tcG9uZW50IHN0YWNrLiBXZVxuICogZG8gdGhpcyBieTpcbiAqICAgKDEpIHRocm93aW5nIGFuZCBjYXRjaGluZyBhbiBlcnJvciBpbiB0aGUgZnVuY3Rpb24gLSB0aGlzIHdpbGwgYmUgb3VyXG4gKiAgICAgICBjb250cm9sIGVycm9yLlxuICogICAoMikgY2FsbGluZyB0aGUgY29tcG9uZW50IHdoaWNoIHdpbGwgZXZlbnR1YWxseSB0aHJvdyBhbiBlcnJvciB0aGF0IHdlJ2xsXG4gKiAgICAgICBjYXRjaCAtIHRoaXMgd2lsbCBiZSBvdXIgc2FtcGxlIGVycm9yLlxuICogICAoMykgZGlmZmluZyB0aGUgY29udHJvbCBhbmQgc2FtcGxlIGVycm9yIHN0YWNrcyB0byBmaW5kIHRoZSBzdGFjayBmcmFtZVxuICogICAgICAgd2hpY2ggcmVwcmVzZW50cyBvdXIgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRpbmcgYSBjb21tb24gc3RhY2sgZnJhbWUgYmV0d2VlbiBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGNhbiBiZVxuICAgKiB0cmlja3kgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcyBhbmQgbGV2ZWxzIG9mIHN0YWNrIHRyYWNlIHRydW5jYXRpb24gZnJvbVxuICAgKiBkaWZmZXJlbnQgSlMgVk1zLiBTbyBpbnN0ZWFkIHdlJ2xsIGF0dGVtcHQgdG8gY29udHJvbCB3aGF0IHRoYXQgY29tbW9uXG4gICAqIGZyYW1lIHNob3VsZCBiZSB0aHJvdWdoIHRoaXMgb2JqZWN0IG1ldGhvZDpcbiAgICogSGF2aW5nIGJvdGggdGhlIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgYmUgaW4gdGhlIGZ1bmN0aW9uIHVuZGVyIHRoZVxuICAgKiBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIHByb3BlcnR5LCArIHNldHRpbmcgdGhlIGBuYW1lYCBhbmRcbiAgICogYGRpc3BsYXlOYW1lYCBwcm9wZXJ0aWVzIG9mIHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYSBzdGFja1xuICAgKiBmcmFtZSBleGlzdHMgdGhhdCBoYXMgdGhlIG1ldGhvZCBuYW1lIGBEZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lUm9vdGAgaW5cbiAgICogaXQgZm9yIGJvdGggY29udHJvbCBhbmQgc2FtcGxlIHN0YWNrcy5cbiAgICovXG5cblxuICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udHJvbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgfSAvLyBUT0RPKGx1bmEpOiBUaGlzIHdpbGwgY3VycmVudGx5IG9ubHkgdGhyb3cgaWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgICAgICAgIC8vIHRyaWVzIHRvIGFjY2VzcyBSZWFjdC9SZWFjdERPTS9wcm9wcy4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyB0aHJvd1xuICAgICAgICAgIC8vIGluIHNpbXBsZSBjb21wb25lbnRzIHRvb1xuXG5cbiAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gZm4oKTsgLy8gSWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCByZXR1cm5zIGEgcHJvbWlzZSwgaXQncyBsaWtlbHkgYW4gYXN5bmNcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHdoaWNoIHdlIGRvbid0IHlldCBzdXBwb3J0LiBBdHRhY2ggYSBub29wIGNhdGNoIGhhbmRsZXIgdG9cbiAgICAgICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgY29tcG9uZW50IHN0YWNrcyBmb3IgYXN5bmMgY2xpZW50IGNvbXBvbmVudHM/XG5cbiAgICAgICAgICBpZiAobWF5YmVQcm9taXNlICYmIHR5cGVvZiBtYXliZVByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPSAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JztcbiAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCAnbmFtZScpOyAvLyBCZWZvcmUgRVM2LCB0aGUgYG5hbWVgIHByb3BlcnR5IHdhcyBub3QgY29uZmlndXJhYmxlLlxuXG4gIGlmIChuYW1lUHJvcERlc2NyaXB0b3IgJiYgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIC8vIFY4IHV0aWxpemVzIGEgZnVuY3Rpb24ncyBgbmFtZWAgcHJvcGVydHkgd2hlbiBnZW5lcmF0aW5nIGEgc3RhY2sgdHJhY2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwgLy8gQ29uZmlndXJhYmxlIHByb3BlcnRpZXMgY2FuIGJlIHVwZGF0ZWQgZXZlbiBpZiBpdHMgd3JpdGFibGUgZGVzY3JpcHRvclxuICAgIC8vIGlzIHNldCB0byBgZmFsc2VgLlxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgICduYW1lJywge1xuICAgICAgdmFsdWU6ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnXG4gICAgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcblxuICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgdmFyIGMgPSAwO1xuXG4gICAgICB3aGlsZSAocyA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJiAhc2FtcGxlTGluZXNbc10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIHMrKztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGMgPCBjb250cm9sTGluZXMubGVuZ3RoICYmICFjb250cm9sTGluZXNbY10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIGMrKztcbiAgICAgIH0gLy8gV2UgY291bGRuJ3QgZmluZCBvdXIgaW50ZW50aW9uYWxseSBpbmplY3RlZCBjb21tb24gcm9vdCBmcmFtZSwgYXR0ZW1wdFxuICAgICAgLy8gdG8gZmluZCBhbm90aGVyIGNvbW1vbiByb290IGZyYW1lIGJ5IHNlYXJjaCBmcm9tIHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAvLyBjb250cm9sIHN0YWNrLi4uXG5cblxuICAgICAgaWYgKHMgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fCBjID09PSBjb250cm9sTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgICBjLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoY3Rvciwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShjdG9yLCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QkMSh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRmliZXIoZmliZXIpIHtcblxuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdMYXp5Jyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIpO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCh3b3JrSW5Qcm9ncmVzcykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIGRvIHtcbiAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlKTtcblxuICAgIHJldHVybiBpbmZvO1xuICB9IGNhdGNoICh4KSB7XG4gICAgcmV0dXJuICdcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiAnICsgeC5tZXNzYWdlICsgJ1xcbicgKyB4LnN0YWNrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lJDEob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcblxuICBpZiAoZGlzcGxheU5hbWUpIHtcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XG4gIH1cblxuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lO1xufSAvLyBLZWVwIGluIHN5bmMgd2l0aCByZWFjdC1yZWNvbmNpbGVyL2dldENvbXBvbmVudE5hbWVGcm9tRmliZXJcblxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSQxKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTsgLy8gTm90ZSB0aGF0IHRoZSByZWNvbmNpbGVyIHBhY2thZ2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgdG8gdXNlIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoKSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSkge1xuICAgICAgLy8gVE9ETzogQ3JlYXRlIGEgY29udmVudGlvbiBmb3IgbmFtaW5nIGNsaWVudCByZWZlcmVuY2VzIHdpdGggZGVidWcgaW5mby5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICAgIGNhc2UgUkVBQ1RfQ0FDSEVfVFlQRTpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICdDYWNoZSc7XG4gICAgICB9XG5cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lJDEoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUkMShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUkMSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHZhciBvdXRlck5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKG91dGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBvdXRlck5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ01lbW8nO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59IC8vIEtlZXAgaW4gc3luYyB3aXRoIHNoYXJlZC9nZXRDb21wb25lbnROYW1lRnJvbVR5cGVcblxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikge1xuICB2YXIgdGFnID0gZmliZXIudGFnLFxuICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIENhY2hlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuICdDYWNoZSc7XG5cbiAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgY2FzZSBEZWh5ZHJhdGVkRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gJ0RlaHlkcmF0ZWRGcmFnbWVudCc7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIC8vIEhvc3QgY29tcG9uZW50IHR5cGUgaXMgdGhlIGRpc3BsYXkgbmFtZSAoZS5nLiBcImRpdlwiLCBcIlZpZXdcIilcbiAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHJldHVybiAnUm9vdCc7XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgcmV0dXJuICdUZXh0JztcblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIC8vIE5hbWUgY29tZXMgZnJvbSB0aGUgdHlwZSBpbiB0aGlzIGNhc2U7IHdlIGRvbid0IGhhdmUgYSB0YWcuXG4gICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuXG4gICAgY2FzZSBNb2RlOlxuICAgICAgaWYgKHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUpIHtcbiAgICAgICAgLy8gRG9uJ3QgYmUgbGVzcyBzcGVjaWZpYyB0aGFuIHNoYXJlZC9nZXRDb21wb25lbnROYW1lRnJvbVR5cGVcbiAgICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdNb2RlJztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgcmV0dXJuICdPZmZzY3JlZW4nO1xuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiAnU2NvcGUnO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG5cbiAgICBjYXNlIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6XG4gICAgICByZXR1cm4gJ1RyYWNpbmdNYXJrZXInO1xuICAgIC8vIFRoZSBkaXNwbGF5IG5hbWUgZm9yIHRoaXMgdGFncyBjb21lIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgdHlwZTpcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBjdXJyZW50ID0gbnVsbDtcbnZhciBpc1JlbmRlcmluZyA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB7XG4gIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG93bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3duZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihvd25lcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYoKSB7XG4gIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gLy8gU2FmZSBiZWNhdXNlIGlmIGN1cnJlbnQgZmliZXIgZXhpc3RzLCB3ZSBhcmUgcmVjb25jaWxpbmcsXG4gICAgLy8gYW5kIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgdmVyc2lvbi5cblxuXG4gICAgcmV0dXJuIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChjdXJyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEN1cnJlbnRGaWJlcigpIHtcbiAge1xuICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuICAgIGN1cnJlbnQgPSBudWxsO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEN1cnJlbnRGaWJlcihmaWJlcikge1xuICB7XG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLmdldEN1cnJlbnRTdGFjayA9IGZpYmVyID09PSBudWxsID8gbnVsbCA6IGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXY7XG4gICAgY3VycmVudCA9IGZpYmVyO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlcigpIHtcbiAge1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiBzZXRJc1JlbmRlcmluZyhyZW5kZXJpbmcpIHtcbiAge1xuICAgIGlzUmVuZGVyaW5nID0gcmVuZGVyaW5nO1xuICB9XG59XG5cbi8vIGFyb3VuZCB0aGlzIGxpbWl0YXRpb24sIHdlIHVzZSBhbiBvcGFxdWUgdHlwZSB0aGF0IGNhbiBvbmx5IGJlIG9idGFpbmVkIGJ5XG4vLyBwYXNzaW5nIHRoZSB2YWx1ZSB0aHJvdWdoIGdldFRvU3RyaW5nVmFsdWUgZmlyc3QuXG5cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIFRoZSBjb2VyY2lvbiBzYWZldHkgY2hlY2sgaXMgcGVyZm9ybWVkIGluIGdldFRvU3RyaW5nVmFsdWUoKS5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG4gIHJldHVybiAnJyArIHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgY2hlY2tGb3JtRmllbGRWYWx1ZVN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGZ1bmN0aW9uLCBzeW1ib2wgYXJlIGFzc2lnbmVkIGFzIGVtcHR5IHN0cmluZ3NcbiAgICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NoZWNrYWJsZShlbGVtKSB7XG4gIHZhciB0eXBlID0gZWxlbS50eXBlO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAodHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhY2tlcihub2RlKSB7XG4gIHJldHVybiBub2RlLl92YWx1ZVRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIGRldGFjaFRyYWNrZXIobm9kZSkge1xuICBub2RlLl92YWx1ZVRyYWNrZXIgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlID0gJyc7XG5cbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKGlzQ2hlY2thYmxlKG5vZGUpKSB7XG4gICAgdmFsdWUgPSBub2RlLmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdHJhY2tWYWx1ZU9uTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZUZpZWxkID0gaXNDaGVja2FibGUobm9kZSkgPyAnY2hlY2tlZCcgOiAndmFsdWUnO1xuICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHZhbHVlRmllbGQpO1xuXG4gIHtcbiAgICBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24obm9kZVt2YWx1ZUZpZWxkXSk7XG4gIH1cblxuICB2YXIgY3VycmVudFZhbHVlID0gJycgKyBub2RlW3ZhbHVlRmllbGRdOyAvLyBpZiBzb21lb25lIGhhcyBhbHJlYWR5IGRlZmluZWQgYSB2YWx1ZSBvciBTYWZhcmksIHRoZW4gYmFpbFxuICAvLyBhbmQgZG9uJ3QgdHJhY2sgdmFsdWUgd2lsbCBjYXVzZSBvdmVyIHJlcG9ydGluZyBvZiBjaGFuZ2VzLFxuICAvLyBidXQgaXQncyBiZXR0ZXIgdGhlbiBhIGhhcmQgZmFpbHVyZVxuICAvLyAobmVlZGVkIGZvciBjZXJ0YWluIHRlc3RzIHRoYXQgc3B5T24gaW5wdXQgdmFsdWVzIGFuZCBTYWZhcmkpXG5cbiAgaWYgKG5vZGUuaGFzT3duUHJvcGVydHkodmFsdWVGaWVsZCkgfHwgdHlwZW9mIGRlc2NyaXB0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkZXNjcmlwdG9yLmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5zZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsXG4gICAgICBzZXQgPSBkZXNjcmlwdG9yLnNldDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0LmNhbGwodGhpcyk7XG4gICAgfSxcbiAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gICAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tGb3JtRmllbGRWYWx1ZVN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9XG4gIH0pOyAvLyBXZSBjb3VsZCd2ZSBwYXNzZWQgdGhpcyB0aGUgZmlyc3QgdGltZVxuICAvLyBidXQgaXQgdHJpZ2dlcnMgYSBidWcgaW4gSUUxMSBhbmQgRWRnZSAxNC8xNS5cbiAgLy8gQ2FsbGluZyBkZWZpbmVQcm9wZXJ0eSgpIGFnYWluIHNob3VsZCBiZSBlcXVpdmFsZW50LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExNzY4XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBlbnVtZXJhYmxlOiBkZXNjcmlwdG9yLmVudW1lcmFibGVcbiAgfSk7XG4gIHZhciB0cmFja2VyID0ge1xuICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgIH0sXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAge1xuICAgICAgICBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgIH0sXG4gICAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXRhY2hUcmFja2VyKG5vZGUpO1xuICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgfVxuICB9O1xuICByZXR1cm4gdHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICBpZiAoZ2V0VHJhY2tlcihub2RlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IHRyYWNrVmFsdWVPbk5vZGUobm9kZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChub2RlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0cmFja2VyID0gZ2V0VHJhY2tlcihub2RlKTsgLy8gaWYgdGhlcmUgaXMgbm8gdHJhY2tlciBhdCB0aGlzIHBvaW50IGl0J3MgdW5saWtlbHlcbiAgLy8gdGhhdCB0cnlpbmcgYWdhaW4gd2lsbCBzdWNjZWVkXG5cbiAgaWYgKCF0cmFja2VyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbGFzdFZhbHVlID0gdHJhY2tlci5nZXRWYWx1ZSgpO1xuICB2YXIgbmV4dFZhbHVlID0gZ2V0VmFsdWVGcm9tTm9kZShub2RlKTtcblxuICBpZiAobmV4dFZhbHVlICE9PSBsYXN0VmFsdWUpIHtcbiAgICB0cmFja2VyLnNldFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB7XG4gIGRvYyA9IGRvYyB8fCAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkKTtcblxuICBpZiAodHlwZW9mIGRvYyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRvYy5hY3RpdmVFbGVtZW50IHx8IGRvYy5ib2R5O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGRvYy5ib2R5O1xuICB9XG59XG5cbi8vIFdoZW4gcGFzc2luZyB1c2VyIGlucHV0IGludG8gcXVlcnlTZWxlY3RvcihBbGwpIHRoZSBlbWJlZGRlZCBzdHJpbmcgbXVzdCBub3QgYWx0ZXJcbi8vIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIHF1ZXJ5LiBUaGlzIGVzY2FwZSBmdW5jdGlvbiBpcyBzYWZlIHRvIHVzZSB3aGVuIHdlIGtub3cgdGhlXG4vLyBwcm92aWRlZCB2YWx1ZSBpcyBnb2luZyB0byBiZSB3cmFwcGVkIGluIGRvdWJsZSBxdW90ZXMgYXMgcGFydCBvZiBhbiBhdHRyaWJ1dGUgc2VsZWN0b3Jcbi8vIERvIG5vdCB1c2UgaXQgYW55d2hlcmUgZWxzZVxuLy8gd2UgZXNjYXBlIGRvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzXG52YXIgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3Rlc1JlZ2V4ID0gL1tcXG5cXFwiXFxcXF0vZztcbmZ1bmN0aW9uIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3Rlc1JlZ2V4LCBmdW5jdGlvbiAoY2gpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgY2guY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikgKyAnICc7XG4gIH0pO1xufVxuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gZmFsc2U7XG4vKipcbiAqIEltcGxlbWVudHMgYW4gPGlucHV0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIHRoZXNlIG9wdGlvbmFsXG4gKiBwcm9wczogYGNoZWNrZWRgLCBgdmFsdWVgLCBgZGVmYXVsdENoZWNrZWRgLCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKlxuICogSWYgYGNoZWNrZWRgIG9yIGB2YWx1ZWAgYXJlIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnNcbiAqIHRoYXQgYWZmZWN0IHRoZSBjaGVja2VkIHN0YXRlIG9yIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIHRoZXkgYXJlIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBub3RcbiAqIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIHByb3BzIG11c3QgY2hhbmdlIGluIG9yZGVyIGZvclxuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIGFzIHVuY2hlY2tlZCAob3IgYGRlZmF1bHRDaGVja2VkYClcbiAqIHdpdGggYW4gZW1wdHkgdmFsdWUgKG9yIGBkZWZhdWx0VmFsdWVgKS5cbiAqXG4gKiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMTAyNS90aGUtaW5wdXQtZWxlbWVudC5odG1sXG4gKi9cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnB1dFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICAvLyBOb3JtYWxseSB3ZSBjaGVjayBmb3IgdW5kZWZpbmVkIGFuZCBudWxsIHRoZSBzYW1lLCBidXQgZXhwbGljaXRseSBzcGVjaWZ5aW5nIGJvdGhcbiAgICAvLyBwcm9wZXJ0aWVzLCBhdCBhbGwgaXMgcHJvYmFibHkgd29ydGggd2FybmluZyBmb3IuIFdlIGNvdWxkIG1vdmUgdGhpcyBlaXRoZXIgZGlyZWN0aW9uXG4gICAgLy8gYW5kIGp1c3QgbWFrZSBpdCBvayB0byBwYXNzIG51bGwgb3IganVzdCBjaGVjayBoYXNPd25Qcm9wZXJ0eS5cbiAgICBpZiAocHJvcHMuY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCBjaGVja2VkIGFuZCBkZWZhdWx0Q2hlY2tlZCBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgY2hlY2tlZCBwcm9wLCBvciB0aGUgZGVmYXVsdENoZWNrZWQgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpO1xuXG4gICAgICBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlSW5wdXQoZWxlbWVudCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSwgbGFzdERlZmF1bHRWYWx1ZSwgY2hlY2tlZCwgZGVmYXVsdENoZWNrZWQsIHR5cGUsIG5hbWUpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBUZW1wb3JhcmlseSBkaXNjb25uZWN0IHRoZSBpbnB1dCBmcm9tIGFueSByYWRpbyBidXR0b25zLlxuICAvLyBDaGFuZ2luZyB0aGUgdHlwZSBvciBuYW1lIGFzIHRoZSBzYW1lIHRpbWUgYXMgY2hhbmdpbmcgdGhlIGNoZWNrZWQgdmFsdWVcbiAgLy8gbmVlZHMgdG8gYmUgYXRvbWljYWxseSBhcHBsaWVkLiBXZSBjYW4gb25seSBlbnN1cmUgdGhhdCBieSBkaXNjb25uZWN0aW5nXG4gIC8vIHRoZSBuYW1lIHdoaWxlIGRvIHRoZSBtdXRhdGlvbnMgYW5kIHRoZW4gcmVhcHBseSB0aGUgbmFtZSBhZnRlciB0aGF0J3MgZG9uZS5cblxuICBub2RlLm5hbWUgPSAnJztcblxuICBpZiAodHlwZSAhPSBudWxsICYmIHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlICE9PSAnc3ltYm9sJyAmJiB0eXBlb2YgdHlwZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAge1xuICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih0eXBlLCAndHlwZScpO1xuICAgIH1cblxuICAgIG5vZGUudHlwZSA9IHR5cGU7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3R5cGUnKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdXG4gICAgICB2YWx1ZSA9PT0gMCAmJiBub2RlLnZhbHVlID09PSAnJyB8fCAvLyBXZSBleHBsaWNpdGx5IHdhbnQgdG8gY29lcmNlIHRvIG51bWJlciBoZXJlIGlmIHBvc3NpYmxlLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBub2RlLnZhbHVlICE9IHZhbHVlKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnZhbHVlICE9PSB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSkpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdWJtaXQnIHx8IHR5cGUgPT09ICdyZXNldCcpIHtcbiAgICAvLyBTdWJtaXQvcmVzZXQgaW5wdXRzIG5lZWQgdGhlIGF0dHJpYnV0ZSByZW1vdmVkIGNvbXBsZXRlbHkgdG8gYXZvaWRcbiAgICAvLyBibGFuay10ZXh0IGJ1dHRvbnMuXG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBjb21lcyBmcm9tIGEgY2FzY2FkZSBvZlxuICAgIC8vIHByb3BlcnRpZXM6XG4gICAgLy8gIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDMuIE90aGVyd2lzZSB0aGVyZSBzaG91bGQgYmUgbm8gY2hhbmdlXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCB0eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSk7XG4gICAgfSBlbHNlIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHR5cGUsIGdldFRvU3RyaW5nVmFsdWUoZGVmYXVsdFZhbHVlKSk7XG4gICAgfSBlbHNlIGlmIChsYXN0RGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd2YWx1ZScpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIGNoZWNrZWQgYXR0cmlidXRlLCBpdCBvbmx5IGNoYW5nZXMgd2hlbiBpdCBuZWVkc1xuICAgIC8vIHRvIGJlIHJlbW92ZWQsIHN1Y2ggYXMgdHJhbnNpdGlvbmluZyBmcm9tIGEgY2hlY2tib3ggaW50byBhIHRleHQgaW5wdXRcbiAgICBpZiAoY2hlY2tlZCA9PSBudWxsICYmIGRlZmF1bHRDaGVja2VkICE9IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIWRlZmF1bHRDaGVja2VkO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICAvLyBJbXBvcnRhbnQgdG8gc2V0IHRoaXMgZXZlbiBpZiBpdCdzIG5vdCBhIGNoYW5nZSBpbiBvcmRlciB0byB1cGRhdGUgaW5wdXRcbiAgICAvLyB2YWx1ZSB0cmFja2luZyB3aXRoIHJhZGlvIGJ1dHRvbnNcbiAgICAvLyBUT0RPOiBTaG91bGQgcmVhbGx5IHVwZGF0ZSBpbnB1dCB2YWx1ZSB0cmFja2luZyBmb3IgdGhlIHdob2xlIHJhZGlvXG4gICAgLy8gYnV0dG9uIGdyb3VwIGluIGFuIGVmZmVjdCBvciBzb21ldGhpbmcgKHNpbWlsYXIgdG8gIzI3MDI0KVxuICAgIG5vZGUuY2hlY2tlZCA9IGNoZWNrZWQgJiYgdHlwZW9mIGNoZWNrZWQgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNoZWNrZWQgIT09ICdzeW1ib2wnO1xuICB9XG5cbiAgaWYgKG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgbmFtZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbmFtZSAhPT0gJ3N5bWJvbCcgJiYgdHlwZW9mIG5hbWUgIT09ICdib29sZWFuJykge1xuICAgIHtcbiAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24obmFtZSwgJ25hbWUnKTtcbiAgICB9XG5cbiAgICBub2RlLm5hbWUgPSB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKG5hbWUpKTtcbiAgfSBlbHNlIHtcbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnbmFtZScpO1xuICB9XG59XG5mdW5jdGlvbiBpbml0SW5wdXQoZWxlbWVudCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSwgY2hlY2tlZCwgZGVmYXVsdENoZWNrZWQsIHR5cGUsIG5hbWUsIGlzSHlkcmF0aW5nKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICBpZiAodHlwZSAhPSBudWxsICYmIHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlICE9PSAnc3ltYm9sJyAmJiB0eXBlb2YgdHlwZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAge1xuICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih0eXBlLCAndHlwZScpO1xuICAgIH1cblxuICAgIG5vZGUudHlwZSA9IHR5cGU7XG4gIH1cblxuICBpZiAodmFsdWUgIT0gbnVsbCB8fCBkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHZhciBpc0J1dHRvbiA9IHR5cGUgPT09ICdzdWJtaXQnIHx8IHR5cGUgPT09ICdyZXNldCc7IC8vIEF2b2lkIHNldHRpbmcgdmFsdWUgYXR0cmlidXRlIG9uIHN1Ym1pdC9yZXNldCBpbnB1dHMgYXMgaXQgb3ZlcnJpZGVzIHRoZVxuICAgIC8vIGRlZmF1bHQgdmFsdWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIuIFNlZTogIzEyODcyXG5cbiAgICBpZiAoaXNCdXR0b24gJiYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRWYWx1ZVN0ciA9IGRlZmF1bHRWYWx1ZSAhPSBudWxsID8gdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShkZWZhdWx0VmFsdWUpKSA6ICcnO1xuICAgIHZhciBpbml0aWFsVmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkpIDogZGVmYXVsdFZhbHVlU3RyOyAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAgIC8vIGZyb20gYmVpbmcgbG9zdCBkdXJpbmcgU1NSIGh5ZHJhdGlvbi5cblxuICAgIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzaG91bGQgdXNlXG4gICAgICAgIC8vIHRoZSB3cmFwcGVyU3RhdGUuX2luaXRpYWxWYWx1ZSBwcm9wZXJ0eS4gVGhpcyB1c2VzOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAgICAgLy8gICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDMuIEFuIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAoaW5pdGlhbFZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICAgICAgbm9kZS52YWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vIE90aGVyd2lzZSwgdGhlIHZhbHVlIGF0dHJpYnV0ZSBpcyBzeW5jaHJvbml6ZWQgdG8gdGhlIHByb3BlcnR5LFxuICAgICAgLy8gc28gd2UgYXNzaWduIGRlZmF1bHRWYWx1ZSB0byB0aGUgc2FtZSB0aGluZyBhcyB0aGUgdmFsdWUgcHJvcGVydHlcbiAgICAgIC8vIGFzc2lnbm1lbnQgc3RlcCBhYm92ZS5cbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIH1cbiAgfSAvLyBOb3JtYWxseSwgd2UnZCBqdXN0IGRvIGBub2RlLmNoZWNrZWQgPSBub2RlLmNoZWNrZWRgIHVwb24gaW5pdGlhbCBtb3VudCwgbGVzcyB0aGlzIGJ1Z1xuICAvLyB0aGlzIGlzIG5lZWRlZCB0byB3b3JrIGFyb3VuZCBhIGNocm9tZSBidWcgd2hlcmUgc2V0dGluZyBkZWZhdWx0Q2hlY2tlZFxuICAvLyB3aWxsIHNvbWV0aW1lcyBpbmZsdWVuY2UgdGhlIHZhbHVlIG9mIGNoZWNrZWQgKGV2ZW4gYWZ0ZXIgZGV0YWNobWVudCkuXG4gIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjA4NDE2XG4gIC8vIFdlIG5lZWQgdG8gdGVtcG9yYXJpbHkgdW5zZXQgbmFtZSB0byBhdm9pZCBkaXNydXB0aW5nIHJhZGlvIGJ1dHRvbiBncm91cHMuXG5cblxuICB2YXIgY2hlY2tlZE9yRGVmYXVsdCA9IGNoZWNrZWQgIT0gbnVsbCA/IGNoZWNrZWQgOiBkZWZhdWx0Q2hlY2tlZDsgLy8gVE9ETzogVGhpcyAnZnVuY3Rpb24nIG9yICdzeW1ib2wnIGNoZWNrIGlzbid0IHJlcGxpY2F0ZWQgaW4gb3RoZXIgcGxhY2VzXG4gIC8vIHNvIHRoaXMgc2VtYW50aWMgaXMgaW5jb25zaXN0ZW50LlxuXG4gIHZhciBpbml0aWFsQ2hlY2tlZCA9IHR5cGVvZiBjaGVja2VkT3JEZWZhdWx0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjaGVja2VkT3JEZWZhdWx0ICE9PSAnc3ltYm9sJyAmJiAhIWNoZWNrZWRPckRlZmF1bHQ7XG5cbiAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgLy8gRGV0YWNoIC5jaGVja2VkIGZyb20gLmRlZmF1bHRDaGVja2VkIGJ1dCBsZWF2ZSB1c2VyIGlucHV0IGFsb25lXG4gICAgbm9kZS5jaGVja2VkID0gbm9kZS5jaGVja2VkO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuY2hlY2tlZCA9ICEhaW5pdGlhbENoZWNrZWQ7XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgYm90aCB0aGUgY2hlY2tlZCBwcm9wZXJ0eSBhbmRcbiAgICAvLyBhdHRyaWJ1dGUgYXJlIGFzc2lnbmVkIGF0IHRoZSBzYW1lIHRpbWUgdXNpbmcgZGVmYXVsdENoZWNrZWQuIFRoaXMgdXNlczpcbiAgICAvL1xuICAgIC8vICAgMS4gVGhlIGNoZWNrZWQgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgLy8gICAyLiBUaGUgZGVmYXVsdENoZWNrZWQgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgLy8gICAzLiBPdGhlcndpc2UsIGZhbHNlXG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICFub2RlLmRlZmF1bHRDaGVja2VkO1xuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIWluaXRpYWxDaGVja2VkO1xuICB9IC8vIE5hbWUgbmVlZHMgdG8gYmUgc2V0IGF0IHRoZSBlbmQgc28gdGhhdCBpdCBhcHBsaWVzIGF0b21pY2FsbHkgdG8gY29ubmVjdGVkIHJhZGlvIGJ1dHRvbnMuXG5cblxuICBpZiAobmFtZSAhPSBudWxsICYmIHR5cGVvZiBuYW1lICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBuYW1lICE9PSAnc3ltYm9sJyAmJiB0eXBlb2YgbmFtZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAge1xuICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihuYW1lLCAnbmFtZScpO1xuICAgIH1cblxuICAgIG5vZGUubmFtZSA9IG5hbWU7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkSW5wdXRTdGF0ZShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgcm9vdE5vZGUgPSBlbGVtZW50O1xuICB1cGRhdGVJbnB1dChyb290Tm9kZSwgcHJvcHMudmFsdWUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCBwcm9wcy5jaGVja2VkLCBwcm9wcy5kZWZhdWx0Q2hlY2tlZCwgcHJvcHMudHlwZSwgcHJvcHMubmFtZSk7XG4gIHZhciBuYW1lID0gcHJvcHMubmFtZTtcblxuICBpZiAocHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuYW1lICE9IG51bGwpIHtcbiAgICB2YXIgcXVlcnlSb290ID0gcm9vdE5vZGU7XG5cbiAgICB3aGlsZSAocXVlcnlSb290LnBhcmVudE5vZGUpIHtcbiAgICAgIHF1ZXJ5Um9vdCA9IHF1ZXJ5Um9vdC5wYXJlbnROb2RlO1xuICAgIH0gLy8gSWYgYHJvb3ROb2RlLmZvcm1gIHdhcyBub24tbnVsbCwgdGhlbiB3ZSBjb3VsZCB0cnkgYGZvcm0uZWxlbWVudHNgLFxuICAgIC8vIGJ1dCB0aGF0IHNvbWV0aW1lcyBiZWhhdmVzIHN0cmFuZ2VseSBpbiBJRTguIFdlIGNvdWxkIGFsc28gdHJ5IHVzaW5nXG4gICAgLy8gYGZvcm0uZ2V0RWxlbWVudHNCeU5hbWVgLCBidXQgdGhhdCB3aWxsIG9ubHkgcmV0dXJuIGRpcmVjdCBjaGlsZHJlblxuICAgIC8vIGFuZCB3b24ndCBpbmNsdWRlIGlucHV0cyB0aGF0IHVzZSB0aGUgSFRNTDUgYGZvcm09YCBhdHRyaWJ1dGUuIFNpbmNlXG4gICAgLy8gdGhlIGlucHV0IG1pZ2h0IG5vdCBldmVuIGJlIGluIGEgZm9ybS4gSXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gdGhlXG4gICAgLy8gZG9jdW1lbnQuIExldCdzIGp1c3QgdXNlIHRoZSBsb2NhbCBgcXVlcnlTZWxlY3RvckFsbGAgdG8gZW5zdXJlIHdlIGRvbid0XG4gICAgLy8gbWlzcyBhbnl0aGluZy5cblxuXG4gICAge1xuICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihuYW1lLCAnbmFtZScpO1xuICAgIH1cblxuICAgIHZhciBncm91cCA9IHF1ZXJ5Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPVwiJyArIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoJycgKyBuYW1lKSArICdcIl1bdHlwZT1cInJhZGlvXCJdJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgb3RoZXJOb2RlID0gZ3JvdXBbaV07XG5cbiAgICAgIGlmIChvdGhlck5vZGUgPT09IHJvb3ROb2RlIHx8IG90aGVyTm9kZS5mb3JtICE9PSByb290Tm9kZS5mb3JtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgcmFkaW8gYnV0dG9ucyByZW5kZXJlZCBieSBkaWZmZXJlbnQgY29waWVzIG9mIFJlYWN0XG4gICAgICAvLyBhbmQgdGhlIHNhbWUgbmFtZSBhcmUgcmVuZGVyZWQgaW50byB0aGUgc2FtZSBmb3JtIChzYW1lIGFzICMxOTM5KS5cbiAgICAgIC8vIFRoYXQncyBwcm9iYWJseSBva2F5OyB3ZSBkb24ndCBzdXBwb3J0IGl0IGp1c3QgYXMgd2UgZG9uJ3Qgc3VwcG9ydFxuICAgICAgLy8gbWl4aW5nIFJlYWN0IHJhZGlvIGJ1dHRvbnMgd2l0aCBub24tUmVhY3Qgb25lcy5cblxuXG4gICAgICB2YXIgb3RoZXJQcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUob3RoZXJOb2RlKTtcblxuICAgICAgaWYgKCFvdGhlclByb3BzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlICcgKyAnc2FtZSBgbmFtZWAgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgLy8gYXMgYXBwcm9wcmlhdGUuXG5cblxuICAgICAgdXBkYXRlSW5wdXQob3RoZXJOb2RlLCBvdGhlclByb3BzLnZhbHVlLCBvdGhlclByb3BzLmRlZmF1bHRWYWx1ZSwgb3RoZXJQcm9wcy5kZWZhdWx0VmFsdWUsIG90aGVyUHJvcHMuY2hlY2tlZCwgb3RoZXJQcm9wcy5kZWZhdWx0Q2hlY2tlZCwgb3RoZXJQcm9wcy50eXBlLCBvdGhlclByb3BzLm5hbWUpO1xuICAgIH0gLy8gSWYgYW55IHVwZGF0ZUlucHV0KCkgY2FsbCBzZXQgLmNoZWNrZWQgdG8gdHJ1ZSwgYW4gaW5wdXQgaW4gdGhpcyBncm91cFxuICAgIC8vIChvZnRlbiwgYHJvb3ROb2RlYCBpdHNlbGYpIG1heSBoYXZlIGJlY29tZSB1bmNoZWNrZWRcblxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGdyb3VwLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9vdGhlck5vZGUgPSBncm91cFtfaV07XG5cbiAgICAgIGlmIChfb3RoZXJOb2RlLmZvcm0gIT09IHJvb3ROb2RlLmZvcm0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKF9vdGhlck5vZGUpO1xuICAgIH1cbiAgfVxufSAvLyBJbiBDaHJvbWUsIGFzc2lnbmluZyBkZWZhdWx0VmFsdWUgdG8gY2VydGFpbiBpbnB1dCB0eXBlcyB0cmlnZ2VycyBpbnB1dCB2YWxpZGF0aW9uLlxuLy8gRm9yIG51bWJlciBpbnB1dHMsIHRoZSBkaXNwbGF5IHZhbHVlIGxvc2VzIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnRzLiBGb3IgZW1haWwgaW5wdXRzLFxuLy8gQ2hyb21lIHJhaXNlcyBcIlRoZSBzcGVjaWZpZWQgdmFsdWUgPHg+IGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIi5cbi8vXG4vLyBIZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVmYXVsdFZhbHVlIGhhcyBhY3R1YWxseSBjaGFuZ2VkLCBhdm9pZGluZyB0aGVzZSBwcm9ibGVtc1xuLy8gd2hlbiB0aGUgdXNlciBpcyBpbnB1dHRpbmcgdGV4dFxuLy9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzI1M1xuXG5mdW5jdGlvbiBzZXREZWZhdWx0VmFsdWUobm9kZSwgdHlwZSwgdmFsdWUpIHtcbiAgaWYgKCAvLyBGb2N1c2VkIG51bWJlciBpbnB1dHMgc3luY2hyb25pemUgb24gYmx1ci4gU2VlIENoYW5nZUV2ZW50UGx1Z2luLmpzXG4gIHR5cGUgIT09ICdudW1iZXInIHx8IGdldEFjdGl2ZUVsZW1lbnQobm9kZS5vd25lckRvY3VtZW50KSAhPT0gbm9kZSkge1xuICAgIGlmIChub2RlLmRlZmF1bHRWYWx1ZSAhPT0gdG9TdHJpbmcodmFsdWUpKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gZmFsc2U7XG52YXIgZGlkV2FybkludmFsaWRDaGlsZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5JbnZhbGlkSW5uZXJIVE1MID0gZmFsc2U7XG4vKipcbiAqIEltcGxlbWVudHMgYW4gPG9wdGlvbj4gaG9zdCBjb21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxlY3RlZGAgaXMgc2V0LlxuICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIC8vIElmIGEgdmFsdWUgaXMgbm90IHByb3ZpZGVkLCB0aGVuIHRoZSBjaGlsZHJlbiBtdXN0IGJlIHNpbXBsZS5cbiAgICBpZiAocHJvcHMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ29iamVjdCcgJiYgcHJvcHMuY2hpbGRyZW4gIT09IG51bGwpIHtcbiAgICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFkaWRXYXJuSW52YWxpZENoaWxkKSB7XG4gICAgICAgICAgICBkaWRXYXJuSW52YWxpZENoaWxkID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCBpbmZlciB0aGUgb3B0aW9uIHZhbHVlIG9mIGNvbXBsZXggY2hpbGRyZW4uICcgKyAnUGFzcyBhIGB2YWx1ZWAgcHJvcCBvciB1c2UgYSBwbGFpbiBzdHJpbmcgYXMgY2hpbGRyZW4gdG8gPG9wdGlvbj4uJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIWRpZFdhcm5JbnZhbGlkSW5uZXJIVE1MKSB7XG4gICAgICAgICAgZGlkV2FybkludmFsaWRJbm5lckhUTUwgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1Bhc3MgYSBgdmFsdWVgIHByb3AgaWYgeW91IHNldCBkYW5nZXJvdXNseUlubmVySFRNTCBzbyBSZWFjdCBrbm93cyAnICsgJ3doaWNoIHZhbHVlIHNob3VsZCBiZSBzZWxlY3RlZC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVE9ETzogUmVtb3ZlIHN1cHBvcnQgZm9yIGBzZWxlY3RlZGAgaW4gPG9wdGlvbj4uXG5cblxuICAgIGlmIChwcm9wcy5zZWxlY3RlZCAhPSBudWxsICYmICFkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbikge1xuICAgICAgZXJyb3IoJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBvbiA8c2VsZWN0PiBpbnN0ZWFkIG9mICcgKyAnc2V0dGluZyBgc2VsZWN0ZWRgIG9uIDxvcHRpb24+LicpO1xuXG4gICAgICBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbnZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblxuZnVuY3Rpb24gaXNBcnJheShhKSB7XG4gIHJldHVybiBpc0FycmF5SW1wbChhKTtcbn1cblxudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZTtcblxue1xuICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICBpZiAob3duZXJOYW1lKSB7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciB2YWx1ZVByb3BOYW1lcyA9IFsndmFsdWUnLCAnZGVmYXVsdFZhbHVlJ107XG4vKipcbiAqIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICovXG5cbmZ1bmN0aW9uIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKSB7XG4gIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlUHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcE5hbWUgPSB2YWx1ZVByb3BOYW1lc1tpXTtcblxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcE5hbWVJc0FycmF5ID0gaXNBcnJheShwcm9wc1twcm9wTmFtZV0pO1xuXG4gICAgICBpZiAocHJvcHMubXVsdGlwbGUgJiYgIXByb3BOYW1lSXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmICcgKyAnYG11bHRpcGxlYCBpcyB0cnVlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb3BzLm11bHRpcGxlICYmIHByb3BOYW1lSXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGEgc2NhbGFyICcgKyAndmFsdWUgaWYgYG11bHRpcGxlYCBpcyBmYWxzZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMobm9kZSwgbXVsdGlwbGUsIHByb3BWYWx1ZSwgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gIHZhciBvcHRpb25zID0gbm9kZS5vcHRpb25zO1xuXG4gIGlmIChtdWx0aXBsZSkge1xuICAgIHZhciBzZWxlY3RlZFZhbHVlcyA9IHByb3BWYWx1ZTtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gUHJlZml4IHRvIGF2b2lkIGNoYW9zIHdpdGggc3BlY2lhbCBrZXlzLlxuICAgICAgc2VsZWN0ZWRWYWx1ZVsnJCcgKyBzZWxlY3RlZFZhbHVlc1tpXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBvcHRpb25zLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eSgnJCcgKyBvcHRpb25zW19pXS52YWx1ZSk7XG5cbiAgICAgIGlmIChvcHRpb25zW19pXS5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdGVkICYmIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW19pXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgc2V0IGBzZWxlY3QudmFsdWVgIGFzIGV4YWN0IGJlaGF2aW9yIGlzbid0IGNvbnNpc3RlbnQgYWNyb3NzIGFsbFxuICAgIC8vIGJyb3dzZXJzIGZvciBhbGwgY2FzZXMuXG4gICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShwcm9wVmFsdWUpKTtcblxuICAgIHZhciBkZWZhdWx0U2VsZWN0ZWQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgb3B0aW9ucy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICBpZiAob3B0aW9uc1tfaTJdLnZhbHVlID09PSBfc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBvcHRpb25zW19pMl0uc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgICBvcHRpb25zW19pMl0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRTZWxlY3RlZCA9PT0gbnVsbCAmJiAhb3B0aW9uc1tfaTJdLmRpc2FibGVkKSB7XG4gICAgICAgIGRlZmF1bHRTZWxlY3RlZCA9IG9wdGlvbnNbX2kyXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFNlbGVjdGVkICE9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0U2VsZWN0ZWQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHNlbGVjdD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgb3B0aW9uYWxseSBzZXR0aW5nIHRoZVxuICogcHJvcHMgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuIElmIGBtdWx0aXBsZWAgaXMgZmFsc2UsIHRoZSBwcm9wIG11c3QgYmUgYVxuICogc3RyaW5nYWJsZS4gSWYgYG11bHRpcGxlYCBpcyB0cnVlLCB0aGUgcHJvcCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ2FibGVzLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGNoYW5nZSB0aGVcbiAqIHNlbGVjdGVkIG9wdGlvbiB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAqXG4gKiBJZiBpdCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBvcHRpb25zIHdpbGwgbm90XG4gKiB1cGRhdGUgaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb25zLiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIG9wdGlvbnMgdG8gdXBkYXRlLlxuICpcbiAqIElmIGBkZWZhdWx0VmFsdWVgIGlzIHByb3ZpZGVkLCBhbnkgb3B0aW9ucyB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZXMgd2lsbCBiZVxuICogc2VsZWN0ZWQuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNlbGVjdFByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlKSB7XG4gICAgICBlcnJvcignU2VsZWN0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBzZWxlY3QgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gaW5pdFNlbGVjdChlbGVtZW50LCB2YWx1ZSwgZGVmYXVsdFZhbHVlLCBtdWx0aXBsZSkge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIG5vZGUubXVsdGlwbGUgPSAhIW11bHRpcGxlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIW11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIW11bHRpcGxlLCBkZWZhdWx0VmFsdWUsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVTZWxlY3QoZWxlbWVudCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSwgbXVsdGlwbGUsIHdhc011bHRpcGxlKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFtdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmICghIXdhc011bHRpcGxlICE9PSAhIW11bHRpcGxlKSB7XG4gICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYgYG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIW11bHRpcGxlLCBkZWZhdWx0VmFsdWUsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhbXVsdGlwbGUsIG11bHRpcGxlID8gW10gOiAnJywgZmFsc2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTZWxlY3RTdGF0ZShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IGZhbHNlO1xuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHRleHRhcmVhPiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIGB2YWx1ZWAsIGFuZFxuICogYGRlZmF1bHRWYWx1ZWAuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSB0cmFkaXRpb25hbCBET00gQVBJIGJlY2F1c2UgdmFsdWUgaXNcbiAqIHVzdWFsbHkgc2V0IGFzIFBDREFUQSBjaGlsZHJlbi5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBhZmZlY3QgdGhlXG4gKiB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbFxuICogbm90IHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGVtcHR5IHZhbHVlLCB0aGUgcHJvcFxuICogYGRlZmF1bHRWYWx1ZWAgaWYgc3BlY2lmaWVkLCBvciB0aGUgY2hpbGRyZW4gY29udGVudCAoZGVwcmVjYXRlZCkuXG4gKi9cblxuZnVuY3Rpb24gdmFsaWRhdGVUZXh0YXJlYVByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbERlZmF1bHRWYWwpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhIHRleHRhcmVhIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ1RleHRhcmVhIGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCB0ZXh0YXJlYSAnICsgJ2FuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50Jyk7XG5cbiAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuY2hpbGRyZW4gIT0gbnVsbCAmJiBwcm9wcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICBlcnJvcignVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIGluc3RlYWQgb2Ygc2V0dGluZyAnICsgJ2NoaWxkcmVuIG9uIDx0ZXh0YXJlYT4uJyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVUZXh0YXJlYShlbGVtZW50LCB2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgIHZhciBuZXdWYWx1ZSA9IHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUodmFsdWUpKTsgLy8gVG8gYXZvaWQgc2lkZSBlZmZlY3RzIChzdWNoIGFzIGxvc2luZyB0ZXh0IHNlbGVjdGlvbiksIG9ubHkgc2V0IHZhbHVlIGlmIGNoYW5nZWRcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgbm9kZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH0gLy8gVE9PTzogVGhpcyBzaG91bGQgcmVzcGVjdCBkaXNhYmxlSW5wdXRBdHRyaWJ1dGVTeW5jaW5nIGZsYWcuXG5cblxuICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUuZGVmYXVsdFZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKGRlZmF1bHRWYWx1ZSkpO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gJyc7XG4gIH1cbn1cbmZ1bmN0aW9uIGluaXRUZXh0YXJlYShlbGVtZW50LCB2YWx1ZSwgZGVmYXVsdFZhbHVlLCBjaGlsZHJlbikge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBpbml0aWFsVmFsdWUgPSB2YWx1ZTsgLy8gT25seSBib3RoZXIgZmV0Y2hpbmcgZGVmYXVsdCB2YWx1ZSBpZiB3ZSdyZSBnb2luZyB0byB1c2UgaXRcblxuICBpZiAoaW5pdGlhbFZhbHVlID09IG51bGwpIHtcbiAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lmIHlvdSBzdXBwbHkgYGRlZmF1bHRWYWx1ZWAgb24gYSA8dGV4dGFyZWE+LCBkbyBub3QgcGFzcyBjaGlsZHJlbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJzx0ZXh0YXJlYT4gY2FuIG9ubHkgaGF2ZSBhdCBtb3N0IG9uZSBjaGlsZC4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdFZhbHVlID0gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBpbml0aWFsVmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICB2YXIgc3RyaW5nVmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKGluaXRpYWxWYWx1ZSk7XG4gIG5vZGUuZGVmYXVsdFZhbHVlID0gc3RyaW5nVmFsdWU7IC8vIFRoaXMgd2lsbCBiZSB0b1N0cmluZzplZC5cbiAgLy8gVGhpcyBpcyBpbiBwb3N0TW91bnQgYmVjYXVzZSB3ZSBuZWVkIGFjY2VzcyB0byB0aGUgRE9NIG5vZGUsIHdoaWNoIGlzIG5vdFxuICAvLyBhdmFpbGFibGUgdW50aWwgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgbW91bnRlZC5cblxuICB2YXIgdGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50OyAvLyBPbmx5IHNldCBub2RlLnZhbHVlIGlmIHRleHRDb250ZW50IGlzIGVxdWFsIHRvIHRoZSBleHBlY3RlZFxuICAvLyBpbml0aWFsIHZhbHVlLiBJbiBJRTEwL0lFMTEgdGhlcmUgaXMgYSBidWcgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZVxuICAvLyB3aWxsIHBvcHVsYXRlIHRleHRDb250ZW50IGFzIHdlbGwuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzEwMTUyNS9cblxuICBpZiAodGV4dENvbnRlbnQgPT09IHN0cmluZ1ZhbHVlKSB7XG4gICAgaWYgKHRleHRDb250ZW50ICE9PSAnJyAmJiB0ZXh0Q29udGVudCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRleHRDb250ZW50O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRUZXh0YXJlYVN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIERPTSBjb21wb25lbnQgaXMgc3RpbGwgbW91bnRlZDsgdXBkYXRlXG4gIHVwZGF0ZVRleHRhcmVhKGVsZW1lbnQsIHByb3BzLnZhbHVlLCBwcm9wcy5kZWZhdWx0VmFsdWUpO1xufVxuXG4vLyBUaGlzIHZhbGlkYXRpb24gY29kZSB3YXMgd3JpdHRlbiBiYXNlZCBvbiB0aGUgSFRNTDUgcGFyc2luZyBzcGVjOlxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcbi8vXG4vLyBOb3RlOiB0aGlzIGRvZXMgbm90IGNhdGNoIGFsbCBpbnZhbGlkIG5lc3RpbmcsIG5vciBkb2VzIGl0IHRyeSB0byAoYXMgaXQnc1xuLy8gbm90IGNsZWFyIHdoYXQgcHJhY3RpY2FsIGJlbmVmaXQgZG9pbmcgc28gcHJvdmlkZXMpOyBpbnN0ZWFkLCB3ZSB3YXJuIG9ubHlcbi8vIGZvciBjYXNlcyB3aGVyZSB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSBhIHBhcnNlIHRyZWUgZGlmZmVyaW5nIGZyb20gd2hhdCBSZWFjdFxuLy8gaW50ZW5kZWQuIEZvciBleGFtcGxlLCA8Yj48ZGl2PjwvZGl2PjwvYj4gaXMgaW52YWxpZCBidXQgd2UgZG9uJ3Qgd2FyblxuLy8gYmVjYXVzZSBpdCBzdGlsbCBwYXJzZXMgY29ycmVjdGx5OyB3ZSBkbyB3YXJuIGZvciBvdGhlciBjYXNlcyBsaWtlIG5lc3RlZFxuLy8gPHA+IHRhZ3Mgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgaW1wbGljaXRseSBjbG9zZXMgdGhlXG4vLyBmaXJzdCwgY2F1c2luZyBhIGNvbmZ1c2luZyBtZXNzLlxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjc3BlY2lhbFxudmFyIHNwZWNpYWxUYWdzID0gWydhZGRyZXNzJywgJ2FwcGxldCcsICdhcmVhJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYmFzZScsICdiYXNlZm9udCcsICdiZ3NvdW5kJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdidXR0b24nLCAnY2FwdGlvbicsICdjZW50ZXInLCAnY29sJywgJ2NvbGdyb3VwJywgJ2RkJywgJ2RldGFpbHMnLCAnZGlyJywgJ2RpdicsICdkbCcsICdkdCcsICdlbWJlZCcsICdmaWVsZHNldCcsICdmaWdjYXB0aW9uJywgJ2ZpZ3VyZScsICdmb290ZXInLCAnZm9ybScsICdmcmFtZScsICdmcmFtZXNldCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpZnJhbWUnLCAnaW1nJywgJ2lucHV0JywgJ2lzaW5kZXgnLCAnbGknLCAnbGluaycsICdsaXN0aW5nJywgJ21haW4nLCAnbWFycXVlZScsICdtZW51JywgJ21lbnVpdGVtJywgJ21ldGEnLCAnbmF2JywgJ25vZW1iZWQnLCAnbm9mcmFtZXMnLCAnbm9zY3JpcHQnLCAnb2JqZWN0JywgJ29sJywgJ3AnLCAncGFyYW0nLCAncGxhaW50ZXh0JywgJ3ByZScsICdzY3JpcHQnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc291cmNlJywgJ3N0eWxlJywgJ3N1bW1hcnknLCAndGFibGUnLCAndGJvZHknLCAndGQnLCAndGVtcGxhdGUnLCAndGV4dGFyZWEnLCAndGZvb3QnLCAndGgnLCAndGhlYWQnLCAndGl0bGUnLCAndHInLCAndHJhY2snLCAndWwnLCAnd2JyJywgJ3htcCddOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuXG52YXIgaW5TY29wZVRhZ3MgPSBbJ2FwcGxldCcsICdjYXB0aW9uJywgJ2h0bWwnLCAndGFibGUnLCAndGQnLCAndGgnLCAnbWFycXVlZScsICdvYmplY3QnLCAndGVtcGxhdGUnLCAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNodG1sLWludGVncmF0aW9uLXBvaW50XG4vLyBUT0RPOiBEaXN0aW5ndWlzaCBieSBuYW1lc3BhY2UgaGVyZSAtLSBmb3IgPHRpdGxlPiwgaW5jbHVkaW5nIGl0IGhlcmVcbi8vIGVycnMgb24gdGhlIHNpZGUgb2YgZmV3ZXIgd2FybmluZ3Ncbidmb3JlaWduT2JqZWN0JywgJ2Rlc2MnLCAndGl0bGUnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tYnV0dG9uLXNjb3BlXG5cbnZhciBidXR0b25TY29wZVRhZ3MgPSBpblNjb3BlVGFncy5jb25jYXQoWydidXR0b24nXSkgOyAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNnZW5lcmF0ZS1pbXBsaWVkLWVuZC10YWdzXG5cbnZhciBpbXBsaWVkRW5kVGFncyA9IFsnZGQnLCAnZHQnLCAnbGknLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3AnLCAncnAnLCAncnQnXTtcbnZhciBlbXB0eUFuY2VzdG9ySW5mb0RldiA9IHtcbiAgY3VycmVudDogbnVsbCxcbiAgZm9ybVRhZzogbnVsbCxcbiAgYVRhZ0luU2NvcGU6IG51bGwsXG4gIGJ1dHRvblRhZ0luU2NvcGU6IG51bGwsXG4gIG5vYnJUYWdJblNjb3BlOiBudWxsLFxuICBwVGFnSW5CdXR0b25TY29wZTogbnVsbCxcbiAgbGlzdEl0ZW1UYWdBdXRvY2xvc2luZzogbnVsbCxcbiAgZGxJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gIGNvbnRhaW5lclRhZ0luU2NvcGU6IG51bGxcbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZWRBbmNlc3RvckluZm9EZXYob2xkSW5mbywgdGFnKSB7XG4gIHtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gYXNzaWduKHt9LCBvbGRJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvRGV2KTtcblxuICAgIHZhciBpbmZvID0ge1xuICAgICAgdGFnOiB0YWdcbiAgICB9O1xuXG4gICAgaWYgKGluU2NvcGVUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChidXR0b25TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gbnVsbDtcbiAgICB9IC8vIFNlZSBydWxlcyBmb3IgJ2xpJywgJ2RkJywgJ2R0JyBzdGFydCB0YWdzIGluXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuXG5cbiAgICBpZiAoc3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSAmJiB0YWcgIT09ICdhZGRyZXNzJyAmJiB0YWcgIT09ICdkaXYnICYmIHRhZyAhPT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgIH1cblxuICAgIGFuY2VzdG9ySW5mby5jdXJyZW50ID0gaW5mbztcblxuICAgIGlmICh0YWcgPT09ICdmb3JtJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmZvcm1UYWcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdhJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnYnV0dG9uJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdub2JyJykge1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2xpJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdkZCcgfHwgdGFnID09PSAnZHQnKSB7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICcjZG9jdW1lbnQnIHx8IHRhZyA9PT0gJ2h0bWwnKSB7XG4gICAgICBhbmNlc3RvckluZm8uY29udGFpbmVyVGFnSW5TY29wZSA9IG51bGw7XG4gICAgfSBlbHNlIGlmICghYW5jZXN0b3JJbmZvLmNvbnRhaW5lclRhZ0luU2NvcGUpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5jb250YWluZXJUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICByZXR1cm4gYW5jZXN0b3JJbmZvO1xuICB9XG59XG4vKipcbiAqIFJldHVybnMgd2hldGhlclxuICovXG5cblxuZnVuY3Rpb24gaXNUYWdWYWxpZFdpdGhQYXJlbnQodGFnLCBwYXJlbnRUYWcpIHtcbiAgLy8gRmlyc3QsIGxldCdzIGNoZWNrIGlmIHdlJ3JlIGluIGFuIHVudXN1YWwgcGFyc2luZyBtb2RlLi4uXG4gIHN3aXRjaCAocGFyZW50VGFnKSB7XG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluc2VsZWN0XG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHJldHVybiB0YWcgPT09ICdocicgfHwgdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICdvcHRncm91cCcgfHwgdGFnID09PSAnI3RleHQnO1xuXG4gICAgY2FzZSAnb3B0Z3JvdXAnOlxuICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnI3RleHQnO1xuICAgIC8vIFN0cmljdGx5IHNwZWFraW5nLCBzZWVpbmcgYW4gPG9wdGlvbj4gZG9lc24ndCBtZWFuIHdlJ3JlIGluIGEgPHNlbGVjdD5cbiAgICAvLyBidXRcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICByZXR1cm4gdGFnID09PSAnI3RleHQnO1xuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRkXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY2FwdGlvblxuICAgIC8vIE5vIHNwZWNpYWwgYmVoYXZpb3Igc2luY2UgdGhlc2UgcnVsZXMgZmFsbCBiYWNrIHRvIFwiaW4gYm9keVwiIG1vZGUgZm9yXG4gICAgLy8gYWxsIGV4Y2VwdCBzcGVjaWFsIHRhYmxlIG5vZGVzIHdoaWNoIGNhdXNlIGJhZCBwYXJzaW5nIGJlaGF2aW9yIGFueXdheS5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50clxuXG4gICAgY2FzZSAndHInOlxuICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RoJyB8fCB0YWcgPT09ICd0ZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRib2R5XG5cbiAgICBjYXNlICd0Ym9keSc6XG4gICAgY2FzZSAndGhlYWQnOlxuICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgIHJldHVybiB0YWcgPT09ICd0cicgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNvbGdyb3VwXG5cbiAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICByZXR1cm4gdGFnID09PSAnY29sJyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGFibGVcblxuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIHJldHVybiB0YWcgPT09ICdjYXB0aW9uJyB8fCB0YWcgPT09ICdjb2xncm91cCcgfHwgdGFnID09PSAndGJvZHknIHx8IHRhZyA9PT0gJ3Rmb290JyB8fCB0YWcgPT09ICd0aGVhZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmhlYWRcblxuICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgcmV0dXJuIHRhZyA9PT0gJ2Jhc2UnIHx8IHRhZyA9PT0gJ2Jhc2Vmb250JyB8fCB0YWcgPT09ICdiZ3NvdW5kJyB8fCB0YWcgPT09ICdsaW5rJyB8fCB0YWcgPT09ICdtZXRhJyB8fCB0YWcgPT09ICd0aXRsZScgfHwgdGFnID09PSAnbm9zY3JpcHQnIHx8IHRhZyA9PT0gJ25vZnJhbWVzJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VtYW50aWNzLmh0bWwjdGhlLWh0bWwtZWxlbWVudFxuXG4gICAgY2FzZSAnaHRtbCc6XG4gICAgICByZXR1cm4gdGFnID09PSAnaGVhZCcgfHwgdGFnID09PSAnYm9keScgfHwgdGFnID09PSAnZnJhbWVzZXQnO1xuXG4gICAgY2FzZSAnZnJhbWVzZXQnOlxuICAgICAgcmV0dXJuIHRhZyA9PT0gJ2ZyYW1lJztcblxuICAgIGNhc2UgJyNkb2N1bWVudCc6XG4gICAgICByZXR1cm4gdGFnID09PSAnaHRtbCc7XG4gIH0gLy8gUHJvYmFibHkgaW4gdGhlIFwiaW4gYm9keVwiIHBhcnNpbmcgbW9kZSwgc28gd2Ugb3V0bGF3IG9ubHkgdGFnIGNvbWJvc1xuICAvLyB3aGVyZSB0aGUgcGFyc2luZyBydWxlcyBjYXVzZSBpbXBsaWNpdCBvcGVucyBvciBjbG9zZXMgdG8gYmUgYWRkZWQuXG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcblxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaDEnOlxuICAgIGNhc2UgJ2gyJzpcbiAgICBjYXNlICdoMyc6XG4gICAgY2FzZSAnaDQnOlxuICAgIGNhc2UgJ2g1JzpcbiAgICBjYXNlICdoNic6XG4gICAgICByZXR1cm4gcGFyZW50VGFnICE9PSAnaDEnICYmIHBhcmVudFRhZyAhPT0gJ2gyJyAmJiBwYXJlbnRUYWcgIT09ICdoMycgJiYgcGFyZW50VGFnICE9PSAnaDQnICYmIHBhcmVudFRhZyAhPT0gJ2g1JyAmJiBwYXJlbnRUYWcgIT09ICdoNic7XG5cbiAgICBjYXNlICdycCc6XG4gICAgY2FzZSAncnQnOlxuICAgICAgcmV0dXJuIGltcGxpZWRFbmRUYWdzLmluZGV4T2YocGFyZW50VGFnKSA9PT0gLTE7XG5cbiAgICBjYXNlICdib2R5JzpcbiAgICBjYXNlICdjYXB0aW9uJzpcbiAgICBjYXNlICdjb2wnOlxuICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgY2FzZSAnZnJhbWUnOlxuICAgIGNhc2UgJ2hlYWQnOlxuICAgIGNhc2UgJ2h0bWwnOlxuICAgIGNhc2UgJ3Rib2R5JzpcbiAgICBjYXNlICd0ZCc6XG4gICAgY2FzZSAndGZvb3QnOlxuICAgIGNhc2UgJ3RoJzpcbiAgICBjYXNlICd0aGVhZCc6XG4gICAgY2FzZSAndHInOlxuICAgICAgLy8gVGhlc2UgdGFncyBhcmUgb25seSB2YWxpZCB3aXRoIGEgZmV3IHBhcmVudHMgdGhhdCBoYXZlIHNwZWNpYWwgY2hpbGRcbiAgICAgIC8vIHBhcnNpbmcgcnVsZXMgLS0gaWYgd2UncmUgZG93biBoZXJlLCB0aGVuIG5vbmUgb2YgdGhvc2UgbWF0Y2hlZCBhbmRcbiAgICAgIC8vIHNvIHdlIGFsbG93IGl0IG9ubHkgaWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBwYXJlbnQgaXMsIGFzIGFsbCBvdGhlclxuICAgICAgLy8gY2FzZXMgYXJlIGludmFsaWQuXG4gICAgICByZXR1cm4gcGFyZW50VGFnID09IG51bGw7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyXG4gKi9cblxuXG5mdW5jdGlvbiBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgY2FzZSAnYXJ0aWNsZSc6XG4gICAgY2FzZSAnYXNpZGUnOlxuICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOlxuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgY2FzZSAnZGV0YWlscyc6XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICBjYXNlICdkaXInOlxuICAgIGNhc2UgJ2Rpdic6XG4gICAgY2FzZSAnZGwnOlxuICAgIGNhc2UgJ2ZpZWxkc2V0JzpcbiAgICBjYXNlICdmaWdjYXB0aW9uJzpcbiAgICBjYXNlICdmaWd1cmUnOlxuICAgIGNhc2UgJ2Zvb3Rlcic6XG4gICAgY2FzZSAnaGVhZGVyJzpcbiAgICBjYXNlICdoZ3JvdXAnOlxuICAgIGNhc2UgJ21haW4nOlxuICAgIGNhc2UgJ21lbnUnOlxuICAgIGNhc2UgJ25hdic6XG4gICAgY2FzZSAnb2wnOlxuICAgIGNhc2UgJ3AnOlxuICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgIGNhc2UgJ3N1bW1hcnknOlxuICAgIGNhc2UgJ3VsJzpcbiAgICBjYXNlICdwcmUnOlxuICAgIGNhc2UgJ2xpc3RpbmcnOlxuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAneG1wJzpcbiAgICBjYXNlICdoMSc6XG4gICAgY2FzZSAnaDInOlxuICAgIGNhc2UgJ2gzJzpcbiAgICBjYXNlICdoNCc6XG4gICAgY2FzZSAnaDUnOlxuICAgIGNhc2UgJ2g2JzpcbiAgICAgIHJldHVybiBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICBjYXNlICdmb3JtJzpcbiAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZm9ybVRhZyB8fCBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICBjYXNlICdsaSc6XG4gICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICBjYXNlICdkZCc6XG4gICAgY2FzZSAnZHQnOlxuICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGU7XG5cbiAgICBjYXNlICdhJzpcbiAgICAgIC8vIFNwZWMgc2F5cyBzb21ldGhpbmcgYWJvdXQgc3RvcmluZyBhIGxpc3Qgb2YgbWFya2VycywgYnV0IGl0IHNvdW5kc1xuICAgICAgLy8gZXF1aXZhbGVudCB0byB0aGlzIGNoZWNrLlxuICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZTtcblxuICAgIGNhc2UgJ25vYnInOlxuICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgZGlkV2FybiQxID0ge307XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRE9NTmVzdGluZyhjaGlsZFRhZywgYW5jZXN0b3JJbmZvKSB7XG4gIHtcbiAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8gfHwgZW1wdHlBbmNlc3RvckluZm9EZXY7XG4gICAgdmFyIHBhcmVudEluZm8gPSBhbmNlc3RvckluZm8uY3VycmVudDtcbiAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50SW5mbyAmJiBwYXJlbnRJbmZvLnRhZztcbiAgICB2YXIgaW52YWxpZFBhcmVudCA9IGlzVGFnVmFsaWRXaXRoUGFyZW50KGNoaWxkVGFnLCBwYXJlbnRUYWcpID8gbnVsbCA6IHBhcmVudEluZm87XG4gICAgdmFyIGludmFsaWRBbmNlc3RvciA9IGludmFsaWRQYXJlbnQgPyBudWxsIDogZmluZEludmFsaWRBbmNlc3RvckZvclRhZyhjaGlsZFRhZywgYW5jZXN0b3JJbmZvKTtcbiAgICB2YXIgaW52YWxpZFBhcmVudE9yQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50IHx8IGludmFsaWRBbmNlc3RvcjtcblxuICAgIGlmICghaW52YWxpZFBhcmVudE9yQW5jZXN0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYW5jZXN0b3JUYWcgPSBpbnZhbGlkUGFyZW50T3JBbmNlc3Rvci50YWc7XG4gICAgdmFyIHdhcm5LZXkgPSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgICBTdHJpbmcoISFpbnZhbGlkUGFyZW50KSArICd8JyArIGNoaWxkVGFnICsgJ3wnICsgYW5jZXN0b3JUYWc7XG5cbiAgICBpZiAoZGlkV2FybiQxW3dhcm5LZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybiQxW3dhcm5LZXldID0gdHJ1ZTtcbiAgICB2YXIgdGFnRGlzcGxheU5hbWUgPSAnPCcgKyBjaGlsZFRhZyArICc+JztcblxuICAgIGlmIChpbnZhbGlkUGFyZW50KSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICBpZiAoYW5jZXN0b3JUYWcgPT09ICd0YWJsZScgJiYgY2hpbGRUYWcgPT09ICd0cicpIHtcbiAgICAgICAgaW5mbyArPSAnIEFkZCBhIDx0Ym9keT4sIDx0aGVhZD4gb3IgPHRmb290PiB0byB5b3VyIGNvZGUgdG8gbWF0Y2ggdGhlIERPTSB0cmVlIGdlbmVyYXRlZCBieSAnICsgJ3RoZSBicm93c2VyLic7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGNoaWxkIG9mIDwlcz4uJXMnLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcsIGluZm8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBkZXNjZW5kYW50IG9mICcgKyAnPCVzPi4nLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVRleHROZXN0aW5nKGNoaWxkVGV4dCwgcGFyZW50VGFnKSB7XG4gIHtcbiAgICBpZiAoaXNUYWdWYWxpZFdpdGhQYXJlbnQoJyN0ZXh0JywgcGFyZW50VGFnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG5cblxuICAgIHZhciB3YXJuS2V5ID0gJyN0ZXh0fCcgKyBwYXJlbnRUYWc7XG5cbiAgICBpZiAoZGlkV2FybiQxW3dhcm5LZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybiQxW3dhcm5LZXldID0gdHJ1ZTtcblxuICAgIGlmICgvXFxTLy50ZXN0KGNoaWxkVGV4dCkpIHtcbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogVGV4dCBub2RlcyBjYW5ub3QgYXBwZWFyIGFzIGEgY2hpbGQgb2YgPCVzPi4nLCBwYXJlbnRUYWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nKC4uLik6IFdoaXRlc3BhY2UgdGV4dCBub2RlcyBjYW5ub3QgYXBwZWFyIGFzIGEgY2hpbGQgb2YgPCVzPi4gJyArIFwiTWFrZSBzdXJlIHlvdSBkb24ndCBoYXZlIGFueSBleHRyYSB3aGl0ZXNwYWNlIGJldHdlZW4gdGFncyBvbiBcIiArICdlYWNoIGxpbmUgb2YgeW91ciBzb3VyY2UgY29kZS4nLCBwYXJlbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgTUFUSF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG52YXIgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cbnZhciByZXVzYWJsZVNWR0NvbnRhaW5lcjtcblxuZnVuY3Rpb24gc2V0SW5uZXJIVE1MSW1wbChub2RlLCBodG1sKSB7XG4gIGlmIChub2RlLm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSkge1xuXG4gICAgaWYgKCEoJ2lubmVySFRNTCcgaW4gbm9kZSkpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgaW5uZXJIVE1MIGZvciBTVkcgbm9kZXMsIHNvIGluc3RlYWQgd2UgaW5qZWN0IHRoZVxuICAgICAgLy8gbmV3IG1hcmt1cCBpbiBhIHRlbXAgbm9kZSBhbmQgdGhlbiBtb3ZlIHRoZSBjaGlsZCBub2RlcyBhY3Jvc3MgaW50b1xuICAgICAgLy8gdGhlIHRhcmdldCBub2RlXG4gICAgICByZXVzYWJsZVNWR0NvbnRhaW5lciA9IHJldXNhYmxlU1ZHQ29udGFpbmVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcmV1c2FibGVTVkdDb250YWluZXIuaW5uZXJIVE1MID0gJzxzdmc+JyArIGh0bWwudmFsdWVPZigpLnRvU3RyaW5nKCkgKyAnPC9zdmc+JztcbiAgICAgIHZhciBzdmdOb2RlID0gcmV1c2FibGVTVkdDb250YWluZXIuZmlyc3RDaGlsZDtcblxuICAgICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV1cbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdXG5cblxuICAgICAgd2hpbGUgKHN2Z05vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLmFwcGVuZENoaWxkKHN2Z05vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG59XG5cbnZhciBzZXRJbm5lckhUTUwgPSBzZXRJbm5lckhUTUxJbXBsOyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC1yZXNvbHZlLW5hbWVdXG5cbmlmICh0eXBlb2YgTVNBcHAgIT09ICd1bmRlZmluZWQnICYmIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmdW5jdGlvbiB3aGljaCBoYXMgJ3Vuc2FmZScgcHJpdmlsZWdlcyAocmVxdWlyZWQgYnkgd2luZG93czggYXBwcylcbiAgICovXG4gIHNldElubmVySFRNTCA9IGZ1bmN0aW9uIChub2RlLCBodG1sKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3QtcmVzb2x2ZS1uYW1lXVxuICAgIHJldHVybiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gc2V0SW5uZXJIVE1MSW1wbChub2RlLCBodG1sKTtcbiAgICB9KTtcbiAgfTtcbn1cblxudmFyIHNldElubmVySFRNTCQxID0gc2V0SW5uZXJIVE1MO1xuXG4vKipcbiAqIEhUTUwgbm9kZVR5cGUgdmFsdWVzIHRoYXQgcmVwcmVzZW50IHRoZSB0eXBlIG9mIHRoZSBub2RlXG4gKi9cbnZhciBFTEVNRU5UX05PREUgPSAxO1xudmFyIFRFWFRfTk9ERSA9IDM7XG52YXIgQ09NTUVOVF9OT0RFID0gODtcbnZhciBET0NVTUVOVF9OT0RFID0gOTtcbnZhciBET0NVTUVOVF9UWVBFX05PREUgPSAxMDtcbnZhciBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTE7XG5cbi8qKlxuICogU2V0IHRoZSB0ZXh0Q29udGVudCBwcm9wZXJ0eSBvZiBhIG5vZGUuIEZvciB0ZXh0IHVwZGF0ZXMsIGl0J3MgZmFzdGVyXG4gKiB0byBzZXQgdGhlIGBub2RlVmFsdWVgIG9mIHRoZSBUZXh0IG5vZGUgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZ1xuICogYC50ZXh0Q29udGVudGAgd2hpY2ggd2lsbCByZW1vdmUgdGhlIGV4aXN0aW5nIG5vZGUgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQGludGVybmFsXG4gKi9cblxuZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQobm9kZSwgdGV4dCkge1xuICBpZiAodGV4dCkge1xuICAgIHZhciBmaXJzdENoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZCA9PT0gbm9kZS5sYXN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBmaXJzdENoaWxkLm5vZGVWYWx1ZSA9IHRleHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59XG5cbi8vIExpc3QgZGVyaXZlZCBmcm9tIEdlY2tvIHNvdXJjZSBjb2RlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvZ2Vja28tZGV2L2Jsb2IvNGU2MzhlZmM3MS9sYXlvdXQvc3R5bGUvdGVzdC9wcm9wZXJ0eV9kYXRhYmFzZS5qc1xudmFyIHNob3J0aGFuZFRvTG9uZ2hhbmQgPSB7XG4gIGFuaW1hdGlvbjogWydhbmltYXRpb25EZWxheScsICdhbmltYXRpb25EaXJlY3Rpb24nLCAnYW5pbWF0aW9uRHVyYXRpb24nLCAnYW5pbWF0aW9uRmlsbE1vZGUnLCAnYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQnLCAnYW5pbWF0aW9uTmFtZScsICdhbmltYXRpb25QbGF5U3RhdGUnLCAnYW5pbWF0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgYmFja2dyb3VuZDogWydiYWNrZ3JvdW5kQXR0YWNobWVudCcsICdiYWNrZ3JvdW5kQ2xpcCcsICdiYWNrZ3JvdW5kQ29sb3InLCAnYmFja2dyb3VuZEltYWdlJywgJ2JhY2tncm91bmRPcmlnaW4nLCAnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJywgJ2JhY2tncm91bmRSZXBlYXQnLCAnYmFja2dyb3VuZFNpemUnXSxcbiAgYmFja2dyb3VuZFBvc2l0aW9uOiBbJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWSddLFxuICBib3JkZXI6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrRW5kOiBbJ2JvcmRlckJsb2NrRW5kQ29sb3InLCAnYm9yZGVyQmxvY2tFbmRTdHlsZScsICdib3JkZXJCbG9ja0VuZFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrU3RhcnQ6IFsnYm9yZGVyQmxvY2tTdGFydENvbG9yJywgJ2JvcmRlckJsb2NrU3RhcnRTdHlsZScsICdib3JkZXJCbG9ja1N0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyQm90dG9tOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG4gIGJvcmRlckNvbG9yOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclRvcENvbG9yJ10sXG4gIGJvcmRlckltYWdlOiBbJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCddLFxuICBib3JkZXJJbmxpbmVFbmQ6IFsnYm9yZGVySW5saW5lRW5kQ29sb3InLCAnYm9yZGVySW5saW5lRW5kU3R5bGUnLCAnYm9yZGVySW5saW5lRW5kV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lU3RhcnQ6IFsnYm9yZGVySW5saW5lU3RhcnRDb2xvcicsICdib3JkZXJJbmxpbmVTdGFydFN0eWxlJywgJ2JvcmRlcklubGluZVN0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyTGVmdDogWydib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCddLFxuICBib3JkZXJSYWRpdXM6IFsnYm9yZGVyQm90dG9tTGVmdFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJ10sXG4gIGJvcmRlclJpZ2h0OiBbJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJ10sXG4gIGJvcmRlclN0eWxlOiBbJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclRvcFN0eWxlJ10sXG4gIGJvcmRlclRvcDogWydib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJXaWR0aDogWydib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BXaWR0aCddLFxuICBjb2x1bW5SdWxlOiBbJ2NvbHVtblJ1bGVDb2xvcicsICdjb2x1bW5SdWxlU3R5bGUnLCAnY29sdW1uUnVsZVdpZHRoJ10sXG4gIGNvbHVtbnM6IFsnY29sdW1uQ291bnQnLCAnY29sdW1uV2lkdGgnXSxcbiAgZmxleDogWydmbGV4QmFzaXMnLCAnZmxleEdyb3cnLCAnZmxleFNocmluayddLFxuICBmbGV4RmxvdzogWydmbGV4RGlyZWN0aW9uJywgJ2ZsZXhXcmFwJ10sXG4gIGZvbnQ6IFsnZm9udEZhbWlseScsICdmb250RmVhdHVyZVNldHRpbmdzJywgJ2ZvbnRLZXJuaW5nJywgJ2ZvbnRMYW5ndWFnZU92ZXJyaWRlJywgJ2ZvbnRTaXplJywgJ2ZvbnRTaXplQWRqdXN0JywgJ2ZvbnRTdHJldGNoJywgJ2ZvbnRTdHlsZScsICdmb250VmFyaWFudCcsICdmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJywgJ2ZvbnRXZWlnaHQnLCAnbGluZUhlaWdodCddLFxuICBmb250VmFyaWFudDogWydmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJ10sXG4gIGdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWQ6IFsnZ3JpZEF1dG9Db2x1bW5zJywgJ2dyaWRBdXRvRmxvdycsICdncmlkQXV0b1Jvd3MnLCAnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGdyaWRBcmVhOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0JywgJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRDb2x1bW46IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnXSxcbiAgZ3JpZENvbHVtbkdhcDogWydjb2x1bW5HYXAnXSxcbiAgZ3JpZEdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWRSb3c6IFsnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZFJvd0dhcDogWydyb3dHYXAnXSxcbiAgZ3JpZFRlbXBsYXRlOiBbJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBsaXN0U3R5bGU6IFsnbGlzdFN0eWxlSW1hZ2UnLCAnbGlzdFN0eWxlUG9zaXRpb24nLCAnbGlzdFN0eWxlVHlwZSddLFxuICBtYXJnaW46IFsnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luVG9wJ10sXG4gIG1hcmtlcjogWydtYXJrZXJFbmQnLCAnbWFya2VyTWlkJywgJ21hcmtlclN0YXJ0J10sXG4gIG1hc2s6IFsnbWFza0NsaXAnLCAnbWFza0NvbXBvc2l0ZScsICdtYXNrSW1hZ2UnLCAnbWFza01vZGUnLCAnbWFza09yaWdpbicsICdtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknLCAnbWFza1JlcGVhdCcsICdtYXNrU2l6ZSddLFxuICBtYXNrUG9zaXRpb246IFsnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJ10sXG4gIG91dGxpbmU6IFsnb3V0bGluZUNvbG9yJywgJ291dGxpbmVTdHlsZScsICdvdXRsaW5lV2lkdGgnXSxcbiAgb3ZlcmZsb3c6IFsnb3ZlcmZsb3dYJywgJ292ZXJmbG93WSddLFxuICBwYWRkaW5nOiBbJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdUb3AnXSxcbiAgcGxhY2VDb250ZW50OiBbJ2FsaWduQ29udGVudCcsICdqdXN0aWZ5Q29udGVudCddLFxuICBwbGFjZUl0ZW1zOiBbJ2FsaWduSXRlbXMnLCAnanVzdGlmeUl0ZW1zJ10sXG4gIHBsYWNlU2VsZjogWydhbGlnblNlbGYnLCAnanVzdGlmeVNlbGYnXSxcbiAgdGV4dERlY29yYXRpb246IFsndGV4dERlY29yYXRpb25Db2xvcicsICd0ZXh0RGVjb3JhdGlvbkxpbmUnLCAndGV4dERlY29yYXRpb25TdHlsZSddLFxuICB0ZXh0RW1waGFzaXM6IFsndGV4dEVtcGhhc2lzQ29sb3InLCAndGV4dEVtcGhhc2lzU3R5bGUnXSxcbiAgdHJhbnNpdGlvbjogWyd0cmFuc2l0aW9uRGVsYXknLCAndHJhbnNpdGlvbkR1cmF0aW9uJywgJ3RyYW5zaXRpb25Qcm9wZXJ0eScsICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgd29yZFdyYXA6IFsnb3ZlcmZsb3dXcmFwJ11cbn07XG5cbnZhciB1cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZztcbnZhciBtc1BhdHRlcm4kMSA9IC9ebXMtLztcbi8qKlxuICogSHlwaGVuYXRlcyBhIGNhbWVsY2FzZWQgQ1NTIHByb3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ01velRyYW5zaXRpb24nKVxuICogICA8IFwiLW1vei10cmFuc2l0aW9uXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ21zVHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbXMtdHJhbnNpdGlvblwiXG4gKlxuICogQXMgTW9kZXJuaXpyIHN1Z2dlc3RzIChodHRwOi8vbW9kZXJuaXpyLmNvbS9kb2NzLyNwcmVmaXhlZCksIGFuIGBtc2AgcHJlZml4XG4gKiBpcyBjb252ZXJ0ZWQgdG8gYC1tcy1gLlxuICovXG5cbmZ1bmN0aW9uIGh5cGhlbmF0ZVN0eWxlTmFtZShuYW1lKSB7XG4gIHJldHVybiBuYW1lLnJlcGxhY2UodXBwZXJjYXNlUGF0dGVybiwgJy0kMScpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShtc1BhdHRlcm4kMSwgJy1tcy0nKTtcbn1cblxuLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxudmFyIGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiA9IC9eKD86d2Via2l0fG1venxvKVtBLVpdLztcbnZhciBtc1BhdHRlcm4gPSAvXi1tcy0vO1xudmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nOyAvLyBzdHlsZSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb25cblxudmFyIGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiA9IC87XFxzKiQvO1xudmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbnZhciB3YXJuZWRTdHlsZVZhbHVlcyA9IHt9O1xudmFyIHdhcm5lZEZvck5hTlZhbHVlID0gZmFsc2U7XG52YXIgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjYW1lbGl6ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChfLCBjaGFyYWN0ZXIpIHtcbiAgICByZXR1cm4gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZShuYW1lKSB7XG4gIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLCBuYW1lLCAvLyBBcyBBbmRpIFNtaXRoIHN1Z2dlc3RzXG4gICAgLy8gKGh0dHA6Ly93d3cuYW5kaXNtaXRoLmNvbS9ibG9nLzIwMTIvMDIvbW9kZXJuaXpyLXByZWZpeGVkLyksIGFuIGAtbXNgIHByZWZpeFxuICAgIC8vIGlzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYG1zYC5cbiAgICBjYW1lbGl6ZShuYW1lLnJlcGxhY2UobXNQYXR0ZXJuLCAnbXMtJykpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUobmFtZSkge1xuICB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUpIHtcbiAge1xuICAgIGlmICh3YXJuZWRTdHlsZVZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgJiYgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKFwiU3R5bGUgcHJvcGVydHkgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uLiBcIiArICdUcnkgXCIlczogJXNcIiBpbnN0ZWFkLicsIG5hbWUsIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCAnJykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5TdHlsZVZhbHVlSXNOYU4obmFtZSwgdmFsdWUpIHtcbiAge1xuICAgIGlmICh3YXJuZWRGb3JOYU5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvck5hTlZhbHVlID0gdHJ1ZTtcblxuICAgIGVycm9yKCdgTmFOYCBpcyBhbiBpbnZhbGlkIHZhbHVlIGZvciB0aGUgYCVzYCBjc3Mgc3R5bGUgcHJvcGVydHkuJywgbmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FyblN0eWxlVmFsdWVJc0luZmluaXR5KG5hbWUsIHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2FybmVkRm9ySW5maW5pdHlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSB0cnVlO1xuXG4gICAgZXJyb3IoJ2BJbmZpbml0eWAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5WYWxpZFN0eWxlKG5hbWUsIHZhbHVlKSB7XG4gIHtcbiAgICBpZiAobmFtZS5pbmRleE9mKCctJykgPiAtMSkge1xuICAgICAgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4udGVzdChuYW1lKSkge1xuICAgICAgd2FybkJhZFZlbmRvcmVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHdhcm5TdHlsZVZhbHVlSXNOYU4obmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgd2FyblN0eWxlVmFsdWVJc0luZmluaXR5KG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENTUyBwcm9wZXJ0aWVzIHdoaWNoIGFjY2VwdCBudW1iZXJzIGJ1dCBhcmUgbm90IGluIHVuaXRzIG9mIFwicHhcIi5cbiAqL1xudmFyIHVuaXRsZXNzTnVtYmVycyA9IG5ldyBTZXQoWydhbmltYXRpb25JdGVyYXRpb25Db3VudCcsICdhc3BlY3RSYXRpbycsICdib3JkZXJJbWFnZU91dHNldCcsICdib3JkZXJJbWFnZVNsaWNlJywgJ2JvcmRlckltYWdlV2lkdGgnLCAnYm94RmxleCcsICdib3hGbGV4R3JvdXAnLCAnYm94T3JkaW5hbEdyb3VwJywgJ2NvbHVtbkNvdW50JywgJ2NvbHVtbnMnLCAnZmxleCcsICdmbGV4R3JvdycsICdmbGV4UG9zaXRpdmUnLCAnZmxleFNocmluaycsICdmbGV4TmVnYXRpdmUnLCAnZmxleE9yZGVyJywgJ2dyaWRBcmVhJywgJ2dyaWRSb3cnLCAnZ3JpZFJvd0VuZCcsICdncmlkUm93U3BhbicsICdncmlkUm93U3RhcnQnLCAnZ3JpZENvbHVtbicsICdncmlkQ29sdW1uRW5kJywgJ2dyaWRDb2x1bW5TcGFuJywgJ2dyaWRDb2x1bW5TdGFydCcsICdmb250V2VpZ2h0JywgJ2xpbmVDbGFtcCcsICdsaW5lSGVpZ2h0JywgJ29wYWNpdHknLCAnb3JkZXInLCAnb3JwaGFucycsICdzY2FsZScsICd0YWJTaXplJywgJ3dpZG93cycsICd6SW5kZXgnLCAnem9vbScsICdmaWxsT3BhY2l0eScsIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbidmbG9vZE9wYWNpdHknLCAnc3RvcE9wYWNpdHknLCAnc3Ryb2tlRGFzaGFycmF5JywgJ3N0cm9rZURhc2hvZmZzZXQnLCAnc3Ryb2tlTWl0ZXJsaW1pdCcsICdzdHJva2VPcGFjaXR5JywgJ3N0cm9rZVdpZHRoJywgJ01vekFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50JywgLy8gS25vd24gUHJlZml4ZWQgUHJvcGVydGllc1xuJ01vekJveEZsZXgnLCAvLyBUT0RPOiBSZW1vdmUgdGhlc2Ugc2luY2UgdGhleSBzaG91bGRuJ3QgYmUgdXNlZCBpbiBtb2Rlcm4gY29kZVxuJ01vekJveEZsZXhHcm91cCcsICdNb3pMaW5lQ2xhbXAnLCAnbXNBbmltYXRpb25JdGVyYXRpb25Db3VudCcsICdtc0ZsZXgnLCAnbXNab29tJywgJ21zRmxleEdyb3cnLCAnbXNGbGV4TmVnYXRpdmUnLCAnbXNGbGV4T3JkZXInLCAnbXNGbGV4UG9zaXRpdmUnLCAnbXNGbGV4U2hyaW5rJywgJ21zR3JpZENvbHVtbicsICdtc0dyaWRDb2x1bW5TcGFuJywgJ21zR3JpZFJvdycsICdtc0dyaWRSb3dTcGFuJywgJ1dlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50JywgJ1dlYmtpdEJveEZsZXgnLCAnV2ViS2l0Qm94RmxleEdyb3VwJywgJ1dlYmtpdEJveE9yZGluYWxHcm91cCcsICdXZWJraXRDb2x1bW5Db3VudCcsICdXZWJraXRDb2x1bW5zJywgJ1dlYmtpdEZsZXgnLCAnV2Via2l0RmxleEdyb3cnLCAnV2Via2l0RmxleFBvc2l0aXZlJywgJ1dlYmtpdEZsZXhTaHJpbmsnLCAnV2Via2l0TGluZUNsYW1wJ10pO1xuZnVuY3Rpb24gaXNVbml0bGVzc051bWJlciAobmFtZSkge1xuICByZXR1cm4gdW5pdGxlc3NOdW1iZXJzLmhhcyhuYW1lKTtcbn1cblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggQ1NTIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNyZWF0ZXMgYSBzdHJpbmcgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBlcXVpdmFsZW50IHRvIHRoZSBzdHlsZVxuICogYXR0cmlidXRlIGdlbmVyYXRlZCBieSBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIEl0IGJ5LXBhc3NlcyB3YXJuaW5ncyBhbmRcbiAqIHNlY3VyaXR5IGNoZWNrcyBzbyBpdCdzIG5vdCBzYWZlIHRvIHVzZSB0aGlzIHZhbHVlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuXG4gKiBjb21wYXJpc29uLiBJdCBpcyBvbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMoc3R5bGVzKSB7XG4gIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9ICcnO1xuICAgIHZhciBkZWxpbWl0ZXIgPSAnJztcblxuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJyAmJiB2YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcblxuICAgICAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNoZWNrQ1NTUHJvcGVydHlTdHJpbmdDb2VyY2lvbih2YWx1ZSwgc3R5bGVOYW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXJpYWxpemVkICs9IGRlbGltaXRlciArIHN0eWxlTmFtZSArICc6JyArICgnJyArIHZhbHVlKS50cmltKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDAgJiYgIWlzVW5pdGxlc3NOdW1iZXIoc3R5bGVOYW1lKSkge1xuICAgICAgICAgICAgc2VyaWFsaXplZCArPSBkZWxpbWl0ZXIgKyBoeXBoZW5hdGVTdHlsZU5hbWUoc3R5bGVOYW1lKSArICc6JyArIHZhbHVlICsgJ3B4JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHN0eWxlTmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlcmlhbGl6ZWQgKz0gZGVsaW1pdGVyICsgaHlwaGVuYXRlU3R5bGVOYW1lKHN0eWxlTmFtZSkgKyAnOicgKyAoJycgKyB2YWx1ZSkudHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGltaXRlciA9ICc7JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VyaWFsaXplZCB8fCBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yU3R5bGUoc3R5bGUsIHN0eWxlTmFtZSwgdmFsdWUpIHtcbiAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcblxuICB7XG4gICAgaWYgKCFpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICB3YXJuVmFsaWRTdHlsZShzdHlsZU5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCAnJyk7XG4gICAgfSBlbHNlIGlmIChzdHlsZU5hbWUgPT09ICdmbG9hdCcpIHtcbiAgICAgIHN0eWxlLmNzc0Zsb2F0ID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSAnJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgIHN0eWxlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgdmFsdWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDAgJiYgIWlzVW5pdGxlc3NOdW1iZXIoc3R5bGVOYW1lKSkge1xuICAgIHN0eWxlW3N0eWxlTmFtZV0gPSB2YWx1ZSArICdweCc7IC8vIFByZXN1bWVzIGltcGxpY2l0ICdweCcgc3VmZml4IGZvciB1bml0bGVzcyBudW1iZXJzXG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0eWxlTmFtZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgc3R5bGUuY3NzRmxvYXQgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHN0eWxlTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSAoJycgKyB2YWx1ZSkudHJpbSgpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgbXVsdGlwbGUgc3R5bGVzIG9uIGEgbm9kZS4gIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIGFzXG4gKiAnJyAoZW1wdHkgc3RyaW5nKSwgdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0eWxlcywgcHJldlN0eWxlcykge1xuICBpZiAoc3R5bGVzICE9IG51bGwgJiYgdHlwZW9mIHN0eWxlcyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgc3R5bGVgIHByb3AgZXhwZWN0cyBhIG1hcHBpbmcgZnJvbSBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcywgJyArIFwibm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArICdlbSd9fSB3aGVuIFwiICsgJ3VzaW5nIEpTWC4nKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoc3R5bGVzKSB7XG4gICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgIE9iamVjdC5mcmVlemUoc3R5bGVzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlO1xuXG4gIGlmIChwcmV2U3R5bGVzICE9IG51bGwpIHtcbiAgICB7XG4gICAgICB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYocHJldlN0eWxlcywgc3R5bGVzKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gcHJldlN0eWxlcykge1xuICAgICAgaWYgKHByZXZTdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoc3R5bGVzID09IG51bGwgfHwgIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAvLyBDbGVhciBzdHlsZVxuICAgICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuXG4gICAgICAgIGlmIChpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCAnJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgICAgICAgc3R5bGUuY3NzRmxvYXQgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHlsZVtzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfc3R5bGVOYW1lIGluIHN0eWxlcykge1xuICAgICAgdmFyIHZhbHVlID0gc3R5bGVzW19zdHlsZU5hbWVdO1xuXG4gICAgICBpZiAoc3R5bGVzLmhhc093blByb3BlcnR5KF9zdHlsZU5hbWUpICYmIHByZXZTdHlsZXNbX3N0eWxlTmFtZV0gIT09IHZhbHVlKSB7XG4gICAgICAgIHNldFZhbHVlRm9yU3R5bGUoc3R5bGUsIF9zdHlsZU5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX3N0eWxlTmFtZTIgaW4gc3R5bGVzKSB7XG4gICAgICBpZiAoc3R5bGVzLmhhc093blByb3BlcnR5KF9zdHlsZU5hbWUyKSkge1xuICAgICAgICB2YXIgX3ZhbHVlID0gc3R5bGVzW19zdHlsZU5hbWUyXTtcbiAgICAgICAgc2V0VmFsdWVGb3JTdHlsZShzdHlsZSwgX3N0eWxlTmFtZTIsIF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVFbXB0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG59XG4vKipcbiAqIEdpdmVuIHtjb2xvcjogJ3JlZCcsIG92ZXJmbG93OiAnaGlkZGVuJ30gcmV0dXJucyB7XG4gKiAgIGNvbG9yOiAnY29sb3InLFxuICogICBvdmVyZmxvd1g6ICdvdmVyZmxvdycsXG4gKiAgIG92ZXJmbG93WTogJ292ZXJmbG93JyxcbiAqIH0uIFRoaXMgY2FuIGJlIHJlYWQgYXMgXCJ0aGUgb3ZlcmZsb3dZIHByb3BlcnR5IHdhcyBzZXQgYnkgdGhlIG92ZXJmbG93XG4gKiBzaG9ydGhhbmRcIi4gVGhhdCBpcywgdGhlIHZhbHVlcyBhcmUgdGhlIHByb3BlcnR5IHRoYXQgZWFjaCB3YXMgZGVyaXZlZCBmcm9tLlxuICovXG5cblxuZnVuY3Rpb24gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlcykge1xuICB2YXIgZXhwYW5kZWQgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gc3R5bGVzKSB7XG4gICAgdmFyIGxvbmdoYW5kcyA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5XSB8fCBba2V5XTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2hhbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHBhbmRlZFtsb25naGFuZHNbaV1dID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBhbmRlZDtcbn1cbi8qKlxuICogV2hlbiBtaXhpbmcgc2hvcnRoYW5kIGFuZCBsb25naGFuZCBwcm9wZXJ0eSBuYW1lcywgd2Ugd2FybiBkdXJpbmcgdXBkYXRlcyBpZlxuICogd2UgZXhwZWN0IGFuIGluY29ycmVjdCByZXN1bHQgdG8gb2NjdXIuIEluIHBhcnRpY3VsYXIsIHdlIHdhcm4gZm9yOlxuICpcbiAqIFVwZGF0aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIG92ZXJ3cml0dGVuKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnYmF6JywgZm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJ2JheidcbiAqIFJlbW92aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIGxvc3QgdG9vKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnJ1xuICogUmVtb3ZpbmcgYSBsb25naGFuZCBwcm9wZXJ0eSAoc2hvdWxkIHJldmVydCB0byBzaG9ydGhhbmQ7IGRvZXNuJ3QpOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdmb28nfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250VmFyaWFudCA9ICcnXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYocHJldlN0eWxlcywgbmV4dFN0eWxlcykge1xuICB7XG4gICAgaWYgKCFuZXh0U3R5bGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBDb21wdXRlIHRoZSBkaWZmIGFzIGl0IHdvdWxkIGhhcHBlbiBlbHNld2hlcmUuXG5cblxuICAgIHZhciBleHBhbmRlZFVwZGF0ZXMgPSB7fTtcblxuICAgIGlmIChwcmV2U3R5bGVzKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJldlN0eWxlcykge1xuICAgICAgICBpZiAocHJldlN0eWxlcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFuZXh0U3R5bGVzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB2YXIgbG9uZ2hhbmRzID0gc2hvcnRoYW5kVG9Mb25naGFuZFtrZXldIHx8IFtrZXldO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb25naGFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGV4cGFuZGVkVXBkYXRlc1tsb25naGFuZHNbaV1dID0ga2V5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9rZXkgaW4gbmV4dFN0eWxlcykge1xuICAgICAgaWYgKG5leHRTdHlsZXMuaGFzT3duUHJvcGVydHkoX2tleSkgJiYgKCFwcmV2U3R5bGVzIHx8IHByZXZTdHlsZXNbX2tleV0gIT09IG5leHRTdHlsZXNbX2tleV0pKSB7XG4gICAgICAgIHZhciBfbG9uZ2hhbmRzID0gc2hvcnRoYW5kVG9Mb25naGFuZFtfa2V5XSB8fCBbX2tleV07XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9sb25naGFuZHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgZXhwYW5kZWRVcGRhdGVzW19sb25naGFuZHNbX2ldXSA9IF9rZXk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZXhwYW5kZWRTdHlsZXMgPSBleHBhbmRTaG9ydGhhbmRNYXAobmV4dFN0eWxlcyk7XG4gICAgdmFyIHdhcm5lZEFib3V0ID0ge307XG5cbiAgICBmb3IgKHZhciBfa2V5MiBpbiBleHBhbmRlZFVwZGF0ZXMpIHtcbiAgICAgIHZhciBvcmlnaW5hbEtleSA9IGV4cGFuZGVkVXBkYXRlc1tfa2V5Ml07XG4gICAgICB2YXIgY29ycmVjdE9yaWdpbmFsS2V5ID0gZXhwYW5kZWRTdHlsZXNbX2tleTJdO1xuXG4gICAgICBpZiAoY29ycmVjdE9yaWdpbmFsS2V5ICYmIG9yaWdpbmFsS2V5ICE9PSBjb3JyZWN0T3JpZ2luYWxLZXkpIHtcbiAgICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvcmlnaW5hbEtleSArICcsJyArIGNvcnJlY3RPcmlnaW5hbEtleTtcblxuICAgICAgICBpZiAod2FybmVkQWJvdXRbd2FybmluZ0tleV0pIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdhcm5lZEFib3V0W3dhcm5pbmdLZXldID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXMgYSBzdHlsZSBwcm9wZXJ0eSBkdXJpbmcgcmVyZW5kZXIgKCVzKSB3aGVuIGEgJyArICdjb25mbGljdGluZyBwcm9wZXJ0eSBpcyBzZXQgKCVzKSBjYW4gbGVhZCB0byBzdHlsaW5nIGJ1Z3MuIFRvICcgKyBcImF2b2lkIHRoaXMsIGRvbid0IG1peCBzaG9ydGhhbmQgYW5kIG5vbi1zaG9ydGhhbmQgcHJvcGVydGllcyBcIiArICdmb3IgdGhlIHNhbWUgdmFsdWU7IGluc3RlYWQsIHJlcGxhY2UgdGhlIHNob3J0aGFuZCB3aXRoICcgKyAnc2VwYXJhdGUgdmFsdWVzLicsIGlzVmFsdWVFbXB0eShuZXh0U3R5bGVzW29yaWdpbmFsS2V5XSkgPyAnUmVtb3ZpbmcnIDogJ1VwZGF0aW5nJywgb3JpZ2luYWxLZXksIGNvcnJlY3RPcmlnaW5hbEtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tRWxlbWVudCh0YWdOYW1lLCBwcm9wcykge1xuICBpZiAodGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh0YWdOYW1lKSB7XG4gICAgLy8gVGhlc2UgYXJlIHJlc2VydmVkIFNWRyBhbmQgTWF0aE1MIGVsZW1lbnRzLlxuICAgIC8vIFdlIGRvbid0IG1pbmQgdGhpcyBsaXN0IHRvbyBtdWNoIGJlY2F1c2Ugd2UgZXhwZWN0IGl0IHRvIG5ldmVyIGdyb3cuXG4gICAgLy8gVGhlIGFsdGVybmF0aXZlIGlzIHRvIHRyYWNrIHRoZSBuYW1lc3BhY2UgaW4gYSBmZXcgcGxhY2VzIHdoaWNoIGlzIGNvbnZvbHV0ZWQuXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmNvbXBvbmVudHMvc3BlYy9jdXN0b20vI2N1c3RvbS1lbGVtZW50cy1jb3JlLWNvbmNlcHRzXG4gICAgY2FzZSAnYW5ub3RhdGlvbi14bWwnOlxuICAgIGNhc2UgJ2NvbG9yLXByb2ZpbGUnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXNyYyc6XG4gICAgY2FzZSAnZm9udC1mYWNlLXVyaSc6XG4gICAgY2FzZSAnZm9udC1mYWNlLWZvcm1hdCc6XG4gICAgY2FzZSAnZm9udC1mYWNlLW5hbWUnOlxuICAgIGNhc2UgJ21pc3NpbmctZ2x5cGgnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbnZhciBhbGlhc2VzID0gbmV3IE1hcChbWydhY2NlcHRDaGFyc2V0JywgJ2FjY2VwdC1jaGFyc2V0J10sIFsnaHRtbEZvcicsICdmb3InXSwgWydodHRwRXF1aXYnLCAnaHR0cC1lcXVpdiddLCAvLyBIVE1MIGFuZCBTVkcgYXR0cmlidXRlcywgYnV0IHRoZSBTVkcgYXR0cmlidXRlIGlzIGNhc2Ugc2Vuc2l0aXZlLl0sXG5bJ2Nyb3NzT3JpZ2luJywgJ2Nyb3Nzb3JpZ2luJ10sIC8vIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCBTVkcgYXR0cmlidXRlcyB0aGF0IG5lZWQgc3BlY2lhbCBjYXNpbmcuXG4vLyBSZWd1bGFyIGF0dHJpYnV0ZXMgdGhhdCBqdXN0IGFjY2VwdCBzdHJpbmdzLl0sXG5bJ2FjY2VudEhlaWdodCcsICdhY2NlbnQtaGVpZ2h0J10sIFsnYWxpZ25tZW50QmFzZWxpbmUnLCAnYWxpZ25tZW50LWJhc2VsaW5lJ10sIFsnYXJhYmljRm9ybScsICdhcmFiaWMtZm9ybSddLCBbJ2Jhc2VsaW5lU2hpZnQnLCAnYmFzZWxpbmUtc2hpZnQnXSwgWydjYXBIZWlnaHQnLCAnY2FwLWhlaWdodCddLCBbJ2NsaXBQYXRoJywgJ2NsaXAtcGF0aCddLCBbJ2NsaXBSdWxlJywgJ2NsaXAtcnVsZSddLCBbJ2NvbG9ySW50ZXJwb2xhdGlvbicsICdjb2xvci1pbnRlcnBvbGF0aW9uJ10sIFsnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnXSwgWydjb2xvclByb2ZpbGUnLCAnY29sb3ItcHJvZmlsZSddLCBbJ2NvbG9yUmVuZGVyaW5nJywgJ2NvbG9yLXJlbmRlcmluZyddLCBbJ2RvbWluYW50QmFzZWxpbmUnLCAnZG9taW5hbnQtYmFzZWxpbmUnXSwgWydlbmFibGVCYWNrZ3JvdW5kJywgJ2VuYWJsZS1iYWNrZ3JvdW5kJ10sIFsnZmlsbE9wYWNpdHknLCAnZmlsbC1vcGFjaXR5J10sIFsnZmlsbFJ1bGUnLCAnZmlsbC1ydWxlJ10sIFsnZmxvb2RDb2xvcicsICdmbG9vZC1jb2xvciddLCBbJ2Zsb29kT3BhY2l0eScsICdmbG9vZC1vcGFjaXR5J10sIFsnZm9udEZhbWlseScsICdmb250LWZhbWlseSddLCBbJ2ZvbnRTaXplJywgJ2ZvbnQtc2l6ZSddLCBbJ2ZvbnRTaXplQWRqdXN0JywgJ2ZvbnQtc2l6ZS1hZGp1c3QnXSwgWydmb250U3RyZXRjaCcsICdmb250LXN0cmV0Y2gnXSwgWydmb250U3R5bGUnLCAnZm9udC1zdHlsZSddLCBbJ2ZvbnRWYXJpYW50JywgJ2ZvbnQtdmFyaWFudCddLCBbJ2ZvbnRXZWlnaHQnLCAnZm9udC13ZWlnaHQnXSwgWydnbHlwaE5hbWUnLCAnZ2x5cGgtbmFtZSddLCBbJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJywgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnXSwgWydnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLCAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnXSwgWydob3JpekFkdlgnLCAnaG9yaXotYWR2LXgnXSwgWydob3Jpek9yaWdpblgnLCAnaG9yaXotb3JpZ2luLXgnXSwgWydpbWFnZVJlbmRlcmluZycsICdpbWFnZS1yZW5kZXJpbmcnXSwgWydsZXR0ZXJTcGFjaW5nJywgJ2xldHRlci1zcGFjaW5nJ10sIFsnbGlnaHRpbmdDb2xvcicsICdsaWdodGluZy1jb2xvciddLCBbJ21hcmtlckVuZCcsICdtYXJrZXItZW5kJ10sIFsnbWFya2VyTWlkJywgJ21hcmtlci1taWQnXSwgWydtYXJrZXJTdGFydCcsICdtYXJrZXItc3RhcnQnXSwgWydvdmVybGluZVBvc2l0aW9uJywgJ292ZXJsaW5lLXBvc2l0aW9uJ10sIFsnb3ZlcmxpbmVUaGlja25lc3MnLCAnb3ZlcmxpbmUtdGhpY2tuZXNzJ10sIFsncGFpbnRPcmRlcicsICdwYWludC1vcmRlciddLCBbJ3Bhbm9zZS0xJywgJ3Bhbm9zZS0xJ10sIFsncG9pbnRlckV2ZW50cycsICdwb2ludGVyLWV2ZW50cyddLCBbJ3JlbmRlcmluZ0ludGVudCcsICdyZW5kZXJpbmctaW50ZW50J10sIFsnc2hhcGVSZW5kZXJpbmcnLCAnc2hhcGUtcmVuZGVyaW5nJ10sIFsnc3RvcENvbG9yJywgJ3N0b3AtY29sb3InXSwgWydzdG9wT3BhY2l0eScsICdzdG9wLW9wYWNpdHknXSwgWydzdHJpa2V0aHJvdWdoUG9zaXRpb24nLCAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbiddLCBbJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLCAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnXSwgWydzdHJva2VEYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hhcnJheSddLCBbJ3N0cm9rZURhc2hvZmZzZXQnLCAnc3Ryb2tlLWRhc2hvZmZzZXQnXSwgWydzdHJva2VMaW5lY2FwJywgJ3N0cm9rZS1saW5lY2FwJ10sIFsnc3Ryb2tlTGluZWpvaW4nLCAnc3Ryb2tlLWxpbmVqb2luJ10sIFsnc3Ryb2tlTWl0ZXJsaW1pdCcsICdzdHJva2UtbWl0ZXJsaW1pdCddLCBbJ3N0cm9rZU9wYWNpdHknLCAnc3Ryb2tlLW9wYWNpdHknXSwgWydzdHJva2VXaWR0aCcsICdzdHJva2Utd2lkdGgnXSwgWyd0ZXh0QW5jaG9yJywgJ3RleHQtYW5jaG9yJ10sIFsndGV4dERlY29yYXRpb24nLCAndGV4dC1kZWNvcmF0aW9uJ10sIFsndGV4dFJlbmRlcmluZycsICd0ZXh0LXJlbmRlcmluZyddLCBbJ3RyYW5zZm9ybU9yaWdpbicsICd0cmFuc2Zvcm0tb3JpZ2luJ10sIFsndW5kZXJsaW5lUG9zaXRpb24nLCAndW5kZXJsaW5lLXBvc2l0aW9uJ10sIFsndW5kZXJsaW5lVGhpY2tuZXNzJywgJ3VuZGVybGluZS10aGlja25lc3MnXSwgWyd1bmljb2RlQmlkaScsICd1bmljb2RlLWJpZGknXSwgWyd1bmljb2RlUmFuZ2UnLCAndW5pY29kZS1yYW5nZSddLCBbJ3VuaXRzUGVyRW0nLCAndW5pdHMtcGVyLWVtJ10sIFsndkFscGhhYmV0aWMnLCAndi1hbHBoYWJldGljJ10sIFsndkhhbmdpbmcnLCAndi1oYW5naW5nJ10sIFsndklkZW9ncmFwaGljJywgJ3YtaWRlb2dyYXBoaWMnXSwgWyd2TWF0aGVtYXRpY2FsJywgJ3YtbWF0aGVtYXRpY2FsJ10sIFsndmVjdG9yRWZmZWN0JywgJ3ZlY3Rvci1lZmZlY3QnXSwgWyd2ZXJ0QWR2WScsICd2ZXJ0LWFkdi15J10sIFsndmVydE9yaWdpblgnLCAndmVydC1vcmlnaW4teCddLCBbJ3ZlcnRPcmlnaW5ZJywgJ3ZlcnQtb3JpZ2luLXknXSwgWyd3b3JkU3BhY2luZycsICd3b3JkLXNwYWNpbmcnXSwgWyd3cml0aW5nTW9kZScsICd3cml0aW5nLW1vZGUnXSwgWyd4bWxuc1hsaW5rJywgJ3htbG5zOnhsaW5rJ10sIFsneEhlaWdodCcsICd4LWhlaWdodCddXSk7XG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGVBbGlhcyAobmFtZSkge1xuICByZXR1cm4gYWxpYXNlcy5nZXQobmFtZSkgfHwgbmFtZTtcbn1cblxuLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGUgSFRNTCBvciBTVkcgYWxsb3dlZCBhdHRyaWJ1dGUgbGlzdCwgYmUgc3VyZSB0b1xuLy8gYWxzbyBhZGQgdGhlbSB0byB0aGlzIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3QgbmFtZVxuLy8gd2FybmluZ3MuXG52YXIgcG9zc2libGVTdGFuZGFyZE5hbWVzID0ge1xuICAvLyBIVE1MXG4gIGFjY2VwdDogJ2FjY2VwdCcsXG4gIGFjY2VwdGNoYXJzZXQ6ICdhY2NlcHRDaGFyc2V0JyxcbiAgJ2FjY2VwdC1jaGFyc2V0JzogJ2FjY2VwdENoYXJzZXQnLFxuICBhY2Nlc3NrZXk6ICdhY2Nlc3NLZXknLFxuICBhY3Rpb246ICdhY3Rpb24nLFxuICBhbGxvd2Z1bGxzY3JlZW46ICdhbGxvd0Z1bGxTY3JlZW4nLFxuICBhbHQ6ICdhbHQnLFxuICBhczogJ2FzJyxcbiAgYXN5bmM6ICdhc3luYycsXG4gIGF1dG9jYXBpdGFsaXplOiAnYXV0b0NhcGl0YWxpemUnLFxuICBhdXRvY29tcGxldGU6ICdhdXRvQ29tcGxldGUnLFxuICBhdXRvY29ycmVjdDogJ2F1dG9Db3JyZWN0JyxcbiAgYXV0b2ZvY3VzOiAnYXV0b0ZvY3VzJyxcbiAgYXV0b3BsYXk6ICdhdXRvUGxheScsXG4gIGF1dG9zYXZlOiAnYXV0b1NhdmUnLFxuICBjYXB0dXJlOiAnY2FwdHVyZScsXG4gIGNlbGxwYWRkaW5nOiAnY2VsbFBhZGRpbmcnLFxuICBjZWxsc3BhY2luZzogJ2NlbGxTcGFjaW5nJyxcbiAgY2hhbGxlbmdlOiAnY2hhbGxlbmdlJyxcbiAgY2hhcnNldDogJ2NoYXJTZXQnLFxuICBjaGVja2VkOiAnY2hlY2tlZCcsXG4gIGNoaWxkcmVuOiAnY2hpbGRyZW4nLFxuICBjaXRlOiAnY2l0ZScsXG4gIGNsYXNzOiAnY2xhc3NOYW1lJyxcbiAgY2xhc3NpZDogJ2NsYXNzSUQnLFxuICBjbGFzc25hbWU6ICdjbGFzc05hbWUnLFxuICBjb2xzOiAnY29scycsXG4gIGNvbHNwYW46ICdjb2xTcGFuJyxcbiAgY29udGVudDogJ2NvbnRlbnQnLFxuICBjb250ZW50ZWRpdGFibGU6ICdjb250ZW50RWRpdGFibGUnLFxuICBjb250ZXh0bWVudTogJ2NvbnRleHRNZW51JyxcbiAgY29udHJvbHM6ICdjb250cm9scycsXG4gIGNvbnRyb2xzbGlzdDogJ2NvbnRyb2xzTGlzdCcsXG4gIGNvb3JkczogJ2Nvb3JkcycsXG4gIGNyb3Nzb3JpZ2luOiAnY3Jvc3NPcmlnaW4nLFxuICBkYW5nZXJvdXNseXNldGlubmVyaHRtbDogJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJyxcbiAgZGF0YTogJ2RhdGEnLFxuICBkYXRldGltZTogJ2RhdGVUaW1lJyxcbiAgZGVmYXVsdDogJ2RlZmF1bHQnLFxuICBkZWZhdWx0Y2hlY2tlZDogJ2RlZmF1bHRDaGVja2VkJyxcbiAgZGVmYXVsdHZhbHVlOiAnZGVmYXVsdFZhbHVlJyxcbiAgZGVmZXI6ICdkZWZlcicsXG4gIGRpcjogJ2RpcicsXG4gIGRpc2FibGVkOiAnZGlzYWJsZWQnLFxuICBkaXNhYmxlcGljdHVyZWlucGljdHVyZTogJ2Rpc2FibGVQaWN0dXJlSW5QaWN0dXJlJyxcbiAgZGlzYWJsZXJlbW90ZXBsYXliYWNrOiAnZGlzYWJsZVJlbW90ZVBsYXliYWNrJyxcbiAgZG93bmxvYWQ6ICdkb3dubG9hZCcsXG4gIGRyYWdnYWJsZTogJ2RyYWdnYWJsZScsXG4gIGVuY3R5cGU6ICdlbmNUeXBlJyxcbiAgZW50ZXJrZXloaW50OiAnZW50ZXJLZXlIaW50JyxcbiAgZmV0Y2hwcmlvcml0eTogJ2ZldGNoUHJpb3JpdHknLFxuICBmb3I6ICdodG1sRm9yJyxcbiAgZm9ybTogJ2Zvcm0nLFxuICBmb3JtbWV0aG9kOiAnZm9ybU1ldGhvZCcsXG4gIGZvcm1hY3Rpb246ICdmb3JtQWN0aW9uJyxcbiAgZm9ybWVuY3R5cGU6ICdmb3JtRW5jVHlwZScsXG4gIGZvcm1ub3ZhbGlkYXRlOiAnZm9ybU5vVmFsaWRhdGUnLFxuICBmb3JtdGFyZ2V0OiAnZm9ybVRhcmdldCcsXG4gIGZyYW1lYm9yZGVyOiAnZnJhbWVCb3JkZXInLFxuICBoZWFkZXJzOiAnaGVhZGVycycsXG4gIGhlaWdodDogJ2hlaWdodCcsXG4gIGhpZGRlbjogJ2hpZGRlbicsXG4gIGhpZ2g6ICdoaWdoJyxcbiAgaHJlZjogJ2hyZWYnLFxuICBocmVmbGFuZzogJ2hyZWZMYW5nJyxcbiAgaHRtbGZvcjogJ2h0bWxGb3InLFxuICBodHRwZXF1aXY6ICdodHRwRXF1aXYnLFxuICAnaHR0cC1lcXVpdic6ICdodHRwRXF1aXYnLFxuICBpY29uOiAnaWNvbicsXG4gIGlkOiAnaWQnLFxuICBpbWFnZXNpemVzOiAnaW1hZ2VTaXplcycsXG4gIGltYWdlc3Jjc2V0OiAnaW1hZ2VTcmNTZXQnLFxuICBpbm5lcmh0bWw6ICdpbm5lckhUTUwnLFxuICBpbnB1dG1vZGU6ICdpbnB1dE1vZGUnLFxuICBpbnRlZ3JpdHk6ICdpbnRlZ3JpdHknLFxuICBpczogJ2lzJyxcbiAgaXRlbWlkOiAnaXRlbUlEJyxcbiAgaXRlbXByb3A6ICdpdGVtUHJvcCcsXG4gIGl0ZW1yZWY6ICdpdGVtUmVmJyxcbiAgaXRlbXNjb3BlOiAnaXRlbVNjb3BlJyxcbiAgaXRlbXR5cGU6ICdpdGVtVHlwZScsXG4gIGtleXBhcmFtczogJ2tleVBhcmFtcycsXG4gIGtleXR5cGU6ICdrZXlUeXBlJyxcbiAga2luZDogJ2tpbmQnLFxuICBsYWJlbDogJ2xhYmVsJyxcbiAgbGFuZzogJ2xhbmcnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxvb3A6ICdsb29wJyxcbiAgbG93OiAnbG93JyxcbiAgbWFuaWZlc3Q6ICdtYW5pZmVzdCcsXG4gIG1hcmdpbndpZHRoOiAnbWFyZ2luV2lkdGgnLFxuICBtYXJnaW5oZWlnaHQ6ICdtYXJnaW5IZWlnaHQnLFxuICBtYXg6ICdtYXgnLFxuICBtYXhsZW5ndGg6ICdtYXhMZW5ndGgnLFxuICBtZWRpYTogJ21lZGlhJyxcbiAgbWVkaWFncm91cDogJ21lZGlhR3JvdXAnLFxuICBtZXRob2Q6ICdtZXRob2QnLFxuICBtaW46ICdtaW4nLFxuICBtaW5sZW5ndGg6ICdtaW5MZW5ndGgnLFxuICBtdWx0aXBsZTogJ211bHRpcGxlJyxcbiAgbXV0ZWQ6ICdtdXRlZCcsXG4gIG5hbWU6ICduYW1lJyxcbiAgbm9tb2R1bGU6ICdub01vZHVsZScsXG4gIG5vbmNlOiAnbm9uY2UnLFxuICBub3ZhbGlkYXRlOiAnbm9WYWxpZGF0ZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgb3B0aW11bTogJ29wdGltdW0nLFxuICBwYXR0ZXJuOiAncGF0dGVybicsXG4gIHBsYWNlaG9sZGVyOiAncGxhY2Vob2xkZXInLFxuICBwbGF5c2lubGluZTogJ3BsYXlzSW5saW5lJyxcbiAgcG9zdGVyOiAncG9zdGVyJyxcbiAgcHJlbG9hZDogJ3ByZWxvYWQnLFxuICBwcm9maWxlOiAncHJvZmlsZScsXG4gIHJhZGlvZ3JvdXA6ICdyYWRpb0dyb3VwJyxcbiAgcmVhZG9ubHk6ICdyZWFkT25seScsXG4gIHJlZmVycmVycG9saWN5OiAncmVmZXJyZXJQb2xpY3knLFxuICByZWw6ICdyZWwnLFxuICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgcmV2ZXJzZWQ6ICdyZXZlcnNlZCcsXG4gIHJvbGU6ICdyb2xlJyxcbiAgcm93czogJ3Jvd3MnLFxuICByb3dzcGFuOiAncm93U3BhbicsXG4gIHNhbmRib3g6ICdzYW5kYm94JyxcbiAgc2NvcGU6ICdzY29wZScsXG4gIHNjb3BlZDogJ3Njb3BlZCcsXG4gIHNjcm9sbGluZzogJ3Njcm9sbGluZycsXG4gIHNlYW1sZXNzOiAnc2VhbWxlc3MnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJyxcbiAgc2hhcGU6ICdzaGFwZScsXG4gIHNpemU6ICdzaXplJyxcbiAgc2l6ZXM6ICdzaXplcycsXG4gIHNwYW46ICdzcGFuJyxcbiAgc3BlbGxjaGVjazogJ3NwZWxsQ2hlY2snLFxuICBzcmM6ICdzcmMnLFxuICBzcmNkb2M6ICdzcmNEb2MnLFxuICBzcmNsYW5nOiAnc3JjTGFuZycsXG4gIHNyY3NldDogJ3NyY1NldCcsXG4gIHN0YXJ0OiAnc3RhcnQnLFxuICBzdGVwOiAnc3RlcCcsXG4gIHN0eWxlOiAnc3R5bGUnLFxuICBzdW1tYXJ5OiAnc3VtbWFyeScsXG4gIHRhYmluZGV4OiAndGFiSW5kZXgnLFxuICB0YXJnZXQ6ICd0YXJnZXQnLFxuICB0aXRsZTogJ3RpdGxlJyxcbiAgdHlwZTogJ3R5cGUnLFxuICB1c2VtYXA6ICd1c2VNYXAnLFxuICB2YWx1ZTogJ3ZhbHVlJyxcbiAgd2lkdGg6ICd3aWR0aCcsXG4gIHdtb2RlOiAnd21vZGUnLFxuICB3cmFwOiAnd3JhcCcsXG4gIC8vIFNWR1xuICBhYm91dDogJ2Fib3V0JyxcbiAgYWNjZW50aGVpZ2h0OiAnYWNjZW50SGVpZ2h0JyxcbiAgJ2FjY2VudC1oZWlnaHQnOiAnYWNjZW50SGVpZ2h0JyxcbiAgYWNjdW11bGF0ZTogJ2FjY3VtdWxhdGUnLFxuICBhZGRpdGl2ZTogJ2FkZGl0aXZlJyxcbiAgYWxpZ25tZW50YmFzZWxpbmU6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gICdhbGlnbm1lbnQtYmFzZWxpbmUnOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICBhbGxvd3Jlb3JkZXI6ICdhbGxvd1Jlb3JkZXInLFxuICBhbHBoYWJldGljOiAnYWxwaGFiZXRpYycsXG4gIGFtcGxpdHVkZTogJ2FtcGxpdHVkZScsXG4gIGFyYWJpY2Zvcm06ICdhcmFiaWNGb3JtJyxcbiAgJ2FyYWJpYy1mb3JtJzogJ2FyYWJpY0Zvcm0nLFxuICBhc2NlbnQ6ICdhc2NlbnQnLFxuICBhdHRyaWJ1dGVuYW1lOiAnYXR0cmlidXRlTmFtZScsXG4gIGF0dHJpYnV0ZXR5cGU6ICdhdHRyaWJ1dGVUeXBlJyxcbiAgYXV0b3JldmVyc2U6ICdhdXRvUmV2ZXJzZScsXG4gIGF6aW11dGg6ICdhemltdXRoJyxcbiAgYmFzZWZyZXF1ZW5jeTogJ2Jhc2VGcmVxdWVuY3knLFxuICBiYXNlbGluZXNoaWZ0OiAnYmFzZWxpbmVTaGlmdCcsXG4gICdiYXNlbGluZS1zaGlmdCc6ICdiYXNlbGluZVNoaWZ0JyxcbiAgYmFzZXByb2ZpbGU6ICdiYXNlUHJvZmlsZScsXG4gIGJib3g6ICdiYm94JyxcbiAgYmVnaW46ICdiZWdpbicsXG4gIGJpYXM6ICdiaWFzJyxcbiAgYnk6ICdieScsXG4gIGNhbGNtb2RlOiAnY2FsY01vZGUnLFxuICBjYXBoZWlnaHQ6ICdjYXBIZWlnaHQnLFxuICAnY2FwLWhlaWdodCc6ICdjYXBIZWlnaHQnLFxuICBjbGlwOiAnY2xpcCcsXG4gIGNsaXBwYXRoOiAnY2xpcFBhdGgnLFxuICAnY2xpcC1wYXRoJzogJ2NsaXBQYXRoJyxcbiAgY2xpcHBhdGh1bml0czogJ2NsaXBQYXRoVW5pdHMnLFxuICBjbGlwcnVsZTogJ2NsaXBSdWxlJyxcbiAgJ2NsaXAtcnVsZSc6ICdjbGlwUnVsZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb2xvcmludGVycG9sYXRpb246ICdjb2xvckludGVycG9sYXRpb24nLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbic6ICdjb2xvckludGVycG9sYXRpb24nLFxuICBjb2xvcmludGVycG9sYXRpb25maWx0ZXJzOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gIGNvbG9ycHJvZmlsZTogJ2NvbG9yUHJvZmlsZScsXG4gICdjb2xvci1wcm9maWxlJzogJ2NvbG9yUHJvZmlsZScsXG4gIGNvbG9ycmVuZGVyaW5nOiAnY29sb3JSZW5kZXJpbmcnLFxuICAnY29sb3ItcmVuZGVyaW5nJzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgY29udGVudHNjcmlwdHR5cGU6ICdjb250ZW50U2NyaXB0VHlwZScsXG4gIGNvbnRlbnRzdHlsZXR5cGU6ICdjb250ZW50U3R5bGVUeXBlJyxcbiAgY3Vyc29yOiAnY3Vyc29yJyxcbiAgY3g6ICdjeCcsXG4gIGN5OiAnY3knLFxuICBkOiAnZCcsXG4gIGRhdGF0eXBlOiAnZGF0YXR5cGUnLFxuICBkZWNlbGVyYXRlOiAnZGVjZWxlcmF0ZScsXG4gIGRlc2NlbnQ6ICdkZXNjZW50JyxcbiAgZGlmZnVzZWNvbnN0YW50OiAnZGlmZnVzZUNvbnN0YW50JyxcbiAgZGlyZWN0aW9uOiAnZGlyZWN0aW9uJyxcbiAgZGlzcGxheTogJ2Rpc3BsYXknLFxuICBkaXZpc29yOiAnZGl2aXNvcicsXG4gIGRvbWluYW50YmFzZWxpbmU6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgJ2RvbWluYW50LWJhc2VsaW5lJzogJ2RvbWluYW50QmFzZWxpbmUnLFxuICBkdXI6ICdkdXInLFxuICBkeDogJ2R4JyxcbiAgZHk6ICdkeScsXG4gIGVkZ2Vtb2RlOiAnZWRnZU1vZGUnLFxuICBlbGV2YXRpb246ICdlbGV2YXRpb24nLFxuICBlbmFibGViYWNrZ3JvdW5kOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gICdlbmFibGUtYmFja2dyb3VuZCc6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgZW5kOiAnZW5kJyxcbiAgZXhwb25lbnQ6ICdleHBvbmVudCcsXG4gIGV4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQ6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcbiAgZmlsbDogJ2ZpbGwnLFxuICBmaWxsb3BhY2l0eTogJ2ZpbGxPcGFjaXR5JyxcbiAgJ2ZpbGwtb3BhY2l0eSc6ICdmaWxsT3BhY2l0eScsXG4gIGZpbGxydWxlOiAnZmlsbFJ1bGUnLFxuICAnZmlsbC1ydWxlJzogJ2ZpbGxSdWxlJyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmlsdGVycmVzOiAnZmlsdGVyUmVzJyxcbiAgZmlsdGVydW5pdHM6ICdmaWx0ZXJVbml0cycsXG4gIGZsb29kb3BhY2l0eTogJ2Zsb29kT3BhY2l0eScsXG4gICdmbG9vZC1vcGFjaXR5JzogJ2Zsb29kT3BhY2l0eScsXG4gIGZsb29kY29sb3I6ICdmbG9vZENvbG9yJyxcbiAgJ2Zsb29kLWNvbG9yJzogJ2Zsb29kQ29sb3InLFxuICBmb2N1c2FibGU6ICdmb2N1c2FibGUnLFxuICBmb250ZmFtaWx5OiAnZm9udEZhbWlseScsXG4gICdmb250LWZhbWlseSc6ICdmb250RmFtaWx5JyxcbiAgZm9udHNpemU6ICdmb250U2l6ZScsXG4gICdmb250LXNpemUnOiAnZm9udFNpemUnLFxuICBmb250c2l6ZWFkanVzdDogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnOiAnZm9udFNpemVBZGp1c3QnLFxuICBmb250c3RyZXRjaDogJ2ZvbnRTdHJldGNoJyxcbiAgJ2ZvbnQtc3RyZXRjaCc6ICdmb250U3RyZXRjaCcsXG4gIGZvbnRzdHlsZTogJ2ZvbnRTdHlsZScsXG4gICdmb250LXN0eWxlJzogJ2ZvbnRTdHlsZScsXG4gIGZvbnR2YXJpYW50OiAnZm9udFZhcmlhbnQnLFxuICAnZm9udC12YXJpYW50JzogJ2ZvbnRWYXJpYW50JyxcbiAgZm9udHdlaWdodDogJ2ZvbnRXZWlnaHQnLFxuICAnZm9udC13ZWlnaHQnOiAnZm9udFdlaWdodCcsXG4gIGZvcm1hdDogJ2Zvcm1hdCcsXG4gIGZyb206ICdmcm9tJyxcbiAgZng6ICdmeCcsXG4gIGZ5OiAnZnknLFxuICBnMTogJ2cxJyxcbiAgZzI6ICdnMicsXG4gIGdseXBobmFtZTogJ2dseXBoTmFtZScsXG4gICdnbHlwaC1uYW1lJzogJ2dseXBoTmFtZScsXG4gIGdseXBob3JpZW50YXRpb25ob3Jpem9udGFsOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCc6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gIGdseXBob3JpZW50YXRpb252ZXJ0aWNhbDogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCc6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICBnbHlwaHJlZjogJ2dseXBoUmVmJyxcbiAgZ3JhZGllbnR0cmFuc2Zvcm06ICdncmFkaWVudFRyYW5zZm9ybScsXG4gIGdyYWRpZW50dW5pdHM6ICdncmFkaWVudFVuaXRzJyxcbiAgaGFuZ2luZzogJ2hhbmdpbmcnLFxuICBob3JpemFkdng6ICdob3JpekFkdlgnLFxuICAnaG9yaXotYWR2LXgnOiAnaG9yaXpBZHZYJyxcbiAgaG9yaXpvcmlnaW54OiAnaG9yaXpPcmlnaW5YJyxcbiAgJ2hvcml6LW9yaWdpbi14JzogJ2hvcml6T3JpZ2luWCcsXG4gIGlkZW9ncmFwaGljOiAnaWRlb2dyYXBoaWMnLFxuICBpbWFnZXJlbmRlcmluZzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgJ2ltYWdlLXJlbmRlcmluZyc6ICdpbWFnZVJlbmRlcmluZycsXG4gIGluMjogJ2luMicsXG4gIGluOiAnaW4nLFxuICBpbmxpc3Q6ICdpbmxpc3QnLFxuICBpbnRlcmNlcHQ6ICdpbnRlcmNlcHQnLFxuICBrMTogJ2sxJyxcbiAgazI6ICdrMicsXG4gIGszOiAnazMnLFxuICBrNDogJ2s0JyxcbiAgazogJ2snLFxuICBrZXJuZWxtYXRyaXg6ICdrZXJuZWxNYXRyaXgnLFxuICBrZXJuZWx1bml0bGVuZ3RoOiAna2VybmVsVW5pdExlbmd0aCcsXG4gIGtlcm5pbmc6ICdrZXJuaW5nJyxcbiAga2V5cG9pbnRzOiAna2V5UG9pbnRzJyxcbiAga2V5c3BsaW5lczogJ2tleVNwbGluZXMnLFxuICBrZXl0aW1lczogJ2tleVRpbWVzJyxcbiAgbGVuZ3RoYWRqdXN0OiAnbGVuZ3RoQWRqdXN0JyxcbiAgbGV0dGVyc3BhY2luZzogJ2xldHRlclNwYWNpbmcnLFxuICAnbGV0dGVyLXNwYWNpbmcnOiAnbGV0dGVyU3BhY2luZycsXG4gIGxpZ2h0aW5nY29sb3I6ICdsaWdodGluZ0NvbG9yJyxcbiAgJ2xpZ2h0aW5nLWNvbG9yJzogJ2xpZ2h0aW5nQ29sb3InLFxuICBsaW1pdGluZ2NvbmVhbmdsZTogJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcbiAgbG9jYWw6ICdsb2NhbCcsXG4gIG1hcmtlcmVuZDogJ21hcmtlckVuZCcsXG4gICdtYXJrZXItZW5kJzogJ21hcmtlckVuZCcsXG4gIG1hcmtlcmhlaWdodDogJ21hcmtlckhlaWdodCcsXG4gIG1hcmtlcm1pZDogJ21hcmtlck1pZCcsXG4gICdtYXJrZXItbWlkJzogJ21hcmtlck1pZCcsXG4gIG1hcmtlcnN0YXJ0OiAnbWFya2VyU3RhcnQnLFxuICAnbWFya2VyLXN0YXJ0JzogJ21hcmtlclN0YXJ0JyxcbiAgbWFya2VydW5pdHM6ICdtYXJrZXJVbml0cycsXG4gIG1hcmtlcndpZHRoOiAnbWFya2VyV2lkdGgnLFxuICBtYXNrOiAnbWFzaycsXG4gIG1hc2tjb250ZW50dW5pdHM6ICdtYXNrQ29udGVudFVuaXRzJyxcbiAgbWFza3VuaXRzOiAnbWFza1VuaXRzJyxcbiAgbWF0aGVtYXRpY2FsOiAnbWF0aGVtYXRpY2FsJyxcbiAgbW9kZTogJ21vZGUnLFxuICBudW1vY3RhdmVzOiAnbnVtT2N0YXZlcycsXG4gIG9mZnNldDogJ29mZnNldCcsXG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgb3BlcmF0b3I6ICdvcGVyYXRvcicsXG4gIG9yZGVyOiAnb3JkZXInLFxuICBvcmllbnQ6ICdvcmllbnQnLFxuICBvcmllbnRhdGlvbjogJ29yaWVudGF0aW9uJyxcbiAgb3JpZ2luOiAnb3JpZ2luJyxcbiAgb3ZlcmZsb3c6ICdvdmVyZmxvdycsXG4gIG92ZXJsaW5lcG9zaXRpb246ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgJ292ZXJsaW5lLXBvc2l0aW9uJzogJ292ZXJsaW5lUG9zaXRpb24nLFxuICBvdmVybGluZXRoaWNrbmVzczogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ292ZXJsaW5lLXRoaWNrbmVzcyc6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gIHBhaW50b3JkZXI6ICdwYWludE9yZGVyJyxcbiAgJ3BhaW50LW9yZGVyJzogJ3BhaW50T3JkZXInLFxuICBwYW5vc2UxOiAncGFub3NlMScsXG4gICdwYW5vc2UtMSc6ICdwYW5vc2UxJyxcbiAgcGF0aGxlbmd0aDogJ3BhdGhMZW5ndGgnLFxuICBwYXR0ZXJuY29udGVudHVuaXRzOiAncGF0dGVybkNvbnRlbnRVbml0cycsXG4gIHBhdHRlcm50cmFuc2Zvcm06ICdwYXR0ZXJuVHJhbnNmb3JtJyxcbiAgcGF0dGVybnVuaXRzOiAncGF0dGVyblVuaXRzJyxcbiAgcG9pbnRlcmV2ZW50czogJ3BvaW50ZXJFdmVudHMnLFxuICAncG9pbnRlci1ldmVudHMnOiAncG9pbnRlckV2ZW50cycsXG4gIHBvaW50czogJ3BvaW50cycsXG4gIHBvaW50c2F0eDogJ3BvaW50c0F0WCcsXG4gIHBvaW50c2F0eTogJ3BvaW50c0F0WScsXG4gIHBvaW50c2F0ejogJ3BvaW50c0F0WicsXG4gIHByZWZpeDogJ3ByZWZpeCcsXG4gIHByZXNlcnZlYWxwaGE6ICdwcmVzZXJ2ZUFscGhhJyxcbiAgcHJlc2VydmVhc3BlY3RyYXRpbzogJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxuICBwcmltaXRpdmV1bml0czogJ3ByaW1pdGl2ZVVuaXRzJyxcbiAgcHJvcGVydHk6ICdwcm9wZXJ0eScsXG4gIHI6ICdyJyxcbiAgcmFkaXVzOiAncmFkaXVzJyxcbiAgcmVmeDogJ3JlZlgnLFxuICByZWZ5OiAncmVmWScsXG4gIHJlbmRlcmluZ2ludGVudDogJ3JlbmRlcmluZ0ludGVudCcsXG4gICdyZW5kZXJpbmctaW50ZW50JzogJ3JlbmRlcmluZ0ludGVudCcsXG4gIHJlcGVhdGNvdW50OiAncmVwZWF0Q291bnQnLFxuICByZXBlYXRkdXI6ICdyZXBlYXREdXInLFxuICByZXF1aXJlZGV4dGVuc2lvbnM6ICdyZXF1aXJlZEV4dGVuc2lvbnMnLFxuICByZXF1aXJlZGZlYXR1cmVzOiAncmVxdWlyZWRGZWF0dXJlcycsXG4gIHJlc291cmNlOiAncmVzb3VyY2UnLFxuICByZXN0YXJ0OiAncmVzdGFydCcsXG4gIHJlc3VsdDogJ3Jlc3VsdCcsXG4gIHJlc3VsdHM6ICdyZXN1bHRzJyxcbiAgcm90YXRlOiAncm90YXRlJyxcbiAgcng6ICdyeCcsXG4gIHJ5OiAncnknLFxuICBzY2FsZTogJ3NjYWxlJyxcbiAgc2VjdXJpdHk6ICdzZWN1cml0eScsXG4gIHNlZWQ6ICdzZWVkJyxcbiAgc2hhcGVyZW5kZXJpbmc6ICdzaGFwZVJlbmRlcmluZycsXG4gICdzaGFwZS1yZW5kZXJpbmcnOiAnc2hhcGVSZW5kZXJpbmcnLFxuICBzbG9wZTogJ3Nsb3BlJyxcbiAgc3BhY2luZzogJ3NwYWNpbmcnLFxuICBzcGVjdWxhcmNvbnN0YW50OiAnc3BlY3VsYXJDb25zdGFudCcsXG4gIHNwZWN1bGFyZXhwb25lbnQ6ICdzcGVjdWxhckV4cG9uZW50JyxcbiAgc3BlZWQ6ICdzcGVlZCcsXG4gIHNwcmVhZG1ldGhvZDogJ3NwcmVhZE1ldGhvZCcsXG4gIHN0YXJ0b2Zmc2V0OiAnc3RhcnRPZmZzZXQnLFxuICBzdGRkZXZpYXRpb246ICdzdGREZXZpYXRpb24nLFxuICBzdGVtaDogJ3N0ZW1oJyxcbiAgc3RlbXY6ICdzdGVtdicsXG4gIHN0aXRjaHRpbGVzOiAnc3RpdGNoVGlsZXMnLFxuICBzdG9wY29sb3I6ICdzdG9wQ29sb3InLFxuICAnc3RvcC1jb2xvcic6ICdzdG9wQ29sb3InLFxuICBzdG9wb3BhY2l0eTogJ3N0b3BPcGFjaXR5JyxcbiAgJ3N0b3Atb3BhY2l0eSc6ICdzdG9wT3BhY2l0eScsXG4gIHN0cmlrZXRocm91Z2hwb3NpdGlvbjogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJzogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gIHN0cmlrZXRocm91Z2h0aGlja25lc3M6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJzogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICBzdHJpbmc6ICdzdHJpbmcnLFxuICBzdHJva2U6ICdzdHJva2UnLFxuICBzdHJva2VkYXNoYXJyYXk6ICdzdHJva2VEYXNoYXJyYXknLFxuICAnc3Ryb2tlLWRhc2hhcnJheSc6ICdzdHJva2VEYXNoYXJyYXknLFxuICBzdHJva2VkYXNob2Zmc2V0OiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gICdzdHJva2UtZGFzaG9mZnNldCc6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgc3Ryb2tlbGluZWNhcDogJ3N0cm9rZUxpbmVjYXAnLFxuICAnc3Ryb2tlLWxpbmVjYXAnOiAnc3Ryb2tlTGluZWNhcCcsXG4gIHN0cm9rZWxpbmVqb2luOiAnc3Ryb2tlTGluZWpvaW4nLFxuICAnc3Ryb2tlLWxpbmVqb2luJzogJ3N0cm9rZUxpbmVqb2luJyxcbiAgc3Ryb2tlbWl0ZXJsaW1pdDogJ3N0cm9rZU1pdGVybGltaXQnLFxuICAnc3Ryb2tlLW1pdGVybGltaXQnOiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gIHN0cm9rZXdpZHRoOiAnc3Ryb2tlV2lkdGgnLFxuICAnc3Ryb2tlLXdpZHRoJzogJ3N0cm9rZVdpZHRoJyxcbiAgc3Ryb2tlb3BhY2l0eTogJ3N0cm9rZU9wYWNpdHknLFxuICAnc3Ryb2tlLW9wYWNpdHknOiAnc3Ryb2tlT3BhY2l0eScsXG4gIHN1cHByZXNzY29udGVudGVkaXRhYmxld2FybmluZzogJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZycsXG4gIHN1cHByZXNzaHlkcmF0aW9ud2FybmluZzogJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsXG4gIHN1cmZhY2VzY2FsZTogJ3N1cmZhY2VTY2FsZScsXG4gIHN5c3RlbWxhbmd1YWdlOiAnc3lzdGVtTGFuZ3VhZ2UnLFxuICB0YWJsZXZhbHVlczogJ3RhYmxlVmFsdWVzJyxcbiAgdGFyZ2V0eDogJ3RhcmdldFgnLFxuICB0YXJnZXR5OiAndGFyZ2V0WScsXG4gIHRleHRhbmNob3I6ICd0ZXh0QW5jaG9yJyxcbiAgJ3RleHQtYW5jaG9yJzogJ3RleHRBbmNob3InLFxuICB0ZXh0ZGVjb3JhdGlvbjogJ3RleHREZWNvcmF0aW9uJyxcbiAgJ3RleHQtZGVjb3JhdGlvbic6ICd0ZXh0RGVjb3JhdGlvbicsXG4gIHRleHRsZW5ndGg6ICd0ZXh0TGVuZ3RoJyxcbiAgdGV4dHJlbmRlcmluZzogJ3RleHRSZW5kZXJpbmcnLFxuICAndGV4dC1yZW5kZXJpbmcnOiAndGV4dFJlbmRlcmluZycsXG4gIHRvOiAndG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2Zvcm0nLFxuICB0cmFuc2Zvcm1vcmlnaW46ICd0cmFuc2Zvcm1PcmlnaW4nLFxuICAndHJhbnNmb3JtLW9yaWdpbic6ICd0cmFuc2Zvcm1PcmlnaW4nLFxuICB0eXBlb2Y6ICd0eXBlb2YnLFxuICB1MTogJ3UxJyxcbiAgdTI6ICd1MicsXG4gIHVuZGVybGluZXBvc2l0aW9uOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICAndW5kZXJsaW5lLXBvc2l0aW9uJzogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgdW5kZXJsaW5ldGhpY2tuZXNzOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ3VuZGVybGluZS10aGlja25lc3MnOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgdW5pY29kZTogJ3VuaWNvZGUnLFxuICB1bmljb2RlYmlkaTogJ3VuaWNvZGVCaWRpJyxcbiAgJ3VuaWNvZGUtYmlkaSc6ICd1bmljb2RlQmlkaScsXG4gIHVuaWNvZGVyYW5nZTogJ3VuaWNvZGVSYW5nZScsXG4gICd1bmljb2RlLXJhbmdlJzogJ3VuaWNvZGVSYW5nZScsXG4gIHVuaXRzcGVyZW06ICd1bml0c1BlckVtJyxcbiAgJ3VuaXRzLXBlci1lbSc6ICd1bml0c1BlckVtJyxcbiAgdW5zZWxlY3RhYmxlOiAndW5zZWxlY3RhYmxlJyxcbiAgdmFscGhhYmV0aWM6ICd2QWxwaGFiZXRpYycsXG4gICd2LWFscGhhYmV0aWMnOiAndkFscGhhYmV0aWMnLFxuICB2YWx1ZXM6ICd2YWx1ZXMnLFxuICB2ZWN0b3JlZmZlY3Q6ICd2ZWN0b3JFZmZlY3QnLFxuICAndmVjdG9yLWVmZmVjdCc6ICd2ZWN0b3JFZmZlY3QnLFxuICB2ZXJzaW9uOiAndmVyc2lvbicsXG4gIHZlcnRhZHZ5OiAndmVydEFkdlknLFxuICAndmVydC1hZHYteSc6ICd2ZXJ0QWR2WScsXG4gIHZlcnRvcmlnaW54OiAndmVydE9yaWdpblgnLFxuICAndmVydC1vcmlnaW4teCc6ICd2ZXJ0T3JpZ2luWCcsXG4gIHZlcnRvcmlnaW55OiAndmVydE9yaWdpblknLFxuICAndmVydC1vcmlnaW4teSc6ICd2ZXJ0T3JpZ2luWScsXG4gIHZoYW5naW5nOiAndkhhbmdpbmcnLFxuICAndi1oYW5naW5nJzogJ3ZIYW5naW5nJyxcbiAgdmlkZW9ncmFwaGljOiAndklkZW9ncmFwaGljJyxcbiAgJ3YtaWRlb2dyYXBoaWMnOiAndklkZW9ncmFwaGljJyxcbiAgdmlld2JveDogJ3ZpZXdCb3gnLFxuICB2aWV3dGFyZ2V0OiAndmlld1RhcmdldCcsXG4gIHZpc2liaWxpdHk6ICd2aXNpYmlsaXR5JyxcbiAgdm1hdGhlbWF0aWNhbDogJ3ZNYXRoZW1hdGljYWwnLFxuICAndi1tYXRoZW1hdGljYWwnOiAndk1hdGhlbWF0aWNhbCcsXG4gIHZvY2FiOiAndm9jYWInLFxuICB3aWR0aHM6ICd3aWR0aHMnLFxuICB3b3Jkc3BhY2luZzogJ3dvcmRTcGFjaW5nJyxcbiAgJ3dvcmQtc3BhY2luZyc6ICd3b3JkU3BhY2luZycsXG4gIHdyaXRpbmdtb2RlOiAnd3JpdGluZ01vZGUnLFxuICAnd3JpdGluZy1tb2RlJzogJ3dyaXRpbmdNb2RlJyxcbiAgeDE6ICd4MScsXG4gIHgyOiAneDInLFxuICB4OiAneCcsXG4gIHhjaGFubmVsc2VsZWN0b3I6ICd4Q2hhbm5lbFNlbGVjdG9yJyxcbiAgeGhlaWdodDogJ3hIZWlnaHQnLFxuICAneC1oZWlnaHQnOiAneEhlaWdodCcsXG4gIHhsaW5rYWN0dWF0ZTogJ3hsaW5rQWN0dWF0ZScsXG4gICd4bGluazphY3R1YXRlJzogJ3hsaW5rQWN0dWF0ZScsXG4gIHhsaW5rYXJjcm9sZTogJ3hsaW5rQXJjcm9sZScsXG4gICd4bGluazphcmNyb2xlJzogJ3hsaW5rQXJjcm9sZScsXG4gIHhsaW5raHJlZjogJ3hsaW5rSHJlZicsXG4gICd4bGluazpocmVmJzogJ3hsaW5rSHJlZicsXG4gIHhsaW5rcm9sZTogJ3hsaW5rUm9sZScsXG4gICd4bGluazpyb2xlJzogJ3hsaW5rUm9sZScsXG4gIHhsaW5rc2hvdzogJ3hsaW5rU2hvdycsXG4gICd4bGluazpzaG93JzogJ3hsaW5rU2hvdycsXG4gIHhsaW5rdGl0bGU6ICd4bGlua1RpdGxlJyxcbiAgJ3hsaW5rOnRpdGxlJzogJ3hsaW5rVGl0bGUnLFxuICB4bGlua3R5cGU6ICd4bGlua1R5cGUnLFxuICAneGxpbms6dHlwZSc6ICd4bGlua1R5cGUnLFxuICB4bWxiYXNlOiAneG1sQmFzZScsXG4gICd4bWw6YmFzZSc6ICd4bWxCYXNlJyxcbiAgeG1sbGFuZzogJ3htbExhbmcnLFxuICAneG1sOmxhbmcnOiAneG1sTGFuZycsXG4gIHhtbG5zOiAneG1sbnMnLFxuICAneG1sOnNwYWNlJzogJ3htbFNwYWNlJyxcbiAgeG1sbnN4bGluazogJ3htbG5zWGxpbmsnLFxuICAneG1sbnM6eGxpbmsnOiAneG1sbnNYbGluaycsXG4gIHhtbHNwYWNlOiAneG1sU3BhY2UnLFxuICB5MTogJ3kxJyxcbiAgeTI6ICd5MicsXG4gIHk6ICd5JyxcbiAgeWNoYW5uZWxzZWxlY3RvcjogJ3lDaGFubmVsU2VsZWN0b3InLFxuICB6OiAneicsXG4gIHpvb21hbmRwYW46ICd6b29tQW5kUGFuJ1xufTtcblxudmFyIGFyaWFQcm9wZXJ0aWVzID0ge1xuICAnYXJpYS1jdXJyZW50JzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtZGVzY3JpcHRpb24nOiAwLFxuICAnYXJpYS1kZXRhaWxzJzogMCxcbiAgJ2FyaWEtZGlzYWJsZWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1oaWRkZW4nOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1pbnZhbGlkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEta2V5c2hvcnRjdXRzJzogMCxcbiAgJ2FyaWEtbGFiZWwnOiAwLFxuICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nOiAwLFxuICAvLyBXaWRnZXQgQXR0cmlidXRlc1xuICAnYXJpYS1hdXRvY29tcGxldGUnOiAwLFxuICAnYXJpYS1jaGVja2VkJzogMCxcbiAgJ2FyaWEtZXhwYW5kZWQnOiAwLFxuICAnYXJpYS1oYXNwb3B1cCc6IDAsXG4gICdhcmlhLWxldmVsJzogMCxcbiAgJ2FyaWEtbW9kYWwnOiAwLFxuICAnYXJpYS1tdWx0aWxpbmUnOiAwLFxuICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiAwLFxuICAnYXJpYS1vcmllbnRhdGlvbic6IDAsXG4gICdhcmlhLXBsYWNlaG9sZGVyJzogMCxcbiAgJ2FyaWEtcHJlc3NlZCc6IDAsXG4gICdhcmlhLXJlYWRvbmx5JzogMCxcbiAgJ2FyaWEtcmVxdWlyZWQnOiAwLFxuICAnYXJpYS1zZWxlY3RlZCc6IDAsXG4gICdhcmlhLXNvcnQnOiAwLFxuICAnYXJpYS12YWx1ZW1heCc6IDAsXG4gICdhcmlhLXZhbHVlbWluJzogMCxcbiAgJ2FyaWEtdmFsdWVub3cnOiAwLFxuICAnYXJpYS12YWx1ZXRleHQnOiAwLFxuICAvLyBMaXZlIFJlZ2lvbiBBdHRyaWJ1dGVzXG4gICdhcmlhLWF0b21pYyc6IDAsXG4gICdhcmlhLWJ1c3knOiAwLFxuICAnYXJpYS1saXZlJzogMCxcbiAgJ2FyaWEtcmVsZXZhbnQnOiAwLFxuICAvLyBEcmFnLWFuZC1Ecm9wIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtZHJvcGVmZmVjdCc6IDAsXG4gICdhcmlhLWdyYWJiZWQnOiAwLFxuICAvLyBSZWxhdGlvbnNoaXAgQXR0cmlidXRlc1xuICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogMCxcbiAgJ2FyaWEtY29sY291bnQnOiAwLFxuICAnYXJpYS1jb2xpbmRleCc6IDAsXG4gICdhcmlhLWNvbHNwYW4nOiAwLFxuICAnYXJpYS1jb250cm9scyc6IDAsXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogMCxcbiAgJ2FyaWEtZXJyb3JtZXNzYWdlJzogMCxcbiAgJ2FyaWEtZmxvd3RvJzogMCxcbiAgJ2FyaWEtbGFiZWxsZWRieSc6IDAsXG4gICdhcmlhLW93bnMnOiAwLFxuICAnYXJpYS1wb3NpbnNldCc6IDAsXG4gICdhcmlhLXJvd2NvdW50JzogMCxcbiAgJ2FyaWEtcm93aW5kZXgnOiAwLFxuICAnYXJpYS1yb3dzcGFuJzogMCxcbiAgJ2FyaWEtc2V0c2l6ZSc6IDBcbn07XG5cbnZhciB3YXJuZWRQcm9wZXJ0aWVzJDEgPSB7fTtcbnZhciByQVJJQSQxID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgckFSSUFDYW1lbCQxID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5JDEodGFnTmFtZSwgbmFtZSkge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwod2FybmVkUHJvcGVydGllcyQxLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyQVJJQUNhbWVsJDEudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGFyaWFOYW1lID0gJ2FyaWEtJyArIG5hbWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBjb3JyZWN0TmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGFyaWFOYW1lKSA/IGFyaWFOYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChjb3JyZWN0TmFtZSA9PSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIEFSSUEgYXR0cmlidXRlcyBmb2xsb3cgdGhlIHBhdHRlcm4gYXJpYS0qIGFuZCBtdXN0IGJlIGxvd2VyY2FzZS4nLCBuYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG5cblxuICAgICAgaWYgKG5hbWUgIT09IGNvcnJlY3ROYW1lKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIGNvcnJlY3ROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAockFSSUEkMS50ZXN0KG5hbWUpKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgc3RhbmRhcmROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gbG93ZXJDYXNlZE5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgICAgaWYgKHN0YW5kYXJkTmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG5cblxuICAgICAgaWYgKG5hbWUgIT09IHN0YW5kYXJkTmFtZSkge1xuICAgICAgICBlcnJvcignVW5rbm93biBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcykge1xuICB7XG4gICAgdmFyIGludmFsaWRQcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkkMSh0eXBlLCBrZXkpO1xuXG4gICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgaW52YWxpZFByb3BzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSBpbnZhbGlkUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgICB9KS5qb2luKCcsICcpO1xuXG4gICAgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcCAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfSBlbHNlIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID4gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgYXJpYSBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWFyaWEtcHJvcHMnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuVmFsdWVOdWxsID0gZmFsc2U7XG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMSh0eXBlLCBwcm9wcykge1xuICB7XG4gICAgaWYgKHR5cGUgIT09ICdpbnB1dCcgJiYgdHlwZSAhPT0gJ3RleHRhcmVhJyAmJiB0eXBlICE9PSAnc2VsZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wcyAhPSBudWxsICYmIHByb3BzLnZhbHVlID09PSBudWxsICYmICFkaWRXYXJuVmFsdWVOdWxsKSB7XG4gICAgICBkaWRXYXJuVmFsdWVOdWxsID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnICYmIHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgIGVycm9yKCdgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuICcgKyAnQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgYXJyYXkgd2hlbiBgbXVsdGlwbGVgIGlzIHNldCB0byBgdHJ1ZWAgJyArICd0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgIGZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuICcgKyAnQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgc3RyaW5nIHRvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgJyArICdmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB3YXJuZWRQcm9wZXJ0aWVzID0ge307XG52YXIgRVZFTlRfTkFNRV9SRUdFWCA9IC9eb24uLztcbnZhciBJTlZBTElEX0VWRU5UX05BTUVfUkVHRVggPSAvXm9uW15BLVpdLztcbnZhciByQVJJQSA9IG5ldyBSZWdFeHAoJ14oYXJpYSktWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpIDtcbnZhciByQVJJQUNhbWVsID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpIDtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eSh0YWdOYW1lLCBuYW1lLCB2YWx1ZSwgZXZlbnRSZWdpc3RyeSkge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwod2FybmVkUHJvcGVydGllcywgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllc1tuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c2luJyB8fCBsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNvdXQnKSB7XG4gICAgICBlcnJvcignUmVhY3QgdXNlcyBvbkZvY3VzIGFuZCBvbkJsdXIgaW5zdGVhZCBvZiBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQuICcgKyAnQWxsIFJlYWN0IGV2ZW50cyBhcmUgbm9ybWFsaXplZCB0byBidWJibGUsIHNvIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dCAnICsgJ2FyZSBub3QgbmVlZGVkL3N1cHBvcnRlZCBieSBSZWFjdC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBBY3Rpb25zIGFyZSBzcGVjaWFsIGJlY2F1c2UgdW5saWtlIGV2ZW50cyB0aGV5IGNhbiBoYXZlIG90aGVyIHZhbHVlIHR5cGVzLlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAodGFnTmFtZSA9PT0gJ2Zvcm0nICYmIG5hbWUgPT09ICdhY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFnTmFtZSA9PT0gJ2lucHV0JyAmJiBuYW1lID09PSAnZm9ybUFjdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YWdOYW1lID09PSAnYnV0dG9uJyAmJiBuYW1lID09PSAnZm9ybUFjdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gV2UgY2FuJ3QgcmVseSBvbiB0aGUgZXZlbnQgc3lzdGVtIGJlaW5nIGluamVjdGVkIG9uIHRoZSBzZXJ2ZXIuXG5cblxuICAgIGlmIChldmVudFJlZ2lzdHJ5ICE9IG51bGwpIHtcbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0gZXZlbnRSZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSBldmVudFJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM7XG5cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gOiBudWxsO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoRVZFTlRfTkFNRV9SRUdFWC50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gSXQgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgLy8gSWYgbm8gZXZlbnQgcGx1Z2lucyBoYXZlIGJlZW4gaW5qZWN0ZWQsIHdlIGFyZSBpbiBhIHNlcnZlciBlbnZpcm9ubWVudC5cbiAgICAgIC8vIFNvIHdlIGNhbid0IHRlbGwgaWYgdGhlIGV2ZW50IG5hbWUgaXMgY29ycmVjdCBmb3Igc3VyZSwgYnV0IHdlIGNhbiBmaWx0ZXJcbiAgICAgIC8vIG91dCBrbm93biBiYWQgb25lcyBsaWtlIGBvbmNsaWNrYC4gV2UgY2FuJ3Qgc3VnZ2VzdCBhIHNwZWNpZmljIHJlcGxhY2VtZW50IHRob3VnaC5cbiAgICAgIGlmIChJTlZBTElEX0VWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuICcgKyAnUmVhY3QgZXZlbnRzIHVzZSB0aGUgY2FtZWxDYXNlIG5hbWluZyBjb252ZW50aW9uLCBmb3IgZXhhbXBsZSBgb25DbGlja2AuJywgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBMZXQgdGhlIEFSSUEgYXR0cmlidXRlIGhvb2sgdmFsaWRhdGUgQVJJQSBhdHRyaWJ1dGVzXG5cblxuICAgIGlmIChyQVJJQS50ZXN0KG5hbWUpIHx8IHJBUklBQ2FtZWwudGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnaW5uZXJodG1sJykge1xuICAgICAgZXJyb3IoJ0RpcmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdhcmlhJykge1xuICAgICAgZXJyb3IoJ1RoZSBgYXJpYWAgYXR0cmlidXRlIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGluIFJlYWN0LiAnICsgJ1Bhc3MgaW5kaXZpZHVhbCBgYXJpYS1gIGF0dHJpYnV0ZXMgaW5zdGVhZC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdpcycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYSBgJXNgIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUgYGlzYC4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCB0eXBlb2YgdmFsdWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIE5hTiBmb3IgdGhlIGAlc2AgYXR0cmlidXRlLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0ICcgKyAndGhlIHZhbHVlIHRvIGEgc3RyaW5nLicsIG5hbWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gS25vd24gYXR0cmlidXRlcyBzaG91bGQgbWF0Y2ggdGhlIGNhc2luZyBzcGVjaWZpZWQgaW4gdGhlIHByb3BlcnR5IGNvbmZpZy5cblxuXG4gICAgaWYgKHBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdO1xuXG4gICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBuYW1lKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIERPTSBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5hbWUgIT09IGxvd2VyQ2FzZWROYW1lKSB7XG4gICAgICAvLyBVbmtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIGhhdmUgbG93ZXJjYXNlIGNhc2luZyBzaW5jZSB0aGF0J3MgaG93IHRoZXlcbiAgICAgIC8vIHdpbGwgYmUgY2FzZWQgYW55d2F5IHdpdGggc2VydmVyIHJlbmRlcmluZy5cbiAgICAgIGVycm9yKCdSZWFjdCBkb2VzIG5vdCByZWNvZ25pemUgdGhlIGAlc2AgcHJvcCBvbiBhIERPTSBlbGVtZW50LiBJZiB5b3UgJyArICdpbnRlbnRpb25hbGx5IHdhbnQgaXQgdG8gYXBwZWFyIGluIHRoZSBET00gYXMgYSBjdXN0b20gJyArICdhdHRyaWJ1dGUsIHNwZWxsIGl0IGFzIGxvd2VyY2FzZSBgJXNgIGluc3RlYWQuICcgKyAnSWYgeW91IGFjY2lkZW50YWxseSBwYXNzZWQgaXQgZnJvbSBhIHBhcmVudCBjb21wb25lbnQsIHJlbW92ZSAnICsgJ2l0IGZyb20gdGhlIERPTSBlbGVtZW50LicsIG5hbWUsIGxvd2VyQ2FzZWROYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIE5vdyB0aGF0IHdlJ3ZlIHZhbGlkYXRlZCBjYXNpbmcsIGRvIG5vdCB2YWxpZGF0ZVxuICAgIC8vIGRhdGEgdHlwZXMgZm9yIHJlc2VydmVkIHByb3BzXG5cblxuICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgY2FzZSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnOlxuICAgICAgY2FzZSAnY2hpbGRyZW4nOlxuICAgICAgY2FzZSAnc3R5bGUnOlxuICAgICAgY2FzZSAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJzpcbiAgICAgIGNhc2UgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc6XG4gICAgICBjYXNlICdkZWZhdWx0VmFsdWUnOiAvLyBSZXNlcnZlZFxuXG4gICAgICBjYXNlICdkZWZhdWx0Q2hlY2tlZCc6XG4gICAgICBjYXNlICdpbm5lckhUTUwnOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAge1xuICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnYXV0b0ZvY3VzJzpcbiAgICAgICAgICAgIGNhc2UgJ2NoZWNrZWQnOlxuICAgICAgICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgICAgICAgY2FzZSAnbXV0ZWQnOlxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0ZWQnOlxuICAgICAgICAgICAgY2FzZSAnY29udGVudEVkaXRhYmxlJzpcbiAgICAgICAgICAgIGNhc2UgJ3NwZWxsQ2hlY2snOlxuICAgICAgICAgICAgY2FzZSAnZHJhZ2dhYmxlJzpcbiAgICAgICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICAgIGNhc2UgJ2F1dG9SZXZlcnNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnOlxuICAgICAgICAgICAgY2FzZSAnZm9jdXNhYmxlJzpcbiAgICAgICAgICAgIGNhc2UgJ3ByZXNlcnZlQWxwaGEnOlxuICAgICAgICAgICAgY2FzZSAnYWxsb3dGdWxsU2NyZWVuJzpcbiAgICAgICAgICAgIGNhc2UgJ2FzeW5jJzpcbiAgICAgICAgICAgIGNhc2UgJ2F1dG9QbGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbnRyb2xzJzpcbiAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgICAgICAgY2FzZSAnZGVmZXInOlxuICAgICAgICAgICAgY2FzZSAnZGlzYWJsZWQnOlxuICAgICAgICAgICAgY2FzZSAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnOlxuICAgICAgICAgICAgY2FzZSAnZGlzYWJsZVJlbW90ZVBsYXliYWNrJzpcbiAgICAgICAgICAgIGNhc2UgJ2Zvcm1Ob1ZhbGlkYXRlJzpcbiAgICAgICAgICAgIGNhc2UgJ2hpZGRlbic6XG4gICAgICAgICAgICBjYXNlICdsb29wJzpcbiAgICAgICAgICAgIGNhc2UgJ25vTW9kdWxlJzpcbiAgICAgICAgICAgIGNhc2UgJ25vVmFsaWRhdGUnOlxuICAgICAgICAgICAgY2FzZSAnb3Blbic6XG4gICAgICAgICAgICBjYXNlICdwbGF5c0lubGluZSc6XG4gICAgICAgICAgICBjYXNlICdyZWFkT25seSc6XG4gICAgICAgICAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICAgICAgICBjYXNlICdyZXZlcnNlZCc6XG4gICAgICAgICAgICBjYXNlICdzY29wZWQnOlxuICAgICAgICAgICAgY2FzZSAnc2VhbWxlc3MnOlxuICAgICAgICAgICAgY2FzZSAnaXRlbVNjb3BlJzpcbiAgICAgICAgICAgIGNhc2UgJ2NhcHR1cmUnOlxuICAgICAgICAgICAgY2FzZSAnZG93bmxvYWQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gQm9vbGVhbiBwcm9wZXJ0aWVzIGNhbiBhY2NlcHQgYm9vbGVhbiB2YWx1ZXNcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHByZWZpeCA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLCA1KTtcblxuICAgICAgICAgICAgICAgIGlmIChwcmVmaXggPT09ICdkYXRhLScgfHwgcHJlZml4ID09PSAnYXJpYS0nKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuJyArICdJZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICcgKyAnJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS5cXG5cXG4nICsgJ0lmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCAnICsgJ3Bhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSwgbmFtZSwgbmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAvLyBXYXJuIHdoZW4gYSBrbm93biBhdHRyaWJ1dGUgaXMgYSBiYWQgdHlwZVxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gV2FybiB3aGVuIHBhc3NpbmcgdGhlIHN0cmluZ3MgJ2ZhbHNlJyBvciAndHJ1ZScgaW50byBhIGJvb2xlYW4gcHJvcFxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnY2hlY2tlZCc6XG4gICAgICAgICAgICAgIGNhc2UgJ3NlbGVjdGVkJzpcbiAgICAgICAgICAgICAgY2FzZSAnbXVsdGlwbGUnOlxuICAgICAgICAgICAgICBjYXNlICdtdXRlZCc6XG4gICAgICAgICAgICAgIGNhc2UgJ2FsbG93RnVsbFNjcmVlbic6XG4gICAgICAgICAgICAgIGNhc2UgJ2FzeW5jJzpcbiAgICAgICAgICAgICAgY2FzZSAnYXV0b1BsYXknOlxuICAgICAgICAgICAgICBjYXNlICdjb250cm9scyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgICAgICAgICBjYXNlICdkZWZlcic6XG4gICAgICAgICAgICAgIGNhc2UgJ2Rpc2FibGVkJzpcbiAgICAgICAgICAgICAgY2FzZSAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnOlxuICAgICAgICAgICAgICBjYXNlICdkaXNhYmxlUmVtb3RlUGxheWJhY2snOlxuICAgICAgICAgICAgICBjYXNlICdmb3JtTm9WYWxpZGF0ZSc6XG4gICAgICAgICAgICAgIGNhc2UgJ2hpZGRlbic6XG4gICAgICAgICAgICAgIGNhc2UgJ2xvb3AnOlxuICAgICAgICAgICAgICBjYXNlICdub01vZHVsZSc6XG4gICAgICAgICAgICAgIGNhc2UgJ25vVmFsaWRhdGUnOlxuICAgICAgICAgICAgICBjYXNlICdvcGVuJzpcbiAgICAgICAgICAgICAgY2FzZSAncGxheXNJbmxpbmUnOlxuICAgICAgICAgICAgICBjYXNlICdyZWFkT25seSc6XG4gICAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgICAgICAgY2FzZSAncmV2ZXJzZWQnOlxuICAgICAgICAgICAgICBjYXNlICdzY29wZWQnOlxuICAgICAgICAgICAgICBjYXNlICdzZWFtbGVzcyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2l0ZW1TY29wZSc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvcignUmVjZWl2ZWQgdGhlIHN0cmluZyBgJXNgIGZvciB0aGUgYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC4gJyArICclcyAnICsgJ0RpZCB5b3UgbWVhbiAlcz17JXN9PycsIHZhbHVlLCBuYW1lLCB2YWx1ZSA9PT0gJ2ZhbHNlJyA/ICdUaGUgYnJvd3NlciB3aWxsIGludGVycHJldCBpdCBhcyBhIHRydXRoeSB2YWx1ZS4nIDogJ0FsdGhvdWdoIHRoaXMgd29ya3MsIGl0IHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgaWYgeW91IHBhc3MgdGhlIHN0cmluZyBcImZhbHNlXCIuJywgbmFtZSwgdmFsdWUpO1xuXG4gICAgICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Vbmtub3duUHJvcGVydGllcyh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICB7XG4gICAgdmFyIHVua25vd25Qcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkodHlwZSwga2V5LCBwcm9wc1trZXldLCBldmVudFJlZ2lzdHJ5KTtcblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIHVua25vd25Qcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVua25vd25Qcm9wU3RyaW5nID0gdW5rbm93blByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gICAgfSkuam9pbignLCAnKTtcblxuICAgIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgcHJvcCAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSBpdCBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgaXQgaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAodW5rbm93blByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlcyBmb3IgcHJvcHMgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgdGhlbSBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgdGhlbSBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciAnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICBpZiAoaXNDdXN0b21FbGVtZW50KHR5cGUpIHx8IHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuVW5rbm93blByb3BlcnRpZXModHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpO1xufVxuXG4vLyBhbmQgYW55IG5ld2xpbmUgb3IgdGFiIGFyZSBmaWx0ZXJlZCBvdXQgYXMgaWYgdGhleSdyZSBub3QgcGFydCBvZiB0aGUgVVJMLlxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZ1xuLy8gVGFiIG9yIG5ld2xpbmUgYXJlIGRlZmluZWQgYXMgXFxyXFxuXFx0OlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXRhYi1vci1uZXdsaW5lXG4vLyBBIEMwIGNvbnRyb2wgaXMgYSBjb2RlIHBvaW50IGluIHRoZSByYW5nZSBcXHUwMDAwIE5VTEwgdG8gXFx1MDAxRlxuLy8gSU5GT1JNQVRJT04gU0VQQVJBVE9SIE9ORSwgaW5jbHVzaXZlOlxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2MwLWNvbnRyb2wtb3Itc3BhY2VcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG52YXIgaXNKYXZhU2NyaXB0UHJvdG9jb2wgPSAvXltcXHUwMDAwLVxcdTAwMUYgXSpqW1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnZbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qc1tcXHJcXG5cXHRdKmNbXFxyXFxuXFx0XSpyW1xcclxcblxcdF0qaVtcXHJcXG5cXHRdKnBbXFxyXFxuXFx0XSp0W1xcclxcblxcdF0qXFw6L2k7XG52YXIgZGlkV2FybiA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzYW5pdGl6ZVVSTCh1cmwpIHtcbiAgLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgc3ltYm9scyBoZXJlIGJlY2F1c2UgdGhleSBnZXQgZmlsdGVyZWQgb3V0IGVsc2V3aGVyZS5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG4gIHZhciBzdHJpbmdpZmllZFVSTCA9ICcnICsgdXJsO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm4gJiYgaXNKYXZhU2NyaXB0UHJvdG9jb2wudGVzdChzdHJpbmdpZmllZFVSTCkpIHtcbiAgICAgIGRpZFdhcm4gPSB0cnVlO1xuXG4gICAgICBlcnJvcignQSBmdXR1cmUgdmVyc2lvbiBvZiBSZWFjdCB3aWxsIGJsb2NrIGphdmFzY3JpcHQ6IFVSTHMgYXMgYSBzZWN1cml0eSBwcmVjYXV0aW9uLiAnICsgJ1VzZSBldmVudCBoYW5kbGVycyBpbnN0ZWFkIGlmIHlvdSBjYW4uIElmIHlvdSBuZWVkIHRvIGdlbmVyYXRlIHVuc2FmZSBIVE1MIHRyeSAnICsgJ3VzaW5nIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGluc3RlYWQuIFJlYWN0IHdhcyBwYXNzZWQgJXMuJywgSlNPTi5zdHJpbmdpZnkoc3RyaW5naWZpZWRVUkwpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG52YXIgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgPSAxO1xudmFyIElTX05PTl9ERUxFR0FURUQgPSAxIDw8IDE7XG52YXIgSVNfQ0FQVFVSRV9QSEFTRSA9IDEgPDwgMjtcbi8vIHNldCB0byBMRUdBQ1lfRkJfU1VQUE9SVC4gTEVHQUNZX0ZCX1NVUFBPUlQgb25seSBnZXRzIHNldCB3aGVuXG4vLyB3ZSBjYWxsIHdpbGxEZWZlckxhdGVyRm9yTGVnYWN5RkJTdXBwb3J0LCB0aHVzIG5vdCBiYWlsaW5nIG91dFxuLy8gd2lsbCByZXN1bHQgaW4gZW5kbGVzcyBjeWNsZXMgbGlrZSBhbiBpbmZpbml0ZSBsb29wLlxuLy8gV2UgYWxzbyBkb24ndCB3YW50IHRvIGRlZmVyIGR1cmluZyBldmVudCByZXBsYXlpbmcuXG5cbnZhciBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUyA9IElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFIHwgSVNfTk9OX0RFTEVHQVRFRCB8IElTX0NBUFRVUkVfUEhBU0U7XG5cbi8vIFRoaXMgZXhpc3RzIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBSZWFjdERPTUV2ZW50UmVwbGF5aW5nXG4vLyBhbmQgRE9NUGx1Z2luRXZlbnRTeXN0ZW0uXG52YXIgY3VycmVudFJlcGxheWluZ0V2ZW50ID0gbnVsbDtcbmZ1bmN0aW9uIHNldFJlcGxheWluZ0V2ZW50KGV2ZW50KSB7XG4gIHtcbiAgICBpZiAoY3VycmVudFJlcGxheWluZ0V2ZW50ICE9PSBudWxsKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgY3VycmVudGx5IHJlcGxheWluZyBldmVudCB0byBiZSBudWxsLiBUaGlzIGVycm9yICcgKyAnaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgY3VycmVudFJlcGxheWluZ0V2ZW50ID0gZXZlbnQ7XG59XG5mdW5jdGlvbiByZXNldFJlcGxheWluZ0V2ZW50KCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnRSZXBsYXlpbmdFdmVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGN1cnJlbnRseSByZXBsYXlpbmcgZXZlbnQgdG8gbm90IGJlIG51bGwuIFRoaXMgZXJyb3IgJyArICdpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBjdXJyZW50UmVwbGF5aW5nRXZlbnQgPSBudWxsO1xufVxuZnVuY3Rpb24gaXNSZXBsYXlpbmdFdmVudChldmVudCkge1xuICByZXR1cm4gZXZlbnQgPT09IGN1cnJlbnRSZXBsYXlpbmdFdmVudDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB0YXJnZXQgbm9kZSBmcm9tIGEgbmF0aXZlIGJyb3dzZXIgZXZlbnQgYnkgYWNjb3VudGluZyBmb3JcbiAqIGluY29uc2lzdGVuY2llcyBpbiBicm93c2VyIERPTSBBUElzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge0RPTUV2ZW50VGFyZ2V0fSBUYXJnZXQgbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICAvLyBGYWxsYmFjayB0byBuYXRpdmVFdmVudC5zcmNFbGVtZW50IGZvciBJRTlcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjUwNlxuICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgfHwgd2luZG93OyAvLyBOb3JtYWxpemUgU1ZHIDx1c2U+IGVsZW1lbnQgZXZlbnRzICM0OTYzXG5cbiAgaWYgKHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCkge1xuICAgIHRhcmdldCA9IHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudDtcbiAgfSAvLyBTYWZhcmkgbWF5IGZpcmUgZXZlbnRzIG9uIHRleHQgbm9kZXMgKE5vZGUuVEVYVF9OT0RFIGlzIDMpLlxuICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxuXG5cbiAgcmV0dXJuIHRhcmdldC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFID8gdGFyZ2V0LnBhcmVudE5vZGUgOiB0YXJnZXQ7XG59XG5cbnZhciByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbnZhciByZXN0b3JlUXVldWUgPSBudWxsO1xuXG5mdW5jdGlvbiByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpIHtcbiAgLy8gV2UgcGVyZm9ybSB0aGlzIHRyYW5zbGF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3Agc28gdGhhdCB3ZVxuICAvLyBhbHdheXMgcmVjZWl2ZSB0aGUgY29ycmVjdCBmaWJlciBoZXJlXG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXQpO1xuXG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIC8vIFVubW91bnRlZFxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzdGF0ZU5vZGUgPSBpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZTsgLy8gR3VhcmQgYWdhaW5zdCBGaWJlciBiZWluZyB1bm1vdW50ZWQuXG5cbiAgaWYgKHN0YXRlTm9kZSkge1xuICAgIHZhciBwcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoc3RhdGVOb2RlKTtcbiAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGludGVybmFsSW5zdGFuY2Uuc3RhdGVOb2RlLCBpbnRlcm5hbEluc3RhbmNlLnR5cGUsIHByb3BzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCkge1xuICBpZiAocmVzdG9yZVRhcmdldCkge1xuICAgIGlmIChyZXN0b3JlUXVldWUpIHtcbiAgICAgIHJlc3RvcmVRdWV1ZS5wdXNoKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3RvcmVRdWV1ZSA9IFt0YXJnZXRdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN0b3JlVGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG59XG5mdW5jdGlvbiBuZWVkc1N0YXRlUmVzdG9yZSgpIHtcbiAgcmV0dXJuIHJlc3RvcmVUYXJnZXQgIT09IG51bGwgfHwgcmVzdG9yZVF1ZXVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gcmVzdG9yZVN0YXRlSWZOZWVkZWQoKSB7XG4gIGlmICghcmVzdG9yZVRhcmdldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSByZXN0b3JlVGFyZ2V0O1xuICB2YXIgcXVldWVkVGFyZ2V0cyA9IHJlc3RvcmVRdWV1ZTtcbiAgcmVzdG9yZVRhcmdldCA9IG51bGw7XG4gIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG4gIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCk7XG5cbiAgaWYgKHF1ZXVlZFRhcmdldHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlZFRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHF1ZXVlZFRhcmdldHNbaV0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGBSZWFjdEluc3RhbmNlTWFwYCBtYWludGFpbnMgYSBtYXBwaW5nIGZyb20gYSBwdWJsaWMgZmFjaW5nIHN0YXRlZnVsXG4gKiBpbnN0YW5jZSAoa2V5KSBhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICh2YWx1ZSkuIFRoaXMgYWxsb3dzIHB1YmxpY1xuICogbWV0aG9kcyB0byBhY2NlcHQgdGhlIHVzZXIgZmFjaW5nIGluc3RhbmNlIGFzIGFuIGFyZ3VtZW50IGFuZCBtYXAgdGhlbSBiYWNrXG4gKiB0byBpbnRlcm5hbCBtZXRob2RzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBpcyBjdXJyZW50bHkgc2hhcmVkIGFuZCBhc3N1bWVkIHRvIGJlIHN0YXRlbGVzcy5cbiAqIElmIHRoaXMgYmVjb21lcyBhbiBhY3R1YWwgTWFwLCB0aGF0IHdpbGwgYnJlYWsuXG4gKi9cbmZ1bmN0aW9uIGdldChrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHM7XG59XG5mdW5jdGlvbiBoYXMoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICBrZXkuX3JlYWN0SW50ZXJuYWxzID0gdmFsdWU7XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQzID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG5mdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gIHZhciBub2RlID0gZmliZXI7XG4gIHZhciBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuXG4gIGlmICghZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGlzIG1pZ2h0IGJlIGEgbmV3IHRyZWUgdGhhdCBpc24ndCBpbnNlcnRlZFxuICAgIC8vIHlldC4gSWYgaXQgaXMsIHRoZW4gaXQgd2lsbCBoYXZlIGEgcGVuZGluZyBpbnNlcnRpb24gZWZmZWN0IG9uIGl0LlxuICAgIHZhciBuZXh0Tm9kZSA9IG5vZGU7XG5cbiAgICBkbyB7XG4gICAgICBub2RlID0gbmV4dE5vZGU7XG5cbiAgICAgIGlmICgobm9kZS5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uIG9yIGluLXByb2dyZXNzIGh5ZHJhdGlvbi4gVGhlIG5lYXJlc3QgcG9zc2libGVcbiAgICAgICAgLy8gbW91bnRlZCBmaWJlciBpcyB0aGUgcGFyZW50IGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIGZpZ3VyZSBvdXRcbiAgICAgICAgLy8gaWYgdGhhdCBvbmUgaXMgc3RpbGwgbW91bnRlZC5cbiAgICAgICAgbmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybjtcbiAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cblxuICAgICAgbmV4dE5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChuZXh0Tm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKG5vZGUucmV0dXJuKSB7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgd2FzIGEgbmVzdGVkIEhvc3RSb290IHdoZW4gdXNlZCB3aXRoXG4gICAgLy8gcmVuZGVyQ29udGFpbmVySW50b1N1YnRyZWUuXG4gICAgcmV0dXJuIG5lYXJlc3RNb3VudGVkO1xuICB9IC8vIElmIHdlIGRpZG4ndCBoaXQgdGhlIHJvb3QsIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSBpbiBhbiBkaXNjb25uZWN0ZWQgdHJlZVxuICAvLyB0aGF0IGhhcyBiZWVuIHVubW91bnRlZC5cblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihmaWJlcikge1xuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5lckZyb21GaWJlcihmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Um9vdCA/IGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGlzRmliZXJNb3VudGVkKGZpYmVyKSB7XG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5mdW5jdGlvbiBpc01vdW50ZWQoY29tcG9uZW50KSB7XG4gIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lciQzLmN1cnJlbnQ7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgdmFyIG93bmVyRmliZXIgPSBvd25lcjtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoIWluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRlZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihvd25lckZpYmVyKSB8fCAnQSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcblxuICBpZiAoIWZpYmVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcjtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNNb3VudGVkKGZpYmVyKSB7XG4gIGlmIChnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSAhPT0gZmliZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChmaWJlcikge1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmICghYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGVuIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiBpdCBpcyBtb3VudGVkLlxuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgIT09IGZpYmVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmliZXI7XG4gIH0gLy8gSWYgd2UgaGF2ZSB0d28gcG9zc2libGUgYnJhbmNoZXMsIHdlJ2xsIHdhbGsgYmFja3dhcmRzIHVwIHRvIHRoZSByb290XG4gIC8vIHRvIHNlZSB3aGF0IHBhdGggdGhlIHJvb3QgcG9pbnRzIHRvLiBPbiB0aGUgd2F5IHdlIG1heSBoaXQgb25lIG9mIHRoZVxuICAvLyBzcGVjaWFsIGNhc2VzIGFuZCB3ZSdsbCBkZWFsIHdpdGggdGhlbS5cblxuXG4gIHZhciBhID0gZmliZXI7XG4gIHZhciBiID0gYWx0ZXJuYXRlO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHBhcmVudEEgPSBhLnJldHVybjtcblxuICAgIGlmIChwYXJlbnRBID09PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBhdCB0aGUgcm9vdC5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBwYXJlbnRCID0gcGFyZW50QS5hbHRlcm5hdGU7XG5cbiAgICBpZiAocGFyZW50QiA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhlcmUgaXMgbm8gYWx0ZXJuYXRlLiBUaGlzIGlzIGFuIHVudXN1YWwgY2FzZS4gQ3VycmVudGx5LCBpdCBvbmx5XG4gICAgICAvLyBoYXBwZW5zIHdoZW4gYSBTdXNwZW5zZSBjb21wb25lbnQgaXMgaGlkZGVuLiBBbiBleHRyYSBmcmFnbWVudCBmaWJlclxuICAgICAgLy8gaXMgaW5zZXJ0ZWQgaW4gYmV0d2VlbiB0aGUgU3VzcGVuc2UgZmliZXIgYW5kIGl0cyBjaGlsZHJlbi4gU2tpcFxuICAgICAgLy8gb3ZlciB0aGlzIGV4dHJhIGZyYWdtZW50IGZpYmVyIGFuZCBwcm9jZWVkIHRvIHRoZSBuZXh0IHBhcmVudC5cbiAgICAgIHZhciBuZXh0UGFyZW50ID0gcGFyZW50QS5yZXR1cm47XG5cbiAgICAgIGlmIChuZXh0UGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGEgPSBiID0gbmV4dFBhcmVudDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIElmIHRoZXJlJ3Mgbm8gcGFyZW50LCB3ZSdyZSBhdCB0aGUgcm9vdC5cblxuXG4gICAgICBicmVhaztcbiAgICB9IC8vIElmIGJvdGggY29waWVzIG9mIHRoZSBwYXJlbnQgZmliZXIgcG9pbnQgdG8gdGhlIHNhbWUgY2hpbGQsIHdlIGNhblxuICAgIC8vIGFzc3VtZSB0aGF0IHRoZSBjaGlsZCBpcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlbiB3ZSBiYWlsb3V0IG9uIGxvd1xuICAgIC8vIHByaW9yaXR5OiB0aGUgYmFpbGVkIG91dCBmaWJlcidzIGNoaWxkIHJldXNlcyB0aGUgY3VycmVudCBjaGlsZC5cblxuXG4gICAgaWYgKHBhcmVudEEuY2hpbGQgPT09IHBhcmVudEIuY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBmaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZCA9PT0gYikge1xuICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBCIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgcmV0dXJuIGFsdGVybmF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH0gLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYW4gYWx0ZXJuYXRlIGZvciBhbnkgbW91bnRpbmcgbm9kZS4gU28gdGhlIG9ubHlcbiAgICAgIC8vIHdheSB0aGlzIGNvdWxkIHBvc3NpYmx5IGhhcHBlbiBpcyBpZiB0aGlzIHdhcyB1bm1vdW50ZWQsIGlmIGF0IGFsbC5cblxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXIgb2YgQSBhbmQgdGhlIHJldHVybiBwb2ludGVyIG9mIEIgcG9pbnQgdG8gZGlmZmVyZW50XG4gICAgICAvLyBmaWJlcnMuIFdlIGFzc3VtZSB0aGF0IHJldHVybiBwb2ludGVycyBuZXZlciBjcmlzcy1jcm9zcywgc28gQSBtdXN0XG4gICAgICAvLyBiZWxvbmcgdG8gdGhlIGNoaWxkIHNldCBvZiBBLnJldHVybiwgYW5kIEIgbXVzdCBiZWxvbmcgdG8gdGhlIGNoaWxkXG4gICAgICAvLyBzZXQgb2YgQi5yZXR1cm4uXG4gICAgICBhID0gcGFyZW50QTtcbiAgICAgIGIgPSBwYXJlbnRCO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcmV0dXJuIHBvaW50ZXJzIHBvaW50IHRvIHRoZSBzYW1lIGZpYmVyLiBXZSdsbCBoYXZlIHRvIHVzZSB0aGVcbiAgICAgIC8vIGRlZmF1bHQsIHNsb3cgcGF0aDogc2NhbiB0aGUgY2hpbGQgc2V0cyBvZiBlYWNoIHBhcmVudCBhbHRlcm5hdGUgdG8gc2VlXG4gICAgICAvLyB3aGljaCBjaGlsZCBiZWxvbmdzIHRvIHdoaWNoIHNldC5cbiAgICAgIC8vXG4gICAgICAvLyBTZWFyY2ggcGFyZW50IEEncyBjaGlsZCBzZXRcbiAgICAgIHZhciBkaWRGaW5kQ2hpbGQgPSBmYWxzZTtcbiAgICAgIHZhciBfY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgLy8gU2VhcmNoIHBhcmVudCBCJ3MgY2hpbGQgc2V0XG4gICAgICAgIF9jaGlsZCA9IHBhcmVudEIuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYikge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGIgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGlsZCB3YXMgbm90IGZvdW5kIGluIGVpdGhlciBwYXJlbnQgc2V0LiBUaGlzIGluZGljYXRlcyBhIGJ1ZyAnICsgJ2luIFJlYWN0IHJlbGF0ZWQgdG8gdGhlIHJldHVybiBwb2ludGVyLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhLmFsdGVybmF0ZSAhPT0gYikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmV0dXJuIGZpYmVycyBzaG91bGQgYWx3YXlzIGJlIGVhY2ggb3RoZXJzJyBhbHRlcm5hdGVzLiBcIiArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfSAvLyBJZiB0aGUgcm9vdCBpcyBub3QgYSBob3N0IGNvbnRhaW5lciwgd2UncmUgaW4gYSBkaXNjb25uZWN0ZWQgdHJlZS4gSS5lLlxuICAvLyB1bm1vdW50ZWQuXG5cblxuICBpZiAoYS50YWcgIT09IEhvc3RSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuJyk7XG4gIH1cblxuICBpZiAoYS5zdGF0ZU5vZGUuY3VycmVudCA9PT0gYSkge1xuICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICByZXR1cm4gZmliZXI7XG4gIH0gLy8gT3RoZXJ3aXNlIEIgaGFzIHRvIGJlIGN1cnJlbnQgYnJhbmNoLlxuXG5cbiAgcmV0dXJuIGFsdGVybmF0ZTtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVyKHBhcmVudCkge1xuICB2YXIgY3VycmVudFBhcmVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKHBhcmVudCk7XG4gIHJldHVybiBjdXJyZW50UGFyZW50ICE9PSBudWxsID8gZmluZEN1cnJlbnRIb3N0RmliZXJJbXBsKGN1cnJlbnRQYXJlbnQpIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXJJbXBsKG5vZGUpIHtcbiAgLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgdGhlIGZpcnN0IEhvc3RDb21wb25lbnQvVGV4dC5cbiAgdmFyIHRhZyA9IG5vZGUudGFnO1xuXG4gIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgKHRhZyA9PT0gSG9zdEhvaXN0YWJsZSApIHx8IHRhZyA9PT0gSG9zdFNpbmdsZXRvbiB8fCB0YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkO1xuXG4gIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgIHZhciBtYXRjaCA9IGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChjaGlsZCk7XG5cbiAgICBpZiAobWF0Y2ggIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9XG5cbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKHBhcmVudCkge1xuICB2YXIgY3VycmVudFBhcmVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKHBhcmVudCk7XG4gIHJldHVybiBjdXJyZW50UGFyZW50ICE9PSBudWxsID8gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzSW1wbChjdXJyZW50UGFyZW50KSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFsc0ltcGwobm9kZSkge1xuICAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuICB2YXIgdGFnID0gbm9kZS50YWc7XG5cbiAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCAodGFnID09PSBIb3N0SG9pc3RhYmxlICkgfHwgdGFnID09PSBIb3N0U2luZ2xldG9uIHx8IHRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgaWYgKGNoaWxkLnRhZyAhPT0gSG9zdFBvcnRhbCkge1xuICAgICAgdmFyIG1hdGNoID0gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzSW1wbChjaGlsZCk7XG5cbiAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9wcm9kLWVycm9yLWNvZGVzXG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dDtcblxue1xuICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQgPSB7fTtcbn1cblxudmFyIGVtcHR5Q29udGV4dE9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlDb250ZXh0T2JqZWN0KTtcbn0gLy8gQSBjdXJzb3IgdG8gdGhlIGN1cnJlbnQgbWVyZ2VkIGNvbnRleHQgb2JqZWN0IG9uIHRoZSBzdGFjay5cblxuXG52YXIgY29udGV4dFN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGVtcHR5Q29udGV4dE9iamVjdCk7IC8vIEEgY3Vyc29yIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGNvbnRleHQgaGFzIGNoYW5nZWQuXG5cbnZhciBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKGZhbHNlKTsgLy8gS2VlcCB0cmFjayBvZiB0aGUgcHJldmlvdXMgY29udGV4dCBvYmplY3QgdGhhdCB3YXMgb24gdGhlIHN0YWNrLlxuLy8gV2UgdXNlIHRoaXMgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcGFyZW50IGNvbnRleHQgYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5XG4vLyBwdXNoZWQgdGhlIG5leHQgY29udGV4dCBwcm92aWRlciwgYW5kIG5vdyBuZWVkIHRvIG1lcmdlIHRoZWlyIGNvbnRleHRzLlxuXG52YXIgcHJldmlvdXNDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG5mdW5jdGlvbiBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyKSB7XG4gIHtcbiAgICBpZiAoZGlkUHVzaE93bkNvbnRleHRJZlByb3ZpZGVyICYmIGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIC8vIElmIHRoZSBmaWJlciBpcyBhIGNvbnRleHQgcHJvdmlkZXIgaXRzZWxmLCB3aGVuIHdlIHJlYWQgaXRzIGNvbnRleHRcbiAgICAgIC8vIHdlIG1heSBoYXZlIGFscmVhZHkgcHVzaGVkIGl0cyBvd24gY2hpbGQgY29udGV4dCBvbiB0aGUgc3RhY2suIEEgY29udGV4dFxuICAgICAgLy8gcHJvdmlkZXIgc2hvdWxkIG5vdCBcInNlZVwiIGl0cyBvd24gY2hpbGQgY29udGV4dC4gVGhlcmVmb3JlIHdlIHJlYWQgdGhlXG4gICAgICAvLyBwcmV2aW91cyAocGFyZW50KSBjb250ZXh0IGluc3RlYWQgZm9yIGEgY29udGV4dCBwcm92aWRlci5cbiAgICAgIHJldHVybiBwcmV2aW91c0NvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBtYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dCA9IG1hc2tlZENvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IHR5cGUuY29udGV4dFR5cGVzO1xuXG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgfSAvLyBBdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyB1bm1hc2tlZCBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuICAgIC8vIEZhaWxpbmcgdG8gZG8gdGhpcyB3aWxsIHJlc3VsdCBpbiB1bm5lY2Vzc2FyeSBjYWxscyB0byBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLlxuICAgIC8vIFRoaXMgbWF5IHRyaWdnZXIgaW5maW5pdGUgbG9vcHMgaWYgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBjYWxscyBzZXRTdGF0ZS5cblxuXG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPT09IHVubWFza2VkQ29udGV4dCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjb250ZXh0ID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gY29udGV4dFR5cGVzKSB7XG4gICAgICBjb250ZXh0W2tleV0gPSB1bm1hc2tlZENvbnRleHRba2V5XTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8ICdVbmtub3duJztcbiAgICAgIGNoZWNrUHJvcFR5cGVzKGNvbnRleHRUeXBlcywgY29udGV4dCwgJ2NvbnRleHQnLCBuYW1lKTtcbiAgICB9IC8vIENhY2hlIHVubWFza2VkIGNvbnRleHQgc28gd2UgY2FuIGF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS5cbiAgICAvLyBDb250ZXh0IGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBjbGFzcyBjb21wb25lbnQgaXMgaW5zdGFudGlhdGVkIHNvIGNoZWNrIGZvciBpbnN0YW5jZS5cblxuXG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzQ29udGV4dENoYW5nZWQoKSB7XG4gIHtcbiAgICByZXR1cm4gZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKHR5cGUpIHtcbiAge1xuICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG4gICAgcmV0dXJuIGNoaWxkQ29udGV4dFR5cGVzICE9PSBudWxsICYmIGNoaWxkQ29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wQ29udGV4dChmaWJlcikge1xuICB7XG4gICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyKSB7XG4gIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyLCBjb250ZXh0LCBkaWRDaGFuZ2UpIHtcbiAge1xuICAgIGlmIChjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCAhPT0gZW1wdHlDb250ZXh0T2JqZWN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgY29udGV4dCBmb3VuZCBvbiBzdGFjay4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cblxuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBjb250ZXh0LCBmaWJlcik7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCB0eXBlLCBwYXJlbnRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlczsgLy8gVE9ETyAoYnZhdWdobikgUmVwbGFjZSB0aGlzIGJlaGF2aW9yIHdpdGggYW4gaW52YXJpYW50KCkgaW4gdGhlIGZ1dHVyZS5cbiAgICAvLyBJdCBoYXMgb25seSBiZWVuIGFkZGVkIGluIEZpYmVyIHRvIG1hdGNoIHRoZSAodW5pbnRlbnRpb25hbCkgYmVoYXZpb3IgaW4gU3RhY2suXG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8ICdVbmtub3duJztcblxuICAgICAgICBpZiAoIXdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignJXMuY2hpbGRDb250ZXh0VHlwZXMgaXMgc3BlY2lmaWVkIGJ1dCB0aGVyZSBpcyBubyBnZXRDaGlsZENvbnRleHQoKSBtZXRob2QgJyArICdvbiB0aGUgaW5zdGFuY2UuIFlvdSBjYW4gZWl0aGVyIGRlZmluZSBnZXRDaGlsZENvbnRleHQoKSBvbiAlcyBvciByZW1vdmUgJyArICdjaGlsZENvbnRleHRUeXBlcyBmcm9tIGl0LicsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJlbnRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjaGlsZENvbnRleHQgPSBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQoKTtcblxuICAgIGZvciAodmFyIGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0KSB7XG4gICAgICBpZiAoIShjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dFR5cGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8ICdVbmtub3duJykgKyBcIi5nZXRDaGlsZENvbnRleHQoKToga2V5IFxcXCJcIiArIGNvbnRleHRLZXkgKyBcIlxcXCIgaXMgbm90IGRlZmluZWQgaW4gY2hpbGRDb250ZXh0VHlwZXMuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgJ1Vua25vd24nO1xuICAgICAgY2hlY2tQcm9wVHlwZXMoY2hpbGRDb250ZXh0VHlwZXMsIGNoaWxkQ29udGV4dCwgJ2NoaWxkIGNvbnRleHQnLCBuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzaWduKHt9LCBwYXJlbnRDb250ZXh0LCBjaGlsZENvbnRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTsgLy8gV2UgcHVzaCB0aGUgY29udGV4dCBhcyBlYXJseSBhcyBwb3NzaWJsZSB0byBlbnN1cmUgc3RhY2sgaW50ZWdyaXR5LlxuICAgIC8vIElmIHRoZSBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIHdpbGwgcHVzaCBudWxsIGF0IGZpcnN0LFxuICAgIC8vIGFuZCByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayBsYXRlciB3aGVuIGludmFsaWRhdGluZyB0aGUgY29udGV4dC5cblxuICAgIHZhciBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCA9IGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0IHx8IGVtcHR5Q29udGV4dE9iamVjdDsgLy8gUmVtZW1iZXIgdGhlIHBhcmVudCBjb250ZXh0IHNvIHdlIGNhbiBtZXJnZSB3aXRoIGl0IGxhdGVyLlxuICAgIC8vIEluaGVyaXQgdGhlIHBhcmVudCdzIGRpZC1wZXJmb3JtLXdvcmsgdmFsdWUgdG8gYXZvaWQgaW5hZHZlcnRlbnRseSBibG9ja2luZyB1cGRhdGVzLlxuXG4gICAgcHJldmlvdXNDb250ZXh0ID0gY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCB0eXBlLCBkaWRDaGFuZ2UpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gaGF2ZSBhbiBpbnN0YW5jZSBieSB0aGlzIHBvaW50LiAnICsgJ1RoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuXG4gICAgaWYgKGRpZENoYW5nZSkge1xuICAgICAgLy8gTWVyZ2UgcGFyZW50IGFuZCBvd24gY29udGV4dC5cbiAgICAgIC8vIFNraXAgdGhpcyBpZiB3ZSdyZSBub3QgdXBkYXRpbmcgZHVlIHRvIHNDVS5cbiAgICAgIC8vIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJpbHkgcmVjb21wdXRpbmcgbWVtb2l6ZWQgdmFsdWVzLlxuICAgICAgdmFyIG1lcmdlZENvbnRleHQgPSBwcm9jZXNzQ2hpbGRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB0eXBlLCBwcmV2aW91c0NvbnRleHQpO1xuICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBtZXJnZWRDb250ZXh0OyAvLyBSZXBsYWNlIHRoZSBvbGQgKG9yIGVtcHR5KSBjb250ZXh0IHdpdGggdGhlIG5ldyBvbmUuXG4gICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gdW53aW5kIHRoZSBjb250ZXh0IGluIHRoZSByZXZlcnNlIG9yZGVyLlxuXG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpOyAvLyBOb3cgcHVzaCB0aGUgbmV3IGNvbnRleHQgYW5kIG1hcmsgdGhhdCBpdCBoYXMgY2hhbmdlZC5cblxuICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lcmdlZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcikge1xuICB7XG4gICAgLy8gQ3VycmVudGx5IHRoaXMgaXMgb25seSB1c2VkIHdpdGggcmVuZGVyU3VidHJlZUludG9Db250YWluZXI7IG5vdCBzdXJlIGlmIGl0XG4gICAgLy8gbWFrZXMgc2Vuc2UgZWxzZXdoZXJlXG4gICAgaWYgKCFpc0ZpYmVyTW91bnRlZChmaWJlcikgfHwgZmliZXIudGFnICE9PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBzdWJ0cmVlIHBhcmVudCB0byBiZSBhIG1vdW50ZWQgY2xhc3MgY29tcG9uZW50LiAnICsgJ1RoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIGRvIHtcbiAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuY29udGV4dDtcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSBub2RlLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSB3ZSBiYWlsIG91dCB3aGVuIHdlIGdldCBhIG51bGxcblxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSAhPT0gbnVsbCk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVuZXhwZWN0ZWQgZGV0YWNoZWQgc3VidHJlZSBwYXJlbnQuICcgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgfVxufVxuXG52YXIgTGVnYWN5Um9vdCA9IDA7XG52YXIgQ29uY3VycmVudFJvb3QgPSAxO1xuXG4vLyBXZSB1c2UgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgc3RhdGUgb2JqZWN0IGFzIGFuIGluZGljYXRvciB0aGF0IHRoZSBjb21wb25lbnRcbi8vIGlzIGhpZGRlbi5cbnZhciBPZmZzY3JlZW5WaXNpYmxlID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgT2Zmc2NyZWVuRGV0YWNoZWQgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yO1xudmFyIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkID1cbi8qICAgICAqL1xuNDtcbmZ1bmN0aW9uIGlzT2Zmc2NyZWVuTWFudWFsKG9mZnNjcmVlbkZpYmVyKSB7XG4gIHJldHVybiBvZmZzY3JlZW5GaWJlci5tZW1vaXplZFByb3BzICE9PSBudWxsICYmIG9mZnNjcmVlbkZpYmVyLm1lbW9pemVkUHJvcHMubW9kZSA9PT0gJ21hbnVhbCc7XG59XG5cbi8qKlxuICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gKi9cbmZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgcmV0dXJuIHggPT09IHkgJiYgKHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5KSB8fCB4ICE9PSB4ICYmIHkgIT09IHkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgO1xufVxuXG52YXIgb2JqZWN0SXMgPSAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG50eXBlb2YgT2JqZWN0LmlzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmlzIDogaXM7XG5cbi8vIFRoaXMgaXMgaW1wb3J0ZWQgYnkgdGhlIGV2ZW50IHJlcGxheWluZyBpbXBsZW1lbnRhdGlvbiBpbiBSZWFjdCBET00uIEl0J3Ncbi8vIGluIGEgc2VwYXJhdGUgZmlsZSB0byBicmVhayBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiB0aGUgcmVuZGVyZXIgYW5kXG4vLyB0aGUgcmVjb25jaWxlci5cbmZ1bmN0aW9uIGlzUm9vdERlaHlkcmF0ZWQocm9vdCkge1xuICB2YXIgY3VycmVudFN0YXRlID0gcm9vdC5jdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gIHJldHVybiBjdXJyZW50U3RhdGUuaXNEZWh5ZHJhdGVkO1xufVxuXG4vLyBJbnRlbnRpb25hbGx5IG5vdCB1c2luZyBpdCB5ZXQgdG8gZGVyaXNrIHRoZSBpbml0aWFsIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlXG4vLyB0aGUgd2F5IHdlIHB1c2gvcG9wIHRoZXNlIHZhbHVlcyBpcyBhIGJpdCB1bnVzdWFsLiBJZiB0aGVyZSdzIGEgbWlzdGFrZSwgSSdkXG4vLyByYXRoZXIgdGhlIGlkcyBiZSB3cm9uZyB0aGFuIGNyYXNoIHRoZSB3aG9sZSByZWNvbmNpbGVyLlxuXG52YXIgZm9ya1N0YWNrID0gW107XG52YXIgZm9ya1N0YWNrSW5kZXggPSAwO1xudmFyIHRyZWVGb3JrUHJvdmlkZXIgPSBudWxsO1xudmFyIHRyZWVGb3JrQ291bnQgPSAwO1xudmFyIGlkU3RhY2sgPSBbXTtcbnZhciBpZFN0YWNrSW5kZXggPSAwO1xudmFyIHRyZWVDb250ZXh0UHJvdmlkZXIgPSBudWxsO1xudmFyIHRyZWVDb250ZXh0SWQgPSAxO1xudmFyIHRyZWVDb250ZXh0T3ZlcmZsb3cgPSAnJztcbmZ1bmN0aW9uIGlzRm9ya2VkQ2hpbGQod29ya0luUHJvZ3Jlc3MpIHtcbiAgd2FybklmTm90SHlkcmF0aW5nKCk7XG4gIHJldHVybiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBGb3JrZWQpICE9PSBOb0ZsYWdzJDE7XG59XG5mdW5jdGlvbiBnZXRGb3Jrc0F0TGV2ZWwod29ya0luUHJvZ3Jlc3MpIHtcbiAgd2FybklmTm90SHlkcmF0aW5nKCk7XG4gIHJldHVybiB0cmVlRm9ya0NvdW50O1xufVxuZnVuY3Rpb24gZ2V0VHJlZUlkKCkge1xuICB2YXIgb3ZlcmZsb3cgPSB0cmVlQ29udGV4dE92ZXJmbG93O1xuICB2YXIgaWRXaXRoTGVhZGluZ0JpdCA9IHRyZWVDb250ZXh0SWQ7XG4gIHZhciBpZCA9IGlkV2l0aExlYWRpbmdCaXQgJiB+Z2V0TGVhZGluZ0JpdChpZFdpdGhMZWFkaW5nQml0KTtcbiAgcmV0dXJuIGlkLnRvU3RyaW5nKDMyKSArIG92ZXJmbG93O1xufVxuZnVuY3Rpb24gcHVzaFRyZWVGb3JrKHdvcmtJblByb2dyZXNzLCB0b3RhbENoaWxkcmVuKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIHJpZ2h0IGFmdGVyIHdlIHJlY29uY2lsZSBhbiBhcnJheSAob3IgaXRlcmF0b3IpIG9mIGNoaWxkXG4gIC8vIGZpYmVycywgYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHkgcGxhY2Ugd2hlcmUgd2Uga25vdyBob3cgbWFueSBjaGlsZHJlbiBpblxuICAvLyB0aGUgd2hvbGUgc2V0IHdpdGhvdXQgZG9pbmcgZXh0cmEgd29yayBsYXRlciwgb3Igc3RvcmluZyBhZGR0aW9uYWxcbiAgLy8gaW5mb3JtYXRpb24gb24gdGhlIGZpYmVyLlxuICAvL1xuICAvLyBUaGF0J3Mgd2h5IHRoaXMgZnVuY3Rpb24gaXMgc2VwYXJhdGUgZnJvbSBwdXNoVHJlZUlkIOKAlCBpdCdzIGNhbGxlZCBkdXJpbmdcbiAgLy8gdGhlIHJlbmRlciBwaGFzZSBvZiB0aGUgZm9yayBwYXJlbnQsIG5vdCB0aGUgY2hpbGQsIHdoaWNoIGlzIHdoZXJlIHdlIHB1c2hcbiAgLy8gdGhlIG90aGVyIGNvbnRleHQgdmFsdWVzLlxuICAvL1xuICAvLyBJbiB0aGUgRml6eiBpbXBsZW1lbnRhdGlvbiB0aGlzIGlzIG11Y2ggc2ltcGxlciBiZWNhdXNlIHRoZSBjaGlsZCBpc1xuICAvLyByZW5kZXJlZCBpbiB0aGUgc2FtZSBjYWxsc3RhY2sgYXMgdGhlIHBhcmVudC5cbiAgLy9cbiAgLy8gSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGp1c3QgYWRkIGEgYGZvcmtzYCBmaWVsZCB0byB0aGUgRmliZXIgdHlwZS4gSXQgd291bGRcbiAgLy8gbWFrZSB0aGlzIG1vZHVsZSBzaW1wbGVyLlxuICB3YXJuSWZOb3RIeWRyYXRpbmcoKTtcbiAgZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4KytdID0gdHJlZUZvcmtDb3VudDtcbiAgZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4KytdID0gdHJlZUZvcmtQcm92aWRlcjtcbiAgdHJlZUZvcmtQcm92aWRlciA9IHdvcmtJblByb2dyZXNzO1xuICB0cmVlRm9ya0NvdW50ID0gdG90YWxDaGlsZHJlbjtcbn1cbmZ1bmN0aW9uIHB1c2hUcmVlSWQod29ya0luUHJvZ3Jlc3MsIHRvdGFsQ2hpbGRyZW4sIGluZGV4KSB7XG4gIHdhcm5JZk5vdEh5ZHJhdGluZygpO1xuICBpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0SWQ7XG4gIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRPdmVyZmxvdztcbiAgaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dFByb3ZpZGVyO1xuICB0cmVlQ29udGV4dFByb3ZpZGVyID0gd29ya0luUHJvZ3Jlc3M7XG4gIHZhciBiYXNlSWRXaXRoTGVhZGluZ0JpdCA9IHRyZWVDb250ZXh0SWQ7XG4gIHZhciBiYXNlT3ZlcmZsb3cgPSB0cmVlQ29udGV4dE92ZXJmbG93OyAvLyBUaGUgbGVmdG1vc3QgMSBtYXJrcyB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZSwgbm9uLWluY2x1c2l2ZS4gSXQncyBub3QgcGFydFxuICAvLyBvZiB0aGUgaWQ7IHdlIHVzZSBpdCB0byBhY2NvdW50IGZvciBsZWFkaW5nIDBzLlxuXG4gIHZhciBiYXNlTGVuZ3RoID0gZ2V0Qml0TGVuZ3RoKGJhc2VJZFdpdGhMZWFkaW5nQml0KSAtIDE7XG4gIHZhciBiYXNlSWQgPSBiYXNlSWRXaXRoTGVhZGluZ0JpdCAmIH4oMSA8PCBiYXNlTGVuZ3RoKTtcbiAgdmFyIHNsb3QgPSBpbmRleCArIDE7XG4gIHZhciBsZW5ndGggPSBnZXRCaXRMZW5ndGgodG90YWxDaGlsZHJlbikgKyBiYXNlTGVuZ3RoOyAvLyAzMCBpcyB0aGUgbWF4IGxlbmd0aCB3ZSBjYW4gc3RvcmUgd2l0aG91dCBvdmVyZmxvd2luZywgdGFraW5nIGludG9cbiAgLy8gY29uc2lkZXJhdGlvbiB0aGUgbGVhZGluZyAxIHdlIHVzZSB0byBtYXJrIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlLlxuXG4gIGlmIChsZW5ndGggPiAzMCkge1xuICAgIC8vIFdlIG92ZXJmbG93ZWQgdGhlIGJpdHdpc2Utc2FmZSByYW5nZS4gRmFsbCBiYWNrIHRvIHNsb3dlciBhbGdvcml0aG0uXG4gICAgLy8gVGhpcyBicmFuY2ggYXNzdW1lcyB0aGUgbGVuZ3RoIG9mIHRoZSBiYXNlIGlkIGlzIGdyZWF0ZXIgdGhhbiA1OyBpdCB3b24ndFxuICAgIC8vIHdvcmsgZm9yIHNtYWxsZXIgaWRzLCBiZWNhdXNlIHlvdSBuZWVkIDUgYml0cyBwZXIgY2hhcmFjdGVyLlxuICAgIC8vXG4gICAgLy8gV2UgZW5jb2RlIHRoZSBpZCBpbiBtdWx0aXBsZSBzdGVwczogZmlyc3QgdGhlIGJhc2UgaWQsIHRoZW4gdGhlXG4gICAgLy8gcmVtYWluaW5nIGRpZ2l0cy5cbiAgICAvL1xuICAgIC8vIEVhY2ggNSBiaXQgc2VxdWVuY2UgY29ycmVzcG9uZHMgdG8gYSBzaW5nbGUgYmFzZSAzMiBjaGFyYWN0ZXIuIFNvIGZvclxuICAgIC8vIGV4YW1wbGUsIGlmIHRoZSBjdXJyZW50IGlkIGlzIDIzIGJpdHMgbG9uZywgd2UgY2FuIGNvbnZlcnQgMjAgb2YgdGhvc2VcbiAgICAvLyBiaXRzIGludG8gYSBzdHJpbmcgb2YgNCBjaGFyYWN0ZXJzLCB3aXRoIDMgYml0cyBsZWZ0IG92ZXIuXG4gICAgLy9cbiAgICAvLyBGaXJzdCBjYWxjdWxhdGUgaG93IG1hbnkgYml0cyBpbiB0aGUgYmFzZSBpZCByZXByZXNlbnQgYSBjb21wbGV0ZVxuICAgIC8vIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMuXG4gICAgdmFyIG51bWJlck9mT3ZlcmZsb3dCaXRzID0gYmFzZUxlbmd0aCAtIGJhc2VMZW5ndGggJSA1OyAvLyBUaGVuIGNyZWF0ZSBhIGJpdG1hc2sgdGhhdCBzZWxlY3RzIG9ubHkgdGhvc2UgYml0cy5cblxuICAgIHZhciBuZXdPdmVyZmxvd0JpdHMgPSAoMSA8PCBudW1iZXJPZk92ZXJmbG93Qml0cykgLSAxOyAvLyBTZWxlY3QgdGhlIGJpdHMsIGFuZCBjb252ZXJ0IHRoZW0gdG8gYSBiYXNlIDMyIHN0cmluZy5cblxuICAgIHZhciBuZXdPdmVyZmxvdyA9IChiYXNlSWQgJiBuZXdPdmVyZmxvd0JpdHMpLnRvU3RyaW5nKDMyKTsgLy8gTm93IHdlIGNhbiByZW1vdmUgdGhvc2UgYml0cyBmcm9tIHRoZSBiYXNlIGlkLlxuXG4gICAgdmFyIHJlc3RPZkJhc2VJZCA9IGJhc2VJZCA+PiBudW1iZXJPZk92ZXJmbG93Qml0cztcbiAgICB2YXIgcmVzdE9mQmFzZUxlbmd0aCA9IGJhc2VMZW5ndGggLSBudW1iZXJPZk92ZXJmbG93Qml0czsgLy8gRmluYWxseSwgZW5jb2RlIHRoZSByZXN0IG9mIHRoZSBiaXRzIHVzaW5nIHRoZSBub3JtYWwgYWxnb3JpdGhtLiBCZWNhdXNlXG4gICAgLy8gd2UgbWFkZSBtb3JlIHJvb20sIHRoaXMgdGltZSBpdCB3b24ndCBvdmVyZmxvdy5cblxuICAgIHZhciByZXN0T2ZMZW5ndGggPSBnZXRCaXRMZW5ndGgodG90YWxDaGlsZHJlbikgKyByZXN0T2ZCYXNlTGVuZ3RoO1xuICAgIHZhciByZXN0T2ZOZXdCaXRzID0gc2xvdCA8PCByZXN0T2ZCYXNlTGVuZ3RoO1xuICAgIHZhciBpZCA9IHJlc3RPZk5ld0JpdHMgfCByZXN0T2ZCYXNlSWQ7XG4gICAgdmFyIG92ZXJmbG93ID0gbmV3T3ZlcmZsb3cgKyBiYXNlT3ZlcmZsb3c7XG4gICAgdHJlZUNvbnRleHRJZCA9IDEgPDwgcmVzdE9mTGVuZ3RoIHwgaWQ7XG4gICAgdHJlZUNvbnRleHRPdmVyZmxvdyA9IG92ZXJmbG93O1xuICB9IGVsc2Uge1xuICAgIC8vIE5vcm1hbCBwYXRoXG4gICAgdmFyIG5ld0JpdHMgPSBzbG90IDw8IGJhc2VMZW5ndGg7XG5cbiAgICB2YXIgX2lkID0gbmV3Qml0cyB8IGJhc2VJZDtcblxuICAgIHZhciBfb3ZlcmZsb3cgPSBiYXNlT3ZlcmZsb3c7XG4gICAgdHJlZUNvbnRleHRJZCA9IDEgPDwgbGVuZ3RoIHwgX2lkO1xuICAgIHRyZWVDb250ZXh0T3ZlcmZsb3cgPSBfb3ZlcmZsb3c7XG4gIH1cbn1cbmZ1bmN0aW9uIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpIHtcbiAgd2FybklmTm90SHlkcmF0aW5nKCk7IC8vIFRoaXMgY29tcG9uZW50IG1hdGVyaWFsaXplZCBhbiBpZC4gVGhpcyB3aWxsIGFmZmVjdCBhbnkgaWRzIHRoYXQgYXBwZWFyXG4gIC8vIGluIGl0cyBjaGlsZHJlbi5cblxuICB2YXIgcmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgdmFyIG51bWJlck9mRm9ya3MgPSAxO1xuICAgIHZhciBzbG90SW5kZXggPSAwO1xuICAgIHB1c2hUcmVlRm9yayh3b3JrSW5Qcm9ncmVzcywgbnVtYmVyT2ZGb3Jrcyk7XG4gICAgcHVzaFRyZWVJZCh3b3JrSW5Qcm9ncmVzcywgbnVtYmVyT2ZGb3Jrcywgc2xvdEluZGV4KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRCaXRMZW5ndGgobnVtYmVyKSB7XG4gIHJldHVybiAzMiAtIGNsejMyKG51bWJlcik7XG59XG5cbmZ1bmN0aW9uIGdldExlYWRpbmdCaXQoaWQpIHtcbiAgcmV0dXJuIDEgPDwgZ2V0Qml0TGVuZ3RoKGlkKSAtIDE7XG59XG5cbmZ1bmN0aW9uIHBvcFRyZWVDb250ZXh0KHdvcmtJblByb2dyZXNzKSB7XG4gIC8vIFJlc3RvcmUgdGhlIHByZXZpb3VzIHZhbHVlcy5cbiAgLy8gVGhpcyBpcyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gb3RoZXIgY29udGV4dC1saWtlIG1vZHVsZXMgaW4gRmliZXJcbiAgLy8gYmVjYXVzZSB0aGUgc2FtZSBGaWJlciBtYXkgYXBwZWFyIG9uIHRoZSBzdGFjayBtdWx0aXBsZSB0aW1lcyBhbmQgZm9yXG4gIC8vIGRpZmZlcmVudCByZWFzb25zLiBXZSBoYXZlIHRvIGtlZXAgcG9wcGluZyB1bnRpbCB0aGUgd29yay1pbi1wcm9ncmVzcyBpc1xuICAvLyBubyBsb25nZXIgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyA9PT0gdHJlZUZvcmtQcm92aWRlcikge1xuICAgIHRyZWVGb3JrUHJvdmlkZXIgPSBmb3JrU3RhY2tbLS1mb3JrU3RhY2tJbmRleF07XG4gICAgZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4XSA9IG51bGw7XG4gICAgdHJlZUZvcmtDb3VudCA9IGZvcmtTdGFja1stLWZvcmtTdGFja0luZGV4XTtcbiAgICBmb3JrU3RhY2tbZm9ya1N0YWNrSW5kZXhdID0gbnVsbDtcbiAgfVxuXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyA9PT0gdHJlZUNvbnRleHRQcm92aWRlcikge1xuICAgIHRyZWVDb250ZXh0UHJvdmlkZXIgPSBpZFN0YWNrWy0taWRTdGFja0luZGV4XTtcbiAgICBpZFN0YWNrW2lkU3RhY2tJbmRleF0gPSBudWxsO1xuICAgIHRyZWVDb250ZXh0T3ZlcmZsb3cgPSBpZFN0YWNrWy0taWRTdGFja0luZGV4XTtcbiAgICBpZFN0YWNrW2lkU3RhY2tJbmRleF0gPSBudWxsO1xuICAgIHRyZWVDb250ZXh0SWQgPSBpZFN0YWNrWy0taWRTdGFja0luZGV4XTtcbiAgICBpZFN0YWNrW2lkU3RhY2tJbmRleF0gPSBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBnZXRTdXNwZW5kZWRUcmVlQ29udGV4dCgpIHtcbiAgd2FybklmTm90SHlkcmF0aW5nKCk7XG5cbiAgaWYgKHRyZWVDb250ZXh0UHJvdmlkZXIgIT09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRyZWVDb250ZXh0SWQsXG4gICAgICBvdmVyZmxvdzogdHJlZUNvbnRleHRPdmVyZmxvd1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVTdXNwZW5kZWRUcmVlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuZGVkQ29udGV4dCkge1xuICB3YXJuSWZOb3RIeWRyYXRpbmcoKTtcbiAgaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dElkO1xuICBpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0T3ZlcmZsb3c7XG4gIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRQcm92aWRlcjtcbiAgdHJlZUNvbnRleHRJZCA9IHN1c3BlbmRlZENvbnRleHQuaWQ7XG4gIHRyZWVDb250ZXh0T3ZlcmZsb3cgPSBzdXNwZW5kZWRDb250ZXh0Lm92ZXJmbG93O1xuICB0cmVlQ29udGV4dFByb3ZpZGVyID0gd29ya0luUHJvZ3Jlc3M7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZk5vdEh5ZHJhdGluZygpIHtcbiAge1xuICAgIGlmICghZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHRvIGJlIGh5ZHJhdGluZy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgJyArICdhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBtYXkgaGF2ZSBiZWVuIGFuIGluc2VydGlvbiBvciBhIGh5ZHJhdGlvbi5cblxudmFyIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbnZhciBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbnZhciBpc0h5ZHJhdGluZyA9IGZhbHNlOyAvLyBUaGlzIGZsYWcgYWxsb3dzIGZvciB3YXJuaW5nIHN1cHJlc3Npb24gd2hlbiB3ZSBleHBlY3QgdGhlcmUgdG8gYmUgbWlzbWF0Y2hlc1xuLy8gZHVlIHRvIGVhcmxpZXIgbWlzbWF0Y2hlcyBvciBhIHN1c3BlbmRlZCBmaWJlci5cblxudmFyIGRpZFN1c3BlbmRPckVycm9yREVWID0gZmFsc2U7IC8vIEh5ZHJhdGlvbiBlcnJvcnMgdGhhdCB3ZXJlIHRocm93biBpbnNpZGUgdGhpcyBib3VuZGFyeVxuXG52YXIgaHlkcmF0aW9uRXJyb3JzID0gbnVsbDtcbnZhciByb290T3JTaW5nbGV0b25Db250ZXh0ID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHdhcm5JZkh5ZHJhdGluZygpIHtcbiAge1xuICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgZXJyb3IoJ1dlIHNob3VsZCBub3QgYmUgaHlkcmF0aW5nIGhlcmUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGEgYnVnLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrRGlkVGhyb3dXaGlsZUh5ZHJhdGluZ0RFVigpIHtcbiAge1xuICAgIGRpZFN1c3BlbmRPckVycm9yREVWID0gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkU3VzcGVuZE9yRXJyb3JXaGlsZUh5ZHJhdGluZ0RFVigpIHtcbiAge1xuICAgIHJldHVybiBkaWRTdXNwZW5kT3JFcnJvckRFVjtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnRlckh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG5cbiAgdmFyIHBhcmVudEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZFdpdGhpbkNvbnRhaW5lcihwYXJlbnRJbnN0YW5jZSk7XG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgaHlkcmF0aW9uRXJyb3JzID0gbnVsbDtcbiAgZGlkU3VzcGVuZE9yRXJyb3JERVYgPSBmYWxzZTtcbiAgcm9vdE9yU2luZ2xldG9uQ29udGV4dCA9IHRydWU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZWVudGVySHlkcmF0aW9uU3RhdGVGcm9tRGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIsIHN1c3BlbnNlSW5zdGFuY2UsIHRyZWVDb250ZXh0KSB7XG5cbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkV2l0aGluU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICBoeWRyYXRpb25FcnJvcnMgPSBudWxsO1xuICBkaWRTdXNwZW5kT3JFcnJvckRFViA9IGZhbHNlO1xuICByb290T3JTaW5nbGV0b25Db250ZXh0ID0gZmFsc2U7XG5cbiAgaWYgKHRyZWVDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgcmVzdG9yZVN1c3BlbmRlZFRyZWVDb250ZXh0KGZpYmVyLCB0cmVlQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gd2FyblVuaHlkcmF0ZWRJbnN0YW5jZShyZXR1cm5GaWJlciwgaW5zdGFuY2UpIHtcbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgZGlkTm90SHlkcmF0ZUluc3RhbmNlV2l0aGluQ29udGFpbmVyKHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLCBpbnN0YW5jZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGlzQ29uY3VycmVudE1vZGUgPSAocmV0dXJuRmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlO1xuICAgICAgICAgIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZShyZXR1cm5GaWJlci50eXBlLCByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzLCByZXR1cm5GaWJlci5zdGF0ZU5vZGUsIGluc3RhbmNlLCAvLyBUT0RPOiBEZWxldGUgdGhpcyBhcmd1bWVudCB3aGVuIHdlIHJlbW92ZSB0aGUgbGVnYWN5IHJvb3QgQVBJLlxuICAgICAgICAgIGlzQ29uY3VycmVudE1vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IHJldHVybkZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkgZGlkTm90SHlkcmF0ZUluc3RhbmNlV2l0aGluU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQsIGluc3RhbmNlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UocmV0dXJuRmliZXIsIGluc3RhbmNlKSB7XG4gIHdhcm5Vbmh5ZHJhdGVkSW5zdGFuY2UocmV0dXJuRmliZXIsIGluc3RhbmNlKTtcbiAgdmFyIGNoaWxkVG9EZWxldGUgPSBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpO1xuICBjaGlsZFRvRGVsZXRlLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICBjaGlsZFRvRGVsZXRlLnJldHVybiA9IHJldHVybkZpYmVyO1xuICB2YXIgZGVsZXRpb25zID0gcmV0dXJuRmliZXIuZGVsZXRpb25zO1xuXG4gIGlmIChkZWxldGlvbnMgPT09IG51bGwpIHtcbiAgICByZXR1cm5GaWJlci5kZWxldGlvbnMgPSBbY2hpbGRUb0RlbGV0ZV07XG4gICAgcmV0dXJuRmliZXIuZmxhZ3MgfD0gQ2hpbGREZWxldGlvbjtcbiAgfSBlbHNlIHtcbiAgICBkZWxldGlvbnMucHVzaChjaGlsZFRvRGVsZXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9uaHlkcmF0ZWRJbnN0YW5jZShyZXR1cm5GaWJlciwgZmliZXIpIHtcbiAge1xuICAgIGlmIChkaWRTdXNwZW5kT3JFcnJvckRFVikge1xuICAgICAgLy8gSW5zaWRlIGEgYm91bmRhcnkgdGhhdCBhbHJlYWR5IHN1c3BlbmRlZC4gV2UncmUgY3VycmVudGx5IHJlbmRlcmluZyB0aGVcbiAgICAgIC8vIHNpYmxpbmdzIG9mIGEgc3VzcGVuZGVkIG5vZGUuIFRoZSBtaXNtYXRjaCBtYXkgYmUgZHVlIHRvIHRoZSBtaXNzaW5nXG4gICAgICAvLyBkYXRhLCBzbyBpdCdzIHByb2JhYmx5IGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2VXaXRoaW5Db250YWluZXIocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZVdpdGhpbkNvbnRhaW5lcihwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICB2YXIgcGFyZW50SW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF90eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgICAgICAgICB2YXIgX3Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICAgIHZhciBpc0NvbmN1cnJlbnRNb2RlID0gKHJldHVybkZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTW9kZTtcbiAgICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3R5cGUsIF9wcm9wcywgLy8gVE9ETzogRGVsZXRlIHRoaXMgYXJndW1lbnQgd2hlbiB3ZSByZW1vdmUgdGhlIGxlZ2FjeSByb290IEFQSS5cbiAgICAgICAgICAgICAgICBpc0NvbmN1cnJlbnRNb2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF90ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9pc0NvbmN1cnJlbnRNb2RlID0gKHJldHVybkZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTW9kZTtcblxuICAgICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3RleHQsIC8vIFRPRE86IERlbGV0ZSB0aGlzIGFyZ3VtZW50IHdoZW4gd2UgcmVtb3ZlIHRoZSBsZWdhY3kgcm9vdCBBUEkuXG4gICAgICAgICAgICAgICAgX2lzQ29uY3VycmVudE1vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gcmV0dXJuRmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgX3BhcmVudEluc3RhbmNlID0gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkO1xuICAgICAgICAgIGlmIChfcGFyZW50SW5zdGFuY2UgIT09IG51bGwpIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgIHZhciBfdHlwZTIgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlV2l0aGluU3VzcGVuc2VJbnN0YW5jZShfcGFyZW50SW5zdGFuY2UsIF90eXBlMik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgX3RleHQyID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZVdpdGhpblN1c3BlbnNlSW5zdGFuY2UoX3BhcmVudEluc3RhbmNlLCBfdGV4dDIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKHJldHVybkZpYmVyLCBmaWJlcikge1xuICBmaWJlci5mbGFncyA9IGZpYmVyLmZsYWdzICYgfkh5ZHJhdGluZyB8IFBsYWNlbWVudDtcbiAgd2Fybk5vbmh5ZHJhdGVkSW5zdGFuY2UocmV0dXJuRmliZXIsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gdHJ5SHlkcmF0ZUluc3RhbmNlKGZpYmVyLCBuZXh0SW5zdGFuY2UpIHtcbiAgLy8gZmliZXIgaXMgYSBIb3N0Q29tcG9uZW50IEZpYmVyXG4gIHZhciBpbnN0YW5jZSA9IGNhbkh5ZHJhdGVJbnN0YW5jZShuZXh0SW5zdGFuY2UsIGZpYmVyLnR5cGUsIGZpYmVyLnBlbmRpbmdQcm9wcywgcm9vdE9yU2luZ2xldG9uQ29udGV4dCk7XG5cbiAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgZmliZXIuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQoaW5zdGFuY2UpO1xuICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHJ5SHlkcmF0ZVRleHQoZmliZXIsIG5leHRJbnN0YW5jZSkge1xuICAvLyBmaWJlciBpcyBhIEhvc3RUZXh0IEZpYmVyXG4gIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICB2YXIgdGV4dEluc3RhbmNlID0gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShuZXh0SW5zdGFuY2UsIHRleHQsIHJvb3RPclNpbmdsZXRvbkNvbnRleHQpO1xuXG4gIGlmICh0ZXh0SW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICBmaWJlci5zdGF0ZU5vZGUgPSB0ZXh0SW5zdGFuY2U7XG4gICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjsgLy8gVGV4dCBJbnN0YW5jZXMgZG9uJ3QgaGF2ZSBjaGlsZHJlbiBzbyB0aGVyZSdzIG5vdGhpbmcgdG8gaHlkcmF0ZS5cblxuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB0cnlIeWRyYXRlU3VzcGVuc2UoZmliZXIsIG5leHRJbnN0YW5jZSkge1xuICAvLyBmaWJlciBpcyBhIFN1c3BlbnNlQ29tcG9uZW50IEZpYmVyXG4gIHZhciBzdXNwZW5zZUluc3RhbmNlID0gY2FuSHlkcmF0ZVN1c3BlbnNlSW5zdGFuY2UobmV4dEluc3RhbmNlLCByb290T3JTaW5nbGV0b25Db250ZXh0KTtcblxuICBpZiAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0ge1xuICAgICAgZGVoeWRyYXRlZDogc3VzcGVuc2VJbnN0YW5jZSxcbiAgICAgIHRyZWVDb250ZXh0OiBnZXRTdXNwZW5kZWRUcmVlQ29udGV4dCgpLFxuICAgICAgcmV0cnlMYW5lOiBPZmZzY3JlZW5MYW5lXG4gICAgfTtcbiAgICBmaWJlci5tZW1vaXplZFN0YXRlID0gc3VzcGVuc2VTdGF0ZTsgLy8gU3RvcmUgdGhlIGRlaHlkcmF0ZWQgZnJhZ21lbnQgYXMgYSBjaGlsZCBmaWJlci5cbiAgICAvLyBUaGlzIHNpbXBsaWZpZXMgdGhlIGNvZGUgZm9yIGdldEhvc3RTaWJsaW5nIGFuZCBkZWxldGluZyBub2RlcyxcbiAgICAvLyBzaW5jZSBpdCBkb2Vzbid0IGhhdmUgdG8gY29uc2lkZXIgYWxsIFN1c3BlbnNlIGJvdW5kYXJpZXMgYW5kXG4gICAgLy8gY2hlY2sgaWYgdGhleSdyZSBkZWh5ZHJhdGVkIG9uZXMgb3Igbm90LlxuXG4gICAgdmFyIGRlaHlkcmF0ZWRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbURlaHlkcmF0ZWRGcmFnbWVudChzdXNwZW5zZUluc3RhbmNlKTtcbiAgICBkZWh5ZHJhdGVkRnJhZ21lbnQucmV0dXJuID0gZmliZXI7XG4gICAgZmliZXIuY2hpbGQgPSBkZWh5ZHJhdGVkRnJhZ21lbnQ7XG4gICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjsgLy8gV2hpbGUgYSBTdXNwZW5zZSBJbnN0YW5jZSBkb2VzIGhhdmUgY2hpbGRyZW4sIHdlIHdvbid0IHN0ZXAgaW50b1xuICAgIC8vIGl0IGR1cmluZyB0aGUgZmlyc3QgcGFzcy4gSW5zdGVhZCwgd2UnbGwgcmVlbnRlciBpdCBsYXRlci5cblxuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBzaG91bGRDbGllbnRSZW5kZXJPbk1pc21hdGNoKGZpYmVyKSB7XG4gIHJldHVybiAoZmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlICYmIChmaWJlci5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzJDE7XG59XG5cbmZ1bmN0aW9uIHRocm93T25IeWRyYXRpb25NaXNtYXRjaChmaWJlcikge1xuICB0aHJvdyBuZXcgRXJyb3IoJ0h5ZHJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgaW5pdGlhbCBVSSBkb2VzIG5vdCBtYXRjaCB3aGF0IHdhcyAnICsgJ3JlbmRlcmVkIG9uIHRoZSBzZXJ2ZXIuJyk7XG59XG5cbmZ1bmN0aW9uIGNsYWltSHlkcmF0YWJsZVNpbmdsZXRvbihmaWJlcikge1xuICB7XG4gICAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjdXJyZW50Um9vdENvbnRhaW5lciA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7XG4gICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlID0gcmVzb2x2ZVNpbmdsZXRvbkluc3RhbmNlKGZpYmVyLnR5cGUsIGZpYmVyLnBlbmRpbmdQcm9wcywgY3VycmVudFJvb3RDb250YWluZXIsIGN1cnJlbnRIb3N0Q29udGV4dCwgZmFsc2UpO1xuICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dCA9IHRydWU7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldEZpcnN0SHlkcmF0YWJsZUNoaWxkKGluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZShmaWJlcikge1xuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGluaXRpYWxJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG4gIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gIGlmICghbmV4dEluc3RhbmNlKSB7XG4gICAgaWYgKHNob3VsZENsaWVudFJlbmRlck9uTWlzbWF0Y2goZmliZXIpKSB7XG4gICAgICB3YXJuTm9uaHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKCk7XG4gICAgfSAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuXG5cbiAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBpbml0aWFsSW5zdGFuY2U7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UgPSBuZXh0SW5zdGFuY2U7XG5cbiAgaWYgKCF0cnlIeWRyYXRlSW5zdGFuY2UoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICBpZiAoc2hvdWxkQ2xpZW50UmVuZGVyT25NaXNtYXRjaChmaWJlcikpIHtcbiAgICAgIHdhcm5Ob25oeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goKTtcbiAgICB9IC8vIElmIHdlIGNhbid0IGh5ZHJhdGUgdGhpcyBpbnN0YW5jZSBsZXQncyB0cnkgdGhlIG5leHQgb25lLlxuICAgIC8vIFdlIHVzZSB0aGlzIGFzIGEgaGV1cmlzdGljLiBJdCdzIGJhc2VkIG9uIGludHVpdGlvbiBhbmQgbm90IGRhdGEgc28gaXRcbiAgICAvLyBtaWdodCBiZSBmbGF3ZWQgb3IgdW5uZWNlc3NhcnkuXG5cblxuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobmV4dEluc3RhbmNlKTtcbiAgICB2YXIgcHJldkh5ZHJhdGlvblBhcmVudEZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXI7XG5cbiAgICBpZiAoIW5leHRIeWRyYXRhYmxlSW5zdGFuY2UgfHwgIXRyeUh5ZHJhdGVJbnN0YW5jZShmaWJlciwgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSkpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBpbml0aWFsSW5zdGFuY2U7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBtYXRjaGVkIHRoZSBuZXh0IG9uZSwgd2UnbGwgbm93IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBvbmUgd2FzXG4gICAgLy8gc3VwZXJmbHVvdXMgYW5kIHdlJ2xsIGRlbGV0ZSBpdC4gU2luY2Ugd2UgY2FuJ3QgZWFnZXJseSBkZWxldGUgaXRcbiAgICAvLyB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGEgZGVsZXRpb24uIFRvIGRvIHRoYXQsIHRoaXMgbm9kZSBuZWVkcyBhIGR1bW15XG4gICAgLy8gZmliZXIgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UocHJldkh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UoZmliZXIpIHtcbiAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICB2YXIgaXNIeWRyYXRhYmxlID0gaXNIeWRyYXRhYmxlVGV4dCh0ZXh0KTtcbiAgdmFyIGluaXRpYWxJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG4gIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gIGlmICghbmV4dEluc3RhbmNlIHx8ICFpc0h5ZHJhdGFibGUpIHtcbiAgICAvLyBXZSBleGNsdWRlIG5vbiBoeWRyYWJhYmxlIHRleHQgYmVjYXVzZSB3ZSBrbm93IHRoZXJlIGFyZSBubyBtYXRjaGluZyBoeWRyYXRhYmxlcy5cbiAgICAvLyBXZSBlaXRoZXIgdGhyb3cgb3IgaW5zZXJ0IGRlcGVuZGluZyBvbiB0aGUgcmVuZGVyIG1vZGUuXG4gICAgaWYgKHNob3VsZENsaWVudFJlbmRlck9uTWlzbWF0Y2goZmliZXIpKSB7XG4gICAgICB3YXJuTm9uaHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKCk7XG4gICAgfSAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuXG5cbiAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBpbml0aWFsSW5zdGFuY2U7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UgPSBuZXh0SW5zdGFuY2U7XG5cbiAgaWYgKCF0cnlIeWRyYXRlVGV4dChmaWJlciwgbmV4dEluc3RhbmNlKSkge1xuICAgIGlmIChzaG91bGRDbGllbnRSZW5kZXJPbk1pc21hdGNoKGZpYmVyKSkge1xuICAgICAgd2Fybk5vbmh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaCgpO1xuICAgIH0gLy8gSWYgd2UgY2FuJ3QgaHlkcmF0ZSB0aGlzIGluc3RhbmNlIGxldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgLy8gV2UgdXNlIHRoaXMgYXMgYSBoZXVyaXN0aWMuIEl0J3MgYmFzZWQgb24gaW50dWl0aW9uIGFuZCBub3QgZGF0YSBzbyBpdFxuICAgIC8vIG1pZ2h0IGJlIGZsYXdlZCBvciB1bm5lY2Vzc2FyeS5cblxuXG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhuZXh0SW5zdGFuY2UpO1xuICAgIHZhciBwcmV2SHlkcmF0aW9uUGFyZW50RmliZXIgPSBoeWRyYXRpb25QYXJlbnRGaWJlcjtcblxuICAgIGlmICghbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSB8fCAhdHJ5SHlkcmF0ZVRleHQoZmliZXIsIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UpKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaW5pdGlhbEluc3RhbmNlO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2UgbWF0Y2hlZCB0aGUgbmV4dCBvbmUsIHdlJ2xsIG5vdyBhc3N1bWUgdGhhdCB0aGUgZmlyc3Qgb25lIHdhc1xuICAgIC8vIHN1cGVyZmx1b3VzIGFuZCB3ZSdsbCBkZWxldGUgaXQuIFNpbmNlIHdlIGNhbid0IGVhZ2VybHkgZGVsZXRlIGl0XG4gICAgLy8gd2UnbGwgaGF2ZSB0byBzY2hlZHVsZSBhIGRlbGV0aW9uLiBUbyBkbyB0aGF0LCB0aGlzIG5vZGUgbmVlZHMgYSBkdW1teVxuICAgIC8vIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuXG4gICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKHByZXZIeWRyYXRpb25QYXJlbnRGaWJlciwgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZShmaWJlcikge1xuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGluaXRpYWxJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG4gIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gIGlmICghbmV4dEluc3RhbmNlKSB7XG4gICAgaWYgKHNob3VsZENsaWVudFJlbmRlck9uTWlzbWF0Y2goZmliZXIpKSB7XG4gICAgICB3YXJuTm9uaHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKCk7XG4gICAgfSAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuXG5cbiAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBpbml0aWFsSW5zdGFuY2U7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UgPSBuZXh0SW5zdGFuY2U7XG5cbiAgaWYgKCF0cnlIeWRyYXRlU3VzcGVuc2UoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICBpZiAoc2hvdWxkQ2xpZW50UmVuZGVyT25NaXNtYXRjaChmaWJlcikpIHtcbiAgICAgIHdhcm5Ob25oeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goKTtcbiAgICB9IC8vIElmIHdlIGNhbid0IGh5ZHJhdGUgdGhpcyBpbnN0YW5jZSBsZXQncyB0cnkgdGhlIG5leHQgb25lLlxuICAgIC8vIFdlIHVzZSB0aGlzIGFzIGEgaGV1cmlzdGljLiBJdCdzIGJhc2VkIG9uIGludHVpdGlvbiBhbmQgbm90IGRhdGEgc28gaXRcbiAgICAvLyBtaWdodCBiZSBmbGF3ZWQgb3IgdW5uZWNlc3NhcnkuXG5cblxuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobmV4dEluc3RhbmNlKTtcbiAgICB2YXIgcHJldkh5ZHJhdGlvblBhcmVudEZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXI7XG5cbiAgICBpZiAoIW5leHRIeWRyYXRhYmxlSW5zdGFuY2UgfHwgIXRyeUh5ZHJhdGVTdXNwZW5zZShmaWJlciwgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSkpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBpbml0aWFsSW5zdGFuY2U7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBtYXRjaGVkIHRoZSBuZXh0IG9uZSwgd2UnbGwgbm93IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBvbmUgd2FzXG4gICAgLy8gc3VwZXJmbHVvdXMgYW5kIHdlJ2xsIGRlbGV0ZSBpdC4gU2luY2Ugd2UgY2FuJ3QgZWFnZXJseSBkZWxldGUgaXRcbiAgICAvLyB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGEgZGVsZXRpb24uIFRvIGRvIHRoYXQsIHRoaXMgbm9kZSBuZWVkcyBhIGR1bW15XG4gICAgLy8gZmliZXIgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UocHJldkh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVGb3JtTWFya2VySW5zdGFuY2UoZmliZXIpIHtcbiAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSB7XG4gICAgdmFyIG1hcmtlckluc3RhbmNlID0gY2FuSHlkcmF0ZUZvcm1TdGF0ZU1hcmtlcihuZXh0SHlkcmF0YWJsZUluc3RhbmNlLCByb290T3JTaW5nbGV0b25Db250ZXh0KTtcblxuICAgIGlmIChtYXJrZXJJbnN0YW5jZSkge1xuICAgICAgLy8gRm91bmQgdGhlIG1hcmtlciBpbnN0YW5jZS5cbiAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobWFya2VySW5zdGFuY2UpOyAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIG1hcmtlciBpbnN0YW5jZSBzaG91bGQgdXNlIHRoZSBzdGF0ZSBwYXNzZWRcbiAgICAgIC8vIHRvIGh5ZHJhdGVSb290LlxuICAgICAgLy8gVE9ETzogQXMgYW4gb3B0aW1pemF0aW9uLCBGaXp6IHNob3VsZCBvbmx5IGVtaXQgdGhlc2UgbWFya2VycyBpZiBmb3JtXG4gICAgICAvLyBzdGF0ZSBpcyBwYXNzZWQgYXQgdGhlIHJvb3QuXG5cbiAgICAgIHJldHVybiBpc0Zvcm1TdGF0ZU1hcmtlck1hdGNoaW5nKG1hcmtlckluc3RhbmNlKTtcbiAgICB9XG4gIH0gLy8gU2hvdWxkIGhhdmUgZm91bmQgYSBtYXJrZXIgaW5zdGFuY2UuIFRocm93IGFuIGVycm9yIHRvIHRyaWdnZXIgY2xpZW50XG4gIC8vIHJlbmRlcmluZy4gV2UgZG9uJ3QgYm90aGVyIHRvIGNoZWNrIGlmIHdlJ3JlIGluIGEgY29uY3VycmVudCByb290IGJlY2F1c2VcbiAgLy8gdXNlRm9ybVN0YXRlIGlzIGEgbmV3IEFQSSwgc28gYmFja3dhcmRzIGNvbXBhdCBpcyBub3QgYW4gaXNzdWUuXG5cblxuICB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKGZpYmVyLCBob3N0Q29udGV4dCkge1xuXG4gIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIHNob3VsZFdhcm5JZk1pc21hdGNoRGV2ID0gIWRpZFN1c3BlbmRPckVycm9yREVWO1xuICBoeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIGZpYmVyLnR5cGUsIGZpYmVyLm1lbW9pemVkUHJvcHMsIGhvc3RDb250ZXh0LCBmaWJlciwgc2hvdWxkV2FybklmTWlzbWF0Y2hEZXYpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciB0ZXh0SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB0ZXh0Q29udGVudCA9IGZpYmVyLm1lbW9pemVkUHJvcHM7XG4gIHZhciBzaG91bGRXYXJuSWZNaXNtYXRjaERldiA9ICFkaWRTdXNwZW5kT3JFcnJvckRFVjtcbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCwgZmliZXIpO1xuXG4gIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAvLyBXZSBhc3N1bWUgdGhhdCBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSBpcyBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIHRoZVxuICAgIC8vIGh5ZHJhdGlvbiBwYXJlbnQgaXMgdGhlIHBhcmVudCBob3N0IGNvbXBvbmVudCBvZiB0aGlzIGhvc3QgdGV4dC5cbiAgICB2YXIgcmV0dXJuRmliZXIgPSBoeWRyYXRpb25QYXJlbnRGaWJlcjtcblxuICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICB2YXIgaXNDb25jdXJyZW50TW9kZSA9IChyZXR1cm5GaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGU7XG4gICAgICAgICAgICBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCwgLy8gVE9ETzogRGVsZXRlIHRoaXMgYXJndW1lbnQgd2hlbiB3ZSByZW1vdmUgdGhlIGxlZ2FjeSByb290IEFQSS5cbiAgICAgICAgICAgIGlzQ29uY3VycmVudE1vZGUsIHNob3VsZFdhcm5JZk1pc21hdGNoRGV2KTtcblxuICAgICAgICAgICAgaWYgKGlzQ29uY3VycmVudE1vZGUgJiYgZW5hYmxlQ2xpZW50UmVuZGVyRmFsbGJhY2tPblRleHRNaXNtYXRjaCkge1xuICAgICAgICAgICAgICAvLyBJbiBjb25jdXJyZW50IG1vZGUgd2UgbmV2ZXIgdXBkYXRlIHRoZSBtaXNtYXRjaGVkIHRleHQsXG4gICAgICAgICAgICAgIC8vIGV2ZW4gaWYgdGhlIGVycm9yIHdhcyBpZ25vcmVkLlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgdmFyIHBhcmVudEluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICB2YXIgX2lzQ29uY3VycmVudE1vZGUyID0gKHJldHVybkZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTW9kZTtcblxuICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQsIC8vIFRPRE86IERlbGV0ZSB0aGlzIGFyZ3VtZW50IHdoZW4gd2UgcmVtb3ZlIHRoZSBsZWdhY3kgcm9vdCBBUEkuXG4gICAgICAgICAgICBfaXNDb25jdXJyZW50TW9kZTIsIHNob3VsZFdhcm5JZk1pc21hdGNoRGV2KTtcblxuICAgICAgICAgICAgaWYgKF9pc0NvbmN1cnJlbnRNb2RlMiAmJiBlbmFibGVDbGllbnRSZW5kZXJGYWxsYmFja09uVGV4dE1pc21hdGNoKSB7XG4gICAgICAgICAgICAgIC8vIEluIGNvbmN1cnJlbnQgbW9kZSB3ZSBuZXZlciB1cGRhdGUgdGhlIG1pc21hdGNoZWQgdGV4dCxcbiAgICAgICAgICAgICAgLy8gZXZlbiBpZiB0aGUgZXJyb3Igd2FzIGlnbm9yZWQuXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb0h5ZHJhdGVIb3N0U3VzcGVuc2VJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBzdXNwZW5zZVN0YXRlICE9PSBudWxsID8gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkIDogbnVsbDtcblxuICBpZiAoIXN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICB9XG5cbiAgaHlkcmF0ZVN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKSB7XG5cbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHN1c3BlbnNlU3RhdGUgIT09IG51bGwgPyBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgOiBudWxsO1xuXG4gIGlmICghc3VzcGVuc2VJbnN0YW5jZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gaGF2ZSBhIGh5ZHJhdGVkIHN1c3BlbnNlIGluc3RhbmNlLiAnICsgJ1RoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gIH1cblxuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcikge1xuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAoaHlkcmF0aW9uUGFyZW50RmliZXIpIHtcbiAgICBzd2l0Y2ggKGh5ZHJhdGlvblBhcmVudEZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXIucmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuXG4gIGlmIChmaWJlciAhPT0gaHlkcmF0aW9uUGFyZW50RmliZXIpIHtcbiAgICAvLyBXZSdyZSBkZWVwZXIgdGhhbiB0aGUgY3VycmVudCBoeWRyYXRpb24gY29udGV4dCwgaW5zaWRlIGFuIGluc2VydGVkXG4gICAgLy8gdHJlZS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgLy8gSWYgd2UncmUgbm90IGN1cnJlbnRseSBoeWRyYXRpbmcgYnV0IHdlJ3JlIGluIGEgaHlkcmF0aW9uIGNvbnRleHQsIHRoZW5cbiAgICAvLyB3ZSB3ZXJlIGFuIGluc2VydGlvbiBhbmQgbm93IG5lZWQgdG8gcG9wIHVwIHJlZW50ZXIgaHlkcmF0aW9uIG9mIG91clxuICAgIC8vIHNpYmxpbmdzLlxuICAgIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICAgIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgc2hvdWxkQ2xlYXIgPSBmYWxzZTtcblxuICB7XG4gICAgLy8gV2l0aCBmbG9hdCB3ZSBuZXZlciBjbGVhciB0aGUgUm9vdCwgb3IgU2luZ2xldG9uIGluc3RhbmNlcy4gV2UgYWxzbyBkbyBub3QgY2xlYXIgSW5zdGFuY2VzXG4gICAgLy8gdGhhdCBoYXZlIHNpbmdsZXRvbiB0ZXh0IGNvbnRlbnRcbiAgICBpZiAoZmliZXIudGFnICE9PSBIb3N0Um9vdCAmJiBmaWJlci50YWcgIT09IEhvc3RTaW5nbGV0b24gJiYgIShmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQgJiYgKCFzaG91bGREZWxldGVVbmh5ZHJhdGVkVGFpbEluc3RhbmNlcyhmaWJlci50eXBlKSB8fCBzaG91bGRTZXRUZXh0Q29udGVudChmaWJlci50eXBlLCBmaWJlci5tZW1vaXplZFByb3BzKSkpKSB7XG4gICAgICBzaG91bGRDbGVhciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHNob3VsZENsZWFyKSB7XG4gICAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgICBpZiAobmV4dEluc3RhbmNlKSB7XG4gICAgICBpZiAoc2hvdWxkQ2xpZW50UmVuZGVyT25NaXNtYXRjaChmaWJlcikpIHtcbiAgICAgICAgd2FybklmVW5oeWRyYXRlZFRhaWxOb2RlcyhmaWJlcik7XG4gICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2hpbGUgKG5leHRJbnN0YW5jZSkge1xuICAgICAgICAgIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShmaWJlciwgbmV4dEluc3RhbmNlKTtcbiAgICAgICAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobmV4dEluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IHNraXBQYXN0RGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpO1xuICB9IGVsc2Uge1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBoeWRyYXRpb25QYXJlbnRGaWJlciA/IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaWJlci5zdGF0ZU5vZGUpIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNVbmh5ZHJhdGVkVGFpbE5vZGVzKCkge1xuICByZXR1cm4gaXNIeWRyYXRpbmcgJiYgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gd2FybklmVW5oeWRyYXRlZFRhaWxOb2RlcyhmaWJlcikge1xuICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICB3aGlsZSAobmV4dEluc3RhbmNlKSB7XG4gICAgd2FyblVuaHlkcmF0ZWRJbnN0YW5jZShmaWJlciwgbmV4dEluc3RhbmNlKTtcbiAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobmV4dEluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEh5ZHJhdGlvblN0YXRlKCkge1xuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG4gIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gIGRpZFN1c3BlbmRPckVycm9yREVWID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlKCkge1xuICBpZiAoaHlkcmF0aW9uRXJyb3JzICE9PSBudWxsKSB7XG4gICAgLy8gU3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBhIGZvcmNlZCBjbGllbnQgcmVuZGVyLiBUaGUgZXJyb3JzIHRoYXQgb2NjdXJyZWRcbiAgICAvLyBkdXJpbmcgdGhlIGh5ZHJhdGlvbiBhdHRlbXB0IGFyZSBub3cgcmVjb3ZlcmVkLiBXZSB3aWxsIGxvZyB0aGVtIGluXG4gICAgLy8gY29tbWl0IHBoYXNlLCBvbmNlIHRoZSBlbnRpcmUgdHJlZSBoYXMgZmluaXNoZWQuXG4gICAgcXVldWVSZWNvdmVyYWJsZUVycm9ycyhoeWRyYXRpb25FcnJvcnMpO1xuICAgIGh5ZHJhdGlvbkVycm9ycyA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SXNIeWRyYXRpbmcoKSB7XG4gIHJldHVybiBpc0h5ZHJhdGluZztcbn1cblxuZnVuY3Rpb24gcXVldWVIeWRyYXRpb25FcnJvcihlcnJvcikge1xuICBpZiAoaHlkcmF0aW9uRXJyb3JzID09PSBudWxsKSB7XG4gICAgaHlkcmF0aW9uRXJyb3JzID0gW2Vycm9yXTtcbiAgfSBlbHNlIHtcbiAgICBoeWRyYXRpb25FcnJvcnMucHVzaChlcnJvcik7XG4gIH1cbn1cblxuLy8gd2Ugd2FpdCB1bnRpbCB0aGUgY3VycmVudCByZW5kZXIgaXMgb3ZlciAoZWl0aGVyIGZpbmlzaGVkIG9yIGludGVycnVwdGVkKVxuLy8gYmVmb3JlIGFkZGluZyBpdCB0byB0aGUgZmliZXIvaG9vayBxdWV1ZS4gUHVzaCB0byB0aGlzIGFycmF5IHNvIHdlIGNhblxuLy8gYWNjZXNzIHRoZSBxdWV1ZSwgZmliZXIsIHVwZGF0ZSwgZXQgYWwgbGF0ZXIuXG5cbnZhciBjb25jdXJyZW50UXVldWVzID0gW107XG52YXIgY29uY3VycmVudFF1ZXVlc0luZGV4ID0gMDtcbnZhciBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgPSBOb0xhbmVzO1xuZnVuY3Rpb24gZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpIHtcbiAgdmFyIGVuZEluZGV4ID0gY29uY3VycmVudFF1ZXVlc0luZGV4O1xuICBjb25jdXJyZW50UXVldWVzSW5kZXggPSAwO1xuICBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBlbmRJbmRleCkge1xuICAgIHZhciBmaWJlciA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICB2YXIgcXVldWUgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgIGNvbmN1cnJlbnRRdWV1ZXNbaSsrXSA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICB2YXIgbGFuZSA9IGNvbmN1cnJlbnRRdWV1ZXNbaV07XG4gICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcblxuICAgIGlmIChxdWV1ZSAhPT0gbnVsbCAmJiB1cGRhdGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBwZW5kaW5nID0gcXVldWUucGVuZGluZztcblxuICAgICAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgICAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgICAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gICAgfVxuXG4gICAgaWYgKGxhbmUgIT09IE5vTGFuZSkge1xuICAgICAgbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIHVwZGF0ZSwgbGFuZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRDb25jdXJyZW50bHlVcGRhdGVkTGFuZXMoKSB7XG4gIHJldHVybiBjb25jdXJyZW50bHlVcGRhdGVkTGFuZXM7XG59XG5cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUkMShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSkge1xuICAvLyBEb24ndCB1cGRhdGUgdGhlIGBjaGlsZExhbmVzYCBvbiB0aGUgcmV0dXJuIHBhdGggeWV0LiBJZiB3ZSBhbHJlYWR5IGluXG4gIC8vIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLCB3YWl0IHVudGlsIGFmdGVyIGl0IGhhcyBjb21wbGV0ZWQuXG4gIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gZmliZXI7XG4gIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gcXVldWU7XG4gIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gdXBkYXRlO1xuICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IGxhbmU7XG4gIGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyA9IG1lcmdlTGFuZXMoY29uY3VycmVudGx5VXBkYXRlZExhbmVzLCBsYW5lKTsgLy8gVGhlIGZpYmVyJ3MgYGxhbmVgIGZpZWxkIGlzIHVzZWQgaW4gc29tZSBwbGFjZXMgdG8gY2hlY2sgaWYgYW55IHdvcmsgaXNcbiAgLy8gc2NoZWR1bGVkLCB0byBwZXJmb3JtIGFuIGVhZ2VyIGJhaWxvdXQsIHNvIHdlIG5lZWQgdG8gdXBkYXRlIGl0IGltbWVkaWF0ZWx5LlxuICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgbW92ZSB0aGlzIHRvIHRoZSBcInNoYXJlZFwiIHF1ZXVlIGluc3RlYWQuXG5cbiAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCBsYW5lKTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIGxhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSkge1xuICB2YXIgY29uY3VycmVudFF1ZXVlID0gcXVldWU7XG4gIHZhciBjb25jdXJyZW50VXBkYXRlID0gdXBkYXRlO1xuICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIGNvbmN1cnJlbnRRdWV1ZSwgY29uY3VycmVudFVwZGF0ZSwgbGFuZSk7XG4gIHJldHVybiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbn1cbmZ1bmN0aW9uIGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZUFuZEVhZ2VybHlCYWlsb3V0KGZpYmVyLCBxdWV1ZSwgdXBkYXRlKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBxdWV1ZSBhbiB1cGRhdGUgdGhhdCBkb2Vzbid0IG5lZWQgYSByZXJlbmRlci4gVGhlXG4gIC8vIG9ubHkgcmVhc29uIHdlIHF1ZXVlIGl0IGlzIGluIGNhc2UgdGhlcmUncyBhIHN1YnNlcXVlbnQgaGlnaGVyIHByaW9yaXR5XG4gIC8vIHVwZGF0ZSB0aGF0IGNhdXNlcyBpdCB0byBiZSByZWJhc2VkLlxuICB2YXIgbGFuZSA9IE5vTGFuZTtcbiAgdmFyIGNvbmN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICB2YXIgY29uY3VycmVudFVwZGF0ZSA9IHVwZGF0ZTtcbiAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBjb25jdXJyZW50UXVldWUsIGNvbmN1cnJlbnRVcGRhdGUsIGxhbmUpOyAvLyBVc3VhbGx5IHdlIGNhbiByZWx5IG9uIHRoZSB1cGNvbWluZyByZW5kZXIgcGhhc2UgdG8gcHJvY2VzcyB0aGUgY29uY3VycmVudFxuICAvLyBxdWV1ZS4gSG93ZXZlciwgc2luY2UgdGhpcyBpcyBhIGJhaWwgb3V0LCB3ZSdyZSBub3Qgc2NoZWR1bGluZyBhbnkgd29ya1xuICAvLyBoZXJlLiBTbyB0aGUgdXBkYXRlIHdlIGp1c3QgcXVldWVkIHdpbGwgbGVhayB1bnRpbCBzb21ldGhpbmcgZWxzZSBoYXBwZW5zXG4gIC8vIHRvIHNjaGVkdWxlIHdvcmsgKGlmIGV2ZXIpLlxuICAvL1xuICAvLyBDaGVjayBpZiB3ZSdyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcgYSB0cmVlLCBhbmQgaWYgbm90LFxuICAvLyBwcm9jZXNzIHRoZSBxdWV1ZSBpbW1lZGlhdGVseSB0byBwcmV2ZW50IGEgbGVhay5cblxuICB2YXIgaXNDb25jdXJyZW50bHlSZW5kZXJpbmcgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKSAhPT0gbnVsbDtcblxuICBpZiAoIWlzQ29uY3VycmVudGx5UmVuZGVyaW5nKSB7XG4gICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpO1xuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudENsYXNzVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKSB7XG4gIHZhciBjb25jdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgdmFyIGNvbmN1cnJlbnRVcGRhdGUgPSB1cGRhdGU7XG4gIGVucXVldWVVcGRhdGUkMShmaWJlciwgY29uY3VycmVudFF1ZXVlLCBjb25jdXJyZW50VXBkYXRlLCBsYW5lKTtcbiAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xufVxuZnVuY3Rpb24gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBsYW5lKSB7XG4gIGVucXVldWVVcGRhdGUkMShmaWJlciwgbnVsbCwgbnVsbCwgbGFuZSk7XG4gIHJldHVybiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbn0gLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG91dHNpZGUgdGhpcyBtb2R1bGUgc2hvdWxkIG9ubHkgYmUgZG9uZSBmb3IgYmFja3dhcmRzXG4vLyBjb21wYXRpYmlsaXR5IGFuZCBzaG91bGQgYWx3YXlzIGJlIGFjY29tcGFuaWVkIGJ5IGEgd2FybmluZy5cblxuZnVuY3Rpb24gdW5zYWZlX21hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCBsYW5lKSB7XG4gIC8vIE5PVEU6IEZvciBIeXJ1bSdzIExhdyByZWFzb25zLCBpZiBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcCBpcyBkZXRlY3RlZCwgaXRcbiAgLy8gc2hvdWxkIHRocm93IGJlZm9yZSBgbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3RgIGlzIGNhbGxlZC4gQnV0IHRoaXMgaXNcbiAgLy8gdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCB3ZSBjYW4gY2hhbmdlIGl0IGlmIHdlIG5lZWQgdG87IGl0IGp1c3Qgc28gaGFwcGVuc1xuICAvLyB0aGF0LCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIHRoZXJlJ3MgYW4gaW50ZXJuYWwgcHJvZHVjdCB0ZXN0IHRoYXRcbiAgLy8gaGFwcGVucyB0byByZWx5IG9uIHRoaXMuXG4gIHZhciByb290ID0gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihzb3VyY2VGaWJlcik7XG4gIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCBudWxsLCBsYW5lKTtcbiAgcmV0dXJuIHJvb3Q7XG59XG5cbmZ1bmN0aW9uIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCB1cGRhdGUsIGxhbmUpIHtcbiAgLy8gVXBkYXRlIHRoZSBzb3VyY2UgZmliZXIncyBsYW5lc1xuICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIGxhbmUpO1xuICB2YXIgYWx0ZXJuYXRlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgbGFuZSk7XG4gIH0gLy8gV2FsayB0aGUgcGFyZW50IHBhdGggdG8gdGhlIHJvb3QgYW5kIHVwZGF0ZSB0aGUgY2hpbGQgbGFuZXMuXG5cblxuICB2YXIgaXNIaWRkZW4gPSBmYWxzZTtcbiAgdmFyIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjtcbiAgdmFyIG5vZGUgPSBzb3VyY2VGaWJlcjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgcGFyZW50LmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKHBhcmVudC5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICBhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50LnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50KSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIG9mZnNjcmVlbiBib3VuZGFyeSBpcyBjdXJyZW50bHkgaGlkZGVuLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSBpbnN0YW5jZSBtYXkgYmUgbnVsbCBpZiB0aGUgT2Zmc2NyZWVuIHBhcmVudCB3YXMgdW5tb3VudGVkLiBVc3VhbGx5XG4gICAgICAvLyB0aGUgcGFyZW50IHdvdWxkbid0IGJlIHJlYWNoYWJsZSBpbiB0aGF0IGNhc2UgYmVjYXVzZSB3ZSBkaXNjb25uZWN0XG4gICAgICAvLyBmaWJlcnMgZnJvbSB0aGUgdHJlZSB3aGVuIHRoZXkgYXJlIGRlbGV0ZWQuIEhvd2V2ZXIsIHRoZXJlJ3MgYSB3ZWlyZFxuICAgICAgLy8gZWRnZSBjYXNlIHdoZXJlIHNldFN0YXRlIGlzIGNhbGxlZCBvbiBhIGZpYmVyIHRoYXQgd2FzIGludGVycnVwdGVkXG4gICAgICAvLyBiZWZvcmUgaXQgZXZlciBtb3VudGVkLiBCZWNhdXNlIGl0IG5ldmVyIG1vdW50cywgaXQgYWxzbyBuZXZlciBnZXRzXG4gICAgICAvLyBkZWxldGVkLiBCZWNhdXNlIGl0IG5ldmVyIGdldHMgZGVsZXRlZCwgaXRzIHJldHVybiBwb2ludGVyIG5ldmVyIGdldHNcbiAgICAgIC8vIGRpc2Nvbm5lY3RlZC4gV2hpY2ggbWVhbnMgaXQgbWF5IGJlIGF0dGFjaGVkIHRvIGEgZGVsZXRlZCBPZmZzY3JlZW5cbiAgICAgIC8vIHBhcmVudCBub2RlLiAoVGhpcyBkaXNjb3Zlcnkgc3VnZ2VzdHMgaXQgbWF5IGJlIGJldHRlciBmb3IgbWVtb3J5IHVzYWdlXG4gICAgICAvLyBpZiB3ZSBkb24ndCBhdHRhY2ggdGhlIGByZXR1cm5gIHBvaW50ZXIgdW50aWwgdGhlIGNvbW1pdCBwaGFzZSwgdGhvdWdoXG4gICAgICAvLyBpbiBvcmRlciB0byBkbyB0aGF0IHdlJ2QgbmVlZCBzb21lIG90aGVyIHdheSB0byB0cmFjayB0aGUgcmV0dXJuXG4gICAgICAvLyBwb2ludGVyIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIsIGxpa2Ugb24gdGhlIHN0YWNrLilcbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGNhc2UgaXMgYWx3YXlzIGFjY29tcGFuaWVkIGJ5IGEgd2FybmluZywgYnV0IHdlIHN0aWxsIG5lZWQgdG9cbiAgICAgIC8vIGFjY291bnQgZm9yIGl0LiAoVGhlcmUgbWF5IGJlIG90aGVyIGNhc2VzIHRoYXQgd2UgaGF2ZW4ndCBkaXNjb3ZlcmVkLFxuICAgICAgLy8gdG9vLilcbiAgICAgIHZhciBvZmZzY3JlZW5JbnN0YW5jZSA9IHBhcmVudC5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmIChvZmZzY3JlZW5JbnN0YW5jZSAhPT0gbnVsbCAmJiAhKG9mZnNjcmVlbkluc3RhbmNlLl92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuVmlzaWJsZSkpIHtcbiAgICAgICAgaXNIaWRkZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBwYXJlbnQ7XG4gICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgfVxuXG4gIGlmIChpc0hpZGRlbiAmJiB1cGRhdGUgIT09IG51bGwgJiYgbm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgdmFyIHJvb3QgPSBub2RlLnN0YXRlTm9kZTtcbiAgICBtYXJrSGlkZGVuVXBkYXRlKHJvb3QsIHVwZGF0ZSwgbGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihzb3VyY2VGaWJlcikge1xuICAvLyBUT0RPOiBXZSB3aWxsIGRldGVjdCBhbmQgaW5maW5pdGUgdXBkYXRlIGxvb3AgYW5kIHRocm93IGV2ZW4gaWYgdGhpcyBmaWJlclxuICAvLyBoYXMgYWxyZWFkeSB1bm1vdW50ZWQuIFRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSBidXQgaXQgaGFwcGVucyB0byBiZSB0aGVcbiAgLy8gY3VycmVudCBiZWhhdmlvciB3ZSd2ZSB1c2VkIGZvciBzZXZlcmFsIHJlbGVhc2UgY3ljbGVzLiBDb25zaWRlciBub3RcbiAgLy8gcGVyZm9ybWluZyB0aGlzIGNoZWNrIGlmIHRoZSB1cGRhdGVkIGZpYmVyIGFscmVhZHkgdW5tb3VudGVkLCBzaW5jZSBpdCdzXG4gIC8vIG5vdCBwb3NzaWJsZSBmb3IgdGhhdCB0byBjYXVzZSBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcC5cbiAgdGhyb3dJZkluZmluaXRlVXBkYXRlTG9vcERldGVjdGVkKCk7IC8vIFdoZW4gYSBzZXRTdGF0ZSBoYXBwZW5zLCB3ZSBtdXN0IGVuc3VyZSB0aGUgcm9vdCBpcyBzY2hlZHVsZWQuIEJlY2F1c2VcbiAgLy8gdXBkYXRlIHF1ZXVlcyBkbyBub3QgaGF2ZSBhIGJhY2twb2ludGVyIHRvIHRoZSByb290LCB0aGUgb25seSB3YXkgdG8gZG9cbiAgLy8gdGhpcyBjdXJyZW50bHkgaXMgdG8gd2FsayB1cCB0aGUgcmV0dXJuIHBhdGguIFRoaXMgdXNlZCB0byBub3QgYmUgYSBiaWdcbiAgLy8gZGVhbCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FsayB1cCB0aGUgcmV0dXJuIHBhdGggdG8gc2V0XG4gIC8vIHRoZSBgY2hpbGRMYW5lc2AsIGFueXdheSwgYnV0IG5vdyB0aG9zZSB0d28gdHJhdmVyc2FscyBoYXBwZW4gYXRcbiAgLy8gZGlmZmVyZW50IHRpbWVzLlxuICAvLyBUT0RPOiBDb25zaWRlciBhZGRpbmcgYSBgcm9vdGAgYmFja3BvaW50ZXIgb24gdGhlIHVwZGF0ZSBxdWV1ZS5cblxuICBkZXRlY3RVcGRhdGVPblVubW91bnRlZEZpYmVyKHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlcik7XG4gIHZhciBub2RlID0gc291cmNlRmliZXI7XG4gIHZhciBwYXJlbnQgPSBub2RlLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgZGV0ZWN0VXBkYXRlT25Vbm1vdW50ZWRGaWJlcihzb3VyY2VGaWJlciwgbm9kZSk7XG4gICAgbm9kZSA9IHBhcmVudDtcbiAgICBwYXJlbnQgPSBub2RlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBub2RlLnRhZyA9PT0gSG9zdFJvb3QgPyBub2RlLnN0YXRlTm9kZSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGRldGVjdFVwZGF0ZU9uVW5tb3VudGVkRmliZXIoc291cmNlRmliZXIsIHBhcmVudCkge1xuICB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IHBhcmVudC5hbHRlcm5hdGU7XG5cbiAgICBpZiAoYWx0ZXJuYXRlID09PSBudWxsICYmIChwYXJlbnQuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgfVxuICB9XG59XG5cbnZhciBVcGRhdGVTdGF0ZSA9IDA7XG52YXIgUmVwbGFjZVN0YXRlID0gMTtcbnZhciBGb3JjZVVwZGF0ZSA9IDI7XG52YXIgQ2FwdHVyZVVwZGF0ZSA9IDM7IC8vIEdsb2JhbCBzdGF0ZSB0aGF0IGlzIHJlc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYC5cbi8vIEl0IHNob3VsZCBvbmx5IGJlIHJlYWQgcmlnaHQgYWZ0ZXIgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYCwgdmlhXG4vLyBgY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZ2AuXG5cbnZhciBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGU7XG52YXIgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlO1xuXG57XG4gIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSBmYWxzZTtcbiAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGZpYmVyKSB7XG4gIHZhciBxdWV1ZSA9IHtcbiAgICBiYXNlU3RhdGU6IGZpYmVyLm1lbW9pemVkU3RhdGUsXG4gICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIGxhc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIHNoYXJlZDoge1xuICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgIGxhbmVzOiBOb0xhbmVzLFxuICAgICAgaGlkZGVuQ2FsbGJhY2tzOiBudWxsXG4gICAgfSxcbiAgICBjYWxsYmFja3M6IG51bGxcbiAgfTtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBxdWV1ZTtcbn1cbmZ1bmN0aW9uIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gQ2xvbmUgdGhlIHVwZGF0ZSBxdWV1ZSBmcm9tIGN1cnJlbnQuIFVubGVzcyBpdCdzIGFscmVhZHkgYSBjbG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgdmFyIGNsb25lID0ge1xuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgZmlyc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlLFxuICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgIGNhbGxiYWNrczogbnVsbFxuICAgIH07XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjbG9uZTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVXBkYXRlKGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICBsYW5lOiBsYW5lLFxuICAgIHRhZzogVXBkYXRlU3RhdGUsXG4gICAgcGF5bG9hZDogbnVsbCxcbiAgICBjYWxsYmFjazogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHJldHVybiB1cGRhdGU7XG59XG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUsIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG5cbiAgaWYgKHVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgLy8gT25seSBvY2N1cnMgaWYgdGhlIGZpYmVyIGhhcyBiZWVuIHVubW91bnRlZC5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBzaGFyZWRRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcblxuICB7XG4gICAgaWYgKGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9PT0gc2hhcmVkUXVldWUgJiYgIWRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcik7XG5cbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkICcgKyAnZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCAnICsgJ3dpdGggemVybyBzaWRlLWVmZmVjdHMuIENvbnNpZGVyIHVzaW5nIGNvbXBvbmVudERpZFVwZGF0ZSBvciBhICcgKyAnY2FsbGJhY2suXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudDogJXMnLCBjb21wb25lbnROYW1lKTtcblxuICAgICAgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzVW5zYWZlQ2xhc3NSZW5kZXJQaGFzZVVwZGF0ZSgpKSB7XG4gICAgLy8gVGhpcyBpcyBhbiB1bnNhZmUgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gQWRkIGRpcmVjdGx5IHRvIHRoZSB1cGRhdGVcbiAgICAvLyBxdWV1ZSBzbyB3ZSBjYW4gcHJvY2VzcyBpdCBpbW1lZGlhdGVseSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyLlxuICAgIHZhciBwZW5kaW5nID0gc2hhcmVkUXVldWUucGVuZGluZztcblxuICAgIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gICAgfVxuXG4gICAgc2hhcmVkUXVldWUucGVuZGluZyA9IHVwZGF0ZTsgLy8gVXBkYXRlIHRoZSBjaGlsZExhbmVzIGV2ZW4gdGhvdWdoIHdlJ3JlIG1vc3QgbGlrZWx5IGFscmVhZHkgcmVuZGVyaW5nXG4gICAgLy8gdGhpcyBmaWJlci4gVGhpcyBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaW4gdGhlIGNhc2Ugd2hlcmUgeW91XG4gICAgLy8gdXBkYXRlIGEgZGlmZmVyZW50IGNvbXBvbmVudCBkdXJpbmcgcmVuZGVyIHBoYXNlIHRoYW4gdGhlIG9uZSB0aGF0IGlzXG4gICAgLy8gY3VycmVudGx5IHJlbmRlcmluZ3MgKGEgcGF0dGVybiB0aGF0IGlzIGFjY29tcGFuaWVkIGJ5IGEgd2FybmluZykuXG5cbiAgICByZXR1cm4gdW5zYWZlX21hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBsYW5lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZW5xdWV1ZUNvbmN1cnJlbnRDbGFzc1VwZGF0ZShmaWJlciwgc2hhcmVkUXVldWUsIHVwZGF0ZSwgbGFuZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgZmliZXIsIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG5cbiAgaWYgKHVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgLy8gT25seSBvY2N1cnMgaWYgdGhlIGZpYmVyIGhhcyBiZWVuIHVubW91bnRlZC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2hhcmVkUXVldWUgPSB1cGRhdGVRdWV1ZS5zaGFyZWQ7XG5cbiAgaWYgKGlzVHJhbnNpdGlvbkxhbmUobGFuZSkpIHtcbiAgICB2YXIgcXVldWVMYW5lcyA9IHNoYXJlZFF1ZXVlLmxhbmVzOyAvLyBJZiBhbnkgZW50YW5nbGVkIGxhbmVzIGFyZSBubyBsb25nZXIgcGVuZGluZyBvbiB0aGUgcm9vdCwgdGhlbiB0aGV5IG11c3RcbiAgICAvLyBoYXZlIGZpbmlzaGVkLiBXZSBjYW4gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgc2hhcmVkIHF1ZXVlLCB3aGljaCByZXByZXNlbnRzXG4gICAgLy8gYSBzdXBlcnNldCBvZiB0aGUgYWN0dWFsbHkgcGVuZGluZyBsYW5lcy4gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW50YW5nbGVcbiAgICAvLyBtb3JlIHRoYW4gd2UgbmVlZCB0bywgYnV0IHRoYXQncyBPSy4gSW4gZmFjdCBpdCdzIHdvcnNlIGlmIHdlICpkb24ndCpcbiAgICAvLyBlbnRhbmdsZSB3aGVuIHdlIHNob3VsZC5cblxuICAgIHF1ZXVlTGFuZXMgPSBpbnRlcnNlY3RMYW5lcyhxdWV1ZUxhbmVzLCByb290LnBlbmRpbmdMYW5lcyk7IC8vIEVudGFuZ2xlIHRoZSBuZXcgdHJhbnNpdGlvbiBsYW5lIHdpdGggdGhlIG90aGVyIHRyYW5zaXRpb24gbGFuZXMuXG5cbiAgICB2YXIgbmV3UXVldWVMYW5lcyA9IG1lcmdlTGFuZXMocXVldWVMYW5lcywgbGFuZSk7XG4gICAgc2hhcmVkUXVldWUubGFuZXMgPSBuZXdRdWV1ZUxhbmVzOyAvLyBFdmVuIGlmIHF1ZXVlLmxhbmVzIGFscmVhZHkgaW5jbHVkZSBsYW5lLCB3ZSBkb24ndCBrbm93IGZvciBjZXJ0YWluIGlmXG4gICAgLy8gdGhlIGxhbmUgZmluaXNoZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBlbnRhbmdsZWQgaXQuIFNvIHdlIG5lZWQgdG9cbiAgICAvLyBlbnRhbmdsZSBpdCBhZ2FpbiwganVzdCB0byBiZSBzdXJlLlxuXG4gICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgbmV3UXVldWVMYW5lcyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY2FwdHVyZWRVcGRhdGUpIHtcbiAgLy8gQ2FwdHVyZWQgdXBkYXRlcyBhcmUgdXBkYXRlcyB0aGF0IGFyZSB0aHJvd24gYnkgYSBjaGlsZCBkdXJpbmcgdGhlIHJlbmRlclxuICAvLyBwaGFzZS4gVGhleSBzaG91bGQgYmUgZGlzY2FyZGVkIGlmIHRoZSByZW5kZXIgaXMgYWJvcnRlZC4gVGhlcmVmb3JlLFxuICAvLyB3ZSBzaG91bGQgb25seSBwdXQgdGhlbSBvbiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSwgbm90IHRoZSBjdXJyZW50IG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7IC8vIENoZWNrIGlmIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIGEgY2xvbmUuXG5cbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICAgIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgICAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyB0aGUgc2FtZSBhcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlblxuICAgICAgLy8gd2UgYmFpbCBvdXQgb24gYSBwYXJlbnQgZmliZXIgdGhhdCB0aGVuIGNhcHR1cmVzIGFuIGVycm9yIHRocm93biBieVxuICAgICAgLy8gYSBjaGlsZC4gU2luY2Ugd2Ugd2FudCB0byBhcHBlbmQgdGhlIHVwZGF0ZSBvbmx5IHRvIHRoZSB3b3JrLWluXG4gICAgICAvLyAtcHJvZ3Jlc3MgcXVldWUsIHdlIG5lZWQgdG8gY2xvbmUgdGhlIHVwZGF0ZXMuIFdlIHVzdWFsbHkgY2xvbmUgZHVyaW5nXG4gICAgICAvLyBwcm9jZXNzVXBkYXRlUXVldWUsIGJ1dCB0aGF0IGRpZG4ndCBoYXBwZW4gaW4gdGhpcyBjYXNlIGJlY2F1c2Ugd2VcbiAgICAgIC8vIHNraXBwZWQgb3ZlciB0aGUgcGFyZW50IHdoZW4gd2UgYmFpbGVkIG91dC5cbiAgICAgIHZhciBuZXdGaXJzdCA9IG51bGw7XG4gICAgICB2YXIgbmV3TGFzdCA9IG51bGw7XG4gICAgICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICBpZiAoZmlyc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgdXBkYXRlcyBhbmQgY2xvbmUgdGhlbS5cbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgICAgbGFuZTogdXBkYXRlLmxhbmUsXG4gICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgIC8vIFdoZW4gdGhpcyB1cGRhdGUgaXMgcmViYXNlZCwgd2Ugc2hvdWxkIG5vdCBmaXJlIGl0c1xuICAgICAgICAgICAgLy8gY2FsbGJhY2sgYWdhaW4uXG4gICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKG5ld0xhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgICAgIG5ld0xhc3QgPSBjbG9uZTtcbiAgICAgICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIHdlIGJhaWwgb3V0IHdoZW4gd2UgZ2V0IGEgbnVsbFxuXG5cbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsKTsgLy8gQXBwZW5kIHRoZSBjYXB0dXJlZCB1cGRhdGUgdGhlIGVuZCBvZiB0aGUgY2xvbmVkIGxpc3QuXG5cblxuICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICAgIG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIG5vIGJhc2UgdXBkYXRlcy5cbiAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlID0ge1xuICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogbmV3Rmlyc3QsXG4gICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICBzaGFyZWQ6IGN1cnJlbnRRdWV1ZS5zaGFyZWQsXG4gICAgICAgIGNhbGxiYWNrczogY3VycmVudFF1ZXVlLmNhbGxiYWNrc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IC8vIEFwcGVuZCB0aGUgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG5cblxuICB2YXIgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcblxuICBpZiAobGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICBxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gIH1cblxuICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIHByZXZTdGF0ZSwgbmV4dFByb3BzLCBpbnN0YW5jZSkge1xuICBzd2l0Y2ggKHVwZGF0ZS50YWcpIHtcbiAgICBjYXNlIFJlcGxhY2VTdGF0ZTpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcblxuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSBwYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgICAgICB9IC8vIFN0YXRlIG9iamVjdFxuXG5cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICB9XG5cbiAgICBjYXNlIENhcHR1cmVVcGRhdGU6XG4gICAgICB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICB9XG4gICAgLy8gSW50ZW50aW9uYWwgZmFsbHRocm91Z2hcblxuICAgIGNhc2UgVXBkYXRlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBfcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuICAgICAgICB2YXIgcGFydGlhbFN0YXRlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgX3BheWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBhcnRpYWwgc3RhdGUgb2JqZWN0XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gTnVsbCBhbmQgdW5kZWZpbmVkIGFyZSB0cmVhdGVkIGFzIG5vLW9wcy5cbiAgICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICAgICAgICByZXR1cm4gYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcmNlVXBkYXRlOlxuICAgICAge1xuICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gcHJldlN0YXRlO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIHByb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxuICB7XG4gICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gcXVldWUuc2hhcmVkO1xuICB9XG5cbiAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcbiAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7IC8vIENoZWNrIGlmIHRoZXJlIGFyZSBwZW5kaW5nIHVwZGF0ZXMuIElmIHNvLCB0cmFuc2ZlciB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsOyAvLyBUaGUgcGVuZGluZyBxdWV1ZSBpcyBjaXJjdWxhci4gRGlzY29ubmVjdCB0aGUgcG9pbnRlciBiZXR3ZWVuIGZpcnN0XG4gICAgLy8gYW5kIGxhc3Qgc28gdGhhdCBpdCdzIG5vbi1jaXJjdWxhci5cblxuICAgIHZhciBsYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICB2YXIgZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDsgLy8gQXBwZW5kIHBlbmRpbmcgdXBkYXRlcyB0byBiYXNlIHF1ZXVlXG5cbiAgICBpZiAobGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9XG5cbiAgICBsYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlOyAvLyBJZiB0aGVyZSdzIGEgY3VycmVudCBxdWV1ZSwgYW5kIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIGJhc2UgcXVldWUsIHRoZW5cbiAgICAvLyB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZSB1cGRhdGVzIHRvIHRoYXQgcXVldWUsIHRvby4gQmVjYXVzZSB0aGUgYmFzZVxuICAgIC8vIHF1ZXVlIGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHdpdGggbm8gY3ljbGVzLCB3ZSBjYW4gYXBwZW5kIHRvIGJvdGhcbiAgICAvLyBsaXN0cyBhbmQgdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RydWN0dXJhbCBzaGFyaW5nLlxuICAgIC8vIFRPRE86IFBhc3MgYGN1cnJlbnRgIGFzIGFyZ3VtZW50XG5cbiAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGFsd2F5cyBub24tbnVsbCBvbiBhIENsYXNzQ29tcG9uZW50IG9yIEhvc3RSb290XG4gICAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHZhciBjdXJyZW50TGFzdEJhc2VVcGRhdGUgPSBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgIT09IGxhc3RCYXNlVXBkYXRlKSB7XG4gICAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFRoZXNlIHZhbHVlcyBtYXkgY2hhbmdlIGFzIHdlIHByb2Nlc3MgdGhlIHF1ZXVlLlxuXG5cbiAgaWYgKGZpcnN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCBvZiB1cGRhdGVzIHRvIGNvbXB1dGUgdGhlIHJlc3VsdC5cbiAgICB2YXIgbmV3U3RhdGUgPSBxdWV1ZS5iYXNlU3RhdGU7IC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlIHJlbmRlckxhbmVzXG4gICAgLy8gZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cbiAgICB2YXIgbmV3TGFuZXMgPSBOb0xhbmVzO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdGaXJzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciBuZXdMYXN0QmFzZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIC8vIEFuIGV4dHJhIE9mZnNjcmVlbkxhbmUgYml0IGlzIGFkZGVkIHRvIHVwZGF0ZXMgdGhhdCB3ZXJlIG1hZGUgdG9cbiAgICAgIC8vIGEgaGlkZGVuIHRyZWUsIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB1cGRhdGVzIHRoYXQgd2VyZVxuICAgICAgLy8gYWxyZWFkeSB0aGVyZSB3aGVuIHRoZSB0cmVlIHdhcyBoaWRkZW4uXG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHJlbW92ZUxhbmVzKHVwZGF0ZS5sYW5lLCBPZmZzY3JlZW5MYW5lKTtcbiAgICAgIHZhciBpc0hpZGRlblVwZGF0ZSA9IHVwZGF0ZUxhbmUgIT09IHVwZGF0ZS5sYW5lOyAvLyBDaGVjayBpZiB0aGlzIHVwZGF0ZSB3YXMgbWFkZSB3aGlsZSB0aGUgdHJlZSB3YXMgaGlkZGVuLiBJZiBzbywgdGhlblxuICAgICAgLy8gaXQncyBub3QgYSBcImJhc2VcIiB1cGRhdGUgYW5kIHdlIHNob3VsZCBkaXNyZWdhcmQgdGhlIGV4dHJhIGJhc2UgbGFuZXNcbiAgICAgIC8vIHRoYXQgd2VyZSBhZGRlZCB0byByZW5kZXJMYW5lcyB3aGVuIHdlIGVudGVyZWQgdGhlIE9mZnNjcmVlbiB0cmVlLlxuXG4gICAgICB2YXIgc2hvdWxkU2tpcFVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlID8gIWlzU3Vic2V0T2ZMYW5lcyhnZXRXb3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcygpLCB1cGRhdGVMYW5lKSA6ICFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpO1xuXG4gICAgICBpZiAoc2hvdWxkU2tpcFVwZGF0ZSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHRhZzogdXBkYXRlLnRhZyxcbiAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdGaXJzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZSA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IGNsb25lO1xuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIHByaW9yaXR5IGluIHRoZSBxdWV1ZS5cblxuXG4gICAgICAgIG5ld0xhbmVzID0gbWVyZ2VMYW5lcyhuZXdMYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAvLyBpdC4gVXNpbmcgTm9MYW5lIHdvcmtzIGJlY2F1c2UgMCBpcyBhIHN1YnNldCBvZiBhbGwgYml0bWFza3MsIHNvXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgIC8vIFdoZW4gdGhpcyB1cGRhdGUgaXMgcmViYXNlZCwgd2Ugc2hvdWxkIG5vdCBmaXJlIGl0c1xuICAgICAgICAgICAgLy8gY2FsbGJhY2sgYWdhaW4uXG4gICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG5ld0xhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUubmV4dCA9IF9jbG9uZTtcbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgbmV3U3RhdGUgPSBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIG5ld1N0YXRlLCBwcm9wcywgaW5zdGFuY2UpO1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB1cGRhdGUuY2FsbGJhY2s7XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2FsbGJhY2s7XG5cbiAgICAgICAgICBpZiAoaXNIaWRkZW5VcGRhdGUpIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFZpc2liaWxpdHk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHF1ZXVlLmNhbGxiYWNrcztcblxuICAgICAgICAgIGlmIChjYWxsYmFja3MgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXVlLmNhbGxiYWNrcyA9IFtjYWxsYmFja107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cblxuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG5cbiAgICAgIGlmICh1cGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgICAgICAgaWYgKHBlbmRpbmdRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGZyb20gaW5zaWRlIGEgcmVkdWNlci4gQWRkIHRoZSBuZXdcbiAgICAgICAgICAvLyBwZW5kaW5nIHVwZGF0ZXMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBhbmQga2VlcCBwcm9jZXNzaW5nLlxuICAgICAgICAgIHZhciBfbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7IC8vIEludGVudGlvbmFsbHkgdW5zb3VuZC4gUGVuZGluZyB1cGRhdGVzIGZvcm0gYSBjaXJjdWxhciBsaXN0LCBidXQgd2VcbiAgICAgICAgICAvLyB1bnJhdmVsIHRoZW0gd2hlbiB0cmFuc2ZlcnJpbmcgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cblxuICAgICAgICAgIHZhciBfZmlyc3RQZW5kaW5nVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgICAgICAgX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsO1xuICAgICAgICAgIHVwZGF0ZSA9IF9maXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBfbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH1cblxuICAgIHF1ZXVlLmJhc2VTdGF0ZSA9IG5ld0Jhc2VTdGF0ZTtcbiAgICBxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBuZXdGaXJzdEJhc2VVcGRhdGU7XG4gICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZTtcblxuICAgIGlmIChmaXJzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIC8vIGBxdWV1ZS5sYW5lc2AgaXMgdXNlZCBmb3IgZW50YW5nbGluZyB0cmFuc2l0aW9ucy4gV2UgY2FuIHNldCBpdCBiYWNrIHRvXG4gICAgICAvLyB6ZXJvIG9uY2UgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgcXVldWUuc2hhcmVkLmxhbmVzID0gTm9MYW5lcztcbiAgICB9IC8vIFNldCB0aGUgcmVtYWluaW5nIGV4cGlyYXRpb24gdGltZSB0byBiZSB3aGF0ZXZlciBpcyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlLlxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGZpbmUgYmVjYXVzZSB0aGUgb25seSB0d28gb3RoZXIgdGhpbmdzIHRoYXQgY29udHJpYnV0ZSB0b1xuICAgIC8vIGV4cGlyYXRpb24gdGltZSBhcmUgcHJvcHMgYW5kIGNvbnRleHQuIFdlJ3JlIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiB0aGVcbiAgICAvLyBiZWdpbiBwaGFzZSBieSB0aGUgdGltZSB3ZSBzdGFydCBwcm9jZXNzaW5nIHRoZSBxdWV1ZSwgc28gd2UndmUgYWxyZWFkeVxuICAgIC8vIGRlYWx0IHdpdGggdGhlIHByb3BzLiBDb250ZXh0IGluIGNvbXBvbmVudHMgdGhhdCBzcGVjaWZ5XG4gICAgLy8gc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHRyaWNreTsgYnV0IHdlJ2xsIGhhdmUgdG8gYWNjb3VudCBmb3JcbiAgICAvLyB0aGF0IHJlZ2FyZGxlc3MuXG5cblxuICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobmV3TGFuZXMpO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbmV3TGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgcGFzc2VkIGFzIGNhbGxiYWNrLiBFeHBlY3RlZCBhIGZ1bmN0aW9uLiBJbnN0ZWFkICcgKyAoXCJyZWNlaXZlZDogXCIgKyBjYWxsYmFjaykpO1xuICB9XG5cbiAgY2FsbGJhY2suY2FsbChjb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKSB7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG59XG5mdW5jdGlvbiBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkge1xuICByZXR1cm4gaGFzRm9yY2VVcGRhdGU7XG59XG5mdW5jdGlvbiBkZWZlckhpZGRlbkNhbGxiYWNrcyh1cGRhdGVRdWV1ZSkge1xuICAvLyBXaGVuIGFuIHVwZGF0ZSBmaW5pc2hlcyBvbiBhIGhpZGRlbiBjb21wb25lbnQsIGl0cyBjYWxsYmFjayBzaG91bGQgbm90XG4gIC8vIGJlIGZpcmVkIHVudGlsL3VubGVzcyB0aGUgY29tcG9uZW50IGlzIG1hZGUgdmlzaWJsZSBhZ2Fpbi4gU3Rhc2ggdGhlXG4gIC8vIGNhbGxiYWNrIG9uIHRoZSBzaGFyZWQgcXVldWUgb2JqZWN0IHNvIGl0IGNhbiBiZSBmaXJlZCBsYXRlci5cbiAgdmFyIG5ld0hpZGRlbkNhbGxiYWNrcyA9IHVwZGF0ZVF1ZXVlLmNhbGxiYWNrcztcblxuICBpZiAobmV3SGlkZGVuQ2FsbGJhY2tzICE9PSBudWxsKSB7XG4gICAgdmFyIGV4aXN0aW5nSGlkZGVuQ2FsbGJhY2tzID0gdXBkYXRlUXVldWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcztcblxuICAgIGlmIChleGlzdGluZ0hpZGRlbkNhbGxiYWNrcyA9PT0gbnVsbCkge1xuICAgICAgdXBkYXRlUXVldWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyA9IG5ld0hpZGRlbkNhbGxiYWNrcztcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlUXVldWUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyA9IGV4aXN0aW5nSGlkZGVuQ2FsbGJhY2tzLmNvbmNhdChuZXdIaWRkZW5DYWxsYmFja3MpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY29tbWl0SGlkZGVuQ2FsbGJhY2tzKHVwZGF0ZVF1ZXVlLCBjb250ZXh0KSB7XG4gIC8vIFRoaXMgY29tcG9uZW50IGlzIHN3aXRjaGluZyBmcm9tIGhpZGRlbiAtPiB2aXNpYmxlLiBDb21taXQgYW55IGNhbGxiYWNrc1xuICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBkZWZlcnJlZC5cbiAgdmFyIGhpZGRlbkNhbGxiYWNrcyA9IHVwZGF0ZVF1ZXVlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7XG5cbiAgaWYgKGhpZGRlbkNhbGxiYWNrcyAhPT0gbnVsbCkge1xuICAgIHVwZGF0ZVF1ZXVlLnNoYXJlZC5oaWRkZW5DYWxsYmFja3MgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW5DYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjYWxsYmFjayA9IGhpZGRlbkNhbGxiYWNrc1tpXTtcbiAgICAgIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjb21taXRDYWxsYmFja3ModXBkYXRlUXVldWUsIGNvbnRleHQpIHtcbiAgdmFyIGNhbGxiYWNrcyA9IHVwZGF0ZVF1ZXVlLmNhbGxiYWNrcztcblxuICBpZiAoY2FsbGJhY2tzICE9PSBudWxsKSB7XG4gICAgdXBkYXRlUXVldWUuY2FsbGJhY2tzID0gbnVsbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2FsbGJhY2sgPSBjYWxsYmFja3NbaV07XG4gICAgICBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGNvbnRleHQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cblxuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKG9iamVjdElzKG9iakEsIG9iakIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9iakEgPT09IG51bGwgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNBLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzQVtpXTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChvYmpCLCBjdXJyZW50S2V5KSB8fCAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGxvc3QgcmVmaW5lbWVudCBvZiBgb2JqQmBcbiAgICAhb2JqZWN0SXMob2JqQVtjdXJyZW50S2V5XSwgb2JqQltjdXJyZW50S2V5XSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxudmFyIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzID0ge1xuICByZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgcmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoKSB7fSxcbiAgZGlzY2FyZFBlbmRpbmdXYXJuaW5nczogZnVuY3Rpb24gKCkge31cbn07XG5cbntcbiAgdmFyIGZpbmRTdHJpY3RSb290ID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgdmFyIG1heWJlU3RyaWN0Um9vdCA9IG51bGw7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICBtYXliZVN0cmljdFJvb3QgPSBub2RlO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIG1heWJlU3RyaWN0Um9vdDtcbiAgfTtcblxuICB2YXIgc2V0VG9Tb3J0ZWRTdHJpbmcgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBhcnJheS5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXkuc29ydCgpLmpvaW4oJywgJyk7XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgLy8gRGVkdXBlIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cbiAgICBpZiAoZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cy5cbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFdlIGRvIGFuIGluaXRpYWwgcGFzcyB0byBnYXRoZXIgY29tcG9uZW50IG5hbWVzXG4gICAgdmFyIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICB9IC8vIEZpbmFsbHksIHdlIGZsdXNoIGFsbCB0aGUgd2FybmluZ3NcbiAgICAvLyBVTlNBRkVfIG9uZXMgYmVmb3JlIHRoZSBkZXByZWNhdGVkIG9uZXMsIHNpbmNlIHRoZXknbGwgYmUgJ2xvdWRlcidcblxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIHNvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkICcgKyAnYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIFwiICsgJ3JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lcyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMyID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMik7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzMyA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbE1vdW50IGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbE1vdW50IHRvIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczMpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM0ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArIFwiKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCByZWZhY3RvciB5b3VyIFwiICsgJ2NvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byAnICsgJ3N0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kZXJpdmVkLXN0YXRlXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM0KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzNSA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxVcGRhdGUgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbFVwZGF0ZSB0byBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzNSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgdmFyIHN0cmljdFJvb3QgPSBmaW5kU3RyaWN0Um9vdChmaWJlcik7XG5cbiAgICBpZiAoc3RyaWN0Um9vdCA9PT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgYSBTdHJpY3RNb2RlIGNvbXBvbmVudCBpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuXG5cbiAgICBpZiAoZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgd2FybmluZ3NGb3JSb290ID0gcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmdldChzdHJpY3RSb290KTtcblxuICAgIGlmIChmaWJlci50eXBlLmNvbnRleHRUeXBlcyAhPSBudWxsIHx8IGZpYmVyLnR5cGUuY2hpbGRDb250ZXh0VHlwZXMgIT0gbnVsbCB8fCBpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAod2FybmluZ3NGb3JSb290ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgd2FybmluZ3NGb3JSb290ID0gW107XG4gICAgICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5zZXQoc3RyaWN0Um9vdCwgd2FybmluZ3NGb3JSb290KTtcbiAgICAgIH1cblxuICAgICAgd2FybmluZ3NGb3JSb290LnB1c2goZmliZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlckFycmF5LCBzdHJpY3RSb290KSB7XG4gICAgICBpZiAoZmliZXJBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RGaWJlciA9IGZpYmVyQXJyYXlbMF07XG4gICAgICB2YXIgdW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICBmaWJlckFycmF5LmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIHVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyh1bmlxdWVOYW1lcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaXJzdEZpYmVyKTtcblxuICAgICAgICBlcnJvcignTGVnYWN5IGNvbnRleHQgQVBJIGhhcyBiZWVuIGRldGVjdGVkIHdpdGhpbiBhIHN0cmljdC1tb2RlIHRyZWUuJyArICdcXG5cXG5UaGUgb2xkIEFQSSB3aWxsIGJlIHN1cHBvcnRlZCBpbiBhbGwgMTYueCByZWxlYXNlcywgYnV0IGFwcGxpY2F0aW9ucyAnICsgJ3VzaW5nIGl0IHNob3VsZCBtaWdyYXRlIHRvIHRoZSBuZXcgdmVyc2lvbi4nICsgJ1xcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycgKyAnXFxuXFxuTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2xlZ2FjeS1jb250ZXh0Jywgc29ydGVkTmFtZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7XG4gIH07XG59XG5cbnZhciBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQzID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QWN0UXVldWU7IC8vIEFuIGVycm9yIHRoYXQgaXMgdGhyb3duIChlLmcuIGJ5IGB1c2VgKSB0byB0cmlnZ2VyIFN1c3BlbnNlLiBJZiB3ZVxuLy8gZGV0ZWN0IHRoaXMgaXMgY2F1Z2h0IGJ5IHVzZXJzcGFjZSwgd2UnbGwgbG9nIGEgd2FybmluZyBpbiBkZXZlbG9wbWVudC5cblxudmFyIFN1c3BlbnNlRXhjZXB0aW9uID0gbmV3IEVycm9yKFwiU3VzcGVuc2UgRXhjZXB0aW9uOiBUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IhIEl0J3MgYW4gaW1wbGVtZW50YXRpb24gXCIgKyAnZGV0YWlsIG9mIGB1c2VgIHRvIGludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIuIFlvdSBtdXN0IGVpdGhlciAnICsgJ3JldGhyb3cgaXQgaW1tZWRpYXRlbHksIG9yIG1vdmUgdGhlIGB1c2VgIGNhbGwgb3V0c2lkZSBvZiB0aGUgJyArICdgdHJ5L2NhdGNoYCBibG9jay4gQ2FwdHVyaW5nIHdpdGhvdXQgcmV0aHJvd2luZyB3aWxsIGxlYWQgdG8gJyArICd1bmV4cGVjdGVkIGJlaGF2aW9yLlxcblxcbicgKyAnVG8gaGFuZGxlIGFzeW5jIGVycm9ycywgd3JhcCB5b3VyIGNvbXBvbmVudCBpbiBhbiBlcnJvciBib3VuZGFyeSwgb3IgJyArIFwiY2FsbCB0aGUgcHJvbWlzZSdzIGAuY2F0Y2hgIG1ldGhvZCBhbmQgcGFzcyB0aGUgcmVzdWx0IHRvIGB1c2VgXCIpO1xudmFyIFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvbiA9IG5ldyBFcnJvcignU3VzcGVuc2UgRXhjZXB0aW9uOiBUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IsIGFuZCBzaG91bGQgbm90IGxlYWsgaW50byAnICsgXCJ1c2Vyc3BhY2UuIElmIHlvdSdyZSBzZWVpbmcgdGhpcywgaXQncyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuXCIpOyAvLyBUaGlzIGlzIGEgbm9vcCB0aGVuYWJsZSB0aGF0IHdlIHVzZSB0byB0cmlnZ2VyIGEgZmFsbGJhY2sgaW4gdGhyb3dFeGNlcHRpb24uXG4vLyBUT0RPOiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gcmVmYWN0b3IgdGhyb3dFeGNlcHRpb24gaW50byBtdWx0aXBsZSBmdW5jdGlvbnNcbi8vIHNvIHdlIGNhbiB0cmlnZ2VyIGEgZmFsbGJhY2sgZGlyZWN0bHkgd2l0aG91dCBoYXZpbmcgdG8gY2hlY2sgdGhlIHR5cGUuIEJ1dFxuLy8gZm9yIG5vdyB0aGlzIHdpbGwgZG8uXG5cbnZhciBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUgPSB7XG4gIHRoZW46IGZ1bmN0aW9uICgpIHtcbiAgICB7XG4gICAgICBlcnJvcignSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEEgbGlzdGVuZXIgd2FzIHVuZXhwZWN0ZWRseSBhdHRhY2hlZCB0byBhICcgKyAnXCJub29wXCIgdGhlbmFibGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVRoZW5hYmxlU3RhdGUoKSB7XG4gIC8vIFRoZSBUaGVuYWJsZVN0YXRlIGlzIGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUgYSBjb21wb25lbnQgc3VzcGVuZHMuIElmIGl0XG4gIC8vIHN1c3BlbmRzIGFnYWluLCB3ZSdsbCByZXVzZSB0aGUgc2FtZSBzdGF0ZS5cbiAgcmV0dXJuIFtdO1xufVxuZnVuY3Rpb24gaXNUaGVuYWJsZVJlc29sdmVkKHRoZW5hYmxlKSB7XG4gIHZhciBzdGF0dXMgPSB0aGVuYWJsZS5zdGF0dXM7XG4gIHJldHVybiBzdGF0dXMgPT09ICdmdWxmaWxsZWQnIHx8IHN0YXR1cyA9PT0gJ3JlamVjdGVkJztcbn1cblxuZnVuY3Rpb24gbm9vcCQyKCkge31cblxuZnVuY3Rpb24gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSwgdGhlbmFibGUsIGluZGV4KSB7XG4gIGlmIChSZWFjdEN1cnJlbnRBY3RRdWV1ZSQzLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQzLmRpZFVzZVByb21pc2UgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHByZXZpb3VzID0gdGhlbmFibGVTdGF0ZVtpbmRleF07XG5cbiAgaWYgKHByZXZpb3VzID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGVuYWJsZVN0YXRlLnB1c2godGhlbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcmV2aW91cyAhPT0gdGhlbmFibGUpIHtcbiAgICAgIC8vIFJldXNlIHRoZSBwcmV2aW91cyB0aGVuYWJsZSwgYW5kIGRyb3AgdGhlIG5ldyBvbmUuIFdlIGNhbiBhc3N1bWVcbiAgICAgIC8vIHRoZXkgcmVwcmVzZW50IHRoZSBzYW1lIHZhbHVlLCBiZWNhdXNlIGNvbXBvbmVudHMgYXJlIGlkZW1wb3RlbnQuXG4gICAgICAvLyBBdm9pZCBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uIGVycm9ycyBmb3IgdGhlIFByb21pc2VzIHRoYXQgd2UnbGxcbiAgICAgIC8vIGludGVudGlvbmFsbHkgaWdub3JlLlxuICAgICAgdGhlbmFibGUudGhlbihub29wJDIsIG5vb3AkMik7XG4gICAgICB0aGVuYWJsZSA9IHByZXZpb3VzO1xuICAgIH1cbiAgfSAvLyBXZSB1c2UgYW4gZXhwYW5kbyB0byB0cmFjayB0aGUgc3RhdHVzIGFuZCByZXN1bHQgb2YgYSB0aGVuYWJsZSBzbyB0aGF0IHdlXG4gIC8vIGNhbiBzeW5jaHJvbm91c2x5IHVud3JhcCB0aGUgdmFsdWUuIFRoaW5rIG9mIHRoaXMgYXMgYW4gZXh0ZW5zaW9uIG9mIHRoZVxuICAvLyBQcm9taXNlIEFQSSwgb3IgYSBjdXN0b20gaW50ZXJmYWNlIHRoYXQgaXMgYSBzdXBlcnNldCBvZiBUaGVuYWJsZS5cbiAgLy9cbiAgLy8gSWYgdGhlIHRoZW5hYmxlIGRvZXNuJ3QgaGF2ZSBhIHN0YXR1cywgc2V0IGl0IHRvIFwicGVuZGluZ1wiIGFuZCBhdHRhY2hcbiAgLy8gYSBsaXN0ZW5lciB0aGF0IHdpbGwgdXBkYXRlIGl0cyBzdGF0dXMgYW5kIHJlc3VsdCB3aGVuIGl0IHJlc29sdmVzLlxuXG5cbiAgc3dpdGNoICh0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICBjYXNlICdmdWxmaWxsZWQnOlxuICAgICAge1xuICAgICAgICB2YXIgZnVsZmlsbGVkVmFsdWUgPSB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZFZhbHVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAncmVqZWN0ZWQnOlxuICAgICAge1xuICAgICAgICB2YXIgcmVqZWN0ZWRFcnJvciA9IHRoZW5hYmxlLnJlYXNvbjtcbiAgICAgICAgY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2gocmVqZWN0ZWRFcnJvcik7XG4gICAgICAgIHRocm93IHJlamVjdGVkRXJyb3I7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHRoZW5hYmxlLnN0YXR1cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyBPbmx5IGluc3RydW1lbnQgdGhlIHRoZW5hYmxlIGlmIHRoZSBzdGF0dXMgaWYgbm90IGRlZmluZWQuIElmXG4gICAgICAgICAgLy8gaXQncyBkZWZpbmVkLCBidXQgYW4gdW5rbm93biB2YWx1ZSwgYXNzdW1lIGl0J3MgYmVlbiBpbnN0cnVtZW50ZWQgYnlcbiAgICAgICAgICAvLyBzb21lIGN1c3RvbSB1c2Vyc3BhY2UgaW1wbGVtZW50YXRpb24uIFdlIHRyZWF0IGl0IGFzIFwicGVuZGluZ1wiLlxuICAgICAgICAgIC8vIEF0dGFjaCBhIGR1bW15IGxpc3RlbmVyLCB0byBlbnN1cmUgdGhhdCBhbnkgbGF6eSBpbml0aWFsaXphdGlvbiBjYW5cbiAgICAgICAgICAvLyBoYXBwZW4uIEZsaWdodCBsYXppbHkgcGFyc2VzIEpTT04gd2hlbiB0aGUgdmFsdWUgaXMgYWN0dWFsbHkgYXdhaXRlZC5cbiAgICAgICAgICB0aGVuYWJsZS50aGVuKG5vb3AkMiwgbm9vcCQyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGFuIHVuY2FjaGVkIHRoZW5hYmxlIHRoYXQgd2UgaGF2ZW4ndCBzZWVuIGJlZm9yZS5cbiAgICAgICAgICAvLyBEZXRlY3QgaW5maW5pdGUgcGluZyBsb29wcyBjYXVzZWQgYnkgdW5jYWNoZWQgcHJvbWlzZXMuXG4gICAgICAgICAgdmFyIHJvb3QgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKTtcblxuICAgICAgICAgIGlmIChyb290ICE9PSBudWxsICYmIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlciA+IDEwMCkge1xuICAgICAgICAgICAgLy8gVGhpcyByb290IGhhcyBzdXNwZW5kZWQgcmVwZWF0ZWRseSBpbiB0aGUgc2hlbGwgd2l0aG91dCBtYWtpbmcgYW55XG4gICAgICAgICAgICAvLyBwcm9ncmVzcyAoaS5lLiBjb21taXR0aW5nIHNvbWV0aGluZykuIFRoaXMgaXMgaGlnaGx5IHN1Z2dlc3RpdmUgb2ZcbiAgICAgICAgICAgIC8vIGFuIGluZmluaXRlIHBpbmcgbG9vcCwgb2Z0ZW4gY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgQXN5bmMgQ2xpZW50XG4gICAgICAgICAgICAvLyBDb21wb25lbnQuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gRHVyaW5nIGEgdHJhbnNpdGlvbiwgd2UgY2FuIHN1c3BlbmQgdGhlIHdvcmsgbG9vcCB1bnRpbCB0aGUgcHJvbWlzZVxuICAgICAgICAgICAgLy8gdG8gcmVzb2x2ZSwgYnV0IHRoaXMgaXMgYSBzeW5jIHJlbmRlciwgc28gdGhhdCdzIG5vdCBhbiBvcHRpb24uIFdlXG4gICAgICAgICAgICAvLyBhbHNvIGNhbid0IHNob3cgYSBmYWxsYmFjaywgYmVjYXVzZSBub25lIHdhcyBwcm92aWRlZC4gU28gb3VyIGxhc3RcbiAgICAgICAgICAgIC8vIHJlc29ydCBpcyB0byB0aHJvdyBhbiBlcnJvci5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBlcnJvciBpbiBhIGZ1dHVyZSByZWxlYXNlLiBPdGhlciB3YXlzIG9mIGhhbmRsaW5nXG4gICAgICAgICAgICAvLyB0aGlzIGNhc2UgaW5jbHVkZSBmb3JjaW5nIGEgY29uY3VycmVudCByZW5kZXIsIG9yIHB1dHRpbmcgdGhlIHdob2xlXG4gICAgICAgICAgICAvLyByb290IGludG8gb2Zmc2NyZWVuIG1vZGUuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jL2F3YWl0IGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGluIENsaWVudCBDb21wb25lbnRzLCBvbmx5ICcgKyAnU2VydmVyIENvbXBvbmVudHMuIFRoaXMgZXJyb3IgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGFjY2lkZW50YWxseSAnICsgXCJhZGRpbmcgYCd1c2UgY2xpZW50J2AgdG8gYSBtb2R1bGUgdGhhdCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIFwiICsgJ2ZvciB0aGUgc2VydmVyLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBwZW5kaW5nVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICBwZW5kaW5nVGhlbmFibGUuc3RhdHVzID0gJ3BlbmRpbmcnO1xuICAgICAgICAgIHBlbmRpbmdUaGVuYWJsZS50aGVuKGZ1bmN0aW9uIChmdWxmaWxsZWRWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoZW5hYmxlLnN0YXR1cyA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgICAgIHZhciBmdWxmaWxsZWRUaGVuYWJsZSA9IHRoZW5hYmxlO1xuICAgICAgICAgICAgICBmdWxmaWxsZWRUaGVuYWJsZS5zdGF0dXMgPSAnZnVsZmlsbGVkJztcbiAgICAgICAgICAgICAgZnVsZmlsbGVkVGhlbmFibGUudmFsdWUgPSBmdWxmaWxsZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGVuYWJsZS5zdGF0dXMgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICB2YXIgcmVqZWN0ZWRUaGVuYWJsZSA9IHRoZW5hYmxlO1xuICAgICAgICAgICAgICByZWplY3RlZFRoZW5hYmxlLnN0YXR1cyA9ICdyZWplY3RlZCc7XG4gICAgICAgICAgICAgIHJlamVjdGVkVGhlbmFibGUucmVhc29uID0gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7IC8vIENoZWNrIG9uZSBtb3JlIHRpbWUgaW4gY2FzZSB0aGUgdGhlbmFibGUgcmVzb2x2ZWQgc3luY2hyb25vdXNseS5cblxuICAgICAgICAgIHN3aXRjaCAodGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgICAgICBjYXNlICdmdWxmaWxsZWQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bGZpbGxlZFRoZW5hYmxlID0gdGhlbmFibGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGZpbGxlZFRoZW5hYmxlLnZhbHVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ3JlamVjdGVkJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciByZWplY3RlZFRoZW5hYmxlID0gdGhlbmFibGU7XG4gICAgICAgICAgICAgICAgdmFyIF9yZWplY3RlZEVycm9yID0gcmVqZWN0ZWRUaGVuYWJsZS5yZWFzb247XG4gICAgICAgICAgICAgICAgY2hlY2tJZlVzZVdyYXBwZWRJbkFzeW5jQ2F0Y2goX3JlamVjdGVkRXJyb3IpO1xuICAgICAgICAgICAgICAgIHRocm93IF9yZWplY3RlZEVycm9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFN1c3BlbmQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRocm93aW5nIGhlcmUgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIHRoYXQgYWxsb3dzIHVzIHRvIHVud2luZCB0aGVcbiAgICAgICAgLy8gY2FsbCBzdGFjay4gQnV0IHdlIHNob3VsZG4ndCBhbGxvdyBpdCB0byBsZWFrIGludG8gdXNlcnNwYWNlLiBUaHJvdyBhblxuICAgICAgICAvLyBvcGFxdWUgcGxhY2Vob2xkZXIgdmFsdWUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIHRoZW5hYmxlLiBJZiBpdCBkb2Vzbid0XG4gICAgICAgIC8vIGdldCBjYXB0dXJlZCBieSB0aGUgd29yayBsb29wLCBsb2cgYSB3YXJuaW5nLCBiZWNhdXNlIHRoYXQgbWVhbnNcbiAgICAgICAgLy8gc29tZXRoaW5nIGluIHVzZXJzcGFjZSBtdXN0IGhhdmUgY2F1Z2h0IGl0LlxuXG5cbiAgICAgICAgc3VzcGVuZGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcblxuICAgICAgICB7XG4gICAgICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgU3VzcGVuc2VFeGNlcHRpb247XG4gICAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHN1c3BlbmRDb21taXQoKSB7XG4gIC8vIFRoaXMgZXh0cmEgaW5kaXJlY3Rpb24gb25seSBleGlzdHMgc28gaXQgY2FuIGhhbmRsZSBwYXNzaW5nXG4gIC8vIG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZSB0aHJvdWdoIHRvIHRocm93RXhjZXB0aW9uLlxuICAvLyBUT0RPOiBGYWN0b3IgdGhlIHRoZW5hYmxlIGNoZWNrIG91dCBvZiB0aHJvd0V4Y2VwdGlvblxuICBzdXNwZW5kZWRUaGVuYWJsZSA9IG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZTtcbiAgdGhyb3cgU3VzcGVuc2V5Q29tbWl0RXhjZXB0aW9uO1xufSAvLyBUaGlzIGlzIHVzZWQgdG8gdHJhY2sgdGhlIGFjdHVhbCB0aGVuYWJsZSB0aGF0IHN1c3BlbmRlZCBzbyBpdCBjYW4gYmVcbi8vIHBhc3NlZCB0byB0aGUgcmVzdCBvZiB0aGUgU3VzcGVuc2UgaW1wbGVtZW50YXRpb24g4oCUIHdoaWNoLCBmb3IgaGlzdG9yaWNhbFxuLy8gcmVhc29ucywgZXhwZWN0cyB0byByZWNlaXZlIGEgdGhlbmFibGUuXG5cbnZhciBzdXNwZW5kZWRUaGVuYWJsZSA9IG51bGw7XG52YXIgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldFN1c3BlbmRlZFRoZW5hYmxlKCkge1xuICAvLyBUaGlzIGlzIGNhbGxlZCByaWdodCBhZnRlciBgdXNlYCBzdXNwZW5kcyBieSB0aHJvd2luZyBhbiBleGNlcHRpb24uIGB1c2VgXG4gIC8vIHRocm93cyBhbiBvcGFxdWUgdmFsdWUgaW5zdGVhZCBvZiB0aGUgdGhlbmFibGUgaXRzZWxmIHNvIHRoYXQgaXQgY2FuJ3QgYmVcbiAgLy8gY2F1Z2h0IGluIHVzZXJzcGFjZS4gVGhlbiB0aGUgd29yayBsb29wIGFjY2Vzc2VzIHRoZSBhY3R1YWwgdGhlbmFibGUgdXNpbmdcbiAgLy8gdGhpcyBmdW5jdGlvbi5cbiAgaWYgKHN1c3BlbmRlZFRoZW5hYmxlID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHN1c3BlbmRlZCB0aGVuYWJsZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgJyArICdhbiBpc3N1ZS4nKTtcbiAgfVxuXG4gIHZhciB0aGVuYWJsZSA9IHN1c3BlbmRlZFRoZW5hYmxlO1xuICBzdXNwZW5kZWRUaGVuYWJsZSA9IG51bGw7XG5cbiAge1xuICAgIG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdGhlbmFibGU7XG59XG5mdW5jdGlvbiBjaGVja0lmVXNlV3JhcHBlZEluVHJ5Q2F0Y2goKSB7XG4gIHtcbiAgICAvLyBUaGlzIHdhcyBzZXQgcmlnaHQgYmVmb3JlIFN1c3BlbnNlRXhjZXB0aW9uIHdhcyB0aHJvd24sIGFuZCBpdCBzaG91bGRcbiAgICAvLyBoYXZlIGJlZW4gY2xlYXJlZCB3aGVuIHRoZSBleGNlcHRpb24gd2FzIGhhbmRsZWQuIElmIGl0IHdhc24ndCxcbiAgICAvLyBpdCBtdXN0IGhhdmUgYmVlbiBjYXVnaHQgYnkgdXNlcnNwYWNlLlxuICAgIGlmIChuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFVikge1xuICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNoZWNrSWZVc2VXcmFwcGVkSW5Bc3luY0NhdGNoKHJlamVjdGVkUmVhc29uKSB7XG4gIC8vIFRoaXMgY2hlY2sgcnVucyBpbiBwcm9kLCB0b28sIGJlY2F1c2UgaXQgcHJldmVudHMgYSBtb3JlIGNvbmZ1c2luZ1xuICAvLyBkb3duc3RyZWFtIGVycm9yLCB3aGVyZSBTdXNwZW5zZUV4Y2VwdGlvbiBpcyBjYXVnaHQgYnkgYSBwcm9taXNlIGFuZFxuICAvLyB0aHJvd24gYXN5bmNocm9ub3VzbHkuXG4gIC8vIFRPRE86IEFub3RoZXIgd2F5IHRvIHByZXZlbnQgU3VzcGVuc2VFeGNlcHRpb24gZnJvbSBsZWFraW5nIGludG8gYW4gYXN5bmNcbiAgLy8gZXhlY3V0aW9uIGNvbnRleHQgaXMgdG8gY2hlY2sgdGhlIGRpc3BhdGNoZXIgZXZlcnkgdGltZSBgdXNlYCBpcyBjYWxsZWQsXG4gIC8vIG9yIHNvbWUgZXF1aXZhbGVudC4gVGhhdCBtaWdodCBiZSBwcmVmZXJhYmxlIGZvciBvdGhlciByZWFzb25zLCB0b28sIHNpbmNlXG4gIC8vIGl0IG1hdGNoZXMgaG93IHdlIHByZXZlbnQgc2ltaWxhciBtaXN0YWtlcyBmb3Igb3RoZXIgaG9va3MuXG4gIGlmIChyZWplY3RlZFJlYXNvbiA9PT0gU3VzcGVuc2VFeGNlcHRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0hvb2tzIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBhbiBhc3luYyBjb21wb25lbnQuIFRoaXMgJyArIFwiZXJyb3IgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGFjY2lkZW50YWxseSBhZGRpbmcgYCd1c2UgY2xpZW50J2AgXCIgKyAndG8gYSBtb2R1bGUgdGhhdCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGZvciB0aGUgc2VydmVyLicpO1xuICB9XG59XG5cbnZhciB0aGVuYWJsZVN0YXRlJDEgPSBudWxsO1xudmFyIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwO1xudmFyIGRpZFdhcm5BYm91dE1hcHM7XG52YXIgZGlkV2FybkFib3V0R2VuZXJhdG9ycztcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xudmFyIG93bmVySGFzS2V5VXNlV2FybmluZztcbnZhciBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmc7XG5cbnZhciB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHt9O1xuXG57XG4gIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG4gIC8qKlxuICAgKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gICAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICAgKiB1cGRhdGVzLlxuICAgKi9cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0ge307XG5cbiAgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQsIHJldHVybkZpYmVyKSB7XG4gICAgaWYgKGNoaWxkID09PSBudWxsIHx8IHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNoaWxkLl9zdG9yZSB8fCBjaGlsZC5fc3RvcmUudmFsaWRhdGVkIHx8IGNoaWxkLmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjaGlsZC5fc3RvcmUgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0IENvbXBvbmVudCBpbiB3YXJuRm9yTWlzc2luZ0tleSBzaG91bGQgaGF2ZSBhIF9zdG9yZS4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH0gLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIHVuYWJsZSB0byBuYXJyb3cgdHlwZSBmcm9tIG1peGVkIHRvIHdyaXRhYmxlIG9iamVjdFxuXG5cbiAgICBjaGlsZC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIocmV0dXJuRmliZXIpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnROYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgJyArICdcImtleVwiIHByb3AuIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciAnICsgJ21vcmUgaW5mb3JtYXRpb24uJyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzUmVhY3RDbGFzcyh0eXBlKSB7XG4gIHJldHVybiB0eXBlLnByb3RvdHlwZSAmJiB0eXBlLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50O1xufVxuXG5mdW5jdGlvbiB1bndyYXBUaGVuYWJsZSh0aGVuYWJsZSkge1xuICB2YXIgaW5kZXggPSB0aGVuYWJsZUluZGV4Q291bnRlciQxO1xuICB0aGVuYWJsZUluZGV4Q291bnRlciQxICs9IDE7XG5cbiAgaWYgKHRoZW5hYmxlU3RhdGUkMSA9PT0gbnVsbCkge1xuICAgIHRoZW5hYmxlU3RhdGUkMSA9IGNyZWF0ZVRoZW5hYmxlU3RhdGUoKTtcbiAgfVxuXG4gIHJldHVybiB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlJDEsIHRoZW5hYmxlLCBpbmRleCk7XG59XG5cbmZ1bmN0aW9uIGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCkge1xuICB2YXIgbWl4ZWRSZWYgPSBlbGVtZW50LnJlZjtcblxuICBpZiAobWl4ZWRSZWYgIT09IG51bGwgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICBpZiAoIC8vIFdlIHdhcm4gaW4gUmVhY3RFbGVtZW50LmpzIGlmIG93bmVyIGFuZCBzZWxmIGFyZSBlcXVhbCBmb3Igc3RyaW5nIHJlZnNcbiAgICAgIC8vIGJlY2F1c2UgdGhlc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uXG4gICAgICAvLyB1c2luZyBhIGNvZGVtb2QuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgaGF2ZSB0byB3YXJuIGFib3V0IHN0cmluZyByZWZzIGFnYWluLlxuICAgICAgIShlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9zZWxmICYmIGVsZW1lbnQuX293bmVyLnN0YXRlTm9kZSAhPT0gZWxlbWVudC5fc2VsZikgJiYgLy8gV2lsbCBhbHJlYWR5IHRocm93IHdpdGggXCJGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBoYXZlIHN0cmluZyByZWZzXCJcbiAgICAgICEoZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fb3duZXIudGFnICE9PSBDbGFzc0NvbXBvbmVudCkgJiYgLy8gV2lsbCBhbHJlYWR5IHdhcm4gd2l0aCBcIkZ1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGJlIGdpdmVuIHJlZnNcIlxuICAgICAgISh0eXBlb2YgZWxlbWVudC50eXBlID09PSAnZnVuY3Rpb24nICYmICFpc1JlYWN0Q2xhc3MoZWxlbWVudC50eXBlKSkgJiYgLy8gV2lsbCBhbHJlYWR5IHRocm93IHdpdGggXCJFbGVtZW50IHJlZiB3YXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChzb21lU3RyaW5nUmVmKSBidXQgbm8gb3duZXIgd2FzIHNldFwiXG4gICAgICBlbGVtZW50Ll9vd25lcikge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIocmV0dXJuRmliZXIpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgJyArICd3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gV2UgcmVjb21tZW5kIHVzaW5nICcgKyAndXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBjb21wb25lbnROYW1lLCBtaXhlZFJlZik7XG5cbiAgICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbGVtZW50Ll9vd25lcikge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgaW5zdDtcblxuICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG5cbiAgICAgICAgaWYgKG93bmVyRmliZXIudGFnICE9PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgaGF2ZSBzdHJpbmcgcmVmcy4gJyArICdXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluc3QgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpbnN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgb3duZXIgZm9yIHN0cmluZyByZWYgXCIgKyBtaXhlZFJlZiArIFwiLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBcIiArICdidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgfSAvLyBBc3NpZ25pbmcgdGhpcyB0byBhIGNvbnN0IHNvIEZsb3cga25vd3MgaXQgd29uJ3QgY2hhbmdlIGluIHRoZSBjbG9zdXJlXG5cblxuICAgICAgdmFyIHJlc29sdmVkSW5zdCA9IGluc3Q7XG5cbiAgICAgIHtcbiAgICAgICAgY2hlY2tQcm9wU3RyaW5nQ29lcmNpb24obWl4ZWRSZWYsICdyZWYnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0cmluZ1JlZiA9ICcnICsgbWl4ZWRSZWY7IC8vIENoZWNrIGlmIHByZXZpb3VzIHN0cmluZyByZWYgbWF0Y2hlcyBuZXcgc3RyaW5nIHJlZlxuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gbnVsbCAmJiB0eXBlb2YgY3VycmVudC5yZWYgPT09ICdmdW5jdGlvbicgJiYgY3VycmVudC5yZWYuX3N0cmluZ1JlZiA9PT0gc3RyaW5nUmVmKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50LnJlZjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVmcyA9IHJlc29sdmVkSW5zdC5yZWZzO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZSByZWZzW3N0cmluZ1JlZl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmc1tzdHJpbmdSZWZdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJlZi5fc3RyaW5nUmVmID0gc3RyaW5nUmVmO1xuICAgICAgcmV0dXJuIHJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBtaXhlZFJlZiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFlbGVtZW50Ll9vd25lcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IHJlZiB3YXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChcIiArIG1peGVkUmVmICsgXCIpIGJ1dCBubyBvd25lciB3YXMgc2V0LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mXCIgKyAnIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4nICsgJzEuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgZnVuY3Rpb24gY29tcG9uZW50XFxuJyArIFwiMi4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50J3MgcmVuZGVyIG1ldGhvZFxcblwiICsgJzMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG4nICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVmcy1tdXN0LWhhdmUtb3duZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1peGVkUmVmO1xufVxuXG5mdW5jdGlvbiB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKSB7XG4gIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgdmFyIGNoaWxkU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0NoaWxkKTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChjaGlsZFN0cmluZyA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKCcsICcpICsgJ30nIDogY2hpbGRTdHJpbmcpICsgXCIpLiBcIiArICdJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5ICcgKyAnaW5zdGVhZC4nKTtcbn1cblxuZnVuY3Rpb24gd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKSB7XG4gIHtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIocmV0dXJuRmliZXIpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgaWYgKG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1tjb21wb25lbnROYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1tjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignRnVuY3Rpb25zIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC4gVGhpcyBtYXkgaGFwcGVuIGlmICcgKyAneW91IHJldHVybiBhIENvbXBvbmVudCBpbnN0ZWFkIG9mIDxDb21wb25lbnQgLz4gZnJvbSByZW5kZXIuICcgKyAnT3IgbWF5YmUgeW91IG1lYW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiByZXR1cm4gaXQuJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUxhenkobGF6eVR5cGUpIHtcbiAgdmFyIHBheWxvYWQgPSBsYXp5VHlwZS5fcGF5bG9hZDtcbiAgdmFyIGluaXQgPSBsYXp5VHlwZS5faW5pdDtcbiAgcmV0dXJuIGluaXQocGF5bG9hZCk7XG59IC8vIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBleGlzdHMgYmVjYXVzZSBJIGV4cGVjdCB0byBjbG9uZSB0aGUgY29kZSBpbiBlYWNoIHBhdGhcbi8vIHRvIGJlIGFibGUgdG8gb3B0aW1pemUgZWFjaCBwYXRoIGluZGl2aWR1YWxseSBieSBicmFuY2hpbmcgZWFybHkuIFRoaXMgbmVlZHNcbi8vIGEgY29tcGlsZXIgb3Igd2UgY2FuIGRvIGl0IG1hbnVhbGx5LiBIZWxwZXJzIHRoYXQgZG9uJ3QgbmVlZCB0aGlzIGJyYW5jaGluZ1xuLy8gbGl2ZSBvdXRzaWRlIG9mIHRoaXMgZnVuY3Rpb24uXG5cblxuZnVuY3Rpb24gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgZnVuY3Rpb24gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGRlbGV0aW9ucyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcblxuICAgIGlmIChkZWxldGlvbnMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybkZpYmVyLmRlbGV0aW9ucyA9IFtjaGlsZFRvRGVsZXRlXTtcbiAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IENoaWxkRGVsZXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0aW9ucy5wdXNoKGNoaWxkVG9EZWxldGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gVE9ETzogRm9yIHRoZSBzaG91bGRDbG9uZSBjYXNlLCB0aGlzIGNvdWxkIGJlIG1pY3JvLW9wdGltaXplZCBhIGJpdCBieVxuICAgIC8vIGFzc3VtaW5nIHRoYXQgYWZ0ZXIgdGhlIGZpcnN0IGNoaWxkIHdlJ3ZlIGFscmVhZHkgYWRkZWQgZXZlcnl0aGluZy5cblxuXG4gICAgdmFyIGNoaWxkVG9EZWxldGUgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZFRvRGVsZXRlICE9PSBudWxsKSB7XG4gICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSk7XG4gICAgICBjaGlsZFRvRGVsZXRlID0gY2hpbGRUb0RlbGV0ZS5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgLy8gQWRkIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdG8gYSB0ZW1wb3JhcnkgbWFwIHNvIHRoYXQgd2UgY2FuIGZpbmQgdGhlbSBieVxuICAgIC8vIGtleXMgcXVpY2tseS4gSW1wbGljaXQgKG51bGwpIGtleXMgZ2V0IGFkZGVkIHRvIHRoaXMgc2V0IHdpdGggdGhlaXIgaW5kZXhcbiAgICAvLyBpbnN0ZWFkLlxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgIHZhciBleGlzdGluZ0NoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoZXhpc3RpbmdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGV4aXN0aW5nQ2hpbGQua2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQua2V5LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uc2V0KGV4aXN0aW5nQ2hpbGQuaW5kZXgsIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBleGlzdGluZ0NoaWxkID0gZXhpc3RpbmdDaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICB9XG5cbiAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcykge1xuICAgIC8vIFdlIGN1cnJlbnRseSBzZXQgc2libGluZyB0byBudWxsIGFuZCBpbmRleCB0byAwIGhlcmUgYmVjYXVzZSBpdCBpcyBlYXN5XG4gICAgLy8gdG8gZm9yZ2V0IHRvIGRvIGJlZm9yZSByZXR1cm5pbmcgaXQuIEUuZy4gZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS5cbiAgICB2YXIgY2xvbmUgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhmaWJlciwgcGVuZGluZ1Byb3BzKTtcbiAgICBjbG9uZS5pbmRleCA9IDA7XG4gICAgY2xvbmUuc2libGluZyA9IG51bGw7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJbmRleCkge1xuICAgIG5ld0ZpYmVyLmluZGV4ID0gbmV3SW5kZXg7XG5cbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIER1cmluZyBoeWRyYXRpb24sIHRoZSB1c2VJZCBhbGdvcml0aG0gbmVlZHMgdG8ga25vdyB3aGljaCBmaWJlcnMgYXJlXG4gICAgICAvLyBwYXJ0IG9mIGEgbGlzdCBvZiBjaGlsZHJlbiAoYXJyYXlzLCBpdGVyYXRvcnMpLlxuICAgICAgbmV3RmliZXIuZmxhZ3MgfD0gRm9ya2VkO1xuICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudCA9IG5ld0ZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgb2xkSW5kZXggPSBjdXJyZW50LmluZGV4O1xuXG4gICAgICBpZiAob2xkSW5kZXggPCBsYXN0UGxhY2VkSW5kZXgpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG1vdmUuXG4gICAgICAgIG5ld0ZpYmVyLmZsYWdzIHw9IFBsYWNlbWVudCB8IFBsYWNlbWVudERFVjtcbiAgICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXRlbSBjYW4gc3RheSBpbiBwbGFjZS5cbiAgICAgICAgcmV0dXJuIG9sZEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbi5cbiAgICAgIG5ld0ZpYmVyLmZsYWdzIHw9IFBsYWNlbWVudCB8IFBsYWNlbWVudERFVjtcbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2VTaW5nbGVDaGlsZChuZXdGaWJlcikge1xuICAgIC8vIFRoaXMgaXMgc2ltcGxlciBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLiBXZSBvbmx5IG5lZWQgdG8gZG8gYVxuICAgIC8vIHBsYWNlbWVudCBmb3IgaW5zZXJ0aW5nIG5ldyBjaGlsZHJlbi5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0ZpYmVyLmZsYWdzIHw9IFBsYWNlbWVudCB8IFBsYWNlbWVudERFVjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RmliZXI7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudCwgdGV4dENvbnRlbnQsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RUZXh0KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgdmFyIGVsZW1lbnRUeXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKGVsZW1lbnRUeXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sIGxhbmVzLCBlbGVtZW50LmtleSk7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09PSBlbGVtZW50VHlwZSB8fCAoIC8vIEtlZXAgdGhpcyBjaGVjayBpbmxpbmUgc28gaXQgb25seSBydW5zIG9uIHRoZSBmYWxzZSBwYXRoOlxuICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGN1cnJlbnQsIGVsZW1lbnQpICkgfHwgLy8gTGF6eSB0eXBlcyBzaG91bGQgcmVjb25jaWxlIHRoZWlyIHJlc29sdmVkIHR5cGUuXG4gICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgYWZ0ZXIgdGhlIEhvdCBSZWxvYWRpbmcgY2hlY2sgYWJvdmUsXG4gICAgICAvLyBiZWNhdXNlIGhvdCByZWxvYWRpbmcgaGFzIGRpZmZlcmVudCBzZW1hbnRpY3MgdGhhbiBwcm9kIGJlY2F1c2VcbiAgICAgIC8vIGl0IGRvZXNuJ3QgcmVzdXNwZW5kLiBTbyB3ZSBjYW4ndCBsZXQgdGhlIGNhbGwgYmVsb3cgc3VzcGVuZC5cbiAgICAgIHR5cGVvZiBlbGVtZW50VHlwZSA9PT0gJ29iamVjdCcgJiYgZWxlbWVudFR5cGUgIT09IG51bGwgJiYgZWxlbWVudFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSAmJiByZXNvbHZlTGF6eShlbGVtZW50VHlwZSkgPT09IGN1cnJlbnQudHlwZSkge1xuICAgICAgICAvLyBNb3ZlIGJhc2VkIG9uIGluZGV4XG4gICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGVsZW1lbnQucHJvcHMpO1xuICAgICAgICBleGlzdGluZy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICB9XG4gICAgfSAvLyBJbnNlcnRcblxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudCwgcG9ydGFsLCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBIb3N0UG9ydGFsIHx8IGN1cnJlbnQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gIT09IHBvcnRhbC5jb250YWluZXJJbmZvIHx8IGN1cnJlbnQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uICE9PSBwb3J0YWwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBmcmFnbWVudCwgbGFuZXMsIGtleSkge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBGcmFnbWVudCkge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZyYWdtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywga2V5KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBmcmFnbWVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgJiYgbmV3Q2hpbGQgIT09ICcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCgnJyArIG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICAgICAgICBfY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIG51bGwsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIF9jcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZDIgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQyLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVkMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBuZXdDaGlsZC5fcGF5bG9hZDtcbiAgICAgICAgICAgIHZhciBpbml0ID0gbmV3Q2hpbGQuX2luaXQ7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIGluaXQocGF5bG9hZCksIGxhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5KG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICB2YXIgX2NyZWF0ZWQzID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBudWxsKTtcblxuICAgICAgICBfY3JlYXRlZDMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIHJldHVybiBfY3JlYXRlZDM7XG4gICAgICB9IC8vIFVzYWJsZSBub2RlIHR5cGVzXG4gICAgICAvL1xuICAgICAgLy8gVW53cmFwIHRoZSBpbm5lciB2YWx1ZSBhbmQgcmVjdXJzaXZlbHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluLlxuXG5cbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgdGhlbmFibGUgPSBuZXdDaGlsZDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCB1bndyYXBUaGVuYWJsZSh0aGVuYWJsZSksIGxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld0NoaWxkLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgbmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX1NFUlZFUl9DT05URVhUX1RZUEUpIHtcbiAgICAgICAgdmFyIGNvbnRleHQgPSBuZXdDaGlsZDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsYXRpb24ocmV0dXJuRmliZXIsIGNvbnRleHQsIGxhbmVzKSwgbGFuZXMpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgLy8gVXBkYXRlIHRoZSBmaWJlciBpZiB0aGUga2V5cyBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiBudWxsLlxuICAgIHZhciBrZXkgPSBvbGRGaWJlciAhPT0gbnVsbCA/IG9sZEZpYmVyLmtleSA6IG51bGw7XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyAmJiBuZXdDaGlsZCAhPT0gJycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBvbGRGaWJlciwgJycgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBuZXdDaGlsZC5fcGF5bG9hZDtcbiAgICAgICAgICAgIHZhciBpbml0ID0gbmV3Q2hpbGQuX2luaXQ7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIGluaXQocGF5bG9hZCksIGxhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5KG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfSAvLyBVc2FibGUgbm9kZSB0eXBlc1xuICAgICAgLy9cbiAgICAgIC8vIFVud3JhcCB0aGUgaW5uZXIgdmFsdWUgYW5kIHJlY3Vyc2l2ZWx5IGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2Fpbi5cblxuXG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIHRoZW5hYmxlID0gbmV3Q2hpbGQ7XG4gICAgICAgIHJldHVybiB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgdW53cmFwVGhlbmFibGUodGhlbmFibGUpLCBsYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IG5ld0NoaWxkLiQkdHlwZW9mID09PSBSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFKSB7XG4gICAgICAgIHZhciBjb250ZXh0ID0gbmV3Q2hpbGQ7XG4gICAgICAgIHJldHVybiB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGF0aW9uKHJldHVybkZpYmVyLCBjb250ZXh0LCBsYW5lcyksIGxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyAmJiBuZXdDaGlsZCAhPT0gJycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMsIHNvIHdlIG5laXRoZXIgaGF2ZSB0byBjaGVjayB0aGUgb2xkIG5vclxuICAgICAgLy8gbmV3IG5vZGUgZm9yIHRoZSBrZXkuIElmIGJvdGggYXJlIHRleHQgbm9kZXMsIHRoZXkgbWF0Y2guXG4gICAgICB2YXIgbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBtYXRjaGVkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMiwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBuZXdDaGlsZC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IG5ld0NoaWxkLl9pbml0O1xuICAgICAgICAgIHJldHVybiB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIGluaXQocGF5bG9hZCksIGxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMyA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIzLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfSAvLyBVc2FibGUgbm9kZSB0eXBlc1xuICAgICAgLy9cbiAgICAgIC8vIFVud3JhcCB0aGUgaW5uZXIgdmFsdWUgYW5kIHJlY3Vyc2l2ZWx5IGNhbGwgdGhpcyBmdW5jdGlvbiBhZ2Fpbi5cblxuXG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIHRoZW5hYmxlID0gbmV3Q2hpbGQ7XG4gICAgICAgIHJldHVybiB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIHVud3JhcFRoZW5hYmxlKHRoZW5hYmxlKSwgbGFuZXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCBuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfU0VSVkVSX0NPTlRFWFRfVFlQRSkge1xuICAgICAgICB2YXIgY29udGV4dCA9IG5ld0NoaWxkO1xuICAgICAgICByZXR1cm4gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsYXRpb24ocmV0dXJuRmliZXIsIGNvbnRleHQsIGxhbmVzKSwgbGFuZXMpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFdhcm5zIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIG9yIG1pc3Npbmcga2V5XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcikge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnIHx8IGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgd2FybkZvck1pc3NpbmdLZXkoY2hpbGQsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa25vd25LZXlzID09PSBudWxsKSB7XG4gICAgICAgICAgICBrbm93bktleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWtub3duS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IoJ0VuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgYCVzYC4gJyArICdLZXlzIHNob3VsZCBiZSB1bmlxdWUgc28gdGhhdCBjb21wb25lbnRzIG1haW50YWluIHRoZWlyIGlkZW50aXR5ICcgKyAnYWNyb3NzIHVwZGF0ZXMuIE5vbi11bmlxdWUga2V5cyBtYXkgY2F1c2UgY2hpbGRyZW4gdG8gYmUgJyArICdkdXBsaWNhdGVkIGFuZC9vciBvbWl0dGVkIOKAlCB0aGUgYmVoYXZpb3IgaXMgdW5zdXBwb3J0ZWQgYW5kICcgKyAnY291bGQgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uJywga2V5KTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgIHZhciBwYXlsb2FkID0gY2hpbGQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBjaGlsZC5faW5pdDtcbiAgICAgICAgICB3YXJuT25JbnZhbGlkS2V5KGluaXQocGF5bG9hZCksIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBrbm93bktleXM7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW4sIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBhbGdvcml0aG0gY2FuJ3Qgb3B0aW1pemUgYnkgc2VhcmNoaW5nIGZyb20gYm90aCBlbmRzIHNpbmNlIHdlXG4gICAgLy8gZG9uJ3QgaGF2ZSBiYWNrcG9pbnRlcnMgb24gZmliZXJzLiBJJ20gdHJ5aW5nIHRvIHNlZSBob3cgZmFyIHdlIGNhbiBnZXRcbiAgICAvLyB3aXRoIHRoYXQgbW9kZWwuIElmIGl0IGVuZHMgdXAgbm90IGJlaW5nIHdvcnRoIHRoZSB0cmFkZW9mZnMsIHdlIGNhblxuICAgIC8vIGFkZCBpdCBsYXRlci5cbiAgICAvLyBFdmVuIHdpdGggYSB0d28gZW5kZWQgb3B0aW1pemF0aW9uLCB3ZSdkIHdhbnQgdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlXG4gICAgLy8gd2hlcmUgdGhlcmUgYXJlIGZldyBjaGFuZ2VzIGFuZCBicnV0ZSBmb3JjZSB0aGUgY29tcGFyaXNvbiBpbnN0ZWFkIG9mXG4gICAgLy8gZ29pbmcgZm9yIHRoZSBNYXAuIEl0J2QgbGlrZSB0byBleHBsb3JlIGhpdHRpbmcgdGhhdCBwYXRoIGZpcnN0IGluXG4gICAgLy8gZm9yd2FyZC1vbmx5IG1vZGUgYW5kIG9ubHkgZ28gZm9yIHRoZSBNYXAgb25jZSB3ZSBub3RpY2UgdGhhdCB3ZSBuZWVkXG4gICAgLy8gbG90cyBvZiBsb29rIGFoZWFkLiBUaGlzIGRvZXNuJ3QgaGFuZGxlIHJldmVyc2FsIGFzIHdlbGwgYXMgdHdvIGVuZGVkXG4gICAgLy8gc2VhcmNoIGJ1dCB0aGF0J3MgdW51c3VhbC4gQmVzaWRlcywgZm9yIHRoZSB0d28gZW5kZWQgb3B0aW1pemF0aW9uIHRvXG4gICAgLy8gd29yayBvbiBJdGVyYWJsZXMsIHdlJ2QgbmVlZCB0byBjb3B5IHRoZSB3aG9sZSBzZXQuXG4gICAgLy8gSW4gdGhpcyBmaXJzdCBpdGVyYXRpb24sIHdlJ2xsIGp1c3QgbGl2ZSB3aXRoIGhpdHRpbmcgdGhlIGJhZCBjYXNlXG4gICAgLy8gKGFkZGluZyBldmVyeXRoaW5nIHRvIGEgTWFwKSBpbiBmb3IgZXZlcnkgaW5zZXJ0L21vdmUuXG4gICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gdXBkYXRlIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoKSB3aGljaFxuICAgIC8vIHVzZXMgdGhlIHNhbWUgYWxnb3JpdGhtLlxuICAgIHtcbiAgICAgIC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbmV3Q2hpbGRyZW5baV07XG4gICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG5cbiAgICAgIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgICAgIHZhciBudW1iZXJPZkZvcmtzID0gbmV3SWR4O1xuICAgICAgICBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG51bWJlck9mRm9ya3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgICAgICB2YXIgX251bWJlck9mRm9ya3MgPSBuZXdJZHg7XG4gICAgICAgIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgX251bWJlck9mRm9ya3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyMiA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXIyLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMiwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAgIHZhciBfbnVtYmVyT2ZGb3JrczIgPSBuZXdJZHg7XG4gICAgICBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIF9udW1iZXJPZkZvcmtzMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW5JdGVyYWJsZSwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoKSxcbiAgICAvLyBidXQgdXNpbmcgdGhlIGl0ZXJhdG9yIGluc3RlYWQuXG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIG9iamVjdCBpcyBub3QgYW4gaXRlcmFibGUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiAnICsgJ1JlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHJlbmRlcmluZyBHZW5lcmF0b3JzIGJlY2F1c2UgaXQncyBhIG11dGF0aW9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI5OTVcbiAgICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBGbG93IGRvZXNuJ3Qga25vdyBhYm91dCB0b1N0cmluZ1RhZ1xuICAgICAgbmV3Q2hpbGRyZW5JdGVyYWJsZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnR2VuZXJhdG9yJykge1xuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dEdlbmVyYXRvcnMpIHtcbiAgICAgICAgICBlcnJvcignVXNpbmcgR2VuZXJhdG9ycyBhcyBjaGlsZHJlbiBpcyB1bnN1cHBvcnRlZCBhbmQgd2lsbCBsaWtlbHkgeWllbGQgJyArICd1bmV4cGVjdGVkIHJlc3VsdHMgYmVjYXVzZSBlbnVtZXJhdGluZyBhIGdlbmVyYXRvciBtdXRhdGVzIGl0LiAnICsgJ1lvdSBtYXkgY29udmVydCBpdCB0byBhbiBhcnJheSB3aXRoIGBBcnJheS5mcm9tKClgIG9yIHRoZSAnICsgJ2BbLi4uc3ByZWFkXWAgb3BlcmF0b3IgYmVmb3JlIHJlbmRlcmluZy4gS2VlcCBpbiBtaW5kICcgKyAneW91IG1pZ2h0IG5lZWQgdG8gcG9seWZpbGwgdGhlc2UgZmVhdHVyZXMgZm9yIG9sZGVyIGJyb3dzZXJzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IHRydWU7XG4gICAgICB9IC8vIFdhcm4gYWJvdXQgdXNpbmcgTWFwcyBhcyBjaGlsZHJlblxuXG5cbiAgICAgIGlmIChuZXdDaGlsZHJlbkl0ZXJhYmxlLmVudHJpZXMgPT09IGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNYXBzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gJyArICdVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICB9IC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgLy8gV2UnbGwgZ2V0IGEgZGlmZmVyZW50IGl0ZXJhdG9yIGxhdGVyIGZvciB0aGUgbWFpbiBwYXNzLlxuXG5cbiAgICAgIHZhciBfbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICAgIGlmIChfbmV3Q2hpbGRyZW4pIHtcbiAgICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgICAgdmFyIF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKTtcblxuICAgICAgICBmb3IgKDsgIV9zdGVwLmRvbmU7IF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICAgIHZhciBjaGlsZCA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKG5ld0NoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW4gaXRlcmFibGUgb2JqZWN0IHByb3ZpZGVkIG5vIGl0ZXJhdG9yLicpO1xuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG4gICAgdmFyIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChzdGVwLmRvbmUpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcblxuICAgICAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAgICAgdmFyIG51bWJlck9mRm9ya3MgPSBuZXdJZHg7XG4gICAgICAgIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgbnVtYmVyT2ZGb3Jrcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIzID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyMyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIzLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMztcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIzO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgICAgICB2YXIgX251bWJlck9mRm9ya3MzID0gbmV3SWR4O1xuICAgICAgICBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIF9udW1iZXJPZkZvcmtzMyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH0gLy8gQWRkIGFsbCBjaGlsZHJlbiB0byBhIGtleSBtYXAgZm9yIHF1aWNrIGxvb2t1cHMuXG5cblxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTsgLy8gS2VlcCBzY2FubmluZyBhbmQgdXNlIHRoZSBtYXAgdG8gcmVzdG9yZSBkZWxldGVkIGl0ZW1zIGFzIG1vdmVzLlxuXG4gICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyNCA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyNCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXI0LmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjQua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyNC5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyNCwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXI0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAgIHZhciBfbnVtYmVyT2ZGb3JrczQgPSBuZXdJZHg7XG4gICAgICBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIF9udW1iZXJPZkZvcmtzNCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVjayBmb3Iga2V5cyBvbiB0ZXh0IG5vZGVzIHNpbmNlIHdlIGRvbid0IGhhdmUgYVxuICAgIC8vIHdheSB0byBkZWZpbmUgdGhlbS5cbiAgICBpZiAoY3VycmVudEZpcnN0Q2hpbGQgIT09IG51bGwgJiYgY3VycmVudEZpcnN0Q2hpbGQudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG5vZGUgc28gbGV0J3MganVzdCB1cGRhdGUgaXQgYW5kIGRlbGV0ZVxuICAgICAgLy8gdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyk7XG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50Rmlyc3RDaGlsZCwgdGV4dENvbnRlbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfSAvLyBUaGUgZXhpc3RpbmcgZmlyc3QgY2hpbGQgaXMgbm90IGEgdGV4dCBub2RlIHNvIHdlIG5lZWQgdG8gY3JlYXRlIG9uZVxuICAgIC8vIGFuZCBkZWxldGUgdGhlIGV4aXN0aW5nIG9uZXMuXG5cblxuICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50LCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgaWYgKGNoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIHZhciBlbGVtZW50VHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgICAgICBpZiAoZWxlbWVudFR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBGcmFnbWVudCkge1xuICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4pO1xuICAgICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICBleGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChjaGlsZC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudFR5cGUgfHwgKCAvLyBLZWVwIHRoaXMgY2hlY2sgaW5saW5lIHNvIGl0IG9ubHkgcnVucyBvbiB0aGUgZmFsc2UgcGF0aDpcbiAgICAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY2hpbGQsIGVsZW1lbnQpICkgfHwgLy8gTGF6eSB0eXBlcyBzaG91bGQgcmVjb25jaWxlIHRoZWlyIHJlc29sdmVkIHR5cGUuXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGFmdGVyIHRoZSBIb3QgUmVsb2FkaW5nIGNoZWNrIGFib3ZlLFxuICAgICAgICAgIC8vIGJlY2F1c2UgaG90IHJlbG9hZGluZyBoYXMgZGlmZmVyZW50IHNlbWFudGljcyB0aGFuIHByb2QgYmVjYXVzZVxuICAgICAgICAgIC8vIGl0IGRvZXNuJ3QgcmVzdXNwZW5kLiBTbyB3ZSBjYW4ndCBsZXQgdGhlIGNhbGwgYmVsb3cgc3VzcGVuZC5cbiAgICAgICAgICB0eXBlb2YgZWxlbWVudFR5cGUgPT09ICdvYmplY3QnICYmIGVsZW1lbnRUeXBlICE9PSBudWxsICYmIGVsZW1lbnRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgJiYgcmVzb2x2ZUxhenkoZWxlbWVudFR5cGUpID09PSBjaGlsZC50eXBlKSB7XG4gICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG5cbiAgICAgICAgICAgIHZhciBfZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC5wcm9wcyk7XG5cbiAgICAgICAgICAgIF9leGlzdGluZy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGNoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgICAgIF9leGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBfZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICBfZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9leGlzdGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gRGlkbid0IG1hdGNoLlxuXG5cbiAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50LnByb3BzLmNoaWxkcmVuLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywgZWxlbWVudC5rZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2NyZWF0ZWQ0ID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgIF9jcmVhdGVkNC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50KTtcbiAgICAgIF9jcmVhdGVkNC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBfY3JlYXRlZDQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgcG9ydGFsLCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBwb3J0YWwua2V5O1xuICAgIHZhciBjaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgLy8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gSG9zdFBvcnRhbCAmJiBjaGlsZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA9PT0gcG9ydGFsLmNvbnRhaW5lckluZm8gJiYgY2hpbGQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uID09PSBwb3J0YWwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9IC8vIFRoaXMgQVBJIHdpbGwgdGFnIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSBzaWRlLWVmZmVjdCBvZiB0aGUgcmVjb25jaWxpYXRpb25cbiAgLy8gaXRzZWxmLiBUaGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNpZGUtZWZmZWN0IGxpc3QgYXMgd2UgcGFzcyB0aHJvdWdoIHRoZVxuICAvLyBjaGlsZHJlbiBhbmQgdGhlIHBhcmVudC5cblxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlY3Vyc2l2ZS5cbiAgICAvLyBJZiB0aGUgdG9wIGxldmVsIGl0ZW0gaXMgYW4gYXJyYXksIHdlIHRyZWF0IGl0IGFzIGEgc2V0IG9mIGNoaWxkcmVuLFxuICAgIC8vIG5vdCBhcyBhIGZyYWdtZW50LiBOZXN0ZWQgYXJyYXlzIG9uIHRoZSBvdGhlciBoYW5kIHdpbGwgYmUgdHJlYXRlZCBhc1xuICAgIC8vIGZyYWdtZW50IG5vZGVzLiBSZWN1cnNpb24gaGFwcGVucyBhdCB0aGUgbm9ybWFsIGZsb3cuXG4gICAgLy8gSGFuZGxlIHRvcCBsZXZlbCB1bmtleWVkIGZyYWdtZW50cyBhcyBpZiB0aGV5IHdlcmUgYXJyYXlzLlxuICAgIC8vIFRoaXMgbGVhZHMgdG8gYW4gYW1iaWd1aXR5IGJldHdlZW4gPD57Wy4uLl19PC8+IGFuZCA8Pi4uLjwvPi5cbiAgICAvLyBXZSB0cmVhdCB0aGUgYW1iaWd1b3VzIGNhc2VzIGFib3ZlIHRoZSBzYW1lLlxuICAgIC8vIFRPRE86IExldCdzIHVzZSByZWN1cnNpb24gbGlrZSB3ZSBkbyBmb3IgVXNhYmxlIG5vZGVzP1xuICAgIHZhciBpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCAmJiBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFICYmIG5ld0NoaWxkLmtleSA9PT0gbnVsbDtcblxuICAgIGlmIChpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50KSB7XG4gICAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuO1xuICAgIH0gLy8gSGFuZGxlIG9iamVjdCB0eXBlc1xuXG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSk7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpKTtcblxuICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IG5ld0NoaWxkLl9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbmV3Q2hpbGQuX2luaXQ7IC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gYmUgbm9uLXJlY3Vyc2l2ZS5cblxuICAgICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZEZpYmVycyhyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGluaXQocGF5bG9hZCksIGxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkobmV3Q2hpbGQpKSB7XG4gICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgIH0gLy8gVXNhYmxlcyBhcmUgYSB2YWxpZCBSZWFjdCBub2RlIHR5cGUuIFdoZW4gUmVhY3QgZW5jb3VudGVycyBhIFVzYWJsZSBpblxuICAgICAgLy8gYSBjaGlsZCBwb3NpdGlvbiwgaXQgdW53cmFwcyBpdCB1c2luZyB0aGUgc2FtZSBhbGdvcml0aG0gYXMgYHVzZWAuIEZvclxuICAgICAgLy8gZXhhbXBsZSwgZm9yIHByb21pc2VzLCBSZWFjdCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiB0byB1bndpbmQgdGhlXG4gICAgICAvLyBzdGFjaywgdGhlbiByZXBsYXkgdGhlIGNvbXBvbmVudCBvbmNlIHRoZSBwcm9taXNlIHJlc29sdmVzLlxuICAgICAgLy9cbiAgICAgIC8vIEEgZGlmZmVyZW5jZSBmcm9tIGB1c2VgIGlzIHRoYXQgUmVhY3Qgd2lsbCBrZWVwIHVud3JhcHBpbmcgdGhlIHZhbHVlXG4gICAgICAvLyB1bnRpbCBpdCByZWFjaGVzIGEgbm9uLVVzYWJsZSB0eXBlLlxuICAgICAgLy9cbiAgICAgIC8vIGUuZy4gVXNhYmxlPFVzYWJsZTxVc2FibGU8VD4+PiBzaG91bGQgcmVzb2x2ZSB0byBUXG4gICAgICAvL1xuICAgICAgLy8gVGhlIHN0cnVjdHVyZSBpcyBhIGJpdCB1bmZvcnR1bmF0ZS4gSWRlYWxseSwgd2Ugc2hvdWxkbid0IG5lZWQgdG9cbiAgICAgIC8vIHJlcGxheSB0aGUgZW50aXJlIGJlZ2luIHBoYXNlIG9mIHRoZSBwYXJlbnQgZmliZXIgaW4gb3JkZXIgdG8gcmVjb25jaWxlXG4gICAgICAvLyB0aGUgY2hpbGRyZW4gYWdhaW4uIFRoaXMgd291bGQgcmVxdWlyZSBhIHNvbWV3aGF0IHNpZ25pZmljYW50IHJlZmFjdG9yLFxuICAgICAgLy8gYmVjYXVzZSByZWNvbmNpbGF0aW9uIGhhcHBlbnMgZGVlcCB3aXRoaW4gdGhlIGJlZ2luIHBoYXNlLCBhbmRcbiAgICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB3b3JrLCBub3QgYWx3YXlzIGF0IHRoZSBlbmQuIFdlIHNob3VsZFxuICAgICAgLy8gY29uc2lkZXIgYXMgYW4gZnV0dXJlIGltcHJvdmVtZW50LlxuXG5cbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgdGhlbmFibGUgPSBuZXdDaGlsZDtcbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHVud3JhcFRoZW5hYmxlKHRoZW5hYmxlKSwgbGFuZXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3Q2hpbGQuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCBuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfU0VSVkVSX0NPTlRFWFRfVFlQRSkge1xuICAgICAgICB2YXIgY29udGV4dCA9IG5ld0NoaWxkO1xuICAgICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGF0aW9uKHJldHVybkZpYmVyLCBjb250ZXh0LCBsYW5lcyksIGxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgJiYgbmV3Q2hpbGQgIT09ICcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgJycgKyBuZXdDaGlsZCwgbGFuZXMpKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfSAvLyBSZW1haW5pbmcgY2FzZXMgYXJlIGFsbCB0cmVhdGVkIGFzIGVtcHR5LlxuXG5cbiAgICByZXR1cm4gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkRmliZXJzKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBpbmRpcmVjdGlvbiBvbmx5IGV4aXN0cyBzbyB3ZSBjYW4gcmVzZXQgYHRoZW5hYmxlU3RhdGVgIGF0IHRoZSBlbmQuXG4gICAgLy8gSXQgc2hvdWxkIGdldCBpbmxpbmVkIGJ5IENsb3N1cmUuXG4gICAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDA7XG4gICAgdmFyIGZpcnN0Q2hpbGRGaWJlciA9IHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgdGhlbmFibGVTdGF0ZSQxID0gbnVsbDsgLy8gRG9uJ3QgYm90aGVyIHRvIHJlc2V0IGB0aGVuYWJsZUluZGV4Q291bnRlcmAgdG8gMCBiZWNhdXNlIGl0IGFsd2F5cyBnZXRzXG4gICAgLy8gc2V0IGF0IHRoZSBiZWdpbm5pbmcuXG5cbiAgICByZXR1cm4gZmlyc3RDaGlsZEZpYmVyO1xuICB9XG5cbiAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzO1xufVxuXG52YXIgcmVjb25jaWxlQ2hpbGRGaWJlcnMgPSBjcmVhdGVDaGlsZFJlY29uY2lsZXIodHJ1ZSk7XG52YXIgbW91bnRDaGlsZEZpYmVycyA9IGNyZWF0ZUNoaWxkUmVjb25jaWxlcihmYWxzZSk7XG5mdW5jdGlvbiByZXNldENoaWxkUmVjb25jaWxlck9uVW53aW5kKCkge1xuICAvLyBPbiB1bndpbmQsIGNsZWFyIGFueSBwZW5kaW5nIHRoZW5hYmxlcyB0aGF0IHdlcmUgdXNlZC5cbiAgdGhlbmFibGVTdGF0ZSQxID0gbnVsbDtcbiAgdGhlbmFibGVJbmRleENvdW50ZXIkMSA9IDA7XG59XG5mdW5jdGlvbiBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmIHdvcmtJblByb2dyZXNzLmNoaWxkICE9PSBjdXJyZW50LmNoaWxkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZXN1bWluZyB3b3JrIG5vdCB5ZXQgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY3VycmVudENoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgY3VycmVudENoaWxkLnBlbmRpbmdQcm9wcyk7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuXG4gIHdoaWxlIChjdXJyZW50Q2hpbGQuc2libGluZyAhPT0gbnVsbCkge1xuICAgIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnRDaGlsZC5zaWJsaW5nO1xuICAgIG5ld0NoaWxkID0gbmV3Q2hpbGQuc2libGluZyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgY3VycmVudENoaWxkLnBlbmRpbmdQcm9wcyk7XG4gICAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICBuZXdDaGlsZC5zaWJsaW5nID0gbnVsbDtcbn0gLy8gUmVzZXQgYSB3b3JrSW5Qcm9ncmVzcyBjaGlsZCBzZXQgdG8gcHJlcGFyZSBpdCBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbGFuZXMpIHtcbiAgdmFyIGNoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyhjaGlsZCwgbGFuZXMpO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxufVxuXG4vLyBUT0RPOiBUaGlzIGlzbid0IGJlaW5nIHVzZWQgeWV0LCBidXQgaXQncyBpbnRlbmRlZCB0byByZXBsYWNlIHRoZVxuLy8gSW52aXNpYmxlUGFyZW50Q29udGV4dCB0aGF0IGlzIGN1cnJlbnRseSBtYW5hZ2VkIGJ5IFN1c3BlbnNlQ29udGV4dC5cblxudmFyIGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG52YXIgcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5vTGFuZXMpO1xuZnVuY3Rpb24gcHVzaEhpZGRlbkNvbnRleHQoZmliZXIsIGNvbnRleHQpIHtcbiAgdmFyIHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lcyA9IGdldEVudGFuZ2xlZFJlbmRlckxhbmVzKCk7XG4gIHB1c2gocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLCBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXMsIGZpYmVyKTtcbiAgcHVzaChjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLCBjb250ZXh0LCBmaWJlcik7IC8vIFdoZW4gcmVuZGVyaW5nIGEgc3VidHJlZSB0aGF0J3MgY3VycmVudGx5IGhpZGRlbiwgd2UgbXVzdCBpbmNsdWRlIGFsbFxuICAvLyBsYW5lcyB0aGF0IHdvdWxkIGhhdmUgcmVuZGVyZWQgaWYgdGhlIGhpZGRlbiBzdWJ0cmVlIGhhZG4ndCBiZWVuIGRlZmVycmVkLlxuICAvLyBUaGF0IGlzLCBpbiBvcmRlciB0byByZXZlYWwgY29udGVudCBmcm9tIGhpZGRlbiAtPiB2aXNpYmxlLCB3ZSBtdXN0IGNvbW1pdFxuICAvLyBhbGwgdGhlIHVwZGF0ZXMgdGhhdCB3ZSBza2lwcGVkIHdoZW4gd2Ugb3JpZ2luYWxseSBoaWQgdGhlIHRyZWUuXG5cbiAgc2V0RW50YW5nbGVkUmVuZGVyTGFuZXMobWVyZ2VMYW5lcyhwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXMsIGNvbnRleHQuYmFzZUxhbmVzKSk7XG59XG5mdW5jdGlvbiByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKGZpYmVyKSB7XG4gIC8vIFRoaXMgc3VidHJlZSBpcyBub3QgY3VycmVudGx5IGhpZGRlbiwgc28gd2UgZG9uJ3QgbmVlZCB0byBhZGQgYW55IGxhbmVzXG4gIC8vIHRvIHRoZSByZW5kZXIgbGFuZXMuIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHB1c2ggc29tZXRoaW5nIHRvIGF2b2lkIGFcbiAgLy8gY29udGV4dCBtaXNtYXRjaC4gUmV1c2UgdGhlIGV4aXN0aW5nIGNvbnRleHQgb24gdGhlIHN0YWNrLlxuICBwdXNoKHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciwgZ2V0RW50YW5nbGVkUmVuZGVyTGFuZXMoKSwgZmliZXIpO1xuICBwdXNoKGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsIGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IuY3VycmVudCwgZmliZXIpO1xufVxuZnVuY3Rpb24gcG9wSGlkZGVuQ29udGV4dChmaWJlcikge1xuICAvLyBSZXN0b3JlIHRoZSBwcmV2aW91cyByZW5kZXIgbGFuZXMgZnJvbSB0aGUgc3RhY2tcbiAgc2V0RW50YW5nbGVkUmVuZGVyTGFuZXMocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQpO1xuICBwb3AoY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvciwgZmliZXIpO1xuICBwb3AocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLCBmaWJlcik7XG59XG5mdW5jdGlvbiBpc0N1cnJlbnRUcmVlSGlkZGVuKCkge1xuICByZXR1cm4gY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50ICE9PSBudWxsO1xufVxuXG4vLyBzdXNwZW5kcywgaS5lLiBpdCdzIHRoZSBuZWFyZXN0IGBjYXRjaGAgYmxvY2sgb24gdGhlIHN0YWNrLlxuXG52YXIgc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7IC8vIFJlcHJlc2VudHMgdGhlIG91dGVybW9zdCBib3VuZGFyeSB0aGF0IGlzIG5vdCB2aXNpYmxlIGluIHRoZSBjdXJyZW50IHRyZWUuXG4vLyBFdmVyeXRoaW5nIGFib3ZlIHRoaXMgaXMgdGhlIFwic2hlbGxcIi4gV2hlbiB0aGlzIGlzIG51bGwsIGl0IG1lYW5zIHdlJ3JlXG4vLyByZW5kZXJpbmcgaW4gdGhlIHNoZWxsIG9mIHRoZSBhcHAuIElmIGl0J3Mgbm9uLW51bGwsIGl0IG1lYW5zIHdlJ3JlIHJlbmRlcmluZ1xuLy8gZGVlcGVyIHRoYW4gdGhlIHNoZWxsLCBpbnNpZGUgYSBuZXcgdHJlZSB0aGF0IHdhc24ndCBhbHJlYWR5IHZpc2libGUuXG4vL1xuLy8gVGhlIG1haW4gd2F5IHdlIHVzZSB0aGlzIGNvbmNlcHQgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgc2hvd2luZyBhIGZhbGxiYWNrXG4vLyB3b3VsZCByZXN1bHQgaW4gYSBkZXNpcmFibGUgb3IgdW5kZXNpcmFibGUgbG9hZGluZyBzdGF0ZS4gQWN0aXZpbmcgYSBmYWxsYmFja1xuLy8gaW4gdGhlIHNoZWxsIGlzIGNvbnNpZGVyZWQgYW4gdW5kZXJzaXJhYmxlIGxvYWRpbmcgc3RhdGUsIGJlY2F1c2UgaXQgd291bGRcbi8vIG1lYW4gaGlkaW5nIHZpc2libGUgKGFsYmVpdCBzdGFsZSkgY29udGVudCBpbiB0aGUgY3VycmVudCB0cmVlIOKAlCB3ZSBwcmVmZXIgdG9cbi8vIHNob3cgdGhlIHN0YWxlIGNvbnRlbnQsIHJhdGhlciB0aGFuIHN3aXRjaCB0byBhIGZhbGxiYWNrLiBCdXQgc2hvd2luZyBhXG4vLyBmYWxsYmFjayBpbiBhIG5ldyB0cmVlIGlzIGZpbmUsIGJlY2F1c2UgdGhlcmUncyBubyBzdGFsZSBjb250ZW50IHRvXG4vLyBwcmVmZXIgaW5zdGVhZC5cblxudmFyIHNoZWxsQm91bmRhcnkgPSBudWxsO1xuZnVuY3Rpb24gZ2V0U2hlbGxCb3VuZGFyeSgpIHtcbiAgcmV0dXJuIHNoZWxsQm91bmRhcnk7XG59XG5mdW5jdGlvbiBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIoaGFuZGxlcikge1xuICAvLyBUT0RPOiBQYXNzIGFzIGFyZ3VtZW50XG4gIHZhciBjdXJyZW50ID0gaGFuZGxlci5hbHRlcm5hdGU7XG4gIC8vIHByb3BhZ2F0ZWQgYSBzaW5nbGUgbGV2ZWwuIEZvciBleGFtcGxlLCB3aGVuIEZvcmNlU3VzcGVuc2VGYWxsYmFjayBpcyBzZXQsXG4gIC8vIGl0IHNob3VsZCBvbmx5IGZvcmNlIHRoZSBuZWFyZXN0IFN1c3BlbnNlIGJvdW5kYXJ5IGludG8gZmFsbGJhY2sgbW9kZS5cblxuICBwdXNoU3VzcGVuc2VMaXN0Q29udGV4dChoYW5kbGVyLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSk7IC8vIEV4cGVyaW1lbnRhbCBmZWF0dXJlOiBTb21lIFN1c3BlbnNlIGJvdW5kYXJpZXMgYXJlIG1hcmtlZCBhcyBoYXZpbmcgYW5cbiAgLy8gdG8gcHVzaCBhIG5lc3RlZCBTdXNwZW5zZSBoYW5kbGVyLCBiZWNhdXNlIGl0IHdpbGwgZ2V0IHJlcGxhY2VkIGJ5IHRoZVxuICAvLyBvdXRlciBmYWxsYmFjaywgYW55d2F5LiBDb25zaWRlciB0aGlzIGFzIGEgZnV0dXJlIG9wdGltaXphdGlvbi5cblxuXG4gIHB1c2goc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGhhbmRsZXIsIGhhbmRsZXIpO1xuXG4gIGlmIChzaGVsbEJvdW5kYXJ5ID09PSBudWxsKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgaXNDdXJyZW50VHJlZUhpZGRlbigpKSB7XG4gICAgICAvLyBUaGlzIGJvdW5kYXJ5IGlzIG5vdCB2aXNpYmxlIGluIHRoZSBjdXJyZW50IFVJLlxuICAgICAgc2hlbGxCb3VuZGFyeSA9IGhhbmRsZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBib3VuZGFyeSBpcyBzaG93aW5nIGEgZmFsbGJhY2sgaW4gdGhlIGN1cnJlbnQgVUkuXG4gICAgICAgIHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHVzaEZhbGxiYWNrVHJlZVN1c3BlbnNlSGFuZGxlcihmaWJlcikge1xuICAvLyBXZSdyZSBhYm91dCB0byByZW5kZXIgdGhlIGZhbGxiYWNrLiBJZiBzb21ldGhpbmcgaW4gdGhlIGZhbGxiYWNrIHN1c3BlbmRzLFxuICAvLyBpdCdzIGFraW4gdG8gdGhyb3dpbmcgaW5zaWRlIG9mIGEgYGNhdGNoYCBibG9jay4gVGhpcyBib3VuZGFyeSBzaG91bGQgbm90XG4gIC8vIGNhcHR1cmUuIFJldXNlIHRoZSBleGlzdGluZyBoYW5kbGVyIG9uIHRoZSBzdGFjay5cbiAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKGZpYmVyKTtcbn1cbmZ1bmN0aW9uIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50KSB7XG4gICAgLy8gQSBTdXNwZW5zZUxpc3QgY29udGV4dCBpcyBvbmx5IHB1c2hlZCBoZXJlIHRvIGF2b2lkIGEgcHVzaC9wb3AgbWlzbWF0Y2guXG4gICAgLy8gUmV1c2UgdGhlIGN1cnJlbnQgdmFsdWUgb24gdGhlIHN0YWNrLlxuICAgIC8vIFRPRE86IFdlIGNhbiBhdm9pZCBuZWVkaW5nIHRvIHB1c2ggaGVyZSBieSBieSBmb3JraW5nIHBvcFN1c3BlbnNlSGFuZGxlclxuICAgIC8vIGludG8gc2VwYXJhdGUgZnVuY3Rpb25zIGZvciBTdXNwZW5zZSBhbmQgT2Zmc2NyZWVuLlxuICAgIHB1c2hTdXNwZW5zZUxpc3RDb250ZXh0KGZpYmVyLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICAgIHB1c2goc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG5cbiAgICBpZiAoc2hlbGxCb3VuZGFyeSAhPT0gbnVsbCkgOyBlbHNlIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBib3VuZGFyeSBpbiB0aGUgc3RhY2sgdGhhdCdzIGFscmVhZHkgc2hvd2luZ1xuICAgICAgICAgIC8vIGEgZmFsbGJhY2suIFNvIGV2ZXJ5dGhpbmcgb3V0c2lkZSBpcyBjb25zaWRlcmVkIHRoZSBzaGVsbC5cbiAgICAgICAgICBzaGVsbEJvdW5kYXJ5ID0gZmliZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhIExlZ2FjeUhpZGRlbiBjb21wb25lbnQuXG4gICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKGZpYmVyKTtcbiAgfVxufVxuZnVuY3Rpb24gcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKGZpYmVyKSB7XG4gIHB1c2hTdXNwZW5zZUxpc3RDb250ZXh0KGZpYmVyLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBnZXRTdXNwZW5zZUhhbmRsZXIoKSwgZmliZXIpO1xufVxuZnVuY3Rpb24gZ2V0U3VzcGVuc2VIYW5kbGVyKCkge1xuICByZXR1cm4gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudDtcbn1cbmZ1bmN0aW9uIHBvcFN1c3BlbnNlSGFuZGxlcihmaWJlcikge1xuICBwb3Aoc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcblxuICBpZiAoc2hlbGxCb3VuZGFyeSA9PT0gZmliZXIpIHtcbiAgICAvLyBQb3BwaW5nIGJhY2sgaW50byB0aGUgc2hlbGwuXG4gICAgc2hlbGxCb3VuZGFyeSA9IG51bGw7XG4gIH1cblxuICBwb3BTdXNwZW5zZUxpc3RDb250ZXh0KGZpYmVyKTtcbn0gLy8gU3VzcGVuc2VMaXN0IGNvbnRleHRcbi8vIFRPRE86IE1vdmUgdG8gYSBzZXBhcmF0ZSBtb2R1bGU/IFdlIG1heSBjaGFuZ2UgdGhlIFN1c3BlbnNlTGlzdFxuLy8gaW1wbGVtZW50YXRpb24gdG8gaGlkZS9zaG93IGluIHRoZSBjb21taXQgcGhhc2UsIGFueXdheS5cblxudmFyIERlZmF1bHRTdXNwZW5zZUNvbnRleHQgPSAwO1xudmFyIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrID0gMTsgLy8gRm9yY2VTdXNwZW5zZUZhbGxiYWNrIGNhbiBiZSB1c2VkIGJ5IFN1c3BlbnNlTGlzdCB0byBmb3JjZSBuZXdseSBhZGRlZFxuLy8gaXRlbXMgaW50byB0aGVpciBmYWxsYmFjayBzdGF0ZSBkdXJpbmcgb25lIG9mIHRoZSByZW5kZXIgcGFzc2VzLlxuXG52YXIgRm9yY2VTdXNwZW5zZUZhbGxiYWNrID0gMjtcbnZhciBzdXNwZW5zZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKERlZmF1bHRTdXNwZW5zZUNvbnRleHQpO1xuZnVuY3Rpb24gaGFzU3VzcGVuc2VMaXN0Q29udGV4dChwYXJlbnRDb250ZXh0LCBmbGFnKSB7XG4gIHJldHVybiAocGFyZW50Q29udGV4dCAmIGZsYWcpICE9PSAwO1xufVxuZnVuY3Rpb24gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUxpc3RDb250ZXh0KHBhcmVudENvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgJiBTdWJ0cmVlU3VzcGVuc2VDb250ZXh0TWFzaztcbn1cbmZ1bmN0aW9uIHNldFNoYWxsb3dTdXNwZW5zZUxpc3RDb250ZXh0KHBhcmVudENvbnRleHQsIHNoYWxsb3dDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgfCBzaGFsbG93Q29udGV4dDtcbn1cbmZ1bmN0aW9uIHB1c2hTdXNwZW5zZUxpc3RDb250ZXh0KGZpYmVyLCBuZXdDb250ZXh0KSB7XG4gIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgbmV3Q29udGV4dCwgZmliZXIpO1xufVxuZnVuY3Rpb24gcG9wU3VzcGVuc2VMaXN0Q29udGV4dChmaWJlcikge1xuICBwb3Aoc3VzcGVuc2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG4vLyBBIG5vbi1udWxsIFN1c3BlbnNlU3RhdGUgbWVhbnMgdGhhdCBpdCBpcyBibG9ja2VkIGZvciBvbmUgcmVhc29uIG9yIGFub3RoZXIuXG4vLyAtIEEgbm9uLW51bGwgZGVoeWRyYXRlZCBmaWVsZCBtZWFucyBpdCdzIGJsb2NrZWQgcGVuZGluZyBoeWRyYXRpb24uXG4vLyAgIC0gQSBub24tbnVsbCBkZWh5ZHJhdGVkIGZpZWxkIGNhbiB1c2UgaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyBvclxuLy8gICAgIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrIHRvIHF1ZXJ5IHRoZSByZWFzb24gZm9yIGJlaW5nIGRlaHlkcmF0ZWQuXG4vLyAtIEEgbnVsbCBkZWh5ZHJhdGVkIGZpZWxkIG1lYW5zIGl0J3MgYmxvY2tlZCBieSBzb21ldGhpbmcgc3VzcGVuZGluZyBhbmRcbi8vICAgd2UncmUgY3VycmVudGx5IHNob3dpbmcgYSBmYWxsYmFjayBpbnN0ZWFkLlxuXG5mdW5jdGlvbiBmaW5kRmlyc3RTdXNwZW5kZWQocm93KSB7XG4gIHZhciBub2RlID0gcm93O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGRlaHlkcmF0ZWQgPSBzdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChkZWh5ZHJhdGVkID09PSBudWxsIHx8IGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoZGVoeWRyYXRlZCkgfHwgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soZGVoeWRyYXRlZCkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCAmJiAvLyByZXZlYWxPcmRlciB1bmRlZmluZWQgY2FuJ3QgYmUgdHJ1c3RlZCBiZWNhdXNlIGl0IGRvbid0XG4gICAgLy8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0IHN1c3BlbmRlZCBvciBub3QuXG4gICAgbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gKG5vZGUuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxO1xuXG4gICAgICBpZiAoZGlkU3VzcGVuZCkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSByb3cpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgTm9GbGFncyA9XG4vKiAgICovXG4wOyAvLyBSZXByZXNlbnRzIHdoZXRoZXIgZWZmZWN0IHNob3VsZCBmaXJlLlxuXG52YXIgSGFzRWZmZWN0ID1cbi8qICovXG4xOyAvLyBSZXByZXNlbnRzIHRoZSBwaGFzZSBpbiB3aGljaCB0aGUgZWZmZWN0IChub3QgdGhlIGNsZWFuLXVwKSBmaXJlcy5cblxudmFyIEluc2VydGlvbiA9XG4vKiAqL1xuMjtcbnZhciBMYXlvdXQgPVxuLyogICAgKi9cbjQ7XG52YXIgUGFzc2l2ZSA9XG4vKiAgICovXG44O1xuXG52YXIgUmVhY3RDdXJyZW50QWN0UXVldWUkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEFjdFF1ZXVlOyAvLyBBIGxpbmtlZCBsaXN0IG9mIGFsbCB0aGUgcm9vdHMgd2l0aCBwZW5kaW5nIHdvcmsuIEluIGFuIGlkaW9tYXRpYyBhcHAsXG4vLyB0aGVyZSdzIG9ubHkgYSBzaW5nbGUgcm9vdCwgYnV0IHdlIGRvIHN1cHBvcnQgbXVsdGkgcm9vdCBhcHBzLCBoZW5jZSB0aGlzXG4vLyBleHRyYSBjb21wbGV4aXR5LiBCdXQgdGhpcyBtb2R1bGUgaXMgb3B0aW1pemVkIGZvciB0aGUgc2luZ2xlIHJvb3QgY2FzZS5cblxudmFyIGZpcnN0U2NoZWR1bGVkUm9vdCA9IG51bGw7XG52YXIgbGFzdFNjaGVkdWxlZFJvb3QgPSBudWxsOyAvLyBVc2VkIHRvIHByZXZlbnQgcmVkdW5kYW50IG1pcmNvdGFza3MgZnJvbSBiZWluZyBzY2hlZHVsZWQuXG5cbnZhciBkaWRTY2hlZHVsZU1pY3JvdGFzayA9IGZhbHNlOyAvLyBgYWN0YCBcIm1pY3JvdGFza3NcIiBhcmUgc2NoZWR1bGVkIG9uIHRoZSBgYWN0YCBxdWV1ZSBpbnN0ZWFkIG9mIGFuIGFjdHVhbFxuLy8gbWljcm90YXNrLCBzbyB3ZSBoYXZlIHRvIGRlZHVwZSB0aG9zZSBzZXBhcmF0ZWx5LiBUaGlzIHdvdWxkbid0IGJlIGFuIGlzc3VlXG4vLyBpZiB3ZSByZXF1aXJlZCBhbGwgYGFjdGAgY2FsbHMgdG8gYmUgYXdhaXRlZCwgd2hpY2ggd2UgbWlnaHQgaW4gdGhlIGZ1dHVyZS5cblxudmFyIGRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCA9IGZhbHNlOyAvLyBVc2VkIHRvIHF1aWNrbHkgYmFpbCBvdXQgb2YgZmx1c2hTeW5jIGlmIHRoZXJlJ3Mgbm8gc3luYyB3b3JrIHRvIGRvLlxuXG52YXIgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gZmFsc2U7XG52YXIgaXNGbHVzaGluZ1dvcmsgPSBmYWxzZTtcbnZhciBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IE5vTGFuZTtcbmZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIGEgcm9vdCByZWNlaXZlcyBhbiB1cGRhdGUuIEl0IGRvZXMgdHdvXG4gIC8vIHRoaW5ncyAxKSBpdCBlbnN1cmVzIHRoZSByb290IGlzIGluIHRoZSByb290IHNjaGVkdWxlLCBhbmQgMikgaXQgZW5zdXJlc1xuICAvLyB0aGVyZSdzIGEgcGVuZGluZyBtaWNyb3Rhc2sgdG8gcHJvY2VzcyB0aGUgcm9vdCBzY2hlZHVsZS5cbiAgLy9cbiAgLy8gTW9zdCBvZiB0aGUgYWN0dWFsIHNjaGVkdWxpbmcgbG9naWMgZG9lcyBub3QgaGFwcGVuIHVudGlsXG4gIC8vIGBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrYCBydW5zLlxuICAvLyBBZGQgdGhlIHJvb3QgdG8gdGhlIHNjaGVkdWxlXG4gIGlmIChyb290ID09PSBsYXN0U2NoZWR1bGVkUm9vdCB8fCByb290Lm5leHQgIT09IG51bGwpIDsgZWxzZSB7XG4gICAgaWYgKGxhc3RTY2hlZHVsZWRSb290ID09PSBudWxsKSB7XG4gICAgICBmaXJzdFNjaGVkdWxlZFJvb3QgPSBsYXN0U2NoZWR1bGVkUm9vdCA9IHJvb3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RTY2hlZHVsZWRSb290Lm5leHQgPSByb290O1xuICAgICAgbGFzdFNjaGVkdWxlZFJvb3QgPSByb290O1xuICAgIH1cbiAgfSAvLyBBbnkgdGltZSBhIHJvb3QgcmVjZWl2ZWQgYW4gdXBkYXRlLCB3ZSBzZXQgdGhpcyB0byB0cnVlIHVudGlsIHRoZSBuZXh0IHRpbWVcbiAgLy8gd2UgcHJvY2VzcyB0aGUgc2NoZWR1bGUuIElmIGl0J3MgZmFsc2UsIHRoZW4gd2UgY2FuIHF1aWNrbHkgZXhpdCBmbHVzaFN5bmNcbiAgLy8gd2l0aG91dCBjb25zdWx0aW5nIHRoZSBzY2hlZHVsZS5cblxuXG4gIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9IHRydWU7IC8vIEF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZXZlbnQsIGdvIHRocm91Z2ggZWFjaCBvZiB0aGUgcm9vdHMgYW5kIGVuc3VyZVxuICAvLyB0aGVyZSdzIGEgdGFzayBzY2hlZHVsZWQgZm9yIGVhY2ggb25lIGF0IHRoZSBjb3JyZWN0IHByaW9yaXR5LlxuXG4gIGlmIChSZWFjdEN1cnJlbnRBY3RRdWV1ZSQyLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBXZSdyZSBpbnNpZGUgYW4gYGFjdGAgc2NvcGUuXG4gICAgaWYgKCFkaWRTY2hlZHVsZU1pY3JvdGFza19hY3QpIHtcbiAgICAgIGRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCA9IHRydWU7XG4gICAgICBzY2hlZHVsZUltbWVkaWF0ZVRhc2socHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFkaWRTY2hlZHVsZU1pY3JvdGFzaykge1xuICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPSB0cnVlO1xuICAgICAgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzayk7XG4gICAgfVxuICB9XG5cbiAgaWYgKFJlYWN0Q3VycmVudEFjdFF1ZXVlJDIuaXNCYXRjaGluZ0xlZ2FjeSAmJiByb290LnRhZyA9PT0gTGVnYWN5Um9vdCkge1xuICAgIC8vIFNwZWNpYWwgYGFjdGAgY2FzZTogUmVjb3JkIHdoZW5ldmVyIGEgbGVnYWN5IHVwZGF0ZSBpcyBzY2hlZHVsZWQuXG4gICAgUmVhY3RDdXJyZW50QWN0UXVldWUkMi5kaWRTY2hlZHVsZUxlZ2FjeVVwZGF0ZSA9IHRydWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoU3luY1dvcmtPbkFsbFJvb3RzKCkge1xuICAvLyBUaGlzIGlzIGFsbG93ZWQgdG8gYmUgY2FsbGVkIHN5bmNocm9ub3VzbHksIGJ1dCB0aGUgY2FsbGVyIHNob3VsZCBjaGVja1xuICAvLyB0aGUgZXhlY3V0aW9uIGNvbnRleHQgZmlyc3QuXG4gIGZsdXNoU3luY1dvcmtBY3Jvc3NSb290c19pbXBsKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIGZsdXNoU3luY1dvcmtPbkxlZ2FjeVJvb3RzT25seSgpIHtcbiAgLy8gVGhpcyBpcyBhbGxvd2VkIHRvIGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5LCBidXQgdGhlIGNhbGxlciBzaG91bGQgY2hlY2tcbiAgLy8gdGhlIGV4ZWN1dGlvbiBjb250ZXh0IGZpcnN0LlxuICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCh0cnVlKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwob25seUxlZ2FjeSkge1xuICBpZiAoaXNGbHVzaGluZ1dvcmspIHtcbiAgICAvLyBQcmV2ZW50IHJlZW50cmFuY3kuXG4gICAgLy8gVE9ETzogSXMgdGhpcyBvdmVybHkgZGVmZW5zaXZlPyBUaGUgY2FsbGVycyBtdXN0IGNoZWNrIHRoZSBleGVjdXRpb25cbiAgICAvLyBjb250ZXh0IGZpcnN0IHJlZ2FyZGxlc3MuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFtaWdodEhhdmVQZW5kaW5nU3luY1dvcmspIHtcbiAgICAvLyBGYXN0IHBhdGguIFRoZXJlJ3Mgbm8gc3luYyB3b3JrIHRvIGRvLlxuICAgIHJldHVybjtcbiAgfSAvLyBUaGVyZSBtYXkgb3IgbWF5IG5vdCBiZSBzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxlZC4gTGV0J3MgY2hlY2suXG5cblxuICB2YXIgZGlkUGVyZm9ybVNvbWVXb3JrO1xuICB2YXIgZXJyb3JzID0gbnVsbDtcbiAgaXNGbHVzaGluZ1dvcmsgPSB0cnVlO1xuXG4gIGRvIHtcbiAgICBkaWRQZXJmb3JtU29tZVdvcmsgPSBmYWxzZTtcbiAgICB2YXIgcm9vdCA9IGZpcnN0U2NoZWR1bGVkUm9vdDtcblxuICAgIHdoaWxlIChyb290ICE9PSBudWxsKSB7XG4gICAgICBpZiAob25seUxlZ2FjeSAmJiByb290LnRhZyAhPT0gTGVnYWN5Um9vdCkgOyBlbHNlIHtcbiAgICAgICAgdmFyIHdvcmtJblByb2dyZXNzUm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuICAgICAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcygpO1xuICAgICAgICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7XG5cbiAgICAgICAgaWYgKGluY2x1ZGVzU3luY0xhbmUobmV4dExhbmVzKSkge1xuICAgICAgICAgIC8vIFRoaXMgcm9vdCBoYXMgcGVuZGluZyBzeW5jIHdvcmsuIEZsdXNoIGl0IG5vdy5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGlkUGVyZm9ybVNvbWVXb3JrID0gdHJ1ZTtcbiAgICAgICAgICAgIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290LCBuZXh0TGFuZXMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBDb2xsZWN0IGVycm9ycyBzbyB3ZSBjYW4gcmV0aHJvdyB0aGVtIGF0IHRoZSBlbmRcbiAgICAgICAgICAgIGlmIChlcnJvcnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZXJyb3JzID0gW2Vycm9yXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcm9vdCA9IHJvb3QubmV4dDtcbiAgICB9XG4gIH0gd2hpbGUgKGRpZFBlcmZvcm1Tb21lV29yayk7XG5cbiAgaXNGbHVzaGluZ1dvcmsgPSBmYWxzZTsgLy8gSWYgYW55IGVycm9ycyB3ZXJlIHRocm93biwgcmV0aHJvdyB0aGVtIHJpZ2h0IGJlZm9yZSBleGl0aW5nLlxuICAvLyBUT0RPOiBDb25zaWRlciByZXR1cm5pbmcgdGhlc2UgdG8gdGhlIGNhbGxlciwgdG8gYWxsb3cgdGhlbSB0byBkZWNpZGVcbiAgLy8gaG93L3doZW4gdG8gcmV0aHJvdy5cblxuICBpZiAoZXJyb3JzICE9PSBudWxsKSB7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAxKSB7XG4gICAgICBpZiAodHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRocm93RXJyb3IuYmluZChudWxsLCBlcnJvcnNbaV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmaXJzdEVycm9yID0gZXJyb3JzWzBdO1xuICAgICAgICB0aHJvdyBmaXJzdEVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZXJyb3IgPSBlcnJvcnNbMF07XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvcikge1xuICB0aHJvdyBlcnJvcjtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKCkge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBjYWxsZWQgaW5zaWRlIGEgbWljcm90YXNrLiBJdCBzaG91bGQgbmV2ZXIgYmVcbiAgLy8gY2FsbGVkIHN5bmNocm9ub3VzbHkuXG4gIGRpZFNjaGVkdWxlTWljcm90YXNrID0gZmFsc2U7XG5cbiAge1xuICAgIGRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCA9IGZhbHNlO1xuICB9IC8vIFdlJ2xsIHJlY29tcHV0ZSB0aGlzIGFzIHdlIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHJvb3RzIGFuZCBzY2hlZHVsZSB0aGVtLlxuXG5cbiAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gZmFsc2U7XG4gIHZhciBjdXJyZW50VGltZSA9IG5vdyQxKCk7XG4gIHZhciBwcmV2ID0gbnVsbDtcbiAgdmFyIHJvb3QgPSBmaXJzdFNjaGVkdWxlZFJvb3Q7XG5cbiAgd2hpbGUgKHJvb3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmV4dCA9IHJvb3QubmV4dDtcblxuICAgIGlmIChjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSAhPT0gTm9MYW5lICYmIHNob3VsZEF0dGVtcHRFYWdlclRyYW5zaXRpb24oKSkge1xuICAgICAgLy8gQSB0cmFuc2l0aW9uIHdhcyBzY2hlZHVsZWQgZHVyaW5nIGFuIGV2ZW50LCBidXQgd2UncmUgZ29pbmcgdG8gdHJ5IHRvXG4gICAgICAvLyByZW5kZXIgaXQgc3luY2hyb25vdXNseSBhbnl3YXkuIFdlIGRvIHRoaXMgZHVyaW5nIGEgcG9wc3RhdGUgZXZlbnQgdG9cbiAgICAgIC8vIHByZXNlcnZlIHRoZSBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIHByZXZpb3VzIHBhZ2UuXG4gICAgICB1cGdyYWRlUGVuZGluZ0xhbmVUb1N5bmMocm9vdCwgY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUpO1xuICAgIH1cblxuICAgIHZhciBuZXh0TGFuZXMgPSBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIGN1cnJlbnRUaW1lKTtcblxuICAgIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZSkge1xuICAgICAgLy8gVGhpcyByb290IGhhcyBubyBtb3JlIHBlbmRpbmcgd29yay4gUmVtb3ZlIGl0IGZyb20gdGhlIHNjaGVkdWxlLiBUb1xuICAgICAgLy8gZ3VhcmQgYWdhaW5zdCBzdWJ0bGUgcmVlbnRyYW5jeSBidWdzLCB0aGlzIG1pY3JvdGFzayBpcyB0aGUgb25seSBwbGFjZVxuICAgICAgLy8gd2UgZG8gdGhpcyDigJQgeW91IGNhbiBhZGQgcm9vdHMgdG8gdGhlIHNjaGVkdWxlIHdoZW5ldmVyLCBidXQgeW91IGNhblxuICAgICAgLy8gb25seSByZW1vdmUgdGhlbSBoZXJlLlxuICAgICAgLy8gTnVsbCB0aGlzIG91dCBzbyB3ZSBrbm93IGl0J3MgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNjaGVkdWxlLlxuICAgICAgcm9vdC5uZXh0ID0gbnVsbDtcblxuICAgICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgbmV3IGhlYWQgb2YgdGhlIGxpc3RcbiAgICAgICAgZmlyc3RTY2hlZHVsZWRSb290ID0gbmV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIG5ldyB0YWlsIG9mIHRoZSBsaXN0XG4gICAgICAgIGxhc3RTY2hlZHVsZWRSb290ID0gcHJldjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyByb290IHN0aWxsIGhhcyB3b3JrLiBLZWVwIGl0IGluIHRoZSBsaXN0LlxuICAgICAgcHJldiA9IHJvb3Q7XG5cbiAgICAgIGlmIChpbmNsdWRlc1N5bmNMYW5lKG5leHRMYW5lcykpIHtcbiAgICAgICAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByb290ID0gbmV4dDtcbiAgfVxuXG4gIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gTm9MYW5lOyAvLyBBdCB0aGUgZW5kIG9mIHRoZSBtaWNyb3Rhc2ssIGZsdXNoIGFueSBwZW5kaW5nIHN5bmNocm9ub3VzIHdvcmsuIFRoaXMgaGFzXG4gIC8vIHRvIGNvbWUgYXQgdGhlIGVuZCwgYmVjYXVzZSBpdCBkb2VzIGFjdHVhbCByZW5kZXJpbmcgd29yayB0aGF0IG1pZ2h0IHRocm93LlxuXG4gIGZsdXNoU3luY1dvcmtPbkFsbFJvb3RzKCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2socm9vdCwgY3VycmVudFRpbWUpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgY2FsbGVkIGluc2lkZSBhIG1pY3JvdGFzaywgb3IgYXQgdGhlIHZlcnkgZW5kIG9mIGFcbiAgLy8gcmVuZGVyaW5nIHRhc2sgcmlnaHQgYmVmb3JlIHdlIHlpZWxkIHRvIHRoZSBtYWluIHRocmVhZC4gSXQgc2hvdWxkIG5ldmVyIGJlXG4gIC8vIGNhbGxlZCBzeW5jaHJvbm91c2x5LlxuICAvL1xuICAvLyBUT0RPOiBVbmxlc3MgZW5hYmxlRGVmZXJSb290U2NoZWR1bGluZ1RvTWljcm90YXNrIGlzIG9mZi4gV2UgbmVlZCB0byBsYW5kXG4gIC8vIHRoYXQgQVNBUCB0byB1bmJsb2NrIGFkZGl0aW9uYWwgZmVhdHVyZXMgd2UgaGF2ZSBwbGFubmVkLlxuICAvL1xuICAvLyBUaGlzIGZ1bmN0aW9uIGFsc28gbmV2ZXIgcGVyZm9ybXMgUmVhY3Qgd29yayBzeW5jaHJvbm91c2x5OyBpdCBzaG91bGRcbiAgLy8gb25seSBzY2hlZHVsZSB3b3JrIHRvIGJlIHBlcmZvcm1lZCBsYXRlciwgaW4gYSBzZXBhcmF0ZSB0YXNrIG9yIG1pY3JvdGFzay5cbiAgLy8gQ2hlY2sgaWYgYW55IGxhbmVzIGFyZSBiZWluZyBzdGFydmVkIGJ5IG90aGVyIHdvcmsuIElmIHNvLCBtYXJrIHRoZW0gYXNcbiAgLy8gZXhwaXJlZCBzbyB3ZSBrbm93IHRvIHdvcmsgb24gdGhvc2UgbmV4dC5cbiAgbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSk7IC8vIERldGVybWluZSB0aGUgbmV4dCBsYW5lcyB0byB3b3JrIG9uLCBhbmQgdGhlaXIgcHJpb3JpdHkuXG5cbiAgdmFyIHdvcmtJblByb2dyZXNzUm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuICB2YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcygpO1xuICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7XG4gIHZhciBleGlzdGluZ0NhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuXG4gIGlmICggLy8gQ2hlY2sgaWYgdGhlcmUncyBub3RoaW5nIHRvIHdvcmsgb25cbiAgbmV4dExhbmVzID09PSBOb0xhbmVzIHx8IC8vIElmIHRoaXMgcm9vdCBpcyBjdXJyZW50bHkgc3VzcGVuZGVkIGFuZCB3YWl0aW5nIGZvciBkYXRhIHRvIHJlc29sdmUsIGRvbid0XG4gIC8vIHNjaGVkdWxlIGEgdGFzayB0byByZW5kZXIgaXQuIFdlJ2xsIGVpdGhlciB3YWl0IGZvciBhIHBpbmcsIG9yIHdhaXQgdG9cbiAgLy8gcmVjZWl2ZSBhbiB1cGRhdGUuXG4gIC8vXG4gIC8vIFN1c3BlbmRlZCByZW5kZXIgcGhhc2VcbiAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ICYmIGlzV29ya0xvb3BTdXNwZW5kZWRPbkRhdGEoKSB8fCAvLyBTdXNwZW5kZWQgY29tbWl0IHBoYXNlXG4gIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCAhPT0gbnVsbCkge1xuICAgIC8vIEZhc3QgcGF0aDogVGhlcmUncyBub3RoaW5nIHRvIHdvcmsgb24uXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxDYWxsYmFjayhleGlzdGluZ0NhbGxiYWNrTm9kZSk7XG4gICAgfVxuXG4gICAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsO1xuICAgIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IE5vTGFuZTtcbiAgICByZXR1cm4gTm9MYW5lO1xuICB9IC8vIFNjaGVkdWxlIGEgbmV3IGNhbGxiYWNrIGluIHRoZSBob3N0IGVudmlyb25tZW50LlxuXG5cbiAgaWYgKGluY2x1ZGVzU3luY0xhbmUobmV4dExhbmVzKSkge1xuICAgIC8vIFN5bmNocm9ub3VzIHdvcmsgaXMgYWx3YXlzIGZsdXNoZWQgYXQgdGhlIGVuZCBvZiB0aGUgbWljcm90YXNrLCBzbyB3ZVxuICAgIC8vIGRvbid0IG5lZWQgdG8gc2NoZWR1bGUgYW4gYWRkaXRpb25hbCB0YXNrLlxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICAgIH1cblxuICAgIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IFN5bmNMYW5lO1xuICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgdXNlIHRoZSBoaWdoZXN0IHByaW9yaXR5IGxhbmUgdG8gcmVwcmVzZW50IHRoZSBwcmlvcml0eSBvZiB0aGUgY2FsbGJhY2suXG4gICAgdmFyIGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9IHJvb3QuY2FsbGJhY2tQcmlvcml0eTtcbiAgICB2YXIgbmV3Q2FsbGJhY2tQcmlvcml0eSA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobmV4dExhbmVzKTtcblxuICAgIGlmIChuZXdDYWxsYmFja1ByaW9yaXR5ID09PSBleGlzdGluZ0NhbGxiYWNrUHJpb3JpdHkgJiYgLy8gU3BlY2lhbCBjYXNlIHJlbGF0ZWQgdG8gYGFjdGAuIElmIHRoZSBjdXJyZW50bHkgc2NoZWR1bGVkIHRhc2sgaXMgYVxuICAgIC8vIFNjaGVkdWxlciB0YXNrLCByYXRoZXIgdGhhbiBhbiBgYWN0YCB0YXNrLCBjYW5jZWwgaXQgYW5kIHJlLXNjaGVkdWxlXG4gICAgLy8gb24gdGhlIGBhY3RgIHF1ZXVlLlxuICAgICEoUmVhY3RDdXJyZW50QWN0UXVldWUkMi5jdXJyZW50ICE9PSBudWxsICYmIGV4aXN0aW5nQ2FsbGJhY2tOb2RlICE9PSBmYWtlQWN0Q2FsbGJhY2tOb2RlJDEpKSB7XG4gICAgICAvLyBUaGUgcHJpb3JpdHkgaGFzbid0IGNoYW5nZWQuIFdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgdGFzay5cbiAgICAgIHJldHVybiBuZXdDYWxsYmFja1ByaW9yaXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDYW5jZWwgdGhlIGV4aXN0aW5nIGNhbGxiYWNrLiBXZSdsbCBzY2hlZHVsZSBhIG5ldyBvbmUgYmVsb3cuXG4gICAgICBjYW5jZWxDYWxsYmFjayhleGlzdGluZ0NhbGxiYWNrTm9kZSk7XG4gICAgfVxuXG4gICAgdmFyIHNjaGVkdWxlclByaW9yaXR5TGV2ZWw7XG5cbiAgICBzd2l0Y2ggKGxhbmVzVG9FdmVudFByaW9yaXR5KG5leHRMYW5lcykpIHtcbiAgICAgIGNhc2UgRGlzY3JldGVFdmVudFByaW9yaXR5OlxuICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gSW1tZWRpYXRlUHJpb3JpdHk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENvbnRpbnVvdXNFdmVudFByaW9yaXR5OlxuICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gVXNlckJsb2NraW5nUHJpb3JpdHk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIERlZmF1bHRFdmVudFByaW9yaXR5OlxuICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHkkMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSWRsZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgIHNjaGVkdWxlclByaW9yaXR5TGV2ZWwgPSBJZGxlUHJpb3JpdHk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHkkMTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlQ2FsbGJhY2skMihzY2hlZHVsZXJQcmlvcml0eUxldmVsLCBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gbmV3Q2FsbGJhY2tQcmlvcml0eTtcbiAgICByb290LmNhbGxiYWNrTm9kZSA9IG5ld0NhbGxiYWNrTm9kZTtcbiAgICByZXR1cm4gbmV3Q2FsbGJhY2tQcmlvcml0eTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDb250aW51YXRpb25Gb3JSb290KHJvb3QsIG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdGAgdG8gZGV0ZXJtaW5lXG4gIC8vIGlmIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBjb250aW51YXRpb24gdGFzay5cbiAgLy9cbiAgLy8gVXN1YWxseSBgc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFza2Agb25seSBydW5zIGluc2lkZSBhIG1pY3JvdGFzaztcbiAgLy8gaG93ZXZlciwgc2luY2UgbW9zdCBvZiB0aGUgbG9naWMgZm9yIGRldGVybWluaW5nIGlmIHdlIG5lZWQgYSBjb250aW51YXRpb25cbiAgLy8gdmVyc3VzIGEgbmV3IHRhc2sgaXMgdGhlIHNhbWUsIHdlIGNoZWF0IGEgYml0IGFuZCBjYWxsIGl0IGhlcmUuIFRoaXMgaXNcbiAgLy8gb25seSBzYWZlIHRvIGRvIGJlY2F1c2Ugd2Uga25vdyB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBicm93c2VyIHRhc2suXG4gIC8vIFNvIGFsdGhvdWdoIGl0J3Mgbm90IGFuIGFjdHVhbCBtaWNyb3Rhc2ssIGl0IG1pZ2h0IGFzIHdlbGwgYmUuXG4gIHNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2socm9vdCwgbm93JDEoKSk7XG5cbiAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlID09PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgIC8vIFRoZSB0YXNrIG5vZGUgc2NoZWR1bGVkIGZvciB0aGlzIHJvb3QgaXMgdGhlIHNhbWUgb25lIHRoYXQnc1xuICAgIC8vIGN1cnJlbnRseSBleGVjdXRlZC4gTmVlZCB0byByZXR1cm4gYSBjb250aW51YXRpb24uXG4gICAgcmV0dXJuIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZmFrZUFjdENhbGxiYWNrTm9kZSQxID0ge307XG5cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2skMihwcmlvcml0eUxldmVsLCBjYWxsYmFjaykge1xuICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUkMi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBXZSdyZSBpbnNpZGUgYW4gYGFjdGAgc2NvcGUgKGEgdGVzdGluZyB1dGlsaXR5KS5cbiAgICAvLyBJbnN0ZWFkIG9mIHNjaGVkdWxpbmcgd29yayBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudCwgYWRkIGl0IHRvIGFcbiAgICAvLyBmYWtlIGludGVybmFsIHF1ZXVlIHRoYXQncyBtYW5hZ2VkIGJ5IHRoZSBgYWN0YCBpbXBsZW1lbnRhdGlvbi5cbiAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQyLmN1cnJlbnQucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuIGZha2VBY3RDYWxsYmFja05vZGUkMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFjayQzKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW5jZWxDYWxsYmFjayhjYWxsYmFja05vZGUpIHtcbiAgaWYgKGNhbGxiYWNrTm9kZSA9PT0gZmFrZUFjdENhbGxiYWNrTm9kZSQxKSA7IGVsc2UgaWYgKGNhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgIGNhbmNlbENhbGxiYWNrJDEoY2FsbGJhY2tOb2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZUltbWVkaWF0ZVRhc2soY2IpIHtcbiAgaWYgKFJlYWN0Q3VycmVudEFjdFF1ZXVlJDIuY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogSW5zaWRlIGFuIGBhY3RgIHNjb3BlLCB3ZSBwdXNoIG1pY3JvdGFza3MgdG8gdGhlIGZha2UgYGFjdGBcbiAgICAvLyBjYWxsYmFjayBxdWV1ZS4gVGhpcyBpcyBiZWNhdXNlIHdlIGN1cnJlbnRseSBzdXBwb3J0IGNhbGxpbmcgYGFjdGBcbiAgICAvLyB3aXRob3V0IGF3YWl0aW5nIHRoZSByZXN1bHQuIFRoZSBwbGFuIGlzIHRvIGRlcHJlY2F0ZSB0aGF0LCBhbmQgcmVxdWlyZVxuICAgIC8vIHRoYXQgeW91IGFsd2F5cyBhd2FpdCB0aGUgcmVzdWx0IHNvIHRoYXQgdGhlIG1pY3JvdGFza3MgaGF2ZSBhIGNoYW5jZSB0b1xuICAgIC8vIHJ1bi4gQnV0IGl0IGhhc24ndCBoYXBwZW5lZCB5ZXQuXG4gICAgUmVhY3RDdXJyZW50QWN0UXVldWUkMi5jdXJyZW50LnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgY2IoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9IC8vIFRPRE86IENhbiB3ZSBsYW5kIHN1cHBvcnRzTWljcm90YXNrcz8gV2hpY2ggZW52aXJvbm1lbnRzIGRvbid0IHN1cHBvcnQgaXQ/XG4gIC8vIEFsdGVybmF0aXZlbHksIGNhbiB3ZSBtb3ZlIHRoaXMgY2hlY2sgdG8gdGhlIGhvc3QgY29uZmlnP1xuXG5cbiAge1xuICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEluIFNhZmFyaSwgYXBwZW5kaW5nIGFuIGlmcmFtZSBmb3JjZXMgbWljcm90YXNrcyB0byBydW4uXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzIyNDU5XG4gICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHJ1bm5pbmcgY2FsbGJhY2tzIGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyXG4gICAgICAvLyBvciBjb21taXQgc28gd2UgbmVlZCB0byBjaGVjayBhZ2FpbnN0IHRoYXQuXG4gICAgICB2YXIgZXhlY3V0aW9uQ29udGV4dCA9IGdldEV4ZWN1dGlvbkNvbnRleHQoKTtcblxuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyB3b3VsZCBzdGlsbCBwcmVtYXR1cmVseSBmbHVzaCB0aGUgY2FsbGJhY2tzXG4gICAgICAgIC8vIGlmIHRoaXMgaGFwcGVucyBvdXRzaWRlIHJlbmRlciBvciBjb21taXQgcGhhc2UgKGUuZy4gaW4gYW4gZXZlbnQpLlxuICAgICAgICAvLyBJbnRlbnRpb25hbGx5IHVzaW5nIGEgbWFjcm90YXNrIGluc3RlYWQgb2YgYSBtaWNyb3Rhc2sgaGVyZS4gVGhpcyBpc1xuICAgICAgICAvLyB3cm9uZyBzZW1hbnRpY2FsbHkgYnV0IGl0IHByZXZlbnRzIGFuIGluZmluaXRlIGxvb3AuIFRoZSBidWcgaXNcbiAgICAgICAgLy8gU2FmYXJpJ3MsIG5vdCBvdXJzLCBzbyB3ZSBqdXN0IGRvIG91ciBiZXN0IHRvIG5vdCBjcmFzaCBldmVuIHRob3VnaFxuICAgICAgICAvLyB0aGUgYmVoYXZpb3IgaXNuJ3QgY29tcGxldGVseSBjb3JyZWN0LlxuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrJDMoSW1tZWRpYXRlUHJpb3JpdHksIGNiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjYigpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpIHtcbiAgLy8gVGhlIGFsZ29yaXRobSBmb3IgYXNzaWduaW5nIGFuIHVwZGF0ZSB0byBhIGxhbmUgc2hvdWxkIGJlIHN0YWJsZSBmb3IgYWxsXG4gIC8vIHVwZGF0ZXMgYXQgdGhlIHNhbWUgcHJpb3JpdHkgd2l0aGluIHRoZSBzYW1lIGV2ZW50LiBUbyBkbyB0aGlzLCB0aGVcbiAgLy8gaW5wdXRzIHRvIHRoZSBhbGdvcml0aG0gbXVzdCBiZSB0aGUgc2FtZS5cbiAgLy9cbiAgLy8gVGhlIHRyaWNrIHdlIHVzZSBpcyB0byBjYWNoZSB0aGUgZmlyc3Qgb2YgZWFjaCBvZiB0aGVzZSBpbnB1dHMgd2l0aGluIGFuXG4gIC8vIGV2ZW50LiBUaGVuIHJlc2V0IHRoZSBjYWNoZWQgdmFsdWVzIG9uY2Ugd2UgY2FuIGJlIHN1cmUgdGhlIGV2ZW50IGlzXG4gIC8vIG92ZXIuIE91ciBoZXVyaXN0aWMgZm9yIHRoYXQgaXMgd2hlbmV2ZXIgd2UgZW50ZXIgYSBjb25jdXJyZW50IHdvcmsgbG9vcC5cbiAgaWYgKGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID09PSBOb0xhbmUpIHtcbiAgICAvLyBBbGwgdHJhbnNpdGlvbnMgd2l0aGluIHRoZSBzYW1lIGV2ZW50IGFyZSBhc3NpZ25lZCB0aGUgc2FtZSBsYW5lLlxuICAgIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZTtcbn1cblxuLy8gdHJhbnNpdGlvbiB1cGRhdGVzIHRoYXQgb2NjdXIgd2hpbGUgdGhlIGFzeW5jIGFjdGlvbiBpcyBzdGlsbCBpbiBwcm9ncmVzc1xuLy8gYXJlIHRyZWF0ZWQgYXMgcGFydCBvZiB0aGUgYWN0aW9uLlxuLy9cbi8vIFRoZSBpZGVhbCBiZWhhdmlvciB3b3VsZCBiZSB0byB0cmVhdCBlYWNoIGFzeW5jIGZ1bmN0aW9uIGFzIGFuIGluZGVwZW5kZW50XG4vLyBhY3Rpb24uIEhvd2V2ZXIsIHdpdGhvdXQgYSBtZWNoYW5pc20gbGlrZSBBc3luY0NvbnRleHQsIHdlIGNhbid0IHRlbGwgd2hpY2hcbi8vIGFjdGlvbiBhbiB1cGRhdGUgY29ycmVzcG9uZHMgdG8uIFNvIGluc3RlYWQsIHdlIGVudGFuZ2xlIHRoZW0gYWxsIGludG8gb25lLlxuLy8gVGhlIGxpc3RlbmVycyB0byBub3RpZnkgb25jZSB0aGUgZW50YW5nbGVkIHNjb3BlIGNvbXBsZXRlcy5cblxudmFyIGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnMgPSBudWxsOyAvLyBUaGUgbnVtYmVyIG9mIHBlbmRpbmcgYXN5bmMgYWN0aW9ucyBpbiB0aGUgZW50YW5nbGVkIHNjb3BlLlxuXG52YXIgY3VycmVudEVudGFuZ2xlZFBlbmRpbmdDb3VudCA9IDA7IC8vIFRoZSB0cmFuc2l0aW9uIGxhbmUgc2hhcmVkIGJ5IGFsbCB1cGRhdGVzIGluIHRoZSBlbnRhbmdsZWQgc2NvcGUuXG5cbnZhciBjdXJyZW50RW50YW5nbGVkTGFuZSA9IE5vTGFuZTtcbmZ1bmN0aW9uIHJlcXVlc3RBc3luY0FjdGlvbkNvbnRleHQoYWN0aW9uUmV0dXJuVmFsdWUsIC8vIElmIHRoaXMgaXMgcHJvdmlkZWQsIHRoaXMgcmVzdWx0aW5nIHRoZW5hYmxlIHJlc29sdmVzIHRvIHRoaXMgdmFsdWUgaW5zdGVhZFxuLy8gb2YgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYWN0aW9uLiBUaGlzIGlzIGEgcGVyZiB0cmljayB0byBhdm9pZCBjb21wb3Npbmdcbi8vIGFuIGV4dHJhIGFzeW5jIGZ1bmN0aW9uLlxub3ZlcnJpZGVSZXR1cm5WYWx1ZSkge1xuICAvLyBUaGlzIGlzIGFuIGFzeW5jIGFjdGlvbi5cbiAgLy9cbiAgLy8gUmV0dXJuIGEgdGhlbmFibGUgdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBhY3Rpb24gc2NvcGUgKGkuZS4gdGhlIGFzeW5jXG4gIC8vIGZ1bmN0aW9uIHBhc3NlZCB0byBzdGFydFRyYW5zaXRpb24pIGhhcyBmaW5pc2hlZCBydW5uaW5nLlxuICB2YXIgdGhlbmFibGUgPSBhY3Rpb25SZXR1cm5WYWx1ZTtcbiAgdmFyIGVudGFuZ2xlZExpc3RlbmVycztcblxuICBpZiAoY3VycmVudEVudGFuZ2xlZExpc3RlbmVycyA9PT0gbnVsbCkge1xuICAgIC8vIFRoZXJlJ3Mgbm8gb3V0ZXIgYXN5bmMgYWN0aW9uIHNjb3BlLiBDcmVhdGUgYSBuZXcgb25lLlxuICAgIGVudGFuZ2xlZExpc3RlbmVycyA9IGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnMgPSBbXTtcbiAgICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50ID0gMDtcbiAgICBjdXJyZW50RW50YW5nbGVkTGFuZSA9IHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpO1xuICB9IGVsc2Uge1xuICAgIGVudGFuZ2xlZExpc3RlbmVycyA9IGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnM7XG4gIH1cblxuICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50Kys7IC8vIENyZWF0ZSBhIHRoZW5hYmxlIHRoYXQgcmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIHRoaXMgYWN0aW9uLCBidXQgZG9lc24ndFxuICAvLyByZXNvbHZlIHVudGlsIHRoZSBlbnRpcmUgZW50YW5nbGVkIHNjb3BlIGhhcyBmaW5pc2hlZC5cbiAgLy9cbiAgLy8gRXhwcmVzc2VkIHVzaW5nIHByb21pc2VzOlxuICAvLyAgIGNvbnN0IFt0aGlzUmVzdWx0XSA9IGF3YWl0IFByb21pc2UuYWxsKFt0aGlzQWN0aW9uLCBlbnRhbmdsZWRBY3Rpb25dKTtcbiAgLy8gICByZXR1cm4gdGhpc1Jlc3VsdDtcblxuICB2YXIgcmVzdWx0VGhlbmFibGUgPSBjcmVhdGVSZXN1bHRUaGVuYWJsZShlbnRhbmdsZWRMaXN0ZW5lcnMpO1xuICB2YXIgcmVzdWx0U3RhdHVzID0gJ3BlbmRpbmcnO1xuICB2YXIgcmVzdWx0VmFsdWU7XG4gIHZhciByZWplY3RlZFJlYXNvbjtcbiAgdGhlbmFibGUudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXN1bHRTdGF0dXMgPSAnZnVsZmlsbGVkJztcbiAgICByZXN1bHRWYWx1ZSA9IG92ZXJyaWRlUmV0dXJuVmFsdWUgIT09IG51bGwgPyBvdmVycmlkZVJldHVyblZhbHVlIDogdmFsdWU7XG4gICAgcGluZ0VuZ3RhbmdsZWRBY3Rpb25TY29wZSgpO1xuICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICByZXN1bHRTdGF0dXMgPSAncmVqZWN0ZWQnO1xuICAgIHJlamVjdGVkUmVhc29uID0gZXJyb3I7XG4gICAgcGluZ0VuZ3RhbmdsZWRBY3Rpb25TY29wZSgpO1xuICB9KTsgLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gZmlsbCBpbiB0aGUgcmVzdWx0LlxuXG4gIGVudGFuZ2xlZExpc3RlbmVycy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICBzd2l0Y2ggKHJlc3VsdFN0YXR1cykge1xuICAgICAgY2FzZSAnZnVsZmlsbGVkJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBmdWxmaWxsZWRUaGVuYWJsZSA9IHJlc3VsdFRoZW5hYmxlO1xuICAgICAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnN0YXR1cyA9ICdmdWxmaWxsZWQnO1xuICAgICAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnZhbHVlID0gcmVzdWx0VmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAncmVqZWN0ZWQnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHJlamVjdGVkVGhlbmFibGUgPSByZXN1bHRUaGVuYWJsZTtcbiAgICAgICAgICByZWplY3RlZFRoZW5hYmxlLnN0YXR1cyA9ICdyZWplY3RlZCc7XG4gICAgICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5yZWFzb24gPSByZWplY3RlZFJlYXNvbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdwZW5kaW5nJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUaGUgbGlzdGVuZXIgYWJvdmUgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgZmlyc3QsIHNvIGByZXN1bHRTdGF0dXNgXG4gICAgICAgICAgLy8gc2hvdWxkIGFscmVhZHkgYmUgc2V0IHRvIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlbmFibGUgc2hvdWxkIGhhdmUgYWxyZWFkeSByZXNvbHZlZC4gVGhpcyAnICsgJ2lzIGEgYnVnIGluIFJlYWN0LicpO1xuICAgICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdFRoZW5hYmxlO1xufVxuZnVuY3Rpb24gcmVxdWVzdFN5bmNBY3Rpb25Db250ZXh0KGFjdGlvblJldHVyblZhbHVlLCAvLyBJZiB0aGlzIGlzIHByb3ZpZGVkLCB0aGlzIHJlc3VsdGluZyB0aGVuYWJsZSByZXNvbHZlcyB0byB0aGlzIHZhbHVlIGluc3RlYWRcbi8vIG9mIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGFjdGlvbi4gVGhpcyBpcyBhIHBlcmYgdHJpY2sgdG8gYXZvaWQgY29tcG9zaW5nXG4vLyBhbiBleHRyYSBhc3luYyBmdW5jdGlvbi5cbm92ZXJyaWRlUmV0dXJuVmFsdWUpIHtcbiAgdmFyIHJlc3VsdFZhbHVlID0gb3ZlcnJpZGVSZXR1cm5WYWx1ZSAhPT0gbnVsbCA/IG92ZXJyaWRlUmV0dXJuVmFsdWUgOiBhY3Rpb25SZXR1cm5WYWx1ZTsgLy8gVGhpcyBpcyBub3QgYW4gYXN5bmMgYWN0aW9uLCBidXQgaXQgbWF5IGJlIHBhcnQgb2YgYW4gb3V0ZXIgYXN5bmMgYWN0aW9uLlxuXG4gIGlmIChjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3VsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIC8vIFJldHVybiBhIHRoZW5hYmxlIHRoYXQgZG9lcyBub3QgcmVzb2x2ZSB1bnRpbCB0aGUgZW50YW5nbGVkIGFjdGlvbnNcbiAgICAvLyBoYXZlIGZpbmlzaGVkLlxuICAgIHZhciBlbnRhbmdsZWRMaXN0ZW5lcnMgPSBjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzO1xuICAgIHZhciByZXN1bHRUaGVuYWJsZSA9IGNyZWF0ZVJlc3VsdFRoZW5hYmxlKGVudGFuZ2xlZExpc3RlbmVycyk7XG4gICAgZW50YW5nbGVkTGlzdGVuZXJzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGZ1bGZpbGxlZFRoZW5hYmxlID0gcmVzdWx0VGhlbmFibGU7XG4gICAgICBmdWxmaWxsZWRUaGVuYWJsZS5zdGF0dXMgPSAnZnVsZmlsbGVkJztcbiAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnZhbHVlID0gcmVzdWx0VmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdFRoZW5hYmxlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBpbmdFbmd0YW5nbGVkQWN0aW9uU2NvcGUoKSB7XG4gIGlmIChjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzICE9PSBudWxsICYmIC0tY3VycmVudEVudGFuZ2xlZFBlbmRpbmdDb3VudCA9PT0gMCkge1xuICAgIC8vIEFsbCB0aGUgYWN0aW9ucyBoYXZlIGZpbmlzaGVkLiBDbG9zZSB0aGUgZW50YW5nbGVkIGFzeW5jIGFjdGlvbiBzY29wZVxuICAgIC8vIGFuZCBub3RpZnkgYWxsIHRoZSBsaXN0ZW5lcnMuXG4gICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnM7XG4gICAgY3VycmVudEVudGFuZ2xlZExpc3RlbmVycyA9IG51bGw7XG4gICAgY3VycmVudEVudGFuZ2xlZExhbmUgPSBOb0xhbmU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVzdWx0VGhlbmFibGUoZW50YW5nbGVkTGlzdGVuZXJzKSB7XG4gIC8vIFdhaXRzIGZvciB0aGUgZW50YW5nbGVkIGFzeW5jIGFjdGlvbiB0byBjb21wbGV0ZSwgdGhlbiByZXNvbHZlcyB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGFuIGluZGl2aWR1YWwgYWN0aW9uLlxuICB2YXIgcmVzdWx0VGhlbmFibGUgPSB7XG4gICAgc3RhdHVzOiAncGVuZGluZycsXG4gICAgdmFsdWU6IG51bGwsXG4gICAgcmVhc29uOiBudWxsLFxuICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgY2hlYXQuIGByZXNvbHZlYCBleHBlY3RzIGEgdmFsdWUgb2YgdHlwZSBgU2AgdG8gYmVcbiAgICAgIC8vIHBhc3NlZCwgYnV0IGJlY2F1c2Ugd2UncmUgaW5zdHJ1bWVudGluZyB0aGUgYHN0YXR1c2AgZmllbGQgb3Vyc2VsdmVzLFxuICAgICAgLy8gYW5kIHdlIGtub3cgdGhpcyB0aGVuYWJsZSB3aWxsIG9ubHkgYmUgdXNlZCBieSBSZWFjdCwgd2UgYWxzbyBrbm93XG4gICAgICAvLyB0aGUgdmFsdWUgaXNuJ3QgYWN0dWFsbHkgbmVlZGVkLiBTbyB3ZSBhZGQgdGhlIHJlc29sdmUgZnVuY3Rpb25cbiAgICAgIC8vIGRpcmVjdGx5IHRvIHRoZSBlbnRhbmdsZWQgbGlzdGVuZXJzLlxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgaXMgYWxzbyB3aHkgd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0aGUgdGhlbmFibGUgaXMgc3RpbGxcbiAgICAgIC8vIHBlbmRpbmc7IHRoZSBTdXNwZW5zZSBpbXBsZW1lbnRhdGlvbiBhbHJlYWR5IHBlcmZvcm1zIHRoYXQgY2hlY2suXG4gICAgICB2YXIgcGluZyA9IHJlc29sdmU7XG4gICAgICBlbnRhbmdsZWRMaXN0ZW5lcnMucHVzaChwaW5nKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiByZXN1bHRUaGVuYWJsZTtcbn1cblxuZnVuY3Rpb24gcGVla0VudGFuZ2xlZEFjdGlvbkxhbmUoKSB7XG4gIHJldHVybiBjdXJyZW50RW50YW5nbGVkTGFuZTtcbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xudmFyIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudDtcbnZhciBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdDtcbnZhciBkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaDtcbnZhciBkaWRXYXJuQWJvdXRBc3luY0NsaWVudENvbXBvbmVudDtcblxue1xuICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVzZVdyYXBwZWRJblRyeUNhdGNoID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRBc3luY0NsaWVudENvbXBvbmVudCA9IG5ldyBTZXQoKTtcbn0gLy8gVGhlIGVmZmVjdCBcImluc3RhbmNlXCIgaXMgYSBzaGFyZWQgb2JqZWN0IHRoYXQgcmVtYWlucyB0aGUgc2FtZSBmb3IgdGhlIGVudGlyZVxuLy8gbGlmZXRpbWUgb2YgYW4gZWZmZWN0LiBJbiBSdXN0IHRlcm1zLCBhIFJlZkNlbGwuIFdlIHVzZSBpdCB0byBzdG9yZSB0aGVcbi8vIFwiZGVzdHJveVwiIGZ1bmN0aW9uIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBhbiBlZmZlY3QsIGJlY2F1c2UgdGhhdCBpcyBzdGF0ZWZ1bC5cbi8vIFRoZSBmaWVsZCBpcyBgdW5kZWZpbmVkYCBpZiB0aGUgZWZmZWN0IGlzIHVubW91bnRlZCwgb3IgaWYgdGhlIGVmZmVjdCByYW5cbi8vIGJ1dCBpcyBub3Qgc3RhdGVmdWwuIFdlIGRvbid0IGV4cGxpY2l0bHkgdHJhY2sgd2hldGhlciB0aGUgZWZmZWN0IGlzIG1vdW50ZWRcbi8vIG9yIHVubW91bnRlZCBiZWNhdXNlIHRoYXQgY2FuIGJlIGluZmVycmVkIGJ5IHRoZSBoaWRkZW5uZXNzIG9mIHRoZSBmaWJlciBpblxuLy8gdGhlIHRyZWUsIGkuZS4gd2hldGhlciB0aGVyZSBpcyBhIGhpZGRlbiBPZmZzY3JlZW4gZmliZXIgYWJvdmUgaXQuXG4vL1xuLy8gSXQncyB1bmZvcnR1bmF0ZSB0aGF0IHRoaXMgaXMgc3RvcmVkIG9uIGEgc2VwYXJhdGUgb2JqZWN0LCBiZWNhdXNlIGl0IGFkZHNcbi8vIG1vcmUgbWVtb3J5IHBlciBlZmZlY3QgaW5zdGFuY2UsIGJ1dCBpdCdzIGNvbmNlcHR1YWxseSBzb3VuZC4gSSB0aGluayB0aGVyZSdzXG4vLyBsaWtlbHkgYSBiZXR0ZXIgZGF0YSBzdHJ1Y3R1cmUgd2UgY291bGQgdXNlIGZvciBlZmZlY3RzOyBwZXJoYXBzIGp1c3Qgb25lXG4vLyBhcnJheSBvZiBlZmZlY3QgaW5zdGFuY2VzIHBlciBmaWJlci4gQnV0IEkgdGhpbmsgdGhpcyBpcyBPSyBmb3Igbm93IGRlc3BpdGVcbi8vIHRoZSBhZGRpdGlvbmFsIG1lbW9yeSBhbmQgd2UgY2FuIGZvbGxvdyB1cCB3aXRoIHBlcmZvcm1hbmNlXG4vLyBvcHRpbWl6YXRpb25zIGxhdGVyLlxuLy8gVGhlc2UgYXJlIHNldCByaWdodCBiZWZvcmUgY2FsbGluZyB0aGUgY29tcG9uZW50LlxuXG5cbnZhciByZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLiBJJ3ZlIG5hbWVkIGl0IGRpZmZlcmVudGx5IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb21cbi8vIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDsgLy8gSG9va3MgYXJlIHN0b3JlZCBhcyBhIGxpbmtlZCBsaXN0IG9uIHRoZSBmaWJlcidzIG1lbW9pemVkU3RhdGUgZmllbGQuIFRoZVxuLy8gY3VycmVudCBob29rIGxpc3QgaXMgdGhlIGxpc3QgdGhhdCBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IGZpYmVyLiBUaGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBsaXN0IGlzIGEgbmV3IGxpc3QgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBmaWJlci5cblxudmFyIGN1cnJlbnRIb29rID0gbnVsbDtcbnZhciB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsOyAvLyBXaGV0aGVyIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gVGhpc1xuLy8gZG9lcyBub3QgZ2V0IHJlc2V0IGlmIHdlIGRvIGFub3RoZXIgcmVuZGVyIHBhc3M7IG9ubHkgd2hlbiB3ZSdyZSBjb21wbGV0ZWx5XG4vLyBmaW5pc2hlZCBldmFsdWF0aW5nIHRoaXMgY29tcG9uZW50LiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBzbyB3ZSBrbm93XG4vLyB3aGV0aGVyIHdlIG5lZWQgdG8gY2xlYXIgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgYWZ0ZXIgYSB0aHJvdy5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTsgLy8gV2hlcmUgYW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb25seSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MuIFRoaXNcbi8vIGdldHMgcmVzZXQgYWZ0ZXIgZWFjaCBhdHRlbXB0LlxuLy8gVE9ETzogTWF5YmUgdGhlcmUncyBzb21lIHdheSB0byBjb25zb2xpZGF0ZSB0aGlzIHdpdGhcbi8vIGBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlYC4gT3Igd2l0aCBgbnVtYmVyT2ZSZVJlbmRlcnNgLlxuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG52YXIgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgPSBmYWxzZTsgLy8gQ291bnRzIHRoZSBudW1iZXIgb2YgdXNlSWQgaG9va3MgaW4gdGhpcyBjb21wb25lbnQuXG5cbnZhciBsb2NhbElkQ291bnRlciA9IDA7IC8vIENvdW50cyBudW1iZXIgb2YgYHVzZWAtZCB0aGVuYWJsZXNcblxudmFyIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbnZhciB0aGVuYWJsZVN0YXRlID0gbnVsbDsgLy8gVXNlZCBmb3IgaWRzIHRoYXQgYXJlIGdlbmVyYXRlZCBjb21wbGV0ZWx5IGNsaWVudC1zaWRlIChpLmUuIG5vdCBkdXJpbmdcbi8vIGh5ZHJhdGlvbikuIFRoaXMgY291bnRlciBpcyBnbG9iYWwsIHNvIGNsaWVudCBpZHMgYXJlIG5vdCBzdGFibGUgYWNyb3NzXG4vLyByZW5kZXIgYXR0ZW1wdHMuXG5cbnZhciBnbG9iYWxDbGllbnRJZENvdW50ZXIgPSAwO1xudmFyIFJFX1JFTkRFUl9MSU1JVCA9IDI1OyAvLyBJbiBERVYsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcHJpbWl0aXZlIGhvb2tcblxudmFyIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDsgLy8gSW4gREVWLCB0aGlzIGxpc3QgZW5zdXJlcyB0aGF0IGhvb2tzIGFyZSBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgYmV0d2VlbiByZW5kZXJzLlxuLy8gVGhlIGxpc3Qgc3RvcmVzIHRoZSBvcmRlciBvZiBob29rcyB1c2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIgKG1vdW50KS5cbi8vIFN1YnNlcXVlbnQgcmVuZGVycyAodXBkYXRlcykgcmVmZXJlbmNlIHRoaXMgbGlzdC5cblxudmFyIGhvb2tUeXBlc0RldiA9IG51bGw7XG52YXIgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gSW4gREVWLCB0aGlzIHRyYWNrcyB3aGV0aGVyIGN1cnJlbnRseSByZW5kZXJpbmcgY29tcG9uZW50IG5lZWRzIHRvIGlnbm9yZVxuLy8gdGhlIGRlcGVuZGVuY2llcyBmb3IgSG9va3MgdGhhdCBuZWVkIHRoZW0gKGUuZy4gdXNlRWZmZWN0IG9yIHVzZU1lbW8pLlxuLy8gV2hlbiB0cnVlLCBzdWNoIEhvb2tzIHdpbGwgYWx3YXlzIGJlIFwicmVtb3VudGVkXCIuIE9ubHkgdXNlZCBkdXJpbmcgaG90IHJlbG9hZC5cblxudmFyIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIG1vdW50SG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ID09PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNEZXYgPSBbaG9va05hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBob29rVHlwZXNEZXYucHVzaChob29rTmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYrKztcblxuICAgICAgaWYgKGhvb2tUeXBlc0Rldltob29rVHlwZXNVcGRhdGVJbmRleERldl0gIT09IGhvb2tOYW1lKSB7XG4gICAgICAgIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGhvb2tOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcykge1xuICB7XG4gICAgaWYgKGRlcHMgIT09IHVuZGVmaW5lZCAmJiBkZXBzICE9PSBudWxsICYmICFpc0FycmF5KGRlcHMpKSB7XG4gICAgICAvLyBWZXJpZnkgZGVwcywgYnV0IG9ubHkgb24gbW91bnQgdG8gYXZvaWQgZXh0cmEgY2hlY2tzLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGVpciB0eXBlIHdvdWxkIGNoYW5nZSBhcyB1c3VhbGx5IHlvdSBkZWZpbmUgdGhlbSBpbmxpbmUuXG4gICAgICBlcnJvcignJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCB0aGF0IGlzIG5vdCBhbiBhcnJheSAoaW5zdGVhZCwgcmVjZWl2ZWQgYCVzYCkuIFdoZW4gJyArICdzcGVjaWZpZWQsIHRoZSBmaW5hbCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LicsIGN1cnJlbnRIb29rTmFtZUluRGV2LCB0eXBlb2YgZGVwcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGN1cnJlbnRIb29rTmFtZSkge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuXG4gICAgaWYgKCFkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciB0YWJsZSA9ICcnO1xuICAgICAgICB2YXIgc2Vjb25kQ29sdW1uU3RhcnQgPSAzMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBob29rVHlwZXNVcGRhdGVJbmRleERldjsgaSsrKSB7XG4gICAgICAgICAgdmFyIG9sZEhvb2tOYW1lID0gaG9va1R5cGVzRGV2W2ldO1xuICAgICAgICAgIHZhciBuZXdIb29rTmFtZSA9IGkgPT09IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID8gY3VycmVudEhvb2tOYW1lIDogb2xkSG9va05hbWU7XG4gICAgICAgICAgdmFyIHJvdyA9IGkgKyAxICsgXCIuIFwiICsgb2xkSG9va05hbWU7IC8vIEV4dHJhIHNwYWNlIHNvIHNlY29uZCBjb2x1bW4gbGluZXMgdXBcbiAgICAgICAgICAvLyBsb2wgQCBJRSBub3Qgc3VwcG9ydGluZyBTdHJpbmcjcmVwZWF0XG5cbiAgICAgICAgICB3aGlsZSAocm93Lmxlbmd0aCA8IHNlY29uZENvbHVtblN0YXJ0KSB7XG4gICAgICAgICAgICByb3cgKz0gJyAnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJvdyArPSBuZXdIb29rTmFtZSArICdcXG4nO1xuICAgICAgICAgIHRhYmxlICs9IHJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCdSZWFjdCBoYXMgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIEhvb2tzIGNhbGxlZCBieSAlcy4gJyArICdUaGlzIHdpbGwgbGVhZCB0byBidWdzIGFuZCBlcnJvcnMgaWYgbm90IGZpeGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIHRoZSBSdWxlcyBvZiBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzXFxuXFxuJyArICcgICBQcmV2aW91cyByZW5kZXIgICAgICAgICAgICBOZXh0IHJlbmRlclxcbicgKyAnICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyArICclcycgKyAnICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuJywgY29tcG9uZW50TmFtZSwgdGFibGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuSWZBc3luY0NsaWVudENvbXBvbmVudChDb21wb25lbnQsIGNvbXBvbmVudERvZXNJbmNsdWRlSG9va3MpIHtcbiAge1xuICAgIC8vIFRoaXMgZGV2LW9ubHkgY2hlY2sgb25seSB3b3JrcyBmb3IgZGV0ZWN0aW5nIG5hdGl2ZSBhc3luYyBmdW5jdGlvbnMsXG4gICAgLy8gbm90IHRyYW5zcGlsZWQgb25lcy4gVGhlcmUncyBhbHNvIGEgcHJvZCBjaGVjayB0aGF0IHdlIHVzZSB0byBwcmV2ZW50XG4gICAgLy8gYXN5bmMgY2xpZW50IGNvbXBvbmVudHMgZnJvbSBjcmFzaGluZyB0aGUgYXBwOyB0aGUgcHJvZCBvbmUgd29ya3MgZXZlblxuICAgIC8vIGZvciB0cmFuc3BpbGVkIGFzeW5jIGZ1bmN0aW9ucy4gTmVpdGhlciBtZWNoYW5pc20gaXMgY29tcGxldGVseVxuICAgIC8vIGJ1bGxldHByb29mIGJ1dCB0b2dldGhlciB0aGV5IGNvdmVyIHRoZSBtb3N0IGNvbW1vbiBjYXNlcy5cbiAgICB2YXIgaXNBc3luY0Z1bmN0aW9uID0gLy8gJEZsb3dJZ25vcmVbbWV0aG9kLXVuYmluZGluZ11cbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ29tcG9uZW50KSA9PT0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nO1xuXG4gICAgaWYgKGlzQXN5bmNGdW5jdGlvbikge1xuICAgICAgLy8gRW5jb3VudGVyZWQgYW4gYXN5bmMgQ2xpZW50IENvbXBvbmVudC4gVGhpcyBpcyBub3QgeWV0IHN1cHBvcnRlZCxcbiAgICAgIC8vIGV4Y2VwdCBpbiBjZXJ0YWluIGNvbnN0cmFpbmVkIGNhc2VzLCBsaWtlIGR1cmluZyBhIHJvdXRlIG5hdmlnYXRpb24uXG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTsgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHN5bmMgdXBkYXRlLiBXZSB1c2UgdGhlIFwicm9vdFwiIHJlbmRlciBsYW5lcyBoZXJlXG4gICAgICAgIC8vIGJlY2F1c2UgdGhlIFwic3VidHJlZVwiIHJlbmRlciBsYW5lcyBtYXkgaW5jbHVkZSBhZGRpdGlvbmFsIGVudGFuZ2xlZFxuICAgICAgICAvLyBsYW5lcyByZWxhdGVkIHRvIHJldmVhbGluZyBwcmV2aW91c2x5IGhpZGRlbiBjb250ZW50LlxuXG4gICAgICAgIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG4gICAgICAgIHZhciByb290UmVuZGVyTGFuZXMgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcygpO1xuXG4gICAgICAgIGlmIChyb290ICE9PSBudWxsICYmIGluY2x1ZGVzQmxvY2tpbmdMYW5lKHJvb3QsIHJvb3RSZW5kZXJMYW5lcykpIHtcbiAgICAgICAgICBlcnJvcignYXN5bmMvYXdhaXQgaXMgbm90IHlldCBzdXBwb3J0ZWQgaW4gQ2xpZW50IENvbXBvbmVudHMsIG9ubHkgJyArICdTZXJ2ZXIgQ29tcG9uZW50cy4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5ICcgKyBcImFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gXCIgKyAnZm9yIHRoZSBzZXJ2ZXIuJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGNvbmN1cnJlbnQgKFRyYW5zaXRpb24sIFJldHJ5LCBldGMpIHJlbmRlci4gV2UgZG9uJ3RcbiAgICAgICAgICAvLyB3YXJuIGluIHRoZXNlIGNhc2VzLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gSG93ZXZlciwgQXN5bmMgQ29tcG9uZW50cyBhcmUgZm9yYmlkZGVuIHRvIGluY2x1ZGUgaG9va3MsIGV2ZW5cbiAgICAgICAgICAvLyBkdXJpbmcgYSB0cmFuc2l0aW9uLCBzbyBsZXQncyBjaGVjayBmb3IgdGhhdCBoZXJlLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVE9ETzogQWRkIGEgY29ycmVzcG9uZGluZyB3YXJuaW5nIHRvIFNlcnZlciBDb21wb25lbnRzIHJ1bnRpbWUuXG4gICAgICAgICAgaWYgKGNvbXBvbmVudERvZXNJbmNsdWRlSG9va3MpIHtcbiAgICAgICAgICAgIGVycm9yKCdIb29rcyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUgYW4gYXN5bmMgY29tcG9uZW50LiBUaGlzICcgKyBcImVycm9yIGlzIG9mdGVuIGNhdXNlZCBieSBhY2NpZGVudGFsbHkgYWRkaW5nIGAndXNlIGNsaWVudCdgIFwiICsgJ3RvIGEgbW9kdWxlIHRoYXQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgdGhlIHNlcnZlci4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3InICsgJyBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbicgKyAnMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuJyArICcyLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuJyArICczLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS4nKTtcbn1cblxuZnVuY3Rpb24gYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykge1xuICB7XG4gICAgaWYgKGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzKSB7XG4gICAgICAvLyBPbmx5IHRydWUgd2hlbiB0aGlzIGNvbXBvbmVudCBpcyBiZWluZyBob3QgcmVsb2FkZWQuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByZXZEZXBzID09PSBudWxsKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgZHVyaW5nIHRoaXMgcmVuZGVyLCBidXQgbm90IGR1cmluZyAnICsgJ3RoZSBwcmV2aW91cyByZW5kZXIuIEV2ZW4gdGhvdWdoIHRoZSBmaW5hbCBhcmd1bWVudCBpcyBvcHRpb25hbCwgJyArICdpdHMgdHlwZSBjYW5ub3QgY2hhbmdlIGJldHdlZW4gcmVuZGVycy4nLCBjdXJyZW50SG9va05hbWVJbkRldik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IGJvdGhlciBjb21wYXJpbmcgbGVuZ3RocyBpbiBwcm9kIGJlY2F1c2UgdGhlc2UgYXJyYXlzIHNob3VsZCBiZVxuICAgIC8vIHBhc3NlZCBpbmxpbmUuXG4gICAgaWYgKG5leHREZXBzLmxlbmd0aCAhPT0gcHJldkRlcHMubGVuZ3RoKSB7XG4gICAgICBlcnJvcignVGhlIGZpbmFsIGFyZ3VtZW50IHBhc3NlZCB0byAlcyBjaGFuZ2VkIHNpemUgYmV0d2VlbiByZW5kZXJzLiBUaGUgJyArICdvcmRlciBhbmQgc2l6ZSBvZiB0aGlzIGFycmF5IG11c3QgcmVtYWluIGNvbnN0YW50LlxcblxcbicgKyAnUHJldmlvdXM6ICVzXFxuJyArICdJbmNvbWluZzogJXMnLCBjdXJyZW50SG9va05hbWVJbkRldiwgXCJbXCIgKyBwcmV2RGVwcy5qb2luKCcsICcpICsgXCJdXCIsIFwiW1wiICsgbmV4dERlcHMuam9pbignLCAnKSArIFwiXVwiKTtcbiAgICB9XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICBpZiAob2JqZWN0SXMobmV4dERlcHNbaV0sIHByZXZEZXBzW2ldKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnLCBuZXh0UmVuZGVyTGFuZXMpIHtcbiAgcmVuZGVyTGFuZXMgPSBuZXh0UmVuZGVyTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzIDogbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lczsgLy8gVGhlIGZvbGxvd2luZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVzZXRcbiAgLy8gY3VycmVudEhvb2sgPSBudWxsO1xuICAvLyB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAvLyBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG4gIC8vIGxvY2FsSWRDb3VudGVyID0gMDtcbiAgLy8gdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAvLyB0aGVuYWJsZVN0YXRlID0gbnVsbDtcbiAgLy8gVE9ETyBXYXJuIGlmIG5vIGhvb2tzIGFyZSB1c2VkIGF0IGFsbCBkdXJpbmcgbW91bnQsIHRoZW4gc29tZSBhcmUgdXNlZCBkdXJpbmcgdXBkYXRlLlxuICAvLyBDdXJyZW50bHkgd2Ugd2lsbCBpZGVudGlmeSB0aGUgdXBkYXRlIHJlbmRlciBhcyBhIG1vdW50IGJlY2F1c2UgbWVtb2l6ZWRTdGF0ZSA9PT0gbnVsbC5cbiAgLy8gVGhpcyBpcyB0cmlja3kgYmVjYXVzZSBpdCdzIHZhbGlkIGZvciBjZXJ0YWluIHR5cGVzIG9mIGNvbXBvbmVudHMgKGUuZy4gUmVhY3QubGF6eSlcbiAgLy8gVXNpbmcgbWVtb2l6ZWRTdGF0ZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbW91bnQvdXBkYXRlIG9ubHkgd29ya3MgaWYgYXQgbGVhc3Qgb25lIHN0YXRlZnVsIGhvb2sgaXMgdXNlZC5cbiAgLy8gTm9uLXN0YXRlZnVsIGhvb2tzIChlLmcuIGNvbnRleHQpIGRvbid0IGdldCBhZGRlZCB0byBtZW1vaXplZFN0YXRlLFxuICAvLyBzbyBtZW1vaXplZFN0YXRlIHdvdWxkIGJlIG51bGwgZHVyaW5nIHVwZGF0ZXMgYW5kIG1vdW50cy5cblxuICB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgfSBlbHNlIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBoYW5kbGVzIGFuIGVkZ2UgY2FzZSB3aGVyZSBhIGNvbXBvbmVudCBpcyB1cGRhdGluZyxcbiAgICAgIC8vIGJ1dCBubyBzdGF0ZWZ1bCBob29rcyBoYXZlIGJlZW4gdXNlZC5cbiAgICAgIC8vIFdlIHdhbnQgdG8gbWF0Y2ggdGhlIHByb2R1Y3Rpb24gY29kZSBiZWhhdmlvciAod2hpY2ggd2lsbCB1c2UgSG9va3NEaXNwYXRjaGVyT25Nb3VudCksXG4gICAgICAvLyBidXQgd2l0aCB0aGUgZXh0cmEgREVWIHZhbGlkYXRpb24gdG8gZW5zdXJlIGhvb2tzIG9yZGVyaW5nIGhhc24ndCBjaGFuZ2VkLlxuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGRvZXMgdGhhdC5cbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVjtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgfVxuICB9IC8vIEluIFN0cmljdCBNb2RlLCBkdXJpbmcgZGV2ZWxvcG1lbnQsIHVzZXIgZnVuY3Rpb25zIGFyZSBkb3VibGUgaW52b2tlZCB0b1xuICAvLyBoZWxwIGRldGVjdCBzaWRlIGVmZmVjdHMuIFRoZSBsb2dpYyBmb3IgaG93IHRoaXMgaXMgaW1wbGVtZW50ZWQgZm9yIGluXG4gIC8vIGhvb2sgY29tcG9uZW50cyBpcyBhIGJpdCBjb21wbGV4IHNvIGxldCdzIGJyZWFrIGl0IGRvd24uXG4gIC8vXG4gIC8vIFdlIHdpbGwgaW52b2tlIHRoZSBlbnRpcmUgY29tcG9uZW50IGZ1bmN0aW9uIHR3aWNlLiBIb3dldmVyLCBkdXJpbmcgdGhlXG4gIC8vIHNlY29uZCBpbnZvY2F0aW9uIG9mIHRoZSBjb21wb25lbnQsIHRoZSBob29rIHN0YXRlIGZyb20gdGhlIGZpcnN0XG4gIC8vIGludm9jYXRpb24gd2lsbCBiZSByZXVzZWQuIFRoYXQgbWVhbnMgdGhpbmdzIGxpa2UgYHVzZU1lbW9gIGZ1bmN0aW9ucyB3b24ndFxuICAvLyBydW4gYWdhaW4sIGJlY2F1c2UgdGhlIGRlcHMgd2lsbCBtYXRjaCBhbmQgdGhlIG1lbW9pemVkIHJlc3VsdCB3aWxsXG4gIC8vIGJlIHJldXNlZC5cbiAgLy9cbiAgLy8gV2Ugd2FudCBtZW1vaXplZCBmdW5jdGlvbnMgdG8gcnVuIHR3aWNlLCB0b28sIHNvIGFjY291bnQgZm9yIHRoaXMsIHVzZXJcbiAgLy8gZnVuY3Rpb25zIGFyZSBkb3VibGUgaW52b2tlZCBkdXJpbmcgdGhlICpmaXJzdCogaW52b2NhdGlvbiBvZiB0aGUgY29tcG9uZW50XG4gIC8vIGZ1bmN0aW9uLCBhbmQgYXJlICpub3QqIGRvdWJsZSBpbnZva2VkIGR1cmluZyB0aGUgc2Vjb25kIGluY292YXRpb246XG4gIC8vXG4gIC8vIC0gRmlyc3QgZXhlY3V0aW9uIG9mIGNvbXBvbmVudCBmdW5jdGlvbjogdXNlciBmdW5jdGlvbnMgYXJlIGRvdWJsZSBpbnZva2VkXG4gIC8vIC0gU2Vjb25kIGV4ZWN1dGlvbiBvZiBjb21wb25lbnQgZnVuY3Rpb24gKGluIFN0cmljdCBNb2RlLCBkdXJpbmdcbiAgLy8gICBkZXZlbG9wbWVudCk6IHVzZXIgZnVuY3Rpb25zIGFyZSBub3QgZG91YmxlIGludm9rZWQuXG4gIC8vXG4gIC8vIFRoaXMgaXMgaW50ZW50aW9uYWwgZm9yIGEgZmV3IHJlYXNvbnM7IG1vc3QgaW1wb3J0YW50bHksIGl0J3MgYmVjYXVzZSBvZlxuICAvLyBob3cgYHVzZWAgd29ya3Mgd2hlbiBzb21ldGhpbmcgc3VzcGVuZHM6IGl0IHJldXNlcyB0aGUgcHJvbWlzZSB0aGF0IHdhc1xuICAvLyBwYXNzZWQgZHVyaW5nIHRoZSBmaXJzdCBhdHRlbXB0LiBUaGlzIGlzIGl0c2VsZiBhIGZvcm0gb2YgbWVtb2l6YXRpb24uXG4gIC8vIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBtZW1vaXplIHRoZSByZWFjdGl2ZSBpbnB1dHMgdG8gdGhlIGB1c2VgIGNhbGwgdXNpbmdcbiAgLy8gYSBob29rIChpLmUuIGB1c2VNZW1vYCksIHdoaWNoIG1lYW5zLCB0aGUgcmVhY3RpdmUgaW5wdXRzIHRvIGB1c2VgIG11c3RcbiAgLy8gY29tZSBmcm9tIHRoZSBzYW1lIGNvbXBvbmVudCBpbnZvY2F0aW9uIGFzIHRoZSBvdXRwdXQuXG4gIC8vXG4gIC8vIFRoZXJlIGFyZSBwbGVudHkgb2YgdGVzdHMgdG8gZW5zdXJlIHRoaXMgYmVoYXZpb3IgaXMgY29ycmVjdC5cblxuXG4gIHZhciBzaG91bGREb3VibGVSZW5kZXJERVYgPSAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpICE9PSBOb01vZGU7XG4gIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gc2hvdWxkRG91YmxlUmVuZGVyREVWO1xuICB2YXIgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7XG4gIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gZmFsc2U7IC8vIENoZWNrIGlmIHRoZXJlIHdhcyBhIHJlbmRlciBwaGFzZSB1cGRhdGVcblxuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKSB7XG4gICAgLy8gS2VlcCByZW5kZXJpbmcgdW50aWwgdGhlIGNvbXBvbmVudCBzdGFiaWxpemVzICh0aGVyZSBhcmUgbm8gbW9yZSByZW5kZXJcbiAgICAvLyBwaGFzZSB1cGRhdGVzKS5cbiAgICBjaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rc0FnYWluKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcpO1xuICB9XG5cbiAgaWYgKHNob3VsZERvdWJsZVJlbmRlckRFVikge1xuICAgIC8vIEluIGRldmVsb3BtZW50LCBjb21wb25lbnRzIGFyZSBpbnZva2VkIHR3aWNlIHRvIGhlbHAgZGV0ZWN0IHNpZGUgZWZmZWN0cy5cbiAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBjaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rc0FnYWluKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgZmluaXNoUmVuZGVyaW5nSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gZmluaXNoUmVuZGVyaW5nSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCkge1xuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gaG9va1R5cGVzRGV2O1xuICAgIHZhciBjb21wb25lbnREb2VzSW5jbHVkZUhvb2tzID0gd29ya0luUHJvZ3Jlc3NIb29rICE9PSBudWxsIHx8IHRoZW5hYmxlSW5kZXhDb3VudGVyICE9PSAwO1xuICAgIHdhcm5JZkFzeW5jQ2xpZW50Q29tcG9uZW50KENvbXBvbmVudCwgY29tcG9uZW50RG9lc0luY2x1ZGVIb29rcyk7XG4gIH0gLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY2UuXG5cblxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjsgLy8gVGhpcyBjaGVjayB1c2VzIGN1cnJlbnRIb29rIHNvIHRoYXQgaXQgd29ya3MgdGhlIHNhbWUgaW4gREVWIGFuZCBwcm9kIGJ1bmRsZXMuXG4gIC8vIGhvb2tUeXBlc0RldiBjb3VsZCBjYXRjaCBtb3JlIGNhc2VzIChlLmcuIGNvbnRleHQpIGJ1dCBvbmx5IGluIERFViBidW5kbGVzLlxuXG4gIHZhciBkaWRSZW5kZXJUb29GZXdIb29rcyA9IGN1cnJlbnRIb29rICE9PSBudWxsICYmIGN1cnJlbnRIb29rLm5leHQgIT09IG51bGw7XG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc0RldiA9IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gQ29uZmlybSB0aGF0IGEgc3RhdGljIGZsYWcgd2FzIG5vdCBhZGRlZCBvciByZW1vdmVkIHNpbmNlIHRoZSBsYXN0XG4gICAgLy8gcmVuZGVyLiBJZiB0aGlzIGZpcmVzLCBpdCBzdWdnZXN0cyB0aGF0IHdlIGluY29ycmVjdGx5IHJlc2V0IHRoZSBzdGF0aWNcbiAgICAvLyBmbGFncyBpbiBzb21lIG90aGVyIHBhcnQgb2YgdGhlIGNvZGViYXNlLiBUaGlzIGhhcyBoYXBwZW5lZCBiZWZvcmUsIGZvclxuICAgIC8vIGV4YW1wbGUsIGluIHRoZSBTdXNwZW5zZUxpc3QgaW1wbGVtZW50YXRpb24uXG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAoY3VycmVudC5mbGFncyAmIFN0YXRpY01hc2spICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBTdGF0aWNNYXNrKSAmJiAvLyBEaXNhYmxlIHRoaXMgd2FybmluZyBpbiBsZWdhY3kgbW9kZSwgYmVjYXVzZSBsZWdhY3kgU3VzcGVuc2UgaXMgd2VpcmRcbiAgICAvLyBhbmQgY3JlYXRlcyBmYWxzZSBwb3NpdGl2ZXMuIFRvIG1ha2UgdGhpcyB3b3JrIGluIGxlZ2FjeSBtb2RlLCB3ZSdkXG4gICAgLy8gbmVlZCB0byBtYXJrIGZpYmVycyB0aGF0IGNvbW1pdCBpbiBhbiBpbmNvbXBsZXRlIHN0YXRlLCBzb21laG93LiBGb3JcbiAgICAvLyBub3cgSSdsbCBkaXNhYmxlIHRoZSB3YXJuaW5nIHRoYXQgbW9zdCBvZiB0aGUgYnVncyB0aGF0IHdvdWxkIHRyaWdnZXJcbiAgICAvLyBpdCBhcmUgZWl0aGVyIGV4Y2x1c2l2ZSB0byBjb25jdXJyZW50IG1vZGUgb3IgZXhpc3QgaW4gYm90aC5cbiAgICAoY3VycmVudC5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgIGVycm9yKCdJbnRlcm5hbCBSZWFjdCBlcnJvcjogRXhwZWN0ZWQgc3RhdGljIGZsYWcgd2FzIG1pc3NpbmcuIFBsZWFzZSAnICsgJ25vdGlmeSB0aGUgUmVhY3QgdGVhbS4nKTtcbiAgICB9XG4gIH1cblxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7IC8vIFRoaXMgaXMgcmVzZXQgYnkgY2hlY2tEaWRSZW5kZXJJZEhvb2tcbiAgLy8gbG9jYWxJZENvdW50ZXIgPSAwO1xuXG4gIHRoZW5hYmxlSW5kZXhDb3VudGVyID0gMDtcbiAgdGhlbmFibGVTdGF0ZSA9IG51bGw7XG5cbiAgaWYgKGRpZFJlbmRlclRvb0Zld0hvb2tzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZW5kZXJlZCBmZXdlciBob29rcyB0aGFuIGV4cGVjdGVkLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgYW4gYWNjaWRlbnRhbCAnICsgJ2Vhcmx5IHJldHVybiBzdGF0ZW1lbnQuJyk7XG4gIH1cblxuICB7XG4gICAgaWYgKGNoZWNrSWZVc2VXcmFwcGVkSW5UcnlDYXRjaCgpKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaC5oYXMoY29tcG9uZW50TmFtZSkgJiYgLy8gVGhpcyB3YXJuaW5nIGFsc28gZmlyZXMgaWYgeW91IHN1c3BlbmQgd2l0aCBgdXNlYCBpbnNpZGUgYW5cbiAgICAgIC8vIGFzeW5jIGNvbXBvbmVudC4gU2luY2Ugd2Ugd2FybiBmb3IgdGhhdCBhYm92ZSwgd2UnbGwgc2lsZW5jZSB0aGlzXG4gICAgICAvLyBzZWNvbmQgd2FybmluZyBieSBjaGVja2luZyBoZXJlLlxuICAgICAgIWRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaC5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJ2B1c2VgIHdhcyBjYWxsZWQgZnJvbSBpbnNpZGUgYSB0cnkvY2F0Y2ggYmxvY2suIFRoaXMgaXMgbm90IGFsbG93ZWQgJyArICdhbmQgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4gVG8gaGFuZGxlIGVycm9ycyB0cmlnZ2VyZWQgJyArICdieSBgdXNlYCwgd3JhcCB5b3VyIGNvbXBvbmVudCBpbiBhIGVycm9yIGJvdW5kYXJ5LicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsYXlTdXNwZW5kZWRDb21wb25lbnRXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVwbGF5IGEgY29tcG9uZW50IHRoYXQgcHJldmlvdXNseSBzdXNwZW5kZWQsXG4gIC8vIGFmdGVyIGl0cyBkYXRhIHJlc29sdmVzLlxuICAvL1xuICAvLyBJdCdzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHJlbmRlcldpdGhIb29rcywgYnV0IGl0IGRvZXNuJ3QgbmVlZCB0byBkb1xuICAvLyBtb3N0IG9mIHRoZSBzZXQgdXAgd29yayBiZWNhdXNlIHRoZXkgd2VyZW4ndCByZXNldCB3aGVuIHdlIHN1c3BlbmRlZDsgdGhleVxuICAvLyBvbmx5IGdldCByZXNldCB3aGVuIHRoZSBjb21wb25lbnQgZWl0aGVyIGNvbXBsZXRlcyAoZmluaXNoUmVuZGVyaW5nSG9va3MpXG4gIC8vIG9yIHVud2luZHMgKHJlc2V0SG9va3NPblVud2luZCkuXG4gIHtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xOyAvLyBVc2VkIGZvciBob3QgcmVsb2FkaW5nOlxuXG4gICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rc0FnYWluKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcpO1xuICBmaW5pc2hSZW5kZXJpbmdIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiByZW5kZXJXaXRoSG9va3NBZ2Fpbih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnKSB7XG4gIC8vIFRoaXMgaXMgdXNlZCB0byBwZXJmb3JtIGFub3RoZXIgcmVuZGVyIHBhc3MuIEl0J3MgdXNlZCB3aGVuIHNldFN0YXRlIGlzXG4gIC8vIGNhbGxlZCBkdXJpbmcgcmVuZGVyLCBhbmQgZm9yIGRvdWJsZSBpbnZva2luZyBjb21wb25lbnRzIGluIFN0cmljdCBNb2RlXG4gIC8vIGR1cmluZyBkZXZlbG9wbWVudC5cbiAgLy9cbiAgLy8gVGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIHBhc3MgaXMgcmV1c2VkIHdoZW5ldmVyIHBvc3NpYmxlLiBTbywgc3RhdGVcbiAgLy8gdXBkYXRlcyB0aGF0IHdlcmUgYWxyZWFkeSBwcm9jZXNzZWQgYXJlIG5vdCBwcm9jZXNzZWQgYWdhaW4sIGFuZCBtZW1vaXplZFxuICAvLyBmdW5jdGlvbnMgKGB1c2VNZW1vYCkgYXJlIG5vdCBpbnZva2VkIGFnYWluLlxuICAvL1xuICAvLyBLZWVwIHJlbmRlcmluZyBpbiBhIGxvb3AgZm9yIGFzIGxvbmcgYXMgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgY29udGludWUgdG9cbiAgLy8gYmUgc2NoZWR1bGVkLiBVc2UgYSBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSB3b3JrSW5Qcm9ncmVzcztcbiAgdmFyIG51bWJlck9mUmVSZW5kZXJzID0gMDtcbiAgdmFyIGNoaWxkcmVuO1xuXG4gIGRvIHtcbiAgICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKSB7XG4gICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgYSB1c2UoKSB2YWx1ZSBkZXBlbmRlZCBvbiBhIHN0YXRlIHRoYXQgd2FzIHVwZGF0ZWQgaW5cbiAgICAgIC8vIHRoaXMgcmVyZW5kZXIsIHNvIHdlIG5lZWQgdG8gd2F0Y2ggZm9yIGRpZmZlcmVudCB0aGVuYWJsZXMgdGhpcyB0aW1lLlxuICAgICAgdGhlbmFibGVTdGF0ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xuXG4gICAgaWYgKG51bWJlck9mUmVSZW5kZXJzID49IFJFX1JFTkRFUl9MSU1JVCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb28gbWFueSByZS1yZW5kZXJzLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgJyArICdhbiBpbmZpbml0ZSBsb29wLicpO1xuICAgIH1cblxuICAgIG51bWJlck9mUmVSZW5kZXJzICs9IDE7XG5cbiAgICB7XG4gICAgICAvLyBFdmVuIHdoZW4gaG90IHJlbG9hZGluZywgYWxsb3cgZGVwZW5kZW5jaWVzIHRvIHN0YWJpbGl6ZVxuICAgICAgLy8gYWZ0ZXIgZmlyc3QgcmVuZGVyIHRvIHByZXZlbnQgaW5maW5pdGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMuXG4gICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuICAgIH0gLy8gU3RhcnQgb3ZlciBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3RcblxuXG4gICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gQWxzbyB2YWxpZGF0ZSBob29rIG9yZGVyIGZvciBjYXNjYWRpbmcgdXBkYXRlcy5cbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgfVxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgO1xuICAgIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpO1xuICB9IHdoaWxlIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpO1xuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gcmVuZGVyVHJhbnNpdGlvbkF3YXJlSG9zdENvbXBvbmVudFdpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbGFuZXMpIHtcblxuICByZXR1cm4gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBUcmFuc2l0aW9uQXdhcmVIb3N0Q29tcG9uZW50LCBudWxsLCBudWxsLCBsYW5lcyk7XG59XG5mdW5jdGlvbiBUcmFuc2l0aW9uQXdhcmVIb3N0Q29tcG9uZW50KCkge1xuXG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG5cbiAgdmFyIF9kaXNwYXRjaGVyJHVzZVN0YXRlID0gZGlzcGF0Y2hlci51c2VTdGF0ZSgpLFxuICAgICAgbWF5YmVUaGVuYWJsZSA9IF9kaXNwYXRjaGVyJHVzZVN0YXRlWzBdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVUaGVuYWJsZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHRoZW5hYmxlID0gbWF5YmVUaGVuYWJsZTtcbiAgICByZXR1cm4gdXNlVGhlbmFibGUodGhlbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzdGF0dXMgPSBtYXliZVRoZW5hYmxlO1xuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cbn1cbmZ1bmN0aW9uIGNoZWNrRGlkUmVuZGVySWRIb29rKCkge1xuICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZXZlcnkgcmVuZGVyV2l0aEhvb2tzIGNhbGwuXG4gIC8vIENvbmNlcHR1YWxseSwgaXQncyBwYXJ0IG9mIHRoZSByZXR1cm4gdmFsdWUgb2YgcmVuZGVyV2l0aEhvb2tzOyBpdCdzIG9ubHkgYVxuICAvLyBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhdm9pZCB1c2luZyBhbiBhcnJheSB0dXBsZS5cbiAgdmFyIGRpZFJlbmRlcklkSG9vayA9IGxvY2FsSWRDb3VudGVyICE9PSAwO1xuICBsb2NhbElkQ291bnRlciA9IDA7XG4gIHJldHVybiBkaWRSZW5kZXJJZEhvb2s7XG59XG5mdW5jdGlvbiBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gVE9ETzogRG9uJ3QgbmVlZCB0byByZXNldCB0aGUgZmxhZ3MgaGVyZSwgYmVjYXVzZSB0aGV5J3JlIHJlc2V0IGluIHRoZVxuICAvLyBjb21wbGV0ZSBwaGFzZSAoYnViYmxlUHJvcGVydGllcykuXG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+KE1vdW50UGFzc2l2ZURldiB8IE1vdW50TGF5b3V0RGV2IHwgUGFzc2l2ZSQxIHwgVXBkYXRlKTtcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+KFBhc3NpdmUkMSB8IFVwZGF0ZSk7XG4gIH1cblxuICBjdXJyZW50LmxhbmVzID0gcmVtb3ZlTGFuZXMoY3VycmVudC5sYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcmVzZXRIb29rc0FmdGVyVGhyb3coKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIGltbWVkaWFldGx5IGFmdGVyIGEgdGhyb3cuIEl0IHNob3VsZG4ndCByZXNldCB0aGUgZW50aXJlXG4gIC8vIG1vZHVsZSBzdGF0ZSwgYmVjYXVzZSB0aGUgd29yayBsb29wIG1pZ2h0IGRlY2lkZSB0byByZXBsYXkgdGhlIGNvbXBvbmVudFxuICAvLyBhZ2FpbiB3aXRob3V0IHJld2luZGluZy5cbiAgLy9cbiAgLy8gSXQgc2hvdWxkIG9ubHkgcmVzZXQgdGhpbmdzIGxpa2UgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlciwgdG8gcHJldmVudCBob29rc1xuICAvLyBmcm9tIGJlaW5nIGNhbGxlZCBvdXRzaWRlIG9mIGEgY29tcG9uZW50LlxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDsgLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY2UuXG5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG59XG5mdW5jdGlvbiByZXNldEhvb2tzT25VbndpbmQod29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAvLyBUaGVyZSB3ZXJlIHJlbmRlciBwaGFzZSB1cGRhdGVzLiBUaGVzZSBhcmUgb25seSB2YWxpZCBmb3IgdGhpcyByZW5kZXJcbiAgICAvLyBwaGFzZSwgd2hpY2ggd2UgYXJlIG5vdyBhYm9ydGluZy4gUmVtb3ZlIHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlcyBzb1xuICAgIC8vIHRoZXkgZG8gbm90IHBlcnNpc3QgdG8gdGhlIG5leHQgcmVuZGVyLiBEbyBub3QgcmVtb3ZlIHVwZGF0ZXMgZnJvbSBob29rc1xuICAgIC8vIHRoYXQgd2VyZW4ndCBwcm9jZXNzZWQuXG4gICAgLy9cbiAgICAvLyBPbmx5IHJlc2V0IHRoZSB1cGRhdGVzIGZyb20gdGhlIHF1ZXVlIGlmIGl0IGhhcyBhIGNsb25lLiBJZiBpdCBkb2VzXG4gICAgLy8gbm90IGhhdmUgYSBjbG9uZSwgdGhhdCBtZWFucyBpdCB3YXNuJ3QgcHJvY2Vzc2VkLCBhbmQgdGhlIHVwZGF0ZXMgd2VyZVxuICAgIC8vIHNjaGVkdWxlZCBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIHZhciBob29rID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgIHdoaWxlIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gICAgICBpZiAocXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGhvb2sgPSBob29rLm5leHQ7XG4gICAgfVxuXG4gICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgcmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgY3VycmVudEhvb2sgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZmFsc2U7XG4gIGxvY2FsSWRDb3VudGVyID0gMDtcbiAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICB0aGVuYWJsZVN0YXRlID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIHZhciBob29rID0ge1xuICAgIG1lbW9pemVkU3RhdGU6IG51bGwsXG4gICAgYmFzZVN0YXRlOiBudWxsLFxuICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICBxdWV1ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3RcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBob29rO1xuICB9IGVsc2Uge1xuICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBob29rO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cblxuZnVuY3Rpb24gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYm90aCBmb3IgdXBkYXRlcyBhbmQgZm9yIHJlLXJlbmRlcnMgdHJpZ2dlcmVkIGJ5IGFcbiAgLy8gcmVuZGVyIHBoYXNlIHVwZGF0ZS4gSXQgYXNzdW1lcyB0aGVyZSBpcyBlaXRoZXIgYSBjdXJyZW50IGhvb2sgd2UgY2FuXG4gIC8vIGNsb25lLCBvciBhIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBmcm9tIGEgcHJldmlvdXMgcmVuZGVyIHBhc3MgdGhhdCB3ZSBjYW5cbiAgLy8gdXNlIGFzIGEgYmFzZS5cbiAgdmFyIG5leHRDdXJyZW50SG9vaztcblxuICBpZiAoY3VycmVudEhvb2sgPT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dEN1cnJlbnRIb29rID0gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgfVxuXG4gIHZhciBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlO1xuICB9IGVsc2Uge1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgfVxuXG4gIGlmIChuZXh0V29ya0luUHJvZ3Jlc3NIb29rICE9PSBudWxsKSB7XG4gICAgLy8gVGhlcmUncyBhbHJlYWR5IGEgd29yay1pbi1wcm9ncmVzcy4gUmV1c2UgaXQuXG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbmV4dFdvcmtJblByb2dyZXNzSG9vaztcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2xvbmUgZnJvbSB0aGUgY3VycmVudCBob29rLlxuICAgIGlmIChuZXh0Q3VycmVudEhvb2sgPT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50RmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUaGlzIGlzIHRoZSBpbml0aWFsIHJlbmRlci4gVGhpcyBicmFuY2ggaXMgcmVhY2hlZCB3aGVuIHRoZSBjb21wb25lbnRcbiAgICAgICAgLy8gc3VzcGVuZHMsIHJlc3VtZXMsIHRoZW4gcmVuZGVycyBhbiBhZGRpdGlvbmFsIGhvb2suXG4gICAgICAgIC8vIFNob3VsZCBuZXZlciBiZSByZWFjaGVkIGJlY2F1c2Ugd2Ugc2hvdWxkIHN3aXRjaCB0byB0aGUgbW91bnQgZGlzcGF0Y2hlciBmaXJzdC5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGRhdGUgaG9vayBjYWxsZWQgb24gaW5pdGlhbCByZW5kZXIuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYW4gdXBkYXRlLiBXZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBjdXJyZW50IGhvb2suXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUmVuZGVyZWQgbW9yZSBob29rcyB0aGFuIGR1cmluZyB0aGUgcHJldmlvdXMgcmVuZGVyLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rO1xuICAgIHZhciBuZXdIb29rID0ge1xuICAgICAgbWVtb2l6ZWRTdGF0ZTogY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSxcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudEhvb2suYmFzZVN0YXRlLFxuICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICBxdWV1ZTogY3VycmVudEhvb2sucXVldWUsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3QuXG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXdIb29rO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cbiAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gbmV3SG9vaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufSAvLyBOT1RFOiBkZWZpbmluZyB0d28gdmVyc2lvbnMgb2YgdGhpcyBmdW5jdGlvbiB0byBhdm9pZCBzaXplIGltcGFjdCB3aGVuIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZC5cbi8vIFByZXZpb3VzbHkgdGhpcyBmdW5jdGlvbiB3YXMgaW5saW5lZCwgdGhlIGFkZGl0aW9uYWwgYG1lbW9DYWNoZWAgcHJvcGVydHkgbWFrZXMgaXQgbm90IGlubGluZWQuXG5cblxudmFyIGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWU7XG5cbntcbiAgY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFzdEVmZmVjdDogbnVsbCxcbiAgICAgIGV2ZW50czogbnVsbCxcbiAgICAgIHN0b3JlczogbnVsbFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gIC8vIFRyYWNrIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGhlbmFibGUgd2l0aGluIHRoaXMgZmliZXIuXG4gIHZhciBpbmRleCA9IHRoZW5hYmxlSW5kZXhDb3VudGVyO1xuICB0aGVuYWJsZUluZGV4Q291bnRlciArPSAxO1xuXG4gIGlmICh0aGVuYWJsZVN0YXRlID09PSBudWxsKSB7XG4gICAgdGhlbmFibGVTdGF0ZSA9IGNyZWF0ZVRoZW5hYmxlU3RhdGUoKTtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlLCB0aGVuYWJsZSwgaW5kZXgpO1xuXG4gIGlmIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmFsdGVybmF0ZSA9PT0gbnVsbCAmJiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsID8gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID09PSBudWxsIDogd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPT09IG51bGwpKSB7XG4gICAgLy8gSW5pdGlhbCByZW5kZXIsIGFuZCBlaXRoZXIgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgY29tcG9uZW50IGlzXG4gICAgLy8gY2FsbGVkLCBvciB0aGVyZSB3ZXJlIG5vIEhvb2tzIGNhbGxlZCBhZnRlciB0aGlzIHVzZSgpIHRoZSBwcmV2aW91c1xuICAgIC8vIHRpbWUgKHBlcmhhcHMgYmVjYXVzZSBpdCB0aHJldykuIFN1YnNlcXVlbnQgSG9vayBjYWxscyBzaG91bGQgdXNlIHRoZVxuICAgIC8vIG1vdW50IGRpc3BhdGNoZXIuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdXNlKHVzYWJsZSkge1xuICBpZiAodXNhYmxlICE9PSBudWxsICYmIHR5cGVvZiB1c2FibGUgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgIGlmICh0eXBlb2YgdXNhYmxlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSB0aGVuYWJsZS5cbiAgICAgIHZhciB0aGVuYWJsZSA9IHVzYWJsZTtcbiAgICAgIHJldHVybiB1c2VUaGVuYWJsZSh0aGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmICh1c2FibGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB1c2FibGUuJCR0eXBlb2YgPT09IFJFQUNUX1NFUlZFUl9DT05URVhUX1RZUEUpIHtcbiAgICAgIHZhciBjb250ZXh0ID0gdXNhYmxlO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgIH1cbiAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gIHRocm93IG5ldyBFcnJvcignQW4gdW5zdXBwb3J0ZWQgdHlwZSB3YXMgcGFzc2VkIHRvIHVzZSgpOiAnICsgU3RyaW5nKHVzYWJsZSkpO1xufVxuXG5mdW5jdGlvbiBiYXNpY1N0YXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV06IEZsb3cgZG9lc24ndCBsaWtlIG1peGVkIHR5cGVzXG4gIHJldHVybiB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nID8gYWN0aW9uKHN0YXRlKSA6IGFjdGlvbjtcbn1cblxuZnVuY3Rpb24gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgaW5pdGlhbFN0YXRlO1xuXG4gIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0KGluaXRpYWxBcmcpO1xuICB9IGVsc2Uge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxBcmc7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0ge1xuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgbGFuZXM6IE5vTGFuZXMsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogcmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gIH07XG4gIGhvb2sucXVldWUgPSBxdWV1ZTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaFJlZHVjZXJBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICByZXR1cm4gdXBkYXRlUmVkdWNlckltcGwoaG9vaywgY3VycmVudEhvb2ssIHJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWR1Y2VySW1wbChob29rLCBjdXJyZW50LCByZWR1Y2VyKSB7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKHF1ZXVlID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gIH1cblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjsgLy8gVGhlIGxhc3QgcmViYXNlIHVwZGF0ZSB0aGF0IGlzIE5PVCBwYXJ0IG9mIHRoZSBiYXNlIHN0YXRlLlxuXG4gIHZhciBiYXNlUXVldWUgPSBob29rLmJhc2VRdWV1ZTsgLy8gVGhlIGxhc3QgcGVuZGluZyB1cGRhdGUgdGhhdCBoYXNuJ3QgYmVlbiBwcm9jZXNzZWQgeWV0LlxuXG4gIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIG5ldyB1cGRhdGVzIHRoYXQgaGF2ZW4ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG4gICAgLy8gV2UnbGwgYWRkIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG4gICAgaWYgKGJhc2VRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gTWVyZ2UgdGhlIHBlbmRpbmcgcXVldWUgYW5kIHRoZSBiYXNlIHF1ZXVlLlxuICAgICAgdmFyIGJhc2VGaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgdmFyIHBlbmRpbmdGaXJzdCA9IHBlbmRpbmdRdWV1ZS5uZXh0O1xuICAgICAgYmFzZVF1ZXVlLm5leHQgPSBwZW5kaW5nRmlyc3Q7XG4gICAgICBwZW5kaW5nUXVldWUubmV4dCA9IGJhc2VGaXJzdDtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoY3VycmVudC5iYXNlUXVldWUgIT09IGJhc2VRdWV1ZSkge1xuICAgICAgICAvLyBJbnRlcm5hbCBpbnZhcmlhbnQgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgZmVhc2libHkgY291bGQgaW5cbiAgICAgICAgLy8gdGhlIGZ1dHVyZSBpZiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcsIG9yIHNvbWUgZm9ybSBvZiB0aGF0LlxuICAgICAgICBlcnJvcignSW50ZXJuYWwgZXJyb3I6IEV4cGVjdGVkIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgdG8gYmUgYSBjbG9uZS4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnQuYmFzZVF1ZXVlID0gYmFzZVF1ZXVlID0gcGVuZGluZ1F1ZXVlO1xuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICB9XG5cbiAgdmFyIGJhc2VTdGF0ZSA9IGhvb2suYmFzZVN0YXRlO1xuXG4gIGlmIChiYXNlUXVldWUgPT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGVuZGluZyB1cGRhdGVzLCB0aGVuIHRoZSBtZW1vaXplZCBzdGF0ZSBzaG91bGQgYmUgdGhlXG4gICAgLy8gc2FtZSBhcyB0aGUgYmFzZSBzdGF0ZS4gQ3VycmVudGx5IHRoZXNlIG9ubHkgZGl2ZXJnZSBpbiB0aGUgY2FzZSBvZlxuICAgIC8vIHVzZU9wdGltaXN0aWMsIGJlY2F1c2UgdXNlT3B0aW1pc3RpYyBhY2NlcHRzIGEgbmV3IGJhc2VTdGF0ZSBvblxuICAgIC8vIGV2ZXJ5IHJlbmRlci5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBiYXNlU3RhdGU7IC8vIFdlIGRvbid0IG5lZWQgdG8gY2FsbCBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSBiZWNhdXNlXG4gICAgLy8gYmFzZVN0YXRlIGlzIGRlcml2ZWQgZnJvbSBvdGhlciByZWFjdGl2ZSB2YWx1ZXMuXG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgaGF2ZSBhIHF1ZXVlIHRvIHByb2Nlc3MuXG4gICAgdmFyIGZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgdmFyIG5ld1N0YXRlID0gYmFzZVN0YXRlO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlUXVldWVGaXJzdCA9IG51bGw7XG4gICAgdmFyIG5ld0Jhc2VRdWV1ZUxhc3QgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdDtcblxuICAgIGRvIHtcbiAgICAgIC8vIEFuIGV4dHJhIE9mZnNjcmVlbkxhbmUgYml0IGlzIGFkZGVkIHRvIHVwZGF0ZXMgdGhhdCB3ZXJlIG1hZGUgdG9cbiAgICAgIC8vIGEgaGlkZGVuIHRyZWUsIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB1cGRhdGVzIHRoYXQgd2VyZVxuICAgICAgLy8gYWxyZWFkeSB0aGVyZSB3aGVuIHRoZSB0cmVlIHdhcyBoaWRkZW4uXG4gICAgICB2YXIgdXBkYXRlTGFuZSA9IHJlbW92ZUxhbmVzKHVwZGF0ZS5sYW5lLCBPZmZzY3JlZW5MYW5lKTtcbiAgICAgIHZhciBpc0hpZGRlblVwZGF0ZSA9IHVwZGF0ZUxhbmUgIT09IHVwZGF0ZS5sYW5lOyAvLyBDaGVjayBpZiB0aGlzIHVwZGF0ZSB3YXMgbWFkZSB3aGlsZSB0aGUgdHJlZSB3YXMgaGlkZGVuLiBJZiBzbywgdGhlblxuICAgICAgLy8gaXQncyBub3QgYSBcImJhc2VcIiB1cGRhdGUgYW5kIHdlIHNob3VsZCBkaXNyZWdhcmQgdGhlIGV4dHJhIGJhc2UgbGFuZXNcbiAgICAgIC8vIHRoYXQgd2VyZSBhZGRlZCB0byByZW5kZXJMYW5lcyB3aGVuIHdlIGVudGVyZWQgdGhlIE9mZnNjcmVlbiB0cmVlLlxuXG4gICAgICB2YXIgc2hvdWxkU2tpcFVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlID8gIWlzU3Vic2V0T2ZMYW5lcyhnZXRXb3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcygpLCB1cGRhdGVMYW5lKSA6ICFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpO1xuXG4gICAgICBpZiAoc2hvdWxkU2tpcFVwZGF0ZSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIHJldmVydExhbmU6IHVwZGF0ZS5yZXZlcnRMYW5lLFxuICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdCYXNlUXVldWVGaXJzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QgPSBjbG9uZTtcbiAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gY2xvbmU7XG4gICAgICAgIH0gLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgcHJpb3JpdHkgaW4gdGhlIHF1ZXVlLlxuICAgICAgICAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZVxuICAgICAgICAvLyByZW5kZXJMYW5lcyBmcm9tIHRoZSBvcmlnaW5hbCBsYW5lcy5cblxuXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgPSBtZXJnZUxhbmVzKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMsIHVwZGF0ZUxhbmUpO1xuICAgICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHVwZGF0ZUxhbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyB1cGRhdGUgZG9lcyBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gb3B0aW1pc3RpYyB1cGRhdGUuXG4gICAgICAgIHZhciByZXZlcnRMYW5lID0gdXBkYXRlLnJldmVydExhbmU7XG5cbiAgICAgICAgaWYgKHJldmVydExhbmUgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGFuIG9wdGltaXN0aWMgdXBkYXRlLCBhbmQgd2UncmUgZ29pbmcgdG8gYXBwbHkgaXQgbm93LlxuICAgICAgICAgIC8vIEJ1dCwgaWYgdGhlcmUgd2VyZSBlYXJsaWVyIHVwZGF0ZXMgdGhhdCB3ZXJlIHNraXBwZWQsIHdlIG5lZWQgdG9cbiAgICAgICAgICAvLyBsZWF2ZSB0aGlzIHVwZGF0ZSBpbiB0aGUgcXVldWUgc28gaXQgY2FuIGJlIHJlYmFzZWQgbGF0ZXIuXG4gICAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBfY2xvbmUgPSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG5ldmVyIGJlIHNraXBwZWQgYnkgdGhlIGNoZWNrIGFib3ZlLlxuICAgICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICAgIHJldmVydExhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gX2Nsb25lO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGFuIG9wdGltaXN0aWMgdXBkYXRlLiBJZiB0aGUgXCJyZXZlcnRcIiBwcmlvcml0eSBpc1xuICAgICAgICAgIC8vIHN1ZmZpY2llbnQsIGRvbid0IGFwcGx5IHRoZSB1cGRhdGUuIE90aGVyd2lzZSwgYXBwbHkgdGhlIHVwZGF0ZSxcbiAgICAgICAgICAvLyBidXQgbGVhdmUgaXQgaW4gdGhlIHF1ZXVlIHNvIGl0IGNhbiBiZSBlaXRoZXIgcmV2ZXJ0ZWQgb3JcbiAgICAgICAgICAvLyByZWJhc2VkIGluIGEgc3Vic2VxdWVudCByZW5kZXIuXG4gICAgICAgICAgaWYgKGlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgcmV2ZXJ0TGFuZSkpIHtcbiAgICAgICAgICAgIC8vIFRoZSB0cmFuc2l0aW9uIHRoYXQgdGhpcyBvcHRpbWlzdGljIHVwZGF0ZSBpcyBhc3NvY2lhdGVkIHdpdGhcbiAgICAgICAgICAgIC8vIGhhcyBmaW5pc2hlZC4gUHJldGVuZCB0aGUgdXBkYXRlIGRvZXNuJ3QgZXhpc3QgYnkgc2tpcHBpbmdcbiAgICAgICAgICAgIC8vIG92ZXIgaXQuXG4gICAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgX2Nsb25lMiA9IHtcbiAgICAgICAgICAgICAgLy8gT25jZSB3ZSBjb21taXQgYW4gb3B0aW1pc3RpYyB1cGRhdGUsIHdlIHNob3VsZG4ndCB1bmNvbW1pdCBpdFxuICAgICAgICAgICAgICAvLyB1bnRpbCB0aGUgdHJhbnNpdGlvbiBpdCBpcyBhc3NvY2lhdGVkIHdpdGggaGFzIGZpbmlzaGVkXG4gICAgICAgICAgICAgIC8vIChyZXByZXNlbnRlZCBieSByZXZlcnRMYW5lKS4gVXNpbmcgTm9MYW5lIGhlcmUgd29ya3MgYmVjYXVzZSAwXG4gICAgICAgICAgICAgIC8vIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc28gdGhpcyB3aWxsIG5ldmVyIGJlIHNraXBwZWQgYnlcbiAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGFib3ZlLlxuICAgICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICAgIC8vIFJldXNlIHRoZSBzYW1lIHJldmVydExhbmUgc28gd2Uga25vdyB3aGVuIHRoZSB0cmFuc2l0aW9uXG4gICAgICAgICAgICAgIC8vIGhhcyBmaW5pc2hlZC5cbiAgICAgICAgICAgICAgcmV2ZXJ0TGFuZTogdXBkYXRlLnJldmVydExhbmUsXG4gICAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgICAgaGFzRWFnZXJTdGF0ZTogdXBkYXRlLmhhc0VhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBuZXdCYXNlUXVldWVGaXJzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QgPSBfY2xvbmUyO1xuICAgICAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBfY2xvbmUyO1xuICAgICAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG4gICAgICAgICAgICAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZVxuICAgICAgICAgICAgLy8gcmVuZGVyTGFuZXMgZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cblxuICAgICAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyA9IG1lcmdlTGFuZXMoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcywgcmV2ZXJ0TGFuZSk7XG4gICAgICAgICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHJldmVydExhbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBQcm9jZXNzIHRoaXMgdXBkYXRlLlxuXG5cbiAgICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG5cbiAgICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgICAgcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGUuaGFzRWFnZXJTdGF0ZSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgdXBkYXRlIGlzIGEgc3RhdGUgdXBkYXRlIChub3QgYSByZWR1Y2VyKSBhbmQgd2FzIHByb2Nlc3NlZCBlYWdlcmx5LFxuICAgICAgICAgIC8vIHdlIGNhbiB1c2UgdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGVcbiAgICAgICAgICBuZXdTdGF0ZSA9IHVwZGF0ZS5lYWdlclN0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1N0YXRlID0gcmVkdWNlcihuZXdTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwgJiYgdXBkYXRlICE9PSBmaXJzdCk7XG5cbiAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IG5ld0Jhc2VRdWV1ZUZpcnN0O1xuICAgIH0gLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIGhvb2suYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAgaWYgKGJhc2VRdWV1ZSA9PT0gbnVsbCkge1xuICAgIC8vIGBxdWV1ZS5sYW5lc2AgaXMgdXNlZCBmb3IgZW50YW5nbGluZyB0cmFuc2l0aW9ucy4gV2UgY2FuIHNldCBpdCBiYWNrIHRvXG4gICAgLy8gemVybyBvbmNlIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICBxdWV1ZS5sYW5lcyA9IE5vTGFuZXM7XG4gIH1cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICBpZiAocXVldWUgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgfVxuXG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyOyAvLyBUaGlzIGlzIGEgcmUtcmVuZGVyLiBBcHBseSB0aGUgbmV3IHJlbmRlciBwaGFzZSB1cGRhdGVzIHRvIHRoZSBwcmV2aW91c1xuICAvLyB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHZhciBsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBxdWV1ZS5wZW5kaW5nO1xuICB2YXIgbmV3U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSBxdWV1ZSBkb2Vzbid0IHBlcnNpc3QgcGFzdCB0aGlzIHJlbmRlciBwYXNzLlxuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgIHZhciBmaXJzdFJlbmRlclBoYXNlVXBkYXRlID0gbGFzdFJlbmRlclBoYXNlVXBkYXRlLm5leHQ7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGU7XG5cbiAgICBkbyB7XG4gICAgICAvLyBQcm9jZXNzIHRoaXMgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gV2UgZG9uJ3QgaGF2ZSB0byBjaGVjayB0aGVcbiAgICAgIC8vIHByaW9yaXR5IGJlY2F1c2UgaXQgd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnRcbiAgICAgIC8vIHJlbmRlcidzLlxuICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG4gICAgICBuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIGFjdGlvbik7XG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUpOyAvLyBNYXJrIHRoYXQgdGhlIGZpYmVyIHBlcmZvcm1lZCB3b3JrLCBidXQgb25seSBpZiB0aGUgbmV3IHN0YXRlIGlzXG4gICAgLy8gZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuXG5cblxuICAgIGlmICghb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkpIHtcbiAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7IC8vIERvbid0IHBlcnNpc3QgdGhlIHN0YXRlIGFjY3VtdWxhdGVkIGZyb20gdGhlIHJlbmRlciBwaGFzZSB1cGRhdGVzIHRvXG4gICAgLy8gdGhlIGJhc2Ugc3RhdGUgdW5sZXNzIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICAvLyBUT0RPOiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSBkZXNpcmVkIHNlbWFudGljcywgYnV0IGl0J3Mgd2hhdCB3ZVxuICAgIC8vIGRvIGZvciBnRFNGUC4gSSBjYW4ndCByZW1lbWJlciB3aHkuXG5cbiAgICBpZiAoaG9vay5iYXNlUXVldWUgPT09IG51bGwpIHtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBbbmV3U3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCkge1xuICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0U25hcHNob3Q7XG4gIHZhciBpc0h5ZHJhdGluZyA9IGdldElzSHlkcmF0aW5nKCk7XG5cbiAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgaWYgKGdldFNlcnZlclNuYXBzaG90ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBnZXRTZXJ2ZXJTbmFwc2hvdCwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yICcgKyAnc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFdpbGwgcmV2ZXJ0IHRvIGNsaWVudCByZW5kZXJpbmcuJyk7XG4gICAgfVxuXG4gICAgbmV4dFNuYXBzaG90ID0gZ2V0U2VydmVyU25hcHNob3QoKTtcblxuICAgIHtcbiAgICAgIGlmICghZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QpIHtcbiAgICAgICAgaWYgKG5leHRTbmFwc2hvdCAhPT0gZ2V0U2VydmVyU25hcHNob3QoKSkge1xuICAgICAgICAgIGVycm9yKCdUaGUgcmVzdWx0IG9mIGdldFNlcnZlclNuYXBzaG90IHNob3VsZCBiZSBjYWNoZWQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcCcpO1xuXG4gICAgICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5leHRTbmFwc2hvdCA9IGdldFNuYXBzaG90KCk7XG5cbiAgICB7XG4gICAgICBpZiAoIWRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90KSB7XG4gICAgICAgIHZhciBjYWNoZWRTbmFwc2hvdCA9IGdldFNuYXBzaG90KCk7XG5cbiAgICAgICAgaWYgKCFvYmplY3RJcyhuZXh0U25hcHNob3QsIGNhY2hlZFNuYXBzaG90KSkge1xuICAgICAgICAgIGVycm9yKCdUaGUgcmVzdWx0IG9mIGdldFNuYXBzaG90IHNob3VsZCBiZSBjYWNoZWQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcCcpO1xuXG4gICAgICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBVbmxlc3Mgd2UncmUgcmVuZGVyaW5nIGEgYmxvY2tpbmcgbGFuZSwgc2NoZWR1bGUgYSBjb25zaXN0ZW5jeSBjaGVjay5cbiAgICAvLyBSaWdodCBiZWZvcmUgY29tbWl0dGluZywgd2Ugd2lsbCB3YWxrIHRoZSB0cmVlIGFuZCBjaGVjayBpZiBhbnkgb2YgdGhlXG4gICAgLy8gc3RvcmVzIHdlcmUgbXV0YXRlZC5cbiAgICAvL1xuICAgIC8vIFdlIHdvbid0IGRvIHRoaXMgaWYgd2UncmUgaHlkcmF0aW5nIHNlcnZlci1yZW5kZXJlZCBjb250ZW50LCBiZWNhdXNlIGlmXG4gICAgLy8gdGhlIGNvbnRlbnQgaXMgc3RhbGUsIGl0J3MgYWxyZWFkeSB2aXNpYmxlIGFueXdheS4gSW5zdGVhZCB3ZSdsbCBwYXRjaFxuICAgIC8vIGl0IHVwIGluIGEgcGFzc2l2ZSBlZmZlY3QuXG5cblxuICAgIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgICBpZiAocm9vdCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuXG4gICAgdmFyIHJvb3RSZW5kZXJMYW5lcyA9IGdldFdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKCk7XG5cbiAgICBpZiAoIWluY2x1ZGVzQmxvY2tpbmdMYW5lKHJvb3QsIHJvb3RSZW5kZXJMYW5lcykpIHtcbiAgICAgIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuICAgIH1cbiAgfSAvLyBSZWFkIHRoZSBjdXJyZW50IHNuYXBzaG90IGZyb20gdGhlIHN0b3JlIG9uIGV2ZXJ5IHJlbmRlci4gVGhpcyBicmVha3MgdGhlXG4gIC8vIG5vcm1hbCBydWxlcyBvZiBSZWFjdCwgYW5kIG9ubHkgd29ya3MgYmVjYXVzZSBzdG9yZSB1cGRhdGVzIGFyZVxuICAvLyBhbHdheXMgc3luY2hyb25vdXMuXG5cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXh0U25hcHNob3Q7XG4gIHZhciBpbnN0ID0ge1xuICAgIHZhbHVlOiBuZXh0U25hcHNob3QsXG4gICAgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90XG4gIH07XG4gIGhvb2sucXVldWUgPSBpbnN0OyAvLyBTY2hlZHVsZSBhbiBlZmZlY3QgdG8gc3Vic2NyaWJlIHRvIHRoZSBzdG9yZS5cblxuICBtb3VudEVmZmVjdChzdWJzY3JpYmVUb1N0b3JlLmJpbmQobnVsbCwgZmliZXIsIGluc3QsIHN1YnNjcmliZSksIFtzdWJzY3JpYmVdKTsgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIHVwZGF0ZSB0aGUgbXV0YWJsZSBpbnN0YW5jZSBmaWVsZHMuIFdlIHdpbGwgdXBkYXRlXG4gIC8vIHRoaXMgd2hlbmV2ZXIgc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgb3IgdmFsdWUgY2hhbmdlcy4gQmVjYXVzZSB0aGVyZSdzIG5vXG4gIC8vIGNsZWFuLXVwIGZ1bmN0aW9uLCBhbmQgd2UgdHJhY2sgdGhlIGRlcHMgY29ycmVjdGx5LCB3ZSBjYW4gY2FsbCBwdXNoRWZmZWN0XG4gIC8vIGRpcmVjdGx5LCB3aXRob3V0IHN0b3JpbmcgYW55IGFkZGl0aW9uYWwgc3RhdGUuIEZvciB0aGUgc2FtZSByZWFzb24sIHdlXG4gIC8vIGRvbid0IG5lZWQgdG8gc2V0IGEgc3RhdGljIGZsYWcsIGVpdGhlci5cblxuICBmaWJlci5mbGFncyB8PSBQYXNzaXZlJDE7XG4gIHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgUGFzc2l2ZSwgdXBkYXRlU3RvcmVJbnN0YW5jZS5iaW5kKG51bGwsIGZpYmVyLCBpbnN0LCBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90KSwgY3JlYXRlRWZmZWN0SW5zdGFuY2UoKSwgbnVsbCk7XG4gIHJldHVybiBuZXh0U25hcHNob3Q7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7IC8vIFJlYWQgdGhlIGN1cnJlbnQgc25hcHNob3QgZnJvbSB0aGUgc3RvcmUgb24gZXZlcnkgcmVuZGVyLiBUaGlzIGJyZWFrcyB0aGVcbiAgLy8gbm9ybWFsIHJ1bGVzIG9mIFJlYWN0LCBhbmQgb25seSB3b3JrcyBiZWNhdXNlIHN0b3JlIHVwZGF0ZXMgYXJlXG4gIC8vIGFsd2F5cyBzeW5jaHJvbm91cy5cblxuICB2YXIgbmV4dFNuYXBzaG90O1xuICB2YXIgaXNIeWRyYXRpbmcgPSBnZXRJc0h5ZHJhdGluZygpO1xuXG4gIGlmIChpc0h5ZHJhdGluZykge1xuICAgIC8vIE5lZWRlZCBmb3Igc3RyaWN0IG1vZGUgZG91YmxlIHJlbmRlclxuICAgIGlmIChnZXRTZXJ2ZXJTbmFwc2hvdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgZ2V0U2VydmVyU25hcHNob3QsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciAnICsgJ3NlcnZlci1yZW5kZXJlZCBjb250ZW50LiBXaWxsIHJldmVydCB0byBjbGllbnQgcmVuZGVyaW5nLicpO1xuICAgIH1cblxuICAgIG5leHRTbmFwc2hvdCA9IGdldFNlcnZlclNuYXBzaG90KCk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcblxuICAgIHtcbiAgICAgIGlmICghZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QpIHtcbiAgICAgICAgdmFyIGNhY2hlZFNuYXBzaG90ID0gZ2V0U25hcHNob3QoKTtcblxuICAgICAgICBpZiAoIW9iamVjdElzKG5leHRTbmFwc2hvdCwgY2FjaGVkU25hcHNob3QpKSB7XG4gICAgICAgICAgZXJyb3IoJ1RoZSByZXN1bHQgb2YgZ2V0U25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wJyk7XG5cbiAgICAgICAgICBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcHJldlNuYXBzaG90ID0gKGN1cnJlbnRIb29rIHx8IGhvb2spLm1lbW9pemVkU3RhdGU7XG4gIHZhciBzbmFwc2hvdENoYW5nZWQgPSAhb2JqZWN0SXMocHJldlNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuXG4gIGlmIChzbmFwc2hvdENoYW5nZWQpIHtcbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXh0U25hcHNob3Q7XG4gICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgfVxuXG4gIHZhciBpbnN0ID0gaG9vay5xdWV1ZTtcbiAgdXBkYXRlRWZmZWN0KHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSwgW3N1YnNjcmliZV0pOyAvLyBXaGVuZXZlciBnZXRTbmFwc2hvdCBvciBzdWJzY3JpYmUgY2hhbmdlcywgd2UgbmVlZCB0byBjaGVjayBpbiB0aGVcbiAgLy8gY29tbWl0IHBoYXNlIGlmIHRoZXJlIHdhcyBhbiBpbnRlcmxlYXZlZCBtdXRhdGlvbi4gSW4gY29uY3VycmVudCBtb2RlXG4gIC8vIHRoaXMgY2FuIGhhcHBlbiBhbGwgdGhlIHRpbWUsIGJ1dCBldmVuIGluIHN5bmNocm9ub3VzIG1vZGUsIGFuIGVhcmxpZXJcbiAgLy8gZWZmZWN0IG1heSBoYXZlIG11dGF0ZWQgdGhlIHN0b3JlLlxuXG4gIGlmIChpbnN0LmdldFNuYXBzaG90ICE9PSBnZXRTbmFwc2hvdCB8fCBzbmFwc2hvdENoYW5nZWQgfHwgLy8gQ2hlY2sgaWYgdGhlIHN1YnNjcmliZSBmdW5jdGlvbiBjaGFuZ2VkLiBXZSBjYW4gc2F2ZSBzb21lIG1lbW9yeSBieVxuICAvLyBjaGVja2luZyB3aGV0aGVyIHdlIHNjaGVkdWxlZCBhIHN1YnNjcmlwdGlvbiBlZmZlY3QgYWJvdmUuXG4gIHdvcmtJblByb2dyZXNzSG9vayAhPT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzc0hvb2subWVtb2l6ZWRTdGF0ZS50YWcgJiBIYXNFZmZlY3QpIHtcbiAgICBmaWJlci5mbGFncyB8PSBQYXNzaXZlJDE7XG4gICAgcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBQYXNzaXZlLCB1cGRhdGVTdG9yZUluc3RhbmNlLmJpbmQobnVsbCwgZmliZXIsIGluc3QsIG5leHRTbmFwc2hvdCwgZ2V0U25hcHNob3QpLCBjcmVhdGVFZmZlY3RJbnN0YW5jZSgpLCBudWxsKTsgLy8gVW5sZXNzIHdlJ3JlIHJlbmRlcmluZyBhIGJsb2NraW5nIGxhbmUsIHNjaGVkdWxlIGEgY29uc2lzdGVuY3kgY2hlY2suXG4gICAgLy8gUmlnaHQgYmVmb3JlIGNvbW1pdHRpbmcsIHdlIHdpbGwgd2FsayB0aGUgdHJlZSBhbmQgY2hlY2sgaWYgYW55IG9mIHRoZVxuICAgIC8vIHN0b3JlcyB3ZXJlIG11dGF0ZWQuXG5cbiAgICB2YXIgcm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuXG4gICAgaWYgKHJvb3QgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cblxuICAgIGlmICghaXNIeWRyYXRpbmcgJiYgIWluY2x1ZGVzQmxvY2tpbmdMYW5lKHJvb3QsIHJlbmRlckxhbmVzKSkge1xuICAgICAgcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIG5leHRTbmFwc2hvdCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRTbmFwc2hvdDtcbn1cblxuZnVuY3Rpb24gcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIHJlbmRlcmVkU25hcHNob3QpIHtcbiAgZmliZXIuZmxhZ3MgfD0gU3RvcmVDb25zaXN0ZW5jeTtcbiAgdmFyIGNoZWNrID0ge1xuICAgIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCxcbiAgICB2YWx1ZTogcmVuZGVyZWRTbmFwc2hvdFxuICB9O1xuICB2YXIgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChjb21wb25lbnRVcGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpO1xuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWUgPSBjb21wb25lbnRVcGRhdGVRdWV1ZTtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5zdG9yZXMgPSBbY2hlY2tdO1xuICB9IGVsc2Uge1xuICAgIHZhciBzdG9yZXMgPSBjb21wb25lbnRVcGRhdGVRdWV1ZS5zdG9yZXM7XG5cbiAgICBpZiAoc3RvcmVzID09PSBudWxsKSB7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5zdG9yZXMgPSBbY2hlY2tdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG9yZXMucHVzaChjaGVjayk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0b3JlSW5zdGFuY2UoZmliZXIsIGluc3QsIG5leHRTbmFwc2hvdCwgZ2V0U25hcHNob3QpIHtcbiAgLy8gVGhlc2UgYXJlIHVwZGF0ZWQgaW4gdGhlIHBhc3NpdmUgcGhhc2VcbiAgaW5zdC52YWx1ZSA9IG5leHRTbmFwc2hvdDtcbiAgaW5zdC5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90OyAvLyBTb21ldGhpbmcgbWF5IGhhdmUgYmVlbiBtdXRhdGVkIGluIGJldHdlZW4gcmVuZGVyIGFuZCBjb21taXQuIFRoaXMgY291bGRcbiAgLy8gaGF2ZSBiZWVuIGluIGFuIGV2ZW50IHRoYXQgZmlyZWQgYmVmb3JlIHRoZSBwYXNzaXZlIGVmZmVjdHMsIG9yIGl0IGNvdWxkXG4gIC8vIGhhdmUgYmVlbiBpbiBhIGxheW91dCBlZmZlY3QuIEluIHRoYXQgY2FzZSwgd2Ugd291bGQgaGF2ZSB1c2VkIHRoZSBvbGRcbiAgLy8gc25hcHNobyBhbmQgZ2V0U25hcHNob3QgdmFsdWVzIHRvIGJhaWwgb3V0LiBXZSBuZWVkIHRvIGNoZWNrIG9uZSBtb3JlIHRpbWUuXG5cbiAgaWYgKGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkpIHtcbiAgICAvLyBGb3JjZSBhIHJlLXJlbmRlci5cbiAgICBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZVRvU3RvcmUoZmliZXIsIGluc3QsIHN1YnNjcmliZSkge1xuICB2YXIgaGFuZGxlU3RvcmVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhlIHN0b3JlIGNoYW5nZWQuIENoZWNrIGlmIHRoZSBzbmFwc2hvdCBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2VcbiAgICAvLyByZWFkIGZyb20gdGhlIHN0b3JlLlxuICAgIGlmIChjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpKSB7XG4gICAgICAvLyBGb3JjZSBhIHJlLXJlbmRlci5cbiAgICAgIGZvcmNlU3RvcmVSZXJlbmRlcihmaWJlcik7XG4gICAgfVxuICB9OyAvLyBTdWJzY3JpYmUgdG8gdGhlIHN0b3JlIGFuZCByZXR1cm4gYSBjbGVhbi11cCBmdW5jdGlvbi5cblxuXG4gIHJldHVybiBzdWJzY3JpYmUoaGFuZGxlU3RvcmVDaGFuZ2UpO1xufVxuXG5mdW5jdGlvbiBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpIHtcbiAgdmFyIGxhdGVzdEdldFNuYXBzaG90ID0gaW5zdC5nZXRTbmFwc2hvdDtcbiAgdmFyIHByZXZWYWx1ZSA9IGluc3QudmFsdWU7XG5cbiAgdHJ5IHtcbiAgICB2YXIgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICByZXR1cm4gIW9iamVjdElzKHByZXZWYWx1ZSwgbmV4dFZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpIHtcbiAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50U3RhdGVJbXBsKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG5cbiAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGxhbmVzOiBOb0xhbmVzLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgfTtcbiAgaG9vay5xdWV1ZSA9IHF1ZXVlO1xuICByZXR1cm4gaG9vaztcbn1cblxuZnVuY3Rpb24gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFN0YXRlSW1wbChpbml0aWFsU3RhdGUpO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuICB2YXIgZGlzcGF0Y2ggPSBkaXNwYXRjaFNldFN0YXRlLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gbW91bnRPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBwYXNzdGhyb3VnaDtcbiAgdmFyIHF1ZXVlID0ge1xuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgbGFuZXM6IE5vTGFuZXMsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgLy8gT3B0aW1pc3RpYyBzdGF0ZSBkb2VzIG5vdCB1c2UgdGhlIGVhZ2VyIHVwZGF0ZSBvcHRpbWl6YXRpb24uXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogbnVsbFxuICB9O1xuICBob29rLnF1ZXVlID0gcXVldWU7IC8vIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIG5vcm1hbCBzZXRTdGF0ZSBmdW5jdGlvbi5cblxuICB2YXIgZGlzcGF0Y2ggPSBkaXNwYXRjaE9wdGltaXN0aWNTZXRTdGF0ZS5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIHRydWUsIHF1ZXVlKTtcbiAgcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgcmV0dXJuIFtwYXNzdGhyb3VnaCwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHJldHVybiB1cGRhdGVPcHRpbWlzdGljSW1wbChob29rLCBjdXJyZW50SG9vaywgcGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVPcHRpbWlzdGljSW1wbChob29rLCBjdXJyZW50LCBwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAvLyBPcHRpbWlzdGljIHVwZGF0ZXMgYXJlIGFsd2F5cyByZWJhc2VkIG9uIHRvcCBvZiB0aGUgbGF0ZXN0IHZhbHVlIHBhc3NlZCBpblxuICAvLyBhcyBhbiBhcmd1bWVudC4gSXQncyBjYWxsZWQgYSBwYXNzdGhyb3VnaCBiZWNhdXNlIGlmIHRoZXJlIGFyZSBubyBwZW5kaW5nXG4gIC8vIHVwZGF0ZXMsIGl0IHdpbGwgYmUgcmV0dXJuZWQgYXMtaXMuXG4gIC8vXG4gIC8vIFJlc2V0IHRoZSBiYXNlIHN0YXRlIHRvIHRoZSBwYXNzdGhyb3VnaC4gRnV0dXJlIHVwZGF0ZXMgd2lsbCBiZSBhcHBsaWVkXG4gIC8vIG9uIHRvcCBvZiB0aGlzLlxuICBob29rLmJhc2VTdGF0ZSA9IHBhc3N0aHJvdWdoOyAvLyBJZiBhIHJlZHVjZXIgaXMgbm90IHByb3ZpZGVkLCBkZWZhdWx0IHRvIHRoZSBzYW1lIG9uZSB1c2VkIGJ5IHVzZVN0YXRlLlxuXG4gIHZhciByZXNvbHZlZFJlZHVjZXIgPSB0eXBlb2YgcmVkdWNlciA9PT0gJ2Z1bmN0aW9uJyA/IHJlZHVjZXIgOiBiYXNpY1N0YXRlUmVkdWNlcjtcbiAgcmV0dXJuIHVwZGF0ZVJlZHVjZXJJbXBsKGhvb2ssIGN1cnJlbnRIb29rLCByZXNvbHZlZFJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlck9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgLy8gVW5saWtlIHVzZVN0YXRlLCB1c2VPcHRpbWlzdGljIGRvZXNuJ3Qgc3VwcG9ydCByZW5kZXIgcGhhc2UgdXBkYXRlcy5cbiAgLy8gQWxzbyB1bmxpa2UgdXNlU3RhdGUsIHdlIG5lZWQgdG8gcmVwbGF5IGFsbCBwZW5kaW5nIHVwZGF0ZXMgYWdhaW4gaW4gY2FzZVxuICAvLyB0aGUgcGFzc3Rocm91Z2ggdmFsdWUgY2hhbmdlZC5cbiAgLy9cbiAgLy8gU28gaW5zdGVhZCBvZiBhIGZvcmtlZCByZS1yZW5kZXIgaW1wbGVtZW50YXRpb24gdGhhdCBrbm93cyBob3cgdG8gaGFuZGxlXG4gIC8vIHJlbmRlciBwaGFzZSB1ZHBhdGVzLCB3ZSBjYW4gdXNlIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIGR1cmluZyBhXG4gIC8vIHJlZ3VsYXIgbW91bnQgb3IgdXBkYXRlLlxuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gIGlmIChjdXJyZW50SG9vayAhPT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgYW4gdXBkYXRlLiBQcm9jZXNzIHRoZSB1cGRhdGUgcXVldWUuXG4gICAgcmV0dXJuIHVwZGF0ZU9wdGltaXN0aWNJbXBsKGhvb2ssIGN1cnJlbnRIb29rLCBwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gIH0gLy8gVGhpcyBpcyBhIG1vdW50LiBObyB1cGRhdGVzIHRvIHByb2Nlc3MuXG4gIC8vIFJlc2V0IHRoZSBiYXNlIHN0YXRlIHRvIHRoZSBwYXNzdGhyb3VnaC4gRnV0dXJlIHVwZGF0ZXMgd2lsbCBiZSBhcHBsaWVkXG4gIC8vIG9uIHRvcCBvZiB0aGlzLlxuXG5cbiAgaG9vay5iYXNlU3RhdGUgPSBwYXNzdGhyb3VnaDtcbiAgdmFyIGRpc3BhdGNoID0gaG9vay5xdWV1ZS5kaXNwYXRjaDtcbiAgcmV0dXJuIFtwYXNzdGhyb3VnaCwgZGlzcGF0Y2hdO1xufSAvLyB1c2VGb3JtU3RhdGUgYWN0aW9ucyBydW4gc2VxdWVudGlhbGx5LCBiZWNhdXNlIGVhY2ggYWN0aW9uIHJlY2VpdmVzIHRoZVxuLy8gcHJldmlvdXMgc3RhdGUgYXMgYW4gYXJndW1lbnQuIFdlIHN0b3JlIHBlbmRpbmcgYWN0aW9ucyBvbiBhIHF1ZXVlLlxuXG5cbmZ1bmN0aW9uIGRpc3BhdGNoRm9ybVN0YXRlKGZpYmVyLCBhY3Rpb25RdWV1ZSwgc2V0U3RhdGUsIHBheWxvYWQpIHtcbiAgaWYgKGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXBkYXRlIGZvcm0gc3RhdGUgd2hpbGUgcmVuZGVyaW5nLicpO1xuICB9XG5cbiAgdmFyIGxhc3QgPSBhY3Rpb25RdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChsYXN0ID09PSBudWxsKSB7XG4gICAgLy8gVGhlcmUgYXJlIG5vIHBlbmRpbmcgYWN0aW9uczsgdGhpcyBpcyB0aGUgZmlyc3Qgb25lLiBXZSBjYW4gcnVuXG4gICAgLy8gaXQgaW1tZWRpYXRlbHkuXG4gICAgdmFyIG5ld0xhc3QgPSB7XG4gICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgbmV4dDogbnVsbCAvLyBjaXJjdWxhclxuXG4gICAgfTtcbiAgICBuZXdMYXN0Lm5leHQgPSBhY3Rpb25RdWV1ZS5wZW5kaW5nID0gbmV3TGFzdDtcbiAgICBydW5Gb3JtU3RhdGVBY3Rpb24oYWN0aW9uUXVldWUsIHNldFN0YXRlLCBwYXlsb2FkKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGVyZSdzIGFscmVhZHkgYW4gYWN0aW9uIHJ1bm5pbmcuIEFkZCB0byB0aGUgcXVldWUuXG4gICAgdmFyIGZpcnN0ID0gbGFzdC5uZXh0O1xuICAgIHZhciBfbmV3TGFzdCA9IHtcbiAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICBuZXh0OiBmaXJzdFxuICAgIH07XG4gICAgYWN0aW9uUXVldWUucGVuZGluZyA9IGxhc3QubmV4dCA9IF9uZXdMYXN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJ1bkZvcm1TdGF0ZUFjdGlvbihhY3Rpb25RdWV1ZSwgc2V0U3RhdGUsIHBheWxvYWQpIHtcbiAgdmFyIGFjdGlvbiA9IGFjdGlvblF1ZXVlLmFjdGlvbjtcbiAgdmFyIHByZXZTdGF0ZSA9IGFjdGlvblF1ZXVlLnN0YXRlOyAvLyBUaGlzIGlzIGEgZm9yayBvZiBzdGFydFRyYW5zaXRpb25cblxuICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQzLnRyYW5zaXRpb247XG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDMudHJhbnNpdGlvbiA9IHt9O1xuICB2YXIgY3VycmVudFRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQzLnRyYW5zaXRpb247XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDMudHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgdmFyIHJldHVyblZhbHVlID0gYWN0aW9uKHByZXZTdGF0ZSwgcGF5bG9hZCk7XG5cbiAgICBpZiAocmV0dXJuVmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHJldHVyblZhbHVlID09PSAnb2JqZWN0JyAmJiAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4gICAgdHlwZW9mIHJldHVyblZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0aGVuYWJsZSA9IHJldHVyblZhbHVlOyAvLyBBdHRhY2ggYSBsaXN0ZW5lciB0byByZWFkIHRoZSByZXR1cm4gc3RhdGUgb2YgdGhlIGFjdGlvbi4gQXMgc29vbiBhc1xuICAgICAgLy8gdGhpcyByZXNvbHZlcywgd2UgY2FuIHJ1biB0aGUgbmV4dCBhY3Rpb24gaW4gdGhlIHNlcXVlbmNlLlxuXG4gICAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChuZXh0U3RhdGUpIHtcbiAgICAgICAgYWN0aW9uUXVldWUuc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICAgIGZpbmlzaFJ1bm5pbmdGb3JtU3RhdGVBY3Rpb24oYWN0aW9uUXVldWUsIHNldFN0YXRlKTtcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZpbmlzaFJ1bm5pbmdGb3JtU3RhdGVBY3Rpb24oYWN0aW9uUXVldWUsIHNldFN0YXRlKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIGVudGFuZ2xlZFJlc3VsdCA9IHJlcXVlc3RBc3luY0FjdGlvbkNvbnRleHQodGhlbmFibGUsIG51bGwpO1xuICAgICAgc2V0U3RhdGUoZW50YW5nbGVkUmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBlaXRoZXIgYHJldHVyblZhbHVlYCBvciBhIHRoZW5hYmxlIHRoYXQgcmVzb2x2ZXMgdG9cbiAgICAgIC8vIGByZXR1cm5WYWx1ZWAsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGluc2lkZSBhbiBhc3luYyBhY3Rpb24gc2NvcGUuXG4gICAgICB2YXIgX2VudGFuZ2xlZFJlc3VsdCA9IHJlcXVlc3RTeW5jQWN0aW9uQ29udGV4dChyZXR1cm5WYWx1ZSwgbnVsbCk7XG5cbiAgICAgIHNldFN0YXRlKF9lbnRhbmdsZWRSZXN1bHQpO1xuICAgICAgdmFyIG5leHRTdGF0ZSA9IHJldHVyblZhbHVlO1xuICAgICAgYWN0aW9uUXVldWUuc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICBmaW5pc2hSdW5uaW5nRm9ybVN0YXRlQWN0aW9uKGFjdGlvblF1ZXVlLCBzZXRTdGF0ZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIFRoaXMgaXMgYSB0cmljayB0byBnZXQgdGhlIGB1c2VGb3JtU3RhdGVgIGhvb2sgdG8gcmV0aHJvdyB0aGUgZXJyb3IuXG4gICAgLy8gV2hlbiBpdCB1bndyYXBzIHRoZSB0aGVuYWJsZSB3aXRoIHRoZSBgdXNlYCBhbGdvcml0aG0sIHRoZSBlcnJvclxuICAgIC8vIHdpbGwgYmUgdGhyb3duLlxuICAgIHZhciByZWplY3RlZFRoZW5hYmxlID0ge1xuICAgICAgdGhlbjogZnVuY3Rpb24gKCkge30sXG4gICAgICBzdGF0dXM6ICdyZWplY3RlZCcsXG4gICAgICByZWFzb246IGVycm9yIC8vICRGbG93Rml4TWU6IE5vdCBzdXJlIHdoeSB0aGlzIGRvZXNuJ3Qgd29ya1xuXG4gICAgfTtcbiAgICBzZXRTdGF0ZShyZWplY3RlZFRoZW5hYmxlKTtcbiAgICBmaW5pc2hSdW5uaW5nRm9ybVN0YXRlQWN0aW9uKGFjdGlvblF1ZXVlLCBzZXRTdGF0ZSk7XG4gIH0gZmluYWxseSB7XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMy50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG5cbiAgICB7XG4gICAgICBpZiAocHJldlRyYW5zaXRpb24gPT09IG51bGwgJiYgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMpIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRGaWJlcnNDb3VudCA9IGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLnNpemU7XG5cbiAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuY2xlYXIoKTtcblxuICAgICAgICBpZiAodXBkYXRlZEZpYmVyc0NvdW50ID4gMTApIHtcbiAgICAgICAgICB3YXJuKCdEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uICcgKyAnSWYgdGhpcyBpcyBkdWUgdG8gYSBzdWJzY3JpcHRpb24gcGxlYXNlIHJlLXdyaXRlIGl0IHRvIHVzZSBSZWFjdCBwcm92aWRlZCBob29rcy4gJyArICdPdGhlcndpc2UgY29uY3VycmVudCBtb2RlIGd1YXJhbnRlZXMgYXJlIG9mZiB0aGUgdGFibGUuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoUnVubmluZ0Zvcm1TdGF0ZUFjdGlvbihhY3Rpb25RdWV1ZSwgc2V0U3RhdGUpIHtcbiAgLy8gVGhlIGFjdGlvbiBmaW5pc2hlZCBydW5uaW5nLiBQb3AgaXQgZnJvbSB0aGUgcXVldWUgYW5kIHJ1biB0aGUgbmV4dCBwZW5kaW5nXG4gIC8vIGFjdGlvbiwgaWYgdGhlcmUgYXJlIGFueS5cbiAgdmFyIGxhc3QgPSBhY3Rpb25RdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0ID0gbGFzdC5uZXh0O1xuXG4gICAgaWYgKGZpcnN0ID09PSBsYXN0KSB7XG4gICAgICAvLyBUaGlzIHdhcyB0aGUgbGFzdCBhY3Rpb24gaW4gdGhlIHF1ZXVlLlxuICAgICAgYWN0aW9uUXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlbW92ZSB0aGUgZmlyc3Qgbm9kZSBmcm9tIHRoZSBjaXJjdWxhciBxdWV1ZS5cbiAgICAgIHZhciBuZXh0ID0gZmlyc3QubmV4dDtcbiAgICAgIGxhc3QubmV4dCA9IG5leHQ7IC8vIFJ1biB0aGUgbmV4dCBhY3Rpb24uXG5cbiAgICAgIHJ1bkZvcm1TdGF0ZUFjdGlvbihhY3Rpb25RdWV1ZSwgc2V0U3RhdGUsIG5leHQucGF5bG9hZCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1TdGF0ZVJlZHVjZXIob2xkU3RhdGUsIG5ld1N0YXRlKSB7XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gbW91bnRGb3JtU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGVQcm9wLCBwZXJtYWxpbmspIHtcbiAgdmFyIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZVByb3A7XG5cbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICB2YXIgcm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuICAgIHZhciBzc3JGb3JtU3RhdGUgPSByb290LmZvcm1TdGF0ZTsgLy8gSWYgYSBmb3JtU3RhdGUgb3B0aW9uIHdhcyBwYXNzZWQgdG8gdGhlIHJvb3QsIHRoZXJlIGFyZSBmb3JtIHN0YXRlXG4gICAgLy8gbWFya2VycyB0aGF0IHdlIG5lZWQgdG8gaHlkcmF0ZS4gVGhlc2UgaW5kaWNhdGUgd2hldGhlciB0aGUgZm9ybSBzdGF0ZVxuICAgIC8vIG1hdGNoZXMgdGhpcyBob29rIGluc3RhbmNlLlxuXG4gICAgaWYgKHNzckZvcm1TdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGlzTWF0Y2hpbmcgPSB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVGb3JtTWFya2VySW5zdGFuY2UoKTtcblxuICAgICAgaWYgKGlzTWF0Y2hpbmcpIHtcbiAgICAgICAgaW5pdGlhbFN0YXRlID0gc3NyRm9ybVN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBTdGF0ZSBob29rLiBUaGUgc3RhdGUgaXMgc3RvcmVkIGluIGEgdGhlbmFibGUgd2hpY2ggaXMgdGhlbiB1bndyYXBwZWQgYnlcbiAgLy8gdGhlIGB1c2VgIGFsZ29yaXRobSBkdXJpbmcgcmVuZGVyLlxuXG5cbiAgdmFyIHN0YXRlSG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHN0YXRlSG9vay5tZW1vaXplZFN0YXRlID0gc3RhdGVIb29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTsgLy8gVE9ETzogVHlwaW5nIHRoaXMgXCJjb3JyZWN0bHlcIiByZXN1bHRzIGluIHJlY3Vyc2lvbiBsaW1pdCBlcnJvcnNcbiAgLy8gY29uc3Qgc3RhdGVRdWV1ZTogVXBkYXRlUXVldWU8UyB8IEF3YWl0ZWQ8Uz4sIFMgfCBBd2FpdGVkPFM+PiA9IHtcblxuICB2YXIgc3RhdGVRdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGxhbmVzOiBOb0xhbmVzLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGZvcm1TdGF0ZVJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICBzdGF0ZUhvb2sucXVldWUgPSBzdGF0ZVF1ZXVlO1xuICB2YXIgc2V0U3RhdGUgPSBkaXNwYXRjaFNldFN0YXRlLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgc3RhdGVRdWV1ZSk7XG4gIHN0YXRlUXVldWUuZGlzcGF0Y2ggPSBzZXRTdGF0ZTsgLy8gQWN0aW9uIHF1ZXVlIGhvb2suIFRoaXMgaXMgdXNlZCB0byBxdWV1ZSBwZW5kaW5nIGFjdGlvbnMuIFRoZSBxdWV1ZSBpc1xuICAvLyBzaGFyZWQgYmV0d2VlbiBhbGwgaW5zdGFuY2VzIG9mIHRoZSBob29rLiBTaW1pbGFyIHRvIGEgcmVndWxhciBzdGF0ZSBxdWV1ZSxcbiAgLy8gYnV0IGRpZmZlcmVudCBiZWNhdXNlIHRoZSBhY3Rpb25zIGFyZSBydW4gc2VxdWVudGlhbGx5LCBhbmQgdGhleSBydW4gaW5cbiAgLy8gYW4gZXZlbnQgaW5zdGVhZCBvZiBkdXJpbmcgcmVuZGVyLlxuXG4gIHZhciBhY3Rpb25RdWV1ZUhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgYWN0aW9uUXVldWUgPSB7XG4gICAgc3RhdGU6IGluaXRpYWxTdGF0ZSxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAvLyBjaXJjdWxhclxuICAgIGFjdGlvbjogYWN0aW9uLFxuICAgIHBlbmRpbmc6IG51bGxcbiAgfTtcbiAgYWN0aW9uUXVldWVIb29rLnF1ZXVlID0gYWN0aW9uUXVldWU7XG4gIHZhciBkaXNwYXRjaCA9IGRpc3BhdGNoRm9ybVN0YXRlLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgYWN0aW9uUXVldWUsIHNldFN0YXRlKTtcbiAgYWN0aW9uUXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaDsgLy8gU3Rhc2ggdGhlIGFjdGlvbiBmdW5jdGlvbiBvbiB0aGUgbWVtb2l6ZWQgc3RhdGUgb2YgdGhlIGhvb2suIFdlJ2xsIHVzZSB0aGlzXG4gIC8vIHRvIGRldGVjdCB3aGVuIHRoZSBhY3Rpb24gZnVuY3Rpb24gY2hhbmdlcyBzbyB3ZSBjYW4gdXBkYXRlIGl0IGluXG4gIC8vIGFuIGVmZmVjdC5cblxuICBhY3Rpb25RdWV1ZUhvb2subWVtb2l6ZWRTdGF0ZSA9IGFjdGlvbjtcbiAgcmV0dXJuIFtpbml0aWFsU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRm9ybVN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlLCBwZXJtYWxpbmspIHtcbiAgdmFyIHN0YXRlSG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgY3VycmVudFN0YXRlSG9vayA9IGN1cnJlbnRIb29rO1xuICByZXR1cm4gdXBkYXRlRm9ybVN0YXRlSW1wbChzdGF0ZUhvb2ssIGN1cnJlbnRTdGF0ZUhvb2ssIGFjdGlvbik7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZvcm1TdGF0ZUltcGwoc3RhdGVIb29rLCBjdXJyZW50U3RhdGVIb29rLCBhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKSB7XG4gIHZhciBfdXBkYXRlUmVkdWNlckltcGwgPSB1cGRhdGVSZWR1Y2VySW1wbChzdGF0ZUhvb2ssIGN1cnJlbnRTdGF0ZUhvb2ssIGZvcm1TdGF0ZVJlZHVjZXIpLFxuICAgICAgYWN0aW9uUmVzdWx0ID0gX3VwZGF0ZVJlZHVjZXJJbXBsWzBdOyAvLyBUaGlzIHdpbGwgc3VzcGVuZCB1bnRpbCB0aGUgYWN0aW9uIGZpbmlzaGVzLlxuXG5cbiAgdmFyIHN0YXRlID0gdHlwZW9mIGFjdGlvblJlc3VsdCA9PT0gJ29iamVjdCcgJiYgYWN0aW9uUmVzdWx0ICE9PSBudWxsICYmIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgdHlwZW9mIGFjdGlvblJlc3VsdC50aGVuID09PSAnZnVuY3Rpb24nID8gdXNlVGhlbmFibGUoYWN0aW9uUmVzdWx0KSA6IGFjdGlvblJlc3VsdDtcbiAgdmFyIGFjdGlvblF1ZXVlSG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgYWN0aW9uUXVldWUgPSBhY3Rpb25RdWV1ZUhvb2sucXVldWU7XG4gIHZhciBkaXNwYXRjaCA9IGFjdGlvblF1ZXVlLmRpc3BhdGNoOyAvLyBDaGVjayBpZiBhIG5ldyBhY3Rpb24gd2FzIHBhc3NlZC4gSWYgc28sIHVwZGF0ZSBpdCBpbiBhbiBlZmZlY3QuXG5cbiAgdmFyIHByZXZBY3Rpb24gPSBhY3Rpb25RdWV1ZUhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAoYWN0aW9uICE9PSBwcmV2QWN0aW9uKSB7XG4gICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBQYXNzaXZlJDE7XG4gICAgcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBQYXNzaXZlLCBmb3JtU3RhdGVBY3Rpb25FZmZlY3QuYmluZChudWxsLCBhY3Rpb25RdWV1ZSwgYWN0aW9uKSwgY3JlYXRlRWZmZWN0SW5zdGFuY2UoKSwgbnVsbCk7XG4gIH1cblxuICByZXR1cm4gW3N0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIGZvcm1TdGF0ZUFjdGlvbkVmZmVjdChhY3Rpb25RdWV1ZSwgYWN0aW9uKSB7XG4gIGFjdGlvblF1ZXVlLmFjdGlvbiA9IGFjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJGb3JtU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUsIHBlcm1hbGluaykge1xuICAvLyBVbmxpa2UgdXNlU3RhdGUsIHVzZUZvcm1TdGF0ZSBkb2Vzbid0IHN1cHBvcnQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMuXG4gIC8vIEFsc28gdW5saWtlIHVzZVN0YXRlLCB3ZSBuZWVkIHRvIHJlcGxheSBhbGwgcGVuZGluZyB1cGRhdGVzIGFnYWluIGluIGNhc2VcbiAgLy8gdGhlIHBhc3N0aHJvdWdoIHZhbHVlIGNoYW5nZWQuXG4gIC8vXG4gIC8vIFNvIGluc3RlYWQgb2YgYSBmb3JrZWQgcmUtcmVuZGVyIGltcGxlbWVudGF0aW9uIHRoYXQga25vd3MgaG93IHRvIGhhbmRsZVxuICAvLyByZW5kZXIgcGhhc2UgdWRwYXRlcywgd2UgY2FuIHVzZSB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyBkdXJpbmcgYVxuICAvLyByZWd1bGFyIG1vdW50IG9yIHVwZGF0ZS5cbiAgdmFyIHN0YXRlSG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgY3VycmVudFN0YXRlSG9vayA9IGN1cnJlbnRIb29rO1xuXG4gIGlmIChjdXJyZW50U3RhdGVIb29rICE9PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyBhbiB1cGRhdGUuIFByb2Nlc3MgdGhlIHVwZGF0ZSBxdWV1ZS5cbiAgICByZXR1cm4gdXBkYXRlRm9ybVN0YXRlSW1wbChzdGF0ZUhvb2ssIGN1cnJlbnRTdGF0ZUhvb2ssIGFjdGlvbik7XG4gIH0gLy8gVGhpcyBpcyBhIG1vdW50LiBObyB1cGRhdGVzIHRvIHByb2Nlc3MuXG5cblxuICB2YXIgc3RhdGUgPSBzdGF0ZUhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIGFjdGlvblF1ZXVlSG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgYWN0aW9uUXVldWUgPSBhY3Rpb25RdWV1ZUhvb2sucXVldWU7XG4gIHZhciBkaXNwYXRjaCA9IGFjdGlvblF1ZXVlLmRpc3BhdGNoOyAvLyBUaGlzIG1heSBoYXZlIGNoYW5nZWQgZHVyaW5nIHRoZSByZXJlbmRlci5cblxuICBhY3Rpb25RdWV1ZUhvb2subWVtb2l6ZWRTdGF0ZSA9IGFjdGlvbjtcbiAgcmV0dXJuIFtzdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiBwdXNoRWZmZWN0KHRhZywgY3JlYXRlLCBpbnN0LCBkZXBzKSB7XG4gIHZhciBlZmZlY3QgPSB7XG4gICAgdGFnOiB0YWcsXG4gICAgY3JlYXRlOiBjcmVhdGUsXG4gICAgaW5zdDogaW5zdCxcbiAgICBkZXBzOiBkZXBzLFxuICAgIC8vIENpcmN1bGFyXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICB2YXIgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChjb21wb25lbnRVcGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpO1xuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWUgPSBjb21wb25lbnRVcGRhdGVRdWV1ZTtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxhc3RFZmZlY3QgPSBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgbGFzdEVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgICAgZWZmZWN0Lm5leHQgPSBmaXJzdEVmZmVjdDtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3Q7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVmZmVjdDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRWZmZWN0SW5zdGFuY2UoKSB7XG4gIHJldHVybiB7XG4gICAgZGVzdHJveTogdW5kZWZpbmVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG5cbiAge1xuICAgIHZhciBfcmVmMiA9IHtcbiAgICAgIGN1cnJlbnQ6IGluaXRpYWxWYWx1ZVxuICAgIH07XG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gX3JlZjI7XG4gICAgcmV0dXJuIF9yZWYyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIGhvb2subWVtb2l6ZWRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBob29rRmxhZ3MsIGNyZWF0ZSwgY3JlYXRlRWZmZWN0SW5zdGFuY2UoKSwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgZWZmZWN0ID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICB2YXIgaW5zdCA9IGVmZmVjdC5pbnN0OyAvLyBjdXJyZW50SG9vayBpcyBudWxsIG9uIGluaXRpYWwgbW91bnQgd2hlbiByZXJlbmRlcmluZyBhZnRlciBhIHJlbmRlciBwaGFzZVxuICAvLyBzdGF0ZSB1cGRhdGUgb3IgZm9yIHN0cmljdCBtb2RlLlxuXG4gIGlmIChjdXJyZW50SG9vayAhPT0gbnVsbCkge1xuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZFZmZlY3QgPSBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldkVmZmVjdC5kZXBzO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChob29rRmxhZ3MsIGNyZWF0ZSwgaW5zdCwgbmV4dERlcHMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IGhvb2tGbGFncywgY3JlYXRlLCBpbnN0LCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICBpZiAoKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlICYmIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBOb1N0cmljdFBhc3NpdmVFZmZlY3RzTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIG1vdW50RWZmZWN0SW1wbChNb3VudFBhc3NpdmVEZXYgfCBQYXNzaXZlJDEgfCBQYXNzaXZlU3RhdGljLCBQYXNzaXZlLCBjcmVhdGUsIGRlcHMpO1xuICB9IGVsc2Uge1xuICAgIG1vdW50RWZmZWN0SW1wbChQYXNzaXZlJDEgfCBQYXNzaXZlU3RhdGljLCBQYXNzaXZlLCBjcmVhdGUsIGRlcHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdXBkYXRlRWZmZWN0SW1wbChQYXNzaXZlJDEsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZmliZXJGbGFncyA9IFVwZGF0ZSB8IExheW91dFN0YXRpYztcblxuICBpZiAoKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgZmliZXJGbGFncyB8PSBNb3VudExheW91dERldjtcbiAgfVxuXG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0KGNyZWF0ZSwgcmVmKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlZkNhbGxiYWNrID0gcmVmO1xuICAgIHZhciBpbnN0ID0gY3JlYXRlKCk7XG4gICAgcmVmQ2FsbGJhY2soaW5zdCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZkNhbGxiYWNrKG51bGwpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAocmVmICE9PSBudWxsICYmIHJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHJlZk9iamVjdCA9IHJlZjtcblxuICAgIHtcbiAgICAgIGlmICghcmVmT2JqZWN0Lmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBmaXJzdCBhcmd1bWVudCB0byBlaXRoZXIgYmUgYSAnICsgJ3JlZiBjYWxsYmFjayBvciBSZWFjdC5jcmVhdGVSZWYoKSBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsICdhbiBvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMocmVmT2JqZWN0KS5qb2luKCcsICcpICsgJ30nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgX2luc3QgPSBjcmVhdGUoKTtcblxuICAgIHJlZk9iamVjdC5jdXJyZW50ID0gX2luc3Q7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZk9iamVjdC5jdXJyZW50ID0gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHZhciBmaWJlckZsYWdzID0gVXBkYXRlIHwgTGF5b3V0U3RhdGljO1xuXG4gIGlmICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUpIHtcbiAgICBmaWJlckZsYWdzIHw9IE1vdW50TGF5b3V0RGV2O1xuICB9XG5cbiAgbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIExheW91dCwgaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdC5iaW5kKG51bGwsIGNyZWF0ZSwgcmVmKSwgZWZmZWN0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikgey8vIFRoaXMgaG9vayBpcyBub3JtYWxseSBhIG5vLW9wLlxuICAvLyBUaGUgcmVhY3QtZGVidWctaG9va3MgcGFja2FnZSBpbmplY3RzIGl0cyBvd24gaW1wbGVtZW50YXRpb25cbiAgLy8gc28gdGhhdCBlLmcuIERldlRvb2xzIGNhbiBkaXNwbGF5IGN1c3RvbSBob29rIHZhbHVlcy5cbn1cblxudmFyIHVwZGF0ZURlYnVnVmFsdWUgPSBtb3VudERlYnVnVmFsdWU7XG5cbmZ1bmN0aW9uIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgIH1cbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIG1vdW50TWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG5cbiAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgbmV4dENyZWF0ZSgpO1xuICB9XG5cbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7IC8vIEFzc3VtZSB0aGVzZSBhcmUgZGVmaW5lZC4gSWYgdGhleSdyZSBub3QsIGFyZUhvb2tJbnB1dHNFcXVhbCB3aWxsIHdhcm4uXG5cbiAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgIG5leHRDcmVhdGUoKTtcbiAgfVxuXG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcmVzb2x2ZWRDdXJyZW50SG9vayA9IGN1cnJlbnRIb29rO1xuICB2YXIgcHJldlZhbHVlID0gcmVzb2x2ZWRDdXJyZW50SG9vay5tZW1vaXplZFN0YXRlO1xuICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgcHJldlZhbHVlLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG5cbiAgaWYgKGN1cnJlbnRIb29rID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlcmVuZGVyIGR1cmluZyBhIG1vdW50LlxuICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGEgcmVyZW5kZXIgZHVyaW5nIGFuIHVwZGF0ZS5cbiAgICB2YXIgcHJldlZhbHVlID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgcHJldlZhbHVlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gIHtcbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgcHJldlZhbHVlLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gIGlmIChvYmplY3RJcyh2YWx1ZSwgcHJldlZhbHVlKSkge1xuICAgIC8vIFRoZSBpbmNvbWluZyB2YWx1ZSBpcyByZWZlcmVudGlhbGx5IGlkZW50aWNhbCB0byB0aGUgY3VycmVudGx5IHJlbmRlcmVkXG4gICAgLy8gdmFsdWUsIHNvIHdlIGNhbiBiYWlsIG91dCBxdWlja2x5LlxuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBSZWNlaXZlZCBhIG5ldyB2YWx1ZSB0aGF0J3MgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgaW5zaWRlIGEgaGlkZGVuIHRyZWVcbiAgICBpZiAoaXNDdXJyZW50VHJlZUhpZGRlbigpKSB7XG4gICAgICAvLyBSZXZlYWxpbmcgYSBwcmVyZW5kZXJlZCB0cmVlIGlzIGNvbnNpZGVyZWQgdGhlIHNhbWUgYXMgbW91bnRpbmcgbmV3XG4gICAgICAvLyBvbmUsIHNvIHdlIHJldXNlIHRoZSBcIm1vdW50XCIgcGF0aCBpbiB0aGlzIGNhc2UuXG4gICAgICB2YXIgcmVzdWx0VmFsdWUgPSBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlKTsgLy8gVW5saWtlIGR1cmluZyBhbiBhY3R1YWwgbW91bnQsIHdlIG5lZWQgdG8gbWFyayB0aGlzIGFzIGFuIHVwZGF0ZSBpZlxuICAgICAgLy8gdGhlIHZhbHVlIGNoYW5nZWQuXG5cbiAgICAgIGlmICghb2JqZWN0SXMocmVzdWx0VmFsdWUsIHByZXZWYWx1ZSkpIHtcbiAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdFZhbHVlO1xuICAgIH1cblxuICAgIHZhciBzaG91bGREZWZlclZhbHVlID0gIWluY2x1ZGVzT25seU5vblVyZ2VudExhbmVzKHJlbmRlckxhbmVzKTtcblxuICAgIGlmIChzaG91bGREZWZlclZhbHVlKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIHVyZ2VudCB1cGRhdGUuIFNpbmNlIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZCwga2VlcCB1c2luZyB0aGVcbiAgICAgIC8vIHByZXZpb3VzIHZhbHVlIGFuZCBzcGF3biBhIGRlZmVycmVkIHJlbmRlciB0byB1cGRhdGUgaXQgbGF0ZXIuXG4gICAgICAvLyBTY2hlZHVsZSBhIGRlZmVycmVkIHJlbmRlclxuICAgICAgdmFyIGRlZmVycmVkTGFuZSA9IHJlcXVlc3REZWZlcnJlZExhbmUoKTtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgPSBtZXJnZUxhbmVzKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMsIGRlZmVycmVkTGFuZSk7XG4gICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKGRlZmVycmVkTGFuZSk7IC8vIFJldXNlIHRoZSBwcmV2aW91cyB2YWx1ZS4gV2UgZG8gbm90IG5lZWQgdG8gbWFyayB0aGlzIGFzIGFuIHVwZGF0ZSxcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZGlkIG5vdCByZW5kZXIgYSBuZXcgdmFsdWUuXG5cbiAgICAgIHJldHVybiBwcmV2VmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgbm90IGFuIHVyZ2VudCB1cGRhdGUsIHNvIHdlIGNhbiB1c2UgdGhlIGxhdGVzdCB2YWx1ZSByZWdhcmRsZXNzXG4gICAgICAvLyBvZiB3aGF0IGl0IGlzLiBObyBuZWVkIHRvIGRlZmVyIGl0LlxuICAgICAgLy8gTWFyayB0aGlzIGFzIGFuIHVwZGF0ZSB0byBwcmV2ZW50IHRoZSBmaWJlciBmcm9tIGJhaWxpbmcgb3V0LlxuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oZmliZXIsIHF1ZXVlLCBwZW5kaW5nU3RhdGUsIGZpbmlzaGVkU3RhdGUsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCk7XG4gIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShoaWdoZXJFdmVudFByaW9yaXR5KHByZXZpb3VzUHJpb3JpdHksIENvbnRpbnVvdXNFdmVudFByaW9yaXR5KSk7XG4gIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDMudHJhbnNpdGlvbjtcbiAgdmFyIGN1cnJlbnRUcmFuc2l0aW9uID0ge307XG5cbiAge1xuICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIHRvIHVzZSBhbiBvcHRpbWlzdGljIHVwZGF0ZSBoZXJlLCBiZWNhdXNlIHdlXG4gICAgLy8gc2NoZWR1bGUgYSBzZWNvbmQgXCJyZXZlcnRcIiB1cGRhdGUgYmVsb3cgKHdoaWNoIHdlIHVzZSB0byBzdXNwZW5kIHRoZVxuICAgIC8vIHRyYW5zaXRpb24gdW50aWwgdGhlIGFzeW5jIGFjdGlvbiBzY29wZSBoYXMgZmluaXNoZWQpLiBCdXQgd2UnbGwgdXNlIGFuXG4gICAgLy8gb3B0aW1pc3RpYyB1cGRhdGUgYW55d2F5IHRvIG1ha2UgaXQgbGVzcyBsaWtlbHkgdGhlIGJlaGF2aW9yIGFjY2lkZW50YWxseVxuICAgIC8vIGRpdmVyZ2VzOyBmb3IgZXhhbXBsZSwgYm90aCBhbiBvcHRpbWlzdGljIHVwZGF0ZSBhbmQgdGhpcyBvbmUgc2hvdWxkXG4gICAgLy8gc2hhcmUgdGhlIHNhbWUgbGFuZS5cbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQzLnRyYW5zaXRpb24gPSBjdXJyZW50VHJhbnNpdGlvbjtcbiAgICBkaXNwYXRjaE9wdGltaXN0aWNTZXRTdGF0ZShmaWJlciwgZmFsc2UsIHF1ZXVlLCBwZW5kaW5nU3RhdGUpO1xuICB9XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDMudHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGVuYWJsZUFzeW5jQWN0aW9ucykge1xuICAgICAgdmFyIHJldHVyblZhbHVlID0gY2FsbGJhY2soKTsgLy8gQ2hlY2sgaWYgd2UncmUgaW5zaWRlIGFuIGFzeW5jIGFjdGlvbiBzY29wZS4gSWYgc28sIHdlJ2xsIGVudGFuZ2xlXG4gICAgICAvLyB0aGlzIG5ldyBhY3Rpb24gd2l0aCB0aGUgZXhpc3Rpbmcgc2NvcGUuXG4gICAgICAvL1xuICAgICAgLy8gSWYgd2UncmUgbm90IGFscmVhZHkgaW5zaWRlIGFuIGFzeW5jIGFjdGlvbiBzY29wZSwgYW5kIHRoaXMgYWN0aW9uIGlzXG4gICAgICAvLyBhc3luYywgdGhlbiB3ZSdsbCBjcmVhdGUgYSBuZXcgYXN5bmMgc2NvcGUuXG4gICAgICAvL1xuICAgICAgLy8gSW4gdGhlIGFzeW5jIGNhc2UsIHRoZSByZXN1bHRpbmcgcmVuZGVyIHdpbGwgc3VzcGVuZCB1bnRpbCB0aGUgYXN5bmNcbiAgICAgIC8vIGFjdGlvbiBzY29wZSBoYXMgZmluaXNoZWQuXG5cbiAgICAgIGlmIChyZXR1cm5WYWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgcmV0dXJuVmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiByZXR1cm5WYWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciB0aGVuYWJsZSA9IHJldHVyblZhbHVlOyAvLyBUaGlzIGlzIGEgdGhlbmFibGUgdGhhdCByZXNvbHZlcyB0byBgZmluaXNoZWRTdGF0ZWAgb25jZSB0aGUgYXN5bmNcbiAgICAgICAgLy8gYWN0aW9uIHNjb3BlIGhhcyBmaW5pc2hlZC5cblxuICAgICAgICB2YXIgZW50YW5nbGVkUmVzdWx0ID0gcmVxdWVzdEFzeW5jQWN0aW9uQ29udGV4dCh0aGVuYWJsZSwgZmluaXNoZWRTdGF0ZSk7XG4gICAgICAgIGRpc3BhdGNoU2V0U3RhdGUoZmliZXIsIHF1ZXVlLCBlbnRhbmdsZWRSZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpcyBlaXRoZXIgYGZpbmlzaGVkU3RhdGVgIG9yIGEgdGhlbmFibGUgdGhhdCByZXNvbHZlcyB0b1xuICAgICAgICAvLyBgZmluaXNoZWRTdGF0ZWAsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGluc2lkZSBhbiBhc3luY1xuICAgICAgICAvLyBhY3Rpb24gc2NvcGUuXG4gICAgICAgIHZhciBfZW50YW5nbGVkUmVzdWx0MiA9IHJlcXVlc3RTeW5jQWN0aW9uQ29udGV4dChyZXR1cm5WYWx1ZSwgZmluaXNoZWRTdGF0ZSk7XG5cbiAgICAgICAgZGlzcGF0Y2hTZXRTdGF0ZShmaWJlciwgcXVldWUsIF9lbnRhbmdsZWRSZXN1bHQyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAge1xuICAgICAgLy8gVGhpcyBpcyBhIHRyaWNrIHRvIGdldCB0aGUgYHVzZVRyYW5zaXRpb25gIGhvb2sgdG8gcmV0aHJvdyB0aGUgZXJyb3IuXG4gICAgICAvLyBXaGVuIGl0IHVud3JhcHMgdGhlIHRoZW5hYmxlIHdpdGggdGhlIGB1c2VgIGFsZ29yaXRobSwgdGhlIGVycm9yXG4gICAgICAvLyB3aWxsIGJlIHRocm93bi5cbiAgICAgIHZhciByZWplY3RlZFRoZW5hYmxlID0ge1xuICAgICAgICB0aGVuOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgc3RhdHVzOiAncmVqZWN0ZWQnLFxuICAgICAgICByZWFzb246IGVycm9yXG4gICAgICB9O1xuICAgICAgZGlzcGF0Y2hTZXRTdGF0ZShmaWJlciwgcXVldWUsIHJlamVjdGVkVGhlbmFibGUpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNQcmlvcml0eSk7XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMy50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG5cbiAgICB7XG4gICAgICBpZiAocHJldlRyYW5zaXRpb24gPT09IG51bGwgJiYgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMpIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRGaWJlcnNDb3VudCA9IGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLnNpemU7XG5cbiAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuY2xlYXIoKTtcblxuICAgICAgICBpZiAodXBkYXRlZEZpYmVyc0NvdW50ID4gMTApIHtcbiAgICAgICAgICB3YXJuKCdEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uICcgKyAnSWYgdGhpcyBpcyBkdWUgdG8gYSBzdWJzY3JpcHRpb24gcGxlYXNlIHJlLXdyaXRlIGl0IHRvIHVzZSBSZWFjdCBwcm92aWRlZCBob29rcy4gJyArICdPdGhlcndpc2UgY29uY3VycmVudCBtb2RlIGd1YXJhbnRlZXMgYXJlIG9mZiB0aGUgdGFibGUuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRIb3N0VHJhbnNpdGlvbihmb3JtRmliZXIsIHBlbmRpbmdTdGF0ZSwgY2FsbGJhY2ssIGZvcm1EYXRhKSB7XG5cbiAgaWYgKGZvcm1GaWJlci50YWcgIT09IEhvc3RDb21wb25lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBmb3JtIGluc3RhbmNlIHRvIGJlIGEgSG9zdENvbXBvbmVudC4gVGhpcyAnICsgJ2lzIGEgYnVnIGluIFJlYWN0LicpO1xuICB9XG5cbiAgdmFyIHF1ZXVlO1xuXG4gIGlmIChmb3JtRmliZXIubWVtb2l6ZWRTdGF0ZSA9PT0gbnVsbCkge1xuICAgIC8vIFVwZ3JhZGUgdGhpcyBob3N0IGNvbXBvbmVudCBmaWJlciB0byBiZSBzdGF0ZWZ1bC4gV2UncmUgZ29pbmcgdG8gcHJldGVuZFxuICAgIC8vIGl0IHdhcyBzdGF0ZWZ1bCBhbGwgYWxvbmcgc28gd2UgY2FuIHJldXNlIG1vc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uXG4gICAgLy8gZm9yIGZ1bmN0aW9uIGNvbXBvbmVudHMgYW5kIHVzZVRyYW5zaXRpb24uXG4gICAgLy9cbiAgICAvLyBDcmVhdGUgdGhlIHN0YXRlIGhvb2sgdXNlZCBieSBUcmFuc2l0aW9uQXdhcmVIb3N0Q29tcG9uZW50LiBUaGlzIGlzXG4gICAgLy8gZXNzZW50aWFsbHkgYW4gaW5saW5lZCB2ZXJzaW9uIG9mIG1vdW50U3RhdGUuXG4gICAgdmFyIG5ld1F1ZXVlID0ge1xuICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgIGxhbmVzOiBOb0xhbmVzLFxuICAgICAgLy8gV2UncmUgZ29pbmcgdG8gY2hlYXQgYW5kIGludGVudGlvbmFsbHkgbm90IGNyZWF0ZSBhIGJvdW5kIGRpc3BhdGNoXG4gICAgICAvLyBtZXRob2QsIGJlY2F1c2Ugd2UgY2FuIGNhbGwgaXQgZGlyZWN0bHkgaW4gc3RhcnRUcmFuc2l0aW9uLlxuICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBOb3RQZW5kaW5nVHJhbnNpdGlvblxuICAgIH07XG4gICAgcXVldWUgPSBuZXdRdWV1ZTtcbiAgICB2YXIgc3RhdGVIb29rID0ge1xuICAgICAgbWVtb2l6ZWRTdGF0ZTogTm90UGVuZGluZ1RyYW5zaXRpb24sXG4gICAgICBiYXNlU3RhdGU6IE5vdFBlbmRpbmdUcmFuc2l0aW9uLFxuICAgICAgYmFzZVF1ZXVlOiBudWxsLFxuICAgICAgcXVldWU6IG5ld1F1ZXVlLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07IC8vIEFkZCB0aGUgc3RhdGUgaG9vayB0byBib3RoIGZpYmVyIGFsdGVybmF0ZXMuIFRoZSBpZGVhIGlzIHRoYXQgdGhlIGZpYmVyXG4gICAgLy8gaGFkIHRoaXMgaG9vayBhbGwgYWxvbmcuXG5cbiAgICBmb3JtRmliZXIubWVtb2l6ZWRTdGF0ZSA9IHN0YXRlSG9vaztcbiAgICB2YXIgYWx0ZXJuYXRlID0gZm9ybUZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIGFsdGVybmF0ZS5tZW1vaXplZFN0YXRlID0gc3RhdGVIb29rO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGZpYmVyIHdhcyBhbHJlYWR5IHVwZ3JhZGVkIHRvIGJlIHN0YXRlZnVsLlxuICAgIHZhciBfc3RhdGVIb29rID0gZm9ybUZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgcXVldWUgPSBfc3RhdGVIb29rLnF1ZXVlO1xuICB9XG5cbiAgc3RhcnRUcmFuc2l0aW9uKGZvcm1GaWJlciwgcXVldWUsIHBlbmRpbmdTdGF0ZSwgTm90UGVuZGluZ1RyYW5zaXRpb24sIC8vIFRPRE86IFdlIGNhbiBhdm9pZCB0aGlzIGV4dHJhIHdyYXBwZXIsIHNvbWVob3cuIEZpZ3VyZSBvdXQgbGF5ZXJpbmdcbiAgLy8gb25jZSBtb3JlIG9mIHRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQuXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbGJhY2soZm9ybURhdGEpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbW91bnRUcmFuc2l0aW9uKCkge1xuICB2YXIgc3RhdGVIb29rID0gbW91bnRTdGF0ZUltcGwoZmFsc2UpOyAvLyBUaGUgYHN0YXJ0YCBtZXRob2QgbmV2ZXIgY2hhbmdlcy5cblxuICB2YXIgc3RhcnQgPSBzdGFydFRyYW5zaXRpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBzdGF0ZUhvb2sucXVldWUsIHRydWUsIGZhbHNlKTtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBzdGFydDtcbiAgcmV0dXJuIFtmYWxzZSwgc3RhcnRdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUcmFuc2l0aW9uKCkge1xuICB2YXIgX3VwZGF0ZVN0YXRlID0gdXBkYXRlU3RhdGUoKSxcbiAgICAgIGJvb2xlYW5PclRoZW5hYmxlID0gX3VwZGF0ZVN0YXRlWzBdO1xuXG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBzdGFydCA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIGlzUGVuZGluZyA9IHR5cGVvZiBib29sZWFuT3JUaGVuYWJsZSA9PT0gJ2Jvb2xlYW4nID8gYm9vbGVhbk9yVGhlbmFibGUgOiAvLyBUaGlzIHdpbGwgc3VzcGVuZCB1bnRpbCB0aGUgYXN5bmMgYWN0aW9uIHNjb3BlIGhhcyBmaW5pc2hlZC5cbiAgdXNlVGhlbmFibGUoYm9vbGVhbk9yVGhlbmFibGUpO1xuICByZXR1cm4gW2lzUGVuZGluZywgc3RhcnRdO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclRyYW5zaXRpb24oKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZSA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIGJvb2xlYW5PclRoZW5hYmxlID0gX3JlcmVuZGVyU3RhdGVbMF07XG5cbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHN0YXJ0ID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICB2YXIgaXNQZW5kaW5nID0gdHlwZW9mIGJvb2xlYW5PclRoZW5hYmxlID09PSAnYm9vbGVhbicgPyBib29sZWFuT3JUaGVuYWJsZSA6IC8vIFRoaXMgd2lsbCBzdXNwZW5kIHVudGlsIHRoZSBhc3luYyBhY3Rpb24gc2NvcGUgaGFzIGZpbmlzaGVkLlxuICB1c2VUaGVuYWJsZShib29sZWFuT3JUaGVuYWJsZSk7XG4gIHJldHVybiBbaXNQZW5kaW5nLCBzdGFydF07XG59XG5cbmZ1bmN0aW9uIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzKCkge1xuXG4gIHZhciBzdGF0dXMgPSByZWFkQ29udGV4dChIb3N0VHJhbnNpdGlvbkNvbnRleHQpO1xuICByZXR1cm4gc3RhdHVzICE9PSBudWxsID8gc3RhdHVzIDogTm90UGVuZGluZ1RyYW5zaXRpb247XG59XG5cbmZ1bmN0aW9uIG1vdW50SWQoKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHJvb3QgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKTsgLy8gVE9ETzogSW4gRml6eiwgaWQgZ2VuZXJhdGlvbiBpcyBzcGVjaWZpYyB0byBlYWNoIHNlcnZlciBjb25maWcuIE1heWJlIHdlXG4gIC8vIHNob3VsZCBkbyB0aGlzIGluIEZpYmVyLCB0b28/IERlZmVycmluZyB0aGlzIGRlY2lzaW9uIGZvciBub3cgYmVjYXVzZVxuICAvLyB0aGVyZSdzIG5vIG90aGVyIHBsYWNlIHRvIHN0b3JlIHRoZSBwcmVmaXggZXhjZXB0IGZvciBhbiBpbnRlcm5hbCBmaWVsZCBvblxuICAvLyB0aGUgcHVibGljIGNyZWF0ZVJvb3Qgb2JqZWN0LCB3aGljaCB0aGUgZmliZXIgdHJlZSBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZVxuICAvLyBhIHJlZmVyZW5jZSB0by5cblxuICB2YXIgaWRlbnRpZmllclByZWZpeCA9IHJvb3QuaWRlbnRpZmllclByZWZpeDtcbiAgdmFyIGlkO1xuXG4gIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgdmFyIHRyZWVJZCA9IGdldFRyZWVJZCgpOyAvLyBVc2UgYSBjYXB0aWFsIFIgcHJlZml4IGZvciBzZXJ2ZXItZ2VuZXJhdGVkIGlkcy5cblxuICAgIGlkID0gJzonICsgaWRlbnRpZmllclByZWZpeCArICdSJyArIHRyZWVJZDsgLy8gVW5sZXNzIHRoaXMgaXMgdGhlIGZpcnN0IGlkIGF0IHRoaXMgbGV2ZWwsIGFwcGVuZCBhIG51bWJlciBhdCB0aGUgZW5kXG4gICAgLy8gdGhhdCByZXByZXNlbnRzIHRoZSBwb3NpdGlvbiBvZiB0aGlzIHVzZUlkIGhvb2sgYW1vbmcgYWxsIHRoZSB1c2VJZFxuICAgIC8vIGhvb2tzIGZvciB0aGlzIGZpYmVyLlxuXG4gICAgdmFyIGxvY2FsSWQgPSBsb2NhbElkQ291bnRlcisrO1xuXG4gICAgaWYgKGxvY2FsSWQgPiAwKSB7XG4gICAgICBpZCArPSAnSCcgKyBsb2NhbElkLnRvU3RyaW5nKDMyKTtcbiAgICB9XG5cbiAgICBpZCArPSAnOic7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIGEgbG93ZXJjYXNlIHIgcHJlZml4IGZvciBjbGllbnQtZ2VuZXJhdGVkIGlkcy5cbiAgICB2YXIgZ2xvYmFsQ2xpZW50SWQgPSBnbG9iYWxDbGllbnRJZENvdW50ZXIrKztcbiAgICBpZCA9ICc6JyArIGlkZW50aWZpZXJQcmVmaXggKyAncicgKyBnbG9iYWxDbGllbnRJZC50b1N0cmluZygzMikgKyAnOic7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBpZDtcbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJZCgpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIGlkID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVmcmVzaCgpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcmVmcmVzaCA9IGhvb2subWVtb2l6ZWRTdGF0ZSA9IHJlZnJlc2hDYWNoZS5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuICByZXR1cm4gcmVmcmVzaDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVmcmVzaCgpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIGhvb2subWVtb2l6ZWRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVmcmVzaENhY2hlKGZpYmVyLCBzZWVkS2V5LCBzZWVkVmFsdWUpIHtcbiAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBpZiB0aGUgcmVmcmVzaCBpcyBhdCBkaXNjcmV0ZSBwcmlvcml0eSwgb3IgaWYgd2VcbiAgLy8gb3RoZXJ3aXNlIHN1c3BlY3QgdGhhdCBpdCB3YXNuJ3QgYmF0Y2hlZCBwcm9wZXJseS5cblxuXG4gIHZhciBwcm92aWRlciA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocHJvdmlkZXIgIT09IG51bGwpIHtcbiAgICBzd2l0Y2ggKHByb3ZpZGVyLnRhZykge1xuICAgICAgY2FzZSBDYWNoZUNvbXBvbmVudDpcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBTY2hlZHVsZSBhbiB1cGRhdGUgb24gdGhlIGNhY2hlIGJvdW5kYXJ5IHRvIHRyaWdnZXIgYSByZWZyZXNoLlxuICAgICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUocHJvdmlkZXIpO1xuICAgICAgICAgIHZhciByZWZyZXNoVXBkYXRlID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgICAgIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShwcm92aWRlciwgcmVmcmVzaFVwZGF0ZSwgbGFuZSk7XG5cbiAgICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIHByb3ZpZGVyLCBsYW5lKTtcbiAgICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgcHJvdmlkZXIsIGxhbmUpO1xuICAgICAgICAgIH0gLy8gVE9ETzogSWYgYSByZWZyZXNoIG5ldmVyIGNvbW1pdHMsIHRoZSBuZXcgY2FjaGUgY3JlYXRlZCBoZXJlIG11c3QgYmVcbiAgICAgICAgICAvLyByZWxlYXNlZC4gQSBzaW1wbGUgY2FzZSBpcyBzdGFydCByZWZyZXNoaW5nIGEgY2FjaGUgYm91bmRhcnksIGJ1dCB0aGVuXG4gICAgICAgICAgLy8gdW5tb3VudCB0aGF0IGJvdW5kYXJ5IGJlZm9yZSB0aGUgcmVmcmVzaCBjb21wbGV0ZXMuXG5cblxuICAgICAgICAgIHZhciBzZWVkZWRDYWNoZSA9IGNyZWF0ZUNhY2hlKCk7XG5cbiAgICAgICAgICBpZiAoc2VlZEtleSAhPT0gbnVsbCAmJiBzZWVkS2V5ICE9PSB1bmRlZmluZWQgJiYgcm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXJyb3IoJ1RoZSBzZWVkIGFyZ3VtZW50IGlzIG5vdCBlbmFibGVkIG91dHNpZGUgZXhwZXJpbWVudGFsIGNoYW5uZWxzLicpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHBheWxvYWQgPSB7XG4gICAgICAgICAgICBjYWNoZTogc2VlZGVkQ2FjaGVcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJlZnJlc2hVcGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdmlkZXIgPSBwcm92aWRlci5yZXR1cm47XG4gIH0gLy8gVE9ETzogV2FybiBpZiB1bm1vdW50ZWQ/XG5cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hSZWR1Y2VyQWN0aW9uKGZpYmVyLCBxdWV1ZSwgYWN0aW9uKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1szXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBcIiArICdzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciAnICsgJ3JlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICBsYW5lOiBsYW5lLFxuICAgIHJldmVydExhbmU6IE5vTGFuZSxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICBoYXNFYWdlclN0YXRlOiBmYWxzZSxcbiAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcblxuICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpIHtcbiAgICBlbnF1ZXVlUmVuZGVyUGhhc2VVcGRhdGUocXVldWUsIHVwZGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuXG4gICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUocm9vdCwgcXVldWUsIGxhbmUpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtVcGRhdGVJbkRldlRvb2xzKGZpYmVyLCBsYW5lKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hTZXRTdGF0ZShmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbM10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKFwiU3RhdGUgdXBkYXRlcyBmcm9tIHRoZSB1c2VTdGF0ZSgpIGFuZCB1c2VSZWR1Y2VyKCkgSG9va3MgZG9uJ3Qgc3VwcG9ydCB0aGUgXCIgKyAnc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgJyArICdyZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gdGhlIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgbGFuZTogbGFuZSxcbiAgICByZXZlcnRMYW5lOiBOb0xhbmUsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgaGFzRWFnZXJTdGF0ZTogZmFsc2UsXG4gICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG5cbiAgaWYgKGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpKSB7XG4gICAgZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlKHF1ZXVlLCB1cGRhdGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoZmliZXIubGFuZXMgPT09IE5vTGFuZXMgJiYgKGFsdGVybmF0ZSA9PT0gbnVsbCB8fCBhbHRlcm5hdGUubGFuZXMgPT09IE5vTGFuZXMpKSB7XG4gICAgICAvLyBUaGUgcXVldWUgaXMgY3VycmVudGx5IGVtcHR5LCB3aGljaCBtZWFucyB3ZSBjYW4gZWFnZXJseSBjb21wdXRlIHRoZVxuICAgICAgLy8gbmV4dCBzdGF0ZSBiZWZvcmUgZW50ZXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB0aGVcbiAgICAgIC8vIHNhbWUgYXMgdGhlIGN1cnJlbnQgc3RhdGUsIHdlIG1heSBiZSBhYmxlIHRvIGJhaWwgb3V0IGVudGlyZWx5LlxuICAgICAgdmFyIGxhc3RSZW5kZXJlZFJlZHVjZXIgPSBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyO1xuXG4gICAgICBpZiAobGFzdFJlbmRlcmVkUmVkdWNlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXI7XG5cbiAgICAgICAge1xuICAgICAgICAgIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlO1xuICAgICAgICAgIHZhciBlYWdlclN0YXRlID0gbGFzdFJlbmRlcmVkUmVkdWNlcihjdXJyZW50U3RhdGUsIGFjdGlvbik7IC8vIFN0YXNoIHRoZSBlYWdlcmx5IGNvbXB1dGVkIHN0YXRlLCBhbmQgdGhlIHJlZHVjZXIgdXNlZCB0byBjb21wdXRlXG4gICAgICAgICAgLy8gaXQsIG9uIHRoZSB1cGRhdGUgb2JqZWN0LiBJZiB0aGUgcmVkdWNlciBoYXNuJ3QgY2hhbmdlZCBieSB0aGVcbiAgICAgICAgICAvLyB0aW1lIHdlIGVudGVyIHRoZSByZW5kZXIgcGhhc2UsIHRoZW4gdGhlIGVhZ2VyIHN0YXRlIGNhbiBiZSB1c2VkXG4gICAgICAgICAgLy8gd2l0aG91dCBjYWxsaW5nIHRoZSByZWR1Y2VyIGFnYWluLlxuXG4gICAgICAgICAgdXBkYXRlLmhhc0VhZ2VyU3RhdGUgPSB0cnVlO1xuICAgICAgICAgIHVwZGF0ZS5lYWdlclN0YXRlID0gZWFnZXJTdGF0ZTtcblxuICAgICAgICAgIGlmIChvYmplY3RJcyhlYWdlclN0YXRlLCBjdXJyZW50U3RhdGUpKSB7XG4gICAgICAgICAgICAvLyBGYXN0IHBhdGguIFdlIGNhbiBiYWlsIG91dCB3aXRob3V0IHNjaGVkdWxpbmcgUmVhY3QgdG8gcmUtcmVuZGVyLlxuICAgICAgICAgICAgLy8gSXQncyBzdGlsbCBwb3NzaWJsZSB0aGF0IHdlJ2xsIG5lZWQgdG8gcmViYXNlIHRoaXMgdXBkYXRlIGxhdGVyLFxuICAgICAgICAgICAgLy8gaWYgdGhlIGNvbXBvbmVudCByZS1yZW5kZXJzIGZvciBhIGRpZmZlcmVudCByZWFzb24gYW5kIGJ5IHRoYXRcbiAgICAgICAgICAgIC8vIHRpbWUgdGhlIHJlZHVjZXIgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAvLyBUT0RPOiBEbyB3ZSBzdGlsbCBuZWVkIHRvIGVudGFuZ2xlIHRyYW5zaXRpb25zIGluIHRoaXMgY2FzZT9cbiAgICAgICAgICAgIGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZUFuZEVhZ2VybHlCYWlsb3V0KGZpYmVyLCBxdWV1ZSwgdXBkYXRlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7Ly8gU3VwcHJlc3MgdGhlIGVycm9yLiBJdCB3aWxsIHRocm93IGFnYWluIGluIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSk7XG5cbiAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lKTtcbiAgICAgIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShyb290LCBxdWV1ZSwgbGFuZSk7XG4gICAgfVxuICB9XG5cbiAgbWFya1VwZGF0ZUluRGV2VG9vbHMoZmliZXIsIGxhbmUpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaE9wdGltaXN0aWNTZXRTdGF0ZShmaWJlciwgdGhyb3dJZkR1cmluZ1JlbmRlciwgcXVldWUsIGFjdGlvbikge1xuICB7XG4gICAgaWYgKFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDMudHJhbnNpdGlvbiA9PT0gbnVsbCkge1xuICAgICAgLy8gQW4gb3B0aW1pc3RpYyB1cGRhdGUgb2NjdXJyZWQsIGJ1dCBzdGFydFRyYW5zaXRpb24gaXMgbm90IG9uIHRoZSBzdGFjay5cbiAgICAgIC8vIFRoZXJlIGFyZSB0d28gbGlrZWx5IHNjZW5hcmlvcy5cbiAgICAgIC8vIE9uZSBwb3NzaWJpbGl0eSBpcyB0aGF0IHRoZSBvcHRpbWlzdGljIHVwZGF0ZSBpcyB0cmlnZ2VyZWQgYnkgYSByZWd1bGFyXG4gICAgICAvLyBldmVudCBoYW5kbGVyIChlLmcuIGBvblN1Ym1pdGApIGluc3RlYWQgb2YgYW4gYWN0aW9uLiBUaGlzIGlzIGEgbWlzdGFrZVxuICAgICAgLy8gYW5kIHdlIHdpbGwgd2Fybi5cbiAgICAgIC8vIFRoZSBvdGhlciBwb3NzaWJpbGl0eSBpcyB0aGUgb3B0aW1pc3RpYyB1cGRhdGUgaXMgaW5zaWRlIGFuIGFzeW5jXG4gICAgICAvLyBhY3Rpb24sIGJ1dCBhZnRlciBhbiBgYXdhaXRgLiBJbiB0aGlzIGNhc2UsIHdlIGNhbiBtYWtlIGl0IFwianVzdCB3b3JrXCJcbiAgICAgIC8vIGJ5IGFzc29jaWF0aW5nIHRoZSBvcHRpbWlzdGljIHVwZGF0ZSB3aXRoIHRoZSBwZW5kaW5nIGFzeW5jIGFjdGlvbi5cbiAgICAgIC8vIFRlY2huaWNhbGx5IGl0J3MgcG9zc2libGUgdGhhdCB0aGUgb3B0aW1pc3RpYyB1cGRhdGUgaXMgdW5yZWxhdGVkIHRvXG4gICAgICAvLyB0aGUgcGVuZGluZyBhY3Rpb24sIGJ1dCB3ZSBkb24ndCBoYXZlIGEgd2F5IG9mIGtub3dpbmcgdGhpcyBmb3Igc3VyZVxuICAgICAgLy8gYmVjYXVzZSBicm93c2VycyBjdXJyZW50bHkgZG8gbm90IHByb3ZpZGUgYSB3YXkgdG8gdHJhY2sgYXN5bmMgc2NvcGUuXG4gICAgICAvLyAoVGhlIEFzeW5jQ29udGV4dCBwcm9wb3NhbCwgaWYgaXQgbGFuZHMsIHdpbGwgc29sdmUgdGhpcyBpbiB0aGVcbiAgICAgIC8vIGZ1dHVyZS4pIEhvd2V2ZXIsIHRoaXMgaXMgbm8gZGlmZmVyZW50IHRoYW4gdGhlIHByb2JsZW0gb2YgdW5yZWxhdGVkXG4gICAgICAvLyB0cmFuc2l0aW9ucyBiZWluZyBncm91cGVkIHRvZ2V0aGVyIOKAlCBpdCdzIG5vdCB3cm9uZyBwZXIgc2UsIGJ1dCBpdCdzXG4gICAgICAvLyBub3QgaWRlYWwuXG4gICAgICAvLyBPbmNlIEFzeW5jQ29udGV4dCBzdGFydHMgbGFuZGluZyBpbiBicm93c2Vycywgd2Ugd2lsbCBwcm92aWRlIGJldHRlclxuICAgICAgLy8gd2FybmluZ3MgaW4gZGV2ZWxvcG1lbnQgZm9yIHRoZXNlIGNhc2VzLlxuICAgICAgaWYgKHBlZWtFbnRhbmdsZWRBY3Rpb25MYW5lKCkgIT09IE5vTGFuZSkgOyBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUncyBubyBwZW5kaW5nIGFzeW5jIGFjdGlvbi4gVGhlIG1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgd2UncmVcbiAgICAgICAgLy8gaW5zaWRlIGEgcmVndWxhciBldmVudCBoYW5kbGVyIChlLmcuIG9uU3VibWl0KSBpbnN0ZWFkIG9mIGFuIGFjdGlvbi5cbiAgICAgICAgZXJyb3IoJ0FuIG9wdGltaXN0aWMgc3RhdGUgdXBkYXRlIG9jY3VycmVkIG91dHNpZGUgYSB0cmFuc2l0aW9uIG9yICcgKyAnYWN0aW9uLiBUbyBmaXgsIG1vdmUgdGhlIHVwZGF0ZSB0byBhbiBhY3Rpb24sIG9yIHdyYXAgJyArICd3aXRoIHN0YXJ0VHJhbnNpdGlvbi4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlID0ge1xuICAgIC8vIEFuIG9wdGltaXN0aWMgdXBkYXRlIGNvbW1pdHMgc3luY2hyb25vdXNseS5cbiAgICBsYW5lOiBTeW5jTGFuZSxcbiAgICAvLyBBZnRlciBjb21taXR0aW5nLCB0aGUgb3B0aW1pc3RpYyB1cGRhdGUgaXMgXCJyZXZlcnRlZFwiIHVzaW5nIHRoZSBzYW1lXG4gICAgLy8gbGFuZSBhcyB0aGUgdHJhbnNpdGlvbiBpdCdzIGFzc29jaWF0ZWQgd2l0aC5cbiAgICByZXZlcnRMYW5lOiByZXF1ZXN0VHJhbnNpdGlvbkxhbmUoKSxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICBoYXNFYWdlclN0YXRlOiBmYWxzZSxcbiAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcblxuICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpIHtcbiAgICAvLyBXaGVuIGNhbGxpbmcgc3RhcnRUcmFuc2l0aW9uIGR1cmluZyByZW5kZXIsIHRoaXMgd2FybnMgaW5zdGVhZCBvZlxuICAgIC8vIHRocm93aW5nIGJlY2F1c2UgdGhyb3dpbmcgd291bGQgYmUgYSBicmVha2luZyBjaGFuZ2UuIHNldE9wdGltaXN0aWNTdGF0ZVxuICAgIC8vIGlzIGEgbmV3IEFQSSBzbyBpdCdzIE9LIHRvIHRocm93LlxuICAgIGlmICh0aHJvd0lmRHVyaW5nUmVuZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1cGRhdGUgb3B0aW1pc3RpYyBzdGF0ZSB3aGlsZSByZW5kZXJpbmcuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN0YXJ0VHJhbnNpdGlvbiB3YXMgY2FsbGVkIGR1cmluZyByZW5kZXIuIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgICAgIC8vIGJlc2lkZXMgd2FybiBoZXJlIGJlY2F1c2UgdGhlIHJlbmRlciBwaGFzZSB1cGRhdGUgd291bGQgYmUgb3ZlcmlkZGVuIGJ5XG4gICAgICAvLyB0aGUgc2Vjb25kIHVwZGF0ZSwgYW55d2F5LiBXZSBjYW4gcmVtb3ZlIHRoaXMgYnJhbmNoIGFuZCBtYWtlIGl0IHRocm93XG4gICAgICAvLyBpbiBhIGZ1dHVyZSByZWxlYXNlLlxuICAgICAge1xuICAgICAgICBlcnJvcignQ2Fubm90IGNhbGwgc3RhcnRUcmFuc2l0aW9uIHdoaWxlIHJlbmRlcmluZy4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIFN5bmNMYW5lKTtcblxuICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAvLyBOT1RFOiBUaGUgb3B0aW1pc3RpYyB1cGRhdGUgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSB0cmFuc2l0aW9uXG4gICAgICAvLyB3aWxsIG5ldmVyIGJlIGF0dGVtcHRlZCBiZWZvcmUgdGhlIG9wdGltaXN0aWMgdXBkYXRlLiBUaGlzIGN1cnJlbnRseVxuICAgICAgLy8gaG9sZHMgYmVjYXVzZSB0aGUgb3B0aW1pc3RpYyB1cGRhdGUgaXMgYWx3YXlzIHN5bmNocm9ub3VzLiBJZiB3ZSBldmVyXG4gICAgICAvLyBjaGFuZ2UgdGhhdCwgd2UnbGwgbmVlZCB0byBhY2NvdW50IGZvciB0aGlzLlxuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7IC8vIE9wdGltaXN0aWMgdXBkYXRlcyBhcmUgYWx3YXlzIHN5bmNocm9ub3VzLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNhbGxcbiAgICAgIC8vIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZSBoZXJlLlxuICAgIH1cbiAgfVxuXG4gIG1hcmtVcGRhdGVJbkRldlRvb2xzKGZpYmVyLCBTeW5jTGFuZSk7XG59XG5cbmZ1bmN0aW9uIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgcmV0dXJuIGZpYmVyID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG59XG5cbmZ1bmN0aW9uIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKSB7XG4gIC8vIFRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBTdGFzaCBpdCBpbiBhIGxhemlseS1jcmVhdGVkIG1hcCBvZlxuICAvLyBxdWV1ZSAtPiBsaW5rZWQgbGlzdCBvZiB1cGRhdGVzLiBBZnRlciB0aGlzIHJlbmRlciBwYXNzLCB3ZSdsbCByZXN0YXJ0XG4gIC8vIGFuZCBhcHBseSB0aGUgc3Rhc2hlZCB1cGRhdGVzIG9uIHRvcCBvZiB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gdHJ1ZTtcbiAgdmFyIHBlbmRpbmcgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG59IC8vIFRPRE86IE1vdmUgdG8gUmVhY3RGaWJlckNvbmN1cnJlbnRVcGRhdGVzP1xuXG5cbmZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShyb290LCBxdWV1ZSwgbGFuZSkge1xuICBpZiAoaXNUcmFuc2l0aW9uTGFuZShsYW5lKSkge1xuICAgIHZhciBxdWV1ZUxhbmVzID0gcXVldWUubGFuZXM7IC8vIElmIGFueSBlbnRhbmdsZWQgbGFuZXMgYXJlIG5vIGxvbmdlciBwZW5kaW5nIG9uIHRoZSByb290LCB0aGVuIHRoZXlcbiAgICAvLyBtdXN0IGhhdmUgZmluaXNoZWQuIFdlIGNhbiByZW1vdmUgdGhlbSBmcm9tIHRoZSBzaGFyZWQgcXVldWUsIHdoaWNoXG4gICAgLy8gcmVwcmVzZW50cyBhIHN1cGVyc2V0IG9mIHRoZSBhY3R1YWxseSBwZW5kaW5nIGxhbmVzLiBJbiBzb21lIGNhc2VzIHdlXG4gICAgLy8gbWF5IGVudGFuZ2xlIG1vcmUgdGhhbiB3ZSBuZWVkIHRvLCBidXQgdGhhdCdzIE9LLiBJbiBmYWN0IGl0J3Mgd29yc2UgaWZcbiAgICAvLyB3ZSAqZG9uJ3QqIGVudGFuZ2xlIHdoZW4gd2Ugc2hvdWxkLlxuXG4gICAgcXVldWVMYW5lcyA9IGludGVyc2VjdExhbmVzKHF1ZXVlTGFuZXMsIHJvb3QucGVuZGluZ0xhbmVzKTsgLy8gRW50YW5nbGUgdGhlIG5ldyB0cmFuc2l0aW9uIGxhbmUgd2l0aCB0aGUgb3RoZXIgdHJhbnNpdGlvbiBsYW5lcy5cblxuICAgIHZhciBuZXdRdWV1ZUxhbmVzID0gbWVyZ2VMYW5lcyhxdWV1ZUxhbmVzLCBsYW5lKTtcbiAgICBxdWV1ZS5sYW5lcyA9IG5ld1F1ZXVlTGFuZXM7IC8vIEV2ZW4gaWYgcXVldWUubGFuZXMgYWxyZWFkeSBpbmNsdWRlIGxhbmUsIHdlIGRvbid0IGtub3cgZm9yIGNlcnRhaW4gaWZcbiAgICAvLyB0aGUgbGFuZSBmaW5pc2hlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIGVudGFuZ2xlZCBpdC4gU28gd2UgbmVlZCB0b1xuICAgIC8vIGVudGFuZ2xlIGl0IGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuXG5cbiAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBuZXdRdWV1ZUxhbmVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlSW5EZXZUb29scyhmaWJlciwgbGFuZSwgYWN0aW9uKSB7XG5cbiAge1xuICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSk7XG4gIH1cbn1cblxudmFyIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICB1c2U6IHVzZSxcbiAgdXNlQ2FsbGJhY2s6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlQ29udGV4dDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VJbnNlcnRpb25FZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTGF5b3V0RWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU1lbW86IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVkdWNlcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWY6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVidWdWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VEZWZlcnJlZFZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVRyYW5zaXRpb246IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlU3luY0V4dGVybmFsU3RvcmU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlSWQ6IHRocm93SW52YWxpZEhvb2tFcnJvclxufTtcblxue1xuICBDb250ZXh0T25seURpc3BhdGNoZXIudXNlQ2FjaGVSZWZyZXNoID0gdGhyb3dJbnZhbGlkSG9va0Vycm9yO1xufVxuXG57XG4gIENvbnRleHRPbmx5RGlzcGF0Y2hlci51c2VIb3N0VHJhbnNpdGlvblN0YXR1cyA9IHRocm93SW52YWxpZEhvb2tFcnJvcjtcbiAgQ29udGV4dE9ubHlEaXNwYXRjaGVyLnVzZUZvcm1TdGF0ZSA9IHRocm93SW52YWxpZEhvb2tFcnJvcjtcbn1cblxue1xuICBDb250ZXh0T25seURpc3BhdGNoZXIudXNlT3B0aW1pc3RpYyA9IHRocm93SW52YWxpZEhvb2tFcnJvcjtcbn1cblxudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG5cbntcbiAgdmFyIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gIH07XG5cbiAgdmFyIHdhcm5JbnZhbGlkSG9va0FjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignRG8gbm90IGNhbGwgSG9va3MgaW5zaWRlIHVzZUVmZmVjdCguLi4pLCB1c2VNZW1vKC4uLiksIG9yIG90aGVyIGJ1aWx0LWluIEhvb2tzLiAnICsgJ1lvdSBjYW4gb25seSBjYWxsIEhvb2tzIGF0IHRoZSB0b3AgbGV2ZWwgb2YgeW91ciBSZWFjdCBmdW5jdGlvbi4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzJyk7XG4gIH07XG5cbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgIH0sXG4gICAgdXNlOiB1c2UsXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbnNlcnRpb25FZmZlY3QnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50SW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50U3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpO1xuICAgIH0sXG4gICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUlkJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJZCgpO1xuICAgIH1cbiAgfTtcblxuICB7XG4gICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uIHVzZUNhY2hlUmVmcmVzaCgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhY2hlUmVmcmVzaCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmcmVzaCgpO1xuICAgIH07XG4gIH1cblxuICB7XG4gICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzID0gdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM7XG5cbiAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlRm9ybVN0YXRlID0gZnVuY3Rpb24gdXNlRm9ybVN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlLCBwZXJtYWxpbmspIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUZvcm1TdGF0ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Rm9ybVN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlKTtcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VPcHRpbWlzdGljID0gZnVuY3Rpb24gdXNlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3B0aW1pc3RpYyc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3B0aW1pc3RpYyhwYXNzdGhyb3VnaCk7XG4gICAgfTtcbiAgfVxuXG4gIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgfSxcbiAgICB1c2U6IHVzZSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbnNlcnRpb25FZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KTtcbiAgICB9LFxuICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJZCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgfVxuICB9O1xuXG4gIHtcbiAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWLnVzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uIHVzZUNhY2hlUmVmcmVzaCgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhY2hlUmVmcmVzaCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZnJlc2goKTtcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMgPSB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cztcblxuICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYudXNlRm9ybVN0YXRlID0gZnVuY3Rpb24gdXNlRm9ybVN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlLCBwZXJtYWxpbmspIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUZvcm1TdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEZvcm1TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgfTtcbiAgfVxuXG4gIHtcbiAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiB1c2VPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcHRpbWlzdGljJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3B0aW1pc3RpYyhwYXNzdGhyb3VnaCk7XG4gICAgfTtcbiAgfVxuXG4gIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgfSxcbiAgICB1c2U6IHVzZSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbnNlcnRpb25FZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCk7XG4gICAgfSxcbiAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSWQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSWQoKTtcbiAgICB9XG4gIH07XG5cbiAge1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlQ2FjaGVSZWZyZXNoID0gZnVuY3Rpb24gdXNlQ2FjaGVSZWZyZXNoKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FjaGVSZWZyZXNoJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZnJlc2goKTtcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMgPSB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cztcblxuICAgIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlRm9ybVN0YXRlID0gZnVuY3Rpb24gdXNlRm9ybVN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlLCBwZXJtYWxpbmspIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUZvcm1TdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVGb3JtU3RhdGUoYWN0aW9uKTtcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlT3B0aW1pc3RpYyA9IGZ1bmN0aW9uIHVzZU9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wdGltaXN0aWMnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgfTtcbiAgfVxuXG4gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICB9LFxuICAgIHVzZTogdXNlLFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUluc2VydGlvbkVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3luY0V4dGVybmFsU3RvcmUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpO1xuICAgIH0sXG4gICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUlkJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUlkKCk7XG4gICAgfVxuICB9O1xuXG4gIHtcbiAgICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYudXNlQ2FjaGVSZWZyZXNoID0gZnVuY3Rpb24gdXNlQ2FjaGVSZWZyZXNoKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FjaGVSZWZyZXNoJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZnJlc2goKTtcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VIb3N0VHJhbnNpdGlvblN0YXR1cyA9IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzO1xuXG4gICAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUZvcm1TdGF0ZSA9IGZ1bmN0aW9uIHVzZUZvcm1TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VGb3JtU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJGb3JtU3RhdGUoYWN0aW9uKTtcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VPcHRpbWlzdGljID0gZnVuY3Rpb24gdXNlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3B0aW1pc3RpYyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlck9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgIH07XG4gIH1cblxuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgfSxcbiAgICB1c2U6IGZ1bmN0aW9uICh1c2FibGUpIHtcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgcmV0dXJuIHVzZSh1c2FibGUpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUluc2VydGlvbkVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KTtcbiAgICB9LFxuICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJZCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJZCgpO1xuICAgIH1cbiAgfTtcblxuICB7XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VDYWNoZVJlZnJlc2ggPSBmdW5jdGlvbiB1c2VDYWNoZVJlZnJlc2goKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWNoZVJlZnJlc2gnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZnJlc2goKTtcbiAgICB9O1xuICB9XG5cbiAge1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMgPSB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cztcblxuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYudXNlRm9ybVN0YXRlID0gZnVuY3Rpb24gdXNlRm9ybVN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlLCBwZXJtYWxpbmspIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUZvcm1TdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRGb3JtU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUpO1xuICAgIH07XG4gIH1cblxuICB7XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVi51c2VPcHRpbWlzdGljID0gZnVuY3Rpb24gdXNlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3B0aW1pc3RpYyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRPcHRpbWlzdGljKHBhc3N0aHJvdWdoKTtcbiAgICB9O1xuICB9XG5cbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICB9LFxuICAgIHVzZTogZnVuY3Rpb24gKHVzYWJsZSkge1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICByZXR1cm4gdXNlKHVzYWJsZSk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUluc2VydGlvbkVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpO1xuICAgIH0sXG4gICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUlkJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSWQoKTtcbiAgICB9XG4gIH07XG5cbiAge1xuICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWLnVzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uIHVzZUNhY2hlUmVmcmVzaCgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhY2hlUmVmcmVzaCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWZyZXNoKCk7XG4gICAgfTtcbiAgfVxuXG4gIHtcbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVi51c2VIb3N0VHJhbnNpdGlvblN0YXR1cyA9IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzO1xuXG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlRm9ybVN0YXRlID0gZnVuY3Rpb24gdXNlRm9ybVN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlLCBwZXJtYWxpbmspIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUZvcm1TdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUZvcm1TdGF0ZShhY3Rpb24pO1xuICAgIH07XG4gIH1cblxuICB7XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYudXNlT3B0aW1pc3RpYyA9IGZ1bmN0aW9uIHVzZU9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wdGltaXN0aWMnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICB9O1xuICB9XG5cbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgIH0sXG4gICAgdXNlOiBmdW5jdGlvbiAodXNhYmxlKSB7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHJldHVybiB1c2UodXNhYmxlKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW5zZXJ0aW9uRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KTtcbiAgICB9LFxuICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJZCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUlkKCk7XG4gICAgfVxuICB9O1xuXG4gIHtcbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uIHVzZUNhY2hlUmVmcmVzaCgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhY2hlUmVmcmVzaCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWZyZXNoKCk7XG4gICAgfTtcbiAgfVxuXG4gIHtcbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzID0gdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM7XG5cbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWLnVzZUZvcm1TdGF0ZSA9IGZ1bmN0aW9uIHVzZUZvcm1TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VGb3JtU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckZvcm1TdGF0ZShhY3Rpb24pO1xuICAgIH07XG4gIH1cblxuICB7XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVi51c2VPcHRpbWlzdGljID0gZnVuY3Rpb24gdXNlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3B0aW1pc3RpYyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgfTtcbiAgfVxufVxuXG52YXIgbm93ID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdztcbnZhciBjb21taXRUaW1lID0gMDtcbnZhciBsYXlvdXRFZmZlY3RTdGFydFRpbWUgPSAtMTtcbnZhciBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xudmFyIHBhc3NpdmVFZmZlY3RTdGFydFRpbWUgPSAtMTtcbi8qKlxuICogVHJhY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgdXBkYXRlIHdhcyBhIG5lc3RlZC9jYXNjYWRpbmcgdXBkYXRlIChzY2hlZHVsZWQgZnJvbSBhIGxheW91dCBlZmZlY3QpLlxuICpcbiAqIFRoZSBvdmVyYWxsIHNlcXVlbmNlIGlzOlxuICogICAxLiByZW5kZXJcbiAqICAgMi4gY29tbWl0IChhbmQgY2FsbCBgb25SZW5kZXJgLCBgb25Db21taXRgKVxuICogICAzLiBjaGVjayBmb3IgbmVzdGVkIHVwZGF0ZXNcbiAqICAgNC4gZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIChhbmQgY2FsbCBgb25Qb3N0Q29tbWl0YClcbiAqXG4gKiBOZXN0ZWQgdXBkYXRlcyBhcmUgaWRlbnRpZmllZCBpbiBzdGVwIDMgYWJvdmUsXG4gKiBidXQgc3RlcCA0IHN0aWxsIGFwcGxpZXMgdG8gdGhlIHdvcmsgdGhhdCB3YXMganVzdCBjb21taXR0ZWQuXG4gKiBXZSB1c2UgdHdvIGZsYWdzIHRvIHRyYWNrIG5lc3RlZCB1cGRhdGVzIHRoZW46XG4gKiBvbmUgdHJhY2tzIHdoZXRoZXIgdGhlIHVwY29taW5nIHVwZGF0ZSBpcyBhIG5lc3RlZCB1cGRhdGUsXG4gKiBhbmQgdGhlIG90aGVyIHRyYWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHVwZGF0ZSB3YXMgYSBuZXN0ZWQgdXBkYXRlLlxuICogVGhlIGZpcnN0IHZhbHVlIGdldHMgc3luY2VkIHRvIHRoZSBzZWNvbmQgYXQgdGhlIHN0YXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UuXG4gKi9cblxudmFyIGN1cnJlbnRVcGRhdGVJc05lc3RlZCA9IGZhbHNlO1xudmFyIG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpc0N1cnJlbnRVcGRhdGVOZXN0ZWQoKSB7XG4gIHJldHVybiBjdXJyZW50VXBkYXRlSXNOZXN0ZWQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtOZXN0ZWRVcGRhdGVTY2hlZHVsZWQoKSB7XG4gIHtcbiAgICBuZXN0ZWRVcGRhdGVTY2hlZHVsZWQgPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0TmVzdGVkVXBkYXRlRmxhZygpIHtcbiAge1xuICAgIGN1cnJlbnRVcGRhdGVJc05lc3RlZCA9IGZhbHNlO1xuICAgIG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN5bmNOZXN0ZWRVcGRhdGVGbGFnKCkge1xuICB7XG4gICAgY3VycmVudFVwZGF0ZUlzTmVzdGVkID0gbmVzdGVkVXBkYXRlU2NoZWR1bGVkO1xuICAgIG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENvbW1pdFRpbWUoKSB7XG4gIHJldHVybiBjb21taXRUaW1lO1xufVxuXG5mdW5jdGlvbiByZWNvcmRDb21taXRUaW1lKCkge1xuXG4gIGNvbW1pdFRpbWUgPSBub3coKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRQcm9maWxlclRpbWVyKGZpYmVyKSB7XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSBub3coKTtcblxuICBpZiAoZmliZXIuYWN0dWFsU3RhcnRUaW1lIDwgMCkge1xuICAgIGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA9IG5vdygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKGZpYmVyKSB7XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShmaWJlciwgb3ZlcnJpZGVCYXNlVGltZSkge1xuXG4gIGlmIChwcm9maWxlclN0YXJ0VGltZSA+PSAwKSB7XG4gICAgdmFyIGVsYXBzZWRUaW1lID0gbm93KCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcblxuICAgIGlmIChvdmVycmlkZUJhc2VUaW1lKSB7XG4gICAgICBmaWJlci5zZWxmQmFzZUR1cmF0aW9uID0gZWxhcHNlZFRpbWU7XG4gICAgfVxuXG4gICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihmaWJlcikge1xuXG4gIGlmIChsYXlvdXRFZmZlY3RTdGFydFRpbWUgPj0gMCkge1xuICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdygpIC0gbGF5b3V0RWZmZWN0U3RhcnRUaW1lO1xuICAgIGxheW91dEVmZmVjdFN0YXJ0VGltZSA9IC0xOyAvLyBTdG9yZSBkdXJhdGlvbiBvbiB0aGUgbmV4dCBuZWFyZXN0IFByb2ZpbGVyIGFuY2VzdG9yXG4gICAgLy8gT3IgdGhlIHJvb3QgKGZvciB0aGUgRGV2VG9vbHMgUHJvZmlsZXIgdG8gcmVhZClcblxuICAgIHZhciBwYXJlbnRGaWJlciA9IGZpYmVyLnJldHVybjtcblxuICAgIHdoaWxlIChwYXJlbnRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICB2YXIgcm9vdCA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICByb290LmVmZmVjdER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgcGFyZW50U3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5yZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY29yZFBhc3NpdmVFZmZlY3REdXJhdGlvbihmaWJlcikge1xuXG4gIGlmIChwYXNzaXZlRWZmZWN0U3RhcnRUaW1lID49IDApIHtcbiAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3coKSAtIHBhc3NpdmVFZmZlY3RTdGFydFRpbWU7XG4gICAgcGFzc2l2ZUVmZmVjdFN0YXJ0VGltZSA9IC0xOyAvLyBTdG9yZSBkdXJhdGlvbiBvbiB0aGUgbmV4dCBuZWFyZXN0IFByb2ZpbGVyIGFuY2VzdG9yXG4gICAgLy8gT3IgdGhlIHJvb3QgKGZvciB0aGUgRGV2VG9vbHMgUHJvZmlsZXIgdG8gcmVhZClcblxuICAgIHZhciBwYXJlbnRGaWJlciA9IGZpYmVyLnJldHVybjtcblxuICAgIHdoaWxlIChwYXJlbnRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICB2YXIgcm9vdCA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByb290LnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgaWYgKHBhcmVudFN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRGV0YWNoZWQgZmliZXJzIGhhdmUgdGhlaXIgc3RhdGUgbm9kZSBjbGVhcmVkIG91dC5cbiAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHJldHVybiBwb2ludGVyIGlzIGFsc28gY2xlYXJlZCBvdXQsXG4gICAgICAgICAgICAvLyBzbyB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlcG9ydCB0aGUgdGltZSBzcGVudCBpbiB0aGlzIFByb2ZpbGVyJ3Mgc3VidHJlZS5cbiAgICAgICAgICAgIHBhcmVudFN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpIHtcblxuICBsYXlvdXRFZmZlY3RTdGFydFRpbWUgPSBub3coKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRQYXNzaXZlRWZmZWN0VGltZXIoKSB7XG5cbiAgcGFzc2l2ZUVmZmVjdFN0YXJ0VGltZSA9IG5vdygpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKGZpYmVyKSB7XG4gIC8vIFRyYW5zZmVyIHRpbWUgc3BlbnQgcmVuZGVyaW5nIHRoZXNlIGNoaWxkcmVuIHNvIHdlIGRvbid0IGxvc2UgaXRcbiAgLy8gYWZ0ZXIgd2UgcmVyZW5kZXIuIFRoaXMgaXMgdXNlZCBhcyBhIGhlbHBlciBpbiBzcGVjaWFsIGNhc2VzXG4gIC8vIHdoZXJlIHdlIHNob3VsZCBjb3VudCB0aGUgd29yayBvZiBtdWx0aXBsZSBwYXNzZXMuXG4gIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gIHdoaWxlIChjaGlsZCkge1xuICAgIC8vICRGbG93Rml4TWVbdW5zYWZlLWFkZGl0aW9uXSBhZGRpdGlvbiB3aXRoIHBvc3NpYmxlIG51bGwvdW5kZWZpbmVkIHZhbHVlXG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBiYXNlUHJvcHMpIHtcbiAgaWYgKENvbXBvbmVudCAmJiBDb21wb25lbnQuZGVmYXVsdFByb3BzKSB7XG4gICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzLiBUYWtlbiBmcm9tIFJlYWN0RWxlbWVudFxuICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgYmFzZVByb3BzKTtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcztcblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VQcm9wcztcbn1cblxudmFyIGZha2VJbnRlcm5hbEluc3RhbmNlID0ge307XG52YXIgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGU7XG52YXIgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGU7XG52YXIgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGU7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXM7XG52YXIgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlO1xudmFyIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjaztcblxue1xuICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcyA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBuZXcgU2V0KCk7IC8vIFRoaXMgaXMgc28gZ3Jvc3MgYnV0IGl0J3MgYXQgbGVhc3Qgbm9uLWNyaXRpY2FsIGFuZCBjYW4gYmUgcmVtb3ZlZCBpZlxuICAvLyBpdCBjYXVzZXMgcHJvYmxlbXMuIFRoaXMgaXMgbWVhbnQgdG8gZ2l2ZSBhIG5pY2VyIGVycm9yIG1lc3NhZ2UgZm9yXG4gIC8vIFJlYWN0RE9NMTUudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocmVhY3RET00xNkNvbXBvbmVudCxcbiAgLy8gLi4uKSkgd2hpY2ggb3RoZXJ3aXNlIHRocm93cyBhIFwiX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGEgZnVuY3Rpb25cIlxuICAvLyBleGNlcHRpb24uXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZha2VJbnRlcm5hbEluc3RhbmNlLCAnX3Byb2Nlc3NDaGlsZENvbnRleHQnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGF2YWlsYWJsZSBpbiBSZWFjdCAxNisuIFRoaXMgbGlrZWx5ICcgKyAnbWVhbnMgeW91IGhhdmUgbXVsdGlwbGUgY29waWVzIG9mIFJlYWN0IGFuZCBhcmUgYXR0ZW1wdGluZyB0byBuZXN0ICcgKyAnYSBSZWFjdCAxNSB0cmVlIGluc2lkZSBhIFJlYWN0IDE2IHRyZWUgdXNpbmcgJyArIFwidW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIsIHdoaWNoIGlzbid0IHN1cHBvcnRlZC4gVHJ5IFwiICsgJ3RvIG1ha2Ugc3VyZSB5b3UgaGF2ZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0IChhbmQgaWRlYWxseSwgc3dpdGNoICcgKyAndG8gUmVhY3RET00uY3JlYXRlUG9ydGFsKS4nKTtcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZnJlZXplKGZha2VJbnRlcm5hbEluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCB8fCB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gY2FsbGVyTmFtZSArICdfJyArIGNhbGxiYWNrO1xuXG4gICAgaWYgKCFkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suaGFzKGtleSkpIHtcbiAgICAgIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5hZGQoa2V5KTtcblxuICAgICAgZXJyb3IoJyVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsZXJOYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZSh0eXBlLCBwYXJ0aWFsU3RhdGUpIHtcbiAge1xuICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKTogQSB2YWxpZCBzdGF0ZSBvYmplY3QgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuICcgKyAnWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXh0UHJvcHMpIHtcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBwYXJ0aWFsU3RhdGUgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uIGFuIGV4dHJhIHRpbWUgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuICAgICAgICBwYXJ0aWFsU3RhdGUgPSBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZShjdG9yLCBwYXJ0aWFsU3RhdGUpO1xuICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICB2YXIgbWVtb2l6ZWRTdGF0ZSA9IHBhcnRpYWxTdGF0ZSA9PT0gbnVsbCB8fCBwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCA/IHByZXZTdGF0ZSA6IGFzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbWVtb2l6ZWRTdGF0ZTsgLy8gT25jZSB0aGUgdXBkYXRlIHF1ZXVlIGlzIGVtcHR5LCBwZXJzaXN0IHRoZSBkZXJpdmVkIHN0YXRlIG9udG8gdGhlXG4gIC8vIGJhc2Ugc3RhdGUuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzLmxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gUXVldWUgaXMgYWx3YXlzIG5vbi1udWxsIGZvciBjbGFzc2VzXG4gICAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gICAgdXBkYXRlUXVldWUuYmFzZVN0YXRlID0gbWVtb2l6ZWRTdGF0ZTtcbiAgfVxufVxuXG52YXIgY2xhc3NDb21wb25lbnRVcGRhdGVyID0ge1xuICBpc01vdW50ZWQ6IGlzTW91bnRlZCxcbiAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgdmFyIHJvb3QgPSBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUsIGxhbmUpO1xuXG4gICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKHJvb3QsIGZpYmVyLCBsYW5lKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGxhbmUpO1xuICAgIH1cbiAgfSxcbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IFJlcGxhY2VTdGF0ZTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2skMShjYWxsYmFjaywgJ3JlcGxhY2VTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICB2YXIgcm9vdCA9IGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSwgbGFuZSk7XG5cbiAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lKTtcbiAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgZmliZXIsIGxhbmUpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSk7XG4gICAgfVxuICB9LFxuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKGluc3QsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICB2YXIgcm9vdCA9IGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSwgbGFuZSk7XG5cbiAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lKTtcbiAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgZmliZXIsIGxhbmUpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIG1hcmtGb3JjZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBzaG91bGRVcGRhdGUgPSBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgICB7XG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uIGFuIGV4dHJhIHRpbWUgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuICAgICAgICAgIHNob3VsZFVwZGF0ZSA9IGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFVwZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yKCclcy5zaG91bGRDb21wb25lbnRVcGRhdGUoKTogUmV0dXJuZWQgdW5kZWZpbmVkIGluc3RlYWQgb2YgYSAnICsgJ2Jvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS4nLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpIHtcbiAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG4gICAgdmFyIHJlbmRlclByZXNlbnQgPSBpbnN0YW5jZS5yZW5kZXI7XG5cbiAgICBpZiAoIXJlbmRlclByZXNlbnQpIHtcbiAgICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiB0eXBlb2YgY3Rvci5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiBkaWQgeW91IGFjY2lkZW50YWxseSByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yPycsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IHlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZGVmaW5lIGByZW5kZXJgLicsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUgJiYgIWluc3RhbmNlLmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCAmJiAhaW5zdGFuY2Uuc3RhdGUpIHtcbiAgICAgIGVycm9yKCdnZXRJbml0aWFsU3RhdGUgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGRlZmluZSBhIHN0YXRlIHByb3BlcnR5IGluc3RlYWQ/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldERlZmF1bHRQcm9wcyAmJiAhaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ1VzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLnByb3BUeXBlcykge1xuICAgICAgZXJyb3IoJ3Byb3BUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIHByb3BUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZSkge1xuICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGUgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoaW5zdGFuY2UuY29udGV4dFR5cGVzKSB7XG4gICAgICAgIGVycm9yKCdjb250ZXh0VHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZXMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN0b3IuY29udGV4dFR5cGUgJiYgY3Rvci5jb250ZXh0VHlwZXMgJiYgIWRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmhhcyhjdG9yKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5hZGQoY3Rvcik7XG5cbiAgICAgICAgZXJyb3IoJyVzIGRlY2xhcmVzIGJvdGggY29udGV4dFR5cGVzIGFuZCBjb250ZXh0VHlwZSBzdGF0aWMgcHJvcGVydGllcy4gJyArICdUaGUgbGVnYWN5IGNvbnRleHRUeXBlcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWQuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRTaG91bGRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArICdleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgJiYgdHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpLiAnICsgJ3Nob3VsZENvbXBvbmVudFVwZGF0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBleHRlbmRpbmcgUmVhY3QuUHVyZUNvbXBvbmVudC4gJyArICdQbGVhc2UgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgaXMgdXNlZC4nLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgJ0EgcHVyZSBjb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkVW5tb3VudCgpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0RpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFJlY2VpdmVQcm9wcygpLiBCdXQgdGhlcmUgaXMgbm8gc3VjaCBsaWZlY3ljbGUgbWV0aG9kLiAnICsgJ0lmIHlvdSBtZWFudCB0byB1cGRhdGUgdGhlIHN0YXRlIGluIHJlc3BvbnNlIHRvIGNoYW5naW5nIHByb3BzLCAnICsgJ3VzZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkuIElmIHlvdSBtZWFudCB0byBmZXRjaCBkYXRhIG9yICcgKyAncnVuIHNpZGUtZWZmZWN0cyBvciBtdXRhdGlvbnMgYWZ0ZXIgUmVhY3QgaGFzIHVwZGF0ZWQgdGhlIFVJLCB1c2UgY29tcG9uZW50RGlkVXBkYXRlKCkuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBoYXNNdXRhdGVkUHJvcHMgPSBpbnN0YW5jZS5wcm9wcyAhPT0gbmV3UHJvcHM7XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IHVuZGVmaW5lZCAmJiBoYXNNdXRhdGVkUHJvcHMpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyAnICsgXCJ1cCB0aGUgc2FtZSBwcm9wcyB0aGF0IHlvdXIgY29tcG9uZW50J3MgY29uc3RydWN0b3Igd2FzIHBhc3NlZC5cIiwgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZXJyb3IoJ1NldHRpbmcgZGVmYXVsdFByb3BzIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgaWdub3JlZC4nICsgJyBJbnN0ZWFkLCBkZWZpbmUgZGVmYXVsdFByb3BzIGFzIGEgc3RhdGljIHByb3BlcnR5IG9uICVzLicsIG5hbWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAhZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmhhcyhjdG9yKSkge1xuICAgICAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmFkZChjdG9yKTtcblxuICAgICAgZXJyb3IoJyVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuICcgKyAnVGhpcyBjb21wb25lbnQgZGVmaW5lcyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIG9ubHkuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGN0b3IpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGFuIGluc3RhbmNlIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgIGlmIChzdGF0ZSAmJiAodHlwZW9mIHN0YXRlICE9PSAnb2JqZWN0JyB8fCBpc0FycmF5KHN0YXRlKSkpIHtcbiAgICAgIGVycm9yKCclcy5zdGF0ZTogbXVzdCBiZSBzZXQgdG8gYW4gb2JqZWN0IG9yIG51bGwnLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3Rvci5jaGlsZENvbnRleHRUeXBlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9yKCclcy5nZXRDaGlsZENvbnRleHQoKTogY2hpbGRDb250ZXh0VHlwZXMgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvICcgKyAndXNlIGdldENoaWxkQ29udGV4dCgpLicsIG5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlOyAvLyBUaGUgaW5zdGFuY2UgbmVlZHMgYWNjZXNzIHRvIHRoZSBmaWJlciBzbyB0aGF0IGl0IGNhbiBzY2hlZHVsZSB1cGRhdGVzXG5cbiAgc2V0KGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAge1xuICAgIGluc3RhbmNlLl9yZWFjdEludGVybmFsSW5zdGFuY2UgPSBmYWtlSW50ZXJuYWxJbnN0YW5jZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBwcm9wcykge1xuICB2YXIgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBmYWxzZTtcbiAgdmFyIHVubWFza2VkQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAge1xuICAgIGlmICgnY29udGV4dFR5cGUnIGluIGN0b3IpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gLy8gQWxsb3cgbnVsbCBmb3IgY29uZGl0aW9uYWwgZGVjbGFyYXRpb25cbiAgICAgIGNvbnRleHRUeXBlID09PSBudWxsIHx8IGNvbnRleHRUeXBlICE9PSB1bmRlZmluZWQgJiYgY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSAmJiBjb250ZXh0VHlwZS5fY29udGV4dCA9PT0gdW5kZWZpbmVkOyAvLyBOb3QgYSA8Q29udGV4dC5Db25zdW1lcj5cblxuICAgICAgaWYgKCFpc1ZhbGlkICYmICFkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5hZGQoY3Rvcik7XG4gICAgICAgIHZhciBhZGRlbmR1bSA9ICcnO1xuXG4gICAgICAgIGlmIChjb250ZXh0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byB1bmRlZmluZWQuICcgKyAnVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgdHlwbyBvciBieSBtaXhpbmcgdXAgbmFtZWQgYW5kIGRlZmF1bHQgaW1wb3J0cy4gJyArICdUaGlzIGNhbiBhbHNvIGhhcHBlbiBkdWUgdG8gYSBjaXJjdWxhciBkZXBlbmRlbmN5LCBzbyAnICsgJ3RyeSBtb3ZpbmcgdGhlIGNyZWF0ZUNvbnRleHQoKSBjYWxsIHRvIGEgc2VwYXJhdGUgZmlsZS4nO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGEgJyArIHR5cGVvZiBjb250ZXh0VHlwZSArICcuJztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSkge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LlByb3ZpZGVyIGluc3RlYWQ/JztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuQ29uc3VtZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNvbnRleHRUeXBlKS5qb2luKCcsICcpICsgJ30uJztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCclcyBkZWZpbmVzIGFuIGludmFsaWQgY29udGV4dFR5cGUuICcgKyAnY29udGV4dFR5cGUgc2hvdWxkIHBvaW50IHRvIHRoZSBDb250ZXh0IG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVDb250ZXh0KCkuJXMnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgJ0NvbXBvbmVudCcsIGFkZGVuZHVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gY3Rvci5jb250ZXh0VHlwZXM7XG4gICAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBjb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gICAgY29udGV4dCA9IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID8gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSA6IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTsgLy8gSW5zdGFudGlhdGUgdHdpY2UgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpbnN0YW5jZSA9IG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGUgIT09IG51bGwgJiYgaW5zdGFuY2Uuc3RhdGUgIT09IHVuZGVmaW5lZCA/IGluc3RhbmNlLnN0YXRlIDogbnVsbDtcbiAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgc3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignYCVzYCB1c2VzIGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGJ1dCBpdHMgaW5pdGlhbCBzdGF0ZSBpcyAnICsgJyVzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZC4gSW5zdGVhZCwgZGVmaW5lIHRoZSBpbml0aWFsIHN0YXRlIGJ5ICcgKyAnYXNzaWduaW5nIGFuIG9iamVjdCB0byBgdGhpcy5zdGF0ZWAgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGAlc2AuICcgKyAnVGhpcyBlbnN1cmVzIHRoYXQgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYXJndW1lbnRzIGhhdmUgYSBjb25zaXN0ZW50IHNoYXBlLicsIGNvbXBvbmVudE5hbWUsIGluc3RhbmNlLnN0YXRlID09PSBudWxsID8gJ251bGwnIDogJ3VuZGVmaW5lZCcsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH0gLy8gSWYgbmV3IGNvbXBvbmVudCBBUElzIGFyZSBkZWZpbmVkLCBcInVuc2FmZVwiIGxpZmVjeWNsZXMgd29uJ3QgYmUgY2FsbGVkLlxuICAgIC8vIFdhcm4gYWJvdXQgdGhlc2UgbGlmZWN5Y2xlcyBpZiB0aGV5IGFyZSBwcmVzZW50LlxuICAgIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBtZXRob2RzIHRob3VnaC5cblxuXG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBmb3VuZFdpbGxNb3VudE5hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBudWxsO1xuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsTW91bnQnO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCB8fCBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICB2YXIgbmV3QXBpTmFtZSA9IHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/ICdnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKScgOiAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSc7XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmhhcyhfY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmFkZChfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgICBlcnJvcignVW5zYWZlIGxlZ2FjeSBsaWZlY3ljbGVzIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgY29tcG9uZW50cyB1c2luZyBuZXcgY29tcG9uZW50IEFQSXMuXFxuXFxuJyArICclcyB1c2VzICVzIGJ1dCBhbHNvIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbGVnYWN5IGxpZmVjeWNsZXM6JXMlcyVzXFxuXFxuJyArICdUaGUgYWJvdmUgbGlmZWN5Y2xlcyBzaG91bGQgYmUgcmVtb3ZlZC4gTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTpcXG4nICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMnLCBfY29tcG9uZW50TmFtZSwgbmV3QXBpTmFtZSwgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsTW91bnROYW1lIDogJycsIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lIDogJycsIGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENhY2hlIHVubWFza2VkIGNvbnRleHQgc28gd2UgY2FuIGF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS5cbiAgLy8gUmVhY3RGaWJlckNvbnRleHQgdXN1YWxseSB1cGRhdGVzIHRoaXMgY2FjaGUgYnV0IGNhbid0IGZvciBuZXdseS1jcmVhdGVkIGluc3RhbmNlcy5cblxuXG4gIGlmIChpc0xlZ2FjeUNvbnRleHRDb25zdW1lcikge1xuICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgdmFyIG9sZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgfVxuXG4gIGlmIChvbGRTdGF0ZSAhPT0gaW5zdGFuY2Uuc3RhdGUpIHtcbiAgICB7XG4gICAgICBlcnJvcignJXMuY29tcG9uZW50V2lsbE1vdW50KCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byB0aGlzLnN0YXRlIGlzICcgKyBcImRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8ICdDb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KSB7XG4gIHZhciBvbGRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICB9XG5cbiAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBvbGRTdGF0ZSkge1xuICAgIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byAnICsgXCJ0aGlzLnN0YXRlIGlzIGRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn0gLy8gSW52b2tlcyB0aGUgbW91bnQgbGlmZS1jeWNsZXMgb24gYSBwcmV2aW91c2x5IG5ldmVyIHJlbmRlcmVkIGluc3RhbmNlLlxuXG5cbmZ1bmN0aW9uIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICBpbnN0YW5jZS5yZWZzID0ge307XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAge1xuICAgIGlmIChpbnN0YW5jZS5zdGF0ZSA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYXNzaWduIHByb3BzIGRpcmVjdGx5IHRvIHN0YXRlICcgKyBcImJlY2F1c2UgdXBkYXRlcyB0byBwcm9wcyB3b24ndCBiZSByZWZsZWN0ZWQgaW4gc3RhdGUuIFwiICsgJ0luIG1vc3QgY2FzZXMsIGl0IGlzIGJldHRlciB0byB1c2UgcHJvcHMgZGlyZWN0bHkuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gIH1cblxuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH0gLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cblxuICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7IC8vIElmIHdlIGhhZCBhZGRpdGlvbmFsIHN0YXRlIHVwZGF0ZXMgZHVyaW5nIHRoaXMgbGlmZS1jeWNsZSwgbGV0J3NcbiAgICAvLyBwcm9jZXNzIHRoZW0gbm93LlxuXG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlIHwgTGF5b3V0U3RhdGljO1xuICB9XG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBNb3VudExheW91dERldjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzICYmIG9sZFN0YXRlID09PSBuZXdTdGF0ZSAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSAmJiAhY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpKSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGUgfCBMYXlvdXRTdGF0aWM7XG4gICAgfVxuXG4gICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IE1vdW50TGF5b3V0RGV2O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIHZhciBzaG91bGRVcGRhdGUgPSBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHwgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlIHwgTGF5b3V0U3RhdGljO1xuICAgIH1cblxuICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBNb3VudExheW91dERldjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGUgfCBMYXlvdXRTdGF0aWM7XG4gICAgfVxuXG4gICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IE1vdW50TGF5b3V0RGV2O1xuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn0gLy8gSW52b2tlcyB0aGUgdXBkYXRlIGxpZmUtY3ljbGVzIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IHNob3VsZG4ndCByZXJlbmRlci5cblxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVucmVzb2x2ZWRPbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID8gdW5yZXNvbHZlZE9sZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh3b3JrSW5Qcm9ncmVzcy50eXBlLCB1bnJlc29sdmVkT2xkUHJvcHMpO1xuICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICB2YXIgdW5yZXNvbHZlZE5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIG5leHRDb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRVbm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nOyAvLyBOb3RlOiBEdXJpbmcgdGhlc2UgbGlmZS1jeWNsZXMsIGluc3RhbmNlLnByb3BzL2luc3RhbmNlLnN0YXRlIGFyZSB3aGF0XG4gIC8vIGV2ZXIgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHRvIHJlbmRlciAtIG5vdCB0aGUgXCJjdXJyZW50XCIuIEhvd2V2ZXIsXG4gIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG4gIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IHVucmVzb2x2ZWROZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAodW5yZXNvbHZlZE9sZFByb3BzID09PSB1bnJlc29sdmVkTmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgJiYgIShlbmFibGVMYXp5Q29udGV4dFByb3BhZ2F0aW9uICAgKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpIHx8IC8vIFRPRE86IEluIHNvbWUgY2FzZXMsIHdlJ2xsIGVuZCB1cCBjaGVja2luZyBpZiBjb250ZXh0IGhhcyBjaGFuZ2VkIHR3aWNlLFxuICAvLyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAgaGFzIGJlZW4gY2FsbGVkLiBOb3QgaWRlYWwsXG4gIC8vIGJ1dCBJJ20gbG9hdGggdG8gcmVmYWN0b3IgdGhpcyBmdW5jdGlvbi4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIG1lbW9pemVkXG4gIC8vIGNvbXBvbmVudHMgc28gaXQncyBub3QgdGhhdCBjb21tb24uXG4gIGVuYWJsZUxhenlDb250ZXh0UHJvcGFnYXRpb24gICA7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICB9XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgcHJvcHMvc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih2YWx1ZSwgc291cmNlKSB7XG4gIC8vIElmIHRoZSB2YWx1ZSBpcyBhbiBlcnJvciwgY2FsbCB0aGlzIGZ1bmN0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIHRocm93blxuICAvLyBzbyB0aGUgc3RhY2sgaXMgYWNjdXJhdGUuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKSxcbiAgICBkaWdlc3Q6IG51bGxcbiAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIGRpZ2VzdCwgc3RhY2spIHtcbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgc291cmNlOiBudWxsLFxuICAgIHN0YWNrOiBzdGFjayAhPSBudWxsID8gc3RhY2sgOiBudWxsLFxuICAgIGRpZ2VzdDogZGlnZXN0ICE9IG51bGwgPyBkaWdlc3QgOiBudWxsXG4gIH07XG59XG5cbi8vIFRoaXMgbW9kdWxlIGlzIGZvcmtlZCBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLlxuLy8gQnkgZGVmYXVsdCwgcmV0dXJuIGB0cnVlYCB0byBsb2cgZXJyb3JzIHRvIHRoZSBjb25zb2xlLlxuLy8gRm9ya3MgY2FuIHJldHVybiBgZmFsc2VgIGlmIHRoaXMgaXNuJ3QgZGVzaXJhYmxlLlxuZnVuY3Rpb24gc2hvd0Vycm9yRGlhbG9nKGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGxvZ0NhcHR1cmVkRXJyb3IoYm91bmRhcnksIGVycm9ySW5mbykge1xuICB0cnkge1xuICAgIHZhciBsb2dFcnJvciA9IHNob3dFcnJvckRpYWxvZyhib3VuZGFyeSwgZXJyb3JJbmZvKTsgLy8gQWxsb3cgaW5qZWN0ZWQgc2hvd0Vycm9yRGlhbG9nKCkgdG8gcHJldmVudCBkZWZhdWx0IGNvbnNvbGUuZXJyb3IgbG9nZ2luZy5cbiAgICAvLyBUaGlzIGVuYWJsZXMgcmVuZGVyZXJzIGxpa2UgUmVhY3ROYXRpdmUgdG8gYmV0dGVyIG1hbmFnZSByZWRib3ggYmVoYXZpb3IuXG5cbiAgICBpZiAobG9nRXJyb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgaWYgKHRydWUpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBlcnJvckluZm8uc291cmNlO1xuICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgdmFyIGNvbXBvbmVudFN0YWNrID0gc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnOyAvLyBCcm93c2VycyBzdXBwb3J0IHNpbGVuY2luZyB1bmNhdWdodCBlcnJvcnMgYnkgY2FsbGluZ1xuICAgICAgLy8gYHByZXZlbnREZWZhdWx0KClgIGluIHdpbmRvdyBgZXJyb3JgIGhhbmRsZXIuXG4gICAgICAvLyBXZSByZWNvcmQgdGhpcyBpbmZvcm1hdGlvbiBhcyBhbiBleHBhbmRvIG9uIHRoZSBlcnJvci5cblxuICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgZXJyb3IuX3N1cHByZXNzTG9nZ2luZykge1xuICAgICAgICBpZiAoYm91bmRhcnkudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgIC8vIFRoZSBlcnJvciBpcyByZWNvdmVyYWJsZSBhbmQgd2FzIHNpbGVuY2VkLlxuICAgICAgICAgIC8vIElnbm9yZSBpdCBhbmQgZG9uJ3QgcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuICAgICAgICAgIC8vIFRoaXMgaXMgaGFuZHkgZm9yIHRlc3RpbmcgZXJyb3IgYm91bmRhcmllcyB3aXRob3V0IG5vaXNlLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBUaGUgZXJyb3IgaXMgZmF0YWwuIFNpbmNlIHRoZSBzaWxlbmNpbmcgbWlnaHQgaGF2ZVxuICAgICAgICAvLyBiZWVuIGFjY2lkZW50YWwsIHdlJ2xsIHN1cmZhY2UgaXQgYW55d2F5LlxuICAgICAgICAvLyBIb3dldmVyLCB0aGUgYnJvd3NlciB3b3VsZCBoYXZlIHNpbGVuY2VkIHRoZSBvcmlnaW5hbCBlcnJvclxuICAgICAgICAvLyBzbyB3ZSdsbCBwcmludCBpdCBmaXJzdCwgYW5kIHRoZW4gcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuXG5cbiAgICAgICAgY29uc29sZVsnZXJyb3InXShlcnJvcik7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgICAgICAvLyBGb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoaXMgYmxvY2ssIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTMzODRcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBzb3VyY2UgPyBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHNvdXJjZSkgOiBudWxsO1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZSA/IFwiVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIHRoZSA8XCIgKyBjb21wb25lbnROYW1lICsgXCI+IGNvbXBvbmVudDpcIiA6ICdUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50czonO1xuICAgICAgdmFyIGVycm9yQm91bmRhcnlNZXNzYWdlO1xuXG4gICAgICBpZiAoYm91bmRhcnkudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9ICdDb25zaWRlciBhZGRpbmcgYW4gZXJyb3IgYm91bmRhcnkgdG8geW91ciB0cmVlIHRvIGN1c3RvbWl6ZSBlcnJvciBoYW5kbGluZyBiZWhhdmlvci5cXG4nICsgJ1Zpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9lcnJvci1ib3VuZGFyaWVzIHRvIGxlYXJuIG1vcmUgYWJvdXQgZXJyb3IgYm91bmRhcmllcy4nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGVycm9yQm91bmRhcnlOYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihib3VuZGFyeSkgfHwgJ0Fub255bW91cyc7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gXCJSZWFjdCB3aWxsIHRyeSB0byByZWNyZWF0ZSB0aGlzIGNvbXBvbmVudCB0cmVlIGZyb20gc2NyYXRjaCBcIiArIChcInVzaW5nIHRoZSBlcnJvciBib3VuZGFyeSB5b3UgcHJvdmlkZWQsIFwiICsgZXJyb3JCb3VuZGFyeU5hbWUgKyBcIi5cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21iaW5lZE1lc3NhZ2UgPSBjb21wb25lbnROYW1lTWVzc2FnZSArIFwiXFxuXCIgKyBjb21wb25lbnRTdGFjayArIFwiXFxuXFxuXCIgKyAoXCJcIiArIGVycm9yQm91bmRhcnlNZXNzYWdlKTsgLy8gSW4gZGV2ZWxvcG1lbnQsIHdlIHByb3ZpZGUgb3VyIG93biBtZXNzYWdlIHdpdGgganVzdCB0aGUgY29tcG9uZW50IHN0YWNrLlxuICAgICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0aGUgb3JpZ2luYWwgZXJyb3IgbWVzc2FnZSBhbmQgSlMgc3RhY2sgYmVjYXVzZSB0aGUgYnJvd3NlclxuICAgICAgLy8gaGFzIGFscmVhZHkgcHJpbnRlZCBpdC4gRXZlbiBpZiB0aGUgYXBwbGljYXRpb24gc3dhbGxvd3MgdGhlIGVycm9yLCBpdCBpcyBzdGlsbFxuICAgICAgLy8gZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyIHRoYW5rcyB0byB0aGUgREVWLW9ubHkgZmFrZSBldmVudCB0cmljayBpbiBSZWFjdEVycm9yVXRpbHMuXG5cbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oY29tYmluZWRNZXNzYWdlKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBub3QgdGhyb3csIG9yIFJlYWN0IGludGVybmFsIHN0YXRlIHdpbGwgZ2V0IG1lc3NlZCB1cC5cbiAgICAvLyBJZiBjb25zb2xlLmVycm9yIGlzIG92ZXJyaWRkZW4sIG9yIGxvZ0NhcHR1cmVkRXJyb3IoKSBzaG93cyBhIGRpYWxvZyB0aGF0IHRocm93cyxcbiAgICAvLyB3ZSB3YW50IHRvIHJlcG9ydCB0aGlzIGVycm9yIG91dHNpZGUgb2YgdGhlIG5vcm1hbCBzdGFjayBhcyBhIGxhc3QgcmVzb3J0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMxODhcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTsgLy8gVW5tb3VudCB0aGUgcm9vdCBieSByZW5kZXJpbmcgbnVsbC5cblxuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdXBkYXRlLnBheWxvYWQgPSB7XG4gICAgZWxlbWVudDogbnVsbFxuICB9O1xuICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIG9uVW5jYXVnaHRFcnJvcihlcnJvcik7XG4gICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPSBmaWJlci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgdXBkYXRlLnBheWxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yJDEpO1xuICAgIH07XG5cbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB7XG4gICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgIH1cblxuICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGluc3QgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgaWYgKGluc3QgIT09IG51bGwgJiYgdHlwZW9mIGluc3QuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF1cbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHtcbiAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgfVxuXG4gICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuXG4gICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUbyBwcmVzZXJ2ZSB0aGUgcHJlZXhpc3RpbmcgcmV0cnkgYmVoYXZpb3Igb2YgZXJyb3IgYm91bmRhcmllcyxcbiAgICAgICAgLy8gd2Uga2VlcCB0cmFjayBvZiB3aGljaCBvbmVzIGFscmVhZHkgZmFpbGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgICAgICAvLyBUaGlzIGdldHMgcmVzZXQgYmVmb3JlIHdlIHlpZWxkIGJhY2sgdG8gdGhlIGJyb3dzZXIuXG4gICAgICAgIC8vIFRPRE86IFdhcm4gaW4gc3RyaWN0IG1vZGUgaWYgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzXG4gICAgICAgIC8vIG5vdCBkZWZpbmVkLlxuICAgICAgICBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IkMSwge1xuICAgICAgICBjb21wb25lbnRTdGFjazogc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnXG4gICAgICB9KTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIElmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkLFxuICAgICAgICAgIC8vIHRoZW4gaXQgbmVlZHMgdG8gY2FsbCBzZXRTdGF0ZSB0byByZWNvdmVyIGZyb20gZXJyb3JzLlxuICAgICAgICAgIC8vIElmIG5vIHN0YXRlIHVwZGF0ZSBpcyBzY2hlZHVsZWQgdGhlbiB0aGUgYm91bmRhcnkgd2lsbCBzd2FsbG93IHRoZSBlcnJvci5cbiAgICAgICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUoZmliZXIubGFuZXMsIFN5bmNMYW5lKSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzOiBFcnJvciBib3VuZGFyaWVzIHNob3VsZCBpbXBsZW1lbnQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkuICcgKyAnSW4gdGhhdCBtZXRob2QsIHJldHVybiBhIHN0YXRlIHVwZGF0ZSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2sgVUkuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgJ1Vua25vd24nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gcmVzZXRTdXNwZW5kZWRDb21wb25lbnQoc291cmNlRmliZXIsIHJvb3RSZW5kZXJMYW5lcykge1xuICAvLyBBIGxlZ2FjeSBtb2RlIFN1c3BlbnNlIHF1aXJrLCBvbmx5IHJlbGV2YW50IHRvIGhvb2sgY29tcG9uZW50cy5cblxuXG4gIHZhciB0YWcgPSBzb3VyY2VGaWJlci50YWc7XG5cbiAgaWYgKChzb3VyY2VGaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUgJiYgKHRhZyA9PT0gRnVuY3Rpb25Db21wb25lbnQgfHwgdGFnID09PSBGb3J3YXJkUmVmIHx8IHRhZyA9PT0gU2ltcGxlTWVtb0NvbXBvbmVudCkpIHtcbiAgICB2YXIgY3VycmVudFNvdXJjZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50U291cmNlKSB7XG4gICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IGN1cnJlbnRTb3VyY2UudXBkYXRlUXVldWU7XG4gICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gY3VycmVudFNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICAgICAgc291cmNlRmliZXIubGFuZXMgPSBjdXJyZW50U291cmNlLmxhbmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1N1c3BlbnNlQm91bmRhcnlTaG91bGRDYXB0dXJlKHN1c3BlbnNlQm91bmRhcnksIHJldHVybkZpYmVyLCBzb3VyY2VGaWJlciwgcm9vdCwgcm9vdFJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgbWFya3MgYSBTdXNwZW5zZSBib3VuZGFyeSBzbyB0aGF0IHdoZW4gd2UncmUgdW53aW5kaW5nIHRoZSBzdGFjayxcbiAgLy8gaXQgY2FwdHVyZXMgdGhlIHN1c3BlbmRlZCBcImV4Y2VwdGlvblwiIGFuZCBkb2VzIGEgc2Vjb25kIChmYWxsYmFjaykgcGFzcy5cbiAgaWYgKChzdXNwZW5zZUJvdW5kYXJ5Lm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIC8vIExlZ2FjeSBNb2RlIFN1c3BlbnNlXG4gICAgLy9cbiAgICAvLyBJZiB0aGUgYm91bmRhcnkgaXMgaW4gbGVnYWN5IG1vZGUsIHdlIHNob3VsZCAqbm90KlxuICAgIC8vIHN1c3BlbmQgdGhlIGNvbW1pdC4gUHJldGVuZCBhcyBpZiB0aGUgc3VzcGVuZGVkIGNvbXBvbmVudCByZW5kZXJlZFxuICAgIC8vIG51bGwgYW5kIGtlZXAgcmVuZGVyaW5nLiBXaGVuIHRoZSBTdXNwZW5zZSBib3VuZGFyeSBjb21wbGV0ZXMsXG4gICAgLy8gd2UnbGwgZG8gYSBzZWNvbmQgcGFzcyB0byByZW5kZXIgdGhlIGZhbGxiYWNrLlxuICAgIGlmIChzdXNwZW5zZUJvdW5kYXJ5ID09PSByZXR1cm5GaWJlcikge1xuICAgICAgLy8gU3BlY2lhbCBjYXNlIHdoZXJlIHdlIHN1c3BlbmRlZCB3aGlsZSByZWNvbmNpbGluZyB0aGUgY2hpbGRyZW4gb2ZcbiAgICAgIC8vIGEgU3VzcGVuc2UgYm91bmRhcnkncyBpbm5lciBPZmZzY3JlZW4gd3JhcHBlciBmaWJlci4gVGhpcyBoYXBwZW5zXG4gICAgICAvLyB3aGVuIGEgUmVhY3QubGF6eSBjb21wb25lbnQgaXMgYSBkaXJlY3QgY2hpbGQgb2YgYVxuICAgICAgLy8gU3VzcGVuc2UgYm91bmRhcnkuXG4gICAgICAvL1xuICAgICAgLy8gU3VzcGVuc2UgYm91bmRhcmllcyBhcmUgaW1wbGVtZW50ZWQgYXMgbXVsdGlwbGUgZmliZXJzLCBidXQgdGhleVxuICAgICAgLy8gYXJlIGEgc2luZ2xlIGNvbmNlcHR1YWwgdW5pdC4gVGhlIGxlZ2FjeSBtb2RlIGJlaGF2aW9yIHdoZXJlIHdlXG4gICAgICAvLyBwcmV0ZW5kIHRoZSBzdXNwZW5kZWQgZmliZXIgY29tbWl0dGVkIGFzIGBudWxsYCB3b24ndCB3b3JrLFxuICAgICAgLy8gYmVjYXVzZSBpbiB0aGlzIGNhc2UgdGhlIFwic3VzcGVuZGVkXCIgZmliZXIgaXMgdGhlIGlubmVyXG4gICAgICAvLyBPZmZzY3JlZW4gd3JhcHBlci5cbiAgICAgIC8vXG4gICAgICAvLyBCZWNhdXNlIHRoZSBjb250ZW50cyBvZiB0aGUgYm91bmRhcnkgaGF2ZW4ndCBzdGFydGVkIHJlbmRlcmluZ1xuICAgICAgLy8geWV0IChpLmUuIG5vdGhpbmcgaW4gdGhlIHRyZWUgaGFzIHBhcnRpYWxseSByZW5kZXJlZCkgd2UgY2FuXG4gICAgICAvLyBzd2l0Y2ggdG8gdGhlIHJlZ3VsYXIsIGNvbmN1cnJlbnQgbW9kZSBiZWhhdmlvcjogbWFyayB0aGVcbiAgICAgIC8vIGJvdW5kYXJ5IHdpdGggU2hvdWxkQ2FwdHVyZSBhbmQgZW50ZXIgdGhlIHVud2luZCBwaGFzZS5cbiAgICAgIHN1c3BlbnNlQm91bmRhcnkuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VzcGVuc2VCb3VuZGFyeS5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgc291cmNlRmliZXIuZmxhZ3MgfD0gRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZTsgLy8gV2UncmUgZ29pbmcgdG8gY29tbWl0IHRoaXMgZmliZXIgZXZlbiB0aG91Z2ggaXQgZGlkbid0IGNvbXBsZXRlLlxuICAgICAgLy8gQnV0IHdlIHNob3VsZG4ndCBjYWxsIGFueSBsaWZlY3ljbGUgbWV0aG9kcyBvciBjYWxsYmFja3MuIFJlbW92ZVxuICAgICAgLy8gYWxsIGxpZmVjeWNsZSBlZmZlY3QgdGFncy5cblxuICAgICAgc291cmNlRmliZXIuZmxhZ3MgJj0gfihMaWZlY3ljbGVFZmZlY3RNYXNrIHwgSW5jb21wbGV0ZSk7XG5cbiAgICAgIGlmIChzb3VyY2VGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBjdXJyZW50U291cmNlRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRTb3VyY2VGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQuIENoYW5nZSB0aGUgdGFnIHNvIGl0J3Mgbm90IG1pc3Rha2VuIGZvciBhXG4gICAgICAgICAgLy8gY29tcGxldGVkIGNsYXNzIGNvbXBvbmVudC4gRm9yIGV4YW1wbGUsIHdlIHNob3VsZCBub3QgY2FsbFxuICAgICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGlmIGl0IGlzIGRlbGV0ZWQuXG4gICAgICAgICAgc291cmNlRmliZXIudGFnID0gSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFdoZW4gd2UgdHJ5IHJlbmRlcmluZyBhZ2Fpbiwgd2Ugc2hvdWxkIG5vdCByZXVzZSB0aGUgY3VycmVudCBmaWJlcixcbiAgICAgICAgICAvLyBzaW5jZSBpdCdzIGtub3duIHRvIGJlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gVXNlIGEgZm9yY2UgdXBkYXRlIHRvXG4gICAgICAgICAgLy8gcHJldmVudCBhIGJhaWwgb3V0LlxuICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoU3luY0xhbmUpO1xuICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcbiAgICAgICAgICBlbnF1ZXVlVXBkYXRlKHNvdXJjZUZpYmVyLCB1cGRhdGUsIFN5bmNMYW5lKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuIE1hcmsgaXQgd2l0aCBTeW5jIHByaW9yaXR5IHRvXG4gICAgICAvLyBpbmRpY2F0ZSB0aGF0IGl0IHN0aWxsIGhhcyBwZW5kaW5nIHdvcmsuXG5cblxuICAgICAgc291cmNlRmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKHNvdXJjZUZpYmVyLmxhbmVzLCBTeW5jTGFuZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1c3BlbnNlQm91bmRhcnk7XG4gIH0gLy8gQ29uZmlybWVkIHRoYXQgdGhlIGJvdW5kYXJ5IGlzIGluIGEgY29uY3VycmVudCBtb2RlIHRyZWUuIENvbnRpbnVlXG4gIC8vIHdpdGggdGhlIG5vcm1hbCBzdXNwZW5kIHBhdGguXG4gIC8vXG4gIC8vIEFmdGVyIHRoaXMgd2UnbGwgdXNlIGEgc2V0IG9mIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpc1xuICAvLyByZW5kZXIgcGFzcyB3aWxsIHJ1biB0byBjb21wbGV0aW9uIG9yIHJlc3RhcnQgb3IgXCJzdXNwZW5kXCIgdGhlIGNvbW1pdC5cbiAgLy8gVGhlIGFjdHVhbCBsb2dpYyBmb3IgdGhpcyBpcyBzcHJlYWQgb3V0IGluIGRpZmZlcmVudCBwbGFjZXMuXG4gIC8vXG4gIC8vIFRoaXMgZmlyc3QgcHJpbmNpcGxlIGlzIHRoYXQgaWYgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3aGVuIHdlIGNvbXBsZXRlXG4gIC8vIGEgcm9vdCwgdGhlbiB3ZSBzaG91bGQgYWxzbyByZXN0YXJ0IGlmIHdlIGdldCBhbiB1cGRhdGUgb3IgcGluZyB0aGF0XG4gIC8vIG1pZ2h0IHVuc3VzcGVuZCBpdCwgYW5kIHZpY2UgdmVyc2EuIFRoZSBvbmx5IHJlYXNvbiB0byBzdXNwZW5kIGlzXG4gIC8vIGJlY2F1c2UgeW91IHRoaW5rIHlvdSBtaWdodCB3YW50IHRvIHJlc3RhcnQgYmVmb3JlIGNvbW1pdHRpbmcuIEhvd2V2ZXIsXG4gIC8vIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byByZXN0YXJ0IG9ubHkgd2hpbGUgaW4gdGhlIHBlcmlvZCB3ZSdyZSBzdXNwZW5kZWQuXG4gIC8vXG4gIC8vIFJlc3RhcnRpbmcgdG9vIGFnZ3Jlc3NpdmVseSBpcyBhbHNvIG5vdCBnb29kIGJlY2F1c2UgaXQgc3RhcnZlcyBvdXQgYW55XG4gIC8vIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBTbyB3ZSB1c2UgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hlbi5cbiAgLy8gU3VzcGVuc2UgSGV1cmlzdGljc1xuICAvL1xuICAvLyBJZiBub3RoaW5nIHRocmV3IGEgUHJvbWlzZSBvciBhbGwgdGhlIHNhbWUgZmFsbGJhY2tzIGFyZSBhbHJlYWR5IHNob3dpbmcsXG4gIC8vIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LlxuICAvL1xuICAvLyBJZiB0aGlzIGlzIGFuIGluaXRpYWwgcmVuZGVyIG9mIGEgbmV3IHRyZWUgb2YgU3VzcGVuc2UgYm91bmRhcmllcyBhbmRcbiAgLy8gdGhvc2UgdHJpZ2dlciBhIGZhbGxiYWNrLCB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC4gV2Ugd2FudCB0byBlbnN1cmVcbiAgLy8gdGhhdCB3ZSBjYW4gc2hvdyB0aGUgaW5pdGlhbCBsb2FkaW5nIHN0YXRlIGFzIHF1aWNrbHkgYXMgcG9zc2libGUuXG4gIC8vXG4gIC8vIElmIHdlIGhpdCBhIFwiRGVsYXllZFwiIGNhc2UsIHN1Y2ggYXMgd2hlbiB3ZSdkIHN3aXRjaCBmcm9tIGNvbnRlbnQgYmFjayBpbnRvXG4gIC8vIGEgZmFsbGJhY2ssIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBzdXNwZW5kL3Jlc3RhcnQuIFRyYW5zaXRpb25zIGFwcGx5XG4gIC8vIHRvIHRoaXMgY2FzZS4gSWYgbm9uZSBpcyBkZWZpbmVkLCBKTkQgaXMgdXNlZCBpbnN0ZWFkLlxuICAvL1xuICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBhbmQgaXQgZ2V0cyBcInJldHJpZWRcIiwgYWxsb3dpbmcgdXMgdG8gc2hvd1xuICAvLyBhbm90aGVyIGxldmVsLCBidXQgdGhlcmUncyBzdGlsbCBhbiBpbm5lciBib3VuZGFyeSB0aGF0IHdvdWxkIHNob3cgYSBmYWxsYmFjayxcbiAgLy8gdGhlbiB3ZSBzdXNwZW5kL3Jlc3RhcnQgZm9yIDUwMG1zIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2Ugc2hvd2VkIGEgZmFsbGJhY2tcbiAgLy8gYW55d2hlcmUgaW4gdGhlIHRyZWUuIFRoaXMgZWZmZWN0aXZlbHkgdGhyb3R0bGVzIHByb2dyZXNzaXZlIGxvYWRpbmcgaW50byBhXG4gIC8vIGNvbnNpc3RlbnQgdHJhaW4gb2YgY29tbWl0cy4gVGhpcyBhbHNvIGdpdmVzIHVzIGFuIG9wcG9ydHVuaXR5IHRvIHJlc3RhcnQgdG9cbiAgLy8gZ2V0IHRvIHRoZSBjb21wbGV0ZWQgc3RhdGUgc2xpZ2h0bHkgZWFybGllci5cbiAgLy9cbiAgLy8gSWYgdGhlcmUncyBhbWJpZ3VpdHkgZHVlIHRvIGJhdGNoaW5nIGl0J3MgcmVzb2x2ZWQgaW4gcHJlZmVyZW5jZSBvZjpcbiAgLy8gMSkgXCJkZWxheWVkXCIsIDIpIFwiaW5pdGlhbCByZW5kZXJcIiwgMykgXCJyZXRyeVwiLlxuICAvL1xuICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGEgXCJidXN5XCIgc3RhdGUgZG9lc24ndCBnZXQgZm9yY2UgY29tbWl0dGVkLiBXZSB3YW50IHRvXG4gIC8vIGVuc3VyZSB0aGF0IG5ldyBpbml0aWFsIGxvYWRpbmcgc3RhdGVzIGNhbiBjb21taXQgYXMgc29vbiBhcyBwb3NzaWJsZS5cblxuXG4gIHN1c3BlbnNlQm91bmRhcnkuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTsgLy8gVE9ETzogSSB0aGluayB3ZSBjYW4gcmVtb3ZlIHRoaXMsIHNpbmNlIHdlIG5vdyB1c2UgYERpZENhcHR1cmVgIGluXG4gIC8vIHRoZSBiZWdpbiBwaGFzZSB0byBwcmV2ZW50IGFuIGVhcmx5IGJhaWxvdXQuXG5cbiAgc3VzcGVuc2VCb3VuZGFyeS5sYW5lcyA9IHJvb3RSZW5kZXJMYW5lcztcbiAgcmV0dXJuIHN1c3BlbnNlQm91bmRhcnk7XG59XG5cbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKHJvb3QsIHJldHVybkZpYmVyLCBzb3VyY2VGaWJlciwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykge1xuICAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuXG4gIHNvdXJjZUZpYmVyLmZsYWdzIHw9IEluY29tcGxldGU7XG5cbiAge1xuICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIHdvcmsgc3RpbGwsIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHVwZGF0ZXJzXG4gICAgICByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVGhpcyBpcyBhIHdha2VhYmxlLiBUaGUgY29tcG9uZW50IHN1c3BlbmRlZC5cbiAgICAgIHZhciB3YWtlYWJsZSA9IHZhbHVlO1xuICAgICAgcmVzZXRTdXNwZW5kZWRDb21wb25lbnQoc291cmNlRmliZXIpO1xuXG4gICAgICB7XG4gICAgICAgIGlmIChnZXRJc0h5ZHJhdGluZygpICYmIHNvdXJjZUZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICAgIG1hcmtEaWRUaHJvd1doaWxlSHlkcmF0aW5nREVWKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuXG4gICAgICB2YXIgc3VzcGVuc2VCb3VuZGFyeSA9IGdldFN1c3BlbnNlSGFuZGxlcigpO1xuXG4gICAgICBpZiAoc3VzcGVuc2VCb3VuZGFyeSAhPT0gbnVsbCkge1xuICAgICAgICBzd2l0Y2ggKHN1c3BlbnNlQm91bmRhcnkudGFnKSB7XG4gICAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyBzdXNwZW5zZSBib3VuZGFyeSBpcyBub3QgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2ssIG1hcmtcbiAgICAgICAgICAgICAgLy8gdGhlIGluLXByb2dyZXNzIHJlbmRlciBhcyBzdXNwZW5kZWQuIFdlIHRyeSB0byBwZXJmb3JtIHRoaXMgbG9naWNcbiAgICAgICAgICAgICAgLy8gYXMgc29vbiBhcyBzb29uIGFzIHBvc3NpYmxlIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzbyB0aGUgd29ya1xuICAgICAgICAgICAgICAvLyBsb29wIGNhbiBrbm93IHRoaW5ncyBsaWtlIHdoZXRoZXIgaXQncyBPSyB0byBzd2l0Y2ggdG8gb3RoZXIgdGFza3MsXG4gICAgICAgICAgICAgIC8vIG9yIHdoZXRoZXIgaXQgY2FuIHdhaXQgZm9yIGRhdGEgdG8gcmVzb2x2ZSBiZWZvcmUgY29udGludWluZy5cbiAgICAgICAgICAgICAgLy8gVE9ETzogTW9zdCBvZiB0aGVzZSBjaGVja3MgYXJlIGFscmVhZHkgcGVyZm9ybWVkIHdoZW4gZW50ZXJpbmcgYVxuICAgICAgICAgICAgICAvLyBTdXNwZW5zZSBib3VuZGFyeS4gV2Ugc2hvdWxkIHRyYWNrIHRoZSBpbmZvcm1hdGlvbiBvbiB0aGUgc3RhY2sgc29cbiAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0byByZWNvbXB1dGUgaXQgb24gZGVtYW5kLiBUaGlzIHdvdWxkIGFsc28gYWxsb3cgdXNcbiAgICAgICAgICAgICAgLy8gdG8gdW5pZnkgd2l0aCBgdXNlYCB3aGljaCBuZWVkcyB0byBwZXJmb3JtIHRoaXMgbG9naWMgZXZlbiBzb29uZXIsXG4gICAgICAgICAgICAgIC8vIGJlZm9yZSBgdGhyb3dFeGNlcHRpb25gIGlzIGNhbGxlZC5cbiAgICAgICAgICAgICAgaWYgKHNvdXJjZUZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICAgICAgICAgIGlmIChnZXRTaGVsbEJvdW5kYXJ5KCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1c3BlbmRlZCBpbiB0aGUgXCJzaGVsbFwiIG9mIHRoZSBhcHAuIFRoaXMgaXMgYW4gdW5kZXNpcmFibGVcbiAgICAgICAgICAgICAgICAgIC8vIGxvYWRpbmcgc3RhdGUuIFdlIHNob3VsZCBhdm9pZCBjb21taXR0aW5nIHRoaXMgdHJlZS5cbiAgICAgICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ugc3VzcGVuZGVkIGRlZXBlciB0aGFuIHRoZSBzaGVsbCwgd2UgZG9uJ3QgbmVlZCB0byBkZWxheVxuICAgICAgICAgICAgICAgICAgLy8gdGhlIGNvbW1taXQuIEhvd2V2ZXIsIHdlIHN0aWxsIGNhbGwgcmVuZGVyRGlkU3VzcGVuZCBpZiB0aGlzIGlzXG4gICAgICAgICAgICAgICAgICAvLyBhIG5ldyBib3VuZGFyeSwgdG8gdGVsbCB0aGUgd29yayBsb29wIHRoYXQgYSBuZXcgZmFsbGJhY2sgaGFzXG4gICAgICAgICAgICAgICAgICAvLyBhcHBlYXJlZCBkdXJpbmcgdGhpcyByZW5kZXIuXG4gICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGVvcmV0aWNhbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRlbGV0ZSB0aGlzIGJyYW5jaC5cbiAgICAgICAgICAgICAgICAgIC8vIEl0J3MgY3VycmVudGx5IHVzZWQgZm9yIHR3byB0aGluZ3M6IDEpIHRvIHRocm90dGxlIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gYXBwZWFyYW5jZSBvZiBzdWNjZXNzaXZlIGxvYWRpbmcgc3RhdGVzLCBhbmQgMikgaW5cbiAgICAgICAgICAgICAgICAgIC8vIFN1c3BlbnNlTGlzdCwgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNoaWxkcmVuIGluY2x1ZGUgYW55XG4gICAgICAgICAgICAgICAgICAvLyBwZW5kaW5nIGZhbGxiYWNrcy4gRm9yIDEsIHdlIHNob3VsZCBhcHBseSB0aHJvdHRsaW5nIHRvIGFsbFxuICAgICAgICAgICAgICAgICAgLy8gcmV0cmllcywgbm90IGp1c3Qgb25lcyB0aGF0IHJlbmRlciBhbiBhZGRpdGlvbmFsIGZhbGxiYWNrLiBGb3JcbiAgICAgICAgICAgICAgICAgIC8vIDIsIHdlIHNob3VsZCBjaGVjayBzdWJ0cmVlRmxhZ3MgaW5zdGVhZC4gVGhlbiB3ZSBjYW4gZGVsZXRlXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzIGJyYW5jaC5cbiAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gc3VzcGVuc2VCb3VuZGFyeS5hbHRlcm5hdGU7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdXNwZW5zZUJvdW5kYXJ5LmZsYWdzICY9IH5Gb3JjZUNsaWVudFJlbmRlcjtcbiAgICAgICAgICAgICAgbWFya1N1c3BlbnNlQm91bmRhcnlTaG91bGRDYXB0dXJlKHN1c3BlbnNlQm91bmRhcnksIHJldHVybkZpYmVyLCBzb3VyY2VGaWJlciwgcm9vdCwgcm9vdFJlbmRlckxhbmVzKTsgLy8gUmV0cnkgbGlzdGVuZXJcbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgLy8gSWYgdGhlIGZhbGxiYWNrIGRvZXMgY29tbWl0LCB3ZSBuZWVkIHRvIGF0dGFjaCBhIGRpZmZlcmVudCB0eXBlIG9mXG4gICAgICAgICAgICAgIC8vIGxpc3RlbmVyLiBUaGlzIG9uZSBzY2hlZHVsZXMgYW4gdXBkYXRlIG9uIHRoZSBTdXNwZW5zZSBib3VuZGFyeSB0b1xuICAgICAgICAgICAgICAvLyB0dXJuIHRoZSBmYWxsYmFjayBzdGF0ZSBvZmYuXG4gICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgIC8vIFN0YXNoIHRoZSB3YWtlYWJsZSBvbiB0aGUgYm91bmRhcnkgZmliZXIgc28gd2UgY2FuIGFjY2VzcyBpdCBpbiB0aGVcbiAgICAgICAgICAgICAgLy8gY29tbWl0IHBoYXNlLlxuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAvLyBXaGVuIHRoZSB3YWtlYWJsZSByZXNvbHZlcywgd2UnbGwgYXR0ZW1wdCB0byByZW5kZXIgdGhlIGJvdW5kYXJ5XG4gICAgICAgICAgICAgIC8vIGFnYWluIChcInJldHJ5XCIpLlxuICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgU3VzcGVuc2V5IHJlc291cmNlLiBXZSBkbyBub3QgYXR0YWNoIHJldHJ5XG4gICAgICAgICAgICAgIC8vIGxpc3RlbmVycyB0byB0aGVzZSwgYmVjYXVzZSB3ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZW0gZm9yXG4gICAgICAgICAgICAgIC8vIHJlbmRlcmluZy4gT25seSBmb3IgY29tbWl0dGluZy4gSW5zdGVhZCwgaWYgYSBmYWxsYmFjayBjb21taXRzXG4gICAgICAgICAgICAgIC8vIGFuZCB0aGUgb25seSB0aGluZyB0aGF0IHN1c3BlbmRlZCB3YXMgYSBTdXNwZW5zZXkgcmVzb3VyY2UsIHdlXG4gICAgICAgICAgICAgIC8vIHJldHJ5IGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAvLyBUT0RPOiBSZWZhY3RvciB0aHJvd0V4Y2VwdGlvbiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcyB0eXBlXG4gICAgICAgICAgICAgIC8vIGNoZWNrLiBUaGUgY2FsbGVyIGFscmVhZHkga25vd3Mgd2hhdCB0aGUgY2F1c2Ugd2FzLlxuXG4gICAgICAgICAgICAgIHZhciBpc1N1c3BlbnNleVJlc291cmNlID0gd2FrZWFibGUgPT09IG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZTtcblxuICAgICAgICAgICAgICBpZiAoaXNTdXNwZW5zZXlSZXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHN1c3BlbnNlQm91bmRhcnkuZmxhZ3MgfD0gU2NoZWR1bGVSZXRyeTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgcmV0cnlRdWV1ZSA9IHN1c3BlbnNlQm91bmRhcnkudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgICBpZiAocmV0cnlRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeS51cGRhdGVRdWV1ZSA9IG5ldyBTZXQoW3dha2VhYmxlXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHJ5UXVldWUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgICAgICAgICB9IC8vIFdlIG9ubHkgYXR0YWNoIHBpbmcgbGlzdGVuZXJzIGluIGNvbmN1cnJlbnQgbW9kZS4gTGVnYWN5XG4gICAgICAgICAgICAgICAgLy8gU3VzcGVuc2UgYWx3YXlzIGNvbW1pdHMgZmFsbGJhY2tzIHN5bmNocm9ub3VzbHksIHNvIHRoZXJlIGFyZVxuICAgICAgICAgICAgICAgIC8vIG5vIHBpbmdzLlxuXG5cbiAgICAgICAgICAgICAgICBpZiAoc3VzcGVuc2VCb3VuZGFyeS5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgcm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKHN1c3BlbnNlQm91bmRhcnkubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeS5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9pc1N1c3BlbnNleVJlc291cmNlID0gd2FrZWFibGUgPT09IG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZTtcblxuICAgICAgICAgICAgICAgIGlmIChfaXNTdXNwZW5zZXlSZXNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeS5mbGFncyB8PSBTY2hlZHVsZVJldHJ5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgb2Zmc2NyZWVuUXVldWUgPSBzdXNwZW5zZUJvdW5kYXJ5LnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICAgICAgICBpZiAob2Zmc2NyZWVuUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld09mZnNjcmVlblF1ZXVlID0ge1xuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckluc3RhbmNlczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICByZXRyeVF1ZXVlOiBuZXcgU2V0KFt3YWtlYWJsZV0pXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHN1c3BlbnNlQm91bmRhcnkudXBkYXRlUXVldWUgPSBuZXdPZmZzY3JlZW5RdWV1ZTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmV0cnlRdWV1ZSA9IG9mZnNjcmVlblF1ZXVlLnJldHJ5UXVldWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9yZXRyeVF1ZXVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgb2Zmc2NyZWVuUXVldWUucmV0cnlRdWV1ZSA9IG5ldyBTZXQoW3dha2VhYmxlXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgX3JldHJ5UXVldWUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIFN1c3BlbnNlIGhhbmRsZXIgdGFnIChcIiArIHN1c3BlbnNlQm91bmRhcnkudGFnICsgXCIpLiBUaGlzIFwiICsgJ2lzIGEgYnVnIGluIFJlYWN0LicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTm8gYm91bmRhcnkgd2FzIGZvdW5kLiBVbmxlc3MgdGhpcyBpcyBhIHN5bmMgdXBkYXRlLCB0aGlzIGlzIE9LLlxuICAgICAgICAvLyBXZSBjYW4gc3VzcGVuZCBhbmQgd2FpdCBmb3IgbW9yZSBkYXRhIHRvIGFycml2ZS5cbiAgICAgICAgaWYgKHJvb3QudGFnID09PSBDb25jdXJyZW50Um9vdCkge1xuICAgICAgICAgIC8vIEluIGEgY29uY3VycmVudCByb290LCBzdXNwZW5kaW5nIHdpdGhvdXQgYSBTdXNwZW5zZSBib3VuZGFyeSBpc1xuICAgICAgICAgIC8vIGFsbG93ZWQuIEl0IHdpbGwgc3VzcGVuZCBpbmRlZmluaXRlbHkgd2l0aG91dCBjb21taXR0aW5nLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGhhdmUgZGlmZmVyZW50IGJlaGF2aW9yIGZvciBkaXNjcmV0ZSB1cGRhdGVzPyBXaGF0XG4gICAgICAgICAgLy8gYWJvdXQgZmx1c2hTeW5jPyBNYXliZSBpdCBzaG91bGQgcHV0IHRoZSB0cmVlIGludG8gYW4gaW5lcnQgc3RhdGUsXG4gICAgICAgICAgLy8gYW5kIHBvdGVudGlhbGx5IGxvZyBhIHdhcm5pbmcuIFJldmlzaXQgdGhpcyBmb3IgYSBmdXR1cmUgcmVsZWFzZS5cbiAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJbiBhIGxlZ2FjeSByb290LCBzdXNwZW5kaW5nIHdpdGhvdXQgYSBib3VuZGFyeSBpcyBhbHdheXMgYW4gZXJyb3IuXG4gICAgICAgICAgdmFyIHVuY2F1Z2h0U3VzcGVuc2VFcnJvciA9IG5ldyBFcnJvcignQSBjb21wb25lbnQgc3VzcGVuZGVkIHdoaWxlIHJlc3BvbmRpbmcgdG8gc3luY2hyb25vdXMgaW5wdXQuIFRoaXMgJyArICd3aWxsIGNhdXNlIHRoZSBVSSB0byBiZSByZXBsYWNlZCB3aXRoIGEgbG9hZGluZyBpbmRpY2F0b3IuIFRvICcgKyAnZml4LCB1cGRhdGVzIHRoYXQgc3VzcGVuZCBzaG91bGQgYmUgd3JhcHBlZCAnICsgJ3dpdGggc3RhcnRUcmFuc2l0aW9uLicpO1xuICAgICAgICAgIHZhbHVlID0gdW5jYXVnaHRTdXNwZW5zZUVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFRoaXMgaXMgYSByZWd1bGFyIGVycm9yLCBub3QgYSBTdXNwZW5zZSB3YWtlYWJsZS5cblxuXG4gIGlmIChnZXRJc0h5ZHJhdGluZygpICYmIHNvdXJjZUZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgIG1hcmtEaWRUaHJvd1doaWxlSHlkcmF0aW5nREVWKCk7XG5cbiAgICB2YXIgX3N1c3BlbnNlQm91bmRhcnkgPSBnZXRTdXNwZW5zZUhhbmRsZXIoKTsgLy8gSWYgdGhlIGVycm9yIHdhcyB0aHJvd24gZHVyaW5nIGh5ZHJhdGlvbiwgd2UgbWF5IGJlIGFibGUgdG8gcmVjb3ZlciBieVxuICAgIC8vIGRpc2NhcmRpbmcgdGhlIGRlaHlkcmF0ZWQgY29udGVudCBhbmQgc3dpdGNoaW5nIHRvIGEgY2xpZW50IHJlbmRlci5cbiAgICAvLyBJbnN0ZWFkIG9mIHN1cmZhY2luZyB0aGUgZXJyb3IsIGZpbmQgdGhlIG5lYXJlc3QgU3VzcGVuc2UgYm91bmRhcnlcbiAgICAvLyBhbmQgcmVuZGVyIGl0IGFnYWluIHdpdGhvdXQgaHlkcmF0aW9uLlxuXG5cbiAgICBpZiAoX3N1c3BlbnNlQm91bmRhcnkgIT09IG51bGwpIHtcbiAgICAgIGlmICgoX3N1c3BlbnNlQm91bmRhcnkuZmxhZ3MgJiBTaG91bGRDYXB0dXJlKSA9PT0gTm9GbGFncyQxKSB7XG4gICAgICAgIC8vIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSBzaG91bGQgdHJ5IHJlbmRlcmluZyB0aGUgbm9ybWFsXG4gICAgICAgIC8vIGNoaWxkcmVuIGFnYWluLCBub3QgdGhlIGZhbGxiYWNrLlxuICAgICAgICBfc3VzcGVuc2VCb3VuZGFyeS5mbGFncyB8PSBGb3JjZUNsaWVudFJlbmRlcjtcbiAgICAgIH1cblxuICAgICAgbWFya1N1c3BlbnNlQm91bmRhcnlTaG91bGRDYXB0dXJlKF9zdXNwZW5zZUJvdW5kYXJ5LCByZXR1cm5GaWJlciwgc291cmNlRmliZXIsIHJvb3QsIHJvb3RSZW5kZXJMYW5lcyk7IC8vIEV2ZW4gdGhvdWdoIHRoZSB1c2VyIG1heSBub3QgYmUgYWZmZWN0ZWQgYnkgdGhpcyBlcnJvciwgd2Ugc2hvdWxkXG4gICAgICAvLyBzdGlsbCBsb2cgaXQgc28gaXQgY2FuIGJlIGZpeGVkLlxuXG4gICAgICBxdWV1ZUh5ZHJhdGlvbkVycm9yKGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHZhbHVlLCBzb3VyY2VGaWJlcikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZUZpYmVyKTtcbiAgcmVuZGVyRGlkRXJyb3IodmFsdWUpOyAvLyBXZSBkaWRuJ3QgZmluZCBhIGJvdW5kYXJ5IHRoYXQgY291bGQgaGFuZGxlIHRoaXMgdHlwZSBvZiBleGNlcHRpb24uIFN0YXJ0XG4gIC8vIG92ZXIgYW5kIHRyYXZlcnNlIHBhcmVudCBwYXRoIGFnYWluLCB0aGlzIHRpbWUgdHJlYXRpbmcgdGhlIGV4Y2VwdGlvblxuICAvLyBhcyBhbiBlcnJvci5cblxuICB2YXIgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcblxuICBkbyB7XG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2Vycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG4gICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgbGFuZSk7XG4gICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX2Vycm9ySW5mbywgbGFuZSk7XG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCB1cGRhdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAvLyBDYXB0dXJlIGFuZCByZXRyeVxuICAgICAgICB2YXIgZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgIHZhciBjdG9yID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyQxICYmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuXG4gICAgICAgICAgdmFyIF9sYW5lID0gcGlja0FyYml0cmFyeUxhbmUocm9vdFJlbmRlckxhbmVzKTtcblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgX2xhbmUpOyAvLyBTY2hlZHVsZSB0aGUgZXJyb3IgYm91bmRhcnkgdG8gcmUtcmVuZGVyIHVzaW5nIHVwZGF0ZWQgc3RhdGVcblxuICAgICAgICAgIHZhciBfdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgZXJyb3JJbmZvLCBfbGFuZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gd2UgYmFpbCBvdXQgd2hlbiB3ZSBnZXQgYSBudWxsXG5cblxuICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICB9IHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7IC8vIEEgc3BlY2lhbCBleGNlcHRpb24gdGhhdCdzIHVzZWQgdG8gdW53aW5kIHRoZSBzdGFjayB3aGVuIGFuIHVwZGF0ZSBmbG93c1xuLy8gaW50byBhIGRlaHlkcmF0ZWQgYm91bmRhcnkuXG5cbnZhciBTZWxlY3RpdmVIeWRyYXRpb25FeGNlcHRpb24gPSBuZXcgRXJyb3IoXCJUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IuIEl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIFJlYWN0J3MgXCIgKyBcInNlbGVjdGl2ZSBoeWRyYXRpb24gZmVhdHVyZS4gSWYgdGhpcyBsZWFrcyBpbnRvIHVzZXJzcGFjZSwgaXQncyBhIGJ1ZyBpbiBcIiArICdSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG52YXIgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dEJhZENsYXNzO1xudmFyIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzO1xudmFyIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHM7XG52YXIgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXI7XG52YXIgZGlkV2FybkFib3V0VGFpbE9wdGlvbnM7XG52YXIgZGlkV2FybkFib3V0RGVmYXVsdFByb3BzT25GdW5jdGlvbkNvbXBvbmVudDtcblxue1xuICBkaWRXYXJuQWJvdXRCYWRDbGFzcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcyA9IHt9O1xuICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyID0ge307XG4gIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG4gIGRpZFdhcm5BYm91dERlZmF1bHRQcm9wc09uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbn1cblxuZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgZnJlc2ggbmV3IGNvbXBvbmVudCB0aGF0IGhhc24ndCBiZWVuIHJlbmRlcmVkIHlldCwgd2VcbiAgICAvLyB3b24ndCB1cGRhdGUgaXRzIGNoaWxkIHNldCBieSBhcHBseWluZyBtaW5pbWFsIHNpZGUtZWZmZWN0cy4gSW5zdGVhZCxcbiAgICAvLyB3ZSB3aWxsIGFkZCB0aGVtIGFsbCB0byB0aGUgY2hpbGQgYmVmb3JlIGl0IGdldHMgcmVuZGVyZWQuIFRoYXQgbWVhbnNcbiAgICAvLyB3ZSBjYW4gb3B0aW1pemUgdGhpcyByZWNvbmNpbGlhdGlvbiBwYXNzIGJ5IG5vdCB0cmFja2luZyBzaWRlLWVmZmVjdHMuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGUgY3VycmVudCBjaGlsZCBpcyB0aGUgc2FtZSBhcyB0aGUgd29yayBpbiBwcm9ncmVzcywgaXQgbWVhbnMgdGhhdFxuICAgIC8vIHdlIGhhdmVuJ3QgeWV0IHN0YXJ0ZWQgYW55IHdvcmsgb24gdGhlc2UgY2hpbGRyZW4uIFRoZXJlZm9yZSwgd2UgdXNlXG4gICAgLy8gdGhlIGNsb25lIGFsZ29yaXRobSB0byBjcmVhdGUgYSBjb3B5IG9mIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbi5cbiAgICAvLyBJZiB3ZSBoYWQgYW55IHByb2dyZXNzZWQgd29yayBhbHJlYWR5LCB0aGF0IGlzIGludmFsaWQgYXQgdGhpcyBwb2ludCBzb1xuICAgIC8vIGxldCdzIHRocm93IGl0IG91dC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yayBvZiByZWNvbmNpbGVDaGlsZHJlbi4gSXQncyB1c2VkIGluIGNhc2VzIHdoZXJlIHdlXG4gIC8vIHdhbnQgdG8gcmVjb25jaWxlIHdpdGhvdXQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc2V0LiBUaGlzIGhhcyB0aGVcbiAgLy8gZWZmZWN0IG9mIGFsbCBjdXJyZW50IGNoaWxkcmVuIGJlaW5nIHVubW91bnRlZDsgZXZlbiBpZiB0aGUgdHlwZSBhbmQga2V5XG4gIC8vIGFyZSB0aGUgc2FtZSwgdGhlIG9sZCBjaGlsZCBpcyB1bm1vdW50ZWQgYW5kIGEgbmV3IGNoaWxkIGlzIGNyZWF0ZWQuXG4gIC8vXG4gIC8vIFRvIGRvIHRoaXMsIHdlJ3JlIGdvaW5nIHRvIGdvIHRocm91Z2ggdGhlIHJlY29uY2lsZSBhbGdvcml0aG0gdHdpY2UuIEluXG4gIC8vIHRoZSBmaXJzdCBwYXNzLCB3ZSBzY2hlZHVsZSBhIGRlbGV0aW9uIGZvciBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4gYnlcbiAgLy8gcGFzc2luZyBudWxsLlxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBudWxsLCByZW5kZXJMYW5lcyk7IC8vIEluIHRoZSBzZWNvbmQgcGFzcywgd2UgbW91bnQgdGhlIG5ldyBjaGlsZHJlbi4gVGhlIHRyaWNrIGhlcmUgaXMgdGhhdCB3ZVxuICAvLyBwYXNzIG51bGwgaW4gcGxhY2Ugb2Ygd2hlcmUgd2UgdXN1YWxseSBwYXNzIHRoZSBjdXJyZW50IGNoaWxkIHNldC4gVGhpcyBoYXNcbiAgLy8gdGhlIGVmZmVjdCBvZiByZW1vdW50aW5nIGFsbCBjaGlsZHJlbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlaXJcbiAgLy8gaWRlbnRpdGllcyBtYXRjaC5cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRm9yd2FyZFJlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBmaXJzdCByZW5kZXIgc3VzcGVuZHMuXG4gIC8vIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZpbmUgb3IgY2FuIGNhdXNlIGlzc3Vlcy5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcmVuZGVyID0gQ29tcG9uZW50LnJlbmRlcjtcbiAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjsgLy8gVGhlIHJlc3QgaXMgYSBmb3JrIG9mIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50XG5cbiAgdmFyIG5leHRDaGlsZHJlbjtcbiAgdmFyIGhhc0lkO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJMYW5lcyk7XG4gICAgaGFzSWQgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIHtcbiAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgaWYgKGdldElzSHlkcmF0aW5nKCkgJiYgaGFzSWQpIHtcbiAgICBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdmFyIHR5cGUgPSBDb21wb25lbnQudHlwZTtcblxuICAgIGlmIChpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpICYmIENvbXBvbmVudC5jb21wYXJlID09PSBudWxsICYmIC8vIFNpbXBsZU1lbW9Db21wb25lbnQgY29kZXBhdGggZG9lc24ndCByZXNvbHZlIG91dGVyIHByb3BzIGVpdGhlci5cbiAgICBDb21wb25lbnQuZGVmYXVsdFByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gICAgICB7XG4gICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbiAgICAgIH0gLy8gSWYgdGhpcyBpcyBhIHBsYWluIGZ1bmN0aW9uIGNvbXBvbmVudCB3aXRob3V0IGRlZmF1bHQgcHJvcHMsXG4gICAgICAvLyBhbmQgd2l0aCBvbmx5IHRoZSBkZWZhdWx0IHNoYWxsb3cgY29tcGFyaXNvbiwgd2UgdXBncmFkZSBpdFxuICAgICAgLy8gdG8gYSBTaW1wbGVNZW1vQ29tcG9uZW50IHRvIGFsbG93IGZhc3QgcGF0aCB1cGRhdGVzLlxuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IFNpbXBsZU1lbW9Db21wb25lbnQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZWRUeXBlO1xuXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgdHlwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZXNvbHZlZFR5cGUsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgLy8gSW5uZXIgbWVtbyBjb21wb25lbnQgcHJvcHMgYXJlbid0IGN1cnJlbnRseSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudC5cbiAgICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoQ29tcG9uZW50LmRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHx8ICdVbmtub3duJztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dERlZmF1bHRQcm9wc09uRnVuY3Rpb25Db21wb25lbnRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICBlcnJvcignJXM6IFN1cHBvcnQgZm9yIGRlZmF1bHRQcm9wcyB3aWxsIGJlIHJlbW92ZWQgZnJvbSBtZW1vIGNvbXBvbmVudHMgJyArICdpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBVc2UgSmF2YVNjcmlwdCBkZWZhdWx0IHBhcmFtZXRlcnMgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lKTtcblxuICAgICAgICAgIGRpZFdhcm5BYm91dERlZmF1bHRQcm9wc09uRnVuY3Rpb25Db21wb25lbnRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKENvbXBvbmVudC50eXBlLCBudWxsLCBuZXh0UHJvcHMsIG51bGwsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCByZW5kZXJMYW5lcyk7XG4gICAgY2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgIGNoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY2hpbGQ7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG5cbiAge1xuICAgIHZhciBfdHlwZSA9IENvbXBvbmVudC50eXBlO1xuICAgIHZhciBfaW5uZXJQcm9wVHlwZXMgPSBfdHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAoX2lubmVyUHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgIGNoZWNrUHJvcFR5cGVzKF9pbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoX3R5cGUpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudENoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gVGhpcyBpcyBhbHdheXMgZXhhY3RseSBvbmUgY2hpbGRcblxuICB2YXIgaGFzU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0ID0gY2hlY2tTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQoY3VycmVudCwgcmVuZGVyTGFuZXMpO1xuXG4gIGlmICghaGFzU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KSB7XG4gICAgLy8gVGhpcyB3aWxsIGJlIHRoZSBwcm9wcyB3aXRoIHJlc29sdmVkIGRlZmF1bHRQcm9wcyxcbiAgICAvLyB1bmxpa2UgY3VycmVudC5tZW1vaXplZFByb3BzIHdoaWNoIHdpbGwgYmUgdGhlIHVucmVzb2x2ZWQgb25lcy5cbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudENoaWxkLm1lbW9pemVkUHJvcHM7IC8vIERlZmF1bHQgdG8gc2hhbGxvdyBjb21wYXJpc29uXG5cbiAgICB2YXIgY29tcGFyZSA9IENvbXBvbmVudC5jb21wYXJlO1xuICAgIGNvbXBhcmUgPSBjb21wYXJlICE9PSBudWxsID8gY29tcGFyZSA6IHNoYWxsb3dFcXVhbDtcblxuICAgIGlmIChjb21wYXJlKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJiBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmKSB7XG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIG5leHRQcm9wcyk7XG4gIG5ld0NoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gIHJldHVybiBuZXdDaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGlubmVyIHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIG91dGVyTWVtb1R5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcblxuICAgICAgaWYgKG91dGVyTWVtb1R5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAvLyBXZSB3YXJuIHdoZW4geW91IGRlZmluZSBwcm9wVHlwZXMgb24gbGF6eSgpXG4gICAgICAgIC8vIHNvIGxldCdzIGp1c3Qgc2tpcCBvdmVyIGl0IHRvIGZpbmQgbWVtbygpIG91dGVyIHdyYXBwZXIuXG4gICAgICAgIC8vIElubmVyIHByb3BzIGZvciBtZW1vIGFyZSB2YWxpZGF0ZWQgbGF0ZXIuXG4gICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gb3V0ZXJNZW1vVHlwZTtcbiAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvdXRlck1lbW9UeXBlID0gaW5pdChwYXlsb2FkKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBudWxsO1xuICAgICAgICB9IC8vIElubmVyIHByb3BUeXBlcyB3aWxsIGJlIHZhbGlkYXRlZCBpbiB0aGUgZnVuY3Rpb24gY29tcG9uZW50IHBhdGguXG5cblxuICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBvdXRlck1lbW9UeXBlICYmIG91dGVyTWVtb1R5cGUucHJvcFR5cGVzO1xuXG4gICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIChTaW1wbGVNZW1vQ29tcG9uZW50IGhhcyBubyBkZWZhdWx0UHJvcHMpXG4gICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUob3V0ZXJNZW1vVHlwZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuXG4gICAgaWYgKHNoYWxsb3dFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykgJiYgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZiAmJiAoIC8vIFByZXZlbnQgYmFpbG91dCBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBkdWUgdG8gaG90IHJlbG9hZC5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID09PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlOyAvLyBUaGUgcHJvcHMgYXJlIHNoYWxsb3dseSBlcXVhbC4gUmV1c2UgdGhlIHByZXZpb3VzIHByb3BzIG9iamVjdCwgbGlrZSB3ZVxuICAgICAgLy8gd291bGQgZHVyaW5nIGEgbm9ybWFsIGZpYmVyIGJhaWxvdXQuXG4gICAgICAvL1xuICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBzdHJvbmcgZ3VhcmFudGVlcyB0aGF0IHRoZSBwcm9wcyBvYmplY3QgaXMgcmVmZXJlbnRpYWxseVxuICAgICAgLy8gZXF1YWwgZHVyaW5nIHVwZGF0ZXMgd2hlcmUgd2UgY2FuJ3QgYmFpbCBvdXQgYW55d2F5IOKAlCBsaWtlIGlmIHRoZSBwcm9wc1xuICAgICAgLy8gYXJlIHNoYWxsb3dseSBlcXVhbCwgYnV0IHRoZXJlJ3MgYSBsb2NhbCBzdGF0ZSBvciBjb250ZXh0IHVwZGF0ZSBpbiB0aGVcbiAgICAgIC8vIHNhbWUgYmF0Y2guXG4gICAgICAvL1xuICAgICAgLy8gSG93ZXZlciwgYXMgYSBwcmluY2lwbGUsIHdlIHNob3VsZCBhaW0gdG8gbWFrZSB0aGUgYmVoYXZpb3IgY29uc2lzdGVudFxuICAgICAgLy8gYWNyb3NzIGRpZmZlcmVudCB3YXlzIG9mIG1lbW9pemluZyBhIGNvbXBvbmVudC4gRm9yIGV4YW1wbGUsIFJlYWN0Lm1lbW9cbiAgICAgIC8vIGhhcyBhIGRpZmZlcmVudCBpbnRlcm5hbCBGaWJlciBsYXlvdXQgaWYgeW91IHBhc3MgYSBub3JtYWwgZnVuY3Rpb25cbiAgICAgIC8vIGNvbXBvbmVudCAoU2ltcGxlTWVtb0NvbXBvbmVudCkgdmVyc3VzIGlmIHlvdSBwYXNzIGEgZGlmZmVyZW50IHR5cGVcbiAgICAgIC8vIGxpa2UgZm9yd2FyZFJlZiAoTWVtb0NvbXBvbmVudCkuIEJ1dCB0aGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC5cbiAgICAgIC8vIFdyYXBwaW5nIGEgY29tcG9uZW50IGluIGZvcndhcmRSZWYgKG9yIFJlYWN0LmxhenksIGV0Yykgc2hvdWxkbid0XG4gICAgICAvLyBhZmZlY3Qgd2hldGhlciB0aGUgcHJvcHMgb2JqZWN0IGlzIHJldXNlZCBkdXJpbmcgYSBiYWlsb3V0LlxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBuZXh0UHJvcHMgPSBwcmV2UHJvcHM7XG5cbiAgICAgIGlmICghY2hlY2tTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQoY3VycmVudCwgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIC8vIFRoZSBwZW5kaW5nIGxhbmVzIHdlcmUgY2xlYXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGJlZ2luV29yay4gV2UncmVcbiAgICAgICAgLy8gYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB0aGVyZSBtaWdodCBiZSBvdGhlciBsYW5lcyB0aGF0IHdlcmVuJ3RcbiAgICAgICAgLy8gaW5jbHVkZWQgaW4gdGhlIGN1cnJlbnQgcmVuZGVyLiBVc3VhbGx5LCB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlXG4gICAgICAgIC8vIHJlbWFpbmluZyB1cGRhdGVzIGlzIGFjY3VtdWxhdGVkIGR1cmluZyB0aGUgZXZhbHVhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gY29tcG9uZW50IChpLmUuIHdoZW4gcHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlKS4gQnV0IHNpbmNlIHNpbmNlXG4gICAgICAgIC8vIHdlJ3JlIGJhaWxpbmcgb3V0IGVhcmx5ICp3aXRob3V0KiBldmFsdWF0aW5nIHRoZSBjb21wb25lbnQsIHdlIG5lZWRcbiAgICAgICAgLy8gdG8gYWNjb3VudCBmb3IgaXQgaGVyZSwgdG9vLiBSZXNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgZmliZXIuXG4gICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBhcHBsaWVzIHRvIFNpbXBsZU1lbW9Db21wb25lbnQsIG5vdCBNZW1vQ29tcG9uZW50LFxuICAgICAgICAvLyBiZWNhdXNlIGEgTWVtb0NvbXBvbmVudCBmaWJlciBkb2VzIG5vdCBoYXZlIGhvb2tzIG9yIGFuIHVwZGF0ZSBxdWV1ZTtcbiAgICAgICAgLy8gcmF0aGVyLCBpdCB3cmFwcyBhcm91bmQgYW4gaW5uZXIgY29tcG9uZW50LCB3aGljaCBtYXkgb3IgbWF5IG5vdFxuICAgICAgICAvLyBjb250YWlucyBob29rcy5cbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgcmVzZXQgYXQgaW4gYmVnaW5Xb3JrIG91dCBvZiB0aGUgY29tbW9uIHBhdGggc28gdGhhdFxuICAgICAgICAvLyB0aGlzIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSBpZiAoKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBuZXh0SXNEZXRhY2hlZCA9ICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuX3BlbmRpbmdWaXNpYmlsaXR5ICYgT2Zmc2NyZWVuRGV0YWNoZWQpICE9PSAwO1xuICB2YXIgcHJldlN0YXRlID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG4gIG1hcmtSZWYkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgaWYgKG5leHRQcm9wcy5tb2RlID09PSAnaGlkZGVuJyB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IG5leHRJc0RldGFjaGVkKSB7XG4gICAgLy8gUmVuZGVyaW5nIGEgaGlkZGVuIHRyZWUuXG4gICAgdmFyIGRpZFN1c3BlbmQgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxO1xuXG4gICAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQgaW5zaWRlIGEgaGlkZGVuIHRyZWVcbiAgICAgIC8vIEluY2x1ZGUgdGhlIGJhc2UgbGFuZXMgZnJvbSB0aGUgbGFzdCByZW5kZXJcbiAgICAgIHZhciBuZXh0QmFzZUxhbmVzID0gcHJldlN0YXRlICE9PSBudWxsID8gbWVyZ2VMYW5lcyhwcmV2U3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcykgOiByZW5kZXJMYW5lcztcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gUmVzZXQgdG8gdGhlIGN1cnJlbnQgY2hpbGRyZW5cbiAgICAgICAgdmFyIGN1cnJlbnRDaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gVGhlIGN1cnJlbnQgcmVuZGVyIHN1c3BlbmRlZCwgYnV0IHRoZXJlIG1heSBiZSBvdGhlciBsYW5lcyB3aXRoXG4gICAgICAgIC8vIHBlbmRpbmcgd29yay4gV2UgY2FuJ3QgcmVhZCBgY2hpbGRMYW5lc2AgZnJvbSB0aGUgY3VycmVudCBPZmZzY3JlZW5cbiAgICAgICAgLy8gZmliZXIgYmVjYXVzZSB3ZSByZXNldCBpdCB3aGVuIGl0IHdhcyBkZWZlcnJlZDsgaG93ZXZlciwgd2UgY2FuIHJlYWRcbiAgICAgICAgLy8gdGhlIHBlbmRpbmcgbGFuZXMgZnJvbSB0aGUgY2hpbGQgZmliZXJzLlxuXG4gICAgICAgIHZhciBjdXJyZW50Q2hpbGRMYW5lcyA9IE5vTGFuZXM7XG5cbiAgICAgICAgd2hpbGUgKGN1cnJlbnRDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGN1cnJlbnRDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhtZXJnZUxhbmVzKGN1cnJlbnRDaGlsZExhbmVzLCBjdXJyZW50Q2hpbGQubGFuZXMpLCBjdXJyZW50Q2hpbGQuY2hpbGRMYW5lcyk7XG4gICAgICAgICAgY3VycmVudENoaWxkID0gY3VycmVudENoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGFuZXNXZUp1c3RBdHRlbXB0ZWQgPSBuZXh0QmFzZUxhbmVzO1xuICAgICAgICB2YXIgcmVtYWluaW5nQ2hpbGRMYW5lcyA9IHJlbW92ZUxhbmVzKGN1cnJlbnRDaGlsZExhbmVzLCBsYW5lc1dlSnVzdEF0dGVtcHRlZCk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSByZW1haW5pbmdDaGlsZExhbmVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0QmFzZUxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgLy8gSW4gbGVnYWN5IHN5bmMgbW9kZSwgZG9uJ3QgZGVmZXIgdGhlIHN1YnRyZWUuIFJlbmRlciBpdCBub3cuXG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBob3cgT2Zmc2NyZWVuIHNob3VsZCB3b3JrIHdpdGggdHJhbnNpdGlvbnMgaW4gdGhlIGZ1dHVyZVxuICAgICAgdmFyIG5leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzLFxuICAgICAgICBjYWNoZVBvb2w6IG51bGxcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV4dFN0YXRlO1xuXG4gICAgICB7XG4gICAgICAgIC8vIHB1c2ggdGhlIGNhY2hlIHBvb2wgZXZlbiB0aG91Z2ggd2UncmUgZ29pbmcgdG8gYmFpbCBvdXRcbiAgICAgICAgLy8gYmVjYXVzZSBvdGhlcndpc2UgdGhlcmUnZCBiZSBhIGNvbnRleHQgbWlzbWF0Y2hcbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICBwdXNoVHJhbnNpdGlvbih3b3JrSW5Qcm9ncmVzcywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2UgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSkge1xuICAgICAgLy8gV2UncmUgaGlkZGVuLCBhbmQgd2UncmUgbm90IHJlbmRlcmluZyBhdCBPZmZzY3JlZW4uIFdlIHdpbGwgYmFpbCBvdXRcbiAgICAgIC8vIGFuZCByZXN1bWUgdGhpcyB0cmVlIGxhdGVyLlxuICAgICAgLy8gU2NoZWR1bGUgdGhpcyBmaWJlciB0byByZS1yZW5kZXIgYXQgT2Zmc2NyZWVuIHByaW9yaXR5XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBsYW5lVG9MYW5lcyhPZmZzY3JlZW5MYW5lKTsgLy8gSW5jbHVkZSB0aGUgYmFzZSBsYW5lcyBmcm9tIHRoZSBsYXN0IHJlbmRlclxuXG4gICAgICB2YXIgX25leHRCYXNlTGFuZXMgPSBwcmV2U3RhdGUgIT09IG51bGwgPyBtZXJnZUxhbmVzKHByZXZTdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKSA6IHJlbmRlckxhbmVzO1xuXG4gICAgICByZXR1cm4gZGVmZXJIaWRkZW5PZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0QmFzZUxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgc2Vjb25kIHJlbmRlci4gVGhlIHN1cnJvdW5kaW5nIHZpc2libGUgY29udGVudCBoYXMgYWxyZWFkeVxuICAgICAgLy8gY29tbWl0dGVkLiBOb3cgd2UgcmVzdW1lIHJlbmRlcmluZyB0aGUgaGlkZGVuIHRyZWUuXG4gICAgICAvLyBSZW5kZXJpbmcgYXQgb2Zmc2NyZWVuLCBzbyB3ZSBjYW4gY2xlYXIgdGhlIGJhc2UgbGFuZXMuXG4gICAgICB2YXIgX25leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBOb0xhbmVzLFxuICAgICAgICBjYWNoZVBvb2w6IG51bGxcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhlIHJlbmRlciB0aGF0IHNwYXduZWQgdGhpcyBvbmUgYWNjZXNzZWQgdGhlIGNhY2hlIHBvb2wsIHJlc3VtZVxuICAgICAgICAvLyB1c2luZyB0aGUgc2FtZSBjYWNoZS4gVW5sZXNzIHRoZSBwYXJlbnQgY2hhbmdlZCwgc2luY2UgdGhhdCBtZWFuc1xuICAgICAgICAvLyB0aGVyZSB3YXMgYSByZWZyZXNoLlxuICAgICAgICB2YXIgcHJldkNhY2hlUG9vbCA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5jYWNoZVBvb2wgOiBudWxsOyAvLyBUT0RPOiBDb25zaWRlciBpZiBhbmQgaG93IE9mZnNjcmVlbiBwcmUtcmVuZGVyaW5nIHNob3VsZFxuICAgICAgICAvLyBiZSBhdHRyaWJ1dGVkIHRvIHRoZSB0cmFuc2l0aW9uIHRoYXQgc3Bhd25lZCBpdFxuXG4gICAgICAgIHB1c2hUcmFuc2l0aW9uKHdvcmtJblByb2dyZXNzLCBwcmV2Q2FjaGVQb29sKTtcbiAgICAgIH0gLy8gUHVzaCB0aGUgbGFuZXMgdGhhdCB3ZXJlIHNraXBwZWQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuXG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcHVzaEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIH1cblxuICAgICAgcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFJlbmRlcmluZyBhIHZpc2libGUgdHJlZS5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBnb2luZyBmcm9tIGhpZGRlbiAtPiB2aXNpYmxlLlxuICAgICAgdmFyIF9wcmV2Q2FjaGVQb29sID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICAvLyBJZiB0aGUgcmVuZGVyIHRoYXQgc3Bhd25lZCB0aGlzIG9uZSBhY2Nlc3NlZCB0aGUgY2FjaGUgcG9vbCwgcmVzdW1lXG4gICAgICAgIC8vIHVzaW5nIHRoZSBzYW1lIGNhY2hlLiBVbmxlc3MgdGhlIHBhcmVudCBjaGFuZ2VkLCBzaW5jZSB0aGF0IG1lYW5zXG4gICAgICAgIC8vIHRoZXJlIHdhcyBhIHJlZnJlc2guXG4gICAgICAgIF9wcmV2Q2FjaGVQb29sID0gcHJldlN0YXRlLmNhY2hlUG9vbDtcbiAgICAgIH1cblxuICAgICAgcHVzaFRyYW5zaXRpb24od29ya0luUHJvZ3Jlc3MsIF9wcmV2Q2FjaGVQb29sKTsgLy8gUHVzaCB0aGUgbGFuZXMgdGhhdCB3ZXJlIHNraXBwZWQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuXG4gICAgICBwdXNoSGlkZGVuQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcHJldlN0YXRlKTtcbiAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7IC8vIFNpbmNlIHdlJ3JlIG5vdCBoaWRkZW4gYW55bW9yZSwgcmVzZXQgdGhlIHN0YXRlXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSB3ZXJlbid0IHByZXZpb3VzbHkgaGlkZGVuLCBhbmQgd2Ugc3RpbGwgYXJlbid0LCBzbyB0aGVyZSdzIG5vdGhpbmdcbiAgICAgIC8vIHNwZWNpYWwgdG8gZG8uIE5lZWQgdG8gcHVzaCB0byB0aGUgc3RhY2sgcmVnYXJkbGVzcywgdGhvdWdoLCB0byBhdm9pZFxuICAgICAgLy8gYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG4gICAgICB7XG4gICAgICAgIC8vIElmIHRoZSByZW5kZXIgdGhhdCBzcGF3bmVkIHRoaXMgb25lIGFjY2Vzc2VkIHRoZSBjYWNoZSBwb29sLCByZXN1bWVcbiAgICAgICAgLy8gdXNpbmcgdGhlIHNhbWUgY2FjaGUuIFVubGVzcyB0aGUgcGFyZW50IGNoYW5nZWQsIHNpbmNlIHRoYXQgbWVhbnNcbiAgICAgICAgLy8gdGhlcmUgd2FzIGEgcmVmcmVzaC5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICBwdXNoVHJhbnNpdGlvbih3b3JrSW5Qcm9ncmVzcywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gV2UncmUgYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB3ZSBuZWVkIHRvIHB1c2ggdGhpcyB0byB0aGUgc3RhY2sgYW55d2F5XG4gICAgICAvLyB0byBhdm9pZCBhIHB1c2gvcG9wIG1pc2FsaWdubWVudC5cblxuXG4gICAgICByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9XG5cbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0QmFzZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFN0YXRlID0ge1xuICAgIGJhc2VMYW5lczogbmV4dEJhc2VMYW5lcyxcbiAgICAvLyBTYXZlIHRoZSBjYWNoZSBwb29sIHNvIHdlIGNhbiByZXN1bWUgbGF0ZXIuXG4gICAgY2FjaGVQb29sOiBnZXRPZmZzY3JlZW5EZWZlcnJlZENhY2hlKCkgXG4gIH07XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXh0U3RhdGU7XG5cbiAge1xuICAgIC8vIHB1c2ggdGhlIGNhY2hlIHBvb2wgZXZlbiB0aG91Z2ggd2UncmUgZ29pbmcgdG8gYmFpbCBvdXRcbiAgICAvLyBiZWNhdXNlIG90aGVyd2lzZSB0aGVyZSdkIGJlIGEgY29udGV4dCBtaXNtYXRjaFxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBwdXNoVHJhbnNpdGlvbih3b3JrSW5Qcm9ncmVzcywgbnVsbCk7XG4gICAgfVxuICB9IC8vIFdlJ3JlIGFib3V0IHRvIGJhaWwgb3V0LCBidXQgd2UgbmVlZCB0byBwdXNoIHRoaXMgdG8gdGhlIHN0YWNrIGFueXdheVxuICAvLyB0byBhdm9pZCBhIHB1c2gvcG9wIG1pc2FsaWdubWVudC5cblxuXG4gIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2sod29ya0luUHJvZ3Jlc3MpO1xuICBwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcblxuICByZXR1cm4gbnVsbDtcbn0gLy8gTm90ZTogVGhlc2UgaGFwcGVuIHRvIGhhdmUgaWRlbnRpY2FsIGJlZ2luIHBoYXNlcywgZm9yIG5vdy4gV2Ugc2hvdWxkbid0IGhvbGRcblxuZnVuY3Rpb24gdXBkYXRlQ2FjaGVDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIHBhcmVudENhY2hlID0gcmVhZENvbnRleHQoQ2FjaGVDb250ZXh0KTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIEluaXRpYWwgbW91bnQuIFJlcXVlc3QgYSBmcmVzaCBjYWNoZSBmcm9tIHRoZSBwb29sLlxuICAgIHZhciBmcmVzaENhY2hlID0gcmVxdWVzdENhY2hlRnJvbVBvb2wocmVuZGVyTGFuZXMpO1xuICAgIHZhciBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBwYXJlbnQ6IHBhcmVudENhY2hlLFxuICAgICAgY2FjaGU6IGZyZXNoQ2FjaGVcbiAgICB9O1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgICBwdXNoQ2FjaGVQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgZnJlc2hDYWNoZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2hlY2sgZm9yIHVwZGF0ZXNcbiAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShjdXJyZW50LmxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBudWxsLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTsgLy8gQ29tcGFyZSB0aGUgbmV3IHBhcmVudCBjYWNoZSB0byB0aGUgcHJldmlvdXMgdG8gc2VlIGRldGVjdCB0aGVyZSB3YXNcbiAgICAvLyBhIHJlZnJlc2guXG5cbiAgICBpZiAocHJldlN0YXRlLnBhcmVudCAhPT0gcGFyZW50Q2FjaGUpIHtcbiAgICAgIC8vIFJlZnJlc2ggaW4gcGFyZW50LiBVcGRhdGUgdGhlIHBhcmVudC5cbiAgICAgIHZhciBkZXJpdmVkU3RhdGUgPSB7XG4gICAgICAgIHBhcmVudDogcGFyZW50Q2FjaGUsXG4gICAgICAgIGNhY2hlOiBwYXJlbnRDYWNoZVxuICAgICAgfTsgLy8gQ29waWVkIGZyb20gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIGltcGxlbWVudGF0aW9uLiBPbmNlIHRoZSB1cGRhdGVcbiAgICAgIC8vIHF1ZXVlIGlzIGVtcHR5LCBwZXJzaXN0IHRoZSBkZXJpdmVkIHN0YXRlIG9udG8gdGhlIGJhc2Ugc3RhdGUuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBkZXJpdmVkU3RhdGU7XG5cbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9PT0gTm9MYW5lcykge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9IGRlcml2ZWRTdGF0ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaENhY2hlUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIHBhcmVudENhY2hlKTsgLy8gTm8gbmVlZCB0byBwcm9wYWdhdGUgYSBjb250ZXh0IGNoYW5nZSBiZWNhdXNlIHRoZSByZWZyZXNoZWQgcGFyZW50XG4gICAgICAvLyBhbHJlYWR5IGRpZC5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHBhcmVudCBkaWRuJ3QgcmVmcmVzaC4gTm93IGNoZWNrIGlmIHRoaXMgY2FjaGUgZGlkLlxuICAgICAgdmFyIG5leHRDYWNoZSA9IG5leHRTdGF0ZS5jYWNoZTtcbiAgICAgIHB1c2hDYWNoZVByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBuZXh0Q2FjaGUpO1xuXG4gICAgICBpZiAobmV4dENhY2hlICE9PSBwcmV2U3RhdGUuY2FjaGUpIHtcbiAgICAgICAgLy8gVGhpcyBjYWNoZSByZWZyZXNoZWQuIFByb3BhZ2F0ZSBhIGNvbnRleHQgY2hhbmdlLlxuICAgICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn0gLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgdGhlIG5hbWUgY2hhbmdlc1xuXG5mdW5jdGlvbiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVQcm9maWxlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcblxuICAgIHtcbiAgICAgIC8vIFJlc2V0IGVmZmVjdCBkdXJhdGlvbnMgZm9yIHRoZSBuZXh0IGV2ZW50dWFsIGVmZmVjdCBwaGFzZS5cbiAgICAgIC8vIFRoZXNlIGFyZSByZXNldCBkdXJpbmcgcmVuZGVyIHRvIGFsbG93IHRoZSBEZXZUb29scyBjb21taXQgaG9vayBhIGNoYW5jZSB0byByZWFkIHRoZW0sXG4gICAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmJDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCAmJiByZWYgIT09IG51bGwgfHwgY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gcmVmKSB7XG4gICAgLy8gU2NoZWR1bGUgYSBSZWYgZWZmZWN0XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUmVmO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZlN0YXRpYztcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQ7XG5cbiAge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICB2YXIgaGFzSWQ7XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgaGFzSWQgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIHtcbiAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgaWYgKGdldElzSHlkcmF0aW5nKCkgJiYgaGFzSWQpIHtcbiAgICBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgQ29tcG9uZW50LCBzZWNvbmRBcmcsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXBsYXkgYSBjb21wb25lbnQgdGhhdCBwcmV2aW91c2x5IHN1c3BlbmRlZCxcbiAgLy8gYWZ0ZXIgaXRzIGRhdGEgcmVzb2x2ZXMuIEl0J3MgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2ZcbiAgLy8gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQgdGhhdCByZXVzZXMgdGhlIGhvb2tzIGZyb20gdGhlIHByZXZpb3VzIGF0dGVtcHQuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciBuZXh0Q2hpbGRyZW4gPSByZXBsYXlTdXNwZW5kZWRDb21wb25lbnRXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCBzZWNvbmRBcmcpO1xuICB2YXIgaGFzSWQgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuXG4gIHtcbiAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgaWYgKGdldElzSHlkcmF0aW5nKCkgJiYgaGFzSWQpIHtcbiAgICBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgLy8gVGhpcyBpcyB1c2VkIGJ5IERldlRvb2xzIHRvIGZvcmNlIGEgYm91bmRhcnkgdG8gZXJyb3IuXG4gICAgc3dpdGNoIChzaG91bGRFcnJvcih3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgIGNhc2UgZmFsc2U6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgIHZhciBjdG9yID0gd29ya0luUHJvZ3Jlc3MudHlwZTsgLy8gVE9ETyBUaGlzIHdheSBvZiByZXNldHRpbmcgdGhlIGVycm9yIGJvdW5kYXJ5IHN0YXRlIGlzIGEgaGFjay5cbiAgICAgICAgICAvLyBJcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcz9cblxuICAgICAgICAgIHZhciB0ZW1wSW5zdGFuY2UgPSBuZXcgY3Rvcih3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLCBfaW5zdGFuY2UuY29udGV4dCk7XG4gICAgICAgICAgdmFyIHN0YXRlID0gdGVtcEluc3RhbmNlLnN0YXRlO1xuXG4gICAgICAgICAgX2luc3RhbmNlLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKF9pbnN0YW5jZSwgc3RhdGUsIG51bGwpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSB0cnVlOlxuICAgICAgICB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuXG4gICAgICAgICAgdmFyIGVycm9yJDEgPSBuZXcgRXJyb3IoJ1NpbXVsYXRlZCBlcnJvciBjb21pbmcgZnJvbSBEZXZUb29scycpO1xuICAgICAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUocmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgbGFuZSk7IC8vIFNjaGVkdWxlIHRoZSBlcnJvciBib3VuZGFyeSB0byByZS1yZW5kZXIgdXNpbmcgdXBkYXRlZCBzdGF0ZVxuXG4gICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKGVycm9yJDEsIHdvcmtJblByb2dyZXNzKSwgbGFuZSk7XG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCB1cGRhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgc2hvdWxkVXBkYXRlO1xuXG4gIGlmIChpbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpOyAvLyBJbiB0aGUgaW5pdGlhbCBwYXNzIHdlIG1pZ2h0IG5lZWQgdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZS5cblxuICAgIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgc2hvdWxkVXBkYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSW4gYSByZXN1bWUsIHdlJ2xsIGFscmVhZHkgaGF2ZSBhbiBpbnN0YW5jZSB3ZSBjYW4gcmV1c2UuXG4gICAgc2hvdWxkVXBkYXRlID0gcmVzdW1lTW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFVwZGF0ZSA9IHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgbmV4dFVuaXRPZldvcmsgPSBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgdmFyIGluc3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlICYmIGluc3QucHJvcHMgIT09IG5leHRQcm9wcykge1xuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgIGVycm9yKCdJdCBsb29rcyBsaWtlICVzIGlzIHJlYXNzaWduaW5nIGl0cyBvd24gYHRoaXMucHJvcHNgIHdoaWxlIHJlbmRlcmluZy4gJyArICdUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGNhbiBsZWFkIHRvIGNvbmZ1c2luZyBidWdzLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8ICdhIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFVuaXRPZldvcms7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gUmVmcyBzaG91bGQgdXBkYXRlIGV2ZW4gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2VcbiAgbWFya1JlZiQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGRpZENhcHR1cmVFcnJvciA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzJDE7XG5cbiAgaWYgKCFzaG91bGRVcGRhdGUgJiYgIWRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIENvbnRleHQgcHJvdmlkZXJzIHNob3VsZCBkZWZlciB0byBzQ1UgZm9yIHJlbmRlcmluZ1xuICAgIGlmIChoYXNDb250ZXh0KSB7XG4gICAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBSZXJlbmRlclxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICB2YXIgbmV4dENoaWxkcmVuO1xuXG4gIGlmIChkaWRDYXB0dXJlRXJyb3IgJiYgdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiB3ZSBjYXB0dXJlZCBhbiBlcnJvciwgYnV0IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciBpcyBub3QgZGVmaW5lZCxcbiAgICAvLyB1bm1vdW50IGFsbCB0aGUgY2hpbGRyZW4uIGNvbXBvbmVudERpZENhdGNoIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHRvXG4gICAgLy8gcmUtcmVuZGVyIGEgZmFsbGJhY2suIFRoaXMgaXMgdGVtcG9yYXJ5IHVudGlsIHdlIG1pZ3JhdGUgZXZlcnlvbmUgdG9cbiAgICAvLyB0aGUgbmV3IEFQSS5cbiAgICAvLyBUT0RPOiBXYXJuIGluIGEgZnV0dXJlIHJlbGVhc2UuXG4gICAgbmV4dENoaWxkcmVuID0gbnVsbDtcblxuICAgIHtcbiAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgIG5leHRDaGlsZHJlbiA9IGluc3RhbmNlLnJlbmRlcigpO1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbnN0YW5jZS5yZW5kZXIoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgZGlkQ2FwdHVyZUVycm9yKSB7XG4gICAgLy8gSWYgd2UncmUgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZWNvbmNpbGUgd2l0aG91dCByZXVzaW5nIGFueSBvZlxuICAgIC8vIHRoZSBleGlzdGluZyBjaGlsZHJlbi4gQ29uY2VwdHVhbGx5LCB0aGUgbm9ybWFsIGNoaWxkcmVuIGFuZCB0aGUgY2hpbGRyZW5cbiAgICAvLyB0aGF0IGFyZSBzaG93biBvbiBlcnJvciBhcmUgdHdvIGRpZmZlcmVudCBzZXRzLCBzbyB3ZSBzaG91bGRuJ3QgcmV1c2VcbiAgICAvLyBub3JtYWwgY2hpbGRyZW4gZXZlbiBpZiB0aGVpciBpZGVudGl0aWVzIG1hdGNoLlxuICAgIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBNZW1vaXplIHN0YXRlIHVzaW5nIHRoZSB2YWx1ZXMgd2UganVzdCB1c2VkIHRvIHJlbmRlci5cbiAgLy8gVE9ETzogUmVzdHJ1Y3R1cmUgc28gd2UgbmV2ZXIgcmVhZCB2YWx1ZXMgZnJvbSB0aGUgaW5zdGFuY2UuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7IC8vIFRoZSBjb250ZXh0IG1pZ2h0IGhhdmUgY2hhbmdlZCBzbyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0LlxuXG4gIGlmIChoYXNDb250ZXh0KSB7XG4gICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QucGVuZGluZ0NvbnRleHQsIHJvb3QucGVuZGluZ0NvbnRleHQgIT09IHJvb3QuY29udGV4dCk7XG4gIH0gZWxzZSBpZiAocm9vdC5jb250ZXh0KSB7XG4gICAgLy8gU2hvdWxkIGFsd2F5cyBiZSBzZXRcbiAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LmNvbnRleHQsIGZhbHNlKTtcbiAgfVxuXG4gIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCByb290LmNvbnRhaW5lckluZm8pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0Um9vdChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBoYXZlIGEgY3VycmVudCBmaWJlci4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgcHJldkNoaWxkcmVuID0gcHJldlN0YXRlLmVsZW1lbnQ7XG4gIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgbnVsbCwgcmVuZGVyTGFuZXMpO1xuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgdmFyIG5leHRDYWNoZSA9IG5leHRTdGF0ZS5jYWNoZTtcbiAgICBwdXNoQ2FjaGVQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgbmV4dENhY2hlKTtcblxuICAgIGlmIChuZXh0Q2FjaGUgIT09IHByZXZTdGF0ZS5jYWNoZSkge1xuICAgICAgLy8gVGhlIHJvb3QgY2FjaGUgcmVmcmVzaGVkLlxuICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgQ2FjaGVDb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG5cbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRTdGF0ZS5lbGVtZW50O1xuXG4gIGlmIChwcmV2U3RhdGUuaXNEZWh5ZHJhdGVkKSB7XG4gICAgLy8gVGhpcyBpcyBhIGh5ZHJhdGlvbiByb290IHdob3NlIHNoZWxsIGhhcyBub3QgeWV0IGh5ZHJhdGVkLiBXZSBzaG91bGRcbiAgICAvLyBhdHRlbXB0IHRvIGh5ZHJhdGUuXG4gICAgLy8gRmxpcCBpc0RlaHlkcmF0ZWQgdG8gZmFsc2UgdG8gaW5kaWNhdGUgdGhhdCB3aGVuIHRoaXMgcmVuZGVyXG4gICAgLy8gZmluaXNoZXMsIHRoZSByb290IHdpbGwgbm8gbG9uZ2VyIGJlIGRlaHlkcmF0ZWQuXG4gICAgdmFyIG92ZXJyaWRlU3RhdGUgPSB7XG4gICAgICBlbGVtZW50OiBuZXh0Q2hpbGRyZW4sXG4gICAgICBpc0RlaHlkcmF0ZWQ6IGZhbHNlLFxuICAgICAgY2FjaGU6IG5leHRTdGF0ZS5jYWNoZVxuICAgIH07XG4gICAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7IC8vIGBiYXNlU3RhdGVgIGNhbiBhbHdheXMgYmUgdGhlIGxhc3Qgc3RhdGUgYmVjYXVzZSB0aGUgcm9vdCBkb2Vzbid0XG4gICAgLy8gaGF2ZSByZWR1Y2VyIGZ1bmN0aW9ucyBzbyBpdCBkb2Vzbid0IG5lZWQgcmViYXNpbmcuXG5cbiAgICB1cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBvdmVycmlkZVN0YXRlO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBvdmVycmlkZVN0YXRlO1xuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRm9yY2VDbGllbnRSZW5kZXIpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBlcnJvcmVkIGR1cmluZyBhIHByZXZpb3VzIGF0dGVtcHQgdG8gaHlkcmF0ZSB0aGUgc2hlbGwsIHNvIHdlXG4gICAgICAvLyBmb3JjZWQgYSBjbGllbnQgcmVuZGVyLlxuICAgICAgdmFyIHJlY292ZXJhYmxlRXJyb3IgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihuZXcgRXJyb3IoJ1RoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBoeWRyYXRpbmcuIEJlY2F1c2UgdGhlIGVycm9yIGhhcHBlbmVkIG91dHNpZGUgJyArICdvZiBhIFN1c3BlbnNlIGJvdW5kYXJ5LCB0aGUgZW50aXJlIHJvb3Qgd2lsbCBzd2l0Y2ggdG8gJyArICdjbGllbnQgcmVuZGVyaW5nLicpLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbW91bnRIb3N0Um9vdFdpdGhvdXRIeWRyYXRpbmcoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMsIHJlY292ZXJhYmxlRXJyb3IpO1xuICAgIH0gZWxzZSBpZiAobmV4dENoaWxkcmVuICE9PSBwcmV2Q2hpbGRyZW4pIHtcbiAgICAgIHZhciBfcmVjb3ZlcmFibGVFcnJvciA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKG5ldyBFcnJvcignVGhpcyByb290IHJlY2VpdmVkIGFuIGVhcmx5IHVwZGF0ZSwgYmVmb3JlIGFueXRoaW5nIHdhcyBhYmxlICcgKyAnaHlkcmF0ZS4gU3dpdGNoZWQgdGhlIGVudGlyZSByb290IHRvIGNsaWVudCByZW5kZXJpbmcuJyksIHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgcmV0dXJuIG1vdW50SG9zdFJvb3RXaXRob3V0SHlkcmF0aW5nKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzLCBfcmVjb3ZlcmFibGVFcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBvdXRlcm1vc3Qgc2hlbGwgaGFzIG5vdCBoeWRyYXRlZCB5ZXQuIFN0YXJ0IGh5ZHJhdGluZy5cbiAgICAgIGVudGVySHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgdmFyIGNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICAgICAgdmFyIG5vZGUgPSBjaGlsZDtcblxuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgLy8gTWFyayBlYWNoIGNoaWxkIGFzIGh5ZHJhdGluZy4gVGhpcyBpcyBhIGZhc3QgcGF0aCB0byBrbm93IHdoZXRoZXIgdGhpc1xuICAgICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAgIC8vIG5vZGUgaGFzIGZ1bGx5IG1vdW50ZWQgeWV0LCBhbmQgZm9yIHNjaGVkdWxpbmcgZXZlbnQgcmVwbGF5aW5nLlxuICAgICAgICAvLyBDb25jZXB0dWFsbHkgdGhpcyBpcyBzaW1pbGFyIHRvIFBsYWNlbWVudCBpbiB0aGF0IGEgbmV3IHN1YnRyZWUgaXNcbiAgICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAgIC8vIG11dGF0aW9ucyBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzLlxuICAgICAgICBub2RlLmZsYWdzID0gbm9kZS5mbGFncyAmIH5QbGFjZW1lbnQgfCBIeWRyYXRpbmc7XG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFJvb3QgaXMgbm90IGRlaHlkcmF0ZWQuIEVpdGhlciB0aGlzIGlzIGEgY2xpZW50LW9ubHkgcm9vdCwgb3IgaXRcbiAgICAvLyBhbHJlYWR5IGh5ZHJhdGVkLlxuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcblxuICAgIGlmIChuZXh0Q2hpbGRyZW4gPT09IHByZXZDaGlsZHJlbikge1xuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50SG9zdFJvb3RXaXRob3V0SHlkcmF0aW5nKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzLCByZWNvdmVyYWJsZUVycm9yKSB7XG4gIC8vIFJldmVydCB0byBjbGllbnQgcmVuZGVyaW5nLlxuICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gIHF1ZXVlSHlkcmF0aW9uRXJyb3IocmVjb3ZlcmFibGVFcnJvcik7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IEZvcmNlQ2xpZW50UmVuZGVyO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdENvbXBvbmVudCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9XG5cbiAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlByb3BzID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG51bGw7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBpc0RpcmVjdFRleHRDaGlsZCA9IHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIG5leHRQcm9wcyk7XG5cbiAgaWYgKGlzRGlyZWN0VGV4dENoaWxkKSB7XG4gICAgLy8gV2Ugc3BlY2lhbCBjYXNlIGEgZGlyZWN0IHRleHQgY2hpbGQgb2YgYSBob3N0IG5vZGUuIFRoaXMgaXMgYSBjb21tb25cbiAgICAvLyBjYXNlLiBXZSB3b24ndCBoYW5kbGUgaXQgYXMgYSByZWlmaWVkIGNoaWxkLiBXZSB3aWxsIGluc3RlYWQgaGFuZGxlXG4gICAgLy8gdGhpcyBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudCB0aGF0IGFsc28gaGFzIGFjY2VzcyB0byB0aGlzIHByb3AuIFRoYXRcbiAgICAvLyBhdm9pZHMgYWxsb2NhdGluZyBhbm90aGVyIEhvc3RUZXh0IGZpYmVyIGFuZCB0cmF2ZXJzaW5nIGl0LlxuICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG4gIH0gZWxzZSBpZiAocHJldlByb3BzICE9PSBudWxsICYmIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByZXZQcm9wcykpIHtcbiAgICAvLyBJZiB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBhIGRpcmVjdCB0ZXh0IGNoaWxkIHRvIGEgbm9ybWFsIGNoaWxkLCBvciB0b1xuICAgIC8vIGVtcHR5LCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHRoZSB0ZXh0IGNvbnRlbnQgdG8gYmUgcmVzZXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ29udGVudFJlc2V0O1xuICB9XG5cbiAge1xuICAgIHZhciBtZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChtZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGZpYmVyIGhhcyBiZWVuIHVwZ3JhZGVkIHRvIGEgc3RhdGVmdWwgY29tcG9uZW50LiBUaGUgb25seSB3YXlcbiAgICAgIC8vIGhhcHBlbnMgY3VycmVudGx5IGlzIGZvciBmb3JtIGFjdGlvbnMuIFdlIHVzZSBob29rcyB0byB0cmFjayB0aGVcbiAgICAgIC8vIHBlbmRpbmcgYW5kIGVycm9yIHN0YXRlIG9mIHRoZSBmb3JtLlxuICAgICAgLy9cbiAgICAgIC8vIE9uY2UgYSBmaWJlciBpcyB1cGdyYWRlZCB0byBiZSBzdGF0ZWZ1bCwgaXQgcmVtYWlucyBzdGF0ZWZ1bCBmb3IgdGhlXG4gICAgICAvLyByZXN0IG9mIGl0cyBsaWZldGltZS5cbiAgICAgIHZhciBuZXdTdGF0ZSA9IHJlbmRlclRyYW5zaXRpb25Bd2FyZUhvc3RDb21wb25lbnRXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTsgLy8gSWYgdGhlIHRyYW5zaXRpb24gc3RhdGUgY2hhbmdlZCwgcHJvcGFnYXRlIHRoZSBjaGFuZ2UgdG8gYWxsIHRoZVxuICAgICAgLy8gZGVzY2VuZGVudHMuIFdlIHVzZSBDb250ZXh0IGFzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBmb3IgdGhpcy5cbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgc2V0IGhlcmUgaW5zdGVhZCBvZiBwdXNoSG9zdENvbnRleHQgYmVjYXVzZVxuICAgICAgLy8gcHVzaEhvc3RDb250ZXh0IGdldHMgY2FsbGVkIGJlZm9yZSB3ZSBwcm9jZXNzIHRoZSBzdGF0ZSBob29rLCB0byBhdm9pZFxuICAgICAgLy8gYSBzdGF0ZSBtaXNtYXRjaCBpbiB0aGUgZXZlbnQgdGhhdCBzb21ldGhpbmcgc3VzcGVuZHMuXG4gICAgICAvL1xuICAgICAgLy8gTk9URTogVGhpcyBhc3N1bWVzIHRoYXQgdGhlcmUgY2Fubm90IGJlIG5lc3RlZCB0cmFuc2l0aW9uIHByb3ZpZGVycyxcbiAgICAgIC8vIGJlY2F1c2UgdGhlIG9ubHkgcmVuZGVyZXIgdGhhdCBpbXBsZW1lbnRzIHRoaXMgZmVhdHVyZSBpcyBSZWFjdCBET00sXG4gICAgICAvLyBhbmQgZm9ybXMgY2Fubm90IGJlIG5lc3RlZC4gSWYgd2UgZGlkIHN1cHBvcnQgbmVzdGVkIHByb3ZpZGVycywgdGhlblxuICAgICAgLy8gd2Ugd291bGQgbmVlZCB0byBwdXNoIGEgY29udGV4dCB2YWx1ZSBldmVuIGZvciBob3N0IGZpYmVycyB0aGF0XG4gICAgICAvLyBoYXZlbid0IGJlZW4gdXBncmFkZWQgeWV0LlxuXG4gICAgICB7XG4gICAgICAgIEhvc3RUcmFuc2l0aW9uQ29udGV4dC5fY3VycmVudFZhbHVlID0gbmV3U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGRpZFJlY2VpdmVVcGRhdGUpIHtcbiAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIG9sZFN0YXRlSG9vayA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHZhciBvbGRTdGF0ZSA9IG9sZFN0YXRlSG9vay5tZW1vaXplZFN0YXRlOyAvLyBUaGlzIHVzZXMgcmVndWxhciBlcXVhbGl0eSBpbnN0ZWFkIG9mIE9iamVjdC5pcyBiZWNhdXNlIHdlIGFzc3VtZVxuICAgICAgICAgICAgLy8gdGhhdCBob3N0IHRyYW5zaXRpb24gc3RhdGUgZG9lc24ndCBpbmNsdWRlIE5hTiBhcyBhIHZhbGlkIHR5cGUuXG5cbiAgICAgICAgICAgIGlmIChvbGRTdGF0ZSAhPT0gbmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgSG9zdFRyYW5zaXRpb25Db250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbWFya1JlZiQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RIb2lzdGFibGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIG1hcmtSZWYkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBjdXJyZW50UHJvcHMgPSBjdXJyZW50ID09PSBudWxsID8gbnVsbCA6IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgdmFyIHJlc291cmNlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGdldFJlc291cmNlKHdvcmtJblByb2dyZXNzLnR5cGUsIGN1cnJlbnRQcm9wcywgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIGlmICghZ2V0SXNIeWRyYXRpbmcoKSAmJiByZXNvdXJjZSA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBub3QgYSBSZXNvdXJjZSBIb2lzdGFibGUgYW5kIHdlIGFyZW4ndCBoeWRyYXRpbmcgc28gd2UgY29uc3RydWN0IHRoZSBpbnN0YW5jZS5cbiAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGNyZWF0ZUhvaXN0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcywgZ2V0Um9vdEhvc3RDb250YWluZXIoKSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfSAvLyBSZXNvdXJjZXMgbmV2ZXIgaGF2ZSByZWNvbmNpbGVyIG1hbmFnZWQgY2hpbGRyZW4uIEl0IGlzIHBvc3NpYmxlIGZvclxuICAvLyB0aGUgaG9zdCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRSZXNvdXJjZSB0byBjb25zaWRlciBjaGlsZHJlbiBpbiB0aGVcbiAgLy8gcmVzb3VyY2UgY29uc3RydWN0aW9uIGJ1dCB0aGV5IHdpbGwgb3RoZXJ3aXNlIGJlIGRpc2NhcmRlZC4gSW4gcHJhY3RpY2VcbiAgLy8gdGhpcyBwcmVjbHVkZXMgYWxsIGJ1dCB0aGUgc2ltcGxlc3QgY2hpbGRyZW4gYW5kIEhvc3Qgc3BlY2lmaWMgd2FybmluZ3NcbiAgLy8gc2hvdWxkIGJlIGltcGxlbWVudGVkIHRvIHdhcm4gd2hlbiBjaGlsZHJlbiBhcmUgcGFzc3NlZCB3aGVuIG90aGVyd2lzZSBub3RcbiAgLy8gZXhwZWN0ZWRcblxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0U2luZ2xldG9uKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgY2xhaW1IeWRyYXRhYmxlU2luZ2xldG9uKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW47XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwgJiYgIWdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAvLyBTaW1pbGFyIHRvIFBvcnRhbHMgd2UgYXBwZW5kIFNpbmdsZXRvbiBjaGlsZHJlbiBpbiB0aGUgY29tbWl0IHBoYXNlLiBTbyB3ZVxuICAgIC8vIFRyYWNrIGluc2VydGlvbnMgZXZlbiBvbiBtb3VudC5cbiAgICAvLyBUT0RPOiBDb25zaWRlciB1bmlmeWluZyB0aGlzIHdpdGggaG93IHRoZSByb290IHdvcmtzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIG1hcmtSZWYkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFRleHQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZVRleHRJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIGlzIHRlcm1pbmFsLiBXZSdsbCBkbyB0aGUgY29tcGxldGlvbiBzdGVwXG4gIC8vIGltbWVkaWF0ZWx5IGFmdGVyLlxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF6eUNvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCByZW5kZXJMYW5lcykge1xuICByZXNldFN1c3BlbmRlZEN1cnJlbnRPbk1vdW50SW5MZWdhY3lNb2RlKF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIGxhenlDb21wb25lbnQgPSBlbGVtZW50VHlwZTtcbiAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG4gIHZhciBDb21wb25lbnQgPSBpbml0KHBheWxvYWQpOyAvLyBTdG9yZSB0aGUgdW53cmFwcGVkIGNvbXBvbmVudCBpbiB0aGUgdHlwZS5cblxuICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50O1xuICB2YXIgcmVzb2x2ZWRUYWcgPSB3b3JrSW5Qcm9ncmVzcy50YWcgPSByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpO1xuICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBwcm9wcyk7XG4gIHZhciBjaGlsZDtcblxuICBzd2l0Y2ggKHJlc29sdmVkVGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRm9yd2FyZFJlZihudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCByZXNvbHZlZFByb3BzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZU1lbW9Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQudHlwZSwgcmVzb2x2ZWRQcm9wcyksIC8vIFRoZSBpbm5lciB0eXBlIGNhbiBoYXZlIGRlZmF1bHRzIHRvb1xuICAgICAgICByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgfVxuXG4gIHZhciBoaW50ID0gJyc7XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQgIT09IG51bGwgJiYgdHlwZW9mIENvbXBvbmVudCA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgIGhpbnQgPSAnIERpZCB5b3Ugd3JhcCBhIGNvbXBvbmVudCBpbiBSZWFjdC5sYXp5KCkgbW9yZSB0aGFuIG9uY2U/JztcbiAgICB9XG4gIH0gLy8gVGhpcyBtZXNzYWdlIGludGVudGlvbmFsbHkgZG9lc24ndCBtZW50aW9uIEZvcndhcmRSZWYgb3IgTWVtb0NvbXBvbmVudFxuICAvLyBiZWNhdXNlIHRoZSBmYWN0IHRoYXQgaXQncyBhIHNlcGFyYXRlIHR5cGUgb2Ygd29yayBpcyBhblxuICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuXG5cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZC4gUmVjZWl2ZWQgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG86IFwiICsgQ29tcG9uZW50ICsgXCIuIFwiICsgKFwiTGF6eSBlbGVtZW50IHR5cGUgbXVzdCByZXNvbHZlIHRvIGEgY2xhc3Mgb3IgZnVuY3Rpb24uXCIgKyBoaW50KSk7XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzKTsgLy8gUHJvbW90ZSB0aGUgZmliZXIgdG8gYSBjbGFzcyBhbmQgdHJ5IHJlbmRlcmluZyBhZ2Fpbi5cblxuICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiBpcyBhIGZvcmsgb2YgYHVwZGF0ZUNsYXNzQ29tcG9uZW50YFxuICAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICB2YXIgaGFzQ29udGV4dDtcblxuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlbmRlckxhbmVzKSB7XG4gIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgY29udGV4dDtcblxuICB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgdmFsdWU7XG4gIHZhciBoYXNJZDtcblxuICB7XG4gICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQod29ya0luUHJvZ3Jlc3MpO1xuICB9XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQucHJvdG90eXBlICYmIHR5cGVvZiBDb21wb25lbnQucHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoXCJUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGhhdmUgYSByZW5kZXIgbWV0aG9kLCBidXQgZG9lc24ndCBleHRlbmQgUmVhY3QuQ29tcG9uZW50LiBcIiArICdUaGlzIGlzIGxpa2VseSB0byBjYXVzZSBlcnJvcnMuIENoYW5nZSAlcyB0byBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgaGFzSWQgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIHtcbiAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAge1xuICAgIC8vIFN1cHBvcnQgZm9yIG1vZHVsZSBjb21wb25lbnRzIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIHJlbW92ZWQgYmVoaW5kIGEgZmxhZy5cbiAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCB3b3VsZCBjcmFzaCBsYXRlciwgd2Ugd2FudCB0byBzaG93IGEgZ29vZCBtZXNzYWdlIGluIERFViBmaXJzdC5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYSBjbGFzcyBpbnN0YW5jZS4gJyArICdDaGFuZ2UgJXMgdG8gYSBjbGFzcyB0aGF0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuICcgKyBcIklmIHlvdSBjYW4ndCB1c2UgYSBjbGFzcyB0cnkgYXNzaWduaW5nIHRoZSBwcm90b3R5cGUgb24gdGhlIGZ1bmN0aW9uIGFzIGEgd29ya2Fyb3VuZC4gXCIgKyBcImAlcy5wcm90b3R5cGUgPSBSZWFjdC5Db21wb25lbnQucHJvdG90eXBlYC4gRG9uJ3QgdXNlIGFuIGFycm93IGZ1bmN0aW9uIHNpbmNlIGl0IFwiICsgJ2Nhbm5vdCBiZSBjYWxsZWQgd2l0aCBgbmV3YCBieSBSZWFjdC4nLCBfY29tcG9uZW50TmFtZSwgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCAvLyBSdW4gdGhlc2UgY2hlY2tzIGluIHByb2R1Y3Rpb24gb25seSBpZiB0aGUgZmxhZyBpcyBvZmYuXG4gIC8vIEV2ZW50dWFsbHkgd2UnbGwgZGVsZXRlIHRoaXMgYnJhbmNoIGFsdG9nZXRoZXIuXG4gIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lMiA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0pIHtcbiAgICAgICAgZXJyb3IoJ1RoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbiBjb21wb25lbnQgdGhhdCByZXR1cm5zIGEgY2xhc3MgaW5zdGFuY2UuICcgKyAnQ2hhbmdlICVzIHRvIGEgY2xhc3MgdGhhdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLiAnICsgXCJJZiB5b3UgY2FuJ3QgdXNlIGEgY2xhc3MgdHJ5IGFzc2lnbmluZyB0aGUgcHJvdG90eXBlIG9uIHRoZSBmdW5jdGlvbiBhcyBhIHdvcmthcm91bmQuIFwiICsgXCJgJXMucHJvdG90eXBlID0gUmVhY3QuQ29tcG9uZW50LnByb3RvdHlwZWAuIERvbid0IHVzZSBhbiBhcnJvdyBmdW5jdGlvbiBzaW5jZSBpdCBcIiArICdjYW5ub3QgYmUgY2FsbGVkIHdpdGggYG5ld2AgYnkgUmVhY3QuJywgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIsIF9jb21wb25lbnROYW1lMik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgY2xhc3MgaW5zdGFuY2VcblxuXG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gQ2xhc3NDb21wb25lbnQ7IC8vIFRocm93IG91dCBhbnkgaG9va3MgdGhhdCB3ZXJlIHVzZWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gICAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAgIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICAgIHZhciBoYXNDb250ZXh0ID0gZmFsc2U7XG5cbiAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB2YWx1ZS5zdGF0ZSAhPT0gbnVsbCAmJiB2YWx1ZS5zdGF0ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUuc3RhdGUgOiBudWxsO1xuICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCB2YWx1ZSk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGZpbmlzaENsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IEZ1bmN0aW9uQ29tcG9uZW50O1xuXG4gICAgaWYgKGdldElzSHlkcmF0aW5nKCkgJiYgaGFzSWQpIHtcbiAgICAgIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIHJlY29uY2lsZUNoaWxkcmVuKG51bGwsIHdvcmtJblByb2dyZXNzLCB2YWx1ZSwgcmVuZGVyTGFuZXMpO1xuXG4gICAge1xuICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCkge1xuICB7XG4gICAgaWYgKENvbXBvbmVudCkge1xuICAgICAgaWYgKENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcykge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogY2hpbGRDb250ZXh0VHlwZXMgY2Fubm90IGJlIGRlZmluZWQgb24gYSBmdW5jdGlvbiBjb21wb25lbnQuJywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuICAgICAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgd2FybmluZ0tleSA9IG93bmVyTmFtZSB8fCAnJztcbiAgICAgIHZhciBkZWJ1Z1NvdXJjZSA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZTtcblxuICAgICAgaWYgKGRlYnVnU291cmNlKSB7XG4gICAgICAgIHdhcm5pbmdLZXkgPSBkZWJ1Z1NvdXJjZS5maWxlTmFtZSArICc6JyArIGRlYnVnU291cmNlLmxpbmVOdW1iZXI7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmc1t3YXJuaW5nS2V5XSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ0Z1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGJlIGdpdmVuIHJlZnMuICcgKyAnQXR0ZW1wdHMgdG8gYWNjZXNzIHRoaXMgcmVmIHdpbGwgZmFpbC4gJyArICdEaWQgeW91IG1lYW4gdG8gdXNlIFJlYWN0LmZvcndhcmRSZWYoKT8lcycsIGluZm8pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChDb21wb25lbnQuZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dERlZmF1bHRQcm9wc09uRnVuY3Rpb25Db21wb25lbnRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBTdXBwb3J0IGZvciBkZWZhdWx0UHJvcHMgd2lsbCBiZSByZW1vdmVkIGZyb20gZnVuY3Rpb24gY29tcG9uZW50cyAnICsgJ2luIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIFVzZSBKYXZhU2NyaXB0IGRlZmF1bHQgcGFyYW1ldGVycyBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dERlZmF1bHRQcm9wc09uRnVuY3Rpb25Db21wb25lbnRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lMyA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4nLCBfY29tcG9uZW50TmFtZTMpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDb21wb25lbnQuY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIENvbXBvbmVudC5jb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lNCA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU0XSkge1xuICAgICAgICBlcnJvcignJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgY29udGV4dFR5cGUuJywgX2NvbXBvbmVudE5hbWU0KTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU0XSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBTVVNQRU5ERURfTUFSS0VSID0ge1xuICBkZWh5ZHJhdGVkOiBudWxsLFxuICB0cmVlQ29udGV4dDogbnVsbCxcbiAgcmV0cnlMYW5lOiBOb0xhbmVcbn07XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykge1xuICByZXR1cm4ge1xuICAgIGJhc2VMYW5lczogcmVuZGVyTGFuZXMsXG4gICAgY2FjaGVQb29sOiBnZXRTdXNwZW5kZWRDYWNoZSgpXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcykge1xuICB2YXIgY2FjaGVQb29sID0gbnVsbDtcblxuICB7XG4gICAgdmFyIHByZXZDYWNoZVBvb2wgPSBwcmV2T2Zmc2NyZWVuU3RhdGUuY2FjaGVQb29sO1xuXG4gICAgaWYgKHByZXZDYWNoZVBvb2wgIT09IG51bGwpIHtcbiAgICAgIHZhciBwYXJlbnRDYWNoZSA9IENhY2hlQ29udGV4dC5fY3VycmVudFZhbHVlIDtcblxuICAgICAgaWYgKHByZXZDYWNoZVBvb2wucGFyZW50ICE9PSBwYXJlbnRDYWNoZSkge1xuICAgICAgICAvLyBEZXRlY3RlZCBhIHJlZnJlc2ggaW4gdGhlIHBhcmVudC4gVGhpcyBvdmVycmlkZXMgYW55IHByZXZpb3VzbHlcbiAgICAgICAgLy8gc3VzcGVuZGVkIGNhY2hlLlxuICAgICAgICBjYWNoZVBvb2wgPSB7XG4gICAgICAgICAgcGFyZW50OiBwYXJlbnRDYWNoZSxcbiAgICAgICAgICBwb29sOiBwYXJlbnRDYWNoZVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UgY2FuIHJldXNlIHRoZSBjYWNoZSBmcm9tIGxhc3QgdGltZS4gVGhlIG9ubHkgdGhpbmcgdGhhdCB3b3VsZCBoYXZlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gaXQgaXMgYSBwYXJlbnQgcmVmcmVzaCwgd2hpY2ggd2UgY2hlY2tlZCBmb3IgYWJvdmUuXG4gICAgICAgIGNhY2hlUG9vbCA9IHByZXZDYWNoZVBvb2w7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gcHJldmlvdXMgY2FjaGUgcG9vbCwgZ3JhYiB0aGUgY3VycmVudCBvbmUuXG4gICAgICBjYWNoZVBvb2wgPSBnZXRTdXNwZW5kZWRDYWNoZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmFzZUxhbmVzOiBtZXJnZUxhbmVzKHByZXZPZmZzY3JlZW5TdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKSxcbiAgICBjYWNoZVBvb2w6IGNhY2hlUG9vbFxuICB9O1xufSAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgaW5saW5lIHRoaXMgYmFja1xuXG5cbmZ1bmN0aW9uIHNob3VsZFJlbWFpbk9uRmFsbGJhY2soY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIElmIHdlJ3JlIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0b1xuICAvLyByZW1haW4gb24gdGhhdCBmYWxsYmFjayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNvbnRlbnQgaGFzIHJlc29sdmVkLlxuICAvLyBGb3IgZXhhbXBsZSwgU3VzcGVuc2VMaXN0IGNvb3JkaW5hdGVzIHdoZW4gbmVzdGVkIGNvbnRlbnQgYXBwZWFycy5cbiAgLy8gVE9ETzogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvZmZzY3JlZW4gcHJlcmVuZGVyaW5nLCB0aGlzIHNob3VsZCBhbHNvIGNoZWNrXG4gIC8vIHdoZXRoZXIgdGhlIGN1cnJlbnQgZmliZXIgKGlmIGl0IGV4aXN0cykgd2FzIHZpc2libGUgaW4gdGhlIHByZXZpb3VzIHRyZWUuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgLy8gQ3VycmVudGx5IHNob3dpbmcgY29udGVudC4gRG9uJ3QgaGlkZSBpdCwgZXZlbiBpZiBGb3JjZVN1c3BlbnNlRmFsbGJhY2tcbiAgICAgIC8vIGlzIHRydWUuIE1vcmUgcHJlY2lzZSBuYW1lIG1pZ2h0IGJlIFwiRm9yY2VSZW1haW5TdXNwZW5zZUZhbGxiYWNrXCIuXG4gICAgICAvLyBOb3RlOiBUaGlzIGlzIGEgZmFjdG9yaW5nIHNtZWxsLiBDYW4ndCByZW1haW4gb24gYSBmYWxsYmFjayBpZiB0aGVyZSdzXG4gICAgICAvLyBubyBmYWxsYmFjayB0byByZW1haW4gb24uXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IC8vIE5vdCBjdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBDb25zdWx0IHRoZSBTdXNwZW5zZSBjb250ZXh0LlxuXG5cbiAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgcmV0dXJuIGhhc1N1c3BlbnNlTGlzdENvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCBwcmltYXJ5VHJlZURpZERlZmVyLCByZW5kZXJMYW5lcykge1xuICB2YXIgcmVtYWluaW5nTGFuZXMgPSBjdXJyZW50ICE9PSBudWxsID8gcmVtb3ZlTGFuZXMoY3VycmVudC5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykgOiBOb0xhbmVzO1xuXG4gIGlmIChwcmltYXJ5VHJlZURpZERlZmVyKSB7XG4gICAgLy8gQSB1c2VEZWZlcnJlZFZhbHVlIGhvb2sgc3Bhd25lZCBhIGRlZmVycmVkIHRhc2sgaW5zaWRlIHRoZSBwcmltYXJ5IHRyZWUuXG4gICAgLy8gRW5zdXJlIHRoYXQgd2UgcmV0cnkgdGhpcyBjb21wb25lbnQgYXQgdGhlIGRlZmVycmVkIHByaW9yaXR5LlxuICAgIC8vIFRPRE86IFdlIGNvdWxkIG1ha2UgdGhpcyBhIHBlci1zdWJ0cmVlIHZhbHVlIGluc3RlYWQgb2YgYSBnbG9iYWwgb25lLlxuICAgIC8vIFdvdWxkIG5lZWQgdG8gdHJhY2sgaXQgb24gdGhlIGNvbnRleHQgc3RhY2sgc29tZWhvdywgc2ltaWxhciB0byB3aGF0XG4gICAgLy8gd2UnZCBoYXZlIHRvIGRvIGZvciByZXN1bWFibGUgY29udGV4dHMuXG4gICAgcmVtYWluaW5nTGFuZXMgPSBtZXJnZUxhbmVzKHJlbWFpbmluZ0xhbmVzLCBwZWVrRGVmZXJyZWRMYW5lKCkpO1xuICB9XG5cbiAgcmV0dXJuIHJlbWFpbmluZ0xhbmVzO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wczsgLy8gVGhpcyBpcyB1c2VkIGJ5IERldlRvb2xzIHRvIGZvcmNlIGEgYm91bmRhcnkgdG8gc3VzcGVuZC5cblxuICB7XG4gICAgaWYgKHNob3VsZFN1c3BlbmQod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzaG93RmFsbGJhY2sgPSBmYWxzZTtcbiAgdmFyIGRpZFN1c3BlbmQgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxO1xuXG4gIGlmIChkaWRTdXNwZW5kIHx8IHNob3VsZFJlbWFpbk9uRmFsbGJhY2soY3VycmVudCkpIHtcbiAgICAvLyBTb21ldGhpbmcgaW4gdGhpcyBib3VuZGFyeSdzIHN1YnRyZWUgYWxyZWFkeSBzdXNwZW5kZWQuIFN3aXRjaCB0b1xuICAgIC8vIHJlbmRlcmluZyB0aGUgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgc2hvd0ZhbGxiYWNrID0gdHJ1ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+RGlkQ2FwdHVyZTtcbiAgfSAvLyBDaGVjayBpZiB0aGUgcHJpbWFyeSBjaGlsZHJlbiBzcGF3bmVkIGEgZGVmZXJyZWQgdGFzayAodXNlRGVmZXJyZWRWYWx1ZSlcbiAgLy8gZHVyaW5nIHRoZSBmaXJzdCBwYXNzLlxuXG5cbiAgdmFyIGRpZFByaW1hcnlDaGlsZHJlbkRlZmVyID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkRGVmZXIpICE9PSBOb0ZsYWdzJDE7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH5EaWREZWZlcjsgLy8gT0ssIHRoZSBuZXh0IHBhcnQgaXMgY29uZnVzaW5nLiBXZSdyZSBhYm91dCB0byByZWNvbmNpbGUgdGhlIFN1c3BlbnNlXG4gIC8vIGJvdW5kYXJ5J3MgY2hpbGRyZW4uIFRoaXMgaW52b2x2ZXMgc29tZSBjdXN0b20gcmVjb25jaWxpYXRpb24gbG9naWMuIFR3b1xuICAvLyBtYWluIHJlYXNvbnMgdGhpcyBpcyBzbyBjb21wbGljYXRlZC5cbiAgLy9cbiAgLy8gRmlyc3QsIExlZ2FjeSBNb2RlIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlXG4gIC8vIHByaW1hcnkgdHJlZSB3aWxsIGNvbW1pdCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIHNvIHdoZW4gd2UgZG8gdGhlXG4gIC8vIHNlY29uZCBwYXNzIHRvIHJlbmRlciB0aGUgZmFsbGJhY2ssIHdlIGRvIHNvbWUgZXhjZWVkaW5nbHksIHVoLCBjbGV2ZXJcbiAgLy8gaGFja3MgdG8gbWFrZSB0aGF0IG5vdCB0b3RhbGx5IGJyZWFrLiBMaWtlIHRyYW5zZmVycmluZyBlZmZlY3RzIGFuZFxuICAvLyBkZWxldGlvbnMgZnJvbSBoaWRkZW4gdHJlZS4gSW4gQ29uY3VycmVudCBNb2RlLCBpdCdzIG11Y2ggc2ltcGxlcixcbiAgLy8gYmVjYXVzZSB3ZSBiYWlsb3V0IG9uIHRoZSBwcmltYXJ5IHRyZWUgY29tcGxldGVseSBhbmQgbGVhdmUgaXQgaW4gaXRzIG9sZFxuICAvLyBzdGF0ZSwgbm8gZWZmZWN0cy4gU2FtZSBhcyB3aGF0IHdlIGRvIGZvciBPZmZzY3JlZW4gKGV4Y2VwdCB0aGF0XG4gIC8vIE9mZnNjcmVlbiBkb2Vzbid0IGhhdmUgdGhlIGZpcnN0IHJlbmRlciBwYXNzKS5cbiAgLy9cbiAgLy8gU2Vjb25kIGlzIGh5ZHJhdGlvbi4gRHVyaW5nIGh5ZHJhdGlvbiwgdGhlIFN1c3BlbnNlIGZpYmVyIGhhcyBhIHNsaWdodGx5XG4gIC8vIGRpZmZlcmVudCBsYXlvdXQsIHdoZXJlIHRoZSBjaGlsZCBwb2ludHMgdG8gYSBkZWh5ZHJhdGVkIGZyYWdtZW50LCB3aGljaFxuICAvLyBjb250YWlucyB0aGUgRE9NIHJlbmRlcmVkIGJ5IHRoZSBzZXJ2ZXIuXG4gIC8vXG4gIC8vIFRoaXJkLCBldmVuIGlmIHlvdSBzZXQgYWxsIHRoYXQgYXNpZGUsIFN1c3BlbnNlIGlzIGxpa2UgZXJyb3IgYm91bmRhcmllcyBpblxuICAvLyB0aGF0IHdlIGZpcnN0IHdlIHRyeSB0byByZW5kZXIgb25lIHRyZWUsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSByZW5kZXIgYWdhaW5cbiAgLy8gYW5kIHN3aXRjaCB0byBhIGRpZmZlcmVudCB0cmVlLiBMaWtlIGEgdHJ5L2NhdGNoIGJsb2NrLiBTbyB3ZSBoYXZlIHRvIHRyYWNrXG4gIC8vIHdoaWNoIGJyYW5jaCB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nLiBJZGVhbGx5IHdlIHdvdWxkIG1vZGVsIHRoaXMgdXNpbmdcbiAgLy8gYSBzdGFjay5cblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICAvLyBTcGVjaWFsIHBhdGggZm9yIGh5ZHJhdGlvblxuICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBoeWRyYXRpbmcsIHRyeSB0byBoeWRyYXRlIHRoaXMgYm91bmRhcnkuXG4gICAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAgIC8vIFdlIG11c3QgcHVzaCB0aGUgc3VzcGVuc2UgaGFuZGxlciBjb250ZXh0ICpiZWZvcmUqIGF0dGVtcHRpbmcgdG9cbiAgICAgIC8vIGh5ZHJhdGUsIHRvIGF2b2lkIGEgbWlzbWF0Y2ggaW4gY2FzZSBpdCBlcnJvcnMuXG4gICAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwdXNoRmFsbGJhY2tUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIH1cblxuICAgICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlU3VzcGVuc2VJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7IC8vIFRoaXMgY291bGQndmUgYmVlbiBhIGRlaHlkcmF0ZWQgc3VzcGVuc2UgY29tcG9uZW50LlxuXG4gICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBkZWh5ZHJhdGVkID0gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChkZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50RGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KHdvcmtJblByb2dyZXNzLCBkZWh5ZHJhdGVkKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBJZiBoeWRyYXRpb24gZGlkbid0IHN1Y2NlZWQsIGZhbGwgdGhyb3VnaCB0byB0aGUgbm9ybWFsIFN1c3BlbnNlIHBhdGguXG4gICAgICAvLyBUbyBhdm9pZCBhIHN0YWNrIG1pc21hdGNoIHdlIG5lZWQgdG8gcG9wIHRoZSBTdXNwZW5zZSBoYW5kbGVyIHRoYXQgd2VcbiAgICAgIC8vIHB1c2hlZCBhYm92ZS4gVGhpcyB3aWxsIGJlY29tZSBsZXNzIGF3a3dhcmQgd2hlbiBtb3ZlIHRoZSBoeWRyYXRpb25cbiAgICAgIC8vIGxvZ2ljIHRvIGl0cyBvd24gZmliZXIuXG5cblxuICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgbmV4dEZhbGxiYWNrQ2hpbGRyZW4gPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG5cbiAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICBwdXNoRmFsbGJhY2tUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHZhciBmYWxsYmFja0ZyYWdtZW50ID0gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIG5leHRGYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIGRpZFByaW1hcnlDaGlsZHJlbkRlZmVyLCByZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcblxuICAgICAgcmV0dXJuIGZhbGxiYWNrRnJhZ21lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYW4gdXBkYXRlLlxuICAgIC8vIFNwZWNpYWwgcGF0aCBmb3IgaHlkcmF0aW9uXG4gICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBfZGVoeWRyYXRlZCA9IHByZXZTdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICBpZiAoX2RlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZURlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZGlkU3VzcGVuZCwgZGlkUHJpbWFyeUNoaWxkcmVuRGVmZXIsIG5leHRQcm9wcywgX2RlaHlkcmF0ZWQsIHByZXZTdGF0ZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgIHB1c2hGYWxsYmFja1RyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbiA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuLCBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICB2YXIgcHJldk9mZnNjcmVlblN0YXRlID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlO1xuICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50Mi5tZW1vaXplZFN0YXRlID0gcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDIuY2hpbGRMYW5lcyA9IGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKGN1cnJlbnQsIGRpZFByaW1hcnlDaGlsZHJlbkRlZmVyLCByZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4yID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50MyA9IHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjIsIHJlbmRlckxhbmVzKTtcblxuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gX3ByaW1hcnlDaGlsZEZyYWdtZW50MztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAndmlzaWJsZScsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBtb3VudFdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIocHJpbWFyeUNoaWxkUHJvcHMsIG1vZGUpO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAnaGlkZGVuJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSAmJiBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAgIC8vIGNvbXBsZXRlZCwgZXZlbiB0aG91Z2ggaXQncyBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuXG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgIH1cblxuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihwcmltYXJ5Q2hpbGRQcm9wcywgbW9kZSk7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKG9mZnNjcmVlblByb3BzLCBtb2RlLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGUgcHJvcHMgYXJndW1lbnQgdG8gYGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbmAgaXMgYGFueWAgdHlwZWQsIHNvIHdlIHVzZVxuICAvLyB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gdG8gY29uc3RyYWluIGl0LlxuICByZXR1cm4gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKG9mZnNjcmVlblByb3BzLCBtb2RlLCBOb0xhbmVzLCBudWxsKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcykge1xuICAvLyBUaGUgcHJvcHMgYXJndW1lbnQgdG8gYGNyZWF0ZVdvcmtJblByb2dyZXNzYCBpcyBgYW55YCB0eXBlZCwgc28gd2UgdXNlIHRoaXNcbiAgLy8gd3JhcHBlciBmdW5jdGlvbiB0byBjb25zdHJhaW4gaXQuXG4gIHJldHVybiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH0pO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFuZXMgPSByZW5kZXJMYW5lcztcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gbnVsbDtcblxuICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIC8vIERlbGV0ZSB0aGUgZmFsbGJhY2sgY2hpbGQgZnJhZ21lbnRcbiAgICB2YXIgZGVsZXRpb25zID0gd29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zO1xuXG4gICAgaWYgKGRlbGV0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gW2N1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnRdO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2hpbGREZWxldGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRpb25zLnB1c2goY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCk7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgZmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuXG4gIGlmICggLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlICYmIC8vIE1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2Vjb25kIHBhc3MsIGkuZS4gdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgd2FzXG4gIC8vIGFscmVhZHkgY2xvbmVkLiBJbiBsZWdhY3kgbW9kZSwgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGlzIGlzbid0IHRydWUgaXNcbiAgLy8gd2hlbiBEZXZUb29scyBmb3JjZXMgdXMgdG8gZGlzcGxheSBhIGZhbGxiYWNrOyB3ZSBza2lwIHRoZSBmaXJzdCByZW5kZXJcbiAgLy8gcGFzcyBlbnRpcmVseSBhbmQgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjay4gKEluIENvbmN1cnJlbnRcbiAgLy8gTW9kZSwgU3VzcGVuc2VMaXN0IGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbywgYnV0IHRoaXMgaXMgYSBsZWdhY3ktXG4gIC8vIG9ubHkgY29kZXBhdGguKVxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50KSB7XG4gICAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgZHVyYXRpb25zIGZyb20gdGhlIGZpcnN0IHBhc3Mgc28gdGhleSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlXG4gICAgICAvLyBmaW5hbCBhbW91bnRzLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUsIHNpbmNlIHdlJ3JlIGludGVudGlvbmFsbHlcbiAgICAgIC8vIG5vdCBtZWFzdXJpbmcgcGFydCBvZiB0aGUgcmVuZGVyIHBoYXNlLCBidXQgdGhpcyBtYWtlcyBpdCBtYXRjaCB3aGF0IHdlXG4gICAgICAvLyBkbyBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9IC8vIFRoZSBmYWxsYmFjayBmaWJlciB3YXMgYWRkZWQgYXMgYSBkZWxldGlvbiBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuXG4gICAgLy8gSG93ZXZlciwgc2luY2Ugd2UncmUgZ29pbmcgdG8gcmVtYWluIG9uIHRoZSBmYWxsYmFjaywgd2Ugbm8gbG9uZ2VyIHdhbnRcbiAgICAvLyB0byBkZWxldGUgaXQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwgcHJpbWFyeUNoaWxkUHJvcHMpOyAvLyBTaW5jZSB3ZSdyZSByZXVzaW5nIGEgY3VycmVudCB0cmVlLCB3ZSBuZWVkIHRvIHJldXNlIHRoZSBmbGFncywgdG9vLlxuICAgIC8vIChXZSBkb24ndCBkbyB0aGlzIGluIGxlZ2FjeSBtb2RlLCBiZWNhdXNlIGluIGxlZ2FjeSBtb2RlIHdlIGRvbid0IHJlLXVzZVxuICAgIC8vIHRoZSBjdXJyZW50IHRyZWU7IHNlZSBwcmV2aW91cyBicmFuY2guKVxuXG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc3VidHJlZUZsYWdzID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnN1YnRyZWVGbGFncyAmIFN0YXRpY01hc2s7XG4gIH1cblxuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmIChjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCwgZmFsbGJhY2tDaGlsZHJlbik7XG4gIH0gZWxzZSB7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgICAvLyBtb3VudGVkIGJ1dCB0aGlzIGlzIGEgbmV3IGZpYmVyLlxuXG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcywgcmVjb3ZlcmFibGVFcnJvcikge1xuICAvLyBGYWxsaW5nIGJhY2sgdG8gY2xpZW50IHJlbmRlcmluZy4gQmVjYXVzZSB0aGlzIGhhcyBwZXJmb3JtYW5jZVxuICAvLyBpbXBsaWNhdGlvbnMsIGl0J3MgY29uc2lkZXJlZCBhIHJlY292ZXJhYmxlIGVycm9yLCBldmVuIHRob3VnaCB0aGUgdXNlclxuICAvLyBsaWtlbHkgd29uJ3Qgb2JzZXJ2ZSBhbnl0aGluZyB3cm9uZyB3aXRoIHRoZSBVSS5cbiAgLy9cbiAgLy8gVGhlIGVycm9yIGlzIHBhc3NlZCBpbiBhcyBhbiBhcmd1bWVudCB0byBlbmZvcmNlIHRoYXQgZXZlcnkgY2FsbGVyIHByb3ZpZGVcbiAgLy8gYSBjdXN0b20gbWVzc2FnZSwgb3IgZXhwbGljaXRseSBvcHQgb3V0IChjdXJyZW50bHkgdGhlIG9ubHkgcGF0aCB0aGF0IG9wdHNcbiAgLy8gb3V0IGlzIGxlZ2FjeSBtb2RlOyBldmVyeSBjb25jdXJyZW50IHBhdGggcHJvdmlkZXMgYW4gZXJyb3IpLlxuICBpZiAocmVjb3ZlcmFibGVFcnJvciAhPT0gbnVsbCkge1xuICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IocmVjb3ZlcmFibGVFcnJvcik7XG4gIH0gLy8gVGhpcyB3aWxsIGFkZCB0aGUgb2xkIGZpYmVyIHRvIHRoZSBkZWxldGlvbiBsaXN0XG5cblxuICByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbnVsbCwgcmVuZGVyTGFuZXMpOyAvLyBXZSdyZSBub3cgbm90IHN1c3BlbmRlZCBub3IgZGVoeWRyYXRlZC5cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJpbWFyeUNoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4pOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2UgYm91bmRhcnkpIGFscmVhZHlcbiAgLy8gbW91bnRlZCBidXQgdGhpcyBpcyBhIG5ldyBmaWJlci5cblxuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VGYWxsYmFja0FmdGVyUmV0cnlXaXRob3V0SHlkcmF0aW5nKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBmaWJlck1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ3Zpc2libGUnLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKHByaW1hcnlDaGlsZFByb3BzLCBmaWJlck1vZGUpO1xuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgZmliZXJNb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7IC8vIE5lZWRzIGEgcGxhY2VtZW50IGVmZmVjdCBiZWNhdXNlIHRoZSBwYXJlbnQgKHRoZSBTdXNwZW5zZVxuICAvLyBib3VuZGFyeSkgYWxyZWFkeSBtb3VudGVkIGJ1dCB0aGlzIGlzIGEgbmV3IGZpYmVyLlxuXG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmcgPSBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAvLyBXZSB3aWxsIGhhdmUgZHJvcHBlZCB0aGUgZWZmZWN0IGxpc3Qgd2hpY2ggY29udGFpbnMgdGhlXG4gICAgLy8gZGVsZXRpb24uIFdlIG5lZWQgdG8gcmVjb25jaWxlIHRvIGRlbGV0ZSB0aGUgY3VycmVudCBjaGlsZC5cbiAgICByZWNvbmNpbGVDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgY3VycmVudC5jaGlsZCwgbnVsbCwgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gbW91bnREZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlSW5zdGFuY2UsIHJlbmRlckxhbmVzKSB7XG4gIC8vIER1cmluZyB0aGUgZmlyc3QgcGFzcywgd2UnbGwgYmFpbCBvdXQgYW5kIG5vdCBkcmlsbCBpbnRvIHRoZSBjaGlsZHJlbi5cbiAgLy8gSW5zdGVhZCwgd2UnbGwgbGVhdmUgdGhlIGNvbnRlbnQgaW4gcGxhY2UgYW5kIHRyeSB0byBoeWRyYXRlIGl0IGxhdGVyLlxuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHtcbiAgICAgIGVycm9yKCdDYW5ub3QgaHlkcmF0ZSBTdXNwZW5zZSBpbiBsZWdhY3kgbW9kZS4gU3dpdGNoIGZyb20gJyArICdSZWFjdERPTS5oeWRyYXRlKGVsZW1lbnQsIGNvbnRhaW5lcikgdG8gJyArICdSZWFjdERPTUNsaWVudC5oeWRyYXRlUm9vdChjb250YWluZXIsIDxBcHAgLz4pJyArICcucmVuZGVyKGVsZW1lbnQpIG9yIHJlbW92ZSB0aGUgU3VzcGVuc2UgY29tcG9uZW50cyBmcm9tICcgKyAndGhlIHNlcnZlciByZW5kZXJlZCBjb21wb25lbnRzLicpO1xuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbGFuZVRvTGFuZXMoU3luY0xhbmUpO1xuICB9IGVsc2UgaWYgKGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKHN1c3BlbnNlSW5zdGFuY2UpKSB7XG4gICAgLy8gVGhpcyBpcyBhIGNsaWVudC1vbmx5IGJvdW5kYXJ5LiBTaW5jZSB3ZSB3b24ndCBnZXQgYW55IGNvbnRlbnQgZnJvbSB0aGUgc2VydmVyXG4gICAgLy8gZm9yIHRoaXMsIHdlIG5lZWQgdG8gc2NoZWR1bGUgdGhhdCBhdCBhIGhpZ2hlciBwcmlvcml0eSBiYXNlZCBvbiB3aGVuIGl0IHdvdWxkXG4gICAgLy8gaGF2ZSB0aW1lZCBvdXQuIEluIHRoZW9yeSB3ZSBjb3VsZCByZW5kZXIgaXQgaW4gdGhpcyBwYXNzIGJ1dCBpdCB3b3VsZCBoYXZlIHRoZVxuICAgIC8vIHdyb25nIHByaW9yaXR5IGFzc29jaWF0ZWQgd2l0aCBpdCBhbmQgd2lsbCBwcmV2ZW50IGh5ZHJhdGlvbiBvZiBwYXJlbnQgcGF0aC5cbiAgICAvLyBJbnN0ZWFkLCB3ZSdsbCBsZWF2ZSB3b3JrIGxlZnQgb24gaXQgdG8gcmVuZGVyIGl0IGluIGEgc2VwYXJhdGUgY29tbWl0LlxuICAgIC8vIFRPRE8gVGhpcyB0aW1lIHNob3VsZCBiZSB0aGUgdGltZSBhdCB3aGljaCB0aGUgc2VydmVyIHJlbmRlcmVkIHJlc3BvbnNlIHRoYXQgaXNcbiAgICAvLyBhIHBhcmVudCB0byB0aGlzIGJvdW5kYXJ5IHdhcyBkaXNwbGF5ZWQuIEhvd2V2ZXIsIHNpbmNlIHdlIGN1cnJlbnRseSBkb24ndCBoYXZlXG4gICAgLy8gYSBwcm90b2NvbCB0byB0cmFuc2ZlciB0aGF0IHRpbWUsIHdlJ2xsIGp1c3QgZXN0aW1hdGUgaXQgYnkgdXNpbmcgdGhlIGN1cnJlbnRcbiAgICAvLyB0aW1lLiBUaGlzIHdpbGwgbWVhbiB0aGF0IFN1c3BlbnNlIHRpbWVvdXRzIGFyZSBzbGlnaHRseSBzaGlmdGVkIHRvIGxhdGVyIHRoYW5cbiAgICAvLyB0aGV5IHNob3VsZCBiZS5cbiAgICAvLyBTY2hlZHVsZSBhIG5vcm1hbCBwcmkgdXBkYXRlIHRvIHJlbmRlciB0aGlzIGNvbnRlbnQuXG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBsYW5lVG9MYW5lcyhEZWZhdWx0SHlkcmF0aW9uTGFuZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UnbGwgY29udGludWUgaHlkcmF0aW5nIHRoZSByZXN0IGF0IG9mZnNjcmVlbiBwcmlvcml0eSBzaW5jZSB3ZSdsbCBhbHJlYWR5XG4gICAgLy8gYmUgc2hvd2luZyB0aGUgcmlnaHQgY29udGVudCBjb21pbmcgZnJvbSB0aGUgc2VydmVyLCBpdCBpcyBubyBydXNoLlxuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbGFuZVRvTGFuZXMoT2Zmc2NyZWVuTGFuZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBkaWRTdXNwZW5kLCBkaWRQcmltYXJ5Q2hpbGRyZW5EZWZlciwgbmV4dFByb3BzLCBzdXNwZW5zZUluc3RhbmNlLCBzdXNwZW5zZVN0YXRlLCByZW5kZXJMYW5lcykge1xuICBpZiAoIWRpZFN1c3BlbmQpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCByZW5kZXIgcGFzcy4gQXR0ZW1wdCB0byBoeWRyYXRlLlxuICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7IC8vIFdlIHNob3VsZCBuZXZlciBiZSBoeWRyYXRpbmcgYXQgdGhpcyBwb2ludCBiZWNhdXNlIGl0IGlzIHRoZSBmaXJzdCBwYXNzLFxuICAgIC8vIGJ1dCBhZnRlciB3ZSd2ZSBhbHJlYWR5IGNvbW1pdHRlZCBvbmNlLlxuXG4gICAgd2FybklmSHlkcmF0aW5nKCk7XG5cbiAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgcmV0dXJuIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKHN1c3BlbnNlSW5zdGFuY2UpKSB7XG4gICAgICAvLyBUaGlzIGJvdW5kYXJ5IGlzIGluIGEgcGVybWFuZW50IGZhbGxiYWNrIHN0YXRlLiBJbiB0aGlzIGNhc2UsIHdlJ2xsIG5ldmVyXG4gICAgICAvLyBnZXQgYW4gdXBkYXRlIGFuZCB3ZSdsbCBuZXZlciBiZSBhYmxlIHRvIGh5ZHJhdGUgdGhlIGZpbmFsIGNvbnRlbnQuIExldCdzIGp1c3QgdHJ5IHRoZVxuICAgICAgLy8gY2xpZW50IHNpZGUgcmVuZGVyIGluc3RlYWQuXG4gICAgICB2YXIgZGlnZXN0O1xuICAgICAgdmFyIG1lc3NhZ2UsIHN0YWNrO1xuXG4gICAgICB7XG4gICAgICAgIHZhciBfZ2V0U3VzcGVuc2VJbnN0YW5jZUYgPSBnZXRTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2tFcnJvckRldGFpbHMoc3VzcGVuc2VJbnN0YW5jZSk7XG5cbiAgICAgICAgZGlnZXN0ID0gX2dldFN1c3BlbnNlSW5zdGFuY2VGLmRpZ2VzdDtcbiAgICAgICAgbWVzc2FnZSA9IF9nZXRTdXNwZW5zZUluc3RhbmNlRi5tZXNzYWdlO1xuICAgICAgICBzdGFjayA9IF9nZXRTdXNwZW5zZUluc3RhbmNlRi5zdGFjaztcbiAgICAgIH1cblxuICAgICAgdmFyIGNhcHR1cmVkVmFsdWUgPSBudWxsOyAvLyBUT0RPOiBGaWd1cmUgb3V0IGEgYmV0dGVyIHNpZ25hbCB0aGFuIGVuY29kaW5nIGEgbWFnaWMgZGlnZXN0IHZhbHVlLlxuXG4gICAgICB7XG4gICAgICAgIHZhciBlcnJvcjtcblxuICAgICAgICBpZiAobWVzc2FnZSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9wcm9kLWVycm9yLWNvZGVzXG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ1RoZSBzZXJ2ZXIgY291bGQgbm90IGZpbmlzaCB0aGlzIFN1c3BlbnNlIGJvdW5kYXJ5LCBsaWtlbHkgJyArICdkdWUgdG8gYW4gZXJyb3IgZHVyaW5nIHNlcnZlciByZW5kZXJpbmcuIFN3aXRjaGVkIHRvICcgKyAnY2xpZW50IHJlbmRlcmluZy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yLmRpZ2VzdCA9IGRpZ2VzdDtcbiAgICAgICAgY2FwdHVyZWRWYWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUoZXJyb3IsIGRpZ2VzdCwgc3RhY2spO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzLCBjYXB0dXJlZFZhbHVlKTtcbiAgICB9XG4gICAgLy8gYW55IGNvbnRleHQgaGFzIGNoYW5nZWQsIHdlIG5lZWQgdG8gdHJlYXQgaXMgYXMgaWYgdGhlIGlucHV0IG1pZ2h0IGhhdmUgY2hhbmdlZC5cblxuXG4gICAgdmFyIGhhc0NvbnRleHRDaGFuZ2VkID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgY3VycmVudC5jaGlsZExhbmVzKTtcblxuICAgIGlmIChkaWRSZWNlaXZlVXBkYXRlIHx8IGhhc0NvbnRleHRDaGFuZ2VkKSB7XG4gICAgICAvLyBUaGlzIGJvdW5kYXJ5IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBmaXJzdCByZW5kZXIuIFRoaXMgbWVhbnMgdGhhdCB3ZSBhcmUgbm93IHVuYWJsZSB0b1xuICAgICAgLy8gaHlkcmF0ZSBpdC4gV2UgbWlnaHQgc3RpbGwgYmUgYWJsZSB0byBoeWRyYXRlIGl0IHVzaW5nIGEgaGlnaGVyIHByaW9yaXR5IGxhbmUuXG4gICAgICB2YXIgcm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuXG4gICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgYXR0ZW1wdEh5ZHJhdGlvbkF0TGFuZSA9IGdldEJ1bXBlZExhbmVGb3JIeWRyYXRpb24ocm9vdCwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIGlmIChhdHRlbXB0SHlkcmF0aW9uQXRMYW5lICE9PSBOb0xhbmUgJiYgYXR0ZW1wdEh5ZHJhdGlvbkF0TGFuZSAhPT0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUpIHtcbiAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IG11dGF0aW5nIHNpbmNlIHRoaXMgcmVuZGVyIHdpbGwgZ2V0IGludGVycnVwdGVkLiBUaGlzXG4gICAgICAgICAgLy8gaXMgb25lIG9mIHRoZSB2ZXJ5IHJhcmUgdGltZXMgd2hlcmUgd2UgbXV0YXRlIHRoZSBjdXJyZW50IHRyZWVcbiAgICAgICAgICAvLyBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgICAgICBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSA9IGF0dGVtcHRIeWRyYXRpb25BdExhbmU7XG4gICAgICAgICAgZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGN1cnJlbnQsIGF0dGVtcHRIeWRyYXRpb25BdExhbmUpO1xuICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBjdXJyZW50LCBhdHRlbXB0SHlkcmF0aW9uQXRMYW5lKTsgLy8gVGhyb3cgYSBzcGVjaWFsIG9iamVjdCB0aGF0IHNpZ25hbHMgdG8gdGhlIHdvcmsgbG9vcCB0aGF0IGl0IHNob3VsZFxuICAgICAgICAgIC8vIGludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBCZWNhdXNlIHdlJ3JlIGluc2lkZSBhIFJlYWN0LW9ubHkgZXhlY3V0aW9uIHN0YWNrLCB3ZSBkb24ndFxuICAgICAgICAgIC8vIHN0cmljdGx5IG5lZWQgdG8gdGhyb3cgaGVyZSDigJQgd2UgY291bGQgaW5zdGVhZCBtb2RpZnkgc29tZSBpbnRlcm5hbFxuICAgICAgICAgIC8vIHdvcmsgbG9vcCBzdGF0ZS4gQnV0IHVzaW5nIGFuIGV4Y2VwdGlvbiBtZWFucyB3ZSBkb24ndCBuZWVkIHRvXG4gICAgICAgICAgLy8gY2hlY2sgZm9yIHRoaXMgY2FzZSBvbiBldmVyeSBpdGVyYXRpb24gb2YgdGhlIHdvcmsgbG9vcC4gU28gZG9pbmdcbiAgICAgICAgICAvLyBpdCB0aGlzIHdheSBtb3ZlcyB0aGUgY2hlY2sgb3V0IG9mIHRoZSBmYXN0IHBhdGguXG5cbiAgICAgICAgICB0aHJvdyBTZWxlY3RpdmVIeWRyYXRpb25FeGNlcHRpb247XG4gICAgICAgIH1cbiAgICAgIH0gLy8gSWYgd2UgZGlkIG5vdCBzZWxlY3RpdmVseSBoeWRyYXRlLCB3ZSdsbCBjb250aW51ZSByZW5kZXJpbmcgd2l0aG91dFxuICAgICAgLy8gaHlkcmF0aW5nLiBNYXJrIHRoaXMgdHJlZSBhcyBzdXNwZW5kZWQgdG8gcHJldmVudCBpdCBmcm9tIGNvbW1pdHRpbmdcbiAgICAgIC8vIG91dHNpZGUgYSB0cmFuc2l0aW9uLlxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgcGF0aCBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIGh5ZHJhdGlvbiBsYW5lIGFscmVhZHkgc3VzcGVuZGVkLlxuICAgICAgLy8gQ3VycmVudGx5LCBpdCBhbHNvIGhhcHBlbnMgZHVyaW5nIHN5bmMgdXBkYXRlcyBiZWNhdXNlIHRoZXJlIGlzIG5vXG4gICAgICAvLyBoeWRyYXRpb24gbGFuZSBmb3Igc3luYyB1cGRhdGVzLlxuICAgICAgLy8gVE9ETzogV2Ugc2hvdWxkIGlkZWFsbHkgaGF2ZSBhIHN5bmMgaHlkcmF0aW9uIGxhbmUgdGhhdCB3ZSBjYW4gYXBwbHkgdG8gZG9cbiAgICAgIC8vIGEgcGFzcyB3aGVyZSB3ZSBoeWRyYXRlIHRoaXMgc3VidHJlZSBpbiBwbGFjZSB1c2luZyB0aGUgcHJldmlvdXMgQ29udGV4dCBhbmQgdGhlblxuICAgICAgLy8gcmVhcHBseSB0aGUgdXBkYXRlIGFmdGVyd2FyZHMuXG5cblxuICAgICAgaWYgKGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoc3VzcGVuc2VJbnN0YW5jZSkpIDsgZWxzZSB7XG4gICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gICAgfSBlbHNlIGlmIChpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKHN1c3BlbnNlSW5zdGFuY2UpKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBzdGlsbCBwZW5kaW5nIG1vcmUgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIsIHNvIHdlIGNhbid0IGh5ZHJhdGUgaXRzXG4gICAgICAvLyBjb250ZW50LiBXZSB0cmVhdCBpdCBhcyBpZiB0aGlzIGNvbXBvbmVudCBzdXNwZW5kZWQgaXRzZWxmLiBJdCBtaWdodCBzZWVtIGFzIGlmXG4gICAgICAvLyB3ZSBjb3VsZCBqdXN0IHRyeSB0byByZW5kZXIgaXQgY2xpZW50LXNpZGUgaW5zdGVhZC4gSG93ZXZlciwgdGhpcyB3aWxsIHBlcmZvcm0gYVxuICAgICAgLy8gbG90IG9mIHVubmVjZXNzYXJ5IHdvcmsgYW5kIGlzIHVubGlrZWx5IHRvIGNvbXBsZXRlIHNpbmNlIGl0IG9mdGVuIHdpbGwgc3VzcGVuZFxuICAgICAgLy8gb24gbWlzc2luZyBkYXRhIGFueXdheS4gQWRkaXRpb25hbGx5LCB0aGUgc2VydmVyIG1pZ2h0IGJlIGFibGUgdG8gcmVuZGVyIG1vcmVcbiAgICAgIC8vIHRoYW4gd2UgY2FuIG9uIHRoZSBjbGllbnQgeWV0LiBJbiB0aGF0IGNhc2Ugd2UnZCBlbmQgdXAgd2l0aCBtb3JlIGZhbGxiYWNrIHN0YXRlc1xuICAgICAgLy8gb24gdGhlIGNsaWVudCB0aGFuIGlmIHdlIGp1c3QgbGVhdmUgaXQgYWxvbmUuIElmIHRoZSBzZXJ2ZXIgdGltZXMgb3V0IG9yIGVycm9yc1xuICAgICAgLy8gdGhlc2Ugc2hvdWxkIHVwZGF0ZSB0aGlzIGJvdW5kYXJ5IHRvIHRoZSBwZXJtYW5lbnQgRmFsbGJhY2sgc3RhdGUgaW5zdGVhZC5cbiAgICAgIC8vIE1hcmsgaXQgYXMgaGF2aW5nIGNhcHR1cmVkIChpLmUuIHN1c3BlbmRlZCkuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlOyAvLyBMZWF2ZSB0aGUgY2hpbGQgaW4gcGxhY2UuIEkuZS4gdGhlIGRlaHlkcmF0ZWQgZnJhZ21lbnQuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gUmVnaXN0ZXIgYSBjYWxsYmFjayB0byByZXRyeSB0aGlzIGJvdW5kYXJ5IG9uY2UgdGhlIHNlcnZlciBoYXMgc2VudCB0aGUgcmVzdWx0LlxuXG4gICAgICB2YXIgcmV0cnkgPSByZXRyeURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5LmJpbmQobnVsbCwgY3VycmVudCk7XG4gICAgICByZWdpc3RlclN1c3BlbnNlSW5zdGFuY2VSZXRyeShzdXNwZW5zZUluc3RhbmNlLCByZXRyeSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgYXR0ZW1wdC5cbiAgICAgIHJlZW50ZXJIeWRyYXRpb25TdGF0ZUZyb21EZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VJbnN0YW5jZSwgc3VzcGVuc2VTdGF0ZS50cmVlQ29udGV4dCk7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuKTsgLy8gTWFyayB0aGUgY2hpbGRyZW4gYXMgaHlkcmF0aW5nLiBUaGlzIGlzIGEgZmFzdCBwYXRoIHRvIGtub3cgd2hldGhlciB0aGlzXG4gICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAvLyBub2RlIGhhcyBmdWxseSBtb3VudGVkIHlldCwgYW5kIGZvciBzY2hlZHVsaW5nIGV2ZW50IHJlcGxheWluZy5cbiAgICAgIC8vIENvbmNlcHR1YWxseSB0aGlzIGlzIHNpbWlsYXIgdG8gUGxhY2VtZW50IGluIHRoYXQgYSBuZXcgc3VidHJlZSBpc1xuICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAvLyBtdXRhdGlvbnMgYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cy5cblxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuZmxhZ3MgfD0gSHlkcmF0aW5nO1xuICAgICAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzZWNvbmQgcmVuZGVyIHBhc3MuIFdlIGFscmVhZHkgYXR0ZW1wdGVkIHRvIGh5ZHJhdGVkLCBidXRcbiAgICAvLyBzb21ldGhpbmcgZWl0aGVyIHN1c3BlbmRlZCBvciBlcnJvcmVkLlxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIEZvcmNlQ2xpZW50UmVuZGVyKSB7XG4gICAgICAvLyBTb21ldGhpbmcgZXJyb3JlZCBkdXJpbmcgaHlkcmF0aW9uLiBUcnkgYWdhaW4gd2l0aG91dCBoeWRyYXRpbmcuXG4gICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfkZvcmNlQ2xpZW50UmVuZGVyO1xuXG4gICAgICB2YXIgX2NhcHR1cmVkVmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlKG5ldyBFcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGh5ZHJhdGluZyB0aGlzIFN1c3BlbnNlIGJvdW5kYXJ5LiAnICsgJ1N3aXRjaGVkIHRvIGNsaWVudCByZW5kZXJpbmcuJykpO1xuXG4gICAgICByZXR1cm4gcmV0cnlTdXNwZW5zZUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzLCBfY2FwdHVyZWRWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAvLyBTb21ldGhpbmcgc3VzcGVuZGVkIGFuZCB3ZSBzaG91bGQgc3RpbGwgYmUgaW4gZGVoeWRyYXRlZCBtb2RlLlxuICAgICAgLy8gTGVhdmUgdGhlIGV4aXN0aW5nIGNoaWxkIGluIHBsYWNlLlxuICAgICAgLy8gUHVzaCB0byBhdm9pZCBhIG1pc21hdGNoXG4gICAgICBwdXNoRmFsbGJhY2tUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gVGhlIGRlaHlkcmF0ZWQgY29tcGxldGlvbiBwYXNzIGV4cGVjdHMgdGhpcyBmbGFnIHRvIGJlIHRoZXJlXG4gICAgICAvLyBidXQgdGhlIG5vcm1hbCBzdXNwZW5zZSBwYXNzIGRvZXNuJ3QuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3VzcGVuZGVkIGJ1dCB3ZSBzaG91bGQgbm8gbG9uZ2VyIGJlIGluIGRlaHlkcmF0ZWQgbW9kZS5cbiAgICAgIC8vIFRoZXJlZm9yZSB3ZSBub3cgaGF2ZSB0byByZW5kZXIgdGhlIGZhbGxiYWNrLlxuICAgICAgcHVzaEZhbGxiYWNrVHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBuZXh0RmFsbGJhY2tDaGlsZHJlbiA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tBZnRlclJldHJ5V2l0aG91dEh5ZHJhdGluZyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50NC5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgZGlkUHJpbWFyeUNoaWxkcmVuRGVmZXIsIHJlbmRlckxhbmVzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKGZpYmVyLCByZW5kZXJMYW5lcywgcHJvcGFnYXRpb25Sb290KSB7XG4gIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChmaWJlci5yZXR1cm4sIHJlbmRlckxhbmVzLCBwcm9wYWdhdGlvblJvb3QpO1xufVxuXG5mdW5jdGlvbiBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGZpcnN0Q2hpbGQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIE1hcmsgYW55IFN1c3BlbnNlIGJvdW5kYXJpZXMgd2l0aCBmYWxsYmFja3MgYXMgaGF2aW5nIHdvcmsgdG8gZG8uXG4gIC8vIElmIHRoZXkgd2VyZSBwcmV2aW91c2x5IGZvcmNlZCBpbnRvIGZhbGxiYWNrcywgdGhleSBtYXkgbm93IGJlIGFibGVcbiAgLy8gdG8gdW5ibG9jay5cbiAgdmFyIG5vZGUgPSBmaXJzdENoaWxkO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50KSB7XG4gICAgICAvLyBJZiB0aGUgdGFpbCBpcyBoaWRkZW4gdGhlcmUgbWlnaHQgbm90IGJlIGFuIFN1c3BlbnNlIGJvdW5kYXJpZXNcbiAgICAgIC8vIHRvIHNjaGVkdWxlIHdvcmsgb24uIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG9uIHRoZVxuICAgICAgLy8gbGlzdCBpdHNlbGYuXG4gICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRyYXZlcnNlIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgbGlzdCBzaW5jZVxuICAgICAgLy8gdGhlIGxpc3Qgd2lsbCBwcm9wYWdhdGUgdGhlIGNoYW5nZSB3aGVuIGl0IHJlcmVuZGVycy5cbiAgICAgIHNjaGVkdWxlU3VzcGVuc2VXb3JrT25GaWJlcihub2RlLCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZExhc3RDb250ZW50Um93KGZpcnN0Q2hpbGQpIHtcbiAgLy8gVGhpcyBpcyBnb2luZyB0byBmaW5kIHRoZSBsYXN0IHJvdyBhbW9uZyB0aGVzZSBjaGlsZHJlbiB0aGF0IGlzIGFscmVhZHlcbiAgLy8gc2hvd2luZyBjb250ZW50IG9uIHRoZSBzY3JlZW4sIGFzIG9wcG9zZWQgdG8gYmVpbmcgaW4gZmFsbGJhY2sgc3RhdGUgb3JcbiAgLy8gbmV3LiBJZiBhIHJvdyBoYXMgbXVsdGlwbGUgU3VzcGVuc2UgYm91bmRhcmllcywgYW55IG9mIHRoZW0gYmVpbmcgaW4gdGhlXG4gIC8vIGZhbGxiYWNrIHN0YXRlLCBjb3VudHMgYXMgdGhlIHdob2xlIHJvdyBiZWluZyBpbiBhIGZhbGxiYWNrIHN0YXRlLlxuICAvLyBOb3RlIHRoYXQgdGhlIFwicm93c1wiIHdpbGwgYmUgd29ya0luUHJvZ3Jlc3MsIGJ1dCBhbnkgbmVzdGVkIGNoaWxkcmVuXG4gIC8vIHdpbGwgc3RpbGwgYmUgY3VycmVudCBzaW5jZSB3ZSBoYXZlbid0IHJlbmRlcmVkIHRoZW0geWV0LiBUaGUgbW91bnRlZFxuICAvLyBvcmRlciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBuZXcgb3JkZXIuIFdlIHVzZSB0aGUgbmV3IG9yZGVyLlxuICB2YXIgcm93ID0gZmlyc3RDaGlsZDtcbiAgdmFyIGxhc3RDb250ZW50Um93ID0gbnVsbDtcblxuICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgIGxhc3RDb250ZW50Um93ID0gcm93O1xuICAgIH1cblxuICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIGxhc3RDb250ZW50Um93O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJldmVhbE9yZGVyKHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAocmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCAmJiByZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICd0b2dldGhlcicgJiYgIWRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSkge1xuICAgICAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiByZXZlYWxPcmRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3dpdGNoIChyZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmRzJzpcbiAgICAgICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1VzZSBsb3dlcmNhc2UgXCIlc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnZm9yd2FyZCc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmQnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1JlYWN0IHVzZXMgdGhlIC1zIHN1ZmZpeCBpbiB0aGUgc3BlbGxpbmcuIFVzZSBcIiVzc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLCByZXZlYWxPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFpbE9wdGlvbnModGFpbE1vZGUsIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAodGFpbE1vZGUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdKSB7XG4gICAgICBpZiAodGFpbE1vZGUgIT09ICdjb2xsYXBzZWQnICYmIHRhaWxNb2RlICE9PSAnaGlkZGVuJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciB0YWlsIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwiY29sbGFwc2VkXCIgb3IgXCJoaWRkZW5cIj8nLCB0YWlsTW9kZSk7XG4gICAgICB9IGVsc2UgaWYgKHJldmVhbE9yZGVyICE9PSAnZm9yd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAnYmFja3dhcmRzJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCc8U3VzcGVuc2VMaXN0IHRhaWw9XCIlc1wiIC8+IGlzIG9ubHkgdmFsaWQgaWYgcmV2ZWFsT3JkZXIgaXMgJyArICdcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIi4gJyArICdEaWQgeW91IG1lYW4gdG8gc3BlY2lmeSByZXZlYWxPcmRlcj1cImZvcndhcmRzXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkU2xvdCwgaW5kZXgpIHtcbiAge1xuICAgIHZhciBpc0FuQXJyYXkgPSBpc0FycmF5KGNoaWxkU2xvdCk7XG4gICAgdmFyIGlzSXRlcmFibGUgPSAhaXNBbkFycmF5ICYmIHR5cGVvZiBnZXRJdGVyYXRvckZuKGNoaWxkU2xvdCkgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaXNBbkFycmF5IHx8IGlzSXRlcmFibGUpIHtcbiAgICAgIHZhciB0eXBlID0gaXNBbkFycmF5ID8gJ2FycmF5JyA6ICdpdGVyYWJsZSc7XG5cbiAgICAgIGVycm9yKCdBIG5lc3RlZCAlcyB3YXMgcGFzc2VkIHRvIHJvdyAjJXMgaW4gPFN1c3BlbnNlTGlzdCAvPi4gV3JhcCBpdCBpbiAnICsgJ2FuIGFkZGl0aW9uYWwgU3VzcGVuc2VMaXN0IHRvIGNvbmZpZ3VyZSBpdHMgcmV2ZWFsT3JkZXI6ICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+IC4uLiAnICsgJzxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPnslc308L1N1c3BlbnNlTGlzdD4gLi4uICcgKyAnPC9TdXNwZW5zZUxpc3Q+JywgdHlwZSwgaW5kZXgsIHR5cGUpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4oY2hpbGRyZW4sIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAoKHJldmVhbE9yZGVyID09PSAnZm9yd2FyZHMnIHx8IHJldmVhbE9yZGVyID09PSAnYmFja3dhcmRzJykgJiYgY2hpbGRyZW4gIT09IHVuZGVmaW5lZCAmJiBjaGlsZHJlbiAhPT0gbnVsbCAmJiBjaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkcmVuW2ldLCBpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2hpbGRyZW5JdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChjaGlsZHJlbik7XG5cbiAgICAgICAgICBpZiAoY2hpbGRyZW5JdGVyYXRvcikge1xuICAgICAgICAgICAgdmFyIHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIHZhciBfaSA9IDA7XG5cbiAgICAgICAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKHN0ZXAudmFsdWUsIF9pKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF9pKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yKCdBIHNpbmdsZSByb3cgd2FzIHBhc3NlZCB0byBhIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9XCIlc1wiIC8+LiAnICsgJ1RoaXMgaXMgbm90IHVzZWZ1bCBzaW5jZSBpdCBuZWVkcyBtdWx0aXBsZSByb3dzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBwYXNzIG11bHRpcGxlIGNoaWxkcmVuIG9yIGFuIGFycmF5PycsIHJldmVhbE9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGlzQmFja3dhcmRzLCB0YWlsLCBsYXN0Q29udGVudFJvdywgdGFpbE1vZGUpIHtcbiAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgaXNCYWNrd2FyZHM6IGlzQmFja3dhcmRzLFxuICAgICAgcmVuZGVyaW5nOiBudWxsLFxuICAgICAgcmVuZGVyaW5nU3RhcnRUaW1lOiAwLFxuICAgICAgbGFzdDogbGFzdENvbnRlbnRSb3csXG4gICAgICB0YWlsOiB0YWlsLFxuICAgICAgdGFpbE1vZGU6IHRhaWxNb2RlXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIG9iamVjdCBmcm9tIHByZXZpb3VzIHJlbmRlcnMuXG4gICAgcmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcztcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IDA7XG4gICAgcmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93O1xuICAgIHJlbmRlclN0YXRlLnRhaWwgPSB0YWlsO1xuICAgIHJlbmRlclN0YXRlLnRhaWxNb2RlID0gdGFpbE1vZGU7XG4gIH1cbn0gLy8gVGhpcyBjYW4gZW5kIHVwIHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudCBtdWx0aXBsZSBwYXNzZXMuXG4vLyBUaGUgZmlyc3QgcGFzcyBzcGxpdHMgdGhlIGNoaWxkcmVuIGZpYmVycyBpbnRvIHR3byBzZXRzLiBBIGhlYWQgYW5kIHRhaWwuXG4vLyBXZSBmaXJzdCByZW5kZXIgdGhlIGhlYWQuIElmIGFueXRoaW5nIGlzIGluIGZhbGxiYWNrIHN0YXRlLCB3ZSBkbyBhbm90aGVyXG4vLyBwYXNzIHRocm91Z2ggYmVnaW5Xb3JrIHRvIHJlcmVuZGVyIGFsbCBjaGlsZHJlbiAoaW5jbHVkaW5nIHRoZSB0YWlsKSB3aXRoXG4vLyB0aGUgZm9yY2Ugc3VzcGVuZCBjb250ZXh0LiBJZiB0aGUgZmlyc3QgcmVuZGVyIGRpZG4ndCBoYXZlIGFueXRoaW5nIGluXG4vLyBpbiBmYWxsYmFjayBzdGF0ZS4gVGhlbiB3ZSByZW5kZXIgZWFjaCByb3cgaW4gdGhlIHRhaWwgb25lLWJ5LW9uZS5cbi8vIFRoYXQgaGFwcGVucyBpbiB0aGUgY29tcGxldGVXb3JrIHBoYXNlIHdpdGhvdXQgZ29pbmcgYmFjayB0byBiZWdpbldvcmsuXG5cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmV2ZWFsT3JkZXIgPSBuZXh0UHJvcHMucmV2ZWFsT3JkZXI7XG4gIHZhciB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4obmV3Q2hpbGRyZW4sIHJldmVhbE9yZGVyKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG91bGRGb3JjZUZhbGxiYWNrID0gaGFzU3VzcGVuc2VMaXN0Q29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG5cbiAgaWYgKHNob3VsZEZvcmNlRmFsbGJhY2spIHtcbiAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VMaXN0Q29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IGN1cnJlbnQgIT09IG51bGwgJiYgKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxO1xuXG4gICAgaWYgKGRpZFN1c3BlbmRCZWZvcmUpIHtcbiAgICAgIC8vIElmIHdlIHByZXZpb3VzbHkgZm9yY2VkIGEgZmFsbGJhY2ssIHdlIG5lZWQgdG8gc2NoZWR1bGUgd29ya1xuICAgICAgLy8gb24gYW55IG5lc3RlZCBib3VuZGFyaWVzIHRvIGxldCB0aGVtIGtub3cgdG8gdHJ5IHRvIHJlbmRlclxuICAgICAgLy8gYWdhaW4uIFRoaXMgaXMgdGhlIHNhbWUgYXMgY29udGV4dCB1cGRhdGluZy5cbiAgICAgIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MuY2hpbGQsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgfVxuXG4gIHB1c2hTdXNwZW5zZUxpc3RDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIFN1c3BlbnNlTGlzdCBkb2Vzbid0IHdvcmsgc28gd2UganVzdFxuICAgIC8vIHVzZSBtYWtlIGl0IGEgbm9vcCBieSB0cmVhdGluZyBpdCBhcyB0aGUgZGVmYXVsdCByZXZlYWxPcmRlci5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHJldmVhbE9yZGVyKSB7XG4gICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGFzdENvbnRlbnRSb3cgPSBmaW5kTGFzdENvbnRlbnRSb3cod29ya0luUHJvZ3Jlc3MuY2hpbGQpO1xuICAgICAgICAgIHZhciB0YWlsO1xuXG4gICAgICAgICAgaWYgKGxhc3RDb250ZW50Um93ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgd2hvbGUgbGlzdCBpcyBwYXJ0IG9mIHRoZSB0YWlsLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgY291bGQgZmFzdCBwYXRoIGJ5IGp1c3QgcmVuZGVyaW5nIHRoZSB0YWlsIG5vdy5cbiAgICAgICAgICAgIHRhaWwgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRGlzY29ubmVjdCB0aGUgdGFpbCByb3dzIGFmdGVyIHRoZSBjb250ZW50IHJvdy5cbiAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGVtIHNlcGFyYXRlbHkgbGF0ZXIuXG4gICAgICAgICAgICB0YWlsID0gbGFzdENvbnRlbnRSb3cuc2libGluZztcbiAgICAgICAgICAgIGxhc3RDb250ZW50Um93LnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgdGFpbCwgbGFzdENvbnRlbnRSb3csIHRhaWxNb2RlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gZmluZCB0aGUgZmlyc3Qgcm93IHRoYXQgaGFzIGV4aXN0aW5nIGNvbnRlbnQuXG4gICAgICAgICAgLy8gQXQgdGhlIHNhbWUgdGltZSB3ZSdyZSBnb2luZyB0byByZXZlcnNlIHRoZSBsaXN0IG9mIGV2ZXJ5dGhpbmdcbiAgICAgICAgICAvLyB3ZSBwYXNzIGluIHRoZSBtZWFudGltZS4gVGhhdCdzIGdvaW5nIHRvIGJlIG91ciB0YWlsIGluIHJldmVyc2VcbiAgICAgICAgICAvLyBvcmRlci5cbiAgICAgICAgICB2YXIgX3RhaWwgPSBudWxsO1xuICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG5cbiAgICAgICAgICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFpbiBjb250ZW50LlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJvdztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuZXh0Um93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICByb3cuc2libGluZyA9IF90YWlsO1xuICAgICAgICAgICAgX3RhaWwgPSByb3c7XG4gICAgICAgICAgICByb3cgPSBuZXh0Um93O1xuICAgICAgICAgIH0gLy8gVE9ETzogSWYgd29ya0luUHJvZ3Jlc3MuY2hpbGQgaXMgbnVsbCwgd2UgY2FuIGNvbnRpbnVlIG9uIHRoZSB0YWlsIGltbWVkaWF0ZWx5LlxuXG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIHRydWUsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgX3RhaWwsIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB0YWlsTW9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICB7XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICBudWxsLCAvLyB0YWlsXG4gICAgICAgICAgbnVsbCwgLy8gbGFzdFxuICAgICAgICAgIHVuZGVmaW5lZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IHJldmVhbCBvcmRlciBpcyB0aGUgc2FtZSBhcyBub3QgaGF2aW5nXG4gICAgICAgICAgLy8gYSBib3VuZGFyeS5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gUG9ydGFscyBhcmUgc3BlY2lhbCBiZWNhdXNlIHdlIGRvbid0IGFwcGVuZCB0aGUgY2hpbGRyZW4gZHVyaW5nIG1vdW50XG4gICAgLy8gYnV0IGF0IGNvbW1pdC4gVGhlcmVmb3JlIHdlIG5lZWQgdG8gdHJhY2sgaW5zZXJ0aW9ucyB3aGljaCB0aGUgbm9ybWFsXG4gICAgLy8gZmxvdyBkb2Vzbid0IGRvIGR1cmluZyBtb3VudC4gVGhpcyBkb2Vzbid0IGhhcHBlbiBhdCB0aGUgcm9vdCBiZWNhdXNlXG4gICAgLy8gdGhlIHJvb3QgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgXCJjdXJyZW50XCIgd2l0aCBhIG51bGwgY2hpbGQuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgdW5pZnlpbmcgdGhpcyB3aXRoIGhvdyB0aGUgcm9vdCB3b3Jrcy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBwcm92aWRlclR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyVHlwZS5fY29udGV4dDtcbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICB2YXIgbmV3VmFsdWUgPSBuZXdQcm9wcy52YWx1ZTtcblxuICB7XG4gICAgaWYgKCEoJ3ZhbHVlJyBpbiBuZXdQcm9wcykpIHtcbiAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIpIHtcbiAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdUaGUgYHZhbHVlYCBwcm9wIGlzIHJlcXVpcmVkIGZvciB0aGUgYDxDb250ZXh0LlByb3ZpZGVyPmAuIERpZCB5b3UgbWlzc3BlbGwgaXQgb3IgZm9yZ2V0IHRvIHBhc3MgaXQ/Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb3ZpZGVyUHJvcFR5cGVzID0gd29ya0luUHJvZ3Jlc3MudHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAocHJvdmlkZXJQcm9wVHlwZXMpIHtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3ZpZGVyUHJvcFR5cGVzLCBuZXdQcm9wcywgJ3Byb3AnLCAnQ29udGV4dC5Qcm92aWRlcicpO1xuICAgIH1cbiAgfVxuXG4gIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgbmV3VmFsdWUpO1xuXG4gIHtcbiAgICBpZiAob2xkUHJvcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBvbGRWYWx1ZSA9IG9sZFByb3BzLnZhbHVlO1xuXG4gICAgICBpZiAob2JqZWN0SXMob2xkVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgICAvLyBObyBjaGFuZ2UuIEJhaWxvdXQgZWFybHkgaWYgY2hpbGRyZW4gYXJlIHRoZSBzYW1lLlxuICAgICAgICBpZiAob2xkUHJvcHMuY2hpbGRyZW4gPT09IG5ld1Byb3BzLmNoaWxkcmVuICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlIGNvbnRleHQgdmFsdWUgY2hhbmdlZC4gU2VhcmNoIGZvciBtYXRjaGluZyBjb25zdW1lcnMgYW5kIHNjaGVkdWxlXG4gICAgICAgIC8vIHRoZW0gdG8gdXBkYXRlLlxuICAgICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld0NoaWxkcmVuID0gbmV3UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGU7IC8vIFRoZSBsb2dpYyBiZWxvdyBmb3IgQ29udGV4dCBkaWZmZXJzIGRlcGVuZGluZyBvbiBQUk9EIG9yIERFViBtb2RlLiBJblxuICAvLyBERVYgbW9kZSwgd2UgY3JlYXRlIGEgc2VwYXJhdGUgb2JqZWN0IGZvciBDb250ZXh0LkNvbnN1bWVyIHRoYXQgYWN0c1xuICAvLyBsaWtlIGEgcHJveHkgdG8gQ29udGV4dC4gVGhpcyBwcm94eSBvYmplY3QgYWRkcyB1bm5lY2Vzc2FyeSBjb2RlIGluIFBST0RcbiAgLy8gc28gd2UgdXNlIHRoZSBvbGQgYmVoYXZpb3VyIChDb250ZXh0LkNvbnN1bWVyIHJlZmVyZW5jZXMgQ29udGV4dCkgdG9cbiAgLy8gcmVkdWNlIHNpemUgYW5kIG92ZXJoZWFkLiBUaGUgc2VwYXJhdGUgb2JqZWN0IHJlZmVyZW5jZXMgY29udGV4dCB2aWFcbiAgLy8gYSBwcm9wZXJ0eSBjYWxsZWQgXCJfY29udGV4dFwiLCB3aGljaCBhbHNvIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrXG4gIC8vIGluIERFViBtb2RlIGlmIHRoaXMgcHJvcGVydHkgZXhpc3RzIG9yIG5vdCBhbmQgd2FybiBpZiBpdCBkb2VzIG5vdC5cblxuICB7XG4gICAgaWYgKGNvbnRleHQuX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVGhpcyBtYXkgYmUgYmVjYXVzZSBpdCdzIGEgQ29udGV4dCAocmF0aGVyIHRoYW4gYSBDb25zdW1lcikuXG4gICAgICAvLyBPciBpdCBtYXkgYmUgYmVjYXVzZSBpdCdzIG9sZGVyIFJlYWN0IHdoZXJlIHRoZXkncmUgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gd2FybiBpZiB3ZSdyZSBzdXJlIGl0J3MgYSBuZXcgUmVhY3QuXG4gICAgICBpZiAoY29udGV4dCAhPT0gY29udGV4dC5Db25zdW1lcikge1xuICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lcikge1xuICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0PiBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0Ll9jb250ZXh0O1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHJlbmRlciA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0EgY29udGV4dCBjb25zdW1lciB3YXMgcmVuZGVyZWQgd2l0aCBtdWx0aXBsZSBjaGlsZHJlbiwgb3IgYSBjaGlsZCAnICsgXCJ0aGF0IGlzbid0IGEgZnVuY3Rpb24uIEEgY29udGV4dCBjb25zdW1lciBleHBlY3RzIGEgc2luZ2xlIGNoaWxkIFwiICsgJ3RoYXQgaXMgYSBmdW5jdGlvbi4gSWYgeW91IGRpZCBwYXNzIGEgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0aGVyZSAnICsgJ2lzIG5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBhcm91bmQgaXQuJyk7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIG5ld1ZhbHVlID0gcmVhZENvbnRleHQoY29udGV4dCk7XG5cbiAge1xuICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciBuZXdDaGlsZHJlbjtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV3Q2hpbGRyZW4gPSByZW5kZXIobmV3VmFsdWUpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIHtcbiAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCkge1xuICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVzZXRTdXNwZW5kZWRDdXJyZW50T25Nb3VudEluTGVnYWN5TW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGxhenkgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIFJldXNlIHByZXZpb3VzIGRlcGVuZGVuY2llc1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IHVwZGF0ZSBcImJhc2VcIiByZW5kZXIgdGltZXMgZm9yIGJhaWxvdXRzLlxuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gIH1cblxuICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzKTsgLy8gQ2hlY2sgaWYgdGhlIGNoaWxkcmVuIGhhdmUgYW55IHBlbmRpbmcgd29yay5cblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIGRvbid0IGhhdmUgYW55IHdvcmsgZWl0aGVyLiBXZSBjYW4gc2tpcCB0aGVtLlxuICAgIC8vIFRPRE86IE9uY2Ugd2UgYWRkIGJhY2sgcmVzdW1pbmcsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgY2hpbGRyZW4gYXJlXG4gICAgLy8gYSB3b3JrLWluLXByb2dyZXNzIHNldC4gSWYgc28sIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlaXIgZWZmZWN0cy5cbiAgICB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gLy8gVGhpcyBmaWJlciBkb2Vzbid0IGhhdmUgd29yaywgYnV0IGl0cyBzdWJ0cmVlIGRvZXMuIENsb25lIHRoZSBjaGlsZFxuICAvLyBmaWJlcnMgYW5kIGNvbnRpbnVlLlxuXG5cbiAgY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gcmVtb3VudEZpYmVyKGN1cnJlbnQsIG9sZFdvcmtJblByb2dyZXNzLCBuZXdXb3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIHJldHVybkZpYmVyID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgaWYgKHJldHVybkZpYmVyID09PSBudWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3dhcCB0aGUgcm9vdCBmaWJlci4nKTtcbiAgICB9IC8vIERpc2Nvbm5lY3QgZnJvbSB0aGUgb2xkIGN1cnJlbnQuXG4gICAgLy8gSXQgd2lsbCBnZXQgZGVsZXRlZC5cblxuXG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIG9sZFdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIENvbm5lY3QgdG8gdGhlIG5ldyB0cmVlLlxuXG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuaW5kZXggPSBvbGRXb3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gb2xkV29ya0luUHJvZ3Jlc3Muc2libGluZztcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZXR1cm4gPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MucmVmID0gb2xkV29ya0luUHJvZ3Jlc3MucmVmOyAvLyBSZXBsYWNlIHRoZSBjaGlsZC9zaWJsaW5nIHBvaW50ZXJzIGFib3ZlIGl0LlxuXG4gICAgaWYgKG9sZFdvcmtJblByb2dyZXNzID09PSByZXR1cm5GaWJlci5jaGlsZCkge1xuICAgICAgcmV0dXJuRmliZXIuY2hpbGQgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByZXZTaWJsaW5nID0gcmV0dXJuRmliZXIuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCB0byBoYXZlIGEgY2hpbGQuJyk7XG4gICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICAgIHdoaWxlIChwcmV2U2libGluZy5zaWJsaW5nICE9PSBvbGRXb3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgcHJldlNpYmxpbmcgPSBwcmV2U2libGluZy5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9wcm9kLWVycm9yLWNvZGVzXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nLicpO1xuICAgICAgICB9XG4gICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICAgIHByZXZTaWJsaW5nLnNpYmxpbmcgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IC8vIERlbGV0ZSB0aGUgb2xkIGZpYmVyIGFuZCBwbGFjZSB0aGUgbmV3IG9uZS5cbiAgICAvLyBTaW5jZSB0aGUgb2xkIGZpYmVyIGlzIGRpc2Nvbm5lY3RlZCwgd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBtYW51YWxseS5cblxuXG4gICAgdmFyIGRlbGV0aW9ucyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcblxuICAgIGlmIChkZWxldGlvbnMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybkZpYmVyLmRlbGV0aW9ucyA9IFtjdXJyZW50XTtcbiAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IENoaWxkRGVsZXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0aW9ucy5wdXNoKGN1cnJlbnQpO1xuICAgIH1cblxuICAgIG5ld1dvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDsgLy8gUmVzdGFydCB3b3JrIGZyb20gdGhlIG5ldyBmaWJlci5cblxuICAgIHJldHVybiBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcykge1xuICAvLyBCZWZvcmUgcGVyZm9ybWluZyBhbiBlYXJseSBiYWlsb3V0LCB3ZSBtdXN0IGNoZWNrIGlmIHRoZXJlIGFyZSBwZW5kaW5nXG4gIC8vIHVwZGF0ZXMgb3IgY29udGV4dC5cbiAgdmFyIHVwZGF0ZUxhbmVzID0gY3VycmVudC5sYW5lcztcblxuICBpZiAoaW5jbHVkZXNTb21lTGFuZSh1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm8gcGVuZGluZyB1cGRhdGUsIGJ1dCBiZWNhdXNlIGNvbnRleHQgaXMgcHJvcGFnYXRlZCBsYXppbHksIHdlIG5lZWRcblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRFYXJseUJhaWxvdXRJZk5vU2NoZWR1bGVkVXBkYXRlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIGZpYmVyIGRvZXMgbm90IGhhdmUgYW55IHBlbmRpbmcgd29yay4gQmFpbG91dCB3aXRob3V0IGVudGVyaW5nXG4gIC8vIHRoZSBiZWdpbiBwaGFzZS4gVGhlcmUncyBzdGlsbCBzb21lIGJvb2trZWVwaW5nIHdlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZVxuICAvLyBpbiB0aGlzIG9wdGltaXplZCBwYXRoLCBtb3N0bHkgcHVzaGluZyBzdHVmZiBvbnRvIHRoZSBzdGFjay5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIHtcbiAgICAgICAgdmFyIGNhY2hlID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlO1xuICAgICAgICBwdXNoQ2FjaGVQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgY2FjaGUpO1xuICAgICAgfVxuXG4gICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy52YWx1ZTtcbiAgICAgICAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLl9jb250ZXh0O1xuICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIG5ld1ZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICAvLyBQcm9maWxlciBzaG91bGQgb25seSBjYWxsIG9uUmVuZGVyIHdoZW4gb25lIG9mIGl0cyBkZXNjZW5kYW50cyBhY3R1YWxseSByZW5kZXJlZC5cbiAgICAgICAgdmFyIGhhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgIGlmIChoYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgLy8gUmVzZXQgZWZmZWN0IGR1cmF0aW9ucyBmb3IgdGhlIG5leHQgZXZlbnR1YWwgZWZmZWN0IHBoYXNlLlxuICAgICAgICAgIC8vIFRoZXNlIGFyZSByZXNldCBkdXJpbmcgcmVuZGVyIHRvIGFsbG93IHRoZSBEZXZUb29scyBjb21taXQgaG9vayBhIGNoYW5jZSB0byByZWFkIHRoZW0sXG4gICAgICAgICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoc3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIHJlbmRlciB0aGUgY2hpbGRyZW4sIHNvIHRoaXMgaXMganVzdCB0byBtYWludGFpblxuICAgICAgICAgICAgLy8gcHVzaC9wb3Agc3ltbWV0cnlcbiAgICAgICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7IC8vIFdlIGtub3cgdGhhdCB0aGlzIGNvbXBvbmVudCB3aWxsIHN1c3BlbmQgYWdhaW4gYmVjYXVzZSBpZiBpdCBoYXNcbiAgICAgICAgICAgIC8vIGJlZW4gdW5zdXNwZW5kZWQgaXQgaGFzIGNvbW1pdHRlZCBhcyBhIHJlc29sdmVkIFN1c3BlbnNlIGNvbXBvbmVudC5cbiAgICAgICAgICAgIC8vIElmIGl0IG5lZWRzIHRvIGJlIHJldHJpZWQsIGl0IHNob3VsZCBoYXZlIHdvcmsgc2NoZWR1bGVkIG9uIGl0LlxuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlOyAvLyBXZSBzaG91bGQgbmV2ZXIgcmVuZGVyIHRoZSBjaGlsZHJlbiBvZiBhIGRlaHlkcmF0ZWQgYm91bmRhcnkgdW50aWwgd2VcbiAgICAgICAgICAgIC8vIHVwZ3JhZGUgaXQuIFdlIHJldHVybiBudWxsIGluc3RlYWQgb2YgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yay5cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSAvLyBJZiB0aGlzIGJvdW5kYXJ5IGlzIGN1cnJlbnRseSB0aW1lZCBvdXQsIHdlIG5lZWQgdG8gZGVjaWRlXG4gICAgICAgICAgLy8gd2hldGhlciB0byByZXRyeSB0aGUgcHJpbWFyeSBjaGlsZHJlbiwgb3IgdG8gc2tpcCBvdmVyIGl0IGFuZFxuICAgICAgICAgIC8vIGdvIHN0cmFpZ2h0IHRvIHRoZSBmYWxsYmFjay4gQ2hlY2sgdGhlIHByaW9yaXR5IG9mIHRoZSBwcmltYXJ5XG4gICAgICAgICAgLy8gY2hpbGQgZnJhZ21lbnQuXG5cblxuICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRMYW5lcyA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXM7XG5cbiAgICAgICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgcHJpbWFyeUNoaWxkTGFuZXMpKSB7XG4gICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gVXNlIHRoZSBub3JtYWwgcGF0aFxuICAgICAgICAgICAgLy8gdG8gYXR0ZW1wdCB0byByZW5kZXIgdGhlIHByaW1hcnkgY2hpbGRyZW4gYWdhaW4uXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgZG9lcyBub3QgaGF2ZSBwZW5kaW5nIHdvcmsgbWFya2VkXG4gICAgICAgICAgICAvLyBvbiBpdFxuICAgICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTsgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gZG8gbm90IGhhdmUgcGVuZGluZyB3b3JrIHdpdGggc3VmZmljaWVudFxuICAgICAgICAgICAgLy8gcHJpb3JpdHkuIEJhaWxvdXQuXG5cbiAgICAgICAgICAgIHZhciBjaGlsZCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBmYWxsYmFjayBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gU2tpcCBvdmVyIHRoZVxuICAgICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuIGFuZCB3b3JrIG9uIHRoZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBjYW4gcmV0dXJuIGBudWxsYCBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBjaGVja2VkXG4gICAgICAgICAgICAgIC8vIHdoZXRoZXIgdGhlcmUgd2VyZSBuZXN0ZWQgY29udGV4dCBjb25zdW1lcnMsIHZpYSB0aGUgY2FsbCB0b1xuICAgICAgICAgICAgICAvLyBgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29ya2AgYWJvdmUuXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzJDE7XG5cbiAgICAgICAgdmFyIF9oYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcblxuICAgICAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgd2FzIGluIGZhbGxiYWNrIHN0YXRlIGxhc3QgdGltZSwgYW5kIHdlIGhhdmUgYWxsIHRoZVxuICAgICAgICAgICAgLy8gc2FtZSBjaGlsZHJlbiB0aGVuIHdlJ3JlIHN0aWxsIGluIHByb2dyZXNzaXZlIGxvYWRpbmcgc3RhdGUuXG4gICAgICAgICAgICAvLyBTb21ldGhpbmcgbWlnaHQgZ2V0IHVuYmxvY2tlZCBieSBzdGF0ZSB1cGRhdGVzIG9yIHJldHJpZXMgaW4gdGhlXG4gICAgICAgICAgICAvLyB0cmVlIHdoaWNoIHdpbGwgYWZmZWN0IHRoZSB0YWlsLiBTbyB3ZSBuZWVkIHRvIHVzZSB0aGUgbm9ybWFsXG4gICAgICAgICAgICAvLyBwYXRoIHRvIGNvbXB1dGUgdGhlIGNvcnJlY3QgdGFpbC5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9IC8vIElmIG5vbmUgb2YgdGhlIGNoaWxkcmVuIGhhZCBhbnkgd29yaywgdGhhdCBtZWFucyB0aGF0IG5vbmUgb2ZcbiAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuXG5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICB9IC8vIElmIG5vdGhpbmcgc3VzcGVuZGVkIGJlZm9yZSBhbmQgd2UncmUgcmVuZGVyaW5nIHRoZSBzYW1lIGNoaWxkcmVuLFxuICAgICAgICAvLyB0aGVuIHRoZSB0YWlsIGRvZXNuJ3QgbWF0dGVyLiBBbnl0aGluZyBuZXcgdGhhdCBzdXNwZW5kcyB3aWxsIHdvcmtcbiAgICAgICAgLy8gaW4gdGhlIFwidG9nZXRoZXJcIiBtb2RlLCBzbyB3ZSBjYW4gY29udGludWUgZnJvbSB0aGUgc3RhdGUgd2UgaGFkLlxuXG5cbiAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBSZXNldCB0byB0aGUgXCJ0b2dldGhlclwiIG1vZGUgaW4gY2FzZSB3ZSd2ZSBzdGFydGVkIGEgZGlmZmVyZW50XG4gICAgICAgICAgLy8gdXBkYXRlIGluIHRoZSBwYXN0IGJ1dCBkaWRuJ3QgY29tcGxldGUgaXQuXG4gICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2hTdXNwZW5zZUxpc3RDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuXG4gICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgIC8vIGFzIGJlZm9yZS4gV2UgY2FuIGZhc3QgYmFpbCBvdXQuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIGlmIHRoZSB0cmVlIHN0aWxsIG5lZWRzIHRvIGJlIGRlZmVycmVkLiBUaGlzIGlzXG4gICAgICAgIC8vIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGxvZ2ljIHVzZWQgaW4gdGhlIG5vcm1hbCB1cGRhdGUgcGF0aCxcbiAgICAgICAgLy8gc28gd2UnbGwganVzdCBlbnRlciB0aGF0LiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHdlJ2xsIGJhaWwgb3V0XG4gICAgICAgIC8vIGF0IHRoZSBuZXh0IGxldmVsIGluc3RlYWQgb2YgdGhpcyBvbmUsIGJlY2F1c2UgdGhlIGNoaWxkIHByb3BzXG4gICAgICAgIC8vIGhhdmUgbm90IGNoYW5nZWQuIFdoaWNoIGlzIGZpbmUuXG4gICAgICAgIC8vIFRPRE86IFByb2JhYmx5IHNob3VsZCByZWZhY3RvciBgYmVnaW5Xb3JrYCB0byBzcGxpdCB0aGUgYmFpbG91dFxuICAgICAgICAvLyBwYXRoIGZyb20gdGhlIG5vcm1hbCBwYXRoLiBJJ20gdGVtcHRlZCB0byBkbyBhIGxhYmVsZWQgYnJlYWsgaGVyZVxuICAgICAgICAvLyBidXQgSSB3b24ndCA6KVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2FjaGVDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2NhY2hlID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlO1xuICAgICAgICAgIHB1c2hDYWNoZVByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBfY2FjaGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBiZWdpbldvcmskMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgJiYgY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB3aWxsIHJlc3RhcnQgdGhlIGJlZ2luIHBoYXNlIHdpdGggYSBuZXcgZmliZXIuXG4gICAgICByZXR1cm4gcmVtb3VudEZpYmVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3Mua2V5LCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZSB8fCBudWxsLCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fCBudWxsLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYW5lcykpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgaGFzQ29udGV4dENoYW5nZWQoKSB8fCAoIC8vIEZvcmNlIGEgcmUtcmVuZGVyIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkOlxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgIT09IGN1cnJlbnQudHlwZSApKSB7XG4gICAgICAvLyBJZiBwcm9wcyBvciBjb250ZXh0IGNoYW5nZWQsIG1hcmsgdGhlIGZpYmVyIGFzIGhhdmluZyBwZXJmb3JtZWQgd29yay5cbiAgICAgIC8vIFRoaXMgbWF5IGJlIHVuc2V0IGlmIHRoZSBwcm9wcyBhcmUgZGV0ZXJtaW5lZCB0byBiZSBlcXVhbCBsYXRlciAobWVtbykuXG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTmVpdGhlciBwcm9wcyBub3IgbGVnYWN5IGNvbnRleHQgY2hhbmdlcy4gQ2hlY2sgaWYgdGhlcmUncyBhIHBlbmRpbmdcbiAgICAgIC8vIHVwZGF0ZSBvciBjb250ZXh0IGNoYW5nZS5cbiAgICAgIHZhciBoYXNTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQgPSBjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIGlmICghaGFzU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0ICYmIC8vIElmIHRoaXMgaXMgdGhlIHNlY29uZCBwYXNzIG9mIGFuIGVycm9yIG9yIHN1c3BlbnNlIGJvdW5kYXJ5LCB0aGVyZVxuICAgICAgLy8gbWF5IG5vdCBiZSB3b3JrIHNjaGVkdWxlZCBvbiBgY3VycmVudGAsIHNvIHdlIGNoZWNrIGZvciB0aGlzIGZsYWcuXG4gICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyQxKSB7XG4gICAgICAgIC8vIE5vIHBlbmRpbmcgdXBkYXRlcyBvciBjb250ZXh0LiBCYWlsIG91dCBub3cuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGF0dGVtcHRFYXJseUJhaWxvdXRJZk5vU2NoZWR1bGVkVXBkYXRlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9uIHRoaXMgZmliZXIsIGJ1dCB0aGVyZSBhcmUgbm8gbmV3IHByb3BzXG4gICAgICAgIC8vIG5vciBsZWdhY3kgY29udGV4dC4gU2V0IHRoaXMgdG8gZmFsc2UuIElmIGFuIHVwZGF0ZSBxdWV1ZSBvciBjb250ZXh0XG4gICAgICAgIC8vIGNvbnN1bWVyIHByb2R1Y2VzIGEgY2hhbmdlZCB2YWx1ZSwgaXQgd2lsbCBzZXQgdGhpcyB0byB0cnVlLiBPdGhlcndpc2UsXG4gICAgICAgIC8vIHRoZSBjb21wb25lbnQgd2lsbCBhc3N1bWUgdGhlIGNoaWxkcmVuIGhhdmUgbm90IGNoYW5nZWQgYW5kIGJhaWwgb3V0LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcblxuICAgIGlmIChnZXRJc0h5ZHJhdGluZygpICYmIGlzRm9ya2VkQ2hpbGQod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGNoaWxkIGJlbG9uZ3MgdG8gYSBsaXN0IG9mIG11bGlwbGUgY2hpbGRyZW4gaW5cbiAgICAgIC8vIGl0cyBwYXJlbnQuXG4gICAgICAvL1xuICAgICAgLy8gSW4gYSB0cnVlIG11bHRpLXRocmVhZGVkIGltcGxlbWVudGF0aW9uLCB3ZSB3b3VsZCByZW5kZXIgY2hpbGRyZW4gb25cbiAgICAgIC8vIHBhcmFsbGVsIHRocmVhZHMuIFRoaXMgd291bGQgcmVwcmVzZW50IHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgcmVuZGVyXG4gICAgICAvLyB0aHJlYWQgZm9yIHRoaXMgc3VidHJlZS5cbiAgICAgIC8vXG4gICAgICAvLyBXZSBvbmx5IHVzZSB0aGlzIGZvciBpZCBnZW5lcmF0aW9uIGR1cmluZyBoeWRyYXRpb24sIHdoaWNoIGlzIHdoeSB0aGVcbiAgICAgIC8vIGxvZ2ljIGlzIGxvY2F0ZWQgaW4gdGhpcyBzcGVjaWFsIGJyYW5jaC5cbiAgICAgIHZhciBzbG90SW5kZXggPSB3b3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICAgIHZhciBudW1iZXJPZkZvcmtzID0gZ2V0Rm9ya3NBdExldmVsKCk7XG4gICAgICBwdXNoVHJlZUlkKHdvcmtJblByb2dyZXNzLCBudW1iZXJPZkZvcmtzLCBzbG90SW5kZXgpO1xuICAgIH1cbiAgfSAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjbGVhciBwZW5kaW5nIHVwZGF0ZSBwcmlvcml0eS5cbiAgLy8gVE9ETzogVGhpcyBhc3N1bWVzIHRoYXQgd2UncmUgYWJvdXQgdG8gZXZhbHVhdGUgdGhlIGNvbXBvbmVudCBhbmQgcHJvY2Vzc1xuICAvLyB0aGUgdXBkYXRlIHF1ZXVlLiBIb3dldmVyLCB0aGVyZSdzIGFuIGV4Y2VwdGlvbjogU2ltcGxlTWVtb0NvbXBvbmVudFxuICAvLyBzb21ldGltZXMgYmFpbHMgb3V0IGxhdGVyIGluIHRoZSBiZWdpbiBwaGFzZS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGRcbiAgLy8gbW92ZSB0aGlzIGFzc2lnbm1lbnQgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBhbmQgaW50byBlYWNoIGJyYW5jaC5cblxuXG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF6eUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBDb21wb25lbnQgPyB1bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQgPyBfdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50LCBfdW5yZXNvbHZlZFByb3BzKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQsIF9yZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVIb3N0SG9pc3RhYmxlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIH1cblxuICAgIC8vIEZhbGwgdGhyb3VnaFxuXG4gICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlSG9zdFNpbmdsZXRvbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdENvbXBvbmVudCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RUZXh0JDEoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzMiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IHR5cGUgPyBfdW5yZXNvbHZlZFByb3BzMiA6IHJlc29sdmVEZWZhdWx0UHJvcHModHlwZSwgX3VucmVzb2x2ZWRQcm9wczIpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVGb3J3YXJkUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBfcmVzb2x2ZWRQcm9wczIsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgTW9kZTpcbiAgICAgIHJldHVybiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX3R5cGUyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBSZXNvbHZlIG91dGVyIHByb3BzIGZpcnN0LCB0aGVuIHJlc29sdmUgaW5uZXIgcHJvcHMuXG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLCBfdW5yZXNvbHZlZFByb3BzMyk7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gX3R5cGUyLnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBfcmVzb2x2ZWRQcm9wczMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKF90eXBlMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLnR5cGUsIF9yZXNvbHZlZFByb3BzMyk7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfdHlwZTIsIF9yZXNvbHZlZFByb3BzMywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHM0ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudDIgPyBfdW5yZXNvbHZlZFByb3BzNCA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDIsIF91bnJlc29sdmVkUHJvcHM0KTtcblxuICAgICAgICByZXR1cm4gbW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQyLCBfcmVzb2x2ZWRQcm9wczQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBDYWNoZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVDYWNoZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gXCIgKyAnUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xufVxuXG52YXIgdmFsdWVDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG52YXIgcmVuZGVyZXJDdXJzb3JERVY7XG5cbntcbiAgcmVuZGVyZXJDdXJzb3JERVYgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG59XG5cbnZhciByZW5kZXJlclNpZ2lsO1xuXG57XG4gIC8vIFVzZSB0aGlzIHRvIGRldGVjdCBtdWx0aXBsZSByZW5kZXJlcnMgdXNpbmcgdGhlIHNhbWUgY29udGV4dFxuICByZW5kZXJlclNpZ2lsID0ge307XG59XG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG52YXIgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbnZhciBsYXN0RnVsbHlPYnNlcnZlZENvbnRleHQgPSBudWxsO1xudmFyIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbmZ1bmN0aW9uIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpIHtcbiAgLy8gVGhpcyBpcyBjYWxsZWQgcmlnaHQgYmVmb3JlIFJlYWN0IHlpZWxkcyBleGVjdXRpb24sIHRvIGVuc3VyZSBgcmVhZENvbnRleHRgXG4gIC8vIGNhbm5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGUgcmVuZGVyIHBoYXNlLlxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gIGxhc3RGdWxseU9ic2VydmVkQ29udGV4dCA9IG51bGw7XG5cbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpIHtcbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSB0cnVlO1xuICB9XG59XG5mdW5jdGlvbiBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHB1c2hQcm92aWRlcihwcm92aWRlckZpYmVyLCBjb250ZXh0LCBuZXh0VmFsdWUpIHtcbiAge1xuICAgIHB1c2godmFsdWVDdXJzb3IsIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSwgcHJvdmlkZXJGaWJlcik7XG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gbmV4dFZhbHVlO1xuXG4gICAge1xuICAgICAgcHVzaChyZW5kZXJlckN1cnNvckRFViwgY29udGV4dC5fY3VycmVudFJlbmRlcmVyLCBwcm92aWRlckZpYmVyKTtcblxuICAgICAgaWYgKGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gdW5kZWZpbmVkICYmIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gbnVsbCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwpIHtcbiAgICAgICAgZXJyb3IoJ0RldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSAnICsgJ3NhbWUgY29udGV4dCBwcm92aWRlci4gVGhpcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWw7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3BQcm92aWRlcihjb250ZXh0LCBwcm92aWRlckZpYmVyKSB7XG4gIHZhciBjdXJyZW50VmFsdWUgPSB2YWx1ZUN1cnNvci5jdXJyZW50O1xuXG4gIHtcbiAgICB7XG4gICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWU7XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIGN1cnJlbnRSZW5kZXJlciA9IHJlbmRlcmVyQ3Vyc29yREVWLmN1cnJlbnQ7XG4gICAgICBwb3AocmVuZGVyZXJDdXJzb3JERVYsIHByb3ZpZGVyRmliZXIpO1xuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gY3VycmVudFJlbmRlcmVyO1xuICAgIH1cbiAgfVxuXG4gIHBvcCh2YWx1ZUN1cnNvciwgcHJvdmlkZXJGaWJlcik7XG59XG5mdW5jdGlvbiBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKHBhcmVudCwgcmVuZGVyTGFuZXMsIHByb3BhZ2F0aW9uUm9vdCkge1xuICAvLyBVcGRhdGUgdGhlIGNoaWxkIGxhbmVzIG9mIGFsbCB0aGUgYW5jZXN0b3JzLCBpbmNsdWRpbmcgdGhlIGFsdGVybmF0ZXMuXG4gIHZhciBub2RlID0gcGFyZW50O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IG5vZGUuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKCFpc1N1YnNldE9mTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIG5vZGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobm9kZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgIWlzU3Vic2V0T2ZMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2UgO1xuXG4gICAgaWYgKG5vZGUgPT09IHByb3BhZ2F0aW9uUm9vdCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG5cbiAge1xuICAgIGlmIChub2RlICE9PSBwcm9wYWdhdGlvblJvb3QpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB0byBmaW5kIHRoZSBwcm9wYWdhdGlvbiByb290IHdoZW4gc2NoZWR1bGluZyBjb250ZXh0IHdvcmsuICcgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlX2VhZ2VyKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvcGFnYXRlQ29udGV4dENoYW5nZV9lYWdlcih3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgcmVuZGVyTGFuZXMpIHtcblxuICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBjaGlsZCB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICBmaWJlci5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgIHZhciBuZXh0RmliZXIgPSB2b2lkIDA7IC8vIFZpc2l0IHRoaXMgZmliZXIuXG5cbiAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcblxuICAgIGlmIChsaXN0ICE9PSBudWxsKSB7XG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdC5maXJzdENvbnRleHQ7XG5cbiAgICAgIHdoaWxlIChkZXBlbmRlbmN5ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IG1hdGNoZXMuXG4gICAgICAgIGlmIChkZXBlbmRlbmN5LmNvbnRleHQgPT09IGNvbnRleHQpIHtcbiAgICAgICAgICAvLyBNYXRjaCEgU2NoZWR1bGUgYW4gdXBkYXRlIG9uIHRoaXMgZmliZXIuXG4gICAgICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGEgZm9yY2UgdXBkYXRlIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlOyAvLyBUT0RPOiBCZWNhdXNlIHdlIGRvbid0IGhhdmUgYSB3b3JrLWluLXByb2dyZXNzLCB0aGlzIHdpbGwgYWRkIHRoZVxuICAgICAgICAgICAgLy8gdXBkYXRlIHRvIHRoZSBjdXJyZW50IGZpYmVyLCB0b28sIHdoaWNoIG1lYW5zIGl0IHdpbGwgcGVyc2lzdCBldmVuIGlmXG4gICAgICAgICAgICAvLyB0aGlzIHJlbmRlciBpcyB0aHJvd24gYXdheS4gU2luY2UgaXQncyBhIHJhY2UgY29uZGl0aW9uLCBub3Qgc3VyZSBpdCdzXG4gICAgICAgICAgICAvLyB3b3J0aCBmaXhpbmcuXG4gICAgICAgICAgICAvLyBJbmxpbmVkIGBlbnF1ZXVlVXBkYXRlYCB0byByZW1vdmUgaW50ZXJsZWF2ZWQgdXBkYXRlIGNoZWNrXG5cbiAgICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICBpZiAodXBkYXRlUXVldWUgPT09IG51bGwpIDsgZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBzaGFyZWRRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcbiAgICAgICAgICAgICAgdmFyIHBlbmRpbmcgPSBzaGFyZWRRdWV1ZS5wZW5kaW5nO1xuXG4gICAgICAgICAgICAgIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgICAgICAgICAgICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgICAgICAgICAgICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNoYXJlZFF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChmaWJlci5yZXR1cm4sIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7IC8vIE1hcmsgdGhlIHVwZGF0ZWQgbGFuZXMgb24gdGhlIGxpc3QsIHRvby5cblxuICAgICAgICAgIGxpc3QubGFuZXMgPSBtZXJnZUxhbmVzKGxpc3QubGFuZXMsIHJlbmRlckxhbmVzKTsgLy8gU2luY2Ugd2UgYWxyZWFkeSBmb3VuZCBhIG1hdGNoLCB3ZSBjYW4gc3RvcCB0cmF2ZXJzaW5nIHRoZVxuICAgICAgICAgIC8vIGRlcGVuZGVuY3kgbGlzdC5cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3kubmV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAvLyBEb24ndCBzY2FuIGRlZXBlciBpZiB0aGlzIGlzIGEgbWF0Y2hpbmcgcHJvdmlkZXJcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLnR5cGUgPyBudWxsIDogZmliZXIuY2hpbGQ7XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IERlaHlkcmF0ZWRGcmFnbWVudCkge1xuICAgICAgLy8gSWYgYSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGJvdW5kYXJ5IGlzIGluIHRoaXMgc3VidHJlZSwgd2UgZG9uJ3Qga25vd1xuICAgICAgLy8gaWYgaXQgd2lsbCBoYXZlIGFueSBjb250ZXh0IGNvbnN1bWVycyBpbiBpdC4gVGhlIGJlc3Qgd2UgY2FuIGRvIGlzXG4gICAgICAvLyBtYXJrIGl0IGFzIGhhdmluZyB1cGRhdGVzLlxuICAgICAgdmFyIHBhcmVudFN1c3BlbnNlID0gZmliZXIucmV0dXJuO1xuXG4gICAgICBpZiAocGFyZW50U3VzcGVuc2UgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZSBqdXN0IGNhbWUgZnJvbSBhIHBhcmVudCBzbyB3ZSBtdXN0IGhhdmUgaGFkIGEgcGFyZW50LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICAgICAgfVxuXG4gICAgICBwYXJlbnRTdXNwZW5zZS5sYW5lcyA9IG1lcmdlTGFuZXMocGFyZW50U3VzcGVuc2UubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBfYWx0ZXJuYXRlID0gcGFyZW50U3VzcGVuc2UuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoX2FsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBfYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhfYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBwYXNzaW5nIHRoaXMgZmliZXIgYXMgdGhlIHBhcmVudFxuICAgICAgLy8gYmVjYXVzZSB3ZSB3YW50IHRvIHNjaGVkdWxlIHRoaXMgZmliZXIgYXMgaGF2aW5nIHdvcmtcbiAgICAgIC8vIG9uIGl0cyBjaGlsZHJlbi4gV2UnbGwgdXNlIHRoZSBjaGlsZExhbmVzIG9uXG4gICAgICAvLyB0aGlzIGZpYmVyIHRvIGluZGljYXRlIHRoYXQgYSBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuXG5cbiAgICAgIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgocGFyZW50U3VzcGVuc2UsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5zaWJsaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUcmF2ZXJzZSBkb3duLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgY2hpbGQgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICBuZXh0RmliZXIucmV0dXJuID0gZmliZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNoaWxkLiBUcmF2ZXJzZSB0byBuZXh0IHNpYmxpbmcuXG4gICAgICBuZXh0RmliZXIgPSBmaWJlcjtcblxuICAgICAgd2hpbGUgKG5leHRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmV4dEZpYmVyID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIC8vIFdlJ3JlIGJhY2sgdG8gdGhlIHJvb3Qgb2YgdGhpcyBzdWJ0cmVlLiBFeGl0LlxuICAgICAgICAgIG5leHRGaWJlciA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2libGluZyA9IG5leHRGaWJlci5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gU2V0IHRoZSByZXR1cm4gcG9pbnRlciBvZiB0aGUgc2libGluZyB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICAgICAgICBzaWJsaW5nLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgbmV4dEZpYmVyID0gc2libGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBObyBtb3JlIHNpYmxpbmdzLiBUcmF2ZXJzZSB1cC5cblxuXG4gICAgICAgIG5leHRGaWJlciA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBuZXh0RmliZXI7XG4gIH1cbn1cbmZ1bmN0aW9uIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0RnVsbHlPYnNlcnZlZENvbnRleHQgPSBudWxsO1xuICB2YXIgZGVwZW5kZW5jaWVzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuXG4gIGlmIChkZXBlbmRlbmNpZXMgIT09IG51bGwpIHtcbiAgICB7XG4gICAgICB2YXIgZmlyc3RDb250ZXh0ID0gZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dDtcblxuICAgICAgaWYgKGZpcnN0Q29udGV4dCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShkZXBlbmRlbmNpZXMubGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgICAgIC8vIENvbnRleHQgbGlzdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS4gTWFyayB0aGF0IHRoaXMgZmliZXIgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICAgICAgfSAvLyBSZXNldCB0aGUgd29yay1pbi1wcm9ncmVzcyBsaXN0XG5cblxuICAgICAgICBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlYWRDb250ZXh0KGNvbnRleHQpIHtcbiAge1xuICAgIC8vIFRoaXMgd2FybmluZyB3b3VsZCBmaXJlIGlmIHlvdSByZWFkIGNvbnRleHQgaW5zaWRlIGEgSG9vayBsaWtlIHVzZU1lbW8uXG4gICAgLy8gVW5saWtlIHRoZSBjbGFzcyBjaGVjayBiZWxvdywgaXQncyBub3QgZW5mb3JjZWQgaW4gcHJvZHVjdGlvbiBmb3IgcGVyZi5cbiAgICBpZiAoaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVikge1xuICAgICAgZXJyb3IoJ0NvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuICcgKyAnSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gJyArICdJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgJyArICdpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLCBjb250ZXh0KTtcbn1cbmZ1bmN0aW9uIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxhdGlvbihjb25zdW1lciwgY29udGV4dCwgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID09PSBudWxsKSB7XG4gICAgcHJlcGFyZVRvUmVhZENvbnRleHQoY29uc3VtZXIsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGNvbnN1bWVyLCBjb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gcmVhZENvbnRleHRGb3JDb25zdW1lcihjb25zdW1lciwgY29udGV4dCkge1xuICB2YXIgdmFsdWUgPSBjb250ZXh0Ll9jdXJyZW50VmFsdWUgO1xuXG4gIGlmIChsYXN0RnVsbHlPYnNlcnZlZENvbnRleHQgPT09IGNvbnRleHQpIDsgZWxzZSB7XG4gICAgdmFyIGNvbnRleHRJdGVtID0ge1xuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIG1lbW9pemVkVmFsdWU6IHZhbHVlLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAobGFzdENvbnRleHREZXBlbmRlbmN5ID09PSBudWxsKSB7XG4gICAgICBpZiAoY29uc3VtZXIgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgICAgIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgZGVwZW5kZW5jeSBmb3IgdGhpcyBjb21wb25lbnQuIENyZWF0ZSBhIG5ldyBsaXN0LlxuXG5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGNvbnRleHRJdGVtO1xuICAgICAgY29uc3VtZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICBsYW5lczogTm9MYW5lcyxcbiAgICAgICAgZmlyc3RDb250ZXh0OiBjb250ZXh0SXRlbVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIGEgbmV3IGNvbnRleHQgaXRlbS5cbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGxhc3RDb250ZXh0RGVwZW5kZW5jeS5uZXh0ID0gY29udGV4dEl0ZW07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vLyByZXBsYWNlIGl0IHdpdGggYSBsaWdodHdlaWdodCBzaGltIHRoYXQgb25seSBoYXMgdGhlIGZlYXR1cmVzIHdlIHVzZS5cblxudmFyIEFib3J0Q29udHJvbGxlckxvY2FsID0gdHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gJ3VuZGVmaW5lZCcgPyBBYm9ydENvbnRyb2xsZXIgOiAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF1cbi8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuZnVuY3Rpb24gQWJvcnRDb250cm9sbGVyU2hpbSgpIHtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgc2lnbmFsID0gdGhpcy5zaWduYWwgPSB7XG4gICAgYWJvcnRlZDogZmFsc2UsXG4gICAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2lnbmFsLmFib3J0ZWQgPSB0cnVlO1xuICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH07XG59IDsgLy8gSW50ZW50aW9uYWxseSBub3QgbmFtZWQgaW1wb3J0cyBiZWNhdXNlIFJvbGx1cCB3b3VsZFxuLy8gdXNlIGR5bmFtaWMgZGlzcGF0Y2ggZm9yIENvbW1vbkpTIGludGVyb3AgbmFtZWQgaW1wb3J0cy5cblxudmFyIHNjaGVkdWxlQ2FsbGJhY2skMSA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFxuICAgIE5vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5O1xudmFyIENhY2hlQ29udGV4dCA9IHtcbiAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgLy8gV2UgZG9uJ3QgdXNlIENvbnN1bWVyL1Byb3ZpZGVyIGZvciBDYWNoZSBjb21wb25lbnRzLiBTbyB3ZSdsbCBjaGVhdC5cbiAgQ29uc3VtZXI6IG51bGwsXG4gIFByb3ZpZGVyOiBudWxsLFxuICAvLyBXZSdsbCBpbml0aWFsaXplIHRoZXNlIGF0IHRoZSByb290LlxuICBfY3VycmVudFZhbHVlOiBudWxsLFxuICBfY3VycmVudFZhbHVlMjogbnVsbCxcbiAgX3RocmVhZENvdW50OiAwLFxuICBfZGVmYXVsdFZhbHVlOiBudWxsLFxuICBfZ2xvYmFsTmFtZTogbnVsbFxufSA7XG5cbntcbiAgQ2FjaGVDb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSBudWxsO1xuICBDYWNoZUNvbnRleHQuX2N1cnJlbnRSZW5kZXJlcjIgPSBudWxsO1xufSAvLyBDcmVhdGVzIGEgbmV3IGVtcHR5IENhY2hlIGluc3RhbmNlIHdpdGggYSByZWYtY291bnQgb2YgMC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZVxuLy8gZm9yIHJldGFpbmluZyB0aGUgY2FjaGUgb25jZSBpdCBpcyBpbiB1c2UgKHJldGFpbkNhY2hlKSwgYW5kIHJlbGVhc2luZyB0aGUgY2FjaGVcbi8vIG9uY2UgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCAocmVsZWFzZUNhY2hlKS5cblxuXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblxuICB2YXIgY2FjaGUgPSB7XG4gICAgY29udHJvbGxlcjogbmV3IEFib3J0Q29udHJvbGxlckxvY2FsKCksXG4gICAgZGF0YTogbmV3IE1hcCgpLFxuICAgIHJlZkNvdW50OiAwXG4gIH07XG4gIHJldHVybiBjYWNoZTtcbn1cbmZ1bmN0aW9uIHJldGFpbkNhY2hlKGNhY2hlKSB7XG5cbiAge1xuICAgIGlmIChjYWNoZS5jb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICB3YXJuKCdBIGNhY2hlIGluc3RhbmNlIHdhcyByZXRhaW5lZCBhZnRlciBpdCB3YXMgYWxyZWFkeSBmcmVlZC4gJyArICdUaGlzIGxpa2VseSBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgfVxuICB9XG5cbiAgY2FjaGUucmVmQ291bnQrKztcbn0gLy8gQ2xlYW51cCBhIGNhY2hlIGluc3RhbmNlLCBwb3RlbnRpYWxseSBmcmVlaW5nIGl0IGlmIHRoZXJlIGFyZSBubyBtb3JlIHJlZmVyZW5jZXNcblxuZnVuY3Rpb24gcmVsZWFzZUNhY2hlKGNhY2hlKSB7XG5cbiAgY2FjaGUucmVmQ291bnQtLTtcblxuICB7XG4gICAgaWYgKGNhY2hlLnJlZkNvdW50IDwgMCkge1xuICAgICAgd2FybignQSBjYWNoZSBpbnN0YW5jZSB3YXMgcmVsZWFzZWQgYWZ0ZXIgaXQgd2FzIGFscmVhZHkgZnJlZWQuICcgKyAnVGhpcyBsaWtlbHkgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0LicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYWNoZS5yZWZDb3VudCA9PT0gMCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2skMShOb3JtYWxQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgY2FjaGUuY29udHJvbGxlci5hYm9ydCgpO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBwdXNoQ2FjaGVQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgY2FjaGUpIHtcblxuICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENhY2hlQ29udGV4dCwgY2FjaGUpO1xufVxuZnVuY3Rpb24gcG9wQ2FjaGVQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgY2FjaGUpIHtcblxuICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbn1cblxudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBOb1RyYW5zaXRpb24gPSBudWxsO1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkge1xuICByZXR1cm4gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMi50cmFuc2l0aW9uO1xufSAvLyBXaGVuIHJldHJ5aW5nIGEgU3VzcGVuc2UvT2Zmc2NyZWVuIGJvdW5kYXJ5LCB3ZSByZXN0b3JlIHRoZSBjYWNoZSB0aGF0IHdhc1xuLy8gdXNlZCBkdXJpbmcgdGhlIHByZXZpb3VzIHJlbmRlciBieSBwbGFjaW5nIGl0IGhlcmUsIG9uIHRoZSBzdGFjay5cblxudmFyIHJlc3VtZWRDYWNoZSA9IGNyZWF0ZUN1cnNvcihudWxsKTsgLy8gRHVyaW5nIHRoZSByZW5kZXIvc3luY2hyb25vdXMgY29tbWl0IHBoYXNlLCB3ZSBkb24ndCBhY3R1YWxseSBwcm9jZXNzIHRoZVxuXG5mdW5jdGlvbiBwZWVrQ2FjaGVGcm9tUG9vbCgpIHtcbiAgLy8gSWYgd2UncmUgcmVuZGVyaW5nIGluc2lkZSBhIFN1c3BlbnNlIGJvdW5kYXJ5IHRoYXQgaXMgY3VycmVudGx5IGhpZGRlbixcbiAgLy8gd2Ugc2hvdWxkIHVzZSB0aGUgc2FtZSBjYWNoZSB0aGF0IHdlIHVzZWQgZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIsIGlmXG4gIC8vIG9uZSBleGlzdHMuXG5cblxuICB2YXIgY2FjaGVSZXN1bWVkRnJvbVByZXZpb3VzUmVuZGVyID0gcmVzdW1lZENhY2hlLmN1cnJlbnQ7XG5cbiAgaWYgKGNhY2hlUmVzdW1lZEZyb21QcmV2aW91c1JlbmRlciAhPT0gbnVsbCkge1xuICAgIHJldHVybiBjYWNoZVJlc3VtZWRGcm9tUHJldmlvdXNSZW5kZXI7XG4gIH0gLy8gT3RoZXJ3aXNlLCBjaGVjayB0aGUgcm9vdCdzIGNhY2hlIHBvb2wuXG5cblxuICB2YXIgcm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuICB2YXIgY2FjaGVGcm9tUm9vdENhY2hlUG9vbCA9IHJvb3QucG9vbGVkQ2FjaGU7XG4gIHJldHVybiBjYWNoZUZyb21Sb290Q2FjaGVQb29sO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0Q2FjaGVGcm9tUG9vbChyZW5kZXJMYW5lcykge1xuICAvLyBTaW1pbGFyIHRvIHByZXZpb3VzIGZ1bmN0aW9uLCBleGNlcHQgaWYgdGhlcmUncyBub3QgYWxyZWFkeSBhIGNhY2hlIGluIHRoZVxuICAvLyBwb29sLCB3ZSBhbGxvY2F0ZSBhIG5ldyBvbmUuXG4gIHZhciBjYWNoZUZyb21Qb29sID0gcGVla0NhY2hlRnJvbVBvb2woKTtcblxuICBpZiAoY2FjaGVGcm9tUG9vbCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBjYWNoZUZyb21Qb29sO1xuICB9IC8vIENyZWF0ZSBhIGZyZXNoIGNhY2hlIGFuZCBhZGQgaXQgdG8gdGhlIHJvb3QgY2FjaGUgcG9vbC4gQSBjYWNoZSBjYW4gaGF2ZVxuICAvLyBtdWx0aXBsZSBvd25lcnM6XG4gIC8vIC0gQSBjYWNoZSBwb29sIHRoYXQgbGl2ZXMgb24gdGhlIEZpYmVyUm9vdC4gVGhpcyBpcyB3aGVyZSBhbGwgZnJlc2ggY2FjaGVzXG4gIC8vICAgYXJlIG9yaWdpbmFsbHkgY3JlYXRlZCAoVE9ETzogZXhjZXB0IGR1cmluZyByZWZyZXNoZXMsIHVudGlsIHdlIGltcGxlbWVudFxuICAvLyAgIHRoaXMgY29ycmVjdGx5KS4gVGhlIHJvb3QgdGFrZXMgb3duZXJzaGlwIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGNhY2hlIGlzXG4gIC8vICAgY3JlYXRlZC4gQ29uY2VwdHVhbGx5LCByb290LnBvb2xlZENhY2hlIGlzIGFuIE9wdGlvbjxBcmM8Q2FjaGU+PiAob3duZWQpLFxuICAvLyAgIGFuZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gaXMgYSAmQXJjPENhY2hlPiAoYm9ycm93ZWQpLlxuICAvLyAtIE9uZSBvZiBzZXZlcmFsIGZpYmVyIHR5cGVzOiBob3N0IHJvb3QsIGNhY2hlIGJvdW5kYXJ5LCBzdXNwZW5zZVxuICAvLyAgIGNvbXBvbmVudC4gVGhlc2UgcmV0YWluIGFuZCByZWxlYXNlIGluIHRoZSBjb21taXQgcGhhc2UuXG5cblxuICB2YXIgcm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuICB2YXIgZnJlc2hDYWNoZSA9IGNyZWF0ZUNhY2hlKCk7XG4gIHJvb3QucG9vbGVkQ2FjaGUgPSBmcmVzaENhY2hlO1xuICByZXRhaW5DYWNoZShmcmVzaENhY2hlKTtcblxuICBpZiAoZnJlc2hDYWNoZSAhPT0gbnVsbCkge1xuICAgIHJvb3QucG9vbGVkQ2FjaGVMYW5lcyB8PSByZW5kZXJMYW5lcztcbiAgfVxuXG4gIHJldHVybiBmcmVzaENhY2hlO1xufVxuZnVuY3Rpb24gcHVzaFRyYW5zaXRpb24ob2Zmc2NyZWVuV29ya0luUHJvZ3Jlc3MsIHByZXZDYWNoZVBvb2wsIG5ld1RyYW5zaXRpb25zKSB7XG4gIHtcbiAgICBpZiAocHJldkNhY2hlUG9vbCA9PT0gbnVsbCkge1xuICAgICAgcHVzaChyZXN1bWVkQ2FjaGUsIHJlc3VtZWRDYWNoZS5jdXJyZW50LCBvZmZzY3JlZW5Xb3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1c2gocmVzdW1lZENhY2hlLCBwcmV2Q2FjaGVQb29sLnBvb2wsIG9mZnNjcmVlbldvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvcFRyYW5zaXRpb24od29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpIHtcbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcblxuICAgIHtcbiAgICAgIHBvcChyZXN1bWVkQ2FjaGUsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFN1c3BlbmRlZENhY2hlKCkge1xuICAvLyBjYWNoZSB0aGF0IHdvdWxkIGhhdmUgYmVlbiB1c2VkIHRvIHJlbmRlciBmcmVzaCBkYXRhIGR1cmluZyB0aGlzIHJlbmRlcixcbiAgLy8gaWYgdGhlcmUgd2FzIGFueSwgc28gdGhhdCB3ZSBjYW4gcmVzdW1lIHJlbmRlcmluZyB3aXRoIHRoZSBzYW1lIGNhY2hlIHdoZW5cbiAgLy8gd2UgcmVjZWl2ZSBtb3JlIGRhdGEuXG5cblxuICB2YXIgY2FjaGVGcm9tUG9vbCA9IHBlZWtDYWNoZUZyb21Qb29sKCk7XG5cbiAgaWYgKGNhY2hlRnJvbVBvb2wgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gV2UgbXVzdCBhbHNvIHNhdmUgdGhlIHBhcmVudCwgc28gdGhhdCB3aGVuIHdlIHJlc3VtZSB3ZSBjYW4gZGV0ZWN0XG4gICAgLy8gYSByZWZyZXNoLlxuICAgIHBhcmVudDogQ2FjaGVDb250ZXh0Ll9jdXJyZW50VmFsdWUgLFxuICAgIHBvb2w6IGNhY2hlRnJvbVBvb2xcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldE9mZnNjcmVlbkRlZmVycmVkQ2FjaGUoKSB7XG5cbiAgdmFyIGNhY2hlRnJvbVBvb2wgPSBwZWVrQ2FjaGVGcm9tUG9vbCgpO1xuXG4gIGlmIChjYWNoZUZyb21Qb29sID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8vIFdlIG11c3QgYWxzbyBzdG9yZSB0aGUgcGFyZW50LCBzbyB0aGF0IHdoZW4gd2UgcmVzdW1lIHdlIGNhbiBkZXRlY3RcbiAgICAvLyBhIHJlZnJlc2guXG4gICAgcGFyZW50OiBDYWNoZUNvbnRleHQuX2N1cnJlbnRWYWx1ZSAsXG4gICAgcG9vbDogY2FjaGVGcm9tUG9vbFxuICB9O1xufVxuXG4vKipcbiAqIFRhZyB0aGUgZmliZXIgd2l0aCBhbiB1cGRhdGUgZWZmZWN0LiBUaGlzIHR1cm5zIGEgUGxhY2VtZW50IGludG9cbiAqIGEgUGxhY2VtZW50QW5kVXBkYXRlLlxuICovXG5cbmZ1bmN0aW9uIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpIHtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmKHdvcmtJblByb2dyZXNzKSB7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZiB8IFJlZlN0YXRpYztcbn1cblxuZnVuY3Rpb24gYXBwZW5kQWxsQ2hpbGRyZW4ocGFyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmVlZHNWaXNpYmlsaXR5VG9nZ2xlLCBpc0hpZGRlbikge1xuICB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgY3JlYXRlZCBidXQgd2UgbmVlZCByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsIHx8IChub2RlLnRhZyA9PT0gSG9zdFNpbmdsZXRvbiApKSA7IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG59IC8vIEFuIHVuZm9ydHVuYXRlIGZvcmsgb2YgYXBwZW5kQWxsQ2hpbGRyZW4gYmVjYXVzZSB3ZSBoYXZlIHR3byBkaWZmZXJlbnQgcGFyZW50IHR5cGVzLlxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkIHRvXG4gICAgLy8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzKSB7XG4gICAgICAvLyBJbiBtdXRhdGlvbiBtb2RlLCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIGEgYmFpbG91dCBiZWNhdXNlXG4gICAgICAvLyB3ZSB3b24ndCB0b3VjaCB0aGlzIG5vZGUgZXZlbiBpZiBjaGlsZHJlbiBjaGFuZ2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICB9XG59IC8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBjb21wbGV0ZSBwaGFzZSwgYmVjYXVzZVxuLy8gaXQgbWlnaHQgdGhyb3cgdG8gc3VzcGVuZCwgYW5kIGlmIHRoZSByZXNvdXJjZSBpbW1lZGlhdGVseSBsb2FkcywgdGhlIHdvcmtcbi8vIGxvb3Agd2lsbCByZXN1bWUgcmVuZGVyaW5nIGFzIGlmIHRoZSB3b3JrLWluLXByb2dyZXNzIGNvbXBsZXRlZC4gU28gaXQgbXVzdFxuLy8gZnVsbHkgY29tcGxldGUuXG4vLyBUT0RPOiBUaGlzIHNob3VsZCBpZGVhbGx5IG1vdmUgdG8gYmVnaW4gcGhhc2UsIGJ1dCBjdXJyZW50bHkgdGhlIGluc3RhbmNlIGlzXG4vLyBub3QgY3JlYXRlZCB1bnRpbCB0aGUgY29tcGxldGUgcGhhc2UuIEZvciBvdXIgZXhpc3RpbmcgdXNlIGNhc2VzLCBob3N0IG5vZGVzXG4vLyB0aGF0IHN1c3BlbmQgZG9uJ3QgaGF2ZSBjaGlsZHJlbiwgc28gaXQgZG9lc24ndCBtYXR0ZXIuIEJ1dCB0aGF0IG1pZ2h0IG5vdFxuLy8gYWx3YXlzIGJlIHRydWUgaW4gdGhlIGZ1dHVyZS5cblxuXG5mdW5jdGlvbiBwcmVsb2FkSW5zdGFuY2VBbmRTdXNwZW5kSWZOZWVkZWQod29ya0luUHJvZ3Jlc3MsIHR5cGUsIHByb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgLy8gSWYgdGhpcyBmbGFnIHdhcyBzZXQgcHJldmlvdXNseSwgd2UgY2FuIHJlbW92ZSBpdC4gVGhlIGZsYWdcbiAgICAvLyByZXByZXNlbnRzIHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIHNldCBvZiBwcm9wcyBtaWdodCBldmVyIG5lZWQgdG9cbiAgICAvLyBzdXNwZW5kLiBUaGUgc2FmZXN0IHRoaW5nIHRvIGRvIGlzIGZvciBtYXlTdXNwZW5kQ29tbWl0IHRvIGFsd2F5c1xuICAgIC8vIHJldHVybiB0cnVlLCBidXQgaWYgdGhlIHJlbmRlcmVyIGlzIHJlYXNvbmFibHkgY29uZmlkZW50IHRoYXQgdGhlXG4gICAgLy8gdW5kZXJseWluZyByZXNvdXJjZSB3b24ndCBiZSBldmljdGVkLCBpdCBjYW4gcmV0dXJuIGZhbHNlIGFzIGFcbiAgICAvLyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfk1heVN1c3BlbmRDb21taXQ7XG4gICAgcmV0dXJuO1xuICB9IC8vIE1hcmsgdGhpcyBmaWJlciB3aXRoIGEgZmxhZy4gVGhpcyBnZXRzIHNldCBvbiBhbGwgaG9zdCBpbnN0YW5jZXNcbn1cblxuZnVuY3Rpb24gcHJlbG9hZFJlc291cmNlQW5kU3VzcGVuZElmTmVlZGVkKHdvcmtJblByb2dyZXNzLCByZXNvdXJjZSwgdHlwZSwgcHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYSBmb3JrIG9mIHByZWxvYWRJbnN0YW5jZUFuZFN1c3BlbmRJZk5lZWRlZCwgYnV0IGZvciByZXNvdXJjZXMuXG4gIGlmICghbWF5UmVzb3VyY2VTdXNwZW5kQ29tbWl0KHJlc291cmNlKSkge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH5NYXlTdXNwZW5kQ29tbWl0O1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IE1heVN1c3BlbmRDb21taXQ7XG4gIHZhciByb290UmVuZGVyTGFuZXMgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcygpO1xuXG4gIGlmICghaW5jbHVkZXNPbmx5Tm9uVXJnZW50TGFuZXMocm9vdFJlbmRlckxhbmVzKSkgOyBlbHNlIHtcbiAgICB2YXIgaXNSZWFkeSA9IHByZWxvYWRSZXNvdXJjZShyZXNvdXJjZSk7XG5cbiAgICBpZiAoIWlzUmVhZHkpIHtcbiAgICAgIGlmIChzaG91bGRSZW1haW5PblByZXZpb3VzU2NyZWVuKCkpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkU3VzcGVuZENvbW1pdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1c3BlbmRDb21taXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgcmV0cnlRdWV1ZSkge1xuICB2YXIgd2FrZWFibGVzID0gcmV0cnlRdWV1ZTtcblxuICBpZiAod2FrZWFibGVzICE9PSBudWxsKSB7XG4gICAgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIGF0dGFjaCBhIHJldHJ5IGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlLlxuICAgIC8vIFRPRE86IE1vdmUgdG8gcGFzc2l2ZSBwaGFzZVxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGJvdW5kYXJ5IHN1c3BlbmRlZCwgYnV0IG5vIHdha2VhYmxlcyB3ZXJlIGFkZGVkIHRvIHRoZSByZXRyeVxuICAgIC8vIHF1ZXVlLiBDaGVjayBpZiB0aGUgcmVuZGVyZXIgc3VzcGVuZGVkIGNvbW1pdC4gSWYgc28sIHRoaXMgbWVhbnNcbiAgICAvLyB0aGF0IG9uY2UgdGhlIGZhbGxiYWNrIGlzIGNvbW1pdHRlZCwgd2UgY2FuIGltbWVkaWF0ZWx5IHJldHJ5XG4gICAgLy8gcmVuZGVyaW5nIGFnYWluLCBiZWNhdXNlIHJlbmRlcmluZyB3YXNuJ3QgYWN0dWFsbHkgYmxvY2tlZC4gT25seVxuICAgIC8vIHRoZSBjb21taXQgcGhhc2UuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgYSBtb2RlbCB3aGVyZSB3ZSBhbHdheXMgc2NoZWR1bGUgYW4gaW1tZWRpYXRlIHJldHJ5LCBldmVuXG4gICAgLy8gZm9yIG5vcm1hbCBTdXNwZW5zZS4gVGhhdCB3YXkgdGhlIHJldHJ5IGNhbiBwYXJ0aWFsbHkgcmVuZGVyIHVwIHRvIHRoZVxuICAgIC8vIGZpcnN0IHRoaW5nIHRoYXQgc3VzcGVuZHMuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgU2NoZWR1bGVSZXRyeSkge1xuICAgICAgdmFyIHJldHJ5TGFuZSA9IC8vIFRPRE86IFRoaXMgY2hlY2sgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIGludG8gY2xhaW1OZXh0UmV0cnlMYW5lXG4gICAgICAvLyBJIGFsc28gc3VzcGVjdCB0aGF0IHdlIG5lZWQgc29tZSBmdXJ0aGVyIGNvbnNvbGlkYXRpb24gb2Ygb2Zmc2NyZWVuXG4gICAgICAvLyBhbmQgcmV0cnkgbGFuZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgIT09IE9mZnNjcmVlbkNvbXBvbmVudCA/IGNsYWltTmV4dFJldHJ5TGFuZSgpIDogT2Zmc2NyZWVuTGFuZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgcmV0cnlMYW5lKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFRleHQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAge1xuICAgIC8vIElmIHRoZSB0ZXh0IGRpZmZlcnMsIG1hcmsgaXQgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaW4gZG9uZSBpbiBjb21taXRXb3JrLlxuICAgIGlmIChvbGRUZXh0ICE9PSBuZXdUZXh0KSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spIHtcbiAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAvLyBJZiB3ZSdyZSBoeWRyYXRpbmcsIHdlIHNob3VsZCBjb25zdW1lIGFzIG1hbnkgaXRlbXMgYXMgd2UgY2FuXG4gICAgLy8gc28gd2UgZG9uJ3QgbGVhdmUgYW55IGJlaGluZC5cbiAgICByZXR1cm47XG4gIH1cblxuICBzd2l0Y2ggKHJlbmRlclN0YXRlLnRhaWxNb2RlKSB7XG4gICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciB0YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBsYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlICh0YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxhc3RUYWlsTm9kZSA9IHRhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhaWxOb2RlID0gdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChsYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIGxhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnY29sbGFwc2VkJzpcbiAgICAgIHtcbiAgICAgICAgLy8gQW55IGluc2VydGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgdGFpbCBsaXN0IGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgLy8gc2hvdWxkIGJlIGludmlzaWJsZS4gSWYgdGhlcmUgYXJlIGFscmVhZHkgbW91bnRlZCBib3VuZGFyaWVzXG4gICAgICAgIC8vIGFueXRoaW5nIGJlZm9yZSB0aGVtIGFyZSBub3QgY29uc2lkZXJlZCBmb3IgY29sbGFwc2luZy5cbiAgICAgICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgd2hvbGUgdGFpbCB0byBmaW5kIGlmXG4gICAgICAgIC8vIHRoZXJlIGFyZSBhbnkuXG4gICAgICAgIHZhciBfdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKF90YWlsTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChfdGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfbGFzdFRhaWxOb2RlID0gX3RhaWxOb2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90YWlsTm9kZSA9IF90YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKF9sYXN0VGFpbE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBBbGwgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSB0YWlsIGFyZSBpbnNlcnRpb25zLlxuICAgICAgICAgIGlmICghaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrICYmIHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIHN1c3BlbmRlZCBkdXJpbmcgdGhlIGhlYWQuIFdlIHdhbnQgdG8gc2hvdyBhdCBsZWFzdCBvbmVcbiAgICAgICAgICAgIC8vIHJvdyBhdCB0aGUgdGFpbC4gU28gd2UnbGwga2VlcCBvbiBhbmQgY3V0IG9mZiB0aGUgcmVzdC5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBfbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYnViYmxlUHJvcGVydGllcyhjb21wbGV0ZWRXb3JrKSB7XG4gIHZhciBkaWRCYWlsb3V0ID0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgIT09IG51bGwgJiYgY29tcGxldGVkV29yay5hbHRlcm5hdGUuY2hpbGQgPT09IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG4gIHZhciBuZXdDaGlsZExhbmVzID0gTm9MYW5lcztcbiAgdmFyIHN1YnRyZWVGbGFncyA9IE5vRmxhZ3MkMTtcblxuICBpZiAoIWRpZEJhaWxvdXQpIHtcbiAgICAvLyBCdWJibGUgdXAgdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gdGltZS5cbiAgICBpZiAoKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAvLyBJbiBwcm9maWxpbmcgbW9kZSwgcmVzZXRDaGlsZEV4cGlyYXRpb25UaW1lIGlzIGFsc28gdXNlZCB0byByZXNldFxuICAgICAgLy8gcHJvZmlsZXIgZHVyYXRpb25zLlxuICAgICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgIHZhciB0cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoY2hpbGQubGFuZXMsIGNoaWxkLmNoaWxkTGFuZXMpKTtcbiAgICAgICAgc3VidHJlZUZsYWdzIHw9IGNoaWxkLnN1YnRyZWVGbGFncztcbiAgICAgICAgc3VidHJlZUZsYWdzIHw9IGNoaWxkLmZsYWdzOyAvLyBXaGVuIGEgZmliZXIgaXMgY2xvbmVkLCBpdHMgYWN0dWFsRHVyYXRpb24gaXMgcmVzZXQgdG8gMC4gVGhpcyB2YWx1ZSB3aWxsXG4gICAgICAgIC8vIG9ubHkgYmUgdXBkYXRlZCBpZiB3b3JrIGlzIGRvbmUgb24gdGhlIGZpYmVyIChpLmUuIGl0IGRvZXNuJ3QgYmFpbG91dCkuXG4gICAgICAgIC8vIFdoZW4gd29yayBpcyBkb25lLCBpdCBzaG91bGQgYnViYmxlIHRvIHRoZSBwYXJlbnQncyBhY3R1YWxEdXJhdGlvbi4gSWZcbiAgICAgICAgLy8gdGhlIGZpYmVyIGhhcyBub3QgYmVlbiBjbG9uZWQgdGhvdWdoLCAobWVhbmluZyBubyB3b3JrIHdhcyBkb25lKSwgdGhlblxuICAgICAgICAvLyB0aGlzIHZhbHVlIHdpbGwgcmVmbGVjdCB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd29ya2luZyBvbiBhIHByZXZpb3VzXG4gICAgICAgIC8vIHJlbmRlci4gSW4gdGhhdCBjYXNlIGl0IHNob3VsZCBub3QgYnViYmxlLiBXZSBkZXRlcm1pbmUgd2hldGhlciBpdCB3YXNcbiAgICAgICAgLy8gY2xvbmVkIGJ5IGNvbXBhcmluZyB0aGUgY2hpbGQgcG9pbnRlci5cbiAgICAgICAgLy8gJEZsb3dGaXhNZVt1bnNhZmUtYWRkaXRpb25dIGFkZGl0aW9uIHdpdGggcG9zc2libGUgbnVsbC91bmRlZmluZWQgdmFsdWVcblxuICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjsgLy8gJEZsb3dGaXhNZVt1bnNhZmUtYWRkaXRpb25dIGFkZGl0aW9uIHdpdGggcG9zc2libGUgbnVsbC91bmRlZmluZWQgdmFsdWVcblxuICAgICAgICB0cmVlQmFzZUR1cmF0aW9uICs9IGNoaWxkLnRyZWVCYXNlRHVyYXRpb247XG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH1cblxuICAgICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gdHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9jaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChfY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhfY2hpbGQubGFuZXMsIF9jaGlsZC5jaGlsZExhbmVzKSk7XG4gICAgICAgIHN1YnRyZWVGbGFncyB8PSBfY2hpbGQuc3VidHJlZUZsYWdzO1xuICAgICAgICBzdWJ0cmVlRmxhZ3MgfD0gX2NoaWxkLmZsYWdzOyAvLyBVcGRhdGUgdGhlIHJldHVybiBwb2ludGVyIHNvIHRoZSB0cmVlIGlzIGNvbnNpc3RlbnQuIFRoaXMgaXMgYSBjb2RlXG4gICAgICAgIC8vIHNtZWxsIGJlY2F1c2UgaXQgYXNzdW1lcyB0aGUgY29tbWl0IHBoYXNlIGlzIG5ldmVyIGNvbmN1cnJlbnQgd2l0aFxuICAgICAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLiBXaWxsIGFkZHJlc3MgZHVyaW5nIHJlZmFjdG9yIHRvIGFsdGVybmF0ZSBtb2RlbC5cblxuICAgICAgICBfY2hpbGQucmV0dXJuID0gY29tcGxldGVkV29yaztcbiAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVkV29yay5zdWJ0cmVlRmxhZ3MgfD0gc3VidHJlZUZsYWdzO1xuICB9IGVsc2Uge1xuICAgIC8vIEJ1YmJsZSB1cCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lLlxuICAgIGlmICgoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgIC8vIEluIHByb2ZpbGluZyBtb2RlLCByZXNldENoaWxkRXhwaXJhdGlvblRpbWUgaXMgYWxzbyB1c2VkIHRvIHJlc2V0XG4gICAgICAvLyBwcm9maWxlciBkdXJhdGlvbnMuXG4gICAgICB2YXIgX3RyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLnNlbGZCYXNlRHVyYXRpb247XG4gICAgICB2YXIgX2NoaWxkMiA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChfY2hpbGQyICE9PSBudWxsKSB7XG4gICAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoX2NoaWxkMi5sYW5lcywgX2NoaWxkMi5jaGlsZExhbmVzKSk7IC8vIFwiU3RhdGljXCIgZmxhZ3Mgc2hhcmUgdGhlIGxpZmV0aW1lIG9mIHRoZSBmaWJlci9ob29rIHRoZXkgYmVsb25nIHRvLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgYnViYmxlIHRob3NlIHVwIGV2ZW4gZHVyaW5nIGEgYmFpbG91dC4gQWxsIHRoZSBvdGhlclxuICAgICAgICAvLyBmbGFncyBoYXZlIGEgbGlmZXRpbWUgb25seSBvZiBhIHNpbmdsZSByZW5kZXIgKyBjb21taXQsIHNvIHdlIHNob3VsZFxuICAgICAgICAvLyBpZ25vcmUgdGhlbS5cblxuICAgICAgICBzdWJ0cmVlRmxhZ3MgfD0gX2NoaWxkMi5zdWJ0cmVlRmxhZ3MgJiBTdGF0aWNNYXNrO1xuICAgICAgICBzdWJ0cmVlRmxhZ3MgfD0gX2NoaWxkMi5mbGFncyAmIFN0YXRpY01hc2s7IC8vICRGbG93Rml4TWVbdW5zYWZlLWFkZGl0aW9uXSBhZGRpdGlvbiB3aXRoIHBvc3NpYmxlIG51bGwvdW5kZWZpbmVkIHZhbHVlXG5cbiAgICAgICAgX3RyZWVCYXNlRHVyYXRpb24gKz0gX2NoaWxkMi50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICBfY2hpbGQyID0gX2NoaWxkMi5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBjb21wbGV0ZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24gPSBfdHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9jaGlsZDMgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoX2NoaWxkMyAhPT0gbnVsbCkge1xuICAgICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKF9jaGlsZDMubGFuZXMsIF9jaGlsZDMuY2hpbGRMYW5lcykpOyAvLyBcIlN0YXRpY1wiIGZsYWdzIHNoYXJlIHRoZSBsaWZldGltZSBvZiB0aGUgZmliZXIvaG9vayB0aGV5IGJlbG9uZyB0byxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGJ1YmJsZSB0aG9zZSB1cCBldmVuIGR1cmluZyBhIGJhaWxvdXQuIEFsbCB0aGUgb3RoZXJcbiAgICAgICAgLy8gZmxhZ3MgaGF2ZSBhIGxpZmV0aW1lIG9ubHkgb2YgYSBzaW5nbGUgcmVuZGVyICsgY29tbWl0LCBzbyB3ZSBzaG91bGRcbiAgICAgICAgLy8gaWdub3JlIHRoZW0uXG5cbiAgICAgICAgc3VidHJlZUZsYWdzIHw9IF9jaGlsZDMuc3VidHJlZUZsYWdzICYgU3RhdGljTWFzaztcbiAgICAgICAgc3VidHJlZUZsYWdzIHw9IF9jaGlsZDMuZmxhZ3MgJiBTdGF0aWNNYXNrOyAvLyBVcGRhdGUgdGhlIHJldHVybiBwb2ludGVyIHNvIHRoZSB0cmVlIGlzIGNvbnNpc3RlbnQuIFRoaXMgaXMgYSBjb2RlXG4gICAgICAgIC8vIHNtZWxsIGJlY2F1c2UgaXQgYXNzdW1lcyB0aGUgY29tbWl0IHBoYXNlIGlzIG5ldmVyIGNvbmN1cnJlbnQgd2l0aFxuICAgICAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLiBXaWxsIGFkZHJlc3MgZHVyaW5nIHJlZmFjdG9yIHRvIGFsdGVybmF0ZSBtb2RlbC5cblxuICAgICAgICBfY2hpbGQzLnJldHVybiA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgIF9jaGlsZDMgPSBfY2hpbGQzLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVkV29yay5zdWJ0cmVlRmxhZ3MgfD0gc3VidHJlZUZsYWdzO1xuICB9XG5cbiAgY29tcGxldGVkV29yay5jaGlsZExhbmVzID0gbmV3Q2hpbGRMYW5lcztcbiAgcmV0dXJuIGRpZEJhaWxvdXQ7XG59XG5cbmZ1bmN0aW9uIGNvbXBsZXRlRGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRTdGF0ZSkge1xuICBpZiAoaGFzVW5oeWRyYXRlZFRhaWxOb2RlcygpICYmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGUgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MkMSkge1xuICAgIHdhcm5JZlVuaHlkcmF0ZWRUYWlsTm9kZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBGb3JjZUNsaWVudFJlbmRlciB8IERpZENhcHR1cmU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHdhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gIGlmIChuZXh0U3RhdGUgIT09IG51bGwgJiYgbmV4dFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAvLyBXZSBtaWdodCBiZSBpbnNpZGUgYSBoeWRyYXRpb24gc3RhdGUgdGhlIGZpcnN0IHRpbWUgd2UncmUgcGlja2luZyB1cCB0aGlzXG4gICAgLy8gU3VzcGVuc2UgYm91bmRhcnksIGFuZCBhbHNvIGFmdGVyIHdlJ3ZlIHJlZW50ZXJlZCBpdCBmb3IgZnVydGhlciBoeWRyYXRpb24uXG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIGlmICghd2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIGRlaHlkcmF0ZWQgc3VzcGVuc2UgY29tcG9uZW50IHdhcyBjb21wbGV0ZWQgd2l0aG91dCBhIGh5ZHJhdGVkIG5vZGUuICcgKyAnVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cblxuICAgICAgcHJlcGFyZVRvSHlkcmF0ZUhvc3RTdXNwZW5zZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICB7XG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgdmFyIGlzVGltZWRPdXRTdXNwZW5zZSA9IG5leHRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmIChpc1RpbWVkT3V0U3VzcGVuc2UpIHtcbiAgICAgICAgICAgIC8vIERvbid0IGNvdW50IHRpbWUgc3BlbnQgaW4gYSB0aW1lZCBvdXQgU3VzcGVuc2Ugc3VidHJlZSBhcyBwYXJ0IG9mIHRoZSBiYXNlIGR1cmF0aW9uLlxuICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgIGlmIChwcmltYXJ5Q2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1hcml0aG1ldGljXSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0eXBlIGNhc3RpbmcgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgLT0gb3BlcmF0b3JcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgcmVlbnRlcmVkIHRoaXMgYm91bmRhcnkgdG8gaHlkcmF0ZSBpdC4gSWYgc28sIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGh5ZHJhdGlvblxuICAgICAgLy8gc3RhdGUgc2luY2Ugd2UncmUgbm93IGV4aXRpbmcgb3V0IG9mIGl0LiBwb3BIeWRyYXRpb25TdGF0ZSBkb2Vzbid0IGRvIHRoYXQgZm9yIHVzLlxuICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuXG4gICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAvLyBUaGlzIGJvdW5kYXJ5IGRpZCBub3Qgc3VzcGVuZCBzbyBpdCdzIG5vdyBoeWRyYXRlZCBhbmQgdW5zdXNwZW5kZWQuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgfSAvLyBJZiBub3RoaW5nIHN1c3BlbmRlZCwgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBlZmZlY3QgdG8gbWFyayB0aGlzIGJvdW5kYXJ5XG4gICAgICAvLyBhcyBoYXZpbmcgaHlkcmF0ZWQgc28gZXZlbnRzIGtub3cgdGhhdCB0aGV5J3JlIGZyZWUgdG8gYmUgaW52b2tlZC5cbiAgICAgIC8vIEl0J3MgYWxzbyBhIHNpZ25hbCB0byByZXBsYXkgZXZlbnRzIGFuZCB0aGUgc3VzcGVuc2UgY2FsbGJhY2suXG4gICAgICAvLyBJZiBzb21ldGhpbmcgc3VzcGVuZGVkLCBzY2hlZHVsZSBhbiBlZmZlY3QgdG8gYXR0YWNoIHJldHJ5IGxpc3RlbmVycy5cbiAgICAgIC8vIFNvIHdlIG1pZ2h0IGFzIHdlbGwgYWx3YXlzIG1hcmsgdGhpcy5cblxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAge1xuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgIHZhciBfaXNUaW1lZE91dFN1c3BlbnNlID0gbmV4dFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKF9pc1RpbWVkT3V0U3VzcGVuc2UpIHtcbiAgICAgICAgICAgIC8vIERvbid0IGNvdW50IHRpbWUgc3BlbnQgaW4gYSB0aW1lZCBvdXQgU3VzcGVuc2Ugc3VidHJlZSBhcyBwYXJ0IG9mIHRoZSBiYXNlIGR1cmF0aW9uLlxuICAgICAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICAgICAgICBpZiAoX3ByaW1hcnlDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vICRGbG93Rml4TWVbdW5zYWZlLWFyaXRobWV0aWNdIEZsb3cgZG9lc24ndCBzdXBwb3J0IHR5cGUgY2FzdGluZyBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSAtPSBvcGVyYXRvclxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uIC09IF9wcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgdGhpcyB0cmVlLiBJZiB0aGlzIHdhcyBhIGZvcmNlZCBjbGllbnQgcmVuZGVyLFxuICAgIC8vIHRoZXJlIG1heSBoYXZlIGJlZW4gcmVjb3ZlcmFibGUgZXJyb3JzIGR1cmluZyBmaXJzdCBoeWRyYXRpb25cbiAgICAvLyBhdHRlbXB0LiBJZiBzbywgYWRkIHRoZW0gdG8gYSBxdWV1ZSBzbyB3ZSBjYW4gbG9nIHRoZW0gaW4gdGhlXG4gICAgLy8gY29tbWl0IHBoYXNlLlxuICAgIHVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlKCk7IC8vIEZhbGwgdGhyb3VnaCB0byBub3JtYWwgU3VzcGVuc2UgcGF0aFxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIE5vdGU6IFRoaXMgaW50ZW50aW9uYWxseSBkb2Vzbid0IGNoZWNrIGlmIHdlJ3JlIGh5ZHJhdGluZyBiZWNhdXNlIGNvbXBhcmluZ1xuICAvLyB0byB0aGUgY3VycmVudCB0cmVlIHByb3ZpZGVyIGZpYmVyIGlzIGp1c3QgYXMgZmFzdCBhbmQgbGVzcyBlcnJvci1wcm9uZS5cbiAgLy8gSWRlYWxseSB3ZSB3b3VsZCBoYXZlIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIHRoZSB3b3JrIGxvb3Agb25seVxuICAvLyBmb3IgaHlkcmF0aW9uLlxuXG4gIHBvcFRyZWVDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgY2FzZSBNb2RlOlxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB2YXIgZmliZXJSb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNDYWNoZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcHJldmlvdXNDYWNoZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY2FjaGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlLmNhY2hlO1xuXG4gICAgICAgICAgaWYgKGNhY2hlICE9PSBwcmV2aW91c0NhY2hlKSB7XG4gICAgICAgICAgICAvLyBSdW4gcGFzc2l2ZSBlZmZlY3RzIHRvIHJldGFpbi9yZWxlYXNlIHRoZSBjYWNoZS5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBhc3NpdmUkMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwb3BDYWNoZVByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICBpZiAoZmliZXJSb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgICAgICAgZmliZXJSb290LmNvbnRleHQgPSBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQ7XG4gICAgICAgICAgZmliZXJSb290LnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQuY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgcG9wIHNvIHRoYXQgd2UgY2FuIGRlbGV0ZSBhbnkgcmVtYWluaW5nIGNoaWxkcmVuXG4gICAgICAgICAgLy8gdGhhdCB3ZXJlbid0IGh5ZHJhdGVkLlxuICAgICAgICAgIHZhciB3YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmICh3YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHRoZW4gd2UnbGwgbmVlZCB0byBzY2hlZHVsZSBhbiB1cGRhdGUgZm9yXG4gICAgICAgICAgICAvLyB0aGUgY29tbWl0IHNpZGUtZWZmZWN0cyBvbiB0aGUgcm9vdC5cbiAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICAgIGlmICggLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIGNsaWVudCByb290XG4gICAgICAgICAgICAgICFwcmV2U3RhdGUuaXNEZWh5ZHJhdGVkIHx8IC8vIENoZWNrIGlmIHdlIHJldmVydGVkIHRvIGNsaWVudCByZW5kZXJpbmcgKGUuZy4gZHVlIHRvIGFuIGVycm9yKVxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBGb3JjZUNsaWVudFJlbmRlcikgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgICAgIC8vIFNjaGVkdWxlIGFuIGVmZmVjdCB0byBjbGVhciB0aGlzIGNvbnRhaW5lciBhdCB0aGUgc3RhcnQgb2YgdGhlXG4gICAgICAgICAgICAgICAgLy8gbmV4dCBjb21taXQuIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiBSZWFjdCByZW5kZXJpbmcgaW50byBhXG4gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyIHdpdGggcHJldmlvdXMgY2hpbGRyZW4uIEl0J3MgYWxzbyBzYWZlIHRvIGRvIGZvclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZXMgdG9vLCBiZWNhdXNlIGN1cnJlbnQuY2hpbGQgd291bGQgb25seSBiZSBudWxsIGlmIHRoZVxuICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzIHJlbmRlciB3YXMgbnVsbCAoc28gdGhlIGNvbnRhaW5lciB3b3VsZCBhbHJlYWR5XG4gICAgICAgICAgICAgICAgLy8gYmUgZW1wdHkpLlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90OyAvLyBJZiB0aGlzIHdhcyBhIGZvcmNlZCBjbGllbnQgcmVuZGVyLCB0aGVyZSBtYXkgaGF2ZSBiZWVuXG4gICAgICAgICAgICAgICAgLy8gcmVjb3ZlcmFibGUgZXJyb3JzIGR1cmluZyBmaXJzdCBoeWRyYXRpb24gYXR0ZW1wdC4gSWYgc28sIGFkZFxuICAgICAgICAgICAgICAgIC8vIHRoZW0gdG8gYSBxdWV1ZSBzbyB3ZSBjYW4gbG9nIHRoZW0gaW4gdGhlIGNvbW1pdCBwaGFzZS5cblxuICAgICAgICAgICAgICAgIHVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbmV4dFJlc291cmNlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBhcmUgbW91bnRpbmcgYW5kIG11c3QgVXBkYXRlIHRoaXMgSG9pc3RhYmxlIGluIHRoaXMgY29tbWl0XG4gICAgICAgICAgICAvLyBAVE9ETyByZWZhY3RvciB0aGlzIGJsb2NrIHRvIGNyZWF0ZSB0aGUgaW5zdGFuY2UgaGVyZSBpbiBjb21wbGV0ZVxuICAgICAgICAgICAgLy8gcGhhc2UgaWYgd2UgYXJlIG5vdCBoeWRyYXRpbmcuXG4gICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBtYXJrUmVmKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5leHRSZXNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgSG9pc3RhYmxlIFJlc291cmNlXG4gICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBjb21lIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgY29tcGxldGUgcGhhc2UuXG4gICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICBwcmVsb2FkUmVzb3VyY2VBbmRTdXNwZW5kSWZOZWVkZWQod29ya0luUHJvZ3Jlc3MsIG5leHRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIEhvaXN0YWJsZSBJbnN0YW5jZVxuICAgICAgICAgICAgICAvLyBUaGlzIG11c3QgY29tZSBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGNvbXBsZXRlIHBoYXNlLlxuICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgcHJlbG9hZEluc3RhbmNlQW5kU3VzcGVuZElmTmVlZGVkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdlIGFyZSB1cGRhdGluZy5cbiAgICAgICAgICAgIHZhciBjdXJyZW50UmVzb3VyY2UgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICAgIGlmIChuZXh0UmVzb3VyY2UgIT09IGN1cnJlbnRSZXNvdXJjZSkge1xuICAgICAgICAgICAgICAvLyBXZSBhcmUgdHJhbnNpdGlvbmluZyB0bywgZnJvbSwgb3IgYmV0d2VlbiBIb2lzdGFibGUgUmVzb3VyY2VzXG4gICAgICAgICAgICAgIC8vIGFuZCByZXF1aXJlIGFuIHVwZGF0ZVxuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnQucmVmICE9PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgICAgICAgICAgbWFya1JlZih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXh0UmVzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIEhvaXN0YWJsZSBSZXNvdXJjZVxuICAgICAgICAgICAgICAvLyBUaGlzIG11c3QgY29tZSBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGNvbXBsZXRlIHBoYXNlLlxuICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgICAgICBpZiAobmV4dFJlc291cmNlID09PSBjdXJyZW50UmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+TWF5U3VzcGVuZENvbW1pdDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmVsb2FkUmVzb3VyY2VBbmRTdXNwZW5kSWZOZWVkZWQod29ya0luUHJvZ3Jlc3MsIG5leHRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBIb2lzdGFibGUgSW5zdGFuY2VcbiAgICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgcHJvcHMgdG8gdXBkYXRlIG9uIHRoZSBIb2lzdGFibGUgaW5zdGFuY2UuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICAgICAgICAgICAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gLy8gVGhpcyBtdXN0IGNvbWUgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBjb21wbGV0ZSBwaGFzZS5cblxuXG4gICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICBwcmVsb2FkSW5zdGFuY2VBbmRTdXNwZW5kSWZOZWVkZWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB2YXIgcm9vdENvbnRhaW5lckluc3RhbmNlID0gZ2V0Um9vdEhvc3RDb250YWluZXIoKTtcbiAgICAgICAgICB2YXIgX3R5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIF9vbGRQcm9wczIgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICAgICAgICAgICAgaWYgKF9vbGRQcm9wczIgIT09IG5ld1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnQucmVmICE9PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgICAgICAgICAgbWFya1JlZih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgJyArICdjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICAgICAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlIGFib3J0IHdvcmsuXG5cblxuICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuXG4gICAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgICB2YXIgaW5zdGFuY2U7XG5cbiAgICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBib29sZWFuIGluZGljYXRpbmcgdGhlcmUgaXMgYW4gdXBkYXRlUXVldWUgYmVjYXVzZVxuICAgICAgICAgICAgICAvLyBpdCBpcyB1c2VkIG9ubHkgdG8gc2V0IHRleHQgY2hpbGRyZW4gYW5kIEhvc3RTaW5nbGV0b25zIGRvIG5vdFxuICAgICAgICAgICAgICAvLyB1c2UgdGhlbS5cbiAgICAgICAgICAgICAgcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3VycmVudEhvc3RDb250ZXh0KTtcbiAgICAgICAgICAgICAgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpbnN0YW5jZSA9IHJlc29sdmVTaW5nbGV0b25JbnN0YW5jZShfdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0LCB0cnVlKTtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVmIG9uIGEgaG9zdCBub2RlIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAgICAgICBtYXJrUmVmKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSAvLyBGYWxsIHRocm91Z2hcblxuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciBfdHlwZTIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX3R5cGUyLCBuZXdQcm9wcyk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudC5yZWYgIT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgICAgICAgbWFya1JlZih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghbmV3UHJvcHMpIHtcbiAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSAnICsgJ2NhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICAgICAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlIGFib3J0IHdvcmsuXG5cblxuICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7IC8vIFRPRE86IE1vdmUgY3JlYXRlSW5zdGFuY2UgdG8gYmVnaW5Xb3JrIGFuZCBrZWVwIGl0IG9uIGEgY29udGV4dFxuICAgICAgICAgIC8vIFwic3RhY2tcIiBhcyB0aGUgcGFyZW50LiBUaGVuIGFwcGVuZCBjaGlsZHJlbiBhcyB3ZSBnbyBpbiBiZWdpbldvcmtcbiAgICAgICAgICAvLyBvciBjb21wbGV0ZVdvcmsgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0byBhZGQgdGhlbSB0b3AtPmRvd24gb3JcbiAgICAgICAgICAvLyBib3R0b20tPnVwLiBUb3AtPmRvd24gaXMgZmFzdGVyIGluIElFMTEuXG5cblxuICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQyID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKF93YXNIeWRyYXRlZDIpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBhbmQgY3JlYXRlSW5zdGFuY2Ugc3RlcCBpbnRvIHRoZSBiZWdpblBoYXNlXG4gICAgICAgICAgICAvLyB0byBjb25zb2xpZGF0ZS5cbiAgICAgICAgICAgIHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIF9jdXJyZW50SG9zdENvbnRleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgX3Jvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG5cbiAgICAgICAgICAgIHZhciBfaW5zdGFuY2UzID0gY3JlYXRlSW5zdGFuY2UoX3R5cGUyLCBuZXdQcm9wcywgX3Jvb3RDb250YWluZXJJbnN0YW5jZSwgX2N1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpOyAvLyBUT0RPOiBGb3IgcGVyc2lzdGVudCByZW5kZXJlcnMsIHdlIHNob3VsZCBwYXNzIGNoaWxkcmVuIGFzIHBhcnRcbiAgICAgICAgICAgIC8vIG9mIHRoZSBpbml0aWFsIGluc3RhbmNlIGNyZWF0aW9uXG5cblxuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4oX2luc3RhbmNlMywgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gX2luc3RhbmNlMzsgLy8gQ2VydGFpbiByZW5kZXJlcnMgcmVxdWlyZSBjb21taXQtdGltZSBlZmZlY3RzIGZvciBpbml0aWFsIG1vdW50LlxuICAgICAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBzdXBwb3J0cyBhdXRvLWZvY3VzIGZvciBjZXJ0YWluIGVsZW1lbnRzKS5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBzdWNoIHJlbmRlcmVycyBnZXQgc2NoZWR1bGVkIGZvciBsYXRlciB3b3JrLlxuXG4gICAgICAgICAgICBpZiAoZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oX2luc3RhbmNlMywgX3R5cGUyLCBuZXdQcm9wcykpIHtcbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSByZWYgb24gYSBob3N0IG5vZGUgd2UgbmVlZCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgICAgICBtYXJrUmVmKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTsgLy8gVGhpcyBtdXN0IGNvbWUgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBjb21wbGV0ZSBwaGFzZSwgYmVjYXVzZSBpdCBtaWdodFxuICAgICAgICAvLyB0aHJvdyB0byBzdXNwZW5kLCBhbmQgaWYgdGhlIHJlc291cmNlIGltbWVkaWF0ZWx5IGxvYWRzLCB0aGUgd29yayBsb29wXG4gICAgICAgIC8vIHdpbGwgcmVzdW1lIHJlbmRlcmluZyBhcyBpZiB0aGUgd29yay1pbi1wcm9ncmVzcyBjb21wbGV0ZWQuIFNvIGl0IG11c3RcbiAgICAgICAgLy8gZnVsbHkgY29tcGxldGUuXG5cbiAgICAgICAgcHJlbG9hZEluc3RhbmNlQW5kU3VzcGVuZElmTmVlZGVkKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICB2YXIgbmV3VGV4dCA9IG5ld1Byb3BzO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7IC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkXG4gICAgICAgICAgLy8gdG8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cblxuICAgICAgICAgIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld1RleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgJyArICdjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9yb290Q29udGFpbmVySW5zdGFuY2UyID0gZ2V0Um9vdEhvc3RDb250YWluZXIoKTtcblxuICAgICAgICAgIHZhciBfY3VycmVudEhvc3RDb250ZXh0MiA9IGdldEhvc3RDb250ZXh0KCk7XG5cbiAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkMyA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQzKSB7XG4gICAgICAgICAgICBpZiAocHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjcmVhdGVUZXh0SW5zdGFuY2UobmV3VGV4dCwgX3Jvb3RDb250YWluZXJJbnN0YW5jZTIsIF9jdXJyZW50SG9zdENvbnRleHQyLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7IC8vIFNwZWNpYWwgcGF0aCBmb3IgZGVoeWRyYXRlZCBib3VuZGFyaWVzLiBXZSBtYXkgZXZlbnR1YWxseSBtb3ZlIHRoaXNcbiAgICAgICAgLy8gdG8gaXRzIG93biBmaWJlciB0eXBlIHNvIHRoYXQgd2UgY2FuIGFkZCBvdGhlciBraW5kcyBvZiBoeWRyYXRpb25cbiAgICAgICAgLy8gYm91bmRhcmllcyB0aGF0IGFyZW4ndCBhc3NvY2lhdGVkIHdpdGggYSBTdXNwZW5zZSB0cmVlLiBJbiBhbnRpY2lwYXRpb25cbiAgICAgICAgLy8gb2Ygc3VjaCBhIHJlZmFjdG9yLCBhbGwgdGhlIGh5ZHJhdGlvbiBsb2dpYyBpcyBjb250YWluZWQgaW5cbiAgICAgICAgLy8gdGhpcyBicmFuY2guXG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGZhbGx0aHJvdWdoVG9Ob3JtYWxTdXNwZW5zZVBhdGggPSBjb21wbGV0ZURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0U3RhdGUpO1xuXG4gICAgICAgICAgaWYgKCFmYWxsdGhyb3VnaFRvTm9ybWFsU3VzcGVuc2VQYXRoKSB7XG4gICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBGb3JjZUNsaWVudFJlbmRlcikge1xuICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UuIFRoZXJlIHdlcmUgcmVtYWluaW5nIHVuaHlkcmF0ZWQgbm9kZXMuIFdlIHRyZWF0XG4gICAgICAgICAgICAgIC8vIHRoaXMgYXMgYSBtaXNtYXRjaC4gUmV2ZXJ0IHRvIGNsaWVudCByZW5kZXJpbmcuXG4gICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIERpZCBub3QgZmluaXNoIGh5ZHJhdGluZywgZWl0aGVyIGJlY2F1c2UgdGhpcyBpcyB0aGUgaW5pdGlhbFxuICAgICAgICAgICAgICAvLyByZW5kZXIgb3IgYmVjYXVzZSBzb21ldGhpbmcgc3VzcGVuZGVkLlxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIENvbnRpbnVlIHdpdGggdGhlIG5vcm1hbCBTdXNwZW5zZSBwYXRoLlxuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBzdXNwZW5kZWQuIFJlLXJlbmRlciB3aXRoIHRoZSBmYWxsYmFjayBjaGlsZHJlbi5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzOyAvLyBEbyBub3QgcmVzZXQgdGhlIGVmZmVjdCBsaXN0LlxuXG4gICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gLy8gRG9uJ3QgYnViYmxlIHByb3BlcnRpZXMgaW4gdGhpcyBjYXNlLlxuXG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dERpZFRpbWVvdXQgPSBuZXh0U3RhdGUgIT09IG51bGw7XG4gICAgICAgIHZhciBwcmV2RGlkVGltZW91dCA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgIGlmIChuZXh0RGlkVGltZW91dCkge1xuICAgICAgICAgIHZhciBvZmZzY3JlZW5GaWJlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIHZhciBfcHJldmlvdXNDYWNoZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAob2Zmc2NyZWVuRmliZXIuYWx0ZXJuYXRlICE9PSBudWxsICYmIG9mZnNjcmVlbkZpYmVyLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIG9mZnNjcmVlbkZpYmVyLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX3ByZXZpb3VzQ2FjaGUgPSBvZmZzY3JlZW5GaWJlci5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2NhY2hlID0gbnVsbDtcblxuICAgICAgICAgIGlmIChvZmZzY3JlZW5GaWJlci5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIG9mZnNjcmVlbkZpYmVyLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfY2FjaGUgPSBvZmZzY3JlZW5GaWJlci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfY2FjaGUgIT09IF9wcmV2aW91c0NhY2hlKSB7XG4gICAgICAgICAgICAvLyBSdW4gcGFzc2l2ZSBlZmZlY3RzIHRvIHJldGFpbi9yZWxlYXNlIHRoZSBjYWNoZS5cbiAgICAgICAgICAgIG9mZnNjcmVlbkZpYmVyLmZsYWdzIHw9IFBhc3NpdmUkMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSWYgdGhlIHN1c3BlbmRlZCBzdGF0ZSBvZiB0aGUgYm91bmRhcnkgY2hhbmdlcywgd2UgbmVlZCB0byBzY2hlZHVsZVxuICAgICAgICAvLyBhIHBhc3NpdmUgZWZmZWN0LCB3aGljaCBpcyB3aGVuIHdlIHByb2Nlc3MgdGhlIHRyYW5zaXRpb25zXG5cblxuICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgIT09IHByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgLy8gYW4gZWZmZWN0IHRvIHRvZ2dsZSB0aGUgc3VidHJlZSdzIHZpc2liaWxpdHkuIFdoZW4gd2Ugc3dpdGNoIGZyb21cbiAgICAgICAgICAvLyBmYWxsYmFjayAtPiBwcmltYXJ5LCB0aGUgaW5uZXIgT2Zmc2NyZWVuIGZpYmVyIHNjaGVkdWxlcyB0aGlzIGVmZmVjdFxuICAgICAgICAgIC8vIGFzIHBhcnQgb2YgaXRzIG5vcm1hbCBjb21wbGV0ZSBwaGFzZS4gQnV0IHdoZW4gd2Ugc3dpdGNoIGZyb21cbiAgICAgICAgICAvLyBwcmltYXJ5IC0+IGZhbGxiYWNrLCB0aGUgaW5uZXIgT2Zmc2NyZWVuIGZpYmVyIGRvZXMgbm90IGhhdmUgYSBjb21wbGV0ZVxuICAgICAgICAgIC8vIHBoYXNlLiBTbyB3ZSBuZWVkIHRvIHNjaGVkdWxlIGl0cyBlZmZlY3QgaGVyZS5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFdlIGFsc28gdXNlIHRoaXMgZmxhZyB0byBjb25uZWN0L2Rpc2Nvbm5lY3QgdGhlIGVmZmVjdHMsIGJ1dCB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxvZ2ljIGFwcGxpZXM6IHdoZW4gcmUtY29ubmVjdGluZywgdGhlIE9mZnNjcmVlbiBmaWJlcidzIGNvbXBsZXRlXG4gICAgICAgICAgLy8gcGhhc2Ugd2lsbCBoYW5kbGUgc2NoZWR1bGluZyB0aGUgZWZmZWN0LiBJdCdzIG9ubHkgd2hlbiB0aGUgZmFsbGJhY2tcbiAgICAgICAgICAvLyBpcyBhY3RpdmUgdGhhdCB3ZSBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuXG5cblxuICAgICAgICAgIGlmIChuZXh0RGlkVGltZW91dCkge1xuICAgICAgICAgICAgdmFyIF9vZmZzY3JlZW5GaWJlcjIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIF9vZmZzY3JlZW5GaWJlcjIuZmxhZ3MgfD0gVmlzaWJpbGl0eTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmV0cnlRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCByZXRyeVF1ZXVlKTtcblxuICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIGlmIChuZXh0RGlkVGltZW91dCkge1xuICAgICAgICAgICAgICAvLyBEb24ndCBjb3VudCB0aW1lIHNwZW50IGluIGEgdGltZWQgb3V0IFN1c3BlbnNlIHN1YnRyZWUgYXMgcGFydCBvZiB0aGUgYmFzZSBkdXJhdGlvbi5cbiAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgaWYgKHByaW1hcnlDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVt1bnNhZmUtYXJpdGhtZXRpY10gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdHlwZSBjYXN0aW5nIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIC09IG9wZXJhdG9yXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcHJlcGFyZVBvcnRhbE1vdW50KHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgIH1cblxuICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgLy8gUG9wIHByb3ZpZGVyIGZpYmVyXG4gICAgICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQ7XG4gICAgICBwb3BQcm92aWRlcihjb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFNhbWUgYXMgY2xhc3MgY29tcG9uZW50IGNhc2UuIEkgcHV0IGl0IGRvd24gaGVyZSBzbyB0aGF0IHRoZSB0YWdzIGFyZVxuICAgICAgICAvLyBzZXF1ZW50aWFsIHRvIGVuc3VyZSB0aGlzIHN3aXRjaCBpcyBjb21waWxlZCB0byBhIGp1bXAgdGFibGUuXG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoX0NvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUxpc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIGluIHRoZSBkZWZhdWx0LCBcImluZGVwZW5kZW50XCIgbW9kZS5cbiAgICAgICAgICAvLyBXZSBkb24ndCBkbyBhbnl0aGluZyBpbiB0aGlzIG1vZGUuXG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGlkU3VzcGVuZEFscmVhZHkgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncyQxO1xuICAgICAgICB2YXIgcmVuZGVyZWRUYWlsID0gcmVuZGVyU3RhdGUucmVuZGVyaW5nO1xuXG4gICAgICAgIGlmIChyZW5kZXJlZFRhaWwgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBqdXN0IHJlbmRlcmVkIHRoZSBoZWFkLlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnl0aGluZyBpcyBzdGlsbFxuICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGluIHRoZSByZW5kZXJlZCBzZXQuXG4gICAgICAgICAgICAvLyBJZiBuZXcgY29udGVudCB1bnN1c3BlbmRlZCwgYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSBjb250ZW50IHRoYXRcbiAgICAgICAgICAgIC8vIGRpZG4ndC4gVGhlbiB3ZSBuZWVkIHRvIGRvIGEgc2Vjb25kIHBhc3MgdGhhdCBmb3JjZXMgZXZlcnl0aGluZ1xuICAgICAgICAgICAgLy8gdG8ga2VlcCBzaG93aW5nIHRoZWlyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJlIHN1c3BlbmRlZCBpZiBzb21ldGhpbmcgaW4gdGhpcyByZW5kZXIgcGFzcyBzdXNwZW5kZWQsIG9yXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgaW4gdGhlIHByZXZpb3VzIGNvbW1pdHRlZCBwYXNzIHN1c3BlbmRlZC4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBjaGFuY2Ugc28gd2UgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBjYWxsIHRvXG4gICAgICAgICAgICAvLyBmaW5kRmlyc3RTdXNwZW5kZWQuXG4gICAgICAgICAgICB2YXIgY2Fubm90QmVTdXNwZW5kZWQgPSByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSAmJiAoY3VycmVudCA9PT0gbnVsbCB8fCAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzJDEpO1xuXG4gICAgICAgICAgICBpZiAoIWNhbm5vdEJlU3VzcGVuZGVkKSB7XG4gICAgICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICAgICAgICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBJZiB0aGlzIGlzIGEgbmV3bHkgc3VzcGVuZGVkIHRyZWUsIGl0IG1pZ2h0IG5vdCBnZXQgY29tbWl0dGVkIGFzXG4gICAgICAgICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSBzZWNvbmQgcGFzcy4gSW4gdGhhdCBjYXNlIG5vdGhpbmcgd2lsbCBzdWJzY3JpYmUgdG9cbiAgICAgICAgICAgICAgICAgIC8vIGl0cyB0aGVuYWJsZXMuIEluc3RlYWQsIHdlJ2xsIHRyYW5zZmVyIGl0cyB0aGVuYWJsZXMgdG8gdGhlXG4gICAgICAgICAgICAgICAgICAvLyBTdXNwZW5zZUxpc3Qgc28gdGhhdCBpdCBjYW4gcmV0cnkgaWYgdGhleSByZXNvbHZlLlxuICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgb2YgdGhlc2UgaW4gdGhlIGxpc3QgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAgICAgICAgICAgICAvLyBnb2luZyB0byB3YWl0IGZvciBhbGwgb2YgdGhlbSBhbnl3YXksIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlclxuICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggb25lcyBnZXRzIHRvIHBpbmcuIEluIHRoZW9yeSB3ZSBjb3VsZCBnZXQgY2xldmVyIGFuZCBrZWVwXG4gICAgICAgICAgICAgICAgICAvLyB0cmFjayBvZiBob3cgbWFueSBkZXBlbmRlbmNpZXMgcmVtYWluIGJ1dCBpdCBnZXRzIHRyaWNreSBiZWNhdXNlXG4gICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgbWVhbnRpbWUsIHdlIGNhbiBhZGQvcmVtb3ZlL2NoYW5nZSBpdGVtcyBhbmQgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmFpbCBvdXQgb2YgdGhlIGxvb3AgYmVmb3JlIGZpbmRpbmcgYW55IGJ1dCB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IG1hdHRlciBzaW5jZSB0aGF0IG1lYW5zIHRoYXQgdGhlIG90aGVyIGJvdW5kYXJpZXMgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gd2UgZGlkIGZpbmQgYWxyZWFkeSBoYXMgdGhlaXIgbGlzdGVuZXJzIGF0dGFjaGVkLlxuXG4gICAgICAgICAgICAgICAgICB2YXIgX3JldHJ5UXVldWUgPSBzdXNwZW5kZWQudXBkYXRlUXVldWU7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IF9yZXRyeVF1ZXVlO1xuICAgICAgICAgICAgICAgICAgc2NoZWR1bGVSZXRyeUVmZmVjdCh3b3JrSW5Qcm9ncmVzcywgX3JldHJ5UXVldWUpOyAvLyBSZXJlbmRlciB0aGUgd2hvbGUgbGlzdCwgYnV0IHRoaXMgdGltZSwgd2UnbGwgZm9yY2UgZmFsbGJhY2tzXG4gICAgICAgICAgICAgICAgICAvLyB0byBzdGF5IGluIHBsYWNlLlxuICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVmZmVjdCBmbGFncyBiZWZvcmUgZG9pbmcgdGhlIHNlY29uZCBwYXNzIHNpbmNlIHRoYXQncyBub3cgaW52YWxpZC5cbiAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBjaGlsZCBmaWJlcnMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuXG5cbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3MkMTtcbiAgICAgICAgICAgICAgICAgIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTsgLy8gU2V0IHVwIHRoZSBTdXNwZW5zZSBMaXN0IENvbnRleHQgdG8gZm9yY2Ugc3VzcGVuc2UgYW5kXG4gICAgICAgICAgICAgICAgICAvLyBpbW1lZGlhdGVseSByZXJlbmRlciB0aGUgY2hpbGRyZW4uXG5cbiAgICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUxpc3RDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXRTaGFsbG93U3VzcGVuc2VMaXN0Q29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjaykpOyAvLyBEb24ndCBidWJibGUgcHJvcGVydGllcyBpbiB0aGlzIGNhc2UuXG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCAmJiBub3ckMSgpID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBwYXNzZWQgb3VyIENQVSBkZWFkbGluZSBidXQgd2Ugc3RpbGwgaGF2ZSByb3dzXG4gICAgICAgICAgICAgIC8vIGxlZnQgaW4gdGhlIHRhaWwuIFdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyIGF0dGVtcHRzIHRvIHJlbmRlclxuICAgICAgICAgICAgICAvLyB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpO1xuICAgICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBnb2luZyB0byByZW5kZXIgdGhlIHRhaWwuXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBcHBlbmQgdGhlIHJlbmRlcmVkIHJvdyB0byB0aGUgY2hpbGQgbGlzdC5cbiAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICB2YXIgX3N1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyZW5kZXJlZFRhaWwpO1xuXG4gICAgICAgICAgICBpZiAoX3N1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7IC8vIEVuc3VyZSB3ZSB0cmFuc2ZlciB0aGUgdXBkYXRlIHF1ZXVlIHRvIHRoZSBwYXJlbnQgc28gdGhhdCBpdCBkb2Vzbid0XG4gICAgICAgICAgICAgIC8vIGdldCBsb3N0IGlmIHRoaXMgcm93IGVuZHMgdXAgZHJvcHBlZCBkdXJpbmcgYSBzZWNvbmQgcGFzcy5cblxuICAgICAgICAgICAgICB2YXIgX3JldHJ5UXVldWUyID0gX3N1c3BlbmRlZC51cGRhdGVRdWV1ZTtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBfcmV0cnlRdWV1ZTI7XG4gICAgICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIF9yZXRyeVF1ZXVlMik7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgdHJ1ZSk7IC8vIFRoaXMgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkLlxuXG4gICAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsID09PSBudWxsICYmIHJlbmRlclN0YXRlLnRhaWxNb2RlID09PSAnaGlkZGVuJyAmJiAhcmVuZGVyZWRUYWlsLmFsdGVybmF0ZSAmJiAhZ2V0SXNIeWRyYXRpbmcoKSAvLyBXZSBkb24ndCBjdXQgaXQgaWYgd2UncmUgaHlkcmF0aW5nLlxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUuXG4gICAgICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIC8vIFRoZSB0aW1lIGl0IHRvb2sgdG8gcmVuZGVyIGxhc3Qgcm93IGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVtYWluaW5nXG4gICAgICAgICAgICAvLyB0aW1lIHdlIGhhdmUgdG8gcmVuZGVyLiBTbyByZW5kZXJpbmcgb25lIG1vcmUgcm93IHdvdWxkIGxpa2VseVxuICAgICAgICAgICAgLy8gZXhjZWVkIGl0LlxuICAgICAgICAgICAgbm93JDEoKSAqIDIgLSByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkgJiYgcmVuZGVyTGFuZXMgIT09IE9mZnNjcmVlbkxhbmUpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBub3cgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYW5kIHdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyXG4gICAgICAgICAgICAgIC8vIGF0dGVtcHRzIHRvIHJlbmRlciB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIC8vIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB1c3VhbGx5IGZhc3Rlci5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXNcbiAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgIC8vIG9mIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlcixcbiAgICAgICAgICAgICAgLy8gaXQncyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzXG4gICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgIC8vIHBhaW50ZWQuIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy5cbiAgICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSBhbnkgUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIC8vIFRoZSBlZmZlY3QgbGlzdCBvZiB0aGUgYmFja3dhcmRzIHRhaWwgd2lsbCBoYXZlIGJlZW4gYWRkZWRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBlbmQuIFRoaXMgYnJlYWtzIHRoZSBndWFyYW50ZWUgdGhhdCBsaWZlLWN5Y2xlcyBmaXJlIGluXG4gICAgICAgICAgICAvLyBzaWJsaW5nIG9yZGVyIGJ1dCB0aGF0IGlzbid0IGEgc3Ryb25nIGd1YXJhbnRlZSBwcm9taXNlZCBieSBSZWFjdC5cbiAgICAgICAgICAgIC8vIEVzcGVjaWFsbHkgc2luY2UgdGhlc2UgbWlnaHQgYWxzbyBqdXN0IHBvcCBpbiBkdXJpbmcgZnV0dXJlIGNvbW1pdHMuXG4gICAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC5cbiAgICAgICAgICAgIHJlbmRlcmVkVGFpbC5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZpb3VzU2libGluZyA9IHJlbmRlclN0YXRlLmxhc3Q7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nLnNpYmxpbmcgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgdGFpbCByb3dzIHRvIHJlbmRlci5cbiAgICAgICAgICAvLyBQb3AgYSByb3cuXG4gICAgICAgICAgdmFyIG5leHQgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG5leHQ7XG4gICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG5leHQuc2libGluZztcbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSBub3ckMSgpO1xuICAgICAgICAgIG5leHQuc2libGluZyA9IG51bGw7IC8vIFJlc3RvcmUgdGhlIGNvbnRleHQuXG4gICAgICAgICAgLy8gVE9ETzogV2UgY2FuIHByb2JhYmx5IGp1c3QgYXZvaWQgcG9wcGluZyBpdCBpbnN0ZWFkIGFuZCBvbmx5XG4gICAgICAgICAgLy8gc2V0dGluZyBpdCB0aGUgZmlyc3QgdGltZSB3ZSBnbyBmcm9tIG5vdCBzdXNwZW5kZWQgdG8gc3VzcGVuZGVkLlxuXG4gICAgICAgICAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcblxuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlTGlzdENvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdXNoU3VzcGVuc2VMaXN0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gRG8gYSBwYXNzIG92ZXIgdGhlIG5leHQgcm93LlxuICAgICAgICAgIC8vIERvbid0IGJ1YmJsZSBwcm9wZXJ0aWVzIGluIHRoaXMgY2FzZS5cblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIF9uZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICB2YXIgbmV4dElzSGlkZGVuID0gX25leHRTdGF0ZSAhPT0gbnVsbDsgLy8gU2NoZWR1bGUgYSBWaXNpYmlsaXR5IGVmZmVjdCBpZiB0aGUgdmlzaWJpbGl0eSBoYXMgY2hhbmdlZFxuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIF9wcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICB2YXIgcHJldklzSGlkZGVuID0gX3ByZXZTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHByZXZJc0hpZGRlbiAhPT0gbmV4dElzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFZpc2liaWxpdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE9uIGluaXRpYWwgbW91bnQsIHdlIG9ubHkgbmVlZCBhIFZpc2liaWxpdHkgZWZmZWN0IGlmIHRoZSB0cmVlXG4gICAgICAgICAgICAvLyBpcyBoaWRkZW4uXG4gICAgICAgICAgICBpZiAobmV4dElzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFZpc2liaWxpdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFuZXh0SXNIaWRkZW4gfHwgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERvbid0IGJ1YmJsZSBwcm9wZXJ0aWVzIGZvciBoaWRkZW4gY2hpbGRyZW4gdW5sZXNzIHdlJ3JlIHJlbmRlcmluZ1xuICAgICAgICAgIC8vIGF0IG9mZnNjcmVlbiBwcmlvcml0eS5cbiAgICAgICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkgJiYgLy8gQWxzbyBkb24ndCBidWJibGUgaWYgdGhlIHRyZWUgc3VzcGVuZGVkXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpOyAvLyBDaGVjayBpZiB0aGVyZSB3YXMgYW4gaW5zZXJ0aW9uIG9yIHVwZGF0ZSBpbiB0aGUgaGlkZGVuIHN1YnRyZWUuXG4gICAgICAgICAgICAvLyBJZiBzbywgd2UgbmVlZCB0byBoaWRlIHRob3NlIG5vZGVzIGluIHRoZSBjb21taXQgcGhhc2UsIHNvXG4gICAgICAgICAgICAvLyBzY2hlZHVsZSBhIHZpc2liaWxpdHkgZWZmZWN0LlxuXG4gICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzICYgKFBsYWNlbWVudCB8IFVwZGF0ZSkpIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVmlzaWJpbGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2Zmc2NyZWVuUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAob2Zmc2NyZWVuUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX3JldHJ5UXVldWUzID0gb2Zmc2NyZWVuUXVldWUucmV0cnlRdWV1ZTtcbiAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCBfcmV0cnlRdWV1ZTMpO1xuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcHJldmlvdXNDYWNoZTIgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF9wcmV2aW91c0NhY2hlMiA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2NhY2hlMiA9IG51bGw7XG5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX2NhY2hlMiA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2w7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF9jYWNoZTIgIT09IF9wcmV2aW91c0NhY2hlMikge1xuICAgICAgICAgICAgLy8gUnVuIHBhc3NpdmUgZWZmZWN0cyB0byByZXRhaW4vcmVsZWFzZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQYXNzaXZlJDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcG9wVHJhbnNpdGlvbih3b3JrSW5Qcm9ncmVzcywgY3VycmVudCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBDYWNoZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcHJldmlvdXNDYWNoZTMgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF9wcmV2aW91c0NhY2hlMyA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2NhY2hlMyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUuY2FjaGU7XG5cbiAgICAgICAgICBpZiAoX2NhY2hlMyAhPT0gX3ByZXZpb3VzQ2FjaGUzKSB7XG4gICAgICAgICAgICAvLyBSdW4gcGFzc2l2ZSBlZmZlY3RzIHRvIHJldGFpbi9yZWxlYXNlIHRoZSBjYWNoZS5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBhc3NpdmUkMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwb3BDYWNoZVByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBUcmFjaW5nTWFya2VyQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArIHdvcmtJblByb2dyZXNzLnRhZyArIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFwiICsgJ1JlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbn1cblxuZnVuY3Rpb24gdW53aW5kV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gTm90ZTogVGhpcyBpbnRlbnRpb25hbGx5IGRvZXNuJ3QgY2hlY2sgaWYgd2UncmUgaHlkcmF0aW5nIGJlY2F1c2UgY29tcGFyaW5nXG4gIC8vIHRvIHRoZSBjdXJyZW50IHRyZWUgcHJvdmlkZXIgZmliZXIgaXMganVzdCBhcyBmYXN0IGFuZCBsZXNzIGVycm9yLXByb25lLlxuICAvLyBJZGVhbGx5IHdlIHdvdWxkIGhhdmUgYSBzcGVjaWFsIHZlcnNpb24gb2YgdGhlIHdvcmsgbG9vcCBvbmx5XG4gIC8vIGZvciBoeWRyYXRpb24uXG4gIHBvcFRyZWVDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoZmxhZ3MgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBmbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcblxuICAgICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG5cbiAgICAgICAge1xuICAgICAgICAgIHBvcENhY2hlUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgX2ZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKChfZmxhZ3MgJiBTaG91bGRDYXB0dXJlKSAhPT0gTm9GbGFncyQxICYmIChfZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgLy8gVGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyByZW5kZXIgdGhhdCB3YXNuJ3QgY2FwdHVyZWQgYnkgYSBzdXNwZW5zZVxuICAgICAgICAgIC8vIGJvdW5kYXJ5LiBEbyBhIHNlY29uZCBwYXNzIG9uIHRoZSByb290IHRvIHVubW91bnQgdGhlIGNoaWxkcmVuLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gX2ZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfSAvLyBXZSB1bndvdW5kIHRvIHRoZSByb290IHdpdGhvdXQgY29tcGxldGluZyBpdC4gRXhpdC5cblxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHBvcEh5ZHJhdGlvblN0YXRlXG4gICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwgJiYgc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaHJldyBpbiBuZXdseSBtb3VudGVkIGRlaHlkcmF0ZWQgY29tcG9uZW50LiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiAnICsgJ1JlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2ZsYWdzMiA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChfZmxhZ3MyICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gX2ZsYWdzMiAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTsgLy8gQ2FwdHVyZWQgYSBzdXNwZW5zZSBlZmZlY3QuIFJlLXJlbmRlciB0aGUgYm91bmRhcnkuXG5cbiAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VMaXN0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7IC8vIFN1c3BlbnNlTGlzdCBkb2Vzbid0IGFjdHVhbGx5IGNhdGNoIGFueXRoaW5nLiBJdCBzaG91bGQndmUgYmVlblxuICAgICAgICAvLyBjYXVnaHQgYnkgYSBuZXN0ZWQgYm91bmRhcnkuIElmIG5vdCwgaXQgc2hvdWxkIGJ1YmJsZSB0aHJvdWdoLlxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLl9jb250ZXh0O1xuICAgICAgcG9wUHJvdmlkZXIoY29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wSGlkZGVuQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRyYW5zaXRpb24od29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpO1xuICAgICAgICB2YXIgX2ZsYWdzMyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChfZmxhZ3MzICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gX2ZsYWdzMyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTsgLy8gQ2FwdHVyZWQgYSBzdXNwZW5zZSBlZmZlY3QuIFJlLXJlbmRlciB0aGUgYm91bmRhcnkuXG5cbiAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIENhY2hlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BDYWNoZVByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCBpbnRlcnJ1cHRlZFdvcmssIHJlbmRlckxhbmVzKSB7XG4gIC8vIE5vdGU6IFRoaXMgaW50ZW50aW9uYWxseSBkb2Vzbid0IGNoZWNrIGlmIHdlJ3JlIGh5ZHJhdGluZyBiZWNhdXNlIGNvbXBhcmluZ1xuICAvLyB0byB0aGUgY3VycmVudCB0cmVlIHByb3ZpZGVyIGZpYmVyIGlzIGp1c3QgYXMgZmFzdCBhbmQgbGVzcyBlcnJvci1wcm9uZS5cbiAgLy8gSWRlYWxseSB3ZSB3b3VsZCBoYXZlIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIHRoZSB3b3JrIGxvb3Agb25seVxuICAvLyBmb3IgaHlkcmF0aW9uLlxuICBwb3BUcmVlQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuXG4gIHN3aXRjaCAoaW50ZXJydXB0ZWRXb3JrLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IGludGVycnVwdGVkV29yay50eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuXG4gICAgICAgIGlmIChjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcG9wQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuXG4gICAgICAgIHtcbiAgICAgICAgICBwb3BDYWNoZVByb3ZpZGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgIH1cbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICBwb3BTdXNwZW5zZUhhbmRsZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICBwb3BTdXNwZW5zZUxpc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgdmFyIGNvbnRleHQgPSBpbnRlcnJ1cHRlZFdvcmsudHlwZS5fY29udGV4dDtcbiAgICAgIHBvcFByb3ZpZGVyKGNvbnRleHQsIGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBwb3BIaWRkZW5Db250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBwb3BUcmFuc2l0aW9uKGludGVycnVwdGVkV29yaywgY3VycmVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ2FjaGVDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcENhY2hlUHJvdmlkZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cbn1cblxudmFyIGZha2VOb2RlID0gbnVsbDtcblxue1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kaXNwYXRjaEV2ZW50ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBmYWtlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3JlYWN0Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbChuYW1lLCBmdW5jLCBjb250ZXh0KSB7XG4gIHtcbiAgICAvLyBJbiBERVYgbW9kZSwgd2UgdXNlIGEgc3BlY2lhbCB2ZXJzaW9uXG4gICAgLy8gdGhhdCBwbGF5cyBtb3JlIG5pY2VseSB3aXRoIHRoZSBicm93c2VyJ3MgRGV2VG9vbHMuIFRoZSBpZGVhIGlzIHRvIHByZXNlcnZlXG4gICAgLy8gXCJQYXVzZSBvbiBleGNlcHRpb25zXCIgYmVoYXZpb3IuIEJlY2F1c2UgUmVhY3Qgd3JhcHMgYWxsIHVzZXItcHJvdmlkZWRcbiAgICAvLyBmdW5jdGlvbnMgaW4gaW52b2tlR3VhcmRlZENhbGxiYWNrLCBhbmQgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiBvZlxuICAgIC8vIGludm9rZUd1YXJkZWRDYWxsYmFjayB1c2VzIGEgdHJ5LWNhdGNoLCBhbGwgdXNlciBleGNlcHRpb25zIGFyZSB0cmVhdGVkXG4gICAgLy8gbGlrZSBjYXVnaHQgZXhjZXB0aW9ucywgYW5kIHRoZSBEZXZUb29scyB3b24ndCBwYXVzZSB1bmxlc3MgdGhlIGRldmVsb3BlclxuICAgIC8vIHRha2VzIHRoZSBleHRyYSBzdGVwIG9mIGVuYWJsaW5nIHBhdXNlIG9uIGNhdWdodCBleGNlcHRpb25zLiBUaGlzIGlzXG4gICAgLy8gdW5pbnR1aXRpdmUsIHRob3VnaCwgYmVjYXVzZSBldmVuIHRob3VnaCBSZWFjdCBoYXMgY2F1Z2h0IHRoZSBlcnJvciwgZnJvbVxuICAgIC8vIHRoZSBkZXZlbG9wZXIncyBwZXJzcGVjdGl2ZSwgdGhlIGVycm9yIGlzIHVuY2F1Z2h0LlxuICAgIC8vXG4gICAgLy8gVG8gcHJlc2VydmUgdGhlIGV4cGVjdGVkIFwiUGF1c2Ugb24gZXhjZXB0aW9uc1wiIGJlaGF2aW9yLCB3ZSBkb24ndCB1c2UgYVxuICAgIC8vIHRyeS1jYXRjaCBpbiBERVYuIEluc3RlYWQsIHdlIHN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggYSBmYWtlIGV2ZW50IHRvIGEgZmFrZVxuICAgIC8vIERPTSBub2RlLCBhbmQgY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayBmcm9tIGluc2lkZSBhbiBldmVudCBoYW5kbGVyXG4gICAgLy8gZm9yIHRoYXQgZmFrZSBldmVudC4gSWYgdGhlIGNhbGxiYWNrIHRocm93cywgdGhlIGVycm9yIGlzIFwiY2FwdHVyZWRcIiB1c2luZ1xuICAgIC8vIGV2ZW50IGxvb3AgY29udGV4dCwgaXQgZG9lcyBub3QgaW50ZXJydXB0IHRoZSBub3JtYWwgcHJvZ3JhbSBmbG93LlxuICAgIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIGdpdmVzIHVzIHRyeS1jYXRjaCBiZWhhdmlvciB3aXRob3V0IGFjdHVhbGx5IHVzaW5nXG4gICAgLy8gdHJ5LWNhdGNoLiBOZWF0IVxuICAgIC8vIGZha2VOb2RlIHNpZ25pZmllcyB3ZSBhcmUgaW4gYW4gZW52aXJvbm1lbnQgd2l0aCBhIGRvY3VtZW50IGFuZCB3aW5kb3cgb2JqZWN0XG4gICAgaWYgKGZha2VOb2RlKSB7XG4gICAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICB2YXIgZGlkQ2FsbCA9IGZhbHNlOyAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrIHRocmV3IGFuIGVycm9yLiBXZVxuICAgICAgLy8gc2V0IHRoaXMgdG8gdHJ1ZSBhdCB0aGUgYmVnaW5uaW5nLCB0aGVuIHNldCBpdCB0byBmYWxzZSByaWdodCBhZnRlclxuICAgICAgLy8gY2FsbGluZyB0aGUgZnVuY3Rpb24uIElmIHRoZSBmdW5jdGlvbiBlcnJvcnMsIGBkaWRFcnJvcmAgd2lsbCBuZXZlciBiZVxuICAgICAgLy8gc2V0IHRvIGZhbHNlLiBUaGlzIHN0cmF0ZWd5IHdvcmtzIGV2ZW4gaWYgdGhlIGJyb3dzZXIgaXMgZmxha3kgYW5kXG4gICAgICAvLyBmYWlscyB0byBjYWxsIG91ciBnbG9iYWwgZXJyb3IgaGFuZGxlciwgYmVjYXVzZSBpdCBkb2Vzbid0IHJlbHkgb25cbiAgICAgIC8vIHRoZSBlcnJvciBldmVudCBhdCBhbGwuXG5cbiAgICAgIHZhciBkaWRFcnJvciA9IHRydWU7IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSB2YWx1ZSBvZiB3aW5kb3cuZXZlbnQgc28gdGhhdCB3ZSBjYW4gcmVzZXQgaXRcbiAgICAgIC8vIGR1cmluZyB0aGUgY2FsbGJhY2sgdG8gbGV0IHVzZXIgY29kZSBhY2Nlc3Mgd2luZG93LmV2ZW50IGluIHRoZVxuICAgICAgLy8gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGl0LlxuXG4gICAgICB2YXIgd2luZG93RXZlbnQgPSB3aW5kb3cuZXZlbnQ7IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHdpbmRvdy5ldmVudCB0byByZXN0b3JlIGl0IGFmdGVyIGV2ZW50XG4gICAgICAvLyBkaXNwYXRjaGluZzogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzY4OFxuXG4gICAgICB2YXIgd2luZG93RXZlbnREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdldmVudCcpO1xuXG4gICAgICB2YXIgcmVzdG9yZUFmdGVyRGlzcGF0Y2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFdlIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgY2FsbGJhY2sgZnJvbSBldmVudCBsaXN0ZW5lcnMgc28gdGhhdFxuICAgICAgICAvLyBuZXN0ZWQgYGludm9rZUd1YXJkZWRDYWxsYmFja2AgY2FsbHMgZG8gbm90IGNsYXNoLiBPdGhlcndpc2UsIGFcbiAgICAgICAgLy8gbmVzdGVkIGNhbGwgd291bGQgdHJpZ2dlciB0aGUgZmFrZSBldmVudCBoYW5kbGVycyBvZiBhbnkgY2FsbCBoaWdoZXJcbiAgICAgICAgLy8gaW4gdGhlIHN0YWNrLlxuICAgICAgICBmYWtlTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBXZSBjaGVjayBmb3Igd2luZG93Lmhhc093blByb3BlcnR5KCdldmVudCcpIHRvIHByZXZlbnQgdGhlXG4gICAgICAgIC8vIHdpbmRvdy5ldmVudCBhc3NpZ25tZW50IGluIGJvdGggSUUgPD0gMTAgYXMgdGhleSB0aHJvdyBhbiBlcnJvclxuICAgICAgICAvLyBcIk1lbWJlciBub3QgZm91bmRcIiBpbiBzdHJpY3QgbW9kZSwgYW5kIGluIEZpcmVmb3ggd2hpY2ggZG9lcyBub3RcbiAgICAgICAgLy8gc3VwcG9ydCB3aW5kb3cuZXZlbnQuXG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuZXZlbnQgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSkge1xuICAgICAgICAgIHdpbmRvdy5ldmVudCA9IHdpbmRvd0V2ZW50O1xuICAgICAgICB9XG4gICAgICB9OyAvLyBDcmVhdGUgYW4gZXZlbnQgaGFuZGxlciBmb3Igb3VyIGZha2UgZXZlbnQuIFdlIHdpbGwgc3luY2hyb25vdXNseVxuICAgICAgLy8gZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQgdXNpbmcgYGRpc3BhdGNoRXZlbnRgLiBJbnNpZGUgdGhlIGhhbmRsZXIsIHdlXG4gICAgICAvLyBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrLlxuICAgICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuXG5cbiAgICAgIHZhciBfZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gICAgICB2YXIgY2FsbENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBkaWRDYWxsID0gdHJ1ZTtcbiAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gRmxvdyBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIGFyZ3VtZW50cyBzcGxpY2luZy5cblxuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIF9mdW5jQXJncyk7XG4gICAgICAgIGRpZEVycm9yID0gZmFsc2U7XG4gICAgICB9OyAvLyBDcmVhdGUgYSBnbG9iYWwgZXJyb3IgZXZlbnQgaGFuZGxlci4gV2UgdXNlIHRoaXMgdG8gY2FwdHVyZSB0aGUgdmFsdWVcbiAgICAgIC8vIHRoYXQgd2FzIHRocm93bi4gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZXJyb3IgaGFuZGxlciB3aWxsIGZpcmUgbW9yZVxuICAgICAgLy8gdGhhbiBvbmNlOyBmb3IgZXhhbXBsZSwgaWYgbm9uLVJlYWN0IGNvZGUgYWxzbyBjYWxscyBgZGlzcGF0Y2hFdmVudGBcbiAgICAgIC8vIGFuZCBhIGhhbmRsZXIgZm9yIHRoYXQgZXZlbnQgdGhyb3dzLiBXZSBzaG91bGQgYmUgcmVzaWxpZW50IHRvIG1vc3Qgb2ZcbiAgICAgIC8vIHRob3NlIGNhc2VzLiBFdmVuIGlmIG91ciBlcnJvciBldmVudCBoYW5kbGVyIGZpcmVzIG1vcmUgdGhhbiBvbmNlLCB0aGVcbiAgICAgIC8vIGxhc3QgZXJyb3IgZXZlbnQgaXMgYWx3YXlzIHVzZWQuIElmIHRoZSBjYWxsYmFjayBhY3R1YWxseSBkb2VzIGVycm9yLFxuICAgICAgLy8gd2Uga25vdyB0aGF0IHRoZSBsYXN0IGVycm9yIGV2ZW50IGlzIHRoZSBjb3JyZWN0IG9uZSwgYmVjYXVzZSBpdCdzIG5vdFxuICAgICAgLy8gcG9zc2libGUgZm9yIGFueXRoaW5nIGVsc2UgdG8gaGF2ZSBoYXBwZW5lZCBpbiBiZXR3ZWVuIG91ciBjYWxsYmFja1xuICAgICAgLy8gZXJyb3JpbmcgYW5kIHRoZSBjb2RlIHRoYXQgZm9sbG93cyB0aGUgYGRpc3BhdGNoRXZlbnRgIGNhbGwgYmVsb3cuIElmXG4gICAgICAvLyB0aGUgY2FsbGJhY2sgZG9lc24ndCBlcnJvciwgYnV0IHRoZSBlcnJvciBldmVudCB3YXMgZmlyZWQsIHdlIGtub3cgdG9cbiAgICAgIC8vIGlnbm9yZSBpdCBiZWNhdXNlIGBkaWRFcnJvcmAgd2lsbCBiZSBmYWxzZSwgYXMgZGVzY3JpYmVkIGFib3ZlLlxuXG5cbiAgICAgIHZhciBlcnJvcjsgLy8gVXNlIHRoaXMgdG8gdHJhY2sgd2hldGhlciB0aGUgZXJyb3IgZXZlbnQgaXMgZXZlciBjYWxsZWQuXG5cbiAgICAgIHZhciBkaWRTZXRFcnJvciA9IGZhbHNlO1xuICAgICAgdmFyIGlzQ3Jvc3NPcmlnaW5FcnJvciA9IGZhbHNlO1xuXG4gICAgICB2YXIgaGFuZGxlV2luZG93RXJyb3IgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZXJyb3IgPSBldmVudC5lcnJvcjtcbiAgICAgICAgZGlkU2V0RXJyb3IgPSB0cnVlO1xuXG4gICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCAmJiBldmVudC5jb2xubyA9PT0gMCAmJiBldmVudC5saW5lbm8gPT09IDApIHtcbiAgICAgICAgICBpc0Nyb3NzT3JpZ2luRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAvLyBTb21lIG90aGVyIGVycm9yIGhhbmRsZXIgaGFzIHByZXZlbnRlZCBkZWZhdWx0LlxuICAgICAgICAgIC8vIEJyb3dzZXJzIHNpbGVuY2UgdGhlIGVycm9yIHJlcG9ydCBpZiB0aGlzIGhhcHBlbnMuXG4gICAgICAgICAgLy8gV2UnbGwgcmVtZW1iZXIgdGhpcyB0byBsYXRlciBkZWNpZGUgd2hldGhlciB0byBsb2cgaXQgb3Igbm90LlxuICAgICAgICAgIGlmIChlcnJvciAhPSBudWxsICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoaW5uZXIpIHsvLyBJZ25vcmUuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9OyAvLyBDcmVhdGUgYSBmYWtlIGV2ZW50IHR5cGUuXG5cblxuICAgICAgdmFyIGV2dFR5cGUgPSBcInJlYWN0LVwiICsgKG5hbWUgPyBuYW1lIDogJ2ludm9rZWd1YXJkZWRjYWxsYmFjaycpOyAvLyBBdHRhY2ggb3VyIGV2ZW50IGhhbmRsZXJzXG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVdpbmRvd0Vycm9yKTtcbiAgICAgIGZha2VOb2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQuIElmIHRoZSB1c2VyLXByb3ZpZGVkIGZ1bmN0aW9uXG4gICAgICAvLyBlcnJvcnMsIGl0IHdpbGwgdHJpZ2dlciBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIuXG5cbiAgICAgIGV2dC5pbml0RXZlbnQoZXZ0VHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZha2VOb2RlLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblxuICAgICAgaWYgKHdpbmRvd0V2ZW50RGVzY3JpcHRvcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnZXZlbnQnLCB3aW5kb3dFdmVudERlc2NyaXB0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlkQ2FsbCAmJiBkaWRFcnJvcikge1xuICAgICAgICBpZiAoIWRpZFNldEVycm9yKSB7XG4gICAgICAgICAgLy8gVGhlIGNhbGxiYWNrIGVycm9yZWQsIGJ1dCB0aGUgZXJyb3IgZXZlbnQgbmV2ZXIgZmlyZWQuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignQW4gZXJyb3Igd2FzIHRocm93biBpbnNpZGUgb25lIG9mIHlvdXIgY29tcG9uZW50cywgYnV0IFJlYWN0ICcgKyBcImRvZXNuJ3Qga25vdyB3aGF0IGl0IHdhcy4gVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGJyb3dzZXIgXCIgKyAnZmxha2luZXNzLiBSZWFjdCBkb2VzIGl0cyBiZXN0IHRvIHByZXNlcnZlIHRoZSBcIlBhdXNlIG9uICcgKyAnZXhjZXB0aW9uc1wiIGJlaGF2aW9yIG9mIHRoZSBEZXZUb29scywgd2hpY2ggcmVxdWlyZXMgc29tZSAnICsgXCJERVYtbW9kZSBvbmx5IHRyaWNrcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlIGRvbid0IHdvcmsgaW4gXCIgKyAneW91ciBicm93c2VyLiBUcnkgdHJpZ2dlcmluZyB0aGUgZXJyb3IgaW4gcHJvZHVjdGlvbiBtb2RlLCAnICsgJ29yIHN3aXRjaGluZyB0byBhIG1vZGVybiBicm93c2VyLiBJZiB5b3Ugc3VzcGVjdCB0aGF0IHRoaXMgaXMgJyArICdhY3R1YWxseSBhbiBpc3N1ZSB3aXRoIFJlYWN0LCBwbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Nyb3NzT3JpZ2luRXJyb3IpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiQSBjcm9zcy1vcmlnaW4gZXJyb3Igd2FzIHRocm93bi4gUmVhY3QgZG9lc24ndCBoYXZlIGFjY2VzcyB0byBcIiArICd0aGUgYWN0dWFsIGVycm9yIG9iamVjdCBpbiBkZXZlbG9wbWVudC4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Nyb3Nzb3JpZ2luLWVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgICAgIH0gLy8gUmVtb3ZlIG91ciBldmVudCBsaXN0ZW5lcnNcblxuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG5cbiAgICAgIGlmIChkaWRDYWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHJlYWxseSB3cm9uZywgYW5kIG91ciBldmVudCB3YXMgbm90IGRpc3BhdGNoZWQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY3MzRcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjU4NVxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIHByb2R1Y3Rpb24gaW1wbGVtZW50YXRpb24uXG4gICAgICAgIHJlc3RvcmVBZnRlckRpc3BhdGNoKCk7IC8vIHdlIGZhbGwgdGhyb3VnaCBhbmQgY2FsbCB0aGUgcHJvZCB2ZXJzaW9uIGluc3RlYWRcbiAgICAgIH1cbiAgICB9IC8vIFdlIG9ubHkgZ2V0IGhlcmUgaWYgd2UgYXJlIGluIGFuIGVudmlyb25tZW50IHRoYXQgZWl0aGVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGJyb3dzZXJcbiAgICAvLyB2YXJpYW50IG9yIHdlIGhhZCB0cm91YmxlIGdldHRpbmcgdGhlIGJyb3dzZXIgdG8gZW1pdCB0aGUgZXJyb3IuXG4gICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuXG5cbiAgICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdIEZsb3cgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSBhcmd1bWVudHMgc3BsaWNpbmcuXG4gICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGhhc0Vycm9yID0gZmFsc2U7XG52YXIgY2F1Z2h0RXJyb3IgPSBudWxsOyAvLyBVc2VkIGJ5IGV2ZW50IHN5c3RlbSB0byBjYXB0dXJlL3JldGhyb3cgdGhlIGZpcnN0IGVycm9yLlxuXG52YXIgaGFzUmV0aHJvd0Vycm9yID0gZmFsc2U7XG52YXIgcmV0aHJvd0Vycm9yID0gbnVsbDtcbnZhciByZXBvcnRlciA9IHtcbiAgb25FcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gIH1cbn07XG4vKipcbiAqIENhbGwgYSBmdW5jdGlvbiB3aGlsZSBndWFyZGluZyBhZ2FpbnN0IGVycm9ycyB0aGF0IGhhcHBlbnMgd2l0aGluIGl0LlxuICogUmV0dXJucyBhbiBlcnJvciBpZiBpdCB0aHJvd3MsIG90aGVyd2lzZSBudWxsLlxuICpcbiAqIEluIHByb2R1Y3Rpb24sIHRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSB0cnktY2F0Y2guIFRoZSByZWFzb24gd2UgZG9uJ3RcbiAqIHVzZSBhIHRyeS1jYXRjaCBkaXJlY3RseSBpcyBzbyB0aGF0IHdlIGNhbiBzd2FwIG91dCBhIGRpZmZlcmVudFxuICogaW1wbGVtZW50YXRpb24gaW4gREVWIG1vZGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzIGZvciBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGhhc0Vycm9yID0gZmFsc2U7XG4gIGNhdWdodEVycm9yID0gbnVsbDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbC5hcHBseShyZXBvcnRlciwgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogU2FtZSBhcyBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciwgaXQgc3RvcmVzXG4gKiBpdCBpbiBhIGdsb2JhbCBzbyBpdCBjYW4gYmUgcmV0aHJvd24gYnkgYHJldGhyb3dDYXVnaHRFcnJvcmAgbGF0ZXIuXG4gKiBUT0RPOiBTZWUgaWYgY2F1Z2h0RXJyb3IgYW5kIHJldGhyb3dFcnJvciBjYW4gYmUgdW5pZmllZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgaWYgKCFoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgIGhhc1JldGhyb3dFcnJvciA9IHRydWU7XG4gICAgICByZXRocm93RXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRHVyaW5nIGV4ZWN1dGlvbiBvZiBndWFyZGVkIGZ1bmN0aW9ucyB3ZSB3aWxsIGNhcHR1cmUgdGhlIGZpcnN0IGVycm9yIHdoaWNoXG4gKiB3ZSB3aWxsIHJldGhyb3cgdG8gYmUgaGFuZGxlZCBieSB0aGUgdG9wIGxldmVsIGVycm9yIGhhbmRsZXIuXG4gKi9cblxuZnVuY3Rpb24gcmV0aHJvd0NhdWdodEVycm9yKCkge1xuICBpZiAoaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gcmV0aHJvd0Vycm9yO1xuICAgIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xuICAgIHJldGhyb3dFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc0NhdWdodEVycm9yKCkge1xuICByZXR1cm4gaGFzRXJyb3I7XG59XG5mdW5jdGlvbiBjbGVhckNhdWdodEVycm9yKCkge1xuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjYXVnaHRFcnJvcjtcbiAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhckNhdWdodEVycm9yIHdhcyBjYWxsZWQgYnV0IG5vIGVycm9yIHdhcyBjYXB0dXJlZC4gVGhpcyBlcnJvciAnICsgJ2lzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG5cbntcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG59IC8vIFVzZWQgZHVyaW5nIHRoZSBjb21taXQgcGhhc2UgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHN0YWNrLlxuLy8gQWxsb3dzIHVzIHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHJldHVybiBwYXRoIHRvIGZpbmQgdGhlIG5lYXJlc3QgT2Zmc2NyZWVuIGFuY2VzdG9yLlxuXG5cbnZhciBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBmYWxzZTtcbnZhciBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gZmFsc2U7XG52YXIgUG9zc2libHlXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgPyBXZWFrU2V0IDogU2V0O1xudmFyIG5leHRFZmZlY3QgPSBudWxsOyAvLyBVc2VkIGZvciBQcm9maWxpbmcgYnVpbGRzIHRvIHRyYWNrIHVwZGF0ZXJzLlxuXG52YXIgaW5Qcm9ncmVzc0xhbmVzID0gbnVsbDtcbnZhciBpblByb2dyZXNzUm9vdCA9IG51bGw7XG5cbmZ1bmN0aW9uIHNob3VsZFByb2ZpbGUoY3VycmVudCkge1xuICByZXR1cm4gKGN1cnJlbnQubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmIChnZXRFeGVjdXRpb25Db250ZXh0KCkgJiBDb21taXRDb250ZXh0KSAhPT0gTm9Db250ZXh0O1xufVxuXG5mdW5jdGlvbiByZXBvcnRVbmNhdWdodEVycm9ySW5ERVYoZXJyb3IpIHtcbiAgLy8gV3JhcHBpbmcgZWFjaCBzbWFsbCBwYXJ0IG9mIHRoZSBjb21taXQgcGhhc2UgaW50byBhIGd1YXJkZWRcbiAgLy8gY2FsbGJhY2sgaXMgYSBiaXQgdG9vIHNsb3cgKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzIxNjY2KS5cbiAgLy8gQnV0IHdlIHJlbHkgb24gaXQgdG8gc3VyZmFjZSBlcnJvcnMgdG8gREVWIHRvb2xzIGxpa2Ugb3ZlcmxheXNcbiAgLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMjE3MTIpLlxuICAvLyBBcyBhIGNvbXByb21pc2UsIHJldGhyb3cgb25seSBjYXVnaHQgZXJyb3JzIGluIGEgZ3VhcmQuXG4gIHtcbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gICAgY2xlYXJDYXVnaHRFcnJvcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lcihjdXJyZW50LCBpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5wcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHNob3VsZFByb2ZpbGUoY3VycmVudCkpIHtcbiAgICB0cnkge1xuICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oY3VycmVudCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbn0gLy8gQ2FwdHVyZSBlcnJvcnMgc28gdGhleSBkb24ndCBpbnRlcnJ1cHQgdW5tb3VudGluZy5cblxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgaW5zdGFuY2UpIHtcbiAgdHJ5IHtcbiAgICBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIoY3VycmVudCwgaW5zdGFuY2UpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgfVxufSAvLyBDYXB0dXJlIGVycm9ycyBzbyB0aGV5IGRvbid0IGludGVycnVwdCBtb3VudGluZy5cblxuXG5mdW5jdGlvbiBzYWZlbHlBdHRhY2hSZWYoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcikge1xuICB0cnkge1xuICAgIGNvbW1pdEF0dGFjaFJlZihjdXJyZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgdmFyIHJlZiA9IGN1cnJlbnQucmVmO1xuICB2YXIgcmVmQ2xlYW51cCA9IGN1cnJlbnQucmVmQ2xlYW51cDtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiByZWZDbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc2hvdWxkUHJvZmlsZShjdXJyZW50KSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgICByZWZDbGVhbnVwKCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGN1cnJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZDbGVhbnVwKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIC8vIGByZWZDbGVhbnVwYCBoYXMgYmVlbiBjYWxsZWQuIE51bGxpZnkgYWxsIHJlZmVyZW5jZXMgdG8gaXQgdG8gcHJldmVudCBkb3VibGUgaW52b2NhdGlvbi5cbiAgICAgICAgY3VycmVudC5yZWZDbGVhbnVwID0gbnVsbDtcbiAgICAgICAgdmFyIGZpbmlzaGVkV29yayA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuXG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsgIT0gbnVsbCkge1xuICAgICAgICAgIGZpbmlzaGVkV29yay5yZWZDbGVhbnVwID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHJldFZhbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoY3VycmVudCkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgICAgcmV0VmFsID0gcmVmKG51bGwpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihjdXJyZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0VmFsID0gcmVmKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRWYWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBlcnJvcignVW5leHBlY3RlZCByZXR1cm4gdmFsdWUgZnJvbSBhIGNhbGxiYWNrIHJlZiBpbiAlcy4gJyArICdBIGNhbGxiYWNrIHJlZiBzaG91bGQgbm90IHJldHVybiBhIGZ1bmN0aW9uLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoY3VycmVudCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gdW5hYmxlIHRvIG5hcnJvdyB0eXBlIHRvIFJlZk9iamVjdFxuICAgICAgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZXN0cm95KSB7XG4gIHRyeSB7XG4gICAgZGVzdHJveSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgfVxufVxudmFyIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpcnN0Q2hpbGQpIHtcbiAgcHJlcGFyZUZvckNvbW1pdCgpO1xuICBuZXh0RWZmZWN0ID0gZmlyc3RDaGlsZDtcbiAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzX2JlZ2luKCk7IC8vIFdlIG5vIGxvbmdlciBuZWVkIHRvIHRyYWNrIHRoZSBhY3RpdmUgaW5zdGFuY2UgZmliZXJcblxuICB2YXIgc2hvdWxkRmlyZSA9IHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1cjtcbiAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG4gIHJldHVybiBzaG91bGRGaXJlO1xufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNfYmVnaW4oKSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpYmVyID0gbmV4dEVmZmVjdDsgLy8gVGhpcyBwaGFzZSBpcyBvbmx5IHVzZWQgZm9yIGJlZm9yZUFjdGl2ZUluc3RhbmNlQmx1ci5cblxuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gICAgaWYgKChmaWJlci5zdWJ0cmVlRmxhZ3MgJiBCZWZvcmVNdXRhdGlvbk1hc2spICE9PSBOb0ZsYWdzJDEgJiYgY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGNoaWxkLnJldHVybiA9IGZpYmVyO1xuICAgICAgbmV4dEVmZmVjdCA9IGNoaWxkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNfY29tcGxldGUoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzX2NvbXBsZXRlKCkge1xuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaWJlciA9IG5leHRFZmZlY3Q7XG4gICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgIHRyeSB7XG4gICAgICBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpYmVyKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgdmFyIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nO1xuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIHNpYmxpbmcucmV0dXJuID0gZmliZXIucmV0dXJuO1xuICAgICAgbmV4dEVmZmVjdCA9IHNpYmxpbmc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV4dEVmZmVjdCA9IGZpYmVyLnJldHVybjtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpbmlzaGVkV29yaykge1xuICB2YXIgY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGU7XG4gIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcblxuICBpZiAoKGZsYWdzICYgU25hcHNob3QpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICBzZXRDdXJyZW50RmliZXIoZmluaXNoZWRXb3JrKTtcbiAgfVxuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmICgoZmxhZ3MgJiBTbmFwc2hvdCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHNuYXBzaG90ID0gaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IHByZXZQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIHByZXZQcm9wcyksIHByZXZTdGF0ZSk7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGRpZFdhcm5TZXQgPSBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcblxuICAgICAgICAgICAgICBpZiAoc25hcHNob3QgPT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblNldC5oYXMoZmluaXNoZWRXb3JrLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgZGlkV2FyblNldC5hZGQoZmluaXNoZWRXb3JrLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgZXJyb3IoJyVzLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCk6IEEgc25hcHNob3QgdmFsdWUgKG9yIG51bGwpICcgKyAnbXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIGlmICgoZmxhZ3MgJiBTbmFwc2hvdCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciByb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIHRoZXNlIGNvbXBvbmVudCB0eXBlc1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICBpZiAoKGZsYWdzICYgU25hcHNob3QpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzICcgKyAnbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICgoZmxhZ3MgJiBTbmFwc2hvdCkgIT09IE5vRmxhZ3MkMSkge1xuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KGZsYWdzLCBmaW5pc2hlZFdvcmssIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgZmxhZ3MpID09PSBmbGFncykge1xuICAgICAgICAvLyBVbm1vdW50XG4gICAgICAgIHZhciBpbnN0ID0gZWZmZWN0Lmluc3Q7XG4gICAgICAgIHZhciBkZXN0cm95ID0gaW5zdC5kZXN0cm95O1xuXG4gICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbnN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgICAgbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RhcnRlZChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoZmxhZ3MgJiBMYXlvdXQpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgICAgIHNldElzUnVubmluZ0luc2VydGlvbkVmZmVjdCh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzYWZlbHlDYWxsRGVzdHJveShmaW5pc2hlZFdvcmssIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGRlc3Ryb3kpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgICAgc2V0SXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgICAgbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RvcHBlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoZmxhZ3MgJiBMYXlvdXQpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KGZsYWdzLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgZmxhZ3MpID09PSBmbGFncykge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKChmbGFncyAmIFBhc3NpdmUpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgICBtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RhcnRlZChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKGZsYWdzICYgTGF5b3V0KSAhPT0gTm9GbGFncykge1xuICAgICAgICAgICAgbWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RhcnRlZChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBNb3VudFxuXG5cbiAgICAgICAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmICgoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgICBzZXRJc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluc3QgPSBlZmZlY3QuaW5zdDtcbiAgICAgICAgdmFyIGRlc3Ryb3kgPSBjcmVhdGUoKTtcbiAgICAgICAgaW5zdC5kZXN0cm95ID0gZGVzdHJveTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgIHNldElzUnVubmluZ0luc2VydGlvbkVmZmVjdChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmICgoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgICAgbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKChmbGFncyAmIExheW91dCkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0b3BwZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGhvb2tOYW1lID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoKGVmZmVjdC50YWcgJiBMYXlvdXQpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgICAgaG9va05hbWUgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGVmZmVjdC50YWcgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgICAgaG9va05hbWUgPSAndXNlSW5zZXJ0aW9uRWZmZWN0JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGhvb2tOYW1lID0gJ3VzZUVmZmVjdCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBhZGRlbmR1bSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgaWYgKGRlc3Ryb3kgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZCBudWxsLiBJZiB5b3VyIGVmZmVjdCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuICcgKyAndXAsIHJldHVybiB1bmRlZmluZWQgKG9yIG5vdGhpbmcpLic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXN0cm95LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnXFxuXFxuSXQgbG9va3MgbGlrZSB5b3Ugd3JvdGUgJyArIGhvb2tOYW1lICsgJyhhc3luYyAoKSA9PiAuLi4pIG9yIHJldHVybmVkIGEgUHJvbWlzZS4gJyArICdJbnN0ZWFkLCB3cml0ZSB0aGUgYXN5bmMgZnVuY3Rpb24gaW5zaWRlIHlvdXIgZWZmZWN0ICcgKyAnYW5kIGNhbGwgaXQgaW1tZWRpYXRlbHk6XFxuXFxuJyArIGhvb2tOYW1lICsgJygoKSA9PiB7XFxuJyArICcgIGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHtcXG4nICsgJyAgICAvLyBZb3UgY2FuIGF3YWl0IGhlcmVcXG4nICsgJyAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IE15QVBJLmdldERhdGEoc29tZUlkKTtcXG4nICsgJyAgICAvLyAuLi5cXG4nICsgJyAgfVxcbicgKyAnICBmZXRjaERhdGEoKTtcXG4nICsgXCJ9LCBbc29tZUlkXSk7IC8vIE9yIFtdIGlmIGVmZmVjdCBkb2Vzbid0IG5lZWQgcHJvcHMgb3Igc3RhdGVcXG5cXG5cIiArICdMZWFybiBtb3JlIGFib3V0IGRhdGEgZmV0Y2hpbmcgd2l0aCBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2hvb2tzLWRhdGEtZmV0Y2hpbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZDogJyArIGRlc3Ryb3k7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yKCclcyBtdXN0IG5vdCByZXR1cm4gYW55dGhpbmcgYmVzaWRlcyBhIGZ1bmN0aW9uLCAnICsgJ3doaWNoIGlzIHVzZWQgZm9yIGNsZWFuLXVwLiVzJywgaG9va05hbWUsIGFkZGVuZHVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGFzc2l2ZUVmZmVjdER1cmF0aW9ucyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykge1xuICBpZiAoZ2V0RXhlY3V0aW9uQ29udGV4dCgpICYgQ29tbWl0Q29udGV4dCkge1xuICAgIC8vIE9ubHkgUHJvZmlsZXJzIHdpdGggd29yayBpbiB0aGVpciBzdWJ0cmVlIHdpbGwgaGF2ZSBhbiBVcGRhdGUgZWZmZWN0IHNjaGVkdWxlZC5cbiAgICBpZiAoKGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgICAgdmFyIF9maW5pc2hlZFdvcmskbWVtb2l6ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgICAgIGlkID0gX2ZpbmlzaGVkV29yayRtZW1vaXplLmlkLFxuICAgICAgICAgICAgICAgIG9uUG9zdENvbW1pdCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZS5vblBvc3RDb21taXQ7IC8vIFRoaXMgdmFsdWUgd2lsbCBzdGlsbCByZWZsZWN0IHRoZSBwcmV2aW91cyBjb21taXQgcGhhc2UuXG4gICAgICAgICAgICAvLyBJdCBkb2VzIG5vdCBnZXQgcmVzZXQgdW50aWwgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNvbW1pdCBwaGFzZS5cblxuICAgICAgICAgICAgdmFyIGNvbW1pdFRpbWUgPSBnZXRDb21taXRUaW1lKCk7XG4gICAgICAgICAgICB2YXIgcGhhc2UgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlID09PSBudWxsID8gJ21vdW50JyA6ICd1cGRhdGUnO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChpc0N1cnJlbnRVcGRhdGVOZXN0ZWQoKSkge1xuICAgICAgICAgICAgICAgIHBoYXNlID0gJ25lc3RlZC11cGRhdGUnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb25Qb3N0Q29tbWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIG9uUG9zdENvbW1pdChpZCwgcGhhc2UsIHBhc3NpdmVFZmZlY3REdXJhdGlvbiwgY29tbWl0VGltZSk7XG4gICAgICAgICAgICB9IC8vIEJ1YmJsZSB0aW1lcyB0byB0aGUgbmV4dCBuZWFyZXN0IGFuY2VzdG9yIFByb2ZpbGVyLlxuICAgICAgICAgICAgLy8gQWZ0ZXIgd2UgcHJvY2VzcyB0aGF0IFByb2ZpbGVyLCB3ZSdsbCBidWJibGUgZnVydGhlciB1cC5cblxuXG4gICAgICAgICAgICB2YXIgcGFyZW50RmliZXIgPSBmaW5pc2hlZFdvcmsucmV0dXJuO1xuXG4gICAgICAgICAgICBvdXRlcjogd2hpbGUgKHBhcmVudEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN3aXRjaCAocGFyZW50RmliZXIudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgICAgICAgIHZhciByb290ID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgcm9vdC5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz0gcGFzc2l2ZUVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG5cbiAgICAgICAgICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICAgIHBhcmVudFN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz0gcGFzc2l2ZUVmZmVjdER1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRIb29rTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmssIGhvb2tGbGFncykge1xuICAvLyBBdCB0aGlzIHBvaW50IGxheW91dCBlZmZlY3RzIGhhdmUgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCAoZHVyaW5nIG11dGF0aW9uIHBoYXNlKS5cbiAgLy8gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc2libGluZyBjb21wb25lbnQgZWZmZWN0cyBmcm9tIGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlcixcbiAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgb3ZlcnJpZGUgYSByZWYgc2V0XG4gIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG4gIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICB0cnkge1xuICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgIH1cblxuICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGZpbmlzaGVkV29yayk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0Q2xhc3NMYXlvdXRMaWZlY3ljbGVzKGZpbmlzaGVkV29yaywgY3VycmVudCkge1xuICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cbiAgICB7XG4gICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZE1vdW50LiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRNb3VudC4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihmaW5pc2hlZFdvcmspO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBwcmV2UHJvcHMgPSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgPT09IGZpbmlzaGVkV29yay50eXBlID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgY3VycmVudC5tZW1vaXplZFByb3BzKTtcbiAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAge1xuICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0Q2xhc3NDYWxsYmFja3MoZmluaXNoZWRXb3JrKSB7XG4gIC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gIC8vIGNvbW1pdCBwaGFzZS4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIHR5cGUgY2hlY2suXG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAge1xuICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbW1pdENhbGxiYWNrcyh1cGRhdGVRdWV1ZSwgaW5zdGFuY2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9zdENvbXBvbmVudE1vdW50KGZpbmlzaGVkV29yaykge1xuICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlO1xuICB2YXIgcHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcztcbiAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICB0cnkge1xuICAgIGNvbW1pdE1vdW50KGluc3RhbmNlLCB0eXBlLCBwcm9wcywgZmluaXNoZWRXb3JrKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQcm9maWxlclVwZGF0ZShmaW5pc2hlZFdvcmssIGN1cnJlbnQpIHtcbiAgaWYgKGdldEV4ZWN1dGlvbkNvbnRleHQoKSAmIENvbW1pdENvbnRleHQpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICBvbkNvbW1pdCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25Db21taXQsXG4gICAgICAgICAgb25SZW5kZXIgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uUmVuZGVyO1xuICAgICAgdmFyIGVmZmVjdER1cmF0aW9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbjtcbiAgICAgIHZhciBjb21taXRUaW1lID0gZ2V0Q29tbWl0VGltZSgpO1xuICAgICAgdmFyIHBoYXNlID0gY3VycmVudCA9PT0gbnVsbCA/ICdtb3VudCcgOiAndXBkYXRlJztcblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyTmVzdGVkVXBkYXRlUGhhc2UpIHtcbiAgICAgICAgaWYgKGlzQ3VycmVudFVwZGF0ZU5lc3RlZCgpKSB7XG4gICAgICAgICAgcGhhc2UgPSAnbmVzdGVkLXVwZGF0ZSc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvblJlbmRlcihmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5pZCwgcGhhc2UsIGZpbmlzaGVkV29yay5hY3R1YWxEdXJhdGlvbiwgZmluaXNoZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24sIGZpbmlzaGVkV29yay5hY3R1YWxTdGFydFRpbWUsIGNvbW1pdFRpbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJDb21taXRIb29rcykge1xuICAgICAgICBpZiAodHlwZW9mIG9uQ29tbWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb25Db21taXQoZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMuaWQsIHBoYXNlLCBlZmZlY3REdXJhdGlvbiwgY29tbWl0VGltZSk7XG4gICAgICAgIH0gLy8gU2NoZWR1bGUgYSBwYXNzaXZlIGVmZmVjdCBmb3IgdGhpcyBQcm9maWxlciB0byBjYWxsIG9uUG9zdENvbW1pdCBob29rcy5cbiAgICAgICAgLy8gVGhpcyBlZmZlY3Qgc2hvdWxkIGJlIHNjaGVkdWxlZCBldmVuIGlmIHRoZXJlIGlzIG5vIG9uUG9zdENvbW1pdCBjYWxsYmFjayBmb3IgdGhpcyBQcm9maWxlcixcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgZWZmZWN0IGlzIGFsc28gd2hlcmUgdGltZXMgYnViYmxlIHRvIHBhcmVudCBQcm9maWxlcnMuXG5cblxuICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVQcm9maWxlckVmZmVjdChmaW5pc2hlZFdvcmspOyAvLyBQcm9wYWdhdGUgbGF5b3V0IGVmZmVjdCBkdXJhdGlvbnMgdG8gdGhlIG5leHQgbmVhcmVzdCBQcm9maWxlciBhbmNlc3Rvci5cbiAgICAgICAgLy8gRG8gbm90IHJlc2V0IHRoZXNlIHZhbHVlcyB1bnRpbCB0aGUgbmV4dCByZW5kZXIgc28gRGV2VG9vbHMgaGFzIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSBmaXJzdC5cblxuICAgICAgICB2YXIgcGFyZW50RmliZXIgPSBmaW5pc2hlZFdvcmsucmV0dXJuO1xuXG4gICAgICAgIG91dGVyOiB3aGlsZSAocGFyZW50RmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBzd2l0Y2ggKHBhcmVudEZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgICAgdmFyIHJvb3QgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgIHJvb3QuZWZmZWN0RHVyYXRpb24gKz0gZWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuXG4gICAgICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBwYXJlbnRTdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gKz0gZWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIucmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcykge1xuICAvLyBXaGVuIHVwZGF0aW5nIHRoaXMgZnVuY3Rpb24sIGFsc28gdXBkYXRlIHJlYXBwZWFyTGF5b3V0RWZmZWN0cywgd2hpY2ggZG9lc1xuICAvLyBtb3N0IG9mIHRoZSBzYW1lIHRoaW5ncyB3aGVuIGFuIG9mZnNjcmVlbiB0cmVlIGdvZXMgZnJvbSBoaWRkZW4gLT4gdmlzaWJsZS5cbiAgdmFyIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgTGF5b3V0IHwgSGFzRWZmZWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIGNvbW1pdENsYXNzTGF5b3V0TGlmZWN5Y2xlcyhmaW5pc2hlZFdvcmssIGN1cnJlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZsYWdzICYgQ2FsbGJhY2spIHtcbiAgICAgICAgICBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcblxuICAgICAgICBpZiAoZmxhZ3MgJiBDYWxsYmFjaykge1xuICAgICAgICAgIC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cbiAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlID0gZ2V0UHVibGljSW5zdGFuY2UoZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb21taXRDYWxsYmFja3ModXBkYXRlUXVldWUsIGluc3RhbmNlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBGYWxsIHRocm91Z2hcblxuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspOyAvLyBSZW5kZXJlcnMgbWF5IHNjaGVkdWxlIHdvcmsgdG8gYmUgZG9uZSBhZnRlciBob3N0IGNvbXBvbmVudHMgYXJlIG1vdW50ZWRcbiAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBtYXkgc2NoZWR1bGUgYXV0by1mb2N1cyBmb3IgaW5wdXRzIGFuZCBmb3JtIGNvbnRyb2xzKS5cbiAgICAgICAgLy8gVGhlc2UgZWZmZWN0cyBzaG91bGQgb25seSBiZSBjb21taXR0ZWQgd2hlbiBjb21wb25lbnRzIGFyZSBmaXJzdCBtb3VudGVkLFxuICAgICAgICAvLyBha2Egd2hlbiB0aGVyZSBpcyBubyBjdXJyZW50L2FsdGVybmF0ZS5cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCAmJiBmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIGNvbW1pdEhvc3RDb21wb25lbnRNb3VudChmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTsgLy8gVE9ETzogU2hvdWxkIHRoaXMgZmlyZSBpbnNpZGUgYW4gb2Zmc2NyZWVuIHRyZWU/IE9yIHNob3VsZCBpdCB3YWl0IHRvXG4gICAgICAgIC8vIGZpcmUgd2hlbiB0aGUgdHJlZSBiZWNvbWVzIHZpc2libGUgYWdhaW4uXG5cbiAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgY29tbWl0UHJvZmlsZXJVcGRhdGUoZmluaXNoZWRXb3JrLCBjdXJyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpc01vZGVyblJvb3QgPSAoZmluaXNoZWRXb3JrLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTW9kZTtcblxuICAgICAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICAgICAgdmFyIGlzSGlkZGVuID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgdmFyIG5ld09mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IGlzSGlkZGVuIHx8IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcblxuICAgICAgICAgIGlmIChuZXdPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4pIDsgZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGUgT2Zmc2NyZWVuIHRyZWUgaXMgdmlzaWJsZS5cbiAgICAgICAgICAgIHZhciB3YXNIaWRkZW4gPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgIHZhciBuZXdPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gd2FzSGlkZGVuIHx8IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBuZXdPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gbmV3T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcblxuICAgICAgICAgICAgaWYgKG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gJiYgIXByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJvb3Qgb2YgYSByZWFwcGVhcmluZyBib3VuZGFyeS4gQXMgd2UgY29udGludWVcbiAgICAgICAgICAgICAgLy8gdHJhdmVyc2luZyB0aGUgbGF5b3V0IGVmZmVjdHMsIHdlIG11c3QgYWxzbyByZS1tb3VudCBsYXlvdXRcbiAgICAgICAgICAgICAgLy8gZWZmZWN0cyB0aGF0IHdlcmUgdW5tb3VudGVkIHdoZW4gdGhlIE9mZnNjcmVlbiBzdWJ0cmVlIHdhc1xuICAgICAgICAgICAgICAvLyBoaWRkZW4uIFNvIHRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbm9ybWFsIGNvbW1pdExheW91dEVmZmVjdHMuXG4gICAgICAgICAgICAgIHZhciBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzID0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiBMYXlvdXRNYXNrKSAhPT0gTm9GbGFncyQxO1xuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrLCBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICAgICAgdmFyIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG5cbiAgICAgICAgICBpZiAocHJvcHMubW9kZSA9PT0gJ21hbnVhbCcpIHtcbiAgICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4oZmluaXNoZWRXb3JrLCBpc0hpZGRlbikge1xuICAvLyBPbmx5IGhpZGUgb3IgdW5oaWRlIHRoZSB0b3AtbW9zdCBob3N0IG5vZGVzLlxuICB2YXIgaG9zdFN1YnRyZWVSb290ID0gbnVsbDtcblxuICB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IGZpbmlzaGVkV29yaztcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgKG5vZGUudGFnID09PSBIb3N0SG9pc3RhYmxlICkgfHwgKG5vZGUudGFnID09PSBIb3N0U2luZ2xldG9uICkpIHtcbiAgICAgICAgaWYgKGhvc3RTdWJ0cmVlUm9vdCA9PT0gbnVsbCkge1xuICAgICAgICAgIGhvc3RTdWJ0cmVlUm9vdCA9IG5vZGU7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgICAgICBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdW5oaWRlSW5zdGFuY2Uobm9kZS5zdGF0ZU5vZGUsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgaWYgKGhvc3RTdWJ0cmVlUm9vdCA9PT0gbnVsbCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgX2luc3RhbmNlID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgICAgICBoaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1bmhpZGVUZXh0SW5zdGFuY2UoX2luc3RhbmNlLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKG5vZGUudGFnID09PSBPZmZzY3JlZW5Db21wb25lbnQgfHwgbm9kZS50YWcgPT09IExlZ2FjeUhpZGRlbkNvbXBvbmVudCkgJiYgbm9kZS5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIG5vZGUgIT09IGZpbmlzaGVkV29yaykgOyBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChob3N0U3VidHJlZVJvb3QgPT09IG5vZGUpIHtcbiAgICAgICAgICBob3N0U3VidHJlZVJvb3QgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaG9zdFN1YnRyZWVSb290ID09PSBub2RlKSB7XG4gICAgICAgIGhvc3RTdWJ0cmVlUm9vdCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEF0dGFjaFJlZihmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHJlZiA9IGZpbmlzaGVkV29yay5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgdmFyIGluc3RhbmNlVG9Vc2U7XG5cbiAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGluc3RhbmNlVG9Vc2UgPSBpbnN0YW5jZTtcbiAgICB9IC8vIE1vdmVkIG91dHNpZGUgdG8gZW5zdXJlIERDRSB3b3JrcyB3aXRoIHRoaXMgZmxhZ1xuXG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLnJlZkNsZWFudXAgPSByZWYoaW5zdGFuY2VUb1VzZSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluaXNoZWRXb3JrLnJlZkNsZWFudXAgPSByZWYoaW5zdGFuY2VUb1VzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFyZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHJlZiBvYmplY3QgcHJvdmlkZWQgZm9yICVzLiAnICsgJ1VzZSBlaXRoZXIgYSByZWYtc2V0dGVyIGZ1bmN0aW9uIG9yIFJlYWN0LmNyZWF0ZVJlZigpLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSB1bmFibGUgdG8gbmFycm93IHR5cGUgdG8gdGhlIG5vbi1mdW5jdGlvbiBjYXNlXG5cblxuICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0YW5jZVRvVXNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRhY2hGaWJlck11dGF0aW9uKGZpYmVyKSB7XG4gIC8vIEN1dCBvZmYgdGhlIHJldHVybiBwb2ludGVyIHRvIGRpc2Nvbm5lY3QgaXQgZnJvbSB0aGUgdHJlZS5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIGRldGVjdCBhbmQgd2FybiBhZ2FpbnN0IHN0YXRlIHVwZGF0ZXMgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cbiAgLy8gSXQgYWxzbyBwcmV2ZW50cyBldmVudHMgZnJvbSBidWJibGluZyBmcm9tIHdpdGhpbiBkaXNjb25uZWN0ZWQgY29tcG9uZW50cy5cbiAgLy9cbiAgLy8gSWRlYWxseSwgd2Ugc2hvdWxkIGFsc28gY2xlYXIgdGhlIGNoaWxkIHBvaW50ZXIgb2YgdGhlIHBhcmVudCBhbHRlcm5hdGUgdG8gbGV0IHRoaXNcbiAgLy8gZ2V0IEdDOmVkIGJ1dCB3ZSBkb24ndCBrbm93IHdoaWNoIGZvciBzdXJlIHdoaWNoIHBhcmVudCBpcyB0aGUgY3VycmVudFxuICAvLyBvbmUgc28gd2UnbGwgc2V0dGxlIGZvciBHQzppbmcgdGhlIHN1YnRyZWUgb2YgdGhpcyBjaGlsZC5cbiAgLy8gVGhpcyBjaGlsZCBpdHNlbGYgd2lsbCBiZSBHQzplZCB3aGVuIHRoZSBwYXJlbnQgdXBkYXRlcyB0aGUgbmV4dCB0aW1lLlxuICAvL1xuICAvLyBOb3RlIHRoYXQgd2UgY2FuJ3QgY2xlYXIgY2hpbGQgb3Igc2libGluZyBwb2ludGVycyB5ZXQuXG4gIC8vIFRoZXkncmUgbmVlZGVkIGZvciBwYXNzaXZlIGVmZmVjdHMgYW5kIGZvciBmaW5kRE9NTm9kZS5cbiAgLy8gV2UgZGVmZXIgdGhvc2UgZmllbGRzLCBhbmQgYWxsIG90aGVyIGNsZWFudXAsIHRvIHRoZSBwYXNzaXZlIHBoYXNlIChzZWUgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMpLlxuICAvL1xuICAvLyBEb24ndCByZXNldCB0aGUgYWx0ZXJuYXRlIHlldCwgZWl0aGVyLiBXZSBuZWVkIHRoYXQgc28gd2UgY2FuIGRldGFjaCB0aGVcbiAgLy8gYWx0ZXJuYXRlJ3MgZmllbGRzIGluIHRoZSBwYXNzaXZlIHBoYXNlLiBDbGVhcmluZyB0aGUgcmV0dXJuIHBvaW50ZXIgaXNcbiAgLy8gc3VmZmljaWVudCBmb3IgZmluZERPTU5vZGUgc2VtYW50aWNzLlxuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUucmV0dXJuID0gbnVsbDtcbiAgfVxuXG4gIGZpYmVyLnJldHVybiA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGZpYmVyKSB7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGZpYmVyLmFsdGVybmF0ZSA9IG51bGw7XG4gICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoYWx0ZXJuYXRlKTtcbiAgfSAvLyBDbGVhciBjeWNsaWNhbCBGaWJlciBmaWVsZHMuIFRoaXMgbGV2ZWwgYWxvbmUgaXMgZGVzaWduZWQgdG8gcm91Z2hseVxuICAvLyBhcHByb3hpbWF0ZSB0aGUgcGxhbm5lZCBGaWJlciByZWZhY3Rvci4gSW4gdGhhdCB3b3JsZCwgYHNldFN0YXRlYCB3aWxsIGJlXG4gIC8vIGJvdW5kIHRvIGEgc3BlY2lhbCBcImluc3RhbmNlXCIgb2JqZWN0IGluc3RlYWQgb2YgYSBGaWJlci4gVGhlIEluc3RhbmNlXG4gIC8vIG9iamVjdCB3aWxsIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBmaWVsZHMuIEl0IHdpbGwgb25seSBiZSBjb25uZWN0ZWQgdG9cbiAgLy8gdGhlIGZpYmVyIHRyZWUgdmlhIGEgc2luZ2xlIGxpbmsgYXQgdGhlIHJvb3QuIFNvIGlmIHRoaXMgbGV2ZWwgYWxvbmUgaXNcbiAgLy8gc3VmZmljaWVudCB0byBmaXggbWVtb3J5IGlzc3VlcywgdGhhdCBib2RlcyB3ZWxsIGZvciBvdXIgcGxhbnMuXG5cblxuICBmaWJlci5jaGlsZCA9IG51bGw7XG4gIGZpYmVyLmRlbGV0aW9ucyA9IG51bGw7XG4gIGZpYmVyLnNpYmxpbmcgPSBudWxsOyAvLyBUaGUgYHN0YXRlTm9kZWAgaXMgY3ljbGljYWwgYmVjYXVzZSBvbiBob3N0IG5vZGVzIGl0IHBvaW50cyB0byB0aGUgaG9zdFxuICAvLyB0cmVlLCB3aGljaCBoYXMgaXRzIG93biBwb2ludGVycyB0byBjaGlsZHJlbiwgcGFyZW50cywgYW5kIHNpYmxpbmdzLlxuICAvLyBUaGUgb3RoZXIgaG9zdCBub2RlcyBhbHNvIHBvaW50IGJhY2sgdG8gZmliZXJzLCBzbyB3ZSBzaG91bGQgZGV0YWNoIHRoYXRcbiAgLy8gb25lLCB0b28uXG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoaG9zdEluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICBkZXRhY2hEZWxldGVkSW5zdGFuY2UoaG9zdEluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdTb3VyY2UgPSBudWxsO1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgfSAvLyBUaGVvcmV0aWNhbGx5LCBub3RoaW5nIGluIGhlcmUgc2hvdWxkIGJlIG5lY2Vzc2FyeSwgYmVjYXVzZSB3ZSBhbHJlYWR5XG4gIC8vIGRpc2Nvbm5lY3RlZCB0aGUgZmliZXIgZnJvbSB0aGUgdHJlZS4gU28gZXZlbiBpZiBzb21ldGhpbmcgbGVha3MgdGhpc1xuICAvLyBwYXJ0aWN1bGFyIGZpYmVyLCBpdCB3b24ndCBsZWFrIGFueXRoaW5nIGVsc2UuXG5cblxuICBmaWJlci5yZXR1cm4gPSBudWxsO1xuICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgZmliZXIubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7IC8vIFRPRE86IE1vdmUgdG8gYGNvbW1pdFBhc3NpdmVVbm1vdW50SW5zaWRlRGVsZXRlZFRyZWVPbkZpYmVyYCBpbnN0ZWFkLlxuXG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFBhcmVudEZpYmVyKGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgIGlmIChpc0hvc3RQYXJlbnQocGFyZW50KSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyAnICsgJ2luIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbn1cblxuZnVuY3Rpb24gaXNIb3N0UGFyZW50KGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgZmliZXIudGFnID09PSBIb3N0Um9vdCB8fCAoZmliZXIudGFnID09PSBIb3N0SG9pc3RhYmxlICkgfHwgKGZpYmVyLnRhZyA9PT0gSG9zdFNpbmdsZXRvbiApIHx8IGZpYmVyLnRhZyA9PT0gSG9zdFBvcnRhbDtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFNpYmxpbmcoZmliZXIpIHtcbiAgLy8gV2UncmUgZ29pbmcgdG8gc2VhcmNoIGZvcndhcmQgaW50byB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGEgc2libGluZyBob3N0XG4gIC8vIG5vZGUuIFVuZm9ydHVuYXRlbHksIGlmIG11bHRpcGxlIGluc2VydGlvbnMgYXJlIGRvbmUgaW4gYSByb3cgd2UgaGF2ZSB0b1xuICAvLyBzZWFyY2ggcGFzdCB0aGVtLiBUaGlzIGxlYWRzIHRvIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgdGhlIG5leHQgc2libGluZy5cbiAgLy8gVE9ETzogRmluZCBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBkbyB0aGlzLlxuICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gIHNpYmxpbmdzOiB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLCBsZXQncyB0cnkgdGhlIG5leHQgc2libGluZy5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgaXNIb3N0UGFyZW50KG5vZGUucmV0dXJuKSkge1xuICAgICAgICAvLyBJZiB3ZSBwb3Agb3V0IG9mIHRoZSByb290IG9yIGhpdCB0aGUgcGFyZW50IHRoZSBmaWJlciB3ZSBhcmUgdGhlXG4gICAgICAgIC8vIGxhc3Qgc2libGluZy5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG5cbiAgICB3aGlsZSAobm9kZS50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgbm9kZS50YWcgIT09IEhvc3RUZXh0ICYmIChub2RlLnRhZyAhPT0gSG9zdFNpbmdsZXRvbikgJiYgbm9kZS50YWcgIT09IERlaHlkcmF0ZWRGcmFnbWVudCkge1xuICAgICAgLy8gSWYgaXQgaXMgbm90IGhvc3Qgbm9kZSBhbmQsIHdlIG1pZ2h0IGhhdmUgYSBob3N0IG5vZGUgaW5zaWRlIGl0LlxuICAgICAgLy8gVHJ5IHRvIHNlYXJjaCBkb3duIHVudGlsIHdlIGZpbmQgb25lLlxuICAgICAgaWYgKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpIHtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY2hpbGQsIHRyeSB0aGUgc2libGluZ3MgaW5zdGVhZC5cbiAgICAgIC8vIFdlIGFsc28gc2tpcCBwb3J0YWxzIGJlY2F1c2UgdGhleSBhcmUgbm90IHBhcnQgb2YgdGhpcyBob3N0IHRyZWUuXG5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgPT09IG51bGwgfHwgbm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgfVxuICAgIH0gLy8gQ2hlY2sgaWYgdGhpcyBob3N0IG5vZGUgaXMgc3RhYmxlIG9yIGFib3V0IHRvIGJlIHBsYWNlZC5cblxuXG4gICAgaWYgKCEobm9kZS5mbGFncyAmIFBsYWNlbWVudCkpIHtcbiAgICAgIC8vIEZvdW5kIGl0IVxuICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQbGFjZW1lbnQoZmluaXNoZWRXb3JrKSB7XG5cbiAge1xuICAgIGlmIChmaW5pc2hlZFdvcmsudGFnID09PSBIb3N0U2luZ2xldG9uKSB7XG4gICAgICAvLyBTaW5nbGV0b25zIGFyZSBhbHJlYWR5IGluIHRoZSBIb3N0IGFuZCBkb24ndCBuZWVkIHRvIGJlIHBsYWNlZFxuICAgICAgLy8gU2luY2UgdGhleSBvcGVyYXRlIHNvbWV3aGF0IGxpa2UgUG9ydGFscyB0aG91Z2ggdGhlaXIgY2hpbGRyZW4gd2lsbFxuICAgICAgLy8gaGF2ZSBQbGFjZW1lbnQgYW5kIHdpbGwgZ2V0IHBsYWNlZCBpbnNpZGUgdGhlbVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSAvLyBSZWN1cnNpdmVseSBpbnNlcnQgYWxsIGhvc3Qgbm9kZXMgaW50byB0aGUgcGFyZW50LlxuXG5cbiAgdmFyIHBhcmVudEZpYmVyID0gZ2V0SG9zdFBhcmVudEZpYmVyKGZpbmlzaGVkV29yayk7XG5cbiAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIHZhciBiZWZvcmUgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspOyAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gICAgICAgICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuXG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGZpbmlzaGVkV29yaywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIEZhbGwgdGhyb3VnaFxuXG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfcGFyZW50ID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChwYXJlbnRGaWJlci5mbGFncyAmIENvbnRlbnRSZXNldCkge1xuICAgICAgICAgIC8vIFJlc2V0IHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIHBhcmVudCBiZWZvcmUgZG9pbmcgYW55IGluc2VydGlvbnNcbiAgICAgICAgICByZXNldFRleHRDb250ZW50KF9wYXJlbnQpOyAvLyBDbGVhciBDb250ZW50UmVzZXQgZnJvbSB0aGUgZWZmZWN0IHRhZ1xuXG4gICAgICAgICAgcGFyZW50RmliZXIuZmxhZ3MgJj0gfkNvbnRlbnRSZXNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTsgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAgICAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG5cblxuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoZmluaXNoZWRXb3JrLCBfYmVmb3JlLCBfcGFyZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wYXJlbnQyID0gcGFyZW50RmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgdmFyIF9iZWZvcmUyID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcblxuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKGZpbmlzaGVkV29yaywgX2JlZm9yZTIsIF9wYXJlbnQyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGhvc3QgcGFyZW50IGZpYmVyLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgJyArICdpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0KSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0SW5Db250YWluZXJCZWZvcmUocGFyZW50LCBzdGF0ZU5vZGUsIGJlZm9yZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZENoaWxkVG9Db250YWluZXIocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwgfHwgKHRhZyA9PT0gSG9zdFNpbmdsZXRvbiApKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgd2hpbGUgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihzaWJsaW5nLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0KSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGlsZChwYXJlbnQsIHN0YXRlTm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFBvcnRhbCB8fCAodGFnID09PSBIb3N0U2luZ2xldG9uICkpIDsgZWxzZSB7XG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGNoaWxkLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmc7XG5cbiAgICAgIHdoaWxlIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShzaWJsaW5nLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIFRoZXNlIGFyZSB0cmFja2VkIG9uIHRoZSBzdGFjayBhcyB3ZSByZWN1cnNpdmVseSB0cmF2ZXJzZSBhXG4vLyBkZWxldGVkIHN1YnRyZWUuXG4vLyBUT0RPOiBVcGRhdGUgdGhlc2UgZHVyaW5nIHRoZSB3aG9sZSBtdXRhdGlvbiBwaGFzZSwgbm90IGp1c3QgZHVyaW5nXG4vLyBhIGRlbGV0aW9uLlxuXG5cbnZhciBob3N0UGFyZW50ID0gbnVsbDtcbnZhciBob3N0UGFyZW50SXNDb250YWluZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gY29tbWl0RGVsZXRpb25FZmZlY3RzKHJvb3QsIHJldHVybkZpYmVyLCBkZWxldGVkRmliZXIpIHtcbiAge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGRlbGV0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgYWxsIGhvc3Qgbm9kZXMgZnJvbSB0aGUgcGFyZW50LCBkZXRhY2ggcmVmcywgY2xlYW5cbiAgICAvLyB1cCBtb3VudGVkIGxheW91dCBlZmZlY3RzLCBhbmQgY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudC5cbiAgICAvLyBXZSBvbmx5IG5lZWQgdG8gcmVtb3ZlIHRoZSB0b3Btb3N0IGhvc3QgY2hpbGQgaW4gZWFjaCBicmFuY2guIEJ1dCB0aGVuIHdlXG4gICAgLy8gc3RpbGwgbmVlZCB0byBrZWVwIHRyYXZlcnNpbmcgdG8gdW5tb3VudCBlZmZlY3RzLCByZWZzLCBhbmQgY1dVLiBUT0RPOiBXZVxuICAgIC8vIGNvdWxkIHNwbGl0IHRoaXMgaW50byB0d28gc2VwYXJhdGUgdHJhdmVyc2FscyBmdW5jdGlvbnMsIHdoZXJlIHRoZSBzZWNvbmRcbiAgICAvLyBvbmUgZG9lc24ndCBpbmNsdWRlIGFueSByZW1vdmVDaGlsZCBsb2dpYy4gVGhpcyBpcyBtYXliZSB0aGUgc2FtZVxuICAgIC8vIGZ1bmN0aW9uIGFzIFwiZGlzYXBwZWFyTGF5b3V0RWZmZWN0c1wiIChvciB3aGF0ZXZlciB0aGF0IHR1cm5zIGludG8gYWZ0ZXJcbiAgICAvLyB0aGUgbGF5b3V0IHBoYXNlIGlzIHJlZmFjdG9yZWQgdG8gdXNlIHJlY3Vyc2lvbikuXG4gICAgLy8gQmVmb3JlIHN0YXJ0aW5nLCBmaW5kIHRoZSBuZWFyZXN0IGhvc3QgcGFyZW50IG9uIHRoZSBzdGFjayBzbyB3ZSBrbm93XG4gICAgLy8gd2hpY2ggaW5zdGFuY2UvY29udGFpbmVyIHRvIHJlbW92ZSB0aGUgY2hpbGRyZW4gZnJvbS5cbiAgICAvLyBUT0RPOiBJbnN0ZWFkIG9mIHNlYXJjaGluZyB1cCB0aGUgZmliZXIgcmV0dXJuIHBhdGggb24gZXZlcnkgZGVsZXRpb24sIHdlXG4gICAgLy8gY2FuIHRyYWNrIHRoZSBuZWFyZXN0IGhvc3QgY29tcG9uZW50IG9uIHRoZSBKUyBzdGFjayBhcyB3ZSB0cmF2ZXJzZSB0aGVcbiAgICAvLyB0cmVlIGR1cmluZyB0aGUgY29tbWl0IHBoYXNlLiBUaGlzIHdvdWxkIG1ha2UgaW5zZXJ0aW9ucyBmYXN0ZXIsIHRvby5cbiAgICB2YXIgcGFyZW50ID0gcmV0dXJuRmliZXI7XG5cbiAgICBmaW5kUGFyZW50OiB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKHBhcmVudC50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaG9zdFBhcmVudCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSAnICsgJ2EgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG5cbiAgICBjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyKHJvb3QsIHJldHVybkZpYmVyLCBkZWxldGVkRmliZXIpO1xuICAgIGhvc3RQYXJlbnQgPSBudWxsO1xuICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGZhbHNlO1xuICB9XG5cbiAgZGV0YWNoRmliZXJNdXRhdGlvbihkZWxldGVkRmliZXIpO1xufVxuXG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKGZpbmlzaGVkUm9vdCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgcGFyZW50KSB7XG4gIC8vIFRPRE86IFVzZSBhIHN0YXRpYyBmbGFnIHRvIHNraXAgdHJlZXMgdGhhdCBkb24ndCBoYXZlIHVubW91bnQgZWZmZWN0c1xuICB2YXIgY2hpbGQgPSBwYXJlbnQuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFJvb3QsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGNoaWxkKTtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFJvb3QsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGRlbGV0ZWRGaWJlcikge1xuICBvbkNvbW1pdFVubW91bnQoZGVsZXRlZEZpYmVyKTsgLy8gVGhlIGNhc2VzIGluIHRoaXMgb3V0ZXIgc3dpdGNoIG1vZGlmeSB0aGUgc3RhY2sgYmVmb3JlIHRoZXkgdHJhdmVyc2VcbiAgLy8gaW50byB0aGVpciBzdWJ0cmVlLiBUaGVyZSBhcmUgc2ltcGxlciBjYXNlcyBpbiB0aGUgaW5uZXIgc3dpdGNoXG4gIC8vIHRoYXQgZG9uJ3QgbW9kaWZ5IHRoZSBzdGFjay5cblxuICBzd2l0Y2ggKGRlbGV0ZWRGaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIW9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHtcbiAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZWxldGVkRmliZXIpO1xuXG4gICAgICAgICAgaWYgKGRlbGV0ZWRGaWJlci5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICByZWxlYXNlUmVzb3VyY2UoZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSkge1xuICAgICAgICAgICAgdW5tb3VudEhvaXN0YWJsZShkZWxldGVkRmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICghb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbikge1xuICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHByZXZIb3N0UGFyZW50ID0gaG9zdFBhcmVudDtcbiAgICAgICAgICB2YXIgcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBob3N0UGFyZW50ID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKGZpbmlzaGVkUm9vdCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZGVsZXRlZEZpYmVyKTsgLy8gTm9ybWFsbHkgdGhpcyBpcyBjYWxsZWQgaW4gcGFzc2l2ZSB1bm1vdW50IGVmZmVjdCBwaGFzZSBob3dldmVyIHdpdGhcbiAgICAgICAgICAvLyBIb3N0U2luZ2xldG9uIHdlIHdhcm4gaWYgeW91IGFjcXVpcmUgb25lIHRoYXQgaXMgYWxyZWFkeSBhc3NvY2lhdGVkIHRvXG4gICAgICAgICAgLy8gYSBkaWZmZXJlbnQgZmliZXIuIFRvIGluY3JlYXNlIG91ciBjaGFuY2VzIG9mIGF2b2lkaW5nIHRoaXMsIHNwZWNpZmljYWxseVxuICAgICAgICAgIC8vIGlmIHlvdSBrZXllZCBhIEhvc3RTaW5nbGV0b24gc28gdGhlcmUgd2lsbCBiZSBhIGRlbGV0ZSBmb2xsb3dlZCBieSBhIFBsYWNlbWVudFxuICAgICAgICAgIC8vIHdlIHRyZWF0IGRldGFjaCBlYWdlcmx5IGhlcmVcblxuICAgICAgICAgIHJlbGVhc2VTaW5nbGV0b25JbnN0YW5jZShkZWxldGVkRmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICBob3N0UGFyZW50ID0gcHJldkhvc3RQYXJlbnQ7XG4gICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKCFvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB7XG4gICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICAgIH0gLy8gSW50ZW50aW9uYWwgZmFsbHRocm91Z2ggdG8gbmV4dCBicmFuY2hcblxuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIHJlbW92ZSB0aGUgbmVhcmVzdCBob3N0IGNoaWxkLiBTZXQgdGhlIGhvc3QgcGFyZW50XG4gICAgICAgIC8vIHRvIGBudWxsYCBvbiB0aGUgc3RhY2sgdG8gaW5kaWNhdGUgdGhhdCBuZXN0ZWQgY2hpbGRyZW4gZG9uJ3RcbiAgICAgICAgLy8gbmVlZCB0byBiZSByZW1vdmVkLlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9wcmV2SG9zdFBhcmVudCA9IGhvc3RQYXJlbnQ7XG4gICAgICAgICAgdmFyIF9wcmV2SG9zdFBhcmVudElzQ29udGFpbmVyID0gaG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBudWxsO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZWxldGVkRmliZXIpO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBfcHJldkhvc3RQYXJlbnQ7XG4gICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gX3ByZXZIb3N0UGFyZW50SXNDb250YWluZXI7XG5cbiAgICAgICAgICBpZiAoaG9zdFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gTm93IHRoYXQgYWxsIHRoZSBjaGlsZCBlZmZlY3RzIGhhdmUgdW5tb3VudGVkLCB3ZSBjYW4gcmVtb3ZlIHRoZVxuICAgICAgICAgICAgLy8gbm9kZSBmcm9tIHRoZSB0cmVlLlxuICAgICAgICAgICAgaWYgKGhvc3RQYXJlbnRJc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICByZW1vdmVDaGlsZEZyb21Db250YWluZXIoaG9zdFBhcmVudCwgZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZW1vdmVDaGlsZChob3N0UGFyZW50LCBkZWxldGVkRmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIERlaHlkcmF0ZWRGcmFnbWVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gRGVsZXRlIHRoZSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGJvdW5kYXJ5IGFuZCBhbGwgb2YgaXRzIGNvbnRlbnQuXG5cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGhvc3RQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3N0UGFyZW50SXNDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgY2xlYXJTdXNwZW5zZUJvdW5kYXJ5RnJvbUNvbnRhaW5lcihob3N0UGFyZW50LCBkZWxldGVkRmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNsZWFyU3VzcGVuc2VCb3VuZGFyeShob3N0UGFyZW50LCBkZWxldGVkRmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXaGVuIHdlIGdvIGludG8gYSBwb3J0YWwsIGl0IGJlY29tZXMgdGhlIHBhcmVudCB0byByZW1vdmUgZnJvbS5cbiAgICAgICAgICB2YXIgX3ByZXZIb3N0UGFyZW50MiA9IGhvc3RQYXJlbnQ7XG4gICAgICAgICAgdmFyIF9wcmV2SG9zdFBhcmVudElzQ29udGFpbmVyMiA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBob3N0UGFyZW50ID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhmaW5pc2hlZFJvb3QsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGRlbGV0ZWRGaWJlcik7XG4gICAgICAgICAgaG9zdFBhcmVudCA9IF9wcmV2SG9zdFBhcmVudDI7XG4gICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gX3ByZXZIb3N0UGFyZW50SXNDb250YWluZXIyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKCFvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB7XG4gICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZGVsZXRlZEZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgICAgICAgICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFnID0gZWZmZWN0LnRhZztcbiAgICAgICAgICAgICAgICB2YXIgaW5zdCA9IGVmZmVjdC5pbnN0O1xuICAgICAgICAgICAgICAgIHZhciBkZXN0cm95ID0gaW5zdC5kZXN0cm95O1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgaWYgKCh0YWcgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZXN0cm95KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRhZyAmIExheW91dCkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZChkZWxldGVkRmliZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZGVsZXRlZEZpYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZXN0cm95KTtcbiAgICAgICAgICAgICAgICAgICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihkZWxldGVkRmliZXIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGluc3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICBzYWZlbHlDYWxsRGVzdHJveShkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZWxldGVkRmliZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoIW9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHtcbiAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgaW5zdGFuY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZWxldGVkRmliZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZWxldGVkRmliZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG5cbiAgICAgICAgaWYgKGRlbGV0ZWRGaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIG9mZnNjcmVlbiBjb21wb25lbnQgaXMgaGlkZGVuLCB3ZSBhbHJlYWR5IHVubW91bnRlZCBpdC4gQmVmb3JlXG4gICAgICAgICAgLy8gZGVsZXRpbmcgdGhlIGNoaWxkcmVuLCB0cmFjayB0aGF0IGl0J3MgYWxyZWFkeSB1bm1vdW50ZWQgc28gdGhhdCB3ZVxuICAgICAgICAgIC8vIGRvbid0IGF0dGVtcHQgdG8gdW5tb3VudCB0aGUgZWZmZWN0cyBhZ2Fpbi5cbiAgICAgICAgICAvLyBUT0RPOiBJZiB0aGUgdHJlZSBpcyBoaWRkZW4sIGluIG1vc3QgY2FzZXMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gc2tpcFxuICAgICAgICAgIC8vIG92ZXIgdGhlIG5lc3RlZCBjaGlsZHJlbiBlbnRpcmVseS4gQW4gZXhjZXB0aW9uIGlzIHdlIGhhdmVuJ3QgeWV0IGZvdW5kXG4gICAgICAgICAgLy8gdGhlIHRvcG1vc3QgaG9zdCBub2RlIHRvIGRlbGV0ZSwgd2hpY2ggd2UgYWxyZWFkeSB0cmFjayBvbiB0aGUgc3RhY2suXG4gICAgICAgICAgLy8gQnV0IHRoZSBvdGhlciBjYXNlIGlzIHBvcnRhbHMsIHdoaWNoIG5lZWQgdG8gYmUgZGV0YWNoZWQgbm8gbWF0dGVyIGhvd1xuICAgICAgICAgIC8vIGRlZXBseSB0aGV5IGFyZSBuZXN0ZWQuIFdlIHNob3VsZCB1c2UgYSBzdWJ0cmVlIGZsYWcgdG8gdHJhY2sgd2hldGhlciBhXG4gICAgICAgICAgLy8gc3VidHJlZSBpbmNsdWRlcyBhIG5lc3RlZCBwb3J0YWwuXG4gICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHwgZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhmaW5pc2hlZFJvb3QsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGRlbGV0ZWRGaWJlcik7XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZWxldGVkRmliZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKGZpbmlzaGVkUm9vdCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZGVsZXRlZEZpYmVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlQ2FsbGJhY2soZmluaXNoZWRXb3JrKSB7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG5cbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5ld1N0YXRlID09PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBwcmV2U3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG5cbiAgICAgICAgICAgIHZhciBoeWRyYXRpb25DYWxsYmFja3MsIG9uSHlkcmF0ZWQ7IGlmIChlbmFibGVTdXNwZW5zZUNhbGxiYWNrKSA7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSZXRyeUNhY2hlKGZpbmlzaGVkV29yaykge1xuICAvLyBUT0RPOiBVbmlmeSB0aGUgaW50ZXJmYWNlIGZvciB0aGUgcmV0cnkgY2FjaGUgc28gd2UgZG9uJ3QgaGF2ZSB0byBzd2l0Y2hcbiAgLy8gb24gdGhlIHRhZyBsaWtlIHRoaXMuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAocmV0cnlDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldHJ5Q2FjaGU7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIF9yZXRyeUNhY2hlID0gaW5zdGFuY2UuX3JldHJ5Q2FjaGU7XG5cbiAgICAgICAgaWYgKF9yZXRyeUNhY2hlID09PSBudWxsKSB7XG4gICAgICAgICAgX3JldHJ5Q2FjaGUgPSBpbnN0YW5jZS5fcmV0cnlDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtTZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfcmV0cnlDYWNoZTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgU3VzcGVuc2UgaGFuZGxlciB0YWcgKFwiICsgZmluaXNoZWRXb3JrLnRhZyArIFwiKS4gVGhpcyBpcyBhIFwiICsgJ2J1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRhY2hPZmZzY3JlZW5JbnN0YW5jZShpbnN0YW5jZSkge1xuICB2YXIgZmliZXIgPSBpbnN0YW5jZS5fY3VycmVudDtcblxuICBpZiAoZmliZXIgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbGxpbmcgT2Zmc2NyZWVuLmRldGFjaCBiZWZvcmUgaW5zdGFuY2UgaGFuZGxlIGhhcyBiZWVuIHNldC4nKTtcbiAgfVxuXG4gIGlmICgoaW5zdGFuY2UuX3BlbmRpbmdWaXNpYmlsaXR5ICYgT2Zmc2NyZWVuRGV0YWNoZWQpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAvLyBUaGUgaW5zdGFuY2UgaXMgYWxyZWFkeSBkZXRhY2hlZCwgdGhpcyBpcyBhIG5vb3AuXG4gICAgcmV0dXJuO1xuICB9IC8vIFRPRE86IFRoZXJlIGlzIGFuIG9wcG9ydHVuaXR5IHRvIG9wdGltaXNlIHRoaXMgYnkgbm90IGVudGVyaW5nIGNvbW1pdCBwaGFzZVxuICAvLyBhbmQgdW5tb3VudGluZyBlZmZlY3RzIGRpcmVjdGx5LlxuXG5cbiAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIGluc3RhbmNlLl9wZW5kaW5nVmlzaWJpbGl0eSB8PSBPZmZzY3JlZW5EZXRhY2hlZDtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lKTtcbiAgfVxufVxuZnVuY3Rpb24gYXR0YWNoT2Zmc2NyZWVuSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgdmFyIGZpYmVyID0gaW5zdGFuY2UuX2N1cnJlbnQ7XG5cbiAgaWYgKGZpYmVyID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYWxsaW5nIE9mZnNjcmVlbi5kZXRhY2ggYmVmb3JlIGluc3RhbmNlIGhhbmRsZSBoYXMgYmVlbiBzZXQuJyk7XG4gIH1cblxuICBpZiAoKGluc3RhbmNlLl9wZW5kaW5nVmlzaWJpbGl0eSAmIE9mZnNjcmVlbkRldGFjaGVkKSA9PT0gTm9GbGFncyQxKSB7XG4gICAgLy8gVGhlIGluc3RhbmNlIGlzIGFscmVhZHkgYXR0YWNoZWQsIHRoaXMgaXMgYSBub29wLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBpbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJj0gfk9mZnNjcmVlbkRldGFjaGVkO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCB3YWtlYWJsZXMpIHtcbiAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgdGhlbiBpdCB3aWxsIGhhdmUgYSBzZXQgb2Ygd2FrZWFibGVzLlxuICAvLyBGb3IgZWFjaCB3YWtlYWJsZSwgYXR0YWNoIGEgbGlzdGVuZXIgc28gdGhhdCB3aGVuIGl0IHJlc29sdmVzLCBSZWFjdFxuICAvLyBhdHRlbXB0cyB0byByZS1yZW5kZXIgdGhlIGJvdW5kYXJ5IGluIHRoZSBwcmltYXJ5IChwcmUtdGltZW91dCkgc3RhdGUuXG4gIHZhciByZXRyeUNhY2hlID0gZ2V0UmV0cnlDYWNoZShmaW5pc2hlZFdvcmspO1xuICB3YWtlYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAod2FrZWFibGUpIHtcbiAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSBib3VuZGFyeSBmaWJlciB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG4gICAgdmFyIHJldHJ5ID0gcmVzb2x2ZVJldHJ5V2FrZWFibGUuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHdha2VhYmxlKTtcblxuICAgIGlmICghcmV0cnlDYWNoZS5oYXMod2FrZWFibGUpKSB7XG4gICAgICByZXRyeUNhY2hlLmFkZCh3YWtlYWJsZSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgICAgICAgaWYgKGluUHJvZ3Jlc3NMYW5lcyAhPT0gbnVsbCAmJiBpblByb2dyZXNzUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIHdvcmsgc3RpbGwsIGFzc29jaWF0ZSB0aGUgb3JpZ2luYWwgdXBkYXRlcnMgd2l0aCBpdC5cbiAgICAgICAgICAgIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMoaW5Qcm9ncmVzc1Jvb3QsIGluUHJvZ3Jlc3NMYW5lcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdFeHBlY3RlZCBmaW5pc2hlZCByb290IGFuZCBsYW5lcyB0byBiZSBzZXQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdha2VhYmxlLnRoZW4ocmV0cnksIHJldHJ5KTtcbiAgICB9XG4gIH0pO1xufSAvLyBUaGlzIGZ1bmN0aW9uIGRldGVjdHMgd2hlbiBhIFN1c3BlbnNlIGJvdW5kYXJ5IGdvZXMgZnJvbSB2aXNpYmxlIHRvIGhpZGRlbi5cbmZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzKSB7XG4gIGluUHJvZ3Jlc3NMYW5lcyA9IGNvbW1pdHRlZExhbmVzO1xuICBpblByb2dyZXNzUm9vdCA9IHJvb3Q7XG4gIHNldEN1cnJlbnRGaWJlcihmaW5pc2hlZFdvcmspO1xuICBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpbmlzaGVkV29yaywgcm9vdCk7XG4gIHNldEN1cnJlbnRGaWJlcihmaW5pc2hlZFdvcmspO1xuICBpblByb2dyZXNzTGFuZXMgPSBudWxsO1xuICBpblByb2dyZXNzUm9vdCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgcGFyZW50RmliZXIsIGxhbmVzKSB7XG4gIC8vIERlbGV0aW9ucyBlZmZlY3RzIGNhbiBiZSBzY2hlZHVsZWQgb24gYW55IGZpYmVyIHR5cGUuIFRoZXkgbmVlZCB0byBoYXBwZW5cbiAgLy8gYmVmb3JlIHRoZSBjaGlsZHJlbiBlZmZlY3RzIGhhZSBmaXJlZC5cbiAgdmFyIGRlbGV0aW9ucyA9IHBhcmVudEZpYmVyLmRlbGV0aW9ucztcblxuICBpZiAoZGVsZXRpb25zICE9PSBudWxsKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZFRvRGVsZXRlID0gZGVsZXRpb25zW2ldO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb21taXREZWxldGlvbkVmZmVjdHMocm9vdCwgcGFyZW50RmliZXIsIGNoaWxkVG9EZWxldGUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY2hpbGRUb0RlbGV0ZSwgcGFyZW50RmliZXIsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcHJldkRlYnVnRmliZXIgPSBnZXRDdXJyZW50RmliZXIoKTtcblxuICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgTXV0YXRpb25NYXNrKSB7XG4gICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihjaGlsZCk7XG4gICAgICBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGNoaWxkLCByb290KTtcbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG4gIH1cblxuICBzZXRDdXJyZW50RmliZXIocHJldkRlYnVnRmliZXIpO1xufVxuXG52YXIgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBudWxsO1xuXG5mdW5jdGlvbiBjb21taXRNdXRhdGlvbkVmZmVjdHNPbkZpYmVyKGZpbmlzaGVkV29yaywgcm9vdCwgbGFuZXMpIHtcbiAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7IC8vIFRoZSBlZmZlY3QgZmxhZyBzaG91bGQgYmUgY2hlY2tlZCAqYWZ0ZXIqIHdlIHJlZmluZSB0aGUgdHlwZSBvZiBmaWJlcixcbiAgLy8gYmVjYXVzZSB0aGUgZmliZXIgdGFnIGlzIG1vcmUgc3BlY2lmaWMuIEFuIGV4Y2VwdGlvbiBpcyBhbnkgZmxhZyByZWxhdGVkXG4gIC8vIHRvIHJlY29uY2lsaWF0aW9uLCBiZWNhdXNlIHRob3NlIGNhbiBiZSBzZXQgb24gYWxsIGZpYmVyIHR5cGVzLlxuXG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChJbnNlcnRpb24gfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KEluc2VydGlvbiB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfSAvLyBMYXlvdXQgZWZmZWN0cyBhcmUgZGVzdHJveWVkIGR1cmluZyB0aGUgbXV0YXRpb24gcGhhc2Ugc28gdGhhdCBhbGxcbiAgICAgICAgICAvLyBkZXN0cm95IGZ1bmN0aW9ucyBmb3IgYWxsIGZpYmVycyBhcmUgY2FsbGVkIGJlZm9yZSBhbnkgY3JlYXRlIGZ1bmN0aW9ucy5cbiAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgICAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgb3ZlcnJpZGUgYSByZWYgc2V0XG4gICAgICAgICAgLy8gYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQgZHVyaW5nIHRoZSBzYW1lIGNvbW1pdC5cblxuXG4gICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmbGFncyAmIENhbGxiYWNrICYmIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbikge1xuICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgZGVmZXJIaWRkZW5DYWxsYmFja3ModXBkYXRlUXVldWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIC8vIFdlIGNhc3QgYmVjYXVzZSB3ZSBhbHdheXMgc2V0IHRoZSByb290IGF0IHRoZSBSZWFjdCByb290IGFuZCBzbyBpdCBjYW5ub3QgYmVcbiAgICAgICAgICAvLyBudWxsIHdoaWxlIHdlIGFyZSBwcm9jZXNzaW5nIG11dGF0aW9uIGVmZmVjdHNcbiAgICAgICAgICB2YXIgaG9pc3RhYmxlUm9vdCA9IGN1cnJlbnRIb2lzdGFibGVSb290O1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcblxuICAgICAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50UmVzb3VyY2UgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcbiAgICAgICAgICAgIHZhciBuZXdSZXNvdXJjZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBXZSBhcmUgbW91bnRpbmcgYSBuZXcgSG9zdEhvaXN0YWJsZSBGaWJlci4gV2UgZm9yayB0aGUgbW91bnRcbiAgICAgICAgICAgICAgLy8gYmVoYXZpb3IgYmFzZWQgb24gd2hldGhlciB0aGlzIGluc3RhbmNlIGlzIGEgSG9pc3RhYmxlIEluc3RhbmNlXG4gICAgICAgICAgICAgIC8vIG9yIGEgSG9pc3RhYmxlIFJlc291cmNlXG4gICAgICAgICAgICAgIGlmIChuZXdSZXNvdXJjZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gaHlkcmF0ZUhvaXN0YWJsZShob2lzdGFibGVSb290LCBmaW5pc2hlZFdvcmsudHlwZSwgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG1vdW50SG9pc3RhYmxlKGhvaXN0YWJsZVJvb3QsIGZpbmlzaGVkV29yay50eXBlLCBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IGFjcXVpcmVSZXNvdXJjZShob2lzdGFibGVSb290LCBuZXdSZXNvdXJjZSwgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZXNvdXJjZSAhPT0gbmV3UmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgLy8gV2UgYXJlIG1vdmluZyB0byBvciBmcm9tIEhvaXN0YWJsZSBSZXNvdXJjZSwgb3IgYmV0d2VlbiBkaWZmZXJlbnQgSG9pc3RhYmxlIFJlc291cmNlc1xuICAgICAgICAgICAgICBpZiAoY3VycmVudFJlc291cmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICB1bm1vdW50SG9pc3RhYmxlKGN1cnJlbnQuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVsZWFzZVJlc291cmNlKGN1cnJlbnRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAobmV3UmVzb3VyY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBtb3VudEhvaXN0YWJsZShob2lzdGFibGVSb290LCBmaW5pc2hlZFdvcmsudHlwZSwgZmluaXNoZWRXb3JrLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWNxdWlyZVJlc291cmNlKGhvaXN0YWJsZVJvb3QsIG5ld1Jlc291cmNlLCBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3UmVzb3VyY2UgPT09IG51bGwgJiYgZmluaXNoZWRXb3JrLnN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhbiB1cGRhdGUgb24gYSBIb2lzdGFibGUgZWxlbWVudFxuICAgICAgICAgICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbW1pdFVwZGF0ZShmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLCB1cGRhdGVQYXlsb2FkLCBmaW5pc2hlZFdvcmsudHlwZSwgY3VycmVudC5tZW1vaXplZFByb3BzLCBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcywgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBGYWxsIHRocm91Z2hcblxuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0U2luZ2xldG9uOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICB2YXIgcHJldmlvdXNXb3JrID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgaWYgKHByZXZpb3VzV29yayA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgc2luZ2xldG9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgdmFyIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIFRoaXMgd2FzIGEgbmV3IG1vdW50LCB3ZSBuZWVkIHRvIGNsZWFyIGFuZCBzZXQgaW5pdGlhbCBwcm9wZXJ0aWVzXG5cbiAgICAgICAgICAgICAgY2xlYXJTaW5nbGV0b24oc2luZ2xldG9uKTtcbiAgICAgICAgICAgICAgYWNxdWlyZVNpbmdsZXRvbkluc3RhbmNlKGZpbmlzaGVkV29yay50eXBlLCBwcm9wcywgc2luZ2xldG9uLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBGYWxsIHRocm91Z2hcblxuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUT0RPOiBDb250ZW50UmVzZXQgZ2V0cyBjbGVhcmVkIGJ5IHRoZSBjaGlsZHJlbiBkdXJpbmcgdGhlIGNvbW1pdFxuICAgICAgICAgIC8vIHBoYXNlLiBUaGlzIGlzIGEgcmVmYWN0b3IgaGF6YXJkIGJlY2F1c2UgaXQgbWVhbnMgd2UgbXVzdCByZWFkXG4gICAgICAgICAgLy8gZmxhZ3MgdGhlIGZsYWdzIGFmdGVyIGBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHNgIGhhcyBhbHJlYWR5IHJ1bjtcbiAgICAgICAgICAvLyB0aGUgb3JkZXIgbWF0dGVycy4gV2Ugc2hvdWxkIHJlZmFjdG9yIHNvIHRoYXQgQ29udGVudFJlc2V0IGRvZXMgbm90XG4gICAgICAgICAgLy8gcmVseSBvbiBtdXRhdGluZyB0aGUgZmxhZyBkdXJpbmcgY29tbWl0LiBMaWtlIGJ5IHNldHRpbmcgYSBmbGFnXG4gICAgICAgICAgLy8gZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UgaW5zdGVhZC5cbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXNldFRleHRDb250ZW50KGluc3RhbmNlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgICBpZiAoX2luc3RhbmNlMiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIENvbW1pdCB0aGUgd29yayBwcmVwYXJlZCBlYXJsaWVyLlxuICAgICAgICAgICAgICB2YXIgbmV3UHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wczsgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgICAgICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBuZXdQcm9wcztcbiAgICAgICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTsgLy8gVE9ETzogVHlwZSB0aGUgdXBkYXRlUXVldWUgdG8gYmUgc3BlY2lmaWMgdG8gaG9zdCBjb21wb25lbnRzLlxuXG4gICAgICAgICAgICAgIHZhciBfdXBkYXRlUGF5bG9hZCA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbW1pdFVwZGF0ZShfaW5zdGFuY2UyLCBfdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcblxuICAgICAgICBpZiAoZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgc2hvdWxkIGhhdmUgYSB0ZXh0IG5vZGUgaW5pdGlhbGl6ZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5ICcgKyAnY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICB2YXIgbmV3VGV4dCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzOyAvLyBGb3IgaHlkcmF0aW9uIHdlIHJldXNlIHRoZSB1cGRhdGUgcGF0aCBidXQgd2UgdHJlYXQgdGhlIG9sZFByb3BzXG4gICAgICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICAgICAgdmFyIG9sZFRleHQgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3VGV4dDtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHByZXBhcmVUb0NvbW1pdEhvaXN0YWJsZXMoKTtcbiAgICAgICAgICB2YXIgcHJldmlvdXNIb2lzdGFibGVSb290ID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBnZXRIb2lzdGFibGVSb290KHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gcHJldmlvdXNIb2lzdGFibGVSb290O1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIHByZXZSb290U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICAgICAgaWYgKHByZXZSb290U3RhdGUuaXNEZWh5ZHJhdGVkKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcHJldmlvdXNIb2lzdGFibGVSb290ID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBnZXRIb2lzdGFibGVSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gX3ByZXZpb3VzSG9pc3RhYmxlUm9vdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7IC8vIFRPRE86IFdlIHNob3VsZCBtYXJrIGEgZmxhZyBvbiB0aGUgU3VzcGVuc2UgZmliZXIgaXRzZWxmLCByYXRoZXIgdGhhblxuICAgICAgICAvLyByZWx5aW5nIG9uIHRoZSBPZmZzY3JlZW4gZmliZXIgaGF2aW5nIGEgZmxhZyBhbHNvIGJlaW5nIG1hcmtlZC4gVGhlXG4gICAgICAgIC8vIHJlYXNvbiBpcyB0aGF0IHRoaXMgb2Zmc2NyZWVuIGZpYmVyIG1pZ2h0IG5vdCBiZSBwYXJ0IG9mIHRoZSB3b3JrLWluLVxuICAgICAgICAvLyBwcm9ncmVzcyB0cmVlISBJdCBjb3VsZCBoYXZlIGJlZW4gcmV1c2VkIGZyb20gYSBwcmV2aW91cyByZW5kZXIuIFRoaXNcbiAgICAgICAgLy8gZG9lc24ndCBsZWFkIHRvIGluY29ycmVjdCBiZWhhdmlvciBiZWNhdXNlIHdlIGRvbid0IHJlbHkgb24gdGhlIGZsYWdcbiAgICAgICAgLy8gY2hlY2sgYWxvbmU7IHdlIGFsc28gY29tcGFyZSB0aGUgc3RhdGVzIGV4cGxpY2l0bHkgYmVsb3cuIEJ1dCBmb3JcbiAgICAgICAgLy8gbW9kZWxpbmcgcHVycG9zZXMsIHdlIF9zaG91bGRfIGJlIGFibGUgdG8gcmVseSBvbiB0aGUgZmxhZyBjaGVjayBhbG9uZS5cbiAgICAgICAgLy8gU28gdGhpcyBpcyBhIGJpdCBmcmFnaWxlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBBbHNvLCBhbGwgdGhpcyBsb2dpYyBjb3VsZC9zaG91bGQgbW92ZSB0byB0aGUgcGFzc2l2ZSBwaGFzZSBzbyBpdFxuICAgICAgICAvLyBkb2Vzbid0IGJsb2NrIHBhaW50LlxuXG4gICAgICAgIHZhciBvZmZzY3JlZW5GaWJlciA9IGZpbmlzaGVkV29yay5jaGlsZDtcblxuICAgICAgICBpZiAob2Zmc2NyZWVuRmliZXIuZmxhZ3MgJiBWaXNpYmlsaXR5KSB7XG4gICAgICAgICAgLy8gVGhyb3R0bGUgdGhlIGFwcGVhcmFuY2UgYW5kIGRpc2FwcGVhcmFuY2Ugb2YgU3VzcGVuc2UgZmFsbGJhY2tzLlxuICAgICAgICAgIHZhciBpc1Nob3dpbmdGYWxsYmFjayA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuICAgICAgICAgIHZhciB3YXNTaG93aW5nRmFsbGJhY2sgPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChpc1Nob3dpbmdGYWxsYmFjayAhPT0gd2FzU2hvd2luZ0ZhbGxiYWNrKSB7XG4gICAgICAgICAgICAgIC8vIEEgZmFsbGJhY2sgaXMgZWl0aGVyIGFwcGVhcmluZyBvciBkaXNhcHBlYXJpbmcuXG4gICAgICAgICAgICAgIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21taXRTdXNwZW5zZUNhbGxiYWNrKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByZXRyeVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgaWYgKHJldHJ5UXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgcmV0cnlRdWV1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICB2YXIgaXNIaWRkZW4gPSBuZXdTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgdmFyIHdhc0hpZGRlbiA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgLy8gQmVmb3JlIGNvbW1pdHRpbmcgdGhlIGNoaWxkcmVuLCB0cmFjayBvbiB0aGUgc3RhY2sgd2hldGhlciB0aGlzXG4gICAgICAgICAgLy8gb2Zmc2NyZWVuIHN1YnRyZWUgd2FzIGFscmVhZHkgaGlkZGVuLCBzbyB0aGF0IHdlIGRvbid0IHVubW91bnQgdGhlXG4gICAgICAgICAgLy8gZWZmZWN0cyBhZ2Fpbi5cbiAgICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHwgaXNIaWRkZW47XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8IHdhc0hpZGRlbjtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIHZhciBvZmZzY3JlZW5JbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFRPRE86IEFkZCBleHBsaWNpdCBlZmZlY3QgZmxhZyB0byBzZXQgX2N1cnJlbnQuXG5cbiAgICAgICAgb2Zmc2NyZWVuSW5zdGFuY2UuX2N1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIE9mZnNjcmVlbiBzdG9yZXMgcGVuZGluZyBjaGFuZ2VzIHRvIHZpc2liaWxpdHkgaW4gYF9wZW5kaW5nVmlzaWJpbGl0eWAuIFRoaXMgaXNcbiAgICAgICAgLy8gdG8gc3VwcG9ydCBiYXRjaGluZyBvZiBgYXR0YWNoYCBhbmQgYGRldGFjaGAgY2FsbHMuXG5cbiAgICAgICAgb2Zmc2NyZWVuSW5zdGFuY2UuX3Zpc2liaWxpdHkgJj0gfk9mZnNjcmVlbkRldGFjaGVkO1xuICAgICAgICBvZmZzY3JlZW5JbnN0YW5jZS5fdmlzaWJpbGl0eSB8PSBvZmZzY3JlZW5JbnN0YW5jZS5fcGVuZGluZ1Zpc2liaWxpdHkgJiBPZmZzY3JlZW5EZXRhY2hlZDtcblxuICAgICAgICBpZiAoZmxhZ3MgJiBWaXNpYmlsaXR5KSB7XG4gICAgICAgICAgLy8gVHJhY2sgdGhlIGN1cnJlbnQgc3RhdGUgb24gdGhlIE9mZnNjcmVlbiBpbnN0YW5jZSBzbyB3ZSBjYW5cbiAgICAgICAgICAvLyByZWFkIGl0IGR1cmluZyBhbiBldmVudFxuICAgICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgICAgb2Zmc2NyZWVuSW5zdGFuY2UuX3Zpc2liaWxpdHkgJj0gfk9mZnNjcmVlblZpc2libGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9mZnNjcmVlbkluc3RhbmNlLl92aXNpYmlsaXR5IHw9IE9mZnNjcmVlblZpc2libGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgICB2YXIgaXNVcGRhdGUgPSBjdXJyZW50ICE9PSBudWxsO1xuICAgICAgICAgICAgdmFyIHdhc0hpZGRlbkJ5QW5jZXN0b3JPZmZzY3JlZW4gPSBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gfHwgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjsgLy8gT25seSB0cmlnZ2VyIGRpc2FwcGVyIGxheW91dCBlZmZlY3RzIGlmOlxuICAgICAgICAgICAgLy8gICAtIFRoaXMgaXMgYW4gdXBkYXRlLCBub3QgZmlyc3QgbW91bnQuXG4gICAgICAgICAgICAvLyAgIC0gVGhpcyBPZmZzY3JlZW4gd2FzIG5vdCBoaWRkZW4gYmVmb3JlLlxuICAgICAgICAgICAgLy8gICAtIEFuY2VzdG9yIE9mZnNjcmVlbiB3YXMgbm90IGhpZGRlbiBpbiBwcmV2aW91cyBjb21taXQuXG5cbiAgICAgICAgICAgIGlmIChpc1VwZGF0ZSAmJiAhd2FzSGlkZGVuICYmICF3YXNIaWRkZW5CeUFuY2VzdG9yT2Zmc2NyZWVuKSB7XG4gICAgICAgICAgICAgIGlmICgoZmluaXNoZWRXb3JrLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgICAgIC8vIERpc2FwcGVhciB0aGUgbGF5b3V0IGVmZmVjdHMgb2YgYWxsIHRoZSBjaGlsZHJlblxuICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIE9mZnNjcmVlbiB3aXRoIG1hbnVhbCBtb2RlIG1hbmFnZXMgdmlzaWJpbGl0eSBtYW51YWxseS5cblxuXG4gICAgICAgICAgaWYgKCFpc09mZnNjcmVlbk1hbnVhbChmaW5pc2hlZFdvcmspKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBUaGlzIG5lZWRzIHRvIHJ1biB3aGVuZXZlciB0aGVyZSdzIGFuIGluc2VydGlvbiBvciB1cGRhdGVcbiAgICAgICAgICAgIC8vIGluc2lkZSBhIGhpZGRlbiBPZmZzY3JlZW4gdHJlZS5cbiAgICAgICAgICAgIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKGZpbmlzaGVkV29yaywgaXNIaWRkZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUT0RPOiBNb3ZlIHRvIHBhc3NpdmUgcGhhc2VcblxuXG4gICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIHZhciBvZmZzY3JlZW5RdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgIGlmIChvZmZzY3JlZW5RdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIF9yZXRyeVF1ZXVlID0gb2Zmc2NyZWVuUXVldWUucmV0cnlRdWV1ZTtcblxuICAgICAgICAgICAgaWYgKF9yZXRyeVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIG9mZnNjcmVlblF1ZXVlLnJldHJ5UXVldWUgPSBudWxsO1xuICAgICAgICAgICAgICBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgX3JldHJ5UXVldWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIHZhciBfcmV0cnlRdWV1ZTIgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICBpZiAoX3JldHJ5UXVldWUyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuICAgICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIF9yZXRyeVF1ZXVlMik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICAvLyBQbGFjZW1lbnQgZWZmZWN0cyAoaW5zZXJ0aW9ucywgcmVvcmRlcnMpIGNhbiBiZSBzY2hlZHVsZWQgb24gYW55IGZpYmVyXG4gIC8vIHR5cGUuIFRoZXkgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHRoZSBjaGlsZHJlbiBlZmZlY3RzIGhhdmUgZmlyZWQsIGJ1dFxuICAvLyBiZWZvcmUgdGhlIGVmZmVjdHMgb24gdGhpcyBmaWJlciBoYXZlIGZpcmVkLlxuICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG5cbiAgaWYgKGZsYWdzICYgUGxhY2VtZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbW1pdFBsYWNlbWVudChmaW5pc2hlZFdvcmspO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICB9IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cbiAgICAvLyBUT0RPOiBmaW5kRE9NTm9kZSBkb2Vzbid0IHJlbHkgb24gdGhpcyBhbnkgbW9yZSBidXQgaXNNb3VudGVkIGRvZXNcbiAgICAvLyBhbmQgaXNNb3VudGVkIGlzIGRlcHJlY2F0ZWQgYW55d2F5IHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGtpbGwgdGhpcy5cblxuXG4gICAgZmluaXNoZWRXb3JrLmZsYWdzICY9IH5QbGFjZW1lbnQ7XG4gIH1cblxuICBpZiAoZmxhZ3MgJiBIeWRyYXRpbmcpIHtcbiAgICBmaW5pc2hlZFdvcmsuZmxhZ3MgJj0gfkh5ZHJhdGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgcm9vdCwgY29tbWl0dGVkTGFuZXMpIHtcbiAgaW5Qcm9ncmVzc0xhbmVzID0gY29tbWl0dGVkTGFuZXM7XG4gIGluUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuICBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKHJvb3QsIGN1cnJlbnQsIGZpbmlzaGVkV29yayk7XG4gIGluUHJvZ3Jlc3NMYW5lcyA9IG51bGw7XG4gIGluUHJvZ3Jlc3NSb290ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMocm9vdCwgcGFyZW50RmliZXIsIGxhbmVzKSB7XG4gIHZhciBwcmV2RGVidWdGaWJlciA9IGdldEN1cnJlbnRGaWJlcigpO1xuXG4gIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBMYXlvdXRNYXNrKSB7XG4gICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihjaGlsZCk7XG4gICAgICB2YXIgY3VycmVudCA9IGNoaWxkLmFsdGVybmF0ZTtcbiAgICAgIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIocm9vdCwgY3VycmVudCwgY2hpbGQpO1xuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIHNldEN1cnJlbnRGaWJlcihwcmV2RGVidWdGaWJlcik7XG59XG5cbmZ1bmN0aW9uIGRpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE8gKE9mZnNjcmVlbikgQ2hlY2s6IGZsYWdzICYgTGF5b3V0U3RhdGljXG4gICAgICAgIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KExheW91dCwgZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KExheW91dCwgZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETyAoT2Zmc2NyZWVuKSBDaGVjazogZmxhZ3MgJiBSZWZTdGF0aWNcbiAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0SG9pc3RhYmxlOlxuICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE8gKE9mZnNjcmVlbikgQ2hlY2s6IGZsYWdzICYgUmVmU3RhdGljXG4gICAgICAgIHNhZmVseURldGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBUT0RPIChPZmZzY3JlZW4pIENoZWNrOiBmbGFncyAmIFJlZlN0YXRpY1xuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgdmFyIGlzSGlkZGVuID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgaWYgKGlzSGlkZGVuKSA7IGVsc2Uge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gIC8vIFRPRE8gKE9mZnNjcmVlbikgQ2hlY2s6IGZsYWdzICYgKFJlZlN0YXRpYyB8IExheW91dFN0YXRpYylcbiAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgZGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhjaGlsZCk7XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIGZpbmlzaGVkV29yaywgLy8gVGhpcyBmdW5jdGlvbiB2aXNpdHMgYm90aCBuZXdseSBmaW5pc2hlZCB3b3JrIGFuZCBub2RlcyB0aGF0IHdlcmUgcmUtdXNlZFxuLy8gZnJvbSBhIHByZXZpb3VzbHkgY29tbWl0dGVkIHRyZWUuIFdlIGNhbm5vdCBjaGVjayBub24tc3RhdGljIGZsYWdzIGlmIHRoZVxuLy8gbm9kZSB3YXMgcmV1c2VkLlxuaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cykge1xuICAvLyBUdXJuIG9uIGxheW91dCBlZmZlY3RzIGluIGEgdHJlZSB0aGF0IHByZXZpb3VzbHkgZGlzYXBwZWFyZWQuXG4gIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcblxuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmssIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMpOyAvLyBUT0RPOiBDaGVjayBmbGFncyAmIExheW91dFN0YXRpY1xuXG4gICAgICAgIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgTGF5b3V0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrLCBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzKTsgLy8gVE9ETzogQ2hlY2sgZm9yIExheW91dFN0YXRpYyBmbGFnXG5cbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDb21taXQgYW55IGNhbGxiYWNrcyB0aGF0IHdvdWxkIGhhdmUgZmlyZWQgd2hpbGUgdGhlIGNvbXBvbmVudFxuICAgICAgICAvLyB3YXMgaGlkZGVuLlxuXG5cbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbW1pdEhpZGRlbkNhbGxiYWNrcyh1cGRhdGVRdWV1ZSwgaW5zdGFuY2UpO1xuICAgICAgICB9IC8vIElmIHRoaXMgaXMgbmV3bHkgZmluaXNoZWQgd29yaywgY2hlY2sgZm9yIHNldFN0YXRlIGNhbGxiYWNrc1xuXG5cbiAgICAgICAgaWYgKGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiYgZmxhZ3MgJiBDYWxsYmFjaykge1xuICAgICAgICAgIGNvbW1pdENsYXNzQ2FsbGJhY2tzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIH0gLy8gVE9ETzogQ2hlY2sgZmxhZ3MgJiBSZWZTdGF0aWNcblxuXG4gICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAvLyBVbmxpa2UgY29tbWl0TGF5b3V0RWZmZWN0c09uRmliZXIsIHdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIEhvc3RSb290XG4gICAgLy8gYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIG9ubHkgdmlzaXRzIG5vZGVzIHRoYXQgYXJlIGluc2lkZSBhblxuICAgIC8vIE9mZnNjcmVlbiBmaWJlci5cbiAgICAvLyBjYXNlIEhvc3RSb290OiB7XG4gICAgLy8gIC4uLlxuICAgIC8vIH1cblxuICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrLCBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzKTsgLy8gUmVuZGVyZXJzIG1heSBzY2hlZHVsZSB3b3JrIHRvIGJlIGRvbmUgYWZ0ZXIgaG9zdCBjb21wb25lbnRzIGFyZSBtb3VudGVkXG4gICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgbWF5IHNjaGVkdWxlIGF1dG8tZm9jdXMgZm9yIGlucHV0cyBhbmQgZm9ybSBjb250cm9scykuXG4gICAgICAgIC8vIFRoZXNlIGVmZmVjdHMgc2hvdWxkIG9ubHkgYmUgY29tbWl0dGVkIHdoZW4gY29tcG9uZW50cyBhcmUgZmlyc3QgbW91bnRlZCxcbiAgICAgICAgLy8gYWthIHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudC9hbHRlcm5hdGUuXG5cbiAgICAgICAgaWYgKGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiYgY3VycmVudCA9PT0gbnVsbCAmJiBmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIGNvbW1pdEhvc3RDb21wb25lbnRNb3VudChmaW5pc2hlZFdvcmspO1xuICAgICAgICB9IC8vIFRPRE86IENoZWNrIGZsYWdzICYgUmVmXG5cblxuICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrLCBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzKTsgLy8gVE9ETzogRmlndXJlIG91dCBob3cgUHJvZmlsZXIgdXBkYXRlcyBzaG91bGQgd29yayB3aXRoIE9mZnNjcmVlblxuXG4gICAgICAgIGlmIChpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgY29tbWl0UHJvZmlsZXJVcGRhdGUoZmluaXNoZWRXb3JrLCBjdXJyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaywgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyk7IC8vIFRPRE86IEZpZ3VyZSBvdXQgaG93IFN1c3BlbnNlIGh5ZHJhdGlvbiBjYWxsYmFja3Mgc2hvdWxkIHdvcmtcbiAgICAgICAgLy8gd2l0aCBPZmZzY3JlZW4uXG5cbiAgICAgICAgaWYgKGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiYgZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgb2Zmc2NyZWVuU3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgdmFyIGlzSGlkZGVuID0gb2Zmc2NyZWVuU3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgaWYgKGlzSGlkZGVuKSA7IGVsc2Uge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmssIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMpO1xuICAgICAgICB9IC8vIFRPRE86IENoZWNrIGZsYWdzICYgUmVmXG5cblxuICAgICAgICBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrLCBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIHBhcmVudEZpYmVyLCBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdmlzaXRzIGJvdGggbmV3bHkgZmluaXNoZWQgd29yayBhbmQgbm9kZXMgdGhhdCB3ZXJlIHJlLXVzZWRcbiAgLy8gZnJvbSBhIHByZXZpb3VzbHkgY29tbWl0dGVkIHRyZWUuIFdlIGNhbm5vdCBjaGVjayBub24tc3RhdGljIGZsYWdzIGlmIHRoZVxuICAvLyBub2RlIHdhcyByZXVzZWQuXG4gIHZhciBjaGlsZFNob3VsZEluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgPSBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBMYXlvdXRNYXNrKSAhPT0gTm9GbGFncyQxOyAvLyBUT0RPIChPZmZzY3JlZW4pIENoZWNrOiBmbGFncyAmIChSZWZTdGF0aWMgfCBMYXlvdXRTdGF0aWMpXG5cbiAgdmFyIHByZXZEZWJ1Z0ZpYmVyID0gZ2V0Q3VycmVudEZpYmVyKCk7XG4gIHZhciBjaGlsZCA9IHBhcmVudEZpYmVyLmNoaWxkO1xuXG4gIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gY2hpbGQuYWx0ZXJuYXRlO1xuICAgIHJlYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIGNoaWxkLCBjaGlsZFNob3VsZEluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMpO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxuXG4gIHNldEN1cnJlbnRGaWJlcihwcmV2RGVidWdGaWJlcik7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgaG9va0ZsYWdzKSB7XG4gIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICBzdGFydFBhc3NpdmVFZmZlY3RUaW1lcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICB9XG5cbiAgICByZWNvcmRQYXNzaXZlRWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRPZmZzY3JlZW5QYXNzaXZlTW91bnRFZmZlY3RzKGN1cnJlbnQsIGZpbmlzaGVkV29yaywgaW5zdGFuY2UpIHtcbiAge1xuICAgIHZhciBwcmV2aW91c0NhY2hlID0gbnVsbDtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICE9PSBudWxsKSB7XG4gICAgICBwcmV2aW91c0NhY2hlID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sO1xuICAgIH1cblxuICAgIHZhciBuZXh0Q2FjaGUgPSBudWxsO1xuXG4gICAgaWYgKGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmIGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAhPT0gbnVsbCkge1xuICAgICAgbmV4dENhY2hlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2w7XG4gICAgfSAvLyBSZXRhaW4vcmVsZWFzZSB0aGUgY2FjaGUgdXNlZCBmb3IgcGVuZGluZyAoc3VzcGVuZGVkKSBub2Rlcy5cbiAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IHJlYWNoZWQgaW4gdGhlIG5vbi1zdXNwZW5kZWQvdmlzaWJsZSBjYXNlOlxuICAgIC8vIHdoZW4gdGhlIGNvbnRlbnQgaXMgc3VzcGVuZGVkL2hpZGRlbiwgdGhlIHJldGFpbi9yZWxlYXNlIG9jY3Vyc1xuICAgIC8vIHZpYSB0aGUgcGFyZW50IFN1c3BlbnNlIGNvbXBvbmVudCAoc2VlIGNhc2UgYWJvdmUpLlxuXG5cbiAgICBpZiAobmV4dENhY2hlICE9PSBwcmV2aW91c0NhY2hlKSB7XG4gICAgICBpZiAobmV4dENhY2hlICE9IG51bGwpIHtcbiAgICAgICAgcmV0YWluQ2FjaGUobmV4dENhY2hlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZpb3VzQ2FjaGUgIT0gbnVsbCkge1xuICAgICAgICByZWxlYXNlQ2FjaGUocHJldmlvdXNDYWNoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdENhY2hlUGFzc2l2ZU1vdW50RWZmZWN0KGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICB7XG4gICAgdmFyIHByZXZpb3VzQ2FjaGUgPSBudWxsO1xuXG4gICAgaWYgKGZpbmlzaGVkV29yay5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgIHByZXZpb3VzQ2FjaGUgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGU7XG4gICAgfVxuXG4gICAgdmFyIG5leHRDYWNoZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlLmNhY2hlOyAvLyBSZXRhaW4vcmVsZWFzZSB0aGUgY2FjaGUuIEluIHRoZW9yeSB0aGUgY2FjaGUgY29tcG9uZW50XG4gICAgLy8gY291bGQgYmUgXCJib3Jyb3dpbmdcIiBhIGNhY2hlIGluc3RhbmNlIG93bmVkIGJ5IHNvbWUgcGFyZW50LFxuICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgY291bGQgYXZvaWQgcmV0YWluaW5nL3JlbGVhc2luZy4gQnV0IGl0XG4gICAgLy8gaXMgbm9uLXRyaXZpYWwgdG8gZGV0ZXJtaW5lIHdoZW4gdGhhdCBpcyB0aGUgY2FzZSwgc28gd2VcbiAgICAvLyBhbHdheXMgcmV0YWluL3JlbGVhc2UuXG5cbiAgICBpZiAobmV4dENhY2hlICE9PSBwcmV2aW91c0NhY2hlKSB7XG4gICAgICByZXRhaW5DYWNoZShuZXh0Q2FjaGUpO1xuXG4gICAgICBpZiAocHJldmlvdXNDYWNoZSAhPSBudWxsKSB7XG4gICAgICAgIHJlbGVhc2VDYWNoZShwcmV2aW91c0NhY2hlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGFzc2l2ZU1vdW50RWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucykge1xuICBzZXRDdXJyZW50RmliZXIoZmluaXNoZWRXb3JrKTtcbiAgY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlcihyb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucyk7XG4gIHJlc2V0Q3VycmVudEZpYmVyKCk7XG59XG5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKHJvb3QsIHBhcmVudEZpYmVyLCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMpIHtcbiAgdmFyIHByZXZEZWJ1Z0ZpYmVyID0gZ2V0Q3VycmVudEZpYmVyKCk7XG5cbiAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIFBhc3NpdmVNYXNrKSB7XG4gICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihjaGlsZCk7XG4gICAgICBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKHJvb3QsIGNoaWxkLCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMpO1xuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIHNldEN1cnJlbnRGaWJlcihwcmV2RGVidWdGaWJlcik7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucykge1xuICAvLyBXaGVuIHVwZGF0aW5nIHRoaXMgZnVuY3Rpb24sIGFsc28gdXBkYXRlIHJlY29ubmVjdFBhc3NpdmVFZmZlY3RzLCB3aGljaCBkb2VzXG4gIC8vIG1vc3Qgb2YgdGhlIHNhbWUgdGhpbmdzIHdoZW4gYW4gb2Zmc2NyZWVuIHRyZWUgZ29lcyBmcm9tIGhpZGRlbiAtPiB2aXNpYmxlLFxuICAvLyBvciB3aGVuIHRvZ2dsaW5nIGVmZmVjdHMgaW5zaWRlIGEgaGlkZGVuIHRyZWUuXG4gIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcblxuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMpO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFBhc3NpdmUkMSkge1xuICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgUGFzc2l2ZSB8IEhhc0VmZmVjdCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMpO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFBhc3NpdmUkMSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBwcmV2aW91c0NhY2hlID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNDYWNoZSA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5leHRDYWNoZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlLmNhY2hlOyAvLyBSZXRhaW4vcmVsZWFzZSB0aGUgcm9vdCBjYWNoZS5cbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBvbiBpbml0aWFsIG1vdW50LCBwcmV2aW91c0NhY2hlIGFuZCBuZXh0Q2FjaGUgd2lsbCBiZSB0aGUgc2FtZVxuICAgICAgICAgICAgLy8gYW5kIHRoaXMgcmV0YWluIHdvbid0IG9jY3VyLiBUbyBjb3VudGVyIHRoaXMsIHdlIGluc3RlYWQgcmV0YWluIHRoZSBIb3N0Um9vdCdzXG4gICAgICAgICAgICAvLyBpbml0aWFsIGNhY2hlIHdoZW4gY3JlYXRpbmcgdGhlIHJvb3QgaXRzZWxmIChzZWUgY3JlYXRlRmliZXJSb290KCkgaW5cbiAgICAgICAgICAgIC8vIFJlYWN0RmliZXJSb290LmpzKS4gU3Vic2VxdWVudCB1cGRhdGVzIHRoYXQgY2hhbmdlIHRoZSBjYWNoZSBhcmUgcmVmbGVjdGVkXG4gICAgICAgICAgICAvLyBoZXJlLCBzdWNoIHRoYXQgcHJldmlvdXMvbmV4dCBjYWNoZXMgYXJlIHJldGFpbmVkIGNvcnJlY3RseS5cblxuICAgICAgICAgICAgaWYgKG5leHRDYWNoZSAhPT0gcHJldmlvdXNDYWNoZSkge1xuICAgICAgICAgICAgICByZXRhaW5DYWNoZShuZXh0Q2FjaGUpO1xuXG4gICAgICAgICAgICAgIGlmIChwcmV2aW91c0NhY2hlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZWxlYXNlQ2FjaGUocHJldmlvdXNDYWNoZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IFBhc3MgYGN1cnJlbnRgIGFzIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb25cbiAgICAgICAgdmFyIF9pbnN0YW5jZTMgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB2YXIgbmV4dFN0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHZhciBpc0hpZGRlbiA9IG5leHRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBpZiAoX2luc3RhbmNlMy5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAvLyBUaGUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGNvbm5lY3RlZC4gVXBkYXRlIHRoZW0uXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMsIGNvbW1pdHRlZFRyYW5zaXRpb25zKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBkaXNjb25uZWN0ZWQuIFNpbmNlIHRoZSB0cmVlIGlzIGhpZGRlbixcbiAgICAgICAgICAgICAgLy8gZG9uJ3QgY29ubmVjdCB0aGVtLiBUaGlzIGFsc28gYXBwbGllcyB0byB0aGUgaW5pdGlhbCByZW5kZXIuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBcIkF0b21pY1wiIGVmZmVjdHMgYXJlIG9uZXMgdGhhdCBuZWVkIHRvIGZpcmUgb24gZXZlcnkgY29tbWl0LFxuICAgICAgICAgICAgICAgIC8vIGV2ZW4gZHVyaW5nIHByZS1yZW5kZXJpbmcuIEFuIGV4YW1wbGUgaXMgdXBkYXRpbmcgdGhlIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIC8vIGNvdW50IG9uIGNhY2hlIGluc3RhbmNlcy5cbiAgICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBMZWdhY3kgTW9kZTogRmlyZSB0aGUgZWZmZWN0cyBldmVuIGlmIHRoZSB0cmVlIGlzIGhpZGRlbi5cbiAgICAgICAgICAgICAgX2luc3RhbmNlMy5fdmlzaWJpbGl0eSB8PSBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZDtcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRyZWUgaXMgdmlzaWJsZVxuICAgICAgICAgIGlmIChfaW5zdGFuY2UzLl92aXNpYmlsaXR5ICYgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIC8vIFRoZSBlZmZlY3RzIGFyZSBjdXJyZW50bHkgY29ubmVjdGVkLiBVcGRhdGUgdGhlbS5cbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGRpc2Nvbm5lY3RlZC4gUmVjb25uZWN0IHRoZW0sIHdoaWxlIGFsc29cbiAgICAgICAgICAgIC8vIGZpcmluZyBlZmZlY3RzIGluc2lkZSBuZXdseSBtb3VudGVkIHRyZWVzLiBUaGlzIGFsc28gYXBwbGllcyB0b1xuICAgICAgICAgICAgLy8gdGhlIGluaXRpYWwgcmVuZGVyLlxuICAgICAgICAgICAgX2luc3RhbmNlMy5fdmlzaWJpbGl0eSB8PSBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZDtcbiAgICAgICAgICAgIHZhciBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzID0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiBQYXNzaXZlTWFzaykgIT09IE5vRmxhZ3MkMTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMsIGNvbW1pdHRlZFRyYW5zaXRpb25zLCBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmxhZ3MgJiBQYXNzaXZlJDEpIHtcbiAgICAgICAgICB2YXIgX2N1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoX2N1cnJlbnQsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQ2FjaGVDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMpO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFBhc3NpdmUkMSkge1xuICAgICAgICAgIC8vIFRPRE86IFBhc3MgYGN1cnJlbnRgIGFzIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb25cbiAgICAgICAgICB2YXIgX2N1cnJlbnQyID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRDYWNoZVBhc3NpdmVNb3VudEVmZmVjdChfY3VycmVudDIsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgVHJhY2luZ01hcmtlckNvbXBvbmVudDpcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBwYXJlbnRGaWJlciwgY29tbWl0dGVkTGFuZXMsIGNvbW1pdHRlZFRyYW5zaXRpb25zLCBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdmlzaXRzIGJvdGggbmV3bHkgZmluaXNoZWQgd29yayBhbmQgbm9kZXMgdGhhdCB3ZXJlIHJlLXVzZWRcbiAgLy8gZnJvbSBhIHByZXZpb3VzbHkgY29tbWl0dGVkIHRyZWUuIFdlIGNhbm5vdCBjaGVjayBub24tc3RhdGljIGZsYWdzIGlmIHRoZVxuICAvLyBub2RlIHdhcyByZXVzZWQuXG4gIHZhciBjaGlsZFNob3VsZEluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgPSBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBQYXNzaXZlTWFzaykgIT09IE5vRmxhZ3MkMTsgLy8gVE9ETyAoT2Zmc2NyZWVuKSBDaGVjazogZmxhZ3MgJiAoUmVmU3RhdGljIHwgTGF5b3V0U3RhdGljKVxuXG4gIHZhciBwcmV2RGVidWdGaWJlciA9IGdldEN1cnJlbnRGaWJlcigpO1xuICB2YXIgY2hpbGQgPSBwYXJlbnRGaWJlci5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICByZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFJvb3QsIGNoaWxkLCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMsIGNoaWxkU2hvdWxkSW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyk7XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG5cbiAgc2V0Q3VycmVudEZpYmVyKHByZXZEZWJ1Z0ZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucywgLy8gVGhpcyBmdW5jdGlvbiB2aXNpdHMgYm90aCBuZXdseSBmaW5pc2hlZCB3b3JrIGFuZCBub2RlcyB0aGF0IHdlcmUgcmUtdXNlZFxuLy8gZnJvbSBhIHByZXZpb3VzbHkgY29tbWl0dGVkIHRyZWUuIFdlIGNhbm5vdCBjaGVjayBub24tc3RhdGljIGZsYWdzIGlmIHRoZVxuLy8gbm9kZSB3YXMgcmV1c2VkLlxuaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cykge1xuICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG5cbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucywgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyk7IC8vIFRPRE86IENoZWNrIGZvciBQYXNzaXZlU3RhdGljIGZsYWdcblxuICAgICAgICBjb21taXRIb29rUGFzc2l2ZU1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmssIFBhc3NpdmUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAvLyBVbmxpa2UgY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlciwgd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgSG9zdFJvb3RcbiAgICAvLyBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gb25seSB2aXNpdHMgbm9kZXMgdGhhdCBhcmUgaW5zaWRlIGFuXG4gICAgLy8gT2Zmc2NyZWVuIGZpYmVyLlxuICAgIC8vIGNhc2UgSG9zdFJvb3Q6IHtcbiAgICAvLyAgLi4uXG4gICAgLy8gfVxuXG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTQgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB2YXIgbmV4dFN0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHZhciBpc0hpZGRlbiA9IG5leHRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBpZiAoX2luc3RhbmNlNC5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAvLyBUaGUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGNvbm5lY3RlZC4gVXBkYXRlIHRoZW0uXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucywgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBlZmZlY3RzIGFyZSBjdXJyZW50bHkgZGlzY29ubmVjdGVkLiBTaW5jZSB0aGUgdHJlZSBpcyBoaWRkZW4sXG4gICAgICAgICAgICAgIC8vIGRvbid0IGNvbm5lY3QgdGhlbS4gVGhpcyBhbHNvIGFwcGxpZXMgdG8gdGhlIGluaXRpYWwgcmVuZGVyLlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gXCJBdG9taWNcIiBlZmZlY3RzIGFyZSBvbmVzIHRoYXQgbmVlZCB0byBmaXJlIG9uIGV2ZXJ5IGNvbW1pdCxcbiAgICAgICAgICAgICAgICAvLyBldmVuIGR1cmluZyBwcmUtcmVuZGVyaW5nLiBBbiBleGFtcGxlIGlzIHVwZGF0aW5nIHRoZSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAvLyBjb3VudCBvbiBjYWNoZSBpbnN0YW5jZXMuXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gTGVnYWN5IE1vZGU6IEZpcmUgdGhlIGVmZmVjdHMgZXZlbiBpZiB0aGUgdHJlZSBpcyBoaWRkZW4uXG4gICAgICAgICAgICAgIF9pbnN0YW5jZTQuX3Zpc2liaWxpdHkgfD0gT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQ7XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMsIGNvbW1pdHRlZFRyYW5zaXRpb25zLCBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVHJlZSBpcyB2aXNpYmxlXG4gICAgICAgICAgLy8gU2luY2Ugd2UncmUgYWxyZWFkeSBpbnNpZGUgYSByZWNvbm5lY3RpbmcgdHJlZSwgaXQgZG9lc24ndCBtYXR0ZXJcbiAgICAgICAgICAvLyB3aGV0aGVyIHRoZSBlZmZlY3RzIGFyZSBjdXJyZW50bHkgY29ubmVjdGVkLiBJbiBlaXRoZXIgY2FzZSwgd2UnbGxcbiAgICAgICAgICAvLyBjb250aW51ZSB0cmF2ZXJzaW5nIHRoZSB0cmVlIGFuZCBmaXJpbmcgYWxsIHRoZSBlZmZlY3RzLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gV2UgZG8gbmVlZCB0byBzZXQgdGhlIFwiY29ubmVjdGVkXCIgZmxhZyBvbiB0aGUgaW5zdGFuY2UsIHRob3VnaC5cbiAgICAgICAgICBfaW5zdGFuY2U0Ll92aXNpYmlsaXR5IHw9IE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMsIGNvbW1pdHRlZFRyYW5zaXRpb25zLCBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmIGZsYWdzICYgUGFzc2l2ZSQxKSB7XG4gICAgICAgICAgLy8gVE9ETzogUGFzcyBgY3VycmVudGAgYXMgYXJndW1lbnQgdG8gdGhpcyBmdW5jdGlvblxuICAgICAgICAgIHZhciBfY3VycmVudDMgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoX2N1cnJlbnQzLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIENhY2hlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucywgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyk7XG5cbiAgICAgICAgaWYgKGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiYgZmxhZ3MgJiBQYXNzaXZlJDEpIHtcbiAgICAgICAgICAvLyBUT0RPOiBQYXNzIGBjdXJyZW50YCBhcyBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uXG4gICAgICAgICAgdmFyIF9jdXJyZW50NCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0Q2FjaGVQYXNzaXZlTW91bnRFZmZlY3QoX2N1cnJlbnQ0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucywgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBdG9taWNQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFJvb3QsIHBhcmVudEZpYmVyLCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMpIHtcbiAgLy8gXCJBdG9taWNcIiBlZmZlY3RzIGFyZSBvbmVzIHRoYXQgbmVlZCB0byBmaXJlIG9uIGV2ZXJ5IGNvbW1pdCwgZXZlbiBkdXJpbmdcbiAgLy8gcHJlLXJlbmRlcmluZy4gV2UgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdHJhdmVyc2luZyBhIGhpZGRlbiB0cmVlIHdob3NlXG4gIC8vIHJlZ3VsYXIgZWZmZWN0cyBhcmUgY3VycmVudGx5IGRpc2Nvbm5lY3RlZC5cbiAgdmFyIHByZXZEZWJ1Z0ZpYmVyID0gZ2V0Q3VycmVudEZpYmVyKCk7IC8vIFRPRE86IEFkZCBzcGVjaWFsIGZsYWcgZm9yIGF0b21pYyBlZmZlY3RzXG5cbiAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIFBhc3NpdmVNYXNrKSB7XG4gICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihjaGlsZCk7XG4gICAgICBjb21taXRBdG9taWNQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFJvb3QsIGNoaWxkKTtcbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG4gIH1cblxuICBzZXRDdXJyZW50RmliZXIocHJldkRlYnVnRmliZXIpO1xufVxuXG5mdW5jdGlvbiBjb21taXRBdG9taWNQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMsIGNvbW1pdHRlZFRyYW5zaXRpb25zKSB7XG4gIC8vIFwiQXRvbWljXCIgZWZmZWN0cyBhcmUgb25lcyB0aGF0IG5lZWQgdG8gZmlyZSBvbiBldmVyeSBjb21taXQsIGV2ZW4gZHVyaW5nXG4gIC8vIHByZS1yZW5kZXJpbmcuIFdlIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHRyYXZlcnNpbmcgYSBoaWRkZW4gdHJlZSB3aG9zZVxuICAvLyByZWd1bGFyIGVmZmVjdHMgYXJlIGN1cnJlbnRseSBkaXNjb25uZWN0ZWQuXG4gIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcblxuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcblxuICAgICAgICBpZiAoZmxhZ3MgJiBQYXNzaXZlJDEpIHtcbiAgICAgICAgICAvLyBUT0RPOiBQYXNzIGBjdXJyZW50YCBhcyBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uXG4gICAgICAgICAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoY3VycmVudCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBDYWNoZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcblxuICAgICAgICBpZiAoZmxhZ3MgJiBQYXNzaXZlJDEpIHtcbiAgICAgICAgICAvLyBUT0RPOiBQYXNzIGBjdXJyZW50YCBhcyBhcmd1bWVudCB0byB0aGlzIGZ1bmN0aW9uXG4gICAgICAgICAgdmFyIF9jdXJyZW50NSA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0Q2FjaGVQYXNzaXZlTW91bnRFZmZlY3QoX2N1cnJlbnQ1LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gIHNldEN1cnJlbnRGaWJlcihmaW5pc2hlZFdvcmspO1xuICBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIoZmluaXNoZWRXb3JrKTtcbiAgcmVzZXRDdXJyZW50RmliZXIoKTtcbn0gLy8gSWYgd2UncmUgaW5zaWRlIGEgYnJhbmQgbmV3IHRyZWUsIG9yIGEgdHJlZSB0aGF0IHdhcyBhbHJlYWR5IHZpc2libGUsIHRoZW4gd2Vcbi8vIHNob3VsZCBvbmx5IHN1c3BlbmQgaG9zdCBjb21wb25lbnRzIHRoYXQgaGF2ZSBhIFNob3VsZFN1c3BlbmRDb21taXQgZmxhZy5cbi8vIENvbXBvbmVudHMgd2l0aG91dCBpdCBoYXZlbid0IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY29tbWl0LCBzbyB3ZSBjYW4gc2tpcFxuLy8gb3ZlciB0aG9zZS5cbi8vXG4vLyBXaGVuIHdlIGVudGVyIGEgdHJlZSB0aGF0IGlzIGJlaW5nIHJldmVhbGVkIChnb2luZyBmcm9tIGhpZGRlbiAtPiB2aXNpYmxlKSxcbi8vIHdlIG5lZWQgdG8gc3VzcGVuZCBfYW55XyBjb21wb25lbnQgdGhhdCBfbWF5XyBzdXNwZW5kLiBFdmVuIGlmIHRoZXkncmVcbi8vIGFscmVhZHkgaW4gdGhlIFwiY3VycmVudFwiIHRyZWUuIEJlY2F1c2UgdGhlaXIgdmlzaWJpbGl0eSBoYXMgY2hhbmdlZCwgdGhlXG4vLyBicm93c2VyIG1heSBub3QgaGF2ZSBwcmVyZW5kZXJlZCB0aGVtIHlldC4gU28gd2UgY2hlY2sgdGhlIE1heVN1c3BlbmRDb21taXRcbi8vIGZsYWcgaW5zdGVhZC5cblxudmFyIHN1c3BlbnNleUNvbW1pdEZsYWcgPSBTaG91bGRTdXNwZW5kQ29tbWl0O1xuZnVuY3Rpb24gYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaW5pc2hlZFdvcmspIHtcbiAgYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIoZmluaXNoZWRXb3JrKTtcbn1cblxuZnVuY3Rpb24gcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KHBhcmVudEZpYmVyKSB7XG4gIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBzdXNwZW5zZXlDb21taXRGbGFnKSB7XG4gICAgdmFyIGNoaWxkID0gcGFyZW50RmliZXIuY2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXRPbkZpYmVyKGNoaWxkKTtcbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIoZmliZXIpIHtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RIb2lzdGFibGU6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG5cbiAgICAgICAgaWYgKGZpYmVyLmZsYWdzICYgc3VzcGVuc2V5Q29tbWl0RmxhZykge1xuICAgICAgICAgIGlmIChmaWJlci5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdXNwZW5kUmVzb3VyY2UoIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBzZXQgYnkgdmlzaXRpbmcgSG9zdFJvb3QgZmlyc3RcbiAgICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290LCBmaWJlci5tZW1vaXplZFN0YXRlLCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzSG9pc3RhYmxlUm9vdCA9IGN1cnJlbnRIb2lzdGFibGVSb290O1xuICAgICAgICAgIHZhciBjb250YWluZXIgPSBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IGdldEhvaXN0YWJsZVJvb3QoY29udGFpbmVyKTtcbiAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gcHJldmlvdXNIb2lzdGFibGVSb290O1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGlzSGlkZGVuID0gZmliZXIubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIDsgZWxzZSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICAgICAgdmFyIHdhc0hpZGRlbiA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKHdhc0hpZGRlbikge1xuICAgICAgICAgICAgLy8gVGhpcyB0cmVlIGlzIGJlaW5nIHJldmVhbGVkLiBWaXNpdCBhbGwgbmV3bHkgdmlzaWJsZSBzdXNwZW5zZXlcbiAgICAgICAgICAgIC8vIGluc3RhbmNlcywgZXZlbiBpZiB0aGV5J3JlIGluIHRoZSBjdXJyZW50IHRyZWUuXG4gICAgICAgICAgICB2YXIgcHJldkZsYWdzID0gc3VzcGVuc2V5Q29tbWl0RmxhZztcbiAgICAgICAgICAgIHN1c3BlbnNleUNvbW1pdEZsYWcgPSBNYXlTdXNwZW5kQ29tbWl0O1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgICAgICAgIHN1c3BlbnNleUNvbW1pdEZsYWcgPSBwcmV2RmxhZ3M7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRldGFjaEFsdGVybmF0ZVNpYmxpbmdzKHBhcmVudEZpYmVyKSB7XG4gIC8vIEEgZmliZXIgd2FzIGRlbGV0ZWQgZnJvbSB0aGlzIHBhcmVudCBmaWJlciwgYnV0IGl0J3Mgc3RpbGwgcGFydCBvZiB0aGVcbiAgLy8gcHJldmlvdXMgKGFsdGVybmF0ZSkgcGFyZW50IGZpYmVyJ3MgbGlzdCBvZiBjaGlsZHJlbi4gQmVjYXVzZSBjaGlsZHJlblxuICAvLyBhcmUgYSBsaW5rZWQgbGlzdCwgYW4gZWFybGllciBzaWJsaW5nIHRoYXQncyBzdGlsbCBhbGl2ZSB3aWxsIGJlXG4gIC8vIGNvbm5lY3RlZCB0byB0aGUgZGVsZXRlZCBmaWJlciB2aWEgaXRzIGBhbHRlcm5hdGVgOlxuICAvL1xuICAvLyAgIGxpdmUgZmliZXIgLS1hbHRlcm5hdGUtLT4gcHJldmlvdXMgbGl2ZSBmaWJlciAtLXNpYmxpbmctLT4gZGVsZXRlZFxuICAvLyAgIGZpYmVyXG4gIC8vXG4gIC8vIFdlIGNhbid0IGRpc2Nvbm5lY3QgYGFsdGVybmF0ZWAgb24gbm9kZXMgdGhhdCBoYXZlbid0IGJlZW4gZGVsZXRlZCB5ZXQsXG4gIC8vIGJ1dCB3ZSBjYW4gZGlzY29ubmVjdCB0aGUgYHNpYmxpbmdgIGFuZCBgY2hpbGRgIHBvaW50ZXJzLlxuICB2YXIgcHJldmlvdXNGaWJlciA9IHBhcmVudEZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAocHJldmlvdXNGaWJlciAhPT0gbnVsbCkge1xuICAgIHZhciBkZXRhY2hlZENoaWxkID0gcHJldmlvdXNGaWJlci5jaGlsZDtcblxuICAgIGlmIChkZXRhY2hlZENoaWxkICE9PSBudWxsKSB7XG4gICAgICBwcmV2aW91c0ZpYmVyLmNoaWxkID0gbnVsbDtcblxuICAgICAgZG8ge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgICAgdmFyIGRldGFjaGVkU2libGluZyA9IGRldGFjaGVkQ2hpbGQuc2libGluZzsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgICAgZGV0YWNoZWRDaGlsZC5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgZGV0YWNoZWRDaGlsZCA9IGRldGFjaGVkU2libGluZztcbiAgICAgIH0gd2hpbGUgKGRldGFjaGVkQ2hpbGQgIT09IG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRIb29rUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgaG9va0ZsYWdzKSB7XG4gIGlmIChzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaykpIHtcbiAgICBzdGFydFBhc3NpdmVFZmZlY3RUaW1lcigpO1xuICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yaywgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgcmVjb3JkUGFzc2l2ZUVmZmVjdER1cmF0aW9uKGZpbmlzaGVkV29yayk7XG4gIH0gZWxzZSB7XG4gICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KGhvb2tGbGFncywgZmluaXNoZWRXb3JrLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gIC8vIERlbGV0aW9ucyBlZmZlY3RzIGNhbiBiZSBzY2hlZHVsZWQgb24gYW55IGZpYmVyIHR5cGUuIFRoZXkgbmVlZCB0byBoYXBwZW5cbiAgLy8gYmVmb3JlIHRoZSBjaGlsZHJlbiBlZmZlY3RzIGhhdmUgZmlyZWQuXG4gIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG5cbiAgaWYgKChwYXJlbnRGaWJlci5mbGFncyAmIENoaWxkRGVsZXRpb24pICE9PSBOb0ZsYWdzJDEpIHtcbiAgICBpZiAoZGVsZXRpb25zICE9PSBudWxsKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGRlbGV0aW9uc1tpXTsgLy8gVE9ETzogQ29udmVydCB0aGlzIHRvIHVzZSByZWN1cnNpb25cblxuICAgICAgICBuZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9iZWdpbihjaGlsZFRvRGVsZXRlLCBwYXJlbnRGaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGV0YWNoQWx0ZXJuYXRlU2libGluZ3MocGFyZW50RmliZXIpO1xuICB9XG5cbiAgdmFyIHByZXZEZWJ1Z0ZpYmVyID0gZ2V0Q3VycmVudEZpYmVyKCk7IC8vIFRPRE86IFNwbGl0IFBhc3NpdmVNYXNrIGludG8gc2VwYXJhdGUgbWFza3MgZm9yIG1vdW50IGFuZCB1bm1vdW50P1xuXG4gIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBQYXNzaXZlTWFzaykge1xuICAgIHZhciBjaGlsZCA9IHBhcmVudEZpYmVyLmNoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoY2hpbGQpO1xuICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKGNoaWxkKTtcbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG4gIH1cblxuICBzZXRDdXJyZW50RmliZXIocHJldkRlYnVnRmliZXIpO1xufVxuXG5mdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIoZmluaXNoZWRXb3JrKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBQYXNzaXZlJDEpIHtcbiAgICAgICAgICBjb21taXRIb29rUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgUGFzc2l2ZSB8IEhhc0VmZmVjdCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICB2YXIgbmV4dFN0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHZhciBpc0hpZGRlbiA9IG5leHRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICBpZiAoaXNIaWRkZW4gJiYgaW5zdGFuY2UuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCAmJiAoIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgZG9uJ3QgdW5tb3VudCB3aGVuIGEgdHJlZSBzdXNwZW5kcy4gSW5cbiAgICAgICAgLy8gdGhlIGZ1dHVyZSB3ZSBtYXkgY2hhbmdlIHRoaXMgdG8gdW5tb3VudCBhZnRlciBhIGRlbGF5LlxuICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuID09PSBudWxsIHx8IGZpbmlzaGVkV29yay5yZXR1cm4udGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkpIHtcbiAgICAgICAgICAvLyBUaGUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGNvbm5lY3RlZC4gRGlzY29ubmVjdCB0aGVtLlxuICAgICAgICAgIC8vIFRPRE86IEFkZCBvcHRpb24gb3IgaGV1cmlzdGljIHRvIGRlbGF5IGJlZm9yZSBkaXNjb25uZWN0aW5nIHRoZVxuICAgICAgICAgIC8vIGVmZmVjdHMuIFRoZW4gaWYgdGhlIHRyZWUgcmVhcHBlYXJzIGJlZm9yZSB0aGUgZGVsYXkgaGFzIGVsYXBzZWQsIHdlXG4gICAgICAgICAgLy8gY2FuIHNraXAgdG9nZ2xpbmcgdGhlIGVmZmVjdHMgZW50aXJlbHkuXG4gICAgICAgICAgaW5zdGFuY2UuX3Zpc2liaWxpdHkgJj0gfk9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0cyhwYXJlbnRGaWJlcikge1xuICAvLyBEZWxldGlvbnMgZWZmZWN0cyBjYW4gYmUgc2NoZWR1bGVkIG9uIGFueSBmaWJlciB0eXBlLiBUaGV5IG5lZWQgdG8gaGFwcGVuXG4gIC8vIGJlZm9yZSB0aGUgY2hpbGRyZW4gZWZmZWN0cyBoYXZlIGZpcmVkLlxuICB2YXIgZGVsZXRpb25zID0gcGFyZW50RmliZXIuZGVsZXRpb25zO1xuXG4gIGlmICgocGFyZW50RmliZXIuZmxhZ3MgJiBDaGlsZERlbGV0aW9uKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgaWYgKGRlbGV0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07IC8vIFRPRE86IENvbnZlcnQgdGhpcyB0byB1c2UgcmVjdXJzaW9uXG5cbiAgICAgICAgbmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oY2hpbGRUb0RlbGV0ZSwgcGFyZW50RmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRldGFjaEFsdGVybmF0ZVNpYmxpbmdzKHBhcmVudEZpYmVyKTtcbiAgfVxuXG4gIHZhciBwcmV2RGVidWdGaWJlciA9IGdldEN1cnJlbnRGaWJlcigpOyAvLyBUT0RPOiBDaGVjayBQYXNzaXZlU3RhdGljIGZsYWdcblxuICB2YXIgY2hpbGQgPSBwYXJlbnRGaWJlci5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICBzZXRDdXJyZW50RmliZXIoY2hpbGQpO1xuICAgIGRpc2Nvbm5lY3RQYXNzaXZlRWZmZWN0KGNoaWxkKTtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cblxuICBzZXRDdXJyZW50RmliZXIocHJldkRlYnVnRmliZXIpO1xufVxuXG5mdW5jdGlvbiBkaXNjb25uZWN0UGFzc2l2ZUVmZmVjdChmaW5pc2hlZFdvcmspIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBDaGVjayBQYXNzaXZlU3RhdGljIGZsYWdcbiAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIFBhc3NpdmUpOyAvLyBXaGVuIGRpc2Nvbm5lY3RpbmcgcGFzc2l2ZSBlZmZlY3RzLCB3ZSBmaXJlIHRoZSBlZmZlY3RzIGluIHRoZSBzYW1lXG4gICAgICAgIC8vIG9yZGVyIGFzIGR1cmluZyBhIGRlbGV0aW9uZzogcGFyZW50IGJlZm9yZSBjaGlsZFxuXG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UuX3Zpc2liaWxpdHkgJiBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCkge1xuICAgICAgICAgIGluc3RhbmNlLl92aXNpYmlsaXR5ICY9IH5PZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZDtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9iZWdpbihkZWxldGVkU3VidHJlZVJvb3QsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0OyAvLyBEZWxldGlvbiBlZmZlY3RzIGZpcmUgaW4gcGFyZW50IC0+IGNoaWxkIG9yZGVyXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgZmliZXIgaGFzIGEgUGFzc2l2ZVN0YXRpYyBmbGFnXG5cbiAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50SW5zaWRlRGVsZXRlZFRyZWVPbkZpYmVyKGZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkOyAvLyBUT0RPOiBPbmx5IHRyYXZlcnNlIHN1YnRyZWUgaWYgaXQgaGFzIGEgUGFzc2l2ZVN0YXRpYyBmbGFnLlxuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBjaGlsZC5yZXR1cm4gPSBmaWJlcjtcbiAgICAgIG5leHRFZmZlY3QgPSBjaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9jb21wbGV0ZShkZWxldGVkU3VidHJlZVJvb3QpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2NvbXBsZXRlKGRlbGV0ZWRTdWJ0cmVlUm9vdCkge1xuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaWJlciA9IG5leHRFZmZlY3Q7XG4gICAgdmFyIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nO1xuICAgIHZhciByZXR1cm5GaWJlciA9IGZpYmVyLnJldHVybjsgLy8gUmVjdXJzaXZlbHkgdHJhdmVyc2UgdGhlIGVudGlyZSBkZWxldGVkIHRyZWUgYW5kIGNsZWFuIHVwIGZpYmVyIGZpZWxkcy5cbiAgICAvLyBUaGlzIGlzIG1vcmUgYWdncmVzc2l2ZSB0aGFuIGlkZWFsLCBhbmQgdGhlIGxvbmcgdGVybSBnb2FsIGlzIHRvIG9ubHlcbiAgICAvLyBoYXZlIHRvIGRldGFjaCB0aGUgZGVsZXRlZCB0cmVlIGF0IHRoZSByb290LlxuXG4gICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpO1xuXG4gICAgaWYgKGZpYmVyID09PSBkZWxldGVkU3VidHJlZVJvb3QpIHtcbiAgICAgIG5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBzaWJsaW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgbmV4dEVmZmVjdCA9IHNpYmxpbmc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV4dEVmZmVjdCA9IHJldHVybkZpYmVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVVbm1vdW50SW5zaWRlRGVsZXRlZFRyZWVPbkZpYmVyKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgc3dpdGNoIChjdXJyZW50LnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBQYXNzaXZlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgLy8gVE9ETzogcnVuIHBhc3NpdmUgdW5tb3VudCBlZmZlY3RzIHdoZW4gdW5tb3VudGluZyBhIHJvb3QuXG4gICAgLy8gQmVjYXVzZSBwYXNzaXZlIHVubW91bnQgZWZmZWN0cyBhcmUgbm90IGN1cnJlbnRseSBydW4sXG4gICAgLy8gdGhlIGNhY2hlIGluc3RhbmNlIG93bmVkIGJ5IHRoZSByb290IHdpbGwgbmV2ZXIgYmUgZnJlZWQuXG4gICAgLy8gV2hlbiBlZmZlY3RzIGFyZSBydW4sIHRoZSBjYWNoZSBzaG91bGQgYmUgZnJlZWQgaGVyZTpcbiAgICAvLyBjYXNlIEhvc3RSb290OiB7XG4gICAgLy8gICBpZiAoZW5hYmxlQ2FjaGUpIHtcbiAgICAvLyAgICAgY29uc3QgY2FjaGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGU7XG4gICAgLy8gICAgIHJlbGVhc2VDYWNoZShjYWNoZSk7XG4gICAgLy8gICB9XG4gICAgLy8gICBicmVhaztcbiAgICAvLyB9XG5cbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGNhY2hlID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sOyAvLyBSZXRhaW4vcmVsZWFzZSB0aGUgY2FjaGUgdXNlZCBmb3IgcGVuZGluZyAoc3VzcGVuZGVkKSBub2Rlcy5cbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgcmVhY2hlZCBpbiB0aGUgbm9uLXN1c3BlbmRlZC92aXNpYmxlIGNhc2U6XG4gICAgICAgICAgICAvLyB3aGVuIHRoZSBjb250ZW50IGlzIHN1c3BlbmRlZC9oaWRkZW4sIHRoZSByZXRhaW4vcmVsZWFzZSBvY2N1cnNcbiAgICAgICAgICAgIC8vIHZpYSB0aGUgcGFyZW50IFN1c3BlbnNlIGNvbXBvbmVudCAoc2VlIGNhc2UgYWJvdmUpLlxuXG4gICAgICAgICAgICBpZiAoY2FjaGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXRhaW5DYWNoZShjYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBDYWNoZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfY2FjaGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGU7XG4gICAgICAgICAgcmVsZWFzZUNhY2hlKF9jYWNoZSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VMYXlvdXRFZmZlY3RNb3VudEluREVWKGZpYmVyKSB7XG4gIHtcbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlLWNoZWNrIFN0cmljdEVmZmVjdHNNb2RlIGhlcmUuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZiB0aGF0IGNoZWNrIGhhcyBhbHJlYWR5IHBhc3NlZC5cbiAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmliZXIpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZmliZXIucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZmliZXIucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlUGFzc2l2ZUVmZmVjdE1vdW50SW5ERVYoZmliZXIpIHtcbiAge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmUtY2hlY2sgU3RyaWN0RWZmZWN0c01vZGUgaGVyZS5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIHRoYXQgY2hlY2sgaGFzIGFscmVhZHkgcGFzc2VkLlxuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoUGFzc2l2ZSB8IEhhc0VmZmVjdCwgZmliZXIpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZmliZXIucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlTGF5b3V0RWZmZWN0VW5tb3VudEluREVWKGZpYmVyKSB7XG4gIHtcbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlLWNoZWNrIFN0cmljdEVmZmVjdHNNb2RlIGhlcmUuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZiB0aGF0IGNoZWNrIGhhcyBhbHJlYWR5IHBhc3NlZC5cbiAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaWJlciwgZmliZXIucmV0dXJuKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoZmliZXIsIGZpYmVyLnJldHVybiwgaW5zdGFuY2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVBhc3NpdmVFZmZlY3RVbm1vdW50SW5ERVYoZmliZXIpIHtcbiAge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmUtY2hlY2sgU3RyaWN0RWZmZWN0c01vZGUgaGVyZS5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIHRoYXQgY2hlY2sgaGFzIGFscmVhZHkgcGFzc2VkLlxuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChQYXNzaXZlIHwgSGFzRWZmZWN0LCBmaWJlciwgZmliZXIucmV0dXJuKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDYWNoZVNpZ25hbCgpIHtcblxuICB2YXIgY2FjaGUgPSByZWFkQ29udGV4dChDYWNoZUNvbnRleHQpO1xuICByZXR1cm4gY2FjaGUuY29udHJvbGxlci5zaWduYWw7XG59XG5cbmZ1bmN0aW9uIGdldENhY2hlRm9yVHlwZShyZXNvdXJjZVR5cGUpIHtcblxuICB2YXIgY2FjaGUgPSByZWFkQ29udGV4dChDYWNoZUNvbnRleHQpO1xuICB2YXIgY2FjaGVGb3JUeXBlID0gY2FjaGUuZGF0YS5nZXQocmVzb3VyY2VUeXBlKTtcblxuICBpZiAoY2FjaGVGb3JUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZUZvclR5cGUgPSByZXNvdXJjZVR5cGUoKTtcbiAgICBjYWNoZS5kYXRhLnNldChyZXNvdXJjZVR5cGUsIGNhY2hlRm9yVHlwZSk7XG4gIH1cblxuICByZXR1cm4gY2FjaGVGb3JUeXBlO1xufVxuXG52YXIgRGVmYXVsdENhY2hlRGlzcGF0Y2hlciA9IHtcbiAgZ2V0Q2FjaGVTaWduYWw6IGdldENhY2hlU2lnbmFsLFxuICBnZXRDYWNoZUZvclR5cGU6IGdldENhY2hlRm9yVHlwZVxufTtcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgc3ltYm9sRm9yKCdzZWxlY3Rvci5jb21wb25lbnQnKTtcbiAgc3ltYm9sRm9yKCdzZWxlY3Rvci5oYXNfcHNldWRvX2NsYXNzJyk7XG4gIHN5bWJvbEZvcignc2VsZWN0b3Iucm9sZScpO1xuICBzeW1ib2xGb3IoJ3NlbGVjdG9yLnRlc3RfaWQnKTtcbiAgc3ltYm9sRm9yKCdzZWxlY3Rvci50ZXh0Jyk7XG59XG52YXIgY29tbWl0SG9va3MgPSBbXTtcbmZ1bmN0aW9uIG9uQ29tbWl0Um9vdCgpIHtcbiAge1xuICAgIGNvbW1pdEhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGNvbW1pdEhvb2spIHtcbiAgICAgIHJldHVybiBjb21taXRIb29rKCk7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudEFjdFF1ZXVlJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRBY3RRdWV1ZTtcbmZ1bmN0aW9uIGlzTGVnYWN5QWN0RW52aXJvbm1lbnQoZmliZXIpIHtcbiAge1xuICAgIC8vIExlZ2FjeSBtb2RlLiBXZSBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3Igb2YgUmVhY3QgMTcncyBhY3QuIEl0IGFzc3VtZXMgYW5cbiAgICAvLyBhY3QgZW52aXJvbm1lbnQgd2hlbmV2ZXIgYGplc3RgIGlzIGRlZmluZWQsIGJ1dCB5b3UgY2FuIHN0aWxsIHR1cm4gb2ZmXG4gICAgLy8gc3B1cmlvdXMgd2FybmluZ3MgYnkgc2V0dGluZyBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlQgZXhwbGljaXRseVxuICAgIC8vIHRvIGZhbHNlLlxuICAgIHZhciBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgPSAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC1yZXNvbHZlLW5hbWVdIEZsb3cgZG9lc24ndCBrbm93IGFib3V0IElTX1JFQUNUX0FDVF9FTlZJUk9OTUVOVCBnbG9iYWxcbiAgICB0eXBlb2YgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UICE9PSAndW5kZWZpbmVkJyA/IC8vICRGbG93Rml4TWVbY2Fubm90LXJlc29sdmUtbmFtZV1cbiAgICBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlQgOiB1bmRlZmluZWQ7IC8vICRGbG93Rml4TWVbY2Fubm90LXJlc29sdmUtbmFtZV0gLSBGbG93IGRvZXNuJ3Qga25vdyBhYm91dCBqZXN0XG5cbiAgICB2YXIgamVzdElzRGVmaW5lZCA9IHR5cGVvZiBqZXN0ICE9PSAndW5kZWZpbmVkJztcbiAgICByZXR1cm4gamVzdElzRGVmaW5lZCAmJiBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgIT09IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCgpIHtcbiAge1xuICAgIHZhciBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgPSAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC1yZXNvbHZlLW5hbWVdIEZsb3cgZG9lc24ndCBrbm93IGFib3V0IElTX1JFQUNUX0FDVF9FTlZJUk9OTUVOVCBnbG9iYWxcbiAgICB0eXBlb2YgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UICE9PSAndW5kZWZpbmVkJyA/IC8vICRGbG93Rml4TWVbY2Fubm90LXJlc29sdmUtbmFtZV1cbiAgICBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlQgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIWlzUmVhY3RBY3RFbnZpcm9ubWVudEdsb2JhbCAmJiBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQxLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IEluY2x1ZGUgbGluayB0byByZWxldmFudCBkb2N1bWVudGF0aW9uIHBhZ2UuXG4gICAgICBlcnJvcignVGhlIGN1cnJlbnQgdGVzdGluZyBlbnZpcm9ubWVudCBpcyBub3QgY29uZmlndXJlZCB0byBzdXBwb3J0ICcgKyAnYWN0KC4uLiknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNSZWFjdEFjdEVudmlyb25tZW50R2xvYmFsO1xuICB9XG59XG5cbnZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgUmVhY3RDdXJyZW50Q2FjaGUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRDYWNoZSxcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXIsXG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QWN0UXVldWU7XG52YXIgTm9Db250ZXh0ID1cbi8qICAgICAgICAgICAgICovXG4wO1xudmFyIEJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgUmVuZGVyQ29udGV4dCA9XG4vKiAgICAgICAgICovXG4yO1xudmFyIENvbW1pdENvbnRleHQgPVxuLyogICAgICAgICAqL1xuNDtcbnZhciBSb290SW5Qcm9ncmVzcyA9IDA7XG52YXIgUm9vdEZhdGFsRXJyb3JlZCA9IDE7XG52YXIgUm9vdEVycm9yZWQgPSAyO1xudmFyIFJvb3RTdXNwZW5kZWQgPSAzO1xudmFyIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgPSA0O1xudmFyIFJvb3RDb21wbGV0ZWQgPSA1O1xudmFyIFJvb3REaWROb3RDb21wbGV0ZSA9IDY7IC8vIERlc2NyaWJlcyB3aGVyZSB3ZSBhcmUgaW4gdGhlIFJlYWN0IGV4ZWN1dGlvbiBzdGFja1xuXG52YXIgZXhlY3V0aW9uQ29udGV4dCA9IE5vQ29udGV4dDsgLy8gVGhlIHJvb3Qgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDsgLy8gVGhlIGZpYmVyIHdlJ3JlIHdvcmtpbmcgb25cblxudmFyIHdvcmtJblByb2dyZXNzID0gbnVsbDsgLy8gVGhlIGxhbmVzIHdlJ3JlIHJlbmRlcmluZ1xuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xudmFyIE5vdFN1c3BlbmRlZCA9IDA7XG52YXIgU3VzcGVuZGVkT25FcnJvciA9IDE7XG52YXIgU3VzcGVuZGVkT25EYXRhID0gMjtcbnZhciBTdXNwZW5kZWRPbkltbWVkaWF0ZSA9IDM7XG52YXIgU3VzcGVuZGVkT25JbnN0YW5jZSA9IDQ7XG52YXIgU3VzcGVuZGVkT25JbnN0YW5jZUFuZFJlYWR5VG9Db250aW51ZSA9IDU7XG52YXIgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlID0gNjtcbnZhciBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWUgPSA3O1xudmFyIFN1c3BlbmRlZE9uSHlkcmF0aW9uID0gODsgLy8gV2hlbiB0aGlzIGlzIHRydWUsIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyIGp1c3Qgc3VzcGVuZGVkIChvciBlcnJvcmVkKSBhbmRcbi8vIHdlJ3ZlIHlldCB0byB1bndpbmQgdGhlIHN0YWNrLiBJbiBzb21lIGNhc2VzLCB3ZSBtYXkgeWllbGQgdG8gdGhlIG1haW4gdGhyZWFkXG4vLyBhZnRlciB0aGlzIGhhcHBlbnMuIElmIHRoZSBmaWJlciBpcyBwaW5nZWQgYmVmb3JlIHdlIHJlc3VtZSwgd2UgY2FuIHJldHJ5XG4vLyBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIHVud2luZGluZyB0aGUgc3RhY2suXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbnZhciB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDsgLy8gV2hldGhlciBhIHBpbmcgbGlzdGVuZXIgd2FzIGF0dGFjaGVkIGR1cmluZyB0aGlzIHJlbmRlci4gVGhpcyBpcyBzbGlnaHRseVxuLy8gZGlmZmVyZW50IHRoYXQgd2hldGhlciBzb21ldGhpbmcgc3VzcGVuZGVkLCBiZWNhdXNlIHdlIGRvbid0IGFkZCBtdWx0aXBsZVxuLy8gbGlzdGVuZXJzIHRvIGEgcHJvbWlzZSB3ZSd2ZSBhbHJlYWR5IHNlZW4gKHBlciByb290IGFuZCBsYW5lKS5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9IGZhbHNlOyAvLyBBIGNvbnRleHR1YWwgdmVyc2lvbiBvZiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcy4gSXQgaXMgYSBzdXBlcnNldCBvZlxuLy8gdGhlIGxhbmVzIHRoYXQgd2Ugc3RhcnRlZCB3b3JraW5nIG9uIGF0IHRoZSByb290LiBXaGVuIHdlIGVudGVyIGEgc3VidHJlZVxuLy8gdGhhdCBpcyBjdXJyZW50bHkgaGlkZGVuLCB3ZSBhZGQgdGhlIGxhbmVzIHRoYXQgd291bGQgaGF2ZSBjb21taXR0ZWQgaWZcbi8vIHRoZSBoaWRkZW4gdHJlZSBoYWRuJ3QgYmVlbiBkZWZlcnJlZC4gVGhpcyBpcyBtb2RpZmllZCBieSB0aGVcbi8vIEhpZGRlbkNvbnRleHQgbW9kdWxlLlxuLy9cbi8vIE1vc3QgdGhpbmdzIGluIHRoZSB3b3JrIGxvb3Agc2hvdWxkIGRlYWwgd2l0aCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcy5cbi8vIE1vc3QgdGhpbmdzIGluIGJlZ2luL2NvbXBsZXRlIHBoYXNlcyBzaG91bGQgZGVhbCB3aXRoIGVudGFuZ2xlZFJlbmRlckxhbmVzLlxuXG52YXIgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBXaGV0aGVyIHRvIHJvb3QgY29tcGxldGVkLCBlcnJvcmVkLCBzdXNwZW5kZWQsIGV0Yy5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5Qcm9ncmVzczsgLy8gQSBmYXRhbCBlcnJvciwgaWYgb25lIGlzIHRocm93blxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7IC8vIFRoZSB3b3JrIGxlZnQgb3ZlciBieSBjb21wb25lbnRzIHRoYXQgd2VyZSB2aXNpdGVkIGR1cmluZyB0aGlzIHJlbmRlci4gT25seVxuLy8gaW5jbHVkZXMgdW5wcm9jZXNzZWQgdXBkYXRlcywgbm90IHdvcmsgaW4gYmFpbGVkIG91dCBjaGlsZHJlbi5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBMYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSAoKm5vdCogYW4gaW50ZXJsZWF2ZWQgZXZlbnQpLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzOyAvLyBJZiB0aGlzIGxhbmUgc2NoZWR1bGVkIGRlZmVycmVkIHdvcmssIHRoaXMgaXMgdGhlIGxhbmUgb2YgdGhlIGRlZmVycmVkIHRhc2suXG5cbnZhciB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9IE5vTGFuZTsgLy8gRXJyb3JzIHRoYXQgYXJlIHRocm93biBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPSBudWxsOyAvLyBUaGVzZSBhcmUgZXJyb3JzIHRoYXQgd2UgcmVjb3ZlcmVkIGZyb20gd2l0aG91dCBzdXJmYWNpbmcgdGhlbSB0byB0aGUgVUkuXG4vLyBXZSB3aWxsIGxvZyB0aGVtIG9uY2UgdGhlIHRyZWUgY29tbWl0cy5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gbnVsbDsgLy8gVGhlIG1vc3QgcmVjZW50IHRpbWUgd2UgZWl0aGVyIGNvbW1pdHRlZCBhIGZhbGxiYWNrLCBvciB3aGVuIGEgZmFsbGJhY2sgd2FzXG4vLyBmaWxsZWQgaW4gd2l0aCB0aGUgcmVzb2x2ZWQgVUkuIFRoaXMgbGV0cyB1cyB0aHJvdHRsZSB0aGUgYXBwZWFyYW5jZSBvZiBuZXdcbi8vIGNvbnRlbnQgYXMgaXQgc3RyZWFtcyBpbiwgdG8gbWluaW1pemUgamFuay5cbi8vIFRPRE86IFRoaW5rIG9mIGEgYmV0dGVyIG5hbWUgZm9yIHRoaXMgdmFyaWFibGU/XG5cbnZhciBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gMDtcbnZhciBGQUxMQkFDS19USFJPVFRMRV9NUyA9IDMwMDsgLy8gVGhlIGFic29sdXRlIHRpbWUgZm9yIHdoZW4gd2Ugc2hvdWxkIHN0YXJ0IGdpdmluZyB1cCBvbiByZW5kZXJpbmdcbi8vIG1vcmUgYW5kIHByZWZlciBDUFUgc3VzcGVuc2UgaGV1cmlzdGljcyBpbnN0ZWFkLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IEluZmluaXR5OyAvLyBIb3cgbG9uZyBhIHJlbmRlciBpcyBzdXBwb3NlZCB0byB0YWtlIGJlZm9yZSB3ZSBzdGFydCBmb2xsb3dpbmcgQ1BVXG4vLyBzdXNwZW5zZSBoZXVyaXN0aWNzIGFuZCBvcHQgb3V0IG9mIHJlbmRlcmluZyBtb3JlIGNvbnRlbnQuXG5cbnZhciBSRU5ERVJfVElNRU9VVF9NUyA9IDUwMDtcbnZhciB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gbnVsbDtcblxuZnVuY3Rpb24gcmVzZXRSZW5kZXJUaW1lcigpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdyQxKCkgKyBSRU5ERVJfVElNRU9VVF9NUztcbn1cblxuZnVuY3Rpb24gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpIHtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWU7XG59XG52YXIgaGFzVW5jYXVnaHRFcnJvciA9IGZhbHNlO1xudmFyIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG52YXIgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsOyAvLyBPbmx5IHVzZWQgd2hlbiBlbmFibGVQcm9maWxlck5lc3RlZFVwZGF0ZVNjaGVkdWxlZEhvb2sgaXMgdHJ1ZTtcbnZhciByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG52YXIgcGVuZGluZ1Bhc3NpdmVQcm9maWxlckVmZmVjdHMgPSBbXTtcbnZhciBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW1haW5pbmdMYW5lcyA9IE5vTGFuZXM7XG52YXIgcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucyA9IG51bGw7IC8vIFVzZSB0aGVzZSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agb2YgbmVzdGVkIHVwZGF0ZXNcblxudmFyIE5FU1RFRF9VUERBVEVfTElNSVQgPSA1MDtcbnZhciBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG52YXIgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbnZhciBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG52YXIgTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcbnZhciByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbnZhciBpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzUm9vdCgpIHtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdDtcbn1cbmZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG59XG5mdW5jdGlvbiBpc1dvcmtMb29wU3VzcGVuZGVkT25EYXRhKCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uRGF0YTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKSB7XG4gIC8vIFNwZWNpYWwgY2FzZXNcbiAgdmFyIG1vZGUgPSBmaWJlci5tb2RlO1xuXG4gIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9IGVsc2UgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIC8vIFRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBUaGVzZSBhcmUgbm90IG9mZmljaWFsbHkgc3VwcG9ydGVkLiBUaGVcbiAgICAvLyBvbGQgYmVoYXZpb3IgaXMgdG8gZ2l2ZSB0aGlzIHRoZSBzYW1lIFwidGhyZWFkXCIgKGxhbmVzKSBhc1xuICAgIC8vIHdoYXRldmVyIGlzIGN1cnJlbnRseSByZW5kZXJpbmcuIFNvIGlmIHlvdSBjYWxsIGBzZXRTdGF0ZWAgb24gYSBjb21wb25lbnRcbiAgICAvLyB0aGF0IGhhcHBlbnMgbGF0ZXIgaW4gdGhlIHNhbWUgcmVuZGVyLCBpdCB3aWxsIGZsdXNoLiBJZGVhbGx5LCB3ZSB3YW50IHRvXG4gICAgLy8gcmVtb3ZlIHRoZSBzcGVjaWFsIGNhc2UgYW5kIHRyZWF0IHRoZW0gYXMgaWYgdGhleSBjYW1lIGZyb20gYW5cbiAgICAvLyBpbnRlcmxlYXZlZCBldmVudC4gUmVnYXJkbGVzcywgdGhpcyBwYXR0ZXJuIGlzIG5vdCBvZmZpY2lhbGx5IHN1cHBvcnRlZC5cbiAgICAvLyBUaGlzIGJlaGF2aW9yIGlzIG9ubHkgYSBmYWxsYmFjay4gVGhlIGZsYWcgb25seSBleGlzdHMgdW50aWwgd2UgY2FuIHJvbGxcbiAgICAvLyBvdXQgdGhlIHNldFN0YXRlIHdhcm5pbmcsIHNpbmNlIGV4aXN0aW5nIGNvZGUgbWlnaHQgYWNjaWRlbnRhbGx5IHJlbHkgb25cbiAgICAvLyB0aGUgY3VycmVudCBiZWhhdmlvci5cbiAgICByZXR1cm4gcGlja0FyYml0cmFyeUxhbmUod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIGlzVHJhbnNpdGlvbiA9IHJlcXVlc3RDdXJyZW50VHJhbnNpdGlvbigpICE9PSBOb1RyYW5zaXRpb247XG5cbiAgaWYgKGlzVHJhbnNpdGlvbikge1xuICAgIGlmIChSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhciB0cmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuXG4gICAgICBpZiAoIXRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMpIHtcbiAgICAgICAgdHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgICAgIH1cblxuICAgICAgdHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5hZGQoZmliZXIpO1xuICAgIH1cblxuICAgIHZhciBhY3Rpb25TY29wZUxhbmUgPSBwZWVrRW50YW5nbGVkQWN0aW9uTGFuZSgpO1xuICAgIHJldHVybiBhY3Rpb25TY29wZUxhbmUgIT09IE5vTGFuZSA/IC8vIFdlJ3JlIGluc2lkZSBhbiBhc3luYyBhY3Rpb24gc2NvcGUuIFJldXNlIHRoZSBzYW1lIGxhbmUuXG4gICAgYWN0aW9uU2NvcGVMYW5lIDogLy8gV2UgbWF5IG9yIG1heSBub3QgYmUgaW5zaWRlIGFuIGFzeW5jIGFjdGlvbiBzY29wZS4gSWYgd2UgYXJlLCB0aGlzXG4gICAgLy8gaXMgdGhlIGZpcnN0IHVwZGF0ZSBpbiB0aGF0IHNjb3BlLiBFaXRoZXIgd2F5LCB3ZSBuZWVkIHRvIGdldCBhXG4gICAgLy8gZnJlc2ggdHJhbnNpdGlvbiBsYW5lLlxuICAgIHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpO1xuICB9IC8vIFVwZGF0ZXMgb3JpZ2luYXRpbmcgaW5zaWRlIGNlcnRhaW4gUmVhY3QgbWV0aG9kcywgbGlrZSBmbHVzaFN5bmMsIGhhdmVcbiAgLy8gdGhlaXIgcHJpb3JpdHkgc2V0IGJ5IHRyYWNraW5nIGl0IHdpdGggYSBjb250ZXh0IHZhcmlhYmxlLlxuICAvL1xuICAvLyBUaGUgb3BhcXVlIHR5cGUgcmV0dXJuZWQgYnkgdGhlIGhvc3QgY29uZmlnIGlzIGludGVybmFsbHkgYSBsYW5lLCBzbyB3ZSBjYW5cbiAgLy8gdXNlIHRoYXQgZGlyZWN0bHkuXG4gIC8vIFRPRE86IE1vdmUgdGhpcyB0eXBlIGNvbnZlcnNpb24gdG8gdGhlIGV2ZW50IHByaW9yaXR5IG1vZHVsZS5cblxuXG4gIHZhciB1cGRhdGVMYW5lID0gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCk7XG5cbiAgaWYgKHVwZGF0ZUxhbmUgIT09IE5vTGFuZSkge1xuICAgIHJldHVybiB1cGRhdGVMYW5lO1xuICB9IC8vIFRoaXMgdXBkYXRlIG9yaWdpbmF0ZWQgb3V0c2lkZSBSZWFjdC4gQXNrIHRoZSBob3N0IGVudmlyb25tZW50IGZvciBhblxuICAvLyBhcHByb3ByaWF0ZSBwcmlvcml0eSwgYmFzZWQgb24gdGhlIHR5cGUgb2YgZXZlbnQuXG4gIC8vXG4gIC8vIFRoZSBvcGFxdWUgdHlwZSByZXR1cm5lZCBieSB0aGUgaG9zdCBjb25maWcgaXMgaW50ZXJuYWxseSBhIGxhbmUsIHNvIHdlIGNhblxuICAvLyB1c2UgdGhhdCBkaXJlY3RseS5cbiAgLy8gVE9ETzogTW92ZSB0aGlzIHR5cGUgY29udmVyc2lvbiB0byB0aGUgZXZlbnQgcHJpb3JpdHkgbW9kdWxlLlxuXG5cbiAgdmFyIGV2ZW50TGFuZSA9IGdldEN1cnJlbnRFdmVudFByaW9yaXR5KCk7XG4gIHJldHVybiBldmVudExhbmU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RSZXRyeUxhbmUoZmliZXIpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYHJlcXVlc3RVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIOKAlCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfVxuXG4gIHJldHVybiBjbGFpbU5leHRSZXRyeUxhbmUoKTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdERlZmVycmVkTGFuZSgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID09PSBOb0xhbmUpIHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdXNlRGVmZXJyZWRWYWx1ZSBob29rcyBpbiB0aGUgc2FtZSByZW5kZXIsIHRoZVxuICAgIC8vIHRhc2tzIHRoYXQgdGhleSBzcGF3biBzaG91bGQgYWxsIGJlIGJhdGNoZWQgdG9nZXRoZXIsIHNvIHRoZXkgc2hvdWxkIGFsbFxuICAgIC8vIHJlY2VpdmUgdGhlIHNhbWUgbGFuZS5cbiAgICAvLyBDaGVjayB0aGUgcHJpb3JpdHkgb2YgdGhlIGN1cnJlbnQgcmVuZGVyIHRvIGRlY2lkZSB0aGUgcHJpb3JpdHkgb2YgdGhlXG4gICAgLy8gZGVmZXJyZWQgdGFzay5cbiAgICAvLyBPZmZzY3JlZW5MYW5lIGlzIHVzZWQgZm9yIHByZXJlbmRlcmluZywgYnV0IHdlIGFsc28gdXNlIE9mZnNjcmVlbkxhbmVcbiAgICAvLyBmb3IgaW5jcmVtZW50YWwgaHlkcmF0aW9uLiBJdCdzIGdpdmVuIHRoZSBsb3dlc3QgcHJpb3JpdHkgYmVjYXVzZSB0aGVcbiAgICAvLyBpbml0aWFsIEhUTUwgaXMgdGhlIHNhbWUgYXMgdGhlIGZpbmFsIFVJLiBCdXQgdXNlRGVmZXJyZWRWYWx1ZSBkdXJpbmdcbiAgICAvLyBoeWRyYXRpb24gaXMgYW4gZXhjZXB0aW9uIOKAlCB3ZSBuZWVkIHRvIHVwZ3JhZGUgdGhlIFVJIHRvIHRoZSBmaW5hbFxuICAgIC8vIHZhbHVlLiBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgaHlkcmF0aW5nLCB3ZSB0cmVhdCBpdCBsaWtlIGEgdHJhbnNpdGlvbi5cbiAgICB2YXIgaXNQcmVyZW5kZXJpbmcgPSBpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSAmJiAhZ2V0SXNIeWRyYXRpbmcoKTtcblxuICAgIGlmIChpc1ByZXJlbmRlcmluZykge1xuICAgICAgLy8gVGhlcmUncyBvbmx5IG9uZSBPZmZzY3JlZW5MYW5lLCBzbyBpZiBpdCBjb250YWlucyBkZWZlcnJlZCB3b3JrLCB3ZVxuICAgICAgLy8gc2hvdWxkIGp1c3QgcmVzY2hlZHVsZSB1c2luZyB0aGUgc2FtZSBsYW5lLlxuICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgPSBPZmZzY3JlZW5MYW5lO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgc3Bhd25lZCBhcyBhIHRyYW5zaXRpb24uXG4gICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9IHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpO1xuICAgIH1cbiAgfSAvLyBNYXJrIHRoZSBwYXJlbnQgU3VzcGVuc2UgYm91bmRhcnkgc28gaXQga25vd3MgdG8gc3Bhd24gdGhlIGRlZmVycmVkIGxhbmUuXG5cblxuICB2YXIgc3VzcGVuc2VIYW5kbGVyID0gZ2V0U3VzcGVuc2VIYW5kbGVyKCk7XG5cbiAgaWYgKHN1c3BlbnNlSGFuZGxlciAhPT0gbnVsbCkge1xuICAgIC8vIFRPRE86IEFzIGFuIG9wdGltaXphdGlvbiwgd2Ugc2hvdWxkbid0IGVudGFuZ2xlIHRoZSBsYW5lcyBhdCB0aGUgcm9vdDsgd2VcbiAgICAvLyBjYW4gZW50YW5nbGUgdGhlbSB1c2luZyB0aGUgYmFzZUxhbmVzIG9mIHRoZSBTdXNwZW5zZSBib3VuZGFyeSBpbnN0ZWFkLlxuICAgIC8vIFdlIG9ubHkgbmVlZCB0byBkbyBzb21ldGhpbmcgc3BlY2lhbCBpZiB0aGVyZSdzIG5vIFN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgIHN1c3BlbnNlSGFuZGxlci5mbGFncyB8PSBEaWREZWZlcjtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZTtcbn1cbmZ1bmN0aW9uIHBlZWtEZWZlcnJlZExhbmUoKSB7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSkge1xuICB7XG4gICAgaWYgKGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCkge1xuICAgICAgZXJyb3IoJ3VzZUluc2VydGlvbkVmZmVjdCBtdXN0IG5vdCBzY2hlZHVsZSB1cGRhdGVzLicpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzKSB7XG4gICAgICBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICB9XG4gIH0gLy8gQ2hlY2sgaWYgdGhlIHdvcmsgbG9vcCBpcyBjdXJyZW50bHkgc3VzcGVuZGVkIGFuZCB3YWl0aW5nIGZvciBkYXRhIHRvXG4gIC8vIGZpbmlzaCBsb2FkaW5nLlxuXG5cbiAgaWYgKCAvLyBTdXNwZW5kZWQgcmVuZGVyIHBoYXNlXG4gIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJiB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9PT0gU3VzcGVuZGVkT25EYXRhIHx8IC8vIFN1c3BlbmRlZCBjb21taXQgcGhhc2VcbiAgcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0ICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIGluY29taW5nIHVwZGF0ZSBtaWdodCB1bmJsb2NrIHRoZSBjdXJyZW50IHJlbmRlci4gSW50ZXJydXB0IHRoZVxuICAgIC8vIGN1cnJlbnQgYXR0ZW1wdCBhbmQgcmVzdGFydCBmcm9tIHRoZSB0b3AuXG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lKTtcbiAgfSAvLyBNYXJrIHRoYXQgdGhlIHJvb3QgaGFzIGEgcGVuZGluZyB1cGRhdGUuXG5cblxuICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgbGFuZSk7XG5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vTGFuZXMgJiYgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgLy8gVGhpcyB1cGRhdGUgd2FzIGRpc3BhdGNoZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIFRoaXMgaXMgYSBtaXN0YWtlXG4gICAgLy8gaWYgdGhlIHVwZGF0ZSBvcmlnaW5hdGVzIGZyb20gdXNlciBzcGFjZSAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGxvY2FsXG4gICAgLy8gaG9vayB1cGRhdGVzLCB3aGljaCBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSBhbmQgZG9uJ3QgcmVhY2ggdGhpc1xuICAgIC8vIGZ1bmN0aW9uKSwgYnV0IHRoZXJlIGFyZSBzb21lIGludGVybmFsIFJlYWN0IGZlYXR1cmVzIHRoYXQgdXNlIHRoaXMgYXNcbiAgICAvLyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGxpa2Ugc2VsZWN0aXZlIGh5ZHJhdGlvbi5cbiAgICB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcik7IC8vIFRyYWNrIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlXG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhIG5vcm1hbCB1cGRhdGUsIHNjaGVkdWxlZCBmcm9tIG91dHNpZGUgdGhlIHJlbmRlciBwaGFzZS4gRm9yXG4gICAgLy8gZXhhbXBsZSwgZHVyaW5nIGFuIGlucHV0IGV2ZW50LlxuICAgIHtcbiAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICBhZGRGaWJlclRvTGFuZXNNYXAocm9vdCwgZmliZXIsIGxhbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdhcm5JZlVwZGF0ZXNOb3RXcmFwcGVkV2l0aEFjdERFVihmaWJlcik7XG5cbiAgICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgICAvLyBSZWNlaXZlZCBhbiB1cGRhdGUgdG8gYSB0cmVlIHRoYXQncyBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZy4gTWFya1xuICAgICAgLy8gdGhhdCB0aGVyZSB3YXMgYW4gaW50ZXJsZWF2ZWQgdXBkYXRlIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgPT09IE5vQ29udGV4dCkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMsIGxhbmUpO1xuICAgICAgfVxuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSkge1xuICAgICAgICAvLyBUaGUgcm9vdCBhbHJlYWR5IHN1c3BlbmRlZCB3aXRoIGEgZGVsYXksIHdoaWNoIG1lYW5zIHRoaXMgcmVuZGVyXG4gICAgICAgIC8vIGRlZmluaXRlbHkgd29uJ3QgZmluaXNoLiBTaW5jZSB3ZSBoYXZlIGEgbmV3IHVwZGF0ZSwgbGV0J3MgbWFyayBpdCBhc1xuICAgICAgICAvLyBzdXNwZW5kZWQgbm93LCByaWdodCBiZWZvcmUgbWFya2luZyB0aGUgaW5jb21pbmcgdXBkYXRlLiBUaGlzIGhhcyB0aGVcbiAgICAgICAgLy8gZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCByZW5kZXIgYW5kIHN3aXRjaGluZyB0byB0aGUgdXBkYXRlLlxuICAgICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgdGhpcyBkb2Vzbid0IG92ZXJyaWRlIHBpbmdzIHRoYXQgaGFwcGVuIHdoaWxlIHdlJ3ZlXG4gICAgICAgIC8vIGFscmVhZHkgc3RhcnRlZCByZW5kZXJpbmcuXG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuXG4gICAgaWYgKGxhbmUgPT09IFN5bmNMYW5lICYmIGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCAmJiAoZmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUuaXNCYXRjaGluZ0xlZ2FjeSkgOyBlbHNlIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIHN5bmNocm9ub3VzIHdvcmsgbm93LCB1bmxlc3Mgd2UncmUgYWxyZWFkeSB3b3JraW5nIG9yIGluc2lkZVxuICAgICAgICAvLyBhIGJhdGNoLiBUaGlzIGlzIGludGVudGlvbmFsbHkgaW5zaWRlIHNjaGVkdWxlVXBkYXRlT25GaWJlciBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHNjaGVkdWxlQ2FsbGJhY2tGb3JGaWJlciB0byBwcmVzZXJ2ZSB0aGUgYWJpbGl0eSB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgIC8vIHdpdGhvdXQgaW1tZWRpYXRlbHkgZmx1c2hpbmcgaXQuIFdlIG9ubHkgZG8gdGhpcyBmb3IgdXNlci1pbml0aWF0ZWRcbiAgICAgICAgLy8gdXBkYXRlcywgdG8gcHJlc2VydmUgaGlzdG9yaWNhbCBiZWhhdmlvciBvZiBsZWdhY3kgbW9kZS5cbiAgICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgICBmbHVzaFN5bmNXb3JrT25MZWdhY3lSb290c09ubHkoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHNjaGVkdWxlSW5pdGlhbEh5ZHJhdGlvbk9uUm9vdChyb290LCBsYW5lKSB7XG4gIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGZvcmsgb2Ygc2NoZWR1bGVVcGRhdGVPbkZpYmVyIHRoYXQgaXMgb25seSB1c2VkIHRvXG4gIC8vIHNjaGVkdWxlIHRoZSBpbml0aWFsIGh5ZHJhdGlvbiBvZiBhIHJvb3QgdGhhdCBoYXMganVzdCBiZWVuIGNyZWF0ZWQuIE1vc3RcbiAgLy8gb2YgdGhlIHN0dWZmIGluIHNjaGVkdWxlVXBkYXRlT25GaWJlciBjYW4gYmUgc2tpcHBlZC5cbiAgLy9cbiAgLy8gVGhlIG1haW4gcmVhc29uIGZvciB0aGlzIHNlcGFyYXRlIHBhdGgsIHRob3VnaCwgaXMgdG8gZGlzdGluZ3Vpc2ggdGhlXG4gIC8vIGluaXRpYWwgY2hpbGRyZW4gZnJvbSBzdWJzZXF1ZW50IHVwZGF0ZXMuIEluIGZ1bGx5IGNsaWVudC1yZW5kZXJlZCByb290c1xuICAvLyAoY3JlYXRlUm9vdCBpbnN0ZWFkIG9mIGh5ZHJhdGVSb290KSwgYWxsIHRvcC1sZXZlbCByZW5kZXJzIGFyZSBtb2RlbGVkIGFzXG4gIC8vIHVwZGF0ZXMsIGJ1dCBoeWRyYXRpb24gcm9vdHMgYXJlIHNwZWNpYWwgYmVjYXVzZSB0aGUgaW5pdGlhbCByZW5kZXIgbXVzdFxuICAvLyBtYXRjaCB3aGF0IHdhcyByZW5kZXJlZCBvbiB0aGUgc2VydmVyLlxuICB2YXIgY3VycmVudCA9IHJvb3QuY3VycmVudDtcbiAgY3VycmVudC5sYW5lcyA9IGxhbmU7XG4gIG1hcmtSb290VXBkYXRlZChyb290LCBsYW5lKTtcbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xufVxuZnVuY3Rpb24gaXNVbnNhZmVDbGFzc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSB7XG4gIC8vIENoZWNrIGlmIHRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBPbmx5IGNhbGxlZCBieSBjbGFzcyBjb21wb25lbnRzLFxuICAvLyB3aGljaCBzcGVjaWFsIChkZXByZWNhdGVkKSBiZWhhdmlvciBmb3IgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlIHByb3BzLlxuICByZXR1cm4gKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0O1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZXZlcnkgY29uY3VycmVudCB0YXNrLCBpLmUuIGFueXRoaW5nIHRoYXRcbi8vIGdvZXMgdGhyb3VnaCBTY2hlZHVsZXIuXG5cbmZ1bmN0aW9uIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdChyb290LCBkaWRUaW1lb3V0KSB7XG4gIHtcbiAgICByZXNldE5lc3RlZFVwZGF0ZUZsYWcoKTtcbiAgfVxuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLicpO1xuICB9IC8vIEZsdXNoIGFueSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyBiZWZvcmUgZGVjaWRpbmcgd2hpY2ggbGFuZXMgdG8gd29yayBvbixcbiAgLy8gaW4gY2FzZSB0aGV5IHNjaGVkdWxlIGFkZGl0aW9uYWwgd29yay5cblxuXG4gIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICB2YXIgZGlkRmx1c2hQYXNzaXZlRWZmZWN0cyA9IGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcblxuICBpZiAoZGlkRmx1c2hQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcGFzc2l2ZSBlZmZlY3QgcGhhc2UgbWF5IGhhdmUgY2FuY2VsZWQgdGhlIGN1cnJlbnQgdGFzay5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFzayBub2RlIGZvciB0aGlzIHJvb3Qgd2FzIGNoYW5nZWQuXG4gICAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdGFzayB3YXMgY2FuY2VsZWQuIEV4aXQuIFdlIGRvbid0IG5lZWQgdG8gY2FsbFxuICAgICAgLy8gYGVuc3VyZVJvb3RJc1NjaGVkdWxlZGAgYmVjYXVzZSB0aGUgY2hlY2sgYWJvdmUgaW1wbGllcyBlaXRoZXIgdGhhdFxuICAgICAgLy8gdGhlcmUncyBhIG5ldyB0YXNrLCBvciB0aGF0IHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IC8vIERldGVybWluZSB0aGUgbmV4dCBsYW5lcyB0byB3b3JrIG9uLCB1c2luZyB0aGUgZmllbGRzIHN0b3JlZFxuICAvLyBvbiB0aGUgcm9vdC5cbiAgLy8gVE9ETzogVGhpcyB3YXMgYWxyZWFkeSBjb21wdXRlZCBpbiB0aGUgY2FsbGVyLiBQYXNzIGl0IGFzIGFuIGFyZ3VtZW50LlxuXG5cbiAgdmFyIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7XG5cbiAgaWYgKGxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gRGVmZW5zaXZlIGNvZGluZy4gVGhpcyBpcyBuZXZlciBleHBlY3RlZCB0byBoYXBwZW4uXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gV2UgZGlzYWJsZSB0aW1lLXNsaWNpbmcgaW4gc29tZSBjYXNlczogaWYgdGhlIHdvcmsgaGFzIGJlZW4gQ1BVLWJvdW5kXG4gIC8vIGZvciB0b28gbG9uZyAoXCJleHBpcmVkXCIgd29yaywgdG8gcHJldmVudCBzdGFydmF0aW9uKSwgb3Igd2UncmUgaW5cbiAgLy8gc3luYy11cGRhdGVzLWJ5LWRlZmF1bHQgbW9kZS5cbiAgLy8gVE9ETzogV2Ugb25seSBjaGVjayBgZGlkVGltZW91dGAgZGVmZW5zaXZlbHksIHRvIGFjY291bnQgZm9yIGEgU2NoZWR1bGVyXG4gIC8vIGJ1ZyB3ZSdyZSBzdGlsbCBpbnZlc3RpZ2F0aW5nLiBPbmNlIHRoZSBidWcgaW4gU2NoZWR1bGVyIGlzIGZpeGVkLFxuICAvLyB3ZSBjYW4gcmVtb3ZlIHRoaXMsIHNpbmNlIHdlIHRyYWNrIGV4cGlyYXRpb24gb3Vyc2VsdmVzLlxuXG5cbiAgdmFyIHNob3VsZFRpbWVTbGljZSA9ICFpbmNsdWRlc0Jsb2NraW5nTGFuZShyb290LCBsYW5lcykgJiYgIWluY2x1ZGVzRXhwaXJlZExhbmUocm9vdCwgbGFuZXMpICYmICghZGlkVGltZW91dCk7XG4gIHZhciBleGl0U3RhdHVzID0gc2hvdWxkVGltZVNsaWNlID8gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpIDogcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuXG4gIGlmIChleGl0U3RhdHVzICE9PSBSb290SW5Qcm9ncmVzcykge1xuICAgIHZhciByZW5kZXJXYXNDb25jdXJyZW50ID0gc2hvdWxkVGltZVNsaWNlO1xuXG4gICAgZG8ge1xuICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3REaWROb3RDb21wbGV0ZSkge1xuICAgICAgICAvLyBUaGUgcmVuZGVyIHVud291bmQgd2l0aG91dCBjb21wbGV0aW5nIHRoZSB0cmVlLiBUaGlzIGhhcHBlbnMgaW4gc3BlY2lhbFxuICAgICAgICAvLyBjYXNlcyB3aGVyZSBuZWVkIHRvIGV4aXQgdGhlIGN1cnJlbnQgcmVuZGVyIHdpdGhvdXQgcHJvZHVjaW5nIGFcbiAgICAgICAgLy8gY29uc2lzdGVudCB0cmVlIG9yIGNvbW1pdHRpbmcuXG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIGxhbmVzLCBOb0xhbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlIHJlbmRlciBjb21wbGV0ZWQuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgcmVuZGVyIG1heSBoYXZlIHlpZWxkZWQgdG8gYSBjb25jdXJyZW50IGV2ZW50LCBhbmQgaWYgc28sXG4gICAgICAgIC8vIGNvbmZpcm0gdGhhdCBhbnkgbmV3bHkgcmVuZGVyZWQgc3RvcmVzIGFyZSBjb25zaXN0ZW50LlxuICAgICAgICAvLyBUT0RPOiBJdCdzIHBvc3NpYmxlIHRoYXQgZXZlbiBhIGNvbmN1cnJlbnQgcmVuZGVyIG1heSBuZXZlciBoYXZlIHlpZWxkZWRcbiAgICAgICAgLy8gdG8gdGhlIG1haW4gdGhyZWFkLCBpZiBpdCB3YXMgZmFzdCBlbm91Z2gsIG9yIGlmIGl0IGV4cGlyZWQuIFdlIGNvdWxkXG4gICAgICAgIC8vIHNraXAgdGhlIGNvbnNpc3RlbmN5IGNoZWNrIGluIHRoYXQgY2FzZSwgdG9vLlxuICAgICAgICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcblxuICAgICAgICBpZiAocmVuZGVyV2FzQ29uY3VycmVudCAmJiAhaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGZpbmlzaGVkV29yaykpIHtcbiAgICAgICAgICAvLyBBIHN0b3JlIHdhcyBtdXRhdGVkIGluIGFuIGludGVybGVhdmVkIGV2ZW50LiBSZW5kZXIgYWdhaW4sXG4gICAgICAgICAgLy8gc3luY2hyb25vdXNseSwgdG8gYmxvY2sgZnVydGhlciBtdXRhdGlvbnMuXG4gICAgICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTsgLy8gV2UgYXNzdW1lIHRoZSB0cmVlIGlzIG5vdyBjb25zaXN0ZW50IGJlY2F1c2Ugd2UgZGlkbid0IHlpZWxkIHRvIGFueVxuICAgICAgICAgIC8vIGNvbmN1cnJlbnQgZXZlbnRzLlxuXG4gICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IGZhbHNlOyAvLyBOZWVkIHRvIGNoZWNrIHRoZSBleGl0IHN0YXR1cyBhZ2Fpbi5cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIENoZWNrIGlmIHNvbWV0aGluZyB0aHJld1xuXG5cbiAgICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgICAgICAgdmFyIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcyA9IGxhbmVzO1xuICAgICAgICAgIHZhciBlcnJvclJldHJ5TGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290LCBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMpO1xuXG4gICAgICAgICAgaWYgKGVycm9yUmV0cnlMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgICAgbGFuZXMgPSBlcnJvclJldHJ5TGFuZXM7XG4gICAgICAgICAgICBleGl0U3RhdHVzID0gcmVjb3ZlckZyb21Db25jdXJyZW50RXJyb3Iocm9vdCwgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzLCBlcnJvclJldHJ5TGFuZXMpO1xuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgICAgICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIGxhbmVzLCBOb0xhbmUpO1xuICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgICB0aHJvdyBmYXRhbEVycm9yO1xuICAgICAgICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBUaGUgbmV4dCBzdGVwIGlzIGVpdGhlciB0byBjb21taXQgaXQsXG4gICAgICAgIC8vIG9yLCBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLCB3YWl0IHRvIGNvbW1pdCBpdCBhZnRlciBhIHRpbWVvdXQuXG5cblxuICAgICAgICByb290LmZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgICAgICAgcm9vdC5maW5pc2hlZExhbmVzID0gbGFuZXM7XG4gICAgICAgIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgZmluaXNoZWRXb3JrLCBsYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH0gd2hpbGUgKHRydWUpO1xuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICByZXR1cm4gZ2V0Q29udGludWF0aW9uRm9yUm9vdChyb290LCBvcmlnaW5hbENhbGxiYWNrTm9kZSk7XG59XG5cbmZ1bmN0aW9uIHJlY292ZXJGcm9tQ29uY3VycmVudEVycm9yKHJvb3QsIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcywgZXJyb3JSZXRyeUxhbmVzKSB7XG4gIC8vIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24sIGRpc2NhcmQgc2VydmVyIHJlc3BvbnNlIGFuZCBmYWxsXG4gIC8vIGJhY2sgdG8gY2xpZW50IHNpZGUgcmVuZGVyLlxuICAvLyBCZWZvcmUgcmVuZGVyaW5nIGFnYWluLCBzYXZlIHRoZSBlcnJvcnMgZnJvbSB0aGUgcHJldmlvdXMgYXR0ZW1wdC5cbiAgdmFyIGVycm9yc0Zyb21GaXJzdEF0dGVtcHQgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzO1xuICB2YXIgd2FzUm9vdERlaHlkcmF0ZWQgPSBpc1Jvb3REZWh5ZHJhdGVkKHJvb3QpO1xuXG4gIGlmICh3YXNSb290RGVoeWRyYXRlZCkge1xuICAgIC8vIFRoZSBzaGVsbCBmYWlsZWQgdG8gaHlkcmF0ZS4gU2V0IGEgZmxhZyB0byBmb3JjZSBhIGNsaWVudCByZW5kZXJpbmdcbiAgICAvLyBkdXJpbmcgdGhlIG5leHQgYXR0ZW1wdC4gVG8gZG8gdGhpcywgd2UgY2FsbCBwcmVwYXJlRnJlc2hTdGFjayBub3dcbiAgICAvLyB0byBjcmVhdGUgdGhlIHJvb3Qgd29yay1pbi1wcm9ncmVzcyBmaWJlci4gVGhpcyBpcyBhIGJpdCB3ZWlyZCBpbiB0ZXJtc1xuICAgIC8vIG9mIGZhY3RvcmluZywgYmVjYXVzZSBpdCByZWxpZXMgb24gcmVuZGVyUm9vdFN5bmMgbm90IGNhbGxpbmdcbiAgICAvLyBwcmVwYXJlRnJlc2hTdGFjayBhZ2FpbiBpbiB0aGUgY2FsbCBiZWxvdywgd2hpY2ggaGFwcGVucyBiZWNhdXNlIHRoZVxuICAgIC8vIHJvb3QgYW5kIGxhbmVzIGhhdmVuJ3QgY2hhbmdlZC5cbiAgICAvL1xuICAgIC8vIFRPRE86IEkgdGhpbmsgd2hhdCB3ZSBzaG91bGQgZG8gaXMgc2V0IEZvcmNlQ2xpZW50UmVuZGVyIGluc2lkZVxuICAgIC8vIHRocm93RXhjZXB0aW9uLCBsaWtlIHdlIGRvIGZvciBuZXN0ZWQgU3VzcGVuc2UgYm91bmRhcmllcy4gVGhlIHJlYXNvblxuICAgIC8vIGl0J3MgaGVyZSBpbnN0ZWFkIGlzIHNvIHdlIGNhbiBzd2l0Y2ggdG8gdGhlIHN5bmNocm9ub3VzIHdvcmsgbG9vcCwgdG9vLlxuICAgIC8vIFNvbWV0aGluZyB0byBjb25zaWRlciBmb3IgYSBmdXR1cmUgcmVmYWN0b3IuXG4gICAgdmFyIHJvb3RXb3JrSW5Qcm9ncmVzcyA9IHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGVycm9yUmV0cnlMYW5lcyk7XG4gICAgcm9vdFdvcmtJblByb2dyZXNzLmZsYWdzIHw9IEZvcmNlQ2xpZW50UmVuZGVyO1xuXG4gICAge1xuICAgICAgZXJyb3JIeWRyYXRpbmdDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGVycm9yUmV0cnlMYW5lcyk7XG5cbiAgaWYgKGV4aXRTdGF0dXMgIT09IFJvb3RFcnJvcmVkKSB7XG4gICAgLy8gU3VjY2Vzc2Z1bGx5IGZpbmlzaGVkIHJlbmRlcmluZyBvbiByZXRyeVxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgJiYgIXdhc1Jvb3REZWh5ZHJhdGVkKSB7XG4gICAgICAvLyBEdXJpbmcgdGhlIHN5bmNocm9ub3VzIHJlbmRlciwgd2UgYXR0YWNoZWQgYWRkaXRpb25hbCBwaW5nIGxpc3RlbmVycy5cbiAgICAgIC8vIFRoaXMgaXMgaGlnaGx5IHN1Z2dlc3RpdmUgb2YgYW4gdW5jYWNoZWQgcHJvbWlzZSAodGhvdWdoIGl0J3Mgbm90IHRoZVxuICAgICAgLy8gb25seSByZWFzb24gdGhpcyB3b3VsZCBoYXBwZW4pLiBJZiBpdCB3YXMgYW4gdW5jYWNoZWQgcHJvbWlzZSwgdGhlblxuICAgICAgLy8gaXQgbWF5IGhhdmUgbWFza2VkIGEgZG93bnN0cmVhbSBlcnJvciBmcm9tIG9jdXJyaW5nIHdpdGhvdXQgYWN0dWFsbHlcbiAgICAgIC8vIGZpeGluZyBpdC4gRXhhbXBsZTpcbiAgICAgIC8vXG4gICAgICAvLyAgICB1c2UoUHJvbWlzZS5yZXNvbHZlKCd1bmNhY2hlZCcpKVxuICAgICAgLy8gICAgdGhyb3cgbmV3IEVycm9yKCdPb3BzIScpXG4gICAgICAvL1xuICAgICAgLy8gV2hlbiB0aGlzIGhhcHBlbnMsIHRoZXJlJ3MgYSBjb25mbGljdCBiZXR3ZWVuIGJsb2NraW5nIHBvdGVudGlhbFxuICAgICAgLy8gY29uY3VycmVudCBkYXRhIHJhY2VzIGFuZCB1bndyYXBwaW5nIHVuY2FjaGVkIHByb21pc2UgdmFsdWVzLiBXZVxuICAgICAgLy8gaGF2ZSB0byBjaG9vc2Ugb25lIG9yIHRoZSBvdGhlci4gQmVjYXVzZSB0aGUgZGF0YSByYWNlIHJlY292ZXJ5IGlzXG4gICAgICAvLyBhIGxhc3QgZGl0Y2ggZWZmb3J0LCB3ZSdsbCBkaXNhYmxlIGl0LlxuICAgICAgcm9vdC5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcyA9IG1lcmdlTGFuZXMocm9vdC5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcywgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzKTsgLy8gTWFyayB0aGUgY3VycmVudCByZW5kZXIgYXMgc3VzcGVuZGVkIGFuZCBmb3JjZSBpdCB0byByZXN0YXJ0LiBPbmNlXG4gICAgICAvLyB0aGVzZSBsYW5lcyBmaW5pc2ggc3VjY2Vzc2Z1bGx5LCB3ZSdsbCByZS1lbmFibGUgdGhlIGVycm9yIHJlY292ZXJ5XG4gICAgICAvLyBtZWNoYW5pc20gZm9yIHN1YnNlcXVlbnQgdXBkYXRlcy5cblxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgfD0gb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzO1xuICAgICAgcmV0dXJuIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk7XG4gICAgfSAvLyBUaGUgZXJyb3JzIGZyb20gdGhlIGZhaWxlZCBmaXJzdCBhdHRlbXB0IGhhdmUgYmVlbiByZWNvdmVyZWQuIEFkZFxuICAgIC8vIHRoZW0gdG8gdGhlIGNvbGxlY3Rpb24gb2YgcmVjb3ZlcmFibGUgZXJyb3JzLiBXZSdsbCBsb2cgdGhlbSBpbiB0aGVcbiAgICAvLyBjb21taXQgcGhhc2UuXG5cblxuICAgIHZhciBlcnJvcnNGcm9tU2Vjb25kQXR0ZW1wdCA9IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gZXJyb3JzRnJvbUZpcnN0QXR0ZW1wdDsgLy8gVGhlIGVycm9ycyBmcm9tIHRoZSBzZWNvbmQgYXR0ZW1wdCBzaG91bGQgYmUgcXVldWVkIGFmdGVyIHRoZSBlcnJvcnNcbiAgICAvLyBmcm9tIHRoZSBmaXJzdCBhdHRlbXB0LCB0byBwcmVzZXJ2ZSB0aGUgY2F1c2FsIHNlcXVlbmNlLlxuXG4gICAgaWYgKGVycm9yc0Zyb21TZWNvbmRBdHRlbXB0ICE9PSBudWxsKSB7XG4gICAgICBxdWV1ZVJlY292ZXJhYmxlRXJyb3JzKGVycm9yc0Zyb21TZWNvbmRBdHRlbXB0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhpdFN0YXR1cztcbn1cblxuZnVuY3Rpb24gcXVldWVSZWNvdmVyYWJsZUVycm9ycyhlcnJvcnMpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID09PSBudWxsKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBlcnJvcnM7XG4gIH0gZWxzZSB7XG4gICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLnB1c2guYXBwbHkod29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsIGVycm9ycyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBmaW5pc2hlZFdvcmssIGxhbmVzKSB7XG4gIC8vIFRPRE86IFRoZSBmYWN0IHRoYXQgbW9zdCBvZiB0aGVzZSBicmFuY2hlcyBhcmUgaWRlbnRpY2FsIHN1Z2dlc3RzIHRoYXQgc29tZVxuICAvLyBvZiB0aGUgZXhpdCBzdGF0dXNlcyBhcmUgbm90IGJlc3QgbW9kZWxlZCBhcyBleGl0IHN0YXR1c2VzIGFuZCBzaG91bGQgYmVcbiAgLy8gdHJhY2tlZCBvcnRob2dvbmFsbHkuXG4gIHN3aXRjaCAoZXhpdFN0YXR1cykge1xuICAgIGNhc2UgUm9vdEluUHJvZ3Jlc3M6XG4gICAgY2FzZSBSb290RmF0YWxFcnJvcmVkOlxuICAgICAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgZGlkIG5vdCBjb21wbGV0ZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdFN1c3BlbmRlZFdpdGhEZWxheTpcbiAgICAgIHtcbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVRyYW5zaXRpb25zKGxhbmVzKSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSB0cmFuc2l0aW9uLCBzbyB3ZSBzaG91bGQgZXhpdCB3aXRob3V0IGNvbW1pdHRpbmcgYVxuICAgICAgICAgIC8vIHBsYWNlaG9sZGVyIGFuZCB3aXRob3V0IHNjaGVkdWxpbmcgYSB0aW1lb3V0LiBEZWxheSBpbmRlZmluaXRlbHlcbiAgICAgICAgICAvLyB1bnRpbCB3ZSByZWNlaXZlIG1vcmUgZGF0YS5cbiAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBDb21taXQgdGhlIHBsYWNlaG9sZGVyLlxuXG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RFcnJvcmVkOlxuICAgIGNhc2UgUm9vdFN1c3BlbmRlZDpcbiAgICBjYXNlIFJvb3RDb21wbGV0ZWQ6XG4gICAgICB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuJyk7XG4gICAgICB9XG4gIH1cblxuICBpZiAoc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkpIHtcbiAgICAvLyBXZSdyZSBpbnNpZGUgYW4gYGFjdGAgc2NvcGUuIENvbW1pdCBpbW1lZGlhdGVseS5cbiAgICBjb21taXRSb290KHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLCB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLCB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpICYmIChhbHdheXNUaHJvdHRsZVJldHJpZXMgKSkge1xuICAgICAgLy8gVGhpcyByZW5kZXIgb25seSBpbmNsdWRlZCByZXRyaWVzLCBubyB1cGRhdGVzLiBUaHJvdHRsZSBjb21taXR0aW5nXG4gICAgICAvLyByZXRyaWVzIHNvIHRoYXQgd2UgZG9uJ3Qgc2hvdyB0b28gbWFueSBsb2FkaW5nIHN0YXRlcyB0b28gcXVpY2tseS5cbiAgICAgIHZhciBtc1VudGlsVGltZW91dCA9IGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgKyBGQUxMQkFDS19USFJPVFRMRV9NUyAtIG5vdyQxKCk7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG4gICAgICBpZiAobXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUpO1xuICAgICAgICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIE5vTGFuZXMpO1xuXG4gICAgICAgIGlmIChuZXh0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAvLyBUaGVyZSdzIGFkZGl0aW9uYWwgd29yayB3ZSBjYW4gZG8gb24gdGhpcyByb290LiBXZSBtaWdodCBhcyB3ZWxsXG4gICAgICAgICAgLy8gYXR0ZW1wdCB0byB3b3JrIG9uIHRoYXQgd2hpbGUgd2UncmUgc3VzcGVuZGVkLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBUaGUgcmVuZGVyIGlzIHN1c3BlbmRlZCwgaXQgaGFzbid0IHRpbWVkIG91dCwgYW5kIHRoZXJlJ3Mgbm9cbiAgICAgICAgLy8gbG93ZXIgcHJpb3JpdHkgd29yayB0byBkby4gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFja1xuICAgICAgICAvLyBpbW1lZGlhdGVseSwgd2FpdCBmb3IgbW9yZSBkYXRhIHRvIGFycml2ZS5cbiAgICAgICAgLy8gVE9ETzogQ29tYmluZSByZXRyeSB0aHJvdHRsaW5nIHdpdGggU3VzcGVuc2V5IGNvbW1pdHMuIFJpZ2h0IG5vdyB0aGV5XG4gICAgICAgIC8vIHJ1biBvbmUgYWZ0ZXIgdGhlIG90aGVyLlxuXG5cbiAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3RXaGVuUmVhZHkuYmluZChudWxsLCByb290LCBmaW5pc2hlZFdvcmssIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLCB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLCBsYW5lcywgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUpLCBtc1VudGlsVGltZW91dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21taXRSb290V2hlblJlYWR5KHJvb3QsIGZpbmlzaGVkV29yaywgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsIGxhbmVzLCB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0Um9vdFdoZW5SZWFkeShyb290LCBmaW5pc2hlZFdvcmssIHJlY292ZXJhYmxlRXJyb3JzLCB0cmFuc2l0aW9ucywgbGFuZXMsIHNwYXduZWRMYW5lKSB7XG4gIC8vIFRPRE86IENvbWJpbmUgcmV0cnkgdGhyb3R0bGluZyB3aXRoIFN1c3BlbnNleSBjb21taXRzLiBSaWdodCBub3cgdGhleSBydW5cbiAgLy8gb25lIGFmdGVyIHRoZSBvdGhlci5cbiAgaWYgKGluY2x1ZGVzT25seU5vblVyZ2VudExhbmVzKGxhbmVzKSkge1xuICAgIC8vIEJlZm9yZSBjb21taXR0aW5nLCBhc2sgdGhlIHJlbmRlcmVyIHdoZXRoZXIgdGhlIGhvc3QgdHJlZSBpcyByZWFkeS5cbiAgICAvLyBJZiBpdCdzIG5vdCwgd2UnbGwgd2FpdCB1bnRpbCBpdCBub3RpZmllcyB1cy5cbiAgICBzdGFydFN1c3BlbmRpbmdDb21taXQoKTsgLy8gVGhpcyB3aWxsIHdhbGsgdGhlIGNvbXBsZXRlZCBmaWJlciB0cmVlIGFuZCBhdHRhY2ggbGlzdGVuZXJzIHRvIGFsbFxuICAgIC8vIHRoZSBzdXNwZW5zZXkgcmVzb3VyY2VzLiBUaGUgcmVuZGVyZXIgaXMgcmVzcG9uc2libGUgZm9yIGFjY3VtdWxhdGluZ1xuICAgIC8vIGFsbCB0aGUgbG9hZCBldmVudHMuIFRoaXMgYWxsIGhhcHBlbnMgaW4gYSBzaW5nbGUgc3luY2hyb25vdXNcbiAgICAvLyB0cmFuc2FjdGlvbiwgc28gaXQgdHJhY2sgc3RhdGUgaW4gaXRzIG93biBtb2R1bGUgc2NvcGUuXG5cbiAgICBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpbmlzaGVkV29yayk7IC8vIEF0IHRoZSBlbmQsIGFzayB0aGUgcmVuZGVyZXIgaWYgaXQncyByZWFkeSB0byBjb21taXQsIG9yIGlmIHdlIHNob3VsZFxuICAgIC8vIHN1c3BlbmQuIElmIGl0J3Mgbm90IHJlYWR5LCBpdCB3aWxsIHJldHVybiBhIGNhbGxiYWNrIHRvIHN1YnNjcmliZSB0b1xuICAgIC8vIGEgcmVhZHkgZXZlbnQuXG5cbiAgICB2YXIgc2NoZWR1bGVQZW5kaW5nQ29tbWl0ID0gd2FpdEZvckNvbW1pdFRvQmVSZWFkeSgpO1xuXG4gICAgaWYgKHNjaGVkdWxlUGVuZGluZ0NvbW1pdCAhPT0gbnVsbCkge1xuICAgICAgLy8gTk9URTogd2FpdEZvckNvbW1pdFRvQmVSZWFkeSByZXR1cm5zIGEgc3Vic2NyaWJlIGZ1bmN0aW9uIHNvIHRoYXQgd2VcbiAgICAgIC8vIG9ubHkgYWxsb2NhdGUgYSBmdW5jdGlvbiBpZiB0aGUgY29tbWl0IGlzbid0IHJlYWR5IHlldC4gVGhlIG90aGVyXG4gICAgICAvLyBwYXR0ZXJuIHdvdWxkIGJlIHRvIGFsd2F5cyBwYXNzIGEgY2FsbGJhY2sgdG8gd2FpdEZvckNvbW1pdFRvQmVSZWFkeS5cbiAgICAgIC8vIE5vdCB5ZXQgcmVhZHkgdG8gY29tbWl0LiBEZWxheSB0aGUgY29tbWl0IHVudGlsIHRoZSByZW5kZXJlciBub3RpZmllc1xuICAgICAgLy8gdXMgdGhhdCBpdCdzIHJlYWR5LiBUaGlzIHdpbGwgYmUgY2FuY2VsZWQgaWYgd2Ugc3RhcnQgd29yayBvbiB0aGVcbiAgICAgIC8vIHJvb3QgYWdhaW4uXG4gICAgICByb290LmNhbmNlbFBlbmRpbmdDb21taXQgPSBzY2hlZHVsZVBlbmRpbmdDb21taXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QsIHJlY292ZXJhYmxlRXJyb3JzLCB0cmFuc2l0aW9ucykpO1xuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgbGFuZXMsIHNwYXduZWRMYW5lKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gLy8gT3RoZXJ3aXNlLCBjb21taXQgaW1tZWRpYXRlbHkuXG5cblxuICBjb21taXRSb290KHJvb3QsIHJlY292ZXJhYmxlRXJyb3JzLCB0cmFuc2l0aW9ucywgc3Bhd25lZExhbmUpO1xufVxuXG5mdW5jdGlvbiBpc1JlbmRlckNvbnNpc3RlbnRXaXRoRXh0ZXJuYWxTdG9yZXMoZmluaXNoZWRXb3JrKSB7XG4gIC8vIFNlYXJjaCB0aGUgcmVuZGVyZWQgdHJlZSBmb3IgZXh0ZXJuYWwgc3RvcmUgcmVhZHMsIGFuZCBjaGVjayB3aGV0aGVyIHRoZVxuICAvLyBzdG9yZXMgd2VyZSBtdXRhdGVkIGluIGEgY29uY3VycmVudCBldmVudC4gSW50ZW50aW9uYWxseSB1c2luZyBhbiBpdGVyYXRpdmVcbiAgLy8gbG9vcCBpbnN0ZWFkIG9mIHJlY3Vyc2lvbiBzbyB3ZSBjYW4gZXhpdCBlYXJseS5cbiAgdmFyIG5vZGUgPSBmaW5pc2hlZFdvcms7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAobm9kZS5mbGFncyAmIFN0b3JlQ29uc2lzdGVuY3kpIHtcbiAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IG5vZGUudXBkYXRlUXVldWU7XG5cbiAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY2hlY2tzID0gdXBkYXRlUXVldWUuc3RvcmVzO1xuXG4gICAgICAgIGlmIChjaGVja3MgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoZWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoZWNrID0gY2hlY2tzW2ldO1xuICAgICAgICAgICAgdmFyIGdldFNuYXBzaG90ID0gY2hlY2suZ2V0U25hcHNob3Q7XG4gICAgICAgICAgICB2YXIgcmVuZGVyZWRWYWx1ZSA9IGNoZWNrLnZhbHVlO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoIW9iamVjdElzKGdldFNuYXBzaG90KCksIHJlbmRlcmVkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYW4gaW5jb25zaXN0ZW50IHN0b3JlLlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gSWYgYGdldFNuYXBzaG90YCB0aHJvd3MsIHJldHVybiBgZmFsc2VgLiBUaGlzIHdpbGwgc2NoZWR1bGVcbiAgICAgICAgICAgICAgLy8gYSByZS1yZW5kZXIsIGFuZCB0aGUgZXJyb3Igd2lsbCBiZSByZXRocm93biBkdXJpbmcgcmVuZGVyLlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChub2RlLnN1YnRyZWVGbGFncyAmIFN0b3JlQ29uc2lzdGVuY3kgJiYgY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9IC8vIEZsb3cgZG9lc24ndCBrbm93IHRoaXMgaXMgdW5yZWFjaGFibGUsIGJ1dCBlc2xpbnQgZG9lc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcywgc3Bhd25lZExhbmUpIHtcbiAgLy8gV2hlbiBzdXNwZW5kaW5nLCB3ZSBzaG91bGQgYWx3YXlzIGV4Y2x1ZGUgbGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCBvciAobW9yZVxuICAvLyByYXJlbHksIHNpbmNlIHdlIHRyeSB0byBhdm9pZCBpdCkgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgLy8gVE9ETzogTG9sIG1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIGZhY3RvciB0aGlzIGJlc2lkZXMgdGhpc1xuICAvLyBvYm5veGlvdXNseSBuYW1lZCBmdW5jdGlvbiA6KVxuICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKHN1c3BlbmRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyk7XG4gIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoc3VzcGVuZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzKTtcbiAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBzdXNwZW5kZWRMYW5lcywgc3Bhd25lZExhbmUpO1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igc3luY2hyb25vdXMgdGFza3MgdGhhdCBkb24ndCBnb1xuLy8gdGhyb3VnaCBTY2hlZHVsZXJcblxuXG5mdW5jdGlvbiBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCwgbGFuZXMpIHtcbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuJyk7XG4gIH1cblxuICB2YXIgZGlkRmx1c2hQYXNzaXZlRWZmZWN0cyA9IGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcblxuICBpZiAoZGlkRmx1c2hQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIElmIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIGZsdXNoZWQsIGV4aXQgdG8gdGhlIG91dGVyIHdvcmsgbG9vcCBpbiB0aGUgcm9vdFxuICAgIC8vIHNjaGVkdWxlciwgc28gd2UgY2FuIHJlY29tcHV0ZSB0aGUgcHJpb3JpdHkuXG4gICAgLy8gVE9ETzogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGlzIGBlbnN1cmVSb290SXNTY2hlZHVsZWRgIGNhbGwgYmVjYXVzZVxuICAgIC8vIHRoaXMgcGF0aCBpcyBvbmx5IHJlYWNoYWJsZSBpZiB0aGUgcm9vdCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlIHNjaGVkdWxlLlxuICAgIC8vIEknbSBpbmNsdWRpbmcgaXQgb25seSBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgZXhpdCBwb2ludHMgZnJvbVxuICAgIC8vIHRoaXMgZnVuY3Rpb24uIENhbiBhZGRyZXNzIGluIGEgc3Vic2VxdWVudCByZWZhY3Rvci5cbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgc3luY05lc3RlZFVwZGF0ZUZsYWcoKTtcbiAgfVxuXG4gIHZhciBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuXG4gIGlmIChyb290LnRhZyAhPT0gTGVnYWN5Um9vdCAmJiBleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgIC8vIElmIHNvbWV0aGluZyB0aHJldyBhbiBlcnJvciwgdHJ5IHJlbmRlcmluZyBvbmUgbW9yZSB0aW1lLiBXZSdsbCByZW5kZXJcbiAgICAvLyBzeW5jaHJvbm91c2x5IHRvIGJsb2NrIGNvbmN1cnJlbnQgZGF0YSBtdXRhdGlvbnMsIGFuZCB3ZSdsbCBpbmNsdWRlc1xuICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgLy8gYXR0ZW1wdCwgd2UnbGwgZ2l2ZSB1cCBhbmQgY29tbWl0IHRoZSByZXN1bHRpbmcgdHJlZS5cbiAgICB2YXIgb3JpZ2luYWxseUF0dGVtcHRlZExhbmVzID0gbGFuZXM7XG4gICAgdmFyIGVycm9yUmV0cnlMYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QsIG9yaWdpbmFsbHlBdHRlbXB0ZWRMYW5lcyk7XG5cbiAgICBpZiAoZXJyb3JSZXRyeUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBsYW5lcyA9IGVycm9yUmV0cnlMYW5lcztcbiAgICAgIGV4aXRTdGF0dXMgPSByZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvcihyb290LCBvcmlnaW5hbGx5QXR0ZW1wdGVkTGFuZXMsIGVycm9yUmV0cnlMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgbGFuZXMsIE5vTGFuZSk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgIHRocm93IGZhdGFsRXJyb3I7XG4gIH1cblxuICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdERpZE5vdENvbXBsZXRlKSB7XG4gICAgLy8gVGhlIHJlbmRlciB1bndvdW5kIHdpdGhvdXQgY29tcGxldGluZyB0aGUgdHJlZS4gVGhpcyBoYXBwZW5zIGluIHNwZWNpYWxcbiAgICAvLyBjYXNlcyB3aGVyZSBuZWVkIHRvIGV4aXQgdGhlIGN1cnJlbnQgcmVuZGVyIHdpdGhvdXQgcHJvZHVjaW5nIGFcbiAgICAvLyBjb25zaXN0ZW50IHRyZWUgb3IgY29tbWl0dGluZy5cbiAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gQmVjYXVzZSB0aGlzIGlzIGEgc3luYyByZW5kZXIsIHdlXG4gIC8vIHdpbGwgY29tbWl0IGl0IGV2ZW4gaWYgc29tZXRoaW5nIHN1c3BlbmRlZC5cblxuXG4gIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICByb290LmZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gbGFuZXM7XG4gIGNvbW1pdFJvb3Qocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lKTsgLy8gQmVmb3JlIGV4aXRpbmcsIG1ha2Ugc3VyZSB0aGVyZSdzIGEgY2FsbGJhY2sgc2NoZWR1bGVkIGZvciB0aGUgbmV4dFxuICAvLyBwZW5kaW5nIGxldmVsLlxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmbHVzaFJvb3Qocm9vdCwgbGFuZXMpIHtcbiAgaWYgKGxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgdXBncmFkZVBlbmRpbmdMYW5lc1RvU3luYyhyb290LCBsYW5lcyk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuXG4gICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkge1xuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpOyAvLyBUT0RPOiBGb3IgaGlzdG9yaWNhbCByZWFzb25zIHRoaXMgZmx1c2hlcyBhbGwgc3luYyB3b3JrIGFjcm9zcyBhbGxcbiAgICAgIC8vIHJvb3RzLiBJdCBzaG91bGRuJ3QgcmVhbGx5IG1hdHRlciBlaXRoZXIgd2F5LCBidXQgd2UgY291bGQgY2hhbmdlIHRoaXNcbiAgICAgIC8vIHRvIG9ubHkgZmx1c2ggdGhlIGdpdmVuIHJvb3QuXG5cbiAgICAgIGZsdXNoU3luY1dvcmtPbkFsbFJvb3RzKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRFeGVjdXRpb25Db250ZXh0KCkge1xuICByZXR1cm4gZXhlY3V0aW9uQ29udGV4dDtcbn1cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7IC8vIElmIHRoZXJlIHdlcmUgbGVnYWN5IHN5bmMgdXBkYXRlcywgZmx1c2ggdGhlbSBhdCB0aGUgZW5kIG9mIHRoZSBvdXRlclxuICAgIC8vIG1vc3QgYmF0Y2hlZFVwZGF0ZXMtbGlrZSBtZXRob2QuXG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0ICYmIC8vIFRyZWF0IGBhY3RgIGFzIGlmIGl0J3MgaW5zaWRlIGBiYXRjaGVkVXBkYXRlc2AsIGV2ZW4gaW4gbGVnYWN5IG1vZGUuXG4gICAgIShSZWFjdEN1cnJlbnRBY3RRdWV1ZS5pc0JhdGNoaW5nTGVnYWN5KSkge1xuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jV29ya09uTGVnYWN5Um9vdHNPbmx5KCk7XG4gICAgfVxuICB9XG59XG4vLyBXYXJuaW5nLCB0aGlzIG9wdHMtb3V0IG9mIGNoZWNraW5nIHRoZSBmdW5jdGlvbiBib2R5LlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5cbmZ1bmN0aW9uIGZsdXNoU3luYyQxKGZuKSB7XG4gIC8vIEluIGxlZ2FjeSBtb2RlLCB3ZSBmbHVzaCBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZVxuICAvLyBuZXh0IGV2ZW50LCBub3QgYXQgdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgb25lLlxuICBpZiAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgIT09IG51bGwgJiYgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMudGFnID09PSBMZWdhY3lSb290ICYmIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkge1xuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgfVxuXG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG4gIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoKTtcblxuICB0cnkge1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IG51bGw7XG4gICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KERpc2NyZXRlRXZlbnRQcmlvcml0eSk7XG5cbiAgICBpZiAoZm4pIHtcbiAgICAgIHJldHVybiBmbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNQcmlvcml0eSk7XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0OyAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgIC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgaGFwcGVuIGV2ZW4gaWYgYmF0Y2hlZFVwZGF0ZXMgaXMgaGlnaGVyIHVwXG4gICAgLy8gdGhlIHN0YWNrLlxuXG4gICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkge1xuICAgICAgZmx1c2hTeW5jV29ya09uQWxsUm9vdHMoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGlzQWxyZWFkeVJlbmRlcmluZygpIHtcbiAgLy8gVXNlZCBieSB0aGUgcmVuZGVyZXIgdG8gcHJpbnQgYSB3YXJuaW5nIGlmIGNlcnRhaW4gQVBJcyBhcmUgY2FsbGVkIGZyb21cbiAgLy8gdGhlIHdyb25nIGNvbnRleHQuXG4gIHJldHVybiAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQ7XG59XG4vLyBoaWRkZW4gc3VidHJlZS4gVGhlIHN0YWNrIGxvZ2ljIGlzIG1hbmFnZWQgdGhlcmUgYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHlcbi8vIHBsYWNlIHRoYXQgZXZlciBtb2RpZmllcyBpdC4gV2hpY2ggbW9kdWxlIGl0IGxpdmVzIGluIGRvZXNuJ3QgbWF0dGVyIGZvclxuLy8gcGVyZm9ybWFuY2UgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIHdpbGwgZ2V0IGlubGluZWQgcmVnYXJkbGVzc1xuXG5mdW5jdGlvbiBzZXRFbnRhbmdsZWRSZW5kZXJMYW5lcyhuZXdFbnRhbmdsZWRSZW5kZXJMYW5lcykge1xuICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IG5ld0VudGFuZ2xlZFJlbmRlckxhbmVzO1xufVxuZnVuY3Rpb24gZ2V0RW50YW5nbGVkUmVuZGVyTGFuZXMoKSB7XG4gIHJldHVybiBlbnRhbmdsZWRSZW5kZXJMYW5lcztcbn1cblxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IG51bGwpIHJldHVybjtcbiAgdmFyIGludGVycnVwdGVkV29yaztcblxuICBpZiAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPT09IE5vdFN1c3BlbmRlZCkge1xuICAgIC8vIE5vcm1hbCBjYXNlLiBXb3JrLWluLXByb2dyZXNzIGhhc24ndCBzdGFydGVkIHlldC4gVW53aW5kIGFsbFxuICAgIC8vIGl0cyBwYXJlbnRzLlxuICAgIGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgfSBlbHNlIHtcbiAgICAvLyBXb3JrLWluLXByb2dyZXNzIGlzIGluIHN1c3BlbmRlZCBzdGF0ZS4gUmVzZXQgdGhlIHdvcmsgbG9vcCBhbmQgdW53aW5kXG4gICAgLy8gYm90aCB0aGUgc3VzcGVuZGVkIGZpYmVyIGFuZCBhbGwgaXRzIHBhcmVudHMuXG4gICAgcmVzZXRTdXNwZW5kZWRXb3JrTG9vcE9uVW53aW5kKHdvcmtJblByb2dyZXNzKTtcbiAgICBpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIHdoaWxlIChpbnRlcnJ1cHRlZFdvcmsgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IGludGVycnVwdGVkV29yay5hbHRlcm5hdGU7XG4gICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIGludGVycnVwdGVkV29yayk7XG4gICAgaW50ZXJydXB0ZWRXb3JrID0gaW50ZXJydXB0ZWRXb3JrLnJldHVybjtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcblxuICBpZiAodGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0KSB7XG4gICAgLy8gVGhlIHJvb3QgcHJldmlvdXMgc3VzcGVuZGVkIGFuZCBzY2hlZHVsZWQgYSB0aW1lb3V0IHRvIGNvbW1pdCBhIGZhbGxiYWNrXG4gICAgLy8gc3RhdGUuIE5vdyB0aGF0IHdlIGhhdmUgYWRkaXRpb25hbCB3b3JrLCBjYW5jZWwgdGhlIHRpbWVvdXQuXG4gICAgcm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0OyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSBDb21wbGFpbnMgbm9UaW1lb3V0IGlzIG5vdCBhIFRpbWVvdXRJRCwgZGVzcGl0ZSB0aGUgY2hlY2sgYWJvdmVcblxuICAgIGNhbmNlbFRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gIH1cblxuICB2YXIgY2FuY2VsUGVuZGluZ0NvbW1pdCA9IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdDtcblxuICBpZiAoY2FuY2VsUGVuZGluZ0NvbW1pdCAhPT0gbnVsbCkge1xuICAgIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IG51bGw7XG4gICAgY2FuY2VsUGVuZGluZ0NvbW1pdCgpO1xuICB9XG5cbiAgcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCk7XG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IHJvb3Q7XG4gIHZhciByb290V29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyb290LmN1cnJlbnQsIG51bGwpO1xuICB3b3JrSW5Qcm9ncmVzcyA9IHJvb3RXb3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBsYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgPSBmYWxzZTtcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPSBOb0xhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID0gTm9MYW5lO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBudWxsOyAvLyBHZXQgdGhlIGxhbmVzIHRoYXQgYXJlIGVudGFuZ2xlZCB3aXRoIHdoYXRldmVyIHdlJ3JlIGFib3V0IHRvIHJlbmRlci4gV2VcbiAgLy8gdHJhY2sgdGhlc2Ugc2VwYXJhdGVseSBzbyB3ZSBjYW4gZGlzdGluZ3Vpc2ggdGhlIHByaW9yaXR5IG9mIHRoZSByZW5kZXJcbiAgLy8gdGFzayBmcm9tIHRoZSBwcmlvcml0eSBvZiB0aGUgbGFuZXMgaXQgaXMgZW50YW5nbGVkIHdpdGguIEZvciBleGFtcGxlLCBhXG4gIC8vIHRyYW5zaXRpb24gbWF5IG5vdCBiZSBhbGxvd2VkIHRvIGZpbmlzaCB1bmxlc3MgaXQgaW5jbHVkZXMgdGhlIFN5bmMgbGFuZSxcbiAgLy8gd2hpY2ggaXMgY3VycmVudGx5IHN1c3BlbmRlZC4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVuZGVyIHRoZSBUcmFuc2l0aW9uXG4gIC8vIGFuZCBTeW5jIGxhbmUgaW4gdGhlIHNhbWUgYmF0Y2gsIGJ1dCBhdCBUcmFuc2l0aW9uIHByaW9yaXR5LCBiZWNhdXNlIHRoZVxuICAvLyBTeW5jIGxhbmUgYWxyZWFkeSBzdXNwZW5kZWQuXG5cbiAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBnZXRFbnRhbmdsZWRMYW5lcyhyb290LCBsYW5lcyk7XG4gIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKTtcblxuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncygpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3RXb3JrSW5Qcm9ncmVzcztcbn1cblxuZnVuY3Rpb24gcmVzZXRTdXNwZW5kZWRXb3JrTG9vcE9uVW53aW5kKGZpYmVyKSB7XG4gIC8vIFJlc2V0IG1vZHVsZS1sZXZlbCBzdGF0ZSB0aGF0IHdhcyBzZXQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICByZXNldEhvb2tzT25VbndpbmQoZmliZXIpO1xuICByZXNldENoaWxkUmVjb25jaWxlck9uVW53aW5kKCk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRocm93KHJvb3QsIHRocm93blZhbHVlKSB7XG4gIC8vIEEgY29tcG9uZW50IHRocmV3IGFuIGV4Y2VwdGlvbi4gVXN1YWxseSB0aGlzIGlzIGJlY2F1c2UgaXQgc3VzcGVuZGVkLCBidXRcbiAgLy8gaXQgYWxzbyBpbmNsdWRlcyByZWd1bGFyIHByb2dyYW0gZXJyb3JzLlxuICAvL1xuICAvLyBXZSdyZSBlaXRoZXIgZ29pbmcgdG8gdW53aW5kIHRoZSBzdGFjayB0byBzaG93IGEgU3VzcGVuc2Ugb3IgZXJyb3JcbiAgLy8gYm91bmRhcnksIG9yIHdlJ3JlIGdvaW5nIHRvIHJlcGxheSB0aGUgY29tcG9uZW50IGFnYWluLiBMaWtlIGFmdGVyIGFcbiAgLy8gcHJvbWlzZSByZXNvbHZlcy5cbiAgLy9cbiAgLy8gVW50aWwgd2UgZGVjaWRlIHdoZXRoZXIgd2UncmUgZ29pbmcgdG8gdW53aW5kIG9yIHJlcGxheSwgd2Ugc2hvdWxkIHByZXNlcnZlXG4gIC8vIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB3b3JrIGxvb3Agd2l0aG91dCByZXNldHRpbmcgYW55dGhpbmcuXG4gIC8vXG4gIC8vIElmIHdlIGRvIGRlY2lkZSB0byB1bndpbmQgdGhlIHN0YWNrLCBtb2R1bGUtbGV2ZWwgdmFyaWFibGVzIHdpbGwgYmUgcmVzZXRcbiAgLy8gaW4gcmVzZXRTdXNwZW5kZWRXb3JrTG9vcE9uVW53aW5kLlxuICAvLyBUaGVzZSBzaG91bGQgYmUgcmVzZXQgaW1tZWRpYXRlbHkgYmVjYXVzZSB0aGV5J3JlIG9ubHkgc3VwcG9zZWQgdG8gYmUgc2V0XG4gIC8vIHdoZW4gUmVhY3QgaXMgZXhlY3V0aW5nIHVzZXIgY29kZS5cbiAgcmVzZXRIb29rc0FmdGVyVGhyb3coKTtcbiAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gbnVsbDtcblxuICBpZiAodGhyb3duVmFsdWUgPT09IFN1c3BlbnNlRXhjZXB0aW9uKSB7XG4gICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgdHlwZSBvZiBleGNlcHRpb24gdXNlZCBmb3IgU3VzcGVuc2UuIEZvciBoaXN0b3JpY2FsXG4gICAgLy8gcmVhc29ucywgdGhlIHJlc3Qgb2YgdGhlIFN1c3BlbnNlIGltcGxlbWVudGF0aW9uIGV4cGVjdHMgdGhlIHRocm93biB2YWx1ZVxuICAgIC8vIHRvIGJlIGEgdGhlbmFibGUsIGJlY2F1c2UgYmVmb3JlIGB1c2VgIGV4aXN0ZWQgdGhhdCB3YXMgdGhlICh1bnN0YWJsZSlcbiAgICAvLyBBUEkgZm9yIHN1c3BlbmRpbmcuIFRoaXMgaW1wbGVtZW50YXRpb24gZGV0YWlsIGNhbiBjaGFuZ2UgbGF0ZXIsIG9uY2Ugd2VcbiAgICAvLyBkZXByZWNhdGUgdGhlIG9sZCBBUEkgaW4gZmF2b3Igb2YgYHVzZWAuXG4gICAgdGhyb3duVmFsdWUgPSBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpO1xuICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gc2hvdWxkUmVtYWluT25QcmV2aW91c1NjcmVlbigpICYmIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBwZW5kaW5nIHVwZGF0ZXMgdGhhdCBtaWdodCBwb3NzaWJseSB1bmJsb2NrIHRoaXNcbiAgICAvLyBjb21wb25lbnQgZnJvbSBzdXNwZW5kaW5nLiBUaGlzIG1pcnJvcnMgdGhlIGNoZWNrIGluXG4gICAgLy8gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZS4gV2Ugc2hvdWxkIGF0dGVtcHQgdG8gdW5pZnkgdGhlbSBzb21laG93LlxuICAgIC8vIFRPRE86IENvbnNpZGVyIHVud2luZGluZyBpbW1lZGlhdGVseSwgdXNpbmcgdGhlXG4gICAgLy8gU3VzcGVuZGVkT25IeWRyYXRpb24gbWVjaGFuaXNtLlxuICAgICFpbmNsdWRlc05vbklkbGVXb3JrKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcykgJiYgIWluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMpID8gLy8gU3VzcGVuZCB3b3JrIGxvb3AgdW50aWwgZGF0YSByZXNvbHZlc1xuICAgIFN1c3BlbmRlZE9uRGF0YSA6IC8vIERvbid0IHN1c3BlbmQgd29yayBsb29wLCBleGNlcHQgdG8gY2hlY2sgaWYgdGhlIGRhdGEgaGFzXG4gICAgLy8gaW1tZWRpYXRlbHkgcmVzb2x2ZWQgKGkuZS4gaW4gYSBtaWNyb3Rhc2spLiBPdGhlcndpc2UsIHRyaWdnZXIgdGhlXG4gICAgLy8gbmVhcmVzdCBTdXNwZW5zZSBmYWxsYmFjay5cbiAgICBTdXNwZW5kZWRPbkltbWVkaWF0ZTtcbiAgfSBlbHNlIGlmICh0aHJvd25WYWx1ZSA9PT0gU3VzcGVuc2V5Q29tbWl0RXhjZXB0aW9uKSB7XG4gICAgdGhyb3duVmFsdWUgPSBnZXRTdXNwZW5kZWRUaGVuYWJsZSgpO1xuICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gU3VzcGVuZGVkT25JbnN0YW5jZTtcbiAgfSBlbHNlIGlmICh0aHJvd25WYWx1ZSA9PT0gU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uKSB7XG4gICAgLy8gQW4gdXBkYXRlIGZsb3dlZCBpbnRvIGEgZGVoeWRyYXRlZCBib3VuZGFyeS4gQmVmb3JlIHdlIGNhbiBhcHBseSB0aGVcbiAgICAvLyB1cGRhdGUsIHdlIG5lZWQgdG8gZmluaXNoIGh5ZHJhdGluZy4gSW50ZXJydXB0IHRoZSB3b3JrLWluLXByb2dyZXNzXG4gICAgLy8gcmVuZGVyIHNvIHdlIGNhbiByZXN0YXJ0IGF0IHRoZSBoeWRyYXRpb24gbGFuZS5cbiAgICAvL1xuICAgIC8vIFRoZSBpZGVhbCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZSBhYmxlIHRvIHN3aXRjaCBjb250ZXh0cyB3aXRob3V0XG4gICAgLy8gdW53aW5kaW5nIHRoZSBjdXJyZW50IHN0YWNrLlxuICAgIC8vXG4gICAgLy8gV2UgY291bGQgbmFtZSB0aGlzIHNvbWV0aGluZyBtb3JlIGdlbmVyYWwgYnV0IGFzIG9mIG5vdyBpdCdzIHRoZSBvbmx5XG4gICAgLy8gY2FzZSB3aGVyZSB3ZSB0aGluayB0aGlzIHNob3VsZCBoYXBwZW4uXG4gICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBTdXNwZW5kZWRPbkh5ZHJhdGlvbjtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBlcnJvci5cbiAgICB2YXIgaXNXYWtlYWJsZSA9IHRocm93blZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB0aHJvd25WYWx1ZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHRocm93blZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbic7XG4gICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBpc1dha2VhYmxlID8gLy8gQSB3YWtlYWJsZSBvYmplY3Qgd2FzIHRocm93biBieSBhIGxlZ2FjeSBTdXNwZW5zZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAvLyBUaGlzIGhhcyBzbGlnaHRseSBkaWZmZXJlbnQgYmVoYXZpb3IgdGhhbiBzdXNwZW5kaW5nIHdpdGggYHVzZWAuXG4gICAgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlIDogLy8gVGhpcyBpcyBhIHJlZ3VsYXIgZXJyb3IuIElmIHNvbWV0aGluZyBlYXJsaWVyIGluIHRoZSBjb21wb25lbnQgYWxyZWFkeVxuICAgIC8vIHN1c3BlbmRlZCwgd2UgbXVzdCBjbGVhciB0aGUgdGhlbmFibGUgc3RhdGUgdG8gdW5ibG9jayB0aGUgd29yayBsb29wLlxuICAgIFN1c3BlbmRlZE9uRXJyb3I7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gdGhyb3duVmFsdWU7XG4gIHZhciBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuXG4gIGlmIChlcnJvcmVkV29yayA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgYSBmYXRhbCBlcnJvclxuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSB0aHJvd25WYWx1ZTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZXJyb3JlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgLy8gUmVjb3JkIHRoZSB0aW1lIHNwZW50IHJlbmRlcmluZyBiZWZvcmUgYW4gZXJyb3Igd2FzIHRocm93bi4gVGhpc1xuICAgIC8vIGF2b2lkcyBpbmFjY3VyYXRlIFByb2ZpbGVyIGR1cmF0aW9ucyBpbiB0aGUgY2FzZSBvZiBhXG4gICAgLy8gc3VzcGVuZGVkIHJlbmRlci5cbiAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGVycm9yZWRXb3JrLCB0cnVlKTtcbiAgfVxuXG4gIHtcbiAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuXG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbikge1xuICAgICAgY2FzZSBTdXNwZW5kZWRPbkVycm9yOlxuICAgICAgICB7XG4gICAgICAgICAgbWFya0NvbXBvbmVudEVycm9yZWQoZXJyb3JlZFdvcmssIHRocm93blZhbHVlLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBTdXNwZW5kZWRPbkRhdGE6XG4gICAgICBjYXNlIFN1c3BlbmRlZE9uSW1tZWRpYXRlOlxuICAgICAgY2FzZSBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2U6XG4gICAgICBjYXNlIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciB3YWtlYWJsZSA9IHRocm93blZhbHVlO1xuICAgICAgICAgIG1hcmtDb21wb25lbnRTdXNwZW5kZWQoZXJyb3JlZFdvcmssIHdha2VhYmxlLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkUmVtYWluT25QcmV2aW91c1NjcmVlbigpIHtcbiAgLy8gVGhpcyBpcyBhc2tpbmcgd2hldGhlciBpdCdzIGJldHRlciB0byBzdXNwZW5kIHRoZSB0cmFuc2l0aW9uIGFuZCByZW1haW5cbiAgLy8gb24gdGhlIHByZXZpb3VzIHNjcmVlbiwgdmVyc3VzIHNob3dpbmcgYSBmYWxsYmFjayBhcyBzb29uIGFzIHBvc3NpYmxlLiBJdFxuICAvLyB0YWtlcyBpbnRvIGFjY291bnQgYm90aCB0aGUgcHJpb3JpdHkgb2YgcmVuZGVyIGFuZCBhbHNvIHdoZXRoZXIgc2hvd2luZyBhXG4gIC8vIGZhbGxiYWNrIHdvdWxkIHByb2R1Y2UgYSBkZXNpcmFibGUgdXNlciBleHBlcmllbmNlLlxuICB2YXIgaGFuZGxlciA9IGdldFN1c3BlbnNlSGFuZGxlcigpO1xuXG4gIGlmIChoYW5kbGVyID09PSBudWxsKSB7XG4gICAgLy8gVGhlcmUncyBubyBTdXNwZW5zZSBib3VuZGFyeSB0aGF0IGNhbiBwcm92aWRlIGEgZmFsbGJhY2suIFdlIGhhdmUgbm9cbiAgICAvLyBjaG9pY2UgYnV0IHRvIHJlbWFpbiBvbiB0aGUgcHJldmlvdXMgc2NyZWVuLlxuICAgIC8vIE5PVEU6IFdlIGRvIHRoaXMgZXZlbiBmb3Igc3luYyB1cGRhdGVzLCBmb3IgbGFjayBvZiBhbnkgYmV0dGVyIG9wdGlvbi4gSW5cbiAgICAvLyB0aGUgZnV0dXJlLCB3ZSBtYXkgY2hhbmdlIGhvdyB3ZSBoYW5kbGUgdGhpcywgbGlrZSBieSBwdXR0aW5nIHRoZSB3aG9sZVxuICAgIC8vIHJvb3QgaW50byBhIFwiZGV0YWNoZWRcIiBtb2RlLlxuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFRPRE86IE9uY2UgYHVzZWAgaGFzIGZ1bGx5IHJlcGxhY2VkIHRoZSBgdGhyb3cgcHJvbWlzZWAgcGF0dGVybiwgd2Ugc2hvdWxkXG4gIC8vIGJlIGFibGUgdG8gcmVtb3ZlIHRoZSBlcXVpdmFsZW50IGNoZWNrIGluIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIsIGFuZCByZWx5XG4gIC8vIGp1c3Qgb24gdGhpcyBvbmUuXG5cblxuICBpZiAoaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpKSB7XG4gICAgaWYgKGdldFNoZWxsQm91bmRhcnkoKSA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgcmVuZGVyaW5nIGluc2lkZSB0aGUgXCJzaGVsbFwiIG9mIHRoZSBhcHAuIEFjdGl2YXRpbmcgdGhlIG5lYXJlc3RcbiAgICAgIC8vIGZhbGxiYWNrIHdvdWxkIGNhdXNlIHZpc2libGUgY29udGVudCB0byBkaXNhcHBlYXIuIEl0J3MgYmV0dGVyIHRvXG4gICAgICAvLyBzdXNwZW5kIHRoZSB0cmFuc2l0aW9uIGFuZCByZW1haW4gb24gdGhlIHByZXZpb3VzIHNjcmVlbi5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSdyZSByZW5kZXJpbmcgY29udGVudCB0aGF0IHdhc24ndCBwYXJ0IG9mIHRoZSBwcmV2aW91cyBzY3JlZW4uXG4gICAgICAvLyBSYXRoZXIgdGhhbiBibG9jayB0aGUgdHJhbnNpdGlvbiwgaXQncyBiZXR0ZXIgdG8gc2hvdyBhIGZhbGxiYWNrIGFzXG4gICAgICAvLyBzb29uIGFzIHBvc3NpYmxlLiBUaGUgYXBwZWFyYW5jZSBvZiBhbnkgbmVzdGVkIGZhbGxiYWNrcyB3aWxsIGJlXG4gICAgICAvLyB0aHJvdHRsZWQgdG8gYXZvaWQgamFuay5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5jbHVkZXNPbmx5UmV0cmllcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykgfHwgLy8gSW4gdGhpcyBjb250ZXh0LCBhbiBPZmZzY3JlZW5MYW5lIGNvdW50cyBhcyBhIFJldHJ5XG4gIC8vIFRPRE86IEl0J3MgYmVjb21lIGluY3JlYXNpbmdseSBjbGVhciB0aGF0IFJldHJpZXMgYW5kIE9mZnNjcmVlbiBhcmVcbiAgLy8gZGVlcGx5IGNvbm5lY3RlZC4gVGhleSBwcm9iYWJseSBjYW4gYmUgdW5pZmllZCBmdXJ0aGVyLlxuICBpbmNsdWRlc1NvbWVMYW5lKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSkge1xuICAgIC8vIER1cmluZyBhIHJldHJ5LCB3ZSBjYW4gc3VzcGVuZCByZW5kZXJpbmcgaWYgdGhlIG5lYXJlc3QgU3VzcGVuc2UgYm91bmRhcnlcbiAgICAvLyBpcyB0aGUgYm91bmRhcnkgb2YgdGhlIFwic2hlbGxcIiwgYmVjYXVzZSB3ZSdyZSBndWFyYW50ZWVkIG5vdCB0byBibG9ja1xuICAgIC8vIGFueSBuZXcgY29udGVudCBmcm9tIGFwcGVhcmluZy5cbiAgICAvL1xuICAgIC8vIFRoZSByZWFzb24gd2UgbXVzdCBjaGVjayBpZiB0aGlzIGlzIGEgcmV0cnkgaXMgYmVjYXVzZSBpdCBndWFyYW50ZWVzXG4gICAgLy8gdGhhdCBzdXNwZW5kaW5nIHRoZSB3b3JrIGxvb3Agd29uJ3QgYmxvY2sgYW4gYWN0dWFsIHVwZGF0ZSwgYmVjYXVzZVxuICAgIC8vIHJldHJpZXMgZG9uJ3QgXCJ1cGRhdGVcIiBhbnl0aGluZzsgdGhleSBmaWxsIGluIGZhbGxiYWNrcyB0aGF0IHdlcmUgbGVmdFxuICAgIC8vIGJlaGluZCBieSBhIHByZXZpb3VzIHRyYW5zaXRpb24uXG4gICAgcmV0dXJuIGhhbmRsZXIgPT09IGdldFNoZWxsQm91bmRhcnkoKTtcbiAgfSAvLyBGb3IgYWxsIG90aGVyIExhbmVzIGJlc2lkZXMgVHJhbnNpdGlvbnMgYW5kIFJldHJpZXMsIHdlIHNob3VsZCBub3Qgd2FpdFxuICAvLyBmb3IgdGhlIGRhdGEgdG8gbG9hZC5cblxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcHVzaERpc3BhdGNoZXIoY29udGFpbmVyKSB7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIGlmIChwcmV2RGlzcGF0Y2hlciA9PT0gbnVsbCkge1xuICAgIC8vIFRoZSBSZWFjdCBpc29tb3JwaGljIHBhY2thZ2UgZG9lcyBub3QgaW5jbHVkZSBhIGRlZmF1bHQgZGlzcGF0Y2hlci5cbiAgICAvLyBJbnN0ZWFkIHRoZSBmaXJzdCByZW5kZXJlciB3aWxsIGxhemlseSBhdHRhY2ggb25lLCBpbiBvcmRlciB0byBnaXZlXG4gICAgLy8gbmljZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgcmV0dXJuIENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJldkRpc3BhdGNoZXI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcikge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gcHVzaENhY2hlRGlzcGF0Y2hlcigpIHtcbiAge1xuICAgIHZhciBwcmV2Q2FjaGVEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50Q2FjaGUuY3VycmVudDtcbiAgICBSZWFjdEN1cnJlbnRDYWNoZS5jdXJyZW50ID0gRGVmYXVsdENhY2hlRGlzcGF0Y2hlcjtcbiAgICByZXR1cm4gcHJldkNhY2hlRGlzcGF0Y2hlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BDYWNoZURpc3BhdGNoZXIocHJldkNhY2hlRGlzcGF0Y2hlcikge1xuICB7XG4gICAgUmVhY3RDdXJyZW50Q2FjaGUuY3VycmVudCA9IHByZXZDYWNoZURpc3BhdGNoZXI7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCkge1xuICBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gbm93JDEoKTtcbn1cbmZ1bmN0aW9uIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobGFuZSkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBtZXJnZUxhbmVzKGxhbmUsIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyk7XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluUHJvZ3Jlc3MpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZDtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk7IC8vIENoZWNrIGlmIHRoZXJlIGFyZSB1cGRhdGVzIHRoYXQgd2Ugc2tpcHBlZCB0cmVlIHRoYXQgbWlnaHQgaGF2ZSB1bmJsb2NrZWRcbiAgLy8gdGhpcyByZW5kZXIuXG5cbiAgaWYgKChpbmNsdWRlc05vbklkbGVXb3JrKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcykgfHwgaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcykpICYmIHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbCkge1xuICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgcmVuZGVyIGFzIHN1c3BlbmRlZCBzbyB0aGF0IHdlIHN3aXRjaCB0byB3b3JraW5nIG9uXG4gICAgLy8gdGhlIHVwZGF0ZXMgdGhhdCB3ZXJlIHNraXBwZWQuIFVzdWFsbHkgd2Ugb25seSBzdXNwZW5kIGF0IHRoZSBlbmQgb2ZcbiAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIFRPRE86IFdlIHNob3VsZCBwcm9iYWJseSBhbHdheXMgbWFyayB0aGUgcm9vdCBhcyBzdXNwZW5kZWQgaW1tZWRpYXRlbHlcbiAgICAvLyAoaW5zaWRlIHRoaXMgZnVuY3Rpb24pLCBzaW5jZSBieSBzdXNwZW5kaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHJlbmRlclxuICAgIC8vIHBoYXNlIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgbWlzdGFrZSB3aGVyZSB3ZSBzdXNwZW5kIGxhbmVzIHRoYXQgd2VyZVxuICAgIC8vIHBpbmdlZCBvciB1cGRhdGVkIHdoaWxlIHdlIHdlcmUgcmVuZGVyaW5nLlxuICAgIC8vIFRPRE86IENvbnNpZGVyIHVud2luZGluZyBpbW1lZGlhdGVseSwgdXNpbmcgdGhlXG4gICAgLy8gU3VzcGVuZGVkT25IeWRyYXRpb24gbWVjaGFuaXNtLlxuICAgIG1hcmtSb290U3VzcGVuZGVkKHdvcmtJblByb2dyZXNzUm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkRXJyb3IoZXJyb3IpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEVycm9yZWQ7XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9PT0gbnVsbCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPSBbZXJyb3JdO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMucHVzaChlcnJvcik7XG4gIH1cbn0gLy8gQ2FsbGVkIGR1cmluZyByZW5kZXIgdG8gZGV0ZXJtaW5lIGlmIGFueXRoaW5nIGhhcyBzdXNwZW5kZWQuXG4vLyBSZXR1cm5zIGZhbHNlIGlmIHdlJ3JlIG5vdCBzdXJlLlxuXG5mdW5jdGlvbiByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSB7XG4gIC8vIElmIHNvbWV0aGluZyBlcnJvcmVkIG9yIGNvbXBsZXRlZCwgd2UgY2FuJ3QgcmVhbGx5IGJlIHN1cmUsXG4gIC8vIHNvIHRob3NlIGFyZSBmYWxzZS5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJblByb2dyZXNzO1xufSAvLyBUT0RPOiBPdmVyIHRpbWUsIHRoaXMgZnVuY3Rpb24gYW5kIHJlbmRlclJvb3RDb25jdXJyZW50IGhhdmUgYmVjb21lIG1vcmVcbi8vIGFuZCBtb3JlIHNpbWlsYXIuIE5vdCBzdXJlIGl0IG1ha2VzIHNlbnNlIHRvIG1haW50YWluIGZvcmtlZCBwYXRocy4gQ29uc2lkZXJcbi8vIHVuaWZ5aW5nIHRoZW0gYWdhaW4uXG5cbmZ1bmN0aW9uIHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTtcbiAgdmFyIHByZXZDYWNoZURpc3BhdGNoZXIgPSBwdXNoQ2FjaGVEaXNwYXRjaGVyKCk7IC8vIElmIHRoZSByb290IG9yIGxhbmVzIGhhdmUgY2hhbmdlZCwgdGhyb3cgb3V0IHRoZSBleGlzdGluZyBzdGFja1xuICAvLyBhbmQgcHJlcGFyZSBhIGZyZXNoIG9uZS4gT3RoZXJ3aXNlIHdlJ2xsIGNvbnRpbnVlIHdoZXJlIHdlIGxlZnQgb2ZmLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IHJvb3QgfHwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgIT09IGxhbmVzKSB7XG4gICAge1xuICAgICAgaWYgKGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgICAgIHZhciBtZW1vaXplZFVwZGF0ZXJzID0gcm9vdC5tZW1vaXplZFVwZGF0ZXJzO1xuXG4gICAgICAgIGlmIChtZW1vaXplZFVwZGF0ZXJzLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycy5jbGVhcigpO1xuICAgICAgICB9IC8vIEF0IHRoaXMgcG9pbnQsIG1vdmUgRmliZXJzIHRoYXQgc2NoZWR1bGVkIHRoZSB1cGNvbWluZyB3b3JrIGZyb20gdGhlIE1hcCB0byB0aGUgU2V0LlxuICAgICAgICAvLyBJZiB3ZSBiYWlsb3V0IG9uIHRoaXMgd29yaywgd2UnbGwgbW92ZSB0aGVtIGJhY2sgKGxpa2UgYWJvdmUpLlxuICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBtb3ZlIHRoZW0gbm93IGluIGNhc2UgdGhlIHdvcmsgc3Bhd25zIG1vcmUgd29yayBhdCB0aGUgc2FtZSBwcmlvcml0eSB3aXRoIGRpZmZlcmVudCB1cGRhdGVycy5cbiAgICAgICAgLy8gVGhhdCB3YXkgd2UgY2FuIGtlZXAgdGhlIGN1cnJlbnQgdXBkYXRlIGFuZCBmdXR1cmUgdXBkYXRlcyBzZXBhcmF0ZS5cblxuXG4gICAgICAgIG1vdmVQZW5kaW5nRmliZXJzVG9NZW1vaXplZChyb290LCBsYW5lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IGdldFRyYW5zaXRpb25zRm9yTGFuZXMoKTtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gIH1cblxuICB7XG4gICAgbWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpO1xuICB9XG5cbiAgdmFyIGRpZFN1c3BlbmRJblNoZWxsID0gZmFsc2U7XG5cbiAgb3V0ZXI6IGRvIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICE9PSBOb3RTdXNwZW5kZWQgJiYgd29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhlIHdvcmsgbG9vcCBpcyBzdXNwZW5kZWQuIER1cmluZyBhIHN5bmNocm9ub3VzIHJlbmRlciwgd2UgZG9uJ3RcbiAgICAgICAgLy8geWllbGQgdG8gdGhlIG1haW4gdGhyZWFkLiBJbW1lZGlhdGVseSB1bndpbmQgdGhlIHN0YWNrLiBUaGlzIHdpbGxcbiAgICAgICAgLy8gdHJpZ2dlciBlaXRoZXIgYSBmYWxsYmFjayBvciBhbiBlcnJvciBib3VuZGFyeS5cbiAgICAgICAgLy8gVE9ETzogRm9yIGRpc2NyZXRlIGFuZCBcImRlZmF1bHRcIiB1cGRhdGVzIChhbnl0aGluZyB0aGF0J3Mgbm90XG4gICAgICAgIC8vIGZsdXNoU3luYyksIHdlIHdhbnQgdG8gd2FpdCBmb3IgdGhlIG1pY3JvdGFza3MgdGhlIGZsdXNoIGJlZm9yZVxuICAgICAgICAvLyB1bndpbmRpbmcuIFdpbGwgcHJvYmFibHkgaW1wbGVtZW50IHRoaXMgdXNpbmcgcmVuZGVyUm9vdENvbmN1cnJlbnQsXG4gICAgICAgIC8vIG9yIG1lcmdlIHJlbmRlclJvb3RTeW5jIGFuZCByZW5kZXJSb290Q29uY3VycmVudCBpbnRvIHRoZSBzYW1lXG4gICAgICAgIC8vIGZ1bmN0aW9uIGFuZCBmb3JrIHRoZSBiZWhhdmlvciBzb21lIG90aGVyIHdheS5cbiAgICAgICAgdmFyIHVuaXRPZldvcmsgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgdmFyIHRocm93blZhbHVlID0gd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZTtcblxuICAgICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKSB7XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkh5ZHJhdGlvbjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gU2VsZWN0aXZlIGh5ZHJhdGlvbi4gQW4gdXBkYXRlIGZsb3dlZCBpbnRvIGEgZGVoeWRyYXRlZCB0cmVlLlxuICAgICAgICAgICAgICAvLyBJbnRlcnJ1cHQgdGhlIGN1cnJlbnQgcmVuZGVyIHNvIHRoZSB3b3JrIGxvb3AgY2FuIHN3aXRjaCB0byB0aGVcbiAgICAgICAgICAgICAgLy8gaHlkcmF0aW9uIGxhbmUuXG4gICAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdERpZE5vdENvbXBsZXRlO1xuICAgICAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbW1lZGlhdGU6XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRhdGE6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmICghZGlkU3VzcGVuZEluU2hlbGwgJiYgZ2V0U3VzcGVuc2VIYW5kbGVyKCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkaWRTdXNwZW5kSW5TaGVsbCA9IHRydWU7XG4gICAgICAgICAgICAgIH0gLy8gSW50ZW50aW9uYWwgZmFsbHRocm91Z2hcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gVW53aW5kIHRoZW4gY29udGludWUgd2l0aCB0aGUgbm9ybWFsIHdvcmsgbG9vcC5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKHVuaXRPZldvcmssIHRocm93blZhbHVlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd29ya0xvb3BTeW5jKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlVGhyb3cocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7IC8vIENoZWNrIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQgaW4gdGhlIHNoZWxsLiBXZSB1c2UgdGhpcyB0byBkZXRlY3QgYW5cbiAgLy8gaW5maW5pdGUgcGluZyBsb29wIGNhdXNlZCBieSBhbiB1bmNhY2hlZCBwcm9taXNlLlxuICAvL1xuICAvLyBPbmx5IGluY3JlbWVudCB0aGlzIGNvdW50ZXIgb25jZSBwZXIgc3luY2hyb25vdXMgcmVuZGVyIGF0dGVtcHQgYWNyb3NzIHRoZVxuICAvLyB3aG9sZSB0cmVlLiBFdmVuIGlmIHRoZXJlIGFyZSBtYW55IHNpYmxpbmcgY29tcG9uZW50cyB0aGF0IHN1c3BlbmQsIHRoaXNcbiAgLy8gY291bnRlciBvbmx5IGdldHMgaW5jcmVtZW50ZWQgb25jZS5cblxuXG4gIGlmIChkaWRTdXNwZW5kSW5TaGVsbCkge1xuICAgIHJvb3Quc2hlbGxTdXNwZW5kQ291bnRlcisrO1xuICB9XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG4gIHBvcENhY2hlRGlzcGF0Y2hlcihwcmV2Q2FjaGVEaXNwYXRjaGVyKTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIGEgc3luYyByZW5kZXIsIHNvIHdlIHNob3VsZCBoYXZlIGZpbmlzaGVkIHRoZSB3aG9sZSB0cmVlLlxuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbW1pdCBhbiBpbmNvbXBsZXRlIHJvb3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhICcgKyAnYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgfVxuXG4gIHtcbiAgICBtYXJrUmVuZGVyU3RvcHBlZCgpO1xuICB9IC8vIFNldCB0aGlzIHRvIG51bGwgdG8gaW5kaWNhdGUgdGhlcmUncyBubyBpbi1wcm9ncmVzcyByZW5kZXIuXG5cblxuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIEl0J3Mgc2FmZSB0byBwcm9jZXNzIHRoZSBxdWV1ZSBub3cgdGhhdCB0aGUgcmVuZGVyIHBoYXNlIGlzIGNvbXBsZXRlLlxuXG4gIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG59IC8vIFRoZSB3b3JrIGxvb3AgaXMgYW4gZXh0cmVtZWx5IGhvdCBwYXRoLiBUZWxsIENsb3N1cmUgbm90IHRvIGlubGluZSBpdC5cblxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgLy8gUGVyZm9ybSB3b3JrIHdpdGhvdXQgY2hlY2tpbmcgaWYgd2UgbmVlZCB0byB5aWVsZCBiZXR3ZWVuIGZpYmVyLlxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpO1xuICB2YXIgcHJldkNhY2hlRGlzcGF0Y2hlciA9IHB1c2hDYWNoZURpc3BhdGNoZXIoKTsgLy8gSWYgdGhlIHJvb3Qgb3IgbGFuZXMgaGF2ZSBjaGFuZ2VkLCB0aHJvdyBvdXQgdGhlIGV4aXN0aW5nIHN0YWNrXG4gIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpIHtcbiAgICB7XG4gICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgdmFyIG1lbW9pemVkVXBkYXRlcnMgPSByb290Lm1lbW9pemVkVXBkYXRlcnM7XG5cbiAgICAgICAgaWYgKG1lbW9pemVkVXBkYXRlcnMuc2l6ZSA+IDApIHtcbiAgICAgICAgICByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCk7XG4gICAgICAgIH0gLy8gQXQgdGhpcyBwb2ludCwgbW92ZSBGaWJlcnMgdGhhdCBzY2hlZHVsZWQgdGhlIHVwY29taW5nIHdvcmsgZnJvbSB0aGUgTWFwIHRvIHRoZSBTZXQuXG4gICAgICAgIC8vIElmIHdlIGJhaWxvdXQgb24gdGhpcyB3b3JrLCB3ZSdsbCBtb3ZlIHRoZW0gYmFjayAobGlrZSBhYm92ZSkuXG4gICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIG1vdmUgdGhlbSBub3cgaW4gY2FzZSB0aGUgd29yayBzcGF3bnMgbW9yZSB3b3JrIGF0IHRoZSBzYW1lIHByaW9yaXR5IHdpdGggZGlmZmVyZW50IHVwZGF0ZXJzLlxuICAgICAgICAvLyBUaGF0IHdheSB3ZSBjYW4ga2VlcCB0aGUgY3VycmVudCB1cGRhdGUgYW5kIGZ1dHVyZSB1cGRhdGVzIHNlcGFyYXRlLlxuXG5cbiAgICAgICAgbW92ZVBlbmRpbmdGaWJlcnNUb01lbW9pemVkKHJvb3QsIGxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gZ2V0VHJhbnNpdGlvbnNGb3JMYW5lcygpO1xuICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gIH1cblxuICB7XG4gICAgbWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpO1xuICB9XG5cbiAgb3V0ZXI6IGRvIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICE9PSBOb3RTdXNwZW5kZWQgJiYgd29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICAgICAgLy8gVGhlIHdvcmsgbG9vcCBpcyBzdXNwZW5kZWQuIFdlIG5lZWQgdG8gZWl0aGVyIHVud2luZCB0aGUgc3RhY2sgb3JcbiAgICAgICAgLy8gcmVwbGF5IHRoZSBzdXNwZW5kZWQgY29tcG9uZW50LlxuICAgICAgICB2YXIgdW5pdE9mV29yayA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICB2YXIgdGhyb3duVmFsdWUgPSB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlO1xuXG4gICAgICAgIHJlc3VtZU9yVW53aW5kOiBzd2l0Y2ggKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKSB7XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkVycm9yOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBVbndpbmQgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBub3JtYWwgd29yayBsb29wLlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3AodW5pdE9mV29yaywgdGhyb3duVmFsdWUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EYXRhOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgdGhlbmFibGUgPSB0aHJvd25WYWx1ZTtcblxuICAgICAgICAgICAgICBpZiAoaXNUaGVuYWJsZVJlc29sdmVkKHRoZW5hYmxlKSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBkYXRhIHJlc29sdmVkLiBUcnkgcmVuZGVyaW5nIHRoZSBjb21wb25lbnQgYWdhaW4uXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfSAvLyBUaGUgd29yayBsb29wIGlzIHN1c3BlbmRlZCBvbiBkYXRhLiBXZSBzaG91bGQgd2FpdCBmb3IgaXQgdG9cbiAgICAgICAgICAgICAgLy8gcmVzb2x2ZSBiZWZvcmUgY29udGludWluZyB0byByZW5kZXIuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgcHJvbWlzZSByZXNvbHZlcyBzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgICAvLyBVc3VhbGx5IHRoaXMgaXMgaGFuZGxlZCB3aGVuIHdlIGluc3RydW1lbnQgdGhlIHByb21pc2UgdG8gYWRkIGFcbiAgICAgICAgICAgICAgLy8gYHN0YXR1c2AgZmllbGQsIGJ1dCBpZiB0aGUgcHJvbWlzZSBhbHJlYWR5IGhhcyBhIHN0YXR1cywgd2Ugd29uJ3RcbiAgICAgICAgICAgICAgLy8gaGF2ZSBhZGRlZCBhIGxpc3RlbmVyIHVudGlsIHJpZ2h0IGhlcmUuXG5cblxuICAgICAgICAgICAgICB2YXIgb25SZXNvbHV0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByb290IGlzIHN0aWxsIHN1c3BlbmRlZCBvbiB0aGlzIHByb21pc2UuXG4gICAgICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRhdGEgJiYgd29ya0luUHJvZ3Jlc3NSb290ID09PSByb290KSB7XG4gICAgICAgICAgICAgICAgICAvLyBNYXJrIHRoZSByb290IGFzIHJlYWR5IHRvIGNvbnRpbnVlIHJlbmRlcmluZy5cbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gLy8gRW5zdXJlIHRoZSByb290IGlzIHNjaGVkdWxlZC4gV2Ugc2hvdWxkIGRvIHRoaXMgZXZlbiBpZiB3ZSdyZVxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseSB3b3JraW5nIG9uIGEgZGlmZmVyZW50IHJvb3QsIHNvIHRoYXQgd2UgcmVzdW1lXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nIGxhdGVyLlxuXG5cbiAgICAgICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgdGhlbmFibGUudGhlbihvblJlc29sdXRpb24sIG9uUmVzb2x1dGlvbik7XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkltbWVkaWF0ZTpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyBmaWJlciBqdXN0IHN1c3BlbmRlZCwgaXQncyBwb3NzaWJsZSB0aGUgZGF0YSBpcyBhbHJlYWR5XG4gICAgICAgICAgICAgIC8vIGNhY2hlZC4gWWllbGQgdG8gdGhlIG1haW4gdGhyZWFkIHRvIGdpdmUgaXQgYSBjaGFuY2UgdG8gcGluZy4gSWZcbiAgICAgICAgICAgICAgLy8gaXQgZG9lcywgd2UgY2FuIHJldHJ5IGltbWVkaWF0ZWx5IHdpdGhvdXQgdW53aW5kaW5nIHRoZSBzdGFjay5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWU7XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkluc3RhbmNlOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IFN1c3BlbmRlZE9uSW5zdGFuY2VBbmRSZWFkeVRvQ29udGludWU7XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWU6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBfdGhlbmFibGUgPSB0aHJvd25WYWx1ZTtcblxuICAgICAgICAgICAgICBpZiAoaXNUaGVuYWJsZVJlc29sdmVkKF90aGVuYWJsZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgZGF0YSByZXNvbHZlZC4gVHJ5IHJlbmRlcmluZyB0aGUgY29tcG9uZW50IGFnYWluLlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJlcGxheVN1c3BlbmRlZFVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB1bndpbmQgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBub3JtYWwgd29yayBsb29wLlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3AodW5pdE9mV29yaywgdGhyb3duVmFsdWUpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSW5zdGFuY2VBbmRSZWFkeVRvQ29udGludWU6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICAgIGNhc2UgSG9zdEhvaXN0YWJsZTpcbiAgICAgICAgICAgICAgICBjYXNlIEhvc3RTaW5nbGV0b246XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJlZm9yZSB1bndpbmRpbmcgdGhlIHN0YWNrLCBjaGVjayBvbmUgbW9yZSB0aW1lIGlmIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZSBpcyByZWFkeS4gSXQgbWF5IGhhdmUgbG9hZGVkIHdoZW4gUmVhY3QgeWllbGRlZCB0b1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbWFpbiB0aHJlYWQuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbmluZyB0aGlzIHRvIGEgY29uc3RhbnQgc28gRmxvdyBrbm93cyB0aGUgYmluZGluZyB3b24ndFxuICAgICAgICAgICAgICAgICAgICAvLyBiZSBtdXRhdGVkIGJ5IGBwcmVsb2FkSW5zdGFuY2VgLlxuICAgICAgICAgICAgICAgICAgICB2YXIgaG9zdEZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gaG9zdEZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wcyA9IGhvc3RGaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1JlYWR5ID0gcHJlbG9hZEluc3RhbmNlKHR5cGUsIHByb3BzKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZWFkeSkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkYXRhIHJlc29sdmVkLiBSZXN1bWUgdGhlIHdvcmsgbG9vcCBhcyBpZiBub3RoaW5nXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3VzcGVuZGVkLiBVbmxpa2Ugd2hlbiBhIHVzZXIgY29tcG9uZW50IHN1c3BlbmRzLCB3ZSBkb24ndFxuICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdG8gcmVwbGF5IGFueXRoaW5nIGJlY2F1c2UgdGhlIGhvc3QgZmliZXJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGNvbXBsZXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc2libGluZyA9IGhvc3RGaWJlci5zaWJsaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gc2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldHVybkZpYmVyID0gaG9zdEZpYmVyLnJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlVW5pdE9mV29yayhyZXR1cm5GaWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcmVzdW1lT3JVbndpbmQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBmYWlsIGdyYWNlZnVsbHkgYnV0IGl0J3Mgbm90IGNvcnJlY3QsIHNvIGxvZyBhXG4gICAgICAgICAgICAgICAgICAgIC8vIHdhcm5pbmcgaW4gZGV2LlxuICAgICAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgZmliZXIgdHJpZ2dlcmVkIGEgc3VzcGVuc2V5IGNvbW1pdC4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gLy8gT3RoZXJ3aXNlLCB1bndpbmQgdGhlbiBjb250aW51ZSB3aXRoIHRoZSBub3JtYWwgd29yayBsb29wLlxuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKHVuaXRPZldvcmssIHRocm93blZhbHVlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGVwcmVjYXRlZFRocm93UHJvbWlzZTpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLy8gU3VzcGVuZGVkIGJ5IGFuIG9sZCBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgdGhlIGB0aHJvdyBwcm9taXNlYFxuICAgICAgICAgICAgICAvLyBwYXR0ZXJuLiBUaGUgbmV3ZXIgcmVwbGF5aW5nIGJlaGF2aW9yIGNhbiBjYXVzZSBzdWJ0bGUgaXNzdWVzXG4gICAgICAgICAgICAgIC8vIGxpa2UgaW5maW5pdGUgcGluZyBsb29wcy4gU28gd2UgbWFpbnRhaW4gdGhlIG9sZCBiZWhhdmlvciBhbmRcbiAgICAgICAgICAgICAgLy8gYWx3YXlzIHVud2luZC5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKHVuaXRPZldvcmssIHRocm93blZhbHVlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSHlkcmF0aW9uOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAvLyBTZWxlY3RpdmUgaHlkcmF0aW9uLiBBbiB1cGRhdGUgZmxvd2VkIGludG8gYSBkZWh5ZHJhdGVkIHRyZWUuXG4gICAgICAgICAgICAgIC8vIEludGVycnVwdCB0aGUgY3VycmVudCByZW5kZXIgc28gdGhlIHdvcmsgbG9vcCBjYW4gc3dpdGNoIHRvIHRoZVxuICAgICAgICAgICAgICAvLyBoeWRyYXRpb24gbGFuZS5cbiAgICAgICAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1N0YWNrKCk7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RGlkTm90Q29tcGxldGU7XG4gICAgICAgICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIFN1c3BlbmRlZFJlYXNvbi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHJ1ZSAmJiBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIGBhY3RgIHNwZWNpYWwgY2FzZTogSWYgd2UncmUgaW5zaWRlIGFuIGBhY3RgIHNjb3BlLCBkb24ndCBjb25zdWx0XG4gICAgICAgIC8vIGBzaG91bGRZaWVsZGAuIEFsd2F5cyBrZWVwIHdvcmtpbmcgdW50aWwgdGhlIHJlbmRlciBpcyBjb21wbGV0ZS5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QganVzdCBhbiBvcHRpbWl6YXRpb246IGluIGEgdW5pdCB0ZXN0IGVudmlyb25tZW50LCB3ZVxuICAgICAgICAvLyBjYW4ndCB0cnVzdCB0aGUgcmVzdWx0IG9mIGBzaG91bGRZaWVsZGAsIGJlY2F1c2UgdGhlIGhvc3QgSS9PIGlzXG4gICAgICAgIC8vIGxpa2VseSBtb2NrZWQuXG4gICAgICAgIHdvcmtMb29wU3luYygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd29ya0xvb3BDb25jdXJyZW50KCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVUaHJvdyhyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG4gIHBvcENhY2hlRGlzcGF0Y2hlcihwcmV2Q2FjaGVEaXNwYXRjaGVyKTtcbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgLy8gU3RpbGwgd29yayByZW1haW5pbmcuXG4gICAge1xuICAgICAgbWFya1JlbmRlcllpZWxkZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUm9vdEluUHJvZ3Jlc3M7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ29tcGxldGVkIHRoZSB0cmVlLlxuICAgIHtcbiAgICAgIG1hcmtSZW5kZXJTdG9wcGVkKCk7XG4gICAgfSAvLyBTZXQgdGhpcyB0byBudWxsIHRvIGluZGljYXRlIHRoZXJlJ3Mgbm8gaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gSXQncyBzYWZlIHRvIHByb2Nlc3MgdGhlIHF1ZXVlIG5vdyB0aGF0IHRoZSByZW5kZXIgcGhhc2UgaXMgY29tcGxldGUuXG5cbiAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7IC8vIFJldHVybiB0aGUgZmluYWwgZXhpdCBzdGF0dXMuXG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgfVxufVxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wQ29uY3VycmVudCgpIHtcbiAgLy8gUGVyZm9ybSB3b3JrIHVudGlsIFNjaGVkdWxlciBhc2tzIHVzIHRvIHlpZWxkXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCAmJiAhc2hvdWxkWWllbGQoKSkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyZm9ybVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAvLyBUaGUgY3VycmVudCwgZmx1c2hlZCwgc3RhdGUgb2YgdGhpcyBmaWJlciBpcyB0aGUgYWx0ZXJuYXRlLiBJZGVhbGx5XG4gIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gIC8vIG5lZWQgYW4gYWRkaXRpb25hbCBmaWVsZCBvbiB0aGUgd29yayBpbiBwcm9ncmVzcy5cbiAgdmFyIGN1cnJlbnQgPSB1bml0T2ZXb3JrLmFsdGVybmF0ZTtcbiAgc2V0Q3VycmVudEZpYmVyKHVuaXRPZldvcmspO1xuICB2YXIgbmV4dDtcblxuICBpZiAoKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgIG5leHQgPSBiZWdpbldvcmsoY3VycmVudCwgdW5pdE9mV29yaywgZW50YW5nbGVkUmVuZGVyTGFuZXMpO1xuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEodW5pdE9mV29yaywgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dCA9IGJlZ2luV29yayhjdXJyZW50LCB1bml0T2ZXb3JrLCBlbnRhbmdsZWRSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXNldEN1cnJlbnRGaWJlcigpO1xuICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcblxuICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgZG9lc24ndCBzcGF3biBuZXcgd29yaywgY29tcGxldGUgdGhlIGN1cnJlbnQgd29yay5cbiAgICBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICB9XG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVwbGF5U3VzcGVuZGVkVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIFRoaXMgaXMgYSBmb3JrIG9mIHBlcmZvcm1Vbml0T2ZXb3JrIHNwZWNpZmNhbGx5IGZvciByZXBsYXlpbmcgYSBmaWJlciB0aGF0XG4gIC8vIGp1c3Qgc3VzcGVuZGVkLlxuICAvL1xuICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICBzZXRDdXJyZW50RmliZXIodW5pdE9mV29yayk7XG4gIHZhciBuZXh0O1xuICBzZXRDdXJyZW50RmliZXIodW5pdE9mV29yayk7XG4gIHZhciBpc1Byb2ZpbGluZ01vZGUgPSAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGU7XG5cbiAgaWYgKGlzUHJvZmlsaW5nTW9kZSkge1xuICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgfVxuXG4gIHN3aXRjaCAodW5pdE9mV29yay50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIEJlY2F1c2UgaXQgc3VzcGVuZGVkIHdpdGggYHVzZWAsIHdlIGNhbiBhc3N1bWUgaXQncyBhXG4gICAgICAgIC8vIGZ1bmN0aW9uIGNvbXBvbmVudC5cbiAgICAgICAgdW5pdE9mV29yay50YWcgPSBGdW5jdGlvbkNvbXBvbmVudDsgLy8gRmFsbHRocm91Z2ggdG8gdGhlIG5leHQgYnJhbmNoLlxuICAgICAgfVxuXG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFJlc29sdmUgYGRlZmF1bHRQcm9wc2AuIFRoaXMgbG9naWMgaXMgY29waWVkIGZyb20gYGJlZ2luV29ya2AuXG4gICAgICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQgaW50byB0aGF0IG1vZHVsZS4gQWxzbyxcbiAgICAgICAgLy8gY291bGQgbWF5YmUgdXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gc2F5IGB1c2VgIGRvZXNuJ3Qgd29yayB3aXRoXG4gICAgICAgIC8vIGBkZWZhdWx0UHJvcHNgIDopXG4gICAgICAgIHZhciBDb21wb25lbnQgPSB1bml0T2ZXb3JrLnR5cGU7XG4gICAgICAgIHZhciB1bnJlc29sdmVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHJlc29sdmVkUHJvcHMgPSB1bml0T2ZXb3JrLmVsZW1lbnRUeXBlID09PSBDb21wb25lbnQgPyB1bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgICAgdmFyIGNvbnRleHQ7XG5cbiAgICAgICAge1xuICAgICAgICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQodW5pdE9mV29yaywgQ29tcG9uZW50LCB0cnVlKTtcbiAgICAgICAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh1bml0T2ZXb3JrLCB1bm1hc2tlZENvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCA9IHJlcGxheUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHVuaXRPZldvcmssIHJlc29sdmVkUHJvcHMsIENvbXBvbmVudCwgY29udGV4dCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAgLy8gUmVzb2x2ZSBgZGVmYXVsdFByb3BzYC4gVGhpcyBsb2dpYyBpcyBjb3BpZWQgZnJvbSBgYmVnaW5Xb3JrYC5cbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHRoaXMgc3dpdGNoIHN0YXRlbWVudCBpbnRvIHRoYXQgbW9kdWxlLiBBbHNvLFxuICAgICAgICAvLyBjb3VsZCBtYXliZSB1c2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBzYXkgYHVzZWAgZG9lc24ndCB3b3JrIHdpdGhcbiAgICAgICAgLy8gYGRlZmF1bHRQcm9wc2AgOilcbiAgICAgICAgdmFyIF9Db21wb25lbnQgPSB1bml0T2ZXb3JrLnR5cGUucmVuZGVyO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wcyA9IHVuaXRPZldvcmsuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQgPyBfdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50LCBfdW5yZXNvbHZlZFByb3BzKTtcblxuICAgICAgICBuZXh0ID0gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgdW5pdE9mV29yaywgX3Jlc29sdmVkUHJvcHMsIF9Db21wb25lbnQsIHVuaXRPZldvcmsucmVmLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBTb21lIGhvc3QgY29tcG9uZW50cyBhcmUgc3RhdGVmdWwgKHRoYXQncyBob3cgd2UgaW1wbGVtZW50IGZvcm1cbiAgICAgICAgLy8gYWN0aW9ucykgYnV0IHdlIGRvbid0IGJvdGhlciB0byByZXVzZSB0aGUgbWVtb2l6ZWQgc3RhdGUgYmVjYXVzZSBpdCdzXG4gICAgICAgIC8vIG5vdCB3b3J0aCB0aGUgZXh0cmEgY29kZS4gVGhlIG1haW4gcmVhc29uIHRvIHJldXNlIHRoZSBwcmV2aW91cyBob29rc1xuICAgICAgICAvLyBpcyB0byByZXVzZSB1bmNhY2hlZCBwcm9taXNlcywgYnV0IHdlIGhhcHBlbiB0byBrbm93IHRoYXQgdGhlIG9ubHlcbiAgICAgICAgLy8gcHJvbWlzZXMgdGhhdCBhIGhvc3QgY29tcG9uZW50IG1pZ2h0IHN1c3BlbmQgb24gYXJlIGRlZmluaXRlbHkgY2FjaGVkXG4gICAgICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgY29udHJvbGxlZCBieSB1cy4gU28gZG9uJ3QgYm90aGVyLlxuICAgICAgICByZXNldEhvb2tzT25VbndpbmQodW5pdE9mV29yayk7IC8vIEZhbGx0aHJvdWdoIHRvIHRoZSBuZXh0IGJyYW5jaC5cbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIC8vIE90aGVyIHR5cGVzIGJlc2lkZXMgZnVuY3Rpb24gY29tcG9uZW50cyBhcmUgcmVzZXQgY29tcGxldGVseSBiZWZvcmVcbiAgICAgICAgLy8gYmVpbmcgcmVwbGF5ZWQuIEN1cnJlbnRseSB0aGlzIG9ubHkgaGFwcGVucyB3aGVuIGEgVXNhYmxlIHR5cGUgaXNcbiAgICAgICAgLy8gcmVjb25jaWxlZCDigJQgdGhlIHJlY29uY2lsZXIgd2lsbCBzdXNwZW5kLlxuICAgICAgICAvL1xuICAgICAgICAvLyBXZSByZXNldCB0aGUgZmliZXIgYmFjayB0byBpdHMgb3JpZ2luYWwgc3RhdGU7IGhvd2V2ZXIsIHRoaXMgaXNuJ3RcbiAgICAgICAgLy8gYSBmdWxsIFwidW53aW5kXCIgYmVjYXVzZSB3ZSdyZSBnb2luZyB0byByZXVzZSB0aGUgcHJvbWlzZXMgdGhhdCB3ZXJlXG4gICAgICAgIC8vIHJlY29uY2lsZWQgcHJldmlvdXNseS4gU28gaXQncyBpbnRlbnRpb25hbCB0aGF0IHdlIGRvbid0IGNhbGxcbiAgICAgICAgLy8gcmVzZXRTdXNwZW5kZWRXb3JrTG9vcE9uVW53aW5kIGhlcmUuXG4gICAgICAgIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCB1bml0T2ZXb3JrKTtcbiAgICAgICAgdW5pdE9mV29yayA9IHdvcmtJblByb2dyZXNzID0gcmVzZXRXb3JrSW5Qcm9ncmVzcyh1bml0T2ZXb3JrLCBlbnRhbmdsZWRSZW5kZXJMYW5lcyk7XG4gICAgICAgIG5leHQgPSBiZWdpbldvcmsoY3VycmVudCwgdW5pdE9mV29yaywgZW50YW5nbGVkUmVuZGVyTGFuZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxuXG4gIGlmIChpc1Byb2ZpbGluZ01vZGUpIHtcbiAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKHVuaXRPZldvcmssIHRydWUpO1xuICB9IC8vIFRoZSBiZWdpbiBwaGFzZSBmaW5pc2hlZCBzdWNjZXNzZnVsbHkgd2l0aG91dCBzdXNwZW5kaW5nLiBSZXR1cm4gdG8gdGhlXG4gIC8vIG5vcm1hbCB3b3JrIGxvb3AuXG5cblxuICByZXNldEN1cnJlbnRGaWJlcigpO1xuICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcblxuICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgZG9lc24ndCBzcGF3biBuZXcgd29yaywgY29tcGxldGUgdGhlIGN1cnJlbnQgd29yay5cbiAgICBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICB9XG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gdGhyb3dBbmRVbndpbmRXb3JrTG9vcCh1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSkge1xuICAvLyBUaGlzIGlzIGEgZm9yayBvZiBwZXJmb3JtVW5pdE9mV29yayBzcGVjaWZjYWxseSBmb3IgdW53aW5kaW5nIGEgZmliZXJcbiAgLy8gdGhhdCB0aHJldyBhbiBleGNlcHRpb24uXG4gIC8vXG4gIC8vIFJldHVybiB0byB0aGUgbm9ybWFsIHdvcmsgbG9vcC4gVGhpcyB3aWxsIHVud2luZCB0aGUgc3RhY2ssIGFuZCBwb3RlbnRpYWxseVxuICAvLyByZXN1bHQgaW4gc2hvd2luZyBhIGZhbGxiYWNrLlxuICByZXNldFN1c3BlbmRlZFdvcmtMb29wT25VbndpbmQodW5pdE9mV29yayk7XG4gIHZhciByZXR1cm5GaWJlciA9IHVuaXRPZldvcmsucmV0dXJuO1xuXG4gIGlmIChyZXR1cm5GaWJlciA9PT0gbnVsbCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IG51bGwpIHtcbiAgICAvLyBFeHBlY3RlZCB0byBiZSB3b3JraW5nIG9uIGEgbm9uLXJvb3QgZmliZXIuIFRoaXMgaXMgYSBmYXRhbCBlcnJvclxuICAgIC8vIGJlY2F1c2UgdGhlcmUncyBubyBhbmNlc3RvciB0aGF0IGNhbiBoYW5kbGUgaXQ7IHRoZSByb290IGlzXG4gICAgLy8gc3VwcG9zZWQgdG8gY2FwdHVyZSBhbGwgZXJyb3JzIHRoYXQgd2VyZW4ndCBjYXVnaHQgYnkgYW4gZXJyb3JcbiAgICAvLyBib3VuZGFyeS5cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gdGhyb3duVmFsdWU7IC8vIFNldCBgd29ya0luUHJvZ3Jlc3NgIHRvIG51bGwuIFRoaXMgcmVwcmVzZW50cyBhZHZhbmNpbmcgdG8gdGhlIG5leHRcbiAgICAvLyBzaWJsaW5nLCBvciB0aGUgcGFyZW50IGlmIHRoZXJlIGFyZSBubyBzaWJsaW5ncy4gQnV0IHNpbmNlIHRoZSByb290XG4gICAgLy8gaGFzIG5vIHNpYmxpbmdzIG5vciBhIHBhcmVudCwgd2Ugc2V0IGl0IHRvIG51bGwuIFVzdWFsbHkgdGhpcyBpc1xuICAgIC8vIGhhbmRsZWQgYnkgYGNvbXBsZXRlVW5pdE9mV29ya2Agb3IgYHVud2luZFdvcmtgLCBidXQgc2luY2Ugd2UncmVcbiAgICAvLyBpbnRlbnRpb25hbGx5IG5vdCBjYWxsaW5nIHRob3NlLCB3ZSBuZWVkIHNldCBpdCBoZXJlLlxuICAgIC8vIFRPRE86IENvbnNpZGVyIGNhbGxpbmcgYHVud2luZFdvcmtgIHRvIHBvcCB0aGUgY29udGV4dHMuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBGaW5kIGFuZCBtYXJrIHRoZSBuZWFyZXN0IFN1c3BlbnNlIG9yIGVycm9yIGJvdW5kYXJ5IHRoYXQgY2FuIGhhbmRsZVxuICAgIC8vIHRoaXMgXCJleGNlcHRpb25cIi5cbiAgICB0aHJvd0V4Y2VwdGlvbih3b3JrSW5Qcm9ncmVzc1Jvb3QsIHJldHVybkZpYmVyLCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIFdlIGhhZCB0cm91YmxlIHByb2Nlc3NpbmcgdGhlIGVycm9yLiBBbiBleGFtcGxlIG9mIHRoaXMgaGFwcGVuaW5nIGlzXG4gICAgLy8gd2hlbiBhY2Nlc3NpbmcgdGhlIGBjb21wb25lbnREaWRDYXRjaGAgcHJvcGVydHkgb2YgYW4gZXJyb3IgYm91bmRhcnlcbiAgICAvLyB0aHJvd3MgYW4gZXJyb3IuIEEgd2VpcmQgZWRnZSBjYXNlLiBUaGVyZSdzIGEgcmVncmVzc2lvbiB0ZXN0IGZvciB0aGlzLlxuICAgIC8vIFRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcCwgYnViYmxlIHRoZSBlcnJvciB1cCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSByZXR1cm5GaWJlcjtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGlmICh1bml0T2ZXb3JrLmZsYWdzICYgSW5jb21wbGV0ZSkge1xuICAgIC8vIFVud2luZCB0aGUgc3RhY2sgdW50aWwgd2UgcmVhY2ggdGhlIG5lYXJlc3QgYm91bmRhcnkuXG4gICAgdW53aW5kVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBBbHRob3VnaCB0aGUgZmliZXIgc3VzcGVuZGVkLCB3ZSdyZSBpbnRlbnRpb25hbGx5IGdvaW5nIHRvIGNvbW1pdCBpdCBpblxuICAgIC8vIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2UgY2FuIGRvIHRoaXMgc2FmZWx5IGluIGNhc2VzIHdoZXJlIHdlIGtub3cgdGhlXG4gICAgLy8gaW5jb25zaXN0ZW50IHRyZWUgd2lsbCBiZSBoaWRkZW4uXG4gICAgLy9cbiAgICAvLyBUaGlzIGN1cnJlbnRseSBvbmx5IGFwcGxpZXMgdG8gTGVnYWN5IFN1c3BlbnNlIGltcGxlbWVudGF0aW9uLCBidXQgd2UgbWF5XG4gICAgLy8gcG9ydCBhIHZlcnNpb24gb2YgdGhpcyB0byBjb25jdXJyZW50IHJvb3RzLCB0b28sIHdoZW4gcGVyZm9ybWluZyBhXG4gICAgLy8gc3luY2hyb25vdXMgcmVuZGVyLiBCZWNhdXNlIHRoYXQgd2lsbCBhbGxvdyB1cyB0byBtdXRhdGUgdGhlIHRyZWUgYXMgd2VcbiAgICAvLyBnbyBpbnN0ZWFkIG9mIGJ1ZmZlcmluZyBtdXRhdGlvbnMgdW50aWwgdGhlIGVuZC4gVGhvdWdoIGl0J3MgdW5jbGVhciBpZlxuICAgIC8vIHRoaXMgcGFydGljdWxhciBwYXRoIGlzIGhvdyB0aGF0IHdvdWxkIGJlIGltcGxlbWVudGVkLlxuICAgIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAvLyBBdHRlbXB0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IHVuaXQgb2Ygd29yaywgdGhlbiBtb3ZlIHRvIHRoZSBuZXh0XG4gIC8vIHNpYmxpbmcuIElmIHRoZXJlIGFyZSBubyBtb3JlIHNpYmxpbmdzLCByZXR1cm4gdG8gdGhlIHBhcmVudCBmaWJlci5cbiAgdmFyIGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuXG4gIGRvIHtcbiAgICB7XG4gICAgICBpZiAoKGNvbXBsZXRlZFdvcmsuZmxhZ3MgJiBJbmNvbXBsZXRlKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgIC8vIE5PVEU6IElmIHdlIHJlLWVuYWJsZSBzaWJsaW5nIHByZXJlbmRlcmluZyBpbiBzb21lIGNhc2VzLCB0aGlzIGJyYW5jaFxuICAgICAgICAvLyBpcyB3aGVyZSB3ZSB3b3VsZCBzd2l0Y2ggdG8gdGhlIHVud2luZGluZyBwYXRoLlxuICAgICAgICBlcnJvcignSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEV4cGVjdGVkIHRoaXMgZmliZXIgdG8gYmUgY29tcGxldGUsIGJ1dCAnICsgXCJpdCBpc24ndC4gSXQgc2hvdWxkIGhhdmUgYmVlbiB1bndvdW5kLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAgIC8vIG5lZWQgYW4gYWRkaXRpb25hbCBmaWVsZCBvbiB0aGUgd29yayBpbiBwcm9ncmVzcy5cblxuXG4gICAgdmFyIGN1cnJlbnQgPSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZTtcbiAgICB2YXIgcmV0dXJuRmliZXIgPSBjb21wbGV0ZWRXb3JrLnJldHVybjtcbiAgICBzZXRDdXJyZW50RmliZXIoY29tcGxldGVkV29yayk7XG4gICAgdmFyIG5leHQgPSB2b2lkIDA7XG5cbiAgICBpZiAoKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICBuZXh0ID0gY29tcGxldGVXb3JrKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRQcm9maWxlclRpbWVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBlbnRhbmdsZWRSZW5kZXJMYW5lcyk7IC8vIFVwZGF0ZSByZW5kZXIgZHVyYXRpb24gYXNzdW1pbmcgd2UgZGlkbid0IGVycm9yLlxuXG4gICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuXG4gICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgIC8vIENvbXBsZXRpbmcgdGhpcyBmaWJlciBzcGF3bmVkIG5ldyB3b3JrLiBXb3JrIG9uIHRoYXQgbmV4dC5cbiAgICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc2libGluZ0ZpYmVyID0gY29tcGxldGVkV29yay5zaWJsaW5nO1xuXG4gICAgaWYgKHNpYmxpbmdGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGRvIGluIHRoaXMgcmV0dXJuRmliZXIsIGRvIHRoYXQgbmV4dC5cbiAgICAgIHdvcmtJblByb2dyZXNzID0gc2libGluZ0ZpYmVyO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gT3RoZXJ3aXNlLCByZXR1cm4gdG8gdGhlIHBhcmVudFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIHdlIGJhaWwgb3V0IHdoZW4gd2UgZ2V0IGEgbnVsbFxuXG5cbiAgICBjb21wbGV0ZWRXb3JrID0gcmV0dXJuRmliZXI7IC8vIFVwZGF0ZSB0aGUgbmV4dCB0aGluZyB3ZSdyZSB3b3JraW5nIG9uIGluIGNhc2Ugc29tZXRoaW5nIHRocm93cy5cblxuICAgIHdvcmtJblByb2dyZXNzID0gY29tcGxldGVkV29yaztcbiAgfSB3aGlsZSAoY29tcGxldGVkV29yayAhPT0gbnVsbCk7IC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIHJvb3QuXG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluUHJvZ3Jlc3MpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdENvbXBsZXRlZDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgdmFyIGluY29tcGxldGVXb3JrID0gdW5pdE9mV29yaztcblxuICBkbyB7XG4gICAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAgIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICAgIHZhciBjdXJyZW50ID0gaW5jb21wbGV0ZVdvcmsuYWx0ZXJuYXRlOyAvLyBUaGlzIGZpYmVyIGRpZCBub3QgY29tcGxldGUgYmVjYXVzZSBzb21ldGhpbmcgdGhyZXcuIFBvcCB2YWx1ZXMgb2ZmXG4gICAgLy8gdGhlIHN0YWNrIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGNvbXBsZXRlIHBoYXNlLiBJZiB0aGlzIGlzIGEgYm91bmRhcnksXG4gICAgLy8gY2FwdHVyZSB2YWx1ZXMgaWYgcG9zc2libGUuXG5cbiAgICB2YXIgbmV4dCA9IHVud2luZFdvcmsoY3VycmVudCwgaW5jb21wbGV0ZVdvcmspOyAvLyBCZWNhdXNlIHRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSwgZG9uJ3QgcmVzZXQgaXRzIGxhbmVzLlxuXG4gICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgIC8vIEZvdW5kIGEgYm91bmRhcnkgdGhhdCBjYW4gaGFuZGxlIHRoaXMgZXhjZXB0aW9uLiBSZS1yZW50ZXIgdGhlXG4gICAgICAvLyBiZWdpbiBwaGFzZS4gVGhpcyBicmFuY2ggd2lsbCByZXR1cm4gdXMgdG8gdGhlIG5vcm1hbCB3b3JrIGxvb3AuXG4gICAgICAvL1xuICAgICAgLy8gU2luY2Ugd2UncmUgcmVzdGFydGluZywgcmVtb3ZlIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgaG9zdCBlZmZlY3RcbiAgICAgIC8vIGZyb20gdGhlIGVmZmVjdCB0YWcuXG4gICAgICBuZXh0LmZsYWdzICY9IEhvc3RFZmZlY3RNYXNrO1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gS2VlcCB1bndpbmRpbmcgdW50aWwgd2UgcmVhY2ggZWl0aGVyIGEgYm91bmRhcnkgb3IgdGhlIHJvb3QuXG5cblxuICAgIGlmICgoaW5jb21wbGV0ZVdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIHJlbmRlciBkdXJhdGlvbiBmb3IgdGhlIGZpYmVyIHRoYXQgZXJyb3JlZC5cbiAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoaW5jb21wbGV0ZVdvcmssIGZhbHNlKTsgLy8gSW5jbHVkZSB0aGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGZhaWxlZCBjaGlsZHJlbiBiZWZvcmUgY29udGludWluZy5cblxuICAgICAgdmFyIGFjdHVhbER1cmF0aW9uID0gaW5jb21wbGV0ZVdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgICB2YXIgY2hpbGQgPSBpbmNvbXBsZXRlV29yay5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbdW5zYWZlLWFkZGl0aW9uXSBhZGRpdGlvbiB3aXRoIHBvc3NpYmxlIG51bGwvdW5kZWZpbmVkIHZhbHVlXG4gICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIGluY29tcGxldGVXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgfSAvLyBUT0RPOiBPbmNlIHdlIHN0b3AgcHJlcmVuZGVyaW5nIHNpYmxpbmdzLCBpbnN0ZWFkIG9mIHJlc2V0dGluZyB0aGUgcGFyZW50XG4gICAgLy8gb2YgdGhlIG5vZGUgYmVpbmcgdW53b3VuZCwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVzZXQgbm9kZSBpdHNlbGYgYXMgd2VcbiAgICAvLyB1bndpbmQgdGhlIHN0YWNrLiBTYXZlcyBhbiBhZGRpdGlvbmFsIG51bGwgY2hlY2suXG5cblxuICAgIHZhciByZXR1cm5GaWJlciA9IGluY29tcGxldGVXb3JrLnJldHVybjtcblxuICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gTWFyayB0aGUgcGFyZW50IGZpYmVyIGFzIGluY29tcGxldGUgYW5kIGNsZWFyIGl0cyBzdWJ0cmVlIGZsYWdzLlxuICAgICAgLy8gVE9ETzogT25jZSB3ZSBzdG9wIHByZXJlbmRlcmluZyBzaWJsaW5ncywgd2UgbWF5IGJlIGFibGUgdG8gZ2V0IHJpZCBvZlxuICAgICAgLy8gdGhlIEluY29tcGxldGUgZmxhZyBiZWNhdXNlIHVud2luZGluZyB0byB0aGUgbmVhcmVzdCBib3VuZGFyeSB3aWxsXG4gICAgICAvLyBoYXBwZW4gc3luY2hyb25vdXNseS5cbiAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IEluY29tcGxldGU7XG4gICAgICByZXR1cm5GaWJlci5zdWJ0cmVlRmxhZ3MgPSBOb0ZsYWdzJDE7XG4gICAgICByZXR1cm5GaWJlci5kZWxldGlvbnMgPSBudWxsO1xuICAgIH0gLy8gTk9URTogSWYgd2UgcmUtZW5hYmxlIHNpYmxpbmcgcHJlcmVuZGVyaW5nIGluIHNvbWUgY2FzZXMsIGhlcmUgd2VcbiAgICAvLyB3b3VsZCBzd2l0Y2ggdG8gdGhlIG5vcm1hbCBjb21wbGV0aW9uIHBhdGg6IGNoZWNrIGlmIGEgc2libGluZ1xuICAgIC8vIGV4aXN0cywgYW5kIGlmIHNvLCBiZWdpbiB3b3JrIG9uIGl0LlxuICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIHRvIHRoZSBwYXJlbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSB3ZSBiYWlsIG91dCB3aGVuIHdlIGdldCBhIG51bGxcblxuXG4gICAgaW5jb21wbGV0ZVdvcmsgPSByZXR1cm5GaWJlcjsgLy8gVXBkYXRlIHRoZSBuZXh0IHRoaW5nIHdlJ3JlIHdvcmtpbmcgb24gaW4gY2FzZSBzb21ldGhpbmcgdGhyb3dzLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBpbmNvbXBsZXRlV29yaztcbiAgfSB3aGlsZSAoaW5jb21wbGV0ZVdvcmsgIT09IG51bGwpOyAvLyBXZSd2ZSB1bndvdW5kIGFsbCB0aGUgd2F5IHRvIHRoZSByb290LlxuXG5cbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3REaWROb3RDb21wbGV0ZTtcbiAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRSb290KHJvb3QsIHJlY292ZXJhYmxlRXJyb3JzLCB0cmFuc2l0aW9ucywgc3Bhd25lZExhbmUpIHtcbiAgLy8gVE9ETzogVGhpcyBubyBsb25nZXIgbWFrZXMgYW55IHNlbnNlLiBXZSBhbHJlYWR5IHdyYXAgdGhlIG11dGF0aW9uIGFuZFxuICAvLyBsYXlvdXQgcGhhc2VzLiBTaG91bGQgYmUgYWJsZSB0byByZW1vdmUuXG4gIHZhciBwcmV2aW91c1VwZGF0ZUxhbmVQcmlvcml0eSA9IGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSgpO1xuICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG5cbiAgdHJ5IHtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBudWxsO1xuICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHkpO1xuICAgIGNvbW1pdFJvb3RJbXBsKHJvb3QsIHJlY292ZXJhYmxlRXJyb3JzLCB0cmFuc2l0aW9ucywgcHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHksIHNwYXduZWRMYW5lKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3RJbXBsKHJvb3QsIHJlY292ZXJhYmxlRXJyb3JzLCB0cmFuc2l0aW9ucywgcmVuZGVyUHJpb3JpdHlMZXZlbCwgc3Bhd25lZExhbmUpIHtcbiAgZG8ge1xuICAgIC8vIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCB3aWxsIGNhbGwgYGZsdXNoU3luY1VwZGF0ZVF1ZXVlYCBhdCB0aGUgZW5kLCB3aGljaFxuICAgIC8vIG1lYW5zIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCB3aWxsIHNvbWV0aW1lcyByZXN1bHQgaW4gYWRkaXRpb25hbFxuICAgIC8vIHBhc3NpdmUgZWZmZWN0cy4gU28gd2UgbmVlZCB0byBrZWVwIGZsdXNoaW5nIGluIGEgbG9vcCB1bnRpbCB0aGVyZSBhcmVcbiAgICAvLyBubyBtb3JlIHBlbmRpbmcgZWZmZWN0cy5cbiAgICAvLyBUT0RPOiBNaWdodCBiZSBiZXR0ZXIgaWYgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIGRpZCBub3QgYXV0b21hdGljYWxseVxuICAgIC8vIGZsdXNoIHN5bmNocm9ub3VzIHdvcmsgYXQgdGhlIGVuZCwgdG8gYXZvaWQgZmFjdG9yaW5nIGhhemFyZHMgbGlrZSB0aGlzLlxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgfSB3aGlsZSAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgIT09IG51bGwpO1xuXG4gIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpO1xuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLicpO1xuICB9XG5cbiAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuZmluaXNoZWRXb3JrO1xuICB2YXIgbGFuZXMgPSByb290LmZpbmlzaGVkTGFuZXM7XG5cbiAge1xuICAgIG1hcmtDb21taXRTdGFydGVkKGxhbmVzKTtcbiAgfVxuXG4gIGlmIChmaW5pc2hlZFdvcmsgPT09IG51bGwpIHtcblxuICAgIHtcbiAgICAgIG1hcmtDb21taXRTdG9wcGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgaWYgKGxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgICAgIGVycm9yKCdyb290LmZpbmlzaGVkTGFuZXMgc2hvdWxkIG5vdCBiZSBlbXB0eSBkdXJpbmcgYSBjb21taXQuIFRoaXMgaXMgYSAnICsgJ2J1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKGZpbmlzaGVkV29yayA9PT0gcm9vdC5jdXJyZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tbWl0IHRoZSBzYW1lIHRyZWUgYXMgYmVmb3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgJyArICdhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gIH0gLy8gY29tbWl0Um9vdCBuZXZlciByZXR1cm5zIGEgY29udGludWF0aW9uOyBpdCBhbHdheXMgZmluaXNoZXMgc3luY2hyb25vdXNseS5cbiAgLy8gU28gd2UgY2FuIGNsZWFyIHRoZXNlIG5vdyB0byBhbGxvdyBhIG5ldyBjYWxsYmFjayB0byBiZSBzY2hlZHVsZWQuXG5cblxuICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IE5vTGFuZTtcbiAgcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0ID0gbnVsbDsgLy8gQ2hlY2sgd2hpY2ggbGFuZXMgbm8gbG9uZ2VyIGhhdmUgYW55IHdvcmsgc2NoZWR1bGVkIG9uIHRoZW0sIGFuZCBtYXJrXG4gIC8vIHRob3NlIGFzIGZpbmlzaGVkLlxuXG4gIHZhciByZW1haW5pbmdMYW5lcyA9IG1lcmdlTGFuZXMoZmluaXNoZWRXb3JrLmxhbmVzLCBmaW5pc2hlZFdvcmsuY2hpbGRMYW5lcyk7IC8vIE1ha2Ugc3VyZSB0byBhY2NvdW50IGZvciBsYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBieSBhIGNvbmN1cnJlbnQgZXZlbnRcbiAgLy8gZHVyaW5nIHRoZSByZW5kZXIgcGhhc2U7IGRvbid0IG1hcmsgdGhlbSBhcyBmaW5pc2hlZC5cblxuICB2YXIgY29uY3VycmVudGx5VXBkYXRlZExhbmVzID0gZ2V0Q29uY3VycmVudGx5VXBkYXRlZExhbmVzKCk7XG4gIHJlbWFpbmluZ0xhbmVzID0gbWVyZ2VMYW5lcyhyZW1haW5pbmdMYW5lcywgY29uY3VycmVudGx5VXBkYXRlZExhbmVzKTtcbiAgbWFya1Jvb3RGaW5pc2hlZChyb290LCByZW1haW5pbmdMYW5lcywgc3Bhd25lZExhbmUpO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBXZSBjYW4gcmVzZXQgdGhlc2Ugbm93IHRoYXQgdGhleSBhcmUgZmluaXNoZWQuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICB9IC8vIElmIHRoZXJlIGFyZSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cywgc2NoZWR1bGUgYSBjYWxsYmFjayB0byBwcm9jZXNzIHRoZW0uXG4gIC8vIERvIHRoaXMgYXMgZWFybHkgYXMgcG9zc2libGUsIHNvIGl0IGlzIHF1ZXVlZCBiZWZvcmUgYW55dGhpbmcgZWxzZSB0aGF0XG4gIC8vIG1pZ2h0IGdldCBzY2hlZHVsZWQgaW4gdGhlIGNvbW1pdCBwaGFzZS4gKFNlZSAjMTY3MTQuKVxuICAvLyBUT0RPOiBEZWxldGUgYWxsIG90aGVyIHBsYWNlcyB0aGF0IHNjaGVkdWxlIHRoZSBwYXNzaXZlIGVmZmVjdCBjYWxsYmFja1xuICAvLyBUaGV5J3JlIHJlZHVuZGFudC5cblxuXG4gIGlmICgoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIFBhc3NpdmVNYXNrKSAhPT0gTm9GbGFncyQxIHx8IChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBQYXNzaXZlTWFzaykgIT09IE5vRmxhZ3MkMSkge1xuICAgIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbWFpbmluZ0xhbmVzID0gcmVtYWluaW5nTGFuZXM7IC8vIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMgbWlnaHQgYmUgb3ZlcndyaXR0ZW4sIHNvIHdlIHdhbnRcbiAgICAgIC8vIHRvIHN0b3JlIGl0IGluIHBlbmRpbmdQYXNzaXZlVHJhbnNpdGlvbnMgdW50aWwgdGhleSBnZXQgcHJvY2Vzc2VkXG4gICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgdGhpcyB0aHJvdWdoIGFzIGFuIGFyZ3VtZW50IHRvIGNvbW1pdFJvb3RcbiAgICAgIC8vIGJlY2F1c2Ugd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyBtaWdodCBoYXZlIGNoYW5nZWQgYmV0d2VlblxuICAgICAgLy8gdGhlIHByZXZpb3VzIHJlbmRlciBhbmQgY29tbWl0IGlmIHdlIHRocm90dGxlIHRoZSBjb21taXRcbiAgICAgIC8vIHdpdGggc2V0VGltZW91dFxuXG4gICAgICBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zID0gdHJhbnNpdGlvbnM7XG4gICAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpOyAvLyBUaGlzIHJlbmRlciB0cmlnZ2VyZWQgcGFzc2l2ZSBlZmZlY3RzOiByZWxlYXNlIHRoZSByb290IGNhY2hlIHBvb2xcbiAgICAgICAgLy8gKmFmdGVyKiBwYXNzaXZlIGVmZmVjdHMgZmlyZSB0byBhdm9pZCBmcmVlaW5nIGEgY2FjaGUgcG9vbCB0aGF0IG1heVxuICAgICAgICAvLyBiZSByZWZlcmVuY2VkIGJ5IGEgbm9kZSBpbiB0aGUgdHJlZSAoSG9zdFJvb3QsIENhY2hlIGJvdW5kYXJ5IGV0YylcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IGVmZmVjdHMgaW4gdGhlIHdob2xlIHRyZWUuXG4gIC8vIFRPRE86IFRoaXMgaXMgbGVmdCBvdmVyIGZyb20gdGhlIGVmZmVjdCBsaXN0IGltcGxlbWVudGF0aW9uLCB3aGVyZSB3ZSBoYWRcbiAgLy8gdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYGZpcnN0RWZmZWN0YCB0byBzYXRpc2Z5IEZsb3cuIEkgdGhpbmsgdGhlXG4gIC8vIG9ubHkgb3RoZXIgcmVhc29uIHRoaXMgb3B0aW1pemF0aW9uIGV4aXN0cyBpcyBiZWNhdXNlIGl0IGFmZmVjdHMgcHJvZmlsaW5nLlxuICAvLyBSZWNvbnNpZGVyIHdoZXRoZXIgdGhpcyBpcyBuZWNlc3NhcnkuXG5cblxuICB2YXIgc3VidHJlZUhhc0VmZmVjdHMgPSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIChCZWZvcmVNdXRhdGlvbk1hc2sgfCBNdXRhdGlvbk1hc2sgfCBMYXlvdXRNYXNrIHwgUGFzc2l2ZU1hc2spKSAhPT0gTm9GbGFncyQxO1xuICB2YXIgcm9vdEhhc0VmZmVjdCA9IChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAoQmVmb3JlTXV0YXRpb25NYXNrIHwgTXV0YXRpb25NYXNrIHwgTGF5b3V0TWFzayB8IFBhc3NpdmVNYXNrKSkgIT09IE5vRmxhZ3MkMTtcblxuICBpZiAoc3VidHJlZUhhc0VmZmVjdHMgfHwgcm9vdEhhc0VmZmVjdCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBudWxsO1xuICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCk7XG4gICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KERpc2NyZXRlRXZlbnRQcmlvcml0eSk7XG4gICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7IC8vIFJlc2V0IHRoaXMgdG8gbnVsbCBiZWZvcmUgY2FsbGluZyBsaWZlY3ljbGVzXG5cbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSBudWxsOyAvLyBUaGUgY29tbWl0IHBoYXNlIGlzIGJyb2tlbiBpbnRvIHNldmVyYWwgc3ViLXBoYXNlcy4gV2UgZG8gYSBzZXBhcmF0ZSBwYXNzXG4gICAgLy8gb2YgdGhlIGVmZmVjdCBsaXN0IGZvciBlYWNoIHBoYXNlOiBhbGwgbXV0YXRpb24gZWZmZWN0cyBjb21lIGJlZm9yZSBhbGxcbiAgICAvLyBsYXlvdXQgZWZmZWN0cywgYW5kIHNvIG9uLlxuICAgIC8vIFRoZSBmaXJzdCBwaGFzZSBhIFwiYmVmb3JlIG11dGF0aW9uXCIgcGhhc2UuIFdlIHVzZSB0aGlzIHBoYXNlIHRvIHJlYWQgdGhlXG4gICAgLy8gc3RhdGUgb2YgdGhlIGhvc3QgdHJlZSByaWdodCBiZWZvcmUgd2UgbXV0YXRlIGl0LiBUaGlzIGlzIHdoZXJlXG4gICAgLy8gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaXMgY2FsbGVkLlxuXG4gICAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG5cbiAgICB7XG4gICAgICAvLyBNYXJrIHRoZSBjdXJyZW50IGNvbW1pdCB0aW1lIHRvIGJlIHNoYXJlZCBieSBhbGwgUHJvZmlsZXJzIGluIHRoaXNcbiAgICAgIC8vIGJhdGNoLiBUaGlzIGVuYWJsZXMgdGhlbSB0byBiZSBncm91cGVkIGxhdGVyLlxuICAgICAgcmVjb3JkQ29tbWl0VGltZSgpO1xuICAgIH1cblxuXG4gICAgY29tbWl0TXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yaywgbGFuZXMpO1xuXG4gICAgcmVzZXRBZnRlckNvbW1pdCgpOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyB0cmVlIGlzIG5vdyB0aGUgY3VycmVudCB0cmVlLiBUaGlzIG11c3QgY29tZSBhZnRlclxuICAgIC8vIHRoZSBtdXRhdGlvbiBwaGFzZSwgc28gdGhhdCB0aGUgcHJldmlvdXMgdHJlZSBpcyBzdGlsbCBjdXJyZW50IGR1cmluZ1xuICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50LCBidXQgYmVmb3JlIHRoZSBsYXlvdXQgcGhhc2UsIHNvIHRoYXQgdGhlIGZpbmlzaGVkXG4gICAgLy8gd29yayBpcyBjdXJyZW50IGR1cmluZyBjb21wb25lbnREaWRNb3VudC9VcGRhdGUuXG5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIFRoZSBuZXh0IHBoYXNlIGlzIHRoZSBsYXlvdXQgcGhhc2UsIHdoZXJlIHdlIGNhbGwgZWZmZWN0cyB0aGF0IHJlYWRcblxuICAgIHtcbiAgICAgIG1hcmtMYXlvdXRFZmZlY3RzU3RhcnRlZChsYW5lcyk7XG4gICAgfVxuXG4gICAgY29tbWl0TGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmssIHJvb3QsIGxhbmVzKTtcblxuICAgIHtcbiAgICAgIG1hcmtMYXlvdXRFZmZlY3RzU3RvcHBlZCgpO1xuICAgIH1cbiAgICAvLyBvcHBvcnR1bml0eSB0byBwYWludC5cblxuXG4gICAgcmVxdWVzdFBhaW50KCk7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0OyAvLyBSZXNldCB0aGUgcHJpb3JpdHkgdG8gdGhlIHByZXZpb3VzIG5vbi1zeW5jIHZhbHVlLlxuXG4gICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KHByZXZpb3VzUHJpb3JpdHkpO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICB9IGVsc2Uge1xuICAgIC8vIE5vIGVmZmVjdHMuXG4gICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBNZWFzdXJlIHRoZXNlIGFueXdheSBzbyB0aGUgZmxhbWVncmFwaCBleHBsaWNpdGx5IHNob3dzIHRoYXQgdGhlcmUgd2VyZVxuICAgIC8vIG5vIGVmZmVjdHMuXG4gICAgLy8gVE9ETzogTWF5YmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gcmVwb3J0IHRoaXMuXG5cbiAgICB7XG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMgPSByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cztcblxuICBpZiAocm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAvLyBUaGlzIGNvbW1pdCBoYXMgcGFzc2l2ZSBlZmZlY3RzLiBTdGFzaCBhIHJlZmVyZW5jZSB0byB0aGVtLiBCdXQgZG9uJ3RcbiAgICAvLyBzY2hlZHVsZSBhIGNhbGxiYWNrIHVudGlsIGFmdGVyIGZsdXNoaW5nIGxheW91dCB3b3JrLlxuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gICAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSByb290O1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gbGFuZXM7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlcmUgd2VyZSBubyBwYXNzaXZlIGVmZmVjdHMsIHNvIHdlIGNhbiBpbW1lZGlhdGVseSByZWxlYXNlIHRoZSBjYWNoZVxuICAgIC8vIHBvb2wgZm9yIHRoaXMgcmVuZGVyLlxuICAgIHJlbGVhc2VSb290UG9vbGVkQ2FjaGUocm9vdCwgcmVtYWluaW5nTGFuZXMpO1xuXG4gICAge1xuICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcbiAgICAgIHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSBudWxsO1xuICAgIH1cbiAgfSAvLyBSZWFkIHRoaXMgYWdhaW4sIHNpbmNlIGFuIGVmZmVjdCBtaWdodCBoYXZlIHVwZGF0ZWQgaXRcblxuXG4gIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7IC8vIENoZWNrIGlmIHRoZXJlJ3MgcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290XG4gIC8vIFRPRE86IFRoaXMgaXMgcGFydCBvZiB0aGUgYGNvbXBvbmVudERpZENhdGNoYCBpbXBsZW1lbnRhdGlvbi4gSXRzIHB1cnBvc2VcbiAgLy8gaXMgdG8gZGV0ZWN0IHdoZXRoZXIgc29tZXRoaW5nIG1pZ2h0IGhhdmUgY2FsbGVkIHNldFN0YXRlIGluc2lkZVxuICAvLyBgY29tcG9uZW50RGlkQ2F0Y2hgLiBUaGUgbWVjaGFuaXNtIGlzIGtub3duIHRvIGJlIGZsYXdlZCBiZWNhdXNlIGBzZXRTdGF0ZWBcbiAgLy8gaW5zaWRlIGBjb21wb25lbnREaWRDYXRjaGAgaXMgaXRzZWxmIGZsYXdlZCDigJQgdGhhdCdzIHdoeSB3ZSByZWNvbW1lbmRcbiAgLy8gYGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcmAgaW5zdGVhZC4gSG93ZXZlciwgaXQgY291bGQgYmUgaW1wcm92ZWQgYnlcbiAgLy8gY2hlY2tpbmcgaWYgcmVtYWluaW5nTGFuZXMgaW5jbHVkZXMgU3luYyB3b3JrLCBpbnN0ZWFkIG9mIHdoZXRoZXIgdGhlcmUnc1xuICAvLyBhbnkgd29yayByZW1haW5pbmcgYXQgYWxsICh3aGljaCB3b3VsZCBhbHNvIGluY2x1ZGUgc3R1ZmYgbGlrZSBTdXNwZW5zZVxuICAvLyByZXRyaWVzIG9yIHRyYW5zaXRpb25zKS4gSXQncyBiZWVuIGxpa2UgdGhpcyBmb3IgYSB3aGlsZSwgdGhvdWdoLCBzbyBmaXhpbmdcbiAgLy8gaXQgcHJvYmFibHkgaXNuJ3QgdGhhdCB1cmdlbnQuXG5cbiAgaWYgKHJlbWFpbmluZ0xhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyByZW1haW5pbmcgd29yaywgd2UgY2FuIGNsZWFyIHRoZSBzZXQgb2YgYWxyZWFkeSBmYWlsZWRcbiAgICAvLyBlcnJvciBib3VuZGFyaWVzLlxuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoIXJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIGNvbW1pdERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihyb290LCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgb25Db21taXRSb290JDEoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG5cbiAge1xuICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgcm9vdC5tZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIG9uQ29tbWl0Um9vdCgpO1xuICB9IC8vIEFsd2F5cyBjYWxsIHRoaXMgYmVmb3JlIGV4aXRpbmcgYGNvbW1pdFJvb3RgLCB0byBlbnN1cmUgdGhhdCBhbnlcbiAgLy8gYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdCBpcyBzY2hlZHVsZWQuXG5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG5cbiAgaWYgKHJlY292ZXJhYmxlRXJyb3JzICE9PSBudWxsKSB7XG4gICAgLy8gVGhlcmUgd2VyZSBlcnJvcnMgZHVyaW5nIHRoaXMgcmVuZGVyLCBidXQgcmVjb3ZlcmVkIGZyb20gdGhlbSB3aXRob3V0XG4gICAgLy8gbmVlZGluZyB0byBzdXJmYWNlIGl0IHRvIHRoZSBVSS4gV2UgbG9nIHRoZW0gaGVyZS5cbiAgICB2YXIgb25SZWNvdmVyYWJsZUVycm9yID0gcm9vdC5vblJlY292ZXJhYmxlRXJyb3I7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY292ZXJhYmxlRXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmVjb3ZlcmFibGVFcnJvciA9IHJlY292ZXJhYmxlRXJyb3JzW2ldO1xuICAgICAgdmFyIGVycm9ySW5mbyA9IG1ha2VFcnJvckluZm8ocmVjb3ZlcmFibGVFcnJvci5kaWdlc3QsIHJlY292ZXJhYmxlRXJyb3Iuc3RhY2spO1xuICAgICAgb25SZWNvdmVyYWJsZUVycm9yKHJlY292ZXJhYmxlRXJyb3IudmFsdWUsIGVycm9ySW5mbyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGhhc1VuY2F1Z2h0RXJyb3IpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG4gICAgdmFyIGVycm9yJDEgPSBmaXJzdFVuY2F1Z2h0RXJyb3I7XG4gICAgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvciQxO1xuICB9IC8vIElmIHRoZSBwYXNzaXZlIGVmZmVjdHMgYXJlIHRoZSByZXN1bHQgb2YgYSBkaXNjcmV0ZSByZW5kZXIsIGZsdXNoIHRoZW1cbiAgLy8gc3luY2hyb25vdXNseSBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRhc2sgc28gdGhhdCB0aGUgcmVzdWx0IGlzXG4gIC8vIGltbWVkaWF0ZWx5IG9ic2VydmFibGUuIE90aGVyd2lzZSwgd2UgYXNzdW1lIHRoYXQgdGhleSBhcmUgbm90XG4gIC8vIG9yZGVyLWRlcGVuZGVudCBhbmQgZG8gbm90IG5lZWQgdG8gYmUgb2JzZXJ2ZWQgYnkgZXh0ZXJuYWwgc3lzdGVtcywgc28gd2VcbiAgLy8gY2FuIHdhaXQgdW50aWwgYWZ0ZXIgcGFpbnQuXG4gIC8vIFRPRE86IFdlIGNhbiBvcHRpbWl6ZSB0aGlzIGJ5IG5vdCBzY2hlZHVsaW5nIHRoZSBjYWxsYmFjayBlYXJsaWVyLiBTaW5jZSB3ZVxuICAvLyBjdXJyZW50bHkgc2NoZWR1bGUgdGhlIGNhbGxiYWNrIGluIG11bHRpcGxlIHBsYWNlcywgd2lsbCB3YWl0IHVudGlsIHRob3NlXG4gIC8vIGFyZSBjb25zb2xpZGF0ZWQuXG5cblxuICBpZiAoaW5jbHVkZXNTeW5jTGFuZShwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcykgJiYgcm9vdC50YWcgIT09IExlZ2FjeVJvb3QpIHtcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIH0gLy8gUmVhZCB0aGlzIGFnYWluLCBzaW5jZSBhIHBhc3NpdmUgZWZmZWN0IG1pZ2h0IGhhdmUgdXBkYXRlZCBpdFxuXG5cbiAgcmVtYWluaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lczsgLy8gQ2hlY2sgaWYgdGhpcyByZW5kZXIgc2NoZWR1bGVkIGEgY2FzY2FkaW5nIHN5bmNocm9ub3VzIHVwZGF0ZS4gVGhpcyBpcyBhXG4gIC8vIGhldXJzdGljIHRvIGRldGVjdCBpbmZpbml0ZSB1cGRhdGUgbG9vcHMuIFdlIGFyZSBpbnRlbnRpb25hbGx5IGV4Y2x1ZGluZ1xuICAvLyBoeWRyYXRpb24gbGFuZXMgaW4gdGhpcyBjaGVjaywgYmVjYXVzZSByZW5kZXIgdHJpZ2dlcmVkIGJ5IHNlbGVjdGl2ZVxuICAvLyBoeWRyYXRpb24gaXMgY29uY2VwdHVhbGx5IG5vdCBhbiB1cGRhdGUuXG5cbiAgaWYgKCAvLyBXYXMgdGhlIGZpbmlzaGVkIHJlbmRlciB0aGUgcmVzdWx0IG9mIGFuIHVwZGF0ZSAobm90IGh5ZHJhdGlvbik/XG4gIGluY2x1ZGVzU29tZUxhbmUobGFuZXMsIFVwZGF0ZUxhbmVzKSAmJiAvLyBEaWQgaXQgc2NoZWR1bGUgYSBzeW5jIHVwZGF0ZT9cbiAgaW5jbHVkZXNTb21lTGFuZShyZW1haW5pbmdMYW5lcywgU3luY1VwZGF0ZUxhbmVzKSkge1xuICAgIHtcbiAgICAgIG1hcmtOZXN0ZWRVcGRhdGVTY2hlZHVsZWQoKTtcbiAgICB9IC8vIENvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHJvb3Qgc3luY2hyb25vdXNseSByZS1yZW5kZXJzIHdpdGhvdXRcbiAgICAvLyBmaW5pc2hpbmcuIElmIHRoZXJlIGFyZSB0b28gbWFueSwgaXQgaW5kaWNhdGVzIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wLlxuXG5cbiAgICBpZiAocm9vdCA9PT0gcm9vdFdpdGhOZXN0ZWRVcGRhdGVzKSB7XG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSByb290O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gIH0gLy8gSWYgbGF5b3V0IHdvcmsgd2FzIHNjaGVkdWxlZCwgZmx1c2ggaXQgbm93LlxuXG5cbiAgZmx1c2hTeW5jV29ya09uQWxsUm9vdHMoKTtcblxuICB7XG4gICAgbWFya0NvbW1pdFN0b3BwZWQoKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBtYWtlRXJyb3JJbmZvKGRpZ2VzdCwgY29tcG9uZW50U3RhY2spIHtcbiAge1xuICAgIHZhciBlcnJvckluZm8gPSB7XG4gICAgICBjb21wb25lbnRTdGFjazogY29tcG9uZW50U3RhY2ssXG4gICAgICBkaWdlc3Q6IGRpZ2VzdFxuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9ySW5mbywgJ2RpZ2VzdCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVycm9yKCdZb3UgYXJlIGFjY2Vzc2luZyBcImRpZ2VzdFwiIGZyb20gdGhlIGVycm9ySW5mbyBvYmplY3QgcGFzc2VkIHRvIG9uUmVjb3ZlcmFibGVFcnJvci4nICsgJyBUaGlzIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFJlYWN0LicgKyAnIFRvIGFjY2VzcyB0aGUgZGlnZXN0IG9mIGFuIEVycm9yIGxvb2sgZm9yIHRoaXMgcHJvcGVydHkgb24gdGhlIEVycm9yIGluc3RhbmNlIGl0c2VsZi4nKTtcblxuICAgICAgICByZXR1cm4gZGlnZXN0O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlcnJvckluZm87XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVsZWFzZVJvb3RQb29sZWRDYWNoZShyb290LCByZW1haW5pbmdMYW5lcykge1xuICB7XG4gICAgdmFyIHBvb2xlZENhY2hlTGFuZXMgPSByb290LnBvb2xlZENhY2hlTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG5cbiAgICBpZiAocG9vbGVkQ2FjaGVMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgICAgLy8gTm9uZSBvZiB0aGUgcmVtYWluaW5nIHdvcmsgcmVsaWVzIG9uIHRoZSBjYWNoZSBwb29sLiBDbGVhciBpdCBzb1xuICAgICAgLy8gc3Vic2VxdWVudCByZXF1ZXN0cyBnZXQgYSBuZXcgY2FjaGVcbiAgICAgIHZhciBwb29sZWRDYWNoZSA9IHJvb3QucG9vbGVkQ2FjaGU7XG5cbiAgICAgIGlmIChwb29sZWRDYWNoZSAhPSBudWxsKSB7XG4gICAgICAgIHJvb3QucG9vbGVkQ2FjaGUgPSBudWxsO1xuICAgICAgICByZWxlYXNlQ2FjaGUocG9vbGVkQ2FjaGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzKCkge1xuICAvLyBSZXR1cm5zIHdoZXRoZXIgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgZmx1c2hlZC5cbiAgLy8gVE9ETzogQ29tYmluZSB0aGlzIGNoZWNrIHdpdGggdGhlIG9uZSBpbiBmbHVzaFBhc3NpdmVFRmZlY3RzSW1wbC4gV2Ugc2hvdWxkXG4gIC8vIHByb2JhYmx5IGp1c3QgY29tYmluZSB0aGUgdHdvIGZ1bmN0aW9ucy4gSSBiZWxpZXZlIHRoZXkgd2VyZSBvbmx5IHNlcGFyYXRlXG4gIC8vIGluIHRoZSBmaXJzdCBwbGFjZSBiZWNhdXNlIHdlIHVzZWQgdG8gd3JhcCBpdCB3aXRoXG4gIC8vIGBTY2hlZHVsZXIucnVuV2l0aFByaW9yaXR5YCwgd2hpY2ggYWNjZXB0cyBhIGZ1bmN0aW9uLiBCdXQgbm93IHdlIHRyYWNrIHRoZVxuICAvLyBwcmlvcml0eSB3aXRoaW4gUmVhY3QgaXRzZWxmLCBzbyB3ZSBjYW4gbXV0YXRlIHRoZSB2YXJpYWJsZSBkaXJlY3RseS5cbiAgaWYgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzICE9PSBudWxsKSB7XG4gICAgLy8gQ2FjaGUgdGhlIHJvb3Qgc2luY2Ugcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgaXMgY2xlYXJlZCBpblxuICAgIC8vIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsXG4gICAgdmFyIHJvb3QgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0czsgLy8gQ2FjaGUgYW5kIGNsZWFyIHRoZSByZW1haW5pbmcgbGFuZXMgZmxhZzsgaXQgbXVzdCBiZSByZXNldCBzaW5jZSB0aGlzXG4gICAgLy8gbWV0aG9kIGNhbiBiZSBjYWxsZWQgZnJvbSB2YXJpb3VzIHBsYWNlcywgbm90IGFsd2F5cyBmcm9tIGNvbW1pdFJvb3RcbiAgICAvLyB3aGVyZSB0aGUgcmVtYWluaW5nIGxhbmVzIGFyZSBrbm93blxuXG4gICAgdmFyIHJlbWFpbmluZ0xhbmVzID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVtYWluaW5nTGFuZXM7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVtYWluaW5nTGFuZXMgPSBOb0xhbmVzO1xuICAgIHZhciByZW5kZXJQcmlvcml0eSA9IGxhbmVzVG9FdmVudFByaW9yaXR5KHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzKTtcbiAgICB2YXIgcHJpb3JpdHkgPSBsb3dlckV2ZW50UHJpb3JpdHkoRGVmYXVsdEV2ZW50UHJpb3JpdHksIHJlbmRlclByaW9yaXR5KTtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoKTtcblxuICAgIHRyeSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBudWxsO1xuICAgICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KHByaW9yaXR5KTtcbiAgICAgIHJldHVybiBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNQcmlvcml0eSk7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjsgLy8gT25jZSBwYXNzaXZlIGVmZmVjdHMgaGF2ZSBydW4gZm9yIHRoZSB0cmVlIC0gZ2l2aW5nIGNvbXBvbmVudHMgYVxuICAgICAgLy8gY2hhbmNlIHRvIHJldGFpbiBjYWNoZSBpbnN0YW5jZXMgdGhleSB1c2UgLSByZWxlYXNlIHRoZSBwb29sZWRcbiAgICAgIC8vIGNhY2hlIGF0IHRoZSByb290IChpZiB0aGVyZSBpcyBvbmUpXG5cbiAgICAgIHJlbGVhc2VSb290UG9vbGVkQ2FjaGUocm9vdCwgcmVtYWluaW5nTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZVByb2ZpbGVyRWZmZWN0KGZpYmVyKSB7XG4gIHtcbiAgICBwZW5kaW5nUGFzc2l2ZVByb2ZpbGVyRWZmZWN0cy5wdXNoKGZpYmVyKTtcblxuICAgIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKCkge1xuICBpZiAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gQ2FjaGUgYW5kIGNsZWFyIHRoZSB0cmFuc2l0aW9ucyBmbGFnXG5cblxuICB2YXIgdHJhbnNpdGlvbnMgPSBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zO1xuICBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zID0gbnVsbDtcbiAgdmFyIHJvb3QgPSByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cztcbiAgdmFyIGxhbmVzID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXM7XG4gIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID0gbnVsbDsgLy8gVE9ETzogVGhpcyBpcyBzb21ldGltZXMgb3V0IG9mIHN5bmMgd2l0aCByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cy5cbiAgLy8gRmlndXJlIG91dCB3aHkgYW5kIGZpeCBpdC4gSXQncyBub3QgY2F1c2luZyBhbnkga25vd24gaXNzdWVzIChwcm9iYWJseVxuICAvLyBiZWNhdXNlIGl0J3Mgb25seSB1c2VkIGZvciBwcm9maWxpbmcpLCBidXQgaXQncyBhIHJlZmFjdG9yIGhhemFyZC5cblxuICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZsdXNoIHBhc3NpdmUgZWZmZWN0cyB3aGlsZSBhbHJlYWR5IHJlbmRlcmluZy4nKTtcbiAgfVxuXG4gIHtcbiAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgIGRpZFNjaGVkdWxlVXBkYXRlRHVyaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgfVxuXG4gIHtcbiAgICBtYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkKGxhbmVzKTtcbiAgfVxuXG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzKHJvb3QuY3VycmVudCk7XG4gIGNvbW1pdFBhc3NpdmVNb3VudEVmZmVjdHMocm9vdCwgcm9vdC5jdXJyZW50LCBsYW5lcywgdHJhbnNpdGlvbnMpOyAvLyBUT0RPOiBNb3ZlIHRvIGNvbW1pdFBhc3NpdmVNb3VudEVmZmVjdHNcblxuICB7XG4gICAgdmFyIHByb2ZpbGVyRWZmZWN0cyA9IHBlbmRpbmdQYXNzaXZlUHJvZmlsZXJFZmZlY3RzO1xuICAgIHBlbmRpbmdQYXNzaXZlUHJvZmlsZXJFZmZlY3RzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2ZpbGVyRWZmZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGZpYmVyID0gcHJvZmlsZXJFZmZlY3RzW2ldO1xuICAgICAgY29tbWl0UGFzc2l2ZUVmZmVjdER1cmF0aW9ucyhyb290LCBmaWJlcik7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIG1hcmtQYXNzaXZlRWZmZWN0c1N0b3BwZWQoKTtcbiAgfVxuXG4gIHtcbiAgICBjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdCwgdHJ1ZSk7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIGZsdXNoU3luY1dvcmtPbkFsbFJvb3RzKCk7XG5cbiAge1xuICAgIC8vIElmIGFkZGl0aW9uYWwgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgc2NoZWR1bGVkLCBpbmNyZW1lbnQgYSBjb3VudGVyLiBJZiB0aGlzXG4gICAgLy8gZXhjZWVkcyB0aGUgbGltaXQsIHdlJ2xsIGZpcmUgYSB3YXJuaW5nLlxuICAgIGlmIChkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzKSB7XG4gICAgICBpZiAocm9vdCA9PT0gcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcykge1xuICAgICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG4gICAgICAgIHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSByb290O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuICAgIH1cblxuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICAgIGRpZFNjaGVkdWxlVXBkYXRlRHVyaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgfSAvLyBUT0RPOiBNb3ZlIHRvIGNvbW1pdFBhc3NpdmVNb3VudEVmZmVjdHNcblxuXG4gIG9uUG9zdENvbW1pdFJvb3Qocm9vdCk7XG5cbiAge1xuICAgIHZhciBzdGF0ZU5vZGUgPSByb290LmN1cnJlbnQuc3RhdGVOb2RlO1xuICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkge1xuICByZXR1cm4gbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgIT09IG51bGwgJiYgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuaGFzKGluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIG1hcmtMZWdhY3lFcnJvckJvdW5kYXJ5QXNGYWlsZWQoaW5zdGFuY2UpIHtcbiAgaWYgKGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID09PSBudWxsKSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBuZXcgU2V0KFtpbnN0YW5jZV0pO1xuICB9IGVsc2Uge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmFkZChpbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yKGVycm9yKSB7XG4gIGlmICghaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSB0cnVlO1xuICAgIGZpcnN0VW5jYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59XG5cbnZhciBvblVuY2F1Z2h0RXJyb3IgPSBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3I7XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHJvb3RGaWJlciwgc291cmNlRmliZXIsIGVycm9yKSB7XG4gIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihlcnJvciwgc291cmNlRmliZXIpO1xuICB2YXIgdXBkYXRlID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHJvb3RGaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIHVwZGF0ZSwgU3luY0xhbmUpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIFN5bmNMYW5lKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3Ioc291cmNlRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yJDEpIHtcbiAge1xuICAgIHJlcG9ydFVuY2F1Z2h0RXJyb3JJbkRFVihlcnJvciQxKTtcbiAgICBzZXRJc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QoZmFsc2UpO1xuICB9XG5cbiAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAvLyBFcnJvciB3YXMgdGhyb3duIGF0IHRoZSByb290LiBUaGVyZSBpcyBubyBwYXJlbnQsIHNvIHRoZSByb290XG4gICAgLy8gaXRzZWxmIHNob3VsZCBjYXB0dXJlIGl0LlxuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHNvdXJjZUZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IkMSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpYmVyID0gbmVhcmVzdE1vdW50ZWRBbmNlc3RvcjtcblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICBpZiAoZmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoZmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvciQxKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBjdG9yID0gZmliZXIudHlwZTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSB7XG4gICAgICAgIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihlcnJvciQxLCBzb3VyY2VGaWJlcik7XG4gICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUsIFN5bmNMYW5lKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSk7XG4gICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gZmliZXIucmV0dXJuO1xuICB9XG5cbiAge1xuICAgIGVycm9yKCdJbnRlcm5hbCBSZWFjdCBlcnJvcjogQXR0ZW1wdGVkIHRvIGNhcHR1cmUgYSBjb21taXQgcGhhc2UgZXJyb3IgJyArICdpbnNpZGUgYSBkZXRhY2hlZCB0cmVlLiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdC4gUG90ZW50aWFsICcgKyAnY2F1c2VzIGluY2x1ZGUgZGVsZXRpbmcgdGhlIHNhbWUgZmliZXIgbW9yZSB0aGFuIG9uY2UsIGNvbW1pdHRpbmcgYW4gJyArICdhbHJlYWR5LWZpbmlzaGVkIHRyZWUsIG9yIGFuIGluY29uc2lzdGVudCByZXR1cm4gcG9pbnRlci5cXG5cXG4nICsgJ0Vycm9yIG1lc3NhZ2U6XFxuXFxuJXMnLCBlcnJvciQxKTtcbiAgfVxufVxuZnVuY3Rpb24gYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCBsYW5lcykge1xuICAvLyBBdHRhY2ggYSBwaW5nIGxpc3RlbmVyXG4gIC8vXG4gIC8vIFRoZSBkYXRhIG1pZ2h0IHJlc29sdmUgYmVmb3JlIHdlIGhhdmUgYSBjaGFuY2UgdG8gY29tbWl0IHRoZSBmYWxsYmFjay4gT3IsXG4gIC8vIGluIHRoZSBjYXNlIG9mIGEgcmVmcmVzaCwgd2UnbGwgbmV2ZXIgY29tbWl0IGEgZmFsbGJhY2suIFNvIHdlIG5lZWQgdG9cbiAgLy8gYXR0YWNoIGEgbGlzdGVuZXIgbm93LiBXaGVuIGl0IHJlc29sdmVzIChcInBpbmdzXCIpLCB3ZSBjYW4gZGVjaWRlIHdoZXRoZXIgdG9cbiAgLy8gdHJ5IHJlbmRlcmluZyB0aGUgdHJlZSBhZ2Fpbi5cbiAgLy9cbiAgLy8gT25seSBhdHRhY2ggYSBsaXN0ZW5lciBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBmb3IgdGhlIGxhbmVzXG4gIC8vIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcgKHdoaWNoIGFjdHMgbGlrZSBhIFwidGhyZWFkIElEXCIgaGVyZSkuXG4gIC8vXG4gIC8vIFdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIGluIGNvbmN1cnJlbnQgbW9kZS4gTGVnYWN5IFN1c3BlbnNlIGFsd2F5c1xuICAvLyBjb21taXRzIGZhbGxiYWNrcyBzeW5jaHJvbm91c2x5LCBzbyB0aGVyZSBhcmUgbm8gcGluZ3MuXG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgdmFyIHRocmVhZElEcztcblxuICBpZiAocGluZ0NhY2hlID09PSBudWxsKSB7XG4gICAgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG4gICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gIH0gZWxzZSB7XG4gICAgdGhyZWFkSURzID0gcGluZ0NhY2hlLmdldCh3YWtlYWJsZSk7XG5cbiAgICBpZiAodGhyZWFkSURzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICAgIHBpbmdDYWNoZS5zZXQod2FrZWFibGUsIHRocmVhZElEcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCF0aHJlYWRJRHMuaGFzKGxhbmVzKSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9IHRydWU7IC8vIE1lbW9pemUgdXNpbmcgdGhlIHRocmVhZCBJRCB0byBwcmV2ZW50IHJlZHVuZGFudCBsaXN0ZW5lcnMuXG5cbiAgICB0aHJlYWRJRHMuYWRkKGxhbmVzKTtcbiAgICB2YXIgcGluZyA9IHBpbmdTdXNwZW5kZWRSb290LmJpbmQobnVsbCwgcm9vdCwgd2FrZWFibGUsIGxhbmVzKTtcblxuICAgIHtcbiAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIHBlbmRpbmcgd29yayBzdGlsbCwgcmVzdG9yZSB0aGUgb3JpZ2luYWwgdXBkYXRlcnNcbiAgICAgICAgcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCBsYW5lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2FrZWFibGUudGhlbihwaW5nLCBwaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuXG4gIGlmIChwaW5nQ2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICBwaW5nQ2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgfVxuXG4gIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzKTtcbiAgd2FybklmU3VzcGVuc2VSZXNvbHV0aW9uTm90V3JhcHBlZFdpdGhBY3RERVYocm9vdCk7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCA9PT0gcm9vdCAmJiBpc1N1YnNldE9mTGFuZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsIHBpbmdlZExhbmVzKSkge1xuICAgIC8vIFJlY2VpdmVkIGEgcGluZyBhdCB0aGUgc2FtZSBwcmlvcml0eSBsZXZlbCBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHlcbiAgICAvLyByZW5kZXJpbmcuIFdlIG1pZ2h0IHdhbnQgdG8gcmVzdGFydCB0aGlzIHJlbmRlci4gVGhpcyBzaG91bGQgbWlycm9yXG4gICAgLy8gdGhlIGxvZ2ljIG9mIHdoZXRoZXIgb3Igbm90IGEgcm9vdCBzdXNwZW5kcyBvbmNlIGl0IGNvbXBsZXRlcy5cbiAgICAvLyBUT0RPOiBJZiB3ZSdyZSByZW5kZXJpbmcgc3luYyBlaXRoZXIgZHVlIHRvIFN5bmMsIEJhdGNoZWQgb3IgZXhwaXJlZCxcbiAgICAvLyB3ZSBzaG91bGQgcHJvYmFibHkgbmV2ZXIgcmVzdGFydC5cbiAgICAvLyBJZiB3ZSdyZSBzdXNwZW5kZWQgd2l0aCBkZWxheSwgb3IgaWYgaXQncyBhIHJldHJ5LCB3ZSdsbCBhbHdheXMgc3VzcGVuZFxuICAgIC8vIHNvIHdlIGNhbiBhbHdheXMgcmVzdGFydC5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkICYmIGluY2x1ZGVzT25seVJldHJpZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpICYmIG5vdyQxKCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIDwgRkFMTEJBQ0tfVEhST1RUTEVfTVMpIHtcbiAgICAgIC8vIEZvcmNlIGEgcmVzdGFydCBmcm9tIHRoZSByb290IGJ5IHVud2luZGluZyB0aGUgc3RhY2suIFVubGVzcyB0aGlzIGlzXG4gICAgICAvLyBiZWluZyBjYWxsZWQgZnJvbSB0aGUgcmVuZGVyIHBoYXNlLCBiZWNhdXNlIHRoYXQgd291bGQgY2F1c2UgYSBjcmFzaC5cbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGNhbid0IHJlc3RhcnQgcmlnaHQgbm93LCB3ZSBtaWdodCBnZXQgYW5cbiAgICAgIC8vIG9wcG9ydHVuaXR5IGxhdGVyLiBTbyB3ZSBtYXJrIHRoaXMgcmVuZGVyIGFzIGhhdmluZyBhIHBpbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMsIHBpbmdlZExhbmVzKTtcbiAgICB9XG4gIH1cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG59XG5cbmZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpIHtcbiAgLy8gVGhlIGJvdW5kYXJ5IGZpYmVyIChhIFN1c3BlbnNlIGNvbXBvbmVudCBvciBTdXNwZW5zZUxpc3QgY29tcG9uZW50KVxuICAvLyBwcmV2aW91c2x5IHdhcyByZW5kZXJlZCBpbiBpdHMgZmFsbGJhY2sgc3RhdGUuIE9uZSBvZiB0aGUgcHJvbWlzZXMgdGhhdFxuICAvLyBzdXNwZW5kZWQgaXQgaGFzIHJlc29sdmVkLCB3aGljaCBtZWFucyBhdCBsZWFzdCBwYXJ0IG9mIHRoZSB0cmVlIHdhc1xuICAvLyBsaWtlbHkgdW5ibG9ja2VkLiBUcnkgcmVuZGVyaW5nIGFnYWluLCBhdCBhIG5ldyBsYW5lcy5cbiAgaWYgKHJldHJ5TGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgLy8gVE9ETzogQXNzaWduIHRoaXMgdG8gYHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lYD8gdG8gYXZvaWRcbiAgICAvLyB1bm5lY2Vzc2FyeSBlbnRhbmdsZW1lbnQ/XG4gICAgcmV0cnlMYW5lID0gcmVxdWVzdFJldHJ5TGFuZShib3VuZGFyeUZpYmVyKTtcbiAgfSAvLyBUT0RPOiBTcGVjaWFsIGNhc2UgaWRsZSBwcmlvcml0eT9cblxuXG4gIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgcmV0cnlMYW5lKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV0cnlEZWh5ZHJhdGVkU3VzcGVuc2VCb3VuZGFyeShib3VuZGFyeUZpYmVyKSB7XG4gIHZhciBzdXNwZW5zZVN0YXRlID0gYm91bmRhcnlGaWJlci5tZW1vaXplZFN0YXRlO1xuICB2YXIgcmV0cnlMYW5lID0gTm9MYW5lO1xuXG4gIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsKSB7XG4gICAgcmV0cnlMYW5lID0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmU7XG4gIH1cblxuICByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVSZXRyeVdha2VhYmxlKGJvdW5kYXJ5RmliZXIsIHdha2VhYmxlKSB7XG4gIHZhciByZXRyeUxhbmUgPSBOb0xhbmU7IC8vIERlZmF1bHRcblxuICB2YXIgcmV0cnlDYWNoZTtcblxuICBzd2l0Y2ggKGJvdW5kYXJ5RmliZXIudGFnKSB7XG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gYm91bmRhcnlGaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXRyeUxhbmUgPSBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHJldHJ5Q2FjaGUgPSBib3VuZGFyeUZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICByZXRyeUNhY2hlID0gaW5zdGFuY2UuX3JldHJ5Q2FjaGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGluZ2VkIHVua25vd24gc3VzcGVuc2UgYm91bmRhcnkgdHlwZS4gJyArICdUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIFJlYWN0LicpO1xuICB9XG5cbiAgaWYgKHJldHJ5Q2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICByZXRyeUNhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gIH1cblxuICByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcbn1cbmZ1bmN0aW9uIHRocm93SWZJbmZpbml0ZVVwZGF0ZUxvb3BEZXRlY3RlZCgpIHtcbiAgaWYgKG5lc3RlZFVwZGF0ZUNvdW50ID4gTkVTVEVEX1VQREFURV9MSU1JVCkge1xuICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG4gICAgcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGw7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgJyArICdyZXBlYXRlZGx5IGNhbGxzIHNldFN0YXRlIGluc2lkZSBjb21wb25lbnRXaWxsVXBkYXRlIG9yICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiBuZXN0ZWQgdXBkYXRlcyB0byAnICsgJ3ByZXZlbnQgaW5maW5pdGUgbG9vcHMuJyk7XG4gIH1cblxuICB7XG4gICAgaWYgKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA+IE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCkge1xuICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcbiAgICAgIHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMgPSBudWxsO1xuXG4gICAgICBlcnJvcignTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50ICcgKyBcImNhbGxzIHNldFN0YXRlIGluc2lkZSB1c2VFZmZlY3QsIGJ1dCB1c2VFZmZlY3QgZWl0aGVyIGRvZXNuJ3QgXCIgKyAnaGF2ZSBhIGRlcGVuZGVuY3kgYXJyYXksIG9yIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZXMgb24gJyArICdldmVyeSByZW5kZXIuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpIHtcbiAge1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcoKTtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihyb290LCBoYXNQYXNzaXZlRWZmZWN0cykge1xuICB7XG4gICAge1xuICAgICAgbGVnYWN5Q29tbWl0RG91YmxlSW52b2tlRWZmZWN0c0luREVWKHJvb3QuY3VycmVudCwgaGFzUGFzc2l2ZUVmZmVjdHMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsZWdhY3lDb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYoZmliZXIsIGhhc1Bhc3NpdmVFZmZlY3RzKSB7XG4gIC8vIFRPRE8gKFN0cmljdEVmZmVjdHMpIFNob3VsZCB3ZSBzZXQgYSBtYXJrZXIgb24gdGhlIHJvb3QgaWYgaXQgY29udGFpbnMgc3RyaWN0IGVmZmVjdHNcbiAgLy8gc28gd2UgZG9uJ3QgdHJhdmVyc2UgdW5uZWNlc3NhcmlseT8gc2ltaWxhciB0byBzdWJ0cmVlRmxhZ3MgYnV0IGp1c3QgYXQgdGhlIHJvb3QgbGV2ZWwuXG4gIC8vIE1heWJlIG5vdCBhIGJpZyBkZWFsIHNpbmNlIHRoaXMgaXMgREVWIG9ubHkgYmVoYXZpb3IuXG4gIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gIGludm9rZUVmZmVjdHNJbkRldihmaWJlciwgTW91bnRMYXlvdXREZXYsIGludm9rZUxheW91dEVmZmVjdFVubW91bnRJbkRFVik7XG5cbiAgaWYgKGhhc1Bhc3NpdmVFZmZlY3RzKSB7XG4gICAgaW52b2tlRWZmZWN0c0luRGV2KGZpYmVyLCBNb3VudFBhc3NpdmVEZXYsIGludm9rZVBhc3NpdmVFZmZlY3RVbm1vdW50SW5ERVYpO1xuICB9XG5cbiAgaW52b2tlRWZmZWN0c0luRGV2KGZpYmVyLCBNb3VudExheW91dERldiwgaW52b2tlTGF5b3V0RWZmZWN0TW91bnRJbkRFVik7XG5cbiAgaWYgKGhhc1Bhc3NpdmVFZmZlY3RzKSB7XG4gICAgaW52b2tlRWZmZWN0c0luRGV2KGZpYmVyLCBNb3VudFBhc3NpdmVEZXYsIGludm9rZVBhc3NpdmVFZmZlY3RNb3VudEluREVWKTtcbiAgfVxuXG4gIHJlc2V0Q3VycmVudEZpYmVyKCk7XG59XG5cbmZ1bmN0aW9uIGludm9rZUVmZmVjdHNJbkRldihmaXJzdENoaWxkLCBmaWJlckZsYWdzLCBpbnZva2VFZmZlY3RGbikge1xuICB2YXIgY3VycmVudCA9IGZpcnN0Q2hpbGQ7XG4gIHZhciBzdWJ0cmVlUm9vdCA9IG51bGw7XG5cbiAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkge1xuICAgIHZhciBwcmltYXJ5U3VidHJlZUZsYWcgPSBjdXJyZW50LnN1YnRyZWVGbGFncyAmIGZpYmVyRmxhZ3M7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gc3VidHJlZVJvb3QgJiYgY3VycmVudC5jaGlsZCAhPSBudWxsICYmIHByaW1hcnlTdWJ0cmVlRmxhZyAhPT0gTm9GbGFncyQxKSB7XG4gICAgICBjdXJyZW50ID0gY3VycmVudC5jaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKChjdXJyZW50LmZsYWdzICYgZmliZXJGbGFncykgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICBpbnZva2VFZmZlY3RGbihjdXJyZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnQuc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5zaWJsaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudCA9IHN1YnRyZWVSb290ID0gY3VycmVudC5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbnVsbDtcbmZ1bmN0aW9uIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFdlIGxldCB0aGUgb3RoZXIgd2FybmluZyBhYm91dCByZW5kZXIgcGhhc2UgdXBkYXRlcyBkZWFsIHdpdGggdGhpcyBvbmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSBmaWJlci50YWc7XG5cbiAgICBpZiAodGFnICE9PSBJbmRldGVybWluYXRlQ29tcG9uZW50ICYmIHRhZyAhPT0gSG9zdFJvb3QgJiYgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJiB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIHRhZyAhPT0gRm9yd2FyZFJlZiAmJiB0YWcgIT09IE1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50KSB7XG4gICAgICAvLyBPbmx5IHdhcm4gZm9yIHVzZXItZGVmaW5lZCBjb21wb25lbnRzLCBub3QgaW50ZXJuYWwgb25lcyBsaWtlIFN1c3BlbnNlLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2Ugc2hvdyB0aGUgd2hvbGUgc3RhY2sgYnV0IGRlZHVwZSBvbiB0aGUgdG9wIGNvbXBvbmVudCdzIG5hbWUgYmVjYXVzZVxuICAgIC8vIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFsbW9zdCBhbHdheXMgbGllcyBpbnNpZGUgdGhhdCBjb21wb25lbnQuXG5cblxuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgJ1JlYWN0Q29tcG9uZW50JztcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW2NvbXBvbmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgZXJyb3IoXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGEgY29tcG9uZW50IHRoYXQgaGFzbid0IG1vdW50ZWQgeWV0LiBcIiArICdUaGlzIGluZGljYXRlcyB0aGF0IHlvdSBoYXZlIGEgc2lkZS1lZmZlY3QgaW4geW91ciByZW5kZXIgZnVuY3Rpb24gdGhhdCAnICsgJ2FzeW5jaHJvbm91c2x5IGxhdGVyIGNhbGxzIHRyaWVzIHRvIHVwZGF0ZSB0aGUgY29tcG9uZW50LiBNb3ZlIHRoaXMgd29yayB0byAnICsgJ3VzZUVmZmVjdCBpbnN0ZWFkLicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbnZhciBiZWdpbldvcms7XG5cbntcbiAgdmFyIGR1bW15RmliZXIgPSBudWxsO1xuXG4gIGJlZ2luV29yayA9IGZ1bmN0aW9uIChjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcykge1xuICAgIC8vIElmIGEgY29tcG9uZW50IHRocm93cyBhbiBlcnJvciwgd2UgcmVwbGF5IGl0IGFnYWluIGluIGEgc3luY2hyb25vdXNseVxuICAgIC8vIGRpc3BhdGNoZWQgZXZlbnQsIHNvIHRoYXQgdGhlIGRlYnVnZ2VyIHdpbGwgdHJlYXQgaXQgYXMgYW4gdW5jYXVnaHRcbiAgICAvLyBlcnJvciBTZWUgUmVhY3RFcnJvclV0aWxzIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgIC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNvcHkgdGhlIHdvcmstaW4tcHJvZ3Jlc3Mgb250byBhIGR1bW15XG4gICAgLy8gZmliZXIuIElmIGJlZ2luV29yayB0aHJvd3MsIHdlJ2xsIHVzZSB0aGlzIHRvIHJlc2V0IHRoZSBzdGF0ZS5cbiAgICB2YXIgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkgPSBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVihkdW1teUZpYmVyLCB1bml0T2ZXb3JrKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYmVnaW5Xb3JrJDEoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuICAgIH0gY2F0Y2ggKG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgIGlmIChkaWRTdXNwZW5kT3JFcnJvcldoaWxlSHlkcmF0aW5nREVWKCkgfHwgb3JpZ2luYWxFcnJvciA9PT0gU3VzcGVuc2VFeGNlcHRpb24gfHwgb3JpZ2luYWxFcnJvciA9PT0gU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uIHx8IG9yaWdpbmFsRXJyb3IgIT09IG51bGwgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRG9uJ3QgcmVwbGF5IHByb21pc2VzLlxuICAgICAgICAvLyBEb24ndCByZXBsYXkgZXJyb3JzIGlmIHdlIGFyZSBoeWRyYXRpbmcgYW5kIGhhdmUgYWxyZWFkeSBzdXNwZW5kZWQgb3IgaGFuZGxlZCBhbiBlcnJvclxuICAgICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgICAgfSAvLyBEb24ndCByZXNldCBjdXJyZW50IGRlYnVnIGZpYmVyLCBzaW5jZSB3ZSdyZSBhYm91dCB0byB3b3JrIG9uIHRoZVxuICAgICAgLy8gc2FtZSBmaWJlciBhZ2Fpbi5cbiAgICAgIC8vIFVud2luZCB0aGUgZmFpbGVkIHN0YWNrIGZyYW1lXG5cblxuICAgICAgcmVzZXRTdXNwZW5kZWRXb3JrTG9vcE9uVW53aW5kKHVuaXRPZldvcmspO1xuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIHVuaXRPZldvcmspOyAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm9wZXJ0aWVzIG9mIHRoZSBmaWJlci5cblxuICAgICAgYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodW5pdE9mV29yaywgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkpO1xuXG4gICAgICBpZiAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVzZXQgdGhlIHByb2ZpbGVyIHRpbWVyLlxuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgICB9IC8vIFJ1biBiZWdpbldvcmsgYWdhaW4uXG5cblxuICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGJlZ2luV29yayQxLCBudWxsLCBjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcyk7XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIHZhciByZXBsYXlFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICBpZiAodHlwZW9mIHJlcGxheUVycm9yID09PSAnb2JqZWN0JyAmJiByZXBsYXlFcnJvciAhPT0gbnVsbCAmJiByZXBsYXlFcnJvci5fc3VwcHJlc3NMb2dnaW5nICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yID09PSAnb2JqZWN0JyAmJiBvcmlnaW5hbEVycm9yICE9PSBudWxsICYmICFvcmlnaW5hbEVycm9yLl9zdXBwcmVzc0xvZ2dpbmcpIHtcbiAgICAgICAgICAvLyBJZiBzdXBwcmVzc2VkLCBsZXQgdGhlIGZsYWcgY2Fycnkgb3ZlciB0byB0aGUgb3JpZ2luYWwgZXJyb3Igd2hpY2ggaXMgdGhlIG9uZSB3ZSdsbCByZXRocm93LlxuICAgICAgICAgIG9yaWdpbmFsRXJyb3IuX3N1cHByZXNzTG9nZ2luZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gV2UgYWx3YXlzIHRocm93IHRoZSBvcmlnaW5hbCBlcnJvciBpbiBjYXNlIHRoZSBzZWNvbmQgcmVuZGVyIHBhc3MgaXMgbm90IGlkZW1wb3RlbnQuXG4gICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgYSBtZW1vaXplZCBmdW5jdGlvbiBvciBDb21tb25KUyBtb2R1bGUgZG9lc24ndCB0aHJvdyBhZnRlciBmaXJzdCBpbnZvY2F0aW9uLlxuXG5cbiAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgfVxuICB9O1xufVxuXG52YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSBmYWxzZTtcbnZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQ7XG5cbntcbiAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50ID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKGlzUmVuZGVyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSA9IHdvcmtJblByb2dyZXNzICYmIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8ICdVbmtub3duJzsgLy8gRGVkdXBlIGJ5IHRoZSByZW5kZXJpbmcgY29tcG9uZW50IGJlY2F1c2UgaXQncyB0aGUgb25lIHRoYXQgbmVlZHMgdG8gYmUgZml4ZWQuXG5cbiAgICAgICAgICAgIHZhciBkZWR1cGVLZXkgPSByZW5kZXJpbmdDb21wb25lbnROYW1lO1xuXG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5oYXMoZGVkdXBlS2V5KSkge1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuYWRkKGRlZHVwZUtleSk7XG4gICAgICAgICAgICAgIHZhciBzZXRTdGF0ZUNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgYSBjb21wb25lbnQgKGAlc2ApIHdoaWxlIHJlbmRlcmluZyBhICcgKyAnZGlmZmVyZW50IGNvbXBvbmVudCAoYCVzYCkuIFRvIGxvY2F0ZSB0aGUgYmFkIHNldFN0YXRlKCkgY2FsbCBpbnNpZGUgYCVzYCwgJyArICdmb2xsb3cgdGhlIHN0YWNrIHRyYWNlIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc2V0c3RhdGUtaW4tcmVuZGVyJywgc2V0U3RhdGVDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlcikge1xuICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyAnICsgJ3dpdGhpbiBgcmVuZGVyYCkuIFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgJyArICdmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuJyk7XG5cbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgbGFuZXMpIHtcbiAge1xuICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgdmFyIG1lbW9pemVkVXBkYXRlcnMgPSByb290Lm1lbW9pemVkVXBkYXRlcnM7XG4gICAgICBtZW1vaXplZFVwZGF0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxpbmdGaWJlcikge1xuICAgICAgICBhZGRGaWJlclRvTGFuZXNNYXAocm9vdCwgc2NoZWR1bGluZ0ZpYmVyLCBsYW5lcyk7XG4gICAgICB9KTsgLy8gVGhpcyBmdW5jdGlvbiBpbnRlbnRpb25hbGx5IGRvZXMgbm90IGNsZWFyIG1lbW9pemVkIHVwZGF0ZXJzLlxuICAgICAgLy8gVGhvc2UgbWF5IHN0aWxsIGJlIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGNvbW1pdFxuICAgICAgLy8gYW5kIGEgZnV0dXJlIG9uZSAoZS5nLiBTdXNwZW5zZSkuXG4gICAgfVxuICB9XG59XG52YXIgZmFrZUFjdENhbGxiYWNrTm9kZSA9IHt9OyAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG5cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2spIHtcbiAge1xuICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUgYW4gYGFjdGAgc2NvcGUsIGJ5cGFzcyBTY2hlZHVsZXIgYW5kIHB1c2ggdG9cbiAgICAvLyB0aGUgYGFjdGAgcXVldWUgaW5zdGVhZC5cbiAgICB2YXIgYWN0UXVldWUgPSBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50O1xuXG4gICAgaWYgKGFjdFF1ZXVlICE9PSBudWxsKSB7XG4gICAgICBhY3RRdWV1ZS5wdXNoKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiBmYWtlQWN0Q2FsbGJhY2tOb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFjayQzKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkge1xuICAvLyBOZXZlciBmb3JjZSBmbHVzaCBpbiBwcm9kdWN0aW9uLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBnZXQgc3RyaXBwZWQgb3V0LlxuICByZXR1cm4gUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gd2FybklmVXBkYXRlc05vdFdyYXBwZWRXaXRoQWN0REVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoZmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICBpZiAoIWlzQ29uY3VycmVudEFjdEVudmlyb25tZW50KCkpIHtcbiAgICAgICAgLy8gTm90IGluIGFuIGFjdCBlbnZpcm9ubWVudC4gTm8gbmVlZCB0byB3YXJuLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExlZ2FjeSBtb2RlIGhhcyBhZGRpdGlvbmFsIGNhc2VzIHdoZXJlIHdlIHN1cHByZXNzIGEgd2FybmluZy5cbiAgICAgIGlmICghaXNMZWdhY3lBY3RFbnZpcm9ubWVudCgpKSB7XG4gICAgICAgIC8vIE5vdCBpbiBhbiBhY3QgZW52aXJvbm1lbnQuIE5vIG5lZWQgdG8gd2Fybi5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIExlZ2FjeSBtb2RlIGRvZXNuJ3Qgd2FybiBpZiB0aGUgdXBkYXRlIGlzIGJhdGNoZWQsIGkuZS5cbiAgICAgICAgLy8gYmF0Y2hlZFVwZGF0ZXMgb3IgZmx1c2hTeW5jLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWJlci50YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIGZpYmVyLnRhZyAhPT0gRm9yd2FyZFJlZiAmJiBmaWJlci50YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQpIHtcbiAgICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggcHJlLWhvb2tzIGNvZGUsIGxlZ2FjeSBtb2RlIG9ubHlcbiAgICAgICAgLy8gd2FybnMgZm9yIHVwZGF0ZXMgdGhhdCBvcmlnaW5hdGUgZnJvbSBhIGhvb2suXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgaW5zaWRlIGEgdGVzdCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlN1c3BlbnNlUmVzb2x1dGlvbk5vdFdyYXBwZWRXaXRoQWN0REVWKHJvb3QpIHtcbiAge1xuICAgIGlmIChyb290LnRhZyAhPT0gTGVnYWN5Um9vdCAmJiBpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCgpICYmIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIGVycm9yKCdBIHN1c3BlbmRlZCByZXNvdXJjZSBmaW5pc2hlZCBsb2FkaW5nIGluc2lkZSBhIHRlc3QsIGJ1dCB0aGUgZXZlbnQgJyArICd3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCByZXNvbHZlcyBzdXNwZW5kZWQgZGF0YSBzaG91bGQgYmUgd3JhcHBlZCAnICsgJ2ludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaW5pc2ggbG9hZGluZyBzdXNwZW5kZWQgZGF0YSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRJc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QoaXNSdW5uaW5nKSB7XG4gIHtcbiAgICBpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QgPSBpc1J1bm5pbmc7XG4gIH1cbn1cblxuLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2RlcyAqL1xuLy8gVXNlZCBieSBSZWFjdCBSZWZyZXNoIHJ1bnRpbWUgdGhyb3VnaCBEZXZUb29scyBHbG9iYWwgSG9vay5cblxudmFyIHJlc29sdmVGYW1pbHkgPSBudWxsO1xudmFyIGZhaWxlZEJvdW5kYXJpZXMgPSBudWxsO1xudmFyIHNldFJlZnJlc2hIYW5kbGVyID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAge1xuICAgIHJlc29sdmVGYW1pbHkgPSBoYW5kbGVyO1xuICB9XG59O1xuZnVuY3Rpb24gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cblxuICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAgLy8gTm8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMuXG4gIHJldHVybiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG59XG5mdW5jdGlvbiByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSByZWFsIGZvcndhcmRSZWYuIERvbid0IHdhbnQgdG8gY3Jhc2ggZWFybHkuXG4gICAgICBpZiAodHlwZSAhPT0gbnVsbCAmJiB0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHR5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEZvcndhcmRSZWYgaXMgc3BlY2lhbCBiZWNhdXNlIGl0cyByZXNvbHZlZCAudHlwZSBpcyBhbiBvYmplY3QsXG4gICAgICAgIC8vIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgd2Ugb25seSBoYXZlIGl0cyBpbm5lciByZW5kZXIgZnVuY3Rpb24gaW4gdGhlIG1hcC5cbiAgICAgICAgLy8gSWYgdGhhdCBpbm5lciByZW5kZXIgZnVuY3Rpb24gaXMgZGlmZmVyZW50LCB3ZSdsbCBidWlsZCBhIG5ldyBmb3J3YXJkUmVmIHR5cGUuXG4gICAgICAgIHZhciBjdXJyZW50UmVuZGVyID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUucmVuZGVyKTtcblxuICAgICAgICBpZiAodHlwZS5yZW5kZXIgIT09IGN1cnJlbnRSZW5kZXIpIHtcbiAgICAgICAgICB2YXIgc3ludGhldGljVHlwZSA9IHtcbiAgICAgICAgICAgICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLFxuICAgICAgICAgICAgcmVuZGVyOiBjdXJyZW50UmVuZGVyXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmICh0eXBlLmRpc3BsYXlOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN5bnRoZXRpY1R5cGUuZGlzcGxheU5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzeW50aGV0aWNUeXBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cblxuICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGZpYmVyLCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgcHJldlR5cGUgPSBmaWJlci5lbGVtZW50VHlwZTtcbiAgICB2YXIgbmV4dFR5cGUgPSBlbGVtZW50LnR5cGU7IC8vIElmIHdlIGdvdCBoZXJlLCB3ZSBrbm93IHR5cGVzIGFyZW4ndCA9PT0gZXF1YWwuXG5cbiAgICB2YXIgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSBmYWxzZTtcbiAgICB2YXIgJCR0eXBlb2ZOZXh0VHlwZSA9IHR5cGVvZiBuZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgbmV4dFR5cGUgIT09IG51bGwgPyBuZXh0VHlwZS4kJHR5cGVvZiA6IG51bGw7XG5cbiAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBpbm5lciB0eXBlIHlldC5cbiAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGF0IHRoZSBsYXp5IGlubmVyIHR5cGUgaXMgc3RhYmxlLFxuICAgICAgICAgICAgLy8gYW5kIHNvIGl0IGlzIHN1ZmZpY2llbnQgdG8gYXZvaWQgcmVjb25jaWxpbmcgaXQgYXdheS5cbiAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBnb2luZyB0byB1bndyYXAgb3IgYWN0dWFsbHkgdXNlIHRoZSBuZXcgbGF6eSB0eXBlLlxuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAge1xuICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBpZiBpdCB3YXMgYnV0IGNhbiBubyBsb25nZXIgYmUgc2ltcGxlLFxuICAgICAgICAgICAgLy8gd2Ugc2hvdWxkbid0IHNldCB0aGlzLlxuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gQ2hlY2sgaWYgYm90aCB0eXBlcyBoYXZlIGEgZmFtaWx5IGFuZCBpdCdzIHRoZSBzYW1lIG9uZS5cblxuXG4gICAgaWYgKG5lZWRzQ29tcGFyZUZhbWlsaWVzKSB7XG4gICAgICAvLyBOb3RlOiBtZW1vKCkgYW5kIGZvcndhcmRSZWYoKSB3ZSdsbCBjb21wYXJlIG91dGVyIHJhdGhlciB0aGFuIGlubmVyIHR5cGUuXG4gICAgICAvLyBUaGlzIG1lYW5zIGJvdGggb2YgdGhlbSBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgdG8gcHJlc2VydmUgc3RhdGUuXG4gICAgICAvLyBJZiB3ZSB1bndyYXBwZWQgYW5kIGNvbXBhcmVkIHRoZSBpbm5lciB0eXBlcyBmb3Igd3JhcHBlcnMgaW5zdGVhZCxcbiAgICAgIC8vIHRoZW4gd2Ugd291bGQgcmlzayBmYWxzZWx5IHNheWluZyB0d28gc2VwYXJhdGUgbWVtbyhGb28pXG4gICAgICAvLyBjYWxscyBhcmUgZXF1aXZhbGVudCBiZWNhdXNlIHRoZXkgd3JhcCB0aGUgc2FtZSBGb28gZnVuY3Rpb24uXG4gICAgICB2YXIgcHJldkZhbWlseSA9IHJlc29sdmVGYW1pbHkocHJldlR5cGUpOyAvLyAkRmxvd0ZpeE1lW25vdC1hLWZ1bmN0aW9uXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cbiAgICAgIGlmIChwcmV2RmFtaWx5ICE9PSB1bmRlZmluZWQgJiYgcHJldkZhbWlseSA9PT0gcmVzb2x2ZUZhbWlseShuZXh0VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcikge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBXZWFrU2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgPT09IG51bGwpIHtcbiAgICAgIGZhaWxlZEJvdW5kYXJpZXMgPSBuZXcgV2Vha1NldCgpO1xuICAgIH1cblxuICAgIGZhaWxlZEJvdW5kYXJpZXMuYWRkKGZpYmVyKTtcbiAgfVxufVxudmFyIHNjaGVkdWxlUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCB1cGRhdGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzdGFsZUZhbWlsaWVzID0gdXBkYXRlLnN0YWxlRmFtaWxpZXMsXG4gICAgICAgIHVwZGF0ZWRGYW1pbGllcyA9IHVwZGF0ZS51cGRhdGVkRmFtaWxpZXM7XG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZsdXNoU3luYyQxKGZ1bmN0aW9uICgpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH0pO1xuICB9XG59O1xudmFyIHNjaGVkdWxlUm9vdCA9IGZ1bmN0aW9uIChyb290LCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocm9vdC5jb250ZXh0ICE9PSBlbXB0eUNvbnRleHRPYmplY3QpIHtcbiAgICAgIC8vIFN1cGVyIGVkZ2UgY2FzZTogcm9vdCBoYXMgYSBsZWdhY3kgX3JlbmRlclN1YnRyZWUgY29udGV4dFxuICAgICAgLy8gYnV0IHdlIGRvbid0IGtub3cgdGhlIHBhcmVudENvbXBvbmVudCBzbyB3ZSBjYW4ndCBwYXNzIGl0LlxuICAgICAgLy8gSnVzdCBpZ25vcmUuIFdlJ2xsIGRlbGV0ZSB0aGlzIHdpdGggX3JlbmRlclN1YnRyZWUgY29kZSBwYXRoIGxhdGVyLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBmbHVzaFN5bmMkMShmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgcm9vdCwgbnVsbCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoZmliZXIsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcykge1xuICB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZSxcbiAgICAgICAgY2hpbGQgPSBmaWJlci5jaGlsZCxcbiAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCByZXNvbHZlRmFtaWx5IHRvIGJlIHNldCBkdXJpbmcgaG90IHJlbG9hZC4nKTtcbiAgICB9XG5cbiAgICB2YXIgbmVlZHNSZW5kZXIgPSBmYWxzZTtcbiAgICB2YXIgbmVlZHNSZW1vdW50ID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkoY2FuZGlkYXRlVHlwZSk7XG5cbiAgICAgIGlmIChmYW1pbHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc3RhbGVGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodXBkYXRlZEZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgaWYgKHRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5lZWRzUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmFpbGVkQm91bmRhcmllcyAhPT0gbnVsbCkge1xuICAgICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMuaGFzKGZpYmVyKSB8fCAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICAgIGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBmYWlsZWRCb3VuZGFyaWVzLmhhcyhhbHRlcm5hdGUpKSB7XG4gICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzUmVtb3VudCkge1xuICAgICAgZmliZXIuX2RlYnVnTmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50IHx8IG5lZWRzUmVuZGVyKSB7XG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgIW5lZWRzUmVtb3VudCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShjaGlsZCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShzaWJsaW5nLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoID0gZnVuY3Rpb24gKHJvb3QsIGZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgaG9zdEluc3RhbmNlcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdHlwZXMgPSBuZXcgU2V0KGZhbWlsaWVzLm1hcChmdW5jdGlvbiAoZmFtaWx5KSB7XG4gICAgICByZXR1cm4gZmFtaWx5LmN1cnJlbnQ7XG4gICAgfSkpO1xuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICByZXR1cm4gaG9zdEluc3RhbmNlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGZpYmVyLCB0eXBlcywgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlO1xuICAgIHZhciBjYW5kaWRhdGVUeXBlID0gbnVsbDtcblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGRpZE1hdGNoID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVzLmhhcyhjYW5kaWRhdGVUeXBlKSkge1xuICAgICAgICBkaWRNYXRjaCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZE1hdGNoKSB7XG4gICAgICAvLyBXZSBoYXZlIGEgbWF0Y2guIFRoaXMgb25seSBkcmlsbHMgZG93biB0byB0aGUgY2xvc2VzdCBob3N0IGNvbXBvbmVudHMuXG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gc2VhcmNoIGRlZXBlciBiZWNhdXNlIGZvciB0aGUgcHVycG9zZSBvZiBnaXZpbmdcbiAgICAgIC8vIHZpc3VhbCBmZWVkYmFjaywgXCJmbGFzaGluZ1wiIG91dGVybW9zdCBwYXJlbnQgcmVjdGFuZ2xlcyBpcyBzdWZmaWNpZW50LlxuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWF0Y2gsIG1heWJlIHRoZXJlIHdpbGwgYmUgb25lIGZ1cnRoZXIgZG93biBpbiB0aGUgY2hpbGQgdHJlZS5cbiAgICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoY2hpbGQsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHR5cGVzLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcyk7XG5cbiAgICBpZiAoZm91bmRIb3N0SW5zdGFuY2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhbnkgaG9zdCBjaGlsZHJlbiwgZmFsbGJhY2sgdG8gY2xvc2VzdCBob3N0IHBhcmVudC5cblxuXG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gcmVhY2ggcm9vdCBmaXJzdC4nKTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBub2RlID0gZmliZXI7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCAobm9kZS50YWcgPT09IEhvc3RIb2lzdGFibGUgKSB8fCAobm9kZS50YWcgPT09IEhvc3RTaW5nbGV0b24gKSkge1xuICAgICAgICAvLyBXZSBnb3QgYSBtYXRjaC5cbiAgICAgICAgZm91bmRIb3N0SW5zdGFuY2VzID0gdHJ1ZTtcbiAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpOyAvLyBUaGVyZSBtYXkgc3RpbGwgYmUgbW9yZSwgc28ga2VlcCBzZWFyY2hpbmcuXG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmaWJlcikge1xuICAgICAgICByZXR1cm4gZm91bmRIb3N0SW5zdGFuY2VzO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmliZXIpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmRIb3N0SW5zdGFuY2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGhhc0JhZE1hcFBvbHlmaWxsO1xuXG57XG4gIGhhc0JhZE1hcFBvbHlmaWxsID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbbm9uRXh0ZW5zaWJsZU9iamVjdCwgbnVsbF1dKTtcbiAgICBuZXcgU2V0KFtub25FeHRlbnNpYmxlT2JqZWN0XSk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1uZXcgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgYWJvdXQgYmFkIHBvbHlmaWxsc1xuICAgIGhhc0JhZE1hcFBvbHlmaWxsID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAvLyBJbnN0YW5jZVxuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5rZXkgPSBrZXk7XG4gIHRoaXMuZWxlbWVudFR5cGUgPSBudWxsO1xuICB0aGlzLnR5cGUgPSBudWxsO1xuICB0aGlzLnN0YXRlTm9kZSA9IG51bGw7IC8vIEZpYmVyXG5cbiAgdGhpcy5yZXR1cm4gPSBudWxsO1xuICB0aGlzLmNoaWxkID0gbnVsbDtcbiAgdGhpcy5zaWJsaW5nID0gbnVsbDtcbiAgdGhpcy5pbmRleCA9IDA7XG4gIHRoaXMucmVmID0gbnVsbDtcbiAgdGhpcy5yZWZDbGVhbnVwID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7XG4gIHRoaXMubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gIHRoaXMudXBkYXRlUXVldWUgPSBudWxsO1xuICB0aGlzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB0aGlzLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIHRoaXMubW9kZSA9IG1vZGU7IC8vIEVmZmVjdHNcblxuICB0aGlzLmZsYWdzID0gTm9GbGFncyQxO1xuICB0aGlzLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3MkMTtcbiAgdGhpcy5kZWxldGlvbnMgPSBudWxsO1xuICB0aGlzLmxhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5hbHRlcm5hdGUgPSBudWxsO1xuXG4gIHtcbiAgICAvLyBOb3RlOiBUaGUgZm9sbG93aW5nIGlzIGRvbmUgdG8gYXZvaWQgYSB2OCBwZXJmb3JtYW5jZSBjbGlmZi5cbiAgICAvL1xuICAgIC8vIEluaXRpYWxpemluZyB0aGUgZmllbGRzIGJlbG93IHRvIHNtaXMgYW5kIGxhdGVyIHVwZGF0aW5nIHRoZW0gd2l0aFxuICAgIC8vIGRvdWJsZSB2YWx1ZXMgd2lsbCBjYXVzZSBGaWJlcnMgdG8gZW5kIHVwIGhhdmluZyBzZXBhcmF0ZSBzaGFwZXMuXG4gICAgLy8gVGhpcyBiZWhhdmlvci9idWcgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9uKCkuXG4gICAgLy8gRm9ydHVuYXRlbHkgdGhpcyBvbmx5IGltcGFjdHMgREVWIGJ1aWxkcy5cbiAgICAvLyBVbmZvcnR1bmF0ZWx5IGl0IG1ha2VzIFJlYWN0IHVudXNhYmx5IHNsb3cgZm9yIHNvbWUgYXBwbGljYXRpb25zLlxuICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMsIGluaXRpYWxpemUgdGhlIGZpZWxkcyBiZWxvdyB3aXRoIGRvdWJsZXMuXG4gICAgLy9cbiAgICAvLyBMZWFybiBtb3JlIGFib3V0IHRoaXMgaGVyZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MzY1XG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9ODUzOFxuICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IE51bWJlci5OYU47IC8vIEl0J3Mgb2theSB0byByZXBsYWNlIHRoZSBpbml0aWFsIGRvdWJsZXMgd2l0aCBzbWlzIGFmdGVyIGluaXRpYWxpemF0aW9uLlxuICAgIC8vIFRoaXMgd29uJ3QgdHJpZ2dlciB0aGUgcGVyZm9ybWFuY2UgY2xpZmYgbWVudGlvbmVkIGFib3ZlLFxuICAgIC8vIGFuZCBpdCBzaW1wbGlmaWVzIG90aGVyIHByb2ZpbGVyIGNvZGUgKGluY2x1ZGluZyBEZXZUb29scykuXG5cbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHtcbiAgICAvLyBUaGlzIGlzbid0IGRpcmVjdGx5IHVzZWQgYnV0IGlzIGhhbmR5IGZvciBkZWJ1Z2dpbmcgaW50ZXJuYWxzOlxuICAgIHRoaXMuX2RlYnVnU291cmNlID0gbnVsbDtcbiAgICB0aGlzLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgICB0aGlzLl9kZWJ1Z05lZWRzUmVtb3VudCA9IGZhbHNlO1xuICAgIHRoaXMuX2RlYnVnSG9va1R5cGVzID0gbnVsbDtcblxuICAgIGlmICghaGFzQmFkTWFwUG9seWZpbGwgJiYgdHlwZW9mIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHRoaXMpO1xuICAgIH1cbiAgfVxufSAvLyBUaGlzIGlzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24sIHJhdGhlciB0aGFuIGEgUE9KTyBjb25zdHJ1Y3Rvciwgc3RpbGxcbi8vIHBsZWFzZSBlbnN1cmUgd2UgZG8gdGhlIGZvbGxvd2luZzpcbi8vIDEpIE5vYm9keSBzaG91bGQgYWRkIGFueSBpbnN0YW5jZSBtZXRob2RzIG9uIHRoaXMuIEluc3RhbmNlIG1ldGhvZHMgY2FuIGJlXG4vLyAgICBtb3JlIGRpZmZpY3VsdCB0byBwcmVkaWN0IHdoZW4gdGhleSBnZXQgb3B0aW1pemVkIGFuZCB0aGV5IGFyZSBhbG1vc3Rcbi8vICAgIG5ldmVyIGlubGluZWQgcHJvcGVybHkgaW4gc3RhdGljIGNvbXBpbGVycy5cbi8vIDIpIE5vYm9keSBzaG91bGQgcmVseSBvbiBgaW5zdGFuY2VvZiBGaWJlcmAgZm9yIHR5cGUgdGVzdGluZy4gV2Ugc2hvdWxkXG4vLyAgICBhbHdheXMga25vdyB3aGVuIGl0IGlzIGEgZmliZXIuXG4vLyAzKSBXZSBtaWdodCB3YW50IHRvIGV4cGVyaW1lbnQgd2l0aCB1c2luZyBudW1lcmljIGtleXMgc2luY2UgdGhleSBhcmUgZWFzaWVyXG4vLyAgICB0byBvcHRpbWl6ZSBpbiBhIG5vbi1KSVQgZW52aXJvbm1lbnQuXG4vLyA0KSBXZSBjYW4gZWFzaWx5IGdvIGZyb20gYSBjb25zdHJ1Y3RvciB0byBhIGNyZWF0ZUZpYmVyIG9iamVjdCBsaXRlcmFsIGlmIHRoYXRcbi8vICAgIGlzIGZhc3Rlci5cbi8vIDUpIEl0IHNob3VsZCBiZSBlYXN5IHRvIHBvcnQgdGhpcyB0byBhIEMgc3RydWN0IGFuZCBrZWVwIGEgQyBpbXBsZW1lbnRhdGlvblxuLy8gICAgY29tcGF0aWJsZS5cblxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlcih0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vICRGbG93Rml4TWVbaW52YWxpZC1jb25zdHJ1Y3Rvcl06IHRoZSBzaGFwZXMgYXJlIGV4YWN0IGhlcmUgYnV0IEZsb3cgZG9lc24ndCBsaWtlIGNvbnN0cnVjdG9yc1xuICByZXR1cm4gbmV3IEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgJiYgIXNob3VsZENvbnN0cnVjdCh0eXBlKSAmJiB0eXBlLmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpID8gQ2xhc3NDb21wb25lbnQgOiBGdW5jdGlvbkNvbXBvbmVudDtcbiAgfSBlbHNlIGlmIChDb21wb25lbnQgIT09IHVuZGVmaW5lZCAmJiBDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBDb21wb25lbnQuJCR0eXBlb2Y7XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgIHJldHVybiBGb3J3YXJkUmVmO1xuICAgIH1cblxuICAgIGlmICgkJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICByZXR1cm4gTWVtb0NvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDtcbn0gLy8gVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBhbHRlcm5hdGUgZmliZXIgdG8gZG8gd29yayBvbi5cblxuZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgcGVuZGluZ1Byb3BzKSB7XG4gIHZhciB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHVzZSBhIGRvdWJsZSBidWZmZXJpbmcgcG9vbGluZyB0ZWNobmlxdWUgYmVjYXVzZSB3ZSBrbm93IHRoYXQgd2UnbGxcbiAgICAvLyBvbmx5IGV2ZXIgbmVlZCBhdCBtb3N0IHR3byB2ZXJzaW9ucyBvZiBhIHRyZWUuIFdlIHBvb2wgdGhlIFwib3RoZXJcIiB1bnVzZWRcbiAgICAvLyBub2RlIHRoYXQgd2UncmUgZnJlZSB0byByZXVzZS4gVGhpcyBpcyBsYXppbHkgY3JlYXRlZCB0byBhdm9pZCBhbGxvY2F0aW5nXG4gICAgLy8gZXh0cmEgb2JqZWN0cyBmb3IgdGhpbmdzIHRoYXQgYXJlIG5ldmVyIHVwZGF0ZWQuIEl0IGFsc28gYWxsb3cgdXMgdG9cbiAgICAvLyByZWNsYWltIHRoZSBleHRyYSBtZW1vcnkgaWYgbmVlZGVkLlxuICAgIHdvcmtJblByb2dyZXNzID0gY3JlYXRlRmliZXIoY3VycmVudC50YWcsIHBlbmRpbmdQcm9wcywgY3VycmVudC5rZXksIGN1cnJlbnQubW9kZSk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPSBjdXJyZW50LmVsZW1lbnRUeXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICB7XG4gICAgICAvLyBERVYtb25seSBmaWVsZHNcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZSA9IGN1cnJlbnQuX2RlYnVnU291cmNlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gY3VycmVudC5fZGVidWdIb29rVHlwZXM7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gY3VycmVudDtcbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IHdvcmtJblByb2dyZXNzO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wczsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBhbHRlcm5hdGUuXG4gICAgLy8gUmVzZXQgdGhlIGVmZmVjdCB0YWcuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IE5vRmxhZ3MkMTsgLy8gVGhlIGVmZmVjdHMgYXJlIG5vIGxvbmdlciB2YWxpZC5cblxuICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3MkMTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSByZXNldCwgcmF0aGVyIHRoYW4gY29weSwgYWN0dWFsRHVyYXRpb24gJiBhY3R1YWxTdGFydFRpbWUuXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIHRpbWUgZnJvbSBlbmRsZXNzbHkgYWNjdW11bGF0aW5nIGluIG5ldyBjb21taXRzLlxuICAgICAgLy8gVGhpcyBoYXMgdGhlIGRvd25zaWRlIG9mIHJlc2V0dGluZyB2YWx1ZXMgZm9yIGRpZmZlcmVudCBwcmlvcml0eSByZW5kZXJzLFxuICAgICAgLy8gQnV0IHdvcmtzIGZvciB5aWVsZGluZyAodGhlIGNvbW1vbiBjYXNlKSBhbmQgc2hvdWxkIHN1cHBvcnQgcmVzdW1pbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB9XG4gIH0gLy8gUmVzZXQgYWxsIGVmZmVjdHMgZXhjZXB0IHN0YXRpYyBvbmVzLlxuICAvLyBTdGF0aWMgZWZmZWN0cyBhcmUgbm90IHNwZWNpZmljIHRvIGEgcmVuZGVyLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBjdXJyZW50LmZsYWdzICYgU3RhdGljTWFzaztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMgPT09IG51bGwgPyBudWxsIDoge1xuICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgfTsgLy8gVGhlc2Ugd2lsbCBiZSBvdmVycmlkZGVuIGR1cmluZyB0aGUgcGFyZW50J3MgcmVjb25jaWxpYXRpb25cblxuICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICB3b3JrSW5Qcm9ncmVzcy5pbmRleCA9IGN1cnJlbnQuaW5kZXg7XG4gIHdvcmtJblByb2dyZXNzLnJlZiA9IGN1cnJlbnQucmVmO1xuICB3b3JrSW5Qcm9ncmVzcy5yZWZDbGVhbnVwID0gY3VycmVudC5yZWZDbGVhbnVwO1xuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gIH1cblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ID0gY3VycmVudC5fZGVidWdOZWVkc1JlbW91bnQ7XG5cbiAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufSAvLyBVc2VkIHRvIHJldXNlIGEgRmliZXIgZm9yIGEgc2Vjb25kIHBhc3MuXG5cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3Mod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgcmVzZXRzIHRoZSBGaWJlciB0byB3aGF0IGNyZWF0ZUZpYmVyIG9yIGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkXG4gIC8vIGhhdmUgc2V0IHRoZSB2YWx1ZXMgdG8gYmVmb3JlIGR1cmluZyB0aGUgZmlyc3QgcGFzcy4gSWRlYWxseSB0aGlzIHdvdWxkbid0XG4gIC8vIGJlIG5lY2Vzc2FyeSBidXQgdW5mb3J0dW5hdGVseSBtYW55IGNvZGUgcGF0aHMgcmVhZHMgZnJvbSB0aGUgd29ya0luUHJvZ3Jlc3NcbiAgLy8gd2hlbiB0aGV5IHNob3VsZCBiZSByZWFkaW5nIGZyb20gY3VycmVudCBhbmQgd3JpdGluZyB0byB3b3JrSW5Qcm9ncmVzcy5cbiAgLy8gV2UgYXNzdW1lIHBlbmRpbmdQcm9wcywgaW5kZXgsIGtleSwgcmVmLCByZXR1cm4gYXJlIHN0aWxsIHVudG91Y2hlZCB0b1xuICAvLyBhdm9pZCBkb2luZyBhbm90aGVyIHJlY29uY2lsaWF0aW9uLlxuICAvLyBSZXNldCB0aGUgZWZmZWN0IGZsYWdzIGJ1dCBrZWVwIGFueSBQbGFjZW1lbnQgdGFncywgc2luY2UgdGhhdCdzIHNvbWV0aGluZ1xuICAvLyB0aGF0IGNoaWxkIGZpYmVyIGlzIHNldHRpbmcsIG5vdCB0aGUgcmVjb25jaWxpYXRpb24uXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IFN0YXRpY01hc2sgfCBQbGFjZW1lbnQ7IC8vIFRoZSBlZmZlY3RzIGFyZSBubyBsb25nZXIgdmFsaWQuXG5cbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBSZXNldCB0byBjcmVhdGVGaWJlcidzIGluaXRpYWwgdmFsdWVzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3MkMTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAvLyBhY3R1YWwgdGltZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyIHBhc3Nlcy5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFJlc2V0IHRvIHRoZSBjbG9uZWQgdmFsdWVzIHRoYXQgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGQndmUuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3MkMTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAgIC8vIGl0IGNhbm5vdCBiZSBzaGFyZWQgd2l0aCB0aGUgY3VycmVudCBmaWJlci5cblxuICAgIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgICBsYW5lczogY3VycmVudERlcGVuZGVuY2llcy5sYW5lcyxcbiAgICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgICB9O1xuXG4gICAge1xuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAvLyBhY3R1YWwgdGltZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyIHBhc3Nlcy5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUhvc3RSb290RmliZXIodGFnLCBpc1N0cmljdE1vZGUsIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUpIHtcbiAgdmFyIG1vZGU7XG5cbiAgaWYgKHRhZyA9PT0gQ29uY3VycmVudFJvb3QpIHtcbiAgICBtb2RlID0gQ29uY3VycmVudE1vZGU7XG5cbiAgICBpZiAoaXNTdHJpY3RNb2RlID09PSB0cnVlIHx8IGNyZWF0ZVJvb3RTdHJpY3RFZmZlY3RzQnlEZWZhdWx0KSB7XG4gICAgICBtb2RlIHw9IFN0cmljdExlZ2FjeU1vZGUgfCBTdHJpY3RFZmZlY3RzTW9kZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbW9kZSA9IE5vTW9kZTtcbiAgfVxuXG4gIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgIC8vIEFsd2F5cyBjb2xsZWN0IHByb2ZpbGUgdGltaW5ncyB3aGVuIERldlRvb2xzIGFyZSBwcmVzZW50LlxuICAgIC8vIFRoaXMgZW5hYmxlcyBEZXZUb29scyB0byBzdGFydCBjYXB0dXJpbmcgdGltaW5nIGF0IGFueSBwb2ludOKAk1xuICAgIC8vIFdpdGhvdXQgc29tZSBub2RlcyBpbiB0aGUgdHJlZSBoYXZpbmcgZW1wdHkgYmFzZSB0aW1lcy5cbiAgICBtb2RlIHw9IFByb2ZpbGVNb2RlO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUZpYmVyKEhvc3RSb290LCBudWxsLCBudWxsLCBtb2RlKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCAvLyBSZWFjdCRFbGVtZW50VHlwZVxua2V5LCBwZW5kaW5nUHJvcHMsIHNvdXJjZSwgb3duZXIsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBmaWJlclRhZyA9IEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7IC8vIFRoZSByZXNvbHZlZCB0eXBlIGlzIHNldCBpZiB3ZSBrbm93IHdoYXQgdGhlIGZpbmFsIHR5cGUgd2lsbCBiZS4gSS5lLiBpdCdzIG5vdCBsYXp5LlxuXG4gIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChzaG91bGRDb25zdHJ1Y3QodHlwZSkpIHtcbiAgICAgIGZpYmVyVGFnID0gQ2xhc3NDb21wb25lbnQ7XG5cbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHtcbiAgICAgIHZhciBob3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7XG4gICAgICBmaWJlclRhZyA9IGlzSG9zdEhvaXN0YWJsZVR5cGUodHlwZSwgcGVuZGluZ1Byb3BzLCBob3N0Q29udGV4dCkgPyBIb3N0SG9pc3RhYmxlIDogaXNIb3N0U2luZ2xldG9uVHlwZSh0eXBlKSA/IEhvc3RTaW5nbGV0b24gOiBIb3N0Q29tcG9uZW50O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBnZXRUYWc6IHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQocGVuZGluZ1Byb3BzLmNoaWxkcmVuLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gU3RyaWN0TGVnYWN5TW9kZTtcblxuICAgICAgICBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgIC8vIFN0cmljdCBlZmZlY3RzIHNob3VsZCBuZXZlciBydW4gb24gbGVnYWN5IHJvb3RzXG4gICAgICAgICAgbW9kZSB8PSBTdHJpY3RFZmZlY3RzTW9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdChwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX09GRlNDUkVFTl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFOlxuXG4gICAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSBSRUFDVF9TQ09QRV9UWVBFOlxuXG4gICAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSBSRUFDVF9DQUNIRV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUNhY2hlKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgIGNhc2UgUkVBQ1RfVFJBQ0lOR19NQVJLRVJfVFlQRTpcblxuICAgICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgIGNhc2UgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEU6XG5cbiAgICAgIC8vIEZhbGwgdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dFByb3ZpZGVyO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY29uc3VtZXJcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRDb25zdW1lcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gRm9yd2FyZFJlZjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTWVtb0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBMYXp5Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBcIiArICduYW1lZCBpbXBvcnRzLic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lciA/IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIob3duZXIpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICAgICAgICBpbmZvICs9ICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbGVtZW50IHR5cGUgaXMgaW52YWxpZDogZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiAnICsgJ2NvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgY29tcG9uZW50cykgJyArIChcImJ1dCBnb3Q6IFwiICsgKHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSkgKyBcIi5cIiArIGluZm8pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKGZpYmVyVGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gdHlwZTtcbiAgZmliZXIudHlwZSA9IHJlc29sdmVkVHlwZTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcblxuICB7XG4gICAgZmliZXIuX2RlYnVnU291cmNlID0gc291cmNlO1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBzb3VyY2UgPSBudWxsO1xuICB2YXIgb3duZXIgPSBudWxsO1xuXG4gIHtcbiAgICBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgfVxuXG4gIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciBwZW5kaW5nUHJvcHMgPSBlbGVtZW50LnByb3BzO1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwga2V5LCBwZW5kaW5nUHJvcHMsIHNvdXJjZSwgb3duZXIsIG1vZGUsIGxhbmVzKTtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50cywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihGcmFnbWVudCwgZWxlbWVudHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIHBlbmRpbmdQcm9wcy5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdQcm9maWxlciBtdXN0IHNwZWNpZnkgYW4gXCJpZFwiIG9mIHR5cGUgYHN0cmluZ2AgYXMgYSBwcm9wLiBSZWNlaXZlZCB0aGUgdHlwZSBgJXNgIGluc3RlYWQuJywgdHlwZW9mIHBlbmRpbmdQcm9wcy5pZCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoUHJvZmlsZXIsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlIHwgUHJvZmlsZU1vZGUpO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICAgIGVmZmVjdER1cmF0aW9uOiAwLFxuICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUxpc3RDb21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoT2Zmc2NyZWVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHZhciBwcmltYXJ5Q2hpbGRJbnN0YW5jZSA9IHtcbiAgICBfdmlzaWJpbGl0eTogT2Zmc2NyZWVuVmlzaWJsZSxcbiAgICBfcGVuZGluZ1Zpc2liaWxpdHk6IE9mZnNjcmVlblZpc2libGUsXG4gICAgX3BlbmRpbmdNYXJrZXJzOiBudWxsLFxuICAgIF9yZXRyeUNhY2hlOiBudWxsLFxuICAgIF90cmFuc2l0aW9uczogbnVsbCxcbiAgICBfY3VycmVudDogbnVsbCxcbiAgICBkZXRhY2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkZXRhY2hPZmZzY3JlZW5JbnN0YW5jZShwcmltYXJ5Q2hpbGRJbnN0YW5jZSk7XG4gICAgfSxcbiAgICBhdHRhY2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhdHRhY2hPZmZzY3JlZW5JbnN0YW5jZShwcmltYXJ5Q2hpbGRJbnN0YW5jZSk7XG4gICAgfVxuICB9O1xuICBmaWJlci5zdGF0ZU5vZGUgPSBwcmltYXJ5Q2hpbGRJbnN0YW5jZTtcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tQ2FjaGUocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKENhY2hlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfQ0FDSEVfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0VGV4dCwgY29udGVudCwgbnVsbCwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUhvc3RJbnN0YW5jZUZvckRlbGV0aW9uKCkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0Q29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpO1xuICBmaWJlci5lbGVtZW50VHlwZSA9ICdERUxFVEVEJztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRGVoeWRyYXRlZEZyYWdtZW50KGRlaHlkcmF0ZWROb2RlKSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKERlaHlkcmF0ZWRGcmFnbWVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTtcbiAgZmliZXIuc3RhdGVOb2RlID0gZGVoeWRyYXRlZE5vZGU7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBwZW5kaW5nUHJvcHMgPSBwb3J0YWwuY2hpbGRyZW4gIT09IG51bGwgPyBwb3J0YWwuY2hpbGRyZW4gOiBbXTtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFBvcnRhbCwgcGVuZGluZ1Byb3BzLCBwb3J0YWwua2V5LCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgIGNvbnRhaW5lckluZm86IHBvcnRhbC5jb250YWluZXJJbmZvLFxuICAgIHBlbmRpbmdDaGlsZHJlbjogbnVsbCxcbiAgICAvLyBVc2VkIGJ5IHBlcnNpc3RlbnQgdXBkYXRlc1xuICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgfTtcbiAgcmV0dXJuIGZpYmVyO1xufSAvLyBVc2VkIGZvciBzdGFzaGluZyBXSVAgcHJvcGVydGllcyB0byByZXBsYXkgZmFpbGVkIHdvcmsgaW4gREVWLlxuXG5mdW5jdGlvbiBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih0YXJnZXQsIHNvdXJjZSkge1xuICBpZiAodGFyZ2V0ID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBGaWJlcidzIGluaXRpYWwgcHJvcGVydGllcyB3aWxsIGFsd2F5cyBiZSBvdmVyd3JpdHRlbi5cbiAgICAvLyBXZSBvbmx5IHVzZSBhIEZpYmVyIHRvIGVuc3VyZSB0aGUgc2FtZSBoaWRkZW4gY2xhc3Mgc28gREVWIGlzbid0IHNsb3cuXG4gICAgdGFyZ2V0ID0gY3JlYXRlRmliZXIoSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTtcbiAgfSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgd3JpdHRlbiBhcyBhIGxpc3Qgb2YgYWxsIHByb3BlcnRpZXMuXG4gIC8vIFdlIHRyaWVkIHRvIHVzZSBPYmplY3QuYXNzaWduKCkgaW5zdGVhZCBidXQgdGhpcyBpcyBjYWxsZWQgaW5cbiAgLy8gdGhlIGhvdHRlc3QgcGF0aCwgYW5kIE9iamVjdC5hc3NpZ24oKSB3YXMgdG9vIHNsb3c6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDJcbiAgLy8gVGhpcyBjb2RlIGlzIERFVi1vbmx5IHNvIHNpemUgaXMgbm90IGEgY29uY2Vybi5cblxuXG4gIHRhcmdldC50YWcgPSBzb3VyY2UudGFnO1xuICB0YXJnZXQua2V5ID0gc291cmNlLmtleTtcbiAgdGFyZ2V0LmVsZW1lbnRUeXBlID0gc291cmNlLmVsZW1lbnRUeXBlO1xuICB0YXJnZXQudHlwZSA9IHNvdXJjZS50eXBlO1xuICB0YXJnZXQuc3RhdGVOb2RlID0gc291cmNlLnN0YXRlTm9kZTtcbiAgdGFyZ2V0LnJldHVybiA9IHNvdXJjZS5yZXR1cm47XG4gIHRhcmdldC5jaGlsZCA9IHNvdXJjZS5jaGlsZDtcbiAgdGFyZ2V0LnNpYmxpbmcgPSBzb3VyY2Uuc2libGluZztcbiAgdGFyZ2V0LmluZGV4ID0gc291cmNlLmluZGV4O1xuICB0YXJnZXQucmVmID0gc291cmNlLnJlZjtcbiAgdGFyZ2V0LnJlZkNsZWFudXAgPSBzb3VyY2UucmVmQ2xlYW51cDtcbiAgdGFyZ2V0LnBlbmRpbmdQcm9wcyA9IHNvdXJjZS5wZW5kaW5nUHJvcHM7XG4gIHRhcmdldC5tZW1vaXplZFByb3BzID0gc291cmNlLm1lbW9pemVkUHJvcHM7XG4gIHRhcmdldC51cGRhdGVRdWV1ZSA9IHNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgdGFyZ2V0Lm1lbW9pemVkU3RhdGUgPSBzb3VyY2UubWVtb2l6ZWRTdGF0ZTtcbiAgdGFyZ2V0LmRlcGVuZGVuY2llcyA9IHNvdXJjZS5kZXBlbmRlbmNpZXM7XG4gIHRhcmdldC5tb2RlID0gc291cmNlLm1vZGU7XG4gIHRhcmdldC5mbGFncyA9IHNvdXJjZS5mbGFncztcbiAgdGFyZ2V0LnN1YnRyZWVGbGFncyA9IHNvdXJjZS5zdWJ0cmVlRmxhZ3M7XG4gIHRhcmdldC5kZWxldGlvbnMgPSBzb3VyY2UuZGVsZXRpb25zO1xuICB0YXJnZXQubGFuZXMgPSBzb3VyY2UubGFuZXM7XG4gIHRhcmdldC5jaGlsZExhbmVzID0gc291cmNlLmNoaWxkTGFuZXM7XG4gIHRhcmdldC5hbHRlcm5hdGUgPSBzb3VyY2UuYWx0ZXJuYXRlO1xuXG4gIHtcbiAgICB0YXJnZXQuYWN0dWFsRHVyYXRpb24gPSBzb3VyY2UuYWN0dWFsRHVyYXRpb247XG4gICAgdGFyZ2V0LmFjdHVhbFN0YXJ0VGltZSA9IHNvdXJjZS5hY3R1YWxTdGFydFRpbWU7XG4gICAgdGFyZ2V0LnNlbGZCYXNlRHVyYXRpb24gPSBzb3VyY2Uuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICB0YXJnZXQudHJlZUJhc2VEdXJhdGlvbiA9IHNvdXJjZS50cmVlQmFzZUR1cmF0aW9uO1xuICB9XG5cbiAgdGFyZ2V0Ll9kZWJ1Z1NvdXJjZSA9IHNvdXJjZS5fZGVidWdTb3VyY2U7XG4gIHRhcmdldC5fZGVidWdPd25lciA9IHNvdXJjZS5fZGVidWdPd25lcjtcbiAgdGFyZ2V0Ll9kZWJ1Z05lZWRzUmVtb3VudCA9IHNvdXJjZS5fZGVidWdOZWVkc1JlbW91bnQ7XG4gIHRhcmdldC5fZGVidWdIb29rVHlwZXMgPSBzb3VyY2UuX2RlYnVnSG9va1R5cGVzO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbnRhZywgaHlkcmF0ZSwgaWRlbnRpZmllclByZWZpeCwgb25SZWNvdmVyYWJsZUVycm9yLCBmb3JtU3RhdGUpIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lckluZm87XG4gIHRoaXMucGVuZGluZ0NoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5jdXJyZW50ID0gbnVsbDtcbiAgdGhpcy5waW5nQ2FjaGUgPSBudWxsO1xuICB0aGlzLmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHRoaXMudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDtcbiAgdGhpcy5jYW5jZWxQZW5kaW5nQ29tbWl0ID0gbnVsbDtcbiAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IG51bGw7XG4gIHRoaXMubmV4dCA9IG51bGw7XG4gIHRoaXMuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgdGhpcy5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lO1xuICB0aGlzLmV4cGlyYXRpb25UaW1lcyA9IGNyZWF0ZUxhbmVNYXAoTm9UaW1lc3RhbXApO1xuICB0aGlzLnBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuc3VzcGVuZGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLnBpbmdlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5leHBpcmVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5zaGVsbFN1c3BlbmRDb3VudGVyID0gMDtcbiAgdGhpcy5lbnRhbmdsZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVtZW50cyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG4gIHRoaXMuaGlkZGVuVXBkYXRlcyA9IGNyZWF0ZUxhbmVNYXAobnVsbCk7XG4gIHRoaXMuaWRlbnRpZmllclByZWZpeCA9IGlkZW50aWZpZXJQcmVmaXg7XG4gIHRoaXMub25SZWNvdmVyYWJsZUVycm9yID0gb25SZWNvdmVyYWJsZUVycm9yO1xuXG4gIHtcbiAgICB0aGlzLnBvb2xlZENhY2hlID0gbnVsbDtcbiAgICB0aGlzLnBvb2xlZENhY2hlTGFuZXMgPSBOb0xhbmVzO1xuICB9XG5cbiAgdGhpcy5mb3JtU3RhdGUgPSBmb3JtU3RhdGU7XG4gIHRoaXMuaW5jb21wbGV0ZVRyYW5zaXRpb25zID0gbmV3IE1hcCgpO1xuXG4gIHtcbiAgICB0aGlzLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICB0aGlzLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gIH1cblxuICB7XG4gICAgdGhpcy5tZW1vaXplZFVwZGF0ZXJzID0gbmV3IFNldCgpO1xuICAgIHZhciBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwID0gdGhpcy5wZW5kaW5nVXBkYXRlcnNMYW5lTWFwID0gW107XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgVG90YWxMYW5lczsgX2krKykge1xuICAgICAgcGVuZGluZ1VwZGF0ZXJzTGFuZU1hcC5wdXNoKG5ldyBTZXQoKSk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIENvbmN1cnJlbnRSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gaHlkcmF0ZSA/ICdoeWRyYXRlUm9vdCgpJyA6ICdjcmVhdGVSb290KCknO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMZWdhY3lSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gaHlkcmF0ZSA/ICdoeWRyYXRlKCknIDogJ3JlbmRlcigpJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGluaXRpYWxDaGlsZHJlbiwgaHlkcmF0aW9uQ2FsbGJhY2tzLCBpc1N0cmljdE1vZGUsIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUsIC8vIFRPRE86IFdlIGhhdmUgc2V2ZXJhbCBvZiB0aGVzZSBhcmd1bWVudHMgdGhhdCBhcmUgY29uY2VwdHVhbGx5IHBhcnQgb2YgdGhlXG4vLyBob3N0IGNvbmZpZywgYnV0IGJlY2F1c2UgdGhleSBhcmUgcGFzc2VkIGluIGF0IHJ1bnRpbWUsIHdlIGhhdmUgdG8gdGhyZWFkXG4vLyB0aGVtIHRocm91Z2ggdGhlIHJvb3QgY29uc3RydWN0b3IuIFBlcmhhcHMgd2Ugc2hvdWxkIHB1dCB0aGVtIGFsbCBpbnRvIGFcbi8vIHNpbmdsZSB0eXBlLCBsaWtlIGEgRHluYW1pY0hvc3RDb25maWcgdGhhdCBpcyBkZWZpbmVkIGJ5IHRoZSByZW5kZXJlci5cbmlkZW50aWZpZXJQcmVmaXgsIG9uUmVjb3ZlcmFibGVFcnJvciwgdHJhbnNpdGlvbkNhbGxiYWNrcywgZm9ybVN0YXRlKSB7XG4gIC8vICRGbG93Rml4TWVbaW52YWxpZC1jb25zdHJ1Y3Rvcl0gRmxvdyBubyBsb25nZXIgc3VwcG9ydHMgY2FsbGluZyBuZXcgb24gZnVuY3Rpb25zXG4gIHZhciByb290ID0gbmV3IEZpYmVyUm9vdE5vZGUoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBpZGVudGlmaWVyUHJlZml4LCBvblJlY292ZXJhYmxlRXJyb3IsIGZvcm1TdGF0ZSk7XG4gIC8vIHN0YXRlTm9kZSBpcyBhbnkuXG5cblxuICB2YXIgdW5pbml0aWFsaXplZEZpYmVyID0gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcsIGlzU3RyaWN0TW9kZSk7XG4gIHJvb3QuY3VycmVudCA9IHVuaW5pdGlhbGl6ZWRGaWJlcjtcbiAgdW5pbml0aWFsaXplZEZpYmVyLnN0YXRlTm9kZSA9IHJvb3Q7XG5cbiAge1xuICAgIHZhciBpbml0aWFsQ2FjaGUgPSBjcmVhdGVDYWNoZSgpO1xuICAgIHJldGFpbkNhY2hlKGluaXRpYWxDYWNoZSk7IC8vIFRoZSBwb29sZWRDYWNoZSBpcyBhIGZyZXNoIGNhY2hlIGluc3RhbmNlIHRoYXQgaXMgdXNlZCB0ZW1wb3JhcmlseVxuICAgIC8vIGZvciBuZXdseSBtb3VudGVkIGJvdW5kYXJpZXMgZHVyaW5nIGEgcmVuZGVyLiBJbiBnZW5lcmFsLCB0aGVcbiAgICAvLyBwb29sZWRDYWNoZSBpcyBhbHdheXMgY2xlYXJlZCBmcm9tIHRoZSByb290IGF0IHRoZSBlbmQgb2YgYSByZW5kZXI6XG4gICAgLy8gaXQgaXMgZWl0aGVyIHJlbGVhc2VkIHdoZW4gcmVuZGVyIGNvbW1pdHMsIG9yIG1vdmVkIHRvIGFuIE9mZnNjcmVlblxuICAgIC8vIGNvbXBvbmVudCBpZiByZW5kZXJpbmcgc3VzcGVuZHMuIEJlY2F1c2UgdGhlIGxpZmV0aW1lIG9mIHRoZSBwb29sZWRcbiAgICAvLyBjYWNoZSBpcyBkaXN0aW5jdCBmcm9tIHRoZSBtYWluIG1lbW9pemVkU3RhdGUuY2FjaGUsIGl0IG11c3QgYmVcbiAgICAvLyByZXRhaW5lZCBzZXBhcmF0ZWx5LlxuXG4gICAgcm9vdC5wb29sZWRDYWNoZSA9IGluaXRpYWxDYWNoZTtcbiAgICByZXRhaW5DYWNoZShpbml0aWFsQ2FjaGUpO1xuICAgIHZhciBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBlbGVtZW50OiBpbml0aWFsQ2hpbGRyZW4sXG4gICAgICBpc0RlaHlkcmF0ZWQ6IGh5ZHJhdGUsXG4gICAgICBjYWNoZTogaW5pdGlhbENhY2hlXG4gICAgfTtcbiAgICB1bmluaXRpYWxpemVkRmliZXIubWVtb2l6ZWRTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgfVxuXG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh1bmluaXRpYWxpemVkRmliZXIpO1xuICByZXR1cm4gcm9vdDtcbn1cblxudmFyIFJlYWN0VmVyc2lvbiA9ICcxOC4zLjAtY2FuYXJ5LTYwYTkyN2QwNC0yMDI0MDExMyc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXJJbmZvLCAvLyBUT0RPOiBmaWd1cmUgb3V0IHRoZSBBUEkgZm9yIGNyb3NzLXJlbmRlcmVyIGltcGxlbWVudGF0aW9uLlxuaW1wbGVtZW50YXRpb24pIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblxuICB7XG4gICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihrZXkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvdyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgUG9ydGFsXG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BPUlRBTF9UWVBFLFxuICAgIGtleToga2V5ID09IG51bGwgPyBudWxsIDogJycgKyBrZXksXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gIH07XG59XG5cbi8vIE1pZ2h0IGFkZCBQUk9GSUxFIGxhdGVyLlxuXG52YXIgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcztcbnZhciBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZTtcblxue1xuICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlID0ge307XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCkge1xuICBpZiAoIXBhcmVudENvbXBvbmVudCkge1xuICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQocGFyZW50Q29tcG9uZW50KTtcbiAgdmFyIHBhcmVudENvbnRleHQgPSBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICB2YXIgQ29tcG9uZW50ID0gZmliZXIudHlwZTtcblxuICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0NoaWxkQ29udGV4dChmaWJlciwgQ29tcG9uZW50LCBwYXJlbnRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyZW50Q29udGV4dDtcbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudCwgbWV0aG9kTmFtZSkge1xuICB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgICBpZiAoZmliZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjb21wb25lbnQpLmpvaW4oJywnKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgYSBSZWFjdENvbXBvbmVudC4gS2V5czogXCIgKyBrZXlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gICAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGhvc3RGaWJlci5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZVtjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihob3N0RmliZXIpO1xuXG4gICAgICAgICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggaXMgaW5zaWRlIFN0cmljdE1vZGUuICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignJXMgaXMgZGVwcmVjYXRlZCBpbiBTdHJpY3RNb2RlLiAnICsgJyVzIHdhcyBwYXNzZWQgYW4gaW5zdGFuY2Ugb2YgJXMgd2hpY2ggcmVuZGVycyBTdHJpY3RNb2RlIGNoaWxkcmVuLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgLy8gSWRlYWxseSB0aGlzIHNob3VsZCByZXNldCB0byBwcmV2aW91cyBidXQgdGhpcyBzaG91bGRuJ3QgYmUgY2FsbGVkIGluXG4gICAgICAgICAgLy8gcmVuZGVyIGFuZCB0aGVyZSdzIGFub3RoZXIgd2FybmluZyBmb3IgdGhhdCBhbnl3YXkuXG4gICAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2aW91c0ZpYmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoaG9zdEZpYmVyLnN0YXRlTm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0aW9uQ2FsbGJhY2tzLCBpc1N0cmljdE1vZGUsIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUsIGlkZW50aWZpZXJQcmVmaXgsIG9uUmVjb3ZlcmFibGVFcnJvciwgdHJhbnNpdGlvbkNhbGxiYWNrcykge1xuICB2YXIgaHlkcmF0ZSA9IGZhbHNlO1xuICB2YXIgaW5pdGlhbENoaWxkcmVuID0gbnVsbDtcbiAgcmV0dXJuIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGluaXRpYWxDaGlsZHJlbiwgaHlkcmF0aW9uQ2FsbGJhY2tzLCBpc1N0cmljdE1vZGUsIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUsIGlkZW50aWZpZXJQcmVmaXgsIG9uUmVjb3ZlcmFibGVFcnJvciwgdHJhbnNpdGlvbkNhbGxiYWNrcywgbnVsbCk7XG59XG5mdW5jdGlvbiBjcmVhdGVIeWRyYXRpb25Db250YWluZXIoaW5pdGlhbENoaWxkcmVuLCAvLyBUT0RPOiBSZW1vdmUgYGNhbGxiYWNrYCB3aGVuIHdlIGRlbGV0ZSBsZWdhY3kgbW9kZS5cbmNhbGxiYWNrLCBjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGlvbkNhbGxiYWNrcywgaXNTdHJpY3RNb2RlLCBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlLCBpZGVudGlmaWVyUHJlZml4LCBvblJlY292ZXJhYmxlRXJyb3IsIHRyYW5zaXRpb25DYWxsYmFja3MsIGZvcm1TdGF0ZSkge1xuICB2YXIgaHlkcmF0ZSA9IHRydWU7XG4gIHZhciByb290ID0gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaW5pdGlhbENoaWxkcmVuLCBoeWRyYXRpb25DYWxsYmFja3MsIGlzU3RyaWN0TW9kZSwgY29uY3VycmVudFVwZGF0ZXNCeURlZmF1bHRPdmVycmlkZSwgaWRlbnRpZmllclByZWZpeCwgb25SZWNvdmVyYWJsZUVycm9yLCB0cmFuc2l0aW9uQ2FsbGJhY2tzLCBmb3JtU3RhdGUpOyAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gRmliZXJSb290IGNvbnN0cnVjdG9yXG5cbiAgcm9vdC5jb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUobnVsbCk7IC8vIFNjaGVkdWxlIHRoZSBpbml0aWFsIHJlbmRlci4gSW4gYSBoeWRyYXRpb24gcm9vdCwgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbVxuICAvLyBhIHJlZ3VsYXIgdXBkYXRlIGJlY2F1c2UgdGhlIGluaXRpYWwgcmVuZGVyIG11c3QgbWF0Y2ggd2FzIHdhcyByZW5kZXJlZFxuICAvLyBvbiB0aGUgc2VydmVyLlxuICAvLyBOT1RFOiBUaGlzIHVwZGF0ZSBpbnRlbnRpb25hbGx5IGRvZXNuJ3QgaGF2ZSBhIHBheWxvYWQuIFdlJ3JlIG9ubHkgdXNpbmdcbiAgLy8gdGhlIHVwZGF0ZSB0byBzY2hlZHVsZSB3b3JrIG9uIHRoZSByb290IGZpYmVyIChhbmQsIGZvciBsZWdhY3kgcm9vdHMsIHRvXG4gIC8vIGVucXVldWUgdGhlIGNhbGxiYWNrIGlmIG9uZSBpcyBwcm92aWRlZCkuXG5cbiAgdmFyIGN1cnJlbnQgPSByb290LmN1cnJlbnQ7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoY3VycmVudCk7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwgPyBjYWxsYmFjayA6IG51bGw7XG4gIGVucXVldWVVcGRhdGUoY3VycmVudCwgdXBkYXRlLCBsYW5lKTtcbiAgc2NoZWR1bGVJbml0aWFsSHlkcmF0aW9uT25Sb290KHJvb3QsIGxhbmUpO1xuICByZXR1cm4gcm9vdDtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCBjb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spIHtcbiAge1xuICAgIG9uU2NoZWR1bGVSb290KGNvbnRhaW5lciwgZWxlbWVudCk7XG4gIH1cblxuICB2YXIgY3VycmVudCQxID0gY29udGFpbmVyLmN1cnJlbnQ7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoY3VycmVudCQxKTtcblxuICB7XG4gICAgbWFya1JlbmRlclNjaGVkdWxlZChsYW5lKTtcbiAgfVxuXG4gIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KTtcblxuICBpZiAoY29udGFpbmVyLmNvbnRleHQgPT09IG51bGwpIHtcbiAgICBjb250YWluZXIuY29udGV4dCA9IGNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnBlbmRpbmdDb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoaXNSZW5kZXJpbmcgJiYgY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcykge1xuICAgICAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IHRydWU7XG5cbiAgICAgIGVycm9yKCdSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZTsgJyArICd0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyBub3QgYWxsb3dlZC4gJyArICdJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gY29tcG9uZW50RGlkVXBkYXRlLlxcblxcbicgKyAnQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJXMuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihjdXJyZW50KSB8fCAnVW5rbm93bicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgfTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgdmFyIHJvb3QgPSBlbnF1ZXVlVXBkYXRlKGN1cnJlbnQkMSwgdXBkYXRlLCBsYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBjdXJyZW50JDEsIGxhbmUpO1xuICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgY3VycmVudCQxLCBsYW5lKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gZ2V0UHVibGljUm9vdEluc3RhbmNlKGNvbnRhaW5lcikge1xuICB2YXIgY29udGFpbmVyRmliZXIgPSBjb250YWluZXIuY3VycmVudDtcblxuICBpZiAoIWNvbnRhaW5lckZpYmVyLmNoaWxkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKGNvbnRhaW5lckZpYmVyLmNoaWxkLnRhZykge1xuICAgIGNhc2UgSG9zdFNpbmdsZXRvbjpcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlO1xuICB9XG59XG5mdW5jdGlvbiBhdHRlbXB0U3luY2hyb25vdXNIeWRyYXRpb24oZmliZXIpIHtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB2YXIgcm9vdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNSb290RGVoeWRyYXRlZChyb290KSkge1xuICAgICAgICAgIC8vIEZsdXNoIHRoZSBmaXJzdCBzY2hlZHVsZWQgXCJ1cGRhdGVcIi5cbiAgICAgICAgICB2YXIgbGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlQZW5kaW5nTGFuZXMocm9vdCk7XG4gICAgICAgICAgZmx1c2hSb290KHJvb3QsIGxhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgZmx1c2hTeW5jJDEoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTsgLy8gSWYgd2UncmUgc3RpbGwgYmxvY2tlZCBhZnRlciB0aGlzLCB3ZSBuZWVkIHRvIGluY3JlYXNlXG4gICAgICAgIC8vIHRoZSBwcmlvcml0eSBvZiBhbnkgcHJvbWlzZXMgcmVzb2x2aW5nIHdpdGhpbiB0aGlzXG4gICAgICAgIC8vIGJvdW5kYXJ5IHNvIHRoYXQgdGhleSBuZXh0IGF0dGVtcHQgYWxzbyBoYXMgaGlnaGVyIHByaS5cblxuICAgICAgICB2YXIgcmV0cnlMYW5lID0gU3luY0xhbmU7XG4gICAgICAgIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeUxhbmUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKSB7XG4gIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCAmJiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSA9IGhpZ2hlclByaW9yaXR5TGFuZShzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSwgcmV0cnlMYW5lKTtcbiAgfVxufSAvLyBJbmNyZWFzZXMgdGhlIHByaW9yaXR5IG9mIHRoZW5hYmxlcyB3aGVuIHRoZXkgcmVzb2x2ZSB3aXRoaW4gdGhpcyBib3VuZGFyeS5cblxuXG5mdW5jdGlvbiBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgcmV0cnlMYW5lKSB7XG4gIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUpIHtcbiAgICBtYXJrUmV0cnlMYW5lSW1wbChhbHRlcm5hdGUsIHJldHJ5TGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IGFuZCB0aGV5IHNob3VsZCBub3Qgc3VzcGVuZCBvbiBJL08sXG4gICAgLy8gc2luY2UgeW91IGhhdmUgdG8gd3JhcCBhbnl0aGluZyB0aGF0IG1pZ2h0IHN1c3BlbmQgaW5cbiAgICAvLyBTdXNwZW5zZS5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbGFuZSA9IFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG4gIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBsYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gIH1cblxuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoZmliZXIpIHtcbiAgaWYgKGZpYmVyLnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAvLyBXZSBpZ25vcmUgSG9zdFJvb3RzIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBpbmNyZWFzZVxuICAgIC8vIHRoZWlyIHByaW9yaXR5IG90aGVyIHRoYW4gc3luY2hyb25vdXNseSBmbHVzaCBpdC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIGxhbmUpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lKTtcbiAgfVxuXG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKGZpYmVyKSB7XG4gIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBnZXRQdWJsaWNJbnN0YW5jZShob3N0RmliZXIuc3RhdGVOb2RlKTtcbn1cblxudmFyIHNob3VsZEVycm9ySW1wbCA9IGZ1bmN0aW9uIChmaWJlcikge1xuICByZXR1cm4gbnVsbDtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZEVycm9yKGZpYmVyKSB7XG4gIHJldHVybiBzaG91bGRFcnJvckltcGwoZmliZXIpO1xufVxuXG52YXIgc2hvdWxkU3VzcGVuZEltcGwgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkU3VzcGVuZChmaWJlcikge1xuICByZXR1cm4gc2hvdWxkU3VzcGVuZEltcGwoZmliZXIpO1xufVxudmFyIG92ZXJyaWRlSG9va1N0YXRlID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wcyA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gbnVsbDtcbnZhciBzY2hlZHVsZVVwZGF0ZSA9IG51bGw7XG52YXIgc2V0RXJyb3JIYW5kbGVyID0gbnVsbDtcbnZhciBzZXRTdXNwZW5zZUhhbmRsZXIgPSBudWxsO1xuXG57XG4gIHZhciBjb3B5V2l0aERlbGV0ZUltcGwgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCBpbmRleCkge1xuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IGlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogYXNzaWduKHt9LCBvYmopO1xuXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gcGF0aC5sZW5ndGgpIHtcbiAgICAgIGlmIChpc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgIHVwZGF0ZWQuc3BsaWNlKGtleSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtrZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhEZWxldGVJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEpO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aERlbGV0ZSA9IGZ1bmN0aW9uIChvYmosIHBhdGgpIHtcbiAgICByZXR1cm4gY29weVdpdGhEZWxldGVJbXBsKG9iaiwgcGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lSW1wbCA9IGZ1bmN0aW9uIChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4KSB7XG4gICAgdmFyIG9sZEtleSA9IG9sZFBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBhc3NpZ24oe30sIG9iaik7XG5cbiAgICBpZiAoaW5kZXggKyAxID09PSBvbGRQYXRoLmxlbmd0aCkge1xuICAgICAgdmFyIG5ld0tleSA9IG5ld1BhdGhbaW5kZXhdOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICAgIHVwZGF0ZWRbbmV3S2V5XSA9IHVwZGF0ZWRbb2xkS2V5XTtcblxuICAgICAgaWYgKGlzQXJyYXkodXBkYXRlZCkpIHtcbiAgICAgICAgdXBkYXRlZC5zcGxpY2Uob2xkS2V5LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB1cGRhdGVkW29sZEtleV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIHVwZGF0ZWRbb2xkS2V5XSA9IGNvcHlXaXRoUmVuYW1lSW1wbCggLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgb2JqW29sZEtleV0sIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lID0gZnVuY3Rpb24gKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIGlmIChvbGRQYXRoLmxlbmd0aCAhPT0gbmV3UGF0aC5sZW5ndGgpIHtcbiAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyBvZiB0aGUgc2FtZSBsZW5ndGgnKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1BhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGlmIChvbGRQYXRoW2ldICE9PSBuZXdQYXRoW2ldKSB7XG4gICAgICAgICAgd2FybignY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIHRvIGJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIGRlZXBlc3Qga2V5Jyk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0SW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4LCB2YWx1ZSkge1xuICAgIGlmIChpbmRleCA+PSBwYXRoLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IGlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogYXNzaWduKHt9LCBvYmopOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aFNldEltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSwgdmFsdWUpO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFNldCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGNvcHlXaXRoU2V0SW1wbChvYmosIHBhdGgsIDAsIHZhbHVlKTtcbiAgfTtcblxuICB2YXIgZmluZEhvb2sgPSBmdW5jdGlvbiAoZmliZXIsIGlkKSB7XG4gICAgLy8gRm9yIG5vdywgdGhlIFwiaWRcIiBvZiBzdGF0ZWZ1bCBob29rcyBpcyBqdXN0IHRoZSBzdGF0ZWZ1bCBob29rIGluZGV4LlxuICAgIC8vIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlIHdpdGggZS5nLiBuZXN0ZWQgaG9va3MuXG4gICAgdmFyIGN1cnJlbnRIb29rID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIHdoaWxlIChjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBpZCA+IDApIHtcbiAgICAgIGN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgICAgIGlkLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRIb29rO1xuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIGVkaXRhYmxlIHZhbHVlcyBmb3IgdXNlU3RhdGUgYW5kIHVzZVJlZHVjZXIuXG5cblxuICBvdmVycmlkZUhvb2tTdGF0ZSA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgsIHZhbHVlKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoU2V0KGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCwgdmFsdWUpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoRGVsZXRlKGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBhc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhSZW5hbWUoaG9vay5tZW1vaXplZFN0YXRlLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IGFzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgcHJvcHMgZm9yIGZ1bmN0aW9uIGNvbXBvbmVudHMsIGZvcndhcmRSZWYsIG1lbW8sIGhvc3QgY29tcG9uZW50cywgZXRjLlxuXG5cbiAgb3ZlcnJpZGVQcm9wcyA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCwgdmFsdWUpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFNldChmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoLCB2YWx1ZSk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhEZWxldGUoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhSZW5hbWUoZmliZXIubWVtb2l6ZWRQcm9wcywgb2xkUGF0aCwgbmV3UGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSk7XG4gICAgfVxuICB9O1xuXG4gIHNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lKTtcbiAgICB9XG4gIH07XG5cbiAgc2V0RXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKG5ld1Nob3VsZEVycm9ySW1wbCkge1xuICAgIHNob3VsZEVycm9ySW1wbCA9IG5ld1Nob3VsZEVycm9ySW1wbDtcbiAgfTtcblxuICBzZXRTdXNwZW5zZUhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkU3VzcGVuZEltcGwpIHtcbiAgICBzaG91bGRTdXNwZW5kSW1wbCA9IG5ld1Nob3VsZFN1c3BlbmRJbXBsO1xuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcihmaWJlcikge1xuICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xufVxuXG5mdW5jdGlvbiBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scygpIHtcbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbmZ1bmN0aW9uIGluamVjdEludG9EZXZUb29scyhkZXZUb29sc0NvbmZpZykge1xuICB2YXIgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgPSBkZXZUb29sc0NvbmZpZy5maW5kRmliZXJCeUhvc3RJbnN0YW5jZTtcbiAgdmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xuICByZXR1cm4gaW5qZWN0SW50ZXJuYWxzKHtcbiAgICBidW5kbGVUeXBlOiBkZXZUb29sc0NvbmZpZy5idW5kbGVUeXBlLFxuICAgIHZlcnNpb246IGRldlRvb2xzQ29uZmlnLnZlcnNpb24sXG4gICAgcmVuZGVyZXJQYWNrYWdlTmFtZTogZGV2VG9vbHNDb25maWcucmVuZGVyZXJQYWNrYWdlTmFtZSxcbiAgICByZW5kZXJlckNvbmZpZzogZGV2VG9vbHNDb25maWcucmVuZGVyZXJDb25maWcsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGU6IG92ZXJyaWRlSG9va1N0YXRlLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aDogb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHM6IG92ZXJyaWRlUHJvcHMsXG4gICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg6IG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoLFxuICAgIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoOiBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCxcbiAgICBzZXRFcnJvckhhbmRsZXI6IHNldEVycm9ySGFuZGxlcixcbiAgICBzZXRTdXNwZW5zZUhhbmRsZXI6IHNldFN1c3BlbnNlSGFuZGxlcixcbiAgICBzY2hlZHVsZVVwZGF0ZTogc2NoZWR1bGVVcGRhdGUsXG4gICAgY3VycmVudERpc3BhdGNoZXJSZWY6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6IGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyLFxuICAgIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSB8fCBlbXB0eUZpbmRGaWJlckJ5SG9zdEluc3RhbmNlLFxuICAgIC8vIFJlYWN0IFJlZnJlc2hcbiAgICBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2g6IGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSZWZyZXNoOiBzY2hlZHVsZVJlZnJlc2ggLFxuICAgIHNjaGVkdWxlUm9vdDogc2NoZWR1bGVSb290ICxcbiAgICBzZXRSZWZyZXNoSGFuZGxlcjogc2V0UmVmcmVzaEhhbmRsZXIgLFxuICAgIC8vIEVuYWJsZXMgRGV2VG9vbHMgdG8gYXBwZW5kIG93bmVyIHN0YWNrcyB0byBlcnJvciBtZXNzYWdlcyBpbiBERVYgbW9kZS5cbiAgICBnZXRDdXJyZW50RmliZXI6IGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzICxcbiAgICAvLyBFbmFibGVzIERldlRvb2xzIHRvIGRldGVjdCByZWNvbmNpbGVyIHZlcnNpb24gcmF0aGVyIHRoYW4gcmVuZGVyZXIgdmVyc2lvblxuICAgIC8vIHdoaWNoIG1heSBub3QgbWF0Y2ggZm9yIHRoaXJkIHBhcnR5IHJlbmRlcmVycy5cbiAgICByZWNvbmNpbGVyVmVyc2lvbjogUmVhY3RWZXJzaW9uXG4gIH0pO1xufVxuXG4vLyB0aGUgcmVuZGVyZXIuIFN1Y2ggYXMgd2hlbiB3ZSdyZSBkaXNwYXRjaGluZyBldmVudHMgb3IgaWYgdGhpcmQgcGFydHlcbi8vIGxpYnJhcmllcyBuZWVkIHRvIGNhbGwgYmF0Y2hlZFVwZGF0ZXMuIEV2ZW50dWFsbHksIHRoaXMgQVBJIHdpbGwgZ28gYXdheSB3aGVuXG4vLyBldmVyeXRoaW5nIGlzIGJhdGNoZWQgYnkgZGVmYXVsdC4gV2UnbGwgdGhlbiBoYXZlIGEgc2ltaWxhciBBUEkgdG8gb3B0LW91dCBvZlxuLy8gc2NoZWR1bGVkIHdvcmsgYW5kIGluc3RlYWQgZG8gc3luY2hyb25vdXMgd29yay5cblxudmFyIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZpbmlzaEV2ZW50SGFuZGxlcigpIHtcbiAgLy8gSGVyZSB3ZSB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2ggaXMgaW1wb3J0YW50XG4gIC8vIHdoZW4gdXNpbmcgY29udHJvbGxlZCBjb21wb25lbnRzIHdpdGhpbiBsYXllcnM6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICAvLyBUaGVuIHdlIHJlc3RvcmUgc3RhdGUgb2YgYW55IGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICB2YXIgY29udHJvbGxlZENvbXBvbmVudHNIYXZlUGVuZGluZ1VwZGF0ZXMgPSBuZWVkc1N0YXRlUmVzdG9yZSgpO1xuXG4gIGlmIChjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcykge1xuICAgIC8vIElmIGEgY29udHJvbGxlZCBldmVudCB3YXMgZmlyZWQsIHdlIG1heSBuZWVkIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mXG4gICAgLy8gdGhlIERPTSBub2RlIGJhY2sgdG8gdGhlIGNvbnRyb2xsZWQgdmFsdWUuIFRoaXMgaXMgbmVjZXNzYXJ5IHdoZW4gUmVhY3RcbiAgICAvLyBiYWlscyBvdXQgb2YgdGhlIHVwZGF0ZSB3aXRob3V0IHRvdWNoaW5nIHRoZSBET00uXG4gICAgLy8gVE9ETzogUmVzdG9yZSBzdGF0ZSBpbiB0aGUgbWljcm90YXNrLCBhZnRlciB0aGUgZGlzY3JldGUgdXBkYXRlcyBmbHVzaCxcbiAgICAvLyBpbnN0ZWFkIG9mIGVhcmx5IGZsdXNoaW5nIHRoZW0gaGVyZS5cbiAgICBmbHVzaFN5bmMkMSgpO1xuICAgIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMoZm4sIGEsIGIpIHtcbiAgaWYgKGlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgYW5vdGhlciBiYXRjaCwgd2UgbmVlZCB0byB3YWl0IHVudGlsIGl0XG4gICAgLy8gZnVsbHkgY29tcGxldGVzIGJlZm9yZSByZXN0b3Jpbmcgc3RhdGUuXG4gICAgcmV0dXJuIGZuKGEsIGIpO1xuICB9XG5cbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJhdGNoZWRVcGRhdGVzJDEoZm4sIGEsIGIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG4gICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gIH1cbn0gLy8gVE9ETzogUmVwbGFjZSB3aXRoIGZsdXNoU3luY1xuXG5mdW5jdGlvbiBpc0ludGVyYWN0aXZlKHRhZykge1xuICByZXR1cm4gdGFnID09PSAnYnV0dG9uJyB8fCB0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAnc2VsZWN0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYSc7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KG5hbWUsIHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ29uQ2xpY2snOlxuICAgIGNhc2UgJ29uQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZURvd24nOlxuICAgIGNhc2UgJ29uTW91c2VEb3duQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZVVwJzpcbiAgICBjYXNlICdvbk1vdXNlVXBDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlRW50ZXInOlxuICAgICAgcmV0dXJuICEhKHByb3BzLmRpc2FibGVkICYmIGlzSW50ZXJhY3RpdmUodHlwZSkpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gaW5zdCBUaGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBzb3VyY2Ugb2YgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLlxuICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICB2YXIgc3RhdGVOb2RlID0gaW5zdC5zdGF0ZU5vZGU7XG5cbiAgaWYgKHN0YXRlTm9kZSA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MgKGV4OiBvbmxvYWQgZXZlbnRzIGluIGluY3JlbWVudGFsIG1vZGUpLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpO1xuXG4gIGlmIChwcm9wcyA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBwcm9wc1tyZWdpc3RyYXRpb25OYW1lXTtcblxuICBpZiAoc2hvdWxkUHJldmVudE1vdXNlRXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgaW5zdC50eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBgXCIgKyByZWdpc3RyYXRpb25OYW1lICsgXCJgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYFwiICsgdHlwZW9mIGxpc3RlbmVyICsgXCJgIHR5cGUuXCIpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG52YXIgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTsgLy8gQ2hlY2sgaWYgYnJvd3NlciBzdXBwb3J0IGV2ZW50cyB3aXRoIHBhc3NpdmUgbGlzdGVuZXJzXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lciNTYWZlbHlfZGV0ZWN0aW5nX29wdGlvbl9zdXBwb3J0XG5cbmlmIChjYW5Vc2VET00pIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0aW9ucyA9IHt9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRpb25zLCAncGFzc2l2ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIGBjaGFyQ29kZWAgcmVwcmVzZW50cyB0aGUgYWN0dWFsIFwiY2hhcmFjdGVyIGNvZGVcIiBhbmQgaXMgc2FmZSB0byB1c2Ugd2l0aFxuICogYFN0cmluZy5mcm9tQ2hhckNvZGVgLiBBcyBzdWNoLCBvbmx5IGtleXMgdGhhdCBjb3JyZXNwb25kIHRvIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBwcm9kdWNlIGEgdmFsaWQgYGNoYXJDb2RlYCwgdGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgaXMgRW50ZXIuXG4gKiBUaGUgVGFiLWtleSBpcyBjb25zaWRlcmVkIG5vbi1wcmludGFibGUgYW5kIGRvZXMgbm90IGhhdmUgYSBgY2hhckNvZGVgLFxuICogcHJlc3VtYWJseSBiZWNhdXNlIGl0IGRvZXMgbm90IHByb2R1Y2UgYSB0YWItY2hhcmFjdGVyIGluIGJyb3dzZXJzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge251bWJlcn0gTm9ybWFsaXplZCBgY2hhckNvZGVgIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBjaGFyQ29kZTtcbiAgdmFyIGtleUNvZGUgPSBuYXRpdmVFdmVudC5rZXlDb2RlO1xuXG4gIGlmICgnY2hhckNvZGUnIGluIG5hdGl2ZUV2ZW50KSB7XG4gICAgY2hhckNvZGUgPSBuYXRpdmVFdmVudC5jaGFyQ29kZTsgLy8gRkYgZG9lcyBub3Qgc2V0IGBjaGFyQ29kZWAgZm9yIHRoZSBFbnRlci1rZXksIGNoZWNrIGFnYWluc3QgYGtleUNvZGVgLlxuXG4gICAgaWYgKGNoYXJDb2RlID09PSAwICYmIGtleUNvZGUgPT09IDEzKSB7XG4gICAgICBjaGFyQ29kZSA9IDEzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJRTggZG9lcyBub3QgaW1wbGVtZW50IGBjaGFyQ29kZWAsIGJ1dCBga2V5Q29kZWAgaGFzIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgIGNoYXJDb2RlID0ga2V5Q29kZTtcbiAgfSAvLyBJRSBhbmQgRWRnZSAob24gV2luZG93cykgYW5kIENocm9tZSAvIFNhZmFyaSAob24gV2luZG93cyBhbmQgTGludXgpXG4gIC8vIHJlcG9ydCBFbnRlciBhcyBjaGFyQ29kZSAxMCB3aGVuIGN0cmwgaXMgcHJlc3NlZC5cblxuXG4gIGlmIChjaGFyQ29kZSA9PT0gMTApIHtcbiAgICBjaGFyQ29kZSA9IDEzO1xuICB9IC8vIFNvbWUgbm9uLXByaW50YWJsZSBrZXlzIGFyZSByZXBvcnRlZCBpbiBgY2hhckNvZGVgL2BrZXlDb2RlYCwgZGlzY2FyZCB0aGVtLlxuICAvLyBNdXN0IG5vdCBkaXNjYXJkIHRoZSAobm9uLSlwcmludGFibGUgRW50ZXIta2V5LlxuXG5cbiAgaWYgKGNoYXJDb2RlID49IDMyIHx8IGNoYXJDb2RlID09PSAxMykge1xuICAgIHJldHVybiBjaGFyQ29kZTtcbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYSBmYWN0b3J5IHNvIHRoYXQgd2UgaGF2ZSBkaWZmZXJlbnQgcmV0dXJuZWQgY29uc3RydWN0b3JzLlxuLy8gSWYgd2UgaGFkIGEgc2luZ2xlIGNvbnN0cnVjdG9yLCBpdCB3b3VsZCBiZSBtZWdhbW9ycGhpYyBhbmQgZW5naW5lcyB3b3VsZCBkZW9wdC5cblxuXG5mdW5jdGlvbiBjcmVhdGVTeW50aGV0aWNFdmVudChJbnRlcmZhY2UpIHtcbiAgLyoqXG4gICAqIFN5bnRoZXRpYyBldmVudHMgYXJlIGRpc3BhdGNoZWQgYnkgZXZlbnQgcGx1Z2lucywgdHlwaWNhbGx5IGluIHJlc3BvbnNlIHRvIGFcbiAgICogdG9wLWxldmVsIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlci5cbiAgICpcbiAgICogVGhlc2Ugc3lzdGVtcyBzaG91bGQgZ2VuZXJhbGx5IHVzZSBwb29saW5nIHRvIHJlZHVjZSB0aGUgZnJlcXVlbmN5IG9mIGdhcmJhZ2VcbiAgICogY29sbGVjdGlvbi4gVGhlIHN5c3RlbSBzaG91bGQgY2hlY2sgYGlzUGVyc2lzdGVudGAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gICAqIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBpbnRvIHRoZSBwb29sIGFmdGVyIGJlaW5nIGRpc3BhdGNoZWQuIFVzZXJzIHRoYXRcbiAgICogbmVlZCBhIHBlcnNpc3RlZCBldmVudCBzaG91bGQgaW52b2tlIGBwZXJzaXN0YC5cbiAgICpcbiAgICogU3ludGhldGljIGV2ZW50cyAoYW5kIHN1YmNsYXNzZXMpIGltcGxlbWVudCB0aGUgRE9NIExldmVsIDMgRXZlbnRzIEFQSSBieVxuICAgKiBub3JtYWxpemluZyBicm93c2VyIHF1aXJrcy4gU3ViY2xhc3NlcyBkbyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBpbXBsZW1lbnQgYVxuICAgKiBET00gaW50ZXJmYWNlOyBjdXN0b20gYXBwbGljYXRpb24tc3BlY2lmaWMgZXZlbnRzIGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMuXG4gICAqL1xuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF1cbiAgZnVuY3Rpb24gU3ludGhldGljQmFzZUV2ZW50KHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHRoaXMuX3JlYWN0TmFtZSA9IHJlYWN0TmFtZTtcbiAgICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICB0aGlzLnR5cGUgPSByZWFjdEV2ZW50VHlwZTtcbiAgICB0aGlzLm5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgdGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7XG4gICAgICBpZiAoIUludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBub3JtYWxpemUgPSBJbnRlcmZhY2VbcHJvcE5hbWVdO1xuXG4gICAgICBpZiAobm9ybWFsaXplKSB7XG4gICAgICAgIHRoaXNbcHJvcE5hbWVdID0gbm9ybWFsaXplKG5hdGl2ZUV2ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbcHJvcE5hbWVdID0gbmF0aXZlRXZlbnRbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID8gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCA6IG5hdGl2ZUV2ZW50LnJldHVyblZhbHVlID09PSBmYWxzZTtcblxuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cblxuICBhc3NpZ24oU3ludGhldGljQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgIC8vICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XVxuICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyAkRmxvd0ZpeE1lW2lsbGVnYWwtdHlwZW9mXSAtIGZsb3cgaXMgbm90IGF3YXJlIG9mIGB1bmtub3duYCBpbiBJRVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQucmV0dXJuVmFsdWUgIT09ICd1bmtub3duJykge1xuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG4gICAgLy8gJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdXG4gICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gJEZsb3dGaXhNZVtpbGxlZ2FsLXR5cGVvZl0gLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIC8vIFRoZSBDaGFuZ2VFdmVudFBsdWdpbiByZWdpc3RlcnMgYSBcInByb3BlcnR5Y2hhbmdlXCIgZXZlbnQgZm9yXG4gICAgICAgIC8vIElFLiBUaGlzIGV2ZW50IGRvZXMgbm90IHN1cHBvcnQgYnViYmxpbmcgb3IgY2FuY2VsbGluZywgYW5kXG4gICAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgICAgLy8gdHlwZW9mIGNoZWNrIG9mIFwidW5rbm93blwiIGNpcmN1bXZlbnRzIHRoaXMgaXNzdWUgKGFuZCBpcyBhbHNvXG4gICAgICAgIC8vIElFIHNwZWNpZmljKS5cbiAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXZSByZWxlYXNlIGFsbCBkaXNwYXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4gICAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAgICogd29uJ3QgYmUgYWRkZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqL1xuICAgIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHsvLyBNb2Rlcm4gZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGlzIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGlzUGVyc2lzdGVudDogZnVuY3Rpb25UaGF0UmV0dXJuc1RydWVcbiAgfSk7XG4gIHJldHVybiBTeW50aGV0aWNCYXNlRXZlbnQ7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIEV2ZW50SW50ZXJmYWNlID0ge1xuICBldmVudFBoYXNlOiAwLFxuICBidWJibGVzOiAwLFxuICBjYW5jZWxhYmxlOiAwLFxuICB0aW1lU3RhbXA6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVmYXVsdFByZXZlbnRlZDogMCxcbiAgaXNUcnVzdGVkOiAwXG59O1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRXZlbnRJbnRlcmZhY2UpO1xuXG52YXIgVUlFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgdmlldzogMCxcbiAgZGV0YWlsOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChVSUV2ZW50SW50ZXJmYWNlKTtcbnZhciBsYXN0TW92ZW1lbnRYO1xudmFyIGxhc3RNb3ZlbWVudFk7XG52YXIgbGFzdE1vdXNlRXZlbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KSB7XG4gIGlmIChldmVudCAhPT0gbGFzdE1vdXNlRXZlbnQpIHtcbiAgICBpZiAobGFzdE1vdXNlRXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcbiAgICAgIC8vICRGbG93Rml4TWVbdW5zYWZlLWFyaXRobWV0aWNdIGFzc3VtaW5nIHRoaXMgaXMgYSBudW1iZXJcbiAgICAgIGxhc3RNb3ZlbWVudFggPSBldmVudC5zY3JlZW5YIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWDsgLy8gJEZsb3dGaXhNZVt1bnNhZmUtYXJpdGhtZXRpY10gYXNzdW1pbmcgdGhpcyBpcyBhIG51bWJlclxuXG4gICAgICBsYXN0TW92ZW1lbnRZID0gZXZlbnQuc2NyZWVuWSAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSAwO1xuICAgICAgbGFzdE1vdmVtZW50WSA9IDA7XG4gICAgfVxuXG4gICAgbGFzdE1vdXNlRXZlbnQgPSBldmVudDtcbiAgfVxufVxuLyoqXG4gKiBAaW50ZXJmYWNlIE1vdXNlRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIE1vdXNlRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgc2NyZWVuWDogMCxcbiAgc2NyZWVuWTogMCxcbiAgY2xpZW50WDogMCxcbiAgY2xpZW50WTogMCxcbiAgcGFnZVg6IDAsXG4gIHBhZ2VZOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIGJ1dHRvbjogMCxcbiAgYnV0dG9uczogMCxcbiAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGV2ZW50LmZyb21FbGVtZW50ID09PSBldmVudC5zcmNFbGVtZW50ID8gZXZlbnQudG9FbGVtZW50IDogZXZlbnQuZnJvbUVsZW1lbnQ7XG4gICAgcmV0dXJuIGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gIH0sXG4gIG1vdmVtZW50WDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFgnIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRYO1xuICAgIH1cblxuICAgIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KTtcbiAgICByZXR1cm4gbGFzdE1vdmVtZW50WDtcbiAgfSxcbiAgbW92ZW1lbnRZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WScgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFk7XG4gICAgfSAvLyBEb24ndCBuZWVkIHRvIGNhbGwgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoKSBoZXJlXG4gICAgLy8gYmVjYXVzZSBpdCdzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhbHJlYWR5IHJ1biB3aGVuIG1vdmVtZW50WFxuICAgIC8vIHdhcyBjb3BpZWQuXG5cblxuICAgIHJldHVybiBsYXN0TW92ZW1lbnRZO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChNb3VzZUV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBEcmFnRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cbnZhciBEcmFnRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGF0YVRyYW5zZmVyOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0RyYWdFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KERyYWdFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRm9jdXNFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIEZvY3VzRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgcmVsYXRlZFRhcmdldDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNGb2N1c0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRm9jdXNFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1hbmltYXRpb25zLyNBbmltYXRpb25FdmVudC1pbnRlcmZhY2VcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0FuaW1hdGlvbkV2ZW50XG4gKi9cblxudmFyIEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBhbmltYXRpb25OYW1lOiAwLFxuICBlbGFwc2VkVGltZTogMCxcbiAgcHNldWRvRWxlbWVudDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNBbmltYXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jbGlwYm9hcmQtYXBpcy9cbiAqL1xuXG52YXIgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGNsaXBib2FyZERhdGE6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnY2xpcGJvYXJkRGF0YScgaW4gZXZlbnQgPyBldmVudC5jbGlwYm9hcmREYXRhIDogd2luZG93LmNsaXBib2FyZERhdGE7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDbGlwYm9hcmRFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtY29tcG9zaXRpb25ldmVudHNcbiAqL1xuXG52YXIgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGF0YTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDVcbiAqICAgICAgLyNldmVudHMtaW5wdXRldmVudHNcbiAqL1xuLy8gSGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBsaXN0IGZvciBub3cuXG5cbnZhciBTeW50aGV0aWNJbnB1dEV2ZW50ID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudDtcbi8qKlxuICogTm9ybWFsaXphdGlvbiBvZiBkZXByZWNhdGVkIEhUTUw1IGBrZXlgIHZhbHVlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xuXG52YXIgbm9ybWFsaXplS2V5ID0ge1xuICBFc2M6ICdFc2NhcGUnLFxuICBTcGFjZWJhcjogJyAnLFxuICBMZWZ0OiAnQXJyb3dMZWZ0JyxcbiAgVXA6ICdBcnJvd1VwJyxcbiAgUmlnaHQ6ICdBcnJvd1JpZ2h0JyxcbiAgRG93bjogJ0Fycm93RG93bicsXG4gIERlbDogJ0RlbGV0ZScsXG4gIFdpbjogJ09TJyxcbiAgTWVudTogJ0NvbnRleHRNZW51JyxcbiAgQXBwczogJ0NvbnRleHRNZW51JyxcbiAgU2Nyb2xsOiAnU2Nyb2xsTG9jaycsXG4gIE1velByaW50YWJsZUtleTogJ1VuaWRlbnRpZmllZCdcbn07XG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbGVnYWN5IGBrZXlDb2RlYCB0byBIVE1MNSBga2V5YFxuICogT25seSBzcGVjaWFsIGtleXMgc3VwcG9ydGVkLCBhbGwgb3RoZXJzIGRlcGVuZCBvbiBrZXlib2FyZCBsYXlvdXQgb3IgYnJvd3NlclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xuXG52YXIgdHJhbnNsYXRlVG9LZXkgPSB7XG4gICc4JzogJ0JhY2tzcGFjZScsXG4gICc5JzogJ1RhYicsXG4gICcxMic6ICdDbGVhcicsXG4gICcxMyc6ICdFbnRlcicsXG4gICcxNic6ICdTaGlmdCcsXG4gICcxNyc6ICdDb250cm9sJyxcbiAgJzE4JzogJ0FsdCcsXG4gICcxOSc6ICdQYXVzZScsXG4gICcyMCc6ICdDYXBzTG9jaycsXG4gICcyNyc6ICdFc2NhcGUnLFxuICAnMzInOiAnICcsXG4gICczMyc6ICdQYWdlVXAnLFxuICAnMzQnOiAnUGFnZURvd24nLFxuICAnMzUnOiAnRW5kJyxcbiAgJzM2JzogJ0hvbWUnLFxuICAnMzcnOiAnQXJyb3dMZWZ0JyxcbiAgJzM4JzogJ0Fycm93VXAnLFxuICAnMzknOiAnQXJyb3dSaWdodCcsXG4gICc0MCc6ICdBcnJvd0Rvd24nLFxuICAnNDUnOiAnSW5zZXJ0JyxcbiAgJzQ2JzogJ0RlbGV0ZScsXG4gICcxMTInOiAnRjEnLFxuICAnMTEzJzogJ0YyJyxcbiAgJzExNCc6ICdGMycsXG4gICcxMTUnOiAnRjQnLFxuICAnMTE2JzogJ0Y1JyxcbiAgJzExNyc6ICdGNicsXG4gICcxMTgnOiAnRjcnLFxuICAnMTE5JzogJ0Y4JyxcbiAgJzEyMCc6ICdGOScsXG4gICcxMjEnOiAnRjEwJyxcbiAgJzEyMic6ICdGMTEnLFxuICAnMTIzJzogJ0YxMicsXG4gICcxNDQnOiAnTnVtTG9jaycsXG4gICcxNDUnOiAnU2Nyb2xsTG9jaycsXG4gICcyMjQnOiAnTWV0YSdcbn07XG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBga2V5YCBwcm9wZXJ0eS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRFdmVudEtleShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQua2V5KSB7XG4gICAgLy8gTm9ybWFsaXplIGluY29uc2lzdGVudCB2YWx1ZXMgcmVwb3J0ZWQgYnkgYnJvd3NlcnMgZHVlIHRvXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIG9mIGEgd29ya2luZyBkcmFmdCBzcGVjaWZpY2F0aW9uLlxuICAgIC8vIEZpcmVGb3ggaW1wbGVtZW50cyBga2V5YCBidXQgcmV0dXJucyBgTW96UHJpbnRhYmxlS2V5YCBmb3IgYWxsXG4gICAgLy8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgKG5vcm1hbGl6ZWQgdG8gYFVuaWRlbnRpZmllZGApLCBpZ25vcmUgaXQuXG4gICAgdmFyIGtleSA9IC8vICRGbG93Rml4TWVbaW52YWxpZC1jb21wdXRlZC1wcm9wXSB1bmFibGUgdG8gaW5kZXggd2l0aCBhIGBtaXhlZGAgdmFsdWVcbiAgICBub3JtYWxpemVLZXlbbmF0aXZlRXZlbnQua2V5XSB8fCBuYXRpdmVFdmVudC5rZXk7XG5cbiAgICBpZiAoa2V5ICE9PSAnVW5pZGVudGlmaWVkJykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH0gLy8gQnJvd3NlciBkb2VzIG5vdCBpbXBsZW1lbnQgYGtleWAsIHBvbHlmaWxsIGFzIG11Y2ggb2YgaXQgYXMgd2UgY2FuLlxuXG5cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICB2YXIgY2hhckNvZGUgPSBnZXRFdmVudENoYXJDb2RlKCAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSB1bmFibGUgdG8gbmFycm93IHRvIGBLZXlib2FyZEV2ZW50YFxuICAgIG5hdGl2ZUV2ZW50KTsgLy8gVGhlIGVudGVyLWtleSBpcyB0ZWNobmljYWxseSBib3RoIHByaW50YWJsZSBhbmQgbm9uLXByaW50YWJsZSBhbmQgY2FuXG4gICAgLy8gdGh1cyBiZSBjYXB0dXJlZCBieSBga2V5cHJlc3NgLCBubyBvdGhlciBub24tcHJpbnRhYmxlIGtleSBzaG91bGQuXG5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDEzID8gJ0VudGVyJyA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICB9XG5cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBuYXRpdmVFdmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgLy8gV2hpbGUgdXNlciBrZXlib2FyZCBsYXlvdXQgZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIG1lYW5pbmcgb2YgZWFjaFxuICAgIC8vIGBrZXlDb2RlYCB2YWx1ZSwgYWxtb3N0IGFsbCBmdW5jdGlvbiBrZXlzIGhhdmUgYSB1bml2ZXJzYWwgdmFsdWUuXG4gICAgLy8gJEZsb3dGaXhNZVtpbnZhbGlkLWNvbXB1dGVkLXByb3BdIHVuYWJsZSB0byBpbmRleCB3aXRoIGEgYG1peGVkYCB2YWx1ZVxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxuXG52YXIgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gIEFsdDogJ2FsdEtleScsXG4gIENvbnRyb2w6ICdjdHJsS2V5JyxcbiAgTWV0YTogJ21ldGFLZXknLFxuICBTaGlmdDogJ3NoaWZ0S2V5J1xufTsgLy8gT2xkZXIgYnJvd3NlcnMgKFNhZmFyaSA8PSAxMCwgaU9TIFNhZmFyaSA8PSAxMC4yKSBkbyBub3Qgc3VwcG9ydFxuLy8gZ2V0TW9kaWZpZXJTdGF0ZS4gSWYgZ2V0TW9kaWZpZXJTdGF0ZSBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBtYXAgaXQgdG8gYSBzZXQgb2Zcbi8vIG1vZGlmaWVyIGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQuIEluIHRoaXMgY2FzZSwgTG9jay1rZXlzIGFyZSBub3Qgc3VwcG9ydGVkLlxuLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuLy8gJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdXG5cbmZ1bmN0aW9uIG1vZGlmaWVyU3RhdGVHZXR0ZXIoa2V5QXJnKSB7XG4gIHZhciBzeW50aGV0aWNFdmVudCA9IHRoaXM7XG4gIHZhciBuYXRpdmVFdmVudCA9IHN5bnRoZXRpY0V2ZW50Lm5hdGl2ZUV2ZW50O1xuXG4gIGlmIChuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUoa2V5QXJnKTtcbiAgfVxuXG4gIHZhciBrZXlQcm9wID0gbW9kaWZpZXJLZXlUb1Byb3Bba2V5QXJnXTtcbiAgcmV0dXJuIGtleVByb3AgPyAhIW5hdGl2ZUV2ZW50W2tleVByb3BdIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50TW9kaWZpZXJTdGF0ZShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbW9kaWZpZXJTdGF0ZUdldHRlcjtcbn1cbi8qKlxuICogQGludGVyZmFjZSBLZXlib2FyZEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBLZXlib2FyZEV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIGtleTogZ2V0RXZlbnRLZXksXG4gIGNvZGU6IDAsXG4gIGxvY2F0aW9uOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICByZXBlYXQ6IDAsXG4gIGxvY2FsZTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAvLyBMZWdhY3kgSW50ZXJmYWNlXG4gIGNoYXJDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgY2hhckNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlQcmVzcyBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyB0aGUgYWN0dWFsIHByaW50YWJsZSBjaGFyYWN0ZXIuXG4gICAgLy8gS2V5UHJlc3MgaXMgZGVwcmVjYXRlZCwgYnV0IGl0cyByZXBsYWNlbWVudCBpcyBub3QgeWV0IGZpbmFsIGFuZCBub3RcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBhbnkgbWFqb3IgYnJvd3Nlci4gT25seSBLZXlQcmVzcyBoYXMgY2hhckNvZGUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKCAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSB1bmFibGUgdG8gbmFycm93IHRvIGBLZXlib2FyZEV2ZW50YFxuICAgICAgZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBga2V5Q29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleURvd24vVXAgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gcGh5c2ljYWwga2V5Ym9hcmQga2V5LlxuICAgIC8vIFRoZSBhY3R1YWwgbWVhbmluZyBvZiB0aGUgdmFsdWUgZGVwZW5kcyBvbiB0aGUgdXNlcnMnIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHdoaWNoIGNhbm5vdCBiZSBkZXRlY3RlZC4gQXNzdW1pbmcgdGhhdCBpdCBpcyBhIFVTIGtleWJvYXJkIGxheW91dFxuICAgIC8vIHByb3ZpZGVzIGEgc3VycHJpc2luZ2x5IGFjY3VyYXRlIG1hcHBpbmcgZm9yIFVTIGFuZCBFdXJvcGVhbiB1c2Vycy5cbiAgICAvLyBEdWUgdG8gdGhpcywgaXQgaXMgbGVmdCB0byB0aGUgdXNlciB0byBpbXBsZW1lbnQgYXQgdGhpcyB0aW1lLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgd2hpY2hgIGlzIGFuIGFsaWFzIGZvciBlaXRoZXIgYGtleUNvZGVgIG9yIGBjaGFyQ29kZWAgZGVwZW5kaW5nIG9uIHRoZVxuICAgIC8vIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZSggLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF0gdW5hYmxlIHRvIG5hcnJvdyB0byBgS2V5Ym9hcmRFdmVudGBcbiAgICAgIGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChLZXlib2FyZEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBQb2ludGVyRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy9cbiAqL1xuXG52YXIgUG9pbnRlckV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIHBvaW50ZXJJZDogMCxcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMCxcbiAgcHJlc3N1cmU6IDAsXG4gIHRhbmdlbnRpYWxQcmVzc3VyZTogMCxcbiAgdGlsdFg6IDAsXG4gIHRpbHRZOiAwLFxuICB0d2lzdDogMCxcbiAgcG9pbnRlclR5cGU6IDAsXG4gIGlzUHJpbWFyeTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNQb2ludGVyRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChQb2ludGVyRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFRvdWNoRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzL1xuICovXG5cbnZhciBUb3VjaEV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHRvdWNoZXM6IDAsXG4gIHRhcmdldFRvdWNoZXM6IDAsXG4gIGNoYW5nZWRUb3VjaGVzOiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn0pO1xuXG52YXIgU3ludGhldGljVG91Y2hFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvdWNoRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0QtY3NzMy10cmFuc2l0aW9ucy0yMDA5MDMyMC8jdHJhbnNpdGlvbi1ldmVudHMtXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UcmFuc2l0aW9uRXZlbnRcbiAqL1xuXG52YXIgVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBwcm9wZXJ0eU5hbWU6IDAsXG4gIGVsYXBzZWRUaW1lOiAwLFxuICBwc2V1ZG9FbGVtZW50OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRyYW5zaXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgV2hlZWxFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIFdoZWVsRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGVsdGFYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVudC5kZWx0YVggOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWCcgaW4gZXZlbnQgPyAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1hcml0aG1ldGljXSBhc3N1bWluZyB0aGlzIGlzIGEgbnVtYmVyXG4gICAgLWV2ZW50LndoZWVsRGVsdGFYIDogMDtcbiAgfSxcbiAgZGVsdGFZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVlgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFZJyBpbiBldmVudCA/IC8vICRGbG93Rml4TWVbdW5zYWZlLWFyaXRobWV0aWNdIGFzc3VtaW5nIHRoaXMgaXMgYSBudW1iZXJcbiAgICAtZXZlbnQud2hlZWxEZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YWAgZm9yIElFPDkgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGEnIGluIGV2ZW50ID8gLy8gJEZsb3dGaXhNZVt1bnNhZmUtYXJpdGhtZXRpY10gYXNzdW1pbmcgdGhpcyBpcyBhIG51bWJlclxuICAgIC1ldmVudC53aGVlbERlbHRhIDogMDtcbiAgfSxcbiAgZGVsdGFaOiAwLFxuICAvLyBCcm93c2VycyB3aXRob3V0IFwiZGVsdGFNb2RlXCIgaXMgcmVwb3J0aW5nIGluIHJhdyB3aGVlbCBkZWx0YSB3aGVyZSBvbmVcbiAgLy8gbm90Y2ggb24gdGhlIHNjcm9sbCBpcyBhbHdheXMgKy8tIDEyMCwgcm91Z2hseSBlcXVpdmFsZW50IHRvIHBpeGVscy5cbiAgLy8gQSBnb29kIGFwcHJveGltYXRpb24gb2YgRE9NX0RFTFRBX0xJTkUgKDEpIGlzIDUlIG9mIHZpZXdwb3J0IHNpemUgb3JcbiAgLy8gfjQwIHBpeGVscywgZm9yIERPTV9ERUxUQV9TQ1JFRU4gKDIpIGl0IGlzIDg3LjUlIG9mIHZpZXdwb3J0IHNpemUuXG4gIGRlbHRhTW9kZTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNXaGVlbEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoV2hlZWxFdmVudEludGVyZmFjZSk7XG5cbi8qKlxuICogVGhpcyBwbHVnaW4gaW52b2tlcyBhY3Rpb24gZnVuY3Rpb25zIG9uIGZvcm1zLCBpbnB1dHMgYW5kIGJ1dHRvbnMgaWZcbiAqIHRoZSBmb3JtIGRvZXNuJ3QgcHJldmVudCBkZWZhdWx0LlxuICovXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkNihkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIG1heWJlVGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSAhPT0gJ3N1Ym1pdCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIW1heWJlVGFyZ2V0SW5zdCB8fCBtYXliZVRhcmdldEluc3Quc3RhdGVOb2RlICE9PSBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIC8vIElmIHdlJ3JlIGluc2lkZSBhIHBhcmVudCByb290IHRoYXQgaXRzZWxmIGlzIGEgcGFyZW50IG9mIHRoaXMgcm9vdCwgdGhlblxuICAgIC8vIGl0cyBkZWVwZXN0IHRhcmdldCB3b24ndCBiZSB0aGUgYWN0dWFsIGZvcm0gdGhhdCdzIGJlaW5nIHN1Ym1pdHRlZC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZm9ybUluc3QgPSBtYXliZVRhcmdldEluc3Q7XG4gIHZhciBmb3JtID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gIHZhciBhY3Rpb24gPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKGZvcm0pLmFjdGlvbjtcbiAgdmFyIHN1Ym1pdHRlciA9IG5hdGl2ZUV2ZW50LnN1Ym1pdHRlcjtcbiAgdmFyIHN1Ym1pdHRlckFjdGlvbjtcblxuICBpZiAoc3VibWl0dGVyKSB7XG4gICAgdmFyIHN1Ym1pdHRlclByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdWJtaXR0ZXIpO1xuICAgIHN1Ym1pdHRlckFjdGlvbiA9IHN1Ym1pdHRlclByb3BzID8gc3VibWl0dGVyUHJvcHMuZm9ybUFjdGlvbiA6IHN1Ym1pdHRlci5nZXRBdHRyaWJ1dGUoJ2Zvcm1BY3Rpb24nKTtcblxuICAgIGlmIChzdWJtaXR0ZXJBY3Rpb24gIT0gbnVsbCkge1xuICAgICAgLy8gVGhlIHN1Ym1pdHRlciBvdmVycmlkZXMgdGhlIGZvcm0gYWN0aW9uLlxuICAgICAgYWN0aW9uID0gc3VibWl0dGVyQWN0aW9uOyAvLyBJZiB0aGUgYWN0aW9uIGlzIGEgZnVuY3Rpb24sIHdlIGRvbid0IHdhbnQgdG8gcGFzcyBpdHMgbmFtZVxuICAgICAgLy8gdmFsdWUgdG8gdGhlIEZvcm1EYXRhIHNpbmNlIGl0J3MgY29udHJvbGxlZCBieSB0aGUgc2VydmVyLlxuXG4gICAgICBzdWJtaXR0ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgYWN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KCdhY3Rpb24nLCAnYWN0aW9uJywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBmdW5jdGlvbiBzdWJtaXRGb3JtKCkge1xuICAgIGlmIChuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAvLyBXZSBsZXQgZWFybGllciBldmVudHMgdG8gcHJldmVudCB0aGUgYWN0aW9uIGZyb20gc3VibWl0dGluZy5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFByZXZlbnQgbmF0aXZlIG5hdmlnYXRpb24uXG5cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdmFyIGZvcm1EYXRhO1xuXG4gICAgaWYgKHN1Ym1pdHRlcikge1xuICAgICAgLy8gVGhlIHN1Ym1pdHRlcidzIHZhbHVlIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgRm9ybURhdGEuXG4gICAgICAvLyBJdCBzaG91bGQgYmUgaW4gdGhlIGRvY3VtZW50IG9yZGVyIGluIHRoZSBmb3JtLlxuICAgICAgLy8gU2luY2UgdGhlIEZvcm1EYXRhIGNvbnN0cnVjdG9yIGludm9rZXMgdGhlIGZvcm1kYXRhIGV2ZW50IGl0IGFsc29cbiAgICAgIC8vIG5lZWRzIHRvIGJlIGF2YWlsYWJsZSBiZWZvcmUgdGhhdCBoYXBwZW5zIHNvIGFmdGVyIGNvbnN0cnVjdGlvbiBpdCdzIHRvb1xuICAgICAgLy8gbGF0ZS4gV2UgdXNlIGEgdGVtcG9yYXJ5IGZha2Ugbm9kZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoaXMgZXZlbnQuXG4gICAgICAvLyBUT0RPOiBGb3JtRGF0YSB0YWtlcyBhIHNlY29uZCBhcmd1bWVudCB0aGF0IGl0J3MgdGhlIHN1Ym1pdHRlciBidXQgdGhpc1xuICAgICAgLy8gaXMgZmFpcmx5IG5ldyBzbyBub3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgaXQgeWV0LiBTd2l0Y2ggdG8gdGhhdCB0ZWNobmlxdWVcbiAgICAgIC8vIHdoZW4gYXZhaWxhYmxlLlxuICAgICAgdmFyIHRlbXAgPSBzdWJtaXR0ZXIub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgdGVtcC5uYW1lID0gc3VibWl0dGVyLm5hbWU7XG4gICAgICB0ZW1wLnZhbHVlID0gc3VibWl0dGVyLnZhbHVlO1xuICAgICAgc3VibWl0dGVyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRlbXAsIHN1Ym1pdHRlcik7XG4gICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICAgIHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZW1wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgfVxuXG4gICAgdmFyIHBlbmRpbmdTdGF0ZSA9IHtcbiAgICAgIHBlbmRpbmc6IHRydWUsXG4gICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgIG1ldGhvZDogZm9ybS5tZXRob2QsXG4gICAgICBhY3Rpb246IGFjdGlvblxuICAgIH07XG5cbiAgICB7XG4gICAgICBPYmplY3QuZnJlZXplKHBlbmRpbmdTdGF0ZSk7XG4gICAgfVxuXG4gICAgc3RhcnRIb3N0VHJhbnNpdGlvbihmb3JtSW5zdCwgcGVuZGluZ1N0YXRlLCBhY3Rpb24sIGZvcm1EYXRhKTtcbiAgfVxuXG4gIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgZXZlbnQ6IGV2ZW50LFxuICAgIGxpc3RlbmVyczogW3tcbiAgICAgIGluc3RhbmNlOiBudWxsLFxuICAgICAgbGlzdGVuZXI6IHN1Ym1pdEZvcm0sXG4gICAgICBjdXJyZW50VGFyZ2V0OiBmb3JtXG4gICAgfV1cbiAgfSk7XG59XG5mdW5jdGlvbiBkaXNwYXRjaFJlcGxheWVkRm9ybUFjdGlvbihmb3JtSW5zdCwgZm9ybSwgYWN0aW9uLCBmb3JtRGF0YSkge1xuICB2YXIgcGVuZGluZ1N0YXRlID0ge1xuICAgIHBlbmRpbmc6IHRydWUsXG4gICAgZGF0YTogZm9ybURhdGEsXG4gICAgbWV0aG9kOiBmb3JtLm1ldGhvZCxcbiAgICBhY3Rpb246IGFjdGlvblxuICB9O1xuXG4gIHtcbiAgICBPYmplY3QuZnJlZXplKHBlbmRpbmdTdGF0ZSk7XG4gIH1cblxuICBzdGFydEhvc3RUcmFuc2l0aW9uKGZvcm1JbnN0LCBwZW5kaW5nU3RhdGUsIGFjdGlvbiwgZm9ybURhdGEpO1xufVxuXG4vLyBoYXMgdGhpcyBkZWZpbml0aW9uIGJ1aWx0LWluLlxuXG52YXIgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBUaGUgbGFzdCBvZiBlYWNoIGNvbnRpbnVvdXMgZXZlbnQgdHlwZS4gV2Ugb25seSBuZWVkIHRvIHJlcGxheSB0aGUgbGFzdCBvbmVcbi8vIGlmIHRoZSBsYXN0IHRhcmdldCB3YXMgZGVoeWRyYXRlZC5cblxudmFyIHF1ZXVlZEZvY3VzID0gbnVsbDtcbnZhciBxdWV1ZWREcmFnID0gbnVsbDtcbnZhciBxdWV1ZWRNb3VzZSA9IG51bGw7IC8vIEZvciBwb2ludGVyIGV2ZW50cyB0aGVyZSBjYW4gYmUgb25lIGxhdGVzdCBldmVudCBwZXIgcG9pbnRlcklkLlxuXG52YXIgcXVldWVkUG9pbnRlcnMgPSBuZXcgTWFwKCk7XG52YXIgcXVldWVkUG9pbnRlckNhcHR1cmVzID0gbmV3IE1hcCgpOyAvLyBXZSBjb3VsZCBjb25zaWRlciByZXBsYXlpbmcgc2VsZWN0aW9uY2hhbmdlIGFuZCB0b3VjaG1vdmVzIHRvby5cblxudmFyIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cyA9IFtdO1xudmFyIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cyA9IFsnbW91c2Vkb3duJywgJ21vdXNldXAnLCAndG91Y2hjYW5jZWwnLCAndG91Y2hlbmQnLCAndG91Y2hzdGFydCcsICdhdXhjbGljaycsICdkYmxjbGljaycsICdwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJ1cCcsICdkcmFnZW5kJywgJ2RyYWdzdGFydCcsICdkcm9wJywgJ2NvbXBvc2l0aW9uZW5kJywgJ2NvbXBvc2l0aW9uc3RhcnQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdpbnB1dCcsICd0ZXh0SW5wdXQnLCAvLyBJbnRlbnRpb25hbGx5IGNhbWVsQ2FzZVxuJ2NvcHknLCAnY3V0JywgJ3Bhc3RlJywgJ2NsaWNrJywgJ2NoYW5nZScsICdjb250ZXh0bWVudScsICdyZXNldCcgLy8gJ3N1Ym1pdCcsIC8vIHN0b3BQcm9wYWdhdGlvbiBibG9ja3MgdGhlIHJlcGxheSBtZWNoYW5pc21cbl07XG5mdW5jdGlvbiBpc0Rpc2NyZXRlRXZlbnRUaGF0UmVxdWlyZXNIeWRyYXRpb24oZXZlbnRUeXBlKSB7XG4gIHJldHVybiBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMuaW5kZXhPZihldmVudFR5cGUpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4ge1xuICAgIGJsb2NrZWRPbjogYmxvY2tlZE9uLFxuICAgIGRvbUV2ZW50TmFtZTogZG9tRXZlbnROYW1lLFxuICAgIGV2ZW50U3lzdGVtRmxhZ3M6IGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgbmF0aXZlRXZlbnQ6IG5hdGl2ZUV2ZW50LFxuICAgIHRhcmdldENvbnRhaW5lcnM6IFt0YXJnZXRDb250YWluZXJdXG4gIH07XG59IC8vIFJlc2V0cyB0aGUgcmVwbGF5aW5nIGZvciB0aGlzIHR5cGUgb2YgY29udGludW91cyBldmVudCB0byBubyBldmVudC5cblxuXG5mdW5jdGlvbiBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2xlYXZlJzpcbiAgICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgICAge1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVycy5kZWxldGUocG9pbnRlcklkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5kZWxldGUoX3BvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoZXhpc3RpbmdRdWV1ZWRFdmVudCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKGV4aXN0aW5nUXVldWVkRXZlbnQgPT09IG51bGwgfHwgZXhpc3RpbmdRdWV1ZWRFdmVudC5uYXRpdmVFdmVudCAhPT0gbmF0aXZlRXZlbnQpIHtcbiAgICB2YXIgcXVldWVkRXZlbnQgPSBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKGJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgdmFyIGZpYmVyID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShibG9ja2VkT24pO1xuXG4gICAgICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQXR0ZW1wdCB0byBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhpcyB0YXJnZXQuXG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVldWVkRXZlbnQ7XG4gIH0gLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHF1ZXVlZCB0aGlzIGV4YWN0IGV2ZW50LCB0aGVuIGl0J3MgYmVjYXVzZVxuICAvLyB0aGUgZGlmZmVyZW50IGV2ZW50IHN5c3RlbXMgaGF2ZSBkaWZmZXJlbnQgRE9NIGV2ZW50IGxpc3RlbmVycy5cbiAgLy8gV2UgY2FuIGFjY3VtdWxhdGUgdGhlIGZsYWdzLCBhbmQgdGhlIHRhcmdldENvbnRhaW5lcnMsIGFuZFxuICAvLyBzdG9yZSBhIHNpbmdsZSBldmVudCB0byBiZSByZXBsYXllZC5cblxuXG4gIGV4aXN0aW5nUXVldWVkRXZlbnQuZXZlbnRTeXN0ZW1GbGFncyB8PSBldmVudFN5c3RlbUZsYWdzO1xuICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IGV4aXN0aW5nUXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICBpZiAodGFyZ2V0Q29udGFpbmVyICE9PSBudWxsICYmIHRhcmdldENvbnRhaW5lcnMuaW5kZXhPZih0YXJnZXRDb250YWluZXIpID09PSAtMSkge1xuICAgIHRhcmdldENvbnRhaW5lcnMucHVzaCh0YXJnZXRDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIGV4aXN0aW5nUXVldWVkRXZlbnQ7XG59XG5cbmZ1bmN0aW9uIHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gVGhlc2Ugc2V0IHJlbGF0ZWRUYXJnZXQgdG8gbnVsbCBiZWNhdXNlIHRoZSByZXBsYXllZCBldmVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgd2VcbiAgLy8gbW92ZWQgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cgKG5vIHRhcmdldCkgb250byB0aGUgdGFyZ2V0IG9uY2UgaXQgaHlkcmF0ZXMuXG4gIC8vIEluc3RlYWQgb2YgbXV0YXRpbmcgd2UgY291bGQgY2xvbmUgdGhlIGV2ZW50LlxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAge1xuICAgICAgICB2YXIgZm9jdXNFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRGb2N1cyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRm9jdXMsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGZvY3VzRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBkcmFnRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRHJhZyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRHJhZywgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgZHJhZ0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRNb3VzZSA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkTW91c2UsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG1vdXNlRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuc2V0KHBvaW50ZXJJZCwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVycy5nZXQocG9pbnRlcklkKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBwb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlckV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHZhciBfcG9pbnRlcklkMiA9IF9wb2ludGVyRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuc2V0KF9wb2ludGVySWQyLCBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5nZXQoX3BvaW50ZXJJZDIpIHx8IG51bGwsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIF9wb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IC8vIENoZWNrIGlmIHRoaXMgdGFyZ2V0IGlzIHVuYmxvY2tlZC4gUmV0dXJucyB0cnVlIGlmIGl0J3MgdW5ibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQocXVldWVkVGFyZ2V0KSB7XG4gIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hhcmVzIGEgbG90IG9mIGxvZ2ljIHdpdGggZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudC5cbiAgLy8gVHJ5IHRvIHVuaWZ5IHRoZW0uIEl0J3MgYSBiaXQgdHJpY2t5IHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgdHdvIHJldHVyblxuICAvLyB2YWx1ZXMuXG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocXVldWVkVGFyZ2V0LnRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGFnID0gbmVhcmVzdE1vdW50ZWQudGFnO1xuXG4gICAgICBpZiAodGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSBibG9ja2VkIG9uIGh5ZHJhdGluZyB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIC8vIEluY3JlYXNlIGl0cyBwcmlvcml0eS5cbiAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gaW5zdGFuY2U7XG4gICAgICAgICAgcnVuV2l0aFByaW9yaXR5KHF1ZXVlZFRhcmdldC5wcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNSb290RGVoeWRyYXRlZChyb290KSkge1xuICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpOyAvLyBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2ZcbiAgICAgICAgICAvLyBhIHJvb3Qgb3RoZXIgdGhhbiBzeW5jLlxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHF1ZXVlRXhwbGljaXRIeWRyYXRpb25UYXJnZXQodGFyZ2V0KSB7XG4gIC8vIFRPRE86IFRoaXMgd2lsbCByZWFkIHRoZSBwcmlvcml0eSBpZiBpdCdzIGRpc3BhdGNoZWQgYnkgdGhlIFJlYWN0XG4gIC8vIGV2ZW50IHN5c3RlbSBidXQgbm90IG5hdGl2ZSBldmVudHMuIFNob3VsZCByZWFkIHdpbmRvdy5ldmVudC50eXBlLCBsaWtlXG4gIC8vIHdlIGRvIGZvciB1cGRhdGVzIChnZXRDdXJyZW50RXZlbnRQcmlvcml0eSkuXG4gIHZhciB1cGRhdGVQcmlvcml0eSA9IGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSgpO1xuICB2YXIgcXVldWVkVGFyZ2V0ID0ge1xuICAgIGJsb2NrZWRPbjogbnVsbCxcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICBwcmlvcml0eTogdXBkYXRlUHJpb3JpdHlcbiAgfTtcbiAgdmFyIGkgPSAwO1xuXG4gIGZvciAoOyBpIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gU3RvcCBvbmNlIHdlIGhpdCB0aGUgZmlyc3QgdGFyZ2V0IHdpdGggbG93ZXIgcHJpb3JpdHkgdGhhblxuICAgIGlmICghaXNIaWdoZXJFdmVudFByaW9yaXR5KHVwZGF0ZVByaW9yaXR5LCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbaV0ucHJpb3JpdHkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMuc3BsaWNlKGksIDAsIHF1ZXVlZFRhcmdldCk7XG5cbiAgaWYgKGkgPT09IDApIHtcbiAgICBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQocXVldWVkVGFyZ2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IHF1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgd2hpbGUgKHRhcmdldENvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBuZXh0QmxvY2tlZE9uID0gZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudChxdWV1ZWRFdmVudC5uYXRpdmVFdmVudCk7XG5cbiAgICBpZiAobmV4dEJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgICAgdmFyIG5hdGl2ZUV2ZW50ID0gcXVldWVkRXZlbnQubmF0aXZlRXZlbnQ7XG4gICAgICB2YXIgbmF0aXZlRXZlbnRDbG9uZSA9IG5ldyBuYXRpdmVFdmVudC5jb25zdHJ1Y3RvcihuYXRpdmVFdmVudC50eXBlLCBuYXRpdmVFdmVudCk7XG4gICAgICBzZXRSZXBsYXlpbmdFdmVudChuYXRpdmVFdmVudENsb25lKTtcbiAgICAgIG5hdGl2ZUV2ZW50LnRhcmdldC5kaXNwYXRjaEV2ZW50KG5hdGl2ZUV2ZW50Q2xvbmUpO1xuICAgICAgcmVzZXRSZXBsYXlpbmdFdmVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICB2YXIgZmliZXIgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHRCbG9ja2VkT24pO1xuXG4gICAgICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oZmliZXIpO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKHF1ZXVlZEV2ZW50LCBrZXksIG1hcCkge1xuICBpZiAoYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkpIHtcbiAgICBtYXAuZGVsZXRlKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGF5VW5ibG9ja2VkRXZlbnRzKCkge1xuICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7IC8vIFJlcGxheSBhbnkgY29udGludW91cyBldmVudHMuXG5cbiAgaWYgKHF1ZXVlZEZvY3VzICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRm9jdXMpKSB7XG4gICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXVlZERyYWcgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWREcmFnKSkge1xuICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkTW91c2UpKSB7XG4gICAgcXVldWVkTW91c2UgPSBudWxsO1xuICB9XG5cbiAgcXVldWVkUG9pbnRlcnMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xuICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsO1xuXG4gICAgaWYgKCFoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0KSB7XG4gICAgICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gdHJ1ZTsgLy8gU2NoZWR1bGUgYSBjYWxsYmFjayB0byBhdHRlbXB0IHJlcGxheWluZyBhcyBtYW55IGV2ZW50cyBhcyBhcmVcbiAgICAgIC8vIG5vdyB1bmJsb2NrZWQuIFRoaXMgZmlyc3QgbWlnaHQgbm90IGFjdHVhbGx5IGJlIHVuYmxvY2tlZCB5ZXQuXG4gICAgICAvLyBXZSBjb3VsZCBjaGVjayBpdCBlYXJseSB0byBhdm9pZCBzY2hlZHVsaW5nIGFuIHVubmVjZXNzYXJ5IGNhbGxiYWNrLlxuXG4gICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksIHJlcGxheVVuYmxvY2tlZEV2ZW50cyk7XG4gICAgfVxuICB9XG59IC8vIFtmb3JtLCBzdWJtaXR0ZXIgb3IgYWN0aW9uLCBmb3JtRGF0YS4uLl1cblxuXG52YXIgbGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID0gbnVsbDtcblxuZnVuY3Rpb24gcmVwbGF5VW5ibG9ja2VkRm9ybUFjdGlvbnMoZm9ybVJlcGxheWluZ1F1ZXVlKSB7XG4gIGlmIChsYXN0U2NoZWR1bGVkUmVwbGF5UXVldWUgPT09IGZvcm1SZXBsYXlpbmdRdWV1ZSkge1xuICAgIGxhc3RTY2hlZHVsZWRSZXBsYXlRdWV1ZSA9IG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1SZXBsYXlpbmdRdWV1ZS5sZW5ndGg7IGkgKz0gMykge1xuICAgIHZhciBmb3JtID0gZm9ybVJlcGxheWluZ1F1ZXVlW2ldO1xuICAgIHZhciBzdWJtaXR0ZXJPckFjdGlvbiA9IGZvcm1SZXBsYXlpbmdRdWV1ZVtpICsgMV07XG4gICAgdmFyIGZvcm1EYXRhID0gZm9ybVJlcGxheWluZ1F1ZXVlW2kgKyAyXTtcblxuICAgIGlmICh0eXBlb2Ygc3VibWl0dGVyT3JBY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFRoaXMgYWN0aW9uIGlzIG5vdCBoeWRyYXRlZCB5ZXQuIFRoaXMgbWlnaHQgYmUgYmVjYXVzZSBpdCdzIGJsb2NrZWQgb25cbiAgICAgIC8vIGEgZGlmZmVyZW50IFJlYWN0IGluc3RhbmNlIG9yIGhpZ2hlciB1cCBvdXIgdHJlZS5cbiAgICAgIHZhciBibG9ja2VkT24gPSBmaW5kSW5zdGFuY2VCbG9ja2luZ1RhcmdldChzdWJtaXR0ZXJPckFjdGlvbiB8fCBmb3JtKTtcblxuICAgICAgaWYgKGJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSBub3QgYmxvY2tlZCBidXQgd2UgZG9uJ3QgaGF2ZSBhbiBhY3Rpb24uIFRoaXMgbXVzdCBtZWFuIHRoYXRcbiAgICAgICAgLy8gdGhpcyBpcyBpbiBhbm90aGVyIFJlYWN0IGluc3RhbmNlLiBXZSdsbCBqdXN0IHNraXAgcGFzdCBpdC5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSdyZSBibG9ja2VkIG9uIHNvbWV0aGluZyBpbiB0aGlzIFJlYWN0IGluc3RhbmNlLiBXZSdsbCByZXRyeSBsYXRlci5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZvcm1JbnN0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShmb3JtKTtcblxuICAgIGlmIChmb3JtSW5zdCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyBwYXJ0IG9mIG91ciBpbnN0YW5jZS5cbiAgICAgIC8vIFdlJ3JlIHJlYWR5IHRvIHJlcGxheSB0aGlzLiBMZXQncyBkZWxldGUgaXQgZnJvbSB0aGUgcXVldWUuXG4gICAgICBmb3JtUmVwbGF5aW5nUXVldWUuc3BsaWNlKGksIDMpO1xuICAgICAgaSAtPSAzO1xuICAgICAgZGlzcGF0Y2hSZXBsYXllZEZvcm1BY3Rpb24oZm9ybUluc3QsIGZvcm0sIHN1Ym1pdHRlck9yQWN0aW9uLCBmb3JtRGF0YSk7IC8vIENvbnRpbnVlIHdpdGhvdXQgaW5jcmVtZW50aW5nIHRoZSBpbmRleC5cblxuICAgICAgY29udGludWU7XG4gICAgfSAvLyBUaGlzIGZvcm0gbXVzdCd2ZSBiZWVuIHBhcnQgb2YgYSBkaWZmZXJlbnQgUmVhY3QgaW5zdGFuY2UuXG4gICAgLy8gSWYgd2Ugd2FudCB0byBwcmVzZXJ2ZSBvcmRlcmluZyBiZXR3ZWVuIFJlYWN0IGluc3RhbmNlcyBvbiB0aGUgc2FtZSByb290XG4gICAgLy8gd2UnZCBuZWVkIHNvbWUgd2F5IGZvciB0aGUgb3RoZXIgaW5zdGFuY2UgdG8gcGluZyB1cyB3aGVuIGl0J3MgZG9uZS5cbiAgICAvLyBXZSdsbCBqdXN0IHNraXAgdGhpcyBhbmQgbGV0IHRoZSBvdGhlciBpbnN0YW5jZSBleGVjdXRlIGl0LlxuXG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVSZXBsYXlRdWV1ZUlmTmVlZGVkKGZvcm1SZXBsYXlpbmdRdWV1ZSkge1xuICAvLyBTY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGV4ZWN1dGUgYW55IHVuYmxvY2tlZCBmb3JtIGFjdGlvbnMgaW4uXG4gIC8vIFdlIG9ubHkga2VlcCB0cmFjayBvZiB0aGUgbGFzdCBxdWV1ZSB3aGljaCBtZWFucyB0aGF0IGlmIG11bHRpcGxlIFJlYWN0IG9zY2lsbGF0ZVxuICAvLyBjb21taXRzLCB3ZSBjb3VsZCBzY2hlZHVsZSBtb3JlIGNhbGxiYWNrcyB0aGFuIG5lY2Vzc2FyeSBidXQgaXQncyBub3QgYSBiaWcgZGVhbFxuICAvLyBhbmQgd2Ugb25seSByZWFsbHkgZXhjZXB0IG9uZSBpbnN0YW5jZS5cbiAgaWYgKGxhc3RTY2hlZHVsZWRSZXBsYXlRdWV1ZSAhPT0gZm9ybVJlcGxheWluZ1F1ZXVlKSB7XG4gICAgbGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID0gZm9ybVJlcGxheWluZ1F1ZXVlO1xuICAgIFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlcGxheVVuYmxvY2tlZEZvcm1BY3Rpb25zKGZvcm1SZXBsYXlpbmdRdWV1ZSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV0cnlJZkJsb2NrZWRPbih1bmJsb2NrZWQpIHtcbiAgaWYgKHF1ZXVlZEZvY3VzICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEZvY3VzLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZERyYWcgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRHJhZywgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIGlmIChxdWV1ZWRNb3VzZSAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRNb3VzZSwgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIHZhciB1bmJsb2NrID0gZnVuY3Rpb24gKHF1ZXVlZEV2ZW50KSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKTtcbiAgfTtcblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKHVuYmxvY2spO1xuICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaCh1bmJsb2NrKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBxdWV1ZWRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbaV07XG5cbiAgICBpZiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAocXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dEV4cGxpY2l0VGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzWzBdO1xuXG4gICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KG5leHRFeHBsaWNpdFRhcmdldCk7XG5cbiAgICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHVuYmxvY2tlZC5cbiAgICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIC8vIENoZWNrIHRoZSBkb2N1bWVudCBpZiB0aGVyZSBhcmUgYW55IHF1ZXVlZCBmb3JtIGFjdGlvbnMuXG4gICAgdmFyIHJvb3QgPSB1bmJsb2NrZWQuZ2V0Um9vdE5vZGUoKTtcbiAgICB2YXIgZm9ybVJlcGxheWluZ1F1ZXVlID0gcm9vdC4kJHJlYWN0Rm9ybVJlcGxheTtcblxuICAgIGlmIChmb3JtUmVwbGF5aW5nUXVldWUgIT0gbnVsbCkge1xuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGZvcm1SZXBsYXlpbmdRdWV1ZS5sZW5ndGg7IF9pICs9IDMpIHtcbiAgICAgICAgdmFyIGZvcm0gPSBmb3JtUmVwbGF5aW5nUXVldWVbX2ldO1xuICAgICAgICB2YXIgc3VibWl0dGVyT3JBY3Rpb24gPSBmb3JtUmVwbGF5aW5nUXVldWVbX2kgKyAxXTtcbiAgICAgICAgdmFyIGZvcm1Qcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUoZm9ybSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdWJtaXR0ZXJPckFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFRoaXMgYWN0aW9uIGhhcyBhbHJlYWR5IHJlc29sdmVkLiBXZSdyZSBqdXN0IHdhaXRpbmcgdG8gZGlzcGF0Y2ggaXQuXG4gICAgICAgICAgaWYgKCFmb3JtUHJvcHMpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgd2FzIG5vdCBwYXJ0IG9mIHRoaXMgUmVhY3QgaW5zdGFuY2UuIEl0IG1pZ2h0IGhhdmUgYmVlbiByZWNlbnRseVxuICAgICAgICAgICAgLy8gdW5ibG9ja2luZyB1cyBmcm9tIGRpc3BhdGNoaW5nIG91ciBldmVudHMuIFNvIGxldCdzIG1ha2Ugc3VyZSB3ZSBzY2hlZHVsZVxuICAgICAgICAgICAgLy8gYSByZXRyeS5cbiAgICAgICAgICAgIHNjaGVkdWxlUmVwbGF5UXVldWVJZk5lZWRlZChmb3JtUmVwbGF5aW5nUXVldWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRhcmdldCA9IGZvcm07XG5cbiAgICAgICAgaWYgKGZvcm1Qcm9wcykge1xuICAgICAgICAgIC8vIFRoaXMgZm9ybSBiZWxvbmdzIHRvIHRoaXMgUmVhY3QgaW5zdGFuY2UgYnV0IHRoZSBzdWJtaXR0ZXIgbWlnaHRcbiAgICAgICAgICAvLyBub3QgYmUgZG9uZSB5ZXQuXG4gICAgICAgICAgdmFyIGFjdGlvbiA9IG51bGw7XG4gICAgICAgICAgdmFyIHN1Ym1pdHRlciA9IHN1Ym1pdHRlck9yQWN0aW9uO1xuXG4gICAgICAgICAgaWYgKHN1Ym1pdHRlciAmJiBzdWJtaXR0ZXIuaGFzQXR0cmlidXRlKCdmb3JtQWN0aW9uJykpIHtcbiAgICAgICAgICAgIC8vIFRoZSBzdWJtaXR0ZXIgaXMgdGhlIG9uZSB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0aW9uLlxuICAgICAgICAgICAgdGFyZ2V0ID0gc3VibWl0dGVyO1xuICAgICAgICAgICAgdmFyIHN1Ym1pdHRlclByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdWJtaXR0ZXIpO1xuXG4gICAgICAgICAgICBpZiAoc3VibWl0dGVyUHJvcHMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIHN1Ym1pdHRlciBpcyBwYXJ0IG9mIHRoaXMgaW5zdGFuY2UuXG4gICAgICAgICAgICAgIGFjdGlvbiA9IHN1Ym1pdHRlclByb3BzLmZvcm1BY3Rpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgYmxvY2tlZE9uID0gZmluZEluc3RhbmNlQmxvY2tpbmdUYXJnZXQodGFyZ2V0KTtcblxuICAgICAgICAgICAgICBpZiAoYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHN1Ym1pdHRlciBpcyBub3QgaHlkcmF0ZWQgeWV0LiBXZSdsbCB3YWl0IGZvciBpdC5cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfSAvLyBUaGUgc3VibWl0dGVyIG11c3QgaGF2ZSBiZWVuIGEgcGFydCBvZiBhIGRpZmZlcmVudCBSZWFjdCBpbnN0YW5jZS5cbiAgICAgICAgICAgICAgLy8gRXhjZXB0IHRoZSBmb3JtIGlzbid0LiBXZSBkb24ndCBkaXNwYXRjaCBhY3Rpb25zIGluIHRoaXMgc2NlbmFyaW8uXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWN0aW9uID0gZm9ybVByb3BzLmFjdGlvbjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZm9ybVJlcGxheWluZ1F1ZXVlW19pICsgMV0gPSBhY3Rpb247XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHNvIGxldCdzIGp1c3QgZGVsZXRlIHRoaXMgYWN0aW9uLlxuICAgICAgICAgICAgZm9ybVJlcGxheWluZ1F1ZXVlLnNwbGljZShfaSwgMyk7XG4gICAgICAgICAgICBfaSAtPSAzO1xuICAgICAgICAgIH0gLy8gU2NoZWR1bGUgYSByZXBsYXkgaW4gY2FzZSB0aGlzIHVuYmxvY2tlZCBzb21ldGhpbmcuXG5cblxuICAgICAgICAgIHNjaGVkdWxlUmVwbGF5UXVldWVJZk5lZWRlZChmb3JtUmVwbGF5aW5nUXVldWUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIFNvbWV0aGluZyBhYm92ZSB0aGlzIHRhcmdldCBpcyBzdGlsbCBibG9ja2VkIHNvIHdlIGNhbid0IGNvbnRpbnVlIHlldC5cbiAgICAgICAgLy8gV2UncmUgbm90IHN1cmUgaWYgdGhpcyB0YXJnZXQgaXMgYWN0dWFsbHkgcGFydCBvZiB0aGlzIFJlYWN0IGluc3RhbmNlXG4gICAgICAgIC8vIHlldC4gSXQgY291bGQgYmUgYSBkaWZmZXJlbnQgUmVhY3QgYXMgYSBjaGlsZCBidXQgYXQgbGVhc3Qgc29tZSBwYXJlbnQgaXMuXG4gICAgICAgIC8vIFdlIG11c3QgY29udGludWUgZm9yIGFueSBmdXJ0aGVyIHF1ZXVlZCBhY3Rpb25zLlxuXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOyAvLyBUT0RPOiBjYW4gd2Ugc3RvcCBleHBvcnRpbmcgdGhlc2U/XG5cbnZhciBfZW5hYmxlZCA9IHRydWU7IC8vIFRoaXMgaXMgZXhwb3J0ZWQgaW4gRkIgYnVpbGRzIGZvciB1c2UgYnkgbGVnYWN5IEZCIGxheWVyIGluZnJhLlxuLy8gV2UnZCBsaWtlIHRvIHJlbW92ZSB0aGlzIGJ1dCBpdCdzIG5vdCBjbGVhciBpZiB0aGlzIGlzIHNhZmUuXG5cbmZ1bmN0aW9uIHNldEVuYWJsZWQoZW5hYmxlZCkge1xuICBfZW5hYmxlZCA9ICEhZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGlzRW5hYmxlZCgpIHtcbiAgcmV0dXJuIF9lbmFibGVkO1xufVxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGV2ZW50UHJpb3JpdHkgPSBnZXRFdmVudFByaW9yaXR5KGRvbUV2ZW50TmFtZSk7XG4gIHZhciBsaXN0ZW5lcldyYXBwZXI7XG5cbiAgc3dpdGNoIChldmVudFByaW9yaXR5KSB7XG4gICAgY2FzZSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaENvbnRpbnVvdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBEZWZhdWx0RXZlbnRQcmlvcml0eTpcbiAgICBkZWZhdWx0OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hFdmVudDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyV3JhcHBlci5iaW5kKG51bGwsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSgpO1xuICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gbnVsbDtcblxuICB0cnkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHkpO1xuICAgIGRpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNQcmlvcml0eSk7XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSgpO1xuICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gbnVsbDtcblxuICB0cnkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShDb250aW51b3VzRXZlbnRQcmlvcml0eSk7XG4gICAgZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICB9IGZpbmFsbHkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShwcmV2aW91c1ByaW9yaXR5KTtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKCFfZW5hYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBibG9ja2VkT24gPSBmaW5kSW5zdGFuY2VCbG9ja2luZ0V2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICBpZiAoYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHJldHVybl90YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpO1xuICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpKSB7XG4gICAgbmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgcmV0dXJuO1xuICB9IC8vIFdlIG5lZWQgdG8gY2xlYXIgb25seSBpZiB3ZSBkaWRuJ3QgcXVldWUgYmVjYXVzZVxuICAvLyBxdWV1ZWluZyBpcyBhY2N1bXVsYXRpdmUuXG5cblxuICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuXG4gIGlmIChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSAmJiBpc0Rpc2NyZXRlRXZlbnRUaGF0UmVxdWlyZXNIeWRyYXRpb24oZG9tRXZlbnROYW1lKSkge1xuICAgIHdoaWxlIChibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIHZhciBmaWJlciA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKTtcblxuICAgICAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRTeW5jaHJvbm91c0h5ZHJhdGlvbihmaWJlcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0QmxvY2tlZE9uID0gZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICAgIGlmIChuZXh0QmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAgIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCByZXR1cm5fdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5leHRCbG9ja2VkT24gPT09IGJsb2NrZWRPbikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbjtcbiAgICB9XG5cbiAgICBpZiAoYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICBuYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gVGhpcyBpcyBub3QgcmVwbGF5YWJsZSBzbyB3ZSdsbCBpbnZva2UgaXQgYnV0IHdpdGhvdXQgYSB0YXJnZXQsXG4gIC8vIGluIGNhc2UgdGhlIGV2ZW50IHN5c3RlbSBuZWVkcyB0byB0cmFjZSBpdC5cblxuXG4gIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBudWxsLCB0YXJnZXRDb250YWluZXIpO1xufVxuZnVuY3Rpb24gZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHJldHVybiBmaW5kSW5zdGFuY2VCbG9ja2luZ1RhcmdldChuYXRpdmVFdmVudFRhcmdldCk7XG59XG52YXIgcmV0dXJuX3RhcmdldEluc3QgPSBudWxsOyAvLyBSZXR1cm5zIGEgU3VzcGVuc2VJbnN0YW5jZSBvciBDb250YWluZXIgaWYgaXQncyBibG9ja2VkLlxuLy8gVGhlIHJldHVybl90YXJnZXRJbnN0IGZpZWxkIGFib3ZlIGlzIGNvbmNlcHR1YWxseSBwYXJ0IG9mIHRoZSByZXR1cm4gdmFsdWUuXG5cbmZ1bmN0aW9uIGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KHRhcmdldE5vZGUpIHtcbiAgLy8gVE9ETzogV2FybiBpZiBfZW5hYmxlZCBpcyBmYWxzZS5cbiAgcmV0dXJuX3RhcmdldEluc3QgPSBudWxsO1xuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpO1xuXG4gIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB0cmVlIGhhcyBiZWVuIHVubW91bnRlZCBhbHJlYWR5LiBEaXNwYXRjaCB3aXRob3V0IGEgdGFyZ2V0LlxuICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG5cbiAgICAgIGlmICh0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFF1ZXVlIHRoZSBldmVudCB0byBiZSByZXBsYXllZCBsYXRlci4gQWJvcnQgZGlzcGF0Y2hpbmcgc2luY2Ugd2VcbiAgICAgICAgICAvLyBkb24ndCB3YW50IHRoaXMgZXZlbnQgZGlzcGF0Y2hlZCB0d2ljZSB0aHJvdWdoIHRoZSBldmVudCBzeXN0ZW0uXG4gICAgICAgICAgLy8gVE9ETzogSWYgdGhpcyBpcyB0aGUgZmlyc3QgZGlzY3JldGUgZXZlbnQgaW4gdGhlIHF1ZXVlLiBTY2hlZHVsZSBhbiBpbmNyZWFzZWRcbiAgICAgICAgICAvLyBwcmlvcml0eSBmb3IgdGhpcyBib3VuZGFyeS5cbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBzb21ldGhpbmcgd2VudCB3cm9uZyBidXQgdG8gYXZvaWQgYmxvY2tpbmdcbiAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbSwgZGlzcGF0Y2ggdGhlIGV2ZW50IHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICAgIC8vIFRPRE86IFdhcm4uXG5cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgICB2YXIgcm9vdCA9IG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNSb290RGVoeWRyYXRlZChyb290KSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaGFwcGVucyBkdXJpbmcgYSByZXBsYXkgc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIGl0IG1pZ2h0IGJsb2NrXG4gICAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbS5cbiAgICAgICAgICByZXR1cm4gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gdGFyZ2V0SW5zdCkge1xuICAgICAgICAvLyBJZiB3ZSBnZXQgYW4gZXZlbnQgKGV4OiBpbWcgb25sb2FkKSBiZWZvcmUgY29tbWl0dGluZyB0aGF0XG4gICAgICAgIC8vIGNvbXBvbmVudCdzIG1vdW50LCBpZ25vcmUgaXQgZm9yIG5vdyAodGhhdCBpcywgdHJlYXQgaXQgYXMgaWYgaXQgd2FzIGFuXG4gICAgICAgIC8vIGV2ZW50IG9uIGEgbm9uLVJlYWN0IHRyZWUpLiBXZSBtaWdodCBhbHNvIGNvbnNpZGVyIHF1ZXVlaW5nIGV2ZW50cyBhbmRcbiAgICAgICAgLy8gZGlzcGF0Y2hpbmcgdGhlbSBhZnRlciB0aGUgbW91bnQuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDsgLy8gV2UncmUgbm90IGJsb2NrZWQgb24gYW55dGhpbmcuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRFdmVudFByaW9yaXR5KGRvbUV2ZW50TmFtZSkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIC8vIFVzZWQgYnkgU2ltcGxlRXZlbnRQbHVnaW46XG4gICAgY2FzZSAnY2FuY2VsJzpcbiAgICBjYXNlICdjbGljayc6XG4gICAgY2FzZSAnY2xvc2UnOlxuICAgIGNhc2UgJ2NvbnRleHRtZW51JzpcbiAgICBjYXNlICdjb3B5JzpcbiAgICBjYXNlICdjdXQnOlxuICAgIGNhc2UgJ2F1eGNsaWNrJzpcbiAgICBjYXNlICdkYmxjbGljayc6XG4gICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgY2FzZSAnZHJhZ3N0YXJ0JzpcbiAgICBjYXNlICdkcm9wJzpcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgIGNhc2UgJ2ludmFsaWQnOlxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdtb3VzZXVwJzpcbiAgICBjYXNlICdwYXN0ZSc6XG4gICAgY2FzZSAncGF1c2UnOlxuICAgIGNhc2UgJ3BsYXknOlxuICAgIGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuICAgIGNhc2UgJ3BvaW50ZXJkb3duJzpcbiAgICBjYXNlICdwb2ludGVydXAnOlxuICAgIGNhc2UgJ3JhdGVjaGFuZ2UnOlxuICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICBjYXNlICdyZXNpemUnOlxuICAgIGNhc2UgJ3NlZWtlZCc6XG4gICAgY2FzZSAnc3VibWl0JzpcbiAgICBjYXNlICd0b3VjaGNhbmNlbCc6XG4gICAgY2FzZSAndG91Y2hlbmQnOlxuICAgIGNhc2UgJ3RvdWNoc3RhcnQnOlxuICAgIGNhc2UgJ3ZvbHVtZWNoYW5nZSc6IC8vIFVzZWQgYnkgcG9seWZpbGxzOiAoZmFsbCB0aHJvdWdoKVxuXG4gICAgY2FzZSAnY2hhbmdlJzpcbiAgICBjYXNlICdzZWxlY3Rpb25jaGFuZ2UnOlxuICAgIGNhc2UgJ3RleHRJbnB1dCc6XG4gICAgY2FzZSAnY29tcG9zaXRpb25zdGFydCc6XG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgIGNhc2UgJ2NvbXBvc2l0aW9udXBkYXRlJzogLy8gT25seSBlbmFibGVDcmVhdGVFdmVudEhhbmRsZUFQSTogKGZhbGwgdGhyb3VnaClcblxuICAgIGNhc2UgJ2JlZm9yZWJsdXInOlxuICAgIGNhc2UgJ2FmdGVyYmx1cic6IC8vIE5vdCB1c2VkIGJ5IFJlYWN0IGJ1dCBjb3VsZCBiZSBieSB1c2VyIGNvZGU6IChmYWxsIHRocm91Z2gpXG5cbiAgICBjYXNlICdiZWZvcmVpbnB1dCc6XG4gICAgY2FzZSAnYmx1cic6XG4gICAgY2FzZSAnZnVsbHNjcmVlbmNoYW5nZSc6XG4gICAgY2FzZSAnZm9jdXMnOlxuICAgIGNhc2UgJ2hhc2hjaGFuZ2UnOlxuICAgIGNhc2UgJ3BvcHN0YXRlJzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3NlbGVjdHN0YXJ0JzpcbiAgICAgIHJldHVybiBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG5cbiAgICBjYXNlICdkcmFnJzpcbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdleGl0JzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgIGNhc2UgJ2RyYWdvdmVyJzpcbiAgICBjYXNlICdtb3VzZW1vdmUnOlxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJtb3ZlJzpcbiAgICBjYXNlICdwb2ludGVyb3V0JzpcbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgY2FzZSAnc2Nyb2xsJzpcbiAgICBjYXNlICd0b2dnbGUnOlxuICAgIGNhc2UgJ3RvdWNobW92ZSc6XG4gICAgY2FzZSAnd2hlZWwnOiAvLyBOb3QgdXNlZCBieSBSZWFjdCBidXQgY291bGQgYmUgYnkgdXNlciBjb2RlOiAoZmFsbCB0aHJvdWdoKVxuXG4gICAgY2FzZSAnbW91c2VlbnRlcic6XG4gICAgY2FzZSAnbW91c2VsZWF2ZSc6XG4gICAgY2FzZSAncG9pbnRlcmVudGVyJzpcbiAgICBjYXNlICdwb2ludGVybGVhdmUnOlxuICAgICAgcmV0dXJuIENvbnRpbnVvdXNFdmVudFByaW9yaXR5O1xuXG4gICAgY2FzZSAnbWVzc2FnZSc6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIG1pZ2h0IGJlIGluIHRoZSBTY2hlZHVsZXIgY2FsbGJhY2suXG4gICAgICAgIC8vIEV2ZW50dWFsbHkgdGhpcyBtZWNoYW5pc20gd2lsbCBiZSByZXBsYWNlZCBieSBhIGNoZWNrXG4gICAgICAgIC8vIG9mIHRoZSBjdXJyZW50IHByaW9yaXR5IG9uIHRoZSBuYXRpdmUgc2NoZWR1bGVyLlxuICAgICAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHkgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuXG4gICAgICAgIHN3aXRjaCAoc2NoZWR1bGVyUHJpb3JpdHkpIHtcbiAgICAgICAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgICAgICAgcmV0dXJuIERpc2NyZXRlRXZlbnRQcmlvcml0eTtcblxuICAgICAgICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICAgICAgICByZXR1cm4gQ29udGludW91c0V2ZW50UHJpb3JpdHk7XG5cbiAgICAgICAgICBjYXNlIE5vcm1hbFByaW9yaXR5JDE6XG4gICAgICAgICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMb3dTY2hlZHVsZXJQcmlvcml0eSwgc29tZWhvdy4gTWF5YmUgdGhlIHNhbWUgbGFuZSBhcyBoeWRyYXRpb24uXG4gICAgICAgICAgICByZXR1cm4gRGVmYXVsdEV2ZW50UHJpb3JpdHk7XG5cbiAgICAgICAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgICAgICAgIHJldHVybiBJZGxlRXZlbnRQcmlvcml0eTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gRGVmYXVsdEV2ZW50UHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gRGVmYXVsdEV2ZW50UHJpb3JpdHk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9KTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG4vKipcbiAqIFRoZXNlIHZhcmlhYmxlcyBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0IGNvbnRlbnQgb2YgYSB0YXJnZXQgbm9kZSxcbiAqIGFsbG93aW5nIGNvbXBhcmlzb24gb2YgY29udGVudCBiZWZvcmUgYW5kIGFmdGVyIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogSWRlbnRpZnkgdGhlIG5vZGUgd2hlcmUgc2VsZWN0aW9uIGN1cnJlbnRseSBiZWdpbnMsIHRoZW4gb2JzZXJ2ZVxuICogYm90aCBpdHMgdGV4dCBjb250ZW50IGFuZCBpdHMgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgRE9NLiBTaW5jZSB0aGVcbiAqIGJyb3dzZXIgbWF5IG5hdGl2ZWx5IHJlcGxhY2UgdGhlIHRhcmdldCBub2RlIGR1cmluZyBjb21wb3NpdGlvbiwgd2UgY2FuXG4gKiB1c2UgaXRzIHBvc2l0aW9uIHRvIGZpbmQgaXRzIHJlcGxhY2VtZW50LlxuICpcbiAqXG4gKi9cbnZhciByb290ID0gbnVsbDtcbnZhciBzdGFydFRleHQgPSBudWxsO1xudmFyIGZhbGxiYWNrVGV4dCA9IG51bGw7XG5mdW5jdGlvbiBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJvb3QgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgc3RhcnRUZXh0ID0gZ2V0VGV4dCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlc2V0KCkge1xuICByb290ID0gbnVsbDtcbiAgc3RhcnRUZXh0ID0gbnVsbDtcbiAgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldERhdGEoKSB7XG4gIGlmIChmYWxsYmFja1RleHQpIHtcbiAgICByZXR1cm4gZmFsbGJhY2tUZXh0O1xuICB9XG5cbiAgdmFyIHN0YXJ0O1xuICB2YXIgc3RhcnRWYWx1ZSA9IHN0YXJ0VGV4dDtcbiAgdmFyIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS5sZW5ndGg7XG4gIHZhciBlbmQ7XG4gIHZhciBlbmRWYWx1ZSA9IGdldFRleHQoKTtcbiAgdmFyIGVuZExlbmd0aCA9IGVuZFZhbHVlLmxlbmd0aDtcblxuICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBzdGFydExlbmd0aDsgc3RhcnQrKykge1xuICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0XSAhPT0gZW5kVmFsdWVbc3RhcnRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcblxuICBmb3IgKGVuZCA9IDE7IGVuZCA8PSBtaW5FbmQ7IGVuZCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRMZW5ndGggLSBlbmRdICE9PSBlbmRWYWx1ZVtlbmRMZW5ndGggLSBlbmRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgc2xpY2VUYWlsID0gZW5kID4gMSA/IDEgLSBlbmQgOiB1bmRlZmluZWQ7XG4gIGZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCBzbGljZVRhaWwpO1xuICByZXR1cm4gZmFsbGJhY2tUZXh0O1xufVxuZnVuY3Rpb24gZ2V0VGV4dCgpIHtcbiAgaWYgKCd2YWx1ZScgaW4gcm9vdCkge1xuICAgIHJldHVybiByb290LnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QudGV4dENvbnRlbnQ7XG59XG5cbnZhciBFTkRfS0VZQ09ERVMgPSBbOSwgMTMsIDI3LCAzMl07IC8vIFRhYiwgUmV0dXJuLCBFc2MsIFNwYWNlXG5cbnZhciBTVEFSVF9LRVlDT0RFID0gMjI5O1xudmFyIGNhblVzZUNvbXBvc2l0aW9uRXZlbnQgPSBjYW5Vc2VET00gJiYgJ0NvbXBvc2l0aW9uRXZlbnQnIGluIHdpbmRvdztcbnZhciBkb2N1bWVudE1vZGUgPSBudWxsO1xuXG5pZiAoY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB7XG4gIGRvY3VtZW50TW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn0gLy8gV2Via2l0IG9mZmVycyBhIHZlcnkgdXNlZnVsIGB0ZXh0SW5wdXRgIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQgdG9cbi8vIGRpcmVjdGx5IHJlcHJlc2VudCBgYmVmb3JlSW5wdXRgLiBUaGUgSUUgYHRleHRpbnB1dGAgZXZlbnQgaXMgbm90IGFzXG4vLyB1c2VmdWwsIHNvIHdlIGRvbid0IHVzZSBpdC5cblxuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSBjYW5Vc2VET00gJiYgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGU7IC8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG5cbnZhciB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA9IGNhblVzZURPTSAmJiAoIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgfHwgZG9jdW1lbnRNb2RlICYmIGRvY3VtZW50TW9kZSA+IDggJiYgZG9jdW1lbnRNb2RlIDw9IDExKTtcbnZhciBTUEFDRUJBUl9DT0RFID0gMzI7XG52YXIgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09ERSk7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25CZWZvcmVJbnB1dCcsIFsnY29tcG9zaXRpb25lbmQnLCAna2V5cHJlc3MnLCAndGV4dElucHV0JywgJ3Bhc3RlJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25FbmQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25TdGFydCcsIFsnY29tcG9zaXRpb25zdGFydCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uVXBkYXRlJywgWydjb21wb3NpdGlvbnVwZGF0ZScsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbn0gLy8gVHJhY2sgd2hldGhlciB3ZSd2ZSBldmVyIGhhbmRsZWQgYSBrZXlwcmVzcyBvbiB0aGUgc3BhY2Uga2V5LlxuXG5cbnZhciBoYXNTcGFjZUtleXByZXNzID0gZmFsc2U7XG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGEgbmF0aXZlIGtleXByZXNzIGV2ZW50IGlzIGFzc3VtZWQgdG8gYmUgYSBjb21tYW5kLlxuICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIEZpcmVmb3ggZmlyZXMgYGtleXByZXNzYCBldmVudHMgZm9yIGtleSBjb21tYW5kc1xuICogKGN1dCwgY29weSwgc2VsZWN0LWFsbCwgZXRjLikgZXZlbiB0aG91Z2ggbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLlxuICovXG5cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAobmF0aXZlRXZlbnQuY3RybEtleSB8fCBuYXRpdmVFdmVudC5hbHRLZXkgfHwgbmF0aXZlRXZlbnQubWV0YUtleSkgJiYgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVudCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICEobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpO1xufVxuLyoqXG4gKiBUcmFuc2xhdGUgbmF0aXZlIHRvcCBsZXZlbCBldmVudHMgaW50byBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uc3RhcnQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb25lbmQnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uRW5kJztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9udXBkYXRlJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblVwZGF0ZSc7XG4gIH1cbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBkb21FdmVudE5hbWUgPT09ICdrZXlkb3duJyAmJiBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFO1xufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBtb2RlIHRoaW5rIHRoYXQgdGhpcyBldmVudCBpcyB0aGUgZW5kIG9mIGNvbXBvc2l0aW9uP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICAvLyBDb21tYW5kIGtleXMgaW5zZXJ0IG9yIGNsZWFyIElNRSBpbnB1dC5cbiAgICAgIHJldHVybiBFTkRfS0VZQ09ERVMuaW5kZXhPZihuYXRpdmVFdmVudC5rZXlDb2RlKSAhPT0gLTE7XG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICAgIC8vIEV4cGVjdCBJTUUga2V5Q29kZSBvbiBlYWNoIGtleWRvd24uIElmIHdlIGdldCBhbnkgb3RoZXJcbiAgICAgIC8vIGNvZGUgd2UgbXVzdCBoYXZlIGV4aXRlZCBlYXJsaWVyLlxuICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGV0YWlsID0gbmF0aXZlRXZlbnQuZGV0YWlsO1xuXG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENoZWNrIGlmIGEgY29tcG9zaXRpb24gZXZlbnQgd2FzIHRyaWdnZXJlZCBieSBLb3JlYW4gSU1FLlxuICogT3VyIGZhbGxiYWNrIG1vZGUgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggSUUncyBLb3JlYW4gSU1FLFxuICogc28ganVzdCB1c2UgbmF0aXZlIGNvbXBvc2l0aW9uIGV2ZW50cyB3aGVuIEtvcmVhbiBJTUUgaXMgdXNlZC5cbiAqIEFsdGhvdWdoIENvbXBvc2l0aW9uRXZlbnQubG9jYWxlIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQsXG4gKiBpdCBpcyBhdmFpbGFibGUgaW4gSUUsIHdoZXJlIG91ciBmYWxsYmFjayBtb2RlIGlzIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbmF0aXZlRXZlbnQubG9jYWxlID09PSAna28nO1xufSAvLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29tcG9zaXRpb24gc3RhdHVzLCBpZiBhbnkuXG5cblxudmFyIGlzQ29tcG9zaW5nID0gZmFsc2U7XG4vKipcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5cbiAqL1xuXG5mdW5jdGlvbiBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICB2YXIgZXZlbnRUeXBlO1xuICB2YXIgZmFsbGJhY2tEYXRhO1xuXG4gIGlmIChjYW5Vc2VDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgZXZlbnRUeXBlID0gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUoZG9tRXZlbnROYW1lKTtcbiAgfSBlbHNlIGlmICghaXNDb21wb3NpbmcpIHtcbiAgICBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIGV2ZW50VHlwZSA9ICdvbkNvbXBvc2l0aW9uU3RhcnQnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvbkVuZCc7XG4gIH1cblxuICBpZiAoIWV2ZW50VHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHVzZUZhbGxiYWNrQ29tcG9zaXRpb25EYXRhICYmICFpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSkge1xuICAgIC8vIFRoZSBjdXJyZW50IGNvbXBvc2l0aW9uIGlzIHN0b3JlZCBzdGF0aWNhbGx5IGFuZCBtdXN0IG5vdCBiZVxuICAgIC8vIG92ZXJ3cml0dGVuIHdoaWxlIGNvbXBvc2l0aW9uIGNvbnRpbnVlcy5cbiAgICBpZiAoIWlzQ29tcG9zaW5nICYmIGV2ZW50VHlwZSA9PT0gJ29uQ29tcG9zaXRpb25TdGFydCcpIHtcbiAgICAgIGlzQ29tcG9zaW5nID0gaW5pdGlhbGl6ZShuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uRW5kJykge1xuICAgICAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgICAgIGZhbGxiYWNrRGF0YSA9IGdldERhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIGV2ZW50VHlwZSk7XG5cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQoZXZlbnRUeXBlLCBkb21FdmVudE5hbWUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG5cbiAgICBpZiAoZmFsbGJhY2tEYXRhKSB7XG4gICAgICAvLyBJbmplY3QgZGF0YSBnZW5lcmF0ZWQgZnJvbSBmYWxsYmFjayBwYXRoIGludG8gdGhlIHN5bnRoZXRpYyBldmVudC5cbiAgICAgIC8vIFRoaXMgbWF0Y2hlcyB0aGUgcHJvcGVydHkgb2YgbmF0aXZlIENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UuXG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgICBldmVudC5kYXRhID0gZmFsbGJhY2tEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY3VzdG9tRGF0YSA9IGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgICAgIGV2ZW50LmRhdGEgPSBjdXN0b21EYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIElmIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudHMgYXJlIGF2YWlsYWJsZSwgb3VyIGdvYWwgaXMgdG8gbWFrZVxuICAgICAgICogdXNlIG9mIHRoZW0uIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGUgc3BhY2ViYXIga2V5LlxuICAgICAgICogSW4gV2Via2l0LCBwcmV2ZW50aW5nIGRlZmF1bHQgb24gYSBzcGFjZWJhciBgdGV4dElucHV0YCBldmVudFxuICAgICAgICogY2FuY2VscyBjaGFyYWN0ZXIgaW5zZXJ0aW9uLCBidXQgaXQgKmFsc28qIGNhdXNlcyB0aGUgYnJvd3NlclxuICAgICAgICogdG8gZmFsbCBiYWNrIHRvIGl0cyBkZWZhdWx0IHNwYWNlYmFyIGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGVcbiAgICAgICAqIHBhZ2UuXG4gICAgICAgKlxuICAgICAgICogVHJhY2tpbmcgYXQ6XG4gICAgICAgKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzU1MTAzXG4gICAgICAgKlxuICAgICAgICogVG8gYXZvaWQgdGhpcyBpc3N1ZSwgdXNlIHRoZSBrZXlwcmVzcyBldmVudCBhcyBpZiBubyBgdGV4dElucHV0YFxuICAgICAgICogZXZlbnQgaXMgYXZhaWxhYmxlLlxuICAgICAgICovXG4gICAgICB2YXIgd2hpY2ggPSBuYXRpdmVFdmVudC53aGljaDtcblxuICAgICAgaWYgKHdoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gdHJ1ZTtcbiAgICAgIHJldHVybiBTUEFDRUJBUl9DSEFSO1xuXG4gICAgY2FzZSAndGV4dElucHV0JzpcbiAgICAgIC8vIFJlY29yZCB0aGUgY2hhcmFjdGVycyB0byBiZSBhZGRlZCB0byB0aGUgRE9NLlxuICAgICAgdmFyIGNoYXJzID0gbmF0aXZlRXZlbnQuZGF0YTsgLy8gSWYgaXQncyBhIHNwYWNlYmFyIGNoYXJhY3RlciwgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWRcbiAgICAgIC8vIGl0IGF0IHRoZSBrZXlwcmVzcyBsZXZlbCBhbmQgYmFpbCBpbW1lZGlhdGVseS4gQW5kcm9pZCBDaHJvbWVcbiAgICAgIC8vIGRvZXNuJ3QgZ2l2ZSB1cyBrZXljb2Rlcywgc28gd2UgbmVlZCB0byBpZ25vcmUgaXQuXG5cbiAgICAgIGlmIChjaGFycyA9PT0gU1BBQ0VCQVJfQ0hBUiAmJiBoYXNTcGFjZUtleXByZXNzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hhcnM7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gRm9yIG90aGVyIG5hdGl2ZSBldmVudCB0eXBlcywgZG8gbm90aGluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEZvciBicm93c2VycyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZSBgdGV4dElucHV0YCBldmVudCwgZXh0cmFjdCB0aGVcbiAqIGFwcHJvcHJpYXRlIHN0cmluZyB0byB1c2UgZm9yIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGNvbXBvc2luZyAoSU1FKSBhbmQgdXNpbmcgYSBmYWxsYmFjayB0byBkbyBzbyxcbiAgLy8gdHJ5IHRvIGV4dHJhY3QgdGhlIGNvbXBvc2VkIGNoYXJhY3RlcnMgZnJvbSB0aGUgZmFsbGJhY2sgb2JqZWN0LlxuICAvLyBJZiBjb21wb3NpdGlvbiBldmVudCBpcyBhdmFpbGFibGUsIHdlIGV4dHJhY3QgYSBzdHJpbmcgb25seSBhdFxuICAvLyBjb21wb3NpdGlvbmV2ZW50LCBvdGhlcndpc2UgZXh0cmFjdCBpdCBhdCBmYWxsYmFjayBldmVudHMuXG4gIGlmIChpc0NvbXBvc2luZykge1xuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICdjb21wb3NpdGlvbmVuZCcgfHwgIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgJiYgaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICB2YXIgY2hhcnMgPSBnZXREYXRhKCk7XG4gICAgICByZXNldCgpO1xuICAgICAgaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAncGFzdGUnOlxuICAgICAgLy8gSWYgYSBwYXN0ZSBldmVudCBvY2N1cnMgYWZ0ZXIgYSBrZXlwcmVzcywgdGhyb3cgb3V0IHRoZSBpbnB1dFxuICAgICAgLy8gY2hhcnMuIFBhc3RlIGV2ZW50cyBzaG91bGQgbm90IGxlYWQgdG8gQmVmb3JlSW5wdXQgZXZlbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIEFzIG9mIHYyNywgRmlyZWZveCBtYXkgZmlyZSBrZXlwcmVzcyBldmVudHMgZXZlbiB3aGVuIG5vIGNoYXJhY3RlclxuICAgICAgICogd2lsbCBiZSBpbnNlcnRlZC4gQSBmZXcgcG9zc2liaWxpdGllczpcbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgYDBgLiBBcnJvdyBrZXlzLCBFc2Mga2V5LCBldGMuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgbm8gY2hhciBpcyBhdmFpbGFibGUuXG4gICAgICAgKiAgIEV4OiAnQWx0R3IgKyBkYCBpbiBQb2xpc2guIFRoZXJlIGlzIG5vIG1vZGlmaWVkIGNoYXJhY3RlciBmb3JcbiAgICAgICAqICAgdGhpcyBrZXkgY29tYmluYXRpb24gYW5kIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCBpbnRvIHRoZVxuICAgICAgICogICBkb2N1bWVudCwgYnV0IEZGIGZpcmVzIHRoZSBrZXlwcmVzcyBmb3IgY2hhciBjb2RlIGAxMDBgIGFueXdheS5cbiAgICAgICAqICAgTm8gYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IGEgY29tbWFuZCBjb21iaW5hdGlvbiBpc1xuICAgICAgICogICBiZWluZyB1c2VkLiBFeDogYENtZCtDYC4gTm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLCBhbmQgbm9cbiAgICAgICAqICAgYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICovXG4gICAgICBpZiAoIWlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAvLyBJRSBmaXJlcyB0aGUgYGtleXByZXNzYCBldmVudCB3aGVuIGEgdXNlciB0eXBlcyBhbiBlbW9qaSB2aWFcbiAgICAgICAgLy8gVG91Y2gga2V5Ym9hcmQgb2YgV2luZG93cy4gIEluIHN1Y2ggYSBjYXNlLCB0aGUgYGNoYXJgIHByb3BlcnR5XG4gICAgICAgIC8vIGhvbGRzIGFuIGVtb2ppIGNoYXJhY3RlciBsaWtlIGBcXHVEODNEXFx1REUwQWAuICBCZWNhdXNlIGl0cyBsZW5ndGhcbiAgICAgICAgLy8gaXMgMiwgdGhlIHByb3BlcnR5IGB3aGljaGAgZG9lcyBub3QgcmVwcmVzZW50IGFuIGVtb2ppIGNvcnJlY3RseS5cbiAgICAgICAgLy8gSW4gc3VjaCBhIGNhc2UsIHdlIGRpcmVjdGx5IHJldHVybiB0aGUgYGNoYXJgIHByb3BlcnR5IGluc3RlYWQgb2ZcbiAgICAgICAgLy8gdXNpbmcgYHdoaWNoYC5cbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmNoYXIgJiYgbmF0aXZlRXZlbnQuY2hhci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmNoYXI7XG4gICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRXZlbnQud2hpY2gpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudC53aGljaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgIWlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpID8gbnVsbCA6IG5hdGl2ZUV2ZW50LmRhdGE7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qKlxuICogRXh0cmFjdCBhIFN5bnRoZXRpY0lucHV0RXZlbnQgZm9yIGBiZWZvcmVJbnB1dGAsIGJhc2VkIG9uIGVpdGhlciBuYXRpdmVcbiAqIGB0ZXh0SW5wdXRgIG9yIGZhbGxiYWNrIGJlaGF2aW9yLlxuICpcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBjaGFycztcblxuICBpZiAoY2FuVXNlVGV4dElucHV0RXZlbnQpIHtcbiAgICBjaGFycyA9IGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gZWxzZSB7XG4gICAgY2hhcnMgPSBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gLy8gSWYgbm8gY2hhcmFjdGVycyBhcmUgYmVpbmcgaW5zZXJ0ZWQsIG5vIEJlZm9yZUlucHV0IGV2ZW50IHNob3VsZFxuICAvLyBiZSBmaXJlZC5cblxuXG4gIGlmICghY2hhcnMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgJ29uQmVmb3JlSW5wdXQnKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljSW5wdXRFdmVudCgnb25CZWZvcmVJbnB1dCcsICdiZWZvcmVpbnB1dCcsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV1cblxuICAgIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgfVxufVxuLyoqXG4gKiBDcmVhdGUgYW4gYG9uQmVmb3JlSW5wdXRgIGV2ZW50IHRvIG1hdGNoXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNS8jZXZlbnRzLWlucHV0ZXZlbnRzLlxuICpcbiAqIFRoaXMgZXZlbnQgcGx1Z2luIGlzIGJhc2VkIG9uIHRoZSBuYXRpdmUgYHRleHRJbnB1dGAgZXZlbnRcbiAqIGF2YWlsYWJsZSBpbiBDaHJvbWUsIFNhZmFyaSwgT3BlcmEsIGFuZCBJRS4gVGhpcyBldmVudCBmaXJlcyBhZnRlclxuICogYG9uS2V5UHJlc3NgIGFuZCBgb25Db21wb3NpdGlvbkVuZGAsIGJ1dCBiZWZvcmUgYG9uSW5wdXRgLlxuICpcbiAqIGBiZWZvcmVJbnB1dGAgaXMgc3BlYydkIGJ1dCBub3QgaW1wbGVtZW50ZWQgaW4gYW55IGJyb3dzZXJzLCBhbmRcbiAqIHRoZSBgaW5wdXRgIGV2ZW50IGRvZXMgbm90IHByb3ZpZGUgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGhhc1xuICogYWN0dWFsbHkgYmVlbiBhZGRlZCwgY29udHJhcnkgdG8gdGhlIHNwZWMuIFRodXMsIGB0ZXh0SW5wdXRgIGlzIHRoZSBiZXN0XG4gKiBhdmFpbGFibGUgZXZlbnQgdG8gaWRlbnRpZnkgdGhlIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gaW5zZXJ0ZWRcbiAqIGludG8gdGhlIHRhcmdldCBub2RlLlxuICpcbiAqIFRoaXMgcGx1Z2luIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIGBjb21wb3NpdGlvbmAgZXZlbnRzLCB0aHVzXG4gKiBhbGxvd2luZyB1cyB0byBzaGFyZSBjb21wb3NpdGlvbiBmYWxsYmFjayBjb2RlIGZvciBib3RoIGBiZWZvcmVJbnB1dGAgYW5kXG4gKiBgY29tcG9zaXRpb25gIGV2ZW50IHR5cGVzLlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaW5wdXQtZWxlbWVudC5odG1sI2lucHV0LXR5cGUtYXR0ci1zdW1tYXJ5XG4gKi9cbnZhciBzdXBwb3J0ZWRJbnB1dFR5cGVzID0ge1xuICBjb2xvcjogdHJ1ZSxcbiAgZGF0ZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgcmFuZ2U6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdGVsOiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICB0aW1lOiB0cnVlLFxuICB1cmw6IHRydWUsXG4gIHdlZWs6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGlzVGV4dElucHV0RWxlbWVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgcmV0dXJuICEhc3VwcG9ydGVkSW5wdXRUeXBlc1tlbGVtLnR5cGVdO1xuICB9XG5cbiAgaWYgKG5vZGVOYW1lID09PSAndGV4dGFyZWEnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuXG4gKlxuICogTk9URTogVGhpcyB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSBmb3Igbm9uLWdlbmVyaWMgZXZlbnRzIHN1Y2ggYXMgYGNoYW5nZWAsXG4gKiBgcmVzZXRgLCBgbG9hZGAsIGBlcnJvcmAsIGFuZCBgc2VsZWN0YC5cbiAqXG4gKiBCb3Jyb3dzIGZyb20gTW9kZXJuaXpyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVTdWZmaXggRXZlbnQgbmFtZSwgZS5nLiBcImNsaWNrXCIuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCBpcyBzdXBwb3J0ZWQuXG4gKiBAaW50ZXJuYWxcbiAqIEBsaWNlbnNlIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVFxuICovXG5cbmZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1lU3VmZml4KSB7XG4gIGlmICghY2FuVXNlRE9NKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudE5hbWVTdWZmaXg7XG4gIHZhciBpc1N1cHBvcnRlZCA9IChldmVudE5hbWUgaW4gZG9jdW1lbnQpO1xuXG4gIGlmICghaXNTdXBwb3J0ZWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICBpc1N1cHBvcnRlZCA9IHR5cGVvZiBlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICByZXR1cm4gaXNTdXBwb3J0ZWQ7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDIoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25DaGFuZ2UnLCBbJ2NoYW5nZScsICdjbGljaycsICdmb2N1c2luJywgJ2ZvY3Vzb3V0JywgJ2lucHV0JywgJ2tleWRvd24nLCAna2V5dXAnLCAnc2VsZWN0aW9uY2hhbmdlJ10pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgaW5zdCwgbmF0aXZlRXZlbnQsIHRhcmdldCkge1xuICAvLyBGbGFnIHRoaXMgZXZlbnQgbG9vcCBhcyBuZWVkaW5nIHN0YXRlIHJlc3RvcmUuXG4gIGVucXVldWVTdGF0ZVJlc3RvcmUodGFyZ2V0KTtcbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhpbnN0LCAnb25DaGFuZ2UnKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoJ29uQ2hhbmdlJywgJ2NoYW5nZScsIG51bGwsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICB9XG59XG4vKipcbiAqIEZvciBJRSBzaGltc1xuICovXG5cblxudmFyIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2hhbmdlYCBldmVudFxuICovXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNoYW5nZUV2ZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ3NlbGVjdCcgfHwgbm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSAnZmlsZSc7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRpc3BhdGNoUXVldWUgPSBbXTtcbiAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGFjdGl2ZUVsZW1lbnRJbnN0JDEsIG5hdGl2ZUV2ZW50LCBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkpOyAvLyBJZiBjaGFuZ2UgYW5kIHByb3BlcnR5Y2hhbmdlIGJ1YmJsZWQsIHdlJ2QganVzdCBiaW5kIHRvIGl0IGxpa2UgYWxsIHRoZVxuICAvLyBvdGhlciBldmVudHMgYW5kIGhhdmUgaXQgZ28gdGhyb3VnaCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuIFNpbmNlIGl0XG4gIC8vIGRvZXNuJ3QsIHdlIG1hbnVhbGx5IGxpc3RlbiBmb3IgdGhlIGV2ZW50cyBhbmQgc28gd2UgaGF2ZSB0byBlbnF1ZXVlIGFuZFxuICAvLyBwcm9jZXNzIHRoZSBhYnN0cmFjdCBldmVudCBtYW51YWxseS5cbiAgLy9cbiAgLy8gQmF0Y2hpbmcgaXMgbmVjZXNzYXJ5IGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIGV2ZW50IGhhbmRsZXJzIHJ1blxuICAvLyBiZWZvcmUgdGhlIG5leHQgcmVyZW5kZXIgKGluY2x1ZGluZyBldmVudCBoYW5kbGVycyBhdHRhY2hlZCB0byBhbmNlc3RvclxuICAvLyBlbGVtZW50cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG9uIHRoZSBpbnB1dCkuIFdpdGhvdXQgdGhpcywgY29udHJvbGxlZFxuICAvLyBjb21wb25lbnRzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gY29uanVuY3Rpb24gd2l0aCBldmVudCBidWJibGluZyBiZWNhdXNlXG4gIC8vIHRoZSBjb21wb25lbnQgaXMgcmVyZW5kZXJlZCBhbmQgdGhlIHZhbHVlIHJldmVydGVkIGJlZm9yZSBhbGwgdGhlIGV2ZW50XG4gIC8vIGhhbmRsZXJzIGNhbiBydW4uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcwOC5cblxuICBiYXRjaGVkVXBkYXRlcyhydW5FdmVudEluQmF0Y2gsIGRpc3BhdGNoUXVldWUpO1xufVxuXG5mdW5jdGlvbiBydW5FdmVudEluQmF0Y2goZGlzcGF0Y2hRdWV1ZSkge1xuICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCAwKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpO1xuXG4gIGlmICh1cGRhdGVWYWx1ZUlmQ2hhbmdlZCh0YXJnZXROb2RlKSkge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGlucHV0YCBldmVudFxuICovXG5cblxudmFyIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGZhbHNlO1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIC8vIElFOSBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgaW5wdXQgZXZlbnQgYnV0IGZhaWxzIHRvIHRyaWdnZXIgaXQgd2hlblxuICAvLyBkZWxldGluZyB0ZXh0LCBzbyB3ZSBpZ25vcmUgaXRzIGlucHV0IGV2ZW50cy5cbiAgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gaXNFdmVudFN1cHBvcnRlZCgnaW5wdXQnKSAmJiAoIWRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA5KTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFN0YXJ0cyB0cmFja2luZyBwcm9wZXJ0eWNoYW5nZSBldmVudHMgb24gdGhlIHBhc3NlZC1pbiBlbGVtZW50XG4gKiBhbmQgb3ZlcnJpZGUgdGhlIHZhbHVlIHByb3BlcnR5IHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHVzZXIgZXZlbnRzIGZyb21cbiAqIHZhbHVlIGNoYW5nZXMgaW4gSlMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGFjdGl2ZUVsZW1lbnQkMSA9IHRhcmdldDtcbiAgYWN0aXZlRWxlbWVudEluc3QkMSA9IHRhcmdldEluc3Q7XG4gIGFjdGl2ZUVsZW1lbnQkMS5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50bHktdHJhY2tlZCBlbGVtZW50LFxuICogaWYgYW55IGV4aXN0cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQkMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFjdGl2ZUVsZW1lbnQkMS5kZXRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbiAgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBIYW5kbGVzIGEgcHJvcGVydHljaGFuZ2UgZXZlbnQsIHNlbmRpbmcgYSBgY2hhbmdlYCBldmVudCBpZlxuICogdGhlIHZhbHVlIG9mIHRoZSBhY3RpdmUgZWxlbWVudCBoYXMgY2hhbmdlZC5cbiAqL1xuLy8gJEZsb3dGaXhNZVttaXNzaW5nLWxvY2FsLWFubm90XVxuXG5cbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5wcm9wZXJ0eU5hbWUgIT09ICd2YWx1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0JDEpKSB7XG4gICAgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c2luJykge1xuICAgIC8vIEluIElFOSwgcHJvcGVydHljaGFuZ2UgZmlyZXMgZm9yIG1vc3QgaW5wdXQgZXZlbnRzIGJ1dCBpcyBidWdneSBhbmRcbiAgICAvLyBkb2Vzbid0IGZpcmUgd2hlbiB0ZXh0IGlzIGRlbGV0ZWQsIGJ1dCBjb252ZW5pZW50bHksIHNlbGVjdGlvbmNoYW5nZVxuICAgIC8vIGFwcGVhcnMgdG8gZmlyZSBpbiBhbGwgb2YgdGhlIHJlbWFpbmluZyBjYXNlcyBzbyB3ZSBjYXRjaCB0aG9zZSBhbmRcbiAgICAvLyBmb3J3YXJkIHRoZSBldmVudCBpZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWRcbiAgICAvLyBJbiBlaXRoZXIgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIHRoZSBldmVudCBoYW5kbGVyIGlmIHRoZSB2YWx1ZVxuICAgIC8vIGlzIGNoYW5nZWQgZnJvbSBKUyBzbyB3ZSByZWRlZmluZSBhIHNldHRlciBmb3IgYC52YWx1ZWAgdGhhdCB1cGRhdGVzXG4gICAgLy8gb3VyIGFjdGl2ZUVsZW1lbnRWYWx1ZSB2YXJpYWJsZSwgYWxsb3dpbmcgdXMgdG8gaWdub3JlIHRob3NlIGNoYW5nZXNcbiAgICAvL1xuICAgIC8vIHN0b3BXYXRjaGluZygpIHNob3VsZCBiZSBhIG5vb3AgaGVyZSBidXQgd2UgY2FsbCBpdCBqdXN0IGluIGNhc2Ugd2VcbiAgICAvLyBtaXNzZWQgYSBibHVyIGV2ZW50IHNvbWVob3cuXG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgICBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KTtcbiAgfSBlbHNlIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICB9XG59IC8vIEZvciBJRTggYW5kIElFOS5cblxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnc2VsZWN0aW9uY2hhbmdlJyB8fCBkb21FdmVudE5hbWUgPT09ICdrZXl1cCcgfHwgZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicpIHtcbiAgICAvLyBPbiB0aGUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50LCB0aGUgdGFyZ2V0IGlzIGp1c3QgZG9jdW1lbnQgd2hpY2ggaXNuJ3RcbiAgICAvLyBoZWxwZnVsIGZvciB1cyBzbyBqdXN0IGNoZWNrIGFjdGl2ZUVsZW1lbnQgaW5zdGVhZC5cbiAgICAvL1xuICAgIC8vIDk5JSBvZiB0aGUgdGltZSwga2V5ZG93biBhbmQga2V5dXAgYXJlbid0IG5lY2Vzc2FyeS4gSUU4IGZhaWxzIHRvIGZpcmVcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBvbiB0aGUgZmlyc3QgaW5wdXQgZXZlbnQgYWZ0ZXIgc2V0dGluZyBgdmFsdWVgIGZyb20gYVxuICAgIC8vIHNjcmlwdCBhbmQgZmlyZXMgb25seSBrZXlkb3duLCBrZXlwcmVzcywga2V5dXAuIENhdGNoaW5nIGtleXVwIHVzdWFsbHlcbiAgICAvLyBnZXRzIGl0IGFuZCBjYXRjaGluZyBrZXlkb3duIGxldHMgdXMgZmlyZSBhbiBldmVudCBmb3IgdGhlIGZpcnN0XG4gICAgLy8ga2V5c3Ryb2tlIGlmIHVzZXIgZG9lcyBhIGtleSByZXBlYXQgKGl0J2xsIGJlIGEgbGl0dGxlIGRlbGF5ZWQ6IHJpZ2h0XG4gICAgLy8gYmVmb3JlIHRoZSBzZWNvbmQga2V5c3Ryb2tlKS4gT3RoZXIgaW5wdXQgbWV0aG9kcyAoZS5nLiwgcGFzdGUpIHNlZW0gdG9cbiAgICAvLyBmaXJlIHNlbGVjdGlvbmNoYW5nZSBub3JtYWxseS5cbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0JDEpO1xuICB9XG59XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2xpY2tgIGV2ZW50XG4gKi9cblxuXG5mdW5jdGlvbiBzaG91bGRVc2VDbGlja0V2ZW50KGVsZW0pIHtcbiAgLy8gVXNlIHRoZSBgY2xpY2tgIGV2ZW50IHRvIGRldGVjdCBjaGFuZ2VzIHRvIGNoZWNrYm94IGFuZCByYWRpbyBpbnB1dHMuXG4gIC8vIFRoaXMgYXBwcm9hY2ggd29ya3MgYWNyb3NzIGFsbCBicm93c2Vycywgd2hlcmVhcyBgY2hhbmdlYCBkb2VzIG5vdCBmaXJlXG4gIC8vIHVudGlsIGBibHVyYCBpbiBJRTguXG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmIChlbGVtLnR5cGUgPT09ICdjaGVja2JveCcgfHwgZWxlbS50eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdjbGljaycpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdpbnB1dCcgfHwgZG9tRXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1cihub2RlLCBwcm9wcykge1xuICBpZiAobm9kZS50eXBlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNDb250cm9sbGVkID0gcHJvcHMudmFsdWUgIT0gbnVsbDtcblxuICAgIGlmIChpc0NvbnRyb2xsZWQpIHtcbiAgICAgIC8vIElmIGNvbnRyb2xsZWQsIGFzc2lnbiB0aGUgdmFsdWUgYXR0cmlidXRlIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9uIGJsdXJcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCAnbnVtYmVyJywgbm9kZS52YWx1ZSk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uQ2hhbmdlYCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgY2hhbmdlIGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuIFRoaXMgZXZlbnQgZmlyZXMgYXQgYSB0aW1lIHdoZW4gaXQncyBwb3NzaWJsZSB0b1xuICogY2hhbmdlIHRoZSBlbGVtZW50J3MgdmFsdWUgd2l0aG91dCBzZWVpbmcgYSBmbGlja2VyLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIHNlbGVjdFxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcbiAgdmFyIGdldFRhcmdldEluc3RGdW5jLCBoYW5kbGVFdmVudEZ1bmM7XG5cbiAgaWYgKHNob3VsZFVzZUNoYW5nZUV2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gIH0gZWxzZSBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpKSB7XG4gICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCkge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgfVxuICB9IGVsc2UgaWYgKHNob3VsZFVzZUNsaWNrRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50O1xuICB9IGVsc2UgO1xuXG4gIGlmIChnZXRUYXJnZXRJbnN0RnVuYykge1xuICAgIHZhciBpbnN0ID0gZ2V0VGFyZ2V0SW5zdEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KTtcblxuICAgIGlmIChpbnN0KSB7XG4gICAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgaW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgaGFuZGxlRXZlbnRGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0Tm9kZSwgdGFyZ2V0SW5zdCk7XG4gIH0gLy8gV2hlbiBibHVycmluZywgc2V0IHRoZSB2YWx1ZSBhdHRyaWJ1dGUgZm9yIG51bWJlciBpbnB1dHNcblxuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcgJiYgdGFyZ2V0SW5zdCkge1xuICAgIC8vIFRoZXNlIHByb3BzIGFyZW4ndCBuZWNlc3NhcmlseSB0aGUgbW9zdCBjdXJyZW50IGJ1dCB3ZSB3YXJuIGZvciBjaGFuZ2luZ1xuICAgIC8vIGJldHdlZW4gY29udHJvbGxlZCBhbmQgdW5jb250cm9sbGVkLCBzbyBpdCBkb2Vzbid0IG1hdHRlciBhbmQgdGhlIHByZXZpb3VzXG4gICAgLy8gY29kZSB3YXMgYWxzbyBicm9rZW4gZm9yIGNoYW5nZXMuXG4gICAgdmFyIHByb3BzID0gdGFyZ2V0SW5zdC5tZW1vaXplZFByb3BzO1xuICAgIGhhbmRsZUNvbnRyb2xsZWRJbnB1dEJsdXIodGFyZ2V0Tm9kZSwgcHJvcHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDEoKSB7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VFbnRlcicsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvbk1vdXNlTGVhdmUnLCBbJ21vdXNlb3V0JywgJ21vdXNlb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyRW50ZXInLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uUG9pbnRlckxlYXZlJywgWydwb2ludGVyb3V0JywgJ3BvaW50ZXJvdmVyJ10pO1xufVxuLyoqXG4gKiBGb3IgYWxtb3N0IGV2ZXJ5IGludGVyYWN0aW9uIHdlIGNhcmUgYWJvdXQsIHRoZXJlIHdpbGwgYmUgYm90aCBhIHRvcC1sZXZlbFxuICogYG1vdXNlb3ZlcmAgYW5kIGBtb3VzZW91dGAgZXZlbnQgdGhhdCBvY2N1cnMuIE9ubHkgdXNlIGBtb3VzZW91dGAgc28gdGhhdFxuICogd2UgZG8gbm90IGV4dHJhY3QgZHVwbGljYXRlIGV2ZW50cy4gSG93ZXZlciwgbW92aW5nIHRoZSBtb3VzZSBpbnRvIHRoZVxuICogYnJvd3NlciBmcm9tIG91dHNpZGUgd2lsbCBub3QgZmlyZSBhIGBtb3VzZW91dGAgZXZlbnQuIEluIHRoaXMgY2FzZSwgd2UgdXNlXG4gKiB0aGUgYG1vdXNlb3ZlcmAgdG9wLWxldmVsIGV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGlzT3ZlckV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdmVyJyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3Zlcic7XG4gIHZhciBpc091dEV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdXQnO1xuXG4gIGlmIChpc092ZXJFdmVudCAmJiAhaXNSZXBsYXlpbmdFdmVudChuYXRpdmVFdmVudCkpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGFuIG92ZXIgZXZlbnQgd2l0aCBhIHRhcmdldCwgd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IGRpc3BhdGNoZWRcbiAgICAvLyB0aGUgZXZlbnQgaW4gdGhlIG91dCBldmVudCBvZiB0aGUgb3RoZXIgdGFyZ2V0LiBJZiB0aGlzIGlzIHJlcGxheWVkLFxuICAgIC8vIHRoZW4gaXQncyBiZWNhdXNlIHdlIGNvdWxkbid0IGRpc3BhdGNoIGFnYWluc3QgdGhpcyB0YXJnZXQgcHJldmlvdXNseVxuICAgIC8vIHNvIHdlIGhhdmUgdG8gZG8gaXQgbm93IGluc3RlYWQuXG4gICAgdmFyIHJlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LmZyb21FbGVtZW50O1xuXG4gICAgaWYgKHJlbGF0ZWQpIHtcbiAgICAgIC8vIElmIHRoZSByZWxhdGVkIG5vZGUgaXMgbWFuYWdlZCBieSBSZWFjdCwgd2UgY2FuIGFzc3VtZSB0aGF0IHdlIGhhdmVcbiAgICAgIC8vIGFscmVhZHkgZGlzcGF0Y2hlZCB0aGUgY29ycmVzcG9uZGluZyBldmVudHMgZHVyaW5nIGl0cyBtb3VzZW91dC5cbiAgICAgIGlmIChnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyZWxhdGVkKSB8fCBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChyZWxhdGVkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc091dEV2ZW50ICYmICFpc092ZXJFdmVudCkge1xuICAgIC8vIE11c3Qgbm90IGJlIGEgbW91c2Ugb3IgcG9pbnRlciBpbiBvciBvdXQgLSBpZ25vcmluZy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgd2luOyAvLyBUT0RPOiB3aHkgaXMgdGhpcyBudWxsYWJsZSBpbiB0aGUgdHlwZXMgYnV0IHdlIHJlYWQgZnJvbSBpdD9cblxuICBpZiAobmF0aXZlRXZlbnRUYXJnZXQud2luZG93ID09PSBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIC8vIGBuYXRpdmVFdmVudFRhcmdldGAgaXMgcHJvYmFibHkgYSB3aW5kb3cgb2JqZWN0LlxuICAgIHdpbiA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGBvd25lckRvY3VtZW50YCBpcyBzb21ldGltZXMgdW5kZWZpbmVkIGluIElFOC5cbiAgICB2YXIgZG9jID0gbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcblxuICAgIGlmIChkb2MpIHtcbiAgICAgIHdpbiA9IGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW4gPSB3aW5kb3c7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZyb207XG4gIHZhciB0bztcblxuICBpZiAoaXNPdXRFdmVudCkge1xuICAgIHZhciBfcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50O1xuXG4gICAgZnJvbSA9IHRhcmdldEluc3Q7XG4gICAgdG8gPSBfcmVsYXRlZCA/IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKF9yZWxhdGVkKSA6IG51bGw7XG5cbiAgICBpZiAodG8gIT09IG51bGwpIHtcbiAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodG8pO1xuICAgICAgdmFyIHRhZyA9IHRvLnRhZztcblxuICAgICAgaWYgKHRvICE9PSBuZWFyZXN0TW91bnRlZCB8fCB0YWcgIT09IEhvc3RDb21wb25lbnQgJiYgdGFnICE9PSBIb3N0U2luZ2xldG9uICYmIHRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgICAgdG8gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBNb3ZpbmcgdG8gYSBub2RlIGZyb20gb3V0c2lkZSB0aGUgd2luZG93LlxuICAgIGZyb20gPSBudWxsO1xuICAgIHRvID0gdGFyZ2V0SW5zdDtcbiAgfVxuXG4gIGlmIChmcm9tID09PSB0bykge1xuICAgIC8vIE5vdGhpbmcgcGVydGFpbnMgdG8gb3VyIG1hbmFnZWQgY29tcG9uZW50cy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgdmFyIGxlYXZlRXZlbnRUeXBlID0gJ29uTW91c2VMZWF2ZSc7XG4gIHZhciBlbnRlckV2ZW50VHlwZSA9ICdvbk1vdXNlRW50ZXInO1xuICB2YXIgZXZlbnRUeXBlUHJlZml4ID0gJ21vdXNlJztcblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm91dCcgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm92ZXInKSB7XG4gICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgIGxlYXZlRXZlbnRUeXBlID0gJ29uUG9pbnRlckxlYXZlJztcbiAgICBlbnRlckV2ZW50VHlwZSA9ICdvblBvaW50ZXJFbnRlcic7XG4gICAgZXZlbnRUeXBlUHJlZml4ID0gJ3BvaW50ZXInO1xuICB9XG5cbiAgdmFyIGZyb21Ob2RlID0gZnJvbSA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZShmcm9tKTtcbiAgdmFyIHRvTm9kZSA9IHRvID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlKHRvKTtcbiAgdmFyIGxlYXZlID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihsZWF2ZUV2ZW50VHlwZSwgZXZlbnRUeXBlUHJlZml4ICsgJ2xlYXZlJywgZnJvbSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgbGVhdmUudGFyZ2V0ID0gZnJvbU5vZGU7XG4gIGxlYXZlLnJlbGF0ZWRUYXJnZXQgPSB0b05vZGU7XG4gIHZhciBlbnRlciA9IG51bGw7IC8vIFdlIHNob3VsZCBvbmx5IHByb2Nlc3MgdGhpcyBuYXRpdmVFdmVudCBpZiB3ZSBhcmUgcHJvY2Vzc2luZ1xuICAvLyB0aGUgZmlyc3QgYW5jZXN0b3IuIE5leHQgdGltZSwgd2Ugd2lsbCBpZ25vcmUgdGhlIGV2ZW50LlxuXG4gIHZhciBuYXRpdmVUYXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChuYXRpdmVUYXJnZXRJbnN0ID09PSB0YXJnZXRJbnN0KSB7XG4gICAgdmFyIGVudGVyRXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKGVudGVyRXZlbnRUeXBlLCBldmVudFR5cGVQcmVmaXggKyAnZW50ZXInLCB0bywgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBlbnRlckV2ZW50LnRhcmdldCA9IHRvTm9kZTtcbiAgICBlbnRlckV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBmcm9tTm9kZTtcbiAgICBlbnRlciA9IGVudGVyRXZlbnQ7XG4gIH1cblxuICBhY2N1bXVsYXRlRW50ZXJMZWF2ZVR3b1BoYXNlTGlzdGVuZXJzKGRpc3BhdGNoUXVldWUsIGxlYXZlLCBlbnRlciwgZnJvbSwgdG8pO1xufVxuXG4vKipcbiAqIEdpdmVuIGFueSBub2RlIHJldHVybiB0aGUgZmlyc3QgbGVhZiBub2RlIHdpdGhvdXQgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cbmZ1bmN0aW9uIGdldExlYWZOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUgJiYgbm9kZS5maXJzdENoaWxkKSB7XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBHZXQgdGhlIG5leHQgc2libGluZyB3aXRoaW4gYSBjb250YWluZXIuIFRoaXMgd2lsbCB3YWxrIHVwIHRoZVxuICogRE9NIGlmIGEgbm9kZSdzIHNpYmxpbmdzIGhhdmUgYmVlbiBleGhhdXN0ZWQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFNpYmxpbmdOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5uZXh0U2libGluZykge1xuICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxufVxuLyoqXG4gKiBHZXQgb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG5vZGVzIHdoaWNoIGNvbnRhaW4gY2hhcmFjdGVycyBhdCBvZmZzZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSByb290XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgdmFyIG5vZGVTdGFydCA9IDA7XG4gIHZhciBub2RlRW5kID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIG5vZGVFbmQgPSBub2RlU3RhcnQgKyBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVTdGFydCA8PSBvZmZzZXQgJiYgbm9kZUVuZCA+PSBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIG9mZnNldDogb2Zmc2V0IC0gbm9kZVN0YXJ0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG5vZGVTdGFydCA9IG5vZGVFbmQ7XG4gICAgfVxuXG4gICAgbm9kZSA9IGdldExlYWZOb2RlKGdldFNpYmxpbmdOb2RlKG5vZGUpKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb3V0ZXJOb2RlXG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGdldE9mZnNldHMob3V0ZXJOb2RlKSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gb3V0ZXJOb2RlLm93bmVyRG9jdW1lbnQ7XG4gIHZhciB3aW4gPSBvd25lckRvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbiAmJiB3aW4uZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQgPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0ID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0OyAvLyBJbiBGaXJlZm94LCBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgY2FuIGJlIFwiYW5vbnltb3VzIGRpdnNcIiwgZS5nLiB0aGVcbiAgLy8gdXAvZG93biBidXR0b25zIG9uIGFuIDxpbnB1dCB0eXBlPVwibnVtYmVyXCI+LiBBbm9ueW1vdXMgZGl2cyBkbyBub3Qgc2VlbSB0b1xuICAvLyBleHBvc2UgcHJvcGVydGllcywgdHJpZ2dlcmluZyBhIFwiUGVybWlzc2lvbiBkZW5pZWQgZXJyb3JcIiBpZiBhbnkgb2YgaXRzXG4gIC8vIHByb3BlcnRpZXMgYXJlIGFjY2Vzc2VkLiBUaGUgb25seSBzZWVtaW5nbHkgcG9zc2libGUgd2F5IHRvIGF2b2lkIGVycm9yaW5nXG4gIC8vIGlzIHRvIGFjY2VzcyBhIHByb3BlcnR5IHRoYXQgdHlwaWNhbGx5IHdvcmtzIGZvciBub24tYW5vbnltb3VzIGRpdnMgYW5kXG4gIC8vIGNhdGNoIGFueSBlcnJvciB0aGF0IG1heSBvdGhlcndpc2UgYXJpc2UuIFNlZVxuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0MjdcblxuICB0cnkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIGZ0LWZsb3cvbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgYW5jaG9yTm9kZS5ub2RlVHlwZTtcbiAgICBmb2N1c05vZGUubm9kZVR5cGU7XG4gICAgLyogZXNsaW50LWVuYWJsZSBmdC1mbG93L25vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHtzdGFydCwgZW5kfSB3aGVyZSBgc3RhcnRgIGlzIHRoZSBjaGFyYWN0ZXIvY29kZXBvaW50IGluZGV4IG9mXG4gKiAoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KSB3aXRoaW4gdGhlIHRleHRDb250ZW50IG9mIGBvdXRlck5vZGVgLCBhbmRcbiAqIGBlbmRgIGlzIHRoZSBpbmRleCBvZiAoZm9jdXNOb2RlLCBmb2N1c09mZnNldCkuXG4gKlxuICogUmV0dXJucyBudWxsIGlmIHlvdSBwYXNzIGluIGdhcmJhZ2UgaW5wdXQgYnV0IHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNyYXNoLlxuICpcbiAqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RpbmcuXG4gKi9cblxuZnVuY3Rpb24gZ2V0TW9kZXJuT2Zmc2V0c0Zyb21Qb2ludHMob3V0ZXJOb2RlLCBhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHtcbiAgdmFyIGxlbmd0aCA9IDA7XG4gIHZhciBzdGFydCA9IC0xO1xuICB2YXIgZW5kID0gLTE7XG4gIHZhciBpbmRleFdpdGhpbkFuY2hvciA9IDA7XG4gIHZhciBpbmRleFdpdGhpbkZvY3VzID0gMDtcbiAgdmFyIG5vZGUgPSBvdXRlck5vZGU7XG4gIHZhciBwYXJlbnROb2RlID0gbnVsbDtcblxuICBvdXRlcjogd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgbmV4dCA9IG51bGw7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IGFuY2hvck5vZGUgJiYgKGFuY2hvck9mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoICsgYW5jaG9yT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZSA9PT0gZm9jdXNOb2RlICYmIChmb2N1c09mZnNldCA9PT0gMCB8fCBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpKSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aCArIGZvY3VzT2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICAgIGxlbmd0aCArPSBub2RlLm5vZGVWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUuZmlyc3RDaGlsZCkgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgZmlyc3QgY2hpbGQgYG5leHRgLlxuXG5cbiAgICAgIHBhcmVudE5vZGUgPSBub2RlO1xuICAgICAgbm9kZSA9IG5leHQ7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBvdXRlck5vZGUpIHtcbiAgICAgICAgLy8gSWYgYG91dGVyTm9kZWAgaGFzIGNoaWxkcmVuLCB0aGlzIGlzIGFsd2F5cyB0aGUgc2Vjb25kIHRpbWUgdmlzaXRpbmdcbiAgICAgICAgLy8gaXQuIElmIGl0IGhhcyBubyBjaGlsZHJlbiwgdGhpcyBpcyBzdGlsbCB0aGUgZmlyc3QgbG9vcCwgYW5kIHRoZSBvbmx5XG4gICAgICAgIC8vIHZhbGlkIHNlbGVjdGlvbiBpcyBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgYm90aCBlcXVhbCB0byB0aGlzIG5vZGVcbiAgICAgICAgLy8gYW5kIGJvdGggb2Zmc2V0cyAwLCBpbiB3aGljaCBjYXNlIHdlIHdpbGwgaGF2ZSBoYW5kbGVkIGFib3ZlLlxuICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGFuY2hvck5vZGUgJiYgKytpbmRleFdpdGhpbkFuY2hvciA9PT0gYW5jaG9yT2Zmc2V0KSB7XG4gICAgICAgIHN0YXJ0ID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gZm9jdXNOb2RlICYmICsraW5kZXhXaXRoaW5Gb2N1cyA9PT0gZm9jdXNPZmZzZXQpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLm5leHRTaWJsaW5nKSAhPT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBuZXh0IHNpYmxpbmcgYG5leHRgLlxuXG5cbiAgICBub2RlID0gbmV4dDtcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKFdvdWxkIGhhcHBlbiBpZiB0aGUgYW5jaG9yL2ZvY3VzIG5vZGVzIGFyZW4ndFxuICAgIC8vIGFjdHVhbGx5IGluc2lkZSB0aGUgcGFzc2VkLWluIG5vZGUuKVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQsXG4gICAgZW5kOiBlbmRcbiAgfTtcbn1cbi8qKlxuICogSW4gbW9kZXJuIG5vbi1JRSBicm93c2Vycywgd2UgY2FuIHN1cHBvcnQgYm90aCBmb3J3YXJkIGFuZCBiYWNrd2FyZFxuICogc2VsZWN0aW9ucy5cbiAqXG4gKiBOb3RlOiBJRTEwKyBzdXBwb3J0cyB0aGUgU2VsZWN0aW9uIG9iamVjdCwgYnV0IGl0IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoZSBgZXh0ZW5kYCBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiBpbiBtb2Rlcm4gSUUsIGl0J3Mgbm90IHBvc3NpYmxlXG4gKiB0byBwcm9ncmFtbWF0aWNhbGx5IGNyZWF0ZSBhIGJhY2t3YXJkIHNlbGVjdGlvbi4gVGh1cywgZm9yIGFsbCBJRVxuICogdmVyc2lvbnMsIHdlIHVzZSB0aGUgb2xkIElFIEFQSSB0byBjcmVhdGUgb3VyIHNlbGVjdGlvbnMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gb2Zmc2V0c1xuICovXG5cbmZ1bmN0aW9uIHNldE9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICB2YXIgZG9jID0gbm9kZS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICB2YXIgd2luID0gZG9jICYmIGRvYy5kZWZhdWx0VmlldyB8fCB3aW5kb3c7IC8vIEVkZ2UgZmFpbHMgd2l0aCBcIk9iamVjdCBleHBlY3RlZFwiIGluIHNvbWUgc2NlbmFyaW9zLlxuICAvLyAoRm9yIGluc3RhbmNlOiBUaW55TUNFIGVkaXRvciB1c2VkIGluIGEgbGlzdCBjb21wb25lbnQgdGhhdCBzdXBwb3J0cyBwYXN0aW5nIHRvIGFkZCBtb3JlLFxuICAvLyBmYWlscyB3aGVuIHBhc3RpbmcgMTAwKyBpdGVtcylcblxuICBpZiAoIXdpbi5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gIHZhciBzdGFydCA9IE1hdGgubWluKG9mZnNldHMuc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiBNYXRoLm1pbihvZmZzZXRzLmVuZCwgbGVuZ3RoKTsgLy8gSUUgMTEgdXNlcyBtb2Rlcm4gc2VsZWN0aW9uLCBidXQgZG9lc24ndCBzdXBwb3J0IHRoZSBleHRlbmQgbWV0aG9kLlxuICAvLyBGbGlwIGJhY2t3YXJkIHNlbGVjdGlvbnMsIHNvIHdlIGNhbiBzZXQgd2l0aCBhIHNpbmdsZSByYW5nZS5cblxuICBpZiAoIXNlbGVjdGlvbi5leHRlbmQgJiYgc3RhcnQgPiBlbmQpIHtcbiAgICB2YXIgdGVtcCA9IGVuZDtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IHRlbXA7XG4gIH1cblxuICB2YXIgc3RhcnRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIHN0YXJ0KTtcbiAgdmFyIGVuZE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgZW5kKTtcblxuICBpZiAoc3RhcnRNYXJrZXIgJiYgZW5kTWFya2VyKSB7XG4gICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAxICYmIHNlbGVjdGlvbi5hbmNob3JOb2RlID09PSBzdGFydE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgPT09IHN0YXJ0TWFya2VyLm9mZnNldCAmJiBzZWxlY3Rpb24uZm9jdXNOb2RlID09PSBlbmRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQgPT09IGVuZE1hcmtlci5vZmZzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZXRTdGFydChzdGFydE1hcmtlci5ub2RlLCBzdGFydE1hcmtlci5vZmZzZXQpO1xuICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgIGlmIChzdGFydCA+IGVuZCkge1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIHNlbGVjdGlvbi5leHRlbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5zZXRFbmQoZW5kTWFya2VyLm5vZGUsIGVuZE1hcmtlci5vZmZzZXQpO1xuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gIGlmICghb3V0ZXJOb2RlIHx8ICFpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlID09PSBpbm5lck5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKG91dGVyTm9kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShpbm5lck5vZGUpKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZS5wYXJlbnROb2RlKTtcbiAgfSBlbHNlIGlmICgnY29udGFpbnMnIGluIG91dGVyTm9kZSkge1xuICAgIHJldHVybiBvdXRlck5vZGUuY29udGFpbnMoaW5uZXJOb2RlKTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHtcbiAgICByZXR1cm4gISEob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGlubmVyTm9kZSkgJiAxNik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSW5Eb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBub2RlICYmIG5vZGUub3duZXJEb2N1bWVudCAmJiBjb250YWluc05vZGUobm9kZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbm9kZSk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbkZyYW1lKGlmcmFtZSkge1xuICB0cnkge1xuICAgIC8vIEFjY2Vzc2luZyB0aGUgY29udGVudERvY3VtZW50IG9mIGEgSFRNTElmcmFtZUVsZW1lbnQgY2FuIGNhdXNlIHRoZSBicm93c2VyXG4gICAgLy8gdG8gdGhyb3csIGUuZy4gaWYgaXQgaGFzIGEgY3Jvc3Mtb3JpZ2luIHNyYyBhdHRyaWJ1dGUuXG4gICAgLy8gU2FmYXJpIHdpbGwgc2hvdyBhbiBlcnJvciBpbiB0aGUgY29uc29sZSB3aGVuIHRoZSBhY2Nlc3MgcmVzdWx0cyBpbiBcIkJsb2NrZWQgYSBmcmFtZSB3aXRoIG9yaWdpblwiLiBlLmc6XG4gICAgLy8gaWZyYW1lLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAvLyBBIHNhZmV0eSB3YXkgaXMgdG8gYWNjZXNzIG9uZSBvZiB0aGUgY3Jvc3Mgb3JpZ2luIHByb3BlcnRpZXM6IFdpbmRvdyBvciBMb2NhdGlvblxuICAgIC8vIFdoaWNoIG1pZ2h0IHJlc3VsdCBpbiBcIlNlY3VyaXR5RXJyb3JcIiBET00gRXhjZXB0aW9uIGFuZCBpdCBpcyBjb21wYXRpYmxlIHRvIFNhZmFyaS5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1sI2ludGVncmF0aW9uLXdpdGgtaWRsXG4gICAgcmV0dXJuIHR5cGVvZiBpZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmID09PSAnc3RyaW5nJztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnREZWVwKCkge1xuICB2YXIgd2luID0gd2luZG93O1xuICB2YXIgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcblxuICB3aGlsZSAoZWxlbWVudCBpbnN0YW5jZW9mIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgIGlmIChpc1NhbWVPcmlnaW5GcmFtZShlbGVtZW50KSkge1xuICAgICAgd2luID0gZWxlbWVudC5jb250ZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCh3aW4uZG9jdW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIEBSZWFjdElucHV0U2VsZWN0aW9uOiBSZWFjdCBpbnB1dCBzZWxlY3Rpb24gbW9kdWxlLiBCYXNlZCBvbiBTZWxlY3Rpb24uanMsXG4gKiBidXQgbW9kaWZpZWQgdG8gYmUgc3VpdGFibGUgZm9yIHJlYWN0IGFuZCBoYXMgYSBjb3VwbGUgb2YgYnVnIGZpeGVzIChkb2Vzbid0XG4gKiBhc3N1bWUgYnV0dG9ucyBoYXZlIHJhbmdlIHNlbGVjdGlvbnMgYWxsb3dlZCkuXG4gKiBJbnB1dCBzZWxlY3Rpb24gbW9kdWxlIGZvciBSZWFjdC5cbiAqL1xuXG4vKipcbiAqIEBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXM6IHdlIGdldCB0aGUgZWxlbWVudCB0eXBlcyB0aGF0IHN1cHBvcnQgc2VsZWN0aW9uXG4gKiBmcm9tIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2RvLW5vdC1hcHBseSwgbG9va2luZyBhdCBgc2VsZWN0aW9uU3RhcnRgXG4gKiBhbmQgYHNlbGVjdGlvbkVuZGAgcm93cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSAmJiAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ3RleHQnIHx8IGVsZW0udHlwZSA9PT0gJ3NlYXJjaCcgfHwgZWxlbS50eXBlID09PSAndGVsJyB8fCBlbGVtLnR5cGUgPT09ICd1cmwnIHx8IGVsZW0udHlwZSA9PT0gJ3Bhc3N3b3JkJykgfHwgbm9kZU5hbWUgPT09ICd0ZXh0YXJlYScgfHwgZWxlbS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJyk7XG59XG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpIHtcbiAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgcmV0dXJuIHtcbiAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgc2VsZWN0aW9uUmFuZ2U6IGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhmb2N1c2VkRWxlbSkgPyBnZXRTZWxlY3Rpb24kMShmb2N1c2VkRWxlbSkgOiBudWxsXG4gIH07XG59XG4vKipcbiAqIEByZXN0b3JlU2VsZWN0aW9uOiBJZiBhbnkgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0LFxuICogcmVzdG9yZSBpdC4gVGhpcyBpcyB1c2VmdWwgd2hlbiBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCByZW1vdmUgZG9tXG4gKiBub2RlcyBhbmQgcGxhY2UgdGhlbSBiYWNrIGluLCByZXN1bHRpbmcgaW4gZm9jdXMgYmVpbmcgbG9zdC5cbiAqL1xuXG5mdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24pIHtcbiAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgdmFyIHByaW9yRm9jdXNlZEVsZW0gPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmZvY3VzZWRFbGVtO1xuICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7XG5cbiAgaWYgKGN1ckZvY3VzZWRFbGVtICE9PSBwcmlvckZvY3VzZWRFbGVtICYmIGlzSW5Eb2N1bWVudChwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgIGlmIChwcmlvclNlbGVjdGlvblJhbmdlICE9PSBudWxsICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgc2V0U2VsZWN0aW9uKHByaW9yRm9jdXNlZEVsZW0sIHByaW9yU2VsZWN0aW9uUmFuZ2UpO1xuICAgIH0gLy8gRm9jdXNpbmcgYSBub2RlIGNhbiBjaGFuZ2UgdGhlIHNjcm9sbCBwb3NpdGlvbiwgd2hpY2ggaXMgdW5kZXNpcmFibGVcblxuXG4gICAgdmFyIGFuY2VzdG9ycyA9IFtdO1xuICAgIHZhciBhbmNlc3RvciA9IHByaW9yRm9jdXNlZEVsZW07XG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlKSB7XG4gICAgICBpZiAoYW5jZXN0b3Iubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICBhbmNlc3RvcnMucHVzaCh7XG4gICAgICAgICAgZWxlbWVudDogYW5jZXN0b3IsXG4gICAgICAgICAgbGVmdDogYW5jZXN0b3Iuc2Nyb2xsTGVmdCxcbiAgICAgICAgICB0b3A6IGFuY2VzdG9yLnNjcm9sbFRvcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMoKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuY2VzdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGluZm8gPSBhbmNlc3RvcnNbaV07XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IGluZm8ubGVmdDtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxUb3AgPSBpbmZvLnRvcDtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogQGdldFNlbGVjdGlvbjogR2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIGZvY3VzZWQgdGV4dGFyZWEsIGlucHV0IG9yXG4gKiBjb250ZW50RWRpdGFibGUgbm9kZS5cbiAqIC1AaW5wdXQ6IExvb2sgdXAgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0XG4gKiAtQHJldHVybiB7c3RhcnQ6IHNlbGVjdGlvblN0YXJ0LCBlbmQ6IHNlbGVjdGlvbkVuZH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24kMShpbnB1dCkge1xuICB2YXIgc2VsZWN0aW9uO1xuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXIgd2l0aCBpbnB1dCBvciB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSB7XG4gICAgICBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gQ29udGVudCBlZGl0YWJsZSBvciBvbGQgSUUgdGV4dGFyZWEuXG4gICAgc2VsZWN0aW9uID0gZ2V0T2Zmc2V0cyhpbnB1dCk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0aW9uIHx8IHtcbiAgICBzdGFydDogMCxcbiAgICBlbmQ6IDBcbiAgfTtcbn1cbi8qKlxuICogQHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVhIG9yIGlucHV0IGFuZCBmb2N1c2VzXG4gKiB0aGUgaW5wdXQuXG4gKiAtQGlucHV0ICAgICBTZXQgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0IG9yIHRleHRhcmVhXG4gKiAtQG9mZnNldHMgICBPYmplY3Qgb2Ygc2FtZSBmb3JtIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBnZXQqXG4gKi9cblxuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGlucHV0LCBvZmZzZXRzKSB7XG4gIHZhciBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZDtcblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgfVxuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcbiAgICBpbnB1dC5zZWxlY3Rpb25FbmQgPSBNYXRoLm1pbihlbmQsIGlucHV0LnZhbHVlLmxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgc2V0T2Zmc2V0cyhpbnB1dCwgb2Zmc2V0cyk7XG4gIH1cbn1cblxudmFyIHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCA9IGNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUgPD0gMTE7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uU2VsZWN0JywgWydmb2N1c291dCcsICdjb250ZXh0bWVudScsICdkcmFnZW5kJywgJ2ZvY3VzaW4nLCAna2V5ZG93bicsICdrZXl1cCcsICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdzZWxlY3Rpb25jaGFuZ2UnXSk7XG59XG5cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG52YXIgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG52YXIgbW91c2VEb3duID0gZmFsc2U7XG4vKipcbiAqIEdldCBhbiBvYmplY3Qgd2hpY2ggaXMgYSB1bmlxdWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICpcbiAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBub3QgYmUgY29uc2lzdGVudCBhY3Jvc3Mgbm9kZXMgb3IgYnJvd3NlcnMsIGJ1dFxuICogdHdvIGlkZW50aWNhbCBzZWxlY3Rpb25zIG9uIHRoZSBzYW1lIG5vZGUgd2lsbCByZXR1cm4gaWRlbnRpY2FsIG9iamVjdHMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKG5vZGUpIHtcbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gbm9kZSAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMobm9kZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IG5vZGUuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgd2luID0gbm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gICAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgICByZXR1cm4ge1xuICAgICAgYW5jaG9yTm9kZTogc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQ6IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGU6IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldDogc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBHZXQgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCB0YXJnZXQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldERvY3VtZW50KGV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBldmVudFRhcmdldC53aW5kb3cgPT09IGV2ZW50VGFyZ2V0ID8gZXZlbnRUYXJnZXQuZG9jdW1lbnQgOiBldmVudFRhcmdldC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IGV2ZW50VGFyZ2V0IDogZXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcbn1cbi8qKlxuICogUG9sbCBzZWxlY3Rpb24gdG8gc2VlIHdoZXRoZXIgaXQncyBjaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gKiBAcmV0dXJuIHs/U3ludGhldGljRXZlbnR9XG4gKi9cblxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGVsZW1lbnQsIGFuZCB0aGF0IHRoZSB1c2VyIGlzIG5vdCBkcmFnZ2luZyBhXG4gIC8vIHNlbGVjdGlvbiAodGhpcyBtYXRjaGVzIG5hdGl2ZSBgc2VsZWN0YCBldmVudCBiZWhhdmlvcikuIEluIEhUTUw1LCBzZWxlY3RcbiAgLy8gZmlyZXMgb25seSBvbiBpbnB1dCBhbmQgdGV4dGFyZWEgdGh1cyBpZiB0aGVyZSdzIG5vIGZvY3VzZWQgZWxlbWVudCB3ZVxuICAvLyB3b24ndCBkaXNwYXRjaC5cbiAgdmFyIGRvYyA9IGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChtb3VzZURvd24gfHwgYWN0aXZlRWxlbWVudCA9PSBudWxsIHx8IGFjdGl2ZUVsZW1lbnQgIT09IGdldEFjdGl2ZUVsZW1lbnQoZG9jKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBPbmx5IGZpcmUgd2hlbiBzZWxlY3Rpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG5cblxuICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihhY3RpdmVFbGVtZW50KTtcblxuICBpZiAoIWxhc3RTZWxlY3Rpb24gfHwgIXNoYWxsb3dFcXVhbChsYXN0U2VsZWN0aW9uLCBjdXJyZW50U2VsZWN0aW9uKSkge1xuICAgIGxhc3RTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoYWN0aXZlRWxlbWVudEluc3QsICdvblNlbGVjdCcpO1xuXG4gICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoJ29uU2VsZWN0JywgJ3NlbGVjdCcsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICAgIGV2ZW50LnRhcmdldCA9IGFjdGl2ZUVsZW1lbnQ7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uU2VsZWN0YCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgc2VsZWN0IGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gY29udGVudEVkaXRhYmxlXG4gKlxuICogVGhpcyBkaWZmZXJzIGZyb20gbmF0aXZlIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqIC0gRmlyZXMgb24gY29udGVudEVkaXRhYmxlIGZpZWxkcyBhcyB3ZWxsIGFzIGlucHV0cy5cbiAqIC0gRmlyZXMgZm9yIGNvbGxhcHNlZCBzZWxlY3Rpb24uXG4gKiAtIEZpcmVzIGFmdGVyIHVzZXIgaW5wdXQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBpZiAoaXNUZXh0SW5wdXRFbGVtZW50KHRhcmdldE5vZGUpIHx8IHRhcmdldE5vZGUuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpIHtcbiAgICAgICAgYWN0aXZlRWxlbWVudCA9IHRhcmdldE5vZGU7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG4gICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuICAgIC8vIERvbid0IGZpcmUgdGhlIGV2ZW50IHdoaWxlIHRoZSB1c2VyIGlzIGRyYWdnaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gICAgLy8gc2VtYW50aWNzIG9mIHRoZSBuYXRpdmUgc2VsZWN0IGV2ZW50LlxuXG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICAgIG1vdXNlRG93biA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvbnRleHRtZW51JzpcbiAgICBjYXNlICdtb3VzZXVwJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICAgIG1vdXNlRG93biA9IGZhbHNlO1xuICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIGJyZWFrO1xuICAgIC8vIENocm9tZSBhbmQgSUUgZmlyZSBub24tc3RhbmRhcmQgZXZlbnQgd2hlbiBzZWxlY3Rpb24gaXMgY2hhbmdlZCAoYW5kXG4gICAgLy8gc29tZXRpbWVzIHdoZW4gaXQgaGFzbid0KS4gSUUncyBldmVudCBmaXJlcyBvdXQgb2Ygb3JkZXIgd2l0aCByZXNwZWN0XG4gICAgLy8gdG8ga2V5IGFuZCBpbnB1dCBldmVudHMgb24gZGVsZXRpb24sIHNvIHdlIGRpc2NhcmQgaXQuXG4gICAgLy9cbiAgICAvLyBGaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBzZWxlY3Rpb25jaGFuZ2UsIHNvIGNoZWNrIHNlbGVjdGlvbiBzdGF0dXNcbiAgICAvLyBhZnRlciBlYWNoIGtleSBlbnRyeS4gVGhlIHNlbGVjdGlvbiBjaGFuZ2VzIGFmdGVyIGtleWRvd24gYW5kIGJlZm9yZVxuICAgIC8vIGtleXVwLCBidXQgd2UgY2hlY2sgb24ga2V5ZG93biBhcyB3ZWxsIGluIHRoZSBjYXNlIG9mIGhvbGRpbmcgZG93biBhXG4gICAgLy8ga2V5LCB3aGVuIG11bHRpcGxlIGtleWRvd24gZXZlbnRzIGFyZSBmaXJlZCBidXQgb25seSBvbmUga2V5dXAgaXMuXG4gICAgLy8gVGhpcyBpcyBhbHNvIG91ciBhcHByb2FjaCBmb3IgSUUgaGFuZGxpbmcsIGZvciB0aGUgcmVhc29uIGFib3ZlLlxuXG4gICAgY2FzZSAnc2VsZWN0aW9uY2hhbmdlJzpcbiAgICAgIGlmIChza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAvLyBmYWxscyB0aHJvdWdoXG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBtYXBwaW5nIG9mIHN0YW5kYXJkIHZlbmRvciBwcmVmaXhlcyB1c2luZyB0aGUgZGVmaW5lZCBzdHlsZSBwcm9wZXJ0eSBhbmQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVQcm9wXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIG1ha2VQcmVmaXhNYXAoc3R5bGVQcm9wLCBldmVudE5hbWUpIHtcbiAgdmFyIHByZWZpeGVzID0ge307XG4gIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICBwcmVmaXhlc1snV2Via2l0JyArIHN0eWxlUHJvcF0gPSAnd2Via2l0JyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ01veicgKyBzdHlsZVByb3BdID0gJ21veicgKyBldmVudE5hbWU7XG4gIHJldHVybiBwcmVmaXhlcztcbn1cbi8qKlxuICogQSBsaXN0IG9mIGV2ZW50IG5hbWVzIHRvIGEgY29uZmlndXJhYmxlIGxpc3Qgb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG5cblxudmFyIHZlbmRvclByZWZpeGVzID0ge1xuICBhbmltYXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25FbmQnKSxcbiAgYW5pbWF0aW9uaXRlcmF0aW9uOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uSXRlcmF0aW9uJyksXG4gIGFuaW1hdGlvbnN0YXJ0OiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uU3RhcnQnKSxcbiAgdHJhbnNpdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnVHJhbnNpdGlvbicsICdUcmFuc2l0aW9uRW5kJylcbn07XG4vKipcbiAqIEV2ZW50IG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZWN0ZWQgYW5kIHByZWZpeGVkIChpZiBhcHBsaWNhYmxlKS5cbiAqL1xuXG52YXIgcHJlZml4ZWRFdmVudE5hbWVzID0ge307XG4vKipcbiAqIEVsZW1lbnQgdG8gY2hlY2sgZm9yIHByZWZpeGVzIG9uLlxuICovXG5cbnZhciBzdHlsZSA9IHt9O1xuLyoqXG4gKiBCb290c3RyYXAgaWYgYSBET00gZXhpc3RzLlxuICovXG5cbmlmIChjYW5Vc2VET00pIHtcbiAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTsgLy8gT24gc29tZSBwbGF0Zm9ybXMsIGluIHBhcnRpY3VsYXIgc29tZSByZWxlYXNlcyBvZiBBbmRyb2lkIDQueCxcbiAgLy8gdGhlIHVuLXByZWZpeGVkIFwiYW5pbWF0aW9uXCIgYW5kIFwidHJhbnNpdGlvblwiIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlXG4gIC8vIHN0eWxlIG9iamVjdCBidXQgdGhlIGV2ZW50cyB0aGF0IGZpcmUgd2lsbCBzdGlsbCBiZSBwcmVmaXhlZCwgc28gd2UgbmVlZFxuICAvLyB0byBjaGVjayBpZiB0aGUgdW4tcHJlZml4ZWQgZXZlbnRzIGFyZSB1c2FibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbWFwLlxuXG4gIGlmICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25lbmQuYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25zdGFydC5hbmltYXRpb247XG4gIH0gLy8gU2FtZSBhcyBhYm92ZVxuXG5cbiAgaWYgKCEoJ1RyYW5zaXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247XG4gIH1cbn1cbi8qKlxuICogQXR0ZW1wdHMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHZlbmRvciBwcmVmaXhlZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgaWYgKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICB9IGVsc2UgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIGV2ZW50TmFtZTtcbiAgfVxuXG4gIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdO1xuXG4gIGZvciAodmFyIHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApIHtcbiAgICBpZiAocHJlZml4TWFwLmhhc093blByb3BlcnR5KHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxlKSB7XG4gICAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBbc3R5bGVQcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXZlbnROYW1lO1xufVxuXG52YXIgQU5JTUFUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25lbmQnKTtcbnZhciBBTklNQVRJT05fSVRFUkFUSU9OID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbml0ZXJhdGlvbicpO1xudmFyIEFOSU1BVElPTl9TVEFSVCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25zdGFydCcpO1xudmFyIFRSQU5TSVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ3RyYW5zaXRpb25lbmQnKTtcblxudmFyIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzID0gbmV3IE1hcCgpOyAvLyBOT1RFOiBDYXBpdGFsaXphdGlvbiBpcyBpbXBvcnRhbnQgaW4gdGhpcyBsaXN0IVxuLy9cbi8vIEUuZy4gaXQgbmVlZHMgXCJwb2ludGVyRG93blwiLCBub3QgXCJwb2ludGVyZG93blwiLlxuLy8gVGhpcyBpcyBiZWNhdXNlIHdlIGRlcml2ZSBib3RoIFJlYWN0IG5hbWUgKFwib25Qb2ludGVyRG93blwiKVxuLy8gYW5kIERPTSBuYW1lIChcInBvaW50ZXJkb3duXCIpIGZyb20gdGhlIHNhbWUgbGlzdC5cbi8vXG4vLyBFeGNlcHRpb25zIHRoYXQgZG9uJ3QgbWF0Y2ggdGhpcyBjb252ZW50aW9uIGFyZSBsaXN0ZWQgc2VwYXJhdGVseS5cbi8vXG4vLyBwcmV0dGllci1pZ25vcmVcblxudmFyIHNpbXBsZUV2ZW50UGx1Z2luRXZlbnRzID0gWydhYm9ydCcsICdhdXhDbGljaycsICdjYW5jZWwnLCAnY2FuUGxheScsICdjYW5QbGF5VGhyb3VnaCcsICdjbGljaycsICdjbG9zZScsICdjb250ZXh0TWVudScsICdjb3B5JywgJ2N1dCcsICdkcmFnJywgJ2RyYWdFbmQnLCAnZHJhZ0VudGVyJywgJ2RyYWdFeGl0JywgJ2RyYWdMZWF2ZScsICdkcmFnT3ZlcicsICdkcmFnU3RhcnQnLCAnZHJvcCcsICdkdXJhdGlvbkNoYW5nZScsICdlbXB0aWVkJywgJ2VuY3J5cHRlZCcsICdlbmRlZCcsICdlcnJvcicsICdnb3RQb2ludGVyQ2FwdHVyZScsICdpbnB1dCcsICdpbnZhbGlkJywgJ2tleURvd24nLCAna2V5UHJlc3MnLCAna2V5VXAnLCAnbG9hZCcsICdsb2FkZWREYXRhJywgJ2xvYWRlZE1ldGFkYXRhJywgJ2xvYWRTdGFydCcsICdsb3N0UG9pbnRlckNhcHR1cmUnLCAnbW91c2VEb3duJywgJ21vdXNlTW92ZScsICdtb3VzZU91dCcsICdtb3VzZU92ZXInLCAnbW91c2VVcCcsICdwYXN0ZScsICdwYXVzZScsICdwbGF5JywgJ3BsYXlpbmcnLCAncG9pbnRlckNhbmNlbCcsICdwb2ludGVyRG93bicsICdwb2ludGVyTW92ZScsICdwb2ludGVyT3V0JywgJ3BvaW50ZXJPdmVyJywgJ3BvaW50ZXJVcCcsICdwcm9ncmVzcycsICdyYXRlQ2hhbmdlJywgJ3Jlc2V0JywgJ3Jlc2l6ZScsICdzZWVrZWQnLCAnc2Vla2luZycsICdzdGFsbGVkJywgJ3N1Ym1pdCcsICdzdXNwZW5kJywgJ3RpbWVVcGRhdGUnLCAndG91Y2hDYW5jZWwnLCAndG91Y2hFbmQnLCAndG91Y2hTdGFydCcsICd2b2x1bWVDaGFuZ2UnLCAnc2Nyb2xsJywgJ3Njcm9sbEVuZCcsICd0b2dnbGUnLCAndG91Y2hNb3ZlJywgJ3dhaXRpbmcnLCAnd2hlZWwnXTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVFdmVudChkb21FdmVudE5hbWUsIHJlYWN0TmFtZSkge1xuICB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcy5zZXQoZG9tRXZlbnROYW1lLCByZWFjdE5hbWUpO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVhY3ROYW1lLCBbZG9tRXZlbnROYW1lXSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlRXZlbnRzKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpbXBsZUV2ZW50UGx1Z2luRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGV2ZW50TmFtZSA9IHNpbXBsZUV2ZW50UGx1Z2luRXZlbnRzW2ldO1xuICAgIHZhciBkb21FdmVudE5hbWUgPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgY2FwaXRhbGl6ZWRFdmVudCA9IGV2ZW50TmFtZVswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnROYW1lLnNsaWNlKDEpO1xuICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoZG9tRXZlbnROYW1lLCAnb24nICsgY2FwaXRhbGl6ZWRFdmVudCk7XG4gIH0gLy8gU3BlY2lhbCBjYXNlcyB3aGVyZSBldmVudCBuYW1lcyBkb24ndCBtYXRjaC5cblxuXG4gIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX0VORCwgJ29uQW5pbWF0aW9uRW5kJyk7XG4gIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX0lURVJBVElPTiwgJ29uQW5pbWF0aW9uSXRlcmF0aW9uJyk7XG4gIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX1NUQVJULCAnb25BbmltYXRpb25TdGFydCcpO1xuICByZWdpc3RlclNpbXBsZUV2ZW50KCdkYmxjbGljaycsICdvbkRvdWJsZUNsaWNrJyk7XG4gIHJlZ2lzdGVyU2ltcGxlRXZlbnQoJ2ZvY3VzaW4nLCAnb25Gb2N1cycpO1xuICByZWdpc3RlclNpbXBsZUV2ZW50KCdmb2N1c291dCcsICdvbkJsdXInKTtcbiAgcmVnaXN0ZXJTaW1wbGVFdmVudChUUkFOU0lUSU9OX0VORCwgJ29uVHJhbnNpdGlvbkVuZCcpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDEoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgcmVhY3ROYW1lID0gdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuZ2V0KGRvbUV2ZW50TmFtZSk7XG5cbiAgaWYgKHJlYWN0TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0V2ZW50O1xuICB2YXIgcmVhY3RFdmVudFR5cGUgPSBkb21FdmVudE5hbWU7XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBrZXlwcmVzcyBldmVudCBmb3IgZnVuY3Rpb24ga2V5cyB0b28uIFRoaXMgcmVtb3Zlc1xuICAgICAgLy8gdGhlIHVud2FudGVkIGtleXByZXNzIGV2ZW50cy4gRW50ZXIgaXMgaG93ZXZlciBib3RoIHByaW50YWJsZSBhbmRcbiAgICAgIC8vIG5vbi1wcmludGFibGUuIE9uZSB3b3VsZCBleHBlY3QgVGFiIHRvIGJlIGFzIHdlbGwgKGJ1dCBpdCBpc24ndCkuXG4gICAgICAvLyBUT0RPOiBGaXhlZCBpbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD05NjgwNTYuIENhblxuICAgICAgLy8gcHJvYmFibHkgcmVtb3ZlLlxuICAgICAgaWYgKGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnZm9jdXMnO1xuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgcmVhY3RFdmVudFR5cGUgPSAnYmx1cic7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdiZWZvcmVibHVyJzpcbiAgICBjYXNlICdhZnRlcmJsdXInOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY2xpY2snOlxuICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhlXG4gICAgICAvLyB1bndhbnRlZCBjbGljayBldmVudHMuXG4gICAgICAvLyBUT0RPOiBGaXhlZCBpbiBodHRwczovL3BoYWJyaWNhdG9yLnNlcnZpY2VzLm1vemlsbGEuY29tL0QyNjc5My4gQ2FuXG4gICAgICAvLyBwcm9iYWJseSByZW1vdmUuXG4gICAgICBpZiAobmF0aXZlRXZlbnQuYnV0dG9uID09PSAyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ2F1eGNsaWNrJzpcbiAgICBjYXNlICdkYmxjbGljayc6XG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICBjYXNlICdtb3VzZW1vdmUnOlxuICAgIGNhc2UgJ21vdXNldXAnOiAvLyBUT0RPOiBEaXNhYmxlZCBlbGVtZW50cyBzaG91bGQgbm90IHJlc3BvbmQgdG8gbW91c2UgZXZlbnRzXG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkcmFnJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICBjYXNlICdkcmFnZW50ZXInOlxuICAgIGNhc2UgJ2RyYWdleGl0JzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgIGNhc2UgJ2RyYWdvdmVyJzpcbiAgICBjYXNlICdkcmFnc3RhcnQnOlxuICAgIGNhc2UgJ2Ryb3AnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0b3VjaGNhbmNlbCc6XG4gICAgY2FzZSAndG91Y2hlbmQnOlxuICAgIGNhc2UgJ3RvdWNobW92ZSc6XG4gICAgY2FzZSAndG91Y2hzdGFydCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUb3VjaEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEFOSU1BVElPTl9FTkQ6XG4gICAgY2FzZSBBTklNQVRJT05fSVRFUkFUSU9OOlxuICAgIGNhc2UgQU5JTUFUSU9OX1NUQVJUOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQW5pbWF0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVFJBTlNJVElPTl9FTkQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3Njcm9sbCc6XG4gICAgY2FzZSAnc2Nyb2xsZW5kJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3doZWVsJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvcHknOlxuICAgIGNhc2UgJ2N1dCc6XG4gICAgY2FzZSAncGFzdGUnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuICAgIGNhc2UgJ3BvaW50ZXJkb3duJzpcbiAgICBjYXNlICdwb2ludGVybW92ZSc6XG4gICAgY2FzZSAncG9pbnRlcm91dCc6XG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJ1cCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBpbkNhcHR1cmVQaGFzZSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgIT09IDA7XG5cbiAge1xuICAgIC8vIFNvbWUgZXZlbnRzIGRvbid0IGJ1YmJsZSBpbiB0aGUgYnJvd3Nlci5cbiAgICAvLyBJbiB0aGUgcGFzdCwgUmVhY3QgaGFzIGFsd2F5cyBidWJibGVkIHRoZW0sIGJ1dCB0aGlzIGNhbiBiZSBzdXJwcmlzaW5nLlxuICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHRyeSBhbGlnbmluZyBjbG9zZXIgdG8gdGhlIGJyb3dzZXIgYmVoYXZpb3IgYnkgbm90IGJ1YmJsaW5nXG4gICAgLy8gdGhlbSBpbiBSZWFjdCBlaXRoZXIuIFdlJ2xsIHN0YXJ0IGJ5IG5vdCBidWJibGluZyBvblNjcm9sbCwgYW5kIHRoZW4gZXhwYW5kLlxuICAgIHZhciBhY2N1bXVsYXRlVGFyZ2V0T25seSA9ICFpbkNhcHR1cmVQaGFzZSAmJiAoIC8vIFRPRE86IGlkZWFsbHksIHdlJ2QgZXZlbnR1YWxseSBhZGQgYWxsIGV2ZW50cyBmcm9tXG4gICAgLy8gbm9uRGVsZWdhdGVkRXZlbnRzIGxpc3QgaW4gRE9NUGx1Z2luRXZlbnRTeXN0ZW0uXG4gICAgLy8gVGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgc3BlY2lhbCBsaXN0LlxuICAgIC8vIFRoaXMgaXMgYSBicmVha2luZyBjaGFuZ2UgdGhhdCBjYW4gd2FpdCB1bnRpbCBSZWFjdCAxOC5cbiAgICBkb21FdmVudE5hbWUgPT09ICdzY3JvbGwnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3Njcm9sbGVuZCcpO1xuXG4gICAgdmFyIF9saXN0ZW5lcnMgPSBhY2N1bXVsYXRlU2luZ2xlUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgcmVhY3ROYW1lLCBuYXRpdmVFdmVudC50eXBlLCBpbkNhcHR1cmVQaGFzZSwgYWNjdW11bGF0ZVRhcmdldE9ubHkpO1xuXG4gICAgaWYgKF9saXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBjcmVhdGUgZXZlbnQgbGF6aWx5LlxuICAgICAgdmFyIF9ldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IocmVhY3ROYW1lLCByZWFjdEV2ZW50VHlwZSwgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgZXZlbnQ6IF9ldmVudCxcbiAgICAgICAgbGlzdGVuZXJzOiBfbGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxucmVnaXN0ZXJTaW1wbGVFdmVudHMoKTtcbnJlZ2lzdGVyRXZlbnRzJDEoKTtcbnJlZ2lzdGVyRXZlbnRzJDIoKTtcbnJlZ2lzdGVyRXZlbnRzKCk7XG5yZWdpc3RlckV2ZW50cyQzKCk7XG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICAvLyBUT0RPOiB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBjb25jZXB0IG9mIGEgXCJTaW1wbGVFdmVudFBsdWdpblwiLlxuICAvLyBUaGlzIGlzIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHRoZSBldmVudCBzeXN0ZW0uIEFsbFxuICAvLyB0aGUgb3RoZXIgcGx1Z2lucyBhcmUgZXNzZW50aWFsbHkgcG9seWZpbGxzLiBTbyB0aGUgcGx1Z2luXG4gIC8vIHNob3VsZCBwcm9iYWJseSBiZSBpbmxpbmVkIHNvbWV3aGVyZSBhbmQgaGF2ZSBpdHMgbG9naWNcbiAgLy8gYmUgY29yZSB0aGUgdG8gZXZlbnQgc3lzdGVtLiBUaGlzIHdvdWxkIHBvdGVudGlhbGx5IGFsbG93XG4gIC8vIHVzIHRvIHNoaXAgYnVpbGRzIG9mIFJlYWN0IHdpdGhvdXQgdGhlIHBvbHlmaWxsZWQgcGx1Z2lucyBiZWxvdy5cbiAgZXh0cmFjdEV2ZW50cyQxKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgdmFyIHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIFNIT1VMRF9OT1RfUFJPQ0VTU19QT0xZRklMTF9FVkVOVF9QTFVHSU5TKSA9PT0gMDsgLy8gV2UgZG9uJ3QgcHJvY2VzcyB0aGVzZSBldmVudHMgdW5sZXNzIHdlIGFyZSBpbiB0aGVcbiAgLy8gZXZlbnQncyBuYXRpdmUgXCJidWJibGVcIiBwaGFzZSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSdyZVxuICAvLyBub3QgaW4gdGhlIGNhcHR1cmUgcGhhc2UuIFRoYXQncyBiZWNhdXNlIHdlIGVtdWxhdGVcbiAgLy8gdGhlIGNhcHR1cmUgcGhhc2UgaGVyZSBzdGlsbC4gVGhpcyBpcyBhIHRyYWRlLW9mZixcbiAgLy8gYmVjYXVzZSBpbiBhbiBpZGVhbCB3b3JsZCB3ZSB3b3VsZCBub3QgZW11bGF0ZSBhbmQgdXNlXG4gIC8vIHRoZSBwaGFzZXMgcHJvcGVybHksIGxpa2Ugd2UgZG8gd2l0aCB0aGUgU2ltcGxlRXZlbnRcbiAgLy8gcGx1Z2luLiBIb3dldmVyLCB0aGUgcGx1Z2lucyBiZWxvdyBlaXRoZXIgZXhwZWN0XG4gIC8vIGVtdWxhdGlvbiAoRW50ZXJMZWF2ZSkgb3IgdXNlIHN0YXRlIGxvY2FsaXplZCB0byB0aGF0XG4gIC8vIHBsdWdpbiAoQmVmb3JlSW5wdXQsIENoYW5nZSwgU2VsZWN0KS4gVGhlIHN0YXRlIGluXG4gIC8vIHRoZXNlIG1vZHVsZXMgY29tcGxpY2F0ZXMgdGhpbmdzLCBhcyB5b3UnbGwgZXNzZW50aWFsbHlcbiAgLy8gZ2V0IHRoZSBjYXNlIHdoZXJlIHRoZSBjYXB0dXJlIHBoYXNlIGV2ZW50IG1pZ2h0IGNoYW5nZVxuICAvLyBzdGF0ZSwgb25seSBmb3IgdGhlIGZvbGxvd2luZyBidWJibGUgZXZlbnQgdG8gY29tZSBpblxuICAvLyBsYXRlciBhbmQgbm90IHRyaWdnZXIgYW55dGhpbmcgYXMgdGhlIHN0YXRlIG5vd1xuICAvLyBpbnZhbGlkYXRlcyB0aGUgaGV1cmlzdGljcyBvZiB0aGUgZXZlbnQgcGx1Z2luLiBXZVxuICAvLyBjb3VsZCBhbHRlciBhbGwgdGhlc2UgcGx1Z2lucyB0byB3b3JrIGluIHN1Y2ggd2F5cywgYnV0XG4gIC8vIHRoYXQgbWlnaHQgY2F1c2Ugb3RoZXIgdW5rbm93biBzaWRlLWVmZmVjdHMgdGhhdCB3ZVxuICAvLyBjYW4ndCBmb3Jlc2VlIHJpZ2h0IG5vdy5cblxuICBpZiAoc2hvdWxkUHJvY2Vzc1BvbHlmaWxsUGx1Z2lucykge1xuICAgIGV4dHJhY3RFdmVudHMkMyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgICB7XG4gICAgICBleHRyYWN0RXZlbnRzJDYoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH1cbiAgfVxufSAvLyBMaXN0IG9mIGV2ZW50cyB0aGF0IG5lZWQgdG8gYmUgaW5kaXZpZHVhbGx5IGF0dGFjaGVkIHRvIG1lZGlhIGVsZW1lbnRzLlxuXG5cbnZhciBtZWRpYUV2ZW50VHlwZXMgPSBbJ2Fib3J0JywgJ2NhbnBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnbG9hZGVkZGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAncGF1c2UnLCAncGxheScsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3JhdGVjaGFuZ2UnLCAncmVzaXplJywgJ3NlZWtlZCcsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3VzcGVuZCcsICd0aW1ldXBkYXRlJywgJ3ZvbHVtZWNoYW5nZScsICd3YWl0aW5nJ107IC8vIFdlIHNob3VsZCBub3QgZGVsZWdhdGUgdGhlc2UgZXZlbnRzIHRvIHRoZSBjb250YWluZXIsIGJ1dCByYXRoZXJcbi8vIHNldCB0aGVtIG9uIHRoZSBhY3R1YWwgdGFyZ2V0IGVsZW1lbnQgaXRzZWxmLiBUaGlzIGlzIHByaW1hcmlseVxuLy8gYmVjYXVzZSB0aGVzZSBldmVudHMgZG8gbm90IGNvbnNpc3RlbnRseSBidWJibGUgaW4gdGhlIERPTS5cblxudmFyIG5vbkRlbGVnYXRlZEV2ZW50cyA9IG5ldyBTZXQoWydjYW5jZWwnLCAnY2xvc2UnLCAnaW52YWxpZCcsICdsb2FkJywgJ3Njcm9sbCcsICdzY3JvbGxlbmQnLCAndG9nZ2xlJ10uY29uY2F0KG1lZGlhRXZlbnRUeXBlcykpO1xuXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gIHZhciB0eXBlID0gZXZlbnQudHlwZSB8fCAndW5rbm93bi1ldmVudCc7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IodHlwZSwgbGlzdGVuZXIsIHVuZGVmaW5lZCwgZXZlbnQpO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Rpc3BhdGNoUXVldWVJdGVtc0luT3JkZXIoZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcHJldmlvdXNJbnN0YW5jZTtcblxuICBpZiAoaW5DYXB0dXJlUGhhc2UpIHtcbiAgICBmb3IgKHZhciBpID0gZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkaSA9IGRpc3BhdGNoTGlzdGVuZXJzW2ldLFxuICAgICAgICAgIGluc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuaW5zdGFuY2UsXG4gICAgICAgICAgY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgbGlzdGVuZXIgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5saXN0ZW5lcjtcblxuICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KTtcbiAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9kaXNwYXRjaExpc3RlbmVycyRfaSA9IGRpc3BhdGNoTGlzdGVuZXJzW19pXSxcbiAgICAgICAgICBfaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kuaW5zdGFuY2UsXG4gICAgICAgICAgX2N1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kuY3VycmVudFRhcmdldCxcbiAgICAgICAgICBfbGlzdGVuZXIgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kubGlzdGVuZXI7XG5cbiAgICAgIGlmIChfaW5zdGFuY2UgIT09IHByZXZpb3VzSW5zdGFuY2UgJiYgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgX2xpc3RlbmVyLCBfY3VycmVudFRhcmdldCk7XG4gICAgICBwcmV2aW91c0luc3RhbmNlID0gX2luc3RhbmNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gIHZhciBpbkNhcHR1cmVQaGFzZSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgIT09IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaFF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9kaXNwYXRjaFF1ZXVlJGkgPSBkaXNwYXRjaFF1ZXVlW2ldLFxuICAgICAgICBldmVudCA9IF9kaXNwYXRjaFF1ZXVlJGkuZXZlbnQsXG4gICAgICAgIGxpc3RlbmVycyA9IF9kaXNwYXRjaFF1ZXVlJGkubGlzdGVuZXJzO1xuICAgIHByb2Nlc3NEaXNwYXRjaFF1ZXVlSXRlbXNJbk9yZGVyKGV2ZW50LCBsaXN0ZW5lcnMsIGluQ2FwdHVyZVBoYXNlKTsgLy8gIGV2ZW50IHN5c3RlbSBkb2Vzbid0IHVzZSBwb29saW5nLlxuICB9IC8vIFRoaXMgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcmV0aHJvdyBpZiBhbnkgb2YgdGhlIGV2ZW50IGhhbmRsZXJzIHRocmV3LlxuXG5cbiAgcmV0aHJvd0NhdWdodEVycm9yKCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIG5hdGl2ZUV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgcHJvY2Vzc0Rpc3BhdGNoUXVldWUoZGlzcGF0Y2hRdWV1ZSwgZXZlbnRTeXN0ZW1GbGFncyk7XG59XG5cbmZ1bmN0aW9uIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRFbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoIW5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSkge1xuICAgICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IGEgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgpIGNhbGwgZm9yIFwiJXNcIi4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBkb21FdmVudE5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyID0gZmFsc2U7XG4gIHZhciBsaXN0ZW5lclNldCA9IGdldEV2ZW50TGlzdGVuZXJTZXQodGFyZ2V0RWxlbWVudCk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG5cbiAgaWYgKCFsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpKSB7XG4gICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0RWxlbWVudCwgZG9tRXZlbnROYW1lLCBJU19OT05fREVMRUdBVEVELCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcbiAgICBsaXN0ZW5lclNldC5hZGQobGlzdGVuZXJTZXRLZXkpO1xuICB9XG59XG5mdW5jdGlvbiBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciwgdGFyZ2V0KSB7XG4gIHtcbiAgICBpZiAobm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpICYmICFpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKSB7XG4gICAgICBlcnJvcignRGlkIG5vdCBleHBlY3QgYSBsaXN0ZW5Ub05hdGl2ZUV2ZW50KCkgY2FsbCBmb3IgXCIlc1wiIGluIHRoZSBidWJibGUgcGhhc2UuICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZG9tRXZlbnROYW1lKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZXZlbnRTeXN0ZW1GbGFncyA9IDA7XG5cbiAgaWYgKGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpIHtcbiAgICBldmVudFN5c3RlbUZsYWdzIHw9IElTX0NBUFRVUkVfUEhBU0U7XG4gIH1cblxuICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXQsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG59IC8vIFRoaXMgaXMgb25seSB1c2VkIGJ5IGNyZWF0ZUV2ZW50SGFuZGxlIHdoZW4gdGhlXG52YXIgbGlzdGVuaW5nTWFya2VyID0gJ19yZWFjdExpc3RlbmluZycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbmZ1bmN0aW9uIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIGlmICghcm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSkge1xuICAgIHJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0gPSB0cnVlO1xuICAgIGFsbE5hdGl2ZUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChkb21FdmVudE5hbWUpIHtcbiAgICAgIC8vIFdlIGhhbmRsZSBzZWxlY3Rpb25jaGFuZ2Ugc2VwYXJhdGVseSBiZWNhdXNlIGl0XG4gICAgICAvLyBkb2Vzbid0IGJ1YmJsZSBhbmQgbmVlZHMgdG8gYmUgb24gdGhlIGRvY3VtZW50LlxuICAgICAgaWYgKGRvbUV2ZW50TmFtZSAhPT0gJ3NlbGVjdGlvbmNoYW5nZScpIHtcbiAgICAgICAgaWYgKCFub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgZmFsc2UsIHJvb3RDb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCB0cnVlLCByb290Q29udGFpbmVyRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IHJvb3RDb250YWluZXJFbGVtZW50IDogcm9vdENvbnRhaW5lckVsZW1lbnQub3duZXJEb2N1bWVudDtcblxuICAgIGlmIChvd25lckRvY3VtZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGUgc2VsZWN0aW9uY2hhbmdlIGV2ZW50IGFsc28gbmVlZHMgZGVkdXBsaWNhdGlvblxuICAgICAgLy8gYnV0IGl0IGlzIGF0dGFjaGVkIHRvIHRoZSBkb2N1bWVudC5cbiAgICAgIGlmICghb3duZXJEb2N1bWVudFtsaXN0ZW5pbmdNYXJrZXJdKSB7XG4gICAgICAgIG93bmVyRG9jdW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9IHRydWU7XG4gICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoJ3NlbGVjdGlvbmNoYW5nZScsIGZhbHNlLCBvd25lckRvY3VtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIsIGlzRGVmZXJyZWRMaXN0ZW5lckZvckxlZ2FjeUZCU3VwcG9ydCkge1xuICB2YXIgbGlzdGVuZXIgPSBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcldpdGhQcmlvcml0eSh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncyk7IC8vIElmIHBhc3NpdmUgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZW4gdGhlIGV2ZW50IHdpbGwgYmVcbiAgLy8gYWN0aXZlIGFuZCBub3QgcGFzc2l2ZS5cblxuICB2YXIgaXNQYXNzaXZlTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkKSB7XG4gICAgLy8gQnJvd3NlcnMgaW50cm9kdWNlZCBhbiBpbnRlcnZlbnRpb24sIG1ha2luZyB0aGVzZSBldmVudHNcbiAgICAvLyBwYXNzaXZlIGJ5IGRlZmF1bHQgb24gZG9jdW1lbnQuIFJlYWN0IGRvZXNuJ3QgYmluZCB0aGVtXG4gICAgLy8gdG8gZG9jdW1lbnQgYW55bW9yZSwgYnV0IGNoYW5naW5nIHRoaXMgbm93IHdvdWxkIHVuZG9cbiAgICAvLyB0aGUgcGVyZm9ybWFuY2Ugd2lucyBmcm9tIHRoZSBjaGFuZ2UuIFNvIHdlIGVtdWxhdGVcbiAgICAvLyB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgbWFudWFsbHkgb24gdGhlIHJvb3RzIG5vdy5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5NjUxXG4gICAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3RvdWNobW92ZScgfHwgZG9tRXZlbnROYW1lID09PSAnd2hlZWwnKSB7XG4gICAgICBpc1Bhc3NpdmVMaXN0ZW5lciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyO1xuXG5cbiAgaWYgKGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lciwgaXNQYXNzaXZlTGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXIpIHtcbiAgcmV0dXJuIGdyYW5kQ29udGFpbmVyID09PSB0YXJnZXRDb250YWluZXIgfHwgZ3JhbmRDb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBncmFuZENvbnRhaW5lci5wYXJlbnROb2RlID09PSB0YXJnZXRDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGFuY2VzdG9ySW5zdCA9IHRhcmdldEluc3Q7XG5cbiAgaWYgKChldmVudFN5c3RlbUZsYWdzICYgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUpID09PSAwICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfTk9OX0RFTEVHQVRFRCkgPT09IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyTm9kZSA9IHRhcmdldENvbnRhaW5lcjsgLy8gSWYgd2UgYXJlIHVzaW5nIHRoZSBsZWdhY3kgRkIgc3VwcG9ydCBmbGFnLCB3ZVxuXG4gICAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBiZWxvdyBsb2dpYyBhdHRlbXB0cyB0byB3b3JrIG91dCBpZiB3ZSBuZWVkIHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHRhcmdldCBmaWJlciB0byBhIGRpZmZlcmVudCBhbmNlc3Rvci4gV2UgaGFkIHNpbWlsYXIgbG9naWNcbiAgICAgIC8vIGluIHRoZSBsZWdhY3kgZXZlbnQgc3lzdGVtLCBleGNlcHQgdGhlIGJpZyBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgIC8vIHN5c3RlbXMgaXMgdGhhdCB0aGUgbW9kZXJuIGV2ZW50IHN5c3RlbSBub3cgaGFzIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAgICAvLyBhdHRhY2hlZCB0byBlYWNoIFJlYWN0IFJvb3QgYW5kIFJlYWN0IFBvcnRhbCBSb290LiBUb2dldGhlcixcbiAgICAgIC8vIHRoZSBET00gbm9kZXMgcmVwcmVzZW50aW5nIHRoZXNlIHJvb3RzIGFyZSB0aGUgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBUbyBmaWd1cmUgb3V0IHdoaWNoIGFuY2VzdG9yIGluc3RhbmNlIHdlIHNob3VsZCB1c2UsIHdlIHRyYXZlcnNlXG4gICAgICAvLyB1cCB0aGUgZmliZXIgdHJlZSBmcm9tIHRoZSB0YXJnZXQgaW5zdGFuY2UgYW5kIGF0dGVtcHQgdG8gZmluZFxuICAgICAgLy8gcm9vdCBib3VuZGFyaWVzIHRoYXQgbWF0Y2ggdGhhdCBvZiBvdXIgY3VycmVudCBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIElmIHdlIGZpbmQgdGhhdCBcInJvb3RDb250YWluZXJcIiwgd2UgZmluZCB0aGUgcGFyZW50IGZpYmVyXG4gICAgICAvLyBzdWItdHJlZSBmb3IgdGhhdCByb290IGFuZCBtYWtlIHRoYXQgb3VyIGFuY2VzdG9yIGluc3RhbmNlLlxuICAgICAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0O1xuXG4gICAgICBtYWluTG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZVRhZyA9IG5vZGUudGFnO1xuXG4gICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0Um9vdCB8fCBub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoY29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgaXMgYSBwb3J0YWwsIGJ1dCBpdCdzIG5vdCB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvci5cbiAgICAgICAgICAgIC8vIE5vcm1hbGx5IHBvcnRhbHMgaGFuZGxlIHRoZWlyIG93biBldmVudHMgYWxsIHRoZSB3YXkgZG93biB0byB0aGUgcm9vdC5cbiAgICAgICAgICAgIC8vIFNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHN0b3Agbm93LiBIb3dldmVyLCB3ZSBkb24ndCBrbm93IGlmIHRoaXMgcG9ydGFsXG4gICAgICAgICAgICAvLyB3YXMgcGFydCBvZiAqb3VyKiByb290LlxuICAgICAgICAgICAgdmFyIGdyYW5kTm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICAgICAgICB3aGlsZSAoZ3JhbmROb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBncmFuZFRhZyA9IGdyYW5kTm9kZS50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGdyYW5kVGFnID09PSBIb3N0Um9vdCB8fCBncmFuZFRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgICAgIHZhciBncmFuZENvbnRhaW5lciA9IGdyYW5kTm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IgYW5kIHdlIGZvdW5kIGl0IGFzXG4gICAgICAgICAgICAgICAgICAvLyBhIHBhcmVudCBvZiB0aGUgUG9ydGFsLiBUaGF0IG1lYW5zIHdlIGNhbiBpZ25vcmUgaXQgYmVjYXVzZSB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFBvcnRhbCB3aWxsIGJ1YmJsZSB0aHJvdWdoIHRvIHVzLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdyYW5kTm9kZSA9IGdyYW5kTm9kZS5yZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBOb3cgd2UgbmVlZCB0byBmaW5kIGl0J3MgY29ycmVzcG9uZGluZyBob3N0IGZpYmVyIGluIHRoZSBvdGhlclxuICAgICAgICAgIC8vIHRyZWUuIFRvIGRvIHRoaXMgd2UgY2FuIHVzZSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSwgYnV0IHdlXG4gICAgICAgICAgLy8gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWJlciBpcyBhIGhvc3QgaW5zdGFuY2UsIG90aGVyd2lzZVxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdHJhdmVyc2UgdXAgdGhyb3VnaCB0aGUgRE9NIHRpbGwgd2UgZmluZCB0aGUgY29ycmVjdFxuICAgICAgICAgIC8vIG5vZGUgdGhhdCBpcyBmcm9tIHRoZSBvdGhlciB0cmVlLlxuXG5cbiAgICAgICAgICB3aGlsZSAoY29udGFpbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKGNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudE5vZGUudGFnO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50VGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHBhcmVudFRhZyA9PT0gSG9zdFRleHQgfHwgKHBhcmVudFRhZyA9PT0gSG9zdEhvaXN0YWJsZSApIHx8IHBhcmVudFRhZyA9PT0gSG9zdFNpbmdsZXRvbikge1xuICAgICAgICAgICAgICBub2RlID0gYW5jZXN0b3JJbnN0ID0gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgY29udGludWUgbWFpbkxvb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBiYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCBhbmNlc3Rvckluc3QpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUsIG5hdGl2ZUV2ZW50VHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5LCBuYXRpdmVFdmVudCkge1xuICB2YXIgY2FwdHVyZU5hbWUgPSByZWFjdE5hbWUgIT09IG51bGwgPyByZWFjdE5hbWUgKyAnQ2FwdHVyZScgOiBudWxsO1xuICB2YXIgcmVhY3RFdmVudE5hbWUgPSBpbkNhcHR1cmVQaGFzZSA/IGNhcHR1cmVOYW1lIDogcmVhY3ROYW1lO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldEZpYmVyO1xuICB2YXIgbGFzdEhvc3RDb21wb25lbnQgPSBudWxsOyAvLyBBY2N1bXVsYXRlIGFsbCBpbnN0YW5jZXMgYW5kIGxpc3RlbmVycyB2aWEgdGhlIHRhcmdldCAtPiByb290IHBhdGguXG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgdmFyIF9pbnN0YW5jZTIgPSBpbnN0YW5jZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMi5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTIudGFnOyAvLyBIYW5kbGUgbGlzdGVuZXJzIHRoYXQgYXJlIG9uIEhvc3RDb21wb25lbnRzIChpLmUuIDxkaXY+KVxuXG4gICAgaWYgKCh0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgKHRhZyA9PT0gSG9zdEhvaXN0YWJsZSApIHx8IHRhZyA9PT0gSG9zdFNpbmdsZXRvbikgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBsYXN0SG9zdENvbXBvbmVudCA9IHN0YXRlTm9kZTsgLy8gY3JlYXRlRXZlbnRIYW5kbGUgbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKHJlYWN0RXZlbnROYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdEV2ZW50TmFtZSk7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgbGFzdEhvc3RDb21wb25lbnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gSWYgd2UgYXJlIG9ubHkgYWNjdW11bGF0aW5nIGV2ZW50cyBmb3IgdGhlIHRhcmdldCwgdGhlbiB3ZSBkb24ndFxuICAgIC8vIGNvbnRpbnVlIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIHRoZSBSZWFjdCBmaWJlciB0cmVlIHRvIGZpbmQgb3RoZXJcbiAgICAvLyBsaXN0ZW5lcnMuXG5cblxuICAgIGlmIChhY2N1bXVsYXRlVGFyZ2V0T25seSkge1xuICAgICAgYnJlYWs7XG4gICAgfSAvLyBJZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGUgb25CZWZvcmVCbHVyIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gdGFrZVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJzO1xufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbi8vIC0gQ2hhbmdlRXZlbnRQbHVnaW5cbi8vIC0gU2VsZWN0RXZlbnRQbHVnaW5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IHByb2Nlc3MgdGhlc2UgcGx1Z2luc1xuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzICh2aWEgZW11bGF0aW9uKS5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUpIHtcbiAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICsgJ0NhcHR1cmUnO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldEZpYmVyOyAvLyBBY2N1bXVsYXRlIGFsbCBpbnN0YW5jZXMgYW5kIGxpc3RlbmVycyB2aWEgdGhlIHRhcmdldCAtPiByb290IHBhdGguXG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgdmFyIF9pbnN0YW5jZTMgPSBpbnN0YW5jZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMy5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTMudGFnOyAvLyBIYW5kbGUgbGlzdGVuZXJzIHRoYXQgYXJlIG9uIEhvc3RDb21wb25lbnRzIChpLmUuIDxkaXY+KVxuXG4gICAgaWYgKCh0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgKHRhZyA9PT0gSG9zdEhvaXN0YWJsZSApIHx8IHRhZyA9PT0gSG9zdFNpbmdsZXRvbikgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcbiAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZU5hbWUpO1xuXG4gICAgICBpZiAoY2FwdHVyZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdE5hbWUpO1xuXG4gICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluc3RhbmNlID0gaW5zdGFuY2UucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVycztcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgaWYgKGluc3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRvIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcbiAgICBpbnN0ID0gaW5zdC5yZXR1cm47IC8vIFRPRE86IElmIHRoaXMgaXMgYSBIb3N0Um9vdCB3ZSBtaWdodCB3YW50IHRvIGJhaWwgb3V0LlxuICAgIC8vIFRoYXQgaXMgZGVwZW5kaW5nIG9uIGlmIHdlIHdhbnQgbmVzdGVkIHN1YnRyZWVzIChsYXllcnMpIHRvIGJ1YmJsZVxuICAgIC8vIGV2ZW50cyB0byB0aGVpciBwYXJlbnQuIFdlIGNvdWxkIGFsc28gZ28gdGhyb3VnaCBwYXJlbnROb2RlIG9uIHRoZVxuICAgIC8vIGhvc3Qgbm9kZSBidXQgdGhhdCB3b3VsZG4ndCB3b3JrIGZvciBSZWFjdCBOYXRpdmUgYW5kIGRvZXNuJ3QgbGV0IHVzXG4gICAgLy8gZG8gdGhlIHBvcnRhbCBmZWF0dXJlLlxuICB9IHdoaWxlIChpbnN0ICYmIGluc3QudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIGluc3QudGFnICE9PSBIb3N0U2luZ2xldG9uKTtcblxuICBpZiAoaW5zdCkge1xuICAgIHJldHVybiBpbnN0O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIFJldHVybiB0aGUgbG93ZXN0IGNvbW1vbiBhbmNlc3RvciBvZiBBIGFuZCBCLCBvciBudWxsIGlmIHRoZXkgYXJlIGluXG4gKiBkaWZmZXJlbnQgdHJlZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMb3dlc3RDb21tb25BbmNlc3RvcihpbnN0QSwgaW5zdEIpIHtcbiAgdmFyIG5vZGVBID0gaW5zdEE7XG4gIHZhciBub2RlQiA9IGluc3RCO1xuICB2YXIgZGVwdGhBID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQSA9IG5vZGVBOyB0ZW1wQTsgdGVtcEEgPSBnZXRQYXJlbnQodGVtcEEpKSB7XG4gICAgZGVwdGhBKys7XG4gIH1cblxuICB2YXIgZGVwdGhCID0gMDtcblxuICBmb3IgKHZhciB0ZW1wQiA9IG5vZGVCOyB0ZW1wQjsgdGVtcEIgPSBnZXRQYXJlbnQodGVtcEIpKSB7XG4gICAgZGVwdGhCKys7XG4gIH0gLy8gSWYgQSBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQSAtIGRlcHRoQiA+IDApIHtcbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgZGVwdGhBLS07XG4gIH0gLy8gSWYgQiBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuXG5cbiAgd2hpbGUgKGRlcHRoQiAtIGRlcHRoQSA+IDApIHtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gICAgZGVwdGhCLS07XG4gIH0gLy8gV2FsayBpbiBsb2Nrc3RlcCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG5cblxuICB2YXIgZGVwdGggPSBkZXB0aEE7XG5cbiAgd2hpbGUgKGRlcHRoLS0pIHtcbiAgICBpZiAobm9kZUEgPT09IG5vZGVCIHx8IG5vZGVCICE9PSBudWxsICYmIG5vZGVBID09PSBub2RlQi5hbHRlcm5hdGUpIHtcbiAgICAgIHJldHVybiBub2RlQTtcbiAgICB9XG5cbiAgICBub2RlQSA9IGdldFBhcmVudChub2RlQSk7XG4gICAgbm9kZUIgPSBnZXRQYXJlbnQobm9kZUIpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZXZlbnQsIHRhcmdldCwgY29tbW9uLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50Ll9yZWFjdE5hbWU7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0O1xuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIGlmIChpbnN0YW5jZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgX2luc3RhbmNlNCA9IGluc3RhbmNlLFxuICAgICAgICBhbHRlcm5hdGUgPSBfaW5zdGFuY2U0LmFsdGVybmF0ZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlNC5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTQudGFnO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKCh0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgKHRhZyA9PT0gSG9zdEhvaXN0YWJsZSApIHx8IHRhZyA9PT0gSG9zdFNpbmdsZXRvbikgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcblxuICAgICAgaWYgKGluQ2FwdHVyZVBoYXNlKSB7XG4gICAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGNhcHR1cmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWluQ2FwdHVyZVBoYXNlKSB7XG4gICAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGJ1YmJsZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gIH1cbn0gLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yOlxuLy8gLSBFbnRlckxlYXZlRXZlbnRQbHVnaW5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IHByb2Nlc3MgdGhpcyBwbHVnaW5cbi8vIGluIHRoZSBidWJibGUgcGhhc2UsIHNvIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSB0d29cbi8vIHBoYXNlIGV2ZW50IGxpc3RlbmVycy5cblxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZVR3b1BoYXNlTGlzdGVuZXJzKGRpc3BhdGNoUXVldWUsIGxlYXZlRXZlbnQsIGVudGVyRXZlbnQsIGZyb20sIHRvKSB7XG4gIHZhciBjb21tb24gPSBmcm9tICYmIHRvID8gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoZnJvbSwgdG8pIDogbnVsbDtcblxuICBpZiAoZnJvbSAhPT0gbnVsbCkge1xuICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbGVhdmVFdmVudCwgZnJvbSwgY29tbW9uLCBmYWxzZSk7XG4gIH1cblxuICBpZiAodG8gIT09IG51bGwgJiYgZW50ZXJFdmVudCAhPT0gbnVsbCkge1xuICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZW50ZXJFdmVudCwgdG8sIGNvbW1vbiwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgY2FwdHVyZSkge1xuICByZXR1cm4gZG9tRXZlbnROYW1lICsgXCJfX1wiICsgKGNhcHR1cmUgPyAnY2FwdHVyZScgOiAnYnViYmxlJyk7XG59XG5cbnZhciBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gZmFsc2U7XG52YXIgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gZmFsc2U7XG52YXIgZGlkV2FybkZvcm1BY3Rpb25UeXBlID0gZmFsc2U7XG52YXIgZGlkV2FybkZvcm1BY3Rpb25OYW1lID0gZmFsc2U7XG52YXIgZGlkV2FybkZvcm1BY3Rpb25UYXJnZXQgPSBmYWxzZTtcbnZhciBkaWRXYXJuRm9ybUFjdGlvbk1ldGhvZCA9IGZhbHNlO1xudmFyIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmc7XG5cbntcbiAgLy8gSUUgMTEgcGFyc2VzICYgbm9ybWFsaXplcyB0aGUgc3R5bGUgYXR0cmlidXRlIGFzIG9wcG9zZWQgdG8gb3RoZXJcbiAgLy8gYnJvd3NlcnMuIEl0IGFkZHMgc3BhY2VzIGFuZCBzb3J0cyB0aGUgcHJvcGVydGllcyBpbiBzb21lXG4gIC8vIG5vbi1hbHBoYWJldGljYWwgb3JkZXIuIEhhbmRsaW5nIHRoYXQgd291bGQgcmVxdWlyZSBzb3J0aW5nIENTU1xuICAvLyBwcm9wZXJ0aWVzIGluIHRoZSBjbGllbnQgJiBzZXJ2ZXIgdmVyc2lvbnMgb3IgYXBwbHlpbmdcbiAgLy8gYGV4cGVjdGVkU3R5bGVgIHRvIGEgdGVtcG9yYXJ5IERPTSBub2RlIHRvIHJlYWQgaXRzIGBzdHlsZWAgYXR0cmlidXRlXG4gIC8vIG5vcm1hbGl6ZWQuIFNpbmNlIGl0IG9ubHkgYWZmZWN0cyBJRSwgd2UncmUgc2tpcHBpbmcgc3R5bGUgd2FybmluZ3NcbiAgLy8gaW4gdGhhdCBicm93c2VyIGNvbXBsZXRlbHkgaW4gZmF2b3Igb2YgZG9pbmcgYWxsIHRoYXQgd29yay5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE4MDdcbiAgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZyA9IGNhblVzZURPTSAmJiAhZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcywge1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llczogcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM6IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5jb250ZW50RWRpdGFibGUgJiYgIXByb3BzLnN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyAmJiBwcm9wcy5jaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSAnICsgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgKyAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgKyAncHJvYmFibHkgbm90IGludGVudGlvbmFsLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZvcm1BY3Rpb25JbkRldmVsb3BtZW50KHRhZywga2V5LCB2YWx1ZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2Zvcm0nKSB7XG4gICAgICBpZiAoa2V5ID09PSAnZm9ybUFjdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ1lvdSBjYW4gb25seSBwYXNzIHRoZSBmb3JtQWN0aW9uIHByb3AgdG8gPGlucHV0PiBvciA8YnV0dG9uPi4gVXNlIHRoZSBhY3Rpb24gcHJvcCBvbiA8Zm9ybT4uJyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoKHByb3BzLmVuY1R5cGUgIT0gbnVsbCB8fCBwcm9wcy5tZXRob2QgIT0gbnVsbCkgJiYgIWRpZFdhcm5Gb3JtQWN0aW9uTWV0aG9kKSB7XG4gICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25NZXRob2QgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ0Nhbm5vdCBzcGVjaWZ5IGEgZW5jVHlwZSBvciBtZXRob2QgZm9yIGEgZm9ybSB0aGF0IHNwZWNpZmllcyBhICcgKyAnZnVuY3Rpb24gYXMgdGhlIGFjdGlvbi4gUmVhY3QgcHJvdmlkZXMgdGhvc2UgYXV0b21hdGljYWxseS4gJyArICdUaGV5IHdpbGwgZ2V0IG92ZXJyaWRkZW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMudGFyZ2V0ICE9IG51bGwgJiYgIWRpZFdhcm5Gb3JtQWN0aW9uVGFyZ2V0KSB7XG4gICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25UYXJnZXQgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ0Nhbm5vdCBzcGVjaWZ5IGEgdGFyZ2V0IGZvciBhIGZvcm0gdGhhdCBzcGVjaWZpZXMgYSBmdW5jdGlvbiBhcyB0aGUgYWN0aW9uLiAnICsgJ1RoZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSB3aW5kb3cuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICdidXR0b24nKSB7XG4gICAgICBpZiAoa2V5ID09PSAnYWN0aW9uJykge1xuICAgICAgICBlcnJvcignWW91IGNhbiBvbmx5IHBhc3MgdGhlIGFjdGlvbiBwcm9wIHRvIDxmb3JtPi4gVXNlIHRoZSBmb3JtQWN0aW9uIHByb3Agb24gPGlucHV0PiBvciA8YnV0dG9uPi4nKTtcbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSAnaW5wdXQnICYmIHByb3BzLnR5cGUgIT09ICdzdWJtaXQnICYmIHByb3BzLnR5cGUgIT09ICdpbWFnZScgJiYgIWRpZFdhcm5Gb3JtQWN0aW9uVHlwZSkge1xuICAgICAgICBkaWRXYXJuRm9ybUFjdGlvblR5cGUgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdBbiBpbnB1dCBjYW4gb25seSBzcGVjaWZ5IGEgZm9ybUFjdGlvbiBhbG9uZyB3aXRoIHR5cGU9XCJzdWJtaXRcIiBvciB0eXBlPVwiaW1hZ2VcIi4nKTtcbiAgICAgIH0gZWxzZSBpZiAodGFnID09PSAnYnV0dG9uJyAmJiBwcm9wcy50eXBlICE9IG51bGwgJiYgcHJvcHMudHlwZSAhPT0gJ3N1Ym1pdCcgJiYgIWRpZFdhcm5Gb3JtQWN0aW9uVHlwZSkge1xuICAgICAgICBkaWRXYXJuRm9ybUFjdGlvblR5cGUgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdBIGJ1dHRvbiBjYW4gb25seSBzcGVjaWZ5IGEgZm9ybUFjdGlvbiBhbG9uZyB3aXRoIHR5cGU9XCJzdWJtaXRcIiBvciBubyB0eXBlLicpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRnVuY3Rpb24gZm9ybSBhY3Rpb25zIGNhbm5vdCBjb250cm9sIHRoZSBmb3JtIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKHByb3BzLm5hbWUgIT0gbnVsbCAmJiAhZGlkV2FybkZvcm1BY3Rpb25OYW1lKSB7XG4gICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25OYW1lID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdDYW5ub3Qgc3BlY2lmeSBhIFwibmFtZVwiIHByb3AgZm9yIGEgYnV0dG9uIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgYSBmb3JtQWN0aW9uLiAnICsgJ1JlYWN0IG5lZWRzIGl0IHRvIGVuY29kZSB3aGljaCBhY3Rpb24gc2hvdWxkIGJlIGludm9rZWQuIEl0IHdpbGwgZ2V0IG92ZXJyaWRkZW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHByb3BzLmZvcm1FbmNUeXBlICE9IG51bGwgfHwgcHJvcHMuZm9ybU1ldGhvZCAhPSBudWxsKSAmJiAhZGlkV2FybkZvcm1BY3Rpb25NZXRob2QpIHtcbiAgICAgICAgICBkaWRXYXJuRm9ybUFjdGlvbk1ldGhvZCA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignQ2Fubm90IHNwZWNpZnkgYSBmb3JtRW5jVHlwZSBvciBmb3JtTWV0aG9kIGZvciBhIGJ1dHRvbiB0aGF0IHNwZWNpZmllcyBhICcgKyAnZnVuY3Rpb24gYXMgYSBmb3JtQWN0aW9uLiBSZWFjdCBwcm92aWRlcyB0aG9zZSBhdXRvbWF0aWNhbGx5LiBUaGV5IHdpbGwgZ2V0IG92ZXJyaWRkZW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuZm9ybVRhcmdldCAhPSBudWxsICYmICFkaWRXYXJuRm9ybUFjdGlvblRhcmdldCkge1xuICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVGFyZ2V0ID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdDYW5ub3Qgc3BlY2lmeSBhIGZvcm1UYXJnZXQgZm9yIGEgYnV0dG9uIHRoYXQgc3BlY2lmaWVzIGEgZnVuY3Rpb24gYXMgYSBmb3JtQWN0aW9uLiAnICsgJ1RoZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSB3aW5kb3cuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGtleSA9PT0gJ2FjdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ1lvdSBjYW4gb25seSBwYXNzIHRoZSBhY3Rpb24gcHJvcCB0byA8Zm9ybT4uJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignWW91IGNhbiBvbmx5IHBhc3MgdGhlIGZvcm1BY3Rpb24gcHJvcCB0byA8aW5wdXQ+IG9yIDxidXR0b24+LicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcE5hbWUsIHNlcnZlclZhbHVlLCBjbGllbnRWYWx1ZSkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNlcnZlclZhbHVlID09PSBjbGllbnRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkQ2xpZW50VmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VmFsdWUpO1xuICAgIHZhciBub3JtYWxpemVkU2VydmVyVmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVmFsdWUpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9PT0gbm9ybWFsaXplZENsaWVudFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Byb3AgYCVzYCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6ICVzIENsaWVudDogJXMnLCBwcm9wTmFtZSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZFNlcnZlclZhbHVlKSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZENsaWVudFZhbHVlKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2FybkZvckV4dHJhQXR0cmlidXRlcyhhdHRyaWJ1dGVOYW1lcykge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGF0dHJpYnV0ZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgfSk7XG5cbiAgICBlcnJvcignRXh0cmEgYXR0cmlidXRlcyBmcm9tIHRoZSBzZXJ2ZXI6ICVzJywgbmFtZXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihyZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICB7XG4gICAgaWYgKGxpc3RlbmVyID09PSBmYWxzZSkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYGZhbHNlYC5cXG5cXG4nICsgJ0lmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCAnICsgJ3Bhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLicsIHJlZ2lzdHJhdGlvbk5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGAlc2AgdHlwZS4nLCByZWdpc3RyYXRpb25OYW1lLCB0eXBlb2YgbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxufSAvLyBQYXJzZSB0aGUgSFRNTCBhbmQgcmVhZCBpdCBiYWNrIHRvIG5vcm1hbGl6ZSB0aGUgSFRNTCBzdHJpbmcgc28gdGhhdCBpdFxuLy8gY2FuIGJlIHVzZWQgZm9yIGNvbXBhcmlzb24uXG5cblxuZnVuY3Rpb24gbm9ybWFsaXplSFRNTChwYXJlbnQsIGh0bWwpIHtcbiAge1xuICAgIC8vIFdlIGNvdWxkIGhhdmUgY3JlYXRlZCBhIHNlcGFyYXRlIGRvY3VtZW50IGhlcmUgdG8gYXZvaWRcbiAgICAvLyByZS1pbml0aWFsaXppbmcgY3VzdG9tIGVsZW1lbnRzIGlmIHRoZXkgZXhpc3QuIEJ1dCB0aGlzIGJyZWFrc1xuICAgIC8vIGhvdyA8bm9zY3JpcHQ+IGlzIGJlaW5nIGhhbmRsZWQuIFNvIHdlIHVzZSB0aGUgc2FtZSBkb2N1bWVudC5cbiAgICAvLyBTZWUgdGhlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTExNTcuXG4gICAgdmFyIHRlc3RFbGVtZW50ID0gcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSF9OQU1FU1BBQ0UgfHwgcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSA/IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhwYXJlbnQubmFtZXNwYWNlVVJJLCBwYXJlbnQudGFnTmFtZSkgOiBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHBhcmVudC50YWdOYW1lKTtcbiAgICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiB0ZXN0RWxlbWVudC5pbm5lckhUTUw7XG4gIH1cbn0gLy8gSFRNTCBwYXJzaW5nIG5vcm1hbGl6ZXMgQ1IgYW5kIENSTEYgdG8gTEYuXG4vLyBJdCBhbHNvIGNhbiB0dXJuIFxcdTAwMDAgaW50byBcXHVGRkZEIGluc2lkZSBhdHRyaWJ1dGVzLlxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3NpbmdsZS1wYWdlLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtXG4vLyBJZiB3ZSBoYXZlIGEgbWlzbWF0Y2gsIGl0IG1pZ2h0IGJlIGNhdXNlZCBieSB0aGF0LlxuLy8gV2Ugd2lsbCBzdGlsbCBwYXRjaCB1cCBpbiB0aGlzIGNhc2UgYnV0IG5vdCBmaXJlIHRoZSB3YXJuaW5nLlxuXG5cbnZhciBOT1JNQUxJWkVfTkVXTElORVNfUkVHRVggPSAvXFxyXFxuPy9nO1xudmFyIE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCA9IC9cXHUwMDAwfFxcdUZGRkQvZztcblxuZnVuY3Rpb24gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKG1hcmt1cCkge1xuICB7XG4gICAgY2hlY2tIdG1sU3RyaW5nQ29lcmNpb24obWFya3VwKTtcbiAgfVxuXG4gIHZhciBtYXJrdXBTdHJpbmcgPSB0eXBlb2YgbWFya3VwID09PSAnc3RyaW5nJyA/IG1hcmt1cCA6ICcnICsgbWFya3VwO1xuICByZXR1cm4gbWFya3VwU3RyaW5nLnJlcGxhY2UoTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYLCAnXFxuJykucmVwbGFjZShOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVgsICcnKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tGb3JVbm1hdGNoZWRUZXh0KHNlcnZlclRleHQsIGNsaWVudFRleHQsIGlzQ29uY3VycmVudE1vZGUsIHNob3VsZFdhcm5EZXYpIHtcbiAgdmFyIG5vcm1hbGl6ZWRDbGllbnRUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFRleHQpO1xuICB2YXIgbm9ybWFsaXplZFNlcnZlclRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVGV4dCk7XG5cbiAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID09PSBub3JtYWxpemVkQ2xpZW50VGV4dCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzaG91bGRXYXJuRGV2KSB7XG4gICAge1xuICAgICAgaWYgKCFkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1RleHQgY29udGVudCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6IFwiJXNcIiBDbGllbnQ6IFwiJXNcIicsIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0LCBub3JtYWxpemVkQ2xpZW50VGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ29uY3VycmVudE1vZGUgJiYgZW5hYmxlQ2xpZW50UmVuZGVyRmFsbGJhY2tPblRleHRNaXNtYXRjaCkge1xuICAgIC8vIEluIGNvbmN1cnJlbnQgcm9vdHMsIHdlIHRocm93IHdoZW4gdGhlcmUncyBhIHRleHQgbWlzbWF0Y2ggYW5kIHJldmVydCB0b1xuICAgIC8vIGNsaWVudCByZW5kZXJpbmcsIHVwIHRvIHRoZSBuZWFyZXN0IFN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBjb250ZW50IGRvZXMgbm90IG1hdGNoIHNlcnZlci1yZW5kZXJlZCBIVE1MLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vb3AkMSgpIHt9XG5cbmZ1bmN0aW9uIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KG5vZGUpIHtcbiAgLy8gTW9iaWxlIFNhZmFyaSBkb2VzIG5vdCBmaXJlIHByb3Blcmx5IGJ1YmJsZSBjbGljayBldmVudHMgb25cbiAgLy8gbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzLCB3aGljaCBtZWFucyBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXJzIGRvIG5vdFxuICAvLyBmaXJlLiBUaGUgd29ya2Fyb3VuZCBmb3IgdGhpcyBidWcgaW52b2x2ZXMgYXR0YWNoaW5nIGFuIGVtcHR5IGNsaWNrXG4gIC8vIGxpc3RlbmVyIG9uIHRoZSB0YXJnZXQgbm9kZS5cbiAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2ZW50X2RlbC5odG1sXG4gIC8vIEp1c3Qgc2V0IGl0IHVzaW5nIHRoZSBvbmNsaWNrIHByb3BlcnR5IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBtYW5hZ2UgYW55XG4gIC8vIGJvb2trZWVwaW5nIGZvciBpdC4gTm90IHN1cmUgaWYgd2UgbmVlZCB0byBjbGVhciBpdCB3aGVuIHRoZSBsaXN0ZW5lciBpc1xuICAvLyByZW1vdmVkLlxuICAvLyBUT0RPOiBPbmx5IGRvIHRoaXMgZm9yIHRoZSByZWxldmFudCBTYWZhcmlzIG1heWJlP1xuICBub2RlLm9uY2xpY2sgPSBub29wJDE7XG59XG52YXIgeGxpbmtOYW1lc3BhY2UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG52YXIgeG1sTmFtZXNwYWNlID0gJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSc7XG5cbmZ1bmN0aW9uIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBrZXksIHZhbHVlLCBwcm9wcywgcHJldlZhbHVlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnY2hpbGRyZW4nOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRlVGV4dE5lc3RpbmcodmFsdWUsIHRhZyk7XG4gICAgICAgICAgfSAvLyBBdm9pZCBzZXR0aW5nIGluaXRpYWwgdGV4dENvbnRlbnQgd2hlbiB0aGUgdGV4dCBpcyBlbXB0eS4gSW4gSUUxMSBzZXR0aW5nXG4gICAgICAgICAgLy8gdGV4dENvbnRlbnQgb24gYSA8dGV4dGFyZWE+IHdpbGwgY2F1c2UgdGhlIHBsYWNlaG9sZGVyIHRvIG5vdFxuICAgICAgICAgIC8vIHNob3cgd2l0aGluIHRoZSA8dGV4dGFyZWE+IHVudGlsIGl0IGhhcyBiZWVuIGZvY3VzZWQgYW5kIGJsdXJyZWQgYWdhaW4uXG4gICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NzMxI2lzc3VlY29tbWVudC0yNTQ4NzQ1NTNcblxuXG4gICAgICAgICAgdmFyIGNhblNldFRleHRDb250ZW50ID0gdGFnICE9PSAnYm9keScgJiYgKHRhZyAhPT0gJ3RleHRhcmVhJyB8fCB2YWx1ZSAhPT0gJycpO1xuXG4gICAgICAgICAgaWYgKGNhblNldFRleHRDb250ZW50KSB7XG4gICAgICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWxpZGF0ZVRleHROZXN0aW5nKCcnICsgdmFsdWUsIHRhZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9jYW5TZXRUZXh0Q29udGVudCA9IHRhZyAhPT0gJ2JvZHknO1xuXG4gICAgICAgICAgaWYgKF9jYW5TZXRUZXh0Q29udGVudCkge1xuICAgICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycgKyB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgLy8gVGhlc2UgYXJlIHZlcnkgY29tbW9uIHByb3BzIGFuZCB0aGVyZWZvcmUgYXJlIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN3aXRjaC5cbiAgICAvLyBUT0RPOiBhcmlhLWxhYmVsIGlzIGEgdmVyeSBjb21tb24gcHJvcCBidXQgYWxsb3dzIGJvb2xlYW5zIHNvIGlzIG5vdCBsaWtlIHRoZSBvdGhlcnNcbiAgICAvLyBidXQgc2hvdWxkIGlkZWFsbHkgZ28gaW4gdGhpcyBsaXN0IHRvby5cblxuICAgIGNhc2UgJ2NsYXNzTmFtZSc6XG4gICAgICBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKGRvbUVsZW1lbnQsICdjbGFzcycsIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGFiSW5kZXgnOlxuICAgICAgLy8gVGhpcyBoYXMgdG8gYmUgY2FzZSBzZW5zaXRpdmUgaW4gU1ZHLlxuICAgICAgc2V0VmFsdWVGb3JLbm93bkF0dHJpYnV0ZShkb21FbGVtZW50LCAndGFiaW5kZXgnLCB2YWx1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2Rpcic6XG4gICAgY2FzZSAncm9sZSc6XG4gICAgY2FzZSAndmlld0JveCc6XG4gICAgY2FzZSAnd2lkdGgnOlxuICAgIGNhc2UgJ2hlaWdodCc6XG4gICAgICB7XG4gICAgICAgIHNldFZhbHVlRm9yS25vd25BdHRyaWJ1dGUoZG9tRWxlbWVudCwga2V5LCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc3R5bGUnOlxuICAgICAge1xuICAgICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCB2YWx1ZSwgcHJldlZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgLy8gVGhlc2UgYXR0cmlidXRlcyBhY2NlcHQgVVJMcy4gVGhlc2UgbXVzdCBub3QgYWxsb3cgamF2YXNjcmlwdDogVVJMUy5cblxuICAgIGNhc2UgJ3NyYyc6XG4gICAgY2FzZSAnaHJlZic6XG4gICAgICB7XG5cbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIGBzZXRBdHRyaWJ1dGVgIHdpdGggb2JqZWN0cyBiZWNvbWVzIG9ubHkgYFtvYmplY3RdYCBpbiBJRTgvOSxcbiAgICAgICAgLy8gKCcnICsgdmFsdWUpIG1ha2VzIGl0IG91dHB1dCB0aGUgY29ycmVjdCB0b1N0cmluZygpLXZhbHVlLlxuXG5cbiAgICAgICAge1xuICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2FuaXRpemVkVmFsdWUgPSBzYW5pdGl6ZVVSTCgnJyArIHZhbHVlKTtcbiAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBzYW5pdGl6ZWRWYWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnYWN0aW9uJzpcbiAgICBjYXNlICdmb3JtQWN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHRoZXNlIHNwZWNpYWwgY2FzZXMgdG8gdGhlIGZvcm0sIGlucHV0IGFuZCBidXR0b24gdGFncy5cbiAgICAgICAge1xuICAgICAgICAgIHZhbGlkYXRlRm9ybUFjdGlvbkluRGV2ZWxvcG1lbnQodGFnLCBrZXksIHZhbHVlLCBwcm9wcyk7XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gU2V0IGEgamF2YXNjcmlwdCBVUkwgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nLiBXZSBkb24ndCBleHBlY3QgdGhpcyB0byBiZSBpbnZva2VkXG4gICAgICAgICAgICAvLyBiZWNhdXNlIHdlJ2xsIHByZXZlbnREZWZhdWx0LCBidXQgaXQgY2FuIGhhcHBlbiBpZiBhIGZvcm0gaXMgbWFudWFsbHkgc3VibWl0dGVkIG9yXG4gICAgICAgICAgICAvLyBpZiBzb21lb25lIGNhbGxzIHN0b3BQcm9wYWdhdGlvbiBiZWZvcmUgUmVhY3QgZ2V0cyB0aGUgZXZlbnQuXG4gICAgICAgICAgICAvLyBJZiBDU1AgaXMgdXNlZCB0byBibG9jayBqYXZhc2NyaXB0OiBVUkxzIHRoYXQncyBmaW5lIHRvby4gSXQganVzdCB3b24ndCBzaG93IHRoaXNcbiAgICAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2UgYnV0IHRoZSBVUkwgd2lsbCBiZSBsb2dnZWQuXG4gICAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zY3JpcHQtdXJsXG4gICAgICAgICAgICBcImphdmFzY3JpcHQ6dGhyb3cgbmV3IEVycm9yKCdcIiArICdBIFJlYWN0IGZvcm0gd2FzIHVuZXhwZWN0ZWRseSBzdWJtaXR0ZWQuIElmIHlvdSBjYWxsZWQgZm9ybS5zdWJtaXQoKSBtYW51YWxseSwgJyArIFwiY29uc2lkZXIgdXNpbmcgZm9ybS5yZXF1ZXN0U3VibWl0KCkgaW5zdGVhZC4gSWYgeW91XFxcXCdyZSB0cnlpbmcgdG8gdXNlIFwiICsgJ2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpIGluIGEgc3VibWl0IGV2ZW50IGhhbmRsZXIsIGNvbnNpZGVyIGFsc28gY2FsbGluZyAnICsgJ2V2ZW50LnByZXZlbnREZWZhdWx0KCkuJyArIFwiJylcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcmV2VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UncmUgc3dpdGNoaW5nIG9mZiBhIFNlcnZlciBBY3Rpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBoeWRyYXRlZC5cbiAgICAgICAgICAgIC8vIFRoZSBzZXJ2ZXIgY29udHJvbCB0aGVzZSBmaWVsZHMgZHVyaW5nIFNTUiB0aGF0IGFyZSBub3cgdHJhaWxpbmcuXG4gICAgICAgICAgICAvLyBUaGUgcmVndWxhciBkaWZmaW5nIGRvZXNuJ3QgYXBwbHkgc2luY2Ugd2UgY29tcGFyZSBhZ2FpbnN0IHRoZSBwcmV2aW91cyBwcm9wcy5cbiAgICAgICAgICAgIC8vIEluc3RlYWQsIHdlIG5lZWQgdG8gZm9yY2UgdGhlbSB0byBiZSBzZXQgdG8gd2hhdGV2ZXIgdGhleSBzaG91bGQgYmUgbm93LlxuICAgICAgICAgICAgLy8gVGhpcyB3b3VsZCBiZSBhIGxvdCBjbGVhbmVyIGlmIHdlIGRpZCB0aGlzIHdob2xlIGZvcmsgaW4gdGhlIHBlci10YWcgYXBwcm9hY2guXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnZm9ybUFjdGlvbicpIHtcbiAgICAgICAgICAgICAgaWYgKHRhZyAhPT0gJ2lucHV0Jykge1xuICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIG5hbWUgaGVyZSBpc24ndCBjb21wbGV0ZWx5IHNhZmUgZm9yIGlucHV0cyBpZiB0aGlzIGlzIHN3aXRjaGluZ1xuICAgICAgICAgICAgICAgIC8vIHRvIGJlY29tZSBhIHJhZGlvIGJ1dHRvbi4gSW4gdGhhdCBjYXNlIHdlIGxldCB0aGUgdGFnIGJhc2VkIG92ZXJyaWRlIHRha2VcbiAgICAgICAgICAgICAgICAvLyBjb250cm9sLlxuICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCAnbmFtZScsIHByb3BzLm5hbWUsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCAnZm9ybUVuY1R5cGUnLCBwcm9wcy5mb3JtRW5jVHlwZSwgcHJvcHMsIG51bGwpO1xuICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgJ2Zvcm1NZXRob2QnLCBwcm9wcy5mb3JtTWV0aG9kLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCAnZm9ybVRhcmdldCcsIHByb3BzLmZvcm1UYXJnZXQsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCAnZW5jVHlwZScsIHByb3BzLmVuY1R5cGUsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsICdtZXRob2QnLCBwcm9wcy5tZXRob2QsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsICd0YXJnZXQnLCBwcm9wcy50YXJnZXQsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCAhZW5hYmxlRm9ybUFjdGlvbnMgIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIGBzZXRBdHRyaWJ1dGVgIHdpdGggb2JqZWN0cyBiZWNvbWVzIG9ubHkgYFtvYmplY3RdYCBpbiBJRTgvOSxcbiAgICAgICAgLy8gKCcnICsgdmFsdWUpIG1ha2VzIGl0IG91dHB1dCB0aGUgY29ycmVjdCB0b1N0cmluZygpLXZhbHVlLlxuXG5cbiAgICAgICAge1xuICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3Nhbml0aXplZFZhbHVlID0gc2FuaXRpemVVUkwoJycgKyB2YWx1ZSk7XG5cbiAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBfc2FuaXRpemVkVmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ29uQ2xpY2snOlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb25TY3JvbGwnOlxuICAgICAge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb25TY3JvbGxFbmQnOlxuICAgICAge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGxlbmQnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnOlxuICAgICAge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8ICEoJ19faHRtbCcgaW4gdmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Bwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBpbiB0aGUgZm9ybSBge19faHRtbDogLi4ufWAuICcgKyAnUGxlYXNlIHZpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kYW5nZXJvdXNseS1zZXQtaW5uZXItaHRtbCAnICsgJ2ZvciBtb3JlIGluZm9ybWF0aW9uLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXh0SHRtbCA9IHZhbHVlLl9faHRtbDtcblxuICAgICAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocHJvcHMuY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IHNldCBvbmUgb2YgYGNoaWxkcmVuYCBvciBgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNldElubmVySFRNTCQxKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAvLyBOb3RlOiBgb3B0aW9uLnNlbGVjdGVkYCBpcyBub3QgdXBkYXRlZCBpZiBgc2VsZWN0Lm11bHRpcGxlYCBpc1xuICAgIC8vIGRpc2FibGVkIHdpdGggYHJlbW92ZUF0dHJpYnV0ZWAuIFdlIGhhdmUgc3BlY2lhbCBsb2dpYyBmb3IgaGFuZGxpbmcgdGhpcy5cblxuICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgIHtcbiAgICAgICAgZG9tRWxlbWVudC5tdWx0aXBsZSA9IHZhbHVlICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdzeW1ib2wnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ211dGVkJzpcbiAgICAgIHtcbiAgICAgICAgZG9tRWxlbWVudC5tdXRlZCA9IHZhbHVlICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdzeW1ib2wnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyc6XG4gICAgY2FzZSAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJzpcbiAgICBjYXNlICdkZWZhdWx0VmFsdWUnOiAvLyBSZXNlcnZlZFxuXG4gICAgY2FzZSAnZGVmYXVsdENoZWNrZWQnOlxuICAgIGNhc2UgJ2lubmVySFRNTCc6XG4gICAgICB7XG4gICAgICAgIC8vIE5vb3BcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdhdXRvRm9jdXMnOlxuICAgICAge1xuICAgICAgICAvLyBXZSBwb2x5ZmlsbCBpdCBzZXBhcmF0ZWx5IG9uIHRoZSBjbGllbnQgZHVyaW5nIGNvbW1pdC5cbiAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBleGNsdWRlZCBpdCBpbiB0aGUgcHJvcGVydHkgbGlzdCBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIGFkZGluZyBhIHNwZWNpYWwgY2FzZSBoZXJlLCBidXQgdGhlbiBpdCB3b3VsZG4ndCBiZSBlbWl0dGVkXG4gICAgICAgIC8vIG9uIHNlcnZlciByZW5kZXJpbmcgKGJ1dCB3ZSAqZG8qIHdhbnQgdG8gZW1pdCBpdCBpbiBTU1IpLlxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ3hsaW5rSHJlZic6XG4gICAgICB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBgc2V0QXR0cmlidXRlYCB3aXRoIG9iamVjdHMgYmVjb21lcyBvbmx5IGBbb2JqZWN0XWAgaW4gSUU4LzksXG4gICAgICAgIC8vICgnJyArIHZhbHVlKSBtYWtlcyBpdCBvdXRwdXQgdGhlIGNvcnJlY3QgdG9TdHJpbmcoKS12YWx1ZS5cblxuXG4gICAgICAgIHtcbiAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9zYW5pdGl6ZWRWYWx1ZTIgPSBzYW5pdGl6ZVVSTCgnJyArIHZhbHVlKTtcblxuICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZU5TKHhsaW5rTmFtZXNwYWNlLCAneGxpbms6aHJlZicsIF9zYW5pdGl6ZWRWYWx1ZTIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2NvbnRlbnRFZGl0YWJsZSc6XG4gICAgY2FzZSAnc3BlbGxDaGVjayc6XG4gICAgY2FzZSAnZHJhZ2dhYmxlJzpcbiAgICBjYXNlICd2YWx1ZSc6XG4gICAgY2FzZSAnYXV0b1JldmVyc2UnOlxuICAgIGNhc2UgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnOlxuICAgIGNhc2UgJ2ZvY3VzYWJsZSc6XG4gICAgY2FzZSAncHJlc2VydmVBbHBoYSc6XG4gICAgICB7XG4gICAgICAgIC8vIEJvb2xlYW5pc2ggU3RyaW5nXG4gICAgICAgIC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4gICAgICAgIC8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbiAgICAgICAgLy8gdGhlc2UgYXJlbid0IGJvb2xlYW4gYXR0cmlidXRlcyAodGhleSBhcmUgY29lcmNlZCB0byBzdHJpbmdzKS5cbiAgICAgICAgLy8gVGhlIFNWRyBhdHRyaWJ1dGVzIGFyZSBjYXNlLXNlbnNpdGl2ZS4gU2luY2UgdGhlIEhUTUwgYXR0cmlidXRlcyBhcmVcbiAgICAgICAgLy8gaW5zZW5zaXRpdmUgdGhleSBhbHNvIHdvcmsgZXZlbiB0aG91Z2ggd2UgY2Fub25pY2FsbHkgdXNlIGxvd2VyIGNhc2UuXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksICcnICsgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAvLyBCb29sZWFuXG5cbiAgICBjYXNlICdhbGxvd0Z1bGxTY3JlZW4nOlxuICAgIGNhc2UgJ2FzeW5jJzpcbiAgICBjYXNlICdhdXRvUGxheSc6XG4gICAgY2FzZSAnY29udHJvbHMnOlxuICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgIGNhc2UgJ2RlZmVyJzpcbiAgICBjYXNlICdkaXNhYmxlZCc6XG4gICAgY2FzZSAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnOlxuICAgIGNhc2UgJ2Rpc2FibGVSZW1vdGVQbGF5YmFjayc6XG4gICAgY2FzZSAnZm9ybU5vVmFsaWRhdGUnOlxuICAgIGNhc2UgJ2hpZGRlbic6XG4gICAgY2FzZSAnbG9vcCc6XG4gICAgY2FzZSAnbm9Nb2R1bGUnOlxuICAgIGNhc2UgJ25vVmFsaWRhdGUnOlxuICAgIGNhc2UgJ29wZW4nOlxuICAgIGNhc2UgJ3BsYXlzSW5saW5lJzpcbiAgICBjYXNlICdyZWFkT25seSc6XG4gICAgY2FzZSAncmVxdWlyZWQnOlxuICAgIGNhc2UgJ3JldmVyc2VkJzpcbiAgICBjYXNlICdzY29wZWQnOlxuICAgIGNhc2UgJ3NlYW1sZXNzJzpcbiAgICBjYXNlICdpdGVtU2NvcGUnOlxuICAgICAge1xuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgLy8gT3ZlcmxvYWRlZCBCb29sZWFuXG5cbiAgICBjYXNlICdjYXB0dXJlJzpcbiAgICBjYXNlICdkb3dubG9hZCc6XG4gICAgICB7XG4gICAgICAgIC8vIEFuIGF0dHJpYnV0ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZmxhZyBhcyB3ZWxsIGFzIHdpdGggYSB2YWx1ZS5cbiAgICAgICAgLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgcHJlc2VudCAoc2V0IGVpdGhlciB0byBhbiBlbXB0eSBzdHJpbmcgb3IgaXRzIG5hbWUpLlxuICAgICAgICAvLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cbiAgICAgICAgLy8gRm9yIGFueSBvdGhlciB2YWx1ZSwgc2hvdWxkIGJlIHByZXNlbnQgd2l0aCB0aGF0IHZhbHVlLlxuICAgICAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksICcnKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3ltYm9sJykge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnY29scyc6XG4gICAgY2FzZSAncm93cyc6XG4gICAgY2FzZSAnc2l6ZSc6XG4gICAgY2FzZSAnc3Bhbic6XG4gICAgICB7XG4gICAgICAgIC8vIFRoZXNlIGFyZSBIVE1MIGF0dHJpYnV0ZXMgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWJlcnMuXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdzeW1ib2wnICYmICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgPj0gMSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAncm93U3Bhbic6XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAge1xuICAgICAgICAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgbXVzdCBiZSBudW1iZXJzLlxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3ltYm9sJyAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICd4bGlua0FjdHVhdGUnOlxuICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKGRvbUVsZW1lbnQsIHhsaW5rTmFtZXNwYWNlLCAneGxpbms6YWN0dWF0ZScsIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAneGxpbmtBcmNyb2xlJzpcbiAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShkb21FbGVtZW50LCB4bGlua05hbWVzcGFjZSwgJ3hsaW5rOmFyY3JvbGUnLCB2YWx1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3hsaW5rUm9sZSc6XG4gICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoZG9tRWxlbWVudCwgeGxpbmtOYW1lc3BhY2UsICd4bGluazpyb2xlJywgdmFsdWUpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd4bGlua1Nob3cnOlxuICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKGRvbUVsZW1lbnQsIHhsaW5rTmFtZXNwYWNlLCAneGxpbms6c2hvdycsIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAneGxpbmtUaXRsZSc6XG4gICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoZG9tRWxlbWVudCwgeGxpbmtOYW1lc3BhY2UsICd4bGluazp0aXRsZScsIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAneGxpbmtUeXBlJzpcbiAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShkb21FbGVtZW50LCB4bGlua05hbWVzcGFjZSwgJ3hsaW5rOnR5cGUnLCB2YWx1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3htbEJhc2UnOlxuICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKGRvbUVsZW1lbnQsIHhtbE5hbWVzcGFjZSwgJ3htbDpiYXNlJywgdmFsdWUpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd4bWxMYW5nJzpcbiAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShkb21FbGVtZW50LCB4bWxOYW1lc3BhY2UsICd4bWw6bGFuZycsIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAneG1sU3BhY2UnOlxuICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKGRvbUVsZW1lbnQsIHhtbE5hbWVzcGFjZSwgJ3htbDpzcGFjZScsIHZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIC8vIFByb3BlcnRpZXMgdGhhdCBzaG91bGQgbm90IGJlIGFsbG93ZWQgb24gY3VzdG9tIGVsZW1lbnRzLlxuXG4gICAgY2FzZSAnaXMnOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKHByZXZWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBlcnJvcignQ2Fubm90IHVwZGF0ZSB0aGUgXCJpc1wiIHByb3AgYWZ0ZXIgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRPRE86IFdlIHNob3VsZG4ndCBhY3R1YWxseSBzZXQgdGhpcyBhdHRyaWJ1dGUsIGJlY2F1c2Ugd2UndmUgYWxyZWFkeVxuICAgICAgICAvLyBwYXNzZWQgaXQgdG8gY3JlYXRlRWxlbWVudC4gV2UgZG9uJ3QgYWxzbyBuZWVkIHRoZSBhdHRyaWJ1dGUuXG4gICAgICAgIC8vIEhvd2V2ZXIsIG91ciB0ZXN0cyBjdXJyZW50bHkgcXVlcnkgZm9yIGl0IHNvIGl0J3MgcGxhdXNpYmxlIHNvbWVvbmVcbiAgICAgICAgLy8gZWxzZSBkb2VzIHRvbyBzbyBpdCdzIGJyZWFrLlxuXG5cbiAgICAgICAgc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgJ2lzJywgdmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2lubmVyVGV4dCc6XG4gICAgY2FzZSAndGV4dENvbnRlbnQnOlxuXG4gICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICBpZiAoa2V5Lmxlbmd0aCA+IDIgJiYgKGtleVswXSA9PT0gJ28nIHx8IGtleVswXSA9PT0gJ08nKSAmJiAoa2V5WzFdID09PSAnbicgfHwga2V5WzFdID09PSAnTicpKSB7XG4gICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IGdldEF0dHJpYnV0ZUFsaWFzKGtleSk7XG4gICAgICAgICAgc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwgYXR0cmlidXRlTmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UHJvcE9uQ3VzdG9tRWxlbWVudChkb21FbGVtZW50LCB0YWcsIGtleSwgdmFsdWUsIHByb3BzLCBwcmV2VmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdzdHlsZSc6XG4gICAgICB7XG4gICAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHZhbHVlLCBwcmV2VmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCAhKCdfX2h0bWwnIGluIHZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiAnICsgJ1BsZWFzZSB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgJyArICdmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbmV4dEh0bWwgPSB2YWx1ZS5fX2h0bWw7XG5cbiAgICAgICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHByb3BzLmNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBzZXQgb25lIG9mIGBjaGlsZHJlbmAgb3IgYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZXRJbm5lckhUTUwkMShkb21FbGVtZW50LCBuZXh0SHRtbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdjaGlsZHJlbic6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCAnJyArIHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb25TY3JvbGwnOlxuICAgICAge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb25TY3JvbGxFbmQnOlxuICAgICAge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGxlbmQnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb25DbGljayc6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnOlxuICAgIGNhc2UgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc6XG4gICAgY2FzZSAnaW5uZXJIVE1MJzpcbiAgICAgIHtcbiAgICAgICAgLy8gTm9vcFxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2lubmVyVGV4dCc6IC8vIFByb3BlcnRpZXNcblxuICAgIGNhc2UgJ3RleHRDb250ZW50JzpcblxuICAgIC8vIEZhbGwgdGhyb3VnaFxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGJlZm9yZSB0aGUgbmV3IGZsYWcgaXMgb25cbiAgICAgICAgICAgICAgdmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHByb3BzKSB7XG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2Rpdic6XG4gICAgY2FzZSAnc3Bhbic6XG4gICAgY2FzZSAnc3ZnJzpcbiAgICBjYXNlICdwYXRoJzpcbiAgICBjYXNlICdhJzpcbiAgICBjYXNlICdnJzpcbiAgICBjYXNlICdwJzpcbiAgICBjYXNlICdsaSc6XG4gICAgICB7XG4gICAgICAgIC8vIEZhc3QgdHJhY2sgdGhlIG1vc3QgY29tbW9uIHRhZyB0eXBlc1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ2lucHV0JywgcHJvcHMpO1xuICAgICAgICB9IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cblxuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG4gICAgICAgIHZhciBuYW1lID0gbnVsbDtcbiAgICAgICAgdmFyIHR5cGUgPSBudWxsO1xuICAgICAgICB2YXIgdmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgZGVmYXVsdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIGNoZWNrZWQgPSBudWxsO1xuICAgICAgICB2YXIgZGVmYXVsdENoZWNrZWQgPSBudWxsO1xuXG4gICAgICAgIGZvciAodmFyIHByb3BLZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcEtleV07XG5cbiAgICAgICAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAocHJvcEtleSkge1xuICAgICAgICAgICAgY2FzZSAnbmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZSA9IHByb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdjaGVja2VkJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNoZWNrZWQgPSBwcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdENoZWNrZWQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQgPSBwcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdFZhbHVlJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdjaGlsZHJlbic6XG4gICAgICAgICAgICBjYXNlICdkYW5nZXJvdXNseVNldElubmVySFRNTCc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0YWcgKyBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIFwiICsgJ3VzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgcHJvcEtleSwgcHJvcFZhbHVlLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuXG5cbiAgICAgICAgdmFsaWRhdGVJbnB1dFByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgICAgaW5pdElucHV0KGRvbUVsZW1lbnQsIHZhbHVlLCBkZWZhdWx0VmFsdWUsIGNoZWNrZWQsIGRlZmF1bHRDaGVja2VkLCB0eXBlLCBuYW1lLCBmYWxzZSk7XG4gICAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygnc2VsZWN0JywgcHJvcHMpO1xuICAgICAgICB9IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cblxuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG4gICAgICAgIHZhciBfdmFsdWUgPSBudWxsO1xuICAgICAgICB2YXIgX2RlZmF1bHRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBtdWx0aXBsZSA9IG51bGw7XG5cbiAgICAgICAgZm9yICh2YXIgX3Byb3BLZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9wcm9wVmFsdWUgPSBwcm9wc1tfcHJvcEtleV07XG5cbiAgICAgICAgICBpZiAoX3Byb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzd2l0Y2ggKF9wcm9wS2V5KSB7XG4gICAgICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSBfcHJvcFZhbHVlOyAvLyBUaGlzIGlzIGhhbmRsZWQgYnkgaW5pdFNlbGVjdCBiZWxvdy5cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRWYWx1ZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfZGVmYXVsdFZhbHVlID0gX3Byb3BWYWx1ZTsgLy8gVGhpcyBpcyBoYW5kbGVkIGJ5IGluaXRTZWxlY3QgYmVsb3cuXG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdtdWx0aXBsZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtdWx0aXBsZSA9IF9wcm9wVmFsdWU7IC8vIFRPRE86IFdlIGRvbid0IGFjdHVhbGx5IGhhdmUgdG8gZmFsbCB0aHJvdWdoIGhlcmUgYmVjYXVzZSB3ZSBzZXQgaXRcbiAgICAgICAgICAgICAgICAvLyBpbiBpbml0U2VsZWN0IGFueXdheS4gV2UgY2FuIHJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlIGluIHNldFByb3AuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZhbGx0aHJvdWdoXG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgX3Byb3BLZXksIF9wcm9wVmFsdWUsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlU2VsZWN0UHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgICBpbml0U2VsZWN0KGRvbUVsZW1lbnQsIF92YWx1ZSwgX2RlZmF1bHRWYWx1ZSwgbXVsdGlwbGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCd0ZXh0YXJlYScsIHByb3BzKTtcbiAgICAgICAgfSAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG5cbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB2YXIgX3ZhbHVlMiA9IG51bGw7XG4gICAgICAgIHZhciBfZGVmYXVsdFZhbHVlMiA9IG51bGw7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IG51bGw7XG5cbiAgICAgICAgZm9yICh2YXIgX3Byb3BLZXkyIGluIHByb3BzKSB7XG4gICAgICAgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTIpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3Byb3BWYWx1ZTIgPSBwcm9wc1tfcHJvcEtleTJdO1xuXG4gICAgICAgICAgaWYgKF9wcm9wVmFsdWUyID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3aXRjaCAoX3Byb3BLZXkyKSB7XG4gICAgICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUyID0gX3Byb3BWYWx1ZTI7IC8vIFRoaXMgaXMgaGFuZGxlZCBieSBpbml0VGV4dGFyZWEgYmVsb3cuXG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdkZWZhdWx0VmFsdWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgX2RlZmF1bHRWYWx1ZTIgPSBfcHJvcFZhbHVlMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdjaGlsZHJlbic6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IF9wcm9wVmFsdWUyOyAvLyBIYW5kbGVkIGJ5IGluaXRUZXh0YXJlYSBhYm92ZS5cblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChfcHJvcFZhbHVlMiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUT0RPOiBEbyB3ZSByZWFsbHkgbmVlZCBhIHNwZWNpYWwgZXJyb3IgbWVzc2FnZSBmb3IgdGhpcy4gSXQncyBhbHNvIHByZXR0eSBibHVudC5cbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5vdCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBfcHJvcEtleTIsIF9wcm9wVmFsdWUyLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuXG5cbiAgICAgICAgdmFsaWRhdGVUZXh0YXJlYVByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgICAgaW5pdFRleHRhcmVhKGRvbUVsZW1lbnQsIF92YWx1ZTIsIF9kZWZhdWx0VmFsdWUyLCBjaGlsZHJlbik7XG4gICAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAge1xuICAgICAgICB2YWxpZGF0ZU9wdGlvblByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcblxuICAgICAgICBmb3IgKHZhciBfcHJvcEtleTMgaW4gcHJvcHMpIHtcbiAgICAgICAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfcHJvcFZhbHVlMyA9IHByb3BzW19wcm9wS2V5M107XG5cbiAgICAgICAgICBpZiAoX3Byb3BWYWx1ZTMgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpdGNoIChfcHJvcEtleTMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdGVkJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFJlbW92ZSBzdXBwb3J0IGZvciBzZWxlY3RlZCBvbiBvcHRpb24uXG4gICAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZWxlY3RlZCA9IF9wcm9wVmFsdWUzICYmIHR5cGVvZiBfcHJvcFZhbHVlMyAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgX3Byb3BWYWx1ZTMgIT09ICdzeW1ib2wnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgX3Byb3BLZXkzLCBfcHJvcFZhbHVlMywgcHJvcHMsIG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIHtcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Nsb3NlJywgZG9tRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGFsbCB0aGUgbWVkaWEgZXZlbnRzLlxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgICAge1xuICAgICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgZXJyb3IgYW5kIGxvYWQgZXZlbnRzLlxuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgndG9nZ2xlJywgZG9tRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZW1iZWQnOlxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIHtcbiAgICAgICAgLy8gVGhlc2UgYXJlIHZvaWQgZWxlbWVudHMgdGhhdCBhbHNvIG5lZWQgZGVsZWdhdGVkIGV2ZW50cy5cbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpOyAvLyBXZSBmYWxsdGhyb3VnaCB0byB0aGUgcmV0dXJuIG9mIHRoZSB2b2lkIGVsZW1lbnRzXG4gICAgICB9XG5cbiAgICBjYXNlICdhcmVhJzpcbiAgICBjYXNlICdiYXNlJzpcbiAgICBjYXNlICdicic6XG4gICAgY2FzZSAnY29sJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAna2V5Z2VuJzpcbiAgICBjYXNlICdtZXRhJzpcbiAgICBjYXNlICdwYXJhbSc6XG4gICAgY2FzZSAndHJhY2snOlxuICAgIGNhc2UgJ3dicic6XG4gICAgY2FzZSAnbWVudWl0ZW0nOlxuICAgICAge1xuICAgICAgICAvLyBWb2lkIGVsZW1lbnRzXG4gICAgICAgIGZvciAodmFyIF9wcm9wS2V5NCBpbiBwcm9wcykge1xuICAgICAgICAgIGlmICghcHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXk0KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9wcm9wVmFsdWU0ID0gcHJvcHNbX3Byb3BLZXk0XTtcblxuICAgICAgICAgIGlmIChfcHJvcFZhbHVlNCA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzd2l0Y2ggKF9wcm9wS2V5NCkge1xuICAgICAgICAgICAgY2FzZSAnY2hpbGRyZW4nOlxuICAgICAgICAgICAgY2FzZSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQ2FuIHdlIG1ha2UgdGhpcyBhIERFViB3YXJuaW5nIHRvIGF2b2lkIHRoaXMgZGVueSBsaXN0P1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0YWcgKyBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIFwiICsgJ3VzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWZhdWx0Q2hlY2tlZCBhbmQgZGVmYXVsdFZhbHVlIGFyZSBpZ25vcmVkIGJ5IHNldFByb3BcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBfcHJvcEtleTQsIF9wcm9wVmFsdWU0LCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICBpZiAoaXNDdXN0b21FbGVtZW50KHRhZykpIHtcbiAgICAgICAgICBmb3IgKHZhciBfcHJvcEtleTUgaW4gcHJvcHMpIHtcbiAgICAgICAgICAgIGlmICghcHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXk1KSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIF9wcm9wVmFsdWU1ID0gcHJvcHNbX3Byb3BLZXk1XTtcblxuICAgICAgICAgICAgaWYgKF9wcm9wVmFsdWU1ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFByb3BPbkN1c3RvbUVsZW1lbnQoZG9tRWxlbWVudCwgdGFnLCBfcHJvcEtleTUsIF9wcm9wVmFsdWU1LCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfcHJvcEtleTYgaW4gcHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5NikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBfcHJvcFZhbHVlNiA9IHByb3BzW19wcm9wS2V5Nl07XG5cbiAgICBpZiAoX3Byb3BWYWx1ZTYgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIF9wcm9wS2V5NiwgX3Byb3BWYWx1ZTYsIHByb3BzLCBudWxsKTtcbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIGxhc3RQcm9wcywgbmV4dFByb3BzKSB7XG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgbmV4dFByb3BzKTtcbiAgfVxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGl2JzpcbiAgICBjYXNlICdzcGFuJzpcbiAgICBjYXNlICdzdmcnOlxuICAgIGNhc2UgJ3BhdGgnOlxuICAgIGNhc2UgJ2EnOlxuICAgIGNhc2UgJ2cnOlxuICAgIGNhc2UgJ3AnOlxuICAgIGNhc2UgJ2xpJzpcbiAgICAgIHtcbiAgICAgICAgLy8gRmFzdCB0cmFjayB0aGUgbW9zdCBjb21tb24gdGFnIHR5cGVzXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAge1xuICAgICAgICB2YXIgbmFtZSA9IG51bGw7XG4gICAgICAgIHZhciB0eXBlID0gbnVsbDtcbiAgICAgICAgdmFyIHZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBsYXN0RGVmYXVsdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIGNoZWNrZWQgPSBudWxsO1xuICAgICAgICB2YXIgZGVmYXVsdENoZWNrZWQgPSBudWxsO1xuXG4gICAgICAgIGZvciAodmFyIHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgICAgICAgdmFyIGxhc3RQcm9wID0gbGFzdFByb3BzW3Byb3BLZXldO1xuXG4gICAgICAgICAgaWYgKGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSAmJiBsYXN0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnY2hlY2tlZCc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGhhbmRsZWQgYnkgdXBkYXRlV3JhcHBlciBiZWxvdy5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlICdkZWZhdWx0VmFsdWUnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGxhc3REZWZhdWx0VmFsdWUgPSBsYXN0UHJvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGRlZmF1bHRDaGVja2VkIGFuZCBkZWZhdWx0VmFsdWUgYXJlIGlnbm9yZWQgYnkgc2V0UHJvcFxuICAgICAgICAgICAgICAvLyBGYWxsdGhyb3VnaFxuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBwcm9wS2V5LCBudWxsLCBuZXh0UHJvcHMsIGxhc3RQcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgX3Byb3BLZXk3IGluIG5leHRQcm9wcykge1xuICAgICAgICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1tfcHJvcEtleTddO1xuICAgICAgICAgIHZhciBfbGFzdFByb3AgPSBsYXN0UHJvcHNbX3Byb3BLZXk3XTtcblxuICAgICAgICAgIGlmIChuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXk3KSAmJiAobmV4dFByb3AgIT0gbnVsbCB8fCBfbGFzdFByb3AgIT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX3Byb3BLZXk3KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHR5cGUgPSBuZXh0UHJvcDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lID0gbmV4dFByb3A7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSAnY2hlY2tlZCc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IG5leHRQcm9wO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRDaGVja2VkJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCA9IG5leHRQcm9wO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5leHRQcm9wO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRWYWx1ZSc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gbmV4dFByb3A7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FzZSAnY2hpbGRyZW4nOlxuICAgICAgICAgICAgICBjYXNlICdkYW5nZXJvdXNseVNldElubmVySFRNTCc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRhZyArIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgXCIgKyAndXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuJyk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmIChuZXh0UHJvcCAhPT0gX2xhc3RQcm9wKSBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgX3Byb3BLZXk3LCBuZXh0UHJvcCwgbmV4dFByb3BzLCBfbGFzdFByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHdhc0NvbnRyb2xsZWQgPSBsYXN0UHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBsYXN0UHJvcHMudHlwZSA9PT0gJ3JhZGlvJyA/IGxhc3RQcm9wcy5jaGVja2VkICE9IG51bGwgOiBsYXN0UHJvcHMudmFsdWUgIT0gbnVsbDtcbiAgICAgICAgICB2YXIgaXNDb250cm9sbGVkID0gbmV4dFByb3BzLnR5cGUgPT09ICdjaGVja2JveCcgfHwgbmV4dFByb3BzLnR5cGUgPT09ICdyYWRpbycgPyBuZXh0UHJvcHMuY2hlY2tlZCAhPSBudWxsIDogbmV4dFByb3BzLnZhbHVlICE9IG51bGw7XG5cbiAgICAgICAgICBpZiAoIXdhc0NvbnRyb2xsZWQgJiYgaXNDb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICAgICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlucHV0IHRvIGJlIGNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIHVuZGVmaW5lZCB0byAnICsgJ2EgZGVmaW5lZCB2YWx1ZSwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHdhc0NvbnRyb2xsZWQgJiYgIWlzQ29udHJvbGxlZCAmJiAhZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCkge1xuICAgICAgICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGNoYW5naW5nIGEgY29udHJvbGxlZCBpbnB1dCB0byBiZSB1bmNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIGEgZGVmaW5lZCB0byAnICsgJ3VuZGVmaW5lZCwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgICAgICAgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgd3JhcHBlciBhcm91bmQgaW5wdXRzICphZnRlciogdXBkYXRpbmcgcHJvcHMuIFRoaXMgaGFzIHRvXG4gICAgICAgIC8vIGhhcHBlbiBhZnRlciB1cGRhdGluZyB0aGUgcmVzdCBvZiBwcm9wcy4gT3RoZXJ3aXNlIEhUTUw1IGlucHV0IHZhbGlkYXRpb25zXG4gICAgICAgIC8vIHJhaXNlIHdhcm5pbmdzIGFuZCBwcmV2ZW50IHRoZSBuZXcgdmFsdWUgZnJvbSBiZWluZyBhc3NpZ25lZC5cblxuXG4gICAgICAgIHVwZGF0ZUlucHV0KGRvbUVsZW1lbnQsIHZhbHVlLCBkZWZhdWx0VmFsdWUsIGxhc3REZWZhdWx0VmFsdWUsIGNoZWNrZWQsIGRlZmF1bHRDaGVja2VkLCB0eXBlLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF92YWx1ZTMgPSBudWxsO1xuICAgICAgICB2YXIgX2RlZmF1bHRWYWx1ZTMgPSBudWxsO1xuICAgICAgICB2YXIgbXVsdGlwbGUgPSBudWxsO1xuICAgICAgICB2YXIgd2FzTXVsdGlwbGUgPSBudWxsO1xuXG4gICAgICAgIGZvciAodmFyIF9wcm9wS2V5OCBpbiBsYXN0UHJvcHMpIHtcbiAgICAgICAgICB2YXIgX2xhc3RQcm9wMiA9IGxhc3RQcm9wc1tfcHJvcEtleThdO1xuXG4gICAgICAgICAgaWYgKGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTgpICYmIF9sYXN0UHJvcDIgIT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoIChfcHJvcEtleTgpIHtcbiAgICAgICAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgaGFuZGxlZCBieSB1cGRhdGVXcmFwcGVyIGJlbG93LlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBkZWZhdWx0VmFsdWUgYXJlIGlnbm9yZWQgYnkgc2V0UHJvcFxuXG4gICAgICAgICAgICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB3YXNNdWx0aXBsZSA9IF9sYXN0UHJvcDI7IC8vIFRPRE86IE1vdmUgc3BlY2lhbCBjYXNlIGluIGhlcmUgZnJvbSBzZXRQcm9wLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gRmFsbHRocm91Z2hcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5OCkpIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBfcHJvcEtleTgsIG51bGwsIG5leHRQcm9wcywgX2xhc3RQcm9wMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9wcm9wS2V5OSBpbiBuZXh0UHJvcHMpIHtcbiAgICAgICAgICB2YXIgX25leHRQcm9wID0gbmV4dFByb3BzW19wcm9wS2V5OV07XG4gICAgICAgICAgdmFyIF9sYXN0UHJvcDMgPSBsYXN0UHJvcHNbX3Byb3BLZXk5XTtcblxuICAgICAgICAgIGlmIChuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXk5KSAmJiAoX25leHRQcm9wICE9IG51bGwgfHwgX2xhc3RQcm9wMyAhPSBudWxsKSkge1xuICAgICAgICAgICAgc3dpdGNoIChfcHJvcEtleTkpIHtcbiAgICAgICAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIF92YWx1ZTMgPSBfbmV4dFByb3A7IC8vIFRoaXMgaXMgaGFuZGxlZCBieSB1cGRhdGVTZWxlY3QgYmVsb3cuXG5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlICdkZWZhdWx0VmFsdWUnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIF9kZWZhdWx0VmFsdWUzID0gX25leHRQcm9wO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgJ211bHRpcGxlJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBtdWx0aXBsZSA9IF9uZXh0UHJvcDsgLy8gVE9ETzogSnVzdCBtb3ZlIHRoZSBzcGVjaWFsIGNhc2UgaW4gaGVyZSBmcm9tIHNldFByb3AuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBGYWxsdGhyb3VnaFxuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKF9uZXh0UHJvcCAhPT0gX2xhc3RQcm9wMykgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIF9wcm9wS2V5OSwgX25leHRQcm9wLCBuZXh0UHJvcHMsIF9sYXN0UHJvcDMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gPHNlbGVjdD4gdmFsdWUgdXBkYXRlIG5lZWRzIHRvIG9jY3VyIGFmdGVyIDxvcHRpb24+IGNoaWxkcmVuXG4gICAgICAgIC8vIHJlY29uY2lsaWF0aW9uXG5cblxuICAgICAgICB1cGRhdGVTZWxlY3QoZG9tRWxlbWVudCwgX3ZhbHVlMywgX2RlZmF1bHRWYWx1ZTMsIG11bHRpcGxlLCB3YXNNdWx0aXBsZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF92YWx1ZTQgPSBudWxsO1xuICAgICAgICB2YXIgX2RlZmF1bHRWYWx1ZTQgPSBudWxsO1xuXG4gICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTAgaW4gbGFzdFByb3BzKSB7XG4gICAgICAgICAgdmFyIF9sYXN0UHJvcDQgPSBsYXN0UHJvcHNbX3Byb3BLZXkxMF07XG5cbiAgICAgICAgICBpZiAobGFzdFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTApICYmIF9sYXN0UHJvcDQgIT0gbnVsbCAmJiAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTApKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9wcm9wS2V5MTApIHtcbiAgICAgICAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgaGFuZGxlZCBieSB1cGRhdGVUZXh0YXJlYSBiZWxvdy5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlICdjaGlsZHJlbic6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGlmIGl0IHVwZGF0ZXMuXG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGRlZmF1bHRWYWx1ZSBpcyBpZ25vcmVkIGJ5IHNldFByb3BcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBfcHJvcEtleTEwLCBudWxsLCBuZXh0UHJvcHMsIF9sYXN0UHJvcDQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBfcHJvcEtleTExIGluIG5leHRQcm9wcykge1xuICAgICAgICAgIHZhciBfbmV4dFByb3AyID0gbmV4dFByb3BzW19wcm9wS2V5MTFdO1xuICAgICAgICAgIHZhciBfbGFzdFByb3A1ID0gbGFzdFByb3BzW19wcm9wS2V5MTFdO1xuXG4gICAgICAgICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTExKSAmJiAoX25leHRQcm9wMiAhPSBudWxsIHx8IF9sYXN0UHJvcDUgIT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX3Byb3BLZXkxMSkge1xuICAgICAgICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgX3ZhbHVlNCA9IF9uZXh0UHJvcDI7IC8vIFRoaXMgaXMgaGFuZGxlZCBieSB1cGRhdGVUZXh0YXJlYSBiZWxvdy5cblxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRWYWx1ZSc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgX2RlZmF1bHRWYWx1ZTQgPSBfbmV4dFByb3AyO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNhc2UgJ2NoaWxkcmVuJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGRvZXNuJ3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgaWYgaXQgdXBkYXRlcy5cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYXNlICdkYW5nZXJvdXNseVNldElubmVySFRNTCc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKF9uZXh0UHJvcDIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBEbyB3ZSByZWFsbHkgbmVlZCBhIHNwZWNpYWwgZXJyb3IgbWVzc2FnZSBmb3IgdGhpcy4gSXQncyBhbHNvIHByZXR0eSBibHVudC5cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi4nKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKF9uZXh0UHJvcDIgIT09IF9sYXN0UHJvcDUpIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBfcHJvcEtleTExLCBfbmV4dFByb3AyLCBuZXh0UHJvcHMsIF9sYXN0UHJvcDUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVUZXh0YXJlYShkb21FbGVtZW50LCBfdmFsdWU0LCBfZGVmYXVsdFZhbHVlNCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB7XG4gICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTIgaW4gbGFzdFByb3BzKSB7XG4gICAgICAgICAgdmFyIF9sYXN0UHJvcDYgPSBsYXN0UHJvcHNbX3Byb3BLZXkxMl07XG5cbiAgICAgICAgICBpZiAobGFzdFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTIpICYmIF9sYXN0UHJvcDYgIT0gbnVsbCAmJiAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTIpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9wcm9wS2V5MTIpIHtcbiAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0ZWQnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFJlbW92ZSBzdXBwb3J0IGZvciBzZWxlY3RlZCBvbiBvcHRpb24uXG4gICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgX3Byb3BLZXkxMiwgbnVsbCwgbmV4dFByb3BzLCBfbGFzdFByb3A2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgX3Byb3BLZXkxMyBpbiBuZXh0UHJvcHMpIHtcbiAgICAgICAgICB2YXIgX25leHRQcm9wMyA9IG5leHRQcm9wc1tfcHJvcEtleTEzXTtcbiAgICAgICAgICB2YXIgX2xhc3RQcm9wNyA9IGxhc3RQcm9wc1tfcHJvcEtleTEzXTtcblxuICAgICAgICAgIGlmIChuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxMykgJiYgX25leHRQcm9wMyAhPT0gX2xhc3RQcm9wNyAmJiAoX25leHRQcm9wMyAhPSBudWxsIHx8IF9sYXN0UHJvcDcgIT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX3Byb3BLZXkxMykge1xuICAgICAgICAgICAgICBjYXNlICdzZWxlY3RlZCc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHN1cHBvcnQgZm9yIHNlbGVjdGVkIG9uIG9wdGlvbi5cbiAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQuc2VsZWN0ZWQgPSBfbmV4dFByb3AzICYmIHR5cGVvZiBfbmV4dFByb3AzICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBfbmV4dFByb3AzICE9PSAnc3ltYm9sJztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBfcHJvcEtleTEzLCBfbmV4dFByb3AzLCBuZXh0UHJvcHMsIF9sYXN0UHJvcDcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2xpbmsnOlxuICAgIGNhc2UgJ2FyZWEnOlxuICAgIGNhc2UgJ2Jhc2UnOlxuICAgIGNhc2UgJ2JyJzpcbiAgICBjYXNlICdjb2wnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICBjYXNlICdocic6XG4gICAgY2FzZSAna2V5Z2VuJzpcbiAgICBjYXNlICdtZXRhJzpcbiAgICBjYXNlICdwYXJhbSc6XG4gICAgY2FzZSAnc291cmNlJzpcbiAgICBjYXNlICd0cmFjayc6XG4gICAgY2FzZSAnd2JyJzpcbiAgICBjYXNlICdtZW51aXRlbSc6XG4gICAgICB7XG4gICAgICAgIC8vIFZvaWQgZWxlbWVudHNcbiAgICAgICAgZm9yICh2YXIgX3Byb3BLZXkxNCBpbiBsYXN0UHJvcHMpIHtcbiAgICAgICAgICB2YXIgX2xhc3RQcm9wOCA9IGxhc3RQcm9wc1tfcHJvcEtleTE0XTtcblxuICAgICAgICAgIGlmIChsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxNCkgJiYgX2xhc3RQcm9wOCAhPSBudWxsICYmICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxNCkpIHtcbiAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBfcHJvcEtleTE0LCBudWxsLCBuZXh0UHJvcHMsIF9sYXN0UHJvcDgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTUgaW4gbmV4dFByb3BzKSB7XG4gICAgICAgICAgdmFyIF9uZXh0UHJvcDQgPSBuZXh0UHJvcHNbX3Byb3BLZXkxNV07XG4gICAgICAgICAgdmFyIF9sYXN0UHJvcDkgPSBsYXN0UHJvcHNbX3Byb3BLZXkxNV07XG5cbiAgICAgICAgICBpZiAobmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTUpICYmIF9uZXh0UHJvcDQgIT09IF9sYXN0UHJvcDkgJiYgKF9uZXh0UHJvcDQgIT0gbnVsbCB8fCBfbGFzdFByb3A5ICE9IG51bGwpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9wcm9wS2V5MTUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnY2hpbGRyZW4nOlxuICAgICAgICAgICAgICBjYXNlICdkYW5nZXJvdXNseVNldElubmVySFRNTCc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKF9uZXh0UHJvcDQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgbWFrZSB0aGlzIGEgREVWIHdhcm5pbmcgdG8gYXZvaWQgdGhpcyBkZW55IGxpc3Q/XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0YWcgKyBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIFwiICsgJ3VzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGRlZmF1bHRDaGVja2VkIGFuZCBkZWZhdWx0VmFsdWUgYXJlIGlnbm9yZWQgYnkgc2V0UHJvcFxuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIF9wcm9wS2V5MTUsIF9uZXh0UHJvcDQsIG5leHRQcm9wcywgX2xhc3RQcm9wOSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIGlmIChpc0N1c3RvbUVsZW1lbnQodGFnKSkge1xuICAgICAgICAgIGZvciAodmFyIF9wcm9wS2V5MTYgaW4gbGFzdFByb3BzKSB7XG4gICAgICAgICAgICB2YXIgX2xhc3RQcm9wMTAgPSBsYXN0UHJvcHNbX3Byb3BLZXkxNl07XG5cbiAgICAgICAgICAgIGlmIChsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxNikgJiYgX2xhc3RQcm9wMTAgIT0gbnVsbCAmJiAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTYpKSB7XG4gICAgICAgICAgICAgIHNldFByb3BPbkN1c3RvbUVsZW1lbnQoZG9tRWxlbWVudCwgdGFnLCBfcHJvcEtleTE2LCBudWxsLCBuZXh0UHJvcHMsIF9sYXN0UHJvcDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKHZhciBfcHJvcEtleTE3IGluIG5leHRQcm9wcykge1xuICAgICAgICAgICAgdmFyIF9uZXh0UHJvcDUgPSBuZXh0UHJvcHNbX3Byb3BLZXkxN107XG4gICAgICAgICAgICB2YXIgX2xhc3RQcm9wMTEgPSBsYXN0UHJvcHNbX3Byb3BLZXkxN107XG5cbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxNykgJiYgX25leHRQcm9wNSAhPT0gX2xhc3RQcm9wMTEgJiYgKF9uZXh0UHJvcDUgIT0gbnVsbCB8fCBfbGFzdFByb3AxMSAhPSBudWxsKSkge1xuICAgICAgICAgICAgICBzZXRQcm9wT25DdXN0b21FbGVtZW50KGRvbUVsZW1lbnQsIHRhZywgX3Byb3BLZXkxNywgX25leHRQcm9wNSwgbmV4dFByb3BzLCBfbGFzdFByb3AxMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfcHJvcEtleTE4IGluIGxhc3RQcm9wcykge1xuICAgIHZhciBfbGFzdFByb3AxMiA9IGxhc3RQcm9wc1tfcHJvcEtleTE4XTtcblxuICAgIGlmIChsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxOCkgJiYgX2xhc3RQcm9wMTIgIT0gbnVsbCAmJiAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTgpKSB7XG4gICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgX3Byb3BLZXkxOCwgbnVsbCwgbmV4dFByb3BzLCBfbGFzdFByb3AxMik7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgX3Byb3BLZXkxOSBpbiBuZXh0UHJvcHMpIHtcbiAgICB2YXIgX25leHRQcm9wNiA9IG5leHRQcm9wc1tfcHJvcEtleTE5XTtcbiAgICB2YXIgX2xhc3RQcm9wMTMgPSBsYXN0UHJvcHNbX3Byb3BLZXkxOV07XG5cbiAgICBpZiAobmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTkpICYmIF9uZXh0UHJvcDYgIT09IF9sYXN0UHJvcDEzICYmIChfbmV4dFByb3A2ICE9IG51bGwgfHwgX2xhc3RQcm9wMTMgIT0gbnVsbCkpIHtcbiAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBfcHJvcEtleTE5LCBfbmV4dFByb3A2LCBuZXh0UHJvcHMsIF9sYXN0UHJvcDEzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcE5hbWUpIHtcbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHByb3BOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoIXBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdIHx8IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkU3R5bGVzKGRvbUVsZW1lbnQsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgc3R5bGVgIHByb3AgZXhwZWN0cyBhIG1hcHBpbmcgZnJvbSBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcywgJyArIFwibm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArICdlbSd9fSB3aGVuIFwiICsgJ3VzaW5nIEpTWC4nKTtcbiAgfVxuXG4gIGlmIChjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgdmFyIGV4cGVjdGVkU3R5bGUgPSBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXModmFsdWUpO1xuICAgIHZhciBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZSgnc3R5bGUnLCBzZXJ2ZXJWYWx1ZSwgZXhwZWN0ZWRTdHlsZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaHlkcmF0ZUF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKSB7XG4gIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gIHZhciBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXG4gIGlmIChzZXJ2ZXJWYWx1ZSA9PT0gbnVsbCkge1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSA7IGVsc2Uge1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgcHJvcEtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZXJ2ZXJWYWx1ZSA9PT0gJycgKyB2YWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgdmFsdWUpO1xufVxuXG5mdW5jdGlvbiBoeWRyYXRlQm9vbGVhbkF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKSB7XG4gIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gIHZhciBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXG4gIGlmIChzZXJ2ZXJWYWx1ZSA9PT0gbnVsbCkge1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgYm9vbGVhbiwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgdmFsdWUgaXNcbiAgICAgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwZWN0ZWQuXG4gICAgICAgICAgICAvLyBBcyBsb25nIGFzIGl0J3MgcG9zaXRpdmUuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVPdmVybG9hZGVkQm9vbGVhbkF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKSB7XG4gIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gIHZhciBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXG4gIGlmIChzZXJ2ZXJWYWx1ZSA9PT0gbnVsbCkge1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIDsgZWxzZSB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlICYmIHNlcnZlclZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBwcm9wS2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlcnZlclZhbHVlID09PSAnJyArIHZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVCb29sZWFuaXNoQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIGF0dHJpYnV0ZU5hbWUsIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpIHtcbiAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgdmFyIHNlcnZlclZhbHVlID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG5cbiAgaWYgKHNlcnZlclZhbHVlID09PSBudWxsKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSA7IGVsc2Uge1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlcnZlclZhbHVlID09PSAnJyArIHZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVOdW1lcmljQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIGF0dHJpYnV0ZU5hbWUsIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpIHtcbiAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgdmFyIHNlcnZlclZhbHVlID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG5cbiAgaWYgKHNlcnZlclZhbHVlID09PSBudWxsKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybjtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSA7IGVsc2Uge1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGFkIGFuIGF0dHJpYnV0ZSBidXQgc2hvdWxkbid0IGhhdmUgaGFkIG9uZSwgc28gcmVhZCBpdFxuICAgICAgICAgICAgICAvLyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VydmVyVmFsdWUgPT09ICcnICsgdmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaHlkcmF0ZVBvc2l0aXZlTnVtZXJpY0F0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKSB7XG4gIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gIHZhciBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXG4gIGlmIChzZXJ2ZXJWYWx1ZSA9PT0gbnVsbCkge1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIDsgZWxzZSB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGFkIGFuIGF0dHJpYnV0ZSBidXQgc2hvdWxkbid0IGhhdmUgaGFkIG9uZSwgc28gcmVhZCBpdFxuICAgICAgICAgICAgICAvLyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VydmVyVmFsdWUgPT09ICcnICsgdmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaHlkcmF0ZVNhbml0aXplZEF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKSB7XG4gIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gIHZhciBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXG4gIGlmIChzZXJ2ZXJWYWx1ZSA9PT0gbnVsbCkge1xuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSA7IGVsc2Uge1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgcHJvcEtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzYW5pdGl6ZWRWYWx1ZSA9IHNhbml0aXplVVJMKCcnICsgdmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoc2VydmVyVmFsdWUgPT09IHNhbml0aXplZFZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGRpZmZIeWRyYXRlZEN1c3RvbUNvbXBvbmVudChkb21FbGVtZW50LCB0YWcsIHByb3BzLCBob3N0Q29udGV4dCwgZXh0cmFBdHRyaWJ1dGVzKSB7XG4gIGZvciAodmFyIHByb3BLZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wS2V5XTtcblxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID09PSB0cnVlKSB7XG4gICAgICAvLyBEb24ndCBib3RoZXIgY29tcGFyaW5nLiBXZSdyZSBpZ25vcmluZyBhbGwgdGhlc2Ugd2FybmluZ3MuXG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIFZhbGlkYXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgY29ycmVzcG9uZCB0byB0aGVpciBleHBlY3RlZCB2YWx1ZXMuXG5cblxuICAgIHN3aXRjaCAocHJvcEtleSkge1xuICAgICAgY2FzZSAnY2hpbGRyZW4nOiAvLyBDaGVja2VkIGFib3ZlIGFscmVhZHlcblxuICAgICAgY2FzZSAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJzpcbiAgICAgIGNhc2UgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc6XG4gICAgICBjYXNlICdkZWZhdWx0VmFsdWUnOlxuICAgICAgY2FzZSAnZGVmYXVsdENoZWNrZWQnOlxuICAgICAgY2FzZSAnaW5uZXJIVE1MJzpcbiAgICAgICAgLy8gTm9vcFxuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnOlxuICAgICAgICB2YXIgc2VydmVySFRNTCA9IGRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICB2YXIgbmV4dEh0bWwgPSB2YWx1ZSA/IHZhbHVlLl9faHRtbCA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBleHBlY3RlZEhUTUwgPSBub3JtYWxpemVIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVySFRNTCwgZXhwZWN0ZWRIVE1MKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlICdzdHlsZSc6XG4gICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUocHJvcEtleSk7XG4gICAgICAgIGRpZmZIeWRyYXRlZFN0eWxlcyhkb21FbGVtZW50LCB2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlICdvZmZzZXRQYXJlbnQnOlxuICAgICAgY2FzZSAnb2Zmc2V0VG9wJzpcbiAgICAgIGNhc2UgJ29mZnNldExlZnQnOlxuICAgICAgY2FzZSAnb2Zmc2V0V2lkdGgnOlxuICAgICAgY2FzZSAnb2Zmc2V0SGVpZ2h0JzpcbiAgICAgIGNhc2UgJ2lzQ29udGVudEVkaXRhYmxlJzpcbiAgICAgIGNhc2UgJ291dGVyVGV4dCc6XG4gICAgICBjYXNlICdvdXRlckhUTUwnOlxuXG4gICAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSAnY2xhc3NOYW1lJzpcblxuICAgICAgLy8gRmFsbCB0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgREVWLW9ubHkgcGF0aFxuICAgICAgICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgICAgICAgIHZhciBob3N0Q29udGV4dFByb2QgPSBob3N0Q29udGV4dERldi5jb250ZXh0O1xuXG4gICAgICAgICAgaWYgKGhvc3RDb250ZXh0UHJvZCA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VOb25lICYmIHRhZyAhPT0gJ3N2ZycgJiYgdGFnICE9PSAnbWF0aCcpIHtcbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShwcm9wS2V5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3NlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JBdHRyaWJ1dGVPbkN1c3RvbUNvbXBvbmVudChkb21FbGVtZW50LCBwcm9wS2V5LCB2YWx1ZSk7XG5cbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgX3NlcnZlclZhbHVlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gVGhpcyBpcyB0aGUgZXhhY3QgVVJMIHN0cmluZyB3ZSBleHBlY3QgdGhhdCBGaXp6IHJlbmRlcnMgaWYgd2UgcHJvdmlkZSBhIGZ1bmN0aW9uIGFjdGlvbi5cbi8vIFdlIHVzZSB0aGlzIGZvciBoeWRyYXRpb24gd2FybmluZ3MuIEl0IG5lZWRzIHRvIGJlIGluIHN5bmMgd2l0aCBGaXp6LiBNYXliZSBtYWtlcyBzZW5zZVxuLy8gYXMgYSBzaGFyZWQgbW9kdWxlIGZvciB0aGF0IHJlYXNvbi5cblxuXG52YXIgRVhQRUNURURfRk9STV9BQ1RJT05fVVJMID0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNjcmlwdC11cmxcblwiamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ0EgUmVhY3QgZm9ybSB3YXMgdW5leHBlY3RlZGx5IHN1Ym1pdHRlZC4nKVwiO1xuXG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRHZW5lcmljRWxlbWVudChkb21FbGVtZW50LCB0YWcsIHByb3BzLCBob3N0Q29udGV4dCwgZXh0cmFBdHRyaWJ1dGVzKSB7XG4gIGZvciAodmFyIHByb3BLZXkgaW4gcHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wS2V5XTtcblxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID09PSB0cnVlKSB7XG4gICAgICAvLyBEb24ndCBib3RoZXIgY29tcGFyaW5nLiBXZSdyZSBpZ25vcmluZyBhbGwgdGhlc2Ugd2FybmluZ3MuXG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIFZhbGlkYXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgY29ycmVzcG9uZCB0byB0aGVpciBleHBlY3RlZCB2YWx1ZXMuXG5cblxuICAgIHN3aXRjaCAocHJvcEtleSkge1xuICAgICAgY2FzZSAnY2hpbGRyZW4nOiAvLyBDaGVja2VkIGFib3ZlIGFscmVhZHlcblxuICAgICAgY2FzZSAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJzpcbiAgICAgIGNhc2UgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZyc6XG4gICAgICBjYXNlICd2YWx1ZSc6IC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuXG4gICAgICBjYXNlICdjaGVja2VkJzogLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG5cbiAgICAgIGNhc2UgJ3NlbGVjdGVkJzpcbiAgICAgIGNhc2UgJ2RlZmF1bHRWYWx1ZSc6XG4gICAgICBjYXNlICdkZWZhdWx0Q2hlY2tlZCc6XG4gICAgICBjYXNlICdpbm5lckhUTUwnOlxuICAgICAgICAvLyBOb29wXG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlICdkYW5nZXJvdXNseVNldElubmVySFRNTCc6XG4gICAgICAgIHZhciBzZXJ2ZXJIVE1MID0gZG9tRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgIHZhciBuZXh0SHRtbCA9IHZhbHVlID8gdmFsdWUuX19odG1sIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIGV4cGVjdGVkSFRNTCA9IG5vcm1hbGl6ZUhUTUwoZG9tRWxlbWVudCwgbmV4dEh0bWwpO1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJIVE1MLCBleHBlY3RlZEhUTUwpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgJ2NsYXNzTmFtZSc6XG4gICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgJ2NsYXNzJywgdmFsdWUsIGV4dHJhQXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlICd0YWJJbmRleCc6XG4gICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgJ3RhYmluZGV4JywgdmFsdWUsIGV4dHJhQXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlICdzdHlsZSc6XG4gICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUocHJvcEtleSk7XG4gICAgICAgIGRpZmZIeWRyYXRlZFN0eWxlcyhkb21FbGVtZW50LCB2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlICdtdWx0aXBsZSc6XG4gICAgICAgIHtcbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHByb3BLZXkpO1xuICAgICAgICAgIHZhciBzZXJ2ZXJWYWx1ZSA9IGRvbUVsZW1lbnQubXVsdGlwbGU7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCB2YWx1ZSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnbXV0ZWQnOlxuICAgICAgICB7XG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShwcm9wS2V5KTtcbiAgICAgICAgICB2YXIgX3NlcnZlclZhbHVlMiA9IGRvbUVsZW1lbnQubXV0ZWQ7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIF9zZXJ2ZXJWYWx1ZTIsIHZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvRm9jdXMnOlxuICAgICAgICB7XG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSgnYXV0b2ZvY3VzJyk7XG4gICAgICAgICAgdmFyIF9zZXJ2ZXJWYWx1ZTMgPSBkb21FbGVtZW50LmF1dG9mb2N1cztcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgX3NlcnZlclZhbHVlMywgdmFsdWUpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3NyYyc6XG4gICAgICBjYXNlICdocmVmJzpcblxuICAgICAgICBoeWRyYXRlU2FuaXRpemVkQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIHByb3BLZXksIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgIGNhc2UgJ2Zvcm1BY3Rpb24nOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9zZXJ2ZXJWYWx1ZTQgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShwcm9wS2V5KTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTsgLy8gVGhlIHNlcnZlciBjYW4gc2V0IHRoZXNlIGV4dHJhIHByb3BlcnRpZXMgdG8gaW1wbGVtZW50IGFjdGlvbnMuXG4gICAgICAgICAgICAvLyBTbyB3ZSByZW1vdmUgdGhlbSBmcm9tIHRoZSBleHRyYSBhdHRyaWJ1dGVzIHdhcm5pbmdzLlxuXG4gICAgICAgICAgICBpZiAocHJvcEtleSA9PT0gJ2Zvcm1BY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoJ25hbWUnKTtcbiAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSgnZm9ybWVuY3R5cGUnKTtcbiAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSgnZm9ybW1ldGhvZCcpO1xuICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKCdmb3JtdGFyZ2V0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKCdlbmN0eXBlJyk7XG4gICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoJ21ldGhvZCcpO1xuICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKCd0YXJnZXQnKTtcbiAgICAgICAgICAgIH0gLy8gSWRlYWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byB3YXJuIGlmIHRoZSBzZXJ2ZXIgdmFsdWUgd2FzIG5vdCBhIGZ1bmN0aW9uXG4gICAgICAgICAgICAvLyBob3dldmVyIHNpbmNlIHRoZSBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueSBvZiB0aGVzZSBhdHRyaWJ1dGVzIGFueSB3YXkgaXRcbiAgICAgICAgICAgIC8vIHdhbnRzIGFzIGEgY3VzdG9tIHByb2dyZXNzaXZlIGVuaGFuY2VtZW50LCB0aGVyZSdzIG5vdGhpbmcgdG8gY29tcGFyZSB0by5cbiAgICAgICAgICAgIC8vIFdlIGNhbiBjaGVjayBpZiB0aGUgZnVuY3Rpb24gaGFzIHRoZSAkRk9STV9BQ1RJT04gcHJvcGVydHkgb24gdGhlIGNsaWVudFxuICAgICAgICAgICAgLy8gYW5kIGlmIGl0J3Mgbm90LCB3YXJuLCBidXQgdGhhdCdzIGFuIHVubmVjZXNzYXJ5IGNvbnN0cmFpbnQgdGhhdCB0aGV5XG4gICAgICAgICAgICAvLyBoYXZlIHRvIGhhdmUgdGhlIGV4dHJhIGV4dGVuc2lvbiB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmcgb24gdGhlIGNsaWVudC5cblxuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKF9zZXJ2ZXJWYWx1ZTQgPT09IEVYUEVDVEVEX0ZPUk1fQUNUSU9OX1VSTCkge1xuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksICdmdW5jdGlvbicsIHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGh5ZHJhdGVTYW5pdGl6ZWRBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgcHJvcEtleS50b0xvd2VyQ2FzZSgpLCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKTtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgJ3hsaW5rSHJlZic6XG4gICAgICAgIGh5ZHJhdGVTYW5pdGl6ZWRBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgJ3hsaW5rOmhyZWYnLCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKTtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgJ2NvbnRlbnRFZGl0YWJsZSc6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBMb3dlci1jYXNlIEJvb2xlYW5pc2ggU3RyaW5nXG4gICAgICAgICAgaHlkcmF0ZUJvb2xlYW5pc2hBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgJ2NvbnRlbnRlZGl0YWJsZScsIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3NwZWxsQ2hlY2snOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gTG93ZXItY2FzZSBCb29sZWFuaXNoIFN0cmluZ1xuICAgICAgICAgIGh5ZHJhdGVCb29sZWFuaXNoQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksICdzcGVsbGNoZWNrJywgdmFsdWUsIGV4dHJhQXR0cmlidXRlcyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnZHJhZ2dhYmxlJzpcbiAgICAgIGNhc2UgJ2F1dG9SZXZlcnNlJzpcbiAgICAgIGNhc2UgJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnOlxuICAgICAgY2FzZSAnZm9jdXNhYmxlJzpcbiAgICAgIGNhc2UgJ3ByZXNlcnZlQWxwaGEnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gQ2FzZS1zZW5zaXRpdmUgQm9vbGVhbmlzaCBTdHJpbmdcbiAgICAgICAgICBoeWRyYXRlQm9vbGVhbmlzaEF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBwcm9wS2V5LCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhbGxvd0Z1bGxTY3JlZW4nOlxuICAgICAgY2FzZSAnYXN5bmMnOlxuICAgICAgY2FzZSAnYXV0b1BsYXknOlxuICAgICAgY2FzZSAnY29udHJvbHMnOlxuICAgICAgY2FzZSAnZGVmYXVsdCc6XG4gICAgICBjYXNlICdkZWZlcic6XG4gICAgICBjYXNlICdkaXNhYmxlZCc6XG4gICAgICBjYXNlICdkaXNhYmxlUGljdHVyZUluUGljdHVyZSc6XG4gICAgICBjYXNlICdkaXNhYmxlUmVtb3RlUGxheWJhY2snOlxuICAgICAgY2FzZSAnZm9ybU5vVmFsaWRhdGUnOlxuICAgICAgY2FzZSAnaGlkZGVuJzpcbiAgICAgIGNhc2UgJ2xvb3AnOlxuICAgICAgY2FzZSAnbm9Nb2R1bGUnOlxuICAgICAgY2FzZSAnbm9WYWxpZGF0ZSc6XG4gICAgICBjYXNlICdvcGVuJzpcbiAgICAgIGNhc2UgJ3BsYXlzSW5saW5lJzpcbiAgICAgIGNhc2UgJ3JlYWRPbmx5JzpcbiAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgIGNhc2UgJ3JldmVyc2VkJzpcbiAgICAgIGNhc2UgJ3Njb3BlZCc6XG4gICAgICBjYXNlICdzZWFtbGVzcyc6XG4gICAgICBjYXNlICdpdGVtU2NvcGUnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gU29tZSBvZiB0aGVzZSBuZWVkIHRvIGJlIGxvd2VyIGNhc2UgdG8gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZXh0cmFBdHRyaWJ1dGVzIGxpc3QuXG4gICAgICAgICAgaHlkcmF0ZUJvb2xlYW5BdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgcHJvcEtleS50b0xvd2VyQ2FzZSgpLCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdjYXB0dXJlJzpcbiAgICAgIGNhc2UgJ2Rvd25sb2FkJzpcbiAgICAgICAge1xuICAgICAgICAgIGh5ZHJhdGVPdmVybG9hZGVkQm9vbGVhbkF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBwcm9wS2V5LCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdjb2xzJzpcbiAgICAgIGNhc2UgJ3Jvd3MnOlxuICAgICAgY2FzZSAnc2l6ZSc6XG4gICAgICBjYXNlICdzcGFuJzpcbiAgICAgICAge1xuICAgICAgICAgIGh5ZHJhdGVQb3NpdGl2ZU51bWVyaWNBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgcHJvcEtleSwgdmFsdWUsIGV4dHJhQXR0cmlidXRlcyk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAncm93U3Bhbic6XG4gICAgICAgIHtcbiAgICAgICAgICBoeWRyYXRlTnVtZXJpY0F0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCAncm93c3BhbicsIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAge1xuICAgICAgICAgIGh5ZHJhdGVOdW1lcmljQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIHByb3BLZXksIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3hIZWlnaHQnOlxuICAgICAgICBoeWRyYXRlQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksICd4LWhlaWdodCcsIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAneGxpbmtBY3R1YXRlJzpcbiAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCAneGxpbms6YWN0dWF0ZScsIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAneGxpbmtBcmNyb2xlJzpcbiAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCAneGxpbms6YXJjcm9sZScsIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAneGxpbmtSb2xlJzpcbiAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCAneGxpbms6cm9sZScsIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAneGxpbmtTaG93JzpcbiAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCAneGxpbms6c2hvdycsIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAneGxpbmtUaXRsZSc6XG4gICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoZG9tRWxlbWVudCwgcHJvcEtleSwgJ3hsaW5rOnRpdGxlJywgdmFsdWUsIGV4dHJhQXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlICd4bGlua1R5cGUnOlxuICAgICAgICBoeWRyYXRlQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksICd4bGluazp0eXBlJywgdmFsdWUsIGV4dHJhQXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlICd4bWxCYXNlJzpcbiAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCAneG1sOmJhc2UnLCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKTtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgJ3htbExhbmcnOlxuICAgICAgICBoeWRyYXRlQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksICd4bWw6bGFuZycsIHZhbHVlLCBleHRyYUF0dHJpYnV0ZXMpO1xuICAgICAgICBjb250aW51ZTtcblxuICAgICAgY2FzZSAneG1sU3BhY2UnOlxuICAgICAgICBoeWRyYXRlQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksICd4bWw6c3BhY2UnLCB2YWx1ZSwgZXh0cmFBdHRyaWJ1dGVzKTtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIC8vIHNob3VsZElnbm9yZUF0dHJpYnV0ZVxuICAgICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBmaWx0ZXJlZCBvdXQgbnVsbC91bmRlZmluZWQgYW5kIHJlc2VydmVkIHdvcmRzLlxuICAgICAgICAgIHByb3BLZXkubGVuZ3RoID4gMiAmJiAocHJvcEtleVswXSA9PT0gJ28nIHx8IHByb3BLZXlbMF0gPT09ICdPJykgJiYgKHByb3BLZXlbMV0gPT09ICduJyB8fCBwcm9wS2V5WzFdID09PSAnTicpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IGdldEF0dHJpYnV0ZUFsaWFzKHByb3BLZXkpO1xuICAgICAgICAgIHZhciBpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcgPSBmYWxzZTsgLy8gVGhpcyBpcyBhIERFVi1vbmx5IHBhdGhcblxuICAgICAgICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgICAgICAgIHZhciBob3N0Q29udGV4dFByb2QgPSBob3N0Q29udGV4dERldi5jb250ZXh0O1xuXG4gICAgICAgICAgaWYgKGhvc3RDb250ZXh0UHJvZCA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VOb25lICYmIHRhZyAhPT0gJ3N2ZycgJiYgdGFnICE9PSAnbWF0aCcpIHtcbiAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BLZXkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBudWxsICYmIHN0YW5kYXJkTmFtZSAhPT0gcHJvcEtleSkge1xuICAgICAgICAgICAgICAvLyBJZiBhbiBTVkcgcHJvcCBpcyBzdXBwbGllZCB3aXRoIGJhZCBjYXNpbmcsIGl0IHdpbGxcbiAgICAgICAgICAgICAgLy8gYmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBmcm9tIEhUTUwsIGJ1dCB3aWxsIHByb2R1Y2UgYSBtaXNtYXRjaFxuICAgICAgICAgICAgICAvLyAoYW5kIHdvdWxkIGJlIGluY29ycmVjdGx5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQpLlxuICAgICAgICAgICAgICAvLyBIb3dldmVyLCB3ZSBhbHJlYWR5IHdhcm4gYWJvdXQgYmFkIGNhc2luZyBlbHNld2hlcmUuXG4gICAgICAgICAgICAgIC8vIFNvIHdlJ2xsIHNraXAgdGhlIG1pc2xlYWRpbmcgZXh0cmEgbWlzbWF0Y2ggd2FybmluZyBpbiB0aGlzIGNhc2UuXG4gICAgICAgICAgICAgIGlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZyA9IHRydWU7XG4gICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoc3RhbmRhcmROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3NlcnZlclZhbHVlNSA9IGdldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTtcblxuICAgICAgICAgIGlmICghaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nKSB7XG4gICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgX3NlcnZlclZhbHVlNSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcHJvcHMsIGlzQ29uY3VycmVudE1vZGUsIHNob3VsZFdhcm5EZXYsIGhvc3RDb250ZXh0KSB7XG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjYW5jZWwnLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Nsb3NlJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdlbWJlZCc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgbG9hZCBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc291cmNlJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBlcnJvciBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBlcnJvciBhbmQgbG9hZCBldmVudHMuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAge1xuICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdpbnB1dCcsIHByb3BzKTtcbiAgICAgIH0gLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpOyAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuXG4gICAgICB2YWxpZGF0ZUlucHV0UHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpOyAvLyBGb3IgaW5wdXQgYW5kIHRleHRhcmVhIHdlIGN1cnJlbnQgYWx3YXlzIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgYXRcbiAgICAgIC8vIHBvc3QgbW91bnQgdG8gZm9yY2UgaXQgdG8gZGl2ZXJnZSBmcm9tIGF0dHJpYnV0ZXMuIEhvd2V2ZXIsIGZvclxuICAgICAgLy8gb3B0aW9uIGFuZCBzZWxlY3Qgd2UgZG9uJ3QgcXVpdGUgZG8gdGhlIHNhbWUgdGhpbmcgYW5kIHNlbGVjdFxuICAgICAgLy8gaXMgbm90IHJlc2lsaWVudCB0byB0aGUgRE9NIHN0YXRlIGNoYW5naW5nIHNvIHdlIGRvbid0IGRvIHRoYXQgaGVyZS5cbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIG5vdCBkb2luZyB0aGlzIGZvciBpbnB1dCBhbmQgdGV4dGFyZWEuXG5cbiAgICAgIGluaXRJbnB1dChkb21FbGVtZW50LCBwcm9wcy52YWx1ZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCBwcm9wcy5jaGVja2VkLCBwcm9wcy5kZWZhdWx0Q2hlY2tlZCwgcHJvcHMudHlwZSwgcHJvcHMubmFtZSwgdHJ1ZSk7XG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHZhbGlkYXRlT3B0aW9uUHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAge1xuICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdzZWxlY3QnLCBwcm9wcyk7XG4gICAgICB9IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcbiAgICAgIHZhbGlkYXRlU2VsZWN0UHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICB7XG4gICAgICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ3RleHRhcmVhJywgcHJvcHMpO1xuICAgICAgfSAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7IC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG5cbiAgICAgIHZhbGlkYXRlVGV4dGFyZWFQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICBpbml0VGV4dGFyZWEoZG9tRWxlbWVudCwgcHJvcHMudmFsdWUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgcHJvcHMuY2hpbGRyZW4pO1xuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuOyAvLyBGb3IgdGV4dCBjb250ZW50IGNoaWxkcmVuIHdlIGNvbXBhcmUgYWdhaW5zdCB0ZXh0Q29udGVudC4gVGhpc1xuICAvLyBtaWdodCBtYXRjaCBhZGRpdGlvbmFsIEhUTUwgdGhhdCBpcyBoaWRkZW4gd2hlbiB3ZSByZWFkIGl0IHVzaW5nXG4gIC8vIHRleHRDb250ZW50LiBFLmcuIFwiZm9vXCIgd2lsbCBtYXRjaCBcImY8c3Bhbj5vbzwvc3Bhbj5cIiBidXQgdGhhdCBzdGlsbFxuICAvLyBzYXRpc2ZpZXMgb3VyIHJlcXVpcmVtZW50LiBPdXIgcmVxdWlyZW1lbnQgaXMgbm90IHRvIHByb2R1Y2UgcGVyZmVjdFxuICAvLyBIVE1MIGFuZCBhdHRyaWJ1dGVzLiBJZGVhbGx5IHdlIHNob3VsZCBwcmVzZXJ2ZSBzdHJ1Y3R1cmUgYnV0IGl0J3NcbiAgLy8gb2sgbm90IHRvIGlmIHRoZSB2aXNpYmxlIGNvbnRlbnQgaXMgc3RpbGwgZW5vdWdoIHRvIGluZGljYXRlIHdoYXRcbiAgLy8gZXZlbiBsaXN0ZW5lcnMgdGhlc2Ugbm9kZXMgbWlnaHQgYmUgd2lyZWQgdXAgdG8uXG4gIC8vIFRPRE86IFdhcm4gaWYgdGhlcmUgaXMgbW9yZSB0aGFuIGEgc2luZ2xlIHRleHROb2RlIGFzIGEgY2hpbGQuXG4gIC8vIFRPRE86IFNob3VsZCB3ZSB1c2UgZG9tRWxlbWVudC5maXJzdENoaWxkLm5vZGVWYWx1ZSB0byBjb21wYXJlP1xuXG4gIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjaGlsZHJlbiA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gJycgKyBjaGlsZHJlbikge1xuICAgICAgaWYgKHByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBjaGVja0ZvclVubWF0Y2hlZFRleHQoZG9tRWxlbWVudC50ZXh0Q29udGVudCwgY2hpbGRyZW4sIGlzQ29uY3VycmVudE1vZGUsIHNob3VsZFdhcm5EZXYpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQ29uY3VycmVudE1vZGUgfHwgIWVuYWJsZUNsaWVudFJlbmRlckZhbGxiYWNrT25UZXh0TWlzbWF0Y2gpIHtcbiAgICAgICAgLy8gV2UgcmVhbGx5IHNob3VsZCBiZSBwYXRjaGluZyB0aGlzIGluIHRoZSBjb21taXQgcGhhc2UgYnV0IHNpbmNlXG4gICAgICAgIC8vIHRoaXMgb25seSBhZmZlY3RzIGxlZ2FjeSBtb2RlIGh5ZHJhdGlvbiB3aGljaCBpcyBkZXByZWNhdGVkIGFueXdheVxuICAgICAgICAvLyB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBpdC5cbiAgICAgICAgLy8gSG9zdCBzaW5nbGV0b25zIGdldCB0aGVpciBjaGlsZHJlbiBhcHBlbmRlZCBhbmQgZG9uJ3QgdXNlIHRoZSB0ZXh0XG4gICAgICAgIC8vIGNvbnRlbnQgbWVjaGFuaXNtLlxuICAgICAgICBpZiAodGFnICE9PSAnYm9keScpIHtcbiAgICAgICAgICBkb21FbGVtZW50LnRleHRDb250ZW50ID0gY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocHJvcHMub25TY3JvbGwgIT0gbnVsbCkge1xuICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKHByb3BzLm9uU2Nyb2xsRW5kICE9IG51bGwpIHtcbiAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGxlbmQnLCBkb21FbGVtZW50KTtcbiAgfVxuXG4gIGlmIChwcm9wcy5vbkNsaWNrICE9IG51bGwpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICB9XG5cbiAgaWYgKHNob3VsZFdhcm5EZXYpIHtcbiAgICB2YXIgZXh0cmFBdHRyaWJ1dGVzID0gbmV3IFNldCgpO1xuICAgIHZhciBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5hdHRyaWJ1dGVzO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZXNbX2ldLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgICAvLyBUT0RPOiBPbmx5IGlnbm9yZSB0aGVtIG9uIGNvbnRyb2xsZWQgdGFncy5cbiAgICAgICAgY2FzZSAndmFsdWUnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NoZWNrZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlbGVjdGVkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgdXNlIHRoZSBvcmlnaW5hbCBuYW1lLlxuICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzEwNjc2LlxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5hZGQoYXR0cmlidXRlc1tfaV0ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzQ3VzdG9tRWxlbWVudCh0YWcpKSB7XG4gICAgICBkaWZmSHlkcmF0ZWRDdXN0b21Db21wb25lbnQoZG9tRWxlbWVudCwgdGFnLCBwcm9wcywgaG9zdENvbnRleHQsIGV4dHJhQXR0cmlidXRlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZmZIeWRyYXRlZEdlbmVyaWNFbGVtZW50KGRvbUVsZW1lbnQsIHRhZywgcHJvcHMsIGhvc3RDb250ZXh0LCBleHRyYUF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIGlmIChleHRyYUF0dHJpYnV0ZXMuc2l6ZSA+IDAgJiYgcHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzKGV4dHJhQXR0cmlidXRlcyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRUZXh0KHRleHROb2RlLCB0ZXh0LCBpc0NvbmN1cnJlbnRNb2RlKSB7XG4gIHZhciBpc0RpZmZlcmVudCA9IHRleHROb2RlLm5vZGVWYWx1ZSAhPT0gdGV4dDtcbiAgcmV0dXJuIGlzRGlmZmVyZW50O1xufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSA8JXM+IGluIDwlcz4uJywgY2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gdGhlIHRleHQgbm9kZSBcIiVzXCIgaW4gPCVzPi4nLCBjaGlsZC5ub2RlVmFsdWUsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnROb2RlLCB0YWcsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIDwlcz4gaW4gPCVzPi4nLCB0YWcsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnROb2RlLCB0ZXh0KSB7XG4gIHtcbiAgICBpZiAodGV4dCA9PT0gJycpIHtcbiAgICAgIC8vIFdlIGV4cGVjdCB0byBpbnNlcnQgZW1wdHkgdGV4dCBub2RlcyBzaW5jZSB0aGV5J3JlIG5vdCByZXByZXNlbnRlZCBpblxuICAgICAgLy8gdGhlIEhUTUwuXG4gICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBzcGVjaWFsIGNhc2UgaWYgd2UgY2FuIGp1c3QgYXZvaWQgaW5zZXJ0aW5nIGVtcHR5XG4gICAgICAvLyB0ZXh0IG5vZGVzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgdGV4dCBub2RlIGZvciBcIiVzXCIgaW4gPCVzPi4nLCB0ZXh0LCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGRvbUVsZW1lbnQsIHRhZywgcHJvcHMpIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZElucHV0U3RhdGUoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRUZXh0YXJlYVN0YXRlKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFNlbGVjdFN0YXRlKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUxpbmtQcm9wc0ZvclN0eWxlUmVzb3VyY2UocHJvcHMpIHtcbiAge1xuICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gd2Uga25vdyB3ZSBhcmUgb3B0aW5nIGludG8gUmVzb3VyY2Ugc2VtYW50aWNzIChpLmUuIHByZWNlZGVuY2UgaXMgbm90IG51bGwpXG4gICAgdmFyIGhyZWYgPSBwcm9wcy5ocmVmLFxuICAgICAgICBvbkxvYWQgPSBwcm9wcy5vbkxvYWQsXG4gICAgICAgIG9uRXJyb3IgPSBwcm9wcy5vbkVycm9yLFxuICAgICAgICBkaXNhYmxlZCA9IHByb3BzLmRpc2FibGVkO1xuICAgIHZhciBpbmNsdWRlZFByb3BzID0gW107XG4gICAgaWYgKG9uTG9hZCkgaW5jbHVkZWRQcm9wcy5wdXNoKCdgb25Mb2FkYCcpO1xuICAgIGlmIChvbkVycm9yKSBpbmNsdWRlZFByb3BzLnB1c2goJ2BvbkVycm9yYCcpO1xuICAgIGlmIChkaXNhYmxlZCAhPSBudWxsKSBpbmNsdWRlZFByb3BzLnB1c2goJ2BkaXNhYmxlZGAnKTtcbiAgICB2YXIgaW5jbHVkZWRQcm9wc1BocmFzZSA9IHByb3BOYW1lc0xpc3RKb2luKGluY2x1ZGVkUHJvcHMsICdhbmQnKTtcbiAgICBpbmNsdWRlZFByb3BzUGhyYXNlICs9IGluY2x1ZGVkUHJvcHMubGVuZ3RoID09PSAxID8gJyBwcm9wJyA6ICcgcHJvcHMnO1xuICAgIHZhciB3aXRoQXJ0aWNsZVBocmFzZSA9IGluY2x1ZGVkUHJvcHMubGVuZ3RoID09PSAxID8gJ2FuICcgKyBpbmNsdWRlZFByb3BzUGhyYXNlIDogJ3RoZSAnICsgaW5jbHVkZWRQcm9wc1BocmFzZTtcblxuICAgIGlmIChpbmNsdWRlZFByb3BzLmxlbmd0aCkge1xuICAgICAgZXJyb3IoJ1JlYWN0IGVuY291bnRlcmVkIGEgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIlc1wiIC4uLiAvPiB3aXRoIGEgYHByZWNlZGVuY2VgIHByb3AgdGhhdCcgKyAnIGFsc28gaW5jbHVkZWQgJXMuIFRoZSBwcmVzZW5jZSBvZiBsb2FkaW5nIGFuZCBlcnJvciBoYW5kbGVycyBpbmRpY2F0ZXMgYW4gaW50ZW50IHRvIG1hbmFnZScgKyAnIHRoZSBzdHlsZXNoZWV0IGxvYWRpbmcgc3RhdGUgZnJvbSB5b3VyIGZyb20geW91ciBDb21wb25lbnQgY29kZSBhbmQgUmVhY3Qgd2lsbCBub3QgaG9pc3Qgb3InICsgJyBkZWR1cGxpY2F0ZSB0aGlzIHN0eWxlc2hlZXQuIElmIHlvdXIgaW50ZW50IHdhcyB0byBoYXZlIFJlYWN0IGhvaXN0IGFuZCBkZWR1cGxjaWF0ZSB0aGlzIHN0eWxlc2hlZXQnICsgJyB1c2luZyB0aGUgYHByZWNlZGVuY2VgIHByb3AgcmVtb3ZlIHRoZSAlcywgb3RoZXJ3aXNlIHJlbW92ZSB0aGUgYHByZWNlZGVuY2VgIHByb3AuJywgaHJlZiwgd2l0aEFydGljbGVQaHJhc2UsIGluY2x1ZGVkUHJvcHNQaHJhc2UpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHByb3BOYW1lc0xpc3RKb2luKGxpc3QsIGNvbWJpbmF0b3IpIHtcbiAgc3dpdGNoIChsaXN0Lmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiAnJztcblxuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBsaXN0WzBdO1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGxpc3RbMF0gKyAnICcgKyBjb21iaW5hdG9yICsgJyAnICsgbGlzdFsxXTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCAtMSkuam9pbignLCAnKSArICcsICcgKyBjb21iaW5hdG9yICsgJyAnICsgbGlzdFtsaXN0Lmxlbmd0aCAtIDFdO1xuICB9XG59XG5cbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyA9ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnO1xudmFyIFNVU1BFTlNFX1NUQVJUX0RBVEEgPSAnJCc7XG52YXIgU1VTUEVOU0VfRU5EX0RBVEEgPSAnLyQnO1xudmFyIFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSA9ICckPyc7XG52YXIgU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSA9ICckISc7XG52YXIgRk9STV9TVEFURV9JU19NQVRDSElORyA9ICdGISc7XG52YXIgRk9STV9TVEFURV9JU19OT1RfTUFUQ0hJTkcgPSAnRic7XG52YXIgU1RZTEUgPSAnc3R5bGUnO1xudmFyIEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZSA9IDA7XG52YXIgSG9zdENvbnRleHROYW1lc3BhY2VTdmcgPSAxO1xudmFyIEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aCA9IDI7XG52YXIgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG52YXIgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckVsZW1lbnQgOiByb290Q29udGFpbmVyRWxlbWVudC5vd25lckRvY3VtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRSb290SG9zdENvbnRleHQocm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHZhciB0eXBlO1xuICB2YXIgY29udGV4dDtcbiAgdmFyIG5vZGVUeXBlID0gcm9vdENvbnRhaW5lckluc3RhbmNlLm5vZGVUeXBlO1xuXG4gIHN3aXRjaCAobm9kZVR5cGUpIHtcbiAgICBjYXNlIERPQ1VNRU5UX05PREU6XG4gICAgY2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlxuICAgICAge1xuICAgICAgICB0eXBlID0gbm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyAnI2RvY3VtZW50JyA6ICcjZnJhZ21lbnQnO1xuICAgICAgICB2YXIgcm9vdCA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICB2YXIgbmFtZXNwYWNlVVJJID0gcm9vdC5uYW1lc3BhY2VVUkk7XG4gICAgICAgICAgY29udGV4dCA9IG5hbWVzcGFjZVVSSSA/IGdldE93bkhvc3RDb250ZXh0KG5hbWVzcGFjZVVSSSkgOiBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dCA9IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyByb290Q29udGFpbmVySW5zdGFuY2UucGFyZW50Tm9kZSA6IHJvb3RDb250YWluZXJJbnN0YW5jZTtcbiAgICAgICAgdHlwZSA9IGNvbnRhaW5lci50YWdOYW1lO1xuICAgICAgICB2YXIgX25hbWVzcGFjZVVSSSA9IGNvbnRhaW5lci5uYW1lc3BhY2VVUkk7XG5cbiAgICAgICAgaWYgKCFfbmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgICBjb250ZXh0ID0gSG9zdENvbnRleHROYW1lc3BhY2VTdmc7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdtYXRoJzpcbiAgICAgICAgICAgICAgY29udGV4dCA9IEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnRleHQgPSBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgb3duQ29udGV4dCA9IGdldE93bkhvc3RDb250ZXh0KF9uYW1lc3BhY2VVUkkpO1xuICAgICAgICAgIGNvbnRleHQgPSBnZXRDaGlsZEhvc3RDb250ZXh0UHJvZChvd25Db250ZXh0LCB0eXBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHZhciB2YWxpZGF0ZWRUYWcgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm9EZXYobnVsbCwgdmFsaWRhdGVkVGFnKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIGFuY2VzdG9ySW5mbzogYW5jZXN0b3JJbmZvXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRPd25Ib3N0Q29udGV4dChuYW1lc3BhY2VVUkkpIHtcbiAgc3dpdGNoIChuYW1lc3BhY2VVUkkpIHtcbiAgICBjYXNlIFNWR19OQU1FU1BBQ0U6XG4gICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VTdmc7XG5cbiAgICBjYXNlIE1BVEhfTkFNRVNQQUNFOlxuICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VOb25lO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkSG9zdENvbnRleHRQcm9kKHBhcmVudE5hbWVzcGFjZSwgdHlwZSkge1xuICBpZiAocGFyZW50TmFtZXNwYWNlID09PSBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmUpIHtcbiAgICAvLyBObyAob3IgZGVmYXVsdCkgcGFyZW50IG5hbWVzcGFjZTogcG90ZW50aWFsIGVudHJ5IHBvaW50LlxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc3ZnJzpcbiAgICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnO1xuXG4gICAgICBjYXNlICdtYXRoJzpcbiAgICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aDtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFyZW50TmFtZXNwYWNlID09PSBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZyAmJiB0eXBlID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyBXZSdyZSBsZWF2aW5nIFNWRy5cbiAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VOb25lO1xuICB9IC8vIEJ5IGRlZmF1bHQsIHBhc3MgbmFtZXNwYWNlIGJlbG93LlxuXG5cbiAgcmV0dXJuIHBhcmVudE5hbWVzcGFjZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRIb3N0Q29udGV4dChwYXJlbnRIb3N0Q29udGV4dCwgdHlwZSkge1xuICB7XG4gICAgdmFyIHBhcmVudEhvc3RDb250ZXh0RGV2ID0gcGFyZW50SG9zdENvbnRleHQ7XG4gICAgdmFyIGNvbnRleHQgPSBnZXRDaGlsZEhvc3RDb250ZXh0UHJvZChwYXJlbnRIb3N0Q29udGV4dERldi5jb250ZXh0LCB0eXBlKTtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mb0RldihwYXJlbnRIb3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgYW5jZXN0b3JJbmZvOiBhbmNlc3RvckluZm9cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBwcmVwYXJlRm9yQ29tbWl0KGNvbnRhaW5lckluZm8pIHtcbiAgZXZlbnRzRW5hYmxlZCA9IGlzRW5hYmxlZCgpO1xuICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCk7XG4gIHZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG5cbiAgc2V0RW5hYmxlZChmYWxzZSk7XG4gIHJldHVybiBhY3RpdmVJbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHJlc2V0QWZ0ZXJDb21taXQoY29udGFpbmVySW5mbykge1xuICByZXN0b3JlU2VsZWN0aW9uKHNlbGVjdGlvbkluZm9ybWF0aW9uKTtcbiAgc2V0RW5hYmxlZChldmVudHNFbmFibGVkKTtcbiAgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUhvaXN0YWJsZUluc3RhbmNlKHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgdmFyIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGRvbUVsZW1lbnQpO1xuICB1cGRhdGVGaWJlclByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMpO1xuICBtYXJrTm9kZUFzSG9pc3RhYmxlKGRvbUVsZW1lbnQpO1xuICByZXR1cm4gZG9tRWxlbWVudDtcbn1cbnZhciB3YXJuZWRVbmtub3duVGFncyA9IHtcbiAgLy8gVGhlcmUgYXJlIHdvcmtpbmcgcG9seWZpbGxzIGZvciA8ZGlhbG9nPi4gTGV0IHBlb3BsZSB1c2UgaXQuXG4gIGRpYWxvZzogdHJ1ZSxcbiAgLy8gRWxlY3Ryb24gc2hpcHMgYSBjdXN0b20gPHdlYnZpZXc+IHRhZyB0byBkaXNwbGF5IGV4dGVybmFsIHdlYiBjb250ZW50IGluXG4gIC8vIGFuIGlzb2xhdGVkIGZyYW1lIGFuZCBwcm9jZXNzLlxuICAvLyBUaGlzIHRhZyBpcyBub3QgcHJlc2VudCBpbiBub24gRWxlY3Ryb24gZW52aXJvbm1lbnRzIHN1Y2ggYXMgSlNEb20gd2hpY2hcbiAgLy8gaXMgb2Z0ZW4gdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgLy8gQHNlZSBodHRwczovL2VsZWN0cm9uanMub3JnL2RvY3MvYXBpL3dlYnZpZXctdGFnXG4gIHdlYnZpZXc6IHRydWVcbn07XG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZSh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB2YXIgaG9zdENvbnRleHRQcm9kO1xuXG4gIHtcbiAgICAvLyBUT0RPOiB0YWtlIG5hbWVzcGFjZSBpbnRvIGFjY291bnQgd2hlbiB2YWxpZGF0aW5nLlxuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHZhbGlkYXRlRE9NTmVzdGluZyh0eXBlLCBob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8pO1xuICAgIGhvc3RDb250ZXh0UHJvZCA9IGhvc3RDb250ZXh0RGV2LmNvbnRleHQ7XG4gIH1cblxuICB2YXIgb3duZXJEb2N1bWVudCA9IGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVySW5zdGFuY2UpO1xuICB2YXIgZG9tRWxlbWVudDtcblxuICBzd2l0Y2ggKGhvc3RDb250ZXh0UHJvZCkge1xuICAgIGNhc2UgSG9zdENvbnRleHROYW1lc3BhY2VTdmc6XG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05BTUVTUEFDRSwgdHlwZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdENvbnRleHROYW1lc3BhY2VNYXRoOlxuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE1BVEhfTkFNRVNQQUNFLCB0eXBlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTkFNRVNQQUNFLCB0eXBlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlICdtYXRoJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTUFUSF9OQU1FU1BBQ0UsIHR5cGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ3NjcmlwdCc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBzY3JpcHQgdmlhIC5pbm5lckhUTUwgc28gaXRzIFwicGFyc2VyLWluc2VydGVkXCIgZmxhZyBpc1xuICAgICAgICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90IGV4ZWN1dGVcbiAgICAgICAgICAgIHZhciBkaXYgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzxzY3JpcHQ+PCcgKyAnL3NjcmlwdD4nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8geWllbGQgYSBzY3JpcHQgZWxlbWVudC5cblxuICAgICAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBkaXYuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGRvbUVsZW1lbnQgPSBkaXYucmVtb3ZlQ2hpbGQoZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnLCB7XG4gICAgICAgICAgICAgICAgaXM6IHByb3BzLmlzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gU2VwYXJhdGUgZWxzZSBicmFuY2ggaW5zdGVhZCBvZiB1c2luZyBgcHJvcHMuaXMgfHwgdW5kZWZpbmVkYCBhYm92ZSBiZWNhdXNlIG9mIGEgRmlyZWZveCBidWcuXG4gICAgICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzY4OTZcbiAgICAgICAgICAgICAgLy8gYW5kIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI0MFxuICAgICAgICAgICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wcy5zaXplKSB7XG4gICAgICAgICAgICAgIC8vIFNldHRpbmcgYSBzaXplIGdyZWF0ZXIgdGhhbiAxIGNhdXNlcyBhIHNlbGVjdCB0byBiZWhhdmUgbGlrZSBgbXVsdGlwbGU9dHJ1ZWAsIHdoZXJlXG4gICAgICAgICAgICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgbm8gb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gYSBzZWxlY3QgaW4gXCJzaW5nbGUgc2VsZWN0aW9uIG1vZGVcIi5cbiAgICAgICAgICAgICAgZG9tRWxlbWVudC5zaXplID0gcHJvcHMuc2l6ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlLCB7XG4gICAgICAgICAgICAgICAgaXM6IHByb3BzLmlzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gU2VwYXJhdGUgZWxzZSBicmFuY2ggaW5zdGVhZCBvZiB1c2luZyBgcHJvcHMuaXMgfHwgdW5kZWZpbmVkYCBhYm92ZSBiZWNhdXNlIG9mIGEgRmlyZWZveCBidWcuXG4gICAgICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzY4OTZcbiAgICAgICAgICAgICAgLy8gYW5kIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI0MFxuICAgICAgICAgICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmICh0eXBlLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSdyZSBub3QgU1ZHL01hdGhNTCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIGRhc2gsIHNvIHdlJ3JlIG5vdCBhIGN1c3RvbSBlbGVtZW50XG4gICAgICAgICAgICAgICAgLy8gRXZlbiBpZiB5b3UgdXNlIGBpc2AsIHRoZXNlIHNob3VsZCBiZSBvZiBrbm93biB0eXBlIGFuZCBsb3dlciBjYXNlLlxuICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSB0eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCc8JXMgLz4gaXMgdXNpbmcgaW5jb3JyZWN0IGNhc2luZy4gJyArICdVc2UgUGFzY2FsQ2FzZSBmb3IgUmVhY3QgY29tcG9uZW50cywgJyArICdvciBsb3dlcmNhc2UgZm9yIEhUTUwgZWxlbWVudHMuJywgdHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvbUVsZW1lbnQpID09PSAnW29iamVjdCBIVE1MVW5rbm93bkVsZW1lbnRdJyAmJiAhaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRVbmtub3duVGFncywgdHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgIHdhcm5lZFVua25vd25UYWdzW3R5cGVdID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgZXJyb3IoJ1RoZSB0YWcgPCVzPiBpcyB1bnJlY29nbml6ZWQgaW4gdGhpcyBicm93c2VyLiAnICsgJ0lmIHlvdSBtZWFudCB0byByZW5kZXIgYSBSZWFjdCBjb21wb25lbnQsIHN0YXJ0IGl0cyBuYW1lIHdpdGggJyArICdhbiB1cHBlcmNhc2UgbGV0dGVyLicsIHR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cblxuICB9XG5cbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgZG9tRWxlbWVudCk7XG4gIHVwZGF0ZUZpYmVyUHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICByZXR1cm4gZG9tRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMsIGhvc3RDb250ZXh0KSB7XG4gIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIHByb3BzKTtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdidXR0b24nOlxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJldHVybiAhIXByb3BzLmF1dG9Gb2N1cztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByb3BzKSB7XG4gIHJldHVybiB0eXBlID09PSAndGV4dGFyZWEnIHx8IHR5cGUgPT09ICdub3NjcmlwdCcgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInIHx8IHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sICE9IG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0SW5zdGFuY2UodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFyIGFuY2VzdG9yID0gaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLmN1cnJlbnQ7XG5cbiAgICBpZiAoYW5jZXN0b3IgIT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVUZXh0TmVzdGluZyh0ZXh0LCBhbmNlc3Rvci50YWcpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB0ZXh0Tm9kZSA9IGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVySW5zdGFuY2UpLmNyZWF0ZVRleHROb2RlKHRleHQpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0Tm9kZSk7XG4gIHJldHVybiB0ZXh0Tm9kZTtcbn1cbmZ1bmN0aW9uIGdldEN1cnJlbnRFdmVudFByaW9yaXR5KCkge1xuICB2YXIgY3VycmVudEV2ZW50ID0gd2luZG93LmV2ZW50O1xuXG4gIGlmIChjdXJyZW50RXZlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgfVxuXG4gIHJldHVybiBnZXRFdmVudFByaW9yaXR5KGN1cnJlbnRFdmVudC50eXBlKTtcbn1cbnZhciBjdXJyZW50UG9wc3RhdGVUcmFuc2l0aW9uRXZlbnQgPSBudWxsO1xuZnVuY3Rpb24gc2hvdWxkQXR0ZW1wdEVhZ2VyVHJhbnNpdGlvbigpIHtcbiAgdmFyIGV2ZW50ID0gd2luZG93LmV2ZW50O1xuXG4gIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAncG9wc3RhdGUnKSB7XG4gICAgLy8gVGhpcyBpcyBhIHBvcHN0YXRlIGV2ZW50LiBBdHRlbXB0IHRvIHJlbmRlciBhbnkgdHJhbnNpdGlvbiBkdXJpbmcgdGhpc1xuICAgIC8vIGV2ZW50IHN5bmNocm9ub3VzbHkuIFVubGVzcyB3ZSBhbHJlYWR5IGF0dGVtcHRlZCBkdXJpbmcgdGhpcyBldmVudC5cbiAgICBpZiAoZXZlbnQgPT09IGN1cnJlbnRQb3BzdGF0ZVRyYW5zaXRpb25FdmVudCkge1xuICAgICAgLy8gV2UgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gcmVuZGVyIHRoaXMgcG9wc3RhdGUgdHJhbnNpdGlvbiBzeW5jaHJvbm91c2x5LlxuICAgICAgLy8gQW55IHN1YnNlcXVlbnQgYXR0ZW1wdHMgbXVzdCBoYXZlIGhhcHBlbmVkIGFzIHRoZSByZXN1bHQgb2YgYSBkZXJpdmVkXG4gICAgICAvLyB1cGRhdGUsIGxpa2Ugc3RhcnRUcmFuc2l0aW9uIGluc2lkZSB1c2VFZmZlY3QsIG9yIHVzZURWLiBTd2l0Y2ggYmFjayB0b1xuICAgICAgLy8gdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGFsbCByZW1haW5pbmcgdHJhbnNpdGlvbnMgZHVyaW5nIHRoZSBjdXJyZW50XG4gICAgICAvLyBwb3BzdGF0ZSBldmVudC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2FjaGUgdGhlIGN1cnJlbnQgZXZlbnQgaW4gY2FzZSBhIGRlcml2ZWQgdHJhbnNpdGlvbiBpcyBzY2hlZHVsZWQuXG4gICAgICAvLyAoUmVmZXIgdG8gcHJldmlvdXMgYnJhbmNoLilcbiAgICAgIGN1cnJlbnRQb3BzdGF0ZVRyYW5zaXRpb25FdmVudCA9IGV2ZW50O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IC8vIFdlJ3JlIG5vdCBpbnNpZGUgYSBwb3BzdGF0ZSBldmVudC5cblxuXG4gIGN1cnJlbnRQb3BzdGF0ZVRyYW5zaXRpb25FdmVudCA9IG51bGw7XG4gIHJldHVybiBmYWxzZTtcbn1cbi8vIGlmIGEgY29tcG9uZW50IGp1c3QgaW1wb3J0cyBSZWFjdERPTSAoZS5nLiBmb3IgZmluZERPTU5vZGUpLlxuLy8gU29tZSBlbnZpcm9ubWVudHMgbWlnaHQgbm90IGhhdmUgc2V0VGltZW91dCBvciBjbGVhclRpbWVvdXQuXG5cbnZhciBzY2hlZHVsZVRpbWVvdXQgPSB0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgY2FuY2VsVGltZW91dCA9IHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBjbGVhclRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgbm9UaW1lb3V0ID0gLTE7XG52YXIgbG9jYWxQcm9taXNlID0gdHlwZW9mIFByb21pc2UgPT09ICdmdW5jdGlvbicgPyBQcm9taXNlIDogdW5kZWZpbmVkO1xuZnVuY3Rpb24gcHJlcGFyZVBvcnRhbE1vdW50KHBvcnRhbEluc3RhbmNlKSB7XG4gIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHBvcnRhbEluc3RhbmNlKTtcbn1cbnZhciBzY2hlZHVsZU1pY3JvdGFzayA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gJ2Z1bmN0aW9uJyA/IHF1ZXVlTWljcm90YXNrIDogdHlwZW9mIGxvY2FsUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgPyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGxvY2FsUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oY2FsbGJhY2spLmNhdGNoKGhhbmRsZUVycm9ySW5OZXh0VGljayk7XG59IDogc2NoZWR1bGVUaW1lb3V0OyAvLyBUT0RPOiBEZXRlcm1pbmUgdGhlIGJlc3QgZmFsbGJhY2sgaGVyZS5cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3JJbk5leHRUaWNrKGVycm9yKSB7XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIHRocm93IGVycm9yO1xuICB9KTtcbn0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY29tbWl0TW91bnQoZG9tRWxlbWVudCwgdHlwZSwgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gRGVzcGl0ZSB0aGUgbmFtaW5nIHRoYXQgbWlnaHQgaW1wbHkgb3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCBvbmx5XG4gIC8vIGZpcmVzIGlmIHRoZXJlIGlzIGFuIGBVcGRhdGVgIGVmZmVjdCBzY2hlZHVsZWQgZHVyaW5nIG1vdW50aW5nLlxuICAvLyBUaGlzIGhhcHBlbnMgaWYgYGZpbmFsaXplSW5pdGlhbENoaWxkcmVuYCByZXR1cm5zIGB0cnVlYCAod2hpY2ggaXRcbiAgLy8gZG9lcyB0byBpbXBsZW1lbnQgdGhlIGBhdXRvRm9jdXNgIGF0dHJpYnV0ZSBvbiB0aGUgY2xpZW50KS4gQnV0XG4gIC8vIHRoZXJlIGFyZSBhbHNvIG90aGVyIGNhc2VzIHdoZW4gdGhpcyBtaWdodCBoYXBwZW4gKHN1Y2ggYXMgcGF0Y2hpbmdcbiAgLy8gdXAgdGV4dCBjb250ZW50IGR1cmluZyBoeWRyYXRpb24gbWlzbWF0Y2gpLiBTbyB3ZSdsbCBjaGVjayB0aGlzIGFnYWluLlxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdidXR0b24nOlxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGlmIChuZXdQcm9wcy5hdXRvRm9jdXMpIHtcbiAgICAgICAgZG9tRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICdpbWcnOlxuICAgICAge1xuICAgICAgICBpZiAobmV3UHJvcHMuc3JjKSB7XG4gICAgICAgICAgZG9tRWxlbWVudC5zcmMgPSBuZXdQcm9wcy5zcmM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZShkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gRGlmZiBhbmQgdXBkYXRlIHRoZSBwcm9wZXJ0aWVzLlxuICB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7IC8vIFVwZGF0ZSB0aGUgcHJvcHMgaGFuZGxlIHNvIHRoYXQgd2Uga25vdyB3aGljaCBwcm9wcyBhcmUgdGhlIG9uZXMgd2l0aFxuICAvLyB3aXRoIGN1cnJlbnQgZXZlbnQgaGFuZGxlcnMuXG5cbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiByZXNldFRleHRDb250ZW50KGRvbUVsZW1lbnQpIHtcbiAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycpO1xufVxuZnVuY3Rpb24gY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IG5ld1RleHQ7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIHZhciBwYXJlbnROb2RlO1xuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgY29udGFpbmVyKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyO1xuICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9IC8vIFRoaXMgY29udGFpbmVyIG1pZ2h0IGJlIHVzZWQgZm9yIGEgcG9ydGFsLlxuICAvLyBJZiBzb21ldGhpbmcgaW5zaWRlIGEgcG9ydGFsIGlzIGNsaWNrZWQsIHRoYXQgY2xpY2sgc2hvdWxkIGJ1YmJsZVxuICAvLyB0aHJvdWdoIHRoZSBSZWFjdCB0cmVlLiBIb3dldmVyLCBvbiBNb2JpbGUgU2FmYXJpIHRoZSBjbGljayB3b3VsZFxuICAvLyBuZXZlciBidWJibGUgdGhyb3VnaCB0aGUgKkRPTSogdHJlZSB1bmxlc3MgYW4gYW5jZXN0b3Igd2l0aCBvbmNsaWNrXG4gIC8vIGV2ZW50IGV4aXN0cy4gU28gd2Ugd291bGRuJ3Qgc2VlIGl0IGFuZCBkaXNwYXRjaCBpdC5cbiAgLy8gVGhpcyBpcyB3aHkgd2UgZW5zdXJlIHRoYXQgbm9uIFJlYWN0IHJvb3QgY29udGFpbmVycyBoYXZlIGlubGluZSBvbmNsaWNrXG4gIC8vIGRlZmluZWQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE5MThcblxuXG4gIHZhciByZWFjdFJvb3RDb250YWluZXIgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICBpZiAoKHJlYWN0Um9vdENvbnRhaW5lciA9PT0gbnVsbCB8fCByZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZCkgJiYgcGFyZW50Tm9kZS5vbmNsaWNrID09PSBudWxsKSB7XG4gICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChwYXJlbnROb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudEluc3RhbmNlLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG59XG5mdW5jdGlvbiBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShjb250YWluZXIsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9XG59XG5mdW5jdGlvbiBjbGVhclN1c3BlbnNlQm91bmRhcnkocGFyZW50SW5zdGFuY2UsIHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSBzdXNwZW5zZUluc3RhbmNlOyAvLyBEZWxldGUgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIGRvIHtcbiAgICB2YXIgbmV4dE5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKG5vZGUpO1xuXG4gICAgaWYgKG5leHROb2RlICYmIG5leHROb2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbmV4dE5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKG5leHROb2RlKTsgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuXG4gICAgICAgICAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSB3ZSBiYWlsIG91dCB3aGVuIHdlIGdldCBhIG51bGxcblxuXG4gICAgbm9kZSA9IG5leHROb2RlO1xuICB9IHdoaWxlIChub2RlKTsgLy8gVE9ETzogV2Fybiwgd2UgZGlkbid0IGZpbmQgdGhlIGVuZCBjb21tZW50IGJvdW5kYXJ5LlxuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG5cblxuICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gY2xlYXJTdXNwZW5zZUJvdW5kYXJ5RnJvbUNvbnRhaW5lcihjb250YWluZXIsIHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY2xlYXJTdXNwZW5zZUJvdW5kYXJ5KGNvbnRhaW5lci5wYXJlbnROb2RlLCBzdXNwZW5zZUluc3RhbmNlKTtcbiAgfSBlbHNlIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIGNsZWFyU3VzcGVuc2VCb3VuZGFyeShjb250YWluZXIsIHN1c3BlbnNlSW5zdGFuY2UpO1xuICB9IGVsc2UgOyAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG5cblxuICByZXRyeUlmQmxvY2tlZE9uKGNvbnRhaW5lcik7XG59XG5mdW5jdGlvbiBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgLy8gVE9ETzogRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBlbGVtZW50IHR5cGVzPyBXaGF0IGFib3V0IE1hdGhNTD8gU2hvdWxkIHdlXG4gIC8vIHBhc3MgaG9zdCBjb250ZXh0IHRvIHRoaXMgbWV0aG9kP1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGUgPSBpbnN0YW5jZS5zdHlsZTsgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuXG4gIGlmICh0eXBlb2Ygc3R5bGUuc2V0UHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJywgJ2ltcG9ydGFudCcpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlKSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSAnJztcbn1cbmZ1bmN0aW9uIHVuaGlkZUluc3RhbmNlKGluc3RhbmNlLCBwcm9wcykge1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGVQcm9wID0gcHJvcHNbU1RZTEVdO1xuICB2YXIgZGlzcGxheSA9IHN0eWxlUHJvcCAhPT0gdW5kZWZpbmVkICYmIHN0eWxlUHJvcCAhPT0gbnVsbCAmJiBzdHlsZVByb3AuaGFzT3duUHJvcGVydHkoJ2Rpc3BsYXknKSA/IHN0eWxlUHJvcC5kaXNwbGF5IDogbnVsbDtcbiAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9IGRpc3BsYXkgPT0gbnVsbCB8fCB0eXBlb2YgZGlzcGxheSA9PT0gJ2Jvb2xlYW4nID8gJycgOiAvLyBUaGUgdmFsdWUgd291bGQndmUgZXJyb3JlZCBhbHJlYWR5IGlmIGl0IHdhc24ndCBzYWZlLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgKCcnICsgZGlzcGxheSkudHJpbSgpO1xufVxuZnVuY3Rpb24gdW5oaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gdGV4dDtcbn1cbmZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICB2YXIgbm9kZVR5cGUgPSBjb250YWluZXIubm9kZVR5cGU7XG5cbiAgaWYgKG5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgY2xlYXJDb250YWluZXJTcGFyaW5nbHkoY29udGFpbmVyKTtcbiAgfSBlbHNlIGlmIChub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgc3dpdGNoIChjb250YWluZXIubm9kZU5hbWUpIHtcbiAgICAgIGNhc2UgJ0hFQUQnOlxuICAgICAgY2FzZSAnSFRNTCc6XG4gICAgICBjYXNlICdCT0RZJzpcbiAgICAgICAgY2xlYXJDb250YWluZXJTcGFyaW5nbHkoY29udGFpbmVyKTtcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgY29udGFpbmVyLnRleHRDb250ZW50ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYXJDb250YWluZXJTcGFyaW5nbHkoY29udGFpbmVyKSB7XG4gIHZhciBub2RlO1xuICB2YXIgbmV4dE5vZGUgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcblxuICBpZiAobmV4dE5vZGUgJiYgbmV4dE5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX1RZUEVfTk9ERSkge1xuICAgIG5leHROb2RlID0gbmV4dE5vZGUubmV4dFNpYmxpbmc7XG4gIH1cblxuICB3aGlsZSAobmV4dE5vZGUpIHtcbiAgICBub2RlID0gbmV4dE5vZGU7XG4gICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcblxuICAgIHN3aXRjaCAobm9kZS5ub2RlTmFtZSkge1xuICAgICAgY2FzZSAnSFRNTCc6XG4gICAgICBjYXNlICdIRUFEJzpcbiAgICAgIGNhc2UgJ0JPRFknOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGVsZW1lbnQgPSBub2RlO1xuICAgICAgICAgIGNsZWFyQ29udGFpbmVyU3BhcmluZ2x5KGVsZW1lbnQpOyAvLyBJZiB0aGVzZSBzaW5nbGV0b24gaW5zdGFuY2VzIGhhZCBwcmV2aW91c2x5IGJlZW4gcmVuZGVyZWQgd2l0aCBSZWFjdCB0aGV5XG4gICAgICAgICAgLy8gbWF5IHN0aWxsIGhvbGQgb24gdG8gcmVmZXJlbmNlcyB0byB0aGUgcHJldmlvdXMgZmliZXIgdHJlZS4gV2UgZGV0YXRjaCB0aGVtXG4gICAgICAgICAgLy8gcHJvc3BlY3RpdmVseSB0byByZXNldCB0aGVtIHRvIGEgYmFzZWxpbmUgc3RhcnRpbmcgc3RhdGUgc2luY2Ugd2UgY2Fubm90IGNyZWF0ZVxuICAgICAgICAgIC8vIG5ldyBpbnN0YW5jZXMuXG5cbiAgICAgICAgICBkZXRhY2hEZWxldGVkSW5zdGFuY2UoZWxlbWVudCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIC8vIFNjcmlwdCB0YWdzIGFyZSByZXRhaW5lZCB0byBhdm9pZCBhbiBlZGdlIGNhc2UgYnVnLiBOb3JtYWxseSBzY3JpcHRzIHdpbGwgZXhlY3V0ZSBpZiB0aGV5XG4gICAgICAvLyBhcmUgZXZlciBpbnNlcnRlZCBpbnRvIHRoZSBET00uIEhvd2V2ZXIgd2hlbiBzdHJlYW1pbmcgaWYgYSBzY3JpcHQgdGFnIGlzIG9wZW5lZCBidXQgbm90XG4gICAgICAvLyB5ZXQgY2xvc2VkIHNvbWUgYnJvd3NlcnMgY3JlYXRlIGFuZCBpbnNlcnQgdGhlIHNjcmlwdCBET00gTm9kZSBidXQgdGhlIHNjcmlwdCBjYW5ub3QgZXhlY3V0ZVxuICAgICAgLy8geWV0IHVudGlsIHRoZSBjbG9zaW5nIHRhZyBpcyBwYXJzZWQuIElmIHNvbWV0aGluZyBjYXVzZXMgUmVhY3QgdG8gY2FsbCBjbGVhckNvbnRhaW5lciB3aGlsZVxuICAgICAgLy8gdGhpcyBET00gbm9kZSBpcyBpbiB0aGUgZG9jdW1lbnQgYnV0IG5vdCB5ZXQgZXhlY3V0YWJsZSB0aGUgRE9NIG5vZGUgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlXG4gICAgICAvLyBkb2N1bWVudCBhbmQgd2hlbiB0aGUgc2NyaXB0IGNsb3NpbmcgdGFnIGNvbWVzIGluIHRoZSBzY3JpcHQgd2lsbCBub3QgZW5kIHVwIHJ1bm5pbmcuIFRoaXMgc2VlbXNcbiAgICAgIC8vIHRvIGhhcHBlbiBpbiBDaHJvbWUvRmlyZWZveCBidXQgbm90IFNhZmFyaSBhdCB0aGUgbW9tZW50IHRob3VnaCB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSBzcGVjaWZpZWRcbiAgICAgIC8vIGJlaGF2aW9yIHNvIGl0IGNvdWxkIGNoYW5nZSBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgYnJvd3NlcnMuIFdoaWxlIGxlYXZpbmcgYWxsIHNjcmlwdHMgaXMgYnJvYWRlclxuICAgICAgLy8gdGhhbiBzdHJpY3RseSBuZWNlc3NhcnkgdGhpcyBpcyB0aGUgbGVhc3QgYW1vdW50IG9mIGFkZGl0aW9uYWwgY29kZSB0byBhdm9pZCB0aGlzIGJyZWFraW5nXG4gICAgICAvLyBlZGdlIGNhc2UuXG4gICAgICAvL1xuICAgICAgLy8gU3R5bGUgdGFncyBhcmUgcmV0YWluZWQgYmVjYXVzZSB0aGV5IG1heSBsaWtlbHkgY29tZSBmcm9tIDNyZCBwYXJ0eSBzY3JpcHRzIGFuZCBleHRlbnNpb25zXG5cbiAgICAgIGNhc2UgJ1NDUklQVCc6XG4gICAgICBjYXNlICdTVFlMRSc6XG4gICAgICAgIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgLy8gU3R5bGVzaGVldCB0YWdzIGFyZSByZXRhaW5lZCBiZWNhdXNlIHRlaHkgbWF5IGxpa2VseSBjb21lIGZyb20gM3JkIHBhcnR5IHNjcmlwdHMgYW5kIGV4dGVuc2lvbnNcblxuICAgICAgY2FzZSAnTElOSyc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAobm9kZS5yZWwudG9Mb3dlckNhc2UoKSA9PT0gJ3N0eWxlc2hlZXQnKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQobm9kZSk7XG4gIH1cblxuICByZXR1cm47XG59IC8vIE1ha2luZyB0aGlzIHNvIHdlIGNhbiBldmVudHVhbGx5IG1vdmUgYWxsIG9mIHRoZSBpbnN0YW5jZSBjYWNoaW5nIHRvIHRoZSBjb21taXQgcGhhc2UuXG5mdW5jdGlvbiBpc0h5ZHJhdGFibGVUZXh0KHRleHQpIHtcbiAgcmV0dXJuIHRleHQgIT09ICcnO1xufVxuZnVuY3Rpb24gY2FuSHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgd2hpbGUgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICB2YXIgZWxlbWVudCA9IGluc3RhbmNlO1xuICAgIHZhciBhbnlQcm9wcyA9IHByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gdHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBpZiAoIWluUm9vdE9yU2luZ2xldG9uKSB7XG4gICAgICAgIC8vIFVzdWFsbHkgd2UgZXJyb3IgZm9yIG1pc21hdGNoZWQgdGFncy5cbiAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdJTlBVVCcgJiYgZWxlbWVudC50eXBlID09PSAnaGlkZGVuJykgOyBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBJbiByb290IG9yIHNpbmdsZXRvbiBwYXJlbnRzIHdlIHNraXAgcGFzdCBtaXNtYXRjaGVkIGluc3RhbmNlcy5cblxuICAgIH0gZWxzZSBpZiAoIWluUm9vdE9yU2luZ2xldG9uKSB7XG4gICAgICAvLyBNYXRjaFxuICAgICAgaWYgKHR5cGUgPT09ICdpbnB1dCcgJiYgZWxlbWVudC50eXBlID09PSAnaGlkZGVuJykge1xuICAgICAgICB7XG4gICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihhbnlQcm9wcy5uYW1lLCAnbmFtZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5hbWUgPSBhbnlQcm9wcy5uYW1lID09IG51bGwgPyBudWxsIDogJycgKyBhbnlQcm9wcy5uYW1lO1xuXG4gICAgICAgIGlmIChhbnlQcm9wcy50eXBlICE9PSAnaGlkZGVuJyB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnbmFtZScpICE9PSBuYW1lKSA7IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzTWFya2VkSG9pc3RhYmxlKGVsZW1lbnQpKSA7IGVsc2Uge1xuICAgICAgLy8gV2UgaGF2ZSBhbiBFbGVtZW50IHdpdGggdGhlIHJpZ2h0IHR5cGUuXG4gICAgICAvLyBXZSBhcmUgZ29pbmcgdG8gdHJ5IHRvIGV4Y2x1ZGUgaXQgaWYgd2UgY2FuIGRlZmluaXRlbHkgaWRlbnRpZnkgaXQgYXMgYSBob2lzdGVkIE5vZGUgb3IgaWZcbiAgICAgIC8vIHdlIGNhbiBndWVzcyB0aGF0IHRoZSBub2RlIGlzIGxpa2VseSBob2lzdGVkIG9yIHdhcyBpbnNlcnRlZCBieSBhIDNyZCBwYXJ0eSBzY3JpcHQgb3IgYnJvd3NlciBleHRlbnNpb25cbiAgICAgIC8vIHVzaW5nIGhpZ2ggZW50cm9weSBhdHRyaWJ1dGVzIGZvciBjZXJ0YWluIHR5cGVzLiBUaGlzIHRlY2huaXF1ZSB3aWxsIGZhaWwgZm9yIHN0cmFuZ2UgaW5zZXJ0aW9ucyBsaWtlXG4gICAgICAvLyBleHRlbnNpb24gcHJlcGVuZGluZyA8ZGl2PiBpbiB0aGUgPGJvZHk+IGJ1dCB0aGF0IGFscmVhZHkgYnJlYWtzIGJlZm9yZSBhbmQgdGhhdCBpcyBhbiBlZGdlIGNhc2UuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgLy8gY2FzZSAndGl0bGUnOlxuICAgICAgICAvL1dlIGFzc3VtZSBhbGwgdGl0bGVzIGFyZSBtYXRjaGFibGUuIFlvdSBzaG91bGQgb25seSBoYXZlIG9uZSBpbiB0aGUgRG9jdW1lbnQsIGF0IGxlYXN0IGluIGEgaG9pc3RhYmxlIHNjb3BlXG4gICAgICAgIC8vIGFuZCBpZiB5b3UgYXJlIGEgSG9zdENvbXBvbmVudCB3aXRoIHR5cGUgdGl0bGUgd2UgbXVzdCBlaXRoZXIgYmUgaW4gYW4gPHN2Zz4gY29udGV4dCBvciB0aGlzIHRpdGxlIG11c3QgaGF2ZSBhbiBgaXRlbVByb3BgIHByb3AuXG4gICAgICAgIGNhc2UgJ21ldGEnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBvcHQgb3V0IG9mIGhvaXN0aW5nIG1ldGEgdGFncyBpcyB0byBnaXZlIGl0IGFuIGl0ZW1wcm9wIGF0dHJpYnV0ZS4gV2UgYXNzdW1lIHRoZXJlIHdpbGwgYmVcbiAgICAgICAgICAgIC8vIG5vdCAzcmQgcGFydHkgbWV0YSB0YWdzIHRoYXQgYXJlIHByZXBlbmRlZCwgYWNjZXB0aW5nIHRoZSBjYXNlcyB3aGVyZSB0aGlzIGlzbid0IHRydWUgYmVjYXVzZSBtZXRhIHRhZ3NcbiAgICAgICAgICAgIC8vIGFyZSB1c3VhbGx5IG9ubHkgZnVuY3Rpb25hbCBmb3IgU1NSIHNvIGV2ZW4gaW4gYSByYXJlIGNhc2Ugd2hlcmUgd2UgZGlkIGJpbmQgdG8gYW4gaW5qZWN0ZWQgdGFnIHRoZSBydW50aW1lXG4gICAgICAgICAgICAvLyBpbXBsaWNhdGlvbnMgYXJlIG1pbmltYWxcbiAgICAgICAgICAgIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2l0ZW1wcm9wJykpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIEhvaXN0YWJsZVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIExpbmtzIGNvbWUgaW4gbWFueSBmb3JtcyBhbmQgd2UgZG8gZXhwZWN0IDNyZCBwYXJ0aWVzIHRvIGluamVjdCB0aGVtIGludG8gPGhlYWQ+IC8gPGJvZHk+LiBXZSBleGNsdWRlIGtub3duIHJlc291cmNlc1xuICAgICAgICAgICAgLy8gYW5kIHRoZW4gdXNlIGhpZ2gtZW50cm95IGF0dHJpYnV0ZXMgbGlrZSBocmVmIHdoaWNoIGFyZSBhbG1vc3QgYWx3YXlzIHVzZWQgYW5kIGFsbW9zdCBhbHdheXMgdW5pcXVlIHRvIGZpbHRlciBvdXQgdW5saWtlbHlcbiAgICAgICAgICAgIC8vIG1hdGNoZXMuXG4gICAgICAgICAgICB2YXIgcmVsID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JlbCcpO1xuXG4gICAgICAgICAgICBpZiAocmVsID09PSAnc3R5bGVzaGVldCcgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtcHJlY2VkZW5jZScpKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzdHlsZXNoZWV0IHJlc291cmNlXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZWwgIT09IGFueVByb3BzLnJlbCB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpICE9PSAoYW55UHJvcHMuaHJlZiA9PSBudWxsID8gbnVsbCA6IGFueVByb3BzLmhyZWYpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjcm9zc29yaWdpbicpICE9PSAoYW55UHJvcHMuY3Jvc3NPcmlnaW4gPT0gbnVsbCA/IG51bGwgOiBhbnlQcm9wcy5jcm9zc09yaWdpbikgfHwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykgIT09IChhbnlQcm9wcy50aXRsZSA9PSBudWxsID8gbnVsbCA6IGFueVByb3BzLnRpdGxlKSkge1xuICAgICAgICAgICAgICAvLyByZWwgKyBocmVmIHNob3VsZCB1c3VhbGx5IGJlIGVub3VnaCB0byB1bmlxdWVseSBpZGVudGlmeSBhIGxpbmsgaG93ZXZlciBjcm9zc09yaWdpbiBjYW4gdmFyeSBmb3IgcmVsIHByZWNvbm5lY3RcbiAgICAgICAgICAgICAgLy8gYW5kIHRpdGxlIGNvdWxkIHZhcnkgZm9yIHJlbCBhbHRlcm5hdGVcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlICdzdHlsZSc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gU3R5bGVzIGFyZSBoYXJkIHRvIG1hdGNoIGNvcnJlY3RseS4gV2UgY2FuIGV4Y2x1ZGUga25vd24gcmVzb3VyY2VzIGJ1dCBvdGhlcndpc2Ugd2UgYWNjZXB0IHRoZSBmYWN0IHRoYXQgYSBub24taG9pc3RlZCBzdHlsZSB0YWdzXG4gICAgICAgICAgICAvLyBpbiA8aGVhZD4gb3IgPGJvZHk+IGFyZSBsaWtlbHkgbmV2ZXIgZ29pbmcgdG8gYmUgdW5tb3VudGVkIGdpdmVuIHRoZWlyIHBvc2l0aW9uIGluIHRoZSBkb2N1bWVudCBhbmQgdGhlIGZhY3QgdGhleSBsaWtlbHkgaG9sZCBnbG9iYWwgc3R5bGVzXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtcHJlY2VkZW5jZScpKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBzdHlsZSByZXNvdXJjZVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ3NjcmlwdCc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gU2NyaXB0cyBhcmUgYSBsaXR0bGUgdHJpY2t5LCB3ZSBleGNsdWRlIGtub3duIHJlc291cmNlcyBhbmQgdGhlbiBzaW1pbGFyIHRvIGxpbmtzIHRyeSB0byB1c2UgaGlnaC1lbnRyb3B5IGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIC8vIHRvIHJlamVjdCBwb29yIG1hdGNoZXMuIE9uZSBjaGFsbGVuZ2Ugd2l0aCBzY3JpcHRzIGFyZSBpbmxpbmUgc2NyaXB0cy4gV2UgZG9uJ3QgYXR0ZW1wdCB0byBjaGVjayB0ZXh0IGNvbnRlbnQgd2hpY2ggY291bGRcbiAgICAgICAgICAgIC8vIGluIHRoZW9yeSBsZWFkIHRvIGEgaHlkcmF0aW9uIGVycm9yIGxhdGVyIGlmIGEgM3JkIHBhcnR5IGluamVjdGVkIGFuIGlubGluZSBzY3JpcHQgYmVmb3JlIHRoZSBSZWFjdCByZW5kZXJlZCBub2Rlcy5cbiAgICAgICAgICAgIC8vIEZhbGxpbmcgYmFjayB0byBjbGllbnQgcmVuZGVyaW5nIGlmIHRoaXMgaGFwcGVucyBzaG91bGQgYmUgc2VlbWxlc3MgdGhvdWdoIHNvIHdlIHdpbGwgdHJ5IHRoaXMgaHVlcmlzdGljIGFuZCByZXZpc2l0IGxhdGVyXG4gICAgICAgICAgICAvLyBpZiB3ZSBsZWFybiBpdCBpcyBwcm9ibGVtYXRpY1xuICAgICAgICAgICAgdmFyIHNyY0F0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnc3JjJyk7XG5cbiAgICAgICAgICAgIGlmIChzcmNBdHRyICE9PSAoYW55UHJvcHMuc3JjID09IG51bGwgPyBudWxsIDogYW55UHJvcHMuc3JjKSB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpICE9PSAoYW55UHJvcHMudHlwZSA9PSBudWxsID8gbnVsbCA6IGFueVByb3BzLnR5cGUpIHx8IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjcm9zc29yaWdpbicpICE9PSAoYW55UHJvcHMuY3Jvc3NPcmlnaW4gPT0gbnVsbCA/IG51bGwgOiBhbnlQcm9wcy5jcm9zc09yaWdpbikpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBzY3JpcHQgaXMgZm9yIGEgZGlmZmVyZW50IHNyYy90eXBlL2Nyb3NzT3JpZ2luLiBJdCBtYXkgYmUgYSBzY3JpcHQgcmVzb3VyY2VcbiAgICAgICAgICAgICAgLy8gb3IgaXQgbWF5IGp1c3QgYmUgYSBtaXN0bWF0Y2hcbiAgICAgICAgICAgICAgaWYgKHNyY0F0dHIgJiYgZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2FzeW5jJykgJiYgIWVsZW1lbnQuaGFzQXR0cmlidXRlKCdpdGVtcHJvcCcpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhc3luYyBzY3JpcHQgcmVzb3VyY2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBXZSBoYXZlIGV4Y2x1ZGVkIHRoZSBtb3N0IGxpa2VseSBjYXNlcyBvZiBtaXNtYXRjaCBiZXR3ZWVuIGhvaXN0YWJsZSB0YWdzLCAzcmQgcGFydHkgc2NyaXB0IGluc2VydGVkIHRhZ3MsXG4gICAgICAgICAgICAvLyBhbmQgYnJvd3NlciBleHRlbnNpb24gaW5zZXJ0ZWQgdGFncy4gV2hpbGUgaXQgaXMgcG9zc2libGUgdGhpcyBpcyBub3QgdGhlIHJpZ2h0IG1hdGNoIGl0IGlzIGEgZGVjZW50IGh1ZXJpc3RpY1xuICAgICAgICAgICAgLy8gdGhhdCBzaG91bGQgd29yayBpbiB0aGUgdmFzdCBtYWpvcml0eSBvZiBjYXNlcy5cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGVsZW1lbnQpO1xuXG4gICAgaWYgKG5leHRJbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBuZXh0SW5zdGFuY2U7XG4gIH0gLy8gVGhpcyBpcyBhIHN1c3BlbnNlIGJvdW5kYXJ5IG9yIFRleHQgbm9kZSBvciB3ZSBnb3QgdGhlIGVuZC5cbiAgLy8gU3VzcGVuc2UgQm91bmRhcmllcyBhcmUgbmV2ZXIgZXhwZWN0ZWQgdG8gYmUgaW5qZWN0ZWQgYnkgM3JkIHBhcnRpZXMuIElmIHdlIHNlZSBvbmUgaXQgc2hvdWxkIGJlIG1hdGNoZWRcbiAgLy8gYW5kIHRoaXMgaXMgYSBoeWRyYXRpb24gZXJyb3IuXG4gIC8vIFRleHQgTm9kZXMgYXJlIGFsc28gbm90IGV4cGVjdGVkIHRvIGJlIGluamVjdGVkIGJ5IDNyZCBwYXJ0aWVzLiBUaGlzIGlzIGxlc3Mgb2YgYSBndWFyYW50ZWUgZm9yIDxib2R5PlxuICAvLyBidXQgaXQgc2VlbXMgcmVhc29uYWJsZSBhbmQgY29uc2VydmF0aXZlIHRvIHJlamVjdCB0aGlzIGFzIGEgaHlkcmF0aW9uIGVycm9yIGFzIHdlbGxcblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShpbnN0YW5jZSwgdGV4dCwgaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgLy8gRW1wdHkgc3RyaW5ncyBhcmUgbm90IHBhcnNlZCBieSBIVE1MIHNvIHRoZXJlIHdvbid0IGJlIGEgY29ycmVjdCBtYXRjaCBoZXJlLlxuICBpZiAodGV4dCA9PT0gJycpIHJldHVybiBudWxsO1xuXG4gIHdoaWxlIChpbnN0YW5jZS5ub2RlVHlwZSAhPT0gVEVYVF9OT0RFKSB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgaW5zdGFuY2Uubm9kZU5hbWUgPT09ICdJTlBVVCcgJiYgaW5zdGFuY2UudHlwZSA9PT0gJ2hpZGRlbicpIDsgZWxzZSBpZiAoIWluUm9vdE9yU2luZ2xldG9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGluc3RhbmNlKTtcblxuICAgIGlmIChuZXh0SW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGluc3RhbmNlID0gbmV4dEluc3RhbmNlO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYSB0ZXh0IG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBjYW5IeWRyYXRlU3VzcGVuc2VJbnN0YW5jZShpbnN0YW5jZSwgaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgd2hpbGUgKGluc3RhbmNlLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICBpZiAoIWluUm9vdE9yU2luZ2xldG9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGluc3RhbmNlKTtcblxuICAgIGlmIChuZXh0SW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGluc3RhbmNlID0gbmV4dEluc3RhbmNlO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYSBzdXNwZW5zZSBub2RlLlxuXG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEE7XG59XG5mdW5jdGlvbiBnZXRTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2tFcnJvckRldGFpbHMoaW5zdGFuY2UpIHtcbiAgdmFyIGRhdGFzZXQgPSBpbnN0YW5jZS5uZXh0U2libGluZyAmJiBpbnN0YW5jZS5uZXh0U2libGluZy5kYXRhc2V0O1xuICB2YXIgZGlnZXN0LCBtZXNzYWdlLCBzdGFjaztcblxuICBpZiAoZGF0YXNldCkge1xuICAgIGRpZ2VzdCA9IGRhdGFzZXQuZGdzdDtcblxuICAgIHtcbiAgICAgIG1lc3NhZ2UgPSBkYXRhc2V0Lm1zZztcbiAgICAgIHN0YWNrID0gZGF0YXNldC5zdGNrO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgIGRpZ2VzdDogZGlnZXN0LFxuICAgICAgc3RhY2s6IHN0YWNrXG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gcmVnaXN0ZXJTdXNwZW5zZUluc3RhbmNlUmV0cnkoaW5zdGFuY2UsIGNhbGxiYWNrKSB7XG4gIGluc3RhbmNlLl9yZWFjdFJldHJ5ID0gY2FsbGJhY2s7XG59XG5mdW5jdGlvbiBjYW5IeWRyYXRlRm9ybVN0YXRlTWFya2VyKGluc3RhbmNlLCBpblJvb3RPclNpbmdsZXRvbikge1xuICB3aGlsZSAoaW5zdGFuY2Uubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgIGlmICghaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoaW5zdGFuY2UpO1xuXG4gICAgaWYgKG5leHRJbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBuZXh0SW5zdGFuY2U7XG4gIH1cblxuICB2YXIgbm9kZURhdGEgPSBpbnN0YW5jZS5kYXRhO1xuXG4gIGlmIChub2RlRGF0YSA9PT0gRk9STV9TVEFURV9JU19NQVRDSElORyB8fCBub2RlRGF0YSA9PT0gRk9STV9TVEFURV9JU19OT1RfTUFUQ0hJTkcpIHtcbiAgICB2YXIgbWFya2VySW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICByZXR1cm4gbWFya2VySW5zdGFuY2U7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzRm9ybVN0YXRlTWFya2VyTWF0Y2hpbmcobWFya2VySW5zdGFuY2UpIHtcbiAgcmV0dXJuIG1hcmtlckluc3RhbmNlLmRhdGEgPT09IEZPUk1fU1RBVEVfSVNfTUFUQ0hJTkc7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlKG5vZGUpIHtcbiAgLy8gU2tpcCBub24taHlkcmF0YWJsZSBub2Rlcy5cbiAgZm9yICg7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICB2YXIgbm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlO1xuXG4gICAgaWYgKG5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBub2RlRGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKG5vZGVEYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IG5vZGVEYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IG5vZGVEYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgfHwgKG5vZGVEYXRhID09PSBGT1JNX1NUQVRFX0lTX01BVENISU5HIHx8IG5vZGVEYXRhID09PSBGT1JNX1NUQVRFX0lTX05PVF9NQVRDSElORykpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlRGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKHBhcmVudEluc3RhbmNlLmZpcnN0Q2hpbGQpO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGRXaXRoaW5Db250YWluZXIocGFyZW50Q29udGFpbmVyKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShwYXJlbnRDb250YWluZXIuZmlyc3RDaGlsZCk7XG59XG5mdW5jdGlvbiBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZFdpdGhpblN1c3BlbnNlSW5zdGFuY2UocGFyZW50SW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKHBhcmVudEluc3RhbmNlLm5leHRTaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBzaG91bGRXYXJuRGV2KSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGluc3RhbmNlKTsgLy8gVE9ETzogUG9zc2libHkgZGVmZXIgdGhpcyB1bnRpbCB0aGUgY29tbWl0IHBoYXNlIHdoZXJlIGFsbCB0aGUgZXZlbnRzXG4gIC8vIGdldCBhdHRhY2hlZC5cblxuICB1cGRhdGVGaWJlclByb3BzKGluc3RhbmNlLCBwcm9wcyk7IC8vIFRPRE86IFRlbXBvcmFyeSBoYWNrIHRvIGNoZWNrIGlmIHdlJ3JlIGluIGEgY29uY3VycmVudCByb290LiBXZSBjYW4gZGVsZXRlXG4gIC8vIHdoZW4gdGhlIGxlZ2FjeSByb290IEFQSSBpcyByZW1vdmVkLlxuXG4gIHZhciBpc0NvbmN1cnJlbnRNb2RlID0gKGludGVybmFsSW5zdGFuY2VIYW5kbGUubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlO1xuICBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgaXNDb25jdXJyZW50TW9kZSwgc2hvdWxkV2FybkRldiwgaG9zdENvbnRleHQpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHNob3VsZFdhcm5EZXYpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dEluc3RhbmNlKTsgLy8gVE9ETzogVGVtcG9yYXJ5IGhhY2sgdG8gY2hlY2sgaWYgd2UncmUgaW4gYSBjb25jdXJyZW50IHJvb3QuIFdlIGNhbiBkZWxldGVcbiAgcmV0dXJuIGRpZmZIeWRyYXRlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSBzdXNwZW5zZUluc3RhbmNlLm5leHRTaWJsaW5nOyAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICB9IC8vIFRPRE86IFdhcm4sIHdlIGRpZG4ndCBmaW5kIHRoZSBlbmQgY29tbWVudCBib3VuZGFyeS5cblxuXG4gIHJldHVybiBudWxsO1xufSAvLyBSZXR1cm5zIHRoZSBTdXNwZW5zZUluc3RhbmNlIGlmIHRoaXMgbm9kZSBpcyBhIGRpcmVjdCBjaGlsZCBvZiBhXG4vLyBTdXNwZW5zZUluc3RhbmNlLiBJLmUuIGlmIGl0cyBwcmV2aW91cyBzaWJsaW5nIGlzIGEgQ29tbWVudCB3aXRoXG4vLyBTVVNQRU5TRV94X1NUQVJUX0RBVEEuIE90aGVyd2lzZSwgbnVsbC5cblxuZnVuY3Rpb24gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXRJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHRhcmdldEluc3RhbmNlLnByZXZpb3VzU2libGluZzsgLy8gU2tpcCBwYXN0IGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBjb21taXRIeWRyYXRlZENvbnRhaW5lcihjb250YWluZXIpIHtcbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuICByZXRyeUlmQmxvY2tlZE9uKGNvbnRhaW5lcik7XG59XG5mdW5jdGlvbiBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG4gIHJldHJ5SWZCbG9ja2VkT24oc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBzaG91bGREZWxldGVVbmh5ZHJhdGVkVGFpbEluc3RhbmNlcyhwYXJlbnRUeXBlKSB7XG4gIHJldHVybiBwYXJlbnRUeXBlICE9PSAnZm9ybScgJiYgcGFyZW50VHlwZSAhPT0gJ2J1dHRvbic7XG59XG5mdW5jdGlvbiBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0LCBpc0NvbmN1cnJlbnRNb2RlLCBzaG91bGRXYXJuRGV2KSB7XG4gIGNoZWNrRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlLCB0ZXh0LCBpc0NvbmN1cnJlbnRNb2RlLCBzaG91bGRXYXJuRGV2KTtcbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHQsIGlzQ29uY3VycmVudE1vZGUsIHNob3VsZFdhcm5EZXYpIHtcbiAgaWYgKHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSAhPT0gdHJ1ZSkge1xuICAgIGNoZWNrRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlLCB0ZXh0LCBpc0NvbmN1cnJlbnRNb2RlLCBzaG91bGRXYXJuRGV2KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUluc3RhbmNlV2l0aGluQ29udGFpbmVyKHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpIHtcbiAge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlSW5zdGFuY2VXaXRoaW5TdXNwZW5zZUluc3RhbmNlKHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IE9ubHkgRWxlbWVudCBvciBEb2N1bWVudCBjYW4gYmUgcGFyZW50IG5vZGVzLlxuICAgIHZhciBwYXJlbnROb2RlID0gcGFyZW50SW5zdGFuY2UucGFyZW50Tm9kZTtcblxuICAgIGlmIChwYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudE5vZGUsIGluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnROb2RlLCBpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSwgaXNDb25jdXJyZW50TW9kZSkge1xuICB7XG4gICAgaWYgKGlzQ29uY3VycmVudE1vZGUgfHwgcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkddICE9PSB0cnVlKSB7XG4gICAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2VXaXRoaW5Db250YWluZXIocGFyZW50Q29udGFpbmVyLCB0eXBlLCBwcm9wcykge1xuICB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudENvbnRhaW5lciwgdHlwZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlV2l0aGluQ29udGFpbmVyKHBhcmVudENvbnRhaW5lciwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudENvbnRhaW5lciwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2VXaXRoaW5TdXNwZW5zZUluc3RhbmNlKHBhcmVudEluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IE9ubHkgRWxlbWVudCBvciBEb2N1bWVudCBjYW4gYmUgcGFyZW50IG5vZGVzLlxuICAgIHZhciBwYXJlbnROb2RlID0gcGFyZW50SW5zdGFuY2UucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50Tm9kZSAhPT0gbnVsbCkgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudE5vZGUsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZVdpdGhpblN1c3BlbnNlSW5zdGFuY2UocGFyZW50SW5zdGFuY2UsIHRleHQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBPbmx5IEVsZW1lbnQgb3IgRG9jdW1lbnQgY2FuIGJlIHBhcmVudCBub2Rlcy5cbiAgICB2YXIgcGFyZW50Tm9kZSA9IHBhcmVudEluc3RhbmNlLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudE5vZGUgIT09IG51bGwpIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnROb2RlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzLCBpc0NvbmN1cnJlbnRNb2RlKSB7XG4gIHtcbiAgICBpZiAoaXNDb25jdXJyZW50TW9kZSB8fCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklOR10gIT09IHRydWUpIHtcbiAgICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnRJbnN0YW5jZSwgdHlwZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHQsIGlzQ29uY3VycmVudE1vZGUpIHtcbiAge1xuICAgIGlmIChpc0NvbmN1cnJlbnRNb2RlIHx8IHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSAhPT0gdHJ1ZSkge1xuICAgICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudEluc3RhbmNlLCB0ZXh0KTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVycm9ySHlkcmF0aW5nQ29udGFpbmVyKHBhcmVudENvbnRhaW5lcikge1xuICB7XG4gICAgLy8gVE9ETzogVGhpcyBnZXRzIGxvZ2dlZCBieSBvblJlY292ZXJhYmxlRXJyb3IsIHRvbywgc28gd2Ugc2hvdWxkIGJlXG4gICAgLy8gYWJsZSB0byByZW1vdmUgaXQuXG4gICAgZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyBoeWRyYXRpb24uIFRoZSBzZXJ2ZXIgSFRNTCB3YXMgcmVwbGFjZWQgd2l0aCBjbGllbnQgY29udGVudCBpbiA8JXM+LicsIHBhcmVudENvbnRhaW5lci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBpc0hvc3RTaW5nbGV0b25UeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICdodG1sJyB8fCB0eXBlID09PSAnaGVhZCcgfHwgdHlwZSA9PT0gJ2JvZHknO1xufVxuZnVuY3Rpb24gcmVzb2x2ZVNpbmdsZXRvbkluc3RhbmNlKHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCB2YWxpZGF0ZURPTU5lc3RpbmdEZXYpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuXG4gICAgaWYgKHZhbGlkYXRlRE9NTmVzdGluZ0Rldikge1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nKHR5cGUsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckluc3RhbmNlKTtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdodG1sJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGRvY3VtZW50RWxlbWVudCA9IG93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgICAgIGlmICghZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWFjdCBleHBlY3RlZCBhbiA8aHRtbD4gZWxlbWVudCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB0byBleGlzdCBpbiB0aGUgRG9jdW1lbnQgYnV0IG9uZSB3YXMnICsgJyBub3QgZm91bmQuIFJlYWN0IG5ldmVyIHJlbW92ZXMgdGhlIGRvY3VtZW50RWxlbWVudCBmb3IgYW55IERvY3VtZW50IGl0IHJlbmRlcnMgaW50byBzbycgKyAnIHRoZSBjYXVzZSBpcyBsaWtlbHkgaW4gc29tZSBvdGhlciBzY3JpcHQgcnVubmluZyBvbiB0aGlzIHBhZ2UuJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZG9jdW1lbnRFbGVtZW50O1xuICAgICAgfVxuXG4gICAgY2FzZSAnaGVhZCc6XG4gICAgICB7XG4gICAgICAgIHZhciBoZWFkID0gb3duZXJEb2N1bWVudC5oZWFkO1xuXG4gICAgICAgIGlmICghaGVhZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVhY3QgZXhwZWN0ZWQgYSA8aGVhZD4gZWxlbWVudCAoZG9jdW1lbnQuaGVhZCkgdG8gZXhpc3QgaW4gdGhlIERvY3VtZW50IGJ1dCBvbmUgd2FzJyArICcgbm90IGZvdW5kLiBSZWFjdCBuZXZlciByZW1vdmVzIHRoZSBoZWFkIGZvciBhbnkgRG9jdW1lbnQgaXQgcmVuZGVycyBpbnRvIHNvJyArICcgdGhlIGNhdXNlIGlzIGxpa2VseSBpbiBzb21lIG90aGVyIHNjcmlwdCBydW5uaW5nIG9uIHRoaXMgcGFnZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBoZWFkO1xuICAgICAgfVxuXG4gICAgY2FzZSAnYm9keSc6XG4gICAgICB7XG4gICAgICAgIHZhciBib2R5ID0gb3duZXJEb2N1bWVudC5ib2R5O1xuXG4gICAgICAgIGlmICghYm9keSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVhY3QgZXhwZWN0ZWQgYSA8Ym9keT4gZWxlbWVudCAoZG9jdW1lbnQuYm9keSkgdG8gZXhpc3QgaW4gdGhlIERvY3VtZW50IGJ1dCBvbmUgd2FzJyArICcgbm90IGZvdW5kLiBSZWFjdCBuZXZlciByZW1vdmVzIHRoZSBib2R5IGZvciBhbnkgRG9jdW1lbnQgaXQgcmVuZGVycyBpbnRvIHNvJyArICcgdGhlIGNhdXNlIGlzIGxpa2VseSBpbiBzb21lIG90aGVyIHNjcmlwdCBydW5uaW5nIG9uIHRoaXMgcGFnZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBib2R5O1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXNvbHZlU2luZ2xldG9uSW5zdGFuY2Ugd2FzIGNhbGxlZCB3aXRoIGFuIGVsZW1lbnQgdHlwZSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGFjcXVpcmVTaW5nbGV0b25JbnN0YW5jZSh0eXBlLCBwcm9wcywgaW5zdGFuY2UsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAge1xuICAgIHZhciBjdXJyZW50SW5zdGFuY2VIYW5kbGUgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKGluc3RhbmNlKTtcblxuICAgIGlmIChjdXJyZW50SW5zdGFuY2VIYW5kbGUpIHtcbiAgICAgIHZhciB0YWdOYW1lID0gaW5zdGFuY2UudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBlcnJvcignWW91IGFyZSBtb3VudGluZyBhIG5ldyAlcyBjb21wb25lbnQgd2hlbiBhIHByZXZpb3VzIG9uZSBoYXMgbm90IGZpcnN0IHVubW91bnRlZC4gSXQgaXMgYW4nICsgJyBlcnJvciB0byByZW5kZXIgbW9yZSB0aGFuIG9uZSAlcyBjb21wb25lbnQgYXQgYSB0aW1lIGFuZCBhdHRyaWJ1dGVzIGFuZCBjaGlsZHJlbiBvZiB0aGVzZScgKyAnIGNvbXBvbmVudHMgd2lsbCBsaWtlbHkgZmFpbCBpbiB1bnByZWRpY3RhYmxlIHdheXMuIFBsZWFzZSBvbmx5IHJlbmRlciBhIHNpbmdsZSBpbnN0YW5jZSBvZicgKyAnIDwlcz4gYW5kIGlmIHlvdSBuZWVkIHRvIG1vdW50IGEgbmV3IG9uZSwgZW5zdXJlIGFueSBwcmV2aW91cyBvbmVzIGhhdmUgdW5tb3VudGVkIGZpcnN0LicsIHRhZ05hbWUsIHRhZ05hbWUsIHRhZ05hbWUpO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgICB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIGVycm9yKCdhY3F1aXJlU2luZ2xldG9uSW5zdGFuY2Ugd2FzIGNhbGxlZCB3aXRoIGFuIGVsZW1lbnQgdHlwZSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgYXR0cmlidXRlcyA9IGluc3RhbmNlLmF0dHJpYnV0ZXM7XG5cbiAgd2hpbGUgKGF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgaW5zdGFuY2UucmVtb3ZlQXR0cmlidXRlTm9kZShhdHRyaWJ1dGVzWzBdKTtcbiAgfVxuXG4gIHNldEluaXRpYWxQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcyk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGluc3RhbmNlKTtcbiAgdXBkYXRlRmliZXJQcm9wcyhpbnN0YW5jZSwgcHJvcHMpO1xufVxuZnVuY3Rpb24gcmVsZWFzZVNpbmdsZXRvbkluc3RhbmNlKGluc3RhbmNlKSB7XG4gIHZhciBhdHRyaWJ1dGVzID0gaW5zdGFuY2UuYXR0cmlidXRlcztcblxuICB3aGlsZSAoYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICBpbnN0YW5jZS5yZW1vdmVBdHRyaWJ1dGVOb2RlKGF0dHJpYnV0ZXNbMF0pO1xuICB9XG5cbiAgZGV0YWNoRGVsZXRlZEluc3RhbmNlKGluc3RhbmNlKTtcbn1cbmZ1bmN0aW9uIGNsZWFyU2luZ2xldG9uKGluc3RhbmNlKSB7XG4gIHZhciBlbGVtZW50ID0gaW5zdGFuY2U7XG4gIHZhciBub2RlID0gZWxlbWVudC5maXJzdENoaWxkO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgdmFyIG5leHROb2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICB2YXIgbm9kZU5hbWUgPSBub2RlLm5vZGVOYW1lO1xuXG4gICAgaWYgKGlzTWFya2VkSG9pc3RhYmxlKG5vZGUpIHx8IG5vZGVOYW1lID09PSAnSEVBRCcgfHwgbm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ1NDUklQVCcgfHwgbm9kZU5hbWUgPT09ICdTVFlMRScgfHwgbm9kZU5hbWUgPT09ICdMSU5LJyAmJiBub2RlLnJlbC50b0xvd2VyQ2FzZSgpID09PSAnc3R5bGVzaGVldCcpIDsgZWxzZSB7XG4gICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cblxuICAgIG5vZGUgPSBuZXh0Tm9kZTtcbiAgfVxuXG4gIHJldHVybjtcbn0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIE5vdExvYWRlZCA9XG4vKiAgICAgICAqL1xuMDtcbnZhciBMb2FkZWQgPVxuLyogICAgICAgICAgKi9cbjE7XG52YXIgRXJyb3JlZCA9XG4vKiAgICAgICAgICovXG4yO1xudmFyIFNldHRsZWQgPVxuLyogICAgICAgICAqL1xuMztcbnZhciBJbnNlcnRlZCA9XG4vKiAgICAgICAgKi9cbjQ7XG5mdW5jdGlvbiBwcmVwYXJlVG9Db21taXRIb2lzdGFibGVzKCkge1xuICB0YWdDYWNoZXMgPSBudWxsO1xufSAvLyBnbG9iYWwgY29sbGVjdGlvbnMgb2YgUmVzb3VyY2VzXG5cbnZhciBwcmVsb2FkUHJvcHNNYXAgPSBuZXcgTWFwKCk7XG52YXIgcHJlY29ubmVjdHNTZXQgPSBuZXcgU2V0KCk7IC8vIGdldFJvb3ROb2RlIGlzIG1pc3NpbmcgZnJvbSBJRSBhbmQgb2xkIGpzZG9tIHZlcnNpb25zXG5cbmZ1bmN0aW9uIGdldEhvaXN0YWJsZVJvb3QoY29udGFpbmVyKSB7XG4gIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgcmV0dXJuIHR5cGVvZiBjb250YWluZXIuZ2V0Um9vdE5vZGUgPT09ICdmdW5jdGlvbicgP1xuICAvKiAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIEZsb3cgdHlwZXMgdGhpcyBhcyByZXR1cm5pbmcgYSBgTm9kZWAsXG4gICAqIGJ1dCBpdCdzIGVpdGhlciBhIGBEb2N1bWVudGAgb3IgYFNoYWRvd1Jvb3RgLiAqL1xuICBjb250YWluZXIuZ2V0Um9vdE5vZGUoKSA6IGNvbnRhaW5lci5vd25lckRvY3VtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UmVzb3VyY2VSb290KCkge1xuICB2YXIgY3VycmVudENvbnRhaW5lciA9IGdldEN1cnJlbnRSb290SG9zdENvbnRhaW5lcigpO1xuICByZXR1cm4gY3VycmVudENvbnRhaW5lciA/IGdldEhvaXN0YWJsZVJvb3QoY3VycmVudENvbnRhaW5lcikgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXREb2N1bWVudEZyb21Sb290KHJvb3QpIHtcbiAgcmV0dXJuIHJvb3Qub3duZXJEb2N1bWVudCB8fCByb290O1xufSAvLyBXZSB3YW50IHRoaXMgdG8gYmUgdGhlIGRlZmF1bHQgZGlzcGF0Y2hlciBvbiBSZWFjdERPTVNoYXJlZEludGVybmFscyBidXQgd2UgZG9uJ3Qgd2FudCB0byBtdXRhdGVcbi8vIGludGVybmFscyBpbiBNb2R1bGUgc2NvcGUuIEluc3RlYWQgd2UgZXhwb3J0IGl0IGFuZCBJbnRlcm5hbHMgd2lsbCBpbXBvcnQgaXQuIFRoZXJlIGlzIGFscmVhZHkgYSBjeWNsZVxuLy8gZnJvbSBJbnRlcm5hbHMgLT4gUmVhY3RET00gLT4gSG9zdENvbmZpZyAtPiBJbnRlcm5hbHMgc28gdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhIG5ldyBvbmUuXG5cblxudmFyIFJlYWN0RE9NQ2xpZW50RGlzcGF0Y2hlciA9IHtcbiAgcHJlZmV0Y2hETlM6IHByZWZldGNoRE5TJDEsXG4gIHByZWNvbm5lY3Q6IHByZWNvbm5lY3QkMSxcbiAgcHJlbG9hZDogcHJlbG9hZCQxLFxuICBwcmVsb2FkTW9kdWxlOiBwcmVsb2FkTW9kdWxlJDEsXG4gIHByZWluaXRTdHlsZTogcHJlaW5pdFN0eWxlLFxuICBwcmVpbml0U2NyaXB0OiBwcmVpbml0U2NyaXB0LFxuICBwcmVpbml0TW9kdWxlU2NyaXB0OiBwcmVpbml0TW9kdWxlU2NyaXB0XG59OyAvLyBXZSBleHBlY3QgdGhpcyB0byBnZXQgaW5saW5lZC4gSXQgaXMgYSBmdW5jdGlvbiBtb3N0bHkgdG8gY29tbXVuaWNhdGUgdGhlIHNwZWNpYWwgbmF0dXJlIG9mXG4vLyBob3cgd2UgcmVzb2x2ZSB0aGUgSG9pc3RhYmxlUm9vdCBmb3IgUmVhY3RET00ucHJlKigpIG1ldGhvZHMuIEJlY2F1c2Ugd2Ugc3VwcG9ydCBjYWxsaW5nXG4vLyB0aGVzZSBtZXRob2RzIG91dHNpZGUgb2YgcmVuZGVyIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IHdoaWNoIERvY3VtZW50IG9yIFNoYWRvd1Jvb3QgaXMgJ3Njb3BlZCdcbi8vIGFuZCBzbyB3ZSBoYXZlIHRvIGZhbGwgYmFjayB0byBzb21ldGhpbmcgdW5pdmVyc2FsLiBDdXJyZW50bHkgd2UganVzdCByZWZlciB0byB0aGUgZ2xvYmFsIGRvY3VtZW50LlxuLy8gVGhpcyBpcyBub3RhYmxlIGJlY2F1c2Ugbm93aGVyZSBlbHNlIGluIFJlYWN0RE9NIGRvIHdlIGFjdHVhbGx5IHJlZmVyZW5jZSB0aGUgZ2xvYmFsIGRvY3VtZW50IG9yIHdpbmRvd1xuLy8gYmVjYXVzZSB3ZSBtYXkgYmUgcmVuZGVyaW5nIGluc2lkZSBhbiBpZnJhbWUuXG5cbmZ1bmN0aW9uIGdldERvY3VtZW50Rm9ySW1wZXJhdGl2ZUZsb2F0TWV0aG9kcygpIHtcbiAgcmV0dXJuIGRvY3VtZW50O1xufVxuXG5mdW5jdGlvbiBwcmVjb25uZWN0QXMocmVsLCBocmVmLCBjcm9zc09yaWdpbikge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IGdldERvY3VtZW50Rm9ySW1wZXJhdGl2ZUZsb2F0TWV0aG9kcygpO1xuXG4gIGlmICh0eXBlb2YgaHJlZiA9PT0gJ3N0cmluZycgJiYgaHJlZikge1xuICAgIHZhciBsaW1pdGVkRXNjYXBlZEhyZWYgPSBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGhyZWYpO1xuICAgIHZhciBrZXkgPSBcImxpbmtbcmVsPVxcXCJcIiArIHJlbCArIFwiXFxcIl1baHJlZj1cXFwiXCIgKyBsaW1pdGVkRXNjYXBlZEhyZWYgKyBcIlxcXCJdXCI7XG5cbiAgICBpZiAodHlwZW9mIGNyb3NzT3JpZ2luID09PSAnc3RyaW5nJykge1xuICAgICAga2V5ICs9IFwiW2Nyb3Nzb3JpZ2luPVxcXCJcIiArIGNyb3NzT3JpZ2luICsgXCJcXFwiXVwiO1xuICAgIH1cblxuICAgIGlmICghcHJlY29ubmVjdHNTZXQuaGFzKGtleSkpIHtcbiAgICAgIHByZWNvbm5lY3RzU2V0LmFkZChrZXkpO1xuICAgICAgdmFyIHByZWNvbm5lY3RQcm9wcyA9IHtcbiAgICAgICAgcmVsOiByZWwsXG4gICAgICAgIGNyb3NzT3JpZ2luOiBjcm9zc09yaWdpbixcbiAgICAgICAgaHJlZjogaHJlZlxuICAgICAgfTtcblxuICAgICAgaWYgKG51bGwgPT09IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihrZXkpKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhpbnN0YW5jZSwgJ2xpbmsnLCBwcmVjb25uZWN0UHJvcHMpO1xuICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGluc3RhbmNlKTtcbiAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGluc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlZmV0Y2hETlMkMShocmVmKSB7XG5cbiAgcHJlY29ubmVjdEFzKCdkbnMtcHJlZmV0Y2gnLCBocmVmLCBudWxsKTtcbn1cblxuZnVuY3Rpb24gcHJlY29ubmVjdCQxKGhyZWYsIGNyb3NzT3JpZ2luKSB7XG5cbiAgcHJlY29ubmVjdEFzKCdwcmVjb25uZWN0JywgaHJlZiwgY3Jvc3NPcmlnaW4pO1xufVxuXG5mdW5jdGlvbiBwcmVsb2FkJDEoaHJlZiwgYXMsIG9wdGlvbnMpIHtcblxuICB2YXIgb3duZXJEb2N1bWVudCA9IGdldERvY3VtZW50Rm9ySW1wZXJhdGl2ZUZsb2F0TWV0aG9kcygpO1xuXG4gIGlmIChocmVmICYmIGFzICYmIG93bmVyRG9jdW1lbnQpIHtcbiAgICB2YXIgcHJlbG9hZFNlbGVjdG9yID0gXCJsaW5rW3JlbD1cXFwicHJlbG9hZFxcXCJdW2FzPVxcXCJcIiArIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoYXMpICsgXCJcXFwiXVwiO1xuXG4gICAgaWYgKGFzID09PSAnaW1hZ2UnKSB7XG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmltYWdlU3JjU2V0KSB7XG4gICAgICAgIHByZWxvYWRTZWxlY3RvciArPSBcIltpbWFnZXNyY3NldD1cXFwiXCIgKyBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKG9wdGlvbnMuaW1hZ2VTcmNTZXQpICsgXCJcXFwiXVwiO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5pbWFnZVNpemVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHByZWxvYWRTZWxlY3RvciArPSBcIltpbWFnZXNpemVzPVxcXCJcIiArIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMob3B0aW9ucy5pbWFnZVNpemVzKSArIFwiXFxcIl1cIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJlbG9hZFNlbGVjdG9yICs9IFwiW2hyZWY9XFxcIlwiICsgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArIFwiXFxcIl1cIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcHJlbG9hZFNlbGVjdG9yICs9IFwiW2hyZWY9XFxcIlwiICsgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArIFwiXFxcIl1cIjtcbiAgICB9IC8vIFNvbWUgcHJlbG9hZHMgYXJlIGtleWVkIHVuZGVyIHRoZWlyIHNlbGVjdG9yLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcHJlbG9hZCBpcyBmb3JcbiAgICAvLyBhbiBhcmJpdHJhcnkgdHlwZS4gT3RoZXIgcHJlbG9hZHMgYXJlIGtleWVkIHVuZGVyIHRoZSByZXNvdXJjZSBrZXkgdGhleSByZXByZXNlbnQgYSBwcmVsb2FkIGZvci5cbiAgICAvLyBIZXJlIHdlIGZpZ3VyZSBvdXQgd2hpY2gga2V5IHRvIHVzZSB0byBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIHByZWxvYWQgYWxyZWFkeS5cblxuXG4gICAgdmFyIGtleSA9IHByZWxvYWRTZWxlY3RvcjtcblxuICAgIHN3aXRjaCAoYXMpIHtcbiAgICAgIGNhc2UgJ3N0eWxlJzpcbiAgICAgICAga2V5ID0gZ2V0U3R5bGVLZXkoaHJlZik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzY3JpcHQnOlxuICAgICAgICBrZXkgPSBnZXRTY3JpcHRLZXkoaHJlZik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICghcHJlbG9hZFByb3BzTWFwLmhhcyhrZXkpKSB7XG4gICAgICB2YXIgcHJlbG9hZFByb3BzID0gYXNzaWduKHtcbiAgICAgICAgcmVsOiAncHJlbG9hZCcsXG4gICAgICAgIC8vIFRoZXJlIGlzIGEgYnVnIGluIFNhZmFyaSB3aGVyZSBpbWFnZVNyY1NldCBpcyBub3QgcmVzcGVjdGVkIG9uIHByZWxvYWQgbGlua3NcbiAgICAgICAgLy8gc28gd2Ugb21pdCB0aGUgaHJlZiBoZXJlIGlmIHdlIGhhdmUgaW1hZ2VTcmNTZXQgYi9jIHNhZmFyaSB3aWxsIGxvYWQgdGhlIHdyb25nIGltYWdlLlxuICAgICAgICAvLyBUaGlzIGhhcm1zIG9sZGVyIGJyb3dlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBpbWFnZVNyY1NldCBieSBtYWtpbmcgdGhlaXIgcHJlbG9hZHMgbm90IHdvcmtcbiAgICAgICAgLy8gYnV0IHRoaXMgcG9wdWxhdGlvbiBpcyBzaHJpbmtpbmcgZmFzdCBhbmQgaXMgYWxyZWFkeSBzbWFsbCBzbyB3ZSBhY2NlcHQgdGhpcyB0cmFkZW9mZi5cbiAgICAgICAgaHJlZjogYXMgPT09ICdpbWFnZScgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmltYWdlU3JjU2V0ID8gdW5kZWZpbmVkIDogaHJlZixcbiAgICAgICAgYXM6IGFzXG4gICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgcHJlbG9hZFByb3BzTWFwLnNldChrZXksIHByZWxvYWRQcm9wcyk7XG5cbiAgICAgIGlmIChudWxsID09PSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocHJlbG9hZFNlbGVjdG9yKSkge1xuICAgICAgICBpZiAoYXMgPT09ICdzdHlsZScgJiYgb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoa2V5KSkpIHtcbiAgICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBzdHlsZXNoZWV0IGZvciB0aGlzIGtleS4gV2UgZG9uJ3QgbmVlZCB0byBwcmVsb2FkIGl0LlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChhcyA9PT0gJ3NjcmlwdCcgJiYgb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpKSkge1xuICAgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIHN0eWxlc2hlZXQgZm9yIHRoaXMga2V5LiBXZSBkb24ndCBuZWVkIHRvIHByZWxvYWQgaXQuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluc3RhbmNlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGluc3RhbmNlLCAnbGluaycsIHByZWxvYWRQcm9wcyk7XG4gICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgICBvd25lckRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVsb2FkTW9kdWxlJDEoaHJlZiwgb3B0aW9ucykge1xuXG4gIHZhciBvd25lckRvY3VtZW50ID0gZ2V0RG9jdW1lbnRGb3JJbXBlcmF0aXZlRmxvYXRNZXRob2RzKCk7XG5cbiAgaWYgKGhyZWYpIHtcbiAgICB2YXIgYXMgPSBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmFzID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuYXMgOiAnc2NyaXB0JztcbiAgICB2YXIgcHJlbG9hZFNlbGVjdG9yID0gXCJsaW5rW3JlbD1cXFwibW9kdWxlcHJlbG9hZFxcXCJdW2FzPVxcXCJcIiArIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoYXMpICsgXCJcXFwiXVtocmVmPVxcXCJcIiArIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoaHJlZikgKyBcIlxcXCJdXCI7IC8vIFNvbWUgcHJlbG9hZHMgYXJlIGtleWVkIHVuZGVyIHRoZWlyIHNlbGVjdG9yLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcHJlbG9hZCBpcyBmb3JcbiAgICAvLyBhbiBhcmJpdHJhcnkgdHlwZS4gT3RoZXIgcHJlbG9hZHMgYXJlIGtleWVkIHVuZGVyIHRoZSByZXNvdXJjZSBrZXkgdGhleSByZXByZXNlbnQgYSBwcmVsb2FkIGZvci5cbiAgICAvLyBIZXJlIHdlIGZpZ3VyZSBvdXQgd2hpY2gga2V5IHRvIHVzZSB0byBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIHByZWxvYWQgYWxyZWFkeS5cblxuICAgIHZhciBrZXkgPSBwcmVsb2FkU2VsZWN0b3I7XG5cbiAgICBzd2l0Y2ggKGFzKSB7XG4gICAgICBjYXNlICdhdWRpb3dvcmtsZXQnOlxuICAgICAgY2FzZSAncGFpbnR3b3JrbGV0JzpcbiAgICAgIGNhc2UgJ3NlcnZpY2V3b3JrZXInOlxuICAgICAgY2FzZSAnc2hhcmVkd29ya2VyJzpcbiAgICAgIGNhc2UgJ3dvcmtlcic6XG4gICAgICBjYXNlICdzY3JpcHQnOlxuICAgICAgICB7XG4gICAgICAgICAga2V5ID0gZ2V0U2NyaXB0S2V5KGhyZWYpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwcmVsb2FkUHJvcHNNYXAuaGFzKGtleSkpIHtcbiAgICAgIHZhciBwcm9wcyA9IGFzc2lnbih7XG4gICAgICAgIHJlbDogJ21vZHVsZXByZWxvYWQnLFxuICAgICAgICBocmVmOiBocmVmXG4gICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgcHJlbG9hZFByb3BzTWFwLnNldChrZXksIHByb3BzKTtcblxuICAgICAgaWYgKG51bGwgPT09IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihwcmVsb2FkU2VsZWN0b3IpKSB7XG4gICAgICAgIHN3aXRjaCAoYXMpIHtcbiAgICAgICAgICBjYXNlICdhdWRpb3dvcmtsZXQnOlxuICAgICAgICAgIGNhc2UgJ3BhaW50d29ya2xldCc6XG4gICAgICAgICAgY2FzZSAnc2VydmljZXdvcmtlcic6XG4gICAgICAgICAgY2FzZSAnc2hhcmVkd29ya2VyJzpcbiAgICAgICAgICBjYXNlICd3b3JrZXInOlxuICAgICAgICAgIGNhc2UgJ3NjcmlwdCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaW5zdGFuY2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaW5zdGFuY2UsICdsaW5rJywgcHJvcHMpO1xuICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGluc3RhbmNlKTtcbiAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGluc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJlaW5pdFN0eWxlKGhyZWYsIHByZWNlZGVuY2UsIG9wdGlvbnMpIHtcblxuICB2YXIgb3duZXJEb2N1bWVudCA9IGdldERvY3VtZW50Rm9ySW1wZXJhdGl2ZUZsb2F0TWV0aG9kcygpO1xuXG4gIGlmIChocmVmKSB7XG4gICAgdmFyIHN0eWxlcyA9IGdldFJlc291cmNlc0Zyb21Sb290KG93bmVyRG9jdW1lbnQpLmhvaXN0YWJsZVN0eWxlcztcbiAgICB2YXIga2V5ID0gZ2V0U3R5bGVLZXkoaHJlZik7XG4gICAgcHJlY2VkZW5jZSA9IHByZWNlZGVuY2UgfHwgJ2RlZmF1bHQnOyAvLyBDaGVjayBpZiB0aGlzIHJlc291cmNlIGFscmVhZHkgZXhpc3RzXG5cbiAgICB2YXIgcmVzb3VyY2UgPSBzdHlsZXMuZ2V0KGtleSk7XG5cbiAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgIC8vIFdlIGNhbiBlYXJseSByZXR1cm4uIFRoZSByZXNvdXJjZSBleGlzdHMgYW5kIHRoZXJlIGlzIG5vdGhpbmdcbiAgICAgIC8vIG1vcmUgdG8gZG9cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBsb2FkaW5nOiBOb3RMb2FkZWQsXG4gICAgICBwcmVsb2FkOiBudWxsXG4gICAgfTsgLy8gQXR0ZW1wdCB0byBoeWRyYXRlIGluc3RhbmNlIGZyb20gRE9NXG5cbiAgICB2YXIgaW5zdGFuY2UgPSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpKTtcblxuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgc3RhdGUubG9hZGluZyA9IExvYWRlZCB8IEluc2VydGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb25zdHJ1Y3QgYSBuZXcgaW5zdGFuY2UgYW5kIGluc2VydCBpdFxuICAgICAgdmFyIHN0eWxlc2hlZXRQcm9wcyA9IGFzc2lnbih7XG4gICAgICAgIHJlbDogJ3N0eWxlc2hlZXQnLFxuICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAnZGF0YS1wcmVjZWRlbmNlJzogcHJlY2VkZW5jZVxuICAgICAgfSwgb3B0aW9ucyk7XG5cbiAgICAgIHZhciBwcmVsb2FkUHJvcHMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSk7XG5cbiAgICAgIGlmIChwcmVsb2FkUHJvcHMpIHtcbiAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KHN0eWxlc2hlZXRQcm9wcywgcHJlbG9hZFByb3BzKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxpbmsgPSBpbnN0YW5jZSA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShsaW5rKTtcbiAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGxpbmssICdsaW5rJywgc3R5bGVzaGVldFByb3BzKTtcbiAgICAgIGxpbmsuX3AgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGxpbmsub25sb2FkID0gcmVzb2x2ZTtcbiAgICAgICAgbGluay5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgfSk7XG4gICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHN0YXRlLmxvYWRpbmcgfD0gTG9hZGVkO1xuICAgICAgfSk7XG4gICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBzdGF0ZS5sb2FkaW5nIHw9IEVycm9yZWQ7XG4gICAgICB9KTtcbiAgICAgIHN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQ7XG4gICAgICBpbnNlcnRTdHlsZXNoZWV0KGluc3RhbmNlLCBwcmVjZWRlbmNlLCBvd25lckRvY3VtZW50KTtcbiAgICB9IC8vIENvbnN0cnVjdCBhIFJlc291cmNlIGFuZCBjYWNoZSBpdFxuXG5cbiAgICByZXNvdXJjZSA9IHtcbiAgICAgIHR5cGU6ICdzdHlsZXNoZWV0JyxcbiAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgIGNvdW50OiAxLFxuICAgICAgc3RhdGU6IHN0YXRlXG4gICAgfTtcbiAgICBzdHlsZXMuc2V0KGtleSwgcmVzb3VyY2UpO1xuICAgIHJldHVybjtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVpbml0U2NyaXB0KHNyYywgb3B0aW9ucykge1xuXG4gIHZhciBvd25lckRvY3VtZW50ID0gZ2V0RG9jdW1lbnRGb3JJbXBlcmF0aXZlRmxvYXRNZXRob2RzKCk7XG5cbiAgaWYgKHNyYykge1xuICAgIHZhciBzY3JpcHRzID0gZ2V0UmVzb3VyY2VzRnJvbVJvb3Qob3duZXJEb2N1bWVudCkuaG9pc3RhYmxlU2NyaXB0cztcbiAgICB2YXIga2V5ID0gZ2V0U2NyaXB0S2V5KHNyYyk7IC8vIENoZWNrIGlmIHRoaXMgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHNcblxuICAgIHZhciByZXNvdXJjZSA9IHNjcmlwdHMuZ2V0KGtleSk7XG5cbiAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgIC8vIFdlIGNhbiBlYXJseSByZXR1cm4uIFRoZSByZXNvdXJjZSBleGlzdHMgYW5kIHRoZXJlIGlzIG5vdGhpbmdcbiAgICAgIC8vIG1vcmUgdG8gZG9cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEF0dGVtcHQgdG8gaHlkcmF0ZSBpbnN0YW5jZSBmcm9tIERPTVxuXG5cbiAgICB2YXIgaW5zdGFuY2UgPSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSkpO1xuXG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgLy8gQ29uc3RydWN0IGEgbmV3IGluc3RhbmNlIGFuZCBpbnNlcnQgaXRcbiAgICAgIHZhciBzY3JpcHRQcm9wcyA9IGFzc2lnbih7XG4gICAgICAgIHNyYzogc3JjLFxuICAgICAgICBhc3luYzogdHJ1ZVxuICAgICAgfSwgb3B0aW9ucyk7IC8vIEFkb3B0IGNlcnRhaW4gcHJlbG9hZCBwcm9wc1xuXG5cbiAgICAgIHZhciBwcmVsb2FkUHJvcHMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSk7XG5cbiAgICAgIGlmIChwcmVsb2FkUHJvcHMpIHtcbiAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTY3JpcHQoc2NyaXB0UHJvcHMsIHByZWxvYWRQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaW5zdGFuY2UsICdsaW5rJywgc2NyaXB0UHJvcHMpO1xuICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGluc3RhbmNlKTtcbiAgICB9IC8vIENvbnN0cnVjdCBhIFJlc291cmNlIGFuZCBjYWNoZSBpdFxuXG5cbiAgICByZXNvdXJjZSA9IHtcbiAgICAgIHR5cGU6ICdzY3JpcHQnLFxuICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgY291bnQ6IDEsXG4gICAgICBzdGF0ZTogbnVsbFxuICAgIH07XG4gICAgc2NyaXB0cy5zZXQoa2V5LCByZXNvdXJjZSk7XG4gICAgcmV0dXJuO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZWluaXRNb2R1bGVTY3JpcHQoc3JjLCBvcHRpb25zKSB7XG5cbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBnZXREb2N1bWVudEZvckltcGVyYXRpdmVGbG9hdE1ldGhvZHMoKTtcblxuICBpZiAoc3JjKSB7XG4gICAgdmFyIHNjcmlwdHMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChvd25lckRvY3VtZW50KS5ob2lzdGFibGVTY3JpcHRzO1xuICAgIHZhciBrZXkgPSBnZXRTY3JpcHRLZXkoc3JjKTsgLy8gQ2hlY2sgaWYgdGhpcyByZXNvdXJjZSBhbHJlYWR5IGV4aXN0c1xuXG4gICAgdmFyIHJlc291cmNlID0gc2NyaXB0cy5nZXQoa2V5KTtcblxuICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgLy8gV2UgY2FuIGVhcmx5IHJldHVybi4gVGhlIHJlc291cmNlIGV4aXN0cyBhbmQgdGhlcmUgaXMgbm90aGluZ1xuICAgICAgLy8gbW9yZSB0byBkb1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gQXR0ZW1wdCB0byBoeWRyYXRlIGluc3RhbmNlIGZyb20gRE9NXG5cblxuICAgIHZhciBpbnN0YW5jZSA9IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoa2V5KSk7XG5cbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAvLyBDb25zdHJ1Y3QgYSBuZXcgaW5zdGFuY2UgYW5kIGluc2VydCBpdFxuICAgICAgdmFyIHNjcmlwdFByb3BzID0gYXNzaWduKHtcbiAgICAgICAgc3JjOiBzcmMsXG4gICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICB0eXBlOiAnbW9kdWxlJ1xuICAgICAgfSwgb3B0aW9ucyk7IC8vIEFkb3B0IGNlcnRhaW4gcHJlbG9hZCBwcm9wc1xuXG5cbiAgICAgIHZhciBwcmVsb2FkUHJvcHMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSk7XG5cbiAgICAgIGlmIChwcmVsb2FkUHJvcHMpIHtcbiAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTY3JpcHQoc2NyaXB0UHJvcHMsIHByZWxvYWRQcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaW5zdGFuY2UsICdsaW5rJywgc2NyaXB0UHJvcHMpO1xuICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGluc3RhbmNlKTtcbiAgICB9IC8vIENvbnN0cnVjdCBhIFJlc291cmNlIGFuZCBjYWNoZSBpdFxuXG5cbiAgICByZXNvdXJjZSA9IHtcbiAgICAgIHR5cGU6ICdzY3JpcHQnLFxuICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgY291bnQ6IDEsXG4gICAgICBzdGF0ZTogbnVsbFxuICAgIH07XG4gICAgc2NyaXB0cy5zZXQoa2V5LCByZXNvdXJjZSk7XG4gICAgcmV0dXJuO1xuICB9XG59IC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIGJlZ2luIHdvcmsgYW5kIHdlIHNob3VsZCBhbHdheXMgaGF2ZSBhIGN1cnJlbnREb2N1bWVudCBzZXRcblxuXG5mdW5jdGlvbiBnZXRSZXNvdXJjZSh0eXBlLCBjdXJyZW50UHJvcHMsIHBlbmRpbmdQcm9wcykge1xuICB2YXIgcmVzb3VyY2VSb290ID0gZ2V0Q3VycmVudFJlc291cmNlUm9vdCgpO1xuXG4gIGlmICghcmVzb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcInJlc291cmNlUm9vdFwiIHdhcyBleHBlY3RlZCB0byBleGlzdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ21ldGEnOlxuICAgIGNhc2UgJ3RpdGxlJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlICdzdHlsZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgcGVuZGluZ1Byb3BzLnByZWNlZGVuY2UgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBwZW5kaW5nUHJvcHMuaHJlZiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YXIga2V5ID0gZ2V0U3R5bGVLZXkocGVuZGluZ1Byb3BzLmhyZWYpO1xuICAgICAgICAgIHZhciBzdHlsZXMgPSBnZXRSZXNvdXJjZXNGcm9tUm9vdChyZXNvdXJjZVJvb3QpLmhvaXN0YWJsZVN0eWxlcztcbiAgICAgICAgICB2YXIgcmVzb3VyY2UgPSBzdHlsZXMuZ2V0KGtleSk7XG5cbiAgICAgICAgICBpZiAoIXJlc291cmNlKSB7XG4gICAgICAgICAgICByZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0eWxlJyxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICBzdGF0ZTogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHN0eWxlcy5zZXQoa2V5LCByZXNvdXJjZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc291cmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAndm9pZCcsXG4gICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgc3RhdGU6IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAge1xuICAgICAgICBpZiAocGVuZGluZ1Byb3BzLnJlbCA9PT0gJ3N0eWxlc2hlZXQnICYmIHR5cGVvZiBwZW5kaW5nUHJvcHMuaHJlZiA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHBlbmRpbmdQcm9wcy5wcmVjZWRlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhciBxdWFsaWZpZWRQcm9wcyA9IHBlbmRpbmdQcm9wcztcblxuICAgICAgICAgIHZhciBfa2V5ID0gZ2V0U3R5bGVLZXkocXVhbGlmaWVkUHJvcHMuaHJlZik7XG5cbiAgICAgICAgICB2YXIgX3N0eWxlcyA9IGdldFJlc291cmNlc0Zyb21Sb290KHJlc291cmNlUm9vdCkuaG9pc3RhYmxlU3R5bGVzO1xuXG4gICAgICAgICAgdmFyIF9yZXNvdXJjZSA9IF9zdHlsZXMuZ2V0KF9rZXkpO1xuXG4gICAgICAgICAgaWYgKCFfcmVzb3VyY2UpIHtcbiAgICAgICAgICAgIC8vIFdlIGFzc2VydGVkIHRoaXMgYWJvdmUgYnV0IEZsb3cgY2FuJ3QgZmlndXJlIG91dCB0aGF0IHRoZSB0eXBlIHNhdGlzZmllc1xuICAgICAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnZXREb2N1bWVudEZyb21Sb290KHJlc291cmNlUm9vdCk7XG4gICAgICAgICAgICBfcmVzb3VyY2UgPSB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHlsZXNoZWV0JyxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgICBzdGF0ZToge1xuICAgICAgICAgICAgICAgIGxvYWRpbmc6IE5vdExvYWRlZCxcbiAgICAgICAgICAgICAgICBwcmVsb2FkOiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIF9zdHlsZXMuc2V0KF9rZXksIF9yZXNvdXJjZSk7XG5cbiAgICAgICAgICAgIGlmICghcHJlbG9hZFByb3BzTWFwLmhhcyhfa2V5KSkge1xuICAgICAgICAgICAgICBwcmVsb2FkU3R5bGVzaGVldChvd25lckRvY3VtZW50LCBfa2V5LCBwcmVsb2FkUHJvcHNGcm9tU3R5bGVzaGVldChxdWFsaWZpZWRQcm9wcyksIF9yZXNvdXJjZS5zdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIF9yZXNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc2NyaXB0JzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwZW5kaW5nUHJvcHMuc3JjID09PSAnc3RyaW5nJyAmJiBwZW5kaW5nUHJvcHMuYXN5bmMgPT09IHRydWUpIHtcbiAgICAgICAgICB2YXIgc2NyaXB0UHJvcHMgPSBwZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgICB2YXIgX2tleTIgPSBnZXRTY3JpcHRLZXkoc2NyaXB0UHJvcHMuc3JjKTtcblxuICAgICAgICAgIHZhciBzY3JpcHRzID0gZ2V0UmVzb3VyY2VzRnJvbVJvb3QocmVzb3VyY2VSb290KS5ob2lzdGFibGVTY3JpcHRzO1xuXG4gICAgICAgICAgdmFyIF9yZXNvdXJjZTIgPSBzY3JpcHRzLmdldChfa2V5Mik7XG5cbiAgICAgICAgICBpZiAoIV9yZXNvdXJjZTIpIHtcbiAgICAgICAgICAgIF9yZXNvdXJjZTIgPSB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzY3JpcHQnLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogbnVsbCxcbiAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgIHN0YXRlOiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2NyaXB0cy5zZXQoX2tleTIsIF9yZXNvdXJjZTIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfcmVzb3VyY2UyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiAndm9pZCcsXG4gICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgc3RhdGU6IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImdldFJlc291cmNlIGVuY291bnRlcmVkIGEgdHlwZSBpdCBkaWQgbm90IGV4cGVjdDogXFxcIlwiICsgdHlwZSArIFwiXFxcIi4gdGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3R5bGVUYWdQcm9wc0Zyb21SYXdQcm9wcyhyYXdQcm9wcykge1xuICByZXR1cm4gYXNzaWduKHt9LCByYXdQcm9wcywge1xuICAgICdkYXRhLWhyZWYnOiByYXdQcm9wcy5ocmVmLFxuICAgICdkYXRhLXByZWNlZGVuY2UnOiByYXdQcm9wcy5wcmVjZWRlbmNlLFxuICAgIGhyZWY6IG51bGwsXG4gICAgcHJlY2VkZW5jZTogbnVsbFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0U3R5bGVLZXkoaHJlZikge1xuICB2YXIgbGltaXRlZEVzY2FwZWRIcmVmID0gZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKTtcbiAgcmV0dXJuIFwiaHJlZj1cXFwiXCIgKyBsaW1pdGVkRXNjYXBlZEhyZWYgKyBcIlxcXCJcIjtcbn1cblxuZnVuY3Rpb24gZ2V0U3R5bGVUYWdTZWxlY3RvcihocmVmKSB7XG4gIHZhciBsaW1pdGVkRXNjYXBlZEhyZWYgPSBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGhyZWYpO1xuICByZXR1cm4gXCJzdHlsZVtkYXRhLWhyZWZ+PVxcXCJcIiArIGxpbWl0ZWRFc2NhcGVkSHJlZiArIFwiXFxcIl1cIjtcbn1cblxuZnVuY3Rpb24gZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpIHtcbiAgcmV0dXJuIFwibGlua1tyZWw9XFxcInN0eWxlc2hlZXRcXFwiXVtcIiArIGtleSArIFwiXVwiO1xufVxuXG5mdW5jdGlvbiBnZXRQcmVsb2FkU3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpIHtcbiAgcmV0dXJuIFwibGlua1tyZWw9XFxcInByZWxvYWRcXFwiXVthcz1cXFwic3R5bGVcXFwiXVtcIiArIGtleSArIFwiXVwiO1xufVxuXG5mdW5jdGlvbiBzdHlsZXNoZWV0UHJvcHNGcm9tUmF3UHJvcHMocmF3UHJvcHMpIHtcbiAgcmV0dXJuIGFzc2lnbih7fSwgcmF3UHJvcHMsIHtcbiAgICAnZGF0YS1wcmVjZWRlbmNlJzogcmF3UHJvcHMucHJlY2VkZW5jZSxcbiAgICBwcmVjZWRlbmNlOiBudWxsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwcmVsb2FkU3R5bGVzaGVldChvd25lckRvY3VtZW50LCBrZXksIHByZWxvYWRQcm9wcywgc3RhdGUpIHtcbiAgcHJlbG9hZFByb3BzTWFwLnNldChrZXksIHByZWxvYWRQcm9wcyk7XG5cbiAgaWYgKCFvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpKSkge1xuICAgIC8vIFRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlc2hlZXQgaW5zdGFuY2UgaW4gdGhlIERvY3VtZW50LlxuICAgIC8vIFdlIHdpbGwgaW5zZXJ0IGEgcHJlbG9hZCBub3cgdG8ga2ljayBvZmYgbG9hZGluZyBiZWNhdXNlXG4gICAgLy8gd2UgZXhwZWN0IHRoaXMgc3R5bGVzaGVldCB0byBjb21taXRcbiAgICB2YXIgcHJlbG9hZEVsID0gb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKGdldFByZWxvYWRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5KGtleSkpO1xuXG4gICAgaWYgKHByZWxvYWRFbCkge1xuICAgICAgLy8gSWYgd2UgZmluZCBhIHByZWxvYWQgYWxyZWFkeSBpdCB3YXMgU1NSJ2QgYW5kIHdlIHdvbid0IGhhdmUgYW4gYWN0dWFsXG4gICAgICAvLyBsb2FkaW5nIHN0YXRlIHRvIHRyYWNrLiBGb3Igbm93IHdlIHdpbGwganVzdCBhc3N1bWUgaXQgaXMgbG9hZGVkXG4gICAgICBzdGF0ZS5sb2FkaW5nID0gTG9hZGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgIHN0YXRlLnByZWxvYWQgPSBpbnN0YW5jZTtcbiAgICAgIGluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5sb2FkaW5nIHw9IExvYWRlZDtcbiAgICAgIH0pO1xuICAgICAgaW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZS5sb2FkaW5nIHw9IEVycm9yZWQ7XG4gICAgICB9KTtcbiAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGluc3RhbmNlLCAnbGluaycsIHByZWxvYWRQcm9wcyk7XG4gICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGluc3RhbmNlKTtcbiAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChpbnN0YW5jZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByZWxvYWRQcm9wc0Zyb21TdHlsZXNoZWV0KHByb3BzKSB7XG4gIHJldHVybiB7XG4gICAgcmVsOiAncHJlbG9hZCcsXG4gICAgYXM6ICdzdHlsZScsXG4gICAgaHJlZjogcHJvcHMuaHJlZixcbiAgICBjcm9zc09yaWdpbjogcHJvcHMuY3Jvc3NPcmlnaW4sXG4gICAgaW50ZWdyaXR5OiBwcm9wcy5pbnRlZ3JpdHksXG4gICAgbWVkaWE6IHByb3BzLm1lZGlhLFxuICAgIGhyZWZMYW5nOiBwcm9wcy5ocmVmTGFuZyxcbiAgICByZWZlcnJlclBvbGljeTogcHJvcHMucmVmZXJyZXJQb2xpY3lcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NyaXB0S2V5KHNyYykge1xuICB2YXIgbGltaXRlZEVzY2FwZWRTcmMgPSBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKHNyYyk7XG4gIHJldHVybiBcIltzcmM9XFxcIlwiICsgbGltaXRlZEVzY2FwZWRTcmMgKyBcIlxcXCJdXCI7XG59XG5cbmZ1bmN0aW9uIGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpIHtcbiAgcmV0dXJuICdzY3JpcHRbYXN5bmNdJyArIGtleTtcbn1cblxuZnVuY3Rpb24gYWNxdWlyZVJlc291cmNlKGhvaXN0YWJsZVJvb3QsIHJlc291cmNlLCBwcm9wcykge1xuICByZXNvdXJjZS5jb3VudCsrO1xuXG4gIGlmIChyZXNvdXJjZS5pbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgIHN3aXRjaCAocmVzb3VyY2UudHlwZSkge1xuICAgICAgY2FzZSAnc3R5bGUnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHF1YWxpZmllZFByb3BzID0gcHJvcHM7IC8vIEF0dGVtcHQgdG8gaHlkcmF0ZSBpbnN0YW5jZSBmcm9tIERPTVxuXG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKGdldFN0eWxlVGFnU2VsZWN0b3IocXVhbGlmaWVkUHJvcHMuaHJlZikpO1xuXG4gICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXNvdXJjZS5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSk7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlUHJvcHMgPSBzdHlsZVRhZ1Byb3BzRnJvbVJhd1Byb3BzKHByb3BzKTtcbiAgICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdldERvY3VtZW50RnJvbVJvb3QoaG9pc3RhYmxlUm9vdCk7XG4gICAgICAgICAgaW5zdGFuY2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSk7XG4gICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaW5zdGFuY2UsICdzdHlsZScsIHN0eWxlUHJvcHMpOyAvLyBUT0RPOiBgc3R5bGVgIGRvZXMgbm90IGhhdmUgbG9hZGluZyBzdGF0ZSBmb3IgdHJhY2tpbmcgaW5zZXJ0aW9ucy4gSVxuICAgICAgICAgIC8vIGd1ZXNzIGJlY2F1c2UgdGhlc2UgYXJlbid0IHN1c3BlbnNleT8gTm90IHN1cmUgd2hldGhlciB0aGlzIGlzIGFcbiAgICAgICAgICAvLyBmYWN0b3Jpbmcgc21lbGwuXG4gICAgICAgICAgLy8gcmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZDtcblxuICAgICAgICAgIGluc2VydFN0eWxlc2hlZXQoaW5zdGFuY2UsIHF1YWxpZmllZFByb3BzLnByZWNlZGVuY2UsIGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgIHJlc291cmNlLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3N0eWxlc2hlZXQnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gVGhpcyB0eXBpbmcgaXMgZW5mb3JjZSBieSBgZ2V0UmVzb3VyY2VgLiBJZiB3ZSBjaGFuZ2UgdGhlIGxvZ2ljXG4gICAgICAgICAgLy8gdGhlcmUgZm9yIHdoYXQgcXVhbGlmaWVzIGFzIGEgc3R5bGVzaGVldCByZXNvdXJjZSB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgICAgIC8vIHRoaXMgY2FzdCBzdGlsbCBtYWtlcyBzZW5zZTtcbiAgICAgICAgICB2YXIgX3F1YWxpZmllZFByb3BzID0gcHJvcHM7XG4gICAgICAgICAgdmFyIGtleSA9IGdldFN0eWxlS2V5KF9xdWFsaWZpZWRQcm9wcy5ocmVmKTsgLy8gQXR0ZW1wdCB0byBoeWRyYXRlIGluc3RhbmNlIGZyb20gRE9NXG5cbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoa2V5KSk7XG5cbiAgICAgICAgICBpZiAoX2luc3RhbmNlKSB7XG4gICAgICAgICAgICByZXNvdXJjZS5zdGF0ZS5sb2FkaW5nIHw9IEluc2VydGVkO1xuICAgICAgICAgICAgcmVzb3VyY2UuaW5zdGFuY2UgPSBfaW5zdGFuY2U7XG4gICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKF9pbnN0YW5jZSk7XG4gICAgICAgICAgICByZXR1cm4gX2luc3RhbmNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHlsZXNoZWV0UHJvcHMgPSBzdHlsZXNoZWV0UHJvcHNGcm9tUmF3UHJvcHMocHJvcHMpO1xuICAgICAgICAgIHZhciBwcmVsb2FkUHJvcHMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSk7XG5cbiAgICAgICAgICBpZiAocHJlbG9hZFByb3BzKSB7XG4gICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclN0eWxlc2hlZXQoc3R5bGVzaGVldFByb3BzLCBwcmVsb2FkUHJvcHMpO1xuICAgICAgICAgIH0gLy8gQ29uc3RydWN0IGFuZCBpbnNlcnQgYSBuZXcgaW5zdGFuY2VcblxuXG4gICAgICAgICAgdmFyIF9vd25lckRvY3VtZW50ID0gZ2V0RG9jdW1lbnRGcm9tUm9vdChob2lzdGFibGVSb290KTtcblxuICAgICAgICAgIF9pbnN0YW5jZSA9IF9vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKF9pbnN0YW5jZSk7XG4gICAgICAgICAgdmFyIGxpbmtJbnN0YW5jZSA9IF9pbnN0YW5jZTtcbiAgICAgICAgICBsaW5rSW5zdGFuY2UuX3AgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICBsaW5rSW5zdGFuY2Uub25sb2FkID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIGxpbmtJbnN0YW5jZS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKF9pbnN0YW5jZSwgJ2xpbmsnLCBzdHlsZXNoZWV0UHJvcHMpO1xuICAgICAgICAgIHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQ7XG4gICAgICAgICAgaW5zZXJ0U3R5bGVzaGVldChfaW5zdGFuY2UsIF9xdWFsaWZpZWRQcm9wcy5wcmVjZWRlbmNlLCBob2lzdGFibGVSb290KTtcbiAgICAgICAgICByZXNvdXJjZS5pbnN0YW5jZSA9IF9pbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm4gX2luc3RhbmNlO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ3NjcmlwdCc6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUaGlzIHR5cGluZyBpcyBlbmZvcmNlIGJ5IGBnZXRSZXNvdXJjZWAuIElmIHdlIGNoYW5nZSB0aGUgbG9naWNcbiAgICAgICAgICAvLyB0aGVyZSBmb3Igd2hhdCBxdWFsaWZpZXMgYXMgYSBzdHlsZXNoZWV0IHJlc291cmNlIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAgICAgLy8gdGhpcyBjYXN0IHN0aWxsIG1ha2VzIHNlbnNlO1xuICAgICAgICAgIHZhciBib3Jyb3dlZFNjcmlwdFByb3BzID0gcHJvcHM7XG5cbiAgICAgICAgICB2YXIgX2tleTMgPSBnZXRTY3JpcHRLZXkoYm9ycm93ZWRTY3JpcHRQcm9wcy5zcmMpOyAvLyBBdHRlbXB0IHRvIGh5ZHJhdGUgaW5zdGFuY2UgZnJvbSBET01cblxuXG4gICAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KF9rZXkzKSk7XG5cbiAgICAgICAgICBpZiAoX2luc3RhbmNlMikge1xuICAgICAgICAgICAgcmVzb3VyY2UuaW5zdGFuY2UgPSBfaW5zdGFuY2UyO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShfaW5zdGFuY2UyKTtcbiAgICAgICAgICAgIHJldHVybiBfaW5zdGFuY2UyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzY3JpcHRQcm9wcyA9IGJvcnJvd2VkU2NyaXB0UHJvcHM7XG5cbiAgICAgICAgICB2YXIgX3ByZWxvYWRQcm9wcyA9IHByZWxvYWRQcm9wc01hcC5nZXQoX2tleTMpO1xuXG4gICAgICAgICAgaWYgKF9wcmVsb2FkUHJvcHMpIHtcbiAgICAgICAgICAgIHNjcmlwdFByb3BzID0gYXNzaWduKHt9LCBib3Jyb3dlZFNjcmlwdFByb3BzKTtcbiAgICAgICAgICAgIGFkb3B0UHJlbG9hZFByb3BzRm9yU2NyaXB0KHNjcmlwdFByb3BzLCBfcHJlbG9hZFByb3BzKTtcbiAgICAgICAgICB9IC8vIENvbnN0cnVjdCBhbmQgaW5zZXJ0IGEgbmV3IGluc3RhbmNlXG5cblxuICAgICAgICAgIHZhciBfb3duZXJEb2N1bWVudDIgPSBnZXREb2N1bWVudEZyb21Sb290KGhvaXN0YWJsZVJvb3QpO1xuXG4gICAgICAgICAgX2luc3RhbmNlMiA9IF9vd25lckRvY3VtZW50Mi5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKF9pbnN0YW5jZTIpO1xuICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKF9pbnN0YW5jZTIsICdsaW5rJywgc2NyaXB0UHJvcHMpO1xuXG4gICAgICAgICAgX293bmVyRG9jdW1lbnQyLmhlYWQuYXBwZW5kQ2hpbGQoX2luc3RhbmNlMik7XG5cbiAgICAgICAgICByZXNvdXJjZS5pbnN0YW5jZSA9IF9pbnN0YW5jZTI7XG4gICAgICAgICAgcmV0dXJuIF9pbnN0YW5jZTI7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAndm9pZCc6XG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYWNxdWlyZVJlc291cmNlIGVuY291bnRlcmVkIGEgcmVzb3VyY2UgdHlwZSBpdCBkaWQgbm90IGV4cGVjdDogXFxcIlwiICsgcmVzb3VyY2UudHlwZSArIFwiXFxcIi4gdGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIik7XG4gICAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSW4gdGhlIGNhc2Ugb2Ygc3R5bGVzaGVldHMsIHRoZXkgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gYXNzaWduZWQgYW5cbiAgICAvLyBpbnN0YW5jZSBkdXJpbmcgYHN1c3BlbmRSZXNvdXJjZWAuIEJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiB0aGV5IHdlcmVcbiAgICAvLyBpbnNlcnRlZCwgYmVjYXVzZSB0aGUgY29tbWl0IG1pZ2h0IGhhdmUgYmVlbiBpbnRlcnJ1cHRlZC4gU28gd2UgbmVlZCB0b1xuICAgIC8vIGNoZWNrIG5vdy5cbiAgICAvL1xuICAgIC8vIFRoZSBvdGhlciByZXNvdXJjZSB0eXBlcyBhcmUgdW5hZmZlY3RlZCBiZWNhdXNlIHRoZXkgYXJlIG5vdFxuICAgIC8vIHlldCBzdXNwZW5zZXkuXG4gICAgLy9cbiAgICAvLyBUT0RPOiBUaGlzIGlzIGEgYml0IG9mIGEgY29kZSBzbWVsbC4gQ29uc2lkZXIgcmVmYWN0b3JpbmcgaG93XG4gICAgLy8gYHN1c3BlbmRSZXNvdXJjZWAgYW5kIGBhY3F1aXJlUmVzb3VyY2VgIHdvcmsgdG9nZXRoZXIuIFRoZSBpZGVhIGlzIHRoYXRcbiAgICAvLyBgc3VzcGVuZFJlc291cmNlYCBkb2VzIGFsbCB0aGUgc2FtZSBzdHVmZiBhcyBgYWNxdWlyZVJlc291cmNlYCBleGNlcHRcbiAgICAvLyBmb3IgdGhlIGluc2VydGlvbi5cbiAgICBpZiAocmVzb3VyY2UudHlwZSA9PT0gJ3N0eWxlc2hlZXQnICYmIChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgSW5zZXJ0ZWQpID09PSBOb3RMb2FkZWQpIHtcbiAgICAgIHZhciBfcXVhbGlmaWVkUHJvcHMyID0gcHJvcHM7XG4gICAgICB2YXIgX2luc3RhbmNlMyA9IHJlc291cmNlLmluc3RhbmNlO1xuICAgICAgcmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZDtcbiAgICAgIGluc2VydFN0eWxlc2hlZXQoX2luc3RhbmNlMywgX3F1YWxpZmllZFByb3BzMi5wcmVjZWRlbmNlLCBob2lzdGFibGVSb290KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzb3VyY2UuaW5zdGFuY2U7XG59XG5mdW5jdGlvbiByZWxlYXNlUmVzb3VyY2UocmVzb3VyY2UpIHtcbiAgcmVzb3VyY2UuY291bnQtLTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVzaGVldChpbnN0YW5jZSwgcHJlY2VkZW5jZSwgcm9vdCkge1xuICB2YXIgbm9kZXMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbcmVsPVwic3R5bGVzaGVldFwiXVtkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0nKTtcbiAgdmFyIGxhc3QgPSBub2Rlcy5sZW5ndGggPyBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXSA6IG51bGw7XG4gIHZhciBwcmlvciA9IGxhc3Q7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgdmFyIG5vZGVQcmVjZWRlbmNlID0gbm9kZS5kYXRhc2V0LnByZWNlZGVuY2U7XG5cbiAgICBpZiAobm9kZVByZWNlZGVuY2UgPT09IHByZWNlZGVuY2UpIHtcbiAgICAgIHByaW9yID0gbm9kZTtcbiAgICB9IGVsc2UgaWYgKHByaW9yICE9PSBsYXN0KSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAocHJpb3IpIHtcbiAgICAvLyBXZSBnZXQgdGhlIHByaW9yIGZyb20gdGhlIGRvY3VtZW50IHNvIHdlIGtub3cgaXQgaXMgaW4gdGhlIHRyZWUuXG4gICAgLy8gV2UgYWxzbyBrbm93IHRoYXQgbGlua3MgY2FuJ3QgYmUgdGhlIHRvcG1vc3QgTm9kZSBzbyB0aGUgcGFyZW50Tm9kZVxuICAgIC8vIG11c3QgZXhpc3QuXG4gICAgcHJpb3IucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaW5zdGFuY2UsIHByaW9yLm5leHRTaWJsaW5nKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgcGFyZW50ID0gcm9vdC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IHJvb3QuaGVhZCA6IHJvb3Q7XG4gICAgcGFyZW50Lmluc2VydEJlZm9yZShpbnN0YW5jZSwgcGFyZW50LmZpcnN0Q2hpbGQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkb3B0UHJlbG9hZFByb3BzRm9yU3R5bGVzaGVldChzdHlsZXNoZWV0UHJvcHMsIHByZWxvYWRQcm9wcykge1xuICBpZiAoc3R5bGVzaGVldFByb3BzLmNyb3NzT3JpZ2luID09IG51bGwpIHN0eWxlc2hlZXRQcm9wcy5jcm9zc09yaWdpbiA9IHByZWxvYWRQcm9wcy5jcm9zc09yaWdpbjtcbiAgaWYgKHN0eWxlc2hlZXRQcm9wcy5yZWZlcnJlclBvbGljeSA9PSBudWxsKSBzdHlsZXNoZWV0UHJvcHMucmVmZXJyZXJQb2xpY3kgPSBwcmVsb2FkUHJvcHMucmVmZXJyZXJQb2xpY3k7XG4gIGlmIChzdHlsZXNoZWV0UHJvcHMudGl0bGUgPT0gbnVsbCkgc3R5bGVzaGVldFByb3BzLnRpdGxlID0gcHJlbG9hZFByb3BzLnRpdGxlO1xufVxuXG5mdW5jdGlvbiBhZG9wdFByZWxvYWRQcm9wc0ZvclNjcmlwdChzY3JpcHRQcm9wcywgcHJlbG9hZFByb3BzKSB7XG4gIGlmIChzY3JpcHRQcm9wcy5jcm9zc09yaWdpbiA9PSBudWxsKSBzY3JpcHRQcm9wcy5jcm9zc09yaWdpbiA9IHByZWxvYWRQcm9wcy5jcm9zc09yaWdpbjtcbiAgaWYgKHNjcmlwdFByb3BzLnJlZmVycmVyUG9saWN5ID09IG51bGwpIHNjcmlwdFByb3BzLnJlZmVycmVyUG9saWN5ID0gcHJlbG9hZFByb3BzLnJlZmVycmVyUG9saWN5O1xuICBpZiAoc2NyaXB0UHJvcHMuaW50ZWdyaXR5ID09IG51bGwpIHNjcmlwdFByb3BzLmludGVncml0eSA9IHByZWxvYWRQcm9wcy5pbnRlZ3JpdHk7XG59XG5cbnZhciB0YWdDYWNoZXMgPSBudWxsO1xuZnVuY3Rpb24gaHlkcmF0ZUhvaXN0YWJsZShob2lzdGFibGVSb290LCB0eXBlLCBwcm9wcywgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB2YXIgb3duZXJEb2N1bWVudCA9IGdldERvY3VtZW50RnJvbVJvb3QoaG9pc3RhYmxlUm9vdCk7XG4gIHZhciBpbnN0YW5jZSA9IG51bGw7XG5cbiAgZ2V0SW5zdGFuY2U6IHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3RpdGxlJzpcbiAgICAgIHtcbiAgICAgICAgaW5zdGFuY2UgPSBvd25lckRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0aXRsZScpWzBdO1xuXG4gICAgICAgIGlmICghaW5zdGFuY2UgfHwgaXNPd25lZEluc3RhbmNlKGluc3RhbmNlKSB8fCBpbnN0YW5jZS5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UgfHwgaW5zdGFuY2UuaGFzQXR0cmlidXRlKCdpdGVtcHJvcCcpKSB7XG4gICAgICAgICAgaW5zdGFuY2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShpbnN0YW5jZSwgb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkID4gdGl0bGUnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhpbnN0YW5jZSwgdHlwZSwgcHJvcHMpO1xuICAgICAgICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBpbnN0YW5jZSk7XG4gICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICB9XG5cbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNhY2hlID0gZ2V0SHlkcmF0YWJsZUhvaXN0YWJsZUNhY2hlKCdsaW5rJywgJ2hyZWYnLCBvd25lckRvY3VtZW50KTtcbiAgICAgICAgdmFyIGtleSA9IHR5cGUgKyAocHJvcHMuaHJlZiB8fCAnJyk7XG4gICAgICAgIHZhciBtYXliZU5vZGVzID0gY2FjaGUuZ2V0KGtleSk7XG5cbiAgICAgICAgaWYgKG1heWJlTm9kZXMpIHtcbiAgICAgICAgICB2YXIgbm9kZXMgPSBtYXliZU5vZGVzO1xuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcblxuICAgICAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKCdocmVmJykgIT09IChwcm9wcy5ocmVmID09IG51bGwgPyBudWxsIDogcHJvcHMuaHJlZikgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoJ3JlbCcpICE9PSAocHJvcHMucmVsID09IG51bGwgPyBudWxsIDogcHJvcHMucmVsKSB8fCBub2RlLmdldEF0dHJpYnV0ZSgndGl0bGUnKSAhPT0gKHByb3BzLnRpdGxlID09IG51bGwgPyBudWxsIDogcHJvcHMudGl0bGUpIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCdjcm9zc29yaWdpbicpICE9PSAocHJvcHMuY3Jvc3NPcmlnaW4gPT0gbnVsbCA/IG51bGwgOiBwcm9wcy5jcm9zc09yaWdpbikpIHtcbiAgICAgICAgICAgICAgLy8gbWlzbWF0Y2gsIHRyeSB0aGUgbmV4dCBub2RlO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2UgPSBub2RlO1xuICAgICAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgYnJlYWsgZ2V0SW5zdGFuY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5zdGFuY2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcyk7XG4gICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnbWV0YSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfY2FjaGUgPSBnZXRIeWRyYXRhYmxlSG9pc3RhYmxlQ2FjaGUoJ21ldGEnLCAnY29udGVudCcsIG93bmVyRG9jdW1lbnQpO1xuXG4gICAgICAgIHZhciBfa2V5NCA9IHR5cGUgKyAocHJvcHMuY29udGVudCB8fCAnJyk7XG5cbiAgICAgICAgdmFyIF9tYXliZU5vZGVzID0gX2NhY2hlLmdldChfa2V5NCk7XG5cbiAgICAgICAgaWYgKF9tYXliZU5vZGVzKSB7XG4gICAgICAgICAgdmFyIF9ub2RlcyA9IF9tYXliZU5vZGVzO1xuXG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9ub2Rlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIHZhciBfbm9kZSA9IF9ub2Rlc1tfaV07IC8vIFdlIGNvZXJjZSBjb250ZW50IHRvIHN0cmluZyBiZWNhdXNlIGl0IGlzIHRoZSBtb3N0IGxpa2VseSBvbmUgdG9cbiAgICAgICAgICAgIC8vIHVzZSBhIGB0b1N0cmluZ2AgY2FwYWJsZSB2YWx1ZS4gRm9yIHRoZSByZXN0IHdlIGp1c3QgZG8gaWRlbnRpdHkgbWF0Y2hcbiAgICAgICAgICAgIC8vIHBhc3Npbmcgbm9uLXN0cmluZ3MgaGVyZSBpcyBub3QgcmVhbGx5IHZhbGlkIGFueXdheS5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHByb3BzLmNvbnRlbnQsICdjb250ZW50Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfbm9kZS5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKSAhPT0gKHByb3BzLmNvbnRlbnQgPT0gbnVsbCA/IG51bGwgOiAnJyArIHByb3BzLmNvbnRlbnQpIHx8IF9ub2RlLmdldEF0dHJpYnV0ZSgnbmFtZScpICE9PSAocHJvcHMubmFtZSA9PSBudWxsID8gbnVsbCA6IHByb3BzLm5hbWUpIHx8IF9ub2RlLmdldEF0dHJpYnV0ZSgncHJvcGVydHknKSAhPT0gKHByb3BzLnByb3BlcnR5ID09IG51bGwgPyBudWxsIDogcHJvcHMucHJvcGVydHkpIHx8IF9ub2RlLmdldEF0dHJpYnV0ZSgnaHR0cC1lcXVpdicpICE9PSAocHJvcHMuaHR0cEVxdWl2ID09IG51bGwgPyBudWxsIDogcHJvcHMuaHR0cEVxdWl2KSB8fCBfbm9kZS5nZXRBdHRyaWJ1dGUoJ2NoYXJzZXQnKSAhPT0gKHByb3BzLmNoYXJTZXQgPT0gbnVsbCA/IG51bGwgOiBwcm9wcy5jaGFyU2V0KSkge1xuICAgICAgICAgICAgICAvLyBtaXNtYXRjaCwgdHJ5IHRoZSBuZXh0IG5vZGU7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnN0YW5jZSA9IF9ub2RlO1xuXG4gICAgICAgICAgICBfbm9kZXMuc3BsaWNlKF9pLCAxKTtcblxuICAgICAgICAgICAgYnJlYWsgZ2V0SW5zdGFuY2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5zdGFuY2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcyk7XG4gICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImdldE5vZGVzRm9yVHlwZSBlbmNvdW50ZXJlZCBhIHR5cGUgaXQgZGlkIG5vdCBleHBlY3Q6IFxcXCJcIiArIHR5cGUgKyBcIlxcXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIpO1xuICB9IC8vIFRoaXMgbm9kZSBpcyBhIG1hdGNoXG5cblxuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBpbnN0YW5jZSk7XG4gIG1hcmtOb2RlQXNIb2lzdGFibGUoaW5zdGFuY2UpO1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIGdldEh5ZHJhdGFibGVIb2lzdGFibGVDYWNoZSh0eXBlLCBrZXlBdHRyaWJ1dGUsIG93bmVyRG9jdW1lbnQpIHtcbiAgdmFyIGNhY2hlO1xuICB2YXIgY2FjaGVzO1xuXG4gIGlmICh0YWdDYWNoZXMgPT09IG51bGwpIHtcbiAgICBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgICBjYWNoZXMgPSB0YWdDYWNoZXMgPSBuZXcgTWFwKCk7XG4gICAgY2FjaGVzLnNldChvd25lckRvY3VtZW50LCBjYWNoZSk7XG4gIH0gZWxzZSB7XG4gICAgY2FjaGVzID0gdGFnQ2FjaGVzO1xuICAgIHZhciBtYXliZUNhY2hlID0gY2FjaGVzLmdldChvd25lckRvY3VtZW50KTtcblxuICAgIGlmICghbWF5YmVDYWNoZSkge1xuICAgICAgY2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICBjYWNoZXMuc2V0KG93bmVyRG9jdW1lbnQsIGNhY2hlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGUgPSBtYXliZUNhY2hlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYWNoZS5oYXModHlwZSkpIHtcbiAgICAvLyBXZSB1c2UgdHlwZSBhcyBhIHNwZWNpYWwga2V5IHRoYXQgc2lnbmFscyB0aGF0IHRoaXMgY2FjaGUgaGFzIGJlZW4gc2VlZGVkIGZvciB0aGlzIHR5cGVcbiAgICByZXR1cm4gY2FjaGU7XG4gIH0gLy8gTWFyayB0aGlzIGNhY2hlIGFzIHNlZWRlZCBmb3IgdGhpcyB0eXBlXG5cblxuICBjYWNoZS5zZXQodHlwZSwgbnVsbCk7XG4gIHZhciBub2RlcyA9IG93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHlwZSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAoIWlzT3duZWRJbnN0YW5jZShub2RlKSAmJiAodHlwZSAhPT0gJ2xpbmsnIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCdyZWwnKSAhPT0gJ3N0eWxlc2hlZXQnKSAmJiBub2RlLm5hbWVzcGFjZVVSSSAhPT0gU1ZHX05BTUVTUEFDRSkge1xuICAgICAgdmFyIG5vZGVLZXkgPSBub2RlLmdldEF0dHJpYnV0ZShrZXlBdHRyaWJ1dGUpIHx8ICcnO1xuICAgICAgdmFyIGtleSA9IHR5cGUgKyBub2RlS2V5O1xuICAgICAgdmFyIGV4aXN0aW5nID0gY2FjaGUuZ2V0KGtleSk7XG5cbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBleGlzdGluZy5wdXNoKG5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGUuc2V0KGtleSwgW25vZGVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2FjaGU7XG59XG5cbmZ1bmN0aW9uIG1vdW50SG9pc3RhYmxlKGhvaXN0YWJsZVJvb3QsIHR5cGUsIGluc3RhbmNlKSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gZ2V0RG9jdW1lbnRGcm9tUm9vdChob2lzdGFibGVSb290KTtcbiAgb3duZXJEb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShpbnN0YW5jZSwgdHlwZSA9PT0gJ3RpdGxlJyA/IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCA+IHRpdGxlJykgOiBudWxsKTtcbn1cbmZ1bmN0aW9uIHVubW91bnRIb2lzdGFibGUoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBpc0hvc3RIb2lzdGFibGVUeXBlKHR5cGUsIHByb3BzLCBob3N0Q29udGV4dCkge1xuICB2YXIgb3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0O1xuICB2YXIgaG9zdENvbnRleHRQcm9kO1xuXG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDsgLy8gV2UgY2FuIG9ubHkgcmVuZGVyIHJlc291cmNlcyB3aGVuIHdlIGFyZSBub3Qgd2l0aGluIHRoZSBob3N0IGNvbnRhaW5lciBjb250ZXh0XG5cbiAgICBvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgPSAhaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLmNvbnRhaW5lclRhZ0luU2NvcGU7XG4gICAgaG9zdENvbnRleHRQcm9kID0gaG9zdENvbnRleHREZXYuY29udGV4dDtcbiAgfSAvLyBHbG9iYWwgb3B0IG91dCBvZiBob2lzdGluZyBmb3IgYW55dGhpbmcgaW4gU1ZHIE5hbWVzcGFjZSBvciBhbnl0aGluZyB3aXRoIGFuIGl0ZW1Qcm9wIGluc2lkZSBhbiBpdGVtU2NvcGVcblxuXG4gIGlmIChob3N0Q29udGV4dFByb2QgPT09IEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnIHx8IHByb3BzLml0ZW1Qcm9wICE9IG51bGwpIHtcbiAgICB7XG4gICAgICBpZiAob3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0ICYmIHByb3BzLml0ZW1Qcm9wICE9IG51bGwgJiYgKHR5cGUgPT09ICdtZXRhJyB8fCB0eXBlID09PSAndGl0bGUnIHx8IHR5cGUgPT09ICdzdHlsZScgfHwgdHlwZSA9PT0gJ2xpbmsnIHx8IHR5cGUgPT09ICdzY3JpcHQnKSkge1xuICAgICAgICBlcnJvcignQ2Fubm90IHJlbmRlciBhIDwlcz4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudCBpZiBpdCBoYXMgYW4gYGl0ZW1Qcm9wYCBwcm9wLiBgaXRlbVByb3BgIHN1Z2dlc3RzIHRoZSB0YWcgYmVsb25ncyB0byBhbicgKyAnIGBpdGVtU2NvcGVgIHdoaWNoIGNhbiBhcHBlYXIgYW55d2hlcmUgaW4gdGhlIERPTS4gSWYgeW91IHdlcmUgaW50ZW5kaW5nIGZvciBSZWFjdCB0byBob2lzdCB0aGlzIDwlcz4gcmVtb3ZlIHRoZSBgaXRlbVByb3BgIHByb3AuJyArICcgT3RoZXJ3aXNlLCB0cnkgbW92aW5nIHRoaXMgdGFnIGludG8gdGhlIDxoZWFkPiBvciA8Ym9keT4gb2YgdGhlIERvY3VtZW50LicsIHR5cGUsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ21ldGEnOlxuICAgIGNhc2UgJ3RpdGxlJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdzdHlsZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMucHJlY2VkZW5jZSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmhyZWYgIT09ICdzdHJpbmcnIHx8IHByb3BzLmhyZWYgPT09ICcnKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCkge1xuICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHJlbmRlciBhIDxzdHlsZT4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudCB3aXRob3V0IGtub3dpbmcgaXRzIHByZWNlZGVuY2UgYW5kIGEgdW5pcXVlIGhyZWYga2V5LicgKyAnIFJlYWN0IGNhbiBob2lzdCBhbmQgZGVkdXBsaWNhdGUgPHN0eWxlPiB0YWdzIGlmIHlvdSBwcm92aWRlIGEgYHByZWNlZGVuY2VgIHByb3AgYWxvbmcgd2l0aCBhbiBgaHJlZmAgcHJvcCB0aGF0JyArICcgZG9lcyBub3QgY29uZmxpYyB3aXRoIHRoZSBgaHJlZmAgdmFsdWVzIHVzZWQgaW4gYW55IG90aGVyIGhvaXN0ZWQgPHN0eWxlPiBvciA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgLi4uPiB0YWdzLiAnICsgJyBOb3RlIHRoYXQgaG9pc3RpbmcgPHN0eWxlPiB0YWdzIGlzIGNvbnNpZGVyZWQgYW4gYWR2YW5jZWQgZmVhdHVyZSB0aGF0IG1vc3Qgd2lsbCBub3QgdXNlIGRpcmVjdGx5LicgKyAnIENvbnNpZGVyIG1vdmluZyB0aGUgPHN0eWxlPiB0YWcgdG8gdGhlIDxoZWFkPiBvciBjb25zaWRlciBhZGRpbmcgYSBgcHJlY2VkZW5jZT1cImRlZmF1bHRcImAgYW5kIGBocmVmPVwic29tZSB1bmlxdWUgcmVzb3VyY2UgaWRlbnRpZmllclwiYCwgb3IgbW92ZSB0aGUgPHN0eWxlPicgKyAnIHRvIHRoZSA8c3R5bGU+IHRhZy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHByb3BzLnJlbCAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmhyZWYgIT09ICdzdHJpbmcnIHx8IHByb3BzLmhyZWYgPT09ICcnIHx8IHByb3BzLm9uTG9hZCB8fCBwcm9wcy5vbkVycm9yKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHByb3BzLnJlbCA9PT0gJ3N0eWxlc2hlZXQnICYmIHR5cGVvZiBwcm9wcy5wcmVjZWRlbmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICB2YWxpZGF0ZUxpbmtQcm9wc0ZvclN0eWxlUmVzb3VyY2UocHJvcHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0KSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcHMucmVsICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuaHJlZiAhPT0gJ3N0cmluZycgfHwgcHJvcHMuaHJlZiA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHJlbmRlciBhIDxsaW5rPiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQgYSBgcmVsYCBhbmQgYGhyZWZgIHByb3AuJyArICcgVHJ5IGFkZGluZyBhIGByZWxgIGFuZC9vciBgaHJlZmAgcHJvcCB0byB0aGlzIDxsaW5rPiBvciBtb3ZpbmcgdGhlIGxpbmsgaW50byB0aGUgPGhlYWQ+IHRhZycpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzLm9uRXJyb3IgfHwgcHJvcHMub25Mb2FkKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCByZW5kZXIgYSA8bGluaz4gd2l0aCBvbkxvYWQgb3Igb25FcnJvciBsaXN0ZW5lcnMgb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudC4nICsgJyBUcnkgcmVtb3Zpbmcgb25Mb2FkPXsuLi59IGFuZCBvbkVycm9yPXsuLi59IG9yIG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcgb3InICsgJyBzb21ld2hlcmUgaW4gdGhlIDxib2R5Pi4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAocHJvcHMucmVsKSB7XG4gICAgICAgICAgY2FzZSAnc3R5bGVzaGVldCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBwcmVjZWRlbmNlID0gcHJvcHMucHJlY2VkZW5jZSxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gcHJvcHMuZGlzYWJsZWQ7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJlY2VkZW5jZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCByZW5kZXIgYSA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgLz4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudCB3aXRob3V0IGtub3dpbmcgaXRzIHByZWNlZGVuY2UuJyArICcgQ29uc2lkZXIgYWRkaW5nIHByZWNlZGVuY2U9XCJkZWZhdWx0XCIgb3IgbW92aW5nIGl0IGludG8gdGhlIHJvb3QgPGhlYWQ+IHRhZy4nKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHByZWNlZGVuY2UgPT09ICdzdHJpbmcnICYmIGRpc2FibGVkID09IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgY2FzZSAnc2NyaXB0JzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHByb3BzLmFzeW5jICE9PSB0cnVlIHx8IHByb3BzLm9uTG9hZCB8fCBwcm9wcy5vbkVycm9yIHx8IHR5cGVvZiBwcm9wcy5zcmMgIT09ICdzdHJpbmcnIHx8ICFwcm9wcy5zcmMpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAob3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0KSB7XG4gICAgICAgICAgICAgIGlmIChwcm9wcy5hc3luYyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgcmVuZGVyIGEgc3luYyBvciBkZWZlciA8c2NyaXB0PiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQga25vd2luZyBpdHMgb3JkZXIuJyArICcgVHJ5IGFkZGluZyBhc3luYz1cIlwiIG9yIG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcuJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcHMub25Mb2FkIHx8IHByb3BzLm9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHJlbmRlciBhIDxzY3JpcHQ+IHdpdGggb25Mb2FkIG9yIG9uRXJyb3IgbGlzdGVuZXJzIG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQuJyArICcgVHJ5IHJlbW92aW5nIG9uTG9hZD17Li4ufSBhbmQgb25FcnJvcj17Li4ufSBvciBtb3ZpbmcgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnIG9yJyArICcgc29tZXdoZXJlIGluIHRoZSA8Ym9keT4uJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCByZW5kZXIgYSA8c2NyaXB0PiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQgYGFzeW5jPXt0cnVlfWAgYW5kIGEgbm9uLWVtcHR5IGBzcmNgIHByb3AuJyArICcgRW5zdXJlIHRoZXJlIGlzIGEgdmFsaWQgYHNyY2AgYW5kIGVpdGhlciBtYWtlIHRoZSBzY3JpcHQgYXN5bmMgb3IgbW92ZSBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcgb3InICsgJyBzb21ld2hlcmUgaW4gdGhlIDxib2R5Pi4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnbm9zY3JpcHQnOlxuICAgIGNhc2UgJ3RlbXBsYXRlJzpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQpIHtcbiAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgcmVuZGVyIDwlcz4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudC4gVHJ5IG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcuJywgdHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gbWF5UmVzb3VyY2VTdXNwZW5kQ29tbWl0KHJlc291cmNlKSB7XG4gIHJldHVybiByZXNvdXJjZS50eXBlID09PSAnc3R5bGVzaGVldCcgJiYgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBJbnNlcnRlZCkgPT09IE5vdExvYWRlZDtcbn1cbmZ1bmN0aW9uIHByZWxvYWRJbnN0YW5jZSh0eXBlLCBwcm9wcykge1xuICAvLyBSZXR1cm4gdHJ1ZSB0byBpbmRpY2F0ZSBpdCdzIGFscmVhZHkgbG9hZGVkXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gcHJlbG9hZFJlc291cmNlKHJlc291cmNlKSB7XG4gIGlmIChyZXNvdXJjZS50eXBlID09PSAnc3R5bGVzaGVldCcgJiYgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBTZXR0bGVkKSA9PT0gTm90TG9hZGVkKSB7XG4gICAgLy8gd2UgaGF2ZSBub3QgZmluaXNoZWQgbG9hZGluZyB0aGUgdW5kZXJseWluZyBzdHlsZXNoZWV0IHlldC5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gUmV0dXJuIHRydWUgdG8gaW5kaWNhdGUgaXQncyBhbHJlYWR5IGxvYWRlZFxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG52YXIgc3VzcGVuZGVkU3RhdGUgPSBudWxsOyAvLyBXZSB1c2UgYSBub29wIGZ1bmN0aW9uIHdoZW4gd2UgYmVnaW4gc3VzcGVuZGluZyBiZWNhdXNlIGlmIHBvc3NpYmxlIHdlIHdhbnQgdGhlXG4vLyB3YWl0Zm9yIHN0ZXAgdG8gZmluaXNoIHN5bmNocm9ub3VzbHkuIElmIGl0IGRvZXNuJ3Qgd2UnbGwgcmV0dXJuIGEgZnVuY3Rpb24gdG9cbi8vIHByb3ZpZGUgdGhlIGFjdHVhbCB1bnN1c3BlbmQgZnVuY3Rpb24gYW5kIHRoYXQgd2lsbCBnZXQgY29tcGxldGVkIHdoZW4gdGhlIGNvdW50XG4vLyBoaXRzIHplcm8gb3IgaXQgd2lsbCBnZXQgY2FuY2VsbGVkIGlmIHRoZSByb290IHN0YXJ0cyBuZXcgd29yay5cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIHN0YXJ0U3VzcGVuZGluZ0NvbW1pdCgpIHtcbiAgc3VzcGVuZGVkU3RhdGUgPSB7XG4gICAgc3R5bGVzaGVldHM6IG51bGwsXG4gICAgY291bnQ6IDAsXG4gICAgdW5zdXNwZW5kOiBub29wXG4gIH07XG59XG5mdW5jdGlvbiBzdXNwZW5kUmVzb3VyY2UoaG9pc3RhYmxlUm9vdCwgcmVzb3VyY2UsIHByb3BzKSB7XG4gIGlmIChzdXNwZW5kZWRTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgUmVhY3QgRXJyb3I6IHN1c3BlbmRlZFN0YXRlIG51bGwgd2hlbiBpdCB3YXMgZXhwZWN0ZWQgdG8gZXhpc3RzLiBQbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBSZWFjdCBidWcuJyk7XG4gIH1cblxuICB2YXIgc3RhdGUgPSBzdXNwZW5kZWRTdGF0ZTtcblxuICBpZiAocmVzb3VyY2UudHlwZSA9PT0gJ3N0eWxlc2hlZXQnKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5tZWRpYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGN1cnJlbnRseSBtYXRjaCBtZWRpYSB3ZSBhdm9pZCBzdXNwZW5kaW5nIG9uIHRoaXMgcmVzb3VyY2VcbiAgICAgIC8vIGFuZCBsZXQgaXQgaW5zZXJ0IG9uIHRoZSBtdXRhdGlvbiBwYXRoXG4gICAgICBpZiAobWF0Y2hNZWRpYShwcm9wcy5tZWRpYSkubWF0Y2hlcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgocmVzb3VyY2Uuc3RhdGUubG9hZGluZyAmIEluc2VydGVkKSA9PT0gTm90TG9hZGVkKSB7XG4gICAgICBpZiAocmVzb3VyY2UuaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICAgICAgdmFyIHF1YWxpZmllZFByb3BzID0gcHJvcHM7XG4gICAgICAgIHZhciBrZXkgPSBnZXRTdHlsZUtleShxdWFsaWZpZWRQcm9wcy5ocmVmKTsgLy8gQXR0ZW1wdCB0byBoeWRyYXRlIGluc3RhbmNlIGZyb20gRE9NXG5cbiAgICAgICAgdmFyIGluc3RhbmNlID0gaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoa2V5KSk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpbnN0YW5jZSBoYXMgYSBsb2FkaW5nIHN0YXRlIGl0IGNhbWUgZnJvbSB0aGUgRml6eiBydW50aW1lLlxuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vdCBsb2FkaW5nIHN0YXRlIGl0IGlzIGFzc3VtZWQgdG8gaGF2ZSBiZWVuIHNlcnZlciByZW5kZXJlZFxuICAgICAgICAgIC8vIGFzIHBhcnQgb2YgdGhlIHByZWFtYmxlIGFuZCB0aGVyZWZvcmUgc3luY2hyb25vdXNseSBsb2FkZWQuIEl0IGNvdWxkIGhhdmVcbiAgICAgICAgICAvLyBlcnJvcmVkIGhvd2V2ZXIgd2hpY2ggd2Ugc3RpbGwgZG8gbm90IHlldCBoYXZlIGEgbWVhbnMgdG8gZGV0ZWN0LiBGb3Igbm93XG4gICAgICAgICAgLy8gd2UgYXNzdW1lIGl0IGlzIGxvYWRlZC5cbiAgICAgICAgICB2YXIgbWF5YmVMb2FkaW5nU3RhdGUgPSBpbnN0YW5jZS5fcDtcblxuICAgICAgICAgIGlmIChtYXliZUxvYWRpbmdTdGF0ZSAhPT0gbnVsbCAmJiB0eXBlb2YgbWF5YmVMb2FkaW5nU3RhdGUgPT09ICdvYmplY3QnICYmIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgICAgICAgICB0eXBlb2YgbWF5YmVMb2FkaW5nU3RhdGUudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGxvYWRpbmdTdGF0ZSA9IG1heWJlTG9hZGluZ1N0YXRlO1xuICAgICAgICAgICAgc3RhdGUuY291bnQrKztcbiAgICAgICAgICAgIHZhciBwaW5nID0gb25VbnN1c3BlbmQuYmluZChzdGF0ZSk7XG4gICAgICAgICAgICBsb2FkaW5nU3RhdGUudGhlbihwaW5nLCBwaW5nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvdXJjZS5zdGF0ZS5sb2FkaW5nIHw9IEluc2VydGVkO1xuICAgICAgICAgIHJlc291cmNlLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnZXREb2N1bWVudEZyb21Sb290KGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICB2YXIgc3R5bGVzaGVldFByb3BzID0gc3R5bGVzaGVldFByb3BzRnJvbVJhd1Byb3BzKHByb3BzKTtcbiAgICAgICAgdmFyIHByZWxvYWRQcm9wcyA9IHByZWxvYWRQcm9wc01hcC5nZXQoa2V5KTtcblxuICAgICAgICBpZiAocHJlbG9hZFByb3BzKSB7XG4gICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTdHlsZXNoZWV0KHN0eWxlc2hlZXRQcm9wcywgcHJlbG9hZFByb3BzKTtcbiAgICAgICAgfSAvLyBDb25zdHJ1Y3QgYW5kIGluc2VydCBhIG5ldyBpbnN0YW5jZVxuXG5cbiAgICAgICAgaW5zdGFuY2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSk7XG4gICAgICAgIHZhciBsaW5rSW5zdGFuY2UgPSBpbnN0YW5jZTsgLy8gVGhpcyBQcm9taXNlIGlzIGEgbG9hZGluZyBzdGF0ZSB1c2VkIGJ5IHRoZSBGaXp6IHJ1bnRpbWUuIFdlIG5lZWQgdGhpcyBpbmNhc2UgdGhlcmUgaXMgYSByYWNlXG4gICAgICAgIC8vIGJldHdlZW4gdGhpcyByZXNvdXJjZSBiZWluZyByZW5kZXJlZCBvbiB0aGUgY2xpZW50IGFuZCBiZWluZyByZW5kZXJlZCB3aXRoIGEgbGF0ZSBjb21wbGV0ZWQgYm91bmRhcnkuXG5cbiAgICAgICAgbGlua0luc3RhbmNlLl9wID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGxpbmtJbnN0YW5jZS5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgIGxpbmtJbnN0YW5jZS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaW5zdGFuY2UsICdsaW5rJywgc3R5bGVzaGVldFByb3BzKTtcbiAgICAgICAgcmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlLnN0eWxlc2hlZXRzID09PSBudWxsKSB7XG4gICAgICAgIHN0YXRlLnN0eWxlc2hlZXRzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZS5zdHlsZXNoZWV0cy5zZXQocmVzb3VyY2UsIGhvaXN0YWJsZVJvb3QpO1xuICAgICAgdmFyIHByZWxvYWRFbCA9IHJlc291cmNlLnN0YXRlLnByZWxvYWQ7XG5cbiAgICAgIGlmIChwcmVsb2FkRWwgJiYgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBTZXR0bGVkKSA9PT0gTm90TG9hZGVkKSB7XG4gICAgICAgIHN0YXRlLmNvdW50Kys7XG5cbiAgICAgICAgdmFyIF9waW5nID0gb25VbnN1c3BlbmQuYmluZChzdGF0ZSk7XG5cbiAgICAgICAgcHJlbG9hZEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBfcGluZyk7XG4gICAgICAgIHByZWxvYWRFbC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIF9waW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHdhaXRGb3JDb21taXRUb0JlUmVhZHkoKSB7XG4gIGlmIChzdXNwZW5kZWRTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZXJuYWwgUmVhY3QgRXJyb3I6IHN1c3BlbmRlZFN0YXRlIG51bGwgd2hlbiBpdCB3YXMgZXhwZWN0ZWQgdG8gZXhpc3RzLiBQbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBSZWFjdCBidWcuJyk7XG4gIH1cblxuICB2YXIgc3RhdGUgPSBzdXNwZW5kZWRTdGF0ZTtcblxuICBpZiAoc3RhdGUuc3R5bGVzaGVldHMgJiYgc3RhdGUuY291bnQgPT09IDApIHtcbiAgICAvLyBXZSBhcmUgbm90IGN1cnJlbnRseSBibG9ja2VkIGJ1dCB3ZSBoYXZlIG5vdCBpbnNlcnRlZCBhbGwgc3R5bGVzaGVldHMuXG4gICAgLy8gSWYgdGhpcyBpbnNlcnRpb24gaGFwcGVucyBhbmQgbG9hZHMgb3IgZXJyb3JzIHN5bmNocm9ub3VzbHkgdGhlbiB3ZSBjYW5cbiAgICAvLyBhdm9pZCBzdXNwZW5kaW5nIHRoZSBjb21taXQuIFRvIGRvIHRoaXMgd2UgY2hlY2sgdGhlIGNvdW50IGFnYWluIGltbWVkaWF0ZWx5IGFmdGVyXG4gICAgaW5zZXJ0U3VzcGVuZGVkU3R5bGVzaGVldHMoc3RhdGUsIHN0YXRlLnN0eWxlc2hlZXRzKTtcbiAgfSAvLyBXZSBuZWVkIHRvIGNoZWNrIHRoZSBjb3VudCBhZ2FpbiBiZWNhdXNlIHRoZSBpbnNlcnRlZCBzdHlsZXNoZWV0cyBtYXkgaGF2ZSBsZWQgdG8gbmV3XG4gIC8vIHRhc2tzIHRvIHdhaXQgb24uXG5cblxuICBpZiAoc3RhdGUuY291bnQgPiAwKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjb21taXQpIHtcbiAgICAgIC8vIFdlIGFsbW9zdCBuZXZlciB3YW50IHRvIHNob3cgY29udGVudCBiZWZvcmUgaXRzIHN0eWxlcyBoYXZlIGxvYWRlZC4gQnV0XG4gICAgICAvLyBldmVudHVhbGx5IHdlIHdpbGwgZ2l2ZSB1cCBhbmQgYWxsb3cgdW5zdHlsZWQgY29udGVudC4gU28gdGhpcyBudW1iZXIgaXNcbiAgICAgIC8vIHNvbWV3aGF0IGFyYml0cmFyeSDigJQgYmlnIGVub3VnaCB0aGF0IHlvdSdkIG9ubHkgcmVhY2ggaXQgdW5kZXJcbiAgICAgIC8vIGV4dHJlbWUgY2lyY3Vtc3RhbmNlcy5cbiAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2hhdCB0aGUgYnJvd3NlciBlbmdpbmVzIGRvIGR1cmluZyBpbml0aWFsIHBhZ2UgbG9hZCBhbmRcbiAgICAgIC8vIGNvbnNpZGVyIGFsaWduaW5nIG91ciBiZWhhdmlvciB3aXRoIHRoYXQuXG4gICAgICB2YXIgc3R5bGVzaGVldFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChzdGF0ZS5zdHlsZXNoZWV0cykge1xuICAgICAgICAgIGluc2VydFN1c3BlbmRlZFN0eWxlc2hlZXRzKHN0YXRlLCBzdGF0ZS5zdHlsZXNoZWV0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUudW5zdXNwZW5kKSB7XG4gICAgICAgICAgdmFyIHVuc3VzcGVuZCA9IHN0YXRlLnVuc3VzcGVuZDtcbiAgICAgICAgICBzdGF0ZS51bnN1c3BlbmQgPSBudWxsO1xuICAgICAgICAgIHVuc3VzcGVuZCgpO1xuICAgICAgICB9XG4gICAgICB9LCA2MDAwMCk7IC8vIG9uZSBtaW51dGVcblxuICAgICAgc3RhdGUudW5zdXNwZW5kID0gY29tbWl0O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc3RhdGUudW5zdXNwZW5kID0gbnVsbDtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHN0eWxlc2hlZXRUaW1lcik7XG4gICAgICB9O1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gb25VbnN1c3BlbmQoKSB7XG4gIHRoaXMuY291bnQtLTtcblxuICBpZiAodGhpcy5jb3VudCA9PT0gMCkge1xuICAgIGlmICh0aGlzLnN0eWxlc2hlZXRzKSB7XG4gICAgICAvLyBJZiB3ZSBoYXZlbid0IGFjdHVhbGx5IGluc2VydGVkIHRoZSBzdHlsZXNoZWV0cyB5ZXQgd2UgbmVlZCB0byBkbyBzbyBub3cgYmVmb3JlIHN0YXJ0aW5nIHRoZSBjb21taXQuXG4gICAgICAvLyBUaGUgcmVhc29uIHdlIGRvIHRoaXMgYWZ0ZXIgZXZlcnl0aGluZyBlbHNlIGhhcyBmaW5pc2hlZCBpcyBiZWNhdXNlIHdlIHdhbnQgdG8gaGF2ZSBhbGwgdGhlIHN0eWxlc2hlZXRzXG4gICAgICAvLyBsb2FkIHN5bmNocm9ub3VzbHkgcmlnaHQgYmVmb3JlIG11dGF0aW5nLiBJZGVhbGx5IHRoZSBuZXcgc3R5bGVzIHdpbGwgY2F1c2UgYSBzaW5nbGUgcmVjYWxjIG9ubHkgb24gdGhlXG4gICAgICAvLyBuZXcgdHJlZS4gV2hlbiB3ZSBmaWxsZWQgdXAgc3R5bGVzaGVldHMgd2Ugb25seSBpbmxjdWRlZCBzdHlsZXNoZWV0cyB3aXRoIG1hdGNoaW5nIG1lZGlhIGF0dHJpYnV0ZXMgc28gd2VcbiAgICAgIC8vIHdhaXQgZm9yIHRoZW0gdG8gbG9hZCBiZWZvcmUgYWN0dWFsbHkgY29udGludWluZy4gV2UgZXhwZWN0IHRoaXMgdG8gaW5jcmVhc2UgdGhlIGNvdW50IGFib3ZlIHplcm9cbiAgICAgIGluc2VydFN1c3BlbmRlZFN0eWxlc2hlZXRzKHRoaXMsIHRoaXMuc3R5bGVzaGVldHMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy51bnN1c3BlbmQpIHtcbiAgICAgIHZhciB1bnN1c3BlbmQgPSB0aGlzLnVuc3VzcGVuZDtcbiAgICAgIHRoaXMudW5zdXNwZW5kID0gbnVsbDtcbiAgICAgIHVuc3VzcGVuZCgpO1xuICAgIH1cbiAgfVxufSAvLyBUaGlzIGlzIHR5cGVjYXN0IHRvIG5vbi1udWxsIGJlY2F1c2UgaXQgd2lsbCBhbHdheXMgYmUgc2V0IGJlZm9yZSByZWFkLlxuLy8gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhpcyBub3QgYmUgdXNlZCBleGNlcHQgd2hlbiB0aGUgc3RhY2sgZ3VhcmFudGVlcyBpdCBleGlzdHMuXG4vLyBDdXJyZW50bHl0IGhpcyBpcyBvbmx5IGR1cmluZyBpbnNlcnRTdXNwZW5kZWRTdHlsZXNoZWV0LlxuXG5cbnZhciBwcmVjZWRlbmNlc0J5Um9vdCA9IG51bGw7XG5cbmZ1bmN0aW9uIGluc2VydFN1c3BlbmRlZFN0eWxlc2hlZXRzKHN0YXRlLCByZXNvdXJjZXMpIHtcbiAgLy8gV2UgbmVlZCB0byBjbGVhciB0aGlzIG91dCBzbyB3ZSBkb24ndCB0cnkgdG8gcmVpbnNlcnQgYWZ0ZXIgdGhlIHN0eWxlc2hlZXRzIGhhdmUgbG9hZGVkXG4gIHN0YXRlLnN0eWxlc2hlZXRzID0gbnVsbDtcblxuICBpZiAoc3RhdGUudW5zdXNwZW5kID09PSBudWxsKSB7XG4gICAgLy8gVGhlIHN1c3BlbmRlZCBjb21taXQgd2FzIGNhbmNlbGxlZC4gV2UgZG9uJ3QgbmVlZCB0byBpbnNlcnQgYW55IHN0eWxlc2hlZXRzLlxuICAgIHJldHVybjtcbiAgfSAvLyBUZW1wb3JhcmlseSBpbmNyZW1lbnQgY291bnQuIHdlIGRvbid0IHdhbnQgYW55IHN5bmNocm9ub3VzbHkgbG9hZGVkIHN0eWxlc2hlZXRzIHRvIHRyeSB0byB1bnN1c3BlbmRcbiAgLy8gYmVmb3JlIHdlIGZpbmlzaCBpbnNlcnRpbmcgYWxsIHN0eWxlc2hlZXRzLlxuXG5cbiAgc3RhdGUuY291bnQrKztcbiAgcHJlY2VkZW5jZXNCeVJvb3QgPSBuZXcgTWFwKCk7XG4gIHJlc291cmNlcy5mb3JFYWNoKGluc2VydFN0eWxlc2hlZXRJbnRvUm9vdCwgc3RhdGUpO1xuICBwcmVjZWRlbmNlc0J5Um9vdCA9IG51bGw7IC8vIFdlIGNhbiByZW1vdmUgb3VyIHRlbXBvcmFyeSBjb3VudCBhbmQgaWYgd2UncmUgc3RpbGwgYXQgemVybyB3ZSBjYW4gdW5zdXNwZW5kLlxuICAvLyBJZiB3ZSBhcmUgaW4gdGhlIHN5bmNocm9ub3VzIHBoYXNlIGJlZm9yZSBkZWNpZGluZyBpZiB0aGUgY29tbWl0IHNob3VsZCBzdXNwZW5kIGFuZCB0aGlzXG4gIC8vIGVuZHMgdXAgaGl0dGluZyB0aGUgdW5zdXNwZW5kIHBhdGggaXQgd2lsbCBqdXN0IGludm9rZSB0aGUgbm9vcCB1bnN1c3BlbmQuXG5cbiAgb25VbnN1c3BlbmQuY2FsbChzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlc2hlZXRJbnRvUm9vdChyb290LCByZXNvdXJjZSwgbWFwKSB7XG4gIGlmIChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgSW5zZXJ0ZWQpIHtcbiAgICAvLyBUaGlzIHJlc291cmNlIHdhcyBpbnNlcnRlZCBieSBhbm90aGVyIHJvb3QgY29tbWl0dGluZy4gd2UgZG9uJ3QgbmVlZCB0byBpbnNlcnQgaXQgYWdhaW5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbGFzdDtcbiAgdmFyIHByZWNlZGVuY2VzID0gcHJlY2VkZW5jZXNCeVJvb3QuZ2V0KHJvb3QpO1xuXG4gIGlmICghcHJlY2VkZW5jZXMpIHtcbiAgICBwcmVjZWRlbmNlcyA9IG5ldyBNYXAoKTtcbiAgICBwcmVjZWRlbmNlc0J5Um9vdC5zZXQocm9vdCwgcHJlY2VkZW5jZXMpO1xuICAgIHZhciBub2RlcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbCgnbGlua1tkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0nKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG5cbiAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnbGluaycgfHwgLy8gV2Ugb21pdCBzdHlsZSB0YWdzIHdpdGggbWVkaWE9XCJub3QgYWxsXCIgYmVjYXVzZSB0aGV5IGFyZSBub3QgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uXG4gICAgICAvLyBhbmQgd2lsbCBiZSBob2lzdGVkIGJ5IHRoZSBGaXp6IHJ1bnRpbWUgaW1taW5lbnRseS5cbiAgICAgIG5vZGUuZ2V0QXR0cmlidXRlKCdtZWRpYScpICE9PSAnbm90IGFsbCcpIHtcbiAgICAgICAgcHJlY2VkZW5jZXMuc2V0KCdwJyArIG5vZGUuZGF0YXNldC5wcmVjZWRlbmNlLCBub2RlKTtcbiAgICAgICAgbGFzdCA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIHByZWNlZGVuY2VzLnNldCgnbGFzdCcsIGxhc3QpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsYXN0ID0gcHJlY2VkZW5jZXMuZ2V0KCdsYXN0Jyk7XG4gIH0gLy8gV2Ugb25seSBjYWxsIHRoaXMgYWZ0ZXIgd2UgaGF2ZSBjb25zdHJ1Y3RlZCBhbiBpbnN0YW5jZSBzbyB3ZSBhc3N1bWUgaXQgaGVyZVxuXG5cbiAgdmFyIGluc3RhbmNlID0gcmVzb3VyY2UuaW5zdGFuY2U7IC8vIFdlIHdpbGwgYWx3YXlzIGhhdmUgYSBwcmVjZWRlbmNlIGZvciBzdHlsZXNoZWV0IGluc3RhbmNlc1xuXG4gIHZhciBwcmVjZWRlbmNlID0gaW5zdGFuY2UuZ2V0QXR0cmlidXRlKCdkYXRhLXByZWNlZGVuY2UnKTtcbiAgdmFyIHByaW9yID0gcHJlY2VkZW5jZXMuZ2V0KCdwJyArIHByZWNlZGVuY2UpIHx8IGxhc3Q7XG5cbiAgaWYgKHByaW9yID09PSBsYXN0KSB7XG4gICAgcHJlY2VkZW5jZXMuc2V0KCdsYXN0JywgaW5zdGFuY2UpO1xuICB9XG5cbiAgcHJlY2VkZW5jZXMuc2V0KHByZWNlZGVuY2UsIGluc3RhbmNlKTtcbiAgdGhpcy5jb3VudCsrO1xuICB2YXIgb25Db21wbGV0ZSA9IG9uVW5zdXNwZW5kLmJpbmQodGhpcyk7XG4gIGluc3RhbmNlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBvbkNvbXBsZXRlKTtcbiAgaW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbkNvbXBsZXRlKTtcblxuICBpZiAocHJpb3IpIHtcbiAgICBwcmlvci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpbnN0YW5jZSwgcHJpb3IubmV4dFNpYmxpbmcpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJlbnQgPSByb290Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gcm9vdC5oZWFkIDogcm9vdDtcbiAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGluc3RhbmNlLCBwYXJlbnQuZmlyc3RDaGlsZCk7XG4gIH1cblxuICByZXNvdXJjZS5zdGF0ZS5sb2FkaW5nIHw9IEluc2VydGVkO1xufVxuXG52YXIgTm90UGVuZGluZ1RyYW5zaXRpb24gPSBOb3RQZW5kaW5nO1xuXG52YXIgRGlzcGF0Y2hlciQxID0gSW50ZXJuYWxzLkRpc3BhdGNoZXI7XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIFNldCB0aGUgZGVmYXVsdCBkaXNwYXRjaGVyIHRvIHRoZSBjbGllbnQgZGlzcGF0Y2hlclxuICBEaXNwYXRjaGVyJDEuY3VycmVudCA9IFJlYWN0RE9NQ2xpZW50RGlzcGF0Y2hlcjtcbn1cbi8qIGdsb2JhbCByZXBvcnRFcnJvciAqL1xuXG52YXIgZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvciA9IHR5cGVvZiByZXBvcnRFcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IC8vIEluIG1vZGVybiBicm93c2VycywgcmVwb3J0RXJyb3Igd2lsbCBkaXNwYXRjaCBhbiBlcnJvciBldmVudCxcbi8vIGVtdWxhdGluZyBhbiB1bmNhdWdodCBKYXZhU2NyaXB0IGVycm9yLlxucmVwb3J0RXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgLy8gSW4gb2xkZXIgYnJvd3NlcnMgYW5kIHRlc3QgZW52aXJvbm1lbnRzLCBmYWxsYmFjayB0byBjb25zb2xlLmVycm9yLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG4gIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpO1xufTsgLy8gJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdXG5cbmZ1bmN0aW9uIFJlYWN0RE9NUm9vdChpbnRlcm5hbFJvb3QpIHtcbiAgdGhpcy5faW50ZXJuYWxSb290ID0gaW50ZXJuYWxSb290O1xufSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cblJlYWN0RE9NSHlkcmF0aW9uUm9vdC5wcm90b3R5cGUucmVuZGVyID0gUmVhY3RET01Sb290LnByb3RvdHlwZS5yZW5kZXIgPSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF1cbmZ1bmN0aW9uIChjaGlsZHJlbikge1xuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcblxuICBpZiAocm9vdCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVwZGF0ZSBhbiB1bm1vdW50ZWQgcm9vdC4nKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuICcgKyAnVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkQ29udGFpbmVyKGFyZ3VtZW50c1sxXSkpIHtcbiAgICAgIGVycm9yKCdZb3UgcGFzc2VkIGEgY29udGFpbmVyIHRvIHRoZSBzZWNvbmQgYXJndW1lbnQgb2Ygcm9vdC5yZW5kZXIoLi4uKS4gJyArIFwiWW91IGRvbid0IG5lZWQgdG8gcGFzcyBpdCBhZ2FpbiBzaW5jZSB5b3UgYWxyZWFkeSBwYXNzZWQgaXQgdG8gY3JlYXRlIHRoZSByb290LlwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlcnJvcignWW91IHBhc3NlZCBhIHNlY29uZCBhcmd1bWVudCB0byByb290LnJlbmRlciguLi4pIGJ1dCBpdCBvbmx5IGFjY2VwdHMgJyArICdvbmUgYXJndW1lbnQuJyk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCByb290LCBudWxsLCBudWxsKTtcbn07IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cblxuUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS51bm1vdW50ID0gUmVhY3RET01Sb290LnByb3RvdHlwZS51bm1vdW50ID0gLy8gJEZsb3dGaXhNZVttaXNzaW5nLXRoaXMtYW5ub3RdXG5mdW5jdGlvbiAoKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ3VubW91bnQoLi4uKTogZG9lcyBub3Qgc3VwcG9ydCBhIGNhbGxiYWNrIGFyZ3VtZW50LiAnICsgJ1RvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgdGhpcy5faW50ZXJuYWxSb290ID0gbnVsbDtcbiAgICB2YXIgY29udGFpbmVyID0gcm9vdC5jb250YWluZXJJbmZvO1xuXG4gICAge1xuICAgICAgaWYgKGlzQWxyZWFkeVJlbmRlcmluZygpKSB7XG4gICAgICAgIGVycm9yKCdBdHRlbXB0ZWQgdG8gc3luY2hyb25vdXNseSB1bm1vdW50IGEgcm9vdCB3aGlsZSBSZWFjdCB3YXMgYWxyZWFkeSAnICsgJ3JlbmRlcmluZy4gUmVhY3QgY2Fubm90IGZpbmlzaCB1bm1vdW50aW5nIHRoZSByb290IHVudGlsIHRoZSAnICsgJ2N1cnJlbnQgcmVuZGVyIGhhcyBjb21wbGV0ZWQsIHdoaWNoIG1heSBsZWFkIHRvIGEgcmFjZSBjb25kaXRpb24uJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmx1c2hTeW5jJDEoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKG51bGwsIHJvb3QsIG51bGwsIG51bGwpO1xuICAgIH0pO1xuICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVSb290JDEoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjcmVhdGVSb290KC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJyk7XG4gIH1cblxuICB3YXJuSWZSZWFjdERPTUNvbnRhaW5lckluREVWKGNvbnRhaW5lcik7XG4gIHZhciBpc1N0cmljdE1vZGUgPSBmYWxzZTtcbiAgdmFyIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUgPSBmYWxzZTtcbiAgdmFyIGlkZW50aWZpZXJQcmVmaXggPSAnJztcbiAgdmFyIG9uUmVjb3ZlcmFibGVFcnJvciA9IGRlZmF1bHRPblJlY292ZXJhYmxlRXJyb3I7XG4gIHZhciB0cmFuc2l0aW9uQ2FsbGJhY2tzID0gbnVsbDtcblxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICB7XG4gICAgICBpZiAob3B0aW9ucy5oeWRyYXRlKSB7XG4gICAgICAgIHdhcm4oJ2h5ZHJhdGUgdGhyb3VnaCBjcmVhdGVSb290IGlzIGRlcHJlY2F0ZWQuIFVzZSBSZWFjdERPTUNsaWVudC5oeWRyYXRlUm9vdChjb250YWluZXIsIDxBcHAgLz4pIGluc3RlYWQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucy4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICAgICAgZXJyb3IoJ1lvdSBwYXNzZWQgYSBKU1ggZWxlbWVudCB0byBjcmVhdGVSb290LiBZb3UgcHJvYmFibHkgbWVhbnQgdG8gJyArICdjYWxsIHJvb3QucmVuZGVyIGluc3RlYWQuICcgKyAnRXhhbXBsZSB1c2FnZTpcXG5cXG4nICsgJyAgbGV0IHJvb3QgPSBjcmVhdGVSb290KGRvbUNvbnRhaW5lcik7XFxuJyArICcgIHJvb3QucmVuZGVyKDxBcHAgLz4pOycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudW5zdGFibGVfc3RyaWN0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgaXNTdHJpY3RNb2RlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5pZGVudGlmaWVyUHJlZml4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlkZW50aWZpZXJQcmVmaXggPSBvcHRpb25zLmlkZW50aWZpZXJQcmVmaXg7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9uUmVjb3ZlcmFibGVFcnJvciA9IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJhbnNpdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMudW5zdGFibGVfdHJhbnNpdGlvbkNhbGxiYWNrcztcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdCA9IGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXIsIENvbmN1cnJlbnRSb290LCBudWxsLCBpc1N0cmljdE1vZGUsIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUsIGlkZW50aWZpZXJQcmVmaXgsIG9uUmVjb3ZlcmFibGVFcnJvciwgdHJhbnNpdGlvbkNhbGxiYWNrcyk7XG4gIG1hcmtDb250YWluZXJBc1Jvb3Qocm9vdC5jdXJyZW50LCBjb250YWluZXIpO1xuICBEaXNwYXRjaGVyJDEuY3VycmVudCA9IFJlYWN0RE9NQ2xpZW50RGlzcGF0Y2hlcjtcbiAgdmFyIHJvb3RDb250YWluZXJFbGVtZW50ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyBjb250YWluZXIucGFyZW50Tm9kZSA6IGNvbnRhaW5lcjtcbiAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpOyAvLyAkRmxvd0ZpeE1lW2ludmFsaWQtY29uc3RydWN0b3JdIEZsb3cgbm8gbG9uZ2VyIHN1cHBvcnRzIGNhbGxpbmcgbmV3IG9uIGZ1bmN0aW9uc1xuXG4gIHJldHVybiBuZXcgUmVhY3RET01Sb290KHJvb3QpO1xufSAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF1cblxuZnVuY3Rpb24gUmVhY3RET01IeWRyYXRpb25Sb290KGludGVybmFsUm9vdCkge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBpbnRlcm5hbFJvb3Q7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlSHlkcmF0aW9uKHRhcmdldCkge1xuICBpZiAodGFyZ2V0KSB7XG4gICAgcXVldWVFeHBsaWNpdEh5ZHJhdGlvblRhcmdldCh0YXJnZXQpO1xuICB9XG59IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBmb3VuZCB3aGVuIHVwZ3JhZGluZyBGbG93XG5cblxuUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS51bnN0YWJsZV9zY2hlZHVsZUh5ZHJhdGlvbiA9IHNjaGVkdWxlSHlkcmF0aW9uO1xuZnVuY3Rpb24gaHlkcmF0ZVJvb3QkMShjb250YWluZXIsIGluaXRpYWxDaGlsZHJlbiwgb3B0aW9ucykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaHlkcmF0ZVJvb3QoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC4nKTtcbiAgfVxuXG4gIHdhcm5JZlJlYWN0RE9NQ29udGFpbmVySW5ERVYoY29udGFpbmVyKTtcblxuICB7XG4gICAgaWYgKGluaXRpYWxDaGlsZHJlbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcignTXVzdCBwcm92aWRlIGluaXRpYWwgY2hpbGRyZW4gYXMgc2Vjb25kIGFyZ3VtZW50IHRvIGh5ZHJhdGVSb290LiAnICsgJ0V4YW1wbGUgdXNhZ2U6IGh5ZHJhdGVSb290KGRvbUNvbnRhaW5lciwgPEFwcCAvPiknKTtcbiAgICB9XG4gIH0gLy8gRm9yIG5vdyB3ZSByZXVzZSB0aGUgd2hvbGUgYmFnIG9mIG9wdGlvbnMgc2luY2UgdGhleSBjb250YWluXG4gIC8vIHRoZSBoeWRyYXRpb24gY2FsbGJhY2tzLlxuXG5cbiAgdmFyIGh5ZHJhdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMgIT0gbnVsbCA/IG9wdGlvbnMgOiBudWxsO1xuICB2YXIgaXNTdHJpY3RNb2RlID0gZmFsc2U7XG4gIHZhciBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlID0gZmFsc2U7XG4gIHZhciBpZGVudGlmaWVyUHJlZml4ID0gJyc7XG4gIHZhciBvblJlY292ZXJhYmxlRXJyb3IgPSBkZWZhdWx0T25SZWNvdmVyYWJsZUVycm9yO1xuICB2YXIgdHJhbnNpdGlvbkNhbGxiYWNrcyA9IG51bGw7XG4gIHZhciBmb3JtU3RhdGUgPSBudWxsO1xuXG4gIGlmIChvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChvcHRpb25zLnVuc3RhYmxlX3N0cmljdE1vZGUgPT09IHRydWUpIHtcbiAgICAgIGlzU3RyaWN0TW9kZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaWRlbnRpZmllclByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZGVudGlmaWVyUHJlZml4ID0gb3B0aW9ucy5pZGVudGlmaWVyUHJlZml4O1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm9uUmVjb3ZlcmFibGVFcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvblJlY292ZXJhYmxlRXJyb3IgPSBvcHRpb25zLm9uUmVjb3ZlcmFibGVFcnJvcjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51bnN0YWJsZV90cmFuc2l0aW9uQ2FsbGJhY2tzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyYW5zaXRpb25DYWxsYmFja3MgPSBvcHRpb25zLnVuc3RhYmxlX3RyYW5zaXRpb25DYWxsYmFja3M7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKG9wdGlvbnMuZm9ybVN0YXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9ybVN0YXRlID0gb3B0aW9ucy5mb3JtU3RhdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvb3QgPSBjcmVhdGVIeWRyYXRpb25Db250YWluZXIoaW5pdGlhbENoaWxkcmVuLCBudWxsLCBjb250YWluZXIsIENvbmN1cnJlbnRSb290LCBoeWRyYXRpb25DYWxsYmFja3MsIGlzU3RyaWN0TW9kZSwgY29uY3VycmVudFVwZGF0ZXNCeURlZmF1bHRPdmVycmlkZSwgaWRlbnRpZmllclByZWZpeCwgb25SZWNvdmVyYWJsZUVycm9yLCB0cmFuc2l0aW9uQ2FsbGJhY2tzLCBmb3JtU3RhdGUpO1xuICBtYXJrQ29udGFpbmVyQXNSb290KHJvb3QuY3VycmVudCwgY29udGFpbmVyKTtcbiAgRGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBSZWFjdERPTUNsaWVudERpc3BhdGNoZXI7IC8vIFRoaXMgY2FuJ3QgYmUgYSBjb21tZW50IG5vZGUgc2luY2UgaHlkcmF0aW9uIGRvZXNuJ3Qgd29yayBvbiBjb21tZW50IG5vZGVzIGFueXdheS5cblxuICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhjb250YWluZXIpOyAvLyAkRmxvd0ZpeE1lW2ludmFsaWQtY29uc3RydWN0b3JdIEZsb3cgbm8gbG9uZ2VyIHN1cHBvcnRzIGNhbGxpbmcgbmV3IG9uIGZ1bmN0aW9uc1xuXG4gIHJldHVybiBuZXcgUmVhY3RET01IeWRyYXRpb25Sb290KHJvb3QpO1xufVxuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8ICFkaXNhYmxlQ29tbWVudHNBc0RPTUNvbnRhaW5lcnMgICkpO1xufSAvLyBUT0RPOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiB3aGljaCBhbHNvIGluY2x1ZGVzIGNvbW1lbnQgbm9kZXMuXG4vLyBXZSBvbmx5IHVzZSBpdCBpbiBwbGFjZXMgdGhhdCBhcmUgY3VycmVudGx5IG1vcmUgcmVsYXhlZC5cblxuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lckxlZ2FjeShub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBub2RlLm5vZGVWYWx1ZSA9PT0gJyByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSAnKSk7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlJlYWN0RE9NQ29udGFpbmVySW5ERVYoY29udGFpbmVyKSB7XG4gIHtcbiAgICBpZiAoaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSkge1xuICAgICAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyKSB7XG4gICAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET01DbGllbnQuY3JlYXRlUm9vdCgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00ucmVuZGVyKCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET01DbGllbnQuY3JlYXRlUm9vdCgpIG9uIGEgY29udGFpbmVyIHRoYXQgJyArICdoYXMgYWxyZWFkeSBiZWVuIHBhc3NlZCB0byBjcmVhdGVSb290KCkgYmVmb3JlLiBJbnN0ZWFkLCBjYWxsICcgKyAncm9vdC5yZW5kZXIoKSBvbiB0aGUgZXhpc3Rpbmcgcm9vdCBpbnN0ZWFkIGlmIHlvdSB3YW50IHRvIHVwZGF0ZSBpdC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncztcblxue1xuICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciAmJiBjb250YWluZXIubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyLmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoaXMgJyArICdjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyAnUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSB0byBlbXB0eSBhIGNvbnRhaW5lci4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0ID0gISFjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEocm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKSk7XG5cbiAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQgJiYgIWlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCAnICsgJ2NvbXBvbmVudC4gSWYgeW91IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlLCAnICsgJ3lvdSBzaG91bGQgaW5zdGVhZCBoYXZlIHRoZSBleGlzdGluZyBjaGlsZHJlbiB1cGRhdGUgdGhlaXIgc3RhdGUgJyArICdhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50cyBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLicpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBub29wT25SZWNvdmVyYWJsZUVycm9yKCkgey8vIFRoaXMgaXNuJ3QgcmVhY2hhYmxlIGJlY2F1c2Ugb25SZWNvdmVyYWJsZUVycm9yIGlzbid0IGNhbGxlZCBpbiB0aGVcbiAgLy8gbGVnYWN5IEFQSS5cbn1cblxuZnVuY3Rpb24gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBpbml0aWFsQ2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2ssIGlzSHlkcmF0aW9uQ29udGFpbmVyKSB7XG4gIGlmIChpc0h5ZHJhdGlvbkNvbnRhaW5lcikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBvcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2Uocm9vdCk7XG4gICAgICAgIG9yaWdpbmFsQ2FsbGJhY2suY2FsbChpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciByb290ID0gY3JlYXRlSHlkcmF0aW9uQ29udGFpbmVyKGluaXRpYWxDaGlsZHJlbiwgY2FsbGJhY2ssIGNvbnRhaW5lciwgTGVnYWN5Um9vdCwgbnVsbCwgLy8gaHlkcmF0aW9uQ2FsbGJhY2tzXG4gICAgZmFsc2UsIC8vIGlzU3RyaWN0TW9kZVxuICAgIGZhbHNlLCAvLyBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlLFxuICAgICcnLCAvLyBpZGVudGlmaWVyUHJlZml4XG4gICAgbm9vcE9uUmVjb3ZlcmFibGVFcnJvciwgLy8gVE9ETyhsdW5hKSBTdXBwb3J0IGh5ZHJhdGlvbiBsYXRlclxuICAgIG51bGwsIG51bGwpO1xuICAgIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gcm9vdDtcbiAgICBtYXJrQ29udGFpbmVyQXNSb290KHJvb3QuY3VycmVudCwgY29udGFpbmVyKTtcbiAgICB2YXIgcm9vdENvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSA/IGNvbnRhaW5lci5wYXJlbnROb2RlIDogY29udGFpbmVyOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXVxuXG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICAgIGZsdXNoU3luYyQxKCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH0gZWxzZSB7XG4gICAgLy8gRmlyc3QgY2xlYXIgYW55IGV4aXN0aW5nIGNvbnRlbnQuXG4gICAgY2xlYXJDb250YWluZXIoY29udGFpbmVyKTtcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0UHVibGljUm9vdEluc3RhbmNlKF9yb290KTtcblxuICAgICAgICBfb3JpZ2luYWxDYWxsYmFjay5jYWxsKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIF9yb290ID0gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lciwgTGVnYWN5Um9vdCwgbnVsbCwgLy8gaHlkcmF0aW9uQ2FsbGJhY2tzXG4gICAgZmFsc2UsIC8vIGlzU3RyaWN0TW9kZVxuICAgIGZhbHNlLCAvLyBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlLFxuICAgICcnLCAvLyBpZGVudGlmaWVyUHJlZml4XG4gICAgbm9vcE9uUmVjb3ZlcmFibGVFcnJvciwgLy8gb25SZWNvdmVyYWJsZUVycm9yXG4gICAgbnVsbCAvLyB0cmFuc2l0aW9uQ2FsbGJhY2tzXG4gICAgKTtcblxuICAgIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gX3Jvb3Q7XG4gICAgbWFya0NvbnRhaW5lckFzUm9vdChfcm9vdC5jdXJyZW50LCBjb250YWluZXIpO1xuXG4gICAgdmFyIF9yb290Q29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXI7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdXG5cblxuICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKF9yb290Q29udGFpbmVyRWxlbWVudCk7IC8vIEluaXRpYWwgbW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG4gICAgZmx1c2hTeW5jJDEoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGluaXRpYWxDaGlsZHJlbiwgX3Jvb3QsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHJldHVybiBfcm9vdDtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGNoaWxkcmVuLCBjb250YWluZXIsIGZvcmNlSHlkcmF0ZSwgY2FsbGJhY2spIHtcbiAge1xuICAgIHRvcExldmVsVXBkYXRlV2FybmluZ3MoY29udGFpbmVyKTtcbiAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaywgJ3JlbmRlcicpO1xuICB9XG5cbiAgdmFyIG1heWJlUm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICB2YXIgcm9vdDtcblxuICBpZiAoIW1heWJlUm9vdCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICByb290ID0gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBjaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjaywgZm9yY2VIeWRyYXRlKTtcbiAgfSBlbHNlIHtcbiAgICByb290ID0gbWF5YmVSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShyb290KTtcbiAgICAgICAgb3JpZ2luYWxDYWxsYmFjay5jYWxsKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgfSAvLyBVcGRhdGVcblxuXG4gICAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCByb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBnZXRQdWJsaWNSb290SW5zdGFuY2Uocm9vdCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci5zdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciB3YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXI7XG5cbiAgICAgIGlmICghd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIGFjY2Vzc2luZyBmaW5kRE9NTm9kZSBpbnNpZGUgaXRzIHJlbmRlcigpLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKG93bmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb21wb25lbnRPckVsZW1lbnQ7XG4gIH1cblxuICB7XG4gICAgcmV0dXJuIGZpbmRIb3N0SW5zdGFuY2VXaXRoV2FybmluZyhjb21wb25lbnRPckVsZW1lbnQsICdmaW5kRE9NTm9kZScpO1xuICB9XG59XG5mdW5jdGlvbiBoeWRyYXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAge1xuICAgIGVycm9yKCdSZWFjdERPTS5oeWRyYXRlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gUmVhY3QgMTguIFVzZSBoeWRyYXRlUm9vdCAnICsgJ2luc3RlYWQuIFVudGlsIHlvdSBzd2l0Y2ggdG8gdGhlIG5ldyBBUEksIHlvdXIgYXBwIHdpbGwgYmVoYXZlIGFzICcgKyBcImlmIGl0J3MgcnVubmluZyBSZWFjdCAxNy4gTGVhcm4gXCIgKyAnbW9yZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N3aXRjaC10by1jcmVhdGVyb290Jyk7XG4gIH1cblxuICBpZiAoIWlzVmFsaWRDb250YWluZXJMZWdhY3koY29udGFpbmVyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC4nKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5oeWRyYXRlKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTUNsaWVudC5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCBoeWRyYXRlUm9vdChjb250YWluZXIsIGVsZW1lbnQpPycpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiB0aHJvdyBvciB3YXJuIGlmIHdlIGNvdWxkbid0IGh5ZHJhdGU/XG5cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgZWxlbWVudCwgY29udGFpbmVyLCB0cnVlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiByZW5kZXIoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICB7XG4gICAgZXJyb3IoJ1JlYWN0RE9NLnJlbmRlciBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGluIFJlYWN0IDE4LiBVc2UgY3JlYXRlUm9vdCAnICsgJ2luc3RlYWQuIFVudGlsIHlvdSBzd2l0Y2ggdG8gdGhlIG5ldyBBUEksIHlvdXIgYXBwIHdpbGwgYmVoYXZlIGFzICcgKyBcImlmIGl0J3MgcnVubmluZyBSZWFjdCAxNy4gTGVhcm4gXCIgKyAnbW9yZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N3aXRjaC10by1jcmVhdGVyb290Jyk7XG4gIH1cblxuICBpZiAoIWlzVmFsaWRDb250YWluZXJMZWdhY3koY29udGFpbmVyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC4nKTtcbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NQ2xpZW50LmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QucmVuZGVyKGVsZW1lbnQpPycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIGZhbHNlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICBlcnJvcignUmVhY3RET00udW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIoKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkICcgKyAnaW4gUmVhY3QgMTguIENvbnNpZGVyIHVzaW5nIGEgcG9ydGFsIGluc3RlYWQuIFVudGlsIHlvdSBzd2l0Y2ggdG8gJyArIFwidGhlIGNyZWF0ZVJvb3QgQVBJLCB5b3VyIGFwcCB3aWxsIGJlaGF2ZSBhcyBpZiBpdCdzIHJ1bm5pbmcgUmVhY3QgXCIgKyAnMTcuIExlYXJuIG1vcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zd2l0Y2gtdG8tY3JlYXRlcm9vdCcpO1xuICB9XG5cbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyTGVnYWN5KGNvbnRhaW5lck5vZGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LicpO1xuICB9XG5cbiAgaWYgKHBhcmVudENvbXBvbmVudCA9PSBudWxsIHx8ICFoYXMocGFyZW50Q29tcG9uZW50KSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50Q29tcG9uZW50IG11c3QgYmUgYSB2YWxpZCBSZWFjdCBDb21wb25lbnQnKTtcbiAgfVxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGZhbHNlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcikge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXJMZWdhY3koY29udGFpbmVyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigndW5tb3VudENvbXBvbmVudEF0Tm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LicpO1xuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NQ2xpZW50LmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gdG8gY2FsbCByb290LnVubW91bnQoKT8nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIpIHtcbiAgICB7XG4gICAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgICB2YXIgcmVuZGVyZWRCeURpZmZlcmVudFJlYWN0ID0gcm9vdEVsICYmICFnZXRJbnN0YW5jZUZyb21Ob2RlKHJvb3RFbCk7XG5cbiAgICAgIGlmIChyZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QpIHtcbiAgICAgICAgZXJyb3IoXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IGFub3RoZXIgY29weSBvZiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFVubW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICBmbHVzaFN5bmMkMShmdW5jdGlvbiAoKSB7XG4gICAgICBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBudWxsLCBjb250YWluZXIsIGZhbHNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIFRoaXMgc2hvdWxkIHByb2JhYmx5IHVzZSBgZGVsZXRlIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyYFxuICAgICAgICBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IG51bGw7XG4gICAgICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICAgICAgfSk7XG4gICAgfSk7IC8vIElmIHlvdSBjYWxsIHVubW91bnRDb21wb25lbnRBdE5vZGUgdHdpY2UgaW4gcXVpY2sgc3VjY2Vzc2lvbiwgeW91J2xsXG4gICAgLy8gZ2V0IGB0cnVlYCB0d2ljZS4gVGhhdCdzIHByb2JhYmx5IGZpbmU/XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB2YXIgX3Jvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuXG4gICAgICB2YXIgaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPSAhIShfcm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUoX3Jvb3RFbCkpOyAvLyBDaGVjayBpZiB0aGUgY29udGFpbmVyIGl0c2VsZiBpcyBhIFJlYWN0IHJvb3Qgbm9kZS5cblxuICAgICAgdmFyIGlzQ29udGFpbmVyUmVhY3RSb290ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgaXNWYWxpZENvbnRhaW5lckxlZ2FjeShjb250YWluZXIucGFyZW50Tm9kZSkgJiYgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdXG4gICAgICAhIWNvbnRhaW5lci5wYXJlbnROb2RlLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgICAgIGlmIChoYXNOb25Sb290UmVhY3RDaGlsZCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgUmVhY3QgYW5kIGlzIG5vdCBhIHRvcC1sZXZlbCBjb250YWluZXIuICVzJywgaXNDb250YWluZXJSZWFjdFJvb3QgPyAnWW91IG1heSBoYXZlIGFjY2lkZW50YWxseSBwYXNzZWQgaW4gYSBSZWFjdCByb290IG5vZGUgaW5zdGVhZCAnICsgJ29mIGl0cyBjb250YWluZXIuJyA6ICdJbnN0ZWFkLCBoYXZlIHRoZSBwYXJlbnQgY29tcG9uZW50IHVwZGF0ZSBpdHMgc3RhdGUgYW5kICcgKyAncmVyZW5kZXIgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoaXMgY29tcG9uZW50LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDcm9zc09yaWdpblN0cmluZyhpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBpbnB1dCA9PT0gJ3VzZS1jcmVkZW50aWFscycgPyBpbnB1dCA6ICcnO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldENyb3NzT3JpZ2luU3RyaW5nQXMoYXMsIGlucHV0KSB7XG4gIGlmIChhcyA9PT0gJ2ZvbnQnKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaW5wdXQgPT09ICd1c2UtY3JlZGVudGlhbHMnID8gaW5wdXQgOiAnJztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbnZhciBEaXNwYXRjaGVyID0gSW50ZXJuYWxzLkRpc3BhdGNoZXI7XG5mdW5jdGlvbiBwcmVmZXRjaEROUyhocmVmKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGhyZWYgIT09ICdzdHJpbmcnIHx8ICFocmVmKSB7XG4gICAgICBlcnJvcignUmVhY3RET00ucHJlZmV0Y2hETlMoKTogRXhwZWN0ZWQgdGhlIGBocmVmYCBhcmd1bWVudCAoZmlyc3QpIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZyBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC4nLCBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpKTtcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50c1sxXTtcblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJiBvcHRpb25zLmhhc093blByb3BlcnR5KCdjcm9zc09yaWdpbicpKSB7XG4gICAgICAgIGVycm9yKCdSZWFjdERPTS5wcmVmZXRjaEROUygpOiBFeHBlY3RlZCBvbmx5IG9uZSBhcmd1bWVudCwgYGhyZWZgLCBidXQgZW5jb3VudGVyZWQgJXMgYXMgYSBzZWNvbmQgYXJndW1lbnQgaW5zdGVhZC4gVGhpcyBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIG9wdGlvbnMgYW5kIGlzIGN1cnJlbnRseSBkaXNhbGxvd2VkLiBJdCBsb29rcyBsaWtlIHRoZSB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gc2V0IGEgY3Jvc3NPcmlnaW4gcHJvcGVydHkgZm9yIHRoaXMgRE5TIGxvb2t1cCBoaW50LiBCcm93c2VycyBkbyBub3QgcGVyZm9ybSBETlMgcXVlcmllcyB1c2luZyBDT1JTIGFuZCBzZXR0aW5nIHRoaXMgYXR0cmlidXRlIG9uIHRoZSByZXNvdXJjZSBoaW50IGhhcyBubyBlZmZlY3QuIFRyeSBjYWxsaW5nIFJlYWN0RE9NLnByZWZldGNoRE5TKCkgd2l0aCBqdXN0IGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwgYGhyZWZgLicsIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKG9wdGlvbnMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdSZWFjdERPTS5wcmVmZXRjaEROUygpOiBFeHBlY3RlZCBvbmx5IG9uZSBhcmd1bWVudCwgYGhyZWZgLCBidXQgZW5jb3VudGVyZWQgJXMgYXMgYSBzZWNvbmQgYXJndW1lbnQgaW5zdGVhZC4gVGhpcyBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIG9wdGlvbnMgYW5kIGlzIGN1cnJlbnRseSBkaXNhbGxvd2VkLiBUcnkgY2FsbGluZyBSZWFjdERPTS5wcmVmZXRjaEROUygpIHdpdGgganVzdCBhIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQsIGBocmVmYC4nLCBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGRpc3BhdGNoZXIgPSBEaXNwYXRjaGVyLmN1cnJlbnQ7XG5cbiAgaWYgKGRpc3BhdGNoZXIgJiYgdHlwZW9mIGhyZWYgPT09ICdzdHJpbmcnKSB7XG4gICAgZGlzcGF0Y2hlci5wcmVmZXRjaEROUyhocmVmKTtcbiAgfSAvLyBXZSBkb24ndCBlcnJvciBiZWNhdXNlIHByZWNvbm5lY3QgbmVlZHMgdG8gYmUgcmVzaWxpZW50IHRvIGJlaW5nIGNhbGxlZCBpbiBhIHZhcmlldHkgb2Ygc2NvcGVzXG4gIC8vIGFuZCB0aGUgcnVudGltZSBtYXkgbm90IGJlIGNhcGFibGUgb2YgcmVzcG9uZGluZy4gVGhlIGZ1bmN0aW9uIGlzIG9wdGltaXN0aWMgYW5kIG5vdCBjcml0aWNhbFxuICAvLyBzbyB3ZSBmYXZvciBzaWxlbnQgYmFpbG91dCBvdmVyIHdhcm5pbmcgb3IgZXJyb3JpbmcuXG5cbn1cbmZ1bmN0aW9uIHByZWNvbm5lY3QoaHJlZiwgb3B0aW9ucykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBocmVmICE9PSAnc3RyaW5nJyB8fCAhaHJlZikge1xuICAgICAgZXJyb3IoJ1JlYWN0RE9NLnByZWNvbm5lY3QoKTogRXhwZWN0ZWQgdGhlIGBocmVmYCBhcmd1bWVudCAoZmlyc3QpIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZyBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC4nLCBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMgIT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9yKCdSZWFjdERPTS5wcmVjb25uZWN0KCk6IEV4cGVjdGVkIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgKHNlY29uZCkgdG8gYmUgYW4gb2JqZWN0IGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLiBUaGUgb25seSBzdXBwb3J0ZWQgb3B0aW9uIGF0IHRoaXMgdGltZSBpcyBgY3Jvc3NPcmlnaW5gIHdoaWNoIGFjY2VwdHMgYSBzdHJpbmcuJywgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucykpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucyAhPSBudWxsICYmIHR5cGVvZiBvcHRpb25zLmNyb3NzT3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3IoJ1JlYWN0RE9NLnByZWNvbm5lY3QoKTogRXhwZWN0ZWQgdGhlIGBjcm9zc09yaWdpbmAgb3B0aW9uIChzZWNvbmQgYXJndW1lbnQpIHRvIGJlIGEgc3RyaW5nIGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLiBUcnkgcmVtb3ZpbmcgdGhpcyBvcHRpb24gb3IgcGFzc2luZyBhIHN0cmluZyB2YWx1ZSBpbnN0ZWFkLicsIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucy5jcm9zc09yaWdpbikpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBkaXNwYXRjaGVyID0gRGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmIChkaXNwYXRjaGVyICYmIHR5cGVvZiBocmVmID09PSAnc3RyaW5nJykge1xuICAgIHZhciBjcm9zc09yaWdpbiA9IG9wdGlvbnMgPyBnZXRDcm9zc09yaWdpblN0cmluZyhvcHRpb25zLmNyb3NzT3JpZ2luKSA6IG51bGw7XG4gICAgZGlzcGF0Y2hlci5wcmVjb25uZWN0KGhyZWYsIGNyb3NzT3JpZ2luKTtcbiAgfSAvLyBXZSBkb24ndCBlcnJvciBiZWNhdXNlIHByZWNvbm5lY3QgbmVlZHMgdG8gYmUgcmVzaWxpZW50IHRvIGJlaW5nIGNhbGxlZCBpbiBhIHZhcmlldHkgb2Ygc2NvcGVzXG4gIC8vIGFuZCB0aGUgcnVudGltZSBtYXkgbm90IGJlIGNhcGFibGUgb2YgcmVzcG9uZGluZy4gVGhlIGZ1bmN0aW9uIGlzIG9wdGltaXN0aWMgYW5kIG5vdCBjcml0aWNhbFxuICAvLyBzbyB3ZSBmYXZvciBzaWxlbnQgYmFpbG91dCBvdmVyIHdhcm5pbmcgb3IgZXJyb3JpbmcuXG5cbn1cbmZ1bmN0aW9uIHByZWxvYWQoaHJlZiwgb3B0aW9ucykge1xuICB7XG4gICAgdmFyIGVuY291bnRlcmVkID0gJyc7XG5cbiAgICBpZiAodHlwZW9mIGhyZWYgIT09ICdzdHJpbmcnIHx8ICFocmVmKSB7XG4gICAgICBlbmNvdW50ZXJlZCArPSBcIiBUaGUgYGhyZWZgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZikgKyBcIi5cIjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucyA9PSBudWxsIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgZW5jb3VudGVyZWQgKz0gXCIgVGhlIGBvcHRpb25zYCBhcmd1bWVudCBlbmNvdW50ZXJlZCB3YXMgXCIgKyBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKG9wdGlvbnMpICsgXCIuXCI7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy5hcyAhPT0gJ3N0cmluZycgfHwgIW9wdGlvbnMuYXMpIHtcbiAgICAgIGVuY291bnRlcmVkICs9IFwiIFRoZSBgYXNgIG9wdGlvbiBlbmNvdW50ZXJlZCB3YXMgXCIgKyBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKG9wdGlvbnMuYXMpICsgXCIuXCI7XG4gICAgfVxuXG4gICAgaWYgKGVuY291bnRlcmVkKSB7XG4gICAgICBlcnJvcignUmVhY3RET00ucHJlbG9hZCgpOiBFeHBlY3RlZCB0d28gYXJndW1lbnRzLCBhIG5vbi1lbXB0eSBgaHJlZmAgc3RyaW5nIGFuZCBhbiBgb3B0aW9uc2Agb2JqZWN0IHdpdGggYW4gYGFzYCBwcm9wZXJ0eSB2YWxpZCBmb3IgYSBgPGxpbmsgcmVsPVwicHJlbG9hZFwiIGFzPVwiLi4uXCIgLz5gIHRhZy4lcycsIGVuY291bnRlcmVkKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZGlzcGF0Y2hlciA9IERpc3BhdGNoZXIuY3VycmVudDtcblxuICBpZiAoZGlzcGF0Y2hlciAmJiB0eXBlb2YgaHJlZiA9PT0gJ3N0cmluZycgJiYgLy8gV2UgY2hlY2sgZXhpc3RlbmNlIGJlY2F1c2Ugd2UgY2Fubm90IGVuZm9yY2UgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBjYWxsZWQgd2l0aCB0aGUgc3RhdGVkIHR5cGVcbiAgdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwgJiYgdHlwZW9mIG9wdGlvbnMuYXMgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIGFzID0gb3B0aW9ucy5hcztcbiAgICB2YXIgY3Jvc3NPcmlnaW4gPSBnZXRDcm9zc09yaWdpblN0cmluZ0FzKGFzLCBvcHRpb25zLmNyb3NzT3JpZ2luKTtcbiAgICBkaXNwYXRjaGVyLnByZWxvYWQoaHJlZiwgYXMsIHtcbiAgICAgIGNyb3NzT3JpZ2luOiBjcm9zc09yaWdpbixcbiAgICAgIGludGVncml0eTogdHlwZW9mIG9wdGlvbnMuaW50ZWdyaXR5ID09PSAnc3RyaW5nJyA/IG9wdGlvbnMuaW50ZWdyaXR5IDogdW5kZWZpbmVkLFxuICAgICAgbm9uY2U6IHR5cGVvZiBvcHRpb25zLm5vbmNlID09PSAnc3RyaW5nJyA/IG9wdGlvbnMubm9uY2UgOiB1bmRlZmluZWQsXG4gICAgICB0eXBlOiB0eXBlb2Ygb3B0aW9ucy50eXBlID09PSAnc3RyaW5nJyA/IG9wdGlvbnMudHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgIGZldGNoUHJpb3JpdHk6IHR5cGVvZiBvcHRpb25zLmZldGNoUHJpb3JpdHkgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5mZXRjaFByaW9yaXR5IDogdW5kZWZpbmVkLFxuICAgICAgcmVmZXJyZXJQb2xpY3k6IHR5cGVvZiBvcHRpb25zLnJlZmVycmVyUG9saWN5ID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucmVmZXJyZXJQb2xpY3kgOiB1bmRlZmluZWQsXG4gICAgICBpbWFnZVNyY1NldDogdHlwZW9mIG9wdGlvbnMuaW1hZ2VTcmNTZXQgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5pbWFnZVNyY1NldCA6IHVuZGVmaW5lZCxcbiAgICAgIGltYWdlU2l6ZXM6IHR5cGVvZiBvcHRpb25zLmltYWdlU2l6ZXMgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5pbWFnZVNpemVzIDogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH0gLy8gV2UgZG9uJ3QgZXJyb3IgYmVjYXVzZSBwcmVsb2FkIG5lZWRzIHRvIGJlIHJlc2lsaWVudCB0byBiZWluZyBjYWxsZWQgaW4gYSB2YXJpZXR5IG9mIHNjb3Blc1xuICAvLyBhbmQgdGhlIHJ1bnRpbWUgbWF5IG5vdCBiZSBjYXBhYmxlIG9mIHJlc3BvbmRpbmcuIFRoZSBmdW5jdGlvbiBpcyBvcHRpbWlzdGljIGFuZCBub3QgY3JpdGljYWxcbiAgLy8gc28gd2UgZmF2b3Igc2lsZW50IGJhaWxvdXQgb3ZlciB3YXJuaW5nIG9yIGVycm9yaW5nLlxuXG59XG5mdW5jdGlvbiBwcmVsb2FkTW9kdWxlKGhyZWYsIG9wdGlvbnMpIHtcbiAge1xuICAgIHZhciBlbmNvdW50ZXJlZCA9ICcnO1xuXG4gICAgaWYgKHR5cGVvZiBocmVmICE9PSAnc3RyaW5nJyB8fCAhaHJlZikge1xuICAgICAgZW5jb3VudGVyZWQgKz0gXCIgVGhlIGBocmVmYCBhcmd1bWVudCBlbmNvdW50ZXJlZCB3YXMgXCIgKyBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpICsgXCIuXCI7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVuY291bnRlcmVkICs9IFwiIFRoZSBgb3B0aW9uc2AgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICsgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zKSArIFwiLlwiO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucyAmJiAnYXMnIGluIG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMuYXMgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvdW50ZXJlZCArPSBcIiBUaGUgYGFzYCBvcHRpb24gZW5jb3VudGVyZWQgd2FzIFwiICsgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zLmFzKSArIFwiLlwiO1xuICAgIH1cblxuICAgIGlmIChlbmNvdW50ZXJlZCkge1xuICAgICAgZXJyb3IoJ1JlYWN0RE9NLnByZWxvYWRNb2R1bGUoKTogRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cywgYSBub24tZW1wdHkgYGhyZWZgIHN0cmluZyBhbmQsIG9wdGlvbmFsbHksIGFuIGBvcHRpb25zYCBvYmplY3Qgd2l0aCBhbiBgYXNgIHByb3BlcnR5IHZhbGlkIGZvciBhIGA8bGluayByZWw9XCJtb2R1bGVwcmVsb2FkXCIgYXM9XCIuLi5cIiAvPmAgdGFnLiVzJywgZW5jb3VudGVyZWQpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBkaXNwYXRjaGVyID0gRGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmIChkaXNwYXRjaGVyICYmIHR5cGVvZiBocmVmID09PSAnc3RyaW5nJykge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB2YXIgY3Jvc3NPcmlnaW4gPSBnZXRDcm9zc09yaWdpblN0cmluZ0FzKG9wdGlvbnMuYXMsIG9wdGlvbnMuY3Jvc3NPcmlnaW4pO1xuICAgICAgZGlzcGF0Y2hlci5wcmVsb2FkTW9kdWxlKGhyZWYsIHtcbiAgICAgICAgYXM6IHR5cGVvZiBvcHRpb25zLmFzID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmFzICE9PSAnc2NyaXB0JyA/IG9wdGlvbnMuYXMgOiB1bmRlZmluZWQsXG4gICAgICAgIGNyb3NzT3JpZ2luOiBjcm9zc09yaWdpbixcbiAgICAgICAgaW50ZWdyaXR5OiB0eXBlb2Ygb3B0aW9ucy5pbnRlZ3JpdHkgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5pbnRlZ3JpdHkgOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXNwYXRjaGVyLnByZWxvYWRNb2R1bGUoaHJlZik7XG4gICAgfVxuICB9IC8vIFdlIGRvbid0IGVycm9yIGJlY2F1c2UgcHJlbG9hZCBuZWVkcyB0byBiZSByZXNpbGllbnQgdG8gYmVpbmcgY2FsbGVkIGluIGEgdmFyaWV0eSBvZiBzY29wZXNcbiAgLy8gYW5kIHRoZSBydW50aW1lIG1heSBub3QgYmUgY2FwYWJsZSBvZiByZXNwb25kaW5nLiBUaGUgZnVuY3Rpb24gaXMgb3B0aW1pc3RpYyBhbmQgbm90IGNyaXRpY2FsXG4gIC8vIHNvIHdlIGZhdm9yIHNpbGVudCBiYWlsb3V0IG92ZXIgd2FybmluZyBvciBlcnJvcmluZy5cblxufVxuZnVuY3Rpb24gcHJlaW5pdChocmVmLCBvcHRpb25zKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGhyZWYgIT09ICdzdHJpbmcnIHx8ICFocmVmKSB7XG4gICAgICBlcnJvcignUmVhY3RET00ucHJlaW5pdCgpOiBFeHBlY3RlZCB0aGUgYGhyZWZgIGFyZ3VtZW50IChmaXJzdCkgdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nIGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLicsIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZikpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucyA9PSBudWxsIHx8IHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgZXJyb3IoJ1JlYWN0RE9NLnByZWluaXQoKTogRXhwZWN0ZWQgdGhlIGBvcHRpb25zYCBhcmd1bWVudCAoc2Vjb25kKSB0byBiZSBhbiBvYmplY3Qgd2l0aCBhbiBgYXNgIHByb3BlcnR5IGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgcmVzb3VyY2UgdG8gYmUgcHJlaW5pdGlhbGl6ZWQgYnV0IGVuY291bnRlcmVkICVzIGluc3RlYWQuJywgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucykpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hcyAhPT0gJ3N0eWxlJyAmJiBvcHRpb25zLmFzICE9PSAnc2NyaXB0Jykge1xuICAgICAgZXJyb3IoJ1JlYWN0RE9NLnByZWluaXQoKTogRXhwZWN0ZWQgdGhlIGBhc2AgcHJvcGVydHkgaW4gdGhlIGBvcHRpb25zYCBhcmd1bWVudCAoc2Vjb25kKSB0byBjb250YWluIGEgdmFsaWQgdmFsdWUgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiByZXNvdXJjZSB0byBiZSBwcmVpbml0aWFsaXplZCBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC4gVmFsaWQgdmFsdWVzIGZvciBgYXNgIGFyZSBcInN0eWxlXCIgYW5kIFwic2NyaXB0XCIuJywgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcob3B0aW9ucy5hcykpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBkaXNwYXRjaGVyID0gRGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmIChkaXNwYXRjaGVyICYmIHR5cGVvZiBocmVmID09PSAnc3RyaW5nJyAmJiBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmFzID09PSAnc3RyaW5nJykge1xuICAgIHZhciBhcyA9IG9wdGlvbnMuYXM7XG4gICAgdmFyIGNyb3NzT3JpZ2luID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhhcywgb3B0aW9ucy5jcm9zc09yaWdpbik7XG4gICAgdmFyIGludGVncml0eSA9IHR5cGVvZiBvcHRpb25zLmludGVncml0eSA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmludGVncml0eSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgZmV0Y2hQcmlvcml0eSA9IHR5cGVvZiBvcHRpb25zLmZldGNoUHJpb3JpdHkgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5mZXRjaFByaW9yaXR5IDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGFzID09PSAnc3R5bGUnKSB7XG4gICAgICBkaXNwYXRjaGVyLnByZWluaXRTdHlsZShocmVmLCB0eXBlb2Ygb3B0aW9ucy5wcmVjZWRlbmNlID09PSAnc3RyaW5nJyA/IG9wdGlvbnMucHJlY2VkZW5jZSA6IHVuZGVmaW5lZCwge1xuICAgICAgICBjcm9zc09yaWdpbjogY3Jvc3NPcmlnaW4sXG4gICAgICAgIGludGVncml0eTogaW50ZWdyaXR5LFxuICAgICAgICBmZXRjaFByaW9yaXR5OiBmZXRjaFByaW9yaXR5XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGFzID09PSAnc2NyaXB0Jykge1xuICAgICAgZGlzcGF0Y2hlci5wcmVpbml0U2NyaXB0KGhyZWYsIHtcbiAgICAgICAgY3Jvc3NPcmlnaW46IGNyb3NzT3JpZ2luLFxuICAgICAgICBpbnRlZ3JpdHk6IGludGVncml0eSxcbiAgICAgICAgZmV0Y2hQcmlvcml0eTogZmV0Y2hQcmlvcml0eSxcbiAgICAgICAgbm9uY2U6IHR5cGVvZiBvcHRpb25zLm5vbmNlID09PSAnc3RyaW5nJyA/IG9wdGlvbnMubm9uY2UgOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfSAvLyBXZSBkb24ndCBlcnJvciBiZWNhdXNlIHByZWluaXQgbmVlZHMgdG8gYmUgcmVzaWxpZW50IHRvIGJlaW5nIGNhbGxlZCBpbiBhIHZhcmlldHkgb2Ygc2NvcGVzXG4gIC8vIGFuZCB0aGUgcnVudGltZSBtYXkgbm90IGJlIGNhcGFibGUgb2YgcmVzcG9uZGluZy4gVGhlIGZ1bmN0aW9uIGlzIG9wdGltaXN0aWMgYW5kIG5vdCBjcml0aWNhbFxuICAvLyBzbyB3ZSBmYXZvciBzaWxlbnQgYmFpbG91dCBvdmVyIHdhcm5pbmcgb3IgZXJyb3JpbmcuXG5cbn1cbmZ1bmN0aW9uIHByZWluaXRNb2R1bGUoaHJlZiwgb3B0aW9ucykge1xuICB7XG4gICAgdmFyIGVuY291bnRlcmVkID0gJyc7XG5cbiAgICBpZiAodHlwZW9mIGhyZWYgIT09ICdzdHJpbmcnIHx8ICFocmVmKSB7XG4gICAgICBlbmNvdW50ZXJlZCArPSBcIiBUaGUgYGhyZWZgIGFyZ3VtZW50IGVuY291bnRlcmVkIHdhcyBcIiArIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZikgKyBcIi5cIjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgICAgZW5jb3VudGVyZWQgKz0gXCIgVGhlIGBvcHRpb25zYCBhcmd1bWVudCBlbmNvdW50ZXJlZCB3YXMgXCIgKyBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKG9wdGlvbnMpICsgXCIuXCI7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zICYmICdhcycgaW4gb3B0aW9ucyAmJiBvcHRpb25zLmFzICE9PSAnc2NyaXB0Jykge1xuICAgICAgZW5jb3VudGVyZWQgKz0gXCIgVGhlIGBhc2Agb3B0aW9uIGVuY291bnRlcmVkIHdhcyBcIiArIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKG9wdGlvbnMuYXMpICsgXCIuXCI7XG4gICAgfVxuXG4gICAgaWYgKGVuY291bnRlcmVkKSB7XG4gICAgICBlcnJvcignUmVhY3RET00ucHJlaW5pdE1vZHVsZSgpOiBFeHBlY3RlZCB1cCB0byB0d28gYXJndW1lbnRzLCBhIG5vbi1lbXB0eSBgaHJlZmAgc3RyaW5nIGFuZCwgb3B0aW9uYWxseSwgYW4gYG9wdGlvbnNgIG9iamVjdCB3aXRoIGEgdmFsaWQgYGFzYCBwcm9wZXJ0eS4lcycsIGVuY291bnRlcmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFzID0gb3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5hcyA9PT0gJ3N0cmluZycgPyBvcHRpb25zLmFzIDogJ3NjcmlwdCc7XG5cbiAgICAgIHN3aXRjaCAoYXMpIHtcbiAgICAgICAgY2FzZSAnc2NyaXB0JzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIC8vIFdlIGhhdmUgYW4gaW52YWxpZCBhcyB0eXBlIGFuZCBuZWVkIHRvIHdhcm5cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciB0eXBlT2ZBcyA9IGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKGFzKTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0RE9NLnByZWluaXRNb2R1bGUoKTogQ3VycmVudGx5IHRoZSBvbmx5IHN1cHBvcnRlZCBcImFzXCIgdHlwZSBmb3IgdGhpcyBmdW5jdGlvbiBpcyBcInNjcmlwdFwiJyArICcgYnV0IHJlY2VpdmVkIFwiJXNcIiBpbnN0ZWFkLiBUaGlzIHdhcm5pbmcgd2FzIGdlbmVyYXRlZCBmb3IgYGhyZWZgIFwiJXNcIi4gSW4gdGhlIGZ1dHVyZSBvdGhlcicgKyAnIG1vZHVsZSB0eXBlcyB3aWxsIGJlIHN1cHBvcnRlZCwgYWxpZ25pbmcgd2l0aCB0aGUgaW1wb3J0LWF0dHJpYnV0ZXMgcHJvcG9zYWwuIExlYXJuIG1vcmUgaGVyZTonICsgJyAoaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaW1wb3J0LWF0dHJpYnV0ZXMpJywgdHlwZU9mQXMsIGhyZWYpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZGlzcGF0Y2hlciA9IERpc3BhdGNoZXIuY3VycmVudDtcblxuICBpZiAoZGlzcGF0Y2hlciAmJiB0eXBlb2YgaHJlZiA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLmFzID09IG51bGwgfHwgb3B0aW9ucy5hcyA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgICAgdmFyIGNyb3NzT3JpZ2luID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhvcHRpb25zLmFzLCBvcHRpb25zLmNyb3NzT3JpZ2luKTtcbiAgICAgICAgZGlzcGF0Y2hlci5wcmVpbml0TW9kdWxlU2NyaXB0KGhyZWYsIHtcbiAgICAgICAgICBjcm9zc09yaWdpbjogY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgaW50ZWdyaXR5OiB0eXBlb2Ygb3B0aW9ucy5pbnRlZ3JpdHkgPT09ICdzdHJpbmcnID8gb3B0aW9ucy5pbnRlZ3JpdHkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbm9uY2U6IHR5cGVvZiBvcHRpb25zLm5vbmNlID09PSAnc3RyaW5nJyA/IG9wdGlvbnMubm9uY2UgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICAgIGRpc3BhdGNoZXIucHJlaW5pdE1vZHVsZVNjcmlwdChocmVmKTtcbiAgICB9XG4gIH0gLy8gV2UgZG9uJ3QgZXJyb3IgYmVjYXVzZSBwcmVpbml0IG5lZWRzIHRvIGJlIHJlc2lsaWVudCB0byBiZWluZyBjYWxsZWQgaW4gYSB2YXJpZXR5IG9mIHNjb3Blc1xuICAvLyBhbmQgdGhlIHJ1bnRpbWUgbWF5IG5vdCBiZSBjYXBhYmxlIG9mIHJlc3BvbmRpbmcuIFRoZSBmdW5jdGlvbiBpcyBvcHRpbWlzdGljIGFuZCBub3QgY3JpdGljYWxcbiAgLy8gc28gd2UgZmF2b3Igc2lsZW50IGJhaWxvdXQgb3ZlciB3YXJuaW5nIG9yIGVycm9yaW5nLlxuXG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcodGhpbmcpIHtcbiAgcmV0dXJuIHRoaW5nID09PSBudWxsID8gJ2BudWxsYCcgOiB0aGluZyA9PT0gdW5kZWZpbmVkID8gJ2B1bmRlZmluZWRgJyA6IHRoaW5nID09PSAnJyA/ICdhbiBlbXB0eSBzdHJpbmcnIDogXCJzb21ldGhpbmcgd2l0aCB0eXBlIFxcXCJcIiArIHR5cGVvZiB0aGluZyArIFwiXFxcIlwiO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyh0aGluZykge1xuICByZXR1cm4gdGhpbmcgPT09IG51bGwgPyAnYG51bGxgJyA6IHRoaW5nID09PSB1bmRlZmluZWQgPyAnYHVuZGVmaW5lZGAnIDogdGhpbmcgPT09ICcnID8gJ2FuIGVtcHR5IHN0cmluZycgOiB0eXBlb2YgdGhpbmcgPT09ICdzdHJpbmcnID8gSlNPTi5zdHJpbmdpZnkodGhpbmcpIDogdHlwZW9mIHRoaW5nID09PSAnbnVtYmVyJyA/ICdgJyArIHRoaW5nICsgJ2AnIDogXCJzb21ldGhpbmcgd2l0aCB0eXBlIFxcXCJcIiArIHR5cGVvZiB0aGluZyArIFwiXFxcIlwiO1xufVxuXG57XG4gIGlmICh0eXBlb2YgTWFwICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBNYXAgaGFzIG5vIHByb3RvdHlwZVxuICBNYXAucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIE1hcC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0ICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBTZXQgaGFzIG5vIHByb3RvdHlwZVxuICBTZXQucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuY2xlYXIgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGVycm9yKCdSZWFjdCBkZXBlbmRzIG9uIE1hcCBhbmQgU2V0IGJ1aWx0LWluIHR5cGVzLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LicpO1xuICB9IC8vIFRPRE86IHBhc3MgUmVhY3RET00gcG9ydGFsIGltcGxlbWVudGF0aW9uIGFzIHRoaXJkIGFyZ3VtZW50XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gVGhlIEZsb3cgdHlwZSBpcyBvcGFxdWUgYnV0IHRoZXJlJ3Mgbm8gd2F5IHRvIGFjdHVhbGx5IGNyZWF0ZSBpdC5cblxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyLCBudWxsLCBrZXkpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKSB7XG4gIHJldHVybiB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUm9vdChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAge1xuICAgIGlmICghSW50ZXJuYWxzLnVzaW5nQ2xpZW50RW50cnlQb2ludCAmJiAhZmFsc2UpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGltcG9ydGluZyBjcmVhdGVSb290IGZyb20gXCJyZWFjdC1kb21cIiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1lvdSBzaG91bGQgaW5zdGVhZCBpbXBvcnQgaXQgZnJvbSBcInJlYWN0LWRvbS9jbGllbnRcIi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUm9vdCQxKGNvbnRhaW5lciwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVSb290KGNvbnRhaW5lciwgaW5pdGlhbENoaWxkcmVuLCBvcHRpb25zKSB7XG4gIHtcbiAgICBpZiAoIUludGVybmFscy51c2luZ0NsaWVudEVudHJ5UG9pbnQgJiYgIWZhbHNlKSB7XG4gICAgICBlcnJvcignWW91IGFyZSBpbXBvcnRpbmcgaHlkcmF0ZVJvb3QgZnJvbSBcInJlYWN0LWRvbVwiIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnWW91IHNob3VsZCBpbnN0ZWFkIGltcG9ydCBpdCBmcm9tIFwicmVhY3QtZG9tL2NsaWVudFwiLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoeWRyYXRlUm9vdCQxKGNvbnRhaW5lciwgaW5pdGlhbENoaWxkcmVuLCBvcHRpb25zKTtcbn0gLy8gT3ZlcmxvYWQgdGhlIGRlZmluaXRpb24gdG8gdGhlIHR3byB2YWxpZCBzaWduYXR1cmVzLlxuLy8gV2FybmluZywgdGhpcyBvcHRzLW91dCBvZiBjaGVja2luZyB0aGUgZnVuY3Rpb24gYm9keS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblxuXG5mdW5jdGlvbiBmbHVzaFN5bmMoZm4pIHtcbiAge1xuICAgIGlmIChpc0FscmVhZHlSZW5kZXJpbmcoKSkge1xuICAgICAgZXJyb3IoJ2ZsdXNoU3luYyB3YXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgbGlmZWN5Y2xlIG1ldGhvZC4gUmVhY3QgY2Fubm90ICcgKyAnZmx1c2ggd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy4gQ29uc2lkZXIgbW92aW5nIHRoaXMgY2FsbCB0byAnICsgJ2Egc2NoZWR1bGVyIHRhc2sgb3IgbWljcm8gdGFzay4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmx1c2hTeW5jJDEoZm4pO1xufVxuLy8gVGhpcyBpcyBhbiBhcnJheSBmb3IgYmV0dGVyIG1pbmlmaWNhdGlvbi5cblxuSW50ZXJuYWxzLkV2ZW50cyA9IFtnZXRJbnN0YW5jZUZyb21Ob2RlLCBnZXROb2RlRnJvbUluc3RhbmNlLCBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlLCBlbnF1ZXVlU3RhdGVSZXN0b3JlLCByZXN0b3JlU3RhdGVJZk5lZWRlZCwgYmF0Y2hlZFVwZGF0ZXMkMV07XG52YXIgZm91bmREZXZUb29scyA9IGluamVjdEludG9EZXZUb29scyh7XG4gIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgYnVuZGxlVHlwZTogMSAsXG4gIHZlcnNpb246IFJlYWN0VmVyc2lvbixcbiAgcmVuZGVyZXJQYWNrYWdlTmFtZTogJ3JlYWN0LWRvbSdcbn0pO1xuXG57XG4gIGlmICghZm91bmREZXZUb29scyAmJiBjYW5Vc2VET00gJiYgd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYpIHtcbiAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUgb3IgRmlyZWZveCwgcHJvdmlkZSBhIGRvd25sb2FkIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA+IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWRnZScpID09PSAtMSB8fCBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0ZpcmVmb3gnKSA+IC0xKSB7XG4gICAgICB2YXIgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7IC8vIERvbid0IHdhcm4gaW4gZXhvdGljIGNhc2VzIGxpa2UgY2hyb21lLWV4dGVuc2lvbjovLy5cblxuICAgICAgaWYgKC9eKGh0dHBzP3xmaWxlKTokLy50ZXN0KHByb3RvY29sKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG4gICAgICAgIGNvbnNvbGUuaW5mbygnJWNEb3dubG9hZCB0aGUgUmVhY3QgRGV2VG9vbHMgJyArICdmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMnICsgKHByb3RvY29sID09PSAnZmlsZTonID8gJ1xcbllvdSBtaWdodCBuZWVkIHRvIHVzZSBhIGxvY2FsIEhUVFAgc2VydmVyIChpbnN0ZWFkIG9mIGZpbGU6Ly8pOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scy1mYXEnIDogJycpLCAnZm9udC13ZWlnaHQ6Ym9sZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gSW50ZXJuYWxzO1xuZXhwb3J0cy5jcmVhdGVQb3J0YWwgPSBjcmVhdGVQb3J0YWw7XG5leHBvcnRzLmNyZWF0ZVJvb3QgPSBjcmVhdGVSb290O1xuZXhwb3J0cy5maW5kRE9NTm9kZSA9IGZpbmRET01Ob2RlO1xuZXhwb3J0cy5mbHVzaFN5bmMgPSBmbHVzaFN5bmM7XG5leHBvcnRzLmh5ZHJhdGUgPSBoeWRyYXRlO1xuZXhwb3J0cy5oeWRyYXRlUm9vdCA9IGh5ZHJhdGVSb290O1xuZXhwb3J0cy5wcmVjb25uZWN0ID0gcHJlY29ubmVjdDtcbmV4cG9ydHMucHJlZmV0Y2hETlMgPSBwcmVmZXRjaEROUztcbmV4cG9ydHMucHJlaW5pdCA9IHByZWluaXQ7XG5leHBvcnRzLnByZWluaXRNb2R1bGUgPSBwcmVpbml0TW9kdWxlO1xuZXhwb3J0cy5wcmVsb2FkID0gcHJlbG9hZDtcbmV4cG9ydHMucHJlbG9hZE1vZHVsZSA9IHByZWxvYWRNb2R1bGU7XG5leHBvcnRzLnJlbmRlciA9IHJlbmRlcjtcbmV4cG9ydHMudW5tb3VudENvbXBvbmVudEF0Tm9kZSA9IHVubW91bnRDb21wb25lbnRBdE5vZGU7XG5leHBvcnRzLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzID0gYmF0Y2hlZFVwZGF0ZXMkMTtcbmV4cG9ydHMudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIgPSByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjtcbmV4cG9ydHMudXNlRm9ybVN0YXRlID0gdXNlRm9ybVN0YXRlO1xuZXhwb3J0cy51c2VGb3JtU3RhdHVzID0gdXNlRm9ybVN0YXR1cztcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgICAgICAgICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgPT09XG4gICAgJ2Z1bmN0aW9uJ1xuKSB7XG4gIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChuZXcgRXJyb3IoKSk7XG59XG4gICAgICAgIFxuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/client.js": +/*!*************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-dom/client.js ***! + \*************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nvar m = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\");\nif (false) {} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function (c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function (c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2NsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixRQUFRLG1CQUFPLENBQUMsMkZBQVc7QUFDM0IsSUFBSSxLQUFxQyxFQUFFLEVBRzFDLENBQUM7QUFDRjtBQUNBLEVBQUUsa0JBQWtCO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFtQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2xpZW50LmpzPzM5YjkiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbSA9IHJlcXVpcmUoJ3JlYWN0LWRvbScpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgZXhwb3J0cy5jcmVhdGVSb290ID0gbS5jcmVhdGVSb290O1xuICBleHBvcnRzLmh5ZHJhdGVSb290ID0gbS5oeWRyYXRlUm9vdDtcbn0gZWxzZSB7XG4gIHZhciBpID0gbS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcbiAgZXhwb3J0cy5jcmVhdGVSb290ID0gZnVuY3Rpb24gKGMsIG8pIHtcbiAgICBpLnVzaW5nQ2xpZW50RW50cnlQb2ludCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBtLmNyZWF0ZVJvb3QoYywgbyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGkudXNpbmdDbGllbnRFbnRyeVBvaW50ID0gZmFsc2U7XG4gICAgfVxuICB9O1xuICBleHBvcnRzLmh5ZHJhdGVSb290ID0gZnVuY3Rpb24gKGMsIGgsIG8pIHtcbiAgICBpLnVzaW5nQ2xpZW50RW50cnlQb2ludCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBtLmh5ZHJhdGVSb290KGMsIGgsIG8pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpLnVzaW5nQ2xpZW50RW50cnlQb2ludCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/client.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js": +/*!************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-dom/index.js ***! + \************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (true) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksS0FBcUMsRUFBRSxFQUsxQyxDQUFDO0FBQ0YsRUFBRSwwS0FBMEQ7QUFDNUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1kb20vaW5kZXguanM/NmExZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js": +/*!*****************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js ***! + \*****************************************************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * react-server-dom-webpack-client.browser.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar ReactDOM = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\");\nvar React = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n\n// -----------------------------------------------------------------------------\nvar enableBinaryFlight = false;\n\nfunction createStringDecoder() {\n return new TextDecoder();\n}\nvar decoderOptions = {\n stream: true\n};\nfunction readPartialStringChunk(decoder, buffer) {\n return decoder.decode(buffer, decoderOptions);\n}\nfunction readFinalStringChunk(decoder, buffer) {\n return decoder.decode(buffer);\n}\n\n// This is the parsed shape of the wire format which is why it is\n// condensed to only the essentialy information\nvar ID = 0;\nvar CHUNKS = 1;\nvar NAME = 2; // export const ASYNC = 3;\n// This logic is correct because currently only include the 4th tuple member\n// when the module is async. If that changes we will need to actually assert\n// the value is true. We don't index into the 4th slot because flow does not\n// like the potential out of bounds access\n\nfunction isAsyncImport(metadata) {\n return metadata.length === 4;\n}\n\nfunction resolveClientReference(bundlerConfig, metadata) {\n if (bundlerConfig) {\n var moduleExports = bundlerConfig[metadata[ID]];\n var resolvedModuleData = moduleExports[metadata[NAME]];\n var name;\n\n if (resolvedModuleData) {\n // The potentially aliased name.\n name = resolvedModuleData.name;\n } else {\n // If we don't have this specific name, we might have the full module.\n resolvedModuleData = moduleExports['*'];\n\n if (!resolvedModuleData) {\n throw new Error('Could not find the module \"' + metadata[ID] + '\" in the React SSR Manifest. ' + 'This is probably a bug in the React Server Components bundler.');\n }\n\n name = metadata[NAME];\n }\n\n if (isAsyncImport(metadata)) {\n return [resolvedModuleData.id, resolvedModuleData.chunks, name, 1\n /* async */\n ];\n } else {\n return [resolvedModuleData.id, resolvedModuleData.chunks, name];\n }\n }\n\n return metadata;\n}\n// If they're still pending they're a thenable. This map also exists\n// in Webpack but unfortunately it's not exposed so we have to\n// replicate it in user space. null means that it has already loaded.\n\nvar chunkCache = new Map();\n\nfunction requireAsyncModule(id) {\n // We've already loaded all the chunks. We can require the module.\n var promise = __webpack_require__(id);\n\n if (typeof promise.then !== 'function') {\n // This wasn't a promise after all.\n return null;\n } else if (promise.status === 'fulfilled') {\n // This module was already resolved earlier.\n return null;\n } else {\n // Instrument the Promise to stash the result.\n promise.then(function (value) {\n var fulfilledThenable = promise;\n fulfilledThenable.status = 'fulfilled';\n fulfilledThenable.value = value;\n }, function (reason) {\n var rejectedThenable = promise;\n rejectedThenable.status = 'rejected';\n rejectedThenable.reason = reason;\n });\n return promise;\n }\n}\n\nfunction ignoreReject() {// We rely on rejected promises to be handled by another listener.\n} // Start preloading the modules since we might need them soon.\n// This function doesn't suspend.\n\n\nfunction preloadModule(metadata) {\n var chunks = metadata[CHUNKS];\n var promises = [];\n var i = 0;\n\n while (i < chunks.length) {\n var chunkId = chunks[i++];\n var chunkFilename = chunks[i++];\n var entry = chunkCache.get(chunkId);\n\n if (entry === undefined) {\n var thenable = loadChunk(chunkId, chunkFilename);\n promises.push(thenable); // $FlowFixMe[method-unbinding]\n\n var resolve = chunkCache.set.bind(chunkCache, chunkId, null);\n thenable.then(resolve, ignoreReject);\n chunkCache.set(chunkId, thenable);\n } else if (entry !== null) {\n promises.push(entry);\n }\n }\n\n if (isAsyncImport(metadata)) {\n if (promises.length === 0) {\n return requireAsyncModule(metadata[ID]);\n } else {\n return Promise.all(promises).then(function () {\n return requireAsyncModule(metadata[ID]);\n });\n }\n } else if (promises.length > 0) {\n return Promise.all(promises);\n } else {\n return null;\n }\n} // Actually require the module or suspend if it's not yet ready.\n// Increase priority if necessary.\n\nfunction requireModule(metadata) {\n var moduleExports = __webpack_require__(metadata[ID]);\n\n if (isAsyncImport(metadata)) {\n if (typeof moduleExports.then !== 'function') ; else if (moduleExports.status === 'fulfilled') {\n // This Promise should've been instrumented by preloadModule.\n moduleExports = moduleExports.value;\n } else {\n throw moduleExports.reason;\n }\n }\n\n if (metadata[NAME] === '*') {\n // This is a placeholder value that represents that the caller imported this\n // as a CommonJS module as is.\n return moduleExports;\n }\n\n if (metadata[NAME] === '') {\n // This is a placeholder value that represents that the caller accessed the\n // default property of this if it was an ESM interop module.\n return moduleExports.__esModule ? moduleExports.default : moduleExports;\n }\n\n return moduleExports[metadata[NAME]];\n}\n\nvar chunkMap = new Map();\n/**\n * We patch the chunk filename function in webpack to insert our own resolution\n * of chunks that come from Flight and may not be known to the webpack runtime\n */\n\nvar webpackGetChunkFilename = __webpack_require__.u;\n\n__webpack_require__.u = function (chunkId) {\n var flightChunk = chunkMap.get(chunkId);\n\n if (flightChunk !== undefined) {\n return flightChunk;\n }\n\n return webpackGetChunkFilename(chunkId);\n};\n\nfunction loadChunk(chunkId, filename) {\n chunkMap.set(chunkId, filename);\n return __webpack_require__.e(chunkId);\n}\n\nvar ReactDOMSharedInternals = ReactDOM.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\n// This client file is in the shared folder because it applies to both SSR and browser contexts.\nvar ReactDOMCurrentDispatcher = ReactDOMSharedInternals.Dispatcher;\nfunction dispatchHint(code, model) {\n var dispatcher = ReactDOMCurrentDispatcher.current;\n\n if (dispatcher) {\n switch (code) {\n case 'D':\n {\n var refined = refineModel(code, model);\n var href = refined;\n dispatcher.prefetchDNS(href);\n return;\n }\n\n case 'C':\n {\n var _refined = refineModel(code, model);\n\n if (typeof _refined === 'string') {\n var _href = _refined;\n dispatcher.preconnect(_href);\n } else {\n var _href2 = _refined[0];\n var crossOrigin = _refined[1];\n dispatcher.preconnect(_href2, crossOrigin);\n }\n\n return;\n }\n\n case 'L':\n {\n var _refined2 = refineModel(code, model);\n\n var _href3 = _refined2[0];\n var as = _refined2[1];\n\n if (_refined2.length === 3) {\n var options = _refined2[2];\n dispatcher.preload(_href3, as, options);\n } else {\n dispatcher.preload(_href3, as);\n }\n\n return;\n }\n\n case 'm':\n {\n var _refined3 = refineModel(code, model);\n\n if (typeof _refined3 === 'string') {\n var _href4 = _refined3;\n dispatcher.preloadModule(_href4);\n } else {\n var _href5 = _refined3[0];\n var _options = _refined3[1];\n dispatcher.preloadModule(_href5, _options);\n }\n\n return;\n }\n\n case 'S':\n {\n var _refined4 = refineModel(code, model);\n\n if (typeof _refined4 === 'string') {\n var _href6 = _refined4;\n dispatcher.preinitStyle(_href6);\n } else {\n var _href7 = _refined4[0];\n var precedence = _refined4[1] === 0 ? undefined : _refined4[1];\n\n var _options2 = _refined4.length === 3 ? _refined4[2] : undefined;\n\n dispatcher.preinitStyle(_href7, precedence, _options2);\n }\n\n return;\n }\n\n case 'X':\n {\n var _refined5 = refineModel(code, model);\n\n if (typeof _refined5 === 'string') {\n var _href8 = _refined5;\n dispatcher.preinitScript(_href8);\n } else {\n var _href9 = _refined5[0];\n var _options3 = _refined5[1];\n dispatcher.preinitScript(_href9, _options3);\n }\n\n return;\n }\n\n case 'M':\n {\n var _refined6 = refineModel(code, model);\n\n if (typeof _refined6 === 'string') {\n var _href10 = _refined6;\n dispatcher.preinitModuleScript(_href10);\n } else {\n var _href11 = _refined6[0];\n var _options4 = _refined6[1];\n dispatcher.preinitModuleScript(_href11, _options4);\n }\n\n return;\n }\n }\n }\n} // Flow is having trouble refining the HintModels so we help it a bit.\n// This should be compiled out in the production build.\n\nfunction refineModel(code, model) {\n return model;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_SERVER_CONTEXT_DEFAULT_VALUE_NOT_LOADED = Symbol.for('react.default_value');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\nvar getPrototypeOf = Object.getPrototypeOf;\n\n// in case they error.\n\nvar jsxPropsParents = new WeakMap();\nvar jsxChildrenParents = new WeakMap();\n\nfunction isObjectPrototype(object) {\n if (!object) {\n return false;\n }\n\n var ObjectPrototype = Object.prototype;\n\n if (object === ObjectPrototype) {\n return true;\n } // It might be an object from a different Realm which is\n // still just a plain simple object.\n\n\n if (getPrototypeOf(object)) {\n return false;\n }\n\n var names = Object.getOwnPropertyNames(object);\n\n for (var i = 0; i < names.length; i++) {\n if (!(names[i] in ObjectPrototype)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isSimpleObject(object) {\n if (!isObjectPrototype(getPrototypeOf(object))) {\n return false;\n }\n\n var names = Object.getOwnPropertyNames(object);\n\n for (var i = 0; i < names.length; i++) {\n var descriptor = Object.getOwnPropertyDescriptor(object, names[i]);\n\n if (!descriptor) {\n return false;\n }\n\n if (!descriptor.enumerable) {\n if ((names[i] === 'key' || names[i] === 'ref') && typeof descriptor.get === 'function') {\n // React adds key and ref getters to props objects to issue warnings.\n // Those getters will not be transferred to the client, but that's ok,\n // so we'll special case them.\n continue;\n }\n\n return false;\n }\n }\n\n return true;\n}\nfunction objectName(object) {\n // $FlowFixMe[method-unbinding]\n var name = Object.prototype.toString.call(object);\n return name.replace(/^\\[object (.*)\\]$/, function (m, p0) {\n return p0;\n });\n}\n\nfunction describeKeyForErrorMessage(key) {\n var encodedKey = JSON.stringify(key);\n return '\"' + key + '\"' === encodedKey ? key : encodedKey;\n}\n\nfunction describeValueForErrorMessage(value) {\n switch (typeof value) {\n case 'string':\n {\n return JSON.stringify(value.length <= 10 ? value : value.slice(0, 10) + '...');\n }\n\n case 'object':\n {\n if (isArray(value)) {\n return '[...]';\n }\n\n var name = objectName(value);\n\n if (name === 'Object') {\n return '{...}';\n }\n\n return name;\n }\n\n case 'function':\n return 'function';\n\n default:\n // eslint-disable-next-line react-internal/safe-string-coercion\n return String(value);\n }\n}\n\nfunction describeElementType(type) {\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeElementType(type.render);\n\n case REACT_MEMO_TYPE:\n return describeElementType(type.type);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeElementType(init(payload));\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nfunction describeObjectForErrorMessage(objectOrArray, expandedName) {\n var objKind = objectName(objectOrArray);\n\n if (objKind !== 'Object' && objKind !== 'Array') {\n return objKind;\n }\n\n var str = '';\n var start = -1;\n var length = 0;\n\n if (isArray(objectOrArray)) {\n if (jsxChildrenParents.has(objectOrArray)) {\n // Print JSX Children\n var type = jsxChildrenParents.get(objectOrArray);\n str = '<' + describeElementType(type) + '>';\n var array = objectOrArray;\n\n for (var i = 0; i < array.length; i++) {\n var value = array[i];\n var substr = void 0;\n\n if (typeof value === 'string') {\n substr = value;\n } else if (typeof value === 'object' && value !== null) {\n substr = '{' + describeObjectForErrorMessage(value) + '}';\n } else {\n substr = '{' + describeValueForErrorMessage(value) + '}';\n }\n\n if ('' + i === expandedName) {\n start = str.length;\n length = substr.length;\n str += substr;\n } else if (substr.length < 15 && str.length + substr.length < 40) {\n str += substr;\n } else {\n str += '{...}';\n }\n }\n\n str += '</' + describeElementType(type) + '>';\n } else {\n // Print Array\n str = '[';\n var _array = objectOrArray;\n\n for (var _i = 0; _i < _array.length; _i++) {\n if (_i > 0) {\n str += ', ';\n }\n\n var _value = _array[_i];\n\n var _substr = void 0;\n\n if (typeof _value === 'object' && _value !== null) {\n _substr = describeObjectForErrorMessage(_value);\n } else {\n _substr = describeValueForErrorMessage(_value);\n }\n\n if ('' + _i === expandedName) {\n start = str.length;\n length = _substr.length;\n str += _substr;\n } else if (_substr.length < 10 && str.length + _substr.length < 40) {\n str += _substr;\n } else {\n str += '...';\n }\n }\n\n str += ']';\n }\n } else {\n if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE) {\n str = '<' + describeElementType(objectOrArray.type) + '/>';\n } else if (jsxPropsParents.has(objectOrArray)) {\n // Print JSX\n var _type = jsxPropsParents.get(objectOrArray);\n\n str = '<' + (describeElementType(_type) || '...');\n var object = objectOrArray;\n var names = Object.keys(object);\n\n for (var _i2 = 0; _i2 < names.length; _i2++) {\n str += ' ';\n var name = names[_i2];\n str += describeKeyForErrorMessage(name) + '=';\n var _value2 = object[name];\n\n var _substr2 = void 0;\n\n if (name === expandedName && typeof _value2 === 'object' && _value2 !== null) {\n _substr2 = describeObjectForErrorMessage(_value2);\n } else {\n _substr2 = describeValueForErrorMessage(_value2);\n }\n\n if (typeof _value2 !== 'string') {\n _substr2 = '{' + _substr2 + '}';\n }\n\n if (name === expandedName) {\n start = str.length;\n length = _substr2.length;\n str += _substr2;\n } else if (_substr2.length < 10 && str.length + _substr2.length < 40) {\n str += _substr2;\n } else {\n str += '...';\n }\n }\n\n str += '>';\n } else {\n // Print Object\n str = '{';\n var _object = objectOrArray;\n\n var _names = Object.keys(_object);\n\n for (var _i3 = 0; _i3 < _names.length; _i3++) {\n if (_i3 > 0) {\n str += ', ';\n }\n\n var _name = _names[_i3];\n str += describeKeyForErrorMessage(_name) + ': ';\n var _value3 = _object[_name];\n\n var _substr3 = void 0;\n\n if (typeof _value3 === 'object' && _value3 !== null) {\n _substr3 = describeObjectForErrorMessage(_value3);\n } else {\n _substr3 = describeValueForErrorMessage(_value3);\n }\n\n if (_name === expandedName) {\n start = str.length;\n length = _substr3.length;\n str += _substr3;\n } else if (_substr3.length < 10 && str.length + _substr3.length < 40) {\n str += _substr3;\n } else {\n str += '...';\n }\n }\n\n str += '}';\n }\n }\n\n if (expandedName === undefined) {\n return str;\n }\n\n if (start > -1 && length > 0) {\n var highlight = ' '.repeat(start) + '^'.repeat(length);\n return '\\n ' + str + '\\n ' + highlight;\n }\n\n return '\\n ' + str;\n}\n\nvar ObjectPrototype = Object.prototype;\nvar knownServerReferences = new WeakMap(); // Serializable values\n// Thenable<ReactServerValue>\n// function serializeByValueID(id: number): string {\n// return '$' + id.toString(16);\n// }\n\nfunction serializePromiseID(id) {\n return '$@' + id.toString(16);\n}\n\nfunction serializeServerReferenceID(id) {\n return '$F' + id.toString(16);\n}\n\nfunction serializeSymbolReference(name) {\n return '$S' + name;\n}\n\nfunction serializeFormDataReference(id) {\n // Why K? F is \"Function\". D is \"Date\". What else?\n return '$K' + id.toString(16);\n}\n\nfunction serializeNumber(number) {\n if (Number.isFinite(number)) {\n if (number === 0 && 1 / number === -Infinity) {\n return '$-0';\n } else {\n return number;\n }\n } else {\n if (number === Infinity) {\n return '$Infinity';\n } else if (number === -Infinity) {\n return '$-Infinity';\n } else {\n return '$NaN';\n }\n }\n}\n\nfunction serializeUndefined() {\n return '$undefined';\n}\n\nfunction serializeDateFromDateJSON(dateJSON) {\n // JSON.stringify automatically calls Date.prototype.toJSON which calls toISOString.\n // We need only tack on a $D prefix.\n return '$D' + dateJSON;\n}\n\nfunction serializeBigInt(n) {\n return '$n' + n.toString(10);\n}\n\nfunction serializeMapID(id) {\n return '$Q' + id.toString(16);\n}\n\nfunction serializeSetID(id) {\n return '$W' + id.toString(16);\n}\n\nfunction escapeStringValue(value) {\n if (value[0] === '$') {\n // We need to escape $ prefixed strings since we use those to encode\n // references to IDs and as special symbol values.\n return '$' + value;\n } else {\n return value;\n }\n}\n\nfunction processReply(root, formFieldPrefix, resolve, reject) {\n var nextPartId = 1;\n var pendingParts = 0;\n var formData = null;\n\n function resolveToJSON(key, value) {\n var parent = this; // Make sure that `parent[key]` wasn't JSONified before `value` was passed to us\n\n {\n // $FlowFixMe[incompatible-use]\n var originalValue = parent[key];\n\n if (typeof originalValue === 'object' && originalValue !== value && !(originalValue instanceof Date)) {\n if (objectName(originalValue) !== 'Object') {\n error('Only plain objects can be passed to Server Functions from the Client. ' + '%s objects are not supported.%s', objectName(originalValue), describeObjectForErrorMessage(parent, key));\n } else {\n error('Only plain objects can be passed to Server Functions from the Client. ' + 'Objects with toJSON methods are not supported. Convert it manually ' + 'to a simple value before passing it to props.%s', describeObjectForErrorMessage(parent, key));\n }\n }\n }\n\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'object') {\n // $FlowFixMe[method-unbinding]\n if (typeof value.then === 'function') {\n // We assume that any object with a .then property is a \"Thenable\" type,\n // or a Promise type. Either of which can be represented by a Promise.\n if (formData === null) {\n // Upgrade to use FormData to allow us to stream this value.\n formData = new FormData();\n }\n\n pendingParts++;\n var promiseId = nextPartId++;\n var thenable = value;\n thenable.then(function (partValue) {\n var partJSON = JSON.stringify(partValue, resolveToJSON); // $FlowFixMe[incompatible-type] We know it's not null because we assigned it above.\n\n var data = formData; // eslint-disable-next-line react-internal/safe-string-coercion\n\n data.append(formFieldPrefix + promiseId, partJSON);\n pendingParts--;\n\n if (pendingParts === 0) {\n resolve(data);\n }\n }, function (reason) {\n // In the future we could consider serializing this as an error\n // that throws on the server instead.\n reject(reason);\n });\n return serializePromiseID(promiseId);\n }\n\n if (isArray(value)) {\n // $FlowFixMe[incompatible-return]\n return value;\n } // TODO: Should we the Object.prototype.toString.call() to test for cross-realm objects?\n\n\n if (value instanceof FormData) {\n if (formData === null) {\n // Upgrade to use FormData to allow us to use rich objects as its values.\n formData = new FormData();\n }\n\n var data = formData;\n var refId = nextPartId++; // Copy all the form fields with a prefix for this reference.\n // These must come first in the form order because we assume that all the\n // fields are available before this is referenced.\n\n var prefix = formFieldPrefix + refId + '_'; // $FlowFixMe[prop-missing]: FormData has forEach.\n\n value.forEach(function (originalValue, originalKey) {\n data.append(prefix + originalKey, originalValue);\n });\n return serializeFormDataReference(refId);\n }\n\n if (value instanceof Map) {\n var partJSON = JSON.stringify(Array.from(value), resolveToJSON);\n\n if (formData === null) {\n formData = new FormData();\n }\n\n var mapId = nextPartId++;\n formData.append(formFieldPrefix + mapId, partJSON);\n return serializeMapID(mapId);\n }\n\n if (value instanceof Set) {\n var _partJSON = JSON.stringify(Array.from(value), resolveToJSON);\n\n if (formData === null) {\n formData = new FormData();\n }\n\n var setId = nextPartId++;\n formData.append(formFieldPrefix + setId, _partJSON);\n return serializeSetID(setId);\n }\n\n var iteratorFn = getIteratorFn(value);\n\n if (iteratorFn) {\n return Array.from(value);\n } // Verify that this is a simple plain object.\n\n\n var proto = getPrototypeOf(value);\n\n if (proto !== ObjectPrototype && (proto === null || getPrototypeOf(proto) !== null)) {\n throw new Error('Only plain objects, and a few built-ins, can be passed to Server Actions. ' + 'Classes or null prototypes are not supported.');\n }\n\n {\n if (value.$$typeof === REACT_ELEMENT_TYPE) {\n error('React Element cannot be passed to Server Functions from the Client.%s', describeObjectForErrorMessage(parent, key));\n } else if (value.$$typeof === REACT_LAZY_TYPE) {\n error('React Lazy cannot be passed to Server Functions from the Client.%s', describeObjectForErrorMessage(parent, key));\n } else if (value.$$typeof === REACT_PROVIDER_TYPE) {\n error('React Context Providers cannot be passed to Server Functions from the Client.%s', describeObjectForErrorMessage(parent, key));\n } else if (objectName(value) !== 'Object') {\n error('Only plain objects can be passed to Server Functions from the Client. ' + '%s objects are not supported.%s', objectName(value), describeObjectForErrorMessage(parent, key));\n } else if (!isSimpleObject(value)) {\n error('Only plain objects can be passed to Server Functions from the Client. ' + 'Classes or other objects with methods are not supported.%s', describeObjectForErrorMessage(parent, key));\n } else if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(value);\n\n if (symbols.length > 0) {\n error('Only plain objects can be passed to Server Functions from the Client. ' + 'Objects with symbol properties like %s are not supported.%s', symbols[0].description, describeObjectForErrorMessage(parent, key));\n }\n }\n } // $FlowFixMe[incompatible-return]\n\n\n return value;\n }\n\n if (typeof value === 'string') {\n // TODO: Maybe too clever. If we support URL there's no similar trick.\n if (value[value.length - 1] === 'Z') {\n // Possibly a Date, whose toJSON automatically calls toISOString\n // $FlowFixMe[incompatible-use]\n var _originalValue = parent[key];\n\n if (_originalValue instanceof Date) {\n return serializeDateFromDateJSON(value);\n }\n }\n\n return escapeStringValue(value);\n }\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'number') {\n return serializeNumber(value);\n }\n\n if (typeof value === 'undefined') {\n return serializeUndefined();\n }\n\n if (typeof value === 'function') {\n var metaData = knownServerReferences.get(value);\n\n if (metaData !== undefined) {\n var metaDataJSON = JSON.stringify(metaData, resolveToJSON);\n\n if (formData === null) {\n // Upgrade to use FormData to allow us to stream this value.\n formData = new FormData();\n } // The reference to this function came from the same client so we can pass it back.\n\n\n var _refId = nextPartId++; // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n formData.set(formFieldPrefix + _refId, metaDataJSON);\n return serializeServerReferenceID(_refId);\n }\n\n throw new Error('Client Functions cannot be passed directly to Server Functions. ' + 'Only Functions passed from the Server can be passed back again.');\n }\n\n if (typeof value === 'symbol') {\n // $FlowFixMe[incompatible-type] `description` might be undefined\n var name = value.description;\n\n if (Symbol.for(name) !== value) {\n throw new Error('Only global symbols received from Symbol.for(...) can be passed to Server Functions. ' + (\"The symbol Symbol.for(\" + // $FlowFixMe[incompatible-type] `description` might be undefined\n value.description + \") cannot be found among global symbols.\"));\n }\n\n return serializeSymbolReference(name);\n }\n\n if (typeof value === 'bigint') {\n return serializeBigInt(value);\n }\n\n throw new Error(\"Type \" + typeof value + \" is not supported as an argument to a Server Function.\");\n } // $FlowFixMe[incompatible-type] it's not going to be undefined because we'll encode it.\n\n\n var json = JSON.stringify(root, resolveToJSON);\n\n if (formData === null) {\n // If it's a simple data structure, we just use plain JSON.\n resolve(json);\n } else {\n // Otherwise, we use FormData to let us stream in the result.\n formData.set(formFieldPrefix + '0', json);\n\n if (pendingParts === 0) {\n // $FlowFixMe[incompatible-call] this has already been refined.\n resolve(formData);\n }\n }\n}\n\nfunction registerServerReference(proxy, reference) {\n\n knownServerReferences.set(proxy, reference);\n} // $FlowFixMe[method-unbinding]\n\nfunction createServerReference(id, callServer) {\n var proxy = function () {\n // $FlowFixMe[method-unbinding]\n var args = Array.prototype.slice.call(arguments);\n return callServer(id, args);\n };\n\n registerServerReference(proxy, {\n id: id,\n bound: null\n });\n return proxy;\n}\n\nvar ContextRegistry = ReactSharedInternals.ContextRegistry;\nfunction getOrCreateServerContext(globalName) {\n if (!ContextRegistry[globalName]) {\n var context = {\n $$typeof: REACT_SERVER_CONTEXT_TYPE,\n // As a workaround to support multiple concurrent renderers, we categorize\n // some renderers as primary and others as secondary. We only expect\n // there to be two concurrent renderers at most: React Native (primary) and\n // Fabric (secondary); React DOM (primary) and React ART (secondary).\n // Secondary renderers store their context values on separate fields.\n _currentValue: REACT_SERVER_CONTEXT_DEFAULT_VALUE_NOT_LOADED,\n _currentValue2: REACT_SERVER_CONTEXT_DEFAULT_VALUE_NOT_LOADED,\n _defaultValue: REACT_SERVER_CONTEXT_DEFAULT_VALUE_NOT_LOADED,\n // Used to track how many concurrent renderers this context currently\n // supports within in a single renderer. Such as parallel server rendering.\n _threadCount: 0,\n // These are circular\n Provider: null,\n Consumer: null,\n _globalName: globalName\n };\n context.Provider = {\n $$typeof: REACT_PROVIDER_TYPE,\n _context: context\n };\n\n {\n var hasWarnedAboutUsingConsumer;\n context._currentRenderer = null;\n context._currentRenderer2 = null;\n Object.defineProperties(context, {\n Consumer: {\n get: function () {\n if (!hasWarnedAboutUsingConsumer) {\n error('Consumer pattern is not supported by ReactServerContext');\n\n hasWarnedAboutUsingConsumer = true;\n }\n\n return null;\n }\n }\n });\n }\n\n ContextRegistry[globalName] = context;\n }\n\n return ContextRegistry[globalName];\n}\n\nvar ROW_ID = 0;\nvar ROW_TAG = 1;\nvar ROW_LENGTH = 2;\nvar ROW_CHUNK_BY_NEWLINE = 3;\nvar ROW_CHUNK_BY_LENGTH = 4;\nvar PENDING = 'pending';\nvar BLOCKED = 'blocked';\nvar CYCLIC = 'cyclic';\nvar RESOLVED_MODEL = 'resolved_model';\nvar RESOLVED_MODULE = 'resolved_module';\nvar INITIALIZED = 'fulfilled';\nvar ERRORED = 'rejected'; // $FlowFixMe[missing-this-annot]\n\nfunction Chunk(status, value, reason, response) {\n this.status = status;\n this.value = value;\n this.reason = reason;\n this._response = response;\n} // We subclass Promise.prototype so that we get other methods like .catch\n\n\nChunk.prototype = Object.create(Promise.prototype); // TODO: This doesn't return a new Promise chain unlike the real .then\n\nChunk.prototype.then = function (resolve, reject) {\n var chunk = this; // If we have resolved content, we try to initialize it first which\n // might put us back into one of the other states.\n\n switch (chunk.status) {\n case RESOLVED_MODEL:\n initializeModelChunk(chunk);\n break;\n\n case RESOLVED_MODULE:\n initializeModuleChunk(chunk);\n break;\n } // The status might have changed after initialization.\n\n\n switch (chunk.status) {\n case INITIALIZED:\n resolve(chunk.value);\n break;\n\n case PENDING:\n case BLOCKED:\n case CYCLIC:\n if (resolve) {\n if (chunk.value === null) {\n chunk.value = [];\n }\n\n chunk.value.push(resolve);\n }\n\n if (reject) {\n if (chunk.reason === null) {\n chunk.reason = [];\n }\n\n chunk.reason.push(reject);\n }\n\n break;\n\n default:\n reject(chunk.reason);\n break;\n }\n};\n\nfunction readChunk(chunk) {\n // If we have resolved content, we try to initialize it first which\n // might put us back into one of the other states.\n switch (chunk.status) {\n case RESOLVED_MODEL:\n initializeModelChunk(chunk);\n break;\n\n case RESOLVED_MODULE:\n initializeModuleChunk(chunk);\n break;\n } // The status might have changed after initialization.\n\n\n switch (chunk.status) {\n case INITIALIZED:\n return chunk.value;\n\n case PENDING:\n case BLOCKED:\n case CYCLIC:\n // eslint-disable-next-line no-throw-literal\n throw chunk;\n\n default:\n throw chunk.reason;\n }\n}\n\nfunction getRoot(response) {\n var chunk = getChunk(response, 0);\n return chunk;\n}\n\nfunction createPendingChunk(response) {\n // $FlowFixMe[invalid-constructor] Flow doesn't support functions as constructors\n return new Chunk(PENDING, null, null, response);\n}\n\nfunction createBlockedChunk(response) {\n // $FlowFixMe[invalid-constructor] Flow doesn't support functions as constructors\n return new Chunk(BLOCKED, null, null, response);\n}\n\nfunction createErrorChunk(response, error) {\n // $FlowFixMe[invalid-constructor] Flow doesn't support functions as constructors\n return new Chunk(ERRORED, null, error, response);\n}\n\nfunction wakeChunk(listeners, value) {\n for (var i = 0; i < listeners.length; i++) {\n var listener = listeners[i];\n listener(value);\n }\n}\n\nfunction wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners) {\n switch (chunk.status) {\n case INITIALIZED:\n wakeChunk(resolveListeners, chunk.value);\n break;\n\n case PENDING:\n case BLOCKED:\n case CYCLIC:\n chunk.value = resolveListeners;\n chunk.reason = rejectListeners;\n break;\n\n case ERRORED:\n if (rejectListeners) {\n wakeChunk(rejectListeners, chunk.reason);\n }\n\n break;\n }\n}\n\nfunction triggerErrorOnChunk(chunk, error) {\n if (chunk.status !== PENDING && chunk.status !== BLOCKED) {\n // We already resolved. We didn't expect to see this.\n return;\n }\n\n var listeners = chunk.reason;\n var erroredChunk = chunk;\n erroredChunk.status = ERRORED;\n erroredChunk.reason = error;\n\n if (listeners !== null) {\n wakeChunk(listeners, error);\n }\n}\n\nfunction createResolvedModelChunk(response, value) {\n // $FlowFixMe[invalid-constructor] Flow doesn't support functions as constructors\n return new Chunk(RESOLVED_MODEL, value, null, response);\n}\n\nfunction createResolvedModuleChunk(response, value) {\n // $FlowFixMe[invalid-constructor] Flow doesn't support functions as constructors\n return new Chunk(RESOLVED_MODULE, value, null, response);\n}\n\nfunction createInitializedTextChunk(response, value) {\n // $FlowFixMe[invalid-constructor] Flow doesn't support functions as constructors\n return new Chunk(INITIALIZED, value, null, response);\n}\n\nfunction resolveModelChunk(chunk, value) {\n if (chunk.status !== PENDING) {\n // We already resolved. We didn't expect to see this.\n return;\n }\n\n var resolveListeners = chunk.value;\n var rejectListeners = chunk.reason;\n var resolvedChunk = chunk;\n resolvedChunk.status = RESOLVED_MODEL;\n resolvedChunk.value = value;\n\n if (resolveListeners !== null) {\n // This is unfortunate that we're reading this eagerly if\n // we already have listeners attached since they might no\n // longer be rendered or might not be the highest pri.\n initializeModelChunk(resolvedChunk); // The status might have changed after initialization.\n\n wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners);\n }\n}\n\nfunction resolveModuleChunk(chunk, value) {\n if (chunk.status !== PENDING && chunk.status !== BLOCKED) {\n // We already resolved. We didn't expect to see this.\n return;\n }\n\n var resolveListeners = chunk.value;\n var rejectListeners = chunk.reason;\n var resolvedChunk = chunk;\n resolvedChunk.status = RESOLVED_MODULE;\n resolvedChunk.value = value;\n\n if (resolveListeners !== null) {\n initializeModuleChunk(resolvedChunk);\n wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners);\n }\n}\n\nvar initializingChunk = null;\nvar initializingChunkBlockedModel = null;\n\nfunction initializeModelChunk(chunk) {\n var prevChunk = initializingChunk;\n var prevBlocked = initializingChunkBlockedModel;\n initializingChunk = chunk;\n initializingChunkBlockedModel = null;\n var resolvedModel = chunk.value; // We go to the CYCLIC state until we've fully resolved this.\n // We do this before parsing in case we try to initialize the same chunk\n // while parsing the model. Such as in a cyclic reference.\n\n var cyclicChunk = chunk;\n cyclicChunk.status = CYCLIC;\n cyclicChunk.value = null;\n cyclicChunk.reason = null;\n\n try {\n var value = parseModel(chunk._response, resolvedModel);\n\n if (initializingChunkBlockedModel !== null && initializingChunkBlockedModel.deps > 0) {\n initializingChunkBlockedModel.value = value; // We discovered new dependencies on modules that are not yet resolved.\n // We have to go the BLOCKED state until they're resolved.\n\n var blockedChunk = chunk;\n blockedChunk.status = BLOCKED;\n blockedChunk.value = null;\n blockedChunk.reason = null;\n } else {\n var resolveListeners = cyclicChunk.value;\n var initializedChunk = chunk;\n initializedChunk.status = INITIALIZED;\n initializedChunk.value = value;\n\n if (resolveListeners !== null) {\n wakeChunk(resolveListeners, value);\n }\n }\n } catch (error) {\n var erroredChunk = chunk;\n erroredChunk.status = ERRORED;\n erroredChunk.reason = error;\n } finally {\n initializingChunk = prevChunk;\n initializingChunkBlockedModel = prevBlocked;\n }\n}\n\nfunction initializeModuleChunk(chunk) {\n try {\n var value = requireModule(chunk.value);\n var initializedChunk = chunk;\n initializedChunk.status = INITIALIZED;\n initializedChunk.value = value;\n } catch (error) {\n var erroredChunk = chunk;\n erroredChunk.status = ERRORED;\n erroredChunk.reason = error;\n }\n} // Report that any missing chunks in the model is now going to throw this\n// error upon read. Also notify any pending promises.\n\n\nfunction reportGlobalError(response, error) {\n response._chunks.forEach(function (chunk) {\n // If this chunk was already resolved or errored, it won't\n // trigger an error but if it wasn't then we need to\n // because we won't be getting any new data to resolve it.\n if (chunk.status === PENDING) {\n triggerErrorOnChunk(chunk, error);\n }\n });\n}\n\nfunction createElement(type, key, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: null,\n props: props,\n // Record the component responsible for creating this element.\n _owner: null\n };\n\n {\n // We don't really need to add any of these but keeping them for good measure.\n // Unfortunately, _store is enumerable in jest matchers so for equality to\n // work, I need to keep it or make _store non-enumerable in the other file.\n element._store = {};\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: true // This element has already been validated on the server.\n\n });\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: null\n });\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: null\n });\n }\n\n return element;\n}\n\nfunction createLazyChunkWrapper(chunk) {\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _payload: chunk,\n _init: readChunk\n };\n return lazyType;\n}\n\nfunction getChunk(response, id) {\n var chunks = response._chunks;\n var chunk = chunks.get(id);\n\n if (!chunk) {\n chunk = createPendingChunk(response);\n chunks.set(id, chunk);\n }\n\n return chunk;\n}\n\nfunction createModelResolver(chunk, parentObject, key, cyclic) {\n var blocked;\n\n if (initializingChunkBlockedModel) {\n blocked = initializingChunkBlockedModel;\n\n if (!cyclic) {\n blocked.deps++;\n }\n } else {\n blocked = initializingChunkBlockedModel = {\n deps: cyclic ? 0 : 1,\n value: null\n };\n }\n\n return function (value) {\n parentObject[key] = value;\n blocked.deps--;\n\n if (blocked.deps === 0) {\n if (chunk.status !== BLOCKED) {\n return;\n }\n\n var resolveListeners = chunk.value;\n var initializedChunk = chunk;\n initializedChunk.status = INITIALIZED;\n initializedChunk.value = blocked.value;\n\n if (resolveListeners !== null) {\n wakeChunk(resolveListeners, blocked.value);\n }\n }\n };\n}\n\nfunction createModelReject(chunk) {\n return function (error) {\n return triggerErrorOnChunk(chunk, error);\n };\n}\n\nfunction createServerReferenceProxy(response, metaData) {\n var callServer = response._callServer;\n\n var proxy = function () {\n // $FlowFixMe[method-unbinding]\n var args = Array.prototype.slice.call(arguments);\n var p = metaData.bound;\n\n if (!p) {\n return callServer(metaData.id, args);\n }\n\n if (p.status === INITIALIZED) {\n var bound = p.value;\n return callServer(metaData.id, bound.concat(args));\n } // Since this is a fake Promise whose .then doesn't chain, we have to wrap it.\n // TODO: Remove the wrapper once that's fixed.\n\n\n return Promise.resolve(p).then(function (bound) {\n return callServer(metaData.id, bound.concat(args));\n });\n };\n\n registerServerReference(proxy, metaData);\n return proxy;\n}\n\nfunction getOutlinedModel(response, id) {\n var chunk = getChunk(response, id);\n\n switch (chunk.status) {\n case RESOLVED_MODEL:\n initializeModelChunk(chunk);\n break;\n } // The status might have changed after initialization.\n\n\n switch (chunk.status) {\n case INITIALIZED:\n {\n return chunk.value;\n }\n // We always encode it first in the stream so it won't be pending.\n\n default:\n throw chunk.reason;\n }\n}\n\nfunction parseModelString(response, parentObject, key, value) {\n if (value[0] === '$') {\n if (value === '$') {\n // A very common symbol.\n return REACT_ELEMENT_TYPE;\n }\n\n switch (value[1]) {\n case '$':\n {\n // This was an escaped string value.\n return value.slice(1);\n }\n\n case 'L':\n {\n // Lazy node\n var id = parseInt(value.slice(2), 16);\n var chunk = getChunk(response, id); // We create a React.lazy wrapper around any lazy values.\n // When passed into React, we'll know how to suspend on this.\n\n return createLazyChunkWrapper(chunk);\n }\n\n case '@':\n {\n // Promise\n var _id = parseInt(value.slice(2), 16);\n\n var _chunk = getChunk(response, _id);\n\n return _chunk;\n }\n\n case 'S':\n {\n // Symbol\n return Symbol.for(value.slice(2));\n }\n\n case 'P':\n {\n // Server Context Provider\n return getOrCreateServerContext(value.slice(2)).Provider;\n }\n\n case 'F':\n {\n // Server Reference\n var _id2 = parseInt(value.slice(2), 16);\n\n var metadata = getOutlinedModel(response, _id2);\n return createServerReferenceProxy(response, metadata);\n }\n\n case 'Q':\n {\n // Map\n var _id3 = parseInt(value.slice(2), 16);\n\n var data = getOutlinedModel(response, _id3);\n return new Map(data);\n }\n\n case 'W':\n {\n // Set\n var _id4 = parseInt(value.slice(2), 16);\n\n var _data = getOutlinedModel(response, _id4);\n\n return new Set(_data);\n }\n\n case 'I':\n {\n // $Infinity\n return Infinity;\n }\n\n case '-':\n {\n // $-0 or $-Infinity\n if (value === '$-0') {\n return -0;\n } else {\n return -Infinity;\n }\n }\n\n case 'N':\n {\n // $NaN\n return NaN;\n }\n\n case 'u':\n {\n // matches \"$undefined\"\n // Special encoding for `undefined` which can't be serialized as JSON otherwise.\n return undefined;\n }\n\n case 'D':\n {\n // Date\n return new Date(Date.parse(value.slice(2)));\n }\n\n case 'n':\n {\n // BigInt\n return BigInt(value.slice(2));\n }\n\n default:\n {\n // We assume that anything else is a reference ID.\n var _id5 = parseInt(value.slice(1), 16);\n\n var _chunk2 = getChunk(response, _id5);\n\n switch (_chunk2.status) {\n case RESOLVED_MODEL:\n initializeModelChunk(_chunk2);\n break;\n\n case RESOLVED_MODULE:\n initializeModuleChunk(_chunk2);\n break;\n } // The status might have changed after initialization.\n\n\n switch (_chunk2.status) {\n case INITIALIZED:\n return _chunk2.value;\n\n case PENDING:\n case BLOCKED:\n case CYCLIC:\n var parentChunk = initializingChunk;\n\n _chunk2.then(createModelResolver(parentChunk, parentObject, key, _chunk2.status === CYCLIC), createModelReject(parentChunk));\n\n return null;\n\n default:\n throw _chunk2.reason;\n }\n }\n }\n }\n\n return value;\n}\n\nfunction parseModelTuple(response, value) {\n var tuple = value;\n\n if (tuple[0] === REACT_ELEMENT_TYPE) {\n // TODO: Consider having React just directly accept these arrays as elements.\n // Or even change the ReactElement type to be an array.\n return createElement(tuple[1], tuple[2], tuple[3]);\n }\n\n return value;\n}\n\nfunction missingCall() {\n throw new Error('Trying to call a function from \"use server\" but the callServer option ' + 'was not implemented in your router runtime.');\n}\n\nfunction createResponse(bundlerConfig, moduleLoading, callServer, nonce) {\n var chunks = new Map();\n var response = {\n _bundlerConfig: bundlerConfig,\n _moduleLoading: moduleLoading,\n _callServer: callServer !== undefined ? callServer : missingCall,\n _nonce: nonce,\n _chunks: chunks,\n _stringDecoder: createStringDecoder(),\n _fromJSON: null,\n _rowState: 0,\n _rowID: 0,\n _rowTag: 0,\n _rowLength: 0,\n _buffer: []\n }; // Don't inline this call because it causes closure to outline the call above.\n\n response._fromJSON = createFromJSONCallback(response);\n return response;\n}\n\nfunction resolveModel(response, id, model) {\n var chunks = response._chunks;\n var chunk = chunks.get(id);\n\n if (!chunk) {\n chunks.set(id, createResolvedModelChunk(response, model));\n } else {\n resolveModelChunk(chunk, model);\n }\n}\n\nfunction resolveText(response, id, text) {\n var chunks = response._chunks; // We assume that we always reference large strings after they've been\n // emitted.\n\n chunks.set(id, createInitializedTextChunk(response, text));\n}\n\nfunction resolveModule(response, id, model) {\n var chunks = response._chunks;\n var chunk = chunks.get(id);\n var clientReferenceMetadata = parseModel(response, model);\n var clientReference = resolveClientReference(response._bundlerConfig, clientReferenceMetadata);\n // For now we preload all modules as early as possible since it's likely\n // that we'll need them.\n\n var promise = preloadModule(clientReference);\n\n if (promise) {\n var blockedChunk;\n\n if (!chunk) {\n // Technically, we should just treat promise as the chunk in this\n // case. Because it'll just behave as any other promise.\n blockedChunk = createBlockedChunk(response);\n chunks.set(id, blockedChunk);\n } else {\n // This can't actually happen because we don't have any forward\n // references to modules.\n blockedChunk = chunk;\n blockedChunk.status = BLOCKED;\n }\n\n promise.then(function () {\n return resolveModuleChunk(blockedChunk, clientReference);\n }, function (error) {\n return triggerErrorOnChunk(blockedChunk, error);\n });\n } else {\n if (!chunk) {\n chunks.set(id, createResolvedModuleChunk(response, clientReference));\n } else {\n // This can't actually happen because we don't have any forward\n // references to modules.\n resolveModuleChunk(chunk, clientReference);\n }\n }\n}\n\nfunction resolveErrorDev(response, id, digest, message, stack) {\n\n\n var error = new Error(message || 'An error occurred in the Server Components render but no message was provided');\n error.stack = stack;\n error.digest = digest;\n var errorWithDigest = error;\n var chunks = response._chunks;\n var chunk = chunks.get(id);\n\n if (!chunk) {\n chunks.set(id, createErrorChunk(response, errorWithDigest));\n } else {\n triggerErrorOnChunk(chunk, errorWithDigest);\n }\n}\n\nfunction resolveHint(response, code, model) {\n var hintModel = parseModel(response, model);\n dispatchHint(code, hintModel);\n}\n\nfunction processFullRow(response, id, tag, buffer, chunk) {\n\n var stringDecoder = response._stringDecoder;\n var row = '';\n\n for (var i = 0; i < buffer.length; i++) {\n row += readPartialStringChunk(stringDecoder, buffer[i]);\n }\n\n row += readFinalStringChunk(stringDecoder, chunk);\n\n switch (tag) {\n case 73\n /* \"I\" */\n :\n {\n resolveModule(response, id, row);\n return;\n }\n\n case 72\n /* \"H\" */\n :\n {\n var code = row[0];\n resolveHint(response, code, row.slice(1));\n return;\n }\n\n case 69\n /* \"E\" */\n :\n {\n var errorInfo = JSON.parse(row);\n\n {\n resolveErrorDev(response, id, errorInfo.digest, errorInfo.message, errorInfo.stack);\n }\n\n return;\n }\n\n case 84\n /* \"T\" */\n :\n {\n resolveText(response, id, row);\n return;\n }\n\n case 80\n /* \"P\" */\n :\n // Fallthrough\n\n default:\n /* \"\"\" \"{\" \"[\" \"t\" \"f\" \"n\" \"0\" - \"9\" */\n {\n // We assume anything else is JSON.\n resolveModel(response, id, row);\n return;\n }\n }\n}\n\nfunction processBinaryChunk(response, chunk) {\n var i = 0;\n var rowState = response._rowState;\n var rowID = response._rowID;\n var rowTag = response._rowTag;\n var rowLength = response._rowLength;\n var buffer = response._buffer;\n var chunkLength = chunk.length;\n\n while (i < chunkLength) {\n var lastIdx = -1;\n\n switch (rowState) {\n case ROW_ID:\n {\n var byte = chunk[i++];\n\n if (byte === 58\n /* \":\" */\n ) {\n // Finished the rowID, next we'll parse the tag.\n rowState = ROW_TAG;\n } else {\n rowID = rowID << 4 | (byte > 96 ? byte - 87 : byte - 48);\n }\n\n continue;\n }\n\n case ROW_TAG:\n {\n var resolvedRowTag = chunk[i];\n\n if (resolvedRowTag === 84\n /* \"T\" */\n || enableBinaryFlight \n /* \"V\" */\n ) {\n rowTag = resolvedRowTag;\n rowState = ROW_LENGTH;\n i++;\n } else if (resolvedRowTag > 64 && resolvedRowTag < 91\n /* \"A\"-\"Z\" */\n ) {\n rowTag = resolvedRowTag;\n rowState = ROW_CHUNK_BY_NEWLINE;\n i++;\n } else {\n rowTag = 0;\n rowState = ROW_CHUNK_BY_NEWLINE; // This was an unknown tag so it was probably part of the data.\n }\n\n continue;\n }\n\n case ROW_LENGTH:\n {\n var _byte = chunk[i++];\n\n if (_byte === 44\n /* \",\" */\n ) {\n // Finished the rowLength, next we'll buffer up to that length.\n rowState = ROW_CHUNK_BY_LENGTH;\n } else {\n rowLength = rowLength << 4 | (_byte > 96 ? _byte - 87 : _byte - 48);\n }\n\n continue;\n }\n\n case ROW_CHUNK_BY_NEWLINE:\n {\n // We're looking for a newline\n lastIdx = chunk.indexOf(10\n /* \"\\n\" */\n , i);\n break;\n }\n\n case ROW_CHUNK_BY_LENGTH:\n {\n // We're looking for the remaining byte length\n lastIdx = i + rowLength;\n\n if (lastIdx > chunk.length) {\n lastIdx = -1;\n }\n\n break;\n }\n }\n\n var offset = chunk.byteOffset + i;\n\n if (lastIdx > -1) {\n // We found the last chunk of the row\n var length = lastIdx - i;\n var lastChunk = new Uint8Array(chunk.buffer, offset, length);\n processFullRow(response, rowID, rowTag, buffer, lastChunk); // Reset state machine for a new row\n\n i = lastIdx;\n\n if (rowState === ROW_CHUNK_BY_NEWLINE) {\n // If we're trailing by a newline we need to skip it.\n i++;\n }\n\n rowState = ROW_ID;\n rowTag = 0;\n rowID = 0;\n rowLength = 0;\n buffer.length = 0;\n } else {\n // The rest of this row is in a future chunk. We stash the rest of the\n // current chunk until we can process the full row.\n var _length = chunk.byteLength - i;\n\n var remainingSlice = new Uint8Array(chunk.buffer, offset, _length);\n buffer.push(remainingSlice); // Update how many bytes we're still waiting for. If we're looking for\n // a newline, this doesn't hurt since we'll just ignore it.\n\n rowLength -= remainingSlice.byteLength;\n break;\n }\n }\n\n response._rowState = rowState;\n response._rowID = rowID;\n response._rowTag = rowTag;\n response._rowLength = rowLength;\n}\n\nfunction parseModel(response, json) {\n return JSON.parse(json, response._fromJSON);\n}\n\nfunction createFromJSONCallback(response) {\n // $FlowFixMe[missing-this-annot]\n return function (key, value) {\n if (typeof value === 'string') {\n // We can't use .bind here because we need the \"this\" value.\n return parseModelString(response, this, key, value);\n }\n\n if (typeof value === 'object' && value !== null) {\n return parseModelTuple(response, value);\n }\n\n return value;\n };\n}\n\nfunction close(response) {\n // In case there are any remaining unresolved chunks, they won't\n // be resolved now. So we need to issue an error to those.\n // Ideally we should be able to early bail out if we kept a\n // ref count of pending chunks.\n reportGlobalError(response, new Error('Connection closed.'));\n}\n\nfunction createResponseFromOptions(options) {\n return createResponse(null, null, options && options.callServer ? options.callServer : undefined, undefined // nonce\n );\n}\n\nfunction startReadingFromStream(response, stream) {\n var reader = stream.getReader();\n\n function progress(_ref) {\n var done = _ref.done,\n value = _ref.value;\n\n if (done) {\n close(response);\n return;\n }\n\n var buffer = value;\n processBinaryChunk(response, buffer);\n return reader.read().then(progress).catch(error);\n }\n\n function error(e) {\n reportGlobalError(response, e);\n }\n\n reader.read().then(progress).catch(error);\n}\n\nfunction createFromReadableStream(stream, options) {\n var response = createResponseFromOptions(options);\n startReadingFromStream(response, stream);\n return getRoot(response);\n}\n\nfunction createFromFetch(promiseForResponse, options) {\n var response = createResponseFromOptions(options);\n promiseForResponse.then(function (r) {\n startReadingFromStream(response, r.body);\n }, function (e) {\n reportGlobalError(response, e);\n });\n return getRoot(response);\n}\n\nfunction encodeReply(value)\n/* We don't use URLSearchParams yet but maybe */\n{\n return new Promise(function (resolve, reject) {\n processReply(value, '', resolve, reject);\n });\n}\n\nexports.createFromFetch = createFromFetch;\nexports.createFromReadableStream = createFromReadableStream;\nexports.createServerReference = createServerReference;\nexports.encodeReply = encodeReply;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2Nqcy9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2stY2xpZW50LmJyb3dzZXIuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLElBQUksSUFBcUM7QUFDekM7QUFDQTs7QUFFQSxlQUFlLG1CQUFPLENBQUMsMkZBQVc7QUFDbEMsWUFBWSxtQkFBTyxDQUFDLG1GQUFPOztBQUUzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjs7QUFFbkM7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBLHlCQUF5QjtBQUN6QixFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBLHNCQUFzQixtQkFBbUI7O0FBRXpDO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCLG1CQUFtQjs7QUFFakQsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTLHFCQUFzQjtBQUMvQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxlQUFlO0FBQ2hIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVIsa0RBQWtEO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtCQUFrQixrQkFBa0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0Isa0JBQWtCO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxtQkFBbUIsSUFBSTtBQUN2Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVixxQkFBcUIsNkNBQTZDO0FBQ2xFLFVBQVU7QUFDVixxQkFBcUIsNENBQTRDO0FBQ2pFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWLG1CQUFtQixJQUFJO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBLHVCQUF1QixvQkFBb0I7QUFDM0M7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHdCQUF3QixvQkFBb0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLGlCQUFpQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7O0FBRUEsd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUEsZUFBZTtBQUNmO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUU7O0FBRW5FLCtCQUErQjs7QUFFL0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBOztBQUVBLG9EQUFvRDs7QUFFcEQ7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1YsbUNBQW1DOzs7QUFHbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRixvREFBb0Q7O0FBRXBEO0FBQ0Esb0JBQW9CO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7O0FBR1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7QUFDakM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsNkNBQTZDO0FBQzdDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRTs7QUFFbEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSx1QkFBdUI7QUFDdkIsZ0NBQWdDO0FBQ2hDLDZCQUE2QjtBQUM3QixtQkFBbUI7QUFDbkIsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2Nqcy9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2stY2xpZW50LmJyb3dzZXIuZGV2ZWxvcG1lbnQuanM/NjUyYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2stY2xpZW50LmJyb3dzZXIuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdERPTSA9IHJlcXVpcmUoJ3JlYWN0LWRvbScpO1xudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBlbmFibGVCaW5hcnlGbGlnaHQgPSBmYWxzZTtcblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRGVjb2RlcigpIHtcbiAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpO1xufVxudmFyIGRlY29kZXJPcHRpb25zID0ge1xuICBzdHJlYW06IHRydWVcbn07XG5mdW5jdGlvbiByZWFkUGFydGlhbFN0cmluZ0NodW5rKGRlY29kZXIsIGJ1ZmZlcikge1xuICByZXR1cm4gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLCBkZWNvZGVyT3B0aW9ucyk7XG59XG5mdW5jdGlvbiByZWFkRmluYWxTdHJpbmdDaHVuayhkZWNvZGVyLCBidWZmZXIpIHtcbiAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGJ1ZmZlcik7XG59XG5cbi8vIFRoaXMgaXMgdGhlIHBhcnNlZCBzaGFwZSBvZiB0aGUgd2lyZSBmb3JtYXQgd2hpY2ggaXMgd2h5IGl0IGlzXG4vLyBjb25kZW5zZWQgdG8gb25seSB0aGUgZXNzZW50aWFseSBpbmZvcm1hdGlvblxudmFyIElEID0gMDtcbnZhciBDSFVOS1MgPSAxO1xudmFyIE5BTUUgPSAyOyAvLyBleHBvcnQgY29uc3QgQVNZTkMgPSAzO1xuLy8gVGhpcyBsb2dpYyBpcyBjb3JyZWN0IGJlY2F1c2UgY3VycmVudGx5IG9ubHkgaW5jbHVkZSB0aGUgNHRoIHR1cGxlIG1lbWJlclxuLy8gd2hlbiB0aGUgbW9kdWxlIGlzIGFzeW5jLiBJZiB0aGF0IGNoYW5nZXMgd2Ugd2lsbCBuZWVkIHRvIGFjdHVhbGx5IGFzc2VydFxuLy8gdGhlIHZhbHVlIGlzIHRydWUuIFdlIGRvbid0IGluZGV4IGludG8gdGhlIDR0aCBzbG90IGJlY2F1c2UgZmxvdyBkb2VzIG5vdFxuLy8gbGlrZSB0aGUgcG90ZW50aWFsIG91dCBvZiBib3VuZHMgYWNjZXNzXG5cbmZ1bmN0aW9uIGlzQXN5bmNJbXBvcnQobWV0YWRhdGEpIHtcbiAgcmV0dXJuIG1ldGFkYXRhLmxlbmd0aCA9PT0gNDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUNsaWVudFJlZmVyZW5jZShidW5kbGVyQ29uZmlnLCBtZXRhZGF0YSkge1xuICBpZiAoYnVuZGxlckNvbmZpZykge1xuICAgIHZhciBtb2R1bGVFeHBvcnRzID0gYnVuZGxlckNvbmZpZ1ttZXRhZGF0YVtJRF1dO1xuICAgIHZhciByZXNvbHZlZE1vZHVsZURhdGEgPSBtb2R1bGVFeHBvcnRzW21ldGFkYXRhW05BTUVdXTtcbiAgICB2YXIgbmFtZTtcblxuICAgIGlmIChyZXNvbHZlZE1vZHVsZURhdGEpIHtcbiAgICAgIC8vIFRoZSBwb3RlbnRpYWxseSBhbGlhc2VkIG5hbWUuXG4gICAgICBuYW1lID0gcmVzb2x2ZWRNb2R1bGVEYXRhLm5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgdGhpcyBzcGVjaWZpYyBuYW1lLCB3ZSBtaWdodCBoYXZlIHRoZSBmdWxsIG1vZHVsZS5cbiAgICAgIHJlc29sdmVkTW9kdWxlRGF0YSA9IG1vZHVsZUV4cG9ydHNbJyonXTtcblxuICAgICAgaWYgKCFyZXNvbHZlZE1vZHVsZURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCB0aGUgbW9kdWxlIFwiJyArIG1ldGFkYXRhW0lEXSArICdcIiBpbiB0aGUgUmVhY3QgU1NSIE1hbmlmZXN0LiAnICsgJ1RoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4gdGhlIFJlYWN0IFNlcnZlciBDb21wb25lbnRzIGJ1bmRsZXIuJyk7XG4gICAgICB9XG5cbiAgICAgIG5hbWUgPSBtZXRhZGF0YVtOQU1FXTtcbiAgICB9XG5cbiAgICBpZiAoaXNBc3luY0ltcG9ydChtZXRhZGF0YSkpIHtcbiAgICAgIHJldHVybiBbcmVzb2x2ZWRNb2R1bGVEYXRhLmlkLCByZXNvbHZlZE1vZHVsZURhdGEuY2h1bmtzLCBuYW1lLCAxXG4gICAgICAvKiBhc3luYyAqL1xuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtyZXNvbHZlZE1vZHVsZURhdGEuaWQsIHJlc29sdmVkTW9kdWxlRGF0YS5jaHVua3MsIG5hbWVdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRhZGF0YTtcbn1cbi8vIElmIHRoZXkncmUgc3RpbGwgcGVuZGluZyB0aGV5J3JlIGEgdGhlbmFibGUuIFRoaXMgbWFwIGFsc28gZXhpc3RzXG4vLyBpbiBXZWJwYWNrIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0J3Mgbm90IGV4cG9zZWQgc28gd2UgaGF2ZSB0b1xuLy8gcmVwbGljYXRlIGl0IGluIHVzZXIgc3BhY2UuIG51bGwgbWVhbnMgdGhhdCBpdCBoYXMgYWxyZWFkeSBsb2FkZWQuXG5cbnZhciBjaHVua0NhY2hlID0gbmV3IE1hcCgpO1xuXG5mdW5jdGlvbiByZXF1aXJlQXN5bmNNb2R1bGUoaWQpIHtcbiAgLy8gV2UndmUgYWxyZWFkeSBsb2FkZWQgYWxsIHRoZSBjaHVua3MuIFdlIGNhbiByZXF1aXJlIHRoZSBtb2R1bGUuXG4gIHZhciBwcm9taXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG5cbiAgaWYgKHR5cGVvZiBwcm9taXNlLnRoZW4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHdhc24ndCBhIHByb21pc2UgYWZ0ZXIgYWxsLlxuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKHByb21pc2Uuc3RhdHVzID09PSAnZnVsZmlsbGVkJykge1xuICAgIC8vIFRoaXMgbW9kdWxlIHdhcyBhbHJlYWR5IHJlc29sdmVkIGVhcmxpZXIuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgLy8gSW5zdHJ1bWVudCB0aGUgUHJvbWlzZSB0byBzdGFzaCB0aGUgcmVzdWx0LlxuICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhciBmdWxmaWxsZWRUaGVuYWJsZSA9IHByb21pc2U7XG4gICAgICBmdWxmaWxsZWRUaGVuYWJsZS5zdGF0dXMgPSAnZnVsZmlsbGVkJztcbiAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgdmFyIHJlamVjdGVkVGhlbmFibGUgPSBwcm9taXNlO1xuICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5zdGF0dXMgPSAncmVqZWN0ZWQnO1xuICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5yZWFzb24gPSByZWFzb247XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaWdub3JlUmVqZWN0KCkgey8vIFdlIHJlbHkgb24gcmVqZWN0ZWQgcHJvbWlzZXMgdG8gYmUgaGFuZGxlZCBieSBhbm90aGVyIGxpc3RlbmVyLlxufSAvLyBTdGFydCBwcmVsb2FkaW5nIHRoZSBtb2R1bGVzIHNpbmNlIHdlIG1pZ2h0IG5lZWQgdGhlbSBzb29uLlxuLy8gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHN1c3BlbmQuXG5cblxuZnVuY3Rpb24gcHJlbG9hZE1vZHVsZShtZXRhZGF0YSkge1xuICB2YXIgY2h1bmtzID0gbWV0YWRhdGFbQ0hVTktTXTtcbiAgdmFyIHByb21pc2VzID0gW107XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IGNodW5rcy5sZW5ndGgpIHtcbiAgICB2YXIgY2h1bmtJZCA9IGNodW5rc1tpKytdO1xuICAgIHZhciBjaHVua0ZpbGVuYW1lID0gY2h1bmtzW2krK107XG4gICAgdmFyIGVudHJ5ID0gY2h1bmtDYWNoZS5nZXQoY2h1bmtJZCk7XG5cbiAgICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHRoZW5hYmxlID0gbG9hZENodW5rKGNodW5rSWQsIGNodW5rRmlsZW5hbWUpO1xuICAgICAgcHJvbWlzZXMucHVzaCh0aGVuYWJsZSk7IC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cblxuICAgICAgdmFyIHJlc29sdmUgPSBjaHVua0NhY2hlLnNldC5iaW5kKGNodW5rQ2FjaGUsIGNodW5rSWQsIG51bGwpO1xuICAgICAgdGhlbmFibGUudGhlbihyZXNvbHZlLCBpZ25vcmVSZWplY3QpO1xuICAgICAgY2h1bmtDYWNoZS5zZXQoY2h1bmtJZCwgdGhlbmFibGUpO1xuICAgIH0gZWxzZSBpZiAoZW50cnkgIT09IG51bGwpIHtcbiAgICAgIHByb21pc2VzLnB1c2goZW50cnkpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc0FzeW5jSW1wb3J0KG1ldGFkYXRhKSkge1xuICAgIGlmIChwcm9taXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiByZXF1aXJlQXN5bmNNb2R1bGUobWV0YWRhdGFbSURdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBc3luY01vZHVsZShtZXRhZGF0YVtJRF0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59IC8vIEFjdHVhbGx5IHJlcXVpcmUgdGhlIG1vZHVsZSBvciBzdXNwZW5kIGlmIGl0J3Mgbm90IHlldCByZWFkeS5cbi8vIEluY3JlYXNlIHByaW9yaXR5IGlmIG5lY2Vzc2FyeS5cblxuZnVuY3Rpb24gcmVxdWlyZU1vZHVsZShtZXRhZGF0YSkge1xuICB2YXIgbW9kdWxlRXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18obWV0YWRhdGFbSURdKTtcblxuICBpZiAoaXNBc3luY0ltcG9ydChtZXRhZGF0YSkpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZUV4cG9ydHMudGhlbiAhPT0gJ2Z1bmN0aW9uJykgOyBlbHNlIGlmIChtb2R1bGVFeHBvcnRzLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgIC8vIFRoaXMgUHJvbWlzZSBzaG91bGQndmUgYmVlbiBpbnN0cnVtZW50ZWQgYnkgcHJlbG9hZE1vZHVsZS5cbiAgICAgIG1vZHVsZUV4cG9ydHMgPSBtb2R1bGVFeHBvcnRzLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBtb2R1bGVFeHBvcnRzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICBpZiAobWV0YWRhdGFbTkFNRV0gPT09ICcqJykge1xuICAgIC8vIFRoaXMgaXMgYSBwbGFjZWhvbGRlciB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgdGhhdCB0aGUgY2FsbGVyIGltcG9ydGVkIHRoaXNcbiAgICAvLyBhcyBhIENvbW1vbkpTIG1vZHVsZSBhcyBpcy5cbiAgICByZXR1cm4gbW9kdWxlRXhwb3J0cztcbiAgfVxuXG4gIGlmIChtZXRhZGF0YVtOQU1FXSA9PT0gJycpIHtcbiAgICAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoYXQgdGhlIGNhbGxlciBhY2Nlc3NlZCB0aGVcbiAgICAvLyBkZWZhdWx0IHByb3BlcnR5IG9mIHRoaXMgaWYgaXQgd2FzIGFuIEVTTSBpbnRlcm9wIG1vZHVsZS5cbiAgICByZXR1cm4gbW9kdWxlRXhwb3J0cy5fX2VzTW9kdWxlID8gbW9kdWxlRXhwb3J0cy5kZWZhdWx0IDogbW9kdWxlRXhwb3J0cztcbiAgfVxuXG4gIHJldHVybiBtb2R1bGVFeHBvcnRzW21ldGFkYXRhW05BTUVdXTtcbn1cblxudmFyIGNodW5rTWFwID0gbmV3IE1hcCgpO1xuLyoqXG4gKiBXZSBwYXRjaCB0aGUgY2h1bmsgZmlsZW5hbWUgZnVuY3Rpb24gaW4gd2VicGFjayB0byBpbnNlcnQgb3VyIG93biByZXNvbHV0aW9uXG4gKiBvZiBjaHVua3MgdGhhdCBjb21lIGZyb20gRmxpZ2h0IGFuZCBtYXkgbm90IGJlIGtub3duIHRvIHRoZSB3ZWJwYWNrIHJ1bnRpbWVcbiAqL1xuXG52YXIgd2VicGFja0dldENodW5rRmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLnU7XG5cbl9fd2VicGFja19yZXF1aXJlX18udSA9IGZ1bmN0aW9uIChjaHVua0lkKSB7XG4gIHZhciBmbGlnaHRDaHVuayA9IGNodW5rTWFwLmdldChjaHVua0lkKTtcblxuICBpZiAoZmxpZ2h0Q2h1bmsgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmbGlnaHRDaHVuaztcbiAgfVxuXG4gIHJldHVybiB3ZWJwYWNrR2V0Q2h1bmtGaWxlbmFtZShjaHVua0lkKTtcbn07XG5cbmZ1bmN0aW9uIGxvYWRDaHVuayhjaHVua0lkLCBmaWxlbmFtZSkge1xuICBjaHVua01hcC5zZXQoY2h1bmtJZCwgZmlsZW5hbWUpO1xuICByZXR1cm4gX193ZWJwYWNrX2NodW5rX2xvYWRfXyhjaHVua0lkKTtcbn1cblxudmFyIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzID0gUmVhY3RET00uX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbi8vIFRoaXMgY2xpZW50IGZpbGUgaXMgaW4gdGhlIHNoYXJlZCBmb2xkZXIgYmVjYXVzZSBpdCBhcHBsaWVzIHRvIGJvdGggU1NSIGFuZCBicm93c2VyIGNvbnRleHRzLlxudmFyIFJlYWN0RE9NQ3VycmVudERpc3BhdGNoZXIgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5EaXNwYXRjaGVyO1xuZnVuY3Rpb24gZGlzcGF0Y2hIaW50KGNvZGUsIG1vZGVsKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RET01DdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmIChkaXNwYXRjaGVyKSB7XG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlICdEJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciByZWZpbmVkID0gcmVmaW5lTW9kZWwoY29kZSwgbW9kZWwpO1xuICAgICAgICAgIHZhciBocmVmID0gcmVmaW5lZDtcbiAgICAgICAgICBkaXNwYXRjaGVyLnByZWZldGNoRE5TKGhyZWYpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdDJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcmVmaW5lZCA9IHJlZmluZU1vZGVsKGNvZGUsIG1vZGVsKTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgX3JlZmluZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgX2hyZWYgPSBfcmVmaW5lZDtcbiAgICAgICAgICAgIGRpc3BhdGNoZXIucHJlY29ubmVjdChfaHJlZik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBfaHJlZjIgPSBfcmVmaW5lZFswXTtcbiAgICAgICAgICAgIHZhciBjcm9zc09yaWdpbiA9IF9yZWZpbmVkWzFdO1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5wcmVjb25uZWN0KF9ocmVmMiwgY3Jvc3NPcmlnaW4pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdMJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcmVmaW5lZDIgPSByZWZpbmVNb2RlbChjb2RlLCBtb2RlbCk7XG5cbiAgICAgICAgICB2YXIgX2hyZWYzID0gX3JlZmluZWQyWzBdO1xuICAgICAgICAgIHZhciBhcyA9IF9yZWZpbmVkMlsxXTtcblxuICAgICAgICAgIGlmIChfcmVmaW5lZDIubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IF9yZWZpbmVkMlsyXTtcbiAgICAgICAgICAgIGRpc3BhdGNoZXIucHJlbG9hZChfaHJlZjMsIGFzLCBvcHRpb25zKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5wcmVsb2FkKF9ocmVmMywgYXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdtJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcmVmaW5lZDMgPSByZWZpbmVNb2RlbChjb2RlLCBtb2RlbCk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIF9yZWZpbmVkMyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciBfaHJlZjQgPSBfcmVmaW5lZDM7XG4gICAgICAgICAgICBkaXNwYXRjaGVyLnByZWxvYWRNb2R1bGUoX2hyZWY0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIF9ocmVmNSA9IF9yZWZpbmVkM1swXTtcbiAgICAgICAgICAgIHZhciBfb3B0aW9ucyA9IF9yZWZpbmVkM1sxXTtcbiAgICAgICAgICAgIGRpc3BhdGNoZXIucHJlbG9hZE1vZHVsZShfaHJlZjUsIF9vcHRpb25zKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnUyc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX3JlZmluZWQ0ID0gcmVmaW5lTW9kZWwoY29kZSwgbW9kZWwpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBfcmVmaW5lZDQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgX2hyZWY2ID0gX3JlZmluZWQ0O1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5wcmVpbml0U3R5bGUoX2hyZWY2KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIF9ocmVmNyA9IF9yZWZpbmVkNFswXTtcbiAgICAgICAgICAgIHZhciBwcmVjZWRlbmNlID0gX3JlZmluZWQ0WzFdID09PSAwID8gdW5kZWZpbmVkIDogX3JlZmluZWQ0WzFdO1xuXG4gICAgICAgICAgICB2YXIgX29wdGlvbnMyID0gX3JlZmluZWQ0Lmxlbmd0aCA9PT0gMyA/IF9yZWZpbmVkNFsyXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgZGlzcGF0Y2hlci5wcmVpbml0U3R5bGUoX2hyZWY3LCBwcmVjZWRlbmNlLCBfb3B0aW9uczIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdYJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcmVmaW5lZDUgPSByZWZpbmVNb2RlbChjb2RlLCBtb2RlbCk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIF9yZWZpbmVkNSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciBfaHJlZjggPSBfcmVmaW5lZDU7XG4gICAgICAgICAgICBkaXNwYXRjaGVyLnByZWluaXRTY3JpcHQoX2hyZWY4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIF9ocmVmOSA9IF9yZWZpbmVkNVswXTtcbiAgICAgICAgICAgIHZhciBfb3B0aW9uczMgPSBfcmVmaW5lZDVbMV07XG4gICAgICAgICAgICBkaXNwYXRjaGVyLnByZWluaXRTY3JpcHQoX2hyZWY5LCBfb3B0aW9uczMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdNJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcmVmaW5lZDYgPSByZWZpbmVNb2RlbChjb2RlLCBtb2RlbCk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIF9yZWZpbmVkNiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciBfaHJlZjEwID0gX3JlZmluZWQ2O1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5wcmVpbml0TW9kdWxlU2NyaXB0KF9ocmVmMTApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgX2hyZWYxMSA9IF9yZWZpbmVkNlswXTtcbiAgICAgICAgICAgIHZhciBfb3B0aW9uczQgPSBfcmVmaW5lZDZbMV07XG4gICAgICAgICAgICBkaXNwYXRjaGVyLnByZWluaXRNb2R1bGVTY3JpcHQoX2hyZWYxMSwgX29wdGlvbnM0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gRmxvdyBpcyBoYXZpbmcgdHJvdWJsZSByZWZpbmluZyB0aGUgSGludE1vZGVscyBzbyB3ZSBoZWxwIGl0IGEgYml0LlxuLy8gVGhpcyBzaG91bGQgYmUgY29tcGlsZWQgb3V0IGluIHRoZSBwcm9kdWN0aW9uIGJ1aWxkLlxuXG5mdW5jdGlvbiByZWZpbmVNb2RlbChjb2RlLCBtb2RlbCkge1xuICByZXR1cm4gbW9kZWw7XG59XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuXG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuXG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIFN0cmluZyhpdGVtKTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX1NFUlZFUl9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zZXJ2ZXJfY29udGV4dCcpO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGF6eScpO1xudmFyIFJFQUNUX1NFUlZFUl9DT05URVhUX0RFRkFVTFRfVkFMVUVfTk9UX0xPQURFRCA9IFN5bWJvbC5mb3IoJ3JlYWN0LmRlZmF1bHRfdmFsdWUnKTtcbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbi8vIGluIGNhc2UgdGhleSBlcnJvci5cblxudmFyIGpzeFByb3BzUGFyZW50cyA9IG5ldyBXZWFrTWFwKCk7XG52YXIganN4Q2hpbGRyZW5QYXJlbnRzID0gbmV3IFdlYWtNYXAoKTtcblxuZnVuY3Rpb24gaXNPYmplY3RQcm90b3R5cGUob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgaWYgKG9iamVjdCA9PT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gSXQgbWlnaHQgYmUgYW4gb2JqZWN0IGZyb20gYSBkaWZmZXJlbnQgUmVhbG0gd2hpY2ggaXNcbiAgLy8gc3RpbGwganVzdCBhIHBsYWluIHNpbXBsZSBvYmplY3QuXG5cblxuICBpZiAoZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBuYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIGlmICghKG5hbWVzW2ldIGluIE9iamVjdFByb3RvdHlwZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVPYmplY3Qob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3RQcm90b3R5cGUoZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgbmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBuYW1lc1tpXSk7XG5cbiAgICBpZiAoIWRlc2NyaXB0b3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWRlc2NyaXB0b3IuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKChuYW1lc1tpXSA9PT0gJ2tleScgfHwgbmFtZXNbaV0gPT09ICdyZWYnKSAmJiB0eXBlb2YgZGVzY3JpcHRvci5nZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gUmVhY3QgYWRkcyBrZXkgYW5kIHJlZiBnZXR0ZXJzIHRvIHByb3BzIG9iamVjdHMgdG8gaXNzdWUgd2FybmluZ3MuXG4gICAgICAgIC8vIFRob3NlIGdldHRlcnMgd2lsbCBub3QgYmUgdHJhbnNmZXJyZWQgdG8gdGhlIGNsaWVudCwgYnV0IHRoYXQncyBvayxcbiAgICAgICAgLy8gc28gd2UnbGwgc3BlY2lhbCBjYXNlIHRoZW0uXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBvYmplY3ROYW1lKG9iamVjdCkge1xuICAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4gIHZhciBuYW1lID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCk7XG4gIHJldHVybiBuYW1lLnJlcGxhY2UoL15cXFtvYmplY3QgKC4qKVxcXSQvLCBmdW5jdGlvbiAobSwgcDApIHtcbiAgICByZXR1cm4gcDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUtleUZvckVycm9yTWVzc2FnZShrZXkpIHtcbiAgdmFyIGVuY29kZWRLZXkgPSBKU09OLnN0cmluZ2lmeShrZXkpO1xuICByZXR1cm4gJ1wiJyArIGtleSArICdcIicgPT09IGVuY29kZWRLZXkgPyBrZXkgOiBlbmNvZGVkS2V5O1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVZhbHVlRm9yRXJyb3JNZXNzYWdlKHZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLmxlbmd0aCA8PSAxMCA/IHZhbHVlIDogdmFsdWUuc2xpY2UoMCwgMTApICsgJy4uLicpO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuICdbLi4uXSc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmFtZSA9IG9iamVjdE5hbWUodmFsdWUpO1xuXG4gICAgICAgIGlmIChuYW1lID09PSAnT2JqZWN0Jykge1xuICAgICAgICAgIHJldHVybiAney4uLn0nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICByZXR1cm4gJ2Z1bmN0aW9uJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVFbGVtZW50VHlwZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZShvYmplY3RPckFycmF5LCBleHBhbmRlZE5hbWUpIHtcbiAgdmFyIG9iaktpbmQgPSBvYmplY3ROYW1lKG9iamVjdE9yQXJyYXkpO1xuXG4gIGlmIChvYmpLaW5kICE9PSAnT2JqZWN0JyAmJiBvYmpLaW5kICE9PSAnQXJyYXknKSB7XG4gICAgcmV0dXJuIG9iaktpbmQ7XG4gIH1cblxuICB2YXIgc3RyID0gJyc7XG4gIHZhciBzdGFydCA9IC0xO1xuICB2YXIgbGVuZ3RoID0gMDtcblxuICBpZiAoaXNBcnJheShvYmplY3RPckFycmF5KSkge1xuICAgIGlmIChqc3hDaGlsZHJlblBhcmVudHMuaGFzKG9iamVjdE9yQXJyYXkpKSB7XG4gICAgICAvLyBQcmludCBKU1ggQ2hpbGRyZW5cbiAgICAgIHZhciB0eXBlID0ganN4Q2hpbGRyZW5QYXJlbnRzLmdldChvYmplY3RPckFycmF5KTtcbiAgICAgIHN0ciA9ICc8JyArIGRlc2NyaWJlRWxlbWVudFR5cGUodHlwZSkgKyAnPic7XG4gICAgICB2YXIgYXJyYXkgPSBvYmplY3RPckFycmF5O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldO1xuICAgICAgICB2YXIgc3Vic3RyID0gdm9pZCAwO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgc3Vic3RyID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1YnN0ciA9ICd7JyArIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHZhbHVlKSArICd9JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdWJzdHIgPSAneycgKyBkZXNjcmliZVZhbHVlRm9yRXJyb3JNZXNzYWdlKHZhbHVlKSArICd9JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnJyArIGkgPT09IGV4cGFuZGVkTmFtZSkge1xuICAgICAgICAgIHN0YXJ0ID0gc3RyLmxlbmd0aDtcbiAgICAgICAgICBsZW5ndGggPSBzdWJzdHIubGVuZ3RoO1xuICAgICAgICAgIHN0ciArPSBzdWJzdHI7XG4gICAgICAgIH0gZWxzZSBpZiAoc3Vic3RyLmxlbmd0aCA8IDE1ICYmIHN0ci5sZW5ndGggKyBzdWJzdHIubGVuZ3RoIDwgNDApIHtcbiAgICAgICAgICBzdHIgKz0gc3Vic3RyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciArPSAney4uLn0nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSAnPC8nICsgZGVzY3JpYmVFbGVtZW50VHlwZSh0eXBlKSArICc+JztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUHJpbnQgQXJyYXlcbiAgICAgIHN0ciA9ICdbJztcbiAgICAgIHZhciBfYXJyYXkgPSBvYmplY3RPckFycmF5O1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgX2FycmF5Lmxlbmd0aDsgX2krKykge1xuICAgICAgICBpZiAoX2kgPiAwKSB7XG4gICAgICAgICAgc3RyICs9ICcsICc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3ZhbHVlID0gX2FycmF5W19pXTtcblxuICAgICAgICB2YXIgX3N1YnN0ciA9IHZvaWQgMDtcblxuICAgICAgICBpZiAodHlwZW9mIF92YWx1ZSA9PT0gJ29iamVjdCcgJiYgX3ZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgX3N1YnN0ciA9IGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKF92YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3N1YnN0ciA9IGRlc2NyaWJlVmFsdWVGb3JFcnJvck1lc3NhZ2UoX3ZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnJyArIF9pID09PSBleHBhbmRlZE5hbWUpIHtcbiAgICAgICAgICBzdGFydCA9IHN0ci5sZW5ndGg7XG4gICAgICAgICAgbGVuZ3RoID0gX3N1YnN0ci5sZW5ndGg7XG4gICAgICAgICAgc3RyICs9IF9zdWJzdHI7XG4gICAgICAgIH0gZWxzZSBpZiAoX3N1YnN0ci5sZW5ndGggPCAxMCAmJiBzdHIubGVuZ3RoICsgX3N1YnN0ci5sZW5ndGggPCA0MCkge1xuICAgICAgICAgIHN0ciArPSBfc3Vic3RyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciArPSAnLi4uJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHIgKz0gJ10nO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAob2JqZWN0T3JBcnJheS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICBzdHIgPSAnPCcgKyBkZXNjcmliZUVsZW1lbnRUeXBlKG9iamVjdE9yQXJyYXkudHlwZSkgKyAnLz4nO1xuICAgIH0gZWxzZSBpZiAoanN4UHJvcHNQYXJlbnRzLmhhcyhvYmplY3RPckFycmF5KSkge1xuICAgICAgLy8gUHJpbnQgSlNYXG4gICAgICB2YXIgX3R5cGUgPSBqc3hQcm9wc1BhcmVudHMuZ2V0KG9iamVjdE9yQXJyYXkpO1xuXG4gICAgICBzdHIgPSAnPCcgKyAoZGVzY3JpYmVFbGVtZW50VHlwZShfdHlwZSkgfHwgJy4uLicpO1xuICAgICAgdmFyIG9iamVjdCA9IG9iamVjdE9yQXJyYXk7XG4gICAgICB2YXIgbmFtZXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBuYW1lcy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgIHN0ciArPSAnICc7XG4gICAgICAgIHZhciBuYW1lID0gbmFtZXNbX2kyXTtcbiAgICAgICAgc3RyICs9IGRlc2NyaWJlS2V5Rm9yRXJyb3JNZXNzYWdlKG5hbWUpICsgJz0nO1xuICAgICAgICB2YXIgX3ZhbHVlMiA9IG9iamVjdFtuYW1lXTtcblxuICAgICAgICB2YXIgX3N1YnN0cjIgPSB2b2lkIDA7XG5cbiAgICAgICAgaWYgKG5hbWUgPT09IGV4cGFuZGVkTmFtZSAmJiB0eXBlb2YgX3ZhbHVlMiA9PT0gJ29iamVjdCcgJiYgX3ZhbHVlMiAhPT0gbnVsbCkge1xuICAgICAgICAgIF9zdWJzdHIyID0gZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UoX3ZhbHVlMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3N1YnN0cjIgPSBkZXNjcmliZVZhbHVlRm9yRXJyb3JNZXNzYWdlKF92YWx1ZTIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfdmFsdWUyICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIF9zdWJzdHIyID0gJ3snICsgX3N1YnN0cjIgKyAnfSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmFtZSA9PT0gZXhwYW5kZWROYW1lKSB7XG4gICAgICAgICAgc3RhcnQgPSBzdHIubGVuZ3RoO1xuICAgICAgICAgIGxlbmd0aCA9IF9zdWJzdHIyLmxlbmd0aDtcbiAgICAgICAgICBzdHIgKz0gX3N1YnN0cjI7XG4gICAgICAgIH0gZWxzZSBpZiAoX3N1YnN0cjIubGVuZ3RoIDwgMTAgJiYgc3RyLmxlbmd0aCArIF9zdWJzdHIyLmxlbmd0aCA8IDQwKSB7XG4gICAgICAgICAgc3RyICs9IF9zdWJzdHIyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciArPSAnLi4uJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHIgKz0gJz4nO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcmludCBPYmplY3RcbiAgICAgIHN0ciA9ICd7JztcbiAgICAgIHZhciBfb2JqZWN0ID0gb2JqZWN0T3JBcnJheTtcblxuICAgICAgdmFyIF9uYW1lcyA9IE9iamVjdC5rZXlzKF9vYmplY3QpO1xuXG4gICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBfbmFtZXMubGVuZ3RoOyBfaTMrKykge1xuICAgICAgICBpZiAoX2kzID4gMCkge1xuICAgICAgICAgIHN0ciArPSAnLCAnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9uYW1lID0gX25hbWVzW19pM107XG4gICAgICAgIHN0ciArPSBkZXNjcmliZUtleUZvckVycm9yTWVzc2FnZShfbmFtZSkgKyAnOiAnO1xuICAgICAgICB2YXIgX3ZhbHVlMyA9IF9vYmplY3RbX25hbWVdO1xuXG4gICAgICAgIHZhciBfc3Vic3RyMyA9IHZvaWQgMDtcblxuICAgICAgICBpZiAodHlwZW9mIF92YWx1ZTMgPT09ICdvYmplY3QnICYmIF92YWx1ZTMgIT09IG51bGwpIHtcbiAgICAgICAgICBfc3Vic3RyMyA9IGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKF92YWx1ZTMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9zdWJzdHIzID0gZGVzY3JpYmVWYWx1ZUZvckVycm9yTWVzc2FnZShfdmFsdWUzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfbmFtZSA9PT0gZXhwYW5kZWROYW1lKSB7XG4gICAgICAgICAgc3RhcnQgPSBzdHIubGVuZ3RoO1xuICAgICAgICAgIGxlbmd0aCA9IF9zdWJzdHIzLmxlbmd0aDtcbiAgICAgICAgICBzdHIgKz0gX3N1YnN0cjM7XG4gICAgICAgIH0gZWxzZSBpZiAoX3N1YnN0cjMubGVuZ3RoIDwgMTAgJiYgc3RyLmxlbmd0aCArIF9zdWJzdHIzLmxlbmd0aCA8IDQwKSB7XG4gICAgICAgICAgc3RyICs9IF9zdWJzdHIzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciArPSAnLi4uJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHIgKz0gJ30nO1xuICAgIH1cbiAgfVxuXG4gIGlmIChleHBhbmRlZE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAoc3RhcnQgPiAtMSAmJiBsZW5ndGggPiAwKSB7XG4gICAgdmFyIGhpZ2hsaWdodCA9ICcgJy5yZXBlYXQoc3RhcnQpICsgJ14nLnJlcGVhdChsZW5ndGgpO1xuICAgIHJldHVybiAnXFxuICAnICsgc3RyICsgJ1xcbiAgJyArIGhpZ2hsaWdodDtcbiAgfVxuXG4gIHJldHVybiAnXFxuICAnICsgc3RyO1xufVxuXG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBrbm93blNlcnZlclJlZmVyZW5jZXMgPSBuZXcgV2Vha01hcCgpOyAvLyBTZXJpYWxpemFibGUgdmFsdWVzXG4vLyBUaGVuYWJsZTxSZWFjdFNlcnZlclZhbHVlPlxuLy8gZnVuY3Rpb24gc2VyaWFsaXplQnlWYWx1ZUlEKGlkOiBudW1iZXIpOiBzdHJpbmcge1xuLy8gICByZXR1cm4gJyQnICsgaWQudG9TdHJpbmcoMTYpO1xuLy8gfVxuXG5mdW5jdGlvbiBzZXJpYWxpemVQcm9taXNlSUQoaWQpIHtcbiAgcmV0dXJuICckQCcgKyBpZC50b1N0cmluZygxNik7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZVNlcnZlclJlZmVyZW5jZUlEKGlkKSB7XG4gIHJldHVybiAnJEYnICsgaWQudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVTeW1ib2xSZWZlcmVuY2UobmFtZSkge1xuICByZXR1cm4gJyRTJyArIG5hbWU7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUZvcm1EYXRhUmVmZXJlbmNlKGlkKSB7XG4gIC8vIFdoeSBLPyBGIGlzIFwiRnVuY3Rpb25cIi4gRCBpcyBcIkRhdGVcIi4gV2hhdCBlbHNlP1xuICByZXR1cm4gJyRLJyArIGlkLnRvU3RyaW5nKDE2KTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplTnVtYmVyKG51bWJlcikge1xuICBpZiAoTnVtYmVyLmlzRmluaXRlKG51bWJlcikpIHtcbiAgICBpZiAobnVtYmVyID09PSAwICYmIDEgLyBudW1iZXIgPT09IC1JbmZpbml0eSkge1xuICAgICAgcmV0dXJuICckLTAnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAobnVtYmVyID09PSBJbmZpbml0eSkge1xuICAgICAgcmV0dXJuICckSW5maW5pdHknO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAtSW5maW5pdHkpIHtcbiAgICAgIHJldHVybiAnJC1JbmZpbml0eSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJE5hTic7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZVVuZGVmaW5lZCgpIHtcbiAgcmV0dXJuICckdW5kZWZpbmVkJztcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplRGF0ZUZyb21EYXRlSlNPTihkYXRlSlNPTikge1xuICAvLyBKU09OLnN0cmluZ2lmeSBhdXRvbWF0aWNhbGx5IGNhbGxzIERhdGUucHJvdG90eXBlLnRvSlNPTiB3aGljaCBjYWxscyB0b0lTT1N0cmluZy5cbiAgLy8gV2UgbmVlZCBvbmx5IHRhY2sgb24gYSAkRCBwcmVmaXguXG4gIHJldHVybiAnJEQnICsgZGF0ZUpTT047XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUJpZ0ludChuKSB7XG4gIHJldHVybiAnJG4nICsgbi50b1N0cmluZygxMCk7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZU1hcElEKGlkKSB7XG4gIHJldHVybiAnJFEnICsgaWQudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVTZXRJRChpZCkge1xuICByZXR1cm4gJyRXJyArIGlkLnRvU3RyaW5nKDE2KTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlU3RyaW5nVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlWzBdID09PSAnJCcpIHtcbiAgICAvLyBXZSBuZWVkIHRvIGVzY2FwZSAkIHByZWZpeGVkIHN0cmluZ3Mgc2luY2Ugd2UgdXNlIHRob3NlIHRvIGVuY29kZVxuICAgIC8vIHJlZmVyZW5jZXMgdG8gSURzIGFuZCBhcyBzcGVjaWFsIHN5bWJvbCB2YWx1ZXMuXG4gICAgcmV0dXJuICckJyArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzUmVwbHkocm9vdCwgZm9ybUZpZWxkUHJlZml4LCByZXNvbHZlLCByZWplY3QpIHtcbiAgdmFyIG5leHRQYXJ0SWQgPSAxO1xuICB2YXIgcGVuZGluZ1BhcnRzID0gMDtcbiAgdmFyIGZvcm1EYXRhID0gbnVsbDtcblxuICBmdW5jdGlvbiByZXNvbHZlVG9KU09OKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpczsgLy8gTWFrZSBzdXJlIHRoYXQgYHBhcmVudFtrZXldYCB3YXNuJ3QgSlNPTmlmaWVkIGJlZm9yZSBgdmFsdWVgIHdhcyBwYXNzZWQgdG8gdXNcblxuICAgIHtcbiAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV1cbiAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gcGFyZW50W2tleV07XG5cbiAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxWYWx1ZSA9PT0gJ29iamVjdCcgJiYgb3JpZ2luYWxWYWx1ZSAhPT0gdmFsdWUgJiYgIShvcmlnaW5hbFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgaWYgKG9iamVjdE5hbWUob3JpZ2luYWxWYWx1ZSkgIT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgZXJyb3IoJ09ubHkgcGxhaW4gb2JqZWN0cyBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMgZnJvbSB0aGUgQ2xpZW50LiAnICsgJyVzIG9iamVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQuJXMnLCBvYmplY3ROYW1lKG9yaWdpbmFsVmFsdWUpLCBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZShwYXJlbnQsIGtleSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yKCdPbmx5IHBsYWluIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4gJyArICdPYmplY3RzIHdpdGggdG9KU09OIG1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQuIENvbnZlcnQgaXQgbWFudWFsbHkgJyArICd0byBhIHNpbXBsZSB2YWx1ZSBiZWZvcmUgcGFzc2luZyBpdCB0byBwcm9wcy4lcycsIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHBhcmVudCwga2V5KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG4gICAgICBpZiAodHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgYW55IG9iamVjdCB3aXRoIGEgLnRoZW4gcHJvcGVydHkgaXMgYSBcIlRoZW5hYmxlXCIgdHlwZSxcbiAgICAgICAgLy8gb3IgYSBQcm9taXNlIHR5cGUuIEVpdGhlciBvZiB3aGljaCBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgYSBQcm9taXNlLlxuICAgICAgICBpZiAoZm9ybURhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBVcGdyYWRlIHRvIHVzZSBGb3JtRGF0YSB0byBhbGxvdyB1cyB0byBzdHJlYW0gdGhpcyB2YWx1ZS5cbiAgICAgICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVuZGluZ1BhcnRzKys7XG4gICAgICAgIHZhciBwcm9taXNlSWQgPSBuZXh0UGFydElkKys7XG4gICAgICAgIHZhciB0aGVuYWJsZSA9IHZhbHVlO1xuICAgICAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChwYXJ0VmFsdWUpIHtcbiAgICAgICAgICB2YXIgcGFydEpTT04gPSBKU09OLnN0cmluZ2lmeShwYXJ0VmFsdWUsIHJlc29sdmVUb0pTT04pOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBXZSBrbm93IGl0J3Mgbm90IG51bGwgYmVjYXVzZSB3ZSBhc3NpZ25lZCBpdCBhYm92ZS5cblxuICAgICAgICAgIHZhciBkYXRhID0gZm9ybURhdGE7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuXG4gICAgICAgICAgZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgcHJvbWlzZUlkLCBwYXJ0SlNPTik7XG4gICAgICAgICAgcGVuZGluZ1BhcnRzLS07XG5cbiAgICAgICAgICBpZiAocGVuZGluZ1BhcnRzID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIC8vIEluIHRoZSBmdXR1cmUgd2UgY291bGQgY29uc2lkZXIgc2VyaWFsaXppbmcgdGhpcyBhcyBhbiBlcnJvclxuICAgICAgICAgIC8vIHRoYXQgdGhyb3dzIG9uIHRoZSBzZXJ2ZXIgaW5zdGVhZC5cbiAgICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVQcm9taXNlSUQocHJvbWlzZUlkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSAvLyBUT0RPOiBTaG91bGQgd2UgdGhlIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCgpIHRvIHRlc3QgZm9yIGNyb3NzLXJlYWxtIG9iamVjdHM/XG5cblxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgaWYgKGZvcm1EYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVXBncmFkZSB0byB1c2UgRm9ybURhdGEgdG8gYWxsb3cgdXMgdG8gdXNlIHJpY2ggb2JqZWN0cyBhcyBpdHMgdmFsdWVzLlxuICAgICAgICAgIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgICB2YXIgcmVmSWQgPSBuZXh0UGFydElkKys7IC8vIENvcHkgYWxsIHRoZSBmb3JtIGZpZWxkcyB3aXRoIGEgcHJlZml4IGZvciB0aGlzIHJlZmVyZW5jZS5cbiAgICAgICAgLy8gVGhlc2UgbXVzdCBjb21lIGZpcnN0IGluIHRoZSBmb3JtIG9yZGVyIGJlY2F1c2Ugd2UgYXNzdW1lIHRoYXQgYWxsIHRoZVxuICAgICAgICAvLyBmaWVsZHMgYXJlIGF2YWlsYWJsZSBiZWZvcmUgdGhpcyBpcyByZWZlcmVuY2VkLlxuXG4gICAgICAgIHZhciBwcmVmaXggPSBmb3JtRmllbGRQcmVmaXggKyByZWZJZCArICdfJzsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBGb3JtRGF0YSBoYXMgZm9yRWFjaC5cblxuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChvcmlnaW5hbFZhbHVlLCBvcmlnaW5hbEtleSkge1xuICAgICAgICAgIGRhdGEuYXBwZW5kKHByZWZpeCArIG9yaWdpbmFsS2V5LCBvcmlnaW5hbFZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVGb3JtRGF0YVJlZmVyZW5jZShyZWZJZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICB2YXIgcGFydEpTT04gPSBKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHZhbHVlKSwgcmVzb2x2ZVRvSlNPTik7XG5cbiAgICAgICAgaWYgKGZvcm1EYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtYXBJZCA9IG5leHRQYXJ0SWQrKztcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIG1hcElkLCBwYXJ0SlNPTik7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVNYXBJRChtYXBJZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICB2YXIgX3BhcnRKU09OID0gSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbSh2YWx1ZSksIHJlc29sdmVUb0pTT04pO1xuXG4gICAgICAgIGlmIChmb3JtRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICAgIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2V0SWQgPSBuZXh0UGFydElkKys7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBzZXRJZCwgX3BhcnRKU09OKTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVNldElEKHNldElkKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHZhbHVlKTtcblxuICAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odmFsdWUpO1xuICAgICAgfSAvLyBWZXJpZnkgdGhhdCB0aGlzIGlzIGEgc2ltcGxlIHBsYWluIG9iamVjdC5cblxuXG4gICAgICB2YXIgcHJvdG8gPSBnZXRQcm90b3R5cGVPZih2YWx1ZSk7XG5cbiAgICAgIGlmIChwcm90byAhPT0gT2JqZWN0UHJvdG90eXBlICYmIChwcm90byA9PT0gbnVsbCB8fCBnZXRQcm90b3R5cGVPZihwcm90bykgIT09IG51bGwpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBwbGFpbiBvYmplY3RzLCBhbmQgYSBmZXcgYnVpbHQtaW5zLCBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBBY3Rpb25zLiAnICsgJ0NsYXNzZXMgb3IgbnVsbCBwcm90b3R5cGVzIGFyZSBub3Qgc3VwcG9ydGVkLicpO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmICh2YWx1ZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IEVsZW1lbnQgY2Fubm90IGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4lcycsIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHBhcmVudCwga2V5KSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgIGVycm9yKCdSZWFjdCBMYXp5IGNhbm5vdCBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQuJXMnLCBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZShwYXJlbnQsIGtleSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IENvbnRleHQgUHJvdmlkZXJzIGNhbm5vdCBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQuJXMnLCBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZShwYXJlbnQsIGtleSkpO1xuICAgICAgICB9IGVsc2UgaWYgKG9iamVjdE5hbWUodmFsdWUpICE9PSAnT2JqZWN0Jykge1xuICAgICAgICAgIGVycm9yKCdPbmx5IHBsYWluIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4gJyArICclcyBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkLiVzJywgb2JqZWN0TmFtZSh2YWx1ZSksIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHBhcmVudCwga2V5KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzU2ltcGxlT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGVycm9yKCdPbmx5IHBsYWluIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4gJyArICdDbGFzc2VzIG9yIG90aGVyIG9iamVjdHMgd2l0aCBtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkLiVzJywgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UocGFyZW50LCBrZXkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbHVlKTtcblxuICAgICAgICAgIGlmIChzeW1ib2xzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVycm9yKCdPbmx5IHBsYWluIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4gJyArICdPYmplY3RzIHdpdGggc3ltYm9sIHByb3BlcnRpZXMgbGlrZSAlcyBhcmUgbm90IHN1cHBvcnRlZC4lcycsIHN5bWJvbHNbMF0uZGVzY3JpcHRpb24sIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHBhcmVudCwga2V5KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cblxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRPRE86IE1heWJlIHRvbyBjbGV2ZXIuIElmIHdlIHN1cHBvcnQgVVJMIHRoZXJlJ3Mgbm8gc2ltaWxhciB0cmljay5cbiAgICAgIGlmICh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSA9PT0gJ1onKSB7XG4gICAgICAgIC8vIFBvc3NpYmx5IGEgRGF0ZSwgd2hvc2UgdG9KU09OIGF1dG9tYXRpY2FsbHkgY2FsbHMgdG9JU09TdHJpbmdcbiAgICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdXNlXVxuICAgICAgICB2YXIgX29yaWdpbmFsVmFsdWUgPSBwYXJlbnRba2V5XTtcblxuICAgICAgICBpZiAoX29yaWdpbmFsVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZURhdGVGcm9tRGF0ZUpTT04odmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlc2NhcGVTdHJpbmdWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemVOdW1iZXIodmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplVW5kZWZpbmVkKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIG1ldGFEYXRhID0ga25vd25TZXJ2ZXJSZWZlcmVuY2VzLmdldCh2YWx1ZSk7XG5cbiAgICAgIGlmIChtZXRhRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBtZXRhRGF0YUpTT04gPSBKU09OLnN0cmluZ2lmeShtZXRhRGF0YSwgcmVzb2x2ZVRvSlNPTik7XG5cbiAgICAgICAgaWYgKGZvcm1EYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVXBncmFkZSB0byB1c2UgRm9ybURhdGEgdG8gYWxsb3cgdXMgdG8gc3RyZWFtIHRoaXMgdmFsdWUuXG4gICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgfSAvLyBUaGUgcmVmZXJlbmNlIHRvIHRoaXMgZnVuY3Rpb24gY2FtZSBmcm9tIHRoZSBzYW1lIGNsaWVudCBzbyB3ZSBjYW4gcGFzcyBpdCBiYWNrLlxuXG5cbiAgICAgICAgdmFyIF9yZWZJZCA9IG5leHRQYXJ0SWQrKzsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG5cblxuICAgICAgICBmb3JtRGF0YS5zZXQoZm9ybUZpZWxkUHJlZml4ICsgX3JlZklkLCBtZXRhRGF0YUpTT04pO1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplU2VydmVyUmVmZXJlbmNlSUQoX3JlZklkKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQgRnVuY3Rpb25zIGNhbm5vdCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gU2VydmVyIEZ1bmN0aW9ucy4gJyArICdPbmx5IEZ1bmN0aW9ucyBwYXNzZWQgZnJvbSB0aGUgU2VydmVyIGNhbiBiZSBwYXNzZWQgYmFjayBhZ2Fpbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gYGRlc2NyaXB0aW9uYCBtaWdodCBiZSB1bmRlZmluZWRcbiAgICAgIHZhciBuYW1lID0gdmFsdWUuZGVzY3JpcHRpb247XG5cbiAgICAgIGlmIChTeW1ib2wuZm9yKG5hbWUpICE9PSB2YWx1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgZ2xvYmFsIHN5bWJvbHMgcmVjZWl2ZWQgZnJvbSBTeW1ib2wuZm9yKC4uLikgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zLiAnICsgKFwiVGhlIHN5bWJvbCBTeW1ib2wuZm9yKFwiICsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gYGRlc2NyaXB0aW9uYCBtaWdodCBiZSB1bmRlZmluZWRcbiAgICAgICAgdmFsdWUuZGVzY3JpcHRpb24gKyBcIikgY2Fubm90IGJlIGZvdW5kIGFtb25nIGdsb2JhbCBzeW1ib2xzLlwiKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXJpYWxpemVTeW1ib2xSZWZlcmVuY2UobmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemVCaWdJbnQodmFsdWUpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIlR5cGUgXCIgKyB0eXBlb2YgdmFsdWUgKyBcIiBpcyBub3Qgc3VwcG9ydGVkIGFzIGFuIGFyZ3VtZW50IHRvIGEgU2VydmVyIEZ1bmN0aW9uLlwiKTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBpdCdzIG5vdCBnb2luZyB0byBiZSB1bmRlZmluZWQgYmVjYXVzZSB3ZSdsbCBlbmNvZGUgaXQuXG5cblxuICB2YXIganNvbiA9IEpTT04uc3RyaW5naWZ5KHJvb3QsIHJlc29sdmVUb0pTT04pO1xuXG4gIGlmIChmb3JtRGF0YSA9PT0gbnVsbCkge1xuICAgIC8vIElmIGl0J3MgYSBzaW1wbGUgZGF0YSBzdHJ1Y3R1cmUsIHdlIGp1c3QgdXNlIHBsYWluIEpTT04uXG4gICAgcmVzb2x2ZShqc29uKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UsIHdlIHVzZSBGb3JtRGF0YSB0byBsZXQgdXMgc3RyZWFtIGluIHRoZSByZXN1bHQuXG4gICAgZm9ybURhdGEuc2V0KGZvcm1GaWVsZFByZWZpeCArICcwJywganNvbik7XG5cbiAgICBpZiAocGVuZGluZ1BhcnRzID09PSAwKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXSB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gcmVmaW5lZC5cbiAgICAgIHJlc29sdmUoZm9ybURhdGEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWdpc3RlclNlcnZlclJlZmVyZW5jZShwcm94eSwgcmVmZXJlbmNlKSB7XG5cbiAga25vd25TZXJ2ZXJSZWZlcmVuY2VzLnNldChwcm94eSwgcmVmZXJlbmNlKTtcbn0gLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuXG5mdW5jdGlvbiBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2UoaWQsIGNhbGxTZXJ2ZXIpIHtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGNhbGxTZXJ2ZXIoaWQsIGFyZ3MpO1xuICB9O1xuXG4gIHJlZ2lzdGVyU2VydmVyUmVmZXJlbmNlKHByb3h5LCB7XG4gICAgaWQ6IGlkLFxuICAgIGJvdW5kOiBudWxsXG4gIH0pO1xuICByZXR1cm4gcHJveHk7XG59XG5cbnZhciBDb250ZXh0UmVnaXN0cnkgPSBSZWFjdFNoYXJlZEludGVybmFscy5Db250ZXh0UmVnaXN0cnk7XG5mdW5jdGlvbiBnZXRPckNyZWF0ZVNlcnZlckNvbnRleHQoZ2xvYmFsTmFtZSkge1xuICBpZiAoIUNvbnRleHRSZWdpc3RyeVtnbG9iYWxOYW1lXSkge1xuICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX1NFUlZFUl9DT05URVhUX1RZUEUsXG4gICAgICAvLyBBcyBhIHdvcmthcm91bmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IHJlbmRlcmVycywgd2UgY2F0ZWdvcml6ZVxuICAgICAgLy8gc29tZSByZW5kZXJlcnMgYXMgcHJpbWFyeSBhbmQgb3RoZXJzIGFzIHNlY29uZGFyeS4gV2Ugb25seSBleHBlY3RcbiAgICAgIC8vIHRoZXJlIHRvIGJlIHR3byBjb25jdXJyZW50IHJlbmRlcmVycyBhdCBtb3N0OiBSZWFjdCBOYXRpdmUgKHByaW1hcnkpIGFuZFxuICAgICAgLy8gRmFicmljIChzZWNvbmRhcnkpOyBSZWFjdCBET00gKHByaW1hcnkpIGFuZCBSZWFjdCBBUlQgKHNlY29uZGFyeSkuXG4gICAgICAvLyBTZWNvbmRhcnkgcmVuZGVyZXJzIHN0b3JlIHRoZWlyIGNvbnRleHQgdmFsdWVzIG9uIHNlcGFyYXRlIGZpZWxkcy5cbiAgICAgIF9jdXJyZW50VmFsdWU6IFJFQUNUX1NFUlZFUl9DT05URVhUX0RFRkFVTFRfVkFMVUVfTk9UX0xPQURFRCxcbiAgICAgIF9jdXJyZW50VmFsdWUyOiBSRUFDVF9TRVJWRVJfQ09OVEVYVF9ERUZBVUxUX1ZBTFVFX05PVF9MT0FERUQsXG4gICAgICBfZGVmYXVsdFZhbHVlOiBSRUFDVF9TRVJWRVJfQ09OVEVYVF9ERUZBVUxUX1ZBTFVFX05PVF9MT0FERUQsXG4gICAgICAvLyBVc2VkIHRvIHRyYWNrIGhvdyBtYW55IGNvbmN1cnJlbnQgcmVuZGVyZXJzIHRoaXMgY29udGV4dCBjdXJyZW50bHlcbiAgICAgIC8vIHN1cHBvcnRzIHdpdGhpbiBpbiBhIHNpbmdsZSByZW5kZXJlci4gU3VjaCBhcyBwYXJhbGxlbCBzZXJ2ZXIgcmVuZGVyaW5nLlxuICAgICAgX3RocmVhZENvdW50OiAwLFxuICAgICAgLy8gVGhlc2UgYXJlIGNpcmN1bGFyXG4gICAgICBQcm92aWRlcjogbnVsbCxcbiAgICAgIENvbnN1bWVyOiBudWxsLFxuICAgICAgX2dsb2JhbE5hbWU6IGdsb2JhbE5hbWVcbiAgICB9O1xuICAgIGNvbnRleHQuUHJvdmlkZXIgPSB7XG4gICAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0XG4gICAgfTtcblxuICAgIHtcbiAgICAgIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXI7XG4gICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSBudWxsO1xuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9IG51bGw7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb250ZXh0LCB7XG4gICAgICAgIENvbnN1bWVyOiB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lcikge1xuICAgICAgICAgICAgICBlcnJvcignQ29uc3VtZXIgcGF0dGVybiBpcyBub3Qgc3VwcG9ydGVkIGJ5IFJlYWN0U2VydmVyQ29udGV4dCcpO1xuXG4gICAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgQ29udGV4dFJlZ2lzdHJ5W2dsb2JhbE5hbWVdID0gY29udGV4dDtcbiAgfVxuXG4gIHJldHVybiBDb250ZXh0UmVnaXN0cnlbZ2xvYmFsTmFtZV07XG59XG5cbnZhciBST1dfSUQgPSAwO1xudmFyIFJPV19UQUcgPSAxO1xudmFyIFJPV19MRU5HVEggPSAyO1xudmFyIFJPV19DSFVOS19CWV9ORVdMSU5FID0gMztcbnZhciBST1dfQ0hVTktfQllfTEVOR1RIID0gNDtcbnZhciBQRU5ESU5HID0gJ3BlbmRpbmcnO1xudmFyIEJMT0NLRUQgPSAnYmxvY2tlZCc7XG52YXIgQ1lDTElDID0gJ2N5Y2xpYyc7XG52YXIgUkVTT0xWRURfTU9ERUwgPSAncmVzb2x2ZWRfbW9kZWwnO1xudmFyIFJFU09MVkVEX01PRFVMRSA9ICdyZXNvbHZlZF9tb2R1bGUnO1xudmFyIElOSVRJQUxJWkVEID0gJ2Z1bGZpbGxlZCc7XG52YXIgRVJST1JFRCA9ICdyZWplY3RlZCc7IC8vICRGbG93Rml4TWVbbWlzc2luZy10aGlzLWFubm90XVxuXG5mdW5jdGlvbiBDaHVuayhzdGF0dXMsIHZhbHVlLCByZWFzb24sIHJlc3BvbnNlKSB7XG4gIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIHRoaXMucmVhc29uID0gcmVhc29uO1xuICB0aGlzLl9yZXNwb25zZSA9IHJlc3BvbnNlO1xufSAvLyBXZSBzdWJjbGFzcyBQcm9taXNlLnByb3RvdHlwZSBzbyB0aGF0IHdlIGdldCBvdGhlciBtZXRob2RzIGxpa2UgLmNhdGNoXG5cblxuQ2h1bmsucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQcm9taXNlLnByb3RvdHlwZSk7IC8vIFRPRE86IFRoaXMgZG9lc24ndCByZXR1cm4gYSBuZXcgUHJvbWlzZSBjaGFpbiB1bmxpa2UgdGhlIHJlYWwgLnRoZW5cblxuQ2h1bmsucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gIHZhciBjaHVuayA9IHRoaXM7IC8vIElmIHdlIGhhdmUgcmVzb2x2ZWQgY29udGVudCwgd2UgdHJ5IHRvIGluaXRpYWxpemUgaXQgZmlyc3Qgd2hpY2hcbiAgLy8gbWlnaHQgcHV0IHVzIGJhY2sgaW50byBvbmUgb2YgdGhlIG90aGVyIHN0YXRlcy5cblxuICBzd2l0Y2ggKGNodW5rLnN0YXR1cykge1xuICAgIGNhc2UgUkVTT0xWRURfTU9ERUw6XG4gICAgICBpbml0aWFsaXplTW9kZWxDaHVuayhjaHVuayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgUkVTT0xWRURfTU9EVUxFOlxuICAgICAgaW5pdGlhbGl6ZU1vZHVsZUNodW5rKGNodW5rKTtcbiAgICAgIGJyZWFrO1xuICB9IC8vIFRoZSBzdGF0dXMgbWlnaHQgaGF2ZSBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9uLlxuXG5cbiAgc3dpdGNoIChjaHVuay5zdGF0dXMpIHtcbiAgICBjYXNlIElOSVRJQUxJWkVEOlxuICAgICAgcmVzb2x2ZShjaHVuay52YWx1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgUEVORElORzpcbiAgICBjYXNlIEJMT0NLRUQ6XG4gICAgY2FzZSBDWUNMSUM6XG4gICAgICBpZiAocmVzb2x2ZSkge1xuICAgICAgICBpZiAoY2h1bmsudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICBjaHVuay52YWx1ZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY2h1bmsudmFsdWUucHVzaChyZXNvbHZlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlamVjdCkge1xuICAgICAgICBpZiAoY2h1bmsucmVhc29uID09PSBudWxsKSB7XG4gICAgICAgICAgY2h1bmsucmVhc29uID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuay5yZWFzb24ucHVzaChyZWplY3QpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZWplY3QoY2h1bmsucmVhc29uKTtcbiAgICAgIGJyZWFrO1xuICB9XG59O1xuXG5mdW5jdGlvbiByZWFkQ2h1bmsoY2h1bmspIHtcbiAgLy8gSWYgd2UgaGF2ZSByZXNvbHZlZCBjb250ZW50LCB3ZSB0cnkgdG8gaW5pdGlhbGl6ZSBpdCBmaXJzdCB3aGljaFxuICAvLyBtaWdodCBwdXQgdXMgYmFjayBpbnRvIG9uZSBvZiB0aGUgb3RoZXIgc3RhdGVzLlxuICBzd2l0Y2ggKGNodW5rLnN0YXR1cykge1xuICAgIGNhc2UgUkVTT0xWRURfTU9ERUw6XG4gICAgICBpbml0aWFsaXplTW9kZWxDaHVuayhjaHVuayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgUkVTT0xWRURfTU9EVUxFOlxuICAgICAgaW5pdGlhbGl6ZU1vZHVsZUNodW5rKGNodW5rKTtcbiAgICAgIGJyZWFrO1xuICB9IC8vIFRoZSBzdGF0dXMgbWlnaHQgaGF2ZSBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9uLlxuXG5cbiAgc3dpdGNoIChjaHVuay5zdGF0dXMpIHtcbiAgICBjYXNlIElOSVRJQUxJWkVEOlxuICAgICAgcmV0dXJuIGNodW5rLnZhbHVlO1xuXG4gICAgY2FzZSBQRU5ESU5HOlxuICAgIGNhc2UgQkxPQ0tFRDpcbiAgICBjYXNlIENZQ0xJQzpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gICAgICB0aHJvdyBjaHVuaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBjaHVuay5yZWFzb247XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Um9vdChyZXNwb25zZSkge1xuICB2YXIgY2h1bmsgPSBnZXRDaHVuayhyZXNwb25zZSwgMCk7XG4gIHJldHVybiBjaHVuaztcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGVuZGluZ0NodW5rKHJlc3BvbnNlKSB7XG4gIC8vICRGbG93Rml4TWVbaW52YWxpZC1jb25zdHJ1Y3Rvcl0gRmxvdyBkb2Vzbid0IHN1cHBvcnQgZnVuY3Rpb25zIGFzIGNvbnN0cnVjdG9yc1xuICByZXR1cm4gbmV3IENodW5rKFBFTkRJTkcsIG51bGwsIG51bGwsIHJlc3BvbnNlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmxvY2tlZENodW5rKHJlc3BvbnNlKSB7XG4gIC8vICRGbG93Rml4TWVbaW52YWxpZC1jb25zdHJ1Y3Rvcl0gRmxvdyBkb2Vzbid0IHN1cHBvcnQgZnVuY3Rpb25zIGFzIGNvbnN0cnVjdG9yc1xuICByZXR1cm4gbmV3IENodW5rKEJMT0NLRUQsIG51bGwsIG51bGwsIHJlc3BvbnNlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JDaHVuayhyZXNwb25zZSwgZXJyb3IpIHtcbiAgLy8gJEZsb3dGaXhNZVtpbnZhbGlkLWNvbnN0cnVjdG9yXSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCBmdW5jdGlvbnMgYXMgY29uc3RydWN0b3JzXG4gIHJldHVybiBuZXcgQ2h1bmsoRVJST1JFRCwgbnVsbCwgZXJyb3IsIHJlc3BvbnNlKTtcbn1cblxuZnVuY3Rpb24gd2FrZUNodW5rKGxpc3RlbmVycywgdmFsdWUpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgbGlzdGVuZXIodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdha2VDaHVua0lmSW5pdGlhbGl6ZWQoY2h1bmssIHJlc29sdmVMaXN0ZW5lcnMsIHJlamVjdExpc3RlbmVycykge1xuICBzd2l0Y2ggKGNodW5rLnN0YXR1cykge1xuICAgIGNhc2UgSU5JVElBTElaRUQ6XG4gICAgICB3YWtlQ2h1bmsocmVzb2x2ZUxpc3RlbmVycywgY2h1bmsudmFsdWUpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFBFTkRJTkc6XG4gICAgY2FzZSBCTE9DS0VEOlxuICAgIGNhc2UgQ1lDTElDOlxuICAgICAgY2h1bmsudmFsdWUgPSByZXNvbHZlTGlzdGVuZXJzO1xuICAgICAgY2h1bmsucmVhc29uID0gcmVqZWN0TGlzdGVuZXJzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEVSUk9SRUQ6XG4gICAgICBpZiAocmVqZWN0TGlzdGVuZXJzKSB7XG4gICAgICAgIHdha2VDaHVuayhyZWplY3RMaXN0ZW5lcnMsIGNodW5rLnJlYXNvbik7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXJFcnJvck9uQ2h1bmsoY2h1bmssIGVycm9yKSB7XG4gIGlmIChjaHVuay5zdGF0dXMgIT09IFBFTkRJTkcgJiYgY2h1bmsuc3RhdHVzICE9PSBCTE9DS0VEKSB7XG4gICAgLy8gV2UgYWxyZWFkeSByZXNvbHZlZC4gV2UgZGlkbid0IGV4cGVjdCB0byBzZWUgdGhpcy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gY2h1bmsucmVhc29uO1xuICB2YXIgZXJyb3JlZENodW5rID0gY2h1bms7XG4gIGVycm9yZWRDaHVuay5zdGF0dXMgPSBFUlJPUkVEO1xuICBlcnJvcmVkQ2h1bmsucmVhc29uID0gZXJyb3I7XG5cbiAgaWYgKGxpc3RlbmVycyAhPT0gbnVsbCkge1xuICAgIHdha2VDaHVuayhsaXN0ZW5lcnMsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNvbHZlZE1vZGVsQ2h1bmsocmVzcG9uc2UsIHZhbHVlKSB7XG4gIC8vICRGbG93Rml4TWVbaW52YWxpZC1jb25zdHJ1Y3Rvcl0gRmxvdyBkb2Vzbid0IHN1cHBvcnQgZnVuY3Rpb25zIGFzIGNvbnN0cnVjdG9yc1xuICByZXR1cm4gbmV3IENodW5rKFJFU09MVkVEX01PREVMLCB2YWx1ZSwgbnVsbCwgcmVzcG9uc2UpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNvbHZlZE1vZHVsZUNodW5rKHJlc3BvbnNlLCB2YWx1ZSkge1xuICAvLyAkRmxvd0ZpeE1lW2ludmFsaWQtY29uc3RydWN0b3JdIEZsb3cgZG9lc24ndCBzdXBwb3J0IGZ1bmN0aW9ucyBhcyBjb25zdHJ1Y3RvcnNcbiAgcmV0dXJuIG5ldyBDaHVuayhSRVNPTFZFRF9NT0RVTEUsIHZhbHVlLCBudWxsLCByZXNwb25zZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUluaXRpYWxpemVkVGV4dENodW5rKHJlc3BvbnNlLCB2YWx1ZSkge1xuICAvLyAkRmxvd0ZpeE1lW2ludmFsaWQtY29uc3RydWN0b3JdIEZsb3cgZG9lc24ndCBzdXBwb3J0IGZ1bmN0aW9ucyBhcyBjb25zdHJ1Y3RvcnNcbiAgcmV0dXJuIG5ldyBDaHVuayhJTklUSUFMSVpFRCwgdmFsdWUsIG51bGwsIHJlc3BvbnNlKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1vZGVsQ2h1bmsoY2h1bmssIHZhbHVlKSB7XG4gIGlmIChjaHVuay5zdGF0dXMgIT09IFBFTkRJTkcpIHtcbiAgICAvLyBXZSBhbHJlYWR5IHJlc29sdmVkLiBXZSBkaWRuJ3QgZXhwZWN0IHRvIHNlZSB0aGlzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciByZXNvbHZlTGlzdGVuZXJzID0gY2h1bmsudmFsdWU7XG4gIHZhciByZWplY3RMaXN0ZW5lcnMgPSBjaHVuay5yZWFzb247XG4gIHZhciByZXNvbHZlZENodW5rID0gY2h1bms7XG4gIHJlc29sdmVkQ2h1bmsuc3RhdHVzID0gUkVTT0xWRURfTU9ERUw7XG4gIHJlc29sdmVkQ2h1bmsudmFsdWUgPSB2YWx1ZTtcblxuICBpZiAocmVzb2x2ZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdW5mb3J0dW5hdGUgdGhhdCB3ZSdyZSByZWFkaW5nIHRoaXMgZWFnZXJseSBpZlxuICAgIC8vIHdlIGFscmVhZHkgaGF2ZSBsaXN0ZW5lcnMgYXR0YWNoZWQgc2luY2UgdGhleSBtaWdodCBub1xuICAgIC8vIGxvbmdlciBiZSByZW5kZXJlZCBvciBtaWdodCBub3QgYmUgdGhlIGhpZ2hlc3QgcHJpLlxuICAgIGluaXRpYWxpemVNb2RlbENodW5rKHJlc29sdmVkQ2h1bmspOyAvLyBUaGUgc3RhdHVzIG1pZ2h0IGhhdmUgY2hhbmdlZCBhZnRlciBpbml0aWFsaXphdGlvbi5cblxuICAgIHdha2VDaHVua0lmSW5pdGlhbGl6ZWQoY2h1bmssIHJlc29sdmVMaXN0ZW5lcnMsIHJlamVjdExpc3RlbmVycyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1vZHVsZUNodW5rKGNodW5rLCB2YWx1ZSkge1xuICBpZiAoY2h1bmsuc3RhdHVzICE9PSBQRU5ESU5HICYmIGNodW5rLnN0YXR1cyAhPT0gQkxPQ0tFRCkge1xuICAgIC8vIFdlIGFscmVhZHkgcmVzb2x2ZWQuIFdlIGRpZG4ndCBleHBlY3QgdG8gc2VlIHRoaXMuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHJlc29sdmVMaXN0ZW5lcnMgPSBjaHVuay52YWx1ZTtcbiAgdmFyIHJlamVjdExpc3RlbmVycyA9IGNodW5rLnJlYXNvbjtcbiAgdmFyIHJlc29sdmVkQ2h1bmsgPSBjaHVuaztcbiAgcmVzb2x2ZWRDaHVuay5zdGF0dXMgPSBSRVNPTFZFRF9NT0RVTEU7XG4gIHJlc29sdmVkQ2h1bmsudmFsdWUgPSB2YWx1ZTtcblxuICBpZiAocmVzb2x2ZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuICAgIGluaXRpYWxpemVNb2R1bGVDaHVuayhyZXNvbHZlZENodW5rKTtcbiAgICB3YWtlQ2h1bmtJZkluaXRpYWxpemVkKGNodW5rLCByZXNvbHZlTGlzdGVuZXJzLCByZWplY3RMaXN0ZW5lcnMpO1xuICB9XG59XG5cbnZhciBpbml0aWFsaXppbmdDaHVuayA9IG51bGw7XG52YXIgaW5pdGlhbGl6aW5nQ2h1bmtCbG9ja2VkTW9kZWwgPSBudWxsO1xuXG5mdW5jdGlvbiBpbml0aWFsaXplTW9kZWxDaHVuayhjaHVuaykge1xuICB2YXIgcHJldkNodW5rID0gaW5pdGlhbGl6aW5nQ2h1bms7XG4gIHZhciBwcmV2QmxvY2tlZCA9IGluaXRpYWxpemluZ0NodW5rQmxvY2tlZE1vZGVsO1xuICBpbml0aWFsaXppbmdDaHVuayA9IGNodW5rO1xuICBpbml0aWFsaXppbmdDaHVua0Jsb2NrZWRNb2RlbCA9IG51bGw7XG4gIHZhciByZXNvbHZlZE1vZGVsID0gY2h1bmsudmFsdWU7IC8vIFdlIGdvIHRvIHRoZSBDWUNMSUMgc3RhdGUgdW50aWwgd2UndmUgZnVsbHkgcmVzb2x2ZWQgdGhpcy5cbiAgLy8gV2UgZG8gdGhpcyBiZWZvcmUgcGFyc2luZyBpbiBjYXNlIHdlIHRyeSB0byBpbml0aWFsaXplIHRoZSBzYW1lIGNodW5rXG4gIC8vIHdoaWxlIHBhcnNpbmcgdGhlIG1vZGVsLiBTdWNoIGFzIGluIGEgY3ljbGljIHJlZmVyZW5jZS5cblxuICB2YXIgY3ljbGljQ2h1bmsgPSBjaHVuaztcbiAgY3ljbGljQ2h1bmsuc3RhdHVzID0gQ1lDTElDO1xuICBjeWNsaWNDaHVuay52YWx1ZSA9IG51bGw7XG4gIGN5Y2xpY0NodW5rLnJlYXNvbiA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICB2YXIgdmFsdWUgPSBwYXJzZU1vZGVsKGNodW5rLl9yZXNwb25zZSwgcmVzb2x2ZWRNb2RlbCk7XG5cbiAgICBpZiAoaW5pdGlhbGl6aW5nQ2h1bmtCbG9ja2VkTW9kZWwgIT09IG51bGwgJiYgaW5pdGlhbGl6aW5nQ2h1bmtCbG9ja2VkTW9kZWwuZGVwcyA+IDApIHtcbiAgICAgIGluaXRpYWxpemluZ0NodW5rQmxvY2tlZE1vZGVsLnZhbHVlID0gdmFsdWU7IC8vIFdlIGRpc2NvdmVyZWQgbmV3IGRlcGVuZGVuY2llcyBvbiBtb2R1bGVzIHRoYXQgYXJlIG5vdCB5ZXQgcmVzb2x2ZWQuXG4gICAgICAvLyBXZSBoYXZlIHRvIGdvIHRoZSBCTE9DS0VEIHN0YXRlIHVudGlsIHRoZXkncmUgcmVzb2x2ZWQuXG5cbiAgICAgIHZhciBibG9ja2VkQ2h1bmsgPSBjaHVuaztcbiAgICAgIGJsb2NrZWRDaHVuay5zdGF0dXMgPSBCTE9DS0VEO1xuICAgICAgYmxvY2tlZENodW5rLnZhbHVlID0gbnVsbDtcbiAgICAgIGJsb2NrZWRDaHVuay5yZWFzb24gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzb2x2ZUxpc3RlbmVycyA9IGN5Y2xpY0NodW5rLnZhbHVlO1xuICAgICAgdmFyIGluaXRpYWxpemVkQ2h1bmsgPSBjaHVuaztcbiAgICAgIGluaXRpYWxpemVkQ2h1bmsuc3RhdHVzID0gSU5JVElBTElaRUQ7XG4gICAgICBpbml0aWFsaXplZENodW5rLnZhbHVlID0gdmFsdWU7XG5cbiAgICAgIGlmIChyZXNvbHZlTGlzdGVuZXJzICE9PSBudWxsKSB7XG4gICAgICAgIHdha2VDaHVuayhyZXNvbHZlTGlzdGVuZXJzLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHZhciBlcnJvcmVkQ2h1bmsgPSBjaHVuaztcbiAgICBlcnJvcmVkQ2h1bmsuc3RhdHVzID0gRVJST1JFRDtcbiAgICBlcnJvcmVkQ2h1bmsucmVhc29uID0gZXJyb3I7XG4gIH0gZmluYWxseSB7XG4gICAgaW5pdGlhbGl6aW5nQ2h1bmsgPSBwcmV2Q2h1bms7XG4gICAgaW5pdGlhbGl6aW5nQ2h1bmtCbG9ja2VkTW9kZWwgPSBwcmV2QmxvY2tlZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplTW9kdWxlQ2h1bmsoY2h1bmspIHtcbiAgdHJ5IHtcbiAgICB2YXIgdmFsdWUgPSByZXF1aXJlTW9kdWxlKGNodW5rLnZhbHVlKTtcbiAgICB2YXIgaW5pdGlhbGl6ZWRDaHVuayA9IGNodW5rO1xuICAgIGluaXRpYWxpemVkQ2h1bmsuc3RhdHVzID0gSU5JVElBTElaRUQ7XG4gICAgaW5pdGlhbGl6ZWRDaHVuay52YWx1ZSA9IHZhbHVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHZhciBlcnJvcmVkQ2h1bmsgPSBjaHVuaztcbiAgICBlcnJvcmVkQ2h1bmsuc3RhdHVzID0gRVJST1JFRDtcbiAgICBlcnJvcmVkQ2h1bmsucmVhc29uID0gZXJyb3I7XG4gIH1cbn0gLy8gUmVwb3J0IHRoYXQgYW55IG1pc3NpbmcgY2h1bmtzIGluIHRoZSBtb2RlbCBpcyBub3cgZ29pbmcgdG8gdGhyb3cgdGhpc1xuLy8gZXJyb3IgdXBvbiByZWFkLiBBbHNvIG5vdGlmeSBhbnkgcGVuZGluZyBwcm9taXNlcy5cblxuXG5mdW5jdGlvbiByZXBvcnRHbG9iYWxFcnJvcihyZXNwb25zZSwgZXJyb3IpIHtcbiAgcmVzcG9uc2UuX2NodW5rcy5mb3JFYWNoKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIC8vIElmIHRoaXMgY2h1bmsgd2FzIGFscmVhZHkgcmVzb2x2ZWQgb3IgZXJyb3JlZCwgaXQgd29uJ3RcbiAgICAvLyB0cmlnZ2VyIGFuIGVycm9yIGJ1dCBpZiBpdCB3YXNuJ3QgdGhlbiB3ZSBuZWVkIHRvXG4gICAgLy8gYmVjYXVzZSB3ZSB3b24ndCBiZSBnZXR0aW5nIGFueSBuZXcgZGF0YSB0byByZXNvbHZlIGl0LlxuICAgIGlmIChjaHVuay5zdGF0dXMgPT09IFBFTkRJTkcpIHtcbiAgICAgIHRyaWdnZXJFcnJvck9uQ2h1bmsoY2h1bmssIGVycm9yKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIGtleSwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IG51bGwsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBudWxsXG4gIH07XG5cbiAge1xuICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGFkZCBhbnkgb2YgdGhlc2UgYnV0IGtlZXBpbmcgdGhlbSBmb3IgZ29vZCBtZWFzdXJlLlxuICAgIC8vIFVuZm9ydHVuYXRlbHksIF9zdG9yZSBpcyBlbnVtZXJhYmxlIGluIGplc3QgbWF0Y2hlcnMgc28gZm9yIGVxdWFsaXR5IHRvXG4gICAgLy8gd29yaywgSSBuZWVkIHRvIGtlZXAgaXQgb3IgbWFrZSBfc3RvcmUgbm9uLWVudW1lcmFibGUgaW4gdGhlIG90aGVyIGZpbGUuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiB0cnVlIC8vIFRoaXMgZWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBvbiB0aGUgc2VydmVyLlxuXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBudWxsXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IG51bGxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMYXp5Q2h1bmtXcmFwcGVyKGNodW5rKSB7XG4gIHZhciBsYXp5VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgIF9wYXlsb2FkOiBjaHVuayxcbiAgICBfaW5pdDogcmVhZENodW5rXG4gIH07XG4gIHJldHVybiBsYXp5VHlwZTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2h1bmsocmVzcG9uc2UsIGlkKSB7XG4gIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzO1xuICB2YXIgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcblxuICBpZiAoIWNodW5rKSB7XG4gICAgY2h1bmsgPSBjcmVhdGVQZW5kaW5nQ2h1bmsocmVzcG9uc2UpO1xuICAgIGNodW5rcy5zZXQoaWQsIGNodW5rKTtcbiAgfVxuXG4gIHJldHVybiBjaHVuaztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW9kZWxSZXNvbHZlcihjaHVuaywgcGFyZW50T2JqZWN0LCBrZXksIGN5Y2xpYykge1xuICB2YXIgYmxvY2tlZDtcblxuICBpZiAoaW5pdGlhbGl6aW5nQ2h1bmtCbG9ja2VkTW9kZWwpIHtcbiAgICBibG9ja2VkID0gaW5pdGlhbGl6aW5nQ2h1bmtCbG9ja2VkTW9kZWw7XG5cbiAgICBpZiAoIWN5Y2xpYykge1xuICAgICAgYmxvY2tlZC5kZXBzKys7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJsb2NrZWQgPSBpbml0aWFsaXppbmdDaHVua0Jsb2NrZWRNb2RlbCA9IHtcbiAgICAgIGRlcHM6IGN5Y2xpYyA/IDAgOiAxLFxuICAgICAgdmFsdWU6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHBhcmVudE9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgYmxvY2tlZC5kZXBzLS07XG5cbiAgICBpZiAoYmxvY2tlZC5kZXBzID09PSAwKSB7XG4gICAgICBpZiAoY2h1bmsuc3RhdHVzICE9PSBCTE9DS0VEKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc29sdmVMaXN0ZW5lcnMgPSBjaHVuay52YWx1ZTtcbiAgICAgIHZhciBpbml0aWFsaXplZENodW5rID0gY2h1bms7XG4gICAgICBpbml0aWFsaXplZENodW5rLnN0YXR1cyA9IElOSVRJQUxJWkVEO1xuICAgICAgaW5pdGlhbGl6ZWRDaHVuay52YWx1ZSA9IGJsb2NrZWQudmFsdWU7XG5cbiAgICAgIGlmIChyZXNvbHZlTGlzdGVuZXJzICE9PSBudWxsKSB7XG4gICAgICAgIHdha2VDaHVuayhyZXNvbHZlTGlzdGVuZXJzLCBibG9ja2VkLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1vZGVsUmVqZWN0KGNodW5rKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJpZ2dlckVycm9yT25DaHVuayhjaHVuaywgZXJyb3IpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTZXJ2ZXJSZWZlcmVuY2VQcm94eShyZXNwb25zZSwgbWV0YURhdGEpIHtcbiAgdmFyIGNhbGxTZXJ2ZXIgPSByZXNwb25zZS5fY2FsbFNlcnZlcjtcblxuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB2YXIgcCA9IG1ldGFEYXRhLmJvdW5kO1xuXG4gICAgaWYgKCFwKSB7XG4gICAgICByZXR1cm4gY2FsbFNlcnZlcihtZXRhRGF0YS5pZCwgYXJncyk7XG4gICAgfVxuXG4gICAgaWYgKHAuc3RhdHVzID09PSBJTklUSUFMSVpFRCkge1xuICAgICAgdmFyIGJvdW5kID0gcC52YWx1ZTtcbiAgICAgIHJldHVybiBjYWxsU2VydmVyKG1ldGFEYXRhLmlkLCBib3VuZC5jb25jYXQoYXJncykpO1xuICAgIH0gLy8gU2luY2UgdGhpcyBpcyBhIGZha2UgUHJvbWlzZSB3aG9zZSAudGhlbiBkb2Vzbid0IGNoYWluLCB3ZSBoYXZlIHRvIHdyYXAgaXQuXG4gICAgLy8gVE9ETzogUmVtb3ZlIHRoZSB3cmFwcGVyIG9uY2UgdGhhdCdzIGZpeGVkLlxuXG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHApLnRoZW4oZnVuY3Rpb24gKGJvdW5kKSB7XG4gICAgICByZXR1cm4gY2FsbFNlcnZlcihtZXRhRGF0YS5pZCwgYm91bmQuY29uY2F0KGFyZ3MpKTtcbiAgICB9KTtcbiAgfTtcblxuICByZWdpc3RlclNlcnZlclJlZmVyZW5jZShwcm94eSwgbWV0YURhdGEpO1xuICByZXR1cm4gcHJveHk7XG59XG5cbmZ1bmN0aW9uIGdldE91dGxpbmVkTW9kZWwocmVzcG9uc2UsIGlkKSB7XG4gIHZhciBjaHVuayA9IGdldENodW5rKHJlc3BvbnNlLCBpZCk7XG5cbiAgc3dpdGNoIChjaHVuay5zdGF0dXMpIHtcbiAgICBjYXNlIFJFU09MVkVEX01PREVMOlxuICAgICAgaW5pdGlhbGl6ZU1vZGVsQ2h1bmsoY2h1bmspO1xuICAgICAgYnJlYWs7XG4gIH0gLy8gVGhlIHN0YXR1cyBtaWdodCBoYXZlIGNoYW5nZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXG5cblxuICBzd2l0Y2ggKGNodW5rLnN0YXR1cykge1xuICAgIGNhc2UgSU5JVElBTElaRUQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiBjaHVuay52YWx1ZTtcbiAgICAgIH1cbiAgICAvLyBXZSBhbHdheXMgZW5jb2RlIGl0IGZpcnN0IGluIHRoZSBzdHJlYW0gc28gaXQgd29uJ3QgYmUgcGVuZGluZy5cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBjaHVuay5yZWFzb247XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VNb2RlbFN0cmluZyhyZXNwb25zZSwgcGFyZW50T2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmICh2YWx1ZVswXSA9PT0gJyQnKSB7XG4gICAgaWYgKHZhbHVlID09PSAnJCcpIHtcbiAgICAgIC8vIEEgdmVyeSBjb21tb24gc3ltYm9sLlxuICAgICAgcmV0dXJuIFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHZhbHVlWzFdKSB7XG4gICAgICBjYXNlICckJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFRoaXMgd2FzIGFuIGVzY2FwZWQgc3RyaW5nIHZhbHVlLlxuICAgICAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdMJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIExhenkgbm9kZVxuICAgICAgICAgIHZhciBpZCA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCAxNik7XG4gICAgICAgICAgdmFyIGNodW5rID0gZ2V0Q2h1bmsocmVzcG9uc2UsIGlkKTsgLy8gV2UgY3JlYXRlIGEgUmVhY3QubGF6eSB3cmFwcGVyIGFyb3VuZCBhbnkgbGF6eSB2YWx1ZXMuXG4gICAgICAgICAgLy8gV2hlbiBwYXNzZWQgaW50byBSZWFjdCwgd2UnbGwga25vdyBob3cgdG8gc3VzcGVuZCBvbiB0aGlzLlxuXG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDaHVua1dyYXBwZXIoY2h1bmspO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ0AnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gUHJvbWlzZVxuICAgICAgICAgIHZhciBfaWQgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMTYpO1xuXG4gICAgICAgICAgdmFyIF9jaHVuayA9IGdldENodW5rKHJlc3BvbnNlLCBfaWQpO1xuXG4gICAgICAgICAgcmV0dXJuIF9jaHVuaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdTJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFN5bWJvbFxuICAgICAgICAgIHJldHVybiBTeW1ib2wuZm9yKHZhbHVlLnNsaWNlKDIpKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdQJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFNlcnZlciBDb250ZXh0IFByb3ZpZGVyXG4gICAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlU2VydmVyQ29udGV4dCh2YWx1ZS5zbGljZSgyKSkuUHJvdmlkZXI7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnRic6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBTZXJ2ZXIgUmVmZXJlbmNlXG4gICAgICAgICAgdmFyIF9pZDIgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMTYpO1xuXG4gICAgICAgICAgdmFyIG1ldGFkYXRhID0gZ2V0T3V0bGluZWRNb2RlbChyZXNwb25zZSwgX2lkMik7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVNlcnZlclJlZmVyZW5jZVByb3h5KHJlc3BvbnNlLCBtZXRhZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnUSc6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBNYXBcbiAgICAgICAgICB2YXIgX2lkMyA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCAxNik7XG5cbiAgICAgICAgICB2YXIgZGF0YSA9IGdldE91dGxpbmVkTW9kZWwocmVzcG9uc2UsIF9pZDMpO1xuICAgICAgICAgIHJldHVybiBuZXcgTWFwKGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ1cnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gU2V0XG4gICAgICAgICAgdmFyIF9pZDQgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMTYpO1xuXG4gICAgICAgICAgdmFyIF9kYXRhID0gZ2V0T3V0bGluZWRNb2RlbChyZXNwb25zZSwgX2lkNCk7XG5cbiAgICAgICAgICByZXR1cm4gbmV3IFNldChfZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnSSc6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyAkSW5maW5pdHlcbiAgICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnLSc6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyAkLTAgb3IgJC1JbmZpbml0eVxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJyQtMCcpIHtcbiAgICAgICAgICAgIHJldHVybiAtMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC1JbmZpbml0eTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnTic6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyAkTmFOXG4gICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICd1JzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIG1hdGNoZXMgXCIkdW5kZWZpbmVkXCJcbiAgICAgICAgICAvLyBTcGVjaWFsIGVuY29kaW5nIGZvciBgdW5kZWZpbmVkYCB3aGljaCBjYW4ndCBiZSBzZXJpYWxpemVkIGFzIEpTT04gb3RoZXJ3aXNlLlxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnRCc6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBEYXRlXG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUucGFyc2UodmFsdWUuc2xpY2UoMikpKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICduJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIEJpZ0ludFxuICAgICAgICAgIHJldHVybiBCaWdJbnQodmFsdWUuc2xpY2UoMikpO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCBhbnl0aGluZyBlbHNlIGlzIGEgcmVmZXJlbmNlIElELlxuICAgICAgICAgIHZhciBfaWQ1ID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMSksIDE2KTtcblxuICAgICAgICAgIHZhciBfY2h1bmsyID0gZ2V0Q2h1bmsocmVzcG9uc2UsIF9pZDUpO1xuXG4gICAgICAgICAgc3dpdGNoIChfY2h1bmsyLnN0YXR1cykge1xuICAgICAgICAgICAgY2FzZSBSRVNPTFZFRF9NT0RFTDpcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZU1vZGVsQ2h1bmsoX2NodW5rMik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFJFU09MVkVEX01PRFVMRTpcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZU1vZHVsZUNodW5rKF9jaHVuazIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IC8vIFRoZSBzdGF0dXMgbWlnaHQgaGF2ZSBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9uLlxuXG5cbiAgICAgICAgICBzd2l0Y2ggKF9jaHVuazIuc3RhdHVzKSB7XG4gICAgICAgICAgICBjYXNlIElOSVRJQUxJWkVEOlxuICAgICAgICAgICAgICByZXR1cm4gX2NodW5rMi52YWx1ZTtcblxuICAgICAgICAgICAgY2FzZSBQRU5ESU5HOlxuICAgICAgICAgICAgY2FzZSBCTE9DS0VEOlxuICAgICAgICAgICAgY2FzZSBDWUNMSUM6XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRDaHVuayA9IGluaXRpYWxpemluZ0NodW5rO1xuXG4gICAgICAgICAgICAgIF9jaHVuazIudGhlbihjcmVhdGVNb2RlbFJlc29sdmVyKHBhcmVudENodW5rLCBwYXJlbnRPYmplY3QsIGtleSwgX2NodW5rMi5zdGF0dXMgPT09IENZQ0xJQyksIGNyZWF0ZU1vZGVsUmVqZWN0KHBhcmVudENodW5rKSk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IF9jaHVuazIucmVhc29uO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNb2RlbFR1cGxlKHJlc3BvbnNlLCB2YWx1ZSkge1xuICB2YXIgdHVwbGUgPSB2YWx1ZTtcblxuICBpZiAodHVwbGVbMF0gPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIGhhdmluZyBSZWFjdCBqdXN0IGRpcmVjdGx5IGFjY2VwdCB0aGVzZSBhcnJheXMgYXMgZWxlbWVudHMuXG4gICAgLy8gT3IgZXZlbiBjaGFuZ2UgdGhlIFJlYWN0RWxlbWVudCB0eXBlIHRvIGJlIGFuIGFycmF5LlxuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHR1cGxlWzFdLCB0dXBsZVsyXSwgdHVwbGVbM10pO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBtaXNzaW5nQ2FsbCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdUcnlpbmcgdG8gY2FsbCBhIGZ1bmN0aW9uIGZyb20gXCJ1c2Ugc2VydmVyXCIgYnV0IHRoZSBjYWxsU2VydmVyIG9wdGlvbiAnICsgJ3dhcyBub3QgaW1wbGVtZW50ZWQgaW4geW91ciByb3V0ZXIgcnVudGltZS4nKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoYnVuZGxlckNvbmZpZywgbW9kdWxlTG9hZGluZywgY2FsbFNlcnZlciwgbm9uY2UpIHtcbiAgdmFyIGNodW5rcyA9IG5ldyBNYXAoKTtcbiAgdmFyIHJlc3BvbnNlID0ge1xuICAgIF9idW5kbGVyQ29uZmlnOiBidW5kbGVyQ29uZmlnLFxuICAgIF9tb2R1bGVMb2FkaW5nOiBtb2R1bGVMb2FkaW5nLFxuICAgIF9jYWxsU2VydmVyOiBjYWxsU2VydmVyICE9PSB1bmRlZmluZWQgPyBjYWxsU2VydmVyIDogbWlzc2luZ0NhbGwsXG4gICAgX25vbmNlOiBub25jZSxcbiAgICBfY2h1bmtzOiBjaHVua3MsXG4gICAgX3N0cmluZ0RlY29kZXI6IGNyZWF0ZVN0cmluZ0RlY29kZXIoKSxcbiAgICBfZnJvbUpTT046IG51bGwsXG4gICAgX3Jvd1N0YXRlOiAwLFxuICAgIF9yb3dJRDogMCxcbiAgICBfcm93VGFnOiAwLFxuICAgIF9yb3dMZW5ndGg6IDAsXG4gICAgX2J1ZmZlcjogW11cbiAgfTsgLy8gRG9uJ3QgaW5saW5lIHRoaXMgY2FsbCBiZWNhdXNlIGl0IGNhdXNlcyBjbG9zdXJlIHRvIG91dGxpbmUgdGhlIGNhbGwgYWJvdmUuXG5cbiAgcmVzcG9uc2UuX2Zyb21KU09OID0gY3JlYXRlRnJvbUpTT05DYWxsYmFjayhyZXNwb25zZSk7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKHJlc3BvbnNlLCBpZCwgbW9kZWwpIHtcbiAgdmFyIGNodW5rcyA9IHJlc3BvbnNlLl9jaHVua3M7XG4gIHZhciBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuXG4gIGlmICghY2h1bmspIHtcbiAgICBjaHVua3Muc2V0KGlkLCBjcmVhdGVSZXNvbHZlZE1vZGVsQ2h1bmsocmVzcG9uc2UsIG1vZGVsKSk7XG4gIH0gZWxzZSB7XG4gICAgcmVzb2x2ZU1vZGVsQ2h1bmsoY2h1bmssIG1vZGVsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlVGV4dChyZXNwb25zZSwgaWQsIHRleHQpIHtcbiAgdmFyIGNodW5rcyA9IHJlc3BvbnNlLl9jaHVua3M7IC8vIFdlIGFzc3VtZSB0aGF0IHdlIGFsd2F5cyByZWZlcmVuY2UgbGFyZ2Ugc3RyaW5ncyBhZnRlciB0aGV5J3ZlIGJlZW5cbiAgLy8gZW1pdHRlZC5cblxuICBjaHVua3Muc2V0KGlkLCBjcmVhdGVJbml0aWFsaXplZFRleHRDaHVuayhyZXNwb25zZSwgdGV4dCkpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTW9kdWxlKHJlc3BvbnNlLCBpZCwgbW9kZWwpIHtcbiAgdmFyIGNodW5rcyA9IHJlc3BvbnNlLl9jaHVua3M7XG4gIHZhciBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuICB2YXIgY2xpZW50UmVmZXJlbmNlTWV0YWRhdGEgPSBwYXJzZU1vZGVsKHJlc3BvbnNlLCBtb2RlbCk7XG4gIHZhciBjbGllbnRSZWZlcmVuY2UgPSByZXNvbHZlQ2xpZW50UmVmZXJlbmNlKHJlc3BvbnNlLl9idW5kbGVyQ29uZmlnLCBjbGllbnRSZWZlcmVuY2VNZXRhZGF0YSk7XG4gIC8vIEZvciBub3cgd2UgcHJlbG9hZCBhbGwgbW9kdWxlcyBhcyBlYXJseSBhcyBwb3NzaWJsZSBzaW5jZSBpdCdzIGxpa2VseVxuICAvLyB0aGF0IHdlJ2xsIG5lZWQgdGhlbS5cblxuICB2YXIgcHJvbWlzZSA9IHByZWxvYWRNb2R1bGUoY2xpZW50UmVmZXJlbmNlKTtcblxuICBpZiAocHJvbWlzZSkge1xuICAgIHZhciBibG9ja2VkQ2h1bms7XG5cbiAgICBpZiAoIWNodW5rKSB7XG4gICAgICAvLyBUZWNobmljYWxseSwgd2Ugc2hvdWxkIGp1c3QgdHJlYXQgcHJvbWlzZSBhcyB0aGUgY2h1bmsgaW4gdGhpc1xuICAgICAgLy8gY2FzZS4gQmVjYXVzZSBpdCdsbCBqdXN0IGJlaGF2ZSBhcyBhbnkgb3RoZXIgcHJvbWlzZS5cbiAgICAgIGJsb2NrZWRDaHVuayA9IGNyZWF0ZUJsb2NrZWRDaHVuayhyZXNwb25zZSk7XG4gICAgICBjaHVua3Muc2V0KGlkLCBibG9ja2VkQ2h1bmspO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGNhbid0IGFjdHVhbGx5IGhhcHBlbiBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW55IGZvcndhcmRcbiAgICAgIC8vIHJlZmVyZW5jZXMgdG8gbW9kdWxlcy5cbiAgICAgIGJsb2NrZWRDaHVuayA9IGNodW5rO1xuICAgICAgYmxvY2tlZENodW5rLnN0YXR1cyA9IEJMT0NLRUQ7XG4gICAgfVxuXG4gICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlTW9kdWxlQ2h1bmsoYmxvY2tlZENodW5rLCBjbGllbnRSZWZlcmVuY2UpO1xuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgcmV0dXJuIHRyaWdnZXJFcnJvck9uQ2h1bmsoYmxvY2tlZENodW5rLCBlcnJvcik7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFjaHVuaykge1xuICAgICAgY2h1bmtzLnNldChpZCwgY3JlYXRlUmVzb2x2ZWRNb2R1bGVDaHVuayhyZXNwb25zZSwgY2xpZW50UmVmZXJlbmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgY2FuJ3QgYWN0dWFsbHkgaGFwcGVuIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgZm9yd2FyZFxuICAgICAgLy8gcmVmZXJlbmNlcyB0byBtb2R1bGVzLlxuICAgICAgcmVzb2x2ZU1vZHVsZUNodW5rKGNodW5rLCBjbGllbnRSZWZlcmVuY2UpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlRXJyb3JEZXYocmVzcG9uc2UsIGlkLCBkaWdlc3QsIG1lc3NhZ2UsIHN0YWNrKSB7XG5cblxuICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSB8fCAnQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIFNlcnZlciBDb21wb25lbnRzIHJlbmRlciBidXQgbm8gbWVzc2FnZSB3YXMgcHJvdmlkZWQnKTtcbiAgZXJyb3Iuc3RhY2sgPSBzdGFjaztcbiAgZXJyb3IuZGlnZXN0ID0gZGlnZXN0O1xuICB2YXIgZXJyb3JXaXRoRGlnZXN0ID0gZXJyb3I7XG4gIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzO1xuICB2YXIgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcblxuICBpZiAoIWNodW5rKSB7XG4gICAgY2h1bmtzLnNldChpZCwgY3JlYXRlRXJyb3JDaHVuayhyZXNwb25zZSwgZXJyb3JXaXRoRGlnZXN0KSk7XG4gIH0gZWxzZSB7XG4gICAgdHJpZ2dlckVycm9yT25DaHVuayhjaHVuaywgZXJyb3JXaXRoRGlnZXN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlSGludChyZXNwb25zZSwgY29kZSwgbW9kZWwpIHtcbiAgdmFyIGhpbnRNb2RlbCA9IHBhcnNlTW9kZWwocmVzcG9uc2UsIG1vZGVsKTtcbiAgZGlzcGF0Y2hIaW50KGNvZGUsIGhpbnRNb2RlbCk7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NGdWxsUm93KHJlc3BvbnNlLCBpZCwgdGFnLCBidWZmZXIsIGNodW5rKSB7XG5cbiAgdmFyIHN0cmluZ0RlY29kZXIgPSByZXNwb25zZS5fc3RyaW5nRGVjb2RlcjtcbiAgdmFyIHJvdyA9ICcnO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgcm93ICs9IHJlYWRQYXJ0aWFsU3RyaW5nQ2h1bmsoc3RyaW5nRGVjb2RlciwgYnVmZmVyW2ldKTtcbiAgfVxuXG4gIHJvdyArPSByZWFkRmluYWxTdHJpbmdDaHVuayhzdHJpbmdEZWNvZGVyLCBjaHVuayk7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIDczXG4gICAgLyogXCJJXCIgKi9cbiAgICA6XG4gICAgICB7XG4gICAgICAgIHJlc29sdmVNb2R1bGUocmVzcG9uc2UsIGlkLCByb3cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIDcyXG4gICAgLyogXCJIXCIgKi9cbiAgICA6XG4gICAgICB7XG4gICAgICAgIHZhciBjb2RlID0gcm93WzBdO1xuICAgICAgICByZXNvbHZlSGludChyZXNwb25zZSwgY29kZSwgcm93LnNsaWNlKDEpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSA2OVxuICAgIC8qIFwiRVwiICovXG4gICAgOlxuICAgICAge1xuICAgICAgICB2YXIgZXJyb3JJbmZvID0gSlNPTi5wYXJzZShyb3cpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICByZXNvbHZlRXJyb3JEZXYocmVzcG9uc2UsIGlkLCBlcnJvckluZm8uZGlnZXN0LCBlcnJvckluZm8ubWVzc2FnZSwgZXJyb3JJbmZvLnN0YWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgODRcbiAgICAvKiBcIlRcIiAqL1xuICAgIDpcbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZVRleHQocmVzcG9uc2UsIGlkLCByb3cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIDgwXG4gICAgLyogXCJQXCIgKi9cbiAgICA6XG4gICAgLy8gRmFsbHRocm91Z2hcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvKiBcIlwiXCIgXCJ7XCIgXCJbXCIgXCJ0XCIgXCJmXCIgXCJuXCIgXCIwXCIgLSBcIjlcIiAqL1xuICAgICAge1xuICAgICAgICAvLyBXZSBhc3N1bWUgYW55dGhpbmcgZWxzZSBpcyBKU09OLlxuICAgICAgICByZXNvbHZlTW9kZWwocmVzcG9uc2UsIGlkLCByb3cpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0JpbmFyeUNodW5rKHJlc3BvbnNlLCBjaHVuaykge1xuICB2YXIgaSA9IDA7XG4gIHZhciByb3dTdGF0ZSA9IHJlc3BvbnNlLl9yb3dTdGF0ZTtcbiAgdmFyIHJvd0lEID0gcmVzcG9uc2UuX3Jvd0lEO1xuICB2YXIgcm93VGFnID0gcmVzcG9uc2UuX3Jvd1RhZztcbiAgdmFyIHJvd0xlbmd0aCA9IHJlc3BvbnNlLl9yb3dMZW5ndGg7XG4gIHZhciBidWZmZXIgPSByZXNwb25zZS5fYnVmZmVyO1xuICB2YXIgY2h1bmtMZW5ndGggPSBjaHVuay5sZW5ndGg7XG5cbiAgd2hpbGUgKGkgPCBjaHVua0xlbmd0aCkge1xuICAgIHZhciBsYXN0SWR4ID0gLTE7XG5cbiAgICBzd2l0Y2ggKHJvd1N0YXRlKSB7XG4gICAgICBjYXNlIFJPV19JRDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBieXRlID0gY2h1bmtbaSsrXTtcblxuICAgICAgICAgIGlmIChieXRlID09PSA1OFxuICAgICAgICAgIC8qIFwiOlwiICovXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIEZpbmlzaGVkIHRoZSByb3dJRCwgbmV4dCB3ZSdsbCBwYXJzZSB0aGUgdGFnLlxuICAgICAgICAgICAgICByb3dTdGF0ZSA9IFJPV19UQUc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93SUQgPSByb3dJRCA8PCA0IHwgKGJ5dGUgPiA5NiA/IGJ5dGUgLSA4NyA6IGJ5dGUgLSA0OCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBST1dfVEFHOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHJlc29sdmVkUm93VGFnID0gY2h1bmtbaV07XG5cbiAgICAgICAgICBpZiAocmVzb2x2ZWRSb3dUYWcgPT09IDg0XG4gICAgICAgICAgLyogXCJUXCIgKi9cbiAgICAgICAgICB8fCBlbmFibGVCaW5hcnlGbGlnaHQgXG4gICAgICAgICAgLyogXCJWXCIgKi9cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcm93VGFnID0gcmVzb2x2ZWRSb3dUYWc7XG4gICAgICAgICAgICAgIHJvd1N0YXRlID0gUk9XX0xFTkdUSDtcbiAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlZFJvd1RhZyA+IDY0ICYmIHJlc29sdmVkUm93VGFnIDwgOTFcbiAgICAgICAgICAvKiBcIkFcIi1cIlpcIiAqL1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgICByb3dUYWcgPSByZXNvbHZlZFJvd1RhZztcbiAgICAgICAgICAgICAgcm93U3RhdGUgPSBST1dfQ0hVTktfQllfTkVXTElORTtcbiAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd1RhZyA9IDA7XG4gICAgICAgICAgICByb3dTdGF0ZSA9IFJPV19DSFVOS19CWV9ORVdMSU5FOyAvLyBUaGlzIHdhcyBhbiB1bmtub3duIHRhZyBzbyBpdCB3YXMgcHJvYmFibHkgcGFydCBvZiB0aGUgZGF0YS5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJPV19MRU5HVEg6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX2J5dGUgPSBjaHVua1tpKytdO1xuXG4gICAgICAgICAgaWYgKF9ieXRlID09PSA0NFxuICAgICAgICAgIC8qIFwiLFwiICovXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIEZpbmlzaGVkIHRoZSByb3dMZW5ndGgsIG5leHQgd2UnbGwgYnVmZmVyIHVwIHRvIHRoYXQgbGVuZ3RoLlxuICAgICAgICAgICAgICByb3dTdGF0ZSA9IFJPV19DSFVOS19CWV9MRU5HVEg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93TGVuZ3RoID0gcm93TGVuZ3RoIDw8IDQgfCAoX2J5dGUgPiA5NiA/IF9ieXRlIC0gODcgOiBfYnl0ZSAtIDQ4KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJPV19DSFVOS19CWV9ORVdMSU5FOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gV2UncmUgbG9va2luZyBmb3IgYSBuZXdsaW5lXG4gICAgICAgICAgbGFzdElkeCA9IGNodW5rLmluZGV4T2YoMTBcbiAgICAgICAgICAvKiBcIlxcblwiICovXG4gICAgICAgICAgLCBpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJPV19DSFVOS19CWV9MRU5HVEg6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSdyZSBsb29raW5nIGZvciB0aGUgcmVtYWluaW5nIGJ5dGUgbGVuZ3RoXG4gICAgICAgICAgbGFzdElkeCA9IGkgKyByb3dMZW5ndGg7XG5cbiAgICAgICAgICBpZiAobGFzdElkeCA+IGNodW5rLmxlbmd0aCkge1xuICAgICAgICAgICAgbGFzdElkeCA9IC0xO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG9mZnNldCA9IGNodW5rLmJ5dGVPZmZzZXQgKyBpO1xuXG4gICAgaWYgKGxhc3RJZHggPiAtMSkge1xuICAgICAgLy8gV2UgZm91bmQgdGhlIGxhc3QgY2h1bmsgb2YgdGhlIHJvd1xuICAgICAgdmFyIGxlbmd0aCA9IGxhc3RJZHggLSBpO1xuICAgICAgdmFyIGxhc3RDaHVuayA9IG5ldyBVaW50OEFycmF5KGNodW5rLmJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpO1xuICAgICAgcHJvY2Vzc0Z1bGxSb3cocmVzcG9uc2UsIHJvd0lELCByb3dUYWcsIGJ1ZmZlciwgbGFzdENodW5rKTsgLy8gUmVzZXQgc3RhdGUgbWFjaGluZSBmb3IgYSBuZXcgcm93XG5cbiAgICAgIGkgPSBsYXN0SWR4O1xuXG4gICAgICBpZiAocm93U3RhdGUgPT09IFJPV19DSFVOS19CWV9ORVdMSU5FKSB7XG4gICAgICAgIC8vIElmIHdlJ3JlIHRyYWlsaW5nIGJ5IGEgbmV3bGluZSB3ZSBuZWVkIHRvIHNraXAgaXQuXG4gICAgICAgIGkrKztcbiAgICAgIH1cblxuICAgICAgcm93U3RhdGUgPSBST1dfSUQ7XG4gICAgICByb3dUYWcgPSAwO1xuICAgICAgcm93SUQgPSAwO1xuICAgICAgcm93TGVuZ3RoID0gMDtcbiAgICAgIGJ1ZmZlci5sZW5ndGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcmVzdCBvZiB0aGlzIHJvdyBpcyBpbiBhIGZ1dHVyZSBjaHVuay4gV2Ugc3Rhc2ggdGhlIHJlc3Qgb2YgdGhlXG4gICAgICAvLyBjdXJyZW50IGNodW5rIHVudGlsIHdlIGNhbiBwcm9jZXNzIHRoZSBmdWxsIHJvdy5cbiAgICAgIHZhciBfbGVuZ3RoID0gY2h1bmsuYnl0ZUxlbmd0aCAtIGk7XG5cbiAgICAgIHZhciByZW1haW5pbmdTbGljZSA9IG5ldyBVaW50OEFycmF5KGNodW5rLmJ1ZmZlciwgb2Zmc2V0LCBfbGVuZ3RoKTtcbiAgICAgIGJ1ZmZlci5wdXNoKHJlbWFpbmluZ1NsaWNlKTsgLy8gVXBkYXRlIGhvdyBtYW55IGJ5dGVzIHdlJ3JlIHN0aWxsIHdhaXRpbmcgZm9yLiBJZiB3ZSdyZSBsb29raW5nIGZvclxuICAgICAgLy8gYSBuZXdsaW5lLCB0aGlzIGRvZXNuJ3QgaHVydCBzaW5jZSB3ZSdsbCBqdXN0IGlnbm9yZSBpdC5cblxuICAgICAgcm93TGVuZ3RoIC09IHJlbWFpbmluZ1NsaWNlLmJ5dGVMZW5ndGg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXNwb25zZS5fcm93U3RhdGUgPSByb3dTdGF0ZTtcbiAgcmVzcG9uc2UuX3Jvd0lEID0gcm93SUQ7XG4gIHJlc3BvbnNlLl9yb3dUYWcgPSByb3dUYWc7XG4gIHJlc3BvbnNlLl9yb3dMZW5ndGggPSByb3dMZW5ndGg7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTW9kZWwocmVzcG9uc2UsIGpzb24pIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoanNvbiwgcmVzcG9uc2UuX2Zyb21KU09OKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRnJvbUpTT05DYWxsYmFjayhyZXNwb25zZSkge1xuICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF1cbiAgcmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSAuYmluZCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCB0aGUgXCJ0aGlzXCIgdmFsdWUuXG4gICAgICByZXR1cm4gcGFyc2VNb2RlbFN0cmluZyhyZXNwb25zZSwgdGhpcywga2V5LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXJzZU1vZGVsVHVwbGUocmVzcG9uc2UsIHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsb3NlKHJlc3BvbnNlKSB7XG4gIC8vIEluIGNhc2UgdGhlcmUgYXJlIGFueSByZW1haW5pbmcgdW5yZXNvbHZlZCBjaHVua3MsIHRoZXkgd29uJ3RcbiAgLy8gYmUgcmVzb2x2ZWQgbm93LiBTbyB3ZSBuZWVkIHRvIGlzc3VlIGFuIGVycm9yIHRvIHRob3NlLlxuICAvLyBJZGVhbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGVhcmx5IGJhaWwgb3V0IGlmIHdlIGtlcHQgYVxuICAvLyByZWYgY291bnQgb2YgcGVuZGluZyBjaHVua3MuXG4gIHJlcG9ydEdsb2JhbEVycm9yKHJlc3BvbnNlLCBuZXcgRXJyb3IoJ0Nvbm5lY3Rpb24gY2xvc2VkLicpKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2VGcm9tT3B0aW9ucyhvcHRpb25zKSB7XG4gIHJldHVybiBjcmVhdGVSZXNwb25zZShudWxsLCBudWxsLCBvcHRpb25zICYmIG9wdGlvbnMuY2FsbFNlcnZlciA/IG9wdGlvbnMuY2FsbFNlcnZlciA6IHVuZGVmaW5lZCwgdW5kZWZpbmVkIC8vIG5vbmNlXG4gICk7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UmVhZGluZ0Zyb21TdHJlYW0ocmVzcG9uc2UsIHN0cmVhbSkge1xuICB2YXIgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuXG4gIGZ1bmN0aW9uIHByb2dyZXNzKF9yZWYpIHtcbiAgICB2YXIgZG9uZSA9IF9yZWYuZG9uZSxcbiAgICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIGNsb3NlKHJlc3BvbnNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYnVmZmVyID0gdmFsdWU7XG4gICAgcHJvY2Vzc0JpbmFyeUNodW5rKHJlc3BvbnNlLCBidWZmZXIpO1xuICAgIHJldHVybiByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3MpLmNhdGNoKGVycm9yKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVycm9yKGUpIHtcbiAgICByZXBvcnRHbG9iYWxFcnJvcihyZXNwb25zZSwgZSk7XG4gIH1cblxuICByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3MpLmNhdGNoKGVycm9yKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgb3B0aW9ucykge1xuICB2YXIgcmVzcG9uc2UgPSBjcmVhdGVSZXNwb25zZUZyb21PcHRpb25zKG9wdGlvbnMpO1xuICBzdGFydFJlYWRpbmdGcm9tU3RyZWFtKHJlc3BvbnNlLCBzdHJlYW0pO1xuICByZXR1cm4gZ2V0Um9vdChyZXNwb25zZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyb21GZXRjaChwcm9taXNlRm9yUmVzcG9uc2UsIG9wdGlvbnMpIHtcbiAgdmFyIHJlc3BvbnNlID0gY3JlYXRlUmVzcG9uc2VGcm9tT3B0aW9ucyhvcHRpb25zKTtcbiAgcHJvbWlzZUZvclJlc3BvbnNlLnRoZW4oZnVuY3Rpb24gKHIpIHtcbiAgICBzdGFydFJlYWRpbmdGcm9tU3RyZWFtKHJlc3BvbnNlLCByLmJvZHkpO1xuICB9LCBmdW5jdGlvbiAoZSkge1xuICAgIHJlcG9ydEdsb2JhbEVycm9yKHJlc3BvbnNlLCBlKTtcbiAgfSk7XG4gIHJldHVybiBnZXRSb290KHJlc3BvbnNlKTtcbn1cblxuZnVuY3Rpb24gZW5jb2RlUmVwbHkodmFsdWUpXG4vKiBXZSBkb24ndCB1c2UgVVJMU2VhcmNoUGFyYW1zIHlldCBidXQgbWF5YmUgKi9cbntcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBwcm9jZXNzUmVwbHkodmFsdWUsICcnLCByZXNvbHZlLCByZWplY3QpO1xuICB9KTtcbn1cblxuZXhwb3J0cy5jcmVhdGVGcm9tRmV0Y2ggPSBjcmVhdGVGcm9tRmV0Y2g7XG5leHBvcnRzLmNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSA9IGNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbTtcbmV4cG9ydHMuY3JlYXRlU2VydmVyUmVmZXJlbmNlID0gY3JlYXRlU2VydmVyUmVmZXJlbmNlO1xuZXhwb3J0cy5lbmNvZGVSZXBseSA9IGVuY29kZVJlcGx5O1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js ***! + \************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-server-dom-webpack-client.browser.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudC5icm93c2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSxxUEFBd0Y7QUFDMUYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50LmJyb3dzZXIuanM/MzgwYyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrLWNsaWVudC5icm93c2VyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LXNlcnZlci1kb20td2VicGFjay1jbGllbnQuYnJvd3Nlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.js": +/*!****************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-server-dom-webpack/client.js ***! + \****************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nmodule.exports = __webpack_require__(/*! ./client.browser */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixnS0FBNEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50LmpzPzdkZWEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2xpZW50LmJyb3dzZXInKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react-server-dom-webpack/client.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js ***! + \************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false;\n\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference');\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_CLIENT_REFERENCE$2 || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n if (typeof type === 'function') {\n if (type.$$typeof === REACT_CLIENT_REFERENCE$1) {\n // TODO: Create a convention for naming client references with debug info.\n return null;\n }\n\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n case REACT_CACHE_TYPE:\n {\n return 'Cache';\n }\n\n }\n\n if (typeof type === 'object') {\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n * (1) throwing and catching an error in the function - this will be our\n * control error.\n * (2) calling the component which will eventually throw an error that we'll\n * catch - this will be our sample error.\n * (3) diffing the control and sample error stacks to find the stack frame\n * which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n /**\n * Finding a common stack frame between sample and control errors can be\n * tricky given the different types and levels of stack trace truncation from\n * different JS VMs. So instead we'll attempt to control what that common\n * frame should be through this object method:\n * Having both the sample and control errors be in the function under the\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n * `displayName` properties of the function ensures that a stack\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n * it for both control and sample stacks.\n */\n\n\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n var control;\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe[prop-missing]\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n } // TODO(luna): This will currently only throw if the function component\n // tries to access React/ReactDOM/props. We should probably make this throw\n // in simple components too\n\n\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n // component, which we don't yet support. Attach a noop catch handler to\n // silence the error.\n // TODO: Implement component stacks for async client components?\n\n if (maybePromise && typeof maybePromise.catch === 'function') {\n maybePromise.catch(function () {});\n }\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n return [sample.stack, control.stack];\n }\n }\n\n return [null, null];\n }\n }; // $FlowFixMe[prop-missing]\n\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n if (namePropDescriptor && namePropDescriptor.configurable) {\n // V8 utilizes a function's `name` property when generating a stack trace.\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n // is set to `false`.\n // $FlowFixMe[cannot-write]\n 'name', {\n value: 'DetermineComponentFrameRoot'\n });\n }\n\n try {\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n\n if (sampleStack && controlStack) {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sampleStack.split('\\n');\n var controlLines = controlStack.split('\\n');\n var s = 0;\n var c = 0;\n\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n s++;\n }\n\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n c++;\n } // We couldn't find our intentionally injected common root frame, attempt\n // to find another common root frame by search from the bottom of the\n // control stack...\n\n\n if (s === sampleLines.length || c === controlLines.length) {\n s = sampleLines.length - 1;\n c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n if (true) {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe[incompatible-use] This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement$1(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement$1(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement$1(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n return type;\n }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner$1.current && self && ReactCurrentOwner$1.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner$1.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nfunction ReactElement(type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n}\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner$1.current, props);\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = getComponentNameFromType(parentType);\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object' || !node) {\n return;\n }\n\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n if (type.$$typeof === REACT_CLIENT_REFERENCE) {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLHNHQUEwQjs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxlQUFlO0FBQ2hIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVIsa0RBQWtEO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBLHFDQUFxQzs7QUFFckMsZ0NBQWdDO0FBQ2hDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTs7QUFFQSxxRUFBcUU7O0FBRXJFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0EsU0FBUztBQUNULHVCQUF1QjtBQUN2QjtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQSxTQUFTO0FBQ1Qsd0JBQXdCO0FBQ3hCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCxpQ0FBaUM7QUFDakM7QUFDQSxTQUFTO0FBQ1QsMkJBQTJCO0FBQzNCO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEOztBQUUzRDtBQUNBOztBQUVBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOzs7QUFHYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYzs7O0FBR2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7OztBQUdBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsZ0hBQWdIOztBQUVoSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0EsZ0ZBQWdGO0FBQ2hGO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsSUFBSTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7OztBQUdsQjtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkhBQTJIO0FBQzNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0VBQW9FOztBQUVwRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrR0FBa0c7O0FBRWxHO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLGVBQWU7QUFDMUIsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCLDJEQUEyRCxVQUFVO0FBQ3JFLHlCQUF5QixVQUFVO0FBQ25DO0FBQ0EsYUFBYSxVQUFVO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixZQUFZLFNBQVM7QUFDckI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLEdBQUc7QUFDZDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw2REFBNkQ7QUFDN0Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEIsV0FBVyxHQUFHO0FBQ2Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0RBQW9EO0FBQ3BELHNCQUFzQixpQkFBaUI7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sNENBQTRDOztBQUU1Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGlCQUFpQjtBQUNyQzs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDBEQUEwRDtBQUMxRDs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixxQkFBcUI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCw4Q0FBOEMsZ0RBQWdELE1BQU0sYUFBYTs7QUFFakg7QUFDQSwrQ0FBK0Msa0NBQWtDLE9BQU87O0FBRXhGLHVHQUF1RyxjQUFjLFVBQVUsZ0dBQWdHLGtCQUFrQixVQUFVLFVBQVU7O0FBRXJRO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDO0FBQ3JDOztBQUVBOztBQUVBLGdCQUFnQjtBQUNoQixXQUFXO0FBQ1gsWUFBWTtBQUNaLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcz9iMTM2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0XCIpO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIFJFQUNUX0NBQ0hFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jYWNoZScpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG4vLyBzdHVmZi4gSW50ZW5kZWQgdG8gZW5hYmxlIFJlYWN0IGNvcmUgbWVtYmVycyB0byBtb3JlIGVhc2lseSBkZWJ1ZyBzY2hlZHVsaW5nXG4vLyBpc3N1ZXMgaW4gREVWIGJ1aWxkcy5cblxudmFyIGVuYWJsZURlYnVnVHJhY2luZyA9IGZhbHNlO1xuXG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQyID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBUaGlzIG5lZWRzIHRvIGluY2x1ZGUgYWxsIHBvc3NpYmxlIG1vZHVsZSByZWZlcmVuY2Ugb2JqZWN0XG4gICAgLy8gdHlwZXMgc3VwcG9ydGVkIGJ5IGFueSBGbGlnaHQgY29uZmlndXJhdGlvbiBhbnl3aGVyZSBzaW5jZVxuICAgIC8vIHdlIGRvbid0IGtub3cgd2hpY2ggRmxpZ2h0IGJ1aWxkIHRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgdXNlZFxuICAgIC8vIHdpdGguXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQyIHx8IHR5cGUuZ2V0TW9kdWxlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGRpc3BsYXlOYW1lID0gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lO1xuXG4gIGlmIChkaXNwbGF5TmFtZSkge1xuICAgIHJldHVybiBkaXNwbGF5TmFtZTtcbiAgfVxuXG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWU7XG59IC8vIEtlZXAgaW4gc3luYyB3aXRoIHJlYWN0LXJlY29uY2lsZXIvZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlclxuXG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpOyAvLyBOb3RlIHRoYXQgdGhlIHJlY29uY2lsZXIgcGFja2FnZSBzaG91bGQgZ2VuZXJhbGx5IHByZWZlciB0byB1c2UgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcigpIGluc3RlYWQuXG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDEpIHtcbiAgICAgIC8vIFRPRE86IENyZWF0ZSBhIGNvbnZlbnRpb24gZm9yIG5hbWluZyBjbGllbnQgcmVmZXJlbmNlcyB3aXRoIGRlYnVnIGluZm8uXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG5cbiAgICBjYXNlIFJFQUNUX0NBQ0hFX1RZUEU6XG4gICAgICB7XG4gICAgICAgIHJldHVybiAnQ2FjaGUnO1xuICAgICAgfVxuXG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xuXG4gICAgICAgIGlmIChvdXRlck5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gb3V0ZXJOYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdNZW1vJztcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuLyoqXG4gKiBMZXZlcmFnZXMgbmF0aXZlIGJyb3dzZXIvVk0gc3RhY2sgZnJhbWVzIHRvIGdldCBwcm9wZXIgZGV0YWlscyAoZS5nLlxuICogZmlsZW5hbWUsIGxpbmUgKyBjb2wgbnVtYmVyKSBmb3IgYSBzaW5nbGUgY29tcG9uZW50IGluIGEgY29tcG9uZW50IHN0YWNrLiBXZVxuICogZG8gdGhpcyBieTpcbiAqICAgKDEpIHRocm93aW5nIGFuZCBjYXRjaGluZyBhbiBlcnJvciBpbiB0aGUgZnVuY3Rpb24gLSB0aGlzIHdpbGwgYmUgb3VyXG4gKiAgICAgICBjb250cm9sIGVycm9yLlxuICogICAoMikgY2FsbGluZyB0aGUgY29tcG9uZW50IHdoaWNoIHdpbGwgZXZlbnR1YWxseSB0aHJvdyBhbiBlcnJvciB0aGF0IHdlJ2xsXG4gKiAgICAgICBjYXRjaCAtIHRoaXMgd2lsbCBiZSBvdXIgc2FtcGxlIGVycm9yLlxuICogICAoMykgZGlmZmluZyB0aGUgY29udHJvbCBhbmQgc2FtcGxlIGVycm9yIHN0YWNrcyB0byBmaW5kIHRoZSBzdGFjayBmcmFtZVxuICogICAgICAgd2hpY2ggcmVwcmVzZW50cyBvdXIgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV0gSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuICAvKipcbiAgICogRmluZGluZyBhIGNvbW1vbiBzdGFjayBmcmFtZSBiZXR3ZWVuIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgY2FuIGJlXG4gICAqIHRyaWNreSBnaXZlbiB0aGUgZGlmZmVyZW50IHR5cGVzIGFuZCBsZXZlbHMgb2Ygc3RhY2sgdHJhY2UgdHJ1bmNhdGlvbiBmcm9tXG4gICAqIGRpZmZlcmVudCBKUyBWTXMuIFNvIGluc3RlYWQgd2UnbGwgYXR0ZW1wdCB0byBjb250cm9sIHdoYXQgdGhhdCBjb21tb25cbiAgICogZnJhbWUgc2hvdWxkIGJlIHRocm91Z2ggdGhpcyBvYmplY3QgbWV0aG9kOlxuICAgKiBIYXZpbmcgYm90aCB0aGUgc2FtcGxlIGFuZCBjb250cm9sIGVycm9ycyBiZSBpbiB0aGUgZnVuY3Rpb24gdW5kZXIgdGhlXG4gICAqIGBEZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lUm9vdGAgcHJvcGVydHksICsgc2V0dGluZyB0aGUgYG5hbWVgIGFuZFxuICAgKiBgZGlzcGxheU5hbWVgIHByb3BlcnRpZXMgb2YgdGhlIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBhIHN0YWNrXG4gICAqIGZyYW1lIGV4aXN0cyB0aGF0IGhhcyB0aGUgbWV0aG9kIG5hbWUgYERlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWVSb290YCBpblxuICAgKiBpdCBmb3IgYm90aCBjb250cm9sIGFuZCBzYW1wbGUgc3RhY2tzLlxuICAgKi9cblxuXG4gIHZhciBSdW5JblJvb3RGcmFtZSA9IHtcbiAgICBEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjb250cm9sO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICAgICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xuXG5cbiAgICAgICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICB9IC8vIFRPRE8obHVuYSk6IFRoaXMgd2lsbCBjdXJyZW50bHkgb25seSB0aHJvdyBpZiB0aGUgZnVuY3Rpb24gY29tcG9uZW50XG4gICAgICAgICAgLy8gdHJpZXMgdG8gYWNjZXNzIFJlYWN0L1JlYWN0RE9NL3Byb3BzLiBXZSBzaG91bGQgcHJvYmFibHkgbWFrZSB0aGlzIHRocm93XG4gICAgICAgICAgLy8gaW4gc2ltcGxlIGNvbXBvbmVudHMgdG9vXG5cblxuICAgICAgICAgIHZhciBtYXliZVByb21pc2UgPSBmbigpOyAvLyBJZiB0aGUgZnVuY3Rpb24gY29tcG9uZW50IHJldHVybnMgYSBwcm9taXNlLCBpdCdzIGxpa2VseSBhbiBhc3luY1xuICAgICAgICAgIC8vIGNvbXBvbmVudCwgd2hpY2ggd2UgZG9uJ3QgeWV0IHN1cHBvcnQuIEF0dGFjaCBhIG5vb3AgY2F0Y2ggaGFuZGxlciB0b1xuICAgICAgICAgIC8vIHNpbGVuY2UgdGhlIGVycm9yLlxuICAgICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBjb21wb25lbnQgc3RhY2tzIGZvciBhc3luYyBjbGllbnQgY29tcG9uZW50cz9cblxuICAgICAgICAgIGlmIChtYXliZVByb21pc2UgJiYgdHlwZW9mIG1heWJlUHJvbWlzZS5jYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbWF5YmVQcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgICAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgICAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gW3NhbXBsZS5zdGFjaywgY29udHJvbC5zdGFja107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICB9XG4gIH07IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuXG4gIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZSA9ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnO1xuICB2YXIgbmFtZVByb3BEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsICduYW1lJyk7IC8vIEJlZm9yZSBFUzYsIHRoZSBgbmFtZWAgcHJvcGVydHkgd2FzIG5vdCBjb25maWd1cmFibGUuXG5cbiAgaWYgKG5hbWVQcm9wRGVzY3JpcHRvciAmJiBuYW1lUHJvcERlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgLy8gVjggdXRpbGl6ZXMgYSBmdW5jdGlvbidzIGBuYW1lYCBwcm9wZXJ0eSB3aGVuIGdlbmVyYXRpbmcgYSBzdGFjayB0cmFjZS5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCAvLyBDb25maWd1cmFibGUgcHJvcGVydGllcyBjYW4gYmUgdXBkYXRlZCBldmVuIGlmIGl0cyB3cml0YWJsZSBkZXNjcmlwdG9yXG4gICAgLy8gaXMgc2V0IHRvIGBmYWxzZWAuXG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG4gICAgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCdcbiAgICB9KTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgdmFyIF9SdW5JblJvb3RGcmFtZSREZXRlciA9IFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCgpLFxuICAgICAgICBzYW1wbGVTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclswXSxcbiAgICAgICAgY29udHJvbFN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzFdO1xuXG4gICAgaWYgKHNhbXBsZVN0YWNrICYmIGNvbnRyb2xTdGFjaykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2xTdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IDA7XG4gICAgICB2YXIgYyA9IDA7XG5cbiAgICAgIHdoaWxlIChzIDwgc2FtcGxlTGluZXMubGVuZ3RoICYmICFzYW1wbGVMaW5lc1tzXS5pbmNsdWRlcygnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JykpIHtcbiAgICAgICAgcysrO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAoYyA8IGNvbnRyb2xMaW5lcy5sZW5ndGggJiYgIWNvbnRyb2xMaW5lc1tjXS5pbmNsdWRlcygnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JykpIHtcbiAgICAgICAgYysrO1xuICAgICAgfSAvLyBXZSBjb3VsZG4ndCBmaW5kIG91ciBpbnRlbnRpb25hbGx5IGluamVjdGVkIGNvbW1vbiByb290IGZyYW1lLCBhdHRlbXB0XG4gICAgICAvLyB0byBmaW5kIGFub3RoZXIgY29tbW9uIHJvb3QgZnJhbWUgYnkgc2VhcmNoIGZyb20gdGhlIGJvdHRvbSBvZiB0aGVcbiAgICAgIC8vIGNvbnRyb2wgc3RhY2suLi5cblxuXG4gICAgICBpZiAocyA9PT0gc2FtcGxlTGluZXMubGVuZ3RoIHx8IGMgPT09IGNvbnRyb2xMaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICAgIGMtLTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTsgLy8gSWYgb3VyIGNvbXBvbmVudCBmcmFtZSBpcyBsYWJlbGVkIFwiPGFub255bW91cz5cIlxuICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIGEgdXNlci1wcm92aWRlZCBcImRpc3BsYXlOYW1lXCJcbiAgICAgICAgICAgICAgICAvLyBzcGxpY2UgaXQgaW4gdG8gbWFrZSB0aGUgc3RhY2sgbW9yZSByZWFkYWJsZS5cblxuXG4gICAgICAgICAgICAgICAgaWYgKGZuLmRpc3BsYXlOYW1lICYmIF9mcmFtZS5pbmNsdWRlcygnPGFub255bW91cz4nKSkge1xuICAgICAgICAgICAgICAgICAgX2ZyYW1lID0gX2ZyYW1lLnJlcGxhY2UoJzxhbm9ueW1vdXM+JywgZm4uZGlzcGxheU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXVzZV0gVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKGhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG4vKlxuICogVGhlIGAnJyArIHZhbHVlYCBwYXR0ZXJuICh1c2VkIGluIHBlcmYtc2Vuc2l0aXZlIGNvZGUpIHRocm93cyBmb3IgU3ltYm9sXG4gKiBhbmQgVGVtcG9yYWwuKiB0eXBlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzIyMDY0LlxuICpcbiAqIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgd2lsbCB0aHJvdyBhbiBlYXNpZXItdG8tdW5kZXJzdGFuZCxcbiAqIGVhc2llci10by1kZWJ1ZyBleGNlcHRpb24gd2l0aCBhIGNsZWFyIGVycm9ycyBtZXNzYWdlIG1lc3NhZ2UgZXhwbGFpbmluZyB0aGVcbiAqIHByb2JsZW0uIChJbnN0ZWFkIG9mIGEgY29uZnVzaW5nIGV4Y2VwdGlvbiB0aHJvd24gaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvblxuICogb2YgdGhlIGB2YWx1ZWAgb2JqZWN0KS5cbiAqL1xuLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cbmZ1bmN0aW9uIHR5cGVOYW1lKHZhbHVlKSB7XG4gIHtcbiAgICAvLyB0b1N0cmluZ1RhZyBpcyBuZWVkZWQgZm9yIG5hbWVzcGFjZWQgdHlwZXMgbGlrZSBUZW1wb3JhbC5JbnN0YW50XG4gICAgdmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wudG9TdHJpbmdUYWc7XG4gICAgdmFyIHR5cGUgPSBoYXNUb1N0cmluZ1RhZyAmJiB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddIHx8IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ09iamVjdCc7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG59IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5cblxuZnVuY3Rpb24gd2lsbENvZXJjaW9uVGhyb3codmFsdWUpIHtcbiAge1xuICAgIHRyeSB7XG4gICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgLy8gSWYgeW91IGVuZGVkIHVwIGhlcmUgYnkgZm9sbG93aW5nIGFuIGV4Y2VwdGlvbiBjYWxsIHN0YWNrLCBoZXJlJ3Mgd2hhdCdzXG4gIC8vIGhhcHBlbmVkOiB5b3Ugc3VwcGxpZWQgYW4gb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBSZWFjdCAoYXMgYSBwcm9wLCBrZXksXG4gIC8vIERPTSBhdHRyaWJ1dGUsIENTUyBwcm9wZXJ0eSwgc3RyaW5nIHJlZiwgZXRjLikgYW5kIHdoZW4gUmVhY3QgdHJpZWQgdG9cbiAgLy8gY29lcmNlIGl0IHRvIGEgc3RyaW5nIHVzaW5nIGAnJyArIHZhbHVlYCwgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uXG4gIC8vXG4gIC8vIFRoZSBtb3N0IGNvbW1vbiB0eXBlcyB0aGF0IHdpbGwgY2F1c2UgdGhpcyBleGNlcHRpb24gYXJlIGBTeW1ib2xgIGluc3RhbmNlc1xuICAvLyBhbmQgVGVtcG9yYWwgb2JqZWN0cyBsaWtlIGBUZW1wb3JhbC5JbnN0YW50YC4gQnV0IGFueSBvYmplY3QgdGhhdCBoYXMgYVxuICAvLyBgdmFsdWVPZmAgb3IgYFtTeW1ib2wudG9QcmltaXRpdmVdYCBtZXRob2QgdGhhdCB0aHJvd3Mgd2lsbCBhbHNvIGNhdXNlIHRoaXNcbiAgLy8gZXhjZXB0aW9uLiAoTGlicmFyeSBhdXRob3JzIGRvIHRoaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIHVzaW5nIGJ1aWx0LWluXG4gIC8vIG51bWVyaWMgb3BlcmF0b3JzIGxpa2UgYCtgIG9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGxpa2UgYD49YCBiZWNhdXNlIGN1c3RvbVxuICAvLyBtZXRob2RzIGFyZSBuZWVkZWQgdG8gcGVyZm9ybSBhY2N1cmF0ZSBhcml0aG1ldGljIG9yIGNvbXBhcmlzb24uKVxuICAvL1xuICAvLyBUbyBmaXggdGhlIHByb2JsZW0sIGNvZXJjZSB0aGlzIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXG4gIC8vIHBhc3NpbmcgaXQgdG8gUmVhY3QuIFRoZSBtb3N0IHJlbGlhYmxlIHdheSBpcyB1c3VhbGx5IGBTdHJpbmcodmFsdWUpYC5cbiAgLy9cbiAgLy8gVG8gZmluZCB3aGljaCB2YWx1ZSBpcyB0aHJvd2luZywgY2hlY2sgdGhlIGJyb3dzZXIgb3IgZGVidWdnZXIgY29uc29sZS5cbiAgLy8gQmVmb3JlIHRoaXMgZXhjZXB0aW9uIHdhcyB0aHJvd24sIHRoZXJlIHNob3VsZCBiZSBgY29uc29sZS5lcnJvcmAgb3V0cHV0XG4gIC8vIHRoYXQgc2hvd3MgdGhlIHR5cGUgKFN5bWJvbCwgVGVtcG9yYWwuUGxhaW5EYXRlLCBldGMuKSB0aGF0IGNhdXNlZCB0aGVcbiAgLy8gcHJvYmxlbSBhbmQgaG93IHRoYXQgdHlwZSB3YXMgdXNlZDoga2V5LCBhdHJyaWJ1dGUsIGlucHV0IHZhbHVlIHByb3AsIGV0Yy5cbiAgLy8gSW4gbW9zdCBjYXNlcywgdGhpcyBjb25zb2xlIG91dHB1dCBhbHNvIHNob3dzIHRoZSBjb21wb25lbnQgYW5kIGl0c1xuICAvLyBhbmNlc3RvciBjb21wb25lbnRzIHdoZXJlIHRoZSBleGNlcHRpb24gaGFwcGVuZWQuXG4gIC8vXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAge1xuICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuJyArICcgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuJywgdHlwZU5hbWUodmFsdWUpKTtcblxuICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xudmFyIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCAmJiBzZWxmICYmIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudC5zdGF0ZU5vZGUgIT09IHNlbGYpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQudHlwZSksIGNvbmZpZy5yZWYpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAge1xuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAge1xuICAgIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIgYWRoZXJlcyB0b1xuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIGluc3RhbmNlb2YgY2hlY2tcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQGludGVybmFsXG4gKi9cblxuXG5mdW5jdGlvbiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JmY3MvcHVsbC8xMDdcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cblxuZnVuY3Rpb24ganN4REVWKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIHNvdXJjZSwgc2VsZikge1xuICB7XG4gICAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB2YXIga2V5ID0gbnVsbDtcbiAgICB2YXIgcmVmID0gbnVsbDsgLy8gQ3VycmVudGx5LCBrZXkgY2FuIGJlIHNwcmVhZCBpbiBhcyBhIHByb3AuIFRoaXMgY2F1c2VzIGEgcG90ZW50aWFsXG4gICAgLy8gaXNzdWUgaWYga2V5IGlzIGFsc28gZXhwbGljaXRseSBkZWNsYXJlZCAoaWUuIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+XG4gICAgLy8gb3IgPGRpdiBrZXk9XCJIaVwiIHsuLi5wcm9wc30gLz4gKS4gV2Ugd2FudCB0byBkZXByZWNhdGUga2V5IHNwcmVhZCxcbiAgICAvLyBidXQgYXMgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAsIHdlIHdpbGwgdXNlIGpzeERFViBmb3IgZXZlcnl0aGluZyBleGNlcHRcbiAgICAvLyA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPiwgYmVjYXVzZSB3ZSBhcmVuJ3QgY3VycmVudGx5IGFibGUgdG8gdGVsbCBpZlxuICAgIC8vIGtleSBpcyBleHBsaWNpdGx5IGRlY2xhcmVkIHRvIGJlIHVuZGVmaW5lZCBvciBub3QuXG5cbiAgICBpZiAobWF5YmVLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1heWJlS2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBtYXliZUtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQsIHByb3BzKTtcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xuXG57XG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAge1xuICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICB7XG4gICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICB2YXIgcGFyZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShwYXJlbnRUeXBlKTtcblxuICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmZvO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gICAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gICAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8ICFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIDsgZWxzZSBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFR5cGVzO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBOb3RlOiBNZW1vIG9ubHkgY2hlY2tzIG91dGVyIHByb3BzIGhlcmUuXG4gICAgLy8gSW5uZXIgcHJvcHMgYXJlIGNoZWNrZWQgaW4gdGhlIHJlY29uY2lsZXIuXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5BYm91dEtleVNwcmVhZCA9IHt9O1xuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgaXNTdGF0aWNDaGlsZHJlbiwgc291cmNlLCBzZWxmKSB7XG4gIHtcbiAgICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG5cbiAgICBpZiAoIXZhbGlkVHlwZSkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpO1xuXG4gICAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZVN0cmluZztcblxuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh0eXBlKSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudCA9IGpzeERFVih0eXBlLCBwcm9wcywga2V5LCBzb3VyY2UsIHNlbGYpOyAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAgIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gICAgLy8gV2UgZG9uJ3Qgd2FudCBleGNlcHRpb24gYmVoYXZpb3IgdG8gZGlmZmVyIGJldHdlZW4gZGV2IGFuZCBwcm9kLlxuICAgIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gICAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgICBpZiAodmFsaWRUeXBlKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcblxuICAgICAgaWYgKGNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW5baV0sIHR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCAna2V5JykpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIHJldHVybiBrICE9PSAna2V5JztcbiAgICAgIH0pO1xuICAgICAgdmFyIGJlZm9yZUV4YW1wbGUgPSBrZXlzLmxlbmd0aCA+IDAgPyAne2tleTogc29tZUtleSwgJyArIGtleXMuam9pbignOiAuLi4sICcpICsgJzogLi4ufScgOiAne2tleTogc29tZUtleX0nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEtleVNwcmVhZFtjb21wb25lbnROYW1lICsgYmVmb3JlRXhhbXBsZV0pIHtcbiAgICAgICAgdmFyIGFmdGVyRXhhbXBsZSA9IGtleXMubGVuZ3RoID4gMCA/ICd7JyArIGtleXMuam9pbignOiAuLi4sICcpICsgJzogLi4ufScgOiAne30nO1xuXG4gICAgICAgIGVycm9yKCdBIHByb3BzIG9iamVjdCBjb250YWluaW5nIGEgXCJrZXlcIiBwcm9wIGlzIGJlaW5nIHNwcmVhZCBpbnRvIEpTWDpcXG4nICsgJyAgbGV0IHByb3BzID0gJXM7XFxuJyArICcgIDwlcyB7Li4ucHJvcHN9IC8+XFxuJyArICdSZWFjdCBrZXlzIG11c3QgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIEpTWCB3aXRob3V0IHVzaW5nIHNwcmVhZDpcXG4nICsgJyAgbGV0IHByb3BzID0gJXM7XFxuJyArICcgIDwlcyBrZXk9e3NvbWVLZXl9IHsuLi5wcm9wc30gLz4nLCBiZWZvcmVFeGFtcGxlLCBjb21wb25lbnROYW1lLCBhZnRlckV4YW1wbGUsIGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEtleVNwcmVhZFtjb21wb25lbnROYW1lICsgYmVmb3JlRXhhbXBsZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG59IC8vIFRoZXNlIHR3byBmdW5jdGlvbnMgZXhpc3QgdG8gc3RpbGwgZ2V0IGNoaWxkIHdhcm5pbmdzIGluIGRldlxuLy8gZXZlbiB3aXRoIHRoZSBwcm9kIHRyYW5zZm9ybS4gVGhpcyBtZWFucyB0aGF0IGpzeERFViBpcyBwdXJlbHlcbi8vIG9wdC1pbiBiZWhhdmlvciBmb3IgYmV0dGVyIG1lc3NhZ2VzIGJ1dCB0aGF0IHdlIHdvbid0IHN0b3Bcbi8vIGdpdmluZyB5b3Ugd2FybmluZ3MgaWYgeW91IHVzZSBwcm9kdWN0aW9uIGFwaXMuXG5cbmZ1bmN0aW9uIGpzeFdpdGhWYWxpZGF0aW9uU3RhdGljKHR5cGUsIHByb3BzLCBrZXkpIHtcbiAge1xuICAgIHJldHVybiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCB0cnVlKTtcbiAgfVxufVxuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb25EeW5hbWljKHR5cGUsIHByb3BzLCBrZXkpIHtcbiAge1xuICAgIHJldHVybiBqc3hXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywga2V5LCBmYWxzZSk7XG4gIH1cbn1cblxudmFyIGpzeCA9IGpzeFdpdGhWYWxpZGF0aW9uRHluYW1pYyA7IC8vIHdlIG1heSB3YW50IHRvIHNwZWNpYWwgY2FzZSBqc3hzIGludGVybmFsbHkgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RhdGljIGNoaWxkcmVuLlxuLy8gZm9yIG5vdyB3ZSBjYW4gc2hpcCBpZGVudGljYWwgcHJvZCBmdW5jdGlvbnNcblxudmFyIGpzeHMgPSBqc3hXaXRoVmFsaWRhdGlvblN0YXRpYyA7XG5cbmV4cG9ydHMuRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuZXhwb3J0cy5qc3ggPSBqc3g7XG5leHBvcnRzLmpzeHMgPSBqc3hzO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react.development.js": +/*!************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react/cjs/react.development.js ***! + \************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* module decorator */ module = __webpack_require__.nmd(module);\n/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var ReactVersion = '18.3.0-canary-60a927d04-20240113';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\n/**\n * Keeps track of the current dispatcher.\n */\nvar ReactCurrentDispatcher$1 = {\n current: null\n};\n\n/**\n * Keeps track of the current Cache dispatcher.\n */\nvar ReactCurrentCache = {\n current: null\n};\n\n/**\n * Keeps track of the current batch's configuration such as how long an update\n * should suspend for if it needs to.\n */\nvar ReactCurrentBatchConfig = {\n transition: null\n};\n\nvar ReactCurrentActQueue = {\n current: null,\n // Used to reproduce behavior of `batchedUpdates` in legacy mode.\n isBatchingLegacy: false,\n didScheduleLegacyUpdate: false,\n // Tracks whether something called `use` during the current batch of work.\n // Determines whether we should yield to microtasks to unwrap already resolved\n // promises without suspending.\n didUsePromise: false\n};\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\nvar ReactDebugCurrentFrame$1 = {};\nvar currentExtraStackFrame = null;\nfunction setExtraStackFrame(stack) {\n {\n currentExtraStackFrame = stack;\n }\n}\n\n{\n ReactDebugCurrentFrame$1.setExtraStackFrame = function (stack) {\n {\n currentExtraStackFrame = stack;\n }\n }; // Stack implementation injected by the current renderer.\n\n\n ReactDebugCurrentFrame$1.getCurrentStack = null;\n\n ReactDebugCurrentFrame$1.getStackAddendum = function () {\n var stack = ''; // Add an extra top frame while an element is being validated\n\n if (currentExtraStackFrame) {\n stack += currentExtraStackFrame;\n } // Delegate to the injected renderer-specific implementation\n\n\n var impl = ReactDebugCurrentFrame$1.getCurrentStack;\n\n if (impl) {\n stack += impl() || '';\n }\n\n return stack;\n };\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false;\n\nvar ReactSharedInternals = {\n ReactCurrentDispatcher: ReactCurrentDispatcher$1,\n ReactCurrentCache: ReactCurrentCache,\n ReactCurrentBatchConfig: ReactCurrentBatchConfig,\n ReactCurrentOwner: ReactCurrentOwner\n};\n\n{\n ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame$1;\n ReactSharedInternals.ReactCurrentActQueue = ReactCurrentActQueue;\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n {\n {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n printWarning('warn', format, args);\n }\n }\n}\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n {\n var _constructor = publicInstance.constructor;\n var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n var warningKey = componentName + \".\" + callerName;\n\n if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n return;\n }\n\n error(\"Can't call %s on a component that is not yet mounted. \" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\n\n didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n }\n}\n/**\n * This is the abstract API for an update queue.\n */\n\n\nvar ReactNoopUpdateQueue = {\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance, callback, callerName) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} Name of the calling function in the public API.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n warnNoop(publicInstance, 'setState');\n }\n};\n\nvar assign = Object.assign;\n\nvar emptyObject = {};\n\n{\n Object.freeze(emptyObject);\n}\n/**\n * Base class helpers for the updating state of a component.\n */\n\n\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context; // If a component has string refs, we will assign a different object later.\n\n this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the\n // renderer.\n\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\n\nComponent.prototype.setState = function (partialState, callback) {\n if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) {\n throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.');\n }\n\n this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\n\n\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n\n\n{\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n\n var defineDeprecationWarning = function (methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n\n return undefined;\n }\n });\n };\n\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nfunction ComponentDummy() {}\n\nComponentDummy.prototype = Component.prototype;\n/**\n * Convenience component with default shallow equality check for sCU.\n */\n\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context; // If a component has string refs, we will assign a different object later.\n\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.\n\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = true;\n\n// an immutable object with a single mutable value\nfunction createRef() {\n var refObject = {\n current: null\n };\n\n {\n Object.seal(refObject);\n }\n\n return refObject;\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n return type;\n }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n if (typeof type === 'function') {\n if (type.$$typeof === REACT_CLIENT_REFERENCE$2) {\n // TODO: Create a convention for naming client references with debug info.\n return null;\n }\n\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n case REACT_CACHE_TYPE:\n {\n return 'Cache';\n }\n\n }\n\n if (typeof type === 'object') {\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n }\n }\n\n return null;\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n var warnAboutAccessingKey = function () {\n {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n var warnAboutAccessingRef = function () {\n {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nfunction ReactElement(type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n}\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\n\nfunction createElement$1(type, config, children) {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n if (hasValidRef(config)) {\n ref = config.ref;\n\n {\n warnIfStringRefCannotBeAutoConverted(config);\n }\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n } // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n\n\n var childrenLength = arguments.length - 2;\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n\n {\n if (Object.freeze) {\n Object.freeze(childArray);\n }\n }\n\n props.children = childArray;\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n {\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n return newElement;\n}\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\n\nfunction cloneElement$1(element, config, children) {\n if (element === null || element === undefined) {\n throw new Error(\"React.cloneElement(...): The argument must be a React element, but you passed \" + element + \".\");\n }\n\n var propName; // Original props are copied\n\n var props = assign({}, element.props); // Reserved names are extracted\n\n var key = element.key;\n var ref = element.ref; // Self is preserved since the owner is preserved.\n\n var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n\n var source = element._source; // Owner will be preserved, unless ref is overridden\n\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n } // Remaining properties override existing props\n\n\n var defaultProps;\n\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n } // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n\n\n var childrenLength = arguments.length - 2;\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = key.replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n return '$' + escapedString;\n}\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\n\nvar didWarnAboutMaps = false;\nvar userProvidedKeyEscapeRegex = /\\/+/g;\n\nfunction escapeUserProvidedKey(text) {\n return text.replace(userProvidedKeyEscapeRegex, '$&/');\n}\n/**\n * Generate a key string that identifies a element within a set.\n *\n * @param {*} element A element that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\n\n\nfunction getElementKey(element, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (typeof element === 'object' && element !== null && element.key != null) {\n // Explicit key\n {\n checkKeyStringCoercion(element.key);\n }\n\n return escape('' + element.key);\n } // Implicit key determined by the index in the set\n\n\n return index.toString(36);\n}\n\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n var invokeCallback = false;\n\n if (children === null) {\n invokeCallback = true;\n } else {\n switch (type) {\n case 'string':\n case 'number':\n invokeCallback = true;\n break;\n\n case 'object':\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = true;\n }\n\n }\n }\n\n if (invokeCallback) {\n var _child = children;\n var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows:\n\n var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar;\n\n if (isArray(mappedChild)) {\n var escapedChildKey = '';\n\n if (childKey != null) {\n escapedChildKey = escapeUserProvidedKey(childKey) + '/';\n }\n\n mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) {\n return c;\n });\n } else if (mappedChild != null) {\n if (isValidElement(mappedChild)) {\n {\n // The `if` statement here prevents auto-disabling of the safe\n // coercion ESLint rule, so we must manually disable it below.\n // $FlowFixMe[incompatible-type] Flow incorrectly thinks React.Portal doesn't have a key\n if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) {\n checkKeyStringCoercion(mappedChild.key);\n }\n }\n\n mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n escapedPrefix + ( // $FlowFixMe[incompatible-type] Flow incorrectly thinks React.Portal doesn't have a key\n mappedChild.key && (!_child || _child.key !== mappedChild.key) ? escapeUserProvidedKey( // $FlowFixMe[unsafe-addition]\n '' + mappedChild.key // eslint-disable-line react-internal/safe-string-coercion\n ) + '/' : '') + childKey);\n }\n\n array.push(mappedChild);\n }\n\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getElementKey(child, i);\n subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n\n if (typeof iteratorFn === 'function') {\n var iterableChildren = children;\n\n {\n // Warn about using Maps as children\n if (iteratorFn === iterableChildren.entries) {\n if (!didWarnAboutMaps) {\n warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');\n }\n\n didWarnAboutMaps = true;\n }\n }\n\n var iterator = iteratorFn.call(iterableChildren);\n var step;\n var ii = 0; // $FlowFixMe[incompatible-use] `iteratorFn` might return null according to typing.\n\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getElementKey(child, ii++);\n subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);\n }\n } else if (type === 'object') {\n // eslint-disable-next-line react-internal/safe-string-coercion\n var childrenString = String(children);\n throw new Error(\"Objects are not valid as a React child (found: \" + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + \"). \" + 'If you meant to render a collection of children, use an array ' + 'instead.');\n }\n }\n\n return subtreeCount;\n}\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\n\n\nfunction mapChildren(children, func, context) {\n if (children == null) {\n // $FlowFixMe limitation refining abstract types in Flow\n return children;\n }\n\n var result = [];\n var count = 0;\n mapIntoArray(children, result, '', '', function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\n\n\nfunction countChildren(children) {\n var n = 0;\n mapChildren(children, function () {\n n++; // Don't return anything\n });\n return n;\n}\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\n\n\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n mapChildren(children, // $FlowFixMe[missing-this-annot]\n function () {\n forEachFunc.apply(this, arguments); // Don't return anything.\n }, forEachContext);\n}\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\n\n\nfunction toArray(children) {\n return mapChildren(children, function (child) {\n return child;\n }) || [];\n}\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\n\n\nfunction onlyChild(children) {\n if (!isValidElement(children)) {\n throw new Error('React.Children.only expected to receive a single React element child.');\n }\n\n return children;\n}\n\nfunction createContext(defaultValue) {\n // TODO: Second argument used to be an optional `calculateChangedBits`\n // function. Warn to reserve for future use?\n var context = {\n $$typeof: REACT_CONTEXT_TYPE,\n // As a workaround to support multiple concurrent renderers, we categorize\n // some renderers as primary and others as secondary. We only expect\n // there to be two concurrent renderers at most: React Native (primary) and\n // Fabric (secondary); React DOM (primary) and React ART (secondary).\n // Secondary renderers store their context values on separate fields.\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n // Used to track how many concurrent renderers this context currently\n // supports within in a single renderer. Such as parallel server rendering.\n _threadCount: 0,\n // These are circular\n Provider: null,\n Consumer: null,\n // Add these to use same hidden class in VM as ServerContext\n _defaultValue: null,\n _globalName: null\n };\n context.Provider = {\n $$typeof: REACT_PROVIDER_TYPE,\n _context: context\n };\n var hasWarnedAboutUsingNestedContextConsumers = false;\n var hasWarnedAboutUsingConsumerProvider = false;\n var hasWarnedAboutDisplayNameOnConsumer = false;\n\n {\n // A separate object, but proxies back to the original context object for\n // backwards compatibility. It has a different $$typeof, so we can properly\n // warn for the incorrect usage of Context as a Consumer.\n var Consumer = {\n $$typeof: REACT_CONTEXT_TYPE,\n _context: context\n }; // $FlowFixMe[prop-missing]: Flow complains about not setting a value, which is intentional here\n\n Object.defineProperties(Consumer, {\n Provider: {\n get: function () {\n if (!hasWarnedAboutUsingConsumerProvider) {\n hasWarnedAboutUsingConsumerProvider = true;\n\n error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\n }\n\n return context.Provider;\n },\n set: function (_Provider) {\n context.Provider = _Provider;\n }\n },\n _currentValue: {\n get: function () {\n return context._currentValue;\n },\n set: function (_currentValue) {\n context._currentValue = _currentValue;\n }\n },\n _currentValue2: {\n get: function () {\n return context._currentValue2;\n },\n set: function (_currentValue2) {\n context._currentValue2 = _currentValue2;\n }\n },\n _threadCount: {\n get: function () {\n return context._threadCount;\n },\n set: function (_threadCount) {\n context._threadCount = _threadCount;\n }\n },\n Consumer: {\n get: function () {\n if (!hasWarnedAboutUsingNestedContextConsumers) {\n hasWarnedAboutUsingNestedContextConsumers = true;\n\n error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n\n return context.Consumer;\n }\n },\n displayName: {\n get: function () {\n return context.displayName;\n },\n set: function (displayName) {\n if (!hasWarnedAboutDisplayNameOnConsumer) {\n warn('Setting `displayName` on Context.Consumer has no effect. ' + \"You should set it directly on the context with Context.displayName = '%s'.\", displayName);\n\n hasWarnedAboutDisplayNameOnConsumer = true;\n }\n }\n }\n }); // $FlowFixMe[prop-missing]: Flow complains about missing properties because it doesn't understand defineProperty\n\n context.Consumer = Consumer;\n }\n\n {\n context._currentRenderer = null;\n context._currentRenderer2 = null;\n }\n\n return context;\n}\n\nvar Uninitialized = -1;\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\n\nfunction lazyInitializer(payload) {\n if (payload._status === Uninitialized) {\n var ctor = payload._result;\n var thenable = ctor(); // Transition to the next state.\n // This might throw either because it's missing or throws. If so, we treat it\n // as still uninitialized and try again next time. Which is the same as what\n // happens if the ctor or any wrappers processing the ctor throws. This might\n // end up fixing it if the resolution was a concurrency bug.\n\n thenable.then(function (moduleObject) {\n if (payload._status === Pending || payload._status === Uninitialized) {\n // Transition to the next state.\n var resolved = payload;\n resolved._status = Resolved;\n resolved._result = moduleObject;\n }\n }, function (error) {\n if (payload._status === Pending || payload._status === Uninitialized) {\n // Transition to the next state.\n var rejected = payload;\n rejected._status = Rejected;\n rejected._result = error;\n }\n });\n\n if (payload._status === Uninitialized) {\n // In case, we're still uninitialized, then we're waiting for the thenable\n // to resolve. Set it as pending in the meantime.\n var pending = payload;\n pending._status = Pending;\n pending._result = thenable;\n }\n }\n\n if (payload._status === Resolved) {\n var moduleObject = payload._result;\n\n {\n if (moduleObject === undefined) {\n error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n ' + // Break up imports to avoid accidentally parsing them as dependencies.\n 'const MyComponent = lazy(() => imp' + \"ort('./MyComponent'))\\n\\n\" + 'Did you accidentally put curly braces around the import?', moduleObject);\n }\n }\n\n {\n if (!('default' in moduleObject)) {\n error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n ' + // Break up imports to avoid accidentally parsing them as dependencies.\n 'const MyComponent = lazy(() => imp' + \"ort('./MyComponent'))\", moduleObject);\n }\n }\n\n return moduleObject.default;\n } else {\n throw payload._result;\n }\n}\n\nfunction lazy(ctor) {\n var payload = {\n // We use these fields to store the result.\n _status: Uninitialized,\n _result: ctor\n };\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _payload: payload,\n _init: lazyInitializer\n };\n\n {\n // In production, this would just set it on the object.\n var defaultProps;\n var propTypes; // $FlowFixMe[prop-missing]\n\n Object.defineProperties(lazyType, {\n defaultProps: {\n configurable: true,\n get: function () {\n return defaultProps;\n },\n // $FlowFixMe[missing-local-annot]\n set: function (newDefaultProps) {\n error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n defaultProps = newDefaultProps; // Match production behavior more closely:\n // $FlowFixMe[prop-missing]\n\n Object.defineProperty(lazyType, 'defaultProps', {\n enumerable: true\n });\n }\n },\n propTypes: {\n configurable: true,\n get: function () {\n return propTypes;\n },\n // $FlowFixMe[missing-local-annot]\n set: function (newPropTypes) {\n error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n propTypes = newPropTypes; // Match production behavior more closely:\n // $FlowFixMe[prop-missing]\n\n Object.defineProperty(lazyType, 'propTypes', {\n enumerable: true\n });\n }\n }\n });\n }\n\n return lazyType;\n}\n\nfunction forwardRef(render) {\n {\n if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n } else if (typeof render !== 'function') {\n error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\n } else {\n if (render.length !== 0 && render.length !== 2) {\n error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');\n }\n }\n\n if (render != null) {\n if (render.defaultProps != null || render.propTypes != null) {\n error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');\n }\n }\n }\n\n var elementType = {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: render\n };\n\n {\n var ownName;\n Object.defineProperty(elementType, 'displayName', {\n enumerable: false,\n configurable: true,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name; // The inner component shouldn't inherit this display name in most cases,\n // because the component may be used elsewhere.\n // But it's nice for anonymous functions to inherit the name,\n // so that our component-stack generation logic will display their frames.\n // An anonymous function generally suggests a pattern like:\n // React.forwardRef((props, ref) => {...});\n // This kind of inner function is not used elsewhere so the side effect is okay.\n\n if (!render.name && !render.displayName) {\n render.displayName = name;\n }\n }\n });\n }\n\n return elementType;\n}\n\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference');\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction memo(type, compare) {\n {\n if (!isValidElementType(type)) {\n error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\n }\n }\n\n var elementType = {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: compare === undefined ? null : compare\n };\n\n {\n var ownName;\n Object.defineProperty(elementType, 'displayName', {\n enumerable: false,\n configurable: true,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name; // The inner component shouldn't inherit this display name in most cases,\n // because the component may be used elsewhere.\n // But it's nice for anonymous functions to inherit the name,\n // so that our component-stack generation logic will display their frames.\n // An anonymous function generally suggests a pattern like:\n // React.memo((props) => {...});\n // This kind of inner function is not used elsewhere so the side effect is okay.\n\n if (!type.name && !type.displayName) {\n type.displayName = name;\n }\n }\n });\n }\n\n return elementType;\n}\n\nvar UNTERMINATED = 0;\nvar TERMINATED = 1;\nvar ERRORED = 2;\n\nfunction createCacheRoot() {\n return new WeakMap();\n}\n\nfunction createCacheNode() {\n return {\n s: UNTERMINATED,\n // status, represents whether the cached computation returned a value or threw an error\n v: undefined,\n // value, either the cached result or an error, depending on s\n o: null,\n // object cache, a WeakMap where non-primitive arguments are stored\n p: null // primitive cache, a regular Map where primitive arguments are stored.\n\n };\n}\n\nfunction cache(fn) {\n return function () {\n var dispatcher = ReactCurrentCache.current;\n\n if (!dispatcher) {\n // If there is no dispatcher, then we treat this as not being cached.\n // $FlowFixMe[incompatible-call]: We don't want to use rest arguments since we transpile the code.\n return fn.apply(null, arguments);\n }\n\n var fnMap = dispatcher.getCacheForType(createCacheRoot);\n var fnNode = fnMap.get(fn);\n var cacheNode;\n\n if (fnNode === undefined) {\n cacheNode = createCacheNode();\n fnMap.set(fn, cacheNode);\n } else {\n cacheNode = fnNode;\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n var arg = arguments[i];\n\n if (typeof arg === 'function' || typeof arg === 'object' && arg !== null) {\n // Objects go into a WeakMap\n var objectCache = cacheNode.o;\n\n if (objectCache === null) {\n cacheNode.o = objectCache = new WeakMap();\n }\n\n var objectNode = objectCache.get(arg);\n\n if (objectNode === undefined) {\n cacheNode = createCacheNode();\n objectCache.set(arg, cacheNode);\n } else {\n cacheNode = objectNode;\n }\n } else {\n // Primitives go into a regular Map\n var primitiveCache = cacheNode.p;\n\n if (primitiveCache === null) {\n cacheNode.p = primitiveCache = new Map();\n }\n\n var primitiveNode = primitiveCache.get(arg);\n\n if (primitiveNode === undefined) {\n cacheNode = createCacheNode();\n primitiveCache.set(arg, cacheNode);\n } else {\n cacheNode = primitiveNode;\n }\n }\n }\n\n if (cacheNode.s === TERMINATED) {\n return cacheNode.v;\n }\n\n if (cacheNode.s === ERRORED) {\n throw cacheNode.v;\n }\n\n try {\n // $FlowFixMe[incompatible-call]: We don't want to use rest arguments since we transpile the code.\n var result = fn.apply(null, arguments);\n var terminatedNode = cacheNode;\n terminatedNode.s = TERMINATED;\n terminatedNode.v = result;\n return result;\n } catch (error) {\n // We store the first error that's thrown and rethrow it.\n var erroredNode = cacheNode;\n erroredNode.s = ERRORED;\n erroredNode.v = error;\n throw error;\n }\n };\n}\n\nfunction resolveDispatcher() {\n var dispatcher = ReactCurrentDispatcher$1.current;\n\n {\n if (dispatcher === null) {\n error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\\n' + '2. You might be breaking the Rules of Hooks\\n' + '3. You might have more than one copy of React in the same app\\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');\n }\n } // Will result in a null access error if accessed outside render phase. We\n // intentionally don't throw our own error because this is in a hot path.\n // Also helps ensure this is inlined.\n\n\n return dispatcher;\n}\nfunction useContext(Context) {\n var dispatcher = resolveDispatcher();\n\n {\n // TODO: add a more generic warning for invalid values.\n if (Context._context !== undefined) {\n var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs\n // and nobody should be using this in existing code.\n\n if (realContext.Consumer === Context) {\n error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\n } else if (realContext.Provider === Context) {\n error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n }\n }\n }\n\n return dispatcher.useContext(Context);\n}\nfunction useState(initialState) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useState(initialState);\n}\nfunction useReducer(reducer, initialArg, init) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useReducer(reducer, initialArg, init);\n}\nfunction useRef(initialValue) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useRef(initialValue);\n}\nfunction useEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useEffect(create, deps);\n}\nfunction useInsertionEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useInsertionEffect(create, deps);\n}\nfunction useLayoutEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useLayoutEffect(create, deps);\n}\nfunction useCallback(callback, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useCallback(callback, deps);\n}\nfunction useMemo(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useMemo(create, deps);\n}\nfunction useImperativeHandle(ref, create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useImperativeHandle(ref, create, deps);\n}\nfunction useDebugValue(value, formatterFn) {\n {\n var dispatcher = resolveDispatcher();\n return dispatcher.useDebugValue(value, formatterFn);\n }\n}\nfunction useTransition() {\n var dispatcher = resolveDispatcher();\n return dispatcher.useTransition();\n}\nfunction useDeferredValue(value, initialValue) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useDeferredValue(value, initialValue);\n}\nfunction useId() {\n var dispatcher = resolveDispatcher();\n return dispatcher.useId();\n}\nfunction useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\nfunction useCacheRefresh() {\n var dispatcher = resolveDispatcher(); // $FlowFixMe[not-a-function] This is unstable, thus optional\n\n return dispatcher.useCacheRefresh();\n}\nfunction use(usable) {\n var dispatcher = resolveDispatcher();\n return dispatcher.use(usable);\n}\nfunction useOptimistic(passthrough, reducer) {\n var dispatcher = resolveDispatcher(); // $FlowFixMe[not-a-function] This is unstable, thus optional\n\n return dispatcher.useOptimistic(passthrough, reducer);\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n * (1) throwing and catching an error in the function - this will be our\n * control error.\n * (2) calling the component which will eventually throw an error that we'll\n * catch - this will be our sample error.\n * (3) diffing the control and sample error stacks to find the stack frame\n * which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n /**\n * Finding a common stack frame between sample and control errors can be\n * tricky given the different types and levels of stack trace truncation from\n * different JS VMs. So instead we'll attempt to control what that common\n * frame should be through this object method:\n * Having both the sample and control errors be in the function under the\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n * `displayName` properties of the function ensures that a stack\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n * it for both control and sample stacks.\n */\n\n\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n var control;\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe[prop-missing]\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n } // TODO(luna): This will currently only throw if the function component\n // tries to access React/ReactDOM/props. We should probably make this throw\n // in simple components too\n\n\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n // component, which we don't yet support. Attach a noop catch handler to\n // silence the error.\n // TODO: Implement component stacks for async client components?\n\n if (maybePromise && typeof maybePromise.catch === 'function') {\n maybePromise.catch(function () {});\n }\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n return [sample.stack, control.stack];\n }\n }\n\n return [null, null];\n }\n }; // $FlowFixMe[prop-missing]\n\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n if (namePropDescriptor && namePropDescriptor.configurable) {\n // V8 utilizes a function's `name` property when generating a stack trace.\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n // is set to `false`.\n // $FlowFixMe[cannot-write]\n 'name', {\n value: 'DetermineComponentFrameRoot'\n });\n }\n\n try {\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n\n if (sampleStack && controlStack) {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sampleStack.split('\\n');\n var controlLines = controlStack.split('\\n');\n var s = 0;\n var c = 0;\n\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n s++;\n }\n\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n c++;\n } // We couldn't find our intentionally injected common root frame, attempt\n // to find another common root frame by search from the bottom of the\n // control stack...\n\n\n if (s === sampleLines.length || c === controlLines.length) {\n s = sampleLines.length - 1;\n c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n if (true) {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe[incompatible-use] This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement$1(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement$1(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement$1(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n }\n }\n}\n\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n setExtraStackFrame(stack);\n } else {\n setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n}\n\nfunction getSourceInfoErrorAddendumForProps(elementProps) {\n if (elementProps !== null && elementProps !== undefined) {\n return getSourceInfoErrorAddendum(elementProps.__source);\n }\n\n return '';\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = getComponentNameFromType(parentType);\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n {\n setCurrentlyValidatingElement(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n if (typeof node !== 'object' || !node) {\n return;\n }\n\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n if (type.$$typeof === REACT_CLIENT_REFERENCE) {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement(null);\n }\n }\n}\nfunction createElementWithValidation(type, props, children) {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendumForProps(props);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n {\n error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n }\n\n var element = createElement$1.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n}\nvar didWarnAboutDeprecatedCreateFactory = false;\nfunction createFactoryWithValidation(type) {\n var validatedFactory = createElementWithValidation.bind(null, type);\n validatedFactory.type = type;\n\n {\n if (!didWarnAboutDeprecatedCreateFactory) {\n didWarnAboutDeprecatedCreateFactory = true;\n\n warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');\n } // Legacy hook: remove it\n\n\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function () {\n warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n\n return validatedFactory;\n}\nfunction cloneElementWithValidation(element, props, children) {\n var newElement = cloneElement$1.apply(this, arguments);\n\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n\n validatePropTypes(newElement);\n return newElement;\n}\n\nfunction startTransition(scope, options) {\n var prevTransition = ReactCurrentBatchConfig.transition;\n ReactCurrentBatchConfig.transition = {};\n var currentTransition = ReactCurrentBatchConfig.transition;\n\n {\n ReactCurrentBatchConfig.transition._updatedFibers = new Set();\n }\n\n try {\n scope();\n } finally {\n ReactCurrentBatchConfig.transition = prevTransition;\n\n {\n if (prevTransition === null && currentTransition._updatedFibers) {\n var updatedFibersCount = currentTransition._updatedFibers.size;\n\n currentTransition._updatedFibers.clear();\n\n if (updatedFibersCount > 10) {\n warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');\n }\n }\n }\n }\n}\n\nvar didWarnAboutMessageChannel = false;\nvar enqueueTaskImpl = null;\nfunction enqueueTask(task) {\n if (enqueueTaskImpl === null) {\n try {\n // read require off the module object to get around the bundlers.\n // we don't want them to detect a require and bundle a Node polyfill.\n var requireString = ('require' + Math.random()).slice(0, 7);\n var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's\n // version of setImmediate, bypassing fake timers if any.\n\n enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate;\n } catch (_err) {\n // we're in a browser\n // we can't use regular timers because they may still be faked\n // so we try MessageChannel+postMessage instead\n enqueueTaskImpl = function (callback) {\n {\n if (didWarnAboutMessageChannel === false) {\n didWarnAboutMessageChannel = true;\n\n if (typeof MessageChannel === 'undefined') {\n error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.');\n }\n }\n }\n\n var channel = new MessageChannel();\n channel.port1.onmessage = callback;\n channel.port2.postMessage(undefined);\n };\n }\n }\n\n return enqueueTaskImpl(task);\n}\n\n// number of `act` scopes on the stack.\n\nvar actScopeDepth = 0; // We only warn the first time you neglect to await an async `act` scope.\n\nvar didWarnNoAwaitAct = false;\nfunction act(callback) {\n {\n // When ReactCurrentActQueue.current is not null, it signals to React that\n // we're currently inside an `act` scope. React will push all its tasks to\n // this queue instead of scheduling them with platform APIs.\n //\n // We set this to an empty array when we first enter an `act` scope, and\n // only unset it once we've left the outermost `act` scope — remember that\n // `act` calls can be nested.\n //\n // If we're already inside an `act` scope, reuse the existing queue.\n var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy;\n var prevActQueue = ReactCurrentActQueue.current;\n var prevActScopeDepth = actScopeDepth;\n actScopeDepth++;\n var queue = ReactCurrentActQueue.current = prevActQueue !== null ? prevActQueue : []; // Used to reproduce behavior of `batchedUpdates` in legacy mode. Only\n // set to `true` while the given callback is executed, not for updates\n // triggered during an async event, because this is how the legacy\n // implementation of `act` behaved.\n\n ReactCurrentActQueue.isBatchingLegacy = true;\n var result; // This tracks whether the `act` call is awaited. In certain cases, not\n // awaiting it is a mistake, so we will detect that and warn.\n\n var didAwaitActCall = false;\n\n try {\n // Reset this to `false` right before entering the React work loop. The\n // only place we ever read this fields is just below, right after running\n // the callback. So we don't need to reset after the callback runs.\n ReactCurrentActQueue.didScheduleLegacyUpdate = false;\n result = callback();\n var didScheduleLegacyUpdate = ReactCurrentActQueue.didScheduleLegacyUpdate; // Replicate behavior of original `act` implementation in legacy mode,\n // which flushed updates immediately after the scope function exits, even\n // if it's an async function.\n\n if (!prevIsBatchingLegacy && didScheduleLegacyUpdate) {\n flushActQueue(queue);\n } // `isBatchingLegacy` gets reset using the regular stack, not the async\n // one used to track `act` scopes. Why, you may be wondering? Because\n // that's how it worked before version 18. Yes, it's confusing! We should\n // delete legacy mode!!\n\n\n ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy;\n } catch (error) {\n // `isBatchingLegacy` gets reset using the regular stack, not the async\n // one used to track `act` scopes. Why, you may be wondering? Because\n // that's how it worked before version 18. Yes, it's confusing! We should\n // delete legacy mode!!\n ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy;\n popActScope(prevActQueue, prevActScopeDepth);\n throw error;\n }\n\n if (result !== null && typeof result === 'object' && // $FlowFixMe[method-unbinding]\n typeof result.then === 'function') {\n // A promise/thenable was returned from the callback. Wait for it to\n // resolve before flushing the queue.\n //\n // If `act` were implemented as an async function, this whole block could\n // be a single `await` call. That's really the only difference between\n // this branch and the next one.\n var thenable = result; // Warn if the an `act` call with an async scope is not awaited. In a\n // future release, consider making this an error.\n\n queueSeveralMicrotasks(function () {\n if (!didAwaitActCall && !didWarnNoAwaitAct) {\n didWarnNoAwaitAct = true;\n\n error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);');\n }\n });\n return {\n then: function (resolve, reject) {\n didAwaitActCall = true;\n thenable.then(function (returnValue) {\n popActScope(prevActQueue, prevActScopeDepth);\n\n if (prevActScopeDepth === 0) {\n // We're exiting the outermost `act` scope. Flush the queue.\n try {\n flushActQueue(queue);\n enqueueTask(function () {\n return (// Recursively flush tasks scheduled by a microtask.\n recursivelyFlushAsyncActWork(returnValue, resolve, reject)\n );\n });\n } catch (error) {\n // `thenable` might not be a real promise, and `flushActQueue`\n // might throw, so we need to wrap `flushActQueue` in a\n // try/catch.\n reject(error);\n }\n } else {\n resolve(returnValue);\n }\n }, function (error) {\n popActScope(prevActQueue, prevActScopeDepth);\n reject(error);\n });\n }\n };\n } else {\n var returnValue = result; // The callback is not an async function. Exit the current\n // scope immediately.\n\n popActScope(prevActQueue, prevActScopeDepth);\n\n if (prevActScopeDepth === 0) {\n // We're exiting the outermost `act` scope. Flush the queue.\n flushActQueue(queue); // If the queue is not empty, it implies that we intentionally yielded\n // to the main thread, because something suspended. We will continue\n // in an asynchronous task.\n //\n // Warn if something suspends but the `act` call is not awaited.\n // In a future release, consider making this an error.\n\n if (queue.length !== 0) {\n queueSeveralMicrotasks(function () {\n if (!didAwaitActCall && !didWarnNoAwaitAct) {\n didWarnNoAwaitAct = true;\n\n error('A component suspended inside an `act` scope, but the ' + '`act` call was not awaited. When testing React ' + 'components that depend on asynchronous data, you must ' + 'await the result:\\n\\n' + 'await act(() => ...)');\n }\n });\n } // Like many things in this module, this is next part is confusing.\n //\n // We do not currently require every `act` call that is passed a\n // callback to be awaited, through arguably we should. Since this\n // callback was synchronous, we need to exit the current scope before\n // returning.\n //\n // However, if thenable we're about to return *is* awaited, we'll\n // immediately restore the current scope. So it shouldn't observable.\n //\n // This doesn't affect the case where the scope callback is async,\n // because we always require those calls to be awaited.\n //\n // TODO: In a future version, consider always requiring all `act` calls\n // to be awaited, regardless of whether the callback is sync or async.\n\n\n ReactCurrentActQueue.current = null;\n }\n\n return {\n then: function (resolve, reject) {\n didAwaitActCall = true;\n\n if (prevActScopeDepth === 0) {\n // If the `act` call is awaited, restore the queue we were\n // using before (see long comment above) so we can flush it.\n ReactCurrentActQueue.current = queue;\n enqueueTask(function () {\n return (// Recursively flush tasks scheduled by a microtask.\n recursivelyFlushAsyncActWork(returnValue, resolve, reject)\n );\n });\n } else {\n resolve(returnValue);\n }\n }\n };\n }\n }\n}\n\nfunction popActScope(prevActQueue, prevActScopeDepth) {\n {\n if (prevActScopeDepth !== actScopeDepth - 1) {\n error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. ');\n }\n\n actScopeDepth = prevActScopeDepth;\n }\n}\n\nfunction recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n {\n // Check if any tasks were scheduled asynchronously.\n var queue = ReactCurrentActQueue.current;\n\n if (queue !== null) {\n if (queue.length !== 0) {\n // Async tasks were scheduled, mostly likely in a microtask.\n // Keep flushing until there are no more.\n try {\n flushActQueue(queue); // The work we just performed may have schedule additional async\n // tasks. Wait a macrotask and check again.\n\n enqueueTask(function () {\n return recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n });\n } catch (error) {\n // Leave remaining tasks on the queue if something throws.\n reject(error);\n }\n } else {\n // The queue is empty. We can finish.\n ReactCurrentActQueue.current = null;\n resolve(returnValue);\n }\n } else {\n resolve(returnValue);\n }\n }\n}\n\nvar isFlushing = false;\n\nfunction flushActQueue(queue) {\n {\n if (!isFlushing) {\n // Prevent re-entrance.\n isFlushing = true;\n var i = 0;\n\n try {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n\n do {\n ReactCurrentActQueue.didUsePromise = false;\n var continuation = callback(false);\n\n if (continuation !== null) {\n if (ReactCurrentActQueue.didUsePromise) {\n // The component just suspended. Yield to the main thread in\n // case the promise is already resolved. If so, it will ping in\n // a microtask and we can resume without unwinding the stack.\n queue[i] = callback;\n queue.splice(0, i);\n return;\n }\n\n callback = continuation;\n } else {\n break;\n }\n } while (true);\n } // We flushed the entire queue.\n\n\n queue.length = 0;\n } catch (error) {\n // If something throws, leave the remaining callbacks on the queue.\n queue.splice(0, i + 1);\n throw error;\n } finally {\n isFlushing = false;\n }\n }\n }\n} // Some of our warnings attempt to detect if the `act` call is awaited by\n// checking in an asynchronous task. Wait a few microtasks before checking. The\n// only reason one isn't sufficient is we want to accommodate the case where an\n// `act` call is returned from an async function without first being awaited,\n// since that's a somewhat common pattern. If you do this too many times in a\n// nested sequence, you might get a warning, but you can always fix by awaiting\n// the call.\n//\n// A macrotask would also work (and is the fallback) but depending on the test\n// environment it may cause the warning to fire too late.\n\n\nvar queueSeveralMicrotasks = typeof queueMicrotask === 'function' ? function (callback) {\n queueMicrotask(function () {\n return queueMicrotask(callback);\n });\n} : enqueueTask;\n\nvar createElement = createElementWithValidation ;\nvar cloneElement = cloneElementWithValidation ;\nvar createFactory = createFactoryWithValidation ;\nvar Children = {\n map: mapChildren,\n forEach: forEachChildren,\n count: countChildren,\n toArray: toArray,\n only: onlyChild\n};\n\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;\nexports.cache = cache;\nexports.cloneElement = cloneElement;\nexports.createContext = createContext;\nexports.createElement = createElement;\nexports.createFactory = createFactory;\nexports.createRef = createRef;\nexports.forwardRef = forwardRef;\nexports.isValidElement = isValidElement;\nexports.lazy = lazy;\nexports.memo = memo;\nexports.startTransition = startTransition;\nexports.unstable_act = act;\nexports.unstable_useCacheRefresh = useCacheRefresh;\nexports.use = use;\nexports.useCallback = useCallback;\nexports.useContext = useContext;\nexports.useDebugValue = useDebugValue;\nexports.useDeferredValue = useDeferredValue;\nexports.useEffect = useEffect;\nexports.useId = useId;\nexports.useImperativeHandle = useImperativeHandle;\nexports.useInsertionEffect = useInsertionEffect;\nexports.useLayoutEffect = useLayoutEffect;\nexports.useMemo = useMemo;\nexports.useOptimistic = useOptimistic;\nexports.useReducer = useReducer;\nexports.useRef = useRef;\nexports.useState = useState;\nexports.useSyncExternalStore = useSyncExternalStore;\nexports.useTransition = useTransition;\nexports.version = ReactVersion;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBLHFDQUFxQzs7QUFFckMsZ0NBQWdDO0FBQ2hDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZGQUE2RixhQUFhO0FBQzFHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUcsZUFBZTtBQUNoSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSLGtEQUFrRDtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4TUFBOE07O0FBRTlNO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCLGNBQWMsU0FBUztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsWUFBWTtBQUN6QixhQUFhLFdBQVc7QUFDeEIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsWUFBWTtBQUN6QixhQUFhLFFBQVE7QUFDckIsYUFBYSxXQUFXO0FBQ3hCLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCLGFBQWEsUUFBUTtBQUNyQixhQUFhLFdBQVc7QUFDeEIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSwwQkFBMEI7O0FBRTFCLDJCQUEyQjtBQUMzQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1QjtBQUNBLFdBQVcsV0FBVztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCOztBQUUxQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvREFBb0Q7O0FBRXBEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHOztBQUVsRztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBLHFFQUFxRTs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkLFdBQVcsZUFBZTtBQUMxQixXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRztBQUNSOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUVBQXFFOztBQUVyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBLG9CQUFvQixvQkFBb0I7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQjs7QUFFaEIsdUJBQXVCLGtCQUFrQjs7QUFFekM7QUFDQSx5QkFBeUI7O0FBRXpCLDRCQUE0QjtBQUM1QjtBQUNBOztBQUVBLGdDQUFnQzs7QUFFaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7O0FBR047O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUEsb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixZQUFZLFNBQVM7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCOztBQUVBO0FBQ0Esb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EscUlBQXFJLHlDQUF5QztBQUM5SztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxJQUFJO0FBQ2YsV0FBVyxrQkFBa0I7QUFDN0IsV0FBVyxHQUFHO0FBQ2QsWUFBWSxRQUFRO0FBQ3BCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLElBQUk7QUFDZixZQUFZLFFBQVE7QUFDcEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLElBQUk7QUFDZixXQUFXLGtCQUFrQjtBQUM3QixXQUFXLEdBQUc7QUFDZDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsWUFBWSxjQUFjO0FBQzFCO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBLDBDQUEwQztBQUMxQzs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLElBQUk7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxJQUFJO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsMENBQTBDLE9BQU87QUFDakQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxTQUFTO0FBQ1QsdUJBQXVCO0FBQ3ZCO0FBQ0EsU0FBUztBQUNULHVCQUF1QjtBQUN2QjtBQUNBLFNBQVM7QUFDVCx3QkFBd0I7QUFDeEI7QUFDQSxTQUFTO0FBQ1Qsd0JBQXdCO0FBQ3hCO0FBQ0EsU0FBUztBQUNULGlDQUFpQztBQUNqQztBQUNBLFNBQVM7QUFDVCwyQkFBMkI7QUFDM0I7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyREFBMkQ7O0FBRTNEO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7OztBQUdiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjOzs7QUFHZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7O0FBR0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxnSEFBZ0g7O0FBRWhIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQSxnRkFBZ0Y7QUFDaEY7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixJQUFJO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7O0FBR2xCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkhBQTJIO0FBQzNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0VBQW9FOztBQUVwRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QixXQUFXLEdBQUc7QUFDZDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkRBQTJEO0FBQzNEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEIsV0FBVyxHQUFHO0FBQ2Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtEQUFrRDtBQUNsRCxvQkFBb0IsaUJBQWlCO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6Qjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTiw0Q0FBNEM7O0FBRTVDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsaUJBQWlCO0FBQ3JDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3REFBd0Q7QUFDeEQ7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isc0JBQXNCO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsdUJBQXVCOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBGQUEwRjtBQUMxRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0ZBQWtGO0FBQ2xGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc09BQXNPO0FBQ3RPO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLE1BQU07QUFDTixnQ0FBZ0M7QUFDaEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWCxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWixVQUFVOzs7QUFHVjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0I7QUFDaEIsaUJBQWlCO0FBQ2pCLGdCQUFnQjtBQUNoQixnQkFBZ0I7QUFDaEIscUJBQXFCO0FBQ3JCLGtCQUFrQjtBQUNsQixnQkFBZ0I7QUFDaEIsMERBQTBEO0FBQzFELGFBQWE7QUFDYixvQkFBb0I7QUFDcEIscUJBQXFCO0FBQ3JCLHFCQUFxQjtBQUNyQixxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLGtCQUFrQjtBQUNsQixzQkFBc0I7QUFDdEIsWUFBWTtBQUNaLFlBQVk7QUFDWix1QkFBdUI7QUFDdkIsb0JBQW9CO0FBQ3BCLGdDQUFnQztBQUNoQyxXQUFXO0FBQ1gsbUJBQW1CO0FBQ25CLGtCQUFrQjtBQUNsQixxQkFBcUI7QUFDckIsd0JBQXdCO0FBQ3hCLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsMkJBQTJCO0FBQzNCLDBCQUEwQjtBQUMxQix1QkFBdUI7QUFDdkIsZUFBZTtBQUNmLHFCQUFxQjtBQUNyQixrQkFBa0I7QUFDbEIsY0FBYztBQUNkLGdCQUFnQjtBQUNoQiw0QkFBNEI7QUFDNUIscUJBQXFCO0FBQ3JCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanM/NmNhMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcblxuICAgICAgICAgICd1c2Ugc3RyaWN0JztcblxuLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuaWYgKFxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJyAmJlxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydCA9PT1cbiAgICAnZnVuY3Rpb24nXG4pIHtcbiAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChuZXcgRXJyb3IoKSk7XG59XG4gICAgICAgICAgdmFyIFJlYWN0VmVyc2lvbiA9ICcxOC4zLjAtY2FuYXJ5LTYwYTkyN2QwNC0yMDI0MDExMyc7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpO1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJyk7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGF6eScpO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG52YXIgUkVBQ1RfQ0FDSEVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNhY2hlJyk7XG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlci5cbiAqL1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IHtcbiAgY3VycmVudDogbnVsbFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBDYWNoZSBkaXNwYXRjaGVyLlxuICovXG52YXIgUmVhY3RDdXJyZW50Q2FjaGUgPSB7XG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgYmF0Y2gncyBjb25maWd1cmF0aW9uIHN1Y2ggYXMgaG93IGxvbmcgYW4gdXBkYXRlXG4gKiBzaG91bGQgc3VzcGVuZCBmb3IgaWYgaXQgbmVlZHMgdG8uXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IHtcbiAgdHJhbnNpdGlvbjogbnVsbFxufTtcblxudmFyIFJlYWN0Q3VycmVudEFjdFF1ZXVlID0ge1xuICBjdXJyZW50OiBudWxsLFxuICAvLyBVc2VkIHRvIHJlcHJvZHVjZSBiZWhhdmlvciBvZiBgYmF0Y2hlZFVwZGF0ZXNgIGluIGxlZ2FjeSBtb2RlLlxuICBpc0JhdGNoaW5nTGVnYWN5OiBmYWxzZSxcbiAgZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGU6IGZhbHNlLFxuICAvLyBUcmFja3Mgd2hldGhlciBzb21ldGhpbmcgY2FsbGVkIGB1c2VgIGR1cmluZyB0aGUgY3VycmVudCBiYXRjaCBvZiB3b3JrLlxuICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgd2Ugc2hvdWxkIHlpZWxkIHRvIG1pY3JvdGFza3MgdG8gdW53cmFwIGFscmVhZHkgcmVzb2x2ZWRcbiAgLy8gcHJvbWlzZXMgd2l0aG91dCBzdXNwZW5kaW5nLlxuICBkaWRVc2VQcm9taXNlOiBmYWxzZVxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBvd25lci5cbiAqXG4gKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91bGQgb3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlXG4gKiBjdXJyZW50bHkgYmVpbmcgY29uc3RydWN0ZWQuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUgPSBmdW5jdGlvbiAoc3RhY2spIHtcbiAgICB7XG4gICAgICBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gc3RhY2s7XG4gICAgfVxuICB9OyAvLyBTdGFjayBpbXBsZW1lbnRhdGlvbiBpbmplY3RlZCBieSB0aGUgY3VycmVudCByZW5kZXJlci5cblxuXG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuXG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5nZXRDdXJyZW50U3RhY2s7XG5cbiAgICBpZiAoaW1wbCkge1xuICAgICAgc3RhY2sgKz0gaW1wbCgpIHx8ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFjaztcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cbnZhciBlbmFibGVDYWNoZUVsZW1lbnQgPSBmYWxzZTtcbnZhciBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyA9IGZhbHNlOyAvLyBObyBrbm93biBidWdzLCBidXQgbmVlZHMgcGVyZm9ybWFuY2UgdGVzdGluZ1xuXG52YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7IC8vIEVuYWJsZXMgdW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgZmVhdHVyZSBpbiBGaWJlclxuLy8gc3R1ZmYuIEludGVuZGVkIHRvIGVuYWJsZSBSZWFjdCBjb3JlIG1lbWJlcnMgdG8gbW9yZSBlYXNpbHkgZGVidWcgc2NoZWR1bGluZ1xuLy8gaXNzdWVzIGluIERFViBidWlsZHMuXG5cbnZhciBlbmFibGVEZWJ1Z1RyYWNpbmcgPSBmYWxzZTtcblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0ge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyOiBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEsXG4gIFJlYWN0Q3VycmVudENhY2hlOiBSZWFjdEN1cnJlbnRDYWNoZSxcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBSZWFjdEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXJcbn07XG5cbntcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMTtcbiAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QWN0UXVldWUgPSBSZWFjdEN1cnJlbnRBY3RRdWV1ZTtcbn1cblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG5cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGl0ZW0pO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbnZhciBlbXB0eU9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xufVxuLyoqXG4gKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0OyAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5IHRoZVxuICAvLyByZW5kZXJlci5cblxuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG5Db21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTtcbi8qKlxuICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGVcbiAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LFxuICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsXG4gKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseVxuICogY29tcGxldGVkLlxuICpcbiAqIFdoZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBwb2ludCBpblxuICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlXG4gKiBjb21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudFxuICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmVcbiAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlXG4gKiBhc3NpZ25lZCB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvXG4gKiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIHBhcnRpYWxTdGF0ZSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHBhcnRpYWxTdGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiBwYXJ0aWFsU3RhdGUgIT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSAnICsgJ2Z1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy4nKTtcbiAgfVxuXG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgJ3NldFN0YXRlJyk7XG59O1xuLyoqXG4gKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAqXG4gKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAqXG4gKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICpcbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgdXBkYXRlIGlzIGNvbXBsZXRlLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuXG5Db21wb25lbnQucHJvdG90eXBlLmZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcywgY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xufTtcbi8qKlxuICogRGVwcmVjYXRlZCBBUElzLiBUaGVzZSBBUElzIHVzZWQgdG8gZXhpc3Qgb24gY2xhc3NpYyBSZWFjdCBjbGFzc2VzIGJ1dCBzaW5jZVxuICogd2Ugd291bGQgbGlrZSB0byBkZXByZWNhdGUgdGhlbSwgd2UncmUgbm90IGdvaW5nIHRvIG1vdmUgdGhlbSBvdmVyIHRvIHRoaXNcbiAqIG1vZGVybiBiYXNlIGNsYXNzLiBJbnN0ZWFkLCB3ZSBkZWZpbmUgYSBnZXR0ZXIgdGhhdCB3YXJucyBpZiBpdCdzIGFjY2Vzc2VkLlxuICovXG5cblxue1xuICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgaXNNb3VudGVkOiBbJ2lzTW91bnRlZCcsICdJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiAnICsgJ2NvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLiddLFxuICAgIHJlcGxhY2VTdGF0ZTogWydyZXBsYWNlU3RhdGUnLCAnUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgJyArICdodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzYpLiddXG4gIH07XG5cbiAgdmFyIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyA9IGZ1bmN0aW9uIChtZXRob2ROYW1lLCBpbmZvKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbXBvbmVudC5wcm90b3R5cGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXJuKCclcyguLi4pIGlzIGRlcHJlY2F0ZWQgaW4gcGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlcycsIGluZm9bMF0sIGluZm9bMV0pO1xuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKSB7XG4gICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHtcbiAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBDb21wb25lbnREdW1teSgpIHt9XG5cbkNvbXBvbmVudER1bW15LnByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4vKipcbiAqIENvbnZlbmllbmNlIGNvbXBvbmVudCB3aXRoIGRlZmF1bHQgc2hhbGxvdyBlcXVhbGl0eSBjaGVjayBmb3Igc0NVLlxuICovXG5cbmZ1bmN0aW9uIFB1cmVDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OyAvLyBJZiBhIGNvbXBvbmVudCBoYXMgc3RyaW5nIHJlZnMsIHdlIHdpbGwgYXNzaWduIGEgZGlmZmVyZW50IG9iamVjdCBsYXRlci5cblxuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbn1cblxudmFyIHB1cmVDb21wb25lbnRQcm90b3R5cGUgPSBQdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnREdW1teSgpO1xucHVyZUNvbXBvbmVudFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFB1cmVDb21wb25lbnQ7IC8vIEF2b2lkIGFuIGV4dHJhIHByb3RvdHlwZSBqdW1wIGZvciB0aGVzZSBtZXRob2RzLlxuXG5hc3NpZ24ocHVyZUNvbXBvbmVudFByb3RvdHlwZSwgQ29tcG9uZW50LnByb3RvdHlwZSk7XG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblxuLy8gYW4gaW1tdXRhYmxlIG9iamVjdCB3aXRoIGEgc2luZ2xlIG11dGFibGUgdmFsdWVcbmZ1bmN0aW9uIGNyZWF0ZVJlZigpIHtcbiAgdmFyIHJlZk9iamVjdCA9IHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH07XG5cbiAge1xuICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gIH1cblxuICByZXR1cm4gcmVmT2JqZWN0O1xufVxuXG52YXIgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5cbmZ1bmN0aW9uIGlzQXJyYXkoYSkge1xuICByZXR1cm4gaXNBcnJheUltcGwoYSk7XG59XG5cbi8qXG4gKiBUaGUgYCcnICsgdmFsdWVgIHBhdHRlcm4gKHVzZWQgaW4gcGVyZi1zZW5zaXRpdmUgY29kZSkgdGhyb3dzIGZvciBTeW1ib2xcbiAqIGFuZCBUZW1wb3JhbC4qIHR5cGVzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMjIwNjQuXG4gKlxuICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB3aWxsIHRocm93IGFuIGVhc2llci10by11bmRlcnN0YW5kLFxuICogZWFzaWVyLXRvLWRlYnVnIGV4Y2VwdGlvbiB3aXRoIGEgY2xlYXIgZXJyb3JzIG1lc3NhZ2UgbWVzc2FnZSBleHBsYWluaW5nIHRoZVxuICogcHJvYmxlbS4gKEluc3RlYWQgb2YgYSBjb25mdXNpbmcgZXhjZXB0aW9uIHRocm93biBpbnNpZGUgdGhlIGltcGxlbWVudGF0aW9uXG4gKiBvZiB0aGUgYHZhbHVlYCBvYmplY3QpLlxuICovXG4vLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuZnVuY3Rpb24gdHlwZU5hbWUodmFsdWUpIHtcbiAge1xuICAgIC8vIHRvU3RyaW5nVGFnIGlzIG5lZWRlZCBmb3IgbmFtZXNwYWNlZCB0eXBlcyBsaWtlIFRlbXBvcmFsLkluc3RhbnRcbiAgICB2YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC50b1N0cmluZ1RhZztcbiAgICB2YXIgdHlwZSA9IGhhc1RvU3RyaW5nVGFnICYmIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10gfHwgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fCAnT2JqZWN0JzsgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbn0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cblxuXG5mdW5jdGlvbiB3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkge1xuICB7XG4gICAgdHJ5IHtcbiAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAvLyBJZiB5b3UgZW5kZWQgdXAgaGVyZSBieSBmb2xsb3dpbmcgYW4gZXhjZXB0aW9uIGNhbGwgc3RhY2ssIGhlcmUncyB3aGF0J3NcbiAgLy8gaGFwcGVuZWQ6IHlvdSBzdXBwbGllZCBhbiBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIFJlYWN0IChhcyBhIHByb3AsIGtleSxcbiAgLy8gRE9NIGF0dHJpYnV0ZSwgQ1NTIHByb3BlcnR5LCBzdHJpbmcgcmVmLCBldGMuKSBhbmQgd2hlbiBSZWFjdCB0cmllZCB0b1xuICAvLyBjb2VyY2UgaXQgdG8gYSBzdHJpbmcgdXNpbmcgYCcnICsgdmFsdWVgLCBhbiBleGNlcHRpb24gd2FzIHRocm93bi5cbiAgLy9cbiAgLy8gVGhlIG1vc3QgY29tbW9uIHR5cGVzIHRoYXQgd2lsbCBjYXVzZSB0aGlzIGV4Y2VwdGlvbiBhcmUgYFN5bWJvbGAgaW5zdGFuY2VzXG4gIC8vIGFuZCBUZW1wb3JhbCBvYmplY3RzIGxpa2UgYFRlbXBvcmFsLkluc3RhbnRgLiBCdXQgYW55IG9iamVjdCB0aGF0IGhhcyBhXG4gIC8vIGB2YWx1ZU9mYCBvciBgW1N5bWJvbC50b1ByaW1pdGl2ZV1gIG1ldGhvZCB0aGF0IHRocm93cyB3aWxsIGFsc28gY2F1c2UgdGhpc1xuICAvLyBleGNlcHRpb24uIChMaWJyYXJ5IGF1dGhvcnMgZG8gdGhpcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gdXNpbmcgYnVpbHQtaW5cbiAgLy8gbnVtZXJpYyBvcGVyYXRvcnMgbGlrZSBgK2Agb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMgbGlrZSBgPj1gIGJlY2F1c2UgY3VzdG9tXG4gIC8vIG1ldGhvZHMgYXJlIG5lZWRlZCB0byBwZXJmb3JtIGFjY3VyYXRlIGFyaXRobWV0aWMgb3IgY29tcGFyaXNvbi4pXG4gIC8vXG4gIC8vIFRvIGZpeCB0aGUgcHJvYmxlbSwgY29lcmNlIHRoaXMgb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyBiZWZvcmVcbiAgLy8gcGFzc2luZyBpdCB0byBSZWFjdC4gVGhlIG1vc3QgcmVsaWFibGUgd2F5IGlzIHVzdWFsbHkgYFN0cmluZyh2YWx1ZSlgLlxuICAvL1xuICAvLyBUbyBmaW5kIHdoaWNoIHZhbHVlIGlzIHRocm93aW5nLCBjaGVjayB0aGUgYnJvd3NlciBvciBkZWJ1Z2dlciBjb25zb2xlLlxuICAvLyBCZWZvcmUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93biwgdGhlcmUgc2hvdWxkIGJlIGBjb25zb2xlLmVycm9yYCBvdXRwdXRcbiAgLy8gdGhhdCBzaG93cyB0aGUgdHlwZSAoU3ltYm9sLCBUZW1wb3JhbC5QbGFpbkRhdGUsIGV0Yy4pIHRoYXQgY2F1c2VkIHRoZVxuICAvLyBwcm9ibGVtIGFuZCBob3cgdGhhdCB0eXBlIHdhcyB1c2VkOiBrZXksIGF0cnJpYnV0ZSwgaW5wdXQgdmFsdWUgcHJvcCwgZXRjLlxuICAvLyBJbiBtb3N0IGNhc2VzLCB0aGlzIGNvbnNvbGUgb3V0cHV0IGFsc28gc2hvd3MgdGhlIGNvbXBvbmVudCBhbmQgaXRzXG4gIC8vIGFuY2VzdG9yIGNvbXBvbmVudHMgd2hlcmUgdGhlIGV4Y2VwdGlvbiBoYXBwZW5lZC5cbiAgLy9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG4gIHJldHVybiAnJyArIHZhbHVlO1xufVxuZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICB7XG4gICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1RoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4nICsgJyBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCB0eXBlTmFtZSh2YWx1ZSkpO1xuXG4gICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTsgLy8gdGhyb3cgKHRvIGhlbHAgY2FsbGVycyBmaW5kIHRyb3VibGVzaG9vdGluZyBjb21tZW50cylcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcblxuICBpZiAoZGlzcGxheU5hbWUpIHtcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XG4gIH1cblxuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lO1xufSAvLyBLZWVwIGluIHN5bmMgd2l0aCByZWFjdC1yZWNvbmNpbGVyL2dldENvbXBvbmVudE5hbWVGcm9tRmliZXJcblxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxudmFyIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMiA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTsgLy8gTm90ZSB0aGF0IHRoZSByZWNvbmNpbGVyIHBhY2thZ2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgdG8gdXNlIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoKSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQyKSB7XG4gICAgICAvLyBUT0RPOiBDcmVhdGUgYSBjb252ZW50aW9uIGZvciBuYW1pbmcgY2xpZW50IHJlZmVyZW5jZXMgd2l0aCBkZWJ1ZyBpbmZvLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuXG4gICAgY2FzZSBSRUFDVF9DQUNIRV9UWVBFOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJ0NhY2hlJztcbiAgICAgIH1cblxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgdmFyIG91dGVyTmFtZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbDtcblxuICAgICAgICBpZiAob3V0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG91dGVyTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnTWVtbyc7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vLyAkRmxvd0ZpeE1lW21ldGhvZC11bmJpbmRpbmddXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGNvbXBvbmVudE5hbWUsIGNvbmZpZy5yZWYpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIgYWRoZXJlcyB0b1xuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIGluc3RhbmNlb2YgY2hlY2tcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQGludGVybmFsXG4gKi9cblxuXG5mdW5jdGlvbiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY3JlYXRlZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQkMSh0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZhciBwcm9wTmFtZTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG4gIHZhciBwcm9wcyA9IHt9O1xuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIHJlZiA9IG51bGw7XG4gIHZhciBzZWxmID0gbnVsbDtcbiAgdmFyIHNvdXJjZSA9IG51bGw7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG5cbiAgICAgIHtcbiAgICAgICAgd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIHNlbGYgPSBjb25maWcuX19zZWxmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc2VsZjtcbiAgICBzb3VyY2UgPSBjb25maWcuX19zb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zb3VyY2U7IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIGNsb25lQW5kUmVwbGFjZUtleShvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG4vKipcbiAqIENsb25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5nIGVsZW1lbnQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjbG9uZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQkMShlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmIChlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlJlYWN0LmNsb25lRWxlbWVudCguLi4pOiBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIFJlYWN0IGVsZW1lbnQsIGJ1dCB5b3UgcGFzc2VkIFwiICsgZWxlbWVudCArIFwiLlwiKTtcbiAgfVxuXG4gIHZhciBwcm9wTmFtZTsgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuXG4gIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgZWxlbWVudC5wcm9wcyk7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjsgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC5cblxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7IC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuXG4gIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7IC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIG92ZXJyaWRlIGV4aXN0aW5nIHByb3BzXG5cblxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG5cbiAgICBpZiAoZWxlbWVudC50eXBlICYmIGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIGRlZmF1bHRQcm9wcyA9IGVsZW1lbnQudHlwZS5kZWZhdWx0UHJvcHM7XG4gICAgfVxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgaWYgKGNvbmZpZ1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuXG5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG5cbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgY2hpbGRBcnJheVtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcyk7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuXG52YXIgU0VQQVJBVE9SID0gJy4nO1xudmFyIFNVQlNFUEFSQVRPUiA9ICc6Jztcbi8qKlxuICogRXNjYXBlIGFuZCB3cmFwIGtleSBzbyBpdCBpcyBzYWZlIHRvIHVzZSBhcyBhIHJlYWN0aWRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHRvIGJlIGVzY2FwZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBlc2NhcGVkIGtleS5cbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gIHZhciBlc2NhcGVSZWdleCA9IC9bPTpdL2c7XG4gIHZhciBlc2NhcGVyTG9va3VwID0ge1xuICAgICc9JzogJz0wJyxcbiAgICAnOic6ICc9MidcbiAgfTtcbiAgdmFyIGVzY2FwZWRTdHJpbmcgPSBrZXkucmVwbGFjZShlc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVzY2FwZXJMb29rdXBbbWF0Y2hdO1xuICB9KTtcbiAgcmV0dXJuICckJyArIGVzY2FwZWRTdHJpbmc7XG59XG4vKipcbiAqIFRPRE86IFRlc3QgdGhhdCBhIHNpbmdsZSBjaGlsZCBhbmQgYW4gYXJyYXkgd2l0aCBvbmUgaXRlbSBoYXZlIHRoZSBzYW1lIGtleVxuICogcGF0dGVybi5cbiAqL1xuXG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG52YXIgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nO1xuXG5mdW5jdGlvbiBlc2NhcGVVc2VyUHJvdmlkZWRLZXkodGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4LCAnJCYvJyk7XG59XG4vKipcbiAqIEdlbmVyYXRlIGEga2V5IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgYSBlbGVtZW50IHdpdGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9IGVsZW1lbnQgQSBlbGVtZW50IHRoYXQgY291bGQgY29udGFpbiBhIG1hbnVhbCBrZXkuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggdGhhdCBpcyB1c2VkIGlmIGEgbWFudWFsIGtleSBpcyBub3QgcHJvdmlkZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRFbGVtZW50S2V5KGVsZW1lbnQsIGluZGV4KSB7XG4gIC8vIERvIHNvbWUgdHlwZWNoZWNraW5nIGhlcmUgc2luY2Ugd2UgY2FsbCB0aGlzIGJsaW5kbHkuIFdlIHdhbnQgdG8gZW5zdXJlXG4gIC8vIHRoYXQgd2UgZG9uJ3QgYmxvY2sgcG90ZW50aWFsIGZ1dHVyZSBFUyBBUElzLlxuICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdvYmplY3QnICYmIGVsZW1lbnQgIT09IG51bGwgJiYgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIC8vIEV4cGxpY2l0IGtleVxuICAgIHtcbiAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oZWxlbWVudC5rZXkpO1xuICAgIH1cblxuICAgIHJldHVybiBlc2NhcGUoJycgKyBlbGVtZW50LmtleSk7XG4gIH0gLy8gSW1wbGljaXQga2V5IGRldGVybWluZWQgYnkgdGhlIGluZGV4IGluIHRoZSBzZXRcblxuXG4gIHJldHVybiBpbmRleC50b1N0cmluZygzNik7XG59XG5cbmZ1bmN0aW9uIG1hcEludG9BcnJheShjaGlsZHJlbiwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5hbWVTb0ZhciwgY2FsbGJhY2spIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIHZhciBpbnZva2VDYWxsYmFjayA9IGZhbHNlO1xuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBzd2l0Y2ggKGNoaWxkcmVuLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgaWYgKGludm9rZUNhbGxiYWNrKSB7XG4gICAgdmFyIF9jaGlsZCA9IGNoaWxkcmVuO1xuICAgIHZhciBtYXBwZWRDaGlsZCA9IGNhbGxiYWNrKF9jaGlsZCk7IC8vIElmIGl0J3MgdGhlIG9ubHkgY2hpbGQsIHRyZWF0IHRoZSBuYW1lIGFzIGlmIGl0IHdhcyB3cmFwcGVkIGluIGFuIGFycmF5XG4gICAgLy8gc28gdGhhdCBpdCdzIGNvbnNpc3RlbnQgaWYgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBncm93czpcblxuICAgIHZhciBjaGlsZEtleSA9IG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgKyBnZXRFbGVtZW50S2V5KF9jaGlsZCwgMCkgOiBuYW1lU29GYXI7XG5cbiAgICBpZiAoaXNBcnJheShtYXBwZWRDaGlsZCkpIHtcbiAgICAgIHZhciBlc2NhcGVkQ2hpbGRLZXkgPSAnJztcblxuICAgICAgaWYgKGNoaWxkS2V5ICE9IG51bGwpIHtcbiAgICAgICAgZXNjYXBlZENoaWxkS2V5ID0gZXNjYXBlVXNlclByb3ZpZGVkS2V5KGNoaWxkS2V5KSArICcvJztcbiAgICAgIH1cblxuICAgICAgbWFwSW50b0FycmF5KG1hcHBlZENoaWxkLCBhcnJheSwgZXNjYXBlZENoaWxkS2V5LCAnJywgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKG1hcHBlZENoaWxkICE9IG51bGwpIHtcbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChtYXBwZWRDaGlsZCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIC8vIFRoZSBgaWZgIHN0YXRlbWVudCBoZXJlIHByZXZlbnRzIGF1dG8tZGlzYWJsaW5nIG9mIHRoZSBzYWZlXG4gICAgICAgICAgLy8gY29lcmNpb24gRVNMaW50IHJ1bGUsIHNvIHdlIG11c3QgbWFudWFsbHkgZGlzYWJsZSBpdCBiZWxvdy5cbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgICAgaWYgKG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpKSB7XG4gICAgICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1hcHBlZENoaWxkLmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWFwcGVkQ2hpbGQgPSBjbG9uZUFuZFJlcGxhY2VLZXkobWFwcGVkQ2hpbGQsIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAgIC8vIHRyYXZlcnNlQWxsQ2hpbGRyZW4gdXNlZCB0byBkbyBmb3Igb2JqZWN0cyBhcyBjaGlsZHJlblxuICAgICAgICBlc2NhcGVkUHJlZml4ICsgKCAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgIG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gZXNjYXBlVXNlclByb3ZpZGVkS2V5KCAvLyAkRmxvd0ZpeE1lW3Vuc2FmZS1hZGRpdGlvbl1cbiAgICAgICAgJycgKyBtYXBwZWRDaGlsZC5rZXkgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuICAgICAgICApICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIGBpdGVyYXRvckZuYCBtaWdodCByZXR1cm4gbnVsbCBhY2NvcmRpbmcgdG8gdHlwaW5nLlxuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgICAgIHZhciBjaGlsZHJlblN0cmluZyA9IFN0cmluZyhjaGlsZHJlbik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIFwiICsgJ0lmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgJyArICdpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG4vKipcbiAqIE1hcHMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm1hcFxuICpcbiAqIFRoZSBwcm92aWRlZCBtYXBGdW5jdGlvbihjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmdW5jIFRoZSBtYXAgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgQ29udGV4dCBmb3IgbWFwRnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLlxuICovXG5cblxuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAvLyAkRmxvd0ZpeE1lIGxpbWl0YXRpb24gcmVmaW5pbmcgYWJzdHJhY3QgdHlwZXMgaW4gRmxvd1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGNvdW50ID0gMDtcbiAgbWFwSW50b0FycmF5KGNoaWxkcmVuLCByZXN1bHQsICcnLCAnJywgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwgY291bnQrKyk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXNcbiAqIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuY291bnRcbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbi5cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvdW50Q2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIG4gPSAwO1xuICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKCkge1xuICAgIG4rKzsgLy8gRG9uJ3QgcmV0dXJuIGFueXRoaW5nXG4gIH0pO1xuICByZXR1cm4gbjtcbn1cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCAvLyAkRmxvd0ZpeE1lW21pc3NpbmctdGhpcy1hbm5vdF1cbiAgZnVuY3Rpb24gKCkge1xuICAgIGZvckVhY2hGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIERvbid0IHJldHVybiBhbnl0aGluZy5cbiAgfSwgZm9yRWFjaENvbnRleHQpO1xufVxuLyoqXG4gKiBGbGF0dGVuIGEgY2hpbGRyZW4gb2JqZWN0ICh0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmApIGFuZFxuICogcmV0dXJuIGFuIGFycmF5IHdpdGggYXBwcm9wcmlhdGVseSByZS1rZXllZCBjaGlsZHJlbi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW50b2FycmF5XG4gKi9cblxuXG5mdW5jdGlvbiB0b0FycmF5KGNoaWxkcmVuKSB7XG4gIHJldHVybiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KSB8fCBbXTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgaW4gYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuIGFuZCB2ZXJpZmllcyB0aGF0IHRoZXJlXG4gKiBpcyBvbmx5IG9uZSBjaGlsZCBpbiB0aGUgY29sbGVjdGlvbi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5vbmx5XG4gKlxuICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgYSBzaW5nbGUgY2hpbGQgZ2V0c1xuICogcGFzc2VkIHdpdGhvdXQgYSB3cmFwcGVyLCBidXQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBoZWxwZXIgZnVuY3Rpb24gaXMgdG9cbiAqIGFic3RyYWN0IGF3YXkgdGhlIHBhcnRpY3VsYXIgc3RydWN0dXJlIG9mIGNoaWxkcmVuLlxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gY2hpbGRyZW4gQ2hpbGQgY29sbGVjdGlvbiBzdHJ1Y3R1cmUuXG4gKiBAcmV0dXJuIHtSZWFjdEVsZW1lbnR9IFRoZSBmaXJzdCBhbmQgb25seSBgUmVhY3RFbGVtZW50YCBjb250YWluZWQgaW4gdGhlXG4gKiBzdHJ1Y3R1cmUuXG4gKi9cblxuXG5mdW5jdGlvbiBvbmx5Q2hpbGQoY2hpbGRyZW4pIHtcbiAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLicpO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSkge1xuICAvLyBUT0RPOiBTZWNvbmQgYXJndW1lbnQgdXNlZCB0byBiZSBhbiBvcHRpb25hbCBgY2FsY3VsYXRlQ2hhbmdlZEJpdHNgXG4gIC8vIGZ1bmN0aW9uLiBXYXJuIHRvIHJlc2VydmUgZm9yIGZ1dHVyZSB1c2U/XG4gIHZhciBjb250ZXh0ID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgLy8gQXMgYSB3b3JrYXJvdW5kIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29uY3VycmVudCByZW5kZXJlcnMsIHdlIGNhdGVnb3JpemVcbiAgICAvLyBzb21lIHJlbmRlcmVycyBhcyBwcmltYXJ5IGFuZCBvdGhlcnMgYXMgc2Vjb25kYXJ5LiBXZSBvbmx5IGV4cGVjdFxuICAgIC8vIHRoZXJlIHRvIGJlIHR3byBjb25jdXJyZW50IHJlbmRlcmVycyBhdCBtb3N0OiBSZWFjdCBOYXRpdmUgKHByaW1hcnkpIGFuZFxuICAgIC8vIEZhYnJpYyAoc2Vjb25kYXJ5KTsgUmVhY3QgRE9NIChwcmltYXJ5KSBhbmQgUmVhY3QgQVJUIChzZWNvbmRhcnkpLlxuICAgIC8vIFNlY29uZGFyeSByZW5kZXJlcnMgc3RvcmUgdGhlaXIgY29udGV4dCB2YWx1ZXMgb24gc2VwYXJhdGUgZmllbGRzLlxuICAgIF9jdXJyZW50VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICBfY3VycmVudFZhbHVlMjogZGVmYXVsdFZhbHVlLFxuICAgIC8vIFVzZWQgdG8gdHJhY2sgaG93IG1hbnkgY29uY3VycmVudCByZW5kZXJlcnMgdGhpcyBjb250ZXh0IGN1cnJlbnRseVxuICAgIC8vIHN1cHBvcnRzIHdpdGhpbiBpbiBhIHNpbmdsZSByZW5kZXJlci4gU3VjaCBhcyBwYXJhbGxlbCBzZXJ2ZXIgcmVuZGVyaW5nLlxuICAgIF90aHJlYWRDb3VudDogMCxcbiAgICAvLyBUaGVzZSBhcmUgY2lyY3VsYXJcbiAgICBQcm92aWRlcjogbnVsbCxcbiAgICBDb25zdW1lcjogbnVsbCxcbiAgICAvLyBBZGQgdGhlc2UgdG8gdXNlIHNhbWUgaGlkZGVuIGNsYXNzIGluIFZNIGFzIFNlcnZlckNvbnRleHRcbiAgICBfZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIF9nbG9iYWxOYW1lOiBudWxsXG4gIH07XG4gIGNvbnRleHQuUHJvdmlkZXIgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BST1ZJREVSX1RZUEUsXG4gICAgX2NvbnRleHQ6IGNvbnRleHRcbiAgfTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSBmYWxzZTtcblxuICB7XG4gICAgLy8gQSBzZXBhcmF0ZSBvYmplY3QsIGJ1dCBwcm94aWVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQgb2JqZWN0IGZvclxuICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBJdCBoYXMgYSBkaWZmZXJlbnQgJCR0eXBlb2YsIHNvIHdlIGNhbiBwcm9wZXJseVxuICAgIC8vIHdhcm4gZm9yIHRoZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgQ29udGV4dCBhcyBhIENvbnN1bWVyLlxuICAgIHZhciBDb25zdW1lciA9IHtcbiAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICBfY29udGV4dDogY29udGV4dFxuICAgIH07IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbm90IHNldHRpbmcgYSB2YWx1ZSwgd2hpY2ggaXMgaW50ZW50aW9uYWwgaGVyZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29uc3VtZXIsIHtcbiAgICAgIFByb3ZpZGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Qcm92aWRlcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Qcm92aWRlcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Qcm92aWRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX1Byb3ZpZGVyKSB7XG4gICAgICAgICAgY29udGV4dC5Qcm92aWRlciA9IF9Qcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IF9jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlMjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlMjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZTIpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUyID0gX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfdGhyZWFkQ291bnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3RocmVhZENvdW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfdGhyZWFkQ291bnQpIHtcbiAgICAgICAgICBjb250ZXh0Ll90aHJlYWRDb3VudCA9IF90aHJlYWRDb3VudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIENvbnN1bWVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Db25zdW1lcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Db25zdW1lcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Db25zdW1lcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRpc3BsYXlOYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0LmRpc3BsYXlOYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkaXNwbGF5TmFtZSkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIpIHtcbiAgICAgICAgICAgIHdhcm4oJ1NldHRpbmcgYGRpc3BsYXlOYW1lYCBvbiBDb250ZXh0LkNvbnN1bWVyIGhhcyBubyBlZmZlY3QuICcgKyBcIllvdSBzaG91bGQgc2V0IGl0IGRpcmVjdGx5IG9uIHRoZSBjb250ZXh0IHdpdGggQ29udGV4dC5kaXNwbGF5TmFtZSA9ICclcycuXCIsIGRpc3BsYXlOYW1lKTtcblxuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pOyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ106IEZsb3cgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgcHJvcGVydGllcyBiZWNhdXNlIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZCBkZWZpbmVQcm9wZXJ0eVxuXG4gICAgY29udGV4dC5Db25zdW1lciA9IENvbnN1bWVyO1xuICB9XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IG51bGw7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gY29udGV4dDtcbn1cblxudmFyIFVuaW5pdGlhbGl6ZWQgPSAtMTtcbnZhciBQZW5kaW5nID0gMDtcbnZhciBSZXNvbHZlZCA9IDE7XG52YXIgUmVqZWN0ZWQgPSAyO1xuXG5mdW5jdGlvbiBsYXp5SW5pdGlhbGl6ZXIocGF5bG9hZCkge1xuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgdmFyIGN0b3IgPSBwYXlsb2FkLl9yZXN1bHQ7XG4gICAgdmFyIHRoZW5hYmxlID0gY3RvcigpOyAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgIC8vIFRoaXMgbWlnaHQgdGhyb3cgZWl0aGVyIGJlY2F1c2UgaXQncyBtaXNzaW5nIG9yIHRocm93cy4gSWYgc28sIHdlIHRyZWF0IGl0XG4gICAgLy8gYXMgc3RpbGwgdW5pbml0aWFsaXplZCBhbmQgdHJ5IGFnYWluIG5leHQgdGltZS4gV2hpY2ggaXMgdGhlIHNhbWUgYXMgd2hhdFxuICAgIC8vIGhhcHBlbnMgaWYgdGhlIGN0b3Igb3IgYW55IHdyYXBwZXJzIHByb2Nlc3NpbmcgdGhlIGN0b3IgdGhyb3dzLiBUaGlzIG1pZ2h0XG4gICAgLy8gZW5kIHVwIGZpeGluZyBpdCBpZiB0aGUgcmVzb2x1dGlvbiB3YXMgYSBjb25jdXJyZW5jeSBidWcuXG5cbiAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcgfHwgcGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgICAgIC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG4gICAgICAgIHZhciByZXNvbHZlZCA9IHBheWxvYWQ7XG4gICAgICAgIHJlc29sdmVkLl9zdGF0dXMgPSBSZXNvbHZlZDtcbiAgICAgICAgcmVzb2x2ZWQuX3Jlc3VsdCA9IG1vZHVsZU9iamVjdDtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcgfHwgcGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgICAgIC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG4gICAgICAgIHZhciByZWplY3RlZCA9IHBheWxvYWQ7XG4gICAgICAgIHJlamVjdGVkLl9zdGF0dXMgPSBSZWplY3RlZDtcbiAgICAgICAgcmVqZWN0ZWQuX3Jlc3VsdCA9IGVycm9yO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gVW5pbml0aWFsaXplZCkge1xuICAgICAgLy8gSW4gY2FzZSwgd2UncmUgc3RpbGwgdW5pbml0aWFsaXplZCwgdGhlbiB3ZSdyZSB3YWl0aW5nIGZvciB0aGUgdGhlbmFibGVcbiAgICAgIC8vIHRvIHJlc29sdmUuIFNldCBpdCBhcyBwZW5kaW5nIGluIHRoZSBtZWFudGltZS5cbiAgICAgIHZhciBwZW5kaW5nID0gcGF5bG9hZDtcbiAgICAgIHBlbmRpbmcuX3N0YXR1cyA9IFBlbmRpbmc7XG4gICAgICBwZW5kaW5nLl9yZXN1bHQgPSB0aGVuYWJsZTtcbiAgICB9XG4gIH1cblxuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBSZXNvbHZlZCkge1xuICAgIHZhciBtb2R1bGVPYmplY3QgPSBwYXlsb2FkLl9yZXN1bHQ7XG5cbiAgICB7XG4gICAgICBpZiAobW9kdWxlT2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcCcgKyAnb3J0KCkgY2FsbC4gJyArICdJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gICcgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcCcgKyBcIm9ydCgnLi9NeUNvbXBvbmVudCcpKVxcblxcblwiICsgJ0RpZCB5b3UgYWNjaWRlbnRhbGx5IHB1dCBjdXJseSBicmFjZXMgYXJvdW5kIHRoZSBpbXBvcnQ/JywgbW9kdWxlT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoISgnZGVmYXVsdCcgaW4gbW9kdWxlT2JqZWN0KSkge1xuICAgICAgICBlcnJvcignbGF6eTogRXhwZWN0ZWQgdGhlIHJlc3VsdCBvZiBhIGR5bmFtaWMgaW1wJyArICdvcnQoKSBjYWxsLiAnICsgJ0luc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZHVsZU9iamVjdC5kZWZhdWx0O1xuICB9IGVsc2Uge1xuICAgIHRocm93IHBheWxvYWQuX3Jlc3VsdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBsYXp5KGN0b3IpIHtcbiAgdmFyIHBheWxvYWQgPSB7XG4gICAgLy8gV2UgdXNlIHRoZXNlIGZpZWxkcyB0byBzdG9yZSB0aGUgcmVzdWx0LlxuICAgIF9zdGF0dXM6IFVuaW5pdGlhbGl6ZWQsXG4gICAgX3Jlc3VsdDogY3RvclxuICB9O1xuICB2YXIgbGF6eVR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0xBWllfVFlQRSxcbiAgICBfcGF5bG9hZDogcGF5bG9hZCxcbiAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gIH07XG5cbiAge1xuICAgIC8vIEluIHByb2R1Y3Rpb24sIHRoaXMgd291bGQganVzdCBzZXQgaXQgb24gdGhlIG9iamVjdC5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuICAgIHZhciBwcm9wVHlwZXM7IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIC8vICRGbG93Rml4TWVbbWlzc2luZy1sb2NhbC1hbm5vdF1cbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3RGVmYXVsdFByb3BzKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYGRlZmF1bHRQcm9wc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcblxuICAgICAgICAgIGRlZmF1bHRQcm9wcyA9IG5ld0RlZmF1bHRQcm9wczsgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdkZWZhdWx0UHJvcHMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcm9wVHlwZXM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFR5cGVzO1xuICAgICAgICB9LFxuICAgICAgICAvLyAkRmxvd0ZpeE1lW21pc3NpbmctbG9jYWwtYW5ub3RdXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Byb3BUeXBlcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBwcm9wVHlwZXNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBwcm9wVHlwZXMgPSBuZXdQcm9wVHlwZXM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAncHJvcFR5cGVzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGF6eVR5cGU7XG59XG5cbmZ1bmN0aW9uIGZvcndhcmRSZWYocmVuZGVyKSB7XG4gIHtcbiAgICBpZiAocmVuZGVyICE9IG51bGwgJiYgcmVuZGVyLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCByZWNlaXZlZCBhIGBtZW1vYCAnICsgJ2NvbXBvbmVudC4gSW5zdGVhZCBvZiBmb3J3YXJkUmVmKG1lbW8oLi4uKSksIHVzZSAnICsgJ21lbW8oZm9yd2FyZFJlZiguLi4pKS4nKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZW5kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuJywgcmVuZGVyID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJlbmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZW5kZXIubGVuZ3RoICE9PSAwICYmIHJlbmRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBhY2NlcHQgZXhhY3RseSB0d28gcGFyYW1ldGVyczogcHJvcHMgYW5kIHJlZi4gJXMnLCByZW5kZXIubGVuZ3RoID09PSAxID8gJ0RpZCB5b3UgZm9yZ2V0IHRvIHVzZSB0aGUgcmVmIHBhcmFtZXRlcj8nIDogJ0FueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVuZGVyICE9IG51bGwpIHtcbiAgICAgIGlmIChyZW5kZXIuZGVmYXVsdFByb3BzICE9IG51bGwgfHwgcmVuZGVyLnByb3BUeXBlcyAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgZG8gbm90IHN1cHBvcnQgcHJvcFR5cGVzIG9yIGRlZmF1bHRQcm9wcy4gJyArICdEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIGEgUmVhY3QgY29tcG9uZW50PycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICByZW5kZXI6IHJlbmRlclxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7IC8vIFRoZSBpbm5lciBjb21wb25lbnQgc2hvdWxkbid0IGluaGVyaXQgdGhpcyBkaXNwbGF5IG5hbWUgaW4gbW9zdCBjYXNlcyxcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgY29tcG9uZW50IG1heSBiZSB1c2VkIGVsc2V3aGVyZS5cbiAgICAgICAgLy8gQnV0IGl0J3MgbmljZSBmb3IgYW5vbnltb3VzIGZ1bmN0aW9ucyB0byBpbmhlcml0IHRoZSBuYW1lLFxuICAgICAgICAvLyBzbyB0aGF0IG91ciBjb21wb25lbnQtc3RhY2sgZ2VuZXJhdGlvbiBsb2dpYyB3aWxsIGRpc3BsYXkgdGhlaXIgZnJhbWVzLlxuICAgICAgICAvLyBBbiBhbm9ueW1vdXMgZnVuY3Rpb24gZ2VuZXJhbGx5IHN1Z2dlc3RzIGEgcGF0dGVybiBsaWtlOlxuICAgICAgICAvLyAgIFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHsuLi59KTtcbiAgICAgICAgLy8gVGhpcyBraW5kIG9mIGlubmVyIGZ1bmN0aW9uIGlzIG5vdCB1c2VkIGVsc2V3aGVyZSBzbyB0aGUgc2lkZSBlZmZlY3QgaXMgb2theS5cblxuICAgICAgICBpZiAoIXJlbmRlci5uYW1lICYmICFyZW5kZXIuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDEgPSBTeW1ib2wuZm9yKCdyZWFjdC5jbGllbnQucmVmZXJlbmNlJyk7XG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgZW5hYmxlRGVidWdUcmFjaW5nICB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IGVuYWJsZUxlZ2FjeUhpZGRlbiAgfHwgdHlwZSA9PT0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgIHx8IGVuYWJsZUNhY2hlRWxlbWVudCAgfHwgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIFRoaXMgbmVlZHMgdG8gaW5jbHVkZSBhbGwgcG9zc2libGUgbW9kdWxlIHJlZmVyZW5jZSBvYmplY3RcbiAgICAvLyB0eXBlcyBzdXBwb3J0ZWQgYnkgYW55IEZsaWdodCBjb25maWd1cmF0aW9uIGFueXdoZXJlIHNpbmNlXG4gICAgLy8gd2UgZG9uJ3Qga25vdyB3aGljaCBGbGlnaHQgYnVpbGQgdGhpcyB3aWxsIGVuZCB1cCBiZWluZyB1c2VkXG4gICAgLy8gd2l0aC5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDEgfHwgdHlwZS5nZXRNb2R1bGVJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1lbW8odHlwZSwgY29tcGFyZSkge1xuICB7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkpIHtcbiAgICAgIGVycm9yKCdtZW1vOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvbXBvbmVudC4gSW5zdGVhZCAnICsgJ3JlY2VpdmVkOiAlcycsIHR5cGUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb21wYXJlOiBjb21wYXJlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29tcGFyZVxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7IC8vIFRoZSBpbm5lciBjb21wb25lbnQgc2hvdWxkbid0IGluaGVyaXQgdGhpcyBkaXNwbGF5IG5hbWUgaW4gbW9zdCBjYXNlcyxcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgY29tcG9uZW50IG1heSBiZSB1c2VkIGVsc2V3aGVyZS5cbiAgICAgICAgLy8gQnV0IGl0J3MgbmljZSBmb3IgYW5vbnltb3VzIGZ1bmN0aW9ucyB0byBpbmhlcml0IHRoZSBuYW1lLFxuICAgICAgICAvLyBzbyB0aGF0IG91ciBjb21wb25lbnQtc3RhY2sgZ2VuZXJhdGlvbiBsb2dpYyB3aWxsIGRpc3BsYXkgdGhlaXIgZnJhbWVzLlxuICAgICAgICAvLyBBbiBhbm9ueW1vdXMgZnVuY3Rpb24gZ2VuZXJhbGx5IHN1Z2dlc3RzIGEgcGF0dGVybiBsaWtlOlxuICAgICAgICAvLyAgIFJlYWN0Lm1lbW8oKHByb3BzKSA9PiB7Li4ufSk7XG4gICAgICAgIC8vIFRoaXMga2luZCBvZiBpbm5lciBmdW5jdGlvbiBpcyBub3QgdXNlZCBlbHNld2hlcmUgc28gdGhlIHNpZGUgZWZmZWN0IGlzIG9rYXkuXG5cbiAgICAgICAgaWYgKCF0eXBlLm5hbWUgJiYgIXR5cGUuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICB0eXBlLmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRUeXBlO1xufVxuXG52YXIgVU5URVJNSU5BVEVEID0gMDtcbnZhciBURVJNSU5BVEVEID0gMTtcbnZhciBFUlJPUkVEID0gMjtcblxuZnVuY3Rpb24gY3JlYXRlQ2FjaGVSb290KCkge1xuICByZXR1cm4gbmV3IFdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FjaGVOb2RlKCkge1xuICByZXR1cm4ge1xuICAgIHM6IFVOVEVSTUlOQVRFRCxcbiAgICAvLyBzdGF0dXMsIHJlcHJlc2VudHMgd2hldGhlciB0aGUgY2FjaGVkIGNvbXB1dGF0aW9uIHJldHVybmVkIGEgdmFsdWUgb3IgdGhyZXcgYW4gZXJyb3JcbiAgICB2OiB1bmRlZmluZWQsXG4gICAgLy8gdmFsdWUsIGVpdGhlciB0aGUgY2FjaGVkIHJlc3VsdCBvciBhbiBlcnJvciwgZGVwZW5kaW5nIG9uIHNcbiAgICBvOiBudWxsLFxuICAgIC8vIG9iamVjdCBjYWNoZSwgYSBXZWFrTWFwIHdoZXJlIG5vbi1wcmltaXRpdmUgYXJndW1lbnRzIGFyZSBzdG9yZWRcbiAgICBwOiBudWxsIC8vIHByaW1pdGl2ZSBjYWNoZSwgYSByZWd1bGFyIE1hcCB3aGVyZSBwcmltaXRpdmUgYXJndW1lbnRzIGFyZSBzdG9yZWQuXG5cbiAgfTtcbn1cblxuZnVuY3Rpb24gY2FjaGUoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudENhY2hlLmN1cnJlbnQ7XG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRpc3BhdGNoZXIsIHRoZW4gd2UgdHJlYXQgdGhpcyBhcyBub3QgYmVpbmcgY2FjaGVkLlxuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IFdlIGRvbid0IHdhbnQgdG8gdXNlIHJlc3QgYXJndW1lbnRzIHNpbmNlIHdlIHRyYW5zcGlsZSB0aGUgY29kZS5cbiAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHZhciBmbk1hcCA9IGRpc3BhdGNoZXIuZ2V0Q2FjaGVGb3JUeXBlKGNyZWF0ZUNhY2hlUm9vdCk7XG4gICAgdmFyIGZuTm9kZSA9IGZuTWFwLmdldChmbik7XG4gICAgdmFyIGNhY2hlTm9kZTtcblxuICAgIGlmIChmbk5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVOb2RlID0gY3JlYXRlQ2FjaGVOb2RlKCk7XG4gICAgICBmbk1hcC5zZXQoZm4sIGNhY2hlTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlTm9kZSA9IGZuTm9kZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbCkge1xuICAgICAgICAvLyBPYmplY3RzIGdvIGludG8gYSBXZWFrTWFwXG4gICAgICAgIHZhciBvYmplY3RDYWNoZSA9IGNhY2hlTm9kZS5vO1xuXG4gICAgICAgIGlmIChvYmplY3RDYWNoZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNhY2hlTm9kZS5vID0gb2JqZWN0Q2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9iamVjdE5vZGUgPSBvYmplY3RDYWNoZS5nZXQoYXJnKTtcblxuICAgICAgICBpZiAob2JqZWN0Tm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2FjaGVOb2RlID0gY3JlYXRlQ2FjaGVOb2RlKCk7XG4gICAgICAgICAgb2JqZWN0Q2FjaGUuc2V0KGFyZywgY2FjaGVOb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWNoZU5vZGUgPSBvYmplY3ROb2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBQcmltaXRpdmVzIGdvIGludG8gYSByZWd1bGFyIE1hcFxuICAgICAgICB2YXIgcHJpbWl0aXZlQ2FjaGUgPSBjYWNoZU5vZGUucDtcblxuICAgICAgICBpZiAocHJpbWl0aXZlQ2FjaGUgPT09IG51bGwpIHtcbiAgICAgICAgICBjYWNoZU5vZGUucCA9IHByaW1pdGl2ZUNhY2hlID0gbmV3IE1hcCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHByaW1pdGl2ZU5vZGUgPSBwcmltaXRpdmVDYWNoZS5nZXQoYXJnKTtcblxuICAgICAgICBpZiAocHJpbWl0aXZlTm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2FjaGVOb2RlID0gY3JlYXRlQ2FjaGVOb2RlKCk7XG4gICAgICAgICAgcHJpbWl0aXZlQ2FjaGUuc2V0KGFyZywgY2FjaGVOb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWNoZU5vZGUgPSBwcmltaXRpdmVOb2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlTm9kZS5zID09PSBURVJNSU5BVEVEKSB7XG4gICAgICByZXR1cm4gY2FjaGVOb2RlLnY7XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlTm9kZS5zID09PSBFUlJPUkVEKSB7XG4gICAgICB0aHJvdyBjYWNoZU5vZGUudjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IFdlIGRvbid0IHdhbnQgdG8gdXNlIHJlc3QgYXJndW1lbnRzIHNpbmNlIHdlIHRyYW5zcGlsZSB0aGUgY29kZS5cbiAgICAgIHZhciByZXN1bHQgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgdmFyIHRlcm1pbmF0ZWROb2RlID0gY2FjaGVOb2RlO1xuICAgICAgdGVybWluYXRlZE5vZGUucyA9IFRFUk1JTkFURUQ7XG4gICAgICB0ZXJtaW5hdGVkTm9kZS52ID0gcmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gV2Ugc3RvcmUgdGhlIGZpcnN0IGVycm9yIHRoYXQncyB0aHJvd24gYW5kIHJldGhyb3cgaXQuXG4gICAgICB2YXIgZXJyb3JlZE5vZGUgPSBjYWNoZU5vZGU7XG4gICAgICBlcnJvcmVkTm9kZS5zID0gRVJST1JFRDtcbiAgICAgIGVycm9yZWROb2RlLnYgPSBlcnJvcjtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG5cbiAge1xuICAgIGlmIChkaXNwYXRjaGVyID09PSBudWxsKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvcicgKyAnIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuJyArICcxLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4nICsgJzIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4nICsgJzMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG4nICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLicpO1xuICAgIH1cbiAgfSAvLyBXaWxsIHJlc3VsdCBpbiBhIG51bGwgYWNjZXNzIGVycm9yIGlmIGFjY2Vzc2VkIG91dHNpZGUgcmVuZGVyIHBoYXNlLiBXZVxuICAvLyBpbnRlbnRpb25hbGx5IGRvbid0IHRocm93IG91ciBvd24gZXJyb3IgYmVjYXVzZSB0aGlzIGlzIGluIGEgaG90IHBhdGguXG4gIC8vIEFsc28gaGVscHMgZW5zdXJlIHRoaXMgaXMgaW5saW5lZC5cblxuXG4gIHJldHVybiBkaXNwYXRjaGVyO1xufVxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0KSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcblxuICB7XG4gICAgLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuICAgIGlmIChDb250ZXh0Ll9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZWFsQ29udGV4dCA9IENvbnRleHQuX2NvbnRleHQ7IC8vIERvbid0IGRlZHVwbGljYXRlIGJlY2F1c2UgdGhpcyBsZWdpdGltYXRlbHkgY2F1c2VzIGJ1Z3NcbiAgICAgIC8vIGFuZCBub2JvZHkgc2hvdWxkIGJlIHVzaW5nIHRoaXMgaW4gZXhpc3RpbmcgY29kZS5cblxuICAgICAgaWYgKHJlYWxDb250ZXh0LkNvbnN1bWVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIGVycm9yKCdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Db25zdW1lcikgaXMgbm90IHN1cHBvcnRlZCwgbWF5IGNhdXNlIGJ1Z3MsIGFuZCB3aWxsIGJlICcgKyAncmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9IGVsc2UgaWYgKHJlYWxDb250ZXh0LlByb3ZpZGVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIGVycm9yKCdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Qcm92aWRlcikgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ29udGV4dChDb250ZXh0KTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5mdW5jdGlvbiB1c2VUcmFuc2l0aW9uKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVRyYW5zaXRpb24oKTtcbn1cbmZ1bmN0aW9uIHVzZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG59XG5mdW5jdGlvbiB1c2VJZCgpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJZCgpO1xufVxuZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCk7XG59XG5mdW5jdGlvbiB1c2VDYWNoZVJlZnJlc2goKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTsgLy8gJEZsb3dGaXhNZVtub3QtYS1mdW5jdGlvbl0gVGhpcyBpcyB1bnN0YWJsZSwgdGh1cyBvcHRpb25hbFxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNhY2hlUmVmcmVzaCgpO1xufVxuZnVuY3Rpb24gdXNlKHVzYWJsZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZSh1c2FibGUpO1xufVxuZnVuY3Rpb24gdXNlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7IC8vICRGbG93Rml4TWVbbm90LWEtZnVuY3Rpb25dIFRoaXMgaXMgdW5zdGFibGUsIHRodXMgb3B0aW9uYWxcblxuICByZXR1cm4gZGlzcGF0Y2hlci51c2VPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbn1cblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cbi8qKlxuICogTGV2ZXJhZ2VzIG5hdGl2ZSBicm93c2VyL1ZNIHN0YWNrIGZyYW1lcyB0byBnZXQgcHJvcGVyIGRldGFpbHMgKGUuZy5cbiAqIGZpbGVuYW1lLCBsaW5lICsgY29sIG51bWJlcikgZm9yIGEgc2luZ2xlIGNvbXBvbmVudCBpbiBhIGNvbXBvbmVudCBzdGFjay4gV2VcbiAqIGRvIHRoaXMgYnk6XG4gKiAgICgxKSB0aHJvd2luZyBhbmQgY2F0Y2hpbmcgYW4gZXJyb3IgaW4gdGhlIGZ1bmN0aW9uIC0gdGhpcyB3aWxsIGJlIG91clxuICogICAgICAgY29udHJvbCBlcnJvci5cbiAqICAgKDIpIGNhbGxpbmcgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYW4gZXJyb3IgdGhhdCB3ZSdsbFxuICogICAgICAgY2F0Y2ggLSB0aGlzIHdpbGwgYmUgb3VyIHNhbXBsZSBlcnJvci5cbiAqICAgKDMpIGRpZmZpbmcgdGhlIGNvbnRyb2wgYW5kIHNhbXBsZSBlcnJvciBzdGFja3MgdG8gZmluZCB0aGUgc3RhY2sgZnJhbWVcbiAqICAgICAgIHdoaWNoIHJlcHJlc2VudHMgb3VyIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRpbmcgYSBjb21tb24gc3RhY2sgZnJhbWUgYmV0d2VlbiBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGNhbiBiZVxuICAgKiB0cmlja3kgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcyBhbmQgbGV2ZWxzIG9mIHN0YWNrIHRyYWNlIHRydW5jYXRpb24gZnJvbVxuICAgKiBkaWZmZXJlbnQgSlMgVk1zLiBTbyBpbnN0ZWFkIHdlJ2xsIGF0dGVtcHQgdG8gY29udHJvbCB3aGF0IHRoYXQgY29tbW9uXG4gICAqIGZyYW1lIHNob3VsZCBiZSB0aHJvdWdoIHRoaXMgb2JqZWN0IG1ldGhvZDpcbiAgICogSGF2aW5nIGJvdGggdGhlIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgYmUgaW4gdGhlIGZ1bmN0aW9uIHVuZGVyIHRoZVxuICAgKiBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIHByb3BlcnR5LCArIHNldHRpbmcgdGhlIGBuYW1lYCBhbmRcbiAgICogYGRpc3BsYXlOYW1lYCBwcm9wZXJ0aWVzIG9mIHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYSBzdGFja1xuICAgKiBmcmFtZSBleGlzdHMgdGhhdCBoYXMgdGhlIG1ldGhvZCBuYW1lIGBEZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lUm9vdGAgaW5cbiAgICogaXQgZm9yIGJvdGggY29udHJvbCBhbmQgc2FtcGxlIHN0YWNrcy5cbiAgICovXG5cblxuICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udHJvbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgfSAvLyBUT0RPKGx1bmEpOiBUaGlzIHdpbGwgY3VycmVudGx5IG9ubHkgdGhyb3cgaWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgICAgICAgIC8vIHRyaWVzIHRvIGFjY2VzcyBSZWFjdC9SZWFjdERPTS9wcm9wcy4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyB0aHJvd1xuICAgICAgICAgIC8vIGluIHNpbXBsZSBjb21wb25lbnRzIHRvb1xuXG5cbiAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gZm4oKTsgLy8gSWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCByZXR1cm5zIGEgcHJvbWlzZSwgaXQncyBsaWtlbHkgYW4gYXN5bmNcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHdoaWNoIHdlIGRvbid0IHlldCBzdXBwb3J0LiBBdHRhY2ggYSBub29wIGNhdGNoIGhhbmRsZXIgdG9cbiAgICAgICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgY29tcG9uZW50IHN0YWNrcyBmb3IgYXN5bmMgY2xpZW50IGNvbXBvbmVudHM/XG5cbiAgICAgICAgICBpZiAobWF5YmVQcm9taXNlICYmIHR5cGVvZiBtYXliZVByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPSAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JztcbiAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCAnbmFtZScpOyAvLyBCZWZvcmUgRVM2LCB0aGUgYG5hbWVgIHByb3BlcnR5IHdhcyBub3QgY29uZmlndXJhYmxlLlxuXG4gIGlmIChuYW1lUHJvcERlc2NyaXB0b3IgJiYgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIC8vIFY4IHV0aWxpemVzIGEgZnVuY3Rpb24ncyBgbmFtZWAgcHJvcGVydHkgd2hlbiBnZW5lcmF0aW5nIGEgc3RhY2sgdHJhY2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwgLy8gQ29uZmlndXJhYmxlIHByb3BlcnRpZXMgY2FuIGJlIHVwZGF0ZWQgZXZlbiBpZiBpdHMgd3JpdGFibGUgZGVzY3JpcHRvclxuICAgIC8vIGlzIHNldCB0byBgZmFsc2VgLlxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgICduYW1lJywge1xuICAgICAgdmFsdWU6ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnXG4gICAgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcblxuICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgdmFyIGMgPSAwO1xuXG4gICAgICB3aGlsZSAocyA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJiAhc2FtcGxlTGluZXNbc10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIHMrKztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGMgPCBjb250cm9sTGluZXMubGVuZ3RoICYmICFjb250cm9sTGluZXNbY10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIGMrKztcbiAgICAgIH0gLy8gV2UgY291bGRuJ3QgZmluZCBvdXIgaW50ZW50aW9uYWxseSBpbmplY3RlZCBjb21tb24gcm9vdCBmcmFtZSwgYXR0ZW1wdFxuICAgICAgLy8gdG8gZmluZCBhbm90aGVyIGNvbW1vbiByb290IGZyYW1lIGJ5IHNlYXJjaCBmcm9tIHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAvLyBjb250cm9sIHN0YWNrLi4uXG5cblxuICAgICAgaWYgKHMgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fCBjID09PSBjb250cm9sTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgICBjLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChoYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd247XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUocGFyZW50VHlwZSk7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGVsZW1lbnQuX293bmVyLnR5cGUpICsgXCIuXCI7XG4gIH1cblxuICB7XG4gICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0JyB8fCAhbm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChub2RlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFKSA7IGVsc2UgaWYgKGlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gRW50cnkgaXRlcmF0b3JzIHVzZWQgdG8gcHJvdmlkZSBpbXBsaWNpdCBrZXlzLFxuICAgICAgLy8gYnV0IG5vdyB3ZSBwcmludCBhIHNlcGFyYXRlIHdhcm5pbmcgZm9yIHRoZW0gbGF0ZXIuXG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgdmFyIHN0ZXA7XG5cbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShzdGVwLnZhbHVlLCBwYXJlbnRUeXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYW4gZWxlbWVudCwgdmFsaWRhdGUgdGhhdCBpdHMgcHJvcHMgZm9sbG93IHRoZSBwcm9wVHlwZXMgZGVmaW5pdGlvbixcbiAqIHByb3ZpZGVkIGJ5IHRoZSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgIGlmICh0eXBlID09PSBudWxsIHx8IHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wVHlwZXM7XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cbiAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wVHlwZXMpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcblxuICAgICAgZXJyb3IoJ0NvbXBvbmVudCAlcyBkZWNsYXJlZCBgUHJvcFR5cGVzYCBpbnN0ZWFkIG9mIGBwcm9wVHlwZXNgLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBwcm9wZXJ0eSBhc3NpZ25tZW50PycsIF9uYW1lIHx8ICdVbmtub3duJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlLmdldERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiAhdHlwZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJyk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGEgZnJhZ21lbnQsIHZhbGlkYXRlIHRoYXQgaXQgY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2l0aCBmcmFnbWVudCBwcm9wc1xuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGZyYWdtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZnJhZ21lbnQpIHtcbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnVW5rbm93bicpICsgXCIgLz5cIjtcbiAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICB9IGVsc2Uge1xuICAgICAgdHlwZVN0cmluZyA9IHR5cGVvZiB0eXBlO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGVycm9yKCdSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGVTdHJpbmcsIGluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50ID0gY3JlYXRlRWxlbWVudCQxLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLlxuICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gIC8vIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcblxuXG4gIGlmICh2YWxpZFR5cGUpIHtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxudmFyIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gZmFsc2U7XG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24odHlwZSkge1xuICB2YXIgdmFsaWRhdGVkRmFjdG9yeSA9IGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbi5iaW5kKG51bGwsIHR5cGUpO1xuICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5KSB7XG4gICAgICBkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1JlYWN0LmNyZWF0ZUZhY3RvcnkoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBDb25zaWRlciB1c2luZyBKU1ggJyArICdvciB1c2UgUmVhY3QuY3JlYXRlRWxlbWVudCgpIGRpcmVjdGx5IGluc3RlYWQuJyk7XG4gICAgfSAvLyBMZWdhY3kgaG9vazogcmVtb3ZlIGl0XG5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgKyAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7XG4gICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZEZhY3Rvcnk7XG59XG5mdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbihlbGVtZW50LCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBjbG9uZUVsZW1lbnQkMS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oc2NvcGUsIG9wdGlvbnMpIHtcbiAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IHt9O1xuICB2YXIgY3VycmVudFRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uLl91cGRhdGVkRmliZXJzID0gbmV3IFNldCgpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBzY29wZSgpO1xuICB9IGZpbmFsbHkge1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcblxuICAgIHtcbiAgICAgIGlmIChwcmV2VHJhbnNpdGlvbiA9PT0gbnVsbCAmJiBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycykge1xuICAgICAgICB2YXIgdXBkYXRlZEZpYmVyc0NvdW50ID0gY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuc2l6ZTtcblxuICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5jbGVhcigpO1xuXG4gICAgICAgIGlmICh1cGRhdGVkRmliZXJzQ291bnQgPiAxMCkge1xuICAgICAgICAgIHdhcm4oJ0RldGVjdGVkIGEgbGFyZ2UgbnVtYmVyIG9mIHVwZGF0ZXMgaW5zaWRlIHN0YXJ0VHJhbnNpdGlvbi4gJyArICdJZiB0aGlzIGlzIGR1ZSB0byBhIHN1YnNjcmlwdGlvbiBwbGVhc2UgcmUtd3JpdGUgaXQgdG8gdXNlIFJlYWN0IHByb3ZpZGVkIGhvb2tzLiAnICsgJ090aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FybkFib3V0TWVzc2FnZUNoYW5uZWwgPSBmYWxzZTtcbnZhciBlbnF1ZXVlVGFza0ltcGwgPSBudWxsO1xuZnVuY3Rpb24gZW5xdWV1ZVRhc2sodGFzaykge1xuICBpZiAoZW5xdWV1ZVRhc2tJbXBsID09PSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJlYWQgcmVxdWlyZSBvZmYgdGhlIG1vZHVsZSBvYmplY3QgdG8gZ2V0IGFyb3VuZCB0aGUgYnVuZGxlcnMuXG4gICAgICAvLyB3ZSBkb24ndCB3YW50IHRoZW0gdG8gZGV0ZWN0IGEgcmVxdWlyZSBhbmQgYnVuZGxlIGEgTm9kZSBwb2x5ZmlsbC5cbiAgICAgIHZhciByZXF1aXJlU3RyaW5nID0gKCdyZXF1aXJlJyArIE1hdGgucmFuZG9tKCkpLnNsaWNlKDAsIDcpO1xuICAgICAgdmFyIG5vZGVSZXF1aXJlID0gbW9kdWxlICYmIG1vZHVsZVtyZXF1aXJlU3RyaW5nXTsgLy8gYXNzdW1pbmcgd2UncmUgaW4gbm9kZSwgbGV0J3MgdHJ5IHRvIGdldCBub2RlJ3NcbiAgICAgIC8vIHZlcnNpb24gb2Ygc2V0SW1tZWRpYXRlLCBieXBhc3NpbmcgZmFrZSB0aW1lcnMgaWYgYW55LlxuXG4gICAgICBlbnF1ZXVlVGFza0ltcGwgPSBub2RlUmVxdWlyZS5jYWxsKG1vZHVsZSwgJ3RpbWVycycpLnNldEltbWVkaWF0ZTtcbiAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAvLyB3ZSdyZSBpbiBhIGJyb3dzZXJcbiAgICAgIC8vIHdlIGNhbid0IHVzZSByZWd1bGFyIHRpbWVycyBiZWNhdXNlIHRoZXkgbWF5IHN0aWxsIGJlIGZha2VkXG4gICAgICAvLyBzbyB3ZSB0cnkgTWVzc2FnZUNoYW5uZWwrcG9zdE1lc3NhZ2UgaW5zdGVhZFxuICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoZGlkV2FybkFib3V0TWVzc2FnZUNoYW5uZWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgTWVzc2FnZUNoYW5uZWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdUaGlzIGJyb3dzZXIgZG9lcyBub3QgaGF2ZSBhIE1lc3NhZ2VDaGFubmVsIGltcGxlbWVudGF0aW9uLCAnICsgJ3NvIGVucXVldWluZyB0YXNrcyB2aWEgYXdhaXQgYWN0KGFzeW5jICgpID0+IC4uLikgd2lsbCBmYWlsLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMgJyArICdpZiB5b3UgZW5jb3VudGVyIHRoaXMgd2FybmluZy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGNhbGxiYWNrO1xuICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKHVuZGVmaW5lZCk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbnF1ZXVlVGFza0ltcGwodGFzayk7XG59XG5cbi8vIG51bWJlciBvZiBgYWN0YCBzY29wZXMgb24gdGhlIHN0YWNrLlxuXG52YXIgYWN0U2NvcGVEZXB0aCA9IDA7IC8vIFdlIG9ubHkgd2FybiB0aGUgZmlyc3QgdGltZSB5b3UgbmVnbGVjdCB0byBhd2FpdCBhbiBhc3luYyBgYWN0YCBzY29wZS5cblxudmFyIGRpZFdhcm5Ob0F3YWl0QWN0ID0gZmFsc2U7XG5mdW5jdGlvbiBhY3QoY2FsbGJhY2spIHtcbiAge1xuICAgIC8vIFdoZW4gUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCBpcyBub3QgbnVsbCwgaXQgc2lnbmFscyB0byBSZWFjdCB0aGF0XG4gICAgLy8gd2UncmUgY3VycmVudGx5IGluc2lkZSBhbiBgYWN0YCBzY29wZS4gUmVhY3Qgd2lsbCBwdXNoIGFsbCBpdHMgdGFza3MgdG9cbiAgICAvLyB0aGlzIHF1ZXVlIGluc3RlYWQgb2Ygc2NoZWR1bGluZyB0aGVtIHdpdGggcGxhdGZvcm0gQVBJcy5cbiAgICAvL1xuICAgIC8vIFdlIHNldCB0aGlzIHRvIGFuIGVtcHR5IGFycmF5IHdoZW4gd2UgZmlyc3QgZW50ZXIgYW4gYGFjdGAgc2NvcGUsIGFuZFxuICAgIC8vIG9ubHkgdW5zZXQgaXQgb25jZSB3ZSd2ZSBsZWZ0IHRoZSBvdXRlcm1vc3QgYGFjdGAgc2NvcGUg4oCUIHJlbWVtYmVyIHRoYXRcbiAgICAvLyBgYWN0YCBjYWxscyBjYW4gYmUgbmVzdGVkLlxuICAgIC8vXG4gICAgLy8gSWYgd2UncmUgYWxyZWFkeSBpbnNpZGUgYW4gYGFjdGAgc2NvcGUsIHJldXNlIHRoZSBleGlzdGluZyBxdWV1ZS5cbiAgICB2YXIgcHJldklzQmF0Y2hpbmdMZWdhY3kgPSBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5pc0JhdGNoaW5nTGVnYWN5O1xuICAgIHZhciBwcmV2QWN0UXVldWUgPSBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50O1xuICAgIHZhciBwcmV2QWN0U2NvcGVEZXB0aCA9IGFjdFNjb3BlRGVwdGg7XG4gICAgYWN0U2NvcGVEZXB0aCsrO1xuICAgIHZhciBxdWV1ZSA9IFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgPSBwcmV2QWN0UXVldWUgIT09IG51bGwgPyBwcmV2QWN0UXVldWUgOiBbXTsgLy8gVXNlZCB0byByZXByb2R1Y2UgYmVoYXZpb3Igb2YgYGJhdGNoZWRVcGRhdGVzYCBpbiBsZWdhY3kgbW9kZS4gT25seVxuICAgIC8vIHNldCB0byBgdHJ1ZWAgd2hpbGUgdGhlIGdpdmVuIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLCBub3QgZm9yIHVwZGF0ZXNcbiAgICAvLyB0cmlnZ2VyZWQgZHVyaW5nIGFuIGFzeW5jIGV2ZW50LCBiZWNhdXNlIHRoaXMgaXMgaG93IHRoZSBsZWdhY3lcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiBvZiBgYWN0YCBiZWhhdmVkLlxuXG4gICAgUmVhY3RDdXJyZW50QWN0UXVldWUuaXNCYXRjaGluZ0xlZ2FjeSA9IHRydWU7XG4gICAgdmFyIHJlc3VsdDsgLy8gVGhpcyB0cmFja3Mgd2hldGhlciB0aGUgYGFjdGAgY2FsbCBpcyBhd2FpdGVkLiBJbiBjZXJ0YWluIGNhc2VzLCBub3RcbiAgICAvLyBhd2FpdGluZyBpdCBpcyBhIG1pc3Rha2UsIHNvIHdlIHdpbGwgZGV0ZWN0IHRoYXQgYW5kIHdhcm4uXG5cbiAgICB2YXIgZGlkQXdhaXRBY3RDYWxsID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmVzZXQgdGhpcyB0byBgZmFsc2VgIHJpZ2h0IGJlZm9yZSBlbnRlcmluZyB0aGUgUmVhY3Qgd29yayBsb29wLiBUaGVcbiAgICAgIC8vIG9ubHkgcGxhY2Ugd2UgZXZlciByZWFkIHRoaXMgZmllbGRzIGlzIGp1c3QgYmVsb3csIHJpZ2h0IGFmdGVyIHJ1bm5pbmdcbiAgICAgIC8vIHRoZSBjYWxsYmFjay4gU28gd2UgZG9uJ3QgbmVlZCB0byByZXNldCBhZnRlciB0aGUgY2FsbGJhY2sgcnVucy5cbiAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmRpZFNjaGVkdWxlTGVnYWN5VXBkYXRlID0gZmFsc2U7XG4gICAgICByZXN1bHQgPSBjYWxsYmFjaygpO1xuICAgICAgdmFyIGRpZFNjaGVkdWxlTGVnYWN5VXBkYXRlID0gUmVhY3RDdXJyZW50QWN0UXVldWUuZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGU7IC8vIFJlcGxpY2F0ZSBiZWhhdmlvciBvZiBvcmlnaW5hbCBgYWN0YCBpbXBsZW1lbnRhdGlvbiBpbiBsZWdhY3kgbW9kZSxcbiAgICAgIC8vIHdoaWNoIGZsdXNoZWQgdXBkYXRlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgc2NvcGUgZnVuY3Rpb24gZXhpdHMsIGV2ZW5cbiAgICAgIC8vIGlmIGl0J3MgYW4gYXN5bmMgZnVuY3Rpb24uXG5cbiAgICAgIGlmICghcHJldklzQmF0Y2hpbmdMZWdhY3kgJiYgZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGUpIHtcbiAgICAgICAgZmx1c2hBY3RRdWV1ZShxdWV1ZSk7XG4gICAgICB9IC8vIGBpc0JhdGNoaW5nTGVnYWN5YCBnZXRzIHJlc2V0IHVzaW5nIHRoZSByZWd1bGFyIHN0YWNrLCBub3QgdGhlIGFzeW5jXG4gICAgICAvLyBvbmUgdXNlZCB0byB0cmFjayBgYWN0YCBzY29wZXMuIFdoeSwgeW91IG1heSBiZSB3b25kZXJpbmc/IEJlY2F1c2VcbiAgICAgIC8vIHRoYXQncyBob3cgaXQgd29ya2VkIGJlZm9yZSB2ZXJzaW9uIDE4LiBZZXMsIGl0J3MgY29uZnVzaW5nISBXZSBzaG91bGRcbiAgICAgIC8vIGRlbGV0ZSBsZWdhY3kgbW9kZSEhXG5cblxuICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuaXNCYXRjaGluZ0xlZ2FjeSA9IHByZXZJc0JhdGNoaW5nTGVnYWN5O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBgaXNCYXRjaGluZ0xlZ2FjeWAgZ2V0cyByZXNldCB1c2luZyB0aGUgcmVndWxhciBzdGFjaywgbm90IHRoZSBhc3luY1xuICAgICAgLy8gb25lIHVzZWQgdG8gdHJhY2sgYGFjdGAgc2NvcGVzLiBXaHksIHlvdSBtYXkgYmUgd29uZGVyaW5nPyBCZWNhdXNlXG4gICAgICAvLyB0aGF0J3MgaG93IGl0IHdvcmtlZCBiZWZvcmUgdmVyc2lvbiAxOC4gWWVzLCBpdCdzIGNvbmZ1c2luZyEgV2Ugc2hvdWxkXG4gICAgICAvLyBkZWxldGUgbGVnYWN5IG1vZGUhIVxuICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuaXNCYXRjaGluZ0xlZ2FjeSA9IHByZXZJc0JhdGNoaW5nTGVnYWN5O1xuICAgICAgcG9wQWN0U2NvcGUocHJldkFjdFF1ZXVlLCBwcmV2QWN0U2NvcGVEZXB0aCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIC8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbiAgICB0eXBlb2YgcmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEEgcHJvbWlzZS90aGVuYWJsZSB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgY2FsbGJhY2suIFdhaXQgZm9yIGl0IHRvXG4gICAgICAvLyByZXNvbHZlIGJlZm9yZSBmbHVzaGluZyB0aGUgcXVldWUuXG4gICAgICAvL1xuICAgICAgLy8gSWYgYGFjdGAgd2VyZSBpbXBsZW1lbnRlZCBhcyBhbiBhc3luYyBmdW5jdGlvbiwgdGhpcyB3aG9sZSBibG9jayBjb3VsZFxuICAgICAgLy8gYmUgYSBzaW5nbGUgYGF3YWl0YCBjYWxsLiBUaGF0J3MgcmVhbGx5IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlblxuICAgICAgLy8gdGhpcyBicmFuY2ggYW5kIHRoZSBuZXh0IG9uZS5cbiAgICAgIHZhciB0aGVuYWJsZSA9IHJlc3VsdDsgLy8gV2FybiBpZiB0aGUgYW4gYGFjdGAgY2FsbCB3aXRoIGFuIGFzeW5jIHNjb3BlIGlzIG5vdCBhd2FpdGVkLiBJbiBhXG4gICAgICAvLyBmdXR1cmUgcmVsZWFzZSwgY29uc2lkZXIgbWFraW5nIHRoaXMgYW4gZXJyb3IuXG5cbiAgICAgIHF1ZXVlU2V2ZXJhbE1pY3JvdGFza3MoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRpZEF3YWl0QWN0Q2FsbCAmJiAhZGlkV2Fybk5vQXdhaXRBY3QpIHtcbiAgICAgICAgICBkaWRXYXJuTm9Bd2FpdEFjdCA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignWW91IGNhbGxlZCBhY3QoYXN5bmMgKCkgPT4gLi4uKSB3aXRob3V0IGF3YWl0LiAnICsgJ1RoaXMgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIHRlc3RpbmcgYmVoYXZpb3VyLCAnICsgJ2ludGVybGVhdmluZyBtdWx0aXBsZSBhY3QgY2FsbHMgYW5kIG1peGluZyB0aGVpciAnICsgJ3Njb3Blcy4gJyArICdZb3Ugc2hvdWxkIC0gYXdhaXQgYWN0KGFzeW5jICgpID0+IC4uLik7Jyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGRpZEF3YWl0QWN0Q2FsbCA9IHRydWU7XG4gICAgICAgICAgdGhlbmFibGUudGhlbihmdW5jdGlvbiAocmV0dXJuVmFsdWUpIHtcbiAgICAgICAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpO1xuXG4gICAgICAgICAgICBpZiAocHJldkFjdFNjb3BlRGVwdGggPT09IDApIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgZXhpdGluZyB0aGUgb3V0ZXJtb3N0IGBhY3RgIHNjb3BlLiBGbHVzaCB0aGUgcXVldWUuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZmx1c2hBY3RRdWV1ZShxdWV1ZSk7XG4gICAgICAgICAgICAgICAgZW5xdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICgvLyBSZWN1cnNpdmVseSBmbHVzaCB0YXNrcyBzY2hlZHVsZWQgYnkgYSBtaWNyb3Rhc2suXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gYHRoZW5hYmxlYCBtaWdodCBub3QgYmUgYSByZWFsIHByb21pc2UsIGFuZCBgZmx1c2hBY3RRdWV1ZWBcbiAgICAgICAgICAgICAgICAvLyBtaWdodCB0aHJvdywgc28gd2UgbmVlZCB0byB3cmFwIGBmbHVzaEFjdFF1ZXVlYCBpbiBhXG4gICAgICAgICAgICAgICAgLy8gdHJ5L2NhdGNoLlxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgcG9wQWN0U2NvcGUocHJldkFjdFF1ZXVlLCBwcmV2QWN0U2NvcGVEZXB0aCk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmV0dXJuVmFsdWUgPSByZXN1bHQ7IC8vIFRoZSBjYWxsYmFjayBpcyBub3QgYW4gYXN5bmMgZnVuY3Rpb24uIEV4aXQgdGhlIGN1cnJlbnRcbiAgICAgIC8vIHNjb3BlIGltbWVkaWF0ZWx5LlxuXG4gICAgICBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKTtcblxuICAgICAgaWYgKHByZXZBY3RTY29wZURlcHRoID09PSAwKSB7XG4gICAgICAgIC8vIFdlJ3JlIGV4aXRpbmcgdGhlIG91dGVybW9zdCBgYWN0YCBzY29wZS4gRmx1c2ggdGhlIHF1ZXVlLlxuICAgICAgICBmbHVzaEFjdFF1ZXVlKHF1ZXVlKTsgLy8gSWYgdGhlIHF1ZXVlIGlzIG5vdCBlbXB0eSwgaXQgaW1wbGllcyB0aGF0IHdlIGludGVudGlvbmFsbHkgeWllbGRlZFxuICAgICAgICAvLyB0byB0aGUgbWFpbiB0aHJlYWQsIGJlY2F1c2Ugc29tZXRoaW5nIHN1c3BlbmRlZC4gV2Ugd2lsbCBjb250aW51ZVxuICAgICAgICAvLyBpbiBhbiBhc3luY2hyb25vdXMgdGFzay5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2FybiBpZiBzb21ldGhpbmcgc3VzcGVuZHMgYnV0IHRoZSBgYWN0YCBjYWxsIGlzIG5vdCBhd2FpdGVkLlxuICAgICAgICAvLyBJbiBhIGZ1dHVyZSByZWxlYXNlLCBjb25zaWRlciBtYWtpbmcgdGhpcyBhbiBlcnJvci5cblxuICAgICAgICBpZiAocXVldWUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcXVldWVTZXZlcmFsTWljcm90YXNrcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWRpZEF3YWl0QWN0Q2FsbCAmJiAhZGlkV2Fybk5vQXdhaXRBY3QpIHtcbiAgICAgICAgICAgICAgZGlkV2Fybk5vQXdhaXRBY3QgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBzdXNwZW5kZWQgaW5zaWRlIGFuIGBhY3RgIHNjb3BlLCBidXQgdGhlICcgKyAnYGFjdGAgY2FsbCB3YXMgbm90IGF3YWl0ZWQuIFdoZW4gdGVzdGluZyBSZWFjdCAnICsgJ2NvbXBvbmVudHMgdGhhdCBkZXBlbmQgb24gYXN5bmNocm9ub3VzIGRhdGEsIHlvdSBtdXN0ICcgKyAnYXdhaXQgdGhlIHJlc3VsdDpcXG5cXG4nICsgJ2F3YWl0IGFjdCgoKSA9PiAuLi4pJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gLy8gTGlrZSBtYW55IHRoaW5ncyBpbiB0aGlzIG1vZHVsZSwgdGhpcyBpcyBuZXh0IHBhcnQgaXMgY29uZnVzaW5nLlxuICAgICAgICAvL1xuICAgICAgICAvLyBXZSBkbyBub3QgY3VycmVudGx5IHJlcXVpcmUgZXZlcnkgYGFjdGAgY2FsbCB0aGF0IGlzIHBhc3NlZCBhXG4gICAgICAgIC8vIGNhbGxiYWNrIHRvIGJlIGF3YWl0ZWQsIHRocm91Z2ggYXJndWFibHkgd2Ugc2hvdWxkLiBTaW5jZSB0aGlzXG4gICAgICAgIC8vIGNhbGxiYWNrIHdhcyBzeW5jaHJvbm91cywgd2UgbmVlZCB0byBleGl0IHRoZSBjdXJyZW50IHNjb3BlIGJlZm9yZVxuICAgICAgICAvLyByZXR1cm5pbmcuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEhvd2V2ZXIsIGlmIHRoZW5hYmxlIHdlJ3JlIGFib3V0IHRvIHJldHVybiAqaXMqIGF3YWl0ZWQsIHdlJ2xsXG4gICAgICAgIC8vIGltbWVkaWF0ZWx5IHJlc3RvcmUgdGhlIGN1cnJlbnQgc2NvcGUuIFNvIGl0IHNob3VsZG4ndCBvYnNlcnZhYmxlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgYWZmZWN0IHRoZSBjYXNlIHdoZXJlIHRoZSBzY29wZSBjYWxsYmFjayBpcyBhc3luYyxcbiAgICAgICAgLy8gYmVjYXVzZSB3ZSBhbHdheXMgcmVxdWlyZSB0aG9zZSBjYWxscyB0byBiZSBhd2FpdGVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUT0RPOiBJbiBhIGZ1dHVyZSB2ZXJzaW9uLCBjb25zaWRlciBhbHdheXMgcmVxdWlyaW5nIGFsbCBgYWN0YCBjYWxsc1xuICAgICAgICAvLyB0byBiZSBhd2FpdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNhbGxiYWNrIGlzIHN5bmMgb3IgYXN5bmMuXG5cblxuICAgICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGRpZEF3YWl0QWN0Q2FsbCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAocHJldkFjdFNjb3BlRGVwdGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBgYWN0YCBjYWxsIGlzIGF3YWl0ZWQsIHJlc3RvcmUgdGhlIHF1ZXVlIHdlIHdlcmVcbiAgICAgICAgICAgIC8vIHVzaW5nIGJlZm9yZSAoc2VlIGxvbmcgY29tbWVudCBhYm92ZSkgc28gd2UgY2FuIGZsdXNoIGl0LlxuICAgICAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9IHF1ZXVlO1xuICAgICAgICAgICAgZW5xdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gKC8vIFJlY3Vyc2l2ZWx5IGZsdXNoIHRhc2tzIHNjaGVkdWxlZCBieSBhIG1pY3JvdGFzay5cbiAgICAgICAgICAgICAgICByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKSB7XG4gIHtcbiAgICBpZiAocHJldkFjdFNjb3BlRGVwdGggIT09IGFjdFNjb3BlRGVwdGggLSAxKSB7XG4gICAgICBlcnJvcignWW91IHNlZW0gdG8gaGF2ZSBvdmVybGFwcGluZyBhY3QoKSBjYWxscywgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0JlIHN1cmUgdG8gYXdhaXQgcHJldmlvdXMgYWN0KCkgY2FsbHMgYmVmb3JlIG1ha2luZyBhIG5ldyBvbmUuICcpO1xuICAgIH1cblxuICAgIGFjdFNjb3BlRGVwdGggPSBwcmV2QWN0U2NvcGVEZXB0aDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpIHtcbiAge1xuICAgIC8vIENoZWNrIGlmIGFueSB0YXNrcyB3ZXJlIHNjaGVkdWxlZCBhc3luY2hyb25vdXNseS5cbiAgICB2YXIgcXVldWUgPSBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50O1xuXG4gICAgaWYgKHF1ZXVlICE9PSBudWxsKSB7XG4gICAgICBpZiAocXVldWUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIC8vIEFzeW5jIHRhc2tzIHdlcmUgc2NoZWR1bGVkLCBtb3N0bHkgbGlrZWx5IGluIGEgbWljcm90YXNrLlxuICAgICAgICAvLyBLZWVwIGZsdXNoaW5nIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGZsdXNoQWN0UXVldWUocXVldWUpOyAvLyBUaGUgd29yayB3ZSBqdXN0IHBlcmZvcm1lZCBtYXkgaGF2ZSBzY2hlZHVsZSBhZGRpdGlvbmFsIGFzeW5jXG4gICAgICAgICAgLy8gdGFza3MuIFdhaXQgYSBtYWNyb3Rhc2sgYW5kIGNoZWNrIGFnYWluLlxuXG4gICAgICAgICAgZW5xdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gTGVhdmUgcmVtYWluaW5nIHRhc2tzIG9uIHRoZSBxdWV1ZSBpZiBzb21ldGhpbmcgdGhyb3dzLlxuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSBxdWV1ZSBpcyBlbXB0eS4gV2UgY2FuIGZpbmlzaC5cbiAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9IG51bGw7XG4gICAgICAgIHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlKHJldHVyblZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGlzRmx1c2hpbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmx1c2hBY3RRdWV1ZShxdWV1ZSkge1xuICB7XG4gICAgaWYgKCFpc0ZsdXNoaW5nKSB7XG4gICAgICAvLyBQcmV2ZW50IHJlLWVudHJhbmNlLlxuICAgICAgaXNGbHVzaGluZyA9IHRydWU7XG4gICAgICB2YXIgaSA9IDA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAoOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcblxuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmRpZFVzZVByb21pc2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBjb250aW51YXRpb24gPSBjYWxsYmFjayhmYWxzZSk7XG5cbiAgICAgICAgICAgIGlmIChjb250aW51YXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgaWYgKFJlYWN0Q3VycmVudEFjdFF1ZXVlLmRpZFVzZVByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgY29tcG9uZW50IGp1c3Qgc3VzcGVuZGVkLiBZaWVsZCB0byB0aGUgbWFpbiB0aHJlYWQgaW5cbiAgICAgICAgICAgICAgICAvLyBjYXNlIHRoZSBwcm9taXNlIGlzIGFscmVhZHkgcmVzb2x2ZWQuIElmIHNvLCBpdCB3aWxsIHBpbmcgaW5cbiAgICAgICAgICAgICAgICAvLyBhIG1pY3JvdGFzayBhbmQgd2UgY2FuIHJlc3VtZSB3aXRob3V0IHVud2luZGluZyB0aGUgc3RhY2suXG4gICAgICAgICAgICAgICAgcXVldWVbaV0gPSBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICBxdWV1ZS5zcGxpY2UoMCwgaSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBjb250aW51YXRpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IHdoaWxlICh0cnVlKTtcbiAgICAgICAgfSAvLyBXZSBmbHVzaGVkIHRoZSBlbnRpcmUgcXVldWUuXG5cblxuICAgICAgICBxdWV1ZS5sZW5ndGggPSAwO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgc29tZXRoaW5nIHRocm93cywgbGVhdmUgdGhlIHJlbWFpbmluZyBjYWxsYmFja3Mgb24gdGhlIHF1ZXVlLlxuICAgICAgICBxdWV1ZS5zcGxpY2UoMCwgaSArIDEpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRmx1c2hpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gU29tZSBvZiBvdXIgd2FybmluZ3MgYXR0ZW1wdCB0byBkZXRlY3QgaWYgdGhlIGBhY3RgIGNhbGwgaXMgYXdhaXRlZCBieVxuLy8gY2hlY2tpbmcgaW4gYW4gYXN5bmNocm9ub3VzIHRhc2suIFdhaXQgYSBmZXcgbWljcm90YXNrcyBiZWZvcmUgY2hlY2tpbmcuIFRoZVxuLy8gb25seSByZWFzb24gb25lIGlzbid0IHN1ZmZpY2llbnQgaXMgd2Ugd2FudCB0byBhY2NvbW1vZGF0ZSB0aGUgY2FzZSB3aGVyZSBhblxuLy8gYGFjdGAgY2FsbCBpcyByZXR1cm5lZCBmcm9tIGFuIGFzeW5jIGZ1bmN0aW9uIHdpdGhvdXQgZmlyc3QgYmVpbmcgYXdhaXRlZCxcbi8vIHNpbmNlIHRoYXQncyBhIHNvbWV3aGF0IGNvbW1vbiBwYXR0ZXJuLiBJZiB5b3UgZG8gdGhpcyB0b28gbWFueSB0aW1lcyBpbiBhXG4vLyBuZXN0ZWQgc2VxdWVuY2UsIHlvdSBtaWdodCBnZXQgYSB3YXJuaW5nLCBidXQgeW91IGNhbiBhbHdheXMgZml4IGJ5IGF3YWl0aW5nXG4vLyB0aGUgY2FsbC5cbi8vXG4vLyBBIG1hY3JvdGFzayB3b3VsZCBhbHNvIHdvcmsgKGFuZCBpcyB0aGUgZmFsbGJhY2spIGJ1dCBkZXBlbmRpbmcgb24gdGhlIHRlc3Rcbi8vIGVudmlyb25tZW50IGl0IG1heSBjYXVzZSB0aGUgd2FybmluZyB0byBmaXJlIHRvbyBsYXRlLlxuXG5cbnZhciBxdWV1ZVNldmVyYWxNaWNyb3Rhc2tzID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrID09PSAnZnVuY3Rpb24nID8gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gIHF1ZXVlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcXVldWVNaWNyb3Rhc2soY2FsbGJhY2spO1xuICB9KTtcbn0gOiBlbnF1ZXVlVGFzaztcblxudmFyIGNyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjcmVhdGVGYWN0b3J5ID0gY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIDtcbnZhciBDaGlsZHJlbiA9IHtcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgb25seTogb25seUNoaWxkXG59O1xuXG5leHBvcnRzLkNoaWxkcmVuID0gQ2hpbGRyZW47XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuZXhwb3J0cy5Qcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG5leHBvcnRzLlB1cmVDb21wb25lbnQgPSBQdXJlQ29tcG9uZW50O1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuZXhwb3J0cy5jYWNoZSA9IGNhY2hlO1xuZXhwb3J0cy5jbG9uZUVsZW1lbnQgPSBjbG9uZUVsZW1lbnQ7XG5leHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0O1xuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gY3JlYXRlRWxlbWVudDtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMuc3RhcnRUcmFuc2l0aW9uID0gc3RhcnRUcmFuc2l0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9hY3QgPSBhY3Q7XG5leHBvcnRzLnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaCA9IHVzZUNhY2hlUmVmcmVzaDtcbmV4cG9ydHMudXNlID0gdXNlO1xuZXhwb3J0cy51c2VDYWxsYmFjayA9IHVzZUNhbGxiYWNrO1xuZXhwb3J0cy51c2VDb250ZXh0ID0gdXNlQ29udGV4dDtcbmV4cG9ydHMudXNlRGVidWdWYWx1ZSA9IHVzZURlYnVnVmFsdWU7XG5leHBvcnRzLnVzZURlZmVycmVkVmFsdWUgPSB1c2VEZWZlcnJlZFZhbHVlO1xuZXhwb3J0cy51c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG5leHBvcnRzLnVzZUlkID0gdXNlSWQ7XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSB1c2VJbXBlcmF0aXZlSGFuZGxlO1xuZXhwb3J0cy51c2VJbnNlcnRpb25FZmZlY3QgPSB1c2VJbnNlcnRpb25FZmZlY3Q7XG5leHBvcnRzLnVzZUxheW91dEVmZmVjdCA9IHVzZUxheW91dEVmZmVjdDtcbmV4cG9ydHMudXNlTWVtbyA9IHVzZU1lbW87XG5leHBvcnRzLnVzZU9wdGltaXN0aWMgPSB1c2VPcHRpbWlzdGljO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlO1xuZXhwb3J0cy51c2VUcmFuc2l0aW9uID0gdXNlVHJhbnNpdGlvbjtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgICAgICAgICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgPT09XG4gICAgJ2Z1bmN0aW9uJ1xuKSB7XG4gIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChuZXcgRXJyb3IoKSk7XG59XG4gICAgICAgIFxuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react.development.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/compiled/react/index.js ***! + \********************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLDhKQUFzRDtBQUN4RCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2luZGV4LmpzPzI2MTMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react/jsx-runtime.js ***! + \**************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLHNMQUFrRTtBQUNwRSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2pzeC1ydW50aW1lLmpzPzRmNDgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js ***! + \**************************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: function() { return /* binding */ _class_private_field_loose_base; },\n/* harmony export */ _class_private_field_loose_base: function() { return /* binding */ _class_private_field_loose_base; }\n/* harmony export */ });\nfunction _class_private_field_loose_base(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError(\"attempted to use private field on non-instance\");\n }\n\n return receiver;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ2dEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuanM/ZTVhMSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZShyZWNlaXZlciwgcHJpdmF0ZUtleSkge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlY2VpdmVyLCBwcml2YXRlS2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHVzZSBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVjZWl2ZXI7XG59XG5leHBvcnQgeyBfY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlIGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js ***! + \*************************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: function() { return /* binding */ _class_private_field_loose_key; },\n/* harmony export */ _class_private_field_loose_key: function() { return /* binding */ _class_private_field_loose_key; }\n/* harmony export */ });\nvar id = 0;\n\nfunction _class_private_field_loose_key(name) {\n return \"__private_\" + id++ + \"_\" + name;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUVPO0FBQ1A7QUFDQTtBQUMrQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9rZXkuanM/YTIyZCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaWQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5KG5hbWUpIHtcbiAgICByZXR1cm4gXCJfX3ByaXZhdGVfXCIgKyBpZCsrICsgXCJfXCIgKyBuYW1lO1xufVxuZXhwb3J0IHsgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5IGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_interop_require_default.js ***! + \*******************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: function() { return /* binding */ _interop_require_default; },\n/* harmony export */ _interop_require_default: function() { return /* binding */ _interop_require_default; }\n/* harmony export */ });\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPO0FBQ1AsMkNBQTJDO0FBQzNDO0FBQ3lDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5qcz8zN2FiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07XG59XG5leHBvcnQgeyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgYXMgXyB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js": +/*!********************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_interop_require_wildcard.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: function() { return /* binding */ _interop_require_wildcard; },\n/* harmony export */ _interop_require_wildcard: function() { return /* binding */ _interop_require_wildcard; }\n/* harmony export */ });\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNPO0FBQ1A7QUFDQSx1RkFBdUY7O0FBRXZGOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUMwQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLmpzP2MyZmMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuXG4gICAgdmFyIGNhY2hlQmFiZWxJbnRlcm9wID0gbmV3IFdlYWtNYXAoKTtcbiAgICB2YXIgY2FjaGVOb2RlSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uKG5vZGVJbnRlcm9wKSB7XG4gICAgICAgIHJldHVybiBub2RlSW50ZXJvcCA/IGNhY2hlTm9kZUludGVyb3AgOiBjYWNoZUJhYmVsSW50ZXJvcDtcbiAgICB9KShub2RlSW50ZXJvcCk7XG59XG5leHBvcnQgZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZChvYmosIG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKCFub2RlSW50ZXJvcCAmJiBvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHJldHVybiBvYmo7XG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHsgZGVmYXVsdDogb2JqIH07XG5cbiAgICB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApO1xuXG4gICAgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSByZXR1cm4gY2FjaGUuZ2V0KG9iaik7XG5cbiAgICB2YXIgbmV3T2JqID0ge307XG4gICAgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoa2V5ICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7XG4gICAgICAgICAgICBlbHNlIG5ld09ialtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZXdPYmouZGVmYXVsdCA9IG9iajtcblxuICAgIGlmIChjYWNoZSkgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTtcblxuICAgIHJldHVybiBuZXdPYmo7XG59XG5leHBvcnQgeyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js ***! + \*************************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: function() { return /* binding */ _tagged_template_literal_loose; },\n/* harmony export */ _tagged_template_literal_loose: function() { return /* binding */ _tagged_template_literal_loose; }\n/* harmony export */ });\nfunction _tagged_template_literal_loose(strings, raw) {\n if (!raw) raw = strings.slice(0);\n\n strings.raw = raw;\n\n return strings;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL190YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQTtBQUMrQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fdGFnZ2VkX3RlbXBsYXRlX2xpdGVyYWxfbG9vc2UuanM/NmMyNiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gX3RhZ2dlZF90ZW1wbGF0ZV9saXRlcmFsX2xvb3NlKHN0cmluZ3MsIHJhdykge1xuICAgIGlmICghcmF3KSByYXcgPSBzdHJpbmdzLnNsaWNlKDApO1xuXG4gICAgc3RyaW5ncy5yYXcgPSByYXc7XG5cbiAgICByZXR1cm4gc3RyaW5ncztcbn1cbmV4cG9ydCB7IF90YWdnZWRfdGVtcGxhdGVfbGl0ZXJhbF9sb29zZSBhcyBfIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js\n")); + +/***/ }) + +}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } +/******/ var __webpack_exports__ = (__webpack_exec__("(app-pages-browser)/./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"), __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/client/app-next-dev.js")); +/******/ _N_E = __webpack_exports__; +/******/ } +]); \ No newline at end of file diff --git a/frontend/.next/static/chunks/main.js b/frontend/.next/static/chunks/main.js new file mode 100644 index 000000000..fd07da6da --- /dev/null +++ b/frontend/.next/static/chunks/main.js @@ -0,0 +1,1362 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["main"],{ + +/***/ "./node_modules/next/dist/build/deployment-id.js": +/*!*******************************************************!*\ + !*** ./node_modules/next/dist/build/deployment-id.js ***! + \*******************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getDeploymentIdQueryOrEmptyString\", ({\n enumerable: true,\n get: function() {\n return getDeploymentIdQueryOrEmptyString;\n }\n}));\nfunction getDeploymentIdQueryOrEmptyString() {\n if (false) {}\n return \"\";\n}\n\n//# sourceMappingURL=deployment-id.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL2RlcGxveW1lbnQtaWQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixxRUFBb0U7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBLFFBQVEsS0FBOEIsRUFBRSxFQUVuQztBQUNMO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC9kZXBsb3ltZW50LWlkLmpzP2FhZDgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmdcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZztcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZygpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgICAgIHJldHVybiBgP2RwbD0ke3Byb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRH1gO1xuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVwbG95bWVudC1pZC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/deployment-id.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/build/polyfills/polyfill-module.js": +/*!*******************************************************************!*\ + !*** ./node_modules/next/dist/build/polyfills/polyfill-module.js ***! + \*******************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("\"trimStart\"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),\"trimEnd\"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),\"description\"in Symbol.prototype||Object.defineProperty(Symbol.prototype,\"description\",{configurable:!0,get:function(){var t=/\\((.*)\\)/.exec(this.toString());return t?t[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(t,r){return r=this.concat.apply([],this),t>1&&r.some(Array.isArray)?r.flat(t-1):r},Array.prototype.flatMap=function(t,r){return this.map(t,r).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(t){if(\"function\"!=typeof t)return this.then(t,t);var r=this.constructor||Promise;return this.then(function(n){return r.resolve(t()).then(function(){return n})},function(n){return r.resolve(t()).then(function(){throw n})})}),Object.fromEntries||(Object.fromEntries=function(t){return Array.from(t).reduce(function(t,r){return t[r[0]]=r[1],t},{})}),Array.prototype.at||(Array.prototype.at=function(t){var r=Math.trunc(t)||0;if(r<0&&(r+=this.length),!(r<0||r>=this.length))return this[r]});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3BvbHlmaWxscy9wb2x5ZmlsbC1tb2R1bGUuanMiLCJtYXBwaW5ncyI6IkFBQUEsbVFBQW1RLCtCQUErQix1Q0FBdUMsc0JBQXNCLDREQUE0RCw2RUFBNkUsdUNBQXVDLDRCQUE0QixvRUFBb0UsOENBQThDLGdDQUFnQyw2QkFBNkIsc0NBQXNDLFNBQVMsRUFBRSxhQUFhLHNDQUFzQyxRQUFRLEVBQUUsRUFBRSxzREFBc0QsMENBQTBDLHNCQUFzQixHQUFHLEVBQUUsc0RBQXNELHVCQUF1QiwrREFBK0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC9wb2x5ZmlsbHMvcG9seWZpbGwtbW9kdWxlLmpzPzY5YzgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ0cmltU3RhcnRcImluIFN0cmluZy5wcm90b3R5cGV8fChTdHJpbmcucHJvdG90eXBlLnRyaW1TdGFydD1TdHJpbmcucHJvdG90eXBlLnRyaW1MZWZ0KSxcInRyaW1FbmRcImluIFN0cmluZy5wcm90b3R5cGV8fChTdHJpbmcucHJvdG90eXBlLnRyaW1FbmQ9U3RyaW5nLnByb3RvdHlwZS50cmltUmlnaHQpLFwiZGVzY3JpcHRpb25cImluIFN5bWJvbC5wcm90b3R5cGV8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTeW1ib2wucHJvdG90eXBlLFwiZGVzY3JpcHRpb25cIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PS9cXCgoLiopXFwpLy5leGVjKHRoaXMudG9TdHJpbmcoKSk7cmV0dXJuIHQ/dFsxXTp2b2lkIDB9fSksQXJyYXkucHJvdG90eXBlLmZsYXR8fChBcnJheS5wcm90b3R5cGUuZmxhdD1mdW5jdGlvbih0LHIpe3JldHVybiByPXRoaXMuY29uY2F0LmFwcGx5KFtdLHRoaXMpLHQ+MSYmci5zb21lKEFycmF5LmlzQXJyYXkpP3IuZmxhdCh0LTEpOnJ9LEFycmF5LnByb3RvdHlwZS5mbGF0TWFwPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMubWFwKHQscikuZmxhdCgpfSksUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseXx8KFByb21pc2UucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdClyZXR1cm4gdGhpcy50aGVuKHQsdCk7dmFyIHI9dGhpcy5jb25zdHJ1Y3Rvcnx8UHJvbWlzZTtyZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiByLnJlc29sdmUodCgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24obil7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oZnVuY3Rpb24oKXt0aHJvdyBufSl9KX0pLE9iamVjdC5mcm9tRW50cmllc3x8KE9iamVjdC5mcm9tRW50cmllcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuZnJvbSh0KS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gdFtyWzBdXT1yWzFdLHR9LHt9KX0pLEFycmF5LnByb3RvdHlwZS5hdHx8KEFycmF5LnByb3RvdHlwZS5hdD1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLnRydW5jKHQpfHwwO2lmKHI8MCYmKHIrPXRoaXMubGVuZ3RoKSwhKHI8MHx8cj49dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzW3JdfSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/polyfills/polyfill-module.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/@next/react-dev-overlay/dist/client.js": +/*!********************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/@next/react-dev-overlay/dist/client.js ***! + \********************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){\"use strict\";var e={3540:function(e){\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\nvar t=Object.getOwnPropertySymbols;var r=Object.prototype.hasOwnProperty;var n=Object.prototype.propertyIsEnumerable;function toObject(e){if(e===null||e===undefined){throw new TypeError(\"Object.assign cannot be called with null or undefined\")}return Object(e)}function shouldUseNative(){try{if(!Object.assign){return false}var e=new String(\"abc\");e[5]=\"de\";if(Object.getOwnPropertyNames(e)[0]===\"5\"){return false}var t={};for(var r=0;r<10;r++){t[\"_\"+String.fromCharCode(r)]=r}var n=Object.getOwnPropertyNames(t).map((function(e){return t[e]}));if(n.join(\"\")!==\"0123456789\"){return false}var o={};\"abcdefghijklmnopqrst\".split(\"\").forEach((function(e){o[e]=e}));if(Object.keys(Object.assign({},o)).join(\"\")!==\"abcdefghijklmnopqrst\"){return false}return true}catch(e){return false}}e.exports=shouldUseNative()?Object.assign:function(e,o){var a;var i=toObject(e);var s;for(var l=1;l<arguments.length;l++){a=Object(arguments[l]);for(var u in a){if(r.call(a,u)){i[u]=a[u]}}if(t){s=t(a);for(var c=0;c<s.length;c++){if(n.call(a,s[c])){i[s[c]]=a[s[c]]}}}}return i}},3037:function(e,t,r){\n/** @license React v17.0.2\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nif(true){(function(){\"use strict\";var e=r(7522);var n=r(3540);var o=60103;var a=60106;t.Fragment=60107;var i=60108;var s=60114;var l=60109;var u=60110;var c=60112;var d=60113;var f=60120;var p=60115;var m=60116;var v=60121;var b=60122;var g=60117;var h=60119;var y=60128;var x=60129;var _=60130;var w=60131;if(typeof Symbol===\"function\"&&Symbol.for){var E=Symbol.for;o=E(\"react.element\");a=E(\"react.portal\");t.Fragment=E(\"react.fragment\");i=E(\"react.strict_mode\");s=E(\"react.profiler\");l=E(\"react.provider\");u=E(\"react.context\");c=E(\"react.forward_ref\");d=E(\"react.suspense\");f=E(\"react.suspense_list\");p=E(\"react.memo\");m=E(\"react.lazy\");v=E(\"react.block\");b=E(\"react.server.block\");g=E(\"react.fundamental\");h=E(\"react.scope\");y=E(\"react.opaque.id\");x=E(\"react.debug_trace_mode\");_=E(\"react.offscreen\");w=E(\"react.legacy_hidden\")}var j=typeof Symbol===\"function\"&&Symbol.iterator;var O=\"@@iterator\";function getIteratorFn(e){if(e===null||typeof e!==\"object\"){return null}var t=j&&e[j]||e[O];if(typeof t===\"function\"){return t}return null}var k=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function error(e){{for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++){r[n-1]=arguments[n]}printWarning(\"error\",e,r)}}function printWarning(e,t,r){{var n=k.ReactDebugCurrentFrame;var o=n.getStackAddendum();if(o!==\"\"){t+=\"%s\";r=r.concat([o])}var a=r.map((function(e){return\"\"+e}));a.unshift(\"Warning: \"+t);Function.prototype.apply.call(console[e],console,a)}}var S=false;function isValidElementType(e){if(typeof e===\"string\"||typeof e===\"function\"){return true}if(e===t.Fragment||e===s||e===x||e===i||e===d||e===f||e===w||S){return true}if(typeof e===\"object\"&&e!==null){if(e.$$typeof===m||e.$$typeof===p||e.$$typeof===l||e.$$typeof===u||e.$$typeof===c||e.$$typeof===g||e.$$typeof===v||e[0]===b){return true}}return false}function getWrappedName(e,t,r){var n=t.displayName||t.name||\"\";return e.displayName||(n!==\"\"?r+\"(\"+n+\")\":r)}function getContextName(e){return e.displayName||\"Context\"}function getComponentName(e){if(e==null){return null}{if(typeof e.tag===\"number\"){error(\"Received an unexpected object in getComponentName(). \"+\"This is likely a bug in React. Please file an issue.\")}}if(typeof e===\"function\"){return e.displayName||e.name||null}if(typeof e===\"string\"){return e}switch(e){case t.Fragment:return\"Fragment\";case a:return\"Portal\";case s:return\"Profiler\";case i:return\"StrictMode\";case d:return\"Suspense\";case f:return\"SuspenseList\"}if(typeof e===\"object\"){switch(e.$$typeof){case u:var r=e;return getContextName(r)+\".Consumer\";case l:var n=e;return getContextName(n._context)+\".Provider\";case c:return getWrappedName(e,e.render,\"ForwardRef\");case p:return getComponentName(e.type);case v:return getComponentName(e._render);case m:{var o=e;var b=o._payload;var g=o._init;try{return getComponentName(g(b))}catch(e){return null}}}}return null}var C=0;var T;var D;var P;var N;var R;var F;var I;function disabledLog(){}disabledLog.__reactDisabledLog=true;function disableLogs(){{if(C===0){T=console.log;D=console.info;P=console.warn;N=console.error;R=console.group;F=console.groupCollapsed;I=console.groupEnd;var e={configurable:true,enumerable:true,value:disabledLog,writable:true};Object.defineProperties(console,{info:e,log:e,warn:e,error:e,group:e,groupCollapsed:e,groupEnd:e})}C++}}function reenableLogs(){{C--;if(C===0){var e={configurable:true,enumerable:true,writable:true};Object.defineProperties(console,{log:n({},e,{value:T}),info:n({},e,{value:D}),warn:n({},e,{value:P}),error:n({},e,{value:N}),group:n({},e,{value:R}),groupCollapsed:n({},e,{value:F}),groupEnd:n({},e,{value:I})})}if(C<0){error(\"disabledDepth fell below zero. \"+\"This is a bug in React. Please file an issue.\")}}}var A=k.ReactCurrentDispatcher;var M;function describeBuiltInComponentFrame(e,t,r){{if(M===undefined){try{throw Error()}catch(e){var n=e.stack.trim().match(/\\n( *(at )?)/);M=n&&n[1]||\"\"}}return\"\\n\"+M+e}}var L=false;var B;{var H=typeof WeakMap===\"function\"?WeakMap:Map;B=new H}function describeNativeComponentFrame(e,t){if(!e||L){return\"\"}{var r=B.get(e);if(r!==undefined){return r}}var n;L=true;var o=Error.prepareStackTrace;Error.prepareStackTrace=undefined;var a;{a=A.current;A.current=null;disableLogs()}try{if(t){var Fake=function(){throw Error()};Object.defineProperty(Fake.prototype,\"props\",{set:function(){throw Error()}});if(typeof Reflect===\"object\"&&Reflect.construct){try{Reflect.construct(Fake,[])}catch(e){n=e}Reflect.construct(e,[],Fake)}else{try{Fake.call()}catch(e){n=e}e.call(Fake.prototype)}}else{try{throw Error()}catch(e){n=e}e()}}catch(t){if(t&&n&&typeof t.stack===\"string\"){var i=t.stack.split(\"\\n\");var s=n.stack.split(\"\\n\");var l=i.length-1;var u=s.length-1;while(l>=1&&u>=0&&i[l]!==s[u]){u--}for(;l>=1&&u>=0;l--,u--){if(i[l]!==s[u]){if(l!==1||u!==1){do{l--;u--;if(u<0||i[l]!==s[u]){var c=\"\\n\"+i[l].replace(\" at new \",\" at \");{if(typeof e===\"function\"){B.set(e,c)}}return c}}while(l>=1&&u>=0)}break}}}}finally{L=false;{A.current=a;reenableLogs()}Error.prepareStackTrace=o}var d=e?e.displayName||e.name:\"\";var f=d?describeBuiltInComponentFrame(d):\"\";{if(typeof e===\"function\"){B.set(e,f)}}return f}function describeFunctionComponentFrame(e,t,r){{return describeNativeComponentFrame(e,false)}}function shouldConstruct(e){var t=e.prototype;return!!(t&&t.isReactComponent)}function describeUnknownElementTypeFrameInDEV(e,t,r){if(e==null){return\"\"}if(typeof e===\"function\"){{return describeNativeComponentFrame(e,shouldConstruct(e))}}if(typeof e===\"string\"){return describeBuiltInComponentFrame(e)}switch(e){case d:return describeBuiltInComponentFrame(\"Suspense\");case f:return describeBuiltInComponentFrame(\"SuspenseList\")}if(typeof e===\"object\"){switch(e.$$typeof){case c:return describeFunctionComponentFrame(e.render);case p:return describeUnknownElementTypeFrameInDEV(e.type,t,r);case v:return describeFunctionComponentFrame(e._render);case m:{var n=e;var o=n._payload;var a=n._init;try{return describeUnknownElementTypeFrameInDEV(a(o),t,r)}catch(e){}}}}return\"\"}var z={};var W=k.ReactDebugCurrentFrame;function setCurrentlyValidatingElement(e){{if(e){var t=e._owner;var r=describeUnknownElementTypeFrameInDEV(e.type,e._source,t?t.type:null);W.setExtraStackFrame(r)}else{W.setExtraStackFrame(null)}}}function checkPropTypes(e,t,r,n,o){{var a=Function.call.bind(Object.prototype.hasOwnProperty);for(var i in e){if(a(e,i)){var s=void 0;try{if(typeof e[i]!==\"function\"){var l=Error((n||\"React class\")+\": \"+r+\" type `\"+i+\"` is invalid; \"+\"it must be a function, usually from the `prop-types` package, but received `\"+typeof e[i]+\"`.\"+\"This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.\");l.name=\"Invariant Violation\";throw l}s=e[i](t,i,n,r,null,\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\")}catch(e){s=e}if(s&&!(s instanceof Error)){setCurrentlyValidatingElement(o);error(\"%s: type specification of %s\"+\" `%s` is invalid; the type checker \"+\"function must return `null` or an `Error` but returned a %s. \"+\"You may have forgotten to pass an argument to the type checker \"+\"creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and \"+\"shape all require an argument).\",n||\"React class\",r,i,typeof s);setCurrentlyValidatingElement(null)}if(s instanceof Error&&!(s.message in z)){z[s.message]=true;setCurrentlyValidatingElement(o);error(\"Failed %s type: %s\",r,s.message);setCurrentlyValidatingElement(null)}}}}}var V=k.ReactCurrentOwner;var $=Object.prototype.hasOwnProperty;var U={key:true,ref:true,__self:true,__source:true};var K;var G;var Z;{Z={}}function hasValidRef(e){{if($.call(e,\"ref\")){var t=Object.getOwnPropertyDescriptor(e,\"ref\").get;if(t&&t.isReactWarning){return false}}}return e.ref!==undefined}function hasValidKey(e){{if($.call(e,\"key\")){var t=Object.getOwnPropertyDescriptor(e,\"key\").get;if(t&&t.isReactWarning){return false}}}return e.key!==undefined}function warnIfStringRefCannotBeAutoConverted(e,t){{if(typeof e.ref===\"string\"&&V.current&&t&&V.current.stateNode!==t){var r=getComponentName(V.current.type);if(!Z[r]){error('Component \"%s\" contains the string ref \"%s\". '+\"Support for string refs will be removed in a future major release. \"+\"This case cannot be automatically converted to an arrow function. \"+\"We ask you to manually fix this case by using useRef() or createRef() instead. \"+\"Learn more about using refs safely here: \"+\"https://reactjs.org/link/strict-mode-string-ref\",getComponentName(V.current.type),e.ref);Z[r]=true}}}}function defineKeyPropWarningGetter(e,t){{var warnAboutAccessingKey=function(){if(!K){K=true;error(\"%s: `key` is not a prop. Trying to access it will result \"+\"in `undefined` being returned. If you need to access the same \"+\"value within the child component, you should pass it as a different \"+\"prop. (https://reactjs.org/link/special-props)\",t)}};warnAboutAccessingKey.isReactWarning=true;Object.defineProperty(e,\"key\",{get:warnAboutAccessingKey,configurable:true})}}function defineRefPropWarningGetter(e,t){{var warnAboutAccessingRef=function(){if(!G){G=true;error(\"%s: `ref` is not a prop. Trying to access it will result \"+\"in `undefined` being returned. If you need to access the same \"+\"value within the child component, you should pass it as a different \"+\"prop. (https://reactjs.org/link/special-props)\",t)}};warnAboutAccessingRef.isReactWarning=true;Object.defineProperty(e,\"ref\",{get:warnAboutAccessingRef,configurable:true})}}var ReactElement=function(e,t,r,n,a,i,s){var l={$$typeof:o,type:e,key:t,ref:r,props:s,_owner:i};{l._store={};Object.defineProperty(l._store,\"validated\",{configurable:false,enumerable:false,writable:true,value:false});Object.defineProperty(l,\"_self\",{configurable:false,enumerable:false,writable:false,value:n});Object.defineProperty(l,\"_source\",{configurable:false,enumerable:false,writable:false,value:a});if(Object.freeze){Object.freeze(l.props);Object.freeze(l)}}return l};function jsxDEV(e,t,r,n,o){{var a;var i={};var s=null;var l=null;if(r!==undefined){s=\"\"+r}if(hasValidKey(t)){s=\"\"+t.key}if(hasValidRef(t)){l=t.ref;warnIfStringRefCannotBeAutoConverted(t,o)}for(a in t){if($.call(t,a)&&!U.hasOwnProperty(a)){i[a]=t[a]}}if(e&&e.defaultProps){var u=e.defaultProps;for(a in u){if(i[a]===undefined){i[a]=u[a]}}}if(s||l){var c=typeof e===\"function\"?e.displayName||e.name||\"Unknown\":e;if(s){defineKeyPropWarningGetter(i,c)}if(l){defineRefPropWarningGetter(i,c)}}return ReactElement(e,s,l,o,n,V.current,i)}}var Y=k.ReactCurrentOwner;var J=k.ReactDebugCurrentFrame;function setCurrentlyValidatingElement$1(e){{if(e){var t=e._owner;var r=describeUnknownElementTypeFrameInDEV(e.type,e._source,t?t.type:null);J.setExtraStackFrame(r)}else{J.setExtraStackFrame(null)}}}var X;{X=false}function isValidElement(e){{return typeof e===\"object\"&&e!==null&&e.$$typeof===o}}function getDeclarationErrorAddendum(){{if(Y.current){var e=getComponentName(Y.current.type);if(e){return\"\\n\\nCheck the render method of `\"+e+\"`.\"}}return\"\"}}function getSourceInfoErrorAddendum(e){{if(e!==undefined){var t=e.fileName.replace(/^.*[\\\\\\/]/,\"\");var r=e.lineNumber;return\"\\n\\nCheck your code at \"+t+\":\"+r+\".\"}return\"\"}}var Q={};function getCurrentComponentErrorInfo(e){{var t=getDeclarationErrorAddendum();if(!t){var r=typeof e===\"string\"?e:e.displayName||e.name;if(r){t=\"\\n\\nCheck the top-level render call using <\"+r+\">.\"}}return t}}function validateExplicitKey(e,t){{if(!e._store||e._store.validated||e.key!=null){return}e._store.validated=true;var r=getCurrentComponentErrorInfo(t);if(Q[r]){return}Q[r]=true;var n=\"\";if(e&&e._owner&&e._owner!==Y.current){n=\" It was passed a child from \"+getComponentName(e._owner.type)+\".\"}setCurrentlyValidatingElement$1(e);error('Each child in a list should have a unique \"key\" prop.'+\"%s%s See https://reactjs.org/link/warning-keys for more information.\",r,n);setCurrentlyValidatingElement$1(null)}}function validateChildKeys(e,t){{if(typeof e!==\"object\"){return}if(Array.isArray(e)){for(var r=0;r<e.length;r++){var n=e[r];if(isValidElement(n)){validateExplicitKey(n,t)}}}else if(isValidElement(e)){if(e._store){e._store.validated=true}}else if(e){var o=getIteratorFn(e);if(typeof o===\"function\"){if(o!==e.entries){var a=o.call(e);var i;while(!(i=a.next()).done){if(isValidElement(i.value)){validateExplicitKey(i.value,t)}}}}}}}function validatePropTypes(e){{var t=e.type;if(t===null||t===undefined||typeof t===\"string\"){return}var r;if(typeof t===\"function\"){r=t.propTypes}else if(typeof t===\"object\"&&(t.$$typeof===c||t.$$typeof===p)){r=t.propTypes}else{return}if(r){var n=getComponentName(t);checkPropTypes(r,e.props,\"prop\",n,e)}else if(t.PropTypes!==undefined&&!X){X=true;var o=getComponentName(t);error(\"Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?\",o||\"Unknown\")}if(typeof t.getDefaultProps===\"function\"&&!t.getDefaultProps.isReactClassApproved){error(\"getDefaultProps is only used on classic React.createClass \"+\"definitions. Use a static property named `defaultProps` instead.\")}}}function validateFragmentProps(e){{var t=Object.keys(e.props);for(var r=0;r<t.length;r++){var n=t[r];if(n!==\"children\"&&n!==\"key\"){setCurrentlyValidatingElement$1(e);error(\"Invalid prop `%s` supplied to `React.Fragment`. \"+\"React.Fragment can only have `key` and `children` props.\",n);setCurrentlyValidatingElement$1(null);break}}if(e.ref!==null){setCurrentlyValidatingElement$1(e);error(\"Invalid attribute `ref` supplied to `React.Fragment`.\");setCurrentlyValidatingElement$1(null)}}}function jsxWithValidation(e,r,n,a,i,s){{var l=isValidElementType(e);if(!l){var u=\"\";if(e===undefined||typeof e===\"object\"&&e!==null&&Object.keys(e).length===0){u+=\" You likely forgot to export your component from the file \"+\"it's defined in, or you might have mixed up default and named imports.\"}var c=getSourceInfoErrorAddendum(i);if(c){u+=c}else{u+=getDeclarationErrorAddendum()}var d;if(e===null){d=\"null\"}else if(Array.isArray(e)){d=\"array\"}else if(e!==undefined&&e.$$typeof===o){d=\"<\"+(getComponentName(e.type)||\"Unknown\")+\" />\";u=\" Did you accidentally export a JSX literal instead of a component?\"}else{d=typeof e}error(\"React.jsx: type is invalid -- expected a string (for \"+\"built-in components) or a class/function (for composite \"+\"components) but got: %s.%s\",d,u)}var f=jsxDEV(e,r,n,i,s);if(f==null){return f}if(l){var p=r.children;if(p!==undefined){if(a){if(Array.isArray(p)){for(var m=0;m<p.length;m++){validateChildKeys(p[m],e)}if(Object.freeze){Object.freeze(p)}}else{error(\"React.jsx: Static children should always be an array. \"+\"You are likely explicitly calling React.jsxs or React.jsxDEV. \"+\"Use the Babel transform instead.\")}}else{validateChildKeys(p,e)}}}if(e===t.Fragment){validateFragmentProps(f)}else{validatePropTypes(f)}return f}}function jsxWithValidationStatic(e,t,r){{return jsxWithValidation(e,t,r,true)}}function jsxWithValidationDynamic(e,t,r){{return jsxWithValidation(e,t,r,false)}}var ee=jsxWithValidationDynamic;var te=jsxWithValidationStatic;t.jsx=ee;t.jsxs=te})()}},1080:function(e,t,r){\n/** @license React v17.0.2\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nr(3540);var n=r(7522),o=60103;t.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var a=Symbol.for;o=a(\"react.element\");t.Fragment=a(\"react.fragment\")}var i=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s=Object.prototype.hasOwnProperty,l={key:!0,ref:!0,__self:!0,__source:!0};function q(e,t,r){var n,a={},u=null,c=null;void 0!==r&&(u=\"\"+r);void 0!==t.key&&(u=\"\"+t.key);void 0!==t.ref&&(c=t.ref);for(n in t)s.call(t,n)&&!l.hasOwnProperty(n)&&(a[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps,t)void 0===a[n]&&(a[n]=t[n]);return{$$typeof:o,type:e,key:u,ref:c,props:a,_owner:i.current}}t.jsx=q;t.jsxs=q},505:function(e,t,r){if(false){}else{e.exports=r(3037)}},3876:function(e,t){Object.defineProperty(t,\"__esModule\",{value:true});0&&0;function _export(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:true,get:t[r]})}_export(t,{hydrationErrorWarning:function(){return r},hydrationErrorComponentStack:function(){return n},patchConsoleError:function(){return patchConsoleError}});let r;let n;const o=new Set(['Warning: Text content did not match. Server: \"%s\" Client: \"%s\"%s',\"Warning: Expected server HTML to contain a matching <%s> in <%s>.%s\",'Warning: Expected server HTML to contain a matching text node for \"%s\" in <%s>.%s',\"Warning: Did not expect server HTML to contain a <%s> in <%s>.%s\",'Warning: Did not expect server HTML to contain the text node \"%s\" in <%s>.%s']);function patchConsoleError(){const e=console.error;console.error=function(t,a,i,s){if(o.has(t)){r=t.replace(\"%s\",a).replace(\"%s\",i).replace(\"%s\",\"\");n=s}e.apply(console,arguments)}}if((typeof t.default===\"function\"||typeof t.default===\"object\"&&t.default!==null)&&typeof t.default.__esModule===\"undefined\"){Object.defineProperty(t.default,\"__esModule\",{value:true});Object.assign(t.default,t);e.exports=t.default}},4659:function(e,t){Object.defineProperty(t,\"__esModule\",{value:true});Object.defineProperty(t,\"parseComponentStack\",{enumerable:true,get:function(){return parseComponentStack}});var r;(function(e){e[\"FILE\"]=\"file\";e[\"WEBPACK_INTERNAL\"]=\"webpack-internal\";e[\"HTTP\"]=\"http\";e[\"PROTOCOL_RELATIVE\"]=\"protocol-relative\";e[\"UNKNOWN\"]=\"unknown\"})(r||(r={}));function getLocationType(e){if(e.startsWith(\"file://\")){return\"file\"}if(e.startsWith(\"webpack-internal://\")){return\"webpack-internal\"}if(e.startsWith(\"http://\")||e.startsWith(\"https://\")){return\"http\"}if(e.startsWith(\"//\")){return\"protocol-relative\"}return\"unknown\"}function parseStackFrameLocation(e){const t=getLocationType(e);const r=e==null?void 0:e.replace(/^(webpack-internal:\\/\\/\\/|file:\\/\\/)(\\(.*\\)\\/)?/,\"\");var n;const[,o,a,i]=(n=r==null?void 0:r.match(/^(.+):(\\d+):(\\d+)/))!=null?n:[];switch(t){case\"file\":case\"webpack-internal\":return{canOpenInEditor:true,file:o,lineNumber:a?Number(a):undefined,column:i?Number(i):undefined};case\"http\":case\"protocol-relative\":case\"unknown\":default:{return{canOpenInEditor:false}}}}function parseComponentStack(e){const t=[];for(const r of e.trim().split(\"\\n\")){const e=/at ([^ ]+)( \\((.*)\\))?/.exec(r);if(e==null?void 0:e[1]){const r=e[1];const n=e[3];if(!n){t.push({canOpenInEditor:false,component:r});continue}if(n==null?void 0:n.includes(\"next/dist\")){break}const o=parseStackFrameLocation(n);t.push({component:r,...o})}}return t}if((typeof t.default===\"function\"||typeof t.default===\"object\"&&t.default!==null)&&typeof t.default.__esModule===\"undefined\"){Object.defineProperty(t.default,\"__esModule\",{value:true});Object.assign(t.default,t);e.exports=t.default}},5204:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:true});t.onRefresh=t.onBeforeRefresh=t.unregister=t.register=t.onBuildError=t.onBuildOk=t.ReactDevOverlay=t.getServerError=t.getErrorByType=void 0;const s=a(r(5851));const l=r(636);const u=r(4659);const c=r(3876);(0,c.patchConsoleError)();let d=false;let f=undefined;function onUnhandledError(e){const t=e?.error;if(!t||!(t instanceof Error)||typeof t.stack!==\"string\"){return}if(t.message.match(/(hydration|content does not match|did not match)/i)){if(c.hydrationErrorWarning){t.message+=\"\\n\\n\"+c.hydrationErrorWarning}t.message+=`\\n\\nSee more info here: https://nextjs.org/docs/messages/react-hydration-error`}const r=t;const n=typeof c.hydrationErrorComponentStack===\"string\"?(0,u.parseComponentStack)(c.hydrationErrorComponentStack).map((e=>e.component)):undefined;s.emit({type:s.TYPE_UNHANDLED_ERROR,reason:t,frames:(0,l.parseStack)(r.stack),componentStack:n})}function onUnhandledRejection(e){const t=e?.reason;if(!t||!(t instanceof Error)||typeof t.stack!==\"string\"){return}const r=t;s.emit({type:s.TYPE_UNHANDLED_REJECTION,reason:t,frames:(0,l.parseStack)(r.stack)})}function register(){if(d){return}d=true;try{const e=Error.stackTraceLimit;Error.stackTraceLimit=50;f=e}catch{}window.addEventListener(\"error\",onUnhandledError);window.addEventListener(\"unhandledrejection\",onUnhandledRejection)}t.register=register;function unregister(){if(!d){return}d=false;if(f!==undefined){try{Error.stackTraceLimit=f}catch{}f=undefined}window.removeEventListener(\"error\",onUnhandledError);window.removeEventListener(\"unhandledrejection\",onUnhandledRejection)}t.unregister=unregister;function onBuildOk(){s.emit({type:s.TYPE_BUILD_OK})}t.onBuildOk=onBuildOk;function onBuildError(e){s.emit({type:s.TYPE_BUILD_ERROR,message:e})}t.onBuildError=onBuildError;function onRefresh(){s.emit({type:s.TYPE_REFRESH})}t.onRefresh=onRefresh;function onBeforeRefresh(){s.emit({type:s.TYPE_BEFORE_REFRESH})}t.onBeforeRefresh=onBeforeRefresh;var p=r(403);Object.defineProperty(t,\"getErrorByType\",{enumerable:true,get:function(){return p.getErrorByType}});var m=r(5233);Object.defineProperty(t,\"getServerError\",{enumerable:true,get:function(){return m.getServerError}});var v=r(5222);Object.defineProperty(t,\"ReactDevOverlay\",{enumerable:true,get:function(){return i(v).default}})},7790:function(e,t,r){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:true});t.ErrorBoundary=void 0;const o=r(505);const a=n(r(7522));class ErrorBoundary extends a.default.PureComponent{constructor(){super(...arguments);this.state={error:null}}static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){this.props.onError(e,t?.componentStack||null);if(!this.props.globalOverlay){this.setState({error:e})}}render(){return this.state.error||this.props.globalOverlay&&this.props.isMounted?this.props.globalOverlay?(0,o.jsxs)(\"html\",{children:[(0,o.jsx)(\"head\",{}),(0,o.jsx)(\"body\",{})]}):null:this.props.children}}t.ErrorBoundary=ErrorBoundary},5222:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,\"__esModule\",{value:true});const i=r(505);const s=a(r(7522));const l=a(r(5851));const u=r(6338);const c=r(5936);const d=r(4355);const f=r(7790);const p=r(884);const m=r(4464);const v=r(9495);function pushErrorFilterDuplicates(e,t){return[...e.filter((e=>e.event.reason!==t.event.reason)),t]}function reducer(e,t){switch(t.type){case l.TYPE_BUILD_OK:{return{...e,buildError:null}}case l.TYPE_BUILD_ERROR:{return{...e,buildError:t.message}}case l.TYPE_BEFORE_REFRESH:{return{...e,refreshState:{type:\"pending\",errors:[]}}}case l.TYPE_REFRESH:{return{...e,buildError:null,errors:e.refreshState.type===\"pending\"?e.refreshState.errors:[],refreshState:{type:\"idle\"}}}case l.TYPE_UNHANDLED_ERROR:case l.TYPE_UNHANDLED_REJECTION:{switch(e.refreshState.type){case\"idle\":{return{...e,nextId:e.nextId+1,errors:pushErrorFilterDuplicates(e.errors,{id:e.nextId,event:t})}}case\"pending\":{return{...e,nextId:e.nextId+1,refreshState:{...e.refreshState,errors:pushErrorFilterDuplicates(e.refreshState.errors,{id:e.nextId,event:t})}}}default:const r=e.refreshState;return e}}default:{const r=t;return e}}}const shouldPreventDisplay=(e,t)=>{if(!t||!e){return false}return t.includes(e)};const b=function ReactDevOverlay({children:e,preventDisplay:t,globalOverlay:r}){const[n,o]=s.useReducer(reducer,{nextId:1,buildError:null,errors:[],refreshState:{type:\"idle\"}});s.useEffect((()=>{l.on(o);return function(){l.off(o)}}),[o]);const a=s.useCallback(((e,t)=>{}),[]);const b=n.buildError!=null;const g=Boolean(n.errors.length);const h=b?\"build\":g?\"runtime\":null;const y=h!==null;return(0,i.jsxs)(s.Fragment,{children:[(0,i.jsx)(f.ErrorBoundary,{globalOverlay:r,isMounted:y,onError:a,children:e??null}),y?(0,i.jsxs)(u.ShadowPortal,{globalOverlay:r,children:[(0,i.jsx)(v.CssReset,{}),(0,i.jsx)(p.Base,{}),(0,i.jsx)(m.ComponentStyles,{}),shouldPreventDisplay(h,t)?null:b?(0,i.jsx)(c.BuildError,{message:n.buildError}):g?(0,i.jsx)(d.Errors,{errors:n.errors}):undefined]}):undefined]})};t[\"default\"]=b},5851:function(e,t){Object.defineProperty(t,\"__esModule\",{value:true});t.off=t.on=t.emit=t.TYPE_UNHANDLED_REJECTION=t.TYPE_UNHANDLED_ERROR=t.TYPE_BEFORE_REFRESH=t.TYPE_REFRESH=t.TYPE_BUILD_ERROR=t.TYPE_BUILD_OK=void 0;t.TYPE_BUILD_OK=\"build-ok\";t.TYPE_BUILD_ERROR=\"build-error\";t.TYPE_REFRESH=\"fast-refresh\";t.TYPE_BEFORE_REFRESH=\"before-fast-refresh\";t.TYPE_UNHANDLED_ERROR=\"unhandled-error\";t.TYPE_UNHANDLED_REJECTION=\"unhandled-rejection\";let r=new Set;let n=[];function drain(){setTimeout((function(){while(Boolean(n.length)&&Boolean(r.size)){const e=n.shift();r.forEach((t=>t(e)))}}),1)}function emit(e){n.push(Object.freeze({...e}));drain()}t.emit=emit;function on(e){if(r.has(e)){return false}r.add(e);drain();return true}t.on=on;function off(e){if(r.has(e)){r.delete(e);return true}return false}t.off=off},1987:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:true});t.CodeFrame=void 0;const s=r(505);const l=i(r(7997));const u=a(r(7522));const c=i(r(7518));const d=r(7504);const f=function CodeFrame({stackFrame:e,codeFrame:t}){const r=u.useMemo((()=>{const e=t.split(/\\r?\\n/g);const r=e.map((e=>/^>? +\\d+ +\\| [ ]+/.exec((0,c.default)(e))===null?null:/^>? +\\d+ +\\| ( *)/.exec((0,c.default)(e)))).filter(Boolean).map((e=>e.pop())).reduce(((e,t)=>isNaN(e)?t.length:Math.min(e,t.length)),NaN);if(r>1){const t=\" \".repeat(r);return e.map(((e,r)=>~(r=e.indexOf(\"|\"))?e.substring(0,r)+e.substring(r).replace(t,\"\"):e)).join(\"\\n\")}return e.join(\"\\n\")}),[t]);const n=u.useMemo((()=>l.default.ansiToJson(r,{json:true,use_classes:true,remove_empty:true})),[r]);const o=u.useCallback((()=>{const t=new URLSearchParams;for(const r in e){t.append(r,(e[r]??\"\").toString())}self.fetch(`${ false||\"\"}/__nextjs_launch-editor?${t.toString()}`).then((()=>{}),(()=>{console.error(\"There was an issue opening this code in your editor.\")}))}),[e]);return(0,s.jsxs)(\"div\",{\"data-nextjs-codeframe\":true,children:[(0,s.jsx)(\"div\",{children:(0,s.jsxs)(\"p\",{role:\"link\",onClick:o,tabIndex:1,title:\"Click to open in your editor\",children:[(0,s.jsxs)(\"span\",{children:[(0,d.getFrameSource)(e),\" @ \",e.methodName]}),(0,s.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[(0,s.jsx)(\"path\",{d:\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}),(0,s.jsx)(\"polyline\",{points:\"15 3 21 3 21 9\"}),(0,s.jsx)(\"line\",{x1:\"10\",y1:\"14\",x2:\"21\",y2:\"3\"})]})]})}),(0,s.jsx)(\"pre\",{children:n.map(((e,t)=>(0,s.jsx)(\"span\",{style:{color:e.fg?`var(--color-${e.fg})`:undefined,...e.decoration===\"bold\"?{fontWeight:800}:e.decoration===\"italic\"?{fontStyle:\"italic\"}:undefined},children:e.content},`frame-${t}`)))})]})};t.CodeFrame=f},1413:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.CodeFrame=void 0;var n=r(1987);Object.defineProperty(t,\"CodeFrame\",{enumerable:true,get:function(){return n.CodeFrame}})},399:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.styles=void 0;const n=r(8910);const o=(0,n.noop)`\n [data-nextjs-codeframe] {\n overflow: auto;\n border-radius: var(--size-gap-half);\n background-color: var(--color-ansi-bg);\n color: var(--color-ansi-fg);\n }\n [data-nextjs-codeframe]::selection,\n [data-nextjs-codeframe] *::selection {\n background-color: var(--color-ansi-selection);\n }\n [data-nextjs-codeframe] * {\n color: inherit;\n background-color: transparent;\n font-family: var(--font-stack-monospace);\n }\n\n [data-nextjs-codeframe] > * {\n margin: 0;\n padding: calc(var(--size-gap) + var(--size-gap-half))\n calc(var(--size-gap-double) + var(--size-gap-half));\n }\n [data-nextjs-codeframe] > div {\n display: inline-block;\n width: auto;\n min-width: 100%;\n border-bottom: 1px solid var(--color-ansi-bright-black);\n }\n [data-nextjs-codeframe] > div > p {\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n margin: 0;\n }\n [data-nextjs-codeframe] > div > p:hover {\n text-decoration: underline dotted;\n }\n [data-nextjs-codeframe] div > p > svg {\n width: auto;\n height: 1em;\n margin-left: 8px;\n }\n [data-nextjs-codeframe] div > pre {\n overflow: hidden;\n display: inline-block;\n }\n`;t.styles=o},1616:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,\"__esModule\",{value:true});t.Dialog=void 0;const i=r(505);const s=a(r(7522));const l=r(7169);const u=function Dialog({children:e,type:t,onClose:r,...n}){const[o,a]=s.useState(null);const[u,c]=s.useState(typeof document!==\"undefined\"&&document.hasFocus()?\"dialog\":undefined);const d=s.useCallback((e=>{a(e)}),[]);(0,l.useOnClickOutside)(o,r);s.useEffect((()=>{if(o==null){return}const e=o.getRootNode();if(!(e instanceof ShadowRoot)){return}const t=e;function handler(e){const r=t.activeElement;if(e.key===\"Enter\"&&r instanceof HTMLElement&&r.getAttribute(\"role\")===\"link\"){e.preventDefault();e.stopPropagation();r.click()}}function handleFocus(){c(document.hasFocus()?\"dialog\":undefined)}t.addEventListener(\"keydown\",handler);window.addEventListener(\"focus\",handleFocus);window.addEventListener(\"blur\",handleFocus);return()=>{t.removeEventListener(\"keydown\",handler);window.removeEventListener(\"focus\",handleFocus);window.removeEventListener(\"blur\",handleFocus)}}),[o]);return(0,i.jsxs)(\"div\",{ref:d,\"data-nextjs-dialog\":true,tabIndex:-1,role:u,\"aria-labelledby\":n[\"aria-labelledby\"],\"aria-describedby\":n[\"aria-describedby\"],\"aria-modal\":\"true\",children:[(0,i.jsx)(\"div\",{\"data-nextjs-dialog-banner\":true,className:`banner-${t}`}),e]})};t.Dialog=u},2011:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.DialogBody=void 0;const n=r(505);const o=function DialogBody({children:e,className:t}){return(0,n.jsx)(\"div\",{\"data-nextjs-dialog-body\":true,className:t,children:e})};t.DialogBody=o},8991:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.DialogContent=void 0;const n=r(505);const o=function DialogContent({children:e,className:t}){return(0,n.jsx)(\"div\",{\"data-nextjs-dialog-content\":true,className:t,children:e})};t.DialogContent=o},342:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.DialogHeader=void 0;const n=r(505);const o=function DialogHeader({children:e,className:t}){return(0,n.jsx)(\"div\",{\"data-nextjs-dialog-header\":true,className:t,children:e})};t.DialogHeader=o},5651:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.styles=t.DialogHeader=t.DialogContent=t.DialogBody=t.Dialog=void 0;var n=r(1616);Object.defineProperty(t,\"Dialog\",{enumerable:true,get:function(){return n.Dialog}});var o=r(2011);Object.defineProperty(t,\"DialogBody\",{enumerable:true,get:function(){return o.DialogBody}});var a=r(8991);Object.defineProperty(t,\"DialogContent\",{enumerable:true,get:function(){return a.DialogContent}});var i=r(342);Object.defineProperty(t,\"DialogHeader\",{enumerable:true,get:function(){return i.DialogHeader}});var s=r(5213);Object.defineProperty(t,\"styles\",{enumerable:true,get:function(){return s.styles}})},5213:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.styles=void 0;const n=r(8910);const o=(0,n.noop)`\n [data-nextjs-dialog] {\n display: flex;\n flex-direction: column;\n width: 100%;\n margin-right: auto;\n margin-left: auto;\n outline: none;\n background: var(--color-background);\n border-radius: var(--size-gap);\n box-shadow: 0 var(--size-gap-half) var(--size-gap-double)\n rgba(0, 0, 0, 0.25);\n max-height: calc(100% - 56px);\n overflow-y: hidden;\n }\n\n @media (max-height: 812px) {\n [data-nextjs-dialog-overlay] {\n max-height: calc(100% - 15px);\n }\n }\n\n @media (min-width: 576px) {\n [data-nextjs-dialog] {\n max-width: 540px;\n box-shadow: 0 var(--size-gap) var(--size-gap-quad) rgba(0, 0, 0, 0.25);\n }\n }\n\n @media (min-width: 768px) {\n [data-nextjs-dialog] {\n max-width: 720px;\n }\n }\n\n @media (min-width: 992px) {\n [data-nextjs-dialog] {\n max-width: 960px;\n }\n }\n\n [data-nextjs-dialog-banner] {\n position: relative;\n }\n [data-nextjs-dialog-banner].banner-warning {\n border-color: var(--color-ansi-yellow);\n }\n [data-nextjs-dialog-banner].banner-error {\n border-color: var(--color-ansi-red);\n }\n\n [data-nextjs-dialog-banner]::after {\n z-index: 2;\n content: '';\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n /* banner width: */\n border-top-width: var(--size-gap-half);\n border-bottom-width: 0;\n border-top-style: solid;\n border-bottom-style: solid;\n border-top-color: inherit;\n border-bottom-color: transparent;\n }\n\n [data-nextjs-dialog-content] {\n overflow-y: auto;\n border: none;\n margin: 0;\n /* calc(padding + banner width offset) */\n padding: calc(var(--size-gap-double) + var(--size-gap-half))\n var(--size-gap-double);\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n [data-nextjs-dialog-content] > [data-nextjs-dialog-header] {\n flex-shrink: 0;\n margin-bottom: var(--size-gap-double);\n }\n [data-nextjs-dialog-content] > [data-nextjs-dialog-body] {\n position: relative;\n flex: 1 1 auto;\n }\n`;t.styles=o},9831:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,\"__esModule\",{value:true});t.LeftRightDialogHeader=void 0;const i=r(505);const s=a(r(7522));const l=r(865);const u=function LeftRightDialogHeader({children:e,className:t,previous:r,next:n,close:o}){const a=s.useRef(null);const u=s.useRef(null);const c=s.useRef(null);const[d,f]=s.useState(null);const p=s.useCallback((e=>{f(e)}),[]);s.useEffect((()=>{if(d==null){return}const e=d.getRootNode();const t=self.document;function handler(t){if(t.key===\"ArrowLeft\"){t.stopPropagation();if(a.current){a.current.focus()}r&&r()}else if(t.key===\"ArrowRight\"){t.stopPropagation();if(u.current){u.current.focus()}n&&n()}else if(t.key===\"Escape\"){t.stopPropagation();if(e instanceof ShadowRoot){const t=e.activeElement;if(t&&t!==c.current&&t instanceof HTMLElement){t.blur();return}}if(o){o()}}}e.addEventListener(\"keydown\",handler);if(e!==t){t.addEventListener(\"keydown\",handler)}return function(){e.removeEventListener(\"keydown\",handler);if(e!==t){t.removeEventListener(\"keydown\",handler)}}}),[o,d,n,r]);s.useEffect((()=>{if(d==null){return}const e=d.getRootNode();if(e instanceof ShadowRoot){const t=e.activeElement;if(r==null){if(a.current&&t===a.current){a.current.blur()}}else if(n==null){if(u.current&&t===u.current){u.current.blur()}}}}),[d,n,r]);return(0,i.jsxs)(\"div\",{\"data-nextjs-dialog-left-right\":true,className:t,children:[(0,i.jsxs)(\"nav\",{ref:p,children:[(0,i.jsx)(\"button\",{ref:a,type:\"button\",disabled:r==null?true:undefined,\"aria-disabled\":r==null?true:undefined,onClick:r??undefined,children:(0,i.jsxs)(\"svg\",{viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,i.jsx)(\"title\",{children:\"previous\"}),(0,i.jsx)(\"path\",{d:\"M6.99996 1.16666L1.16663 6.99999L6.99996 12.8333M12.8333 6.99999H1.99996H12.8333Z\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})]})}),(0,i.jsx)(\"button\",{ref:u,type:\"button\",disabled:n==null?true:undefined,\"aria-disabled\":n==null?true:undefined,onClick:n??undefined,children:(0,i.jsxs)(\"svg\",{viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,i.jsx)(\"title\",{children:\"next\"}),(0,i.jsx)(\"path\",{d:\"M6.99996 1.16666L12.8333 6.99999L6.99996 12.8333M1.16663 6.99999H12H1.16663Z\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})]})}),\" \",e]}),o?(0,i.jsx)(\"button\",{\"data-nextjs-errors-dialog-left-right-close-button\":true,ref:c,type:\"button\",onClick:o,\"aria-label\":\"Close\",children:(0,i.jsx)(\"span\",{\"aria-hidden\":\"true\",children:(0,i.jsx)(l.CloseIcon,{})})}):null]})};t.LeftRightDialogHeader=u},2732:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.styles=t.LeftRightDialogHeader=void 0;var n=r(9831);Object.defineProperty(t,\"LeftRightDialogHeader\",{enumerable:true,get:function(){return n.LeftRightDialogHeader}});var o=r(6543);Object.defineProperty(t,\"styles\",{enumerable:true,get:function(){return o.styles}})},6543:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.styles=void 0;const n=r(8910);const o=(0,n.noop)`\n [data-nextjs-dialog-left-right] {\n display: flex;\n flex-direction: row;\n align-content: center;\n align-items: center;\n justify-content: space-between;\n }\n [data-nextjs-dialog-left-right] > nav > button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n width: calc(var(--size-gap-double) + var(--size-gap));\n height: calc(var(--size-gap-double) + var(--size-gap));\n font-size: 0;\n border: none;\n background-color: rgba(255, 85, 85, 0.1);\n color: var(--color-ansi-red);\n cursor: pointer;\n transition: background-color 0.25s ease;\n }\n [data-nextjs-dialog-left-right] > nav > button > svg {\n width: auto;\n height: calc(var(--size-gap) + var(--size-gap-half));\n }\n [data-nextjs-dialog-left-right] > nav > button:hover {\n background-color: rgba(255, 85, 85, 0.2);\n }\n [data-nextjs-dialog-left-right] > nav > button:disabled {\n background-color: rgba(255, 85, 85, 0.1);\n color: rgba(255, 85, 85, 0.4);\n cursor: not-allowed;\n }\n\n [data-nextjs-dialog-left-right] > nav > button:first-of-type {\n border-radius: var(--size-gap-half) 0 0 var(--size-gap-half);\n margin-right: 1px;\n }\n [data-nextjs-dialog-left-right] > nav > button:last-of-type {\n border-radius: 0 var(--size-gap-half) var(--size-gap-half) 0;\n }\n\n [data-nextjs-dialog-left-right] > button:last-of-type {\n border: 0;\n padding: 0;\n\n background-color: transparent;\n appearance: none;\n\n opacity: 0.4;\n transition: opacity 0.25s ease;\n\n color: var(--color-font);\n }\n [data-nextjs-dialog-left-right] > button:last-of-type:hover {\n opacity: 0.7;\n }\n`;t.styles=o},8017:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:true});t.Overlay=void 0;const s=r(505);const l=i(r(8975));const u=a(r(7522));const c=r(7800);const d=function Overlay({className:e,children:t,fixed:r}){u.useEffect((()=>{(0,c.lock)();return()=>{(0,c.unlock)()}}),[]);const[n,o]=u.useState(null);const a=u.useCallback((e=>{o(e)}),[]);u.useEffect((()=>{if(n==null){return}const e=(0,l.default)({context:n});return()=>{e.disengage()}}),[n]);return(0,s.jsxs)(\"div\",{\"data-nextjs-dialog-overlay\":true,className:e,ref:a,children:[(0,s.jsx)(\"div\",{\"data-nextjs-dialog-backdrop\":true,\"data-nextjs-dialog-backdrop-fixed\":r?true:undefined}),t]})};t.Overlay=d},7800:function(e,t){Object.defineProperty(t,\"__esModule\",{value:true});t.unlock=t.lock=void 0;let r;let n;let o=0;function lock(){setTimeout((()=>{if(o++>0){return}const e=window.innerWidth-document.documentElement.clientWidth;if(e>0){r=document.body.style.paddingRight;document.body.style.paddingRight=`${e}px`}n=document.body.style.overflow;document.body.style.overflow=\"hidden\"}))}t.lock=lock;function unlock(){setTimeout((()=>{if(o===0||--o!==0){return}if(r!==undefined){document.body.style.paddingRight=r;r=undefined}if(n!==undefined){document.body.style.overflow=n;n=undefined}}))}t.unlock=unlock},8278:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.Overlay=void 0;var n=r(8017);Object.defineProperty(t,\"Overlay\",{enumerable:true,get:function(){return n.Overlay}})},8975:function(e,t,r){var n=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:true});const o=n(r(7709));const a=n(r(7292));function nodeArray(e){if(!e){return[]}if(Array.isArray(e)){return e}if(e.nodeType!==undefined){return[e]}if(typeof e===\"string\"){e=document.querySelectorAll(e)}if(e.length!==undefined){return[].slice.call(e,0)}throw new TypeError(\"unexpected input \"+String(e))}function contextToElement(e){var t=e.context,r=e.label,n=r===undefined?\"context-to-element\":r,o=e.resolveDocument,a=e.defaultToDocument;var i=nodeArray(t)[0];if(o&&i&&i.nodeType===Node.DOCUMENT_NODE){i=i.documentElement}if(!i&&a){return document.documentElement}if(!i){throw new TypeError(n+\" requires valid options.context\")}if(i.nodeType!==Node.ELEMENT_NODE&&i.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){throw new TypeError(n+\" requires options.context to be an Element\")}return i}function getShadowHost(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context;var r=contextToElement({label:\"get/shadow-host\",context:t});var n=null;while(r){n=r;r=r.parentNode}if(n.nodeType===n.DOCUMENT_FRAGMENT_NODE&&n.host){return n.host}return null}function getDocument(e){if(!e){return document}if(e.nodeType===Node.DOCUMENT_NODE){return e}return e.ownerDocument||document}function isActiveElement(e){var t=contextToElement({label:\"is/active-element\",resolveDocument:true,context:e});var r=getDocument(t);if(r.activeElement===t){return true}var n=getShadowHost({context:t});if(n&&n.shadowRoot.activeElement===t){return true}return false}function getParents(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context;var r=[];var n=contextToElement({label:\"get/parents\",context:t});while(n){r.push(n);n=n.parentNode;if(n&&n.nodeType!==Node.ELEMENT_NODE){n=null}}return r}var i=[\"matches\",\"webkitMatchesSelector\",\"mozMatchesSelector\",\"msMatchesSelector\"];var s=null;function findMethodName(e){i.some((function(t){if(!e[t]){return false}s=t;return true}))}function elementMatches(e,t){if(!s){findMethodName(e)}return e[s](t)}var l=JSON.parse(JSON.stringify(o.default));var u=l.os.family||\"\";var c=u===\"Android\";var d=u.slice(0,7)===\"Windows\";var f=u===\"OS X\";var p=u===\"iOS\";var m=l.layout===\"Blink\";var v=l.layout===\"Gecko\";var b=l.layout===\"Trident\";var g=l.layout===\"EdgeHTML\";var h=l.layout===\"WebKit\";var y=parseFloat(l.version);var x=Math.floor(y);l.majorVersion=x;l.is={ANDROID:c,WINDOWS:d,OSX:f,IOS:p,BLINK:m,GECKO:v,TRIDENT:b,EDGE:g,WEBKIT:h,IE9:b&&x===9,IE10:b&&x===10,IE11:b&&x===11};function before(){var e={activeElement:document.activeElement,windowScrollTop:window.scrollTop,windowScrollLeft:window.scrollLeft,bodyScrollTop:document.body.scrollTop,bodyScrollLeft:document.body.scrollLeft};var t=document.createElement(\"iframe\");t.setAttribute(\"style\",\"position:absolute; position:fixed; top:0; left:-2px; width:1px; height:1px; overflow:hidden;\");t.setAttribute(\"aria-live\",\"off\");t.setAttribute(\"aria-busy\",\"true\");t.setAttribute(\"aria-hidden\",\"true\");document.body.appendChild(t);var r=t.contentWindow;var n=r.document;n.open();n.close();var o=n.createElement(\"div\");n.body.appendChild(o);e.iframe=t;e.wrapper=o;e.window=r;e.document=n;return e}function test(e,t){e.wrapper.innerHTML=\"\";var r=typeof t.element===\"string\"?e.document.createElement(t.element):t.element(e.wrapper,e.document);var n=t.mutate&&t.mutate(r,e.wrapper,e.document);if(!n&&n!==false){n=r}!r.parentNode&&e.wrapper.appendChild(r);n&&n.focus&&n.focus();return t.validate?t.validate(r,n,e.document):e.document.activeElement===n}function after(e){if(e.activeElement===document.body){document.activeElement&&document.activeElement.blur&&document.activeElement.blur();if(l.is.IE10){document.body.focus()}}else{e.activeElement&&e.activeElement.focus&&e.activeElement.focus()}document.body.removeChild(e.iframe);window.scrollTop=e.windowScrollTop;window.scrollLeft=e.windowScrollLeft;document.body.scrollTop=e.bodyScrollTop;document.body.scrollLeft=e.bodyScrollLeft}function detectFocus(e){var t=before();var r={};Object.keys(e).map((function(n){r[n]=test(t,e[n])}));after(t);return r}var _=\"1.4.1\";function readLocalStorage(e){var t=void 0;try{t=window.localStorage&&window.localStorage.getItem(e);t=t?JSON.parse(t):{}}catch(e){t={}}return t}function writeLocalStorage(e,t){if(!document.hasFocus()){try{window.localStorage&&window.localStorage.removeItem(e)}catch(e){}return}try{window.localStorage&&window.localStorage.setItem(e,JSON.stringify(t))}catch(e){}}var w=typeof window!==\"undefined\"&&window.navigator.userAgent||\"\";var E=\"ally-supports-cache\";var j=readLocalStorage(E);if(j.userAgent!==w||j.version!==_){j={}}j.userAgent=w;j.version=_;var O={get:function get(){return j},set:function set(e){Object.keys(e).forEach((function(t){j[t]=e[t]}));j.time=(new Date).toISOString();writeLocalStorage(E,j)}};function cssShadowPiercingDeepCombinator(){var e=void 0;try{document.querySelector(\"html >>> :first-child\");e=\">>>\"}catch(t){try{document.querySelector(\"html /deep/ :first-child\");e=\"/deep/\"}catch(t){e=\"\"}}return e}var k=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\";var S={element:\"div\",mutate:function mutate(e){e.innerHTML='<map name=\"image-map-tabindex-test\">'+'<area shape=\"rect\" coords=\"63,19,144,45\"></map>'+'<img usemap=\"#image-map-tabindex-test\" tabindex=\"-1\" alt=\"\" src=\"'+k+'\">';return e.querySelector(\"area\")}};var C={element:\"div\",mutate:function mutate(e){e.innerHTML='<map name=\"image-map-tabindex-test\">'+'<area href=\"#void\" tabindex=\"-1\" shape=\"rect\" coords=\"63,19,144,45\"></map>'+'<img usemap=\"#image-map-tabindex-test\" alt=\"\" src=\"'+k+'\">';return false},validate:function validate(e,t,r){if(l.is.GECKO){return true}var n=e.querySelector(\"area\");n.focus();return r.activeElement===n}};var T={element:\"div\",mutate:function mutate(e){e.innerHTML='<map name=\"image-map-area-href-test\">'+'<area shape=\"rect\" coords=\"63,19,144,45\"></map>'+'<img usemap=\"#image-map-area-href-test\" alt=\"\" src=\"'+k+'\">';return e.querySelector(\"area\")},validate:function validate(e,t,r){if(l.is.GECKO){return true}return r.activeElement===t}};var D={name:\"can-focus-audio-without-controls\",element:\"audio\",mutate:function mutate(e){try{e.setAttribute(\"src\",k)}catch(e){}}};var P=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ\";var N={element:\"div\",mutate:function mutate(e){e.innerHTML='<map name=\"broken-image-map-test\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>'+'<img usemap=\"#broken-image-map-test\" alt=\"\" src=\"'+P+'\">';return e.querySelector(\"area\")}};var R={element:\"div\",mutate:function mutate(e){e.setAttribute(\"tabindex\",\"-1\");e.setAttribute(\"style\",\"display: -webkit-flex; display: -ms-flexbox; display: flex;\");e.innerHTML='<span style=\"display: block;\">hello</span>';return e.querySelector(\"span\")}};var F={element:\"fieldset\",mutate:function mutate(e){e.setAttribute(\"tabindex\",0);e.setAttribute(\"disabled\",\"disabled\")}};var I={element:\"fieldset\",mutate:function mutate(e){e.innerHTML=\"<legend>legend</legend><p>content</p>\"}};var A={element:\"span\",mutate:function mutate(e){e.setAttribute(\"style\",\"display: -webkit-flex; display: -ms-flexbox; display: flex;\");e.innerHTML='<span style=\"display: block;\">hello</span>'}};var M={element:\"form\",mutate:function mutate(e){e.setAttribute(\"tabindex\",0);e.setAttribute(\"disabled\",\"disabled\")}};var L={element:\"a\",mutate:function mutate(e){e.href=\"#void\";e.innerHTML='<img ismap src=\"'+k+'\" alt=\"\">';return e.querySelector(\"img\")}};var B={element:\"div\",mutate:function mutate(e){e.innerHTML='<map name=\"image-map-tabindex-test\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>'+'<img usemap=\"#image-map-tabindex-test\" tabindex=\"-1\" alt=\"\" '+'src=\"'+k+'\">';return e.querySelector(\"img\")}};var H={element:function element(e,t){var r=t.createElement(\"iframe\");e.appendChild(r);var n=r.contentWindow.document;n.open();n.close();return r},mutate:function mutate(e){e.style.visibility=\"hidden\";var t=e.contentWindow.document;var r=t.createElement(\"input\");t.body.appendChild(r);return r},validate:function validate(e){var t=e.contentWindow.document;var r=t.querySelector(\"input\");return t.activeElement===r}};var z=!l.is.WEBKIT;function focusInZeroDimensionObject(){return z}var W={element:\"div\",mutate:function mutate(e){e.setAttribute(\"tabindex\",\"invalid-value\")}};var V={element:\"label\",mutate:function mutate(e){e.setAttribute(\"tabindex\",\"-1\")},validate:function validate(e,t,r){var n=e.offsetHeight;e.focus();return r.activeElement===e}};var $=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtb\"+\"G5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBpZD0ic3ZnIj48dGV4dCB4PSIxMCIgeT0iMjAiIGlkPSJ\"+\"zdmctbGluay10ZXh0Ij50ZXh0PC90ZXh0Pjwvc3ZnPg==\";var U={element:\"object\",mutate:function mutate(e){e.setAttribute(\"type\",\"image/svg+xml\");e.setAttribute(\"data\",$);e.setAttribute(\"width\",\"200\");e.setAttribute(\"height\",\"50\");e.style.visibility=\"hidden\"}};var K={name:\"can-focus-object-svg\",element:\"object\",mutate:function mutate(e){e.setAttribute(\"type\",\"image/svg+xml\");e.setAttribute(\"data\",$);e.setAttribute(\"width\",\"200\");e.setAttribute(\"height\",\"50\")},validate:function validate(e,t,r){if(l.is.GECKO){return true}return r.activeElement===e}};var G=!l.is.IE9;function focusObjectSwf(){return G}var Z={element:\"div\",mutate:function mutate(e){e.innerHTML='<map name=\"focus-redirect-img-usemap\"><area href=\"#void\" shape=\"rect\" coords=\"63,19,144,45\"></map>'+'<img usemap=\"#focus-redirect-img-usemap\" alt=\"\" '+'src=\"'+k+'\">';return e.querySelector(\"img\")},validate:function validate(e,t,r){var n=e.querySelector(\"area\");return r.activeElement===n}};var Y={element:\"fieldset\",mutate:function mutate(e){e.innerHTML='<legend>legend</legend><input tabindex=\"-1\"><input tabindex=\"0\">';return false},validate:function validate(e,t,r){var n=e.querySelector('input[tabindex=\"-1\"]');var o=e.querySelector('input[tabindex=\"0\"]');e.focus();e.querySelector(\"legend\").focus();return r.activeElement===n&&\"focusable\"||r.activeElement===o&&\"tabbable\"||\"\"}};var J={element:\"div\",mutate:function mutate(e){e.setAttribute(\"style\",\"width: 100px; height: 50px; overflow: auto;\");e.innerHTML='<div style=\"width: 500px; height: 40px;\">scrollable content</div>';return e.querySelector(\"div\")}};var X={element:\"div\",mutate:function mutate(e){e.setAttribute(\"style\",\"width: 100px; height: 50px;\");e.innerHTML='<div style=\"width: 500px; height: 40px;\">scrollable content</div>'}};var Q={element:\"div\",mutate:function mutate(e){e.setAttribute(\"style\",\"width: 100px; height: 50px; overflow: auto;\");e.innerHTML='<div style=\"width: 500px; height: 40px;\">scrollable content</div>'}};var ee={element:\"details\",mutate:function mutate(e){e.innerHTML=\"<summary>foo</summary><p>content</p>\";return e.firstElementChild}};function makeFocusableForeignObject(){var e=document.createElementNS(\"http://www.w3.org/2000/svg\",\"foreignObject\");e.width.baseVal.value=30;e.height.baseVal.value=30;e.appendChild(document.createElement(\"input\"));e.lastChild.type=\"text\";return e}function focusSvgForeignObjectHack(e){var t=e.ownerSVGElement||e.nodeName.toLowerCase()===\"svg\";if(!t){return false}var r=makeFocusableForeignObject();e.appendChild(r);var n=r.querySelector(\"input\");n.focus();n.disabled=true;e.removeChild(r);return true}function generate(e){return'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">'+e+\"</svg>\"}function focus(e){if(e.focus){return}try{HTMLElement.prototype.focus.call(e)}catch(t){focusSvgForeignObjectHack(e)}}function validate(e,t,r){focus(t);return r.activeElement===t}var te={element:\"div\",mutate:function mutate(e){e.innerHTML=generate('<text focusable=\"true\">a</text>');return e.querySelector(\"text\")},validate:validate};var re={element:\"div\",mutate:function mutate(e){e.innerHTML=generate('<text tabindex=\"0\">a</text>');return e.querySelector(\"text\")},validate:validate};var ne={element:\"div\",mutate:function mutate(e){e.innerHTML=generate('<text tabindex=\"-1\">a</text>');return e.querySelector(\"text\")},validate:validate};var oe={element:\"div\",mutate:function mutate(e){e.innerHTML=generate(['<g id=\"ally-test-target\"><a xlink:href=\"#void\"><text>link</text></a></g>','<use xlink:href=\"#ally-test-target\" x=\"0\" y=\"0\" tabindex=\"-1\" />'].join(\"\"));return e.querySelector(\"use\")},validate:validate};var ae={element:\"div\",mutate:function mutate(e){e.innerHTML=generate('<foreignObject tabindex=\"-1\"><input type=\"text\" /></foreignObject>');return e.querySelector(\"foreignObject\")||e.getElementsByTagName(\"foreignObject\")[0]},validate:validate};var ie=Boolean(l.is.GECKO&&typeof SVGElement!==\"undefined\"&&SVGElement.prototype.focus);function focusSvgInIframe(){return ie}var se={element:\"div\",mutate:function mutate(e){e.innerHTML=generate(\"\");return e.firstChild},validate:validate};var le={element:\"div\",mutate:function mutate(e){e.setAttribute(\"tabindex\",\"3x\")}};var ue={element:\"table\",mutate:function mutate(e,t,r){var n=r.createDocumentFragment();n.innerHTML=\"<tr><td>cell</td></tr>\";e.appendChild(n)}};var ce={element:\"video\",mutate:function mutate(e){try{e.setAttribute(\"src\",k)}catch(e){}}};var de=l.is.GECKO||l.is.TRIDENT||l.is.EDGE;function tabsequenceAreaAtImgPosition(){return de}var fe={cssShadowPiercingDeepCombinator:cssShadowPiercingDeepCombinator,focusInZeroDimensionObject:focusInZeroDimensionObject,focusObjectSwf:focusObjectSwf,focusSvgInIframe:focusSvgInIframe,tabsequenceAreaAtImgPosition:tabsequenceAreaAtImgPosition};var pe={focusAreaImgTabindex:S,focusAreaTabindex:C,focusAreaWithoutHref:T,focusAudioWithoutControls:D,focusBrokenImageMap:N,focusChildrenOfFocusableFlexbox:R,focusFieldsetDisabled:F,focusFieldset:I,focusFlexboxContainer:A,focusFormDisabled:M,focusImgIsmap:L,focusImgUsemapTabindex:B,focusInHiddenIframe:H,focusInvalidTabindex:W,focusLabelTabindex:V,focusObjectSvg:K,focusObjectSvgHidden:U,focusRedirectImgUsemap:Z,focusRedirectLegend:Y,focusScrollBody:J,focusScrollContainerWithoutOverflow:X,focusScrollContainer:Q,focusSummary:ee,focusSvgFocusableAttribute:te,focusSvgTabindexAttribute:re,focusSvgNegativeTabindexAttribute:ne,focusSvgUseTabindex:oe,focusSvgForeignobjectTabindex:ae,focusSvg:se,focusTabindexTrailingCharacters:le,focusTable:ue,focusVideoWithoutControls:ce};function executeTests(){var e=detectFocus(pe);Object.keys(fe).forEach((function(t){e[t]=fe[t]()}));return e}var me=null;function _supports(){if(me){return me}me=O.get();if(!me.time){O.set(executeTests());me=O.get()}return me}var ve=void 0;var be=/^\\s*(-|\\+)?[0-9]+\\s*$/;var ge=/^\\s*(-|\\+)?[0-9]+.*$/;function isValidTabindex(e){if(!ve){ve=_supports()}var t=ve.focusTabindexTrailingCharacters?ge:be;var r=contextToElement({label:\"is/valid-tabindex\",resolveDocument:true,context:e});var n=r.hasAttribute(\"tabindex\");var o=r.hasAttribute(\"tabIndex\");if(!n&&!o){return false}var a=r.ownerSVGElement||r.nodeName.toLowerCase()===\"svg\";if(a&&!ve.focusSvgTabindexAttribute){return false}if(ve.focusInvalidTabindex){return true}var i=r.getAttribute(n?\"tabindex\":\"tabIndex\");if(i===\"-32768\"){return false}return Boolean(i&&t.test(i))}function tabindexValue(e){if(!isValidTabindex(e)){return null}var t=e.hasAttribute(\"tabindex\");var r=t?\"tabindex\":\"tabIndex\";var n=parseInt(e.getAttribute(r),10);return isNaN(n)?-1:n}function isUserModifyWritable(e){var t=e.webkitUserModify||\"\";return Boolean(t&&t.indexOf(\"write\")!==-1)}function hasCssOverflowScroll(e){return[e.getPropertyValue(\"overflow\"),e.getPropertyValue(\"overflow-x\"),e.getPropertyValue(\"overflow-y\")].some((function(e){return e===\"auto\"||e===\"scroll\"}))}function hasCssDisplayFlex(e){return e.display.indexOf(\"flex\")>-1}function isScrollableContainer(e,t,r,n){if(t!==\"div\"&&t!==\"span\"){return false}if(r&&r!==\"div\"&&r!==\"span\"&&!hasCssOverflowScroll(n)){return false}return e.offsetHeight<e.scrollHeight||e.offsetWidth<e.scrollWidth}var he=void 0;function isFocusRelevantRules(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context,r=e.except,n=r===undefined?{flexbox:false,scrollable:false,shadow:false}:r;if(!he){he=_supports()}var o=contextToElement({label:\"is/focus-relevant\",resolveDocument:true,context:t});if(!n.shadow&&o.shadowRoot){return true}var a=o.nodeName.toLowerCase();if(a===\"input\"&&o.type===\"hidden\"){return false}if(a===\"input\"||a===\"select\"||a===\"button\"||a===\"textarea\"){return true}if(a===\"legend\"&&he.focusRedirectLegend){return true}if(a===\"label\"){return true}if(a===\"area\"){return true}if(a===\"a\"&&o.hasAttribute(\"href\")){return true}if(a===\"object\"&&o.hasAttribute(\"usemap\")){return false}if(a===\"object\"){var i=o.getAttribute(\"type\");if(!he.focusObjectSvg&&i===\"image/svg+xml\"){return false}else if(!he.focusObjectSwf&&i===\"application/x-shockwave-flash\"){return false}}if(a===\"iframe\"||a===\"object\"){return true}if(a===\"embed\"||a===\"keygen\"){return true}if(o.hasAttribute(\"contenteditable\")){return true}if(a===\"audio\"&&(he.focusAudioWithoutControls||o.hasAttribute(\"controls\"))){return true}if(a===\"video\"&&(he.focusVideoWithoutControls||o.hasAttribute(\"controls\"))){return true}if(he.focusSummary&&a===\"summary\"){return true}var s=isValidTabindex(o);if(a===\"img\"&&o.hasAttribute(\"usemap\")){return s&&he.focusImgUsemapTabindex||he.focusRedirectImgUsemap}if(he.focusTable&&(a===\"table\"||a===\"td\")){return true}if(he.focusFieldset&&a===\"fieldset\"){return true}var l=a===\"svg\";var u=o.ownerSVGElement;var c=o.getAttribute(\"focusable\");var d=tabindexValue(o);if(a===\"use\"&&d!==null&&!he.focusSvgUseTabindex){return false}if(a===\"foreignobject\"){return d!==null&&he.focusSvgForeignobjectTabindex}if(elementMatches(o,\"svg a\")&&o.hasAttribute(\"xlink:href\")){return true}if((l||u)&&o.focus&&!he.focusSvgNegativeTabindexAttribute&&d<0){return false}if(l){return s||he.focusSvg||he.focusSvgInIframe||Boolean(he.focusSvgFocusableAttribute&&c&&c===\"true\")}if(u){if(he.focusSvgTabindexAttribute&&s){return true}if(he.focusSvgFocusableAttribute){return c===\"true\"}}if(s){return true}var f=window.getComputedStyle(o,null);if(isUserModifyWritable(f)){return true}if(he.focusImgIsmap&&a===\"img\"&&o.hasAttribute(\"ismap\")){var p=getParents({context:o}).some((function(e){return e.nodeName.toLowerCase()===\"a\"&&e.hasAttribute(\"href\")}));if(p){return true}}if(!n.scrollable&&he.focusScrollContainer){if(he.focusScrollContainerWithoutOverflow){if(isScrollableContainer(o,a)){return true}}else if(hasCssOverflowScroll(f)){return true}}if(!n.flexbox&&he.focusFlexboxContainer&&hasCssDisplayFlex(f)){return true}var m=o.parentElement;if(!n.scrollable&&m){var v=m.nodeName.toLowerCase();var b=window.getComputedStyle(m,null);if(he.focusScrollBody&&isScrollableContainer(m,a,v,b)){return true}if(he.focusChildrenOfFocusableFlexbox){if(hasCssDisplayFlex(b)){return true}}}return false}isFocusRelevantRules.except=function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var t=function isFocusRelevant(t){return isFocusRelevantRules({context:t,except:e})};t.rules=isFocusRelevantRules;return t};var ye=isFocusRelevantRules.except({});function findIndex(e,t){if(e.findIndex){return e.findIndex(t)}var r=e.length;if(r===0){return-1}for(var n=0;n<r;n++){if(t(e[n],n,e)){return n}}return-1}function getContentDocument(e){try{return e.contentDocument||e.contentWindow&&e.contentWindow.document||e.getSVGDocument&&e.getSVGDocument()||null}catch(e){return null}}function getWindow(e){var t=getDocument(e);return t.defaultView||window}var xe=void 0;function selectInShadows(e){if(typeof xe!==\"string\"){var t=cssShadowPiercingDeepCombinator();if(t){xe=\", html \"+t+\" \"}}if(!xe){return e}return e+xe+e.replace(/\\s*,\\s*/g,\",\").split(\",\").join(xe)}var _e=void 0;function findDocumentHostElement(e){if(!_e){_e=selectInShadows(\"object, iframe\")}if(e._frameElement!==undefined){return e._frameElement}e._frameElement=null;var t=e.parent.document.querySelectorAll(_e);[].some.call(t,(function(t){var r=getContentDocument(t);if(r!==e.document){return false}e._frameElement=t;return true}));return e._frameElement}function getFrameElement(e){var t=getWindow(e);if(!t.parent||t.parent===t){return null}try{return t.frameElement||findDocumentHostElement(t)}catch(e){return null}}var we=/^(area)$/;function computedStyle(e,t){return window.getComputedStyle(e,null).getPropertyValue(t)}function notDisplayed(e){return e.some((function(e){return computedStyle(e,\"display\")===\"none\"}))}function notVisible(e){var t=findIndex(e,(function(e){var t=computedStyle(e,\"visibility\");return t===\"hidden\"||t===\"collapse\"}));if(t===-1){return false}var r=findIndex(e,(function(e){return computedStyle(e,\"visibility\")===\"visible\"}));if(r===-1){return true}if(t<r){return true}return false}function collapsedParent(e){var t=1;if(e[0].nodeName.toLowerCase()===\"summary\"){t=2}return e.slice(t).some((function(e){return e.nodeName.toLowerCase()===\"details\"&&e.open===false}))}function isVisibleRules(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context,r=e.except,n=r===undefined?{notRendered:false,cssDisplay:false,cssVisibility:false,detailsElement:false,browsingContext:false}:r;var o=contextToElement({label:\"is/visible\",resolveDocument:true,context:t});var a=o.nodeName.toLowerCase();if(!n.notRendered&&we.test(a)){return true}var i=getParents({context:o});var s=a===\"audio\"&&!o.hasAttribute(\"controls\");if(!n.cssDisplay&¬Displayed(s?i.slice(1):i)){return false}if(!n.cssVisibility&¬Visible(i)){return false}if(!n.detailsElement&&collapsedParent(i)){return false}if(!n.browsingContext){var l=getFrameElement(o);var u=isVisibleRules.except(n);if(l&&!u(l)){return false}}return true}isVisibleRules.except=function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var t=function isVisible(t){return isVisibleRules({context:t,except:e})};t.rules=isVisibleRules;return t};var Ee=isVisibleRules.except({});function getMapByName(e,t){var r=t.querySelector('map[name=\"'+(0,a.default)(e)+'\"]');return r||null}function getImageOfArea(e){var t=e.parentElement;if(!t.name||t.nodeName.toLowerCase()!==\"map\"){return null}var r=getDocument(e);return r.querySelector('img[usemap=\"#'+(0,a.default)(t.name)+'\"]')||null}var je=void 0;function isValidArea(e){if(!je){je=_supports()}var t=contextToElement({label:\"is/valid-area\",context:e});var r=t.nodeName.toLowerCase();if(r!==\"area\"){return false}var n=t.hasAttribute(\"tabindex\");if(!je.focusAreaTabindex&&n){return false}var o=getImageOfArea(t);if(!o||!Ee(o)){return false}if(!je.focusBrokenImageMap&&(!o.complete||!o.naturalHeight||o.offsetWidth<=0||o.offsetHeight<=0)){return false}if(!je.focusAreaWithoutHref&&!t.href){return je.focusAreaTabindex&&n||je.focusAreaImgTabindex&&o.hasAttribute(\"tabindex\")}var a=getParents({context:o}).slice(1).some((function(e){var t=e.nodeName.toLowerCase();return t===\"button\"||t===\"a\"}));if(a){return false}return true}var Oe=void 0;var ke=void 0;var Se={input:true,select:true,textarea:true,button:true,fieldset:true,form:true};function isNativeDisabledSupported(e){if(!Oe){Oe=_supports();if(Oe.focusFieldsetDisabled){delete Se.fieldset}if(Oe.focusFormDisabled){delete Se.form}ke=new RegExp(\"^(\"+Object.keys(Se).join(\"|\")+\")$\")}var t=contextToElement({label:\"is/native-disabled-supported\",context:e});var r=t.nodeName.toLowerCase();return Boolean(ke.test(r))}var Ce=void 0;function isDisabledFieldset(e){var t=e.nodeName.toLowerCase();return t===\"fieldset\"&&e.disabled}function isDisabledForm(e){var t=e.nodeName.toLowerCase();return t===\"form\"&&e.disabled}function isDisabled(e){if(!Ce){Ce=_supports()}var t=contextToElement({label:\"is/disabled\",context:e});if(t.hasAttribute(\"data-ally-disabled\")){return true}if(!isNativeDisabledSupported(t)){return false}if(t.disabled){return true}var r=getParents({context:t});if(r.some(isDisabledFieldset)){return true}if(!Ce.focusFormDisabled&&r.some(isDisabledForm)){return true}return false}function isOnlyTabbableRules(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context,r=e.except,n=r===undefined?{onlyFocusableBrowsingContext:false,visible:false}:r;var o=contextToElement({label:\"is/only-tabbable\",resolveDocument:true,context:t});if(!n.visible&&!Ee(o)){return false}if(!n.onlyFocusableBrowsingContext&&(l.is.GECKO||l.is.TRIDENT||l.is.EDGE)){var a=getFrameElement(o);if(a){if(tabindexValue(a)<0){return false}}}var i=o.nodeName.toLowerCase();var s=tabindexValue(o);if(i===\"label\"&&l.is.GECKO){return s!==null&&s>=0}if(l.is.GECKO&&o.ownerSVGElement&&!o.focus){if(i===\"a\"&&o.hasAttribute(\"xlink:href\")){if(l.is.GECKO){return true}}}return false}isOnlyTabbableRules.except=function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var t=function isOnlyTabbable(t){return isOnlyTabbableRules({context:t,except:e})};t.rules=isOnlyTabbableRules;return t};var Te=isOnlyTabbableRules.except({});var De=void 0;function isOnlyFocusRelevant(e){var t=e.nodeName.toLowerCase();if(t===\"embed\"||t===\"keygen\"){return true}var r=tabindexValue(e);if(e.shadowRoot&&r===null){return true}if(t===\"label\"){return!De.focusLabelTabindex||r===null}if(t===\"legend\"){return r===null}if(De.focusSvgFocusableAttribute&&(e.ownerSVGElement||t===\"svg\")){var n=e.getAttribute(\"focusable\");return n&&n===\"false\"}if(t===\"img\"&&e.hasAttribute(\"usemap\")){return r===null||!De.focusImgUsemapTabindex}if(t===\"area\"){return!isValidArea(e)}return false}function isFocusableRules(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context,r=e.except,n=r===undefined?{disabled:false,visible:false,onlyTabbable:false}:r;if(!De){De=_supports()}var o=Te.rules.except({onlyFocusableBrowsingContext:true,visible:n.visible});var a=contextToElement({label:\"is/focusable\",resolveDocument:true,context:t});var i=ye.rules({context:a,except:n});if(!i||isOnlyFocusRelevant(a)){return false}if(!n.disabled&&isDisabled(a)){return false}if(!n.onlyTabbable&&o(a)){return false}if(!n.visible){var s={context:a,except:{}};if(De.focusInHiddenIframe){s.except.browsingContext=true}if(De.focusObjectSvgHidden){var l=a.nodeName.toLowerCase();if(l===\"object\"){s.except.cssVisibility=true}}if(!Ee.rules(s)){return false}}var u=getFrameElement(a);if(u){var c=u.nodeName.toLowerCase();if(c===\"object\"&&!De.focusInZeroDimensionObject){if(!u.offsetWidth||!u.offsetHeight){return false}}}var d=a.nodeName.toLowerCase();if(d===\"svg\"&&De.focusSvgInIframe&&!u&&a.getAttribute(\"tabindex\")===null){return false}return true}isFocusableRules.except=function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var t=function isFocusable(t){return isFocusableRules({context:t,except:e})};t.rules=isFocusableRules;return t};var Pe=isFocusableRules.except({});function createFilter(e){var t=function filter(t){if(t.shadowRoot){return NodeFilter.FILTER_ACCEPT}if(e(t)){return NodeFilter.FILTER_ACCEPT}return NodeFilter.FILTER_SKIP};t.acceptNode=t;return t}var Ne=createFilter(ye);function queryFocusableStrict(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context,r=e.includeContext,n=e.includeOnlyTabbable,o=e.strategy;if(!t){t=document.documentElement}var a=Pe.rules.except({onlyTabbable:n});var i=getDocument(t);var s=i.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,o===\"all\"?Ne:createFilter(a),false);var l=[];while(s.nextNode()){if(s.currentNode.shadowRoot){if(a(s.currentNode)){l.push(s.currentNode)}l=l.concat(queryFocusableStrict({context:s.currentNode.shadowRoot,includeOnlyTabbable:n,strategy:o}))}else{l.push(s.currentNode)}}if(r){if(o===\"all\"){if(ye(t)){l.unshift(t)}}else if(a(t)){l.unshift(t)}}return l}var Re=void 0;var Fe=void 0;function selector$2(){if(!Re){Re=_supports()}if(typeof Fe===\"string\"){return Fe}Fe=\"\"+(Re.focusTable?\"table, td,\":\"\")+(Re.focusFieldset?\"fieldset,\":\"\")+\"svg a,\"+\"a[href],\"+\"area[href],\"+\"input, select, textarea, button,\"+\"iframe, object, embed,\"+\"keygen,\"+(Re.focusAudioWithoutControls?\"audio,\":\"audio[controls],\")+(Re.focusVideoWithoutControls?\"video,\":\"video[controls],\")+(Re.focusSummary?\"summary,\":\"\")+\"[tabindex],\"+\"[contenteditable]\";Fe=selectInShadows(Fe);return Fe}function queryFocusableQuick(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context,r=e.includeContext,n=e.includeOnlyTabbable;var o=selector$2();var a=t.querySelectorAll(o);var i=Pe.rules.except({onlyTabbable:n});var s=[].filter.call(a,i);if(r&&i(t)){s.unshift(t)}return s}function queryFocusable(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context,r=e.includeContext,n=e.includeOnlyTabbable,o=e.strategy,a=o===undefined?\"quick\":o;var i=contextToElement({label:\"query/focusable\",resolveDocument:true,defaultToDocument:true,context:t});var s={context:i,includeContext:r,includeOnlyTabbable:n,strategy:a};if(a===\"quick\"){return queryFocusableQuick(s)}else if(a===\"strict\"||a===\"all\"){return queryFocusableStrict(s)}throw new TypeError('query/focusable requires option.strategy to be one of [\"quick\", \"strict\", \"all\"]')}var Ie=void 0;var Ae=/^(fieldset|table|td|body)$/;function isTabbableRules(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context,r=e.except,n=r===undefined?{flexbox:false,scrollable:false,shadow:false,visible:false,onlyTabbable:false}:r;if(!Ie){Ie=_supports()}var o=contextToElement({label:\"is/tabbable\",resolveDocument:true,context:t});if(l.is.BLINK&&l.is.ANDROID&&l.majorVersion>42){return false}var a=getFrameElement(o);if(a){if(l.is.WEBKIT&&l.is.IOS){return false}if(tabindexValue(a)<0){return false}if(!n.visible&&(l.is.BLINK||l.is.WEBKIT)&&!Ee(a)){return false}var i=a.nodeName.toLowerCase();if(i===\"object\"){var s=l.name===\"Chrome\"&&l.majorVersion>=54||l.name===\"Opera\"&&l.majorVersion>=41;if(l.is.WEBKIT||l.is.BLINK&&!s){return false}}}var u=o.nodeName.toLowerCase();var c=tabindexValue(o);var d=c===null?null:c>=0;if(l.is.EDGE&&l.majorVersion>=14&&a&&o.ownerSVGElement&&c<0){return true}var f=d!==false;var p=c!==null&&c>=0;if(o.hasAttribute(\"contenteditable\")){return f}if(Ae.test(u)&&d!==true){return false}if(l.is.WEBKIT&&l.is.IOS){var m=u===\"input\"&&o.type===\"text\"||o.type===\"password\"||u===\"select\"||u===\"textarea\"||o.hasAttribute(\"contenteditable\");if(!m){var v=window.getComputedStyle(o,null);m=isUserModifyWritable(v)}if(!m){return false}}if(u===\"use\"&&c!==null){if(l.is.BLINK||l.is.WEBKIT&&l.majorVersion===9){return true}}if(elementMatches(o,\"svg a\")&&o.hasAttribute(\"xlink:href\")){if(f){return true}if(o.focus&&!Ie.focusSvgNegativeTabindexAttribute){return true}}if(u===\"svg\"&&Ie.focusSvgInIframe&&f){return true}if(l.is.TRIDENT||l.is.EDGE){if(u===\"svg\"){if(Ie.focusSvg){return true}return o.hasAttribute(\"focusable\")||p}if(o.ownerSVGElement){if(Ie.focusSvgTabindexAttribute&&p){return true}return o.hasAttribute(\"focusable\")}}if(o.tabIndex===undefined){return Boolean(n.onlyTabbable)}if(u===\"audio\"){if(!o.hasAttribute(\"controls\")){return false}else if(l.is.BLINK){return true}}if(u===\"video\"){if(!o.hasAttribute(\"controls\")){if(l.is.TRIDENT||l.is.EDGE){return false}}else if(l.is.BLINK||l.is.GECKO){return true}}if(u===\"object\"){if(l.is.BLINK||l.is.WEBKIT){return false}}if(u===\"iframe\"){return false}if(!n.scrollable&&l.is.GECKO){var b=window.getComputedStyle(o,null);if(hasCssOverflowScroll(b)){return f}}if(l.is.TRIDENT||l.is.EDGE){if(u===\"area\"){var g=getImageOfArea(o);if(g&&tabindexValue(g)<0){return false}}var h=window.getComputedStyle(o,null);if(isUserModifyWritable(h)){return o.tabIndex>=0}if(!n.flexbox&&hasCssDisplayFlex(h)){if(c!==null){return p}return Me(o)&&Le(o)}if(isScrollableContainer(o,u)){return false}var y=o.parentElement;if(y){var x=y.nodeName.toLowerCase();var _=window.getComputedStyle(y,null);if(isScrollableContainer(y,u,x,_)){return false}if(hasCssDisplayFlex(_)){return p}}}return o.tabIndex>=0}isTabbableRules.except=function(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var t=function isTabbable(t){return isTabbableRules({context:t,except:e})};t.rules=isTabbableRules;return t};var Me=ye.rules.except({flexbox:true});var Le=isTabbableRules.except({flexbox:true});var Be=isTabbableRules.except({});function queryTabbable(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context,r=e.includeContext,n=e.includeOnlyTabbable,o=e.strategy;var a=Be.rules.except({onlyTabbable:n});return queryFocusable({context:t,includeContext:r,includeOnlyTabbable:n,strategy:o}).filter(a)}function compareDomPosition(e,t){return e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1}function sortDomOrder(e){return e.sort(compareDomPosition)}function getFirstSuccessorOffset(e,t){return findIndex(e,(function(e){return t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING}))}function findInsertionOffsets(e,t,r){var n=[];t.forEach((function(t){var o=true;var a=e.indexOf(t);if(a===-1){a=getFirstSuccessorOffset(e,t);o=false}if(a===-1){a=e.length}var i=nodeArray(r?r(t):t);if(!i.length){return}n.push({offset:a,replace:o,elements:i})}));return n}function insertElementsAtOffsets(e,t){var r=0;t.sort((function(e,t){return e.offset-t.offset}));t.forEach((function(t){var n=t.replace?1:0;var o=[t.offset+r,n].concat(t.elements);e.splice.apply(e,o);r+=t.elements.length-n}))}function mergeInDomOrder(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.list,r=e.elements,n=e.resolveElement;var o=t.slice(0);var a=nodeArray(r).slice(0);sortDomOrder(a);var i=findInsertionOffsets(o,a,n);insertElementsAtOffsets(o,i);return o}var He=function(){function defineProperties(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||false;n.configurable=true;if(\"value\"in n)n.writable=true;Object.defineProperty(e,n.key,n)}}return function(e,t,r){if(t)defineProperties(e.prototype,t);if(r)defineProperties(e,r);return e}}();function _classCallCheck(e,t){if(!(e instanceof t)){throw new TypeError(\"Cannot call a class as a function\")}}var ze=function(){function Maps(e){_classCallCheck(this,Maps);this._document=getDocument(e);this.maps={}}He(Maps,[{key:\"getAreasFor\",value:function getAreasFor(e){if(!this.maps[e]){this.addMapByName(e)}return this.maps[e]}},{key:\"addMapByName\",value:function addMapByName(e){var t=getMapByName(e,this._document);if(!t){return}this.maps[t.name]=queryTabbable({context:t})}},{key:\"extractAreasFromList\",value:function extractAreasFromList(e){return e.filter((function(e){var t=e.nodeName.toLowerCase();if(t!==\"area\"){return true}var r=e.parentNode;if(!this.maps[r.name]){this.maps[r.name]=[]}this.maps[r.name].push(e);return false}),this)}}]);return Maps}();function sortArea(e,t){var r=t.querySelectorAll(\"img[usemap]\");var n=new ze(t);var o=n.extractAreasFromList(e);if(!r.length){return o}return mergeInDomOrder({list:o,elements:r,resolveElement:function resolveElement(e){var t=e.getAttribute(\"usemap\").slice(1);return n.getAreasFor(t)}})}var We=function(){function defineProperties(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||false;n.configurable=true;if(\"value\"in n)n.writable=true;Object.defineProperty(e,n.key,n)}}return function(e,t,r){if(t)defineProperties(e.prototype,t);if(r)defineProperties(e,r);return e}}();function _classCallCheck$1(e,t){if(!(e instanceof t)){throw new TypeError(\"Cannot call a class as a function\")}}var Ve=function(){function Shadows(e,t){_classCallCheck$1(this,Shadows);this.context=e;this.sortElements=t;this.hostCounter=1;this.inHost={};this.inDocument=[];this.hosts={};this.elements={}}We(Shadows,[{key:\"_registerHost\",value:function _registerHost(e){if(e._sortingId){return}e._sortingId=\"shadow-\"+this.hostCounter++;this.hosts[e._sortingId]=e;var t=getShadowHost({context:e});if(t){this._registerHost(t);this._registerHostParent(e,t)}else{this.inDocument.push(e)}}},{key:\"_registerHostParent\",value:function _registerHostParent(e,t){if(!this.inHost[t._sortingId]){this.inHost[t._sortingId]=[]}this.inHost[t._sortingId].push(e)}},{key:\"_registerElement\",value:function _registerElement(e,t){if(!this.elements[t._sortingId]){this.elements[t._sortingId]=[]}this.elements[t._sortingId].push(e)}},{key:\"extractElements\",value:function extractElements(e){return e.filter((function(e){var t=getShadowHost({context:e});if(!t){return true}this._registerHost(t);this._registerElement(e,t);return false}),this)}},{key:\"sort\",value:function sort(e){var t=this._injectHosts(e);t=this._replaceHosts(t);this._cleanup();return t}},{key:\"_injectHosts\",value:function _injectHosts(e){Object.keys(this.hosts).forEach((function(e){var t=this.elements[e];var r=this.inHost[e];var n=this.hosts[e].shadowRoot;this.elements[e]=this._merge(t,r,n)}),this);return this._merge(e,this.inDocument,this.context)}},{key:\"_merge\",value:function _merge(e,t,r){var n=mergeInDomOrder({list:e,elements:t});return this.sortElements(n,r)}},{key:\"_replaceHosts\",value:function _replaceHosts(e){return mergeInDomOrder({list:e,elements:this.inDocument,resolveElement:this._resolveHostElement.bind(this)})}},{key:\"_resolveHostElement\",value:function _resolveHostElement(e){var t=mergeInDomOrder({list:this.elements[e._sortingId],elements:this.inHost[e._sortingId],resolveElement:this._resolveHostElement.bind(this)});var r=tabindexValue(e);if(r!==null&&r>-1){return[e].concat(t)}return t}},{key:\"_cleanup\",value:function _cleanup(){Object.keys(this.hosts).forEach((function(e){delete this.hosts[e]._sortingId}),this)}}]);return Shadows}();function sortShadowed(e,t,r){var n=new Ve(t,r);var o=n.extractElements(e);if(o.length===e.length){return r(e)}return n.sort(o)}function sortTabindex(e){var t={};var r=[];var n=e.filter((function(e){var n=e.tabIndex;if(n===undefined){n=tabindexValue(e)}if(n<=0||n===null||n===undefined){return true}if(!t[n]){t[n]=[];r.push(n)}t[n].push(e);return false}));var o=r.sort().map((function(e){return t[e]})).reduceRight((function(e,t){return t.concat(e)}),n);return o}var $e=void 0;function moveContextToBeginning(e,t){var r=e.indexOf(t);if(r>0){var n=e.splice(r,1);return n.concat(e)}return e}function sortElements(e,t){if($e.tabsequenceAreaAtImgPosition){e=sortArea(e,t)}e=sortTabindex(e);return e}function queryTabsequence(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.context,r=e.includeContext,n=e.includeOnlyTabbable,o=e.strategy;if(!$e){$e=_supports()}var a=nodeArray(t)[0]||document.documentElement;var i=queryTabbable({context:a,includeContext:r,includeOnlyTabbable:n,strategy:o});if(document.body.createShadowRoot&&l.is.BLINK){i=sortShadowed(i,a,sortElements)}else{i=sortElements(i,a)}if(r){i=moveContextToBeginning(i,a)}return i}var qe={tab:9,left:37,up:38,right:39,down:40,pageUp:33,\"page-up\":33,pageDown:34,\"page-down\":34,end:35,home:36,enter:13,escape:27,space:32,shift:16,capsLock:20,\"caps-lock\":20,ctrl:17,alt:18,meta:91,pause:19,insert:45,delete:46,backspace:8,_alias:{91:[92,93,224]}};for(var Ue=1;Ue<26;Ue++){qe[\"f\"+Ue]=Ue+111}for(var Ke=0;Ke<10;Ke++){var Ge=Ke+48;var Ze=Ke+96;qe[Ke]=Ge;qe[\"num-\"+Ke]=Ze;qe._alias[Ge]=[Ze]}for(var Ye=0;Ye<26;Ye++){var Je=Ye+65;var Xe=String.fromCharCode(Je).toLowerCase();qe[Xe]=Je}var Qe={alt:\"altKey\",ctrl:\"ctrlKey\",meta:\"metaKey\",shift:\"shiftKey\"};var et=Object.keys(Qe).map((function(e){return Qe[e]}));function createExpectedModifiers(e){var t=e?null:false;return{altKey:t,ctrlKey:t,metaKey:t,shiftKey:t}}function resolveModifiers(e){var t=e.indexOf(\"*\")!==-1;var r=createExpectedModifiers(t);e.forEach((function(e){if(e===\"*\"){return}var t=true;var n=e.slice(0,1);if(n===\"?\"){t=null}else if(n===\"!\"){t=false}if(t!==true){e=e.slice(1)}var o=Qe[e];if(!o){throw new TypeError('Unknown modifier \"'+e+'\"')}r[o]=t}));return r}function resolveKey(e){var t=qe[e]||parseInt(e,10);if(!t||typeof t!==\"number\"||isNaN(t)){throw new TypeError('Unknown key \"'+e+'\"')}return[t].concat(qe._alias[t]||[])}function matchModifiers(e,t){return!et.some((function(r){return typeof e[r]===\"boolean\"&&Boolean(t[r])!==e[r]}))}function keyBinding(e){return e.split(/\\s+/).map((function(e){var t=e.split(\"+\");var r=resolveModifiers(t.slice(0,-1));var n=resolveKey(t.slice(-1));return{keyCodes:n,modifiers:r,matchModifiers:matchModifiers.bind(null,r)}}))}function getParentComparator(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},t=e.parent,r=e.element,n=e.includeSelf;if(t){return function isChildOf(e){return Boolean(n&&e===t||t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_CONTAINED_BY)}}else if(r){return function isParentOf(e){return Boolean(n&&r===e||e.compareDocumentPosition(r)&Node.DOCUMENT_POSITION_CONTAINED_BY)}}throw new TypeError(\"util/compare-position#getParentComparator required either options.parent or options.element\")}function whenKey(){var e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var t={};var r=nodeArray(e.context)[0]||document.documentElement;delete e.context;var n=nodeArray(e.filter);delete e.filter;var o=Object.keys(e);if(!o.length){throw new TypeError(\"when/key requires at least one option key\")}var a=function registerBinding(e){e.keyCodes.forEach((function(r){if(!t[r]){t[r]=[]}t[r].push(e)}))};o.forEach((function(t){if(typeof e[t]!==\"function\"){throw new TypeError('when/key requires option[\"'+t+'\"] to be a function')}var r=function addCallback(r){r.callback=e[t];return r};keyBinding(t).map(r).forEach(a)}));var i=function handleKeyDown(e){if(e.defaultPrevented){return}if(n.length){var o=getParentComparator({element:e.target,includeSelf:true});if(n.some(o)){return}}var a=e.keyCode||e.which;if(!t[a]){return}t[a].forEach((function(t){if(!t.matchModifiers(e)){return}t.callback.call(r,e,s)}))};r.addEventListener(\"keydown\",i,false);var s=function disengage(){r.removeEventListener(\"keydown\",i,false)};return{disengage:s}}function default_1({context:e}={}){if(!e){e=document.documentElement}queryTabsequence();return whenKey({\"?alt+?shift+tab\":function altShiftTab(t){t.preventDefault();var r=queryTabsequence({context:e});var n=t.shiftKey;var o=r[0];var a=r[r.length-1];var i=n?o:a;var s=n?a:o;if(isActiveElement(i)){s.focus();return}var l=void 0;var u=r.some((function(e,t){if(!isActiveElement(e)){return false}l=t;return true}));if(!u){o.focus();return}var c=n?-1:1;r[l+c].focus()}})}t[\"default\"]=default_1},993:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.styles=void 0;const n=r(8910);const o=(0,n.noop)`\n [data-nextjs-dialog-overlay] {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n z-index: 9000;\n\n display: flex;\n align-content: center;\n align-items: center;\n flex-direction: column;\n padding: 10vh 15px 0;\n }\n\n @media (max-height: 812px) {\n [data-nextjs-dialog-overlay] {\n padding: 15px 15px 0;\n }\n }\n\n [data-nextjs-dialog-backdrop] {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: var(--color-backdrop);\n pointer-events: all;\n z-index: -1;\n }\n\n [data-nextjs-dialog-backdrop-fixed] {\n cursor: not-allowed;\n -webkit-backdrop-filter: blur(8px);\n backdrop-filter: blur(8px);\n }\n`;t.styles=o},6338:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,\"__esModule\",{value:true});t.ShadowPortal=void 0;const i=r(505);const s=a(r(7522));const l=r(2255);const u=function Portal({children:e,globalOverlay:t}){let r=s.useRef(null);let n=s.useRef(null);let o=s.useRef(null);let[,a]=s.useState();s.useLayoutEffect((()=>{const e=t?document:r.current.ownerDocument;n.current=e.createElement(\"nextjs-portal\");o.current=n.current.attachShadow({mode:\"open\"});e.body.appendChild(n.current);a({});return()=>{if(n.current&&n.current.ownerDocument){n.current.ownerDocument.body.removeChild(n.current)}}}),[t]);return o.current?(0,l.createPortal)(e,o.current):t?null:(0,i.jsx)(\"span\",{ref:r})};t.ShadowPortal=u},7215:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,\"__esModule\",{value:true});t.Terminal=void 0;const s=r(505);const l=i(r(7997));const u=a(r(7522));const c=function Terminal({content:e}){const t=u.useMemo((()=>l.default.ansiToJson(e,{json:true,use_classes:true,remove_empty:true})),[e]);return(0,s.jsx)(\"div\",{\"data-nextjs-terminal\":true,children:(0,s.jsx)(\"pre\",{children:t.map(((e,t)=>(0,s.jsx)(\"span\",{style:{color:e.fg?`var(--color-${e.fg})`:undefined,...e.decoration===\"bold\"?{fontWeight:800}:e.decoration===\"italic\"?{fontStyle:\"italic\"}:undefined},children:e.content},`terminal-entry-${t}`)))})})};t.Terminal=c},8236:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.Terminal=void 0;var n=r(7215);Object.defineProperty(t,\"Terminal\",{enumerable:true,get:function(){return n.Terminal}})},5488:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.styles=void 0;const n=r(8910);const o=(0,n.noop)`\n [data-nextjs-terminal] {\n border-radius: var(--size-gap-half);\n background-color: var(--color-ansi-bg);\n color: var(--color-ansi-fg);\n }\n [data-nextjs-terminal]::selection,\n [data-nextjs-terminal] *::selection {\n background-color: var(--color-ansi-selection);\n }\n [data-nextjs-terminal] * {\n color: inherit;\n background-color: transparent;\n font-family: var(--font-stack-monospace);\n }\n [data-nextjs-terminal] > * {\n margin: 0;\n padding: calc(var(--size-gap) + var(--size-gap-half))\n calc(var(--size-gap-double) + var(--size-gap-half));\n }\n\n [data-nextjs-terminal] pre {\n white-space: pre-wrap;\n word-break: break-word;\n }\n`;t.styles=o},9683:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.Toast=void 0;const n=r(505);const o=function Toast({onClick:e,children:t,className:r}){return(0,n.jsx)(\"div\",{\"data-nextjs-toast\":true,onClick:e,className:r,children:(0,n.jsx)(\"div\",{\"data-nextjs-toast-wrapper\":true,children:t})})};t.Toast=o},1120:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.Toast=t.styles=void 0;var n=r(2069);Object.defineProperty(t,\"styles\",{enumerable:true,get:function(){return n.styles}});var o=r(9683);Object.defineProperty(t,\"Toast\",{enumerable:true,get:function(){return o.Toast}})},2069:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.styles=void 0;const n=r(8910);const o=(0,n.noop)`\n [data-nextjs-toast] {\n position: fixed;\n bottom: var(--size-gap-double);\n left: var(--size-gap-double);\n max-width: 420px;\n z-index: 9000;\n }\n\n @media (max-width: 440px) {\n [data-nextjs-toast] {\n max-width: 90vw;\n left: 5vw;\n }\n }\n\n [data-nextjs-toast-wrapper] {\n padding: 16px;\n border-radius: var(--size-gap-half);\n font-weight: 500;\n color: var(--color-ansi-bright-white);\n background-color: var(--color-ansi-red);\n box-shadow: 0px var(--size-gap-double) var(--size-gap-quad)\n rgba(0, 0, 0, 0.25);\n }\n`;t.styles=o},5936:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,\"__esModule\",{value:true});t.styles=t.BuildError=void 0;const i=r(505);const s=a(r(7522));const l=r(5651);const u=r(8278);const c=r(8236);const d=r(8910);const f=function BuildError({message:e}){const t=s.useCallback((()=>{}),[]);return(0,i.jsx)(u.Overlay,{fixed:true,children:(0,i.jsx)(l.Dialog,{type:\"error\",\"aria-labelledby\":\"nextjs__container_build_error_label\",\"aria-describedby\":\"nextjs__container_build_error_desc\",onClose:t,children:(0,i.jsxs)(l.DialogContent,{children:[(0,i.jsx)(l.DialogHeader,{className:\"nextjs-container-build-error-header\",children:(0,i.jsx)(\"h4\",{id:\"nextjs__container_build_error_label\",children:\"Failed to compile\"})}),(0,i.jsxs)(l.DialogBody,{className:\"nextjs-container-build-error-body\",children:[(0,i.jsx)(c.Terminal,{content:e}),(0,i.jsx)(\"footer\",{children:(0,i.jsx)(\"p\",{id:\"nextjs__container_build_error_desc\",children:(0,i.jsx)(\"small\",{children:\"This error occurred during the build process and can only be dismissed by fixing the error.\"})})})]})]})})})};t.BuildError=f;t.styles=(0,d.noop)`\n .nextjs-container-build-error-header > h4 {\n line-height: 1.5;\n margin: 0;\n padding: 0;\n }\n\n .nextjs-container-build-error-body footer {\n margin-top: var(--size-gap);\n }\n .nextjs-container-build-error-body footer p {\n margin: 0;\n }\n\n .nextjs-container-build-error-body small {\n color: var(--color-font);\n }\n`},4355:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,\"__esModule\",{value:true});t.styles=t.Errors=void 0;const i=r(505);const s=a(r(7522));const l=r(5851);const u=r(5651);const c=r(2732);const d=r(8278);const f=r(1120);const p=r(403);const m=r(5233);const v=r(8910);const b=r(865);const g=r(2484);function getErrorSignature(e){const{event:t}=e;switch(t.type){case l.TYPE_UNHANDLED_ERROR:case l.TYPE_UNHANDLED_REJECTION:{return`${t.reason.name}::${t.reason.message}::${t.reason.stack}`}default:{}}const r=t;return\"\"}const h=function HotlinkedText(e){const{text:t}=e;const r=/https?:\\/\\/[^\\s/$.?#].[^\\s)'\"]*/i;return(0,i.jsx)(i.Fragment,{children:r.test(t)?t.split(\" \").map(((e,t,n)=>{if(r.test(e)){const o=r.exec(e);return(0,i.jsxs)(s.Fragment,{children:[o&&(0,i.jsx)(\"a\",{href:o[0],target:\"_blank\",rel:\"noreferrer noopener\",children:e}),t===n.length-1?\"\":\" \"]},`link-${t}`)}return t===n.length-1?(0,i.jsx)(s.Fragment,{children:e},`text-${t}`):(0,i.jsxs)(s.Fragment,{children:[e,\" \"]},`text-${t}`)})):t})};const y=function Errors({errors:e}){const[t,r]=s.useState({});const[n,o]=s.useMemo((()=>{let r=[];let n=null;for(let o=0;o<e.length;++o){const a=e[o];const{id:i}=a;if(i in t){r.push(t[i]);continue}if(o>0){const t=e[o-1];if(getErrorSignature(t)===getErrorSignature(a)){continue}}n=a;break}return[r,n]}),[e,t]);const a=s.useMemo((()=>n.length<1&&Boolean(e.length)),[e.length,n.length]);s.useEffect((()=>{if(o==null){return}let e=true;(0,p.getErrorByType)(o).then((t=>{if(e){r((e=>({...e,[t.id]:t})))}}),(()=>{}));return()=>{e=false}}),[o]);const[l,v]=s.useState(\"fullscreen\");const[y,x]=s.useState(0);const _=s.useCallback((e=>{e?.preventDefault();x((e=>Math.max(0,e-1)))}),[]);const w=s.useCallback((e=>{e?.preventDefault();x((e=>Math.max(0,Math.min(n.length-1,e+1))))}),[n.length]);const E=s.useMemo((()=>n[y]??null),[y,n]);s.useEffect((()=>{if(e.length<1){r({});v(\"hidden\");x(0)}}),[e.length]);const j=s.useCallback((e=>{e?.preventDefault();v(\"minimized\")}),[]);const O=s.useCallback((e=>{e?.preventDefault();v(\"hidden\")}),[]);const k=s.useCallback((e=>{e?.preventDefault();v(\"fullscreen\")}),[]);if(e.length<1||E==null){return null}if(a){return(0,i.jsx)(d.Overlay,{})}if(l===\"hidden\"){return null}if(l===\"minimized\"){return(0,i.jsx)(f.Toast,{className:\"nextjs-toast-errors-parent\",onClick:k,children:(0,i.jsxs)(\"div\",{className:\"nextjs-toast-errors\",children:[(0,i.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"24\",height:\"24\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[(0,i.jsx)(\"circle\",{cx:\"12\",cy:\"12\",r:\"10\"}),(0,i.jsx)(\"line\",{x1:\"12\",y1:\"8\",x2:\"12\",y2:\"12\"}),(0,i.jsx)(\"line\",{x1:\"12\",y1:\"16\",x2:\"12.01\",y2:\"16\"})]}),(0,i.jsxs)(\"span\",{children:[n.length,\" error\",n.length>1?\"s\":\"\"]}),(0,i.jsx)(\"button\",{\"data-nextjs-toast-errors-hide-button\":true,className:\"nextjs-toast-errors-hide-button\",type:\"button\",onClick:e=>{e.stopPropagation();O()},\"aria-label\":\"Hide Errors\",children:(0,i.jsx)(b.CloseIcon,{})})]})})}const S=[\"server\",\"edge-server\"].includes((0,m.getErrorSource)(E.error)||\"\");return(0,i.jsx)(d.Overlay,{children:(0,i.jsx)(u.Dialog,{type:\"error\",\"aria-labelledby\":\"nextjs__container_errors_label\",\"aria-describedby\":\"nextjs__container_errors_desc\",onClose:S?undefined:j,children:(0,i.jsxs)(u.DialogContent,{children:[(0,i.jsxs)(u.DialogHeader,{className:\"nextjs-container-errors-header\",children:[(0,i.jsx)(c.LeftRightDialogHeader,{previous:y>0?_:null,next:y<n.length-1?w:null,close:S?undefined:j,children:(0,i.jsxs)(\"small\",{children:[(0,i.jsx)(\"span\",{children:y+1}),\" of\",\" \",(0,i.jsx)(\"span\",{children:n.length}),\" unhandled error\",n.length<2?\"\":\"s\"]})}),(0,i.jsx)(\"h1\",{id:\"nextjs__container_errors_label\",children:S?\"Server Error\":\"Unhandled Runtime Error\"}),(0,i.jsxs)(\"p\",{id:\"nextjs__container_errors_desc\",children:[E.error.name,\":\",\" \",(0,i.jsx)(h,{text:E.error.message})]}),S?(0,i.jsx)(\"div\",{children:(0,i.jsx)(\"small\",{children:\"This error happened while generating the page. Any console logs will be displayed in the terminal window.\"})}):undefined]}),(0,i.jsx)(u.DialogBody,{className:\"nextjs-container-errors-body\",children:(0,i.jsx)(g.RuntimeError,{error:E},E.id.toString())})]})})})};t.Errors=y;t.styles=(0,v.noop)`\n .nextjs-container-errors-header > h1 {\n font-size: var(--size-font-big);\n line-height: var(--size-font-bigger);\n font-weight: bold;\n margin: 0;\n margin-top: calc(var(--size-gap-double) + var(--size-gap-half));\n }\n .nextjs-container-errors-header small {\n font-size: var(--size-font-small);\n color: var(--color-accents-1);\n margin-left: var(--size-gap-double);\n }\n .nextjs-container-errors-header small > span {\n font-family: var(--font-stack-monospace);\n }\n .nextjs-container-errors-header > p {\n font-family: var(--font-stack-monospace);\n font-size: var(--size-font-small);\n line-height: var(--size-font-big);\n font-weight: bold;\n margin: 0;\n margin-top: var(--size-gap-half);\n color: var(--color-ansi-red);\n white-space: pre-wrap;\n }\n .nextjs-container-errors-header > div > small {\n margin: 0;\n margin-top: var(--size-gap-half);\n }\n .nextjs-container-errors-header > p > a {\n color: var(--color-ansi-red);\n }\n\n .nextjs-container-errors-body > h2:not(:first-child) {\n margin-top: calc(var(--size-gap-double) + var(--size-gap));\n }\n .nextjs-container-errors-body > h2 {\n margin-bottom: var(--size-gap);\n font-size: var(--size-font-big);\n }\n\n .nextjs-toast-errors-parent {\n cursor: pointer;\n transition: transform 0.2s ease;\n }\n .nextjs-toast-errors-parent:hover {\n transform: scale(1.1);\n }\n .nextjs-toast-errors {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n }\n .nextjs-toast-errors > svg {\n margin-right: var(--size-gap);\n }\n .nextjs-toast-errors-hide-button {\n margin-left: var(--size-gap-triple);\n border: none;\n background: none;\n color: var(--color-ansi-bright-white);\n padding: 0;\n transition: opacity 0.25s ease;\n opacity: 0.7;\n }\n .nextjs-toast-errors-hide-button:hover {\n opacity: 1;\n }\n`},2484:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,\"__esModule\",{value:true});t.RuntimeError=t.styles=void 0;const i=r(505);const s=a(r(7522));const l=r(1413);const u=r(8910);const c=r(7504);const d=function CallStackFrame({frame:e}){const t=e.originalStackFrame??e.sourceStackFrame;const r=Boolean(e.originalCodeFrame);const n=s.useCallback((()=>{if(!r)return;const e=new URLSearchParams;for(const r in t){e.append(r,(t[r]??\"\").toString())}self.fetch(`${ false||\"\"}/__nextjs_launch-editor?${e.toString()}`).then((()=>{}),(()=>{console.error(\"There was an issue opening this code in your editor.\")}))}),[r,t]);return(0,i.jsxs)(\"div\",{\"data-nextjs-call-stack-frame\":true,children:[(0,i.jsx)(\"h3\",{\"data-nextjs-frame-expanded\":Boolean(e.expanded),children:t.methodName}),(0,i.jsxs)(\"div\",{\"data-has-source\":r?\"true\":undefined,tabIndex:r?10:undefined,role:r?\"link\":undefined,onClick:n,title:r?\"Click to open in your editor\":undefined,children:[(0,i.jsx)(\"span\",{children:(0,c.getFrameSource)(t)}),(0,i.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[(0,i.jsx)(\"path\",{d:\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}),(0,i.jsx)(\"polyline\",{points:\"15 3 21 3 21 9\"}),(0,i.jsx)(\"line\",{x1:\"10\",y1:\"14\",x2:\"21\",y2:\"3\"})]})]})]})};const f=function RuntimeError({error:e}){const t=s.useMemo((()=>e.frames.findIndex((e=>e.expanded&&Boolean(e.originalCodeFrame)&&Boolean(e.originalStackFrame)))),[e.frames]);const r=s.useMemo((()=>e.frames[t]??null),[e.frames,t]);const n=s.useMemo((()=>t<0?[]:e.frames.slice(0,t)),[e.frames,t]);const[o,a]=s.useState(r==null);const u=s.useCallback((()=>{a((e=>!e))}),[]);const c=s.useMemo((()=>n.filter((e=>e.expanded||o))),[o,n]);const f=s.useMemo((()=>e.frames.slice(t+1)),[e.frames,t]);const p=s.useMemo((()=>f.filter((e=>e.expanded||o))),[o,f]);const m=s.useMemo((()=>f.length!==p.length||o&&r!=null),[o,f.length,r,p.length]);return(0,i.jsxs)(s.Fragment,{children:[r?(0,i.jsxs)(s.Fragment,{children:[(0,i.jsx)(\"h2\",{children:\"Source\"}),c.map(((e,t)=>(0,i.jsx)(d,{frame:e},`leading-frame-${t}-${o}`))),(0,i.jsx)(l.CodeFrame,{stackFrame:r.originalStackFrame,codeFrame:r.originalCodeFrame})]}):undefined,e.componentStack?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(\"h2\",{children:\"Component Stack\"}),e.componentStack.map(((e,t)=>(0,i.jsx)(\"div\",{\"data-nextjs-component-stack-frame\":true,children:(0,i.jsx)(\"h3\",{children:e})},t)))]}):null,p.length?(0,i.jsxs)(s.Fragment,{children:[(0,i.jsx)(\"h2\",{children:\"Call Stack\"}),p.map(((e,t)=>(0,i.jsx)(d,{frame:e},`call-stack-${t}-${o}`)))]}):undefined,m?(0,i.jsx)(s.Fragment,{children:(0,i.jsxs)(\"button\",{tabIndex:10,\"data-nextjs-data-runtime-error-collapsed-action\":true,type:\"button\",onClick:u,children:[o?\"Hide\":\"Show\",\" collapsed frames\"]})}):undefined]})};t.RuntimeError=f;t.styles=(0,u.noop)`\n button[data-nextjs-data-runtime-error-collapsed-action] {\n background: none;\n border: none;\n padding: 0;\n font-size: var(--size-font-small);\n line-height: var(--size-font-bigger);\n color: var(--color-accents-3);\n }\n\n [data-nextjs-call-stack-frame]:not(:last-child),\n [data-nextjs-component-stack-frame]:not(:last-child) {\n margin-bottom: var(--size-gap-double);\n }\n\n [data-nextjs-call-stack-frame] > h3,\n [data-nextjs-component-stack-frame] > h3 {\n margin-top: 0;\n margin-bottom: var(--size-gap);\n font-family: var(--font-stack-monospace);\n color: var(--color-stack-h6);\n }\n [data-nextjs-call-stack-frame] > h3[data-nextjs-frame-expanded='false'] {\n color: var(--color-stack-headline);\n }\n [data-nextjs-call-stack-frame] > div {\n display: flex;\n align-items: center;\n padding-left: calc(var(--size-gap) + var(--size-gap-half));\n font-size: var(--size-font-small);\n color: var(--color-stack-subline);\n }\n [data-nextjs-call-stack-frame] > div > svg {\n width: auto;\n height: var(--size-font-small);\n margin-left: var(--size-gap);\n\n display: none;\n }\n\n [data-nextjs-call-stack-frame] > div[data-has-source] {\n cursor: pointer;\n }\n [data-nextjs-call-stack-frame] > div[data-has-source]:hover {\n text-decoration: underline dotted;\n }\n [data-nextjs-call-stack-frame] > div[data-has-source] > svg {\n display: unset;\n }\n`},403:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.getErrorByType=void 0;const n=r(5851);const o=r(5233);const a=r(7504);async function getErrorByType(e){const{id:t,event:r}=e;switch(r.type){case n.TYPE_UNHANDLED_ERROR:case n.TYPE_UNHANDLED_REJECTION:{const e={id:t,runtime:true,error:r.reason,frames:await(0,a.getOriginalStackFrames)(r.frames,(0,o.getErrorSource)(r.reason),r.reason.toString())};if(r.type===n.TYPE_UNHANDLED_ERROR){e.componentStack=r.componentStack}return e}default:{break}}const i=r;throw new Error(\"type system invariant violation\")}t.getErrorByType=getErrorByType},5233:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.getServerError=t.decorateServerError=t.getErrorSource=t.getFilesystemFrame=void 0;const n=r(5974);function getFilesystemFrame(e){const t={...e};if(typeof t.file===\"string\"){if(t.file.startsWith(\"/\")||/^[a-z]:\\\\/i.test(t.file)||t.file.startsWith(\"\\\\\\\\\")){t.file=`file://${t.file}`}}return t}t.getFilesystemFrame=getFilesystemFrame;const o=Symbol(\"NextjsError\");function getErrorSource(e){return e[o]||null}t.getErrorSource=getErrorSource;function decorateServerError(e,t){Object.defineProperty(e,o,{writable:false,enumerable:false,configurable:false,value:t})}t.decorateServerError=decorateServerError;function getServerError(e,t){let r;try{throw new Error(e.message)}catch(e){r=e}r.name=e.name;try{r.stack=`${r.toString()}\\n${(0,n.parse)(e.stack).map(getFilesystemFrame).map((e=>{let t=` at ${e.methodName}`;if(e.file){let r=e.file;if(e.lineNumber){r+=`:${e.lineNumber}`;if(e.column){r+=`:${e.column}`}}t+=` (${r})`}return t})).join(\"\\n\")}`}catch{r.stack=e.stack}decorateServerError(r,t);return r}t.getServerError=getServerError},8910:function(e,t){Object.defineProperty(t,\"__esModule\",{value:true});t.noop=void 0;function noop(e,...t){const r=e.length-1;return e.slice(0,r).reduce(((e,r,n)=>e+r+t[n]),\"\")+e[r]}t.noop=noop},636:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.parseStack=void 0;const n=r(5974);const o=/\\/_next(\\/static\\/.+)/;function parseStack(e){const t=(0,n.parse)(e);return t.map((e=>{try{const t=new URL(e.file);const r=o.exec(t.pathname);if(r){const t=\"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\.next\"?.replace(/\\\\/g,\"/\")?.replace(/\\/$/,\"\");if(t){e.file=\"file://\"+t.concat(r.pop())}}}catch{}return e}))}t.parseStack=parseStack},7504:function(e,t){Object.defineProperty(t,\"__esModule\",{value:true});t.getFrameSource=t.getOriginalStackFrames=t.getOriginalStackFrame=void 0;function getOriginalStackFrame(e,t,r){async function _getOriginalStackFrame(){const n=new URLSearchParams;n.append(\"isServer\",String(t===\"server\"));n.append(\"isEdgeServer\",String(t===\"edge-server\"));n.append(\"errorMessage\",r);for(const t in e){n.append(t,(e[t]??\"\").toString())}const o=new AbortController;const a=setTimeout((()=>o.abort()),3e3);const i=await self.fetch(`${ false||\"\"}/__nextjs_original-stack-frame?${n.toString()}`,{signal:o.signal}).finally((()=>{clearTimeout(a)}));if(!i.ok||i.status===204){return Promise.reject(new Error(await i.text()))}const s=await i.json();return{error:false,reason:null,external:false,expanded:!Boolean((e.file?.includes(\"node_modules\")||s.originalStackFrame?.file?.includes(\"node_modules\"))??true),sourceStackFrame:e,originalStackFrame:s.originalStackFrame,originalCodeFrame:s.originalCodeFrame||null}}if(!(e.file?.startsWith(\"webpack-internal:\")||e.file?.startsWith(\"file:\"))){return Promise.resolve({error:false,reason:null,external:true,expanded:false,sourceStackFrame:e,originalStackFrame:null,originalCodeFrame:null})}return _getOriginalStackFrame().catch((t=>({error:true,reason:t?.message??t?.toString()??\"Unknown Error\",external:false,expanded:false,sourceStackFrame:e,originalStackFrame:null,originalCodeFrame:null})))}t.getOriginalStackFrame=getOriginalStackFrame;function getOriginalStackFrames(e,t,r){return Promise.all(e.map((e=>getOriginalStackFrame(e,t,r))))}t.getOriginalStackFrames=getOriginalStackFrames;function getFrameSource(e){let t=\"\";try{const r=new URL(e.file);if(typeof globalThis!==\"undefined\"&&globalThis.location?.origin!==r.origin){if(r.origin===\"null\"){t+=r.protocol}else{t+=r.origin}}t+=r.pathname;t+=\" \"}catch{t+=(e.file||\"(unknown)\")+\" \"}if(e.lineNumber!=null){if(e.column!=null){t+=`(${e.lineNumber}:${e.column}) `}else{t+=`(${e.lineNumber}) `}}return t.slice(0,-1)}t.getFrameSource=getFrameSource},7169:function(e,t,r){var n=this&&this.__createBinding||(Object.create?function(e,t,r,n){if(n===undefined)n=r;var o=Object.getOwnPropertyDescriptor(t,r);if(!o||(\"get\"in o?!t.__esModule:o.writable||o.configurable)){o={enumerable:true,get:function(){return t[r]}}}Object.defineProperty(e,n,o)}:function(e,t,r,n){if(n===undefined)n=r;e[n]=t[r]});var o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:true,value:t})}:function(e,t){e[\"default\"]=t});var a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(r!==\"default\"&&Object.prototype.hasOwnProperty.call(e,r))n(t,e,r);o(t,e);return t};Object.defineProperty(t,\"__esModule\",{value:true});t.useOnClickOutside=void 0;const i=a(r(7522));function useOnClickOutside(e,t){i.useEffect((()=>{if(e==null||t==null){return}const listener=r=>{if(!e||e.contains(r.target)){return}t(r)};const r=e.getRootNode();r.addEventListener(\"mousedown\",listener);r.addEventListener(\"touchstart\",listener);return function(){r.removeEventListener(\"mousedown\",listener);r.removeEventListener(\"touchstart\",listener)}}),[t,e])}t.useOnClickOutside=useOnClickOutside},865:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.CloseIcon=void 0;const n=r(505);const CloseIcon=()=>(0,n.jsxs)(\"svg\",{width:\"24\",height:\"24\",viewBox:\"0 0 24 24\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,n.jsx)(\"path\",{d:\"M18 6L6 18\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"}),(0,n.jsx)(\"path\",{d:\"M6 6L18 18\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})]});t.CloseIcon=CloseIcon},884:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.Base=void 0;const n=r(505);const o=r(8910);function Base(){return(0,n.jsx)(\"style\",{children:(0,o.noop)`\n :host {\n --size-gap-half: 4px;\n --size-gap: 8px;\n --size-gap-double: 16px;\n --size-gap-triple: 24px;\n --size-gap-quad: 32px;\n\n --size-font-small: 14px;\n --size-font: 16px;\n --size-font-big: 20px;\n --size-font-bigger: 24px;\n\n --color-background: white;\n --color-font: #757575;\n --color-backdrop: rgba(17, 17, 17, 0.2);\n\n --color-stack-h6: #222;\n --color-stack-headline: #666;\n --color-stack-subline: #999;\n\n --color-accents-1: #808080;\n --color-accents-2: #222222;\n --color-accents-3: #404040;\n\n --font-stack-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono',\n Menlo, Courier, monospace;\n\n --color-ansi-selection: rgba(95, 126, 151, 0.48);\n --color-ansi-bg: #111111;\n --color-ansi-fg: #cccccc;\n\n --color-ansi-white: #777777;\n --color-ansi-black: #141414;\n --color-ansi-blue: #00aaff;\n --color-ansi-cyan: #88ddff;\n --color-ansi-green: #98ec65;\n --color-ansi-magenta: #aa88ff;\n --color-ansi-red: #ff5555;\n --color-ansi-yellow: #ffcc33;\n --color-ansi-bright-white: #ffffff;\n --color-ansi-bright-black: #777777;\n --color-ansi-bright-blue: #33bbff;\n --color-ansi-bright-cyan: #bbecff;\n --color-ansi-bright-green: #b6f292;\n --color-ansi-bright-magenta: #cebbff;\n --color-ansi-bright-red: #ff8888;\n --color-ansi-bright-yellow: #ffd966;\n }\n\n @media (prefers-color-scheme: dark) {\n :host {\n --color-background: rgb(28, 28, 30);\n --color-font: white;\n --color-backdrop: rgb(44, 44, 46);\n\n --color-stack-h6: rgb(200, 200, 204);\n --color-stack-headline: rgb(99, 99, 102);\n --color-stack-subline: rgba(142, 142, 147);\n\n --color-accents-3: rgb(118, 118, 118);\n }\n }\n\n .mono {\n font-family: var(--font-stack-monospace);\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-bottom: var(--size-gap);\n font-weight: 500;\n line-height: 1.5;\n }\n `})}t.Base=Base},4464:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.ComponentStyles=void 0;const n=r(505);const o=r(399);const a=r(5651);const i=r(6543);const s=r(993);const l=r(5488);const u=r(1120);const c=r(5936);const d=r(4355);const f=r(2484);const p=r(8910);function ComponentStyles(){return(0,n.jsx)(\"style\",{children:(0,p.noop)`\n ${s.styles}\n ${u.styles}\n ${a.styles}\n ${i.styles}\n ${o.styles}\n ${l.styles}\n \n ${c.styles}\n ${d.styles}\n ${f.styles}\n `})}t.ComponentStyles=ComponentStyles},9495:function(e,t,r){Object.defineProperty(t,\"__esModule\",{value:true});t.CssReset=void 0;const n=r(505);const o=r(8910);function CssReset(){return(0,n.jsx)(\"style\",{children:(0,o.noop)`\n :host {\n all: initial;\n\n /* the direction property is not reset by 'all' */\n direction: ltr;\n }\n\n /*!\n * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n :host {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n }\n\n article,\n aside,\n figcaption,\n figure,\n footer,\n header,\n hgroup,\n main,\n nav,\n section {\n display: block;\n }\n\n :host {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\n 'Helvetica Neue', Arial, 'Noto Sans', sans-serif,\n 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n 'Noto Color Emoji';\n font-size: 16px;\n font-weight: 400;\n line-height: 1.5;\n color: var(--color-font);\n text-align: left;\n background-color: #fff;\n }\n\n [tabindex='-1']:focus:not(:focus-visible) {\n outline: 0 !important;\n }\n\n hr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-top: 0;\n margin-bottom: 8px;\n }\n\n p {\n margin-top: 0;\n margin-bottom: 16px;\n }\n\n abbr[title],\n abbr[data-original-title] {\n text-decoration: underline;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n }\n\n address {\n margin-bottom: 16px;\n font-style: normal;\n line-height: inherit;\n }\n\n ol,\n ul,\n dl {\n margin-top: 0;\n margin-bottom: 16px;\n }\n\n ol ol,\n ul ul,\n ol ul,\n ul ol {\n margin-bottom: 0;\n }\n\n dt {\n font-weight: 700;\n }\n\n dd {\n margin-bottom: 8px;\n margin-left: 0;\n }\n\n blockquote {\n margin: 0 0 16px;\n }\n\n b,\n strong {\n font-weight: bolder;\n }\n\n small {\n font-size: 80%;\n }\n\n sub,\n sup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n }\n\n sub {\n bottom: -0.25em;\n }\n\n sup {\n top: -0.5em;\n }\n\n a {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n }\n\n a:hover {\n color: #0056b3;\n text-decoration: underline;\n }\n\n a:not([href]) {\n color: inherit;\n text-decoration: none;\n }\n\n a:not([href]):hover {\n color: inherit;\n text-decoration: none;\n }\n\n pre,\n code,\n kbd,\n samp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas,\n 'Liberation Mono', 'Courier New', monospace;\n font-size: 1em;\n }\n\n pre {\n margin-top: 0;\n margin-bottom: 16px;\n overflow: auto;\n }\n\n figure {\n margin: 0 0 16px;\n }\n\n img {\n vertical-align: middle;\n border-style: none;\n }\n\n svg {\n overflow: hidden;\n vertical-align: middle;\n }\n\n table {\n border-collapse: collapse;\n }\n\n caption {\n padding-top: 12px;\n padding-bottom: 12px;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n }\n\n th {\n text-align: inherit;\n }\n\n label {\n display: inline-block;\n margin-bottom: 8px;\n }\n\n button {\n border-radius: 0;\n }\n\n button:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n }\n\n input,\n button,\n select,\n optgroup,\n textarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n }\n\n button,\n input {\n overflow: visible;\n }\n\n button,\n select {\n text-transform: none;\n }\n\n select {\n word-wrap: normal;\n }\n\n button,\n [type='button'],\n [type='reset'],\n [type='submit'] {\n -webkit-appearance: button;\n }\n\n button:not(:disabled),\n [type='button']:not(:disabled),\n [type='reset']:not(:disabled),\n [type='submit']:not(:disabled) {\n cursor: pointer;\n }\n\n button::-moz-focus-inner,\n [type='button']::-moz-focus-inner,\n [type='reset']::-moz-focus-inner,\n [type='submit']::-moz-focus-inner {\n padding: 0;\n border-style: none;\n }\n\n input[type='radio'],\n input[type='checkbox'] {\n box-sizing: border-box;\n padding: 0;\n }\n\n input[type='date'],\n input[type='time'],\n input[type='datetime-local'],\n input[type='month'] {\n -webkit-appearance: listbox;\n }\n\n textarea {\n overflow: auto;\n resize: vertical;\n }\n\n fieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n }\n\n legend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: 8px;\n font-size: 24px;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n }\n\n progress {\n vertical-align: baseline;\n }\n\n [type='number']::-webkit-inner-spin-button,\n [type='number']::-webkit-outer-spin-button {\n height: auto;\n }\n\n [type='search'] {\n outline-offset: -2px;\n -webkit-appearance: none;\n }\n\n [type='search']::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n ::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n }\n\n output {\n display: inline-block;\n }\n\n summary {\n display: list-item;\n cursor: pointer;\n }\n\n template {\n display: none;\n }\n\n [hidden] {\n display: none !important;\n }\n `})}t.CssReset=CssReset},7997:function(e){e.exports=__webpack_require__(/*! next/dist/compiled/anser */ \"./node_modules/next/dist/compiled/anser/index.js\")},7292:function(e){e.exports=__webpack_require__(/*! next/dist/compiled/css.escape */ \"./node_modules/next/dist/compiled/css.escape/css.escape.js\")},7709:function(e){e.exports=__webpack_require__(/*! next/dist/compiled/platform */ \"./node_modules/next/dist/compiled/platform/platform.js\")},5974:function(e){e.exports=__webpack_require__(/*! next/dist/compiled/stacktrace-parser */ \"./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\")},7518:function(e){e.exports=__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"./node_modules/next/dist/compiled/strip-ansi/index.js\")},7522:function(e){e.exports=__webpack_require__(/*! react */ \"./node_modules/react/index.js\")},2255:function(e){e.exports=__webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\")}};var t={};function __nccwpck_require__(r){var n=t[r];if(n!==undefined){return n.exports}var o=t[r]={exports:{}};var a=true;try{e[r].call(o.exports,o,o.exports,__nccwpck_require__);a=false}finally{if(a)delete t[r]}return o.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var r=__nccwpck_require__(5204);module.exports=r})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL0BuZXh0L3JlYWN0LWRldi1vdmVybGF5L2Rpc3QvY2xpZW50LmpzIiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLGFBQWEsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHNDQUFzQyw0Q0FBNEMscUJBQXFCLDRCQUE0Qiw2RUFBNkUsaUJBQWlCLDJCQUEyQixJQUFJLG1CQUFtQixhQUFhLHdCQUF3QixVQUFVLDJDQUEyQyxhQUFhLFNBQVMsWUFBWSxLQUFLLEtBQUssZ0NBQWdDLHFEQUFxRCxZQUFZLEdBQUcsOEJBQThCLGFBQWEsU0FBUyxzREFBc0QsT0FBTyxHQUFHLCtCQUErQix3Q0FBd0MsYUFBYSxZQUFZLFNBQVMsY0FBYyx3REFBd0QsTUFBTSxrQkFBa0IsTUFBTSxZQUFZLG1CQUFtQixLQUFLLHVCQUF1QixnQkFBZ0IsZ0JBQWdCLFdBQVcsTUFBTSxPQUFPLFlBQVksV0FBVyxLQUFLLG1CQUFtQixtQkFBbUIsVUFBVTtBQUNoaUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsSUFBbUMsRUFBRSxZQUFZLGFBQWEsY0FBYyxjQUFjLFlBQVksWUFBWSxpQkFBaUIsWUFBWSxZQUFZLFlBQVksWUFBWSxZQUFZLFlBQVksWUFBWSxZQUFZLFlBQVksWUFBWSxZQUFZLFlBQVksWUFBWSxZQUFZLFlBQVksWUFBWSxZQUFZLDJDQUEyQyxpQkFBaUIscUJBQXFCLG9CQUFvQiwrQkFBK0IseUJBQXlCLHNCQUFzQixzQkFBc0IscUJBQXFCLHlCQUF5QixzQkFBc0IsMkJBQTJCLGtCQUFrQixrQkFBa0IsbUJBQW1CLDBCQUEwQix5QkFBeUIsbUJBQW1CLHVCQUF1Qiw4QkFBOEIsdUJBQXVCLDJCQUEyQixrREFBa0QsbUJBQW1CLDBCQUEwQixrQ0FBa0MsWUFBWSxvQkFBb0IsMEJBQTBCLFNBQVMsWUFBWSwyREFBMkQsbUJBQW1CLHNEQUFzRCxJQUFJLEtBQUssb0JBQW9CLDJCQUEyQiw4QkFBOEIsK0JBQStCLDJCQUEyQixXQUFXLFFBQVEsZ0JBQWdCLHlCQUF5QixXQUFXLEdBQUcseUJBQXlCLHFEQUFxRCxZQUFZLCtCQUErQiwrQ0FBK0MsWUFBWSxnRUFBZ0UsWUFBWSxrQ0FBa0MsNkhBQTZILGFBQWEsYUFBYSwrQkFBK0IsZ0NBQWdDLDZDQUE2QywyQkFBMkIsZ0NBQWdDLDZCQUE2QixZQUFZLGFBQWEsNEJBQTRCLHVIQUF1SCwwQkFBMEIsbUNBQW1DLHdCQUF3QixTQUFTLFVBQVUsaUNBQWlDLHNCQUFzQix3QkFBd0IsMEJBQTBCLHdCQUF3Qiw0QkFBNEIsd0JBQXdCLG1CQUFtQixlQUFlLHFDQUFxQyxlQUFlLDhDQUE4QyxzREFBc0QsdUNBQXVDLDBDQUEwQyxRQUFRLFFBQVEsaUJBQWlCLGNBQWMsSUFBSSw4QkFBOEIsU0FBUyxlQUFlLFlBQVksUUFBUSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLHdCQUF3QixvQ0FBb0Msd0JBQXdCLFVBQVUsY0FBYyxlQUFlLGVBQWUsZ0JBQWdCLGdCQUFnQix5QkFBeUIsbUJBQW1CLE9BQU8sbUVBQW1FLGlDQUFpQyxnRUFBZ0UsRUFBRSxLQUFLLHlCQUF5QixJQUFJLFVBQVUsT0FBTyxpREFBaUQsaUNBQWlDLFFBQVEsSUFBSSxRQUFRLFdBQVcsSUFBSSxRQUFRLFdBQVcsSUFBSSxRQUFRLFlBQVksSUFBSSxRQUFRLFlBQVksSUFBSSxRQUFRLHFCQUFxQixJQUFJLFFBQVEsZUFBZSxJQUFJLFFBQVEsRUFBRSxFQUFFLFFBQVEsMkZBQTJGLCtCQUErQixNQUFNLCtDQUErQyxrQkFBa0IsSUFBSSxjQUFjLFNBQVMsMkNBQTJDLGVBQWUsZ0JBQWdCLFlBQVksT0FBTyw4Q0FBOEMsUUFBUSwyQ0FBMkMsVUFBVSxVQUFVLGVBQWUsa0JBQWtCLFVBQVUsTUFBTSxPQUFPLDhCQUE4QixrQ0FBa0MsT0FBTyxZQUFZLGVBQWUsY0FBYyxJQUFJLE1BQU0sb0JBQW9CLGVBQWUsOENBQThDLGVBQWUsZUFBZSxFQUFFLGlEQUFpRCxJQUFJLDJCQUEyQixTQUFTLElBQUksNkJBQTZCLEtBQUssSUFBSSxZQUFZLFNBQVMsSUFBSSx3QkFBd0IsS0FBSyxJQUFJLGNBQWMsU0FBUyxJQUFJLEtBQUssU0FBUyxvQ0FBb0MsMEJBQTBCLDBCQUEwQixpQkFBaUIsaUJBQWlCLCtCQUErQixJQUFJLEtBQUssV0FBVyxTQUFTLGdCQUFnQixpQkFBaUIsR0FBRyxJQUFJLElBQUkscUJBQXFCLDRDQUE0QywwQkFBMEIsWUFBWSxVQUFVLGtCQUFrQixTQUFTLFFBQVEsU0FBUyxZQUFZLGVBQWUsMEJBQTBCLGlDQUFpQyw2Q0FBNkMsMEJBQTBCLFlBQVksU0FBUyxnREFBZ0QsOENBQThDLDRCQUE0QixrQkFBa0IsZ0NBQWdDLHFEQUFxRCxZQUFZLFNBQVMsMkJBQTJCLDJEQUEyRCx3QkFBd0Isd0NBQXdDLFVBQVUsd0RBQXdELDREQUE0RCx3QkFBd0IsbUJBQW1CLHVEQUF1RCwrREFBK0Qsd0RBQXdELFFBQVEsUUFBUSxpQkFBaUIsY0FBYyxJQUFJLHNEQUFzRCxhQUFhLFNBQVMsU0FBUywrQkFBK0IsMkNBQTJDLE1BQU0sZUFBZSwyRUFBMkUsd0JBQXdCLEtBQUssNkJBQTZCLG9DQUFvQywwREFBMEQsZ0JBQWdCLFdBQVcsYUFBYSxJQUFJLDZCQUE2QixpRUFBaUUsbU1BQW1NLDZCQUE2QixRQUFRLG9FQUFvRSxTQUFTLElBQUksNkJBQTZCLGlDQUFpQyx3REFBd0QsdVJBQXVSLG9DQUFvQywwQ0FBMEMsa0JBQWtCLGlDQUFpQyx3Q0FBd0Msd0NBQXdDLDBCQUEwQixzQ0FBc0MsT0FBTyw2Q0FBNkMsTUFBTSxNQUFNLE9BQU8sS0FBSyx5QkFBeUIsb0JBQW9CLG1EQUFtRCx3QkFBd0IsZUFBZSx5QkFBeUIseUJBQXlCLG9CQUFvQixtREFBbUQsd0JBQXdCLGVBQWUseUJBQXlCLG9EQUFvRCxtRUFBbUUsdUNBQXVDLFVBQVUseVpBQXlaLGFBQWEsMENBQTBDLHFDQUFxQyxPQUFPLE9BQU8sZ1FBQWdRLDBDQUEwQywrQkFBK0IsNENBQTRDLEdBQUcsMENBQTBDLHFDQUFxQyxPQUFPLE9BQU8sZ1FBQWdRLDBDQUEwQywrQkFBK0IsNENBQTRDLEdBQUcseUNBQXlDLE9BQU8saURBQWlELFlBQVksNENBQTRDLDhEQUE4RCxFQUFFLGlDQUFpQywyREFBMkQsRUFBRSxtQ0FBbUMsMkRBQTJELEVBQUUsa0JBQWtCLHVCQUF1QixrQkFBa0IsVUFBVSw0QkFBNEIsTUFBTSxTQUFTLFdBQVcsV0FBVyxrQkFBa0IsT0FBTyxtQkFBbUIsV0FBVyxtQkFBbUIsUUFBUSwwQ0FBMEMsWUFBWSxzQ0FBc0MsV0FBVyxzQkFBc0IscUJBQXFCLFlBQVkscUJBQXFCLFlBQVksU0FBUywrREFBK0QsTUFBTSxnQ0FBZ0MsTUFBTSxpQ0FBaUMsNENBQTRDLDBCQUEwQiwrQkFBK0IsNkNBQTZDLE1BQU0sZUFBZSwyRUFBMkUsd0JBQXdCLEtBQUssNkJBQTZCLE9BQU8sUUFBUSw0QkFBNEIsc0RBQXNELHdDQUF3QyxjQUFjLHVDQUF1QyxNQUFNLGlEQUFpRCxVQUFVLHdDQUF3QyxrQkFBa0IseUNBQXlDLG1CQUFtQiw0Q0FBNEMsVUFBVSxTQUFTLDBDQUEwQyxvQ0FBb0MsT0FBTyxrREFBa0QsTUFBTSx3REFBd0QsVUFBVSxtQ0FBbUMsK0NBQStDLE9BQU8sd0JBQXdCLHNDQUFzQyxTQUFTLE9BQU8sVUFBVSxTQUFTLHNDQUFzQyxxRUFBcUUsbUNBQW1DLDBJQUEwSSx1Q0FBdUMsaUNBQWlDLHdCQUF3QixPQUFPLHFCQUFxQixZQUFZLFdBQVcsS0FBSyxXQUFXLHNCQUFzQiwyQkFBMkIsMkJBQTJCLGFBQWEseUJBQXlCLFdBQVcsdUJBQXVCLDBCQUEwQixrQkFBa0IsZ0JBQWdCLE1BQU0sMEJBQTBCLDRCQUE0QixxQ0FBcUMsK0JBQStCLGFBQWEsaURBQWlELE9BQU8sTUFBTSwwQkFBMEIsY0FBYywrREFBK0QsY0FBYyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIscUNBQXFDLHFDQUFxQyxPQUFPLDBCQUEwQiwwSEFBMEgsbUZBQW1GLHlJQUF5SSxtQ0FBbUMsMkJBQTJCLFlBQVksV0FBVyxLQUFLLFdBQVcsOEJBQThCLG1DQUFtQyx1SEFBdUgsc0NBQXNDLE9BQU8saUJBQWlCLG1DQUFtQywrREFBK0Qsd0NBQXdDLHlDQUF5Qyw0QkFBNEIsT0FBTyxTQUFTLDRFQUE0RSx5SUFBeUksb0NBQW9DLE1BQU0sS0FBSyxLQUFLLGlDQUFpQyxNQUFNLGFBQWEsU0FBUywwQkFBMEIsVUFBVSx1Q0FBdUMsa0RBQWtELHVFQUF1RSxLQUFLLFdBQVcsMkpBQTJKLHdCQUF3QixZQUFZLFNBQVMsTUFBTSxpQkFBaUIsa0JBQWtCLE1BQU0scUJBQXFCLFlBQVksV0FBVyxLQUFLLDBCQUEwQixrQkFBa0Isa0JBQWtCLEtBQUsscUtBQXFLLEtBQUsseUJBQXlCLG1CQUFtQix5QkFBeUIsS0FBSyxxQkFBcUIsVUFBVSx5Q0FBeUMsc0NBQXNDLDBDQUEwQyx1Q0FBdUMsZ0NBQWdDLCtCQUErQixTQUFTLFVBQVUsS0FBSztBQUM3bWQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsc0JBQXNCLGlCQUFpQiwyQ0FBMkMsaUJBQWlCLHFCQUFxQiwrQkFBK0Isa0hBQWtILHFDQUFxQyxrQkFBa0IsVUFBVSxlQUFlLHFCQUFxQiw2QkFBNkIsMEJBQTBCLDBEQUEwRCw0RUFBNEUsT0FBTyx3REFBd0QsUUFBUSxTQUFTLHFCQUFxQixHQUFHLEtBQW1DLENBQUMsRUFBbUIsS0FBSyxtQkFBbUIsb0JBQW9CLHNDQUFzQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsc0JBQXNCLDBDQUEwQyx5QkFBeUIsRUFBRSxXQUFXLGlDQUFpQyxTQUFTLHlDQUF5QyxTQUFTLDhCQUE4QiwwQkFBMEIsRUFBRSxNQUFNLE1BQU0sa1lBQWtZLDZCQUE2QixzQkFBc0IsZ0NBQWdDLGFBQWEscURBQXFELElBQUksNEJBQTRCLDhIQUE4SCw4Q0FBOEMsV0FBVyxFQUFFLDJCQUEyQixxQkFBcUIsb0JBQW9CLHNDQUFzQyxXQUFXLEVBQUUsK0NBQStDLCtCQUErQiw0QkFBNEIsRUFBRSxNQUFNLGFBQWEsaUJBQWlCLHlDQUF5QyxpQkFBaUIsMkNBQTJDLHVCQUF1QixVQUFVLEdBQUcsNEJBQTRCLDRCQUE0QixhQUFhLHdDQUF3Qyx5QkFBeUIsc0RBQXNELGFBQWEsdUJBQXVCLDBCQUEwQixnQkFBZ0Isb0NBQW9DLDJCQUEyQix1RkFBdUYsTUFBTSx5RUFBeUUsVUFBVSx5Q0FBeUMsMkZBQTJGLDBEQUEwRCxPQUFPLHlCQUF5QixnQ0FBZ0MsV0FBVyxxQ0FBcUMseUNBQXlDLHdCQUF3QixhQUFhLGFBQWEsT0FBTyxRQUFRLGtDQUFrQyxFQUFFLFNBQVMsMkNBQTJDLE1BQU0sbUNBQW1DLFFBQVEsaUJBQWlCLEdBQUcsU0FBUyw4SEFBOEgsOENBQThDLFdBQVcsRUFBRSwyQkFBMkIscUJBQXFCLHNCQUFzQixtRUFBbUUscUJBQXFCLDJDQUEyQyw2REFBNkQsR0FBRywrQkFBK0IsY0FBYyw2QkFBNkIsbUJBQW1CLHFCQUFxQixVQUFVLEVBQUUsa0VBQWtFLG1DQUFtQyx3QkFBd0IsRUFBRSxlQUFlLGVBQWUsRUFBRSwyQ0FBMkMsNEJBQTRCLFNBQVMsK0ZBQStGLE9BQU8sVUFBVSw4Q0FBOEMsMEJBQTBCLFlBQVksc0NBQXNDLFdBQVcsRUFBRSw0SUFBNEksbUJBQW1CLGVBQWUsZ0JBQWdCLGdCQUFnQiwwQkFBMEIsWUFBWSxnQkFBZ0IsNkJBQTZCLGlCQUFpQix5REFBeUQsT0FBTyx5RUFBeUUsNEJBQTRCLDBDQUEwQyw0RkFBNEYsVUFBVSxtSkFBbUosUUFBUSx1RkFBdUYsRUFBRSxpQ0FBaUMsa0JBQWtCLHlEQUF5RCxPQUFPLFVBQVUsUUFBUSwwRUFBMEUsRUFBRSxvQkFBb0IsTUFBTSxPQUFPLE9BQU8sSUFBSSw4QkFBOEIseUJBQXlCLElBQUksT0FBTyxrREFBa0QsbUVBQW1FLG9CQUFvQixzQkFBc0IsT0FBTyxPQUFPLFFBQVEsa0JBQWtCLElBQUksd0JBQXdCLE9BQU8sWUFBWSxxREFBcUQsc0VBQXNFLHdCQUF3QixxQkFBcUIsUUFBUSxxQkFBcUIsRUFBRSxzQkFBc0IseUJBQXlCLFFBQVEsa0NBQWtDLEVBQUUsNEJBQTRCLHFCQUFxQixRQUFRLG9CQUFvQixFQUFFLHNCQUFzQiwyQkFBMkIsUUFBUSwyQkFBMkIsRUFBRSxrQ0FBa0MsYUFBYSwwQ0FBMEMsK0JBQStCLHlCQUF5QixFQUFFLGNBQWMsMENBQTBDLCtCQUErQix5QkFBeUIsRUFBRSxjQUFjLDJDQUEyQywrQkFBK0IscUJBQXFCLEVBQUUsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsV0FBVyxFQUFFLHVCQUF1QixlQUFlLG1CQUFtQixvREFBb0QsY0FBYyxvQkFBb0IsWUFBWSxZQUFZLG1DQUFtQyxPQUFPLFNBQVMsdUJBQXVCLDhDQUE4Qyw4QkFBOEIsZUFBZSxRQUFRLEdBQUcsU0FBUyxvSEFBb0gsNkJBQTZCLHFCQUFxQixHQUFHLDRCQUE0Qiw4QkFBOEIsc0JBQXNCLG1FQUFtRSxxQkFBcUIsMkNBQTJDLDZEQUE2RCxHQUFHLCtCQUErQixjQUFjLDZCQUE2QixtQkFBbUIscUJBQXFCLFVBQVUsRUFBRSxrRUFBa0UsbUNBQW1DLHdCQUF3QixFQUFFLGVBQWUsZUFBZSxFQUFFLDJDQUEyQyw0QkFBNEIsU0FBUywrRkFBK0YsT0FBTyxVQUFVLHNDQUFzQyxXQUFXLEVBQUUsZUFBZSxtQkFBbUIsbUJBQW1CLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLGdCQUFnQixnQkFBZ0Isd0NBQXdDLDREQUE0RCxzQkFBc0IsZUFBZSxzQkFBc0IsT0FBTyxzQkFBc0IseUJBQXlCLE9BQU8sMkJBQTJCLDRCQUE0QixPQUFPLG1CQUFtQiwyQkFBMkIscUJBQXFCLE9BQU8sbUdBQW1HLGNBQWMsNkRBQTZELDRCQUE0QixZQUFZLE9BQU8sa0VBQWtFLG9CQUFvQixHQUFHLGVBQWUsT0FBTyxxQ0FBcUMsMEVBQTBFLG9CQUFvQixJQUFJLCtCQUErQixVQUFVLFNBQVMsVUFBVSxXQUFXLG1DQUFtQyxXQUFXLGFBQWEsc0JBQXNCLGtDQUFrQyw0Q0FBNEMsRUFBRSxpQ0FBaUMsaURBQWlELGFBQWEsRUFBRSxrQkFBa0IsUUFBUSxrQkFBa0IsVUFBVSxPQUFPLGdDQUFnQyxNQUFNLDJCQUEyQixpQ0FBaUMsbUNBQW1DLGlCQUFpQiw2QkFBNkIscUNBQXFDLHVEQUF1RCwrQkFBK0IsaURBQWlELHFCQUFxQixnQ0FBZ0MsMkRBQTJELHFCQUFxQix3QkFBd0IsZ0JBQWdCLGFBQWEsYUFBYSxHQUFHLGVBQWUsb0JBQW9CLHNDQUFzQyxXQUFXLEVBQUUsbUpBQW1KLDJCQUEyQixpQ0FBaUMsOEJBQThCLDRDQUE0Qyx5Q0FBeUMsaURBQWlELGNBQWMsU0FBUyxpQkFBaUIsdUJBQXVCLDBDQUEwQyxrQkFBa0Isc0JBQXNCLEtBQUssaUJBQWlCLHNCQUFzQixLQUFLLEdBQUcsUUFBUSxZQUFZLGVBQWUsYUFBYSxhQUFhLFNBQVMsUUFBUSxZQUFZLFFBQVEsZ0JBQWdCLGFBQWEsWUFBWSxZQUFZLGFBQWEsVUFBVSxzQkFBc0IsbUVBQW1FLHFCQUFxQiwyQ0FBMkMsNkRBQTZELEdBQUcsK0JBQStCLGNBQWMsNkJBQTZCLG1CQUFtQixxQkFBcUIsVUFBVSxFQUFFLGtFQUFrRSxtQ0FBbUMsd0JBQXdCLEVBQUUsZUFBZSxlQUFlLEVBQUUsMkNBQTJDLDRCQUE0QixTQUFTLCtGQUErRixPQUFPLFVBQVUsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxXQUFXLEVBQUUsbUJBQW1CLGVBQWUsbUJBQW1CLG1CQUFtQixtQkFBbUIsZ0JBQWdCLDRCQUE0Qix5QkFBeUIsRUFBRSx3QkFBd0IsMEJBQTBCLG9OQUFvTixRQUFRLHNCQUFzQixzR0FBc0csb0JBQW9CLE9BQU8sK0NBQStDLDZDQUE2QyxRQUFRLDRCQUE0Qiw0QkFBNEIsa0JBQWtCLGtDQUFrQyxjQUFjLE1BQWtDLEtBQUssMEJBQTBCLGFBQWEsZUFBZSxRQUFRLHNFQUFzRSxHQUFHLE9BQU8sd0JBQXdCLHdEQUF3RCx5QkFBeUIsbUdBQW1HLHNEQUFzRCxvQkFBb0Isa0xBQWtMLDZEQUE2RCx3QkFBd0Isd0JBQXdCLG9CQUFvQiwrQkFBK0IsR0FBRyxHQUFHLEVBQUUsbUJBQW1CLHlDQUF5QyxPQUFPLDBCQUEwQixLQUFLLHVDQUF1QyxlQUFlLDBCQUEwQixtQkFBbUIsV0FBVyxvQkFBb0IsVUFBVSxFQUFFLEtBQUssR0FBRyxHQUFHLGNBQWMsc0JBQXNCLHNDQUFzQyxXQUFXLEVBQUUsbUJBQW1CLGNBQWMscUNBQXFDLCtCQUErQixvQkFBb0IsRUFBRSxxQkFBcUIsc0NBQXNDLFdBQVcsRUFBRSxnQkFBZ0IsZ0JBQWdCO0FBQ2pqYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxXQUFXLHNCQUFzQixtRUFBbUUscUJBQXFCLDJDQUEyQyw2REFBNkQsR0FBRywrQkFBK0IsY0FBYyw2QkFBNkIsbUJBQW1CLHFCQUFxQixVQUFVLEVBQUUsa0VBQWtFLG1DQUFtQyx3QkFBd0IsRUFBRSxlQUFlLGVBQWUsRUFBRSwyQ0FBMkMsNEJBQTRCLFNBQVMsK0ZBQStGLE9BQU8sVUFBVSxzQ0FBc0MsV0FBVyxFQUFFLGdCQUFnQixlQUFlLG1CQUFtQixnQkFBZ0IseUJBQXlCLGlDQUFpQyxFQUFFLDRCQUE0Qiw2RkFBNkYsMkJBQTJCLEtBQUssTUFBTSw2QkFBNkIsa0JBQWtCLFlBQVksT0FBTyx3QkFBd0IsK0JBQStCLE9BQU8sVUFBVSxvQkFBb0Isd0JBQXdCLCtFQUErRSxtQkFBbUIsb0JBQW9CLFdBQVcsdUJBQXVCLDBDQUEwQyxzQ0FBc0MsNkNBQTZDLDRDQUE0QyxXQUFXLHlDQUF5QyxnREFBZ0QsZ0RBQWdELE9BQU8sd0JBQXdCLGtMQUFrTCxxREFBcUQsRUFBRSxFQUFFLEtBQUssR0FBRyxXQUFXLHNCQUFzQixzQ0FBc0MsV0FBVyxFQUFFLG9CQUFvQixlQUFlLDZCQUE2Qix1QkFBdUIsRUFBRSx1QkFBdUIsc0RBQXNELEdBQUcsZUFBZSxzQkFBc0Isc0NBQXNDLFdBQVcsRUFBRSx1QkFBdUIsZUFBZSxnQ0FBZ0MsdUJBQXVCLEVBQUUsdUJBQXVCLHlEQUF5RCxHQUFHLGtCQUFrQixxQkFBcUIsc0NBQXNDLFdBQVcsRUFBRSxzQkFBc0IsZUFBZSwrQkFBK0IsdUJBQXVCLEVBQUUsdUJBQXVCLHdEQUF3RCxHQUFHLGlCQUFpQixzQkFBc0Isc0NBQXNDLFdBQVcsRUFBRSxxRUFBcUUsY0FBYyxrQ0FBa0MsK0JBQStCLGlCQUFpQixFQUFFLGNBQWMsc0NBQXNDLCtCQUErQixxQkFBcUIsRUFBRSxjQUFjLHlDQUF5QywrQkFBK0Isd0JBQXdCLEVBQUUsYUFBYSx3Q0FBd0MsK0JBQStCLHVCQUF1QixFQUFFLGNBQWMsa0NBQWtDLCtCQUErQixpQkFBaUIsRUFBRSxzQkFBc0Isc0NBQXNDLFdBQVcsRUFBRSxnQkFBZ0IsZ0JBQWdCO0FBQ245RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxXQUFXLHNCQUFzQixtRUFBbUUscUJBQXFCLDJDQUEyQyw2REFBNkQsR0FBRywrQkFBK0IsY0FBYyw2QkFBNkIsbUJBQW1CLHFCQUFxQixVQUFVLEVBQUUsa0VBQWtFLG1DQUFtQyx3QkFBd0IsRUFBRSxlQUFlLGVBQWUsRUFBRSwyQ0FBMkMsNEJBQTRCLFNBQVMsK0ZBQStGLE9BQU8sVUFBVSxzQ0FBc0MsV0FBVyxFQUFFLCtCQUErQixlQUFlLG1CQUFtQixlQUFlLHdDQUF3QyxpREFBaUQsRUFBRSx1QkFBdUIsdUJBQXVCLHVCQUF1Qiw0QkFBNEIsMkJBQTJCLEtBQUssTUFBTSxrQkFBa0IsWUFBWSxPQUFPLHdCQUF3QixzQkFBc0Isb0JBQW9CLHdCQUF3QixvQkFBb0IsY0FBYyxrQkFBa0IsT0FBTyw4QkFBOEIsb0JBQW9CLGNBQWMsa0JBQWtCLE9BQU8sMEJBQTBCLG9CQUFvQiw0QkFBNEIsd0JBQXdCLCtDQUErQyxTQUFTLFFBQVEsTUFBTSxNQUFNLHNDQUFzQyxVQUFVLHNDQUFzQyxrQkFBa0IseUNBQXlDLFVBQVUsMkNBQTJDLGFBQWEsa0JBQWtCLFlBQVksT0FBTyx3QkFBd0IsNEJBQTRCLHdCQUF3QixZQUFZLDZCQUE2QixrQkFBa0IsaUJBQWlCLDZCQUE2QixvQkFBb0IsV0FBVyx3QkFBd0IsNkVBQTZFLG9DQUFvQywySUFBMkksZ0dBQWdHLG9CQUFvQixvQkFBb0IseUtBQXlLLEdBQUcsRUFBRSxzQkFBc0IsMklBQTJJLGdHQUFnRyxnQkFBZ0Isb0JBQW9CLG9LQUFvSyxHQUFHLEVBQUUsU0FBUyx3QkFBd0IsdUlBQXVJLHNEQUFzRCxFQUFFLEVBQUUsUUFBUSxHQUFHLDBCQUEwQixzQkFBc0Isc0NBQXNDLFdBQVcsRUFBRSx3Q0FBd0MsY0FBYyxpREFBaUQsK0JBQStCLGdDQUFnQyxFQUFFLGNBQWMsa0NBQWtDLCtCQUErQixpQkFBaUIsRUFBRSxzQkFBc0Isc0NBQXNDLFdBQVcsRUFBRSxnQkFBZ0IsZ0JBQWdCO0FBQ2hwSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFdBQVcsc0JBQXNCLG1FQUFtRSxxQkFBcUIsMkNBQTJDLDZEQUE2RCxHQUFHLCtCQUErQixjQUFjLDZCQUE2QixtQkFBbUIscUJBQXFCLFVBQVUsRUFBRSxrRUFBa0UsbUNBQW1DLHdCQUF3QixFQUFFLGVBQWUsZUFBZSxFQUFFLDJDQUEyQyw0QkFBNEIsU0FBUywrRkFBK0YsT0FBTyxVQUFVLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsV0FBVyxFQUFFLGlCQUFpQixlQUFlLG1CQUFtQixtQkFBbUIsZ0JBQWdCLDBCQUEwQiwrQkFBK0IsRUFBRSxrQkFBa0IsYUFBYSxXQUFXLGdCQUFnQixNQUFNLDRCQUE0QiwyQkFBMkIsS0FBSyxNQUFNLGtCQUFrQixZQUFZLE9BQU8sdUJBQXVCLFVBQVUsRUFBRSxXQUFXLGVBQWUsT0FBTyx3QkFBd0IsK0VBQStFLHdGQUF3RixLQUFLLEdBQUcsWUFBWSxvQkFBb0Isc0NBQXNDLFdBQVcsRUFBRSx1QkFBdUIsTUFBTSxNQUFNLFFBQVEsZ0JBQWdCLGlCQUFpQixVQUFVLE9BQU8sK0RBQStELFFBQVEsbUNBQW1DLG9DQUFvQyxFQUFFLElBQUksK0JBQStCLHNDQUFzQyxHQUFHLFlBQVksa0JBQWtCLGlCQUFpQixtQkFBbUIsT0FBTyxrQkFBa0IsbUNBQW1DLFlBQVksa0JBQWtCLCtCQUErQixhQUFhLEdBQUcsZ0JBQWdCLHNCQUFzQixzQ0FBc0MsV0FBVyxFQUFFLGlCQUFpQixjQUFjLG1DQUFtQywrQkFBK0Isa0JBQWtCLEVBQUUsc0JBQXNCLDhDQUE4QywwQkFBMEIsWUFBWSxzQ0FBc0MsV0FBVyxFQUFFLG1CQUFtQixtQkFBbUIsc0JBQXNCLE9BQU8sU0FBUyxxQkFBcUIsU0FBUywyQkFBMkIsVUFBVSx3QkFBd0IsK0JBQStCLHlCQUF5Qix5QkFBeUIsbURBQW1ELDZCQUE2QiwyR0FBMkcsc0JBQXNCLDBDQUEwQyxvQkFBb0IsVUFBVSxnQ0FBZ0MsT0FBTyx5REFBeUQsNkVBQTZFLG9FQUFvRSxTQUFTLHlCQUF5QixrRUFBa0UsYUFBYSx3QkFBd0Isa0NBQWtDLEVBQUUsV0FBVyxTQUFTLElBQUksZUFBZSxrREFBa0QsY0FBYyxZQUFZLHdCQUF3QixPQUFPLGdCQUFnQixvQ0FBb0MsU0FBUyxpQ0FBaUMsNEJBQTRCLHdCQUF3Qix5REFBeUQsRUFBRSxxQkFBcUIsd0JBQXdCLFlBQVkscUJBQXFCLFVBQVUsRUFBRSxzQ0FBc0MsWUFBWSxhQUFhLHNCQUFzQixrRUFBa0UsYUFBYSxTQUFTLHdCQUF3Qiw4QkFBOEIsRUFBRSxTQUFTLFVBQVUsZUFBZSxzQ0FBc0MsUUFBUSxTQUFTLG1GQUFtRixXQUFXLDJCQUEyQixvQkFBb0IsVUFBVSxhQUFhLElBQUksWUFBWSxHQUFHLDZCQUE2QixPQUFPLGtCQUFrQixlQUFlLDRDQUE0QyxzQkFBc0Isb0JBQW9CLCtCQUErQixpQkFBaUIsZ0JBQWdCLHlCQUF5Qix5QkFBeUIsMkJBQTJCLDRCQUE0QiwwQkFBMEIsNEJBQTRCLG9CQUFvQixpQkFBaUIsTUFBTSxzSEFBc0gsa0JBQWtCLE9BQU8sd0xBQXdMLHVDQUF1QywyQ0FBMkMsZ0JBQWdCLE9BQU8sV0FBVyxXQUFXLFlBQVksZ0JBQWdCLEdBQUcsa0NBQWtDLG1DQUFtQyxxQ0FBcUMsNkJBQTZCLHNCQUFzQixpQkFBaUIsU0FBUyxVQUFVLDZCQUE2QixzQkFBc0IsV0FBVyxZQUFZLFdBQVcsYUFBYSxTQUFTLG1CQUFtQix1QkFBdUIsc0dBQXNHLGlEQUFpRCxrQkFBa0IsSUFBSSx3Q0FBd0Msc0JBQXNCLDBFQUEwRSxrQkFBa0Isb0NBQW9DLG1GQUFtRixjQUFjLHVCQUF1QixLQUFLLGdFQUFnRSxvQ0FBb0MsbUNBQW1DLHFDQUFxQyx3Q0FBd0MsMENBQTBDLHdCQUF3QixlQUFlLFNBQVMsZ0NBQWdDLGtCQUFrQixHQUFHLFNBQVMsU0FBUyxjQUFjLDZCQUE2QixhQUFhLElBQUksc0RBQXNELHFCQUFxQixTQUFTLEtBQUssU0FBUyxnQ0FBZ0MseUJBQXlCLElBQUksdURBQXVELFVBQVUsT0FBTyxJQUFJLHNFQUFzRSxXQUFXLGtFQUFrRSw0QkFBNEIsMEJBQTBCLG1DQUFtQyxLQUFLLGNBQWMsWUFBWSxPQUFPLG1CQUFtQixTQUFTLHFCQUFxQixvQ0FBb0MsVUFBVSxHQUFHLGdDQUFnQyx5QkFBeUIsMkNBQTJDLGFBQWEsSUFBSSxnREFBZ0QsUUFBUSxTQUFTLElBQUksbURBQW1ELFdBQVcsU0FBUyxNQUFNLFNBQVMsc0JBQXNCLGlFQUFpRSxPQUFPLHdDQUF3QyxnTEFBZ0wsaUNBQWlDLE9BQU8sd0NBQXdDLDZMQUE2TCxhQUFhLG1DQUFtQyxlQUFlLFlBQVksOEJBQThCLFVBQVUsNkJBQTZCLE9BQU8sd0NBQXdDLG9LQUFvSywrQkFBK0IsbUNBQW1DLGVBQWUsWUFBWSw2QkFBNkIsT0FBTyxrRkFBa0YsSUFBSSx3QkFBd0IsYUFBYSxzQkFBc0IsaUVBQWlFLE9BQU8sd0NBQXdDLHdLQUF3SyxpQ0FBaUMsT0FBTyx3Q0FBd0MsZ0NBQWdDLCtDQUErQyxzQkFBc0IsY0FBYyxHQUFHLHlDQUF5QyxnQkFBZ0IsaUNBQWlDLE9BQU8sNkNBQTZDLDZCQUE2Qix3Q0FBd0MsT0FBTyw2Q0FBNkMsc0RBQXNELE9BQU8seUNBQXlDLCtDQUErQyxzQkFBc0IsY0FBYyxHQUFHLHlDQUF5QyxrQkFBa0IsT0FBTyx5Q0FBeUMsNkJBQTZCLHdDQUF3QyxPQUFPLHNDQUFzQyxlQUFlLDZDQUE2QyxnQ0FBZ0MsT0FBTyx3Q0FBd0MsNkxBQTZMLGdDQUFnQyxPQUFPLDhCQUE4QixnQ0FBZ0MsaUJBQWlCLCtCQUErQixTQUFTLFVBQVUsU0FBUywyQkFBMkIsNEJBQTRCLCtCQUErQiwrQkFBK0Isc0JBQXNCLFNBQVMsK0JBQStCLCtCQUErQiwrQkFBK0IsNkJBQTZCLG1CQUFtQixzQ0FBc0MsU0FBUyxPQUFPLHdDQUF3Qyw2Q0FBNkMsT0FBTywwQ0FBMEMsZ0NBQWdDLG1DQUFtQyxxQkFBcUIsVUFBVSw2QkFBNkIsMEJBQTBCLHVOQUF1TixPQUFPLDJDQUEyQyx1Q0FBdUMseUJBQXlCLDhCQUE4Qiw4QkFBOEIsOEJBQThCLE9BQU8sdUVBQXVFLHVDQUF1Qyx5QkFBeUIsOEJBQThCLDhCQUE4QixtQ0FBbUMsZUFBZSxZQUFZLDZCQUE2QixnQkFBZ0IsMEJBQTBCLFNBQVMsT0FBTyx3Q0FBd0MsbUxBQW1MLDhCQUE4QixtQ0FBbUMsOEJBQThCLDZCQUE2QixPQUFPLDZDQUE2QywrRUFBK0UsYUFBYSxtQ0FBbUMsOENBQThDLDZDQUE2QyxVQUFVLGtDQUFrQywrRUFBK0UsT0FBTyx3Q0FBd0Msc0NBQXNDLGNBQWMsZUFBZSxHQUFHLHVDQUF1QyxhQUFhLDRCQUE0QixnQ0FBZ0MsT0FBTyx3Q0FBd0Msc0NBQXNDLGFBQWEsR0FBRyx1Q0FBdUMsYUFBYSw4QkFBOEIsT0FBTyx3Q0FBd0Msc0NBQXNDLGNBQWMsZUFBZSxHQUFHLHVDQUF1QyxhQUFhLDhCQUE4QixRQUFRLDRDQUE0QyxtREFBbUQsNkJBQTZCLHNDQUFzQyw2RUFBNkUseUJBQXlCLDBCQUEwQiwrQ0FBK0Msd0JBQXdCLFNBQVMsc0NBQXNDLDBEQUEwRCxPQUFPLGFBQWEsbUNBQW1DLGlCQUFpQiwrQkFBK0IsVUFBVSxnQkFBZ0IsaUJBQWlCLFlBQVkscUJBQXFCLHVHQUF1RyxrQkFBa0IsWUFBWSxPQUFPLElBQUksb0NBQW9DLFNBQVMsOEJBQThCLHlCQUF5QixTQUFTLDJCQUEyQixRQUFRLHdDQUF3Qyx3REFBd0QsK0JBQStCLG9CQUFvQixRQUFRLHdDQUF3QyxvREFBb0QsK0JBQStCLG9CQUFvQixRQUFRLHdDQUF3QyxxREFBcUQsK0JBQStCLG9CQUFvQixRQUFRLHdDQUF3QywrS0FBK0ssOEJBQThCLG9CQUFvQixRQUFRLHdDQUF3QywyRkFBMkYsb0ZBQW9GLG9CQUFvQix3RkFBd0YsNEJBQTRCLFVBQVUsUUFBUSx3Q0FBd0MseUJBQXlCLG9CQUFvQixvQkFBb0IsUUFBUSx3Q0FBd0Msa0NBQWtDLFFBQVEsOENBQThDLGlDQUFpQyxxQ0FBcUMsbUJBQW1CLFFBQVEsMENBQTBDLElBQUksd0JBQXdCLGFBQWEsMkNBQTJDLHdDQUF3QyxVQUFVLFFBQVEsaVBBQWlQLFFBQVEsOHZCQUE4dkIsd0JBQXdCLHNCQUFzQixxQ0FBcUMsYUFBYSxHQUFHLFNBQVMsWUFBWSxxQkFBcUIsT0FBTyxVQUFVLFdBQVcsYUFBYSxzQkFBc0IsV0FBVyxVQUFVLGNBQWMsK0JBQStCLDhCQUE4Qiw0QkFBNEIsUUFBUSxlQUFlLCtDQUErQyx3QkFBd0IseURBQXlELEVBQUUsaUNBQWlDLGlDQUFpQyxXQUFXLGFBQWEsMERBQTBELHFDQUFxQyxhQUFhLDRCQUE0QixZQUFZLDhDQUE4QyxpQkFBaUIsYUFBYSw2QkFBNkIsMEJBQTBCLHdCQUF3QixZQUFZLGlDQUFpQyw4QkFBOEIscUNBQXFDLHFCQUFxQixpQ0FBaUMsNkJBQTZCLDJDQUEyQyxpQ0FBaUMsMkhBQTJILGdDQUFnQyxHQUFHLDhCQUE4QixvQ0FBb0Msd0NBQXdDLDBCQUEwQixhQUFhLHVEQUF1RCxhQUFhLGtFQUFrRSxjQUFjLGdDQUFnQyxrRUFBa0UseUNBQXlDLDRDQUE0QyxHQUFHLFFBQVEsZUFBZSx3QkFBd0IseURBQXlELEVBQUUsNEJBQTRCLFlBQVksK0JBQStCLG1DQUFtQyxhQUFhLDREQUE0RCxZQUFZLHlDQUF5QyxZQUFZLGdCQUFnQixZQUFZLGVBQWUsWUFBWSxvQ0FBb0MsWUFBWSwyQ0FBMkMsYUFBYSxpQkFBaUIsNkJBQTZCLDRDQUE0QyxhQUFhLGlFQUFpRSxjQUFjLCtCQUErQixZQUFZLDhCQUE4QixZQUFZLHNDQUFzQyxZQUFZLDRFQUE0RSxZQUFZLDRFQUE0RSxZQUFZLG1DQUFtQyxZQUFZLHlCQUF5Qix3Q0FBd0MsK0RBQStELDJDQUEyQyxZQUFZLHFDQUFxQyxZQUFZLGdCQUFnQix3QkFBd0Isa0NBQWtDLHVCQUF1QixpREFBaUQsYUFBYSx3QkFBd0Isa0RBQWtELDREQUE0RCxZQUFZLGdFQUFnRSxhQUFhLE1BQU0sa0dBQWtHLE1BQU0sb0NBQW9DLFlBQVksa0NBQWtDLG1CQUFtQixNQUFNLFlBQVksc0NBQXNDLDRCQUE0QixZQUFZLHlEQUF5RCxrQkFBa0IsVUFBVSxvQkFBb0IsOERBQThELEdBQUcsTUFBTSxhQUFhLDJDQUEyQywyQ0FBMkMsK0JBQStCLGFBQWEsaUNBQWlDLGFBQWEsK0RBQStELFlBQVksc0JBQXNCLHFCQUFxQiwrQkFBK0Isc0NBQXNDLHVEQUF1RCxZQUFZLHVDQUF1Qyx5QkFBeUIsY0FBYyxhQUFhLHVDQUF1QyxtRUFBbUUsa0NBQWtDLDZCQUE2QixtQkFBbUIsR0FBRyw2QkFBNkIsVUFBVSxxQ0FBcUMsRUFBRSx3QkFBd0IsZ0JBQWdCLHNCQUFzQixlQUFlLFVBQVUsU0FBUyxZQUFZLElBQUksS0FBSyxnQkFBZ0IsVUFBVSxTQUFTLCtCQUErQixJQUFJLGdIQUFnSCxTQUFTLGFBQWEsc0JBQXNCLHFCQUFxQiw2QkFBNkIsY0FBYyw0QkFBNEIseUJBQXlCLHdDQUF3QyxNQUFNLG9CQUFvQixRQUFRLFNBQVMsMERBQTBELGNBQWMsb0NBQW9DLFFBQVEscUNBQXFDLGdDQUFnQyx1QkFBdUIscUJBQXFCLDZDQUE2Qyw0QkFBNEIsNEJBQTRCLG1CQUFtQixhQUFhLGtCQUFrQixZQUFZLEdBQUcsdUJBQXVCLDRCQUE0QixtQkFBbUIsNEJBQTRCLFlBQVksSUFBSSxrREFBa0QsU0FBUyxhQUFhLGtCQUFrQiw0QkFBNEIsMkRBQTJELHlCQUF5QiwyQkFBMkIsMkNBQTJDLEdBQUcsdUJBQXVCLCtCQUErQixvQ0FBb0Msb0NBQW9DLEdBQUcsV0FBVyxhQUFhLCtCQUErQixpREFBaUQsR0FBRyxXQUFXLFlBQVksUUFBUSxZQUFZLGFBQWEsNEJBQTRCLFFBQVEsNENBQTRDLElBQUksb0NBQW9DLDREQUE0RCxHQUFHLDBCQUEwQixrRUFBa0UseUNBQXlDLGtHQUFrRyxHQUFHLHdCQUF3QixrREFBa0QsRUFBRSwrQkFBK0IsK0JBQStCLFlBQVksa0JBQWtCLFVBQVUsRUFBRSwrQ0FBK0MsZ0RBQWdELGFBQWEsb0NBQW9DLGFBQWEsMENBQTBDLGFBQWEsdUJBQXVCLHlCQUF5QiwrQkFBK0IsYUFBYSxjQUFjLFlBQVksaUNBQWlDLG1FQUFtRSw0QkFBNEIsdUJBQXVCLG1CQUFtQixHQUFHLHVCQUF1QixVQUFVLCtCQUErQixFQUFFLDJCQUEyQiwwREFBMEQsZUFBZSwyQkFBMkIsc0JBQXNCLDhDQUE4QyxZQUFZLHFCQUFxQix5RUFBeUUsY0FBYyx3QkFBd0IsUUFBUSxlQUFlLHdCQUF3QixnQ0FBZ0MsRUFBRSwrQkFBK0IsZUFBZSxhQUFhLGlDQUFpQyw2QkFBNkIsYUFBYSx3QkFBd0IsZUFBZSxhQUFhLGtHQUFrRyxhQUFhLHNDQUFzQyxvRkFBb0Ysa0JBQWtCLFVBQVUsNkJBQTZCLCtCQUErQiw2QkFBNkIsR0FBRyxNQUFNLGFBQWEsWUFBWSxjQUFjLGNBQWMsUUFBUSwwRUFBMEUsc0NBQXNDLFFBQVEsZUFBZSw2QkFBNkIsbUJBQW1CLHlCQUF5QixlQUFlLG1EQUFtRCx3QkFBd0IsK0NBQStDLEVBQUUsK0JBQStCLDJCQUEyQixjQUFjLCtCQUErQiwrQkFBK0Isa0NBQWtDLDJCQUEyQiwrQkFBK0IsOEJBQThCLHVCQUF1QixRQUFRLGVBQWUsd0JBQXdCLDhCQUE4QixFQUFFLHlDQUF5QyxZQUFZLGtDQUFrQyxhQUFhLGVBQWUsWUFBWSxrQkFBa0IsVUFBVSxFQUFFLCtCQUErQixZQUFZLGtEQUFrRCxZQUFZLGFBQWEsK0JBQStCLGtFQUFrRSx5Q0FBeUMsaURBQWlELEdBQUcsd0JBQXdCLHdEQUF3RCxFQUFFLHVCQUF1QixhQUFhLDJFQUEyRSx5QkFBeUIsTUFBTSx1QkFBdUIsZUFBZSwrQkFBK0IsdUJBQXVCLDRCQUE0QixzQkFBc0IsNENBQTRDLDBDQUEwQyxlQUFlLGNBQWMsYUFBYSxzQ0FBc0MsbUVBQW1FLGlDQUFpQyw0QkFBNEIsbUJBQW1CLEdBQUcsNEJBQTRCLFVBQVUsb0NBQW9DLEVBQUUsY0FBYyxnQ0FBZ0MsK0JBQStCLDhCQUE4QixZQUFZLHVCQUF1QiwyQkFBMkIsWUFBWSxnQkFBZ0IsdUNBQXVDLGlCQUFpQixnQkFBZ0Isa0VBQWtFLGtDQUFrQyxzQkFBc0Isd0NBQXdDLDRDQUE0QyxlQUFlLHNCQUFzQixhQUFhLDRCQUE0QixrRUFBa0UseUNBQXlDLGdEQUFnRCxHQUFHLFFBQVEsZUFBZSx1QkFBdUIsb0RBQW9ELEVBQUUsd0JBQXdCLG9EQUFvRCxFQUFFLGdCQUFnQixtQkFBbUIsRUFBRSwrQkFBK0IsYUFBYSwrQkFBK0IsYUFBYSwwQkFBMEIsYUFBYSxlQUFlLE9BQU8scUJBQXFCLDJCQUEyQiw4QkFBOEIsNEJBQTRCLCtCQUErQixpQkFBaUIsNkJBQTZCLGlCQUFpQixjQUFjLHlCQUF5QixNQUFNLCtCQUErQixpREFBaUQsb0NBQW9DLGVBQWUsK0JBQStCLDBFQUEwRSxhQUFhLFlBQVksbUNBQW1DLG1FQUFtRSw4QkFBOEIseUJBQXlCLG1CQUFtQixHQUFHLHlCQUF5QixVQUFVLGlDQUFpQyxFQUFFLHlCQUF5Qix5QkFBeUIsaUJBQWlCLGdDQUFnQyxTQUFTLGdDQUFnQywrQkFBK0IsZUFBZSxTQUFTLHdCQUF3QixnQ0FBZ0Msa0VBQWtFLHFFQUFxRSxPQUFPLDJCQUEyQix1QkFBdUIsZUFBZSxFQUFFLHFCQUFxQix1RkFBdUYsU0FBUyxvQkFBb0IsNkJBQTZCLHFCQUFxQixzQkFBc0IsaUNBQWlDLGtFQUFrRSxHQUFHLEtBQUssdUJBQXVCLE1BQU0sY0FBYyxVQUFVLGNBQWMsY0FBYyxjQUFjLFNBQVMsY0FBYyxjQUFjLHNCQUFzQixRQUFRLGVBQWUseUJBQXlCLFVBQVUsd1dBQXdXLHVCQUF1QixVQUFVLCtCQUErQixrRUFBa0Usd0RBQXdELG1CQUFtQiw0QkFBNEIsdUJBQXVCLGVBQWUsRUFBRSwwQkFBMEIsWUFBWSxhQUFhLFNBQVMsMEJBQTBCLGtFQUFrRSwrRkFBK0Ysd0JBQXdCLDhFQUE4RSxFQUFFLE9BQU8sNkRBQTZELGdCQUFnQiw4QkFBOEIsaUNBQWlDLCtCQUErQix3R0FBd0csY0FBYyxvQ0FBb0MsMkJBQTJCLGtFQUFrRSx5Q0FBeUMsNkVBQTZFLEdBQUcsUUFBUSxlQUFlLHdCQUF3QixtREFBbUQsRUFBRSxnREFBZ0QsYUFBYSx5QkFBeUIsTUFBTSwwQkFBMEIsYUFBYSx1QkFBdUIsYUFBYSxrREFBa0QsYUFBYSwrQkFBK0IsaUJBQWlCLGtGQUFrRixnQ0FBZ0MsZUFBZSwrQkFBK0IsdUJBQXVCLHlCQUF5Qiw2REFBNkQsWUFBWSxnQkFBZ0IscUJBQXFCLHNDQUFzQyxTQUFTLHlCQUF5QixhQUFhLDBCQUEwQix5SEFBeUgsT0FBTyxzQ0FBc0MsMEJBQTBCLE9BQU8sY0FBYyx3QkFBd0IsZ0RBQWdELGFBQWEsNERBQTRELE1BQU0sWUFBWSxtREFBbUQsYUFBYSxzQ0FBc0MsWUFBWSw0QkFBNEIsY0FBYyxnQkFBZ0IsWUFBWSxzQ0FBc0Msc0JBQXNCLG9DQUFvQyxZQUFZLG9DQUFvQywyQkFBMkIsK0JBQStCLGdCQUFnQixnQ0FBZ0MsYUFBYSxvQkFBb0IsYUFBYSxnQkFBZ0IsZ0NBQWdDLDRCQUE0QixjQUFjLGdDQUFnQyxhQUFhLGlCQUFpQiw0QkFBNEIsY0FBYyxpQkFBaUIsYUFBYSw4QkFBOEIsc0NBQXNDLDRCQUE0QixVQUFVLDRCQUE0QixlQUFlLHdCQUF3QiwwQkFBMEIsY0FBYyxzQ0FBc0MsNEJBQTRCLHFCQUFxQixxQ0FBcUMsYUFBYSxTQUFTLG9CQUFvQiwrQkFBK0IsYUFBYSxzQkFBc0IsTUFBTSwrQkFBK0Isc0NBQXNDLG1DQUFtQyxhQUFhLHlCQUF5QixXQUFXLHFCQUFxQixrQ0FBa0MsbUVBQW1FLDZCQUE2Qix3QkFBd0IsbUJBQW1CLEdBQUcsd0JBQXdCLFVBQVUsd0JBQXdCLGFBQWEsRUFBRSwrQkFBK0IsYUFBYSxFQUFFLGdDQUFnQyxFQUFFLHlCQUF5QixrRUFBa0UscUVBQXFFLHVCQUF1QixlQUFlLEVBQUUsdUJBQXVCLDREQUE0RCxZQUFZLGlDQUFpQywwRUFBMEUseUJBQXlCLGtDQUFrQyxzQ0FBc0MsZ0NBQWdDLHFFQUFxRSxHQUFHLHFDQUFxQyxTQUFTLHVCQUF1QixXQUFXLG1CQUFtQixXQUFXLCtCQUErQixRQUFRLFdBQVcsV0FBVywwQkFBMEIsY0FBYyxPQUFPLFFBQVEsOEJBQThCLEVBQUUsR0FBRyxTQUFTLHNDQUFzQyxRQUFRLHNCQUFzQix5QkFBeUIsR0FBRyx1QkFBdUIsb0JBQW9CLHdDQUF3QyxvQkFBb0IsdUJBQXVCLEdBQUcsMkJBQTJCLGtFQUFrRSwwQ0FBMEMsaUJBQWlCLDRCQUE0QixnQkFBZ0Isa0NBQWtDLDZCQUE2QixTQUFTLGtCQUFrQiwrQkFBK0IsWUFBWSxXQUFXLEtBQUssV0FBVyxpQ0FBaUMsb0JBQW9CLCtCQUErQixrQ0FBa0MsdUJBQXVCLHFDQUFxQywyQkFBMkIsVUFBVSxHQUFHLDhCQUE4QixzQkFBc0IsMERBQTBELGtCQUFrQixpQkFBaUIsMkJBQTJCLDhCQUE4QixhQUFhLFVBQVUsZ0RBQWdELGtCQUFrQixxQkFBcUIscUJBQXFCLEVBQUUsa0RBQWtELHFDQUFxQyxPQUFPLE9BQU8saUNBQWlDLFVBQVUsR0FBRyxFQUFFLGtFQUFrRSw2QkFBNkIsK0JBQStCLGVBQWUsWUFBWSxtQkFBbUIsdUJBQXVCLHFCQUFxQiwwQkFBMEIsYUFBYSxTQUFTLEdBQUcsWUFBWSxHQUFHLHVCQUF1Qix3Q0FBd0MsZ0JBQWdCLGdDQUFnQyxjQUFjLFNBQVMsd0JBQXdCLDREQUE0RCx3Q0FBd0MseUJBQXlCLEVBQUUsa0JBQWtCLCtCQUErQixZQUFZLFdBQVcsS0FBSyxXQUFXLGlDQUFpQyxvQkFBb0IsK0JBQStCLGtDQUFrQyx1QkFBdUIscUNBQXFDLDJCQUEyQixVQUFVLEdBQUcsZ0NBQWdDLHNCQUFzQiwwREFBMEQsa0JBQWtCLHNCQUFzQixnQ0FBZ0MsZUFBZSxvQkFBb0IsbUJBQW1CLGVBQWUsbUJBQW1CLGNBQWMsaUJBQWlCLGFBQWEsb0RBQW9ELGlCQUFpQixPQUFPLDBDQUEwQywyQkFBMkIscUJBQXFCLFVBQVUsRUFBRSxNQUFNLHNCQUFzQiw4QkFBOEIsS0FBSywwQkFBMEIsRUFBRSxrRUFBa0UsK0JBQStCLDZCQUE2QixtQ0FBbUMsRUFBRSw0REFBNEQsaUNBQWlDLCtCQUErQixxQ0FBcUMsRUFBRSx3REFBd0QsNkJBQTZCLHFCQUFxQixVQUFVLEVBQUUsT0FBTyxZQUFZLHNCQUFzQiwyQkFBMkIsYUFBYSxTQUFTLEVBQUUsa0NBQWtDLDJCQUEyQix3QkFBd0IsZ0JBQWdCLFVBQVUsRUFBRSxrREFBa0QsNkNBQTZDLHVCQUF1QixxQkFBcUIsK0JBQStCLG9DQUFvQyxRQUFRLG9EQUFvRCxFQUFFLDBDQUEwQyx1QkFBdUIsa0JBQWtCLEVBQUUsK0JBQStCLEVBQUUsb0RBQW9ELHdCQUF3QixtRkFBbUYsR0FBRyxFQUFFLGdFQUFnRSx1QkFBdUIsdUhBQXVILEVBQUUsdUJBQXVCLG1CQUFtQixvQkFBb0IsVUFBVSxFQUFFLHlDQUF5Qyw2Q0FBNkMsZ0NBQWdDLFNBQVMsR0FBRyxlQUFlLEdBQUcsNkJBQTZCLGtCQUFrQiwyQkFBMkIsd0JBQXdCLFlBQVksaUJBQWlCLHlCQUF5QixTQUFTLFNBQVMsNEJBQTRCLGlCQUFpQixrQkFBa0IsbUJBQW1CLGtDQUFrQyxZQUFZLFVBQVUsUUFBUSxVQUFVLGFBQWEsYUFBYSxHQUFHLGdDQUFnQyxZQUFZLDhCQUE4QixtQkFBbUIsS0FBSyxTQUFTLGNBQWMscUNBQXFDLG1CQUFtQixRQUFRLG9CQUFvQixtQkFBbUIsU0FBUywyQkFBMkIsb0NBQW9DLGdCQUFnQixrQkFBa0IsU0FBUyw0QkFBNEIsa0VBQWtFLHFFQUFxRSxRQUFRLGVBQWUsZ0RBQWdELHFCQUFxQiw0REFBNEQsRUFBRSwrQ0FBK0MsaUNBQWlDLEtBQUssb0JBQW9CLE1BQU0sOEJBQThCLFNBQVMsUUFBUSw4T0FBOE8saUJBQWlCLGFBQWEsTUFBTSxNQUFNLGtCQUFrQixhQUFhLE1BQU0sTUFBTSxhQUFhLGFBQWEsVUFBVSxpQkFBaUIsbUJBQW1CLGFBQWEsTUFBTSxNQUFNLGFBQWEsNkNBQTZDLFVBQVUsUUFBUSw2REFBNkQsd0NBQXdDLGFBQWEsR0FBRyxvQ0FBb0MsbUJBQW1CLE9BQU8seUNBQXlDLDZCQUE2QiwwQkFBMEIsaUNBQWlDLHVCQUF1QixZQUFZLE9BQU8sV0FBVyxtQkFBbUIsWUFBWSxPQUFPLGlCQUFpQixRQUFRLGFBQWEsYUFBYSxZQUFZLE9BQU8sZ0RBQWdELE9BQU8sR0FBRyxTQUFTLHVCQUF1Qiw0QkFBNEIsc0NBQXNDLDJDQUEyQyxtQ0FBbUMsNkJBQTZCLDRCQUE0QixxREFBcUQsR0FBRyx1QkFBdUIsdUNBQXVDLG1CQUFtQixzQ0FBc0MsOEJBQThCLE9BQU8sbUVBQW1FLEdBQUcsK0JBQStCLGtFQUFrRSx3Q0FBd0MsTUFBTSw2QkFBNkIsNEZBQTRGLFdBQVcsOEJBQThCLDRGQUE0RixtSEFBbUgsbUJBQW1CLG1FQUFtRSxTQUFTLHdEQUF3RCxpQkFBaUIsMEJBQTBCLGdCQUFnQixxQkFBcUIsY0FBYyxpRUFBaUUsa0NBQWtDLGdDQUFnQyxVQUFVLFFBQVEsYUFBYSxJQUFJLHVCQUF1Qiw2QkFBNkIsMEVBQTBFLDhCQUE4QixnQkFBZ0IsVUFBVSxnQ0FBZ0MsR0FBRyxnQ0FBZ0MsdUJBQXVCLE9BQU8sYUFBYSwyQkFBMkIsa0NBQWtDLEVBQUUsY0FBYyxRQUFRLHlCQUF5QixVQUFVLE9BQU8sMEJBQTBCLHlCQUF5QixPQUFPLHVCQUF1QixJQUFJLHNDQUFzQywyQkFBMkIsMENBQTBDLE9BQU8sYUFBYSxvQkFBb0IsVUFBVSxHQUFHLEVBQUUsT0FBTywyQkFBMkIsbUJBQW1CLGdCQUFnQiwwQ0FBMEMsbUJBQW1CLHdCQUF3QixVQUFVLEVBQUUsaUJBQWlCLFdBQVcsb0JBQW9CLFlBQVksWUFBWSx1QkFBdUIsVUFBVSxPQUFPLGFBQWEsNEJBQTRCLHdCQUF3QixhQUFhLElBQUksWUFBWSxHQUFHLE9BQU8sVUFBVSxPQUFPLGFBQWEsZ0JBQWdCLEVBQUUsdUJBQXVCLHFCQUFxQixzQ0FBc0MsV0FBVyxFQUFFLGdCQUFnQixnQkFBZ0I7QUFDbnUyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFdBQVcsc0JBQXNCLG1FQUFtRSxxQkFBcUIsMkNBQTJDLDZEQUE2RCxHQUFHLCtCQUErQixjQUFjLDZCQUE2QixtQkFBbUIscUJBQXFCLFVBQVUsRUFBRSxrRUFBa0UsbUNBQW1DLHdCQUF3QixFQUFFLGVBQWUsZUFBZSxFQUFFLDJDQUEyQyw0QkFBNEIsU0FBUywrRkFBK0YsT0FBTyxVQUFVLHNDQUFzQyxXQUFXLEVBQUUsc0JBQXNCLGVBQWUsbUJBQW1CLGdCQUFnQix5QkFBeUIsMkJBQTJCLEVBQUUscUJBQXFCLHFCQUFxQixxQkFBcUIscUJBQXFCLHdCQUF3QiwyQ0FBMkMsMkNBQTJDLGtDQUFrQyxZQUFZLEVBQUUsOEJBQThCLElBQUksRUFBRSxXQUFXLHVDQUF1QyxzREFBc0QsT0FBTywwRUFBMEUsTUFBTSxHQUFHLGlCQUFpQixzQkFBc0IsbUVBQW1FLHFCQUFxQiwyQ0FBMkMsNkRBQTZELEdBQUcsK0JBQStCLGNBQWMsNkJBQTZCLG1CQUFtQixxQkFBcUIsVUFBVSxFQUFFLGtFQUFrRSxtQ0FBbUMsd0JBQXdCLEVBQUUsZUFBZSxlQUFlLEVBQUUsMkNBQTJDLDRCQUE0QixTQUFTLCtGQUErRixPQUFPLFVBQVUsOENBQThDLDBCQUEwQixZQUFZLHNDQUFzQyxXQUFXLEVBQUUsa0JBQWtCLGVBQWUsbUJBQW1CLG1CQUFtQiwyQkFBMkIsVUFBVSxFQUFFLCtDQUErQyw2Q0FBNkMsUUFBUSx1QkFBdUIsc0RBQXNELHlDQUF5QyxPQUFPLDBCQUEwQixLQUFLLHVDQUF1QyxlQUFlLDBCQUEwQixtQkFBbUIsV0FBVyxvQkFBb0IsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLEdBQUcsYUFBYSxzQkFBc0Isc0NBQXNDLFdBQVcsRUFBRSxrQkFBa0IsY0FBYyxvQ0FBb0MsK0JBQStCLG1CQUFtQixFQUFFLHNCQUFzQixzQ0FBc0MsV0FBVyxFQUFFLGdCQUFnQixnQkFBZ0I7QUFDaCtGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxXQUFXLHNCQUFzQixzQ0FBc0MsV0FBVyxFQUFFLGVBQWUsZUFBZSx3QkFBd0IsaUNBQWlDLEVBQUUsdUJBQXVCLHlFQUF5RSw0Q0FBNEMsRUFBRSxHQUFHLFVBQVUsc0JBQXNCLHNDQUFzQyxXQUFXLEVBQUUsd0JBQXdCLGNBQWMsa0NBQWtDLCtCQUErQixpQkFBaUIsRUFBRSxjQUFjLGlDQUFpQywrQkFBK0IsZ0JBQWdCLEVBQUUsc0JBQXNCLHNDQUFzQyxXQUFXLEVBQUUsZ0JBQWdCLGdCQUFnQjtBQUN0dEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsV0FBVyxzQkFBc0IsbUVBQW1FLHFCQUFxQiwyQ0FBMkMsNkRBQTZELEdBQUcsK0JBQStCLGNBQWMsNkJBQTZCLG1CQUFtQixxQkFBcUIsVUFBVSxFQUFFLGtFQUFrRSxtQ0FBbUMsd0JBQXdCLEVBQUUsZUFBZSxlQUFlLEVBQUUsMkNBQTJDLDRCQUE0QixTQUFTLCtGQUErRixPQUFPLFVBQVUsc0NBQXNDLFdBQVcsRUFBRSw2QkFBNkIsZUFBZSxtQkFBbUIsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLDZCQUE2QixVQUFVLEVBQUUsNkJBQTZCLE1BQU0sMkJBQTJCLHdDQUF3Qyw0S0FBNEssb0NBQW9DLHlFQUF5RSxzRUFBc0UsRUFBRSwyQkFBMkIsOEVBQThFLFVBQVUsc0JBQXNCLHdCQUF3QixvRUFBb0UsdUdBQXVHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsZUFBZTtBQUNqdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRSxzQkFBc0IsbUVBQW1FLHFCQUFxQiwyQ0FBMkMsNkRBQTZELEdBQUcsK0JBQStCLGNBQWMsNkJBQTZCLG1CQUFtQixxQkFBcUIsVUFBVSxFQUFFLGtFQUFrRSxtQ0FBbUMsd0JBQXdCLEVBQUUsZUFBZSxlQUFlLEVBQUUsMkNBQTJDLDRCQUE0QixTQUFTLCtGQUErRixPQUFPLFVBQVUsc0NBQXNDLFdBQVcsRUFBRSx5QkFBeUIsZUFBZSxtQkFBbUIsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLGdCQUFnQixnQkFBZ0IsZUFBZSxnQkFBZ0IsOEJBQThCLE1BQU0sUUFBUSxHQUFHLGVBQWUsNkRBQTZELFNBQVMsY0FBYyxJQUFJLGlCQUFpQixJQUFJLGVBQWUsRUFBRSxXQUFXLFVBQVUsU0FBUyxrQ0FBa0MsTUFBTSxPQUFPLEdBQUcsMkNBQTJDLDRCQUE0QiwrQ0FBK0MsY0FBYyxrQkFBa0IsNkJBQTZCLDRCQUE0QiwrREFBK0QseUJBQXlCLFNBQVMsRUFBRSxHQUFHLDRDQUE0QyxXQUFXLFNBQVMsRUFBRSwwQkFBMEIsaUJBQWlCLFNBQVMsRUFBRSxHQUFHLEtBQUssR0FBRyx5QkFBeUIsU0FBUyxFQUFFLHdCQUF3QixFQUFFLDJCQUEyQixTQUFTLFdBQVcsWUFBWSxXQUFXLEtBQUssYUFBYSxNQUFNLEtBQUssR0FBRyxXQUFXLGFBQWEsU0FBUyxRQUFRLGVBQWUsZ0RBQWdELFVBQVUsSUFBSSxNQUFNLFlBQVksU0FBUywyRUFBMkUsa0JBQWtCLFlBQVksT0FBTyxXQUFXLGtDQUFrQyxNQUFNLFFBQVEsY0FBYyxLQUFLLFNBQVMsR0FBRyxXQUFXLFNBQVMsT0FBTyxvQ0FBb0MseUJBQXlCLDJCQUEyQixvQkFBb0Isd0JBQXdCLE1BQU0sMkJBQTJCLG9CQUFvQiw2Q0FBNkMsY0FBYywwQ0FBMEMsa0JBQWtCLGVBQWUsSUFBSSxFQUFFLFlBQVksTUFBTSxjQUFjLDJCQUEyQixvQkFBb0IsZUFBZSxNQUFNLDJCQUEyQixvQkFBb0IsWUFBWSxNQUFNLDJCQUEyQixvQkFBb0IsZ0JBQWdCLE1BQU0sd0JBQXdCLFlBQVksTUFBTSw0QkFBNEIsRUFBRSxpQkFBaUIsWUFBWSxvQkFBb0IseUJBQXlCLDRFQUE0RSw0REFBNEQsMk1BQTJNLHVCQUF1QixvQkFBb0IsK0JBQStCLG9CQUFvQixtQ0FBbUMsR0FBRyxxQkFBcUIsK0NBQStDLHNCQUFzQixrSEFBa0gsb0JBQW9CLElBQUksNkRBQTZELEVBQUUsR0FBRyxFQUFFLEVBQUUsNkVBQTZFLDJCQUEyQiw2QkFBNkIsOEtBQThLLHFDQUFxQyx3RkFBd0YsOEZBQThGLDRCQUE0QixhQUFhLDhCQUE4QixrQkFBa0Isd0NBQXdDLEVBQUUsa0JBQWtCLHdGQUF3RixrQkFBa0IsK0VBQStFLHFCQUFxQixHQUFHLHFCQUFxQiw0QkFBNEIscUhBQXFILEVBQUUsYUFBYSwwQkFBMEIsNEVBQTRFLFFBQVEsa0JBQWtCLEdBQUcsRUFBRSxFQUFFLEdBQUcsV0FBVztBQUNseUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHNCQUFzQixtRUFBbUUscUJBQXFCLDJDQUEyQyw2REFBNkQsR0FBRywrQkFBK0IsY0FBYyw2QkFBNkIsbUJBQW1CLHFCQUFxQixVQUFVLEVBQUUsa0VBQWtFLG1DQUFtQyx3QkFBd0IsRUFBRSxlQUFlLGVBQWUsRUFBRSwyQ0FBMkMsNEJBQTRCLFNBQVMsK0ZBQStGLE9BQU8sVUFBVSxzQ0FBc0MsV0FBVyxFQUFFLCtCQUErQixlQUFlLG1CQUFtQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixpQ0FBaUMsUUFBUSxFQUFFLGlEQUFpRCxxQ0FBcUMsNEJBQTRCLGFBQWEsNEJBQTRCLGtCQUFrQixrQ0FBa0MsY0FBYyxNQUFrQyxLQUFLLDBCQUEwQixhQUFhLGVBQWUsUUFBUSxzRUFBc0UsR0FBRyxTQUFTLHdCQUF3Qiw4REFBOEQsdUVBQXVFLG9CQUFvQiw0S0FBNEssaUNBQWlDLG9CQUFvQixrTEFBa0wsNkRBQTZELHdCQUF3Qix3QkFBd0Isb0JBQW9CLCtCQUErQixHQUFHLEdBQUcsR0FBRyxHQUFHLCtCQUErQixRQUFRLEVBQUUscUlBQXFJLHdEQUF3RCxpRUFBaUUsK0JBQStCLDRCQUE0QixXQUFXLE1BQU0sNERBQTRELDBEQUEwRCw0REFBNEQsaUZBQWlGLDZCQUE2QixtQ0FBbUMsMEJBQTBCLGtCQUFrQiw2QkFBNkIsUUFBUSxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsNEJBQTRCLDhEQUE4RCxHQUFHLG9EQUFvRCwwQkFBMEIsMkJBQTJCLGdEQUFnRCxrRUFBa0UsV0FBVyxFQUFFLE9BQU8sdUNBQXVDLDBCQUEwQixzQkFBc0IsNkJBQTZCLFFBQVEsZUFBZSxFQUFFLEdBQUcsRUFBRSxNQUFNLG9DQUFvQyw4QkFBOEIsMElBQTBJLEVBQUUsYUFBYSxHQUFHLGlCQUFpQjtBQUM5L0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHFCQUFxQixzQ0FBc0MsV0FBVyxFQUFFLHdCQUF3QixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixpQ0FBaUMsTUFBTSxhQUFhLEdBQUcsZUFBZSw2REFBNkQsU0FBUyx3SUFBd0ksb0NBQW9DLGtDQUFrQyxTQUFTLFNBQVMsT0FBTyxVQUFVLG1EQUFtRCxnQ0FBZ0Msc0JBQXNCLHNDQUFzQyxXQUFXLEVBQUUsb0ZBQW9GLGdCQUFnQiwrQkFBK0IsU0FBUyxNQUFNLDZCQUE2QixpRkFBaUYsaUJBQWlCLE9BQU8sR0FBRyxTQUFTLHdDQUF3Qyw4QkFBOEIsMkJBQTJCLGtCQUFrQixnQ0FBZ0Msa0NBQWtDLDJCQUEyQiwyREFBMkQsRUFBRSwwQ0FBMEMsNkJBQTZCLE1BQU0sSUFBSSwyQkFBMkIsU0FBUyxJQUFJLGNBQWMsSUFBSSxXQUFXLGFBQWEsSUFBSSxzREFBc0QsZ0JBQWdCLGFBQWEsRUFBRSxXQUFXLGFBQWEsaUJBQWlCLE9BQU8sYUFBYSxFQUFFLGFBQWEsT0FBTyxTQUFTLEdBQUcsUUFBUSxFQUFFLEdBQUcsU0FBUyxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IseUJBQXlCLFNBQVMsZ0NBQWdDLG9CQUFvQixzQ0FBc0MsV0FBVyxFQUFFLGNBQWMsc0JBQXNCLG1CQUFtQix3REFBd0QsWUFBWSxxQkFBcUIsc0NBQXNDLFdBQVcsRUFBRSxvQkFBb0IsZ0JBQWdCLGdDQUFnQyx1QkFBdUIsdUJBQXVCLGtCQUFrQixJQUFJLHdCQUF3QiwyQkFBMkIsTUFBTSxRQUFRLCtEQUEyQix3Q0FBd0MsTUFBTSxxQ0FBcUMsT0FBTyxTQUFTLEdBQUcsd0JBQXdCLG9CQUFvQixzQ0FBc0MsV0FBVyxFQUFFLHlFQUF5RSxzQ0FBc0Msd0NBQXdDLDRCQUE0QiwwQ0FBMEMsbURBQW1ELDJCQUEyQixrQkFBa0Isa0NBQWtDLDRCQUE0Qix3Q0FBd0MsNEJBQTRCLE1BQWtDLEtBQUssaUNBQWlDLGFBQWEsR0FBRyxnQkFBZ0IsZ0JBQWdCLGdCQUFnQixHQUFHLDBCQUEwQixpREFBaUQsdUJBQXVCLE9BQU8saVFBQWlRLDRFQUE0RSx3QkFBd0IsdUhBQXVILEVBQUUsNENBQTRDLDZKQUE2SixJQUFJLDhDQUE4Qyx1Q0FBdUMsNkRBQTZELGdEQUFnRCwyQkFBMkIsU0FBUyxJQUFJLHdCQUF3Qiw0RUFBNEUsc0JBQXNCLGNBQWMsS0FBSyxhQUFhLGNBQWMsT0FBTyxNQUFNLDZCQUE2Qix1QkFBdUIsbUJBQW1CLE9BQU8sYUFBYSxHQUFHLFNBQVMsSUFBSSxLQUFLLE9BQU8sYUFBYSxLQUFLLHFCQUFxQixnQ0FBZ0Msc0JBQXNCLG1FQUFtRSxxQkFBcUIsMkNBQTJDLDZEQUE2RCxHQUFHLCtCQUErQixjQUFjLDZCQUE2QixtQkFBbUIscUJBQXFCLFVBQVUsRUFBRSxrRUFBa0UsbUNBQW1DLHdCQUF3QixFQUFFLGVBQWUsZUFBZSxFQUFFLDJDQUEyQyw0QkFBNEIsU0FBUywrRkFBK0YsT0FBTyxVQUFVLHNDQUFzQyxXQUFXLEVBQUUsMkJBQTJCLG1CQUFtQixnQ0FBZ0Msa0JBQWtCLHFCQUFxQixPQUFPLG1CQUFtQiw2QkFBNkIsT0FBTyxNQUFNLHdCQUF3Qix5Q0FBeUMsMENBQTBDLGtCQUFrQiw0Q0FBNEMsOENBQThDLFNBQVMsc0NBQXNDLHFCQUFxQixzQ0FBc0MsV0FBVyxFQUFFLG1CQUFtQixlQUFlLHNDQUFzQyxzSEFBc0gsa0dBQWtHLG9CQUFvQixrR0FBa0csR0FBRyxFQUFFLHNCQUFzQixxQkFBcUIsc0NBQXNDLFdBQVcsRUFBRSxjQUFjLGVBQWUsZ0JBQWdCLGdCQUFnQix5QkFBeUI7QUFDbG1NO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEVBQUUsWUFBWSxzQkFBc0Isc0NBQXNDLFdBQVcsRUFBRSx5QkFBeUIsZUFBZSxlQUFlLGdCQUFnQixnQkFBZ0IsZUFBZSxnQkFBZ0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQiwyQkFBMkIseUJBQXlCO0FBQ3pWLFVBQVU7QUFDVixVQUFVO0FBQ1YsVUFBVTtBQUNWLFVBQVU7QUFDVixVQUFVO0FBQ1YsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWLFVBQVU7QUFDVixVQUFVO0FBQ1YsUUFBUSxFQUFFLGtDQUFrQyxzQkFBc0Isc0NBQXNDLFdBQVcsRUFBRSxrQkFBa0IsZUFBZSxnQkFBZ0Isb0JBQW9CLHlCQUF5QjtBQUNuTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLEVBQUUsb0JBQW9CLGtCQUFrQixVQUFVLG1CQUFPLENBQUMsa0ZBQTBCLEVBQUUsa0JBQWtCLFVBQVUsbUJBQU8sQ0FBQyxpR0FBK0IsRUFBRSxrQkFBa0IsVUFBVSxtQkFBTyxDQUFDLDJGQUE2QixFQUFFLGtCQUFrQixVQUFVLG1CQUFPLENBQUMsMkhBQXNDLEVBQUUsa0JBQWtCLFVBQVUsbUJBQU8sQ0FBQyw0RkFBK0IsRUFBRSxrQkFBa0IsVUFBVSxtQkFBTyxDQUFDLDRDQUFPLEVBQUUsa0JBQWtCLFVBQVUsbUJBQU8sQ0FBQyxvREFBVyxJQUFJLFNBQVMsZ0NBQWdDLFdBQVcsa0JBQWtCLGlCQUFpQixZQUFZLFlBQVksV0FBVyxJQUFJLHFEQUFxRCxRQUFRLFFBQVEsaUJBQWlCLGlCQUFpQixtRUFBbUUsU0FBUyxLQUFLLGdDQUFnQyxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9AbmV4dC9yZWFjdC1kZXYtb3ZlcmxheS9kaXN0L2NsaWVudC5qcz80ZDMwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlPXszNTQwOmZ1bmN0aW9uKGUpe1xuLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG52YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO3ZhciByPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtmdW5jdGlvbiB0b09iamVjdChlKXtpZihlPT09bnVsbHx8ZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkXCIpfXJldHVybiBPYmplY3QoZSl9ZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXtyZXR1cm4gZmFsc2V9dmFyIGU9bmV3IFN0cmluZyhcImFiY1wiKTtlWzVdPVwiZGVcIjtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXT09PVwiNVwiKXtyZXR1cm4gZmFsc2V9dmFyIHQ9e307Zm9yKHZhciByPTA7cjwxMDtyKyspe3RbXCJfXCIrU3RyaW5nLmZyb21DaGFyQ29kZShyKV09cn12YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpO2lmKG4uam9pbihcIlwiKSE9PVwiMDEyMzQ1Njc4OVwiKXtyZXR1cm4gZmFsc2V9dmFyIG89e307XCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe29bZV09ZX0pKTtpZihPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LG8pKS5qb2luKFwiXCIpIT09XCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9Y2F0Y2goZSl7cmV0dXJuIGZhbHNlfX1lLmV4cG9ydHM9c2hvdWxkVXNlTmF0aXZlKCk/T2JqZWN0LmFzc2lnbjpmdW5jdGlvbihlLG8pe3ZhciBhO3ZhciBpPXRvT2JqZWN0KGUpO3ZhciBzO2Zvcih2YXIgbD0xO2w8YXJndW1lbnRzLmxlbmd0aDtsKyspe2E9T2JqZWN0KGFyZ3VtZW50c1tsXSk7Zm9yKHZhciB1IGluIGEpe2lmKHIuY2FsbChhLHUpKXtpW3VdPWFbdV19fWlmKHQpe3M9dChhKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKyl7aWYobi5jYWxsKGEsc1tjXSkpe2lbc1tjXV09YVtzW2NdXX19fX1yZXR1cm4gaX19LDMwMzc6ZnVuY3Rpb24oZSx0LHIpe1xuLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbmlmKHByb2Nlc3MuZW52Lk5PREVfRU5WIT09XCJwcm9kdWN0aW9uXCIpeyhmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBlPXIoNzUyMik7dmFyIG49cigzNTQwKTt2YXIgbz02MDEwMzt2YXIgYT02MDEwNjt0LkZyYWdtZW50PTYwMTA3O3ZhciBpPTYwMTA4O3ZhciBzPTYwMTE0O3ZhciBsPTYwMTA5O3ZhciB1PTYwMTEwO3ZhciBjPTYwMTEyO3ZhciBkPTYwMTEzO3ZhciBmPTYwMTIwO3ZhciBwPTYwMTE1O3ZhciBtPTYwMTE2O3ZhciB2PTYwMTIxO3ZhciBiPTYwMTIyO3ZhciBnPTYwMTE3O3ZhciBoPTYwMTE5O3ZhciB5PTYwMTI4O3ZhciB4PTYwMTI5O3ZhciBfPTYwMTMwO3ZhciB3PTYwMTMxO2lmKHR5cGVvZiBTeW1ib2w9PT1cImZ1bmN0aW9uXCImJlN5bWJvbC5mb3Ipe3ZhciBFPVN5bWJvbC5mb3I7bz1FKFwicmVhY3QuZWxlbWVudFwiKTthPUUoXCJyZWFjdC5wb3J0YWxcIik7dC5GcmFnbWVudD1FKFwicmVhY3QuZnJhZ21lbnRcIik7aT1FKFwicmVhY3Quc3RyaWN0X21vZGVcIik7cz1FKFwicmVhY3QucHJvZmlsZXJcIik7bD1FKFwicmVhY3QucHJvdmlkZXJcIik7dT1FKFwicmVhY3QuY29udGV4dFwiKTtjPUUoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKTtkPUUoXCJyZWFjdC5zdXNwZW5zZVwiKTtmPUUoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpO3A9RShcInJlYWN0Lm1lbW9cIik7bT1FKFwicmVhY3QubGF6eVwiKTt2PUUoXCJyZWFjdC5ibG9ja1wiKTtiPUUoXCJyZWFjdC5zZXJ2ZXIuYmxvY2tcIik7Zz1FKFwicmVhY3QuZnVuZGFtZW50YWxcIik7aD1FKFwicmVhY3Quc2NvcGVcIik7eT1FKFwicmVhY3Qub3BhcXVlLmlkXCIpO3g9RShcInJlYWN0LmRlYnVnX3RyYWNlX21vZGVcIik7Xz1FKFwicmVhY3Qub2Zmc2NyZWVuXCIpO3c9RShcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIil9dmFyIGo9dHlwZW9mIFN5bWJvbD09PVwiZnVuY3Rpb25cIiYmU3ltYm9sLml0ZXJhdG9yO3ZhciBPPVwiQEBpdGVyYXRvclwiO2Z1bmN0aW9uIGdldEl0ZXJhdG9yRm4oZSl7aWYoZT09PW51bGx8fHR5cGVvZiBlIT09XCJvYmplY3RcIil7cmV0dXJuIG51bGx9dmFyIHQ9aiYmZVtqXXx8ZVtPXTtpZih0eXBlb2YgdD09PVwiZnVuY3Rpb25cIil7cmV0dXJuIHR9cmV0dXJuIG51bGx9dmFyIGs9ZS5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtmdW5jdGlvbiBlcnJvcihlKXt7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodD4xP3QtMTowKSxuPTE7bjx0O24rKyl7cltuLTFdPWFyZ3VtZW50c1tuXX1wcmludFdhcm5pbmcoXCJlcnJvclwiLGUscil9fWZ1bmN0aW9uIHByaW50V2FybmluZyhlLHQscil7e3ZhciBuPWsuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTt2YXIgbz1uLmdldFN0YWNrQWRkZW5kdW0oKTtpZihvIT09XCJcIil7dCs9XCIlc1wiO3I9ci5jb25jYXQoW29dKX12YXIgYT1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuXCJcIitlfSkpO2EudW5zaGlmdChcIldhcm5pbmc6IFwiK3QpO0Z1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbZV0sY29uc29sZSxhKX19dmFyIFM9ZmFsc2U7ZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKGUpe2lmKHR5cGVvZiBlPT09XCJzdHJpbmdcInx8dHlwZW9mIGU9PT1cImZ1bmN0aW9uXCIpe3JldHVybiB0cnVlfWlmKGU9PT10LkZyYWdtZW50fHxlPT09c3x8ZT09PXh8fGU9PT1pfHxlPT09ZHx8ZT09PWZ8fGU9PT13fHxTKXtyZXR1cm4gdHJ1ZX1pZih0eXBlb2YgZT09PVwib2JqZWN0XCImJmUhPT1udWxsKXtpZihlLiQkdHlwZW9mPT09bXx8ZS4kJHR5cGVvZj09PXB8fGUuJCR0eXBlb2Y9PT1sfHxlLiQkdHlwZW9mPT09dXx8ZS4kJHR5cGVvZj09PWN8fGUuJCR0eXBlb2Y9PT1nfHxlLiQkdHlwZW9mPT09dnx8ZVswXT09PWIpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUoZSx0LHIpe3ZhciBuPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8XCJcIjtyZXR1cm4gZS5kaXNwbGF5TmFtZXx8KG4hPT1cIlwiP3IrXCIoXCIrbitcIilcIjpyKX1mdW5jdGlvbiBnZXRDb250ZXh0TmFtZShlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZXx8XCJDb250ZXh0XCJ9ZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZShlKXtpZihlPT1udWxsKXtyZXR1cm4gbnVsbH17aWYodHlwZW9mIGUudGFnPT09XCJudW1iZXJcIil7ZXJyb3IoXCJSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lKCkuIFwiK1wiVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiKX19aWYodHlwZW9mIGU9PT1cImZ1bmN0aW9uXCIpe3JldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fG51bGx9aWYodHlwZW9mIGU9PT1cInN0cmluZ1wiKXtyZXR1cm4gZX1zd2l0Y2goZSl7Y2FzZSB0LkZyYWdtZW50OnJldHVyblwiRnJhZ21lbnRcIjtjYXNlIGE6cmV0dXJuXCJQb3J0YWxcIjtjYXNlIHM6cmV0dXJuXCJQcm9maWxlclwiO2Nhc2UgaTpyZXR1cm5cIlN0cmljdE1vZGVcIjtjYXNlIGQ6cmV0dXJuXCJTdXNwZW5zZVwiO2Nhc2UgZjpyZXR1cm5cIlN1c3BlbnNlTGlzdFwifWlmKHR5cGVvZiBlPT09XCJvYmplY3RcIil7c3dpdGNoKGUuJCR0eXBlb2Ype2Nhc2UgdTp2YXIgcj1lO3JldHVybiBnZXRDb250ZXh0TmFtZShyKStcIi5Db25zdW1lclwiO2Nhc2UgbDp2YXIgbj1lO3JldHVybiBnZXRDb250ZXh0TmFtZShuLl9jb250ZXh0KStcIi5Qcm92aWRlclwiO2Nhc2UgYzpyZXR1cm4gZ2V0V3JhcHBlZE5hbWUoZSxlLnJlbmRlcixcIkZvcndhcmRSZWZcIik7Y2FzZSBwOnJldHVybiBnZXRDb21wb25lbnROYW1lKGUudHlwZSk7Y2FzZSB2OnJldHVybiBnZXRDb21wb25lbnROYW1lKGUuX3JlbmRlcik7Y2FzZSBtOnt2YXIgbz1lO3ZhciBiPW8uX3BheWxvYWQ7dmFyIGc9by5faW5pdDt0cnl7cmV0dXJuIGdldENvbXBvbmVudE5hbWUoZyhiKSl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9fX19cmV0dXJuIG51bGx9dmFyIEM9MDt2YXIgVDt2YXIgRDt2YXIgUDt2YXIgTjt2YXIgUjt2YXIgRjt2YXIgSTtmdW5jdGlvbiBkaXNhYmxlZExvZygpe31kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2c9dHJ1ZTtmdW5jdGlvbiBkaXNhYmxlTG9ncygpe3tpZihDPT09MCl7VD1jb25zb2xlLmxvZztEPWNvbnNvbGUuaW5mbztQPWNvbnNvbGUud2FybjtOPWNvbnNvbGUuZXJyb3I7Uj1jb25zb2xlLmdyb3VwO0Y9Y29uc29sZS5ncm91cENvbGxhcHNlZDtJPWNvbnNvbGUuZ3JvdXBFbmQ7dmFyIGU9e2NvbmZpZ3VyYWJsZTp0cnVlLGVudW1lcmFibGU6dHJ1ZSx2YWx1ZTpkaXNhYmxlZExvZyx3cml0YWJsZTp0cnVlfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLHtpbmZvOmUsbG9nOmUsd2FybjplLGVycm9yOmUsZ3JvdXA6ZSxncm91cENvbGxhcHNlZDplLGdyb3VwRW5kOmV9KX1DKyt9fWZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpe3tDLS07aWYoQz09PTApe3ZhciBlPXtjb25maWd1cmFibGU6dHJ1ZSxlbnVtZXJhYmxlOnRydWUsd3JpdGFibGU6dHJ1ZX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSx7bG9nOm4oe30sZSx7dmFsdWU6VH0pLGluZm86bih7fSxlLHt2YWx1ZTpEfSksd2FybjpuKHt9LGUse3ZhbHVlOlB9KSxlcnJvcjpuKHt9LGUse3ZhbHVlOk59KSxncm91cDpuKHt9LGUse3ZhbHVlOlJ9KSxncm91cENvbGxhcHNlZDpuKHt9LGUse3ZhbHVlOkZ9KSxncm91cEVuZDpuKHt9LGUse3ZhbHVlOkl9KX0pfWlmKEM8MCl7ZXJyb3IoXCJkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gXCIrXCJUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIil9fX12YXIgQT1rLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7dmFyIE07ZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoZSx0LHIpe3tpZihNPT09dW5kZWZpbmVkKXt0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChlKXt2YXIgbj1lLnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO009biYmblsxXXx8XCJcIn19cmV0dXJuXCJcXG5cIitNK2V9fXZhciBMPWZhbHNlO3ZhciBCO3t2YXIgSD10eXBlb2YgV2Vha01hcD09PVwiZnVuY3Rpb25cIj9XZWFrTWFwOk1hcDtCPW5ldyBIfWZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZSx0KXtpZighZXx8TCl7cmV0dXJuXCJcIn17dmFyIHI9Qi5nZXQoZSk7aWYociE9PXVuZGVmaW5lZCl7cmV0dXJuIHJ9fXZhciBuO0w9dHJ1ZTt2YXIgbz1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT11bmRlZmluZWQ7dmFyIGE7e2E9QS5jdXJyZW50O0EuY3VycmVudD1udWxsO2Rpc2FibGVMb2dzKCl9dHJ5e2lmKHQpe3ZhciBGYWtlPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLFwicHJvcHNcIix7c2V0OmZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX19KTtpZih0eXBlb2YgUmVmbGVjdD09PVwib2JqZWN0XCImJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSxbXSl9Y2F0Y2goZSl7bj1lfVJlZmxlY3QuY29uc3RydWN0KGUsW10sRmFrZSl9ZWxzZXt0cnl7RmFrZS5jYWxsKCl9Y2F0Y2goZSl7bj1lfWUuY2FsbChGYWtlLnByb3RvdHlwZSl9fWVsc2V7dHJ5e3Rocm93IEVycm9yKCl9Y2F0Y2goZSl7bj1lfWUoKX19Y2F0Y2godCl7aWYodCYmbiYmdHlwZW9mIHQuc3RhY2s9PT1cInN0cmluZ1wiKXt2YXIgaT10LnN0YWNrLnNwbGl0KFwiXFxuXCIpO3ZhciBzPW4uc3RhY2suc3BsaXQoXCJcXG5cIik7dmFyIGw9aS5sZW5ndGgtMTt2YXIgdT1zLmxlbmd0aC0xO3doaWxlKGw+PTEmJnU+PTAmJmlbbF0hPT1zW3VdKXt1LS19Zm9yKDtsPj0xJiZ1Pj0wO2wtLSx1LS0pe2lmKGlbbF0hPT1zW3VdKXtpZihsIT09MXx8dSE9PTEpe2Rve2wtLTt1LS07aWYodTwwfHxpW2xdIT09c1t1XSl7dmFyIGM9XCJcXG5cIitpW2xdLnJlcGxhY2UoXCIgYXQgbmV3IFwiLFwiIGF0IFwiKTt7aWYodHlwZW9mIGU9PT1cImZ1bmN0aW9uXCIpe0Iuc2V0KGUsYyl9fXJldHVybiBjfX13aGlsZShsPj0xJiZ1Pj0wKX1icmVha319fX1maW5hbGx5e0w9ZmFsc2U7e0EuY3VycmVudD1hO3JlZW5hYmxlTG9ncygpfUVycm9yLnByZXBhcmVTdGFja1RyYWNlPW99dmFyIGQ9ZT9lLmRpc3BsYXlOYW1lfHxlLm5hbWU6XCJcIjt2YXIgZj1kP2Rlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGQpOlwiXCI7e2lmKHR5cGVvZiBlPT09XCJmdW5jdGlvblwiKXtCLnNldChlLGYpfX1yZXR1cm4gZn1mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZSx0LHIpe3tyZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShlLGZhbHNlKX19ZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KGUpe3ZhciB0PWUucHJvdG90eXBlO3JldHVybiEhKHQmJnQuaXNSZWFjdENvbXBvbmVudCl9ZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGUsdCxyKXtpZihlPT1udWxsKXtyZXR1cm5cIlwifWlmKHR5cGVvZiBlPT09XCJmdW5jdGlvblwiKXt7cmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZSxzaG91bGRDb25zdHJ1Y3QoZSkpfX1pZih0eXBlb2YgZT09PVwic3RyaW5nXCIpe3JldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShlKX1zd2l0Y2goZSl7Y2FzZSBkOnJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlXCIpO2Nhc2UgZjpyZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZUxpc3RcIil9aWYodHlwZW9mIGU9PT1cIm9iamVjdFwiKXtzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSBjOnJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZS5yZW5kZXIpO2Nhc2UgcDpyZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGUudHlwZSx0LHIpO2Nhc2UgdjpyZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGUuX3JlbmRlcik7Y2FzZSBtOnt2YXIgbj1lO3ZhciBvPW4uX3BheWxvYWQ7dmFyIGE9bi5faW5pdDt0cnl7cmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihhKG8pLHQscil9Y2F0Y2goZSl7fX19fXJldHVyblwiXCJ9dmFyIHo9e307dmFyIFc9ay5SZWFjdERlYnVnQ3VycmVudEZyYW1lO2Z1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGUpe3tpZihlKXt2YXIgdD1lLl9vd25lcjt2YXIgcj1kZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZS50eXBlLGUuX3NvdXJjZSx0P3QudHlwZTpudWxsKTtXLnNldEV4dHJhU3RhY2tGcmFtZShyKX1lbHNle1cuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpfX19ZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXMoZSx0LHIsbixvKXt7dmFyIGE9RnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO2Zvcih2YXIgaSBpbiBlKXtpZihhKGUsaSkpe3ZhciBzPXZvaWQgMDt0cnl7aWYodHlwZW9mIGVbaV0hPT1cImZ1bmN0aW9uXCIpe3ZhciBsPUVycm9yKChufHxcIlJlYWN0IGNsYXNzXCIpK1wiOiBcIityK1wiIHR5cGUgYFwiK2krXCJgIGlzIGludmFsaWQ7IFwiK1wiaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYFwiK3R5cGVvZiBlW2ldK1wiYC5cIitcIlRoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLlwiKTtsLm5hbWU9XCJJbnZhcmlhbnQgVmlvbGF0aW9uXCI7dGhyb3cgbH1zPWVbaV0odCxpLG4scixudWxsLFwiU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRURcIil9Y2F0Y2goZSl7cz1lfWlmKHMmJiEocyBpbnN0YW5jZW9mIEVycm9yKSl7c2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobyk7ZXJyb3IoXCIlczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzXCIrXCIgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyIFwiK1wiZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuIFwiK1wiWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgXCIrXCJjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kIFwiK1wic2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLlwiLG58fFwiUmVhY3QgY2xhc3NcIixyLGksdHlwZW9mIHMpO3NldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpfWlmKHMgaW5zdGFuY2VvZiBFcnJvciYmIShzLm1lc3NhZ2UgaW4geikpe3pbcy5tZXNzYWdlXT10cnVlO3NldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG8pO2Vycm9yKFwiRmFpbGVkICVzIHR5cGU6ICVzXCIscixzLm1lc3NhZ2UpO3NldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpfX19fX12YXIgVj1rLlJlYWN0Q3VycmVudE93bmVyO3ZhciAkPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIFU9e2tleTp0cnVlLHJlZjp0cnVlLF9fc2VsZjp0cnVlLF9fc291cmNlOnRydWV9O3ZhciBLO3ZhciBHO3ZhciBaO3taPXt9fWZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGUpe3tpZigkLmNhbGwoZSxcInJlZlwiKSl7dmFyIHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLFwicmVmXCIpLmdldDtpZih0JiZ0LmlzUmVhY3RXYXJuaW5nKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gZS5yZWYhPT11bmRlZmluZWR9ZnVuY3Rpb24gaGFzVmFsaWRLZXkoZSl7e2lmKCQuY2FsbChlLFwia2V5XCIpKXt2YXIgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsXCJrZXlcIikuZ2V0O2lmKHQmJnQuaXNSZWFjdFdhcm5pbmcpe3JldHVybiBmYWxzZX19fXJldHVybiBlLmtleSE9PXVuZGVmaW5lZH1mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoZSx0KXt7aWYodHlwZW9mIGUucmVmPT09XCJzdHJpbmdcIiYmVi5jdXJyZW50JiZ0JiZWLmN1cnJlbnQuc3RhdGVOb2RlIT09dCl7dmFyIHI9Z2V0Q29tcG9uZW50TmFtZShWLmN1cnJlbnQudHlwZSk7aWYoIVpbcl0pe2Vycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJytcIlN1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBcIitcIlRoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uIFwiK1wiV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuIFwiK1wiTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiBcIitcImh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmXCIsZ2V0Q29tcG9uZW50TmFtZShWLmN1cnJlbnQudHlwZSksZS5yZWYpO1pbcl09dHJ1ZX19fX1mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihlLHQpe3t2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5PWZ1bmN0aW9uKCl7aWYoIUspe0s9dHJ1ZTtlcnJvcihcIiVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0IFwiK1wiaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSBcIitcInZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgXCIrXCJwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpXCIsdCl9fTt3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmc9dHJ1ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImtleVwiLHtnZXQ6d2FybkFib3V0QWNjZXNzaW5nS2V5LGNvbmZpZ3VyYWJsZTp0cnVlfSl9fWZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKGUsdCl7e3ZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWY9ZnVuY3Rpb24oKXtpZighRyl7Rz10cnVlO2Vycm9yKFwiJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgXCIrXCJpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lIFwiK1widmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCBcIitcInByb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcylcIix0KX19O3dhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZz10cnVlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicmVmXCIse2dldDp3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsY29uZmlndXJhYmxlOnRydWV9KX19dmFyIFJlYWN0RWxlbWVudD1mdW5jdGlvbihlLHQscixuLGEsaSxzKXt2YXIgbD17JCR0eXBlb2Y6byx0eXBlOmUsa2V5OnQscmVmOnIscHJvcHM6cyxfb3duZXI6aX07e2wuX3N0b3JlPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLl9zdG9yZSxcInZhbGlkYXRlZFwiLHtjb25maWd1cmFibGU6ZmFsc2UsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLHZhbHVlOmZhbHNlfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsXCJfc2VsZlwiLHtjb25maWd1cmFibGU6ZmFsc2UsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTpmYWxzZSx2YWx1ZTpufSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsXCJfc291cmNlXCIse2NvbmZpZ3VyYWJsZTpmYWxzZSxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOmZhbHNlLHZhbHVlOmF9KTtpZihPYmplY3QuZnJlZXplKXtPYmplY3QuZnJlZXplKGwucHJvcHMpO09iamVjdC5mcmVlemUobCl9fXJldHVybiBsfTtmdW5jdGlvbiBqc3hERVYoZSx0LHIsbixvKXt7dmFyIGE7dmFyIGk9e307dmFyIHM9bnVsbDt2YXIgbD1udWxsO2lmKHIhPT11bmRlZmluZWQpe3M9XCJcIityfWlmKGhhc1ZhbGlkS2V5KHQpKXtzPVwiXCIrdC5rZXl9aWYoaGFzVmFsaWRSZWYodCkpe2w9dC5yZWY7d2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKHQsbyl9Zm9yKGEgaW4gdCl7aWYoJC5jYWxsKHQsYSkmJiFVLmhhc093blByb3BlcnR5KGEpKXtpW2FdPXRbYV19fWlmKGUmJmUuZGVmYXVsdFByb3BzKXt2YXIgdT1lLmRlZmF1bHRQcm9wcztmb3IoYSBpbiB1KXtpZihpW2FdPT09dW5kZWZpbmVkKXtpW2FdPXVbYV19fX1pZihzfHxsKXt2YXIgYz10eXBlb2YgZT09PVwiZnVuY3Rpb25cIj9lLmRpc3BsYXlOYW1lfHxlLm5hbWV8fFwiVW5rbm93blwiOmU7aWYocyl7ZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIoaSxjKX1pZihsKXtkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihpLGMpfX1yZXR1cm4gUmVhY3RFbGVtZW50KGUscyxsLG8sbixWLmN1cnJlbnQsaSl9fXZhciBZPWsuUmVhY3RDdXJyZW50T3duZXI7dmFyIEo9ay5SZWFjdERlYnVnQ3VycmVudEZyYW1lO2Z1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZSl7e2lmKGUpe3ZhciB0PWUuX293bmVyO3ZhciByPWRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlLnR5cGUsZS5fc291cmNlLHQ/dC50eXBlOm51bGwpO0ouc2V0RXh0cmFTdGFja0ZyYW1lKHIpfWVsc2V7Si5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCl9fX12YXIgWDt7WD1mYWxzZX1mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChlKXt7cmV0dXJuIHR5cGVvZiBlPT09XCJvYmplY3RcIiYmZSE9PW51bGwmJmUuJCR0eXBlb2Y9PT1vfX1mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKXt7aWYoWS5jdXJyZW50KXt2YXIgZT1nZXRDb21wb25lbnROYW1lKFkuY3VycmVudC50eXBlKTtpZihlKXtyZXR1cm5cIlxcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGBcIitlK1wiYC5cIn19cmV0dXJuXCJcIn19ZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZSl7e2lmKGUhPT11bmRlZmluZWQpe3ZhciB0PWUuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLyxcIlwiKTt2YXIgcj1lLmxpbmVOdW1iZXI7cmV0dXJuXCJcXG5cXG5DaGVjayB5b3VyIGNvZGUgYXQgXCIrdCtcIjpcIityK1wiLlwifXJldHVyblwiXCJ9fXZhciBRPXt9O2Z1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8oZSl7e3ZhciB0PWdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO2lmKCF0KXt2YXIgcj10eXBlb2YgZT09PVwic3RyaW5nXCI/ZTplLmRpc3BsYXlOYW1lfHxlLm5hbWU7aWYocil7dD1cIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiK3IrXCI+LlwifX1yZXR1cm4gdH19ZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlLHQpe3tpZighZS5fc3RvcmV8fGUuX3N0b3JlLnZhbGlkYXRlZHx8ZS5rZXkhPW51bGwpe3JldHVybn1lLl9zdG9yZS52YWxpZGF0ZWQ9dHJ1ZTt2YXIgcj1nZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHQpO2lmKFFbcl0pe3JldHVybn1RW3JdPXRydWU7dmFyIG49XCJcIjtpZihlJiZlLl9vd25lciYmZS5fb3duZXIhPT1ZLmN1cnJlbnQpe249XCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIrZ2V0Q29tcG9uZW50TmFtZShlLl9vd25lci50eXBlKStcIi5cIn1zZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGUpO2Vycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiIHByb3AuJytcIiVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIscixuKTtzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpfX1mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhlLHQpe3tpZih0eXBlb2YgZSE9PVwib2JqZWN0XCIpe3JldHVybn1pZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZihpc1ZhbGlkRWxlbWVudChuKSl7dmFsaWRhdGVFeHBsaWNpdEtleShuLHQpfX19ZWxzZSBpZihpc1ZhbGlkRWxlbWVudChlKSl7aWYoZS5fc3RvcmUpe2UuX3N0b3JlLnZhbGlkYXRlZD10cnVlfX1lbHNlIGlmKGUpe3ZhciBvPWdldEl0ZXJhdG9yRm4oZSk7aWYodHlwZW9mIG89PT1cImZ1bmN0aW9uXCIpe2lmKG8hPT1lLmVudHJpZXMpe3ZhciBhPW8uY2FsbChlKTt2YXIgaTt3aGlsZSghKGk9YS5uZXh0KCkpLmRvbmUpe2lmKGlzVmFsaWRFbGVtZW50KGkudmFsdWUpKXt2YWxpZGF0ZUV4cGxpY2l0S2V5KGkudmFsdWUsdCl9fX19fX19ZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZSl7e3ZhciB0PWUudHlwZTtpZih0PT09bnVsbHx8dD09PXVuZGVmaW5lZHx8dHlwZW9mIHQ9PT1cInN0cmluZ1wiKXtyZXR1cm59dmFyIHI7aWYodHlwZW9mIHQ9PT1cImZ1bmN0aW9uXCIpe3I9dC5wcm9wVHlwZXN9ZWxzZSBpZih0eXBlb2YgdD09PVwib2JqZWN0XCImJih0LiQkdHlwZW9mPT09Y3x8dC4kJHR5cGVvZj09PXApKXtyPXQucHJvcFR5cGVzfWVsc2V7cmV0dXJufWlmKHIpe3ZhciBuPWdldENvbXBvbmVudE5hbWUodCk7Y2hlY2tQcm9wVHlwZXMocixlLnByb3BzLFwicHJvcFwiLG4sZSl9ZWxzZSBpZih0LlByb3BUeXBlcyE9PXVuZGVmaW5lZCYmIVgpe1g9dHJ1ZTt2YXIgbz1nZXRDb21wb25lbnROYW1lKHQpO2Vycm9yKFwiQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/XCIsb3x8XCJVbmtub3duXCIpfWlmKHR5cGVvZiB0LmdldERlZmF1bHRQcm9wcz09PVwiZnVuY3Rpb25cIiYmIXQuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKXtlcnJvcihcImdldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyBcIitcImRlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC5cIil9fX1mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZSl7e3ZhciB0PU9iamVjdC5rZXlzKGUucHJvcHMpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2lmKG4hPT1cImNoaWxkcmVuXCImJm4hPT1cImtleVwiKXtzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGUpO2Vycm9yKFwiSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gXCIrXCJSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLlwiLG4pO3NldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7YnJlYWt9fWlmKGUucmVmIT09bnVsbCl7c2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlKTtlcnJvcihcIkludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuXCIpO3NldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCl9fX1mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvbihlLHIsbixhLGkscyl7e3ZhciBsPWlzVmFsaWRFbGVtZW50VHlwZShlKTtpZighbCl7dmFyIHU9XCJcIjtpZihlPT09dW5kZWZpbmVkfHx0eXBlb2YgZT09PVwib2JqZWN0XCImJmUhPT1udWxsJiZPYmplY3Qua2V5cyhlKS5sZW5ndGg9PT0wKXt1Kz1cIiBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSBcIitcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIn12YXIgYz1nZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShpKTtpZihjKXt1Kz1jfWVsc2V7dSs9Z2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCl9dmFyIGQ7aWYoZT09PW51bGwpe2Q9XCJudWxsXCJ9ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtkPVwiYXJyYXlcIn1lbHNlIGlmKGUhPT11bmRlZmluZWQmJmUuJCR0eXBlb2Y9PT1vKXtkPVwiPFwiKyhnZXRDb21wb25lbnROYW1lKGUudHlwZSl8fFwiVW5rbm93blwiKStcIiAvPlwiO3U9XCIgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD9cIn1lbHNle2Q9dHlwZW9mIGV9ZXJyb3IoXCJSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yIFwiK1wiYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBcIitcImNvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzXCIsZCx1KX12YXIgZj1qc3hERVYoZSxyLG4saSxzKTtpZihmPT1udWxsKXtyZXR1cm4gZn1pZihsKXt2YXIgcD1yLmNoaWxkcmVuO2lmKHAhPT11bmRlZmluZWQpe2lmKGEpe2lmKEFycmF5LmlzQXJyYXkocCkpe2Zvcih2YXIgbT0wO208cC5sZW5ndGg7bSsrKXt2YWxpZGF0ZUNoaWxkS2V5cyhwW21dLGUpfWlmKE9iamVjdC5mcmVlemUpe09iamVjdC5mcmVlemUocCl9fWVsc2V7ZXJyb3IoXCJSZWFjdC5qc3g6IFN0YXRpYyBjaGlsZHJlbiBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LiBcIitcIllvdSBhcmUgbGlrZWx5IGV4cGxpY2l0bHkgY2FsbGluZyBSZWFjdC5qc3hzIG9yIFJlYWN0LmpzeERFVi4gXCIrXCJVc2UgdGhlIEJhYmVsIHRyYW5zZm9ybSBpbnN0ZWFkLlwiKX19ZWxzZXt2YWxpZGF0ZUNoaWxkS2V5cyhwLGUpfX19aWYoZT09PXQuRnJhZ21lbnQpe3ZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmKX1lbHNle3ZhbGlkYXRlUHJvcFR5cGVzKGYpfXJldHVybiBmfX1mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvblN0YXRpYyhlLHQscil7e3JldHVybiBqc3hXaXRoVmFsaWRhdGlvbihlLHQscix0cnVlKX19ZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb25EeW5hbWljKGUsdCxyKXt7cmV0dXJuIGpzeFdpdGhWYWxpZGF0aW9uKGUsdCxyLGZhbHNlKX19dmFyIGVlPWpzeFdpdGhWYWxpZGF0aW9uRHluYW1pYzt2YXIgdGU9anN4V2l0aFZhbGlkYXRpb25TdGF0aWM7dC5qc3g9ZWU7dC5qc3hzPXRlfSkoKX19LDEwODA6ZnVuY3Rpb24oZSx0LHIpe1xuLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbnIoMzU0MCk7dmFyIG49cig3NTIyKSxvPTYwMTAzO3QuRnJhZ21lbnQ9NjAxMDc7aWYoXCJmdW5jdGlvblwiPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcil7dmFyIGE9U3ltYm9sLmZvcjtvPWEoXCJyZWFjdC5lbGVtZW50XCIpO3QuRnJhZ21lbnQ9YShcInJlYWN0LmZyYWdtZW50XCIpfXZhciBpPW4uX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQuUmVhY3RDdXJyZW50T3duZXIscz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGw9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtmdW5jdGlvbiBxKGUsdCxyKXt2YXIgbixhPXt9LHU9bnVsbCxjPW51bGw7dm9pZCAwIT09ciYmKHU9XCJcIityKTt2b2lkIDAhPT10LmtleSYmKHU9XCJcIit0LmtleSk7dm9pZCAwIT09dC5yZWYmJihjPXQucmVmKTtmb3IobiBpbiB0KXMuY2FsbCh0LG4pJiYhbC5oYXNPd25Qcm9wZXJ0eShuKSYmKGFbbl09dFtuXSk7aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKG4gaW4gdD1lLmRlZmF1bHRQcm9wcyx0KXZvaWQgMD09PWFbbl0mJihhW25dPXRbbl0pO3JldHVybnskJHR5cGVvZjpvLHR5cGU6ZSxrZXk6dSxyZWY6Yyxwcm9wczphLF9vd25lcjppLmN1cnJlbnR9fXQuanN4PXE7dC5qc3hzPXF9LDUwNTpmdW5jdGlvbihlLHQscil7aWYocHJvY2Vzcy5lbnYuTk9ERV9FTlY9PT1cInByb2R1Y3Rpb25cIil7ZS5leHBvcnRzPXIoMTA4MCl9ZWxzZXtlLmV4cG9ydHM9cigzMDM3KX19LDM4NzY6ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pOzAmJjA7ZnVuY3Rpb24gX2V4cG9ydChlLHQpe2Zvcih2YXIgciBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6dFtyXX0pfV9leHBvcnQodCx7aHlkcmF0aW9uRXJyb3JXYXJuaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGh5ZHJhdGlvbkVycm9yQ29tcG9uZW50U3RhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbn0scGF0Y2hDb25zb2xlRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gcGF0Y2hDb25zb2xlRXJyb3J9fSk7bGV0IHI7bGV0IG47Y29uc3Qgbz1uZXcgU2V0KFsnV2FybmluZzogVGV4dCBjb250ZW50IGRpZCBub3QgbWF0Y2guIFNlcnZlcjogXCIlc1wiIENsaWVudDogXCIlc1wiJXMnLFwiV2FybmluZzogRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIDwlcz4gaW4gPCVzPi4lc1wiLCdXYXJuaW5nOiBFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgdGV4dCBub2RlIGZvciBcIiVzXCIgaW4gPCVzPi4lcycsXCJXYXJuaW5nOiBEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgPCVzPiBpbiA8JXM+LiVzXCIsJ1dhcm5pbmc6IERpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gdGhlIHRleHQgbm9kZSBcIiVzXCIgaW4gPCVzPi4lcyddKTtmdW5jdGlvbiBwYXRjaENvbnNvbGVFcnJvcigpe2NvbnN0IGU9Y29uc29sZS5lcnJvcjtjb25zb2xlLmVycm9yPWZ1bmN0aW9uKHQsYSxpLHMpe2lmKG8uaGFzKHQpKXtyPXQucmVwbGFjZShcIiVzXCIsYSkucmVwbGFjZShcIiVzXCIsaSkucmVwbGFjZShcIiVzXCIsXCJcIik7bj1zfWUuYXBwbHkoY29uc29sZSxhcmd1bWVudHMpfX1pZigodHlwZW9mIHQuZGVmYXVsdD09PVwiZnVuY3Rpb25cInx8dHlwZW9mIHQuZGVmYXVsdD09PVwib2JqZWN0XCImJnQuZGVmYXVsdCE9PW51bGwpJiZ0eXBlb2YgdC5kZWZhdWx0Ll9fZXNNb2R1bGU9PT1cInVuZGVmaW5lZFwiKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodC5kZWZhdWx0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7T2JqZWN0LmFzc2lnbih0LmRlZmF1bHQsdCk7ZS5leHBvcnRzPXQuZGVmYXVsdH19LDQ2NTk6ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicGFyc2VDb21wb25lbnRTdGFja1wiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlQ29tcG9uZW50U3RhY2t9fSk7dmFyIHI7KGZ1bmN0aW9uKGUpe2VbXCJGSUxFXCJdPVwiZmlsZVwiO2VbXCJXRUJQQUNLX0lOVEVSTkFMXCJdPVwid2VicGFjay1pbnRlcm5hbFwiO2VbXCJIVFRQXCJdPVwiaHR0cFwiO2VbXCJQUk9UT0NPTF9SRUxBVElWRVwiXT1cInByb3RvY29sLXJlbGF0aXZlXCI7ZVtcIlVOS05PV05cIl09XCJ1bmtub3duXCJ9KShyfHwocj17fSkpO2Z1bmN0aW9uIGdldExvY2F0aW9uVHlwZShlKXtpZihlLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpKXtyZXR1cm5cImZpbGVcIn1pZihlLnN0YXJ0c1dpdGgoXCJ3ZWJwYWNrLWludGVybmFsOi8vXCIpKXtyZXR1cm5cIndlYnBhY2staW50ZXJuYWxcIn1pZihlLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpfHxlLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKSl7cmV0dXJuXCJodHRwXCJ9aWYoZS5zdGFydHNXaXRoKFwiLy9cIikpe3JldHVyblwicHJvdG9jb2wtcmVsYXRpdmVcIn1yZXR1cm5cInVua25vd25cIn1mdW5jdGlvbiBwYXJzZVN0YWNrRnJhbWVMb2NhdGlvbihlKXtjb25zdCB0PWdldExvY2F0aW9uVHlwZShlKTtjb25zdCByPWU9PW51bGw/dm9pZCAwOmUucmVwbGFjZSgvXih3ZWJwYWNrLWludGVybmFsOlxcL1xcL1xcL3xmaWxlOlxcL1xcLykoXFwoLipcXClcXC8pPy8sXCJcIik7dmFyIG47Y29uc3RbLG8sYSxpXT0obj1yPT1udWxsP3ZvaWQgMDpyLm1hdGNoKC9eKC4rKTooXFxkKyk6KFxcZCspLykpIT1udWxsP246W107c3dpdGNoKHQpe2Nhc2VcImZpbGVcIjpjYXNlXCJ3ZWJwYWNrLWludGVybmFsXCI6cmV0dXJue2Nhbk9wZW5JbkVkaXRvcjp0cnVlLGZpbGU6byxsaW5lTnVtYmVyOmE/TnVtYmVyKGEpOnVuZGVmaW5lZCxjb2x1bW46aT9OdW1iZXIoaSk6dW5kZWZpbmVkfTtjYXNlXCJodHRwXCI6Y2FzZVwicHJvdG9jb2wtcmVsYXRpdmVcIjpjYXNlXCJ1bmtub3duXCI6ZGVmYXVsdDp7cmV0dXJue2Nhbk9wZW5JbkVkaXRvcjpmYWxzZX19fX1mdW5jdGlvbiBwYXJzZUNvbXBvbmVudFN0YWNrKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IHIgb2YgZS50cmltKCkuc3BsaXQoXCJcXG5cIikpe2NvbnN0IGU9L2F0IChbXiBdKykoIFxcKCguKilcXCkpPy8uZXhlYyhyKTtpZihlPT1udWxsP3ZvaWQgMDplWzFdKXtjb25zdCByPWVbMV07Y29uc3Qgbj1lWzNdO2lmKCFuKXt0LnB1c2goe2Nhbk9wZW5JbkVkaXRvcjpmYWxzZSxjb21wb25lbnQ6cn0pO2NvbnRpbnVlfWlmKG49PW51bGw/dm9pZCAwOm4uaW5jbHVkZXMoXCJuZXh0L2Rpc3RcIikpe2JyZWFrfWNvbnN0IG89cGFyc2VTdGFja0ZyYW1lTG9jYXRpb24obik7dC5wdXNoKHtjb21wb25lbnQ6ciwuLi5vfSl9fXJldHVybiB0fWlmKCh0eXBlb2YgdC5kZWZhdWx0PT09XCJmdW5jdGlvblwifHx0eXBlb2YgdC5kZWZhdWx0PT09XCJvYmplY3RcIiYmdC5kZWZhdWx0IT09bnVsbCkmJnR5cGVvZiB0LmRlZmF1bHQuX19lc01vZHVsZT09PVwidW5kZWZpbmVkXCIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmRlZmF1bHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTtPYmplY3QuYXNzaWduKHQuZGVmYXVsdCx0KTtlLmV4cG9ydHM9dC5kZWZhdWx0fX0sNTIwNDpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKG49PT11bmRlZmluZWQpbj1yO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTtpZighb3x8KFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpKXtvPXtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbcl19fX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLG8pfTpmdW5jdGlvbihlLHQscixuKXtpZihuPT09dW5kZWZpbmVkKW49cjtlW25dPXRbcl19KTt2YXIgbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTp0cnVlLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlW1wiZGVmYXVsdFwiXT10fSk7dmFyIGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBlKWlmKHIhPT1cImRlZmF1bHRcIiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikpbih0LGUscik7byh0LGUpO3JldHVybiB0fTt2YXIgaT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3Qub25SZWZyZXNoPXQub25CZWZvcmVSZWZyZXNoPXQudW5yZWdpc3Rlcj10LnJlZ2lzdGVyPXQub25CdWlsZEVycm9yPXQub25CdWlsZE9rPXQuUmVhY3REZXZPdmVybGF5PXQuZ2V0U2VydmVyRXJyb3I9dC5nZXRFcnJvckJ5VHlwZT12b2lkIDA7Y29uc3Qgcz1hKHIoNTg1MSkpO2NvbnN0IGw9cig2MzYpO2NvbnN0IHU9cig0NjU5KTtjb25zdCBjPXIoMzg3Nik7KDAsYy5wYXRjaENvbnNvbGVFcnJvcikoKTtsZXQgZD1mYWxzZTtsZXQgZj11bmRlZmluZWQ7ZnVuY3Rpb24gb25VbmhhbmRsZWRFcnJvcihlKXtjb25zdCB0PWU/LmVycm9yO2lmKCF0fHwhKHQgaW5zdGFuY2VvZiBFcnJvcil8fHR5cGVvZiB0LnN0YWNrIT09XCJzdHJpbmdcIil7cmV0dXJufWlmKHQubWVzc2FnZS5tYXRjaCgvKGh5ZHJhdGlvbnxjb250ZW50IGRvZXMgbm90IG1hdGNofGRpZCBub3QgbWF0Y2gpL2kpKXtpZihjLmh5ZHJhdGlvbkVycm9yV2FybmluZyl7dC5tZXNzYWdlKz1cIlxcblxcblwiK2MuaHlkcmF0aW9uRXJyb3JXYXJuaW5nfXQubWVzc2FnZSs9YFxcblxcblNlZSBtb3JlIGluZm8gaGVyZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvcmVhY3QtaHlkcmF0aW9uLWVycm9yYH1jb25zdCByPXQ7Y29uc3Qgbj10eXBlb2YgYy5oeWRyYXRpb25FcnJvckNvbXBvbmVudFN0YWNrPT09XCJzdHJpbmdcIj8oMCx1LnBhcnNlQ29tcG9uZW50U3RhY2spKGMuaHlkcmF0aW9uRXJyb3JDb21wb25lbnRTdGFjaykubWFwKChlPT5lLmNvbXBvbmVudCkpOnVuZGVmaW5lZDtzLmVtaXQoe3R5cGU6cy5UWVBFX1VOSEFORExFRF9FUlJPUixyZWFzb246dCxmcmFtZXM6KDAsbC5wYXJzZVN0YWNrKShyLnN0YWNrKSxjb21wb25lbnRTdGFjazpufSl9ZnVuY3Rpb24gb25VbmhhbmRsZWRSZWplY3Rpb24oZSl7Y29uc3QgdD1lPy5yZWFzb247aWYoIXR8fCEodCBpbnN0YW5jZW9mIEVycm9yKXx8dHlwZW9mIHQuc3RhY2shPT1cInN0cmluZ1wiKXtyZXR1cm59Y29uc3Qgcj10O3MuZW1pdCh7dHlwZTpzLlRZUEVfVU5IQU5ETEVEX1JFSkVDVElPTixyZWFzb246dCxmcmFtZXM6KDAsbC5wYXJzZVN0YWNrKShyLnN0YWNrKX0pfWZ1bmN0aW9uIHJlZ2lzdGVyKCl7aWYoZCl7cmV0dXJufWQ9dHJ1ZTt0cnl7Y29uc3QgZT1FcnJvci5zdGFja1RyYWNlTGltaXQ7RXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTUwO2Y9ZX1jYXRjaHt9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLG9uVW5oYW5kbGVkRXJyb3IpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsb25VbmhhbmRsZWRSZWplY3Rpb24pfXQucmVnaXN0ZXI9cmVnaXN0ZXI7ZnVuY3Rpb24gdW5yZWdpc3Rlcigpe2lmKCFkKXtyZXR1cm59ZD1mYWxzZTtpZihmIT09dW5kZWZpbmVkKXt0cnl7RXJyb3Iuc3RhY2tUcmFjZUxpbWl0PWZ9Y2F0Y2h7fWY9dW5kZWZpbmVkfXdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIixvblVuaGFuZGxlZEVycm9yKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLG9uVW5oYW5kbGVkUmVqZWN0aW9uKX10LnVucmVnaXN0ZXI9dW5yZWdpc3RlcjtmdW5jdGlvbiBvbkJ1aWxkT2soKXtzLmVtaXQoe3R5cGU6cy5UWVBFX0JVSUxEX09LfSl9dC5vbkJ1aWxkT2s9b25CdWlsZE9rO2Z1bmN0aW9uIG9uQnVpbGRFcnJvcihlKXtzLmVtaXQoe3R5cGU6cy5UWVBFX0JVSUxEX0VSUk9SLG1lc3NhZ2U6ZX0pfXQub25CdWlsZEVycm9yPW9uQnVpbGRFcnJvcjtmdW5jdGlvbiBvblJlZnJlc2goKXtzLmVtaXQoe3R5cGU6cy5UWVBFX1JFRlJFU0h9KX10Lm9uUmVmcmVzaD1vblJlZnJlc2g7ZnVuY3Rpb24gb25CZWZvcmVSZWZyZXNoKCl7cy5lbWl0KHt0eXBlOnMuVFlQRV9CRUZPUkVfUkVGUkVTSH0pfXQub25CZWZvcmVSZWZyZXNoPW9uQmVmb3JlUmVmcmVzaDt2YXIgcD1yKDQwMyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJnZXRFcnJvckJ5VHlwZVwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2V0RXJyb3JCeVR5cGV9fSk7dmFyIG09cig1MjMzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcImdldFNlcnZlckVycm9yXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5nZXRTZXJ2ZXJFcnJvcn19KTt2YXIgdj1yKDUyMjIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiUmVhY3REZXZPdmVybGF5XCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaSh2KS5kZWZhdWx0fX0pfSw3NzkwOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuRXJyb3JCb3VuZGFyeT12b2lkIDA7Y29uc3Qgbz1yKDUwNSk7Y29uc3QgYT1uKHIoNzUyMikpO2NsYXNzIEVycm9yQm91bmRhcnkgZXh0ZW5kcyBhLmRlZmF1bHQuUHVyZUNvbXBvbmVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyk7dGhpcy5zdGF0ZT17ZXJyb3I6bnVsbH19c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlKXtyZXR1cm57ZXJyb3I6ZX19Y29tcG9uZW50RGlkQ2F0Y2goZSx0KXt0aGlzLnByb3BzLm9uRXJyb3IoZSx0Py5jb21wb25lbnRTdGFja3x8bnVsbCk7aWYoIXRoaXMucHJvcHMuZ2xvYmFsT3ZlcmxheSl7dGhpcy5zZXRTdGF0ZSh7ZXJyb3I6ZX0pfX1yZW5kZXIoKXtyZXR1cm4gdGhpcy5zdGF0ZS5lcnJvcnx8dGhpcy5wcm9wcy5nbG9iYWxPdmVybGF5JiZ0aGlzLnByb3BzLmlzTW91bnRlZD90aGlzLnByb3BzLmdsb2JhbE92ZXJsYXk/KDAsby5qc3hzKShcImh0bWxcIix7Y2hpbGRyZW46WygwLG8uanN4KShcImhlYWRcIix7fSksKDAsby5qc3gpKFwiYm9keVwiLHt9KV19KTpudWxsOnRoaXMucHJvcHMuY2hpbGRyZW59fXQuRXJyb3JCb3VuZGFyeT1FcnJvckJvdW5kYXJ5fSw1MjIyOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LHIsbil7aWYobj09PXVuZGVmaW5lZCluPXI7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpO2lmKCFvfHwoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSkpe289e2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtyXX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sbyl9OmZ1bmN0aW9uKGUsdCxyLG4pe2lmKG49PT11bmRlZmluZWQpbj1yO2Vbbl09dFtyXX0pO3ZhciBvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOnRydWUsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2VbXCJkZWZhdWx0XCJdPXR9KTt2YXIgYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKGUhPW51bGwpZm9yKHZhciByIGluIGUpaWYociE9PVwiZGVmYXVsdFwiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSluKHQsZSxyKTtvKHQsZSk7cmV0dXJuIHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7Y29uc3QgaT1yKDUwNSk7Y29uc3Qgcz1hKHIoNzUyMikpO2NvbnN0IGw9YShyKDU4NTEpKTtjb25zdCB1PXIoNjMzOCk7Y29uc3QgYz1yKDU5MzYpO2NvbnN0IGQ9cig0MzU1KTtjb25zdCBmPXIoNzc5MCk7Y29uc3QgcD1yKDg4NCk7Y29uc3QgbT1yKDQ0NjQpO2NvbnN0IHY9cig5NDk1KTtmdW5jdGlvbiBwdXNoRXJyb3JGaWx0ZXJEdXBsaWNhdGVzKGUsdCl7cmV0dXJuWy4uLmUuZmlsdGVyKChlPT5lLmV2ZW50LnJlYXNvbiE9PXQuZXZlbnQucmVhc29uKSksdF19ZnVuY3Rpb24gcmVkdWNlcihlLHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgbC5UWVBFX0JVSUxEX09LOntyZXR1cm57Li4uZSxidWlsZEVycm9yOm51bGx9fWNhc2UgbC5UWVBFX0JVSUxEX0VSUk9SOntyZXR1cm57Li4uZSxidWlsZEVycm9yOnQubWVzc2FnZX19Y2FzZSBsLlRZUEVfQkVGT1JFX1JFRlJFU0g6e3JldHVybnsuLi5lLHJlZnJlc2hTdGF0ZTp7dHlwZTpcInBlbmRpbmdcIixlcnJvcnM6W119fX1jYXNlIGwuVFlQRV9SRUZSRVNIOntyZXR1cm57Li4uZSxidWlsZEVycm9yOm51bGwsZXJyb3JzOmUucmVmcmVzaFN0YXRlLnR5cGU9PT1cInBlbmRpbmdcIj9lLnJlZnJlc2hTdGF0ZS5lcnJvcnM6W10scmVmcmVzaFN0YXRlOnt0eXBlOlwiaWRsZVwifX19Y2FzZSBsLlRZUEVfVU5IQU5ETEVEX0VSUk9SOmNhc2UgbC5UWVBFX1VOSEFORExFRF9SRUpFQ1RJT046e3N3aXRjaChlLnJlZnJlc2hTdGF0ZS50eXBlKXtjYXNlXCJpZGxlXCI6e3JldHVybnsuLi5lLG5leHRJZDplLm5leHRJZCsxLGVycm9yczpwdXNoRXJyb3JGaWx0ZXJEdXBsaWNhdGVzKGUuZXJyb3JzLHtpZDplLm5leHRJZCxldmVudDp0fSl9fWNhc2VcInBlbmRpbmdcIjp7cmV0dXJuey4uLmUsbmV4dElkOmUubmV4dElkKzEscmVmcmVzaFN0YXRlOnsuLi5lLnJlZnJlc2hTdGF0ZSxlcnJvcnM6cHVzaEVycm9yRmlsdGVyRHVwbGljYXRlcyhlLnJlZnJlc2hTdGF0ZS5lcnJvcnMse2lkOmUubmV4dElkLGV2ZW50OnR9KX19fWRlZmF1bHQ6Y29uc3Qgcj1lLnJlZnJlc2hTdGF0ZTtyZXR1cm4gZX19ZGVmYXVsdDp7Y29uc3Qgcj10O3JldHVybiBlfX19Y29uc3Qgc2hvdWxkUHJldmVudERpc3BsYXk9KGUsdCk9PntpZighdHx8IWUpe3JldHVybiBmYWxzZX1yZXR1cm4gdC5pbmNsdWRlcyhlKX07Y29uc3QgYj1mdW5jdGlvbiBSZWFjdERldk92ZXJsYXkoe2NoaWxkcmVuOmUscHJldmVudERpc3BsYXk6dCxnbG9iYWxPdmVybGF5OnJ9KXtjb25zdFtuLG9dPXMudXNlUmVkdWNlcihyZWR1Y2VyLHtuZXh0SWQ6MSxidWlsZEVycm9yOm51bGwsZXJyb3JzOltdLHJlZnJlc2hTdGF0ZTp7dHlwZTpcImlkbGVcIn19KTtzLnVzZUVmZmVjdCgoKCk9PntsLm9uKG8pO3JldHVybiBmdW5jdGlvbigpe2wub2ZmKG8pfX0pLFtvXSk7Y29uc3QgYT1zLnVzZUNhbGxiYWNrKCgoZSx0KT0+e30pLFtdKTtjb25zdCBiPW4uYnVpbGRFcnJvciE9bnVsbDtjb25zdCBnPUJvb2xlYW4obi5lcnJvcnMubGVuZ3RoKTtjb25zdCBoPWI/XCJidWlsZFwiOmc/XCJydW50aW1lXCI6bnVsbDtjb25zdCB5PWghPT1udWxsO3JldHVybigwLGkuanN4cykocy5GcmFnbWVudCx7Y2hpbGRyZW46WygwLGkuanN4KShmLkVycm9yQm91bmRhcnkse2dsb2JhbE92ZXJsYXk6cixpc01vdW50ZWQ6eSxvbkVycm9yOmEsY2hpbGRyZW46ZT8/bnVsbH0pLHk/KDAsaS5qc3hzKSh1LlNoYWRvd1BvcnRhbCx7Z2xvYmFsT3ZlcmxheTpyLGNoaWxkcmVuOlsoMCxpLmpzeCkodi5Dc3NSZXNldCx7fSksKDAsaS5qc3gpKHAuQmFzZSx7fSksKDAsaS5qc3gpKG0uQ29tcG9uZW50U3R5bGVzLHt9KSxzaG91bGRQcmV2ZW50RGlzcGxheShoLHQpP251bGw6Yj8oMCxpLmpzeCkoYy5CdWlsZEVycm9yLHttZXNzYWdlOm4uYnVpbGRFcnJvcn0pOmc/KDAsaS5qc3gpKGQuRXJyb3JzLHtlcnJvcnM6bi5lcnJvcnN9KTp1bmRlZmluZWRdfSk6dW5kZWZpbmVkXX0pfTt0W1wiZGVmYXVsdFwiXT1ifSw1ODUxOmZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0Lm9mZj10Lm9uPXQuZW1pdD10LlRZUEVfVU5IQU5ETEVEX1JFSkVDVElPTj10LlRZUEVfVU5IQU5ETEVEX0VSUk9SPXQuVFlQRV9CRUZPUkVfUkVGUkVTSD10LlRZUEVfUkVGUkVTSD10LlRZUEVfQlVJTERfRVJST1I9dC5UWVBFX0JVSUxEX09LPXZvaWQgMDt0LlRZUEVfQlVJTERfT0s9XCJidWlsZC1va1wiO3QuVFlQRV9CVUlMRF9FUlJPUj1cImJ1aWxkLWVycm9yXCI7dC5UWVBFX1JFRlJFU0g9XCJmYXN0LXJlZnJlc2hcIjt0LlRZUEVfQkVGT1JFX1JFRlJFU0g9XCJiZWZvcmUtZmFzdC1yZWZyZXNoXCI7dC5UWVBFX1VOSEFORExFRF9FUlJPUj1cInVuaGFuZGxlZC1lcnJvclwiO3QuVFlQRV9VTkhBTkRMRURfUkVKRUNUSU9OPVwidW5oYW5kbGVkLXJlamVjdGlvblwiO2xldCByPW5ldyBTZXQ7bGV0IG49W107ZnVuY3Rpb24gZHJhaW4oKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3doaWxlKEJvb2xlYW4obi5sZW5ndGgpJiZCb29sZWFuKHIuc2l6ZSkpe2NvbnN0IGU9bi5zaGlmdCgpO3IuZm9yRWFjaCgodD0+dChlKSkpfX0pLDEpfWZ1bmN0aW9uIGVtaXQoZSl7bi5wdXNoKE9iamVjdC5mcmVlemUoey4uLmV9KSk7ZHJhaW4oKX10LmVtaXQ9ZW1pdDtmdW5jdGlvbiBvbihlKXtpZihyLmhhcyhlKSl7cmV0dXJuIGZhbHNlfXIuYWRkKGUpO2RyYWluKCk7cmV0dXJuIHRydWV9dC5vbj1vbjtmdW5jdGlvbiBvZmYoZSl7aWYoci5oYXMoZSkpe3IuZGVsZXRlKGUpO3JldHVybiB0cnVlfXJldHVybiBmYWxzZX10Lm9mZj1vZmZ9LDE5ODc6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQscixuKXtpZihuPT09dW5kZWZpbmVkKW49cjt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik7aWYoIW98fChcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKSl7bz17ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiB0W3JdfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixvKX06ZnVuY3Rpb24oZSx0LHIsbil7aWYobj09PXVuZGVmaW5lZCluPXI7ZVtuXT10W3JdfSk7dmFyIG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6dHJ1ZSx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZVtcImRlZmF1bHRcIl09dH0pO3ZhciBhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYoZSE9bnVsbClmb3IodmFyIHIgaW4gZSlpZihyIT09XCJkZWZhdWx0XCImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKW4odCxlLHIpO28odCxlKTtyZXR1cm4gdH07dmFyIGk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LkNvZGVGcmFtZT12b2lkIDA7Y29uc3Qgcz1yKDUwNSk7Y29uc3QgbD1pKHIoNzk5NykpO2NvbnN0IHU9YShyKDc1MjIpKTtjb25zdCBjPWkocig3NTE4KSk7Y29uc3QgZD1yKDc1MDQpO2NvbnN0IGY9ZnVuY3Rpb24gQ29kZUZyYW1lKHtzdGFja0ZyYW1lOmUsY29kZUZyYW1lOnR9KXtjb25zdCByPXUudXNlTWVtbygoKCk9Pntjb25zdCBlPXQuc3BsaXQoL1xccj9cXG4vZyk7Y29uc3Qgcj1lLm1hcCgoZT0+L14+PyArXFxkKyArXFx8IFsgXSsvLmV4ZWMoKDAsYy5kZWZhdWx0KShlKSk9PT1udWxsP251bGw6L14+PyArXFxkKyArXFx8ICggKikvLmV4ZWMoKDAsYy5kZWZhdWx0KShlKSkpKS5maWx0ZXIoQm9vbGVhbikubWFwKChlPT5lLnBvcCgpKSkucmVkdWNlKCgoZSx0KT0+aXNOYU4oZSk/dC5sZW5ndGg6TWF0aC5taW4oZSx0Lmxlbmd0aCkpLE5hTik7aWYocj4xKXtjb25zdCB0PVwiIFwiLnJlcGVhdChyKTtyZXR1cm4gZS5tYXAoKChlLHIpPT5+KHI9ZS5pbmRleE9mKFwifFwiKSk/ZS5zdWJzdHJpbmcoMCxyKStlLnN1YnN0cmluZyhyKS5yZXBsYWNlKHQsXCJcIik6ZSkpLmpvaW4oXCJcXG5cIil9cmV0dXJuIGUuam9pbihcIlxcblwiKX0pLFt0XSk7Y29uc3Qgbj11LnVzZU1lbW8oKCgpPT5sLmRlZmF1bHQuYW5zaVRvSnNvbihyLHtqc29uOnRydWUsdXNlX2NsYXNzZXM6dHJ1ZSxyZW1vdmVfZW1wdHk6dHJ1ZX0pKSxbcl0pO2NvbnN0IG89dS51c2VDYWxsYmFjaygoKCk9Pntjb25zdCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGNvbnN0IHIgaW4gZSl7dC5hcHBlbmQociwoZVtyXT8/XCJcIikudG9TdHJpbmcoKSl9c2VsZi5mZXRjaChgJHtwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIfHxcIlwifS9fX25leHRqc19sYXVuY2gtZWRpdG9yPyR7dC50b1N0cmluZygpfWApLnRoZW4oKCgpPT57fSksKCgpPT57Y29uc29sZS5lcnJvcihcIlRoZXJlIHdhcyBhbiBpc3N1ZSBvcGVuaW5nIHRoaXMgY29kZSBpbiB5b3VyIGVkaXRvci5cIil9KSl9KSxbZV0pO3JldHVybigwLHMuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb2RlZnJhbWVcIjp0cnVlLGNoaWxkcmVuOlsoMCxzLmpzeCkoXCJkaXZcIix7Y2hpbGRyZW46KDAscy5qc3hzKShcInBcIix7cm9sZTpcImxpbmtcIixvbkNsaWNrOm8sdGFiSW5kZXg6MSx0aXRsZTpcIkNsaWNrIHRvIG9wZW4gaW4geW91ciBlZGl0b3JcIixjaGlsZHJlbjpbKDAscy5qc3hzKShcInNwYW5cIix7Y2hpbGRyZW46WygwLGQuZ2V0RnJhbWVTb3VyY2UpKGUpLFwiIEAgXCIsZS5tZXRob2ROYW1lXX0pLCgwLHMuanN4cykoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLHN0cm9rZVdpZHRoOlwiMlwiLHN0cm9rZUxpbmVjYXA6XCJyb3VuZFwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIixjaGlsZHJlbjpbKDAscy5qc3gpKFwicGF0aFwiLHtkOlwiTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDZcIn0pLCgwLHMuanN4KShcInBvbHlsaW5lXCIse3BvaW50czpcIjE1IDMgMjEgMyAyMSA5XCJ9KSwoMCxzLmpzeCkoXCJsaW5lXCIse3gxOlwiMTBcIix5MTpcIjE0XCIseDI6XCIyMVwiLHkyOlwiM1wifSldfSldfSl9KSwoMCxzLmpzeCkoXCJwcmVcIix7Y2hpbGRyZW46bi5tYXAoKChlLHQpPT4oMCxzLmpzeCkoXCJzcGFuXCIse3N0eWxlOntjb2xvcjplLmZnP2B2YXIoLS1jb2xvci0ke2UuZmd9KWA6dW5kZWZpbmVkLC4uLmUuZGVjb3JhdGlvbj09PVwiYm9sZFwiP3tmb250V2VpZ2h0OjgwMH06ZS5kZWNvcmF0aW9uPT09XCJpdGFsaWNcIj97Zm9udFN0eWxlOlwiaXRhbGljXCJ9OnVuZGVmaW5lZH0sY2hpbGRyZW46ZS5jb250ZW50fSxgZnJhbWUtJHt0fWApKSl9KV19KX07dC5Db2RlRnJhbWU9Zn0sMTQxMzpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LkNvZGVGcmFtZT12b2lkIDA7dmFyIG49cigxOTg3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIkNvZGVGcmFtZVwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uQ29kZUZyYW1lfX0pfSwzOTk6ZnVuY3Rpb24oZSx0LHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5zdHlsZXM9dm9pZCAwO2NvbnN0IG49cig4OTEwKTtjb25zdCBvPSgwLG4ubm9vcClgXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdIHtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zaXplLWdhcC1oYWxmKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLWJnKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1mZyk7XG4gIH1cbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV06OnNlbGVjdGlvbixcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gKjo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLXNlbGVjdGlvbik7XG4gIH1cbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gKiB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcbiAgfVxuXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdID4gKiB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IGNhbGModmFyKC0tc2l6ZS1nYXApICsgdmFyKC0tc2l6ZS1nYXAtaGFsZikpXG4gICAgICBjYWxjKHZhcigtLXNpemUtZ2FwLWRvdWJsZSkgKyB2YXIoLS1zaXplLWdhcC1oYWxmKSk7XG4gIH1cbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gPiBkaXYge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogYXV0bztcbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWFuc2ktYnJpZ2h0LWJsYWNrKTtcbiAgfVxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSA+IGRpdiA+IHAge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbjogMDtcbiAgfVxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSA+IGRpdiA+IHA6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcbiAgfVxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSBkaXYgPiBwID4gc3ZnIHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdIGRpdiA+IHByZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH1cbmA7dC5zdHlsZXM9b30sMTYxNjpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKG49PT11bmRlZmluZWQpbj1yO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTtpZighb3x8KFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpKXtvPXtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbcl19fX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLG8pfTpmdW5jdGlvbihlLHQscixuKXtpZihuPT09dW5kZWZpbmVkKW49cjtlW25dPXRbcl19KTt2YXIgbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTp0cnVlLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlW1wiZGVmYXVsdFwiXT10fSk7dmFyIGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBlKWlmKHIhPT1cImRlZmF1bHRcIiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikpbih0LGUscik7byh0LGUpO3JldHVybiB0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuRGlhbG9nPXZvaWQgMDtjb25zdCBpPXIoNTA1KTtjb25zdCBzPWEocig3NTIyKSk7Y29uc3QgbD1yKDcxNjkpO2NvbnN0IHU9ZnVuY3Rpb24gRGlhbG9nKHtjaGlsZHJlbjplLHR5cGU6dCxvbkNsb3NlOnIsLi4ubn0pe2NvbnN0W28sYV09cy51c2VTdGF0ZShudWxsKTtjb25zdFt1LGNdPXMudXNlU3RhdGUodHlwZW9mIGRvY3VtZW50IT09XCJ1bmRlZmluZWRcIiYmZG9jdW1lbnQuaGFzRm9jdXMoKT9cImRpYWxvZ1wiOnVuZGVmaW5lZCk7Y29uc3QgZD1zLnVzZUNhbGxiYWNrKChlPT57YShlKX0pLFtdKTsoMCxsLnVzZU9uQ2xpY2tPdXRzaWRlKShvLHIpO3MudXNlRWZmZWN0KCgoKT0+e2lmKG89PW51bGwpe3JldHVybn1jb25zdCBlPW8uZ2V0Um9vdE5vZGUoKTtpZighKGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSl7cmV0dXJufWNvbnN0IHQ9ZTtmdW5jdGlvbiBoYW5kbGVyKGUpe2NvbnN0IHI9dC5hY3RpdmVFbGVtZW50O2lmKGUua2V5PT09XCJFbnRlclwiJiZyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJnIuZ2V0QXR0cmlidXRlKFwicm9sZVwiKT09PVwibGlua1wiKXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTtyLmNsaWNrKCl9fWZ1bmN0aW9uIGhhbmRsZUZvY3VzKCl7Yyhkb2N1bWVudC5oYXNGb2N1cygpP1wiZGlhbG9nXCI6dW5kZWZpbmVkKX10LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsaGFuZGxlcik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLGhhbmRsZUZvY3VzKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIixoYW5kbGVGb2N1cyk7cmV0dXJuKCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsaGFuZGxlcik7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLGhhbmRsZUZvY3VzKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixoYW5kbGVGb2N1cyl9fSksW29dKTtyZXR1cm4oMCxpLmpzeHMpKFwiZGl2XCIse3JlZjpkLFwiZGF0YS1uZXh0anMtZGlhbG9nXCI6dHJ1ZSx0YWJJbmRleDotMSxyb2xlOnUsXCJhcmlhLWxhYmVsbGVkYnlcIjpuW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFwiYXJpYS1kZXNjcmliZWRieVwiOm5bXCJhcmlhLWRlc2NyaWJlZGJ5XCJdLFwiYXJpYS1tb2RhbFwiOlwidHJ1ZVwiLGNoaWxkcmVuOlsoMCxpLmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kaWFsb2ctYmFubmVyXCI6dHJ1ZSxjbGFzc05hbWU6YGJhbm5lci0ke3R9YH0pLGVdfSl9O3QuRGlhbG9nPXV9LDIwMTE6ZnVuY3Rpb24oZSx0LHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5EaWFsb2dCb2R5PXZvaWQgMDtjb25zdCBuPXIoNTA1KTtjb25zdCBvPWZ1bmN0aW9uIERpYWxvZ0JvZHkoe2NoaWxkcmVuOmUsY2xhc3NOYW1lOnR9KXtyZXR1cm4oMCxuLmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kaWFsb2ctYm9keVwiOnRydWUsY2xhc3NOYW1lOnQsY2hpbGRyZW46ZX0pfTt0LkRpYWxvZ0JvZHk9b30sODk5MTpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LkRpYWxvZ0NvbnRlbnQ9dm9pZCAwO2NvbnN0IG49cig1MDUpO2NvbnN0IG89ZnVuY3Rpb24gRGlhbG9nQ29udGVudCh7Y2hpbGRyZW46ZSxjbGFzc05hbWU6dH0pe3JldHVybigwLG4uanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XCI6dHJ1ZSxjbGFzc05hbWU6dCxjaGlsZHJlbjplfSl9O3QuRGlhbG9nQ29udGVudD1vfSwzNDI6ZnVuY3Rpb24oZSx0LHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5EaWFsb2dIZWFkZXI9dm9pZCAwO2NvbnN0IG49cig1MDUpO2NvbnN0IG89ZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHtjaGlsZHJlbjplLGNsYXNzTmFtZTp0fSl7cmV0dXJuKDAsbi5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGlhbG9nLWhlYWRlclwiOnRydWUsY2xhc3NOYW1lOnQsY2hpbGRyZW46ZX0pfTt0LkRpYWxvZ0hlYWRlcj1vfSw1NjUxOmZ1bmN0aW9uKGUsdCxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3Quc3R5bGVzPXQuRGlhbG9nSGVhZGVyPXQuRGlhbG9nQ29udGVudD10LkRpYWxvZ0JvZHk9dC5EaWFsb2c9dm9pZCAwO3ZhciBuPXIoMTYxNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJEaWFsb2dcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBuLkRpYWxvZ319KTt2YXIgbz1yKDIwMTEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiRGlhbG9nQm9keVwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uRGlhbG9nQm9keX19KTt2YXIgYT1yKDg5OTEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiRGlhbG9nQ29udGVudFwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuRGlhbG9nQ29udGVudH19KTt2YXIgaT1yKDM0Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJEaWFsb2dIZWFkZXJcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkRpYWxvZ0hlYWRlcn19KTt2YXIgcz1yKDUyMTMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwic3R5bGVzXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5zdHlsZXN9fSl9LDUyMTM6ZnVuY3Rpb24oZSx0LHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5zdHlsZXM9dm9pZCAwO2NvbnN0IG49cig4OTEwKTtjb25zdCBvPSgwLG4ubm9vcClgXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ddIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2l6ZS1nYXApO1xuICAgIGJveC1zaGFkb3c6IDAgdmFyKC0tc2l6ZS1nYXAtaGFsZikgdmFyKC0tc2l6ZS1nYXAtZG91YmxlKVxuICAgICAgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA1NnB4KTtcbiAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gIH1cblxuICBAbWVkaWEgKG1heC1oZWlnaHQ6IDgxMnB4KSB7XG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XSB7XG4gICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSAxNXB4KTtcbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcbiAgICBbZGF0YS1uZXh0anMtZGlhbG9nXSB7XG4gICAgICBtYXgtd2lkdGg6IDU0MHB4O1xuICAgICAgYm94LXNoYWRvdzogMCB2YXIoLS1zaXplLWdhcCkgdmFyKC0tc2l6ZS1nYXAtcXVhZCkgcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgICB9XG4gIH1cblxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICBbZGF0YS1uZXh0anMtZGlhbG9nXSB7XG4gICAgICBtYXgtd2lkdGg6IDcyMHB4O1xuICAgIH1cbiAgfVxuXG4gIEBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ddIHtcbiAgICAgIG1heC13aWR0aDogOTYwcHg7XG4gICAgfVxuICB9XG5cbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYW5uZXJdIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYW5uZXJdLmJhbm5lci13YXJuaW5nIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWFuc2kteWVsbG93KTtcbiAgfVxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhbm5lcl0uYmFubmVyLWVycm9yIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktcmVkKTtcbiAgfVxuXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctYmFubmVyXTo6YWZ0ZXIge1xuICAgIHotaW5kZXg6IDI7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICAvKiBiYW5uZXIgd2lkdGg6ICovXG4gICAgYm9yZGVyLXRvcC13aWR0aDogdmFyKC0tc2l6ZS1nYXAtaGFsZik7XG4gICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMDtcbiAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItdG9wLWNvbG9yOiBpbmhlcml0O1xuICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG5cbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XSB7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIC8qIGNhbGMocGFkZGluZyArIGJhbm5lciB3aWR0aCBvZmZzZXQpICovXG4gICAgcGFkZGluZzogY2FsYyh2YXIoLS1zaXplLWdhcC1kb3VibGUpICsgdmFyKC0tc2l6ZS1nYXAtaGFsZikpXG4gICAgICB2YXIoLS1zaXplLWdhcC1kb3VibGUpO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIH1cbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XSA+IFtkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyXSB7XG4gICAgZmxleC1zaHJpbms6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1nYXAtZG91YmxlKTtcbiAgfVxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWNvbnRlbnRdID4gW2RhdGEtbmV4dGpzLWRpYWxvZy1ib2R5XSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXg6IDEgMSBhdXRvO1xuICB9XG5gO3Quc3R5bGVzPW99LDk4MzE6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQscixuKXtpZihuPT09dW5kZWZpbmVkKW49cjt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik7aWYoIW98fChcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKSl7bz17ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiB0W3JdfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixvKX06ZnVuY3Rpb24oZSx0LHIsbil7aWYobj09PXVuZGVmaW5lZCluPXI7ZVtuXT10W3JdfSk7dmFyIG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6dHJ1ZSx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZVtcImRlZmF1bHRcIl09dH0pO3ZhciBhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYoZSE9bnVsbClmb3IodmFyIHIgaW4gZSlpZihyIT09XCJkZWZhdWx0XCImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKW4odCxlLHIpO28odCxlKTtyZXR1cm4gdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LkxlZnRSaWdodERpYWxvZ0hlYWRlcj12b2lkIDA7Y29uc3QgaT1yKDUwNSk7Y29uc3Qgcz1hKHIoNzUyMikpO2NvbnN0IGw9cig4NjUpO2NvbnN0IHU9ZnVuY3Rpb24gTGVmdFJpZ2h0RGlhbG9nSGVhZGVyKHtjaGlsZHJlbjplLGNsYXNzTmFtZTp0LHByZXZpb3VzOnIsbmV4dDpuLGNsb3NlOm99KXtjb25zdCBhPXMudXNlUmVmKG51bGwpO2NvbnN0IHU9cy51c2VSZWYobnVsbCk7Y29uc3QgYz1zLnVzZVJlZihudWxsKTtjb25zdFtkLGZdPXMudXNlU3RhdGUobnVsbCk7Y29uc3QgcD1zLnVzZUNhbGxiYWNrKChlPT57ZihlKX0pLFtdKTtzLnVzZUVmZmVjdCgoKCk9PntpZihkPT1udWxsKXtyZXR1cm59Y29uc3QgZT1kLmdldFJvb3ROb2RlKCk7Y29uc3QgdD1zZWxmLmRvY3VtZW50O2Z1bmN0aW9uIGhhbmRsZXIodCl7aWYodC5rZXk9PT1cIkFycm93TGVmdFwiKXt0LnN0b3BQcm9wYWdhdGlvbigpO2lmKGEuY3VycmVudCl7YS5jdXJyZW50LmZvY3VzKCl9ciYmcigpfWVsc2UgaWYodC5rZXk9PT1cIkFycm93UmlnaHRcIil7dC5zdG9wUHJvcGFnYXRpb24oKTtpZih1LmN1cnJlbnQpe3UuY3VycmVudC5mb2N1cygpfW4mJm4oKX1lbHNlIGlmKHQua2V5PT09XCJFc2NhcGVcIil7dC5zdG9wUHJvcGFnYXRpb24oKTtpZihlIGluc3RhbmNlb2YgU2hhZG93Um9vdCl7Y29uc3QgdD1lLmFjdGl2ZUVsZW1lbnQ7aWYodCYmdCE9PWMuY3VycmVudCYmdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KXt0LmJsdXIoKTtyZXR1cm59fWlmKG8pe28oKX19fWUuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixoYW5kbGVyKTtpZihlIT09dCl7dC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGhhbmRsZXIpfXJldHVybiBmdW5jdGlvbigpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixoYW5kbGVyKTtpZihlIT09dCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGhhbmRsZXIpfX19KSxbbyxkLG4scl0pO3MudXNlRWZmZWN0KCgoKT0+e2lmKGQ9PW51bGwpe3JldHVybn1jb25zdCBlPWQuZ2V0Um9vdE5vZGUoKTtpZihlIGluc3RhbmNlb2YgU2hhZG93Um9vdCl7Y29uc3QgdD1lLmFjdGl2ZUVsZW1lbnQ7aWYocj09bnVsbCl7aWYoYS5jdXJyZW50JiZ0PT09YS5jdXJyZW50KXthLmN1cnJlbnQuYmx1cigpfX1lbHNlIGlmKG49PW51bGwpe2lmKHUuY3VycmVudCYmdD09PXUuY3VycmVudCl7dS5jdXJyZW50LmJsdXIoKX19fX0pLFtkLG4scl0pO3JldHVybigwLGkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodFwiOnRydWUsY2xhc3NOYW1lOnQsY2hpbGRyZW46WygwLGkuanN4cykoXCJuYXZcIix7cmVmOnAsY2hpbGRyZW46WygwLGkuanN4KShcImJ1dHRvblwiLHtyZWY6YSx0eXBlOlwiYnV0dG9uXCIsZGlzYWJsZWQ6cj09bnVsbD90cnVlOnVuZGVmaW5lZCxcImFyaWEtZGlzYWJsZWRcIjpyPT1udWxsP3RydWU6dW5kZWZpbmVkLG9uQ2xpY2s6cj8/dW5kZWZpbmVkLGNoaWxkcmVuOigwLGkuanN4cykoXCJzdmdcIix7dmlld0JveDpcIjAgMCAxNCAxNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOlsoMCxpLmpzeCkoXCJ0aXRsZVwiLHtjaGlsZHJlbjpcInByZXZpb3VzXCJ9KSwoMCxpLmpzeCkoXCJwYXRoXCIse2Q6XCJNNi45OTk5NiAxLjE2NjY2TDEuMTY2NjMgNi45OTk5OUw2Ljk5OTk2IDEyLjgzMzNNMTIuODMzMyA2Ljk5OTk5SDEuOTk5OTZIMTIuODMzM1pcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixzdHJva2VXaWR0aDpcIjJcIixzdHJva2VMaW5lY2FwOlwicm91bmRcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCJ9KV19KX0pLCgwLGkuanN4KShcImJ1dHRvblwiLHtyZWY6dSx0eXBlOlwiYnV0dG9uXCIsZGlzYWJsZWQ6bj09bnVsbD90cnVlOnVuZGVmaW5lZCxcImFyaWEtZGlzYWJsZWRcIjpuPT1udWxsP3RydWU6dW5kZWZpbmVkLG9uQ2xpY2s6bj8/dW5kZWZpbmVkLGNoaWxkcmVuOigwLGkuanN4cykoXCJzdmdcIix7dmlld0JveDpcIjAgMCAxNCAxNFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOlsoMCxpLmpzeCkoXCJ0aXRsZVwiLHtjaGlsZHJlbjpcIm5leHRcIn0pLCgwLGkuanN4KShcInBhdGhcIix7ZDpcIk02Ljk5OTk2IDEuMTY2NjZMMTIuODMzMyA2Ljk5OTk5TDYuOTk5OTYgMTIuODMzM00xLjE2NjYzIDYuOTk5OTlIMTJIMS4xNjY2M1pcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixzdHJva2VXaWR0aDpcIjJcIixzdHJva2VMaW5lY2FwOlwicm91bmRcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCJ9KV19KX0pLFwiwqBcIixlXX0pLG8/KDAsaS5qc3gpKFwiYnV0dG9uXCIse1wiZGF0YS1uZXh0anMtZXJyb3JzLWRpYWxvZy1sZWZ0LXJpZ2h0LWNsb3NlLWJ1dHRvblwiOnRydWUscmVmOmMsdHlwZTpcImJ1dHRvblwiLG9uQ2xpY2s6byxcImFyaWEtbGFiZWxcIjpcIkNsb3NlXCIsY2hpbGRyZW46KDAsaS5qc3gpKFwic3BhblwiLHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsY2hpbGRyZW46KDAsaS5qc3gpKGwuQ2xvc2VJY29uLHt9KX0pfSk6bnVsbF19KX07dC5MZWZ0UmlnaHREaWFsb2dIZWFkZXI9dX0sMjczMjpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LnN0eWxlcz10LkxlZnRSaWdodERpYWxvZ0hlYWRlcj12b2lkIDA7dmFyIG49cig5ODMxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIkxlZnRSaWdodERpYWxvZ0hlYWRlclwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uTGVmdFJpZ2h0RGlhbG9nSGVhZGVyfX0pO3ZhciBvPXIoNjU0Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJzdHlsZXNcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBvLnN0eWxlc319KX0sNjU0MzpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LnN0eWxlcz12b2lkIDA7Y29uc3Qgbj1yKDg5MTApO2NvbnN0IG89KDAsbi5ub29wKWBcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1sZWZ0LXJpZ2h0XSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRdID4gbmF2ID4gYnV0dG9uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICAgd2lkdGg6IGNhbGModmFyKC0tc2l6ZS1nYXAtZG91YmxlKSArIHZhcigtLXNpemUtZ2FwKSk7XG4gICAgaGVpZ2h0OiBjYWxjKHZhcigtLXNpemUtZ2FwLWRvdWJsZSkgKyB2YXIoLS1zaXplLWdhcCkpO1xuICAgIGZvbnQtc2l6ZTogMDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDg1LCA4NSwgMC4xKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMjVzIGVhc2U7XG4gIH1cbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1sZWZ0LXJpZ2h0XSA+IG5hdiA+IGJ1dHRvbiA+IHN2ZyB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgaGVpZ2h0OiBjYWxjKHZhcigtLXNpemUtZ2FwKSArIHZhcigtLXNpemUtZ2FwLWhhbGYpKTtcbiAgfVxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRdID4gbmF2ID4gYnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgODUsIDg1LCAwLjIpO1xuICB9XG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBuYXYgPiBidXR0b246ZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCA4NSwgODUsIDAuMSk7XG4gICAgY29sb3I6IHJnYmEoMjU1LCA4NSwgODUsIDAuNCk7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgfVxuXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBuYXYgPiBidXR0b246Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2l6ZS1nYXAtaGFsZikgMCAwIHZhcigtLXNpemUtZ2FwLWhhbGYpO1xuICAgIG1hcmdpbi1yaWdodDogMXB4O1xuICB9XG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctbGVmdC1yaWdodF0gPiBuYXYgPiBidXR0b246bGFzdC1vZi10eXBlIHtcbiAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLXNpemUtZ2FwLWhhbGYpIHZhcigtLXNpemUtZ2FwLWhhbGYpIDA7XG4gIH1cblxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRdID4gYnV0dG9uOmxhc3Qtb2YtdHlwZSB7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuXG4gICAgb3BhY2l0eTogMC40O1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXMgZWFzZTtcblxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1mb250KTtcbiAgfVxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWxlZnQtcmlnaHRdID4gYnV0dG9uOmxhc3Qtb2YtdHlwZTpob3ZlciB7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG5gO3Quc3R5bGVzPW99LDgwMTc6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQscixuKXtpZihuPT09dW5kZWZpbmVkKW49cjt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik7aWYoIW98fChcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKSl7bz17ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiB0W3JdfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixvKX06ZnVuY3Rpb24oZSx0LHIsbil7aWYobj09PXVuZGVmaW5lZCluPXI7ZVtuXT10W3JdfSk7dmFyIG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6dHJ1ZSx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZVtcImRlZmF1bHRcIl09dH0pO3ZhciBhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYoZSE9bnVsbClmb3IodmFyIHIgaW4gZSlpZihyIT09XCJkZWZhdWx0XCImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKW4odCxlLHIpO28odCxlKTtyZXR1cm4gdH07dmFyIGk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0Lk92ZXJsYXk9dm9pZCAwO2NvbnN0IHM9cig1MDUpO2NvbnN0IGw9aShyKDg5NzUpKTtjb25zdCB1PWEocig3NTIyKSk7Y29uc3QgYz1yKDc4MDApO2NvbnN0IGQ9ZnVuY3Rpb24gT3ZlcmxheSh7Y2xhc3NOYW1lOmUsY2hpbGRyZW46dCxmaXhlZDpyfSl7dS51c2VFZmZlY3QoKCgpPT57KDAsYy5sb2NrKSgpO3JldHVybigpPT57KDAsYy51bmxvY2spKCl9fSksW10pO2NvbnN0W24sb109dS51c2VTdGF0ZShudWxsKTtjb25zdCBhPXUudXNlQ2FsbGJhY2soKGU9PntvKGUpfSksW10pO3UudXNlRWZmZWN0KCgoKT0+e2lmKG49PW51bGwpe3JldHVybn1jb25zdCBlPSgwLGwuZGVmYXVsdCkoe2NvbnRleHQ6bn0pO3JldHVybigpPT57ZS5kaXNlbmdhZ2UoKX19KSxbbl0pO3JldHVybigwLHMuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheVwiOnRydWUsY2xhc3NOYW1lOmUscmVmOmEsY2hpbGRyZW46WygwLHMuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcFwiOnRydWUsXCJkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3AtZml4ZWRcIjpyP3RydWU6dW5kZWZpbmVkfSksdF19KX07dC5PdmVybGF5PWR9LDc4MDA6ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QudW5sb2NrPXQubG9jaz12b2lkIDA7bGV0IHI7bGV0IG47bGV0IG89MDtmdW5jdGlvbiBsb2NrKCl7c2V0VGltZW91dCgoKCk9PntpZihvKys+MCl7cmV0dXJufWNvbnN0IGU9d2luZG93LmlubmVyV2lkdGgtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2lmKGU+MCl7cj1kb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodDtkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD1gJHtlfXB4YH1uPWRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c7ZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwifSkpfXQubG9jaz1sb2NrO2Z1bmN0aW9uIHVubG9jaygpe3NldFRpbWVvdXQoKCgpPT57aWYobz09PTB8fC0tbyE9PTApe3JldHVybn1pZihyIT09dW5kZWZpbmVkKXtkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD1yO3I9dW5kZWZpbmVkfWlmKG4hPT11bmRlZmluZWQpe2RvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9bjtuPXVuZGVmaW5lZH19KSl9dC51bmxvY2s9dW5sb2NrfSw4Mjc4OmZ1bmN0aW9uKGUsdCxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuT3ZlcmxheT12b2lkIDA7dmFyIG49cig4MDE3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIk92ZXJsYXlcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBuLk92ZXJsYXl9fSl9LDg5NzU6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7Y29uc3Qgbz1uKHIoNzcwOSkpO2NvbnN0IGE9bihyKDcyOTIpKTtmdW5jdGlvbiBub2RlQXJyYXkoZSl7aWYoIWUpe3JldHVybltdfWlmKEFycmF5LmlzQXJyYXkoZSkpe3JldHVybiBlfWlmKGUubm9kZVR5cGUhPT11bmRlZmluZWQpe3JldHVybltlXX1pZih0eXBlb2YgZT09PVwic3RyaW5nXCIpe2U9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKX1pZihlLmxlbmd0aCE9PXVuZGVmaW5lZCl7cmV0dXJuW10uc2xpY2UuY2FsbChlLDApfXRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bmV4cGVjdGVkIGlucHV0IFwiK1N0cmluZyhlKSl9ZnVuY3Rpb24gY29udGV4dFRvRWxlbWVudChlKXt2YXIgdD1lLmNvbnRleHQscj1lLmxhYmVsLG49cj09PXVuZGVmaW5lZD9cImNvbnRleHQtdG8tZWxlbWVudFwiOnIsbz1lLnJlc29sdmVEb2N1bWVudCxhPWUuZGVmYXVsdFRvRG9jdW1lbnQ7dmFyIGk9bm9kZUFycmF5KHQpWzBdO2lmKG8mJmkmJmkubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX05PREUpe2k9aS5kb2N1bWVudEVsZW1lbnR9aWYoIWkmJmEpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9aWYoIWkpe3Rocm93IG5ldyBUeXBlRXJyb3IobitcIiByZXF1aXJlcyB2YWxpZCBvcHRpb25zLmNvbnRleHRcIil9aWYoaS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiZpLm5vZGVUeXBlIT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXt0aHJvdyBuZXcgVHlwZUVycm9yKG4rXCIgcmVxdWlyZXMgb3B0aW9ucy5jb250ZXh0IHRvIGJlIGFuIEVsZW1lbnRcIil9cmV0dXJuIGl9ZnVuY3Rpb24gZ2V0U2hhZG93SG9zdCgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTp7fSx0PWUuY29udGV4dDt2YXIgcj1jb250ZXh0VG9FbGVtZW50KHtsYWJlbDpcImdldC9zaGFkb3ctaG9zdFwiLGNvbnRleHQ6dH0pO3ZhciBuPW51bGw7d2hpbGUocil7bj1yO3I9ci5wYXJlbnROb2RlfWlmKG4ubm9kZVR5cGU9PT1uLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJm4uaG9zdCl7cmV0dXJuIG4uaG9zdH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBnZXREb2N1bWVudChlKXtpZighZSl7cmV0dXJuIGRvY3VtZW50fWlmKGUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX05PREUpe3JldHVybiBlfXJldHVybiBlLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50fWZ1bmN0aW9uIGlzQWN0aXZlRWxlbWVudChlKXt2YXIgdD1jb250ZXh0VG9FbGVtZW50KHtsYWJlbDpcImlzL2FjdGl2ZS1lbGVtZW50XCIscmVzb2x2ZURvY3VtZW50OnRydWUsY29udGV4dDplfSk7dmFyIHI9Z2V0RG9jdW1lbnQodCk7aWYoci5hY3RpdmVFbGVtZW50PT09dCl7cmV0dXJuIHRydWV9dmFyIG49Z2V0U2hhZG93SG9zdCh7Y29udGV4dDp0fSk7aWYobiYmbi5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ9PT10KXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gZ2V0UGFyZW50cygpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTp7fSx0PWUuY29udGV4dDt2YXIgcj1bXTt2YXIgbj1jb250ZXh0VG9FbGVtZW50KHtsYWJlbDpcImdldC9wYXJlbnRzXCIsY29udGV4dDp0fSk7d2hpbGUobil7ci5wdXNoKG4pO249bi5wYXJlbnROb2RlO2lmKG4mJm4ubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSl7bj1udWxsfX1yZXR1cm4gcn12YXIgaT1bXCJtYXRjaGVzXCIsXCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3JcIixcIm1vek1hdGNoZXNTZWxlY3RvclwiLFwibXNNYXRjaGVzU2VsZWN0b3JcIl07dmFyIHM9bnVsbDtmdW5jdGlvbiBmaW5kTWV0aG9kTmFtZShlKXtpLnNvbWUoKGZ1bmN0aW9uKHQpe2lmKCFlW3RdKXtyZXR1cm4gZmFsc2V9cz10O3JldHVybiB0cnVlfSkpfWZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVzKGUsdCl7aWYoIXMpe2ZpbmRNZXRob2ROYW1lKGUpfXJldHVybiBlW3NdKHQpfXZhciBsPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoby5kZWZhdWx0KSk7dmFyIHU9bC5vcy5mYW1pbHl8fFwiXCI7dmFyIGM9dT09PVwiQW5kcm9pZFwiO3ZhciBkPXUuc2xpY2UoMCw3KT09PVwiV2luZG93c1wiO3ZhciBmPXU9PT1cIk9TIFhcIjt2YXIgcD11PT09XCJpT1NcIjt2YXIgbT1sLmxheW91dD09PVwiQmxpbmtcIjt2YXIgdj1sLmxheW91dD09PVwiR2Vja29cIjt2YXIgYj1sLmxheW91dD09PVwiVHJpZGVudFwiO3ZhciBnPWwubGF5b3V0PT09XCJFZGdlSFRNTFwiO3ZhciBoPWwubGF5b3V0PT09XCJXZWJLaXRcIjt2YXIgeT1wYXJzZUZsb2F0KGwudmVyc2lvbik7dmFyIHg9TWF0aC5mbG9vcih5KTtsLm1ham9yVmVyc2lvbj14O2wuaXM9e0FORFJPSUQ6YyxXSU5ET1dTOmQsT1NYOmYsSU9TOnAsQkxJTks6bSxHRUNLTzp2LFRSSURFTlQ6YixFREdFOmcsV0VCS0lUOmgsSUU5OmImJng9PT05LElFMTA6YiYmeD09PTEwLElFMTE6YiYmeD09PTExfTtmdW5jdGlvbiBiZWZvcmUoKXt2YXIgZT17YWN0aXZlRWxlbWVudDpkb2N1bWVudC5hY3RpdmVFbGVtZW50LHdpbmRvd1Njcm9sbFRvcDp3aW5kb3cuc2Nyb2xsVG9wLHdpbmRvd1Njcm9sbExlZnQ6d2luZG93LnNjcm9sbExlZnQsYm9keVNjcm9sbFRvcDpkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCxib2R5U2Nyb2xsTGVmdDpkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR9O3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7dC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLFwicG9zaXRpb246YWJzb2x1dGU7IHBvc2l0aW9uOmZpeGVkOyB0b3A6MDsgbGVmdDotMnB4OyB3aWR0aDoxcHg7IGhlaWdodDoxcHg7IG92ZXJmbG93OmhpZGRlbjtcIik7dC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxpdmVcIixcIm9mZlwiKTt0LnNldEF0dHJpYnV0ZShcImFyaWEtYnVzeVwiLFwidHJ1ZVwiKTt0LnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7dmFyIHI9dC5jb250ZW50V2luZG93O3ZhciBuPXIuZG9jdW1lbnQ7bi5vcGVuKCk7bi5jbG9zZSgpO3ZhciBvPW4uY3JlYXRlRWxlbWVudChcImRpdlwiKTtuLmJvZHkuYXBwZW5kQ2hpbGQobyk7ZS5pZnJhbWU9dDtlLndyYXBwZXI9bztlLndpbmRvdz1yO2UuZG9jdW1lbnQ9bjtyZXR1cm4gZX1mdW5jdGlvbiB0ZXN0KGUsdCl7ZS53cmFwcGVyLmlubmVySFRNTD1cIlwiO3ZhciByPXR5cGVvZiB0LmVsZW1lbnQ9PT1cInN0cmluZ1wiP2UuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0LmVsZW1lbnQpOnQuZWxlbWVudChlLndyYXBwZXIsZS5kb2N1bWVudCk7dmFyIG49dC5tdXRhdGUmJnQubXV0YXRlKHIsZS53cmFwcGVyLGUuZG9jdW1lbnQpO2lmKCFuJiZuIT09ZmFsc2Upe249cn0hci5wYXJlbnROb2RlJiZlLndyYXBwZXIuYXBwZW5kQ2hpbGQocik7biYmbi5mb2N1cyYmbi5mb2N1cygpO3JldHVybiB0LnZhbGlkYXRlP3QudmFsaWRhdGUocixuLGUuZG9jdW1lbnQpOmUuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PW59ZnVuY3Rpb24gYWZ0ZXIoZSl7aWYoZS5hY3RpdmVFbGVtZW50PT09ZG9jdW1lbnQuYm9keSl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtpZihsLmlzLklFMTApe2RvY3VtZW50LmJvZHkuZm9jdXMoKX19ZWxzZXtlLmFjdGl2ZUVsZW1lbnQmJmUuYWN0aXZlRWxlbWVudC5mb2N1cyYmZS5hY3RpdmVFbGVtZW50LmZvY3VzKCl9ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlLmlmcmFtZSk7d2luZG93LnNjcm9sbFRvcD1lLndpbmRvd1Njcm9sbFRvcDt3aW5kb3cuc2Nyb2xsTGVmdD1lLndpbmRvd1Njcm9sbExlZnQ7ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A9ZS5ib2R5U2Nyb2xsVG9wO2RvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD1lLmJvZHlTY3JvbGxMZWZ0fWZ1bmN0aW9uIGRldGVjdEZvY3VzKGUpe3ZhciB0PWJlZm9yZSgpO3ZhciByPXt9O09iamVjdC5rZXlzKGUpLm1hcCgoZnVuY3Rpb24obil7cltuXT10ZXN0KHQsZVtuXSl9KSk7YWZ0ZXIodCk7cmV0dXJuIHJ9dmFyIF89XCIxLjQuMVwiO2Z1bmN0aW9uIHJlYWRMb2NhbFN0b3JhZ2UoZSl7dmFyIHQ9dm9pZCAwO3RyeXt0PXdpbmRvdy5sb2NhbFN0b3JhZ2UmJndpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShlKTt0PXQ/SlNPTi5wYXJzZSh0KTp7fX1jYXRjaChlKXt0PXt9fXJldHVybiB0fWZ1bmN0aW9uIHdyaXRlTG9jYWxTdG9yYWdlKGUsdCl7aWYoIWRvY3VtZW50Lmhhc0ZvY3VzKCkpe3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlJiZ3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZSl9Y2F0Y2goZSl7fXJldHVybn10cnl7d2luZG93LmxvY2FsU3RvcmFnZSYmd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGUsSlNPTi5zdHJpbmdpZnkodCkpfWNhdGNoKGUpe319dmFyIHc9dHlwZW9mIHdpbmRvdyE9PVwidW5kZWZpbmVkXCImJndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50fHxcIlwiO3ZhciBFPVwiYWxseS1zdXBwb3J0cy1jYWNoZVwiO3ZhciBqPXJlYWRMb2NhbFN0b3JhZ2UoRSk7aWYoai51c2VyQWdlbnQhPT13fHxqLnZlcnNpb24hPT1fKXtqPXt9fWoudXNlckFnZW50PXc7ai52ZXJzaW9uPV87dmFyIE89e2dldDpmdW5jdGlvbiBnZXQoKXtyZXR1cm4gan0sc2V0OmZ1bmN0aW9uIHNldChlKXtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXtqW3RdPWVbdF19KSk7ai50aW1lPShuZXcgRGF0ZSkudG9JU09TdHJpbmcoKTt3cml0ZUxvY2FsU3RvcmFnZShFLGopfX07ZnVuY3Rpb24gY3NzU2hhZG93UGllcmNpbmdEZWVwQ29tYmluYXRvcigpe3ZhciBlPXZvaWQgMDt0cnl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImh0bWwgPj4+IDpmaXJzdC1jaGlsZFwiKTtlPVwiPj4+XCJ9Y2F0Y2godCl7dHJ5e2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJodG1sIC9kZWVwLyA6Zmlyc3QtY2hpbGRcIik7ZT1cIi9kZWVwL1wifWNhdGNoKHQpe2U9XCJcIn19cmV0dXJuIGV9dmFyIGs9XCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3lINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQlJBQTdcIjt2YXIgUz17ZWxlbWVudDpcImRpdlwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5pbm5lckhUTUw9JzxtYXAgbmFtZT1cImltYWdlLW1hcC10YWJpbmRleC10ZXN0XCI+JysnPGFyZWEgc2hhcGU9XCJyZWN0XCIgY29vcmRzPVwiNjMsMTksMTQ0LDQ1XCI+PC9tYXA+JysnPGltZyB1c2VtYXA9XCIjaW1hZ2UtbWFwLXRhYmluZGV4LXRlc3RcIiB0YWJpbmRleD1cIi0xXCIgYWx0PVwiXCIgc3JjPVwiJytrKydcIj4nO3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IoXCJhcmVhXCIpfX07dmFyIEM9e2VsZW1lbnQ6XCJkaXZcIixtdXRhdGU6ZnVuY3Rpb24gbXV0YXRlKGUpe2UuaW5uZXJIVE1MPSc8bWFwIG5hbWU9XCJpbWFnZS1tYXAtdGFiaW5kZXgtdGVzdFwiPicrJzxhcmVhIGhyZWY9XCIjdm9pZFwiIHRhYmluZGV4PVwiLTFcIiBzaGFwZT1cInJlY3RcIiBjb29yZHM9XCI2MywxOSwxNDQsNDVcIj48L21hcD4nKyc8aW1nIHVzZW1hcD1cIiNpbWFnZS1tYXAtdGFiaW5kZXgtdGVzdFwiIGFsdD1cIlwiIHNyYz1cIicraysnXCI+JztyZXR1cm4gZmFsc2V9LHZhbGlkYXRlOmZ1bmN0aW9uIHZhbGlkYXRlKGUsdCxyKXtpZihsLmlzLkdFQ0tPKXtyZXR1cm4gdHJ1ZX12YXIgbj1lLnF1ZXJ5U2VsZWN0b3IoXCJhcmVhXCIpO24uZm9jdXMoKTtyZXR1cm4gci5hY3RpdmVFbGVtZW50PT09bn19O3ZhciBUPXtlbGVtZW50OlwiZGl2XCIsbXV0YXRlOmZ1bmN0aW9uIG11dGF0ZShlKXtlLmlubmVySFRNTD0nPG1hcCBuYW1lPVwiaW1hZ2UtbWFwLWFyZWEtaHJlZi10ZXN0XCI+JysnPGFyZWEgc2hhcGU9XCJyZWN0XCIgY29vcmRzPVwiNjMsMTksMTQ0LDQ1XCI+PC9tYXA+JysnPGltZyB1c2VtYXA9XCIjaW1hZ2UtbWFwLWFyZWEtaHJlZi10ZXN0XCIgYWx0PVwiXCIgc3JjPVwiJytrKydcIj4nO3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IoXCJhcmVhXCIpfSx2YWxpZGF0ZTpmdW5jdGlvbiB2YWxpZGF0ZShlLHQscil7aWYobC5pcy5HRUNLTyl7cmV0dXJuIHRydWV9cmV0dXJuIHIuYWN0aXZlRWxlbWVudD09PXR9fTt2YXIgRD17bmFtZTpcImNhbi1mb2N1cy1hdWRpby13aXRob3V0LWNvbnRyb2xzXCIsZWxlbWVudDpcImF1ZGlvXCIsbXV0YXRlOmZ1bmN0aW9uIG11dGF0ZShlKXt0cnl7ZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIixrKX1jYXRjaChlKXt9fX07dmFyIFA9XCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL1paWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpcIjt2YXIgTj17ZWxlbWVudDpcImRpdlwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5pbm5lckhUTUw9JzxtYXAgbmFtZT1cImJyb2tlbi1pbWFnZS1tYXAtdGVzdFwiPjxhcmVhIGhyZWY9XCIjdm9pZFwiIHNoYXBlPVwicmVjdFwiIGNvb3Jkcz1cIjYzLDE5LDE0NCw0NVwiPjwvbWFwPicrJzxpbWcgdXNlbWFwPVwiI2Jyb2tlbi1pbWFnZS1tYXAtdGVzdFwiIGFsdD1cIlwiIHNyYz1cIicrUCsnXCI+JztyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKFwiYXJlYVwiKX19O3ZhciBSPXtlbGVtZW50OlwiZGl2XCIsbXV0YXRlOmZ1bmN0aW9uIG11dGF0ZShlKXtlLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKTtlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsXCJkaXNwbGF5OiAtd2Via2l0LWZsZXg7IGRpc3BsYXk6IC1tcy1mbGV4Ym94OyBkaXNwbGF5OiBmbGV4O1wiKTtlLmlubmVySFRNTD0nPHNwYW4gc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIj5oZWxsbzwvc3Bhbj4nO3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IoXCJzcGFuXCIpfX07dmFyIEY9e2VsZW1lbnQ6XCJmaWVsZHNldFwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLDApO2Uuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIixcImRpc2FibGVkXCIpfX07dmFyIEk9e2VsZW1lbnQ6XCJmaWVsZHNldFwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5pbm5lckhUTUw9XCI8bGVnZW5kPmxlZ2VuZDwvbGVnZW5kPjxwPmNvbnRlbnQ8L3A+XCJ9fTt2YXIgQT17ZWxlbWVudDpcInNwYW5cIixtdXRhdGU6ZnVuY3Rpb24gbXV0YXRlKGUpe2Uuc2V0QXR0cmlidXRlKFwic3R5bGVcIixcImRpc3BsYXk6IC13ZWJraXQtZmxleDsgZGlzcGxheTogLW1zLWZsZXhib3g7IGRpc3BsYXk6IGZsZXg7XCIpO2UuaW5uZXJIVE1MPSc8c3BhbiBzdHlsZT1cImRpc3BsYXk6IGJsb2NrO1wiPmhlbGxvPC9zcGFuPid9fTt2YXIgTT17ZWxlbWVudDpcImZvcm1cIixtdXRhdGU6ZnVuY3Rpb24gbXV0YXRlKGUpe2Uuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwwKTtlLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsXCJkaXNhYmxlZFwiKX19O3ZhciBMPXtlbGVtZW50OlwiYVwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5ocmVmPVwiI3ZvaWRcIjtlLmlubmVySFRNTD0nPGltZyBpc21hcCBzcmM9XCInK2srJ1wiIGFsdD1cIlwiPic7cmV0dXJuIGUucXVlcnlTZWxlY3RvcihcImltZ1wiKX19O3ZhciBCPXtlbGVtZW50OlwiZGl2XCIsbXV0YXRlOmZ1bmN0aW9uIG11dGF0ZShlKXtlLmlubmVySFRNTD0nPG1hcCBuYW1lPVwiaW1hZ2UtbWFwLXRhYmluZGV4LXRlc3RcIj48YXJlYSBocmVmPVwiI3ZvaWRcIiBzaGFwZT1cInJlY3RcIiBjb29yZHM9XCI2MywxOSwxNDQsNDVcIj48L21hcD4nKyc8aW1nIHVzZW1hcD1cIiNpbWFnZS1tYXAtdGFiaW5kZXgtdGVzdFwiIHRhYmluZGV4PVwiLTFcIiBhbHQ9XCJcIiAnKydzcmM9XCInK2srJ1wiPic7cmV0dXJuIGUucXVlcnlTZWxlY3RvcihcImltZ1wiKX19O3ZhciBIPXtlbGVtZW50OmZ1bmN0aW9uIGVsZW1lbnQoZSx0KXt2YXIgcj10LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7ZS5hcHBlbmRDaGlsZChyKTt2YXIgbj1yLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7bi5vcGVuKCk7bi5jbG9zZSgpO3JldHVybiByfSxtdXRhdGU6ZnVuY3Rpb24gbXV0YXRlKGUpe2Uuc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwiO3ZhciB0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudDt2YXIgcj10LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTt0LmJvZHkuYXBwZW5kQ2hpbGQocik7cmV0dXJuIHJ9LHZhbGlkYXRlOmZ1bmN0aW9uIHZhbGlkYXRlKGUpe3ZhciB0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudDt2YXIgcj10LnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKTtyZXR1cm4gdC5hY3RpdmVFbGVtZW50PT09cn19O3ZhciB6PSFsLmlzLldFQktJVDtmdW5jdGlvbiBmb2N1c0luWmVyb0RpbWVuc2lvbk9iamVjdCgpe3JldHVybiB6fXZhciBXPXtlbGVtZW50OlwiZGl2XCIsbXV0YXRlOmZ1bmN0aW9uIG11dGF0ZShlKXtlLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCJpbnZhbGlkLXZhbHVlXCIpfX07dmFyIFY9e2VsZW1lbnQ6XCJsYWJlbFwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIil9LHZhbGlkYXRlOmZ1bmN0aW9uIHZhbGlkYXRlKGUsdCxyKXt2YXIgbj1lLm9mZnNldEhlaWdodDtlLmZvY3VzKCk7cmV0dXJuIHIuYWN0aXZlRWxlbWVudD09PWV9fTt2YXIgJD1cImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIaHRiXCIrXCJHNXpPbmhzYVc1clBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1TDNoc2FXNXJJaUJwWkQwaWMzWm5JajQ4ZEdWNGRDQjRQU0l4TUNJZ2VUMGlNakFpSUdsa1BTSlwiK1wiemRtY3RiR2x1YXkxMFpYaDBJajUwWlhoMFBDOTBaWGgwUGp3dmMzWm5QZz09XCI7dmFyIFU9e2VsZW1lbnQ6XCJvYmplY3RcIixtdXRhdGU6ZnVuY3Rpb24gbXV0YXRlKGUpe2Uuc2V0QXR0cmlidXRlKFwidHlwZVwiLFwiaW1hZ2Uvc3ZnK3htbFwiKTtlLnNldEF0dHJpYnV0ZShcImRhdGFcIiwkKTtlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsXCIyMDBcIik7ZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIixcIjUwXCIpO2Uuc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwifX07dmFyIEs9e25hbWU6XCJjYW4tZm9jdXMtb2JqZWN0LXN2Z1wiLGVsZW1lbnQ6XCJvYmplY3RcIixtdXRhdGU6ZnVuY3Rpb24gbXV0YXRlKGUpe2Uuc2V0QXR0cmlidXRlKFwidHlwZVwiLFwiaW1hZ2Uvc3ZnK3htbFwiKTtlLnNldEF0dHJpYnV0ZShcImRhdGFcIiwkKTtlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsXCIyMDBcIik7ZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIixcIjUwXCIpfSx2YWxpZGF0ZTpmdW5jdGlvbiB2YWxpZGF0ZShlLHQscil7aWYobC5pcy5HRUNLTyl7cmV0dXJuIHRydWV9cmV0dXJuIHIuYWN0aXZlRWxlbWVudD09PWV9fTt2YXIgRz0hbC5pcy5JRTk7ZnVuY3Rpb24gZm9jdXNPYmplY3RTd2YoKXtyZXR1cm4gR312YXIgWj17ZWxlbWVudDpcImRpdlwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5pbm5lckhUTUw9JzxtYXAgbmFtZT1cImZvY3VzLXJlZGlyZWN0LWltZy11c2VtYXBcIj48YXJlYSBocmVmPVwiI3ZvaWRcIiBzaGFwZT1cInJlY3RcIiBjb29yZHM9XCI2MywxOSwxNDQsNDVcIj48L21hcD4nKyc8aW1nIHVzZW1hcD1cIiNmb2N1cy1yZWRpcmVjdC1pbWctdXNlbWFwXCIgYWx0PVwiXCIgJysnc3JjPVwiJytrKydcIj4nO3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IoXCJpbWdcIil9LHZhbGlkYXRlOmZ1bmN0aW9uIHZhbGlkYXRlKGUsdCxyKXt2YXIgbj1lLnF1ZXJ5U2VsZWN0b3IoXCJhcmVhXCIpO3JldHVybiByLmFjdGl2ZUVsZW1lbnQ9PT1ufX07dmFyIFk9e2VsZW1lbnQ6XCJmaWVsZHNldFwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5pbm5lckhUTUw9JzxsZWdlbmQ+bGVnZW5kPC9sZWdlbmQ+PGlucHV0IHRhYmluZGV4PVwiLTFcIj48aW5wdXQgdGFiaW5kZXg9XCIwXCI+JztyZXR1cm4gZmFsc2V9LHZhbGlkYXRlOmZ1bmN0aW9uIHZhbGlkYXRlKGUsdCxyKXt2YXIgbj1lLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3RhYmluZGV4PVwiLTFcIl0nKTt2YXIgbz1lLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3RhYmluZGV4PVwiMFwiXScpO2UuZm9jdXMoKTtlLnF1ZXJ5U2VsZWN0b3IoXCJsZWdlbmRcIikuZm9jdXMoKTtyZXR1cm4gci5hY3RpdmVFbGVtZW50PT09biYmXCJmb2N1c2FibGVcInx8ci5hY3RpdmVFbGVtZW50PT09byYmXCJ0YWJiYWJsZVwifHxcIlwifX07dmFyIEo9e2VsZW1lbnQ6XCJkaXZcIixtdXRhdGU6ZnVuY3Rpb24gbXV0YXRlKGUpe2Uuc2V0QXR0cmlidXRlKFwic3R5bGVcIixcIndpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4OyBvdmVyZmxvdzogYXV0bztcIik7ZS5pbm5lckhUTUw9JzxkaXYgc3R5bGU9XCJ3aWR0aDogNTAwcHg7IGhlaWdodDogNDBweDtcIj5zY3JvbGxhYmxlIGNvbnRlbnQ8L2Rpdj4nO3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IoXCJkaXZcIil9fTt2YXIgWD17ZWxlbWVudDpcImRpdlwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLFwid2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDUwcHg7XCIpO2UuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPVwid2lkdGg6IDUwMHB4OyBoZWlnaHQ6IDQwcHg7XCI+c2Nyb2xsYWJsZSBjb250ZW50PC9kaXY+J319O3ZhciBRPXtlbGVtZW50OlwiZGl2XCIsbXV0YXRlOmZ1bmN0aW9uIG11dGF0ZShlKXtlLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsXCJ3aWR0aDogMTAwcHg7IGhlaWdodDogNTBweDsgb3ZlcmZsb3c6IGF1dG87XCIpO2UuaW5uZXJIVE1MPSc8ZGl2IHN0eWxlPVwid2lkdGg6IDUwMHB4OyBoZWlnaHQ6IDQwcHg7XCI+c2Nyb2xsYWJsZSBjb250ZW50PC9kaXY+J319O3ZhciBlZT17ZWxlbWVudDpcImRldGFpbHNcIixtdXRhdGU6ZnVuY3Rpb24gbXV0YXRlKGUpe2UuaW5uZXJIVE1MPVwiPHN1bW1hcnk+Zm9vPC9zdW1tYXJ5PjxwPmNvbnRlbnQ8L3A+XCI7cmV0dXJuIGUuZmlyc3RFbGVtZW50Q2hpbGR9fTtmdW5jdGlvbiBtYWtlRm9jdXNhYmxlRm9yZWlnbk9iamVjdCgpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJmb3JlaWduT2JqZWN0XCIpO2Uud2lkdGguYmFzZVZhbC52YWx1ZT0zMDtlLmhlaWdodC5iYXNlVmFsLnZhbHVlPTMwO2UuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpKTtlLmxhc3RDaGlsZC50eXBlPVwidGV4dFwiO3JldHVybiBlfWZ1bmN0aW9uIGZvY3VzU3ZnRm9yZWlnbk9iamVjdEhhY2soZSl7dmFyIHQ9ZS5vd25lclNWR0VsZW1lbnR8fGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PVwic3ZnXCI7aWYoIXQpe3JldHVybiBmYWxzZX12YXIgcj1tYWtlRm9jdXNhYmxlRm9yZWlnbk9iamVjdCgpO2UuYXBwZW5kQ2hpbGQocik7dmFyIG49ci5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7bi5mb2N1cygpO24uZGlzYWJsZWQ9dHJ1ZTtlLnJlbW92ZUNoaWxkKHIpO3JldHVybiB0cnVlfWZ1bmN0aW9uIGdlbmVyYXRlKGUpe3JldHVybic8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIj4nK2UrXCI8L3N2Zz5cIn1mdW5jdGlvbiBmb2N1cyhlKXtpZihlLmZvY3VzKXtyZXR1cm59dHJ5e0hUTUxFbGVtZW50LnByb3RvdHlwZS5mb2N1cy5jYWxsKGUpfWNhdGNoKHQpe2ZvY3VzU3ZnRm9yZWlnbk9iamVjdEhhY2soZSl9fWZ1bmN0aW9uIHZhbGlkYXRlKGUsdCxyKXtmb2N1cyh0KTtyZXR1cm4gci5hY3RpdmVFbGVtZW50PT09dH12YXIgdGU9e2VsZW1lbnQ6XCJkaXZcIixtdXRhdGU6ZnVuY3Rpb24gbXV0YXRlKGUpe2UuaW5uZXJIVE1MPWdlbmVyYXRlKCc8dGV4dCBmb2N1c2FibGU9XCJ0cnVlXCI+YTwvdGV4dD4nKTtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKFwidGV4dFwiKX0sdmFsaWRhdGU6dmFsaWRhdGV9O3ZhciByZT17ZWxlbWVudDpcImRpdlwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5pbm5lckhUTUw9Z2VuZXJhdGUoJzx0ZXh0IHRhYmluZGV4PVwiMFwiPmE8L3RleHQ+Jyk7cmV0dXJuIGUucXVlcnlTZWxlY3RvcihcInRleHRcIil9LHZhbGlkYXRlOnZhbGlkYXRlfTt2YXIgbmU9e2VsZW1lbnQ6XCJkaXZcIixtdXRhdGU6ZnVuY3Rpb24gbXV0YXRlKGUpe2UuaW5uZXJIVE1MPWdlbmVyYXRlKCc8dGV4dCB0YWJpbmRleD1cIi0xXCI+YTwvdGV4dD4nKTtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKFwidGV4dFwiKX0sdmFsaWRhdGU6dmFsaWRhdGV9O3ZhciBvZT17ZWxlbWVudDpcImRpdlwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5pbm5lckhUTUw9Z2VuZXJhdGUoWyc8ZyBpZD1cImFsbHktdGVzdC10YXJnZXRcIj48YSB4bGluazpocmVmPVwiI3ZvaWRcIj48dGV4dD5saW5rPC90ZXh0PjwvYT48L2c+JywnPHVzZSB4bGluazpocmVmPVwiI2FsbHktdGVzdC10YXJnZXRcIiB4PVwiMFwiIHk9XCIwXCIgdGFiaW5kZXg9XCItMVwiIC8+J10uam9pbihcIlwiKSk7cmV0dXJuIGUucXVlcnlTZWxlY3RvcihcInVzZVwiKX0sdmFsaWRhdGU6dmFsaWRhdGV9O3ZhciBhZT17ZWxlbWVudDpcImRpdlwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5pbm5lckhUTUw9Z2VuZXJhdGUoJzxmb3JlaWduT2JqZWN0IHRhYmluZGV4PVwiLTFcIj48aW5wdXQgdHlwZT1cInRleHRcIiAvPjwvZm9yZWlnbk9iamVjdD4nKTtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yKFwiZm9yZWlnbk9iamVjdFwiKXx8ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImZvcmVpZ25PYmplY3RcIilbMF19LHZhbGlkYXRlOnZhbGlkYXRlfTt2YXIgaWU9Qm9vbGVhbihsLmlzLkdFQ0tPJiZ0eXBlb2YgU1ZHRWxlbWVudCE9PVwidW5kZWZpbmVkXCImJlNWR0VsZW1lbnQucHJvdG90eXBlLmZvY3VzKTtmdW5jdGlvbiBmb2N1c1N2Z0luSWZyYW1lKCl7cmV0dXJuIGllfXZhciBzZT17ZWxlbWVudDpcImRpdlwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5pbm5lckhUTUw9Z2VuZXJhdGUoXCJcIik7cmV0dXJuIGUuZmlyc3RDaGlsZH0sdmFsaWRhdGU6dmFsaWRhdGV9O3ZhciBsZT17ZWxlbWVudDpcImRpdlwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7ZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiM3hcIil9fTt2YXIgdWU9e2VsZW1lbnQ6XCJ0YWJsZVwiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSx0LHIpe3ZhciBuPXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO24uaW5uZXJIVE1MPVwiPHRyPjx0ZD5jZWxsPC90ZD48L3RyPlwiO2UuYXBwZW5kQ2hpbGQobil9fTt2YXIgY2U9e2VsZW1lbnQ6XCJ2aWRlb1wiLG11dGF0ZTpmdW5jdGlvbiBtdXRhdGUoZSl7dHJ5e2Uuc2V0QXR0cmlidXRlKFwic3JjXCIsayl9Y2F0Y2goZSl7fX19O3ZhciBkZT1sLmlzLkdFQ0tPfHxsLmlzLlRSSURFTlR8fGwuaXMuRURHRTtmdW5jdGlvbiB0YWJzZXF1ZW5jZUFyZWFBdEltZ1Bvc2l0aW9uKCl7cmV0dXJuIGRlfXZhciBmZT17Y3NzU2hhZG93UGllcmNpbmdEZWVwQ29tYmluYXRvcjpjc3NTaGFkb3dQaWVyY2luZ0RlZXBDb21iaW5hdG9yLGZvY3VzSW5aZXJvRGltZW5zaW9uT2JqZWN0OmZvY3VzSW5aZXJvRGltZW5zaW9uT2JqZWN0LGZvY3VzT2JqZWN0U3dmOmZvY3VzT2JqZWN0U3dmLGZvY3VzU3ZnSW5JZnJhbWU6Zm9jdXNTdmdJbklmcmFtZSx0YWJzZXF1ZW5jZUFyZWFBdEltZ1Bvc2l0aW9uOnRhYnNlcXVlbmNlQXJlYUF0SW1nUG9zaXRpb259O3ZhciBwZT17Zm9jdXNBcmVhSW1nVGFiaW5kZXg6Uyxmb2N1c0FyZWFUYWJpbmRleDpDLGZvY3VzQXJlYVdpdGhvdXRIcmVmOlQsZm9jdXNBdWRpb1dpdGhvdXRDb250cm9sczpELGZvY3VzQnJva2VuSW1hZ2VNYXA6Tixmb2N1c0NoaWxkcmVuT2ZGb2N1c2FibGVGbGV4Ym94OlIsZm9jdXNGaWVsZHNldERpc2FibGVkOkYsZm9jdXNGaWVsZHNldDpJLGZvY3VzRmxleGJveENvbnRhaW5lcjpBLGZvY3VzRm9ybURpc2FibGVkOk0sZm9jdXNJbWdJc21hcDpMLGZvY3VzSW1nVXNlbWFwVGFiaW5kZXg6Qixmb2N1c0luSGlkZGVuSWZyYW1lOkgsZm9jdXNJbnZhbGlkVGFiaW5kZXg6Vyxmb2N1c0xhYmVsVGFiaW5kZXg6Vixmb2N1c09iamVjdFN2ZzpLLGZvY3VzT2JqZWN0U3ZnSGlkZGVuOlUsZm9jdXNSZWRpcmVjdEltZ1VzZW1hcDpaLGZvY3VzUmVkaXJlY3RMZWdlbmQ6WSxmb2N1c1Njcm9sbEJvZHk6Sixmb2N1c1Njcm9sbENvbnRhaW5lcldpdGhvdXRPdmVyZmxvdzpYLGZvY3VzU2Nyb2xsQ29udGFpbmVyOlEsZm9jdXNTdW1tYXJ5OmVlLGZvY3VzU3ZnRm9jdXNhYmxlQXR0cmlidXRlOnRlLGZvY3VzU3ZnVGFiaW5kZXhBdHRyaWJ1dGU6cmUsZm9jdXNTdmdOZWdhdGl2ZVRhYmluZGV4QXR0cmlidXRlOm5lLGZvY3VzU3ZnVXNlVGFiaW5kZXg6b2UsZm9jdXNTdmdGb3JlaWdub2JqZWN0VGFiaW5kZXg6YWUsZm9jdXNTdmc6c2UsZm9jdXNUYWJpbmRleFRyYWlsaW5nQ2hhcmFjdGVyczpsZSxmb2N1c1RhYmxlOnVlLGZvY3VzVmlkZW9XaXRob3V0Q29udHJvbHM6Y2V9O2Z1bmN0aW9uIGV4ZWN1dGVUZXN0cygpe3ZhciBlPWRldGVjdEZvY3VzKHBlKTtPYmplY3Qua2V5cyhmZSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1mZVt0XSgpfSkpO3JldHVybiBlfXZhciBtZT1udWxsO2Z1bmN0aW9uIF9zdXBwb3J0cygpe2lmKG1lKXtyZXR1cm4gbWV9bWU9Ty5nZXQoKTtpZighbWUudGltZSl7Ty5zZXQoZXhlY3V0ZVRlc3RzKCkpO21lPU8uZ2V0KCl9cmV0dXJuIG1lfXZhciB2ZT12b2lkIDA7dmFyIGJlPS9eXFxzKigtfFxcKyk/WzAtOV0rXFxzKiQvO3ZhciBnZT0vXlxccyooLXxcXCspP1swLTldKy4qJC87ZnVuY3Rpb24gaXNWYWxpZFRhYmluZGV4KGUpe2lmKCF2ZSl7dmU9X3N1cHBvcnRzKCl9dmFyIHQ9dmUuZm9jdXNUYWJpbmRleFRyYWlsaW5nQ2hhcmFjdGVycz9nZTpiZTt2YXIgcj1jb250ZXh0VG9FbGVtZW50KHtsYWJlbDpcImlzL3ZhbGlkLXRhYmluZGV4XCIscmVzb2x2ZURvY3VtZW50OnRydWUsY29udGV4dDplfSk7dmFyIG49ci5oYXNBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKTt2YXIgbz1yLmhhc0F0dHJpYnV0ZShcInRhYkluZGV4XCIpO2lmKCFuJiYhbyl7cmV0dXJuIGZhbHNlfXZhciBhPXIub3duZXJTVkdFbGVtZW50fHxyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1cInN2Z1wiO2lmKGEmJiF2ZS5mb2N1c1N2Z1RhYmluZGV4QXR0cmlidXRlKXtyZXR1cm4gZmFsc2V9aWYodmUuZm9jdXNJbnZhbGlkVGFiaW5kZXgpe3JldHVybiB0cnVlfXZhciBpPXIuZ2V0QXR0cmlidXRlKG4/XCJ0YWJpbmRleFwiOlwidGFiSW5kZXhcIik7aWYoaT09PVwiLTMyNzY4XCIpe3JldHVybiBmYWxzZX1yZXR1cm4gQm9vbGVhbihpJiZ0LnRlc3QoaSkpfWZ1bmN0aW9uIHRhYmluZGV4VmFsdWUoZSl7aWYoIWlzVmFsaWRUYWJpbmRleChlKSl7cmV0dXJuIG51bGx9dmFyIHQ9ZS5oYXNBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKTt2YXIgcj10P1widGFiaW5kZXhcIjpcInRhYkluZGV4XCI7dmFyIG49cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUociksMTApO3JldHVybiBpc05hTihuKT8tMTpufWZ1bmN0aW9uIGlzVXNlck1vZGlmeVdyaXRhYmxlKGUpe3ZhciB0PWUud2Via2l0VXNlck1vZGlmeXx8XCJcIjtyZXR1cm4gQm9vbGVhbih0JiZ0LmluZGV4T2YoXCJ3cml0ZVwiKSE9PS0xKX1mdW5jdGlvbiBoYXNDc3NPdmVyZmxvd1Njcm9sbChlKXtyZXR1cm5bZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3ZlcmZsb3dcIiksZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3ZlcmZsb3cteFwiKSxlLmdldFByb3BlcnR5VmFsdWUoXCJvdmVyZmxvdy15XCIpXS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZT09PVwiYXV0b1wifHxlPT09XCJzY3JvbGxcIn0pKX1mdW5jdGlvbiBoYXNDc3NEaXNwbGF5RmxleChlKXtyZXR1cm4gZS5kaXNwbGF5LmluZGV4T2YoXCJmbGV4XCIpPi0xfWZ1bmN0aW9uIGlzU2Nyb2xsYWJsZUNvbnRhaW5lcihlLHQscixuKXtpZih0IT09XCJkaXZcIiYmdCE9PVwic3BhblwiKXtyZXR1cm4gZmFsc2V9aWYociYmciE9PVwiZGl2XCImJnIhPT1cInNwYW5cIiYmIWhhc0Nzc092ZXJmbG93U2Nyb2xsKG4pKXtyZXR1cm4gZmFsc2V9cmV0dXJuIGUub2Zmc2V0SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0fHxlLm9mZnNldFdpZHRoPGUuc2Nyb2xsV2lkdGh9dmFyIGhlPXZvaWQgMDtmdW5jdGlvbiBpc0ZvY3VzUmVsZXZhbnRSdWxlcygpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTp7fSx0PWUuY29udGV4dCxyPWUuZXhjZXB0LG49cj09PXVuZGVmaW5lZD97ZmxleGJveDpmYWxzZSxzY3JvbGxhYmxlOmZhbHNlLHNoYWRvdzpmYWxzZX06cjtpZighaGUpe2hlPV9zdXBwb3J0cygpfXZhciBvPWNvbnRleHRUb0VsZW1lbnQoe2xhYmVsOlwiaXMvZm9jdXMtcmVsZXZhbnRcIixyZXNvbHZlRG9jdW1lbnQ6dHJ1ZSxjb250ZXh0OnR9KTtpZighbi5zaGFkb3cmJm8uc2hhZG93Um9vdCl7cmV0dXJuIHRydWV9dmFyIGE9by5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKGE9PT1cImlucHV0XCImJm8udHlwZT09PVwiaGlkZGVuXCIpe3JldHVybiBmYWxzZX1pZihhPT09XCJpbnB1dFwifHxhPT09XCJzZWxlY3RcInx8YT09PVwiYnV0dG9uXCJ8fGE9PT1cInRleHRhcmVhXCIpe3JldHVybiB0cnVlfWlmKGE9PT1cImxlZ2VuZFwiJiZoZS5mb2N1c1JlZGlyZWN0TGVnZW5kKXtyZXR1cm4gdHJ1ZX1pZihhPT09XCJsYWJlbFwiKXtyZXR1cm4gdHJ1ZX1pZihhPT09XCJhcmVhXCIpe3JldHVybiB0cnVlfWlmKGE9PT1cImFcIiYmby5oYXNBdHRyaWJ1dGUoXCJocmVmXCIpKXtyZXR1cm4gdHJ1ZX1pZihhPT09XCJvYmplY3RcIiYmby5oYXNBdHRyaWJ1dGUoXCJ1c2VtYXBcIikpe3JldHVybiBmYWxzZX1pZihhPT09XCJvYmplY3RcIil7dmFyIGk9by5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO2lmKCFoZS5mb2N1c09iamVjdFN2ZyYmaT09PVwiaW1hZ2Uvc3ZnK3htbFwiKXtyZXR1cm4gZmFsc2V9ZWxzZSBpZighaGUuZm9jdXNPYmplY3RTd2YmJmk9PT1cImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoXCIpe3JldHVybiBmYWxzZX19aWYoYT09PVwiaWZyYW1lXCJ8fGE9PT1cIm9iamVjdFwiKXtyZXR1cm4gdHJ1ZX1pZihhPT09XCJlbWJlZFwifHxhPT09XCJrZXlnZW5cIil7cmV0dXJuIHRydWV9aWYoby5oYXNBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIikpe3JldHVybiB0cnVlfWlmKGE9PT1cImF1ZGlvXCImJihoZS5mb2N1c0F1ZGlvV2l0aG91dENvbnRyb2xzfHxvLmhhc0F0dHJpYnV0ZShcImNvbnRyb2xzXCIpKSl7cmV0dXJuIHRydWV9aWYoYT09PVwidmlkZW9cIiYmKGhlLmZvY3VzVmlkZW9XaXRob3V0Q29udHJvbHN8fG8uaGFzQXR0cmlidXRlKFwiY29udHJvbHNcIikpKXtyZXR1cm4gdHJ1ZX1pZihoZS5mb2N1c1N1bW1hcnkmJmE9PT1cInN1bW1hcnlcIil7cmV0dXJuIHRydWV9dmFyIHM9aXNWYWxpZFRhYmluZGV4KG8pO2lmKGE9PT1cImltZ1wiJiZvLmhhc0F0dHJpYnV0ZShcInVzZW1hcFwiKSl7cmV0dXJuIHMmJmhlLmZvY3VzSW1nVXNlbWFwVGFiaW5kZXh8fGhlLmZvY3VzUmVkaXJlY3RJbWdVc2VtYXB9aWYoaGUuZm9jdXNUYWJsZSYmKGE9PT1cInRhYmxlXCJ8fGE9PT1cInRkXCIpKXtyZXR1cm4gdHJ1ZX1pZihoZS5mb2N1c0ZpZWxkc2V0JiZhPT09XCJmaWVsZHNldFwiKXtyZXR1cm4gdHJ1ZX12YXIgbD1hPT09XCJzdmdcIjt2YXIgdT1vLm93bmVyU1ZHRWxlbWVudDt2YXIgYz1vLmdldEF0dHJpYnV0ZShcImZvY3VzYWJsZVwiKTt2YXIgZD10YWJpbmRleFZhbHVlKG8pO2lmKGE9PT1cInVzZVwiJiZkIT09bnVsbCYmIWhlLmZvY3VzU3ZnVXNlVGFiaW5kZXgpe3JldHVybiBmYWxzZX1pZihhPT09XCJmb3JlaWdub2JqZWN0XCIpe3JldHVybiBkIT09bnVsbCYmaGUuZm9jdXNTdmdGb3JlaWdub2JqZWN0VGFiaW5kZXh9aWYoZWxlbWVudE1hdGNoZXMobyxcInN2ZyBhXCIpJiZvLmhhc0F0dHJpYnV0ZShcInhsaW5rOmhyZWZcIikpe3JldHVybiB0cnVlfWlmKChsfHx1KSYmby5mb2N1cyYmIWhlLmZvY3VzU3ZnTmVnYXRpdmVUYWJpbmRleEF0dHJpYnV0ZSYmZDwwKXtyZXR1cm4gZmFsc2V9aWYobCl7cmV0dXJuIHN8fGhlLmZvY3VzU3ZnfHxoZS5mb2N1c1N2Z0luSWZyYW1lfHxCb29sZWFuKGhlLmZvY3VzU3ZnRm9jdXNhYmxlQXR0cmlidXRlJiZjJiZjPT09XCJ0cnVlXCIpfWlmKHUpe2lmKGhlLmZvY3VzU3ZnVGFiaW5kZXhBdHRyaWJ1dGUmJnMpe3JldHVybiB0cnVlfWlmKGhlLmZvY3VzU3ZnRm9jdXNhYmxlQXR0cmlidXRlKXtyZXR1cm4gYz09PVwidHJ1ZVwifX1pZihzKXtyZXR1cm4gdHJ1ZX12YXIgZj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvLG51bGwpO2lmKGlzVXNlck1vZGlmeVdyaXRhYmxlKGYpKXtyZXR1cm4gdHJ1ZX1pZihoZS5mb2N1c0ltZ0lzbWFwJiZhPT09XCJpbWdcIiYmby5oYXNBdHRyaWJ1dGUoXCJpc21hcFwiKSl7dmFyIHA9Z2V0UGFyZW50cyh7Y29udGV4dDpvfSkuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PVwiYVwiJiZlLmhhc0F0dHJpYnV0ZShcImhyZWZcIil9KSk7aWYocCl7cmV0dXJuIHRydWV9fWlmKCFuLnNjcm9sbGFibGUmJmhlLmZvY3VzU2Nyb2xsQ29udGFpbmVyKXtpZihoZS5mb2N1c1Njcm9sbENvbnRhaW5lcldpdGhvdXRPdmVyZmxvdyl7aWYoaXNTY3JvbGxhYmxlQ29udGFpbmVyKG8sYSkpe3JldHVybiB0cnVlfX1lbHNlIGlmKGhhc0Nzc092ZXJmbG93U2Nyb2xsKGYpKXtyZXR1cm4gdHJ1ZX19aWYoIW4uZmxleGJveCYmaGUuZm9jdXNGbGV4Ym94Q29udGFpbmVyJiZoYXNDc3NEaXNwbGF5RmxleChmKSl7cmV0dXJuIHRydWV9dmFyIG09by5wYXJlbnRFbGVtZW50O2lmKCFuLnNjcm9sbGFibGUmJm0pe3ZhciB2PW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTt2YXIgYj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShtLG51bGwpO2lmKGhlLmZvY3VzU2Nyb2xsQm9keSYmaXNTY3JvbGxhYmxlQ29udGFpbmVyKG0sYSx2LGIpKXtyZXR1cm4gdHJ1ZX1pZihoZS5mb2N1c0NoaWxkcmVuT2ZGb2N1c2FibGVGbGV4Ym94KXtpZihoYXNDc3NEaXNwbGF5RmxleChiKSl7cmV0dXJuIHRydWV9fX1yZXR1cm4gZmFsc2V9aXNGb2N1c1JlbGV2YW50UnVsZXMuZXhjZXB0PWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOnt9O3ZhciB0PWZ1bmN0aW9uIGlzRm9jdXNSZWxldmFudCh0KXtyZXR1cm4gaXNGb2N1c1JlbGV2YW50UnVsZXMoe2NvbnRleHQ6dCxleGNlcHQ6ZX0pfTt0LnJ1bGVzPWlzRm9jdXNSZWxldmFudFJ1bGVzO3JldHVybiB0fTt2YXIgeWU9aXNGb2N1c1JlbGV2YW50UnVsZXMuZXhjZXB0KHt9KTtmdW5jdGlvbiBmaW5kSW5kZXgoZSx0KXtpZihlLmZpbmRJbmRleCl7cmV0dXJuIGUuZmluZEluZGV4KHQpfXZhciByPWUubGVuZ3RoO2lmKHI9PT0wKXtyZXR1cm4tMX1mb3IodmFyIG49MDtuPHI7bisrKXtpZih0KGVbbl0sbixlKSl7cmV0dXJuIG59fXJldHVybi0xfWZ1bmN0aW9uIGdldENvbnRlbnREb2N1bWVudChlKXt0cnl7cmV0dXJuIGUuY29udGVudERvY3VtZW50fHxlLmNvbnRlbnRXaW5kb3cmJmUuY29udGVudFdpbmRvdy5kb2N1bWVudHx8ZS5nZXRTVkdEb2N1bWVudCYmZS5nZXRTVkdEb2N1bWVudCgpfHxudWxsfWNhdGNoKGUpe3JldHVybiBudWxsfX1mdW5jdGlvbiBnZXRXaW5kb3coZSl7dmFyIHQ9Z2V0RG9jdW1lbnQoZSk7cmV0dXJuIHQuZGVmYXVsdFZpZXd8fHdpbmRvd312YXIgeGU9dm9pZCAwO2Z1bmN0aW9uIHNlbGVjdEluU2hhZG93cyhlKXtpZih0eXBlb2YgeGUhPT1cInN0cmluZ1wiKXt2YXIgdD1jc3NTaGFkb3dQaWVyY2luZ0RlZXBDb21iaW5hdG9yKCk7aWYodCl7eGU9XCIsIGh0bWwgXCIrdCtcIiBcIn19aWYoIXhlKXtyZXR1cm4gZX1yZXR1cm4gZSt4ZStlLnJlcGxhY2UoL1xccyosXFxzKi9nLFwiLFwiKS5zcGxpdChcIixcIikuam9pbih4ZSl9dmFyIF9lPXZvaWQgMDtmdW5jdGlvbiBmaW5kRG9jdW1lbnRIb3N0RWxlbWVudChlKXtpZighX2Upe19lPXNlbGVjdEluU2hhZG93cyhcIm9iamVjdCwgaWZyYW1lXCIpfWlmKGUuX2ZyYW1lRWxlbWVudCE9PXVuZGVmaW5lZCl7cmV0dXJuIGUuX2ZyYW1lRWxlbWVudH1lLl9mcmFtZUVsZW1lbnQ9bnVsbDt2YXIgdD1lLnBhcmVudC5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKF9lKTtbXS5zb21lLmNhbGwodCwoZnVuY3Rpb24odCl7dmFyIHI9Z2V0Q29udGVudERvY3VtZW50KHQpO2lmKHIhPT1lLmRvY3VtZW50KXtyZXR1cm4gZmFsc2V9ZS5fZnJhbWVFbGVtZW50PXQ7cmV0dXJuIHRydWV9KSk7cmV0dXJuIGUuX2ZyYW1lRWxlbWVudH1mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQoZSl7dmFyIHQ9Z2V0V2luZG93KGUpO2lmKCF0LnBhcmVudHx8dC5wYXJlbnQ9PT10KXtyZXR1cm4gbnVsbH10cnl7cmV0dXJuIHQuZnJhbWVFbGVtZW50fHxmaW5kRG9jdW1lbnRIb3N0RWxlbWVudCh0KX1jYXRjaChlKXtyZXR1cm4gbnVsbH19dmFyIHdlPS9eKGFyZWEpJC87ZnVuY3Rpb24gY29tcHV0ZWRTdHlsZShlLHQpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9ZnVuY3Rpb24gbm90RGlzcGxheWVkKGUpe3JldHVybiBlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBjb21wdXRlZFN0eWxlKGUsXCJkaXNwbGF5XCIpPT09XCJub25lXCJ9KSl9ZnVuY3Rpb24gbm90VmlzaWJsZShlKXt2YXIgdD1maW5kSW5kZXgoZSwoZnVuY3Rpb24oZSl7dmFyIHQ9Y29tcHV0ZWRTdHlsZShlLFwidmlzaWJpbGl0eVwiKTtyZXR1cm4gdD09PVwiaGlkZGVuXCJ8fHQ9PT1cImNvbGxhcHNlXCJ9KSk7aWYodD09PS0xKXtyZXR1cm4gZmFsc2V9dmFyIHI9ZmluZEluZGV4KGUsKGZ1bmN0aW9uKGUpe3JldHVybiBjb21wdXRlZFN0eWxlKGUsXCJ2aXNpYmlsaXR5XCIpPT09XCJ2aXNpYmxlXCJ9KSk7aWYocj09PS0xKXtyZXR1cm4gdHJ1ZX1pZih0PHIpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX1mdW5jdGlvbiBjb2xsYXBzZWRQYXJlbnQoZSl7dmFyIHQ9MTtpZihlWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1cInN1bW1hcnlcIil7dD0yfXJldHVybiBlLnNsaWNlKHQpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1cImRldGFpbHNcIiYmZS5vcGVuPT09ZmFsc2V9KSl9ZnVuY3Rpb24gaXNWaXNpYmxlUnVsZXMoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMF06e30sdD1lLmNvbnRleHQscj1lLmV4Y2VwdCxuPXI9PT11bmRlZmluZWQ/e25vdFJlbmRlcmVkOmZhbHNlLGNzc0Rpc3BsYXk6ZmFsc2UsY3NzVmlzaWJpbGl0eTpmYWxzZSxkZXRhaWxzRWxlbWVudDpmYWxzZSxicm93c2luZ0NvbnRleHQ6ZmFsc2V9OnI7dmFyIG89Y29udGV4dFRvRWxlbWVudCh7bGFiZWw6XCJpcy92aXNpYmxlXCIscmVzb2x2ZURvY3VtZW50OnRydWUsY29udGV4dDp0fSk7dmFyIGE9by5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKCFuLm5vdFJlbmRlcmVkJiZ3ZS50ZXN0KGEpKXtyZXR1cm4gdHJ1ZX12YXIgaT1nZXRQYXJlbnRzKHtjb250ZXh0Om99KTt2YXIgcz1hPT09XCJhdWRpb1wiJiYhby5oYXNBdHRyaWJ1dGUoXCJjb250cm9sc1wiKTtpZighbi5jc3NEaXNwbGF5JiZub3REaXNwbGF5ZWQocz9pLnNsaWNlKDEpOmkpKXtyZXR1cm4gZmFsc2V9aWYoIW4uY3NzVmlzaWJpbGl0eSYmbm90VmlzaWJsZShpKSl7cmV0dXJuIGZhbHNlfWlmKCFuLmRldGFpbHNFbGVtZW50JiZjb2xsYXBzZWRQYXJlbnQoaSkpe3JldHVybiBmYWxzZX1pZighbi5icm93c2luZ0NvbnRleHQpe3ZhciBsPWdldEZyYW1lRWxlbWVudChvKTt2YXIgdT1pc1Zpc2libGVSdWxlcy5leGNlcHQobik7aWYobCYmIXUobCkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9aXNWaXNpYmxlUnVsZXMuZXhjZXB0PWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOnt9O3ZhciB0PWZ1bmN0aW9uIGlzVmlzaWJsZSh0KXtyZXR1cm4gaXNWaXNpYmxlUnVsZXMoe2NvbnRleHQ6dCxleGNlcHQ6ZX0pfTt0LnJ1bGVzPWlzVmlzaWJsZVJ1bGVzO3JldHVybiB0fTt2YXIgRWU9aXNWaXNpYmxlUnVsZXMuZXhjZXB0KHt9KTtmdW5jdGlvbiBnZXRNYXBCeU5hbWUoZSx0KXt2YXIgcj10LnF1ZXJ5U2VsZWN0b3IoJ21hcFtuYW1lPVwiJysoMCxhLmRlZmF1bHQpKGUpKydcIl0nKTtyZXR1cm4gcnx8bnVsbH1mdW5jdGlvbiBnZXRJbWFnZU9mQXJlYShlKXt2YXIgdD1lLnBhcmVudEVsZW1lbnQ7aWYoIXQubmFtZXx8dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09XCJtYXBcIil7cmV0dXJuIG51bGx9dmFyIHI9Z2V0RG9jdW1lbnQoZSk7cmV0dXJuIHIucXVlcnlTZWxlY3RvcignaW1nW3VzZW1hcD1cIiMnKygwLGEuZGVmYXVsdCkodC5uYW1lKSsnXCJdJyl8fG51bGx9dmFyIGplPXZvaWQgMDtmdW5jdGlvbiBpc1ZhbGlkQXJlYShlKXtpZighamUpe2plPV9zdXBwb3J0cygpfXZhciB0PWNvbnRleHRUb0VsZW1lbnQoe2xhYmVsOlwiaXMvdmFsaWQtYXJlYVwiLGNvbnRleHQ6ZX0pO3ZhciByPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihyIT09XCJhcmVhXCIpe3JldHVybiBmYWxzZX12YXIgbj10Lmhhc0F0dHJpYnV0ZShcInRhYmluZGV4XCIpO2lmKCFqZS5mb2N1c0FyZWFUYWJpbmRleCYmbil7cmV0dXJuIGZhbHNlfXZhciBvPWdldEltYWdlT2ZBcmVhKHQpO2lmKCFvfHwhRWUobykpe3JldHVybiBmYWxzZX1pZighamUuZm9jdXNCcm9rZW5JbWFnZU1hcCYmKCFvLmNvbXBsZXRlfHwhby5uYXR1cmFsSGVpZ2h0fHxvLm9mZnNldFdpZHRoPD0wfHxvLm9mZnNldEhlaWdodDw9MCkpe3JldHVybiBmYWxzZX1pZighamUuZm9jdXNBcmVhV2l0aG91dEhyZWYmJiF0LmhyZWYpe3JldHVybiBqZS5mb2N1c0FyZWFUYWJpbmRleCYmbnx8amUuZm9jdXNBcmVhSW1nVGFiaW5kZXgmJm8uaGFzQXR0cmlidXRlKFwidGFiaW5kZXhcIil9dmFyIGE9Z2V0UGFyZW50cyh7Y29udGV4dDpvfSkuc2xpY2UoMSkuc29tZSgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0PT09XCJidXR0b25cInx8dD09PVwiYVwifSkpO2lmKGEpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX12YXIgT2U9dm9pZCAwO3ZhciBrZT12b2lkIDA7dmFyIFNlPXtpbnB1dDp0cnVlLHNlbGVjdDp0cnVlLHRleHRhcmVhOnRydWUsYnV0dG9uOnRydWUsZmllbGRzZXQ6dHJ1ZSxmb3JtOnRydWV9O2Z1bmN0aW9uIGlzTmF0aXZlRGlzYWJsZWRTdXBwb3J0ZWQoZSl7aWYoIU9lKXtPZT1fc3VwcG9ydHMoKTtpZihPZS5mb2N1c0ZpZWxkc2V0RGlzYWJsZWQpe2RlbGV0ZSBTZS5maWVsZHNldH1pZihPZS5mb2N1c0Zvcm1EaXNhYmxlZCl7ZGVsZXRlIFNlLmZvcm19a2U9bmV3IFJlZ0V4cChcIl4oXCIrT2JqZWN0LmtleXMoU2UpLmpvaW4oXCJ8XCIpK1wiKSRcIil9dmFyIHQ9Y29udGV4dFRvRWxlbWVudCh7bGFiZWw6XCJpcy9uYXRpdmUtZGlzYWJsZWQtc3VwcG9ydGVkXCIsY29udGV4dDplfSk7dmFyIHI9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBCb29sZWFuKGtlLnRlc3QocikpfXZhciBDZT12b2lkIDA7ZnVuY3Rpb24gaXNEaXNhYmxlZEZpZWxkc2V0KGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdD09PVwiZmllbGRzZXRcIiYmZS5kaXNhYmxlZH1mdW5jdGlvbiBpc0Rpc2FibGVkRm9ybShlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT1cImZvcm1cIiYmZS5kaXNhYmxlZH1mdW5jdGlvbiBpc0Rpc2FibGVkKGUpe2lmKCFDZSl7Q2U9X3N1cHBvcnRzKCl9dmFyIHQ9Y29udGV4dFRvRWxlbWVudCh7bGFiZWw6XCJpcy9kaXNhYmxlZFwiLGNvbnRleHQ6ZX0pO2lmKHQuaGFzQXR0cmlidXRlKFwiZGF0YS1hbGx5LWRpc2FibGVkXCIpKXtyZXR1cm4gdHJ1ZX1pZighaXNOYXRpdmVEaXNhYmxlZFN1cHBvcnRlZCh0KSl7cmV0dXJuIGZhbHNlfWlmKHQuZGlzYWJsZWQpe3JldHVybiB0cnVlfXZhciByPWdldFBhcmVudHMoe2NvbnRleHQ6dH0pO2lmKHIuc29tZShpc0Rpc2FibGVkRmllbGRzZXQpKXtyZXR1cm4gdHJ1ZX1pZighQ2UuZm9jdXNGb3JtRGlzYWJsZWQmJnIuc29tZShpc0Rpc2FibGVkRm9ybSkpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX1mdW5jdGlvbiBpc09ubHlUYWJiYWJsZVJ1bGVzKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOnt9LHQ9ZS5jb250ZXh0LHI9ZS5leGNlcHQsbj1yPT09dW5kZWZpbmVkP3tvbmx5Rm9jdXNhYmxlQnJvd3NpbmdDb250ZXh0OmZhbHNlLHZpc2libGU6ZmFsc2V9OnI7dmFyIG89Y29udGV4dFRvRWxlbWVudCh7bGFiZWw6XCJpcy9vbmx5LXRhYmJhYmxlXCIscmVzb2x2ZURvY3VtZW50OnRydWUsY29udGV4dDp0fSk7aWYoIW4udmlzaWJsZSYmIUVlKG8pKXtyZXR1cm4gZmFsc2V9aWYoIW4ub25seUZvY3VzYWJsZUJyb3dzaW5nQ29udGV4dCYmKGwuaXMuR0VDS098fGwuaXMuVFJJREVOVHx8bC5pcy5FREdFKSl7dmFyIGE9Z2V0RnJhbWVFbGVtZW50KG8pO2lmKGEpe2lmKHRhYmluZGV4VmFsdWUoYSk8MCl7cmV0dXJuIGZhbHNlfX19dmFyIGk9by5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3ZhciBzPXRhYmluZGV4VmFsdWUobyk7aWYoaT09PVwibGFiZWxcIiYmbC5pcy5HRUNLTyl7cmV0dXJuIHMhPT1udWxsJiZzPj0wfWlmKGwuaXMuR0VDS08mJm8ub3duZXJTVkdFbGVtZW50JiYhby5mb2N1cyl7aWYoaT09PVwiYVwiJiZvLmhhc0F0dHJpYnV0ZShcInhsaW5rOmhyZWZcIikpe2lmKGwuaXMuR0VDS08pe3JldHVybiB0cnVlfX19cmV0dXJuIGZhbHNlfWlzT25seVRhYmJhYmxlUnVsZXMuZXhjZXB0PWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOnt9O3ZhciB0PWZ1bmN0aW9uIGlzT25seVRhYmJhYmxlKHQpe3JldHVybiBpc09ubHlUYWJiYWJsZVJ1bGVzKHtjb250ZXh0OnQsZXhjZXB0OmV9KX07dC5ydWxlcz1pc09ubHlUYWJiYWJsZVJ1bGVzO3JldHVybiB0fTt2YXIgVGU9aXNPbmx5VGFiYmFibGVSdWxlcy5leGNlcHQoe30pO3ZhciBEZT12b2lkIDA7ZnVuY3Rpb24gaXNPbmx5Rm9jdXNSZWxldmFudChlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYodD09PVwiZW1iZWRcInx8dD09PVwia2V5Z2VuXCIpe3JldHVybiB0cnVlfXZhciByPXRhYmluZGV4VmFsdWUoZSk7aWYoZS5zaGFkb3dSb290JiZyPT09bnVsbCl7cmV0dXJuIHRydWV9aWYodD09PVwibGFiZWxcIil7cmV0dXJuIURlLmZvY3VzTGFiZWxUYWJpbmRleHx8cj09PW51bGx9aWYodD09PVwibGVnZW5kXCIpe3JldHVybiByPT09bnVsbH1pZihEZS5mb2N1c1N2Z0ZvY3VzYWJsZUF0dHJpYnV0ZSYmKGUub3duZXJTVkdFbGVtZW50fHx0PT09XCJzdmdcIikpe3ZhciBuPWUuZ2V0QXR0cmlidXRlKFwiZm9jdXNhYmxlXCIpO3JldHVybiBuJiZuPT09XCJmYWxzZVwifWlmKHQ9PT1cImltZ1wiJiZlLmhhc0F0dHJpYnV0ZShcInVzZW1hcFwiKSl7cmV0dXJuIHI9PT1udWxsfHwhRGUuZm9jdXNJbWdVc2VtYXBUYWJpbmRleH1pZih0PT09XCJhcmVhXCIpe3JldHVybiFpc1ZhbGlkQXJlYShlKX1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gaXNGb2N1c2FibGVSdWxlcygpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTp7fSx0PWUuY29udGV4dCxyPWUuZXhjZXB0LG49cj09PXVuZGVmaW5lZD97ZGlzYWJsZWQ6ZmFsc2UsdmlzaWJsZTpmYWxzZSxvbmx5VGFiYmFibGU6ZmFsc2V9OnI7aWYoIURlKXtEZT1fc3VwcG9ydHMoKX12YXIgbz1UZS5ydWxlcy5leGNlcHQoe29ubHlGb2N1c2FibGVCcm93c2luZ0NvbnRleHQ6dHJ1ZSx2aXNpYmxlOm4udmlzaWJsZX0pO3ZhciBhPWNvbnRleHRUb0VsZW1lbnQoe2xhYmVsOlwiaXMvZm9jdXNhYmxlXCIscmVzb2x2ZURvY3VtZW50OnRydWUsY29udGV4dDp0fSk7dmFyIGk9eWUucnVsZXMoe2NvbnRleHQ6YSxleGNlcHQ6bn0pO2lmKCFpfHxpc09ubHlGb2N1c1JlbGV2YW50KGEpKXtyZXR1cm4gZmFsc2V9aWYoIW4uZGlzYWJsZWQmJmlzRGlzYWJsZWQoYSkpe3JldHVybiBmYWxzZX1pZighbi5vbmx5VGFiYmFibGUmJm8oYSkpe3JldHVybiBmYWxzZX1pZighbi52aXNpYmxlKXt2YXIgcz17Y29udGV4dDphLGV4Y2VwdDp7fX07aWYoRGUuZm9jdXNJbkhpZGRlbklmcmFtZSl7cy5leGNlcHQuYnJvd3NpbmdDb250ZXh0PXRydWV9aWYoRGUuZm9jdXNPYmplY3RTdmdIaWRkZW4pe3ZhciBsPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihsPT09XCJvYmplY3RcIil7cy5leGNlcHQuY3NzVmlzaWJpbGl0eT10cnVlfX1pZighRWUucnVsZXMocykpe3JldHVybiBmYWxzZX19dmFyIHU9Z2V0RnJhbWVFbGVtZW50KGEpO2lmKHUpe3ZhciBjPXUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihjPT09XCJvYmplY3RcIiYmIURlLmZvY3VzSW5aZXJvRGltZW5zaW9uT2JqZWN0KXtpZighdS5vZmZzZXRXaWR0aHx8IXUub2Zmc2V0SGVpZ2h0KXtyZXR1cm4gZmFsc2V9fX12YXIgZD1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoZD09PVwic3ZnXCImJkRlLmZvY3VzU3ZnSW5JZnJhbWUmJiF1JiZhLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpPT09bnVsbCl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfWlzRm9jdXNhYmxlUnVsZXMuZXhjZXB0PWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOnt9O3ZhciB0PWZ1bmN0aW9uIGlzRm9jdXNhYmxlKHQpe3JldHVybiBpc0ZvY3VzYWJsZVJ1bGVzKHtjb250ZXh0OnQsZXhjZXB0OmV9KX07dC5ydWxlcz1pc0ZvY3VzYWJsZVJ1bGVzO3JldHVybiB0fTt2YXIgUGU9aXNGb2N1c2FibGVSdWxlcy5leGNlcHQoe30pO2Z1bmN0aW9uIGNyZWF0ZUZpbHRlcihlKXt2YXIgdD1mdW5jdGlvbiBmaWx0ZXIodCl7aWYodC5zaGFkb3dSb290KXtyZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUfWlmKGUodCkpe3JldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFR9cmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1NLSVB9O3QuYWNjZXB0Tm9kZT10O3JldHVybiB0fXZhciBOZT1jcmVhdGVGaWx0ZXIoeWUpO2Z1bmN0aW9uIHF1ZXJ5Rm9jdXNhYmxlU3RyaWN0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOnt9LHQ9ZS5jb250ZXh0LHI9ZS5pbmNsdWRlQ29udGV4dCxuPWUuaW5jbHVkZU9ubHlUYWJiYWJsZSxvPWUuc3RyYXRlZ3k7aWYoIXQpe3Q9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fXZhciBhPVBlLnJ1bGVzLmV4Y2VwdCh7b25seVRhYmJhYmxlOm59KTt2YXIgaT1nZXREb2N1bWVudCh0KTt2YXIgcz1pLmNyZWF0ZVRyZWVXYWxrZXIodCxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCxvPT09XCJhbGxcIj9OZTpjcmVhdGVGaWx0ZXIoYSksZmFsc2UpO3ZhciBsPVtdO3doaWxlKHMubmV4dE5vZGUoKSl7aWYocy5jdXJyZW50Tm9kZS5zaGFkb3dSb290KXtpZihhKHMuY3VycmVudE5vZGUpKXtsLnB1c2gocy5jdXJyZW50Tm9kZSl9bD1sLmNvbmNhdChxdWVyeUZvY3VzYWJsZVN0cmljdCh7Y29udGV4dDpzLmN1cnJlbnROb2RlLnNoYWRvd1Jvb3QsaW5jbHVkZU9ubHlUYWJiYWJsZTpuLHN0cmF0ZWd5Om99KSl9ZWxzZXtsLnB1c2gocy5jdXJyZW50Tm9kZSl9fWlmKHIpe2lmKG89PT1cImFsbFwiKXtpZih5ZSh0KSl7bC51bnNoaWZ0KHQpfX1lbHNlIGlmKGEodCkpe2wudW5zaGlmdCh0KX19cmV0dXJuIGx9dmFyIFJlPXZvaWQgMDt2YXIgRmU9dm9pZCAwO2Z1bmN0aW9uIHNlbGVjdG9yJDIoKXtpZighUmUpe1JlPV9zdXBwb3J0cygpfWlmKHR5cGVvZiBGZT09PVwic3RyaW5nXCIpe3JldHVybiBGZX1GZT1cIlwiKyhSZS5mb2N1c1RhYmxlP1widGFibGUsIHRkLFwiOlwiXCIpKyhSZS5mb2N1c0ZpZWxkc2V0P1wiZmllbGRzZXQsXCI6XCJcIikrXCJzdmcgYSxcIitcImFbaHJlZl0sXCIrXCJhcmVhW2hyZWZdLFwiK1wiaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGJ1dHRvbixcIitcImlmcmFtZSwgb2JqZWN0LCBlbWJlZCxcIitcImtleWdlbixcIisoUmUuZm9jdXNBdWRpb1dpdGhvdXRDb250cm9scz9cImF1ZGlvLFwiOlwiYXVkaW9bY29udHJvbHNdLFwiKSsoUmUuZm9jdXNWaWRlb1dpdGhvdXRDb250cm9scz9cInZpZGVvLFwiOlwidmlkZW9bY29udHJvbHNdLFwiKSsoUmUuZm9jdXNTdW1tYXJ5P1wic3VtbWFyeSxcIjpcIlwiKStcIlt0YWJpbmRleF0sXCIrXCJbY29udGVudGVkaXRhYmxlXVwiO0ZlPXNlbGVjdEluU2hhZG93cyhGZSk7cmV0dXJuIEZlfWZ1bmN0aW9uIHF1ZXJ5Rm9jdXNhYmxlUXVpY2soKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMF06e30sdD1lLmNvbnRleHQscj1lLmluY2x1ZGVDb250ZXh0LG49ZS5pbmNsdWRlT25seVRhYmJhYmxlO3ZhciBvPXNlbGVjdG9yJDIoKTt2YXIgYT10LnF1ZXJ5U2VsZWN0b3JBbGwobyk7dmFyIGk9UGUucnVsZXMuZXhjZXB0KHtvbmx5VGFiYmFibGU6bn0pO3ZhciBzPVtdLmZpbHRlci5jYWxsKGEsaSk7aWYociYmaSh0KSl7cy51bnNoaWZ0KHQpfXJldHVybiBzfWZ1bmN0aW9uIHF1ZXJ5Rm9jdXNhYmxlKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOnt9LHQ9ZS5jb250ZXh0LHI9ZS5pbmNsdWRlQ29udGV4dCxuPWUuaW5jbHVkZU9ubHlUYWJiYWJsZSxvPWUuc3RyYXRlZ3ksYT1vPT09dW5kZWZpbmVkP1wicXVpY2tcIjpvO3ZhciBpPWNvbnRleHRUb0VsZW1lbnQoe2xhYmVsOlwicXVlcnkvZm9jdXNhYmxlXCIscmVzb2x2ZURvY3VtZW50OnRydWUsZGVmYXVsdFRvRG9jdW1lbnQ6dHJ1ZSxjb250ZXh0OnR9KTt2YXIgcz17Y29udGV4dDppLGluY2x1ZGVDb250ZXh0OnIsaW5jbHVkZU9ubHlUYWJiYWJsZTpuLHN0cmF0ZWd5OmF9O2lmKGE9PT1cInF1aWNrXCIpe3JldHVybiBxdWVyeUZvY3VzYWJsZVF1aWNrKHMpfWVsc2UgaWYoYT09PVwic3RyaWN0XCJ8fGE9PT1cImFsbFwiKXtyZXR1cm4gcXVlcnlGb2N1c2FibGVTdHJpY3Qocyl9dGhyb3cgbmV3IFR5cGVFcnJvcigncXVlcnkvZm9jdXNhYmxlIHJlcXVpcmVzIG9wdGlvbi5zdHJhdGVneSB0byBiZSBvbmUgb2YgW1wicXVpY2tcIiwgXCJzdHJpY3RcIiwgXCJhbGxcIl0nKX12YXIgSWU9dm9pZCAwO3ZhciBBZT0vXihmaWVsZHNldHx0YWJsZXx0ZHxib2R5KSQvO2Z1bmN0aW9uIGlzVGFiYmFibGVSdWxlcygpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTp7fSx0PWUuY29udGV4dCxyPWUuZXhjZXB0LG49cj09PXVuZGVmaW5lZD97ZmxleGJveDpmYWxzZSxzY3JvbGxhYmxlOmZhbHNlLHNoYWRvdzpmYWxzZSx2aXNpYmxlOmZhbHNlLG9ubHlUYWJiYWJsZTpmYWxzZX06cjtpZighSWUpe0llPV9zdXBwb3J0cygpfXZhciBvPWNvbnRleHRUb0VsZW1lbnQoe2xhYmVsOlwiaXMvdGFiYmFibGVcIixyZXNvbHZlRG9jdW1lbnQ6dHJ1ZSxjb250ZXh0OnR9KTtpZihsLmlzLkJMSU5LJiZsLmlzLkFORFJPSUQmJmwubWFqb3JWZXJzaW9uPjQyKXtyZXR1cm4gZmFsc2V9dmFyIGE9Z2V0RnJhbWVFbGVtZW50KG8pO2lmKGEpe2lmKGwuaXMuV0VCS0lUJiZsLmlzLklPUyl7cmV0dXJuIGZhbHNlfWlmKHRhYmluZGV4VmFsdWUoYSk8MCl7cmV0dXJuIGZhbHNlfWlmKCFuLnZpc2libGUmJihsLmlzLkJMSU5LfHxsLmlzLldFQktJVCkmJiFFZShhKSl7cmV0dXJuIGZhbHNlfXZhciBpPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihpPT09XCJvYmplY3RcIil7dmFyIHM9bC5uYW1lPT09XCJDaHJvbWVcIiYmbC5tYWpvclZlcnNpb24+PTU0fHxsLm5hbWU9PT1cIk9wZXJhXCImJmwubWFqb3JWZXJzaW9uPj00MTtpZihsLmlzLldFQktJVHx8bC5pcy5CTElOSyYmIXMpe3JldHVybiBmYWxzZX19fXZhciB1PW8ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTt2YXIgYz10YWJpbmRleFZhbHVlKG8pO3ZhciBkPWM9PT1udWxsP251bGw6Yz49MDtpZihsLmlzLkVER0UmJmwubWFqb3JWZXJzaW9uPj0xNCYmYSYmby5vd25lclNWR0VsZW1lbnQmJmM8MCl7cmV0dXJuIHRydWV9dmFyIGY9ZCE9PWZhbHNlO3ZhciBwPWMhPT1udWxsJiZjPj0wO2lmKG8uaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpKXtyZXR1cm4gZn1pZihBZS50ZXN0KHUpJiZkIT09dHJ1ZSl7cmV0dXJuIGZhbHNlfWlmKGwuaXMuV0VCS0lUJiZsLmlzLklPUyl7dmFyIG09dT09PVwiaW5wdXRcIiYmby50eXBlPT09XCJ0ZXh0XCJ8fG8udHlwZT09PVwicGFzc3dvcmRcInx8dT09PVwic2VsZWN0XCJ8fHU9PT1cInRleHRhcmVhXCJ8fG8uaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpO2lmKCFtKXt2YXIgdj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvLG51bGwpO209aXNVc2VyTW9kaWZ5V3JpdGFibGUodil9aWYoIW0pe3JldHVybiBmYWxzZX19aWYodT09PVwidXNlXCImJmMhPT1udWxsKXtpZihsLmlzLkJMSU5LfHxsLmlzLldFQktJVCYmbC5tYWpvclZlcnNpb249PT05KXtyZXR1cm4gdHJ1ZX19aWYoZWxlbWVudE1hdGNoZXMobyxcInN2ZyBhXCIpJiZvLmhhc0F0dHJpYnV0ZShcInhsaW5rOmhyZWZcIikpe2lmKGYpe3JldHVybiB0cnVlfWlmKG8uZm9jdXMmJiFJZS5mb2N1c1N2Z05lZ2F0aXZlVGFiaW5kZXhBdHRyaWJ1dGUpe3JldHVybiB0cnVlfX1pZih1PT09XCJzdmdcIiYmSWUuZm9jdXNTdmdJbklmcmFtZSYmZil7cmV0dXJuIHRydWV9aWYobC5pcy5UUklERU5UfHxsLmlzLkVER0Upe2lmKHU9PT1cInN2Z1wiKXtpZihJZS5mb2N1c1N2Zyl7cmV0dXJuIHRydWV9cmV0dXJuIG8uaGFzQXR0cmlidXRlKFwiZm9jdXNhYmxlXCIpfHxwfWlmKG8ub3duZXJTVkdFbGVtZW50KXtpZihJZS5mb2N1c1N2Z1RhYmluZGV4QXR0cmlidXRlJiZwKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gby5oYXNBdHRyaWJ1dGUoXCJmb2N1c2FibGVcIil9fWlmKG8udGFiSW5kZXg9PT11bmRlZmluZWQpe3JldHVybiBCb29sZWFuKG4ub25seVRhYmJhYmxlKX1pZih1PT09XCJhdWRpb1wiKXtpZighby5oYXNBdHRyaWJ1dGUoXCJjb250cm9sc1wiKSl7cmV0dXJuIGZhbHNlfWVsc2UgaWYobC5pcy5CTElOSyl7cmV0dXJuIHRydWV9fWlmKHU9PT1cInZpZGVvXCIpe2lmKCFvLmhhc0F0dHJpYnV0ZShcImNvbnRyb2xzXCIpKXtpZihsLmlzLlRSSURFTlR8fGwuaXMuRURHRSl7cmV0dXJuIGZhbHNlfX1lbHNlIGlmKGwuaXMuQkxJTkt8fGwuaXMuR0VDS08pe3JldHVybiB0cnVlfX1pZih1PT09XCJvYmplY3RcIil7aWYobC5pcy5CTElOS3x8bC5pcy5XRUJLSVQpe3JldHVybiBmYWxzZX19aWYodT09PVwiaWZyYW1lXCIpe3JldHVybiBmYWxzZX1pZighbi5zY3JvbGxhYmxlJiZsLmlzLkdFQ0tPKXt2YXIgYj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvLG51bGwpO2lmKGhhc0Nzc092ZXJmbG93U2Nyb2xsKGIpKXtyZXR1cm4gZn19aWYobC5pcy5UUklERU5UfHxsLmlzLkVER0Upe2lmKHU9PT1cImFyZWFcIil7dmFyIGc9Z2V0SW1hZ2VPZkFyZWEobyk7aWYoZyYmdGFiaW5kZXhWYWx1ZShnKTwwKXtyZXR1cm4gZmFsc2V9fXZhciBoPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG8sbnVsbCk7aWYoaXNVc2VyTW9kaWZ5V3JpdGFibGUoaCkpe3JldHVybiBvLnRhYkluZGV4Pj0wfWlmKCFuLmZsZXhib3gmJmhhc0Nzc0Rpc3BsYXlGbGV4KGgpKXtpZihjIT09bnVsbCl7cmV0dXJuIHB9cmV0dXJuIE1lKG8pJiZMZShvKX1pZihpc1Njcm9sbGFibGVDb250YWluZXIobyx1KSl7cmV0dXJuIGZhbHNlfXZhciB5PW8ucGFyZW50RWxlbWVudDtpZih5KXt2YXIgeD15Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7dmFyIF89d2luZG93LmdldENvbXB1dGVkU3R5bGUoeSxudWxsKTtpZihpc1Njcm9sbGFibGVDb250YWluZXIoeSx1LHgsXykpe3JldHVybiBmYWxzZX1pZihoYXNDc3NEaXNwbGF5RmxleChfKSl7cmV0dXJuIHB9fX1yZXR1cm4gby50YWJJbmRleD49MH1pc1RhYmJhYmxlUnVsZXMuZXhjZXB0PWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOnt9O3ZhciB0PWZ1bmN0aW9uIGlzVGFiYmFibGUodCl7cmV0dXJuIGlzVGFiYmFibGVSdWxlcyh7Y29udGV4dDp0LGV4Y2VwdDplfSl9O3QucnVsZXM9aXNUYWJiYWJsZVJ1bGVzO3JldHVybiB0fTt2YXIgTWU9eWUucnVsZXMuZXhjZXB0KHtmbGV4Ym94OnRydWV9KTt2YXIgTGU9aXNUYWJiYWJsZVJ1bGVzLmV4Y2VwdCh7ZmxleGJveDp0cnVlfSk7dmFyIEJlPWlzVGFiYmFibGVSdWxlcy5leGNlcHQoe30pO2Z1bmN0aW9uIHF1ZXJ5VGFiYmFibGUoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMF06e30sdD1lLmNvbnRleHQscj1lLmluY2x1ZGVDb250ZXh0LG49ZS5pbmNsdWRlT25seVRhYmJhYmxlLG89ZS5zdHJhdGVneTt2YXIgYT1CZS5ydWxlcy5leGNlcHQoe29ubHlUYWJiYWJsZTpufSk7cmV0dXJuIHF1ZXJ5Rm9jdXNhYmxlKHtjb250ZXh0OnQsaW5jbHVkZUNvbnRleHQ6cixpbmNsdWRlT25seVRhYmJhYmxlOm4sc3RyYXRlZ3k6b30pLmZpbHRlcihhKX1mdW5jdGlvbiBjb21wYXJlRG9tUG9zaXRpb24oZSx0KXtyZXR1cm4gZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORz8tMToxfWZ1bmN0aW9uIHNvcnREb21PcmRlcihlKXtyZXR1cm4gZS5zb3J0KGNvbXBhcmVEb21Qb3NpdGlvbil9ZnVuY3Rpb24gZ2V0Rmlyc3RTdWNjZXNzb3JPZmZzZXQoZSx0KXtyZXR1cm4gZmluZEluZGV4KGUsKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HfSkpfWZ1bmN0aW9uIGZpbmRJbnNlcnRpb25PZmZzZXRzKGUsdCxyKXt2YXIgbj1bXTt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBvPXRydWU7dmFyIGE9ZS5pbmRleE9mKHQpO2lmKGE9PT0tMSl7YT1nZXRGaXJzdFN1Y2Nlc3Nvck9mZnNldChlLHQpO289ZmFsc2V9aWYoYT09PS0xKXthPWUubGVuZ3RofXZhciBpPW5vZGVBcnJheShyP3IodCk6dCk7aWYoIWkubGVuZ3RoKXtyZXR1cm59bi5wdXNoKHtvZmZzZXQ6YSxyZXBsYWNlOm8sZWxlbWVudHM6aX0pfSkpO3JldHVybiBufWZ1bmN0aW9uIGluc2VydEVsZW1lbnRzQXRPZmZzZXRzKGUsdCl7dmFyIHI9MDt0LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUub2Zmc2V0LXQub2Zmc2V0fSkpO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dC5yZXBsYWNlPzE6MDt2YXIgbz1bdC5vZmZzZXQrcixuXS5jb25jYXQodC5lbGVtZW50cyk7ZS5zcGxpY2UuYXBwbHkoZSxvKTtyKz10LmVsZW1lbnRzLmxlbmd0aC1ufSkpfWZ1bmN0aW9uIG1lcmdlSW5Eb21PcmRlcigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTp7fSx0PWUubGlzdCxyPWUuZWxlbWVudHMsbj1lLnJlc29sdmVFbGVtZW50O3ZhciBvPXQuc2xpY2UoMCk7dmFyIGE9bm9kZUFycmF5KHIpLnNsaWNlKDApO3NvcnREb21PcmRlcihhKTt2YXIgaT1maW5kSW5zZXJ0aW9uT2Zmc2V0cyhvLGEsbik7aW5zZXJ0RWxlbWVudHNBdE9mZnNldHMobyxpKTtyZXR1cm4gb312YXIgSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ZmFsc2U7bi5jb25maWd1cmFibGU9dHJ1ZTtpZihcInZhbHVlXCJpbiBuKW4ud3JpdGFibGU9dHJ1ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXtpZih0KWRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsdCk7aWYocilkZWZpbmVQcm9wZXJ0aWVzKGUscik7cmV0dXJuIGV9fSgpO2Z1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfX12YXIgemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBNYXBzKGUpe19jbGFzc0NhbGxDaGVjayh0aGlzLE1hcHMpO3RoaXMuX2RvY3VtZW50PWdldERvY3VtZW50KGUpO3RoaXMubWFwcz17fX1IZShNYXBzLFt7a2V5OlwiZ2V0QXJlYXNGb3JcIix2YWx1ZTpmdW5jdGlvbiBnZXRBcmVhc0ZvcihlKXtpZighdGhpcy5tYXBzW2VdKXt0aGlzLmFkZE1hcEJ5TmFtZShlKX1yZXR1cm4gdGhpcy5tYXBzW2VdfX0se2tleTpcImFkZE1hcEJ5TmFtZVwiLHZhbHVlOmZ1bmN0aW9uIGFkZE1hcEJ5TmFtZShlKXt2YXIgdD1nZXRNYXBCeU5hbWUoZSx0aGlzLl9kb2N1bWVudCk7aWYoIXQpe3JldHVybn10aGlzLm1hcHNbdC5uYW1lXT1xdWVyeVRhYmJhYmxlKHtjb250ZXh0OnR9KX19LHtrZXk6XCJleHRyYWN0QXJlYXNGcm9tTGlzdFwiLHZhbHVlOmZ1bmN0aW9uIGV4dHJhY3RBcmVhc0Zyb21MaXN0KGUpe3JldHVybiBlLmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHQhPT1cImFyZWFcIil7cmV0dXJuIHRydWV9dmFyIHI9ZS5wYXJlbnROb2RlO2lmKCF0aGlzLm1hcHNbci5uYW1lXSl7dGhpcy5tYXBzW3IubmFtZV09W119dGhpcy5tYXBzW3IubmFtZV0ucHVzaChlKTtyZXR1cm4gZmFsc2V9KSx0aGlzKX19XSk7cmV0dXJuIE1hcHN9KCk7ZnVuY3Rpb24gc29ydEFyZWEoZSx0KXt2YXIgcj10LnF1ZXJ5U2VsZWN0b3JBbGwoXCJpbWdbdXNlbWFwXVwiKTt2YXIgbj1uZXcgemUodCk7dmFyIG89bi5leHRyYWN0QXJlYXNGcm9tTGlzdChlKTtpZighci5sZW5ndGgpe3JldHVybiBvfXJldHVybiBtZXJnZUluRG9tT3JkZXIoe2xpc3Q6byxlbGVtZW50czpyLHJlc29sdmVFbGVtZW50OmZ1bmN0aW9uIHJlc29sdmVFbGVtZW50KGUpe3ZhciB0PWUuZ2V0QXR0cmlidXRlKFwidXNlbWFwXCIpLnNsaWNlKDEpO3JldHVybiBuLmdldEFyZWFzRm9yKHQpfX0pfXZhciBXZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHxmYWxzZTtuLmNvbmZpZ3VyYWJsZT10cnVlO2lmKFwidmFsdWVcImluIG4pbi53cml0YWJsZT10cnVlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSx0LHIpe2lmKHQpZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSx0KTtpZihyKWRlZmluZVByb3BlcnRpZXMoZSxyKTtyZXR1cm4gZX19KCk7ZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrJDEoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX19dmFyIFZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gU2hhZG93cyhlLHQpe19jbGFzc0NhbGxDaGVjayQxKHRoaXMsU2hhZG93cyk7dGhpcy5jb250ZXh0PWU7dGhpcy5zb3J0RWxlbWVudHM9dDt0aGlzLmhvc3RDb3VudGVyPTE7dGhpcy5pbkhvc3Q9e307dGhpcy5pbkRvY3VtZW50PVtdO3RoaXMuaG9zdHM9e307dGhpcy5lbGVtZW50cz17fX1XZShTaGFkb3dzLFt7a2V5OlwiX3JlZ2lzdGVySG9zdFwiLHZhbHVlOmZ1bmN0aW9uIF9yZWdpc3Rlckhvc3QoZSl7aWYoZS5fc29ydGluZ0lkKXtyZXR1cm59ZS5fc29ydGluZ0lkPVwic2hhZG93LVwiK3RoaXMuaG9zdENvdW50ZXIrKzt0aGlzLmhvc3RzW2UuX3NvcnRpbmdJZF09ZTt2YXIgdD1nZXRTaGFkb3dIb3N0KHtjb250ZXh0OmV9KTtpZih0KXt0aGlzLl9yZWdpc3Rlckhvc3QodCk7dGhpcy5fcmVnaXN0ZXJIb3N0UGFyZW50KGUsdCl9ZWxzZXt0aGlzLmluRG9jdW1lbnQucHVzaChlKX19fSx7a2V5OlwiX3JlZ2lzdGVySG9zdFBhcmVudFwiLHZhbHVlOmZ1bmN0aW9uIF9yZWdpc3Rlckhvc3RQYXJlbnQoZSx0KXtpZighdGhpcy5pbkhvc3RbdC5fc29ydGluZ0lkXSl7dGhpcy5pbkhvc3RbdC5fc29ydGluZ0lkXT1bXX10aGlzLmluSG9zdFt0Ll9zb3J0aW5nSWRdLnB1c2goZSl9fSx7a2V5OlwiX3JlZ2lzdGVyRWxlbWVudFwiLHZhbHVlOmZ1bmN0aW9uIF9yZWdpc3RlckVsZW1lbnQoZSx0KXtpZighdGhpcy5lbGVtZW50c1t0Ll9zb3J0aW5nSWRdKXt0aGlzLmVsZW1lbnRzW3QuX3NvcnRpbmdJZF09W119dGhpcy5lbGVtZW50c1t0Ll9zb3J0aW5nSWRdLnB1c2goZSl9fSx7a2V5OlwiZXh0cmFjdEVsZW1lbnRzXCIsdmFsdWU6ZnVuY3Rpb24gZXh0cmFjdEVsZW1lbnRzKGUpe3JldHVybiBlLmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHQ9Z2V0U2hhZG93SG9zdCh7Y29udGV4dDplfSk7aWYoIXQpe3JldHVybiB0cnVlfXRoaXMuX3JlZ2lzdGVySG9zdCh0KTt0aGlzLl9yZWdpc3RlckVsZW1lbnQoZSx0KTtyZXR1cm4gZmFsc2V9KSx0aGlzKX19LHtrZXk6XCJzb3J0XCIsdmFsdWU6ZnVuY3Rpb24gc29ydChlKXt2YXIgdD10aGlzLl9pbmplY3RIb3N0cyhlKTt0PXRoaXMuX3JlcGxhY2VIb3N0cyh0KTt0aGlzLl9jbGVhbnVwKCk7cmV0dXJuIHR9fSx7a2V5OlwiX2luamVjdEhvc3RzXCIsdmFsdWU6ZnVuY3Rpb24gX2luamVjdEhvc3RzKGUpe09iamVjdC5rZXlzKHRoaXMuaG9zdHMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZWxlbWVudHNbZV07dmFyIHI9dGhpcy5pbkhvc3RbZV07dmFyIG49dGhpcy5ob3N0c1tlXS5zaGFkb3dSb290O3RoaXMuZWxlbWVudHNbZV09dGhpcy5fbWVyZ2UodCxyLG4pfSksdGhpcyk7cmV0dXJuIHRoaXMuX21lcmdlKGUsdGhpcy5pbkRvY3VtZW50LHRoaXMuY29udGV4dCl9fSx7a2V5OlwiX21lcmdlXCIsdmFsdWU6ZnVuY3Rpb24gX21lcmdlKGUsdCxyKXt2YXIgbj1tZXJnZUluRG9tT3JkZXIoe2xpc3Q6ZSxlbGVtZW50czp0fSk7cmV0dXJuIHRoaXMuc29ydEVsZW1lbnRzKG4scil9fSx7a2V5OlwiX3JlcGxhY2VIb3N0c1wiLHZhbHVlOmZ1bmN0aW9uIF9yZXBsYWNlSG9zdHMoZSl7cmV0dXJuIG1lcmdlSW5Eb21PcmRlcih7bGlzdDplLGVsZW1lbnRzOnRoaXMuaW5Eb2N1bWVudCxyZXNvbHZlRWxlbWVudDp0aGlzLl9yZXNvbHZlSG9zdEVsZW1lbnQuYmluZCh0aGlzKX0pfX0se2tleTpcIl9yZXNvbHZlSG9zdEVsZW1lbnRcIix2YWx1ZTpmdW5jdGlvbiBfcmVzb2x2ZUhvc3RFbGVtZW50KGUpe3ZhciB0PW1lcmdlSW5Eb21PcmRlcih7bGlzdDp0aGlzLmVsZW1lbnRzW2UuX3NvcnRpbmdJZF0sZWxlbWVudHM6dGhpcy5pbkhvc3RbZS5fc29ydGluZ0lkXSxyZXNvbHZlRWxlbWVudDp0aGlzLl9yZXNvbHZlSG9zdEVsZW1lbnQuYmluZCh0aGlzKX0pO3ZhciByPXRhYmluZGV4VmFsdWUoZSk7aWYociE9PW51bGwmJnI+LTEpe3JldHVybltlXS5jb25jYXQodCl9cmV0dXJuIHR9fSx7a2V5OlwiX2NsZWFudXBcIix2YWx1ZTpmdW5jdGlvbiBfY2xlYW51cCgpe09iamVjdC5rZXlzKHRoaXMuaG9zdHMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmhvc3RzW2VdLl9zb3J0aW5nSWR9KSx0aGlzKX19XSk7cmV0dXJuIFNoYWRvd3N9KCk7ZnVuY3Rpb24gc29ydFNoYWRvd2VkKGUsdCxyKXt2YXIgbj1uZXcgVmUodCxyKTt2YXIgbz1uLmV4dHJhY3RFbGVtZW50cyhlKTtpZihvLmxlbmd0aD09PWUubGVuZ3RoKXtyZXR1cm4gcihlKX1yZXR1cm4gbi5zb3J0KG8pfWZ1bmN0aW9uIHNvcnRUYWJpbmRleChlKXt2YXIgdD17fTt2YXIgcj1bXTt2YXIgbj1lLmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIG49ZS50YWJJbmRleDtpZihuPT09dW5kZWZpbmVkKXtuPXRhYmluZGV4VmFsdWUoZSl9aWYobjw9MHx8bj09PW51bGx8fG49PT11bmRlZmluZWQpe3JldHVybiB0cnVlfWlmKCF0W25dKXt0W25dPVtdO3IucHVzaChuKX10W25dLnB1c2goZSk7cmV0dXJuIGZhbHNlfSkpO3ZhciBvPXIuc29ydCgpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSkucmVkdWNlUmlnaHQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuY29uY2F0KGUpfSksbik7cmV0dXJuIG99dmFyICRlPXZvaWQgMDtmdW5jdGlvbiBtb3ZlQ29udGV4dFRvQmVnaW5uaW5nKGUsdCl7dmFyIHI9ZS5pbmRleE9mKHQpO2lmKHI+MCl7dmFyIG49ZS5zcGxpY2UociwxKTtyZXR1cm4gbi5jb25jYXQoZSl9cmV0dXJuIGV9ZnVuY3Rpb24gc29ydEVsZW1lbnRzKGUsdCl7aWYoJGUudGFic2VxdWVuY2VBcmVhQXRJbWdQb3NpdGlvbil7ZT1zb3J0QXJlYShlLHQpfWU9c29ydFRhYmluZGV4KGUpO3JldHVybiBlfWZ1bmN0aW9uIHF1ZXJ5VGFic2VxdWVuY2UoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXVuZGVmaW5lZD9hcmd1bWVudHNbMF06e30sdD1lLmNvbnRleHQscj1lLmluY2x1ZGVDb250ZXh0LG49ZS5pbmNsdWRlT25seVRhYmJhYmxlLG89ZS5zdHJhdGVneTtpZighJGUpeyRlPV9zdXBwb3J0cygpfXZhciBhPW5vZGVBcnJheSh0KVswXXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3ZhciBpPXF1ZXJ5VGFiYmFibGUoe2NvbnRleHQ6YSxpbmNsdWRlQ29udGV4dDpyLGluY2x1ZGVPbmx5VGFiYmFibGU6bixzdHJhdGVneTpvfSk7aWYoZG9jdW1lbnQuYm9keS5jcmVhdGVTaGFkb3dSb290JiZsLmlzLkJMSU5LKXtpPXNvcnRTaGFkb3dlZChpLGEsc29ydEVsZW1lbnRzKX1lbHNle2k9c29ydEVsZW1lbnRzKGksYSl9aWYocil7aT1tb3ZlQ29udGV4dFRvQmVnaW5uaW5nKGksYSl9cmV0dXJuIGl9dmFyIHFlPXt0YWI6OSxsZWZ0OjM3LHVwOjM4LHJpZ2h0OjM5LGRvd246NDAscGFnZVVwOjMzLFwicGFnZS11cFwiOjMzLHBhZ2VEb3duOjM0LFwicGFnZS1kb3duXCI6MzQsZW5kOjM1LGhvbWU6MzYsZW50ZXI6MTMsZXNjYXBlOjI3LHNwYWNlOjMyLHNoaWZ0OjE2LGNhcHNMb2NrOjIwLFwiY2Fwcy1sb2NrXCI6MjAsY3RybDoxNyxhbHQ6MTgsbWV0YTo5MSxwYXVzZToxOSxpbnNlcnQ6NDUsZGVsZXRlOjQ2LGJhY2tzcGFjZTo4LF9hbGlhczp7OTE6WzkyLDkzLDIyNF19fTtmb3IodmFyIFVlPTE7VWU8MjY7VWUrKyl7cWVbXCJmXCIrVWVdPVVlKzExMX1mb3IodmFyIEtlPTA7S2U8MTA7S2UrKyl7dmFyIEdlPUtlKzQ4O3ZhciBaZT1LZSs5NjtxZVtLZV09R2U7cWVbXCJudW0tXCIrS2VdPVplO3FlLl9hbGlhc1tHZV09W1plXX1mb3IodmFyIFllPTA7WWU8MjY7WWUrKyl7dmFyIEplPVllKzY1O3ZhciBYZT1TdHJpbmcuZnJvbUNoYXJDb2RlKEplKS50b0xvd2VyQ2FzZSgpO3FlW1hlXT1KZX12YXIgUWU9e2FsdDpcImFsdEtleVwiLGN0cmw6XCJjdHJsS2V5XCIsbWV0YTpcIm1ldGFLZXlcIixzaGlmdDpcInNoaWZ0S2V5XCJ9O3ZhciBldD1PYmplY3Qua2V5cyhRZSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gUWVbZV19KSk7ZnVuY3Rpb24gY3JlYXRlRXhwZWN0ZWRNb2RpZmllcnMoZSl7dmFyIHQ9ZT9udWxsOmZhbHNlO3JldHVybnthbHRLZXk6dCxjdHJsS2V5OnQsbWV0YUtleTp0LHNoaWZ0S2V5OnR9fWZ1bmN0aW9uIHJlc29sdmVNb2RpZmllcnMoZSl7dmFyIHQ9ZS5pbmRleE9mKFwiKlwiKSE9PS0xO3ZhciByPWNyZWF0ZUV4cGVjdGVkTW9kaWZpZXJzKHQpO2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZT09PVwiKlwiKXtyZXR1cm59dmFyIHQ9dHJ1ZTt2YXIgbj1lLnNsaWNlKDAsMSk7aWYobj09PVwiP1wiKXt0PW51bGx9ZWxzZSBpZihuPT09XCIhXCIpe3Q9ZmFsc2V9aWYodCE9PXRydWUpe2U9ZS5zbGljZSgxKX12YXIgbz1RZVtlXTtpZighbyl7dGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBtb2RpZmllciBcIicrZSsnXCInKX1yW29dPXR9KSk7cmV0dXJuIHJ9ZnVuY3Rpb24gcmVzb2x2ZUtleShlKXt2YXIgdD1xZVtlXXx8cGFyc2VJbnQoZSwxMCk7aWYoIXR8fHR5cGVvZiB0IT09XCJudW1iZXJcInx8aXNOYU4odCkpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24ga2V5IFwiJytlKydcIicpfXJldHVyblt0XS5jb25jYXQocWUuX2FsaWFzW3RdfHxbXSl9ZnVuY3Rpb24gbWF0Y2hNb2RpZmllcnMoZSx0KXtyZXR1cm4hZXQuc29tZSgoZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiBlW3JdPT09XCJib29sZWFuXCImJkJvb2xlYW4odFtyXSkhPT1lW3JdfSkpfWZ1bmN0aW9uIGtleUJpbmRpbmcoZSl7cmV0dXJuIGUuc3BsaXQoL1xccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuc3BsaXQoXCIrXCIpO3ZhciByPXJlc29sdmVNb2RpZmllcnModC5zbGljZSgwLC0xKSk7dmFyIG49cmVzb2x2ZUtleSh0LnNsaWNlKC0xKSk7cmV0dXJue2tleUNvZGVzOm4sbW9kaWZpZXJzOnIsbWF0Y2hNb2RpZmllcnM6bWF0Y2hNb2RpZmllcnMuYmluZChudWxsLHIpfX0pKX1mdW5jdGlvbiBnZXRQYXJlbnRDb21wYXJhdG9yKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT11bmRlZmluZWQ/YXJndW1lbnRzWzBdOnt9LHQ9ZS5wYXJlbnQscj1lLmVsZW1lbnQsbj1lLmluY2x1ZGVTZWxmO2lmKHQpe3JldHVybiBmdW5jdGlvbiBpc0NoaWxkT2YoZSl7cmV0dXJuIEJvb2xlYW4obiYmZT09PXR8fHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpfX1lbHNlIGlmKHIpe3JldHVybiBmdW5jdGlvbiBpc1BhcmVudE9mKGUpe3JldHVybiBCb29sZWFuKG4mJnI9PT1lfHxlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKX19dGhyb3cgbmV3IFR5cGVFcnJvcihcInV0aWwvY29tcGFyZS1wb3NpdGlvbiNnZXRQYXJlbnRDb21wYXJhdG9yIHJlcXVpcmVkIGVpdGhlciBvcHRpb25zLnBhcmVudCBvciBvcHRpb25zLmVsZW1lbnRcIil9ZnVuY3Rpb24gd2hlbktleSgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dW5kZWZpbmVkP2FyZ3VtZW50c1swXTp7fTt2YXIgdD17fTt2YXIgcj1ub2RlQXJyYXkoZS5jb250ZXh0KVswXXx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2RlbGV0ZSBlLmNvbnRleHQ7dmFyIG49bm9kZUFycmF5KGUuZmlsdGVyKTtkZWxldGUgZS5maWx0ZXI7dmFyIG89T2JqZWN0LmtleXMoZSk7aWYoIW8ubGVuZ3RoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwid2hlbi9rZXkgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG9wdGlvbiBrZXlcIil9dmFyIGE9ZnVuY3Rpb24gcmVnaXN0ZXJCaW5kaW5nKGUpe2Uua2V5Q29kZXMuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYoIXRbcl0pe3Rbcl09W119dFtyXS5wdXNoKGUpfSkpfTtvLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKHR5cGVvZiBlW3RdIT09XCJmdW5jdGlvblwiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCd3aGVuL2tleSByZXF1aXJlcyBvcHRpb25bXCInK3QrJ1wiXSB0byBiZSBhIGZ1bmN0aW9uJyl9dmFyIHI9ZnVuY3Rpb24gYWRkQ2FsbGJhY2socil7ci5jYWxsYmFjaz1lW3RdO3JldHVybiByfTtrZXlCaW5kaW5nKHQpLm1hcChyKS5mb3JFYWNoKGEpfSkpO3ZhciBpPWZ1bmN0aW9uIGhhbmRsZUtleURvd24oZSl7aWYoZS5kZWZhdWx0UHJldmVudGVkKXtyZXR1cm59aWYobi5sZW5ndGgpe3ZhciBvPWdldFBhcmVudENvbXBhcmF0b3Ioe2VsZW1lbnQ6ZS50YXJnZXQsaW5jbHVkZVNlbGY6dHJ1ZX0pO2lmKG4uc29tZShvKSl7cmV0dXJufX12YXIgYT1lLmtleUNvZGV8fGUud2hpY2g7aWYoIXRbYV0pe3JldHVybn10W2FdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCF0Lm1hdGNoTW9kaWZpZXJzKGUpKXtyZXR1cm59dC5jYWxsYmFjay5jYWxsKHIsZSxzKX0pKX07ci5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGksZmFsc2UpO3ZhciBzPWZ1bmN0aW9uIGRpc2VuZ2FnZSgpe3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixpLGZhbHNlKX07cmV0dXJue2Rpc2VuZ2FnZTpzfX1mdW5jdGlvbiBkZWZhdWx0XzEoe2NvbnRleHQ6ZX09e30pe2lmKCFlKXtlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1xdWVyeVRhYnNlcXVlbmNlKCk7cmV0dXJuIHdoZW5LZXkoe1wiP2FsdCs/c2hpZnQrdGFiXCI6ZnVuY3Rpb24gYWx0U2hpZnRUYWIodCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciByPXF1ZXJ5VGFic2VxdWVuY2Uoe2NvbnRleHQ6ZX0pO3ZhciBuPXQuc2hpZnRLZXk7dmFyIG89clswXTt2YXIgYT1yW3IubGVuZ3RoLTFdO3ZhciBpPW4/bzphO3ZhciBzPW4/YTpvO2lmKGlzQWN0aXZlRWxlbWVudChpKSl7cy5mb2N1cygpO3JldHVybn12YXIgbD12b2lkIDA7dmFyIHU9ci5zb21lKChmdW5jdGlvbihlLHQpe2lmKCFpc0FjdGl2ZUVsZW1lbnQoZSkpe3JldHVybiBmYWxzZX1sPXQ7cmV0dXJuIHRydWV9KSk7aWYoIXUpe28uZm9jdXMoKTtyZXR1cm59dmFyIGM9bj8tMToxO3JbbCtjXS5mb2N1cygpfX0pfXRbXCJkZWZhdWx0XCJdPWRlZmF1bHRfMX0sOTkzOmZ1bmN0aW9uKGUsdCxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3Quc3R5bGVzPXZvaWQgMDtjb25zdCBuPXIoODkxMCk7Y29uc3Qgbz0oMCxuLm5vb3ApYFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLW92ZXJsYXldIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIHotaW5kZXg6IDkwMDA7XG5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgcGFkZGluZzogMTB2aCAxNXB4IDA7XG4gIH1cblxuICBAbWVkaWEgKG1heC1oZWlnaHQ6IDgxMnB4KSB7XG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XSB7XG4gICAgICBwYWRkaW5nOiAxNXB4IDE1cHggMDtcbiAgICB9XG4gIH1cblxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wXSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZHJvcCk7XG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcbiAgICB6LWluZGV4OiAtMTtcbiAgfVxuXG4gIFtkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3AtZml4ZWRdIHtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XG4gIH1cbmA7dC5zdHlsZXM9b30sNjMzODpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKG49PT11bmRlZmluZWQpbj1yO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTtpZighb3x8KFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpKXtvPXtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbcl19fX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLG8pfTpmdW5jdGlvbihlLHQscixuKXtpZihuPT09dW5kZWZpbmVkKW49cjtlW25dPXRbcl19KTt2YXIgbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTp0cnVlLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlW1wiZGVmYXVsdFwiXT10fSk7dmFyIGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBlKWlmKHIhPT1cImRlZmF1bHRcIiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikpbih0LGUscik7byh0LGUpO3JldHVybiB0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuU2hhZG93UG9ydGFsPXZvaWQgMDtjb25zdCBpPXIoNTA1KTtjb25zdCBzPWEocig3NTIyKSk7Y29uc3QgbD1yKDIyNTUpO2NvbnN0IHU9ZnVuY3Rpb24gUG9ydGFsKHtjaGlsZHJlbjplLGdsb2JhbE92ZXJsYXk6dH0pe2xldCByPXMudXNlUmVmKG51bGwpO2xldCBuPXMudXNlUmVmKG51bGwpO2xldCBvPXMudXNlUmVmKG51bGwpO2xldFssYV09cy51c2VTdGF0ZSgpO3MudXNlTGF5b3V0RWZmZWN0KCgoKT0+e2NvbnN0IGU9dD9kb2N1bWVudDpyLmN1cnJlbnQub3duZXJEb2N1bWVudDtuLmN1cnJlbnQ9ZS5jcmVhdGVFbGVtZW50KFwibmV4dGpzLXBvcnRhbFwiKTtvLmN1cnJlbnQ9bi5jdXJyZW50LmF0dGFjaFNoYWRvdyh7bW9kZTpcIm9wZW5cIn0pO2UuYm9keS5hcHBlbmRDaGlsZChuLmN1cnJlbnQpO2Eoe30pO3JldHVybigpPT57aWYobi5jdXJyZW50JiZuLmN1cnJlbnQub3duZXJEb2N1bWVudCl7bi5jdXJyZW50Lm93bmVyRG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChuLmN1cnJlbnQpfX19KSxbdF0pO3JldHVybiBvLmN1cnJlbnQ/KDAsbC5jcmVhdGVQb3J0YWwpKGUsby5jdXJyZW50KTp0P251bGw6KDAsaS5qc3gpKFwic3BhblwiLHtyZWY6cn0pfTt0LlNoYWRvd1BvcnRhbD11fSw3MjE1OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LHIsbil7aWYobj09PXVuZGVmaW5lZCluPXI7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpO2lmKCFvfHwoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSkpe289e2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtyXX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sbyl9OmZ1bmN0aW9uKGUsdCxyLG4pe2lmKG49PT11bmRlZmluZWQpbj1yO2Vbbl09dFtyXX0pO3ZhciBvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOnRydWUsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2VbXCJkZWZhdWx0XCJdPXR9KTt2YXIgYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKGUhPW51bGwpZm9yKHZhciByIGluIGUpaWYociE9PVwiZGVmYXVsdFwiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSluKHQsZSxyKTtvKHQsZSk7cmV0dXJuIHR9O3ZhciBpPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5UZXJtaW5hbD12b2lkIDA7Y29uc3Qgcz1yKDUwNSk7Y29uc3QgbD1pKHIoNzk5NykpO2NvbnN0IHU9YShyKDc1MjIpKTtjb25zdCBjPWZ1bmN0aW9uIFRlcm1pbmFsKHtjb250ZW50OmV9KXtjb25zdCB0PXUudXNlTWVtbygoKCk9PmwuZGVmYXVsdC5hbnNpVG9Kc29uKGUse2pzb246dHJ1ZSx1c2VfY2xhc3Nlczp0cnVlLHJlbW92ZV9lbXB0eTp0cnVlfSkpLFtlXSk7cmV0dXJuKDAscy5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtdGVybWluYWxcIjp0cnVlLGNoaWxkcmVuOigwLHMuanN4KShcInByZVwiLHtjaGlsZHJlbjp0Lm1hcCgoKGUsdCk9PigwLHMuanN4KShcInNwYW5cIix7c3R5bGU6e2NvbG9yOmUuZmc/YHZhcigtLWNvbG9yLSR7ZS5mZ30pYDp1bmRlZmluZWQsLi4uZS5kZWNvcmF0aW9uPT09XCJib2xkXCI/e2ZvbnRXZWlnaHQ6ODAwfTplLmRlY29yYXRpb249PT1cIml0YWxpY1wiP3tmb250U3R5bGU6XCJpdGFsaWNcIn06dW5kZWZpbmVkfSxjaGlsZHJlbjplLmNvbnRlbnR9LGB0ZXJtaW5hbC1lbnRyeS0ke3R9YCkpKX0pfSl9O3QuVGVybWluYWw9Y30sODIzNjpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlRlcm1pbmFsPXZvaWQgMDt2YXIgbj1yKDcyMTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiVGVybWluYWxcIix7ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlRlcm1pbmFsfX0pfSw1NDg4OmZ1bmN0aW9uKGUsdCxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3Quc3R5bGVzPXZvaWQgMDtjb25zdCBuPXIoODkxMCk7Y29uc3Qgbz0oMCxuLm5vb3ApYFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdIHtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zaXplLWdhcC1oYWxmKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLWJnKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1mZyk7XG4gIH1cbiAgW2RhdGEtbmV4dGpzLXRlcm1pbmFsXTo6c2VsZWN0aW9uLFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdICo6OnNlbGVjdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1zZWxlY3Rpb24pO1xuICB9XG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gKiB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcbiAgfVxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdID4gKiB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IGNhbGModmFyKC0tc2l6ZS1nYXApICsgdmFyKC0tc2l6ZS1nYXAtaGFsZikpXG4gICAgICBjYWxjKHZhcigtLXNpemUtZ2FwLWRvdWJsZSkgKyB2YXIoLS1zaXplLWdhcC1oYWxmKSk7XG4gIH1cblxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdIHByZSB7XG4gICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gIH1cbmA7dC5zdHlsZXM9b30sOTY4MzpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlRvYXN0PXZvaWQgMDtjb25zdCBuPXIoNTA1KTtjb25zdCBvPWZ1bmN0aW9uIFRvYXN0KHtvbkNsaWNrOmUsY2hpbGRyZW46dCxjbGFzc05hbWU6cn0pe3JldHVybigwLG4uanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLXRvYXN0XCI6dHJ1ZSxvbkNsaWNrOmUsY2xhc3NOYW1lOnIsY2hpbGRyZW46KDAsbi5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtdG9hc3Qtd3JhcHBlclwiOnRydWUsY2hpbGRyZW46dH0pfSl9O3QuVG9hc3Q9b30sMTEyMDpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LlRvYXN0PXQuc3R5bGVzPXZvaWQgMDt2YXIgbj1yKDIwNjkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwic3R5bGVzXCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5zdHlsZXN9fSk7dmFyIG89cig5NjgzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIlRvYXN0XCIse2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Ub2FzdH19KX0sMjA2OTpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LnN0eWxlcz12b2lkIDA7Y29uc3Qgbj1yKDg5MTApO2NvbnN0IG89KDAsbi5ub29wKWBcbiAgW2RhdGEtbmV4dGpzLXRvYXN0XSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGJvdHRvbTogdmFyKC0tc2l6ZS1nYXAtZG91YmxlKTtcbiAgICBsZWZ0OiB2YXIoLS1zaXplLWdhcC1kb3VibGUpO1xuICAgIG1heC13aWR0aDogNDIwcHg7XG4gICAgei1pbmRleDogOTAwMDtcbiAgfVxuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA0NDBweCkge1xuICAgIFtkYXRhLW5leHRqcy10b2FzdF0ge1xuICAgICAgbWF4LXdpZHRoOiA5MHZ3O1xuICAgICAgbGVmdDogNXZ3O1xuICAgIH1cbiAgfVxuXG4gIFtkYXRhLW5leHRqcy10b2FzdC13cmFwcGVyXSB7XG4gICAgcGFkZGluZzogMTZweDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1zaXplLWdhcC1oYWxmKTtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLWJyaWdodC13aGl0ZSk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xuICAgIGJveC1zaGFkb3c6IDBweCB2YXIoLS1zaXplLWdhcC1kb3VibGUpIHZhcigtLXNpemUtZ2FwLXF1YWQpXG4gICAgICByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICB9XG5gO3Quc3R5bGVzPW99LDU5MzY6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQscixuKXtpZihuPT09dW5kZWZpbmVkKW49cjt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik7aWYoIW98fChcImdldFwiaW4gbz8hdC5fX2VzTW9kdWxlOm8ud3JpdGFibGV8fG8uY29uZmlndXJhYmxlKSl7bz17ZW51bWVyYWJsZTp0cnVlLGdldDpmdW5jdGlvbigpe3JldHVybiB0W3JdfX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixvKX06ZnVuY3Rpb24oZSx0LHIsbil7aWYobj09PXVuZGVmaW5lZCluPXI7ZVtuXT10W3JdfSk7dmFyIG89dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJkZWZhdWx0XCIse2VudW1lcmFibGU6dHJ1ZSx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZVtcImRlZmF1bHRcIl09dH0pO3ZhciBhPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYoZSE9bnVsbClmb3IodmFyIHIgaW4gZSlpZihyIT09XCJkZWZhdWx0XCImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpKW4odCxlLHIpO28odCxlKTtyZXR1cm4gdH07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LnN0eWxlcz10LkJ1aWxkRXJyb3I9dm9pZCAwO2NvbnN0IGk9cig1MDUpO2NvbnN0IHM9YShyKDc1MjIpKTtjb25zdCBsPXIoNTY1MSk7Y29uc3QgdT1yKDgyNzgpO2NvbnN0IGM9cig4MjM2KTtjb25zdCBkPXIoODkxMCk7Y29uc3QgZj1mdW5jdGlvbiBCdWlsZEVycm9yKHttZXNzYWdlOmV9KXtjb25zdCB0PXMudXNlQ2FsbGJhY2soKCgpPT57fSksW10pO3JldHVybigwLGkuanN4KSh1Lk92ZXJsYXkse2ZpeGVkOnRydWUsY2hpbGRyZW46KDAsaS5qc3gpKGwuRGlhbG9nLHt0eXBlOlwiZXJyb3JcIixcImFyaWEtbGFiZWxsZWRieVwiOlwibmV4dGpzX19jb250YWluZXJfYnVpbGRfZXJyb3JfbGFiZWxcIixcImFyaWEtZGVzY3JpYmVkYnlcIjpcIm5leHRqc19fY29udGFpbmVyX2J1aWxkX2Vycm9yX2Rlc2NcIixvbkNsb3NlOnQsY2hpbGRyZW46KDAsaS5qc3hzKShsLkRpYWxvZ0NvbnRlbnQse2NoaWxkcmVuOlsoMCxpLmpzeCkobC5EaWFsb2dIZWFkZXIse2NsYXNzTmFtZTpcIm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItaGVhZGVyXCIsY2hpbGRyZW46KDAsaS5qc3gpKFwiaDRcIix7aWQ6XCJuZXh0anNfX2NvbnRhaW5lcl9idWlsZF9lcnJvcl9sYWJlbFwiLGNoaWxkcmVuOlwiRmFpbGVkIHRvIGNvbXBpbGVcIn0pfSksKDAsaS5qc3hzKShsLkRpYWxvZ0JvZHkse2NsYXNzTmFtZTpcIm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItYm9keVwiLGNoaWxkcmVuOlsoMCxpLmpzeCkoYy5UZXJtaW5hbCx7Y29udGVudDplfSksKDAsaS5qc3gpKFwiZm9vdGVyXCIse2NoaWxkcmVuOigwLGkuanN4KShcInBcIix7aWQ6XCJuZXh0anNfX2NvbnRhaW5lcl9idWlsZF9lcnJvcl9kZXNjXCIsY2hpbGRyZW46KDAsaS5qc3gpKFwic21hbGxcIix7Y2hpbGRyZW46XCJUaGlzIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgY2FuIG9ubHkgYmUgZGlzbWlzc2VkIGJ5IGZpeGluZyB0aGUgZXJyb3IuXCJ9KX0pfSldfSldfSl9KX0pfTt0LkJ1aWxkRXJyb3I9Zjt0LnN0eWxlcz0oMCxkLm5vb3ApYFxuICAubmV4dGpzLWNvbnRhaW5lci1idWlsZC1lcnJvci1oZWFkZXIgPiBoNCB7XG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLWJvZHkgZm9vdGVyIHtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLWdhcCk7XG4gIH1cbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItYm9keSBmb290ZXIgcCB7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItYm9keSBzbWFsbCB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWZvbnQpO1xuICB9XG5gfSw0MzU1OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LHIsbil7aWYobj09PXVuZGVmaW5lZCluPXI7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpO2lmKCFvfHwoXCJnZXRcImluIG8/IXQuX19lc01vZHVsZTpvLndyaXRhYmxlfHxvLmNvbmZpZ3VyYWJsZSkpe289e2VudW1lcmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtyXX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4sbyl9OmZ1bmN0aW9uKGUsdCxyLG4pe2lmKG49PT11bmRlZmluZWQpbj1yO2Vbbl09dFtyXX0pO3ZhciBvPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOnRydWUsdmFsdWU6dH0pfTpmdW5jdGlvbihlLHQpe2VbXCJkZWZhdWx0XCJdPXR9KTt2YXIgYT10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKGUhPW51bGwpZm9yKHZhciByIGluIGUpaWYociE9PVwiZGVmYXVsdFwiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSluKHQsZSxyKTtvKHQsZSk7cmV0dXJuIHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5zdHlsZXM9dC5FcnJvcnM9dm9pZCAwO2NvbnN0IGk9cig1MDUpO2NvbnN0IHM9YShyKDc1MjIpKTtjb25zdCBsPXIoNTg1MSk7Y29uc3QgdT1yKDU2NTEpO2NvbnN0IGM9cigyNzMyKTtjb25zdCBkPXIoODI3OCk7Y29uc3QgZj1yKDExMjApO2NvbnN0IHA9cig0MDMpO2NvbnN0IG09cig1MjMzKTtjb25zdCB2PXIoODkxMCk7Y29uc3QgYj1yKDg2NSk7Y29uc3QgZz1yKDI0ODQpO2Z1bmN0aW9uIGdldEVycm9yU2lnbmF0dXJlKGUpe2NvbnN0e2V2ZW50OnR9PWU7c3dpdGNoKHQudHlwZSl7Y2FzZSBsLlRZUEVfVU5IQU5ETEVEX0VSUk9SOmNhc2UgbC5UWVBFX1VOSEFORExFRF9SRUpFQ1RJT046e3JldHVybmAke3QucmVhc29uLm5hbWV9Ojoke3QucmVhc29uLm1lc3NhZ2V9Ojoke3QucmVhc29uLnN0YWNrfWB9ZGVmYXVsdDp7fX1jb25zdCByPXQ7cmV0dXJuXCJcIn1jb25zdCBoPWZ1bmN0aW9uIEhvdGxpbmtlZFRleHQoZSl7Y29uc3R7dGV4dDp0fT1lO2NvbnN0IHI9L2h0dHBzPzpcXC9cXC9bXlxccy8kLj8jXS5bXlxccyknXCJdKi9pO3JldHVybigwLGkuanN4KShpLkZyYWdtZW50LHtjaGlsZHJlbjpyLnRlc3QodCk/dC5zcGxpdChcIiBcIikubWFwKCgoZSx0LG4pPT57aWYoci50ZXN0KGUpKXtjb25zdCBvPXIuZXhlYyhlKTtyZXR1cm4oMCxpLmpzeHMpKHMuRnJhZ21lbnQse2NoaWxkcmVuOltvJiYoMCxpLmpzeCkoXCJhXCIse2hyZWY6b1swXSx0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub3JlZmVycmVyIG5vb3BlbmVyXCIsY2hpbGRyZW46ZX0pLHQ9PT1uLmxlbmd0aC0xP1wiXCI6XCIgXCJdfSxgbGluay0ke3R9YCl9cmV0dXJuIHQ9PT1uLmxlbmd0aC0xPygwLGkuanN4KShzLkZyYWdtZW50LHtjaGlsZHJlbjplfSxgdGV4dC0ke3R9YCk6KDAsaS5qc3hzKShzLkZyYWdtZW50LHtjaGlsZHJlbjpbZSxcIiBcIl19LGB0ZXh0LSR7dH1gKX0pKTp0fSl9O2NvbnN0IHk9ZnVuY3Rpb24gRXJyb3JzKHtlcnJvcnM6ZX0pe2NvbnN0W3Qscl09cy51c2VTdGF0ZSh7fSk7Y29uc3RbbixvXT1zLnVzZU1lbW8oKCgpPT57bGV0IHI9W107bGV0IG49bnVsbDtmb3IobGV0IG89MDtvPGUubGVuZ3RoOysrbyl7Y29uc3QgYT1lW29dO2NvbnN0e2lkOml9PWE7aWYoaSBpbiB0KXtyLnB1c2godFtpXSk7Y29udGludWV9aWYobz4wKXtjb25zdCB0PWVbby0xXTtpZihnZXRFcnJvclNpZ25hdHVyZSh0KT09PWdldEVycm9yU2lnbmF0dXJlKGEpKXtjb250aW51ZX19bj1hO2JyZWFrfXJldHVybltyLG5dfSksW2UsdF0pO2NvbnN0IGE9cy51c2VNZW1vKCgoKT0+bi5sZW5ndGg8MSYmQm9vbGVhbihlLmxlbmd0aCkpLFtlLmxlbmd0aCxuLmxlbmd0aF0pO3MudXNlRWZmZWN0KCgoKT0+e2lmKG89PW51bGwpe3JldHVybn1sZXQgZT10cnVlOygwLHAuZ2V0RXJyb3JCeVR5cGUpKG8pLnRoZW4oKHQ9PntpZihlKXtyKChlPT4oey4uLmUsW3QuaWRdOnR9KSkpfX0pLCgoKT0+e30pKTtyZXR1cm4oKT0+e2U9ZmFsc2V9fSksW29dKTtjb25zdFtsLHZdPXMudXNlU3RhdGUoXCJmdWxsc2NyZWVuXCIpO2NvbnN0W3kseF09cy51c2VTdGF0ZSgwKTtjb25zdCBfPXMudXNlQ2FsbGJhY2soKGU9PntlPy5wcmV2ZW50RGVmYXVsdCgpO3goKGU9Pk1hdGgubWF4KDAsZS0xKSkpfSksW10pO2NvbnN0IHc9cy51c2VDYWxsYmFjaygoZT0+e2U/LnByZXZlbnREZWZhdWx0KCk7eCgoZT0+TWF0aC5tYXgoMCxNYXRoLm1pbihuLmxlbmd0aC0xLGUrMSkpKSl9KSxbbi5sZW5ndGhdKTtjb25zdCBFPXMudXNlTWVtbygoKCk9Pm5beV0/P251bGwpLFt5LG5dKTtzLnVzZUVmZmVjdCgoKCk9PntpZihlLmxlbmd0aDwxKXtyKHt9KTt2KFwiaGlkZGVuXCIpO3goMCl9fSksW2UubGVuZ3RoXSk7Y29uc3Qgaj1zLnVzZUNhbGxiYWNrKChlPT57ZT8ucHJldmVudERlZmF1bHQoKTt2KFwibWluaW1pemVkXCIpfSksW10pO2NvbnN0IE89cy51c2VDYWxsYmFjaygoZT0+e2U/LnByZXZlbnREZWZhdWx0KCk7dihcImhpZGRlblwiKX0pLFtdKTtjb25zdCBrPXMudXNlQ2FsbGJhY2soKGU9PntlPy5wcmV2ZW50RGVmYXVsdCgpO3YoXCJmdWxsc2NyZWVuXCIpfSksW10pO2lmKGUubGVuZ3RoPDF8fEU9PW51bGwpe3JldHVybiBudWxsfWlmKGEpe3JldHVybigwLGkuanN4KShkLk92ZXJsYXkse30pfWlmKGw9PT1cImhpZGRlblwiKXtyZXR1cm4gbnVsbH1pZihsPT09XCJtaW5pbWl6ZWRcIil7cmV0dXJuKDAsaS5qc3gpKGYuVG9hc3Qse2NsYXNzTmFtZTpcIm5leHRqcy10b2FzdC1lcnJvcnMtcGFyZW50XCIsb25DbGljazprLGNoaWxkcmVuOigwLGkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwibmV4dGpzLXRvYXN0LWVycm9yc1wiLGNoaWxkcmVuOlsoMCxpLmpzeHMpKFwic3ZnXCIse3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix3aWR0aDpcIjI0XCIsaGVpZ2h0OlwiMjRcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixzdHJva2VXaWR0aDpcIjJcIixzdHJva2VMaW5lY2FwOlwicm91bmRcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsY2hpbGRyZW46WygwLGkuanN4KShcImNpcmNsZVwiLHtjeDpcIjEyXCIsY3k6XCIxMlwiLHI6XCIxMFwifSksKDAsaS5qc3gpKFwibGluZVwiLHt4MTpcIjEyXCIseTE6XCI4XCIseDI6XCIxMlwiLHkyOlwiMTJcIn0pLCgwLGkuanN4KShcImxpbmVcIix7eDE6XCIxMlwiLHkxOlwiMTZcIix4MjpcIjEyLjAxXCIseTI6XCIxNlwifSldfSksKDAsaS5qc3hzKShcInNwYW5cIix7Y2hpbGRyZW46W24ubGVuZ3RoLFwiIGVycm9yXCIsbi5sZW5ndGg+MT9cInNcIjpcIlwiXX0pLCgwLGkuanN4KShcImJ1dHRvblwiLHtcImRhdGEtbmV4dGpzLXRvYXN0LWVycm9ycy1oaWRlLWJ1dHRvblwiOnRydWUsY2xhc3NOYW1lOlwibmV4dGpzLXRvYXN0LWVycm9ycy1oaWRlLWJ1dHRvblwiLHR5cGU6XCJidXR0b25cIixvbkNsaWNrOmU9PntlLnN0b3BQcm9wYWdhdGlvbigpO08oKX0sXCJhcmlhLWxhYmVsXCI6XCJIaWRlIEVycm9yc1wiLGNoaWxkcmVuOigwLGkuanN4KShiLkNsb3NlSWNvbix7fSl9KV19KX0pfWNvbnN0IFM9W1wic2VydmVyXCIsXCJlZGdlLXNlcnZlclwiXS5pbmNsdWRlcygoMCxtLmdldEVycm9yU291cmNlKShFLmVycm9yKXx8XCJcIik7cmV0dXJuKDAsaS5qc3gpKGQuT3ZlcmxheSx7Y2hpbGRyZW46KDAsaS5qc3gpKHUuRGlhbG9nLHt0eXBlOlwiZXJyb3JcIixcImFyaWEtbGFiZWxsZWRieVwiOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsXCIsXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzY1wiLG9uQ2xvc2U6Uz91bmRlZmluZWQ6aixjaGlsZHJlbjooMCxpLmpzeHMpKHUuRGlhbG9nQ29udGVudCx7Y2hpbGRyZW46WygwLGkuanN4cykodS5EaWFsb2dIZWFkZXIse2NsYXNzTmFtZTpcIm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlclwiLGNoaWxkcmVuOlsoMCxpLmpzeCkoYy5MZWZ0UmlnaHREaWFsb2dIZWFkZXIse3ByZXZpb3VzOnk+MD9fOm51bGwsbmV4dDp5PG4ubGVuZ3RoLTE/dzpudWxsLGNsb3NlOlM/dW5kZWZpbmVkOmosY2hpbGRyZW46KDAsaS5qc3hzKShcInNtYWxsXCIse2NoaWxkcmVuOlsoMCxpLmpzeCkoXCJzcGFuXCIse2NoaWxkcmVuOnkrMX0pLFwiIG9mXCIsXCIgXCIsKDAsaS5qc3gpKFwic3BhblwiLHtjaGlsZHJlbjpuLmxlbmd0aH0pLFwiIHVuaGFuZGxlZCBlcnJvclwiLG4ubGVuZ3RoPDI/XCJcIjpcInNcIl19KX0pLCgwLGkuanN4KShcImgxXCIse2lkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsXCIsY2hpbGRyZW46Uz9cIlNlcnZlciBFcnJvclwiOlwiVW5oYW5kbGVkIFJ1bnRpbWUgRXJyb3JcIn0pLCgwLGkuanN4cykoXCJwXCIse2lkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2Rlc2NcIixjaGlsZHJlbjpbRS5lcnJvci5uYW1lLFwiOlwiLFwiIFwiLCgwLGkuanN4KShoLHt0ZXh0OkUuZXJyb3IubWVzc2FnZX0pXX0pLFM/KDAsaS5qc3gpKFwiZGl2XCIse2NoaWxkcmVuOigwLGkuanN4KShcInNtYWxsXCIse2NoaWxkcmVuOlwiVGhpcyBlcnJvciBoYXBwZW5lZCB3aGlsZSBnZW5lcmF0aW5nIHRoZSBwYWdlLiBBbnkgY29uc29sZSBsb2dzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSB0ZXJtaW5hbCB3aW5kb3cuXCJ9KX0pOnVuZGVmaW5lZF19KSwoMCxpLmpzeCkodS5EaWFsb2dCb2R5LHtjbGFzc05hbWU6XCJuZXh0anMtY29udGFpbmVyLWVycm9ycy1ib2R5XCIsY2hpbGRyZW46KDAsaS5qc3gpKGcuUnVudGltZUVycm9yLHtlcnJvcjpFfSxFLmlkLnRvU3RyaW5nKCkpfSldfSl9KX0pfTt0LkVycm9ycz15O3Quc3R5bGVzPSgwLHYubm9vcClgXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXIgPiBoMSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLWZvbnQtYmlnKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS1mb250LWJpZ2dlcik7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgbWFyZ2luOiAwO1xuICAgIG1hcmdpbi10b3A6IGNhbGModmFyKC0tc2l6ZS1nYXAtZG91YmxlKSArIHZhcigtLXNpemUtZ2FwLWhhbGYpKTtcbiAgfVxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyIHNtYWxsIHtcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtZm9udC1zbWFsbCk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudHMtMSk7XG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtZ2FwLWRvdWJsZSk7XG4gIH1cbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciBzbWFsbCA+IHNwYW4ge1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XG4gIH1cbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciA+IHAge1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLWZvbnQtc21hbGwpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLWZvbnQtYmlnKTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1nYXAtaGFsZik7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktcmVkKTtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gIH1cbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciA+IGRpdiA+IHNtYWxsIHtcbiAgICBtYXJnaW46IDA7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1nYXAtaGFsZik7XG4gIH1cbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciA+IHAgPiBhIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xuICB9XG5cbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWJvZHkgPiBoMjpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLXRvcDogY2FsYyh2YXIoLS1zaXplLWdhcC1kb3VibGUpICsgdmFyKC0tc2l6ZS1nYXApKTtcbiAgfVxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtYm9keSA+IGgyIHtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLWdhcCk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLWZvbnQtYmlnKTtcbiAgfVxuXG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzLXBhcmVudCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2U7XG4gIH1cbiAgLm5leHRqcy10b2FzdC1lcnJvcnMtcGFyZW50OmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gIH1cbiAgLm5leHRqcy10b2FzdC1lcnJvcnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIH1cbiAgLm5leHRqcy10b2FzdC1lcnJvcnMgPiBzdmcge1xuICAgIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS1nYXApO1xuICB9XG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzLWhpZGUtYnV0dG9uIHtcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1nYXAtdHJpcGxlKTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1icmlnaHQtd2hpdGUpO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjI1cyBlYXNlO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxuICAubmV4dGpzLXRvYXN0LWVycm9ycy1oaWRlLWJ1dHRvbjpob3ZlciB7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuYH0sMjQ4NDpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKG49PT11bmRlZmluZWQpbj1yO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTtpZighb3x8KFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpKXtvPXtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbcl19fX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLG8pfTpmdW5jdGlvbihlLHQscixuKXtpZihuPT09dW5kZWZpbmVkKW49cjtlW25dPXRbcl19KTt2YXIgbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTp0cnVlLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlW1wiZGVmYXVsdFwiXT10fSk7dmFyIGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBlKWlmKHIhPT1cImRlZmF1bHRcIiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikpbih0LGUscik7byh0LGUpO3JldHVybiB0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuUnVudGltZUVycm9yPXQuc3R5bGVzPXZvaWQgMDtjb25zdCBpPXIoNTA1KTtjb25zdCBzPWEocig3NTIyKSk7Y29uc3QgbD1yKDE0MTMpO2NvbnN0IHU9cig4OTEwKTtjb25zdCBjPXIoNzUwNCk7Y29uc3QgZD1mdW5jdGlvbiBDYWxsU3RhY2tGcmFtZSh7ZnJhbWU6ZX0pe2NvbnN0IHQ9ZS5vcmlnaW5hbFN0YWNrRnJhbWU/P2Uuc291cmNlU3RhY2tGcmFtZTtjb25zdCByPUJvb2xlYW4oZS5vcmlnaW5hbENvZGVGcmFtZSk7Y29uc3Qgbj1zLnVzZUNhbGxiYWNrKCgoKT0+e2lmKCFyKXJldHVybjtjb25zdCBlPW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGNvbnN0IHIgaW4gdCl7ZS5hcHBlbmQociwodFtyXT8/XCJcIikudG9TdHJpbmcoKSl9c2VsZi5mZXRjaChgJHtwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIfHxcIlwifS9fX25leHRqc19sYXVuY2gtZWRpdG9yPyR7ZS50b1N0cmluZygpfWApLnRoZW4oKCgpPT57fSksKCgpPT57Y29uc29sZS5lcnJvcihcIlRoZXJlIHdhcyBhbiBpc3N1ZSBvcGVuaW5nIHRoaXMgY29kZSBpbiB5b3VyIGVkaXRvci5cIil9KSl9KSxbcix0XSk7cmV0dXJuKDAsaS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVcIjp0cnVlLGNoaWxkcmVuOlsoMCxpLmpzeCkoXCJoM1wiLHtcImRhdGEtbmV4dGpzLWZyYW1lLWV4cGFuZGVkXCI6Qm9vbGVhbihlLmV4cGFuZGVkKSxjaGlsZHJlbjp0Lm1ldGhvZE5hbWV9KSwoMCxpLmpzeHMpKFwiZGl2XCIse1wiZGF0YS1oYXMtc291cmNlXCI6cj9cInRydWVcIjp1bmRlZmluZWQsdGFiSW5kZXg6cj8xMDp1bmRlZmluZWQscm9sZTpyP1wibGlua1wiOnVuZGVmaW5lZCxvbkNsaWNrOm4sdGl0bGU6cj9cIkNsaWNrIHRvIG9wZW4gaW4geW91ciBlZGl0b3JcIjp1bmRlZmluZWQsY2hpbGRyZW46WygwLGkuanN4KShcInNwYW5cIix7Y2hpbGRyZW46KDAsYy5nZXRGcmFtZVNvdXJjZSkodCl9KSwoMCxpLmpzeHMpKFwic3ZnXCIse3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsZmlsbDpcIm5vbmVcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixzdHJva2VXaWR0aDpcIjJcIixzdHJva2VMaW5lY2FwOlwicm91bmRcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsY2hpbGRyZW46WygwLGkuanN4KShcInBhdGhcIix7ZDpcIk0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2XCJ9KSwoMCxpLmpzeCkoXCJwb2x5bGluZVwiLHtwb2ludHM6XCIxNSAzIDIxIDMgMjEgOVwifSksKDAsaS5qc3gpKFwibGluZVwiLHt4MTpcIjEwXCIseTE6XCIxNFwiLHgyOlwiMjFcIix5MjpcIjNcIn0pXX0pXX0pXX0pfTtjb25zdCBmPWZ1bmN0aW9uIFJ1bnRpbWVFcnJvcih7ZXJyb3I6ZX0pe2NvbnN0IHQ9cy51c2VNZW1vKCgoKT0+ZS5mcmFtZXMuZmluZEluZGV4KChlPT5lLmV4cGFuZGVkJiZCb29sZWFuKGUub3JpZ2luYWxDb2RlRnJhbWUpJiZCb29sZWFuKGUub3JpZ2luYWxTdGFja0ZyYW1lKSkpKSxbZS5mcmFtZXNdKTtjb25zdCByPXMudXNlTWVtbygoKCk9PmUuZnJhbWVzW3RdPz9udWxsKSxbZS5mcmFtZXMsdF0pO2NvbnN0IG49cy51c2VNZW1vKCgoKT0+dDwwP1tdOmUuZnJhbWVzLnNsaWNlKDAsdCkpLFtlLmZyYW1lcyx0XSk7Y29uc3RbbyxhXT1zLnVzZVN0YXRlKHI9PW51bGwpO2NvbnN0IHU9cy51c2VDYWxsYmFjaygoKCk9PnthKChlPT4hZSkpfSksW10pO2NvbnN0IGM9cy51c2VNZW1vKCgoKT0+bi5maWx0ZXIoKGU9PmUuZXhwYW5kZWR8fG8pKSksW28sbl0pO2NvbnN0IGY9cy51c2VNZW1vKCgoKT0+ZS5mcmFtZXMuc2xpY2UodCsxKSksW2UuZnJhbWVzLHRdKTtjb25zdCBwPXMudXNlTWVtbygoKCk9PmYuZmlsdGVyKChlPT5lLmV4cGFuZGVkfHxvKSkpLFtvLGZdKTtjb25zdCBtPXMudXNlTWVtbygoKCk9PmYubGVuZ3RoIT09cC5sZW5ndGh8fG8mJnIhPW51bGwpLFtvLGYubGVuZ3RoLHIscC5sZW5ndGhdKTtyZXR1cm4oMCxpLmpzeHMpKHMuRnJhZ21lbnQse2NoaWxkcmVuOltyPygwLGkuanN4cykocy5GcmFnbWVudCx7Y2hpbGRyZW46WygwLGkuanN4KShcImgyXCIse2NoaWxkcmVuOlwiU291cmNlXCJ9KSxjLm1hcCgoKGUsdCk9PigwLGkuanN4KShkLHtmcmFtZTplfSxgbGVhZGluZy1mcmFtZS0ke3R9LSR7b31gKSkpLCgwLGkuanN4KShsLkNvZGVGcmFtZSx7c3RhY2tGcmFtZTpyLm9yaWdpbmFsU3RhY2tGcmFtZSxjb2RlRnJhbWU6ci5vcmlnaW5hbENvZGVGcmFtZX0pXX0pOnVuZGVmaW5lZCxlLmNvbXBvbmVudFN0YWNrPygwLGkuanN4cykoaS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLGkuanN4KShcImgyXCIse2NoaWxkcmVuOlwiQ29tcG9uZW50IFN0YWNrXCJ9KSxlLmNvbXBvbmVudFN0YWNrLm1hcCgoKGUsdCk9PigwLGkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvbXBvbmVudC1zdGFjay1mcmFtZVwiOnRydWUsY2hpbGRyZW46KDAsaS5qc3gpKFwiaDNcIix7Y2hpbGRyZW46ZX0pfSx0KSkpXX0pOm51bGwscC5sZW5ndGg/KDAsaS5qc3hzKShzLkZyYWdtZW50LHtjaGlsZHJlbjpbKDAsaS5qc3gpKFwiaDJcIix7Y2hpbGRyZW46XCJDYWxsIFN0YWNrXCJ9KSxwLm1hcCgoKGUsdCk9PigwLGkuanN4KShkLHtmcmFtZTplfSxgY2FsbC1zdGFjay0ke3R9LSR7b31gKSkpXX0pOnVuZGVmaW5lZCxtPygwLGkuanN4KShzLkZyYWdtZW50LHtjaGlsZHJlbjooMCxpLmpzeHMpKFwiYnV0dG9uXCIse3RhYkluZGV4OjEwLFwiZGF0YS1uZXh0anMtZGF0YS1ydW50aW1lLWVycm9yLWNvbGxhcHNlZC1hY3Rpb25cIjp0cnVlLHR5cGU6XCJidXR0b25cIixvbkNsaWNrOnUsY2hpbGRyZW46W28/XCJIaWRlXCI6XCJTaG93XCIsXCIgY29sbGFwc2VkIGZyYW1lc1wiXX0pfSk6dW5kZWZpbmVkXX0pfTt0LlJ1bnRpbWVFcnJvcj1mO3Quc3R5bGVzPSgwLHUubm9vcClgXG4gIGJ1dHRvbltkYXRhLW5leHRqcy1kYXRhLXJ1bnRpbWUtZXJyb3ItY29sbGFwc2VkLWFjdGlvbl0ge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLWZvbnQtc21hbGwpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLWZvbnQtYmlnZ2VyKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50cy0zKTtcbiAgfVxuXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lXTpub3QoOmxhc3QtY2hpbGQpLFxuICBbZGF0YS1uZXh0anMtY29tcG9uZW50LXN0YWNrLWZyYW1lXTpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLWdhcC1kb3VibGUpO1xuICB9XG5cbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVdID4gaDMsXG4gIFtkYXRhLW5leHRqcy1jb21wb25lbnQtc3RhY2stZnJhbWVdID4gaDMge1xuICAgIG1hcmdpbi10b3A6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1nYXApO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXN0YWNrLWg2KTtcbiAgfVxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZV0gPiBoM1tkYXRhLW5leHRqcy1mcmFtZS1leHBhbmRlZD0nZmFsc2UnXSB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXN0YWNrLWhlYWRsaW5lKTtcbiAgfVxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZV0gPiBkaXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tc2l6ZS1nYXApICsgdmFyKC0tc2l6ZS1nYXAtaGFsZikpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS1mb250LXNtYWxsKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itc3RhY2stc3VibGluZSk7XG4gIH1cbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVdID4gZGl2ID4gc3ZnIHtcbiAgICB3aWR0aDogYXV0bztcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtZm9udC1zbWFsbCk7XG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtZ2FwKTtcblxuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZV0gPiBkaXZbZGF0YS1oYXMtc291cmNlXSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lXSA+IGRpdltkYXRhLWhhcy1zb3VyY2VdOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XG4gIH1cbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWVdID4gZGl2W2RhdGEtaGFzLXNvdXJjZV0gPiBzdmcge1xuICAgIGRpc3BsYXk6IHVuc2V0O1xuICB9XG5gfSw0MDM6ZnVuY3Rpb24oZSx0LHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5nZXRFcnJvckJ5VHlwZT12b2lkIDA7Y29uc3Qgbj1yKDU4NTEpO2NvbnN0IG89cig1MjMzKTtjb25zdCBhPXIoNzUwNCk7YXN5bmMgZnVuY3Rpb24gZ2V0RXJyb3JCeVR5cGUoZSl7Y29uc3R7aWQ6dCxldmVudDpyfT1lO3N3aXRjaChyLnR5cGUpe2Nhc2Ugbi5UWVBFX1VOSEFORExFRF9FUlJPUjpjYXNlIG4uVFlQRV9VTkhBTkRMRURfUkVKRUNUSU9OOntjb25zdCBlPXtpZDp0LHJ1bnRpbWU6dHJ1ZSxlcnJvcjpyLnJlYXNvbixmcmFtZXM6YXdhaXQoMCxhLmdldE9yaWdpbmFsU3RhY2tGcmFtZXMpKHIuZnJhbWVzLCgwLG8uZ2V0RXJyb3JTb3VyY2UpKHIucmVhc29uKSxyLnJlYXNvbi50b1N0cmluZygpKX07aWYoci50eXBlPT09bi5UWVBFX1VOSEFORExFRF9FUlJPUil7ZS5jb21wb25lbnRTdGFjaz1yLmNvbXBvbmVudFN0YWNrfXJldHVybiBlfWRlZmF1bHQ6e2JyZWFrfX1jb25zdCBpPXI7dGhyb3cgbmV3IEVycm9yKFwidHlwZSBzeXN0ZW0gaW52YXJpYW50IHZpb2xhdGlvblwiKX10LmdldEVycm9yQnlUeXBlPWdldEVycm9yQnlUeXBlfSw1MjMzOmZ1bmN0aW9uKGUsdCxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QuZ2V0U2VydmVyRXJyb3I9dC5kZWNvcmF0ZVNlcnZlckVycm9yPXQuZ2V0RXJyb3JTb3VyY2U9dC5nZXRGaWxlc3lzdGVtRnJhbWU9dm9pZCAwO2NvbnN0IG49cig1OTc0KTtmdW5jdGlvbiBnZXRGaWxlc3lzdGVtRnJhbWUoZSl7Y29uc3QgdD17Li4uZX07aWYodHlwZW9mIHQuZmlsZT09PVwic3RyaW5nXCIpe2lmKHQuZmlsZS5zdGFydHNXaXRoKFwiL1wiKXx8L15bYS16XTpcXFxcL2kudGVzdCh0LmZpbGUpfHx0LmZpbGUuc3RhcnRzV2l0aChcIlxcXFxcXFxcXCIpKXt0LmZpbGU9YGZpbGU6Ly8ke3QuZmlsZX1gfX1yZXR1cm4gdH10LmdldEZpbGVzeXN0ZW1GcmFtZT1nZXRGaWxlc3lzdGVtRnJhbWU7Y29uc3Qgbz1TeW1ib2woXCJOZXh0anNFcnJvclwiKTtmdW5jdGlvbiBnZXRFcnJvclNvdXJjZShlKXtyZXR1cm4gZVtvXXx8bnVsbH10LmdldEVycm9yU291cmNlPWdldEVycm9yU291cmNlO2Z1bmN0aW9uIGRlY29yYXRlU2VydmVyRXJyb3IoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLHt3cml0YWJsZTpmYWxzZSxlbnVtZXJhYmxlOmZhbHNlLGNvbmZpZ3VyYWJsZTpmYWxzZSx2YWx1ZTp0fSl9dC5kZWNvcmF0ZVNlcnZlckVycm9yPWRlY29yYXRlU2VydmVyRXJyb3I7ZnVuY3Rpb24gZ2V0U2VydmVyRXJyb3IoZSx0KXtsZXQgcjt0cnl7dGhyb3cgbmV3IEVycm9yKGUubWVzc2FnZSl9Y2F0Y2goZSl7cj1lfXIubmFtZT1lLm5hbWU7dHJ5e3Iuc3RhY2s9YCR7ci50b1N0cmluZygpfVxcbiR7KDAsbi5wYXJzZSkoZS5zdGFjaykubWFwKGdldEZpbGVzeXN0ZW1GcmFtZSkubWFwKChlPT57bGV0IHQ9YCAgICBhdCAke2UubWV0aG9kTmFtZX1gO2lmKGUuZmlsZSl7bGV0IHI9ZS5maWxlO2lmKGUubGluZU51bWJlcil7cis9YDoke2UubGluZU51bWJlcn1gO2lmKGUuY29sdW1uKXtyKz1gOiR7ZS5jb2x1bW59YH19dCs9YCAoJHtyfSlgfXJldHVybiB0fSkpLmpvaW4oXCJcXG5cIil9YH1jYXRjaHtyLnN0YWNrPWUuc3RhY2t9ZGVjb3JhdGVTZXJ2ZXJFcnJvcihyLHQpO3JldHVybiByfXQuZ2V0U2VydmVyRXJyb3I9Z2V0U2VydmVyRXJyb3J9LDg5MTA6ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3Qubm9vcD12b2lkIDA7ZnVuY3Rpb24gbm9vcChlLC4uLnQpe2NvbnN0IHI9ZS5sZW5ndGgtMTtyZXR1cm4gZS5zbGljZSgwLHIpLnJlZHVjZSgoKGUscixuKT0+ZStyK3Rbbl0pLFwiXCIpK2Vbcl19dC5ub29wPW5vb3B9LDYzNjpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LnBhcnNlU3RhY2s9dm9pZCAwO2NvbnN0IG49cig1OTc0KTtjb25zdCBvPS9cXC9fbmV4dChcXC9zdGF0aWNcXC8uKykvO2Z1bmN0aW9uIHBhcnNlU3RhY2soZSl7Y29uc3QgdD0oMCxuLnBhcnNlKShlKTtyZXR1cm4gdC5tYXAoKGU9Pnt0cnl7Y29uc3QgdD1uZXcgVVJMKGUuZmlsZSk7Y29uc3Qgcj1vLmV4ZWModC5wYXRobmFtZSk7aWYocil7Y29uc3QgdD1wcm9jZXNzLmVudi5fX05FWFRfRElTVF9ESVI/LnJlcGxhY2UoL1xcXFwvZyxcIi9cIik/LnJlcGxhY2UoL1xcLyQvLFwiXCIpO2lmKHQpe2UuZmlsZT1cImZpbGU6Ly9cIit0LmNvbmNhdChyLnBvcCgpKX19fWNhdGNoe31yZXR1cm4gZX0pKX10LnBhcnNlU3RhY2s9cGFyc2VTdGFja30sNzUwNDpmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5nZXRGcmFtZVNvdXJjZT10LmdldE9yaWdpbmFsU3RhY2tGcmFtZXM9dC5nZXRPcmlnaW5hbFN0YWNrRnJhbWU9dm9pZCAwO2Z1bmN0aW9uIGdldE9yaWdpbmFsU3RhY2tGcmFtZShlLHQscil7YXN5bmMgZnVuY3Rpb24gX2dldE9yaWdpbmFsU3RhY2tGcmFtZSgpe2NvbnN0IG49bmV3IFVSTFNlYXJjaFBhcmFtcztuLmFwcGVuZChcImlzU2VydmVyXCIsU3RyaW5nKHQ9PT1cInNlcnZlclwiKSk7bi5hcHBlbmQoXCJpc0VkZ2VTZXJ2ZXJcIixTdHJpbmcodD09PVwiZWRnZS1zZXJ2ZXJcIikpO24uYXBwZW5kKFwiZXJyb3JNZXNzYWdlXCIscik7Zm9yKGNvbnN0IHQgaW4gZSl7bi5hcHBlbmQodCwoZVt0XT8/XCJcIikudG9TdHJpbmcoKSl9Y29uc3Qgbz1uZXcgQWJvcnRDb250cm9sbGVyO2NvbnN0IGE9c2V0VGltZW91dCgoKCk9Pm8uYWJvcnQoKSksM2UzKTtjb25zdCBpPWF3YWl0IHNlbGYuZmV0Y2goYCR7cHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSHx8XCJcIn0vX19uZXh0anNfb3JpZ2luYWwtc3RhY2stZnJhbWU/JHtuLnRvU3RyaW5nKCl9YCx7c2lnbmFsOm8uc2lnbmFsfSkuZmluYWxseSgoKCk9PntjbGVhclRpbWVvdXQoYSl9KSk7aWYoIWkub2t8fGkuc3RhdHVzPT09MjA0KXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGF3YWl0IGkudGV4dCgpKSl9Y29uc3Qgcz1hd2FpdCBpLmpzb24oKTtyZXR1cm57ZXJyb3I6ZmFsc2UscmVhc29uOm51bGwsZXh0ZXJuYWw6ZmFsc2UsZXhwYW5kZWQ6IUJvb2xlYW4oKGUuZmlsZT8uaW5jbHVkZXMoXCJub2RlX21vZHVsZXNcIil8fHMub3JpZ2luYWxTdGFja0ZyYW1lPy5maWxlPy5pbmNsdWRlcyhcIm5vZGVfbW9kdWxlc1wiKSk/P3RydWUpLHNvdXJjZVN0YWNrRnJhbWU6ZSxvcmlnaW5hbFN0YWNrRnJhbWU6cy5vcmlnaW5hbFN0YWNrRnJhbWUsb3JpZ2luYWxDb2RlRnJhbWU6cy5vcmlnaW5hbENvZGVGcmFtZXx8bnVsbH19aWYoIShlLmZpbGU/LnN0YXJ0c1dpdGgoXCJ3ZWJwYWNrLWludGVybmFsOlwiKXx8ZS5maWxlPy5zdGFydHNXaXRoKFwiZmlsZTpcIikpKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtlcnJvcjpmYWxzZSxyZWFzb246bnVsbCxleHRlcm5hbDp0cnVlLGV4cGFuZGVkOmZhbHNlLHNvdXJjZVN0YWNrRnJhbWU6ZSxvcmlnaW5hbFN0YWNrRnJhbWU6bnVsbCxvcmlnaW5hbENvZGVGcmFtZTpudWxsfSl9cmV0dXJuIF9nZXRPcmlnaW5hbFN0YWNrRnJhbWUoKS5jYXRjaCgodD0+KHtlcnJvcjp0cnVlLHJlYXNvbjp0Py5tZXNzYWdlPz90Py50b1N0cmluZygpPz9cIlVua25vd24gRXJyb3JcIixleHRlcm5hbDpmYWxzZSxleHBhbmRlZDpmYWxzZSxzb3VyY2VTdGFja0ZyYW1lOmUsb3JpZ2luYWxTdGFja0ZyYW1lOm51bGwsb3JpZ2luYWxDb2RlRnJhbWU6bnVsbH0pKSl9dC5nZXRPcmlnaW5hbFN0YWNrRnJhbWU9Z2V0T3JpZ2luYWxTdGFja0ZyYW1lO2Z1bmN0aW9uIGdldE9yaWdpbmFsU3RhY2tGcmFtZXMoZSx0LHIpe3JldHVybiBQcm9taXNlLmFsbChlLm1hcCgoZT0+Z2V0T3JpZ2luYWxTdGFja0ZyYW1lKGUsdCxyKSkpKX10LmdldE9yaWdpbmFsU3RhY2tGcmFtZXM9Z2V0T3JpZ2luYWxTdGFja0ZyYW1lcztmdW5jdGlvbiBnZXRGcmFtZVNvdXJjZShlKXtsZXQgdD1cIlwiO3RyeXtjb25zdCByPW5ldyBVUkwoZS5maWxlKTtpZih0eXBlb2YgZ2xvYmFsVGhpcyE9PVwidW5kZWZpbmVkXCImJmdsb2JhbFRoaXMubG9jYXRpb24/Lm9yaWdpbiE9PXIub3JpZ2luKXtpZihyLm9yaWdpbj09PVwibnVsbFwiKXt0Kz1yLnByb3RvY29sfWVsc2V7dCs9ci5vcmlnaW59fXQrPXIucGF0aG5hbWU7dCs9XCIgXCJ9Y2F0Y2h7dCs9KGUuZmlsZXx8XCIodW5rbm93bilcIikrXCIgXCJ9aWYoZS5saW5lTnVtYmVyIT1udWxsKXtpZihlLmNvbHVtbiE9bnVsbCl7dCs9YCgke2UubGluZU51bWJlcn06JHtlLmNvbHVtbn0pIGB9ZWxzZXt0Kz1gKCR7ZS5saW5lTnVtYmVyfSkgYH19cmV0dXJuIHQuc2xpY2UoMCwtMSl9dC5nZXRGcmFtZVNvdXJjZT1nZXRGcmFtZVNvdXJjZX0sNzE2OTpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxyLG4pe2lmKG49PT11bmRlZmluZWQpbj1yO3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTtpZighb3x8KFwiZ2V0XCJpbiBvPyF0Ll9fZXNNb2R1bGU6by53cml0YWJsZXx8by5jb25maWd1cmFibGUpKXtvPXtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbcl19fX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLG8pfTpmdW5jdGlvbihlLHQscixuKXtpZihuPT09dW5kZWZpbmVkKW49cjtlW25dPXRbcl19KTt2YXIgbz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTp0cnVlLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlW1wiZGVmYXVsdFwiXT10fSk7dmFyIGE9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKGUpe2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBlKWlmKHIhPT1cImRlZmF1bHRcIiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikpbih0LGUscik7byh0LGUpO3JldHVybiB0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pO3QudXNlT25DbGlja091dHNpZGU9dm9pZCAwO2NvbnN0IGk9YShyKDc1MjIpKTtmdW5jdGlvbiB1c2VPbkNsaWNrT3V0c2lkZShlLHQpe2kudXNlRWZmZWN0KCgoKT0+e2lmKGU9PW51bGx8fHQ9PW51bGwpe3JldHVybn1jb25zdCBsaXN0ZW5lcj1yPT57aWYoIWV8fGUuY29udGFpbnMoci50YXJnZXQpKXtyZXR1cm59dChyKX07Y29uc3Qgcj1lLmdldFJvb3ROb2RlKCk7ci5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbGlzdGVuZXIpO3IuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixsaXN0ZW5lcik7cmV0dXJuIGZ1bmN0aW9uKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbGlzdGVuZXIpO3IucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixsaXN0ZW5lcil9fSksW3QsZV0pfXQudXNlT25DbGlja091dHNpZGU9dXNlT25DbGlja091dHNpZGV9LDg2NTpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LkNsb3NlSWNvbj12b2lkIDA7Y29uc3Qgbj1yKDUwNSk7Y29uc3QgQ2xvc2VJY29uPSgpPT4oMCxuLmpzeHMpKFwic3ZnXCIse3dpZHRoOlwiMjRcIixoZWlnaHQ6XCIyNFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjpbKDAsbi5qc3gpKFwicGF0aFwiLHtkOlwiTTE4IDZMNiAxOFwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLHN0cm9rZVdpZHRoOlwiMlwiLHN0cm9rZUxpbmVjYXA6XCJyb3VuZFwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIn0pLCgwLG4uanN4KShcInBhdGhcIix7ZDpcIk02IDZMMTggMThcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixzdHJva2VXaWR0aDpcIjJcIixzdHJva2VMaW5lY2FwOlwicm91bmRcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCJ9KV19KTt0LkNsb3NlSWNvbj1DbG9zZUljb259LDg4NDpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LkJhc2U9dm9pZCAwO2NvbnN0IG49cig1MDUpO2NvbnN0IG89cig4OTEwKTtmdW5jdGlvbiBCYXNlKCl7cmV0dXJuKDAsbi5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46KDAsby5ub29wKWBcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIC0tc2l6ZS1nYXAtaGFsZjogNHB4O1xuICAgICAgICAgIC0tc2l6ZS1nYXA6IDhweDtcbiAgICAgICAgICAtLXNpemUtZ2FwLWRvdWJsZTogMTZweDtcbiAgICAgICAgICAtLXNpemUtZ2FwLXRyaXBsZTogMjRweDtcbiAgICAgICAgICAtLXNpemUtZ2FwLXF1YWQ6IDMycHg7XG5cbiAgICAgICAgICAtLXNpemUtZm9udC1zbWFsbDogMTRweDtcbiAgICAgICAgICAtLXNpemUtZm9udDogMTZweDtcbiAgICAgICAgICAtLXNpemUtZm9udC1iaWc6IDIwcHg7XG4gICAgICAgICAgLS1zaXplLWZvbnQtYmlnZ2VyOiAyNHB4O1xuXG4gICAgICAgICAgLS1jb2xvci1iYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgICAtLWNvbG9yLWZvbnQ6ICM3NTc1NzU7XG4gICAgICAgICAgLS1jb2xvci1iYWNrZHJvcDogcmdiYSgxNywgMTcsIDE3LCAwLjIpO1xuXG4gICAgICAgICAgLS1jb2xvci1zdGFjay1oNjogIzIyMjtcbiAgICAgICAgICAtLWNvbG9yLXN0YWNrLWhlYWRsaW5lOiAjNjY2O1xuICAgICAgICAgIC0tY29sb3Itc3RhY2stc3VibGluZTogIzk5OTtcblxuICAgICAgICAgIC0tY29sb3ItYWNjZW50cy0xOiAjODA4MDgwO1xuICAgICAgICAgIC0tY29sb3ItYWNjZW50cy0yOiAjMjIyMjIyO1xuICAgICAgICAgIC0tY29sb3ItYWNjZW50cy0zOiAjNDA0MDQwO1xuXG4gICAgICAgICAgLS1mb250LXN0YWNrLW1vbm9zcGFjZTogJ1NGTW9uby1SZWd1bGFyJywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLFxuICAgICAgICAgICAgTWVubG8sIENvdXJpZXIsIG1vbm9zcGFjZTtcblxuICAgICAgICAgIC0tY29sb3ItYW5zaS1zZWxlY3Rpb246IHJnYmEoOTUsIDEyNiwgMTUxLCAwLjQ4KTtcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYmc6ICMxMTExMTE7XG4gICAgICAgICAgLS1jb2xvci1hbnNpLWZnOiAjY2NjY2NjO1xuXG4gICAgICAgICAgLS1jb2xvci1hbnNpLXdoaXRlOiAjNzc3Nzc3O1xuICAgICAgICAgIC0tY29sb3ItYW5zaS1ibGFjazogIzE0MTQxNDtcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYmx1ZTogIzAwYWFmZjtcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktY3lhbjogIzg4ZGRmZjtcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktZ3JlZW46ICM5OGVjNjU7XG4gICAgICAgICAgLS1jb2xvci1hbnNpLW1hZ2VudGE6ICNhYTg4ZmY7XG4gICAgICAgICAgLS1jb2xvci1hbnNpLXJlZDogI2ZmNTU1NTtcbiAgICAgICAgICAtLWNvbG9yLWFuc2kteWVsbG93OiAjZmZjYzMzO1xuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQtd2hpdGU6ICNmZmZmZmY7XG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1ibGFjazogIzc3Nzc3NztcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LWJsdWU6ICMzM2JiZmY7XG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1jeWFuOiAjYmJlY2ZmO1xuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQtZ3JlZW46ICNiNmYyOTI7XG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1tYWdlbnRhOiAjY2ViYmZmO1xuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQtcmVkOiAjZmY4ODg4O1xuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQteWVsbG93OiAjZmZkOTY2O1xuICAgICAgICB9XG5cbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgIDpob3N0IHtcbiAgICAgICAgICAgIC0tY29sb3ItYmFja2dyb3VuZDogcmdiKDI4LCAyOCwgMzApO1xuICAgICAgICAgICAgLS1jb2xvci1mb250OiB3aGl0ZTtcbiAgICAgICAgICAgIC0tY29sb3ItYmFja2Ryb3A6IHJnYig0NCwgNDQsIDQ2KTtcblxuICAgICAgICAgICAgLS1jb2xvci1zdGFjay1oNjogcmdiKDIwMCwgMjAwLCAyMDQpO1xuICAgICAgICAgICAgLS1jb2xvci1zdGFjay1oZWFkbGluZTogcmdiKDk5LCA5OSwgMTAyKTtcbiAgICAgICAgICAgIC0tY29sb3Itc3RhY2stc3VibGluZTogcmdiYSgxNDIsIDE0MiwgMTQ3KTtcblxuICAgICAgICAgICAgLS1jb2xvci1hY2NlbnRzLTM6IHJnYigxMTgsIDExOCwgMTE4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubW9ubyB7XG4gICAgICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGgxLFxuICAgICAgICBoMixcbiAgICAgICAgaDMsXG4gICAgICAgIGg0LFxuICAgICAgICBoNSxcbiAgICAgICAgaDYge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUtZ2FwKTtcbiAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICAgIH1cbiAgICAgIGB9KX10LkJhc2U9QmFzZX0sNDQ2NDpmdW5jdGlvbihlLHQscil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTt0LkNvbXBvbmVudFN0eWxlcz12b2lkIDA7Y29uc3Qgbj1yKDUwNSk7Y29uc3Qgbz1yKDM5OSk7Y29uc3QgYT1yKDU2NTEpO2NvbnN0IGk9cig2NTQzKTtjb25zdCBzPXIoOTkzKTtjb25zdCBsPXIoNTQ4OCk7Y29uc3QgdT1yKDExMjApO2NvbnN0IGM9cig1OTM2KTtjb25zdCBkPXIoNDM1NSk7Y29uc3QgZj1yKDI0ODQpO2NvbnN0IHA9cig4OTEwKTtmdW5jdGlvbiBDb21wb25lbnRTdHlsZXMoKXtyZXR1cm4oMCxuLmpzeCkoXCJzdHlsZVwiLHtjaGlsZHJlbjooMCxwLm5vb3ApYFxuICAgICAgICAke3Muc3R5bGVzfVxuICAgICAgICAke3Uuc3R5bGVzfVxuICAgICAgICAke2Euc3R5bGVzfVxuICAgICAgICAke2kuc3R5bGVzfVxuICAgICAgICAke28uc3R5bGVzfVxuICAgICAgICAke2wuc3R5bGVzfVxuICAgICAgICBcbiAgICAgICAgJHtjLnN0eWxlc31cbiAgICAgICAgJHtkLnN0eWxlc31cbiAgICAgICAgJHtmLnN0eWxlc31cbiAgICAgIGB9KX10LkNvbXBvbmVudFN0eWxlcz1Db21wb25lbnRTdHlsZXN9LDk0OTU6ZnVuY3Rpb24oZSx0LHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dC5Dc3NSZXNldD12b2lkIDA7Y29uc3Qgbj1yKDUwNSk7Y29uc3Qgbz1yKDg5MTApO2Z1bmN0aW9uIENzc1Jlc2V0KCl7cmV0dXJuKDAsbi5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46KDAsby5ub29wKWBcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGFsbDogaW5pdGlhbDtcblxuICAgICAgICAgIC8qIHRoZSBkaXJlY3Rpb24gcHJvcGVydHkgaXMgbm90IHJlc2V0IGJ5ICdhbGwnICovXG4gICAgICAgICAgZGlyZWN0aW9uOiBsdHI7XG4gICAgICAgIH1cblxuICAgICAgICAvKiFcbiAgICAgICAgICogQm9vdHN0cmFwIFJlYm9vdCB2NC40LjEgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICAgICAgICAqIENvcHlyaWdodCAyMDExLTIwMTkgVGhlIEJvb3RzdHJhcCBBdXRob3JzXG4gICAgICAgICAqIENvcHlyaWdodCAyMDExLTIwMTkgVHdpdHRlciwgSW5jLlxuICAgICAgICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICAgICAgICAgKiBGb3JrZWQgZnJvbSBOb3JtYWxpemUuY3NzLCBsaWNlbnNlZCBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZClcbiAgICAgICAgICovXG4gICAgICAgICosXG4gICAgICAgICo6OmJlZm9yZSxcbiAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIH1cblxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTU7XG4gICAgICAgICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAgICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFydGljbGUsXG4gICAgICAgIGFzaWRlLFxuICAgICAgICBmaWdjYXB0aW9uLFxuICAgICAgICBmaWd1cmUsXG4gICAgICAgIGZvb3RlcixcbiAgICAgICAgaGVhZGVyLFxuICAgICAgICBoZ3JvdXAsXG4gICAgICAgIG1haW4sXG4gICAgICAgIG5hdixcbiAgICAgICAgc2VjdGlvbiB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cblxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90byxcbiAgICAgICAgICAgICdIZWx2ZXRpY2EgTmV1ZScsIEFyaWFsLCAnTm90byBTYW5zJywgc2Fucy1zZXJpZixcbiAgICAgICAgICAgICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnLFxuICAgICAgICAgICAgJ05vdG8gQ29sb3IgRW1vamknO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWZvbnQpO1xuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICAgICAgfVxuXG4gICAgICAgIFt0YWJpbmRleD0nLTEnXTpmb2N1czpub3QoOmZvY3VzLXZpc2libGUpIHtcbiAgICAgICAgICBvdXRsaW5lOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBociB7XG4gICAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaDEsXG4gICAgICAgIGgyLFxuICAgICAgICBoMyxcbiAgICAgICAgaDQsXG4gICAgICAgIGg1LFxuICAgICAgICBoNiB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICAgIH1cblxuICAgICAgICBwIHtcbiAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICAgIH1cblxuICAgICAgICBhYmJyW3RpdGxlXSxcbiAgICAgICAgYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgICAgLXdlYmtpdC10ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xuICAgICAgICAgIGN1cnNvcjogaGVscDtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICAgIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBub25lO1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZHJlc3Mge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgICB9XG5cbiAgICAgICAgb2wsXG4gICAgICAgIHVsLFxuICAgICAgICBkbCB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgICB9XG5cbiAgICAgICAgb2wgb2wsXG4gICAgICAgIHVsIHVsLFxuICAgICAgICBvbCB1bCxcbiAgICAgICAgdWwgb2wge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIH1cblxuICAgICAgICBkdCB7XG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRkIHtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICBibG9ja3F1b3RlIHtcbiAgICAgICAgICBtYXJnaW46IDAgMCAxNnB4O1xuICAgICAgICB9XG5cbiAgICAgICAgYixcbiAgICAgICAgc3Ryb25nIHtcbiAgICAgICAgICBmb250LXdlaWdodDogYm9sZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgc21hbGwge1xuICAgICAgICAgIGZvbnQtc2l6ZTogODAlO1xuICAgICAgICB9XG5cbiAgICAgICAgc3ViLFxuICAgICAgICBzdXAge1xuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICBmb250LXNpemU6IDc1JTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMDtcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgICAgIH1cblxuICAgICAgICBzdWIge1xuICAgICAgICAgIGJvdHRvbTogLTAuMjVlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cCB7XG4gICAgICAgICAgdG9wOiAtMC41ZW07XG4gICAgICAgIH1cblxuICAgICAgICBhIHtcbiAgICAgICAgICBjb2xvcjogIzAwN2JmZjtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBhOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogIzAwNTZiMztcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGE6bm90KFtocmVmXSkge1xuICAgICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGE6bm90KFtocmVmXSk6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZSxcbiAgICAgICAgY29kZSxcbiAgICAgICAga2JkLFxuICAgICAgICBzYW1wIHtcbiAgICAgICAgICBmb250LWZhbWlseTogU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLFxuICAgICAgICAgICAgJ0xpYmVyYXRpb24gTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcbiAgICAgICAgICBmb250LXNpemU6IDFlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZSB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlndXJlIHtcbiAgICAgICAgICBtYXJnaW46IDAgMCAxNnB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaW1nIHtcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGUge1xuICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjYXB0aW9uIHtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMTJweDtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTJweDtcbiAgICAgICAgICBjb2xvcjogIzZjNzU3ZDtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgIGNhcHRpb24tc2lkZTogYm90dG9tO1xuICAgICAgICB9XG5cbiAgICAgICAgdGgge1xuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsYWJlbCB7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1dHRvbjpmb2N1cyB7XG4gICAgICAgICAgb3V0bGluZTogMXB4IGRvdHRlZDtcbiAgICAgICAgICBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCxcbiAgICAgICAgYnV0dG9uLFxuICAgICAgICBzZWxlY3QsXG4gICAgICAgIG9wdGdyb3VwLFxuICAgICAgICB0ZXh0YXJlYSB7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAgICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1dHRvbixcbiAgICAgICAgaW5wdXQge1xuICAgICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgICB9XG5cbiAgICAgICAgYnV0dG9uLFxuICAgICAgICBzZWxlY3Qge1xuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZWN0IHtcbiAgICAgICAgICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1dHRvbixcbiAgICAgICAgW3R5cGU9J2J1dHRvbiddLFxuICAgICAgICBbdHlwZT0ncmVzZXQnXSxcbiAgICAgICAgW3R5cGU9J3N1Ym1pdCddIHtcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1dHRvbjpub3QoOmRpc2FibGVkKSxcbiAgICAgICAgW3R5cGU9J2J1dHRvbiddOm5vdCg6ZGlzYWJsZWQpLFxuICAgICAgICBbdHlwZT0ncmVzZXQnXTpub3QoOmRpc2FibGVkKSxcbiAgICAgICAgW3R5cGU9J3N1Ym1pdCddOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBidXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG4gICAgICAgIFt0eXBlPSdidXR0b24nXTo6LW1vei1mb2N1cy1pbm5lcixcbiAgICAgICAgW3R5cGU9J3Jlc2V0J106Oi1tb3otZm9jdXMtaW5uZXIsXG4gICAgICAgIFt0eXBlPSdzdWJtaXQnXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICBib3JkZXItc3R5bGU6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dFt0eXBlPSdyYWRpbyddLFxuICAgICAgICBpbnB1dFt0eXBlPSdjaGVja2JveCddIHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dFt0eXBlPSdkYXRlJ10sXG4gICAgICAgIGlucHV0W3R5cGU9J3RpbWUnXSxcbiAgICAgICAgaW5wdXRbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSxcbiAgICAgICAgaW5wdXRbdHlwZT0nbW9udGgnXSB7XG4gICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBsaXN0Ym94O1xuICAgICAgICB9XG5cbiAgICAgICAgdGV4dGFyZWEge1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICAgIHJlc2l6ZTogdmVydGljYWw7XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZHNldCB7XG4gICAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxlZ2VuZCB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvZ3Jlc3Mge1xuICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgICAgICAgfVxuXG4gICAgICAgIFt0eXBlPSdudW1iZXInXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICAgICAgW3R5cGU9J251bWJlciddOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIH1cblxuICAgICAgICBbdHlwZT0nc2VhcmNoJ10ge1xuICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIFt0eXBlPSdzZWFyY2gnXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XG4gICAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dCB7XG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VtbWFyeSB7XG4gICAgICAgICAgZGlzcGxheTogbGlzdC1pdGVtO1xuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRlbXBsYXRlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgW2hpZGRlbl0ge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgYH0pfXQuQ3NzUmVzZXQ9Q3NzUmVzZXR9LDc5OTc6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPXJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvYW5zZXJcIil9LDcyOTI6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPXJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvY3NzLmVzY2FwZVwiKX0sNzcwOTpmdW5jdGlvbihlKXtlLmV4cG9ydHM9cmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9wbGF0Zm9ybVwiKX0sNTk3NDpmdW5jdGlvbihlKXtlLmV4cG9ydHM9cmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9zdGFja3RyYWNlLXBhcnNlclwiKX0sNzUxODpmdW5jdGlvbihlKXtlLmV4cG9ydHM9cmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpXCIpfSw3NTIyOmZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1yZXF1aXJlKFwicmVhY3RcIil9LDIyNTU6ZnVuY3Rpb24oZSl7ZS5leHBvcnRzPXJlcXVpcmUoXCJyZWFjdC1kb21cIil9fTt2YXIgdD17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKHIpe3ZhciBuPXRbcl07aWYobiE9PXVuZGVmaW5lZCl7cmV0dXJuIG4uZXhwb3J0c312YXIgbz10W3JdPXtleHBvcnRzOnt9fTt2YXIgYT10cnVlO3RyeXtlW3JdLmNhbGwoby5leHBvcnRzLG8sby5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO2E9ZmFsc2V9ZmluYWxseXtpZihhKWRlbGV0ZSB0W3JdfXJldHVybiBvLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciByPV9fbmNjd3Bja19yZXF1aXJlX18oNTIwNCk7bW9kdWxlLmV4cG9ydHM9cn0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/@next/react-dev-overlay/dist/client.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/add-base-path.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/client/add-base-path.js ***! + \********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addBasePath\", ({\n enumerable: true,\n get: function() {\n return addBasePath;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ../shared/lib/router/utils/add-path-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst basePath = false || \"\";\nfunction addBasePath(path, required) {\n return (0, _normalizetrailingslash.normalizePathTrailingSlash)( false ? 0 : (0, _addpathprefix.addPathPrefix)(path, basePath));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=add-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9hZGQtYmFzZS1wYXRoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwrQ0FBOEM7SUFDMUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQkFBaUJDLG1CQUFPQSxDQUFDLHVIQUE0QztBQUMzRSxNQUFNQywwQkFBMEJELG1CQUFPQSxDQUFDLCtGQUE0QjtBQUNwRSxNQUFNRSxXQUFXQyxNQUFrQyxJQUFJO0FBQ3ZELFNBQVNMLFlBQVlRLElBQUksRUFBRUMsUUFBUTtJQUMvQixPQUFPLENBQUMsR0FBR04sd0JBQXdCTywwQkFBMEIsRUFBRUwsTUFBdURJLEdBQUdELENBQUlBLEdBQUcsQ0FBQyxHQUFHUCxlQUFlVyxhQUFhLEVBQUVKLE1BQU1KO0FBQzVLO0FBRUEsSUFBSSxDQUFDLE9BQU9SLFFBQVFpQixPQUFPLEtBQUssY0FBZSxPQUFPakIsUUFBUWlCLE9BQU8sS0FBSyxZQUFZakIsUUFBUWlCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2pCLFFBQVFpQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLcEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRaUIsT0FBTyxFQUFFLGNBQWM7UUFBRWhCLE9BQU87SUFBSztJQUNuRUgsT0FBT3FCLE1BQU0sQ0FBQ25CLFFBQVFpQixPQUFPLEVBQUVqQjtJQUMvQm9CLE9BQU9wQixPQUFPLEdBQUdBLFFBQVFpQixPQUFPO0FBQ2xDLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FkZC1iYXNlLXBhdGguanM/NjEzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFkZEJhc2VQYXRoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhZGRCYXNlUGF0aDtcbiAgICB9XG59KTtcbmNvbnN0IF9hZGRwYXRocHJlZml4ID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1wYXRoLXByZWZpeFwiKTtcbmNvbnN0IF9ub3JtYWxpemV0cmFpbGluZ3NsYXNoID0gcmVxdWlyZShcIi4vbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoXCIpO1xuY29uc3QgYmFzZVBhdGggPSBwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIIHx8IFwiXCI7XG5mdW5jdGlvbiBhZGRCYXNlUGF0aChwYXRoLCByZXF1aXJlZCkge1xuICAgIHJldHVybiAoMCwgX25vcm1hbGl6ZXRyYWlsaW5nc2xhc2gubm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2gpKHByb2Nlc3MuZW52Ll9fTkVYVF9NQU5VQUxfQ0xJRU5UX0JBU0VfUEFUSCAmJiAhcmVxdWlyZWQgPyBwYXRoIDogKDAsIF9hZGRwYXRocHJlZml4LmFkZFBhdGhQcmVmaXgpKHBhdGgsIGJhc2VQYXRoKSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZC1iYXNlLXBhdGguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImFkZEJhc2VQYXRoIiwiX2FkZHBhdGhwcmVmaXgiLCJyZXF1aXJlIiwiX25vcm1hbGl6ZXRyYWlsaW5nc2xhc2giLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsInJlcXVpcmVkIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJfX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEgiLCJhZGRQYXRoUHJlZml4IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/add-base-path.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/add-locale.js": +/*!*****************************************************!*\ + !*** ./node_modules/next/dist/client/add-locale.js ***! + \*****************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n enumerable: true,\n get: function() {\n return addLocale;\n }\n}));\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst addLocale = function(path) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (false) {}\n return path;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=add-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9hZGQtbG9jYWxlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw2Q0FBNEM7SUFDeENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywwQkFBMEJDLG1CQUFPQSxDQUFDLCtGQUE0QjtBQUNwRSxNQUFNRixZQUFZLFNBQVNHLElBQUk7SUFDM0IsSUFBSSxJQUFJQyxPQUFPQyxVQUFVQyxNQUFNLEVBQUVDLE9BQU8sSUFBSUMsTUFBTUosT0FBTyxJQUFJQSxPQUFPLElBQUksSUFBSUssT0FBTyxHQUFHQSxPQUFPTCxNQUFNSyxPQUFPO1FBQ3RHRixJQUFJLENBQUNFLE9BQU8sRUFBRSxHQUFHSixTQUFTLENBQUNJLEtBQUs7SUFDcEM7SUFDQSxJQUFJQyxLQUErQixFQUFFLEVBRXBDO0lBQ0QsT0FBT1A7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPUCxRQUFRa0IsT0FBTyxLQUFLLGNBQWUsT0FBT2xCLFFBQVFrQixPQUFPLEtBQUssWUFBWWxCLFFBQVFrQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9sQixRQUFRa0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3JCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWtCLE9BQU8sRUFBRSxjQUFjO1FBQUVqQixPQUFPO0lBQUs7SUFDbkVILE9BQU9zQixNQUFNLENBQUNwQixRQUFRa0IsT0FBTyxFQUFFbEI7SUFDL0JxQixPQUFPckIsT0FBTyxHQUFHQSxRQUFRa0IsT0FBTztBQUNsQyxFQUVBLHNDQUFzQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9hZGQtbG9jYWxlLmpzP2UyZDkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhZGRMb2NhbGVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFkZExvY2FsZTtcbiAgICB9XG59KTtcbmNvbnN0IF9ub3JtYWxpemV0cmFpbGluZ3NsYXNoID0gcmVxdWlyZShcIi4vbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoXCIpO1xuY29uc3QgYWRkTG9jYWxlID0gZnVuY3Rpb24ocGF0aCkge1xuICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICByZXR1cm4gKDAsIF9ub3JtYWxpemV0cmFpbGluZ3NsYXNoLm5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoKShyZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLWxvY2FsZVwiKS5hZGRMb2NhbGUocGF0aCwgLi4uYXJncykpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZC1sb2NhbGUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImFkZExvY2FsZSIsIl9ub3JtYWxpemV0cmFpbGluZ3NsYXNoIiwicmVxdWlyZSIsInBhdGgiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfSTE4Tl9TVVBQT1JUIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/add-locale.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/components/app-router-headers.js": +/*!************************************************************************!*\ + !*** ./node_modules/next/dist/client/components/app-router-headers.js ***! + \************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RSC_HEADER: function() {\n return RSC_HEADER;\n },\n ACTION: function() {\n return ACTION;\n },\n NEXT_ROUTER_STATE_TREE: function() {\n return NEXT_ROUTER_STATE_TREE;\n },\n NEXT_ROUTER_PREFETCH_HEADER: function() {\n return NEXT_ROUTER_PREFETCH_HEADER;\n },\n NEXT_URL: function() {\n return NEXT_URL;\n },\n RSC_CONTENT_TYPE_HEADER: function() {\n return RSC_CONTENT_TYPE_HEADER;\n },\n RSC_VARY_HEADER: function() {\n return RSC_VARY_HEADER;\n },\n FLIGHT_PARAMETERS: function() {\n return FLIGHT_PARAMETERS;\n },\n NEXT_RSC_UNION_QUERY: function() {\n return NEXT_RSC_UNION_QUERY;\n },\n NEXT_DID_POSTPONE_HEADER: function() {\n return NEXT_DID_POSTPONE_HEADER;\n }\n});\nconst RSC_HEADER = \"RSC\";\nconst ACTION = \"Next-Action\";\nconst NEXT_ROUTER_STATE_TREE = \"Next-Router-State-Tree\";\nconst NEXT_ROUTER_PREFETCH_HEADER = \"Next-Router-Prefetch\";\nconst NEXT_URL = \"Next-Url\";\nconst RSC_CONTENT_TYPE_HEADER = \"text/x-component\";\nconst RSC_VARY_HEADER = RSC_HEADER + \", \" + NEXT_ROUTER_STATE_TREE + \", \" + NEXT_ROUTER_PREFETCH_HEADER + \", \" + NEXT_URL;\nconst FLIGHT_PARAMETERS = [\n [\n RSC_HEADER\n ],\n [\n NEXT_ROUTER_STATE_TREE\n ],\n [\n NEXT_ROUTER_PREFETCH_HEADER\n ]\n];\nconst NEXT_RSC_UNION_QUERY = \"_rsc\";\nconst NEXT_DID_POSTPONE_HEADER = \"x-nextjs-postponed\";\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=app-router-headers.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXItaGVhZGVycy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQVdOO0FBQ0EsU0FBU1csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSWpCLE9BQU9DLGNBQWMsQ0FBQ2UsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRYixTQUFTO0lBQ2JHLFlBQVk7UUFDUixPQUFPQTtJQUNYO0lBQ0FDLFFBQVE7UUFDSixPQUFPQTtJQUNYO0lBQ0FDLHdCQUF3QjtRQUNwQixPQUFPQTtJQUNYO0lBQ0FDLDZCQUE2QjtRQUN6QixPQUFPQTtJQUNYO0lBQ0FDLFVBQVU7UUFDTixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLGlCQUFpQjtRQUNiLE9BQU9BO0lBQ1g7SUFDQUMsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxzQkFBc0I7UUFDbEIsT0FBT0E7SUFDWDtJQUNBQywwQkFBMEI7UUFDdEIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTVQsYUFBYTtBQUNuQixNQUFNQyxTQUFTO0FBQ2YsTUFBTUMseUJBQXlCO0FBQy9CLE1BQU1DLDhCQUE4QjtBQUNwQyxNQUFNQyxXQUFXO0FBQ2pCLE1BQU1DLDBCQUEwQjtBQUNoQyxNQUFNQyxrQkFBa0JOLGFBQWEsT0FBT0UseUJBQXlCLE9BQU9DLDhCQUE4QixPQUFPQztBQUNqSCxNQUFNRyxvQkFBb0I7SUFDdEI7UUFDSVA7S0FDSDtJQUNEO1FBQ0lFO0tBQ0g7SUFDRDtRQUNJQztLQUNIO0NBQ0o7QUFDRCxNQUFNSyx1QkFBdUI7QUFDN0IsTUFBTUMsMkJBQTJCO0FBRWpDLElBQUksQ0FBQyxPQUFPWixRQUFRbUIsT0FBTyxLQUFLLGNBQWUsT0FBT25CLFFBQVFtQixPQUFPLEtBQUssWUFBWW5CLFFBQVFtQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9uQixRQUFRbUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3RCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW1CLE9BQU8sRUFBRSxjQUFjO1FBQUVsQixPQUFPO0lBQUs7SUFDbkVILE9BQU91QixNQUFNLENBQUNyQixRQUFRbUIsT0FBTyxFQUFFbkI7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUW1CLE9BQU87QUFDbEMsRUFFQSw4Q0FBOEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLWhlYWRlcnMuanM/MzU2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFJTQ19IRUFERVI6IG51bGwsXG4gICAgQUNUSU9OOiBudWxsLFxuICAgIE5FWFRfUk9VVEVSX1NUQVRFX1RSRUU6IG51bGwsXG4gICAgTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSOiBudWxsLFxuICAgIE5FWFRfVVJMOiBudWxsLFxuICAgIFJTQ19DT05URU5UX1RZUEVfSEVBREVSOiBudWxsLFxuICAgIFJTQ19WQVJZX0hFQURFUjogbnVsbCxcbiAgICBGTElHSFRfUEFSQU1FVEVSUzogbnVsbCxcbiAgICBORVhUX1JTQ19VTklPTl9RVUVSWTogbnVsbCxcbiAgICBORVhUX0RJRF9QT1NUUE9ORV9IRUFERVI6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgUlNDX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfSEVBREVSO1xuICAgIH0sXG4gICAgQUNUSU9OOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFDVElPTjtcbiAgICB9LFxuICAgIE5FWFRfUk9VVEVSX1NUQVRFX1RSRUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9ST1VURVJfU1RBVEVfVFJFRTtcbiAgICB9LFxuICAgIE5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVI7XG4gICAgfSxcbiAgICBORVhUX1VSTDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX1VSTDtcbiAgICB9LFxuICAgIFJTQ19DT05URU5UX1RZUEVfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19DT05URU5UX1RZUEVfSEVBREVSO1xuICAgIH0sXG4gICAgUlNDX1ZBUllfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19WQVJZX0hFQURFUjtcbiAgICB9LFxuICAgIEZMSUdIVF9QQVJBTUVURVJTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEZMSUdIVF9QQVJBTUVURVJTO1xuICAgIH0sXG4gICAgTkVYVF9SU0NfVU5JT05fUVVFUlk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9SU0NfVU5JT05fUVVFUlk7XG4gICAgfSxcbiAgICBORVhUX0RJRF9QT1NUUE9ORV9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSO1xuICAgIH1cbn0pO1xuY29uc3QgUlNDX0hFQURFUiA9IFwiUlNDXCI7XG5jb25zdCBBQ1RJT04gPSBcIk5leHQtQWN0aW9uXCI7XG5jb25zdCBORVhUX1JPVVRFUl9TVEFURV9UUkVFID0gXCJOZXh0LVJvdXRlci1TdGF0ZS1UcmVlXCI7XG5jb25zdCBORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVIgPSBcIk5leHQtUm91dGVyLVByZWZldGNoXCI7XG5jb25zdCBORVhUX1VSTCA9IFwiTmV4dC1VcmxcIjtcbmNvbnN0IFJTQ19DT05URU5UX1RZUEVfSEVBREVSID0gXCJ0ZXh0L3gtY29tcG9uZW50XCI7XG5jb25zdCBSU0NfVkFSWV9IRUFERVIgPSBSU0NfSEVBREVSICsgXCIsIFwiICsgTkVYVF9ST1VURVJfU1RBVEVfVFJFRSArIFwiLCBcIiArIE5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUiArIFwiLCBcIiArIE5FWFRfVVJMO1xuY29uc3QgRkxJR0hUX1BBUkFNRVRFUlMgPSBbXG4gICAgW1xuICAgICAgICBSU0NfSEVBREVSXG4gICAgXSxcbiAgICBbXG4gICAgICAgIE5FWFRfUk9VVEVSX1NUQVRFX1RSRUVcbiAgICBdLFxuICAgIFtcbiAgICAgICAgTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSXG4gICAgXVxuXTtcbmNvbnN0IE5FWFRfUlNDX1VOSU9OX1FVRVJZID0gXCJfcnNjXCI7XG5jb25zdCBORVhUX0RJRF9QT1NUUE9ORV9IRUFERVIgPSBcIngtbmV4dGpzLXBvc3Rwb25lZFwiO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHAtcm91dGVyLWhlYWRlcnMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiUlNDX0hFQURFUiIsIkFDVElPTiIsIk5FWFRfUk9VVEVSX1NUQVRFX1RSRUUiLCJORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVIiLCJORVhUX1VSTCIsIlJTQ19DT05URU5UX1RZUEVfSEVBREVSIiwiUlNDX1ZBUllfSEVBREVSIiwiRkxJR0hUX1BBUkFNRVRFUlMiLCJORVhUX1JTQ19VTklPTl9RVUVSWSIsIk5FWFRfRElEX1BPU1RQT05FX0hFQURFUiIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/components/app-router-headers.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/detect-domain-locale.js": +/*!***************************************************************!*\ + !*** ./node_modules/next/dist/client/detect-domain-locale.js ***! + \***************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"detectDomainLocale\", ({\n enumerable: true,\n get: function() {\n return detectDomainLocale;\n }\n}));\nconst detectDomainLocale = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (false) {}\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=detect-domain-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXRlY3QtZG9tYWluLWxvY2FsZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsc0RBQXFEO0lBQ2pESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUEscUJBQXFCO0lBQ3ZCLElBQUksSUFBSUMsT0FBT0MsVUFBVUMsTUFBTSxFQUFFQyxPQUFPLElBQUlDLE1BQU1KLE9BQU9LLE9BQU8sR0FBR0EsT0FBT0wsTUFBTUssT0FBTztRQUNuRkYsSUFBSSxDQUFDRSxLQUFLLEdBQUdKLFNBQVMsQ0FBQ0ksS0FBSztJQUNoQztJQUNBLElBQUlDLEtBQStCLEVBQUUsRUFFcEM7QUFDTDtBQUVBLElBQUksQ0FBQyxPQUFPWCxRQUFRZSxPQUFPLEtBQUssY0FBZSxPQUFPZixRQUFRZSxPQUFPLEtBQUssWUFBWWYsUUFBUWUsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPZixRQUFRZSxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLbEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRZSxPQUFPLEVBQUUsY0FBYztRQUFFZCxPQUFPO0lBQUs7SUFDbkVILE9BQU9tQixNQUFNLENBQUNqQixRQUFRZSxPQUFPLEVBQUVmO0lBQy9Ca0IsT0FBT2xCLE9BQU8sR0FBR0EsUUFBUWUsT0FBTztBQUNsQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXRlY3QtZG9tYWluLWxvY2FsZS5qcz8wM2I1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGV0ZWN0RG9tYWluTG9jYWxlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBkZXRlY3REb21haW5Mb2NhbGU7XG4gICAgfVxufSk7XG5jb25zdCBkZXRlY3REb21haW5Mb2NhbGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9pMThuL2RldGVjdC1kb21haW4tbG9jYWxlXCIpLmRldGVjdERvbWFpbkxvY2FsZSguLi5hcmdzKTtcbiAgICB9XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZXRlY3QtZG9tYWluLWxvY2FsZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZGV0ZWN0RG9tYWluTG9jYWxlIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0kxOE5fU1VQUE9SVCIsInJlcXVpcmUiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/detect-domain-locale.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/dev/dev-build-watcher.js": +/*!****************************************************************!*\ + !*** ./node_modules/next/dist/client/dev/dev-build-watcher.js ***! + \****************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* eslint-disable @typescript-eslint/no-use-before-define */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return initializeBuildWatcher;\n }\n}));\nconst _hotreloadertypes = __webpack_require__(/*! ../../server/dev/hot-reloader-types */ \"./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _websocket = __webpack_require__(/*! ./error-overlay/websocket */ \"./node_modules/next/dist/client/dev/error-overlay/websocket.js\");\nfunction initializeBuildWatcher(toggleCallback, position) {\n if (position === void 0) position = \"bottom-right\";\n const shadowHost = document.createElement(\"div\");\n const [verticalProperty, horizontalProperty] = position.split(\"-\", 2);\n shadowHost.id = \"__next-build-watcher\";\n // Make sure container is fixed and on a high zIndex so it shows\n shadowHost.style.position = \"fixed\";\n // Ensure container's position to be top or bottom (default)\n shadowHost.style[verticalProperty] = \"10px\";\n // Ensure container's position to be left or right (default)\n shadowHost.style[horizontalProperty] = \"20px\";\n shadowHost.style.width = \"0\";\n shadowHost.style.height = \"0\";\n shadowHost.style.zIndex = \"99999\";\n document.body.appendChild(shadowHost);\n let shadowRoot;\n let prefix = \"\";\n if (shadowHost.attachShadow) {\n shadowRoot = shadowHost.attachShadow({\n mode: \"open\"\n });\n } else {\n // If attachShadow is undefined then the browser does not support\n // the Shadow DOM, we need to prefix all the names so there\n // will be no conflicts\n shadowRoot = shadowHost;\n prefix = \"__next-build-watcher-\";\n }\n // Container\n const container = createContainer(prefix);\n shadowRoot.appendChild(container);\n // CSS\n const css = createCss(prefix, {\n horizontalProperty,\n verticalProperty\n });\n shadowRoot.appendChild(css);\n // State\n let isVisible = false;\n let isBuilding = false;\n let timeoutId = null;\n // Handle events\n (0, _websocket.addMessageListener)((obj)=>{\n try {\n handleMessage(obj);\n } catch (e) {}\n });\n function show() {\n timeoutId && clearTimeout(timeoutId);\n isVisible = true;\n isBuilding = true;\n updateContainer();\n }\n function hide() {\n isBuilding = false;\n // Wait for the fade out transition to complete\n timeoutId = setTimeout(()=>{\n isVisible = false;\n updateContainer();\n }, 100);\n updateContainer();\n }\n function handleMessage(obj) {\n if (!(\"action\" in obj)) {\n return;\n }\n // eslint-disable-next-line default-case\n switch(obj.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILDING:\n show();\n break;\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SYNC:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.FINISH_BUILDING:\n hide();\n break;\n }\n }\n toggleCallback({\n show,\n hide\n });\n function updateContainer() {\n if (isBuilding) {\n container.classList.add(\"\" + prefix + \"building\");\n } else {\n container.classList.remove(\"\" + prefix + \"building\");\n }\n if (isVisible) {\n container.classList.add(\"\" + prefix + \"visible\");\n } else {\n container.classList.remove(\"\" + prefix + \"visible\");\n }\n }\n}\nfunction createContainer(prefix) {\n const container = document.createElement(\"div\");\n container.id = \"\" + prefix + \"container\";\n container.innerHTML = '\\n <div id=\"' + prefix + 'icon-wrapper\">\\n <svg viewBox=\"0 0 226 200\">\\n <defs>\\n <linearGradient\\n x1=\"114.720775%\"\\n y1=\"181.283245%\"\\n x2=\"39.5399306%\"\\n y2=\"100%\"\\n id=\"' + prefix + 'linear-gradient\"\\n >\\n <stop stop-color=\"#000000\" offset=\"0%\" />\\n <stop stop-color=\"#FFFFFF\" offset=\"100%\" />\\n </linearGradient>\\n </defs>\\n <g id=\"' + prefix + 'icon-group\" fill=\"none\" stroke=\"url(#' + prefix + 'linear-gradient)\" stroke-width=\"18\">\\n <path d=\"M113,5.08219117 L4.28393801,197.5 L221.716062,197.5 L113,5.08219117 Z\" />\\n </g>\\n </svg>\\n </div>\\n ';\n return container;\n}\nfunction createCss(prefix, param) {\n let { horizontalProperty, verticalProperty } = param;\n const css = document.createElement(\"style\");\n css.textContent = \"\\n #\" + prefix + \"container {\\n position: absolute;\\n \" + verticalProperty + \": 10px;\\n \" + horizontalProperty + \": 30px;\\n\\n border-radius: 3px;\\n background: #000;\\n color: #fff;\\n font: initial;\\n cursor: initial;\\n letter-spacing: initial;\\n text-shadow: initial;\\n text-transform: initial;\\n visibility: initial;\\n\\n padding: 7px 10px 8px 10px;\\n align-items: center;\\n box-shadow: 0 11px 40px 0 rgba(0, 0, 0, 0.25), 0 2px 10px 0 rgba(0, 0, 0, 0.12);\\n\\n display: none;\\n opacity: 0;\\n transition: opacity 0.1s ease, \" + verticalProperty + \" 0.1s ease;\\n animation: \" + prefix + \"fade-in 0.1s ease-in-out;\\n }\\n\\n #\" + prefix + \"container.\" + prefix + \"visible {\\n display: flex;\\n }\\n\\n #\" + prefix + \"container.\" + prefix + \"building {\\n \" + verticalProperty + \": 20px;\\n opacity: 1;\\n }\\n\\n #\" + prefix + \"icon-wrapper {\\n width: 16px;\\n height: 16px;\\n }\\n\\n #\" + prefix + \"icon-wrapper > svg {\\n width: 100%;\\n height: 100%;\\n }\\n\\n #\" + prefix + \"icon-group {\\n animation: \" + prefix + \"strokedash 1s ease-in-out both infinite;\\n }\\n\\n @keyframes \" + prefix + \"fade-in {\\n from {\\n \" + verticalProperty + \": 10px;\\n opacity: 0;\\n }\\n to {\\n \" + verticalProperty + \": 20px;\\n opacity: 1;\\n }\\n }\\n\\n @keyframes \" + prefix + \"strokedash {\\n 0% {\\n stroke-dasharray: 0 226;\\n }\\n 80%,\\n 100% {\\n stroke-dasharray: 659 226;\\n }\\n }\\n \";\n return css;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=dev-build-watcher.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvZGV2LWJ1aWxkLXdhdGNoZXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsMERBQTBELEdBQWdCO0FBQzFFQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsb0JBQW9CQyxtQkFBT0EsQ0FBQyxzR0FBcUM7QUFDdkUsTUFBTUMsYUFBYUQsbUJBQU9BLENBQUMsaUdBQTJCO0FBQ3RELFNBQVNGLHVCQUF1QkksY0FBYyxFQUFFQyxRQUFRO0lBQ3BELElBQUlBLGFBQWEsS0FBSyxHQUFHQSxXQUFXO0lBQ3BDLE1BQU1DLGFBQWFDLFNBQVNDLGFBQWEsQ0FBQztJQUMxQyxNQUFNLENBQUNDLGtCQUFrQkMsbUJBQW1CLEdBQUdMLFNBQVNNLEtBQUssQ0FBQyxLQUFLO0lBQ25FTCxXQUFXTSxFQUFFLEdBQUc7SUFDaEIsZ0VBQWdFO0lBQ2hFTixXQUFXTyxLQUFLLENBQUNSLFFBQVEsR0FBRztJQUM1Qiw0REFBNEQ7SUFDNURDLFdBQVdPLEtBQUssQ0FBQ0osaUJBQWlCLEdBQUc7SUFDckMsNERBQTREO0lBQzVESCxXQUFXTyxLQUFLLENBQUNILG1CQUFtQixHQUFHO0lBQ3ZDSixXQUFXTyxLQUFLLENBQUNDLEtBQUssR0FBRztJQUN6QlIsV0FBV08sS0FBSyxDQUFDRSxNQUFNLEdBQUc7SUFDMUJULFdBQVdPLEtBQUssQ0FBQ0csTUFBTSxHQUFHO0lBQzFCVCxTQUFTVSxJQUFJLENBQUNDLFdBQVcsQ0FBQ1o7SUFDMUIsSUFBSWE7SUFDSixJQUFJQyxTQUFTO0lBQ2IsSUFBSWQsV0FBV2UsWUFBWSxFQUFFO1FBQ3pCRixhQUFhYixXQUFXZSxZQUFZLENBQUM7WUFDakNDLE1BQU07UUFDVjtJQUNKLE9BQU87UUFDSCxpRUFBaUU7UUFDakUsMkRBQTJEO1FBQzNELHVCQUF1QjtRQUN2QkgsYUFBYWI7UUFDYmMsU0FBUztJQUNiO0lBQ0EsWUFBWTtJQUNaLE1BQU1HLFlBQVlDLGdCQUFnQko7SUFDbENELFdBQVdELFdBQVcsQ0FBQ0s7SUFDdkIsTUFBTTtJQUNOLE1BQU1FLE1BQU1DLFVBQVVOLFFBQVE7UUFDMUJWO1FBQ0FEO0lBQ0o7SUFDQVUsV0FBV0QsV0FBVyxDQUFDTztJQUN2QixRQUFRO0lBQ1IsSUFBSUUsWUFBWTtJQUNoQixJQUFJQyxhQUFhO0lBQ2pCLElBQUlDLFlBQVk7SUFDaEIsZ0JBQWdCO0lBQ2YsSUFBRzFCLFdBQVcyQixrQkFBa0IsRUFBRSxDQUFDQztRQUNoQyxJQUFJO1lBQ0FDLGNBQWNEO1FBQ2xCLEVBQUUsT0FBT0UsR0FBRyxDQUFDO0lBQ2pCO0lBQ0EsU0FBU0M7UUFDTEwsYUFBYU0sYUFBYU47UUFDMUJGLFlBQVk7UUFDWkMsYUFBYTtRQUNiUTtJQUNKO0lBQ0EsU0FBU0M7UUFDTFQsYUFBYTtRQUNiLCtDQUErQztRQUMvQ0MsWUFBWVMsV0FBVztZQUNuQlgsWUFBWTtZQUNaUztRQUNKLEdBQUc7UUFDSEE7SUFDSjtJQUNBLFNBQVNKLGNBQWNELEdBQUc7UUFDdEIsSUFBSSxDQUFFLGFBQVlBLEdBQUUsR0FBSTtZQUNwQjtRQUNKO1FBQ0Esd0NBQXdDO1FBQ3hDLE9BQU9BLElBQUlRLE1BQU07WUFDYixLQUFLdEMsa0JBQWtCdUMsMkJBQTJCLENBQUNDLFFBQVE7Z0JBQ3ZEUDtnQkFDQTtZQUNKLEtBQUtqQyxrQkFBa0J1QywyQkFBMkIsQ0FBQ0UsS0FBSztZQUN4RCxLQUFLekMsa0JBQWtCdUMsMkJBQTJCLENBQUNHLElBQUk7WUFDdkQsS0FBSzFDLGtCQUFrQnVDLDJCQUEyQixDQUFDSSxlQUFlO2dCQUM5RFA7Z0JBQ0E7UUFDUjtJQUNKO0lBQ0FqQyxlQUFlO1FBQ1g4QjtRQUNBRztJQUNKO0lBQ0EsU0FBU0Q7UUFDTCxJQUFJUixZQUFZO1lBQ1pMLFVBQVVzQixTQUFTLENBQUNDLEdBQUcsQ0FBQyxLQUFLMUIsU0FBUztRQUMxQyxPQUFPO1lBQ0hHLFVBQVVzQixTQUFTLENBQUNFLE1BQU0sQ0FBQyxLQUFLM0IsU0FBUztRQUM3QztRQUNBLElBQUlPLFdBQVc7WUFDWEosVUFBVXNCLFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLEtBQUsxQixTQUFTO1FBQzFDLE9BQU87WUFDSEcsVUFBVXNCLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLEtBQUszQixTQUFTO1FBQzdDO0lBQ0o7QUFDSjtBQUNBLFNBQVNJLGdCQUFnQkosTUFBTTtJQUMzQixNQUFNRyxZQUFZaEIsU0FBU0MsYUFBYSxDQUFDO0lBQ3pDZSxVQUFVWCxFQUFFLEdBQUcsS0FBS1EsU0FBUztJQUM3QkcsVUFBVXlCLFNBQVMsR0FBRyxvQkFBb0I1QixTQUFTLG9PQUFvT0EsU0FBUyxpTkFBaU5BLFNBQVMsMENBQTBDQSxTQUFTO0lBQzdpQixPQUFPRztBQUNYO0FBQ0EsU0FBU0csVUFBVU4sTUFBTSxFQUFFNkIsS0FBSztJQUM1QixJQUFJLEVBQUV2QyxrQkFBa0IsRUFBRUQsZ0JBQWdCLEVBQUUsR0FBR3dDO0lBQy9DLE1BQU14QixNQUFNbEIsU0FBU0MsYUFBYSxDQUFDO0lBQ25DaUIsSUFBSXlCLFdBQVcsR0FBRyxZQUFZOUIsU0FBUyxtREFBbURYLG1CQUFtQixvQkFBb0JDLHFCQUFxQix3ZUFBd2VELG1CQUFtQixtQ0FBbUNXLFNBQVMsOENBQThDQSxTQUFTLGVBQWVBLFNBQVMsb0RBQW9EQSxTQUFTLGVBQWVBLFNBQVMsdUJBQXVCWCxtQkFBbUIsK0NBQStDVyxTQUFTLDRFQUE0RUEsU0FBUyxrRkFBa0ZBLFNBQVMsb0NBQW9DQSxTQUFTLHVFQUF1RUEsU0FBUyxzQ0FBc0NYLG1CQUFtQixnRUFBZ0VBLG1CQUFtQixvRUFBb0VXLFNBQVM7SUFDejhDLE9BQU9LO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBTzdCLFFBQVF1RCxPQUFPLEtBQUssY0FBZSxPQUFPdkQsUUFBUXVELE9BQU8sS0FBSyxZQUFZdkQsUUFBUXVELE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3ZELFFBQVF1RCxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLMUQsT0FBT0MsY0FBYyxDQUFDQyxRQUFRdUQsT0FBTyxFQUFFLGNBQWM7UUFBRXRELE9BQU87SUFBSztJQUNuRUgsT0FBTzJELE1BQU0sQ0FBQ3pELFFBQVF1RCxPQUFPLEVBQUV2RDtJQUMvQjBELE9BQU8xRCxPQUFPLEdBQUdBLFFBQVF1RCxPQUFPO0FBQ2xDLEVBRUEsNkNBQTZDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9kZXYtYnVpbGQtd2F0Y2hlci5qcz83YjM0Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxpemVCdWlsZFdhdGNoZXI7XG4gICAgfVxufSk7XG5jb25zdCBfaG90cmVsb2FkZXJ0eXBlcyA9IHJlcXVpcmUoXCIuLi8uLi9zZXJ2ZXIvZGV2L2hvdC1yZWxvYWRlci10eXBlc1wiKTtcbmNvbnN0IF93ZWJzb2NrZXQgPSByZXF1aXJlKFwiLi9lcnJvci1vdmVybGF5L3dlYnNvY2tldFwiKTtcbmZ1bmN0aW9uIGluaXRpYWxpemVCdWlsZFdhdGNoZXIodG9nZ2xlQ2FsbGJhY2ssIHBvc2l0aW9uKSB7XG4gICAgaWYgKHBvc2l0aW9uID09PSB2b2lkIDApIHBvc2l0aW9uID0gXCJib3R0b20tcmlnaHRcIjtcbiAgICBjb25zdCBzaGFkb3dIb3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBjb25zdCBbdmVydGljYWxQcm9wZXJ0eSwgaG9yaXpvbnRhbFByb3BlcnR5XSA9IHBvc2l0aW9uLnNwbGl0KFwiLVwiLCAyKTtcbiAgICBzaGFkb3dIb3N0LmlkID0gXCJfX25leHQtYnVpbGQtd2F0Y2hlclwiO1xuICAgIC8vIE1ha2Ugc3VyZSBjb250YWluZXIgaXMgZml4ZWQgYW5kIG9uIGEgaGlnaCB6SW5kZXggc28gaXQgc2hvd3NcbiAgICBzaGFkb3dIb3N0LnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiO1xuICAgIC8vIEVuc3VyZSBjb250YWluZXIncyBwb3NpdGlvbiB0byBiZSB0b3Agb3IgYm90dG9tIChkZWZhdWx0KVxuICAgIHNoYWRvd0hvc3Quc3R5bGVbdmVydGljYWxQcm9wZXJ0eV0gPSBcIjEwcHhcIjtcbiAgICAvLyBFbnN1cmUgY29udGFpbmVyJ3MgcG9zaXRpb24gdG8gYmUgbGVmdCBvciByaWdodCAoZGVmYXVsdClcbiAgICBzaGFkb3dIb3N0LnN0eWxlW2hvcml6b250YWxQcm9wZXJ0eV0gPSBcIjIwcHhcIjtcbiAgICBzaGFkb3dIb3N0LnN0eWxlLndpZHRoID0gXCIwXCI7XG4gICAgc2hhZG93SG9zdC5zdHlsZS5oZWlnaHQgPSBcIjBcIjtcbiAgICBzaGFkb3dIb3N0LnN0eWxlLnpJbmRleCA9IFwiOTk5OTlcIjtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNoYWRvd0hvc3QpO1xuICAgIGxldCBzaGFkb3dSb290O1xuICAgIGxldCBwcmVmaXggPSBcIlwiO1xuICAgIGlmIChzaGFkb3dIb3N0LmF0dGFjaFNoYWRvdykge1xuICAgICAgICBzaGFkb3dSb290ID0gc2hhZG93SG9zdC5hdHRhY2hTaGFkb3coe1xuICAgICAgICAgICAgbW9kZTogXCJvcGVuXCJcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgYXR0YWNoU2hhZG93IGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnRcbiAgICAgICAgLy8gdGhlIFNoYWRvdyBET00sIHdlIG5lZWQgdG8gcHJlZml4IGFsbCB0aGUgbmFtZXMgc28gdGhlcmVcbiAgICAgICAgLy8gd2lsbCBiZSBubyBjb25mbGljdHNcbiAgICAgICAgc2hhZG93Um9vdCA9IHNoYWRvd0hvc3Q7XG4gICAgICAgIHByZWZpeCA9IFwiX19uZXh0LWJ1aWxkLXdhdGNoZXItXCI7XG4gICAgfVxuICAgIC8vIENvbnRhaW5lclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNyZWF0ZUNvbnRhaW5lcihwcmVmaXgpO1xuICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTtcbiAgICAvLyBDU1NcbiAgICBjb25zdCBjc3MgPSBjcmVhdGVDc3MocHJlZml4LCB7XG4gICAgICAgIGhvcml6b250YWxQcm9wZXJ0eSxcbiAgICAgICAgdmVydGljYWxQcm9wZXJ0eVxuICAgIH0pO1xuICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoY3NzKTtcbiAgICAvLyBTdGF0ZVxuICAgIGxldCBpc1Zpc2libGUgPSBmYWxzZTtcbiAgICBsZXQgaXNCdWlsZGluZyA9IGZhbHNlO1xuICAgIGxldCB0aW1lb3V0SWQgPSBudWxsO1xuICAgIC8vIEhhbmRsZSBldmVudHNcbiAgICAoMCwgX3dlYnNvY2tldC5hZGRNZXNzYWdlTGlzdGVuZXIpKChvYmopPT57XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBoYW5kbGVNZXNzYWdlKG9iaik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgICAgdGltZW91dElkICYmIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICBpc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICBpc0J1aWxkaW5nID0gdHJ1ZTtcbiAgICAgICAgdXBkYXRlQ29udGFpbmVyKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICAgIGlzQnVpbGRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGZhZGUgb3V0IHRyYW5zaXRpb24gdG8gY29tcGxldGVcbiAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB1cGRhdGVDb250YWluZXIoKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgdXBkYXRlQ29udGFpbmVyKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2Uob2JqKSB7XG4gICAgICAgIGlmICghKFwiYWN0aW9uXCIgaW4gb2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICAgICAgc3dpdGNoKG9iai5hY3Rpb24pe1xuICAgICAgICAgICAgY2FzZSBfaG90cmVsb2FkZXJ0eXBlcy5ITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuQlVJTERJTkc6XG4gICAgICAgICAgICAgICAgc2hvdygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBfaG90cmVsb2FkZXJ0eXBlcy5ITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuQlVJTFQ6XG4gICAgICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TWU5DOlxuICAgICAgICAgICAgY2FzZSBfaG90cmVsb2FkZXJ0eXBlcy5ITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuRklOSVNIX0JVSUxESU5HOlxuICAgICAgICAgICAgICAgIGhpZGUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b2dnbGVDYWxsYmFjayh7XG4gICAgICAgIHNob3csXG4gICAgICAgIGhpZGVcbiAgICB9KTtcbiAgICBmdW5jdGlvbiB1cGRhdGVDb250YWluZXIoKSB7XG4gICAgICAgIGlmIChpc0J1aWxkaW5nKSB7XG4gICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZChcIlwiICsgcHJlZml4ICsgXCJidWlsZGluZ1wiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwiXCIgKyBwcmVmaXggKyBcImJ1aWxkaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiXCIgKyBwcmVmaXggKyBcInZpc2libGVcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcIlwiICsgcHJlZml4ICsgXCJ2aXNpYmxlXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlQ29udGFpbmVyKHByZWZpeCkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgY29udGFpbmVyLmlkID0gXCJcIiArIHByZWZpeCArIFwiY29udGFpbmVyXCI7XG4gICAgY29udGFpbmVyLmlubmVySFRNTCA9ICdcXG4gICAgPGRpdiBpZD1cIicgKyBwcmVmaXggKyAnaWNvbi13cmFwcGVyXCI+XFxuICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDIyNiAyMDBcIj5cXG4gICAgICAgIDxkZWZzPlxcbiAgICAgICAgICA8bGluZWFyR3JhZGllbnRcXG4gICAgICAgICAgICB4MT1cIjExNC43MjA3NzUlXCJcXG4gICAgICAgICAgICB5MT1cIjE4MS4yODMyNDUlXCJcXG4gICAgICAgICAgICB4Mj1cIjM5LjUzOTkzMDYlXCJcXG4gICAgICAgICAgICB5Mj1cIjEwMCVcIlxcbiAgICAgICAgICAgIGlkPVwiJyArIHByZWZpeCArICdsaW5lYXItZ3JhZGllbnRcIlxcbiAgICAgICAgICA+XFxuICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj1cIiMwMDAwMDBcIiBvZmZzZXQ9XCIwJVwiIC8+XFxuICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj1cIiNGRkZGRkZcIiBvZmZzZXQ9XCIxMDAlXCIgLz5cXG4gICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cXG4gICAgICAgIDwvZGVmcz5cXG4gICAgICAgIDxnIGlkPVwiJyArIHByZWZpeCArICdpY29uLWdyb3VwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJ1cmwoIycgKyBwcmVmaXggKyAnbGluZWFyLWdyYWRpZW50KVwiIHN0cm9rZS13aWR0aD1cIjE4XCI+XFxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTEzLDUuMDgyMTkxMTcgTDQuMjgzOTM4MDEsMTk3LjUgTDIyMS43MTYwNjIsMTk3LjUgTDExMyw1LjA4MjE5MTE3IFpcIiAvPlxcbiAgICAgICAgPC9nPlxcbiAgICAgIDwvc3ZnPlxcbiAgICA8L2Rpdj5cXG4gICc7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNzcyhwcmVmaXgsIHBhcmFtKSB7XG4gICAgbGV0IHsgaG9yaXpvbnRhbFByb3BlcnR5LCB2ZXJ0aWNhbFByb3BlcnR5IH0gPSBwYXJhbTtcbiAgICBjb25zdCBjc3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgY3NzLnRleHRDb250ZW50ID0gXCJcXG4gICAgI1wiICsgcHJlZml4ICsgXCJjb250YWluZXIge1xcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICBcIiArIHZlcnRpY2FsUHJvcGVydHkgKyBcIjogMTBweDtcXG4gICAgICBcIiArIGhvcml6b250YWxQcm9wZXJ0eSArIFwiOiAzMHB4O1xcblxcbiAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gICAgICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgICAgIGNvbG9yOiAjZmZmO1xcbiAgICAgIGZvbnQ6IGluaXRpYWw7XFxuICAgICAgY3Vyc29yOiBpbml0aWFsO1xcbiAgICAgIGxldHRlci1zcGFjaW5nOiBpbml0aWFsO1xcbiAgICAgIHRleHQtc2hhZG93OiBpbml0aWFsO1xcbiAgICAgIHRleHQtdHJhbnNmb3JtOiBpbml0aWFsO1xcbiAgICAgIHZpc2liaWxpdHk6IGluaXRpYWw7XFxuXFxuICAgICAgcGFkZGluZzogN3B4IDEwcHggOHB4IDEwcHg7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICBib3gtc2hhZG93OiAwIDExcHggNDBweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSksIDAgMnB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xcblxcbiAgICAgIGRpc3BsYXk6IG5vbmU7XFxuICAgICAgb3BhY2l0eTogMDtcXG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMXMgZWFzZSwgXCIgKyB2ZXJ0aWNhbFByb3BlcnR5ICsgXCIgMC4xcyBlYXNlO1xcbiAgICAgIGFuaW1hdGlvbjogXCIgKyBwcmVmaXggKyBcImZhZGUtaW4gMC4xcyBlYXNlLWluLW91dDtcXG4gICAgfVxcblxcbiAgICAjXCIgKyBwcmVmaXggKyBcImNvbnRhaW5lci5cIiArIHByZWZpeCArIFwidmlzaWJsZSB7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgfVxcblxcbiAgICAjXCIgKyBwcmVmaXggKyBcImNvbnRhaW5lci5cIiArIHByZWZpeCArIFwiYnVpbGRpbmcge1xcbiAgICAgIFwiICsgdmVydGljYWxQcm9wZXJ0eSArIFwiOiAyMHB4O1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgIH1cXG5cXG4gICAgI1wiICsgcHJlZml4ICsgXCJpY29uLXdyYXBwZXIge1xcbiAgICAgIHdpZHRoOiAxNnB4O1xcbiAgICAgIGhlaWdodDogMTZweDtcXG4gICAgfVxcblxcbiAgICAjXCIgKyBwcmVmaXggKyBcImljb24td3JhcHBlciA+IHN2ZyB7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgaGVpZ2h0OiAxMDAlO1xcbiAgICB9XFxuXFxuICAgICNcIiArIHByZWZpeCArIFwiaWNvbi1ncm91cCB7XFxuICAgICAgYW5pbWF0aW9uOiBcIiArIHByZWZpeCArIFwic3Ryb2tlZGFzaCAxcyBlYXNlLWluLW91dCBib3RoIGluZmluaXRlO1xcbiAgICB9XFxuXFxuICAgIEBrZXlmcmFtZXMgXCIgKyBwcmVmaXggKyBcImZhZGUtaW4ge1xcbiAgICAgIGZyb20ge1xcbiAgICAgICAgXCIgKyB2ZXJ0aWNhbFByb3BlcnR5ICsgXCI6IDEwcHg7XFxuICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgIH1cXG4gICAgICB0byB7XFxuICAgICAgICBcIiArIHZlcnRpY2FsUHJvcGVydHkgKyBcIjogMjBweDtcXG4gICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIEBrZXlmcmFtZXMgXCIgKyBwcmVmaXggKyBcInN0cm9rZWRhc2gge1xcbiAgICAgIDAlIHtcXG4gICAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDAgMjI2O1xcbiAgICAgIH1cXG4gICAgICA4MCUsXFxuICAgICAgMTAwJSB7XFxuICAgICAgICBzdHJva2UtZGFzaGFycmF5OiA2NTkgMjI2O1xcbiAgICAgIH1cXG4gICAgfVxcbiAgXCI7XG4gICAgcmV0dXJuIGNzcztcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGV2LWJ1aWxkLXdhdGNoZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImluaXRpYWxpemVCdWlsZFdhdGNoZXIiLCJfaG90cmVsb2FkZXJ0eXBlcyIsInJlcXVpcmUiLCJfd2Vic29ja2V0IiwidG9nZ2xlQ2FsbGJhY2siLCJwb3NpdGlvbiIsInNoYWRvd0hvc3QiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ2ZXJ0aWNhbFByb3BlcnR5IiwiaG9yaXpvbnRhbFByb3BlcnR5Iiwic3BsaXQiLCJpZCIsInN0eWxlIiwid2lkdGgiLCJoZWlnaHQiLCJ6SW5kZXgiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJzaGFkb3dSb290IiwicHJlZml4IiwiYXR0YWNoU2hhZG93IiwibW9kZSIsImNvbnRhaW5lciIsImNyZWF0ZUNvbnRhaW5lciIsImNzcyIsImNyZWF0ZUNzcyIsImlzVmlzaWJsZSIsImlzQnVpbGRpbmciLCJ0aW1lb3V0SWQiLCJhZGRNZXNzYWdlTGlzdGVuZXIiLCJvYmoiLCJoYW5kbGVNZXNzYWdlIiwiZSIsInNob3ciLCJjbGVhclRpbWVvdXQiLCJ1cGRhdGVDb250YWluZXIiLCJoaWRlIiwic2V0VGltZW91dCIsImFjdGlvbiIsIkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUiIsIkJVSUxESU5HIiwiQlVJTFQiLCJTWU5DIiwiRklOSVNIX0JVSUxESU5HIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwiaW5uZXJIVE1MIiwicGFyYW0iLCJ0ZXh0Q29udGVudCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/dev/dev-build-watcher.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js ***! + \************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\nMIT License\n\nCopyright (c) 2015-present, Facebook, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return formatWebpackMessages;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"./node_modules/next/dist/compiled/strip-ansi/index.js\"));\n// This file is based on https://github.com/facebook/create-react-app/blob/7b1a32be6ec9f99a6c9a3c66813f3ac09c4736b9/packages/react-dev-utils/formatWebpackMessages.js\n// It's been edited to remove chalk and CRA-specific logic\nconst friendlySyntaxErrorLabel = \"Syntax error:\";\nconst WEBPACK_BREAKING_CHANGE_POLYFILLS = \"\\n\\nBREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.\";\nfunction isLikelyASyntaxError(message) {\n return (0, _stripansi.default)(message).includes(friendlySyntaxErrorLabel);\n}\nlet hadMissingSassError = false;\n// Cleans up webpack error messages.\nfunction formatMessage(message, verbose, importTraceNote) {\n // TODO: Replace this once webpack 5 is stable\n if (typeof message === \"object\" && message.message) {\n const filteredModuleTrace = message.moduleTrace && message.moduleTrace.filter((trace)=>!/next-(middleware|client-pages|route|edge-function)-loader\\.js/.test(trace.originName));\n let body = message.message;\n const breakingChangeIndex = body.indexOf(WEBPACK_BREAKING_CHANGE_POLYFILLS);\n if (breakingChangeIndex >= 0) {\n body = body.slice(0, breakingChangeIndex);\n }\n message = (message.moduleName ? (0, _stripansi.default)(message.moduleName) + \"\\n\" : \"\") + (message.file ? (0, _stripansi.default)(message.file) + \"\\n\" : \"\") + body + (message.details && verbose ? \"\\n\" + message.details : \"\") + (filteredModuleTrace && filteredModuleTrace.length ? (importTraceNote || \"\\n\\nImport trace for requested module:\") + filteredModuleTrace.map((trace)=>\"\\n\" + trace.moduleName).join(\"\") : \"\") + (message.stack && verbose ? \"\\n\" + message.stack : \"\");\n }\n let lines = message.split(\"\\n\");\n // Strip Webpack-added headers off errors/warnings\n // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n lines = lines.filter((line)=>!/Module [A-z ]+\\(from/.test(line));\n // Transform parsing error into syntax error\n // TODO: move this to our ESLint formatter?\n lines = lines.map((line)=>{\n const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n if (!parsingError) {\n return line;\n }\n const [, errorLine, errorColumn, errorMessage] = parsingError;\n return friendlySyntaxErrorLabel + \" \" + errorMessage + \" (\" + errorLine + \":\" + errorColumn + \")\";\n });\n message = lines.join(\"\\n\");\n // Smoosh syntax errors (commonly found in CSS)\n message = message.replace(/SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g, \"\" + friendlySyntaxErrorLabel + \" $3 ($1:$2)\\n\");\n // Clean up export errors\n message = message.replace(/^.*export '(.+?)' was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$2'.\");\n message = message.replace(/^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$2' does not contain a default export (imported as '$1').\");\n message = message.replace(/^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$3' (imported as '$2').\");\n lines = message.split(\"\\n\");\n // Remove leading newline\n if (lines.length > 2 && lines[1].trim() === \"\") {\n lines.splice(1, 1);\n }\n // Cleans up verbose \"module not found\" messages for files and packages.\n if (lines[1] && lines[1].indexOf(\"Module not found: \") === 0) {\n lines = [\n lines[0],\n lines[1].replace(\"Error: \", \"\").replace(\"Module not found: Cannot find file:\", \"Cannot find file:\"),\n ...lines.slice(2)\n ];\n }\n // Add helpful message for users trying to use Sass for the first time\n if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n // ./file.module.scss (<<loader info>>) => ./file.module.scss\n const firstLine = lines[0].split(\"!\");\n lines[0] = firstLine[firstLine.length - 1];\n lines[1] = \"To use Next.js' built-in Sass support, you first need to install `sass`.\\n\";\n lines[1] += \"Run `npm i sass` or `yarn add sass` inside your workspace.\\n\";\n lines[1] += \"\\nLearn more: https://nextjs.org/docs/messages/install-sass\";\n // dispose of unhelpful stack trace\n lines = lines.slice(0, 2);\n hadMissingSassError = true;\n } else if (hadMissingSassError && message.match(/(sass-loader|resolve-url-loader: CSS error)/)) {\n // dispose of unhelpful stack trace following missing sass module\n lines = [];\n }\n if (!verbose) {\n message = lines.join(\"\\n\");\n // Internal stacks are generally useless so we strip them... with the\n // exception of stacks containing `webpack:` because they're normally\n // from user code generated by Webpack. For more information see\n // https://github.com/facebook/create-react-app/pull/1050\n message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, \"\") // at ... ...:x:y\n ;\n message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, \"\") // at <anonymous>\n ;\n message = message.replace(/File was processed with these loaders:\\n(.+[\\\\/](next[\\\\/]dist[\\\\/].+|@next[\\\\/]react-refresh-utils[\\\\/]loader)\\.js\\n)*You may need an additional loader to handle the result of these loaders.\\n/g, \"\");\n lines = message.split(\"\\n\");\n }\n // Remove duplicated newlines\n lines = lines.filter((line, index, arr)=>index === 0 || line.trim() !== \"\" || line.trim() !== arr[index - 1].trim());\n // Reassemble the message\n message = lines.join(\"\\n\");\n return message.trim();\n}\nfunction formatWebpackMessages(json, verbose) {\n const formattedErrors = json.errors.map((message)=>{\n const isUnknownNextFontError = message.message.includes(\"An error occured in `next/font`.\");\n return formatMessage(message, isUnknownNextFontError || verbose);\n });\n const formattedWarnings = json.warnings.map((message)=>{\n return formatMessage(message, verbose);\n });\n // Reorder errors to put the most relevant ones first.\n let reactServerComponentsError = -1;\n for(let i = 0; i < formattedErrors.length; i++){\n const error = formattedErrors[i];\n if (error.includes(\"ReactServerComponentsError\")) {\n reactServerComponentsError = i;\n break;\n }\n }\n // Move the reactServerComponentsError to the top if it exists\n if (reactServerComponentsError !== -1) {\n const error = formattedErrors.splice(reactServerComponentsError, 1);\n formattedErrors.unshift(error[0]);\n }\n const result = {\n ...json,\n errors: formattedErrors,\n warnings: formattedWarnings\n };\n if (!verbose && result.errors.some(isLikelyASyntaxError)) {\n // If there are any syntax errors, show just them.\n result.errors = result.errors.filter(isLikelyASyntaxError);\n result.warnings = [];\n }\n return result;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=format-webpack-messages.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvZXJyb3Itb3ZlcmxheS9mb3JtYXQtd2VicGFjay1tZXNzYWdlcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNCQSxHQUFnQjtBQUNoQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsNEdBQXlDO0FBQ2xGLE1BQU1DLGFBQWEsV0FBVyxHQUFHRix5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsNEZBQStCO0FBQ25HLHFLQUFxSztBQUNySywwREFBMEQ7QUFDMUQsTUFBTUcsMkJBQTJCO0FBQ2pDLE1BQU1DLG9DQUFvQztBQUMxQyxTQUFTQyxxQkFBcUJDLE9BQU87SUFDakMsT0FBTyxDQUFDLEdBQUdMLFdBQVdNLE9BQU8sRUFBRUQsU0FBU0UsUUFBUSxDQUFDTDtBQUNyRDtBQUNBLElBQUlNLHNCQUFzQjtBQUMxQixvQ0FBb0M7QUFDcEMsU0FBU0MsY0FBY0osT0FBTyxFQUFFSyxPQUFPLEVBQUVDLGVBQWU7SUFDcEQsOENBQThDO0lBQzlDLElBQUksT0FBT04sWUFBWSxZQUFZQSxRQUFRQSxPQUFPLEVBQUU7UUFDaEQsTUFBTU8sc0JBQXNCUCxRQUFRUSxXQUFXLElBQUlSLFFBQVFRLFdBQVcsQ0FBQ0MsTUFBTSxDQUFDLENBQUNDLFFBQVEsQ0FBQyxnRUFBZ0VDLElBQUksQ0FBQ0QsTUFBTUUsVUFBVTtRQUM3SyxJQUFJQyxPQUFPYixRQUFRQSxPQUFPO1FBQzFCLE1BQU1jLHNCQUFzQkQsS0FBS0UsT0FBTyxDQUFDakI7UUFDekMsSUFBSWdCLHVCQUF1QixHQUFHO1lBQzFCRCxPQUFPQSxLQUFLRyxLQUFLLENBQUMsR0FBR0Y7UUFDekI7UUFDQWQsVUFBVSxDQUFDQSxRQUFRaUIsVUFBVSxHQUFHLENBQUMsR0FBR3RCLFdBQVdNLE9BQU8sRUFBRUQsUUFBUWlCLFVBQVUsSUFBSSxPQUFPLEVBQUMsSUFBTWpCLENBQUFBLFFBQVFrQixJQUFJLEdBQUcsQ0FBQyxHQUFHdkIsV0FBV00sT0FBTyxFQUFFRCxRQUFRa0IsSUFBSSxJQUFJLE9BQU8sRUFBQyxJQUFLTCxPQUFRYixDQUFBQSxRQUFRbUIsT0FBTyxJQUFJZCxVQUFVLE9BQU9MLFFBQVFtQixPQUFPLEdBQUcsRUFBQyxJQUFNWixDQUFBQSx1QkFBdUJBLG9CQUFvQmEsTUFBTSxHQUFHLENBQUNkLG1CQUFtQix3Q0FBdUMsSUFBS0Msb0JBQW9CYyxHQUFHLENBQUMsQ0FBQ1gsUUFBUSxPQUFPQSxNQUFNTyxVQUFVLEVBQUVLLElBQUksQ0FBQyxNQUFNLEVBQUMsSUFBTXRCLENBQUFBLFFBQVF1QixLQUFLLElBQUlsQixVQUFVLE9BQU9MLFFBQVF1QixLQUFLLEdBQUcsRUFBQztJQUM1ZDtJQUNBLElBQUlDLFFBQVF4QixRQUFReUIsS0FBSyxDQUFDO0lBQzFCLGtEQUFrRDtJQUNsRCxvRUFBb0U7SUFDcEVELFFBQVFBLE1BQU1mLE1BQU0sQ0FBQyxDQUFDaUIsT0FBTyxDQUFDLHVCQUF1QmYsSUFBSSxDQUFDZTtJQUMxRCw0Q0FBNEM7SUFDNUMsMkNBQTJDO0lBQzNDRixRQUFRQSxNQUFNSCxHQUFHLENBQUMsQ0FBQ0s7UUFDZixNQUFNQyxlQUFlLGdEQUFnREMsSUFBSSxDQUFDRjtRQUMxRSxJQUFJLENBQUNDLGNBQWM7WUFDZixPQUFPRDtRQUNYO1FBQ0EsTUFBTSxHQUFHRyxXQUFXQyxhQUFhQyxhQUFhLEdBQUdKO1FBQ2pELE9BQU85QiwyQkFBMkIsTUFBTWtDLGVBQWUsT0FBT0YsWUFBWSxNQUFNQyxjQUFjO0lBQ2xHO0lBQ0E5QixVQUFVd0IsTUFBTUYsSUFBSSxDQUFDO0lBQ3JCLCtDQUErQztJQUMvQ3RCLFVBQVVBLFFBQVFnQyxPQUFPLENBQUMsNENBQTRDLEtBQUtuQywyQkFBMkI7SUFDdEcseUJBQXlCO0lBQ3pCRyxVQUFVQSxRQUFRZ0MsT0FBTyxDQUFDLG1EQUFtRDtJQUM3RWhDLFVBQVVBLFFBQVFnQyxPQUFPLENBQUMsNkVBQTZFO0lBQ3ZHaEMsVUFBVUEsUUFBUWdDLE9BQU8sQ0FBQywyRUFBMkU7SUFDckdSLFFBQVF4QixRQUFReUIsS0FBSyxDQUFDO0lBQ3RCLHlCQUF5QjtJQUN6QixJQUFJRCxNQUFNSixNQUFNLEdBQUcsS0FBS0ksS0FBSyxDQUFDLEVBQUUsQ0FBQ1MsSUFBSSxPQUFPLElBQUk7UUFDNUNULE1BQU1VLE1BQU0sQ0FBQyxHQUFHO0lBQ3BCO0lBQ0Esd0VBQXdFO0lBQ3hFLElBQUlWLEtBQUssQ0FBQyxFQUFFLElBQUlBLEtBQUssQ0FBQyxFQUFFLENBQUNULE9BQU8sQ0FBQywwQkFBMEIsR0FBRztRQUMxRFMsUUFBUTtZQUNKQSxLQUFLLENBQUMsRUFBRTtZQUNSQSxLQUFLLENBQUMsRUFBRSxDQUFDUSxPQUFPLENBQUMsV0FBVyxJQUFJQSxPQUFPLENBQUMsdUNBQXVDO2VBQzVFUixNQUFNUixLQUFLLENBQUM7U0FDbEI7SUFDTDtJQUNBLHNFQUFzRTtJQUN0RSxJQUFJUSxLQUFLLENBQUMsRUFBRSxJQUFJQSxLQUFLLENBQUMsRUFBRSxDQUFDVyxLQUFLLENBQUMsNkJBQTZCO1FBQ3hELDZEQUE2RDtRQUM3RCxNQUFNQyxZQUFZWixLQUFLLENBQUMsRUFBRSxDQUFDQyxLQUFLLENBQUM7UUFDakNELEtBQUssQ0FBQyxFQUFFLEdBQUdZLFNBQVMsQ0FBQ0EsVUFBVWhCLE1BQU0sR0FBRyxFQUFFO1FBQzFDSSxLQUFLLENBQUMsRUFBRSxHQUFHO1FBQ1hBLEtBQUssQ0FBQyxFQUFFLElBQUk7UUFDWkEsS0FBSyxDQUFDLEVBQUUsSUFBSTtRQUNaLG1DQUFtQztRQUNuQ0EsUUFBUUEsTUFBTVIsS0FBSyxDQUFDLEdBQUc7UUFDdkJiLHNCQUFzQjtJQUMxQixPQUFPLElBQUlBLHVCQUF1QkgsUUFBUW1DLEtBQUssQ0FBQyxnREFBZ0Q7UUFDNUYsaUVBQWlFO1FBQ2pFWCxRQUFRLEVBQUU7SUFDZDtJQUNBLElBQUksQ0FBQ25CLFNBQVM7UUFDVkwsVUFBVXdCLE1BQU1GLElBQUksQ0FBQztRQUNyQixxRUFBcUU7UUFDckUscUVBQXFFO1FBQ3JFLGdFQUFnRTtRQUNoRSx5REFBeUQ7UUFDekR0QixVQUFVQSxRQUFRZ0MsT0FBTyxDQUFDLGtEQUFrRCxJQUFJLGlCQUFpQjs7UUFFakdoQyxVQUFVQSxRQUFRZ0MsT0FBTyxDQUFDLCtCQUErQixJQUFJLGlCQUFpQjs7UUFFOUVoQyxVQUFVQSxRQUFRZ0MsT0FBTyxDQUFDLHNNQUFzTTtRQUNoT1IsUUFBUXhCLFFBQVF5QixLQUFLLENBQUM7SUFDMUI7SUFDQSw2QkFBNkI7SUFDN0JELFFBQVFBLE1BQU1mLE1BQU0sQ0FBQyxDQUFDaUIsTUFBTVcsT0FBT0MsTUFBTUQsVUFBVSxLQUFLWCxLQUFLTyxJQUFJLE9BQU8sTUFBTVAsS0FBS08sSUFBSSxPQUFPSyxHQUFHLENBQUNELFFBQVEsRUFBRSxDQUFDSixJQUFJO0lBQ2pILHlCQUF5QjtJQUN6QmpDLFVBQVV3QixNQUFNRixJQUFJLENBQUM7SUFDckIsT0FBT3RCLFFBQVFpQyxJQUFJO0FBQ3ZCO0FBQ0EsU0FBU3pDLHNCQUFzQitDLElBQUksRUFBRWxDLE9BQU87SUFDeEMsTUFBTW1DLGtCQUFrQkQsS0FBS0UsTUFBTSxDQUFDcEIsR0FBRyxDQUFDLENBQUNyQjtRQUNyQyxNQUFNMEMseUJBQXlCMUMsUUFBUUEsT0FBTyxDQUFDRSxRQUFRLENBQUM7UUFDeEQsT0FBT0UsY0FBY0osU0FBUzBDLDBCQUEwQnJDO0lBQzVEO0lBQ0EsTUFBTXNDLG9CQUFvQkosS0FBS0ssUUFBUSxDQUFDdkIsR0FBRyxDQUFDLENBQUNyQjtRQUN6QyxPQUFPSSxjQUFjSixTQUFTSztJQUNsQztJQUNBLHNEQUFzRDtJQUN0RCxJQUFJd0MsNkJBQTZCLENBQUM7SUFDbEMsSUFBSSxJQUFJQyxJQUFJLEdBQUdBLElBQUlOLGdCQUFnQnBCLE1BQU0sRUFBRTBCLElBQUk7UUFDM0MsTUFBTUMsUUFBUVAsZUFBZSxDQUFDTSxFQUFFO1FBQ2hDLElBQUlDLE1BQU03QyxRQUFRLENBQUMsK0JBQStCO1lBQzlDMkMsNkJBQTZCQztZQUM3QjtRQUNKO0lBQ0o7SUFDQSw4REFBOEQ7SUFDOUQsSUFBSUQsK0JBQStCLENBQUMsR0FBRztRQUNuQyxNQUFNRSxRQUFRUCxnQkFBZ0JOLE1BQU0sQ0FBQ1csNEJBQTRCO1FBQ2pFTCxnQkFBZ0JRLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDLEVBQUU7SUFDcEM7SUFDQSxNQUFNRSxTQUFTO1FBQ1gsR0FBR1YsSUFBSTtRQUNQRSxRQUFRRDtRQUNSSSxVQUFVRDtJQUNkO0lBQ0EsSUFBSSxDQUFDdEMsV0FBVzRDLE9BQU9SLE1BQU0sQ0FBQ1MsSUFBSSxDQUFDbkQsdUJBQXVCO1FBQ3RELGtEQUFrRDtRQUNsRGtELE9BQU9SLE1BQU0sR0FBR1EsT0FBT1IsTUFBTSxDQUFDaEMsTUFBTSxDQUFDVjtRQUNyQ2tELE9BQU9MLFFBQVEsR0FBRyxFQUFFO0lBQ3hCO0lBQ0EsT0FBT0s7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPN0QsUUFBUWEsT0FBTyxLQUFLLGNBQWUsT0FBT2IsUUFBUWEsT0FBTyxLQUFLLFlBQVliLFFBQVFhLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2IsUUFBUWEsT0FBTyxDQUFDa0QsVUFBVSxLQUFLLGFBQWE7SUFDcktqRSxPQUFPQyxjQUFjLENBQUNDLFFBQVFhLE9BQU8sRUFBRSxjQUFjO1FBQUVaLE9BQU87SUFBSztJQUNuRUgsT0FBT2tFLE1BQU0sQ0FBQ2hFLFFBQVFhLE9BQU8sRUFBRWI7SUFDL0JpRSxPQUFPakUsT0FBTyxHQUFHQSxRQUFRYSxPQUFPO0FBQ2xDLEVBRUEsbURBQW1EIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9lcnJvci1vdmVybGF5L2Zvcm1hdC13ZWJwYWNrLW1lc3NhZ2VzLmpzPzc1ZWMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG5NSVQgTGljZW5zZVxuXG5Db3B5cmlnaHQgKGMpIDIwMTUtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxub2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xudG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG5mdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG5BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG5MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcblNPRlRXQVJFLlxuKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRXZWJwYWNrTWVzc2FnZXM7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX3N0cmlwYW5zaSA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpXCIpKTtcbi8vIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svY3JlYXRlLXJlYWN0LWFwcC9ibG9iLzdiMWEzMmJlNmVjOWY5OWE2YzlhM2M2NjgxM2YzYWMwOWM0NzM2YjkvcGFja2FnZXMvcmVhY3QtZGV2LXV0aWxzL2Zvcm1hdFdlYnBhY2tNZXNzYWdlcy5qc1xuLy8gSXQncyBiZWVuIGVkaXRlZCB0byByZW1vdmUgY2hhbGsgYW5kIENSQS1zcGVjaWZpYyBsb2dpY1xuY29uc3QgZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsID0gXCJTeW50YXggZXJyb3I6XCI7XG5jb25zdCBXRUJQQUNLX0JSRUFLSU5HX0NIQU5HRV9QT0xZRklMTFMgPSBcIlxcblxcbkJSRUFLSU5HIENIQU5HRTogd2VicGFjayA8IDUgdXNlZCB0byBpbmNsdWRlIHBvbHlmaWxscyBmb3Igbm9kZS5qcyBjb3JlIG1vZHVsZXMgYnkgZGVmYXVsdC5cIjtcbmZ1bmN0aW9uIGlzTGlrZWx5QVN5bnRheEVycm9yKG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpcGFuc2kuZGVmYXVsdCkobWVzc2FnZSkuaW5jbHVkZXMoZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsKTtcbn1cbmxldCBoYWRNaXNzaW5nU2Fzc0Vycm9yID0gZmFsc2U7XG4vLyBDbGVhbnMgdXAgd2VicGFjayBlcnJvciBtZXNzYWdlcy5cbmZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2UobWVzc2FnZSwgdmVyYm9zZSwgaW1wb3J0VHJhY2VOb3RlKSB7XG4gICAgLy8gVE9ETzogUmVwbGFjZSB0aGlzIG9uY2Ugd2VicGFjayA1IGlzIHN0YWJsZVxuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJvYmplY3RcIiAmJiBtZXNzYWdlLm1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRNb2R1bGVUcmFjZSA9IG1lc3NhZ2UubW9kdWxlVHJhY2UgJiYgbWVzc2FnZS5tb2R1bGVUcmFjZS5maWx0ZXIoKHRyYWNlKT0+IS9uZXh0LShtaWRkbGV3YXJlfGNsaWVudC1wYWdlc3xyb3V0ZXxlZGdlLWZ1bmN0aW9uKS1sb2FkZXJcXC5qcy8udGVzdCh0cmFjZS5vcmlnaW5OYW1lKSk7XG4gICAgICAgIGxldCBib2R5ID0gbWVzc2FnZS5tZXNzYWdlO1xuICAgICAgICBjb25zdCBicmVha2luZ0NoYW5nZUluZGV4ID0gYm9keS5pbmRleE9mKFdFQlBBQ0tfQlJFQUtJTkdfQ0hBTkdFX1BPTFlGSUxMUyk7XG4gICAgICAgIGlmIChicmVha2luZ0NoYW5nZUluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGJvZHkgPSBib2R5LnNsaWNlKDAsIGJyZWFraW5nQ2hhbmdlSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2UgPSAobWVzc2FnZS5tb2R1bGVOYW1lID8gKDAsIF9zdHJpcGFuc2kuZGVmYXVsdCkobWVzc2FnZS5tb2R1bGVOYW1lKSArIFwiXFxuXCIgOiBcIlwiKSArIChtZXNzYWdlLmZpbGUgPyAoMCwgX3N0cmlwYW5zaS5kZWZhdWx0KShtZXNzYWdlLmZpbGUpICsgXCJcXG5cIiA6IFwiXCIpICsgYm9keSArIChtZXNzYWdlLmRldGFpbHMgJiYgdmVyYm9zZSA/IFwiXFxuXCIgKyBtZXNzYWdlLmRldGFpbHMgOiBcIlwiKSArIChmaWx0ZXJlZE1vZHVsZVRyYWNlICYmIGZpbHRlcmVkTW9kdWxlVHJhY2UubGVuZ3RoID8gKGltcG9ydFRyYWNlTm90ZSB8fCBcIlxcblxcbkltcG9ydCB0cmFjZSBmb3IgcmVxdWVzdGVkIG1vZHVsZTpcIikgKyBmaWx0ZXJlZE1vZHVsZVRyYWNlLm1hcCgodHJhY2UpPT5cIlxcblwiICsgdHJhY2UubW9kdWxlTmFtZSkuam9pbihcIlwiKSA6IFwiXCIpICsgKG1lc3NhZ2Uuc3RhY2sgJiYgdmVyYm9zZSA/IFwiXFxuXCIgKyBtZXNzYWdlLnN0YWNrIDogXCJcIik7XG4gICAgfVxuICAgIGxldCBsaW5lcyA9IG1lc3NhZ2Uuc3BsaXQoXCJcXG5cIik7XG4gICAgLy8gU3RyaXAgV2VicGFjay1hZGRlZCBoZWFkZXJzIG9mZiBlcnJvcnMvd2FybmluZ3NcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrL2Jsb2IvbWFzdGVyL2xpYi9Nb2R1bGVFcnJvci5qc1xuICAgIGxpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lKT0+IS9Nb2R1bGUgW0EteiBdK1xcKGZyb20vLnRlc3QobGluZSkpO1xuICAgIC8vIFRyYW5zZm9ybSBwYXJzaW5nIGVycm9yIGludG8gc3ludGF4IGVycm9yXG4gICAgLy8gVE9ETzogbW92ZSB0aGlzIHRvIG91ciBFU0xpbnQgZm9ybWF0dGVyP1xuICAgIGxpbmVzID0gbGluZXMubWFwKChsaW5lKT0+e1xuICAgICAgICBjb25zdCBwYXJzaW5nRXJyb3IgPSAvTGluZSAoXFxkKyk6KD86KFxcZCspOik/XFxzKlBhcnNpbmcgZXJyb3I6ICguKykkLy5leGVjKGxpbmUpO1xuICAgICAgICBpZiAoIXBhcnNpbmdFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgWywgZXJyb3JMaW5lLCBlcnJvckNvbHVtbiwgZXJyb3JNZXNzYWdlXSA9IHBhcnNpbmdFcnJvcjtcbiAgICAgICAgcmV0dXJuIGZyaWVuZGx5U3ludGF4RXJyb3JMYWJlbCArIFwiIFwiICsgZXJyb3JNZXNzYWdlICsgXCIgKFwiICsgZXJyb3JMaW5lICsgXCI6XCIgKyBlcnJvckNvbHVtbiArIFwiKVwiO1xuICAgIH0pO1xuICAgIG1lc3NhZ2UgPSBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIC8vIFNtb29zaCBzeW50YXggZXJyb3JzIChjb21tb25seSBmb3VuZCBpbiBDU1MpXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvU3ludGF4RXJyb3JcXHMrXFwoKFxcZCspOihcXGQrKVxcKVxccyooLis/KVxcbi9nLCBcIlwiICsgZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsICsgXCIgJDMgKCQxOiQyKVxcblwiKTtcbiAgICAvLyBDbGVhbiB1cCBleHBvcnQgZXJyb3JzXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXi4qZXhwb3J0ICcoLis/KScgd2FzIG5vdCBmb3VuZCBpbiAnKC4rPyknLiokL2dtLCBcIkF0dGVtcHRlZCBpbXBvcnQgZXJyb3I6ICckMScgaXMgbm90IGV4cG9ydGVkIGZyb20gJyQyJy5cIik7XG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXi4qZXhwb3J0ICdkZWZhdWx0JyBcXChpbXBvcnRlZCBhcyAnKC4rPyknXFwpIHdhcyBub3QgZm91bmQgaW4gJyguKz8pJy4qJC9nbSwgXCJBdHRlbXB0ZWQgaW1wb3J0IGVycm9yOiAnJDInIGRvZXMgbm90IGNvbnRhaW4gYSBkZWZhdWx0IGV4cG9ydCAoaW1wb3J0ZWQgYXMgJyQxJykuXCIpO1xuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL14uKmV4cG9ydCAnKC4rPyknIFxcKGltcG9ydGVkIGFzICcoLis/KSdcXCkgd2FzIG5vdCBmb3VuZCBpbiAnKC4rPyknLiokL2dtLCBcIkF0dGVtcHRlZCBpbXBvcnQgZXJyb3I6ICckMScgaXMgbm90IGV4cG9ydGVkIGZyb20gJyQzJyAoaW1wb3J0ZWQgYXMgJyQyJykuXCIpO1xuICAgIGxpbmVzID0gbWVzc2FnZS5zcGxpdChcIlxcblwiKTtcbiAgICAvLyBSZW1vdmUgbGVhZGluZyBuZXdsaW5lXG4gICAgaWYgKGxpbmVzLmxlbmd0aCA+IDIgJiYgbGluZXNbMV0udHJpbSgpID09PSBcIlwiKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSgxLCAxKTtcbiAgICB9XG4gICAgLy8gQ2xlYW5zIHVwIHZlcmJvc2UgXCJtb2R1bGUgbm90IGZvdW5kXCIgbWVzc2FnZXMgZm9yIGZpbGVzIGFuZCBwYWNrYWdlcy5cbiAgICBpZiAobGluZXNbMV0gJiYgbGluZXNbMV0uaW5kZXhPZihcIk1vZHVsZSBub3QgZm91bmQ6IFwiKSA9PT0gMCkge1xuICAgICAgICBsaW5lcyA9IFtcbiAgICAgICAgICAgIGxpbmVzWzBdLFxuICAgICAgICAgICAgbGluZXNbMV0ucmVwbGFjZShcIkVycm9yOiBcIiwgXCJcIikucmVwbGFjZShcIk1vZHVsZSBub3QgZm91bmQ6IENhbm5vdCBmaW5kIGZpbGU6XCIsIFwiQ2Fubm90IGZpbmQgZmlsZTpcIiksXG4gICAgICAgICAgICAuLi5saW5lcy5zbGljZSgyKVxuICAgICAgICBdO1xuICAgIH1cbiAgICAvLyBBZGQgaGVscGZ1bCBtZXNzYWdlIGZvciB1c2VycyB0cnlpbmcgdG8gdXNlIFNhc3MgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgaWYgKGxpbmVzWzFdICYmIGxpbmVzWzFdLm1hdGNoKC9DYW5ub3QgZmluZCBtb2R1bGUuK3Nhc3MvKSkge1xuICAgICAgICAvLyAuL2ZpbGUubW9kdWxlLnNjc3MgKDw8bG9hZGVyIGluZm8+PikgPT4gLi9maWxlLm1vZHVsZS5zY3NzXG4gICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGxpbmVzWzBdLnNwbGl0KFwiIVwiKTtcbiAgICAgICAgbGluZXNbMF0gPSBmaXJzdExpbmVbZmlyc3RMaW5lLmxlbmd0aCAtIDFdO1xuICAgICAgICBsaW5lc1sxXSA9IFwiVG8gdXNlIE5leHQuanMnIGJ1aWx0LWluIFNhc3Mgc3VwcG9ydCwgeW91IGZpcnN0IG5lZWQgdG8gaW5zdGFsbCBgc2Fzc2AuXFxuXCI7XG4gICAgICAgIGxpbmVzWzFdICs9IFwiUnVuIGBucG0gaSBzYXNzYCBvciBgeWFybiBhZGQgc2Fzc2AgaW5zaWRlIHlvdXIgd29ya3NwYWNlLlxcblwiO1xuICAgICAgICBsaW5lc1sxXSArPSBcIlxcbkxlYXJuIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2luc3RhbGwtc2Fzc1wiO1xuICAgICAgICAvLyBkaXNwb3NlIG9mIHVuaGVscGZ1bCBzdGFjayB0cmFjZVxuICAgICAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKDAsIDIpO1xuICAgICAgICBoYWRNaXNzaW5nU2Fzc0Vycm9yID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGhhZE1pc3NpbmdTYXNzRXJyb3IgJiYgbWVzc2FnZS5tYXRjaCgvKHNhc3MtbG9hZGVyfHJlc29sdmUtdXJsLWxvYWRlcjogQ1NTIGVycm9yKS8pKSB7XG4gICAgICAgIC8vIGRpc3Bvc2Ugb2YgdW5oZWxwZnVsIHN0YWNrIHRyYWNlIGZvbGxvd2luZyBtaXNzaW5nIHNhc3MgbW9kdWxlXG4gICAgICAgIGxpbmVzID0gW107XG4gICAgfVxuICAgIGlmICghdmVyYm9zZSkge1xuICAgICAgICBtZXNzYWdlID0gbGluZXMuam9pbihcIlxcblwiKTtcbiAgICAgICAgLy8gSW50ZXJuYWwgc3RhY2tzIGFyZSBnZW5lcmFsbHkgdXNlbGVzcyBzbyB3ZSBzdHJpcCB0aGVtLi4uIHdpdGggdGhlXG4gICAgICAgIC8vIGV4Y2VwdGlvbiBvZiBzdGFja3MgY29udGFpbmluZyBgd2VicGFjazpgIGJlY2F1c2UgdGhleSdyZSBub3JtYWxseVxuICAgICAgICAvLyBmcm9tIHVzZXIgY29kZSBnZW5lcmF0ZWQgYnkgV2VicGFjay4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9jcmVhdGUtcmVhY3QtYXBwL3B1bGwvMTA1MFxuICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9eXFxzKmF0XFxzKCg/IXdlYnBhY2s6KS4pKjpcXGQrOlxcZCtbXFxzKV0qKFxcbnwkKS9nbSwgXCJcIikgLy8gYXQgLi4uIC4uLjp4OnlcbiAgICAgICAgO1xuICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9eXFxzKmF0XFxzPGFub255bW91cz4oXFxufCQpL2dtLCBcIlwiKSAvLyBhdCA8YW5vbnltb3VzPlxuICAgICAgICA7XG4gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL0ZpbGUgd2FzIHByb2Nlc3NlZCB3aXRoIHRoZXNlIGxvYWRlcnM6XFxuKC4rW1xcXFwvXShuZXh0W1xcXFwvXWRpc3RbXFxcXC9dLit8QG5leHRbXFxcXC9dcmVhY3QtcmVmcmVzaC11dGlsc1tcXFxcL11sb2FkZXIpXFwuanNcXG4pKllvdSBtYXkgbmVlZCBhbiBhZGRpdGlvbmFsIGxvYWRlciB0byBoYW5kbGUgdGhlIHJlc3VsdCBvZiB0aGVzZSBsb2FkZXJzLlxcbi9nLCBcIlwiKTtcbiAgICAgICAgbGluZXMgPSBtZXNzYWdlLnNwbGl0KFwiXFxuXCIpO1xuICAgIH1cbiAgICAvLyBSZW1vdmUgZHVwbGljYXRlZCBuZXdsaW5lc1xuICAgIGxpbmVzID0gbGluZXMuZmlsdGVyKChsaW5lLCBpbmRleCwgYXJyKT0+aW5kZXggPT09IDAgfHwgbGluZS50cmltKCkgIT09IFwiXCIgfHwgbGluZS50cmltKCkgIT09IGFycltpbmRleCAtIDFdLnRyaW0oKSk7XG4gICAgLy8gUmVhc3NlbWJsZSB0aGUgbWVzc2FnZVxuICAgIG1lc3NhZ2UgPSBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBtZXNzYWdlLnRyaW0oKTtcbn1cbmZ1bmN0aW9uIGZvcm1hdFdlYnBhY2tNZXNzYWdlcyhqc29uLCB2ZXJib3NlKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkRXJyb3JzID0ganNvbi5lcnJvcnMubWFwKChtZXNzYWdlKT0+e1xuICAgICAgICBjb25zdCBpc1Vua25vd25OZXh0Rm9udEVycm9yID0gbWVzc2FnZS5tZXNzYWdlLmluY2x1ZGVzKFwiQW4gZXJyb3Igb2NjdXJlZCBpbiBgbmV4dC9mb250YC5cIik7XG4gICAgICAgIHJldHVybiBmb3JtYXRNZXNzYWdlKG1lc3NhZ2UsIGlzVW5rbm93bk5leHRGb250RXJyb3IgfHwgdmVyYm9zZSk7XG4gICAgfSk7XG4gICAgY29uc3QgZm9ybWF0dGVkV2FybmluZ3MgPSBqc29uLndhcm5pbmdzLm1hcCgobWVzc2FnZSk9PntcbiAgICAgICAgcmV0dXJuIGZvcm1hdE1lc3NhZ2UobWVzc2FnZSwgdmVyYm9zZSk7XG4gICAgfSk7XG4gICAgLy8gUmVvcmRlciBlcnJvcnMgdG8gcHV0IHRoZSBtb3N0IHJlbGV2YW50IG9uZXMgZmlyc3QuXG4gICAgbGV0IHJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yID0gLTE7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZEVycm9ycy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IGVycm9yID0gZm9ybWF0dGVkRXJyb3JzW2ldO1xuICAgICAgICBpZiAoZXJyb3IuaW5jbHVkZXMoXCJSZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvclwiKSkge1xuICAgICAgICAgICAgcmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTW92ZSB0aGUgcmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgdG8gdGhlIHRvcCBpZiBpdCBleGlzdHNcbiAgICBpZiAocmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gZm9ybWF0dGVkRXJyb3JzLnNwbGljZShyZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciwgMSk7XG4gICAgICAgIGZvcm1hdHRlZEVycm9ycy51bnNoaWZ0KGVycm9yWzBdKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAuLi5qc29uLFxuICAgICAgICBlcnJvcnM6IGZvcm1hdHRlZEVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IGZvcm1hdHRlZFdhcm5pbmdzXG4gICAgfTtcbiAgICBpZiAoIXZlcmJvc2UgJiYgcmVzdWx0LmVycm9ycy5zb21lKGlzTGlrZWx5QVN5bnRheEVycm9yKSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHN5bnRheCBlcnJvcnMsIHNob3cganVzdCB0aGVtLlxuICAgICAgICByZXN1bHQuZXJyb3JzID0gcmVzdWx0LmVycm9ycy5maWx0ZXIoaXNMaWtlbHlBU3ludGF4RXJyb3IpO1xuICAgICAgICByZXN1bHQud2FybmluZ3MgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ybWF0LXdlYnBhY2stbWVzc2FnZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImZvcm1hdFdlYnBhY2tNZXNzYWdlcyIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfc3RyaXBhbnNpIiwiXyIsImZyaWVuZGx5U3ludGF4RXJyb3JMYWJlbCIsIldFQlBBQ0tfQlJFQUtJTkdfQ0hBTkdFX1BPTFlGSUxMUyIsImlzTGlrZWx5QVN5bnRheEVycm9yIiwibWVzc2FnZSIsImRlZmF1bHQiLCJpbmNsdWRlcyIsImhhZE1pc3NpbmdTYXNzRXJyb3IiLCJmb3JtYXRNZXNzYWdlIiwidmVyYm9zZSIsImltcG9ydFRyYWNlTm90ZSIsImZpbHRlcmVkTW9kdWxlVHJhY2UiLCJtb2R1bGVUcmFjZSIsImZpbHRlciIsInRyYWNlIiwidGVzdCIsIm9yaWdpbk5hbWUiLCJib2R5IiwiYnJlYWtpbmdDaGFuZ2VJbmRleCIsImluZGV4T2YiLCJzbGljZSIsIm1vZHVsZU5hbWUiLCJmaWxlIiwiZGV0YWlscyIsImxlbmd0aCIsIm1hcCIsImpvaW4iLCJzdGFjayIsImxpbmVzIiwic3BsaXQiLCJsaW5lIiwicGFyc2luZ0Vycm9yIiwiZXhlYyIsImVycm9yTGluZSIsImVycm9yQ29sdW1uIiwiZXJyb3JNZXNzYWdlIiwicmVwbGFjZSIsInRyaW0iLCJzcGxpY2UiLCJtYXRjaCIsImZpcnN0TGluZSIsImluZGV4IiwiYXJyIiwianNvbiIsImZvcm1hdHRlZEVycm9ycyIsImVycm9ycyIsImlzVW5rbm93bk5leHRGb250RXJyb3IiLCJmb3JtYXR0ZWRXYXJuaW5ncyIsIndhcm5pbmdzIiwicmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IiLCJpIiwiZXJyb3IiLCJ1bnNoaWZ0IiwicmVzdWx0Iiwic29tZSIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/dev/error-overlay/hot-dev-client.js": +/*!***************************************************************************!*\ + !*** ./node_modules/next/dist/client/dev/error-overlay/hot-dev-client.js ***! + \***************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// TODO: Remove use of `any` type. Fix no-use-before-define violations.\n/* eslint-disable @typescript-eslint/no-use-before-define */ /**\n * MIT License\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */ // This file is a modified version of the Create React App HMR dev client that\n// can be found here:\n// https://github.com/facebook/create-react-app/blob/v3.4.1/packages/react-dev-utils/webpackHotDevClient.js\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return connect;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _client = __webpack_require__(/*! next/dist/compiled/@next/react-dev-overlay/dist/client */ \"./node_modules/next/dist/compiled/@next/react-dev-overlay/dist/client.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"./node_modules/next/dist/compiled/strip-ansi/index.js\"));\nconst _websocket = __webpack_require__(/*! ./websocket */ \"./node_modules/next/dist/client/dev/error-overlay/websocket.js\");\nconst _formatwebpackmessages = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./format-webpack-messages */ \"./node_modules/next/dist/client/dev/error-overlay/format-webpack-messages.js\"));\nconst _hotreloadertypes = __webpack_require__(/*! ../../../server/dev/hot-reloader-types */ \"./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nwindow.__nextDevClientId = Math.round(Math.random() * 100 + Date.now());\nlet hadRuntimeError = false;\nlet customHmrEventHandler;\nlet MODE = \"webpack\";\nfunction connect(mode) {\n MODE = mode;\n (0, _client.register)();\n (0, _websocket.addMessageListener)((payload)=>{\n if (!(\"action\" in payload)) {\n return;\n }\n try {\n processMessage(payload);\n } catch (err) {\n var _err_stack;\n console.warn(\"[HMR] Invalid message: \" + payload + \"\\n\" + ((_err_stack = err == null ? void 0 : err.stack) != null ? _err_stack : \"\"));\n }\n });\n return {\n subscribeToHmrEvent (handler) {\n customHmrEventHandler = handler;\n },\n onUnrecoverableError () {\n hadRuntimeError = true;\n }\n };\n}\n// Remember some state related to hot module replacement.\nvar isFirstCompilation = true;\nvar mostRecentCompilationHash = null;\nvar hasCompileErrors = false;\nfunction clearOutdatedErrors() {\n // Clean up outdated compile errors, if any.\n if (typeof console !== \"undefined\" && typeof console.clear === \"function\") {\n if (hasCompileErrors) {\n console.clear();\n }\n }\n}\n// Successful compilation.\nfunction handleSuccess(updatedModules) {\n clearOutdatedErrors();\n if (MODE === \"webpack\") {\n const isHotUpdate = !isFirstCompilation || window.__NEXT_DATA__.page !== \"/_error\" && isUpdateAvailable();\n isFirstCompilation = false;\n hasCompileErrors = false;\n // Attempt to apply hot updates or reload.\n if (isHotUpdate) {\n tryApplyUpdates(onBeforeFastRefresh, onFastRefresh);\n }\n } else {\n onFastRefresh(updatedModules);\n (0, _client.onBuildOk)();\n }\n}\n// Compilation with warnings (e.g. ESLint).\nfunction handleWarnings(warnings) {\n clearOutdatedErrors();\n const isHotUpdate = !isFirstCompilation;\n isFirstCompilation = false;\n hasCompileErrors = false;\n function printWarnings() {\n // Print warnings to the console.\n const formatted = (0, _formatwebpackmessages.default)({\n warnings: warnings,\n errors: []\n });\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n var _formatted_warnings;\n for(let i = 0; i < ((_formatted_warnings = formatted.warnings) == null ? void 0 : _formatted_warnings.length); i++){\n if (i === 5) {\n console.warn(\"There were more warnings in other files.\\n\" + \"You can find a complete log in the terminal.\");\n break;\n }\n console.warn((0, _stripansi.default)(formatted.warnings[i]));\n }\n }\n }\n printWarnings();\n // Attempt to apply hot updates or reload.\n if (isHotUpdate) {\n tryApplyUpdates(onBeforeFastRefresh, onFastRefresh);\n }\n}\n// Compilation with errors (e.g. syntax error or missing modules).\nfunction handleErrors(errors) {\n clearOutdatedErrors();\n isFirstCompilation = false;\n hasCompileErrors = true;\n // \"Massage\" webpack messages.\n var formatted = (0, _formatwebpackmessages.default)({\n errors: errors,\n warnings: []\n });\n // Only show the first error.\n (0, _client.onBuildError)(formatted.errors[0]);\n // Also log them to the console.\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n for(var i = 0; i < formatted.errors.length; i++){\n console.error((0, _stripansi.default)(formatted.errors[i]));\n }\n }\n // Do not attempt to reload now.\n // We will reload on next success instead.\n if (false) {}\n}\nlet startLatency = undefined;\nfunction onBeforeFastRefresh(updatedModules) {\n if (updatedModules.length > 0) {\n // Only trigger a pending state if we have updates to apply\n // (cf. onFastRefresh)\n (0, _client.onBeforeRefresh)();\n }\n}\nfunction onFastRefresh(updatedModules) {\n if (updatedModules === void 0) updatedModules = [];\n (0, _client.onBuildOk)();\n if (updatedModules.length > 0) {\n // Only complete a pending state if we applied updates\n // (cf. onBeforeFastRefresh)\n (0, _client.onRefresh)();\n }\n if (startLatency) {\n const endLatency = Date.now();\n const latency = endLatency - startLatency;\n console.log(\"[Fast Refresh] done in \" + latency + \"ms\");\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-hmr-latency\",\n id: window.__nextDevClientId,\n startTime: startLatency,\n endTime: endLatency,\n page: window.location.pathname,\n updatedModules,\n // Whether the page (tab) was hidden at the time the event occurred.\n // This can impact the accuracy of the event's timing.\n isPageHidden: document.visibilityState === \"hidden\"\n }));\n if (self.__NEXT_HMR_LATENCY_CB) {\n self.__NEXT_HMR_LATENCY_CB(latency);\n }\n }\n}\n// There is a newer version of the code available.\nfunction handleAvailableHash(hash) {\n // Update last known compilation hash.\n mostRecentCompilationHash = hash;\n}\n// Handle messages from the server.\nfunction processMessage(obj) {\n if (!(\"action\" in obj)) {\n return;\n }\n switch(obj.action){\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILDING:\n {\n startLatency = Date.now();\n console.log(\"[Fast Refresh] rebuilding\");\n break;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT:\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SYNC:\n {\n if (obj.hash) {\n handleAvailableHash(obj.hash);\n }\n const { errors, warnings } = obj;\n const hasErrors = Boolean(errors && errors.length);\n if (hasErrors) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-error\",\n errorCount: errors.length,\n clientId: window.__nextDevClientId\n }));\n return handleErrors(errors);\n }\n const hasWarnings = Boolean(warnings && warnings.length);\n if (hasWarnings) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-warning\",\n warningCount: warnings.length,\n clientId: window.__nextDevClientId\n }));\n return handleWarnings(warnings);\n }\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-success\",\n clientId: window.__nextDevClientId\n }));\n return handleSuccess(obj.updatedModules);\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES:\n {\n window.location.reload();\n return;\n }\n case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR:\n {\n const { errorJSON } = obj;\n if (errorJSON) {\n const { message, stack } = JSON.parse(errorJSON);\n const error = new Error(message);\n error.stack = stack;\n handleErrors([\n error\n ]);\n }\n return;\n }\n default:\n {\n if (customHmrEventHandler) {\n customHmrEventHandler(obj);\n break;\n }\n break;\n }\n }\n}\n// Is there a newer version of this code available?\nfunction isUpdateAvailable() {\n /* globals __webpack_hash__ */ // __webpack_hash__ is the hash of the current compilation.\n // It's a global variable injected by Webpack.\n return mostRecentCompilationHash !== __webpack_require__.h();\n}\n// Webpack disallows updates in other states.\nfunction canApplyUpdates() {\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n return module.hot.status() === \"idle\";\n}\nfunction afterApplyUpdates(fn) {\n if (canApplyUpdates()) {\n fn();\n } else {\n function handler(status) {\n if (status === \"idle\") {\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n module.hot.removeStatusHandler(handler);\n fn();\n }\n }\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n module.hot.addStatusHandler(handler);\n }\n}\n// Attempt to update code on the fly, fall back to a hard reload.\nfunction tryApplyUpdates(onBeforeHotUpdate, onHotUpdateSuccess) {\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n if (false) {}\n if (!isUpdateAvailable() || !canApplyUpdates()) {\n (0, _client.onBuildOk)();\n return;\n }\n function handleApplyUpdates(err, updatedModules) {\n if (err || hadRuntimeError || !updatedModules) {\n if (err) {\n console.warn(\"[Fast Refresh] performing full reload\\n\\n\" + \"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\\n\" + \"You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\\n\" + \"Consider migrating the non-React component export to a separate file and importing it into both files.\\n\\n\" + \"It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\\n\" + \"Fast Refresh requires at least one parent function component in your React tree.\");\n } else if (hadRuntimeError) {\n console.warn(\"[Fast Refresh] performing full reload because your application had an unrecoverable error\");\n }\n performFullReload(err);\n return;\n }\n if (typeof onHotUpdateSuccess === \"function\") {\n // Maybe we want to do something.\n onHotUpdateSuccess(updatedModules);\n }\n if (isUpdateAvailable()) {\n // While we were updating, there was a new update! Do it again.\n // However, this time, don't trigger a pending refresh state.\n tryApplyUpdates(updatedModules.length > 0 ? undefined : onBeforeHotUpdate, updatedModules.length > 0 ? _client.onBuildOk : onHotUpdateSuccess);\n } else {\n (0, _client.onBuildOk)();\n if (false) {}\n }\n }\n // https://webpack.js.org/api/hot-module-replacement/#check\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n module.hot.check(/* autoApply */ false).then((updatedModules)=>{\n if (!updatedModules) {\n return null;\n }\n if (typeof onBeforeHotUpdate === \"function\") {\n onBeforeHotUpdate(updatedModules);\n }\n // @ts-expect-error TODO: module.hot exists but type needs to be added. Can't use `as any` here as webpack parses for `module.hot` calls.\n return module.hot.apply();\n }).then((updatedModules)=>{\n handleApplyUpdates(null, updatedModules);\n }, (err)=>{\n handleApplyUpdates(err, null);\n });\n}\nfunction performFullReload(err) {\n const stackTrace = err && (err.stack && err.stack.split(\"\\n\").slice(0, 5).join(\"\\n\") || err.message || err + \"\");\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-full-reload\",\n stackTrace,\n hadRuntimeError: !!hadRuntimeError\n }));\n window.location.reload();\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hot-dev-client.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvZXJyb3Itb3ZlcmxheS9ob3QtZGV2LWNsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQSx1RUFBdUU7QUFDdkUsMERBQTBELEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FzQjVELEdBQUcsOEVBQThFO0FBQ2xGLHFCQUFxQjtBQUNyQiwyR0FBMkc7QUFDOUY7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsNEdBQXlDO0FBQ2xGLE1BQU1DLFVBQVVELG1CQUFPQSxDQUFDLHdJQUF3RDtBQUNoRixNQUFNRSxhQUFhLFdBQVcsR0FBR0gseUJBQXlCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLDRGQUErQjtBQUNuRyxNQUFNSSxhQUFhSixtQkFBT0EsQ0FBQyxtRkFBYTtBQUN4QyxNQUFNSyx5QkFBeUIsV0FBVyxHQUFHTix5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsK0dBQTJCO0FBQzNHLE1BQU1NLG9CQUFvQk4sbUJBQU9BLENBQUMseUdBQXdDO0FBQzFFTyxPQUFPQyxpQkFBaUIsR0FBR0MsS0FBS0MsS0FBSyxDQUFDRCxLQUFLRSxNQUFNLEtBQUssTUFBTUMsS0FBS0MsR0FBRztBQUNwRSxJQUFJQyxrQkFBa0I7QUFDdEIsSUFBSUM7QUFDSixJQUFJQyxPQUFPO0FBQ1gsU0FBU2xCLFFBQVFtQixJQUFJO0lBQ2pCRCxPQUFPQztJQUNOLElBQUdoQixRQUFRaUIsUUFBUTtJQUNuQixJQUFHZCxXQUFXZSxrQkFBa0IsRUFBRSxDQUFDQztRQUNoQyxJQUFJLENBQUUsYUFBWUEsT0FBTSxHQUFJO1lBQ3hCO1FBQ0o7UUFDQSxJQUFJO1lBQ0FDLGVBQWVEO1FBQ25CLEVBQUUsT0FBT0UsS0FBSztZQUNWLElBQUlDO1lBQ0pDLFFBQVFDLElBQUksQ0FBQyw0QkFBNEJMLFVBQVUsT0FBUSxFQUFDRyxhQUFhRCxPQUFPLE9BQU8sS0FBSyxJQUFJQSxJQUFJSSxLQUFLLEtBQUssT0FBT0gsYUFBYSxFQUFDO1FBQ3ZJO0lBQ0o7SUFDQSxPQUFPO1FBQ0hJLHFCQUFxQkMsT0FBTztZQUN4QmIsd0JBQXdCYTtRQUM1QjtRQUNBQztZQUNJZixrQkFBa0I7UUFDdEI7SUFDSjtBQUNKO0FBQ0EseURBQXlEO0FBQ3pELElBQUlnQixxQkFBcUI7QUFDekIsSUFBSUMsNEJBQTRCO0FBQ2hDLElBQUlDLG1CQUFtQjtBQUN2QixTQUFTQztJQUNMLDRDQUE0QztJQUM1QyxJQUFJLE9BQU9ULFlBQVksZUFBZSxPQUFPQSxRQUFRVSxLQUFLLEtBQUssWUFBWTtRQUN2RSxJQUFJRixrQkFBa0I7WUFDbEJSLFFBQVFVLEtBQUs7UUFDakI7SUFDSjtBQUNKO0FBQ0EsMEJBQTBCO0FBQzFCLFNBQVNDLGNBQWNDLGNBQWM7SUFDakNIO0lBQ0EsSUFBSWpCLFNBQVMsV0FBVztRQUNwQixNQUFNcUIsY0FBYyxDQUFDUCxzQkFBc0J2QixPQUFPK0IsYUFBYSxDQUFDQyxJQUFJLEtBQUssYUFBYUM7UUFDdEZWLHFCQUFxQjtRQUNyQkUsbUJBQW1CO1FBQ25CLDBDQUEwQztRQUMxQyxJQUFJSyxhQUFhO1lBQ2JJLGdCQUFnQkMscUJBQXFCQztRQUN6QztJQUNKLE9BQU87UUFDSEEsY0FBY1A7UUFDYixJQUFHbkMsUUFBUTJDLFNBQVM7SUFDekI7QUFDSjtBQUNBLDJDQUEyQztBQUMzQyxTQUFTQyxlQUFlQyxRQUFRO0lBQzVCYjtJQUNBLE1BQU1JLGNBQWMsQ0FBQ1A7SUFDckJBLHFCQUFxQjtJQUNyQkUsbUJBQW1CO0lBQ25CLFNBQVNlO1FBQ0wsaUNBQWlDO1FBQ2pDLE1BQU1DLFlBQVksQ0FBQyxHQUFHM0MsdUJBQXVCNEMsT0FBTyxFQUFFO1lBQ2xESCxVQUFVQTtZQUNWSSxRQUFRLEVBQUU7UUFDZDtRQUNBLElBQUksT0FBTzFCLFlBQVksZUFBZSxPQUFPQSxRQUFRQyxJQUFJLEtBQUssWUFBWTtZQUN0RSxJQUFJMEI7WUFDSixJQUFJLElBQUlDLElBQUksR0FBR0EsSUFBSyxFQUFDRCxzQkFBc0JILFVBQVVGLFFBQVEsS0FBSyxPQUFPLEtBQUssSUFBSUssb0JBQW9CRSxNQUFNLEdBQUdELElBQUk7Z0JBQy9HLElBQUlBLE1BQU0sR0FBRztvQkFDVDVCLFFBQVFDLElBQUksQ0FBQywrQ0FBK0M7b0JBQzVEO2dCQUNKO2dCQUNBRCxRQUFRQyxJQUFJLENBQUMsQ0FBQyxHQUFHdkIsV0FBVytDLE9BQU8sRUFBRUQsVUFBVUYsUUFBUSxDQUFDTSxFQUFFO1lBQzlEO1FBQ0o7SUFDSjtJQUNBTDtJQUNBLDBDQUEwQztJQUMxQyxJQUFJVixhQUFhO1FBQ2JJLGdCQUFnQkMscUJBQXFCQztJQUN6QztBQUNKO0FBQ0Esa0VBQWtFO0FBQ2xFLFNBQVNXLGFBQWFKLE1BQU07SUFDeEJqQjtJQUNBSCxxQkFBcUI7SUFDckJFLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsSUFBSWdCLFlBQVksQ0FBQyxHQUFHM0MsdUJBQXVCNEMsT0FBTyxFQUFFO1FBQ2hEQyxRQUFRQTtRQUNSSixVQUFVLEVBQUU7SUFDaEI7SUFDQSw2QkFBNkI7SUFDNUIsSUFBRzdDLFFBQVFzRCxZQUFZLEVBQUVQLFVBQVVFLE1BQU0sQ0FBQyxFQUFFO0lBQzdDLGdDQUFnQztJQUNoQyxJQUFJLE9BQU8xQixZQUFZLGVBQWUsT0FBT0EsUUFBUWdDLEtBQUssS0FBSyxZQUFZO1FBQ3ZFLElBQUksSUFBSUosSUFBSSxHQUFHQSxJQUFJSixVQUFVRSxNQUFNLENBQUNHLE1BQU0sRUFBRUQsSUFBSTtZQUM1QzVCLFFBQVFnQyxLQUFLLENBQUMsQ0FBQyxHQUFHdEQsV0FBVytDLE9BQU8sRUFBRUQsVUFBVUUsTUFBTSxDQUFDRSxFQUFFO1FBQzdEO0lBQ0o7SUFDQSxnQ0FBZ0M7SUFDaEMsMENBQTBDO0lBQzFDLElBQUlLLEtBQTRCLEVBQUUsRUFLakM7QUFDTDtBQUNBLElBQUlLLGVBQWVDO0FBQ25CLFNBQVNyQixvQkFBb0JOLGNBQWM7SUFDdkMsSUFBSUEsZUFBZWlCLE1BQU0sR0FBRyxHQUFHO1FBQzNCLDJEQUEyRDtRQUMzRCxzQkFBc0I7UUFDckIsSUFBR3BELFFBQVErRCxlQUFlO0lBQy9CO0FBQ0o7QUFDQSxTQUFTckIsY0FBY1AsY0FBYztJQUNqQyxJQUFJQSxtQkFBbUIsS0FBSyxHQUFHQSxpQkFBaUIsRUFBRTtJQUNqRCxJQUFHbkMsUUFBUTJDLFNBQVM7SUFDckIsSUFBSVIsZUFBZWlCLE1BQU0sR0FBRyxHQUFHO1FBQzNCLHNEQUFzRDtRQUN0RCw0QkFBNEI7UUFDM0IsSUFBR3BELFFBQVFnRSxTQUFTO0lBQ3pCO0lBQ0EsSUFBSUgsY0FBYztRQUNkLE1BQU1JLGFBQWF0RCxLQUFLQyxHQUFHO1FBQzNCLE1BQU1zRCxVQUFVRCxhQUFhSjtRQUM3QnRDLFFBQVE0QyxHQUFHLENBQUMsNEJBQTRCRCxVQUFVO1FBQ2pELElBQUcvRCxXQUFXaUUsV0FBVyxFQUFFQyxLQUFLQyxTQUFTLENBQUM7WUFDdkNDLE9BQU87WUFDUEMsSUFBSWxFLE9BQU9DLGlCQUFpQjtZQUM1QmtFLFdBQVdaO1lBQ1hhLFNBQVNUO1lBQ1QzQixNQUFNaEMsT0FBT3FFLFFBQVEsQ0FBQ0MsUUFBUTtZQUM5QnpDO1lBQ0Esb0VBQW9FO1lBQ3BFLHNEQUFzRDtZQUN0RDBDLGNBQWNDLFNBQVNDLGVBQWUsS0FBSztRQUMvQztRQUNBLElBQUlwQixLQUFLcUIscUJBQXFCLEVBQUU7WUFDNUJyQixLQUFLcUIscUJBQXFCLENBQUNkO1FBQy9CO0lBQ0o7QUFDSjtBQUNBLGtEQUFrRDtBQUNsRCxTQUFTZSxvQkFBb0JDLElBQUk7SUFDN0Isc0NBQXNDO0lBQ3RDcEQsNEJBQTRCb0Q7QUFDaEM7QUFDQSxtQ0FBbUM7QUFDbkMsU0FBUzlELGVBQWUrRCxHQUFHO0lBQ3ZCLElBQUksQ0FBRSxhQUFZQSxHQUFFLEdBQUk7UUFDcEI7SUFDSjtJQUNBLE9BQU9BLElBQUlDLE1BQU07UUFDYixLQUFLL0Usa0JBQWtCZ0YsMkJBQTJCLENBQUNDLFFBQVE7WUFDdkQ7Z0JBQ0l6QixlQUFlbEQsS0FBS0MsR0FBRztnQkFDdkJXLFFBQVE0QyxHQUFHLENBQUM7Z0JBQ1o7WUFDSjtRQUNKLEtBQUs5RCxrQkFBa0JnRiwyQkFBMkIsQ0FBQ0UsS0FBSztRQUN4RCxLQUFLbEYsa0JBQWtCZ0YsMkJBQTJCLENBQUNHLElBQUk7WUFDbkQ7Z0JBQ0ksSUFBSUwsSUFBSUQsSUFBSSxFQUFFO29CQUNWRCxvQkFBb0JFLElBQUlELElBQUk7Z0JBQ2hDO2dCQUNBLE1BQU0sRUFBRWpDLE1BQU0sRUFBRUosUUFBUSxFQUFFLEdBQUdzQztnQkFDN0IsTUFBTU0sWUFBWUMsUUFBUXpDLFVBQVVBLE9BQU9HLE1BQU07Z0JBQ2pELElBQUlxQyxXQUFXO29CQUNWLElBQUd0RixXQUFXaUUsV0FBVyxFQUFFQyxLQUFLQyxTQUFTLENBQUM7d0JBQ3ZDQyxPQUFPO3dCQUNQb0IsWUFBWTFDLE9BQU9HLE1BQU07d0JBQ3pCd0MsVUFBVXRGLE9BQU9DLGlCQUFpQjtvQkFDdEM7b0JBQ0EsT0FBTzhDLGFBQWFKO2dCQUN4QjtnQkFDQSxNQUFNNEMsY0FBY0gsUUFBUTdDLFlBQVlBLFNBQVNPLE1BQU07Z0JBQ3ZELElBQUl5QyxhQUFhO29CQUNaLElBQUcxRixXQUFXaUUsV0FBVyxFQUFFQyxLQUFLQyxTQUFTLENBQUM7d0JBQ3ZDQyxPQUFPO3dCQUNQdUIsY0FBY2pELFNBQVNPLE1BQU07d0JBQzdCd0MsVUFBVXRGLE9BQU9DLGlCQUFpQjtvQkFDdEM7b0JBQ0EsT0FBT3FDLGVBQWVDO2dCQUMxQjtnQkFDQyxJQUFHMUMsV0FBV2lFLFdBQVcsRUFBRUMsS0FBS0MsU0FBUyxDQUFDO29CQUN2Q0MsT0FBTztvQkFDUHFCLFVBQVV0RixPQUFPQyxpQkFBaUI7Z0JBQ3RDO2dCQUNBLE9BQU8yQixjQUFjaUQsSUFBSWhELGNBQWM7WUFDM0M7UUFDSixLQUFLOUIsa0JBQWtCZ0YsMkJBQTJCLENBQUNVLHdCQUF3QjtZQUN2RTtnQkFDSXpGLE9BQU9xRSxRQUFRLENBQUNxQixNQUFNO2dCQUN0QjtZQUNKO1FBQ0osS0FBSzNGLGtCQUFrQmdGLDJCQUEyQixDQUFDWSxZQUFZO1lBQzNEO2dCQUNJLE1BQU0sRUFBRUMsU0FBUyxFQUFFLEdBQUdmO2dCQUN0QixJQUFJZSxXQUFXO29CQUNYLE1BQU0sRUFBRUMsT0FBTyxFQUFFMUUsS0FBSyxFQUFFLEdBQUc0QyxLQUFLK0IsS0FBSyxDQUFDRjtvQkFDdEMsTUFBTTNDLFFBQVEsSUFBSThDLE1BQU1GO29CQUN4QjVDLE1BQU05QixLQUFLLEdBQUdBO29CQUNkNEIsYUFBYTt3QkFDVEU7cUJBQ0g7Z0JBQ0w7Z0JBQ0E7WUFDSjtRQUNKO1lBQ0k7Z0JBQ0ksSUFBSXpDLHVCQUF1QjtvQkFDdkJBLHNCQUFzQnFFO29CQUN0QjtnQkFDSjtnQkFDQTtZQUNKO0lBQ1I7QUFDSjtBQUNBLG1EQUFtRDtBQUNuRCxTQUFTNUM7SUFDTCw0QkFBNEIsR0FBRywyREFBMkQ7SUFDMUYsOENBQThDO0lBQzlDLE9BQU9ULDhCQUE4QndFLHVCQUFnQkE7QUFDekQ7QUFDQSw2Q0FBNkM7QUFDN0MsU0FBU0M7SUFDTCx5SUFBeUk7SUFDekksT0FBT0MsVUFBVSxDQUFDRSxNQUFNLE9BQU87QUFDbkM7QUFDQSxTQUFTQyxrQkFBa0JDLEVBQUU7SUFDekIsSUFBSUwsbUJBQW1CO1FBQ25CSztJQUNKLE9BQU87UUFDSCxTQUFTakYsUUFBUStFLE1BQU07WUFDbkIsSUFBSUEsV0FBVyxRQUFRO2dCQUNuQix5SUFBeUk7Z0JBQ3pJRixVQUFVLENBQUNLLG1CQUFtQixDQUFDbEY7Z0JBQy9CaUY7WUFDSjtRQUNKO1FBQ0EseUlBQXlJO1FBQ3pJSixVQUFVLENBQUNNLGdCQUFnQixDQUFDbkY7SUFDaEM7QUFDSjtBQUNBLGlFQUFpRTtBQUNqRSxTQUFTYSxnQkFBZ0J1RSxpQkFBaUIsRUFBRUMsa0JBQWtCO0lBQzFELHlJQUF5STtJQUN6SSxJQUFJLEtBQVcsRUFBRSxFQUtoQjtJQUNELElBQUksQ0FBQ3pFLHVCQUF1QixDQUFDZ0UsbUJBQW1CO1FBQzNDLElBQUd2RyxRQUFRMkMsU0FBUztRQUNyQjtJQUNKO0lBQ0EsU0FBU3NFLG1CQUFtQjVGLEdBQUcsRUFBRWMsY0FBYztRQUMzQyxJQUFJZCxPQUFPUixtQkFBbUIsQ0FBQ3NCLGdCQUFnQjtZQUMzQyxJQUFJZCxLQUFLO2dCQUNMRSxRQUFRQyxJQUFJLENBQUMsOENBQThDLG1JQUFtSSxxSUFBcUksK0dBQStHLDhIQUE4SDtZQUNwakIsT0FBTyxJQUFJWCxpQkFBaUI7Z0JBQ3hCVSxRQUFRQyxJQUFJLENBQUM7WUFDakI7WUFDQTBGLGtCQUFrQjdGO1lBQ2xCO1FBQ0o7UUFDQSxJQUFJLE9BQU8yRix1QkFBdUIsWUFBWTtZQUMxQyxpQ0FBaUM7WUFDakNBLG1CQUFtQjdFO1FBQ3ZCO1FBQ0EsSUFBSUkscUJBQXFCO1lBQ3JCLCtEQUErRDtZQUMvRCw2REFBNkQ7WUFDN0RDLGdCQUFnQkwsZUFBZWlCLE1BQU0sR0FBRyxJQUFJVSxZQUFZaUQsbUJBQW1CNUUsZUFBZWlCLE1BQU0sR0FBRyxJQUFJcEQsUUFBUTJDLFNBQVMsR0FBR3FFO1FBQy9ILE9BQU87WUFDRixJQUFHaEgsUUFBUTJDLFNBQVM7WUFDckIsSUFBSWEsS0FBNEIsRUFBRSxFQU9qQztRQUNMO0lBQ0o7SUFDQSwyREFBMkQ7SUFDM0QseUlBQXlJO0lBQ3pJZ0QsVUFBVSxDQUFDVyxLQUFLLENBQUMsYUFBYSxHQUFHLE9BQU9DLElBQUksQ0FBQyxDQUFDakY7UUFDMUMsSUFBSSxDQUFDQSxnQkFBZ0I7WUFDakIsT0FBTztRQUNYO1FBQ0EsSUFBSSxPQUFPNEUsc0JBQXNCLFlBQVk7WUFDekNBLGtCQUFrQjVFO1FBQ3RCO1FBQ0EseUlBQXlJO1FBQ3pJLE9BQU9xRSxVQUFVLENBQUNhLEtBQUs7SUFDM0IsR0FBR0QsSUFBSSxDQUFDLENBQUNqRjtRQUNMOEUsbUJBQW1CLE1BQU05RTtJQUM3QixHQUFHLENBQUNkO1FBQ0E0RixtQkFBbUI1RixLQUFLO0lBQzVCO0FBQ0o7QUFDQSxTQUFTNkYsa0JBQWtCN0YsR0FBRztJQUMxQixNQUFNaUcsYUFBYWpHLE9BQVFBLENBQUFBLElBQUlJLEtBQUssSUFBSUosSUFBSUksS0FBSyxDQUFDOEYsS0FBSyxDQUFDLE1BQU1DLEtBQUssQ0FBQyxHQUFHLEdBQUdDLElBQUksQ0FBQyxTQUFTcEcsSUFBSThFLE9BQU8sSUFBSTlFLE1BQU0sRUFBQztJQUM3RyxJQUFHbEIsV0FBV2lFLFdBQVcsRUFBRUMsS0FBS0MsU0FBUyxDQUFDO1FBQ3ZDQyxPQUFPO1FBQ1ArQztRQUNBekcsaUJBQWlCLENBQUMsQ0FBQ0E7SUFDdkI7SUFDQVAsT0FBT3FFLFFBQVEsQ0FBQ3FCLE1BQU07QUFDMUI7QUFFQSxJQUFJLENBQUMsT0FBT3ZHLFFBQVF1RCxPQUFPLEtBQUssY0FBZSxPQUFPdkQsUUFBUXVELE9BQU8sS0FBSyxZQUFZdkQsUUFBUXVELE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3ZELFFBQVF1RCxPQUFPLENBQUMwRSxVQUFVLEtBQUssYUFBYTtJQUNyS25JLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXVELE9BQU8sRUFBRSxjQUFjO1FBQUV0RCxPQUFPO0lBQUs7SUFDbkVILE9BQU9vSSxNQUFNLENBQUNsSSxRQUFRdUQsT0FBTyxFQUFFdkQ7SUFDL0IrRyxPQUFPL0csT0FBTyxHQUFHQSxRQUFRdUQsT0FBTztBQUNsQyxFQUVBLDBDQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvZXJyb3Itb3ZlcmxheS9ob3QtZGV2LWNsaWVudC5qcz8xNjAwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IFJlbW92ZSB1c2Ugb2YgYGFueWAgdHlwZS4gRml4IG5vLXVzZS1iZWZvcmUtZGVmaW5lIHZpb2xhdGlvbnMuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi8gLyoqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi8gLy8gVGhpcyBmaWxlIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgQ3JlYXRlIFJlYWN0IEFwcCBITVIgZGV2IGNsaWVudCB0aGF0XG4vLyBjYW4gYmUgZm91bmQgaGVyZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9jcmVhdGUtcmVhY3QtYXBwL2Jsb2IvdjMuNC4xL3BhY2thZ2VzL3JlYWN0LWRldi11dGlscy93ZWJwYWNrSG90RGV2Q2xpZW50LmpzXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNvbm5lY3Q7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2NsaWVudCA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvQG5leHQvcmVhY3QtZGV2LW92ZXJsYXkvZGlzdC9jbGllbnRcIik7XG5jb25zdCBfc3RyaXBhbnNpID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3N0cmlwLWFuc2lcIikpO1xuY29uc3QgX3dlYnNvY2tldCA9IHJlcXVpcmUoXCIuL3dlYnNvY2tldFwiKTtcbmNvbnN0IF9mb3JtYXR3ZWJwYWNrbWVzc2FnZXMgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCIuL2Zvcm1hdC13ZWJwYWNrLW1lc3NhZ2VzXCIpKTtcbmNvbnN0IF9ob3RyZWxvYWRlcnR5cGVzID0gcmVxdWlyZShcIi4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzXCIpO1xud2luZG93Ll9fbmV4dERldkNsaWVudElkID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwICsgRGF0ZS5ub3coKSk7XG5sZXQgaGFkUnVudGltZUVycm9yID0gZmFsc2U7XG5sZXQgY3VzdG9tSG1yRXZlbnRIYW5kbGVyO1xubGV0IE1PREUgPSBcIndlYnBhY2tcIjtcbmZ1bmN0aW9uIGNvbm5lY3QobW9kZSkge1xuICAgIE1PREUgPSBtb2RlO1xuICAgICgwLCBfY2xpZW50LnJlZ2lzdGVyKSgpO1xuICAgICgwLCBfd2Vic29ja2V0LmFkZE1lc3NhZ2VMaXN0ZW5lcikoKHBheWxvYWQpPT57XG4gICAgICAgIGlmICghKFwiYWN0aW9uXCIgaW4gcGF5bG9hZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvY2Vzc01lc3NhZ2UocGF5bG9hZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdmFyIF9lcnJfc3RhY2s7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbSE1SXSBJbnZhbGlkIG1lc3NhZ2U6IFwiICsgcGF5bG9hZCArIFwiXFxuXCIgKyAoKF9lcnJfc3RhY2sgPSBlcnIgPT0gbnVsbCA/IHZvaWQgMCA6IGVyci5zdGFjaykgIT0gbnVsbCA/IF9lcnJfc3RhY2sgOiBcIlwiKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdWJzY3JpYmVUb0htckV2ZW50IChoYW5kbGVyKSB7XG4gICAgICAgICAgICBjdXN0b21IbXJFdmVudEhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICB9LFxuICAgICAgICBvblVucmVjb3ZlcmFibGVFcnJvciAoKSB7XG4gICAgICAgICAgICBoYWRSdW50aW1lRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbn1cbi8vIFJlbWVtYmVyIHNvbWUgc3RhdGUgcmVsYXRlZCB0byBob3QgbW9kdWxlIHJlcGxhY2VtZW50LlxudmFyIGlzRmlyc3RDb21waWxhdGlvbiA9IHRydWU7XG52YXIgbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCA9IG51bGw7XG52YXIgaGFzQ29tcGlsZUVycm9ycyA9IGZhbHNlO1xuZnVuY3Rpb24gY2xlYXJPdXRkYXRlZEVycm9ycygpIHtcbiAgICAvLyBDbGVhbiB1cCBvdXRkYXRlZCBjb21waWxlIGVycm9ycywgaWYgYW55LlxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgY29uc29sZS5jbGVhciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGlmIChoYXNDb21waWxlRXJyb3JzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBTdWNjZXNzZnVsIGNvbXBpbGF0aW9uLlxuZnVuY3Rpb24gaGFuZGxlU3VjY2Vzcyh1cGRhdGVkTW9kdWxlcykge1xuICAgIGNsZWFyT3V0ZGF0ZWRFcnJvcnMoKTtcbiAgICBpZiAoTU9ERSA9PT0gXCJ3ZWJwYWNrXCIpIHtcbiAgICAgICAgY29uc3QgaXNIb3RVcGRhdGUgPSAhaXNGaXJzdENvbXBpbGF0aW9uIHx8IHdpbmRvdy5fX05FWFRfREFUQV9fLnBhZ2UgIT09IFwiL19lcnJvclwiICYmIGlzVXBkYXRlQXZhaWxhYmxlKCk7XG4gICAgICAgIGlzRmlyc3RDb21waWxhdGlvbiA9IGZhbHNlO1xuICAgICAgICBoYXNDb21waWxlRXJyb3JzID0gZmFsc2U7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gYXBwbHkgaG90IHVwZGF0ZXMgb3IgcmVsb2FkLlxuICAgICAgICBpZiAoaXNIb3RVcGRhdGUpIHtcbiAgICAgICAgICAgIHRyeUFwcGx5VXBkYXRlcyhvbkJlZm9yZUZhc3RSZWZyZXNoLCBvbkZhc3RSZWZyZXNoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIG9uRmFzdFJlZnJlc2godXBkYXRlZE1vZHVsZXMpO1xuICAgICAgICAoMCwgX2NsaWVudC5vbkJ1aWxkT2spKCk7XG4gICAgfVxufVxuLy8gQ29tcGlsYXRpb24gd2l0aCB3YXJuaW5ncyAoZS5nLiBFU0xpbnQpLlxuZnVuY3Rpb24gaGFuZGxlV2FybmluZ3Mod2FybmluZ3MpIHtcbiAgICBjbGVhck91dGRhdGVkRXJyb3JzKCk7XG4gICAgY29uc3QgaXNIb3RVcGRhdGUgPSAhaXNGaXJzdENvbXBpbGF0aW9uO1xuICAgIGlzRmlyc3RDb21waWxhdGlvbiA9IGZhbHNlO1xuICAgIGhhc0NvbXBpbGVFcnJvcnMgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBwcmludFdhcm5pbmdzKCkge1xuICAgICAgICAvLyBQcmludCB3YXJuaW5ncyB0byB0aGUgY29uc29sZS5cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gKDAsIF9mb3JtYXR3ZWJwYWNrbWVzc2FnZXMuZGVmYXVsdCkoe1xuICAgICAgICAgICAgd2FybmluZ3M6IHdhcm5pbmdzLFxuICAgICAgICAgICAgZXJyb3JzOiBbXVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBjb25zb2xlLndhcm4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIF9mb3JtYXR0ZWRfd2FybmluZ3M7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgKChfZm9ybWF0dGVkX3dhcm5pbmdzID0gZm9ybWF0dGVkLndhcm5pbmdzKSA9PSBudWxsID8gdm9pZCAwIDogX2Zvcm1hdHRlZF93YXJuaW5ncy5sZW5ndGgpOyBpKyspe1xuICAgICAgICAgICAgICAgIGlmIChpID09PSA1KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZXJlIHdlcmUgbW9yZSB3YXJuaW5ncyBpbiBvdGhlciBmaWxlcy5cXG5cIiArIFwiWW91IGNhbiBmaW5kIGEgY29tcGxldGUgbG9nIGluIHRoZSB0ZXJtaW5hbC5cIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oKDAsIF9zdHJpcGFuc2kuZGVmYXVsdCkoZm9ybWF0dGVkLndhcm5pbmdzW2ldKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJpbnRXYXJuaW5ncygpO1xuICAgIC8vIEF0dGVtcHQgdG8gYXBwbHkgaG90IHVwZGF0ZXMgb3IgcmVsb2FkLlxuICAgIGlmIChpc0hvdFVwZGF0ZSkge1xuICAgICAgICB0cnlBcHBseVVwZGF0ZXMob25CZWZvcmVGYXN0UmVmcmVzaCwgb25GYXN0UmVmcmVzaCk7XG4gICAgfVxufVxuLy8gQ29tcGlsYXRpb24gd2l0aCBlcnJvcnMgKGUuZy4gc3ludGF4IGVycm9yIG9yIG1pc3NpbmcgbW9kdWxlcykuXG5mdW5jdGlvbiBoYW5kbGVFcnJvcnMoZXJyb3JzKSB7XG4gICAgY2xlYXJPdXRkYXRlZEVycm9ycygpO1xuICAgIGlzRmlyc3RDb21waWxhdGlvbiA9IGZhbHNlO1xuICAgIGhhc0NvbXBpbGVFcnJvcnMgPSB0cnVlO1xuICAgIC8vIFwiTWFzc2FnZVwiIHdlYnBhY2sgbWVzc2FnZXMuXG4gICAgdmFyIGZvcm1hdHRlZCA9ICgwLCBfZm9ybWF0d2VicGFja21lc3NhZ2VzLmRlZmF1bHQpKHtcbiAgICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgICAgIHdhcm5pbmdzOiBbXVxuICAgIH0pO1xuICAgIC8vIE9ubHkgc2hvdyB0aGUgZmlyc3QgZXJyb3IuXG4gICAgKDAsIF9jbGllbnQub25CdWlsZEVycm9yKShmb3JtYXR0ZWQuZXJyb3JzWzBdKTtcbiAgICAvLyBBbHNvIGxvZyB0aGVtIHRvIHRoZSBjb25zb2xlLlxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBmb3JtYXR0ZWQuZXJyb3JzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoKDAsIF9zdHJpcGFuc2kuZGVmYXVsdCkoZm9ybWF0dGVkLmVycm9yc1tpXSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIERvIG5vdCBhdHRlbXB0IHRvIHJlbG9hZCBub3cuXG4gICAgLy8gV2Ugd2lsbCByZWxvYWQgb24gbmV4dCBzdWNjZXNzIGluc3RlYWQuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgICAgaWYgKHNlbGYuX19ORVhUX0hNUl9DQikge1xuICAgICAgICAgICAgc2VsZi5fX05FWFRfSE1SX0NCKGZvcm1hdHRlZC5lcnJvcnNbMF0pO1xuICAgICAgICAgICAgc2VsZi5fX05FWFRfSE1SX0NCID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmxldCBzdGFydExhdGVuY3kgPSB1bmRlZmluZWQ7XG5mdW5jdGlvbiBvbkJlZm9yZUZhc3RSZWZyZXNoKHVwZGF0ZWRNb2R1bGVzKSB7XG4gICAgaWYgKHVwZGF0ZWRNb2R1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gT25seSB0cmlnZ2VyIGEgcGVuZGluZyBzdGF0ZSBpZiB3ZSBoYXZlIHVwZGF0ZXMgdG8gYXBwbHlcbiAgICAgICAgLy8gKGNmLiBvbkZhc3RSZWZyZXNoKVxuICAgICAgICAoMCwgX2NsaWVudC5vbkJlZm9yZVJlZnJlc2gpKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gb25GYXN0UmVmcmVzaCh1cGRhdGVkTW9kdWxlcykge1xuICAgIGlmICh1cGRhdGVkTW9kdWxlcyA9PT0gdm9pZCAwKSB1cGRhdGVkTW9kdWxlcyA9IFtdO1xuICAgICgwLCBfY2xpZW50Lm9uQnVpbGRPaykoKTtcbiAgICBpZiAodXBkYXRlZE1vZHVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBPbmx5IGNvbXBsZXRlIGEgcGVuZGluZyBzdGF0ZSBpZiB3ZSBhcHBsaWVkIHVwZGF0ZXNcbiAgICAgICAgLy8gKGNmLiBvbkJlZm9yZUZhc3RSZWZyZXNoKVxuICAgICAgICAoMCwgX2NsaWVudC5vblJlZnJlc2gpKCk7XG4gICAgfVxuICAgIGlmIChzdGFydExhdGVuY3kpIHtcbiAgICAgICAgY29uc3QgZW5kTGF0ZW5jeSA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGxhdGVuY3kgPSBlbmRMYXRlbmN5IC0gc3RhcnRMYXRlbmN5O1xuICAgICAgICBjb25zb2xlLmxvZyhcIltGYXN0IFJlZnJlc2hdIGRvbmUgaW4gXCIgKyBsYXRlbmN5ICsgXCJtc1wiKTtcbiAgICAgICAgKDAsIF93ZWJzb2NrZXQuc2VuZE1lc3NhZ2UpKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiBcImNsaWVudC1obXItbGF0ZW5jeVwiLFxuICAgICAgICAgICAgaWQ6IHdpbmRvdy5fX25leHREZXZDbGllbnRJZCxcbiAgICAgICAgICAgIHN0YXJ0VGltZTogc3RhcnRMYXRlbmN5LFxuICAgICAgICAgICAgZW5kVGltZTogZW5kTGF0ZW5jeSxcbiAgICAgICAgICAgIHBhZ2U6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICAgIHVwZGF0ZWRNb2R1bGVzLFxuICAgICAgICAgICAgLy8gV2hldGhlciB0aGUgcGFnZSAodGFiKSB3YXMgaGlkZGVuIGF0IHRoZSB0aW1lIHRoZSBldmVudCBvY2N1cnJlZC5cbiAgICAgICAgICAgIC8vIFRoaXMgY2FuIGltcGFjdCB0aGUgYWNjdXJhY3kgb2YgdGhlIGV2ZW50J3MgdGltaW5nLlxuICAgICAgICAgICAgaXNQYWdlSGlkZGVuOiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09IFwiaGlkZGVuXCJcbiAgICAgICAgfSkpO1xuICAgICAgICBpZiAoc2VsZi5fX05FWFRfSE1SX0xBVEVOQ1lfQ0IpIHtcbiAgICAgICAgICAgIHNlbGYuX19ORVhUX0hNUl9MQVRFTkNZX0NCKGxhdGVuY3kpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8gVGhlcmUgaXMgYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBjb2RlIGF2YWlsYWJsZS5cbmZ1bmN0aW9uIGhhbmRsZUF2YWlsYWJsZUhhc2goaGFzaCkge1xuICAgIC8vIFVwZGF0ZSBsYXN0IGtub3duIGNvbXBpbGF0aW9uIGhhc2guXG4gICAgbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCA9IGhhc2g7XG59XG4vLyBIYW5kbGUgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyLlxuZnVuY3Rpb24gcHJvY2Vzc01lc3NhZ2Uob2JqKSB7XG4gICAgaWYgKCEoXCJhY3Rpb25cIiBpbiBvYmopKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoKG9iai5hY3Rpb24pe1xuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5CVUlMRElORzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGFydExhdGVuY3kgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiW0Zhc3QgUmVmcmVzaF0gcmVidWlsZGluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBfaG90cmVsb2FkZXJ0eXBlcy5ITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuQlVJTFQ6XG4gICAgICAgIGNhc2UgX2hvdHJlbG9hZGVydHlwZXMuSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlNZTkM6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUF2YWlsYWJsZUhhc2gob2JqLmhhc2gpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9ycywgd2FybmluZ3MgfSA9IG9iajtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNFcnJvcnMgPSBCb29sZWFuKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBfd2Vic29ja2V0LnNlbmRNZXNzYWdlKShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogXCJjbGllbnQtZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ291bnQ6IGVycm9ycy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNXYXJuaW5ncyA9IEJvb2xlYW4od2FybmluZ3MgJiYgd2FybmluZ3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzV2FybmluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgKDAsIF93ZWJzb2NrZXQuc2VuZE1lc3NhZ2UpKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiBcImNsaWVudC13YXJuaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nQ291bnQ6IHdhcm5pbmdzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudElkOiB3aW5kb3cuX19uZXh0RGV2Q2xpZW50SWRcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlV2FybmluZ3Mod2FybmluZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoMCwgX3dlYnNvY2tldC5zZW5kTWVzc2FnZSkoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBldmVudDogXCJjbGllbnQtc3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgICAgICBjbGllbnRJZDogd2luZG93Ll9fbmV4dERldkNsaWVudElkXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdWNjZXNzKG9iai51cGRhdGVkTW9kdWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgX2hvdHJlbG9hZGVydHlwZXMuSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFUzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TRVJWRVJfRVJST1I6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvckpTT04gfSA9IG9iajtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JKU09OKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgc3RhY2sgfSA9IEpTT04ucGFyc2UoZXJyb3JKU09OKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUVycm9ycyhbXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChjdXN0b21IbXJFdmVudEhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tSG1yRXZlbnRIYW5kbGVyKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICB9XG59XG4vLyBJcyB0aGVyZSBhIG5ld2VyIHZlcnNpb24gb2YgdGhpcyBjb2RlIGF2YWlsYWJsZT9cbmZ1bmN0aW9uIGlzVXBkYXRlQXZhaWxhYmxlKCkge1xuICAgIC8qIGdsb2JhbHMgX193ZWJwYWNrX2hhc2hfXyAqLyAvLyBfX3dlYnBhY2tfaGFzaF9fIGlzIHRoZSBoYXNoIG9mIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uLlxuICAgIC8vIEl0J3MgYSBnbG9iYWwgdmFyaWFibGUgaW5qZWN0ZWQgYnkgV2VicGFjay5cbiAgICByZXR1cm4gbW9zdFJlY2VudENvbXBpbGF0aW9uSGFzaCAhPT0gX193ZWJwYWNrX2hhc2hfXztcbn1cbi8vIFdlYnBhY2sgZGlzYWxsb3dzIHVwZGF0ZXMgaW4gb3RoZXIgc3RhdGVzLlxuZnVuY3Rpb24gY2FuQXBwbHlVcGRhdGVzKCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogbW9kdWxlLmhvdCBleGlzdHMgYnV0IHR5cGUgbmVlZHMgdG8gYmUgYWRkZWQuIENhbid0IHVzZSBgYXMgYW55YCBoZXJlIGFzIHdlYnBhY2sgcGFyc2VzIGZvciBgbW9kdWxlLmhvdGAgY2FsbHMuXG4gICAgcmV0dXJuIG1vZHVsZS5ob3Quc3RhdHVzKCkgPT09IFwiaWRsZVwiO1xufVxuZnVuY3Rpb24gYWZ0ZXJBcHBseVVwZGF0ZXMoZm4pIHtcbiAgICBpZiAoY2FuQXBwbHlVcGRhdGVzKCkpIHtcbiAgICAgICAgZm4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmdW5jdGlvbiBoYW5kbGVyKHN0YXR1cykge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gXCJpZGxlXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IG1vZHVsZS5ob3QgZXhpc3RzIGJ1dCB0eXBlIG5lZWRzIHRvIGJlIGFkZGVkLiBDYW4ndCB1c2UgYGFzIGFueWAgaGVyZSBhcyB3ZWJwYWNrIHBhcnNlcyBmb3IgYG1vZHVsZS5ob3RgIGNhbGxzLlxuICAgICAgICAgICAgICAgIG1vZHVsZS5ob3QucmVtb3ZlU3RhdHVzSGFuZGxlcihoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogbW9kdWxlLmhvdCBleGlzdHMgYnV0IHR5cGUgbmVlZHMgdG8gYmUgYWRkZWQuIENhbid0IHVzZSBgYXMgYW55YCBoZXJlIGFzIHdlYnBhY2sgcGFyc2VzIGZvciBgbW9kdWxlLmhvdGAgY2FsbHMuXG4gICAgICAgIG1vZHVsZS5ob3QuYWRkU3RhdHVzSGFuZGxlcihoYW5kbGVyKTtcbiAgICB9XG59XG4vLyBBdHRlbXB0IHRvIHVwZGF0ZSBjb2RlIG9uIHRoZSBmbHksIGZhbGwgYmFjayB0byBhIGhhcmQgcmVsb2FkLlxuZnVuY3Rpb24gdHJ5QXBwbHlVcGRhdGVzKG9uQmVmb3JlSG90VXBkYXRlLCBvbkhvdFVwZGF0ZVN1Y2Nlc3MpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IG1vZHVsZS5ob3QgZXhpc3RzIGJ1dCB0eXBlIG5lZWRzIHRvIGJlIGFkZGVkLiBDYW4ndCB1c2UgYGFzIGFueWAgaGVyZSBhcyB3ZWJwYWNrIHBhcnNlcyBmb3IgYG1vZHVsZS5ob3RgIGNhbGxzLlxuICAgIGlmICghbW9kdWxlLmhvdCkge1xuICAgICAgICAvLyBIb3RNb2R1bGVSZXBsYWNlbWVudFBsdWdpbiBpcyBub3QgaW4gV2VicGFjayBjb25maWd1cmF0aW9uLlxuICAgICAgICBjb25zb2xlLmVycm9yKFwiSG90TW9kdWxlUmVwbGFjZW1lbnRQbHVnaW4gaXMgbm90IGluIFdlYnBhY2sgY29uZmlndXJhdGlvbi5cIik7XG4gICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzVXBkYXRlQXZhaWxhYmxlKCkgfHwgIWNhbkFwcGx5VXBkYXRlcygpKSB7XG4gICAgICAgICgwLCBfY2xpZW50Lm9uQnVpbGRPaykoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVBcHBseVVwZGF0ZXMoZXJyLCB1cGRhdGVkTW9kdWxlcykge1xuICAgICAgICBpZiAoZXJyIHx8IGhhZFJ1bnRpbWVFcnJvciB8fCAhdXBkYXRlZE1vZHVsZXMpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbRmFzdCBSZWZyZXNoXSBwZXJmb3JtaW5nIGZ1bGwgcmVsb2FkXFxuXFxuXCIgKyBcIkZhc3QgUmVmcmVzaCB3aWxsIHBlcmZvcm0gYSBmdWxsIHJlbG9hZCB3aGVuIHlvdSBlZGl0IGEgZmlsZSB0aGF0J3MgaW1wb3J0ZWQgYnkgbW9kdWxlcyBvdXRzaWRlIG9mIHRoZSBSZWFjdCByZW5kZXJpbmcgdHJlZS5cXG5cIiArIFwiWW91IG1pZ2h0IGhhdmUgYSBmaWxlIHdoaWNoIGV4cG9ydHMgYSBSZWFjdCBjb21wb25lbnQgYnV0IGFsc28gZXhwb3J0cyBhIHZhbHVlIHRoYXQgaXMgaW1wb3J0ZWQgYnkgYSBub24tUmVhY3QgY29tcG9uZW50IGZpbGUuXFxuXCIgKyBcIkNvbnNpZGVyIG1pZ3JhdGluZyB0aGUgbm9uLVJlYWN0IGNvbXBvbmVudCBleHBvcnQgdG8gYSBzZXBhcmF0ZSBmaWxlIGFuZCBpbXBvcnRpbmcgaXQgaW50byBib3RoIGZpbGVzLlxcblxcblwiICsgXCJJdCBpcyBhbHNvIHBvc3NpYmxlIHRoZSBwYXJlbnQgY29tcG9uZW50IG9mIHRoZSBjb21wb25lbnQgeW91IGVkaXRlZCBpcyBhIGNsYXNzIGNvbXBvbmVudCwgd2hpY2ggZGlzYWJsZXMgRmFzdCBSZWZyZXNoLlxcblwiICsgXCJGYXN0IFJlZnJlc2ggcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHBhcmVudCBmdW5jdGlvbiBjb21wb25lbnQgaW4geW91ciBSZWFjdCB0cmVlLlwiKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW0Zhc3QgUmVmcmVzaF0gcGVyZm9ybWluZyBmdWxsIHJlbG9hZCBiZWNhdXNlIHlvdXIgYXBwbGljYXRpb24gaGFkIGFuIHVucmVjb3ZlcmFibGUgZXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZXJmb3JtRnVsbFJlbG9hZChlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb25Ib3RVcGRhdGVTdWNjZXNzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIC8vIE1heWJlIHdlIHdhbnQgdG8gZG8gc29tZXRoaW5nLlxuICAgICAgICAgICAgb25Ib3RVcGRhdGVTdWNjZXNzKHVwZGF0ZWRNb2R1bGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNVcGRhdGVBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgLy8gV2hpbGUgd2Ugd2VyZSB1cGRhdGluZywgdGhlcmUgd2FzIGEgbmV3IHVwZGF0ZSEgRG8gaXQgYWdhaW4uXG4gICAgICAgICAgICAvLyBIb3dldmVyLCB0aGlzIHRpbWUsIGRvbid0IHRyaWdnZXIgYSBwZW5kaW5nIHJlZnJlc2ggc3RhdGUuXG4gICAgICAgICAgICB0cnlBcHBseVVwZGF0ZXModXBkYXRlZE1vZHVsZXMubGVuZ3RoID4gMCA/IHVuZGVmaW5lZCA6IG9uQmVmb3JlSG90VXBkYXRlLCB1cGRhdGVkTW9kdWxlcy5sZW5ndGggPiAwID8gX2NsaWVudC5vbkJ1aWxkT2sgOiBvbkhvdFVwZGF0ZVN1Y2Nlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKDAsIF9jbGllbnQub25CdWlsZE9rKSgpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgICAgICAgICAgICBhZnRlckFwcGx5VXBkYXRlcygoKT0+e1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX05FWFRfSE1SX0NCKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19ORVhUX0hNUl9DQiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBodHRwczovL3dlYnBhY2suanMub3JnL2FwaS9ob3QtbW9kdWxlLXJlcGxhY2VtZW50LyNjaGVja1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogbW9kdWxlLmhvdCBleGlzdHMgYnV0IHR5cGUgbmVlZHMgdG8gYmUgYWRkZWQuIENhbid0IHVzZSBgYXMgYW55YCBoZXJlIGFzIHdlYnBhY2sgcGFyc2VzIGZvciBgbW9kdWxlLmhvdGAgY2FsbHMuXG4gICAgbW9kdWxlLmhvdC5jaGVjaygvKiBhdXRvQXBwbHkgKi8gZmFsc2UpLnRoZW4oKHVwZGF0ZWRNb2R1bGVzKT0+e1xuICAgICAgICBpZiAoIXVwZGF0ZWRNb2R1bGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9uQmVmb3JlSG90VXBkYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIG9uQmVmb3JlSG90VXBkYXRlKHVwZGF0ZWRNb2R1bGVzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IG1vZHVsZS5ob3QgZXhpc3RzIGJ1dCB0eXBlIG5lZWRzIHRvIGJlIGFkZGVkLiBDYW4ndCB1c2UgYGFzIGFueWAgaGVyZSBhcyB3ZWJwYWNrIHBhcnNlcyBmb3IgYG1vZHVsZS5ob3RgIGNhbGxzLlxuICAgICAgICByZXR1cm4gbW9kdWxlLmhvdC5hcHBseSgpO1xuICAgIH0pLnRoZW4oKHVwZGF0ZWRNb2R1bGVzKT0+e1xuICAgICAgICBoYW5kbGVBcHBseVVwZGF0ZXMobnVsbCwgdXBkYXRlZE1vZHVsZXMpO1xuICAgIH0sIChlcnIpPT57XG4gICAgICAgIGhhbmRsZUFwcGx5VXBkYXRlcyhlcnIsIG51bGwpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gcGVyZm9ybUZ1bGxSZWxvYWQoZXJyKSB7XG4gICAgY29uc3Qgc3RhY2tUcmFjZSA9IGVyciAmJiAoZXJyLnN0YWNrICYmIGVyci5zdGFjay5zcGxpdChcIlxcblwiKS5zbGljZSgwLCA1KS5qb2luKFwiXFxuXCIpIHx8IGVyci5tZXNzYWdlIHx8IGVyciArIFwiXCIpO1xuICAgICgwLCBfd2Vic29ja2V0LnNlbmRNZXNzYWdlKShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50OiBcImNsaWVudC1mdWxsLXJlbG9hZFwiLFxuICAgICAgICBzdGFja1RyYWNlLFxuICAgICAgICBoYWRSdW50aW1lRXJyb3I6ICEhaGFkUnVudGltZUVycm9yXG4gICAgfSkpO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG90LWRldi1jbGllbnQuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImNvbm5lY3QiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2NsaWVudCIsIl9zdHJpcGFuc2kiLCJfIiwiX3dlYnNvY2tldCIsIl9mb3JtYXR3ZWJwYWNrbWVzc2FnZXMiLCJfaG90cmVsb2FkZXJ0eXBlcyIsIndpbmRvdyIsIl9fbmV4dERldkNsaWVudElkIiwiTWF0aCIsInJvdW5kIiwicmFuZG9tIiwiRGF0ZSIsIm5vdyIsImhhZFJ1bnRpbWVFcnJvciIsImN1c3RvbUhtckV2ZW50SGFuZGxlciIsIk1PREUiLCJtb2RlIiwicmVnaXN0ZXIiLCJhZGRNZXNzYWdlTGlzdGVuZXIiLCJwYXlsb2FkIiwicHJvY2Vzc01lc3NhZ2UiLCJlcnIiLCJfZXJyX3N0YWNrIiwiY29uc29sZSIsIndhcm4iLCJzdGFjayIsInN1YnNjcmliZVRvSG1yRXZlbnQiLCJoYW5kbGVyIiwib25VbnJlY292ZXJhYmxlRXJyb3IiLCJpc0ZpcnN0Q29tcGlsYXRpb24iLCJtb3N0UmVjZW50Q29tcGlsYXRpb25IYXNoIiwiaGFzQ29tcGlsZUVycm9ycyIsImNsZWFyT3V0ZGF0ZWRFcnJvcnMiLCJjbGVhciIsImhhbmRsZVN1Y2Nlc3MiLCJ1cGRhdGVkTW9kdWxlcyIsImlzSG90VXBkYXRlIiwiX19ORVhUX0RBVEFfXyIsInBhZ2UiLCJpc1VwZGF0ZUF2YWlsYWJsZSIsInRyeUFwcGx5VXBkYXRlcyIsIm9uQmVmb3JlRmFzdFJlZnJlc2giLCJvbkZhc3RSZWZyZXNoIiwib25CdWlsZE9rIiwiaGFuZGxlV2FybmluZ3MiLCJ3YXJuaW5ncyIsInByaW50V2FybmluZ3MiLCJmb3JtYXR0ZWQiLCJkZWZhdWx0IiwiZXJyb3JzIiwiX2Zvcm1hdHRlZF93YXJuaW5ncyIsImkiLCJsZW5ndGgiLCJoYW5kbGVFcnJvcnMiLCJvbkJ1aWxkRXJyb3IiLCJlcnJvciIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfVEVTVF9NT0RFIiwic2VsZiIsIl9fTkVYVF9ITVJfQ0IiLCJzdGFydExhdGVuY3kiLCJ1bmRlZmluZWQiLCJvbkJlZm9yZVJlZnJlc2giLCJvblJlZnJlc2giLCJlbmRMYXRlbmN5IiwibGF0ZW5jeSIsImxvZyIsInNlbmRNZXNzYWdlIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiaWQiLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwibG9jYXRpb24iLCJwYXRobmFtZSIsImlzUGFnZUhpZGRlbiIsImRvY3VtZW50IiwidmlzaWJpbGl0eVN0YXRlIiwiX19ORVhUX0hNUl9MQVRFTkNZX0NCIiwiaGFuZGxlQXZhaWxhYmxlSGFzaCIsImhhc2giLCJvYmoiLCJhY3Rpb24iLCJITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIiLCJCVUlMRElORyIsIkJVSUxUIiwiU1lOQyIsImhhc0Vycm9ycyIsIkJvb2xlYW4iLCJlcnJvckNvdW50IiwiY2xpZW50SWQiLCJoYXNXYXJuaW5ncyIsIndhcm5pbmdDb3VudCIsIlNFUlZFUl9DT01QT05FTlRfQ0hBTkdFUyIsInJlbG9hZCIsIlNFUlZFUl9FUlJPUiIsImVycm9ySlNPTiIsIm1lc3NhZ2UiLCJwYXJzZSIsIkVycm9yIiwiX193ZWJwYWNrX2hhc2hfXyIsImNhbkFwcGx5VXBkYXRlcyIsIm1vZHVsZSIsImhvdCIsInN0YXR1cyIsImFmdGVyQXBwbHlVcGRhdGVzIiwiZm4iLCJyZW1vdmVTdGF0dXNIYW5kbGVyIiwiYWRkU3RhdHVzSGFuZGxlciIsIm9uQmVmb3JlSG90VXBkYXRlIiwib25Ib3RVcGRhdGVTdWNjZXNzIiwiaGFuZGxlQXBwbHlVcGRhdGVzIiwicGVyZm9ybUZ1bGxSZWxvYWQiLCJjaGVjayIsInRoZW4iLCJhcHBseSIsInN0YWNrVHJhY2UiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/dev/error-overlay/hot-dev-client.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/dev/error-overlay/websocket.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/client/dev/error-overlay/websocket.js ***! + \**********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n addMessageListener: function() {\n return addMessageListener;\n },\n sendMessage: function() {\n return sendMessage;\n },\n connectHMR: function() {\n return connectHMR;\n }\n});\nlet source;\nconst eventCallbacks = [];\nfunction getSocketProtocol(assetPrefix) {\n let protocol = location.protocol;\n try {\n // assetPrefix is a url\n protocol = new URL(assetPrefix).protocol;\n } catch (e) {}\n return protocol === \"http:\" ? \"ws\" : \"wss\";\n}\nfunction addMessageListener(callback) {\n eventCallbacks.push(callback);\n}\nfunction sendMessage(data) {\n if (!source || source.readyState !== source.OPEN) return;\n return source.send(data);\n}\nlet reconnections = 0;\nfunction connectHMR(options) {\n function init() {\n if (source) source.close();\n function handleOnline() {\n reconnections = 0;\n window.console.log(\"[HMR] connected\");\n }\n function handleMessage(event) {\n // Coerce into HMR_ACTION_TYPES as that is the format.\n const msg = JSON.parse(event.data);\n for (const eventCallback of eventCallbacks){\n eventCallback(msg);\n }\n }\n let timer;\n function handleDisconnect() {\n source.onerror = null;\n source.onclose = null;\n source.close();\n reconnections++;\n // After 25 reconnects we'll want to reload the page as it indicates the dev server is no longer running.\n if (reconnections > 25) {\n window.location.reload();\n return;\n }\n clearTimeout(timer);\n // Try again after 5 seconds\n timer = setTimeout(init, reconnections > 5 ? 5000 : 1000);\n }\n const { hostname, port } = location;\n const protocol = getSocketProtocol(options.assetPrefix || \"\");\n const assetPrefix = options.assetPrefix.replace(/^\\/+/, \"\");\n let url = protocol + \"://\" + hostname + \":\" + port + (assetPrefix ? \"/\" + assetPrefix : \"\");\n if (assetPrefix.startsWith(\"http\")) {\n url = protocol + \"://\" + assetPrefix.split(\"://\", 2)[1];\n }\n source = new window.WebSocket(\"\" + url + options.path);\n source.onopen = handleOnline;\n source.onerror = handleDisconnect;\n source.onclose = handleDisconnect;\n source.onmessage = handleMessage;\n }\n init();\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=websocket.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvZXJyb3Itb3ZlcmxheS93ZWJzb2NrZXQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FJTjtBQUNBLFNBQVNJLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlWLE9BQU9DLGNBQWMsQ0FBQ1EsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTixTQUFTO0lBQ2JHLG9CQUFvQjtRQUNoQixPQUFPQTtJQUNYO0lBQ0FDLGFBQWE7UUFDVCxPQUFPQTtJQUNYO0lBQ0FDLFlBQVk7UUFDUixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxJQUFJTztBQUNKLE1BQU1DLGlCQUFpQixFQUFFO0FBQ3pCLFNBQVNDLGtCQUFrQkMsV0FBVztJQUNsQyxJQUFJQyxXQUFXQyxTQUFTRCxRQUFRO0lBQ2hDLElBQUk7UUFDQSx1QkFBdUI7UUFDdkJBLFdBQVcsSUFBSUUsSUFBSUgsYUFBYUMsUUFBUTtJQUM1QyxFQUFFLE9BQU9HLEdBQUcsQ0FBQztJQUNiLE9BQU9ILGFBQWEsVUFBVSxPQUFPO0FBQ3pDO0FBQ0EsU0FBU2IsbUJBQW1CaUIsUUFBUTtJQUNoQ1AsZUFBZVEsSUFBSSxDQUFDRDtBQUN4QjtBQUNBLFNBQVNoQixZQUFZa0IsSUFBSTtJQUNyQixJQUFJLENBQUNWLFVBQVVBLE9BQU9XLFVBQVUsS0FBS1gsT0FBT1ksSUFBSSxFQUFFO0lBQ2xELE9BQU9aLE9BQU9hLElBQUksQ0FBQ0g7QUFDdkI7QUFDQSxJQUFJSSxnQkFBZ0I7QUFDcEIsU0FBU3JCLFdBQVdzQixPQUFPO0lBQ3ZCLFNBQVNDO1FBQ0wsSUFBSWhCLFFBQVFBLE9BQU9pQixLQUFLO1FBQ3hCLFNBQVNDO1lBQ0xKLGdCQUFnQjtZQUNoQkssT0FBT0MsT0FBTyxDQUFDQyxHQUFHLENBQUM7UUFDdkI7UUFDQSxTQUFTQyxjQUFjQyxLQUFLO1lBQ3hCLHNEQUFzRDtZQUN0RCxNQUFNQyxNQUFNQyxLQUFLQyxLQUFLLENBQUNILE1BQU1iLElBQUk7WUFDakMsS0FBSyxNQUFNaUIsaUJBQWlCMUIsZUFBZTtnQkFDdkMwQixjQUFjSDtZQUNsQjtRQUNKO1FBQ0EsSUFBSUk7UUFDSixTQUFTQztZQUNMN0IsT0FBTzhCLE9BQU8sR0FBRztZQUNqQjlCLE9BQU8rQixPQUFPLEdBQUc7WUFDakIvQixPQUFPaUIsS0FBSztZQUNaSDtZQUNBLHlHQUF5RztZQUN6RyxJQUFJQSxnQkFBZ0IsSUFBSTtnQkFDcEJLLE9BQU9kLFFBQVEsQ0FBQzJCLE1BQU07Z0JBQ3RCO1lBQ0o7WUFDQUMsYUFBYUw7WUFDYiw0QkFBNEI7WUFDNUJBLFFBQVFNLFdBQVdsQixNQUFNRixnQkFBZ0IsSUFBSSxPQUFPO1FBQ3hEO1FBQ0EsTUFBTSxFQUFFcUIsUUFBUSxFQUFFQyxJQUFJLEVBQUUsR0FBRy9CO1FBQzNCLE1BQU1ELFdBQVdGLGtCQUFrQmEsUUFBUVosV0FBVyxJQUFJO1FBQzFELE1BQU1BLGNBQWNZLFFBQVFaLFdBQVcsQ0FBQ2tDLE9BQU8sQ0FBQyxRQUFRO1FBQ3hELElBQUlDLE1BQU1sQyxXQUFXLFFBQVErQixXQUFXLE1BQU1DLE9BQVFqQyxDQUFBQSxjQUFjLE1BQU1BLGNBQWMsRUFBQztRQUN6RixJQUFJQSxZQUFZb0MsVUFBVSxDQUFDLFNBQVM7WUFDaENELE1BQU1sQyxXQUFXLFFBQVFELFlBQVlxQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtRQUMzRDtRQUNBeEMsU0FBUyxJQUFJbUIsT0FBT3NCLFNBQVMsQ0FBQyxLQUFLSCxNQUFNdkIsUUFBUTJCLElBQUk7UUFDckQxQyxPQUFPMkMsTUFBTSxHQUFHekI7UUFDaEJsQixPQUFPOEIsT0FBTyxHQUFHRDtRQUNqQjdCLE9BQU8rQixPQUFPLEdBQUdGO1FBQ2pCN0IsT0FBTzRDLFNBQVMsR0FBR3RCO0lBQ3ZCO0lBQ0FOO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBTzVCLFFBQVF5RCxPQUFPLEtBQUssY0FBZSxPQUFPekQsUUFBUXlELE9BQU8sS0FBSyxZQUFZekQsUUFBUXlELE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3pELFFBQVF5RCxPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLNUQsT0FBT0MsY0FBYyxDQUFDQyxRQUFReUQsT0FBTyxFQUFFLGNBQWM7UUFBRXhELE9BQU87SUFBSztJQUNuRUgsT0FBTzZELE1BQU0sQ0FBQzNELFFBQVF5RCxPQUFPLEVBQUV6RDtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFReUQsT0FBTztBQUNsQyxFQUVBLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvZXJyb3Itb3ZlcmxheS93ZWJzb2NrZXQuanM/YTliZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFkZE1lc3NhZ2VMaXN0ZW5lcjogbnVsbCxcbiAgICBzZW5kTWVzc2FnZTogbnVsbCxcbiAgICBjb25uZWN0SE1SOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGFkZE1lc3NhZ2VMaXN0ZW5lcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhZGRNZXNzYWdlTGlzdGVuZXI7XG4gICAgfSxcbiAgICBzZW5kTWVzc2FnZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzZW5kTWVzc2FnZTtcbiAgICB9LFxuICAgIGNvbm5lY3RITVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY29ubmVjdEhNUjtcbiAgICB9XG59KTtcbmxldCBzb3VyY2U7XG5jb25zdCBldmVudENhbGxiYWNrcyA9IFtdO1xuZnVuY3Rpb24gZ2V0U29ja2V0UHJvdG9jb2woYXNzZXRQcmVmaXgpIHtcbiAgICBsZXQgcHJvdG9jb2wgPSBsb2NhdGlvbi5wcm90b2NvbDtcbiAgICB0cnkge1xuICAgICAgICAvLyBhc3NldFByZWZpeCBpcyBhIHVybFxuICAgICAgICBwcm90b2NvbCA9IG5ldyBVUkwoYXNzZXRQcmVmaXgpLnByb3RvY29sO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIHByb3RvY29sID09PSBcImh0dHA6XCIgPyBcIndzXCIgOiBcIndzc1wiO1xufVxuZnVuY3Rpb24gYWRkTWVzc2FnZUxpc3RlbmVyKGNhbGxiYWNrKSB7XG4gICAgZXZlbnRDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG59XG5mdW5jdGlvbiBzZW5kTWVzc2FnZShkYXRhKSB7XG4gICAgaWYgKCFzb3VyY2UgfHwgc291cmNlLnJlYWR5U3RhdGUgIT09IHNvdXJjZS5PUEVOKSByZXR1cm47XG4gICAgcmV0dXJuIHNvdXJjZS5zZW5kKGRhdGEpO1xufVxubGV0IHJlY29ubmVjdGlvbnMgPSAwO1xuZnVuY3Rpb24gY29ubmVjdEhNUihvcHRpb25zKSB7XG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgaWYgKHNvdXJjZSkgc291cmNlLmNsb3NlKCk7XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZU9ubGluZSgpIHtcbiAgICAgICAgICAgIHJlY29ubmVjdGlvbnMgPSAwO1xuICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKFwiW0hNUl0gY29ubmVjdGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2UoZXZlbnQpIHtcbiAgICAgICAgICAgIC8vIENvZXJjZSBpbnRvIEhNUl9BQ1RJT05fVFlQRVMgYXMgdGhhdCBpcyB0aGUgZm9ybWF0LlxuICAgICAgICAgICAgY29uc3QgbXNnID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXZlbnRDYWxsYmFjayBvZiBldmVudENhbGxiYWNrcyl7XG4gICAgICAgICAgICAgICAgZXZlbnRDYWxsYmFjayhtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCB0aW1lcjtcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlRGlzY29ubmVjdCgpIHtcbiAgICAgICAgICAgIHNvdXJjZS5vbmVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5vbmNsb3NlID0gbnVsbDtcbiAgICAgICAgICAgIHNvdXJjZS5jbG9zZSgpO1xuICAgICAgICAgICAgcmVjb25uZWN0aW9ucysrO1xuICAgICAgICAgICAgLy8gQWZ0ZXIgMjUgcmVjb25uZWN0cyB3ZSdsbCB3YW50IHRvIHJlbG9hZCB0aGUgcGFnZSBhcyBpdCBpbmRpY2F0ZXMgdGhlIGRldiBzZXJ2ZXIgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcuXG4gICAgICAgICAgICBpZiAocmVjb25uZWN0aW9ucyA+IDI1KSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAvLyBUcnkgYWdhaW4gYWZ0ZXIgNSBzZWNvbmRzXG4gICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoaW5pdCwgcmVjb25uZWN0aW9ucyA+IDUgPyA1MDAwIDogMTAwMCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBob3N0bmFtZSwgcG9ydCB9ID0gbG9jYXRpb247XG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gZ2V0U29ja2V0UHJvdG9jb2wob3B0aW9ucy5hc3NldFByZWZpeCB8fCBcIlwiKTtcbiAgICAgICAgY29uc3QgYXNzZXRQcmVmaXggPSBvcHRpb25zLmFzc2V0UHJlZml4LnJlcGxhY2UoL15cXC8rLywgXCJcIik7XG4gICAgICAgIGxldCB1cmwgPSBwcm90b2NvbCArIFwiOi8vXCIgKyBob3N0bmFtZSArIFwiOlwiICsgcG9ydCArIChhc3NldFByZWZpeCA/IFwiL1wiICsgYXNzZXRQcmVmaXggOiBcIlwiKTtcbiAgICAgICAgaWYgKGFzc2V0UHJlZml4LnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgICAgICB1cmwgPSBwcm90b2NvbCArIFwiOi8vXCIgKyBhc3NldFByZWZpeC5zcGxpdChcIjovL1wiLCAyKVsxXTtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgPSBuZXcgd2luZG93LldlYlNvY2tldChcIlwiICsgdXJsICsgb3B0aW9ucy5wYXRoKTtcbiAgICAgICAgc291cmNlLm9ub3BlbiA9IGhhbmRsZU9ubGluZTtcbiAgICAgICAgc291cmNlLm9uZXJyb3IgPSBoYW5kbGVEaXNjb25uZWN0O1xuICAgICAgICBzb3VyY2Uub25jbG9zZSA9IGhhbmRsZURpc2Nvbm5lY3Q7XG4gICAgICAgIHNvdXJjZS5vbm1lc3NhZ2UgPSBoYW5kbGVNZXNzYWdlO1xuICAgIH1cbiAgICBpbml0KCk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlYnNvY2tldC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJhZGRNZXNzYWdlTGlzdGVuZXIiLCJzZW5kTWVzc2FnZSIsImNvbm5lY3RITVIiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJzb3VyY2UiLCJldmVudENhbGxiYWNrcyIsImdldFNvY2tldFByb3RvY29sIiwiYXNzZXRQcmVmaXgiLCJwcm90b2NvbCIsImxvY2F0aW9uIiwiVVJMIiwiZSIsImNhbGxiYWNrIiwicHVzaCIsImRhdGEiLCJyZWFkeVN0YXRlIiwiT1BFTiIsInNlbmQiLCJyZWNvbm5lY3Rpb25zIiwib3B0aW9ucyIsImluaXQiLCJjbG9zZSIsImhhbmRsZU9ubGluZSIsIndpbmRvdyIsImNvbnNvbGUiLCJsb2ciLCJoYW5kbGVNZXNzYWdlIiwiZXZlbnQiLCJtc2ciLCJKU09OIiwicGFyc2UiLCJldmVudENhbGxiYWNrIiwidGltZXIiLCJoYW5kbGVEaXNjb25uZWN0Iiwib25lcnJvciIsIm9uY2xvc2UiLCJyZWxvYWQiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiaG9zdG5hbWUiLCJwb3J0IiwicmVwbGFjZSIsInVybCIsInN0YXJ0c1dpdGgiLCJzcGxpdCIsIldlYlNvY2tldCIsInBhdGgiLCJvbm9wZW4iLCJvbm1lc3NhZ2UiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/dev/error-overlay/websocket.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/dev/fouc.js": +/*!***************************************************!*\ + !*** ./node_modules/next/dist/client/dev/fouc.js ***! + \***************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// This wrapper function is used to safely select the best available function\n// to schedule removal of the no-FOUC styles workaround. requestAnimationFrame\n// is the ideal choice, but when used in iframes, there are no guarantees that\n// the callback will actually be called, which could stall the promise returned\n// from displayContent.\n//\n// See: https://www.vector-logic.com/blog/posts/on-request-animation-frame-and-embedded-iframes\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"displayContent\", ({\n enumerable: true,\n get: function() {\n return displayContent;\n }\n}));\nconst safeCallbackQueue = (callback)=>{\n if (window.requestAnimationFrame && window.self === window.top) {\n window.requestAnimationFrame(callback);\n } else {\n window.setTimeout(callback);\n }\n};\nfunction displayContent() {\n return new Promise((resolve)=>{\n safeCallbackQueue(function() {\n for(var x = document.querySelectorAll(\"[data-next-hide-fouc]\"), i = x.length; i--;){\n x[i].parentNode.removeChild(x[i]);\n }\n resolve();\n });\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=fouc.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvZm91Yy5qcyIsIm1hcHBpbmdzIjoiQUFBQSw2RUFBNkU7QUFDN0UsOEVBQThFO0FBQzlFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsdUJBQXVCO0FBQ3ZCLEVBQUU7QUFDRiwrRkFBK0Y7QUFDbEY7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGtEQUFpRDtJQUM3Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLG9CQUFvQixDQUFDQztJQUN2QixJQUFJQyxPQUFPQyxxQkFBcUIsSUFBSUQsT0FBT0UsSUFBSSxLQUFLRixPQUFPRyxHQUFHLEVBQUU7UUFDNURILE9BQU9DLHFCQUFxQixDQUFDRjtJQUNqQyxPQUFPO1FBQ0hDLE9BQU9JLFVBQVUsQ0FBQ0w7SUFDdEI7QUFDSjtBQUNBLFNBQVNGO0lBQ0wsT0FBTyxJQUFJUSxRQUFRLENBQUNDO1FBQ2hCUixrQkFBa0I7WUFDZCxJQUFJLElBQUlTLElBQUlDLFNBQVNDLGdCQUFnQixDQUFDLDBCQUEwQkMsSUFBSUgsRUFBRUksTUFBTSxFQUFFRCxLQUFLO2dCQUMvRUgsQ0FBQyxDQUFDRyxFQUFFLENBQUNFLFVBQVUsQ0FBQ0MsV0FBVyxDQUFDTixDQUFDLENBQUNHLEVBQUU7WUFDcEM7WUFDQUo7UUFDSjtJQUNKO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT2IsUUFBUXFCLE9BQU8sS0FBSyxjQUFlLE9BQU9yQixRQUFRcUIsT0FBTyxLQUFLLFlBQVlyQixRQUFRcUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPckIsUUFBUXFCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt4QixPQUFPQyxjQUFjLENBQUNDLFFBQVFxQixPQUFPLEVBQUUsY0FBYztRQUFFcEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPeUIsTUFBTSxDQUFDdkIsUUFBUXFCLE9BQU8sRUFBRXJCO0lBQy9Cd0IsT0FBT3hCLE9BQU8sR0FBR0EsUUFBUXFCLE9BQU87QUFDbEMsRUFFQSxnQ0FBZ0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV2L2ZvdWMuanM/MDA4NyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gaXMgdXNlZCB0byBzYWZlbHkgc2VsZWN0IHRoZSBiZXN0IGF2YWlsYWJsZSBmdW5jdGlvblxuLy8gdG8gc2NoZWR1bGUgcmVtb3ZhbCBvZiB0aGUgbm8tRk9VQyBzdHlsZXMgd29ya2Fyb3VuZC4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4vLyBpcyB0aGUgaWRlYWwgY2hvaWNlLCBidXQgd2hlbiB1c2VkIGluIGlmcmFtZXMsIHRoZXJlIGFyZSBubyBndWFyYW50ZWVzIHRoYXRcbi8vIHRoZSBjYWxsYmFjayB3aWxsIGFjdHVhbGx5IGJlIGNhbGxlZCwgd2hpY2ggY291bGQgc3RhbGwgdGhlIHByb21pc2UgcmV0dXJuZWRcbi8vIGZyb20gZGlzcGxheUNvbnRlbnQuXG4vL1xuLy8gU2VlOiBodHRwczovL3d3dy52ZWN0b3ItbG9naWMuY29tL2Jsb2cvcG9zdHMvb24tcmVxdWVzdC1hbmltYXRpb24tZnJhbWUtYW5kLWVtYmVkZGVkLWlmcmFtZXNcblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzcGxheUNvbnRlbnRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BsYXlDb250ZW50O1xuICAgIH1cbn0pO1xuY29uc3Qgc2FmZUNhbGxiYWNrUXVldWUgPSAoY2FsbGJhY2spPT57XG4gICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgJiYgd2luZG93LnNlbGYgPT09IHdpbmRvdy50b3ApIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2spO1xuICAgIH1cbn07XG5mdW5jdGlvbiBkaXNwbGF5Q29udGVudCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgIHNhZmVDYWxsYmFja1F1ZXVlKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZm9yKHZhciB4ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW5leHQtaGlkZS1mb3VjXVwiKSwgaSA9IHgubGVuZ3RoOyBpLS07KXtcbiAgICAgICAgICAgICAgICB4W2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoeFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3VjLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJkaXNwbGF5Q29udGVudCIsInNhZmVDYWxsYmFja1F1ZXVlIiwiY2FsbGJhY2siLCJ3aW5kb3ciLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZWxmIiwidG9wIiwic2V0VGltZW91dCIsIlByb21pc2UiLCJyZXNvbHZlIiwieCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImkiLCJsZW5ndGgiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/dev/fouc.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/dev/hot-middleware-client.js": +/*!********************************************************************!*\ + !*** ./node_modules/next/dist/client/dev/hot-middleware-client.js ***! + \********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _hotdevclient = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./error-overlay/hot-dev-client */ \"./node_modules/next/dist/client/dev/error-overlay/hot-dev-client.js\"));\nconst _websocket = __webpack_require__(/*! ./error-overlay/websocket */ \"./node_modules/next/dist/client/dev/error-overlay/websocket.js\");\nlet reloading = false;\nconst _default = (mode)=>{\n const devClient = (0, _hotdevclient.default)(mode);\n devClient.subscribeToHmrEvent((obj)=>{\n if (reloading) return;\n // if we're on an error/404 page, we can't reliably tell if the newly added/removed page\n // matches the current path. In that case, assume any added/removed entries should trigger a reload of the current page\n const isOnErrorPage = window.next.router.pathname === \"/404\" || window.next.router.pathname === \"/_error\";\n switch(obj.action){\n case \"reloadPage\":\n {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-reload-page\",\n clientId: window.__nextDevClientId\n }));\n reloading = true;\n return window.location.reload();\n }\n case \"removedPage\":\n {\n const [page] = obj.data;\n if (page === window.next.router.pathname || isOnErrorPage) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-removed-page\",\n clientId: window.__nextDevClientId,\n page\n }));\n return window.location.reload();\n }\n return;\n }\n case \"addedPage\":\n {\n const [page] = obj.data;\n if (page === window.next.router.pathname && typeof window.next.router.components[page] === \"undefined\" || isOnErrorPage) {\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"client-added-page\",\n clientId: window.__nextDevClientId,\n page\n }));\n return window.location.reload();\n }\n return;\n }\n case \"serverError\":\n case \"devPagesManifestUpdate\":\n case \"building\":\n case \"finishBuilding\":\n {\n return;\n }\n default:\n {\n throw new Error(\"Unexpected action \" + obj.action);\n }\n }\n });\n return devClient;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=hot-middleware-client.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvaG90LW1pZGRsZXdhcmUtY2xpZW50LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLDRHQUF5QztBQUNsRixNQUFNQyxnQkFBZ0IsV0FBVyxHQUFHRix5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsMkdBQWdDO0FBQ3ZHLE1BQU1HLGFBQWFILG1CQUFPQSxDQUFDLGlHQUEyQjtBQUN0RCxJQUFJSSxZQUFZO0FBQ2hCLE1BQU1OLFdBQVcsQ0FBQ087SUFDZCxNQUFNQyxZQUFZLENBQUMsR0FBR0wsY0FBY00sT0FBTyxFQUFFRjtJQUM3Q0MsVUFBVUUsbUJBQW1CLENBQUMsQ0FBQ0M7UUFDM0IsSUFBSUwsV0FBVztRQUNmLHdGQUF3RjtRQUN4Rix1SEFBdUg7UUFDdkgsTUFBTU0sZ0JBQWdCQyxPQUFPQyxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxLQUFLLFVBQVVILE9BQU9DLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxRQUFRLEtBQUs7UUFDaEcsT0FBT0wsSUFBSU0sTUFBTTtZQUNiLEtBQUs7Z0JBQ0Q7b0JBQ0ssSUFBR1osV0FBV2EsV0FBVyxFQUFFQyxLQUFLQyxTQUFTLENBQUM7d0JBQ3ZDQyxPQUFPO3dCQUNQQyxVQUFVVCxPQUFPVSxpQkFBaUI7b0JBQ3RDO29CQUNBakIsWUFBWTtvQkFDWixPQUFPTyxPQUFPVyxRQUFRLENBQUNDLE1BQU07Z0JBQ2pDO1lBQ0osS0FBSztnQkFDRDtvQkFDSSxNQUFNLENBQUNDLEtBQUssR0FBR2YsSUFBSWdCLElBQUk7b0JBQ3ZCLElBQUlELFNBQVNiLE9BQU9DLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxRQUFRLElBQUlKLGVBQWU7d0JBQ3RELElBQUdQLFdBQVdhLFdBQVcsRUFBRUMsS0FBS0MsU0FBUyxDQUFDOzRCQUN2Q0MsT0FBTzs0QkFDUEMsVUFBVVQsT0FBT1UsaUJBQWlCOzRCQUNsQ0c7d0JBQ0o7d0JBQ0EsT0FBT2IsT0FBT1csUUFBUSxDQUFDQyxNQUFNO29CQUNqQztvQkFDQTtnQkFDSjtZQUNKLEtBQUs7Z0JBQ0Q7b0JBQ0ksTUFBTSxDQUFDQyxLQUFLLEdBQUdmLElBQUlnQixJQUFJO29CQUN2QixJQUFJRCxTQUFTYixPQUFPQyxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsUUFBUSxJQUFJLE9BQU9ILE9BQU9DLElBQUksQ0FBQ0MsTUFBTSxDQUFDYSxVQUFVLENBQUNGLEtBQUssS0FBSyxlQUFlZCxlQUFlO3dCQUNwSCxJQUFHUCxXQUFXYSxXQUFXLEVBQUVDLEtBQUtDLFNBQVMsQ0FBQzs0QkFDdkNDLE9BQU87NEJBQ1BDLFVBQVVULE9BQU9VLGlCQUFpQjs0QkFDbENHO3dCQUNKO3dCQUNBLE9BQU9iLE9BQU9XLFFBQVEsQ0FBQ0MsTUFBTTtvQkFDakM7b0JBQ0E7Z0JBQ0o7WUFDSixLQUFLO1lBQ0wsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLO2dCQUNEO29CQUNJO2dCQUNKO1lBQ0o7Z0JBQ0k7b0JBQ0ksTUFBTSxJQUFJSSxNQUFNLHVCQUF1QmxCLElBQUlNLE1BQU07Z0JBQ3JEO1FBQ1I7SUFDSjtJQUNBLE9BQU9UO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT1osUUFBUWEsT0FBTyxLQUFLLGNBQWUsT0FBT2IsUUFBUWEsT0FBTyxLQUFLLFlBQVliLFFBQVFhLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2IsUUFBUWEsT0FBTyxDQUFDcUIsVUFBVSxLQUFLLGFBQWE7SUFDcktwQyxPQUFPQyxjQUFjLENBQUNDLFFBQVFhLE9BQU8sRUFBRSxjQUFjO1FBQUVaLE9BQU87SUFBSztJQUNuRUgsT0FBT3FDLE1BQU0sQ0FBQ25DLFFBQVFhLE9BQU8sRUFBRWI7SUFDL0JvQyxPQUFPcEMsT0FBTyxHQUFHQSxRQUFRYSxPQUFPO0FBQ2xDLEVBRUEsaURBQWlEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2Rldi9ob3QtbWlkZGxld2FyZS1jbGllbnQuanM/MzFkNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9kZWZhdWx0O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9ob3RkZXZjbGllbnQgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCIuL2Vycm9yLW92ZXJsYXkvaG90LWRldi1jbGllbnRcIikpO1xuY29uc3QgX3dlYnNvY2tldCA9IHJlcXVpcmUoXCIuL2Vycm9yLW92ZXJsYXkvd2Vic29ja2V0XCIpO1xubGV0IHJlbG9hZGluZyA9IGZhbHNlO1xuY29uc3QgX2RlZmF1bHQgPSAobW9kZSk9PntcbiAgICBjb25zdCBkZXZDbGllbnQgPSAoMCwgX2hvdGRldmNsaWVudC5kZWZhdWx0KShtb2RlKTtcbiAgICBkZXZDbGllbnQuc3Vic2NyaWJlVG9IbXJFdmVudCgob2JqKT0+e1xuICAgICAgICBpZiAocmVsb2FkaW5nKSByZXR1cm47XG4gICAgICAgIC8vIGlmIHdlJ3JlIG9uIGFuIGVycm9yLzQwNCBwYWdlLCB3ZSBjYW4ndCByZWxpYWJseSB0ZWxsIGlmIHRoZSBuZXdseSBhZGRlZC9yZW1vdmVkIHBhZ2VcbiAgICAgICAgLy8gbWF0Y2hlcyB0aGUgY3VycmVudCBwYXRoLiBJbiB0aGF0IGNhc2UsIGFzc3VtZSBhbnkgYWRkZWQvcmVtb3ZlZCBlbnRyaWVzIHNob3VsZCB0cmlnZ2VyIGEgcmVsb2FkIG9mIHRoZSBjdXJyZW50IHBhZ2VcbiAgICAgICAgY29uc3QgaXNPbkVycm9yUGFnZSA9IHdpbmRvdy5uZXh0LnJvdXRlci5wYXRobmFtZSA9PT0gXCIvNDA0XCIgfHwgd2luZG93Lm5leHQucm91dGVyLnBhdGhuYW1lID09PSBcIi9fZXJyb3JcIjtcbiAgICAgICAgc3dpdGNoKG9iai5hY3Rpb24pe1xuICAgICAgICAgICAgY2FzZSBcInJlbG9hZFBhZ2VcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICgwLCBfd2Vic29ja2V0LnNlbmRNZXNzYWdlKShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogXCJjbGllbnQtcmVsb2FkLXBhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudElkOiB3aW5kb3cuX19uZXh0RGV2Q2xpZW50SWRcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICByZWxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJyZW1vdmVkUGFnZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3BhZ2VdID0gb2JqLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYWdlID09PSB3aW5kb3cubmV4dC5yb3V0ZXIucGF0aG5hbWUgfHwgaXNPbkVycm9yUGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF93ZWJzb2NrZXQuc2VuZE1lc3NhZ2UpKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogXCJjbGllbnQtcmVtb3ZlZC1wYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50SWQ6IHdpbmRvdy5fX25leHREZXZDbGllbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiYWRkZWRQYWdlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBbcGFnZV0gPSBvYmouZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2UgPT09IHdpbmRvdy5uZXh0LnJvdXRlci5wYXRobmFtZSAmJiB0eXBlb2Ygd2luZG93Lm5leHQucm91dGVyLmNvbXBvbmVudHNbcGFnZV0gPT09IFwidW5kZWZpbmVkXCIgfHwgaXNPbkVycm9yUGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF93ZWJzb2NrZXQuc2VuZE1lc3NhZ2UpKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogXCJjbGllbnQtYWRkZWQtcGFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudElkOiB3aW5kb3cuX19uZXh0RGV2Q2xpZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNlcnZlckVycm9yXCI6XG4gICAgICAgICAgICBjYXNlIFwiZGV2UGFnZXNNYW5pZmVzdFVwZGF0ZVwiOlxuICAgICAgICAgICAgY2FzZSBcImJ1aWxkaW5nXCI6XG4gICAgICAgICAgICBjYXNlIFwiZmluaXNoQnVpbGRpbmdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBhY3Rpb24gXCIgKyBvYmouYWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGV2Q2xpZW50O1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG90LW1pZGRsZXdhcmUtY2xpZW50LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZGVmYXVsdCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfaG90ZGV2Y2xpZW50IiwiXyIsIl93ZWJzb2NrZXQiLCJyZWxvYWRpbmciLCJtb2RlIiwiZGV2Q2xpZW50IiwiZGVmYXVsdCIsInN1YnNjcmliZVRvSG1yRXZlbnQiLCJvYmoiLCJpc09uRXJyb3JQYWdlIiwid2luZG93IiwibmV4dCIsInJvdXRlciIsInBhdGhuYW1lIiwiYWN0aW9uIiwic2VuZE1lc3NhZ2UiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnQiLCJjbGllbnRJZCIsIl9fbmV4dERldkNsaWVudElkIiwibG9jYXRpb24iLCJyZWxvYWQiLCJwYWdlIiwiZGF0YSIsImNvbXBvbmVudHMiLCJFcnJvciIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/dev/hot-middleware-client.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/dev/on-demand-entries-client.js": +/*!***********************************************************************!*\ + !*** ./node_modules/next/dist/client/dev/on-demand-entries-client.js ***! + \***********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _router = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../router */ \"./node_modules/next/dist/client/router.js\"));\nconst _websocket = __webpack_require__(/*! ./error-overlay/websocket */ \"./node_modules/next/dist/client/dev/error-overlay/websocket.js\");\nconst _default = async (page)=>{\n if (page) {\n // in AMP the router isn't initialized on the client and\n // client-transitions don't occur so ping initial page\n setInterval(()=>{\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"ping\",\n page\n }));\n }, 2500);\n } else {\n _router.default.ready(()=>{\n setInterval(()=>{\n // when notFound: true is returned we should use the notFoundPage\n // as the Router.pathname will point to the 404 page but we want\n // to ping the source page that returned notFound: true instead\n const notFoundSrcPage = self.__NEXT_DATA__.notFoundSrcPage;\n const pathname = (_router.default.pathname === \"/404\" || _router.default.pathname === \"/_error\") && notFoundSrcPage ? notFoundSrcPage : _router.default.pathname;\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"ping\",\n page: pathname\n }));\n }, 2500);\n });\n }\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=on-demand-entries-client.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvb24tZGVtYW5kLWVudHJpZXMtY2xpZW50LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwyQ0FBMEM7SUFDdENJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLDRHQUF5QztBQUNsRixNQUFNQyxVQUFVLFdBQVcsR0FBR0YseUJBQXlCRyxDQUFDLENBQUNGLG1CQUFPQSxDQUFDLDREQUFXO0FBQzVFLE1BQU1HLGFBQWFILG1CQUFPQSxDQUFDLGlHQUEyQjtBQUN0RCxNQUFNRixXQUFXLE9BQU9NO0lBQ3BCLElBQUlBLE1BQU07UUFDTix3REFBd0Q7UUFDeEQsc0RBQXNEO1FBQ3REQyxZQUFZO1lBQ1AsSUFBR0YsV0FBV0csV0FBVyxFQUFFQyxLQUFLQyxTQUFTLENBQUM7Z0JBQ3ZDQyxPQUFPO2dCQUNQTDtZQUNKO1FBQ0osR0FBRztJQUNQLE9BQU87UUFDSEgsUUFBUVMsT0FBTyxDQUFDQyxLQUFLLENBQUM7WUFDbEJOLFlBQVk7Z0JBQ1IsaUVBQWlFO2dCQUNqRSxnRUFBZ0U7Z0JBQ2hFLCtEQUErRDtnQkFDL0QsTUFBTU8sa0JBQWtCQyxLQUFLQyxhQUFhLENBQUNGLGVBQWU7Z0JBQzFELE1BQU1HLFdBQVcsQ0FBQ2QsUUFBUVMsT0FBTyxDQUFDSyxRQUFRLEtBQUssVUFBVWQsUUFBUVMsT0FBTyxDQUFDSyxRQUFRLEtBQUssU0FBUSxLQUFNSCxrQkFBa0JBLGtCQUFrQlgsUUFBUVMsT0FBTyxDQUFDSyxRQUFRO2dCQUMvSixJQUFHWixXQUFXRyxXQUFXLEVBQUVDLEtBQUtDLFNBQVMsQ0FBQztvQkFDdkNDLE9BQU87b0JBQ1BMLE1BQU1XO2dCQUNWO1lBQ0osR0FBRztRQUNQO0lBQ0o7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPckIsUUFBUWdCLE9BQU8sS0FBSyxjQUFlLE9BQU9oQixRQUFRZ0IsT0FBTyxLQUFLLFlBQVloQixRQUFRZ0IsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPaEIsUUFBUWdCLE9BQU8sQ0FBQ00sVUFBVSxLQUFLLGFBQWE7SUFDckt4QixPQUFPQyxjQUFjLENBQUNDLFFBQVFnQixPQUFPLEVBQUUsY0FBYztRQUFFZixPQUFPO0lBQUs7SUFDbkVILE9BQU95QixNQUFNLENBQUN2QixRQUFRZ0IsT0FBTyxFQUFFaEI7SUFDL0J3QixPQUFPeEIsT0FBTyxHQUFHQSxRQUFRZ0IsT0FBTztBQUNsQyxFQUVBLG9EQUFvRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9kZXYvb24tZGVtYW5kLWVudHJpZXMtY2xpZW50LmpzPzg0NWMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfZGVmYXVsdDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfcm91dGVyID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vcm91dGVyXCIpKTtcbmNvbnN0IF93ZWJzb2NrZXQgPSByZXF1aXJlKFwiLi9lcnJvci1vdmVybGF5L3dlYnNvY2tldFwiKTtcbmNvbnN0IF9kZWZhdWx0ID0gYXN5bmMgKHBhZ2UpPT57XG4gICAgaWYgKHBhZ2UpIHtcbiAgICAgICAgLy8gaW4gQU1QIHRoZSByb3V0ZXIgaXNuJ3QgaW5pdGlhbGl6ZWQgb24gdGhlIGNsaWVudCBhbmRcbiAgICAgICAgLy8gY2xpZW50LXRyYW5zaXRpb25zIGRvbid0IG9jY3VyIHNvIHBpbmcgaW5pdGlhbCBwYWdlXG4gICAgICAgIHNldEludGVydmFsKCgpPT57XG4gICAgICAgICAgICAoMCwgX3dlYnNvY2tldC5zZW5kTWVzc2FnZSkoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGV2ZW50OiBcInBpbmdcIixcbiAgICAgICAgICAgICAgICBwYWdlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIDI1MDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIF9yb3V0ZXIuZGVmYXVsdC5yZWFkeSgoKT0+e1xuICAgICAgICAgICAgc2V0SW50ZXJ2YWwoKCk9PntcbiAgICAgICAgICAgICAgICAvLyB3aGVuIG5vdEZvdW5kOiB0cnVlIGlzIHJldHVybmVkIHdlIHNob3VsZCB1c2UgdGhlIG5vdEZvdW5kUGFnZVxuICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBSb3V0ZXIucGF0aG5hbWUgd2lsbCBwb2ludCB0byB0aGUgNDA0IHBhZ2UgYnV0IHdlIHdhbnRcbiAgICAgICAgICAgICAgICAvLyB0byBwaW5nIHRoZSBzb3VyY2UgcGFnZSB0aGF0IHJldHVybmVkIG5vdEZvdW5kOiB0cnVlIGluc3RlYWRcbiAgICAgICAgICAgICAgICBjb25zdCBub3RGb3VuZFNyY1BhZ2UgPSBzZWxmLl9fTkVYVF9EQVRBX18ubm90Rm91bmRTcmNQYWdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhuYW1lID0gKF9yb3V0ZXIuZGVmYXVsdC5wYXRobmFtZSA9PT0gXCIvNDA0XCIgfHwgX3JvdXRlci5kZWZhdWx0LnBhdGhuYW1lID09PSBcIi9fZXJyb3JcIikgJiYgbm90Rm91bmRTcmNQYWdlID8gbm90Rm91bmRTcmNQYWdlIDogX3JvdXRlci5kZWZhdWx0LnBhdGhuYW1lO1xuICAgICAgICAgICAgICAgICgwLCBfd2Vic29ja2V0LnNlbmRNZXNzYWdlKShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBcInBpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogcGF0aG5hbWVcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9LCAyNTAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b24tZGVtYW5kLWVudHJpZXMtY2xpZW50LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZGVmYXVsdCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfcm91dGVyIiwiXyIsIl93ZWJzb2NrZXQiLCJwYWdlIiwic2V0SW50ZXJ2YWwiLCJzZW5kTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudCIsImRlZmF1bHQiLCJyZWFkeSIsIm5vdEZvdW5kU3JjUGFnZSIsInNlbGYiLCJfX05FWFRfREFUQV9fIiwicGF0aG5hbWUiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/dev/on-demand-entries-client.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/has-base-path.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/client/has-base-path.js ***! + \********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"hasBasePath\", ({\n enumerable: true,\n get: function() {\n return hasBasePath;\n }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ../shared/lib/router/utils/path-has-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nconst basePath = false || \"\";\nfunction hasBasePath(path) {\n return (0, _pathhasprefix.pathHasPrefix)(path, basePath);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=has-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9oYXMtYmFzZS1wYXRoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCwrQ0FBOEM7SUFDMUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxpQkFBaUJDLG1CQUFPQSxDQUFDLHVIQUE0QztBQUMzRSxNQUFNQyxXQUFXQyxNQUFrQyxJQUFJO0FBQ3ZELFNBQVNKLFlBQVlPLElBQUk7SUFDckIsT0FBTyxDQUFDLEdBQUdOLGVBQWVPLGFBQWEsRUFBRUQsTUFBTUo7QUFDbkQ7QUFFQSxJQUFJLENBQUMsT0FBT1AsUUFBUWEsT0FBTyxLQUFLLGNBQWUsT0FBT2IsUUFBUWEsT0FBTyxLQUFLLFlBQVliLFFBQVFhLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2IsUUFBUWEsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS2hCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWEsT0FBTyxFQUFFLGNBQWM7UUFBRVosT0FBTztJQUFLO0lBQ25FSCxPQUFPaUIsTUFBTSxDQUFDZixRQUFRYSxPQUFPLEVBQUViO0lBQy9CZ0IsT0FBT2hCLE9BQU8sR0FBR0EsUUFBUWEsT0FBTztBQUNsQyxFQUVBLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9oYXMtYmFzZS1wYXRoLmpzPzVhNDkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoYXNCYXNlUGF0aFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaGFzQmFzZVBhdGg7XG4gICAgfVxufSk7XG5jb25zdCBfcGF0aGhhc3ByZWZpeCA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXRoLWhhcy1wcmVmaXhcIik7XG5jb25zdCBiYXNlUGF0aCA9IHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEggfHwgXCJcIjtcbmZ1bmN0aW9uIGhhc0Jhc2VQYXRoKHBhdGgpIHtcbiAgICByZXR1cm4gKDAsIF9wYXRoaGFzcHJlZml4LnBhdGhIYXNQcmVmaXgpKHBhdGgsIGJhc2VQYXRoKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzLWJhc2UtcGF0aC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaGFzQmFzZVBhdGgiLCJfcGF0aGhhc3ByZWZpeCIsInJlcXVpcmUiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsInBhdGhIYXNQcmVmaXgiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/has-base-path.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/head-manager.js": +/*!*******************************************************!*\ + !*** ./node_modules/next/dist/client/head-manager.js ***! + \*******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DOMAttributeNames: function() {\n return DOMAttributeNames;\n },\n isEqualNode: function() {\n return isEqualNode;\n },\n default: function() {\n return initHeadManager;\n }\n});\nconst DOMAttributeNames = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\",\n noModule: \"noModule\"\n};\nfunction reactElementToDOM(param) {\n let { type, props } = param;\n const el = document.createElement(type);\n for(const p in props){\n if (!props.hasOwnProperty(p)) continue;\n if (p === \"children\" || p === \"dangerouslySetInnerHTML\") continue;\n // we don't render undefined props to the DOM\n if (props[p] === undefined) continue;\n const attr = DOMAttributeNames[p] || p.toLowerCase();\n if (type === \"script\" && (attr === \"async\" || attr === \"defer\" || attr === \"noModule\")) {\n el[attr] = !!props[p];\n } else {\n el.setAttribute(attr, props[p]);\n }\n }\n const { children, dangerouslySetInnerHTML } = props;\n if (dangerouslySetInnerHTML) {\n el.innerHTML = dangerouslySetInnerHTML.__html || \"\";\n } else if (children) {\n el.textContent = typeof children === \"string\" ? children : Array.isArray(children) ? children.join(\"\") : \"\";\n }\n return el;\n}\nfunction isEqualNode(oldTag, newTag) {\n if (oldTag instanceof HTMLElement && newTag instanceof HTMLElement) {\n const nonce = newTag.getAttribute(\"nonce\");\n // Only strip the nonce if `oldTag` has had it stripped. An element's nonce attribute will not\n // be stripped if there is no content security policy response header that includes a nonce.\n if (nonce && !oldTag.getAttribute(\"nonce\")) {\n const cloneTag = newTag.cloneNode(true);\n cloneTag.setAttribute(\"nonce\", \"\");\n cloneTag.nonce = nonce;\n return nonce === oldTag.nonce && oldTag.isEqualNode(cloneTag);\n }\n }\n return oldTag.isEqualNode(newTag);\n}\nlet updateElements;\nif (false) {} else {\n updateElements = (type, components)=>{\n const headEl = document.getElementsByTagName(\"head\")[0];\n const headCountEl = headEl.querySelector(\"meta[name=next-head-count]\");\n if (true) {\n if (!headCountEl) {\n console.error(\"Warning: next-head-count is missing. https://nextjs.org/docs/messages/next-head-count-missing\");\n return;\n }\n }\n const headCount = Number(headCountEl.content);\n const oldTags = [];\n for(let i = 0, j = headCountEl.previousElementSibling; i < headCount; i++, j = (j == null ? void 0 : j.previousElementSibling) || null){\n var _j_tagName;\n if ((j == null ? void 0 : (_j_tagName = j.tagName) == null ? void 0 : _j_tagName.toLowerCase()) === type) {\n oldTags.push(j);\n }\n }\n const newTags = components.map(reactElementToDOM).filter((newTag)=>{\n for(let k = 0, len = oldTags.length; k < len; k++){\n const oldTag = oldTags[k];\n if (isEqualNode(oldTag, newTag)) {\n oldTags.splice(k, 1);\n return false;\n }\n }\n return true;\n });\n oldTags.forEach((t)=>{\n var _t_parentNode;\n return (_t_parentNode = t.parentNode) == null ? void 0 : _t_parentNode.removeChild(t);\n });\n newTags.forEach((t)=>headEl.insertBefore(t, headCountEl));\n headCountEl.content = (headCount - oldTags.length + newTags.length).toString();\n };\n}\nfunction initHeadManager() {\n return {\n mountedInstances: new Set(),\n updateHead: (head)=>{\n const tags = {};\n head.forEach((h)=>{\n if (// it won't be inlined. In this case revert to the original behavior\n h.type === \"link\" && h.props[\"data-optimized-fonts\"]) {\n if (document.querySelector('style[data-href=\"' + h.props[\"data-href\"] + '\"]')) {\n return;\n } else {\n h.props.href = h.props[\"data-href\"];\n h.props[\"data-href\"] = undefined;\n }\n }\n const components = tags[h.type] || [];\n components.push(h);\n tags[h.type] = components;\n });\n const titleComponent = tags.title ? tags.title[0] : null;\n let title = \"\";\n if (titleComponent) {\n const { children } = titleComponent.props;\n title = typeof children === \"string\" ? children : Array.isArray(children) ? children.join(\"\") : \"\";\n }\n if (title !== document.title) document.title = title;\n [\n \"meta\",\n \"base\",\n \"link\",\n \"style\",\n \"script\"\n ].forEach((type)=>{\n updateElements(type, tags[type] || []);\n });\n }\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=head-manager.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9oZWFkLW1hbmFnZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FJTjtBQUNBLFNBQVNJLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlWLE9BQU9DLGNBQWMsQ0FBQ1EsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTixTQUFTO0lBQ2JHLG1CQUFtQjtRQUNmLE9BQU9BO0lBQ1g7SUFDQUMsYUFBYTtRQUNULE9BQU9BO0lBQ1g7SUFDQUMsU0FBUztRQUNMLE9BQU9PO0lBQ1g7QUFDSjtBQUNBLE1BQU1ULG9CQUFvQjtJQUN0QlUsZUFBZTtJQUNmQyxXQUFXO0lBQ1hDLFNBQVM7SUFDVEMsV0FBVztJQUNYQyxVQUFVO0FBQ2Q7QUFDQSxTQUFTQyxrQkFBa0JDLEtBQUs7SUFDNUIsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHRjtJQUN0QixNQUFNRyxLQUFLQyxTQUFTQyxhQUFhLENBQUNKO0lBQ2xDLElBQUksTUFBTUssS0FBS0osTUFBTTtRQUNqQixJQUFJLENBQUNBLE1BQU1LLGNBQWMsQ0FBQ0QsSUFBSTtRQUM5QixJQUFJQSxNQUFNLGNBQWNBLE1BQU0sMkJBQTJCO1FBQ3pELDZDQUE2QztRQUM3QyxJQUFJSixLQUFLLENBQUNJLEVBQUUsS0FBS0UsV0FBVztRQUM1QixNQUFNQyxPQUFPekIsaUJBQWlCLENBQUNzQixFQUFFLElBQUlBLEVBQUVJLFdBQVc7UUFDbEQsSUFBSVQsU0FBUyxZQUFhUSxDQUFBQSxTQUFTLFdBQVdBLFNBQVMsV0FBV0EsU0FBUyxVQUFTLEdBQUk7WUFDcEZOLEVBQUUsQ0FBQ00sS0FBSyxHQUFHLENBQUMsQ0FBQ1AsS0FBSyxDQUFDSSxFQUFFO1FBQ3pCLE9BQU87WUFDSEgsR0FBR1EsWUFBWSxDQUFDRixNQUFNUCxLQUFLLENBQUNJLEVBQUU7UUFDbEM7SUFDSjtJQUNBLE1BQU0sRUFBRU0sUUFBUSxFQUFFQyx1QkFBdUIsRUFBRSxHQUFHWDtJQUM5QyxJQUFJVyx5QkFBeUI7UUFDekJWLEdBQUdXLFNBQVMsR0FBR0Qsd0JBQXdCRSxNQUFNLElBQUk7SUFDckQsT0FBTyxJQUFJSCxVQUFVO1FBQ2pCVCxHQUFHYSxXQUFXLEdBQUcsT0FBT0osYUFBYSxXQUFXQSxXQUFXSyxNQUFNQyxPQUFPLENBQUNOLFlBQVlBLFNBQVNPLElBQUksQ0FBQyxNQUFNO0lBQzdHO0lBQ0EsT0FBT2hCO0FBQ1g7QUFDQSxTQUFTbEIsWUFBWW1DLE1BQU0sRUFBRUMsTUFBTTtJQUMvQixJQUFJRCxrQkFBa0JFLGVBQWVELGtCQUFrQkMsYUFBYTtRQUNoRSxNQUFNQyxRQUFRRixPQUFPRyxZQUFZLENBQUM7UUFDbEMsOEZBQThGO1FBQzlGLDRGQUE0RjtRQUM1RixJQUFJRCxTQUFTLENBQUNILE9BQU9JLFlBQVksQ0FBQyxVQUFVO1lBQ3hDLE1BQU1DLFdBQVdKLE9BQU9LLFNBQVMsQ0FBQztZQUNsQ0QsU0FBU2QsWUFBWSxDQUFDLFNBQVM7WUFDL0JjLFNBQVNGLEtBQUssR0FBR0E7WUFDakIsT0FBT0EsVUFBVUgsT0FBT0csS0FBSyxJQUFJSCxPQUFPbkMsV0FBVyxDQUFDd0M7UUFDeEQ7SUFDSjtJQUNBLE9BQU9MLE9BQU9uQyxXQUFXLENBQUNvQztBQUM5QjtBQUNBLElBQUlNO0FBQ0osSUFBSUMsS0FBbUMsRUFBRSxFQW1EeEMsTUFBTTtJQUNIRCxpQkFBaUIsQ0FBQzFCLE1BQU04QjtRQUNwQixNQUFNQyxTQUFTNUIsU0FBUzJELG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZELE1BQU1DLGNBQWNoQyxPQUFPQyxhQUFhLENBQUM7UUFDekMsSUFBSUwsSUFBcUMsRUFBRTtZQUN2QyxJQUFJLENBQUNvQyxhQUFhO2dCQUNkQyxRQUFRQyxLQUFLLENBQUM7Z0JBQ2Q7WUFDSjtRQUNKO1FBQ0EsTUFBTUMsWUFBWUMsT0FBT0osWUFBWUgsT0FBTztRQUM1QyxNQUFNekIsVUFBVSxFQUFFO1FBQ2xCLElBQUksSUFBSUcsSUFBSSxHQUFHOEIsSUFBSUwsWUFBWU0sc0JBQXNCLEVBQUUvQixJQUFJNEIsV0FBVzVCLEtBQUs4QixJQUFJLENBQUNBLEtBQUssT0FBTyxLQUFLLElBQUlBLEVBQUVDLHNCQUFzQixLQUFLLEtBQUs7WUFDbkksSUFBSUM7WUFDSixJQUFJLENBQUNGLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQ0UsYUFBYUYsRUFBRXhCLE9BQU8sS0FBSyxPQUFPLEtBQUssSUFBSTBCLFdBQVc3RCxXQUFXLEVBQUMsTUFBT1QsTUFBTTtnQkFDdEdtQyxRQUFRRSxJQUFJLENBQUMrQjtZQUNqQjtRQUNKO1FBQ0EsTUFBTXZCLFVBQVVmLFdBQVdnQixHQUFHLENBQUNoRCxtQkFBbUJpRCxNQUFNLENBQUMsQ0FBQzNCO1lBQ3RELElBQUksSUFBSTRCLElBQUksR0FBR0MsTUFBTWQsUUFBUUksTUFBTSxFQUFFUyxJQUFJQyxLQUFLRCxJQUFJO2dCQUM5QyxNQUFNN0IsU0FBU2dCLE9BQU8sQ0FBQ2EsRUFBRTtnQkFDekIsSUFBSWhFLFlBQVltQyxRQUFRQyxTQUFTO29CQUM3QmUsUUFBUWUsTUFBTSxDQUFDRixHQUFHO29CQUNsQixPQUFPO2dCQUNYO1lBQ0o7WUFDQSxPQUFPO1FBQ1g7UUFDQWIsUUFBUWdCLE9BQU8sQ0FBQyxDQUFDQztZQUNiLElBQUlDO1lBQ0osT0FBTyxDQUFDQSxnQkFBZ0JELEVBQUVJLFVBQVUsS0FBSyxPQUFPLEtBQUssSUFBSUgsY0FBY0ksV0FBVyxDQUFDTDtRQUN2RjtRQUNBUCxRQUFRTSxPQUFPLENBQUMsQ0FBQ0MsSUFBSXJCLE9BQU93QyxZQUFZLENBQUNuQixHQUFHVztRQUM1Q0EsWUFBWUgsT0FBTyxHQUFHLENBQUNNLFlBQVkvQixRQUFRSSxNQUFNLEdBQUdNLFFBQVFOLE1BQU0sRUFBRWlDLFFBQVE7SUFDaEY7QUFDSjtBQUNBLFNBQVNoRjtJQUNMLE9BQU87UUFDSGlGLGtCQUFrQixJQUFJQztRQUN0QkMsWUFBWSxDQUFDQztZQUNULE1BQU1DLE9BQU8sQ0FBQztZQUNkRCxLQUFLekIsT0FBTyxDQUFDLENBQUMyQjtnQkFDVixJQUNBLG9FQUFvRTtnQkFDcEVBLEVBQUU5RSxJQUFJLEtBQUssVUFBVThFLEVBQUU3RSxLQUFLLENBQUMsdUJBQXVCLEVBQUU7b0JBQ2xELElBQUlFLFNBQVM2QixhQUFhLENBQUMsc0JBQXNCOEMsRUFBRTdFLEtBQUssQ0FBQyxZQUFZLEdBQUcsT0FBTzt3QkFDM0U7b0JBQ0osT0FBTzt3QkFDSDZFLEVBQUU3RSxLQUFLLENBQUM4RSxJQUFJLEdBQUdELEVBQUU3RSxLQUFLLENBQUMsWUFBWTt3QkFDbkM2RSxFQUFFN0UsS0FBSyxDQUFDLFlBQVksR0FBR007b0JBQzNCO2dCQUNKO2dCQUNBLE1BQU11QixhQUFhK0MsSUFBSSxDQUFDQyxFQUFFOUUsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDckM4QixXQUFXTyxJQUFJLENBQUN5QztnQkFDaEJELElBQUksQ0FBQ0MsRUFBRTlFLElBQUksQ0FBQyxHQUFHOEI7WUFDbkI7WUFDQSxNQUFNa0QsaUJBQWlCSCxLQUFLSSxLQUFLLEdBQUdKLEtBQUtJLEtBQUssQ0FBQyxFQUFFLEdBQUc7WUFDcEQsSUFBSUEsUUFBUTtZQUNaLElBQUlELGdCQUFnQjtnQkFDaEIsTUFBTSxFQUFFckUsUUFBUSxFQUFFLEdBQUdxRSxlQUFlL0UsS0FBSztnQkFDekNnRixRQUFRLE9BQU90RSxhQUFhLFdBQVdBLFdBQVdLLE1BQU1DLE9BQU8sQ0FBQ04sWUFBWUEsU0FBU08sSUFBSSxDQUFDLE1BQU07WUFDcEc7WUFDQSxJQUFJK0QsVUFBVTlFLFNBQVM4RSxLQUFLLEVBQUU5RSxTQUFTOEUsS0FBSyxHQUFHQTtZQUMvQztnQkFDSTtnQkFDQTtnQkFDQTtnQkFDQTtnQkFDQTthQUNILENBQUM5QixPQUFPLENBQUMsQ0FBQ25EO2dCQUNQMEIsZUFBZTFCLE1BQU02RSxJQUFJLENBQUM3RSxLQUFLLElBQUksRUFBRTtZQUN6QztRQUNKO0lBQ0o7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPcEIsUUFBUUssT0FBTyxLQUFLLGNBQWUsT0FBT0wsUUFBUUssT0FBTyxLQUFLLFlBQVlMLFFBQVFLLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT0wsUUFBUUssT0FBTyxDQUFDaUcsVUFBVSxLQUFLLGFBQWE7SUFDckt4RyxPQUFPQyxjQUFjLENBQUNDLFFBQVFLLE9BQU8sRUFBRSxjQUFjO1FBQUVKLE9BQU87SUFBSztJQUNuRUgsT0FBT3lHLE1BQU0sQ0FBQ3ZHLFFBQVFLLE9BQU8sRUFBRUw7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUUssT0FBTztBQUNsQyxFQUVBLHdDQUF3QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9oZWFkLW1hbmFnZXIuanM/Y2E0YSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIERPTUF0dHJpYnV0ZU5hbWVzOiBudWxsLFxuICAgIGlzRXF1YWxOb2RlOiBudWxsLFxuICAgIGRlZmF1bHQ6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgRE9NQXR0cmlidXRlTmFtZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRE9NQXR0cmlidXRlTmFtZXM7XG4gICAgfSxcbiAgICBpc0VxdWFsTm9kZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0VxdWFsTm9kZTtcbiAgICB9LFxuICAgIGRlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaW5pdEhlYWRNYW5hZ2VyO1xuICAgIH1cbn0pO1xuY29uc3QgRE9NQXR0cmlidXRlTmFtZXMgPSB7XG4gICAgYWNjZXB0Q2hhcnNldDogXCJhY2NlcHQtY2hhcnNldFwiLFxuICAgIGNsYXNzTmFtZTogXCJjbGFzc1wiLFxuICAgIGh0bWxGb3I6IFwiZm9yXCIsXG4gICAgaHR0cEVxdWl2OiBcImh0dHAtZXF1aXZcIixcbiAgICBub01vZHVsZTogXCJub01vZHVsZVwiXG59O1xuZnVuY3Rpb24gcmVhY3RFbGVtZW50VG9ET00ocGFyYW0pIHtcbiAgICBsZXQgeyB0eXBlLCBwcm9wcyB9ID0gcGFyYW07XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpO1xuICAgIGZvcihjb25zdCBwIGluIHByb3BzKXtcbiAgICAgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShwKSkgY29udGludWU7XG4gICAgICAgIGlmIChwID09PSBcImNoaWxkcmVuXCIgfHwgcCA9PT0gXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiKSBjb250aW51ZTtcbiAgICAgICAgLy8gd2UgZG9uJ3QgcmVuZGVyIHVuZGVmaW5lZCBwcm9wcyB0byB0aGUgRE9NXG4gICAgICAgIGlmIChwcm9wc1twXSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgYXR0ciA9IERPTUF0dHJpYnV0ZU5hbWVzW3BdIHx8IHAudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHR5cGUgPT09IFwic2NyaXB0XCIgJiYgKGF0dHIgPT09IFwiYXN5bmNcIiB8fCBhdHRyID09PSBcImRlZmVyXCIgfHwgYXR0ciA9PT0gXCJub01vZHVsZVwiKSkge1xuICAgICAgICAgICAgZWxbYXR0cl0gPSAhIXByb3BzW3BdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKGF0dHIsIHByb3BzW3BdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB7IGNoaWxkcmVuLCBkYW5nZXJvdXNseVNldElubmVySFRNTCB9ID0gcHJvcHM7XG4gICAgaWYgKGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSB7XG4gICAgICAgIGVsLmlubmVySFRNTCA9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCB8fCBcIlwiO1xuICAgIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgZWwudGV4dENvbnRlbnQgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgPyBjaGlsZHJlbiA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4uam9pbihcIlwiKSA6IFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBlbDtcbn1cbmZ1bmN0aW9uIGlzRXF1YWxOb2RlKG9sZFRhZywgbmV3VGFnKSB7XG4gICAgaWYgKG9sZFRhZyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIG5ld1RhZyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vbmNlID0gbmV3VGFnLmdldEF0dHJpYnV0ZShcIm5vbmNlXCIpO1xuICAgICAgICAvLyBPbmx5IHN0cmlwIHRoZSBub25jZSBpZiBgb2xkVGFnYCBoYXMgaGFkIGl0IHN0cmlwcGVkLiBBbiBlbGVtZW50J3Mgbm9uY2UgYXR0cmlidXRlIHdpbGwgbm90XG4gICAgICAgIC8vIGJlIHN0cmlwcGVkIGlmIHRoZXJlIGlzIG5vIGNvbnRlbnQgc2VjdXJpdHkgcG9saWN5IHJlc3BvbnNlIGhlYWRlciB0aGF0IGluY2x1ZGVzIGEgbm9uY2UuXG4gICAgICAgIGlmIChub25jZSAmJiAhb2xkVGFnLmdldEF0dHJpYnV0ZShcIm5vbmNlXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZVRhZyA9IG5ld1RhZy5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgICAgICBjbG9uZVRhZy5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBcIlwiKTtcbiAgICAgICAgICAgIGNsb25lVGFnLm5vbmNlID0gbm9uY2U7XG4gICAgICAgICAgICByZXR1cm4gbm9uY2UgPT09IG9sZFRhZy5ub25jZSAmJiBvbGRUYWcuaXNFcXVhbE5vZGUoY2xvbmVUYWcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvbGRUYWcuaXNFcXVhbE5vZGUobmV3VGFnKTtcbn1cbmxldCB1cGRhdGVFbGVtZW50cztcbmlmIChwcm9jZXNzLmVudi5fX05FWFRfU1RSSUNUX05FWFRfSEVBRCkge1xuICAgIHVwZGF0ZUVsZW1lbnRzID0gKHR5cGUsIGNvbXBvbmVudHMpPT57XG4gICAgICAgIGNvbnN0IGhlYWRFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJoZWFkXCIpO1xuICAgICAgICBpZiAoIWhlYWRFbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBoZWFkTWV0YVRhZ3MgPSBoZWFkRWwucXVlcnlTZWxlY3RvckFsbCgnbWV0YVtuYW1lPVwibmV4dC1oZWFkXCJdJykgfHwgW107XG4gICAgICAgIGNvbnN0IG9sZFRhZ3MgPSBbXTtcbiAgICAgICAgaWYgKHR5cGUgPT09IFwibWV0YVwiKSB7XG4gICAgICAgICAgICBjb25zdCBtZXRhQ2hhcnNldCA9IGhlYWRFbC5xdWVyeVNlbGVjdG9yKFwibWV0YVtjaGFyc2V0XVwiKTtcbiAgICAgICAgICAgIGlmIChtZXRhQ2hhcnNldCkge1xuICAgICAgICAgICAgICAgIG9sZFRhZ3MucHVzaChtZXRhQ2hhcnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGhlYWRNZXRhVGFncy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICB2YXIgX2hlYWRUYWdfdGFnTmFtZTtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFUYWcgPSBoZWFkTWV0YVRhZ3NbaV07XG4gICAgICAgICAgICBjb25zdCBoZWFkVGFnID0gbWV0YVRhZy5uZXh0U2libGluZztcbiAgICAgICAgICAgIGlmICgoaGVhZFRhZyA9PSBudWxsID8gdm9pZCAwIDogKF9oZWFkVGFnX3RhZ05hbWUgPSBoZWFkVGFnLnRhZ05hbWUpID09IG51bGwgPyB2b2lkIDAgOiBfaGVhZFRhZ190YWdOYW1lLnRvTG93ZXJDYXNlKCkpID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgICAgb2xkVGFncy5wdXNoKGhlYWRUYWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1RhZ3MgPSBjb21wb25lbnRzLm1hcChyZWFjdEVsZW1lbnRUb0RPTSkuZmlsdGVyKChuZXdUYWcpPT57XG4gICAgICAgICAgICBmb3IobGV0IGsgPSAwLCBsZW4gPSBvbGRUYWdzLmxlbmd0aDsgayA8IGxlbjsgaysrKXtcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRUYWcgPSBvbGRUYWdzW2tdO1xuICAgICAgICAgICAgICAgIGlmIChpc0VxdWFsTm9kZShvbGRUYWcsIG5ld1RhZykpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVGFncy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9sZFRhZ3MuZm9yRWFjaCgodCk9PntcbiAgICAgICAgICAgIHZhciBfdF9wYXJlbnROb2RlO1xuICAgICAgICAgICAgY29uc3QgbWV0YVRhZyA9IHQucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgaWYgKG1ldGFUYWcgJiYgbWV0YVRhZy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpID09PSBcIm5leHQtaGVhZFwiKSB7XG4gICAgICAgICAgICAgICAgdmFyIF90X3BhcmVudE5vZGUxO1xuICAgICAgICAgICAgICAgIChfdF9wYXJlbnROb2RlMSA9IHQucGFyZW50Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90X3BhcmVudE5vZGUxLnJlbW92ZUNoaWxkKG1ldGFUYWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKF90X3BhcmVudE5vZGUgPSB0LnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfdF9wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpO1xuICAgICAgICB9KTtcbiAgICAgICAgbmV3VGFncy5mb3JFYWNoKCh0KT0+e1xuICAgICAgICAgICAgdmFyIF90X3RhZ05hbWU7XG4gICAgICAgICAgICBjb25zdCBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1ldGFcIik7XG4gICAgICAgICAgICBtZXRhLm5hbWUgPSBcIm5leHQtaGVhZFwiO1xuICAgICAgICAgICAgbWV0YS5jb250ZW50ID0gXCIxXCI7XG4gICAgICAgICAgICAvLyBtZXRhW2NoYXJzZXRdIG11c3QgYmUgZmlyc3QgZWxlbWVudCBzbyBzcGVjaWFsIGNhc2VcbiAgICAgICAgICAgIGlmICghKCgoX3RfdGFnTmFtZSA9IHQudGFnTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90X3RhZ05hbWUudG9Mb3dlckNhc2UoKSkgPT09IFwibWV0YVwiICYmIHQuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKSkpIHtcbiAgICAgICAgICAgICAgICBoZWFkRWwuYXBwZW5kQ2hpbGQobWV0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoZWFkRWwuYXBwZW5kQ2hpbGQodCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59IGVsc2Uge1xuICAgIHVwZGF0ZUVsZW1lbnRzID0gKHR5cGUsIGNvbXBvbmVudHMpPT57XG4gICAgICAgIGNvbnN0IGhlYWRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXTtcbiAgICAgICAgY29uc3QgaGVhZENvdW50RWwgPSBoZWFkRWwucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT1uZXh0LWhlYWQtY291bnRdXCIpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBpZiAoIWhlYWRDb3VudEVsKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIldhcm5pbmc6IG5leHQtaGVhZC1jb3VudCBpcyBtaXNzaW5nLiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uZXh0LWhlYWQtY291bnQtbWlzc2luZ1wiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZENvdW50ID0gTnVtYmVyKGhlYWRDb3VudEVsLmNvbnRlbnQpO1xuICAgICAgICBjb25zdCBvbGRUYWdzID0gW107XG4gICAgICAgIGZvcihsZXQgaSA9IDAsIGogPSBoZWFkQ291bnRFbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nOyBpIDwgaGVhZENvdW50OyBpKyssIGogPSAoaiA9PSBudWxsID8gdm9pZCAwIDogai5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB8fCBudWxsKXtcbiAgICAgICAgICAgIHZhciBfal90YWdOYW1lO1xuICAgICAgICAgICAgaWYgKChqID09IG51bGwgPyB2b2lkIDAgOiAoX2pfdGFnTmFtZSA9IGoudGFnTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9qX3RhZ05hbWUudG9Mb3dlckNhc2UoKSkgPT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgICBvbGRUYWdzLnB1c2goaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3VGFncyA9IGNvbXBvbmVudHMubWFwKHJlYWN0RWxlbWVudFRvRE9NKS5maWx0ZXIoKG5ld1RhZyk9PntcbiAgICAgICAgICAgIGZvcihsZXQgayA9IDAsIGxlbiA9IG9sZFRhZ3MubGVuZ3RoOyBrIDwgbGVuOyBrKyspe1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFRhZyA9IG9sZFRhZ3Nba107XG4gICAgICAgICAgICAgICAgaWYgKGlzRXF1YWxOb2RlKG9sZFRhZywgbmV3VGFnKSkge1xuICAgICAgICAgICAgICAgICAgICBvbGRUYWdzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgb2xkVGFncy5mb3JFYWNoKCh0KT0+e1xuICAgICAgICAgICAgdmFyIF90X3BhcmVudE5vZGU7XG4gICAgICAgICAgICByZXR1cm4gKF90X3BhcmVudE5vZGUgPSB0LnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfdF9wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpO1xuICAgICAgICB9KTtcbiAgICAgICAgbmV3VGFncy5mb3JFYWNoKCh0KT0+aGVhZEVsLmluc2VydEJlZm9yZSh0LCBoZWFkQ291bnRFbCkpO1xuICAgICAgICBoZWFkQ291bnRFbC5jb250ZW50ID0gKGhlYWRDb3VudCAtIG9sZFRhZ3MubGVuZ3RoICsgbmV3VGFncy5sZW5ndGgpLnRvU3RyaW5nKCk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGluaXRIZWFkTWFuYWdlcigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBtb3VudGVkSW5zdGFuY2VzOiBuZXcgU2V0KCksXG4gICAgICAgIHVwZGF0ZUhlYWQ6IChoZWFkKT0+e1xuICAgICAgICAgICAgY29uc3QgdGFncyA9IHt9O1xuICAgICAgICAgICAgaGVhZC5mb3JFYWNoKChoKT0+e1xuICAgICAgICAgICAgICAgIGlmICgvLyBJZiB0aGUgZm9udCB0YWcgaXMgbG9hZGVkIG9ubHkgb24gY2xpZW50IG5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAvLyBpdCB3b24ndCBiZSBpbmxpbmVkLiBJbiB0aGlzIGNhc2UgcmV2ZXJ0IHRvIHRoZSBvcmlnaW5hbCBiZWhhdmlvclxuICAgICAgICAgICAgICAgIGgudHlwZSA9PT0gXCJsaW5rXCIgJiYgaC5wcm9wc1tcImRhdGEtb3B0aW1pemVkLWZvbnRzXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzdHlsZVtkYXRhLWhyZWY9XCInICsgaC5wcm9wc1tcImRhdGEtaHJlZlwiXSArICdcIl0nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaC5wcm9wcy5ocmVmID0gaC5wcm9wc1tcImRhdGEtaHJlZlwiXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGgucHJvcHNbXCJkYXRhLWhyZWZcIl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRhZ3NbaC50eXBlXSB8fCBbXTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLnB1c2goaCk7XG4gICAgICAgICAgICAgICAgdGFnc1toLnR5cGVdID0gY29tcG9uZW50cztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVDb21wb25lbnQgPSB0YWdzLnRpdGxlID8gdGFncy50aXRsZVswXSA6IG51bGw7XG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKHRpdGxlQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gdGl0bGVDb21wb25lbnQucHJvcHM7XG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgPyBjaGlsZHJlbiA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4uam9pbihcIlwiKSA6IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGl0bGUgIT09IGRvY3VtZW50LnRpdGxlKSBkb2N1bWVudC50aXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwibWV0YVwiLFxuICAgICAgICAgICAgICAgIFwiYmFzZVwiLFxuICAgICAgICAgICAgICAgIFwibGlua1wiLFxuICAgICAgICAgICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgICAgICAgICBcInNjcmlwdFwiXG4gICAgICAgICAgICBdLmZvckVhY2goKHR5cGUpPT57XG4gICAgICAgICAgICAgICAgdXBkYXRlRWxlbWVudHModHlwZSwgdGFnc1t0eXBlXSB8fCBbXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlYWQtbWFuYWdlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJET01BdHRyaWJ1dGVOYW1lcyIsImlzRXF1YWxOb2RlIiwiZGVmYXVsdCIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsImluaXRIZWFkTWFuYWdlciIsImFjY2VwdENoYXJzZXQiLCJjbGFzc05hbWUiLCJodG1sRm9yIiwiaHR0cEVxdWl2Iiwibm9Nb2R1bGUiLCJyZWFjdEVsZW1lbnRUb0RPTSIsInBhcmFtIiwidHlwZSIsInByb3BzIiwiZWwiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJwIiwiaGFzT3duUHJvcGVydHkiLCJ1bmRlZmluZWQiLCJhdHRyIiwidG9Mb3dlckNhc2UiLCJzZXRBdHRyaWJ1dGUiLCJjaGlsZHJlbiIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiaW5uZXJIVE1MIiwiX19odG1sIiwidGV4dENvbnRlbnQiLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwib2xkVGFnIiwibmV3VGFnIiwiSFRNTEVsZW1lbnQiLCJub25jZSIsImdldEF0dHJpYnV0ZSIsImNsb25lVGFnIiwiY2xvbmVOb2RlIiwidXBkYXRlRWxlbWVudHMiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1NUUklDVF9ORVhUX0hFQUQiLCJjb21wb25lbnRzIiwiaGVhZEVsIiwicXVlcnlTZWxlY3RvciIsImhlYWRNZXRhVGFncyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJvbGRUYWdzIiwibWV0YUNoYXJzZXQiLCJwdXNoIiwiaSIsImxlbmd0aCIsIl9oZWFkVGFnX3RhZ05hbWUiLCJtZXRhVGFnIiwiaGVhZFRhZyIsIm5leHRTaWJsaW5nIiwidGFnTmFtZSIsIm5ld1RhZ3MiLCJtYXAiLCJmaWx0ZXIiLCJrIiwibGVuIiwic3BsaWNlIiwiZm9yRWFjaCIsInQiLCJfdF9wYXJlbnROb2RlIiwicHJldmlvdXNTaWJsaW5nIiwiX3RfcGFyZW50Tm9kZTEiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJfdF90YWdOYW1lIiwibWV0YSIsImNvbnRlbnQiLCJhcHBlbmRDaGlsZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiaGVhZENvdW50RWwiLCJjb25zb2xlIiwiZXJyb3IiLCJoZWFkQ291bnQiLCJOdW1iZXIiLCJqIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsIl9qX3RhZ05hbWUiLCJpbnNlcnRCZWZvcmUiLCJ0b1N0cmluZyIsIm1vdW50ZWRJbnN0YW5jZXMiLCJTZXQiLCJ1cGRhdGVIZWFkIiwiaGVhZCIsInRhZ3MiLCJoIiwiaHJlZiIsInRpdGxlQ29tcG9uZW50IiwidGl0bGUiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/head-manager.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/index.js": +/*!************************************************!*\ + !*** ./node_modules/next/dist/client/index.js ***! + \************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* global location */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nvar _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n version: function() {\n return version;\n },\n router: function() {\n return router;\n },\n emitter: function() {\n return emitter;\n },\n initialize: function() {\n return initialize;\n },\n hydrate: function() {\n return hydrate;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n__webpack_require__(/*! ../build/polyfills/polyfill-module */ \"./node_modules/next/dist/build/polyfills/polyfill-module.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _client = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom/client */ \"./node_modules/react-dom/client.js\"));\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/mitt */ \"./node_modules/next/dist/shared/lib/mitt.js\"));\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _handlesmoothscroll = __webpack_require__(/*! ../shared/lib/router/utils/handle-smooth-scroll */ \"./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\");\nconst _isdynamic = __webpack_require__(/*! ../shared/lib/router/utils/is-dynamic */ \"./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _runtimeconfigexternal = __webpack_require__(/*! ../shared/lib/runtime-config.external */ \"./node_modules/next/dist/shared/lib/runtime-config.external.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nconst _portal = __webpack_require__(/*! ./portal */ \"./node_modules/next/dist/client/portal/index.js\");\nconst _headmanager = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./head-manager */ \"./node_modules/next/dist/client/head-manager.js\"));\nconst _pageloader = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./page-loader */ \"./node_modules/next/dist/client/page-loader.js\"));\nconst _performancerelayer = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./performance-relayer */ \"./node_modules/next/dist/client/performance-relayer.js\"));\nconst _routeannouncer = __webpack_require__(/*! ./route-announcer */ \"./node_modules/next/dist/client/route-announcer.js\");\nconst _router = __webpack_require__(/*! ./router */ \"./node_modules/next/dist/client/router.js\");\nconst _iserror = __webpack_require__(/*! ../lib/is-error */ \"./node_modules/next/dist/lib/is-error.js\");\nconst _imageconfigcontextsharedruntime = __webpack_require__(/*! ../shared/lib/image-config-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js\");\nconst _removebasepath = __webpack_require__(/*! ./remove-base-path */ \"./node_modules/next/dist/client/remove-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"./node_modules/next/dist/client/has-base-path.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../shared/lib/app-router-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _adapters = __webpack_require__(/*! ../shared/lib/router/adapters */ \"./node_modules/next/dist/shared/lib/router/adapters.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../shared/lib/hooks-client-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _onrecoverableerror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./on-recoverable-error */ \"./node_modules/next/dist/client/on-recoverable-error.js\"));\nconst _tracer = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./tracing/tracer */ \"./node_modules/next/dist/client/tracing/tracer.js\"));\nconst _reporttosocket = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./tracing/report-to-socket */ \"./node_modules/next/dist/client/tracing/report-to-socket.js\"));\nconst version = \"14.1.3\";\nlet router;\nconst emitter = (0, _mitt.default)();\nconst looseToArray = (input)=>[].slice.call(input);\nlet initialData;\nlet defaultLocale = undefined;\nlet asPath;\nlet pageLoader;\nlet appElement;\nlet headManager;\nlet initialMatchesMiddleware = false;\nlet lastAppProps;\nlet lastRenderReject;\nlet devClient;\nlet CachedApp, onPerfEntry;\nlet CachedComponent;\nclass Container extends _react.default.Component {\n componentDidCatch(componentErr, info) {\n this.props.fn(componentErr, info);\n }\n componentDidMount() {\n this.scrollToHash();\n // We need to replace the router state if:\n // - the page was (auto) exported and has a query string or search (hash)\n // - it was auto exported and is a dynamic route (to provide params)\n // - if it is a client-side skeleton (fallback render)\n // - if middleware matches the current page (may have rewrite params)\n // - if rewrites in next.config.js match (may have rewrite params)\n if (router.isSsr && (initialData.isFallback || initialData.nextExport && ((0, _isdynamic.isDynamicRoute)(router.pathname) || location.search || true || 0) || initialData.props && initialData.props.__N_SSG && (location.search || true || 0))) {\n // update query on mount for exported pages\n router.replace(router.pathname + \"?\" + String((0, _querystring.assign)((0, _querystring.urlQueryToSearchParams)(router.query), new URLSearchParams(location.search))), asPath, {\n // @ts-ignore\n // WARNING: `_h` is an internal option for handing Next.js\n // client-side hydration. Your app should _never_ use this property.\n // It may change at any time without notice.\n _h: 1,\n // Fallback pages must trigger the data fetch, so the transition is\n // not shallow.\n // Other pages (strictly updating query) happens shallowly, as data\n // requirements would already be present.\n shallow: !initialData.isFallback && !initialMatchesMiddleware\n }).catch((err)=>{\n if (!err.cancelled) throw err;\n });\n }\n }\n componentDidUpdate() {\n this.scrollToHash();\n }\n scrollToHash() {\n let { hash } = location;\n hash = hash && hash.substring(1);\n if (!hash) return;\n const el = document.getElementById(hash);\n if (!el) return;\n // If we call scrollIntoView() in here without a setTimeout\n // it won't scroll properly.\n setTimeout(()=>el.scrollIntoView(), 0);\n }\n render() {\n if (false) {} else {\n const { ReactDevOverlay } = __webpack_require__(/*! next/dist/compiled/@next/react-dev-overlay/dist/client */ \"./node_modules/next/dist/compiled/@next/react-dev-overlay/dist/client.js\");\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(ReactDevOverlay, {\n children: this.props.children\n });\n }\n }\n}\nasync function initialize(opts) {\n if (opts === void 0) opts = {};\n _tracer.default.onSpanEnd(_reporttosocket.default);\n // This makes sure this specific lines are removed in production\n if (true) {\n devClient = opts.devClient;\n }\n initialData = JSON.parse(document.getElementById(\"__NEXT_DATA__\").textContent);\n window.__NEXT_DATA__ = initialData;\n defaultLocale = initialData.defaultLocale;\n const prefix = initialData.assetPrefix || \"\";\n self.__next_set_public_path__(\"\" + prefix + \"/_next/\") //eslint-disable-line\n ;\n // Initialize next/config with the environment configuration\n (0, _runtimeconfigexternal.setConfig)({\n serverRuntimeConfig: {},\n publicRuntimeConfig: initialData.runtimeConfig || {}\n });\n asPath = (0, _utils.getURL)();\n // make sure not to attempt stripping basePath for 404s\n if ((0, _hasbasepath.hasBasePath)(asPath)) {\n asPath = (0, _removebasepath.removeBasePath)(asPath);\n }\n if (false) {}\n if (initialData.scriptLoader) {\n const { initScriptLoader } = __webpack_require__(/*! ./script */ \"./node_modules/next/dist/client/script.js\");\n initScriptLoader(initialData.scriptLoader);\n }\n pageLoader = new _pageloader.default(initialData.buildId, prefix);\n const register = (param)=>{\n let [r, f] = param;\n return pageLoader.routeLoader.onEntrypoint(r, f);\n };\n if (window.__NEXT_P) {\n // Defer page registration for another tick. This will increase the overall\n // latency in hydrating the page, but reduce the total blocking time.\n window.__NEXT_P.map((p)=>setTimeout(()=>register(p), 0));\n }\n window.__NEXT_P = [];\n window.__NEXT_P.push = register;\n headManager = (0, _headmanager.default)();\n headManager.getIsSsr = ()=>{\n return router.isSsr;\n };\n appElement = document.getElementById(\"__next\");\n return {\n assetPrefix: prefix\n };\n}\nfunction renderApp(App, appProps) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(App, {\n ...appProps\n });\n}\nfunction AppContainer(param) {\n _s();\n let { children } = param;\n // Create a memoized value for next/navigation router context.\n const adaptedForAppRouter = _react.default.useMemo(()=>{\n return (0, _adapters.adaptForAppRouterInstance)(router);\n }, []);\n var _self___NEXT_DATA___autoExport;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Container, {\n fn: (error)=>// eslint-disable-next-line @typescript-eslint/no-use-before-define\n renderError({\n App: CachedApp,\n err: error\n }).catch((err)=>console.error(\"Error rendering page: \", err)),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, {\n value: adaptedForAppRouter,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, {\n value: (0, _adapters.adaptForSearchParams)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_adapters.PathnameContextProviderAdapter, {\n router: router,\n isAutoExport: (_self___NEXT_DATA___autoExport = self.__NEXT_DATA__.autoExport) != null ? _self___NEXT_DATA___autoExport : false,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathParamsContext.Provider, {\n value: (0, _adapters.adaptForPathParams)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_routercontextsharedruntime.RouterContext.Provider, {\n value: (0, _router.makePublicRouterInstance)(router),\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_headmanagercontextsharedruntime.HeadManagerContext.Provider, {\n value: headManager,\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_imageconfigcontextsharedruntime.ImageConfigContext.Provider, {\n value: {\"deviceSizes\":[640,750,828,1080,1200,1920,2048,3840],\"imageSizes\":[16,32,48,64,96,128,256,384],\"path\":\"/_next/image\",\"loader\":\"default\",\"dangerouslyAllowSVG\":false,\"unoptimized\":false,\"domains\":[],\"remotePatterns\":[]},\n children: children\n })\n })\n })\n })\n })\n })\n })\n });\n}\n_s(AppContainer, \"F6BSfrFQNeqenuPnUMVY/6gI8uE=\");\n_c = AppContainer;\nconst wrapApp = (App)=>(wrappedAppProps)=>{\n const appProps = {\n ...wrappedAppProps,\n Component: CachedComponent,\n err: initialData.err,\n router\n };\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(AppContainer, {\n children: renderApp(App, appProps)\n });\n };\n// This method handles all runtime and debug errors.\n// 404 and 500 errors are special kind of errors\n// and they are still handle via the main render method.\nfunction renderError(renderErrorProps) {\n let { App, err } = renderErrorProps;\n // In development runtime errors are caught by our overlay\n // In production we catch runtime errors using componentDidCatch which will trigger renderError\n if (true) {\n // A Next.js rendering runtime error is always unrecoverable\n // FIXME: let's make this recoverable (error in GIP client-transition)\n devClient.onUnrecoverableError();\n // We need to render an empty <App> so that the `<ReactDevOverlay>` can\n // render itself.\n // TODO: Fix disabled eslint rule\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return doRender({\n App: ()=>null,\n props: {},\n Component: ()=>null,\n styleSheets: []\n });\n }\n // Make sure we log the error to the console, otherwise users can't track down issues.\n console.error(err);\n console.error(\"A client-side exception has occurred, see here for more info: https://nextjs.org/docs/messages/client-side-exception-occurred\");\n return pageLoader.loadPage(\"/_error\").then((param)=>{\n let { page: ErrorComponent, styleSheets } = param;\n return (lastAppProps == null ? void 0 : lastAppProps.Component) === ErrorComponent ? Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../pages/_error */ \"./node_modules/next/dist/pages/_error.js\"))).then((errorModule)=>{\n return Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../pages/_app */ \"./node_modules/next/dist/pages/_app.js\"))).then((appModule)=>{\n App = appModule.default;\n renderErrorProps.App = App;\n return errorModule;\n });\n }).then((m)=>({\n ErrorComponent: m.default,\n styleSheets: []\n })) : {\n ErrorComponent,\n styleSheets\n };\n }).then((param)=>{\n let { ErrorComponent, styleSheets } = param;\n var _renderErrorProps_props;\n // In production we do a normal render with the `ErrorComponent` as component.\n // If we've gotten here upon initial render, we can use the props from the server.\n // Otherwise, we need to call `getInitialProps` on `App` before mounting.\n const AppTree = wrapApp(App);\n const appCtx = {\n Component: ErrorComponent,\n AppTree,\n router,\n ctx: {\n err,\n pathname: initialData.page,\n query: initialData.query,\n asPath,\n AppTree\n }\n };\n return Promise.resolve(((_renderErrorProps_props = renderErrorProps.props) == null ? void 0 : _renderErrorProps_props.err) ? renderErrorProps.props : (0, _utils.loadGetInitialProps)(App, appCtx)).then((initProps)=>// eslint-disable-next-line @typescript-eslint/no-use-before-define\n doRender({\n ...renderErrorProps,\n err,\n Component: ErrorComponent,\n styleSheets,\n props: initProps\n }));\n });\n}\n// Dummy component that we render as a child of Root so that we can\n// toggle the correct styles before the page is rendered.\nfunction Head(param) {\n _s1();\n let { callback } = param;\n // We use `useLayoutEffect` to guarantee the callback is executed\n // as soon as React flushes the update.\n _react.default.useLayoutEffect(()=>callback(), [\n callback\n ]);\n return null;\n}\n_s1(Head, \"n7/vCynhJvM+pLkyL2DMQUF0odM=\");\n_c1 = Head;\nconst performanceMarks = {\n navigationStart: \"navigationStart\",\n beforeRender: \"beforeRender\",\n afterRender: \"afterRender\",\n afterHydrate: \"afterHydrate\",\n routeChange: \"routeChange\"\n};\nconst performanceMeasures = {\n hydration: \"Next.js-hydration\",\n beforeHydration: \"Next.js-before-hydration\",\n routeChangeToRender: \"Next.js-route-change-to-render\",\n render: \"Next.js-render\"\n};\nlet reactRoot = null;\n// On initial render a hydrate should always happen\nlet shouldHydrate = true;\nfunction clearMarks() {\n [\n performanceMarks.beforeRender,\n performanceMarks.afterHydrate,\n performanceMarks.afterRender,\n performanceMarks.routeChange\n ].forEach((mark)=>performance.clearMarks(mark));\n}\nfunction markHydrateComplete() {\n if (!_utils.ST) return;\n performance.mark(performanceMarks.afterHydrate) // mark end of hydration\n ;\n const hasBeforeRenderMark = performance.getEntriesByName(performanceMarks.beforeRender, \"mark\").length;\n if (hasBeforeRenderMark) {\n const beforeHydrationMeasure = performance.measure(performanceMeasures.beforeHydration, performanceMarks.navigationStart, performanceMarks.beforeRender);\n const hydrationMeasure = performance.measure(performanceMeasures.hydration, performanceMarks.beforeRender, performanceMarks.afterHydrate);\n if ( true && // Old versions of Safari don't return `PerformanceMeasure`s from `performance.measure()`\n beforeHydrationMeasure !== undefined && hydrationMeasure !== undefined) {\n _tracer.default.startSpan(\"navigation-to-hydration\", {\n startTime: performance.timeOrigin + beforeHydrationMeasure.startTime,\n attributes: {\n pathname: location.pathname,\n query: location.search\n }\n }).end(performance.timeOrigin + hydrationMeasure.startTime + hydrationMeasure.duration);\n }\n }\n if (onPerfEntry) {\n performance.getEntriesByName(performanceMeasures.hydration).forEach(onPerfEntry);\n }\n clearMarks();\n}\nfunction markRenderComplete() {\n if (!_utils.ST) return;\n performance.mark(performanceMarks.afterRender) // mark end of render\n ;\n const navStartEntries = performance.getEntriesByName(performanceMarks.routeChange, \"mark\");\n if (!navStartEntries.length) return;\n const hasBeforeRenderMark = performance.getEntriesByName(performanceMarks.beforeRender, \"mark\").length;\n if (hasBeforeRenderMark) {\n performance.measure(performanceMeasures.routeChangeToRender, navStartEntries[0].name, performanceMarks.beforeRender);\n performance.measure(performanceMeasures.render, performanceMarks.beforeRender, performanceMarks.afterRender);\n if (onPerfEntry) {\n performance.getEntriesByName(performanceMeasures.render).forEach(onPerfEntry);\n performance.getEntriesByName(performanceMeasures.routeChangeToRender).forEach(onPerfEntry);\n }\n }\n clearMarks();\n [\n performanceMeasures.routeChangeToRender,\n performanceMeasures.render\n ].forEach((measure)=>performance.clearMeasures(measure));\n}\nfunction renderReactElement(domEl, fn) {\n // mark start of hydrate/render\n if (_utils.ST) {\n performance.mark(performanceMarks.beforeRender);\n }\n const reactEl = fn(shouldHydrate ? markHydrateComplete : markRenderComplete);\n if (!reactRoot) {\n // Unlike with createRoot, you don't need a separate root.render() call here\n reactRoot = _client.default.hydrateRoot(domEl, reactEl, {\n onRecoverableError: _onrecoverableerror.default\n });\n // TODO: Remove shouldHydrate variable when React 18 is stable as it can depend on `reactRoot` existing\n shouldHydrate = false;\n } else {\n const startTransition = _react.default.startTransition;\n startTransition(()=>{\n reactRoot.render(reactEl);\n });\n }\n}\nfunction Root(param) {\n _s2();\n let { callbacks, children } = param;\n // We use `useLayoutEffect` to guarantee the callbacks are executed\n // as soon as React flushes the update\n _react.default.useLayoutEffect(()=>callbacks.forEach((callback)=>callback()), [\n callbacks\n ]);\n // We should ask to measure the Web Vitals after rendering completes so we\n // don't cause any hydration delay:\n _react.default.useEffect(()=>{\n (0, _performancerelayer.default)(onPerfEntry);\n }, []);\n if (false) {}\n return children;\n}\n_s2(Root, \"Gjgl5rfcc2T4sFnfEMfRvL6K4Q4=\");\n_c2 = Root;\nfunction doRender(input) {\n let { App, Component, props, err } = input;\n let styleSheets = \"initial\" in input ? undefined : input.styleSheets;\n Component = Component || lastAppProps.Component;\n props = props || lastAppProps.props;\n const appProps = {\n ...props,\n Component,\n err,\n router\n };\n // lastAppProps has to be set before ReactDom.render to account for ReactDom throwing an error.\n lastAppProps = appProps;\n let canceled = false;\n let resolvePromise;\n const renderPromise = new Promise((resolve, reject)=>{\n if (lastRenderReject) {\n lastRenderReject();\n }\n resolvePromise = ()=>{\n lastRenderReject = null;\n resolve();\n };\n lastRenderReject = ()=>{\n canceled = true;\n lastRenderReject = null;\n const error = new Error(\"Cancel rendering route\");\n error.cancelled = true;\n reject(error);\n };\n });\n // This function has a return type to ensure it doesn't start returning a\n // Promise. It should remain synchronous.\n function onStart() {\n if (!styleSheets || // We use `style-loader` in development, so we don't need to do anything\n // unless we're in production:\n \"development\" !== \"production\") {\n return false;\n }\n const currentStyleTags = looseToArray(document.querySelectorAll(\"style[data-n-href]\"));\n const currentHrefs = new Set(currentStyleTags.map((tag)=>tag.getAttribute(\"data-n-href\")));\n const noscript = document.querySelector(\"noscript[data-n-css]\");\n const nonce = noscript == null ? void 0 : noscript.getAttribute(\"data-n-css\");\n styleSheets.forEach((param)=>{\n let { href, text } = param;\n if (!currentHrefs.has(href)) {\n const styleTag = document.createElement(\"style\");\n styleTag.setAttribute(\"data-n-href\", href);\n styleTag.setAttribute(\"media\", \"x\");\n if (nonce) {\n styleTag.setAttribute(\"nonce\", nonce);\n }\n document.head.appendChild(styleTag);\n styleTag.appendChild(document.createTextNode(text));\n }\n });\n return true;\n }\n function onHeadCommit() {\n if (// unless we're in production:\n false) {}\n if (input.scroll) {\n const { x, y } = input.scroll;\n (0, _handlesmoothscroll.handleSmoothScroll)(()=>{\n window.scrollTo(x, y);\n });\n }\n }\n function onRootCommit() {\n resolvePromise();\n }\n onStart();\n const elem = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {\n callback: onHeadCommit\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(AppContainer, {\n children: [\n renderApp(App, appProps),\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_portal.Portal, {\n type: \"next-route-announcer\",\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_routeannouncer.RouteAnnouncer, {})\n })\n ]\n })\n ]\n });\n // We catch runtime errors using componentDidCatch which will trigger renderError\n renderReactElement(appElement, (callback)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(Root, {\n callbacks: [\n callback,\n onRootCommit\n ],\n children: true ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.default.StrictMode, {\n children: elem\n }) : 0\n }));\n return renderPromise;\n}\nasync function render(renderingProps) {\n if (renderingProps.err) {\n await renderError(renderingProps);\n return;\n }\n try {\n await doRender(renderingProps);\n } catch (err) {\n const renderErr = (0, _iserror.getProperError)(err);\n // bubble up cancelation errors\n if (renderErr.cancelled) {\n throw renderErr;\n }\n if (true) {\n // Ensure this error is displayed in the overlay in development\n setTimeout(()=>{\n throw renderErr;\n });\n }\n await renderError({\n ...renderingProps,\n err: renderErr\n });\n }\n}\nasync function hydrate(opts) {\n let initialErr = initialData.err;\n try {\n const appEntrypoint = await pageLoader.routeLoader.whenEntrypoint(\"/_app\");\n if (\"error\" in appEntrypoint) {\n throw appEntrypoint.error;\n }\n const { component: app, exports: mod } = appEntrypoint;\n CachedApp = app;\n if (mod && mod.reportWebVitals) {\n onPerfEntry = (param)=>{\n let { id, name, startTime, value, duration, entryType, entries, attribution } = param;\n // Combines timestamp with random number for unique ID\n const uniqueID = Date.now() + \"-\" + (Math.floor(Math.random() * (9e12 - 1)) + 1e12);\n let perfStartEntry;\n if (entries && entries.length) {\n perfStartEntry = entries[0].startTime;\n }\n const webVitals = {\n id: id || uniqueID,\n name,\n startTime: startTime || perfStartEntry,\n value: value == null ? duration : value,\n label: entryType === \"mark\" || entryType === \"measure\" ? \"custom\" : \"web-vital\"\n };\n if (attribution) {\n webVitals.attribution = attribution;\n }\n mod.reportWebVitals(webVitals);\n };\n }\n const pageEntrypoint = // error, so we need to skip waiting for the entrypoint.\n true && initialData.err ? {\n error: initialData.err\n } : await pageLoader.routeLoader.whenEntrypoint(initialData.page);\n if (\"error\" in pageEntrypoint) {\n throw pageEntrypoint.error;\n }\n CachedComponent = pageEntrypoint.component;\n if (true) {\n const { isValidElementType } = __webpack_require__(/*! next/dist/compiled/react-is */ \"./node_modules/next/dist/compiled/react-is/index.js\");\n if (!isValidElementType(CachedComponent)) {\n throw new Error('The default export is not a React Component in page: \"' + initialData.page + '\"');\n }\n }\n } catch (error) {\n // This catches errors like throwing in the top level of a module\n initialErr = (0, _iserror.getProperError)(error);\n }\n if (true) {\n const { getServerError } = __webpack_require__(/*! next/dist/compiled/@next/react-dev-overlay/dist/client */ \"./node_modules/next/dist/compiled/@next/react-dev-overlay/dist/client.js\");\n // Server-side runtime errors need to be re-thrown on the client-side so\n // that the overlay is rendered.\n if (initialErr) {\n if (initialErr === initialData.err) {\n setTimeout(()=>{\n let error;\n try {\n // Generate a new error object. We `throw` it because some browsers\n // will set the `stack` when thrown, and we want to ensure ours is\n // not overridden when we re-throw it below.\n throw new Error(initialErr.message);\n } catch (e) {\n error = e;\n }\n error.name = initialErr.name;\n error.stack = initialErr.stack;\n throw getServerError(error, initialErr.source);\n });\n } else {\n setTimeout(()=>{\n throw initialErr;\n });\n }\n }\n }\n if (window.__NEXT_PRELOADREADY) {\n await window.__NEXT_PRELOADREADY(initialData.dynamicIds);\n }\n router = (0, _router.createRouter)(initialData.page, initialData.query, asPath, {\n initialProps: initialData.props,\n pageLoader,\n App: CachedApp,\n Component: CachedComponent,\n wrapApp,\n err: initialErr,\n isFallback: Boolean(initialData.isFallback),\n subscription: (info, App, scroll)=>render(Object.assign({}, info, {\n App,\n scroll\n })),\n locale: initialData.locale,\n locales: initialData.locales,\n defaultLocale,\n domainLocales: initialData.domainLocales,\n isPreview: initialData.isPreview\n });\n initialMatchesMiddleware = await router._initialMatchesMiddlewarePromise;\n const renderCtx = {\n App: CachedApp,\n initial: true,\n Component: CachedComponent,\n props: initialData.props,\n err: initialErr\n };\n if (opts == null ? void 0 : opts.beforeRender) {\n await opts.beforeRender();\n }\n render(renderCtx);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\nvar _c, _c1, _c2;\n$RefreshReg$(_c, \"AppContainer\");\n$RefreshReg$(_c1, \"Head\");\n$RefreshReg$(_c2, \"Root\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUIsR0FBZ0I7Ozs7OztBQUFiO0FBQ3RCQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQU1OO0FBQ0EsU0FBU00sUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVosT0FBT0MsY0FBYyxDQUFDVSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFSLFNBQVM7SUFDYkcsU0FBUztRQUNMLE9BQU9BO0lBQ1g7SUFDQUMsUUFBUTtRQUNKLE9BQU9BO0lBQ1g7SUFDQUMsU0FBUztRQUNMLE9BQU9BO0lBQ1g7SUFDQUMsWUFBWTtRQUNSLE9BQU9BO0lBQ1g7SUFDQUMsU0FBUztRQUNMLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLDJCQUEyQkMsbUJBQU9BLENBQUMsNEdBQXlDO0FBQ2xGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLDhEQUFtQjtBQUMvQ0EsbUJBQU9BLENBQUMsdUdBQW9DO0FBQzVDLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsNENBQU87QUFDdkUsTUFBTUksVUFBVSxXQUFXLEdBQUdMLHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyw0REFBa0I7QUFDbkYsTUFBTUssbUNBQW1DTCxtQkFBT0EsQ0FBQyxxSUFBbUQ7QUFDcEcsTUFBTU0sUUFBUSxXQUFXLEdBQUdQLHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyx1RUFBb0I7QUFDbkYsTUFBTU8sOEJBQThCUCxtQkFBT0EsQ0FBQyx5SEFBNkM7QUFDekYsTUFBTVEsc0JBQXNCUixtQkFBT0EsQ0FBQyxpSUFBaUQ7QUFDckYsTUFBTVMsYUFBYVQsbUJBQU9BLENBQUMsNkdBQXVDO0FBQ2xFLE1BQU1VLGVBQWVWLG1CQUFPQSxDQUFDLCtHQUF3QztBQUNyRSxNQUFNVyx5QkFBeUJYLG1CQUFPQSxDQUFDLDZHQUF1QztBQUM5RSxNQUFNWSxTQUFTWixtQkFBT0EsQ0FBQyx5RUFBcUI7QUFDNUMsTUFBTWEsVUFBVWIsbUJBQU9BLENBQUMsaUVBQVU7QUFDbEMsTUFBTWMsZUFBZSxXQUFXLEdBQUdmLHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyx1RUFBZ0I7QUFDdEYsTUFBTWUsY0FBYyxXQUFXLEdBQUdoQix5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMscUVBQWU7QUFDcEYsTUFBTWdCLHNCQUFzQixXQUFXLEdBQUdqQix5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMscUZBQXVCO0FBQ3BHLE1BQU1pQixrQkFBa0JqQixtQkFBT0EsQ0FBQyw2RUFBbUI7QUFDbkQsTUFBTWtCLFVBQVVsQixtQkFBT0EsQ0FBQywyREFBVTtBQUNsQyxNQUFNbUIsV0FBV25CLG1CQUFPQSxDQUFDLGlFQUFpQjtBQUMxQyxNQUFNb0IsbUNBQW1DcEIsbUJBQU9BLENBQUMscUlBQW1EO0FBQ3BHLE1BQU1xQixrQkFBa0JyQixtQkFBT0EsQ0FBQywrRUFBb0I7QUFDcEQsTUFBTXNCLGVBQWV0QixtQkFBT0EsQ0FBQyx5RUFBaUI7QUFDOUMsTUFBTXVCLGlDQUFpQ3ZCLG1CQUFPQSxDQUFDLGlJQUFpRDtBQUNoRyxNQUFNd0IsWUFBWXhCLG1CQUFPQSxDQUFDLDZGQUErQjtBQUN6RCxNQUFNeUIsbUNBQW1DekIsbUJBQU9BLENBQUMscUlBQW1EO0FBQ3BHLE1BQU0wQixzQkFBc0IsV0FBVyxHQUFHM0IseUJBQXlCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLHVGQUF3QjtBQUNyRyxNQUFNMkIsVUFBVSxXQUFXLEdBQUc1Qix5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsMkVBQWtCO0FBQ25GLE1BQU00QixrQkFBa0IsV0FBVyxHQUFHN0IseUJBQXlCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLCtGQUE0QjtBQUNyRyxNQUFNWixVQUFVO0FBQ2hCLElBQUlDO0FBQ0osTUFBTUMsVUFBVSxDQUFDLEdBQUdnQixNQUFNdUIsT0FBTztBQUNqQyxNQUFNQyxlQUFlLENBQUNDLFFBQVEsRUFBRSxDQUFDQyxLQUFLLENBQUNDLElBQUksQ0FBQ0Y7QUFDNUMsSUFBSUc7QUFDSixJQUFJQyxnQkFBZ0JDO0FBQ3BCLElBQUlDO0FBQ0osSUFBSUM7QUFDSixJQUFJQztBQUNKLElBQUlDO0FBQ0osSUFBSUMsMkJBQTJCO0FBQy9CLElBQUlDO0FBQ0osSUFBSUM7QUFDSixJQUFJQztBQUNKLElBQUlDLFdBQVdDO0FBQ2YsSUFBSUM7QUFDSixNQUFNQyxrQkFBa0I5QyxPQUFPMkIsT0FBTyxDQUFDb0IsU0FBUztJQUM1Q0Msa0JBQWtCQyxZQUFZLEVBQUVDLElBQUksRUFBRTtRQUNsQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsRUFBRSxDQUFDSCxjQUFjQztJQUNoQztJQUNBRyxvQkFBb0I7UUFDaEIsSUFBSSxDQUFDQyxZQUFZO1FBQ2pCLDBDQUEwQztRQUMxQyx5RUFBeUU7UUFDekUsb0VBQW9FO1FBQ3BFLHNEQUFzRDtRQUN0RCxxRUFBcUU7UUFDckUsa0VBQWtFO1FBQ2xFLElBQUluRSxPQUFPb0UsS0FBSyxJQUFLdkIsQ0FBQUEsWUFBWXdCLFVBQVUsSUFBSXhCLFlBQVl5QixVQUFVLElBQUssRUFBQyxHQUFHbEQsV0FBV21ELGNBQWMsRUFBRXZFLE9BQU93RSxRQUFRLEtBQUtDLFNBQVNDLE1BQU0sSUFBSUMsSUFBK0IsSUFBSXZCLENBQXVCLEtBQU1QLFlBQVltQixLQUFLLElBQUluQixZQUFZbUIsS0FBSyxDQUFDYyxPQUFPLElBQUtMLENBQUFBLFNBQVNDLE1BQU0sSUFBSUMsSUFBK0IsSUFBSXZCLENBQXVCLENBQUMsR0FBSTtZQUNqViwyQ0FBMkM7WUFDM0NwRCxPQUFPK0UsT0FBTyxDQUFDL0UsT0FBT3dFLFFBQVEsR0FBRyxNQUFNUSxPQUFPLENBQUMsR0FBRzNELGFBQWE0RCxNQUFNLEVBQUUsQ0FBQyxHQUFHNUQsYUFBYTZELHNCQUFzQixFQUFFbEYsT0FBT21GLEtBQUssR0FBRyxJQUFJQyxnQkFBZ0JYLFNBQVNDLE1BQU0sS0FBSzFCLFFBQVE7Z0JBQzNLLGFBQWE7Z0JBQ2IsMERBQTBEO2dCQUMxRCxvRUFBb0U7Z0JBQ3BFLDRDQUE0QztnQkFDNUNxQyxJQUFJO2dCQUNKLG1FQUFtRTtnQkFDbkUsZUFBZTtnQkFDZixtRUFBbUU7Z0JBQ25FLHlDQUF5QztnQkFDekNDLFNBQVMsQ0FBQ3pDLFlBQVl3QixVQUFVLElBQUksQ0FBQ2pCO1lBQ3pDLEdBQUdtQyxLQUFLLENBQUMsQ0FBQ0M7Z0JBQ04sSUFBSSxDQUFDQSxJQUFJQyxTQUFTLEVBQUUsTUFBTUQ7WUFDOUI7UUFDSjtJQUNKO0lBQ0FFLHFCQUFxQjtRQUNqQixJQUFJLENBQUN2QixZQUFZO0lBQ3JCO0lBQ0FBLGVBQWU7UUFDWCxJQUFJLEVBQUV3QixJQUFJLEVBQUUsR0FBR2xCO1FBQ2ZrQixPQUFPQSxRQUFRQSxLQUFLQyxTQUFTLENBQUM7UUFDOUIsSUFBSSxDQUFDRCxNQUFNO1FBQ1gsTUFBTUUsS0FBS0MsU0FBU0MsY0FBYyxDQUFDSjtRQUNuQyxJQUFJLENBQUNFLElBQUk7UUFDVCwyREFBMkQ7UUFDM0QsNEJBQTRCO1FBQzVCRyxXQUFXLElBQUlILEdBQUdJLGNBQWMsSUFBSTtJQUN4QztJQUNBQyxTQUFTO1FBQ0wsSUFBSXZCLEtBQXFDLEVBQUUsRUFFMUMsTUFBTTtZQUNILE1BQU0sRUFBRXlCLGVBQWUsRUFBRSxHQUFHekYsbUJBQU9BLENBQUMsd0lBQXdEO1lBQzVGLE9BQXFCLFdBQUgsR0FBSSxJQUFHQyxZQUFZeUYsR0FBRyxFQUFFRCxpQkFBaUI7Z0JBQ3ZERCxVQUFVLElBQUksQ0FBQ25DLEtBQUssQ0FBQ21DLFFBQVE7WUFDakM7UUFDSjtJQUNKO0FBQ0o7QUFDQSxlQUFlakcsV0FBV29HLElBQUk7SUFDMUIsSUFBSUEsU0FBUyxLQUFLLEdBQUdBLE9BQU8sQ0FBQztJQUM3QmhFLFFBQVFFLE9BQU8sQ0FBQytELFNBQVMsQ0FBQ2hFLGdCQUFnQkMsT0FBTztJQUNqRCxnRUFBZ0U7SUFDaEUsSUFBSW1DLElBQXNDLEVBQUU7UUFDeENwQixZQUFZK0MsS0FBSy9DLFNBQVM7SUFDOUI7SUFDQVYsY0FBYzJELEtBQUtDLEtBQUssQ0FBQ1gsU0FBU0MsY0FBYyxDQUFDLGlCQUFpQlcsV0FBVztJQUM3RUMsT0FBT0MsYUFBYSxHQUFHL0Q7SUFDdkJDLGdCQUFnQkQsWUFBWUMsYUFBYTtJQUN6QyxNQUFNK0QsU0FBU2hFLFlBQVlpRSxXQUFXLElBQUk7SUFDMUNDLEtBQUtDLHdCQUF3QixDQUFDLEtBQUtILFNBQVMsV0FBVyxxQkFBcUI7O0lBRTVFLDREQUE0RDtJQUMzRCxJQUFHdkYsdUJBQXVCMkYsU0FBUyxFQUFFO1FBQ2xDQyxxQkFBcUIsQ0FBQztRQUN0QkMscUJBQXFCdEUsWUFBWXVFLGFBQWEsSUFBSSxDQUFDO0lBQ3ZEO0lBQ0FwRSxTQUFTLENBQUMsR0FBR3pCLE9BQU84RixNQUFNO0lBQzFCLHVEQUF1RDtJQUN2RCxJQUFJLENBQUMsR0FBR3BGLGFBQWFxRixXQUFXLEVBQUV0RSxTQUFTO1FBQ3ZDQSxTQUFTLENBQUMsR0FBR2hCLGdCQUFnQnVGLGNBQWMsRUFBRXZFO0lBQ2pEO0lBQ0EsSUFBSTJCLEtBQStCLEVBQUUsRUF5QnBDO0lBQ0QsSUFBSTlCLFlBQVl3RixZQUFZLEVBQUU7UUFDMUIsTUFBTSxFQUFFQyxnQkFBZ0IsRUFBRSxHQUFHM0gsbUJBQU9BLENBQUMsMkRBQVU7UUFDL0MySCxpQkFBaUJ6RixZQUFZd0YsWUFBWTtJQUM3QztJQUNBcEYsYUFBYSxJQUFJdkIsWUFBWWMsT0FBTyxDQUFDSyxZQUFZMEYsT0FBTyxFQUFFMUI7SUFDMUQsTUFBTTJCLFdBQVcsQ0FBQ0M7UUFDZCxJQUFJLENBQUNDLEdBQUdDLEVBQUUsR0FBR0Y7UUFDYixPQUFPeEYsV0FBVzJGLFdBQVcsQ0FBQ0MsWUFBWSxDQUFDSCxHQUFHQztJQUNsRDtJQUNBLElBQUloQyxPQUFPbUMsUUFBUSxFQUFFO1FBQ2pCLDJFQUEyRTtRQUMzRSxxRUFBcUU7UUFDckVuQyxPQUFPbUMsUUFBUSxDQUFDQyxHQUFHLENBQUMsQ0FBQ0MsSUFBSWhELFdBQVcsSUFBSXdDLFNBQVNRLElBQUk7SUFDekQ7SUFDQXJDLE9BQU9tQyxRQUFRLEdBQUcsRUFBRTtJQUNwQm5DLE9BQU9tQyxRQUFRLENBQUNHLElBQUksR0FBR1Q7SUFDdkJyRixjQUFjLENBQUMsR0FBRzFCLGFBQWFlLE9BQU87SUFDdENXLFlBQVkrRixRQUFRLEdBQUc7UUFDbkIsT0FBT2xKLE9BQU9vRSxLQUFLO0lBQ3ZCO0lBQ0FsQixhQUFhNEMsU0FBU0MsY0FBYyxDQUFDO0lBQ3JDLE9BQU87UUFDSGUsYUFBYUQ7SUFDakI7QUFDSjtBQUNBLFNBQVNzQyxVQUFVQyxHQUFHLEVBQUVDLFFBQVE7SUFDNUIsT0FBcUIsV0FBSCxHQUFJLElBQUd6SSxZQUFZeUYsR0FBRyxFQUFFK0MsS0FBSztRQUMzQyxHQUFHQyxRQUFRO0lBQ2Y7QUFDSjtBQUNBLFNBQVNDLGFBQWFiLEtBQUs7O0lBQ3ZCLElBQUksRUFBRXRDLFFBQVEsRUFBRSxHQUFHc0M7SUFDbkIsOERBQThEO0lBQzlELE1BQU1jLHNCQUFzQjFJLE9BQU8yQixPQUFPLENBQUNnSCxPQUFPLENBQUM7UUFDL0MsT0FBTyxDQUFDLEdBQUdySCxVQUFVc0gseUJBQXlCLEVBQUV6SjtJQUNwRCxHQUFHLEVBQUU7SUFDTCxJQUFJMEo7SUFDSixPQUFxQixXQUFILEdBQUksSUFBRzlJLFlBQVl5RixHQUFHLEVBQUUxQyxXQUFXO1FBQ2pETSxJQUFJLENBQUMwRixRQUNELG1FQUFtRTtZQUNuRUMsWUFBWTtnQkFDUlIsS0FBSzVGO2dCQUNMZ0MsS0FBS21FO1lBQ1QsR0FBR3BFLEtBQUssQ0FBQyxDQUFDQyxNQUFNcUUsUUFBUUYsS0FBSyxDQUFDLDBCQUEwQm5FO1FBQzVEVyxVQUF3QixXQUFILEdBQUksSUFBR3ZGLFlBQVl5RixHQUFHLEVBQUVuRSwrQkFBK0I0SCxnQkFBZ0IsQ0FBQ0MsUUFBUSxFQUFFO1lBQ25HbEssT0FBTzBKO1lBQ1BwRCxVQUF3QixXQUFILEdBQUksSUFBR3ZGLFlBQVl5RixHQUFHLEVBQUVqRSxpQ0FBaUM0SCxtQkFBbUIsQ0FBQ0QsUUFBUSxFQUFFO2dCQUN4R2xLLE9BQU8sQ0FBQyxHQUFHc0MsVUFBVThILG9CQUFvQixFQUFFaks7Z0JBQzNDbUcsVUFBd0IsV0FBSCxHQUFJLElBQUd2RixZQUFZeUYsR0FBRyxFQUFFbEUsVUFBVStILDhCQUE4QixFQUFFO29CQUNuRmxLLFFBQVFBO29CQUNSbUssY0FBYyxDQUFDVCxpQ0FBaUMzQyxLQUFLSCxhQUFhLENBQUN3RCxVQUFVLEtBQUssT0FBT1YsaUNBQWlDO29CQUMxSHZELFVBQXdCLFdBQUgsR0FBSSxJQUFHdkYsWUFBWXlGLEdBQUcsRUFBRWpFLGlDQUFpQ2lJLGlCQUFpQixDQUFDTixRQUFRLEVBQUU7d0JBQ3RHbEssT0FBTyxDQUFDLEdBQUdzQyxVQUFVbUksa0JBQWtCLEVBQUV0Szt3QkFDekNtRyxVQUF3QixXQUFILEdBQUksSUFBR3ZGLFlBQVl5RixHQUFHLEVBQUVuRiw0QkFBNEJxSixhQUFhLENBQUNSLFFBQVEsRUFBRTs0QkFDN0ZsSyxPQUFPLENBQUMsR0FBR2dDLFFBQVEySSx3QkFBd0IsRUFBRXhLOzRCQUM3Q21HLFVBQXdCLFdBQUgsR0FBSSxJQUFHdkYsWUFBWXlGLEdBQUcsRUFBRXJGLGlDQUFpQ3lKLGtCQUFrQixDQUFDVixRQUFRLEVBQUU7Z0NBQ3ZHbEssT0FBT3NEO2dDQUNQZ0QsVUFBd0IsV0FBSCxHQUFJLElBQUd2RixZQUFZeUYsR0FBRyxFQUFFdEUsaUNBQWlDMkksa0JBQWtCLENBQUNYLFFBQVEsRUFBRTtvQ0FDdkdsSyxPQUFPOEUsME5BQTZCO29DQUNwQ3dCLFVBQVVBO2dDQUNkOzRCQUNKO3dCQUNKO29CQUNKO2dCQUNKO1lBQ0o7UUFDSjtJQUNKO0FBQ0o7R0F0Q1NtRDtLQUFBQTtBQXVDVCxNQUFNc0IsVUFBVSxDQUFDeEIsTUFBTSxDQUFDeUI7UUFDaEIsTUFBTXhCLFdBQVc7WUFDYixHQUFHd0IsZUFBZTtZQUNsQmpILFdBQVdGO1lBQ1g4QixLQUFLM0MsWUFBWTJDLEdBQUc7WUFDcEJ4RjtRQUNKO1FBQ0EsT0FBcUIsV0FBSCxHQUFJLElBQUdZLFlBQVl5RixHQUFHLEVBQUVpRCxjQUFjO1lBQ3BEbkQsVUFBVWdELFVBQVVDLEtBQUtDO1FBQzdCO0lBQ0o7QUFDSixvREFBb0Q7QUFDcEQsZ0RBQWdEO0FBQ2hELHdEQUF3RDtBQUN4RCxTQUFTTyxZQUFZa0IsZ0JBQWdCO0lBQ2pDLElBQUksRUFBRTFCLEdBQUcsRUFBRTVELEdBQUcsRUFBRSxHQUFHc0Y7SUFDbkIsMERBQTBEO0lBQzFELCtGQUErRjtJQUMvRixJQUFJbkcsSUFBcUMsRUFBRTtRQUN2Qyw0REFBNEQ7UUFDNUQsc0VBQXNFO1FBQ3RFcEIsVUFBVXdILG9CQUFvQjtRQUM5Qix1RUFBdUU7UUFDdkUsaUJBQWlCO1FBQ2pCLGlDQUFpQztRQUNqQyxtRUFBbUU7UUFDbkUsT0FBT0MsU0FBUztZQUNaNUIsS0FBSyxJQUFJO1lBQ1RwRixPQUFPLENBQUM7WUFDUkosV0FBVyxJQUFJO1lBQ2ZxSCxhQUFhLEVBQUU7UUFDbkI7SUFDSjtJQUNBLHNGQUFzRjtJQUN0RnBCLFFBQVFGLEtBQUssQ0FBQ25FO0lBQ2RxRSxRQUFRRixLQUFLLENBQUM7SUFDZCxPQUFPMUcsV0FBV2lJLFFBQVEsQ0FBQyxXQUFXQyxJQUFJLENBQUMsQ0FBQzFDO1FBQ3hDLElBQUksRUFBRTJDLE1BQU1DLGNBQWMsRUFBRUosV0FBVyxFQUFFLEdBQUd4QztRQUM1QyxPQUFPLENBQUNwRixnQkFBZ0IsT0FBTyxLQUFLLElBQUlBLGFBQWFPLFNBQVMsTUFBTXlILGlCQUFpQix5RkFBTyxpRUFBaUIsSUFBRUYsSUFBSSxDQUFDLENBQUNHO1lBQ2pILE9BQU8seUZBQU8sNkRBQWUsSUFBRUgsSUFBSSxDQUFDLENBQUNJO2dCQUNqQ25DLE1BQU1tQyxVQUFVL0ksT0FBTztnQkFDdkJzSSxpQkFBaUIxQixHQUFHLEdBQUdBO2dCQUN2QixPQUFPa0M7WUFDWDtRQUNKLEdBQUdILElBQUksQ0FBQyxDQUFDSyxJQUFLO2dCQUNOSCxnQkFBZ0JHLEVBQUVoSixPQUFPO2dCQUN6QnlJLGFBQWEsRUFBRTtZQUNuQixNQUFNO1lBQ05JO1lBQ0FKO1FBQ0o7SUFDSixHQUFHRSxJQUFJLENBQUMsQ0FBQzFDO1FBQ0wsSUFBSSxFQUFFNEMsY0FBYyxFQUFFSixXQUFXLEVBQUUsR0FBR3hDO1FBQ3RDLElBQUlnRDtRQUNKLDhFQUE4RTtRQUM5RSxrRkFBa0Y7UUFDbEYseUVBQXlFO1FBQ3pFLE1BQU1DLFVBQVVkLFFBQVF4QjtRQUN4QixNQUFNdUMsU0FBUztZQUNYL0gsV0FBV3lIO1lBQ1hLO1lBQ0ExTDtZQUNBNEwsS0FBSztnQkFDRHBHO2dCQUNBaEIsVUFBVTNCLFlBQVl1SSxJQUFJO2dCQUMxQmpHLE9BQU90QyxZQUFZc0MsS0FBSztnQkFDeEJuQztnQkFDQTBJO1lBQ0o7UUFDSjtRQUNBLE9BQU9HLFFBQVFDLE9BQU8sQ0FBQyxDQUFDLENBQUNMLDBCQUEwQlgsaUJBQWlCOUcsS0FBSyxLQUFLLE9BQU8sS0FBSyxJQUFJeUgsd0JBQXdCakcsR0FBRyxJQUFJc0YsaUJBQWlCOUcsS0FBSyxHQUFHLENBQUMsR0FBR3pDLE9BQU93SyxtQkFBbUIsRUFBRTNDLEtBQUt1QyxTQUFTUixJQUFJLENBQUMsQ0FBQ2EsWUFDdE0sbUVBQW1FO1lBQ25FaEIsU0FBUztnQkFDTCxHQUFHRixnQkFBZ0I7Z0JBQ25CdEY7Z0JBQ0E1QixXQUFXeUg7Z0JBQ1hKO2dCQUNBakgsT0FBT2dJO1lBQ1g7SUFDUjtBQUNKO0FBQ0EsbUVBQW1FO0FBQ25FLHlEQUF5RDtBQUN6RCxTQUFTQyxLQUFLeEQsS0FBSzs7SUFDZixJQUFJLEVBQUV5RCxRQUFRLEVBQUUsR0FBR3pEO0lBQ25CLGlFQUFpRTtJQUNqRSx1Q0FBdUM7SUFDdkM1SCxPQUFPMkIsT0FBTyxDQUFDMkosZUFBZSxDQUFDLElBQUlELFlBQVk7UUFDM0NBO0tBQ0g7SUFDRCxPQUFPO0FBQ1g7SUFSU0Q7TUFBQUE7QUFTVCxNQUFNRyxtQkFBbUI7SUFDckJDLGlCQUFpQjtJQUNqQkMsY0FBYztJQUNkQyxhQUFhO0lBQ2JDLGNBQWM7SUFDZEMsYUFBYTtBQUNqQjtBQUNBLE1BQU1DLHNCQUFzQjtJQUN4QkMsV0FBVztJQUNYQyxpQkFBaUI7SUFDakJDLHFCQUFxQjtJQUNyQjNHLFFBQVE7QUFDWjtBQUNBLElBQUk0RyxZQUFZO0FBQ2hCLG1EQUFtRDtBQUNuRCxJQUFJQyxnQkFBZ0I7QUFDcEIsU0FBU0M7SUFDTDtRQUNJWixpQkFBaUJFLFlBQVk7UUFDN0JGLGlCQUFpQkksWUFBWTtRQUM3QkosaUJBQWlCRyxXQUFXO1FBQzVCSCxpQkFBaUJLLFdBQVc7S0FDL0IsQ0FBQ1EsT0FBTyxDQUFDLENBQUNDLE9BQU9DLFlBQVlILFVBQVUsQ0FBQ0U7QUFDN0M7QUFDQSxTQUFTRTtJQUNMLElBQUksQ0FBQzdMLE9BQU84TCxFQUFFLEVBQUU7SUFDaEJGLFlBQVlELElBQUksQ0FBQ2QsaUJBQWlCSSxZQUFZLEVBQUUsd0JBQXdCOztJQUV4RSxNQUFNYyxzQkFBc0JILFlBQVlJLGdCQUFnQixDQUFDbkIsaUJBQWlCRSxZQUFZLEVBQUUsUUFBUWtCLE1BQU07SUFDdEcsSUFBSUYscUJBQXFCO1FBQ3JCLE1BQU1HLHlCQUF5Qk4sWUFBWU8sT0FBTyxDQUFDaEIsb0JBQW9CRSxlQUFlLEVBQUVSLGlCQUFpQkMsZUFBZSxFQUFFRCxpQkFBaUJFLFlBQVk7UUFDdkosTUFBTXFCLG1CQUFtQlIsWUFBWU8sT0FBTyxDQUFDaEIsb0JBQW9CQyxTQUFTLEVBQUVQLGlCQUFpQkUsWUFBWSxFQUFFRixpQkFBaUJJLFlBQVk7UUFDeEksSUFBSTdILEtBQXNDLElBQUkseUZBQXlGO1FBQ3ZJOEksMkJBQTJCMUssYUFBYTRLLHFCQUFxQjVLLFdBQVc7WUFDcEVULFFBQVFFLE9BQU8sQ0FBQ29MLFNBQVMsQ0FBQywyQkFBMkI7Z0JBQ2pEQyxXQUFXVixZQUFZVyxVQUFVLEdBQUdMLHVCQUF1QkksU0FBUztnQkFDcEVFLFlBQVk7b0JBQ1J2SixVQUFVQyxTQUFTRCxRQUFRO29CQUMzQlcsT0FBT1YsU0FBU0MsTUFBTTtnQkFDMUI7WUFDSixHQUFHc0osR0FBRyxDQUFDYixZQUFZVyxVQUFVLEdBQUdILGlCQUFpQkUsU0FBUyxHQUFHRixpQkFBaUJNLFFBQVE7UUFDMUY7SUFDSjtJQUNBLElBQUl4SyxhQUFhO1FBQ2IwSixZQUFZSSxnQkFBZ0IsQ0FBQ2Isb0JBQW9CQyxTQUFTLEVBQUVNLE9BQU8sQ0FBQ3hKO0lBQ3hFO0lBQ0F1SjtBQUNKO0FBQ0EsU0FBU2tCO0lBQ0wsSUFBSSxDQUFDM00sT0FBTzhMLEVBQUUsRUFBRTtJQUNoQkYsWUFBWUQsSUFBSSxDQUFDZCxpQkFBaUJHLFdBQVcsRUFBRSxxQkFBcUI7O0lBRXBFLE1BQU00QixrQkFBa0JoQixZQUFZSSxnQkFBZ0IsQ0FBQ25CLGlCQUFpQkssV0FBVyxFQUFFO0lBQ25GLElBQUksQ0FBQzBCLGdCQUFnQlgsTUFBTSxFQUFFO0lBQzdCLE1BQU1GLHNCQUFzQkgsWUFBWUksZ0JBQWdCLENBQUNuQixpQkFBaUJFLFlBQVksRUFBRSxRQUFRa0IsTUFBTTtJQUN0RyxJQUFJRixxQkFBcUI7UUFDckJILFlBQVlPLE9BQU8sQ0FBQ2hCLG9CQUFvQkcsbUJBQW1CLEVBQUVzQixlQUFlLENBQUMsRUFBRSxDQUFDNU4sSUFBSSxFQUFFNkwsaUJBQWlCRSxZQUFZO1FBQ25IYSxZQUFZTyxPQUFPLENBQUNoQixvQkFBb0J4RyxNQUFNLEVBQUVrRyxpQkFBaUJFLFlBQVksRUFBRUYsaUJBQWlCRyxXQUFXO1FBQzNHLElBQUk5SSxhQUFhO1lBQ2IwSixZQUFZSSxnQkFBZ0IsQ0FBQ2Isb0JBQW9CeEcsTUFBTSxFQUFFK0csT0FBTyxDQUFDeEo7WUFDakUwSixZQUFZSSxnQkFBZ0IsQ0FBQ2Isb0JBQW9CRyxtQkFBbUIsRUFBRUksT0FBTyxDQUFDeEo7UUFDbEY7SUFDSjtJQUNBdUo7SUFDQTtRQUNJTixvQkFBb0JHLG1CQUFtQjtRQUN2Q0gsb0JBQW9CeEcsTUFBTTtLQUM3QixDQUFDK0csT0FBTyxDQUFDLENBQUNTLFVBQVVQLFlBQVlpQixhQUFhLENBQUNWO0FBQ25EO0FBQ0EsU0FBU1csbUJBQW1CQyxLQUFLLEVBQUVySyxFQUFFO0lBQ2pDLCtCQUErQjtJQUMvQixJQUFJMUMsT0FBTzhMLEVBQUUsRUFBRTtRQUNYRixZQUFZRCxJQUFJLENBQUNkLGlCQUFpQkUsWUFBWTtJQUNsRDtJQUNBLE1BQU1pQyxVQUFVdEssR0FBRzhJLGdCQUFnQkssc0JBQXNCYztJQUN6RCxJQUFJLENBQUNwQixXQUFXO1FBQ1osNEVBQTRFO1FBQzVFQSxZQUFZL0wsUUFBUXlCLE9BQU8sQ0FBQ2dNLFdBQVcsQ0FBQ0YsT0FBT0MsU0FBUztZQUNwREUsb0JBQW9CcE0sb0JBQW9CRyxPQUFPO1FBQ25EO1FBQ0EsdUdBQXVHO1FBQ3ZHdUssZ0JBQWdCO0lBQ3BCLE9BQU87UUFDSCxNQUFNMkIsa0JBQWtCN04sT0FBTzJCLE9BQU8sQ0FBQ2tNLGVBQWU7UUFDdERBLGdCQUFnQjtZQUNaNUIsVUFBVTVHLE1BQU0sQ0FBQ3FJO1FBQ3JCO0lBQ0o7QUFDSjtBQUNBLFNBQVNJLEtBQUtsRyxLQUFLOztJQUNmLElBQUksRUFBRW1HLFNBQVMsRUFBRXpJLFFBQVEsRUFBRSxHQUFHc0M7SUFDOUIsbUVBQW1FO0lBQ25FLHNDQUFzQztJQUN0QzVILE9BQU8yQixPQUFPLENBQUMySixlQUFlLENBQUMsSUFBSXlDLFVBQVUzQixPQUFPLENBQUMsQ0FBQ2YsV0FBV0EsYUFBYTtRQUMxRTBDO0tBQ0g7SUFDRCwwRUFBMEU7SUFDMUUsbUNBQW1DO0lBQ25DL04sT0FBTzJCLE9BQU8sQ0FBQ3FNLFNBQVMsQ0FBQztRQUNwQixJQUFHbE4sb0JBQW9CYSxPQUFPLEVBQUVpQjtJQUNyQyxHQUFHLEVBQUU7SUFDTCxJQUFJa0IsS0FBNEIsRUFBRSxFQVFqQztJQUNELE9BQU93QjtBQUNYO0lBdEJTd0k7TUFBQUE7QUF1QlQsU0FBUzNELFNBQVN0SSxLQUFLO0lBQ25CLElBQUksRUFBRTBHLEdBQUcsRUFBRXhGLFNBQVMsRUFBRUksS0FBSyxFQUFFd0IsR0FBRyxFQUFFLEdBQUc5QztJQUNyQyxJQUFJdUksY0FBYyxhQUFhdkksUUFBUUssWUFBWUwsTUFBTXVJLFdBQVc7SUFDcEVySCxZQUFZQSxhQUFhUCxhQUFhTyxTQUFTO0lBQy9DSSxRQUFRQSxTQUFTWCxhQUFhVyxLQUFLO0lBQ25DLE1BQU1xRixXQUFXO1FBQ2IsR0FBR3JGLEtBQUs7UUFDUko7UUFDQTRCO1FBQ0F4RjtJQUNKO0lBQ0EsK0ZBQStGO0lBQy9GcUQsZUFBZWdHO0lBQ2YsSUFBSTRGLFdBQVc7SUFDZixJQUFJQztJQUNKLE1BQU1DLGdCQUFnQixJQUFJdEQsUUFBUSxDQUFDQyxTQUFTc0Q7UUFDeEMsSUFBSTlMLGtCQUFrQjtZQUNsQkE7UUFDSjtRQUNBNEwsaUJBQWlCO1lBQ2I1TCxtQkFBbUI7WUFDbkJ3STtRQUNKO1FBQ0F4SSxtQkFBbUI7WUFDZjJMLFdBQVc7WUFDWDNMLG1CQUFtQjtZQUNuQixNQUFNcUcsUUFBUSxJQUFJMEYsTUFBTTtZQUN4QjFGLE1BQU1sRSxTQUFTLEdBQUc7WUFDbEIySixPQUFPekY7UUFDWDtJQUNKO0lBQ0EseUVBQXlFO0lBQ3pFLHlDQUF5QztJQUN6QyxTQUFTMkY7UUFDTCxJQUFJLENBQUNyRSxlQUFlLHdFQUF3RTtRQUM1Riw4QkFBOEI7UUExZXRDLGtCQTJlaUMsY0FBYztZQUNuQyxPQUFPO1FBQ1g7UUFDQSxNQUFNc0UsbUJBQW1COU0sYUFBYXFELFNBQVMwSixnQkFBZ0IsQ0FBQztRQUNoRSxNQUFNQyxlQUFlLElBQUlDLElBQUlILGlCQUFpQnhHLEdBQUcsQ0FBQyxDQUFDNEcsTUFBTUEsSUFBSUMsWUFBWSxDQUFDO1FBQzFFLE1BQU1DLFdBQVcvSixTQUFTZ0ssYUFBYSxDQUFDO1FBQ3hDLE1BQU1DLFFBQVFGLFlBQVksT0FBTyxLQUFLLElBQUlBLFNBQVNELFlBQVksQ0FBQztRQUNoRTNFLFlBQVlnQyxPQUFPLENBQUMsQ0FBQ3hFO1lBQ2pCLElBQUksRUFBRXVILElBQUksRUFBRUMsSUFBSSxFQUFFLEdBQUd4SDtZQUNyQixJQUFJLENBQUNnSCxhQUFhUyxHQUFHLENBQUNGLE9BQU87Z0JBQ3pCLE1BQU1HLFdBQVdySyxTQUFTc0ssYUFBYSxDQUFDO2dCQUN4Q0QsU0FBU0UsWUFBWSxDQUFDLGVBQWVMO2dCQUNyQ0csU0FBU0UsWUFBWSxDQUFDLFNBQVM7Z0JBQy9CLElBQUlOLE9BQU87b0JBQ1BJLFNBQVNFLFlBQVksQ0FBQyxTQUFTTjtnQkFDbkM7Z0JBQ0FqSyxTQUFTd0ssSUFBSSxDQUFDQyxXQUFXLENBQUNKO2dCQUMxQkEsU0FBU0ksV0FBVyxDQUFDekssU0FBUzBLLGNBQWMsQ0FBQ1A7WUFDakQ7UUFDSjtRQUNBLE9BQU87SUFDWDtJQUNBLFNBQVNRO1FBQ0wsSUFDQSw4QkFBOEI7UUFuZ0J0QyxLQXVnQmlCeEIsRUFBRSxFQThCVjtRQUNELElBQUl2TSxNQUFNME8sTUFBTSxFQUFFO1lBQ2QsTUFBTSxFQUFFQyxDQUFDLEVBQUVDLENBQUMsRUFBRSxHQUFHNU8sTUFBTTBPLE1BQU07WUFDNUIsSUFBR2pRLG9CQUFvQm9RLGtCQUFrQixFQUFFO2dCQUN4QzVLLE9BQU82SyxRQUFRLENBQUNILEdBQUdDO1lBQ3ZCO1FBQ0o7SUFDSjtJQUNBLFNBQVNHO1FBQ0x2QztJQUNKO0lBQ0FJO0lBQ0EsTUFBTW9DLE9BQXFCLFdBQUgsR0FBSSxJQUFHOVEsWUFBWStRLElBQUksRUFBRS9RLFlBQVlnUixRQUFRLEVBQUU7UUFDbkV6TCxVQUFVO1lBQ04sV0FBVyxHQUFJLElBQUd2RixZQUFZeUYsR0FBRyxFQUFFNEYsTUFBTTtnQkFDckNDLFVBQVV1RTtZQUNkO1lBQ0EsV0FBVyxHQUFJLElBQUc3UCxZQUFZK1EsSUFBSSxFQUFFckksY0FBYztnQkFDOUNuRCxVQUFVO29CQUNOZ0QsVUFBVUMsS0FBS0M7b0JBQ2YsV0FBVyxHQUFJLElBQUd6SSxZQUFZeUYsR0FBRyxFQUFFN0UsUUFBUXFRLE1BQU0sRUFBRTt3QkFDL0NDLE1BQU07d0JBQ04zTCxVQUF3QixXQUFILEdBQUksSUFBR3ZGLFlBQVl5RixHQUFHLEVBQUV6RSxnQkFBZ0JtUSxjQUFjLEVBQUUsQ0FBQztvQkFDbEY7aUJBQ0g7WUFDTDtTQUNIO0lBQ0w7SUFDQSxpRkFBaUY7SUFDakYxRCxtQkFBbUJuTCxZQUFZLENBQUNnSixXQUF5QixXQUFILEdBQUksSUFBR3RMLFlBQVl5RixHQUFHLEVBQUVzSSxNQUFNO1lBQzVFQyxXQUFXO2dCQUNQMUM7Z0JBQ0F1RjthQUNIO1lBQ0R0TCxVQUFVeEIsS0FBOEIsR0FBaUIsV0FBSCxHQUFJLElBQUcvRCxZQUFZeUYsR0FBRyxFQUFFeEYsT0FBTzJCLE9BQU8sQ0FBQ3lQLFVBQVUsRUFBRTtnQkFDckc5TCxVQUFVdUw7WUFDZCxLQUFLQSxDQUFJQTtRQUNiO0lBQ0osT0FBT3ZDO0FBQ1g7QUFDQSxlQUFlakosT0FBT2dNLGNBQWM7SUFDaEMsSUFBSUEsZUFBZTFNLEdBQUcsRUFBRTtRQUNwQixNQUFNb0UsWUFBWXNJO1FBQ2xCO0lBQ0o7SUFDQSxJQUFJO1FBQ0EsTUFBTWxILFNBQVNrSDtJQUNuQixFQUFFLE9BQU8xTSxLQUFLO1FBQ1YsTUFBTTJNLFlBQVksQ0FBQyxHQUFHclEsU0FBU3NRLGNBQWMsRUFBRTVNO1FBQy9DLCtCQUErQjtRQUMvQixJQUFJMk0sVUFBVTFNLFNBQVMsRUFBRTtZQUNyQixNQUFNME07UUFDVjtRQUNBLElBQUl4TixJQUFzQyxFQUFFO1lBQ3hDLCtEQUErRDtZQUMvRHFCLFdBQVc7Z0JBQ1AsTUFBTW1NO1lBQ1Y7UUFDSjtRQUNBLE1BQU12SSxZQUFZO1lBQ2QsR0FBR3NJLGNBQWM7WUFDakIxTSxLQUFLMk07UUFDVDtJQUNKO0FBQ0o7QUFDQSxlQUFlaFMsUUFBUW1HLElBQUk7SUFDdkIsSUFBSStMLGFBQWF4UCxZQUFZMkMsR0FBRztJQUNoQyxJQUFJO1FBQ0EsTUFBTThNLGdCQUFnQixNQUFNclAsV0FBVzJGLFdBQVcsQ0FBQzJKLGNBQWMsQ0FBQztRQUNsRSxJQUFJLFdBQVdELGVBQWU7WUFDMUIsTUFBTUEsY0FBYzNJLEtBQUs7UUFDN0I7UUFDQSxNQUFNLEVBQUU2SSxXQUFXQyxHQUFHLEVBQUU3UyxTQUFTOFMsR0FBRyxFQUFFLEdBQUdKO1FBQ3pDOU8sWUFBWWlQO1FBQ1osSUFBSUMsT0FBT0EsSUFBSUMsZUFBZSxFQUFFO1lBQzVCbFAsY0FBYyxDQUFDZ0Y7Z0JBQ1gsSUFBSSxFQUFFbUssRUFBRSxFQUFFclMsSUFBSSxFQUFFc04sU0FBUyxFQUFFaE8sS0FBSyxFQUFFb08sUUFBUSxFQUFFNEUsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsRUFBRSxHQUFHdEs7Z0JBQ2hGLHNEQUFzRDtnQkFDdEQsTUFBTXVLLFdBQVdDLEtBQUtDLEdBQUcsS0FBSyxNQUFPQyxDQUFBQSxLQUFLQyxLQUFLLENBQUNELEtBQUtFLE1BQU0sS0FBTSxRQUFPLE1BQU0sSUFBRztnQkFDakYsSUFBSUM7Z0JBQ0osSUFBSVIsV0FBV0EsUUFBUXRGLE1BQU0sRUFBRTtvQkFDM0I4RixpQkFBaUJSLE9BQU8sQ0FBQyxFQUFFLENBQUNqRixTQUFTO2dCQUN6QztnQkFDQSxNQUFNMEYsWUFBWTtvQkFDZFgsSUFBSUEsTUFBTUk7b0JBQ1Z6UztvQkFDQXNOLFdBQVdBLGFBQWF5RjtvQkFDeEJ6VCxPQUFPQSxTQUFTLE9BQU9vTyxXQUFXcE87b0JBQ2xDMlQsT0FBT1gsY0FBYyxVQUFVQSxjQUFjLFlBQVksV0FBVztnQkFDeEU7Z0JBQ0EsSUFBSUUsYUFBYTtvQkFDYlEsVUFBVVIsV0FBVyxHQUFHQTtnQkFDNUI7Z0JBQ0FMLElBQUlDLGVBQWUsQ0FBQ1k7WUFDeEI7UUFDSjtRQUNBLE1BQU1FLGlCQUNOLHdEQUF3RDtRQXRvQmhFLEtBdW9COEMsSUFBSTVRLFlBQVkyQyxHQUFHLEdBQUc7WUFDeERtRSxPQUFPOUcsWUFBWTJDLEdBQUc7UUFDMUIsSUFBSSxNQUFNdkMsV0FBVzJGLFdBQVcsQ0FBQzJKLGNBQWMsQ0FBQzFQLFlBQVl1SSxJQUFJO1FBQ2hFLElBQUksV0FBV3FJLGdCQUFnQjtZQUMzQixNQUFNQSxlQUFlOUosS0FBSztRQUM5QjtRQUNBakcsa0JBQWtCK1AsZUFBZWpCLFNBQVM7UUFDMUMsSUFBSTdOLElBQXFDLEVBQUU7WUFDdkMsTUFBTSxFQUFFK08sa0JBQWtCLEVBQUUsR0FBRy9TLG1CQUFPQSxDQUFDLHdGQUE2QjtZQUNwRSxJQUFJLENBQUMrUyxtQkFBbUJoUSxrQkFBa0I7Z0JBQ3RDLE1BQU0sSUFBSTJMLE1BQU0sMkRBQTJEeE0sWUFBWXVJLElBQUksR0FBRztZQUNsRztRQUNKO0lBQ0osRUFBRSxPQUFPekIsT0FBTztRQUNaLGlFQUFpRTtRQUNqRTBJLGFBQWEsQ0FBQyxHQUFHdlEsU0FBU3NRLGNBQWMsRUFBRXpJO0lBQzlDO0lBQ0EsSUFBSWhGLElBQXNDLEVBQUU7UUFDeEMsTUFBTSxFQUFFZ1AsY0FBYyxFQUFFLEdBQUdoVCxtQkFBT0EsQ0FBQyx3SUFBd0Q7UUFDM0Ysd0VBQXdFO1FBQ3hFLGdDQUFnQztRQUNoQyxJQUFJMFIsWUFBWTtZQUNaLElBQUlBLGVBQWV4UCxZQUFZMkMsR0FBRyxFQUFFO2dCQUNoQ1EsV0FBVztvQkFDUCxJQUFJMkQ7b0JBQ0osSUFBSTt3QkFDQSxtRUFBbUU7d0JBQ25FLGtFQUFrRTt3QkFDbEUsNENBQTRDO3dCQUM1QyxNQUFNLElBQUkwRixNQUFNZ0QsV0FBV3VCLE9BQU87b0JBQ3RDLEVBQUUsT0FBT0MsR0FBRzt3QkFDUmxLLFFBQVFrSztvQkFDWjtvQkFDQWxLLE1BQU1wSixJQUFJLEdBQUc4UixXQUFXOVIsSUFBSTtvQkFDNUJvSixNQUFNbUssS0FBSyxHQUFHekIsV0FBV3lCLEtBQUs7b0JBQzlCLE1BQU1ILGVBQWVoSyxPQUFPMEksV0FBVzBCLE1BQU07Z0JBQ2pEO1lBQ0osT0FBTztnQkFDSC9OLFdBQVc7b0JBQ1AsTUFBTXFNO2dCQUNWO1lBQ0o7UUFDSjtJQUNKO0lBQ0EsSUFBSTFMLE9BQU9xTixtQkFBbUIsRUFBRTtRQUM1QixNQUFNck4sT0FBT3FOLG1CQUFtQixDQUFDblIsWUFBWW9SLFVBQVU7SUFDM0Q7SUFDQWpVLFNBQVMsQ0FBQyxHQUFHNkIsUUFBUXFTLFlBQVksRUFBRXJSLFlBQVl1SSxJQUFJLEVBQUV2SSxZQUFZc0MsS0FBSyxFQUFFbkMsUUFBUTtRQUM1RW1SLGNBQWN0UixZQUFZbUIsS0FBSztRQUMvQmY7UUFDQW1HLEtBQUs1RjtRQUNMSSxXQUFXRjtRQUNYa0g7UUFDQXBGLEtBQUs2TTtRQUNMaE8sWUFBWStQLFFBQVF2UixZQUFZd0IsVUFBVTtRQUMxQ2dRLGNBQWMsQ0FBQ3RRLE1BQU1xRixLQUFLZ0ksU0FBU2xMLE9BQU94RyxPQUFPdUYsTUFBTSxDQUFDLENBQUMsR0FBR2xCLE1BQU07Z0JBQzFEcUY7Z0JBQ0FnSTtZQUNKO1FBQ0puSixRQUFRcEYsWUFBWW9GLE1BQU07UUFDMUJKLFNBQVNoRixZQUFZZ0YsT0FBTztRQUM1Qi9FO1FBQ0F3UixlQUFlelIsWUFBWXlSLGFBQWE7UUFDeENDLFdBQVcxUixZQUFZMFIsU0FBUztJQUNwQztJQUNBblIsMkJBQTJCLE1BQU1wRCxPQUFPd1UsZ0NBQWdDO0lBQ3hFLE1BQU1DLFlBQVk7UUFDZHJMLEtBQUs1RjtRQUNMa1IsU0FBUztRQUNUOVEsV0FBV0Y7UUFDWE0sT0FBT25CLFlBQVltQixLQUFLO1FBQ3hCd0IsS0FBSzZNO0lBQ1Q7SUFDQSxJQUFJL0wsUUFBUSxPQUFPLEtBQUssSUFBSUEsS0FBS2dHLFlBQVksRUFBRTtRQUMzQyxNQUFNaEcsS0FBS2dHLFlBQVk7SUFDM0I7SUFDQXBHLE9BQU91TztBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU83VSxRQUFRNEMsT0FBTyxLQUFLLGNBQWUsT0FBTzVDLFFBQVE0QyxPQUFPLEtBQUssWUFBWTVDLFFBQVE0QyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU81QyxRQUFRNEMsT0FBTyxDQUFDbVMsVUFBVSxLQUFLLGFBQWE7SUFDcktqVixPQUFPQyxjQUFjLENBQUNDLFFBQVE0QyxPQUFPLEVBQUUsY0FBYztRQUFFM0MsT0FBTztJQUFLO0lBQ25FSCxPQUFPdUYsTUFBTSxDQUFDckYsUUFBUTRDLE9BQU8sRUFBRTVDO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVE0QyxPQUFPO0FBQ2xDLEVBRUEsaUNBQWlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2luZGV4LmpzPzQ2Y2IiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGxvY2F0aW9uICovIFwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgdmVyc2lvbjogbnVsbCxcbiAgICByb3V0ZXI6IG51bGwsXG4gICAgZW1pdHRlcjogbnVsbCxcbiAgICBpbml0aWFsaXplOiBudWxsLFxuICAgIGh5ZHJhdGU6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgdmVyc2lvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH0sXG4gICAgcm91dGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJvdXRlcjtcbiAgICB9LFxuICAgIGVtaXR0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZW1pdHRlcjtcbiAgICB9LFxuICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZTtcbiAgICB9LFxuICAgIGh5ZHJhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaHlkcmF0ZTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbnJlcXVpcmUoXCIuLi9idWlsZC9wb2x5ZmlsbHMvcG9seWZpbGwtbW9kdWxlXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX2NsaWVudCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0LWRvbS9jbGllbnRcIikpO1xuY29uc3QgX2hlYWRtYW5hZ2VyY29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZVwiKTtcbmNvbnN0IF9taXR0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9taXR0XCIpKTtcbmNvbnN0IF9yb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3JvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX2hhbmRsZXNtb290aHNjcm9sbCA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9oYW5kbGUtc21vb3RoLXNjcm9sbFwiKTtcbmNvbnN0IF9pc2R5bmFtaWMgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pY1wiKTtcbmNvbnN0IF9xdWVyeXN0cmluZyA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9xdWVyeXN0cmluZ1wiKTtcbmNvbnN0IF9ydW50aW1lY29uZmlnZXh0ZXJuYWwgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9ydW50aW1lLWNvbmZpZy5leHRlcm5hbFwiKTtcbmNvbnN0IF91dGlscyA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3V0aWxzXCIpO1xuY29uc3QgX3BvcnRhbCA9IHJlcXVpcmUoXCIuL3BvcnRhbFwiKTtcbmNvbnN0IF9oZWFkbWFuYWdlciA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4vaGVhZC1tYW5hZ2VyXCIpKTtcbmNvbnN0IF9wYWdlbG9hZGVyID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi9wYWdlLWxvYWRlclwiKSk7XG5jb25zdCBfcGVyZm9ybWFuY2VyZWxheWVyID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi9wZXJmb3JtYW5jZS1yZWxheWVyXCIpKTtcbmNvbnN0IF9yb3V0ZWFubm91bmNlciA9IHJlcXVpcmUoXCIuL3JvdXRlLWFubm91bmNlclwiKTtcbmNvbnN0IF9yb3V0ZXIgPSByZXF1aXJlKFwiLi9yb3V0ZXJcIik7XG5jb25zdCBfaXNlcnJvciA9IHJlcXVpcmUoXCIuLi9saWIvaXMtZXJyb3JcIik7XG5jb25zdCBfaW1hZ2Vjb25maWdjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2ltYWdlLWNvbmZpZy1jb250ZXh0LnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX3JlbW92ZWJhc2VwYXRoID0gcmVxdWlyZShcIi4vcmVtb3ZlLWJhc2UtcGF0aFwiKTtcbmNvbnN0IF9oYXNiYXNlcGF0aCA9IHJlcXVpcmUoXCIuL2hhcy1iYXNlLXBhdGhcIik7XG5jb25zdCBfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5jb25zdCBfYWRhcHRlcnMgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvYWRhcHRlcnNcIik7XG5jb25zdCBfaG9va3NjbGllbnRjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2hvb2tzLWNsaWVudC1jb250ZXh0LnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX29ucmVjb3ZlcmFibGVlcnJvciA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4vb24tcmVjb3ZlcmFibGUtZXJyb3JcIikpO1xuY29uc3QgX3RyYWNlciA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4vdHJhY2luZy90cmFjZXJcIikpO1xuY29uc3QgX3JlcG9ydHRvc29ja2V0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi90cmFjaW5nL3JlcG9ydC10by1zb2NrZXRcIikpO1xuY29uc3QgdmVyc2lvbiA9IFwiMTQuMS4zXCI7XG5sZXQgcm91dGVyO1xuY29uc3QgZW1pdHRlciA9ICgwLCBfbWl0dC5kZWZhdWx0KSgpO1xuY29uc3QgbG9vc2VUb0FycmF5ID0gKGlucHV0KT0+W10uc2xpY2UuY2FsbChpbnB1dCk7XG5sZXQgaW5pdGlhbERhdGE7XG5sZXQgZGVmYXVsdExvY2FsZSA9IHVuZGVmaW5lZDtcbmxldCBhc1BhdGg7XG5sZXQgcGFnZUxvYWRlcjtcbmxldCBhcHBFbGVtZW50O1xubGV0IGhlYWRNYW5hZ2VyO1xubGV0IGluaXRpYWxNYXRjaGVzTWlkZGxld2FyZSA9IGZhbHNlO1xubGV0IGxhc3RBcHBQcm9wcztcbmxldCBsYXN0UmVuZGVyUmVqZWN0O1xubGV0IGRldkNsaWVudDtcbmxldCBDYWNoZWRBcHAsIG9uUGVyZkVudHJ5O1xubGV0IENhY2hlZENvbXBvbmVudDtcbmNsYXNzIENvbnRhaW5lciBleHRlbmRzIF9yZWFjdC5kZWZhdWx0LkNvbXBvbmVudCB7XG4gICAgY29tcG9uZW50RGlkQ2F0Y2goY29tcG9uZW50RXJyLCBpbmZvKSB7XG4gICAgICAgIHRoaXMucHJvcHMuZm4oY29tcG9uZW50RXJyLCBpbmZvKTtcbiAgICB9XG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9IYXNoKCk7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgcm91dGVyIHN0YXRlIGlmOlxuICAgICAgICAvLyAtIHRoZSBwYWdlIHdhcyAoYXV0bykgZXhwb3J0ZWQgYW5kIGhhcyBhIHF1ZXJ5IHN0cmluZyBvciBzZWFyY2ggKGhhc2gpXG4gICAgICAgIC8vIC0gaXQgd2FzIGF1dG8gZXhwb3J0ZWQgYW5kIGlzIGEgZHluYW1pYyByb3V0ZSAodG8gcHJvdmlkZSBwYXJhbXMpXG4gICAgICAgIC8vIC0gaWYgaXQgaXMgYSBjbGllbnQtc2lkZSBza2VsZXRvbiAoZmFsbGJhY2sgcmVuZGVyKVxuICAgICAgICAvLyAtIGlmIG1pZGRsZXdhcmUgbWF0Y2hlcyB0aGUgY3VycmVudCBwYWdlIChtYXkgaGF2ZSByZXdyaXRlIHBhcmFtcylcbiAgICAgICAgLy8gLSBpZiByZXdyaXRlcyBpbiBuZXh0LmNvbmZpZy5qcyBtYXRjaCAobWF5IGhhdmUgcmV3cml0ZSBwYXJhbXMpXG4gICAgICAgIGlmIChyb3V0ZXIuaXNTc3IgJiYgKGluaXRpYWxEYXRhLmlzRmFsbGJhY2sgfHwgaW5pdGlhbERhdGEubmV4dEV4cG9ydCAmJiAoKDAsIF9pc2R5bmFtaWMuaXNEeW5hbWljUm91dGUpKHJvdXRlci5wYXRobmFtZSkgfHwgbG9jYXRpb24uc2VhcmNoIHx8IHByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVMgfHwgaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlKSB8fCBpbml0aWFsRGF0YS5wcm9wcyAmJiBpbml0aWFsRGF0YS5wcm9wcy5fX05fU1NHICYmIChsb2NhdGlvbi5zZWFyY2ggfHwgcHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUyB8fCBpbml0aWFsTWF0Y2hlc01pZGRsZXdhcmUpKSkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHF1ZXJ5IG9uIG1vdW50IGZvciBleHBvcnRlZCBwYWdlc1xuICAgICAgICAgICAgcm91dGVyLnJlcGxhY2Uocm91dGVyLnBhdGhuYW1lICsgXCI/XCIgKyBTdHJpbmcoKDAsIF9xdWVyeXN0cmluZy5hc3NpZ24pKCgwLCBfcXVlcnlzdHJpbmcudXJsUXVlcnlUb1NlYXJjaFBhcmFtcykocm91dGVyLnF1ZXJ5KSwgbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpKSksIGFzUGF0aCwge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAvLyBXQVJOSU5HOiBgX2hgIGlzIGFuIGludGVybmFsIG9wdGlvbiBmb3IgaGFuZGluZyBOZXh0LmpzXG4gICAgICAgICAgICAgICAgLy8gY2xpZW50LXNpZGUgaHlkcmF0aW9uLiBZb3VyIGFwcCBzaG91bGQgX25ldmVyXyB1c2UgdGhpcyBwcm9wZXJ0eS5cbiAgICAgICAgICAgICAgICAvLyBJdCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lIHdpdGhvdXQgbm90aWNlLlxuICAgICAgICAgICAgICAgIF9oOiAxLFxuICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHBhZ2VzIG11c3QgdHJpZ2dlciB0aGUgZGF0YSBmZXRjaCwgc28gdGhlIHRyYW5zaXRpb24gaXNcbiAgICAgICAgICAgICAgICAvLyBub3Qgc2hhbGxvdy5cbiAgICAgICAgICAgICAgICAvLyBPdGhlciBwYWdlcyAoc3RyaWN0bHkgdXBkYXRpbmcgcXVlcnkpIGhhcHBlbnMgc2hhbGxvd2x5LCBhcyBkYXRhXG4gICAgICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnRzIHdvdWxkIGFscmVhZHkgYmUgcHJlc2VudC5cbiAgICAgICAgICAgICAgICBzaGFsbG93OiAhaW5pdGlhbERhdGEuaXNGYWxsYmFjayAmJiAhaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICAgICAgICAgIGlmICghZXJyLmNhbmNlbGxlZCkgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgICB0aGlzLnNjcm9sbFRvSGFzaCgpO1xuICAgIH1cbiAgICBzY3JvbGxUb0hhc2goKSB7XG4gICAgICAgIGxldCB7IGhhc2ggfSA9IGxvY2F0aW9uO1xuICAgICAgICBoYXNoID0gaGFzaCAmJiBoYXNoLnN1YnN0cmluZygxKTtcbiAgICAgICAgaWYgKCFoYXNoKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaCk7XG4gICAgICAgIGlmICghZWwpIHJldHVybjtcbiAgICAgICAgLy8gSWYgd2UgY2FsbCBzY3JvbGxJbnRvVmlldygpIGluIGhlcmUgd2l0aG91dCBhIHNldFRpbWVvdXRcbiAgICAgICAgLy8gaXQgd29uJ3Qgc2Nyb2xsIHByb3Blcmx5LlxuICAgICAgICBzZXRUaW1lb3V0KCgpPT5lbC5zY3JvbGxJbnRvVmlldygpLCAwKTtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgUmVhY3REZXZPdmVybGF5IH0gPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL0BuZXh0L3JlYWN0LWRldi1vdmVybGF5L2Rpc3QvY2xpZW50XCIpO1xuICAgICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoUmVhY3REZXZPdmVybGF5LCB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMucHJvcHMuY2hpbGRyZW5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZShvcHRzKSB7XG4gICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgb3B0cyA9IHt9O1xuICAgIF90cmFjZXIuZGVmYXVsdC5vblNwYW5FbmQoX3JlcG9ydHRvc29ja2V0LmRlZmF1bHQpO1xuICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB0aGlzIHNwZWNpZmljIGxpbmVzIGFyZSByZW1vdmVkIGluIHByb2R1Y3Rpb25cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICBkZXZDbGllbnQgPSBvcHRzLmRldkNsaWVudDtcbiAgICB9XG4gICAgaW5pdGlhbERhdGEgPSBKU09OLnBhcnNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiX19ORVhUX0RBVEFfX1wiKS50ZXh0Q29udGVudCk7XG4gICAgd2luZG93Ll9fTkVYVF9EQVRBX18gPSBpbml0aWFsRGF0YTtcbiAgICBkZWZhdWx0TG9jYWxlID0gaW5pdGlhbERhdGEuZGVmYXVsdExvY2FsZTtcbiAgICBjb25zdCBwcmVmaXggPSBpbml0aWFsRGF0YS5hc3NldFByZWZpeCB8fCBcIlwiO1xuICAgIHNlbGYuX19uZXh0X3NldF9wdWJsaWNfcGF0aF9fKFwiXCIgKyBwcmVmaXggKyBcIi9fbmV4dC9cIikgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgO1xuICAgIC8vIEluaXRpYWxpemUgbmV4dC9jb25maWcgd2l0aCB0aGUgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvblxuICAgICgwLCBfcnVudGltZWNvbmZpZ2V4dGVybmFsLnNldENvbmZpZykoe1xuICAgICAgICBzZXJ2ZXJSdW50aW1lQ29uZmlnOiB7fSxcbiAgICAgICAgcHVibGljUnVudGltZUNvbmZpZzogaW5pdGlhbERhdGEucnVudGltZUNvbmZpZyB8fCB7fVxuICAgIH0pO1xuICAgIGFzUGF0aCA9ICgwLCBfdXRpbHMuZ2V0VVJMKSgpO1xuICAgIC8vIG1ha2Ugc3VyZSBub3QgdG8gYXR0ZW1wdCBzdHJpcHBpbmcgYmFzZVBhdGggZm9yIDQwNHNcbiAgICBpZiAoKDAsIF9oYXNiYXNlcGF0aC5oYXNCYXNlUGF0aCkoYXNQYXRoKSkge1xuICAgICAgICBhc1BhdGggPSAoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKShhc1BhdGgpO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICBjb25zdCB7IG5vcm1hbGl6ZUxvY2FsZVBhdGggfSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2kxOG4vbm9ybWFsaXplLWxvY2FsZS1wYXRoXCIpO1xuICAgICAgICBjb25zdCB7IGRldGVjdERvbWFpbkxvY2FsZSB9ID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvaTE4bi9kZXRlY3QtZG9tYWluLWxvY2FsZVwiKTtcbiAgICAgICAgY29uc3QgeyBwYXJzZVJlbGF0aXZlVXJsIH0gPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcmVsYXRpdmUtdXJsXCIpO1xuICAgICAgICBjb25zdCB7IGZvcm1hdFVybCB9ID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmxcIik7XG4gICAgICAgIGlmIChpbml0aWFsRGF0YS5sb2NhbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRBcyA9IHBhcnNlUmVsYXRpdmVVcmwoYXNQYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsZVBhdGhSZXN1bHQgPSBub3JtYWxpemVMb2NhbGVQYXRoKHBhcnNlZEFzLnBhdGhuYW1lLCBpbml0aWFsRGF0YS5sb2NhbGVzKTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVQYXRoUmVzdWx0LmRldGVjdGVkTG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkQXMucGF0aG5hbWUgPSBsb2NhbGVQYXRoUmVzdWx0LnBhdGhuYW1lO1xuICAgICAgICAgICAgICAgIGFzUGF0aCA9IGZvcm1hdFVybChwYXJzZWRBcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlcml2ZSB0aGUgZGVmYXVsdCBsb2NhbGUgaWYgaXQgd2Fzbid0IGRldGVjdGVkIGluIHRoZSBhc1BhdGhcbiAgICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSBkb24ndCBwcmVyZW5kZXIgc3RhdGljIHBhZ2VzIHdpdGggYWxsIHBvc3NpYmxlIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAvLyBsb2NhbGVzXG4gICAgICAgICAgICAgICAgZGVmYXVsdExvY2FsZSA9IGluaXRpYWxEYXRhLmxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGF0dGVtcHQgZGV0ZWN0aW5nIGRlZmF1bHQgbG9jYWxlIGJhc2VkIG9uIGhvc3RuYW1lXG4gICAgICAgICAgICBjb25zdCBkZXRlY3RlZERvbWFpbiA9IGRldGVjdERvbWFpbkxvY2FsZShwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9ET01BSU5TLCB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpO1xuICAgICAgICAgICAgLy8gVE9ETzogaW52ZXN0aWdhdGUgaWYgZGVmYXVsdExvY2FsZSBuZWVkcyB0byBiZSBwb3B1bGF0ZWQgYWZ0ZXJcbiAgICAgICAgICAgIC8vIGh5ZHJhdGlvbiB0byBwcmV2ZW50IG1pc21hdGNoZWQgcmVuZGVyc1xuICAgICAgICAgICAgaWYgKGRldGVjdGVkRG9tYWluKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdExvY2FsZSA9IGRldGVjdGVkRG9tYWluLmRlZmF1bHRMb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGluaXRpYWxEYXRhLnNjcmlwdExvYWRlcikge1xuICAgICAgICBjb25zdCB7IGluaXRTY3JpcHRMb2FkZXIgfSA9IHJlcXVpcmUoXCIuL3NjcmlwdFwiKTtcbiAgICAgICAgaW5pdFNjcmlwdExvYWRlcihpbml0aWFsRGF0YS5zY3JpcHRMb2FkZXIpO1xuICAgIH1cbiAgICBwYWdlTG9hZGVyID0gbmV3IF9wYWdlbG9hZGVyLmRlZmF1bHQoaW5pdGlhbERhdGEuYnVpbGRJZCwgcHJlZml4KTtcbiAgICBjb25zdCByZWdpc3RlciA9IChwYXJhbSk9PntcbiAgICAgICAgbGV0IFtyLCBmXSA9IHBhcmFtO1xuICAgICAgICByZXR1cm4gcGFnZUxvYWRlci5yb3V0ZUxvYWRlci5vbkVudHJ5cG9pbnQociwgZik7XG4gICAgfTtcbiAgICBpZiAod2luZG93Ll9fTkVYVF9QKSB7XG4gICAgICAgIC8vIERlZmVyIHBhZ2UgcmVnaXN0cmF0aW9uIGZvciBhbm90aGVyIHRpY2suIFRoaXMgd2lsbCBpbmNyZWFzZSB0aGUgb3ZlcmFsbFxuICAgICAgICAvLyBsYXRlbmN5IGluIGh5ZHJhdGluZyB0aGUgcGFnZSwgYnV0IHJlZHVjZSB0aGUgdG90YWwgYmxvY2tpbmcgdGltZS5cbiAgICAgICAgd2luZG93Ll9fTkVYVF9QLm1hcCgocCk9PnNldFRpbWVvdXQoKCk9PnJlZ2lzdGVyKHApLCAwKSk7XG4gICAgfVxuICAgIHdpbmRvdy5fX05FWFRfUCA9IFtdO1xuICAgIHdpbmRvdy5fX05FWFRfUC5wdXNoID0gcmVnaXN0ZXI7XG4gICAgaGVhZE1hbmFnZXIgPSAoMCwgX2hlYWRtYW5hZ2VyLmRlZmF1bHQpKCk7XG4gICAgaGVhZE1hbmFnZXIuZ2V0SXNTc3IgPSAoKT0+e1xuICAgICAgICByZXR1cm4gcm91dGVyLmlzU3NyO1xuICAgIH07XG4gICAgYXBwRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiX19uZXh0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFzc2V0UHJlZml4OiBwcmVmaXhcbiAgICB9O1xufVxuZnVuY3Rpb24gcmVuZGVyQXBwKEFwcCwgYXBwUHJvcHMpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShBcHAsIHtcbiAgICAgICAgLi4uYXBwUHJvcHNcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIEFwcENvbnRhaW5lcihwYXJhbSkge1xuICAgIGxldCB7IGNoaWxkcmVuIH0gPSBwYXJhbTtcbiAgICAvLyBDcmVhdGUgYSBtZW1vaXplZCB2YWx1ZSBmb3IgbmV4dC9uYXZpZ2F0aW9uIHJvdXRlciBjb250ZXh0LlxuICAgIGNvbnN0IGFkYXB0ZWRGb3JBcHBSb3V0ZXIgPSBfcmVhY3QuZGVmYXVsdC51c2VNZW1vKCgpPT57XG4gICAgICAgIHJldHVybiAoMCwgX2FkYXB0ZXJzLmFkYXB0Rm9yQXBwUm91dGVySW5zdGFuY2UpKHJvdXRlcik7XG4gICAgfSwgW10pO1xuICAgIHZhciBfc2VsZl9fX05FWFRfREFUQV9fX2F1dG9FeHBvcnQ7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoQ29udGFpbmVyLCB7XG4gICAgICAgIGZuOiAoZXJyb3IpPT4vLyBUT0RPOiBGaXggZGlzYWJsZWQgZXNsaW50IHJ1bGVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgIHJlbmRlckVycm9yKHtcbiAgICAgICAgICAgICAgICBBcHA6IENhY2hlZEFwcCxcbiAgICAgICAgICAgICAgICBlcnI6IGVycm9yXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKT0+Y29uc29sZS5lcnJvcihcIkVycm9yIHJlbmRlcmluZyBwYWdlOiBcIiwgZXJyKSksXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9hcHByb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZS5BcHBSb3V0ZXJDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgICAgICB2YWx1ZTogYWRhcHRlZEZvckFwcFJvdXRlcixcbiAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9ob29rc2NsaWVudGNvbnRleHRzaGFyZWRydW50aW1lLlNlYXJjaFBhcmFtc0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogKDAsIF9hZGFwdGVycy5hZGFwdEZvclNlYXJjaFBhcmFtcykocm91dGVyKSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfYWRhcHRlcnMuUGF0aG5hbWVDb250ZXh0UHJvdmlkZXJBZGFwdGVyLCB7XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlcjogcm91dGVyLFxuICAgICAgICAgICAgICAgICAgICBpc0F1dG9FeHBvcnQ6IChfc2VsZl9fX05FWFRfREFUQV9fX2F1dG9FeHBvcnQgPSBzZWxmLl9fTkVYVF9EQVRBX18uYXV0b0V4cG9ydCkgIT0gbnVsbCA/IF9zZWxmX19fTkVYVF9EQVRBX19fYXV0b0V4cG9ydCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfaG9va3NjbGllbnRjb250ZXh0c2hhcmVkcnVudGltZS5QYXRoUGFyYW1zQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICgwLCBfYWRhcHRlcnMuYWRhcHRGb3JQYXRoUGFyYW1zKShyb3V0ZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX3JvdXRlcmNvbnRleHRzaGFyZWRydW50aW1lLlJvdXRlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogKDAsIF9yb3V0ZXIubWFrZVB1YmxpY1JvdXRlckluc3RhbmNlKShyb3V0ZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9oZWFkbWFuYWdlcmNvbnRleHRzaGFyZWRydW50aW1lLkhlYWRNYW5hZ2VyQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaGVhZE1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9pbWFnZWNvbmZpZ2NvbnRleHRzaGFyZWRydW50aW1lLkltYWdlQ29uZmlnQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHByb2Nlc3MuZW52Ll9fTkVYVF9JTUFHRV9PUFRTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfSk7XG59XG5jb25zdCB3cmFwQXBwID0gKEFwcCk9Pih3cmFwcGVkQXBwUHJvcHMpPT57XG4gICAgICAgIGNvbnN0IGFwcFByb3BzID0ge1xuICAgICAgICAgICAgLi4ud3JhcHBlZEFwcFByb3BzLFxuICAgICAgICAgICAgQ29tcG9uZW50OiBDYWNoZWRDb21wb25lbnQsXG4gICAgICAgICAgICBlcnI6IGluaXRpYWxEYXRhLmVycixcbiAgICAgICAgICAgIHJvdXRlclxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShBcHBDb250YWluZXIsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiByZW5kZXJBcHAoQXBwLCBhcHBQcm9wcylcbiAgICAgICAgfSk7XG4gICAgfTtcbi8vIFRoaXMgbWV0aG9kIGhhbmRsZXMgYWxsIHJ1bnRpbWUgYW5kIGRlYnVnIGVycm9ycy5cbi8vIDQwNCBhbmQgNTAwIGVycm9ycyBhcmUgc3BlY2lhbCBraW5kIG9mIGVycm9yc1xuLy8gYW5kIHRoZXkgYXJlIHN0aWxsIGhhbmRsZSB2aWEgdGhlIG1haW4gcmVuZGVyIG1ldGhvZC5cbmZ1bmN0aW9uIHJlbmRlckVycm9yKHJlbmRlckVycm9yUHJvcHMpIHtcbiAgICBsZXQgeyBBcHAsIGVyciB9ID0gcmVuZGVyRXJyb3JQcm9wcztcbiAgICAvLyBJbiBkZXZlbG9wbWVudCBydW50aW1lIGVycm9ycyBhcmUgY2F1Z2h0IGJ5IG91ciBvdmVybGF5XG4gICAgLy8gSW4gcHJvZHVjdGlvbiB3ZSBjYXRjaCBydW50aW1lIGVycm9ycyB1c2luZyBjb21wb25lbnREaWRDYXRjaCB3aGljaCB3aWxsIHRyaWdnZXIgcmVuZGVyRXJyb3JcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIC8vIEEgTmV4dC5qcyByZW5kZXJpbmcgcnVudGltZSBlcnJvciBpcyBhbHdheXMgdW5yZWNvdmVyYWJsZVxuICAgICAgICAvLyBGSVhNRTogbGV0J3MgbWFrZSB0aGlzIHJlY292ZXJhYmxlIChlcnJvciBpbiBHSVAgY2xpZW50LXRyYW5zaXRpb24pXG4gICAgICAgIGRldkNsaWVudC5vblVucmVjb3ZlcmFibGVFcnJvcigpO1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHJlbmRlciBhbiBlbXB0eSA8QXBwPiBzbyB0aGF0IHRoZSBgPFJlYWN0RGV2T3ZlcmxheT5gIGNhblxuICAgICAgICAvLyByZW5kZXIgaXRzZWxmLlxuICAgICAgICAvLyBUT0RPOiBGaXggZGlzYWJsZWQgZXNsaW50IHJ1bGVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICByZXR1cm4gZG9SZW5kZXIoe1xuICAgICAgICAgICAgQXBwOiAoKT0+bnVsbCxcbiAgICAgICAgICAgIHByb3BzOiB7fSxcbiAgICAgICAgICAgIENvbXBvbmVudDogKCk9Pm51bGwsXG4gICAgICAgICAgICBzdHlsZVNoZWV0czogW11cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB3ZSBsb2cgdGhlIGVycm9yIHRvIHRoZSBjb25zb2xlLCBvdGhlcndpc2UgdXNlcnMgY2FuJ3QgdHJhY2sgZG93biBpc3N1ZXMuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIGNvbnNvbGUuZXJyb3IoXCJBIGNsaWVudC1zaWRlIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQsIHNlZSBoZXJlIGZvciBtb3JlIGluZm86IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2NsaWVudC1zaWRlLWV4Y2VwdGlvbi1vY2N1cnJlZFwiKTtcbiAgICByZXR1cm4gcGFnZUxvYWRlci5sb2FkUGFnZShcIi9fZXJyb3JcIikudGhlbigocGFyYW0pPT57XG4gICAgICAgIGxldCB7IHBhZ2U6IEVycm9yQ29tcG9uZW50LCBzdHlsZVNoZWV0cyB9ID0gcGFyYW07XG4gICAgICAgIHJldHVybiAobGFzdEFwcFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBsYXN0QXBwUHJvcHMuQ29tcG9uZW50KSA9PT0gRXJyb3JDb21wb25lbnQgPyBpbXBvcnQoXCIuLi9wYWdlcy9fZXJyb3JcIikudGhlbigoZXJyb3JNb2R1bGUpPT57XG4gICAgICAgICAgICByZXR1cm4gaW1wb3J0KFwiLi4vcGFnZXMvX2FwcFwiKS50aGVuKChhcHBNb2R1bGUpPT57XG4gICAgICAgICAgICAgICAgQXBwID0gYXBwTW9kdWxlLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgcmVuZGVyRXJyb3JQcm9wcy5BcHAgPSBBcHA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTW9kdWxlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLnRoZW4oKG0pPT4oe1xuICAgICAgICAgICAgICAgIEVycm9yQ29tcG9uZW50OiBtLmRlZmF1bHQsXG4gICAgICAgICAgICAgICAgc3R5bGVTaGVldHM6IFtdXG4gICAgICAgICAgICB9KSkgOiB7XG4gICAgICAgICAgICBFcnJvckNvbXBvbmVudCxcbiAgICAgICAgICAgIHN0eWxlU2hlZXRzXG4gICAgICAgIH07XG4gICAgfSkudGhlbigocGFyYW0pPT57XG4gICAgICAgIGxldCB7IEVycm9yQ29tcG9uZW50LCBzdHlsZVNoZWV0cyB9ID0gcGFyYW07XG4gICAgICAgIHZhciBfcmVuZGVyRXJyb3JQcm9wc19wcm9wcztcbiAgICAgICAgLy8gSW4gcHJvZHVjdGlvbiB3ZSBkbyBhIG5vcm1hbCByZW5kZXIgd2l0aCB0aGUgYEVycm9yQ29tcG9uZW50YCBhcyBjb21wb25lbnQuXG4gICAgICAgIC8vIElmIHdlJ3ZlIGdvdHRlbiBoZXJlIHVwb24gaW5pdGlhbCByZW5kZXIsIHdlIGNhbiB1c2UgdGhlIHByb3BzIGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGNhbGwgYGdldEluaXRpYWxQcm9wc2Agb24gYEFwcGAgYmVmb3JlIG1vdW50aW5nLlxuICAgICAgICBjb25zdCBBcHBUcmVlID0gd3JhcEFwcChBcHApO1xuICAgICAgICBjb25zdCBhcHBDdHggPSB7XG4gICAgICAgICAgICBDb21wb25lbnQ6IEVycm9yQ29tcG9uZW50LFxuICAgICAgICAgICAgQXBwVHJlZSxcbiAgICAgICAgICAgIHJvdXRlcixcbiAgICAgICAgICAgIGN0eDoge1xuICAgICAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgICAgICBwYXRobmFtZTogaW5pdGlhbERhdGEucGFnZSxcbiAgICAgICAgICAgICAgICBxdWVyeTogaW5pdGlhbERhdGEucXVlcnksXG4gICAgICAgICAgICAgICAgYXNQYXRoLFxuICAgICAgICAgICAgICAgIEFwcFRyZWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgoKF9yZW5kZXJFcnJvclByb3BzX3Byb3BzID0gcmVuZGVyRXJyb3JQcm9wcy5wcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZW5kZXJFcnJvclByb3BzX3Byb3BzLmVycikgPyByZW5kZXJFcnJvclByb3BzLnByb3BzIDogKDAsIF91dGlscy5sb2FkR2V0SW5pdGlhbFByb3BzKShBcHAsIGFwcEN0eCkpLnRoZW4oKGluaXRQcm9wcyk9Pi8vIFRPRE86IEZpeCBkaXNhYmxlZCBlc2xpbnQgcnVsZVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgZG9SZW5kZXIoe1xuICAgICAgICAgICAgICAgIC4uLnJlbmRlckVycm9yUHJvcHMsXG4gICAgICAgICAgICAgICAgZXJyLFxuICAgICAgICAgICAgICAgIENvbXBvbmVudDogRXJyb3JDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgc3R5bGVTaGVldHMsXG4gICAgICAgICAgICAgICAgcHJvcHM6IGluaXRQcm9wc1xuICAgICAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuLy8gRHVtbXkgY29tcG9uZW50IHRoYXQgd2UgcmVuZGVyIGFzIGEgY2hpbGQgb2YgUm9vdCBzbyB0aGF0IHdlIGNhblxuLy8gdG9nZ2xlIHRoZSBjb3JyZWN0IHN0eWxlcyBiZWZvcmUgdGhlIHBhZ2UgaXMgcmVuZGVyZWQuXG5mdW5jdGlvbiBIZWFkKHBhcmFtKSB7XG4gICAgbGV0IHsgY2FsbGJhY2sgfSA9IHBhcmFtO1xuICAgIC8vIFdlIHVzZSBgdXNlTGF5b3V0RWZmZWN0YCB0byBndWFyYW50ZWUgdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkXG4gICAgLy8gYXMgc29vbiBhcyBSZWFjdCBmbHVzaGVzIHRoZSB1cGRhdGUuXG4gICAgX3JlYWN0LmRlZmF1bHQudXNlTGF5b3V0RWZmZWN0KCgpPT5jYWxsYmFjaygpLCBbXG4gICAgICAgIGNhbGxiYWNrXG4gICAgXSk7XG4gICAgcmV0dXJuIG51bGw7XG59XG5jb25zdCBwZXJmb3JtYW5jZU1hcmtzID0ge1xuICAgIG5hdmlnYXRpb25TdGFydDogXCJuYXZpZ2F0aW9uU3RhcnRcIixcbiAgICBiZWZvcmVSZW5kZXI6IFwiYmVmb3JlUmVuZGVyXCIsXG4gICAgYWZ0ZXJSZW5kZXI6IFwiYWZ0ZXJSZW5kZXJcIixcbiAgICBhZnRlckh5ZHJhdGU6IFwiYWZ0ZXJIeWRyYXRlXCIsXG4gICAgcm91dGVDaGFuZ2U6IFwicm91dGVDaGFuZ2VcIlxufTtcbmNvbnN0IHBlcmZvcm1hbmNlTWVhc3VyZXMgPSB7XG4gICAgaHlkcmF0aW9uOiBcIk5leHQuanMtaHlkcmF0aW9uXCIsXG4gICAgYmVmb3JlSHlkcmF0aW9uOiBcIk5leHQuanMtYmVmb3JlLWh5ZHJhdGlvblwiLFxuICAgIHJvdXRlQ2hhbmdlVG9SZW5kZXI6IFwiTmV4dC5qcy1yb3V0ZS1jaGFuZ2UtdG8tcmVuZGVyXCIsXG4gICAgcmVuZGVyOiBcIk5leHQuanMtcmVuZGVyXCJcbn07XG5sZXQgcmVhY3RSb290ID0gbnVsbDtcbi8vIE9uIGluaXRpYWwgcmVuZGVyIGEgaHlkcmF0ZSBzaG91bGQgYWx3YXlzIGhhcHBlblxubGV0IHNob3VsZEh5ZHJhdGUgPSB0cnVlO1xuZnVuY3Rpb24gY2xlYXJNYXJrcygpIHtcbiAgICBbXG4gICAgICAgIHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyLFxuICAgICAgICBwZXJmb3JtYW5jZU1hcmtzLmFmdGVySHlkcmF0ZSxcbiAgICAgICAgcGVyZm9ybWFuY2VNYXJrcy5hZnRlclJlbmRlcixcbiAgICAgICAgcGVyZm9ybWFuY2VNYXJrcy5yb3V0ZUNoYW5nZVxuICAgIF0uZm9yRWFjaCgobWFyayk9PnBlcmZvcm1hbmNlLmNsZWFyTWFya3MobWFyaykpO1xufVxuZnVuY3Rpb24gbWFya0h5ZHJhdGVDb21wbGV0ZSgpIHtcbiAgICBpZiAoIV91dGlscy5TVCkgcmV0dXJuO1xuICAgIHBlcmZvcm1hbmNlLm1hcmsocGVyZm9ybWFuY2VNYXJrcy5hZnRlckh5ZHJhdGUpIC8vIG1hcmsgZW5kIG9mIGh5ZHJhdGlvblxuICAgIDtcbiAgICBjb25zdCBoYXNCZWZvcmVSZW5kZXJNYXJrID0gcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZShwZXJmb3JtYW5jZU1hcmtzLmJlZm9yZVJlbmRlciwgXCJtYXJrXCIpLmxlbmd0aDtcbiAgICBpZiAoaGFzQmVmb3JlUmVuZGVyTWFyaykge1xuICAgICAgICBjb25zdCBiZWZvcmVIeWRyYXRpb25NZWFzdXJlID0gcGVyZm9ybWFuY2UubWVhc3VyZShwZXJmb3JtYW5jZU1lYXN1cmVzLmJlZm9yZUh5ZHJhdGlvbiwgcGVyZm9ybWFuY2VNYXJrcy5uYXZpZ2F0aW9uU3RhcnQsIHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyKTtcbiAgICAgICAgY29uc3QgaHlkcmF0aW9uTWVhc3VyZSA9IHBlcmZvcm1hbmNlLm1lYXN1cmUocGVyZm9ybWFuY2VNZWFzdXJlcy5oeWRyYXRpb24sIHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyLCBwZXJmb3JtYW5jZU1hcmtzLmFmdGVySHlkcmF0ZSk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiICYmIC8vIE9sZCB2ZXJzaW9ucyBvZiBTYWZhcmkgZG9uJ3QgcmV0dXJuIGBQZXJmb3JtYW5jZU1lYXN1cmVgcyBmcm9tIGBwZXJmb3JtYW5jZS5tZWFzdXJlKClgXG4gICAgICAgIGJlZm9yZUh5ZHJhdGlvbk1lYXN1cmUgIT09IHVuZGVmaW5lZCAmJiBoeWRyYXRpb25NZWFzdXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIF90cmFjZXIuZGVmYXVsdC5zdGFydFNwYW4oXCJuYXZpZ2F0aW9uLXRvLWh5ZHJhdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgYmVmb3JlSHlkcmF0aW9uTWVhc3VyZS5zdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBsb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5lbmQocGVyZm9ybWFuY2UudGltZU9yaWdpbiArIGh5ZHJhdGlvbk1lYXN1cmUuc3RhcnRUaW1lICsgaHlkcmF0aW9uTWVhc3VyZS5kdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKG9uUGVyZkVudHJ5KSB7XG4gICAgICAgIHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUocGVyZm9ybWFuY2VNZWFzdXJlcy5oeWRyYXRpb24pLmZvckVhY2gob25QZXJmRW50cnkpO1xuICAgIH1cbiAgICBjbGVhck1hcmtzKCk7XG59XG5mdW5jdGlvbiBtYXJrUmVuZGVyQ29tcGxldGUoKSB7XG4gICAgaWYgKCFfdXRpbHMuU1QpIHJldHVybjtcbiAgICBwZXJmb3JtYW5jZS5tYXJrKHBlcmZvcm1hbmNlTWFya3MuYWZ0ZXJSZW5kZXIpIC8vIG1hcmsgZW5kIG9mIHJlbmRlclxuICAgIDtcbiAgICBjb25zdCBuYXZTdGFydEVudHJpZXMgPSBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKHBlcmZvcm1hbmNlTWFya3Mucm91dGVDaGFuZ2UsIFwibWFya1wiKTtcbiAgICBpZiAoIW5hdlN0YXJ0RW50cmllcy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBoYXNCZWZvcmVSZW5kZXJNYXJrID0gcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZShwZXJmb3JtYW5jZU1hcmtzLmJlZm9yZVJlbmRlciwgXCJtYXJrXCIpLmxlbmd0aDtcbiAgICBpZiAoaGFzQmVmb3JlUmVuZGVyTWFyaykge1xuICAgICAgICBwZXJmb3JtYW5jZS5tZWFzdXJlKHBlcmZvcm1hbmNlTWVhc3VyZXMucm91dGVDaGFuZ2VUb1JlbmRlciwgbmF2U3RhcnRFbnRyaWVzWzBdLm5hbWUsIHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyKTtcbiAgICAgICAgcGVyZm9ybWFuY2UubWVhc3VyZShwZXJmb3JtYW5jZU1lYXN1cmVzLnJlbmRlciwgcGVyZm9ybWFuY2VNYXJrcy5iZWZvcmVSZW5kZXIsIHBlcmZvcm1hbmNlTWFya3MuYWZ0ZXJSZW5kZXIpO1xuICAgICAgICBpZiAob25QZXJmRW50cnkpIHtcbiAgICAgICAgICAgIHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUocGVyZm9ybWFuY2VNZWFzdXJlcy5yZW5kZXIpLmZvckVhY2gob25QZXJmRW50cnkpO1xuICAgICAgICAgICAgcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZShwZXJmb3JtYW5jZU1lYXN1cmVzLnJvdXRlQ2hhbmdlVG9SZW5kZXIpLmZvckVhY2gob25QZXJmRW50cnkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsZWFyTWFya3MoKTtcbiAgICBbXG4gICAgICAgIHBlcmZvcm1hbmNlTWVhc3VyZXMucm91dGVDaGFuZ2VUb1JlbmRlcixcbiAgICAgICAgcGVyZm9ybWFuY2VNZWFzdXJlcy5yZW5kZXJcbiAgICBdLmZvckVhY2goKG1lYXN1cmUpPT5wZXJmb3JtYW5jZS5jbGVhck1lYXN1cmVzKG1lYXN1cmUpKTtcbn1cbmZ1bmN0aW9uIHJlbmRlclJlYWN0RWxlbWVudChkb21FbCwgZm4pIHtcbiAgICAvLyBtYXJrIHN0YXJ0IG9mIGh5ZHJhdGUvcmVuZGVyXG4gICAgaWYgKF91dGlscy5TVCkge1xuICAgICAgICBwZXJmb3JtYW5jZS5tYXJrKHBlcmZvcm1hbmNlTWFya3MuYmVmb3JlUmVuZGVyKTtcbiAgICB9XG4gICAgY29uc3QgcmVhY3RFbCA9IGZuKHNob3VsZEh5ZHJhdGUgPyBtYXJrSHlkcmF0ZUNvbXBsZXRlIDogbWFya1JlbmRlckNvbXBsZXRlKTtcbiAgICBpZiAoIXJlYWN0Um9vdCkge1xuICAgICAgICAvLyBVbmxpa2Ugd2l0aCBjcmVhdGVSb290LCB5b3UgZG9uJ3QgbmVlZCBhIHNlcGFyYXRlIHJvb3QucmVuZGVyKCkgY2FsbCBoZXJlXG4gICAgICAgIHJlYWN0Um9vdCA9IF9jbGllbnQuZGVmYXVsdC5oeWRyYXRlUm9vdChkb21FbCwgcmVhY3RFbCwge1xuICAgICAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yOiBfb25yZWNvdmVyYWJsZWVycm9yLmRlZmF1bHRcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBzaG91bGRIeWRyYXRlIHZhcmlhYmxlIHdoZW4gUmVhY3QgMTggaXMgc3RhYmxlIGFzIGl0IGNhbiBkZXBlbmQgb24gYHJlYWN0Um9vdGAgZXhpc3RpbmdcbiAgICAgICAgc2hvdWxkSHlkcmF0ZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0VHJhbnNpdGlvbiA9IF9yZWFjdC5kZWZhdWx0LnN0YXJ0VHJhbnNpdGlvbjtcbiAgICAgICAgc3RhcnRUcmFuc2l0aW9uKCgpPT57XG4gICAgICAgICAgICByZWFjdFJvb3QucmVuZGVyKHJlYWN0RWwpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBSb290KHBhcmFtKSB7XG4gICAgbGV0IHsgY2FsbGJhY2tzLCBjaGlsZHJlbiB9ID0gcGFyYW07XG4gICAgLy8gV2UgdXNlIGB1c2VMYXlvdXRFZmZlY3RgIHRvIGd1YXJhbnRlZSB0aGUgY2FsbGJhY2tzIGFyZSBleGVjdXRlZFxuICAgIC8vIGFzIHNvb24gYXMgUmVhY3QgZmx1c2hlcyB0aGUgdXBkYXRlXG4gICAgX3JlYWN0LmRlZmF1bHQudXNlTGF5b3V0RWZmZWN0KCgpPT5jYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2spPT5jYWxsYmFjaygpKSwgW1xuICAgICAgICBjYWxsYmFja3NcbiAgICBdKTtcbiAgICAvLyBXZSBzaG91bGQgYXNrIHRvIG1lYXN1cmUgdGhlIFdlYiBWaXRhbHMgYWZ0ZXIgcmVuZGVyaW5nIGNvbXBsZXRlcyBzbyB3ZVxuICAgIC8vIGRvbid0IGNhdXNlIGFueSBoeWRyYXRpb24gZGVsYXk6XG4gICAgX3JlYWN0LmRlZmF1bHQudXNlRWZmZWN0KCgpPT57XG4gICAgICAgICgwLCBfcGVyZm9ybWFuY2VyZWxheWVyLmRlZmF1bHQpKG9uUGVyZkVudHJ5KTtcbiAgICB9LCBbXSk7XG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgICAgIF9yZWFjdC5kZWZhdWx0LnVzZUVmZmVjdCgoKT0+e1xuICAgICAgICAgICAgd2luZG93Ll9fTkVYVF9IWURSQVRFRCA9IHRydWU7XG4gICAgICAgICAgICBpZiAod2luZG93Ll9fTkVYVF9IWURSQVRFRF9DQikge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5fX05FWFRfSFlEUkFURURfQ0IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW47XG59XG5mdW5jdGlvbiBkb1JlbmRlcihpbnB1dCkge1xuICAgIGxldCB7IEFwcCwgQ29tcG9uZW50LCBwcm9wcywgZXJyIH0gPSBpbnB1dDtcbiAgICBsZXQgc3R5bGVTaGVldHMgPSBcImluaXRpYWxcIiBpbiBpbnB1dCA/IHVuZGVmaW5lZCA6IGlucHV0LnN0eWxlU2hlZXRzO1xuICAgIENvbXBvbmVudCA9IENvbXBvbmVudCB8fCBsYXN0QXBwUHJvcHMuQ29tcG9uZW50O1xuICAgIHByb3BzID0gcHJvcHMgfHwgbGFzdEFwcFByb3BzLnByb3BzO1xuICAgIGNvbnN0IGFwcFByb3BzID0ge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBlcnIsXG4gICAgICAgIHJvdXRlclxuICAgIH07XG4gICAgLy8gbGFzdEFwcFByb3BzIGhhcyB0byBiZSBzZXQgYmVmb3JlIFJlYWN0RG9tLnJlbmRlciB0byBhY2NvdW50IGZvciBSZWFjdERvbSB0aHJvd2luZyBhbiBlcnJvci5cbiAgICBsYXN0QXBwUHJvcHMgPSBhcHBQcm9wcztcbiAgICBsZXQgY2FuY2VsZWQgPSBmYWxzZTtcbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG4gICAgY29uc3QgcmVuZGVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgIGlmIChsYXN0UmVuZGVyUmVqZWN0KSB7XG4gICAgICAgICAgICBsYXN0UmVuZGVyUmVqZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZVByb21pc2UgPSAoKT0+e1xuICAgICAgICAgICAgbGFzdFJlbmRlclJlamVjdCA9IG51bGw7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH07XG4gICAgICAgIGxhc3RSZW5kZXJSZWplY3QgPSAoKT0+e1xuICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgICAgbGFzdFJlbmRlclJlamVjdCA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcIkNhbmNlbCByZW5kZXJpbmcgcm91dGVcIik7XG4gICAgICAgICAgICBlcnJvci5jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGhhcyBhIHJldHVybiB0eXBlIHRvIGVuc3VyZSBpdCBkb2Vzbid0IHN0YXJ0IHJldHVybmluZyBhXG4gICAgLy8gUHJvbWlzZS4gSXQgc2hvdWxkIHJlbWFpbiBzeW5jaHJvbm91cy5cbiAgICBmdW5jdGlvbiBvblN0YXJ0KCkge1xuICAgICAgICBpZiAoIXN0eWxlU2hlZXRzIHx8IC8vIFdlIHVzZSBgc3R5bGUtbG9hZGVyYCBpbiBkZXZlbG9wbWVudCwgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZ1xuICAgICAgICAvLyB1bmxlc3Mgd2UncmUgaW4gcHJvZHVjdGlvbjpcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudFN0eWxlVGFncyA9IGxvb3NlVG9BcnJheShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1uLWhyZWZdXCIpKTtcbiAgICAgICAgY29uc3QgY3VycmVudEhyZWZzID0gbmV3IFNldChjdXJyZW50U3R5bGVUYWdzLm1hcCgodGFnKT0+dGFnLmdldEF0dHJpYnV0ZShcImRhdGEtbi1ocmVmXCIpKSk7XG4gICAgICAgIGNvbnN0IG5vc2NyaXB0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm5vc2NyaXB0W2RhdGEtbi1jc3NdXCIpO1xuICAgICAgICBjb25zdCBub25jZSA9IG5vc2NyaXB0ID09IG51bGwgPyB2b2lkIDAgOiBub3NjcmlwdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW4tY3NzXCIpO1xuICAgICAgICBzdHlsZVNoZWV0cy5mb3JFYWNoKChwYXJhbSk9PntcbiAgICAgICAgICAgIGxldCB7IGhyZWYsIHRleHQgfSA9IHBhcmFtO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50SHJlZnMuaGFzKGhyZWYpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICAgICAgICAgICAgc3R5bGVUYWcuc2V0QXR0cmlidXRlKFwiZGF0YS1uLWhyZWZcIiwgaHJlZik7XG4gICAgICAgICAgICAgICAgc3R5bGVUYWcuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgXCJ4XCIpO1xuICAgICAgICAgICAgICAgIGlmIChub25jZSkge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZVRhZy5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVUYWcpO1xuICAgICAgICAgICAgICAgIHN0eWxlVGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbkhlYWRDb21taXQoKSB7XG4gICAgICAgIGlmICgvLyBXZSB1c2UgYHN0eWxlLWxvYWRlcmAgaW4gZGV2ZWxvcG1lbnQsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgICAgICAgLy8gdW5sZXNzIHdlJ3JlIGluIHByb2R1Y3Rpb246XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiAmJiAvLyBXZSBjYW4gc2tpcCB0aGlzIGR1cmluZyBoeWRyYXRpb24uIFJ1bm5pbmcgaXQgd29udCBjYXVzZSBhbnkgaGFybSwgYnV0XG4gICAgICAgIC8vIHdlIG1heSBhcyB3ZWxsIHNhdmUgdGhlIENQVSBjeWNsZXM6XG4gICAgICAgIHN0eWxlU2hlZXRzICYmIC8vIEVuc3VyZSB0aGlzIHJlbmRlciB3YXMgbm90IGNhbmNlbGVkXG4gICAgICAgICFjYW5jZWxlZCkge1xuICAgICAgICAgICAgY29uc3QgZGVzaXJlZEhyZWZzID0gbmV3IFNldChzdHlsZVNoZWV0cy5tYXAoKHMpPT5zLmhyZWYpKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdHlsZVRhZ3MgPSBsb29zZVRvQXJyYXkoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtbi1ocmVmXVwiKSk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SHJlZnMgPSBjdXJyZW50U3R5bGVUYWdzLm1hcCgodGFnKT0+dGFnLmdldEF0dHJpYnV0ZShcImRhdGEtbi1ocmVmXCIpKTtcbiAgICAgICAgICAgIC8vIFRvZ2dsZSBgPHN0eWxlPmAgdGFncyBvbiBvciBvZmYgZGVwZW5kaW5nIG9uIGlmIHRoZXkncmUgbmVlZGVkOlxuICAgICAgICAgICAgZm9yKGxldCBpZHggPSAwOyBpZHggPCBjdXJyZW50SHJlZnMubGVuZ3RoOyArK2lkeCl7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2lyZWRIcmVmcy5oYXMoY3VycmVudEhyZWZzW2lkeF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdHlsZVRhZ3NbaWR4XS5yZW1vdmVBdHRyaWJ1dGUoXCJtZWRpYVwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3R5bGVUYWdzW2lkeF0uc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgXCJ4XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlb3JkZXIgc3R5bGVzIGludG8gaW50ZW5kZWQgb3JkZXI6XG4gICAgICAgICAgICBsZXQgcmVmZXJlbmNlTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJub3NjcmlwdFtkYXRhLW4tY3NzXVwiKTtcbiAgICAgICAgICAgIGlmICgvLyBUaGlzIHNob3VsZCBiZSBhbiBpbnZhcmlhbnQ6XG4gICAgICAgICAgICByZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVTaGVldHMuZm9yRWFjaCgocGFyYW0pPT57XG4gICAgICAgICAgICAgICAgICAgIGxldCB7IGhyZWYgfSA9IHBhcmFtO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRUYWcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzdHlsZVtkYXRhLW4taHJlZj1cIicgKyBocmVmICsgJ1wiXScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoLy8gVGhpcyBzaG91bGQgYmUgYW4gaW52YXJpYW50OlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRUYWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGFyZ2V0VGFnLCByZWZlcmVuY2VOb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUgPSB0YXJnZXRUYWc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZpbmFsbHksIGNsZWFuIHVwIHNlcnZlciByZW5kZXJlZCBzdHlsZXNoZWV0czpcbiAgICAgICAgICAgIGxvb3NlVG9BcnJheShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwibGlua1tkYXRhLW4tcF1cIikpLmZvckVhY2goKGVsKT0+e1xuICAgICAgICAgICAgICAgIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0LnNjcm9sbCkge1xuICAgICAgICAgICAgY29uc3QgeyB4LCB5IH0gPSBpbnB1dC5zY3JvbGw7XG4gICAgICAgICAgICAoMCwgX2hhbmRsZXNtb290aHNjcm9sbC5oYW5kbGVTbW9vdGhTY3JvbGwpKCgpPT57XG4gICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHgsIHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gb25Sb290Q29tbWl0KCkge1xuICAgICAgICByZXNvbHZlUHJvbWlzZSgpO1xuICAgIH1cbiAgICBvblN0YXJ0KCk7XG4gICAgY29uc3QgZWxlbSA9IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9qc3hydW50aW1lLkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKEhlYWQsIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjazogb25IZWFkQ29tbWl0XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKEFwcENvbnRhaW5lciwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckFwcChBcHAsIGFwcFByb3BzKSxcbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfcG9ydGFsLlBvcnRhbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJuZXh0LXJvdXRlLWFubm91bmNlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX3JvdXRlYW5ub3VuY2VyLlJvdXRlQW5ub3VuY2VyLCB7fSlcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG4gICAgLy8gV2UgY2F0Y2ggcnVudGltZSBlcnJvcnMgdXNpbmcgY29tcG9uZW50RGlkQ2F0Y2ggd2hpY2ggd2lsbCB0cmlnZ2VyIHJlbmRlckVycm9yXG4gICAgcmVuZGVyUmVhY3RFbGVtZW50KGFwcEVsZW1lbnQsIChjYWxsYmFjayk9Pi8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoUm9vdCwge1xuICAgICAgICAgICAgY2FsbGJhY2tzOiBbXG4gICAgICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgb25Sb290Q29tbWl0XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgY2hpbGRyZW46IHByb2Nlc3MuZW52Ll9fTkVYVF9TVFJJQ1RfTU9ERSA/IC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX3JlYWN0LmRlZmF1bHQuU3RyaWN0TW9kZSwge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBlbGVtXG4gICAgICAgICAgICB9KSA6IGVsZW1cbiAgICAgICAgfSkpO1xuICAgIHJldHVybiByZW5kZXJQcm9taXNlO1xufVxuYXN5bmMgZnVuY3Rpb24gcmVuZGVyKHJlbmRlcmluZ1Byb3BzKSB7XG4gICAgaWYgKHJlbmRlcmluZ1Byb3BzLmVycikge1xuICAgICAgICBhd2FpdCByZW5kZXJFcnJvcihyZW5kZXJpbmdQcm9wcyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZG9SZW5kZXIocmVuZGVyaW5nUHJvcHMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCByZW5kZXJFcnIgPSAoMCwgX2lzZXJyb3IuZ2V0UHJvcGVyRXJyb3IpKGVycik7XG4gICAgICAgIC8vIGJ1YmJsZSB1cCBjYW5jZWxhdGlvbiBlcnJvcnNcbiAgICAgICAgaWYgKHJlbmRlckVyci5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRocm93IHJlbmRlckVycjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICAgICAgLy8gRW5zdXJlIHRoaXMgZXJyb3IgaXMgZGlzcGxheWVkIGluIHRoZSBvdmVybGF5IGluIGRldmVsb3BtZW50XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVuZGVyRXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcmVuZGVyRXJyb3Ioe1xuICAgICAgICAgICAgLi4ucmVuZGVyaW5nUHJvcHMsXG4gICAgICAgICAgICBlcnI6IHJlbmRlckVyclxuICAgICAgICB9KTtcbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBoeWRyYXRlKG9wdHMpIHtcbiAgICBsZXQgaW5pdGlhbEVyciA9IGluaXRpYWxEYXRhLmVycjtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBhcHBFbnRyeXBvaW50ID0gYXdhaXQgcGFnZUxvYWRlci5yb3V0ZUxvYWRlci53aGVuRW50cnlwb2ludChcIi9fYXBwXCIpO1xuICAgICAgICBpZiAoXCJlcnJvclwiIGluIGFwcEVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIHRocm93IGFwcEVudHJ5cG9pbnQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBjb21wb25lbnQ6IGFwcCwgZXhwb3J0czogbW9kIH0gPSBhcHBFbnRyeXBvaW50O1xuICAgICAgICBDYWNoZWRBcHAgPSBhcHA7XG4gICAgICAgIGlmIChtb2QgJiYgbW9kLnJlcG9ydFdlYlZpdGFscykge1xuICAgICAgICAgICAgb25QZXJmRW50cnkgPSAocGFyYW0pPT57XG4gICAgICAgICAgICAgICAgbGV0IHsgaWQsIG5hbWUsIHN0YXJ0VGltZSwgdmFsdWUsIGR1cmF0aW9uLCBlbnRyeVR5cGUsIGVudHJpZXMsIGF0dHJpYnV0aW9uIH0gPSBwYXJhbTtcbiAgICAgICAgICAgICAgICAvLyBDb21iaW5lcyB0aW1lc3RhbXAgd2l0aCByYW5kb20gbnVtYmVyIGZvciB1bmlxdWUgSURcbiAgICAgICAgICAgICAgICBjb25zdCB1bmlxdWVJRCA9IERhdGUubm93KCkgKyBcIi1cIiArIChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoOWUxMiAtIDEpKSArIDFlMTIpO1xuICAgICAgICAgICAgICAgIGxldCBwZXJmU3RhcnRFbnRyeTtcbiAgICAgICAgICAgICAgICBpZiAoZW50cmllcyAmJiBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBwZXJmU3RhcnRFbnRyeSA9IGVudHJpZXNbMF0uc3RhcnRUaW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB3ZWJWaXRhbHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBpZCB8fCB1bmlxdWVJRCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBzdGFydFRpbWUgfHwgcGVyZlN0YXJ0RW50cnksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSA9PSBudWxsID8gZHVyYXRpb24gOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVudHJ5VHlwZSA9PT0gXCJtYXJrXCIgfHwgZW50cnlUeXBlID09PSBcIm1lYXN1cmVcIiA/IFwiY3VzdG9tXCIgOiBcIndlYi12aXRhbFwiXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgd2ViVml0YWxzLmF0dHJpYnV0aW9uID0gYXR0cmlidXRpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1vZC5yZXBvcnRXZWJWaXRhbHMod2ViVml0YWxzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFnZUVudHJ5cG9pbnQgPSAvLyBUaGUgZGV2IHNlcnZlciBmYWlscyB0byBzZXJ2ZSBzY3JpcHQgYXNzZXRzIHdoZW4gdGhlcmUncyBhIGh5ZHJhdGlvblxuICAgICAgICAvLyBlcnJvciwgc28gd2UgbmVlZCB0byBza2lwIHdhaXRpbmcgZm9yIHRoZSBlbnRyeXBvaW50LlxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiICYmIGluaXRpYWxEYXRhLmVyciA/IHtcbiAgICAgICAgICAgIGVycm9yOiBpbml0aWFsRGF0YS5lcnJcbiAgICAgICAgfSA6IGF3YWl0IHBhZ2VMb2FkZXIucm91dGVMb2FkZXIud2hlbkVudHJ5cG9pbnQoaW5pdGlhbERhdGEucGFnZSk7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gcGFnZUVudHJ5cG9pbnQpIHtcbiAgICAgICAgICAgIHRocm93IHBhZ2VFbnRyeXBvaW50LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIENhY2hlZENvbXBvbmVudCA9IHBhZ2VFbnRyeXBvaW50LmNvbXBvbmVudDtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgY29uc3QgeyBpc1ZhbGlkRWxlbWVudFR5cGUgfSA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXNcIik7XG4gICAgICAgICAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZShDYWNoZWRDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGVmYXVsdCBleHBvcnQgaXMgbm90IGEgUmVhY3QgQ29tcG9uZW50IGluIHBhZ2U6IFwiJyArIGluaXRpYWxEYXRhLnBhZ2UgKyAnXCInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIFRoaXMgY2F0Y2hlcyBlcnJvcnMgbGlrZSB0aHJvd2luZyBpbiB0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlXG4gICAgICAgIGluaXRpYWxFcnIgPSAoMCwgX2lzZXJyb3IuZ2V0UHJvcGVyRXJyb3IpKGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgY29uc3QgeyBnZXRTZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9AbmV4dC9yZWFjdC1kZXYtb3ZlcmxheS9kaXN0L2NsaWVudFwiKTtcbiAgICAgICAgLy8gU2VydmVyLXNpZGUgcnVudGltZSBlcnJvcnMgbmVlZCB0byBiZSByZS10aHJvd24gb24gdGhlIGNsaWVudC1zaWRlIHNvXG4gICAgICAgIC8vIHRoYXQgdGhlIG92ZXJsYXkgaXMgcmVuZGVyZWQuXG4gICAgICAgIGlmIChpbml0aWFsRXJyKSB7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbEVyciA9PT0gaW5pdGlhbERhdGEuZXJyKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBhIG5ldyBlcnJvciBvYmplY3QuIFdlIGB0aHJvd2AgaXQgYmVjYXVzZSBzb21lIGJyb3dzZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIHNldCB0aGUgYHN0YWNrYCB3aGVuIHRocm93biwgYW5kIHdlIHdhbnQgdG8gZW5zdXJlIG91cnMgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdCBvdmVycmlkZGVuIHdoZW4gd2UgcmUtdGhyb3cgaXQgYmVsb3cuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoaW5pdGlhbEVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLm5hbWUgPSBpbml0aWFsRXJyLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnN0YWNrID0gaW5pdGlhbEVyci5zdGFjaztcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZ2V0U2VydmVyRXJyb3IoZXJyb3IsIGluaXRpYWxFcnIuc291cmNlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBpbml0aWFsRXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh3aW5kb3cuX19ORVhUX1BSRUxPQURSRUFEWSkge1xuICAgICAgICBhd2FpdCB3aW5kb3cuX19ORVhUX1BSRUxPQURSRUFEWShpbml0aWFsRGF0YS5keW5hbWljSWRzKTtcbiAgICB9XG4gICAgcm91dGVyID0gKDAsIF9yb3V0ZXIuY3JlYXRlUm91dGVyKShpbml0aWFsRGF0YS5wYWdlLCBpbml0aWFsRGF0YS5xdWVyeSwgYXNQYXRoLCB7XG4gICAgICAgIGluaXRpYWxQcm9wczogaW5pdGlhbERhdGEucHJvcHMsXG4gICAgICAgIHBhZ2VMb2FkZXIsXG4gICAgICAgIEFwcDogQ2FjaGVkQXBwLFxuICAgICAgICBDb21wb25lbnQ6IENhY2hlZENvbXBvbmVudCxcbiAgICAgICAgd3JhcEFwcCxcbiAgICAgICAgZXJyOiBpbml0aWFsRXJyLFxuICAgICAgICBpc0ZhbGxiYWNrOiBCb29sZWFuKGluaXRpYWxEYXRhLmlzRmFsbGJhY2spLFxuICAgICAgICBzdWJzY3JpcHRpb246IChpbmZvLCBBcHAsIHNjcm9sbCk9PnJlbmRlcihPYmplY3QuYXNzaWduKHt9LCBpbmZvLCB7XG4gICAgICAgICAgICAgICAgQXBwLFxuICAgICAgICAgICAgICAgIHNjcm9sbFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICBsb2NhbGU6IGluaXRpYWxEYXRhLmxvY2FsZSxcbiAgICAgICAgbG9jYWxlczogaW5pdGlhbERhdGEubG9jYWxlcyxcbiAgICAgICAgZGVmYXVsdExvY2FsZSxcbiAgICAgICAgZG9tYWluTG9jYWxlczogaW5pdGlhbERhdGEuZG9tYWluTG9jYWxlcyxcbiAgICAgICAgaXNQcmV2aWV3OiBpbml0aWFsRGF0YS5pc1ByZXZpZXdcbiAgICB9KTtcbiAgICBpbml0aWFsTWF0Y2hlc01pZGRsZXdhcmUgPSBhd2FpdCByb3V0ZXIuX2luaXRpYWxNYXRjaGVzTWlkZGxld2FyZVByb21pc2U7XG4gICAgY29uc3QgcmVuZGVyQ3R4ID0ge1xuICAgICAgICBBcHA6IENhY2hlZEFwcCxcbiAgICAgICAgaW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgQ29tcG9uZW50OiBDYWNoZWRDb21wb25lbnQsXG4gICAgICAgIHByb3BzOiBpbml0aWFsRGF0YS5wcm9wcyxcbiAgICAgICAgZXJyOiBpbml0aWFsRXJyXG4gICAgfTtcbiAgICBpZiAob3B0cyA9PSBudWxsID8gdm9pZCAwIDogb3B0cy5iZWZvcmVSZW5kZXIpIHtcbiAgICAgICAgYXdhaXQgb3B0cy5iZWZvcmVSZW5kZXIoKTtcbiAgICB9XG4gICAgcmVuZGVyKHJlbmRlckN0eCk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsInZlcnNpb24iLCJyb3V0ZXIiLCJlbWl0dGVyIiwiaW5pdGlhbGl6ZSIsImh5ZHJhdGUiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3QiLCJfIiwiX2NsaWVudCIsIl9oZWFkbWFuYWdlcmNvbnRleHRzaGFyZWRydW50aW1lIiwiX21pdHQiLCJfcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfaGFuZGxlc21vb3Roc2Nyb2xsIiwiX2lzZHluYW1pYyIsIl9xdWVyeXN0cmluZyIsIl9ydW50aW1lY29uZmlnZXh0ZXJuYWwiLCJfdXRpbHMiLCJfcG9ydGFsIiwiX2hlYWRtYW5hZ2VyIiwiX3BhZ2Vsb2FkZXIiLCJfcGVyZm9ybWFuY2VyZWxheWVyIiwiX3JvdXRlYW5ub3VuY2VyIiwiX3JvdXRlciIsIl9pc2Vycm9yIiwiX2ltYWdlY29uZmlnY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfcmVtb3ZlYmFzZXBhdGgiLCJfaGFzYmFzZXBhdGgiLCJfYXBwcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfYWRhcHRlcnMiLCJfaG9va3NjbGllbnRjb250ZXh0c2hhcmVkcnVudGltZSIsIl9vbnJlY292ZXJhYmxlZXJyb3IiLCJfdHJhY2VyIiwiX3JlcG9ydHRvc29ja2V0IiwiZGVmYXVsdCIsImxvb3NlVG9BcnJheSIsImlucHV0Iiwic2xpY2UiLCJjYWxsIiwiaW5pdGlhbERhdGEiLCJkZWZhdWx0TG9jYWxlIiwidW5kZWZpbmVkIiwiYXNQYXRoIiwicGFnZUxvYWRlciIsImFwcEVsZW1lbnQiLCJoZWFkTWFuYWdlciIsImluaXRpYWxNYXRjaGVzTWlkZGxld2FyZSIsImxhc3RBcHBQcm9wcyIsImxhc3RSZW5kZXJSZWplY3QiLCJkZXZDbGllbnQiLCJDYWNoZWRBcHAiLCJvblBlcmZFbnRyeSIsIkNhY2hlZENvbXBvbmVudCIsIkNvbnRhaW5lciIsIkNvbXBvbmVudCIsImNvbXBvbmVudERpZENhdGNoIiwiY29tcG9uZW50RXJyIiwiaW5mbyIsInByb3BzIiwiZm4iLCJjb21wb25lbnREaWRNb3VudCIsInNjcm9sbFRvSGFzaCIsImlzU3NyIiwiaXNGYWxsYmFjayIsIm5leHRFeHBvcnQiLCJpc0R5bmFtaWNSb3V0ZSIsInBhdGhuYW1lIiwibG9jYXRpb24iLCJzZWFyY2giLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0hBU19SRVdSSVRFUyIsIl9fTl9TU0ciLCJyZXBsYWNlIiwiU3RyaW5nIiwiYXNzaWduIiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInF1ZXJ5IiwiVVJMU2VhcmNoUGFyYW1zIiwiX2giLCJzaGFsbG93IiwiY2F0Y2giLCJlcnIiLCJjYW5jZWxsZWQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJoYXNoIiwic3Vic3RyaW5nIiwiZWwiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwic2V0VGltZW91dCIsInNjcm9sbEludG9WaWV3IiwicmVuZGVyIiwiY2hpbGRyZW4iLCJSZWFjdERldk92ZXJsYXkiLCJqc3giLCJvcHRzIiwib25TcGFuRW5kIiwiSlNPTiIsInBhcnNlIiwidGV4dENvbnRlbnQiLCJ3aW5kb3ciLCJfX05FWFRfREFUQV9fIiwicHJlZml4IiwiYXNzZXRQcmVmaXgiLCJzZWxmIiwiX19uZXh0X3NldF9wdWJsaWNfcGF0aF9fIiwic2V0Q29uZmlnIiwic2VydmVyUnVudGltZUNvbmZpZyIsInB1YmxpY1J1bnRpbWVDb25maWciLCJydW50aW1lQ29uZmlnIiwiZ2V0VVJMIiwiaGFzQmFzZVBhdGgiLCJyZW1vdmVCYXNlUGF0aCIsIl9fTkVYVF9JMThOX1NVUFBPUlQiLCJub3JtYWxpemVMb2NhbGVQYXRoIiwiZGV0ZWN0RG9tYWluTG9jYWxlIiwicGFyc2VSZWxhdGl2ZVVybCIsImZvcm1hdFVybCIsImxvY2FsZXMiLCJwYXJzZWRBcyIsImxvY2FsZVBhdGhSZXN1bHQiLCJkZXRlY3RlZExvY2FsZSIsImxvY2FsZSIsImRldGVjdGVkRG9tYWluIiwiX19ORVhUX0kxOE5fRE9NQUlOUyIsImhvc3RuYW1lIiwic2NyaXB0TG9hZGVyIiwiaW5pdFNjcmlwdExvYWRlciIsImJ1aWxkSWQiLCJyZWdpc3RlciIsInBhcmFtIiwiciIsImYiLCJyb3V0ZUxvYWRlciIsIm9uRW50cnlwb2ludCIsIl9fTkVYVF9QIiwibWFwIiwicCIsInB1c2giLCJnZXRJc1NzciIsInJlbmRlckFwcCIsIkFwcCIsImFwcFByb3BzIiwiQXBwQ29udGFpbmVyIiwiYWRhcHRlZEZvckFwcFJvdXRlciIsInVzZU1lbW8iLCJhZGFwdEZvckFwcFJvdXRlckluc3RhbmNlIiwiX3NlbGZfX19ORVhUX0RBVEFfX19hdXRvRXhwb3J0IiwiZXJyb3IiLCJyZW5kZXJFcnJvciIsImNvbnNvbGUiLCJBcHBSb3V0ZXJDb250ZXh0IiwiUHJvdmlkZXIiLCJTZWFyY2hQYXJhbXNDb250ZXh0IiwiYWRhcHRGb3JTZWFyY2hQYXJhbXMiLCJQYXRobmFtZUNvbnRleHRQcm92aWRlckFkYXB0ZXIiLCJpc0F1dG9FeHBvcnQiLCJhdXRvRXhwb3J0IiwiUGF0aFBhcmFtc0NvbnRleHQiLCJhZGFwdEZvclBhdGhQYXJhbXMiLCJSb3V0ZXJDb250ZXh0IiwibWFrZVB1YmxpY1JvdXRlckluc3RhbmNlIiwiSGVhZE1hbmFnZXJDb250ZXh0IiwiSW1hZ2VDb25maWdDb250ZXh0IiwiX19ORVhUX0lNQUdFX09QVFMiLCJ3cmFwQXBwIiwid3JhcHBlZEFwcFByb3BzIiwicmVuZGVyRXJyb3JQcm9wcyIsIm9uVW5yZWNvdmVyYWJsZUVycm9yIiwiZG9SZW5kZXIiLCJzdHlsZVNoZWV0cyIsImxvYWRQYWdlIiwidGhlbiIsInBhZ2UiLCJFcnJvckNvbXBvbmVudCIsImVycm9yTW9kdWxlIiwiYXBwTW9kdWxlIiwibSIsIl9yZW5kZXJFcnJvclByb3BzX3Byb3BzIiwiQXBwVHJlZSIsImFwcEN0eCIsImN0eCIsIlByb21pc2UiLCJyZXNvbHZlIiwibG9hZEdldEluaXRpYWxQcm9wcyIsImluaXRQcm9wcyIsIkhlYWQiLCJjYWxsYmFjayIsInVzZUxheW91dEVmZmVjdCIsInBlcmZvcm1hbmNlTWFya3MiLCJuYXZpZ2F0aW9uU3RhcnQiLCJiZWZvcmVSZW5kZXIiLCJhZnRlclJlbmRlciIsImFmdGVySHlkcmF0ZSIsInJvdXRlQ2hhbmdlIiwicGVyZm9ybWFuY2VNZWFzdXJlcyIsImh5ZHJhdGlvbiIsImJlZm9yZUh5ZHJhdGlvbiIsInJvdXRlQ2hhbmdlVG9SZW5kZXIiLCJyZWFjdFJvb3QiLCJzaG91bGRIeWRyYXRlIiwiY2xlYXJNYXJrcyIsImZvckVhY2giLCJtYXJrIiwicGVyZm9ybWFuY2UiLCJtYXJrSHlkcmF0ZUNvbXBsZXRlIiwiU1QiLCJoYXNCZWZvcmVSZW5kZXJNYXJrIiwiZ2V0RW50cmllc0J5TmFtZSIsImxlbmd0aCIsImJlZm9yZUh5ZHJhdGlvbk1lYXN1cmUiLCJtZWFzdXJlIiwiaHlkcmF0aW9uTWVhc3VyZSIsInN0YXJ0U3BhbiIsInN0YXJ0VGltZSIsInRpbWVPcmlnaW4iLCJhdHRyaWJ1dGVzIiwiZW5kIiwiZHVyYXRpb24iLCJtYXJrUmVuZGVyQ29tcGxldGUiLCJuYXZTdGFydEVudHJpZXMiLCJjbGVhck1lYXN1cmVzIiwicmVuZGVyUmVhY3RFbGVtZW50IiwiZG9tRWwiLCJyZWFjdEVsIiwiaHlkcmF0ZVJvb3QiLCJvblJlY292ZXJhYmxlRXJyb3IiLCJzdGFydFRyYW5zaXRpb24iLCJSb290IiwiY2FsbGJhY2tzIiwidXNlRWZmZWN0IiwiX19ORVhUX1RFU1RfTU9ERSIsIl9fTkVYVF9IWURSQVRFRCIsIl9fTkVYVF9IWURSQVRFRF9DQiIsImNhbmNlbGVkIiwicmVzb2x2ZVByb21pc2UiLCJyZW5kZXJQcm9taXNlIiwicmVqZWN0IiwiRXJyb3IiLCJvblN0YXJ0IiwiY3VycmVudFN0eWxlVGFncyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjdXJyZW50SHJlZnMiLCJTZXQiLCJ0YWciLCJnZXRBdHRyaWJ1dGUiLCJub3NjcmlwdCIsInF1ZXJ5U2VsZWN0b3IiLCJub25jZSIsImhyZWYiLCJ0ZXh0IiwiaGFzIiwic3R5bGVUYWciLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiaGVhZCIsImFwcGVuZENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJvbkhlYWRDb21taXQiLCJkZXNpcmVkSHJlZnMiLCJzIiwiaWR4IiwicmVtb3ZlQXR0cmlidXRlIiwicmVmZXJlbmNlTm9kZSIsInRhcmdldFRhZyIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJuZXh0U2libGluZyIsInJlbW92ZUNoaWxkIiwic2Nyb2xsIiwieCIsInkiLCJoYW5kbGVTbW9vdGhTY3JvbGwiLCJzY3JvbGxUbyIsIm9uUm9vdENvbW1pdCIsImVsZW0iLCJqc3hzIiwiRnJhZ21lbnQiLCJQb3J0YWwiLCJ0eXBlIiwiUm91dGVBbm5vdW5jZXIiLCJfX05FWFRfU1RSSUNUX01PREUiLCJTdHJpY3RNb2RlIiwicmVuZGVyaW5nUHJvcHMiLCJyZW5kZXJFcnIiLCJnZXRQcm9wZXJFcnJvciIsImluaXRpYWxFcnIiLCJhcHBFbnRyeXBvaW50Iiwid2hlbkVudHJ5cG9pbnQiLCJjb21wb25lbnQiLCJhcHAiLCJtb2QiLCJyZXBvcnRXZWJWaXRhbHMiLCJpZCIsImVudHJ5VHlwZSIsImVudHJpZXMiLCJhdHRyaWJ1dGlvbiIsInVuaXF1ZUlEIiwiRGF0ZSIsIm5vdyIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsInBlcmZTdGFydEVudHJ5Iiwid2ViVml0YWxzIiwibGFiZWwiLCJwYWdlRW50cnlwb2ludCIsImlzVmFsaWRFbGVtZW50VHlwZSIsImdldFNlcnZlckVycm9yIiwibWVzc2FnZSIsImUiLCJzdGFjayIsInNvdXJjZSIsIl9fTkVYVF9QUkVMT0FEUkVBRFkiLCJkeW5hbWljSWRzIiwiY3JlYXRlUm91dGVyIiwiaW5pdGlhbFByb3BzIiwiQm9vbGVhbiIsInN1YnNjcmlwdGlvbiIsImRvbWFpbkxvY2FsZXMiLCJpc1ByZXZpZXciLCJfaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlUHJvbWlzZSIsInJlbmRlckN0eCIsImluaXRpYWwiLCJfX2VzTW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/index.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/next-dev.js": +/*!***************************************************!*\ + !*** ./node_modules/next/dist/client/next-dev.js ***! + \***************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// TODO: Remove use of `any` type.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\n__webpack_require__(/*! ./webpack */ \"./node_modules/next/dist/client/webpack.js\");\nconst _ = __webpack_require__(/*! ./ */ \"./node_modules/next/dist/client/index.js\");\nconst _hotmiddlewareclient = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./dev/hot-middleware-client */ \"./node_modules/next/dist/client/dev/hot-middleware-client.js\"));\nconst _pagebootstrap = __webpack_require__(/*! ./page-bootstrap */ \"./node_modules/next/dist/client/page-bootstrap.js\");\n__webpack_require__(/*! ./setup-hydration-warning */ \"./node_modules/next/dist/client/setup-hydration-warning.js\");\nwindow.next = {\n version: _.version,\n // router is initialized later so it has to be live-binded\n get router () {\n return _.router;\n },\n emitter: _.emitter\n};\nconst devClient = (0, _hotmiddlewareclient.default)(\"webpack\");\n(0, _.initialize)({\n devClient\n}).then((param)=>{\n let { assetPrefix } = param;\n return (0, _pagebootstrap.pageBootrap)(assetPrefix);\n}).catch((err)=>{\n console.error(\"Error was not caught\", err);\n});\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=next-dev.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9uZXh0LWRldi5qcyIsIm1hcHBpbmdzIjoiQUFBQSxrQ0FBa0M7QUFDckI7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyw0R0FBeUM7QUFDbEZBLG1CQUFPQSxDQUFDLDZEQUFXO0FBQ25CLE1BQU1DLElBQUlELG1CQUFPQSxDQUFDLG9EQUFJO0FBQ3RCLE1BQU1FLHVCQUF1QixXQUFXLEdBQUdILHlCQUF5QkUsQ0FBQyxDQUFDRCxtQkFBT0EsQ0FBQyxpR0FBNkI7QUFDM0csTUFBTUcsaUJBQWlCSCxtQkFBT0EsQ0FBQywyRUFBa0I7QUFDakRBLG1CQUFPQSxDQUFDLDZGQUEyQjtBQUNuQ0ksT0FBT0MsSUFBSSxHQUFHO0lBQ1ZDLFNBQVNMLEVBQUVLLE9BQU87SUFDbEIsMERBQTBEO0lBQzFELElBQUlDLFVBQVU7UUFDVixPQUFPTixFQUFFTSxNQUFNO0lBQ25CO0lBQ0FDLFNBQVNQLEVBQUVPLE9BQU87QUFDdEI7QUFDQSxNQUFNQyxZQUFZLENBQUMsR0FBR1AscUJBQXFCUSxPQUFPLEVBQUU7QUFDbkQsSUFBR1QsRUFBRVUsVUFBVSxFQUFFO0lBQ2RGO0FBQ0osR0FBR0csSUFBSSxDQUFDLENBQUNDO0lBQ0wsSUFBSSxFQUFFQyxXQUFXLEVBQUUsR0FBR0Q7SUFDdEIsT0FBTyxDQUFDLEdBQUdWLGVBQWVZLFdBQVcsRUFBRUQ7QUFDM0MsR0FBR0UsS0FBSyxDQUFDLENBQUNDO0lBQ05DLFFBQVFDLEtBQUssQ0FBQyx3QkFBd0JGO0FBQzFDO0FBRUEsSUFBSSxDQUFDLE9BQU9wQixRQUFRYSxPQUFPLEtBQUssY0FBZSxPQUFPYixRQUFRYSxPQUFPLEtBQUssWUFBWWIsUUFBUWEsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPYixRQUFRYSxPQUFPLENBQUNVLFVBQVUsS0FBSyxhQUFhO0lBQ3JLekIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRYSxPQUFPLEVBQUUsY0FBYztRQUFFWixPQUFPO0lBQUs7SUFDbkVILE9BQU8wQixNQUFNLENBQUN4QixRQUFRYSxPQUFPLEVBQUViO0lBQy9CeUIsT0FBT3pCLE9BQU8sR0FBR0EsUUFBUWEsT0FBTztBQUNsQyxFQUVBLG9DQUFvQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9uZXh0LWRldi5qcz8zNTE1Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IFJlbW92ZSB1c2Ugb2YgYGFueWAgdHlwZS5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbnJlcXVpcmUoXCIuL3dlYnBhY2tcIik7XG5jb25zdCBfID0gcmVxdWlyZShcIi4vXCIpO1xuY29uc3QgX2hvdG1pZGRsZXdhcmVjbGllbnQgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCIuL2Rldi9ob3QtbWlkZGxld2FyZS1jbGllbnRcIikpO1xuY29uc3QgX3BhZ2Vib290c3RyYXAgPSByZXF1aXJlKFwiLi9wYWdlLWJvb3RzdHJhcFwiKTtcbnJlcXVpcmUoXCIuL3NldHVwLWh5ZHJhdGlvbi13YXJuaW5nXCIpO1xud2luZG93Lm5leHQgPSB7XG4gICAgdmVyc2lvbjogXy52ZXJzaW9uLFxuICAgIC8vIHJvdXRlciBpcyBpbml0aWFsaXplZCBsYXRlciBzbyBpdCBoYXMgdG8gYmUgbGl2ZS1iaW5kZWRcbiAgICBnZXQgcm91dGVyICgpIHtcbiAgICAgICAgcmV0dXJuIF8ucm91dGVyO1xuICAgIH0sXG4gICAgZW1pdHRlcjogXy5lbWl0dGVyXG59O1xuY29uc3QgZGV2Q2xpZW50ID0gKDAsIF9ob3RtaWRkbGV3YXJlY2xpZW50LmRlZmF1bHQpKFwid2VicGFja1wiKTtcbigwLCBfLmluaXRpYWxpemUpKHtcbiAgICBkZXZDbGllbnRcbn0pLnRoZW4oKHBhcmFtKT0+e1xuICAgIGxldCB7IGFzc2V0UHJlZml4IH0gPSBwYXJhbTtcbiAgICByZXR1cm4gKDAsIF9wYWdlYm9vdHN0cmFwLnBhZ2VCb290cmFwKShhc3NldFByZWZpeCk7XG59KS5jYXRjaCgoZXJyKT0+e1xuICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3YXMgbm90IGNhdWdodFwiLCBlcnIpO1xufSk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5leHQtZGV2LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfIiwiX2hvdG1pZGRsZXdhcmVjbGllbnQiLCJfcGFnZWJvb3RzdHJhcCIsIndpbmRvdyIsIm5leHQiLCJ2ZXJzaW9uIiwicm91dGVyIiwiZW1pdHRlciIsImRldkNsaWVudCIsImRlZmF1bHQiLCJpbml0aWFsaXplIiwidGhlbiIsInBhcmFtIiwiYXNzZXRQcmVmaXgiLCJwYWdlQm9vdHJhcCIsImNhdGNoIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/next-dev.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/normalize-trailing-slash.js": +/*!*******************************************************************!*\ + !*** ./node_modules/next/dist/client/normalize-trailing-slash.js ***! + \*******************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return normalizePathTrailingSlash;\n }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst normalizePathTrailingSlash = (path)=>{\n if (!path.startsWith(\"/\") || undefined) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n if (false) {}\n return \"\" + (0, _removetrailingslash.removeTrailingSlash)(pathname) + query + hash;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=normalize-trailing-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2guanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDhEQUE2RDtJQUN6REksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHVCQUF1QkMsbUJBQU9BLENBQUMsbUlBQWtEO0FBQ3ZGLE1BQU1DLGFBQWFELG1CQUFPQSxDQUFDLDZHQUF1QztBQUNsRSxNQUFNRiw2QkFBNkIsQ0FBQ0k7SUFDaEMsSUFBSSxDQUFDQSxLQUFLQyxVQUFVLENBQUMsUUFBUUMsU0FBd0MsRUFBRTtRQUNuRSxPQUFPRjtJQUNYO0lBQ0EsTUFBTSxFQUFFSyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHUixXQUFXUyxTQUFTLEVBQUVSO0lBQzVELElBQUlFLEtBQWlDLEVBQUUsRUFRdEM7SUFDRCxPQUFPLEtBQUssQ0FBQyxHQUFHTCxxQkFBcUJjLG1CQUFtQixFQUFFTixZQUFZQyxRQUFRQztBQUNsRjtBQUVBLElBQUksQ0FBQyxPQUFPZixRQUFRcUIsT0FBTyxLQUFLLGNBQWUsT0FBT3JCLFFBQVFxQixPQUFPLEtBQUssWUFBWXJCLFFBQVFxQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9yQixRQUFRcUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3hCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXFCLE9BQU8sRUFBRSxjQUFjO1FBQUVwQixPQUFPO0lBQUs7SUFDbkVILE9BQU95QixNQUFNLENBQUN2QixRQUFRcUIsT0FBTyxFQUFFckI7SUFDL0J3QixPQUFPeEIsT0FBTyxHQUFHQSxRQUFRcUIsT0FBTztBQUNsQyxFQUVBLG9EQUFvRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2guanM/NGMyZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaDtcbiAgICB9XG59KTtcbmNvbnN0IF9yZW1vdmV0cmFpbGluZ3NsYXNoID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS10cmFpbGluZy1zbGFzaFwiKTtcbmNvbnN0IF9wYXJzZXBhdGggPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcGF0aFwiKTtcbmNvbnN0IG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoID0gKHBhdGgpPT57XG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpIHx8IHByb2Nlc3MuZW52Ll9fTkVYVF9NQU5VQUxfVFJBSUxJTkdfU0xBU0gpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5LCBoYXNoIH0gPSAoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKHBhdGgpO1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfVFJBSUxJTkdfU0xBU0gpIHtcbiAgICAgICAgaWYgKC9cXC5bXi9dK1xcLz8kLy50ZXN0KHBhdGhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyAoMCwgX3JlbW92ZXRyYWlsaW5nc2xhc2gucmVtb3ZlVHJhaWxpbmdTbGFzaCkocGF0aG5hbWUpICsgcXVlcnkgKyBoYXNoO1xuICAgICAgICB9IGVsc2UgaWYgKHBhdGhuYW1lLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBwYXRobmFtZSArIHF1ZXJ5ICsgaGFzaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRobmFtZSArIFwiL1wiICsgcXVlcnkgKyBoYXNoO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiICsgKDAsIF9yZW1vdmV0cmFpbGluZ3NsYXNoLnJlbW92ZVRyYWlsaW5nU2xhc2gpKHBhdGhuYW1lKSArIHF1ZXJ5ICsgaGFzaDtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vcm1hbGl6ZS10cmFpbGluZy1zbGFzaC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJfcmVtb3ZldHJhaWxpbmdzbGFzaCIsInJlcXVpcmUiLCJfcGFyc2VwYXRoIiwicGF0aCIsInN0YXJ0c1dpdGgiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX01BTlVBTF9UUkFJTElOR19TTEFTSCIsInBhdGhuYW1lIiwicXVlcnkiLCJoYXNoIiwicGFyc2VQYXRoIiwiX19ORVhUX1RSQUlMSU5HX1NMQVNIIiwidGVzdCIsInJlbW92ZVRyYWlsaW5nU2xhc2giLCJlbmRzV2l0aCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/normalize-trailing-slash.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/on-recoverable-error.js": +/*!***************************************************************!*\ + !*** ./node_modules/next/dist/client/on-recoverable-error.js ***! + \***************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return onRecoverableError;\n }\n}));\nconst _bailouttocsr = __webpack_require__(/*! ../shared/lib/lazy-dynamic/bailout-to-csr */ \"./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nfunction onRecoverableError(err) {\n // Using default react onRecoverableError\n // x-ref: https://github.com/facebook/react/blob/d4bc16a7d69eb2ea38a88c8ac0b461d5f72cdcab/packages/react-dom/src/client/ReactDOMRoot.js#L83\n const defaultOnRecoverableError = typeof reportError === \"function\" ? reportError : (error)=>{\n window.console.error(error);\n };\n // Skip certain custom errors which are not expected to be reported on client\n if ((0, _bailouttocsr.isBailoutToCSRError)(err)) return;\n defaultOnRecoverableError(err);\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=on-recoverable-error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9vbi1yZWNvdmVyYWJsZS1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsZ0JBQWdCQyxtQkFBT0EsQ0FBQyxxSEFBMkM7QUFDekUsU0FBU0YsbUJBQW1CRyxHQUFHO0lBQzNCLHlDQUF5QztJQUN6QywySUFBMkk7SUFDM0ksTUFBTUMsNEJBQTRCLE9BQU9DLGdCQUFnQixhQUN6REEsY0FBYyxDQUFDQztRQUNYQyxPQUFPQyxPQUFPLENBQUNGLEtBQUssQ0FBQ0E7SUFDekI7SUFDQSw2RUFBNkU7SUFDN0UsSUFBSSxDQUFDLEdBQUdMLGNBQWNRLG1CQUFtQixFQUFFTixNQUFNO0lBQ2pEQywwQkFBMEJEO0FBQzlCO0FBRUEsSUFBSSxDQUFDLE9BQU9QLFFBQVFjLE9BQU8sS0FBSyxjQUFlLE9BQU9kLFFBQVFjLE9BQU8sS0FBSyxZQUFZZCxRQUFRYyxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9kLFFBQVFjLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktqQixPQUFPQyxjQUFjLENBQUNDLFFBQVFjLE9BQU8sRUFBRSxjQUFjO1FBQUViLE9BQU87SUFBSztJQUNuRUgsT0FBT2tCLE1BQU0sQ0FBQ2hCLFFBQVFjLE9BQU8sRUFBRWQ7SUFDL0JpQixPQUFPakIsT0FBTyxHQUFHQSxRQUFRYyxPQUFPO0FBQ2xDLEVBRUEsZ0RBQWdEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L29uLXJlY292ZXJhYmxlLWVycm9yLmpzP2ViOTIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBvblJlY292ZXJhYmxlRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfYmFpbG91dHRvY3NyID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvbGF6eS1keW5hbWljL2JhaWxvdXQtdG8tY3NyXCIpO1xuZnVuY3Rpb24gb25SZWNvdmVyYWJsZUVycm9yKGVycikge1xuICAgIC8vIFVzaW5nIGRlZmF1bHQgcmVhY3Qgb25SZWNvdmVyYWJsZUVycm9yXG4gICAgLy8geC1yZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL2Q0YmMxNmE3ZDY5ZWIyZWEzOGE4OGM4YWMwYjQ2MWQ1ZjcyY2RjYWIvcGFja2FnZXMvcmVhY3QtZG9tL3NyYy9jbGllbnQvUmVhY3RET01Sb290LmpzI0w4M1xuICAgIGNvbnN0IGRlZmF1bHRPblJlY292ZXJhYmxlRXJyb3IgPSB0eXBlb2YgcmVwb3J0RXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IC8vIGVtdWxhdGluZyBhbiB1bmNhdWdodCBKYXZhU2NyaXB0IGVycm9yLlxuICAgIHJlcG9ydEVycm9yIDogKGVycm9yKT0+e1xuICAgICAgICB3aW5kb3cuY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICAvLyBTa2lwIGNlcnRhaW4gY3VzdG9tIGVycm9ycyB3aGljaCBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIHJlcG9ydGVkIG9uIGNsaWVudFxuICAgIGlmICgoMCwgX2JhaWxvdXR0b2Nzci5pc0JhaWxvdXRUb0NTUkVycm9yKShlcnIpKSByZXR1cm47XG4gICAgZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvcihlcnIpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbi1yZWNvdmVyYWJsZS1lcnJvci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwib25SZWNvdmVyYWJsZUVycm9yIiwiX2JhaWxvdXR0b2NzciIsInJlcXVpcmUiLCJlcnIiLCJkZWZhdWx0T25SZWNvdmVyYWJsZUVycm9yIiwicmVwb3J0RXJyb3IiLCJlcnJvciIsIndpbmRvdyIsImNvbnNvbGUiLCJpc0JhaWxvdXRUb0NTUkVycm9yIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/on-recoverable-error.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/page-bootstrap.js": +/*!*********************************************************!*\ + !*** ./node_modules/next/dist/client/page-bootstrap.js ***! + \*********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"pageBootrap\", ({\n enumerable: true,\n get: function() {\n return pageBootrap;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _ = __webpack_require__(/*! ./ */ \"./node_modules/next/dist/client/index.js\");\nconst _ondemandentriesclient = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./dev/on-demand-entries-client */ \"./node_modules/next/dist/client/dev/on-demand-entries-client.js\"));\nconst _devbuildwatcher = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./dev/dev-build-watcher */ \"./node_modules/next/dist/client/dev/dev-build-watcher.js\"));\nconst _fouc = __webpack_require__(/*! ./dev/fouc */ \"./node_modules/next/dist/client/dev/fouc.js\");\nconst _websocket = __webpack_require__(/*! ./dev/error-overlay/websocket */ \"./node_modules/next/dist/client/dev/error-overlay/websocket.js\");\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../server/dev/hot-reloader-types */ \"./node_modules/next/dist/server/dev/hot-reloader-types.js\");\nfunction pageBootrap(assetPrefix) {\n (0, _websocket.connectHMR)({\n assetPrefix,\n path: \"/_next/webpack-hmr\"\n });\n return (0, _.hydrate)({\n beforeRender: _fouc.displayContent\n }).then(()=>{\n (0, _ondemandentriesclient.default)();\n let buildIndicatorHandler;\n if (true) {\n (0, _devbuildwatcher.default)((handler)=>{\n buildIndicatorHandler = handler;\n }, \"bottom-right\");\n }\n let reloading = false;\n (0, _websocket.addMessageListener)((payload)=>{\n if (reloading) return;\n if (\"action\" in payload) {\n if (payload.action === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR) {\n const { stack, message } = JSON.parse(payload.errorJSON);\n const error = new Error(message);\n error.stack = stack;\n throw error;\n } else if (payload.action === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE) {\n reloading = true;\n window.location.reload();\n } else if (payload.action === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE) {\n fetch(\"\" + assetPrefix + \"/_next/static/development/_devPagesManifest.json\").then((res)=>res.json()).then((manifest)=>{\n window.__DEV_PAGES_MANIFEST = manifest;\n }).catch((err)=>{\n console.log(\"Failed to fetch devPagesManifest\", err);\n });\n }\n } else if (\"event\" in payload) {\n if (payload.event === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.MIDDLEWARE_CHANGES) {\n return window.location.reload();\n } else if (payload.event === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.CLIENT_CHANGES) {\n const isOnErrorPage = window.next.router.pathname === \"/_error\";\n // On the error page we want to reload the page when a page was changed\n if (isOnErrorPage) {\n return window.location.reload();\n }\n } else if (payload.event === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ONLY_CHANGES) {\n const { pages } = payload;\n // Make sure to reload when the dev-overlay is showing for an\n // API route\n // TODO: Fix `__NEXT_PAGE` type\n if (pages.includes(_.router.query.__NEXT_PAGE)) {\n return window.location.reload();\n }\n if (!_.router.clc && pages.includes(_.router.pathname)) {\n console.log(\"Refreshing page data due to server-side change\");\n buildIndicatorHandler == null ? void 0 : buildIndicatorHandler.show();\n const clearIndicator = ()=>buildIndicatorHandler == null ? void 0 : buildIndicatorHandler.hide();\n _.router.replace(_.router.pathname + \"?\" + String((0, _querystring.assign)((0, _querystring.urlQueryToSearchParams)(_.router.query), new URLSearchParams(location.search))), _.router.asPath, {\n scroll: false\n }).catch(()=>{\n // trigger hard reload when failing to refresh data\n // to show error overlay properly\n location.reload();\n }).finally(clearIndicator);\n }\n }\n }\n });\n });\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=page-bootstrap.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9wYWdlLWJvb3RzdHJhcC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsK0NBQThDO0lBQzFDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyw0R0FBeUM7QUFDbEYsTUFBTUMsSUFBSUQsbUJBQU9BLENBQUMsb0RBQUk7QUFDdEIsTUFBTUUseUJBQXlCLFdBQVcsR0FBR0gseUJBQXlCRSxDQUFDLENBQUNELG1CQUFPQSxDQUFDLHVHQUFnQztBQUNoSCxNQUFNRyxtQkFBbUIsV0FBVyxHQUFHSix5QkFBeUJFLENBQUMsQ0FBQ0QsbUJBQU9BLENBQUMseUZBQXlCO0FBQ25HLE1BQU1JLFFBQVFKLG1CQUFPQSxDQUFDLCtEQUFZO0FBQ2xDLE1BQU1LLGFBQWFMLG1CQUFPQSxDQUFDLHFHQUErQjtBQUMxRCxNQUFNTSxlQUFlTixtQkFBT0EsQ0FBQywrR0FBd0M7QUFDckUsTUFBTU8sb0JBQW9CUCxtQkFBT0EsQ0FBQyxtR0FBa0M7QUFDcEUsU0FBU0YsWUFBWVUsV0FBVztJQUMzQixJQUFHSCxXQUFXSSxVQUFVLEVBQUU7UUFDdkJEO1FBQ0FFLE1BQU07SUFDVjtJQUNBLE9BQU8sQ0FBQyxHQUFHVCxFQUFFVSxPQUFPLEVBQUU7UUFDbEJDLGNBQWNSLE1BQU1TLGNBQWM7SUFDdEMsR0FBR0MsSUFBSSxDQUFDO1FBQ0gsSUFBR1osdUJBQXVCYSxPQUFPO1FBQ2xDLElBQUlDO1FBQ0osSUFBSUMsSUFBa0MsRUFBRTtZQUNuQyxJQUFHZCxpQkFBaUJZLE9BQU8sRUFBRSxDQUFDSztnQkFDM0JKLHdCQUF3Qkk7WUFDNUIsR0FBR0gsY0FBMkM7UUFDbEQ7UUFDQSxJQUFJSyxZQUFZO1FBQ2YsSUFBR2pCLFdBQVdrQixrQkFBa0IsRUFBRSxDQUFDQztZQUNoQyxJQUFJRixXQUFXO1lBQ2YsSUFBSSxZQUFZRSxTQUFTO2dCQUNyQixJQUFJQSxRQUFRQyxNQUFNLEtBQUtsQixrQkFBa0JtQiwyQkFBMkIsQ0FBQ0MsWUFBWSxFQUFFO29CQUMvRSxNQUFNLEVBQUVDLEtBQUssRUFBRUMsT0FBTyxFQUFFLEdBQUdDLEtBQUtDLEtBQUssQ0FBQ1AsUUFBUVEsU0FBUztvQkFDdkQsTUFBTUMsUUFBUSxJQUFJQyxNQUFNTDtvQkFDeEJJLE1BQU1MLEtBQUssR0FBR0E7b0JBQ2QsTUFBTUs7Z0JBQ1YsT0FBTyxJQUFJVCxRQUFRQyxNQUFNLEtBQUtsQixrQkFBa0JtQiwyQkFBMkIsQ0FBQ1MsV0FBVyxFQUFFO29CQUNyRmIsWUFBWTtvQkFDWmMsT0FBT0MsUUFBUSxDQUFDQyxNQUFNO2dCQUMxQixPQUFPLElBQUlkLFFBQVFDLE1BQU0sS0FBS2xCLGtCQUFrQm1CLDJCQUEyQixDQUFDYSx5QkFBeUIsRUFBRTtvQkFDbkdDLE1BQU0sS0FBS2hDLGNBQWMsb0RBQW9ETSxJQUFJLENBQUMsQ0FBQzJCLE1BQU1BLElBQUlDLElBQUksSUFBSTVCLElBQUksQ0FBQyxDQUFDNkI7d0JBQ3ZHUCxPQUFPUSxvQkFBb0IsR0FBR0Q7b0JBQ2xDLEdBQUdFLEtBQUssQ0FBQyxDQUFDQzt3QkFDTkMsUUFBUUMsR0FBRyxDQUFDLG9DQUFvQ0Y7b0JBQ3BEO2dCQUNKO1lBQ0osT0FBTyxJQUFJLFdBQVd0QixTQUFTO2dCQUMzQixJQUFJQSxRQUFReUIsS0FBSyxLQUFLMUMsa0JBQWtCbUIsMkJBQTJCLENBQUN3QixrQkFBa0IsRUFBRTtvQkFDcEYsT0FBT2QsT0FBT0MsUUFBUSxDQUFDQyxNQUFNO2dCQUNqQyxPQUFPLElBQUlkLFFBQVF5QixLQUFLLEtBQUsxQyxrQkFBa0JtQiwyQkFBMkIsQ0FBQ3lCLGNBQWMsRUFBRTtvQkFDdkYsTUFBTUMsZ0JBQWdCaEIsT0FBT2lCLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxRQUFRLEtBQUs7b0JBQ3RELHVFQUF1RTtvQkFDdkUsSUFBSUgsZUFBZTt3QkFDZixPQUFPaEIsT0FBT0MsUUFBUSxDQUFDQyxNQUFNO29CQUNqQztnQkFDSixPQUFPLElBQUlkLFFBQVF5QixLQUFLLEtBQUsxQyxrQkFBa0JtQiwyQkFBMkIsQ0FBQzhCLG1CQUFtQixFQUFFO29CQUM1RixNQUFNLEVBQUVDLEtBQUssRUFBRSxHQUFHakM7b0JBQ2xCLDZEQUE2RDtvQkFDN0QsWUFBWTtvQkFDWiwrQkFBK0I7b0JBQy9CLElBQUlpQyxNQUFNQyxRQUFRLENBQUN6RCxFQUFFcUQsTUFBTSxDQUFDSyxLQUFLLENBQUNDLFdBQVcsR0FBRzt3QkFDNUMsT0FBT3hCLE9BQU9DLFFBQVEsQ0FBQ0MsTUFBTTtvQkFDakM7b0JBQ0EsSUFBSSxDQUFDckMsRUFBRXFELE1BQU0sQ0FBQ08sR0FBRyxJQUFJSixNQUFNQyxRQUFRLENBQUN6RCxFQUFFcUQsTUFBTSxDQUFDQyxRQUFRLEdBQUc7d0JBQ3BEUixRQUFRQyxHQUFHLENBQUM7d0JBQ1poQyx5QkFBeUIsT0FBTyxLQUFLLElBQUlBLHNCQUFzQjhDLElBQUk7d0JBQ25FLE1BQU1DLGlCQUFpQixJQUFJL0MseUJBQXlCLE9BQU8sS0FBSyxJQUFJQSxzQkFBc0JnRCxJQUFJO3dCQUM5Ri9ELEVBQUVxRCxNQUFNLENBQUNXLE9BQU8sQ0FBQ2hFLEVBQUVxRCxNQUFNLENBQUNDLFFBQVEsR0FBRyxNQUFNVyxPQUFPLENBQUMsR0FBRzVELGFBQWE2RCxNQUFNLEVBQUUsQ0FBQyxHQUFHN0QsYUFBYThELHNCQUFzQixFQUFFbkUsRUFBRXFELE1BQU0sQ0FBQ0ssS0FBSyxHQUFHLElBQUlVLGdCQUFnQmhDLFNBQVNpQyxNQUFNLEtBQUtyRSxFQUFFcUQsTUFBTSxDQUFDaUIsTUFBTSxFQUFFOzRCQUMxTEMsUUFBUTt3QkFDWixHQUFHM0IsS0FBSyxDQUFDOzRCQUNMLG1EQUFtRDs0QkFDbkQsaUNBQWlDOzRCQUNqQ1IsU0FBU0MsTUFBTTt3QkFDbkIsR0FBR21DLE9BQU8sQ0FBQ1Y7b0JBQ2Y7Z0JBQ0o7WUFDSjtRQUNKO0lBQ0o7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPckUsUUFBUXFCLE9BQU8sS0FBSyxjQUFlLE9BQU9yQixRQUFRcUIsT0FBTyxLQUFLLFlBQVlyQixRQUFRcUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPckIsUUFBUXFCLE9BQU8sQ0FBQzJELFVBQVUsS0FBSyxhQUFhO0lBQ3JLbEYsT0FBT0MsY0FBYyxDQUFDQyxRQUFRcUIsT0FBTyxFQUFFLGNBQWM7UUFBRXBCLE9BQU87SUFBSztJQUNuRUgsT0FBTzJFLE1BQU0sQ0FBQ3pFLFFBQVFxQixPQUFPLEVBQUVyQjtJQUMvQmlGLE9BQU9qRixPQUFPLEdBQUdBLFFBQVFxQixPQUFPO0FBQ2xDLEVBRUEsMENBQTBDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3BhZ2UtYm9vdHN0cmFwLmpzP2VlZDEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYWdlQm9vdHJhcFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcGFnZUJvb3RyYXA7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgXyA9IHJlcXVpcmUoXCIuL1wiKTtcbmNvbnN0IF9vbmRlbWFuZGVudHJpZXNjbGllbnQgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCIuL2Rldi9vbi1kZW1hbmQtZW50cmllcy1jbGllbnRcIikpO1xuY29uc3QgX2RldmJ1aWxkd2F0Y2hlciA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4vZGV2L2Rldi1idWlsZC13YXRjaGVyXCIpKTtcbmNvbnN0IF9mb3VjID0gcmVxdWlyZShcIi4vZGV2L2ZvdWNcIik7XG5jb25zdCBfd2Vic29ja2V0ID0gcmVxdWlyZShcIi4vZGV2L2Vycm9yLW92ZXJsYXkvd2Vic29ja2V0XCIpO1xuY29uc3QgX3F1ZXJ5c3RyaW5nID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3F1ZXJ5c3RyaW5nXCIpO1xuY29uc3QgX2hvdHJlbG9hZGVydHlwZXMgPSByZXF1aXJlKFwiLi4vc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXNcIik7XG5mdW5jdGlvbiBwYWdlQm9vdHJhcChhc3NldFByZWZpeCkge1xuICAgICgwLCBfd2Vic29ja2V0LmNvbm5lY3RITVIpKHtcbiAgICAgICAgYXNzZXRQcmVmaXgsXG4gICAgICAgIHBhdGg6IFwiL19uZXh0L3dlYnBhY2staG1yXCJcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF8uaHlkcmF0ZSkoe1xuICAgICAgICBiZWZvcmVSZW5kZXI6IF9mb3VjLmRpc3BsYXlDb250ZW50XG4gICAgfSkudGhlbigoKT0+e1xuICAgICAgICAoMCwgX29uZGVtYW5kZW50cmllc2NsaWVudC5kZWZhdWx0KSgpO1xuICAgICAgICBsZXQgYnVpbGRJbmRpY2F0b3JIYW5kbGVyO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0JVSUxEX0lORElDQVRPUikge1xuICAgICAgICAgICAgKDAsIF9kZXZidWlsZHdhdGNoZXIuZGVmYXVsdCkoKGhhbmRsZXIpPT57XG4gICAgICAgICAgICAgICAgYnVpbGRJbmRpY2F0b3JIYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgIH0sIHByb2Nlc3MuZW52Ll9fTkVYVF9CVUlMRF9JTkRJQ0FUT1JfUE9TSVRJT04pO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZWxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgKDAsIF93ZWJzb2NrZXQuYWRkTWVzc2FnZUxpc3RlbmVyKSgocGF5bG9hZCk9PntcbiAgICAgICAgICAgIGlmIChyZWxvYWRpbmcpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChcImFjdGlvblwiIGluIHBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5hY3Rpb24gPT09IF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5TRVJWRVJfRVJST1IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzdGFjaywgbWVzc2FnZSB9ID0gSlNPTi5wYXJzZShwYXlsb2FkLmVycm9ySlNPTik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBlcnJvci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWQuYWN0aW9uID09PSBfaG90cmVsb2FkZXJ0eXBlcy5ITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuUkVMT0FEX1BBR0UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZC5hY3Rpb24gPT09IF9ob3RyZWxvYWRlcnR5cGVzLkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5ERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoKFwiXCIgKyBhc3NldFByZWZpeCArIFwiL19uZXh0L3N0YXRpYy9kZXZlbG9wbWVudC9fZGV2UGFnZXNNYW5pZmVzdC5qc29uXCIpLnRoZW4oKHJlcyk9PnJlcy5qc29uKCkpLnRoZW4oKG1hbmlmZXN0KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Ll9fREVWX1BBR0VTX01BTklGRVNUID0gbWFuaWZlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZhaWxlZCB0byBmZXRjaCBkZXZQYWdlc01hbmlmZXN0XCIsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXCJldmVudFwiIGluIHBheWxvYWQpIHtcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5ldmVudCA9PT0gX2hvdHJlbG9hZGVydHlwZXMuSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLk1JRERMRVdBUkVfQ0hBTkdFUykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZC5ldmVudCA9PT0gX2hvdHJlbG9hZGVydHlwZXMuSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkNMSUVOVF9DSEFOR0VTKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzT25FcnJvclBhZ2UgPSB3aW5kb3cubmV4dC5yb3V0ZXIucGF0aG5hbWUgPT09IFwiL19lcnJvclwiO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbiB0aGUgZXJyb3IgcGFnZSB3ZSB3YW50IHRvIHJlbG9hZCB0aGUgcGFnZSB3aGVuIGEgcGFnZSB3YXMgY2hhbmdlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNPbkVycm9yUGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZC5ldmVudCA9PT0gX2hvdHJlbG9hZGVydHlwZXMuSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlNFUlZFUl9PTkxZX0NIQU5HRVMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBwYWdlcyB9ID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHJlbG9hZCB3aGVuIHRoZSBkZXYtb3ZlcmxheSBpcyBzaG93aW5nIGZvciBhblxuICAgICAgICAgICAgICAgICAgICAvLyBBUEkgcm91dGVcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogRml4IGBfX05FWFRfUEFHRWAgdHlwZVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFnZXMuaW5jbHVkZXMoXy5yb3V0ZXIucXVlcnkuX19ORVhUX1BBR0UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghXy5yb3V0ZXIuY2xjICYmIHBhZ2VzLmluY2x1ZGVzKF8ucm91dGVyLnBhdGhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZWZyZXNoaW5nIHBhZ2UgZGF0YSBkdWUgdG8gc2VydmVyLXNpZGUgY2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRJbmRpY2F0b3JIYW5kbGVyID09IG51bGwgPyB2b2lkIDAgOiBidWlsZEluZGljYXRvckhhbmRsZXIuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xlYXJJbmRpY2F0b3IgPSAoKT0+YnVpbGRJbmRpY2F0b3JIYW5kbGVyID09IG51bGwgPyB2b2lkIDAgOiBidWlsZEluZGljYXRvckhhbmRsZXIuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgXy5yb3V0ZXIucmVwbGFjZShfLnJvdXRlci5wYXRobmFtZSArIFwiP1wiICsgU3RyaW5nKCgwLCBfcXVlcnlzdHJpbmcuYXNzaWduKSgoMCwgX3F1ZXJ5c3RyaW5nLnVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMpKF8ucm91dGVyLnF1ZXJ5KSwgbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpKSksIF8ucm91dGVyLmFzUGF0aCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJpZ2dlciBoYXJkIHJlbG9hZCB3aGVuIGZhaWxpbmcgdG8gcmVmcmVzaCBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2hvdyBlcnJvciBvdmVybGF5IHByb3Blcmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KGNsZWFySW5kaWNhdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhZ2UtYm9vdHN0cmFwLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJwYWdlQm9vdHJhcCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfIiwiX29uZGVtYW5kZW50cmllc2NsaWVudCIsIl9kZXZidWlsZHdhdGNoZXIiLCJfZm91YyIsIl93ZWJzb2NrZXQiLCJfcXVlcnlzdHJpbmciLCJfaG90cmVsb2FkZXJ0eXBlcyIsImFzc2V0UHJlZml4IiwiY29ubmVjdEhNUiIsInBhdGgiLCJoeWRyYXRlIiwiYmVmb3JlUmVuZGVyIiwiZGlzcGxheUNvbnRlbnQiLCJ0aGVuIiwiZGVmYXVsdCIsImJ1aWxkSW5kaWNhdG9ySGFuZGxlciIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfQlVJTERfSU5ESUNBVE9SIiwiaGFuZGxlciIsIl9fTkVYVF9CVUlMRF9JTkRJQ0FUT1JfUE9TSVRJT04iLCJyZWxvYWRpbmciLCJhZGRNZXNzYWdlTGlzdGVuZXIiLCJwYXlsb2FkIiwiYWN0aW9uIiwiSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIiwiU0VSVkVSX0VSUk9SIiwic3RhY2siLCJtZXNzYWdlIiwiSlNPTiIsInBhcnNlIiwiZXJyb3JKU09OIiwiZXJyb3IiLCJFcnJvciIsIlJFTE9BRF9QQUdFIiwid2luZG93IiwibG9jYXRpb24iLCJyZWxvYWQiLCJERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFIiwiZmV0Y2giLCJyZXMiLCJqc29uIiwibWFuaWZlc3QiLCJfX0RFVl9QQUdFU19NQU5JRkVTVCIsImNhdGNoIiwiZXJyIiwiY29uc29sZSIsImxvZyIsImV2ZW50IiwiTUlERExFV0FSRV9DSEFOR0VTIiwiQ0xJRU5UX0NIQU5HRVMiLCJpc09uRXJyb3JQYWdlIiwibmV4dCIsInJvdXRlciIsInBhdGhuYW1lIiwiU0VSVkVSX09OTFlfQ0hBTkdFUyIsInBhZ2VzIiwiaW5jbHVkZXMiLCJxdWVyeSIsIl9fTkVYVF9QQUdFIiwiY2xjIiwic2hvdyIsImNsZWFySW5kaWNhdG9yIiwiaGlkZSIsInJlcGxhY2UiLCJTdHJpbmciLCJhc3NpZ24iLCJ1cmxRdWVyeVRvU2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwic2VhcmNoIiwiYXNQYXRoIiwic2Nyb2xsIiwiZmluYWxseSIsIl9fZXNNb2R1bGUiLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/page-bootstrap.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/page-loader.js": +/*!******************************************************!*\ + !*** ./node_modules/next/dist/client/page-loader.js ***! + \******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return PageLoader;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _addbasepath = __webpack_require__(/*! ./add-base-path */ \"./node_modules/next/dist/client/add-base-path.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nconst _getassetpathfromroute = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/utils/get-asset-path-from-route */ \"./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\"));\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"./node_modules/next/dist/client/add-locale.js\");\nconst _isdynamic = __webpack_require__(/*! ../shared/lib/router/utils/is-dynamic */ \"./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _parserelativeurl = __webpack_require__(/*! ../shared/lib/router/utils/parse-relative-url */ \"./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _routeloader = __webpack_require__(/*! ./route-loader */ \"./node_modules/next/dist/client/route-loader.js\");\nconst _constants = __webpack_require__(/*! ../shared/lib/constants */ \"./node_modules/next/dist/shared/lib/constants.js\");\nclass PageLoader {\n getPageList() {\n if (false) {} else {\n if (window.__DEV_PAGES_MANIFEST) {\n return window.__DEV_PAGES_MANIFEST.pages;\n } else {\n this.promisedDevPagesManifest || (this.promisedDevPagesManifest = fetch(this.assetPrefix + \"/_next/static/development/\" + _constants.DEV_CLIENT_PAGES_MANIFEST).then((res)=>res.json()).then((manifest)=>{\n window.__DEV_PAGES_MANIFEST = manifest;\n return manifest.pages;\n }).catch((err)=>{\n console.log(\"Failed to fetch devPagesManifest:\", err);\n throw new Error(\"Failed to fetch _devPagesManifest.json. Is something blocking that network request?\\n\" + \"Read more: https://nextjs.org/docs/messages/failed-to-fetch-devpagesmanifest\");\n }));\n return this.promisedDevPagesManifest;\n }\n }\n }\n getMiddleware() {\n if (false) {} else {\n if (window.__DEV_MIDDLEWARE_MATCHERS) {\n return window.__DEV_MIDDLEWARE_MATCHERS;\n } else {\n if (!this.promisedMiddlewareMatchers) {\n // TODO: Decide what should happen when fetching fails instead of asserting\n // @ts-ignore\n this.promisedMiddlewareMatchers = fetch(this.assetPrefix + \"/_next/static/\" + this.buildId + \"/\" + _constants.DEV_MIDDLEWARE_MANIFEST).then((res)=>res.json()).then((matchers)=>{\n window.__DEV_MIDDLEWARE_MATCHERS = matchers;\n return matchers;\n }).catch((err)=>{\n console.log(\"Failed to fetch _devMiddlewareManifest\", err);\n });\n }\n // TODO Remove this assertion as this could be undefined\n return this.promisedMiddlewareMatchers;\n }\n }\n }\n getDataHref(params) {\n const { asPath, href, locale } = params;\n const { pathname: hrefPathname, query, search } = (0, _parserelativeurl.parseRelativeUrl)(href);\n const { pathname: asPathname } = (0, _parserelativeurl.parseRelativeUrl)(asPath);\n const route = (0, _removetrailingslash.removeTrailingSlash)(hrefPathname);\n if (route[0] !== \"/\") {\n throw new Error('Route name should start with a \"/\", got \"' + route + '\"');\n }\n const getHrefForSlug = (path)=>{\n const dataRoute = (0, _getassetpathfromroute.default)((0, _removetrailingslash.removeTrailingSlash)((0, _addlocale.addLocale)(path, locale)), \".json\");\n return (0, _addbasepath.addBasePath)(\"/_next/data/\" + this.buildId + dataRoute + search, true);\n };\n return getHrefForSlug(params.skipInterpolation ? asPathname : (0, _isdynamic.isDynamicRoute)(route) ? (0, _interpolateas.interpolateAs)(hrefPathname, asPathname, query).result : route);\n }\n _isSsg(/** the route (file-system path) */ route) {\n return this.promisedSsgManifest.then((manifest)=>manifest.has(route));\n }\n loadPage(route) {\n return this.routeLoader.loadRoute(route).then((res)=>{\n if (\"component\" in res) {\n return {\n page: res.component,\n mod: res.exports,\n styleSheets: res.styles.map((o)=>({\n href: o.href,\n text: o.content\n }))\n };\n }\n throw res.error;\n });\n }\n prefetch(route) {\n return this.routeLoader.prefetch(route);\n }\n constructor(buildId, assetPrefix){\n this.routeLoader = (0, _routeloader.createRouteLoader)(assetPrefix);\n this.buildId = buildId;\n this.assetPrefix = assetPrefix;\n this.promisedSsgManifest = new Promise((resolve)=>{\n if (window.__SSG_MANIFEST) {\n resolve(window.__SSG_MANIFEST);\n } else {\n window.__SSG_MANIFEST_CB = ()=>{\n resolve(window.__SSG_MANIFEST);\n };\n }\n });\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=page-loader.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9wYWdlLWxvYWRlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyw0R0FBeUM7QUFDbEYsTUFBTUMsZUFBZUQsbUJBQU9BLENBQUMseUVBQWlCO0FBQzlDLE1BQU1FLGlCQUFpQkYsbUJBQU9BLENBQUMscUhBQTJDO0FBQzFFLE1BQU1HLHlCQUF5QixXQUFXLEdBQUdKLHlCQUF5QkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQywySUFBc0Q7QUFDdEksTUFBTUssYUFBYUwsbUJBQU9BLENBQUMsbUVBQWM7QUFDekMsTUFBTU0sYUFBYU4sbUJBQU9BLENBQUMsNkdBQXVDO0FBQ2xFLE1BQU1PLG9CQUFvQlAsbUJBQU9BLENBQUMsNkhBQStDO0FBQ2pGLE1BQU1RLHVCQUF1QlIsbUJBQU9BLENBQUMsbUlBQWtEO0FBQ3ZGLE1BQU1TLGVBQWVULG1CQUFPQSxDQUFDLHVFQUFnQjtBQUM3QyxNQUFNVSxhQUFhVixtQkFBT0EsQ0FBQyxpRkFBeUI7QUFDcEQsTUFBTUY7SUFDRmEsY0FBYztRQUNWLElBQUlDLEtBQXFDLEVBQUUsRUFFMUMsTUFBTTtZQUNILElBQUlLLE9BQU9DLG9CQUFvQixFQUFFO2dCQUM3QixPQUFPRCxPQUFPQyxvQkFBb0IsQ0FBQ0MsS0FBSztZQUM1QyxPQUFPO2dCQUNILElBQUksQ0FBQ0Msd0JBQXdCLElBQUssS0FBSSxDQUFDQSx3QkFBd0IsR0FBR0MsTUFBTSxJQUFJLENBQUNDLFdBQVcsR0FBRywrQkFBK0JaLFdBQVdhLHlCQUF5QixFQUFFVCxJQUFJLENBQUMsQ0FBQ1UsTUFBTUEsSUFBSUMsSUFBSSxJQUFJWCxJQUFJLENBQUMsQ0FBQ0M7b0JBQzFMRSxPQUFPQyxvQkFBb0IsR0FBR0g7b0JBQzlCLE9BQU9BLFNBQVNJLEtBQUs7Z0JBQ3pCLEdBQUdPLEtBQUssQ0FBQyxDQUFDQztvQkFDTkMsUUFBUUMsR0FBRyxDQUFDLHFDQUFxQ0Y7b0JBQ2pELE1BQU0sSUFBSUcsTUFBTSwwRkFBMEY7Z0JBQzlHLEVBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUNWLHdCQUF3QjtZQUN4QztRQUNKO0lBQ0o7SUFDQVcsZ0JBQWdCO1FBQ1osSUFBSW5CLEtBQXFDLEVBQUUsRUFJMUMsTUFBTTtZQUNILElBQUlLLE9BQU9vQix5QkFBeUIsRUFBRTtnQkFDbEMsT0FBT3BCLE9BQU9vQix5QkFBeUI7WUFDM0MsT0FBTztnQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDQywwQkFBMEIsRUFBRTtvQkFDbEMsMkVBQTJFO29CQUMzRSxhQUFhO29CQUNiLElBQUksQ0FBQ0EsMEJBQTBCLEdBQUdqQixNQUFNLElBQUksQ0FBQ0MsV0FBVyxHQUFHLG1CQUFtQixJQUFJLENBQUNpQixPQUFPLEdBQUcsTUFBTTdCLFdBQVc4Qix1QkFBdUIsRUFBRTFCLElBQUksQ0FBQyxDQUFDVSxNQUFNQSxJQUFJQyxJQUFJLElBQUlYLElBQUksQ0FBQyxDQUFDMkI7d0JBQ2pLeEIsT0FBT29CLHlCQUF5QixHQUFHSTt3QkFDbkMsT0FBT0E7b0JBQ1gsR0FBR2YsS0FBSyxDQUFDLENBQUNDO3dCQUNOQyxRQUFRQyxHQUFHLENBQUMsMENBQTBDRjtvQkFDMUQ7Z0JBQ0o7Z0JBQ0Esd0RBQXdEO2dCQUN4RCxPQUFPLElBQUksQ0FBQ1csMEJBQTBCO1lBQzFDO1FBQ0o7SUFDSjtJQUNBSSxZQUFZQyxNQUFNLEVBQUU7UUFDaEIsTUFBTSxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdIO1FBQ2pDLE1BQU0sRUFBRUksVUFBVUMsWUFBWSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRzNDLGtCQUFrQjRDLGdCQUFnQixFQUFFTjtRQUMxRixNQUFNLEVBQUVFLFVBQVVLLFVBQVUsRUFBRSxHQUFHLENBQUMsR0FBRzdDLGtCQUFrQjRDLGdCQUFnQixFQUFFUDtRQUN6RSxNQUFNUyxRQUFRLENBQUMsR0FBRzdDLHFCQUFxQjhDLG1CQUFtQixFQUFFTjtRQUM1RCxJQUFJSyxLQUFLLENBQUMsRUFBRSxLQUFLLEtBQUs7WUFDbEIsTUFBTSxJQUFJdkIsTUFBTSw4Q0FBOEN1QixRQUFRO1FBQzFFO1FBQ0EsTUFBTUUsaUJBQWlCLENBQUNDO1lBQ3BCLE1BQU1DLFlBQVksQ0FBQyxHQUFHdEQsdUJBQXVCdUQsT0FBTyxFQUFFLENBQUMsR0FBR2xELHFCQUFxQjhDLG1CQUFtQixFQUFFLENBQUMsR0FBR2pELFdBQVdzRCxTQUFTLEVBQUVILE1BQU1WLFVBQVU7WUFDOUksT0FBTyxDQUFDLEdBQUc3QyxhQUFhMkQsV0FBVyxFQUFFLGlCQUFpQixJQUFJLENBQUNyQixPQUFPLEdBQUdrQixZQUFZUCxRQUFRO1FBQzdGO1FBQ0EsT0FBT0ssZUFBZVosT0FBT2tCLGlCQUFpQixHQUFHVCxhQUFhLENBQUMsR0FBRzlDLFdBQVd3RCxjQUFjLEVBQUVULFNBQVMsQ0FBQyxHQUFHbkQsZUFBZTZELGFBQWEsRUFBRWYsY0FBY0ksWUFBWUgsT0FBT2UsTUFBTSxHQUFHWDtJQUN0TDtJQUNBWSxPQUFPLGlDQUFpQyxHQUFHWixLQUFLLEVBQUU7UUFDOUMsT0FBTyxJQUFJLENBQUNhLG1CQUFtQixDQUFDcEQsSUFBSSxDQUFDLENBQUNDLFdBQVdBLFNBQVNvRCxHQUFHLENBQUNkO0lBQ2xFO0lBQ0FlLFNBQVNmLEtBQUssRUFBRTtRQUNaLE9BQU8sSUFBSSxDQUFDZ0IsV0FBVyxDQUFDQyxTQUFTLENBQUNqQixPQUFPdkMsSUFBSSxDQUFDLENBQUNVO1lBQzNDLElBQUksZUFBZUEsS0FBSztnQkFDcEIsT0FBTztvQkFDSCtDLE1BQU0vQyxJQUFJZ0QsU0FBUztvQkFDbkJDLEtBQUtqRCxJQUFJOUIsT0FBTztvQkFDaEJnRixhQUFhbEQsSUFBSW1ELE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLENBQUNDLElBQUs7NEJBQzFCaEMsTUFBTWdDLEVBQUVoQyxJQUFJOzRCQUNaaUMsTUFBTUQsRUFBRUUsT0FBTzt3QkFDbkI7Z0JBQ1I7WUFDSjtZQUNBLE1BQU12RCxJQUFJd0QsS0FBSztRQUNuQjtJQUNKO0lBQ0FDLFNBQVM1QixLQUFLLEVBQUU7UUFDWixPQUFPLElBQUksQ0FBQ2dCLFdBQVcsQ0FBQ1ksUUFBUSxDQUFDNUI7SUFDckM7SUFDQTZCLFlBQVkzQyxPQUFPLEVBQUVqQixXQUFXLENBQUM7UUFDN0IsSUFBSSxDQUFDK0MsV0FBVyxHQUFHLENBQUMsR0FBRzVELGFBQWEwRSxpQkFBaUIsRUFBRTdEO1FBQ3ZELElBQUksQ0FBQ2lCLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNqQixXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQzRDLG1CQUFtQixHQUFHLElBQUlrQixRQUFRLENBQUNDO1lBQ3BDLElBQUlwRSxPQUFPcUUsY0FBYyxFQUFFO2dCQUN2QkQsUUFBUXBFLE9BQU9xRSxjQUFjO1lBQ2pDLE9BQU87Z0JBQ0hyRSxPQUFPc0UsaUJBQWlCLEdBQUc7b0JBQ3ZCRixRQUFRcEUsT0FBT3FFLGNBQWM7Z0JBQ2pDO1lBQ0o7UUFDSjtJQUNKO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBTzVGLFFBQVFnRSxPQUFPLEtBQUssY0FBZSxPQUFPaEUsUUFBUWdFLE9BQU8sS0FBSyxZQUFZaEUsUUFBUWdFLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2hFLFFBQVFnRSxPQUFPLENBQUM4QixVQUFVLEtBQUssYUFBYTtJQUNyS2hHLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWdFLE9BQU8sRUFBRSxjQUFjO1FBQUUvRCxPQUFPO0lBQUs7SUFDbkVILE9BQU9pRyxNQUFNLENBQUMvRixRQUFRZ0UsT0FBTyxFQUFFaEU7SUFDL0JnRyxPQUFPaEcsT0FBTyxHQUFHQSxRQUFRZ0UsT0FBTztBQUNsQyxFQUVBLHVDQUF1QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9wYWdlLWxvYWRlci5qcz9lODdhIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUGFnZUxvYWRlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfYWRkYmFzZXBhdGggPSByZXF1aXJlKFwiLi9hZGQtYmFzZS1wYXRoXCIpO1xuY29uc3QgX2ludGVycG9sYXRlYXMgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJwb2xhdGUtYXNcIik7XG5jb25zdCBfZ2V0YXNzZXRwYXRoZnJvbXJvdXRlID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LWFzc2V0LXBhdGgtZnJvbS1yb3V0ZVwiKSk7XG5jb25zdCBfYWRkbG9jYWxlID0gcmVxdWlyZShcIi4vYWRkLWxvY2FsZVwiKTtcbmNvbnN0IF9pc2R5bmFtaWMgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pY1wiKTtcbmNvbnN0IF9wYXJzZXJlbGF0aXZldXJsID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXJlbGF0aXZlLXVybFwiKTtcbmNvbnN0IF9yZW1vdmV0cmFpbGluZ3NsYXNoID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS10cmFpbGluZy1zbGFzaFwiKTtcbmNvbnN0IF9yb3V0ZWxvYWRlciA9IHJlcXVpcmUoXCIuL3JvdXRlLWxvYWRlclwiKTtcbmNvbnN0IF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9jb25zdGFudHNcIik7XG5jbGFzcyBQYWdlTG9hZGVyIHtcbiAgICBnZXRQYWdlTGlzdCgpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfcm91dGVsb2FkZXIuZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCkoKS50aGVuKChtYW5pZmVzdCk9Pm1hbmlmZXN0LnNvcnRlZFBhZ2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuX19ERVZfUEFHRVNfTUFOSUZFU1QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93Ll9fREVWX1BBR0VTX01BTklGRVNULnBhZ2VzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb21pc2VkRGV2UGFnZXNNYW5pZmVzdCB8fCAodGhpcy5wcm9taXNlZERldlBhZ2VzTWFuaWZlc3QgPSBmZXRjaCh0aGlzLmFzc2V0UHJlZml4ICsgXCIvX25leHQvc3RhdGljL2RldmVsb3BtZW50L1wiICsgX2NvbnN0YW50cy5ERVZfQ0xJRU5UX1BBR0VTX01BTklGRVNUKS50aGVuKChyZXMpPT5yZXMuanNvbigpKS50aGVuKChtYW5pZmVzdCk9PntcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Ll9fREVWX1BBR0VTX01BTklGRVNUID0gbWFuaWZlc3Q7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYW5pZmVzdC5wYWdlcztcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZhaWxlZCB0byBmZXRjaCBkZXZQYWdlc01hbmlmZXN0OlwiLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZmV0Y2ggX2RldlBhZ2VzTWFuaWZlc3QuanNvbi4gSXMgc29tZXRoaW5nIGJsb2NraW5nIHRoYXQgbmV0d29yayByZXF1ZXN0P1xcblwiICsgXCJSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2ZhaWxlZC10by1mZXRjaC1kZXZwYWdlc21hbmlmZXN0XCIpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlZERldlBhZ2VzTWFuaWZlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TWlkZGxld2FyZSgpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgY29uc3QgbWlkZGxld2FyZU1hdGNoZXJzID0gcHJvY2Vzcy5lbnYuX19ORVhUX01JRERMRVdBUkVfTUFUQ0hFUlM7XG4gICAgICAgICAgICB3aW5kb3cuX19NSURETEVXQVJFX01BVENIRVJTID0gbWlkZGxld2FyZU1hdGNoZXJzID8gbWlkZGxld2FyZU1hdGNoZXJzIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5fX01JRERMRVdBUkVfTUFUQ0hFUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAod2luZG93Ll9fREVWX01JRERMRVdBUkVfTUFUQ0hFUlMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93Ll9fREVWX01JRERMRVdBUkVfTUFUQ0hFUlM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wcm9taXNlZE1pZGRsZXdhcmVNYXRjaGVycykge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBEZWNpZGUgd2hhdCBzaG91bGQgaGFwcGVuIHdoZW4gZmV0Y2hpbmcgZmFpbHMgaW5zdGVhZCBvZiBhc3NlcnRpbmdcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2VkTWlkZGxld2FyZU1hdGNoZXJzID0gZmV0Y2godGhpcy5hc3NldFByZWZpeCArIFwiL19uZXh0L3N0YXRpYy9cIiArIHRoaXMuYnVpbGRJZCArIFwiL1wiICsgX2NvbnN0YW50cy5ERVZfTUlERExFV0FSRV9NQU5JRkVTVCkudGhlbigocmVzKT0+cmVzLmpzb24oKSkudGhlbigobWF0Y2hlcnMpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuX19ERVZfTUlERExFV0FSRV9NQVRDSEVSUyA9IG1hdGNoZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXJzO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGYWlsZWQgdG8gZmV0Y2ggX2Rldk1pZGRsZXdhcmVNYW5pZmVzdFwiLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVE9ETyBSZW1vdmUgdGhpcyBhc3NlcnRpb24gYXMgdGhpcyBjb3VsZCBiZSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlZE1pZGRsZXdhcmVNYXRjaGVycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXREYXRhSHJlZihwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgeyBhc1BhdGgsIGhyZWYsIGxvY2FsZSB9ID0gcGFyYW1zO1xuICAgICAgICBjb25zdCB7IHBhdGhuYW1lOiBocmVmUGF0aG5hbWUsIHF1ZXJ5LCBzZWFyY2ggfSA9ICgwLCBfcGFyc2VyZWxhdGl2ZXVybC5wYXJzZVJlbGF0aXZlVXJsKShocmVmKTtcbiAgICAgICAgY29uc3QgeyBwYXRobmFtZTogYXNQYXRobmFtZSB9ID0gKDAsIF9wYXJzZXJlbGF0aXZldXJsLnBhcnNlUmVsYXRpdmVVcmwpKGFzUGF0aCk7XG4gICAgICAgIGNvbnN0IHJvdXRlID0gKDAsIF9yZW1vdmV0cmFpbGluZ3NsYXNoLnJlbW92ZVRyYWlsaW5nU2xhc2gpKGhyZWZQYXRobmFtZSk7XG4gICAgICAgIGlmIChyb3V0ZVswXSAhPT0gXCIvXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUm91dGUgbmFtZSBzaG91bGQgc3RhcnQgd2l0aCBhIFwiL1wiLCBnb3QgXCInICsgcm91dGUgKyAnXCInKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnZXRIcmVmRm9yU2x1ZyA9IChwYXRoKT0+e1xuICAgICAgICAgICAgY29uc3QgZGF0YVJvdXRlID0gKDAsIF9nZXRhc3NldHBhdGhmcm9tcm91dGUuZGVmYXVsdCkoKDAsIF9yZW1vdmV0cmFpbGluZ3NsYXNoLnJlbW92ZVRyYWlsaW5nU2xhc2gpKCgwLCBfYWRkbG9jYWxlLmFkZExvY2FsZSkocGF0aCwgbG9jYWxlKSksIFwiLmpzb25cIik7XG4gICAgICAgICAgICByZXR1cm4gKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkoXCIvX25leHQvZGF0YS9cIiArIHRoaXMuYnVpbGRJZCArIGRhdGFSb3V0ZSArIHNlYXJjaCwgdHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBnZXRIcmVmRm9yU2x1ZyhwYXJhbXMuc2tpcEludGVycG9sYXRpb24gPyBhc1BhdGhuYW1lIDogKDAsIF9pc2R5bmFtaWMuaXNEeW5hbWljUm91dGUpKHJvdXRlKSA/ICgwLCBfaW50ZXJwb2xhdGVhcy5pbnRlcnBvbGF0ZUFzKShocmVmUGF0aG5hbWUsIGFzUGF0aG5hbWUsIHF1ZXJ5KS5yZXN1bHQgOiByb3V0ZSk7XG4gICAgfVxuICAgIF9pc1NzZygvKiogdGhlIHJvdXRlIChmaWxlLXN5c3RlbSBwYXRoKSAqLyByb3V0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlZFNzZ01hbmlmZXN0LnRoZW4oKG1hbmlmZXN0KT0+bWFuaWZlc3QuaGFzKHJvdXRlKSk7XG4gICAgfVxuICAgIGxvYWRQYWdlKHJvdXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlTG9hZGVyLmxvYWRSb3V0ZShyb3V0ZSkudGhlbigocmVzKT0+e1xuICAgICAgICAgICAgaWYgKFwiY29tcG9uZW50XCIgaW4gcmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogcmVzLmNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgbW9kOiByZXMuZXhwb3J0cyxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVTaGVldHM6IHJlcy5zdHlsZXMubWFwKChvKT0+KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmOiBvLmhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogby5jb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgcmVzLmVycm9yO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHJlZmV0Y2gocm91dGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVMb2FkZXIucHJlZmV0Y2gocm91dGUpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihidWlsZElkLCBhc3NldFByZWZpeCl7XG4gICAgICAgIHRoaXMucm91dGVMb2FkZXIgPSAoMCwgX3JvdXRlbG9hZGVyLmNyZWF0ZVJvdXRlTG9hZGVyKShhc3NldFByZWZpeCk7XG4gICAgICAgIHRoaXMuYnVpbGRJZCA9IGJ1aWxkSWQ7XG4gICAgICAgIHRoaXMuYXNzZXRQcmVmaXggPSBhc3NldFByZWZpeDtcbiAgICAgICAgdGhpcy5wcm9taXNlZFNzZ01hbmlmZXN0ID0gbmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgICAgICBpZiAod2luZG93Ll9fU1NHX01BTklGRVNUKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh3aW5kb3cuX19TU0dfTUFOSUZFU1QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuX19TU0dfTUFOSUZFU1RfQ0IgPSAoKT0+e1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHdpbmRvdy5fX1NTR19NQU5JRkVTVCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWdlLWxvYWRlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiUGFnZUxvYWRlciIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfYWRkYmFzZXBhdGgiLCJfaW50ZXJwb2xhdGVhcyIsIl9nZXRhc3NldHBhdGhmcm9tcm91dGUiLCJfIiwiX2FkZGxvY2FsZSIsIl9pc2R5bmFtaWMiLCJfcGFyc2VyZWxhdGl2ZXVybCIsIl9yZW1vdmV0cmFpbGluZ3NsYXNoIiwiX3JvdXRlbG9hZGVyIiwiX2NvbnN0YW50cyIsImdldFBhZ2VMaXN0IiwicHJvY2VzcyIsImdldENsaWVudEJ1aWxkTWFuaWZlc3QiLCJ0aGVuIiwibWFuaWZlc3QiLCJzb3J0ZWRQYWdlcyIsIndpbmRvdyIsIl9fREVWX1BBR0VTX01BTklGRVNUIiwicGFnZXMiLCJwcm9taXNlZERldlBhZ2VzTWFuaWZlc3QiLCJmZXRjaCIsImFzc2V0UHJlZml4IiwiREVWX0NMSUVOVF9QQUdFU19NQU5JRkVTVCIsInJlcyIsImpzb24iLCJjYXRjaCIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJFcnJvciIsImdldE1pZGRsZXdhcmUiLCJtaWRkbGV3YXJlTWF0Y2hlcnMiLCJlbnYiLCJfX05FWFRfTUlERExFV0FSRV9NQVRDSEVSUyIsIl9fTUlERExFV0FSRV9NQVRDSEVSUyIsInVuZGVmaW5lZCIsIl9fREVWX01JRERMRVdBUkVfTUFUQ0hFUlMiLCJwcm9taXNlZE1pZGRsZXdhcmVNYXRjaGVycyIsImJ1aWxkSWQiLCJERVZfTUlERExFV0FSRV9NQU5JRkVTVCIsIm1hdGNoZXJzIiwiZ2V0RGF0YUhyZWYiLCJwYXJhbXMiLCJhc1BhdGgiLCJocmVmIiwibG9jYWxlIiwicGF0aG5hbWUiLCJocmVmUGF0aG5hbWUiLCJxdWVyeSIsInNlYXJjaCIsInBhcnNlUmVsYXRpdmVVcmwiLCJhc1BhdGhuYW1lIiwicm91dGUiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwiZ2V0SHJlZkZvclNsdWciLCJwYXRoIiwiZGF0YVJvdXRlIiwiZGVmYXVsdCIsImFkZExvY2FsZSIsImFkZEJhc2VQYXRoIiwic2tpcEludGVycG9sYXRpb24iLCJpc0R5bmFtaWNSb3V0ZSIsImludGVycG9sYXRlQXMiLCJyZXN1bHQiLCJfaXNTc2ciLCJwcm9taXNlZFNzZ01hbmlmZXN0IiwiaGFzIiwibG9hZFBhZ2UiLCJyb3V0ZUxvYWRlciIsImxvYWRSb3V0ZSIsInBhZ2UiLCJjb21wb25lbnQiLCJtb2QiLCJzdHlsZVNoZWV0cyIsInN0eWxlcyIsIm1hcCIsIm8iLCJ0ZXh0IiwiY29udGVudCIsImVycm9yIiwicHJlZmV0Y2giLCJjb25zdHJ1Y3RvciIsImNyZWF0ZVJvdXRlTG9hZGVyIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfX1NTR19NQU5JRkVTVCIsIl9fU1NHX01BTklGRVNUX0NCIiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/page-loader.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/performance-relayer.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/client/performance-relayer.js ***! + \**************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* global location */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\n// copied to prevent pulling in un-necessary utils\nconst WEB_VITALS = [\n \"CLS\",\n \"FCP\",\n \"FID\",\n \"INP\",\n \"LCP\",\n \"TTFB\"\n];\nconst initialHref = location.href;\nlet isRegistered = false;\nlet userReportHandler;\nfunction onReport(metric) {\n if (userReportHandler) {\n userReportHandler(metric);\n }\n // This code is not shipped, executed, or present in the client-side\n // JavaScript bundle unless explicitly enabled in your application.\n //\n // When this feature is enabled, we'll make it very clear by printing a\n // message during the build (`next build`).\n if (false) { var _window___NEXT_DATA__; }\n}\nconst _default = (onPerfEntry)=>{\n // Update function if it changes:\n userReportHandler = onPerfEntry;\n // Only register listeners once:\n if (isRegistered) {\n return;\n }\n isRegistered = true;\n const attributions = undefined;\n for (const webVital of WEB_VITALS){\n try {\n let mod;\n if (false) {}\n if (!mod) {\n mod = __webpack_require__(/*! next/dist/compiled/web-vitals */ \"./node_modules/next/dist/compiled/web-vitals/web-vitals.js\");\n }\n mod[\"on\" + webVital](onReport);\n } catch (err) {\n // Do nothing if the module fails to load\n console.warn(\"Failed to track \" + webVital + \" web-vital\", err);\n }\n }\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=performance-relayer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9wZXJmb3JtYW5jZS1yZWxheWVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQixHQUFnQjtBQUNuQ0EsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLGtEQUFrRDtBQUNsRCxNQUFNQyxhQUFhO0lBQ2Y7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0g7QUFDRCxNQUFNQyxjQUFjQyxTQUFTQyxJQUFJO0FBQ2pDLElBQUlDLGVBQWU7QUFDbkIsSUFBSUM7QUFDSixTQUFTQyxTQUFTQyxNQUFNO0lBQ3BCLElBQUlGLG1CQUFtQjtRQUNuQkEsa0JBQWtCRTtJQUN0QjtJQUNBLG9FQUFvRTtJQUNwRSxtRUFBbUU7SUFDbkUsRUFBRTtJQUNGLHVFQUF1RTtJQUN2RSwyQ0FBMkM7SUFDM0MsSUFBSUMsS0FDMkIsRUFBRSw4QkFtQ2hDO0FBQ0w7QUFDQSxNQUFNVCxXQUFXLENBQUN5QztJQUNkLGlDQUFpQztJQUNqQ25DLG9CQUFvQm1DO0lBQ3BCLGdDQUFnQztJQUNoQyxJQUFJcEMsY0FBYztRQUNkO0lBQ0o7SUFDQUEsZUFBZTtJQUNmLE1BQU1xQyxlQUFlakMsU0FBeUM7SUFDOUQsS0FBSyxNQUFNbUMsWUFBWTNDLFdBQVc7UUFDOUIsSUFBSTtZQUNBLElBQUk0QztZQUNKLElBQUlwQyxLQUE2QyxFQUFFLEVBSWxEO1lBQ0QsSUFBSSxDQUFDb0MsS0FBSztnQkFDTkEsTUFBTUcsbUJBQU9BLENBQUMsaUdBQStCO1lBQ2pEO1lBQ0FILEdBQUcsQ0FBQyxPQUFPRCxTQUFTLENBQUNyQztRQUN6QixFQUFFLE9BQU9pQyxLQUFLO1lBQ1YseUNBQXlDO1lBQ3pDRixRQUFRVyxJQUFJLENBQUMscUJBQXFCTCxXQUFXLGNBQWNKO1FBQy9EO0lBQ0o7QUFDSjtBQUVBLElBQUksQ0FBQyxPQUFPNUMsUUFBUXNELE9BQU8sS0FBSyxjQUFlLE9BQU90RCxRQUFRc0QsT0FBTyxLQUFLLFlBQVl0RCxRQUFRc0QsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPdEQsUUFBUXNELE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDckt6RCxPQUFPQyxjQUFjLENBQUNDLFFBQVFzRCxPQUFPLEVBQUUsY0FBYztRQUFFckQsT0FBTztJQUFLO0lBQ25FSCxPQUFPMEQsTUFBTSxDQUFDeEQsUUFBUXNELE9BQU8sRUFBRXREO0lBQy9CeUQsT0FBT3pELE9BQU8sR0FBR0EsUUFBUXNELE9BQU87QUFDbEMsRUFFQSwrQ0FBK0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcGVyZm9ybWFuY2UtcmVsYXllci5qcz9lZjcxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBsb2NhdGlvbiAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9kZWZhdWx0O1xuICAgIH1cbn0pO1xuLy8gY29waWVkIHRvIHByZXZlbnQgcHVsbGluZyBpbiB1bi1uZWNlc3NhcnkgdXRpbHNcbmNvbnN0IFdFQl9WSVRBTFMgPSBbXG4gICAgXCJDTFNcIixcbiAgICBcIkZDUFwiLFxuICAgIFwiRklEXCIsXG4gICAgXCJJTlBcIixcbiAgICBcIkxDUFwiLFxuICAgIFwiVFRGQlwiXG5dO1xuY29uc3QgaW5pdGlhbEhyZWYgPSBsb2NhdGlvbi5ocmVmO1xubGV0IGlzUmVnaXN0ZXJlZCA9IGZhbHNlO1xubGV0IHVzZXJSZXBvcnRIYW5kbGVyO1xuZnVuY3Rpb24gb25SZXBvcnQobWV0cmljKSB7XG4gICAgaWYgKHVzZXJSZXBvcnRIYW5kbGVyKSB7XG4gICAgICAgIHVzZXJSZXBvcnRIYW5kbGVyKG1ldHJpYyk7XG4gICAgfVxuICAgIC8vIFRoaXMgY29kZSBpcyBub3Qgc2hpcHBlZCwgZXhlY3V0ZWQsIG9yIHByZXNlbnQgaW4gdGhlIGNsaWVudC1zaWRlXG4gICAgLy8gSmF2YVNjcmlwdCBidW5kbGUgdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZCBpbiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgIC8vXG4gICAgLy8gV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgd2UnbGwgbWFrZSBpdCB2ZXJ5IGNsZWFyIGJ5IHByaW50aW5nIGFcbiAgICAvLyBtZXNzYWdlIGR1cmluZyB0aGUgYnVpbGQgKGBuZXh0IGJ1aWxkYCkuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiAmJiAvLyBUaGlzIGZpZWxkIGlzIGVtcHR5IHVubGVzcyB5b3UgZXhwbGljaXRseSBjb25maWd1cmUgaXQ6XG4gICAgcHJvY2Vzcy5lbnYuX19ORVhUX0FOQUxZVElDU19JRCkge1xuICAgICAgICB2YXIgX3dpbmRvd19fX05FWFRfREFUQV9fO1xuICAgICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICAgICAgZHNuOiBwcm9jZXNzLmVudi5fX05FWFRfQU5BTFlUSUNTX0lELFxuICAgICAgICAgICAgaWQ6IG1ldHJpYy5pZCxcbiAgICAgICAgICAgIHBhZ2U6IChfd2luZG93X19fTkVYVF9EQVRBX18gPSB3aW5kb3cuX19ORVhUX0RBVEFfXykgPT0gbnVsbCA/IHZvaWQgMCA6IF93aW5kb3dfX19ORVhUX0RBVEFfXy5wYWdlLFxuICAgICAgICAgICAgaHJlZjogaW5pdGlhbEhyZWYsXG4gICAgICAgICAgICBldmVudF9uYW1lOiBtZXRyaWMubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBtZXRyaWMudmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHNwZWVkOiBcImNvbm5lY3Rpb25cIiBpbiBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yW1wiY29ubmVjdGlvblwiXSAmJiBcImVmZmVjdGl2ZVR5cGVcIiBpbiBuYXZpZ2F0b3JbXCJjb25uZWN0aW9uXCJdID8gbmF2aWdhdG9yW1wiY29ubmVjdGlvblwiXVtcImVmZmVjdGl2ZVR5cGVcIl0gOiBcIlwiXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbXG4gICAgICAgICAgICBuZXcgVVJMU2VhcmNoUGFyYW1zKGJvZHkpLnRvU3RyaW5nKClcbiAgICAgICAgXSwge1xuICAgICAgICAgICAgLy8gVGhpcyBjb250ZW50IHR5cGUgaXMgbmVjZXNzYXJ5IGZvciBgc2VuZEJlYWNvbmA6XG4gICAgICAgICAgICB0eXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2aXRhbHNVcmwgPSBcImh0dHBzOi8vdml0YWxzLnZlcmNlbC1pbnNpZ2h0cy5jb20vdjEvdml0YWxzXCI7XG4gICAgICAgIC8vIE5hdmlnYXRvciBoYXMgdG8gYmUgYm91bmQgdG8gZW5zdXJlIGl0IGRvZXMgbm90IGVycm9yIGluIHNvbWUgYnJvd3NlcnNcbiAgICAgICAgLy8gaHR0cHM6Ly94Z3dhbmcubWUvcG9zdHMveW91LW1heS1ub3Qta25vdy1iZWFjb24vI2l0LW1heS10aHJvdy1lcnJvciUyQy1iZS1zdXJlLXRvLWNhdGNoXG4gICAgICAgIGNvbnN0IHNlbmQgPSBuYXZpZ2F0b3Iuc2VuZEJlYWNvbiAmJiBuYXZpZ2F0b3Iuc2VuZEJlYWNvbi5iaW5kKG5hdmlnYXRvcik7XG4gICAgICAgIGZ1bmN0aW9uIGZhbGxiYWNrU2VuZCgpIHtcbiAgICAgICAgICAgIGZldGNoKHZpdGFsc1VybCwge1xuICAgICAgICAgICAgICAgIGJvZHk6IGJsb2IsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogXCJvbWl0XCIsXG4gICAgICAgICAgICAgICAga2VlcGFsaXZlOiB0cnVlXG4gICAgICAgICAgICB9KS5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSWYgc2VuZCBpcyB1bmRlZmluZWQgaXQnbGwgdGhyb3cgYXMgd2VsbC4gVGhpcyByZWR1Y2VzIG91dHB1dCBjb2RlIHNpemUuXG4gICAgICAgICAgICBzZW5kKHZpdGFsc1VybCwgYmxvYikgfHwgZmFsbGJhY2tTZW5kKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZmFsbGJhY2tTZW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5jb25zdCBfZGVmYXVsdCA9IChvblBlcmZFbnRyeSk9PntcbiAgICAvLyBVcGRhdGUgZnVuY3Rpb24gaWYgaXQgY2hhbmdlczpcbiAgICB1c2VyUmVwb3J0SGFuZGxlciA9IG9uUGVyZkVudHJ5O1xuICAgIC8vIE9ubHkgcmVnaXN0ZXIgbGlzdGVuZXJzIG9uY2U6XG4gICAgaWYgKGlzUmVnaXN0ZXJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzUmVnaXN0ZXJlZCA9IHRydWU7XG4gICAgY29uc3QgYXR0cmlidXRpb25zID0gcHJvY2Vzcy5lbnYuX19ORVhUX1dFQl9WSVRBTFNfQVRUUklCVVRJT047XG4gICAgZm9yIChjb25zdCB3ZWJWaXRhbCBvZiBXRUJfVklUQUxTKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBtb2Q7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19XRUJfVklUQUxTX0FUVFJJQlVUSU9OKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogYXR0cmlidXRpb25zLmluY2x1ZGVzKHdlYlZpdGFsKSkge1xuICAgICAgICAgICAgICAgICAgICBtb2QgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3dlYi12aXRhbHMtYXR0cmlidXRpb25cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFtb2QpIHtcbiAgICAgICAgICAgICAgICBtb2QgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3dlYi12aXRhbHNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtb2RbXCJvblwiICsgd2ViVml0YWxdKG9uUmVwb3J0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nIGlmIHRoZSBtb2R1bGUgZmFpbHMgdG8gbG9hZFxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIHRyYWNrIFwiICsgd2ViVml0YWwgKyBcIiB3ZWItdml0YWxcIiwgZXJyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBlcmZvcm1hbmNlLXJlbGF5ZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIl9kZWZhdWx0IiwiV0VCX1ZJVEFMUyIsImluaXRpYWxIcmVmIiwibG9jYXRpb24iLCJocmVmIiwiaXNSZWdpc3RlcmVkIiwidXNlclJlcG9ydEhhbmRsZXIiLCJvblJlcG9ydCIsIm1ldHJpYyIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfQU5BTFlUSUNTX0lEIiwiX3dpbmRvd19fX05FWFRfREFUQV9fIiwiYm9keSIsImRzbiIsImlkIiwicGFnZSIsIndpbmRvdyIsIl9fTkVYVF9EQVRBX18iLCJldmVudF9uYW1lIiwibmFtZSIsInRvU3RyaW5nIiwic3BlZWQiLCJuYXZpZ2F0b3IiLCJibG9iIiwiQmxvYiIsIlVSTFNlYXJjaFBhcmFtcyIsInR5cGUiLCJ2aXRhbHNVcmwiLCJzZW5kIiwic2VuZEJlYWNvbiIsImJpbmQiLCJmYWxsYmFja1NlbmQiLCJmZXRjaCIsIm1ldGhvZCIsImNyZWRlbnRpYWxzIiwia2VlcGFsaXZlIiwiY2F0Y2giLCJjb25zb2xlIiwiZXJyb3IiLCJlcnIiLCJvblBlcmZFbnRyeSIsImF0dHJpYnV0aW9ucyIsIl9fTkVYVF9XRUJfVklUQUxTX0FUVFJJQlVUSU9OIiwid2ViVml0YWwiLCJtb2QiLCJfX05FWFRfSEFTX1dFQl9WSVRBTFNfQVRUUklCVVRJT04iLCJpbmNsdWRlcyIsInJlcXVpcmUiLCJ3YXJuIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/performance-relayer.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/portal/index.js": +/*!*******************************************************!*\ + !*** ./node_modules/next/dist/client/portal/index.js ***! + \*******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Portal\", ({\n enumerable: true,\n get: function() {\n return Portal;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nconst _reactdom = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\nconst Portal = (param)=>{\n let { children, type } = param;\n const [portalNode, setPortalNode] = (0, _react.useState)(null);\n (0, _react.useEffect)(()=>{\n const element = document.createElement(type);\n document.body.appendChild(element);\n setPortalNode(element);\n return ()=>{\n document.body.removeChild(element);\n };\n }, [\n type\n ]);\n return portalNode ? /*#__PURE__*/ (0, _reactdom.createPortal)(children, portalNode) : null;\n};\n_c = Portal;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=index.js.map\nvar _c;\n$RefreshReg$(_c, \"Portal\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9wb3J0YWwvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDBDQUF5QztJQUNyQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLFNBQVNDLG1CQUFPQSxDQUFDLDRDQUFPO0FBQzlCLE1BQU1DLFlBQVlELG1CQUFPQSxDQUFDLG9EQUFXO0FBQ3JDLE1BQU1GLFNBQVMsQ0FBQ0k7SUFDWixJQUFJLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFLEdBQUdGO0lBQ3pCLE1BQU0sQ0FBQ0csWUFBWUMsY0FBYyxHQUFHLENBQUMsR0FBR1AsT0FBT1EsUUFBUSxFQUFFO0lBQ3hELElBQUdSLE9BQU9TLFNBQVMsRUFBRTtRQUNsQixNQUFNQyxVQUFVQyxTQUFTQyxhQUFhLENBQUNQO1FBQ3ZDTSxTQUFTRSxJQUFJLENBQUNDLFdBQVcsQ0FBQ0o7UUFDMUJILGNBQWNHO1FBQ2QsT0FBTztZQUNIQyxTQUFTRSxJQUFJLENBQUNFLFdBQVcsQ0FBQ0w7UUFDOUI7SUFDSixHQUFHO1FBQ0NMO0tBQ0g7SUFDRCxPQUFPQyxhQUEyQixXQUFILEdBQUksSUFBR0osVUFBVWMsWUFBWSxFQUFFWixVQUFVRSxjQUFjO0FBQzFGO0tBZE1QO0FBZ0JOLElBQUksQ0FBQyxPQUFPSixRQUFRc0IsT0FBTyxLQUFLLGNBQWUsT0FBT3RCLFFBQVFzQixPQUFPLEtBQUssWUFBWXRCLFFBQVFzQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU90QixRQUFRc0IsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3pCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUXNCLE9BQU8sRUFBRSxjQUFjO1FBQUVyQixPQUFPO0lBQUs7SUFDbkVILE9BQU8wQixNQUFNLENBQUN4QixRQUFRc0IsT0FBTyxFQUFFdEI7SUFDL0J5QixPQUFPekIsT0FBTyxHQUFHQSxRQUFRc0IsT0FBTztBQUNsQyxFQUVBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9wb3J0YWwvaW5kZXguanM/MzFhMiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBvcnRhbFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUG9ydGFsO1xuICAgIH1cbn0pO1xuY29uc3QgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuY29uc3QgX3JlYWN0ZG9tID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTtcbmNvbnN0IFBvcnRhbCA9IChwYXJhbSk9PntcbiAgICBsZXQgeyBjaGlsZHJlbiwgdHlwZSB9ID0gcGFyYW07XG4gICAgY29uc3QgW3BvcnRhbE5vZGUsIHNldFBvcnRhbE5vZGVdID0gKDAsIF9yZWFjdC51c2VTdGF0ZSkobnVsbCk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICBzZXRQb3J0YWxOb2RlKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICB0eXBlXG4gICAgXSk7XG4gICAgcmV0dXJuIHBvcnRhbE5vZGUgPyAvKiNfX1BVUkVfXyovICgwLCBfcmVhY3Rkb20uY3JlYXRlUG9ydGFsKShjaGlsZHJlbiwgcG9ydGFsTm9kZSkgOiBudWxsO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIlBvcnRhbCIsIl9yZWFjdCIsInJlcXVpcmUiLCJfcmVhY3Rkb20iLCJwYXJhbSIsImNoaWxkcmVuIiwidHlwZSIsInBvcnRhbE5vZGUiLCJzZXRQb3J0YWxOb2RlIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJlbGVtZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJjcmVhdGVQb3J0YWwiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/portal/index.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/remove-base-path.js": +/*!***********************************************************!*\ + !*** ./node_modules/next/dist/client/remove-base-path.js ***! + \***********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeBasePath\", ({\n enumerable: true,\n get: function() {\n return removeBasePath;\n }\n}));\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"./node_modules/next/dist/client/has-base-path.js\");\nconst basePath = false || \"\";\nfunction removeBasePath(path) {\n if (false) {}\n // Can't trim the basePath if it has zero length!\n if (basePath.length === 0) return path;\n path = path.slice(basePath.length);\n if (!path.startsWith(\"/\")) path = \"/\" + path;\n return path;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=remove-base-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZW1vdmUtYmFzZS1wYXRoLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxrREFBaUQ7SUFDN0NJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxlQUFlQyxtQkFBT0EsQ0FBQyx5RUFBaUI7QUFDOUMsTUFBTUMsV0FBV0MsTUFBa0MsSUFBSTtBQUN2RCxTQUFTSixlQUFlTyxJQUFJO0lBQ3hCLElBQUlILEtBQTBDLEVBQUUsRUFJL0M7SUFDRCxpREFBaUQ7SUFDakQsSUFBSUQsU0FBU08sTUFBTSxLQUFLLEdBQUcsT0FBT0g7SUFDbENBLE9BQU9BLEtBQUtJLEtBQUssQ0FBQ1IsU0FBU08sTUFBTTtJQUNqQyxJQUFJLENBQUNILEtBQUtLLFVBQVUsQ0FBQyxNQUFNTCxPQUFPLE1BQU1BO0lBQ3hDLE9BQU9BO0FBQ1g7QUFFQSxJQUFJLENBQUMsT0FBT1gsUUFBUWlCLE9BQU8sS0FBSyxjQUFlLE9BQU9qQixRQUFRaUIsT0FBTyxLQUFLLFlBQVlqQixRQUFRaUIsT0FBTyxLQUFLLElBQUksS0FBTSxPQUFPakIsUUFBUWlCLE9BQU8sQ0FBQ0MsVUFBVSxLQUFLLGFBQWE7SUFDcktwQixPQUFPQyxjQUFjLENBQUNDLFFBQVFpQixPQUFPLEVBQUUsY0FBYztRQUFFaEIsT0FBTztJQUFLO0lBQ25FSCxPQUFPcUIsTUFBTSxDQUFDbkIsUUFBUWlCLE9BQU8sRUFBRWpCO0lBQy9Cb0IsT0FBT3BCLE9BQU8sR0FBR0EsUUFBUWlCLE9BQU87QUFDbEMsRUFFQSw0Q0FBNEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVtb3ZlLWJhc2UtcGF0aC5qcz9iNGYxIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVtb3ZlQmFzZVBhdGhcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZUJhc2VQYXRoO1xuICAgIH1cbn0pO1xuY29uc3QgX2hhc2Jhc2VwYXRoID0gcmVxdWlyZShcIi4vaGFzLWJhc2UtcGF0aFwiKTtcbmNvbnN0IGJhc2VQYXRoID0gcHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCB8fCBcIlwiO1xuZnVuY3Rpb24gcmVtb3ZlQmFzZVBhdGgocGF0aCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEgpIHtcbiAgICAgICAgaWYgKCEoMCwgX2hhc2Jhc2VwYXRoLmhhc0Jhc2VQYXRoKShwYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ2FuJ3QgdHJpbSB0aGUgYmFzZVBhdGggaWYgaXQgaGFzIHplcm8gbGVuZ3RoIVxuICAgIGlmIChiYXNlUGF0aC5sZW5ndGggPT09IDApIHJldHVybiBwYXRoO1xuICAgIHBhdGggPSBwYXRoLnNsaWNlKGJhc2VQYXRoLmxlbmd0aCk7XG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSBwYXRoID0gXCIvXCIgKyBwYXRoO1xuICAgIHJldHVybiBwYXRoO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZW1vdmUtYmFzZS1wYXRoLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJyZW1vdmVCYXNlUGF0aCIsIl9oYXNiYXNlcGF0aCIsInJlcXVpcmUiLCJiYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUk9VVEVSX0JBU0VQQVRIIiwicGF0aCIsIl9fTkVYVF9NQU5VQUxfQ0xJRU5UX0JBU0VfUEFUSCIsImhhc0Jhc2VQYXRoIiwibGVuZ3RoIiwic2xpY2UiLCJzdGFydHNXaXRoIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/remove-base-path.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/remove-locale.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/client/remove-locale.js ***! + \********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeLocale\", ({\n enumerable: true,\n get: function() {\n return removeLocale;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction removeLocale(path, locale) {\n if (false) {}\n return path;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=remove-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZW1vdmUtbG9jYWxlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxnREFBK0M7SUFDM0NJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxhQUFhQyxtQkFBT0EsQ0FBQyw2R0FBdUM7QUFDbEUsU0FBU0YsYUFBYUcsSUFBSSxFQUFFQyxNQUFNO0lBQzlCLElBQUlDLEtBQStCLEVBQUUsRUFLcEM7SUFDRCxPQUFPRjtBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU9QLFFBQVFvQixPQUFPLEtBQUssY0FBZSxPQUFPcEIsUUFBUW9CLE9BQU8sS0FBSyxZQUFZcEIsUUFBUW9CLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3BCLFFBQVFvQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdkIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRb0IsT0FBTyxFQUFFLGNBQWM7UUFBRW5CLE9BQU87SUFBSztJQUNuRUgsT0FBT3dCLE1BQU0sQ0FBQ3RCLFFBQVFvQixPQUFPLEVBQUVwQjtJQUMvQnVCLE9BQU92QixPQUFPLEdBQUdBLFFBQVFvQixPQUFPO0FBQ2xDLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JlbW92ZS1sb2NhbGUuanM/NDc1MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlbW92ZUxvY2FsZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlTG9jYWxlO1xuICAgIH1cbn0pO1xuY29uc3QgX3BhcnNlcGF0aCA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1wYXRoXCIpO1xuZnVuY3Rpb24gcmVtb3ZlTG9jYWxlKHBhdGgsIGxvY2FsZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgICAgIGNvbnN0IHsgcGF0aG5hbWUgfSA9ICgwLCBfcGFyc2VwYXRoLnBhcnNlUGF0aCkocGF0aCk7XG4gICAgICAgIGNvbnN0IHBhdGhMb3dlciA9IHBhdGhuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGxvY2FsZUxvd2VyID0gbG9jYWxlID09IG51bGwgPyB2b2lkIDAgOiBsb2NhbGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGxvY2FsZSAmJiAocGF0aExvd2VyLnN0YXJ0c1dpdGgoXCIvXCIgKyBsb2NhbGVMb3dlciArIFwiL1wiKSB8fCBwYXRoTG93ZXIgPT09IFwiL1wiICsgbG9jYWxlTG93ZXIpID8gXCJcIiArIChwYXRobmFtZS5sZW5ndGggPT09IGxvY2FsZS5sZW5ndGggKyAxID8gXCIvXCIgOiBcIlwiKSArIHBhdGguc2xpY2UobG9jYWxlLmxlbmd0aCArIDEpIDogcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGg7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlbW92ZS1sb2NhbGUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInJlbW92ZUxvY2FsZSIsIl9wYXJzZXBhdGgiLCJyZXF1aXJlIiwicGF0aCIsImxvY2FsZSIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfSTE4Tl9TVVBQT1JUIiwicGF0aG5hbWUiLCJwYXJzZVBhdGgiLCJwYXRoTG93ZXIiLCJ0b0xvd2VyQ2FzZSIsImxvY2FsZUxvd2VyIiwic3RhcnRzV2l0aCIsImxlbmd0aCIsInNsaWNlIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/remove-locale.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/request-idle-callback.js": +/*!****************************************************************!*\ + !*** ./node_modules/next/dist/client/request-idle-callback.js ***! + \****************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n requestIdleCallback: function() {\n return requestIdleCallback;\n },\n cancelIdleCallback: function() {\n return cancelIdleCallback;\n }\n});\nconst requestIdleCallback = typeof self !== \"undefined\" && self.requestIdleCallback && self.requestIdleCallback.bind(window) || function(cb) {\n let start = Date.now();\n return self.setTimeout(function() {\n cb({\n didTimeout: false,\n timeRemaining: function() {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n};\nconst cancelIdleCallback = typeof self !== \"undefined\" && self.cancelIdleCallback && self.cancelIdleCallback.bind(window) || function(id) {\n return clearTimeout(id);\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=request-idle-callback.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZXF1ZXN0LWlkbGUtY2FsbGJhY2suanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLG9CQUFvQjtRQUNoQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNRCxzQkFBc0IsT0FBT1EsU0FBUyxlQUFlQSxLQUFLUixtQkFBbUIsSUFBSVEsS0FBS1IsbUJBQW1CLENBQUNTLElBQUksQ0FBQ0MsV0FBVyxTQUFTQyxFQUFFO0lBQ3ZJLElBQUlDLFFBQVFDLEtBQUtDLEdBQUc7SUFDcEIsT0FBT04sS0FBS08sVUFBVSxDQUFDO1FBQ25CSixHQUFHO1lBQ0NLLFlBQVk7WUFDWkMsZUFBZTtnQkFDWCxPQUFPQyxLQUFLQyxHQUFHLENBQUMsR0FBRyxLQUFNTixDQUFBQSxLQUFLQyxHQUFHLEtBQUtGLEtBQUk7WUFDOUM7UUFDSjtJQUNKLEdBQUc7QUFDUDtBQUNBLE1BQU1YLHFCQUFxQixPQUFPTyxTQUFTLGVBQWVBLEtBQUtQLGtCQUFrQixJQUFJTyxLQUFLUCxrQkFBa0IsQ0FBQ1EsSUFBSSxDQUFDQyxXQUFXLFNBQVNVLEVBQUU7SUFDcEksT0FBT0MsYUFBYUQ7QUFDeEI7QUFFQSxJQUFJLENBQUMsT0FBT3ZCLFFBQVF5QixPQUFPLEtBQUssY0FBZSxPQUFPekIsUUFBUXlCLE9BQU8sS0FBSyxZQUFZekIsUUFBUXlCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3pCLFFBQVF5QixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLNUIsT0FBT0MsY0FBYyxDQUFDQyxRQUFReUIsT0FBTyxFQUFFLGNBQWM7UUFBRXhCLE9BQU87SUFBSztJQUNuRUgsT0FBTzZCLE1BQU0sQ0FBQzNCLFFBQVF5QixPQUFPLEVBQUV6QjtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFReUIsT0FBTztBQUNsQyxFQUVBLGlEQUFpRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZXF1ZXN0LWlkbGUtY2FsbGJhY2suanM/MWUyMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2s6IG51bGwsXG4gICAgY2FuY2VsSWRsZUNhbGxiYWNrOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmVxdWVzdElkbGVDYWxsYmFjaztcbiAgICB9LFxuICAgIGNhbmNlbElkbGVDYWxsYmFjazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjYW5jZWxJZGxlQ2FsbGJhY2s7XG4gICAgfVxufSk7XG5jb25zdCByZXF1ZXN0SWRsZUNhbGxiYWNrID0gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZi5yZXF1ZXN0SWRsZUNhbGxiYWNrICYmIHNlbGYucmVxdWVzdElkbGVDYWxsYmFjay5iaW5kKHdpbmRvdykgfHwgZnVuY3Rpb24oY2IpIHtcbiAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBzZWxmLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIGNiKHtcbiAgICAgICAgICAgIGRpZFRpbWVvdXQ6IGZhbHNlLFxuICAgICAgICAgICAgdGltZVJlbWFpbmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIDUwIC0gKERhdGUubm93KCkgLSBzdGFydCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LCAxKTtcbn07XG5jb25zdCBjYW5jZWxJZGxlQ2FsbGJhY2sgPSB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNhbmNlbElkbGVDYWxsYmFjayAmJiBzZWxmLmNhbmNlbElkbGVDYWxsYmFjay5iaW5kKHdpbmRvdykgfHwgZnVuY3Rpb24oaWQpIHtcbiAgICByZXR1cm4gY2xlYXJUaW1lb3V0KGlkKTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVlc3QtaWRsZS1jYWxsYmFjay5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwiY2FuY2VsSWRsZUNhbGxiYWNrIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic2VsZiIsImJpbmQiLCJ3aW5kb3ciLCJjYiIsInN0YXJ0IiwiRGF0ZSIsIm5vdyIsInNldFRpbWVvdXQiLCJkaWRUaW1lb3V0IiwidGltZVJlbWFpbmluZyIsIk1hdGgiLCJtYXgiLCJpZCIsImNsZWFyVGltZW91dCIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/request-idle-callback.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/resolve-href.js": +/*!*******************************************************!*\ + !*** ./node_modules/next/dist/client/resolve-href.js ***! + \*******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"resolveHref\", ({\n enumerable: true,\n get: function() {\n return resolveHref;\n }\n}));\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _formaturl = __webpack_require__(/*! ../shared/lib/router/utils/format-url */ \"./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _omit = __webpack_require__(/*! ../shared/lib/router/utils/omit */ \"./node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"./node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst _islocalurl = __webpack_require__(/*! ../shared/lib/router/utils/is-local-url */ \"./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _utils1 = __webpack_require__(/*! ../shared/lib/router/utils */ \"./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nfunction resolveHref(router, href, resolveAs) {\n // we use a dummy base url for relative urls\n let base;\n let urlAsString = typeof href === \"string\" ? href : (0, _formaturl.formatWithValidation)(href);\n // repeated slashes and backslashes in the URL are considered\n // invalid and will never match a Next.js page/file\n const urlProtoMatch = urlAsString.match(/^[a-zA-Z]{1,}:\\/\\//);\n const urlAsStringNoProto = urlProtoMatch ? urlAsString.slice(urlProtoMatch[0].length) : urlAsString;\n const urlParts = urlAsStringNoProto.split(\"?\", 1);\n if ((urlParts[0] || \"\").match(/(\\/\\/|\\\\)/)) {\n console.error(\"Invalid href '\" + urlAsString + \"' passed to next/router in page: '\" + router.pathname + \"'. Repeated forward-slashes (//) or backslashes \\\\ are not valid in the href.\");\n const normalizedUrl = (0, _utils.normalizeRepeatedSlashes)(urlAsStringNoProto);\n urlAsString = (urlProtoMatch ? urlProtoMatch[0] : \"\") + normalizedUrl;\n }\n // Return because it cannot be routed by the Next.js router\n if (!(0, _islocalurl.isLocalURL)(urlAsString)) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n try {\n base = new URL(urlAsString.startsWith(\"#\") ? router.asPath : router.pathname, \"http://n\");\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n base = new URL(\"/\", \"http://n\");\n }\n try {\n const finalUrl = new URL(urlAsString, base);\n finalUrl.pathname = (0, _normalizetrailingslash.normalizePathTrailingSlash)(finalUrl.pathname);\n let interpolatedAs = \"\";\n if ((0, _utils1.isDynamicRoute)(finalUrl.pathname) && finalUrl.searchParams && resolveAs) {\n const query = (0, _querystring.searchParamsToUrlQuery)(finalUrl.searchParams);\n const { result, params } = (0, _interpolateas.interpolateAs)(finalUrl.pathname, finalUrl.pathname, query);\n if (result) {\n interpolatedAs = (0, _formaturl.formatWithValidation)({\n pathname: result,\n hash: finalUrl.hash,\n query: (0, _omit.omit)(query, params)\n });\n }\n }\n // if the origin didn't change, it means we received a relative href\n const resolvedHref = finalUrl.origin === base.origin ? finalUrl.href.slice(finalUrl.origin.length) : finalUrl.href;\n return resolveAs ? [\n resolvedHref,\n interpolatedAs || resolvedHref\n ] : resolvedHref;\n } catch (_) {\n return resolveAs ? [\n urlAsString\n ] : urlAsString;\n }\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=resolve-href.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZXNvbHZlLWhyZWYuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILCtDQUE4QztJQUMxQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGVBQWVDLG1CQUFPQSxDQUFDLCtHQUF3QztBQUNyRSxNQUFNQyxhQUFhRCxtQkFBT0EsQ0FBQyw2R0FBdUM7QUFDbEUsTUFBTUUsUUFBUUYsbUJBQU9BLENBQUMsaUdBQWlDO0FBQ3ZELE1BQU1HLFNBQVNILG1CQUFPQSxDQUFDLHlFQUFxQjtBQUM1QyxNQUFNSSwwQkFBMEJKLG1CQUFPQSxDQUFDLCtGQUE0QjtBQUNwRSxNQUFNSyxjQUFjTCxtQkFBT0EsQ0FBQyxpSEFBeUM7QUFDckUsTUFBTU0sVUFBVU4sbUJBQU9BLENBQUMsNkZBQTRCO0FBQ3BELE1BQU1PLGlCQUFpQlAsbUJBQU9BLENBQUMscUhBQTJDO0FBQzFFLFNBQVNGLFlBQVlVLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxTQUFTO0lBQ3hDLDRDQUE0QztJQUM1QyxJQUFJQztJQUNKLElBQUlDLGNBQWMsT0FBT0gsU0FBUyxXQUFXQSxPQUFPLENBQUMsR0FBR1IsV0FBV1ksb0JBQW9CLEVBQUVKO0lBQ3pGLDZEQUE2RDtJQUM3RCxtREFBbUQ7SUFDbkQsTUFBTUssZ0JBQWdCRixZQUFZRyxLQUFLLENBQUM7SUFDeEMsTUFBTUMscUJBQXFCRixnQkFBZ0JGLFlBQVlLLEtBQUssQ0FBQ0gsYUFBYSxDQUFDLEVBQUUsQ0FBQ0ksTUFBTSxJQUFJTjtJQUN4RixNQUFNTyxXQUFXSCxtQkFBbUJJLEtBQUssQ0FBQyxLQUFLO0lBQy9DLElBQUksQ0FBQ0QsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFDLEVBQUdKLEtBQUssQ0FBQyxjQUFjO1FBQ3hDTSxRQUFRQyxLQUFLLENBQUMsbUJBQW1CVixjQUFjLHVDQUF1Q0osT0FBT2UsUUFBUSxHQUFHO1FBQ3hHLE1BQU1DLGdCQUFnQixDQUFDLEdBQUdyQixPQUFPc0Isd0JBQXdCLEVBQUVUO1FBQzNESixjQUFjLENBQUNFLGdCQUFnQkEsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFDLElBQUtVO0lBQzVEO0lBQ0EsMkRBQTJEO0lBQzNELElBQUksQ0FBQyxDQUFDLEdBQUduQixZQUFZcUIsVUFBVSxFQUFFZCxjQUFjO1FBQzNDLE9BQU9GLFlBQVk7WUFDZkU7U0FDSCxHQUFHQTtJQUNSO0lBQ0EsSUFBSTtRQUNBRCxPQUFPLElBQUlnQixJQUFJZixZQUFZZ0IsVUFBVSxDQUFDLE9BQU9wQixPQUFPcUIsTUFBTSxHQUFHckIsT0FBT2UsUUFBUSxFQUFFO0lBQ2xGLEVBQUUsT0FBT08sR0FBRztRQUNSLGtEQUFrRDtRQUNsRG5CLE9BQU8sSUFBSWdCLElBQUksS0FBSztJQUN4QjtJQUNBLElBQUk7UUFDQSxNQUFNSSxXQUFXLElBQUlKLElBQUlmLGFBQWFEO1FBQ3RDb0IsU0FBU1IsUUFBUSxHQUFHLENBQUMsR0FBR25CLHdCQUF3QjRCLDBCQUEwQixFQUFFRCxTQUFTUixRQUFRO1FBQzdGLElBQUlVLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsR0FBRzNCLFFBQVE0QixjQUFjLEVBQUVILFNBQVNSLFFBQVEsS0FBS1EsU0FBU0ksWUFBWSxJQUFJekIsV0FBVztZQUN0RixNQUFNMEIsUUFBUSxDQUFDLEdBQUdyQyxhQUFhc0Msc0JBQXNCLEVBQUVOLFNBQVNJLFlBQVk7WUFDNUUsTUFBTSxFQUFFRyxNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBR2hDLGVBQWVpQyxhQUFhLEVBQUVULFNBQVNSLFFBQVEsRUFBRVEsU0FBU1IsUUFBUSxFQUFFYTtZQUNuRyxJQUFJRSxRQUFRO2dCQUNSTCxpQkFBaUIsQ0FBQyxHQUFHaEMsV0FBV1ksb0JBQW9CLEVBQUU7b0JBQ2xEVSxVQUFVZTtvQkFDVkcsTUFBTVYsU0FBU1UsSUFBSTtvQkFDbkJMLE9BQU8sQ0FBQyxHQUFHbEMsTUFBTXdDLElBQUksRUFBRU4sT0FBT0c7Z0JBQ2xDO1lBQ0o7UUFDSjtRQUNBLG9FQUFvRTtRQUNwRSxNQUFNSSxlQUFlWixTQUFTYSxNQUFNLEtBQUtqQyxLQUFLaUMsTUFBTSxHQUFHYixTQUFTdEIsSUFBSSxDQUFDUSxLQUFLLENBQUNjLFNBQVNhLE1BQU0sQ0FBQzFCLE1BQU0sSUFBSWEsU0FBU3RCLElBQUk7UUFDbEgsT0FBT0MsWUFBWTtZQUNmaUM7WUFDQVYsa0JBQWtCVTtTQUNyQixHQUFHQTtJQUNSLEVBQUUsT0FBT2IsR0FBRztRQUNSLE9BQU9wQixZQUFZO1lBQ2ZFO1NBQ0gsR0FBR0E7SUFDUjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9sQixRQUFRbUQsT0FBTyxLQUFLLGNBQWUsT0FBT25ELFFBQVFtRCxPQUFPLEtBQUssWUFBWW5ELFFBQVFtRCxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9uRCxRQUFRbUQsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3RELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW1ELE9BQU8sRUFBRSxjQUFjO1FBQUVsRCxPQUFPO0lBQUs7SUFDbkVILE9BQU91RCxNQUFNLENBQUNyRCxRQUFRbUQsT0FBTyxFQUFFbkQ7SUFDL0JzRCxPQUFPdEQsT0FBTyxHQUFHQSxRQUFRbUQsT0FBTztBQUNsQyxFQUVBLHdDQUF3QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yZXNvbHZlLWhyZWYuanM/MmY5ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlc29sdmVIcmVmXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlSHJlZjtcbiAgICB9XG59KTtcbmNvbnN0IF9xdWVyeXN0cmluZyA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9xdWVyeXN0cmluZ1wiKTtcbmNvbnN0IF9mb3JtYXR1cmwgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybFwiKTtcbmNvbnN0IF9vbWl0ID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL29taXRcIik7XG5jb25zdCBfdXRpbHMgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi91dGlsc1wiKTtcbmNvbnN0IF9ub3JtYWxpemV0cmFpbGluZ3NsYXNoID0gcmVxdWlyZShcIi4vbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoXCIpO1xuY29uc3QgX2lzbG9jYWx1cmwgPSByZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsXCIpO1xuY29uc3QgX3V0aWxzMSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3JvdXRlci91dGlsc1wiKTtcbmNvbnN0IF9pbnRlcnBvbGF0ZWFzID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2ludGVycG9sYXRlLWFzXCIpO1xuZnVuY3Rpb24gcmVzb2x2ZUhyZWYocm91dGVyLCBocmVmLCByZXNvbHZlQXMpIHtcbiAgICAvLyB3ZSB1c2UgYSBkdW1teSBiYXNlIHVybCBmb3IgcmVsYXRpdmUgdXJsc1xuICAgIGxldCBiYXNlO1xuICAgIGxldCB1cmxBc1N0cmluZyA9IHR5cGVvZiBocmVmID09PSBcInN0cmluZ1wiID8gaHJlZiA6ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKShocmVmKTtcbiAgICAvLyByZXBlYXRlZCBzbGFzaGVzIGFuZCBiYWNrc2xhc2hlcyBpbiB0aGUgVVJMIGFyZSBjb25zaWRlcmVkXG4gICAgLy8gaW52YWxpZCBhbmQgd2lsbCBuZXZlciBtYXRjaCBhIE5leHQuanMgcGFnZS9maWxlXG4gICAgY29uc3QgdXJsUHJvdG9NYXRjaCA9IHVybEFzU3RyaW5nLm1hdGNoKC9eW2EtekEtWl17MSx9OlxcL1xcLy8pO1xuICAgIGNvbnN0IHVybEFzU3RyaW5nTm9Qcm90byA9IHVybFByb3RvTWF0Y2ggPyB1cmxBc1N0cmluZy5zbGljZSh1cmxQcm90b01hdGNoWzBdLmxlbmd0aCkgOiB1cmxBc1N0cmluZztcbiAgICBjb25zdCB1cmxQYXJ0cyA9IHVybEFzU3RyaW5nTm9Qcm90by5zcGxpdChcIj9cIiwgMSk7XG4gICAgaWYgKCh1cmxQYXJ0c1swXSB8fCBcIlwiKS5tYXRjaCgvKFxcL1xcL3xcXFxcKS8pKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGhyZWYgJ1wiICsgdXJsQXNTdHJpbmcgKyBcIicgcGFzc2VkIHRvIG5leHQvcm91dGVyIGluIHBhZ2U6ICdcIiArIHJvdXRlci5wYXRobmFtZSArIFwiJy4gUmVwZWF0ZWQgZm9yd2FyZC1zbGFzaGVzICgvLykgb3IgYmFja3NsYXNoZXMgXFxcXCBhcmUgbm90IHZhbGlkIGluIHRoZSBocmVmLlwiKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFVybCA9ICgwLCBfdXRpbHMubm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzKSh1cmxBc1N0cmluZ05vUHJvdG8pO1xuICAgICAgICB1cmxBc1N0cmluZyA9ICh1cmxQcm90b01hdGNoID8gdXJsUHJvdG9NYXRjaFswXSA6IFwiXCIpICsgbm9ybWFsaXplZFVybDtcbiAgICB9XG4gICAgLy8gUmV0dXJuIGJlY2F1c2UgaXQgY2Fubm90IGJlIHJvdXRlZCBieSB0aGUgTmV4dC5qcyByb3V0ZXJcbiAgICBpZiAoISgwLCBfaXNsb2NhbHVybC5pc0xvY2FsVVJMKSh1cmxBc1N0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBcyA/IFtcbiAgICAgICAgICAgIHVybEFzU3RyaW5nXG4gICAgICAgIF0gOiB1cmxBc1N0cmluZztcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgYmFzZSA9IG5ldyBVUkwodXJsQXNTdHJpbmcuc3RhcnRzV2l0aChcIiNcIikgPyByb3V0ZXIuYXNQYXRoIDogcm91dGVyLnBhdGhuYW1lLCBcImh0dHA6Ly9uXCIpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gLyBmb3IgaW52YWxpZCBhc1BhdGggdmFsdWVzIGUuZy4gLy9cbiAgICAgICAgYmFzZSA9IG5ldyBVUkwoXCIvXCIsIFwiaHR0cDovL25cIik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZpbmFsVXJsID0gbmV3IFVSTCh1cmxBc1N0cmluZywgYmFzZSk7XG4gICAgICAgIGZpbmFsVXJsLnBhdGhuYW1lID0gKDAsIF9ub3JtYWxpemV0cmFpbGluZ3NsYXNoLm5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoKShmaW5hbFVybC5wYXRobmFtZSk7XG4gICAgICAgIGxldCBpbnRlcnBvbGF0ZWRBcyA9IFwiXCI7XG4gICAgICAgIGlmICgoMCwgX3V0aWxzMS5pc0R5bmFtaWNSb3V0ZSkoZmluYWxVcmwucGF0aG5hbWUpICYmIGZpbmFsVXJsLnNlYXJjaFBhcmFtcyAmJiByZXNvbHZlQXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gKDAsIF9xdWVyeXN0cmluZy5zZWFyY2hQYXJhbXNUb1VybFF1ZXJ5KShmaW5hbFVybC5zZWFyY2hQYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgeyByZXN1bHQsIHBhcmFtcyB9ID0gKDAsIF9pbnRlcnBvbGF0ZWFzLmludGVycG9sYXRlQXMpKGZpbmFsVXJsLnBhdGhuYW1lLCBmaW5hbFVybC5wYXRobmFtZSwgcXVlcnkpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRlZEFzID0gKDAsIF9mb3JtYXR1cmwuZm9ybWF0V2l0aFZhbGlkYXRpb24pKHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWU6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgaGFzaDogZmluYWxVcmwuaGFzaCxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6ICgwLCBfb21pdC5vbWl0KShxdWVyeSwgcGFyYW1zKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSBvcmlnaW4gZGlkbid0IGNoYW5nZSwgaXQgbWVhbnMgd2UgcmVjZWl2ZWQgYSByZWxhdGl2ZSBocmVmXG4gICAgICAgIGNvbnN0IHJlc29sdmVkSHJlZiA9IGZpbmFsVXJsLm9yaWdpbiA9PT0gYmFzZS5vcmlnaW4gPyBmaW5hbFVybC5ocmVmLnNsaWNlKGZpbmFsVXJsLm9yaWdpbi5sZW5ndGgpIDogZmluYWxVcmwuaHJlZjtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBcyA/IFtcbiAgICAgICAgICAgIHJlc29sdmVkSHJlZixcbiAgICAgICAgICAgIGludGVycG9sYXRlZEFzIHx8IHJlc29sdmVkSHJlZlxuICAgICAgICBdIDogcmVzb2x2ZWRIcmVmO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBcyA/IFtcbiAgICAgICAgICAgIHVybEFzU3RyaW5nXG4gICAgICAgIF0gOiB1cmxBc1N0cmluZztcbiAgICB9XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc29sdmUtaHJlZi5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicmVzb2x2ZUhyZWYiLCJfcXVlcnlzdHJpbmciLCJyZXF1aXJlIiwiX2Zvcm1hdHVybCIsIl9vbWl0IiwiX3V0aWxzIiwiX25vcm1hbGl6ZXRyYWlsaW5nc2xhc2giLCJfaXNsb2NhbHVybCIsIl91dGlsczEiLCJfaW50ZXJwb2xhdGVhcyIsInJvdXRlciIsImhyZWYiLCJyZXNvbHZlQXMiLCJiYXNlIiwidXJsQXNTdHJpbmciLCJmb3JtYXRXaXRoVmFsaWRhdGlvbiIsInVybFByb3RvTWF0Y2giLCJtYXRjaCIsInVybEFzU3RyaW5nTm9Qcm90byIsInNsaWNlIiwibGVuZ3RoIiwidXJsUGFydHMiLCJzcGxpdCIsImNvbnNvbGUiLCJlcnJvciIsInBhdGhuYW1lIiwibm9ybWFsaXplZFVybCIsIm5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyIsImlzTG9jYWxVUkwiLCJVUkwiLCJzdGFydHNXaXRoIiwiYXNQYXRoIiwiXyIsImZpbmFsVXJsIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJpbnRlcnBvbGF0ZWRBcyIsImlzRHluYW1pY1JvdXRlIiwic2VhcmNoUGFyYW1zIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwicmVzdWx0IiwicGFyYW1zIiwiaW50ZXJwb2xhdGVBcyIsImhhc2giLCJvbWl0IiwicmVzb2x2ZWRIcmVmIiwib3JpZ2luIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/resolve-href.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/route-announcer.js": +/*!**********************************************************!*\ + !*** ./node_modules/next/dist/client/route-announcer.js ***! + \**********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n RouteAnnouncer: function() {\n return RouteAnnouncer;\n },\n default: function() {\n return _default;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _router = __webpack_require__(/*! ./router */ \"./node_modules/next/dist/client/router.js\");\nconst nextjsRouteAnnouncerStyles = {\n border: 0,\n clip: \"rect(0 0 0 0)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n top: 0,\n width: \"1px\",\n // https://medium.com/@jessebeach/beware-smushed-off-screen-accessible-text-5952a4c2cbfe\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\"\n};\nconst RouteAnnouncer = ()=>{\n _s();\n const { asPath } = (0, _router.useRouter)();\n const [routeAnnouncement, setRouteAnnouncement] = _react.default.useState(\"\");\n // Only announce the path change, but not for the first load because screen\n // reader will do that automatically.\n const previouslyLoadedPath = _react.default.useRef(asPath);\n // Every time the path changes, announce the new page’s title following this\n // priority: first the document title (from head), otherwise the first h1, or\n // if none of these exist, then the pathname from the URL. This methodology is\n // inspired by Marcy Sutton’s accessible client routing user testing. More\n // information can be found here:\n // https://www.gatsbyjs.com/blog/2019-07-11-user-testing-accessible-client-routing/\n _react.default.useEffect(()=>{\n // If the path hasn't change, we do nothing.\n if (previouslyLoadedPath.current === asPath) return;\n previouslyLoadedPath.current = asPath;\n if (document.title) {\n setRouteAnnouncement(document.title);\n } else {\n const pageHeader = document.querySelector(\"h1\");\n var _pageHeader_innerText;\n const content = (_pageHeader_innerText = pageHeader == null ? void 0 : pageHeader.innerText) != null ? _pageHeader_innerText : pageHeader == null ? void 0 : pageHeader.textContent;\n setRouteAnnouncement(content || asPath);\n }\n }, [\n asPath\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n \"aria-live\": \"assertive\" // Make the announcement immediately.\n ,\n id: \"__next-route-announcer__\",\n role: \"alert\",\n style: nextjsRouteAnnouncerStyles,\n children: routeAnnouncement\n });\n};\n_s(RouteAnnouncer, \"YC5SCNeVaenA6x7RBk3t0O2D/M8=\");\n_c = RouteAnnouncer;\nconst _default = RouteAnnouncer;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=route-announcer.js.map\nvar _c;\n$RefreshReg$(_c, \"RouteAnnouncer\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yb3V0ZS1hbm5vdW5jZXIuanMiLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtJQUNBQyxTQUFTO1FBQ0wsT0FBT087SUFDWDtBQUNKO0FBQ0EsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyw0R0FBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsOERBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsNENBQU87QUFDdkUsTUFBTUksVUFBVUosbUJBQU9BLENBQUMsMkRBQVU7QUFDbEMsTUFBTUssNkJBQTZCO0lBQy9CQyxRQUFRO0lBQ1JDLE1BQU07SUFDTkMsUUFBUTtJQUNSQyxRQUFRO0lBQ1JDLFVBQVU7SUFDVkMsU0FBUztJQUNUQyxVQUFVO0lBQ1ZDLEtBQUs7SUFDTEMsT0FBTztJQUNQLHdGQUF3RjtJQUN4RkMsWUFBWTtJQUNaQyxVQUFVO0FBQ2Q7QUFDQSxNQUFNMUIsaUJBQWlCOztJQUNuQixNQUFNLEVBQUUyQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUdiLFFBQVFjLFNBQVM7SUFDeEMsTUFBTSxDQUFDQyxtQkFBbUJDLHFCQUFxQixHQUFHbEIsT0FBT1gsT0FBTyxDQUFDOEIsUUFBUSxDQUFDO0lBQzFFLDJFQUEyRTtJQUMzRSxxQ0FBcUM7SUFDckMsTUFBTUMsdUJBQXVCcEIsT0FBT1gsT0FBTyxDQUFDZ0MsTUFBTSxDQUFDTjtJQUNuRCw0RUFBNEU7SUFDNUUsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSwwRUFBMEU7SUFDMUUsaUNBQWlDO0lBQ2pDLG1GQUFtRjtJQUNuRmYsT0FBT1gsT0FBTyxDQUFDaUMsU0FBUyxDQUFDO1FBQ3JCLDRDQUE0QztRQUM1QyxJQUFJRixxQkFBcUJHLE9BQU8sS0FBS1IsUUFBUTtRQUM3Q0sscUJBQXFCRyxPQUFPLEdBQUdSO1FBQy9CLElBQUlTLFNBQVNDLEtBQUssRUFBRTtZQUNoQlAscUJBQXFCTSxTQUFTQyxLQUFLO1FBQ3ZDLE9BQU87WUFDSCxNQUFNQyxhQUFhRixTQUFTRyxhQUFhLENBQUM7WUFDMUMsSUFBSUM7WUFDSixNQUFNQyxVQUFVLENBQUNELHdCQUF3QkYsY0FBYyxPQUFPLEtBQUssSUFBSUEsV0FBV0ksU0FBUyxLQUFLLE9BQU9GLHdCQUF3QkYsY0FBYyxPQUFPLEtBQUssSUFBSUEsV0FBV0ssV0FBVztZQUNuTGIscUJBQXFCVyxXQUFXZDtRQUNwQztJQUNKLEdBQ0E7UUFDSUE7S0FDSDtJQUNELE9BQXFCLFdBQUgsR0FBSSxJQUFHaEIsWUFBWWlDLEdBQUcsRUFBRSxLQUFLO1FBQzNDLGFBQWEsWUFBWSxxQ0FBcUM7O1FBRTlEQyxJQUFJO1FBQ0pDLE1BQU07UUFDTkMsT0FBT2hDO1FBQ1BpQyxVQUFVbkI7SUFDZDtBQUNKO0dBcENNN0I7S0FBQUE7QUFxQ04sTUFBTVEsV0FBV1I7QUFFakIsSUFBSSxDQUFDLE9BQU9ILFFBQVFJLE9BQU8sS0FBSyxjQUFlLE9BQU9KLFFBQVFJLE9BQU8sS0FBSyxZQUFZSixRQUFRSSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9KLFFBQVFJLE9BQU8sQ0FBQ2dELFVBQVUsS0FBSyxhQUFhO0lBQ3JLdEQsT0FBT0MsY0FBYyxDQUFDQyxRQUFRSSxPQUFPLEVBQUUsY0FBYztRQUFFSCxPQUFPO0lBQUs7SUFDbkVILE9BQU91RCxNQUFNLENBQUNyRCxRQUFRSSxPQUFPLEVBQUVKO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVFJLE9BQU87QUFDbEMsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcm91dGUtYW5ub3VuY2VyLmpzPzU4MjciXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBSb3V0ZUFubm91bmNlcjogbnVsbCxcbiAgICBkZWZhdWx0OiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIFJvdXRlQW5ub3VuY2VyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJvdXRlQW5ub3VuY2VyO1xuICAgIH0sXG4gICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfZGVmYXVsdDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9yb3V0ZXIgPSByZXF1aXJlKFwiLi9yb3V0ZXJcIik7XG5jb25zdCBuZXh0anNSb3V0ZUFubm91bmNlclN0eWxlcyA9IHtcbiAgICBib3JkZXI6IDAsXG4gICAgY2xpcDogXCJyZWN0KDAgMCAwIDApXCIsXG4gICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgIG1hcmdpbjogXCItMXB4XCIsXG4gICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgcGFkZGluZzogMCxcbiAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgIHRvcDogMCxcbiAgICB3aWR0aDogXCIxcHhcIixcbiAgICAvLyBodHRwczovL21lZGl1bS5jb20vQGplc3NlYmVhY2gvYmV3YXJlLXNtdXNoZWQtb2ZmLXNjcmVlbi1hY2Nlc3NpYmxlLXRleHQtNTk1MmE0YzJjYmZlXG4gICAgd2hpdGVTcGFjZTogXCJub3dyYXBcIixcbiAgICB3b3JkV3JhcDogXCJub3JtYWxcIlxufTtcbmNvbnN0IFJvdXRlQW5ub3VuY2VyID0gKCk9PntcbiAgICBjb25zdCB7IGFzUGF0aCB9ID0gKDAsIF9yb3V0ZXIudXNlUm91dGVyKSgpO1xuICAgIGNvbnN0IFtyb3V0ZUFubm91bmNlbWVudCwgc2V0Um91dGVBbm5vdW5jZW1lbnRdID0gX3JlYWN0LmRlZmF1bHQudXNlU3RhdGUoXCJcIik7XG4gICAgLy8gT25seSBhbm5vdW5jZSB0aGUgcGF0aCBjaGFuZ2UsIGJ1dCBub3QgZm9yIHRoZSBmaXJzdCBsb2FkIGJlY2F1c2Ugc2NyZWVuXG4gICAgLy8gcmVhZGVyIHdpbGwgZG8gdGhhdCBhdXRvbWF0aWNhbGx5LlxuICAgIGNvbnN0IHByZXZpb3VzbHlMb2FkZWRQYXRoID0gX3JlYWN0LmRlZmF1bHQudXNlUmVmKGFzUGF0aCk7XG4gICAgLy8gRXZlcnkgdGltZSB0aGUgcGF0aCBjaGFuZ2VzLCBhbm5vdW5jZSB0aGUgbmV3IHBhZ2XigJlzIHRpdGxlIGZvbGxvd2luZyB0aGlzXG4gICAgLy8gcHJpb3JpdHk6IGZpcnN0IHRoZSBkb2N1bWVudCB0aXRsZSAoZnJvbSBoZWFkKSwgb3RoZXJ3aXNlIHRoZSBmaXJzdCBoMSwgb3JcbiAgICAvLyBpZiBub25lIG9mIHRoZXNlIGV4aXN0LCB0aGVuIHRoZSBwYXRobmFtZSBmcm9tIHRoZSBVUkwuIFRoaXMgbWV0aG9kb2xvZ3kgaXNcbiAgICAvLyBpbnNwaXJlZCBieSBNYXJjeSBTdXR0b27igJlzIGFjY2Vzc2libGUgY2xpZW50IHJvdXRpbmcgdXNlciB0ZXN0aW5nLiBNb3JlXG4gICAgLy8gaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGhlcmU6XG4gICAgLy8gaHR0cHM6Ly93d3cuZ2F0c2J5anMuY29tL2Jsb2cvMjAxOS0wNy0xMS11c2VyLXRlc3RpbmctYWNjZXNzaWJsZS1jbGllbnQtcm91dGluZy9cbiAgICBfcmVhY3QuZGVmYXVsdC51c2VFZmZlY3QoKCk9PntcbiAgICAgICAgLy8gSWYgdGhlIHBhdGggaGFzbid0IGNoYW5nZSwgd2UgZG8gbm90aGluZy5cbiAgICAgICAgaWYgKHByZXZpb3VzbHlMb2FkZWRQYXRoLmN1cnJlbnQgPT09IGFzUGF0aCkgcmV0dXJuO1xuICAgICAgICBwcmV2aW91c2x5TG9hZGVkUGF0aC5jdXJyZW50ID0gYXNQYXRoO1xuICAgICAgICBpZiAoZG9jdW1lbnQudGl0bGUpIHtcbiAgICAgICAgICAgIHNldFJvdXRlQW5ub3VuY2VtZW50KGRvY3VtZW50LnRpdGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VIZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaDFcIik7XG4gICAgICAgICAgICB2YXIgX3BhZ2VIZWFkZXJfaW5uZXJUZXh0O1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IChfcGFnZUhlYWRlcl9pbm5lclRleHQgPSBwYWdlSGVhZGVyID09IG51bGwgPyB2b2lkIDAgOiBwYWdlSGVhZGVyLmlubmVyVGV4dCkgIT0gbnVsbCA/IF9wYWdlSGVhZGVyX2lubmVyVGV4dCA6IHBhZ2VIZWFkZXIgPT0gbnVsbCA/IHZvaWQgMCA6IHBhZ2VIZWFkZXIudGV4dENvbnRlbnQ7XG4gICAgICAgICAgICBzZXRSb3V0ZUFubm91bmNlbWVudChjb250ZW50IHx8IGFzUGF0aCk7XG4gICAgICAgIH1cbiAgICB9LCAvLyBUT0RPOiBzd2l0Y2ggdG8gcGF0aG5hbWUgKyBxdWVyeSBvYmplY3Qgb2YgZHluYW1pYyByb3V0ZSByZXF1aXJlbWVudHNcbiAgICBbXG4gICAgICAgIGFzUGF0aFxuICAgIF0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwicFwiLCB7XG4gICAgICAgIFwiYXJpYS1saXZlXCI6IFwiYXNzZXJ0aXZlXCIgLy8gTWFrZSB0aGUgYW5ub3VuY2VtZW50IGltbWVkaWF0ZWx5LlxuICAgICAgICAsXG4gICAgICAgIGlkOiBcIl9fbmV4dC1yb3V0ZS1hbm5vdW5jZXJfX1wiLFxuICAgICAgICByb2xlOiBcImFsZXJ0XCIsXG4gICAgICAgIHN0eWxlOiBuZXh0anNSb3V0ZUFubm91bmNlclN0eWxlcyxcbiAgICAgICAgY2hpbGRyZW46IHJvdXRlQW5ub3VuY2VtZW50XG4gICAgfSk7XG59O1xuY29uc3QgX2RlZmF1bHQgPSBSb3V0ZUFubm91bmNlcjtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGUtYW5ub3VuY2VyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIlJvdXRlQW5ub3VuY2VyIiwiZGVmYXVsdCIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9kZWZhdWx0IiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9yb3V0ZXIiLCJuZXh0anNSb3V0ZUFubm91bmNlclN0eWxlcyIsImJvcmRlciIsImNsaXAiLCJoZWlnaHQiLCJtYXJnaW4iLCJvdmVyZmxvdyIsInBhZGRpbmciLCJwb3NpdGlvbiIsInRvcCIsIndpZHRoIiwid2hpdGVTcGFjZSIsIndvcmRXcmFwIiwiYXNQYXRoIiwidXNlUm91dGVyIiwicm91dGVBbm5vdW5jZW1lbnQiLCJzZXRSb3V0ZUFubm91bmNlbWVudCIsInVzZVN0YXRlIiwicHJldmlvdXNseUxvYWRlZFBhdGgiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJjdXJyZW50IiwiZG9jdW1lbnQiLCJ0aXRsZSIsInBhZ2VIZWFkZXIiLCJxdWVyeVNlbGVjdG9yIiwiX3BhZ2VIZWFkZXJfaW5uZXJUZXh0IiwiY29udGVudCIsImlubmVyVGV4dCIsInRleHRDb250ZW50IiwianN4IiwiaWQiLCJyb2xlIiwic3R5bGUiLCJjaGlsZHJlbiIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/route-announcer.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/route-loader.js": +/*!*******************************************************!*\ + !*** ./node_modules/next/dist/client/route-loader.js ***! + \*******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n markAssetError: function() {\n return markAssetError;\n },\n isAssetError: function() {\n return isAssetError;\n },\n getClientBuildManifest: function() {\n return getClientBuildManifest;\n },\n createRouteLoader: function() {\n return createRouteLoader;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _getassetpathfromroute = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/utils/get-asset-path-from-route */ \"./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\"));\nconst _trustedtypes = __webpack_require__(/*! ./trusted-types */ \"./node_modules/next/dist/client/trusted-types.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"./node_modules/next/dist/client/request-idle-callback.js\");\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"./node_modules/next/dist/build/deployment-id.js\");\n// 3.8s was arbitrarily chosen as it's what https://web.dev/interactive\n// considers as \"Good\" time-to-interactive. We must assume something went\n// wrong beyond this point, and then fall-back to a full page transition to\n// show the user something of value.\nconst MS_MAX_IDLE_DELAY = 3800;\nfunction withFuture(key, map, generator) {\n let entry = map.get(key);\n if (entry) {\n if (\"future\" in entry) {\n return entry.future;\n }\n return Promise.resolve(entry);\n }\n let resolver;\n const prom = new Promise((resolve)=>{\n resolver = resolve;\n });\n map.set(key, entry = {\n resolve: resolver,\n future: prom\n });\n return generator ? generator() // eslint-disable-next-line no-sequences\n .then((value)=>(resolver(value), value)).catch((err)=>{\n map.delete(key);\n throw err;\n }) : prom;\n}\nconst ASSET_LOAD_ERROR = Symbol(\"ASSET_LOAD_ERROR\");\nfunction markAssetError(err) {\n return Object.defineProperty(err, ASSET_LOAD_ERROR, {});\n}\nfunction isAssetError(err) {\n return err && ASSET_LOAD_ERROR in err;\n}\nfunction hasPrefetch(link) {\n try {\n link = document.createElement(\"link\");\n return(// with relList.support\n !!window.MSInputMethodContext && !!document.documentMode || link.relList.supports(\"prefetch\"));\n } catch (e) {\n return false;\n }\n}\nconst canPrefetch = hasPrefetch();\nconst getAssetQueryString = ()=>{\n return (0, _deploymentid.getDeploymentIdQueryOrEmptyString)();\n};\nfunction prefetchViaDom(href, as, link) {\n return new Promise((resolve, reject)=>{\n const selector = '\\n link[rel=\"prefetch\"][href^=\"' + href + '\"],\\n link[rel=\"preload\"][href^=\"' + href + '\"],\\n script[src^=\"' + href + '\"]';\n if (document.querySelector(selector)) {\n return resolve();\n }\n link = document.createElement(\"link\");\n // The order of property assignment here is intentional:\n if (as) link.as = as;\n link.rel = \"prefetch\";\n link.crossOrigin = undefined;\n link.onload = resolve;\n link.onerror = ()=>reject(markAssetError(new Error(\"Failed to prefetch: \" + href)));\n // `href` should always be last:\n link.href = href;\n document.head.appendChild(link);\n });\n}\nfunction appendScript(src, script) {\n return new Promise((resolve, reject)=>{\n script = document.createElement(\"script\");\n // The order of property assignment here is intentional.\n // 1. Setup success/failure hooks in case the browser synchronously\n // executes when `src` is set.\n script.onload = resolve;\n script.onerror = ()=>reject(markAssetError(new Error(\"Failed to load script: \" + src)));\n // 2. Configure the cross-origin attribute before setting `src` in case the\n // browser begins to fetch.\n script.crossOrigin = undefined;\n // 3. Finally, set the source and inject into the DOM in case the child\n // must be appended for fetching to start.\n script.src = src;\n document.body.appendChild(script);\n });\n}\n// We wait for pages to be built in dev before we start the route transition\n// timeout to prevent an un-necessary hard navigation in development.\nlet devBuildPromise;\n// Resolve a promise that times out after given amount of milliseconds.\nfunction resolvePromiseWithTimeout(p, ms, err) {\n return new Promise((resolve, reject)=>{\n let cancelled = false;\n p.then((r)=>{\n // Resolved, cancel the timeout\n cancelled = true;\n resolve(r);\n }).catch(reject);\n // We wrap these checks separately for better dead-code elimination in\n // production bundles.\n if (true) {\n (devBuildPromise || Promise.resolve()).then(()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>setTimeout(()=>{\n if (!cancelled) {\n reject(err);\n }\n }, ms));\n });\n }\n if (false) {}\n });\n}\nfunction getClientBuildManifest() {\n if (self.__BUILD_MANIFEST) {\n return Promise.resolve(self.__BUILD_MANIFEST);\n }\n const onBuildManifest = new Promise((resolve)=>{\n // Mandatory because this is not concurrent safe:\n const cb = self.__BUILD_MANIFEST_CB;\n self.__BUILD_MANIFEST_CB = ()=>{\n resolve(self.__BUILD_MANIFEST);\n cb && cb();\n };\n });\n return resolvePromiseWithTimeout(onBuildManifest, MS_MAX_IDLE_DELAY, markAssetError(new Error(\"Failed to load client build manifest\")));\n}\nfunction getFilesForRoute(assetPrefix, route) {\n if (true) {\n const scriptUrl = assetPrefix + \"/_next/static/chunks/pages\" + encodeURI((0, _getassetpathfromroute.default)(route, \".js\")) + getAssetQueryString();\n return Promise.resolve({\n scripts: [\n (0, _trustedtypes.__unsafeCreateTrustedScriptURL)(scriptUrl)\n ],\n // Styles are handled by `style-loader` in development:\n css: []\n });\n }\n return getClientBuildManifest().then((manifest)=>{\n if (!(route in manifest)) {\n throw markAssetError(new Error(\"Failed to lookup route: \" + route));\n }\n const allFiles = manifest[route].map((entry)=>assetPrefix + \"/_next/\" + encodeURI(entry));\n return {\n scripts: allFiles.filter((v)=>v.endsWith(\".js\")).map((v)=>(0, _trustedtypes.__unsafeCreateTrustedScriptURL)(v) + getAssetQueryString()),\n css: allFiles.filter((v)=>v.endsWith(\".css\")).map((v)=>v + getAssetQueryString())\n };\n });\n}\nfunction createRouteLoader(assetPrefix) {\n const entrypoints = new Map();\n const loadedScripts = new Map();\n const styleSheets = new Map();\n const routes = new Map();\n function maybeExecuteScript(src) {\n // With HMR we might need to \"reload\" scripts when they are\n // disposed and readded. Executing scripts twice has no functional\n // differences\n if (false) {} else {\n return appendScript(src);\n }\n }\n function fetchStyleSheet(href) {\n let prom = styleSheets.get(href);\n if (prom) {\n return prom;\n }\n styleSheets.set(href, prom = fetch(href).then((res)=>{\n if (!res.ok) {\n throw new Error(\"Failed to load stylesheet: \" + href);\n }\n return res.text().then((text)=>({\n href: href,\n content: text\n }));\n }).catch((err)=>{\n throw markAssetError(err);\n }));\n return prom;\n }\n return {\n whenEntrypoint (route) {\n return withFuture(route, entrypoints);\n },\n onEntrypoint (route, execute) {\n (execute ? Promise.resolve().then(()=>execute()).then((exports1)=>({\n component: exports1 && exports1.default || exports1,\n exports: exports1\n }), (err)=>({\n error: err\n })) : Promise.resolve(undefined)).then((input)=>{\n const old = entrypoints.get(route);\n if (old && \"resolve\" in old) {\n if (input) {\n entrypoints.set(route, input);\n old.resolve(input);\n }\n } else {\n if (input) {\n entrypoints.set(route, input);\n } else {\n entrypoints.delete(route);\n }\n // when this entrypoint has been resolved before\n // the route is outdated and we want to invalidate\n // this cache entry\n routes.delete(route);\n }\n });\n },\n loadRoute (route, prefetch) {\n return withFuture(route, routes, ()=>{\n let devBuildPromiseResolve;\n if (true) {\n devBuildPromise = new Promise((resolve)=>{\n devBuildPromiseResolve = resolve;\n });\n }\n return resolvePromiseWithTimeout(getFilesForRoute(assetPrefix, route).then((param)=>{\n let { scripts, css } = param;\n return Promise.all([\n entrypoints.has(route) ? [] : Promise.all(scripts.map(maybeExecuteScript)),\n Promise.all(css.map(fetchStyleSheet))\n ]);\n }).then((res)=>{\n return this.whenEntrypoint(route).then((entrypoint)=>({\n entrypoint,\n styles: res[1]\n }));\n }), MS_MAX_IDLE_DELAY, markAssetError(new Error(\"Route did not complete loading: \" + route))).then((param)=>{\n let { entrypoint, styles } = param;\n const res = Object.assign({\n styles: styles\n }, entrypoint);\n return \"error\" in entrypoint ? entrypoint : res;\n }).catch((err)=>{\n if (prefetch) {\n // we don't want to cache errors during prefetch\n throw err;\n }\n return {\n error: err\n };\n }).finally(()=>devBuildPromiseResolve == null ? void 0 : devBuildPromiseResolve());\n });\n },\n prefetch (route) {\n // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n // License: Apache 2.0\n let cn;\n if (cn = navigator.connection) {\n // Don't prefetch if using 2G or if Save-Data is enabled.\n if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve();\n }\n return getFilesForRoute(assetPrefix, route).then((output)=>Promise.all(canPrefetch ? output.scripts.map((script)=>prefetchViaDom(script.toString(), \"script\")) : [])).then(()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>this.loadRoute(route, true).catch(()=>{}));\n }).catch(()=>{});\n }\n };\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=route-loader.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yb3V0ZS1sb2FkZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FLTjtBQUNBLFNBQVNLLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlYLE9BQU9DLGNBQWMsQ0FBQ1MsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRUCxTQUFTO0lBQ2JHLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7SUFDQUMsY0FBYztRQUNWLE9BQU9BO0lBQ1g7SUFDQUMsd0JBQXdCO1FBQ3BCLE9BQU9BO0lBQ1g7SUFDQUMsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sMkJBQTJCQyxtQkFBT0EsQ0FBQyw0R0FBeUM7QUFDbEYsTUFBTUMseUJBQXlCLFdBQVcsR0FBR0YseUJBQXlCRyxDQUFDLENBQUNGLG1CQUFPQSxDQUFDLDJJQUFzRDtBQUN0SSxNQUFNRyxnQkFBZ0JILG1CQUFPQSxDQUFDLHlFQUFpQjtBQUMvQyxNQUFNSSx1QkFBdUJKLG1CQUFPQSxDQUFDLHlGQUF5QjtBQUM5RCxNQUFNSyxnQkFBZ0JMLG1CQUFPQSxDQUFDLCtFQUF3QjtBQUN0RCx1RUFBdUU7QUFDdkUseUVBQXlFO0FBQ3pFLDJFQUEyRTtBQUMzRSxvQ0FBb0M7QUFDcEMsTUFBTU0sb0JBQW9CO0FBQzFCLFNBQVNDLFdBQVdDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxTQUFTO0lBQ25DLElBQUlDLFFBQVFGLElBQUlYLEdBQUcsQ0FBQ1U7SUFDcEIsSUFBSUcsT0FBTztRQUNQLElBQUksWUFBWUEsT0FBTztZQUNuQixPQUFPQSxNQUFNQyxNQUFNO1FBQ3ZCO1FBQ0EsT0FBT0MsUUFBUUMsT0FBTyxDQUFDSDtJQUMzQjtJQUNBLElBQUlJO0lBQ0osTUFBTUMsT0FBTyxJQUFJSCxRQUFRLENBQUNDO1FBQ3RCQyxXQUFXRDtJQUNmO0lBQ0FMLElBQUlRLEdBQUcsQ0FBQ1QsS0FBS0csUUFBUTtRQUNqQkcsU0FBU0M7UUFDVEgsUUFBUUk7SUFDWjtJQUNBLE9BQU9OLFlBQVlBLFlBQVcsd0NBQXdDO0tBQ3JFUSxJQUFJLENBQUMsQ0FBQy9CLFFBQVM0QixDQUFBQSxTQUFTNUIsUUFBUUEsS0FBSSxHQUFJZ0MsS0FBSyxDQUFDLENBQUNDO1FBQzVDWCxJQUFJWSxNQUFNLENBQUNiO1FBQ1gsTUFBTVk7SUFDVixLQUFLSjtBQUNUO0FBQ0EsTUFBTU0sbUJBQW1CQyxPQUFPO0FBQ2hDLFNBQVNsQyxlQUFlK0IsR0FBRztJQUN2QixPQUFPcEMsT0FBT0MsY0FBYyxDQUFDbUMsS0FBS0Usa0JBQWtCLENBQUM7QUFDekQ7QUFDQSxTQUFTaEMsYUFBYThCLEdBQUc7SUFDckIsT0FBT0EsT0FBT0Usb0JBQW9CRjtBQUN0QztBQUNBLFNBQVNJLFlBQVlDLElBQUk7SUFDckIsSUFBSTtRQUNBQSxPQUFPQyxTQUFTQyxhQUFhLENBQUM7UUFDOUIsT0FDQSx1QkFBdUI7UUFDdkIsQ0FBQyxDQUFDQyxPQUFPQyxvQkFBb0IsSUFBSSxDQUFDLENBQUNILFNBQVNJLFlBQVksSUFBSUwsS0FBS00sT0FBTyxDQUFDQyxRQUFRLENBQUM7SUFDdEYsRUFBRSxPQUFPQyxHQUFHO1FBQ1IsT0FBTztJQUNYO0FBQ0o7QUFDQSxNQUFNQyxjQUFjVjtBQUNwQixNQUFNVyxzQkFBc0I7SUFDeEIsT0FBTyxDQUFDLEdBQUc5QixjQUFjK0IsaUNBQWlDO0FBQzlEO0FBQ0EsU0FBU0MsZUFBZUMsSUFBSSxFQUFFQyxFQUFFLEVBQUVkLElBQUk7SUFDbEMsT0FBTyxJQUFJWixRQUFRLENBQUNDLFNBQVMwQjtRQUN6QixNQUFNQyxXQUFXLHlDQUF5Q0gsT0FBTywyQ0FBMkNBLE9BQU8sNkJBQTZCQSxPQUFPO1FBQ3ZKLElBQUlaLFNBQVNnQixhQUFhLENBQUNELFdBQVc7WUFDbEMsT0FBTzNCO1FBQ1g7UUFDQVcsT0FBT0MsU0FBU0MsYUFBYSxDQUFDO1FBQzlCLHdEQUF3RDtRQUN4RCxJQUFJWSxJQUFJZCxLQUFLYyxFQUFFLEdBQUdBO1FBQ2xCZCxLQUFLa0IsR0FBRyxHQUFHO1FBQ1hsQixLQUFLbUIsV0FBVyxHQUFHQyxTQUErQjtRQUNsRHBCLEtBQUt1QixNQUFNLEdBQUdsQztRQUNkVyxLQUFLd0IsT0FBTyxHQUFHLElBQUlULE9BQU9uRCxlQUFlLElBQUk2RCxNQUFNLHlCQUF5Qlo7UUFDNUUsZ0NBQWdDO1FBQ2hDYixLQUFLYSxJQUFJLEdBQUdBO1FBQ1paLFNBQVN5QixJQUFJLENBQUNDLFdBQVcsQ0FBQzNCO0lBQzlCO0FBQ0o7QUFDQSxTQUFTNEIsYUFBYUMsR0FBRyxFQUFFQyxNQUFNO0lBQzdCLE9BQU8sSUFBSTFDLFFBQVEsQ0FBQ0MsU0FBUzBCO1FBQ3pCZSxTQUFTN0IsU0FBU0MsYUFBYSxDQUFDO1FBQ2hDLHdEQUF3RDtRQUN4RCxtRUFBbUU7UUFDbkUsaUNBQWlDO1FBQ2pDNEIsT0FBT1AsTUFBTSxHQUFHbEM7UUFDaEJ5QyxPQUFPTixPQUFPLEdBQUcsSUFBSVQsT0FBT25ELGVBQWUsSUFBSTZELE1BQU0sNEJBQTRCSTtRQUNqRiwyRUFBMkU7UUFDM0UsOEJBQThCO1FBQzlCQyxPQUFPWCxXQUFXLEdBQUdDLFNBQStCO1FBQ3BELHVFQUF1RTtRQUN2RSw2Q0FBNkM7UUFDN0NVLE9BQU9ELEdBQUcsR0FBR0E7UUFDYjVCLFNBQVM4QixJQUFJLENBQUNKLFdBQVcsQ0FBQ0c7SUFDOUI7QUFDSjtBQUNBLDRFQUE0RTtBQUM1RSxxRUFBcUU7QUFDckUsSUFBSUU7QUFDSix1RUFBdUU7QUFDdkUsU0FBU0MsMEJBQTBCQyxDQUFDLEVBQUVDLEVBQUUsRUFBRXhDLEdBQUc7SUFDekMsT0FBTyxJQUFJUCxRQUFRLENBQUNDLFNBQVMwQjtRQUN6QixJQUFJcUIsWUFBWTtRQUNoQkYsRUFBRXpDLElBQUksQ0FBQyxDQUFDNEM7WUFDSiwrQkFBK0I7WUFDL0JELFlBQVk7WUFDWi9DLFFBQVFnRDtRQUNaLEdBQUczQyxLQUFLLENBQUNxQjtRQUNULHNFQUFzRTtRQUN0RSxzQkFBc0I7UUFDdEIsSUFBSUssSUFBc0MsRUFBRTtZQUN2Q1ksQ0FBQUEsbUJBQW1CNUMsUUFBUUMsT0FBTyxFQUFDLEVBQUdJLElBQUksQ0FBQztnQkFDdkMsSUFBR2QscUJBQXFCMkQsbUJBQW1CLEVBQUUsSUFBSUMsV0FBVzt3QkFDckQsSUFBSSxDQUFDSCxXQUFXOzRCQUNackIsT0FBT3BCO3dCQUNYO29CQUNKLEdBQUd3QztZQUNYO1FBQ0o7UUFDQSxJQUFJZixLQUFzQyxFQUFFLEVBTTNDO0lBQ0w7QUFDSjtBQUNBLFNBQVN0RDtJQUNMLElBQUkwRSxLQUFLQyxnQkFBZ0IsRUFBRTtRQUN2QixPQUFPckQsUUFBUUMsT0FBTyxDQUFDbUQsS0FBS0MsZ0JBQWdCO0lBQ2hEO0lBQ0EsTUFBTUMsa0JBQWtCLElBQUl0RCxRQUFRLENBQUNDO1FBQ2pDLGlEQUFpRDtRQUNqRCxNQUFNc0QsS0FBS0gsS0FBS0ksbUJBQW1CO1FBQ25DSixLQUFLSSxtQkFBbUIsR0FBRztZQUN2QnZELFFBQVFtRCxLQUFLQyxnQkFBZ0I7WUFDN0JFLE1BQU1BO1FBQ1Y7SUFDSjtJQUNBLE9BQU9WLDBCQUEwQlMsaUJBQWlCN0QsbUJBQW1CakIsZUFBZSxJQUFJNkQsTUFBTTtBQUNsRztBQUNBLFNBQVNvQixpQkFBaUJDLFdBQVcsRUFBRUMsS0FBSztJQUN4QyxJQUFJM0IsSUFBc0MsRUFBRTtRQUN4QyxNQUFNNEIsWUFBWUYsY0FBYywrQkFBK0JHLFVBQVUsQ0FBQyxHQUFHekUsdUJBQXVCMEUsT0FBTyxFQUFFSCxPQUFPLFVBQVVyQztRQUM5SCxPQUFPdEIsUUFBUUMsT0FBTyxDQUFDO1lBQ25COEQsU0FBUztnQkFDSixJQUFHekUsY0FBYzBFLDhCQUE4QixFQUFFSjthQUNyRDtZQUNELHVEQUF1RDtZQUN2REssS0FBSyxFQUFFO1FBQ1g7SUFDSjtJQUNBLE9BQU92Rix5QkFBeUIyQixJQUFJLENBQUMsQ0FBQzZEO1FBQ2xDLElBQUksQ0FBRVAsQ0FBQUEsU0FBU08sUUFBTyxHQUFJO1lBQ3RCLE1BQU0xRixlQUFlLElBQUk2RCxNQUFNLDZCQUE2QnNCO1FBQ2hFO1FBQ0EsTUFBTVEsV0FBV0QsUUFBUSxDQUFDUCxNQUFNLENBQUMvRCxHQUFHLENBQUMsQ0FBQ0UsUUFBUTRELGNBQWMsWUFBWUcsVUFBVS9EO1FBQ2xGLE9BQU87WUFDSGlFLFNBQVNJLFNBQVNDLE1BQU0sQ0FBQyxDQUFDQyxJQUFJQSxFQUFFQyxRQUFRLENBQUMsUUFBUTFFLEdBQUcsQ0FBQyxDQUFDeUUsSUFBSSxDQUFDLEdBQUcvRSxjQUFjMEUsOEJBQThCLEVBQUVLLEtBQUsvQztZQUNqSDJDLEtBQUtFLFNBQVNDLE1BQU0sQ0FBQyxDQUFDQyxJQUFJQSxFQUFFQyxRQUFRLENBQUMsU0FBUzFFLEdBQUcsQ0FBQyxDQUFDeUUsSUFBSUEsSUFBSS9DO1FBQy9EO0lBQ0o7QUFDSjtBQUNBLFNBQVMzQyxrQkFBa0IrRSxXQUFXO0lBQ2xDLE1BQU1hLGNBQWMsSUFBSUM7SUFDeEIsTUFBTUMsZ0JBQWdCLElBQUlEO0lBQzFCLE1BQU1FLGNBQWMsSUFBSUY7SUFDeEIsTUFBTUcsU0FBUyxJQUFJSDtJQUNuQixTQUFTSSxtQkFBbUJuQyxHQUFHO1FBQzNCLDJEQUEyRDtRQUMzRCxrRUFBa0U7UUFDbEUsY0FBYztRQUNkLElBQUlULEtBQXNDLEVBQUUsRUFXM0MsTUFBTTtZQUNILE9BQU9RLGFBQWFDO1FBQ3hCO0lBQ0o7SUFDQSxTQUFTcUMsZ0JBQWdCckQsSUFBSTtRQUN6QixJQUFJdEIsT0FBT3VFLFlBQVl6RixHQUFHLENBQUN3QztRQUMzQixJQUFJdEIsTUFBTTtZQUNOLE9BQU9BO1FBQ1g7UUFDQXVFLFlBQVl0RSxHQUFHLENBQUNxQixNQUFNdEIsT0FBTzRFLE1BQU10RCxNQUFNcEIsSUFBSSxDQUFDLENBQUMyRTtZQUMzQyxJQUFJLENBQUNBLElBQUlDLEVBQUUsRUFBRTtnQkFDVCxNQUFNLElBQUk1QyxNQUFNLGdDQUFnQ1o7WUFDcEQ7WUFDQSxPQUFPdUQsSUFBSUUsSUFBSSxHQUFHN0UsSUFBSSxDQUFDLENBQUM2RSxPQUFRO29CQUN4QnpELE1BQU1BO29CQUNOMEQsU0FBU0Q7Z0JBQ2I7UUFDUixHQUFHNUUsS0FBSyxDQUFDLENBQUNDO1lBQ04sTUFBTS9CLGVBQWUrQjtRQUN6QjtRQUNBLE9BQU9KO0lBQ1g7SUFDQSxPQUFPO1FBQ0hpRixnQkFBZ0J6QixLQUFLO1lBQ2pCLE9BQU9qRSxXQUFXaUUsT0FBT1k7UUFDN0I7UUFDQWMsY0FBYzFCLEtBQUssRUFBRTJCLE9BQU87WUFDdkJBLENBQUFBLFVBQVV0RixRQUFRQyxPQUFPLEdBQUdJLElBQUksQ0FBQyxJQUFJaUYsV0FBV2pGLElBQUksQ0FBQyxDQUFDa0YsV0FBWTtvQkFDM0RDLFdBQVdELFlBQVlBLFNBQVN6QixPQUFPLElBQUl5QjtvQkFDM0NsSCxTQUFTa0g7Z0JBQ2IsSUFBSSxDQUFDaEYsTUFBTztvQkFDUmtGLE9BQU9sRjtnQkFDWCxNQUFNUCxRQUFRQyxPQUFPLENBQUN5RixVQUFTLEVBQUdyRixJQUFJLENBQUMsQ0FBQ3NGO2dCQUN4QyxNQUFNQyxNQUFNckIsWUFBWXRGLEdBQUcsQ0FBQzBFO2dCQUM1QixJQUFJaUMsT0FBTyxhQUFhQSxLQUFLO29CQUN6QixJQUFJRCxPQUFPO3dCQUNQcEIsWUFBWW5FLEdBQUcsQ0FBQ3VELE9BQU9nQzt3QkFDdkJDLElBQUkzRixPQUFPLENBQUMwRjtvQkFDaEI7Z0JBQ0osT0FBTztvQkFDSCxJQUFJQSxPQUFPO3dCQUNQcEIsWUFBWW5FLEdBQUcsQ0FBQ3VELE9BQU9nQztvQkFDM0IsT0FBTzt3QkFDSHBCLFlBQVkvRCxNQUFNLENBQUNtRDtvQkFDdkI7b0JBQ0EsZ0RBQWdEO29CQUNoRCxrREFBa0Q7b0JBQ2xELG1CQUFtQjtvQkFDbkJnQixPQUFPbkUsTUFBTSxDQUFDbUQ7Z0JBQ2xCO1lBQ0o7UUFDSjtRQUNBa0MsV0FBV2xDLEtBQUssRUFBRW1DLFFBQVE7WUFDdEIsT0FBT3BHLFdBQVdpRSxPQUFPZ0IsUUFBUTtnQkFDN0IsSUFBSW9CO2dCQUNKLElBQUkvRCxJQUFzQyxFQUFFO29CQUN4Q1ksa0JBQWtCLElBQUk1QyxRQUFRLENBQUNDO3dCQUMzQjhGLHlCQUF5QjlGO29CQUM3QjtnQkFDSjtnQkFDQSxPQUFPNEMsMEJBQTBCWSxpQkFBaUJDLGFBQWFDLE9BQU90RCxJQUFJLENBQUMsQ0FBQzJGO29CQUN4RSxJQUFJLEVBQUVqQyxPQUFPLEVBQUVFLEdBQUcsRUFBRSxHQUFHK0I7b0JBQ3ZCLE9BQU9oRyxRQUFRbEIsR0FBRyxDQUFDO3dCQUNmeUYsWUFBWTBCLEdBQUcsQ0FBQ3RDLFNBQVMsRUFBRSxHQUFHM0QsUUFBUWxCLEdBQUcsQ0FBQ2lGLFFBQVFuRSxHQUFHLENBQUNnRjt3QkFDdEQ1RSxRQUFRbEIsR0FBRyxDQUFDbUYsSUFBSXJFLEdBQUcsQ0FBQ2tGO3FCQUN2QjtnQkFDTCxHQUFHekUsSUFBSSxDQUFDLENBQUMyRTtvQkFDTCxPQUFPLElBQUksQ0FBQ0ksY0FBYyxDQUFDekIsT0FBT3RELElBQUksQ0FBQyxDQUFDNkYsYUFBYzs0QkFDOUNBOzRCQUNBQyxRQUFRbkIsR0FBRyxDQUFDLEVBQUU7d0JBQ2xCO2dCQUNSLElBQUl2RixtQkFBbUJqQixlQUFlLElBQUk2RCxNQUFNLHFDQUFxQ3NCLFNBQVN0RCxJQUFJLENBQUMsQ0FBQzJGO29CQUNoRyxJQUFJLEVBQUVFLFVBQVUsRUFBRUMsTUFBTSxFQUFFLEdBQUdIO29CQUM3QixNQUFNaEIsTUFBTTdHLE9BQU9pSSxNQUFNLENBQUM7d0JBQ3RCRCxRQUFRQTtvQkFDWixHQUFHRDtvQkFDSCxPQUFPLFdBQVdBLGFBQWFBLGFBQWFsQjtnQkFDaEQsR0FBRzFFLEtBQUssQ0FBQyxDQUFDQztvQkFDTixJQUFJdUYsVUFBVTt3QkFDVixnREFBZ0Q7d0JBQ2hELE1BQU12RjtvQkFDVjtvQkFDQSxPQUFPO3dCQUNIa0YsT0FBT2xGO29CQUNYO2dCQUNKLEdBQUc4RixPQUFPLENBQUMsSUFBSU4sMEJBQTBCLE9BQU8sS0FBSyxJQUFJQTtZQUM3RDtRQUNKO1FBQ0FELFVBQVVuQyxLQUFLO1lBQ1gsc0hBQXNIO1lBQ3RILHNCQUFzQjtZQUN0QixJQUFJMkM7WUFDSixJQUFJQSxLQUFLQyxVQUFVQyxVQUFVLEVBQUU7Z0JBQzNCLHlEQUF5RDtnQkFDekQsSUFBSUYsR0FBR0csUUFBUSxJQUFJLEtBQUtDLElBQUksQ0FBQ0osR0FBR0ssYUFBYSxHQUFHLE9BQU8zRyxRQUFRQyxPQUFPO1lBQzFFO1lBQ0EsT0FBT3dELGlCQUFpQkMsYUFBYUMsT0FBT3RELElBQUksQ0FBQyxDQUFDdUcsU0FBUzVHLFFBQVFsQixHQUFHLENBQUN1QyxjQUFjdUYsT0FBTzdDLE9BQU8sQ0FBQ25FLEdBQUcsQ0FBQyxDQUFDOEMsU0FBU2xCLGVBQWVrQixPQUFPbUMsUUFBUSxJQUFJLGFBQWEsRUFBRSxHQUFHeEUsSUFBSSxDQUFDO2dCQUN0SyxJQUFHZCxxQkFBcUIyRCxtQkFBbUIsRUFBRSxJQUFJLElBQUksQ0FBQzJDLFNBQVMsQ0FBQ2xDLE9BQU8sTUFBTXJELEtBQUssQ0FBQyxLQUFLO1lBQzdGLEdBQUdBLEtBQUssQ0FDUixLQUFLO1FBQ1Q7SUFDSjtBQUNKO0FBRUEsSUFBSSxDQUFDLE9BQU9qQyxRQUFReUYsT0FBTyxLQUFLLGNBQWUsT0FBT3pGLFFBQVF5RixPQUFPLEtBQUssWUFBWXpGLFFBQVF5RixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU96RixRQUFReUYsT0FBTyxDQUFDK0MsVUFBVSxLQUFLLGFBQWE7SUFDcksxSSxPQUFPQyxjQUFjLENBQUNDLFFBQVF5RixPQUFPLEVBQUUsY0FBYztRQUFFeEYsT0FBTztJQUFLO0lBQ25FSCxPQUFPaUksTUFBTSxDQUFDL0gsUUFBUXlGLE9BQU8sRUFBRXpGO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVF5RixPQUFPO0FBQ2xDLEVBRUEsd0NBQXdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3JvdXRlLWxvYWRlci5qcz9lYTM0Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbWFya0Fzc2V0RXJyb3I6IG51bGwsXG4gICAgaXNBc3NldEVycm9yOiBudWxsLFxuICAgIGdldENsaWVudEJ1aWxkTWFuaWZlc3Q6IG51bGwsXG4gICAgY3JlYXRlUm91dGVMb2FkZXI6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgbWFya0Fzc2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbWFya0Fzc2V0RXJyb3I7XG4gICAgfSxcbiAgICBpc0Fzc2V0RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNBc3NldEVycm9yO1xuICAgIH0sXG4gICAgZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRDbGllbnRCdWlsZE1hbmlmZXN0O1xuICAgIH0sXG4gICAgY3JlYXRlUm91dGVMb2FkZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUm91dGVMb2FkZXI7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2dldGFzc2V0cGF0aGZyb21yb3V0ZSA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1hc3NldC1wYXRoLWZyb20tcm91dGVcIikpO1xuY29uc3QgX3RydXN0ZWR0eXBlcyA9IHJlcXVpcmUoXCIuL3RydXN0ZWQtdHlwZXNcIik7XG5jb25zdCBfcmVxdWVzdGlkbGVjYWxsYmFjayA9IHJlcXVpcmUoXCIuL3JlcXVlc3QtaWRsZS1jYWxsYmFja1wiKTtcbmNvbnN0IF9kZXBsb3ltZW50aWQgPSByZXF1aXJlKFwiLi4vYnVpbGQvZGVwbG95bWVudC1pZFwiKTtcbi8vIDMuOHMgd2FzIGFyYml0cmFyaWx5IGNob3NlbiBhcyBpdCdzIHdoYXQgaHR0cHM6Ly93ZWIuZGV2L2ludGVyYWN0aXZlXG4vLyBjb25zaWRlcnMgYXMgXCJHb29kXCIgdGltZS10by1pbnRlcmFjdGl2ZS4gV2UgbXVzdCBhc3N1bWUgc29tZXRoaW5nIHdlbnRcbi8vIHdyb25nIGJleW9uZCB0aGlzIHBvaW50LCBhbmQgdGhlbiBmYWxsLWJhY2sgdG8gYSBmdWxsIHBhZ2UgdHJhbnNpdGlvbiB0b1xuLy8gc2hvdyB0aGUgdXNlciBzb21ldGhpbmcgb2YgdmFsdWUuXG5jb25zdCBNU19NQVhfSURMRV9ERUxBWSA9IDM4MDA7XG5mdW5jdGlvbiB3aXRoRnV0dXJlKGtleSwgbWFwLCBnZW5lcmF0b3IpIHtcbiAgICBsZXQgZW50cnkgPSBtYXAuZ2V0KGtleSk7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGlmIChcImZ1dHVyZVwiIGluIGVudHJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkuZnV0dXJlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW50cnkpO1xuICAgIH1cbiAgICBsZXQgcmVzb2x2ZXI7XG4gICAgY29uc3QgcHJvbSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+e1xuICAgICAgICByZXNvbHZlciA9IHJlc29sdmU7XG4gICAgfSk7XG4gICAgbWFwLnNldChrZXksIGVudHJ5ID0ge1xuICAgICAgICByZXNvbHZlOiByZXNvbHZlcixcbiAgICAgICAgZnV0dXJlOiBwcm9tXG4gICAgfSk7XG4gICAgcmV0dXJuIGdlbmVyYXRvciA/IGdlbmVyYXRvcigpLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlcXVlbmNlc1xuICAgIC50aGVuKCh2YWx1ZSk9PihyZXNvbHZlcih2YWx1ZSksIHZhbHVlKSkuY2F0Y2goKGVycik9PntcbiAgICAgICAgbWFwLmRlbGV0ZShrZXkpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgfSkgOiBwcm9tO1xufVxuY29uc3QgQVNTRVRfTE9BRF9FUlJPUiA9IFN5bWJvbChcIkFTU0VUX0xPQURfRVJST1JcIik7XG5mdW5jdGlvbiBtYXJrQXNzZXRFcnJvcihlcnIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGVyciwgQVNTRVRfTE9BRF9FUlJPUiwge30pO1xufVxuZnVuY3Rpb24gaXNBc3NldEVycm9yKGVycikge1xuICAgIHJldHVybiBlcnIgJiYgQVNTRVRfTE9BRF9FUlJPUiBpbiBlcnI7XG59XG5mdW5jdGlvbiBoYXNQcmVmZXRjaChsaW5rKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuICAgICAgICByZXR1cm4oLy8gZGV0ZWN0IElFMTEgc2luY2UgaXQgc3VwcG9ydHMgcHJlZmV0Y2ggYnV0IGlzbid0IGRldGVjdGVkXG4gICAgICAgIC8vIHdpdGggcmVsTGlzdC5zdXBwb3J0XG4gICAgICAgICEhd2luZG93Lk1TSW5wdXRNZXRob2RDb250ZXh0ICYmICEhZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IGxpbmsucmVsTGlzdC5zdXBwb3J0cyhcInByZWZldGNoXCIpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5jb25zdCBjYW5QcmVmZXRjaCA9IGhhc1ByZWZldGNoKCk7XG5jb25zdCBnZXRBc3NldFF1ZXJ5U3RyaW5nID0gKCk9PntcbiAgICByZXR1cm4gKDAsIF9kZXBsb3ltZW50aWQuZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nKSgpO1xufTtcbmZ1bmN0aW9uIHByZWZldGNoVmlhRG9tKGhyZWYsIGFzLCBsaW5rKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gJ1xcbiAgICAgIGxpbmtbcmVsPVwicHJlZmV0Y2hcIl1baHJlZl49XCInICsgaHJlZiArICdcIl0sXFxuICAgICAgbGlua1tyZWw9XCJwcmVsb2FkXCJdW2hyZWZePVwiJyArIGhyZWYgKyAnXCJdLFxcbiAgICAgIHNjcmlwdFtzcmNePVwiJyArIGhyZWYgKyAnXCJdJztcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcbiAgICAgICAgLy8gVGhlIG9yZGVyIG9mIHByb3BlcnR5IGFzc2lnbm1lbnQgaGVyZSBpcyBpbnRlbnRpb25hbDpcbiAgICAgICAgaWYgKGFzKSBsaW5rLmFzID0gYXM7XG4gICAgICAgIGxpbmsucmVsID0gXCJwcmVmZXRjaFwiO1xuICAgICAgICBsaW5rLmNyb3NzT3JpZ2luID0gcHJvY2Vzcy5lbnYuX19ORVhUX0NST1NTX09SSUdJTjtcbiAgICAgICAgbGluay5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICBsaW5rLm9uZXJyb3IgPSAoKT0+cmVqZWN0KG1hcmtBc3NldEVycm9yKG5ldyBFcnJvcihcIkZhaWxlZCB0byBwcmVmZXRjaDogXCIgKyBocmVmKSkpO1xuICAgICAgICAvLyBgaHJlZmAgc2hvdWxkIGFsd2F5cyBiZSBsYXN0OlxuICAgICAgICBsaW5rLmhyZWYgPSBocmVmO1xuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gYXBwZW5kU2NyaXB0KHNyYywgc2NyaXB0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgIC8vIFRoZSBvcmRlciBvZiBwcm9wZXJ0eSBhc3NpZ25tZW50IGhlcmUgaXMgaW50ZW50aW9uYWwuXG4gICAgICAgIC8vIDEuIFNldHVwIHN1Y2Nlc3MvZmFpbHVyZSBob29rcyBpbiBjYXNlIHRoZSBicm93c2VyIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gICAgZXhlY3V0ZXMgd2hlbiBgc3JjYCBpcyBzZXQuXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICBzY3JpcHQub25lcnJvciA9ICgpPT5yZWplY3QobWFya0Fzc2V0RXJyb3IobmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgc2NyaXB0OiBcIiArIHNyYykpKTtcbiAgICAgICAgLy8gMi4gQ29uZmlndXJlIHRoZSBjcm9zcy1vcmlnaW4gYXR0cmlidXRlIGJlZm9yZSBzZXR0aW5nIGBzcmNgIGluIGNhc2UgdGhlXG4gICAgICAgIC8vICAgIGJyb3dzZXIgYmVnaW5zIHRvIGZldGNoLlxuICAgICAgICBzY3JpcHQuY3Jvc3NPcmlnaW4gPSBwcm9jZXNzLmVudi5fX05FWFRfQ1JPU1NfT1JJR0lOO1xuICAgICAgICAvLyAzLiBGaW5hbGx5LCBzZXQgdGhlIHNvdXJjZSBhbmQgaW5qZWN0IGludG8gdGhlIERPTSBpbiBjYXNlIHRoZSBjaGlsZFxuICAgICAgICAvLyAgICBtdXN0IGJlIGFwcGVuZGVkIGZvciBmZXRjaGluZyB0byBzdGFydC5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHNyYztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH0pO1xufVxuLy8gV2Ugd2FpdCBmb3IgcGFnZXMgdG8gYmUgYnVpbHQgaW4gZGV2IGJlZm9yZSB3ZSBzdGFydCB0aGUgcm91dGUgdHJhbnNpdGlvblxuLy8gdGltZW91dCB0byBwcmV2ZW50IGFuIHVuLW5lY2Vzc2FyeSBoYXJkIG5hdmlnYXRpb24gaW4gZGV2ZWxvcG1lbnQuXG5sZXQgZGV2QnVpbGRQcm9taXNlO1xuLy8gUmVzb2x2ZSBhIHByb21pc2UgdGhhdCB0aW1lcyBvdXQgYWZ0ZXIgZ2l2ZW4gYW1vdW50IG9mIG1pbGxpc2Vjb25kcy5cbmZ1bmN0aW9uIHJlc29sdmVQcm9taXNlV2l0aFRpbWVvdXQocCwgbXMsIGVycikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIHAudGhlbigocik9PntcbiAgICAgICAgICAgIC8vIFJlc29sdmVkLCBjYW5jZWwgdGhlIHRpbWVvdXRcbiAgICAgICAgICAgIGNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICByZXNvbHZlKHIpO1xuICAgICAgICB9KS5jYXRjaChyZWplY3QpO1xuICAgICAgICAvLyBXZSB3cmFwIHRoZXNlIGNoZWNrcyBzZXBhcmF0ZWx5IGZvciBiZXR0ZXIgZGVhZC1jb2RlIGVsaW1pbmF0aW9uIGluXG4gICAgICAgIC8vIHByb2R1Y3Rpb24gYnVuZGxlcy5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgICAgIChkZXZCdWlsZFByb21pc2UgfHwgUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCk9PntcbiAgICAgICAgICAgICAgICAoMCwgX3JlcXVlc3RpZGxlY2FsbGJhY2sucmVxdWVzdElkbGVDYWxsYmFjaykoKCk9PnNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIG1zKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICAgICAgKDAsIF9yZXF1ZXN0aWRsZWNhbGxiYWNrLnJlcXVlc3RJZGxlQ2FsbGJhY2spKCgpPT5zZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIG1zKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudEJ1aWxkTWFuaWZlc3QoKSB7XG4gICAgaWYgKHNlbGYuX19CVUlMRF9NQU5JRkVTVCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNlbGYuX19CVUlMRF9NQU5JRkVTVCk7XG4gICAgfVxuICAgIGNvbnN0IG9uQnVpbGRNYW5pZmVzdCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+e1xuICAgICAgICAvLyBNYW5kYXRvcnkgYmVjYXVzZSB0aGlzIGlzIG5vdCBjb25jdXJyZW50IHNhZmU6XG4gICAgICAgIGNvbnN0IGNiID0gc2VsZi5fX0JVSUxEX01BTklGRVNUX0NCO1xuICAgICAgICBzZWxmLl9fQlVJTERfTUFOSUZFU1RfQ0IgPSAoKT0+e1xuICAgICAgICAgICAgcmVzb2x2ZShzZWxmLl9fQlVJTERfTUFOSUZFU1QpO1xuICAgICAgICAgICAgY2IgJiYgY2IoKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzb2x2ZVByb21pc2VXaXRoVGltZW91dChvbkJ1aWxkTWFuaWZlc3QsIE1TX01BWF9JRExFX0RFTEFZLCBtYXJrQXNzZXRFcnJvcihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBjbGllbnQgYnVpbGQgbWFuaWZlc3RcIikpKTtcbn1cbmZ1bmN0aW9uIGdldEZpbGVzRm9yUm91dGUoYXNzZXRQcmVmaXgsIHJvdXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYXNzZXRQcmVmaXggKyBcIi9fbmV4dC9zdGF0aWMvY2h1bmtzL3BhZ2VzXCIgKyBlbmNvZGVVUkkoKDAsIF9nZXRhc3NldHBhdGhmcm9tcm91dGUuZGVmYXVsdCkocm91dGUsIFwiLmpzXCIpKSArIGdldEFzc2V0UXVlcnlTdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICBzY3JpcHRzOiBbXG4gICAgICAgICAgICAgICAgKDAsIF90cnVzdGVkdHlwZXMuX191bnNhZmVDcmVhdGVUcnVzdGVkU2NyaXB0VVJMKShzY3JpcHRVcmwpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgLy8gU3R5bGVzIGFyZSBoYW5kbGVkIGJ5IGBzdHlsZS1sb2FkZXJgIGluIGRldmVsb3BtZW50OlxuICAgICAgICAgICAgY3NzOiBbXVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldENsaWVudEJ1aWxkTWFuaWZlc3QoKS50aGVuKChtYW5pZmVzdCk9PntcbiAgICAgICAgaWYgKCEocm91dGUgaW4gbWFuaWZlc3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBtYXJrQXNzZXRFcnJvcihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9va3VwIHJvdXRlOiBcIiArIHJvdXRlKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsRmlsZXMgPSBtYW5pZmVzdFtyb3V0ZV0ubWFwKChlbnRyeSk9PmFzc2V0UHJlZml4ICsgXCIvX25leHQvXCIgKyBlbmNvZGVVUkkoZW50cnkpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjcmlwdHM6IGFsbEZpbGVzLmZpbHRlcigodik9PnYuZW5kc1dpdGgoXCIuanNcIikpLm1hcCgodik9PigwLCBfdHJ1c3RlZHR5cGVzLl9fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTCkodikgKyBnZXRBc3NldFF1ZXJ5U3RyaW5nKCkpLFxuICAgICAgICAgICAgY3NzOiBhbGxGaWxlcy5maWx0ZXIoKHYpPT52LmVuZHNXaXRoKFwiLmNzc1wiKSkubWFwKCh2KT0+diArIGdldEFzc2V0UXVlcnlTdHJpbmcoKSlcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVJvdXRlTG9hZGVyKGFzc2V0UHJlZml4KSB7XG4gICAgY29uc3QgZW50cnlwb2ludHMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgbG9hZGVkU2NyaXB0cyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBzdHlsZVNoZWV0cyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCByb3V0ZXMgPSBuZXcgTWFwKCk7XG4gICAgZnVuY3Rpb24gbWF5YmVFeGVjdXRlU2NyaXB0KHNyYykge1xuICAgICAgICAvLyBXaXRoIEhNUiB3ZSBtaWdodCBuZWVkIHRvIFwicmVsb2FkXCIgc2NyaXB0cyB3aGVuIHRoZXkgYXJlXG4gICAgICAgIC8vIGRpc3Bvc2VkIGFuZCByZWFkZGVkLiBFeGVjdXRpbmcgc2NyaXB0cyB0d2ljZSBoYXMgbm8gZnVuY3Rpb25hbFxuICAgICAgICAvLyBkaWZmZXJlbmNlc1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICAgICAgbGV0IHByb20gPSBsb2FkZWRTY3JpcHRzLmdldChzcmMudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBpZiAocHJvbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2tpcCBleGVjdXRpbmcgc2NyaXB0IGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgRE9NOlxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NjcmlwdFtzcmNePVwiJyArIHNyYyArICdcIl0nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvYWRlZFNjcmlwdHMuc2V0KHNyYy50b1N0cmluZygpLCBwcm9tID0gYXBwZW5kU2NyaXB0KHNyYykpO1xuICAgICAgICAgICAgcmV0dXJuIHByb207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwZW5kU2NyaXB0KHNyYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZmV0Y2hTdHlsZVNoZWV0KGhyZWYpIHtcbiAgICAgICAgbGV0IHByb20gPSBzdHlsZVNoZWV0cy5nZXQoaHJlZik7XG4gICAgICAgIGlmIChwcm9tKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbTtcbiAgICAgICAgfVxuICAgICAgICBzdHlsZVNoZWV0cy5zZXQoaHJlZiwgcHJvbSA9IGZldGNoKGhyZWYpLnRoZW4oKHJlcyk9PntcbiAgICAgICAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgc3R5bGVzaGVldDogXCIgKyBocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXMudGV4dCgpLnRoZW4oKHRleHQpPT4oe1xuICAgICAgICAgICAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB0ZXh0XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICAgICAgdGhyb3cgbWFya0Fzc2V0RXJyb3IoZXJyKTtcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gcHJvbTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2hlbkVudHJ5cG9pbnQgKHJvdXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aEZ1dHVyZShyb3V0ZSwgZW50cnlwb2ludHMpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVudHJ5cG9pbnQgKHJvdXRlLCBleGVjdXRlKSB7XG4gICAgICAgICAgICAoZXhlY3V0ZSA/IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PmV4ZWN1dGUoKSkudGhlbigoZXhwb3J0czEpPT4oe1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IGV4cG9ydHMxICYmIGV4cG9ydHMxLmRlZmF1bHQgfHwgZXhwb3J0czEsXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IGV4cG9ydHMxXG4gICAgICAgICAgICAgICAgfSksIChlcnIpPT4oe1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgICAgICAgICAgfSkpIDogUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCkpLnRoZW4oKGlucHV0KT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZCA9IGVudHJ5cG9pbnRzLmdldChyb3V0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKG9sZCAmJiBcInJlc29sdmVcIiBpbiBvbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeXBvaW50cy5zZXQocm91dGUsIGlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9sZC5yZXNvbHZlKGlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludHMuc2V0KHJvdXRlLCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeXBvaW50cy5kZWxldGUocm91dGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhpcyBlbnRyeXBvaW50IGhhcyBiZWVuIHJlc29sdmVkIGJlZm9yZVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcm91dGUgaXMgb3V0ZGF0ZWQgYW5kIHdlIHdhbnQgdG8gaW52YWxpZGF0ZVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGNhY2hlIGVudHJ5XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlcy5kZWxldGUocm91dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBsb2FkUm91dGUgKHJvdXRlLCBwcmVmZXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhGdXR1cmUocm91dGUsIHJvdXRlcywgKCk9PntcbiAgICAgICAgICAgICAgICBsZXQgZGV2QnVpbGRQcm9taXNlUmVzb2x2ZTtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICAgICAgICAgICAgICBkZXZCdWlsZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldkJ1aWxkUHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVQcm9taXNlV2l0aFRpbWVvdXQoZ2V0RmlsZXNGb3JSb3V0ZShhc3NldFByZWZpeCwgcm91dGUpLnRoZW4oKHBhcmFtKT0+e1xuICAgICAgICAgICAgICAgICAgICBsZXQgeyBzY3JpcHRzLCBjc3MgfSA9IHBhcmFtO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlwb2ludHMuaGFzKHJvdXRlKSA/IFtdIDogUHJvbWlzZS5hbGwoc2NyaXB0cy5tYXAobWF5YmVFeGVjdXRlU2NyaXB0KSksXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChjc3MubWFwKGZldGNoU3R5bGVTaGVldCkpXG4gICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlcyk9PntcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2hlbkVudHJ5cG9pbnQocm91dGUpLnRoZW4oKGVudHJ5cG9pbnQpPT4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzOiByZXNbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9KSwgTVNfTUFYX0lETEVfREVMQVksIG1hcmtBc3NldEVycm9yKG5ldyBFcnJvcihcIlJvdXRlIGRpZCBub3QgY29tcGxldGUgbG9hZGluZzogXCIgKyByb3V0ZSkpKS50aGVuKChwYXJhbSk9PntcbiAgICAgICAgICAgICAgICAgICAgbGV0IHsgZW50cnlwb2ludCwgc3R5bGVzIH0gPSBwYXJhbTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXM6IHN0eWxlc1xuICAgICAgICAgICAgICAgICAgICB9LCBlbnRyeXBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZXJyb3JcIiBpbiBlbnRyeXBvaW50ID8gZW50cnlwb2ludCA6IHJlcztcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJlZmV0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gY2FjaGUgZXJyb3JzIGR1cmluZyBwcmVmZXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSkuZmluYWxseSgoKT0+ZGV2QnVpbGRQcm9taXNlUmVzb2x2ZSA9PSBudWxsID8gdm9pZCAwIDogZGV2QnVpbGRQcm9taXNlUmVzb2x2ZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwcmVmZXRjaCAocm91dGUpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWVMYWJzL3F1aWNrbGluay9ibG9iLzQ1M2E2NjFmYTFmYTk0MGUyZDJlMDQ0NDUyMzk4ZTM4YzY3YTk4ZmIvc3JjL2luZGV4Lm1qcyNMMTE1LUwxMThcbiAgICAgICAgICAgIC8vIExpY2Vuc2U6IEFwYWNoZSAyLjBcbiAgICAgICAgICAgIGxldCBjbjtcbiAgICAgICAgICAgIGlmIChjbiA9IG5hdmlnYXRvci5jb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJlZmV0Y2ggaWYgdXNpbmcgMkcgb3IgaWYgU2F2ZS1EYXRhIGlzIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgaWYgKGNuLnNhdmVEYXRhIHx8IC8yZy8udGVzdChjbi5lZmZlY3RpdmVUeXBlKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdldEZpbGVzRm9yUm91dGUoYXNzZXRQcmVmaXgsIHJvdXRlKS50aGVuKChvdXRwdXQpPT5Qcm9taXNlLmFsbChjYW5QcmVmZXRjaCA/IG91dHB1dC5zY3JpcHRzLm1hcCgoc2NyaXB0KT0+cHJlZmV0Y2hWaWFEb20oc2NyaXB0LnRvU3RyaW5nKCksIFwic2NyaXB0XCIpKSA6IFtdKSkudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgICgwLCBfcmVxdWVzdGlkbGVjYWxsYmFjay5yZXF1ZXN0SWRsZUNhbGxiYWNrKSgoKT0+dGhpcy5sb2FkUm91dGUocm91dGUsIHRydWUpLmNhdGNoKCgpPT57fSkpO1xuICAgICAgICAgICAgfSkuY2F0Y2goLy8gc3dhbGxvdyBwcmVmZXRjaCBlcnJvcnNcbiAgICAgICAgICAgICgpPT57fSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yb3V0ZS1sb2FkZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwibWFya0Fzc2V0RXJyb3IiLCJpc0Fzc2V0RXJyb3IiLCJnZXRDbGllbnRCdWlsZE1hbmlmZXN0IiwiY3JlYXRlUm91dGVMb2FkZXIiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2dldGFzc2V0cGF0aGZyb21yb3V0ZSIsIl8iLCJfdHJ1c3RlZHR5cGVzIiwiX3JlcXVlc3RpZGxlY2FsbGJhY2siLCJfZGVwbG95bWVudGlkIiwiTVNfTUFYX0lETEVfREVMQVkiLCJ3aXRoRnV0dXJlIiwia2V5IiwibWFwIiwiZ2VuZXJhdG9yIiwiZW50cnkiLCJmdXR1cmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc29sdmVyIiwicHJvbSIsInNldCIsInRoZW4iLCJjYXRjaCIsImVyciIsImRlbGV0ZSIsIkFTU0VUX0xPQURfRVJST1IiLCJTeW1ib2wiLCJoYXNQcmVmZXRjaCIsImxpbmsiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ3aW5kb3ciLCJNU0lucHV0TWV0aG9kQ29udGV4dCIsImRvY3VtZW50TW9kZSIsInJlbExpc3QiLCJzdXBwb3J0cyIsImUiLCJjYW5QcmVmZXRjaCIsImdldEFzc2V0UXVlcnlTdHJpbmciLCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmciLCJwcmVmZXRjaFZpYURvbSIsImhyZWYiLCJhcyIsInJlamVjdCIsInNlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsInJlbCIsImNyb3NzT3JpZ2luIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9DUk9TU19PUklHSU4iLCJvbmxvYWQiLCJvbmVycm9yIiwiRXJyb3IiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJhcHBlbmRTY3JpcHQiLCJzcmMiLCJzY3JpcHQiLCJib2R5IiwiZGV2QnVpbGRQcm9taXNlIiwicmVzb2x2ZVByb21pc2VXaXRoVGltZW91dCIsInAiLCJtcyIsImNhbmNlbGxlZCIsInIiLCJyZXF1ZXN0SWRsZUNhbGxiYWNrIiwic2V0VGltZW91dCIsInNlbGYiLCJfX0JVSUxEX01BTklGRVNUIiwib25CdWlsZE1hbmlmZXN0IiwiY2IiLCJfX0JVSUxEX01BTklGRVNUX0NCIiwiZ2V0RmlsZXNGb3JSb3V0ZSIsImFzc2V0UHJlZml4Iiwicm91dGUiLCJzY3JpcHRVcmwiLCJlbmNvZGVVUkkiLCJkZWZhdWx0Iiwic2NyaXB0cyIsIl9fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTCIsImNzcyIsIm1hbmlmZXN0IiwiYWxsRmlsZXMiLCJmaWx0ZXIiLCJ2IiwiZW5kc1dpdGgiLCJlbnRyeXBvaW50cyIsIk1hcCIsImxvYWRlZFNjcmlwdHMiLCJzdHlsZVNoZWV0cyIsInJvdXRlcyIsIm1heWJlRXhlY3V0ZVNjcmlwdCIsInRvU3RyaW5nIiwiZmV0Y2hTdHlsZVNoZWV0IiwiZmV0Y2giLCJyZXMiLCJvayIsInRleHQiLCJjb250ZW50Iiwid2hlbkVudHJ5cG9pbnQiLCJvbkVudHJ5cG9pbnQiLCJleGVjdXRlIiwiZXhwb3J0czEiLCJjb21wb25lbnQiLCJlcnJvciIsInVuZGVmaW5lZCIsImlucHV0Iiwib2xkIiwibG9hZFJvdXRlIiwicHJlZmV0Y2giLCJkZXZCdWlsZFByb21pc2VSZXNvbHZlIiwicGFyYW0iLCJoYXMiLCJlbnRyeXBvaW50Iiwic3R5bGVzIiwiYXNzaWduIiwiZmluYWxseSIsImNuIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsInNhdmVEYXRhIiwidGVzdCIsImVmZmVjdGl2ZVR5cGUiLCJvdXRwdXQiLCJfX2VzTW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/route-loader.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/router.js": +/*!*************************************************!*\ + !*** ./node_modules/next/dist/client/router.js ***! + \*************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* global window */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n Router: function() {\n return _router.default;\n },\n // Export the singletonRouter and this is the public API.\n default: function() {\n return _default;\n },\n withRouter: function() {\n return _withrouter.default;\n },\n useRouter: function() {\n return useRouter;\n },\n createRouter: function() {\n return createRouter;\n },\n makePublicRouterInstance: function() {\n return makePublicRouterInstance;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _router = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/router */ \"./node_modules/next/dist/shared/lib/router/router.js\"));\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../lib/is-error */ \"./node_modules/next/dist/lib/is-error.js\"));\nconst _withrouter = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./with-router */ \"./node_modules/next/dist/client/with-router.js\"));\nconst singletonRouter = {\n router: null,\n readyCallbacks: [],\n ready (callback) {\n if (this.router) return callback();\n if (true) {\n this.readyCallbacks.push(callback);\n }\n }\n};\n// Create public properties and methods of the router in the singletonRouter\nconst urlPropertyFields = [\n \"pathname\",\n \"route\",\n \"query\",\n \"asPath\",\n \"components\",\n \"isFallback\",\n \"basePath\",\n \"locale\",\n \"locales\",\n \"defaultLocale\",\n \"isReady\",\n \"isPreview\",\n \"isLocaleDomain\",\n \"domainLocales\"\n];\nconst routerEvents = [\n \"routeChangeStart\",\n \"beforeHistoryChange\",\n \"routeChangeComplete\",\n \"routeChangeError\",\n \"hashChangeStart\",\n \"hashChangeComplete\"\n];\nconst coreMethodFields = [\n \"push\",\n \"replace\",\n \"reload\",\n \"back\",\n \"prefetch\",\n \"beforePopState\"\n];\n// Events is a static property on the router, the router doesn't have to be initialized to use it\nObject.defineProperty(singletonRouter, \"events\", {\n get () {\n return _router.default.events;\n }\n});\nfunction getRouter() {\n if (!singletonRouter.router) {\n const message = \"No router instance found.\\n\" + 'You should only use \"next/router\" on the client side of your app.\\n';\n throw new Error(message);\n }\n return singletonRouter.router;\n}\nurlPropertyFields.forEach((field)=>{\n // Here we need to use Object.defineProperty because we need to return\n // the property assigned to the actual router\n // The value might get changed as we change routes and this is the\n // proper way to access it\n Object.defineProperty(singletonRouter, field, {\n get () {\n const router = getRouter();\n return router[field];\n }\n });\n});\ncoreMethodFields.forEach((field)=>{\n singletonRouter[field] = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n const router = getRouter();\n return router[field](...args);\n };\n});\nrouterEvents.forEach((event)=>{\n singletonRouter.ready(()=>{\n _router.default.events.on(event, function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n const eventField = \"on\" + event.charAt(0).toUpperCase() + event.substring(1);\n const _singletonRouter = singletonRouter;\n if (_singletonRouter[eventField]) {\n try {\n _singletonRouter[eventField](...args);\n } catch (err) {\n console.error(\"Error when running the Router event: \" + eventField);\n console.error((0, _iserror.default)(err) ? err.message + \"\\n\" + err.stack : err + \"\");\n }\n }\n });\n });\n});\nconst _default = singletonRouter;\nfunction useRouter() {\n _s();\n const router = _react.default.useContext(_routercontextsharedruntime.RouterContext);\n if (!router) {\n throw new Error(\"NextRouter was not mounted. https://nextjs.org/docs/messages/next-router-not-mounted\");\n }\n return router;\n}\n_s(useRouter, \"rbAhEc3dLGnVlsHWaSDsgP4MZS0=\");\nfunction createRouter() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n singletonRouter.router = new _router.default(...args);\n singletonRouter.readyCallbacks.forEach((cb)=>cb());\n singletonRouter.readyCallbacks = [];\n return singletonRouter.router;\n}\nfunction makePublicRouterInstance(router) {\n const scopedRouter = router;\n const instance = {};\n for (const property of urlPropertyFields){\n if (typeof scopedRouter[property] === \"object\") {\n instance[property] = Object.assign(Array.isArray(scopedRouter[property]) ? [] : {}, scopedRouter[property]) // makes sure query is not stateful\n ;\n continue;\n }\n instance[property] = scopedRouter[property];\n }\n // Events is a static property on the router, the router doesn't have to be initialized to use it\n instance.events = _router.default.events;\n coreMethodFields.forEach((field)=>{\n instance[field] = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n return scopedRouter[field](...args);\n };\n });\n return instance;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=router.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yb3V0ZXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLEdBQWdCOztBQUFiO0FBQ3BCQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQU9OO0FBQ0EsU0FBU08sUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSWIsT0FBT0MsY0FBYyxDQUFDVyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFULFNBQVM7SUFDYkcsUUFBUTtRQUNKLE9BQU9ZLFFBQVFYLE9BQU87SUFDMUI7SUFDQSx5REFBeUQ7SUFDekRBLFNBQVM7UUFDTCxPQUFPWTtJQUNYO0lBQ0FYLFlBQVk7UUFDUixPQUFPWSxZQUFZYixPQUFPO0lBQzlCO0lBQ0FFLFdBQVc7UUFDUCxPQUFPQTtJQUNYO0lBQ0FDLGNBQWM7UUFDVixPQUFPQTtJQUNYO0lBQ0FDLDBCQUEwQjtRQUN0QixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNVSwyQkFBMkJDLG1CQUFPQSxDQUFDLDRHQUF5QztBQUNsRixNQUFNQyxTQUFTLFdBQVcsR0FBR0YseUJBQXlCRyxDQUFDLENBQUNGLG1CQUFPQSxDQUFDLDRDQUFPO0FBQ3ZFLE1BQU1KLFVBQVUsV0FBVyxHQUFHRyx5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMseUZBQTZCO0FBQzlGLE1BQU1HLDhCQUE4QkgsbUJBQU9BLENBQUMseUhBQTZDO0FBQ3pGLE1BQU1JLFdBQVcsV0FBVyxHQUFHTCx5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsaUVBQWlCO0FBQ25GLE1BQU1GLGNBQWMsV0FBVyxHQUFHQyx5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMscUVBQWU7QUFDcEYsTUFBTUssa0JBQWtCO0lBQ3BCQyxRQUFRO0lBQ1JDLGdCQUFnQixFQUFFO0lBQ2xCQyxPQUFPQyxRQUFRO1FBQ1gsSUFBSSxJQUFJLENBQUNILE1BQU0sRUFBRSxPQUFPRztRQUN4QixJQUFJLElBQTZCLEVBQUU7WUFDL0IsSUFBSSxDQUFDRixjQUFjLENBQUNHLElBQUksQ0FBQ0Q7UUFDN0I7SUFDSjtBQUNKO0FBQ0EsNEVBQTRFO0FBQzVFLE1BQU1FLG9CQUFvQjtJQUN0QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0g7QUFDRCxNQUFNQyxlQUFlO0lBQ2pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNIO0FBQ0QsTUFBTUMsbUJBQW1CO0lBQ3JCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNIO0FBQ0QsaUdBQWlHO0FBQ2pHbEMsT0FBT0MsY0FBYyxDQUFDeUIsaUJBQWlCLFVBQVU7SUFDN0NWO1FBQ0ksT0FBT0MsUUFBUVgsT0FBTyxDQUFDNkIsTUFBTTtJQUNqQztBQUNKO0FBQ0EsU0FBU0M7SUFDTCxJQUFJLENBQUNWLGdCQUFnQkMsTUFBTSxFQUFFO1FBQ3pCLE1BQU1VLFVBQVUsZ0NBQWdDO1FBQ2hELE1BQU0sSUFBSUMsTUFBTUQ7SUFDcEI7SUFDQSxPQUFPWCxnQkFBZ0JDLE1BQU07QUFDakM7QUFDQUssa0JBQWtCTyxPQUFPLENBQUMsQ0FBQ0M7SUFDdkIsc0VBQXNFO0lBQ3RFLDZDQUE2QztJQUM3QyxrRUFBa0U7SUFDbEUsMEJBQTBCO0lBQzFCeEMsT0FBT0MsY0FBYyxDQUFDeUIsaUJBQWlCYyxPQUFPO1FBQzFDeEI7WUFDSSxNQUFNVyxTQUFTUztZQUNmLE9BQU9ULE1BQU0sQ0FBQ2EsTUFBTTtRQUN4QjtJQUNKO0FBQ0o7QUFDQU4saUJBQWlCSyxPQUFPLENBQUMsQ0FBQ0M7SUFDdEJkLGVBQWUsQ0FBQ2MsTUFBTSxHQUFHO1FBQ3JCLElBQUksSUFBSUMsT0FBT0MsVUFBVUMsTUFBTSxFQUFFQyxPQUFPLElBQUlDLE1BQU1KLE9BQU9LLE9BQU8sR0FBR0EsT0FBT0wsTUFBTUssT0FBTztZQUNuRkYsSUFBSSxDQUFDRSxLQUFLLEdBQUdKLFNBQVMsQ0FBQ0ksS0FBSztRQUNoQztRQUNBLE1BQU1uQixTQUFTUztRQUNmLE9BQU9ULE1BQU0sQ0FBQ2EsTUFBTSxJQUFJSTtJQUM1QjtBQUNKO0FBQ0FYLGFBQWFNLE9BQU8sQ0FBQyxDQUFDUTtJQUNsQnJCLGdCQUFnQkcsS0FBSyxDQUFDO1FBQ2xCWixRQUFRWCxPQUFPLENBQUM2QixNQUFNLENBQUNhLEVBQUUsQ0FBQ0QsT0FBTztZQUM3QixJQUFJLElBQUlOLE9BQU9DLFVBQVVDLE1BQU0sRUFBRUMsT0FBTyxJQUFJQyxNQUFNSixPQUFPSyxPQUFPLEdBQUdBLE9BQU9MLE1BQU1LLE9BQU87Z0JBQ25GRixJQUFJLENBQUNFLEtBQUssR0FBR0osU0FBUyxDQUFDSSxLQUFLO1lBQ2hDO1lBQ0EsTUFBTUcsYUFBYSxPQUFPRixNQUFNRyxNQUFNLENBQUMsR0FBR0MsV0FBVyxLQUFLSixNQUFNSyxTQUFTLENBQUM7WUFDMUUsTUFBTUMsbUJBQW1CM0I7WUFDekIsSUFBSTJCLGdCQUFnQixDQUFDSixXQUFXLEVBQUU7Z0JBQzlCLElBQUk7b0JBQ0FJLGdCQUFnQixDQUFDSixXQUFXLElBQUlMO2dCQUNwQyxFQUFFLE9BQU9VLEtBQUs7b0JBQ1ZDLFFBQVFDLEtBQUssQ0FBQywwQ0FBMENQO29CQUN4RE0sUUFBUUMsS0FBSyxDQUFDLENBQUMsR0FBRy9CLFNBQVNuQixPQUFPLEVBQUVnRCxPQUFPQSxJQUFJakIsT0FBTyxHQUFHLE9BQU9pQixJQUFJRyxLQUFLLEdBQUdILE1BQU07Z0JBQ3RGO1lBQ0o7UUFDSjtJQUNKO0FBQ0o7QUFDQSxNQUFNcEMsV0FBV1E7QUFDakIsU0FBU2xCOztJQUNMLE1BQU1tQixTQUFTTCxPQUFPaEIsT0FBTyxDQUFDb0QsVUFBVSxDQUFDbEMsNEJBQTRCbUMsYUFBYTtJQUNsRixJQUFJLENBQUNoQyxRQUFRO1FBQ1QsTUFBTSxJQUFJVyxNQUFNO0lBQ3BCO0lBQ0EsT0FBT1g7QUFDWDtHQU5TbkI7QUFPVCxTQUFTQztJQUNMLElBQUksSUFBSWdDLE9BQU9DLFVBQVVDLE1BQU0sRUFBRUMsT0FBTyxJQUFJQyxNQUFNSixPQUFPSyxPQUFPLEdBQUdBLE9BQU9MLE1BQU1LLE9BQU87UUFDbkZGLElBQUksQ0FBQ0UsS0FBSyxHQUFHSixTQUFTLENBQUNJLEtBQUs7SUFDaEM7SUFDQXBCLGdCQUFnQkMsTUFBTSxHQUFHLElBQUlWLFFBQVFYLE9BQU8sSUFBSXNDO0lBQ2hEbEIsZ0JBQWdCRSxjQUFjLENBQUNXLE9BQU8sQ0FBQyxDQUFDcUIsS0FBS0E7SUFDN0NsQyxnQkFBZ0JFLGNBQWMsR0FBRyxFQUFFO0lBQ25DLE9BQU9GLGdCQUFnQkMsTUFBTTtBQUNqQztBQUNBLFNBQVNqQix5QkFBeUJpQixNQUFNO0lBQ3BDLE1BQU1rQyxlQUFlbEM7SUFDckIsTUFBTW1DLFdBQVcsQ0FBQztJQUNsQixLQUFLLE1BQU1DLFlBQVkvQixrQkFBa0I7UUFDckMsSUFBSSxPQUFPNkIsWUFBWSxDQUFDRSxTQUFTLEtBQUssVUFBVTtZQUM1Q0QsUUFBUSxDQUFDQyxTQUFTLEdBQUcvRCxPQUFPZ0UsTUFBTSxDQUFDbkIsTUFBTW9CLE9BQU8sQ0FBQ0osWUFBWSxDQUFDRSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsR0FBR0YsWUFBWSxDQUFDRSxTQUFTLEVBQUUsbUNBQW1DOztZQUUvSTtRQUNKO1FBQ0FELFFBQVEsQ0FBQ0MsU0FBUyxHQUFHRixZQUFZLENBQUNFLFNBQVM7SUFDL0M7SUFDQSxpR0FBaUc7SUFDakdELFNBQVMzQixNQUFNLEdBQUdsQixRQUFRWCxPQUFPLENBQUM2QixNQUFNO0lBQ3hDRCxpQkFBaUJLLE9BQU8sQ0FBQyxDQUFDQztRQUN0QnNCLFFBQVEsQ0FBQ3RCLE1BQU0sR0FBRztZQUNkLElBQUksSUFBSUMsT0FBT0MsVUFBVUMsTUFBTSxFQUFFQyxPQUFPLElBQUlDLE1BQU1KLE9BQU9LLE9BQU8sR0FBR0EsT0FBT0wsTUFBTUssT0FBTztnQkFDbkZGLElBQUksQ0FBQ0UsS0FBSyxHQUFHSixTQUFTLENBQUNJLEtBQUs7WUFDaEM7WUFDQSxPQUFPZSxZQUFZLENBQUNyQixNQUFNLElBQUlJO1FBQ2xDO0lBQ0o7SUFDQSxPQUFPa0I7QUFDWDtBQUVBLElBQUksQ0FBQyxPQUFPNUQsUUFBUUksT0FBTyxLQUFLLGNBQWUsT0FBT0osUUFBUUksT0FBTyxLQUFLLFlBQVlKLFFBQVFJLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT0osUUFBUUksT0FBTyxDQUFDNEQsVUFBVSxLQUFLLGFBQWE7SUFDcktsRSxPQUFPQyxjQUFjLENBQUNDLFFBQVFJLE9BQU8sRUFBRSxjQUFjO1FBQUVILE9BQU87SUFBSztJQUNuRUgsT0FBT2dFLE1BQU0sQ0FBQzlELFFBQVFJLE9BQU8sRUFBRUo7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUUksT0FBTztBQUNsQyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9yb3V0ZXIuanM/MzFmYyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgd2luZG93ICovIFwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgUm91dGVyOiBudWxsLFxuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgd2l0aFJvdXRlcjogbnVsbCxcbiAgICB1c2VSb3V0ZXI6IG51bGwsXG4gICAgY3JlYXRlUm91dGVyOiBudWxsLFxuICAgIG1ha2VQdWJsaWNSb3V0ZXJJbnN0YW5jZTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBSb3V0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3JvdXRlci5kZWZhdWx0O1xuICAgIH0sXG4gICAgLy8gRXhwb3J0IHRoZSBzaW5nbGV0b25Sb3V0ZXIgYW5kIHRoaXMgaXMgdGhlIHB1YmxpYyBBUEkuXG4gICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfZGVmYXVsdDtcbiAgICB9LFxuICAgIHdpdGhSb3V0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX3dpdGhyb3V0ZXIuZGVmYXVsdDtcbiAgICB9LFxuICAgIHVzZVJvdXRlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VSb3V0ZXI7XG4gICAgfSxcbiAgICBjcmVhdGVSb3V0ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUm91dGVyO1xuICAgIH0sXG4gICAgbWFrZVB1YmxpY1JvdXRlckluc3RhbmNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG1ha2VQdWJsaWNSb3V0ZXJJbnN0YW5jZTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfcm91dGVyID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vc2hhcmVkL2xpYi9yb3V0ZXIvcm91dGVyXCIpKTtcbmNvbnN0IF9yb3V0ZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL3JvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX2lzZXJyb3IgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCIuLi9saWIvaXMtZXJyb3JcIikpO1xuY29uc3QgX3dpdGhyb3V0ZXIgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCIuL3dpdGgtcm91dGVyXCIpKTtcbmNvbnN0IHNpbmdsZXRvblJvdXRlciA9IHtcbiAgICByb3V0ZXI6IG51bGwsXG4gICAgcmVhZHlDYWxsYmFja3M6IFtdLFxuICAgIHJlYWR5IChjYWxsYmFjaykge1xuICAgICAgICBpZiAodGhpcy5yb3V0ZXIpIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgdGhpcy5yZWFkeUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4vLyBDcmVhdGUgcHVibGljIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgb2YgdGhlIHJvdXRlciBpbiB0aGUgc2luZ2xldG9uUm91dGVyXG5jb25zdCB1cmxQcm9wZXJ0eUZpZWxkcyA9IFtcbiAgICBcInBhdGhuYW1lXCIsXG4gICAgXCJyb3V0ZVwiLFxuICAgIFwicXVlcnlcIixcbiAgICBcImFzUGF0aFwiLFxuICAgIFwiY29tcG9uZW50c1wiLFxuICAgIFwiaXNGYWxsYmFja1wiLFxuICAgIFwiYmFzZVBhdGhcIixcbiAgICBcImxvY2FsZVwiLFxuICAgIFwibG9jYWxlc1wiLFxuICAgIFwiZGVmYXVsdExvY2FsZVwiLFxuICAgIFwiaXNSZWFkeVwiLFxuICAgIFwiaXNQcmV2aWV3XCIsXG4gICAgXCJpc0xvY2FsZURvbWFpblwiLFxuICAgIFwiZG9tYWluTG9jYWxlc1wiXG5dO1xuY29uc3Qgcm91dGVyRXZlbnRzID0gW1xuICAgIFwicm91dGVDaGFuZ2VTdGFydFwiLFxuICAgIFwiYmVmb3JlSGlzdG9yeUNoYW5nZVwiLFxuICAgIFwicm91dGVDaGFuZ2VDb21wbGV0ZVwiLFxuICAgIFwicm91dGVDaGFuZ2VFcnJvclwiLFxuICAgIFwiaGFzaENoYW5nZVN0YXJ0XCIsXG4gICAgXCJoYXNoQ2hhbmdlQ29tcGxldGVcIlxuXTtcbmNvbnN0IGNvcmVNZXRob2RGaWVsZHMgPSBbXG4gICAgXCJwdXNoXCIsXG4gICAgXCJyZXBsYWNlXCIsXG4gICAgXCJyZWxvYWRcIixcbiAgICBcImJhY2tcIixcbiAgICBcInByZWZldGNoXCIsXG4gICAgXCJiZWZvcmVQb3BTdGF0ZVwiXG5dO1xuLy8gRXZlbnRzIGlzIGEgc3RhdGljIHByb3BlcnR5IG9uIHRoZSByb3V0ZXIsIHRoZSByb3V0ZXIgZG9lc24ndCBoYXZlIHRvIGJlIGluaXRpYWxpemVkIHRvIHVzZSBpdFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KHNpbmdsZXRvblJvdXRlciwgXCJldmVudHNcIiwge1xuICAgIGdldCAoKSB7XG4gICAgICAgIHJldHVybiBfcm91dGVyLmRlZmF1bHQuZXZlbnRzO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gZ2V0Um91dGVyKCkge1xuICAgIGlmICghc2luZ2xldG9uUm91dGVyLnJvdXRlcikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gXCJObyByb3V0ZXIgaW5zdGFuY2UgZm91bmQuXFxuXCIgKyAnWW91IHNob3VsZCBvbmx5IHVzZSBcIm5leHQvcm91dGVyXCIgb24gdGhlIGNsaWVudCBzaWRlIG9mIHlvdXIgYXBwLlxcbic7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpbmdsZXRvblJvdXRlci5yb3V0ZXI7XG59XG51cmxQcm9wZXJ0eUZpZWxkcy5mb3JFYWNoKChmaWVsZCk9PntcbiAgICAvLyBIZXJlIHdlIG5lZWQgdG8gdXNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBiZWNhdXNlIHdlIG5lZWQgdG8gcmV0dXJuXG4gICAgLy8gdGhlIHByb3BlcnR5IGFzc2lnbmVkIHRvIHRoZSBhY3R1YWwgcm91dGVyXG4gICAgLy8gVGhlIHZhbHVlIG1pZ2h0IGdldCBjaGFuZ2VkIGFzIHdlIGNoYW5nZSByb3V0ZXMgYW5kIHRoaXMgaXMgdGhlXG4gICAgLy8gcHJvcGVyIHdheSB0byBhY2Nlc3MgaXRcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2luZ2xldG9uUm91dGVyLCBmaWVsZCwge1xuICAgICAgICBnZXQgKCkge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyID0gZ2V0Um91dGVyKCk7XG4gICAgICAgICAgICByZXR1cm4gcm91dGVyW2ZpZWxkXTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG5jb3JlTWV0aG9kRmllbGRzLmZvckVhY2goKGZpZWxkKT0+e1xuICAgIHNpbmdsZXRvblJvdXRlcltmaWVsZF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3V0ZXIgPSBnZXRSb3V0ZXIoKTtcbiAgICAgICAgcmV0dXJuIHJvdXRlcltmaWVsZF0oLi4uYXJncyk7XG4gICAgfTtcbn0pO1xucm91dGVyRXZlbnRzLmZvckVhY2goKGV2ZW50KT0+e1xuICAgIHNpbmdsZXRvblJvdXRlci5yZWFkeSgoKT0+e1xuICAgICAgICBfcm91dGVyLmRlZmF1bHQuZXZlbnRzLm9uKGV2ZW50LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXZlbnRGaWVsZCA9IFwib25cIiArIGV2ZW50LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZXZlbnQuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgY29uc3QgX3NpbmdsZXRvblJvdXRlciA9IHNpbmdsZXRvblJvdXRlcjtcbiAgICAgICAgICAgIGlmIChfc2luZ2xldG9uUm91dGVyW2V2ZW50RmllbGRdKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgX3NpbmdsZXRvblJvdXRlcltldmVudEZpZWxkXSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHdoZW4gcnVubmluZyB0aGUgUm91dGVyIGV2ZW50OiBcIiArIGV2ZW50RmllbGQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCgwLCBfaXNlcnJvci5kZWZhdWx0KShlcnIpID8gZXJyLm1lc3NhZ2UgKyBcIlxcblwiICsgZXJyLnN0YWNrIDogZXJyICsgXCJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn0pO1xuY29uc3QgX2RlZmF1bHQgPSBzaW5nbGV0b25Sb3V0ZXI7XG5mdW5jdGlvbiB1c2VSb3V0ZXIoKSB7XG4gICAgY29uc3Qgcm91dGVyID0gX3JlYWN0LmRlZmF1bHQudXNlQ29udGV4dChfcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUuUm91dGVyQ29udGV4dCk7XG4gICAgaWYgKCFyb3V0ZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTmV4dFJvdXRlciB3YXMgbm90IG1vdW50ZWQuIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25leHQtcm91dGVyLW5vdC1tb3VudGVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcm91dGVyO1xufVxuZnVuY3Rpb24gY3JlYXRlUm91dGVyKCkge1xuICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgc2luZ2xldG9uUm91dGVyLnJvdXRlciA9IG5ldyBfcm91dGVyLmRlZmF1bHQoLi4uYXJncyk7XG4gICAgc2luZ2xldG9uUm91dGVyLnJlYWR5Q2FsbGJhY2tzLmZvckVhY2goKGNiKT0+Y2IoKSk7XG4gICAgc2luZ2xldG9uUm91dGVyLnJlYWR5Q2FsbGJhY2tzID0gW107XG4gICAgcmV0dXJuIHNpbmdsZXRvblJvdXRlci5yb3V0ZXI7XG59XG5mdW5jdGlvbiBtYWtlUHVibGljUm91dGVySW5zdGFuY2Uocm91dGVyKSB7XG4gICAgY29uc3Qgc2NvcGVkUm91dGVyID0gcm91dGVyO1xuICAgIGNvbnN0IGluc3RhbmNlID0ge307XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiB1cmxQcm9wZXJ0eUZpZWxkcyl7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NvcGVkUm91dGVyW3Byb3BlcnR5XSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaW5zdGFuY2VbcHJvcGVydHldID0gT2JqZWN0LmFzc2lnbihBcnJheS5pc0FycmF5KHNjb3BlZFJvdXRlcltwcm9wZXJ0eV0pID8gW10gOiB7fSwgc2NvcGVkUm91dGVyW3Byb3BlcnR5XSkgLy8gbWFrZXMgc3VyZSBxdWVyeSBpcyBub3Qgc3RhdGVmdWxcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlW3Byb3BlcnR5XSA9IHNjb3BlZFJvdXRlcltwcm9wZXJ0eV07XG4gICAgfVxuICAgIC8vIEV2ZW50cyBpcyBhIHN0YXRpYyBwcm9wZXJ0eSBvbiB0aGUgcm91dGVyLCB0aGUgcm91dGVyIGRvZXNuJ3QgaGF2ZSB0byBiZSBpbml0aWFsaXplZCB0byB1c2UgaXRcbiAgICBpbnN0YW5jZS5ldmVudHMgPSBfcm91dGVyLmRlZmF1bHQuZXZlbnRzO1xuICAgIGNvcmVNZXRob2RGaWVsZHMuZm9yRWFjaCgoZmllbGQpPT57XG4gICAgICAgIGluc3RhbmNlW2ZpZWxkXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVkUm91dGVyW2ZpZWxkXSguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJvdXRlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJSb3V0ZXIiLCJkZWZhdWx0Iiwid2l0aFJvdXRlciIsInVzZVJvdXRlciIsImNyZWF0ZVJvdXRlciIsIm1ha2VQdWJsaWNSb3V0ZXJJbnN0YW5jZSIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9yb3V0ZXIiLCJfZGVmYXVsdCIsIl93aXRocm91dGVyIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdCIsIl8iLCJfcm91dGVyY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfaXNlcnJvciIsInNpbmdsZXRvblJvdXRlciIsInJvdXRlciIsInJlYWR5Q2FsbGJhY2tzIiwicmVhZHkiLCJjYWxsYmFjayIsInB1c2giLCJ1cmxQcm9wZXJ0eUZpZWxkcyIsInJvdXRlckV2ZW50cyIsImNvcmVNZXRob2RGaWVsZHMiLCJldmVudHMiLCJnZXRSb3V0ZXIiLCJtZXNzYWdlIiwiRXJyb3IiLCJmb3JFYWNoIiwiZmllbGQiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImV2ZW50Iiwib24iLCJldmVudEZpZWxkIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzdWJzdHJpbmciLCJfc2luZ2xldG9uUm91dGVyIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwic3RhY2siLCJ1c2VDb250ZXh0IiwiUm91dGVyQ29udGV4dCIsImNiIiwic2NvcGVkUm91dGVyIiwiaW5zdGFuY2UiLCJwcm9wZXJ0eSIsImFzc2lnbiIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/router.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/script.js": +/*!*************************************************!*\ + !*** ./node_modules/next/dist/client/script.js ***! + \*************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n handleClientScriptLoad: function() {\n return handleClientScriptLoad;\n },\n initScriptLoader: function() {\n return initScriptLoader;\n },\n default: function() {\n return _default;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _reactdom = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _headmanager = __webpack_require__(/*! ./head-manager */ \"./node_modules/next/dist/client/head-manager.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"./node_modules/next/dist/client/request-idle-callback.js\");\nconst ScriptCache = new Map();\nconst LoadCache = new Set();\nconst ignoreProps = [\n \"onLoad\",\n \"onReady\",\n \"dangerouslySetInnerHTML\",\n \"children\",\n \"onError\",\n \"strategy\",\n \"stylesheets\"\n];\nconst insertStylesheets = (stylesheets)=>{\n // Case 1: Styles for afterInteractive/lazyOnload with appDir injected via handleClientScriptLoad\n //\n // Using ReactDOM.preinit to feature detect appDir and inject styles\n // Stylesheets might have already been loaded if initialized with Script component\n // Re-inject styles here to handle scripts loaded via handleClientScriptLoad\n // ReactDOM.preinit handles dedup and ensures the styles are loaded only once\n if (_reactdom.default.preinit) {\n stylesheets.forEach((stylesheet)=>{\n _reactdom.default.preinit(stylesheet, {\n as: \"style\"\n });\n });\n return;\n }\n // Case 2: Styles for afterInteractive/lazyOnload with pages injected via handleClientScriptLoad\n //\n // We use this function to load styles when appdir is not detected\n // TODO: Use React float APIs to load styles once available for pages dir\n if (true) {\n let head = document.head;\n stylesheets.forEach((stylesheet)=>{\n let link = document.createElement(\"link\");\n link.type = \"text/css\";\n link.rel = \"stylesheet\";\n link.href = stylesheet;\n head.appendChild(link);\n });\n }\n};\nconst loadScript = (props)=>{\n const { src, id, onLoad = ()=>{}, onReady = null, dangerouslySetInnerHTML, children = \"\", strategy = \"afterInteractive\", onError, stylesheets } = props;\n const cacheKey = id || src;\n // Script has already loaded\n if (cacheKey && LoadCache.has(cacheKey)) {\n return;\n }\n // Contents of this script are already loading/loaded\n if (ScriptCache.has(src)) {\n LoadCache.add(cacheKey);\n // It is possible that multiple `next/script` components all have same \"src\", but has different \"onLoad\"\n // This is to make sure the same remote script will only load once, but \"onLoad\" are executed in order\n ScriptCache.get(src).then(onLoad, onError);\n return;\n }\n /** Execute after the script first loaded */ const afterLoad = ()=>{\n // Run onReady for the first time after load event\n if (onReady) {\n onReady();\n }\n // add cacheKey to LoadCache when load successfully\n LoadCache.add(cacheKey);\n };\n const el = document.createElement(\"script\");\n const loadPromise = new Promise((resolve, reject)=>{\n el.addEventListener(\"load\", function(e) {\n resolve();\n if (onLoad) {\n onLoad.call(this, e);\n }\n afterLoad();\n });\n el.addEventListener(\"error\", function(e) {\n reject(e);\n });\n }).catch(function(e) {\n if (onError) {\n onError(e);\n }\n });\n if (dangerouslySetInnerHTML) {\n // Casting since lib.dom.d.ts doesn't have TrustedHTML yet.\n el.innerHTML = dangerouslySetInnerHTML.__html || \"\";\n afterLoad();\n } else if (children) {\n el.textContent = typeof children === \"string\" ? children : Array.isArray(children) ? children.join(\"\") : \"\";\n afterLoad();\n } else if (src) {\n el.src = src;\n // do not add cacheKey into LoadCache for remote script here\n // cacheKey will be added to LoadCache when it is actually loaded (see loadPromise above)\n ScriptCache.set(src, loadPromise);\n }\n for (const [k, value] of Object.entries(props)){\n if (value === undefined || ignoreProps.includes(k)) {\n continue;\n }\n const attr = _headmanager.DOMAttributeNames[k] || k.toLowerCase();\n el.setAttribute(attr, value);\n }\n if (strategy === \"worker\") {\n el.setAttribute(\"type\", \"text/partytown\");\n }\n el.setAttribute(\"data-nscript\", strategy);\n // Load styles associated with this script\n if (stylesheets) {\n insertStylesheets(stylesheets);\n }\n document.body.appendChild(el);\n};\nfunction handleClientScriptLoad(props) {\n const { strategy = \"afterInteractive\" } = props;\n if (strategy === \"lazyOnload\") {\n window.addEventListener(\"load\", ()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n });\n } else {\n loadScript(props);\n }\n}\nfunction loadLazyScript(props) {\n if (document.readyState === \"complete\") {\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n } else {\n window.addEventListener(\"load\", ()=>{\n (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n });\n }\n}\nfunction addBeforeInteractiveToCache() {\n const scripts = [\n ...document.querySelectorAll('[data-nscript=\"beforeInteractive\"]'),\n ...document.querySelectorAll('[data-nscript=\"beforePageRender\"]')\n ];\n scripts.forEach((script)=>{\n const cacheKey = script.id || script.getAttribute(\"src\");\n LoadCache.add(cacheKey);\n });\n}\nfunction initScriptLoader(scriptLoaderItems) {\n scriptLoaderItems.forEach(handleClientScriptLoad);\n addBeforeInteractiveToCache();\n}\nfunction Script(props) {\n const { id, src = \"\", onLoad = ()=>{}, onReady = null, strategy = \"afterInteractive\", onError, stylesheets, ...restProps } = props;\n // Context is available only during SSR\n const { updateScripts, scripts, getIsSsr, appDir, nonce } = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);\n /**\n * - First mount:\n * 1. The useEffect for onReady executes\n * 2. hasOnReadyEffectCalled.current is false, but the script hasn't loaded yet (not in LoadCache)\n * onReady is skipped, set hasOnReadyEffectCalled.current to true\n * 3. The useEffect for loadScript executes\n * 4. hasLoadScriptEffectCalled.current is false, loadScript executes\n * Once the script is loaded, the onLoad and onReady will be called by then\n * [If strict mode is enabled / is wrapped in <OffScreen /> component]\n * 5. The useEffect for onReady executes again\n * 6. hasOnReadyEffectCalled.current is true, so entire effect is skipped\n * 7. The useEffect for loadScript executes again\n * 8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped\n *\n * - Second mount:\n * 1. The useEffect for onReady executes\n * 2. hasOnReadyEffectCalled.current is false, but the script has already loaded (found in LoadCache)\n * onReady is called, set hasOnReadyEffectCalled.current to true\n * 3. The useEffect for loadScript executes\n * 4. The script is already loaded, loadScript bails out\n * [If strict mode is enabled / is wrapped in <OffScreen /> component]\n * 5. The useEffect for onReady executes again\n * 6. hasOnReadyEffectCalled.current is true, so entire effect is skipped\n * 7. The useEffect for loadScript executes again\n * 8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped\n */ const hasOnReadyEffectCalled = (0, _react.useRef)(false);\n (0, _react.useEffect)(()=>{\n const cacheKey = id || src;\n if (!hasOnReadyEffectCalled.current) {\n // Run onReady if script has loaded before but component is re-mounted\n if (onReady && cacheKey && LoadCache.has(cacheKey)) {\n onReady();\n }\n hasOnReadyEffectCalled.current = true;\n }\n }, [\n onReady,\n id,\n src\n ]);\n const hasLoadScriptEffectCalled = (0, _react.useRef)(false);\n (0, _react.useEffect)(()=>{\n if (!hasLoadScriptEffectCalled.current) {\n if (strategy === \"afterInteractive\") {\n loadScript(props);\n } else if (strategy === \"lazyOnload\") {\n loadLazyScript(props);\n }\n hasLoadScriptEffectCalled.current = true;\n }\n }, [\n props,\n strategy\n ]);\n if (strategy === \"beforeInteractive\" || strategy === \"worker\") {\n if (updateScripts) {\n scripts[strategy] = (scripts[strategy] || []).concat([\n {\n id,\n src,\n onLoad,\n onReady,\n onError,\n ...restProps\n }\n ]);\n updateScripts(scripts);\n } else if (getIsSsr && getIsSsr()) {\n // Script has already loaded during SSR\n LoadCache.add(id || src);\n } else if (getIsSsr && !getIsSsr()) {\n loadScript(props);\n }\n }\n // For the app directory, we need React Float to preload these scripts.\n if (appDir) {\n // Injecting stylesheets here handles beforeInteractive and worker scripts correctly\n // For other strategies injecting here ensures correct stylesheet order\n // ReactDOM.preinit handles loading the styles in the correct order,\n // also ensures the stylesheet is loaded only once and in a consistent manner\n //\n // Case 1: Styles for beforeInteractive/worker with appDir - handled here\n // Case 2: Styles for beforeInteractive/worker with pages dir - Not handled yet\n // Case 3: Styles for afterInteractive/lazyOnload with appDir - handled here\n // Case 4: Styles for afterInteractive/lazyOnload with pages dir - handled in insertStylesheets function\n if (stylesheets) {\n stylesheets.forEach((styleSrc)=>{\n _reactdom.default.preinit(styleSrc, {\n as: \"style\"\n });\n });\n }\n // Before interactive scripts need to be loaded by Next.js' runtime instead\n // of native <script> tags, because they no longer have `defer`.\n if (strategy === \"beforeInteractive\") {\n if (!src) {\n // For inlined scripts, we put the content in `children`.\n if (restProps.dangerouslySetInnerHTML) {\n // Casting since lib.dom.d.ts doesn't have TrustedHTML yet.\n restProps.children = restProps.dangerouslySetInnerHTML.__html;\n delete restProps.dangerouslySetInnerHTML;\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n nonce: nonce,\n dangerouslySetInnerHTML: {\n __html: \"(self.__next_s=self.__next_s||[]).push(\" + JSON.stringify([\n 0,\n {\n ...restProps,\n id\n }\n ]) + \")\"\n }\n });\n } else {\n // @ts-ignore\n _reactdom.default.preload(src, restProps.integrity ? {\n as: \"script\",\n integrity: restProps.integrity\n } : {\n as: \"script\"\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n nonce: nonce,\n dangerouslySetInnerHTML: {\n __html: \"(self.__next_s=self.__next_s||[]).push(\" + JSON.stringify([\n src,\n {\n ...restProps,\n id\n }\n ]) + \")\"\n }\n });\n }\n } else if (strategy === \"afterInteractive\") {\n if (src) {\n // @ts-ignore\n _reactdom.default.preload(src, restProps.integrity ? {\n as: \"script\",\n integrity: restProps.integrity\n } : {\n as: \"script\"\n });\n }\n }\n }\n return null;\n}\n_c = Script;\nObject.defineProperty(Script, \"__nextScript\", {\n value: true\n});\nconst _default = Script;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=script.js.map\nvar _c;\n$RefreshReg$(_c, \"Script\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9zY3JpcHQuanMiLCJtYXBwaW5ncyI6InFEQUVhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBSU47QUFDQSxTQUFTSSxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVixPQUFPQyxjQUFjLENBQUNRLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUU4sU0FBUztJQUNiRyx3QkFBd0I7UUFDcEIsT0FBT0E7SUFDWDtJQUNBQyxrQkFBa0I7UUFDZCxPQUFPQTtJQUNYO0lBQ0FDLFNBQVM7UUFDTCxPQUFPTztJQUNYO0FBQ0o7QUFDQSxNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLDRHQUF5QztBQUNsRixNQUFNQyw0QkFBNEJELG1CQUFPQSxDQUFDLDhHQUEwQztBQUNwRixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyw4REFBbUI7QUFDL0MsTUFBTUcsWUFBWSxXQUFXLEdBQUdKLHlCQUF5QkssQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyxvREFBVztBQUM5RSxNQUFNSyxTQUFTLFdBQVcsR0FBR0osMEJBQTBCRyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLDRDQUFPO0FBQ3hFLE1BQU1NLG1DQUFtQ04sbUJBQU9BLENBQUMscUlBQW1EO0FBQ3BHLE1BQU1PLGVBQWVQLG1CQUFPQSxDQUFDLHVFQUFnQjtBQUM3QyxNQUFNUSx1QkFBdUJSLG1CQUFPQSxDQUFDLHlGQUF5QjtBQUM5RCxNQUFNUyxjQUFjLElBQUlDO0FBQ3hCLE1BQU1DLFlBQVksSUFBSUM7QUFDdEIsTUFBTUMsY0FBYztJQUNoQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNIO0FBQ0QsTUFBTUMsb0JBQW9CLENBQUNDO0lBQ3ZCLGlHQUFpRztJQUNqRyxFQUFFO0lBQ0Ysb0VBQW9FO0lBQ3BFLGtGQUFrRjtJQUNsRiw0RUFBNEU7SUFDNUUsNkVBQTZFO0lBQzdFLElBQUlaLFVBQVVaLE9BQU8sQ0FBQ3lCLE9BQU8sRUFBRTtRQUMzQkQsWUFBWUUsT0FBTyxDQUFDLENBQUNDO1lBQ2pCZixVQUFVWixPQUFPLENBQUN5QixPQUFPLENBQUNFLFlBQVk7Z0JBQ2xDQyxJQUFJO1lBQ1I7UUFDSjtRQUNBO0lBQ0o7SUFDQSxnR0FBZ0c7SUFDaEcsRUFBRTtJQUNGLGtFQUFrRTtJQUNsRSx5RUFBeUU7SUFDekUsSUFBSSxJQUE2QixFQUFFO1FBQy9CLElBQUlDLE9BQU9DLFNBQVNELElBQUk7UUFDeEJMLFlBQVlFLE9BQU8sQ0FBQyxDQUFDQztZQUNqQixJQUFJSSxPQUFPRCxTQUFTRSxhQUFhLENBQUM7WUFDbENELEtBQUtFLElBQUksR0FBRztZQUNaRixLQUFLRyxHQUFHLEdBQUc7WUFDWEgsS0FBS0ksSUFBSSxHQUFHUjtZQUNaRSxLQUFLTyxXQUFXLENBQUNMO1FBQ3JCO0lBQ0o7QUFDSjtBQUNBLE1BQU1NLGFBQWEsQ0FBQ0M7SUFDaEIsTUFBTSxFQUFFQyxHQUFHLEVBQUVDLEVBQUUsRUFBRUMsU0FBUyxLQUFLLENBQUMsRUFBRUMsVUFBVSxJQUFJLEVBQUVDLHVCQUF1QixFQUFFQyxXQUFXLEVBQUUsRUFBRUMsV0FBVyxrQkFBa0IsRUFBRUMsT0FBTyxFQUFFdEIsV0FBVyxFQUFFLEdBQUdjO0lBQ2xKLE1BQU1TLFdBQVdQLE1BQU1EO0lBQ3ZCLDRCQUE0QjtJQUM1QixJQUFJUSxZQUFZM0IsVUFBVTRCLEdBQUcsQ0FBQ0QsV0FBVztRQUNyQztJQUNKO0lBQ0EscURBQXFEO0lBQ3JELElBQUk3QixZQUFZOEIsR0FBRyxDQUFDVCxNQUFNO1FBQ3RCbkIsVUFBVTZCLEdBQUcsQ0FBQ0Y7UUFDZCx3R0FBd0c7UUFDeEcsc0dBQXNHO1FBQ3RHN0IsWUFBWVosR0FBRyxDQUFDaUMsS0FBS1csSUFBSSxDQUFDVCxRQUFRSztRQUNsQztJQUNKO0lBQ0EsMENBQTBDLEdBQUcsTUFBTUssWUFBWTtRQUMzRCxrREFBa0Q7UUFDbEQsSUFBSVQsU0FBUztZQUNUQTtRQUNKO1FBQ0EsbURBQW1EO1FBQ25EdEIsVUFBVTZCLEdBQUcsQ0FBQ0Y7SUFDbEI7SUFDQSxNQUFNSyxLQUFLdEIsU0FBU0UsYUFBYSxDQUFDO0lBQ2xDLE1BQU1xQixjQUFjLElBQUlDLFFBQVEsQ0FBQ0MsU0FBU0M7UUFDdENKLEdBQUdLLGdCQUFnQixDQUFDLFFBQVEsU0FBU0MsQ0FBQztZQUNsQ0g7WUFDQSxJQUFJZCxRQUFRO2dCQUNSQSxPQUFPa0IsSUFBSSxDQUFDLElBQUksRUFBRUQ7WUFDdEI7WUFDQVA7UUFDSjtRQUNBQyxHQUFHSyxnQkFBZ0IsQ0FBQyxTQUFTLFNBQVNDLENBQUM7WUFDbkNGLE9BQU9FO1FBQ1g7SUFDSixHQUFHRSxLQUFLLENBQUMsU0FBU0YsQ0FBQztRQUNmLElBQUlaLFNBQVM7WUFDVEEsUUFBUVk7UUFDWjtJQUNKO0lBQ0EsSUFBSWYseUJBQXlCO1FBQ3pCLDJEQUEyRDtRQUMzRFMsR0FBR1MsU0FBUyxHQUFHbEIsd0JBQXdCbUIsTUFBTSxJQUFJO1FBQ2pEWDtJQUNKLE9BQU8sSUFBSVAsVUFBVTtRQUNqQlEsR0FBR1csV0FBVyxHQUFHLE9BQU9uQixhQUFhLFdBQVdBLFdBQVdvQixNQUFNQyxPQUFPLENBQUNyQixZQUFZQSxTQUFTc0IsSUFBSSxDQUFDLE1BQU07UUFDekdmO0lBQ0osT0FBTyxJQUFJWixLQUFLO1FBQ1phLEdBQUdiLEdBQUcsR0FBR0E7UUFDVCw0REFBNEQ7UUFDNUQseUZBQXlGO1FBQ3pGckIsWUFBWWlELEdBQUcsQ0FBQzVCLEtBQUtjO0lBQ3pCO0lBQ0EsS0FBSyxNQUFNLENBQUNlLEdBQUd4RSxNQUFNLElBQUlILE9BQU80RSxPQUFPLENBQUMvQixPQUFPO1FBQzNDLElBQUkxQyxVQUFVMEUsYUFBYWhELFlBQVlpRCxRQUFRLENBQUNILElBQUk7WUFDaEQ7UUFDSjtRQUNBLE1BQU1JLE9BQU94RCxhQUFheUQsaUJBQWlCLENBQUNMLEVBQUUsSUFBSUEsRUFBRU0sV0FBVztRQUMvRHRCLEdBQUd1QixZQUFZLENBQUNILE1BQU01RTtJQUMxQjtJQUNBLElBQUlpRCxhQUFhLFVBQVU7UUFDdkJPLEdBQUd1QixZQUFZLENBQUMsUUFBUTtJQUM1QjtJQUNBdkIsR0FBR3VCLFlBQVksQ0FBQyxnQkFBZ0I5QjtJQUNoQywwQ0FBMEM7SUFDMUMsSUFBSXJCLGFBQWE7UUFDYkQsa0JBQWtCQztJQUN0QjtJQUNBTSxTQUFTOEMsSUFBSSxDQUFDeEMsV0FBVyxDQUFDZ0I7QUFDOUI7QUFDQSxTQUFTdEQsdUJBQXVCd0MsS0FBSztJQUNqQyxNQUFNLEVBQUVPLFdBQVcsa0JBQWtCLEVBQUUsR0FBR1A7SUFDMUMsSUFBSU8sYUFBYSxjQUFjO1FBQzNCZ0MsT0FBT3BCLGdCQUFnQixDQUFDLFFBQVE7WUFDM0IsSUFBR3hDLHFCQUFxQjZELG1CQUFtQixFQUFFLElBQUl6QyxXQUFXQztRQUNqRTtJQUNKLE9BQU87UUFDSEQsV0FBV0M7SUFDZjtBQUNKO0FBQ0EsU0FBU3lDLGVBQWV6QyxLQUFLO0lBQ3pCLElBQUlSLFNBQVNrRCxVQUFVLEtBQUssWUFBWTtRQUNuQyxJQUFHL0QscUJBQXFCNkQsbUJBQW1CLEVBQUUsSUFBSXpDLFdBQVdDO0lBQ2pFLE9BQU87UUFDSHVDLE9BQU9wQixnQkFBZ0IsQ0FBQyxRQUFRO1lBQzNCLElBQUd4QyxxQkFBcUI2RCxtQkFBbUIsRUFBRSxJQUFJekMsV0FBV0M7UUFDakU7SUFDSjtBQUNKO0FBQ0EsU0FBUzJDO0lBQ0wsTUFBTUMsVUFBVTtXQUNUcEQsU0FBU3FELGdCQUFnQixDQUFDO1dBQzFCckQsU0FBU3FELGdCQUFnQixDQUFDO0tBQ2hDO0lBQ0RELFFBQVF4RCxPQUFPLENBQUMsQ0FBQzBEO1FBQ2IsTUFBTXJDLFdBQVdxQyxPQUFPNUMsRUFBRSxJQUFJNEMsT0FBT0MsWUFBWSxDQUFDO1FBQ2xEakUsVUFBVTZCLEdBQUcsQ0FBQ0Y7SUFDbEI7QUFDSjtBQUNBLFNBQVNoRCxpQkFBaUJ1RixpQkFBaUI7SUFDdkNBLGtCQUFrQjVELE9BQU8sQ0FBQzVCO0lBQzFCbUY7QUFDSjtBQUNBLFNBQVNNLE9BQU9qRCxLQUFLO0lBQ2pCLE1BQU0sRUFBRUUsRUFBRSxFQUFFRCxNQUFNLEVBQUUsRUFBRUUsU0FBUyxLQUFLLENBQUMsRUFBRUMsVUFBVSxJQUFJLEVBQUVHLFdBQVcsa0JBQWtCLEVBQUVDLE9BQU8sRUFBRXRCLFdBQVcsRUFBRSxHQUFHZ0UsV0FBVyxHQUFHbEQ7SUFDN0gsdUNBQXVDO0lBQ3ZDLE1BQU0sRUFBRW1ELGFBQWEsRUFBRVAsT0FBTyxFQUFFUSxRQUFRLEVBQUVDLE1BQU0sRUFBRUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHOUUsT0FBTytFLFVBQVUsRUFBRTlFLGlDQUFpQytFLGtCQUFrQjtJQUN0STs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRCxHQUFHLE1BQU1DLHlCQUF5QixDQUFDLEdBQUdqRixPQUFPa0YsTUFBTSxFQUFFO0lBQ25ELElBQUdsRixPQUFPbUYsU0FBUyxFQUFFO1FBQ2xCLE1BQU1sRCxXQUFXUCxNQUFNRDtRQUN2QixJQUFJLENBQUN3RCx1QkFBdUJHLE9BQU8sRUFBRTtZQUNqQyxzRUFBc0U7WUFDdEUsSUFBSXhELFdBQVdLLFlBQVkzQixVQUFVNEIsR0FBRyxDQUFDRCxXQUFXO2dCQUNoREw7WUFDSjtZQUNBcUQsdUJBQXVCRyxPQUFPLEdBQUc7UUFDckM7SUFDSixHQUFHO1FBQ0N4RDtRQUNBRjtRQUNBRDtLQUNIO0lBQ0QsTUFBTTRELDRCQUE0QixDQUFDLEdBQUdyRixPQUFPa0YsTUFBTSxFQUFFO0lBQ3BELElBQUdsRixPQUFPbUYsU0FBUyxFQUFFO1FBQ2xCLElBQUksQ0FBQ0UsMEJBQTBCRCxPQUFPLEVBQUU7WUFDcEMsSUFBSXJELGFBQWEsb0JBQW9CO2dCQUNqQ1IsV0FBV0M7WUFDZixPQUFPLElBQUlPLGFBQWEsY0FBYztnQkFDbENrQyxlQUFlekM7WUFDbkI7WUFDQTZELDBCQUEwQkQsT0FBTyxHQUFHO1FBQ3hDO0lBQ0osR0FBRztRQUNDNUQ7UUFDQU87S0FDSDtJQUNELElBQUlBLGFBQWEsdUJBQXVCQSxhQUFhLFVBQVU7UUFDM0QsSUFBSTRDLGVBQWU7WUFDZlAsT0FBTyxDQUFDckMsU0FBUyxHQUFHLENBQUNxQyxPQUFPLENBQUNyQyxTQUFTLElBQUksRUFBRSxFQUFFdUQsTUFBTSxDQUFDO2dCQUNqRDtvQkFDSTVEO29CQUNBRDtvQkFDQUU7b0JBQ0FDO29CQUNBSTtvQkFDQSxHQUFHMEMsU0FBUztnQkFDaEI7YUFDSDtZQUNEQyxjQUFjUDtRQUNsQixPQUFPLElBQUlRLFlBQVlBLFlBQVk7WUFDL0IsdUNBQXVDO1lBQ3ZDdEUsVUFBVTZCLEdBQUcsQ0FBQ1QsTUFBTUQ7UUFDeEIsT0FBTyxJQUFJbUQsWUFBWSxDQUFDQSxZQUFZO1lBQ2hDckQsV0FBV0M7UUFDZjtJQUNKO0lBQ0EsdUVBQXVFO0lBQ3ZFLElBQUlxRCxRQUFRO1FBQ1Isb0ZBQW9GO1FBQ3BGLHVFQUF1RTtRQUN2RSxvRUFBb0U7UUFDcEUsNkVBQTZFO1FBQzdFLEVBQUU7UUFDRix5RUFBeUU7UUFDekUsK0VBQStFO1FBQy9FLDRFQUE0RTtRQUM1RSx3R0FBd0c7UUFDeEcsSUFBSW5FLGFBQWE7WUFDYkEsWUFBWUUsT0FBTyxDQUFDLENBQUMyRTtnQkFDakJ6RixVQUFVWixPQUFPLENBQUN5QixPQUFPLENBQUM0RSxVQUFVO29CQUNoQ3pFLElBQUk7Z0JBQ1I7WUFDSjtRQUNKO1FBQ0EsMkVBQTJFO1FBQzNFLGdFQUFnRTtRQUNoRSxJQUFJaUIsYUFBYSxxQkFBcUI7WUFDbEMsSUFBSSxDQUFDTixLQUFLO2dCQUNOLHlEQUF5RDtnQkFDekQsSUFBSWlELFVBQVU3Qyx1QkFBdUIsRUFBRTtvQkFDbkMsMkRBQTJEO29CQUMzRDZDLFVBQVU1QyxRQUFRLEdBQUc0QyxVQUFVN0MsdUJBQXVCLENBQUNtQixNQUFNO29CQUM3RCxPQUFPMEIsVUFBVTdDLHVCQUF1QjtnQkFDNUM7Z0JBQ0EsT0FBcUIsV0FBSCxHQUFJLElBQUdoQyxZQUFZMkYsR0FBRyxFQUFFLFVBQVU7b0JBQ2hEVixPQUFPQTtvQkFDUGpELHlCQUF5Qjt3QkFDckJtQixRQUFRLDRDQUE0Q3lDLEtBQUtDLFNBQVMsQ0FBQzs0QkFDL0Q7NEJBQ0E7Z0NBQ0ksR0FBR2hCLFNBQVM7Z0NBQ1poRDs0QkFDSjt5QkFDSCxJQUFJO29CQUNUO2dCQUNKO1lBQ0osT0FBTztnQkFDSCxhQUFhO2dCQUNiNUIsVUFBVVosT0FBTyxDQUFDeUcsT0FBTyxDQUFDbEUsS0FBS2lELFVBQVVrQixTQUFTLEdBQUc7b0JBQ2pEOUUsSUFBSTtvQkFDSjhFLFdBQVdsQixVQUFVa0IsU0FBUztnQkFDbEMsSUFBSTtvQkFDQTlFLElBQUk7Z0JBQ1I7Z0JBQ0EsT0FBcUIsV0FBSCxHQUFJLElBQUdqQixZQUFZMkYsR0FBRyxFQUFFLFVBQVU7b0JBQ2hEVixPQUFPQTtvQkFDUGpELHlCQUF5Qjt3QkFDckJtQixRQUFRLDRDQUE0Q3lDLEtBQUtDLFNBQVMsQ0FBQzs0QkFDL0RqRTs0QkFDQTtnQ0FDSSxHQUFHaUQsU0FBUztnQ0FDWmhEOzRCQUNKO3lCQUNILElBQUk7b0JBQ1Q7Z0JBQ0o7WUFDSjtRQUNKLE9BQU8sSUFBSUssYUFBYSxvQkFBb0I7WUFDeEMsSUFBSU4sS0FBSztnQkFDTCxhQUFhO2dCQUNiM0IsVUFBVVosT0FBTyxDQUFDeUcsT0FBTyxDQUFDbEUsS0FBS2lELFVBQVVrQixTQUFTLEdBQUc7b0JBQ2pEOUUsSUFBSTtvQkFDSjhFLFdBQVdsQixVQUFVa0IsU0FBUztnQkFDbEMsSUFBSTtvQkFDQTlFLElBQUk7Z0JBQ1I7WUFDSjtRQUNKO0lBQ0o7SUFDQSxPQUFPO0FBQ1g7S0F4SlMyRDtBQXlKVDlGLE9BQU9DLGNBQWMsQ0FBQzZGLFFBQVEsZ0JBQWdCO0lBQzFDM0YsT0FBTztBQUNYO0FBQ0EsTUFBTVcsV0FBV2dGO0FBRWpCLElBQUksQ0FBQyxPQUFPNUYsUUFBUUssT0FBTyxLQUFLLGNBQWUsT0FBT0wsUUFBUUssT0FBTyxLQUFLLFlBQVlMLFFBQVFLLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT0wsUUFBUUssT0FBTyxDQUFDMkcsVUFBVSxLQUFLLGFBQWE7SUFDcktsSCxPQUFPQyxjQUFjLENBQUNDLFFBQVFLLE9BQU8sRUFBRSxjQUFjO1FBQUVKLE9BQU87SUFBSztJQUNuRUgsT0FBT21ILE1BQU0sQ0FBQ2pILFFBQVFLLE9BQU8sRUFBRUw7SUFDL0JFLE9BQU9GLE9BQU8sR0FBR0EsUUFBUUssT0FBTztBQUNsQyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9zY3JpcHQuanM/YmQ2YSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBoYW5kbGVDbGllbnRTY3JpcHRMb2FkOiBudWxsLFxuICAgIGluaXRTY3JpcHRMb2FkZXI6IG51bGwsXG4gICAgZGVmYXVsdDogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBoYW5kbGVDbGllbnRTY3JpcHRMb2FkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZUNsaWVudFNjcmlwdExvYWQ7XG4gICAgfSxcbiAgICBpbml0U2NyaXB0TG9hZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGluaXRTY3JpcHRMb2FkZXI7XG4gICAgfSxcbiAgICBkZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9kZWZhdWx0O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ZG9tID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfaGVhZG1hbmFnZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2hlYWQtbWFuYWdlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX2hlYWRtYW5hZ2VyID0gcmVxdWlyZShcIi4vaGVhZC1tYW5hZ2VyXCIpO1xuY29uc3QgX3JlcXVlc3RpZGxlY2FsbGJhY2sgPSByZXF1aXJlKFwiLi9yZXF1ZXN0LWlkbGUtY2FsbGJhY2tcIik7XG5jb25zdCBTY3JpcHRDYWNoZSA9IG5ldyBNYXAoKTtcbmNvbnN0IExvYWRDYWNoZSA9IG5ldyBTZXQoKTtcbmNvbnN0IGlnbm9yZVByb3BzID0gW1xuICAgIFwib25Mb2FkXCIsXG4gICAgXCJvblJlYWR5XCIsXG4gICAgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiLFxuICAgIFwiY2hpbGRyZW5cIixcbiAgICBcIm9uRXJyb3JcIixcbiAgICBcInN0cmF0ZWd5XCIsXG4gICAgXCJzdHlsZXNoZWV0c1wiXG5dO1xuY29uc3QgaW5zZXJ0U3R5bGVzaGVldHMgPSAoc3R5bGVzaGVldHMpPT57XG4gICAgLy8gQ2FzZSAxOiBTdHlsZXMgZm9yIGFmdGVySW50ZXJhY3RpdmUvbGF6eU9ubG9hZCB3aXRoIGFwcERpciBpbmplY3RlZCB2aWEgaGFuZGxlQ2xpZW50U2NyaXB0TG9hZFxuICAgIC8vXG4gICAgLy8gVXNpbmcgUmVhY3RET00ucHJlaW5pdCB0byBmZWF0dXJlIGRldGVjdCBhcHBEaXIgYW5kIGluamVjdCBzdHlsZXNcbiAgICAvLyBTdHlsZXNoZWV0cyBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQgaWYgaW5pdGlhbGl6ZWQgd2l0aCBTY3JpcHQgY29tcG9uZW50XG4gICAgLy8gUmUtaW5qZWN0IHN0eWxlcyBoZXJlIHRvIGhhbmRsZSBzY3JpcHRzIGxvYWRlZCB2aWEgaGFuZGxlQ2xpZW50U2NyaXB0TG9hZFxuICAgIC8vIFJlYWN0RE9NLnByZWluaXQgaGFuZGxlcyBkZWR1cCBhbmQgZW5zdXJlcyB0aGUgc3R5bGVzIGFyZSBsb2FkZWQgb25seSBvbmNlXG4gICAgaWYgKF9yZWFjdGRvbS5kZWZhdWx0LnByZWluaXQpIHtcbiAgICAgICAgc3R5bGVzaGVldHMuZm9yRWFjaCgoc3R5bGVzaGVldCk9PntcbiAgICAgICAgICAgIF9yZWFjdGRvbS5kZWZhdWx0LnByZWluaXQoc3R5bGVzaGVldCwge1xuICAgICAgICAgICAgICAgIGFzOiBcInN0eWxlXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBDYXNlIDI6IFN0eWxlcyBmb3IgYWZ0ZXJJbnRlcmFjdGl2ZS9sYXp5T25sb2FkIHdpdGggcGFnZXMgaW5qZWN0ZWQgdmlhIGhhbmRsZUNsaWVudFNjcmlwdExvYWRcbiAgICAvL1xuICAgIC8vIFdlIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGxvYWQgc3R5bGVzIHdoZW4gYXBwZGlyIGlzIG5vdCBkZXRlY3RlZFxuICAgIC8vIFRPRE86IFVzZSBSZWFjdCBmbG9hdCBBUElzIHRvIGxvYWQgc3R5bGVzIG9uY2UgYXZhaWxhYmxlIGZvciBwYWdlcyBkaXJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBsZXQgaGVhZCA9IGRvY3VtZW50LmhlYWQ7XG4gICAgICAgIHN0eWxlc2hlZXRzLmZvckVhY2goKHN0eWxlc2hlZXQpPT57XG4gICAgICAgICAgICBsZXQgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuICAgICAgICAgICAgbGluay50eXBlID0gXCJ0ZXh0L2Nzc1wiO1xuICAgICAgICAgICAgbGluay5yZWwgPSBcInN0eWxlc2hlZXRcIjtcbiAgICAgICAgICAgIGxpbmsuaHJlZiA9IHN0eWxlc2hlZXQ7XG4gICAgICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuY29uc3QgbG9hZFNjcmlwdCA9IChwcm9wcyk9PntcbiAgICBjb25zdCB7IHNyYywgaWQsIG9uTG9hZCA9ICgpPT57fSwgb25SZWFkeSA9IG51bGwsIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLCBjaGlsZHJlbiA9IFwiXCIsIHN0cmF0ZWd5ID0gXCJhZnRlckludGVyYWN0aXZlXCIsIG9uRXJyb3IsIHN0eWxlc2hlZXRzIH0gPSBwcm9wcztcbiAgICBjb25zdCBjYWNoZUtleSA9IGlkIHx8IHNyYztcbiAgICAvLyBTY3JpcHQgaGFzIGFscmVhZHkgbG9hZGVkXG4gICAgaWYgKGNhY2hlS2V5ICYmIExvYWRDYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQ29udGVudHMgb2YgdGhpcyBzY3JpcHQgYXJlIGFscmVhZHkgbG9hZGluZy9sb2FkZWRcbiAgICBpZiAoU2NyaXB0Q2FjaGUuaGFzKHNyYykpIHtcbiAgICAgICAgTG9hZENhY2hlLmFkZChjYWNoZUtleSk7XG4gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgbXVsdGlwbGUgYG5leHQvc2NyaXB0YCBjb21wb25lbnRzIGFsbCBoYXZlIHNhbWUgXCJzcmNcIiwgYnV0IGhhcyBkaWZmZXJlbnQgXCJvbkxvYWRcIlxuICAgICAgICAvLyBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGUgc2FtZSByZW1vdGUgc2NyaXB0IHdpbGwgb25seSBsb2FkIG9uY2UsIGJ1dCBcIm9uTG9hZFwiIGFyZSBleGVjdXRlZCBpbiBvcmRlclxuICAgICAgICBTY3JpcHRDYWNoZS5nZXQoc3JjKS50aGVuKG9uTG9hZCwgb25FcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyoqIEV4ZWN1dGUgYWZ0ZXIgdGhlIHNjcmlwdCBmaXJzdCBsb2FkZWQgKi8gY29uc3QgYWZ0ZXJMb2FkID0gKCk9PntcbiAgICAgICAgLy8gUnVuIG9uUmVhZHkgZm9yIHRoZSBmaXJzdCB0aW1lIGFmdGVyIGxvYWQgZXZlbnRcbiAgICAgICAgaWYgKG9uUmVhZHkpIHtcbiAgICAgICAgICAgIG9uUmVhZHkoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGQgY2FjaGVLZXkgdG8gTG9hZENhY2hlIHdoZW4gbG9hZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgTG9hZENhY2hlLmFkZChjYWNoZUtleSk7XG4gICAgfTtcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgY29uc3QgbG9hZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICBpZiAob25Mb2FkKSB7XG4gICAgICAgICAgICAgICAgb25Mb2FkLmNhbGwodGhpcywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZnRlckxvYWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH0pO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgICAgIG9uRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpIHtcbiAgICAgICAgLy8gQ2FzdGluZyBzaW5jZSBsaWIuZG9tLmQudHMgZG9lc24ndCBoYXZlIFRydXN0ZWRIVE1MIHlldC5cbiAgICAgICAgZWwuaW5uZXJIVE1MID0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sIHx8IFwiXCI7XG4gICAgICAgIGFmdGVyTG9hZCgpO1xuICAgIH0gZWxzZSBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgZWwudGV4dENvbnRlbnQgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgPyBjaGlsZHJlbiA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4uam9pbihcIlwiKSA6IFwiXCI7XG4gICAgICAgIGFmdGVyTG9hZCgpO1xuICAgIH0gZWxzZSBpZiAoc3JjKSB7XG4gICAgICAgIGVsLnNyYyA9IHNyYztcbiAgICAgICAgLy8gZG8gbm90IGFkZCBjYWNoZUtleSBpbnRvIExvYWRDYWNoZSBmb3IgcmVtb3RlIHNjcmlwdCBoZXJlXG4gICAgICAgIC8vIGNhY2hlS2V5IHdpbGwgYmUgYWRkZWQgdG8gTG9hZENhY2hlIHdoZW4gaXQgaXMgYWN0dWFsbHkgbG9hZGVkIChzZWUgbG9hZFByb21pc2UgYWJvdmUpXG4gICAgICAgIFNjcmlwdENhY2hlLnNldChzcmMsIGxvYWRQcm9taXNlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbaywgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSl7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGlnbm9yZVByb3BzLmluY2x1ZGVzKGspKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRyID0gX2hlYWRtYW5hZ2VyLkRPTUF0dHJpYnV0ZU5hbWVzW2tdIHx8IGsudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKGF0dHIsIHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHN0cmF0ZWd5ID09PSBcIndvcmtlclwiKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJ0ZXh0L3BhcnR5dG93blwiKTtcbiAgICB9XG4gICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1uc2NyaXB0XCIsIHN0cmF0ZWd5KTtcbiAgICAvLyBMb2FkIHN0eWxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzY3JpcHRcbiAgICBpZiAoc3R5bGVzaGVldHMpIHtcbiAgICAgICAgaW5zZXJ0U3R5bGVzaGVldHMoc3R5bGVzaGVldHMpO1xuICAgIH1cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsKTtcbn07XG5mdW5jdGlvbiBoYW5kbGVDbGllbnRTY3JpcHRMb2FkKHByb3BzKSB7XG4gICAgY29uc3QgeyBzdHJhdGVneSA9IFwiYWZ0ZXJJbnRlcmFjdGl2ZVwiIH0gPSBwcm9wcztcbiAgICBpZiAoc3RyYXRlZ3kgPT09IFwibGF6eU9ubG9hZFwiKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKT0+e1xuICAgICAgICAgICAgKDAsIF9yZXF1ZXN0aWRsZWNhbGxiYWNrLnJlcXVlc3RJZGxlQ2FsbGJhY2spKCgpPT5sb2FkU2NyaXB0KHByb3BzKSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvYWRTY3JpcHQocHJvcHMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGxvYWRMYXp5U2NyaXB0KHByb3BzKSB7XG4gICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAoMCwgX3JlcXVlc3RpZGxlY2FsbGJhY2sucmVxdWVzdElkbGVDYWxsYmFjaykoKCk9PmxvYWRTY3JpcHQocHJvcHMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCk9PntcbiAgICAgICAgICAgICgwLCBfcmVxdWVzdGlkbGVjYWxsYmFjay5yZXF1ZXN0SWRsZUNhbGxiYWNrKSgoKT0+bG9hZFNjcmlwdChwcm9wcykpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRCZWZvcmVJbnRlcmFjdGl2ZVRvQ2FjaGUoKSB7XG4gICAgY29uc3Qgc2NyaXB0cyA9IFtcbiAgICAgICAgLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbnNjcmlwdD1cImJlZm9yZUludGVyYWN0aXZlXCJdJyksXG4gICAgICAgIC4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW5zY3JpcHQ9XCJiZWZvcmVQYWdlUmVuZGVyXCJdJylcbiAgICBdO1xuICAgIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KT0+e1xuICAgICAgICBjb25zdCBjYWNoZUtleSA9IHNjcmlwdC5pZCB8fCBzY3JpcHQuZ2V0QXR0cmlidXRlKFwic3JjXCIpO1xuICAgICAgICBMb2FkQ2FjaGUuYWRkKGNhY2hlS2V5KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGluaXRTY3JpcHRMb2FkZXIoc2NyaXB0TG9hZGVySXRlbXMpIHtcbiAgICBzY3JpcHRMb2FkZXJJdGVtcy5mb3JFYWNoKGhhbmRsZUNsaWVudFNjcmlwdExvYWQpO1xuICAgIGFkZEJlZm9yZUludGVyYWN0aXZlVG9DYWNoZSgpO1xufVxuZnVuY3Rpb24gU2NyaXB0KHByb3BzKSB7XG4gICAgY29uc3QgeyBpZCwgc3JjID0gXCJcIiwgb25Mb2FkID0gKCk9Pnt9LCBvblJlYWR5ID0gbnVsbCwgc3RyYXRlZ3kgPSBcImFmdGVySW50ZXJhY3RpdmVcIiwgb25FcnJvciwgc3R5bGVzaGVldHMsIC4uLnJlc3RQcm9wcyB9ID0gcHJvcHM7XG4gICAgLy8gQ29udGV4dCBpcyBhdmFpbGFibGUgb25seSBkdXJpbmcgU1NSXG4gICAgY29uc3QgeyB1cGRhdGVTY3JpcHRzLCBzY3JpcHRzLCBnZXRJc1NzciwgYXBwRGlyLCBub25jZSB9ID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfaGVhZG1hbmFnZXJjb250ZXh0c2hhcmVkcnVudGltZS5IZWFkTWFuYWdlckNvbnRleHQpO1xuICAgIC8qKlxuICAgKiAtIEZpcnN0IG1vdW50OlxuICAgKiAgIDEuIFRoZSB1c2VFZmZlY3QgZm9yIG9uUmVhZHkgZXhlY3V0ZXNcbiAgICogICAyLiBoYXNPblJlYWR5RWZmZWN0Q2FsbGVkLmN1cnJlbnQgaXMgZmFsc2UsIGJ1dCB0aGUgc2NyaXB0IGhhc24ndCBsb2FkZWQgeWV0IChub3QgaW4gTG9hZENhY2hlKVxuICAgKiAgICAgIG9uUmVhZHkgaXMgc2tpcHBlZCwgc2V0IGhhc09uUmVhZHlFZmZlY3RDYWxsZWQuY3VycmVudCB0byB0cnVlXG4gICAqICAgMy4gVGhlIHVzZUVmZmVjdCBmb3IgbG9hZFNjcmlwdCBleGVjdXRlc1xuICAgKiAgIDQuIGhhc0xvYWRTY3JpcHRFZmZlY3RDYWxsZWQuY3VycmVudCBpcyBmYWxzZSwgbG9hZFNjcmlwdCBleGVjdXRlc1xuICAgKiAgICAgIE9uY2UgdGhlIHNjcmlwdCBpcyBsb2FkZWQsIHRoZSBvbkxvYWQgYW5kIG9uUmVhZHkgd2lsbCBiZSBjYWxsZWQgYnkgdGhlblxuICAgKiAgIFtJZiBzdHJpY3QgbW9kZSBpcyBlbmFibGVkIC8gaXMgd3JhcHBlZCBpbiA8T2ZmU2NyZWVuIC8+IGNvbXBvbmVudF1cbiAgICogICA1LiBUaGUgdXNlRWZmZWN0IGZvciBvblJlYWR5IGV4ZWN1dGVzIGFnYWluXG4gICAqICAgNi4gaGFzT25SZWFkeUVmZmVjdENhbGxlZC5jdXJyZW50IGlzIHRydWUsIHNvIGVudGlyZSBlZmZlY3QgaXMgc2tpcHBlZFxuICAgKiAgIDcuIFRoZSB1c2VFZmZlY3QgZm9yIGxvYWRTY3JpcHQgZXhlY3V0ZXMgYWdhaW5cbiAgICogICA4LiBoYXNMb2FkU2NyaXB0RWZmZWN0Q2FsbGVkLmN1cnJlbnQgaXMgdHJ1ZSwgc28gZW50aXJlIGVmZmVjdCBpcyBza2lwcGVkXG4gICAqXG4gICAqIC0gU2Vjb25kIG1vdW50OlxuICAgKiAgIDEuIFRoZSB1c2VFZmZlY3QgZm9yIG9uUmVhZHkgZXhlY3V0ZXNcbiAgICogICAyLiBoYXNPblJlYWR5RWZmZWN0Q2FsbGVkLmN1cnJlbnQgaXMgZmFsc2UsIGJ1dCB0aGUgc2NyaXB0IGhhcyBhbHJlYWR5IGxvYWRlZCAoZm91bmQgaW4gTG9hZENhY2hlKVxuICAgKiAgICAgIG9uUmVhZHkgaXMgY2FsbGVkLCBzZXQgaGFzT25SZWFkeUVmZmVjdENhbGxlZC5jdXJyZW50IHRvIHRydWVcbiAgICogICAzLiBUaGUgdXNlRWZmZWN0IGZvciBsb2FkU2NyaXB0IGV4ZWN1dGVzXG4gICAqICAgNC4gVGhlIHNjcmlwdCBpcyBhbHJlYWR5IGxvYWRlZCwgbG9hZFNjcmlwdCBiYWlscyBvdXRcbiAgICogICBbSWYgc3RyaWN0IG1vZGUgaXMgZW5hYmxlZCAvIGlzIHdyYXBwZWQgaW4gPE9mZlNjcmVlbiAvPiBjb21wb25lbnRdXG4gICAqICAgNS4gVGhlIHVzZUVmZmVjdCBmb3Igb25SZWFkeSBleGVjdXRlcyBhZ2FpblxuICAgKiAgIDYuIGhhc09uUmVhZHlFZmZlY3RDYWxsZWQuY3VycmVudCBpcyB0cnVlLCBzbyBlbnRpcmUgZWZmZWN0IGlzIHNraXBwZWRcbiAgICogICA3LiBUaGUgdXNlRWZmZWN0IGZvciBsb2FkU2NyaXB0IGV4ZWN1dGVzIGFnYWluXG4gICAqICAgOC4gaGFzTG9hZFNjcmlwdEVmZmVjdENhbGxlZC5jdXJyZW50IGlzIHRydWUsIHNvIGVudGlyZSBlZmZlY3QgaXMgc2tpcHBlZFxuICAgKi8gY29uc3QgaGFzT25SZWFkeUVmZmVjdENhbGxlZCA9ICgwLCBfcmVhY3QudXNlUmVmKShmYWxzZSk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gaWQgfHwgc3JjO1xuICAgICAgICBpZiAoIWhhc09uUmVhZHlFZmZlY3RDYWxsZWQuY3VycmVudCkge1xuICAgICAgICAgICAgLy8gUnVuIG9uUmVhZHkgaWYgc2NyaXB0IGhhcyBsb2FkZWQgYmVmb3JlIGJ1dCBjb21wb25lbnQgaXMgcmUtbW91bnRlZFxuICAgICAgICAgICAgaWYgKG9uUmVhZHkgJiYgY2FjaGVLZXkgJiYgTG9hZENhY2hlLmhhcyhjYWNoZUtleSkpIHtcbiAgICAgICAgICAgICAgICBvblJlYWR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYXNPblJlYWR5RWZmZWN0Q2FsbGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSwgW1xuICAgICAgICBvblJlYWR5LFxuICAgICAgICBpZCxcbiAgICAgICAgc3JjXG4gICAgXSk7XG4gICAgY29uc3QgaGFzTG9hZFNjcmlwdEVmZmVjdENhbGxlZCA9ICgwLCBfcmVhY3QudXNlUmVmKShmYWxzZSk7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGlmICghaGFzTG9hZFNjcmlwdEVmZmVjdENhbGxlZC5jdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoc3RyYXRlZ3kgPT09IFwiYWZ0ZXJJbnRlcmFjdGl2ZVwiKSB7XG4gICAgICAgICAgICAgICAgbG9hZFNjcmlwdChwcm9wcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmF0ZWd5ID09PSBcImxhenlPbmxvYWRcIikge1xuICAgICAgICAgICAgICAgIGxvYWRMYXp5U2NyaXB0KHByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhc0xvYWRTY3JpcHRFZmZlY3RDYWxsZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LCBbXG4gICAgICAgIHByb3BzLFxuICAgICAgICBzdHJhdGVneVxuICAgIF0pO1xuICAgIGlmIChzdHJhdGVneSA9PT0gXCJiZWZvcmVJbnRlcmFjdGl2ZVwiIHx8IHN0cmF0ZWd5ID09PSBcIndvcmtlclwiKSB7XG4gICAgICAgIGlmICh1cGRhdGVTY3JpcHRzKSB7XG4gICAgICAgICAgICBzY3JpcHRzW3N0cmF0ZWd5XSA9IChzY3JpcHRzW3N0cmF0ZWd5XSB8fCBbXSkuY29uY2F0KFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICBzcmMsXG4gICAgICAgICAgICAgICAgICAgIG9uTG9hZCxcbiAgICAgICAgICAgICAgICAgICAgb25SZWFkeSxcbiAgICAgICAgICAgICAgICAgICAgb25FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdFByb3BzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB1cGRhdGVTY3JpcHRzKHNjcmlwdHMpO1xuICAgICAgICB9IGVsc2UgaWYgKGdldElzU3NyICYmIGdldElzU3NyKCkpIHtcbiAgICAgICAgICAgIC8vIFNjcmlwdCBoYXMgYWxyZWFkeSBsb2FkZWQgZHVyaW5nIFNTUlxuICAgICAgICAgICAgTG9hZENhY2hlLmFkZChpZCB8fCBzcmMpO1xuICAgICAgICB9IGVsc2UgaWYgKGdldElzU3NyICYmICFnZXRJc1NzcigpKSB7XG4gICAgICAgICAgICBsb2FkU2NyaXB0KHByb3BzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBGb3IgdGhlIGFwcCBkaXJlY3RvcnksIHdlIG5lZWQgUmVhY3QgRmxvYXQgdG8gcHJlbG9hZCB0aGVzZSBzY3JpcHRzLlxuICAgIGlmIChhcHBEaXIpIHtcbiAgICAgICAgLy8gSW5qZWN0aW5nIHN0eWxlc2hlZXRzIGhlcmUgaGFuZGxlcyBiZWZvcmVJbnRlcmFjdGl2ZSBhbmQgd29ya2VyIHNjcmlwdHMgY29ycmVjdGx5XG4gICAgICAgIC8vIEZvciBvdGhlciBzdHJhdGVnaWVzIGluamVjdGluZyBoZXJlIGVuc3VyZXMgY29ycmVjdCBzdHlsZXNoZWV0IG9yZGVyXG4gICAgICAgIC8vIFJlYWN0RE9NLnByZWluaXQgaGFuZGxlcyBsb2FkaW5nIHRoZSBzdHlsZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIsXG4gICAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGUgc3R5bGVzaGVldCBpcyBsb2FkZWQgb25seSBvbmNlIGFuZCBpbiBhIGNvbnNpc3RlbnQgbWFubmVyXG4gICAgICAgIC8vXG4gICAgICAgIC8vIENhc2UgMTogU3R5bGVzIGZvciBiZWZvcmVJbnRlcmFjdGl2ZS93b3JrZXIgd2l0aCBhcHBEaXIgLSBoYW5kbGVkIGhlcmVcbiAgICAgICAgLy8gQ2FzZSAyOiBTdHlsZXMgZm9yIGJlZm9yZUludGVyYWN0aXZlL3dvcmtlciB3aXRoIHBhZ2VzIGRpciAtIE5vdCBoYW5kbGVkIHlldFxuICAgICAgICAvLyBDYXNlIDM6IFN0eWxlcyBmb3IgYWZ0ZXJJbnRlcmFjdGl2ZS9sYXp5T25sb2FkIHdpdGggYXBwRGlyIC0gaGFuZGxlZCBoZXJlXG4gICAgICAgIC8vIENhc2UgNDogU3R5bGVzIGZvciBhZnRlckludGVyYWN0aXZlL2xhenlPbmxvYWQgd2l0aCBwYWdlcyBkaXIgLSBoYW5kbGVkIGluIGluc2VydFN0eWxlc2hlZXRzIGZ1bmN0aW9uXG4gICAgICAgIGlmIChzdHlsZXNoZWV0cykge1xuICAgICAgICAgICAgc3R5bGVzaGVldHMuZm9yRWFjaCgoc3R5bGVTcmMpPT57XG4gICAgICAgICAgICAgICAgX3JlYWN0ZG9tLmRlZmF1bHQucHJlaW5pdChzdHlsZVNyYywge1xuICAgICAgICAgICAgICAgICAgICBhczogXCJzdHlsZVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBCZWZvcmUgaW50ZXJhY3RpdmUgc2NyaXB0cyBuZWVkIHRvIGJlIGxvYWRlZCBieSBOZXh0LmpzJyBydW50aW1lIGluc3RlYWRcbiAgICAgICAgLy8gb2YgbmF0aXZlIDxzY3JpcHQ+IHRhZ3MsIGJlY2F1c2UgdGhleSBubyBsb25nZXIgaGF2ZSBgZGVmZXJgLlxuICAgICAgICBpZiAoc3RyYXRlZ3kgPT09IFwiYmVmb3JlSW50ZXJhY3RpdmVcIikge1xuICAgICAgICAgICAgaWYgKCFzcmMpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgaW5saW5lZCBzY3JpcHRzLCB3ZSBwdXQgdGhlIGNvbnRlbnQgaW4gYGNoaWxkcmVuYC5cbiAgICAgICAgICAgICAgICBpZiAocmVzdFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENhc3Rpbmcgc2luY2UgbGliLmRvbS5kLnRzIGRvZXNuJ3QgaGF2ZSBUcnVzdGVkSFRNTCB5ZXQuXG4gICAgICAgICAgICAgICAgICAgIHJlc3RQcm9wcy5jaGlsZHJlbiA9IHJlc3RQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWw7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXN0UHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwic2NyaXB0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgbm9uY2U6IG5vbmNlLFxuICAgICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBcIihzZWxmLl9fbmV4dF9zPXNlbGYuX19uZXh0X3N8fFtdKS5wdXNoKFwiICsgSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSkgKyBcIilcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBfcmVhY3Rkb20uZGVmYXVsdC5wcmVsb2FkKHNyYywgcmVzdFByb3BzLmludGVncml0eSA/IHtcbiAgICAgICAgICAgICAgICAgICAgYXM6IFwic2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgIGludGVncml0eTogcmVzdFByb3BzLmludGVncml0eVxuICAgICAgICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICAgICAgICAgIGFzOiBcInNjcmlwdFwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzY3JpcHRcIiwge1xuICAgICAgICAgICAgICAgICAgICBub25jZTogbm9uY2UsXG4gICAgICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfX2h0bWw6IFwiKHNlbGYuX19uZXh0X3M9c2VsZi5fX25leHRfc3x8W10pLnB1c2goXCIgKyBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVzdFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0pICsgXCIpXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0cmF0ZWd5ID09PSBcImFmdGVySW50ZXJhY3RpdmVcIikge1xuICAgICAgICAgICAgaWYgKHNyYykge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBfcmVhY3Rkb20uZGVmYXVsdC5wcmVsb2FkKHNyYywgcmVzdFByb3BzLmludGVncml0eSA/IHtcbiAgICAgICAgICAgICAgICAgICAgYXM6IFwic2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgIGludGVncml0eTogcmVzdFByb3BzLmludGVncml0eVxuICAgICAgICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICAgICAgICAgIGFzOiBcInNjcmlwdFwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU2NyaXB0LCBcIl9fbmV4dFNjcmlwdFwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuY29uc3QgX2RlZmF1bHQgPSBTY3JpcHQ7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjcmlwdC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJoYW5kbGVDbGllbnRTY3JpcHRMb2FkIiwiaW5pdFNjcmlwdExvYWRlciIsImRlZmF1bHQiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZGVmYXVsdCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwiX2pzeHJ1bnRpbWUiLCJfcmVhY3Rkb20iLCJfIiwiX3JlYWN0IiwiX2hlYWRtYW5hZ2VyY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfaGVhZG1hbmFnZXIiLCJfcmVxdWVzdGlkbGVjYWxsYmFjayIsIlNjcmlwdENhY2hlIiwiTWFwIiwiTG9hZENhY2hlIiwiU2V0IiwiaWdub3JlUHJvcHMiLCJpbnNlcnRTdHlsZXNoZWV0cyIsInN0eWxlc2hlZXRzIiwicHJlaW5pdCIsImZvckVhY2giLCJzdHlsZXNoZWV0IiwiYXMiLCJoZWFkIiwiZG9jdW1lbnQiLCJsaW5rIiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJyZWwiLCJocmVmIiwiYXBwZW5kQ2hpbGQiLCJsb2FkU2NyaXB0IiwicHJvcHMiLCJzcmMiLCJpZCIsIm9uTG9hZCIsIm9uUmVhZHkiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImNoaWxkcmVuIiwic3RyYXRlZ3kiLCJvbkVycm9yIiwiY2FjaGVLZXkiLCJoYXMiLCJhZGQiLCJ0aGVuIiwiYWZ0ZXJMb2FkIiwiZWwiLCJsb2FkUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJjYWxsIiwiY2F0Y2giLCJpbm5lckhUTUwiLCJfX2h0bWwiLCJ0ZXh0Q29udGVudCIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJzZXQiLCJrIiwiZW50cmllcyIsInVuZGVmaW5lZCIsImluY2x1ZGVzIiwiYXR0ciIsIkRPTUF0dHJpYnV0ZU5hbWVzIiwidG9Mb3dlckNhc2UiLCJzZXRBdHRyaWJ1dGUiLCJib2R5Iiwid2luZG93IiwicmVxdWVzdElkbGVDYWxsYmFjayIsImxvYWRMYXp5U2NyaXB0IiwicmVhZHlTdGF0ZSIsImFkZEJlZm9yZUludGVyYWN0aXZlVG9DYWNoZSIsInNjcmlwdHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwic2NyaXB0IiwiZ2V0QXR0cmlidXRlIiwic2NyaXB0TG9hZGVySXRlbXMiLCJTY3JpcHQiLCJyZXN0UHJvcHMiLCJ1cGRhdGVTY3JpcHRzIiwiZ2V0SXNTc3IiLCJhcHBEaXIiLCJub25jZSIsInVzZUNvbnRleHQiLCJIZWFkTWFuYWdlckNvbnRleHQiLCJoYXNPblJlYWR5RWZmZWN0Q2FsbGVkIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiY3VycmVudCIsImhhc0xvYWRTY3JpcHRFZmZlY3RDYWxsZWQiLCJjb25jYXQiLCJzdHlsZVNyYyIsImpzeCIsIkpTT04iLCJzdHJpbmdpZnkiLCJwcmVsb2FkIiwiaW50ZWdyaXR5IiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/script.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/setup-hydration-warning.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/client/setup-hydration-warning.js ***! + \******************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nif (!window._nextSetupHydrationWarning) {\n const origConsoleError = window.console.error;\n window.console.error = function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n const isHydrateError = args.some((arg)=>typeof arg === \"string\" && arg.match(/(hydration|content does not match|did not match)/i));\n if (isHydrateError) {\n args = [\n ...args,\n \"\\n\\nSee more info here: https://nextjs.org/docs/messages/react-hydration-error\"\n ];\n }\n origConsoleError.apply(window.console, args);\n };\n window._nextSetupHydrationWarning = true;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=setup-hydration-warning.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC9zZXR1cC1oeWRyYXRpb24td2FybmluZy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixJQUFJLENBQUNDLE9BQU9DLDBCQUEwQixFQUFFO0lBQ3BDLE1BQU1DLG1CQUFtQkYsT0FBT0csT0FBTyxDQUFDQyxLQUFLO0lBQzdDSixPQUFPRyxPQUFPLENBQUNDLEtBQUssR0FBRztRQUNuQixJQUFJLElBQUlDLE9BQU9DLFVBQVVDLE1BQU0sRUFBRUMsT0FBTyxJQUFJQyxNQUFNSixPQUFPSyxPQUFPLEdBQUdBLE9BQU9MLE1BQU1LLE9BQU87WUFDbkZGLElBQUksQ0FBQ0UsS0FBSyxHQUFHSixTQUFTLENBQUNJLEtBQUs7UUFDaEM7UUFDQSxNQUFNQyxpQkFBaUJILEtBQUtJLElBQUksQ0FBQyxDQUFDQyxNQUFNLE9BQU9BLFFBQVEsWUFBWUEsSUFBSUMsS0FBSyxDQUFDO1FBQzdFLElBQUlILGdCQUFnQjtZQUNoQkgsT0FBTzttQkFDQUE7Z0JBQ0g7YUFDSDtRQUNMO1FBQ0FOLGlCQUFpQmEsS0FBSyxDQUFDZixPQUFPRyxPQUFPLEVBQUVLO0lBQzNDO0lBQ0FSLE9BQU9DLDBCQUEwQixHQUFHO0FBQ3hDO0FBRUEsSUFBSSxDQUFDLE9BQU9ILFFBQVFrQixPQUFPLEtBQUssY0FBZSxPQUFPbEIsUUFBUWtCLE9BQU8sS0FBSyxZQUFZbEIsUUFBUWtCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2xCLFFBQVFrQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLckIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRa0IsT0FBTyxFQUFFLGNBQWM7UUFBRWpCLE9BQU87SUFBSztJQUNuRUgsT0FBT3NCLE1BQU0sQ0FBQ3BCLFFBQVFrQixPQUFPLEVBQUVsQjtJQUMvQnFCLE9BQU9yQixPQUFPLEdBQUdBLFFBQVFrQixPQUFPO0FBQ2xDLEVBRUEsbURBQW1EIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3NldHVwLWh5ZHJhdGlvbi13YXJuaW5nLmpzPzdkZGEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5pZiAoIXdpbmRvdy5fbmV4dFNldHVwSHlkcmF0aW9uV2FybmluZykge1xuICAgIGNvbnN0IG9yaWdDb25zb2xlRXJyb3IgPSB3aW5kb3cuY29uc29sZS5lcnJvcjtcbiAgICB3aW5kb3cuY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzSHlkcmF0ZUVycm9yID0gYXJncy5zb21lKChhcmcpPT50eXBlb2YgYXJnID09PSBcInN0cmluZ1wiICYmIGFyZy5tYXRjaCgvKGh5ZHJhdGlvbnxjb250ZW50IGRvZXMgbm90IG1hdGNofGRpZCBub3QgbWF0Y2gpL2kpKTtcbiAgICAgICAgaWYgKGlzSHlkcmF0ZUVycm9yKSB7XG4gICAgICAgICAgICBhcmdzID0gW1xuICAgICAgICAgICAgICAgIC4uLmFyZ3MsXG4gICAgICAgICAgICAgICAgXCJcXG5cXG5TZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3JlYWN0LWh5ZHJhdGlvbi1lcnJvclwiXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIG9yaWdDb25zb2xlRXJyb3IuYXBwbHkod2luZG93LmNvbnNvbGUsIGFyZ3MpO1xuICAgIH07XG4gICAgd2luZG93Ll9uZXh0U2V0dXBIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2V0dXAtaHlkcmF0aW9uLXdhcm5pbmcuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwid2luZG93IiwiX25leHRTZXR1cEh5ZHJhdGlvbldhcm5pbmciLCJvcmlnQ29uc29sZUVycm9yIiwiY29uc29sZSIsImVycm9yIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJpc0h5ZHJhdGVFcnJvciIsInNvbWUiLCJhcmciLCJtYXRjaCIsImFwcGx5IiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/setup-hydration-warning.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/tracing/report-to-socket.js": +/*!*******************************************************************!*\ + !*** ./node_modules/next/dist/client/tracing/report-to-socket.js ***! + \*******************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return reportToSocket;\n }\n}));\nconst _websocket = __webpack_require__(/*! ../dev/error-overlay/websocket */ \"./node_modules/next/dist/client/dev/error-overlay/websocket.js\");\nfunction reportToSocket(span) {\n if (span.state.state !== \"ended\") {\n throw new Error(\"Expected span to be ended\");\n }\n (0, _websocket.sendMessage)(JSON.stringify({\n event: \"span-end\",\n startTime: span.startTime,\n endTime: span.state.endTime,\n spanName: span.name,\n attributes: span.attributes\n }));\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=report-to-socket.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC90cmFjaW5nL3JlcG9ydC10by1zb2NrZXQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGFBQWFDLG1CQUFPQSxDQUFDLHNHQUFnQztBQUMzRCxTQUFTRixlQUFlRyxJQUFJO0lBQ3hCLElBQUlBLEtBQUtDLEtBQUssQ0FBQ0EsS0FBSyxLQUFLLFNBQVM7UUFDOUIsTUFBTSxJQUFJQyxNQUFNO0lBQ3BCO0lBQ0MsSUFBR0osV0FBV0ssV0FBVyxFQUFFQyxLQUFLQyxTQUFTLENBQUM7UUFDdkNDLE9BQU87UUFDUEMsV0FBV1AsS0FBS08sU0FBUztRQUN6QkMsU0FBU1IsS0FBS0MsS0FBSyxDQUFDTyxPQUFPO1FBQzNCQyxVQUFVVCxLQUFLVSxJQUFJO1FBQ25CQyxZQUFZWCxLQUFLVyxVQUFVO0lBQy9CO0FBQ0o7QUFFQSxJQUFJLENBQUMsT0FBT2xCLFFBQVFtQixPQUFPLEtBQUssY0FBZSxPQUFPbkIsUUFBUW1CLE9BQU8sS0FBSyxZQUFZbkIsUUFBUW1CLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT25CLFFBQVFtQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLdEIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRbUIsT0FBTyxFQUFFLGNBQWM7UUFBRWxCLE9BQU87SUFBSztJQUNuRUgsT0FBT3VCLE1BQU0sQ0FBQ3JCLFFBQVFtQixPQUFPLEVBQUVuQjtJQUMvQnNCLE9BQU90QixPQUFPLEdBQUdBLFFBQVFtQixPQUFPO0FBQ2xDLEVBRUEsNENBQTRDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3RyYWNpbmcvcmVwb3J0LXRvLXNvY2tldC5qcz8zODczIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmVwb3J0VG9Tb2NrZXQ7XG4gICAgfVxufSk7XG5jb25zdCBfd2Vic29ja2V0ID0gcmVxdWlyZShcIi4uL2Rldi9lcnJvci1vdmVybGF5L3dlYnNvY2tldFwiKTtcbmZ1bmN0aW9uIHJlcG9ydFRvU29ja2V0KHNwYW4pIHtcbiAgICBpZiAoc3Bhbi5zdGF0ZS5zdGF0ZSAhPT0gXCJlbmRlZFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHNwYW4gdG8gYmUgZW5kZWRcIik7XG4gICAgfVxuICAgICgwLCBfd2Vic29ja2V0LnNlbmRNZXNzYWdlKShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50OiBcInNwYW4tZW5kXCIsXG4gICAgICAgIHN0YXJ0VGltZTogc3Bhbi5zdGFydFRpbWUsXG4gICAgICAgIGVuZFRpbWU6IHNwYW4uc3RhdGUuZW5kVGltZSxcbiAgICAgICAgc3Bhbk5hbWU6IHNwYW4ubmFtZSxcbiAgICAgICAgYXR0cmlidXRlczogc3Bhbi5hdHRyaWJ1dGVzXG4gICAgfSkpO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXBvcnQtdG8tc29ja2V0LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJyZXBvcnRUb1NvY2tldCIsIl93ZWJzb2NrZXQiLCJyZXF1aXJlIiwic3BhbiIsInN0YXRlIiwiRXJyb3IiLCJzZW5kTWVzc2FnZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudCIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJzcGFuTmFtZSIsIm5hbWUiLCJhdHRyaWJ1dGVzIiwiZGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/tracing/report-to-socket.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/tracing/tracer.js": +/*!*********************************************************!*\ + !*** ./node_modules/next/dist/client/tracing/tracer.js ***! + \*********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../shared/lib/mitt */ \"./node_modules/next/dist/shared/lib/mitt.js\"));\nclass Span {\n end(endTime) {\n if (this.state.state === \"ended\") {\n throw new Error(\"Span has already ended\");\n }\n this.state = {\n state: \"ended\",\n endTime: endTime != null ? endTime : Date.now()\n };\n this.onSpanEnd(this);\n }\n constructor(name, options, onSpanEnd){\n this.name = name;\n var _options_attributes;\n this.attributes = (_options_attributes = options.attributes) != null ? _options_attributes : {};\n var _options_startTime;\n this.startTime = (_options_startTime = options.startTime) != null ? _options_startTime : Date.now();\n this.onSpanEnd = onSpanEnd;\n this.state = {\n state: \"inprogress\"\n };\n }\n}\nclass Tracer {\n startSpan(name, options) {\n return new Span(name, options, this.handleSpanEnd);\n }\n onSpanEnd(cb) {\n this._emitter.on(\"spanend\", cb);\n return ()=>{\n this._emitter.off(\"spanend\", cb);\n };\n }\n constructor(){\n this._emitter = (0, _mitt.default)();\n this.handleSpanEnd = (span)=>{\n this._emitter.emit(\"spanend\", span);\n };\n }\n}\nconst _default = new Tracer();\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=tracer.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC90cmFjaW5nL3RyYWNlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyw0R0FBeUM7QUFDbEYsTUFBTUMsUUFBUSxXQUFXLEdBQUdGLHlCQUF5QkcsQ0FBQyxDQUFDRixtQkFBT0EsQ0FBQywwRUFBdUI7QUFDdEYsTUFBTUc7SUFDRkMsSUFBSUMsT0FBTyxFQUFFO1FBQ1QsSUFBSSxJQUFJLENBQUNDLEtBQUssQ0FBQ0EsS0FBSyxLQUFLLFNBQVM7WUFDOUIsTUFBTSxJQUFJQyxNQUFNO1FBQ3BCO1FBQ0EsSUFBSSxDQUFDRCxLQUFLLEdBQUc7WUFDVEEsT0FBTztZQUNQRCxTQUFTQSxXQUFXLE9BQU9BLFVBQVVHLEtBQUtDLEdBQUc7UUFDakQ7UUFDQSxJQUFJLENBQUNDLFNBQVMsQ0FBQyxJQUFJO0lBQ3ZCO0lBQ0FDLFlBQVlDLElBQUksRUFBRUMsT0FBTyxFQUFFSCxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDRSxJQUFJLEdBQUdBO1FBQ1osSUFBSUU7UUFDSixJQUFJLENBQUNDLFVBQVUsR0FBRyxDQUFDRCxzQkFBc0JELFFBQVFFLFVBQVUsS0FBSyxPQUFPRCxzQkFBc0IsQ0FBQztRQUM5RixJQUFJRTtRQUNKLElBQUksQ0FBQ0MsU0FBUyxHQUFHLENBQUNELHFCQUFxQkgsUUFBUUksU0FBUyxLQUFLLE9BQU9ELHFCQUFxQlIsS0FBS0MsR0FBRztRQUNqRyxJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDSixLQUFLLEdBQUc7WUFDVEEsT0FBTztRQUNYO0lBQ0o7QUFDSjtBQUNBLE1BQU1ZO0lBQ0ZDLFVBQVVQLElBQUksRUFBRUMsT0FBTyxFQUFFO1FBQ3JCLE9BQU8sSUFBSVYsS0FBS1MsTUFBTUMsU0FBUyxJQUFJLENBQUNPLGFBQWE7SUFDckQ7SUFDQVYsVUFBVVcsRUFBRSxFQUFFO1FBQ1YsSUFBSSxDQUFDQyxRQUFRLENBQUNDLEVBQUUsQ0FBQyxXQUFXRjtRQUM1QixPQUFPO1lBQ0gsSUFBSSxDQUFDQyxRQUFRLENBQUNFLEdBQUcsQ0FBQyxXQUFXSDtRQUNqQztJQUNKO0lBQ0FWLGFBQWE7UUFDVCxJQUFJLENBQUNXLFFBQVEsR0FBRyxDQUFDLEdBQUdyQixNQUFNd0IsT0FBTztRQUNqQyxJQUFJLENBQUNMLGFBQWEsR0FBRyxDQUFDTTtZQUNsQixJQUFJLENBQUNKLFFBQVEsQ0FBQ0ssSUFBSSxDQUFDLFdBQVdEO1FBQ2xDO0lBQ0o7QUFDSjtBQUNBLE1BQU01QixXQUFXLElBQUlvQjtBQUVyQixJQUFJLENBQUMsT0FBT3hCLFFBQVErQixPQUFPLEtBQUssY0FBZSxPQUFPL0IsUUFBUStCLE9BQU8sS0FBSyxZQUFZL0IsUUFBUStCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTy9CLFFBQVErQixPQUFPLENBQUNHLFVBQVUsS0FBSyxhQUFhO0lBQ3JLcEMsT0FBT0MsY0FBYyxDQUFDQyxRQUFRK0IsT0FBTyxFQUFFLGNBQWM7UUFBRTlCLE9BQU87SUFBSztJQUNuRUgsT0FBT3FDLE1BQU0sQ0FBQ25DLFFBQVErQixPQUFPLEVBQUUvQjtJQUMvQm9DLE9BQU9wQyxPQUFPLEdBQUdBLFFBQVErQixPQUFPO0FBQ2xDLEVBRUEsa0NBQWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3RyYWNpbmcvdHJhY2VyLmpzPzA1ODgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfZGVmYXVsdDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfbWl0dCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4uLy4uL3NoYXJlZC9saWIvbWl0dFwiKSk7XG5jbGFzcyBTcGFuIHtcbiAgICBlbmQoZW5kVGltZSkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zdGF0ZSA9PT0gXCJlbmRlZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTcGFuIGhhcyBhbHJlYWR5IGVuZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBzdGF0ZTogXCJlbmRlZFwiLFxuICAgICAgICAgICAgZW5kVGltZTogZW5kVGltZSAhPSBudWxsID8gZW5kVGltZSA6IERhdGUubm93KClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vblNwYW5FbmQodGhpcyk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIG9wdGlvbnMsIG9uU3BhbkVuZCl7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHZhciBfb3B0aW9uc19hdHRyaWJ1dGVzO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSAoX29wdGlvbnNfYXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcykgIT0gbnVsbCA/IF9vcHRpb25zX2F0dHJpYnV0ZXMgOiB7fTtcbiAgICAgICAgdmFyIF9vcHRpb25zX3N0YXJ0VGltZTtcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSAoX29wdGlvbnNfc3RhcnRUaW1lID0gb3B0aW9ucy5zdGFydFRpbWUpICE9IG51bGwgPyBfb3B0aW9uc19zdGFydFRpbWUgOiBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLm9uU3BhbkVuZCA9IG9uU3BhbkVuZDtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHN0YXRlOiBcImlucHJvZ3Jlc3NcIlxuICAgICAgICB9O1xuICAgIH1cbn1cbmNsYXNzIFRyYWNlciB7XG4gICAgc3RhcnRTcGFuKG5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTcGFuKG5hbWUsIG9wdGlvbnMsIHRoaXMuaGFuZGxlU3BhbkVuZCk7XG4gICAgfVxuICAgIG9uU3BhbkVuZChjYikge1xuICAgICAgICB0aGlzLl9lbWl0dGVyLm9uKFwic3BhbmVuZFwiLCBjYik7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgdGhpcy5fZW1pdHRlci5vZmYoXCJzcGFuZW5kXCIsIGNiKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5fZW1pdHRlciA9ICgwLCBfbWl0dC5kZWZhdWx0KSgpO1xuICAgICAgICB0aGlzLmhhbmRsZVNwYW5FbmQgPSAoc3Bhbik9PntcbiAgICAgICAgICAgIHRoaXMuX2VtaXR0ZXIuZW1pdChcInNwYW5lbmRcIiwgc3Bhbik7XG4gICAgICAgIH07XG4gICAgfVxufVxuY29uc3QgX2RlZmF1bHQgPSBuZXcgVHJhY2VyKCk7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNlci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2RlZmF1bHQiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX21pdHQiLCJfIiwiU3BhbiIsImVuZCIsImVuZFRpbWUiLCJzdGF0ZSIsIkVycm9yIiwiRGF0ZSIsIm5vdyIsIm9uU3BhbkVuZCIsImNvbnN0cnVjdG9yIiwibmFtZSIsIm9wdGlvbnMiLCJfb3B0aW9uc19hdHRyaWJ1dGVzIiwiYXR0cmlidXRlcyIsIl9vcHRpb25zX3N0YXJ0VGltZSIsInN0YXJ0VGltZSIsIlRyYWNlciIsInN0YXJ0U3BhbiIsImhhbmRsZVNwYW5FbmQiLCJjYiIsIl9lbWl0dGVyIiwib24iLCJvZmYiLCJkZWZhdWx0Iiwic3BhbiIsImVtaXQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/tracing/tracer.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/trusted-types.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/client/trusted-types.js ***! + \********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * Stores the Trusted Types Policy. Starts as undefined and can be set to null\n * if Trusted Types is not supported in the browser.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"__unsafeCreateTrustedScriptURL\", ({\n enumerable: true,\n get: function() {\n return __unsafeCreateTrustedScriptURL;\n }\n}));\nlet policy;\n/**\n * Getter for the Trusted Types Policy. If it is undefined, it is instantiated\n * here or set to null if Trusted Types is not supported in the browser.\n */ function getPolicy() {\n if (typeof policy === \"undefined\" && \"object\" !== \"undefined\") {\n var _window_trustedTypes;\n policy = ((_window_trustedTypes = window.trustedTypes) == null ? void 0 : _window_trustedTypes.createPolicy(\"nextjs\", {\n createHTML: (input)=>input,\n createScript: (input)=>input,\n createScriptURL: (input)=>input\n })) || null;\n }\n return policy;\n}\nfunction __unsafeCreateTrustedScriptURL(url) {\n var _getPolicy;\n return ((_getPolicy = getPolicy()) == null ? void 0 : _getPolicy.createScriptURL(url)) || url;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=trusted-types.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC90cnVzdGVkLXR5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUFnQjtBQUNqQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGtFQUFpRTtJQUM3REksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLElBQUlDO0FBQ0o7OztDQUdDLEdBQUcsU0FBU0M7SUFDVCxJQUFJLE9BQU9ELFdBQVcsZUFBZSxhQUFrQixhQUFhO1FBQ2hFLElBQUlFO1FBQ0pGLFNBQVMsQ0FBQyxDQUFDRSx1QkFBdUJDLE9BQU9DLFlBQVksS0FBSyxPQUFPLEtBQUssSUFBSUYscUJBQXFCRyxZQUFZLENBQUMsVUFBVTtZQUNsSEMsWUFBWSxDQUFDQyxRQUFRQTtZQUNyQkMsY0FBYyxDQUFDRCxRQUFRQTtZQUN2QkUsaUJBQWlCLENBQUNGLFFBQVFBO1FBQzlCLEVBQUMsS0FBTTtJQUNYO0lBQ0EsT0FBT1A7QUFDWDtBQUNBLFNBQVNELCtCQUErQlcsR0FBRztJQUN2QyxJQUFJQztJQUNKLE9BQU8sQ0FBQyxDQUFDQSxhQUFhVixXQUFVLEtBQU0sT0FBTyxLQUFLLElBQUlVLFdBQVdGLGVBQWUsQ0FBQ0MsSUFBRyxLQUFNQTtBQUM5RjtBQUVBLElBQUksQ0FBQyxPQUFPZixRQUFRaUIsT0FBTyxLQUFLLGNBQWUsT0FBT2pCLFFBQVFpQixPQUFPLEtBQUssWUFBWWpCLFFBQVFpQixPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9qQixRQUFRaUIsT0FBTyxDQUFDQyxVQUFVLEtBQUssYUFBYTtJQUNyS3BCLE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUWlCLE9BQU8sRUFBRSxjQUFjO1FBQUVoQixPQUFPO0lBQUs7SUFDbkVILE9BQU9xQixNQUFNLENBQUNuQixRQUFRaUIsT0FBTyxFQUFFakI7SUFDL0JvQixPQUFPcEIsT0FBTyxHQUFHQSxRQUFRaUIsT0FBTztBQUNsQyxFQUVBLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC90cnVzdGVkLXR5cGVzLmpzP2E0MTEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdG9yZXMgdGhlIFRydXN0ZWQgVHlwZXMgUG9saWN5LiBTdGFydHMgYXMgdW5kZWZpbmVkIGFuZCBjYW4gYmUgc2V0IHRvIG51bGxcbiAqIGlmIFRydXN0ZWQgVHlwZXMgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgYnJvd3Nlci5cbiAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX191bnNhZmVDcmVhdGVUcnVzdGVkU2NyaXB0VVJMO1xuICAgIH1cbn0pO1xubGV0IHBvbGljeTtcbi8qKlxuICogR2V0dGVyIGZvciB0aGUgVHJ1c3RlZCBUeXBlcyBQb2xpY3kuIElmIGl0IGlzIHVuZGVmaW5lZCwgaXQgaXMgaW5zdGFudGlhdGVkXG4gKiBoZXJlIG9yIHNldCB0byBudWxsIGlmIFRydXN0ZWQgVHlwZXMgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgYnJvd3Nlci5cbiAqLyBmdW5jdGlvbiBnZXRQb2xpY3koKSB7XG4gICAgaWYgKHR5cGVvZiBwb2xpY3kgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB2YXIgX3dpbmRvd190cnVzdGVkVHlwZXM7XG4gICAgICAgIHBvbGljeSA9ICgoX3dpbmRvd190cnVzdGVkVHlwZXMgPSB3aW5kb3cudHJ1c3RlZFR5cGVzKSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvd190cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KFwibmV4dGpzXCIsIHtcbiAgICAgICAgICAgIGNyZWF0ZUhUTUw6IChpbnB1dCk9PmlucHV0LFxuICAgICAgICAgICAgY3JlYXRlU2NyaXB0OiAoaW5wdXQpPT5pbnB1dCxcbiAgICAgICAgICAgIGNyZWF0ZVNjcmlwdFVSTDogKGlucHV0KT0+aW5wdXRcbiAgICAgICAgfSkpIHx8IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwb2xpY3k7XG59XG5mdW5jdGlvbiBfX3Vuc2FmZUNyZWF0ZVRydXN0ZWRTY3JpcHRVUkwodXJsKSB7XG4gICAgdmFyIF9nZXRQb2xpY3k7XG4gICAgcmV0dXJuICgoX2dldFBvbGljeSA9IGdldFBvbGljeSgpKSA9PSBudWxsID8gdm9pZCAwIDogX2dldFBvbGljeS5jcmVhdGVTY3JpcHRVUkwodXJsKSkgfHwgdXJsO1xufVxuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD10cnVzdGVkLXR5cGVzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJfX3Vuc2FmZUNyZWF0ZVRydXN0ZWRTY3JpcHRVUkwiLCJwb2xpY3kiLCJnZXRQb2xpY3kiLCJfd2luZG93X3RydXN0ZWRUeXBlcyIsIndpbmRvdyIsInRydXN0ZWRUeXBlcyIsImNyZWF0ZVBvbGljeSIsImNyZWF0ZUhUTUwiLCJpbnB1dCIsImNyZWF0ZVNjcmlwdCIsImNyZWF0ZVNjcmlwdFVSTCIsInVybCIsIl9nZXRQb2xpY3kiLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/trusted-types.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/webpack.js": +/*!**************************************************!*\ + !*** ./node_modules/next/dist/client/webpack.js ***! + \**************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"./node_modules/next/dist/build/deployment-id.js\");\n// If we have a deployment ID, we need to append it to the webpack chunk names\n// I am keeping the process check explicit so this can be statically optimized\nif (false) {}\nself.__next_set_public_path__ = (path)=>{\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n __webpack_require__.p = path;\n};\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=webpack.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC93ZWJwYWNrLmpzIiwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUNoRDtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixNQUFNQyxnQkFBZ0JDLG1CQUFPQSxDQUFDLCtFQUF3QjtBQUN0RCw4RUFBOEU7QUFDOUUsOEVBQThFO0FBQzlFLElBQUlDLEtBQThCLEVBQUUsRUErQm5DO0FBQ0RrQixLQUFLQyx3QkFBd0IsR0FBRyxDQUFDQztJQUM3Qiw2REFBNkQ7SUFDN0RDLHFCQUF1QkEsR0FBR0Q7QUFDOUI7QUFFQSxJQUFJLENBQUMsT0FBT3hCLFFBQVEwQixPQUFPLEtBQUssY0FBZSxPQUFPMUIsUUFBUTBCLE9BQU8sS0FBSyxZQUFZMUIsUUFBUTBCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBTzFCLFFBQVEwQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLN0IsT0FBT0MsY0FBYyxDQUFDQyxRQUFRMEIsT0FBTyxFQUFFLGNBQWM7UUFBRXpCLE9BQU87SUFBSztJQUNuRUgsT0FBTzhCLE1BQU0sQ0FBQzVCLFFBQVEwQixPQUFPLEVBQUUxQjtJQUMvQjZCLE9BQU83QixPQUFPLEdBQUdBLFFBQVEwQixPQUFPO0FBQ2xDLEVBRUEsbUNBQW1DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3dlYnBhY2suanM/MDhkOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbmNvbnN0IF9kZXBsb3ltZW50aWQgPSByZXF1aXJlKFwiLi4vYnVpbGQvZGVwbG95bWVudC1pZFwiKTtcbi8vIElmIHdlIGhhdmUgYSBkZXBsb3ltZW50IElELCB3ZSBuZWVkIHRvIGFwcGVuZCBpdCB0byB0aGUgd2VicGFjayBjaHVuayBuYW1lc1xuLy8gSSBhbSBrZWVwaW5nIHRoZSBwcm9jZXNzIGNoZWNrIGV4cGxpY2l0IHNvIHRoaXMgY2FuIGJlIHN0YXRpY2FsbHkgb3B0aW1pemVkXG5pZiAocHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgY29uc3Qgc3VmZml4ID0gKDAsIF9kZXBsb3ltZW50aWQuZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nKSgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIGNvbnN0IGdldENodW5rU2NyaXB0RmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLnU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gZnVuY3Rpb24oKSAvLyBXZSBlbm9kZSB0aGUgY2h1bmsgZmlsZW5hbWUgYmVjYXVzZSBvdXIgc3RhdGljIHNlcnZlciBtYXRjaGVzIGFnYWluc3QgYW5kIGVuY29kZWRcbiAgICAvLyBmaWxlbmFtZSBwYXRoLlxuICAgIHtcbiAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0Q2h1bmtTY3JpcHRGaWxlbmFtZSguLi5hcmdzKSArIHN1ZmZpeDtcbiAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIGNvbnN0IGdldENodW5rQ3NzRmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLms7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgX193ZWJwYWNrX3JlcXVpcmVfXy5rID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldENodW5rQ3NzRmlsZW5hbWUoLi4uYXJncykgKyBzdWZmaXg7XG4gICAgfTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBjb25zdCBnZXRNaW5pQ3NzRmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1pbmlDc3NGO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIF9fd2VicGFja19yZXF1aXJlX18ubWluaUNzc0YgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0TWluaUNzc0ZpbGVuYW1lKC4uLmFyZ3MpICsgc3VmZml4O1xuICAgIH07XG59XG5zZWxmLl9fbmV4dF9zZXRfcHVibGljX3BhdGhfXyA9IChwYXRoKT0+e1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyA9IHBhdGg7XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD13ZWJwYWNrLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIl9kZXBsb3ltZW50aWQiLCJyZXF1aXJlIiwicHJvY2VzcyIsImVudiIsIk5FWFRfREVQTE9ZTUVOVF9JRCIsInN1ZmZpeCIsImdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZyIsImdldENodW5rU2NyaXB0RmlsZW5hbWUiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwidSIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiZ2V0Q2h1bmtDc3NGaWxlbmFtZSIsImsiLCJnZXRNaW5pQ3NzRmlsZW5hbWUiLCJtaW5pQ3NzRiIsInNlbGYiLCJfX25leHRfc2V0X3B1YmxpY19wYXRoX18iLCJwYXRoIiwiX193ZWJwYWNrX3B1YmxpY19wYXRoX18iLCJkZWZhdWx0IiwiX19lc01vZHVsZSIsImFzc2lnbiIsIm1vZHVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/webpack.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/client/with-router.js": +/*!******************************************************!*\ + !*** ./node_modules/next/dist/client/with-router.js ***! + \******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return withRouter;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _router = __webpack_require__(/*! ./router */ \"./node_modules/next/dist/client/router.js\");\nfunction withRouter(ComposedComponent) {\n function WithRouterWrapper(props) {\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(ComposedComponent, {\n router: (0, _router.useRouter)(),\n ...props\n });\n }\n WithRouterWrapper.getInitialProps = ComposedComponent.getInitialProps;\n WithRouterWrapper.origGetInitialProps = ComposedComponent.origGetInitialProps;\n if (true) {\n const name = ComposedComponent.displayName || ComposedComponent.name || \"Unknown\";\n WithRouterWrapper.displayName = \"withRouter(\" + name + \")\";\n }\n return WithRouterWrapper;\n}\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=with-router.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NsaWVudC93aXRoLXJvdXRlci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyw0R0FBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsOERBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsNENBQU87QUFDdkUsTUFBTUksVUFBVUosbUJBQU9BLENBQUMsMkRBQVU7QUFDbEMsU0FBU0YsV0FBV08saUJBQWlCO0lBQ2pDLFNBQVNDLGtCQUFrQkMsS0FBSztRQUM1QixPQUFxQixXQUFILEdBQUksSUFBR04sWUFBWU8sR0FBRyxFQUFFSCxtQkFBbUI7WUFDekRJLFFBQVEsQ0FBQyxHQUFHTCxRQUFRTSxTQUFTO1lBQzdCLEdBQUdILEtBQUs7UUFDWjtJQUNKO0lBQ0FELGtCQUFrQkssZUFBZSxHQUFHTixrQkFBa0JNLGVBQWU7SUFDckVMLGtCQUFrQk0sbUJBQW1CLEdBQUdQLGtCQUFrQk8sbUJBQW1CO0lBQzdFLElBQUlDLElBQXFDLEVBQUU7UUFDdkMsTUFBTUMsT0FBT1Qsa0JBQWtCVSxXQUFXLElBQUlWLGtCQUFrQlMsSUFBSSxJQUFJO1FBQ3hFUixrQkFBa0JTLFdBQVcsR0FBRyxnQkFBZ0JELE9BQU87SUFDM0Q7SUFDQSxPQUFPUjtBQUNYO0FBRUEsSUFBSSxDQUFDLE9BQU9aLFFBQVFzQixPQUFPLEtBQUssY0FBZSxPQUFPdEIsUUFBUXNCLE9BQU8sS0FBSyxZQUFZdEIsUUFBUXNCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3RCLFFBQVFzQixPQUFPLENBQUNDLFVBQVUsS0FBSyxhQUFhO0lBQ3JLekIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRc0IsT0FBTyxFQUFFLGNBQWM7UUFBRXJCLE9BQU87SUFBSztJQUNuRUgsT0FBTzBCLE1BQU0sQ0FBQ3hCLFFBQVFzQixPQUFPLEVBQUV0QjtJQUMvQnlCLE9BQU96QixPQUFPLEdBQUdBLFFBQVFzQixPQUFPO0FBQ2xDLEVBRUEsdUNBQXVDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3dpdGgtcm91dGVyLmpzP2FjN2MiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB3aXRoUm91dGVyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX3JvdXRlciA9IHJlcXVpcmUoXCIuL3JvdXRlclwiKTtcbmZ1bmN0aW9uIHdpdGhSb3V0ZXIoQ29tcG9zZWRDb21wb25lbnQpIHtcbiAgICBmdW5jdGlvbiBXaXRoUm91dGVyV3JhcHBlcihwcm9wcykge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShDb21wb3NlZENvbXBvbmVudCwge1xuICAgICAgICAgICAgcm91dGVyOiAoMCwgX3JvdXRlci51c2VSb3V0ZXIpKCksXG4gICAgICAgICAgICAuLi5wcm9wc1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgV2l0aFJvdXRlcldyYXBwZXIuZ2V0SW5pdGlhbFByb3BzID0gQ29tcG9zZWRDb21wb25lbnQuZ2V0SW5pdGlhbFByb3BzO1xuICAgIFdpdGhSb3V0ZXJXcmFwcGVyLm9yaWdHZXRJbml0aWFsUHJvcHMgPSBDb21wb3NlZENvbXBvbmVudC5vcmlnR2V0SW5pdGlhbFByb3BzO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IENvbXBvc2VkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvc2VkQ29tcG9uZW50Lm5hbWUgfHwgXCJVbmtub3duXCI7XG4gICAgICAgIFdpdGhSb3V0ZXJXcmFwcGVyLmRpc3BsYXlOYW1lID0gXCJ3aXRoUm91dGVyKFwiICsgbmFtZSArIFwiKVwiO1xuICAgIH1cbiAgICByZXR1cm4gV2l0aFJvdXRlcldyYXBwZXI7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpdGgtcm91dGVyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJ3aXRoUm91dGVyIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9yb3V0ZXIiLCJDb21wb3NlZENvbXBvbmVudCIsIldpdGhSb3V0ZXJXcmFwcGVyIiwicHJvcHMiLCJqc3giLCJyb3V0ZXIiLCJ1c2VSb3V0ZXIiLCJnZXRJbml0aWFsUHJvcHMiLCJvcmlnR2V0SW5pdGlhbFByb3BzIiwicHJvY2VzcyIsIm5hbWUiLCJkaXNwbGF5TmFtZSIsImRlZmF1bHQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/client/with-router.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/strip-ansi/index.js": +/*!*************************************************************!*\ + !*** ./node_modules/next/dist/compiled/strip-ansi/index.js ***! + \*************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("var __dirname = \"/\";\n\n(()=>{\n \"use strict\";\n var e = {\n 511: (e)=>{\n e.exports = function() {\n let { onlyFirst: e = false } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n const r = [\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\n \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"\n ].join(\"|\");\n return new RegExp(r, e ? undefined : \"g\");\n };\n },\n 532: (e, r, _)=>{\n const t = _(511);\n e.exports = (e)=>typeof e === \"string\" ? e.replace(t(), \"\") : e;\n }\n };\n var r = {};\n function __nccwpck_require__(_) {\n var t = r[_];\n if (t !== undefined) {\n return t.exports;\n }\n var a = r[_] = {\n exports: {}\n };\n var n = true;\n try {\n e[_](a, a.exports, __nccwpck_require__);\n n = false;\n } finally{\n if (n) delete r[_];\n }\n return a.exports;\n }\n if (typeof __nccwpck_require__ !== \"undefined\") __nccwpck_require__.ab = __dirname + \"/\";\n var _ = __nccwpck_require__(532);\n module.exports = _;\n})();\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3N0cmlwLWFuc2kvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7QUFBQztJQUFLO0lBQWEsSUFBSUEsSUFBRTtRQUFDLEtBQUlBLENBQUFBO1lBQUlBLEVBQUVDLE9BQU8sR0FBQztvQkFBQyxFQUFDQyxXQUFVRixJQUFFLEtBQUssRUFBQyxvRUFBQyxDQUFDO2dCQUFLLE1BQU1HLElBQUU7b0JBQUM7b0JBQStIO2lCQUEyRCxDQUFDQyxJQUFJLENBQUM7Z0JBQUssT0FBTyxJQUFJQyxPQUFPRixHQUFFSCxJQUFFTSxZQUFVO1lBQUk7UUFBQztRQUFFLEtBQUksQ0FBQ04sR0FBRUcsR0FBRUk7WUFBSyxNQUFNQyxJQUFFRCxFQUFFO1lBQUtQLEVBQUVDLE9BQU8sR0FBQ0QsQ0FBQUEsSUFBRyxPQUFPQSxNQUFJLFdBQVNBLEVBQUVTLE9BQU8sQ0FBQ0QsS0FBSSxNQUFJUjtRQUFDO0lBQUM7SUFBRSxJQUFJRyxJQUFFLENBQUM7SUFBRSxTQUFTTyxvQkFBb0JILENBQUM7UUFBRSxJQUFJQyxJQUFFTCxDQUFDLENBQUNJLEVBQUU7UUFBQyxJQUFHQyxNQUFJRixXQUFVO1lBQUMsT0FBT0UsRUFBRVAsT0FBTztRQUFBO1FBQUMsSUFBSVUsSUFBRVIsQ0FBQyxDQUFDSSxFQUFFLEdBQUM7WUFBQ04sU0FBUSxDQUFDO1FBQUM7UUFBRSxJQUFJVyxJQUFFO1FBQUssSUFBRztZQUFDWixDQUFDLENBQUNPLEVBQUUsQ0FBQ0ksR0FBRUEsRUFBRVYsT0FBTyxFQUFDUztZQUFxQkUsSUFBRTtRQUFLLFNBQVE7WUFBQyxJQUFHQSxHQUFFLE9BQU9ULENBQUMsQ0FBQ0ksRUFBRTtRQUFBO1FBQUMsT0FBT0ksRUFBRVYsT0FBTztJQUFBO0lBQUMsSUFBRyxPQUFPUyx3QkFBc0IsYUFBWUEsb0JBQW9CRyxFQUFFLEdBQUNDLFNBQVNBLEdBQUM7SUFBSSxJQUFJUCxJQUFFRyxvQkFBb0I7SUFBS0ssT0FBT2QsT0FBTyxHQUFDTTtBQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qcz8xMWZhIl0sInNvdXJjZXNDb250ZW50IjpbIigoKT0+e1widXNlIHN0cmljdFwiO3ZhciBlPXs1MTE6ZT0+e2UuZXhwb3J0cz0oe29ubHlGaXJzdDplPWZhbHNlfT17fSk9Pntjb25zdCByPVtcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNylcIixcIig/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpXCJdLmpvaW4oXCJ8XCIpO3JldHVybiBuZXcgUmVnRXhwKHIsZT91bmRlZmluZWQ6XCJnXCIpfX0sNTMyOihlLHIsXyk9Pntjb25zdCB0PV8oNTExKTtlLmV4cG9ydHM9ZT0+dHlwZW9mIGU9PT1cInN0cmluZ1wiP2UucmVwbGFjZSh0KCksXCJcIik6ZX19O3ZhciByPXt9O2Z1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18oXyl7dmFyIHQ9cltfXTtpZih0IT09dW5kZWZpbmVkKXtyZXR1cm4gdC5leHBvcnRzfXZhciBhPXJbX109e2V4cG9ydHM6e319O3ZhciBuPXRydWU7dHJ5e2VbX10oYSxhLmV4cG9ydHMsX19uY2N3cGNrX3JlcXVpcmVfXyk7bj1mYWxzZX1maW5hbGx5e2lmKG4pZGVsZXRlIHJbX119cmV0dXJuIGEuZXhwb3J0c31pZih0eXBlb2YgX19uY2N3cGNrX3JlcXVpcmVfXyE9PVwidW5kZWZpbmVkXCIpX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIF89X19uY2N3cGNrX3JlcXVpcmVfXyg1MzIpO21vZHVsZS5leHBvcnRzPV99KSgpOyJdLCJuYW1lcyI6WyJlIiwiZXhwb3J0cyIsIm9ubHlGaXJzdCIsInIiLCJqb2luIiwiUmVnRXhwIiwidW5kZWZpbmVkIiwiXyIsInQiLCJyZXBsYWNlIiwiX19uY2N3cGNrX3JlcXVpcmVfXyIsImEiLCJuIiwiYWIiLCJfX2Rpcm5hbWUiLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/strip-ansi/index.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/pages/_app.js": +/*!**********************************************!*\ + !*** ./node_modules/next/dist/pages/_app.js ***! + \**********************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return App;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\n/**\n * `App` component is used for initialize of pages. It allows for overwriting and full control of the `page` initialization.\n * This allows for keeping state between navigation, custom error handling, injecting additional data.\n */ async function appGetInitialProps(param) {\n let { Component, ctx } = param;\n const pageProps = await (0, _utils.loadGetInitialProps)(Component, ctx);\n return {\n pageProps\n };\n}\nclass App extends _react.default.Component {\n render() {\n const { Component, pageProps } = this.props;\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(Component, {\n ...pageProps\n });\n }\n}\nApp.origGetInitialProps = appGetInitialProps;\nApp.getInitialProps = appGetInitialProps;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=_app.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19hcHAuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsNEdBQXlDO0FBQ2xGLE1BQU1DLGNBQWNELG1CQUFPQSxDQUFDLDhEQUFtQjtBQUMvQyxNQUFNRSxTQUFTLFdBQVcsR0FBR0gseUJBQXlCSSxDQUFDLENBQUNILG1CQUFPQSxDQUFDLDRDQUFPO0FBQ3ZFLE1BQU1JLFNBQVNKLG1CQUFPQSxDQUFDLHlFQUFxQjtBQUM1Qzs7O0NBR0MsR0FBRyxlQUFlSyxtQkFBbUJDLEtBQUs7SUFDdkMsSUFBSSxFQUFFQyxTQUFTLEVBQUVDLEdBQUcsRUFBRSxHQUFHRjtJQUN6QixNQUFNRyxZQUFZLE1BQU0sQ0FBQyxHQUFHTCxPQUFPTSxtQkFBbUIsRUFBRUgsV0FBV0M7SUFDbkUsT0FBTztRQUNIQztJQUNKO0FBQ0o7QUFDQSxNQUFNWCxZQUFZSSxPQUFPUyxPQUFPLENBQUNKLFNBQVM7SUFDdENLLFNBQVM7UUFDTCxNQUFNLEVBQUVMLFNBQVMsRUFBRUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDSSxLQUFLO1FBQzNDLE9BQXFCLFdBQUgsR0FBSSxJQUFHWixZQUFZYSxHQUFHLEVBQUVQLFdBQVc7WUFDakQsR0FBR0UsU0FBUztRQUNoQjtJQUNKO0FBQ0o7QUFDQVgsSUFBSWlCLG1CQUFtQixHQUFHVjtBQUMxQlAsSUFBSWtCLGVBQWUsR0FBR1g7QUFFdEIsSUFBSSxDQUFDLE9BQU9YLFFBQVFpQixPQUFPLEtBQUssY0FBZSxPQUFPakIsUUFBUWlCLE9BQU8sS0FBSyxZQUFZakIsUUFBUWlCLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT2pCLFFBQVFpQixPQUFPLENBQUNNLFVBQVUsS0FBSyxhQUFhO0lBQ3JLekIsT0FBT0MsY0FBYyxDQUFDQyxRQUFRaUIsT0FBTyxFQUFFLGNBQWM7UUFBRWhCLE9BQU87SUFBSztJQUNuRUgsT0FBTzBCLE1BQU0sQ0FBQ3hCLFFBQVFpQixPQUFPLEVBQUVqQjtJQUMvQnlCLE9BQU96QixPQUFPLEdBQUdBLFFBQVFpQixPQUFPO0FBQ2xDLEVBRUEsZ0NBQWdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvcGFnZXMvX2FwcC5qcz85NjFkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQXBwO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgX3V0aWxzID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvdXRpbHNcIik7XG4vKipcbiAqIGBBcHBgIGNvbXBvbmVudCBpcyB1c2VkIGZvciBpbml0aWFsaXplIG9mIHBhZ2VzLiBJdCBhbGxvd3MgZm9yIG92ZXJ3cml0aW5nIGFuZCBmdWxsIGNvbnRyb2wgb2YgdGhlIGBwYWdlYCBpbml0aWFsaXphdGlvbi5cbiAqIFRoaXMgYWxsb3dzIGZvciBrZWVwaW5nIHN0YXRlIGJldHdlZW4gbmF2aWdhdGlvbiwgY3VzdG9tIGVycm9yIGhhbmRsaW5nLCBpbmplY3RpbmcgYWRkaXRpb25hbCBkYXRhLlxuICovIGFzeW5jIGZ1bmN0aW9uIGFwcEdldEluaXRpYWxQcm9wcyhwYXJhbSkge1xuICAgIGxldCB7IENvbXBvbmVudCwgY3R4IH0gPSBwYXJhbTtcbiAgICBjb25zdCBwYWdlUHJvcHMgPSBhd2FpdCAoMCwgX3V0aWxzLmxvYWRHZXRJbml0aWFsUHJvcHMpKENvbXBvbmVudCwgY3R4KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwYWdlUHJvcHNcbiAgICB9O1xufVxuY2xhc3MgQXBwIGV4dGVuZHMgX3JlYWN0LmRlZmF1bHQuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgQ29tcG9uZW50LCBwYWdlUHJvcHMgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKENvbXBvbmVudCwge1xuICAgICAgICAgICAgLi4ucGFnZVByb3BzXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkFwcC5vcmlnR2V0SW5pdGlhbFByb3BzID0gYXBwR2V0SW5pdGlhbFByb3BzO1xuQXBwLmdldEluaXRpYWxQcm9wcyA9IGFwcEdldEluaXRpYWxQcm9wcztcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X2FwcC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiQXBwIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl91dGlscyIsImFwcEdldEluaXRpYWxQcm9wcyIsInBhcmFtIiwiQ29tcG9uZW50IiwiY3R4IiwicGFnZVByb3BzIiwibG9hZEdldEluaXRpYWxQcm9wcyIsImRlZmF1bHQiLCJyZW5kZXIiLCJwcm9wcyIsImpzeCIsIm9yaWdHZXRJbml0aWFsUHJvcHMiLCJnZXRJbml0aWFsUHJvcHMiLCJfX2VzTW9kdWxlIiwiYXNzaWduIiwibW9kdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/pages/_app.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/pages/_error.js": +/*!************************************************!*\ + !*** ./node_modules/next/dist/pages/_error.js ***! + \************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return Error;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _head = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/head */ \"./node_modules/next/dist/shared/lib/head.js\"));\nconst statusCodes = {\n 400: \"Bad Request\",\n 404: \"This page could not be found\",\n 405: \"Method Not Allowed\",\n 500: \"Internal Server Error\"\n};\nfunction _getInitialProps(param) {\n let { res, err } = param;\n const statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404;\n return {\n statusCode\n };\n}\nconst styles = {\n error: {\n // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n height: \"100vh\",\n textAlign: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\"\n },\n desc: {\n lineHeight: \"48px\"\n },\n h1: {\n display: \"inline-block\",\n margin: \"0 20px 0 0\",\n paddingRight: 23,\n fontSize: 24,\n fontWeight: 500,\n verticalAlign: \"top\"\n },\n h2: {\n fontSize: 14,\n fontWeight: 400,\n lineHeight: \"28px\"\n },\n wrap: {\n display: \"inline-block\"\n }\n};\nclass Error extends _react.default.Component {\n render() {\n const { statusCode, withDarkMode = true } = this.props;\n const title = this.props.title || statusCodes[statusCode] || \"An unexpected error has occurred\";\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n style: styles.error,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(_head.default, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"title\", {\n children: statusCode ? statusCode + \": \" + title : \"Application error: a client-side exception has occurred\"\n })\n }),\n /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n style: styles.desc,\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"style\", {\n dangerouslySetInnerHTML: {\n /* CSS minified from\n body { margin: 0; color: #000; background: #fff; }\n .next-error-h1 {\n border-right: 1px solid rgba(0, 0, 0, .3);\n }\n\n ${\n withDarkMode\n ? `@media (prefers-color-scheme: dark) {\n body { color: #fff; background: #000; }\n .next-error-h1 {\n border-right: 1px solid rgba(255, 255, 255, .3);\n }\n }`\n : ''\n }\n */ __html: \"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\" + (withDarkMode ? \"@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\" : \"\")\n }\n }),\n statusCode ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"h1\", {\n className: \"next-error-h1\",\n style: styles.h1,\n children: statusCode\n }) : null,\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n style: styles.wrap,\n children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"h2\", {\n style: styles.h2,\n children: [\n this.props.title || statusCode ? title : /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n children: \"Application error: a client-side exception has occurred (see the browser console for more information)\"\n }),\n \".\"\n ]\n })\n })\n ]\n })\n ]\n });\n }\n}\nError.displayName = \"ErrorPage\";\nError.getInitialProps = _getInitialProps;\nError.origGetInitialProps = _getInitialProps;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=_error.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsMkJBQTJCQyxtQkFBT0EsQ0FBQyw0R0FBeUM7QUFDbEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsOERBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCx5QkFBeUJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsNENBQU87QUFDdkUsTUFBTUksUUFBUSxXQUFXLEdBQUdMLHlCQUF5QkksQ0FBQyxDQUFDSCxtQkFBT0EsQ0FBQyx1RUFBb0I7QUFDbkYsTUFBTUssY0FBYztJQUNoQixLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0FBQ1Q7QUFDQSxTQUFTQyxpQkFBaUJDLEtBQUs7SUFDM0IsSUFBSSxFQUFFQyxHQUFHLEVBQUVDLEdBQUcsRUFBRSxHQUFHRjtJQUNuQixNQUFNRyxhQUFhRixPQUFPQSxJQUFJRSxVQUFVLEdBQUdGLElBQUlFLFVBQVUsR0FBR0QsTUFBTUEsSUFBSUMsVUFBVSxHQUFHO0lBQ25GLE9BQU87UUFDSEE7SUFDSjtBQUNKO0FBQ0EsTUFBTUMsU0FBUztJQUNYQyxPQUFPO1FBQ0gsMEZBQTBGO1FBQzFGQyxZQUFZO1FBQ1pDLFFBQVE7UUFDUkMsV0FBVztRQUNYQyxTQUFTO1FBQ1RDLGVBQWU7UUFDZkMsWUFBWTtRQUNaQyxnQkFBZ0I7SUFDcEI7SUFDQUMsTUFBTTtRQUNGQyxZQUFZO0lBQ2hCO0lBQ0FDLElBQUk7UUFDQU4sU0FBUztRQUNUTyxRQUFRO1FBQ1JDLGNBQWM7UUFDZEMsVUFBVTtRQUNWQyxZQUFZO1FBQ1pDLGVBQWU7SUFDbkI7SUFDQUMsSUFBSTtRQUNBSCxVQUFVO1FBQ1ZDLFlBQVk7UUFDWkwsWUFBWTtJQUNoQjtJQUNBUSxNQUFNO1FBQ0ZiLFNBQVM7SUFDYjtBQUNKO0FBQ0EsTUFBTWxCLGNBQWNJLE9BQU80QixPQUFPLENBQUNDLFNBQVM7SUFDeENDLFNBQVM7UUFDTCxNQUFNLEVBQUV0QixVQUFVLEVBQUV1QixlQUFlLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQ0MsS0FBSztRQUN0RCxNQUFNQyxRQUFRLElBQUksQ0FBQ0QsS0FBSyxDQUFDQyxLQUFLLElBQUk5QixXQUFXLENBQUNLLFdBQVcsSUFBSTtRQUM3RCxPQUFxQixXQUFILEdBQUksSUFBR1QsWUFBWW1DLElBQUksRUFBRSxPQUFPO1lBQzlDQyxPQUFPMUIsT0FBT0MsS0FBSztZQUNuQjBCLFVBQVU7Z0JBQ04sV0FBVyxHQUFJLElBQUdyQyxZQUFZc0MsR0FBRyxFQUFFbkMsTUFBTTBCLE9BQU8sRUFBRTtvQkFDOUNRLFVBQXdCLFdBQUgsR0FBSSxJQUFHckMsWUFBWXNDLEdBQUcsRUFBRSxTQUFTO3dCQUNsREQsVUFBVTVCLGFBQWFBLGFBQWEsT0FBT3lCLFFBQVE7b0JBQ3ZEO2dCQUNKO2dCQUNBLFdBQVcsR0FBSSxJQUFHbEMsWUFBWW1DLElBQUksRUFBRSxPQUFPO29CQUN2Q0MsT0FBTzFCLE9BQU9TLElBQUk7b0JBQ2xCa0IsVUFBVTt3QkFDTixXQUFXLEdBQUksSUFBR3JDLFlBQVlzQyxHQUFHLEVBQUUsU0FBUzs0QkFDeENDLHlCQUF5QjtnQ0FDckI7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFnQmpCLEdBQUdDLFFBQVEsbUdBQW9HUixDQUFBQSxlQUFlLG9JQUFvSSxFQUFDOzRCQUN0UDt3QkFDSjt3QkFDQXZCLGFBQTJCLFdBQUgsR0FBSSxJQUFHVCxZQUFZc0MsR0FBRyxFQUFFLE1BQU07NEJBQ2xERyxXQUFXOzRCQUNYTCxPQUFPMUIsT0FBT1csRUFBRTs0QkFDaEJnQixVQUFVNUI7d0JBQ2QsS0FBSzt3QkFDTCxXQUFXLEdBQUksSUFBR1QsWUFBWXNDLEdBQUcsRUFBRSxPQUFPOzRCQUN0Q0YsT0FBTzFCLE9BQU9rQixJQUFJOzRCQUNsQlMsVUFBd0IsV0FBSCxHQUFJLElBQUdyQyxZQUFZbUMsSUFBSSxFQUFFLE1BQU07Z0NBQ2hEQyxPQUFPMUIsT0FBT2lCLEVBQUU7Z0NBQ2hCVSxVQUFVO29DQUNOLElBQUksQ0FBQ0osS0FBSyxDQUFDQyxLQUFLLElBQUl6QixhQUFheUIsUUFBc0IsV0FBSCxHQUFJLElBQUdsQyxZQUFZc0MsR0FBRyxFQUFFdEMsWUFBWTBDLFFBQVEsRUFBRTt3Q0FDOUZMLFVBQVU7b0NBQ2Q7b0NBQ0E7aUNBQ0g7NEJBQ0w7d0JBQ0o7cUJBQ0g7Z0JBQ0w7YUFDSDtRQUNMO0lBQ0o7QUFDSjtBQUNBeEMsTUFBTThDLFdBQVcsR0FBRztBQUNwQjlDLE1BQU0rQyxlQUFlLEdBQUd2QztBQUN4QlIsTUFBTWdELG1CQUFtQixHQUFHeEM7QUFFNUIsSUFBSSxDQUFDLE9BQU9aLFFBQVFvQyxPQUFPLEtBQUssY0FBZSxPQUFPcEMsUUFBUW9DLE9BQU8sS0FBSyxZQUFZcEMsUUFBUW9DLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3BDLFFBQVFvQyxPQUFPLENBQUNpQixVQUFVLEtBQUssYUFBYTtJQUNyS3ZELE9BQU9DLGNBQWMsQ0FBQ0MsUUFBUW9DLE9BQU8sRUFBRSxjQUFjO1FBQUVuQyxPQUFPO0lBQUs7SUFDbkVILE9BQU93RCxNQUFNLENBQUN0RCxRQUFRb0MsT0FBTyxFQUFFcEM7SUFDL0J1RCxPQUFPdkQsT0FBTyxHQUFHQSxRQUFRb0MsT0FBTztBQUNsQyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3BhZ2VzL19lcnJvci5qcz8xOGYyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX2pzeHJ1bnRpbWUgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfaGVhZCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4uL3NoYXJlZC9saWIvaGVhZFwiKSk7XG5jb25zdCBzdGF0dXNDb2RlcyA9IHtcbiAgICA0MDA6IFwiQmFkIFJlcXVlc3RcIixcbiAgICA0MDQ6IFwiVGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBmb3VuZFwiLFxuICAgIDQwNTogXCJNZXRob2QgTm90IEFsbG93ZWRcIixcbiAgICA1MDA6IFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCJcbn07XG5mdW5jdGlvbiBfZ2V0SW5pdGlhbFByb3BzKHBhcmFtKSB7XG4gICAgbGV0IHsgcmVzLCBlcnIgfSA9IHBhcmFtO1xuICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXMgJiYgcmVzLnN0YXR1c0NvZGUgPyByZXMuc3RhdHVzQ29kZSA6IGVyciA/IGVyci5zdGF0dXNDb2RlIDogNDA0O1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1c0NvZGVcbiAgICB9O1xufVxuY29uc3Qgc3R5bGVzID0ge1xuICAgIGVycm9yOiB7XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvbW9kZXJuLW5vcm1hbGl6ZS9ibG9iL21haW4vbW9kZXJuLW5vcm1hbGl6ZS5jc3MjTDM4LUw1MlxuICAgICAgICBmb250RmFtaWx5OiAnc3lzdGVtLXVpLFwiU2Vnb2UgVUlcIixSb2JvdG8sSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWYsXCJBcHBsZSBDb2xvciBFbW9qaVwiLFwiU2Vnb2UgVUkgRW1vamlcIicsXG4gICAgICAgIGhlaWdodDogXCIxMDB2aFwiLFxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIlxuICAgIH0sXG4gICAgZGVzYzoge1xuICAgICAgICBsaW5lSGVpZ2h0OiBcIjQ4cHhcIlxuICAgIH0sXG4gICAgaDE6IHtcbiAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIixcbiAgICAgICAgbWFyZ2luOiBcIjAgMjBweCAwIDBcIixcbiAgICAgICAgcGFkZGluZ1JpZ2h0OiAyMyxcbiAgICAgICAgZm9udFNpemU6IDI0LFxuICAgICAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgICAgIHZlcnRpY2FsQWxpZ246IFwidG9wXCJcbiAgICB9LFxuICAgIGgyOiB7XG4gICAgICAgIGZvbnRTaXplOiAxNCxcbiAgICAgICAgZm9udFdlaWdodDogNDAwLFxuICAgICAgICBsaW5lSGVpZ2h0OiBcIjI4cHhcIlxuICAgIH0sXG4gICAgd3JhcDoge1xuICAgICAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiXG4gICAgfVxufTtcbmNsYXNzIEVycm9yIGV4dGVuZHMgX3JlYWN0LmRlZmF1bHQuQ29tcG9uZW50IHtcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgd2l0aERhcmtNb2RlID0gdHJ1ZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnByb3BzLnRpdGxlIHx8IHN0YXR1c0NvZGVzW3N0YXR1c0NvZGVdIHx8IFwiQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJyZWRcIjtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIHN0eWxlOiBzdHlsZXMuZXJyb3IsXG4gICAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2hlYWQuZGVmYXVsdCwge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcInRpdGxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBzdGF0dXNDb2RlID8gc3RhdHVzQ29kZSArIFwiOiBcIiArIHRpdGxlIDogXCJBcHBsaWNhdGlvbiBlcnJvcjogYSBjbGllbnQtc2lkZSBleGNlcHRpb24gaGFzIG9jY3VycmVkXCJcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBzdHlsZXMuZGVzYyxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJzdHlsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ1NTIG1pbmlmaWVkIGZyb21cbiAgICAgICAgICAgICAgICBib2R5IHsgbWFyZ2luOiAwOyBjb2xvcjogIzAwMDsgYmFja2dyb3VuZDogI2ZmZjsgfVxuICAgICAgICAgICAgICAgIC5uZXh0LWVycm9yLWgxIHtcbiAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgLjMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICR7XG4gICAgICAgICAgICAgICAgICB3aXRoRGFya01vZGVcbiAgICAgICAgICAgICAgICAgICAgPyBgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgICAgICAgICAgYm9keSB7IGNvbG9yOiAjZmZmOyBiYWNrZ3JvdW5kOiAjMDAwOyB9XG4gICAgICAgICAgICAgICAgICAubmV4dC1lcnJvci1oMSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjMpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAqLyBfX2h0bWw6IFwiYm9keXtjb2xvcjojMDAwO2JhY2tncm91bmQ6I2ZmZjttYXJnaW46MH0ubmV4dC1lcnJvci1oMXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfVwiICsgKHdpdGhEYXJrTW9kZSA/IFwiQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXtib2R5e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojMDAwfS5uZXh0LWVycm9yLWgxe2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMyl9fVwiIDogXCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGUgPyAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKFwiaDFcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJuZXh0LWVycm9yLWgxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy5oMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogc3RhdHVzQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy53cmFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3hzKShcImgyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHN0eWxlcy5oMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudGl0bGUgfHwgc3RhdHVzQ29kZSA/IHRpdGxlIDogLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShfanN4cnVudGltZS5GcmFnbWVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIkFwcGxpY2F0aW9uIGVycm9yOiBhIGNsaWVudC1zaWRlIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQgKHNlZSB0aGUgYnJvd3NlciBjb25zb2xlIGZvciBtb3JlIGluZm9ybWF0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkVycm9yLmRpc3BsYXlOYW1lID0gXCJFcnJvclBhZ2VcIjtcbkVycm9yLmdldEluaXRpYWxQcm9wcyA9IF9nZXRJbml0aWFsUHJvcHM7XG5FcnJvci5vcmlnR2V0SW5pdGlhbFByb3BzID0gX2dldEluaXRpYWxQcm9wcztcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X2Vycm9yLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJFcnJvciIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfanN4cnVudGltZSIsIl9yZWFjdCIsIl8iLCJfaGVhZCIsInN0YXR1c0NvZGVzIiwiX2dldEluaXRpYWxQcm9wcyIsInBhcmFtIiwicmVzIiwiZXJyIiwic3RhdHVzQ29kZSIsInN0eWxlcyIsImVycm9yIiwiZm9udEZhbWlseSIsImhlaWdodCIsInRleHRBbGlnbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiZGVzYyIsImxpbmVIZWlnaHQiLCJoMSIsIm1hcmdpbiIsInBhZGRpbmdSaWdodCIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsInZlcnRpY2FsQWxpZ24iLCJoMiIsIndyYXAiLCJkZWZhdWx0IiwiQ29tcG9uZW50IiwicmVuZGVyIiwid2l0aERhcmtNb2RlIiwicHJvcHMiLCJ0aXRsZSIsImpzeHMiLCJzdHlsZSIsImNoaWxkcmVuIiwianN4IiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJfX2h0bWwiLCJjbGFzc05hbWUiLCJGcmFnbWVudCIsImRpc3BsYXlOYW1lIiwiZ2V0SW5pdGlhbFByb3BzIiwib3JpZ0dldEluaXRpYWxQcm9wcyIsIl9fZXNNb2R1bGUiLCJhc3NpZ24iLCJtb2R1bGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/pages/_error.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js": +/*!*************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js ***! + \*************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"AmpStateContext\", ({\n enumerable: true,\n get: function() {\n return AmpStateContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst AmpStateContext = _react.default.createContext({});\nif (true) {\n AmpStateContext.displayName = \"AmpStateContext\";\n} //# sourceMappingURL=amp-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYW1wLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILG1EQUFrRDtJQUM5Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsNEdBQXlDO0FBQ2xGLE1BQU1DLFNBQVMsV0FBVyxHQUFHRix5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsNENBQU87QUFDdkUsTUFBTUYsa0JBQWtCRyxPQUFPRSxPQUFPLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0FBQ3RELElBQUlDLElBQXFDLEVBQUU7SUFDdkNQLGdCQUFnQlEsV0FBVyxHQUFHO0FBQ2xDLEVBRUEsc0RBQXNEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hbXAtY29udGV4dC5zaGFyZWQtcnVudGltZS5qcz85OGI3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQW1wU3RhdGVDb250ZXh0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBbXBTdGF0ZUNvbnRleHQ7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgQW1wU3RhdGVDb250ZXh0ID0gX3JlYWN0LmRlZmF1bHQuY3JlYXRlQ29udGV4dCh7fSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgQW1wU3RhdGVDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJBbXBTdGF0ZUNvbnRleHRcIjtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW1wLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkFtcFN0YXRlQ29udGV4dCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfcmVhY3QiLCJfIiwiZGVmYXVsdCIsImNyZWF0ZUNvbnRleHQiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/amp-mode.js": +/*!*******************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/amp-mode.js ***! + \*******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isInAmpMode\", ({\n enumerable: true,\n get: function() {\n return isInAmpMode;\n }\n}));\nfunction isInAmpMode(param) {\n let { ampFirst = false, hybrid = false, hasQuery = false } = param === void 0 ? {} : param;\n return ampFirst || hybrid && hasQuery;\n} //# sourceMappingURL=amp-mode.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYW1wLW1vZGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILCtDQUE4QztJQUMxQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLFlBQVlDLEtBQUs7SUFDdEIsSUFBSSxFQUFFQyxXQUFXLEtBQUssRUFBRUMsU0FBUyxLQUFLLEVBQUVDLFdBQVcsS0FBSyxFQUFFLEdBQUdILFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSUE7SUFDckYsT0FBT0MsWUFBWUMsVUFBVUM7QUFDakMsRUFFQSxvQ0FBb0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2FtcC1tb2RlLmpzPzYyMzEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0luQW1wTW9kZVwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNJbkFtcE1vZGU7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBpc0luQW1wTW9kZShwYXJhbSkge1xuICAgIGxldCB7IGFtcEZpcnN0ID0gZmFsc2UsIGh5YnJpZCA9IGZhbHNlLCBoYXNRdWVyeSA9IGZhbHNlIH0gPSBwYXJhbSA9PT0gdm9pZCAwID8ge30gOiBwYXJhbTtcbiAgICByZXR1cm4gYW1wRmlyc3QgfHwgaHlicmlkICYmIGhhc1F1ZXJ5O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbXAtbW9kZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaXNJbkFtcE1vZGUiLCJwYXJhbSIsImFtcEZpcnN0IiwiaHlicmlkIiwiaGFzUXVlcnkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/amp-mode.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js": +/*!********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js ***! + \********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n AppRouterContext: function() {\n return AppRouterContext;\n },\n LayoutRouterContext: function() {\n return LayoutRouterContext;\n },\n GlobalLayoutRouterContext: function() {\n return GlobalLayoutRouterContext;\n },\n TemplateContext: function() {\n return TemplateContext;\n },\n MissingSlotContext: function() {\n return MissingSlotContext;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst AppRouterContext = _react.default.createContext(null);\nconst LayoutRouterContext = _react.default.createContext(null);\nconst GlobalLayoutRouterContext = _react.default.createContext(null);\nconst TemplateContext = _react.default.createContext(null);\nif (true) {\n AppRouterContext.displayName = \"AppRouterContext\";\n LayoutRouterContext.displayName = \"LayoutRouterContext\";\n GlobalLayoutRouterContext.displayName = \"GlobalLayoutRouterContext\";\n TemplateContext.displayName = \"TemplateContext\";\n}\nconst MissingSlotContext = _react.default.createContext(new Set()); //# sourceMappingURL=app-router-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJxREFFYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQU1OO0FBQ0EsU0FBU00sUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVosT0FBT0MsY0FBYyxDQUFDVSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFSLFNBQVM7SUFDYkcsa0JBQWtCO1FBQ2QsT0FBT0E7SUFDWDtJQUNBQyxxQkFBcUI7UUFDakIsT0FBT0E7SUFDWDtJQUNBQywyQkFBMkI7UUFDdkIsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0lBQ0FDLG9CQUFvQjtRQUNoQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTywyQkFBMkJDLG1CQUFPQSxDQUFDLDRHQUF5QztBQUNsRixNQUFNQyxTQUFTLFdBQVcsR0FBR0YseUJBQXlCRyxDQUFDLENBQUNGLG1CQUFPQSxDQUFDLDRDQUFPO0FBQ3ZFLE1BQU1aLG1CQUFtQmEsT0FBT0UsT0FBTyxDQUFDQyxhQUFhLENBQUM7QUFDdEQsTUFBTWYsc0JBQXNCWSxPQUFPRSxPQUFPLENBQUNDLGFBQWEsQ0FBQztBQUN6RCxNQUFNZCw0QkFBNEJXLE9BQU9FLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDO0FBQy9ELE1BQU1iLGtCQUFrQlUsT0FBT0UsT0FBTyxDQUFDQyxhQUFhLENBQUM7QUFDckQsSUFBSUMsSUFBcUMsRUFBRTtJQUN2Q2pCLGlCQUFpQmtCLFdBQVcsR0FBRztJQUMvQmpCLG9CQUFvQmlCLFdBQVcsR0FBRztJQUNsQ2hCLDBCQUEwQmdCLFdBQVcsR0FBRztJQUN4Q2YsZ0JBQWdCZSxXQUFXLEdBQUc7QUFDbEM7QUFDQSxNQUFNZCxxQkFBcUJTLE9BQU9FLE9BQU8sQ0FBQ0MsYUFBYSxDQUFDLElBQUlHLFFBRTVELDZEQUE2RCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLmpzP2MwYTEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgQXBwUm91dGVyQ29udGV4dDogbnVsbCxcbiAgICBMYXlvdXRSb3V0ZXJDb250ZXh0OiBudWxsLFxuICAgIEdsb2JhbExheW91dFJvdXRlckNvbnRleHQ6IG51bGwsXG4gICAgVGVtcGxhdGVDb250ZXh0OiBudWxsLFxuICAgIE1pc3NpbmdTbG90Q29udGV4dDogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBBcHBSb3V0ZXJDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFwcFJvdXRlckNvbnRleHQ7XG4gICAgfSxcbiAgICBMYXlvdXRSb3V0ZXJDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIExheW91dFJvdXRlckNvbnRleHQ7XG4gICAgfSxcbiAgICBHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEdsb2JhbExheW91dFJvdXRlckNvbnRleHQ7XG4gICAgfSxcbiAgICBUZW1wbGF0ZUNvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gVGVtcGxhdGVDb250ZXh0O1xuICAgIH0sXG4gICAgTWlzc2luZ1Nsb3RDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1pc3NpbmdTbG90Q29udGV4dDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfcmVhY3QgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBBcHBSb3V0ZXJDb250ZXh0ID0gX3JlYWN0LmRlZmF1bHQuY3JlYXRlQ29udGV4dChudWxsKTtcbmNvbnN0IExheW91dFJvdXRlckNvbnRleHQgPSBfcmVhY3QuZGVmYXVsdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuY29uc3QgR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCA9IF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5jb25zdCBUZW1wbGF0ZUNvbnRleHQgPSBfcmVhY3QuZGVmYXVsdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIEFwcFJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSBcIkFwcFJvdXRlckNvbnRleHRcIjtcbiAgICBMYXlvdXRSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJMYXlvdXRSb3V0ZXJDb250ZXh0XCI7XG4gICAgR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dFwiO1xuICAgIFRlbXBsYXRlQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiVGVtcGxhdGVDb250ZXh0XCI7XG59XG5jb25zdCBNaXNzaW5nU2xvdENvbnRleHQgPSBfcmVhY3QuZGVmYXVsdC5jcmVhdGVDb250ZXh0KG5ldyBTZXQoKSk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJBcHBSb3V0ZXJDb250ZXh0IiwiTGF5b3V0Um91dGVyQ29udGV4dCIsIkdsb2JhbExheW91dFJvdXRlckNvbnRleHQiLCJUZW1wbGF0ZUNvbnRleHQiLCJNaXNzaW5nU2xvdENvbnRleHQiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiXyIsImRlZmF1bHQiLCJjcmVhdGVDb250ZXh0IiwicHJvY2VzcyIsImRpc3BsYXlOYW1lIiwiU2V0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/bloom-filter.js": +/*!***********************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/bloom-filter.js ***! + \***********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// minimal implementation MurmurHash2 hash function\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"BloomFilter\", ({\n enumerable: true,\n get: function() {\n return BloomFilter;\n }\n}));\nfunction murmurhash2(str) {\n let h = 0;\n for(let i = 0; i < str.length; i++){\n const c = str.charCodeAt(i);\n h = Math.imul(h ^ c, 0x5bd1e995);\n h ^= h >>> 13;\n h = Math.imul(h, 0x5bd1e995);\n }\n return h >>> 0;\n}\n// default to 0.01% error rate as the filter compresses very well\nconst DEFAULT_ERROR_RATE = 0.0001;\nclass BloomFilter {\n static from(items, errorRate) {\n if (errorRate === void 0) errorRate = DEFAULT_ERROR_RATE;\n const filter = new BloomFilter(items.length, errorRate);\n for (const item of items){\n filter.add(item);\n }\n return filter;\n }\n export() {\n const data = {\n numItems: this.numItems,\n errorRate: this.errorRate,\n numBits: this.numBits,\n numHashes: this.numHashes,\n bitArray: this.bitArray\n };\n if (false) {}\n return data;\n }\n import(data) {\n this.numItems = data.numItems;\n this.errorRate = data.errorRate;\n this.numBits = data.numBits;\n this.numHashes = data.numHashes;\n this.bitArray = data.bitArray;\n }\n add(item) {\n const hashValues = this.getHashValues(item);\n hashValues.forEach((hash)=>{\n this.bitArray[hash] = 1;\n });\n }\n contains(item) {\n const hashValues = this.getHashValues(item);\n return hashValues.every((hash)=>this.bitArray[hash]);\n }\n getHashValues(item) {\n const hashValues = [];\n for(let i = 1; i <= this.numHashes; i++){\n const hash = murmurhash2(\"\" + item + i) % this.numBits;\n hashValues.push(hash);\n }\n return hashValues;\n }\n constructor(numItems, errorRate = DEFAULT_ERROR_RATE){\n this.numItems = numItems;\n this.errorRate = errorRate;\n this.numBits = Math.ceil(-(numItems * Math.log(errorRate)) / (Math.log(2) * Math.log(2)));\n this.numHashes = Math.ceil(this.numBits / numItems * Math.log(2));\n this.bitArray = new Array(this.numBits).fill(0);\n }\n} //# sourceMappingURL=bloom-filter.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYmxvb20tZmlsdGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLG1EQUFtRDtBQUN0QztBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsK0NBQThDO0lBQzFDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0MsWUFBWUMsR0FBRztJQUNwQixJQUFJQyxJQUFJO0lBQ1IsSUFBSSxJQUFJQyxJQUFJLEdBQUdBLElBQUlGLElBQUlHLE1BQU0sRUFBRUQsSUFBSTtRQUMvQixNQUFNRSxJQUFJSixJQUFJSyxVQUFVLENBQUNIO1FBQ3pCRCxJQUFJSyxLQUFLQyxJQUFJLENBQUNOLElBQUlHLEdBQUc7UUFDckJILEtBQUtBLE1BQU07UUFDWEEsSUFBSUssS0FBS0MsSUFBSSxDQUFDTixHQUFHO0lBQ3JCO0lBQ0EsT0FBT0EsTUFBTTtBQUNqQjtBQUNBLGlFQUFpRTtBQUNqRSxNQUFNTyxxQkFBcUI7QUFDM0IsTUFBTVY7SUFDRixPQUFPVyxLQUFLQyxLQUFLLEVBQUVDLFNBQVMsRUFBRTtRQUMxQixJQUFJQSxjQUFjLEtBQUssR0FBR0EsWUFBWUg7UUFDdEMsTUFBTUksU0FBUyxJQUFJZCxZQUFZWSxNQUFNUCxNQUFNLEVBQUVRO1FBQzdDLEtBQUssTUFBTUUsUUFBUUgsTUFBTTtZQUNyQkUsT0FBT0UsR0FBRyxDQUFDRDtRQUNmO1FBQ0EsT0FBT0Q7SUFDWDtJQUNBRyxTQUFTO1FBQ0wsTUFBTUMsT0FBTztZQUNUQyxVQUFVLElBQUksQ0FBQ0EsUUFBUTtZQUN2Qk4sV0FBVyxJQUFJLENBQUNBLFNBQVM7WUFDekJPLFNBQVMsSUFBSSxDQUFDQSxPQUFPO1lBQ3JCQyxXQUFXLElBQUksQ0FBQ0EsU0FBUztZQUN6QkMsVUFBVSxJQUFJLENBQUNBLFFBQVE7UUFDM0I7UUFDQSxJQUFJQyxLQUFxQyxFQUFFLEVBUTFDO1FBQ0QsT0FBT0w7SUFDWDtJQUNBZ0IsT0FBT2hCLElBQUksRUFBRTtRQUNULElBQUksQ0FBQ0MsUUFBUSxHQUFHRCxLQUFLQyxRQUFRO1FBQzdCLElBQUksQ0FBQ04sU0FBUyxHQUFHSyxLQUFLTCxTQUFTO1FBQy9CLElBQUksQ0FBQ08sT0FBTyxHQUFHRixLQUFLRSxPQUFPO1FBQzNCLElBQUksQ0FBQ0MsU0FBUyxHQUFHSCxLQUFLRyxTQUFTO1FBQy9CLElBQUksQ0FBQ0MsUUFBUSxHQUFHSixLQUFLSSxRQUFRO0lBQ2pDO0lBQ0FOLElBQUlELElBQUksRUFBRTtRQUNOLE1BQU1vQixhQUFhLElBQUksQ0FBQ0MsYUFBYSxDQUFDckI7UUFDdENvQixXQUFXRSxPQUFPLENBQUMsQ0FBQ0M7WUFDaEIsSUFBSSxDQUFDaEIsUUFBUSxDQUFDZ0IsS0FBSyxHQUFHO1FBQzFCO0lBQ0o7SUFDQUMsU0FBU3hCLElBQUksRUFBRTtRQUNYLE1BQU1vQixhQUFhLElBQUksQ0FBQ0MsYUFBYSxDQUFDckI7UUFDdEMsT0FBT29CLFdBQVdLLEtBQUssQ0FBQyxDQUFDRixPQUFPLElBQUksQ0FBQ2hCLFFBQVEsQ0FBQ2dCLEtBQUs7SUFDdkQ7SUFDQUYsY0FBY3JCLElBQUksRUFBRTtRQUNoQixNQUFNb0IsYUFBYSxFQUFFO1FBQ3JCLElBQUksSUFBSS9CLElBQUksR0FBR0EsS0FBSyxJQUFJLENBQUNpQixTQUFTLEVBQUVqQixJQUFJO1lBQ3BDLE1BQU1rQyxPQUFPckMsWUFBWSxLQUFLYyxPQUFPWCxLQUFLLElBQUksQ0FBQ2dCLE9BQU87WUFDdERlLFdBQVdNLElBQUksQ0FBQ0g7UUFDcEI7UUFDQSxPQUFPSDtJQUNYO0lBQ0FPLFlBQVl2QixRQUFRLEVBQUVOLFlBQVlILGtCQUFrQixDQUFDO1FBQ2pELElBQUksQ0FBQ1MsUUFBUSxHQUFHQTtRQUNoQixJQUFJLENBQUNOLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDTyxPQUFPLEdBQUdaLEtBQUttQyxJQUFJLENBQUMsQ0FBRXhCLENBQUFBLFdBQVdYLEtBQUtvQyxHQUFHLENBQUMvQixVQUFTLElBQU1MLENBQUFBLEtBQUtvQyxHQUFHLENBQUMsS0FBS3BDLEtBQUtvQyxHQUFHLENBQUMsRUFBQztRQUN0RixJQUFJLENBQUN2QixTQUFTLEdBQUdiLEtBQUttQyxJQUFJLENBQUMsSUFBSSxDQUFDdkIsT0FBTyxHQUFHRCxXQUFXWCxLQUFLb0MsR0FBRyxDQUFDO1FBQzlELElBQUksQ0FBQ3RCLFFBQVEsR0FBRyxJQUFJdUIsTUFBTSxJQUFJLENBQUN6QixPQUFPLEVBQUUwQixJQUFJLENBQUM7SUFDakQ7QUFDSixFQUVBLHdDQUF3QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvYmxvb20tZmlsdGVyLmpzPzg1MzgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gbWluaW1hbCBpbXBsZW1lbnRhdGlvbiBNdXJtdXJIYXNoMiBoYXNoIGZ1bmN0aW9uXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkJsb29tRmlsdGVyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBCbG9vbUZpbHRlcjtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIG11cm11cmhhc2gyKHN0cikge1xuICAgIGxldCBoID0gMDtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBoID0gTWF0aC5pbXVsKGggXiBjLCAweDViZDFlOTk1KTtcbiAgICAgICAgaCBePSBoID4+PiAxMztcbiAgICAgICAgaCA9IE1hdGguaW11bChoLCAweDViZDFlOTk1KTtcbiAgICB9XG4gICAgcmV0dXJuIGggPj4+IDA7XG59XG4vLyBkZWZhdWx0IHRvIDAuMDElIGVycm9yIHJhdGUgYXMgdGhlIGZpbHRlciBjb21wcmVzc2VzIHZlcnkgd2VsbFxuY29uc3QgREVGQVVMVF9FUlJPUl9SQVRFID0gMC4wMDAxO1xuY2xhc3MgQmxvb21GaWx0ZXIge1xuICAgIHN0YXRpYyBmcm9tKGl0ZW1zLCBlcnJvclJhdGUpIHtcbiAgICAgICAgaWYgKGVycm9yUmF0ZSA9PT0gdm9pZCAwKSBlcnJvclJhdGUgPSBERUZBVUxUX0VSUk9SX1JBVEU7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ldyBCbG9vbUZpbHRlcihpdGVtcy5sZW5ndGgsIGVycm9yUmF0ZSk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcyl7XG4gICAgICAgICAgICBmaWx0ZXIuYWRkKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuICAgIGV4cG9ydCgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIG51bUl0ZW1zOiB0aGlzLm51bUl0ZW1zLFxuICAgICAgICAgICAgZXJyb3JSYXRlOiB0aGlzLmVycm9yUmF0ZSxcbiAgICAgICAgICAgIG51bUJpdHM6IHRoaXMubnVtQml0cyxcbiAgICAgICAgICAgIG51bUhhc2hlczogdGhpcy5udW1IYXNoZXMsXG4gICAgICAgICAgICBiaXRBcnJheTogdGhpcy5iaXRBcnJheVxuICAgICAgICB9O1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FID09PSBcIm5vZGVqc1wiKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lcnJvclJhdGUgPCBERUZBVUxUX0VSUk9SX1JBVEUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3ppcFNpemUgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL2d6aXAtc2l6ZVwiKS5zeW5jKGZpbHRlckRhdGEpO1xuICAgICAgICAgICAgICAgIGlmIChnemlwU2l6ZSA+IDEwMjQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiQ3JlYXRpbmcgZmlsdGVyIHdpdGggZXJyb3IgcmF0ZSBsZXNzIHRoYW4gMC4xJSAoMC4wMDEpIGNhbiBpbmNyZWFzZSB0aGUgc2l6ZSBkcmFtYXRpY2FsbHkgcHJvY2VlZCB3aXRoIGNhdXRpb24uIFJlY2VpdmVkIGVycm9yIHJhdGUgXCIgKyB0aGlzLmVycm9yUmF0ZSArIFwiIHJlc3VsdGVkIGluIHNpemUgXCIgKyBmaWx0ZXJEYXRhLmxlbmd0aCArIFwiIGJ5dGVzLCBcIiArIGd6aXBTaXplICsgXCIgYnl0ZXMgKGd6aXApXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaW1wb3J0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5udW1JdGVtcyA9IGRhdGEubnVtSXRlbXM7XG4gICAgICAgIHRoaXMuZXJyb3JSYXRlID0gZGF0YS5lcnJvclJhdGU7XG4gICAgICAgIHRoaXMubnVtQml0cyA9IGRhdGEubnVtQml0cztcbiAgICAgICAgdGhpcy5udW1IYXNoZXMgPSBkYXRhLm51bUhhc2hlcztcbiAgICAgICAgdGhpcy5iaXRBcnJheSA9IGRhdGEuYml0QXJyYXk7XG4gICAgfVxuICAgIGFkZChpdGVtKSB7XG4gICAgICAgIGNvbnN0IGhhc2hWYWx1ZXMgPSB0aGlzLmdldEhhc2hWYWx1ZXMoaXRlbSk7XG4gICAgICAgIGhhc2hWYWx1ZXMuZm9yRWFjaCgoaGFzaCk9PntcbiAgICAgICAgICAgIHRoaXMuYml0QXJyYXlbaGFzaF0gPSAxO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29udGFpbnMoaXRlbSkge1xuICAgICAgICBjb25zdCBoYXNoVmFsdWVzID0gdGhpcy5nZXRIYXNoVmFsdWVzKGl0ZW0pO1xuICAgICAgICByZXR1cm4gaGFzaFZhbHVlcy5ldmVyeSgoaGFzaCk9PnRoaXMuYml0QXJyYXlbaGFzaF0pO1xuICAgIH1cbiAgICBnZXRIYXNoVmFsdWVzKGl0ZW0pIHtcbiAgICAgICAgY29uc3QgaGFzaFZhbHVlcyA9IFtdO1xuICAgICAgICBmb3IobGV0IGkgPSAxOyBpIDw9IHRoaXMubnVtSGFzaGVzOyBpKyspe1xuICAgICAgICAgICAgY29uc3QgaGFzaCA9IG11cm11cmhhc2gyKFwiXCIgKyBpdGVtICsgaSkgJSB0aGlzLm51bUJpdHM7XG4gICAgICAgICAgICBoYXNoVmFsdWVzLnB1c2goaGFzaCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc2hWYWx1ZXM7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKG51bUl0ZW1zLCBlcnJvclJhdGUgPSBERUZBVUxUX0VSUk9SX1JBVEUpe1xuICAgICAgICB0aGlzLm51bUl0ZW1zID0gbnVtSXRlbXM7XG4gICAgICAgIHRoaXMuZXJyb3JSYXRlID0gZXJyb3JSYXRlO1xuICAgICAgICB0aGlzLm51bUJpdHMgPSBNYXRoLmNlaWwoLShudW1JdGVtcyAqIE1hdGgubG9nKGVycm9yUmF0ZSkpIC8gKE1hdGgubG9nKDIpICogTWF0aC5sb2coMikpKTtcbiAgICAgICAgdGhpcy5udW1IYXNoZXMgPSBNYXRoLmNlaWwodGhpcy5udW1CaXRzIC8gbnVtSXRlbXMgKiBNYXRoLmxvZygyKSk7XG4gICAgICAgIHRoaXMuYml0QXJyYXkgPSBuZXcgQXJyYXkodGhpcy5udW1CaXRzKS5maWxsKDApO1xuICAgIH1cbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ymxvb20tZmlsdGVyLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJCbG9vbUZpbHRlciIsIm11cm11cmhhc2gyIiwic3RyIiwiaCIsImkiLCJsZW5ndGgiLCJjIiwiY2hhckNvZGVBdCIsIk1hdGgiLCJpbXVsIiwiREVGQVVMVF9FUlJPUl9SQVRFIiwiZnJvbSIsIml0ZW1zIiwiZXJyb3JSYXRlIiwiZmlsdGVyIiwiaXRlbSIsImFkZCIsImV4cG9ydCIsImRhdGEiLCJudW1JdGVtcyIsIm51bUJpdHMiLCJudW1IYXNoZXMiLCJiaXRBcnJheSIsInByb2Nlc3MiLCJlbnYiLCJORVhUX1JVTlRJTUUiLCJmaWx0ZXJEYXRhIiwiSlNPTiIsInN0cmluZ2lmeSIsImd6aXBTaXplIiwicmVxdWlyZSIsInN5bmMiLCJjb25zb2xlIiwid2FybiIsImltcG9ydCIsImhhc2hWYWx1ZXMiLCJnZXRIYXNoVmFsdWVzIiwiZm9yRWFjaCIsImhhc2giLCJjb250YWlucyIsImV2ZXJ5IiwicHVzaCIsImNvbnN0cnVjdG9yIiwiY2VpbCIsImxvZyIsIkFycmF5IiwiZmlsbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/bloom-filter.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/constants.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/constants.js ***! + \********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n MODERN_BROWSERSLIST_TARGET: function() {\n return _modernbrowserslisttarget.default;\n },\n COMPILER_NAMES: function() {\n return COMPILER_NAMES;\n },\n INTERNAL_HEADERS: function() {\n return INTERNAL_HEADERS;\n },\n COMPILER_INDEXES: function() {\n return COMPILER_INDEXES;\n },\n PHASE_EXPORT: function() {\n return PHASE_EXPORT;\n },\n PHASE_PRODUCTION_BUILD: function() {\n return PHASE_PRODUCTION_BUILD;\n },\n PHASE_PRODUCTION_SERVER: function() {\n return PHASE_PRODUCTION_SERVER;\n },\n PHASE_DEVELOPMENT_SERVER: function() {\n return PHASE_DEVELOPMENT_SERVER;\n },\n PHASE_TEST: function() {\n return PHASE_TEST;\n },\n PHASE_INFO: function() {\n return PHASE_INFO;\n },\n PAGES_MANIFEST: function() {\n return PAGES_MANIFEST;\n },\n APP_PATHS_MANIFEST: function() {\n return APP_PATHS_MANIFEST;\n },\n APP_PATH_ROUTES_MANIFEST: function() {\n return APP_PATH_ROUTES_MANIFEST;\n },\n BUILD_MANIFEST: function() {\n return BUILD_MANIFEST;\n },\n APP_BUILD_MANIFEST: function() {\n return APP_BUILD_MANIFEST;\n },\n FUNCTIONS_CONFIG_MANIFEST: function() {\n return FUNCTIONS_CONFIG_MANIFEST;\n },\n SUBRESOURCE_INTEGRITY_MANIFEST: function() {\n return SUBRESOURCE_INTEGRITY_MANIFEST;\n },\n NEXT_FONT_MANIFEST: function() {\n return NEXT_FONT_MANIFEST;\n },\n EXPORT_MARKER: function() {\n return EXPORT_MARKER;\n },\n EXPORT_DETAIL: function() {\n return EXPORT_DETAIL;\n },\n PRERENDER_MANIFEST: function() {\n return PRERENDER_MANIFEST;\n },\n ROUTES_MANIFEST: function() {\n return ROUTES_MANIFEST;\n },\n IMAGES_MANIFEST: function() {\n return IMAGES_MANIFEST;\n },\n SERVER_FILES_MANIFEST: function() {\n return SERVER_FILES_MANIFEST;\n },\n DEV_CLIENT_PAGES_MANIFEST: function() {\n return DEV_CLIENT_PAGES_MANIFEST;\n },\n MIDDLEWARE_MANIFEST: function() {\n return MIDDLEWARE_MANIFEST;\n },\n DEV_MIDDLEWARE_MANIFEST: function() {\n return DEV_MIDDLEWARE_MANIFEST;\n },\n REACT_LOADABLE_MANIFEST: function() {\n return REACT_LOADABLE_MANIFEST;\n },\n FONT_MANIFEST: function() {\n return FONT_MANIFEST;\n },\n SERVER_DIRECTORY: function() {\n return SERVER_DIRECTORY;\n },\n CONFIG_FILES: function() {\n return CONFIG_FILES;\n },\n BUILD_ID_FILE: function() {\n return BUILD_ID_FILE;\n },\n BLOCKED_PAGES: function() {\n return BLOCKED_PAGES;\n },\n CLIENT_PUBLIC_FILES_PATH: function() {\n return CLIENT_PUBLIC_FILES_PATH;\n },\n CLIENT_STATIC_FILES_PATH: function() {\n return CLIENT_STATIC_FILES_PATH;\n },\n STRING_LITERAL_DROP_BUNDLE: function() {\n return STRING_LITERAL_DROP_BUNDLE;\n },\n NEXT_BUILTIN_DOCUMENT: function() {\n return NEXT_BUILTIN_DOCUMENT;\n },\n BARREL_OPTIMIZATION_PREFIX: function() {\n return BARREL_OPTIMIZATION_PREFIX;\n },\n CLIENT_REFERENCE_MANIFEST: function() {\n return CLIENT_REFERENCE_MANIFEST;\n },\n SERVER_REFERENCE_MANIFEST: function() {\n return SERVER_REFERENCE_MANIFEST;\n },\n MIDDLEWARE_BUILD_MANIFEST: function() {\n return MIDDLEWARE_BUILD_MANIFEST;\n },\n MIDDLEWARE_REACT_LOADABLE_MANIFEST: function() {\n return MIDDLEWARE_REACT_LOADABLE_MANIFEST;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN;\n },\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_MAIN_APP;\n },\n APP_CLIENT_INTERNALS: function() {\n return APP_CLIENT_INTERNALS;\n },\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH: function() {\n return CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH;\n },\n CLIENT_STATIC_FILES_RUNTIME_AMP: function() {\n return CLIENT_STATIC_FILES_RUNTIME_AMP;\n },\n CLIENT_STATIC_FILES_RUNTIME_WEBPACK: function() {\n return CLIENT_STATIC_FILES_RUNTIME_WEBPACK;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS;\n },\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL: function() {\n return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\n },\n EDGE_RUNTIME_WEBPACK: function() {\n return EDGE_RUNTIME_WEBPACK;\n },\n STATIC_PROPS_ID: function() {\n return STATIC_PROPS_ID;\n },\n SERVER_PROPS_ID: function() {\n return SERVER_PROPS_ID;\n },\n GOOGLE_FONT_PROVIDER: function() {\n return GOOGLE_FONT_PROVIDER;\n },\n OPTIMIZED_FONT_PROVIDERS: function() {\n return OPTIMIZED_FONT_PROVIDERS;\n },\n DEFAULT_SERIF_FONT: function() {\n return DEFAULT_SERIF_FONT;\n },\n DEFAULT_SANS_SERIF_FONT: function() {\n return DEFAULT_SANS_SERIF_FONT;\n },\n STATIC_STATUS_PAGES: function() {\n return STATIC_STATUS_PAGES;\n },\n TRACE_OUTPUT_VERSION: function() {\n return TRACE_OUTPUT_VERSION;\n },\n TURBO_TRACE_DEFAULT_MEMORY_LIMIT: function() {\n return TURBO_TRACE_DEFAULT_MEMORY_LIMIT;\n },\n RSC_MODULE_TYPES: function() {\n return RSC_MODULE_TYPES;\n },\n EDGE_UNSUPPORTED_NODE_APIS: function() {\n return EDGE_UNSUPPORTED_NODE_APIS;\n },\n SYSTEM_ENTRYPOINTS: function() {\n return SYSTEM_ENTRYPOINTS;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _modernbrowserslisttarget = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./modern-browserslist-target */ \"./node_modules/next/dist/shared/lib/modern-browserslist-target.js\"));\nconst COMPILER_NAMES = {\n client: \"client\",\n server: \"server\",\n edgeServer: \"edge-server\"\n};\nconst INTERNAL_HEADERS = [\n \"x-invoke-error\",\n \"x-invoke-output\",\n \"x-invoke-path\",\n \"x-invoke-query\",\n \"x-invoke-status\",\n \"x-middleware-invoke\"\n];\nconst COMPILER_INDEXES = {\n [COMPILER_NAMES.client]: 0,\n [COMPILER_NAMES.server]: 1,\n [COMPILER_NAMES.edgeServer]: 2\n};\nconst PHASE_EXPORT = \"phase-export\";\nconst PHASE_PRODUCTION_BUILD = \"phase-production-build\";\nconst PHASE_PRODUCTION_SERVER = \"phase-production-server\";\nconst PHASE_DEVELOPMENT_SERVER = \"phase-development-server\";\nconst PHASE_TEST = \"phase-test\";\nconst PHASE_INFO = \"phase-info\";\nconst PAGES_MANIFEST = \"pages-manifest.json\";\nconst APP_PATHS_MANIFEST = \"app-paths-manifest.json\";\nconst APP_PATH_ROUTES_MANIFEST = \"app-path-routes-manifest.json\";\nconst BUILD_MANIFEST = \"build-manifest.json\";\nconst APP_BUILD_MANIFEST = \"app-build-manifest.json\";\nconst FUNCTIONS_CONFIG_MANIFEST = \"functions-config-manifest.json\";\nconst SUBRESOURCE_INTEGRITY_MANIFEST = \"subresource-integrity-manifest\";\nconst NEXT_FONT_MANIFEST = \"next-font-manifest\";\nconst EXPORT_MARKER = \"export-marker.json\";\nconst EXPORT_DETAIL = \"export-detail.json\";\nconst PRERENDER_MANIFEST = \"prerender-manifest.json\";\nconst ROUTES_MANIFEST = \"routes-manifest.json\";\nconst IMAGES_MANIFEST = \"images-manifest.json\";\nconst SERVER_FILES_MANIFEST = \"required-server-files.json\";\nconst DEV_CLIENT_PAGES_MANIFEST = \"_devPagesManifest.json\";\nconst MIDDLEWARE_MANIFEST = \"middleware-manifest.json\";\nconst DEV_MIDDLEWARE_MANIFEST = \"_devMiddlewareManifest.json\";\nconst REACT_LOADABLE_MANIFEST = \"react-loadable-manifest.json\";\nconst FONT_MANIFEST = \"font-manifest.json\";\nconst SERVER_DIRECTORY = \"server\";\nconst CONFIG_FILES = [\n \"next.config.js\",\n \"next.config.mjs\"\n];\nconst BUILD_ID_FILE = \"BUILD_ID\";\nconst BLOCKED_PAGES = [\n \"/_document\",\n \"/_app\",\n \"/_error\"\n];\nconst CLIENT_PUBLIC_FILES_PATH = \"public\";\nconst CLIENT_STATIC_FILES_PATH = \"static\";\nconst STRING_LITERAL_DROP_BUNDLE = \"__NEXT_DROP_CLIENT_FILE__\";\nconst NEXT_BUILTIN_DOCUMENT = \"__NEXT_BUILTIN_DOCUMENT__\";\nconst BARREL_OPTIMIZATION_PREFIX = \"__barrel_optimize__\";\nconst CLIENT_REFERENCE_MANIFEST = \"client-reference-manifest\";\nconst SERVER_REFERENCE_MANIFEST = \"server-reference-manifest\";\nconst MIDDLEWARE_BUILD_MANIFEST = \"middleware-build-manifest\";\nconst MIDDLEWARE_REACT_LOADABLE_MANIFEST = \"middleware-react-loadable-manifest\";\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN = \"main\";\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = \"\" + CLIENT_STATIC_FILES_RUNTIME_MAIN + \"-app\";\nconst APP_CLIENT_INTERNALS = \"app-pages-internals\";\nconst CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = \"react-refresh\";\nconst CLIENT_STATIC_FILES_RUNTIME_AMP = \"amp\";\nconst CLIENT_STATIC_FILES_RUNTIME_WEBPACK = \"webpack\";\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS = \"polyfills\";\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(CLIENT_STATIC_FILES_RUNTIME_POLYFILLS);\n_c = CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\nconst EDGE_RUNTIME_WEBPACK = \"edge-runtime-webpack\";\nconst STATIC_PROPS_ID = \"__N_SSG\";\nconst SERVER_PROPS_ID = \"__N_SSP\";\nconst GOOGLE_FONT_PROVIDER = \"https://fonts.googleapis.com/\";\nconst OPTIMIZED_FONT_PROVIDERS = [\n {\n url: GOOGLE_FONT_PROVIDER,\n preconnect: \"https://fonts.gstatic.com\"\n },\n {\n url: \"https://use.typekit.net\",\n preconnect: \"https://use.typekit.net\"\n }\n];\nconst DEFAULT_SERIF_FONT = {\n name: \"Times New Roman\",\n xAvgCharWidth: 821,\n azAvgWidth: 854.3953488372093,\n unitsPerEm: 2048\n};\nconst DEFAULT_SANS_SERIF_FONT = {\n name: \"Arial\",\n xAvgCharWidth: 904,\n azAvgWidth: 934.5116279069767,\n unitsPerEm: 2048\n};\nconst STATIC_STATUS_PAGES = [\n \"/500\"\n];\nconst TRACE_OUTPUT_VERSION = 1;\nconst TURBO_TRACE_DEFAULT_MEMORY_LIMIT = 6000;\nconst RSC_MODULE_TYPES = {\n client: \"client\",\n server: \"server\"\n};\nconst EDGE_UNSUPPORTED_NODE_APIS = [\n \"clearImmediate\",\n \"setImmediate\",\n \"BroadcastChannel\",\n \"ByteLengthQueuingStrategy\",\n \"CompressionStream\",\n \"CountQueuingStrategy\",\n \"DecompressionStream\",\n \"DomException\",\n \"MessageChannel\",\n \"MessageEvent\",\n \"MessagePort\",\n \"ReadableByteStreamController\",\n \"ReadableStreamBYOBRequest\",\n \"ReadableStreamDefaultController\",\n \"TransformStreamDefaultController\",\n \"WritableStreamDefaultController\"\n];\nconst SYSTEM_ENTRYPOINTS = new Set([\n CLIENT_STATIC_FILES_RUNTIME_MAIN,\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH,\n CLIENT_STATIC_FILES_RUNTIME_AMP,\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP\n]);\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=constants.js.map\nvar _c;\n$RefreshReg$(_c, \"CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBZ0VOO0FBQ0EsU0FBU2dFLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUl0RSxPQUFPQyxjQUFjLENBQUNvRSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFsRSxTQUFTO0lBQ2JHLDRCQUE0QjtRQUN4QixPQUFPcUUsMEJBQTBCQyxPQUFPO0lBQzVDO0lBQ0FyRSxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLGtCQUFrQjtRQUNkLE9BQU9BO0lBQ1g7SUFDQUMsa0JBQWtCO1FBQ2QsT0FBT0E7SUFDWDtJQUNBQyxjQUFjO1FBQ1YsT0FBT0E7SUFDWDtJQUNBQyx3QkFBd0I7UUFDcEIsT0FBT0E7SUFDWDtJQUNBQyx5QkFBeUI7UUFDckIsT0FBT0E7SUFDWDtJQUNBQywwQkFBMEI7UUFDdEIsT0FBT0E7SUFDWDtJQUNBQyxZQUFZO1FBQ1IsT0FBT0E7SUFDWDtJQUNBQyxZQUFZO1FBQ1IsT0FBT0E7SUFDWDtJQUNBQyxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLG9CQUFvQjtRQUNoQixPQUFPQTtJQUNYO0lBQ0FDLDBCQUEwQjtRQUN0QixPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7SUFDQUMsMkJBQTJCO1FBQ3ZCLE9BQU9BO0lBQ1g7SUFDQUMsZ0NBQWdDO1FBQzVCLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7SUFDQUMsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7SUFDQUMsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0lBQ0FDLHVCQUF1QjtRQUNuQixPQUFPQTtJQUNYO0lBQ0FDLDJCQUEyQjtRQUN2QixPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLGVBQWU7UUFDWCxPQUFPQTtJQUNYO0lBQ0FDLGtCQUFrQjtRQUNkLE9BQU9BO0lBQ1g7SUFDQUMsY0FBYztRQUNWLE9BQU9BO0lBQ1g7SUFDQUMsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsMEJBQTBCO1FBQ3RCLE9BQU9BO0lBQ1g7SUFDQUMsMEJBQTBCO1FBQ3RCLE9BQU9BO0lBQ1g7SUFDQUMsNEJBQTRCO1FBQ3hCLE9BQU9BO0lBQ1g7SUFDQUMsdUJBQXVCO1FBQ25CLE9BQU9BO0lBQ1g7SUFDQUMsNEJBQTRCO1FBQ3hCLE9BQU9BO0lBQ1g7SUFDQUMsMkJBQTJCO1FBQ3ZCLE9BQU9BO0lBQ1g7SUFDQUMsMkJBQTJCO1FBQ3ZCLE9BQU9BO0lBQ1g7SUFDQUMsMkJBQTJCO1FBQ3ZCLE9BQU9BO0lBQ1g7SUFDQUMsb0NBQW9DO1FBQ2hDLE9BQU9BO0lBQ1g7SUFDQUMsa0NBQWtDO1FBQzlCLE9BQU9BO0lBQ1g7SUFDQUMsc0NBQXNDO1FBQ2xDLE9BQU9BO0lBQ1g7SUFDQUMsc0JBQXNCO1FBQ2xCLE9BQU9BO0lBQ1g7SUFDQUMsMkNBQTJDO1FBQ3ZDLE9BQU9BO0lBQ1g7SUFDQUMsaUNBQWlDO1FBQzdCLE9BQU9BO0lBQ1g7SUFDQUMscUNBQXFDO1FBQ2pDLE9BQU9BO0lBQ1g7SUFDQUMsdUNBQXVDO1FBQ25DLE9BQU9BO0lBQ1g7SUFDQUMsOENBQThDO1FBQzFDLE9BQU9BO0lBQ1g7SUFDQUMsc0JBQXNCO1FBQ2xCLE9BQU9BO0lBQ1g7SUFDQUMsaUJBQWlCO1FBQ2IsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0lBQ0FDLHNCQUFzQjtRQUNsQixPQUFPQTtJQUNYO0lBQ0FDLDBCQUEwQjtRQUN0QixPQUFPQTtJQUNYO0lBQ0FDLG9CQUFvQjtRQUNoQixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLHNCQUFzQjtRQUNsQixPQUFPQTtJQUNYO0lBQ0FDLGtDQUFrQztRQUM5QixPQUFPQTtJQUNYO0lBQ0FDLGtCQUFrQjtRQUNkLE9BQU9BO0lBQ1g7SUFDQUMsNEJBQTRCO1FBQ3hCLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1TLDJCQUEyQkMsbUJBQU9BLENBQUMsNEdBQXlDO0FBQ2xGLE1BQU1ILDRCQUE0QixXQUFXLEdBQUdFLHlCQUF5QkUsQ0FBQyxDQUFDRCxtQkFBT0EsQ0FBQyx1R0FBOEI7QUFDakgsTUFBTXZFLGlCQUFpQjtJQUNuQnlFLFFBQVE7SUFDUkMsUUFBUTtJQUNSQyxZQUFZO0FBQ2hCO0FBQ0EsTUFBTTFFLG1CQUFtQjtJQUNyQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDSDtBQUNELE1BQU1DLG1CQUFtQjtJQUNyQixDQUFDRixlQUFleUUsTUFBTSxDQUFDLEVBQUU7SUFDekIsQ0FBQ3pFLGVBQWUwRSxNQUFNLENBQUMsRUFBRTtJQUN6QixDQUFDMUUsZUFBZTJFLFVBQVUsQ0FBQyxFQUFFO0FBQ2pDO0FBQ0EsTUFBTXhFLGVBQWU7QUFDckIsTUFBTUMseUJBQXlCO0FBQy9CLE1BQU1DLDBCQUEwQjtBQUNoQyxNQUFNQywyQkFBMkI7QUFDakMsTUFBTUMsYUFBYTtBQUNuQixNQUFNQyxhQUFhO0FBQ25CLE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyxxQkFBcUI7QUFDM0IsTUFBTUMsMkJBQTJCO0FBQ2pDLE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyxxQkFBcUI7QUFDM0IsTUFBTUMsNEJBQTRCO0FBQ2xDLE1BQU1DLGlDQUFpQztBQUN2QyxNQUFNQyxxQkFBcUI7QUFDM0IsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyxxQkFBcUI7QUFDM0IsTUFBTUMsa0JBQWtCO0FBQ3hCLE1BQU1DLGtCQUFrQjtBQUN4QixNQUFNQyx3QkFBd0I7QUFDOUIsTUFBTUMsNEJBQTRCO0FBQ2xDLE1BQU1DLHNCQUFzQjtBQUM1QixNQUFNQywwQkFBMEI7QUFDaEMsTUFBTUMsMEJBQTBCO0FBQ2hDLE1BQU1DLGdCQUFnQjtBQUN0QixNQUFNQyxtQkFBbUI7QUFDekIsTUFBTUMsZUFBZTtJQUNqQjtJQUNBO0NBQ0g7QUFDRCxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsZ0JBQWdCO0lBQ2xCO0lBQ0E7SUFDQTtDQUNIO0FBQ0QsTUFBTUMsMkJBQTJCO0FBQ2pDLE1BQU1DLDJCQUEyQjtBQUNqQyxNQUFNQyw2QkFBNkI7QUFDbkMsTUFBTUMsd0JBQXdCO0FBQzlCLE1BQU1DLDZCQUE2QjtBQUNuQyxNQUFNQyw0QkFBNEI7QUFDbEMsTUFBTUMsNEJBQTRCO0FBQ2xDLE1BQU1DLDRCQUE0QjtBQUNsQyxNQUFNQyxxQ0FBcUM7QUFDM0MsTUFBTUMsbUNBQW1DO0FBQ3pDLE1BQU1DLHVDQUF1QyxLQUFLRCxtQ0FBbUM7QUFDckYsTUFBTUUsdUJBQXVCO0FBQzdCLE1BQU1DLDRDQUE0QztBQUNsRCxNQUFNQyxrQ0FBa0M7QUFDeEMsTUFBTUMsc0NBQXNDO0FBQzVDLE1BQU1DLHdDQUF3QztBQUM5QyxNQUFNQywrQ0FBK0M0QixPQUFPN0I7O0FBQzVELE1BQU1FLHVCQUF1QjtBQUM3QixNQUFNQyxrQkFBa0I7QUFDeEIsTUFBTUMsa0JBQWtCO0FBQ3hCLE1BQU1DLHVCQUF1QjtBQUM3QixNQUFNQywyQkFBMkI7SUFDN0I7UUFDSXdCLEtBQUt6QjtRQUNMMEIsWUFBWTtJQUNoQjtJQUNBO1FBQ0lELEtBQUs7UUFDTEMsWUFBWTtJQUNoQjtDQUNIO0FBQ0QsTUFBTXhCLHFCQUFxQjtJQUN2QlcsTUFBTTtJQUNOYyxlQUFlO0lBQ2ZDLFlBQVk7SUFDWkMsWUFBWTtBQUNoQjtBQUNBLE1BQU0xQiwwQkFBMEI7SUFDNUJVLE1BQU07SUFDTmMsZUFBZTtJQUNmQyxZQUFZO0lBQ1pDLFlBQVk7QUFDaEI7QUFDQSxNQUFNekIsc0JBQXNCO0lBQ3hCO0NBQ0g7QUFDRCxNQUFNQyx1QkFBdUI7QUFDN0IsTUFBTUMsbUNBQW1DO0FBQ3pDLE1BQU1DLG1CQUFtQjtJQUNyQmMsUUFBUTtJQUNSQyxRQUFRO0FBQ1o7QUFDQSxNQUFNZCw2QkFBNkI7SUFDL0I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDSDtBQUNELE1BQU1DLHFCQUFxQixJQUFJcUIsSUFBSTtJQUMvQnpDO0lBQ0FHO0lBQ0FDO0lBQ0FIO0NBQ0g7QUFFRCxJQUFJLENBQUMsT0FBTzlDLFFBQVF5RSxPQUFPLEtBQUssY0FBZSxPQUFPekUsUUFBUXlFLE9BQU8sS0FBSyxZQUFZekUsUUFBUXlFLE9BQU8sS0FBSyxJQUFJLEtBQU0sT0FBT3pFLFFBQVF5RSxPQUFPLENBQUNjLFVBQVUsS0FBSyxhQUFhO0lBQ3JLekYsT0FBT0MsY0FBYyxDQUFDQyxRQUFReUUsT0FBTyxFQUFFLGNBQWM7UUFBRXhFLE9BQU87SUFBSztJQUNuRUgsT0FBTzBGLE1BQU0sQ0FBQ3hGLFFBQVF5RSxPQUFPLEVBQUV6RTtJQUMvQkUsT0FBT0YsT0FBTyxHQUFHQSxRQUFReUUsT0FBTztBQUNsQyxFQUVBLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvY29uc3RhbnRzLmpzPzg4ZDUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBNT0RFUk5fQlJPV1NFUlNMSVNUX1RBUkdFVDogbnVsbCxcbiAgICBDT01QSUxFUl9OQU1FUzogbnVsbCxcbiAgICBJTlRFUk5BTF9IRUFERVJTOiBudWxsLFxuICAgIENPTVBJTEVSX0lOREVYRVM6IG51bGwsXG4gICAgUEhBU0VfRVhQT1JUOiBudWxsLFxuICAgIFBIQVNFX1BST0RVQ1RJT05fQlVJTEQ6IG51bGwsXG4gICAgUEhBU0VfUFJPRFVDVElPTl9TRVJWRVI6IG51bGwsXG4gICAgUEhBU0VfREVWRUxPUE1FTlRfU0VSVkVSOiBudWxsLFxuICAgIFBIQVNFX1RFU1Q6IG51bGwsXG4gICAgUEhBU0VfSU5GTzogbnVsbCxcbiAgICBQQUdFU19NQU5JRkVTVDogbnVsbCxcbiAgICBBUFBfUEFUSFNfTUFOSUZFU1Q6IG51bGwsXG4gICAgQVBQX1BBVEhfUk9VVEVTX01BTklGRVNUOiBudWxsLFxuICAgIEJVSUxEX01BTklGRVNUOiBudWxsLFxuICAgIEFQUF9CVUlMRF9NQU5JRkVTVDogbnVsbCxcbiAgICBGVU5DVElPTlNfQ09ORklHX01BTklGRVNUOiBudWxsLFxuICAgIFNVQlJFU09VUkNFX0lOVEVHUklUWV9NQU5JRkVTVDogbnVsbCxcbiAgICBORVhUX0ZPTlRfTUFOSUZFU1Q6IG51bGwsXG4gICAgRVhQT1JUX01BUktFUjogbnVsbCxcbiAgICBFWFBPUlRfREVUQUlMOiBudWxsLFxuICAgIFBSRVJFTkRFUl9NQU5JRkVTVDogbnVsbCxcbiAgICBST1VURVNfTUFOSUZFU1Q6IG51bGwsXG4gICAgSU1BR0VTX01BTklGRVNUOiBudWxsLFxuICAgIFNFUlZFUl9GSUxFU19NQU5JRkVTVDogbnVsbCxcbiAgICBERVZfQ0xJRU5UX1BBR0VTX01BTklGRVNUOiBudWxsLFxuICAgIE1JRERMRVdBUkVfTUFOSUZFU1Q6IG51bGwsXG4gICAgREVWX01JRERMRVdBUkVfTUFOSUZFU1Q6IG51bGwsXG4gICAgUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1Q6IG51bGwsXG4gICAgRk9OVF9NQU5JRkVTVDogbnVsbCxcbiAgICBTRVJWRVJfRElSRUNUT1JZOiBudWxsLFxuICAgIENPTkZJR19GSUxFUzogbnVsbCxcbiAgICBCVUlMRF9JRF9GSUxFOiBudWxsLFxuICAgIEJMT0NLRURfUEFHRVM6IG51bGwsXG4gICAgQ0xJRU5UX1BVQkxJQ19GSUxFU19QQVRIOiBudWxsLFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUEFUSDogbnVsbCxcbiAgICBTVFJJTkdfTElURVJBTF9EUk9QX0JVTkRMRTogbnVsbCxcbiAgICBORVhUX0JVSUxUSU5fRE9DVU1FTlQ6IG51bGwsXG4gICAgQkFSUkVMX09QVElNSVpBVElPTl9QUkVGSVg6IG51bGwsXG4gICAgQ0xJRU5UX1JFRkVSRU5DRV9NQU5JRkVTVDogbnVsbCxcbiAgICBTRVJWRVJfUkVGRVJFTkNFX01BTklGRVNUOiBudWxsLFxuICAgIE1JRERMRVdBUkVfQlVJTERfTUFOSUZFU1Q6IG51bGwsXG4gICAgTUlERExFV0FSRV9SRUFDVF9MT0FEQUJMRV9NQU5JRkVTVDogbnVsbCxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTjogbnVsbCxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTl9BUFA6IG51bGwsXG4gICAgQVBQX0NMSUVOVF9JTlRFUk5BTFM6IG51bGwsXG4gICAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1JFQUNUX1JFRlJFU0g6IG51bGwsXG4gICAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX0FNUDogbnVsbCxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfV0VCUEFDSzogbnVsbCxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTOiBudWxsLFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFNfU1lNQk9MOiBudWxsLFxuICAgIEVER0VfUlVOVElNRV9XRUJQQUNLOiBudWxsLFxuICAgIFNUQVRJQ19QUk9QU19JRDogbnVsbCxcbiAgICBTRVJWRVJfUFJPUFNfSUQ6IG51bGwsXG4gICAgR09PR0xFX0ZPTlRfUFJPVklERVI6IG51bGwsXG4gICAgT1BUSU1JWkVEX0ZPTlRfUFJPVklERVJTOiBudWxsLFxuICAgIERFRkFVTFRfU0VSSUZfRk9OVDogbnVsbCxcbiAgICBERUZBVUxUX1NBTlNfU0VSSUZfRk9OVDogbnVsbCxcbiAgICBTVEFUSUNfU1RBVFVTX1BBR0VTOiBudWxsLFxuICAgIFRSQUNFX09VVFBVVF9WRVJTSU9OOiBudWxsLFxuICAgIFRVUkJPX1RSQUNFX0RFRkFVTFRfTUVNT1JZX0xJTUlUOiBudWxsLFxuICAgIFJTQ19NT0RVTEVfVFlQRVM6IG51bGwsXG4gICAgRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVM6IG51bGwsXG4gICAgU1lTVEVNX0VOVFJZUE9JTlRTOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9tb2Rlcm5icm93c2Vyc2xpc3R0YXJnZXQuZGVmYXVsdDtcbiAgICB9LFxuICAgIENPTVBJTEVSX05BTUVTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENPTVBJTEVSX05BTUVTO1xuICAgIH0sXG4gICAgSU5URVJOQUxfSEVBREVSUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBJTlRFUk5BTF9IRUFERVJTO1xuICAgIH0sXG4gICAgQ09NUElMRVJfSU5ERVhFUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDT01QSUxFUl9JTkRFWEVTO1xuICAgIH0sXG4gICAgUEhBU0VfRVhQT1JUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBIQVNFX0VYUE9SVDtcbiAgICB9LFxuICAgIFBIQVNFX1BST0RVQ1RJT05fQlVJTEQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUEhBU0VfUFJPRFVDVElPTl9CVUlMRDtcbiAgICB9LFxuICAgIFBIQVNFX1BST0RVQ1RJT05fU0VSVkVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBIQVNFX1BST0RVQ1RJT05fU0VSVkVSO1xuICAgIH0sXG4gICAgUEhBU0VfREVWRUxPUE1FTlRfU0VSVkVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBIQVNFX0RFVkVMT1BNRU5UX1NFUlZFUjtcbiAgICB9LFxuICAgIFBIQVNFX1RFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUEhBU0VfVEVTVDtcbiAgICB9LFxuICAgIFBIQVNFX0lORk86IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUEhBU0VfSU5GTztcbiAgICB9LFxuICAgIFBBR0VTX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBBR0VTX01BTklGRVNUO1xuICAgIH0sXG4gICAgQVBQX1BBVEhTX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFQUF9QQVRIU19NQU5JRkVTVDtcbiAgICB9LFxuICAgIEFQUF9QQVRIX1JPVVRFU19NQU5JRkVTVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBUFBfUEFUSF9ST1VURVNfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBCVUlMRF9NQU5JRkVTVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBCVUlMRF9NQU5JRkVTVDtcbiAgICB9LFxuICAgIEFQUF9CVUlMRF9NQU5JRkVTVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBUFBfQlVJTERfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBGVU5DVElPTlNfQ09ORklHX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEZVTkNUSU9OU19DT05GSUdfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBTVUJSRVNPVVJDRV9JTlRFR1JJVFlfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1VCUkVTT1VSQ0VfSU5URUdSSVRZX01BTklGRVNUO1xuICAgIH0sXG4gICAgTkVYVF9GT05UX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfRk9OVF9NQU5JRkVTVDtcbiAgICB9LFxuICAgIEVYUE9SVF9NQVJLRVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRVhQT1JUX01BUktFUjtcbiAgICB9LFxuICAgIEVYUE9SVF9ERVRBSUw6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRVhQT1JUX0RFVEFJTDtcbiAgICB9LFxuICAgIFBSRVJFTkRFUl9NQU5JRkVTVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQUkVSRU5ERVJfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBST1VURVNfTUFOSUZFU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUk9VVEVTX01BTklGRVNUO1xuICAgIH0sXG4gICAgSU1BR0VTX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIElNQUdFU19NQU5JRkVTVDtcbiAgICB9LFxuICAgIFNFUlZFUl9GSUxFU19NQU5JRkVTVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTRVJWRVJfRklMRVNfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBERVZfQ0xJRU5UX1BBR0VTX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIERFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBNSURETEVXQVJFX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1JRERMRVdBUkVfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBERVZfTUlERExFV0FSRV9NQU5JRkVTVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBERVZfTUlERExFV0FSRV9NQU5JRkVTVDtcbiAgICB9LFxuICAgIFJFQUNUX0xPQURBQkxFX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJFQUNUX0xPQURBQkxFX01BTklGRVNUO1xuICAgIH0sXG4gICAgRk9OVF9NQU5JRkVTVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBGT05UX01BTklGRVNUO1xuICAgIH0sXG4gICAgU0VSVkVSX0RJUkVDVE9SWTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTRVJWRVJfRElSRUNUT1JZO1xuICAgIH0sXG4gICAgQ09ORklHX0ZJTEVTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENPTkZJR19GSUxFUztcbiAgICB9LFxuICAgIEJVSUxEX0lEX0ZJTEU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQlVJTERfSURfRklMRTtcbiAgICB9LFxuICAgIEJMT0NLRURfUEFHRVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQkxPQ0tFRF9QQUdFUztcbiAgICB9LFxuICAgIENMSUVOVF9QVUJMSUNfRklMRVNfUEFUSDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDTElFTlRfUFVCTElDX0ZJTEVTX1BBVEg7XG4gICAgfSxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1BBVEg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQ0xJRU5UX1NUQVRJQ19GSUxFU19QQVRIO1xuICAgIH0sXG4gICAgU1RSSU5HX0xJVEVSQUxfRFJPUF9CVU5ETEU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1RSSU5HX0xJVEVSQUxfRFJPUF9CVU5ETEU7XG4gICAgfSxcbiAgICBORVhUX0JVSUxUSU5fRE9DVU1FTlQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9CVUlMVElOX0RPQ1VNRU5UO1xuICAgIH0sXG4gICAgQkFSUkVMX09QVElNSVpBVElPTl9QUkVGSVg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQkFSUkVMX09QVElNSVpBVElPTl9QUkVGSVg7XG4gICAgfSxcbiAgICBDTElFTlRfUkVGRVJFTkNFX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENMSUVOVF9SRUZFUkVOQ0VfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBTRVJWRVJfUkVGRVJFTkNFX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNFUlZFUl9SRUZFUkVOQ0VfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBNSURETEVXQVJFX0JVSUxEX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1JRERMRVdBUkVfQlVJTERfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBNSURETEVXQVJFX1JFQUNUX0xPQURBQkxFX01BTklGRVNUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1JRERMRVdBUkVfUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1Q7XG4gICAgfSxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTjtcbiAgICB9LFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOX0FQUDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTl9BUFA7XG4gICAgfSxcbiAgICBBUFBfQ0xJRU5UX0lOVEVSTkFMUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBUFBfQ0xJRU5UX0lOVEVSTkFMUztcbiAgICB9LFxuICAgIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9SRUFDVF9SRUZSRVNIOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9SRUFDVF9SRUZSRVNIO1xuICAgIH0sXG4gICAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX0FNUDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QO1xuICAgIH0sXG4gICAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1dFQlBBQ0s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1dFQlBBQ0s7XG4gICAgfSxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFM7XG4gICAgfSxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTX1NZTUJPTDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTX1NZTUJPTDtcbiAgICB9LFxuICAgIEVER0VfUlVOVElNRV9XRUJQQUNLOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEVER0VfUlVOVElNRV9XRUJQQUNLO1xuICAgIH0sXG4gICAgU1RBVElDX1BST1BTX0lEOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRJQ19QUk9QU19JRDtcbiAgICB9LFxuICAgIFNFUlZFUl9QUk9QU19JRDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTRVJWRVJfUFJPUFNfSUQ7XG4gICAgfSxcbiAgICBHT09HTEVfRk9OVF9QUk9WSURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBHT09HTEVfRk9OVF9QUk9WSURFUjtcbiAgICB9LFxuICAgIE9QVElNSVpFRF9GT05UX1BST1ZJREVSUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBPUFRJTUlaRURfRk9OVF9QUk9WSURFUlM7XG4gICAgfSxcbiAgICBERUZBVUxUX1NFUklGX0ZPTlQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gREVGQVVMVF9TRVJJRl9GT05UO1xuICAgIH0sXG4gICAgREVGQVVMVF9TQU5TX1NFUklGX0ZPTlQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gREVGQVVMVF9TQU5TX1NFUklGX0ZPTlQ7XG4gICAgfSxcbiAgICBTVEFUSUNfU1RBVFVTX1BBR0VTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRJQ19TVEFUVVNfUEFHRVM7XG4gICAgfSxcbiAgICBUUkFDRV9PVVRQVVRfVkVSU0lPTjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBUUkFDRV9PVVRQVVRfVkVSU0lPTjtcbiAgICB9LFxuICAgIFRVUkJPX1RSQUNFX0RFRkFVTFRfTUVNT1JZX0xJTUlUOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFRVUkJPX1RSQUNFX0RFRkFVTFRfTUVNT1JZX0xJTUlUO1xuICAgIH0sXG4gICAgUlNDX01PRFVMRV9UWVBFUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfTU9EVUxFX1RZUEVTO1xuICAgIH0sXG4gICAgRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVM7XG4gICAgfSxcbiAgICBTWVNURU1fRU5UUllQT0lOVFM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1lTVEVNX0VOVFJZUE9JTlRTO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9tb2Rlcm5icm93c2Vyc2xpc3R0YXJnZXQgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCIuL21vZGVybi1icm93c2Vyc2xpc3QtdGFyZ2V0XCIpKTtcbmNvbnN0IENPTVBJTEVSX05BTUVTID0ge1xuICAgIGNsaWVudDogXCJjbGllbnRcIixcbiAgICBzZXJ2ZXI6IFwic2VydmVyXCIsXG4gICAgZWRnZVNlcnZlcjogXCJlZGdlLXNlcnZlclwiXG59O1xuY29uc3QgSU5URVJOQUxfSEVBREVSUyA9IFtcbiAgICBcIngtaW52b2tlLWVycm9yXCIsXG4gICAgXCJ4LWludm9rZS1vdXRwdXRcIixcbiAgICBcIngtaW52b2tlLXBhdGhcIixcbiAgICBcIngtaW52b2tlLXF1ZXJ5XCIsXG4gICAgXCJ4LWludm9rZS1zdGF0dXNcIixcbiAgICBcIngtbWlkZGxld2FyZS1pbnZva2VcIlxuXTtcbmNvbnN0IENPTVBJTEVSX0lOREVYRVMgPSB7XG4gICAgW0NPTVBJTEVSX05BTUVTLmNsaWVudF06IDAsXG4gICAgW0NPTVBJTEVSX05BTUVTLnNlcnZlcl06IDEsXG4gICAgW0NPTVBJTEVSX05BTUVTLmVkZ2VTZXJ2ZXJdOiAyXG59O1xuY29uc3QgUEhBU0VfRVhQT1JUID0gXCJwaGFzZS1leHBvcnRcIjtcbmNvbnN0IFBIQVNFX1BST0RVQ1RJT05fQlVJTEQgPSBcInBoYXNlLXByb2R1Y3Rpb24tYnVpbGRcIjtcbmNvbnN0IFBIQVNFX1BST0RVQ1RJT05fU0VSVkVSID0gXCJwaGFzZS1wcm9kdWN0aW9uLXNlcnZlclwiO1xuY29uc3QgUEhBU0VfREVWRUxPUE1FTlRfU0VSVkVSID0gXCJwaGFzZS1kZXZlbG9wbWVudC1zZXJ2ZXJcIjtcbmNvbnN0IFBIQVNFX1RFU1QgPSBcInBoYXNlLXRlc3RcIjtcbmNvbnN0IFBIQVNFX0lORk8gPSBcInBoYXNlLWluZm9cIjtcbmNvbnN0IFBBR0VTX01BTklGRVNUID0gXCJwYWdlcy1tYW5pZmVzdC5qc29uXCI7XG5jb25zdCBBUFBfUEFUSFNfTUFOSUZFU1QgPSBcImFwcC1wYXRocy1tYW5pZmVzdC5qc29uXCI7XG5jb25zdCBBUFBfUEFUSF9ST1VURVNfTUFOSUZFU1QgPSBcImFwcC1wYXRoLXJvdXRlcy1tYW5pZmVzdC5qc29uXCI7XG5jb25zdCBCVUlMRF9NQU5JRkVTVCA9IFwiYnVpbGQtbWFuaWZlc3QuanNvblwiO1xuY29uc3QgQVBQX0JVSUxEX01BTklGRVNUID0gXCJhcHAtYnVpbGQtbWFuaWZlc3QuanNvblwiO1xuY29uc3QgRlVOQ1RJT05TX0NPTkZJR19NQU5JRkVTVCA9IFwiZnVuY3Rpb25zLWNvbmZpZy1tYW5pZmVzdC5qc29uXCI7XG5jb25zdCBTVUJSRVNPVVJDRV9JTlRFR1JJVFlfTUFOSUZFU1QgPSBcInN1YnJlc291cmNlLWludGVncml0eS1tYW5pZmVzdFwiO1xuY29uc3QgTkVYVF9GT05UX01BTklGRVNUID0gXCJuZXh0LWZvbnQtbWFuaWZlc3RcIjtcbmNvbnN0IEVYUE9SVF9NQVJLRVIgPSBcImV4cG9ydC1tYXJrZXIuanNvblwiO1xuY29uc3QgRVhQT1JUX0RFVEFJTCA9IFwiZXhwb3J0LWRldGFpbC5qc29uXCI7XG5jb25zdCBQUkVSRU5ERVJfTUFOSUZFU1QgPSBcInByZXJlbmRlci1tYW5pZmVzdC5qc29uXCI7XG5jb25zdCBST1VURVNfTUFOSUZFU1QgPSBcInJvdXRlcy1tYW5pZmVzdC5qc29uXCI7XG5jb25zdCBJTUFHRVNfTUFOSUZFU1QgPSBcImltYWdlcy1tYW5pZmVzdC5qc29uXCI7XG5jb25zdCBTRVJWRVJfRklMRVNfTUFOSUZFU1QgPSBcInJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCI7XG5jb25zdCBERVZfQ0xJRU5UX1BBR0VTX01BTklGRVNUID0gXCJfZGV2UGFnZXNNYW5pZmVzdC5qc29uXCI7XG5jb25zdCBNSURETEVXQVJFX01BTklGRVNUID0gXCJtaWRkbGV3YXJlLW1hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IERFVl9NSURETEVXQVJFX01BTklGRVNUID0gXCJfZGV2TWlkZGxld2FyZU1hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IFJFQUNUX0xPQURBQkxFX01BTklGRVNUID0gXCJyZWFjdC1sb2FkYWJsZS1tYW5pZmVzdC5qc29uXCI7XG5jb25zdCBGT05UX01BTklGRVNUID0gXCJmb250LW1hbmlmZXN0Lmpzb25cIjtcbmNvbnN0IFNFUlZFUl9ESVJFQ1RPUlkgPSBcInNlcnZlclwiO1xuY29uc3QgQ09ORklHX0ZJTEVTID0gW1xuICAgIFwibmV4dC5jb25maWcuanNcIixcbiAgICBcIm5leHQuY29uZmlnLm1qc1wiXG5dO1xuY29uc3QgQlVJTERfSURfRklMRSA9IFwiQlVJTERfSURcIjtcbmNvbnN0IEJMT0NLRURfUEFHRVMgPSBbXG4gICAgXCIvX2RvY3VtZW50XCIsXG4gICAgXCIvX2FwcFwiLFxuICAgIFwiL19lcnJvclwiXG5dO1xuY29uc3QgQ0xJRU5UX1BVQkxJQ19GSUxFU19QQVRIID0gXCJwdWJsaWNcIjtcbmNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUEFUSCA9IFwic3RhdGljXCI7XG5jb25zdCBTVFJJTkdfTElURVJBTF9EUk9QX0JVTkRMRSA9IFwiX19ORVhUX0RST1BfQ0xJRU5UX0ZJTEVfX1wiO1xuY29uc3QgTkVYVF9CVUlMVElOX0RPQ1VNRU5UID0gXCJfX05FWFRfQlVJTFRJTl9ET0NVTUVOVF9fXCI7XG5jb25zdCBCQVJSRUxfT1BUSU1JWkFUSU9OX1BSRUZJWCA9IFwiX19iYXJyZWxfb3B0aW1pemVfX1wiO1xuY29uc3QgQ0xJRU5UX1JFRkVSRU5DRV9NQU5JRkVTVCA9IFwiY2xpZW50LXJlZmVyZW5jZS1tYW5pZmVzdFwiO1xuY29uc3QgU0VSVkVSX1JFRkVSRU5DRV9NQU5JRkVTVCA9IFwic2VydmVyLXJlZmVyZW5jZS1tYW5pZmVzdFwiO1xuY29uc3QgTUlERExFV0FSRV9CVUlMRF9NQU5JRkVTVCA9IFwibWlkZGxld2FyZS1idWlsZC1tYW5pZmVzdFwiO1xuY29uc3QgTUlERExFV0FSRV9SRUFDVF9MT0FEQUJMRV9NQU5JRkVTVCA9IFwibWlkZGxld2FyZS1yZWFjdC1sb2FkYWJsZS1tYW5pZmVzdFwiO1xuY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU4gPSBcIm1haW5cIjtcbmNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOX0FQUCA9IFwiXCIgKyBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTiArIFwiLWFwcFwiO1xuY29uc3QgQVBQX0NMSUVOVF9JTlRFUk5BTFMgPSBcImFwcC1wYWdlcy1pbnRlcm5hbHNcIjtcbmNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9SRUFDVF9SRUZSRVNIID0gXCJyZWFjdC1yZWZyZXNoXCI7XG5jb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QID0gXCJhbXBcIjtcbmNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9XRUJQQUNLID0gXCJ3ZWJwYWNrXCI7XG5jb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTID0gXCJwb2x5ZmlsbHNcIjtcbmNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFNfU1lNQk9MID0gU3ltYm9sKENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFMpO1xuY29uc3QgRURHRV9SVU5USU1FX1dFQlBBQ0sgPSBcImVkZ2UtcnVudGltZS13ZWJwYWNrXCI7XG5jb25zdCBTVEFUSUNfUFJPUFNfSUQgPSBcIl9fTl9TU0dcIjtcbmNvbnN0IFNFUlZFUl9QUk9QU19JRCA9IFwiX19OX1NTUFwiO1xuY29uc3QgR09PR0xFX0ZPTlRfUFJPVklERVIgPSBcImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vXCI7XG5jb25zdCBPUFRJTUlaRURfRk9OVF9QUk9WSURFUlMgPSBbXG4gICAge1xuICAgICAgICB1cmw6IEdPT0dMRV9GT05UX1BST1ZJREVSLFxuICAgICAgICBwcmVjb25uZWN0OiBcImh0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb21cIlxuICAgIH0sXG4gICAge1xuICAgICAgICB1cmw6IFwiaHR0cHM6Ly91c2UudHlwZWtpdC5uZXRcIixcbiAgICAgICAgcHJlY29ubmVjdDogXCJodHRwczovL3VzZS50eXBla2l0Lm5ldFwiXG4gICAgfVxuXTtcbmNvbnN0IERFRkFVTFRfU0VSSUZfRk9OVCA9IHtcbiAgICBuYW1lOiBcIlRpbWVzIE5ldyBSb21hblwiLFxuICAgIHhBdmdDaGFyV2lkdGg6IDgyMSxcbiAgICBhekF2Z1dpZHRoOiA4NTQuMzk1MzQ4ODM3MjA5MyxcbiAgICB1bml0c1BlckVtOiAyMDQ4XG59O1xuY29uc3QgREVGQVVMVF9TQU5TX1NFUklGX0ZPTlQgPSB7XG4gICAgbmFtZTogXCJBcmlhbFwiLFxuICAgIHhBdmdDaGFyV2lkdGg6IDkwNCxcbiAgICBhekF2Z1dpZHRoOiA5MzQuNTExNjI3OTA2OTc2NyxcbiAgICB1bml0c1BlckVtOiAyMDQ4XG59O1xuY29uc3QgU1RBVElDX1NUQVRVU19QQUdFUyA9IFtcbiAgICBcIi81MDBcIlxuXTtcbmNvbnN0IFRSQUNFX09VVFBVVF9WRVJTSU9OID0gMTtcbmNvbnN0IFRVUkJPX1RSQUNFX0RFRkFVTFRfTUVNT1JZX0xJTUlUID0gNjAwMDtcbmNvbnN0IFJTQ19NT0RVTEVfVFlQRVMgPSB7XG4gICAgY2xpZW50OiBcImNsaWVudFwiLFxuICAgIHNlcnZlcjogXCJzZXJ2ZXJcIlxufTtcbmNvbnN0IEVER0VfVU5TVVBQT1JURURfTk9ERV9BUElTID0gW1xuICAgIFwiY2xlYXJJbW1lZGlhdGVcIixcbiAgICBcInNldEltbWVkaWF0ZVwiLFxuICAgIFwiQnJvYWRjYXN0Q2hhbm5lbFwiLFxuICAgIFwiQnl0ZUxlbmd0aFF1ZXVpbmdTdHJhdGVneVwiLFxuICAgIFwiQ29tcHJlc3Npb25TdHJlYW1cIixcbiAgICBcIkNvdW50UXVldWluZ1N0cmF0ZWd5XCIsXG4gICAgXCJEZWNvbXByZXNzaW9uU3RyZWFtXCIsXG4gICAgXCJEb21FeGNlcHRpb25cIixcbiAgICBcIk1lc3NhZ2VDaGFubmVsXCIsXG4gICAgXCJNZXNzYWdlRXZlbnRcIixcbiAgICBcIk1lc3NhZ2VQb3J0XCIsXG4gICAgXCJSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyXCIsXG4gICAgXCJSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0XCIsXG4gICAgXCJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyXCIsXG4gICAgXCJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlclwiLFxuICAgIFwiV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlclwiXG5dO1xuY29uc3QgU1lTVEVNX0VOVFJZUE9JTlRTID0gbmV3IFNldChbXG4gICAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU4sXG4gICAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1JFQUNUX1JFRlJFU0gsXG4gICAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX0FNUCxcbiAgICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTl9BUFBcbl0pO1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQiLCJDT01QSUxFUl9OQU1FUyIsIklOVEVSTkFMX0hFQURFUlMiLCJDT01QSUxFUl9JTkRFWEVTIiwiUEhBU0VfRVhQT1JUIiwiUEhBU0VfUFJPRFVDVElPTl9CVUlMRCIsIlBIQVNFX1BST0RVQ1RJT05fU0VSVkVSIiwiUEhBU0VfREVWRUxPUE1FTlRfU0VSVkVSIiwiUEhBU0VfVEVTVCIsIlBIQVNFX0lORk8iLCJQQUdFU19NQU5JRkVTVCIsIkFQUF9QQVRIU19NQU5JRkVTVCIsIkFQUF9QQVRIX1JPVVRFU19NQU5JRkVTVCIsIkJVSUxEX01BTklGRVNUIiwiQVBQX0JVSUxEX01BTklGRVNUIiwiRlVOQ1RJT05TX0NPTkZJR19NQU5JRkVTVCIsIlNVQlJFU09VUkNFX0lOVEVHUklUWV9NQU5JRkVTVCIsIk5FWFRfRk9OVF9NQU5JRkVTVCIsIkVYUE9SVF9NQVJLRVIiLCJFWFBPUlRfREVUQUlMIiwiUFJFUkVOREVSX01BTklGRVNUIiwiUk9VVEVTX01BTklGRVNUIiwiSU1BR0VTX01BTklGRVNUIiwiU0VSVkVSX0ZJTEVTX01BTklGRVNUIiwiREVWX0NMSUVOVF9QQUdFU19NQU5JRkVTVCIsIk1JRERMRVdBUkVfTUFOSUZFU1QiLCJERVZfTUlERExFV0FSRV9NQU5JRkVTVCIsIlJFQUNUX0xPQURBQkxFX01BTklGRVNUIiwiRk9OVF9NQU5JRkVTVCIsIlNFUlZFUl9ESVJFQ1RPUlkiLCJDT05GSUdfRklMRVMiLCJCVUlMRF9JRF9GSUxFIiwiQkxPQ0tFRF9QQUdFUyIsIkNMSUVOVF9QVUJMSUNfRklMRVNfUEFUSCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUEFUSCIsIlNUUklOR19MSVRFUkFMX0RST1BfQlVORExFIiwiTkVYVF9CVUlMVElOX0RPQ1VNRU5UIiwiQkFSUkVMX09QVElNSVpBVElPTl9QUkVGSVgiLCJDTElFTlRfUkVGRVJFTkNFX01BTklGRVNUIiwiU0VSVkVSX1JFRkVSRU5DRV9NQU5JRkVTVCIsIk1JRERMRVdBUkVfQlVJTERfTUFOSUZFU1QiLCJNSURETEVXQVJFX1JFQUNUX0xPQURBQkxFX01BTklGRVNUIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU4iLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTl9BUFAiLCJBUFBfQ0xJRU5UX0lOVEVSTkFMUyIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9SRUFDVF9SRUZSRVNIIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX0FNUCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9XRUJQQUNLIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMUyIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFNfU1lNQk9MIiwiRURHRV9SVU5USU1FX1dFQlBBQ0siLCJTVEFUSUNfUFJPUFNfSUQiLCJTRVJWRVJfUFJPUFNfSUQiLCJHT09HTEVfRk9OVF9QUk9WSURFUiIsIk9QVElNSVpFRF9GT05UX1BST1ZJREVSUyIsIkRFRkFVTFRfU0VSSUZfRk9OVCIsIkRFRkFVTFRfU0FOU19TRVJJRl9GT05UIiwiU1RBVElDX1NUQVRVU19QQUdFUyIsIlRSQUNFX09VVFBVVF9WRVJTSU9OIiwiVFVSQk9fVFJBQ0VfREVGQVVMVF9NRU1PUllfTElNSVQiLCJSU0NfTU9EVUxFX1RZUEVTIiwiRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVMiLCJTWVNURU1fRU5UUllQT0lOVFMiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfbW9kZXJuYnJvd3NlcnNsaXN0dGFyZ2V0IiwiZGVmYXVsdCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfIiwiY2xpZW50Iiwic2VydmVyIiwiZWRnZVNlcnZlciIsIlN5bWJvbCIsInVybCIsInByZWNvbm5lY3QiLCJ4QXZnQ2hhcldpZHRoIiwiYXpBdmdXaWR0aCIsInVuaXRzUGVyRW0iLCJTZXQiLCJfX2VzTW9kdWxlIiwiYXNzaWduIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/constants.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/escape-regexp.js": +/*!************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/escape-regexp.js ***! + \************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// regexp is based on https://github.com/sindresorhus/escape-string-regexp\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"escapeStringRegexp\", ({\n enumerable: true,\n get: function() {\n return escapeStringRegexp;\n }\n}));\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/;\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g;\nfunction escapeStringRegexp(str) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, \"\\\\$&\");\n }\n return str;\n} //# sourceMappingURL=escape-regexp.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvZXNjYXBlLXJlZ2V4cC5qcyIsIm1hcHBpbmdzIjoiQUFBQSwwRUFBMEU7QUFDN0Q7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGNBQWM7QUFDcEIsTUFBTUMsa0JBQWtCO0FBQ3hCLFNBQVNGLG1CQUFtQkcsR0FBRztJQUMzQiwrR0FBK0c7SUFDL0csSUFBSUYsWUFBWUcsSUFBSSxDQUFDRCxNQUFNO1FBQ3ZCLE9BQU9BLElBQUlFLE9BQU8sQ0FBQ0gsaUJBQWlCO0lBQ3hDO0lBQ0EsT0FBT0M7QUFDWCxFQUVBLHlDQUF5QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvZXNjYXBlLXJlZ2V4cC5qcz9kYmZiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHJlZ2V4cCBpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2VzY2FwZS1zdHJpbmctcmVnZXhwXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVzY2FwZVN0cmluZ1JlZ2V4cFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXNjYXBlU3RyaW5nUmVnZXhwO1xuICAgIH1cbn0pO1xuY29uc3QgcmVIYXNSZWdFeHAgPSAvW3xcXFxce30oKVtcXF1eJCsqPy4tXS87XG5jb25zdCByZVJlcGxhY2VSZWdFeHAgPSAvW3xcXFxce30oKVtcXF1eJCsqPy4tXS9nO1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nUmVnZXhwKHN0cikge1xuICAgIC8vIHNlZSBhbHNvOiBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzJkYTAyNGMzYjRmOTk0N2E0ODUxNzYzOWRlNzU2MDQ1N2NkNGVjNmMvZXNjYXBlUmVnRXhwLmpzI0wyM1xuICAgIGlmIChyZUhhc1JlZ0V4cC50ZXN0KHN0cikpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlUmVwbGFjZVJlZ0V4cCwgXCJcXFxcJCZcIik7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzY2FwZS1yZWdleHAuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImVzY2FwZVN0cmluZ1JlZ2V4cCIsInJlSGFzUmVnRXhwIiwicmVSZXBsYWNlUmVnRXhwIiwic3RyIiwidGVzdCIsInJlcGxhY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/escape-regexp.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js ***! + \**********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HeadManagerContext\", ({\n enumerable: true,\n get: function() {\n return HeadManagerContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst HeadManagerContext = _react.default.createContext({});\nif (true) {\n HeadManagerContext.displayName = \"HeadManagerContext\";\n} //# sourceMappingURL=head-manager-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaGVhZC1tYW5hZ2VyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsNEdBQXlDO0FBQ2xGLE1BQU1DLFNBQVMsV0FBVyxHQUFHRix5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsNENBQU87QUFDdkUsTUFBTUYscUJBQXFCRyxPQUFPRSxPQUFPLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0FBQ3pELElBQUlDLElBQXFDLEVBQUU7SUFDdkNQLG1CQUFtQlEsV0FBVyxHQUFHO0FBQ3JDLEVBRUEsK0RBQStEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9oZWFkLW1hbmFnZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcz9lZjQ4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSGVhZE1hbmFnZXJDb250ZXh0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBIZWFkTWFuYWdlckNvbnRleHQ7XG4gICAgfVxufSk7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0XCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwicmVhY3RcIikpO1xuY29uc3QgSGVhZE1hbmFnZXJDb250ZXh0ID0gX3JlYWN0LmRlZmF1bHQuY3JlYXRlQ29udGV4dCh7fSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgSGVhZE1hbmFnZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJIZWFkTWFuYWdlckNvbnRleHRcIjtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVhZC1tYW5hZ2VyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkhlYWRNYW5hZ2VyQ29udGV4dCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfcmVhY3QiLCJfIiwiZGVmYXVsdCIsImNyZWF0ZUNvbnRleHQiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/head.js": +/*!***************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/head.js ***! + \***************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n defaultHead: function() {\n return defaultHead;\n },\n default: function() {\n return _default;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _sideeffect = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./side-effect */ \"./node_modules/next/dist/shared/lib/side-effect.js\"));\nconst _ampcontextsharedruntime = __webpack_require__(/*! ./amp-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js\");\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ./head-manager-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _ampmode = __webpack_require__(/*! ./amp-mode */ \"./node_modules/next/dist/shared/lib/amp-mode.js\");\nconst _warnonce = __webpack_require__(/*! ./utils/warn-once */ \"./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nfunction defaultHead(inAmpMode) {\n if (inAmpMode === void 0) inAmpMode = false;\n const head = [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n charSet: \"utf-8\"\n })\n ];\n if (!inAmpMode) {\n head.push(/*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"viewport\",\n content: \"width=device-width\"\n }));\n }\n return head;\n}\nfunction onlyReactElement(list, child) {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === \"string\" || typeof child === \"number\") {\n return list;\n }\n // Adds support for React.Fragment\n if (child.type === _react.default.Fragment) {\n return list.concat(_react.default.Children.toArray(child.props.children).reduce((fragmentList, fragmentChild)=>{\n if (typeof fragmentChild === \"string\" || typeof fragmentChild === \"number\") {\n return fragmentList;\n }\n return fragmentList.concat(fragmentChild);\n }, []));\n }\n return list.concat(child);\n}\nconst METATYPES = [\n \"name\",\n \"httpEquiv\",\n \"charSet\",\n \"itemProp\"\n];\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like <title/>\n Also adds support for deduplicated `key` properties\n*/ function unique() {\n const keys = new Set();\n const tags = new Set();\n const metaTypes = new Set();\n const metaCategories = {};\n return (h)=>{\n let isUnique = true;\n let hasKey = false;\n if (h.key && typeof h.key !== \"number\" && h.key.indexOf(\"$\") > 0) {\n hasKey = true;\n const key = h.key.slice(h.key.indexOf(\"$\") + 1);\n if (keys.has(key)) {\n isUnique = false;\n } else {\n keys.add(key);\n }\n }\n // eslint-disable-next-line default-case\n switch(h.type){\n case \"title\":\n case \"base\":\n if (tags.has(h.type)) {\n isUnique = false;\n } else {\n tags.add(h.type);\n }\n break;\n case \"meta\":\n for(let i = 0, len = METATYPES.length; i < len; i++){\n const metatype = METATYPES[i];\n if (!h.props.hasOwnProperty(metatype)) continue;\n if (metatype === \"charSet\") {\n if (metaTypes.has(metatype)) {\n isUnique = false;\n } else {\n metaTypes.add(metatype);\n }\n } else {\n const category = h.props[metatype];\n const categories = metaCategories[metatype] || new Set();\n if ((metatype !== \"name\" || !hasKey) && categories.has(category)) {\n isUnique = false;\n } else {\n categories.add(category);\n metaCategories[metatype] = categories;\n }\n }\n }\n break;\n }\n return isUnique;\n };\n}\n/**\n *\n * @param headChildrenElements List of children of <Head>\n */ function reduceComponents(headChildrenElements, props) {\n const { inAmpMode } = props;\n return headChildrenElements.reduce(onlyReactElement, []).reverse().concat(defaultHead(inAmpMode).reverse()).filter(unique()).reverse().map((c, i)=>{\n const key = c.key || i;\n if (false) {}\n if (true) {\n // omit JSON-LD structured data snippets from the warning\n if (c.type === \"script\" && c.props[\"type\"] !== \"application/ld+json\") {\n const srcMessage = c.props[\"src\"] ? '<script> tag with src=\"' + c.props[\"src\"] + '\"' : \"inline <script>\";\n (0, _warnonce.warnOnce)(\"Do not add <script> tags using next/head (see \" + srcMessage + \"). Use next/script instead. \\nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component\");\n } else if (c.type === \"link\" && c.props[\"rel\"] === \"stylesheet\") {\n (0, _warnonce.warnOnce)('Do not add stylesheets using next/head (see <link rel=\"stylesheet\"> tag with href=\"' + c.props[\"href\"] + '\"). Use Document instead. \\nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component');\n }\n }\n return /*#__PURE__*/ _react.default.cloneElement(c, {\n key\n });\n });\n}\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */ function Head(param) {\n let { children } = param;\n const ampState = (0, _react.useContext)(_ampcontextsharedruntime.AmpStateContext);\n const headManager = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, {\n reduceComponentsToState: reduceComponents,\n headManager: headManager,\n inAmpMode: (0, _ampmode.isInAmpMode)(ampState),\n children: children\n });\n}\n_c = Head;\nconst _default = Head;\nif ((typeof exports.default === \"function\" || typeof exports.default === \"object\" && exports.default !== null) && typeof exports.default.__esModule === \"undefined\") {\n Object.defineProperty(exports.default, \"__esModule\", {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=head.js.map\nvar _c;\n$RefreshReg$(_c, \"Head\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaGVhZC5qcyIsIm1hcHBpbmdzIjoicURBRWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLGFBQWE7UUFDVCxPQUFPQTtJQUNYO0lBQ0FDLFNBQVM7UUFDTCxPQUFPTztJQUNYO0FBQ0o7QUFDQSxNQUFNQywyQkFBMkJDLG1CQUFPQSxDQUFDLDRHQUF5QztBQUNsRixNQUFNQyw0QkFBNEJELG1CQUFPQSxDQUFDLDhHQUEwQztBQUNwRixNQUFNRSxjQUFjRixtQkFBT0EsQ0FBQyw4REFBbUI7QUFDL0MsTUFBTUcsU0FBUyxXQUFXLEdBQUdGLDBCQUEwQkcsQ0FBQyxDQUFDSixtQkFBT0EsQ0FBQyw0Q0FBTztBQUN4RSxNQUFNSyxjQUFjLFdBQVcsR0FBR04seUJBQXlCSyxDQUFDLENBQUNKLG1CQUFPQSxDQUFDLHlFQUFlO0FBQ3BGLE1BQU1NLDJCQUEyQk4sbUJBQU9BLENBQUMsdUdBQThCO0FBQ3ZFLE1BQU1PLG1DQUFtQ1AsbUJBQU9BLENBQUMseUhBQXVDO0FBQ3hGLE1BQU1RLFdBQVdSLG1CQUFPQSxDQUFDLG1FQUFZO0FBQ3JDLE1BQU1TLFlBQVlULG1CQUFPQSxDQUFDLGlGQUFtQjtBQUM3QyxTQUFTVixZQUFZb0IsU0FBUztJQUMxQixJQUFJQSxjQUFjLEtBQUssR0FBR0EsWUFBWTtJQUN0QyxNQUFNQyxPQUFPO1FBQ1QsV0FBVyxHQUFJLElBQUdULFlBQVlVLEdBQUcsRUFBRSxRQUFRO1lBQ3ZDQyxTQUFTO1FBQ2I7S0FDSDtJQUNELElBQUksQ0FBQ0gsV0FBVztRQUNaQyxLQUFLRyxJQUFJLENBQWUsV0FBSCxHQUFJLElBQUdaLFlBQVlVLEdBQUcsRUFBRSxRQUFRO1lBQ2pEakIsTUFBTTtZQUNOb0IsU0FBUztRQUNiO0lBQ0o7SUFDQSxPQUFPSjtBQUNYO0FBQ0EsU0FBU0ssaUJBQWlCQyxJQUFJLEVBQUVDLEtBQUs7SUFDakMsOEZBQThGO0lBQzlGLElBQUksT0FBT0EsVUFBVSxZQUFZLE9BQU9BLFVBQVUsVUFBVTtRQUN4RCxPQUFPRDtJQUNYO0lBQ0Esa0NBQWtDO0lBQ2xDLElBQUlDLE1BQU1DLElBQUksS0FBS2hCLE9BQU9aLE9BQU8sQ0FBQzZCLFFBQVEsRUFBRTtRQUN4QyxPQUFPSCxLQUFLSSxNQUFNLENBQ2xCbEIsT0FBT1osT0FBTyxDQUFDK0IsUUFBUSxDQUFDQyxPQUFPLENBQUNMLE1BQU1NLEtBQUssQ0FBQ0MsUUFBUSxFQUFFQyxNQUFNLENBQzVELENBQUNDLGNBQWNDO1lBQ1gsSUFBSSxPQUFPQSxrQkFBa0IsWUFBWSxPQUFPQSxrQkFBa0IsVUFBVTtnQkFDeEUsT0FBT0Q7WUFDWDtZQUNBLE9BQU9BLGFBQWFOLE1BQU0sQ0FBQ087UUFDL0IsR0FBRyxFQUFFO0lBQ1Q7SUFDQSxPQUFPWCxLQUFLSSxNQUFNLENBQUNIO0FBQ3ZCO0FBQ0EsTUFBTVcsWUFBWTtJQUNkO0lBQ0E7SUFDQTtJQUNBO0NBQ0g7QUFDRDs7OztBQUlBLEdBQUcsU0FBU0M7SUFDUixNQUFNQyxPQUFPLElBQUlDO0lBQ2pCLE1BQU1DLE9BQU8sSUFBSUQ7SUFDakIsTUFBTUUsWUFBWSxJQUFJRjtJQUN0QixNQUFNRyxpQkFBaUIsQ0FBQztJQUN4QixPQUFPLENBQUNDO1FBQ0osSUFBSUMsV0FBVztRQUNmLElBQUlDLFNBQVM7UUFDYixJQUFJRixFQUFFRyxHQUFHLElBQUksT0FBT0gsRUFBRUcsR0FBRyxLQUFLLFlBQVlILEVBQUVHLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sR0FBRztZQUM5REYsU0FBUztZQUNULE1BQU1DLE1BQU1ILEVBQUVHLEdBQUcsQ0FBQ0UsS0FBSyxDQUFDTCxFQUFFRyxHQUFHLENBQUNDLE9BQU8sQ0FBQyxPQUFPO1lBQzdDLElBQUlULEtBQUtXLEdBQUcsQ0FBQ0gsTUFBTTtnQkFDZkYsV0FBVztZQUNmLE9BQU87Z0JBQ0hOLEtBQUtZLEdBQUcsQ0FBQ0o7WUFDYjtRQUNKO1FBQ0Esd0NBQXdDO1FBQ3hDLE9BQU9ILEVBQUVqQixJQUFJO1lBQ1QsS0FBSztZQUNMLEtBQUs7Z0JBQ0QsSUFBSWMsS0FBS1MsR0FBRyxDQUFDTixFQUFFakIsSUFBSSxHQUFHO29CQUNsQmtCLFdBQVc7Z0JBQ2YsT0FBTztvQkFDSEosS0FBS1UsR0FBRyxDQUFDUCxFQUFFakIsSUFBSTtnQkFDbkI7Z0JBQ0E7WUFDSixLQUFLO2dCQUNELElBQUksSUFBSXlCLElBQUksR0FBR0MsTUFBTWhCLFVBQVVpQixNQUFNLEVBQUVGLElBQUlDLEtBQUtELElBQUk7b0JBQ2hELE1BQU1HLFdBQVdsQixTQUFTLENBQUNlLEVBQUU7b0JBQzdCLElBQUksQ0FBQ1IsRUFBRVosS0FBSyxDQUFDd0IsY0FBYyxDQUFDRCxXQUFXO29CQUN2QyxJQUFJQSxhQUFhLFdBQVc7d0JBQ3hCLElBQUliLFVBQVVRLEdBQUcsQ0FBQ0ssV0FBVzs0QkFDekJWLFdBQVc7d0JBQ2YsT0FBTzs0QkFDSEgsVUFBVVMsR0FBRyxDQUFDSTt3QkFDbEI7b0JBQ0osT0FBTzt3QkFDSCxNQUFNRSxXQUFXYixFQUFFWixLQUFLLENBQUN1QixTQUFTO3dCQUNsQyxNQUFNRyxhQUFhZixjQUFjLENBQUNZLFNBQVMsSUFBSSxJQUFJZjt3QkFDbkQsSUFBSSxDQUFDZSxhQUFhLFVBQVUsQ0FBQ1QsTUFBSyxLQUFNWSxXQUFXUixHQUFHLENBQUNPLFdBQVc7NEJBQzlEWixXQUFXO3dCQUNmLE9BQU87NEJBQ0hhLFdBQVdQLEdBQUcsQ0FBQ007NEJBQ2ZkLGNBQWMsQ0FBQ1ksU0FBUyxHQUFHRzt3QkFDL0I7b0JBQ0o7Z0JBQ0o7Z0JBQ0E7UUFDUjtRQUNBLE9BQU9iO0lBQ1g7QUFDSjtBQUNBOzs7Q0FHQyxHQUFHLFNBQVNjLGlCQUFpQkMsb0JBQW9CLEVBQUU1QixLQUFLO0lBQ3JELE1BQU0sRUFBRWQsU0FBUyxFQUFFLEdBQUdjO0lBQ3RCLE9BQU80QixxQkFBcUIxQixNQUFNLENBQUNWLGtCQUFrQixFQUFFLEVBQUVxQyxPQUFPLEdBQUdoQyxNQUFNLENBQUMvQixZQUFZb0IsV0FBVzJDLE9BQU8sSUFBSUMsTUFBTSxDQUFDeEIsVUFBVXVCLE9BQU8sR0FBR0UsR0FBRyxDQUFDLENBQUNDLEdBQUdaO1FBQzNJLE1BQU1MLE1BQU1pQixFQUFFakIsR0FBRyxJQUFJSztRQUNyQixJQUFJYSxLQUF5Ri9DLEVBQUUsRUFlOUY7UUFDRCxJQUFJK0MsSUFBc0MsRUFBRTtZQUN4Qyx5REFBeUQ7WUFDekQsSUFBSUQsRUFBRXJDLElBQUksS0FBSyxZQUFZcUMsRUFBRWhDLEtBQUssQ0FBQyxPQUFPLEtBQUssdUJBQXVCO2dCQUNsRSxNQUFNMEMsYUFBYVYsRUFBRWhDLEtBQUssQ0FBQyxNQUFNLEdBQUcsNEJBQTRCZ0MsRUFBRWhDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTTtnQkFDdEYsSUFBR2YsVUFBVTBELFFBQVEsRUFBRSxtREFBbURELGFBQWE7WUFDNUYsT0FBTyxJQUFJVixFQUFFckMsSUFBSSxLQUFLLFVBQVVxQyxFQUFFaEMsS0FBSyxDQUFDLE1BQU0sS0FBSyxjQUFjO2dCQUM1RCxJQUFHZixVQUFVMEQsUUFBUSxFQUFFLHdGQUF3RlgsRUFBRWhDLEtBQUssQ0FBQyxPQUFPLEdBQUc7WUFDdEk7UUFDSjtRQUNBLE9BQU8sV0FBVyxHQUFHckIsT0FBT1osT0FBTyxDQUFDMEUsWUFBWSxDQUFDVCxHQUFHO1lBQ2hEakI7UUFDSjtJQUNKO0FBQ0o7QUFDQTs7O0NBR0MsR0FBRyxTQUFTNkIsS0FBS0MsS0FBSztJQUNuQixJQUFJLEVBQUU1QyxRQUFRLEVBQUUsR0FBRzRDO0lBQ25CLE1BQU1DLFdBQVcsQ0FBQyxHQUFHbkUsT0FBT29FLFVBQVUsRUFBRWpFLHlCQUF5QmtFLGVBQWU7SUFDaEYsTUFBTUMsY0FBYyxDQUFDLEdBQUd0RSxPQUFPb0UsVUFBVSxFQUFFaEUsaUNBQWlDbUUsa0JBQWtCO0lBQzlGLE9BQXFCLFdBQUgsR0FBSSxJQUFHeEUsWUFBWVUsR0FBRyxFQUFFUCxZQUFZZCxPQUFPLEVBQUU7UUFDM0RvRix5QkFBeUJ4QjtRQUN6QnNCLGFBQWFBO1FBQ2IvRCxXQUFXLENBQUMsR0FBR0YsU0FBU29FLFdBQVcsRUFBRU47UUFDckM3QyxVQUFVQTtJQUNkO0FBQ0o7S0FWYTJDO0FBV2IsTUFBTXRFLFdBQVdzRTtBQUVqQixJQUFJLENBQUMsT0FBT2pGLFFBQVFJLE9BQU8sS0FBSyxjQUFlLE9BQU9KLFFBQVFJLE9BQU8sS0FBSyxZQUFZSixRQUFRSSxPQUFPLEtBQUssSUFBSSxLQUFNLE9BQU9KLFFBQVFJLE9BQU8sQ0FBQ3NGLFVBQVUsS0FBSyxhQUFhO0lBQ3JLNUYsT0FBT0MsY0FBYyxDQUFDQyxRQUFRSSxPQUFPLEVBQUUsY0FBYztRQUFFSCxPQUFPO0lBQUs7SUFDbkVILE9BQU82RixNQUFNLENBQUMzRixRQUFRSSxPQUFPLEVBQUVKO0lBQy9CRSxPQUFPRixPQUFPLEdBQUdBLFFBQVFJLE9BQU87QUFDbEMsRUFFQSxnQ0FBZ0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2hlYWQuanM/ZmI1ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBkZWZhdWx0SGVhZDogbnVsbCxcbiAgICBkZWZhdWx0OiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGRlZmF1bHRIZWFkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRIZWFkO1xuICAgIH0sXG4gICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfZGVmYXVsdDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBfc2lkZWVmZmVjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4vc2lkZS1lZmZlY3RcIikpO1xuY29uc3QgX2FtcGNvbnRleHRzaGFyZWRydW50aW1lID0gcmVxdWlyZShcIi4vYW1wLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWVcIik7XG5jb25zdCBfaGVhZG1hbmFnZXJjb250ZXh0c2hhcmVkcnVudGltZSA9IHJlcXVpcmUoXCIuL2hlYWQtbWFuYWdlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX2FtcG1vZGUgPSByZXF1aXJlKFwiLi9hbXAtbW9kZVwiKTtcbmNvbnN0IF93YXJub25jZSA9IHJlcXVpcmUoXCIuL3V0aWxzL3dhcm4tb25jZVwiKTtcbmZ1bmN0aW9uIGRlZmF1bHRIZWFkKGluQW1wTW9kZSkge1xuICAgIGlmIChpbkFtcE1vZGUgPT09IHZvaWQgMCkgaW5BbXBNb2RlID0gZmFsc2U7XG4gICAgY29uc3QgaGVhZCA9IFtcbiAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcIm1ldGFcIiwge1xuICAgICAgICAgICAgY2hhclNldDogXCJ1dGYtOFwiXG4gICAgICAgIH0pXG4gICAgXTtcbiAgICBpZiAoIWluQW1wTW9kZSkge1xuICAgICAgICBoZWFkLnB1c2goLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcIm1ldGFcIiwge1xuICAgICAgICAgICAgbmFtZTogXCJ2aWV3cG9ydFwiLFxuICAgICAgICAgICAgY29udGVudDogXCJ3aWR0aD1kZXZpY2Utd2lkdGhcIlxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBoZWFkO1xufVxuZnVuY3Rpb24gb25seVJlYWN0RWxlbWVudChsaXN0LCBjaGlsZCkge1xuICAgIC8vIFJlYWN0IGNoaWxkcmVuIGNhbiBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCIgaW4gdGhpcyBjYXNlIHdlIGlnbm9yZSB0aGVtIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgY2hpbGQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuICAgIC8vIEFkZHMgc3VwcG9ydCBmb3IgUmVhY3QuRnJhZ21lbnRcbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gX3JlYWN0LmRlZmF1bHQuRnJhZ21lbnQpIHtcbiAgICAgICAgcmV0dXJuIGxpc3QuY29uY2F0KC8vIEB0cy1leHBlY3QtZXJyb3IgQHR5cGVzL3JlYWN0IGRvZXMgbm90IHJlbW92ZSBmcmFnbWVudHMgYnV0IHRoaXMgY291bGQgYWxzbyByZXR1cm4gUmVhY3RQb3J0YWxbXVxuICAgICAgICBfcmVhY3QuZGVmYXVsdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkLnByb3BzLmNoaWxkcmVuKS5yZWR1Y2UoLy8gQHRzLWV4cGVjdC1lcnJvciBAdHlwZXMvcmVhY3QgZG9lcyBub3QgcmVtb3ZlIGZyYWdtZW50cyBidXQgdGhpcyBjb3VsZCBhbHNvIHJldHVybiBSZWFjdFBvcnRhbFtdXG4gICAgICAgIChmcmFnbWVudExpc3QsIGZyYWdtZW50Q2hpbGQpPT57XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZyYWdtZW50Q2hpbGQgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGZyYWdtZW50Q2hpbGQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnRMaXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50TGlzdC5jb25jYXQoZnJhZ21lbnRDaGlsZCk7XG4gICAgICAgIH0sIFtdKSk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0LmNvbmNhdChjaGlsZCk7XG59XG5jb25zdCBNRVRBVFlQRVMgPSBbXG4gICAgXCJuYW1lXCIsXG4gICAgXCJodHRwRXF1aXZcIixcbiAgICBcImNoYXJTZXRcIixcbiAgICBcIml0ZW1Qcm9wXCJcbl07XG4vKlxuIHJldHVybnMgYSBmdW5jdGlvbiBmb3IgZmlsdGVyaW5nIGhlYWQgY2hpbGQgZWxlbWVudHNcbiB3aGljaCBzaG91bGRuJ3QgYmUgZHVwbGljYXRlZCwgbGlrZSA8dGl0bGUvPlxuIEFsc28gYWRkcyBzdXBwb3J0IGZvciBkZWR1cGxpY2F0ZWQgYGtleWAgcHJvcGVydGllc1xuKi8gZnVuY3Rpb24gdW5pcXVlKCkge1xuICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdCBtZXRhVHlwZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgbWV0YUNhdGVnb3JpZXMgPSB7fTtcbiAgICByZXR1cm4gKGgpPT57XG4gICAgICAgIGxldCBpc1VuaXF1ZSA9IHRydWU7XG4gICAgICAgIGxldCBoYXNLZXkgPSBmYWxzZTtcbiAgICAgICAgaWYgKGgua2V5ICYmIHR5cGVvZiBoLmtleSAhPT0gXCJudW1iZXJcIiAmJiBoLmtleS5pbmRleE9mKFwiJFwiKSA+IDApIHtcbiAgICAgICAgICAgIGhhc0tleSA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBoLmtleS5zbGljZShoLmtleS5pbmRleE9mKFwiJFwiKSArIDEpO1xuICAgICAgICAgICAgaWYgKGtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBpc1VuaXF1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICAgICAgc3dpdGNoKGgudHlwZSl7XG4gICAgICAgICAgICBjYXNlIFwidGl0bGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlXCI6XG4gICAgICAgICAgICAgICAgaWYgKHRhZ3MuaGFzKGgudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNVbmlxdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YWdzLmFkZChoLnR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZXRhXCI6XG4gICAgICAgICAgICAgICAgZm9yKGxldCBpID0gMCwgbGVuID0gTUVUQVRZUEVTLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBNRVRBVFlQRVNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghaC5wcm9wcy5oYXNPd25Qcm9wZXJ0eShtZXRhdHlwZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWV0YXR5cGUgPT09IFwiY2hhclNldFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWV0YVR5cGVzLmhhcyhtZXRhdHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1VuaXF1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhVHlwZXMuYWRkKG1ldGF0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gaC5wcm9wc1ttZXRhdHlwZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gbWV0YUNhdGVnb3JpZXNbbWV0YXR5cGVdIHx8IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWV0YXR5cGUgIT09IFwibmFtZVwiIHx8ICFoYXNLZXkpICYmIGNhdGVnb3JpZXMuaGFzKGNhdGVnb3J5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVW5pcXVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhQ2F0ZWdvcmllc1ttZXRhdHlwZV0gPSBjYXRlZ29yaWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1VuaXF1ZTtcbiAgICB9O1xufVxuLyoqXG4gKlxuICogQHBhcmFtIGhlYWRDaGlsZHJlbkVsZW1lbnRzIExpc3Qgb2YgY2hpbGRyZW4gb2YgPEhlYWQ+XG4gKi8gZnVuY3Rpb24gcmVkdWNlQ29tcG9uZW50cyhoZWFkQ2hpbGRyZW5FbGVtZW50cywgcHJvcHMpIHtcbiAgICBjb25zdCB7IGluQW1wTW9kZSB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIGhlYWRDaGlsZHJlbkVsZW1lbnRzLnJlZHVjZShvbmx5UmVhY3RFbGVtZW50LCBbXSkucmV2ZXJzZSgpLmNvbmNhdChkZWZhdWx0SGVhZChpbkFtcE1vZGUpLnJldmVyc2UoKSkuZmlsdGVyKHVuaXF1ZSgpKS5yZXZlcnNlKCkubWFwKChjLCBpKT0+e1xuICAgICAgICBjb25zdCBrZXkgPSBjLmtleSB8fCBpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwiZGV2ZWxvcG1lbnRcIiAmJiBwcm9jZXNzLmVudi5fX05FWFRfT1BUSU1JWkVfRk9OVFMgJiYgIWluQW1wTW9kZSkge1xuICAgICAgICAgICAgaWYgKGMudHlwZSA9PT0gXCJsaW5rXCIgJiYgYy5wcm9wc1tcImhyZWZcIl0gJiYgLy8gVE9ETyhwcmF0ZWVrYmhAKTogUmVwbGFjZSB0aGlzIHdpdGggY29uc3QgZnJvbSBgY29uc3RhbnRzYCB3aGVuIHRoZSB0cmVlIHNoYWtpbmcgd29ya3MuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzc1wiLFxuICAgICAgICAgICAgICAgIFwiaHR0cHM6Ly91c2UudHlwZWtpdC5uZXQvXCJcbiAgICAgICAgICAgIF0uc29tZSgodXJsKT0+Yy5wcm9wc1tcImhyZWZcIl0uc3RhcnRzV2l0aCh1cmwpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Byb3BzID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jLnByb3BzIHx8IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBuZXdQcm9wc1tcImRhdGEtaHJlZlwiXSA9IG5ld1Byb3BzW1wiaHJlZlwiXTtcbiAgICAgICAgICAgICAgICBuZXdQcm9wc1tcImhyZWZcIl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgYXR0cmlidXRlIHRvIG1ha2UgaXQgZWFzeSB0byBpZGVudGlmeSBvcHRpbWl6ZWQgdGFnc1xuICAgICAgICAgICAgICAgIG5ld1Byb3BzW1wiZGF0YS1vcHRpbWl6ZWQtZm9udHNcIl0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovIF9yZWFjdC5kZWZhdWx0LmNsb25lRWxlbWVudChjLCBuZXdQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgICAgIC8vIG9taXQgSlNPTi1MRCBzdHJ1Y3R1cmVkIGRhdGEgc25pcHBldHMgZnJvbSB0aGUgd2FybmluZ1xuICAgICAgICAgICAgaWYgKGMudHlwZSA9PT0gXCJzY3JpcHRcIiAmJiBjLnByb3BzW1widHlwZVwiXSAhPT0gXCJhcHBsaWNhdGlvbi9sZCtqc29uXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcmNNZXNzYWdlID0gYy5wcm9wc1tcInNyY1wiXSA/ICc8c2NyaXB0PiB0YWcgd2l0aCBzcmM9XCInICsgYy5wcm9wc1tcInNyY1wiXSArICdcIicgOiBcImlubGluZSA8c2NyaXB0PlwiO1xuICAgICAgICAgICAgICAgICgwLCBfd2Fybm9uY2Uud2Fybk9uY2UpKFwiRG8gbm90IGFkZCA8c2NyaXB0PiB0YWdzIHVzaW5nIG5leHQvaGVhZCAoc2VlIFwiICsgc3JjTWVzc2FnZSArIFwiKS4gVXNlIG5leHQvc2NyaXB0IGluc3RlYWQuIFxcblNlZSBtb3JlIGluZm8gaGVyZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbm8tc2NyaXB0LXRhZ3MtaW4taGVhZC1jb21wb25lbnRcIik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMudHlwZSA9PT0gXCJsaW5rXCIgJiYgYy5wcm9wc1tcInJlbFwiXSA9PT0gXCJzdHlsZXNoZWV0XCIpIHtcbiAgICAgICAgICAgICAgICAoMCwgX3dhcm5vbmNlLndhcm5PbmNlKSgnRG8gbm90IGFkZCBzdHlsZXNoZWV0cyB1c2luZyBuZXh0L2hlYWQgKHNlZSA8bGluayByZWw9XCJzdHlsZXNoZWV0XCI+IHRhZyB3aXRoIGhyZWY9XCInICsgYy5wcm9wc1tcImhyZWZcIl0gKyAnXCIpLiBVc2UgRG9jdW1lbnQgaW5zdGVhZC4gXFxuU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uby1zdHlsZXNoZWV0cy1pbi1oZWFkLWNvbXBvbmVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovIF9yZWFjdC5kZWZhdWx0LmNsb25lRWxlbWVudChjLCB7XG4gICAgICAgICAgICBrZXlcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vKipcbiAqIFRoaXMgY29tcG9uZW50IGluamVjdHMgZWxlbWVudHMgdG8gYDxoZWFkPmAgb2YgeW91ciBwYWdlLlxuICogVG8gYXZvaWQgZHVwbGljYXRlZCBgdGFnc2AgaW4gYDxoZWFkPmAgeW91IGNhbiB1c2UgdGhlIGBrZXlgIHByb3BlcnR5LCB3aGljaCB3aWxsIG1ha2Ugc3VyZSBldmVyeSB0YWcgaXMgb25seSByZW5kZXJlZCBvbmNlLlxuICovIGZ1bmN0aW9uIEhlYWQocGFyYW0pIHtcbiAgICBsZXQgeyBjaGlsZHJlbiB9ID0gcGFyYW07XG4gICAgY29uc3QgYW1wU3RhdGUgPSAoMCwgX3JlYWN0LnVzZUNvbnRleHQpKF9hbXBjb250ZXh0c2hhcmVkcnVudGltZS5BbXBTdGF0ZUNvbnRleHQpO1xuICAgIGNvbnN0IGhlYWRNYW5hZ2VyID0gKDAsIF9yZWFjdC51c2VDb250ZXh0KShfaGVhZG1hbmFnZXJjb250ZXh0c2hhcmVkcnVudGltZS5IZWFkTWFuYWdlckNvbnRleHQpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9zaWRlZWZmZWN0LmRlZmF1bHQsIHtcbiAgICAgICAgcmVkdWNlQ29tcG9uZW50c1RvU3RhdGU6IHJlZHVjZUNvbXBvbmVudHMsXG4gICAgICAgIGhlYWRNYW5hZ2VyOiBoZWFkTWFuYWdlcixcbiAgICAgICAgaW5BbXBNb2RlOiAoMCwgX2FtcG1vZGUuaXNJbkFtcE1vZGUpKGFtcFN0YXRlKSxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSk7XG59XG5jb25zdCBfZGVmYXVsdCA9IEhlYWQ7XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlYWQuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiZGVmYXVsdEhlYWQiLCJkZWZhdWx0IiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2RlZmF1bHQiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9zaWRlZWZmZWN0IiwiX2FtcGNvbnRleHRzaGFyZWRydW50aW1lIiwiX2hlYWRtYW5hZ2VyY29udGV4dHNoYXJlZHJ1bnRpbWUiLCJfYW1wbW9kZSIsIl93YXJub25jZSIsImluQW1wTW9kZSIsImhlYWQiLCJqc3giLCJjaGFyU2V0IiwicHVzaCIsImNvbnRlbnQiLCJvbmx5UmVhY3RFbGVtZW50IiwibGlzdCIsImNoaWxkIiwidHlwZSIsIkZyYWdtZW50IiwiY29uY2F0IiwiQ2hpbGRyZW4iLCJ0b0FycmF5IiwicHJvcHMiLCJjaGlsZHJlbiIsInJlZHVjZSIsImZyYWdtZW50TGlzdCIsImZyYWdtZW50Q2hpbGQiLCJNRVRBVFlQRVMiLCJ1bmlxdWUiLCJrZXlzIiwiU2V0IiwidGFncyIsIm1ldGFUeXBlcyIsIm1ldGFDYXRlZ29yaWVzIiwiaCIsImlzVW5pcXVlIiwiaGFzS2V5Iiwia2V5IiwiaW5kZXhPZiIsInNsaWNlIiwiaGFzIiwiYWRkIiwiaSIsImxlbiIsImxlbmd0aCIsIm1ldGF0eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYXRlZ29yeSIsImNhdGVnb3JpZXMiLCJyZWR1Y2VDb21wb25lbnRzIiwiaGVhZENoaWxkcmVuRWxlbWVudHMiLCJyZXZlcnNlIiwiZmlsdGVyIiwibWFwIiwiYyIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfT1BUSU1JWkVfRk9OVFMiLCJzb21lIiwidXJsIiwic3RhcnRzV2l0aCIsIm5ld1Byb3BzIiwidW5kZWZpbmVkIiwiY2xvbmVFbGVtZW50Iiwic3JjTWVzc2FnZSIsIndhcm5PbmNlIiwiSGVhZCIsInBhcmFtIiwiYW1wU3RhdGUiLCJ1c2VDb250ZXh0IiwiQW1wU3RhdGVDb250ZXh0IiwiaGVhZE1hbmFnZXIiLCJIZWFkTWFuYWdlckNvbnRleHQiLCJyZWR1Y2VDb21wb25lbnRzVG9TdGF0ZSIsImlzSW5BbXBNb2RlIiwiX19lc01vZHVsZSIsImFzc2lnbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/head.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js ***! + \**********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n SearchParamsContext: function() {\n return SearchParamsContext;\n },\n PathnameContext: function() {\n return PathnameContext;\n },\n PathParamsContext: function() {\n return PathParamsContext;\n }\n});\nconst _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nconst SearchParamsContext = (0, _react.createContext)(null);\nconst PathnameContext = (0, _react.createContext)(null);\nconst PathParamsContext = (0, _react.createContext)(null);\nif (true) {\n SearchParamsContext.displayName = \"SearchParamsContext\";\n PathnameContext.displayName = \"PathnameContext\";\n PathParamsContext.displayName = \"PathParamsContext\";\n} //# sourceMappingURL=hooks-client-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaG9va3MtY2xpZW50LWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6InFEQUVhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBSU47QUFDQSxTQUFTSSxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVixPQUFPQyxjQUFjLENBQUNRLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUU4sU0FBUztJQUNiRyxxQkFBcUI7UUFDakIsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0lBQ0FDLG1CQUFtQjtRQUNmLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLFNBQVNDLG1CQUFPQSxDQUFDLDRDQUFPO0FBQzlCLE1BQU1WLHNCQUFzQixDQUFDLEdBQUdTLE9BQU9FLGFBQWEsRUFBRTtBQUN0RCxNQUFNVixrQkFBa0IsQ0FBQyxHQUFHUSxPQUFPRSxhQUFhLEVBQUU7QUFDbEQsTUFBTVQsb0JBQW9CLENBQUMsR0FBR08sT0FBT0UsYUFBYSxFQUFFO0FBQ3BELElBQUlDLElBQXFDLEVBQUU7SUFDdkNaLG9CQUFvQmEsV0FBVyxHQUFHO0lBQ2xDWixnQkFBZ0JZLFdBQVcsR0FBRztJQUM5Qlgsa0JBQWtCVyxXQUFXLEdBQUc7QUFDcEMsRUFFQSwrREFBK0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2hvb2tzLWNsaWVudC1jb250ZXh0LnNoYXJlZC1ydW50aW1lLmpzPzdhNjUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgU2VhcmNoUGFyYW1zQ29udGV4dDogbnVsbCxcbiAgICBQYXRobmFtZUNvbnRleHQ6IG51bGwsXG4gICAgUGF0aFBhcmFtc0NvbnRleHQ6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgU2VhcmNoUGFyYW1zQ29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTZWFyY2hQYXJhbXNDb250ZXh0O1xuICAgIH0sXG4gICAgUGF0aG5hbWVDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBhdGhuYW1lQ29udGV4dDtcbiAgICB9LFxuICAgIFBhdGhQYXJhbXNDb250ZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBhdGhQYXJhbXNDb250ZXh0O1xuICAgIH1cbn0pO1xuY29uc3QgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuY29uc3QgU2VhcmNoUGFyYW1zQ29udGV4dCA9ICgwLCBfcmVhY3QuY3JlYXRlQ29udGV4dCkobnVsbCk7XG5jb25zdCBQYXRobmFtZUNvbnRleHQgPSAoMCwgX3JlYWN0LmNyZWF0ZUNvbnRleHQpKG51bGwpO1xuY29uc3QgUGF0aFBhcmFtc0NvbnRleHQgPSAoMCwgX3JlYWN0LmNyZWF0ZUNvbnRleHQpKG51bGwpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIFNlYXJjaFBhcmFtc0NvbnRleHQuZGlzcGxheU5hbWUgPSBcIlNlYXJjaFBhcmFtc0NvbnRleHRcIjtcbiAgICBQYXRobmFtZUNvbnRleHQuZGlzcGxheU5hbWUgPSBcIlBhdGhuYW1lQ29udGV4dFwiO1xuICAgIFBhdGhQYXJhbXNDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJQYXRoUGFyYW1zQ29udGV4dFwiO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZS5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJTZWFyY2hQYXJhbXNDb250ZXh0IiwiUGF0aG5hbWVDb250ZXh0IiwiUGF0aFBhcmFtc0NvbnRleHQiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfcmVhY3QiLCJyZXF1aXJlIiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js": +/*!*************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js ***! + \*************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizeLocalePath\", ({\n enumerable: true,\n get: function() {\n return normalizeLocalePath;\n }\n}));\nfunction normalizeLocalePath(pathname, locales) {\n let detectedLocale;\n // first item will be empty string from splitting at first char\n const pathnameParts = pathname.split(\"/\");\n (locales || []).some((locale)=>{\n if (pathnameParts[1] && pathnameParts[1].toLowerCase() === locale.toLowerCase()) {\n detectedLocale = locale;\n pathnameParts.splice(1, 1);\n pathname = pathnameParts.join(\"/\") || \"/\";\n return true;\n }\n return false;\n });\n return {\n pathname,\n detectedLocale\n };\n} //# sourceMappingURL=normalize-locale-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaTE4bi9ub3JtYWxpemUtbG9jYWxlLXBhdGguanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHVEQUFzRDtJQUNsREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLG9CQUFvQkMsUUFBUSxFQUFFQyxPQUFPO0lBQzFDLElBQUlDO0lBQ0osK0RBQStEO0lBQy9ELE1BQU1DLGdCQUFnQkgsU0FBU0ksS0FBSyxDQUFDO0lBQ3BDSCxDQUFBQSxXQUFXLEVBQUUsRUFBRUksSUFBSSxDQUFDLENBQUNDO1FBQ2xCLElBQUlILGFBQWEsQ0FBQyxFQUFFLElBQUlBLGFBQWEsQ0FBQyxFQUFFLENBQUNJLFdBQVcsT0FBT0QsT0FBT0MsV0FBVyxJQUFJO1lBQzdFTCxpQkFBaUJJO1lBQ2pCSCxjQUFjSyxNQUFNLENBQUMsR0FBRztZQUN4QlIsV0FBV0csY0FBY00sSUFBSSxDQUFDLFFBQVE7WUFDdEMsT0FBTztRQUNYO1FBQ0EsT0FBTztJQUNYO0lBQ0EsT0FBTztRQUNIVDtRQUNBRTtJQUNKO0FBQ0osRUFFQSxpREFBaUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2kxOG4vbm9ybWFsaXplLWxvY2FsZS1wYXRoLmpzPzA0M2IiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJub3JtYWxpemVMb2NhbGVQYXRoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVMb2NhbGVQYXRoO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlUGF0aChwYXRobmFtZSwgbG9jYWxlcykge1xuICAgIGxldCBkZXRlY3RlZExvY2FsZTtcbiAgICAvLyBmaXJzdCBpdGVtIHdpbGwgYmUgZW1wdHkgc3RyaW5nIGZyb20gc3BsaXR0aW5nIGF0IGZpcnN0IGNoYXJcbiAgICBjb25zdCBwYXRobmFtZVBhcnRzID0gcGF0aG5hbWUuc3BsaXQoXCIvXCIpO1xuICAgIChsb2NhbGVzIHx8IFtdKS5zb21lKChsb2NhbGUpPT57XG4gICAgICAgIGlmIChwYXRobmFtZVBhcnRzWzFdICYmIHBhdGhuYW1lUGFydHNbMV0udG9Mb3dlckNhc2UoKSA9PT0gbG9jYWxlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGRldGVjdGVkTG9jYWxlID0gbG9jYWxlO1xuICAgICAgICAgICAgcGF0aG5hbWVQYXJ0cy5zcGxpY2UoMSwgMSk7XG4gICAgICAgICAgICBwYXRobmFtZSA9IHBhdGhuYW1lUGFydHMuam9pbihcIi9cIikgfHwgXCIvXCI7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgIGRldGVjdGVkTG9jYWxlXG4gICAgfTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9ybWFsaXplLWxvY2FsZS1wYXRoLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJub3JtYWxpemVMb2NhbGVQYXRoIiwicGF0aG5hbWUiLCJsb2NhbGVzIiwiZGV0ZWN0ZWRMb2NhbGUiLCJwYXRobmFtZVBhcnRzIiwic3BsaXQiLCJzb21lIiwibG9jYWxlIiwidG9Mb3dlckNhc2UiLCJzcGxpY2UiLCJqb2luIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js ***! + \**********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ImageConfigContext\", ({\n enumerable: true,\n get: function() {\n return ImageConfigContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _imageconfig = __webpack_require__(/*! ./image-config */ \"./node_modules/next/dist/shared/lib/image-config.js\");\nconst ImageConfigContext = _react.default.createContext(_imageconfig.imageConfigDefault);\nif (true) {\n ImageConfigContext.displayName = \"ImageConfigContext\";\n} //# sourceMappingURL=image-config-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaW1hZ2UtY29uZmlnLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsNEdBQXlDO0FBQ2xGLE1BQU1DLFNBQVMsV0FBVyxHQUFHRix5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsNENBQU87QUFDdkUsTUFBTUcsZUFBZUgsbUJBQU9BLENBQUMsMkVBQWdCO0FBQzdDLE1BQU1GLHFCQUFxQkcsT0FBT0csT0FBTyxDQUFDQyxhQUFhLENBQUNGLGFBQWFHLGtCQUFrQjtBQUN2RixJQUFJQyxJQUFxQyxFQUFFO0lBQ3ZDVCxtQkFBbUJVLFdBQVcsR0FBRztBQUNyQyxFQUVBLCtEQUErRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaW1hZ2UtY29uZmlnLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanM/Mjc4YiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkltYWdlQ29uZmlnQ29udGV4dFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSW1hZ2VDb25maWdDb250ZXh0O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9pbWFnZWNvbmZpZyA9IHJlcXVpcmUoXCIuL2ltYWdlLWNvbmZpZ1wiKTtcbmNvbnN0IEltYWdlQ29uZmlnQ29udGV4dCA9IF9yZWFjdC5kZWZhdWx0LmNyZWF0ZUNvbnRleHQoX2ltYWdlY29uZmlnLmltYWdlQ29uZmlnRGVmYXVsdCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgSW1hZ2VDb25maWdDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJJbWFnZUNvbmZpZ0NvbnRleHRcIjtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW1hZ2UtY29uZmlnLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIkltYWdlQ29uZmlnQ29udGV4dCIsIl9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCIsInJlcXVpcmUiLCJfcmVhY3QiLCJfIiwiX2ltYWdlY29uZmlnIiwiZGVmYXVsdCIsImNyZWF0ZUNvbnRleHQiLCJpbWFnZUNvbmZpZ0RlZmF1bHQiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/image-config.js": +/*!***********************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/image-config.js ***! + \***********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n VALID_LOADERS: function() {\n return VALID_LOADERS;\n },\n imageConfigDefault: function() {\n return imageConfigDefault;\n }\n});\nconst VALID_LOADERS = [\n \"default\",\n \"imgix\",\n \"cloudinary\",\n \"akamai\",\n \"custom\"\n];\nconst imageConfigDefault = {\n deviceSizes: [\n 640,\n 750,\n 828,\n 1080,\n 1200,\n 1920,\n 2048,\n 3840\n ],\n imageSizes: [\n 16,\n 32,\n 48,\n 64,\n 96,\n 128,\n 256,\n 384\n ],\n path: \"/_next/image\",\n loader: \"default\",\n loaderFile: \"\",\n domains: [],\n disableStaticImages: false,\n minimumCacheTTL: 60,\n formats: [\n \"image/webp\"\n ],\n dangerouslyAllowSVG: false,\n contentSecurityPolicy: \"script-src 'none'; frame-src 'none'; sandbox;\",\n contentDispositionType: \"inline\",\n remotePatterns: [],\n unoptimized: false\n}; //# sourceMappingURL=image-config.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaW1hZ2UtY29uZmlnLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxlQUFlO1FBQ1gsT0FBT0E7SUFDWDtJQUNBQyxvQkFBb0I7UUFDaEIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTUQsZ0JBQWdCO0lBQ2xCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDSDtBQUNELE1BQU1DLHFCQUFxQjtJQUN2Qk8sYUFBYTtRQUNUO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7S0FDSDtJQUNEQyxZQUFZO1FBQ1I7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNIO0lBQ0RDLE1BQU07SUFDTkMsUUFBUTtJQUNSQyxZQUFZO0lBQ1pDLFNBQVMsRUFBRTtJQUNYQyxxQkFBcUI7SUFDckJDLGlCQUFpQjtJQUNqQkMsU0FBUztRQUNMO0tBQ0g7SUFDREMscUJBQXFCO0lBQ3JCQyx1QkFBdUI7SUFDdkJDLHdCQUF3QjtJQUN4QkMsZ0JBQWdCLEVBQUU7SUFDbEJDLGFBQWE7QUFDakIsR0FFQSx3Q0FBd0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2ltYWdlLWNvbmZpZy5qcz8zMTI2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVkFMSURfTE9BREVSUzogbnVsbCxcbiAgICBpbWFnZUNvbmZpZ0RlZmF1bHQ6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgVkFMSURfTE9BREVSUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBWQUxJRF9MT0FERVJTO1xuICAgIH0sXG4gICAgaW1hZ2VDb25maWdEZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGltYWdlQ29uZmlnRGVmYXVsdDtcbiAgICB9XG59KTtcbmNvbnN0IFZBTElEX0xPQURFUlMgPSBbXG4gICAgXCJkZWZhdWx0XCIsXG4gICAgXCJpbWdpeFwiLFxuICAgIFwiY2xvdWRpbmFyeVwiLFxuICAgIFwiYWthbWFpXCIsXG4gICAgXCJjdXN0b21cIlxuXTtcbmNvbnN0IGltYWdlQ29uZmlnRGVmYXVsdCA9IHtcbiAgICBkZXZpY2VTaXplczogW1xuICAgICAgICA2NDAsXG4gICAgICAgIDc1MCxcbiAgICAgICAgODI4LFxuICAgICAgICAxMDgwLFxuICAgICAgICAxMjAwLFxuICAgICAgICAxOTIwLFxuICAgICAgICAyMDQ4LFxuICAgICAgICAzODQwXG4gICAgXSxcbiAgICBpbWFnZVNpemVzOiBbXG4gICAgICAgIDE2LFxuICAgICAgICAzMixcbiAgICAgICAgNDgsXG4gICAgICAgIDY0LFxuICAgICAgICA5NixcbiAgICAgICAgMTI4LFxuICAgICAgICAyNTYsXG4gICAgICAgIDM4NFxuICAgIF0sXG4gICAgcGF0aDogXCIvX25leHQvaW1hZ2VcIixcbiAgICBsb2FkZXI6IFwiZGVmYXVsdFwiLFxuICAgIGxvYWRlckZpbGU6IFwiXCIsXG4gICAgZG9tYWluczogW10sXG4gICAgZGlzYWJsZVN0YXRpY0ltYWdlczogZmFsc2UsXG4gICAgbWluaW11bUNhY2hlVFRMOiA2MCxcbiAgICBmb3JtYXRzOiBbXG4gICAgICAgIFwiaW1hZ2Uvd2VicFwiXG4gICAgXSxcbiAgICBkYW5nZXJvdXNseUFsbG93U1ZHOiBmYWxzZSxcbiAgICBjb250ZW50U2VjdXJpdHlQb2xpY3k6IFwic2NyaXB0LXNyYyAnbm9uZSc7IGZyYW1lLXNyYyAnbm9uZSc7IHNhbmRib3g7XCIsXG4gICAgY29udGVudERpc3Bvc2l0aW9uVHlwZTogXCJpbmxpbmVcIixcbiAgICByZW1vdGVQYXR0ZXJuczogW10sXG4gICAgdW5vcHRpbWl6ZWQ6IGZhbHNlXG59O1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS1jb25maWcuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiVkFMSURfTE9BREVSUyIsImltYWdlQ29uZmlnRGVmYXVsdCIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsImRldmljZVNpemVzIiwiaW1hZ2VTaXplcyIsInBhdGgiLCJsb2FkZXIiLCJsb2FkZXJGaWxlIiwiZG9tYWlucyIsImRpc2FibGVTdGF0aWNJbWFnZXMiLCJtaW5pbXVtQ2FjaGVUVEwiLCJmb3JtYXRzIiwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyIsImNvbnRlbnRTZWN1cml0eVBvbGljeSIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiLCJyZW1vdGVQYXR0ZXJucyIsInVub3B0aW1pemVkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/image-config.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/is-plain-object.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/is-plain-object.js ***! + \**************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getObjectClassLabel: function() {\n return getObjectClassLabel;\n },\n isPlainObject: function() {\n return isPlainObject;\n }\n});\nfunction getObjectClassLabel(value) {\n return Object.prototype.toString.call(value);\n}\nfunction isPlainObject(value) {\n if (getObjectClassLabel(value) !== \"[object Object]\") {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n /**\n * this used to be previously:\n *\n * `return prototype === null || prototype === Object.prototype`\n *\n * but Edge Runtime expose Object from vm, being that kind of type-checking wrongly fail.\n *\n * It was changed to the current implementation since it's resilient to serialization.\n */ return prototype === null || prototype.hasOwnProperty(\"isPrototypeOf\");\n} //# sourceMappingURL=is-plain-object.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvaXMtcGxhaW4tb2JqZWN0LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxxQkFBcUI7UUFDakIsT0FBT0E7SUFDWDtJQUNBQyxlQUFlO1FBQ1gsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsU0FBU0Qsb0JBQW9CRixLQUFLO0lBQzlCLE9BQU9ILE9BQU9hLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJLENBQUNaO0FBQzFDO0FBQ0EsU0FBU0csY0FBY0gsS0FBSztJQUN4QixJQUFJRSxvQkFBb0JGLFdBQVcsbUJBQW1CO1FBQ2xELE9BQU87SUFDWDtJQUNBLE1BQU1VLFlBQVliLE9BQU9nQixjQUFjLENBQUNiO0lBQ3hDOzs7Ozs7OztHQVFELEdBQUcsT0FBT1UsY0FBYyxRQUFRQSxVQUFVSSxjQUFjLENBQUM7QUFDNUQsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2lzLXBsYWluLW9iamVjdC5qcz8zNzQzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZ2V0T2JqZWN0Q2xhc3NMYWJlbDogbnVsbCxcbiAgICBpc1BsYWluT2JqZWN0OiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGdldE9iamVjdENsYXNzTGFiZWw6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0T2JqZWN0Q2xhc3NMYWJlbDtcbiAgICB9LFxuICAgIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNQbGFpbk9iamVjdDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGdldE9iamVjdENsYXNzTGFiZWwodmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICBpZiAoZ2V0T2JqZWN0Q2xhc3NMYWJlbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgIC8qKlxuICAgKiB0aGlzIHVzZWQgdG8gYmUgcHJldmlvdXNseTpcbiAgICpcbiAgICogYHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlYFxuICAgKlxuICAgKiBidXQgRWRnZSBSdW50aW1lIGV4cG9zZSBPYmplY3QgZnJvbSB2bSwgYmVpbmcgdGhhdCBraW5kIG9mIHR5cGUtY2hlY2tpbmcgd3JvbmdseSBmYWlsLlxuICAgKlxuICAgKiBJdCB3YXMgY2hhbmdlZCB0byB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzaW5jZSBpdCdzIHJlc2lsaWVudCB0byBzZXJpYWxpemF0aW9uLlxuICAgKi8gcmV0dXJuIHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUuaGFzT3duUHJvcGVydHkoXCJpc1Byb3RvdHlwZU9mXCIpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1wbGFpbi1vYmplY3QuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiZ2V0T2JqZWN0Q2xhc3NMYWJlbCIsImlzUGxhaW5PYmplY3QiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJnZXRQcm90b3R5cGVPZiIsImhhc093blByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/is-plain-object.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js ***! + \**************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// This has to be a shared module which is shared between client component error boundary and dynamic component\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n BailoutToCSRError: function() {\n return BailoutToCSRError;\n },\n isBailoutToCSRError: function() {\n return isBailoutToCSRError;\n }\n});\nconst BAILOUT_TO_CSR = \"BAILOUT_TO_CLIENT_SIDE_RENDERING\";\nclass BailoutToCSRError extends Error {\n constructor(reason){\n super(\"Bail out to client-side rendering: \" + reason);\n this.reason = reason;\n this.digest = BAILOUT_TO_CSR;\n }\n}\nfunction isBailoutToCSRError(err) {\n if (typeof err !== \"object\" || err === null || !(\"digest\" in err)) {\n return false;\n }\n return err.digest === BAILOUT_TO_CSR;\n} //# sourceMappingURL=bailout-to-csr.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbGF6eS1keW5hbWljL2JhaWxvdXQtdG8tY3NyLmpzIiwibWFwcGluZ3MiOiJBQUFBLCtHQUErRztBQUNsRztBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxxQkFBcUI7UUFDakIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8saUJBQWlCO0FBQ3ZCLE1BQU1SLDBCQUEwQlM7SUFDNUJDLFlBQVlDLE1BQU0sQ0FBQztRQUNmLEtBQUssQ0FBQyx3Q0FBd0NBO1FBQzlDLElBQUksQ0FBQ0EsTUFBTSxHQUFHQTtRQUNkLElBQUksQ0FBQ0MsTUFBTSxHQUFHSjtJQUNsQjtBQUNKO0FBQ0EsU0FBU1Asb0JBQW9CWSxHQUFHO0lBQzVCLElBQUksT0FBT0EsUUFBUSxZQUFZQSxRQUFRLFFBQVEsQ0FBRSxhQUFZQSxHQUFFLEdBQUk7UUFDL0QsT0FBTztJQUNYO0lBQ0EsT0FBT0EsSUFBSUQsTUFBTSxLQUFLSjtBQUMxQixFQUVBLDBDQUEwQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbGF6eS1keW5hbWljL2JhaWxvdXQtdG8tY3NyLmpzPzAwOTgiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBoYXMgdG8gYmUgYSBzaGFyZWQgbW9kdWxlIHdoaWNoIGlzIHNoYXJlZCBiZXR3ZWVuIGNsaWVudCBjb21wb25lbnQgZXJyb3IgYm91bmRhcnkgYW5kIGR5bmFtaWMgY29tcG9uZW50XG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEJhaWxvdXRUb0NTUkVycm9yOiBudWxsLFxuICAgIGlzQmFpbG91dFRvQ1NSRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgQmFpbG91dFRvQ1NSRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQmFpbG91dFRvQ1NSRXJyb3I7XG4gICAgfSxcbiAgICBpc0JhaWxvdXRUb0NTUkVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzQmFpbG91dFRvQ1NSRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBCQUlMT1VUX1RPX0NTUiA9IFwiQkFJTE9VVF9UT19DTElFTlRfU0lERV9SRU5ERVJJTkdcIjtcbmNsYXNzIEJhaWxvdXRUb0NTUkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHJlYXNvbil7XG4gICAgICAgIHN1cGVyKFwiQmFpbCBvdXQgdG8gY2xpZW50LXNpZGUgcmVuZGVyaW5nOiBcIiArIHJlYXNvbik7XG4gICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgICAgICB0aGlzLmRpZ2VzdCA9IEJBSUxPVVRfVE9fQ1NSO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzQmFpbG91dFRvQ1NSRXJyb3IoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBlcnIgIT09IFwib2JqZWN0XCIgfHwgZXJyID09PSBudWxsIHx8ICEoXCJkaWdlc3RcIiBpbiBlcnIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGVyci5kaWdlc3QgPT09IEJBSUxPVVRfVE9fQ1NSO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYWlsb3V0LXRvLWNzci5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJCYWlsb3V0VG9DU1JFcnJvciIsImlzQmFpbG91dFRvQ1NSRXJyb3IiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJCQUlMT1VUX1RPX0NTUiIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJyZWFzb24iLCJkaWdlc3QiLCJlcnIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/mitt.js": +/*!***************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/mitt.js ***! + \***************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/*\nMIT License\n\nCopyright (c) Jason Miller (https://jasonformat.com/)\n\nPermission 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:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE 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.\n*/ // This file is based on https://github.com/developit/mitt/blob/v1.1.3/src/index.js\n// It's been edited for the needs of this script\n// See the LICENSE at the top of the file\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return mitt;\n }\n}));\nfunction mitt() {\n const all = Object.create(null);\n return {\n on (type, handler) {\n (all[type] || (all[type] = [])).push(handler);\n },\n off (type, handler) {\n if (all[type]) {\n all[type].splice(all[type].indexOf(handler) >>> 0, 1);\n }\n },\n emit (type) {\n for(var _len = arguments.length, evts = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n evts[_key - 1] = arguments[_key];\n }\n (all[type] || []).slice().map((handler)=>{\n handler(...evts);\n });\n }\n };\n} //# sourceMappingURL=mitt.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbWl0dC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztBQVVBLEdBQUcsbUZBQW1GO0FBQ3RGLGdEQUFnRDtBQUNoRCx5Q0FBeUM7QUFDNUI7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBO0lBQ0wsTUFBTUMsTUFBTVAsT0FBT1EsTUFBTSxDQUFDO0lBQzFCLE9BQU87UUFDSEMsSUFBSUMsSUFBSSxFQUFFQyxPQUFPO1lBQ1pKLENBQUFBLEdBQUcsQ0FBQ0csS0FBSyxJQUFLSCxDQUFBQSxHQUFHLENBQUNHLEtBQUssR0FBRyxFQUFFLEdBQUdFLElBQUksQ0FBQ0Q7UUFDekM7UUFDQUUsS0FBS0gsSUFBSSxFQUFFQyxPQUFPO1lBQ2QsSUFBSUosR0FBRyxDQUFDRyxLQUFLLEVBQUU7Z0JBQ1hILEdBQUcsQ0FBQ0csS0FBSyxDQUFDSSxNQUFNLENBQUNQLEdBQUcsQ0FBQ0csS0FBSyxDQUFDSyxPQUFPLENBQUNKLGFBQWEsR0FBRztZQUN2RDtRQUNKO1FBQ0FLLE1BQU1OLElBQUk7WUFDTixJQUFJLElBQUlPLE9BQU9DLFVBQVVDLE1BQU0sRUFBRUMsT0FBTyxJQUFJQyxNQUFNSixPQUFPLElBQUlBLE9BQU8sSUFBSSxJQUFJSyxPQUFPLEdBQUdBLE9BQU9MLE1BQU1LLE9BQU87Z0JBQ3RHRixJQUFJLENBQUNFLE9BQU8sRUFBRSxHQUFHSixTQUFTLENBQUNJLEtBQUs7WUFDcEM7WUFDQ2YsQ0FBQUEsR0FBRyxDQUFDRyxLQUFLLElBQUksRUFBRSxFQUFFYSxLQUFLLEdBQUdDLEdBQUcsQ0FBQyxDQUFDYjtnQkFDM0JBLFdBQVdTO1lBQ2Y7UUFDSjtJQUNKO0FBQ0osRUFFQSxnQ0FBZ0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL21pdHQuanM/ODUxZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSBKYXNvbiBNaWxsZXIgKGh0dHBzOi8vamFzb25mb3JtYXQuY29tLylcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi8gLy8gVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9waXQvbWl0dC9ibG9iL3YxLjEuMy9zcmMvaW5kZXguanNcbi8vIEl0J3MgYmVlbiBlZGl0ZWQgZm9yIHRoZSBuZWVkcyBvZiB0aGlzIHNjcmlwdFxuLy8gU2VlIHRoZSBMSUNFTlNFIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGVcblwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbWl0dDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIG1pdHQoKSB7XG4gICAgY29uc3QgYWxsID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBvbiAodHlwZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgKGFsbFt0eXBlXSB8fCAoYWxsW3R5cGVdID0gW10pKS5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9LFxuICAgICAgICBvZmYgKHR5cGUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGlmIChhbGxbdHlwZV0pIHtcbiAgICAgICAgICAgICAgICBhbGxbdHlwZV0uc3BsaWNlKGFsbFt0eXBlXS5pbmRleE9mKGhhbmRsZXIpID4+PiAwLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW1pdCAodHlwZSkge1xuICAgICAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZXZ0cyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgICAgICBldnRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChhbGxbdHlwZV0gfHwgW10pLnNsaWNlKCkubWFwKChoYW5kbGVyKT0+e1xuICAgICAgICAgICAgICAgIGhhbmRsZXIoLi4uZXZ0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pdHQuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIm1pdHQiLCJhbGwiLCJjcmVhdGUiLCJvbiIsInR5cGUiLCJoYW5kbGVyIiwicHVzaCIsIm9mZiIsInNwbGljZSIsImluZGV4T2YiLCJlbWl0IiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImV2dHMiLCJBcnJheSIsIl9rZXkiLCJzbGljZSIsIm1hcCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/mitt.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/modern-browserslist-target.js": +/*!*************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/modern-browserslist-target.js ***! + \*************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// Note: This file is JS because it's used by the taskfile-swc.js file, which is JS.\n// Keep file changes in sync with the corresponding `.d.ts` files.\n/**\n * These are the browser versions that support all of the following:\n * static import: https://caniuse.com/es6-module\n * dynamic import: https://caniuse.com/es6-module-dynamic-import\n * import.meta: https://caniuse.com/mdn-javascript_operators_import_meta\n */ \nconst MODERN_BROWSERSLIST_TARGET = [\n \"chrome 64\",\n \"edge 79\",\n \"firefox 67\",\n \"opera 51\",\n \"safari 12\"\n];\nmodule.exports = MODERN_BROWSERSLIST_TARGET; //# sourceMappingURL=modern-browserslist-target.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQuanMiLCJtYXBwaW5ncyI6IkFBQUEsb0ZBQW9GO0FBQ3BGLGtFQUFrRTtBQUNsRTs7Ozs7Q0FLQyxHQUFnQjtBQUNqQixNQUFNQSw2QkFBNkI7SUFDL0I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNIO0FBQ0RDLE9BQU9DLE9BQU8sR0FBR0YsNEJBRWpCLHNEQUFzRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQuanM/YmUyOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOb3RlOiBUaGlzIGZpbGUgaXMgSlMgYmVjYXVzZSBpdCdzIHVzZWQgYnkgdGhlIHRhc2tmaWxlLXN3Yy5qcyBmaWxlLCB3aGljaCBpcyBKUy5cbi8vIEtlZXAgZmlsZSBjaGFuZ2VzIGluIHN5bmMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBgLmQudHNgIGZpbGVzLlxuLyoqXG4gKiBUaGVzZSBhcmUgdGhlIGJyb3dzZXIgdmVyc2lvbnMgdGhhdCBzdXBwb3J0IGFsbCBvZiB0aGUgZm9sbG93aW5nOlxuICogc3RhdGljIGltcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS9lczYtbW9kdWxlXG4gKiBkeW5hbWljIGltcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS9lczYtbW9kdWxlLWR5bmFtaWMtaW1wb3J0XG4gKiBpbXBvcnQubWV0YTogaHR0cHM6Ly9jYW5pdXNlLmNvbS9tZG4tamF2YXNjcmlwdF9vcGVyYXRvcnNfaW1wb3J0X21ldGFcbiAqLyBcInVzZSBzdHJpY3RcIjtcbmNvbnN0IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUID0gW1xuICAgIFwiY2hyb21lIDY0XCIsXG4gICAgXCJlZGdlIDc5XCIsXG4gICAgXCJmaXJlZm94IDY3XCIsXG4gICAgXCJvcGVyYSA1MVwiLFxuICAgIFwic2FmYXJpIDEyXCJcbl07XG5tb2R1bGUuZXhwb3J0cyA9IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1tb2Rlcm4tYnJvd3NlcnNsaXN0LXRhcmdldC5qcy5tYXAiXSwibmFtZXMiOlsiTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQiLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/modern-browserslist-target.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js": +/*!******************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js ***! + \******************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"denormalizePagePath\", ({\n enumerable: true,\n get: function() {\n return denormalizePagePath;\n }\n}));\nconst _utils = __webpack_require__(/*! ../router/utils */ \"./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _normalizepathsep = __webpack_require__(/*! ./normalize-path-sep */ \"./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\");\nfunction denormalizePagePath(page) {\n let _page = (0, _normalizepathsep.normalizePathSep)(page);\n return _page.startsWith(\"/index/\") && !(0, _utils.isDynamicRoute)(_page) ? _page.slice(6) : _page !== \"/index\" ? _page : \"/\";\n} //# sourceMappingURL=denormalize-page-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsdURBQXNEO0lBQ2xESSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsU0FBU0MsbUJBQU9BLENBQUMsa0ZBQWlCO0FBQ3hDLE1BQU1DLG9CQUFvQkQsbUJBQU9BLENBQUMsaUdBQXNCO0FBQ3hELFNBQVNGLG9CQUFvQkksSUFBSTtJQUM3QixJQUFJQyxRQUFRLENBQUMsR0FBR0Ysa0JBQWtCRyxnQkFBZ0IsRUFBRUY7SUFDcEQsT0FBT0MsTUFBTUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUdOLE9BQU9PLGNBQWMsRUFBRUgsU0FBU0EsTUFBTUksS0FBSyxDQUFDLEtBQUtKLFVBQVUsV0FBV0EsUUFBUTtBQUM3SCxFQUVBLGlEQUFpRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aC5qcz9kZTBmIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVub3JtYWxpemVQYWdlUGF0aFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGVub3JtYWxpemVQYWdlUGF0aDtcbiAgICB9XG59KTtcbmNvbnN0IF91dGlscyA9IHJlcXVpcmUoXCIuLi9yb3V0ZXIvdXRpbHNcIik7XG5jb25zdCBfbm9ybWFsaXplcGF0aHNlcCA9IHJlcXVpcmUoXCIuL25vcm1hbGl6ZS1wYXRoLXNlcFwiKTtcbmZ1bmN0aW9uIGRlbm9ybWFsaXplUGFnZVBhdGgocGFnZSkge1xuICAgIGxldCBfcGFnZSA9ICgwLCBfbm9ybWFsaXplcGF0aHNlcC5ub3JtYWxpemVQYXRoU2VwKShwYWdlKTtcbiAgICByZXR1cm4gX3BhZ2Uuc3RhcnRzV2l0aChcIi9pbmRleC9cIikgJiYgISgwLCBfdXRpbHMuaXNEeW5hbWljUm91dGUpKF9wYWdlKSA/IF9wYWdlLnNsaWNlKDYpIDogX3BhZ2UgIT09IFwiL2luZGV4XCIgPyBfcGFnZSA6IFwiL1wiO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZW5vcm1hbGl6ZS1wYWdlLXBhdGguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImRlbm9ybWFsaXplUGFnZVBhdGgiLCJfdXRpbHMiLCJyZXF1aXJlIiwiX25vcm1hbGl6ZXBhdGhzZXAiLCJwYWdlIiwiX3BhZ2UiLCJub3JtYWxpemVQYXRoU2VwIiwic3RhcnRzV2l0aCIsImlzRHluYW1pY1JvdXRlIiwic2xpY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js ***! + \*****************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ensureLeadingSlash\", ({\n enumerable: true,\n get: function() {\n return ensureLeadingSlash;\n }\n}));\nfunction ensureLeadingSlash(path) {\n return path.startsWith(\"/\") ? path : \"/\" + path;\n} //# sourceMappingURL=ensure-leading-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUFnQjtBQUNqQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLG1CQUFtQkMsSUFBSTtJQUM1QixPQUFPQSxLQUFLQyxVQUFVLENBQUMsT0FBT0QsT0FBTyxNQUFNQTtBQUMvQyxFQUVBLGdEQUFnRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoLmpzP2NmMzIiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3IgYSBnaXZlbiBwYWdlIHBhdGgsIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZXJlIGlzIGEgbGVhZGluZyBzbGFzaC5cbiAqIElmIHRoZXJlIGlzIG5vdCBhIGxlYWRpbmcgc2xhc2gsIG9uZSBpcyBhZGRlZCwgb3RoZXJ3aXNlIGl0IGlzIG5vb3AuXG4gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbnN1cmVMZWFkaW5nU2xhc2hcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGVuc3VyZUxlYWRpbmdTbGFzaDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGVuc3VyZUxlYWRpbmdTbGFzaChwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogXCIvXCIgKyBwYXRoO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnN1cmUtbGVhZGluZy1zbGFzaC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZW5zdXJlTGVhZGluZ1NsYXNoIiwicGF0aCIsInN0YXJ0c1dpdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js": +/*!***************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js ***! + \***************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is no backslash\n * escaping slashes in the path. Example:\n * - `foo\\/bar\\/baz` -> `foo/bar/baz`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"normalizePathSep\", ({\n enumerable: true,\n get: function() {\n return normalizePathSep;\n }\n}));\nfunction normalizePathSep(path) {\n return path.replace(/\\\\/g, \"/\");\n} //# sourceMappingURL=normalize-path-sep.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcGFnZS1wYXRoL25vcm1hbGl6ZS1wYXRoLXNlcC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7OztDQUlDLEdBQWdCO0FBQ2pCQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsb0RBQW1EO0lBQy9DSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0EsaUJBQWlCQyxJQUFJO0lBQzFCLE9BQU9BLEtBQUtDLE9BQU8sQ0FBQyxPQUFPO0FBQy9CLEVBRUEsOENBQThDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9wYWdlLXBhdGgvbm9ybWFsaXplLXBhdGgtc2VwLmpzP2JhYjgiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGb3IgYSBnaXZlbiBwYWdlIHBhdGgsIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZXJlIGlzIG5vIGJhY2tzbGFzaFxuICogZXNjYXBpbmcgc2xhc2hlcyBpbiB0aGUgcGF0aC4gRXhhbXBsZTpcbiAqICAtIGBmb29cXC9iYXJcXC9iYXpgIC0+IGBmb28vYmFyL2JhemBcbiAqLyBcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vcm1hbGl6ZVBhdGhTZXBcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVBhdGhTZXA7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBub3JtYWxpemVQYXRoU2VwKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9ybWFsaXplLXBhdGgtc2VwLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJub3JtYWxpemVQYXRoU2VwIiwicGF0aCIsInJlcGxhY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router-context.shared-runtime.js": +/*!****************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router-context.shared-runtime.js ***! + \****************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RouterContext\", ({\n enumerable: true,\n get: function() {\n return RouterContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst RouterContext = _react.default.createContext(null);\nif (true) {\n RouterContext.displayName = \"RouterContext\";\n} //# sourceMappingURL=router-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGlEQUFnRDtJQUM1Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLDJCQUEyQkMsbUJBQU9BLENBQUMsNEdBQXlDO0FBQ2xGLE1BQU1DLFNBQVMsV0FBVyxHQUFHRix5QkFBeUJHLENBQUMsQ0FBQ0YsbUJBQU9BLENBQUMsNENBQU87QUFDdkUsTUFBTUYsZ0JBQWdCRyxPQUFPRSxPQUFPLENBQUNDLGFBQWEsQ0FBQztBQUNuRCxJQUFJQyxJQUFxQyxFQUFFO0lBQ3ZDUCxjQUFjUSxXQUFXLEdBQUc7QUFDaEMsRUFFQSx5REFBeUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLmpzPzhmYTEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSb3V0ZXJDb250ZXh0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSb3V0ZXJDb250ZXh0O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IFJvdXRlckNvbnRleHQgPSBfcmVhY3QuZGVmYXVsdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIFJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSBcIlJvdXRlckNvbnRleHRcIjtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIlJvdXRlckNvbnRleHQiLCJfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0IiwiXyIsImRlZmF1bHQiLCJjcmVhdGVDb250ZXh0IiwicHJvY2VzcyIsImRpc3BsYXlOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/adapters.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/adapters.js ***! + \**************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n adaptForAppRouterInstance: function() {\n return adaptForAppRouterInstance;\n },\n adaptForSearchParams: function() {\n return adaptForSearchParams;\n },\n adaptForPathParams: function() {\n return adaptForPathParams;\n },\n PathnameContextProviderAdapter: function() {\n return PathnameContextProviderAdapter;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"./node_modules/react/index.js\"));\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../hooks-client-context.shared-runtime */ \"./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _utils = __webpack_require__(/*! ./utils */ \"./node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _aspathtosearchparams = __webpack_require__(/*! ./utils/as-path-to-search-params */ \"./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js\");\nconst _routeregex = __webpack_require__(/*! ./utils/route-regex */ \"./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction adaptForAppRouterInstance(router) {\n return {\n back () {\n router.back();\n },\n forward () {\n router.forward();\n },\n refresh () {\n router.reload();\n },\n push (href, param) {\n let { scroll } = param === void 0 ? {} : param;\n void router.push(href, undefined, {\n scroll\n });\n },\n replace (href, param) {\n let { scroll } = param === void 0 ? {} : param;\n void router.replace(href, undefined, {\n scroll\n });\n },\n prefetch (href) {\n void router.prefetch(href);\n }\n };\n}\nfunction adaptForSearchParams(router) {\n if (!router.isReady || !router.query) {\n return new URLSearchParams();\n }\n return (0, _aspathtosearchparams.asPathToSearchParams)(router.asPath);\n}\nfunction adaptForPathParams(router) {\n if (!router.isReady || !router.query) {\n return null;\n }\n const pathParams = {};\n const routeRegex = (0, _routeregex.getRouteRegex)(router.pathname);\n const keys = Object.keys(routeRegex.groups);\n for (const key of keys){\n pathParams[key] = router.query[key];\n }\n return pathParams;\n}\nfunction PathnameContextProviderAdapter(param) {\n let { children, router, ...props } = param;\n const ref = (0, _react.useRef)(props.isAutoExport);\n const value = (0, _react.useMemo)(()=>{\n // isAutoExport is only ever `true` on the first render from the server,\n // so reset it to `false` after we read it for the first time as `true`. If\n // we don't use the value, then we don't need it.\n const isAutoExport = ref.current;\n if (isAutoExport) {\n ref.current = false;\n }\n // When the route is a dynamic route, we need to do more processing to\n // determine if we need to stop showing the pathname.\n if ((0, _utils.isDynamicRoute)(router.pathname)) {\n // When the router is rendering the fallback page, it can't possibly know\n // the path, so return `null` here. Read more about fallback pages over\n // at:\n // https://nextjs.org/docs/api-reference/data-fetching/get-static-paths#fallback-pages\n if (router.isFallback) {\n return null;\n }\n // When `isAutoExport` is true, meaning this is a page page has been\n // automatically statically optimized, and the router is not ready, then\n // we can't know the pathname yet. Read more about automatic static\n // optimization at:\n // https://nextjs.org/docs/advanced-features/automatic-static-optimization\n if (isAutoExport && !router.isReady) {\n return null;\n }\n }\n // The `router.asPath` contains the pathname seen by the browser (including\n // any query strings), so it should have that stripped. Read more about the\n // `asPath` option over at:\n // https://nextjs.org/docs/api-reference/next/router#router-object\n let url;\n try {\n url = new URL(router.asPath, \"http://f\");\n } catch (_) {\n // fallback to / for invalid asPath values e.g. //\n return \"/\";\n }\n return url.pathname;\n }, [\n router.asPath,\n router.isFallback,\n router.isReady,\n router.pathname\n ]);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathnameContext.Provider, {\n value: value,\n children: children\n });\n} //# sourceMappingURL=adapters.js.map\n_c = PathnameContextProviderAdapter;\nvar _c;\n$RefreshReg$(_c, \"PathnameContextProviderAdapter\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL2FkYXB0ZXJzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBS047QUFDQSxTQUFTSyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJWCxPQUFPQyxjQUFjLENBQUNTLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUVAsU0FBUztJQUNiRywyQkFBMkI7UUFDdkIsT0FBT0E7SUFDWDtJQUNBQyxzQkFBc0I7UUFDbEIsT0FBT0E7SUFDWDtJQUNBQyxvQkFBb0I7UUFDaEIsT0FBT0E7SUFDWDtJQUNBQyxnQ0FBZ0M7UUFDNUIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sNEJBQTRCQyxtQkFBT0EsQ0FBQyw4R0FBMEM7QUFDcEYsTUFBTUMsY0FBY0QsbUJBQU9BLENBQUMsOERBQW1CO0FBQy9DLE1BQU1FLFNBQVMsV0FBVyxHQUFHSCwwQkFBMEJJLENBQUMsQ0FBQ0gsbUJBQU9BLENBQUMsNENBQU87QUFDeEUsTUFBTUksbUNBQW1DSixtQkFBT0EsQ0FBQywwSEFBd0M7QUFDekYsTUFBTUssU0FBU0wsbUJBQU9BLENBQUMsMEVBQVM7QUFDaEMsTUFBTU0sd0JBQXdCTixtQkFBT0EsQ0FBQyxzSEFBa0M7QUFDeEUsTUFBTU8sY0FBY1AsbUJBQU9BLENBQUMsNEZBQXFCO0FBQ2pELFNBQVNYLDBCQUEwQm1CLE1BQU07SUFDckMsT0FBTztRQUNIQztZQUNJRCxPQUFPQyxJQUFJO1FBQ2Y7UUFDQUM7WUFDSUYsT0FBT0UsT0FBTztRQUNsQjtRQUNBQztZQUNJSCxPQUFPSSxNQUFNO1FBQ2pCO1FBQ0FDLE1BQU1DLElBQUksRUFBRUMsS0FBSztZQUNiLElBQUksRUFBRUMsTUFBTSxFQUFFLEdBQUdELFVBQVUsS0FBSyxJQUFJLENBQUMsSUFBSUE7WUFDekMsS0FBS1AsT0FBT0ssSUFBSSxDQUFDQyxNQUFNRyxXQUFXO2dCQUM5QkQ7WUFDSjtRQUNKO1FBQ0FFLFNBQVNKLElBQUksRUFBRUMsS0FBSztZQUNoQixJQUFJLEVBQUVDLE1BQU0sRUFBRSxHQUFHRCxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUlBO1lBQ3pDLEtBQUtQLE9BQU9VLE9BQU8sQ0FBQ0osTUFBTUcsV0FBVztnQkFDakNEO1lBQ0o7UUFDSjtRQUNBRyxVQUFVTCxJQUFJO1lBQ1YsS0FBS04sT0FBT1csUUFBUSxDQUFDTDtRQUN6QjtJQUNKO0FBQ0o7QUFDQSxTQUFTeEIscUJBQXFCa0IsTUFBTTtJQUNoQyxJQUFJLENBQUNBLE9BQU9ZLE9BQU8sSUFBSSxDQUFDWixPQUFPYSxLQUFLLEVBQUU7UUFDbEMsT0FBTyxJQUFJQztJQUNmO0lBQ0EsT0FBTyxDQUFDLEdBQUdoQixzQkFBc0JpQixvQkFBb0IsRUFBRWYsT0FBT2dCLE1BQU07QUFDeEU7QUFDQSxTQUFTakMsbUJBQW1CaUIsTUFBTTtJQUM5QixJQUFJLENBQUNBLE9BQU9ZLE9BQU8sSUFBSSxDQUFDWixPQUFPYSxLQUFLLEVBQUU7UUFDbEMsT0FBTztJQUNYO0lBQ0EsTUFBTUksYUFBYSxDQUFDO0lBQ3BCLE1BQU1DLGFBQWEsQ0FBQyxHQUFHbkIsWUFBWW9CLGFBQWEsRUFBRW5CLE9BQU9vQixRQUFRO0lBQ2pFLE1BQU1DLE9BQU83QyxPQUFPNkMsSUFBSSxDQUFDSCxXQUFXSSxNQUFNO0lBQzFDLEtBQUssTUFBTUMsT0FBT0YsS0FBSztRQUNuQkosVUFBVSxDQUFDTSxJQUFJLEdBQUd2QixPQUFPYSxLQUFLLENBQUNVLElBQUk7SUFDdkM7SUFDQSxPQUFPTjtBQUNYO0FBQ0EsU0FBU2pDLCtCQUErQnVCLEtBQUs7SUFDekMsSUFBSSxFQUFFaUIsUUFBUSxFQUFFeEIsTUFBTSxFQUFFLEdBQUd5QixPQUFPLEdBQUdsQjtJQUNyQyxNQUFNbUIsTUFBTSxDQUFDLEdBQUdoQyxPQUFPaUMsTUFBTSxFQUFFRixNQUFNRyxZQUFZO0lBQ2pELE1BQU1qRCxRQUFRLENBQUMsR0FBR2UsT0FBT21DLE9BQU8sRUFBRTtRQUM5Qix3RUFBd0U7UUFDeEUsMkVBQTJFO1FBQzNFLGlEQUFpRDtRQUNqRCxNQUFNRCxlQUFlRixJQUFJSSxPQUFPO1FBQ2hDLElBQUlGLGNBQWM7WUFDZEYsSUFBSUksT0FBTyxHQUFHO1FBQ2xCO1FBQ0Esc0VBQXNFO1FBQ3RFLHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsR0FBR2pDLE9BQU9rQyxjQUFjLEVBQUUvQixPQUFPb0IsUUFBUSxHQUFHO1lBQzdDLHlFQUF5RTtZQUN6RSx1RUFBdUU7WUFDdkUsTUFBTTtZQUNOLHNGQUFzRjtZQUN0RixJQUFJcEIsT0FBT2dDLFVBQVUsRUFBRTtnQkFDbkIsT0FBTztZQUNYO1lBQ0Esb0VBQW9FO1lBQ3BFLHdFQUF3RTtZQUN4RSxtRUFBbUU7WUFDbkUsbUJBQW1CO1lBQ25CLDBFQUEwRTtZQUMxRSxJQUFJSixnQkFBZ0IsQ0FBQzVCLE9BQU9ZLE9BQU8sRUFBRTtnQkFDakMsT0FBTztZQUNYO1FBQ0o7UUFDQSwyRUFBMkU7UUFDM0UsMkVBQTJFO1FBQzNFLDJCQUEyQjtRQUMzQixrRUFBa0U7UUFDbEUsSUFBSXFCO1FBQ0osSUFBSTtZQUNBQSxNQUFNLElBQUlDLElBQUlsQyxPQUFPZ0IsTUFBTSxFQUFFO1FBQ2pDLEVBQUUsT0FBT3JCLEdBQUc7WUFDUixrREFBa0Q7WUFDbEQsT0FBTztRQUNYO1FBQ0EsT0FBT3NDLElBQUliLFFBQVE7SUFDdkIsR0FBRztRQUNDcEIsT0FBT2dCLE1BQU07UUFDYmhCLE9BQU9nQyxVQUFVO1FBQ2pCaEMsT0FBT1ksT0FBTztRQUNkWixPQUFPb0IsUUFBUTtLQUNsQjtJQUNELE9BQXFCLFdBQUgsR0FBSSxJQUFHM0IsWUFBWTBDLEdBQUcsRUFBRXZDLGlDQUFpQ3dDLGVBQWUsQ0FBQ0MsUUFBUSxFQUFFO1FBQ2pHMUQsT0FBT0E7UUFDUDZDLFVBQVVBO0lBQ2Q7QUFDSixFQUVBLG9DQUFvQztLQXREM0J4QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL2FkYXB0ZXJzLmpzP2U2NzUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBhZGFwdEZvckFwcFJvdXRlckluc3RhbmNlOiBudWxsLFxuICAgIGFkYXB0Rm9yU2VhcmNoUGFyYW1zOiBudWxsLFxuICAgIGFkYXB0Rm9yUGF0aFBhcmFtczogbnVsbCxcbiAgICBQYXRobmFtZUNvbnRleHRQcm92aWRlckFkYXB0ZXI6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgYWRhcHRGb3JBcHBSb3V0ZXJJbnN0YW5jZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhZGFwdEZvckFwcFJvdXRlckluc3RhbmNlO1xuICAgIH0sXG4gICAgYWRhcHRGb3JTZWFyY2hQYXJhbXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYWRhcHRGb3JTZWFyY2hQYXJhbXM7XG4gICAgfSxcbiAgICBhZGFwdEZvclBhdGhQYXJhbXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYWRhcHRGb3JQYXRoUGFyYW1zO1xuICAgIH0sXG4gICAgUGF0aG5hbWVDb250ZXh0UHJvdmlkZXJBZGFwdGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBhdGhuYW1lQ29udGV4dFByb3ZpZGVyQWRhcHRlcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLl8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9ob29rc2NsaWVudGNvbnRleHRzaGFyZWRydW50aW1lID0gcmVxdWlyZShcIi4uL2hvb2tzLWNsaWVudC1jb250ZXh0LnNoYXJlZC1ydW50aW1lXCIpO1xuY29uc3QgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5jb25zdCBfYXNwYXRodG9zZWFyY2hwYXJhbXMgPSByZXF1aXJlKFwiLi91dGlscy9hcy1wYXRoLXRvLXNlYXJjaC1wYXJhbXNcIik7XG5jb25zdCBfcm91dGVyZWdleCA9IHJlcXVpcmUoXCIuL3V0aWxzL3JvdXRlLXJlZ2V4XCIpO1xuZnVuY3Rpb24gYWRhcHRGb3JBcHBSb3V0ZXJJbnN0YW5jZShyb3V0ZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBiYWNrICgpIHtcbiAgICAgICAgICAgIHJvdXRlci5iYWNrKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGZvcndhcmQgKCkge1xuICAgICAgICAgICAgcm91dGVyLmZvcndhcmQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVmcmVzaCAoKSB7XG4gICAgICAgICAgICByb3V0ZXIucmVsb2FkKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHB1c2ggKGhyZWYsIHBhcmFtKSB7XG4gICAgICAgICAgICBsZXQgeyBzY3JvbGwgfSA9IHBhcmFtID09PSB2b2lkIDAgPyB7fSA6IHBhcmFtO1xuICAgICAgICAgICAgdm9pZCByb3V0ZXIucHVzaChocmVmLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICByZXBsYWNlIChocmVmLCBwYXJhbSkge1xuICAgICAgICAgICAgbGV0IHsgc2Nyb2xsIH0gPSBwYXJhbSA9PT0gdm9pZCAwID8ge30gOiBwYXJhbTtcbiAgICAgICAgICAgIHZvaWQgcm91dGVyLnJlcGxhY2UoaHJlZiwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgc2Nyb2xsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJlZmV0Y2ggKGhyZWYpIHtcbiAgICAgICAgICAgIHZvaWQgcm91dGVyLnByZWZldGNoKGhyZWYpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGFkYXB0Rm9yU2VhcmNoUGFyYW1zKHJvdXRlcikge1xuICAgIGlmICghcm91dGVyLmlzUmVhZHkgfHwgIXJvdXRlci5xdWVyeSkge1xuICAgICAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIF9hc3BhdGh0b3NlYXJjaHBhcmFtcy5hc1BhdGhUb1NlYXJjaFBhcmFtcykocm91dGVyLmFzUGF0aCk7XG59XG5mdW5jdGlvbiBhZGFwdEZvclBhdGhQYXJhbXMocm91dGVyKSB7XG4gICAgaWYgKCFyb3V0ZXIuaXNSZWFkeSB8fCAhcm91dGVyLnF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwYXRoUGFyYW1zID0ge307XG4gICAgY29uc3Qgcm91dGVSZWdleCA9ICgwLCBfcm91dGVyZWdleC5nZXRSb3V0ZVJlZ2V4KShyb3V0ZXIucGF0aG5hbWUpO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3V0ZVJlZ2V4Lmdyb3Vwcyk7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cyl7XG4gICAgICAgIHBhdGhQYXJhbXNba2V5XSA9IHJvdXRlci5xdWVyeVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aFBhcmFtcztcbn1cbmZ1bmN0aW9uIFBhdGhuYW1lQ29udGV4dFByb3ZpZGVyQWRhcHRlcihwYXJhbSkge1xuICAgIGxldCB7IGNoaWxkcmVuLCByb3V0ZXIsIC4uLnByb3BzIH0gPSBwYXJhbTtcbiAgICBjb25zdCByZWYgPSAoMCwgX3JlYWN0LnVzZVJlZikocHJvcHMuaXNBdXRvRXhwb3J0KTtcbiAgICBjb25zdCB2YWx1ZSA9ICgwLCBfcmVhY3QudXNlTWVtbykoKCk9PntcbiAgICAgICAgLy8gaXNBdXRvRXhwb3J0IGlzIG9ubHkgZXZlciBgdHJ1ZWAgb24gdGhlIGZpcnN0IHJlbmRlciBmcm9tIHRoZSBzZXJ2ZXIsXG4gICAgICAgIC8vIHNvIHJlc2V0IGl0IHRvIGBmYWxzZWAgYWZ0ZXIgd2UgcmVhZCBpdCBmb3IgdGhlIGZpcnN0IHRpbWUgYXMgYHRydWVgLiBJZlxuICAgICAgICAvLyB3ZSBkb24ndCB1c2UgdGhlIHZhbHVlLCB0aGVuIHdlIGRvbid0IG5lZWQgaXQuXG4gICAgICAgIGNvbnN0IGlzQXV0b0V4cG9ydCA9IHJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoaXNBdXRvRXhwb3J0KSB7XG4gICAgICAgICAgICByZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gdGhlIHJvdXRlIGlzIGEgZHluYW1pYyByb3V0ZSwgd2UgbmVlZCB0byBkbyBtb3JlIHByb2Nlc3NpbmcgdG9cbiAgICAgICAgLy8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gc3RvcCBzaG93aW5nIHRoZSBwYXRobmFtZS5cbiAgICAgICAgaWYgKCgwLCBfdXRpbHMuaXNEeW5hbWljUm91dGUpKHJvdXRlci5wYXRobmFtZSkpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIHJvdXRlciBpcyByZW5kZXJpbmcgdGhlIGZhbGxiYWNrIHBhZ2UsIGl0IGNhbid0IHBvc3NpYmx5IGtub3dcbiAgICAgICAgICAgIC8vIHRoZSBwYXRoLCBzbyByZXR1cm4gYG51bGxgIGhlcmUuIFJlYWQgbW9yZSBhYm91dCBmYWxsYmFjayBwYWdlcyBvdmVyXG4gICAgICAgICAgICAvLyBhdDpcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvZGF0YS1mZXRjaGluZy9nZXQtc3RhdGljLXBhdGhzI2ZhbGxiYWNrLXBhZ2VzXG4gICAgICAgICAgICBpZiAocm91dGVyLmlzRmFsbGJhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdoZW4gYGlzQXV0b0V4cG9ydGAgaXMgdHJ1ZSwgbWVhbmluZyB0aGlzIGlzIGEgcGFnZSBwYWdlIGhhcyBiZWVuXG4gICAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHN0YXRpY2FsbHkgb3B0aW1pemVkLCBhbmQgdGhlIHJvdXRlciBpcyBub3QgcmVhZHksIHRoZW5cbiAgICAgICAgICAgIC8vIHdlIGNhbid0IGtub3cgdGhlIHBhdGhuYW1lIHlldC4gUmVhZCBtb3JlIGFib3V0IGF1dG9tYXRpYyBzdGF0aWNcbiAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiBhdDpcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FkdmFuY2VkLWZlYXR1cmVzL2F1dG9tYXRpYy1zdGF0aWMtb3B0aW1pemF0aW9uXG4gICAgICAgICAgICBpZiAoaXNBdXRvRXhwb3J0ICYmICFyb3V0ZXIuaXNSZWFkeSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBgcm91dGVyLmFzUGF0aGAgY29udGFpbnMgdGhlIHBhdGhuYW1lIHNlZW4gYnkgdGhlIGJyb3dzZXIgKGluY2x1ZGluZ1xuICAgICAgICAvLyBhbnkgcXVlcnkgc3RyaW5ncyksIHNvIGl0IHNob3VsZCBoYXZlIHRoYXQgc3RyaXBwZWQuIFJlYWQgbW9yZSBhYm91dCB0aGVcbiAgICAgICAgLy8gYGFzUGF0aGAgb3B0aW9uIG92ZXIgYXQ6XG4gICAgICAgIC8vIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9yb3V0ZXIjcm91dGVyLW9iamVjdFxuICAgICAgICBsZXQgdXJsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdXJsID0gbmV3IFVSTChyb3V0ZXIuYXNQYXRoLCBcImh0dHA6Ly9mXCIpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICAvLyBmYWxsYmFjayB0byAvIGZvciBpbnZhbGlkIGFzUGF0aCB2YWx1ZXMgZS5nLiAvL1xuICAgICAgICAgICAgcmV0dXJuIFwiL1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmwucGF0aG5hbWU7XG4gICAgfSwgW1xuICAgICAgICByb3V0ZXIuYXNQYXRoLFxuICAgICAgICByb3V0ZXIuaXNGYWxsYmFjayxcbiAgICAgICAgcm91dGVyLmlzUmVhZHksXG4gICAgICAgIHJvdXRlci5wYXRobmFtZVxuICAgIF0pO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKF9ob29rc2NsaWVudGNvbnRleHRzaGFyZWRydW50aW1lLlBhdGhuYW1lQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZGFwdGVycy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJhZGFwdEZvckFwcFJvdXRlckluc3RhbmNlIiwiYWRhcHRGb3JTZWFyY2hQYXJhbXMiLCJhZGFwdEZvclBhdGhQYXJhbXMiLCJQYXRobmFtZUNvbnRleHRQcm92aWRlckFkYXB0ZXIiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkIiwicmVxdWlyZSIsIl9qc3hydW50aW1lIiwiX3JlYWN0IiwiXyIsIl9ob29rc2NsaWVudGNvbnRleHRzaGFyZWRydW50aW1lIiwiX3V0aWxzIiwiX2FzcGF0aHRvc2VhcmNocGFyYW1zIiwiX3JvdXRlcmVnZXgiLCJyb3V0ZXIiLCJiYWNrIiwiZm9yd2FyZCIsInJlZnJlc2giLCJyZWxvYWQiLCJwdXNoIiwiaHJlZiIsInBhcmFtIiwic2Nyb2xsIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsInByZWZldGNoIiwiaXNSZWFkeSIsInF1ZXJ5IiwiVVJMU2VhcmNoUGFyYW1zIiwiYXNQYXRoVG9TZWFyY2hQYXJhbXMiLCJhc1BhdGgiLCJwYXRoUGFyYW1zIiwicm91dGVSZWdleCIsImdldFJvdXRlUmVnZXgiLCJwYXRobmFtZSIsImtleXMiLCJncm91cHMiLCJrZXkiLCJjaGlsZHJlbiIsInByb3BzIiwicmVmIiwidXNlUmVmIiwiaXNBdXRvRXhwb3J0IiwidXNlTWVtbyIsImN1cnJlbnQiLCJpc0R5bmFtaWNSb3V0ZSIsImlzRmFsbGJhY2siLCJ1cmwiLCJVUkwiLCJqc3giLCJQYXRobmFtZUNvbnRleHQiLCJQcm92aWRlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/adapters.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/router.js": +/*!************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/router.js ***! + \************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// tslint:disable:no-console\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return Router;\n },\n matchesMiddleware: function() {\n return matchesMiddleware;\n },\n createKey: function() {\n return createKey;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./utils/remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _routeloader = __webpack_require__(/*! ../../../client/route-loader */ \"./node_modules/next/dist/client/route-loader.js\");\nconst _script = __webpack_require__(/*! ../../../client/script */ \"./node_modules/next/dist/client/script.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../../../lib/is-error */ \"./node_modules/next/dist/lib/is-error.js\"));\nconst _denormalizepagepath = __webpack_require__(/*! ../page-path/denormalize-page-path */ \"./node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\");\nconst _normalizelocalepath = __webpack_require__(/*! ../i18n/normalize-locale-path */ \"./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../mitt */ \"./node_modules/next/dist/shared/lib/mitt.js\"));\nconst _utils = __webpack_require__(/*! ../utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nconst _isdynamic = __webpack_require__(/*! ./utils/is-dynamic */ \"./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./utils/parse-relative-url */ \"./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nconst _resolverewrites = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./utils/resolve-rewrites */ \"./node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js\"));\nconst _routematcher = __webpack_require__(/*! ./utils/route-matcher */ \"./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./utils/route-regex */ \"./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nconst _formaturl = __webpack_require__(/*! ./utils/format-url */ \"./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _detectdomainlocale = __webpack_require__(/*! ../../../client/detect-domain-locale */ \"./node_modules/next/dist/client/detect-domain-locale.js\");\nconst _parsepath = __webpack_require__(/*! ./utils/parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst _addlocale = __webpack_require__(/*! ../../../client/add-locale */ \"./node_modules/next/dist/client/add-locale.js\");\nconst _removelocale = __webpack_require__(/*! ../../../client/remove-locale */ \"./node_modules/next/dist/client/remove-locale.js\");\nconst _removebasepath = __webpack_require__(/*! ../../../client/remove-base-path */ \"./node_modules/next/dist/client/remove-base-path.js\");\nconst _addbasepath = __webpack_require__(/*! ../../../client/add-base-path */ \"./node_modules/next/dist/client/add-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../client/has-base-path */ \"./node_modules/next/dist/client/has-base-path.js\");\nconst _resolvehref = __webpack_require__(/*! ../../../client/resolve-href */ \"./node_modules/next/dist/client/resolve-href.js\");\nconst _isapiroute = __webpack_require__(/*! ../../../lib/is-api-route */ \"./node_modules/next/dist/lib/is-api-route.js\");\nconst _getnextpathnameinfo = __webpack_require__(/*! ./utils/get-next-pathname-info */ \"./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js\");\nconst _formatnextpathnameinfo = __webpack_require__(/*! ./utils/format-next-pathname-info */ \"./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js\");\nconst _comparestates = __webpack_require__(/*! ./utils/compare-states */ \"./node_modules/next/dist/shared/lib/router/utils/compare-states.js\");\nconst _islocalurl = __webpack_require__(/*! ./utils/is-local-url */ \"./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _isbot = __webpack_require__(/*! ./utils/is-bot */ \"./node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\nconst _omit = __webpack_require__(/*! ./utils/omit */ \"./node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _interpolateas = __webpack_require__(/*! ./utils/interpolate-as */ \"./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nconst _handlesmoothscroll = __webpack_require__(/*! ./utils/handle-smooth-scroll */ \"./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\");\nfunction buildCancellationError() {\n return Object.assign(new Error(\"Route Cancelled\"), {\n cancelled: true\n });\n}\nasync function matchesMiddleware(options) {\n const matchers = await Promise.resolve(options.router.pageLoader.getMiddleware());\n if (!matchers) return false;\n const { pathname: asPathname } = (0, _parsepath.parsePath)(options.asPath);\n // remove basePath first since path prefix has to be in the order of `/${basePath}/${locale}`\n const cleanedAs = (0, _hasbasepath.hasBasePath)(asPathname) ? (0, _removebasepath.removeBasePath)(asPathname) : asPathname;\n const asWithBasePathAndLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(cleanedAs, options.locale));\n // Check only path match on client. Matching \"has\" should be done on server\n // where we can access more info such as headers, HttpOnly cookie, etc.\n return matchers.some((m)=>new RegExp(m.regexp).test(asWithBasePathAndLocale));\n}\nfunction stripOrigin(url) {\n const origin = (0, _utils.getLocationOrigin)();\n return url.startsWith(origin) ? url.substring(origin.length) : url;\n}\nfunction prepareUrlAs(router, url, as) {\n // If url and as provided as an object representation,\n // we'll format them into the string version here.\n let [resolvedHref, resolvedAs] = (0, _resolvehref.resolveHref)(router, url, true);\n const origin = (0, _utils.getLocationOrigin)();\n const hrefWasAbsolute = resolvedHref.startsWith(origin);\n const asWasAbsolute = resolvedAs && resolvedAs.startsWith(origin);\n resolvedHref = stripOrigin(resolvedHref);\n resolvedAs = resolvedAs ? stripOrigin(resolvedAs) : resolvedAs;\n const preparedUrl = hrefWasAbsolute ? resolvedHref : (0, _addbasepath.addBasePath)(resolvedHref);\n const preparedAs = as ? stripOrigin((0, _resolvehref.resolveHref)(router, as)) : resolvedAs || resolvedHref;\n return {\n url: preparedUrl,\n as: asWasAbsolute ? preparedAs : (0, _addbasepath.addBasePath)(preparedAs)\n };\n}\nfunction resolveDynamicRoute(pathname, pages) {\n const cleanPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _denormalizepagepath.denormalizePagePath)(pathname));\n if (cleanPathname === \"/404\" || cleanPathname === \"/_error\") {\n return pathname;\n }\n // handle resolving href for dynamic routes\n if (!pages.includes(cleanPathname)) {\n // eslint-disable-next-line array-callback-return\n pages.some((page)=>{\n if ((0, _isdynamic.isDynamicRoute)(page) && (0, _routeregex.getRouteRegex)(page).re.test(cleanPathname)) {\n pathname = page;\n return true;\n }\n });\n }\n return (0, _removetrailingslash.removeTrailingSlash)(pathname);\n}\nfunction getMiddlewareData(source, response, options) {\n const nextConfig = {\n basePath: options.router.basePath,\n i18n: {\n locales: options.router.locales\n },\n trailingSlash: Boolean(false)\n };\n const rewriteHeader = response.headers.get(\"x-nextjs-rewrite\");\n let rewriteTarget = rewriteHeader || response.headers.get(\"x-nextjs-matched-path\");\n const matchedPath = response.headers.get(\"x-matched-path\");\n if (matchedPath && !rewriteTarget && !matchedPath.includes(\"__next_data_catchall\") && !matchedPath.includes(\"/_error\") && !matchedPath.includes(\"/404\")) {\n // leverage x-matched-path to detect next.config.js rewrites\n rewriteTarget = matchedPath;\n }\n if (rewriteTarget) {\n if (rewriteTarget.startsWith(\"/\") || undefined) {\n const parsedRewriteTarget = (0, _parserelativeurl.parseRelativeUrl)(rewriteTarget);\n const pathnameInfo = (0, _getnextpathnameinfo.getNextPathnameInfo)(parsedRewriteTarget.pathname, {\n nextConfig,\n parseData: true\n });\n let fsPathname = (0, _removetrailingslash.removeTrailingSlash)(pathnameInfo.pathname);\n return Promise.all([\n options.router.pageLoader.getPageList(),\n (0, _routeloader.getClientBuildManifest)()\n ]).then((param)=>{\n let [pages, { __rewrites: rewrites }] = param;\n let as = (0, _addlocale.addLocale)(pathnameInfo.pathname, pathnameInfo.locale);\n if ((0, _isdynamic.isDynamicRoute)(as) || !rewriteHeader && pages.includes((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(as), options.router.locales).pathname)) {\n const parsedSource = (0, _getnextpathnameinfo.getNextPathnameInfo)((0, _parserelativeurl.parseRelativeUrl)(source).pathname, {\n nextConfig: true ? undefined : 0,\n parseData: true\n });\n as = (0, _addbasepath.addBasePath)(parsedSource.pathname);\n parsedRewriteTarget.pathname = as;\n }\n if (true) {\n const result = (0, _resolverewrites.default)(as, pages, rewrites, parsedRewriteTarget.query, (path)=>resolveDynamicRoute(path, pages), options.router.locales);\n if (result.matchedPage) {\n parsedRewriteTarget.pathname = result.parsedAs.pathname;\n as = parsedRewriteTarget.pathname;\n Object.assign(parsedRewriteTarget.query, result.parsedAs.query);\n }\n } else {}\n const resolvedHref = !pages.includes(fsPathname) ? resolveDynamicRoute((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(parsedRewriteTarget.pathname), options.router.locales).pathname, pages) : fsPathname;\n if ((0, _isdynamic.isDynamicRoute)(resolvedHref)) {\n const matches = (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(resolvedHref))(as);\n Object.assign(parsedRewriteTarget.query, matches || {});\n }\n return {\n type: \"rewrite\",\n parsedAs: parsedRewriteTarget,\n resolvedHref\n };\n });\n }\n const src = (0, _parsepath.parsePath)(source);\n const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n nextConfig,\n parseData: true\n }),\n defaultLocale: options.router.defaultLocale,\n buildId: \"\"\n });\n return Promise.resolve({\n type: \"redirect-external\",\n destination: \"\" + pathname + src.query + src.hash\n });\n }\n const redirectTarget = response.headers.get(\"x-nextjs-redirect\");\n if (redirectTarget) {\n if (redirectTarget.startsWith(\"/\")) {\n const src = (0, _parsepath.parsePath)(redirectTarget);\n const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n nextConfig,\n parseData: true\n }),\n defaultLocale: options.router.defaultLocale,\n buildId: \"\"\n });\n return Promise.resolve({\n type: \"redirect-internal\",\n newAs: \"\" + pathname + src.query + src.hash,\n newUrl: \"\" + pathname + src.query + src.hash\n });\n }\n return Promise.resolve({\n type: \"redirect-external\",\n destination: redirectTarget\n });\n }\n return Promise.resolve({\n type: \"next\"\n });\n}\nasync function withMiddlewareEffects(options) {\n const matches = await matchesMiddleware(options);\n if (!matches || !options.fetchData) {\n return null;\n }\n try {\n const data = await options.fetchData();\n const effect = await getMiddlewareData(data.dataHref, data.response, options);\n return {\n dataHref: data.dataHref,\n json: data.json,\n response: data.response,\n text: data.text,\n cacheKey: data.cacheKey,\n effect\n };\n } catch (e) {\n /**\n * TODO: Revisit this in the future.\n * For now we will not consider middleware data errors to be fatal.\n * maybe we should revisit in the future.\n */ return null;\n }\n}\nconst manualScrollRestoration = false && 0;\nconst SSG_DATA_NOT_FOUND = Symbol(\"SSG_DATA_NOT_FOUND\");\nfunction fetchRetry(url, attempts, options) {\n return fetch(url, {\n // Cookies are required to be present for Next.js' SSG \"Preview Mode\".\n // Cookies may also be required for `getServerSideProps`.\n //\n // > `fetch` won’t send cookies, unless you set the credentials init\n // > option.\n // https://developer.mozilla.org/docs/Web/API/Fetch_API/Using_Fetch\n //\n // > For maximum browser compatibility when it comes to sending &\n // > receiving cookies, always supply the `credentials: 'same-origin'`\n // > option instead of relying on the default.\n // https://github.com/github/fetch#caveats\n credentials: \"same-origin\",\n method: options.method || \"GET\",\n headers: Object.assign({}, options.headers, {\n \"x-nextjs-data\": \"1\"\n })\n }).then((response)=>{\n return !response.ok && attempts > 1 && response.status >= 500 ? fetchRetry(url, attempts - 1, options) : response;\n });\n}\nfunction tryToParseAsJSON(text) {\n try {\n return JSON.parse(text);\n } catch (error) {\n return null;\n }\n}\nfunction fetchNextData(param) {\n let { dataHref, inflightCache, isPrefetch, hasMiddleware, isServerRender, parseJSON, persistCache, isBackground, unstable_skipClientCache } = param;\n const { href: cacheKey } = new URL(dataHref, window.location.href);\n var _params_method;\n const getData = (params)=>fetchRetry(dataHref, isServerRender ? 3 : 1, {\n headers: Object.assign({}, isPrefetch ? {\n purpose: \"prefetch\"\n } : {}, isPrefetch && hasMiddleware ? {\n \"x-middleware-prefetch\": \"1\"\n } : {}),\n method: (_params_method = params == null ? void 0 : params.method) != null ? _params_method : \"GET\"\n }).then((response)=>{\n if (response.ok && (params == null ? void 0 : params.method) === \"HEAD\") {\n return {\n dataHref,\n response,\n text: \"\",\n json: {},\n cacheKey\n };\n }\n return response.text().then((text)=>{\n if (!response.ok) {\n /**\n * When the data response is a redirect because of a middleware\n * we do not consider it an error. The headers must bring the\n * mapped location.\n * TODO: Change the status code in the handler.\n */ if (hasMiddleware && [\n 301,\n 302,\n 307,\n 308\n ].includes(response.status)) {\n return {\n dataHref,\n response,\n text,\n json: {},\n cacheKey\n };\n }\n if (response.status === 404) {\n var _tryToParseAsJSON;\n if ((_tryToParseAsJSON = tryToParseAsJSON(text)) == null ? void 0 : _tryToParseAsJSON.notFound) {\n return {\n dataHref,\n json: {\n notFound: SSG_DATA_NOT_FOUND\n },\n response,\n text,\n cacheKey\n };\n }\n }\n const error = new Error(\"Failed to load static props\");\n /**\n * We should only trigger a server-side transition if this was\n * caused on a client-side transition. Otherwise, we'd get into\n * an infinite loop.\n */ if (!isServerRender) {\n (0, _routeloader.markAssetError)(error);\n }\n throw error;\n }\n return {\n dataHref,\n json: parseJSON ? tryToParseAsJSON(text) : null,\n response,\n text,\n cacheKey\n };\n });\n }).then((data)=>{\n if (!persistCache || \"development\" !== \"production\" || 0) {\n delete inflightCache[cacheKey];\n }\n return data;\n }).catch((err)=>{\n if (!unstable_skipClientCache) {\n delete inflightCache[cacheKey];\n }\n if (err.message === \"Failed to fetch\" || // firefox\n err.message === \"NetworkError when attempting to fetch resource.\" || // safari\n err.message === \"Load failed\") {\n (0, _routeloader.markAssetError)(err);\n }\n throw err;\n });\n // when skipping client cache we wait to update\n // inflight cache until successful data response\n // this allows racing click event with fetching newer data\n // without blocking navigation when stale data is available\n if (unstable_skipClientCache && persistCache) {\n return getData({}).then((data)=>{\n inflightCache[cacheKey] = Promise.resolve(data);\n return data;\n });\n }\n if (inflightCache[cacheKey] !== undefined) {\n return inflightCache[cacheKey];\n }\n return inflightCache[cacheKey] = getData(isBackground ? {\n method: \"HEAD\"\n } : {});\n}\nfunction createKey() {\n return Math.random().toString(36).slice(2, 10);\n}\nfunction handleHardNavigation(param) {\n let { url, router } = param;\n // ensure we don't trigger a hard navigation to the same\n // URL as this can end up with an infinite refresh\n if (url === (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(router.asPath, router.locale))) {\n throw new Error(\"Invariant: attempted to hard navigate to the same URL \" + url + \" \" + location.href);\n }\n window.location.href = url;\n}\nconst getCancelledHandler = (param)=>{\n let { route, router } = param;\n let cancelled = false;\n const cancel = router.clc = ()=>{\n cancelled = true;\n };\n const handleCancelled = ()=>{\n if (cancelled) {\n const error = new Error('Abort fetching component for route: \"' + route + '\"');\n error.cancelled = true;\n throw error;\n }\n if (cancel === router.clc) {\n router.clc = null;\n }\n };\n return handleCancelled;\n};\nclass Router {\n reload() {\n window.location.reload();\n }\n /**\n * Go back in history\n */ back() {\n window.history.back();\n }\n /**\n * Go forward in history\n */ forward() {\n window.history.forward();\n }\n /**\n * Performs a `pushState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */ push(url, as, options) {\n if (options === void 0) options = {};\n if (false) {}\n ({ url, as } = prepareUrlAs(this, url, as));\n return this.change(\"pushState\", url, as, options);\n }\n /**\n * Performs a `replaceState` with arguments\n * @param url of the route\n * @param as masks `url` for the browser\n * @param options object you can define `shallow` and other options\n */ replace(url, as, options) {\n if (options === void 0) options = {};\n ({ url, as } = prepareUrlAs(this, url, as));\n return this.change(\"replaceState\", url, as, options);\n }\n async _bfl(as, resolvedAs, locale, skipNavigate) {\n if (true) {\n let matchesBflStatic = false;\n let matchesBflDynamic = false;\n for (const curAs of [\n as,\n resolvedAs\n ]){\n if (curAs) {\n const asNoSlash = (0, _removetrailingslash.removeTrailingSlash)(new URL(curAs, \"http://n\").pathname);\n const asNoSlashLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(asNoSlash, locale || this.locale));\n if (asNoSlash !== (0, _removetrailingslash.removeTrailingSlash)(new URL(this.asPath, \"http://n\").pathname)) {\n var _this__bfl_s, _this__bfl_s1;\n matchesBflStatic = matchesBflStatic || !!((_this__bfl_s = this._bfl_s) == null ? void 0 : _this__bfl_s.contains(asNoSlash)) || !!((_this__bfl_s1 = this._bfl_s) == null ? void 0 : _this__bfl_s1.contains(asNoSlashLocale));\n for (const normalizedAS of [\n asNoSlash,\n asNoSlashLocale\n ]){\n // if any sub-path of as matches a dynamic filter path\n // it should be hard navigated\n const curAsParts = normalizedAS.split(\"/\");\n for(let i = 0; !matchesBflDynamic && i < curAsParts.length + 1; i++){\n var _this__bfl_d;\n const currentPart = curAsParts.slice(0, i).join(\"/\");\n if (currentPart && ((_this__bfl_d = this._bfl_d) == null ? void 0 : _this__bfl_d.contains(currentPart))) {\n matchesBflDynamic = true;\n break;\n }\n }\n }\n // if the client router filter is matched then we trigger\n // a hard navigation\n if (matchesBflStatic || matchesBflDynamic) {\n if (skipNavigate) {\n return true;\n }\n handleHardNavigation({\n url: (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, locale || this.locale, this.defaultLocale)),\n router: this\n });\n return new Promise(()=>{});\n }\n }\n }\n }\n }\n return false;\n }\n async change(method, url, as, options, forcedScroll) {\n var _this_components_pathname;\n if (!(0, _islocalurl.isLocalURL)(url)) {\n handleHardNavigation({\n url,\n router: this\n });\n return false;\n }\n // WARNING: `_h` is an internal option for handing Next.js client-side\n // hydration. Your app should _never_ use this property. It may change at\n // any time without notice.\n const isQueryUpdating = options._h === 1;\n if (!isQueryUpdating && !options.shallow) {\n await this._bfl(as, undefined, options.locale);\n }\n let shouldResolveHref = isQueryUpdating || options._shouldResolveHref || (0, _parsepath.parsePath)(url).pathname === (0, _parsepath.parsePath)(as).pathname;\n const nextState = {\n ...this.state\n };\n // for static pages with query params in the URL we delay\n // marking the router ready until after the query is updated\n // or a navigation has occurred\n const readyStateChange = this.isReady !== true;\n this.isReady = true;\n const isSsr = this.isSsr;\n if (!isQueryUpdating) {\n this.isSsr = false;\n }\n // if a route transition is already in progress before\n // the query updating is triggered ignore query updating\n if (isQueryUpdating && this.clc) {\n return false;\n }\n const prevLocale = nextState.locale;\n if (false) { var _this_locales; }\n // marking route changes as a navigation start entry\n if (_utils.ST) {\n performance.mark(\"routeChange\");\n }\n const { shallow = false, scroll = true } = options;\n const routeProps = {\n shallow\n };\n if (this._inFlightRoute && this.clc) {\n if (!isSsr) {\n Router.events.emit(\"routeChangeError\", buildCancellationError(), this._inFlightRoute, routeProps);\n }\n this.clc();\n this.clc = null;\n }\n as = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, options.locale, this.defaultLocale));\n const cleanedAs = (0, _removelocale.removeLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, nextState.locale);\n this._inFlightRoute = as;\n const localeChange = prevLocale !== nextState.locale;\n // If the url change is only related to a hash change\n // We should not proceed. We should only change the state.\n if (!isQueryUpdating && this.onlyAHashChange(cleanedAs) && !localeChange) {\n nextState.asPath = cleanedAs;\n Router.events.emit(\"hashChangeStart\", as, routeProps);\n // TODO: do we need the resolved href when only a hash change?\n this.changeState(method, url, as, {\n ...options,\n scroll: false\n });\n if (scroll) {\n this.scrollToHash(cleanedAs);\n }\n try {\n await this.set(nextState, this.components[nextState.route], null);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n Router.events.emit(\"routeChangeError\", err, cleanedAs, routeProps);\n }\n throw err;\n }\n Router.events.emit(\"hashChangeComplete\", as, routeProps);\n return true;\n }\n let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n let { pathname, query } = parsed;\n // The build manifest needs to be loaded before auto-static dynamic pages\n // get their query parameters to allow ensuring they can be parsed properly\n // when rewritten to\n let pages, rewrites;\n try {\n [pages, { __rewrites: rewrites }] = await Promise.all([\n this.pageLoader.getPageList(),\n (0, _routeloader.getClientBuildManifest)(),\n this.pageLoader.getMiddleware()\n ]);\n } catch (err) {\n // If we fail to resolve the page list or client-build manifest, we must\n // do a server-side transition:\n handleHardNavigation({\n url: as,\n router: this\n });\n return false;\n }\n // If asked to change the current URL we should reload the current page\n // (not location.reload() but reload getInitialProps and other Next.js stuffs)\n // We also need to set the method = replaceState always\n // as this should not go into the history (That's how browsers work)\n // We should compare the new asPath to the current asPath, not the url\n if (!this.urlIsNew(cleanedAs) && !localeChange) {\n method = \"replaceState\";\n }\n // we need to resolve the as value using rewrites for dynamic SSG\n // pages to allow building the data URL correctly\n let resolvedAs = as;\n // url and as should always be prefixed with basePath by this\n // point by either next/link or router.push/replace so strip the\n // basePath from the pathname to match the pages dir 1-to-1\n pathname = pathname ? (0, _removetrailingslash.removeTrailingSlash)((0, _removebasepath.removeBasePath)(pathname)) : pathname;\n let route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n const parsedAsPathname = as.startsWith(\"/\") && (0, _parserelativeurl.parseRelativeUrl)(as).pathname;\n // if we detected the path as app route during prefetching\n // trigger hard navigation\n if ((_this_components_pathname = this.components[pathname]) == null ? void 0 : _this_components_pathname.__appRouter) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return new Promise(()=>{});\n }\n const isMiddlewareRewrite = !!(parsedAsPathname && route !== parsedAsPathname && (!(0, _isdynamic.isDynamicRoute)(route) || !(0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(route))(parsedAsPathname)));\n // we don't attempt resolve asPath when we need to execute\n // middleware as the resolving will occur server-side\n const isMiddlewareMatch = !options.shallow && await matchesMiddleware({\n asPath: as,\n locale: nextState.locale,\n router: this\n });\n if (isQueryUpdating && isMiddlewareMatch) {\n shouldResolveHref = false;\n }\n if (shouldResolveHref && pathname !== \"/_error\") {\n options._shouldResolveHref = true;\n if ( true && as.startsWith(\"/\")) {\n const rewritesResult = (0, _resolverewrites.default)((0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(cleanedAs, nextState.locale), true), pages, rewrites, query, (p)=>resolveDynamicRoute(p, pages), this.locales);\n if (rewritesResult.externalDest) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return true;\n }\n if (!isMiddlewareMatch) {\n resolvedAs = rewritesResult.asPath;\n }\n if (rewritesResult.matchedPage && rewritesResult.resolvedHref) {\n // if this directly matches a page we need to update the href to\n // allow the correct page chunk to be loaded\n pathname = rewritesResult.resolvedHref;\n parsed.pathname = (0, _addbasepath.addBasePath)(pathname);\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n } else {\n parsed.pathname = resolveDynamicRoute(pathname, pages);\n if (parsed.pathname !== pathname) {\n pathname = parsed.pathname;\n parsed.pathname = (0, _addbasepath.addBasePath)(pathname);\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n }\n }\n if (!(0, _islocalurl.isLocalURL)(as)) {\n if (true) {\n throw new Error('Invalid href: \"' + url + '\" and as: \"' + as + '\", received relative href and external as' + \"\\nSee more info: https://nextjs.org/docs/messages/invalid-relative-url-external-as\");\n }\n handleHardNavigation({\n url: as,\n router: this\n });\n return false;\n }\n resolvedAs = (0, _removelocale.removeLocale)((0, _removebasepath.removeBasePath)(resolvedAs), nextState.locale);\n route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n let routeMatch = false;\n if ((0, _isdynamic.isDynamicRoute)(route)) {\n const parsedAs = (0, _parserelativeurl.parseRelativeUrl)(resolvedAs);\n const asPathname = parsedAs.pathname;\n const routeRegex = (0, _routeregex.getRouteRegex)(route);\n routeMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(asPathname);\n const shouldInterpolate = route === asPathname;\n const interpolatedAs = shouldInterpolate ? (0, _interpolateas.interpolateAs)(route, asPathname, query) : {};\n if (!routeMatch || shouldInterpolate && !interpolatedAs.result) {\n const missingParams = Object.keys(routeRegex.groups).filter((param)=>!query[param] && !routeRegex.groups[param].optional);\n if (missingParams.length > 0 && !isMiddlewareMatch) {\n if (true) {\n console.warn(\"\" + (shouldInterpolate ? \"Interpolating href\" : \"Mismatching `as` and `href`\") + \" failed to manually provide \" + (\"the params: \" + missingParams.join(\", \") + \" in the `href`'s `query`\"));\n }\n throw new Error((shouldInterpolate ? \"The provided `href` (\" + url + \") value is missing query values (\" + missingParams.join(\", \") + \") to be interpolated properly. \" : \"The provided `as` value (\" + asPathname + \") is incompatible with the `href` value (\" + route + \"). \") + (\"Read more: https://nextjs.org/docs/messages/\" + (shouldInterpolate ? \"href-interpolation-failed\" : \"incompatible-href-as\")));\n }\n } else if (shouldInterpolate) {\n as = (0, _formaturl.formatWithValidation)(Object.assign({}, parsedAs, {\n pathname: interpolatedAs.result,\n query: (0, _omit.omit)(query, interpolatedAs.params)\n }));\n } else {\n // Merge params into `query`, overwriting any specified in search\n Object.assign(query, routeMatch);\n }\n }\n if (!isQueryUpdating) {\n Router.events.emit(\"routeChangeStart\", as, routeProps);\n }\n const isErrorRoute = this.pathname === \"/404\" || this.pathname === \"/_error\";\n try {\n var _self___NEXT_DATA___props_pageProps, _self___NEXT_DATA___props, _routeInfo_props;\n let routeInfo = await this.getRouteInfo({\n route,\n pathname,\n query,\n as,\n resolvedAs,\n routeProps,\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n hasMiddleware: isMiddlewareMatch,\n unstable_skipClientCache: options.unstable_skipClientCache,\n isQueryUpdating: isQueryUpdating && !this.isFallback,\n isMiddlewareRewrite\n });\n if (!isQueryUpdating && !options.shallow) {\n await this._bfl(as, \"resolvedAs\" in routeInfo ? routeInfo.resolvedAs : undefined, nextState.locale);\n }\n if (\"route\" in routeInfo && isMiddlewareMatch) {\n pathname = routeInfo.route || route;\n route = pathname;\n if (!routeProps.shallow) {\n query = Object.assign({}, routeInfo.query || {}, query);\n }\n const cleanedParsedPathname = (0, _hasbasepath.hasBasePath)(parsed.pathname) ? (0, _removebasepath.removeBasePath)(parsed.pathname) : parsed.pathname;\n if (routeMatch && pathname !== cleanedParsedPathname) {\n Object.keys(routeMatch).forEach((key)=>{\n if (routeMatch && query[key] === routeMatch[key]) {\n delete query[key];\n }\n });\n }\n if ((0, _isdynamic.isDynamicRoute)(pathname)) {\n const prefixedAs = !routeProps.shallow && routeInfo.resolvedAs ? routeInfo.resolvedAs : (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(new URL(as, location.href).pathname, nextState.locale), true);\n let rewriteAs = prefixedAs;\n if ((0, _hasbasepath.hasBasePath)(rewriteAs)) {\n rewriteAs = (0, _removebasepath.removeBasePath)(rewriteAs);\n }\n if (false) {}\n const routeRegex = (0, _routeregex.getRouteRegex)(pathname);\n const curRouteMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(new URL(rewriteAs, location.href).pathname);\n if (curRouteMatch) {\n Object.assign(query, curRouteMatch);\n }\n }\n }\n // If the routeInfo brings a redirect we simply apply it.\n if (\"type\" in routeInfo) {\n if (routeInfo.type === \"redirect-internal\") {\n return this.change(method, routeInfo.newUrl, routeInfo.newAs, options);\n } else {\n handleHardNavigation({\n url: routeInfo.destination,\n router: this\n });\n return new Promise(()=>{});\n }\n }\n const component = routeInfo.Component;\n if (component && component.unstable_scriptLoader) {\n const scripts = [].concat(component.unstable_scriptLoader());\n scripts.forEach((script)=>{\n (0, _script.handleClientScriptLoad)(script.props);\n });\n }\n // handle redirect on client-transition\n if ((routeInfo.__N_SSG || routeInfo.__N_SSP) && routeInfo.props) {\n if (routeInfo.props.pageProps && routeInfo.props.pageProps.__N_REDIRECT) {\n // Use the destination from redirect without adding locale\n options.locale = false;\n const destination = routeInfo.props.pageProps.__N_REDIRECT;\n // check if destination is internal (resolves to a page) and attempt\n // client-navigation if it is falling back to hard navigation if\n // it's not\n if (destination.startsWith(\"/\") && routeInfo.props.pageProps.__N_REDIRECT_BASE_PATH !== false) {\n const parsedHref = (0, _parserelativeurl.parseRelativeUrl)(destination);\n parsedHref.pathname = resolveDynamicRoute(parsedHref.pathname, pages);\n const { url: newUrl, as: newAs } = prepareUrlAs(this, destination, destination);\n return this.change(method, newUrl, newAs, options);\n }\n handleHardNavigation({\n url: destination,\n router: this\n });\n return new Promise(()=>{});\n }\n nextState.isPreview = !!routeInfo.props.__N_PREVIEW;\n // handle SSG data 404\n if (routeInfo.props.notFound === SSG_DATA_NOT_FOUND) {\n let notFoundRoute;\n try {\n await this.fetchComponent(\"/404\");\n notFoundRoute = \"/404\";\n } catch (_) {\n notFoundRoute = \"/_error\";\n }\n routeInfo = await this.getRouteInfo({\n route: notFoundRoute,\n pathname: notFoundRoute,\n query,\n as,\n resolvedAs,\n routeProps: {\n shallow: false\n },\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n isNotFound: true\n });\n if (\"type\" in routeInfo) {\n throw new Error(\"Unexpected middleware effect on /404\");\n }\n }\n }\n if (isQueryUpdating && this.pathname === \"/_error\" && ((_self___NEXT_DATA___props = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps = _self___NEXT_DATA___props.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps.statusCode) === 500 && ((_routeInfo_props = routeInfo.props) == null ? void 0 : _routeInfo_props.pageProps)) {\n // ensure statusCode is still correct for static 500 page\n // when updating query information\n routeInfo.props.pageProps.statusCode = 500;\n }\n var _routeInfo_route;\n // shallow routing is only allowed for same page URL changes.\n const isValidShallowRoute = options.shallow && nextState.route === ((_routeInfo_route = routeInfo.route) != null ? _routeInfo_route : route);\n var _options_scroll;\n const shouldScroll = (_options_scroll = options.scroll) != null ? _options_scroll : !isQueryUpdating && !isValidShallowRoute;\n const resetScroll = shouldScroll ? {\n x: 0,\n y: 0\n } : null;\n const upcomingScrollState = forcedScroll != null ? forcedScroll : resetScroll;\n // the new state that the router gonna set\n const upcomingRouterState = {\n ...nextState,\n route,\n pathname,\n query,\n asPath: cleanedAs,\n isFallback: false\n };\n // When the page being rendered is the 404 page, we should only update the\n // query parameters. Route changes here might add the basePath when it\n // wasn't originally present. This is also why this block is before the\n // below `changeState` call which updates the browser's history (changing\n // the URL).\n if (isQueryUpdating && isErrorRoute) {\n var _self___NEXT_DATA___props_pageProps1, _self___NEXT_DATA___props1, _routeInfo_props1;\n routeInfo = await this.getRouteInfo({\n route: this.pathname,\n pathname: this.pathname,\n query,\n as,\n resolvedAs,\n routeProps: {\n shallow: false\n },\n locale: nextState.locale,\n isPreview: nextState.isPreview,\n isQueryUpdating: isQueryUpdating && !this.isFallback\n });\n if (\"type\" in routeInfo) {\n throw new Error(\"Unexpected middleware effect on \" + this.pathname);\n }\n if (this.pathname === \"/_error\" && ((_self___NEXT_DATA___props1 = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps1 = _self___NEXT_DATA___props1.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps1.statusCode) === 500 && ((_routeInfo_props1 = routeInfo.props) == null ? void 0 : _routeInfo_props1.pageProps)) {\n // ensure statusCode is still correct for static 500 page\n // when updating query information\n routeInfo.props.pageProps.statusCode = 500;\n }\n try {\n await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n Router.events.emit(\"routeChangeError\", err, cleanedAs, routeProps);\n }\n throw err;\n }\n return true;\n }\n Router.events.emit(\"beforeHistoryChange\", as, routeProps);\n this.changeState(method, url, as, options);\n // for query updates we can skip it if the state is unchanged and we don't\n // need to scroll\n // https://github.com/vercel/next.js/issues/37139\n const canSkipUpdating = isQueryUpdating && !upcomingScrollState && !readyStateChange && !localeChange && (0, _comparestates.compareRouterStates)(upcomingRouterState, this.state);\n if (!canSkipUpdating) {\n try {\n await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n } catch (e) {\n if (e.cancelled) routeInfo.error = routeInfo.error || e;\n else throw e;\n }\n if (routeInfo.error) {\n if (!isQueryUpdating) {\n Router.events.emit(\"routeChangeError\", routeInfo.error, cleanedAs, routeProps);\n }\n throw routeInfo.error;\n }\n if (false) {}\n if (!isQueryUpdating) {\n Router.events.emit(\"routeChangeComplete\", as, routeProps);\n }\n // A hash mark # is the optional last part of a URL\n const hashRegex = /#.+$/;\n if (shouldScroll && hashRegex.test(as)) {\n this.scrollToHash(as);\n }\n }\n return true;\n } catch (err) {\n if ((0, _iserror.default)(err) && err.cancelled) {\n return false;\n }\n throw err;\n }\n }\n changeState(method, url, as, options) {\n if (options === void 0) options = {};\n if (true) {\n if (typeof window.history === \"undefined\") {\n console.error(\"Warning: window.history is not available.\");\n return;\n }\n if (typeof window.history[method] === \"undefined\") {\n console.error(\"Warning: window.history.\" + method + \" is not available\");\n return;\n }\n }\n if (method !== \"pushState\" || (0, _utils.getURL)() !== as) {\n this._shallow = options.shallow;\n window.history[method]({\n url,\n as,\n options,\n __N: true,\n key: this._key = method !== \"pushState\" ? this._key : createKey()\n }, // Passing the empty string here should be safe against future changes to the method.\n // https://developer.mozilla.org/docs/Web/API/History/replaceState\n \"\", as);\n }\n }\n async handleRouteInfoError(err, pathname, query, as, routeProps, loadErrorFail) {\n console.error(err);\n if (err.cancelled) {\n // bubble up cancellation errors\n throw err;\n }\n if ((0, _routeloader.isAssetError)(err) || loadErrorFail) {\n Router.events.emit(\"routeChangeError\", err, as, routeProps);\n // If we can't load the page it could be one of following reasons\n // 1. Page doesn't exists\n // 2. Page does exist in a different zone\n // 3. Internal error while loading the page\n // So, doing a hard reload is the proper way to deal with this.\n handleHardNavigation({\n url: as,\n router: this\n });\n // Changing the URL doesn't block executing the current code path.\n // So let's throw a cancellation error stop the routing logic.\n throw buildCancellationError();\n }\n try {\n let props;\n const { page: Component, styleSheets } = await this.fetchComponent(\"/_error\");\n const routeInfo = {\n props,\n Component,\n styleSheets,\n err,\n error: err\n };\n if (!routeInfo.props) {\n try {\n routeInfo.props = await this.getInitialProps(Component, {\n err,\n pathname,\n query\n });\n } catch (gipErr) {\n console.error(\"Error in error page `getInitialProps`: \", gipErr);\n routeInfo.props = {};\n }\n }\n return routeInfo;\n } catch (routeInfoErr) {\n return this.handleRouteInfoError((0, _iserror.default)(routeInfoErr) ? routeInfoErr : new Error(routeInfoErr + \"\"), pathname, query, as, routeProps, true);\n }\n }\n async getRouteInfo(param) {\n let { route: requestedRoute, pathname, query, as, resolvedAs, routeProps, locale, hasMiddleware, isPreview, unstable_skipClientCache, isQueryUpdating, isMiddlewareRewrite, isNotFound } = param;\n /**\n * This `route` binding can change if there's a rewrite\n * so we keep a reference to the original requested route\n * so we can store the cache for it and avoid re-requesting every time\n * for shallow routing purposes.\n */ let route = requestedRoute;\n try {\n var _data_effect, _data_effect1, _data_effect2, _data_response;\n const handleCancelled = getCancelledHandler({\n route,\n router: this\n });\n let existingInfo = this.components[route];\n if (routeProps.shallow && existingInfo && this.route === route) {\n return existingInfo;\n }\n if (hasMiddleware) {\n existingInfo = undefined;\n }\n let cachedRouteInfo = existingInfo && !(\"initial\" in existingInfo) && \"development\" !== \"development\" ? 0 : undefined;\n const isBackground = isQueryUpdating;\n const fetchNextDataParams = {\n dataHref: this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname,\n query\n }),\n skipInterpolation: true,\n asPath: isNotFound ? \"/404\" : resolvedAs,\n locale\n }),\n hasMiddleware: true,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: isBackground ? this.sbc : this.sdc,\n persistCache: !isPreview,\n isPrefetch: false,\n unstable_skipClientCache,\n isBackground\n };\n let data = isQueryUpdating && !isMiddlewareRewrite ? null : await withMiddlewareEffects({\n fetchData: ()=>fetchNextData(fetchNextDataParams),\n asPath: isNotFound ? \"/404\" : resolvedAs,\n locale: locale,\n router: this\n }).catch((err)=>{\n // we don't hard error during query updating\n // as it's un-necessary and doesn't need to be fatal\n // unless it is a fallback route and the props can't\n // be loaded\n if (isQueryUpdating) {\n return null;\n }\n throw err;\n });\n // when rendering error routes we don't apply middleware\n // effects\n if (data && (pathname === \"/_error\" || pathname === \"/404\")) {\n data.effect = undefined;\n }\n if (isQueryUpdating) {\n if (!data) {\n data = {\n json: self.__NEXT_DATA__.props\n };\n } else {\n data.json = self.__NEXT_DATA__.props;\n }\n }\n handleCancelled();\n if ((data == null ? void 0 : (_data_effect = data.effect) == null ? void 0 : _data_effect.type) === \"redirect-internal\" || (data == null ? void 0 : (_data_effect1 = data.effect) == null ? void 0 : _data_effect1.type) === \"redirect-external\") {\n return data.effect;\n }\n if ((data == null ? void 0 : (_data_effect2 = data.effect) == null ? void 0 : _data_effect2.type) === \"rewrite\") {\n const resolvedRoute = (0, _removetrailingslash.removeTrailingSlash)(data.effect.resolvedHref);\n const pages = await this.pageLoader.getPageList();\n // during query updating the page must match although during\n // client-transition a redirect that doesn't match a page\n // can be returned and this should trigger a hard navigation\n // which is valid for incremental migration\n if (!isQueryUpdating || pages.includes(resolvedRoute)) {\n route = resolvedRoute;\n pathname = data.effect.resolvedHref;\n query = {\n ...query,\n ...data.effect.parsedAs.query\n };\n resolvedAs = (0, _removebasepath.removeBasePath)((0, _normalizelocalepath.normalizeLocalePath)(data.effect.parsedAs.pathname, this.locales).pathname);\n // Check again the cache with the new destination.\n existingInfo = this.components[route];\n if (routeProps.shallow && existingInfo && this.route === route && !hasMiddleware) {\n // If we have a match with the current route due to rewrite,\n // we can copy the existing information to the rewritten one.\n // Then, we return the information along with the matched route.\n return {\n ...existingInfo,\n route\n };\n }\n }\n }\n if ((0, _isapiroute.isAPIRoute)(route)) {\n handleHardNavigation({\n url: as,\n router: this\n });\n return new Promise(()=>{});\n }\n const routeInfo = cachedRouteInfo || await this.fetchComponent(route).then((res)=>({\n Component: res.page,\n styleSheets: res.styleSheets,\n __N_SSG: res.mod.__N_SSG,\n __N_SSP: res.mod.__N_SSP\n }));\n if (true) {\n const { isValidElementType } = __webpack_require__(/*! next/dist/compiled/react-is */ \"./node_modules/next/dist/compiled/react-is/index.js\");\n if (!isValidElementType(routeInfo.Component)) {\n throw new Error('The default export is not a React Component in page: \"' + pathname + '\"');\n }\n }\n const wasBailedPrefetch = data == null ? void 0 : (_data_response = data.response) == null ? void 0 : _data_response.headers.get(\"x-middleware-skip\");\n const shouldFetchData = routeInfo.__N_SSG || routeInfo.__N_SSP;\n // For non-SSG prefetches that bailed before sending data\n // we clear the cache to fetch full response\n if (wasBailedPrefetch && (data == null ? void 0 : data.dataHref)) {\n delete this.sdc[data.dataHref];\n }\n const { props, cacheKey } = await this._getData(async ()=>{\n if (shouldFetchData) {\n if ((data == null ? void 0 : data.json) && !wasBailedPrefetch) {\n return {\n cacheKey: data.cacheKey,\n props: data.json\n };\n }\n const dataHref = (data == null ? void 0 : data.dataHref) ? data.dataHref : this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname,\n query\n }),\n asPath: resolvedAs,\n locale\n });\n const fetched = await fetchNextData({\n dataHref,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: wasBailedPrefetch ? {} : this.sdc,\n persistCache: !isPreview,\n isPrefetch: false,\n unstable_skipClientCache\n });\n return {\n cacheKey: fetched.cacheKey,\n props: fetched.json || {}\n };\n }\n return {\n headers: {},\n props: await this.getInitialProps(routeInfo.Component, {\n pathname,\n query,\n asPath: as,\n locale,\n locales: this.locales,\n defaultLocale: this.defaultLocale\n })\n };\n });\n // Only bust the data cache for SSP routes although\n // middleware can skip cache per request with\n // x-middleware-cache: no-cache as well\n if (routeInfo.__N_SSP && fetchNextDataParams.dataHref && cacheKey) {\n delete this.sdc[cacheKey];\n }\n // we kick off a HEAD request in the background\n // when a non-prefetch request is made to signal revalidation\n if (!this.isPreview && routeInfo.__N_SSG && \"development\" !== \"development\" && 0) {}\n props.pageProps = Object.assign({}, props.pageProps);\n routeInfo.props = props;\n routeInfo.route = route;\n routeInfo.query = query;\n routeInfo.resolvedAs = resolvedAs;\n this.components[route] = routeInfo;\n return routeInfo;\n } catch (err) {\n return this.handleRouteInfoError((0, _iserror.getProperError)(err), pathname, query, as, routeProps);\n }\n }\n set(state, data, resetScroll) {\n this.state = state;\n return this.sub(data, this.components[\"/_app\"].Component, resetScroll);\n }\n /**\n * Callback to execute before replacing router state\n * @param cb callback to be executed\n */ beforePopState(cb) {\n this._bps = cb;\n }\n onlyAHashChange(as) {\n if (!this.asPath) return false;\n const [oldUrlNoHash, oldHash] = this.asPath.split(\"#\", 2);\n const [newUrlNoHash, newHash] = as.split(\"#\", 2);\n // Makes sure we scroll to the provided hash if the url/hash are the same\n if (newHash && oldUrlNoHash === newUrlNoHash && oldHash === newHash) {\n return true;\n }\n // If the urls are change, there's more than a hash change\n if (oldUrlNoHash !== newUrlNoHash) {\n return false;\n }\n // If the hash has changed, then it's a hash only change.\n // This check is necessary to handle both the enter and\n // leave hash === '' cases. The identity case falls through\n // and is treated as a next reload.\n return oldHash !== newHash;\n }\n scrollToHash(as) {\n const [, hash = \"\"] = as.split(\"#\", 2);\n (0, _handlesmoothscroll.handleSmoothScroll)(()=>{\n // Scroll to top if the hash is just `#` with no value or `#top`\n // To mirror browsers\n if (hash === \"\" || hash === \"top\") {\n window.scrollTo(0, 0);\n return;\n }\n // Decode hash to make non-latin anchor works.\n const rawHash = decodeURIComponent(hash);\n // First we check if the element by id is found\n const idEl = document.getElementById(rawHash);\n if (idEl) {\n idEl.scrollIntoView();\n return;\n }\n // If there's no element with the id, we check the `name` property\n // To mirror browsers\n const nameEl = document.getElementsByName(rawHash)[0];\n if (nameEl) {\n nameEl.scrollIntoView();\n }\n }, {\n onlyHashChange: this.onlyAHashChange(as)\n });\n }\n urlIsNew(asPath) {\n return this.asPath !== asPath;\n }\n /**\n * Prefetch page code, you may wait for the data during page rendering.\n * This feature only works in production!\n * @param url the href of prefetched page\n * @param asPath the as path of the prefetched page\n */ async prefetch(url, asPath, options) {\n if (asPath === void 0) asPath = url;\n if (options === void 0) options = {};\n // Prefetch is not supported in development mode because it would trigger on-demand-entries\n if (true) {\n return;\n }\n if ( true && (0, _isbot.isBot)(window.navigator.userAgent)) {\n // No prefetches for bots that render the link since they are typically navigating\n // links via the equivalent of a hard navigation and hence never utilize these\n // prefetches.\n return;\n }\n let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n const urlPathname = parsed.pathname;\n let { pathname, query } = parsed;\n const originalPathname = pathname;\n if (false) {}\n const pages = await this.pageLoader.getPageList();\n let resolvedAs = asPath;\n const locale = typeof options.locale !== \"undefined\" ? options.locale || undefined : this.locale;\n const isMiddlewareMatch = await matchesMiddleware({\n asPath: asPath,\n locale: locale,\n router: this\n });\n if ( true && asPath.startsWith(\"/\")) {\n let rewrites;\n ({ __rewrites: rewrites } = await (0, _routeloader.getClientBuildManifest)());\n const rewritesResult = (0, _resolverewrites.default)((0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(asPath, this.locale), true), pages, rewrites, parsed.query, (p)=>resolveDynamicRoute(p, pages), this.locales);\n if (rewritesResult.externalDest) {\n return;\n }\n if (!isMiddlewareMatch) {\n resolvedAs = (0, _removelocale.removeLocale)((0, _removebasepath.removeBasePath)(rewritesResult.asPath), this.locale);\n }\n if (rewritesResult.matchedPage && rewritesResult.resolvedHref) {\n // if this directly matches a page we need to update the href to\n // allow the correct page chunk to be loaded\n pathname = rewritesResult.resolvedHref;\n parsed.pathname = pathname;\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n }\n parsed.pathname = resolveDynamicRoute(parsed.pathname, pages);\n if ((0, _isdynamic.isDynamicRoute)(parsed.pathname)) {\n pathname = parsed.pathname;\n parsed.pathname = pathname;\n Object.assign(query, (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(parsed.pathname))((0, _parsepath.parsePath)(asPath).pathname) || {});\n if (!isMiddlewareMatch) {\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n }\n const data = false ? 0 : await withMiddlewareEffects({\n fetchData: ()=>fetchNextData({\n dataHref: this.pageLoader.getDataHref({\n href: (0, _formaturl.formatWithValidation)({\n pathname: originalPathname,\n query\n }),\n skipInterpolation: true,\n asPath: resolvedAs,\n locale\n }),\n hasMiddleware: true,\n isServerRender: this.isSsr,\n parseJSON: true,\n inflightCache: this.sdc,\n persistCache: !this.isPreview,\n isPrefetch: true\n }),\n asPath: asPath,\n locale: locale,\n router: this\n });\n /**\n * If there was a rewrite we apply the effects of the rewrite on the\n * current parameters for the prefetch.\n */ if ((data == null ? void 0 : data.effect.type) === \"rewrite\") {\n parsed.pathname = data.effect.resolvedHref;\n pathname = data.effect.resolvedHref;\n query = {\n ...query,\n ...data.effect.parsedAs.query\n };\n resolvedAs = data.effect.parsedAs.pathname;\n url = (0, _formaturl.formatWithValidation)(parsed);\n }\n /**\n * If there is a redirect to an external destination then we don't have\n * to prefetch content as it will be unused.\n */ if ((data == null ? void 0 : data.effect.type) === \"redirect-external\") {\n return;\n }\n const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n if (await this._bfl(asPath, resolvedAs, options.locale, true)) {\n this.components[urlPathname] = {\n __appRouter: true\n };\n }\n await Promise.all([\n this.pageLoader._isSsg(route).then((isSsg)=>{\n return isSsg ? fetchNextData({\n dataHref: (data == null ? void 0 : data.json) ? data == null ? void 0 : data.dataHref : this.pageLoader.getDataHref({\n href: url,\n asPath: resolvedAs,\n locale: locale\n }),\n isServerRender: false,\n parseJSON: true,\n inflightCache: this.sdc,\n persistCache: !this.isPreview,\n isPrefetch: true,\n unstable_skipClientCache: options.unstable_skipClientCache || options.priority && !!true\n }).then(()=>false).catch(()=>false) : false;\n }),\n this.pageLoader[options.priority ? \"loadPage\" : \"prefetch\"](route)\n ]);\n }\n async fetchComponent(route) {\n const handleCancelled = getCancelledHandler({\n route,\n router: this\n });\n try {\n const componentResult = await this.pageLoader.loadPage(route);\n handleCancelled();\n return componentResult;\n } catch (err) {\n handleCancelled();\n throw err;\n }\n }\n _getData(fn) {\n let cancelled = false;\n const cancel = ()=>{\n cancelled = true;\n };\n this.clc = cancel;\n return fn().then((data)=>{\n if (cancel === this.clc) {\n this.clc = null;\n }\n if (cancelled) {\n const err = new Error(\"Loading initial props cancelled\");\n err.cancelled = true;\n throw err;\n }\n return data;\n });\n }\n _getFlightData(dataHref) {\n // Do not cache RSC flight response since it's not a static resource\n return fetchNextData({\n dataHref,\n isServerRender: true,\n parseJSON: false,\n inflightCache: this.sdc,\n persistCache: false,\n isPrefetch: false\n }).then((param)=>{\n let { text } = param;\n return {\n data: text\n };\n });\n }\n getInitialProps(Component, ctx) {\n const { Component: App } = this.components[\"/_app\"];\n const AppTree = this._wrapApp(App);\n ctx.AppTree = AppTree;\n return (0, _utils.loadGetInitialProps)(App, {\n AppTree,\n Component,\n router: this,\n ctx\n });\n }\n get route() {\n return this.state.route;\n }\n get pathname() {\n return this.state.pathname;\n }\n get query() {\n return this.state.query;\n }\n get asPath() {\n return this.state.asPath;\n }\n get locale() {\n return this.state.locale;\n }\n get isFallback() {\n return this.state.isFallback;\n }\n get isPreview() {\n return this.state.isPreview;\n }\n constructor(pathname, query, as, { initialProps, pageLoader, App, wrapApp, Component, err, subscription, isFallback, locale, locales, defaultLocale, domainLocales, isPreview }){\n // Server Data Cache (full data requests)\n this.sdc = {};\n // Server Background Cache (HEAD requests)\n this.sbc = {};\n this.isFirstPopStateEvent = true;\n this._key = createKey();\n this.onPopState = (e)=>{\n const { isFirstPopStateEvent } = this;\n this.isFirstPopStateEvent = false;\n const state = e.state;\n if (!state) {\n // We get state as undefined for two reasons.\n // 1. With older safari (< 8) and older chrome (< 34)\n // 2. When the URL changed with #\n //\n // In the both cases, we don't need to proceed and change the route.\n // (as it's already changed)\n // But we can simply replace the state with the new changes.\n // Actually, for (1) we don't need to nothing. But it's hard to detect that event.\n // So, doing the following for (1) does no harm.\n const { pathname, query } = this;\n this.changeState(\"replaceState\", (0, _formaturl.formatWithValidation)({\n pathname: (0, _addbasepath.addBasePath)(pathname),\n query\n }), (0, _utils.getURL)());\n return;\n }\n // __NA is used to identify if the history entry can be handled by the app-router.\n if (state.__NA) {\n window.location.reload();\n return;\n }\n if (!state.__N) {\n return;\n }\n // Safari fires popstateevent when reopening the browser.\n if (isFirstPopStateEvent && this.locale === state.options.locale && state.as === this.asPath) {\n return;\n }\n let forcedScroll;\n const { url, as, options, key } = state;\n if (false) {}\n this._key = key;\n const { pathname } = (0, _parserelativeurl.parseRelativeUrl)(url);\n // Make sure we don't re-render on initial load,\n // can be caused by navigating back from an external site\n if (this.isSsr && as === (0, _addbasepath.addBasePath)(this.asPath) && pathname === (0, _addbasepath.addBasePath)(this.pathname)) {\n return;\n }\n // If the downstream application returns falsy, return.\n // They will then be responsible for handling the event.\n if (this._bps && !this._bps(state)) {\n return;\n }\n this.change(\"replaceState\", url, as, Object.assign({}, options, {\n shallow: options.shallow && this._shallow,\n locale: options.locale || this.defaultLocale,\n // @ts-ignore internal value not exposed on types\n _h: 0\n }), forcedScroll);\n };\n // represents the current component key\n const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n // set up the component cache (by route keys)\n this.components = {};\n // We should not keep the cache, if there's an error\n // Otherwise, this cause issues when when going back and\n // come again to the errored page.\n if (pathname !== \"/_error\") {\n this.components[route] = {\n Component,\n initial: true,\n props: initialProps,\n err,\n __N_SSG: initialProps && initialProps.__N_SSG,\n __N_SSP: initialProps && initialProps.__N_SSP\n };\n }\n this.components[\"/_app\"] = {\n Component: App,\n styleSheets: []\n };\n if (true) {\n const { BloomFilter } = __webpack_require__(/*! ../../lib/bloom-filter */ \"./node_modules/next/dist/shared/lib/bloom-filter.js\");\n const staticFilterData = {\"numItems\":1,\"errorRate\":0.0001,\"numBits\":20,\"numHashes\":14,\"bitArray\":[1,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,1,1]};\n const dynamicFilterData = {\"numItems\":0,\"errorRate\":0.0001,\"numBits\":0,\"numHashes\":null,\"bitArray\":[]};\n if (staticFilterData == null ? void 0 : staticFilterData.numHashes) {\n this._bfl_s = new BloomFilter(staticFilterData.numItems, staticFilterData.errorRate);\n this._bfl_s.import(staticFilterData);\n }\n if (dynamicFilterData == null ? void 0 : dynamicFilterData.numHashes) {\n this._bfl_d = new BloomFilter(dynamicFilterData.numItems, dynamicFilterData.errorRate);\n this._bfl_d.import(dynamicFilterData);\n }\n }\n // Backwards compat for Router.router.events\n // TODO: Should be remove the following major version as it was never documented\n this.events = Router.events;\n this.pageLoader = pageLoader;\n // if auto prerendered and dynamic route wait to update asPath\n // until after mount to prevent hydration mismatch\n const autoExportDynamic = (0, _isdynamic.isDynamicRoute)(pathname) && self.__NEXT_DATA__.autoExport;\n this.basePath = false || \"\";\n this.sub = subscription;\n this.clc = null;\n this._wrapApp = wrapApp;\n // make sure to ignore extra popState in safari on navigating\n // back from external site\n this.isSsr = true;\n this.isLocaleDomain = false;\n this.isReady = !!(self.__NEXT_DATA__.gssp || self.__NEXT_DATA__.gip || self.__NEXT_DATA__.isExperimentalCompile || self.__NEXT_DATA__.appGip && !self.__NEXT_DATA__.gsp || !autoExportDynamic && !self.location.search && !true);\n if (false) {}\n this.state = {\n route,\n pathname,\n query,\n asPath: autoExportDynamic ? pathname : as,\n isPreview: !!isPreview,\n locale: false ? 0 : undefined,\n isFallback\n };\n this._initialMatchesMiddlewarePromise = Promise.resolve(false);\n if (true) {\n // make sure \"as\" doesn't start with double slashes or else it can\n // throw an error as it's considered invalid\n if (!as.startsWith(\"//\")) {\n // in order for `e.state` to work on the `onpopstate` event\n // we have to register the initial route upon initialization\n const options = {\n locale\n };\n const asPath = (0, _utils.getURL)();\n this._initialMatchesMiddlewarePromise = matchesMiddleware({\n router: this,\n locale,\n asPath\n }).then((matches)=>{\n options._shouldResolveHref = as !== pathname;\n this.changeState(\"replaceState\", matches ? asPath : (0, _formaturl.formatWithValidation)({\n pathname: (0, _addbasepath.addBasePath)(pathname),\n query\n }), asPath, options);\n return matches;\n });\n }\n window.addEventListener(\"popstate\", this.onPopState);\n // enable custom scroll restoration handling when available\n // otherwise fallback to browser's default handling\n if (false) {}\n }\n }\n}\nRouter.events = (0, _mitt.default)(); //# sourceMappingURL=router.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3JvdXRlci5qcyIsIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDZjtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUlOO0FBQ0EsU0FBU0ksUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVYsT0FBT0MsY0FBYyxDQUFDUSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFOLFNBQVM7SUFDYkcsU0FBUztRQUNMLE9BQU9TO0lBQ1g7SUFDQVIsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxXQUFXO1FBQ1AsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTVEsMkJBQTJCQyxtQkFBT0EsQ0FBQyw0R0FBeUM7QUFDbEYsTUFBTUMsNEJBQTRCRCxtQkFBT0EsQ0FBQyw4R0FBMEM7QUFDcEYsTUFBTUUsdUJBQXVCRixtQkFBT0EsQ0FBQyxnSEFBK0I7QUFDcEUsTUFBTUcsZUFBZUgsbUJBQU9BLENBQUMscUZBQThCO0FBQzNELE1BQU1JLFVBQVVKLG1CQUFPQSxDQUFDLHlFQUF3QjtBQUNoRCxNQUFNSyxXQUFXLFdBQVcsR0FBR0osMEJBQTBCSyxDQUFDLENBQUNOLG1CQUFPQSxDQUFDLHVFQUF1QjtBQUMxRixNQUFNTyx1QkFBdUJQLG1CQUFPQSxDQUFDLGtIQUFvQztBQUN6RSxNQUFNUSx1QkFBdUJSLG1CQUFPQSxDQUFDLHdHQUErQjtBQUNwRSxNQUFNUyxRQUFRLFdBQVcsR0FBR1YseUJBQXlCTyxDQUFDLENBQUNOLG1CQUFPQSxDQUFDLDREQUFTO0FBQ3hFLE1BQU1VLFNBQVNWLG1CQUFPQSxDQUFDLDhEQUFVO0FBQ2pDLE1BQU1XLGFBQWFYLG1CQUFPQSxDQUFDLDBGQUFvQjtBQUMvQyxNQUFNWSxvQkFBb0JaLG1CQUFPQSxDQUFDLDBHQUE0QjtBQUM5RCxNQUFNYSxtQkFBbUIsV0FBVyxHQUFHZCx5QkFBeUJPLENBQUMsQ0FBQ04sbUJBQU9BLENBQUMsc0dBQTBCO0FBQ3BHLE1BQU1jLGdCQUFnQmQsbUJBQU9BLENBQUMsZ0dBQXVCO0FBQ3JELE1BQU1lLGNBQWNmLG1CQUFPQSxDQUFDLDRGQUFxQjtBQUNqRCxNQUFNZ0IsYUFBYWhCLG1CQUFPQSxDQUFDLDBGQUFvQjtBQUMvQyxNQUFNaUIsc0JBQXNCakIsbUJBQU9BLENBQUMscUdBQXNDO0FBQzFFLE1BQU1rQixhQUFhbEIsbUJBQU9BLENBQUMsMEZBQW9CO0FBQy9DLE1BQU1tQixhQUFhbkIsbUJBQU9BLENBQUMsaUZBQTRCO0FBQ3ZELE1BQU1vQixnQkFBZ0JwQixtQkFBT0EsQ0FBQyx1RkFBK0I7QUFDN0QsTUFBTXFCLGtCQUFrQnJCLG1CQUFPQSxDQUFDLDZGQUFrQztBQUNsRSxNQUFNc0IsZUFBZXRCLG1CQUFPQSxDQUFDLHVGQUErQjtBQUM1RCxNQUFNdUIsZUFBZXZCLG1CQUFPQSxDQUFDLHVGQUErQjtBQUM1RCxNQUFNd0IsZUFBZXhCLG1CQUFPQSxDQUFDLHFGQUE4QjtBQUMzRCxNQUFNeUIsY0FBY3pCLG1CQUFPQSxDQUFDLCtFQUEyQjtBQUN2RCxNQUFNMEIsdUJBQXVCMUIsbUJBQU9BLENBQUMsa0hBQWdDO0FBQ3JFLE1BQU0yQiwwQkFBMEIzQixtQkFBT0EsQ0FBQyx3SEFBbUM7QUFDM0UsTUFBTTRCLGlCQUFpQjVCLG1CQUFPQSxDQUFDLGtHQUF3QjtBQUN2RCxNQUFNNkIsY0FBYzdCLG1CQUFPQSxDQUFDLDhGQUFzQjtBQUNsRCxNQUFNOEIsU0FBUzlCLG1CQUFPQSxDQUFDLGtGQUFnQjtBQUN2QyxNQUFNK0IsUUFBUS9CLG1CQUFPQSxDQUFDLDhFQUFjO0FBQ3BDLE1BQU1nQyxpQkFBaUJoQyxtQkFBT0EsQ0FBQyxrR0FBd0I7QUFDdkQsTUFBTWlDLHNCQUFzQmpDLG1CQUFPQSxDQUFDLDhHQUE4QjtBQUNsRSxTQUFTa0M7SUFDTCxPQUFPbEQsT0FBT21ELE1BQU0sQ0FBQyxJQUFJQyxNQUFNLG9CQUFvQjtRQUMvQ0MsV0FBVztJQUNmO0FBQ0o7QUFDQSxlQUFlL0Msa0JBQWtCZ0QsT0FBTztJQUNwQyxNQUFNQyxXQUFXLE1BQU1DLFFBQVFDLE9BQU8sQ0FBQ0gsUUFBUUksTUFBTSxDQUFDQyxVQUFVLENBQUNDLGFBQWE7SUFDOUUsSUFBSSxDQUFDTCxVQUFVLE9BQU87SUFDdEIsTUFBTSxFQUFFTSxVQUFVQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEdBQUc1QixXQUFXNkIsU0FBUyxFQUFFVCxRQUFRVSxNQUFNO0lBQ3pFLDZGQUE2RjtJQUM3RixNQUFNQyxZQUFZLENBQUMsR0FBRzFCLGFBQWEyQixXQUFXLEVBQUVKLGNBQWMsQ0FBQyxHQUFHekIsZ0JBQWdCOEIsY0FBYyxFQUFFTCxjQUFjQTtJQUNoSCxNQUFNTSwwQkFBMEIsQ0FBQyxHQUFHOUIsYUFBYStCLFdBQVcsRUFBRSxDQUFDLEdBQUdsQyxXQUFXbUMsU0FBUyxFQUFFTCxXQUFXWCxRQUFRaUIsTUFBTTtJQUNqSCwyRUFBMkU7SUFDM0UsdUVBQXVFO0lBQ3ZFLE9BQU9oQixTQUFTaUIsSUFBSSxDQUFDLENBQUNDLElBQUksSUFBSUMsT0FBT0QsRUFBRUUsTUFBTSxFQUFFQyxJQUFJLENBQUNSO0FBQ3hEO0FBQ0EsU0FBU1MsWUFBWUMsR0FBRztJQUNwQixNQUFNQyxTQUFTLENBQUMsR0FBR3JELE9BQU9zRCxpQkFBaUI7SUFDM0MsT0FBT0YsSUFBSUcsVUFBVSxDQUFDRixVQUFVRCxJQUFJSSxTQUFTLENBQUNILE9BQU9JLE1BQU0sSUFBSUw7QUFDbkU7QUFDQSxTQUFTTSxhQUFhMUIsTUFBTSxFQUFFb0IsR0FBRyxFQUFFTyxFQUFFO0lBQ2pDLHNEQUFzRDtJQUN0RCxrREFBa0Q7SUFDbEQsSUFBSSxDQUFDQyxjQUFjQyxXQUFXLEdBQUcsQ0FBQyxHQUFHL0MsYUFBYWdELFdBQVcsRUFBRTlCLFFBQVFvQixLQUFLO0lBQzVFLE1BQU1DLFNBQVMsQ0FBQyxHQUFHckQsT0FBT3NELGlCQUFpQjtJQUMzQyxNQUFNUyxrQkFBa0JILGFBQWFMLFVBQVUsQ0FBQ0Y7SUFDaEQsTUFBTVcsZ0JBQWdCSCxjQUFjQSxXQUFXTixVQUFVLENBQUNGO0lBQzFETyxlQUFlVCxZQUFZUztJQUMzQkMsYUFBYUEsYUFBYVYsWUFBWVUsY0FBY0E7SUFDcEQsTUFBTUksY0FBY0Ysa0JBQWtCSCxlQUFlLENBQUMsR0FBR2hELGFBQWErQixXQUFXLEVBQUVpQjtJQUNuRixNQUFNTSxhQUFhUCxLQUFLUixZQUFZLENBQUMsR0FBR3JDLGFBQWFnRCxXQUFXLEVBQUU5QixRQUFRMkIsT0FBT0UsY0FBY0Q7SUFDL0YsT0FBTztRQUNIUixLQUFLYTtRQUNMTixJQUFJSyxnQkFBZ0JFLGFBQWEsQ0FBQyxHQUFHdEQsYUFBYStCLFdBQVcsRUFBRXVCO0lBQ25FO0FBQ0o7QUFDQSxTQUFTQyxvQkFBb0JoQyxRQUFRLEVBQUVpQyxLQUFLO0lBQ3hDLE1BQU1DLGdCQUFnQixDQUFDLEdBQUc3RSxxQkFBcUI4RSxtQkFBbUIsRUFBRSxDQUFDLEdBQUd6RSxxQkFBcUIwRSxtQkFBbUIsRUFBRXBDO0lBQ2xILElBQUlrQyxrQkFBa0IsVUFBVUEsa0JBQWtCLFdBQVc7UUFDekQsT0FBT2xDO0lBQ1g7SUFDQSwyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDaUMsTUFBTUksUUFBUSxDQUFDSCxnQkFBZ0I7UUFDaEMsaURBQWlEO1FBQ2pERCxNQUFNdEIsSUFBSSxDQUFDLENBQUMyQjtZQUNSLElBQUksQ0FBQyxHQUFHeEUsV0FBV3lFLGNBQWMsRUFBRUQsU0FBUyxDQUFDLEdBQUdwRSxZQUFZc0UsYUFBYSxFQUFFRixNQUFNRyxFQUFFLENBQUMxQixJQUFJLENBQUNtQixnQkFBZ0I7Z0JBQ3JHbEMsV0FBV3NDO2dCQUNYLE9BQU87WUFDWDtRQUNKO0lBQ0o7SUFDQSxPQUFPLENBQUMsR0FBR2pGLHFCQUFxQjhFLG1CQUFtQixFQUFFbkM7QUFDekQ7QUFDQSxTQUFTMEMsa0JBQWtCQyxNQUFNLEVBQUVDLFFBQVEsRUFBRW5ELE9BQU87SUFDaEQsTUFBTW9ELGFBQWE7UUFDZkMsVUFBVXJELFFBQVFJLE1BQU0sQ0FBQ2lELFFBQVE7UUFDakNDLE1BQU07WUFDRkMsU0FBU3ZELFFBQVFJLE1BQU0sQ0FBQ21ELE9BQU87UUFDbkM7UUFDQUMsZUFBZUMsUUFBUUMsS0FBaUM7SUFDNUQ7SUFDQSxNQUFNRyxnQkFBZ0JWLFNBQVNXLE9BQU8sQ0FBQ3ZHLEdBQUcsQ0FBQztJQUMzQyxJQUFJd0csZ0JBQWdCRixpQkFBaUJWLFNBQVNXLE9BQU8sQ0FBQ3ZHLEdBQUcsQ0FBQztJQUMxRCxNQUFNeUcsY0FBY2IsU0FBU1csT0FBTyxDQUFDdkcsR0FBRyxDQUFDO0lBQ3pDLElBQUl5RyxlQUFlLENBQUNELGlCQUFpQixDQUFDQyxZQUFZcEIsUUFBUSxDQUFDLDJCQUEyQixDQUFDb0IsWUFBWXBCLFFBQVEsQ0FBQyxjQUFjLENBQUNvQixZQUFZcEIsUUFBUSxDQUFDLFNBQVM7UUFDckosNERBQTREO1FBQzVEbUIsZ0JBQWdCQztJQUNwQjtJQUNBLElBQUlELGVBQWU7UUFDZixJQUFJQSxjQUFjcEMsVUFBVSxDQUFDLFFBQVErQixTQUFzRCxFQUFFO1lBQ3pGLE1BQU1RLHNCQUFzQixDQUFDLEdBQUc1RixrQkFBa0I2RixnQkFBZ0IsRUFBRUo7WUFDcEUsTUFBTUssZUFBZSxDQUFDLEdBQUdoRixxQkFBcUJpRixtQkFBbUIsRUFBRUgsb0JBQW9CM0QsUUFBUSxFQUFFO2dCQUM3RjZDO2dCQUNBa0IsV0FBVztZQUNmO1lBQ0EsSUFBSUMsYUFBYSxDQUFDLEdBQUczRyxxQkFBcUI4RSxtQkFBbUIsRUFBRTBCLGFBQWE3RCxRQUFRO1lBQ3BGLE9BQU9MLFFBQVE5QyxHQUFHLENBQUM7Z0JBQ2Y0QyxRQUFRSSxNQUFNLENBQUNDLFVBQVUsQ0FBQ21FLFdBQVc7Z0JBQ3BDLElBQUczRyxhQUFhNEcsc0JBQXNCO2FBQzFDLEVBQUVDLElBQUksQ0FBQyxDQUFDQztnQkFDTCxJQUFJLENBQUNuQyxPQUFPLEVBQUVvQyxZQUFZQyxRQUFRLEVBQUUsQ0FBQyxHQUFHRjtnQkFDeEMsSUFBSTVDLEtBQUssQ0FBQyxHQUFHbEQsV0FBV21DLFNBQVMsRUFBRW9ELGFBQWE3RCxRQUFRLEVBQUU2RCxhQUFhbkQsTUFBTTtnQkFDN0UsSUFBSSxDQUFDLEdBQUc1QyxXQUFXeUUsY0FBYyxFQUFFZixPQUFPLENBQUM4QixpQkFBaUJyQixNQUFNSSxRQUFRLENBQUMsQ0FBQyxHQUFHMUUscUJBQXFCNEcsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHL0YsZ0JBQWdCOEIsY0FBYyxFQUFFa0IsS0FBSy9CLFFBQVFJLE1BQU0sQ0FBQ21ELE9BQU8sRUFBRWhELFFBQVEsR0FBRztvQkFDak0sTUFBTXdFLGVBQWUsQ0FBQyxHQUFHM0YscUJBQXFCaUYsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHL0Ysa0JBQWtCNkYsZ0JBQWdCLEVBQUVqQixRQUFRM0MsUUFBUSxFQUFFO3dCQUN6SDZDLFlBQVlNLEtBQStCLEdBQUd1QixZQUFZN0IsQ0FBVUE7d0JBQ3BFa0IsV0FBVztvQkFDZjtvQkFDQXZDLEtBQUssQ0FBQyxHQUFHL0MsYUFBYStCLFdBQVcsRUFBRWdFLGFBQWF4RSxRQUFRO29CQUN4RDJELG9CQUFvQjNELFFBQVEsR0FBR3dCO2dCQUNuQztnQkFDQSxJQUFJMkIsSUFBK0IsRUFBRTtvQkFDakMsTUFBTXdCLFNBQVMsQ0FBQyxHQUFHM0csaUJBQWlCeEIsT0FBTyxFQUFFZ0YsSUFBSVMsT0FBT3FDLFVBQVVYLG9CQUFvQmlCLEtBQUssRUFBRSxDQUFDQyxPQUFPN0Msb0JBQW9CNkMsTUFBTTVDLFFBQVF4QyxRQUFRSSxNQUFNLENBQUNtRCxPQUFPO29CQUM3SixJQUFJMkIsT0FBT0csV0FBVyxFQUFFO3dCQUNwQm5CLG9CQUFvQjNELFFBQVEsR0FBRzJFLE9BQU9JLFFBQVEsQ0FBQy9FLFFBQVE7d0JBQ3ZEd0IsS0FBS21DLG9CQUFvQjNELFFBQVE7d0JBQ2pDN0QsT0FBT21ELE1BQU0sQ0FBQ3FFLG9CQUFvQmlCLEtBQUssRUFBRUQsT0FBT0ksUUFBUSxDQUFDSCxLQUFLO29CQUNsRTtnQkFDSixPQUFPLEVBS047Z0JBQ0QsTUFBTW5ELGVBQWUsQ0FBQ1EsTUFBTUksUUFBUSxDQUFDMkIsY0FBY2hDLG9CQUFvQixDQUFDLEdBQUdyRSxxQkFBcUI0RyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcvRixnQkFBZ0I4QixjQUFjLEVBQUVxRCxvQkFBb0IzRCxRQUFRLEdBQUdQLFFBQVFJLE1BQU0sQ0FBQ21ELE9BQU8sRUFBRWhELFFBQVEsRUFBRWlDLFNBQVMrQjtnQkFDbk8sSUFBSSxDQUFDLEdBQUdsRyxXQUFXeUUsY0FBYyxFQUFFZCxlQUFlO29CQUM5QyxNQUFNd0QsVUFBVSxDQUFDLEdBQUdoSCxjQUFjaUgsZUFBZSxFQUFFLENBQUMsR0FBR2hILFlBQVlzRSxhQUFhLEVBQUVmLGVBQWVEO29CQUNqR3JGLE9BQU9tRCxNQUFNLENBQUNxRSxvQkFBb0JpQixLQUFLLEVBQUVLLFdBQVcsQ0FBQztnQkFDekQ7Z0JBQ0EsT0FBTztvQkFDSEUsTUFBTTtvQkFDTkosVUFBVXBCO29CQUNWbEM7Z0JBQ0o7WUFDSjtRQUNKO1FBQ0EsTUFBTTJELE1BQU0sQ0FBQyxHQUFHL0csV0FBVzZCLFNBQVMsRUFBRXlDO1FBQ3RDLE1BQU0zQyxXQUFXLENBQUMsR0FBR2xCLHdCQUF3QnVHLHNCQUFzQixFQUFFO1lBQ2pFLEdBQUcsQ0FBQyxHQUFHeEcscUJBQXFCaUYsbUJBQW1CLEVBQUVzQixJQUFJcEYsUUFBUSxFQUFFO2dCQUMzRDZDO2dCQUNBa0IsV0FBVztZQUNmLEVBQUU7WUFDRnVCLGVBQWU3RixRQUFRSSxNQUFNLENBQUN5RixhQUFhO1lBQzNDQyxTQUFTO1FBQ2I7UUFDQSxPQUFPNUYsUUFBUUMsT0FBTyxDQUFDO1lBQ25CdUYsTUFBTTtZQUNOSyxhQUFhLEtBQUt4RixXQUFXb0YsSUFBSVIsS0FBSyxHQUFHUSxJQUFJSyxJQUFJO1FBQ3JEO0lBQ0o7SUFDQSxNQUFNQyxpQkFBaUI5QyxTQUFTVyxPQUFPLENBQUN2RyxHQUFHLENBQUM7SUFDNUMsSUFBSTBJLGdCQUFnQjtRQUNoQixJQUFJQSxlQUFldEUsVUFBVSxDQUFDLE1BQU07WUFDaEMsTUFBTWdFLE1BQU0sQ0FBQyxHQUFHL0csV0FBVzZCLFNBQVMsRUFBRXdGO1lBQ3RDLE1BQU0xRixXQUFXLENBQUMsR0FBR2xCLHdCQUF3QnVHLHNCQUFzQixFQUFFO2dCQUNqRSxHQUFHLENBQUMsR0FBR3hHLHFCQUFxQmlGLG1CQUFtQixFQUFFc0IsSUFBSXBGLFFBQVEsRUFBRTtvQkFDM0Q2QztvQkFDQWtCLFdBQVc7Z0JBQ2YsRUFBRTtnQkFDRnVCLGVBQWU3RixRQUFRSSxNQUFNLENBQUN5RixhQUFhO2dCQUMzQ0MsU0FBUztZQUNiO1lBQ0EsT0FBTzVGLFFBQVFDLE9BQU8sQ0FBQztnQkFDbkJ1RixNQUFNO2dCQUNOUSxPQUFPLEtBQUszRixXQUFXb0YsSUFBSVIsS0FBSyxHQUFHUSxJQUFJSyxJQUFJO2dCQUMzQ0csUUFBUSxLQUFLNUYsV0FBV29GLElBQUlSLEtBQUssR0FBR1EsSUFBSUssSUFBSTtZQUNoRDtRQUNKO1FBQ0EsT0FBTzlGLFFBQVFDLE9BQU8sQ0FBQztZQUNuQnVGLE1BQU07WUFDTkssYUFBYUU7UUFDakI7SUFDSjtJQUNBLE9BQU8vRixRQUFRQyxPQUFPLENBQUM7UUFDbkJ1RixNQUFNO0lBQ1Y7QUFDSjtBQUNBLGVBQWVVLHNCQUFzQnBHLE9BQU87SUFDeEMsTUFBTXdGLFVBQVUsTUFBTXhJLGtCQUFrQmdEO0lBQ3hDLElBQUksQ0FBQ3dGLFdBQVcsQ0FBQ3hGLFFBQVFxRyxTQUFTLEVBQUU7UUFDaEMsT0FBTztJQUNYO0lBQ0EsSUFBSTtRQUNBLE1BQU1DLE9BQU8sTUFBTXRHLFFBQVFxRyxTQUFTO1FBQ3BDLE1BQU1FLFNBQVMsTUFBTXRELGtCQUFrQnFELEtBQUtFLFFBQVEsRUFBRUYsS0FBS25ELFFBQVEsRUFBRW5EO1FBQ3JFLE9BQU87WUFDSHdHLFVBQVVGLEtBQUtFLFFBQVE7WUFDdkJDLE1BQU1ILEtBQUtHLElBQUk7WUFDZnRELFVBQVVtRCxLQUFLbkQsUUFBUTtZQUN2QnVELE1BQU1KLEtBQUtJLElBQUk7WUFDZkMsVUFBVUwsS0FBS0ssUUFBUTtZQUN2Qko7UUFDSjtJQUNKLEVBQUUsT0FBT0ssR0FBRztRQUNSOzs7O0tBSUgsR0FBRyxPQUFPO0lBQ1g7QUFDSjtBQUNBLE1BQU1DLDBCQUEwQm5ELE1BQStHLElBQUksQ0FNaEo7QUFDSCxNQUFNNEQscUJBQXFCQyxPQUFPO0FBQ2xDLFNBQVNDLFdBQVdoRyxHQUFHLEVBQUVpRyxRQUFRLEVBQUV6SCxPQUFPO0lBQ3RDLE9BQU8wSCxNQUFNbEcsS0FBSztRQUNkLHNFQUFzRTtRQUN0RSx5REFBeUQ7UUFDekQsRUFBRTtRQUNGLG9FQUFvRTtRQUNwRSxZQUFZO1FBQ1osbUVBQW1FO1FBQ25FLEVBQUU7UUFDRixpRUFBaUU7UUFDakUsc0VBQXNFO1FBQ3RFLDhDQUE4QztRQUM5QywwQ0FBMEM7UUFDMUNtRyxhQUFhO1FBQ2JDLFFBQVE1SCxRQUFRNEgsTUFBTSxJQUFJO1FBQzFCOUQsU0FBU3BILE9BQU9tRCxNQUFNLENBQUMsQ0FBQyxHQUFHRyxRQUFROEQsT0FBTyxFQUFFO1lBQ3hDLGlCQUFpQjtRQUNyQjtJQUNKLEdBQUdZLElBQUksQ0FBQyxDQUFDdkI7UUFDTCxPQUFPLENBQUNBLFNBQVMwRSxFQUFFLElBQUlKLFdBQVcsS0FBS3RFLFNBQVMyRSxNQUFNLElBQUksTUFBTU4sV0FBV2hHLEtBQUtpRyxXQUFXLEdBQUd6SCxXQUFXbUQ7SUFDN0c7QUFDSjtBQUNBLFNBQVM0RSxpQkFBaUJyQixJQUFJO0lBQzFCLElBQUk7UUFDQSxPQUFPc0IsS0FBS0MsS0FBSyxDQUFDdkI7SUFDdEIsRUFBRSxPQUFPd0IsT0FBTztRQUNaLE9BQU87SUFDWDtBQUNKO0FBQ0EsU0FBU0MsY0FBY3hELEtBQUs7SUFDeEIsSUFBSSxFQUFFNkIsUUFBUSxFQUFFNEIsYUFBYSxFQUFFQyxVQUFVLEVBQUVDLGFBQWEsRUFBRUMsY0FBYyxFQUFFQyxTQUFTLEVBQUVDLFlBQVksRUFBRUMsWUFBWSxFQUFFQyx3QkFBd0IsRUFBRSxHQUFHaEU7SUFDOUksTUFBTSxFQUFFaUUsTUFBTWpDLFFBQVEsRUFBRSxHQUFHLElBQUlrQyxJQUFJckMsVUFBVU8sT0FBTytCLFFBQVEsQ0FBQ0YsSUFBSTtJQUNqRSxJQUFJRztJQUNKLE1BQU1DLFVBQVUsQ0FBQ0MsU0FBU3pCLFdBQVdoQixVQUFVK0IsaUJBQWlCLElBQUksR0FBRztZQUMvRHpFLFNBQVNwSCxPQUFPbUQsTUFBTSxDQUFDLENBQUMsR0FBR3dJLGFBQWE7Z0JBQ3BDYSxTQUFTO1lBQ2IsSUFBSSxDQUFDLEdBQUdiLGNBQWNDLGdCQUFnQjtnQkFDbEMseUJBQXlCO1lBQzdCLElBQUksQ0FBQztZQUNMVixRQUFRLENBQUNtQixpQkFBaUJFLFVBQVUsT0FBTyxLQUFLLElBQUlBLE9BQU9yQixNQUFNLEtBQUssT0FBT21CLGlCQUFpQjtRQUNsRyxHQUFHckUsSUFBSSxDQUFDLENBQUN2QjtZQUNMLElBQUlBLFNBQVMwRSxFQUFFLElBQUksQ0FBQ29CLFVBQVUsT0FBTyxLQUFLLElBQUlBLE9BQU9yQixNQUFNLE1BQU0sUUFBUTtnQkFDckUsT0FBTztvQkFDSHBCO29CQUNBckQ7b0JBQ0F1RCxNQUFNO29CQUNORCxNQUFNLENBQUM7b0JBQ1BFO2dCQUNKO1lBQ0o7WUFDQSxPQUFPeEQsU0FBU3VELElBQUksR0FBR2hDLElBQUksQ0FBQyxDQUFDZ0M7Z0JBQ3pCLElBQUksQ0FBQ3ZELFNBQVMwRSxFQUFFLEVBQUU7b0JBQ2Q7Ozs7O2FBS1AsR0FBRyxJQUFJUyxpQkFBaUI7d0JBQ2I7d0JBQ0E7d0JBQ0E7d0JBQ0E7cUJBQ0gsQ0FBQzFGLFFBQVEsQ0FBQ08sU0FBUzJFLE1BQU0sR0FBRzt3QkFDekIsT0FBTzs0QkFDSHRCOzRCQUNBckQ7NEJBQ0F1RDs0QkFDQUQsTUFBTSxDQUFDOzRCQUNQRTt3QkFDSjtvQkFDSjtvQkFDQSxJQUFJeEQsU0FBUzJFLE1BQU0sS0FBSyxLQUFLO3dCQUN6QixJQUFJcUI7d0JBQ0osSUFBSSxDQUFDQSxvQkFBb0JwQixpQkFBaUJyQixLQUFJLEtBQU0sT0FBTyxLQUFLLElBQUl5QyxrQkFBa0JDLFFBQVEsRUFBRTs0QkFDNUYsT0FBTztnQ0FDSDVDO2dDQUNBQyxNQUFNO29DQUNGMkMsVUFBVTlCO2dDQUNkO2dDQUNBbkU7Z0NBQ0F1RDtnQ0FDQUM7NEJBQ0o7d0JBQ0o7b0JBQ0o7b0JBQ0EsTUFBTXVCLFFBQVEsSUFBSXBJLE1BQU07b0JBQ3hCOzs7O2FBSVAsR0FBRyxJQUFJLENBQUN5SSxnQkFBZ0I7d0JBQ1osSUFBRzFLLGFBQWF3TCxjQUFjLEVBQUVuQjtvQkFDckM7b0JBQ0EsTUFBTUE7Z0JBQ1Y7Z0JBQ0EsT0FBTztvQkFDSDFCO29CQUNBQyxNQUFNK0IsWUFBWVQsaUJBQWlCckIsUUFBUTtvQkFDM0N2RDtvQkFDQXVEO29CQUNBQztnQkFDSjtZQUNKO1FBQ0osR0FBR2pDLElBQUksQ0FBQyxDQUFDNEI7WUFDTCxJQUFJLENBQUNtQyxnQkFBZ0IvRSxrQkFBeUIsZ0JBQWdCNEMsQ0FBOEQsRUFBRTtnQkFDMUgsT0FBTzhCLGFBQWEsQ0FBQ3pCLFNBQVM7WUFDbEM7WUFDQSxPQUFPTDtRQUNYLEdBQUdnRCxLQUFLLENBQUMsQ0FBQ0M7WUFDTixJQUFJLENBQUNaLDBCQUEwQjtnQkFDM0IsT0FBT1AsYUFBYSxDQUFDekIsU0FBUztZQUNsQztZQUNBLElBQ0E0QyxJQUFJQyxPQUFPLEtBQUsscUJBQXFCLFVBQVU7WUFDL0NELElBQUlDLE9BQU8sS0FBSyxxREFBcUQsU0FBUztZQUM5RUQsSUFBSUMsT0FBTyxLQUFLLGVBQWU7Z0JBQzFCLElBQUczTCxhQUFhd0wsY0FBYyxFQUFFRTtZQUNyQztZQUNBLE1BQU1BO1FBQ1Y7SUFDSiwrQ0FBK0M7SUFDL0MsZ0RBQWdEO0lBQ2hELDBEQUEwRDtJQUMxRCwyREFBMkQ7SUFDM0QsSUFBSVosNEJBQTRCRixjQUFjO1FBQzFDLE9BQU9PLFFBQVEsQ0FBQyxHQUFHdEUsSUFBSSxDQUFDLENBQUM0QjtZQUNyQjhCLGFBQWEsQ0FBQ3pCLFNBQVMsR0FBR3pHLFFBQVFDLE9BQU8sQ0FBQ21HO1lBQzFDLE9BQU9BO1FBQ1g7SUFDSjtJQUNBLElBQUk4QixhQUFhLENBQUN6QixTQUFTLEtBQUsxQixXQUFXO1FBQ3ZDLE9BQU9tRCxhQUFhLENBQUN6QixTQUFTO0lBQ2xDO0lBQ0EsT0FBT3lCLGFBQWEsQ0FBQ3pCLFNBQVMsR0FBR3FDLFFBQVFOLGVBQWU7UUFDcERkLFFBQVE7SUFDWixJQUFJLENBQUM7QUFDVDtBQUNBLFNBQVMzSztJQUNMLE9BQU93TSxLQUFLQyxNQUFNLEdBQUdDLFFBQVEsQ0FBQyxJQUFJQyxLQUFLLENBQUMsR0FBRztBQUMvQztBQUNBLFNBQVNDLHFCQUFxQmxGLEtBQUs7SUFDL0IsSUFBSSxFQUFFbkQsR0FBRyxFQUFFcEIsTUFBTSxFQUFFLEdBQUd1RTtJQUN0Qix3REFBd0Q7SUFDeEQsa0RBQWtEO0lBQ2xELElBQUluRCxRQUFRLENBQUMsR0FBR3hDLGFBQWErQixXQUFXLEVBQUUsQ0FBQyxHQUFHbEMsV0FBV21DLFNBQVMsRUFBRVosT0FBT00sTUFBTSxFQUFFTixPQUFPYSxNQUFNLElBQUk7UUFDaEcsTUFBTSxJQUFJbkIsTUFBTSwyREFBMkQwQixNQUFNLE1BQU1zSCxTQUFTRixJQUFJO0lBQ3hHO0lBQ0E3QixPQUFPK0IsUUFBUSxDQUFDRixJQUFJLEdBQUdwSDtBQUMzQjtBQUNBLE1BQU1zSSxzQkFBc0IsQ0FBQ25GO0lBQ3pCLElBQUksRUFBRW9GLEtBQUssRUFBRTNKLE1BQU0sRUFBRSxHQUFHdUU7SUFDeEIsSUFBSTVFLFlBQVk7SUFDaEIsTUFBTWlLLFNBQVM1SixPQUFPNkosR0FBRyxHQUFHO1FBQ3hCbEssWUFBWTtJQUNoQjtJQUNBLE1BQU1tSyxrQkFBa0I7UUFDcEIsSUFBSW5LLFdBQVc7WUFDWCxNQUFNbUksUUFBUSxJQUFJcEksTUFBTSwwQ0FBMENpSyxRQUFRO1lBQzFFN0IsTUFBTW5JLFNBQVMsR0FBRztZQUNsQixNQUFNbUk7UUFDVjtRQUNBLElBQUk4QixXQUFXNUosT0FBTzZKLEdBQUcsRUFBRTtZQUN2QjdKLE9BQU82SixHQUFHLEdBQUc7UUFDakI7SUFDSjtJQUNBLE9BQU9DO0FBQ1g7QUFDQSxNQUFNMU07SUFDRjJNLFNBQVM7UUFDTHBELE9BQU8rQixRQUFRLENBQUNxQixNQUFNO0lBQzFCO0lBQ0E7O0dBRUQsR0FBR0MsT0FBTztRQUNMckQsT0FBT0MsT0FBTyxDQUFDb0QsSUFBSTtJQUN2QjtJQUNBOztHQUVELEdBQUdDLFVBQVU7UUFDUnRELE9BQU9DLE9BQU8sQ0FBQ3FELE9BQU87SUFDMUI7SUFDQTs7Ozs7R0FLRCxHQUFHQyxLQUFLOUksR0FBRyxFQUFFTyxFQUFFLEVBQUUvQixPQUFPLEVBQUU7UUFDckIsSUFBSUEsWUFBWSxLQUFLLEdBQUdBLFVBQVUsQ0FBQztRQUNuQyxJQUFJMEQsS0FBcUMsRUFBRSxFQVkxQztRQUNBLEdBQUVsQyxHQUFHLEVBQUVPLEVBQUUsRUFBRSxHQUFHRCxhQUFhLElBQUksRUFBRU4sS0FBS08sR0FBRTtRQUN6QyxPQUFPLElBQUksQ0FBQytJLE1BQU0sQ0FBQyxhQUFhdEosS0FBS08sSUFBSS9CO0lBQzdDO0lBQ0E7Ozs7O0dBS0QsR0FBRytLLFFBQVF2SixHQUFHLEVBQUVPLEVBQUUsRUFBRS9CLE9BQU8sRUFBRTtRQUN4QixJQUFJQSxZQUFZLEtBQUssR0FBR0EsVUFBVSxDQUFDO1FBQ2xDLEdBQUV3QixHQUFHLEVBQUVPLEVBQUUsRUFBRSxHQUFHRCxhQUFhLElBQUksRUFBRU4sS0FBS08sR0FBRTtRQUN6QyxPQUFPLElBQUksQ0FBQytJLE1BQU0sQ0FBQyxnQkFBZ0J0SixLQUFLTyxJQUFJL0I7SUFDaEQ7SUFDQSxNQUFNZ0wsS0FBS2pKLEVBQUUsRUFBRUUsVUFBVSxFQUFFaEIsTUFBTSxFQUFFZ0ssWUFBWSxFQUFFO1FBQzdDLElBQUl2SCxJQUErQyxFQUFFO1lBQ2pELElBQUl5SCxtQkFBbUI7WUFDdkIsSUFBSUMsb0JBQW9CO1lBQ3hCLEtBQUssTUFBTUMsU0FBUztnQkFDaEJ0SjtnQkFDQUU7YUFDSCxDQUFDO2dCQUNFLElBQUlvSixPQUFPO29CQUNQLE1BQU1DLFlBQVksQ0FBQyxHQUFHMU4scUJBQXFCOEUsbUJBQW1CLEVBQUUsSUFBSW1HLElBQUl3QyxPQUFPLFlBQVk5SyxRQUFRO29CQUNuRyxNQUFNZ0wsa0JBQWtCLENBQUMsR0FBR3ZNLGFBQWErQixXQUFXLEVBQUUsQ0FBQyxHQUFHbEMsV0FBV21DLFNBQVMsRUFBRXNLLFdBQVdySyxVQUFVLElBQUksQ0FBQ0EsTUFBTTtvQkFDaEgsSUFBSXFLLGNBQWMsQ0FBQyxHQUFHMU4scUJBQXFCOEUsbUJBQW1CLEVBQUUsSUFBSW1HLElBQUksSUFBSSxDQUFDbkksTUFBTSxFQUFFLFlBQVlILFFBQVEsR0FBRzt3QkFDeEcsSUFBSWlMLGNBQWNDO3dCQUNsQk4sbUJBQW1CQSxvQkFBb0IsQ0FBQyxDQUFFLEVBQUNLLGVBQWUsSUFBSSxDQUFDRSxNQUFNLEtBQUssT0FBTyxLQUFLLElBQUlGLGFBQWFHLFFBQVEsQ0FBQ0wsVUFBUyxLQUFNLENBQUMsQ0FBRSxFQUFDRyxnQkFBZ0IsSUFBSSxDQUFDQyxNQUFNLEtBQUssT0FBTyxLQUFLLElBQUlELGNBQWNFLFFBQVEsQ0FBQ0osZ0JBQWU7d0JBQ3pOLEtBQUssTUFBTUssZ0JBQWdCOzRCQUN2Qk47NEJBQ0FDO3lCQUNILENBQUM7NEJBQ0Usc0RBQXNEOzRCQUN0RCw4QkFBOEI7NEJBQzlCLE1BQU1NLGFBQWFELGFBQWFFLEtBQUssQ0FBQzs0QkFDdEMsSUFBSSxJQUFJQyxJQUFJLEdBQUcsQ0FBQ1gscUJBQXFCVyxJQUFJRixXQUFXaEssTUFBTSxHQUFHLEdBQUdrSyxJQUFJO2dDQUNoRSxJQUFJQztnQ0FDSixNQUFNQyxjQUFjSixXQUFXakMsS0FBSyxDQUFDLEdBQUdtQyxHQUFHRyxJQUFJLENBQUM7Z0NBQ2hELElBQUlELGVBQWdCLEVBQUNELGVBQWUsSUFBSSxDQUFDRyxNQUFNLEtBQUssT0FBTyxLQUFLLElBQUlILGFBQWFMLFFBQVEsQ0FBQ00sWUFBVyxHQUFJO29DQUNyR2Isb0JBQW9CO29DQUNwQjtnQ0FDSjs0QkFDSjt3QkFDSjt3QkFDQSx5REFBeUQ7d0JBQ3pELG9CQUFvQjt3QkFDcEIsSUFBSUQsb0JBQW9CQyxtQkFBbUI7NEJBQ3ZDLElBQUlILGNBQWM7Z0NBQ2QsT0FBTzs0QkFDWDs0QkFDQXBCLHFCQUFxQjtnQ0FDakJySSxLQUFLLENBQUMsR0FBR3hDLGFBQWErQixXQUFXLEVBQUUsQ0FBQyxHQUFHbEMsV0FBV21DLFNBQVMsRUFBRWUsSUFBSWQsVUFBVSxJQUFJLENBQUNBLE1BQU0sRUFBRSxJQUFJLENBQUM0RSxhQUFhO2dDQUMxR3pGLFFBQVEsSUFBSTs0QkFDaEI7NEJBQ0EsT0FBTyxJQUFJRixRQUFRLEtBQUs7d0JBQzVCO29CQUNKO2dCQUNKO1lBQ0o7UUFDSjtRQUNBLE9BQU87SUFDWDtJQUNBLE1BQU00SyxPQUFPbEQsTUFBTSxFQUFFcEcsR0FBRyxFQUFFTyxFQUFFLEVBQUUvQixPQUFPLEVBQUVvTSxZQUFZLEVBQUU7UUFDakQsSUFBSUM7UUFDSixJQUFJLENBQUMsQ0FBQyxHQUFHOU0sWUFBWStNLFVBQVUsRUFBRTlLLE1BQU07WUFDbkNxSSxxQkFBcUI7Z0JBQ2pCckk7Z0JBQ0FwQixRQUFRLElBQUk7WUFDaEI7WUFDQSxPQUFPO1FBQ1g7UUFDQSxzRUFBc0U7UUFDdEUseUVBQXlFO1FBQ3pFLDJCQUEyQjtRQUMzQixNQUFNbU0sa0JBQWtCdk0sUUFBUXdNLEVBQUUsS0FBSztRQUN2QyxJQUFJLENBQUNELG1CQUFtQixDQUFDdk0sUUFBUXlNLE9BQU8sRUFBRTtZQUN0QyxNQUFNLElBQUksQ0FBQ3pCLElBQUksQ0FBQ2pKLElBQUlrRCxXQUFXakYsUUFBUWlCLE1BQU07UUFDakQ7UUFDQSxJQUFJeUwsb0JBQW9CSCxtQkFBbUJ2TSxRQUFRMk0sa0JBQWtCLElBQUksQ0FBQyxHQUFHL04sV0FBVzZCLFNBQVMsRUFBRWUsS0FBS2pCLFFBQVEsS0FBSyxDQUFDLEdBQUczQixXQUFXNkIsU0FBUyxFQUFFc0IsSUFBSXhCLFFBQVE7UUFDM0osTUFBTXFNLFlBQVk7WUFDZCxHQUFHLElBQUksQ0FBQ0MsS0FBSztRQUNqQjtRQUNBLHlEQUF5RDtRQUN6RCw0REFBNEQ7UUFDNUQsK0JBQStCO1FBQy9CLE1BQU1DLG1CQUFtQixJQUFJLENBQUNDLE9BQU8sS0FBSztRQUMxQyxJQUFJLENBQUNBLE9BQU8sR0FBRztRQUNmLE1BQU1DLFFBQVEsSUFBSSxDQUFDQSxLQUFLO1FBQ3hCLElBQUksQ0FBQ1QsaUJBQWlCO1lBQ2xCLElBQUksQ0FBQ1MsS0FBSyxHQUFHO1FBQ2pCO1FBQ0Esc0RBQXNEO1FBQ3RELHdEQUF3RDtRQUN4RCxJQUFJVCxtQkFBbUIsSUFBSSxDQUFDdEMsR0FBRyxFQUFFO1lBQzdCLE9BQU87UUFDWDtRQUNBLE1BQU1nRCxhQUFhTCxVQUFVM0wsTUFBTTtRQUNuQyxJQUFJeUMsS0FBK0IsRUFBRSxzQkFrRHBDO1FBQ0Qsb0RBQW9EO1FBQ3BELElBQUl0RixPQUFPNFAsRUFBRSxFQUFFO1lBQ1hDLFlBQVlDLElBQUksQ0FBQztRQUNyQjtRQUNBLE1BQU0sRUFBRXpCLFVBQVUsS0FBSyxFQUFFMEIsU0FBUyxJQUFJLEVBQUUsR0FBR25PO1FBQzNDLE1BQU1vTyxhQUFhO1lBQ2YzQjtRQUNKO1FBQ0EsSUFBSSxJQUFJLENBQUM0QixjQUFjLElBQUksSUFBSSxDQUFDcEUsR0FBRyxFQUFFO1lBQ2pDLElBQUksQ0FBQytDLE9BQU87Z0JBQ1J4UCxPQUFPOFEsTUFBTSxDQUFDQyxJQUFJLENBQUMsb0JBQW9CM08sMEJBQTBCLElBQUksQ0FBQ3lPLGNBQWMsRUFBRUQ7WUFDMUY7WUFDQSxJQUFJLENBQUNuRSxHQUFHO1lBQ1IsSUFBSSxDQUFDQSxHQUFHLEdBQUc7UUFDZjtRQUNBbEksS0FBSyxDQUFDLEdBQUcvQyxhQUFhK0IsV0FBVyxFQUFFLENBQUMsR0FBR2xDLFdBQVdtQyxTQUFTLEVBQUUsQ0FBQyxHQUFHL0IsYUFBYTJCLFdBQVcsRUFBRW1CLE1BQU0sQ0FBQyxHQUFHaEQsZ0JBQWdCOEIsY0FBYyxFQUFFa0IsTUFBTUEsSUFBSS9CLFFBQVFpQixNQUFNLEVBQUUsSUFBSSxDQUFDNEUsYUFBYTtRQUNqTCxNQUFNbEYsWUFBWSxDQUFDLEdBQUc3QixjQUFjMFAsWUFBWSxFQUFFLENBQUMsR0FBR3ZQLGFBQWEyQixXQUFXLEVBQUVtQixNQUFNLENBQUMsR0FBR2hELGdCQUFnQjhCLGNBQWMsRUFBRWtCLE1BQU1BLElBQUk2SyxVQUFVM0wsTUFBTTtRQUNwSixJQUFJLENBQUNvTixjQUFjLEdBQUd0TTtRQUN0QixNQUFNME0sZUFBZXhCLGVBQWVMLFVBQVUzTCxNQUFNO1FBQ3BELHFEQUFxRDtRQUNyRCwwREFBMEQ7UUFDMUQsSUFBSSxDQUFDc0wsbUJBQW1CLElBQUksQ0FBQ21DLGVBQWUsQ0FBQy9OLGNBQWMsQ0FBQzhOLGNBQWM7WUFDdEU3QixVQUFVbE0sTUFBTSxHQUFHQztZQUNuQm5ELE9BQU84USxNQUFNLENBQUNDLElBQUksQ0FBQyxtQkFBbUJ4TSxJQUFJcU07WUFDMUMsOERBQThEO1lBQzlELElBQUksQ0FBQ08sV0FBVyxDQUFDL0csUUFBUXBHLEtBQUtPLElBQUk7Z0JBQzlCLEdBQUcvQixPQUFPO2dCQUNWbU8sUUFBUTtZQUNaO1lBQ0EsSUFBSUEsUUFBUTtnQkFDUixJQUFJLENBQUNTLFlBQVksQ0FBQ2pPO1lBQ3RCO1lBQ0EsSUFBSTtnQkFDQSxNQUFNLElBQUksQ0FBQ2tPLEdBQUcsQ0FBQ2pDLFdBQVcsSUFBSSxDQUFDa0MsVUFBVSxDQUFDbEMsVUFBVTdDLEtBQUssQ0FBQyxFQUFFO1lBQ2hFLEVBQUUsT0FBT1IsS0FBSztnQkFDVixJQUFJLENBQUMsR0FBR3hMLFNBQVNoQixPQUFPLEVBQUV3TSxRQUFRQSxJQUFJeEosU0FBUyxFQUFFO29CQUM3Q3ZDLE9BQU84USxNQUFNLENBQUNDLElBQUksQ0FBQyxvQkFBb0JoRixLQUFLNUksV0FBV3lOO2dCQUMzRDtnQkFDQSxNQUFNN0U7WUFDVjtZQUNBL0wsT0FBTzhRLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLHNCQUFzQnhNLElBQUlxTTtZQUM3QyxPQUFPO1FBQ1g7UUFDQSxJQUFJVyxTQUFTLENBQUMsR0FBR3pRLGtCQUFrQjZGLGdCQUFnQixFQUFFM0M7UUFDckQsSUFBSSxFQUFFakIsUUFBUSxFQUFFNEUsS0FBSyxFQUFFLEdBQUc0SjtRQUMxQix5RUFBeUU7UUFDekUsMkVBQTJFO1FBQzNFLG9CQUFvQjtRQUNwQixJQUFJdk0sT0FBT3FDO1FBQ1gsSUFBSTtZQUNBLENBQUNyQyxPQUFPLEVBQUVvQyxZQUFZQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLE1BQU0zRSxRQUFROUMsR0FBRyxDQUFDO2dCQUNsRCxJQUFJLENBQUNpRCxVQUFVLENBQUNtRSxXQUFXO2dCQUMxQixJQUFHM0csYUFBYTRHLHNCQUFzQjtnQkFDdkMsSUFBSSxDQUFDcEUsVUFBVSxDQUFDQyxhQUFhO2FBQ2hDO1FBQ0wsRUFBRSxPQUFPaUosS0FBSztZQUNWLHdFQUF3RTtZQUN4RSwrQkFBK0I7WUFDL0JNLHFCQUFxQjtnQkFDakJySSxLQUFLTztnQkFDTDNCLFFBQVEsSUFBSTtZQUNoQjtZQUNBLE9BQU87UUFDWDtRQUNBLHVFQUF1RTtRQUN2RSw4RUFBOEU7UUFDOUUsdURBQXVEO1FBQ3ZELG9FQUFvRTtRQUNwRSxzRUFBc0U7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQzRPLFFBQVEsQ0FBQ3JPLGNBQWMsQ0FBQzhOLGNBQWM7WUFDNUM3RyxTQUFTO1FBQ2I7UUFDQSxpRUFBaUU7UUFDakUsaURBQWlEO1FBQ2pELElBQUkzRixhQUFhRjtRQUNqQiw2REFBNkQ7UUFDN0QsZ0VBQWdFO1FBQ2hFLDJEQUEyRDtRQUMzRHhCLFdBQVdBLFdBQVcsQ0FBQyxHQUFHM0MscUJBQXFCOEUsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHM0QsZ0JBQWdCOEIsY0FBYyxFQUFFTixhQUFhQTtRQUNySCxJQUFJd0osUUFBUSxDQUFDLEdBQUduTSxxQkFBcUI4RSxtQkFBbUIsRUFBRW5DO1FBQzFELE1BQU0wTyxtQkFBbUJsTixHQUFHSixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUdyRCxrQkFBa0I2RixnQkFBZ0IsRUFBRXBDLElBQUl4QixRQUFRO1FBQ25HLDBEQUEwRDtRQUMxRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDOEwsNEJBQTRCLElBQUksQ0FBQ3lDLFVBQVUsQ0FBQ3ZPLFNBQVMsS0FBSyxPQUFPLEtBQUssSUFBSThMLDBCQUEwQjZDLFdBQVcsRUFBRTtZQUNsSHJGLHFCQUFxQjtnQkFDakJySSxLQUFLTztnQkFDTDNCLFFBQVEsSUFBSTtZQUNoQjtZQUNBLE9BQU8sSUFBSUYsUUFBUSxLQUFLO1FBQzVCO1FBQ0EsTUFBTWlQLHNCQUFzQixDQUFDLENBQUVGLENBQUFBLG9CQUFvQmxGLFVBQVVrRixvQkFBcUIsRUFBQyxDQUFDLEdBQUc1USxXQUFXeUUsY0FBYyxFQUFFaUgsVUFBVSxDQUFDLENBQUMsR0FBR3ZMLGNBQWNpSCxlQUFlLEVBQUUsQ0FBQyxHQUFHaEgsWUFBWXNFLGFBQWEsRUFBRWdILFFBQVFrRixpQkFBZ0IsQ0FBQztRQUN4TiwwREFBMEQ7UUFDMUQscURBQXFEO1FBQ3JELE1BQU1HLG9CQUFvQixDQUFDcFAsUUFBUXlNLE9BQU8sSUFBSSxNQUFNelAsa0JBQWtCO1lBQ2xFMEQsUUFBUXFCO1lBQ1JkLFFBQVEyTCxVQUFVM0wsTUFBTTtZQUN4QmIsUUFBUSxJQUFJO1FBQ2hCO1FBQ0EsSUFBSW1NLG1CQUFtQjZDLG1CQUFtQjtZQUN0QzFDLG9CQUFvQjtRQUN4QjtRQUNBLElBQUlBLHFCQUFxQm5NLGFBQWEsV0FBVztZQUM3Q1AsUUFBUTJNLGtCQUFrQixHQUFHO1lBQzdCLElBQUlqSixLQUErQixJQUFJM0IsR0FBR0osVUFBVSxDQUFDLE1BQU07Z0JBQ3ZELE1BQU0wTixpQkFBaUIsQ0FBQyxHQUFHOVEsaUJBQWlCeEIsT0FBTyxFQUFFLENBQUMsR0FBR2lDLGFBQWErQixXQUFXLEVBQUUsQ0FBQyxHQUFHbEMsV0FBV21DLFNBQVMsRUFBRUwsV0FBV2lNLFVBQVUzTCxNQUFNLEdBQUcsT0FBT3VCLE9BQU9xQyxVQUFVTSxPQUFPLENBQUNtSyxJQUFJL00sb0JBQW9CK00sR0FBRzlNLFFBQVEsSUFBSSxDQUFDZSxPQUFPO2dCQUMxTixJQUFJOEwsZUFBZUUsWUFBWSxFQUFFO29CQUM3QjFGLHFCQUFxQjt3QkFDakJySSxLQUFLTzt3QkFDTDNCLFFBQVEsSUFBSTtvQkFDaEI7b0JBQ0EsT0FBTztnQkFDWDtnQkFDQSxJQUFJLENBQUNnUCxtQkFBbUI7b0JBQ3BCbk4sYUFBYW9OLGVBQWUzTyxNQUFNO2dCQUN0QztnQkFDQSxJQUFJMk8sZUFBZWhLLFdBQVcsSUFBSWdLLGVBQWVyTixZQUFZLEVBQUU7b0JBQzNELGdFQUFnRTtvQkFDaEUsNENBQTRDO29CQUM1Q3pCLFdBQVc4TyxlQUFlck4sWUFBWTtvQkFDdEMrTSxPQUFPeE8sUUFBUSxHQUFHLENBQUMsR0FBR3ZCLGFBQWErQixXQUFXLEVBQUVSO29CQUNoRCxJQUFJLENBQUM2TyxtQkFBbUI7d0JBQ3BCNU4sTUFBTSxDQUFDLEdBQUc5QyxXQUFXMk8sb0JBQW9CLEVBQUUwQjtvQkFDL0M7Z0JBQ0o7WUFDSixPQUFPO2dCQUNIQSxPQUFPeE8sUUFBUSxHQUFHZ0Msb0JBQW9CaEMsVUFBVWlDO2dCQUNoRCxJQUFJdU0sT0FBT3hPLFFBQVEsS0FBS0EsVUFBVTtvQkFDOUJBLFdBQVd3TyxPQUFPeE8sUUFBUTtvQkFDMUJ3TyxPQUFPeE8sUUFBUSxHQUFHLENBQUMsR0FBR3ZCLGFBQWErQixXQUFXLEVBQUVSO29CQUNoRCxJQUFJLENBQUM2TyxtQkFBbUI7d0JBQ3BCNU4sTUFBTSxDQUFDLEdBQUc5QyxXQUFXMk8sb0JBQW9CLEVBQUUwQjtvQkFDL0M7Z0JBQ0o7WUFDSjtRQUNKO1FBQ0EsSUFBSSxDQUFDLENBQUMsR0FBR3hQLFlBQVkrTSxVQUFVLEVBQUV2SyxLQUFLO1lBQ2xDLElBQUkyQixJQUFxQyxFQUFFO2dCQUN2QyxNQUFNLElBQUk1RCxNQUFNLG9CQUFvQjBCLE1BQU0sZ0JBQWdCTyxLQUFLLDhDQUE4QztZQUNqSDtZQUNBOEgscUJBQXFCO2dCQUNqQnJJLEtBQUtPO2dCQUNMM0IsUUFBUSxJQUFJO1lBQ2hCO1lBQ0EsT0FBTztRQUNYO1FBQ0E2QixhQUFhLENBQUMsR0FBR25ELGNBQWMwUCxZQUFZLEVBQUUsQ0FBQyxHQUFHelAsZ0JBQWdCOEIsY0FBYyxFQUFFb0IsYUFBYTJLLFVBQVUzTCxNQUFNO1FBQzlHOEksUUFBUSxDQUFDLEdBQUduTSxxQkFBcUI4RSxtQkFBbUIsRUFBRW5DO1FBQ3RELElBQUlpUCxhQUFhO1FBQ2pCLElBQUksQ0FBQyxHQUFHblIsV0FBV3lFLGNBQWMsRUFBRWlILFFBQVE7WUFDdkMsTUFBTXpFLFdBQVcsQ0FBQyxHQUFHaEgsa0JBQWtCNkYsZ0JBQWdCLEVBQUVsQztZQUN6RCxNQUFNekIsYUFBYThFLFNBQVMvRSxRQUFRO1lBQ3BDLE1BQU1rUCxhQUFhLENBQUMsR0FBR2hSLFlBQVlzRSxhQUFhLEVBQUVnSDtZQUNsRHlGLGFBQWEsQ0FBQyxHQUFHaFIsY0FBY2lILGVBQWUsRUFBRWdLLFlBQVlqUDtZQUM1RCxNQUFNa1Asb0JBQW9CM0YsVUFBVXZKO1lBQ3BDLE1BQU1tUCxpQkFBaUJELG9CQUFvQixDQUFDLEdBQUdoUSxlQUFla1EsYUFBYSxFQUFFN0YsT0FBT3ZKLFlBQVkyRSxTQUFTLENBQUM7WUFDMUcsSUFBSSxDQUFDcUssY0FBY0UscUJBQXFCLENBQUNDLGVBQWV6SyxNQUFNLEVBQUU7Z0JBQzVELE1BQU0ySyxnQkFBZ0JuVCxPQUFPb1QsSUFBSSxDQUFDTCxXQUFXTSxNQUFNLEVBQUVDLE1BQU0sQ0FBQyxDQUFDckwsUUFBUSxDQUFDUSxLQUFLLENBQUNSLE1BQU0sSUFBSSxDQUFDOEssV0FBV00sTUFBTSxDQUFDcEwsTUFBTSxDQUFDc0wsUUFBUTtnQkFDeEgsSUFBSUosY0FBY2hPLE1BQU0sR0FBRyxLQUFLLENBQUN1TixtQkFBbUI7b0JBQ2hELElBQUkxTCxJQUFxQyxFQUFFO3dCQUN2Q3dNLFFBQVFDLElBQUksQ0FBQyxLQUFNVCxDQUFBQSxvQkFBb0IsdUJBQXVCLDZCQUE0QixJQUFLLGlDQUFrQyxrQkFBaUJHLGNBQWMzRCxJQUFJLENBQUMsUUFBUSwwQkFBeUI7b0JBQzFNO29CQUNBLE1BQU0sSUFBSXBNLE1BQU0sQ0FBQzRQLG9CQUFvQiwwQkFBMEJsTyxNQUFNLHNDQUFzQ3FPLGNBQWMzRCxJQUFJLENBQUMsUUFBUSxvQ0FBb0MsOEJBQThCMUwsYUFBYSw4Q0FBOEN1SixRQUFRLEtBQUksSUFBTSxrREFBa0QyRixDQUFBQSxvQkFBb0IsOEJBQThCLHNCQUFxQixDQUFDO2dCQUNuWjtZQUNKLE9BQU8sSUFBSUEsbUJBQW1CO2dCQUMxQjNOLEtBQUssQ0FBQyxHQUFHckQsV0FBVzJPLG9CQUFvQixFQUFFM1EsT0FBT21ELE1BQU0sQ0FBQyxDQUFDLEdBQUd5RixVQUFVO29CQUNsRS9FLFVBQVVvUCxlQUFlekssTUFBTTtvQkFDL0JDLE9BQU8sQ0FBQyxHQUFHMUYsTUFBTTJRLElBQUksRUFBRWpMLE9BQU93SyxlQUFlMUcsTUFBTTtnQkFDdkQ7WUFDSixPQUFPO2dCQUNILGlFQUFpRTtnQkFDakV2TSxPQUFPbUQsTUFBTSxDQUFDc0YsT0FBT3FLO1lBQ3pCO1FBQ0o7UUFDQSxJQUFJLENBQUNqRCxpQkFBaUI7WUFDbEIvTyxPQUFPOFEsTUFBTSxDQUFDQyxJQUFJLENBQUMsb0JBQW9CeE0sSUFBSXFNO1FBQy9DO1FBQ0EsTUFBTWlDLGVBQWUsSUFBSSxDQUFDOVAsUUFBUSxLQUFLLFVBQVUsSUFBSSxDQUFDQSxRQUFRLEtBQUs7UUFDbkUsSUFBSTtZQUNBLElBQUkrUCxxQ0FBcUNDLDJCQUEyQkM7WUFDcEUsSUFBSUMsWUFBWSxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDO2dCQUNwQzNHO2dCQUNBeEo7Z0JBQ0E0RTtnQkFDQXBEO2dCQUNBRTtnQkFDQW1NO2dCQUNBbk4sUUFBUTJMLFVBQVUzTCxNQUFNO2dCQUN4QjBQLFdBQVcvRCxVQUFVK0QsU0FBUztnQkFDOUJySSxlQUFlOEc7Z0JBQ2Z6RywwQkFBMEIzSSxRQUFRMkksd0JBQXdCO2dCQUMxRDRELGlCQUFpQkEsbUJBQW1CLENBQUMsSUFBSSxDQUFDcUUsVUFBVTtnQkFDcER6QjtZQUNKO1lBQ0EsSUFBSSxDQUFDNUMsbUJBQW1CLENBQUN2TSxRQUFReU0sT0FBTyxFQUFFO2dCQUN0QyxNQUFNLElBQUksQ0FBQ3pCLElBQUksQ0FBQ2pKLElBQUksZ0JBQWdCME8sWUFBWUEsVUFBVXhPLFVBQVUsR0FBR2dELFdBQVcySCxVQUFVM0wsTUFBTTtZQUN0RztZQUNBLElBQUksV0FBV3dQLGFBQWFyQixtQkFBbUI7Z0JBQzNDN08sV0FBV2tRLFVBQVUxRyxLQUFLLElBQUlBO2dCQUM5QkEsUUFBUXhKO2dCQUNSLElBQUksQ0FBQzZOLFdBQVczQixPQUFPLEVBQUU7b0JBQ3JCdEgsUUFBUXpJLE9BQU9tRCxNQUFNLENBQUMsQ0FBQyxHQUFHNFEsVUFBVXRMLEtBQUssSUFBSSxDQUFDLEdBQUdBO2dCQUNyRDtnQkFDQSxNQUFNMEwsd0JBQXdCLENBQUMsR0FBRzVSLGFBQWEyQixXQUFXLEVBQUVtTyxPQUFPeE8sUUFBUSxJQUFJLENBQUMsR0FBR3hCLGdCQUFnQjhCLGNBQWMsRUFBRWtPLE9BQU94TyxRQUFRLElBQUl3TyxPQUFPeE8sUUFBUTtnQkFDckosSUFBSWlQLGNBQWNqUCxhQUFhc1EsdUJBQXVCO29CQUNsRG5VLE9BQU9vVCxJQUFJLENBQUNOLFlBQVlzQixPQUFPLENBQUMsQ0FBQ0M7d0JBQzdCLElBQUl2QixjQUFjckssS0FBSyxDQUFDNEwsSUFBSSxLQUFLdkIsVUFBVSxDQUFDdUIsSUFBSSxFQUFFOzRCQUM5QyxPQUFPNUwsS0FBSyxDQUFDNEwsSUFBSTt3QkFDckI7b0JBQ0o7Z0JBQ0o7Z0JBQ0EsSUFBSSxDQUFDLEdBQUcxUyxXQUFXeUUsY0FBYyxFQUFFdkMsV0FBVztvQkFDMUMsTUFBTXlRLGFBQWEsQ0FBQzVDLFdBQVczQixPQUFPLElBQUlnRSxVQUFVeE8sVUFBVSxHQUFHd08sVUFBVXhPLFVBQVUsR0FBRyxDQUFDLEdBQUdqRCxhQUFhK0IsV0FBVyxFQUFFLENBQUMsR0FBR2xDLFdBQVdtQyxTQUFTLEVBQUUsSUFBSTZILElBQUk5RyxJQUFJK0csU0FBU0YsSUFBSSxFQUFFckksUUFBUSxFQUFFcU0sVUFBVTNMLE1BQU0sR0FBRztvQkFDeE0sSUFBSWdRLFlBQVlEO29CQUNoQixJQUFJLENBQUMsR0FBRy9SLGFBQWEyQixXQUFXLEVBQUVxUSxZQUFZO3dCQUMxQ0EsWUFBWSxDQUFDLEdBQUdsUyxnQkFBZ0I4QixjQUFjLEVBQUVvUTtvQkFDcEQ7b0JBQ0EsSUFBSXZOLEtBQStCLEVBQUUsRUFJcEM7b0JBQ0QsTUFBTStMLGFBQWEsQ0FBQyxHQUFHaFIsWUFBWXNFLGFBQWEsRUFBRXhDO29CQUNsRCxNQUFNNFEsZ0JBQWdCLENBQUMsR0FBRzNTLGNBQWNpSCxlQUFlLEVBQUVnSyxZQUFZLElBQUk1RyxJQUFJb0ksV0FBV25JLFNBQVNGLElBQUksRUFBRXJJLFFBQVE7b0JBQy9HLElBQUk0USxlQUFlO3dCQUNmelUsT0FBT21ELE1BQU0sQ0FBQ3NGLE9BQU9nTTtvQkFDekI7Z0JBQ0o7WUFDSjtZQUNBLHlEQUF5RDtZQUN6RCxJQUFJLFVBQVVWLFdBQVc7Z0JBQ3JCLElBQUlBLFVBQVUvSyxJQUFJLEtBQUsscUJBQXFCO29CQUN4QyxPQUFPLElBQUksQ0FBQ29GLE1BQU0sQ0FBQ2xELFFBQVE2SSxVQUFVdEssTUFBTSxFQUFFc0ssVUFBVXZLLEtBQUssRUFBRWxHO2dCQUNsRSxPQUFPO29CQUNINkoscUJBQXFCO3dCQUNqQnJJLEtBQUtpUCxVQUFVMUssV0FBVzt3QkFDMUIzRixRQUFRLElBQUk7b0JBQ2hCO29CQUNBLE9BQU8sSUFBSUYsUUFBUSxLQUFLO2dCQUM1QjtZQUNKO1lBQ0EsTUFBTWtSLFlBQVlYLFVBQVVZLFNBQVM7WUFDckMsSUFBSUQsYUFBYUEsVUFBVUUscUJBQXFCLEVBQUU7Z0JBQzlDLE1BQU1DLFVBQVUsRUFBRSxDQUFDQyxNQUFNLENBQUNKLFVBQVVFLHFCQUFxQjtnQkFDekRDLFFBQVFULE9BQU8sQ0FBQyxDQUFDVztvQkFDWixJQUFHM1QsUUFBUTRULHNCQUFzQixFQUFFRCxPQUFPRSxLQUFLO2dCQUNwRDtZQUNKO1lBQ0EsdUNBQXVDO1lBQ3ZDLElBQUksQ0FBQ2xCLFVBQVVtQixPQUFPLElBQUluQixVQUFVb0IsT0FBTyxLQUFLcEIsVUFBVWtCLEtBQUssRUFBRTtnQkFDN0QsSUFBSWxCLFVBQVVrQixLQUFLLENBQUNHLFNBQVMsSUFBSXJCLFVBQVVrQixLQUFLLENBQUNHLFNBQVMsQ0FBQ0MsWUFBWSxFQUFFO29CQUNyRSwwREFBMEQ7b0JBQzFEL1IsUUFBUWlCLE1BQU0sR0FBRztvQkFDakIsTUFBTThFLGNBQWMwSyxVQUFVa0IsS0FBSyxDQUFDRyxTQUFTLENBQUNDLFlBQVk7b0JBQzFELG9FQUFvRTtvQkFDcEUsZ0VBQWdFO29CQUNoRSxXQUFXO29CQUNYLElBQUloTSxZQUFZcEUsVUFBVSxDQUFDLFFBQVE4TyxVQUFVa0IsS0FBSyxDQUFDRyxTQUFTLENBQUNFLHNCQUFzQixLQUFLLE9BQU87d0JBQzNGLE1BQU1DLGFBQWEsQ0FBQyxHQUFHM1Qsa0JBQWtCNkYsZ0JBQWdCLEVBQUU0Qjt3QkFDM0RrTSxXQUFXMVIsUUFBUSxHQUFHZ0Msb0JBQW9CMFAsV0FBVzFSLFFBQVEsRUFBRWlDO3dCQUMvRCxNQUFNLEVBQUVoQixLQUFLMkUsTUFBTSxFQUFFcEUsSUFBSW1FLEtBQUssRUFBRSxHQUFHcEUsYUFBYSxJQUFJLEVBQUVpRSxhQUFhQTt3QkFDbkUsT0FBTyxJQUFJLENBQUMrRSxNQUFNLENBQUNsRCxRQUFRekIsUUFBUUQsT0FBT2xHO29CQUM5QztvQkFDQTZKLHFCQUFxQjt3QkFDakJySSxLQUFLdUU7d0JBQ0wzRixRQUFRLElBQUk7b0JBQ2hCO29CQUNBLE9BQU8sSUFBSUYsUUFBUSxLQUFLO2dCQUM1QjtnQkFDQTBNLFVBQVUrRCxTQUFTLEdBQUcsQ0FBQyxDQUFDRixVQUFVa0IsS0FBSyxDQUFDTyxXQUFXO2dCQUNuRCxzQkFBc0I7Z0JBQ3RCLElBQUl6QixVQUFVa0IsS0FBSyxDQUFDdkksUUFBUSxLQUFLOUIsb0JBQW9CO29CQUNqRCxJQUFJNks7b0JBQ0osSUFBSTt3QkFDQSxNQUFNLElBQUksQ0FBQ0MsY0FBYyxDQUFDO3dCQUMxQkQsZ0JBQWdCO29CQUNwQixFQUFFLE9BQU9uVSxHQUFHO3dCQUNSbVUsZ0JBQWdCO29CQUNwQjtvQkFDQTFCLFlBQVksTUFBTSxJQUFJLENBQUNDLFlBQVksQ0FBQzt3QkFDaEMzRyxPQUFPb0k7d0JBQ1A1UixVQUFVNFI7d0JBQ1ZoTjt3QkFDQXBEO3dCQUNBRTt3QkFDQW1NLFlBQVk7NEJBQ1IzQixTQUFTO3dCQUNiO3dCQUNBeEwsUUFBUTJMLFVBQVUzTCxNQUFNO3dCQUN4QjBQLFdBQVcvRCxVQUFVK0QsU0FBUzt3QkFDOUIwQixZQUFZO29CQUNoQjtvQkFDQSxJQUFJLFVBQVU1QixXQUFXO3dCQUNyQixNQUFNLElBQUkzUSxNQUFNO29CQUNwQjtnQkFDSjtZQUNKO1lBQ0EsSUFBSXlNLG1CQUFtQixJQUFJLENBQUNoTSxRQUFRLEtBQUssYUFBYSxDQUFDLENBQUNnUSw0QkFBNEI3RixLQUFLNEgsYUFBYSxDQUFDWCxLQUFLLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQ3JCLHNDQUFzQ0MsMEJBQTBCdUIsU0FBUyxLQUFLLE9BQU8sS0FBSyxJQUFJeEIsb0NBQW9DaUMsVUFBVSxNQUFNLE9BQVEsRUFBQy9CLG1CQUFtQkMsVUFBVWtCLEtBQUssS0FBSyxPQUFPLEtBQUssSUFBSW5CLGlCQUFpQnNCLFNBQVMsR0FBRztnQkFDN1cseURBQXlEO2dCQUN6RCxrQ0FBa0M7Z0JBQ2xDckIsVUFBVWtCLEtBQUssQ0FBQ0csU0FBUyxDQUFDUyxVQUFVLEdBQUc7WUFDM0M7WUFDQSxJQUFJQztZQUNKLDZEQUE2RDtZQUM3RCxNQUFNQyxzQkFBc0J6UyxRQUFReU0sT0FBTyxJQUFJRyxVQUFVN0MsS0FBSyxLQUFNLEVBQUN5SSxtQkFBbUIvQixVQUFVMUcsS0FBSyxLQUFLLE9BQU95SSxtQkFBbUJ6SSxLQUFJO1lBQzFJLElBQUkySTtZQUNKLE1BQU1DLGVBQWUsQ0FBQ0Qsa0JBQWtCMVMsUUFBUW1PLE1BQU0sS0FBSyxPQUFPdUUsa0JBQWtCLENBQUNuRyxtQkFBbUIsQ0FBQ2tHO1lBQ3pHLE1BQU1HLGNBQWNELGVBQWU7Z0JBQy9CbEksR0FBRztnQkFDSEcsR0FBRztZQUNQLElBQUk7WUFDSixNQUFNaUksc0JBQXNCekcsZ0JBQWdCLE9BQU9BLGVBQWV3RztZQUNsRSwwQ0FBMEM7WUFDMUMsTUFBTUUsc0JBQXNCO2dCQUN4QixHQUFHbEcsU0FBUztnQkFDWjdDO2dCQUNBeEo7Z0JBQ0E0RTtnQkFDQXpFLFFBQVFDO2dCQUNSaVEsWUFBWTtZQUNoQjtZQUNBLDBFQUEwRTtZQUMxRSxzRUFBc0U7WUFDdEUsdUVBQXVFO1lBQ3ZFLHlFQUF5RTtZQUN6RSxZQUFZO1lBQ1osSUFBSXJFLG1CQUFtQjhELGNBQWM7Z0JBQ2pDLElBQUkwQyxzQ0FBc0NDLDRCQUE0QkM7Z0JBQ3RFeEMsWUFBWSxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDO29CQUNoQzNHLE9BQU8sSUFBSSxDQUFDeEosUUFBUTtvQkFDcEJBLFVBQVUsSUFBSSxDQUFDQSxRQUFRO29CQUN2QjRFO29CQUNBcEQ7b0JBQ0FFO29CQUNBbU0sWUFBWTt3QkFDUjNCLFNBQVM7b0JBQ2I7b0JBQ0F4TCxRQUFRMkwsVUFBVTNMLE1BQU07b0JBQ3hCMFAsV0FBVy9ELFVBQVUrRCxTQUFTO29CQUM5QnBFLGlCQUFpQkEsbUJBQW1CLENBQUMsSUFBSSxDQUFDcUUsVUFBVTtnQkFDeEQ7Z0JBQ0EsSUFBSSxVQUFVSCxXQUFXO29CQUNyQixNQUFNLElBQUkzUSxNQUFNLHFDQUFxQyxJQUFJLENBQUNTLFFBQVE7Z0JBQ3RFO2dCQUNBLElBQUksSUFBSSxDQUFDQSxRQUFRLEtBQUssYUFBYSxDQUFDLENBQUN5Uyw2QkFBNkJ0SSxLQUFLNEgsYUFBYSxDQUFDWCxLQUFLLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQ29CLHVDQUF1Q0MsMkJBQTJCbEIsU0FBUyxLQUFLLE9BQU8sS0FBSyxJQUFJaUIscUNBQXFDUixVQUFVLE1BQU0sT0FBUSxFQUFDVSxvQkFBb0J4QyxVQUFVa0IsS0FBSyxLQUFLLE9BQU8sS0FBSyxJQUFJc0Isa0JBQWtCbkIsU0FBUyxHQUFHO29CQUNoVyx5REFBeUQ7b0JBQ3pELGtDQUFrQztvQkFDbENyQixVQUFVa0IsS0FBSyxDQUFDRyxTQUFTLENBQUNTLFVBQVUsR0FBRztnQkFDM0M7Z0JBQ0EsSUFBSTtvQkFDQSxNQUFNLElBQUksQ0FBQzFELEdBQUcsQ0FBQ2lFLHFCQUFxQnJDLFdBQVdvQztnQkFDbkQsRUFBRSxPQUFPdEosS0FBSztvQkFDVixJQUFJLENBQUMsR0FBR3hMLFNBQVNoQixPQUFPLEVBQUV3TSxRQUFRQSxJQUFJeEosU0FBUyxFQUFFO3dCQUM3Q3ZDLE9BQU84USxNQUFNLENBQUNDLElBQUksQ0FBQyxvQkFBb0JoRixLQUFLNUksV0FBV3lOO29CQUMzRDtvQkFDQSxNQUFNN0U7Z0JBQ1Y7Z0JBQ0EsT0FBTztZQUNYO1lBQ0EvTCxPQUFPOFEsTUFBTSxDQUFDQyxJQUFJLENBQUMsdUJBQXVCeE0sSUFBSXFNO1lBQzlDLElBQUksQ0FBQ08sV0FBVyxDQUFDL0csUUFBUXBHLEtBQUtPLElBQUkvQjtZQUNsQywwRUFBMEU7WUFDMUUsaUJBQWlCO1lBQ2pCLGlEQUFpRDtZQUNqRCxNQUFNa1Qsa0JBQWtCM0csbUJBQW1CLENBQUNzRyx1QkFBdUIsQ0FBQy9GLG9CQUFvQixDQUFDMkIsZ0JBQWdCLENBQUMsR0FBR25QLGVBQWU2VCxtQkFBbUIsRUFBRUwscUJBQXFCLElBQUksQ0FBQ2pHLEtBQUs7WUFDaEwsSUFBSSxDQUFDcUcsaUJBQWlCO2dCQUNsQixJQUFJO29CQUNBLE1BQU0sSUFBSSxDQUFDckUsR0FBRyxDQUFDaUUscUJBQXFCckMsV0FBV29DO2dCQUNuRCxFQUFFLE9BQU9qTSxHQUFHO29CQUNSLElBQUlBLEVBQUU3RyxTQUFTLEVBQUUwUSxVQUFVdkksS0FBSyxHQUFHdUksVUFBVXZJLEtBQUssSUFBSXRCO3lCQUNqRCxNQUFNQTtnQkFDZjtnQkFDQSxJQUFJNkosVUFBVXZJLEtBQUssRUFBRTtvQkFDakIsSUFBSSxDQUFDcUUsaUJBQWlCO3dCQUNsQi9PLE9BQU84USxNQUFNLENBQUNDLElBQUksQ0FBQyxvQkFBb0JrQyxVQUFVdkksS0FBSyxFQUFFdkgsV0FBV3lOO29CQUN2RTtvQkFDQSxNQUFNcUMsVUFBVXZJLEtBQUs7Z0JBQ3pCO2dCQUNBLElBQUl4RSxLQUErQixFQUFFLEVBSXBDO2dCQUNELElBQUksQ0FBQzZJLGlCQUFpQjtvQkFDbEIvTyxPQUFPOFEsTUFBTSxDQUFDQyxJQUFJLENBQUMsdUJBQXVCeE0sSUFBSXFNO2dCQUNsRDtnQkFDQSxtREFBbUQ7Z0JBQ25ELE1BQU1tRixZQUFZO2dCQUNsQixJQUFJWixnQkFBZ0JZLFVBQVVqUyxJQUFJLENBQUNTLEtBQUs7b0JBQ3BDLElBQUksQ0FBQzZNLFlBQVksQ0FBQzdNO2dCQUN0QjtZQUNKO1lBQ0EsT0FBTztRQUNYLEVBQUUsT0FBT3dILEtBQUs7WUFDVixJQUFJLENBQUMsR0FBR3hMLFNBQVNoQixPQUFPLEVBQUV3TSxRQUFRQSxJQUFJeEosU0FBUyxFQUFFO2dCQUM3QyxPQUFPO1lBQ1g7WUFDQSxNQUFNd0o7UUFDVjtJQUNKO0lBQ0FvRixZQUFZL0csTUFBTSxFQUFFcEcsR0FBRyxFQUFFTyxFQUFFLEVBQUUvQixPQUFPLEVBQUU7UUFDbEMsSUFBSUEsWUFBWSxLQUFLLEdBQUdBLFVBQVUsQ0FBQztRQUNuQyxJQUFJMEQsSUFBcUMsRUFBRTtZQUN2QyxJQUFJLE9BQU9xRCxPQUFPQyxPQUFPLEtBQUssYUFBYTtnQkFDdkNrSixRQUFRaEksS0FBSyxDQUFDO2dCQUNkO1lBQ0o7WUFDQSxJQUFJLE9BQU9uQixPQUFPQyxPQUFPLENBQUNZLE9BQU8sS0FBSyxhQUFhO2dCQUMvQ3NJLFFBQVFoSSxLQUFLLENBQUMsNkJBQTZCTixTQUFTO2dCQUNwRDtZQUNKO1FBQ0o7UUFDQSxJQUFJQSxXQUFXLGVBQWUsQ0FBQyxHQUFHeEosT0FBT29WLE1BQU0sUUFBUXpSLElBQUk7WUFDdkQsSUFBSSxDQUFDMFIsUUFBUSxHQUFHelQsUUFBUXlNLE9BQU87WUFDL0IxRixPQUFPQyxPQUFPLENBQUNZLE9BQU8sQ0FBQztnQkFDbkJwRztnQkFDQU87Z0JBQ0EvQjtnQkFDQTBULEtBQUs7Z0JBQ0wzQyxLQUFLLElBQUksQ0FBQ3hHLElBQUksR0FBRzNDLFdBQVcsY0FBYyxJQUFJLENBQUMyQyxJQUFJLEdBQUd0TjtZQUMxRCxHQUNBLHFGQUFxRjtZQUNyRixrRUFBa0U7WUFDbEUsSUFBSThFO1FBQ1I7SUFDSjtJQUNBLE1BQU00UixxQkFBcUJwSyxHQUFHLEVBQUVoSixRQUFRLEVBQUU0RSxLQUFLLEVBQUVwRCxFQUFFLEVBQUVxTSxVQUFVLEVBQUV3RixhQUFhLEVBQUU7UUFDNUUxRCxRQUFRaEksS0FBSyxDQUFDcUI7UUFDZCxJQUFJQSxJQUFJeEosU0FBUyxFQUFFO1lBQ2YsZ0NBQWdDO1lBQ2hDLE1BQU13SjtRQUNWO1FBQ0EsSUFBSSxDQUFDLEdBQUcxTCxhQUFhZ1csWUFBWSxFQUFFdEssUUFBUXFLLGVBQWU7WUFDdERwVyxPQUFPOFEsTUFBTSxDQUFDQyxJQUFJLENBQUMsb0JBQW9CaEYsS0FBS3hILElBQUlxTTtZQUNoRCxpRUFBaUU7WUFDakUsMEJBQTBCO1lBQzFCLDBDQUEwQztZQUMxQyw0Q0FBNEM7WUFDNUMsK0RBQStEO1lBQy9EdkUscUJBQXFCO2dCQUNqQnJJLEtBQUtPO2dCQUNMM0IsUUFBUSxJQUFJO1lBQ2hCO1lBQ0Esa0VBQWtFO1lBQ2xFLDhEQUE4RDtZQUM5RCxNQUFNUjtRQUNWO1FBQ0EsSUFBSTtZQUNBLElBQUkrUjtZQUNKLE1BQU0sRUFBRTlPLE1BQU13TyxTQUFTLEVBQUV5QyxXQUFXLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQzFCLGNBQWMsQ0FBQztZQUNuRSxNQUFNM0IsWUFBWTtnQkFDZGtCO2dCQUNBTjtnQkFDQXlDO2dCQUNBdks7Z0JBQ0FyQixPQUFPcUI7WUFDWDtZQUNBLElBQUksQ0FBQ2tILFVBQVVrQixLQUFLLEVBQUU7Z0JBQ2xCLElBQUk7b0JBQ0FsQixVQUFVa0IsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDb0MsZUFBZSxDQUFDMUMsV0FBVzt3QkFDcEQ5SDt3QkFDQWhKO3dCQUNBNEU7b0JBQ0o7Z0JBQ0osRUFBRSxPQUFPNk8sUUFBUTtvQkFDYjlELFFBQVFoSSxLQUFLLENBQUMsMkNBQTJDOEw7b0JBQ3pEdkQsVUFBVWtCLEtBQUssR0FBRyxDQUFDO2dCQUN2QjtZQUNKO1lBQ0EsT0FBT2xCO1FBQ1gsRUFBRSxPQUFPd0QsY0FBYztZQUNuQixPQUFPLElBQUksQ0FBQ04sb0JBQW9CLENBQUMsQ0FBQyxHQUFHNVYsU0FBU2hCLE9BQU8sRUFBRWtYLGdCQUFnQkEsZUFBZSxJQUFJblUsTUFBTW1VLGVBQWUsS0FBSzFULFVBQVU0RSxPQUFPcEQsSUFBSXFNLFlBQVk7UUFDeko7SUFDSjtJQUNBLE1BQU1zQyxhQUFhL0wsS0FBSyxFQUFFO1FBQ3RCLElBQUksRUFBRW9GLE9BQU9tSyxjQUFjLEVBQUUzVCxRQUFRLEVBQUU0RSxLQUFLLEVBQUVwRCxFQUFFLEVBQUVFLFVBQVUsRUFBRW1NLFVBQVUsRUFBRW5OLE1BQU0sRUFBRXFILGFBQWEsRUFBRXFJLFNBQVMsRUFBRWhJLHdCQUF3QixFQUFFNEQsZUFBZSxFQUFFNEMsbUJBQW1CLEVBQUVrRCxVQUFVLEVBQUUsR0FBRzFOO1FBQzNMOzs7OztLQUtILEdBQUcsSUFBSW9GLFFBQVFtSztRQUNaLElBQUk7WUFDQSxJQUFJQyxjQUFjQyxlQUFlQyxlQUFlQztZQUNoRCxNQUFNcEssa0JBQWtCSixvQkFBb0I7Z0JBQ3hDQztnQkFDQTNKLFFBQVEsSUFBSTtZQUNoQjtZQUNBLElBQUltVSxlQUFlLElBQUksQ0FBQ3pGLFVBQVUsQ0FBQy9FLE1BQU07WUFDekMsSUFBSXFFLFdBQVczQixPQUFPLElBQUk4SCxnQkFBZ0IsSUFBSSxDQUFDeEssS0FBSyxLQUFLQSxPQUFPO2dCQUM1RCxPQUFPd0s7WUFDWDtZQUNBLElBQUlqTSxlQUFlO2dCQUNmaU0sZUFBZXRQO1lBQ25CO1lBQ0EsSUFBSXVQLGtCQUFrQkQsZ0JBQWdCLENBQUUsY0FBYUEsWUFBVyxLQUFNN1Esa0JBQXlCLGdCQUFnQjZRLENBQVlBLEdBQUd0UDtZQUM5SCxNQUFNeUQsZUFBZTZEO1lBQ3JCLE1BQU1rSSxzQkFBc0I7Z0JBQ3hCak8sVUFBVSxJQUFJLENBQUNuRyxVQUFVLENBQUNxVSxXQUFXLENBQUM7b0JBQ2xDOUwsTUFBTSxDQUFDLEdBQUdsSyxXQUFXMk8sb0JBQW9CLEVBQUU7d0JBQ3ZDOU07d0JBQ0E0RTtvQkFDSjtvQkFDQXdQLG1CQUFtQjtvQkFDbkJqVSxRQUFRMlIsYUFBYSxTQUFTcFE7b0JBQzlCaEI7Z0JBQ0o7Z0JBQ0FxSCxlQUFlO2dCQUNmQyxnQkFBZ0IsSUFBSSxDQUFDeUUsS0FBSztnQkFDMUJ4RSxXQUFXO2dCQUNYSixlQUFlTSxlQUFlLElBQUksQ0FBQ2tNLEdBQUcsR0FBRyxJQUFJLENBQUNDLEdBQUc7Z0JBQ2pEcE0sY0FBYyxDQUFDa0k7Z0JBQ2Z0SSxZQUFZO2dCQUNaTTtnQkFDQUQ7WUFDSjtZQUNBLElBQUlwQyxPQUFPaUcsbUJBQW1CLENBQUM0QyxzQkFBc0IsT0FBTyxNQUFNL0ksc0JBQXNCO2dCQUNwRkMsV0FBVyxJQUFJOEIsY0FBY3NNO2dCQUM3Qi9ULFFBQVEyUixhQUFhLFNBQVNwUTtnQkFDOUJoQixRQUFRQTtnQkFDUmIsUUFBUSxJQUFJO1lBQ2hCLEdBQUdrSixLQUFLLENBQUMsQ0FBQ0M7Z0JBQ04sNENBQTRDO2dCQUM1QyxvREFBb0Q7Z0JBQ3BELG9EQUFvRDtnQkFDcEQsWUFBWTtnQkFDWixJQUFJZ0QsaUJBQWlCO29CQUNqQixPQUFPO2dCQUNYO2dCQUNBLE1BQU1oRDtZQUNWO1lBQ0Esd0RBQXdEO1lBQ3hELFVBQVU7WUFDVixJQUFJakQsUUFBUy9GLENBQUFBLGFBQWEsYUFBYUEsYUFBYSxNQUFLLEdBQUk7Z0JBQ3pEK0YsS0FBS0MsTUFBTSxHQUFHdEI7WUFDbEI7WUFDQSxJQUFJc0gsaUJBQWlCO2dCQUNqQixJQUFJLENBQUNqRyxNQUFNO29CQUNQQSxPQUFPO3dCQUNIRyxNQUFNaUUsS0FBSzRILGFBQWEsQ0FBQ1gsS0FBSztvQkFDbEM7Z0JBQ0osT0FBTztvQkFDSHJMLEtBQUtHLElBQUksR0FBR2lFLEtBQUs0SCxhQUFhLENBQUNYLEtBQUs7Z0JBQ3hDO1lBQ0o7WUFDQXpIO1lBQ0EsSUFBSSxDQUFDNUQsUUFBUSxPQUFPLEtBQUssSUFBSSxDQUFDNk4sZUFBZTdOLEtBQUtDLE1BQU0sS0FBSyxPQUFPLEtBQUssSUFBSTROLGFBQWF6TyxJQUFJLE1BQU0sdUJBQXVCLENBQUNZLFFBQVEsT0FBTyxLQUFLLElBQUksQ0FBQzhOLGdCQUFnQjlOLEtBQUtDLE1BQU0sS0FBSyxPQUFPLEtBQUssSUFBSTZOLGNBQWMxTyxJQUFJLE1BQU0scUJBQXFCO2dCQUM5TyxPQUFPWSxLQUFLQyxNQUFNO1lBQ3RCO1lBQ0EsSUFBSSxDQUFDRCxRQUFRLE9BQU8sS0FBSyxJQUFJLENBQUMrTixnQkFBZ0IvTixLQUFLQyxNQUFNLEtBQUssT0FBTyxLQUFLLElBQUk4TixjQUFjM08sSUFBSSxNQUFNLFdBQVc7Z0JBQzdHLE1BQU1vUCxnQkFBZ0IsQ0FBQyxHQUFHbFgscUJBQXFCOEUsbUJBQW1CLEVBQUU0RCxLQUFLQyxNQUFNLENBQUN2RSxZQUFZO2dCQUM1RixNQUFNUSxRQUFRLE1BQU0sSUFBSSxDQUFDbkMsVUFBVSxDQUFDbUUsV0FBVztnQkFDL0MsNERBQTREO2dCQUM1RCx5REFBeUQ7Z0JBQ3pELDREQUE0RDtnQkFDNUQsMkNBQTJDO2dCQUMzQyxJQUFJLENBQUMrSCxtQkFBbUIvSixNQUFNSSxRQUFRLENBQUNrUyxnQkFBZ0I7b0JBQ25EL0ssUUFBUStLO29CQUNSdlUsV0FBVytGLEtBQUtDLE1BQU0sQ0FBQ3ZFLFlBQVk7b0JBQ25DbUQsUUFBUTt3QkFDSixHQUFHQSxLQUFLO3dCQUNSLEdBQUdtQixLQUFLQyxNQUFNLENBQUNqQixRQUFRLENBQUNILEtBQUs7b0JBQ2pDO29CQUNBbEQsYUFBYSxDQUFDLEdBQUdsRCxnQkFBZ0I4QixjQUFjLEVBQUUsQ0FBQyxHQUFHM0MscUJBQXFCNEcsbUJBQW1CLEVBQUV3QixLQUFLQyxNQUFNLENBQUNqQixRQUFRLENBQUMvRSxRQUFRLEVBQUUsSUFBSSxDQUFDZ0QsT0FBTyxFQUFFaEQsUUFBUTtvQkFDcEosa0RBQWtEO29CQUNsRGdVLGVBQWUsSUFBSSxDQUFDekYsVUFBVSxDQUFDL0UsTUFBTTtvQkFDckMsSUFBSXFFLFdBQVczQixPQUFPLElBQUk4SCxnQkFBZ0IsSUFBSSxDQUFDeEssS0FBSyxLQUFLQSxTQUFTLENBQUN6QixlQUFlO3dCQUM5RSw0REFBNEQ7d0JBQzVELDZEQUE2RDt3QkFDN0QsZ0VBQWdFO3dCQUNoRSxPQUFPOzRCQUNILEdBQUdpTSxZQUFZOzRCQUNmeEs7d0JBQ0o7b0JBQ0o7Z0JBQ0o7WUFDSjtZQUNBLElBQUksQ0FBQyxHQUFHNUssWUFBWTRWLFVBQVUsRUFBRWhMLFFBQVE7Z0JBQ3BDRixxQkFBcUI7b0JBQ2pCckksS0FBS087b0JBQ0wzQixRQUFRLElBQUk7Z0JBQ2hCO2dCQUNBLE9BQU8sSUFBSUYsUUFBUSxLQUFLO1lBQzVCO1lBQ0EsTUFBTXVRLFlBQVkrRCxtQkFBbUIsTUFBTSxJQUFJLENBQUNwQyxjQUFjLENBQUNySSxPQUFPckYsSUFBSSxDQUFDLENBQUNzUSxNQUFPO29CQUMzRTNELFdBQVcyRCxJQUFJblMsSUFBSTtvQkFDbkJpUixhQUFha0IsSUFBSWxCLFdBQVc7b0JBQzVCbEMsU0FBU29ELElBQUlDLEdBQUcsQ0FBQ3JELE9BQU87b0JBQ3hCQyxTQUFTbUQsSUFBSUMsR0FBRyxDQUFDcEQsT0FBTztnQkFDNUI7WUFDSixJQUFJbk8sSUFBcUMsRUFBRTtnQkFDdkMsTUFBTSxFQUFFd1Isa0JBQWtCLEVBQUUsR0FBR3hYLG1CQUFPQSxDQUFDLHdGQUE2QjtnQkFDcEUsSUFBSSxDQUFDd1gsbUJBQW1CekUsVUFBVVksU0FBUyxHQUFHO29CQUMxQyxNQUFNLElBQUl2UixNQUFNLDJEQUEyRFMsV0FBVztnQkFDMUY7WUFDSjtZQUNBLE1BQU00VSxvQkFBb0I3TyxRQUFRLE9BQU8sS0FBSyxJQUFJLENBQUNnTyxpQkFBaUJoTyxLQUFLbkQsUUFBUSxLQUFLLE9BQU8sS0FBSyxJQUFJbVIsZUFBZXhRLE9BQU8sQ0FBQ3ZHLEdBQUcsQ0FBQztZQUNqSSxNQUFNNlgsa0JBQWtCM0UsVUFBVW1CLE9BQU8sSUFBSW5CLFVBQVVvQixPQUFPO1lBQzlELHlEQUF5RDtZQUN6RCw0Q0FBNEM7WUFDNUMsSUFBSXNELHFCQUFzQjdPLENBQUFBLFFBQVEsT0FBTyxLQUFLLElBQUlBLEtBQUtFLFFBQVEsR0FBRztnQkFDOUQsT0FBTyxJQUFJLENBQUNxTyxHQUFHLENBQUN2TyxLQUFLRSxRQUFRLENBQUM7WUFDbEM7WUFDQSxNQUFNLEVBQUVtTCxLQUFLLEVBQUVoTCxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQzBPLFFBQVEsQ0FBQztnQkFDNUMsSUFBSUQsaUJBQWlCO29CQUNqQixJQUFJLENBQUM5TyxRQUFRLE9BQU8sS0FBSyxJQUFJQSxLQUFLRyxJQUFJLEtBQUssQ0FBQzBPLG1CQUFtQjt3QkFDM0QsT0FBTzs0QkFDSHhPLFVBQVVMLEtBQUtLLFFBQVE7NEJBQ3ZCZ0wsT0FBT3JMLEtBQUtHLElBQUk7d0JBQ3BCO29CQUNKO29CQUNBLE1BQU1ELFdBQVcsQ0FBQ0YsUUFBUSxPQUFPLEtBQUssSUFBSUEsS0FBS0UsUUFBUSxJQUFJRixLQUFLRSxRQUFRLEdBQUcsSUFBSSxDQUFDbkcsVUFBVSxDQUFDcVUsV0FBVyxDQUFDO3dCQUNuRzlMLE1BQU0sQ0FBQyxHQUFHbEssV0FBVzJPLG9CQUFvQixFQUFFOzRCQUN2QzlNOzRCQUNBNEU7d0JBQ0o7d0JBQ0F6RSxRQUFRdUI7d0JBQ1JoQjtvQkFDSjtvQkFDQSxNQUFNcVUsVUFBVSxNQUFNbk4sY0FBYzt3QkFDaEMzQjt3QkFDQStCLGdCQUFnQixJQUFJLENBQUN5RSxLQUFLO3dCQUMxQnhFLFdBQVc7d0JBQ1hKLGVBQWUrTSxvQkFBb0IsQ0FBQyxJQUFJLElBQUksQ0FBQ04sR0FBRzt3QkFDaERwTSxjQUFjLENBQUNrSTt3QkFDZnRJLFlBQVk7d0JBQ1pNO29CQUNKO29CQUNBLE9BQU87d0JBQ0hoQyxVQUFVMk8sUUFBUTNPLFFBQVE7d0JBQzFCZ0wsT0FBTzJELFFBQVE3TyxJQUFJLElBQUksQ0FBQztvQkFDNUI7Z0JBQ0o7Z0JBQ0EsT0FBTztvQkFDSDNDLFNBQVMsQ0FBQztvQkFDVjZOLE9BQU8sTUFBTSxJQUFJLENBQUNvQyxlQUFlLENBQUN0RCxVQUFVWSxTQUFTLEVBQ3JEO3dCQUNJOVE7d0JBQ0E0RTt3QkFDQXpFLFFBQVFxQjt3QkFDUmQ7d0JBQ0FzQyxTQUFTLElBQUksQ0FBQ0EsT0FBTzt3QkFDckJzQyxlQUFlLElBQUksQ0FBQ0EsYUFBYTtvQkFDckM7Z0JBQ0o7WUFDSjtZQUNBLG1EQUFtRDtZQUNuRCw2Q0FBNkM7WUFDN0MsdUNBQXVDO1lBQ3ZDLElBQUk0SyxVQUFVb0IsT0FBTyxJQUFJNEMsb0JBQW9Cak8sUUFBUSxJQUFJRyxVQUFVO2dCQUMvRCxPQUFPLElBQUksQ0FBQ2tPLEdBQUcsQ0FBQ2xPLFNBQVM7WUFDN0I7WUFDQSwrQ0FBK0M7WUFDL0MsNkRBQTZEO1lBQzdELElBQUksQ0FBQyxJQUFJLENBQUNnSyxTQUFTLElBQUlGLFVBQVVtQixPQUFPLElBQUlsTyxrQkFBeUIsaUJBQWlCLENBQWdCNkksRUFBRSxFQU12RztZQUNEb0YsTUFBTUcsU0FBUyxHQUFHcFYsT0FBT21ELE1BQU0sQ0FBQyxDQUFDLEdBQUc4UixNQUFNRyxTQUFTO1lBQ25EckIsVUFBVWtCLEtBQUssR0FBR0E7WUFDbEJsQixVQUFVMUcsS0FBSyxHQUFHQTtZQUNsQjBHLFVBQVV0TCxLQUFLLEdBQUdBO1lBQ2xCc0wsVUFBVXhPLFVBQVUsR0FBR0E7WUFDdkIsSUFBSSxDQUFDNk0sVUFBVSxDQUFDL0UsTUFBTSxHQUFHMEc7WUFDekIsT0FBT0E7UUFDWCxFQUFFLE9BQU9sSCxLQUFLO1lBQ1YsT0FBTyxJQUFJLENBQUNvSyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUc1VixTQUFTd1gsY0FBYyxFQUFFaE0sTUFBTWhKLFVBQVU0RSxPQUFPcEQsSUFBSXFNO1FBQzdGO0lBQ0o7SUFDQVMsSUFBSWhDLEtBQUssRUFBRXZHLElBQUksRUFBRXNNLFdBQVcsRUFBRTtRQUMxQixJQUFJLENBQUMvRixLQUFLLEdBQUdBO1FBQ2IsT0FBTyxJQUFJLENBQUMySSxHQUFHLENBQUNsUCxNQUFNLElBQUksQ0FBQ3dJLFVBQVUsQ0FBQyxRQUFRLENBQUN1QyxTQUFTLEVBQUV1QjtJQUM5RDtJQUNBOzs7R0FHRCxHQUFHNkMsZUFBZUMsRUFBRSxFQUFFO1FBQ2pCLElBQUksQ0FBQ0MsSUFBSSxHQUFHRDtJQUNoQjtJQUNBaEgsZ0JBQWdCM00sRUFBRSxFQUFFO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUNyQixNQUFNLEVBQUUsT0FBTztRQUN6QixNQUFNLENBQUNrVixjQUFjQyxRQUFRLEdBQUcsSUFBSSxDQUFDblYsTUFBTSxDQUFDb0wsS0FBSyxDQUFDLEtBQUs7UUFDdkQsTUFBTSxDQUFDZ0ssY0FBY0MsUUFBUSxHQUFHaFUsR0FBRytKLEtBQUssQ0FBQyxLQUFLO1FBQzlDLHlFQUF5RTtRQUN6RSxJQUFJaUssV0FBV0gsaUJBQWlCRSxnQkFBZ0JELFlBQVlFLFNBQVM7WUFDakUsT0FBTztRQUNYO1FBQ0EsMERBQTBEO1FBQzFELElBQUlILGlCQUFpQkUsY0FBYztZQUMvQixPQUFPO1FBQ1g7UUFDQSx5REFBeUQ7UUFDekQsdURBQXVEO1FBQ3ZELDJEQUEyRDtRQUMzRCxtQ0FBbUM7UUFDbkMsT0FBT0QsWUFBWUU7SUFDdkI7SUFDQW5ILGFBQWE3TSxFQUFFLEVBQUU7UUFDYixNQUFNLEdBQUdpRSxPQUFPLEVBQUUsQ0FBQyxHQUFHakUsR0FBRytKLEtBQUssQ0FBQyxLQUFLO1FBQ25DLElBQUduTSxvQkFBb0JxVyxrQkFBa0IsRUFBRTtZQUN4QyxnRUFBZ0U7WUFDaEUscUJBQXFCO1lBQ3JCLElBQUloUSxTQUFTLE1BQU1BLFNBQVMsT0FBTztnQkFDL0JlLE9BQU9rUCxRQUFRLENBQUMsR0FBRztnQkFDbkI7WUFDSjtZQUNBLDhDQUE4QztZQUM5QyxNQUFNQyxVQUFVQyxtQkFBbUJuUTtZQUNuQywrQ0FBK0M7WUFDL0MsTUFBTW9RLE9BQU9oRCxTQUFTaUQsY0FBYyxDQUFDSDtZQUNyQyxJQUFJRSxNQUFNO2dCQUNOQSxLQUFLRSxjQUFjO2dCQUNuQjtZQUNKO1lBQ0Esa0VBQWtFO1lBQ2xFLHFCQUFxQjtZQUNyQixNQUFNQyxTQUFTbkQsU0FBU29ELGlCQUFpQixDQUFDTixRQUFRLENBQUMsRUFBRTtZQUNyRCxJQUFJSyxRQUFRO2dCQUNSQSxPQUFPRCxjQUFjO1lBQ3pCO1FBQ0osR0FBRztZQUNDRyxnQkFBZ0IsSUFBSSxDQUFDL0gsZUFBZSxDQUFDM007UUFDekM7SUFDSjtJQUNBaU4sU0FBU3RPLE1BQU0sRUFBRTtRQUNiLE9BQU8sSUFBSSxDQUFDQSxNQUFNLEtBQUtBO0lBQzNCO0lBQ0E7Ozs7O0dBS0QsR0FBRyxNQUFNZ1csU0FBU2xWLEdBQUcsRUFBRWQsTUFBTSxFQUFFVixPQUFPLEVBQUU7UUFDbkMsSUFBSVUsV0FBVyxLQUFLLEdBQUdBLFNBQVNjO1FBQ2hDLElBQUl4QixZQUFZLEtBQUssR0FBR0EsVUFBVSxDQUFDO1FBQ25DLDJGQUEyRjtRQUMzRixJQUFJMEQsSUFBcUMsRUFBRTtZQUN2QztRQUNKO1FBQ0EsSUFBSSxLQUE2QixJQUFJLENBQUMsR0FBR2xFLE9BQU9tWCxLQUFLLEVBQUU1UCxPQUFPNlAsU0FBUyxDQUFDQyxTQUFTLEdBQUc7WUFDaEYsa0ZBQWtGO1lBQ2xGLDhFQUE4RTtZQUM5RSxjQUFjO1lBQ2Q7UUFDSjtRQUNBLElBQUk5SCxTQUFTLENBQUMsR0FBR3pRLGtCQUFrQjZGLGdCQUFnQixFQUFFM0M7UUFDckQsTUFBTXNWLGNBQWMvSCxPQUFPeE8sUUFBUTtRQUNuQyxJQUFJLEVBQUVBLFFBQVEsRUFBRTRFLEtBQUssRUFBRSxHQUFHNEo7UUFDMUIsTUFBTWdJLG1CQUFtQnhXO1FBQ3pCLElBQUltRCxLQUErQixFQUFFLEVBV3BDO1FBQ0QsTUFBTWxCLFFBQVEsTUFBTSxJQUFJLENBQUNuQyxVQUFVLENBQUNtRSxXQUFXO1FBQy9DLElBQUl2QyxhQUFhdkI7UUFDakIsTUFBTU8sU0FBUyxPQUFPakIsUUFBUWlCLE1BQU0sS0FBSyxjQUFjakIsUUFBUWlCLE1BQU0sSUFBSWdFLFlBQVksSUFBSSxDQUFDaEUsTUFBTTtRQUNoRyxNQUFNbU8sb0JBQW9CLE1BQU1wUyxrQkFBa0I7WUFDOUMwRCxRQUFRQTtZQUNSTyxRQUFRQTtZQUNSYixRQUFRLElBQUk7UUFDaEI7UUFDQSxJQUFJc0QsS0FBK0IsSUFBSWhELE9BQU9pQixVQUFVLENBQUMsTUFBTTtZQUMzRCxJQUFJa0Q7WUFDSCxHQUFFRCxZQUFZQyxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBR2hILGFBQWE0RyxzQkFBc0IsR0FBRTtZQUMzRSxNQUFNNEssaUJBQWlCLENBQUMsR0FBRzlRLGlCQUFpQnhCLE9BQU8sRUFBRSxDQUFDLEdBQUdpQyxhQUFhK0IsV0FBVyxFQUFFLENBQUMsR0FBR2xDLFdBQVdtQyxTQUFTLEVBQUVOLFFBQVEsSUFBSSxDQUFDTyxNQUFNLEdBQUcsT0FBT3VCLE9BQU9xQyxVQUFVa0ssT0FBTzVKLEtBQUssRUFBRSxDQUFDbUssSUFBSS9NLG9CQUFvQitNLEdBQUc5TSxRQUFRLElBQUksQ0FBQ2UsT0FBTztZQUN6TixJQUFJOEwsZUFBZUUsWUFBWSxFQUFFO2dCQUM3QjtZQUNKO1lBQ0EsSUFBSSxDQUFDSCxtQkFBbUI7Z0JBQ3BCbk4sYUFBYSxDQUFDLEdBQUduRCxjQUFjMFAsWUFBWSxFQUFFLENBQUMsR0FBR3pQLGdCQUFnQjhCLGNBQWMsRUFBRXdPLGVBQWUzTyxNQUFNLEdBQUcsSUFBSSxDQUFDTyxNQUFNO1lBQ3hIO1lBQ0EsSUFBSW9PLGVBQWVoSyxXQUFXLElBQUlnSyxlQUFlck4sWUFBWSxFQUFFO2dCQUMzRCxnRUFBZ0U7Z0JBQ2hFLDRDQUE0QztnQkFDNUN6QixXQUFXOE8sZUFBZXJOLFlBQVk7Z0JBQ3RDK00sT0FBT3hPLFFBQVEsR0FBR0E7Z0JBQ2xCLElBQUksQ0FBQzZPLG1CQUFtQjtvQkFDcEI1TixNQUFNLENBQUMsR0FBRzlDLFdBQVcyTyxvQkFBb0IsRUFBRTBCO2dCQUMvQztZQUNKO1FBQ0o7UUFDQUEsT0FBT3hPLFFBQVEsR0FBR2dDLG9CQUFvQndNLE9BQU94TyxRQUFRLEVBQUVpQztRQUN2RCxJQUFJLENBQUMsR0FBR25FLFdBQVd5RSxjQUFjLEVBQUVpTSxPQUFPeE8sUUFBUSxHQUFHO1lBQ2pEQSxXQUFXd08sT0FBT3hPLFFBQVE7WUFDMUJ3TyxPQUFPeE8sUUFBUSxHQUFHQTtZQUNsQjdELE9BQU9tRCxNQUFNLENBQUNzRixPQUFPLENBQUMsR0FBRzNHLGNBQWNpSCxlQUFlLEVBQUUsQ0FBQyxHQUFHaEgsWUFBWXNFLGFBQWEsRUFBRWdNLE9BQU94TyxRQUFRLEdBQUcsQ0FBQyxHQUFHM0IsV0FBVzZCLFNBQVMsRUFBRUMsUUFBUUgsUUFBUSxLQUFLLENBQUM7WUFDekosSUFBSSxDQUFDNk8sbUJBQW1CO2dCQUNwQjVOLE1BQU0sQ0FBQyxHQUFHOUMsV0FBVzJPLG9CQUFvQixFQUFFMEI7WUFDL0M7UUFDSjtRQUNBLE1BQU16SSxPQUFPNUMsTUFBbUQsR0FBRyxDQUFJLEdBQUcsTUFBTTBDLHNCQUFzQjtZQUNsR0MsV0FBVyxJQUFJOEIsY0FBYztvQkFDckIzQixVQUFVLElBQUksQ0FBQ25HLFVBQVUsQ0FBQ3FVLFdBQVcsQ0FBQzt3QkFDbEM5TCxNQUFNLENBQUMsR0FBR2xLLFdBQVcyTyxvQkFBb0IsRUFBRTs0QkFDdkM5TSxVQUFVd1c7NEJBQ1Y1Ujt3QkFDSjt3QkFDQXdQLG1CQUFtQjt3QkFDbkJqVSxRQUFRdUI7d0JBQ1JoQjtvQkFDSjtvQkFDQXFILGVBQWU7b0JBQ2ZDLGdCQUFnQixJQUFJLENBQUN5RSxLQUFLO29CQUMxQnhFLFdBQVc7b0JBQ1hKLGVBQWUsSUFBSSxDQUFDeU0sR0FBRztvQkFDdkJwTSxjQUFjLENBQUMsSUFBSSxDQUFDa0ksU0FBUztvQkFDN0J0SSxZQUFZO2dCQUNoQjtZQUNKM0gsUUFBUUE7WUFDUk8sUUFBUUE7WUFDUmIsUUFBUSxJQUFJO1FBQ2hCO1FBQ0E7OztLQUdILEdBQUcsSUFBSSxDQUFDa0csUUFBUSxPQUFPLEtBQUssSUFBSUEsS0FBS0MsTUFBTSxDQUFDYixJQUFJLE1BQU0sV0FBVztZQUMxRHFKLE9BQU94TyxRQUFRLEdBQUcrRixLQUFLQyxNQUFNLENBQUN2RSxZQUFZO1lBQzFDekIsV0FBVytGLEtBQUtDLE1BQU0sQ0FBQ3ZFLFlBQVk7WUFDbkNtRCxRQUFRO2dCQUNKLEdBQUdBLEtBQUs7Z0JBQ1IsR0FBR21CLEtBQUtDLE1BQU0sQ0FBQ2pCLFFBQVEsQ0FBQ0gsS0FBSztZQUNqQztZQUNBbEQsYUFBYXFFLEtBQUtDLE1BQU0sQ0FBQ2pCLFFBQVEsQ0FBQy9FLFFBQVE7WUFDMUNpQixNQUFNLENBQUMsR0FBRzlDLFdBQVcyTyxvQkFBb0IsRUFBRTBCO1FBQy9DO1FBQ0E7OztLQUdILEdBQUcsSUFBSSxDQUFDekksUUFBUSxPQUFPLEtBQUssSUFBSUEsS0FBS0MsTUFBTSxDQUFDYixJQUFJLE1BQU0scUJBQXFCO1lBQ3BFO1FBQ0o7UUFDQSxNQUFNcUUsUUFBUSxDQUFDLEdBQUduTSxxQkFBcUI4RSxtQkFBbUIsRUFBRW5DO1FBQzVELElBQUksTUFBTSxJQUFJLENBQUN5SyxJQUFJLENBQUN0SyxRQUFRdUIsWUFBWWpDLFFBQVFpQixNQUFNLEVBQUUsT0FBTztZQUMzRCxJQUFJLENBQUM2TixVQUFVLENBQUNnSSxZQUFZLEdBQUc7Z0JBQzNCNUgsYUFBYTtZQUNqQjtRQUNKO1FBQ0EsTUFBTWhQLFFBQVE5QyxHQUFHLENBQUM7WUFDZCxJQUFJLENBQUNpRCxVQUFVLENBQUM0VyxNQUFNLENBQUNsTixPQUFPckYsSUFBSSxDQUFDLENBQUN3UztnQkFDaEMsT0FBT0EsUUFBUS9PLGNBQWM7b0JBQ3pCM0IsVUFBVSxDQUFDRixRQUFRLE9BQU8sS0FBSyxJQUFJQSxLQUFLRyxJQUFJLElBQUlILFFBQVEsT0FBTyxLQUFLLElBQUlBLEtBQUtFLFFBQVEsR0FBRyxJQUFJLENBQUNuRyxVQUFVLENBQUNxVSxXQUFXLENBQUM7d0JBQ2hIOUwsTUFBTXBIO3dCQUNOZCxRQUFRdUI7d0JBQ1JoQixRQUFRQTtvQkFDWjtvQkFDQXNILGdCQUFnQjtvQkFDaEJDLFdBQVc7b0JBQ1hKLGVBQWUsSUFBSSxDQUFDeU0sR0FBRztvQkFDdkJwTSxjQUFjLENBQUMsSUFBSSxDQUFDa0ksU0FBUztvQkFDN0J0SSxZQUFZO29CQUNaTSwwQkFBMEIzSSxRQUFRMkksd0JBQXdCLElBQUkzSSxRQUFRbVgsUUFBUSxJQUFJLENBQUMsQ0FBQ3pULElBQTBDO2dCQUNsSSxHQUFHZ0IsSUFBSSxDQUFDLElBQUksT0FBTzRFLEtBQUssQ0FBQyxJQUFJLFNBQVM7WUFDMUM7WUFDQSxJQUFJLENBQUNqSixVQUFVLENBQUNMLFFBQVFtWCxRQUFRLEdBQUcsYUFBYSxXQUFXLENBQUNwTjtTQUMvRDtJQUNMO0lBQ0EsTUFBTXFJLGVBQWVySSxLQUFLLEVBQUU7UUFDeEIsTUFBTUcsa0JBQWtCSixvQkFBb0I7WUFDeENDO1lBQ0EzSixRQUFRLElBQUk7UUFDaEI7UUFDQSxJQUFJO1lBQ0EsTUFBTWlYLGtCQUFrQixNQUFNLElBQUksQ0FBQ2hYLFVBQVUsQ0FBQ2lYLFFBQVEsQ0FBQ3ZOO1lBQ3ZERztZQUNBLE9BQU9tTjtRQUNYLEVBQUUsT0FBTzlOLEtBQUs7WUFDVlc7WUFDQSxNQUFNWDtRQUNWO0lBQ0o7SUFDQThMLFNBQVNrQyxFQUFFLEVBQUU7UUFDVCxJQUFJeFgsWUFBWTtRQUNoQixNQUFNaUssU0FBUztZQUNYakssWUFBWTtRQUNoQjtRQUNBLElBQUksQ0FBQ2tLLEdBQUcsR0FBR0Q7UUFDWCxPQUFPdU4sS0FBSzdTLElBQUksQ0FBQyxDQUFDNEI7WUFDZCxJQUFJMEQsV0FBVyxJQUFJLENBQUNDLEdBQUcsRUFBRTtnQkFDckIsSUFBSSxDQUFDQSxHQUFHLEdBQUc7WUFDZjtZQUNBLElBQUlsSyxXQUFXO2dCQUNYLE1BQU13SixNQUFNLElBQUl6SixNQUFNO2dCQUN0QnlKLElBQUl4SixTQUFTLEdBQUc7Z0JBQ2hCLE1BQU13SjtZQUNWO1lBQ0EsT0FBT2pEO1FBQ1g7SUFDSjtJQUNBa1IsZUFBZWhSLFFBQVEsRUFBRTtRQUNyQixvRUFBb0U7UUFDcEUsT0FBTzJCLGNBQWM7WUFDakIzQjtZQUNBK0IsZ0JBQWdCO1lBQ2hCQyxXQUFXO1lBQ1hKLGVBQWUsSUFBSSxDQUFDeU0sR0FBRztZQUN2QnBNLGNBQWM7WUFDZEosWUFBWTtRQUNoQixHQUFHM0QsSUFBSSxDQUFDLENBQUNDO1lBQ0wsSUFBSSxFQUFFK0IsSUFBSSxFQUFFLEdBQUcvQjtZQUNmLE9BQU87Z0JBQ0gyQixNQUFNSTtZQUNWO1FBQ0o7SUFDSjtJQUNBcU4sZ0JBQWdCMUMsU0FBUyxFQUFFb0csR0FBRyxFQUFFO1FBQzVCLE1BQU0sRUFBRXBHLFdBQVdxRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM1SSxVQUFVLENBQUMsUUFBUTtRQUNuRCxNQUFNNkksVUFBVSxJQUFJLENBQUNDLFFBQVEsQ0FBQ0Y7UUFDOUJELElBQUlFLE9BQU8sR0FBR0E7UUFDZCxPQUFPLENBQUMsR0FBR3ZaLE9BQU95WixtQkFBbUIsRUFBRUgsS0FBSztZQUN4Q0M7WUFDQXRHO1lBQ0FqUixRQUFRLElBQUk7WUFDWnFYO1FBQ0o7SUFDSjtJQUNBLElBQUkxTixRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUM4QyxLQUFLLENBQUM5QyxLQUFLO0lBQzNCO0lBQ0EsSUFBSXhKLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQ3NNLEtBQUssQ0FBQ3RNLFFBQVE7SUFDOUI7SUFDQSxJQUFJNEUsUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDMEgsS0FBSyxDQUFDMUgsS0FBSztJQUMzQjtJQUNBLElBQUl6RSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUNtTSxLQUFLLENBQUNuTSxNQUFNO0lBQzVCO0lBQ0EsSUFBSU8sU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDNEwsS0FBSyxDQUFDNUwsTUFBTTtJQUM1QjtJQUNBLElBQUkyUCxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMvRCxLQUFLLENBQUMrRCxVQUFVO0lBQ2hDO0lBQ0EsSUFBSUQsWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDOUQsS0FBSyxDQUFDOEQsU0FBUztJQUMvQjtJQUNBbUgsWUFBWXZYLFFBQVEsRUFBRTRFLEtBQUssRUFBRXBELEVBQUUsRUFBRSxFQUFFZ1csWUFBWSxFQUFFMVgsVUFBVSxFQUFFcVgsR0FBRyxFQUFFTSxPQUFPLEVBQUUzRyxTQUFTLEVBQUU5SCxHQUFHLEVBQUUwTyxZQUFZLEVBQUVySCxVQUFVLEVBQUUzUCxNQUFNLEVBQUVzQyxPQUFPLEVBQUVzQyxhQUFhLEVBQUU2SCxhQUFhLEVBQUVpRCxTQUFTLEVBQUUsQ0FBQztRQUM1Syx5Q0FBeUM7UUFDekMsSUFBSSxDQUFDa0UsR0FBRyxHQUFHLENBQUM7UUFDWiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDRCxHQUFHLEdBQUcsQ0FBQztRQUNaLElBQUksQ0FBQ3NELG9CQUFvQixHQUFHO1FBQzVCLElBQUksQ0FBQzNOLElBQUksR0FBR3ROO1FBQ1osSUFBSSxDQUFDa2IsVUFBVSxHQUFHLENBQUN2UjtZQUNmLE1BQU0sRUFBRXNSLG9CQUFvQixFQUFFLEdBQUcsSUFBSTtZQUNyQyxJQUFJLENBQUNBLG9CQUFvQixHQUFHO1lBQzVCLE1BQU1yTCxRQUFRakcsRUFBRWlHLEtBQUs7WUFDckIsSUFBSSxDQUFDQSxPQUFPO2dCQUNSLDZDQUE2QztnQkFDN0Msc0RBQXNEO2dCQUN0RCxrQ0FBa0M7Z0JBQ2xDLEVBQUU7Z0JBQ0Ysb0VBQW9FO2dCQUNwRSw0QkFBNEI7Z0JBQzVCLDREQUE0RDtnQkFDNUQsa0ZBQWtGO2dCQUNsRixnREFBZ0Q7Z0JBQ2hELE1BQU0sRUFBRXRNLFFBQVEsRUFBRTRFLEtBQUssRUFBRSxHQUFHLElBQUk7Z0JBQ2hDLElBQUksQ0FBQ3dKLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHalEsV0FBVzJPLG9CQUFvQixFQUFFO29CQUNsRTlNLFVBQVUsQ0FBQyxHQUFHdkIsYUFBYStCLFdBQVcsRUFBRVI7b0JBQ3hDNEU7Z0JBQ0osSUFBSSxDQUFDLEdBQUcvRyxPQUFPb1YsTUFBTTtnQkFDckI7WUFDSjtZQUNBLGtGQUFrRjtZQUNsRixJQUFJM0csTUFBTXVMLElBQUksRUFBRTtnQkFDWnJSLE9BQU8rQixRQUFRLENBQUNxQixNQUFNO2dCQUN0QjtZQUNKO1lBQ0EsSUFBSSxDQUFDMEMsTUFBTTZHLEdBQUcsRUFBRTtnQkFDWjtZQUNKO1lBQ0EseURBQXlEO1lBQ3pELElBQUl3RSx3QkFBd0IsSUFBSSxDQUFDalgsTUFBTSxLQUFLNEwsTUFBTTdNLE9BQU8sQ0FBQ2lCLE1BQU0sSUFBSTRMLE1BQU05SyxFQUFFLEtBQUssSUFBSSxDQUFDckIsTUFBTSxFQUFFO2dCQUMxRjtZQUNKO1lBQ0EsSUFBSTBMO1lBQ0osTUFBTSxFQUFFNUssR0FBRyxFQUFFTyxFQUFFLEVBQUUvQixPQUFPLEVBQUUrUSxHQUFHLEVBQUUsR0FBR2xFO1lBQ2xDLElBQUluSixLQUFxQyxFQUFFLEVBc0IxQztZQUNELElBQUksQ0FBQzZHLElBQUksR0FBR3dHO1lBQ1osTUFBTSxFQUFFeFEsUUFBUSxFQUFFLEdBQUcsQ0FBQyxHQUFHakMsa0JBQWtCNkYsZ0JBQWdCLEVBQUUzQztZQUM3RCxnREFBZ0Q7WUFDaEQseURBQXlEO1lBQ3pELElBQUksSUFBSSxDQUFDd0wsS0FBSyxJQUFJakwsT0FBTyxDQUFDLEdBQUcvQyxhQUFhK0IsV0FBVyxFQUFFLElBQUksQ0FBQ0wsTUFBTSxLQUFLSCxhQUFhLENBQUMsR0FBR3ZCLGFBQWErQixXQUFXLEVBQUUsSUFBSSxDQUFDUixRQUFRLEdBQUc7Z0JBQzlIO1lBQ0o7WUFDQSx1REFBdUQ7WUFDdkQsd0RBQXdEO1lBQ3hELElBQUksSUFBSSxDQUFDb1YsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDQSxJQUFJLENBQUM5SSxRQUFRO2dCQUNoQztZQUNKO1lBQ0EsSUFBSSxDQUFDL0IsTUFBTSxDQUFDLGdCQUFnQnRKLEtBQUtPLElBQUlyRixPQUFPbUQsTUFBTSxDQUFDLENBQUMsR0FBR0csU0FBUztnQkFDNUR5TSxTQUFTek0sUUFBUXlNLE9BQU8sSUFBSSxJQUFJLENBQUNnSCxRQUFRO2dCQUN6Q3hTLFFBQVFqQixRQUFRaUIsTUFBTSxJQUFJLElBQUksQ0FBQzRFLGFBQWE7Z0JBQzVDLGlEQUFpRDtnQkFDakQyRyxJQUFJO1lBQ1IsSUFBSUo7UUFDUjtRQUNBLHVDQUF1QztRQUN2QyxNQUFNckMsUUFBUSxDQUFDLEdBQUduTSxxQkFBcUI4RSxtQkFBbUIsRUFBRW5DO1FBQzVELDZDQUE2QztRQUM3QyxJQUFJLENBQUN1TyxVQUFVLEdBQUcsQ0FBQztRQUNuQixvREFBb0Q7UUFDcEQsd0RBQXdEO1FBQ3hELGtDQUFrQztRQUNsQyxJQUFJdk8sYUFBYSxXQUFXO1lBQ3hCLElBQUksQ0FBQ3VPLFVBQVUsQ0FBQy9FLE1BQU0sR0FBRztnQkFDckJzSDtnQkFDQWlILFNBQVM7Z0JBQ1QzRyxPQUFPb0c7Z0JBQ1B4TztnQkFDQXFJLFNBQVNtRyxnQkFBZ0JBLGFBQWFuRyxPQUFPO2dCQUM3Q0MsU0FBU2tHLGdCQUFnQkEsYUFBYWxHLE9BQU87WUFDakQ7UUFDSjtRQUNBLElBQUksQ0FBQy9DLFVBQVUsQ0FBQyxRQUFRLEdBQUc7WUFDdkJ1QyxXQUFXcUc7WUFDWDVELGFBQWEsRUFBRTtRQUNuQjtRQUNBLElBQUlwUSxJQUErQyxFQUFFO1lBQ2pELE1BQU0sRUFBRTZVLFdBQVcsRUFBRSxHQUFHN2EsbUJBQU9BLENBQUMsbUZBQXdCO1lBQ3hELE1BQU04YSxtQkFBbUI5VSxrSEFBeUM7WUFDbEUsTUFBTWdWLG9CQUFvQmhWLDRFQUF5QztZQUNuRSxJQUFJOFUsb0JBQW9CLE9BQU8sS0FBSyxJQUFJQSxpQkFBaUJJLFNBQVMsRUFBRTtnQkFDaEUsSUFBSSxDQUFDbE4sTUFBTSxHQUFHLElBQUk2TSxZQUFZQyxpQkFBaUJLLFFBQVEsRUFBRUwsaUJBQWlCTSxTQUFTO2dCQUNuRixJQUFJLENBQUNwTixNQUFNLENBQUNxTixNQUFNLENBQUNQO1lBQ3ZCO1lBQ0EsSUFBSUUscUJBQXFCLE9BQU8sS0FBSyxJQUFJQSxrQkFBa0JFLFNBQVMsRUFBRTtnQkFDbEUsSUFBSSxDQUFDek0sTUFBTSxHQUFHLElBQUlvTSxZQUFZRyxrQkFBa0JHLFFBQVEsRUFBRUgsa0JBQWtCSSxTQUFTO2dCQUNyRixJQUFJLENBQUMzTSxNQUFNLENBQUM0TSxNQUFNLENBQUNMO1lBQ3ZCO1FBQ0o7UUFDQSw0Q0FBNEM7UUFDNUMsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQ3BLLE1BQU0sR0FBRzlRLE9BQU84USxNQUFNO1FBQzNCLElBQUksQ0FBQ2pPLFVBQVUsR0FBR0E7UUFDbEIsOERBQThEO1FBQzlELGtEQUFrRDtRQUNsRCxNQUFNMlksb0JBQW9CLENBQUMsR0FBRzNhLFdBQVd5RSxjQUFjLEVBQUV2QyxhQUFhbUssS0FBSzRILGFBQWEsQ0FBQzJHLFVBQVU7UUFDbkcsSUFBSSxDQUFDNVYsUUFBUSxHQUFHSyxNQUFrQyxJQUFJO1FBQ3RELElBQUksQ0FBQzhSLEdBQUcsR0FBR3lDO1FBQ1gsSUFBSSxDQUFDaE8sR0FBRyxHQUFHO1FBQ1gsSUFBSSxDQUFDMk4sUUFBUSxHQUFHSTtRQUNoQiw2REFBNkQ7UUFDN0QsMEJBQTBCO1FBQzFCLElBQUksQ0FBQ2hMLEtBQUssR0FBRztRQUNiLElBQUksQ0FBQ1csY0FBYyxHQUFHO1FBQ3RCLElBQUksQ0FBQ1osT0FBTyxHQUFHLENBQUMsQ0FBRXJDLENBQUFBLEtBQUs0SCxhQUFhLENBQUM2RyxJQUFJLElBQUl6TyxLQUFLNEgsYUFBYSxDQUFDOEcsR0FBRyxJQUFJMU8sS0FBSzRILGFBQWEsQ0FBQytHLHFCQUFxQixJQUFJM08sS0FBSzRILGFBQWEsQ0FBQ2dILE1BQU0sSUFBSSxDQUFDNU8sS0FBSzRILGFBQWEsQ0FBQ2lILEdBQUcsSUFBSSxDQUFDUCxxQkFBcUIsQ0FBQ3RPLEtBQUs1QixRQUFRLENBQUMwUSxNQUFNLElBQUksQ0FBQzlWLElBQStCO1FBQzFQLElBQUlBLEtBQStCLEVBQUUsRUFLcEM7UUFDRCxJQUFJLENBQUNtSixLQUFLLEdBQUc7WUFDVDlDO1lBQ0F4SjtZQUNBNEU7WUFDQXpFLFFBQVFzWSxvQkFBb0J6WSxXQUFXd0I7WUFDdkM0TyxXQUFXLENBQUMsQ0FBQ0E7WUFDYjFQLFFBQVF5QyxNQUErQixHQUFHekMsQ0FBTUEsR0FBR2dFO1lBQ25EMkw7UUFDSjtRQUNBLElBQUksQ0FBQzZJLGdDQUFnQyxHQUFHdlosUUFBUUMsT0FBTyxDQUFDO1FBQ3hELElBQUksSUFBNkIsRUFBRTtZQUMvQixrRUFBa0U7WUFDbEUsNENBQTRDO1lBQzVDLElBQUksQ0FBQzRCLEdBQUdKLFVBQVUsQ0FBQyxPQUFPO2dCQUN0QiwyREFBMkQ7Z0JBQzNELDREQUE0RDtnQkFDNUQsTUFBTTNCLFVBQVU7b0JBQ1ppQjtnQkFDSjtnQkFDQSxNQUFNUCxTQUFTLENBQUMsR0FBR3RDLE9BQU9vVixNQUFNO2dCQUNoQyxJQUFJLENBQUNpRyxnQ0FBZ0MsR0FBR3pjLGtCQUFrQjtvQkFDdERvRCxRQUFRLElBQUk7b0JBQ1phO29CQUNBUDtnQkFDSixHQUFHZ0UsSUFBSSxDQUFDLENBQUNjO29CQUNMeEYsUUFBUTJNLGtCQUFrQixHQUFHNUssT0FBT3hCO29CQUNwQyxJQUFJLENBQUNvTyxXQUFXLENBQUMsZ0JBQWdCbkosVUFBVTlFLFNBQVMsQ0FBQyxHQUFHaEMsV0FBVzJPLG9CQUFvQixFQUFFO3dCQUNyRjlNLFVBQVUsQ0FBQyxHQUFHdkIsYUFBYStCLFdBQVcsRUFBRVI7d0JBQ3hDNEU7b0JBQ0osSUFBSXpFLFFBQVFWO29CQUNaLE9BQU93RjtnQkFDWDtZQUNKO1lBQ0F1QixPQUFPMlMsZ0JBQWdCLENBQUMsWUFBWSxJQUFJLENBQUN2QixVQUFVO1lBQ25ELDJEQUEyRDtZQUMzRCxtREFBbUQ7WUFDbkQsSUFBSXpVLEtBQXFDLEVBQUUsRUFJMUM7UUFDTDtJQUNKO0FBQ0o7QUFDQWxHLE9BQU84USxNQUFNLEdBQUcsQ0FBQyxHQUFHblEsTUFBTXBCLE9BQU8sS0FFakMsa0NBQWtDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvcm91dGVyLmpzPzg2ODQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBkZWZhdWx0OiBudWxsLFxuICAgIG1hdGNoZXNNaWRkbGV3YXJlOiBudWxsLFxuICAgIGNyZWF0ZUtleTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBkZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJvdXRlcjtcbiAgICB9LFxuICAgIG1hdGNoZXNNaWRkbGV3YXJlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoZXNNaWRkbGV3YXJlO1xuICAgIH0sXG4gICAgY3JlYXRlS2V5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUtleTtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfaW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmRcIik7XG5jb25zdCBfcmVtb3ZldHJhaWxpbmdzbGFzaCA9IHJlcXVpcmUoXCIuL3V0aWxzL3JlbW92ZS10cmFpbGluZy1zbGFzaFwiKTtcbmNvbnN0IF9yb3V0ZWxvYWRlciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvcm91dGUtbG9hZGVyXCIpO1xuY29uc3QgX3NjcmlwdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvc2NyaXB0XCIpO1xuY29uc3QgX2lzZXJyb3IgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuXyhyZXF1aXJlKFwiLi4vLi4vLi4vbGliL2lzLWVycm9yXCIpKTtcbmNvbnN0IF9kZW5vcm1hbGl6ZXBhZ2VwYXRoID0gcmVxdWlyZShcIi4uL3BhZ2UtcGF0aC9kZW5vcm1hbGl6ZS1wYWdlLXBhdGhcIik7XG5jb25zdCBfbm9ybWFsaXplbG9jYWxlcGF0aCA9IHJlcXVpcmUoXCIuLi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aFwiKTtcbmNvbnN0IF9taXR0ID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vbWl0dFwiKSk7XG5jb25zdCBfdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBfaXNkeW5hbWljID0gcmVxdWlyZShcIi4vdXRpbHMvaXMtZHluYW1pY1wiKTtcbmNvbnN0IF9wYXJzZXJlbGF0aXZldXJsID0gcmVxdWlyZShcIi4vdXRpbHMvcGFyc2UtcmVsYXRpdmUtdXJsXCIpO1xuY29uc3QgX3Jlc29sdmVyZXdyaXRlcyA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4vdXRpbHMvcmVzb2x2ZS1yZXdyaXRlc1wiKSk7XG5jb25zdCBfcm91dGVtYXRjaGVyID0gcmVxdWlyZShcIi4vdXRpbHMvcm91dGUtbWF0Y2hlclwiKTtcbmNvbnN0IF9yb3V0ZXJlZ2V4ID0gcmVxdWlyZShcIi4vdXRpbHMvcm91dGUtcmVnZXhcIik7XG5jb25zdCBfZm9ybWF0dXJsID0gcmVxdWlyZShcIi4vdXRpbHMvZm9ybWF0LXVybFwiKTtcbmNvbnN0IF9kZXRlY3Rkb21haW5sb2NhbGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L2RldGVjdC1kb21haW4tbG9jYWxlXCIpO1xuY29uc3QgX3BhcnNlcGF0aCA9IHJlcXVpcmUoXCIuL3V0aWxzL3BhcnNlLXBhdGhcIik7XG5jb25zdCBfYWRkbG9jYWxlID0gcmVxdWlyZShcIi4uLy4uLy4uL2NsaWVudC9hZGQtbG9jYWxlXCIpO1xuY29uc3QgX3JlbW92ZWxvY2FsZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvcmVtb3ZlLWxvY2FsZVwiKTtcbmNvbnN0IF9yZW1vdmViYXNlcGF0aCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvcmVtb3ZlLWJhc2UtcGF0aFwiKTtcbmNvbnN0IF9hZGRiYXNlcGF0aCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvYWRkLWJhc2UtcGF0aFwiKTtcbmNvbnN0IF9oYXNiYXNlcGF0aCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvaGFzLWJhc2UtcGF0aFwiKTtcbmNvbnN0IF9yZXNvbHZlaHJlZiA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvcmVzb2x2ZS1ocmVmXCIpO1xuY29uc3QgX2lzYXBpcm91dGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vbGliL2lzLWFwaS1yb3V0ZVwiKTtcbmNvbnN0IF9nZXRuZXh0cGF0aG5hbWVpbmZvID0gcmVxdWlyZShcIi4vdXRpbHMvZ2V0LW5leHQtcGF0aG5hbWUtaW5mb1wiKTtcbmNvbnN0IF9mb3JtYXRuZXh0cGF0aG5hbWVpbmZvID0gcmVxdWlyZShcIi4vdXRpbHMvZm9ybWF0LW5leHQtcGF0aG5hbWUtaW5mb1wiKTtcbmNvbnN0IF9jb21wYXJlc3RhdGVzID0gcmVxdWlyZShcIi4vdXRpbHMvY29tcGFyZS1zdGF0ZXNcIik7XG5jb25zdCBfaXNsb2NhbHVybCA9IHJlcXVpcmUoXCIuL3V0aWxzL2lzLWxvY2FsLXVybFwiKTtcbmNvbnN0IF9pc2JvdCA9IHJlcXVpcmUoXCIuL3V0aWxzL2lzLWJvdFwiKTtcbmNvbnN0IF9vbWl0ID0gcmVxdWlyZShcIi4vdXRpbHMvb21pdFwiKTtcbmNvbnN0IF9pbnRlcnBvbGF0ZWFzID0gcmVxdWlyZShcIi4vdXRpbHMvaW50ZXJwb2xhdGUtYXNcIik7XG5jb25zdCBfaGFuZGxlc21vb3Roc2Nyb2xsID0gcmVxdWlyZShcIi4vdXRpbHMvaGFuZGxlLXNtb290aC1zY3JvbGxcIik7XG5mdW5jdGlvbiBidWlsZENhbmNlbGxhdGlvbkVycm9yKCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihcIlJvdXRlIENhbmNlbGxlZFwiKSwge1xuICAgICAgICBjYW5jZWxsZWQ6IHRydWVcbiAgICB9KTtcbn1cbmFzeW5jIGZ1bmN0aW9uIG1hdGNoZXNNaWRkbGV3YXJlKG9wdGlvbnMpIHtcbiAgICBjb25zdCBtYXRjaGVycyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShvcHRpb25zLnJvdXRlci5wYWdlTG9hZGVyLmdldE1pZGRsZXdhcmUoKSk7XG4gICAgaWYgKCFtYXRjaGVycykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHsgcGF0aG5hbWU6IGFzUGF0aG5hbWUgfSA9ICgwLCBfcGFyc2VwYXRoLnBhcnNlUGF0aCkob3B0aW9ucy5hc1BhdGgpO1xuICAgIC8vIHJlbW92ZSBiYXNlUGF0aCBmaXJzdCBzaW5jZSBwYXRoIHByZWZpeCBoYXMgdG8gYmUgaW4gdGhlIG9yZGVyIG9mIGAvJHtiYXNlUGF0aH0vJHtsb2NhbGV9YFxuICAgIGNvbnN0IGNsZWFuZWRBcyA9ICgwLCBfaGFzYmFzZXBhdGguaGFzQmFzZVBhdGgpKGFzUGF0aG5hbWUpID8gKDAsIF9yZW1vdmViYXNlcGF0aC5yZW1vdmVCYXNlUGF0aCkoYXNQYXRobmFtZSkgOiBhc1BhdGhuYW1lO1xuICAgIGNvbnN0IGFzV2l0aEJhc2VQYXRoQW5kTG9jYWxlID0gKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkoKDAsIF9hZGRsb2NhbGUuYWRkTG9jYWxlKShjbGVhbmVkQXMsIG9wdGlvbnMubG9jYWxlKSk7XG4gICAgLy8gQ2hlY2sgb25seSBwYXRoIG1hdGNoIG9uIGNsaWVudC4gTWF0Y2hpbmcgXCJoYXNcIiBzaG91bGQgYmUgZG9uZSBvbiBzZXJ2ZXJcbiAgICAvLyB3aGVyZSB3ZSBjYW4gYWNjZXNzIG1vcmUgaW5mbyBzdWNoIGFzIGhlYWRlcnMsIEh0dHBPbmx5IGNvb2tpZSwgZXRjLlxuICAgIHJldHVybiBtYXRjaGVycy5zb21lKChtKT0+bmV3IFJlZ0V4cChtLnJlZ2V4cCkudGVzdChhc1dpdGhCYXNlUGF0aEFuZExvY2FsZSkpO1xufVxuZnVuY3Rpb24gc3RyaXBPcmlnaW4odXJsKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gKDAsIF91dGlscy5nZXRMb2NhdGlvbk9yaWdpbikoKTtcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgob3JpZ2luKSA/IHVybC5zdWJzdHJpbmcob3JpZ2luLmxlbmd0aCkgOiB1cmw7XG59XG5mdW5jdGlvbiBwcmVwYXJlVXJsQXMocm91dGVyLCB1cmwsIGFzKSB7XG4gICAgLy8gSWYgdXJsIGFuZCBhcyBwcm92aWRlZCBhcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24sXG4gICAgLy8gd2UnbGwgZm9ybWF0IHRoZW0gaW50byB0aGUgc3RyaW5nIHZlcnNpb24gaGVyZS5cbiAgICBsZXQgW3Jlc29sdmVkSHJlZiwgcmVzb2x2ZWRBc10gPSAoMCwgX3Jlc29sdmVocmVmLnJlc29sdmVIcmVmKShyb3V0ZXIsIHVybCwgdHJ1ZSk7XG4gICAgY29uc3Qgb3JpZ2luID0gKDAsIF91dGlscy5nZXRMb2NhdGlvbk9yaWdpbikoKTtcbiAgICBjb25zdCBocmVmV2FzQWJzb2x1dGUgPSByZXNvbHZlZEhyZWYuc3RhcnRzV2l0aChvcmlnaW4pO1xuICAgIGNvbnN0IGFzV2FzQWJzb2x1dGUgPSByZXNvbHZlZEFzICYmIHJlc29sdmVkQXMuc3RhcnRzV2l0aChvcmlnaW4pO1xuICAgIHJlc29sdmVkSHJlZiA9IHN0cmlwT3JpZ2luKHJlc29sdmVkSHJlZik7XG4gICAgcmVzb2x2ZWRBcyA9IHJlc29sdmVkQXMgPyBzdHJpcE9yaWdpbihyZXNvbHZlZEFzKSA6IHJlc29sdmVkQXM7XG4gICAgY29uc3QgcHJlcGFyZWRVcmwgPSBocmVmV2FzQWJzb2x1dGUgPyByZXNvbHZlZEhyZWYgOiAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKShyZXNvbHZlZEhyZWYpO1xuICAgIGNvbnN0IHByZXBhcmVkQXMgPSBhcyA/IHN0cmlwT3JpZ2luKCgwLCBfcmVzb2x2ZWhyZWYucmVzb2x2ZUhyZWYpKHJvdXRlciwgYXMpKSA6IHJlc29sdmVkQXMgfHwgcmVzb2x2ZWRIcmVmO1xuICAgIHJldHVybiB7XG4gICAgICAgIHVybDogcHJlcGFyZWRVcmwsXG4gICAgICAgIGFzOiBhc1dhc0Fic29sdXRlID8gcHJlcGFyZWRBcyA6ICgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKHByZXBhcmVkQXMpXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVEeW5hbWljUm91dGUocGF0aG5hbWUsIHBhZ2VzKSB7XG4gICAgY29uc3QgY2xlYW5QYXRobmFtZSA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKSgoMCwgX2Rlbm9ybWFsaXplcGFnZXBhdGguZGVub3JtYWxpemVQYWdlUGF0aCkocGF0aG5hbWUpKTtcbiAgICBpZiAoY2xlYW5QYXRobmFtZSA9PT0gXCIvNDA0XCIgfHwgY2xlYW5QYXRobmFtZSA9PT0gXCIvX2Vycm9yXCIpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhuYW1lO1xuICAgIH1cbiAgICAvLyBoYW5kbGUgcmVzb2x2aW5nIGhyZWYgZm9yIGR5bmFtaWMgcm91dGVzXG4gICAgaWYgKCFwYWdlcy5pbmNsdWRlcyhjbGVhblBhdGhuYW1lKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgYXJyYXktY2FsbGJhY2stcmV0dXJuXG4gICAgICAgIHBhZ2VzLnNvbWUoKHBhZ2UpPT57XG4gICAgICAgICAgICBpZiAoKDAsIF9pc2R5bmFtaWMuaXNEeW5hbWljUm91dGUpKHBhZ2UpICYmICgwLCBfcm91dGVyZWdleC5nZXRSb3V0ZVJlZ2V4KShwYWdlKS5yZS50ZXN0KGNsZWFuUGF0aG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcGF0aG5hbWUgPSBwYWdlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShwYXRobmFtZSk7XG59XG5mdW5jdGlvbiBnZXRNaWRkbGV3YXJlRGF0YShzb3VyY2UsIHJlc3BvbnNlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgbmV4dENvbmZpZyA9IHtcbiAgICAgICAgYmFzZVBhdGg6IG9wdGlvbnMucm91dGVyLmJhc2VQYXRoLFxuICAgICAgICBpMThuOiB7XG4gICAgICAgICAgICBsb2NhbGVzOiBvcHRpb25zLnJvdXRlci5sb2NhbGVzXG4gICAgICAgIH0sXG4gICAgICAgIHRyYWlsaW5nU2xhc2g6IEJvb2xlYW4ocHJvY2Vzcy5lbnYuX19ORVhUX1RSQUlMSU5HX1NMQVNIKVxuICAgIH07XG4gICAgY29uc3QgcmV3cml0ZUhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwieC1uZXh0anMtcmV3cml0ZVwiKTtcbiAgICBsZXQgcmV3cml0ZVRhcmdldCA9IHJld3JpdGVIZWFkZXIgfHwgcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LW5leHRqcy1tYXRjaGVkLXBhdGhcIik7XG4gICAgY29uc3QgbWF0Y2hlZFBhdGggPSByZXNwb25zZS5oZWFkZXJzLmdldChcIngtbWF0Y2hlZC1wYXRoXCIpO1xuICAgIGlmIChtYXRjaGVkUGF0aCAmJiAhcmV3cml0ZVRhcmdldCAmJiAhbWF0Y2hlZFBhdGguaW5jbHVkZXMoXCJfX25leHRfZGF0YV9jYXRjaGFsbFwiKSAmJiAhbWF0Y2hlZFBhdGguaW5jbHVkZXMoXCIvX2Vycm9yXCIpICYmICFtYXRjaGVkUGF0aC5pbmNsdWRlcyhcIi80MDRcIikpIHtcbiAgICAgICAgLy8gbGV2ZXJhZ2UgeC1tYXRjaGVkLXBhdGggdG8gZGV0ZWN0IG5leHQuY29uZmlnLmpzIHJld3JpdGVzXG4gICAgICAgIHJld3JpdGVUYXJnZXQgPSBtYXRjaGVkUGF0aDtcbiAgICB9XG4gICAgaWYgKHJld3JpdGVUYXJnZXQpIHtcbiAgICAgICAgaWYgKHJld3JpdGVUYXJnZXQuc3RhcnRzV2l0aChcIi9cIikgfHwgcHJvY2Vzcy5lbnYuX19ORVhUX0VYVEVSTkFMX01JRERMRVdBUkVfUkVXUklURV9SRVNPTFZFKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRSZXdyaXRlVGFyZ2V0ID0gKDAsIF9wYXJzZXJlbGF0aXZldXJsLnBhcnNlUmVsYXRpdmVVcmwpKHJld3JpdGVUYXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgcGF0aG5hbWVJbmZvID0gKDAsIF9nZXRuZXh0cGF0aG5hbWVpbmZvLmdldE5leHRQYXRobmFtZUluZm8pKHBhcnNlZFJld3JpdGVUYXJnZXQucGF0aG5hbWUsIHtcbiAgICAgICAgICAgICAgICBuZXh0Q29uZmlnLFxuICAgICAgICAgICAgICAgIHBhcnNlRGF0YTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgZnNQYXRobmFtZSA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShwYXRobmFtZUluZm8ucGF0aG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnJvdXRlci5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KCksXG4gICAgICAgICAgICAgICAgKDAsIF9yb3V0ZWxvYWRlci5nZXRDbGllbnRCdWlsZE1hbmlmZXN0KSgpXG4gICAgICAgICAgICBdKS50aGVuKChwYXJhbSk9PntcbiAgICAgICAgICAgICAgICBsZXQgW3BhZ2VzLCB7IF9fcmV3cml0ZXM6IHJld3JpdGVzIH1dID0gcGFyYW07XG4gICAgICAgICAgICAgICAgbGV0IGFzID0gKDAsIF9hZGRsb2NhbGUuYWRkTG9jYWxlKShwYXRobmFtZUluZm8ucGF0aG5hbWUsIHBhdGhuYW1lSW5mby5sb2NhbGUpO1xuICAgICAgICAgICAgICAgIGlmICgoMCwgX2lzZHluYW1pYy5pc0R5bmFtaWNSb3V0ZSkoYXMpIHx8ICFyZXdyaXRlSGVhZGVyICYmIHBhZ2VzLmluY2x1ZGVzKCgwLCBfbm9ybWFsaXplbG9jYWxlcGF0aC5ub3JtYWxpemVMb2NhbGVQYXRoKSgoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKShhcyksIG9wdGlvbnMucm91dGVyLmxvY2FsZXMpLnBhdGhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRTb3VyY2UgPSAoMCwgX2dldG5leHRwYXRobmFtZWluZm8uZ2V0TmV4dFBhdGhuYW1lSW5mbykoKDAsIF9wYXJzZXJlbGF0aXZldXJsLnBhcnNlUmVsYXRpdmVVcmwpKHNvdXJjZSkucGF0aG5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDb25maWc6IHByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVMgPyB1bmRlZmluZWQgOiBuZXh0Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEYXRhOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhcyA9ICgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKHBhcnNlZFNvdXJjZS5wYXRobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZFJld3JpdGVUYXJnZXQucGF0aG5hbWUgPSBhcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gKDAsIF9yZXNvbHZlcmV3cml0ZXMuZGVmYXVsdCkoYXMsIHBhZ2VzLCByZXdyaXRlcywgcGFyc2VkUmV3cml0ZVRhcmdldC5xdWVyeSwgKHBhdGgpPT5yZXNvbHZlRHluYW1pY1JvdXRlKHBhdGgsIHBhZ2VzKSwgb3B0aW9ucy5yb3V0ZXIubG9jYWxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubWF0Y2hlZFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFJld3JpdGVUYXJnZXQucGF0aG5hbWUgPSByZXN1bHQucGFyc2VkQXMucGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcyA9IHBhcnNlZFJld3JpdGVUYXJnZXQucGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcnNlZFJld3JpdGVUYXJnZXQucXVlcnksIHJlc3VsdC5wYXJzZWRBcy5xdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFwYWdlcy5pbmNsdWRlcyhmc1BhdGhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFBhdGhuYW1lID0gcmVzb2x2ZUR5bmFtaWNSb3V0ZShmc1BhdGhuYW1lLCBwYWdlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZFBhdGhuYW1lICE9PSBmc1BhdGhuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmc1BhdGhuYW1lID0gcmVzb2x2ZWRQYXRobmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZEhyZWYgPSAhcGFnZXMuaW5jbHVkZXMoZnNQYXRobmFtZSkgPyByZXNvbHZlRHluYW1pY1JvdXRlKCgwLCBfbm9ybWFsaXplbG9jYWxlcGF0aC5ub3JtYWxpemVMb2NhbGVQYXRoKSgoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKShwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lKSwgb3B0aW9ucy5yb3V0ZXIubG9jYWxlcykucGF0aG5hbWUsIHBhZ2VzKSA6IGZzUGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBfaXNkeW5hbWljLmlzRHluYW1pY1JvdXRlKShyZXNvbHZlZEhyZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSAoMCwgX3JvdXRlbWF0Y2hlci5nZXRSb3V0ZU1hdGNoZXIpKCgwLCBfcm91dGVyZWdleC5nZXRSb3V0ZVJlZ2V4KShyZXNvbHZlZEhyZWYpKShhcyk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGFyc2VkUmV3cml0ZVRhcmdldC5xdWVyeSwgbWF0Y2hlcyB8fCB7fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmV3cml0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRBczogcGFyc2VkUmV3cml0ZVRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRIcmVmXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNyYyA9ICgwLCBfcGFyc2VwYXRoLnBhcnNlUGF0aCkoc291cmNlKTtcbiAgICAgICAgY29uc3QgcGF0aG5hbWUgPSAoMCwgX2Zvcm1hdG5leHRwYXRobmFtZWluZm8uZm9ybWF0TmV4dFBhdGhuYW1lSW5mbykoe1xuICAgICAgICAgICAgLi4uKDAsIF9nZXRuZXh0cGF0aG5hbWVpbmZvLmdldE5leHRQYXRobmFtZUluZm8pKHNyYy5wYXRobmFtZSwge1xuICAgICAgICAgICAgICAgIG5leHRDb25maWcsXG4gICAgICAgICAgICAgICAgcGFyc2VEYXRhOiB0cnVlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGU6IG9wdGlvbnMucm91dGVyLmRlZmF1bHRMb2NhbGUsXG4gICAgICAgICAgICBidWlsZElkOiBcIlwiXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgIHR5cGU6IFwicmVkaXJlY3QtZXh0ZXJuYWxcIixcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBcIlwiICsgcGF0aG5hbWUgKyBzcmMucXVlcnkgKyBzcmMuaGFzaFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVkaXJlY3RUYXJnZXQgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIngtbmV4dGpzLXJlZGlyZWN0XCIpO1xuICAgIGlmIChyZWRpcmVjdFRhcmdldCkge1xuICAgICAgICBpZiAocmVkaXJlY3RUYXJnZXQuc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9ICgwLCBfcGFyc2VwYXRoLnBhcnNlUGF0aCkocmVkaXJlY3RUYXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgcGF0aG5hbWUgPSAoMCwgX2Zvcm1hdG5leHRwYXRobmFtZWluZm8uZm9ybWF0TmV4dFBhdGhuYW1lSW5mbykoe1xuICAgICAgICAgICAgICAgIC4uLigwLCBfZ2V0bmV4dHBhdGhuYW1laW5mby5nZXROZXh0UGF0aG5hbWVJbmZvKShzcmMucGF0aG5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dENvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VEYXRhOiB0cnVlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVmYXVsdExvY2FsZTogb3B0aW9ucy5yb3V0ZXIuZGVmYXVsdExvY2FsZSxcbiAgICAgICAgICAgICAgICBidWlsZElkOiBcIlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwicmVkaXJlY3QtaW50ZXJuYWxcIixcbiAgICAgICAgICAgICAgICBuZXdBczogXCJcIiArIHBhdGhuYW1lICsgc3JjLnF1ZXJ5ICsgc3JjLmhhc2gsXG4gICAgICAgICAgICAgICAgbmV3VXJsOiBcIlwiICsgcGF0aG5hbWUgKyBzcmMucXVlcnkgKyBzcmMuaGFzaFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICB0eXBlOiBcInJlZGlyZWN0LWV4dGVybmFsXCIsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogcmVkaXJlY3RUYXJnZXRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICB0eXBlOiBcIm5leHRcIlxuICAgIH0pO1xufVxuYXN5bmMgZnVuY3Rpb24gd2l0aE1pZGRsZXdhcmVFZmZlY3RzKG9wdGlvbnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gYXdhaXQgbWF0Y2hlc01pZGRsZXdhcmUob3B0aW9ucyk7XG4gICAgaWYgKCFtYXRjaGVzIHx8ICFvcHRpb25zLmZldGNoRGF0YSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IG9wdGlvbnMuZmV0Y2hEYXRhKCk7XG4gICAgICAgIGNvbnN0IGVmZmVjdCA9IGF3YWl0IGdldE1pZGRsZXdhcmVEYXRhKGRhdGEuZGF0YUhyZWYsIGRhdGEucmVzcG9uc2UsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YUhyZWY6IGRhdGEuZGF0YUhyZWYsXG4gICAgICAgICAgICBqc29uOiBkYXRhLmpzb24sXG4gICAgICAgICAgICByZXNwb25zZTogZGF0YS5yZXNwb25zZSxcbiAgICAgICAgICAgIHRleHQ6IGRhdGEudGV4dCxcbiAgICAgICAgICAgIGNhY2hlS2V5OiBkYXRhLmNhY2hlS2V5LFxuICAgICAgICAgICAgZWZmZWN0XG4gICAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKipcbiAgICAgKiBUT0RPOiBSZXZpc2l0IHRoaXMgaW4gdGhlIGZ1dHVyZS5cbiAgICAgKiBGb3Igbm93IHdlIHdpbGwgbm90IGNvbnNpZGVyIG1pZGRsZXdhcmUgZGF0YSBlcnJvcnMgdG8gYmUgZmF0YWwuXG4gICAgICogbWF5YmUgd2Ugc2hvdWxkIHJldmlzaXQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgKi8gcmV0dXJuIG51bGw7XG4gICAgfVxufVxuY29uc3QgbWFudWFsU2Nyb2xsUmVzdG9yYXRpb24gPSBwcm9jZXNzLmVudi5fX05FWFRfU0NST0xMX1JFU1RPUkFUSU9OICYmIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgXCJzY3JvbGxSZXN0b3JhdGlvblwiIGluIHdpbmRvdy5oaXN0b3J5ICYmICEhZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHYgPSBcIl9fbmV4dFwiO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VxdWVuY2VzXG4gICAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHYsIHYpLCBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHYpLCB0cnVlO1xuICAgIH0gY2F0Y2ggKG4pIHt9XG59KCk7XG5jb25zdCBTU0dfREFUQV9OT1RfRk9VTkQgPSBTeW1ib2woXCJTU0dfREFUQV9OT1RfRk9VTkRcIik7XG5mdW5jdGlvbiBmZXRjaFJldHJ5KHVybCwgYXR0ZW1wdHMsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZmV0Y2godXJsLCB7XG4gICAgICAgIC8vIENvb2tpZXMgYXJlIHJlcXVpcmVkIHRvIGJlIHByZXNlbnQgZm9yIE5leHQuanMnIFNTRyBcIlByZXZpZXcgTW9kZVwiLlxuICAgICAgICAvLyBDb29raWVzIG1heSBhbHNvIGJlIHJlcXVpcmVkIGZvciBgZ2V0U2VydmVyU2lkZVByb3BzYC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gPiBgZmV0Y2hgIHdvbuKAmXQgc2VuZCBjb29raWVzLCB1bmxlc3MgeW91IHNldCB0aGUgY3JlZGVudGlhbHMgaW5pdFxuICAgICAgICAvLyA+IG9wdGlvbi5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaFxuICAgICAgICAvL1xuICAgICAgICAvLyA+IEZvciBtYXhpbXVtIGJyb3dzZXIgY29tcGF0aWJpbGl0eSB3aGVuIGl0IGNvbWVzIHRvIHNlbmRpbmcgJlxuICAgICAgICAvLyA+IHJlY2VpdmluZyBjb29raWVzLCBhbHdheXMgc3VwcGx5IHRoZSBgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbidgXG4gICAgICAgIC8vID4gb3B0aW9uIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgZGVmYXVsdC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaCNjYXZlYXRzXG4gICAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG4gICAgICAgIG1ldGhvZDogb3B0aW9ucy5tZXRob2QgfHwgXCJHRVRcIixcbiAgICAgICAgaGVhZGVyczogT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5oZWFkZXJzLCB7XG4gICAgICAgICAgICBcIngtbmV4dGpzLWRhdGFcIjogXCIxXCJcbiAgICAgICAgfSlcbiAgICB9KS50aGVuKChyZXNwb25zZSk9PntcbiAgICAgICAgcmV0dXJuICFyZXNwb25zZS5vayAmJiBhdHRlbXB0cyA+IDEgJiYgcmVzcG9uc2Uuc3RhdHVzID49IDUwMCA/IGZldGNoUmV0cnkodXJsLCBhdHRlbXB0cyAtIDEsIG9wdGlvbnMpIDogcmVzcG9uc2U7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0cnlUb1BhcnNlQXNKU09OKHRleHQpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5mdW5jdGlvbiBmZXRjaE5leHREYXRhKHBhcmFtKSB7XG4gICAgbGV0IHsgZGF0YUhyZWYsIGluZmxpZ2h0Q2FjaGUsIGlzUHJlZmV0Y2gsIGhhc01pZGRsZXdhcmUsIGlzU2VydmVyUmVuZGVyLCBwYXJzZUpTT04sIHBlcnNpc3RDYWNoZSwgaXNCYWNrZ3JvdW5kLCB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUgfSA9IHBhcmFtO1xuICAgIGNvbnN0IHsgaHJlZjogY2FjaGVLZXkgfSA9IG5ldyBVUkwoZGF0YUhyZWYsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICB2YXIgX3BhcmFtc19tZXRob2Q7XG4gICAgY29uc3QgZ2V0RGF0YSA9IChwYXJhbXMpPT5mZXRjaFJldHJ5KGRhdGFIcmVmLCBpc1NlcnZlclJlbmRlciA/IDMgOiAxLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiBPYmplY3QuYXNzaWduKHt9LCBpc1ByZWZldGNoID8ge1xuICAgICAgICAgICAgICAgIHB1cnBvc2U6IFwicHJlZmV0Y2hcIlxuICAgICAgICAgICAgfSA6IHt9LCBpc1ByZWZldGNoICYmIGhhc01pZGRsZXdhcmUgPyB7XG4gICAgICAgICAgICAgICAgXCJ4LW1pZGRsZXdhcmUtcHJlZmV0Y2hcIjogXCIxXCJcbiAgICAgICAgICAgIH0gOiB7fSksXG4gICAgICAgICAgICBtZXRob2Q6IChfcGFyYW1zX21ldGhvZCA9IHBhcmFtcyA9PSBudWxsID8gdm9pZCAwIDogcGFyYW1zLm1ldGhvZCkgIT0gbnVsbCA/IF9wYXJhbXNfbWV0aG9kIDogXCJHRVRcIlxuICAgICAgICB9KS50aGVuKChyZXNwb25zZSk9PntcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5vayAmJiAocGFyYW1zID09IG51bGwgPyB2b2lkIDAgOiBwYXJhbXMubWV0aG9kKSA9PT0gXCJIRUFEXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhSHJlZixcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIGpzb246IHt9LFxuICAgICAgICAgICAgICAgICAgICBjYWNoZUtleVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpLnRoZW4oKHRleHQpPT57XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoZW4gdGhlIGRhdGEgcmVzcG9uc2UgaXMgYSByZWRpcmVjdCBiZWNhdXNlIG9mIGEgbWlkZGxld2FyZVxuICAgICAgICAgICAgICogd2UgZG8gbm90IGNvbnNpZGVyIGl0IGFuIGVycm9yLiBUaGUgaGVhZGVycyBtdXN0IGJyaW5nIHRoZVxuICAgICAgICAgICAgICogbWFwcGVkIGxvY2F0aW9uLlxuICAgICAgICAgICAgICogVE9ETzogQ2hhbmdlIHRoZSBzdGF0dXMgY29kZSBpbiB0aGUgaGFuZGxlci5cbiAgICAgICAgICAgICAqLyBpZiAoaGFzTWlkZGxld2FyZSAmJiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAzMDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAzMDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAzMDcsXG4gICAgICAgICAgICAgICAgICAgICAgICAzMDhcbiAgICAgICAgICAgICAgICAgICAgXS5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFIcmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbjoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RyeVRvUGFyc2VBc0pTT047XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKF90cnlUb1BhcnNlQXNKU09OID0gdHJ5VG9QYXJzZUFzSlNPTih0ZXh0KSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90cnlUb1BhcnNlQXNKU09OLm5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdEZvdW5kOiBTU0dfREFUQV9OT1RfRk9VTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIHN0YXRpYyBwcm9wc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXZSBzaG91bGQgb25seSB0cmlnZ2VyIGEgc2VydmVyLXNpZGUgdHJhbnNpdGlvbiBpZiB0aGlzIHdhc1xuICAgICAgICAgICAgICogY2F1c2VkIG9uIGEgY2xpZW50LXNpZGUgdHJhbnNpdGlvbi4gT3RoZXJ3aXNlLCB3ZSdkIGdldCBpbnRvXG4gICAgICAgICAgICAgKiBhbiBpbmZpbml0ZSBsb29wLlxuICAgICAgICAgICAgICovIGlmICghaXNTZXJ2ZXJSZW5kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfcm91dGVsb2FkZXIubWFya0Fzc2V0RXJyb3IpKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUhyZWYsXG4gICAgICAgICAgICAgICAgICAgIGpzb246IHBhcnNlSlNPTiA/IHRyeVRvUGFyc2VBc0pTT04odGV4dCkgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVLZXlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLnRoZW4oKGRhdGEpPT57XG4gICAgICAgICAgICBpZiAoIXBlcnNpc3RDYWNoZSB8fCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgfHwgZGF0YS5yZXNwb25zZS5oZWFkZXJzLmdldChcIngtbWlkZGxld2FyZS1jYWNoZVwiKSA9PT0gXCJuby1jYWNoZVwiKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0pLmNhdGNoKChlcnIpPT57XG4gICAgICAgICAgICBpZiAoIXVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBpbmZsaWdodENhY2hlW2NhY2hlS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgvLyBjaHJvbWVcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID09PSBcIkZhaWxlZCB0byBmZXRjaFwiIHx8IC8vIGZpcmVmb3hcbiAgICAgICAgICAgIGVyci5tZXNzYWdlID09PSBcIk5ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2UuXCIgfHwgLy8gc2FmYXJpXG4gICAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gXCJMb2FkIGZhaWxlZFwiKSB7XG4gICAgICAgICAgICAgICAgKDAsIF9yb3V0ZWxvYWRlci5tYXJrQXNzZXRFcnJvcikoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSk7XG4gICAgLy8gd2hlbiBza2lwcGluZyBjbGllbnQgY2FjaGUgd2Ugd2FpdCB0byB1cGRhdGVcbiAgICAvLyBpbmZsaWdodCBjYWNoZSB1bnRpbCBzdWNjZXNzZnVsIGRhdGEgcmVzcG9uc2VcbiAgICAvLyB0aGlzIGFsbG93cyByYWNpbmcgY2xpY2sgZXZlbnQgd2l0aCBmZXRjaGluZyBuZXdlciBkYXRhXG4gICAgLy8gd2l0aG91dCBibG9ja2luZyBuYXZpZ2F0aW9uIHdoZW4gc3RhbGUgZGF0YSBpcyBhdmFpbGFibGVcbiAgICBpZiAodW5zdGFibGVfc2tpcENsaWVudENhY2hlICYmIHBlcnNpc3RDYWNoZSkge1xuICAgICAgICByZXR1cm4gZ2V0RGF0YSh7fSkudGhlbigoZGF0YSk9PntcbiAgICAgICAgICAgIGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldID0gUHJvbWlzZS5yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5mbGlnaHRDYWNoZVtjYWNoZUtleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gaW5mbGlnaHRDYWNoZVtjYWNoZUtleV07XG4gICAgfVxuICAgIHJldHVybiBpbmZsaWdodENhY2hlW2NhY2hlS2V5XSA9IGdldERhdGEoaXNCYWNrZ3JvdW5kID8ge1xuICAgICAgICBtZXRob2Q6IFwiSEVBRFwiXG4gICAgfSA6IHt9KTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUtleSgpIHtcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApO1xufVxuZnVuY3Rpb24gaGFuZGxlSGFyZE5hdmlnYXRpb24ocGFyYW0pIHtcbiAgICBsZXQgeyB1cmwsIHJvdXRlciB9ID0gcGFyYW07XG4gICAgLy8gZW5zdXJlIHdlIGRvbid0IHRyaWdnZXIgYSBoYXJkIG5hdmlnYXRpb24gdG8gdGhlIHNhbWVcbiAgICAvLyBVUkwgYXMgdGhpcyBjYW4gZW5kIHVwIHdpdGggYW4gaW5maW5pdGUgcmVmcmVzaFxuICAgIGlmICh1cmwgPT09ICgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKCgwLCBfYWRkbG9jYWxlLmFkZExvY2FsZSkocm91dGVyLmFzUGF0aCwgcm91dGVyLmxvY2FsZSkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFyaWFudDogYXR0ZW1wdGVkIHRvIGhhcmQgbmF2aWdhdGUgdG8gdGhlIHNhbWUgVVJMIFwiICsgdXJsICsgXCIgXCIgKyBsb2NhdGlvbi5ocmVmKTtcbiAgICB9XG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG59XG5jb25zdCBnZXRDYW5jZWxsZWRIYW5kbGVyID0gKHBhcmFtKT0+e1xuICAgIGxldCB7IHJvdXRlLCByb3V0ZXIgfSA9IHBhcmFtO1xuICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBjYW5jZWwgPSByb3V0ZXIuY2xjID0gKCk9PntcbiAgICAgICAgY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUNhbmNlbGxlZCA9ICgpPT57XG4gICAgICAgIGlmIChjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdBYm9ydCBmZXRjaGluZyBjb21wb25lbnQgZm9yIHJvdXRlOiBcIicgKyByb3V0ZSArICdcIicpO1xuICAgICAgICAgICAgZXJyb3IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5jZWwgPT09IHJvdXRlci5jbGMpIHtcbiAgICAgICAgICAgIHJvdXRlci5jbGMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQ2FuY2VsbGVkO1xufTtcbmNsYXNzIFJvdXRlciB7XG4gICAgcmVsb2FkKCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBHbyBiYWNrIGluIGhpc3RvcnlcbiAgICovIGJhY2soKSB7XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIEdvIGZvcndhcmQgaW4gaGlzdG9yeVxuICAgKi8gZm9yd2FyZCgpIHtcbiAgICAgICAgd2luZG93Lmhpc3RvcnkuZm9yd2FyZCgpO1xuICAgIH1cbiAgICAvKipcbiAgICogUGVyZm9ybXMgYSBgcHVzaFN0YXRlYCB3aXRoIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0gdXJsIG9mIHRoZSByb3V0ZVxuICAgKiBAcGFyYW0gYXMgbWFza3MgYHVybGAgZm9yIHRoZSBicm93c2VyXG4gICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCB5b3UgY2FuIGRlZmluZSBgc2hhbGxvd2AgYW5kIG90aGVyIG9wdGlvbnNcbiAgICovIHB1c2godXJsLCBhcywgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSBvcHRpb25zID0ge307XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfU0NST0xMX1JFU1RPUkFUSU9OKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiByZW1vdmUgaW4gdGhlIGZ1dHVyZSB3aGVuIHdlIHVwZGF0ZSBoaXN0b3J5IGJlZm9yZSByb3V0ZSBjaGFuZ2VcbiAgICAgICAgICAgIC8vIGlzIGNvbXBsZXRlLCBhcyB0aGUgcG9wc3RhdGUgZXZlbnQgc2hvdWxkIGhhbmRsZSB0aGlzIGNhcHR1cmUuXG4gICAgICAgICAgICBpZiAobWFudWFsU2Nyb2xsUmVzdG9yYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTbmFwc2hvdCBzY3JvbGwgcG9zaXRpb24gcmlnaHQgYmVmb3JlIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZTpcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcIl9fbmV4dF9zY3JvbGxfXCIgKyB0aGlzLl9rZXksIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHNlbGYucGFnZVhPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBzZWxmLnBhZ2VZT2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICh7IHVybCwgYXMgfSA9IHByZXBhcmVVcmxBcyh0aGlzLCB1cmwsIGFzKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5nZShcInB1c2hTdGF0ZVwiLCB1cmwsIGFzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAqIFBlcmZvcm1zIGEgYHJlcGxhY2VTdGF0ZWAgd2l0aCBhcmd1bWVudHNcbiAgICogQHBhcmFtIHVybCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIGFzIG1hc2tzIGB1cmxgIGZvciB0aGUgYnJvd3NlclxuICAgKiBAcGFyYW0gb3B0aW9ucyBvYmplY3QgeW91IGNhbiBkZWZpbmUgYHNoYWxsb3dgIGFuZCBvdGhlciBvcHRpb25zXG4gICAqLyByZXBsYWNlKHVybCwgYXMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgb3B0aW9ucyA9IHt9O1xuICAgICAgICAoeyB1cmwsIGFzIH0gPSBwcmVwYXJlVXJsQXModGhpcywgdXJsLCBhcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFuZ2UoXCJyZXBsYWNlU3RhdGVcIiwgdXJsLCBhcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGFzeW5jIF9iZmwoYXMsIHJlc29sdmVkQXMsIGxvY2FsZSwgc2tpcE5hdmlnYXRlKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1JPVVRFUl9GSUxURVJfRU5BQkxFRCkge1xuICAgICAgICAgICAgbGV0IG1hdGNoZXNCZmxTdGF0aWMgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBtYXRjaGVzQmZsRHluYW1pYyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjdXJBcyBvZiBbXG4gICAgICAgICAgICAgICAgYXMsXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRBc1xuICAgICAgICAgICAgXSl7XG4gICAgICAgICAgICAgICAgaWYgKGN1ckFzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzTm9TbGFzaCA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShuZXcgVVJMKGN1ckFzLCBcImh0dHA6Ly9uXCIpLnBhdGhuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNOb1NsYXNoTG9jYWxlID0gKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkoKDAsIF9hZGRsb2NhbGUuYWRkTG9jYWxlKShhc05vU2xhc2gsIGxvY2FsZSB8fCB0aGlzLmxvY2FsZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXNOb1NsYXNoICE9PSAoMCwgX3JlbW92ZXRyYWlsaW5nc2xhc2gucmVtb3ZlVHJhaWxpbmdTbGFzaCkobmV3IFVSTCh0aGlzLmFzUGF0aCwgXCJodHRwOi8vblwiKS5wYXRobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpc19fYmZsX3MsIF90aGlzX19iZmxfczE7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzQmZsU3RhdGljID0gbWF0Y2hlc0JmbFN0YXRpYyB8fCAhISgoX3RoaXNfX2JmbF9zID0gdGhpcy5fYmZsX3MpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpc19fYmZsX3MuY29udGFpbnMoYXNOb1NsYXNoKSkgfHwgISEoKF90aGlzX19iZmxfczEgPSB0aGlzLl9iZmxfcykgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzX19iZmxfczEuY29udGFpbnMoYXNOb1NsYXNoTG9jYWxlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbGl6ZWRBUyBvZiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNOb1NsYXNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzTm9TbGFzaExvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgXSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgYW55IHN1Yi1wYXRoIG9mIGFzIG1hdGNoZXMgYSBkeW5hbWljIGZpbHRlciBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGhhcmQgbmF2aWdhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyQXNQYXJ0cyA9IG5vcm1hbGl6ZWRBUy5zcGxpdChcIi9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgIW1hdGNoZXNCZmxEeW5hbWljICYmIGkgPCBjdXJBc1BhcnRzLmxlbmd0aCArIDE7IGkrKyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpc19fYmZsX2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYXJ0ID0gY3VyQXNQYXJ0cy5zbGljZSgwLCBpKS5qb2luKFwiL1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJ0ICYmICgoX3RoaXNfX2JmbF9kID0gdGhpcy5fYmZsX2QpID09IG51bGwgPyB2b2lkIDAgOiBfdGhpc19fYmZsX2QuY29udGFpbnMoY3VycmVudFBhcnQpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlc0JmbER5bmFtaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY2xpZW50IHJvdXRlciBmaWx0ZXIgaXMgbWF0Y2hlZCB0aGVuIHdlIHRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgaGFyZCBuYXZpZ2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlc0JmbFN0YXRpYyB8fCBtYXRjaGVzQmZsRHluYW1pYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChza2lwTmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKSgoMCwgX2FkZGxvY2FsZS5hZGRMb2NhbGUpKGFzLCBsb2NhbGUgfHwgdGhpcy5sb2NhbGUsIHRoaXMuZGVmYXVsdExvY2FsZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCk9Pnt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGFzeW5jIGNoYW5nZShtZXRob2QsIHVybCwgYXMsIG9wdGlvbnMsIGZvcmNlZFNjcm9sbCkge1xuICAgICAgICB2YXIgX3RoaXNfY29tcG9uZW50c19wYXRobmFtZTtcbiAgICAgICAgaWYgKCEoMCwgX2lzbG9jYWx1cmwuaXNMb2NhbFVSTCkodXJsKSkge1xuICAgICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdBUk5JTkc6IGBfaGAgaXMgYW4gaW50ZXJuYWwgb3B0aW9uIGZvciBoYW5kaW5nIE5leHQuanMgY2xpZW50LXNpZGVcbiAgICAgICAgLy8gaHlkcmF0aW9uLiBZb3VyIGFwcCBzaG91bGQgX25ldmVyXyB1c2UgdGhpcyBwcm9wZXJ0eS4gSXQgbWF5IGNoYW5nZSBhdFxuICAgICAgICAvLyBhbnkgdGltZSB3aXRob3V0IG5vdGljZS5cbiAgICAgICAgY29uc3QgaXNRdWVyeVVwZGF0aW5nID0gb3B0aW9ucy5faCA9PT0gMTtcbiAgICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcgJiYgIW9wdGlvbnMuc2hhbGxvdykge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fYmZsKGFzLCB1bmRlZmluZWQsIG9wdGlvbnMubG9jYWxlKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2hvdWxkUmVzb2x2ZUhyZWYgPSBpc1F1ZXJ5VXBkYXRpbmcgfHwgb3B0aW9ucy5fc2hvdWxkUmVzb2x2ZUhyZWYgfHwgKDAsIF9wYXJzZXBhdGgucGFyc2VQYXRoKSh1cmwpLnBhdGhuYW1lID09PSAoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKGFzKS5wYXRobmFtZTtcbiAgICAgICAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgICAgICAgICAgLi4udGhpcy5zdGF0ZVxuICAgICAgICB9O1xuICAgICAgICAvLyBmb3Igc3RhdGljIHBhZ2VzIHdpdGggcXVlcnkgcGFyYW1zIGluIHRoZSBVUkwgd2UgZGVsYXlcbiAgICAgICAgLy8gbWFya2luZyB0aGUgcm91dGVyIHJlYWR5IHVudGlsIGFmdGVyIHRoZSBxdWVyeSBpcyB1cGRhdGVkXG4gICAgICAgIC8vIG9yIGEgbmF2aWdhdGlvbiBoYXMgb2NjdXJyZWRcbiAgICAgICAgY29uc3QgcmVhZHlTdGF0ZUNoYW5nZSA9IHRoaXMuaXNSZWFkeSAhPT0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXNTc3IgPSB0aGlzLmlzU3NyO1xuICAgICAgICBpZiAoIWlzUXVlcnlVcGRhdGluZykge1xuICAgICAgICAgICAgdGhpcy5pc1NzciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGEgcm91dGUgdHJhbnNpdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzIGJlZm9yZVxuICAgICAgICAvLyB0aGUgcXVlcnkgdXBkYXRpbmcgaXMgdHJpZ2dlcmVkIGlnbm9yZSBxdWVyeSB1cGRhdGluZ1xuICAgICAgICBpZiAoaXNRdWVyeVVwZGF0aW5nICYmIHRoaXMuY2xjKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldkxvY2FsZSA9IG5leHRTdGF0ZS5sb2NhbGU7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgICAgICAgICBuZXh0U3RhdGUubG9jYWxlID0gb3B0aW9ucy5sb2NhbGUgPT09IGZhbHNlID8gdGhpcy5kZWZhdWx0TG9jYWxlIDogb3B0aW9ucy5sb2NhbGUgfHwgbmV4dFN0YXRlLmxvY2FsZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmxvY2FsZSA9IG5leHRTdGF0ZS5sb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRBcyA9ICgwLCBfcGFyc2VyZWxhdGl2ZXVybC5wYXJzZVJlbGF0aXZlVXJsKSgoMCwgX2hhc2Jhc2VwYXRoLmhhc0Jhc2VQYXRoKShhcykgPyAoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKShhcykgOiBhcyk7XG4gICAgICAgICAgICBjb25zdCBsb2NhbGVQYXRoUmVzdWx0ID0gKDAsIF9ub3JtYWxpemVsb2NhbGVwYXRoLm5vcm1hbGl6ZUxvY2FsZVBhdGgpKHBhcnNlZEFzLnBhdGhuYW1lLCB0aGlzLmxvY2FsZXMpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGUpIHtcbiAgICAgICAgICAgICAgICBuZXh0U3RhdGUubG9jYWxlID0gbG9jYWxlUGF0aFJlc3VsdC5kZXRlY3RlZExvY2FsZTtcbiAgICAgICAgICAgICAgICBwYXJzZWRBcy5wYXRobmFtZSA9ICgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKHBhcnNlZEFzLnBhdGhuYW1lKTtcbiAgICAgICAgICAgICAgICBhcyA9ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKShwYXJzZWRBcyk7XG4gICAgICAgICAgICAgICAgdXJsID0gKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkoKDAsIF9ub3JtYWxpemVsb2NhbGVwYXRoLm5vcm1hbGl6ZUxvY2FsZVBhdGgpKCgwLCBfaGFzYmFzZXBhdGguaGFzQmFzZVBhdGgpKHVybCkgPyAoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKSh1cmwpIDogdXJsLCB0aGlzLmxvY2FsZXMpLnBhdGhuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBkaWROYXZpZ2F0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byB3cmFwIHRoaXMgaW4gdGhlIGVudiBjaGVjayBhZ2FpbiBzaW5jZSByZWdlbmVyYXRvciBydW50aW1lXG4gICAgICAgICAgICAvLyBtb3ZlcyB0aGlzIG9uIGl0cyBvd24gZHVlIHRvIHRoZSByZXR1cm5cbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgICAgICAgICAgICAgdmFyIF90aGlzX2xvY2FsZXM7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGxvY2FsZSBpc24ndCBjb25maWd1cmVkIGhhcmQgbmF2aWdhdGUgdG8gc2hvdyA0MDQgcGFnZVxuICAgICAgICAgICAgICAgIGlmICghKChfdGhpc19sb2NhbGVzID0gdGhpcy5sb2NhbGVzKSA9PSBudWxsID8gdm9pZCAwIDogX3RoaXNfbG9jYWxlcy5pbmNsdWRlcyhuZXh0U3RhdGUubG9jYWxlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkQXMucGF0aG5hbWUgPSAoMCwgX2FkZGxvY2FsZS5hZGRMb2NhbGUpKHBhcnNlZEFzLnBhdGhuYW1lLCBuZXh0U3RhdGUubG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAoMCwgX2Zvcm1hdHVybC5mb3JtYXRXaXRoVmFsaWRhdGlvbikocGFyc2VkQXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHdhcyBwcmV2aW91c2x5IGEgcmV0dXJuIGJ1dCB3YXMgcmVtb3ZlZCBpbiBmYXZvclxuICAgICAgICAgICAgICAgICAgICAvLyBvZiBiZXR0ZXIgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdpdGggcmVnZW5lcmF0b3IgcnVudGltZVxuICAgICAgICAgICAgICAgICAgICBkaWROYXZpZ2F0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGV0ZWN0ZWREb21haW4gPSAoMCwgX2RldGVjdGRvbWFpbmxvY2FsZS5kZXRlY3REb21haW5Mb2NhbGUpKHRoaXMuZG9tYWluTG9jYWxlcywgdW5kZWZpbmVkLCBuZXh0U3RhdGUubG9jYWxlKTtcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gd3JhcCB0aGlzIGluIHRoZSBlbnYgY2hlY2sgYWdhaW4gc2luY2UgcmVnZW5lcmF0b3IgcnVudGltZVxuICAgICAgICAgICAgLy8gbW92ZXMgdGhpcyBvbiBpdHMgb3duIGR1ZSB0byB0aGUgcmV0dXJuXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGFyZSBuYXZpZ2F0aW5nIHRvIGEgZG9tYWluIGxvY2FsZSBlbnN1cmUgd2UgcmVkaXJlY3QgdG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gY29ycmVjdCBkb21haW5cbiAgICAgICAgICAgICAgICBpZiAoIWRpZE5hdmlnYXRlICYmIGRldGVjdGVkRG9tYWluICYmIHRoaXMuaXNMb2NhbGVEb21haW4gJiYgc2VsZi5sb2NhdGlvbi5ob3N0bmFtZSAhPT0gZGV0ZWN0ZWREb21haW4uZG9tYWluKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzTm9CYXNlUGF0aCA9ICgwLCBfcmVtb3ZlYmFzZXBhdGgucmVtb3ZlQmFzZVBhdGgpKGFzKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcImh0dHBcIiArIChkZXRlY3RlZERvbWFpbi5odHRwID8gXCJcIiA6IFwic1wiKSArIFwiOi8vXCIgKyBkZXRlY3RlZERvbWFpbi5kb21haW4gKyAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKShcIlwiICsgKG5leHRTdGF0ZS5sb2NhbGUgPT09IGRldGVjdGVkRG9tYWluLmRlZmF1bHRMb2NhbGUgPyBcIlwiIDogXCIvXCIgKyBuZXh0U3RhdGUubG9jYWxlKSArIChhc05vQmFzZVBhdGggPT09IFwiL1wiID8gXCJcIiA6IGFzTm9CYXNlUGF0aCkgfHwgXCIvXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHdhcyBwcmV2aW91c2x5IGEgcmV0dXJuIGJ1dCB3YXMgcmVtb3ZlZCBpbiBmYXZvclxuICAgICAgICAgICAgICAgICAgICAvLyBvZiBiZXR0ZXIgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdpdGggcmVnZW5lcmF0b3IgcnVudGltZVxuICAgICAgICAgICAgICAgICAgICBkaWROYXZpZ2F0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRpZE5hdmlnYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpPT57fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbWFya2luZyByb3V0ZSBjaGFuZ2VzIGFzIGEgbmF2aWdhdGlvbiBzdGFydCBlbnRyeVxuICAgICAgICBpZiAoX3V0aWxzLlNUKSB7XG4gICAgICAgICAgICBwZXJmb3JtYW5jZS5tYXJrKFwicm91dGVDaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzaGFsbG93ID0gZmFsc2UsIHNjcm9sbCA9IHRydWUgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHJvdXRlUHJvcHMgPSB7XG4gICAgICAgICAgICBzaGFsbG93XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLl9pbkZsaWdodFJvdXRlICYmIHRoaXMuY2xjKSB7XG4gICAgICAgICAgICBpZiAoIWlzU3NyKSB7XG4gICAgICAgICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KFwicm91dGVDaGFuZ2VFcnJvclwiLCBidWlsZENhbmNlbGxhdGlvbkVycm9yKCksIHRoaXMuX2luRmxpZ2h0Um91dGUsIHJvdXRlUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jbGMoKTtcbiAgICAgICAgICAgIHRoaXMuY2xjID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBhcyA9ICgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKCgwLCBfYWRkbG9jYWxlLmFkZExvY2FsZSkoKDAsIF9oYXNiYXNlcGF0aC5oYXNCYXNlUGF0aCkoYXMpID8gKDAsIF9yZW1vdmViYXNlcGF0aC5yZW1vdmVCYXNlUGF0aCkoYXMpIDogYXMsIG9wdGlvbnMubG9jYWxlLCB0aGlzLmRlZmF1bHRMb2NhbGUpKTtcbiAgICAgICAgY29uc3QgY2xlYW5lZEFzID0gKDAsIF9yZW1vdmVsb2NhbGUucmVtb3ZlTG9jYWxlKSgoMCwgX2hhc2Jhc2VwYXRoLmhhc0Jhc2VQYXRoKShhcykgPyAoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKShhcykgOiBhcywgbmV4dFN0YXRlLmxvY2FsZSk7XG4gICAgICAgIHRoaXMuX2luRmxpZ2h0Um91dGUgPSBhcztcbiAgICAgICAgY29uc3QgbG9jYWxlQ2hhbmdlID0gcHJldkxvY2FsZSAhPT0gbmV4dFN0YXRlLmxvY2FsZTtcbiAgICAgICAgLy8gSWYgdGhlIHVybCBjaGFuZ2UgaXMgb25seSByZWxhdGVkIHRvIGEgaGFzaCBjaGFuZ2VcbiAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBwcm9jZWVkLiBXZSBzaG91bGQgb25seSBjaGFuZ2UgdGhlIHN0YXRlLlxuICAgICAgICBpZiAoIWlzUXVlcnlVcGRhdGluZyAmJiB0aGlzLm9ubHlBSGFzaENoYW5nZShjbGVhbmVkQXMpICYmICFsb2NhbGVDaGFuZ2UpIHtcbiAgICAgICAgICAgIG5leHRTdGF0ZS5hc1BhdGggPSBjbGVhbmVkQXM7XG4gICAgICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoXCJoYXNoQ2hhbmdlU3RhcnRcIiwgYXMsIHJvdXRlUHJvcHMpO1xuICAgICAgICAgICAgLy8gVE9ETzogZG8gd2UgbmVlZCB0aGUgcmVzb2x2ZWQgaHJlZiB3aGVuIG9ubHkgYSBoYXNoIGNoYW5nZT9cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUobWV0aG9kLCB1cmwsIGFzLCB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzY3JvbGw6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChzY3JvbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvSGFzaChjbGVhbmVkQXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNldChuZXh0U3RhdGUsIHRoaXMuY29tcG9uZW50c1tuZXh0U3RhdGUucm91dGVdLCBudWxsKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmICgoMCwgX2lzZXJyb3IuZGVmYXVsdCkoZXJyKSAmJiBlcnIuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIFJvdXRlci5ldmVudHMuZW1pdChcInJvdXRlQ2hhbmdlRXJyb3JcIiwgZXJyLCBjbGVhbmVkQXMsIHJvdXRlUHJvcHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoXCJoYXNoQ2hhbmdlQ29tcGxldGVcIiwgYXMsIHJvdXRlUHJvcHMpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcnNlZCA9ICgwLCBfcGFyc2VyZWxhdGl2ZXVybC5wYXJzZVJlbGF0aXZlVXJsKSh1cmwpO1xuICAgICAgICBsZXQgeyBwYXRobmFtZSwgcXVlcnkgfSA9IHBhcnNlZDtcbiAgICAgICAgLy8gVGhlIGJ1aWxkIG1hbmlmZXN0IG5lZWRzIHRvIGJlIGxvYWRlZCBiZWZvcmUgYXV0by1zdGF0aWMgZHluYW1pYyBwYWdlc1xuICAgICAgICAvLyBnZXQgdGhlaXIgcXVlcnkgcGFyYW1ldGVycyB0byBhbGxvdyBlbnN1cmluZyB0aGV5IGNhbiBiZSBwYXJzZWQgcHJvcGVybHlcbiAgICAgICAgLy8gd2hlbiByZXdyaXR0ZW4gdG9cbiAgICAgICAgbGV0IHBhZ2VzLCByZXdyaXRlcztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFtwYWdlcywgeyBfX3Jld3JpdGVzOiByZXdyaXRlcyB9XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZXIuZ2V0UGFnZUxpc3QoKSxcbiAgICAgICAgICAgICAgICAoMCwgX3JvdXRlbG9hZGVyLmdldENsaWVudEJ1aWxkTWFuaWZlc3QpKCksXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTG9hZGVyLmdldE1pZGRsZXdhcmUoKVxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gSWYgd2UgZmFpbCB0byByZXNvbHZlIHRoZSBwYWdlIGxpc3Qgb3IgY2xpZW50LWJ1aWxkIG1hbmlmZXN0LCB3ZSBtdXN0XG4gICAgICAgICAgICAvLyBkbyBhIHNlcnZlci1zaWRlIHRyYW5zaXRpb246XG4gICAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICAgICAgdXJsOiBhcyxcbiAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIGFza2VkIHRvIGNoYW5nZSB0aGUgY3VycmVudCBVUkwgd2Ugc2hvdWxkIHJlbG9hZCB0aGUgY3VycmVudCBwYWdlXG4gICAgICAgIC8vIChub3QgbG9jYXRpb24ucmVsb2FkKCkgYnV0IHJlbG9hZCBnZXRJbml0aWFsUHJvcHMgYW5kIG90aGVyIE5leHQuanMgc3R1ZmZzKVxuICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gc2V0IHRoZSBtZXRob2QgPSByZXBsYWNlU3RhdGUgYWx3YXlzXG4gICAgICAgIC8vIGFzIHRoaXMgc2hvdWxkIG5vdCBnbyBpbnRvIHRoZSBoaXN0b3J5IChUaGF0J3MgaG93IGJyb3dzZXJzIHdvcmspXG4gICAgICAgIC8vIFdlIHNob3VsZCBjb21wYXJlIHRoZSBuZXcgYXNQYXRoIHRvIHRoZSBjdXJyZW50IGFzUGF0aCwgbm90IHRoZSB1cmxcbiAgICAgICAgaWYgKCF0aGlzLnVybElzTmV3KGNsZWFuZWRBcykgJiYgIWxvY2FsZUNoYW5nZSkge1xuICAgICAgICAgICAgbWV0aG9kID0gXCJyZXBsYWNlU3RhdGVcIjtcbiAgICAgICAgfVxuICAgICAgICAvLyB3ZSBuZWVkIHRvIHJlc29sdmUgdGhlIGFzIHZhbHVlIHVzaW5nIHJld3JpdGVzIGZvciBkeW5hbWljIFNTR1xuICAgICAgICAvLyBwYWdlcyB0byBhbGxvdyBidWlsZGluZyB0aGUgZGF0YSBVUkwgY29ycmVjdGx5XG4gICAgICAgIGxldCByZXNvbHZlZEFzID0gYXM7XG4gICAgICAgIC8vIHVybCBhbmQgYXMgc2hvdWxkIGFsd2F5cyBiZSBwcmVmaXhlZCB3aXRoIGJhc2VQYXRoIGJ5IHRoaXNcbiAgICAgICAgLy8gcG9pbnQgYnkgZWl0aGVyIG5leHQvbGluayBvciByb3V0ZXIucHVzaC9yZXBsYWNlIHNvIHN0cmlwIHRoZVxuICAgICAgICAvLyBiYXNlUGF0aCBmcm9tIHRoZSBwYXRobmFtZSB0byBtYXRjaCB0aGUgcGFnZXMgZGlyIDEtdG8tMVxuICAgICAgICBwYXRobmFtZSA9IHBhdGhuYW1lID8gKDAsIF9yZW1vdmV0cmFpbGluZ3NsYXNoLnJlbW92ZVRyYWlsaW5nU2xhc2gpKCgwLCBfcmVtb3ZlYmFzZXBhdGgucmVtb3ZlQmFzZVBhdGgpKHBhdGhuYW1lKSkgOiBwYXRobmFtZTtcbiAgICAgICAgbGV0IHJvdXRlID0gKDAsIF9yZW1vdmV0cmFpbGluZ3NsYXNoLnJlbW92ZVRyYWlsaW5nU2xhc2gpKHBhdGhuYW1lKTtcbiAgICAgICAgY29uc3QgcGFyc2VkQXNQYXRobmFtZSA9IGFzLnN0YXJ0c1dpdGgoXCIvXCIpICYmICgwLCBfcGFyc2VyZWxhdGl2ZXVybC5wYXJzZVJlbGF0aXZlVXJsKShhcykucGF0aG5hbWU7XG4gICAgICAgIC8vIGlmIHdlIGRldGVjdGVkIHRoZSBwYXRoIGFzIGFwcCByb3V0ZSBkdXJpbmcgcHJlZmV0Y2hpbmdcbiAgICAgICAgLy8gdHJpZ2dlciBoYXJkIG5hdmlnYXRpb25cbiAgICAgICAgaWYgKChfdGhpc19jb21wb25lbnRzX3BhdGhuYW1lID0gdGhpcy5jb21wb25lbnRzW3BhdGhuYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGlzX2NvbXBvbmVudHNfcGF0aG5hbWUuX19hcHBSb3V0ZXIpIHtcbiAgICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgICAgICB1cmw6IGFzLFxuICAgICAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCk9Pnt9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc01pZGRsZXdhcmVSZXdyaXRlID0gISEocGFyc2VkQXNQYXRobmFtZSAmJiByb3V0ZSAhPT0gcGFyc2VkQXNQYXRobmFtZSAmJiAoISgwLCBfaXNkeW5hbWljLmlzRHluYW1pY1JvdXRlKShyb3V0ZSkgfHwgISgwLCBfcm91dGVtYXRjaGVyLmdldFJvdXRlTWF0Y2hlcikoKDAsIF9yb3V0ZXJlZ2V4LmdldFJvdXRlUmVnZXgpKHJvdXRlKSkocGFyc2VkQXNQYXRobmFtZSkpKTtcbiAgICAgICAgLy8gd2UgZG9uJ3QgYXR0ZW1wdCByZXNvbHZlIGFzUGF0aCB3aGVuIHdlIG5lZWQgdG8gZXhlY3V0ZVxuICAgICAgICAvLyBtaWRkbGV3YXJlIGFzIHRoZSByZXNvbHZpbmcgd2lsbCBvY2N1ciBzZXJ2ZXItc2lkZVxuICAgICAgICBjb25zdCBpc01pZGRsZXdhcmVNYXRjaCA9ICFvcHRpb25zLnNoYWxsb3cgJiYgYXdhaXQgbWF0Y2hlc01pZGRsZXdhcmUoe1xuICAgICAgICAgICAgYXNQYXRoOiBhcyxcbiAgICAgICAgICAgIGxvY2FsZTogbmV4dFN0YXRlLmxvY2FsZSxcbiAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzUXVlcnlVcGRhdGluZyAmJiBpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICAgICAgc2hvdWxkUmVzb2x2ZUhyZWYgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkUmVzb2x2ZUhyZWYgJiYgcGF0aG5hbWUgIT09IFwiL19lcnJvclwiKSB7XG4gICAgICAgICAgICBvcHRpb25zLl9zaG91bGRSZXNvbHZlSHJlZiA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0hBU19SRVdSSVRFUyAmJiBhcy5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJld3JpdGVzUmVzdWx0ID0gKDAsIF9yZXNvbHZlcmV3cml0ZXMuZGVmYXVsdCkoKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkoKDAsIF9hZGRsb2NhbGUuYWRkTG9jYWxlKShjbGVhbmVkQXMsIG5leHRTdGF0ZS5sb2NhbGUpLCB0cnVlKSwgcGFnZXMsIHJld3JpdGVzLCBxdWVyeSwgKHApPT5yZXNvbHZlRHluYW1pY1JvdXRlKHAsIHBhZ2VzKSwgdGhpcy5sb2NhbGVzKTtcbiAgICAgICAgICAgICAgICBpZiAocmV3cml0ZXNSZXN1bHQuZXh0ZXJuYWxEZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogYXMsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQXMgPSByZXdyaXRlc1Jlc3VsdC5hc1BhdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZXdyaXRlc1Jlc3VsdC5tYXRjaGVkUGFnZSAmJiByZXdyaXRlc1Jlc3VsdC5yZXNvbHZlZEhyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBkaXJlY3RseSBtYXRjaGVzIGEgcGFnZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgaHJlZiB0b1xuICAgICAgICAgICAgICAgICAgICAvLyBhbGxvdyB0aGUgY29ycmVjdCBwYWdlIGNodW5rIHRvIGJlIGxvYWRlZFxuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9IHJld3JpdGVzUmVzdWx0LnJlc29sdmVkSHJlZjtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkocGF0aG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSAoMCwgX2Zvcm1hdHVybC5mb3JtYXRXaXRoVmFsaWRhdGlvbikocGFyc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gcmVzb2x2ZUR5bmFtaWNSb3V0ZShwYXRobmFtZSwgcGFnZXMpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWQucGF0aG5hbWUgIT09IHBhdGhuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lID0gcGFyc2VkLnBhdGhuYW1lO1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQucGF0aG5hbWUgPSAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKShwYXRobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKShwYXJzZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghKDAsIF9pc2xvY2FsdXJsLmlzTG9jYWxVUkwpKGFzKSkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBocmVmOiBcIicgKyB1cmwgKyAnXCIgYW5kIGFzOiBcIicgKyBhcyArICdcIiwgcmVjZWl2ZWQgcmVsYXRpdmUgaHJlZiBhbmQgZXh0ZXJuYWwgYXMnICsgXCJcXG5TZWUgbW9yZSBpbmZvOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9pbnZhbGlkLXJlbGF0aXZlLXVybC1leHRlcm5hbC1hc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgICAgICB1cmw6IGFzLFxuICAgICAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZWRBcyA9ICgwLCBfcmVtb3ZlbG9jYWxlLnJlbW92ZUxvY2FsZSkoKDAsIF9yZW1vdmViYXNlcGF0aC5yZW1vdmVCYXNlUGF0aCkocmVzb2x2ZWRBcyksIG5leHRTdGF0ZS5sb2NhbGUpO1xuICAgICAgICByb3V0ZSA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShwYXRobmFtZSk7XG4gICAgICAgIGxldCByb3V0ZU1hdGNoID0gZmFsc2U7XG4gICAgICAgIGlmICgoMCwgX2lzZHluYW1pYy5pc0R5bmFtaWNSb3V0ZSkocm91dGUpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRBcyA9ICgwLCBfcGFyc2VyZWxhdGl2ZXVybC5wYXJzZVJlbGF0aXZlVXJsKShyZXNvbHZlZEFzKTtcbiAgICAgICAgICAgIGNvbnN0IGFzUGF0aG5hbWUgPSBwYXJzZWRBcy5wYXRobmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlUmVnZXggPSAoMCwgX3JvdXRlcmVnZXguZ2V0Um91dGVSZWdleCkocm91dGUpO1xuICAgICAgICAgICAgcm91dGVNYXRjaCA9ICgwLCBfcm91dGVtYXRjaGVyLmdldFJvdXRlTWF0Y2hlcikocm91dGVSZWdleCkoYXNQYXRobmFtZSk7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRJbnRlcnBvbGF0ZSA9IHJvdXRlID09PSBhc1BhdGhuYW1lO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkQXMgPSBzaG91bGRJbnRlcnBvbGF0ZSA/ICgwLCBfaW50ZXJwb2xhdGVhcy5pbnRlcnBvbGF0ZUFzKShyb3V0ZSwgYXNQYXRobmFtZSwgcXVlcnkpIDoge307XG4gICAgICAgICAgICBpZiAoIXJvdXRlTWF0Y2ggfHwgc2hvdWxkSW50ZXJwb2xhdGUgJiYgIWludGVycG9sYXRlZEFzLnJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pc3NpbmdQYXJhbXMgPSBPYmplY3Qua2V5cyhyb3V0ZVJlZ2V4Lmdyb3VwcykuZmlsdGVyKChwYXJhbSk9PiFxdWVyeVtwYXJhbV0gJiYgIXJvdXRlUmVnZXguZ3JvdXBzW3BhcmFtXS5vcHRpb25hbCk7XG4gICAgICAgICAgICAgICAgaWYgKG1pc3NpbmdQYXJhbXMubGVuZ3RoID4gMCAmJiAhaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFwiXCIgKyAoc2hvdWxkSW50ZXJwb2xhdGUgPyBcIkludGVycG9sYXRpbmcgaHJlZlwiIDogXCJNaXNtYXRjaGluZyBgYXNgIGFuZCBgaHJlZmBcIikgKyBcIiBmYWlsZWQgdG8gbWFudWFsbHkgcHJvdmlkZSBcIiArIChcInRoZSBwYXJhbXM6IFwiICsgbWlzc2luZ1BhcmFtcy5qb2luKFwiLCBcIikgKyBcIiBpbiB0aGUgYGhyZWZgJ3MgYHF1ZXJ5YFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKChzaG91bGRJbnRlcnBvbGF0ZSA/IFwiVGhlIHByb3ZpZGVkIGBocmVmYCAoXCIgKyB1cmwgKyBcIikgdmFsdWUgaXMgbWlzc2luZyBxdWVyeSB2YWx1ZXMgKFwiICsgbWlzc2luZ1BhcmFtcy5qb2luKFwiLCBcIikgKyBcIikgdG8gYmUgaW50ZXJwb2xhdGVkIHByb3Blcmx5LiBcIiA6IFwiVGhlIHByb3ZpZGVkIGBhc2AgdmFsdWUgKFwiICsgYXNQYXRobmFtZSArIFwiKSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYGhyZWZgIHZhbHVlIChcIiArIHJvdXRlICsgXCIpLiBcIikgKyAoXCJSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL1wiICsgKHNob3VsZEludGVycG9sYXRlID8gXCJocmVmLWludGVycG9sYXRpb24tZmFpbGVkXCIgOiBcImluY29tcGF0aWJsZS1ocmVmLWFzXCIpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRJbnRlcnBvbGF0ZSkge1xuICAgICAgICAgICAgICAgIGFzID0gKDAsIF9mb3JtYXR1cmwuZm9ybWF0V2l0aFZhbGlkYXRpb24pKE9iamVjdC5hc3NpZ24oe30sIHBhcnNlZEFzLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lOiBpbnRlcnBvbGF0ZWRBcy5yZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiAoMCwgX29taXQub21pdCkocXVlcnksIGludGVycG9sYXRlZEFzLnBhcmFtcylcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1lcmdlIHBhcmFtcyBpbnRvIGBxdWVyeWAsIG92ZXJ3cml0aW5nIGFueSBzcGVjaWZpZWQgaW4gc2VhcmNoXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihxdWVyeSwgcm91dGVNYXRjaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgICAgICAgIFJvdXRlci5ldmVudHMuZW1pdChcInJvdXRlQ2hhbmdlU3RhcnRcIiwgYXMsIHJvdXRlUHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzRXJyb3JSb3V0ZSA9IHRoaXMucGF0aG5hbWUgPT09IFwiLzQwNFwiIHx8IHRoaXMucGF0aG5hbWUgPT09IFwiL19lcnJvclwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIF9zZWxmX19fTkVYVF9EQVRBX19fcHJvcHNfcGFnZVByb3BzLCBfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzLCBfcm91dGVJbmZvX3Byb3BzO1xuICAgICAgICAgICAgbGV0IHJvdXRlSW5mbyA9IGF3YWl0IHRoaXMuZ2V0Um91dGVJbmZvKHtcbiAgICAgICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICBhcyxcbiAgICAgICAgICAgICAgICByZXNvbHZlZEFzLFxuICAgICAgICAgICAgICAgIHJvdXRlUHJvcHMsXG4gICAgICAgICAgICAgICAgbG9jYWxlOiBuZXh0U3RhdGUubG9jYWxlLFxuICAgICAgICAgICAgICAgIGlzUHJldmlldzogbmV4dFN0YXRlLmlzUHJldmlldyxcbiAgICAgICAgICAgICAgICBoYXNNaWRkbGV3YXJlOiBpc01pZGRsZXdhcmVNYXRjaCxcbiAgICAgICAgICAgICAgICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGU6IG9wdGlvbnMudW5zdGFibGVfc2tpcENsaWVudENhY2hlLFxuICAgICAgICAgICAgICAgIGlzUXVlcnlVcGRhdGluZzogaXNRdWVyeVVwZGF0aW5nICYmICF0aGlzLmlzRmFsbGJhY2ssXG4gICAgICAgICAgICAgICAgaXNNaWRkbGV3YXJlUmV3cml0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzUXVlcnlVcGRhdGluZyAmJiAhb3B0aW9ucy5zaGFsbG93KSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fYmZsKGFzLCBcInJlc29sdmVkQXNcIiBpbiByb3V0ZUluZm8gPyByb3V0ZUluZm8ucmVzb2x2ZWRBcyA6IHVuZGVmaW5lZCwgbmV4dFN0YXRlLmxvY2FsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXCJyb3V0ZVwiIGluIHJvdXRlSW5mbyAmJiBpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICAgICAgICAgIHBhdGhuYW1lID0gcm91dGVJbmZvLnJvdXRlIHx8IHJvdXRlO1xuICAgICAgICAgICAgICAgIHJvdXRlID0gcGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKCFyb3V0ZVByb3BzLnNoYWxsb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZUluZm8ucXVlcnkgfHwge30sIHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYW5lZFBhcnNlZFBhdGhuYW1lID0gKDAsIF9oYXNiYXNlcGF0aC5oYXNCYXNlUGF0aCkocGFyc2VkLnBhdGhuYW1lKSA/ICgwLCBfcmVtb3ZlYmFzZXBhdGgucmVtb3ZlQmFzZVBhdGgpKHBhcnNlZC5wYXRobmFtZSkgOiBwYXJzZWQucGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKHJvdXRlTWF0Y2ggJiYgcGF0aG5hbWUgIT09IGNsZWFuZWRQYXJzZWRQYXRobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhyb3V0ZU1hdGNoKS5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVNYXRjaCAmJiBxdWVyeVtrZXldID09PSByb3V0ZU1hdGNoW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVlcnlba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgoMCwgX2lzZHluYW1pYy5pc0R5bmFtaWNSb3V0ZSkocGF0aG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeGVkQXMgPSAhcm91dGVQcm9wcy5zaGFsbG93ICYmIHJvdXRlSW5mby5yZXNvbHZlZEFzID8gcm91dGVJbmZvLnJlc29sdmVkQXMgOiAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKSgoMCwgX2FkZGxvY2FsZS5hZGRMb2NhbGUpKG5ldyBVUkwoYXMsIGxvY2F0aW9uLmhyZWYpLnBhdGhuYW1lLCBuZXh0U3RhdGUubG9jYWxlKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXdyaXRlQXMgPSBwcmVmaXhlZEFzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9oYXNiYXNlcGF0aC5oYXNCYXNlUGF0aCkocmV3cml0ZUFzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV3cml0ZUFzID0gKDAsIF9yZW1vdmViYXNlcGF0aC5yZW1vdmVCYXNlUGF0aCkocmV3cml0ZUFzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYWxlUmVzdWx0ID0gKDAsIF9ub3JtYWxpemVsb2NhbGVwYXRoLm5vcm1hbGl6ZUxvY2FsZVBhdGgpKHJld3JpdGVBcywgdGhpcy5sb2NhbGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5sb2NhbGUgPSBsb2NhbGVSZXN1bHQuZGV0ZWN0ZWRMb2NhbGUgfHwgbmV4dFN0YXRlLmxvY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJld3JpdGVBcyA9IGxvY2FsZVJlc3VsdC5wYXRobmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3V0ZVJlZ2V4ID0gKDAsIF9yb3V0ZXJlZ2V4LmdldFJvdXRlUmVnZXgpKHBhdGhuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyUm91dGVNYXRjaCA9ICgwLCBfcm91dGVtYXRjaGVyLmdldFJvdXRlTWF0Y2hlcikocm91dGVSZWdleCkobmV3IFVSTChyZXdyaXRlQXMsIGxvY2F0aW9uLmhyZWYpLnBhdGhuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1clJvdXRlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocXVlcnksIGN1clJvdXRlTWF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIHJvdXRlSW5mbyBicmluZ3MgYSByZWRpcmVjdCB3ZSBzaW1wbHkgYXBwbHkgaXQuXG4gICAgICAgICAgICBpZiAoXCJ0eXBlXCIgaW4gcm91dGVJbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdXRlSW5mby50eXBlID09PSBcInJlZGlyZWN0LWludGVybmFsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hhbmdlKG1ldGhvZCwgcm91dGVJbmZvLm5ld1VybCwgcm91dGVJbmZvLm5ld0FzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHJvdXRlSW5mby5kZXN0aW5hdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpPT57fSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gcm91dGVJbmZvLkNvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LnVuc3RhYmxlX3NjcmlwdExvYWRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcmlwdHMgPSBbXS5jb25jYXQoY29tcG9uZW50LnVuc3RhYmxlX3NjcmlwdExvYWRlcigpKTtcbiAgICAgICAgICAgICAgICBzY3JpcHRzLmZvckVhY2goKHNjcmlwdCk9PntcbiAgICAgICAgICAgICAgICAgICAgKDAsIF9zY3JpcHQuaGFuZGxlQ2xpZW50U2NyaXB0TG9hZCkoc2NyaXB0LnByb3BzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhbmRsZSByZWRpcmVjdCBvbiBjbGllbnQtdHJhbnNpdGlvblxuICAgICAgICAgICAgaWYgKChyb3V0ZUluZm8uX19OX1NTRyB8fCByb3V0ZUluZm8uX19OX1NTUCkgJiYgcm91dGVJbmZvLnByb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMgJiYgcm91dGVJbmZvLnByb3BzLnBhZ2VQcm9wcy5fX05fUkVESVJFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBkZXN0aW5hdGlvbiBmcm9tIHJlZGlyZWN0IHdpdGhvdXQgYWRkaW5nIGxvY2FsZVxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmxvY2FsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMuX19OX1JFRElSRUNUO1xuICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBkZXN0aW5hdGlvbiBpcyBpbnRlcm5hbCAocmVzb2x2ZXMgdG8gYSBwYWdlKSBhbmQgYXR0ZW1wdFxuICAgICAgICAgICAgICAgICAgICAvLyBjbGllbnQtbmF2aWdhdGlvbiBpZiBpdCBpcyBmYWxsaW5nIGJhY2sgdG8gaGFyZCBuYXZpZ2F0aW9uIGlmXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0aW5hdGlvbi5zdGFydHNXaXRoKFwiL1wiKSAmJiByb3V0ZUluZm8ucHJvcHMucGFnZVByb3BzLl9fTl9SRURJUkVDVF9CQVNFX1BBVEggIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRIcmVmID0gKDAsIF9wYXJzZXJlbGF0aXZldXJsLnBhcnNlUmVsYXRpdmVVcmwpKGRlc3RpbmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZEhyZWYucGF0aG5hbWUgPSByZXNvbHZlRHluYW1pY1JvdXRlKHBhcnNlZEhyZWYucGF0aG5hbWUsIHBhZ2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdXJsOiBuZXdVcmwsIGFzOiBuZXdBcyB9ID0gcHJlcGFyZVVybEFzKHRoaXMsIGRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaGFuZ2UobWV0aG9kLCBuZXdVcmwsIG5ld0FzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCk9Pnt9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV4dFN0YXRlLmlzUHJldmlldyA9ICEhcm91dGVJbmZvLnByb3BzLl9fTl9QUkVWSUVXO1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBTU0cgZGF0YSA0MDRcbiAgICAgICAgICAgICAgICBpZiAocm91dGVJbmZvLnByb3BzLm5vdEZvdW5kID09PSBTU0dfREFUQV9OT1RfRk9VTkQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5vdEZvdW5kUm91dGU7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmZldGNoQ29tcG9uZW50KFwiLzQwNFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdEZvdW5kUm91dGUgPSBcIi80MDRcIjtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm90Rm91bmRSb3V0ZSA9IFwiL19lcnJvclwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlSW5mbyA9IGF3YWl0IHRoaXMuZ2V0Um91dGVJbmZvKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOiBub3RGb3VuZFJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWU6IG5vdEZvdW5kUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRBcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFsbG93OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogbmV4dFN0YXRlLmxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJldmlldzogbmV4dFN0YXRlLmlzUHJldmlldyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm90Rm91bmQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcInR5cGVcIiBpbiByb3V0ZUluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgbWlkZGxld2FyZSBlZmZlY3Qgb24gLzQwNFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1F1ZXJ5VXBkYXRpbmcgJiYgdGhpcy5wYXRobmFtZSA9PT0gXCIvX2Vycm9yXCIgJiYgKChfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzID0gc2VsZi5fX05FWFRfREFUQV9fLnByb3BzKSA9PSBudWxsID8gdm9pZCAwIDogKF9zZWxmX19fTkVYVF9EQVRBX19fcHJvcHNfcGFnZVByb3BzID0gX3NlbGZfX19ORVhUX0RBVEFfX19wcm9wcy5wYWdlUHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzX3BhZ2VQcm9wcy5zdGF0dXNDb2RlKSA9PT0gNTAwICYmICgoX3JvdXRlSW5mb19wcm9wcyA9IHJvdXRlSW5mby5wcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb3V0ZUluZm9fcHJvcHMucGFnZVByb3BzKSkge1xuICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBzdGF0dXNDb2RlIGlzIHN0aWxsIGNvcnJlY3QgZm9yIHN0YXRpYyA1MDAgcGFnZVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdXBkYXRpbmcgcXVlcnkgaW5mb3JtYXRpb25cbiAgICAgICAgICAgICAgICByb3V0ZUluZm8ucHJvcHMucGFnZVByb3BzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX3JvdXRlSW5mb19yb3V0ZTtcbiAgICAgICAgICAgIC8vIHNoYWxsb3cgcm91dGluZyBpcyBvbmx5IGFsbG93ZWQgZm9yIHNhbWUgcGFnZSBVUkwgY2hhbmdlcy5cbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWRTaGFsbG93Um91dGUgPSBvcHRpb25zLnNoYWxsb3cgJiYgbmV4dFN0YXRlLnJvdXRlID09PSAoKF9yb3V0ZUluZm9fcm91dGUgPSByb3V0ZUluZm8ucm91dGUpICE9IG51bGwgPyBfcm91dGVJbmZvX3JvdXRlIDogcm91dGUpO1xuICAgICAgICAgICAgdmFyIF9vcHRpb25zX3Njcm9sbDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbCA9IChfb3B0aW9uc19zY3JvbGwgPSBvcHRpb25zLnNjcm9sbCkgIT0gbnVsbCA/IF9vcHRpb25zX3Njcm9sbCA6ICFpc1F1ZXJ5VXBkYXRpbmcgJiYgIWlzVmFsaWRTaGFsbG93Um91dGU7XG4gICAgICAgICAgICBjb25zdCByZXNldFNjcm9sbCA9IHNob3VsZFNjcm9sbCA/IHtcbiAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgIH0gOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgdXBjb21pbmdTY3JvbGxTdGF0ZSA9IGZvcmNlZFNjcm9sbCAhPSBudWxsID8gZm9yY2VkU2Nyb2xsIDogcmVzZXRTY3JvbGw7XG4gICAgICAgICAgICAvLyB0aGUgbmV3IHN0YXRlIHRoYXQgdGhlIHJvdXRlciBnb25uYSBzZXRcbiAgICAgICAgICAgIGNvbnN0IHVwY29taW5nUm91dGVyU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgICAgICAgIHBhdGhuYW1lLFxuICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgIGFzUGF0aDogY2xlYW5lZEFzLFxuICAgICAgICAgICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gV2hlbiB0aGUgcGFnZSBiZWluZyByZW5kZXJlZCBpcyB0aGUgNDA0IHBhZ2UsIHdlIHNob3VsZCBvbmx5IHVwZGF0ZSB0aGVcbiAgICAgICAgICAgIC8vIHF1ZXJ5IHBhcmFtZXRlcnMuIFJvdXRlIGNoYW5nZXMgaGVyZSBtaWdodCBhZGQgdGhlIGJhc2VQYXRoIHdoZW4gaXRcbiAgICAgICAgICAgIC8vIHdhc24ndCBvcmlnaW5hbGx5IHByZXNlbnQuIFRoaXMgaXMgYWxzbyB3aHkgdGhpcyBibG9jayBpcyBiZWZvcmUgdGhlXG4gICAgICAgICAgICAvLyBiZWxvdyBgY2hhbmdlU3RhdGVgIGNhbGwgd2hpY2ggdXBkYXRlcyB0aGUgYnJvd3NlcidzIGhpc3RvcnkgKGNoYW5naW5nXG4gICAgICAgICAgICAvLyB0aGUgVVJMKS5cbiAgICAgICAgICAgIGlmIChpc1F1ZXJ5VXBkYXRpbmcgJiYgaXNFcnJvclJvdXRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9zZWxmX19fTkVYVF9EQVRBX19fcHJvcHNfcGFnZVByb3BzMSwgX3NlbGZfX19ORVhUX0RBVEFfX19wcm9wczEsIF9yb3V0ZUluZm9fcHJvcHMxO1xuICAgICAgICAgICAgICAgIHJvdXRlSW5mbyA9IGF3YWl0IHRoaXMuZ2V0Um91dGVJbmZvKHtcbiAgICAgICAgICAgICAgICAgICAgcm91dGU6IHRoaXMucGF0aG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lOiB0aGlzLnBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgYXMsXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQXMsXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWxsb3c6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZTogbmV4dFN0YXRlLmxvY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgaXNQcmV2aWV3OiBuZXh0U3RhdGUuaXNQcmV2aWV3LFxuICAgICAgICAgICAgICAgICAgICBpc1F1ZXJ5VXBkYXRpbmc6IGlzUXVlcnlVcGRhdGluZyAmJiAhdGhpcy5pc0ZhbGxiYWNrXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKFwidHlwZVwiIGluIHJvdXRlSW5mbykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIG1pZGRsZXdhcmUgZWZmZWN0IG9uIFwiICsgdGhpcy5wYXRobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhdGhuYW1lID09PSBcIi9fZXJyb3JcIiAmJiAoKF9zZWxmX19fTkVYVF9EQVRBX19fcHJvcHMxID0gc2VsZi5fX05FWFRfREFUQV9fLnByb3BzKSA9PSBudWxsID8gdm9pZCAwIDogKF9zZWxmX19fTkVYVF9EQVRBX19fcHJvcHNfcGFnZVByb3BzMSA9IF9zZWxmX19fTkVYVF9EQVRBX19fcHJvcHMxLnBhZ2VQcm9wcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9zZWxmX19fTkVYVF9EQVRBX19fcHJvcHNfcGFnZVByb3BzMS5zdGF0dXNDb2RlKSA9PT0gNTAwICYmICgoX3JvdXRlSW5mb19wcm9wczEgPSByb3V0ZUluZm8ucHJvcHMpID09IG51bGwgPyB2b2lkIDAgOiBfcm91dGVJbmZvX3Byb3BzMS5wYWdlUHJvcHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyZSBzdGF0dXNDb2RlIGlzIHN0aWxsIGNvcnJlY3QgZm9yIHN0YXRpYyA1MDAgcGFnZVxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHVwZGF0aW5nIHF1ZXJ5IGluZm9ybWF0aW9uXG4gICAgICAgICAgICAgICAgICAgIHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMuc3RhdHVzQ29kZSA9IDUwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXQodXBjb21pbmdSb3V0ZXJTdGF0ZSwgcm91dGVJbmZvLCB1cGNvbWluZ1Njcm9sbFN0YXRlKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfaXNlcnJvci5kZWZhdWx0KShlcnIpICYmIGVyci5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJvdXRlci5ldmVudHMuZW1pdChcInJvdXRlQ2hhbmdlRXJyb3JcIiwgZXJyLCBjbGVhbmVkQXMsIHJvdXRlUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoXCJiZWZvcmVIaXN0b3J5Q2hhbmdlXCIsIGFzLCByb3V0ZVByb3BzKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUobWV0aG9kLCB1cmwsIGFzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIC8vIGZvciBxdWVyeSB1cGRhdGVzIHdlIGNhbiBza2lwIGl0IGlmIHRoZSBzdGF0ZSBpcyB1bmNoYW5nZWQgYW5kIHdlIGRvbid0XG4gICAgICAgICAgICAvLyBuZWVkIHRvIHNjcm9sbFxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2lzc3Vlcy8zNzEzOVxuICAgICAgICAgICAgY29uc3QgY2FuU2tpcFVwZGF0aW5nID0gaXNRdWVyeVVwZGF0aW5nICYmICF1cGNvbWluZ1Njcm9sbFN0YXRlICYmICFyZWFkeVN0YXRlQ2hhbmdlICYmICFsb2NhbGVDaGFuZ2UgJiYgKDAsIF9jb21wYXJlc3RhdGVzLmNvbXBhcmVSb3V0ZXJTdGF0ZXMpKHVwY29taW5nUm91dGVyU3RhdGUsIHRoaXMuc3RhdGUpO1xuICAgICAgICAgICAgaWYgKCFjYW5Ta2lwVXBkYXRpbmcpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNldCh1cGNvbWluZ1JvdXRlclN0YXRlLCByb3V0ZUluZm8sIHVwY29taW5nU2Nyb2xsU3RhdGUpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuY2FuY2VsbGVkKSByb3V0ZUluZm8uZXJyb3IgPSByb3V0ZUluZm8uZXJyb3IgfHwgZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocm91dGVJbmZvLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNRdWVyeVVwZGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoXCJyb3V0ZUNoYW5nZUVycm9yXCIsIHJvdXRlSW5mby5lcnJvciwgY2xlYW5lZEFzLCByb3V0ZVByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyByb3V0ZUluZm8uZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0U3RhdGUubG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZyA9IG5leHRTdGF0ZS5sb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KFwicm91dGVDaGFuZ2VDb21wbGV0ZVwiLCBhcywgcm91dGVQcm9wcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEEgaGFzaCBtYXJrICMgaXMgdGhlIG9wdGlvbmFsIGxhc3QgcGFydCBvZiBhIFVSTFxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hSZWdleCA9IC8jLiskLztcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsICYmIGhhc2hSZWdleC50ZXN0KGFzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvSGFzaChhcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKCgwLCBfaXNlcnJvci5kZWZhdWx0KShlcnIpICYmIGVyci5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hhbmdlU3RhdGUobWV0aG9kLCB1cmwsIGFzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuaGlzdG9yeSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYXJuaW5nOiB3aW5kb3cuaGlzdG9yeSBpcyBub3QgYXZhaWxhYmxlLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5oaXN0b3J5W21ldGhvZF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FybmluZzogd2luZG93Lmhpc3RvcnkuXCIgKyBtZXRob2QgKyBcIiBpcyBub3QgYXZhaWxhYmxlXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0aG9kICE9PSBcInB1c2hTdGF0ZVwiIHx8ICgwLCBfdXRpbHMuZ2V0VVJMKSgpICE9PSBhcykge1xuICAgICAgICAgICAgdGhpcy5fc2hhbGxvdyA9IG9wdGlvbnMuc2hhbGxvdztcbiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5W21ldGhvZF0oe1xuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBhcyxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgIF9fTjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBrZXk6IHRoaXMuX2tleSA9IG1ldGhvZCAhPT0gXCJwdXNoU3RhdGVcIiA/IHRoaXMuX2tleSA6IGNyZWF0ZUtleSgpXG4gICAgICAgICAgICB9LCAvLyBNb3N0IGJyb3dzZXJzIGN1cnJlbnRseSBpZ25vcmVzIHRoaXMgcGFyYW1ldGVyLCBhbHRob3VnaCB0aGV5IG1heSB1c2UgaXQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgICAgICAgIC8vIFBhc3NpbmcgdGhlIGVtcHR5IHN0cmluZyBoZXJlIHNob3VsZCBiZSBzYWZlIGFnYWluc3QgZnV0dXJlIGNoYW5nZXMgdG8gdGhlIG1ldGhvZC5cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9IaXN0b3J5L3JlcGxhY2VTdGF0ZVxuICAgICAgICAgICAgXCJcIiwgYXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZVJvdXRlSW5mb0Vycm9yKGVyciwgcGF0aG5hbWUsIHF1ZXJ5LCBhcywgcm91dGVQcm9wcywgbG9hZEVycm9yRmFpbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIGlmIChlcnIuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAvLyBidWJibGUgdXAgY2FuY2VsbGF0aW9uIGVycm9yc1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoMCwgX3JvdXRlbG9hZGVyLmlzQXNzZXRFcnJvcikoZXJyKSB8fCBsb2FkRXJyb3JGYWlsKSB7XG4gICAgICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoXCJyb3V0ZUNoYW5nZUVycm9yXCIsIGVyciwgYXMsIHJvdXRlUHJvcHMpO1xuICAgICAgICAgICAgLy8gSWYgd2UgY2FuJ3QgbG9hZCB0aGUgcGFnZSBpdCBjb3VsZCBiZSBvbmUgb2YgZm9sbG93aW5nIHJlYXNvbnNcbiAgICAgICAgICAgIC8vICAxLiBQYWdlIGRvZXNuJ3QgZXhpc3RzXG4gICAgICAgICAgICAvLyAgMi4gUGFnZSBkb2VzIGV4aXN0IGluIGEgZGlmZmVyZW50IHpvbmVcbiAgICAgICAgICAgIC8vICAzLiBJbnRlcm5hbCBlcnJvciB3aGlsZSBsb2FkaW5nIHRoZSBwYWdlXG4gICAgICAgICAgICAvLyBTbywgZG9pbmcgYSBoYXJkIHJlbG9hZCBpcyB0aGUgcHJvcGVyIHdheSB0byBkZWFsIHdpdGggdGhpcy5cbiAgICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgICAgICB1cmw6IGFzLFxuICAgICAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDaGFuZ2luZyB0aGUgVVJMIGRvZXNuJ3QgYmxvY2sgZXhlY3V0aW5nIHRoZSBjdXJyZW50IGNvZGUgcGF0aC5cbiAgICAgICAgICAgIC8vIFNvIGxldCdzIHRocm93IGEgY2FuY2VsbGF0aW9uIGVycm9yIHN0b3AgdGhlIHJvdXRpbmcgbG9naWMuXG4gICAgICAgICAgICB0aHJvdyBidWlsZENhbmNlbGxhdGlvbkVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBwcm9wcztcbiAgICAgICAgICAgIGNvbnN0IHsgcGFnZTogQ29tcG9uZW50LCBzdHlsZVNoZWV0cyB9ID0gYXdhaXQgdGhpcy5mZXRjaENvbXBvbmVudChcIi9fZXJyb3JcIik7XG4gICAgICAgICAgICBjb25zdCByb3V0ZUluZm8gPSB7XG4gICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRzLFxuICAgICAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCFyb3V0ZUluZm8ucHJvcHMpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByb3V0ZUluZm8ucHJvcHMgPSBhd2FpdCB0aGlzLmdldEluaXRpYWxQcm9wcyhDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZ2lwRXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBpbiBlcnJvciBwYWdlIGBnZXRJbml0aWFsUHJvcHNgOiBcIiwgZ2lwRXJyKTtcbiAgICAgICAgICAgICAgICAgICAgcm91dGVJbmZvLnByb3BzID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJvdXRlSW5mbztcbiAgICAgICAgfSBjYXRjaCAocm91dGVJbmZvRXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVSb3V0ZUluZm9FcnJvcigoMCwgX2lzZXJyb3IuZGVmYXVsdCkocm91dGVJbmZvRXJyKSA/IHJvdXRlSW5mb0VyciA6IG5ldyBFcnJvcihyb3V0ZUluZm9FcnIgKyBcIlwiKSwgcGF0aG5hbWUsIHF1ZXJ5LCBhcywgcm91dGVQcm9wcywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZ2V0Um91dGVJbmZvKHBhcmFtKSB7XG4gICAgICAgIGxldCB7IHJvdXRlOiByZXF1ZXN0ZWRSb3V0ZSwgcGF0aG5hbWUsIHF1ZXJ5LCBhcywgcmVzb2x2ZWRBcywgcm91dGVQcm9wcywgbG9jYWxlLCBoYXNNaWRkbGV3YXJlLCBpc1ByZXZpZXcsIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSwgaXNRdWVyeVVwZGF0aW5nLCBpc01pZGRsZXdhcmVSZXdyaXRlLCBpc05vdEZvdW5kIH0gPSBwYXJhbTtcbiAgICAgICAgLyoqXG4gICAgICogVGhpcyBgcm91dGVgIGJpbmRpbmcgY2FuIGNoYW5nZSBpZiB0aGVyZSdzIGEgcmV3cml0ZVxuICAgICAqIHNvIHdlIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCByb3V0ZVxuICAgICAqIHNvIHdlIGNhbiBzdG9yZSB0aGUgY2FjaGUgZm9yIGl0IGFuZCBhdm9pZCByZS1yZXF1ZXN0aW5nIGV2ZXJ5IHRpbWVcbiAgICAgKiBmb3Igc2hhbGxvdyByb3V0aW5nIHB1cnBvc2VzLlxuICAgICAqLyBsZXQgcm91dGUgPSByZXF1ZXN0ZWRSb3V0ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBfZGF0YV9lZmZlY3QsIF9kYXRhX2VmZmVjdDEsIF9kYXRhX2VmZmVjdDIsIF9kYXRhX3Jlc3BvbnNlO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlQ2FuY2VsbGVkID0gZ2V0Q2FuY2VsbGVkSGFuZGxlcih7XG4gICAgICAgICAgICAgICAgcm91dGUsXG4gICAgICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCBleGlzdGluZ0luZm8gPSB0aGlzLmNvbXBvbmVudHNbcm91dGVdO1xuICAgICAgICAgICAgaWYgKHJvdXRlUHJvcHMuc2hhbGxvdyAmJiBleGlzdGluZ0luZm8gJiYgdGhpcy5yb3V0ZSA9PT0gcm91dGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdJbmZvO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc01pZGRsZXdhcmUpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ0luZm8gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgY2FjaGVkUm91dGVJbmZvID0gZXhpc3RpbmdJbmZvICYmICEoXCJpbml0aWFsXCIgaW4gZXhpc3RpbmdJbmZvKSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJkZXZlbG9wbWVudFwiID8gZXhpc3RpbmdJbmZvIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaXNCYWNrZ3JvdW5kID0gaXNRdWVyeVVwZGF0aW5nO1xuICAgICAgICAgICAgY29uc3QgZmV0Y2hOZXh0RGF0YVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBkYXRhSHJlZjogdGhpcy5wYWdlTG9hZGVyLmdldERhdGFIcmVmKHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogKDAsIF9mb3JtYXR1cmwuZm9ybWF0V2l0aFZhbGlkYXRpb24pKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHNraXBJbnRlcnBvbGF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBhc1BhdGg6IGlzTm90Rm91bmQgPyBcIi80MDRcIiA6IHJlc29sdmVkQXMsXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGhhc01pZGRsZXdhcmU6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNTZXJ2ZXJSZW5kZXI6IHRoaXMuaXNTc3IsXG4gICAgICAgICAgICAgICAgcGFyc2VKU09OOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluZmxpZ2h0Q2FjaGU6IGlzQmFja2dyb3VuZCA/IHRoaXMuc2JjIDogdGhpcy5zZGMsXG4gICAgICAgICAgICAgICAgcGVyc2lzdENhY2hlOiAhaXNQcmV2aWV3LFxuICAgICAgICAgICAgICAgIGlzUHJlZmV0Y2g6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSxcbiAgICAgICAgICAgICAgICBpc0JhY2tncm91bmRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGlzUXVlcnlVcGRhdGluZyAmJiAhaXNNaWRkbGV3YXJlUmV3cml0ZSA/IG51bGwgOiBhd2FpdCB3aXRoTWlkZGxld2FyZUVmZmVjdHMoe1xuICAgICAgICAgICAgICAgIGZldGNoRGF0YTogKCk9PmZldGNoTmV4dERhdGEoZmV0Y2hOZXh0RGF0YVBhcmFtcyksXG4gICAgICAgICAgICAgICAgYXNQYXRoOiBpc05vdEZvdW5kID8gXCIvNDA0XCIgOiByZXNvbHZlZEFzLFxuICAgICAgICAgICAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgICAgICAgICAgIHJvdXRlcjogdGhpc1xuICAgICAgICAgICAgfSkuY2F0Y2goKGVycik9PntcbiAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXJkIGVycm9yIGR1cmluZyBxdWVyeSB1cGRhdGluZ1xuICAgICAgICAgICAgICAgIC8vIGFzIGl0J3MgdW4tbmVjZXNzYXJ5IGFuZCBkb2Vzbid0IG5lZWQgdG8gYmUgZmF0YWxcbiAgICAgICAgICAgICAgICAvLyB1bmxlc3MgaXQgaXMgYSBmYWxsYmFjayByb3V0ZSBhbmQgdGhlIHByb3BzIGNhbid0XG4gICAgICAgICAgICAgICAgLy8gYmUgbG9hZGVkXG4gICAgICAgICAgICAgICAgaWYgKGlzUXVlcnlVcGRhdGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyB3aGVuIHJlbmRlcmluZyBlcnJvciByb3V0ZXMgd2UgZG9uJ3QgYXBwbHkgbWlkZGxld2FyZVxuICAgICAgICAgICAgLy8gZWZmZWN0c1xuICAgICAgICAgICAgaWYgKGRhdGEgJiYgKHBhdGhuYW1lID09PSBcIi9fZXJyb3JcIiB8fCBwYXRobmFtZSA9PT0gXCIvNDA0XCIpKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5lZmZlY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNRdWVyeVVwZGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uOiBzZWxmLl9fTkVYVF9EQVRBX18ucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmpzb24gPSBzZWxmLl9fTkVYVF9EQVRBX18ucHJvcHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFuZGxlQ2FuY2VsbGVkKCk7XG4gICAgICAgICAgICBpZiAoKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IChfZGF0YV9lZmZlY3QgPSBkYXRhLmVmZmVjdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kYXRhX2VmZmVjdC50eXBlKSA9PT0gXCJyZWRpcmVjdC1pbnRlcm5hbFwiIHx8IChkYXRhID09IG51bGwgPyB2b2lkIDAgOiAoX2RhdGFfZWZmZWN0MSA9IGRhdGEuZWZmZWN0KSA9PSBudWxsID8gdm9pZCAwIDogX2RhdGFfZWZmZWN0MS50eXBlKSA9PT0gXCJyZWRpcmVjdC1leHRlcm5hbFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuZWZmZWN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChkYXRhID09IG51bGwgPyB2b2lkIDAgOiAoX2RhdGFfZWZmZWN0MiA9IGRhdGEuZWZmZWN0KSA9PSBudWxsID8gdm9pZCAwIDogX2RhdGFfZWZmZWN0Mi50eXBlKSA9PT0gXCJyZXdyaXRlXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFJvdXRlID0gKDAsIF9yZW1vdmV0cmFpbGluZ3NsYXNoLnJlbW92ZVRyYWlsaW5nU2xhc2gpKGRhdGEuZWZmZWN0LnJlc29sdmVkSHJlZik7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBhd2FpdCB0aGlzLnBhZ2VMb2FkZXIuZ2V0UGFnZUxpc3QoKTtcbiAgICAgICAgICAgICAgICAvLyBkdXJpbmcgcXVlcnkgdXBkYXRpbmcgdGhlIHBhZ2UgbXVzdCBtYXRjaCBhbHRob3VnaCBkdXJpbmdcbiAgICAgICAgICAgICAgICAvLyBjbGllbnQtdHJhbnNpdGlvbiBhIHJlZGlyZWN0IHRoYXQgZG9lc24ndCBtYXRjaCBhIHBhZ2VcbiAgICAgICAgICAgICAgICAvLyBjYW4gYmUgcmV0dXJuZWQgYW5kIHRoaXMgc2hvdWxkIHRyaWdnZXIgYSBoYXJkIG5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAvLyB3aGljaCBpcyB2YWxpZCBmb3IgaW5jcmVtZW50YWwgbWlncmF0aW9uXG4gICAgICAgICAgICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcgfHwgcGFnZXMuaW5jbHVkZXMocmVzb2x2ZWRSb3V0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcm91dGUgPSByZXNvbHZlZFJvdXRlO1xuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSA9IGRhdGEuZWZmZWN0LnJlc29sdmVkSHJlZjtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGEuZWZmZWN0LnBhcnNlZEFzLnF1ZXJ5XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkQXMgPSAoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKSgoMCwgX25vcm1hbGl6ZWxvY2FsZXBhdGgubm9ybWFsaXplTG9jYWxlUGF0aCkoZGF0YS5lZmZlY3QucGFyc2VkQXMucGF0aG5hbWUsIHRoaXMubG9jYWxlcykucGF0aG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBhZ2FpbiB0aGUgY2FjaGUgd2l0aCB0aGUgbmV3IGRlc3RpbmF0aW9uLlxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0luZm8gPSB0aGlzLmNvbXBvbmVudHNbcm91dGVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocm91dGVQcm9wcy5zaGFsbG93ICYmIGV4aXN0aW5nSW5mbyAmJiB0aGlzLnJvdXRlID09PSByb3V0ZSAmJiAhaGFzTWlkZGxld2FyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIG1hdGNoIHdpdGggdGhlIGN1cnJlbnQgcm91dGUgZHVlIHRvIHJld3JpdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW4gY29weSB0aGUgZXhpc3RpbmcgaW5mb3JtYXRpb24gdG8gdGhlIHJld3JpdHRlbiBvbmUuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVuLCB3ZSByZXR1cm4gdGhlIGluZm9ybWF0aW9uIGFsb25nIHdpdGggdGhlIG1hdGNoZWQgcm91dGUuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmV4aXN0aW5nSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoMCwgX2lzYXBpcm91dGUuaXNBUElSb3V0ZSkocm91dGUpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICB1cmw6IGFzLFxuICAgICAgICAgICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCk9Pnt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvdXRlSW5mbyA9IGNhY2hlZFJvdXRlSW5mbyB8fCBhd2FpdCB0aGlzLmZldGNoQ29tcG9uZW50KHJvdXRlKS50aGVuKChyZXMpPT4oe1xuICAgICAgICAgICAgICAgICAgICBDb21wb25lbnQ6IHJlcy5wYWdlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0czogcmVzLnN0eWxlU2hlZXRzLFxuICAgICAgICAgICAgICAgICAgICBfX05fU1NHOiByZXMubW9kLl9fTl9TU0csXG4gICAgICAgICAgICAgICAgICAgIF9fTl9TU1A6IHJlcy5tb2QuX19OX1NTUFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzVmFsaWRFbGVtZW50VHlwZSB9ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdC1pc1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZShyb3V0ZUluZm8uQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkZWZhdWx0IGV4cG9ydCBpcyBub3QgYSBSZWFjdCBDb21wb25lbnQgaW4gcGFnZTogXCInICsgcGF0aG5hbWUgKyAnXCInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB3YXNCYWlsZWRQcmVmZXRjaCA9IGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IChfZGF0YV9yZXNwb25zZSA9IGRhdGEucmVzcG9uc2UpID09IG51bGwgPyB2b2lkIDAgOiBfZGF0YV9yZXNwb25zZS5oZWFkZXJzLmdldChcIngtbWlkZGxld2FyZS1za2lwXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkRmV0Y2hEYXRhID0gcm91dGVJbmZvLl9fTl9TU0cgfHwgcm91dGVJbmZvLl9fTl9TU1A7XG4gICAgICAgICAgICAvLyBGb3Igbm9uLVNTRyBwcmVmZXRjaGVzIHRoYXQgYmFpbGVkIGJlZm9yZSBzZW5kaW5nIGRhdGFcbiAgICAgICAgICAgIC8vIHdlIGNsZWFyIHRoZSBjYWNoZSB0byBmZXRjaCBmdWxsIHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAod2FzQmFpbGVkUHJlZmV0Y2ggJiYgKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuZGF0YUhyZWYpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2RjW2RhdGEuZGF0YUhyZWZdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBwcm9wcywgY2FjaGVLZXkgfSA9IGF3YWl0IHRoaXMuX2dldERhdGEoYXN5bmMgKCk9PntcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRmV0Y2hEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZGF0YSA9PSBudWxsID8gdm9pZCAwIDogZGF0YS5qc29uKSAmJiAhd2FzQmFpbGVkUHJlZmV0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVLZXk6IGRhdGEuY2FjaGVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGRhdGEuanNvblxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhSHJlZiA9IChkYXRhID09IG51bGwgPyB2b2lkIDAgOiBkYXRhLmRhdGFIcmVmKSA/IGRhdGEuZGF0YUhyZWYgOiB0aGlzLnBhZ2VMb2FkZXIuZ2V0RGF0YUhyZWYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogKDAsIF9mb3JtYXR1cmwuZm9ybWF0V2l0aFZhbGlkYXRpb24pKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBhc1BhdGg6IHJlc29sdmVkQXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBmZXRjaE5leHREYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFIcmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXJ2ZXJSZW5kZXI6IHRoaXMuaXNTc3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUpTT046IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZsaWdodENhY2hlOiB3YXNCYWlsZWRQcmVmZXRjaCA/IHt9IDogdGhpcy5zZGMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJzaXN0Q2FjaGU6ICFpc1ByZXZpZXcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ByZWZldGNoOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5OiBmZXRjaGVkLmNhY2hlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGZldGNoZWQuanNvbiB8fCB7fVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGF3YWl0IHRoaXMuZ2V0SW5pdGlhbFByb3BzKHJvdXRlSW5mby5Db21wb25lbnQsIC8vIHdlIHByb3ZpZGUgQXBwVHJlZSBsYXRlciBzbyB0aGlzIG5lZWRzIHRvIGJlIGBhbnlgXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBhc1BhdGg6IGFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlczogdGhpcy5sb2NhbGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdExvY2FsZTogdGhpcy5kZWZhdWx0TG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gT25seSBidXN0IHRoZSBkYXRhIGNhY2hlIGZvciBTU1Agcm91dGVzIGFsdGhvdWdoXG4gICAgICAgICAgICAvLyBtaWRkbGV3YXJlIGNhbiBza2lwIGNhY2hlIHBlciByZXF1ZXN0IHdpdGhcbiAgICAgICAgICAgIC8vIHgtbWlkZGxld2FyZS1jYWNoZTogbm8tY2FjaGUgYXMgd2VsbFxuICAgICAgICAgICAgaWYgKHJvdXRlSW5mby5fX05fU1NQICYmIGZldGNoTmV4dERhdGFQYXJhbXMuZGF0YUhyZWYgJiYgY2FjaGVLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zZGNbY2FjaGVLZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gd2Uga2ljayBvZmYgYSBIRUFEIHJlcXVlc3QgaW4gdGhlIGJhY2tncm91bmRcbiAgICAgICAgICAgIC8vIHdoZW4gYSBub24tcHJlZmV0Y2ggcmVxdWVzdCBpcyBtYWRlIHRvIHNpZ25hbCByZXZhbGlkYXRpb25cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1ByZXZpZXcgJiYgcm91dGVJbmZvLl9fTl9TU0cgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwiZGV2ZWxvcG1lbnRcIiAmJiAhaXNRdWVyeVVwZGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hOZXh0RGF0YShPYmplY3QuYXNzaWduKHt9LCBmZXRjaE5leHREYXRhUGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgICAgIGlzQmFja2dyb3VuZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGVyc2lzdENhY2hlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaW5mbGlnaHRDYWNoZTogdGhpcy5zYmNcbiAgICAgICAgICAgICAgICB9KSkuY2F0Y2goKCk9Pnt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3BzLnBhZ2VQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BzLnBhZ2VQcm9wcyk7XG4gICAgICAgICAgICByb3V0ZUluZm8ucHJvcHMgPSBwcm9wcztcbiAgICAgICAgICAgIHJvdXRlSW5mby5yb3V0ZSA9IHJvdXRlO1xuICAgICAgICAgICAgcm91dGVJbmZvLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICAgICAgICByb3V0ZUluZm8ucmVzb2x2ZWRBcyA9IHJlc29sdmVkQXM7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudHNbcm91dGVdID0gcm91dGVJbmZvO1xuICAgICAgICAgICAgcmV0dXJuIHJvdXRlSW5mbztcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVSb3V0ZUluZm9FcnJvcigoMCwgX2lzZXJyb3IuZ2V0UHJvcGVyRXJyb3IpKGVyciksIHBhdGhuYW1lLCBxdWVyeSwgYXMsIHJvdXRlUHJvcHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldChzdGF0ZSwgZGF0YSwgcmVzZXRTY3JvbGwpIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICByZXR1cm4gdGhpcy5zdWIoZGF0YSwgdGhpcy5jb21wb25lbnRzW1wiL19hcHBcIl0uQ29tcG9uZW50LCByZXNldFNjcm9sbCk7XG4gICAgfVxuICAgIC8qKlxuICAgKiBDYWxsYmFjayB0byBleGVjdXRlIGJlZm9yZSByZXBsYWNpbmcgcm91dGVyIHN0YXRlXG4gICAqIEBwYXJhbSBjYiBjYWxsYmFjayB0byBiZSBleGVjdXRlZFxuICAgKi8gYmVmb3JlUG9wU3RhdGUoY2IpIHtcbiAgICAgICAgdGhpcy5fYnBzID0gY2I7XG4gICAgfVxuICAgIG9ubHlBSGFzaENoYW5nZShhcykge1xuICAgICAgICBpZiAoIXRoaXMuYXNQYXRoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IFtvbGRVcmxOb0hhc2gsIG9sZEhhc2hdID0gdGhpcy5hc1BhdGguc3BsaXQoXCIjXCIsIDIpO1xuICAgICAgICBjb25zdCBbbmV3VXJsTm9IYXNoLCBuZXdIYXNoXSA9IGFzLnNwbGl0KFwiI1wiLCAyKTtcbiAgICAgICAgLy8gTWFrZXMgc3VyZSB3ZSBzY3JvbGwgdG8gdGhlIHByb3ZpZGVkIGhhc2ggaWYgdGhlIHVybC9oYXNoIGFyZSB0aGUgc2FtZVxuICAgICAgICBpZiAobmV3SGFzaCAmJiBvbGRVcmxOb0hhc2ggPT09IG5ld1VybE5vSGFzaCAmJiBvbGRIYXNoID09PSBuZXdIYXNoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgdXJscyBhcmUgY2hhbmdlLCB0aGVyZSdzIG1vcmUgdGhhbiBhIGhhc2ggY2hhbmdlXG4gICAgICAgIGlmIChvbGRVcmxOb0hhc2ggIT09IG5ld1VybE5vSGFzaCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBoYXNoIGhhcyBjaGFuZ2VkLCB0aGVuIGl0J3MgYSBoYXNoIG9ubHkgY2hhbmdlLlxuICAgICAgICAvLyBUaGlzIGNoZWNrIGlzIG5lY2Vzc2FyeSB0byBoYW5kbGUgYm90aCB0aGUgZW50ZXIgYW5kXG4gICAgICAgIC8vIGxlYXZlIGhhc2ggPT09ICcnIGNhc2VzLiBUaGUgaWRlbnRpdHkgY2FzZSBmYWxscyB0aHJvdWdoXG4gICAgICAgIC8vIGFuZCBpcyB0cmVhdGVkIGFzIGEgbmV4dCByZWxvYWQuXG4gICAgICAgIHJldHVybiBvbGRIYXNoICE9PSBuZXdIYXNoO1xuICAgIH1cbiAgICBzY3JvbGxUb0hhc2goYXMpIHtcbiAgICAgICAgY29uc3QgWywgaGFzaCA9IFwiXCJdID0gYXMuc3BsaXQoXCIjXCIsIDIpO1xuICAgICAgICAoMCwgX2hhbmRsZXNtb290aHNjcm9sbC5oYW5kbGVTbW9vdGhTY3JvbGwpKCgpPT57XG4gICAgICAgICAgICAvLyBTY3JvbGwgdG8gdG9wIGlmIHRoZSBoYXNoIGlzIGp1c3QgYCNgIHdpdGggbm8gdmFsdWUgb3IgYCN0b3BgXG4gICAgICAgICAgICAvLyBUbyBtaXJyb3IgYnJvd3NlcnNcbiAgICAgICAgICAgIGlmIChoYXNoID09PSBcIlwiIHx8IGhhc2ggPT09IFwidG9wXCIpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRGVjb2RlIGhhc2ggdG8gbWFrZSBub24tbGF0aW4gYW5jaG9yIHdvcmtzLlxuICAgICAgICAgICAgY29uc3QgcmF3SGFzaCA9IGRlY29kZVVSSUNvbXBvbmVudChoYXNoKTtcbiAgICAgICAgICAgIC8vIEZpcnN0IHdlIGNoZWNrIGlmIHRoZSBlbGVtZW50IGJ5IGlkIGlzIGZvdW5kXG4gICAgICAgICAgICBjb25zdCBpZEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocmF3SGFzaCk7XG4gICAgICAgICAgICBpZiAoaWRFbCkge1xuICAgICAgICAgICAgICAgIGlkRWwuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGVsZW1lbnQgd2l0aCB0aGUgaWQsIHdlIGNoZWNrIHRoZSBgbmFtZWAgcHJvcGVydHlcbiAgICAgICAgICAgIC8vIFRvIG1pcnJvciBicm93c2Vyc1xuICAgICAgICAgICAgY29uc3QgbmFtZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUocmF3SGFzaClbMF07XG4gICAgICAgICAgICBpZiAobmFtZUVsKSB7XG4gICAgICAgICAgICAgICAgbmFtZUVsLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIG9ubHlIYXNoQ2hhbmdlOiB0aGlzLm9ubHlBSGFzaENoYW5nZShhcylcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVybElzTmV3KGFzUGF0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hc1BhdGggIT09IGFzUGF0aDtcbiAgICB9XG4gICAgLyoqXG4gICAqIFByZWZldGNoIHBhZ2UgY29kZSwgeW91IG1heSB3YWl0IGZvciB0aGUgZGF0YSBkdXJpbmcgcGFnZSByZW5kZXJpbmcuXG4gICAqIFRoaXMgZmVhdHVyZSBvbmx5IHdvcmtzIGluIHByb2R1Y3Rpb24hXG4gICAqIEBwYXJhbSB1cmwgdGhlIGhyZWYgb2YgcHJlZmV0Y2hlZCBwYWdlXG4gICAqIEBwYXJhbSBhc1BhdGggdGhlIGFzIHBhdGggb2YgdGhlIHByZWZldGNoZWQgcGFnZVxuICAgKi8gYXN5bmMgcHJlZmV0Y2godXJsLCBhc1BhdGgsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGFzUGF0aCA9PT0gdm9pZCAwKSBhc1BhdGggPSB1cmw7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgLy8gUHJlZmV0Y2ggaXMgbm90IHN1cHBvcnRlZCBpbiBkZXZlbG9wbWVudCBtb2RlIGJlY2F1c2UgaXQgd291bGQgdHJpZ2dlciBvbi1kZW1hbmQtZW50cmllc1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgKDAsIF9pc2JvdC5pc0JvdCkod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgICAgICAgICAvLyBObyBwcmVmZXRjaGVzIGZvciBib3RzIHRoYXQgcmVuZGVyIHRoZSBsaW5rIHNpbmNlIHRoZXkgYXJlIHR5cGljYWxseSBuYXZpZ2F0aW5nXG4gICAgICAgICAgICAvLyBsaW5rcyB2aWEgdGhlIGVxdWl2YWxlbnQgb2YgYSBoYXJkIG5hdmlnYXRpb24gYW5kIGhlbmNlIG5ldmVyIHV0aWxpemUgdGhlc2VcbiAgICAgICAgICAgIC8vIHByZWZldGNoZXMuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhcnNlZCA9ICgwLCBfcGFyc2VyZWxhdGl2ZXVybC5wYXJzZVJlbGF0aXZlVXJsKSh1cmwpO1xuICAgICAgICBjb25zdCB1cmxQYXRobmFtZSA9IHBhcnNlZC5wYXRobmFtZTtcbiAgICAgICAgbGV0IHsgcGF0aG5hbWUsIHF1ZXJ5IH0gPSBwYXJzZWQ7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUGF0aG5hbWUgPSBwYXRobmFtZTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxvY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwYXRobmFtZSA9ICgwLCBfbm9ybWFsaXplbG9jYWxlcGF0aC5ub3JtYWxpemVMb2NhbGVQYXRoKShwYXRobmFtZSwgdGhpcy5sb2NhbGVzKS5wYXRobmFtZTtcbiAgICAgICAgICAgICAgICBwYXJzZWQucGF0aG5hbWUgPSBwYXRobmFtZTtcbiAgICAgICAgICAgICAgICB1cmwgPSAoMCwgX2Zvcm1hdHVybC5mb3JtYXRXaXRoVmFsaWRhdGlvbikocGFyc2VkKTtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkQXMgPSAoMCwgX3BhcnNlcmVsYXRpdmV1cmwucGFyc2VSZWxhdGl2ZVVybCkoYXNQYXRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbGVQYXRoUmVzdWx0ID0gKDAsIF9ub3JtYWxpemVsb2NhbGVwYXRoLm5vcm1hbGl6ZUxvY2FsZVBhdGgpKHBhcnNlZEFzLnBhdGhuYW1lLCB0aGlzLmxvY2FsZXMpO1xuICAgICAgICAgICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lID0gbG9jYWxlUGF0aFJlc3VsdC5wYXRobmFtZTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmxvY2FsZSA9IGxvY2FsZVBhdGhSZXN1bHQuZGV0ZWN0ZWRMb2NhbGUgfHwgdGhpcy5kZWZhdWx0TG9jYWxlO1xuICAgICAgICAgICAgICAgIGFzUGF0aCA9ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKShwYXJzZWRBcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFnZXMgPSBhd2FpdCB0aGlzLnBhZ2VMb2FkZXIuZ2V0UGFnZUxpc3QoKTtcbiAgICAgICAgbGV0IHJlc29sdmVkQXMgPSBhc1BhdGg7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHR5cGVvZiBvcHRpb25zLmxvY2FsZSAhPT0gXCJ1bmRlZmluZWRcIiA/IG9wdGlvbnMubG9jYWxlIHx8IHVuZGVmaW5lZCA6IHRoaXMubG9jYWxlO1xuICAgICAgICBjb25zdCBpc01pZGRsZXdhcmVNYXRjaCA9IGF3YWl0IG1hdGNoZXNNaWRkbGV3YXJlKHtcbiAgICAgICAgICAgIGFzUGF0aDogYXNQYXRoLFxuICAgICAgICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICAgICAgICByb3V0ZXI6IHRoaXNcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSEFTX1JFV1JJVEVTICYmIGFzUGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgbGV0IHJld3JpdGVzO1xuICAgICAgICAgICAgKHsgX19yZXdyaXRlczogcmV3cml0ZXMgfSA9IGF3YWl0ICgwLCBfcm91dGVsb2FkZXIuZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCkoKSk7XG4gICAgICAgICAgICBjb25zdCByZXdyaXRlc1Jlc3VsdCA9ICgwLCBfcmVzb2x2ZXJld3JpdGVzLmRlZmF1bHQpKCgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKCgwLCBfYWRkbG9jYWxlLmFkZExvY2FsZSkoYXNQYXRoLCB0aGlzLmxvY2FsZSksIHRydWUpLCBwYWdlcywgcmV3cml0ZXMsIHBhcnNlZC5xdWVyeSwgKHApPT5yZXNvbHZlRHluYW1pY1JvdXRlKHAsIHBhZ2VzKSwgdGhpcy5sb2NhbGVzKTtcbiAgICAgICAgICAgIGlmIChyZXdyaXRlc1Jlc3VsdC5leHRlcm5hbERlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRBcyA9ICgwLCBfcmVtb3ZlbG9jYWxlLnJlbW92ZUxvY2FsZSkoKDAsIF9yZW1vdmViYXNlcGF0aC5yZW1vdmVCYXNlUGF0aCkocmV3cml0ZXNSZXN1bHQuYXNQYXRoKSwgdGhpcy5sb2NhbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJld3JpdGVzUmVzdWx0Lm1hdGNoZWRQYWdlICYmIHJld3JpdGVzUmVzdWx0LnJlc29sdmVkSHJlZikge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgZGlyZWN0bHkgbWF0Y2hlcyBhIHBhZ2Ugd2UgbmVlZCB0byB1cGRhdGUgdGhlIGhyZWYgdG9cbiAgICAgICAgICAgICAgICAvLyBhbGxvdyB0aGUgY29ycmVjdCBwYWdlIGNodW5rIHRvIGJlIGxvYWRlZFxuICAgICAgICAgICAgICAgIHBhdGhuYW1lID0gcmV3cml0ZXNSZXN1bHQucmVzb2x2ZWRIcmVmO1xuICAgICAgICAgICAgICAgIHBhcnNlZC5wYXRobmFtZSA9IHBhdGhuYW1lO1xuICAgICAgICAgICAgICAgIGlmICghaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gKDAsIF9mb3JtYXR1cmwuZm9ybWF0V2l0aFZhbGlkYXRpb24pKHBhcnNlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBhcnNlZC5wYXRobmFtZSA9IHJlc29sdmVEeW5hbWljUm91dGUocGFyc2VkLnBhdGhuYW1lLCBwYWdlcyk7XG4gICAgICAgIGlmICgoMCwgX2lzZHluYW1pYy5pc0R5bmFtaWNSb3V0ZSkocGFyc2VkLnBhdGhuYW1lKSkge1xuICAgICAgICAgICAgcGF0aG5hbWUgPSBwYXJzZWQucGF0aG5hbWU7XG4gICAgICAgICAgICBwYXJzZWQucGF0aG5hbWUgPSBwYXRobmFtZTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocXVlcnksICgwLCBfcm91dGVtYXRjaGVyLmdldFJvdXRlTWF0Y2hlcikoKDAsIF9yb3V0ZXJlZ2V4LmdldFJvdXRlUmVnZXgpKHBhcnNlZC5wYXRobmFtZSkpKCgwLCBfcGFyc2VwYXRoLnBhcnNlUGF0aCkoYXNQYXRoKS5wYXRobmFtZSkgfHwge30pO1xuICAgICAgICAgICAgaWYgKCFpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICAgICAgICAgIHVybCA9ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKShwYXJzZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBwcm9jZXNzLmVudi5fX05FWFRfTUlERExFV0FSRV9QUkVGRVRDSCA9PT0gXCJzdHJpY3RcIiA/IG51bGwgOiBhd2FpdCB3aXRoTWlkZGxld2FyZUVmZmVjdHMoe1xuICAgICAgICAgICAgZmV0Y2hEYXRhOiAoKT0+ZmV0Y2hOZXh0RGF0YSh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFIcmVmOiB0aGlzLnBhZ2VMb2FkZXIuZ2V0RGF0YUhyZWYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogKDAsIF9mb3JtYXR1cmwuZm9ybWF0V2l0aFZhbGlkYXRpb24pKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZTogb3JpZ2luYWxQYXRobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwSW50ZXJwb2xhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzUGF0aDogcmVzb2x2ZWRBcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgaGFzTWlkZGxld2FyZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZXJ2ZXJSZW5kZXI6IHRoaXMuaXNTc3IsXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSlNPTjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5mbGlnaHRDYWNoZTogdGhpcy5zZGMsXG4gICAgICAgICAgICAgICAgICAgIHBlcnNpc3RDYWNoZTogIXRoaXMuaXNQcmV2aWV3LFxuICAgICAgICAgICAgICAgICAgICBpc1ByZWZldGNoOiB0cnVlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBhc1BhdGg6IGFzUGF0aCxcbiAgICAgICAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgKiBJZiB0aGVyZSB3YXMgYSByZXdyaXRlIHdlIGFwcGx5IHRoZSBlZmZlY3RzIG9mIHRoZSByZXdyaXRlIG9uIHRoZVxuICAgICAqIGN1cnJlbnQgcGFyYW1ldGVycyBmb3IgdGhlIHByZWZldGNoLlxuICAgICAqLyBpZiAoKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuZWZmZWN0LnR5cGUpID09PSBcInJld3JpdGVcIikge1xuICAgICAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gZGF0YS5lZmZlY3QucmVzb2x2ZWRIcmVmO1xuICAgICAgICAgICAgcGF0aG5hbWUgPSBkYXRhLmVmZmVjdC5yZXNvbHZlZEhyZWY7XG4gICAgICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAgICAgICAuLi5xdWVyeSxcbiAgICAgICAgICAgICAgICAuLi5kYXRhLmVmZmVjdC5wYXJzZWRBcy5xdWVyeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc29sdmVkQXMgPSBkYXRhLmVmZmVjdC5wYXJzZWRBcy5wYXRobmFtZTtcbiAgICAgICAgICAgIHVybCA9ICgwLCBfZm9ybWF0dXJsLmZvcm1hdFdpdGhWYWxpZGF0aW9uKShwYXJzZWQpO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAqIElmIHRoZXJlIGlzIGEgcmVkaXJlY3QgdG8gYW4gZXh0ZXJuYWwgZGVzdGluYXRpb24gdGhlbiB3ZSBkb24ndCBoYXZlXG4gICAgICogdG8gcHJlZmV0Y2ggY29udGVudCBhcyBpdCB3aWxsIGJlIHVudXNlZC5cbiAgICAgKi8gaWYgKChkYXRhID09IG51bGwgPyB2b2lkIDAgOiBkYXRhLmVmZmVjdC50eXBlKSA9PT0gXCJyZWRpcmVjdC1leHRlcm5hbFwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm91dGUgPSAoMCwgX3JlbW92ZXRyYWlsaW5nc2xhc2gucmVtb3ZlVHJhaWxpbmdTbGFzaCkocGF0aG5hbWUpO1xuICAgICAgICBpZiAoYXdhaXQgdGhpcy5fYmZsKGFzUGF0aCwgcmVzb2x2ZWRBcywgb3B0aW9ucy5sb2NhbGUsIHRydWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudHNbdXJsUGF0aG5hbWVdID0ge1xuICAgICAgICAgICAgICAgIF9fYXBwUm91dGVyOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIHRoaXMucGFnZUxvYWRlci5faXNTc2cocm91dGUpLnRoZW4oKGlzU3NnKT0+e1xuICAgICAgICAgICAgICAgIHJldHVybiBpc1NzZyA/IGZldGNoTmV4dERhdGEoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhSHJlZjogKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuanNvbikgPyBkYXRhID09IG51bGwgPyB2b2lkIDAgOiBkYXRhLmRhdGFIcmVmIDogdGhpcy5wYWdlTG9hZGVyLmdldERhdGFIcmVmKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzUGF0aDogcmVzb2x2ZWRBcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZTogbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBpc1NlcnZlclJlbmRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSlNPTjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5mbGlnaHRDYWNoZTogdGhpcy5zZGMsXG4gICAgICAgICAgICAgICAgICAgIHBlcnNpc3RDYWNoZTogIXRoaXMuaXNQcmV2aWV3LFxuICAgICAgICAgICAgICAgICAgICBpc1ByZWZldGNoOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGU6IG9wdGlvbnMudW5zdGFibGVfc2tpcENsaWVudENhY2hlIHx8IG9wdGlvbnMucHJpb3JpdHkgJiYgISFwcm9jZXNzLmVudi5fX05FWFRfT1BUSU1JU1RJQ19DTElFTlRfQ0FDSEVcbiAgICAgICAgICAgICAgICB9KS50aGVuKCgpPT5mYWxzZSkuY2F0Y2goKCk9PmZhbHNlKSA6IGZhbHNlO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLnBhZ2VMb2FkZXJbb3B0aW9ucy5wcmlvcml0eSA/IFwibG9hZFBhZ2VcIiA6IFwicHJlZmV0Y2hcIl0ocm91dGUpXG4gICAgICAgIF0pO1xuICAgIH1cbiAgICBhc3luYyBmZXRjaENvbXBvbmVudChyb3V0ZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVDYW5jZWxsZWQgPSBnZXRDYW5jZWxsZWRIYW5kbGVyKHtcbiAgICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgICAgcm91dGVyOiB0aGlzXG4gICAgICAgIH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVzdWx0ID0gYXdhaXQgdGhpcy5wYWdlTG9hZGVyLmxvYWRQYWdlKHJvdXRlKTtcbiAgICAgICAgICAgIGhhbmRsZUNhbmNlbGxlZCgpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBoYW5kbGVDYW5jZWxsZWQoKTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZ2V0RGF0YShmbikge1xuICAgICAgICBsZXQgY2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNhbmNlbCA9ICgpPT57XG4gICAgICAgICAgICBjYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNsYyA9IGNhbmNlbDtcbiAgICAgICAgcmV0dXJuIGZuKCkudGhlbigoZGF0YSk9PntcbiAgICAgICAgICAgIGlmIChjYW5jZWwgPT09IHRoaXMuY2xjKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihcIkxvYWRpbmcgaW5pdGlhbCBwcm9wcyBjYW5jZWxsZWRcIik7XG4gICAgICAgICAgICAgICAgZXJyLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfZ2V0RmxpZ2h0RGF0YShkYXRhSHJlZikge1xuICAgICAgICAvLyBEbyBub3QgY2FjaGUgUlNDIGZsaWdodCByZXNwb25zZSBzaW5jZSBpdCdzIG5vdCBhIHN0YXRpYyByZXNvdXJjZVxuICAgICAgICByZXR1cm4gZmV0Y2hOZXh0RGF0YSh7XG4gICAgICAgICAgICBkYXRhSHJlZixcbiAgICAgICAgICAgIGlzU2VydmVyUmVuZGVyOiB0cnVlLFxuICAgICAgICAgICAgcGFyc2VKU09OOiBmYWxzZSxcbiAgICAgICAgICAgIGluZmxpZ2h0Q2FjaGU6IHRoaXMuc2RjLFxuICAgICAgICAgICAgcGVyc2lzdENhY2hlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzUHJlZmV0Y2g6IGZhbHNlXG4gICAgICAgIH0pLnRoZW4oKHBhcmFtKT0+e1xuICAgICAgICAgICAgbGV0IHsgdGV4dCB9ID0gcGFyYW07XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHRleHRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRJbml0aWFsUHJvcHMoQ29tcG9uZW50LCBjdHgpIHtcbiAgICAgICAgY29uc3QgeyBDb21wb25lbnQ6IEFwcCB9ID0gdGhpcy5jb21wb25lbnRzW1wiL19hcHBcIl07XG4gICAgICAgIGNvbnN0IEFwcFRyZWUgPSB0aGlzLl93cmFwQXBwKEFwcCk7XG4gICAgICAgIGN0eC5BcHBUcmVlID0gQXBwVHJlZTtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbHMubG9hZEdldEluaXRpYWxQcm9wcykoQXBwLCB7XG4gICAgICAgICAgICBBcHBUcmVlLFxuICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgICAgICAgY3R4XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgcm91dGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnJvdXRlO1xuICAgIH1cbiAgICBnZXQgcGF0aG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnBhdGhuYW1lO1xuICAgIH1cbiAgICBnZXQgcXVlcnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnF1ZXJ5O1xuICAgIH1cbiAgICBnZXQgYXNQYXRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5hc1BhdGg7XG4gICAgfVxuICAgIGdldCBsb2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmxvY2FsZTtcbiAgICB9XG4gICAgZ2V0IGlzRmFsbGJhY2soKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmlzRmFsbGJhY2s7XG4gICAgfVxuICAgIGdldCBpc1ByZXZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmlzUHJldmlldztcbiAgICB9XG4gICAgY29uc3RydWN0b3IocGF0aG5hbWUsIHF1ZXJ5LCBhcywgeyBpbml0aWFsUHJvcHMsIHBhZ2VMb2FkZXIsIEFwcCwgd3JhcEFwcCwgQ29tcG9uZW50LCBlcnIsIHN1YnNjcmlwdGlvbiwgaXNGYWxsYmFjaywgbG9jYWxlLCBsb2NhbGVzLCBkZWZhdWx0TG9jYWxlLCBkb21haW5Mb2NhbGVzLCBpc1ByZXZpZXcgfSl7XG4gICAgICAgIC8vIFNlcnZlciBEYXRhIENhY2hlIChmdWxsIGRhdGEgcmVxdWVzdHMpXG4gICAgICAgIHRoaXMuc2RjID0ge307XG4gICAgICAgIC8vIFNlcnZlciBCYWNrZ3JvdW5kIENhY2hlIChIRUFEIHJlcXVlc3RzKVxuICAgICAgICB0aGlzLnNiYyA9IHt9O1xuICAgICAgICB0aGlzLmlzRmlyc3RQb3BTdGF0ZUV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fa2V5ID0gY3JlYXRlS2V5KCk7XG4gICAgICAgIHRoaXMub25Qb3BTdGF0ZSA9IChlKT0+e1xuICAgICAgICAgICAgY29uc3QgeyBpc0ZpcnN0UG9wU3RhdGVFdmVudCB9ID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuaXNGaXJzdFBvcFN0YXRlRXZlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gZS5zdGF0ZTtcbiAgICAgICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBnZXQgc3RhdGUgYXMgdW5kZWZpbmVkIGZvciB0d28gcmVhc29ucy5cbiAgICAgICAgICAgICAgICAvLyAgMS4gV2l0aCBvbGRlciBzYWZhcmkgKDwgOCkgYW5kIG9sZGVyIGNocm9tZSAoPCAzNClcbiAgICAgICAgICAgICAgICAvLyAgMi4gV2hlbiB0aGUgVVJMIGNoYW5nZWQgd2l0aCAjXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBJbiB0aGUgYm90aCBjYXNlcywgd2UgZG9uJ3QgbmVlZCB0byBwcm9jZWVkIGFuZCBjaGFuZ2UgdGhlIHJvdXRlLlxuICAgICAgICAgICAgICAgIC8vIChhcyBpdCdzIGFscmVhZHkgY2hhbmdlZClcbiAgICAgICAgICAgICAgICAvLyBCdXQgd2UgY2FuIHNpbXBseSByZXBsYWNlIHRoZSBzdGF0ZSB3aXRoIHRoZSBuZXcgY2hhbmdlcy5cbiAgICAgICAgICAgICAgICAvLyBBY3R1YWxseSwgZm9yICgxKSB3ZSBkb24ndCBuZWVkIHRvIG5vdGhpbmcuIEJ1dCBpdCdzIGhhcmQgdG8gZGV0ZWN0IHRoYXQgZXZlbnQuXG4gICAgICAgICAgICAgICAgLy8gU28sIGRvaW5nIHRoZSBmb2xsb3dpbmcgZm9yICgxKSBkb2VzIG5vIGhhcm0uXG4gICAgICAgICAgICAgICAgY29uc3QgeyBwYXRobmFtZSwgcXVlcnkgfSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShcInJlcGxhY2VTdGF0ZVwiLCAoMCwgX2Zvcm1hdHVybC5mb3JtYXRXaXRoVmFsaWRhdGlvbikoe1xuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZTogKDAsIF9hZGRiYXNlcGF0aC5hZGRCYXNlUGF0aCkocGF0aG5hbWUpLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeVxuICAgICAgICAgICAgICAgIH0pLCAoMCwgX3V0aWxzLmdldFVSTCkoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gX19OQSBpcyB1c2VkIHRvIGlkZW50aWZ5IGlmIHRoZSBoaXN0b3J5IGVudHJ5IGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBhcHAtcm91dGVyLlxuICAgICAgICAgICAgaWYgKHN0YXRlLl9fTkEpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdGF0ZS5fX04pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTYWZhcmkgZmlyZXMgcG9wc3RhdGVldmVudCB3aGVuIHJlb3BlbmluZyB0aGUgYnJvd3Nlci5cbiAgICAgICAgICAgIGlmIChpc0ZpcnN0UG9wU3RhdGVFdmVudCAmJiB0aGlzLmxvY2FsZSA9PT0gc3RhdGUub3B0aW9ucy5sb2NhbGUgJiYgc3RhdGUuYXMgPT09IHRoaXMuYXNQYXRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGZvcmNlZFNjcm9sbDtcbiAgICAgICAgICAgIGNvbnN0IHsgdXJsLCBhcywgb3B0aW9ucywga2V5IH0gPSBzdGF0ZTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfU0NST0xMX1JFU1RPUkFUSU9OKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9rZXkgIT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU25hcHNob3QgY3VycmVudCBzY3JvbGwgcG9zaXRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJfX25leHRfc2Nyb2xsX1wiICsgdGhpcy5fa2V5LCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHNlbGYucGFnZVhPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IHNlbGYucGFnZVlPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSBvbGQgc2Nyb2xsIHBvc2l0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcIl9fbmV4dF9zY3JvbGxfXCIgKyBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlZFNjcm9sbCA9IEpTT04ucGFyc2Uodik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VkU2Nyb2xsID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICAgICAgICAgIGNvbnN0IHsgcGF0aG5hbWUgfSA9ICgwLCBfcGFyc2VyZWxhdGl2ZXVybC5wYXJzZVJlbGF0aXZlVXJsKSh1cmwpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHJlLXJlbmRlciBvbiBpbml0aWFsIGxvYWQsXG4gICAgICAgICAgICAvLyBjYW4gYmUgY2F1c2VkIGJ5IG5hdmlnYXRpbmcgYmFjayBmcm9tIGFuIGV4dGVybmFsIHNpdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3NyICYmIGFzID09PSAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKSh0aGlzLmFzUGF0aCkgJiYgcGF0aG5hbWUgPT09ICgwLCBfYWRkYmFzZXBhdGguYWRkQmFzZVBhdGgpKHRoaXMucGF0aG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIGRvd25zdHJlYW0gYXBwbGljYXRpb24gcmV0dXJucyBmYWxzeSwgcmV0dXJuLlxuICAgICAgICAgICAgLy8gVGhleSB3aWxsIHRoZW4gYmUgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBldmVudC5cbiAgICAgICAgICAgIGlmICh0aGlzLl9icHMgJiYgIXRoaXMuX2JwcyhzdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZShcInJlcGxhY2VTdGF0ZVwiLCB1cmwsIGFzLCBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgc2hhbGxvdzogb3B0aW9ucy5zaGFsbG93ICYmIHRoaXMuX3NoYWxsb3csXG4gICAgICAgICAgICAgICAgbG9jYWxlOiBvcHRpb25zLmxvY2FsZSB8fCB0aGlzLmRlZmF1bHRMb2NhbGUsXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBpbnRlcm5hbCB2YWx1ZSBub3QgZXhwb3NlZCBvbiB0eXBlc1xuICAgICAgICAgICAgICAgIF9oOiAwXG4gICAgICAgICAgICB9KSwgZm9yY2VkU2Nyb2xsKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gcmVwcmVzZW50cyB0aGUgY3VycmVudCBjb21wb25lbnQga2V5XG4gICAgICAgIGNvbnN0IHJvdXRlID0gKDAsIF9yZW1vdmV0cmFpbGluZ3NsYXNoLnJlbW92ZVRyYWlsaW5nU2xhc2gpKHBhdGhuYW1lKTtcbiAgICAgICAgLy8gc2V0IHVwIHRoZSBjb21wb25lbnQgY2FjaGUgKGJ5IHJvdXRlIGtleXMpXG4gICAgICAgIHRoaXMuY29tcG9uZW50cyA9IHt9O1xuICAgICAgICAvLyBXZSBzaG91bGQgbm90IGtlZXAgdGhlIGNhY2hlLCBpZiB0aGVyZSdzIGFuIGVycm9yXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdGhpcyBjYXVzZSBpc3N1ZXMgd2hlbiB3aGVuIGdvaW5nIGJhY2sgYW5kXG4gICAgICAgIC8vIGNvbWUgYWdhaW4gdG8gdGhlIGVycm9yZWQgcGFnZS5cbiAgICAgICAgaWYgKHBhdGhuYW1lICE9PSBcIi9fZXJyb3JcIikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzW3JvdXRlXSA9IHtcbiAgICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgaW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwcm9wczogaW5pdGlhbFByb3BzLFxuICAgICAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgICAgICBfX05fU1NHOiBpbml0aWFsUHJvcHMgJiYgaW5pdGlhbFByb3BzLl9fTl9TU0csXG4gICAgICAgICAgICAgICAgX19OX1NTUDogaW5pdGlhbFByb3BzICYmIGluaXRpYWxQcm9wcy5fX05fU1NQXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcG9uZW50c1tcIi9fYXBwXCJdID0ge1xuICAgICAgICAgICAgQ29tcG9uZW50OiBBcHAsXG4gICAgICAgICAgICBzdHlsZVNoZWV0czogW11cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfUk9VVEVSX0ZJTFRFUl9FTkFCTEVEKSB7XG4gICAgICAgICAgICBjb25zdCB7IEJsb29tRmlsdGVyIH0gPSByZXF1aXJlKFwiLi4vLi4vbGliL2Jsb29tLWZpbHRlclwiKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRpY0ZpbHRlckRhdGEgPSBwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1JPVVRFUl9TX0ZJTFRFUjtcbiAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNGaWx0ZXJEYXRhID0gcHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9ST1VURVJfRF9GSUxURVI7XG4gICAgICAgICAgICBpZiAoc3RhdGljRmlsdGVyRGF0YSA9PSBudWxsID8gdm9pZCAwIDogc3RhdGljRmlsdGVyRGF0YS5udW1IYXNoZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9iZmxfcyA9IG5ldyBCbG9vbUZpbHRlcihzdGF0aWNGaWx0ZXJEYXRhLm51bUl0ZW1zLCBzdGF0aWNGaWx0ZXJEYXRhLmVycm9yUmF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYmZsX3MuaW1wb3J0KHN0YXRpY0ZpbHRlckRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGR5bmFtaWNGaWx0ZXJEYXRhID09IG51bGwgPyB2b2lkIDAgOiBkeW5hbWljRmlsdGVyRGF0YS5udW1IYXNoZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9iZmxfZCA9IG5ldyBCbG9vbUZpbHRlcihkeW5hbWljRmlsdGVyRGF0YS5udW1JdGVtcywgZHluYW1pY0ZpbHRlckRhdGEuZXJyb3JSYXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9iZmxfZC5pbXBvcnQoZHluYW1pY0ZpbHRlckRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXQgZm9yIFJvdXRlci5yb3V0ZXIuZXZlbnRzXG4gICAgICAgIC8vIFRPRE86IFNob3VsZCBiZSByZW1vdmUgdGhlIGZvbGxvd2luZyBtYWpvciB2ZXJzaW9uIGFzIGl0IHdhcyBuZXZlciBkb2N1bWVudGVkXG4gICAgICAgIHRoaXMuZXZlbnRzID0gUm91dGVyLmV2ZW50cztcbiAgICAgICAgdGhpcy5wYWdlTG9hZGVyID0gcGFnZUxvYWRlcjtcbiAgICAgICAgLy8gaWYgYXV0byBwcmVyZW5kZXJlZCBhbmQgZHluYW1pYyByb3V0ZSB3YWl0IHRvIHVwZGF0ZSBhc1BhdGhcbiAgICAgICAgLy8gdW50aWwgYWZ0ZXIgbW91bnQgdG8gcHJldmVudCBoeWRyYXRpb24gbWlzbWF0Y2hcbiAgICAgICAgY29uc3QgYXV0b0V4cG9ydER5bmFtaWMgPSAoMCwgX2lzZHluYW1pYy5pc0R5bmFtaWNSb3V0ZSkocGF0aG5hbWUpICYmIHNlbGYuX19ORVhUX0RBVEFfXy5hdXRvRXhwb3J0O1xuICAgICAgICB0aGlzLmJhc2VQYXRoID0gcHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCB8fCBcIlwiO1xuICAgICAgICB0aGlzLnN1YiA9IHN1YnNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5jbGMgPSBudWxsO1xuICAgICAgICB0aGlzLl93cmFwQXBwID0gd3JhcEFwcDtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGlnbm9yZSBleHRyYSBwb3BTdGF0ZSBpbiBzYWZhcmkgb24gbmF2aWdhdGluZ1xuICAgICAgICAvLyBiYWNrIGZyb20gZXh0ZXJuYWwgc2l0ZVxuICAgICAgICB0aGlzLmlzU3NyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0xvY2FsZURvbWFpbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUmVhZHkgPSAhIShzZWxmLl9fTkVYVF9EQVRBX18uZ3NzcCB8fCBzZWxmLl9fTkVYVF9EQVRBX18uZ2lwIHx8IHNlbGYuX19ORVhUX0RBVEFfXy5pc0V4cGVyaW1lbnRhbENvbXBpbGUgfHwgc2VsZi5fX05FWFRfREFUQV9fLmFwcEdpcCAmJiAhc2VsZi5fX05FWFRfREFUQV9fLmdzcCB8fCAhYXV0b0V4cG9ydER5bmFtaWMgJiYgIXNlbGYubG9jYXRpb24uc2VhcmNoICYmICFwcm9jZXNzLmVudi5fX05FWFRfSEFTX1JFV1JJVEVTKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXM7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRMb2NhbGUgPSBkZWZhdWx0TG9jYWxlO1xuICAgICAgICAgICAgdGhpcy5kb21haW5Mb2NhbGVzID0gZG9tYWluTG9jYWxlcztcbiAgICAgICAgICAgIHRoaXMuaXNMb2NhbGVEb21haW4gPSAhISgwLCBfZGV0ZWN0ZG9tYWlubG9jYWxlLmRldGVjdERvbWFpbkxvY2FsZSkoZG9tYWluTG9jYWxlcywgc2VsZi5sb2NhdGlvbi5ob3N0bmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgIGFzUGF0aDogYXV0b0V4cG9ydER5bmFtaWMgPyBwYXRobmFtZSA6IGFzLFxuICAgICAgICAgICAgaXNQcmV2aWV3OiAhIWlzUHJldmlldyxcbiAgICAgICAgICAgIGxvY2FsZTogcHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCA/IGxvY2FsZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGlzRmFsbGJhY2tcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5faW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgXCJhc1wiIGRvZXNuJ3Qgc3RhcnQgd2l0aCBkb3VibGUgc2xhc2hlcyBvciBlbHNlIGl0IGNhblxuICAgICAgICAgICAgLy8gdGhyb3cgYW4gZXJyb3IgYXMgaXQncyBjb25zaWRlcmVkIGludmFsaWRcbiAgICAgICAgICAgIGlmICghYXMuc3RhcnRzV2l0aChcIi8vXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gaW4gb3JkZXIgZm9yIGBlLnN0YXRlYCB0byB3b3JrIG9uIHRoZSBgb25wb3BzdGF0ZWAgZXZlbnRcbiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIHJlZ2lzdGVyIHRoZSBpbml0aWFsIHJvdXRlIHVwb24gaW5pdGlhbGl6YXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzUGF0aCA9ICgwLCBfdXRpbHMuZ2V0VVJMKSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxNYXRjaGVzTWlkZGxld2FyZVByb21pc2UgPSBtYXRjaGVzTWlkZGxld2FyZSh7XG4gICAgICAgICAgICAgICAgICAgIHJvdXRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgICAgICBhc1BhdGhcbiAgICAgICAgICAgICAgICB9KS50aGVuKChtYXRjaGVzKT0+e1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLl9zaG91bGRSZXNvbHZlSHJlZiA9IGFzICE9PSBwYXRobmFtZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShcInJlcGxhY2VTdGF0ZVwiLCBtYXRjaGVzID8gYXNQYXRoIDogKDAsIF9mb3JtYXR1cmwuZm9ybWF0V2l0aFZhbGlkYXRpb24pKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lOiAoMCwgX2FkZGJhc2VwYXRoLmFkZEJhc2VQYXRoKShwYXRobmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVxuICAgICAgICAgICAgICAgICAgICB9KSwgYXNQYXRoLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXM7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHRoaXMub25Qb3BTdGF0ZSk7XG4gICAgICAgICAgICAvLyBlbmFibGUgY3VzdG9tIHNjcm9sbCByZXN0b3JhdGlvbiBoYW5kbGluZyB3aGVuIGF2YWlsYWJsZVxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGZhbGxiYWNrIHRvIGJyb3dzZXIncyBkZWZhdWx0IGhhbmRsaW5nXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1NDUk9MTF9SRVNUT1JBVElPTikge1xuICAgICAgICAgICAgICAgIGlmIChtYW51YWxTY3JvbGxSZXN0b3JhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IFwibWFudWFsXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuUm91dGVyLmV2ZW50cyA9ICgwLCBfbWl0dC5kZWZhdWx0KSgpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yb3V0ZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiZGVmYXVsdCIsIm1hdGNoZXNNaWRkbGV3YXJlIiwiY3JlYXRlS2V5IiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiUm91dGVyIiwiX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IiwicmVxdWlyZSIsIl9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQiLCJfcmVtb3ZldHJhaWxpbmdzbGFzaCIsIl9yb3V0ZWxvYWRlciIsIl9zY3JpcHQiLCJfaXNlcnJvciIsIl8iLCJfZGVub3JtYWxpemVwYWdlcGF0aCIsIl9ub3JtYWxpemVsb2NhbGVwYXRoIiwiX21pdHQiLCJfdXRpbHMiLCJfaXNkeW5hbWljIiwiX3BhcnNlcmVsYXRpdmV1cmwiLCJfcmVzb2x2ZXJld3JpdGVzIiwiX3JvdXRlbWF0Y2hlciIsIl9yb3V0ZXJlZ2V4IiwiX2Zvcm1hdHVybCIsIl9kZXRlY3Rkb21haW5sb2NhbGUiLCJfcGFyc2VwYXRoIiwiX2FkZGxvY2FsZSIsIl9yZW1vdmVsb2NhbGUiLCJfcmVtb3ZlYmFzZXBhdGgiLCJfYWRkYmFzZXBhdGgiLCJfaGFzYmFzZXBhdGgiLCJfcmVzb2x2ZWhyZWYiLCJfaXNhcGlyb3V0ZSIsIl9nZXRuZXh0cGF0aG5hbWVpbmZvIiwiX2Zvcm1hdG5leHRwYXRobmFtZWluZm8iLCJfY29tcGFyZXN0YXRlcyIsIl9pc2xvY2FsdXJsIiwiX2lzYm90IiwiX29taXQiLCJfaW50ZXJwb2xhdGVhcyIsIl9oYW5kbGVzbW9vdGhzY3JvbGwiLCJidWlsZENhbmNlbGxhdGlvbkVycm9yIiwiYXNzaWduIiwiRXJyb3IiLCJjYW5jZWxsZWQiLCJvcHRpb25zIiwibWF0Y2hlcnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJvdXRlciIsInBhZ2VMb2FkZXIiLCJnZXRNaWRkbGV3YXJlIiwicGF0aG5hbWUiLCJhc1BhdGhuYW1lIiwicGFyc2VQYXRoIiwiYXNQYXRoIiwiY2xlYW5lZEFzIiwiaGFzQmFzZVBhdGgiLCJyZW1vdmVCYXNlUGF0aCIsImFzV2l0aEJhc2VQYXRoQW5kTG9jYWxlIiwiYWRkQmFzZVBhdGgiLCJhZGRMb2NhbGUiLCJsb2NhbGUiLCJzb21lIiwibSIsIlJlZ0V4cCIsInJlZ2V4cCIsInRlc3QiLCJzdHJpcE9yaWdpbiIsInVybCIsIm9yaWdpbiIsImdldExvY2F0aW9uT3JpZ2luIiwic3RhcnRzV2l0aCIsInN1YnN0cmluZyIsImxlbmd0aCIsInByZXBhcmVVcmxBcyIsImFzIiwicmVzb2x2ZWRIcmVmIiwicmVzb2x2ZWRBcyIsInJlc29sdmVIcmVmIiwiaHJlZldhc0Fic29sdXRlIiwiYXNXYXNBYnNvbHV0ZSIsInByZXBhcmVkVXJsIiwicHJlcGFyZWRBcyIsInJlc29sdmVEeW5hbWljUm91dGUiLCJwYWdlcyIsImNsZWFuUGF0aG5hbWUiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwiZGVub3JtYWxpemVQYWdlUGF0aCIsImluY2x1ZGVzIiwicGFnZSIsImlzRHluYW1pY1JvdXRlIiwiZ2V0Um91dGVSZWdleCIsInJlIiwiZ2V0TWlkZGxld2FyZURhdGEiLCJzb3VyY2UiLCJyZXNwb25zZSIsIm5leHRDb25maWciLCJiYXNlUGF0aCIsImkxOG4iLCJsb2NhbGVzIiwidHJhaWxpbmdTbGFzaCIsIkJvb2xlYW4iLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1RSQUlMSU5HX1NMQVNIIiwicmV3cml0ZUhlYWRlciIsImhlYWRlcnMiLCJyZXdyaXRlVGFyZ2V0IiwibWF0Y2hlZFBhdGgiLCJfX05FWFRfRVhURVJOQUxfTUlERExFV0FSRV9SRVdSSVRFX1JFU09MVkUiLCJwYXJzZWRSZXdyaXRlVGFyZ2V0IiwicGFyc2VSZWxhdGl2ZVVybCIsInBhdGhuYW1lSW5mbyIsImdldE5leHRQYXRobmFtZUluZm8iLCJwYXJzZURhdGEiLCJmc1BhdGhuYW1lIiwiZ2V0UGFnZUxpc3QiLCJnZXRDbGllbnRCdWlsZE1hbmlmZXN0IiwidGhlbiIsInBhcmFtIiwiX19yZXdyaXRlcyIsInJld3JpdGVzIiwibm9ybWFsaXplTG9jYWxlUGF0aCIsInBhcnNlZFNvdXJjZSIsIl9fTkVYVF9IQVNfUkVXUklURVMiLCJ1bmRlZmluZWQiLCJyZXN1bHQiLCJxdWVyeSIsInBhdGgiLCJtYXRjaGVkUGFnZSIsInBhcnNlZEFzIiwicmVzb2x2ZWRQYXRobmFtZSIsIm1hdGNoZXMiLCJnZXRSb3V0ZU1hdGNoZXIiLCJ0eXBlIiwic3JjIiwiZm9ybWF0TmV4dFBhdGhuYW1lSW5mbyIsImRlZmF1bHRMb2NhbGUiLCJidWlsZElkIiwiZGVzdGluYXRpb24iLCJoYXNoIiwicmVkaXJlY3RUYXJnZXQiLCJuZXdBcyIsIm5ld1VybCIsIndpdGhNaWRkbGV3YXJlRWZmZWN0cyIsImZldGNoRGF0YSIsImRhdGEiLCJlZmZlY3QiLCJkYXRhSHJlZiIsImpzb24iLCJ0ZXh0IiwiY2FjaGVLZXkiLCJlIiwibWFudWFsU2Nyb2xsUmVzdG9yYXRpb24iLCJfX05FWFRfU0NST0xMX1JFU1RPUkFUSU9OIiwid2luZG93IiwiaGlzdG9yeSIsInYiLCJzZXNzaW9uU3RvcmFnZSIsInNldEl0ZW0iLCJyZW1vdmVJdGVtIiwibiIsIlNTR19EQVRBX05PVF9GT1VORCIsIlN5bWJvbCIsImZldGNoUmV0cnkiLCJhdHRlbXB0cyIsImZldGNoIiwiY3JlZGVudGlhbHMiLCJtZXRob2QiLCJvayIsInN0YXR1cyIsInRyeVRvUGFyc2VBc0pTT04iLCJKU09OIiwicGFyc2UiLCJlcnJvciIsImZldGNoTmV4dERhdGEiLCJpbmZsaWdodENhY2hlIiwiaXNQcmVmZXRjaCIsImhhc01pZGRsZXdhcmUiLCJpc1NlcnZlclJlbmRlciIsInBhcnNlSlNPTiIsInBlcnNpc3RDYWNoZSIsImlzQmFja2dyb3VuZCIsInVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSIsImhyZWYiLCJVUkwiLCJsb2NhdGlvbiIsIl9wYXJhbXNfbWV0aG9kIiwiZ2V0RGF0YSIsInBhcmFtcyIsInB1cnBvc2UiLCJfdHJ5VG9QYXJzZUFzSlNPTiIsIm5vdEZvdW5kIiwibWFya0Fzc2V0RXJyb3IiLCJjYXRjaCIsImVyciIsIm1lc3NhZ2UiLCJNYXRoIiwicmFuZG9tIiwidG9TdHJpbmciLCJzbGljZSIsImhhbmRsZUhhcmROYXZpZ2F0aW9uIiwiZ2V0Q2FuY2VsbGVkSGFuZGxlciIsInJvdXRlIiwiY2FuY2VsIiwiY2xjIiwiaGFuZGxlQ2FuY2VsbGVkIiwicmVsb2FkIiwiYmFjayIsImZvcndhcmQiLCJwdXNoIiwiX2tleSIsInN0cmluZ2lmeSIsIngiLCJzZWxmIiwicGFnZVhPZmZzZXQiLCJ5IiwicGFnZVlPZmZzZXQiLCJjaGFuZ2UiLCJyZXBsYWNlIiwiX2JmbCIsInNraXBOYXZpZ2F0ZSIsIl9fTkVYVF9DTElFTlRfUk9VVEVSX0ZJTFRFUl9FTkFCTEVEIiwibWF0Y2hlc0JmbFN0YXRpYyIsIm1hdGNoZXNCZmxEeW5hbWljIiwiY3VyQXMiLCJhc05vU2xhc2giLCJhc05vU2xhc2hMb2NhbGUiLCJfdGhpc19fYmZsX3MiLCJfdGhpc19fYmZsX3MxIiwiX2JmbF9zIiwiY29udGFpbnMiLCJub3JtYWxpemVkQVMiLCJjdXJBc1BhcnRzIiwic3BsaXQiLCJpIiwiX3RoaXNfX2JmbF9kIiwiY3VycmVudFBhcnQiLCJqb2luIiwiX2JmbF9kIiwiZm9yY2VkU2Nyb2xsIiwiX3RoaXNfY29tcG9uZW50c19wYXRobmFtZSIsImlzTG9jYWxVUkwiLCJpc1F1ZXJ5VXBkYXRpbmciLCJfaCIsInNoYWxsb3ciLCJzaG91bGRSZXNvbHZlSHJlZiIsIl9zaG91bGRSZXNvbHZlSHJlZiIsIm5leHRTdGF0ZSIsInN0YXRlIiwicmVhZHlTdGF0ZUNoYW5nZSIsImlzUmVhZHkiLCJpc1NzciIsInByZXZMb2NhbGUiLCJfX05FWFRfSTE4Tl9TVVBQT1JUIiwibG9jYWxlUGF0aFJlc3VsdCIsImRldGVjdGVkTG9jYWxlIiwiZm9ybWF0V2l0aFZhbGlkYXRpb24iLCJkaWROYXZpZ2F0ZSIsIl90aGlzX2xvY2FsZXMiLCJkZXRlY3RlZERvbWFpbiIsImRldGVjdERvbWFpbkxvY2FsZSIsImRvbWFpbkxvY2FsZXMiLCJpc0xvY2FsZURvbWFpbiIsImhvc3RuYW1lIiwiZG9tYWluIiwiYXNOb0Jhc2VQYXRoIiwiaHR0cCIsIlNUIiwicGVyZm9ybWFuY2UiLCJtYXJrIiwic2Nyb2xsIiwicm91dGVQcm9wcyIsIl9pbkZsaWdodFJvdXRlIiwiZXZlbnRzIiwiZW1pdCIsInJlbW92ZUxvY2FsZSIsImxvY2FsZUNoYW5nZSIsIm9ubHlBSGFzaENoYW5nZSIsImNoYW5nZVN0YXRlIiwic2Nyb2xsVG9IYXNoIiwic2V0IiwiY29tcG9uZW50cyIsInBhcnNlZCIsInVybElzTmV3IiwicGFyc2VkQXNQYXRobmFtZSIsIl9fYXBwUm91dGVyIiwiaXNNaWRkbGV3YXJlUmV3cml0ZSIsImlzTWlkZGxld2FyZU1hdGNoIiwicmV3cml0ZXNSZXN1bHQiLCJwIiwiZXh0ZXJuYWxEZXN0Iiwicm91dGVNYXRjaCIsInJvdXRlUmVnZXgiLCJzaG91bGRJbnRlcnBvbGF0ZSIsImludGVycG9sYXRlZEFzIiwiaW50ZXJwb2xhdGVBcyIsIm1pc3NpbmdQYXJhbXMiLCJrZXlzIiwiZ3JvdXBzIiwiZmlsdGVyIiwib3B0aW9uYWwiLCJjb25zb2xlIiwid2FybiIsIm9taXQiLCJpc0Vycm9yUm91dGUiLCJfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzX3BhZ2VQcm9wcyIsIl9zZWxmX19fTkVYVF9EQVRBX19fcHJvcHMiLCJfcm91dGVJbmZvX3Byb3BzIiwicm91dGVJbmZvIiwiZ2V0Um91dGVJbmZvIiwiaXNQcmV2aWV3IiwiaXNGYWxsYmFjayIsImNsZWFuZWRQYXJzZWRQYXRobmFtZSIsImZvckVhY2giLCJrZXkiLCJwcmVmaXhlZEFzIiwicmV3cml0ZUFzIiwibG9jYWxlUmVzdWx0IiwiY3VyUm91dGVNYXRjaCIsImNvbXBvbmVudCIsIkNvbXBvbmVudCIsInVuc3RhYmxlX3NjcmlwdExvYWRlciIsInNjcmlwdHMiLCJjb25jYXQiLCJzY3JpcHQiLCJoYW5kbGVDbGllbnRTY3JpcHRMb2FkIiwicHJvcHMiLCJfX05fU1NHIiwiX19OX1NTUCIsInBhZ2VQcm9wcyIsIl9fTl9SRURJUkVDVCIsIl9fTl9SRURJUkVDVF9CQVNFX1BBVEgiLCJwYXJzZWRIcmVmIiwiX19OX1BSRVZJRVciLCJub3RGb3VuZFJvdXRlIiwiZmV0Y2hDb21wb25lbnQiLCJpc05vdEZvdW5kIiwiX19ORVhUX0RBVEFfXyIsInN0YXR1c0NvZGUiLCJfcm91dGVJbmZvX3JvdXRlIiwiaXNWYWxpZFNoYWxsb3dSb3V0ZSIsIl9vcHRpb25zX3Njcm9sbCIsInNob3VsZFNjcm9sbCIsInJlc2V0U2Nyb2xsIiwidXBjb21pbmdTY3JvbGxTdGF0ZSIsInVwY29taW5nUm91dGVyU3RhdGUiLCJfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzX3BhZ2VQcm9wczEiLCJfc2VsZl9fX05FWFRfREFUQV9fX3Byb3BzMSIsIl9yb3V0ZUluZm9fcHJvcHMxIiwiY2FuU2tpcFVwZGF0aW5nIiwiY29tcGFyZVJvdXRlclN0YXRlcyIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwibGFuZyIsImhhc2hSZWdleCIsImdldFVSTCIsIl9zaGFsbG93IiwiX19OIiwiaGFuZGxlUm91dGVJbmZvRXJyb3IiLCJsb2FkRXJyb3JGYWlsIiwiaXNBc3NldEVycm9yIiwic3R5bGVTaGVldHMiLCJnZXRJbml0aWFsUHJvcHMiLCJnaXBFcnIiLCJyb3V0ZUluZm9FcnIiLCJyZXF1ZXN0ZWRSb3V0ZSIsIl9kYXRhX2VmZmVjdCIsIl9kYXRhX2VmZmVjdDEiLCJfZGF0YV9lZmZlY3QyIiwiX2RhdGFfcmVzcG9uc2UiLCJleGlzdGluZ0luZm8iLCJjYWNoZWRSb3V0ZUluZm8iLCJmZXRjaE5leHREYXRhUGFyYW1zIiwiZ2V0RGF0YUhyZWYiLCJza2lwSW50ZXJwb2xhdGlvbiIsInNiYyIsInNkYyIsInJlc29sdmVkUm91dGUiLCJpc0FQSVJvdXRlIiwicmVzIiwibW9kIiwiaXNWYWxpZEVsZW1lbnRUeXBlIiwid2FzQmFpbGVkUHJlZmV0Y2giLCJzaG91bGRGZXRjaERhdGEiLCJfZ2V0RGF0YSIsImZldGNoZWQiLCJnZXRQcm9wZXJFcnJvciIsInN1YiIsImJlZm9yZVBvcFN0YXRlIiwiY2IiLCJfYnBzIiwib2xkVXJsTm9IYXNoIiwib2xkSGFzaCIsIm5ld1VybE5vSGFzaCIsIm5ld0hhc2giLCJoYW5kbGVTbW9vdGhTY3JvbGwiLCJzY3JvbGxUbyIsInJhd0hhc2giLCJkZWNvZGVVUklDb21wb25lbnQiLCJpZEVsIiwiZ2V0RWxlbWVudEJ5SWQiLCJzY3JvbGxJbnRvVmlldyIsIm5hbWVFbCIsImdldEVsZW1lbnRzQnlOYW1lIiwib25seUhhc2hDaGFuZ2UiLCJwcmVmZXRjaCIsImlzQm90IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidXJsUGF0aG5hbWUiLCJvcmlnaW5hbFBhdGhuYW1lIiwiX19ORVhUX01JRERMRVdBUkVfUFJFRkVUQ0giLCJfaXNTc2ciLCJpc1NzZyIsInByaW9yaXR5IiwiX19ORVhUX09QVElNSVNUSUNfQ0xJRU5UX0NBQ0hFIiwiY29tcG9uZW50UmVzdWx0IiwibG9hZFBhZ2UiLCJmbiIsIl9nZXRGbGlnaHREYXRhIiwiY3R4IiwiQXBwIiwiQXBwVHJlZSIsIl93cmFwQXBwIiwibG9hZEdldEluaXRpYWxQcm9wcyIsImNvbnN0cnVjdG9yIiwiaW5pdGlhbFByb3BzIiwid3JhcEFwcCIsInN1YnNjcmlwdGlvbiIsImlzRmlyc3RQb3BTdGF0ZUV2ZW50Iiwib25Qb3BTdGF0ZSIsIl9fTkEiLCJnZXRJdGVtIiwiaW5pdGlhbCIsIkJsb29tRmlsdGVyIiwic3RhdGljRmlsdGVyRGF0YSIsIl9fTkVYVF9DTElFTlRfUk9VVEVSX1NfRklMVEVSIiwiZHluYW1pY0ZpbHRlckRhdGEiLCJfX05FWFRfQ0xJRU5UX1JPVVRFUl9EX0ZJTFRFUiIsIm51bUhhc2hlcyIsIm51bUl0ZW1zIiwiZXJyb3JSYXRlIiwiaW1wb3J0IiwiYXV0b0V4cG9ydER5bmFtaWMiLCJhdXRvRXhwb3J0IiwiX19ORVhUX1JPVVRFUl9CQVNFUEFUSCIsImdzc3AiLCJnaXAiLCJpc0V4cGVyaW1lbnRhbENvbXBpbGUiLCJhcHBHaXAiLCJnc3AiLCJzZWFyY2giLCJfaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlUHJvbWlzZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJzY3JvbGxSZXN0b3JhdGlvbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/router.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/add-locale.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/add-locale.js ***! + \**********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n enumerable: true,\n get: function() {\n return addLocale;\n }\n}));\nconst _addpathprefix = __webpack_require__(/*! ./add-path-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction addLocale(path, locale, defaultLocale, ignorePrefix) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path;\n const lower = path.toLowerCase();\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if ((0, _pathhasprefix.pathHasPrefix)(lower, \"/api\")) return path;\n if ((0, _pathhasprefix.pathHasPrefix)(lower, \"/\" + locale.toLowerCase())) return path;\n }\n // Add the locale prefix to the path.\n return (0, _addpathprefix.addPathPrefix)(path, \"/\" + locale);\n} //# sourceMappingURL=add-locale.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1sb2NhbGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDZDQUE0QztJQUN4Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGlCQUFpQkMsbUJBQU9BLENBQUMsOEZBQW1CO0FBQ2xELE1BQU1DLGlCQUFpQkQsbUJBQU9BLENBQUMsOEZBQW1CO0FBQ2xELFNBQVNGLFVBQVVJLElBQUksRUFBRUMsTUFBTSxFQUFFQyxhQUFhLEVBQUVDLFlBQVk7SUFDeEQsNEVBQTRFO0lBQzVFLHNCQUFzQjtJQUN0QixJQUFJLENBQUNGLFVBQVVBLFdBQVdDLGVBQWUsT0FBT0Y7SUFDaEQsTUFBTUksUUFBUUosS0FBS0ssV0FBVztJQUM5QiwyRUFBMkU7SUFDM0UsaUNBQWlDO0lBQ2pDLElBQUksQ0FBQ0YsY0FBYztRQUNmLElBQUksQ0FBQyxHQUFHSixlQUFlTyxhQUFhLEVBQUVGLE9BQU8sU0FBUyxPQUFPSjtRQUM3RCxJQUFJLENBQUMsR0FBR0QsZUFBZU8sYUFBYSxFQUFFRixPQUFPLE1BQU1ILE9BQU9JLFdBQVcsS0FBSyxPQUFPTDtJQUNyRjtJQUNBLHFDQUFxQztJQUNyQyxPQUFPLENBQUMsR0FBR0gsZUFBZVUsYUFBYSxFQUFFUCxNQUFNLE1BQU1DO0FBQ3pELEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLWxvY2FsZS5qcz8wMjMxIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWRkTG9jYWxlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhZGRMb2NhbGU7XG4gICAgfVxufSk7XG5jb25zdCBfYWRkcGF0aHByZWZpeCA9IHJlcXVpcmUoXCIuL2FkZC1wYXRoLXByZWZpeFwiKTtcbmNvbnN0IF9wYXRoaGFzcHJlZml4ID0gcmVxdWlyZShcIi4vcGF0aC1oYXMtcHJlZml4XCIpO1xuZnVuY3Rpb24gYWRkTG9jYWxlKHBhdGgsIGxvY2FsZSwgZGVmYXVsdExvY2FsZSwgaWdub3JlUHJlZml4KSB7XG4gICAgLy8gSWYgbm8gbG9jYWxlIHdhcyBnaXZlbiBvciB0aGUgbG9jYWxlIGlzIHRoZSBkZWZhdWx0IGxvY2FsZSwgd2UgZG9uJ3QgbmVlZFxuICAgIC8vIHRvIHByZWZpeCB0aGUgcGF0aC5cbiAgICBpZiAoIWxvY2FsZSB8fCBsb2NhbGUgPT09IGRlZmF1bHRMb2NhbGUpIHJldHVybiBwYXRoO1xuICAgIGNvbnN0IGxvd2VyID0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIElmIHRoZSBwYXRoIGlzIGFuIEFQSSBwYXRoIG9yIHRoZSBwYXRoIGFscmVhZHkgaGFzIHRoZSBsb2NhbGUgcHJlZml4LCB3ZVxuICAgIC8vIGRvbid0IG5lZWQgdG8gcHJlZml4IHRoZSBwYXRoLlxuICAgIGlmICghaWdub3JlUHJlZml4KSB7XG4gICAgICAgIGlmICgoMCwgX3BhdGhoYXNwcmVmaXgucGF0aEhhc1ByZWZpeCkobG93ZXIsIFwiL2FwaVwiKSkgcmV0dXJuIHBhdGg7XG4gICAgICAgIGlmICgoMCwgX3BhdGhoYXNwcmVmaXgucGF0aEhhc1ByZWZpeCkobG93ZXIsIFwiL1wiICsgbG9jYWxlLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgLy8gQWRkIHRoZSBsb2NhbGUgcHJlZml4IHRvIHRoZSBwYXRoLlxuICAgIHJldHVybiAoMCwgX2FkZHBhdGhwcmVmaXguYWRkUGF0aFByZWZpeCkocGF0aCwgXCIvXCIgKyBsb2NhbGUpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZGQtbG9jYWxlLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJhZGRMb2NhbGUiLCJfYWRkcGF0aHByZWZpeCIsInJlcXVpcmUiLCJfcGF0aGhhc3ByZWZpeCIsInBhdGgiLCJsb2NhbGUiLCJkZWZhdWx0TG9jYWxlIiwiaWdub3JlUHJlZml4IiwibG93ZXIiLCJ0b0xvd2VyQ2FzZSIsInBhdGhIYXNQcmVmaXgiLCJhZGRQYXRoUHJlZml4Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/add-locale.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js": +/*!***************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js ***! + \***************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addPathPrefix\", ({\n enumerable: true,\n get: function() {\n return addPathPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathPrefix(path, prefix) {\n if (!path.startsWith(\"/\") || !prefix) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n return \"\" + prefix + pathname + query + hash;\n} //# sourceMappingURL=add-path-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1wYXRoLXByZWZpeC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsaURBQWdEO0lBQzVDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsYUFBYUMsbUJBQU9BLENBQUMsb0ZBQWM7QUFDekMsU0FBU0YsY0FBY0csSUFBSSxFQUFFQyxNQUFNO0lBQy9CLElBQUksQ0FBQ0QsS0FBS0UsVUFBVSxDQUFDLFFBQVEsQ0FBQ0QsUUFBUTtRQUNsQyxPQUFPRDtJQUNYO0lBQ0EsTUFBTSxFQUFFRyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHUCxXQUFXUSxTQUFTLEVBQUVOO0lBQzVELE9BQU8sS0FBS0MsU0FBU0UsV0FBV0MsUUFBUUM7QUFDNUMsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1wcmVmaXguanM/YzEyOSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFkZFBhdGhQcmVmaXhcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFkZFBhdGhQcmVmaXg7XG4gICAgfVxufSk7XG5jb25zdCBfcGFyc2VwYXRoID0gcmVxdWlyZShcIi4vcGFyc2UtcGF0aFwiKTtcbmZ1bmN0aW9uIGFkZFBhdGhQcmVmaXgocGF0aCwgcHJlZml4KSB7XG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpIHx8ICFwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5LCBoYXNoIH0gPSAoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKHBhdGgpO1xuICAgIHJldHVybiBcIlwiICsgcHJlZml4ICsgcGF0aG5hbWUgKyBxdWVyeSArIGhhc2g7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZC1wYXRoLXByZWZpeC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiYWRkUGF0aFByZWZpeCIsIl9wYXJzZXBhdGgiLCJyZXF1aXJlIiwicGF0aCIsInByZWZpeCIsInN0YXJ0c1dpdGgiLCJwYXRobmFtZSIsInF1ZXJ5IiwiaGFzaCIsInBhcnNlUGF0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js": +/*!***************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js ***! + \***************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"addPathSuffix\", ({\n enumerable: true,\n get: function() {\n return addPathSuffix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathSuffix(path, suffix) {\n if (!path.startsWith(\"/\") || !suffix) {\n return path;\n }\n const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n return \"\" + pathname + suffix + query + hash;\n} //# sourceMappingURL=add-path-suffix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1wYXRoLXN1ZmZpeC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsaURBQWdEO0lBQzVDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsYUFBYUMsbUJBQU9BLENBQUMsb0ZBQWM7QUFDekMsU0FBU0YsY0FBY0csSUFBSSxFQUFFQyxNQUFNO0lBQy9CLElBQUksQ0FBQ0QsS0FBS0UsVUFBVSxDQUFDLFFBQVEsQ0FBQ0QsUUFBUTtRQUNsQyxPQUFPRDtJQUNYO0lBQ0EsTUFBTSxFQUFFRyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHUCxXQUFXUSxTQUFTLEVBQUVOO0lBQzVELE9BQU8sS0FBS0csV0FBV0YsU0FBU0csUUFBUUM7QUFDNUMsRUFFQSwyQ0FBMkMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1zdWZmaXguanM/N2IzNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFkZFBhdGhTdWZmaXhcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGFkZFBhdGhTdWZmaXg7XG4gICAgfVxufSk7XG5jb25zdCBfcGFyc2VwYXRoID0gcmVxdWlyZShcIi4vcGFyc2UtcGF0aFwiKTtcbmZ1bmN0aW9uIGFkZFBhdGhTdWZmaXgocGF0aCwgc3VmZml4KSB7XG4gICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpIHx8ICFzdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIGNvbnN0IHsgcGF0aG5hbWUsIHF1ZXJ5LCBoYXNoIH0gPSAoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKHBhdGgpO1xuICAgIHJldHVybiBcIlwiICsgcGF0aG5hbWUgKyBzdWZmaXggKyBxdWVyeSArIGhhc2g7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFkZC1wYXRoLXN1ZmZpeC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiYWRkUGF0aFN1ZmZpeCIsIl9wYXJzZXBhdGgiLCJyZXF1aXJlIiwicGF0aCIsInN1ZmZpeCIsInN0YXJ0c1dpdGgiLCJwYXRobmFtZSIsInF1ZXJ5IiwiaGFzaCIsInBhcnNlUGF0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/app-paths.js": +/*!*********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/app-paths.js ***! + \*********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n normalizeAppPath: function() {\n return normalizeAppPath;\n },\n normalizeRscURL: function() {\n return normalizeRscURL;\n }\n});\nconst _ensureleadingslash = __webpack_require__(/*! ../../page-path/ensure-leading-slash */ \"./node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _segment = __webpack_require__(/*! ../../segment */ \"./node_modules/next/dist/shared/lib/segment.js\");\nfunction normalizeAppPath(route) {\n return (0, _ensureleadingslash.ensureLeadingSlash)(route.split(\"/\").reduce((pathname, segment, index, segments)=>{\n // Empty segments are ignored.\n if (!segment) {\n return pathname;\n }\n // Groups are ignored.\n if ((0, _segment.isGroupSegment)(segment)) {\n return pathname;\n }\n // Parallel segments are ignored.\n if (segment[0] === \"@\") {\n return pathname;\n }\n // The last segment (if it's a leaf) should be ignored.\n if ((segment === \"page\" || segment === \"route\") && index === segments.length - 1) {\n return pathname;\n }\n return pathname + \"/\" + segment;\n }, \"\"));\n}\nfunction normalizeRscURL(url) {\n return url.replace(/\\.rsc($|\\?)/, \"$1\");\n} //# sourceMappingURL=app-paths.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRocy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUdOO0FBQ0EsU0FBU0csUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVQsT0FBT0MsY0FBYyxDQUFDTyxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFMLFNBQVM7SUFDYkcsa0JBQWtCO1FBQ2QsT0FBT0E7SUFDWDtJQUNBQyxpQkFBaUI7UUFDYixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyxzQkFBc0JDLG1CQUFPQSxDQUFDLG1IQUFzQztBQUMxRSxNQUFNQyxXQUFXRCxtQkFBT0EsQ0FBQyxxRUFBZTtBQUN4QyxTQUFTVCxpQkFBaUJXLEtBQUs7SUFDM0IsT0FBTyxDQUFDLEdBQUdILG9CQUFvQkksa0JBQWtCLEVBQUVELE1BQU1FLEtBQUssQ0FBQyxLQUFLQyxNQUFNLENBQUMsQ0FBQ0MsVUFBVUMsU0FBU0MsT0FBT0M7UUFDbEcsOEJBQThCO1FBQzlCLElBQUksQ0FBQ0YsU0FBUztZQUNWLE9BQU9EO1FBQ1g7UUFDQSxzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLEdBQUdMLFNBQVNTLGNBQWMsRUFBRUgsVUFBVTtZQUN2QyxPQUFPRDtRQUNYO1FBQ0EsaUNBQWlDO1FBQ2pDLElBQUlDLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSztZQUNwQixPQUFPRDtRQUNYO1FBQ0EsdURBQXVEO1FBQ3ZELElBQUksQ0FBQ0MsWUFBWSxVQUFVQSxZQUFZLE9BQU0sS0FBTUMsVUFBVUMsU0FBU0UsTUFBTSxHQUFHLEdBQUc7WUFDOUUsT0FBT0w7UUFDWDtRQUNBLE9BQU9BLFdBQVcsTUFBTUM7SUFDNUIsR0FBRztBQUNQO0FBQ0EsU0FBU2YsZ0JBQWdCb0IsR0FBRztJQUN4QixPQUFPQSxJQUFJQyxPQUFPLENBQUMsZUFDbkI7QUFDSixFQUVBLHFDQUFxQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRocy5qcz83ZTUyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbm9ybWFsaXplQXBwUGF0aDogbnVsbCxcbiAgICBub3JtYWxpemVSc2NVUkw6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgbm9ybWFsaXplQXBwUGF0aDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVBcHBQYXRoO1xuICAgIH0sXG4gICAgbm9ybWFsaXplUnNjVVJMOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJzY1VSTDtcbiAgICB9XG59KTtcbmNvbnN0IF9lbnN1cmVsZWFkaW5nc2xhc2ggPSByZXF1aXJlKFwiLi4vLi4vcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoXCIpO1xuY29uc3QgX3NlZ21lbnQgPSByZXF1aXJlKFwiLi4vLi4vc2VnbWVudFwiKTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZUFwcFBhdGgocm91dGUpIHtcbiAgICByZXR1cm4gKDAsIF9lbnN1cmVsZWFkaW5nc2xhc2guZW5zdXJlTGVhZGluZ1NsYXNoKShyb3V0ZS5zcGxpdChcIi9cIikucmVkdWNlKChwYXRobmFtZSwgc2VnbWVudCwgaW5kZXgsIHNlZ21lbnRzKT0+e1xuICAgICAgICAvLyBFbXB0eSBzZWdtZW50cyBhcmUgaWdub3JlZC5cbiAgICAgICAgaWYgKCFzZWdtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR3JvdXBzIGFyZSBpZ25vcmVkLlxuICAgICAgICBpZiAoKDAsIF9zZWdtZW50LmlzR3JvdXBTZWdtZW50KShzZWdtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBhcmFsbGVsIHNlZ21lbnRzIGFyZSBpZ25vcmVkLlxuICAgICAgICBpZiAoc2VnbWVudFswXSA9PT0gXCJAXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRobmFtZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgbGFzdCBzZWdtZW50IChpZiBpdCdzIGEgbGVhZikgc2hvdWxkIGJlIGlnbm9yZWQuXG4gICAgICAgIGlmICgoc2VnbWVudCA9PT0gXCJwYWdlXCIgfHwgc2VnbWVudCA9PT0gXCJyb3V0ZVwiKSAmJiBpbmRleCA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRobmFtZSArIFwiL1wiICsgc2VnbWVudDtcbiAgICB9LCBcIlwiKSk7XG59XG5mdW5jdGlvbiBub3JtYWxpemVSc2NVUkwodXJsKSB7XG4gICAgcmV0dXJuIHVybC5yZXBsYWNlKC9cXC5yc2MoJHxcXD8pLywgLy8gJDEgZW5zdXJlcyBgP2AgaXMgcHJlc2VydmVkXG4gICAgXCIkMVwiKTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLXBhdGhzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsIm5vcm1hbGl6ZUFwcFBhdGgiLCJub3JtYWxpemVSc2NVUkwiLCJfZXhwb3J0IiwidGFyZ2V0IiwiYWxsIiwibmFtZSIsImVudW1lcmFibGUiLCJnZXQiLCJfZW5zdXJlbGVhZGluZ3NsYXNoIiwicmVxdWlyZSIsIl9zZWdtZW50Iiwicm91dGUiLCJlbnN1cmVMZWFkaW5nU2xhc2giLCJzcGxpdCIsInJlZHVjZSIsInBhdGhuYW1lIiwic2VnbWVudCIsImluZGV4Iiwic2VnbWVudHMiLCJpc0dyb3VwU2VnbWVudCIsImxlbmd0aCIsInVybCIsInJlcGxhY2UiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/app-paths.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js": +/*!************************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js ***! + \************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// Convert router.asPath to a URLSearchParams object\n// example: /dynamic/[slug]?foo=bar -> { foo: 'bar' }\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"asPathToSearchParams\", ({\n enumerable: true,\n get: function() {\n return asPathToSearchParams;\n }\n}));\nfunction asPathToSearchParams(asPath) {\n return new URL(asPath, \"http://n\").searchParams;\n} //# sourceMappingURL=as-path-to-search-params.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FzLXBhdGgtdG8tc2VhcmNoLXBhcmFtcy5qcyIsIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQscURBQXFEO0FBQ3hDO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx3REFBdUQ7SUFDbkRJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixTQUFTQSxxQkFBcUJDLE1BQU07SUFDaEMsT0FBTyxJQUFJQyxJQUFJRCxRQUFRLFlBQVlFLFlBQVk7QUFDbkQsRUFFQSxvREFBb0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hcy1wYXRoLXRvLXNlYXJjaC1wYXJhbXMuanM/YWFjZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb252ZXJ0IHJvdXRlci5hc1BhdGggdG8gYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4vLyBleGFtcGxlOiAvZHluYW1pYy9bc2x1Z10/Zm9vPWJhciAtPiB7IGZvbzogJ2JhcicgfVxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc1BhdGhUb1NlYXJjaFBhcmFtc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gYXNQYXRoVG9TZWFyY2hQYXJhbXM7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBhc1BhdGhUb1NlYXJjaFBhcmFtcyhhc1BhdGgpIHtcbiAgICByZXR1cm4gbmV3IFVSTChhc1BhdGgsIFwiaHR0cDovL25cIikuc2VhcmNoUGFyYW1zO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcy1wYXRoLXRvLXNlYXJjaC1wYXJhbXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImFzUGF0aFRvU2VhcmNoUGFyYW1zIiwiYXNQYXRoIiwiVVJMIiwic2VhcmNoUGFyYW1zIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/compare-states.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/compare-states.js ***! + \**************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"compareRouterStates\", ({\n enumerable: true,\n get: function() {\n return compareRouterStates;\n }\n}));\nfunction compareRouterStates(a, b) {\n const stateKeys = Object.keys(a);\n if (stateKeys.length !== Object.keys(b).length) return false;\n for(let i = stateKeys.length; i--;){\n const key = stateKeys[i];\n if (key === \"query\") {\n const queryKeys = Object.keys(a.query);\n if (queryKeys.length !== Object.keys(b.query).length) {\n return false;\n }\n for(let j = queryKeys.length; j--;){\n const queryKey = queryKeys[j];\n if (!b.query.hasOwnProperty(queryKey) || a.query[queryKey] !== b.query[queryKey]) {\n return false;\n }\n }\n } else if (!b.hasOwnProperty(key) || a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n} //# sourceMappingURL=compare-states.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2NvbXBhcmUtc3RhdGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx1REFBc0Q7SUFDbERJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixTQUFTQSxvQkFBb0JDLENBQUMsRUFBRUMsQ0FBQztJQUM3QixNQUFNQyxZQUFZVCxPQUFPVSxJQUFJLENBQUNIO0lBQzlCLElBQUlFLFVBQVVFLE1BQU0sS0FBS1gsT0FBT1UsSUFBSSxDQUFDRixHQUFHRyxNQUFNLEVBQUUsT0FBTztJQUN2RCxJQUFJLElBQUlDLElBQUlILFVBQVVFLE1BQU0sRUFBRUMsS0FBSztRQUMvQixNQUFNQyxNQUFNSixTQUFTLENBQUNHLEVBQUU7UUFDeEIsSUFBSUMsUUFBUSxTQUFTO1lBQ2pCLE1BQU1DLFlBQVlkLE9BQU9VLElBQUksQ0FBQ0gsRUFBRVEsS0FBSztZQUNyQyxJQUFJRCxVQUFVSCxNQUFNLEtBQUtYLE9BQU9VLElBQUksQ0FBQ0YsRUFBRU8sS0FBSyxFQUFFSixNQUFNLEVBQUU7Z0JBQ2xELE9BQU87WUFDWDtZQUNBLElBQUksSUFBSUssSUFBSUYsVUFBVUgsTUFBTSxFQUFFSyxLQUFLO2dCQUMvQixNQUFNQyxXQUFXSCxTQUFTLENBQUNFLEVBQUU7Z0JBQzdCLElBQUksQ0FBQ1IsRUFBRU8sS0FBSyxDQUFDRyxjQUFjLENBQUNELGFBQWFWLEVBQUVRLEtBQUssQ0FBQ0UsU0FBUyxLQUFLVCxFQUFFTyxLQUFLLENBQUNFLFNBQVMsRUFBRTtvQkFDOUUsT0FBTztnQkFDWDtZQUNKO1FBQ0osT0FBTyxJQUFJLENBQUNULEVBQUVVLGNBQWMsQ0FBQ0wsUUFBUU4sQ0FBQyxDQUFDTSxJQUFJLEtBQUtMLENBQUMsQ0FBQ0ssSUFBSSxFQUFFO1lBQ3BELE9BQU87UUFDWDtJQUNKO0lBQ0EsT0FBTztBQUNYLEVBRUEsMENBQTBDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvY29tcGFyZS1zdGF0ZXMuanM/ZWEwZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXBhcmVSb3V0ZXJTdGF0ZXNcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVSb3V0ZXJTdGF0ZXM7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBjb21wYXJlUm91dGVyU3RhdGVzKGEsIGIpIHtcbiAgICBjb25zdCBzdGF0ZUtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgICBpZiAoc3RhdGVLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yKGxldCBpID0gc3RhdGVLZXlzLmxlbmd0aDsgaS0tOyl7XG4gICAgICAgIGNvbnN0IGtleSA9IHN0YXRlS2V5c1tpXTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJxdWVyeVwiKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUtleXMgPSBPYmplY3Qua2V5cyhhLnF1ZXJ5KTtcbiAgICAgICAgICAgIGlmIChxdWVyeUtleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiLnF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IobGV0IGogPSBxdWVyeUtleXMubGVuZ3RoOyBqLS07KXtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeUtleSA9IHF1ZXJ5S2V5c1tqXTtcbiAgICAgICAgICAgICAgICBpZiAoIWIucXVlcnkuaGFzT3duUHJvcGVydHkocXVlcnlLZXkpIHx8IGEucXVlcnlbcXVlcnlLZXldICE9PSBiLnF1ZXJ5W3F1ZXJ5S2V5XSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFiLmhhc093blByb3BlcnR5KGtleSkgfHwgYVtrZXldICE9PSBiW2tleV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcGFyZS1zdGF0ZXMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImNvbXBhcmVSb3V0ZXJTdGF0ZXMiLCJhIiwiYiIsInN0YXRlS2V5cyIsImtleXMiLCJsZW5ndGgiLCJpIiwia2V5IiwicXVlcnlLZXlzIiwicXVlcnkiLCJqIiwicXVlcnlLZXkiLCJoYXNPd25Qcm9wZXJ0eSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/compare-states.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js ***! + \*************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"formatNextPathnameInfo\", ({\n enumerable: true,\n get: function() {\n return formatNextPathnameInfo;\n }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _addpathprefix = __webpack_require__(/*! ./add-path-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _addpathsuffix = __webpack_require__(/*! ./add-path-suffix */ \"./node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js\");\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"./node_modules/next/dist/shared/lib/router/utils/add-locale.js\");\nfunction formatNextPathnameInfo(info) {\n let pathname = (0, _addlocale.addLocale)(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix);\n if (info.buildId || !info.trailingSlash) {\n pathname = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n }\n if (info.buildId) {\n pathname = (0, _addpathsuffix.addPathSuffix)((0, _addpathprefix.addPathPrefix)(pathname, \"/_next/data/\" + info.buildId), info.pathname === \"/\" ? \"index.json\" : \".json\");\n }\n pathname = (0, _addpathprefix.addPathPrefix)(pathname, info.basePath);\n return !info.buildId && info.trailingSlash ? !pathname.endsWith(\"/\") ? (0, _addpathsuffix.addPathSuffix)(pathname, \"/\") : pathname : (0, _removetrailingslash.removeTrailingSlash)(pathname);\n} //# sourceMappingURL=format-next-pathname-info.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC1uZXh0LXBhdGhuYW1lLWluZm8uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDBEQUF5RDtJQUNyREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHVCQUF1QkMsbUJBQU9BLENBQUMsMEdBQXlCO0FBQzlELE1BQU1DLGlCQUFpQkQsbUJBQU9BLENBQUMsOEZBQW1CO0FBQ2xELE1BQU1FLGlCQUFpQkYsbUJBQU9BLENBQUMsOEZBQW1CO0FBQ2xELE1BQU1HLGFBQWFILG1CQUFPQSxDQUFDLG9GQUFjO0FBQ3pDLFNBQVNGLHVCQUF1Qk0sSUFBSTtJQUNoQyxJQUFJQyxXQUFXLENBQUMsR0FBR0YsV0FBV0csU0FBUyxFQUFFRixLQUFLQyxRQUFRLEVBQUVELEtBQUtHLE1BQU0sRUFBRUgsS0FBS0ksT0FBTyxHQUFHQyxZQUFZTCxLQUFLTSxhQUFhLEVBQUVOLEtBQUtPLFlBQVk7SUFDckksSUFBSVAsS0FBS0ksT0FBTyxJQUFJLENBQUNKLEtBQUtRLGFBQWEsRUFBRTtRQUNyQ1AsV0FBVyxDQUFDLEdBQUdOLHFCQUFxQmMsbUJBQW1CLEVBQUVSO0lBQzdEO0lBQ0EsSUFBSUQsS0FBS0ksT0FBTyxFQUFFO1FBQ2RILFdBQVcsQ0FBQyxHQUFHSCxlQUFlWSxhQUFhLEVBQUUsQ0FBQyxHQUFHYixlQUFlYyxhQUFhLEVBQUVWLFVBQVUsaUJBQWlCRCxLQUFLSSxPQUFPLEdBQUdKLEtBQUtDLFFBQVEsS0FBSyxNQUFNLGVBQWU7SUFDcEs7SUFDQUEsV0FBVyxDQUFDLEdBQUdKLGVBQWVjLGFBQWEsRUFBRVYsVUFBVUQsS0FBS1ksUUFBUTtJQUNwRSxPQUFPLENBQUNaLEtBQUtJLE9BQU8sSUFBSUosS0FBS1EsYUFBYSxHQUFHLENBQUNQLFNBQVNZLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBR2YsZUFBZVksYUFBYSxFQUFFVCxVQUFVLE9BQU9BLFdBQVcsQ0FBQyxHQUFHTixxQkFBcUJjLG1CQUFtQixFQUFFUjtBQUN2TCxFQUVBLHFEQUFxRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC1uZXh0LXBhdGhuYW1lLWluZm8uanM/YjE0NiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZvcm1hdE5leHRQYXRobmFtZUluZm9cIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdE5leHRQYXRobmFtZUluZm87XG4gICAgfVxufSk7XG5jb25zdCBfcmVtb3ZldHJhaWxpbmdzbGFzaCA9IHJlcXVpcmUoXCIuL3JlbW92ZS10cmFpbGluZy1zbGFzaFwiKTtcbmNvbnN0IF9hZGRwYXRocHJlZml4ID0gcmVxdWlyZShcIi4vYWRkLXBhdGgtcHJlZml4XCIpO1xuY29uc3QgX2FkZHBhdGhzdWZmaXggPSByZXF1aXJlKFwiLi9hZGQtcGF0aC1zdWZmaXhcIik7XG5jb25zdCBfYWRkbG9jYWxlID0gcmVxdWlyZShcIi4vYWRkLWxvY2FsZVwiKTtcbmZ1bmN0aW9uIGZvcm1hdE5leHRQYXRobmFtZUluZm8oaW5mbykge1xuICAgIGxldCBwYXRobmFtZSA9ICgwLCBfYWRkbG9jYWxlLmFkZExvY2FsZSkoaW5mby5wYXRobmFtZSwgaW5mby5sb2NhbGUsIGluZm8uYnVpbGRJZCA/IHVuZGVmaW5lZCA6IGluZm8uZGVmYXVsdExvY2FsZSwgaW5mby5pZ25vcmVQcmVmaXgpO1xuICAgIGlmIChpbmZvLmJ1aWxkSWQgfHwgIWluZm8udHJhaWxpbmdTbGFzaCkge1xuICAgICAgICBwYXRobmFtZSA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShwYXRobmFtZSk7XG4gICAgfVxuICAgIGlmIChpbmZvLmJ1aWxkSWQpIHtcbiAgICAgICAgcGF0aG5hbWUgPSAoMCwgX2FkZHBhdGhzdWZmaXguYWRkUGF0aFN1ZmZpeCkoKDAsIF9hZGRwYXRocHJlZml4LmFkZFBhdGhQcmVmaXgpKHBhdGhuYW1lLCBcIi9fbmV4dC9kYXRhL1wiICsgaW5mby5idWlsZElkKSwgaW5mby5wYXRobmFtZSA9PT0gXCIvXCIgPyBcImluZGV4Lmpzb25cIiA6IFwiLmpzb25cIik7XG4gICAgfVxuICAgIHBhdGhuYW1lID0gKDAsIF9hZGRwYXRocHJlZml4LmFkZFBhdGhQcmVmaXgpKHBhdGhuYW1lLCBpbmZvLmJhc2VQYXRoKTtcbiAgICByZXR1cm4gIWluZm8uYnVpbGRJZCAmJiBpbmZvLnRyYWlsaW5nU2xhc2ggPyAhcGF0aG5hbWUuZW5kc1dpdGgoXCIvXCIpID8gKDAsIF9hZGRwYXRoc3VmZml4LmFkZFBhdGhTdWZmaXgpKHBhdGhuYW1lLCBcIi9cIikgOiBwYXRobmFtZSA6ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShwYXRobmFtZSk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1hdC1uZXh0LXBhdGhuYW1lLWluZm8uanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImZvcm1hdE5leHRQYXRobmFtZUluZm8iLCJfcmVtb3ZldHJhaWxpbmdzbGFzaCIsInJlcXVpcmUiLCJfYWRkcGF0aHByZWZpeCIsIl9hZGRwYXRoc3VmZml4IiwiX2FkZGxvY2FsZSIsImluZm8iLCJwYXRobmFtZSIsImFkZExvY2FsZSIsImxvY2FsZSIsImJ1aWxkSWQiLCJ1bmRlZmluZWQiLCJkZWZhdWx0TG9jYWxlIiwiaWdub3JlUHJlZml4IiwidHJhaWxpbmdTbGFzaCIsInJlbW92ZVRyYWlsaW5nU2xhc2giLCJhZGRQYXRoU3VmZml4IiwiYWRkUGF0aFByZWZpeCIsImJhc2VQYXRoIiwiZW5kc1dpdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/format-url.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/format-url.js ***! + \**********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n formatUrl: function() {\n return formatUrl;\n },\n urlObjectKeys: function() {\n return urlObjectKeys;\n },\n formatWithValidation: function() {\n return formatWithValidation;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _querystring = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ./querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\"));\nconst slashedProtocols = /https?|ftp|gopher|file/;\nfunction formatUrl(urlObj) {\n let { auth, hostname } = urlObj;\n let protocol = urlObj.protocol || \"\";\n let pathname = urlObj.pathname || \"\";\n let hash = urlObj.hash || \"\";\n let query = urlObj.query || \"\";\n let host = false;\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, \":\") + \"@\" : \"\";\n if (urlObj.host) {\n host = auth + urlObj.host;\n } else if (hostname) {\n host = auth + (~hostname.indexOf(\":\") ? \"[\" + hostname + \"]\" : hostname);\n if (urlObj.port) {\n host += \":\" + urlObj.port;\n }\n }\n if (query && typeof query === \"object\") {\n query = String(_querystring.urlQueryToSearchParams(query));\n }\n let search = urlObj.search || query && \"?\" + query || \"\";\n if (protocol && !protocol.endsWith(\":\")) protocol += \":\";\n if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {\n host = \"//\" + (host || \"\");\n if (pathname && pathname[0] !== \"/\") pathname = \"/\" + pathname;\n } else if (!host) {\n host = \"\";\n }\n if (hash && hash[0] !== \"#\") hash = \"#\" + hash;\n if (search && search[0] !== \"?\") search = \"?\" + search;\n pathname = pathname.replace(/[?#]/g, encodeURIComponent);\n search = search.replace(\"#\", \"%23\");\n return \"\" + protocol + host + pathname + search + hash;\n}\nconst urlObjectKeys = [\n \"auth\",\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"slashes\"\n];\nfunction formatWithValidation(url) {\n if (true) {\n if (url !== null && typeof url === \"object\") {\n Object.keys(url).forEach((key)=>{\n if (!urlObjectKeys.includes(key)) {\n console.warn(\"Unknown key passed via urlObject into url.format: \" + key);\n }\n });\n }\n }\n return formatUrl(url);\n} //# sourceMappingURL=format-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwuanMiLCJtYXBwaW5ncyI6IkFBQUEsdUNBQXVDO0FBQ3ZDLHNEQUFzRDtBQUN0RCxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLGdFQUFnRTtBQUNoRSxzRUFBc0U7QUFDdEUsc0VBQXNFO0FBQ3RFLDRFQUE0RTtBQUM1RSxxRUFBcUU7QUFDckUsd0JBQXdCO0FBQ3hCLEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsNkRBQTZEO0FBQzdELDRFQUE0RTtBQUM1RSwyRUFBMkU7QUFDM0Usd0VBQXdFO0FBQ3hFLDRFQUE0RTtBQUM1RSx5Q0FBeUM7QUFDNUI7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FJTjtBQUNBLFNBQVNJLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlWLE9BQU9DLGNBQWMsQ0FBQ1EsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTixTQUFTO0lBQ2JHLFdBQVc7UUFDUCxPQUFPQTtJQUNYO0lBQ0FDLGVBQWU7UUFDWCxPQUFPQTtJQUNYO0lBQ0FDLHNCQUFzQjtRQUNsQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxNQUFNTyw0QkFBNEJDLG1CQUFPQSxDQUFDLDhHQUEwQztBQUNwRixNQUFNQyxlQUFlLFdBQVcsR0FBR0YsMEJBQTBCRyxDQUFDLENBQUNGLG1CQUFPQSxDQUFDLHNGQUFlO0FBQ3RGLE1BQU1HLG1CQUFtQjtBQUN6QixTQUFTYixVQUFVYyxNQUFNO0lBQ3JCLElBQUksRUFBRUMsSUFBSSxFQUFFQyxRQUFRLEVBQUUsR0FBR0Y7SUFDekIsSUFBSUcsV0FBV0gsT0FBT0csUUFBUSxJQUFJO0lBQ2xDLElBQUlDLFdBQVdKLE9BQU9JLFFBQVEsSUFBSTtJQUNsQyxJQUFJQyxPQUFPTCxPQUFPSyxJQUFJLElBQUk7SUFDMUIsSUFBSUMsUUFBUU4sT0FBT00sS0FBSyxJQUFJO0lBQzVCLElBQUlDLE9BQU87SUFDWE4sT0FBT0EsT0FBT08sbUJBQW1CUCxNQUFNUSxPQUFPLENBQUMsUUFBUSxPQUFPLE1BQU07SUFDcEUsSUFBSVQsT0FBT08sSUFBSSxFQUFFO1FBQ2JBLE9BQU9OLE9BQU9ELE9BQU9PLElBQUk7SUFDN0IsT0FBTyxJQUFJTCxVQUFVO1FBQ2pCSyxPQUFPTixPQUFRLEVBQUNDLFNBQVNRLE9BQU8sQ0FBQyxPQUFPLE1BQU1SLFdBQVcsTUFBTUEsUUFBTztRQUN0RSxJQUFJRixPQUFPVyxJQUFJLEVBQUU7WUFDYkosUUFBUSxNQUFNUCxPQUFPVyxJQUFJO1FBQzdCO0lBQ0o7SUFDQSxJQUFJTCxTQUFTLE9BQU9BLFVBQVUsVUFBVTtRQUNwQ0EsUUFBUU0sT0FBT2YsYUFBYWdCLHNCQUFzQixDQUFDUDtJQUN2RDtJQUNBLElBQUlRLFNBQVNkLE9BQU9jLE1BQU0sSUFBSVIsU0FBUyxNQUFNQSxTQUFTO0lBQ3RELElBQUlILFlBQVksQ0FBQ0EsU0FBU1ksUUFBUSxDQUFDLE1BQU1aLFlBQVk7SUFDckQsSUFBSUgsT0FBT2dCLE9BQU8sSUFBSSxDQUFDLENBQUNiLFlBQVlKLGlCQUFpQmtCLElBQUksQ0FBQ2QsU0FBUSxLQUFNSSxTQUFTLE9BQU87UUFDcEZBLE9BQU8sT0FBUUEsQ0FBQUEsUUFBUSxFQUFDO1FBQ3hCLElBQUlILFlBQVlBLFFBQVEsQ0FBQyxFQUFFLEtBQUssS0FBS0EsV0FBVyxNQUFNQTtJQUMxRCxPQUFPLElBQUksQ0FBQ0csTUFBTTtRQUNkQSxPQUFPO0lBQ1g7SUFDQSxJQUFJRixRQUFRQSxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUtBLE9BQU8sTUFBTUE7SUFDMUMsSUFBSVMsVUFBVUEsTUFBTSxDQUFDLEVBQUUsS0FBSyxLQUFLQSxTQUFTLE1BQU1BO0lBQ2hEVixXQUFXQSxTQUFTSyxPQUFPLENBQUMsU0FBU0Q7SUFDckNNLFNBQVNBLE9BQU9MLE9BQU8sQ0FBQyxLQUFLO0lBQzdCLE9BQU8sS0FBS04sV0FBV0ksT0FBT0gsV0FBV1UsU0FBU1Q7QUFDdEQ7QUFDQSxNQUFNbEIsZ0JBQWdCO0lBQ2xCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNIO0FBQ0QsU0FBU0MscUJBQXFCOEIsR0FBRztJQUM3QixJQUFJQyxJQUFzQyxFQUFFO1FBQ3hDLElBQUlELFFBQVEsUUFBUSxPQUFPQSxRQUFRLFVBQVU7WUFDekNyQyxPQUFPdUMsSUFBSSxDQUFDRixLQUFLRyxPQUFPLENBQUMsQ0FBQ0M7Z0JBQ3RCLElBQUksQ0FBQ25DLGNBQWNvQyxRQUFRLENBQUNELE1BQU07b0JBQzlCRSxRQUFRQyxJQUFJLENBQUMsdURBQXVESDtnQkFDeEU7WUFDSjtRQUNKO0lBQ0o7SUFDQSxPQUFPcEMsVUFBVWdDO0FBQ3JCLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybC5qcz83YjUzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEZvcm1hdCBmdW5jdGlvbiBtb2RpZmllZCBmcm9tIG5vZGVqc1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGZvcm1hdFVybDogbnVsbCxcbiAgICB1cmxPYmplY3RLZXlzOiBudWxsLFxuICAgIGZvcm1hdFdpdGhWYWxpZGF0aW9uOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGZvcm1hdFVybDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRVcmw7XG4gICAgfSxcbiAgICB1cmxPYmplY3RLZXlzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVybE9iamVjdEtleXM7XG4gICAgfSxcbiAgICBmb3JtYXRXaXRoVmFsaWRhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRXaXRoVmFsaWRhdGlvbjtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgPSByZXF1aXJlKFwiQHN3Yy9oZWxwZXJzL18vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZFwiKTtcbmNvbnN0IF9xdWVyeXN0cmluZyA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5fKHJlcXVpcmUoXCIuL3F1ZXJ5c3RyaW5nXCIpKTtcbmNvbnN0IHNsYXNoZWRQcm90b2NvbHMgPSAvaHR0cHM/fGZ0cHxnb3BoZXJ8ZmlsZS87XG5mdW5jdGlvbiBmb3JtYXRVcmwodXJsT2JqKSB7XG4gICAgbGV0IHsgYXV0aCwgaG9zdG5hbWUgfSA9IHVybE9iajtcbiAgICBsZXQgcHJvdG9jb2wgPSB1cmxPYmoucHJvdG9jb2wgfHwgXCJcIjtcbiAgICBsZXQgcGF0aG5hbWUgPSB1cmxPYmoucGF0aG5hbWUgfHwgXCJcIjtcbiAgICBsZXQgaGFzaCA9IHVybE9iai5oYXNoIHx8IFwiXCI7XG4gICAgbGV0IHF1ZXJ5ID0gdXJsT2JqLnF1ZXJ5IHx8IFwiXCI7XG4gICAgbGV0IGhvc3QgPSBmYWxzZTtcbiAgICBhdXRoID0gYXV0aCA/IGVuY29kZVVSSUNvbXBvbmVudChhdXRoKS5yZXBsYWNlKC8lM0EvaSwgXCI6XCIpICsgXCJAXCIgOiBcIlwiO1xuICAgIGlmICh1cmxPYmouaG9zdCkge1xuICAgICAgICBob3N0ID0gYXV0aCArIHVybE9iai5ob3N0O1xuICAgIH0gZWxzZSBpZiAoaG9zdG5hbWUpIHtcbiAgICAgICAgaG9zdCA9IGF1dGggKyAofmhvc3RuYW1lLmluZGV4T2YoXCI6XCIpID8gXCJbXCIgKyBob3N0bmFtZSArIFwiXVwiIDogaG9zdG5hbWUpO1xuICAgICAgICBpZiAodXJsT2JqLnBvcnQpIHtcbiAgICAgICAgICAgIGhvc3QgKz0gXCI6XCIgKyB1cmxPYmoucG9ydDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnkgJiYgdHlwZW9mIHF1ZXJ5ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHF1ZXJ5ID0gU3RyaW5nKF9xdWVyeXN0cmluZy51cmxRdWVyeVRvU2VhcmNoUGFyYW1zKHF1ZXJ5KSk7XG4gICAgfVxuICAgIGxldCBzZWFyY2ggPSB1cmxPYmouc2VhcmNoIHx8IHF1ZXJ5ICYmIFwiP1wiICsgcXVlcnkgfHwgXCJcIjtcbiAgICBpZiAocHJvdG9jb2wgJiYgIXByb3RvY29sLmVuZHNXaXRoKFwiOlwiKSkgcHJvdG9jb2wgKz0gXCI6XCI7XG4gICAgaWYgKHVybE9iai5zbGFzaGVzIHx8ICghcHJvdG9jb2wgfHwgc2xhc2hlZFByb3RvY29scy50ZXN0KHByb3RvY29sKSkgJiYgaG9zdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgaG9zdCA9IFwiLy9cIiArIChob3N0IHx8IFwiXCIpO1xuICAgICAgICBpZiAocGF0aG5hbWUgJiYgcGF0aG5hbWVbMF0gIT09IFwiL1wiKSBwYXRobmFtZSA9IFwiL1wiICsgcGF0aG5hbWU7XG4gICAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgICAgICBob3N0ID0gXCJcIjtcbiAgICB9XG4gICAgaWYgKGhhc2ggJiYgaGFzaFswXSAhPT0gXCIjXCIpIGhhc2ggPSBcIiNcIiArIGhhc2g7XG4gICAgaWYgKHNlYXJjaCAmJiBzZWFyY2hbMF0gIT09IFwiP1wiKSBzZWFyY2ggPSBcIj9cIiArIHNlYXJjaDtcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1s/I10vZywgZW5jb2RlVVJJQ29tcG9uZW50KTtcbiAgICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZShcIiNcIiwgXCIlMjNcIik7XG4gICAgcmV0dXJuIFwiXCIgKyBwcm90b2NvbCArIGhvc3QgKyBwYXRobmFtZSArIHNlYXJjaCArIGhhc2g7XG59XG5jb25zdCB1cmxPYmplY3RLZXlzID0gW1xuICAgIFwiYXV0aFwiLFxuICAgIFwiaGFzaFwiLFxuICAgIFwiaG9zdFwiLFxuICAgIFwiaG9zdG5hbWVcIixcbiAgICBcImhyZWZcIixcbiAgICBcInBhdGhcIixcbiAgICBcInBhdGhuYW1lXCIsXG4gICAgXCJwb3J0XCIsXG4gICAgXCJwcm90b2NvbFwiLFxuICAgIFwicXVlcnlcIixcbiAgICBcInNlYXJjaFwiLFxuICAgIFwic2xhc2hlc1wiXG5dO1xuZnVuY3Rpb24gZm9ybWF0V2l0aFZhbGlkYXRpb24odXJsKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgaWYgKHVybCAhPT0gbnVsbCAmJiB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh1cmwpLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgICAgICAgICBpZiAoIXVybE9iamVjdEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJVbmtub3duIGtleSBwYXNzZWQgdmlhIHVybE9iamVjdCBpbnRvIHVybC5mb3JtYXQ6IFwiICsga2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0VXJsKHVybCk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcm1hdC11cmwuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiZm9ybWF0VXJsIiwidXJsT2JqZWN0S2V5cyIsImZvcm1hdFdpdGhWYWxpZGF0aW9uIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCIsInJlcXVpcmUiLCJfcXVlcnlzdHJpbmciLCJfIiwic2xhc2hlZFByb3RvY29scyIsInVybE9iaiIsImF1dGgiLCJob3N0bmFtZSIsInByb3RvY29sIiwicGF0aG5hbWUiLCJoYXNoIiwicXVlcnkiLCJob3N0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsImluZGV4T2YiLCJwb3J0IiwiU3RyaW5nIiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInNlYXJjaCIsImVuZHNXaXRoIiwic2xhc2hlcyIsInRlc3QiLCJ1cmwiLCJwcm9jZXNzIiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJpbmNsdWRlcyIsImNvbnNvbGUiLCJ3YXJuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/format-url.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js ***! + \*************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("// Translates a logical route into its pages asset path (relative from a common prefix)\n// \"asset path\" being its javascript file, data file, prerendered html,...\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return getAssetPathFromRoute;\n }\n}));\nfunction getAssetPathFromRoute(route, ext) {\n if (ext === void 0) ext = \"\";\n const path = route === \"/\" ? \"/index\" : /^\\/index(\\/|$)/.test(route) ? \"/index\" + route : route;\n return path + ext;\n} //# sourceMappingURL=get-asset-path-from-route.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1hc3NldC1wYXRoLWZyb20tcm91dGUuanMiLCJtYXBwaW5ncyI6IkFBQUEsdUZBQXVGO0FBQ3ZGLDBFQUEwRTtBQUM3RDtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0Esc0JBQXNCQyxLQUFLLEVBQUVDLEdBQUc7SUFDckMsSUFBSUEsUUFBUSxLQUFLLEdBQUdBLE1BQU07SUFDMUIsTUFBTUMsT0FBT0YsVUFBVSxNQUFNLFdBQVcsaUJBQWlCRyxJQUFJLENBQUNILFNBQVMsV0FBV0EsUUFBUUE7SUFDMUYsT0FBT0UsT0FBT0Q7QUFDbEIsRUFFQSxxREFBcUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9nZXQtYXNzZXQtcGF0aC1mcm9tLXJvdXRlLmpzP2E2ZmYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVHJhbnNsYXRlcyBhIGxvZ2ljYWwgcm91dGUgaW50byBpdHMgcGFnZXMgYXNzZXQgcGF0aCAocmVsYXRpdmUgZnJvbSBhIGNvbW1vbiBwcmVmaXgpXG4vLyBcImFzc2V0IHBhdGhcIiBiZWluZyBpdHMgamF2YXNjcmlwdCBmaWxlLCBkYXRhIGZpbGUsIHByZXJlbmRlcmVkIGh0bWwsLi4uXG5cInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZmF1bHRcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldEFzc2V0UGF0aEZyb21Sb3V0ZTtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGdldEFzc2V0UGF0aEZyb21Sb3V0ZShyb3V0ZSwgZXh0KSB7XG4gICAgaWYgKGV4dCA9PT0gdm9pZCAwKSBleHQgPSBcIlwiO1xuICAgIGNvbnN0IHBhdGggPSByb3V0ZSA9PT0gXCIvXCIgPyBcIi9pbmRleFwiIDogL15cXC9pbmRleChcXC98JCkvLnRlc3Qocm91dGUpID8gXCIvaW5kZXhcIiArIHJvdXRlIDogcm91dGU7XG4gICAgcmV0dXJuIHBhdGggKyBleHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1hc3NldC1wYXRoLWZyb20tcm91dGUuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImdldEFzc2V0UGF0aEZyb21Sb3V0ZSIsInJvdXRlIiwiZXh0IiwicGF0aCIsInRlc3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js ***! + \**********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getNextPathnameInfo\", ({\n enumerable: true,\n get: function() {\n return getNextPathnameInfo;\n }\n}));\nconst _normalizelocalepath = __webpack_require__(/*! ../../i18n/normalize-locale-path */ \"./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _removepathprefix = __webpack_require__(/*! ./remove-path-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction getNextPathnameInfo(pathname, options) {\n var _options_nextConfig;\n const { basePath, i18n, trailingSlash } = (_options_nextConfig = options.nextConfig) != null ? _options_nextConfig : {};\n const info = {\n pathname,\n trailingSlash: pathname !== \"/\" ? pathname.endsWith(\"/\") : trailingSlash\n };\n if (basePath && (0, _pathhasprefix.pathHasPrefix)(info.pathname, basePath)) {\n info.pathname = (0, _removepathprefix.removePathPrefix)(info.pathname, basePath);\n info.basePath = basePath;\n }\n let pathnameNoDataPrefix = info.pathname;\n if (info.pathname.startsWith(\"/_next/data/\") && info.pathname.endsWith(\".json\")) {\n const paths = info.pathname.replace(/^\\/_next\\/data\\//, \"\").replace(/\\.json$/, \"\").split(\"/\");\n const buildId = paths[0];\n info.buildId = buildId;\n pathnameNoDataPrefix = paths[1] !== \"index\" ? \"/\" + paths.slice(1).join(\"/\") : \"/\";\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix;\n }\n }\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, _normalizelocalepath.normalizeLocalePath)(info.pathname, i18n.locales);\n info.locale = result.detectedLocale;\n var _result_pathname;\n info.pathname = (_result_pathname = result.pathname) != null ? _result_pathname : info.pathname;\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, _normalizelocalepath.normalizeLocalePath)(pathnameNoDataPrefix, i18n.locales);\n if (result.detectedLocale) {\n info.locale = result.detectedLocale;\n }\n }\n }\n return info;\n} //# sourceMappingURL=get-next-pathname-info.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1uZXh0LXBhdGhuYW1lLWluZm8uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHVEQUFzRDtJQUNsREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHVCQUF1QkMsbUJBQU9BLENBQUMsMkdBQWtDO0FBQ3ZFLE1BQU1DLG9CQUFvQkQsbUJBQU9BLENBQUMsb0dBQXNCO0FBQ3hELE1BQU1FLGlCQUFpQkYsbUJBQU9BLENBQUMsOEZBQW1CO0FBQ2xELFNBQVNGLG9CQUFvQkssUUFBUSxFQUFFQyxPQUFPO0lBQzFDLElBQUlDO0lBQ0osTUFBTSxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsYUFBYSxFQUFFLEdBQUcsQ0FBQ0gsc0JBQXNCRCxRQUFRSyxVQUFVLEtBQUssT0FBT0osc0JBQXNCLENBQUM7SUFDdEgsTUFBTUssT0FBTztRQUNUUDtRQUNBSyxlQUFlTCxhQUFhLE1BQU1BLFNBQVNRLFFBQVEsQ0FBQyxPQUFPSDtJQUMvRDtJQUNBLElBQUlGLFlBQVksQ0FBQyxHQUFHSixlQUFlVSxhQUFhLEVBQUVGLEtBQUtQLFFBQVEsRUFBRUcsV0FBVztRQUN4RUksS0FBS1AsUUFBUSxHQUFHLENBQUMsR0FBR0Ysa0JBQWtCWSxnQkFBZ0IsRUFBRUgsS0FBS1AsUUFBUSxFQUFFRztRQUN2RUksS0FBS0osUUFBUSxHQUFHQTtJQUNwQjtJQUNBLElBQUlRLHVCQUF1QkosS0FBS1AsUUFBUTtJQUN4QyxJQUFJTyxLQUFLUCxRQUFRLENBQUNZLFVBQVUsQ0FBQyxtQkFBbUJMLEtBQUtQLFFBQVEsQ0FBQ1EsUUFBUSxDQUFDLFVBQVU7UUFDN0UsTUFBTUssUUFBUU4sS0FBS1AsUUFBUSxDQUFDYyxPQUFPLENBQUMsb0JBQW9CLElBQUlBLE9BQU8sQ0FBQyxXQUFXLElBQUlDLEtBQUssQ0FBQztRQUN6RixNQUFNQyxVQUFVSCxLQUFLLENBQUMsRUFBRTtRQUN4Qk4sS0FBS1MsT0FBTyxHQUFHQTtRQUNmTCx1QkFBdUJFLEtBQUssQ0FBQyxFQUFFLEtBQUssVUFBVSxNQUFNQSxNQUFNSSxLQUFLLENBQUMsR0FBR0MsSUFBSSxDQUFDLE9BQU87UUFDL0Usc0RBQXNEO1FBQ3RELGtEQUFrRDtRQUNsRCxJQUFJakIsUUFBUWtCLFNBQVMsS0FBSyxNQUFNO1lBQzVCWixLQUFLUCxRQUFRLEdBQUdXO1FBQ3BCO0lBQ0o7SUFDQSw0RUFBNEU7SUFDNUUseUJBQXlCO0lBQ3pCLElBQUlQLE1BQU07UUFDTixJQUFJZ0IsU0FBU25CLFFBQVFvQixZQUFZLEdBQUdwQixRQUFRb0IsWUFBWSxDQUFDQyxPQUFPLENBQUNmLEtBQUtQLFFBQVEsSUFBSSxDQUFDLEdBQUdKLHFCQUFxQjJCLG1CQUFtQixFQUFFaEIsS0FBS1AsUUFBUSxFQUFFSSxLQUFLb0IsT0FBTztRQUMzSmpCLEtBQUtrQixNQUFNLEdBQUdMLE9BQU9NLGNBQWM7UUFDbkMsSUFBSUM7UUFDSnBCLEtBQUtQLFFBQVEsR0FBRyxDQUFDMkIsbUJBQW1CUCxPQUFPcEIsUUFBUSxLQUFLLE9BQU8yQixtQkFBbUJwQixLQUFLUCxRQUFRO1FBQy9GLElBQUksQ0FBQ29CLE9BQU9NLGNBQWMsSUFBSW5CLEtBQUtTLE9BQU8sRUFBRTtZQUN4Q0ksU0FBU25CLFFBQVFvQixZQUFZLEdBQUdwQixRQUFRb0IsWUFBWSxDQUFDQyxPQUFPLENBQUNYLHdCQUF3QixDQUFDLEdBQUdmLHFCQUFxQjJCLG1CQUFtQixFQUFFWixzQkFBc0JQLEtBQUtvQixPQUFPO1lBQ3JLLElBQUlKLE9BQU9NLGNBQWMsRUFBRTtnQkFDdkJuQixLQUFLa0IsTUFBTSxHQUFHTCxPQUFPTSxjQUFjO1lBQ3ZDO1FBQ0o7SUFDSjtJQUNBLE9BQU9uQjtBQUNYLEVBRUEsa0RBQWtEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LW5leHQtcGF0aG5hbWUtaW5mby5qcz8wZDI2Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0TmV4dFBhdGhuYW1lSW5mb1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0TmV4dFBhdGhuYW1lSW5mbztcbiAgICB9XG59KTtcbmNvbnN0IF9ub3JtYWxpemVsb2NhbGVwYXRoID0gcmVxdWlyZShcIi4uLy4uL2kxOG4vbm9ybWFsaXplLWxvY2FsZS1wYXRoXCIpO1xuY29uc3QgX3JlbW92ZXBhdGhwcmVmaXggPSByZXF1aXJlKFwiLi9yZW1vdmUtcGF0aC1wcmVmaXhcIik7XG5jb25zdCBfcGF0aGhhc3ByZWZpeCA9IHJlcXVpcmUoXCIuL3BhdGgtaGFzLXByZWZpeFwiKTtcbmZ1bmN0aW9uIGdldE5leHRQYXRobmFtZUluZm8ocGF0aG5hbWUsIG9wdGlvbnMpIHtcbiAgICB2YXIgX29wdGlvbnNfbmV4dENvbmZpZztcbiAgICBjb25zdCB7IGJhc2VQYXRoLCBpMThuLCB0cmFpbGluZ1NsYXNoIH0gPSAoX29wdGlvbnNfbmV4dENvbmZpZyA9IG9wdGlvbnMubmV4dENvbmZpZykgIT0gbnVsbCA/IF9vcHRpb25zX25leHRDb25maWcgOiB7fTtcbiAgICBjb25zdCBpbmZvID0ge1xuICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgdHJhaWxpbmdTbGFzaDogcGF0aG5hbWUgIT09IFwiL1wiID8gcGF0aG5hbWUuZW5kc1dpdGgoXCIvXCIpIDogdHJhaWxpbmdTbGFzaFxuICAgIH07XG4gICAgaWYgKGJhc2VQYXRoICYmICgwLCBfcGF0aGhhc3ByZWZpeC5wYXRoSGFzUHJlZml4KShpbmZvLnBhdGhuYW1lLCBiYXNlUGF0aCkpIHtcbiAgICAgICAgaW5mby5wYXRobmFtZSA9ICgwLCBfcmVtb3ZlcGF0aHByZWZpeC5yZW1vdmVQYXRoUHJlZml4KShpbmZvLnBhdGhuYW1lLCBiYXNlUGF0aCk7XG4gICAgICAgIGluZm8uYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICB9XG4gICAgbGV0IHBhdGhuYW1lTm9EYXRhUHJlZml4ID0gaW5mby5wYXRobmFtZTtcbiAgICBpZiAoaW5mby5wYXRobmFtZS5zdGFydHNXaXRoKFwiL19uZXh0L2RhdGEvXCIpICYmIGluZm8ucGF0aG5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICBjb25zdCBwYXRocyA9IGluZm8ucGF0aG5hbWUucmVwbGFjZSgvXlxcL19uZXh0XFwvZGF0YVxcLy8sIFwiXCIpLnJlcGxhY2UoL1xcLmpzb24kLywgXCJcIikuc3BsaXQoXCIvXCIpO1xuICAgICAgICBjb25zdCBidWlsZElkID0gcGF0aHNbMF07XG4gICAgICAgIGluZm8uYnVpbGRJZCA9IGJ1aWxkSWQ7XG4gICAgICAgIHBhdGhuYW1lTm9EYXRhUHJlZml4ID0gcGF0aHNbMV0gIT09IFwiaW5kZXhcIiA/IFwiL1wiICsgcGF0aHMuc2xpY2UoMSkuam9pbihcIi9cIikgOiBcIi9cIjtcbiAgICAgICAgLy8gdXBkYXRlIHBhdGhuYW1lIHdpdGggbm9ybWFsaXplZCBpZiBlbmFibGVkIGFsdGhvdWdoXG4gICAgICAgIC8vIHdlIHVzZSBub3JtYWxpemVkIHRvIHBvcHVsYXRlIGxvY2FsZSBpbmZvIHN0aWxsXG4gICAgICAgIGlmIChvcHRpb25zLnBhcnNlRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaW5mby5wYXRobmFtZSA9IHBhdGhuYW1lTm9EYXRhUHJlZml4O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHByb3ZpZGVkLCB1c2UgdGhlIGxvY2FsZSByb3V0ZSBub3JtYWxpemVyIHRvIGRldGVjdCB0aGUgbG9jYWxlIGluc3RlYWRcbiAgICAvLyBvZiB0aGUgZnVuY3Rpb24gYmVsb3cuXG4gICAgaWYgKGkxOG4pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG9wdGlvbnMuaTE4blByb3ZpZGVyID8gb3B0aW9ucy5pMThuUHJvdmlkZXIuYW5hbHl6ZShpbmZvLnBhdGhuYW1lKSA6ICgwLCBfbm9ybWFsaXplbG9jYWxlcGF0aC5ub3JtYWxpemVMb2NhbGVQYXRoKShpbmZvLnBhdGhuYW1lLCBpMThuLmxvY2FsZXMpO1xuICAgICAgICBpbmZvLmxvY2FsZSA9IHJlc3VsdC5kZXRlY3RlZExvY2FsZTtcbiAgICAgICAgdmFyIF9yZXN1bHRfcGF0aG5hbWU7XG4gICAgICAgIGluZm8ucGF0aG5hbWUgPSAoX3Jlc3VsdF9wYXRobmFtZSA9IHJlc3VsdC5wYXRobmFtZSkgIT0gbnVsbCA/IF9yZXN1bHRfcGF0aG5hbWUgOiBpbmZvLnBhdGhuYW1lO1xuICAgICAgICBpZiAoIXJlc3VsdC5kZXRlY3RlZExvY2FsZSAmJiBpbmZvLmJ1aWxkSWQpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG9wdGlvbnMuaTE4blByb3ZpZGVyID8gb3B0aW9ucy5pMThuUHJvdmlkZXIuYW5hbHl6ZShwYXRobmFtZU5vRGF0YVByZWZpeCkgOiAoMCwgX25vcm1hbGl6ZWxvY2FsZXBhdGgubm9ybWFsaXplTG9jYWxlUGF0aCkocGF0aG5hbWVOb0RhdGFQcmVmaXgsIGkxOG4ubG9jYWxlcyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmRldGVjdGVkTG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgaW5mby5sb2NhbGUgPSByZXN1bHQuZGV0ZWN0ZWRMb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1uZXh0LXBhdGhuYW1lLWluZm8uanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImdldE5leHRQYXRobmFtZUluZm8iLCJfbm9ybWFsaXplbG9jYWxlcGF0aCIsInJlcXVpcmUiLCJfcmVtb3ZlcGF0aHByZWZpeCIsIl9wYXRoaGFzcHJlZml4IiwicGF0aG5hbWUiLCJvcHRpb25zIiwiX29wdGlvbnNfbmV4dENvbmZpZyIsImJhc2VQYXRoIiwiaTE4biIsInRyYWlsaW5nU2xhc2giLCJuZXh0Q29uZmlnIiwiaW5mbyIsImVuZHNXaXRoIiwicGF0aEhhc1ByZWZpeCIsInJlbW92ZVBhdGhQcmVmaXgiLCJwYXRobmFtZU5vRGF0YVByZWZpeCIsInN0YXJ0c1dpdGgiLCJwYXRocyIsInJlcGxhY2UiLCJzcGxpdCIsImJ1aWxkSWQiLCJzbGljZSIsImpvaW4iLCJwYXJzZURhdGEiLCJyZXN1bHQiLCJpMThuUHJvdmlkZXIiLCJhbmFseXplIiwibm9ybWFsaXplTG9jYWxlUGF0aCIsImxvY2FsZXMiLCJsb2NhbGUiLCJkZXRlY3RlZExvY2FsZSIsIl9yZXN1bHRfcGF0aG5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js": +/*!********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js ***! + \********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * Run function with `scroll-behavior: auto` applied to `<html/>`.\n * This css change will be reverted after the function finishes.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"handleSmoothScroll\", ({\n enumerable: true,\n get: function() {\n return handleSmoothScroll;\n }\n}));\nfunction handleSmoothScroll(fn, options) {\n if (options === void 0) options = {};\n // if only the hash is changed, we don't need to disable smooth scrolling\n // we only care to prevent smooth scrolling when navigating to a new page to avoid jarring UX\n if (options.onlyHashChange) {\n fn();\n return;\n }\n const htmlElement = document.documentElement;\n const existing = htmlElement.style.scrollBehavior;\n htmlElement.style.scrollBehavior = \"auto\";\n if (!options.dontForceLayout) {\n // In Chrome-based browsers we need to force reflow before calling `scrollTo`.\n // Otherwise it will not pickup the change in scrollBehavior\n // More info here: https://github.com/vercel/next.js/issues/40719#issuecomment-1336248042\n htmlElement.getClientRects();\n }\n fn();\n htmlElement.style.scrollBehavior = existing;\n} //# sourceMappingURL=handle-smooth-scroll.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2hhbmRsZS1zbW9vdGgtc2Nyb2xsLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUFnQjtBQUNqQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHNEQUFxRDtJQUNqREksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLG1CQUFtQkMsRUFBRSxFQUFFQyxPQUFPO0lBQ25DLElBQUlBLFlBQVksS0FBSyxHQUFHQSxVQUFVLENBQUM7SUFDbkMseUVBQXlFO0lBQ3pFLDZGQUE2RjtJQUM3RixJQUFJQSxRQUFRQyxjQUFjLEVBQUU7UUFDeEJGO1FBQ0E7SUFDSjtJQUNBLE1BQU1HLGNBQWNDLFNBQVNDLGVBQWU7SUFDNUMsTUFBTUMsV0FBV0gsWUFBWUksS0FBSyxDQUFDQyxjQUFjO0lBQ2pETCxZQUFZSSxLQUFLLENBQUNDLGNBQWMsR0FBRztJQUNuQyxJQUFJLENBQUNQLFFBQVFRLGVBQWUsRUFBRTtRQUMxQiw4RUFBOEU7UUFDOUUsNERBQTREO1FBQzVELHlGQUF5RjtRQUN6Rk4sWUFBWU8sY0FBYztJQUM5QjtJQUNBVjtJQUNBRyxZQUFZSSxLQUFLLENBQUNDLGNBQWMsR0FBR0Y7QUFDdkMsRUFFQSxnREFBZ0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9oYW5kbGUtc21vb3RoLXNjcm9sbC5qcz82NTYzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVuIGZ1bmN0aW9uIHdpdGggYHNjcm9sbC1iZWhhdmlvcjogYXV0b2AgYXBwbGllZCB0byBgPGh0bWwvPmAuXG4gKiBUaGlzIGNzcyBjaGFuZ2Ugd2lsbCBiZSByZXZlcnRlZCBhZnRlciB0aGUgZnVuY3Rpb24gZmluaXNoZXMuXG4gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoYW5kbGVTbW9vdGhTY3JvbGxcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVNtb290aFNjcm9sbDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVNtb290aFNjcm9sbChmbiwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIG9wdGlvbnMgPSB7fTtcbiAgICAvLyBpZiBvbmx5IHRoZSBoYXNoIGlzIGNoYW5nZWQsIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBzbW9vdGggc2Nyb2xsaW5nXG4gICAgLy8gd2Ugb25seSBjYXJlIHRvIHByZXZlbnQgc21vb3RoIHNjcm9sbGluZyB3aGVuIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZSB0byBhdm9pZCBqYXJyaW5nIFVYXG4gICAgaWYgKG9wdGlvbnMub25seUhhc2hDaGFuZ2UpIHtcbiAgICAgICAgZm4oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBjb25zdCBleGlzdGluZyA9IGh0bWxFbGVtZW50LnN0eWxlLnNjcm9sbEJlaGF2aW9yO1xuICAgIGh0bWxFbGVtZW50LnN0eWxlLnNjcm9sbEJlaGF2aW9yID0gXCJhdXRvXCI7XG4gICAgaWYgKCFvcHRpb25zLmRvbnRGb3JjZUxheW91dCkge1xuICAgICAgICAvLyBJbiBDaHJvbWUtYmFzZWQgYnJvd3NlcnMgd2UgbmVlZCB0byBmb3JjZSByZWZsb3cgYmVmb3JlIGNhbGxpbmcgYHNjcm9sbFRvYC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGl0IHdpbGwgbm90IHBpY2t1cCB0aGUgY2hhbmdlIGluIHNjcm9sbEJlaGF2aW9yXG4gICAgICAgIC8vIE1vcmUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanMvaXNzdWVzLzQwNzE5I2lzc3VlY29tbWVudC0xMzM2MjQ4MDQyXG4gICAgICAgIGh0bWxFbGVtZW50LmdldENsaWVudFJlY3RzKCk7XG4gICAgfVxuICAgIGZuKCk7XG4gICAgaHRtbEVsZW1lbnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBleGlzdGluZztcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFuZGxlLXNtb290aC1zY3JvbGwuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImhhbmRsZVNtb290aFNjcm9sbCIsImZuIiwib3B0aW9ucyIsIm9ubHlIYXNoQ2hhbmdlIiwiaHRtbEVsZW1lbnQiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImV4aXN0aW5nIiwic3R5bGUiLCJzY3JvbGxCZWhhdmlvciIsImRvbnRGb3JjZUxheW91dCIsImdldENsaWVudFJlY3RzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/index.js": +/*!*****************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/index.js ***! + \*****************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getSortedRoutes: function() {\n return _sortedroutes.getSortedRoutes;\n },\n isDynamicRoute: function() {\n return _isdynamic.isDynamicRoute;\n }\n});\nconst _sortedroutes = __webpack_require__(/*! ./sorted-routes */ \"./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\");\nconst _isdynamic = __webpack_require__(/*! ./is-dynamic */ \"./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\"); //# sourceMappingURL=index.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBR047QUFDQSxTQUFTRyxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVCxPQUFPQyxjQUFjLENBQUNPLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUUwsU0FBUztJQUNiRyxpQkFBaUI7UUFDYixPQUFPUSxjQUFjUixlQUFlO0lBQ3hDO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9RLFdBQVdSLGNBQWM7SUFDcEM7QUFDSjtBQUNBLE1BQU1PLGdCQUFnQkUsbUJBQU9BLENBQUMsMEZBQWlCO0FBQy9DLE1BQU1ELGFBQWFDLG1CQUFPQSxDQUFDLG9GQUFjLEdBRXpDLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2luZGV4LmpzP2Y1MjUiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBnZXRTb3J0ZWRSb3V0ZXM6IG51bGwsXG4gICAgaXNEeW5hbWljUm91dGU6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZ2V0U29ydGVkUm91dGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zb3J0ZWRyb3V0ZXMuZ2V0U29ydGVkUm91dGVzO1xuICAgIH0sXG4gICAgaXNEeW5hbWljUm91dGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2lzZHluYW1pYy5pc0R5bmFtaWNSb3V0ZTtcbiAgICB9XG59KTtcbmNvbnN0IF9zb3J0ZWRyb3V0ZXMgPSByZXF1aXJlKFwiLi9zb3J0ZWQtcm91dGVzXCIpO1xuY29uc3QgX2lzZHluYW1pYyA9IHJlcXVpcmUoXCIuL2lzLWR5bmFtaWNcIik7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIm1vZHVsZSIsImdldFNvcnRlZFJvdXRlcyIsImlzRHluYW1pY1JvdXRlIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX3NvcnRlZHJvdXRlcyIsIl9pc2R5bmFtaWMiLCJyZXF1aXJlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/index.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js": +/*!**************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js ***! + \**************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"interpolateAs\", ({\n enumerable: true,\n get: function() {\n return interpolateAs;\n }\n}));\nconst _routematcher = __webpack_require__(/*! ./route-matcher */ \"./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./route-regex */ \"./node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction interpolateAs(route, asPathname, query) {\n let interpolatedRoute = \"\";\n const dynamicRegex = (0, _routeregex.getRouteRegex)(route);\n const dynamicGroups = dynamicRegex.groups;\n const dynamicMatches = (asPathname !== route ? (0, _routematcher.getRouteMatcher)(dynamicRegex)(asPathname) : \"\") || // Fall back to reading the values from the href\n // TODO: should this take priority; also need to change in the router.\n query;\n interpolatedRoute = route;\n const params = Object.keys(dynamicGroups);\n if (!params.every((param)=>{\n let value = dynamicMatches[param] || \"\";\n const { repeat, optional } = dynamicGroups[param];\n // support single-level catch-all\n // TODO: more robust handling for user-error (passing `/`)\n let replaced = \"[\" + (repeat ? \"...\" : \"\") + param + \"]\";\n if (optional) {\n replaced = (!value ? \"/\" : \"\") + \"[\" + replaced + \"]\";\n }\n if (repeat && !Array.isArray(value)) value = [\n value\n ];\n return (optional || param in dynamicMatches) && // Interpolate group into data URL if present\n (interpolatedRoute = interpolatedRoute.replace(replaced, repeat ? value.map(// path delimiter escaped since they are being inserted\n // into the URL and we expect URL encoded segments\n // when parsing dynamic route params\n (segment)=>encodeURIComponent(segment)).join(\"/\") : encodeURIComponent(value)) || \"/\");\n })) {\n interpolatedRoute = \"\" // did not satisfy all requirements\n ;\n // n.b. We ignore this error because we handle warning for this case in\n // development in the `<Link>` component directly.\n }\n return {\n params,\n result: interpolatedRoute\n };\n} //# sourceMappingURL=interpolate-as.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2ludGVycG9sYXRlLWFzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCxpREFBZ0Q7SUFDNUNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixNQUFNQyxnQkFBZ0JDLG1CQUFPQSxDQUFDLDBGQUFpQjtBQUMvQyxNQUFNQyxjQUFjRCxtQkFBT0EsQ0FBQyxzRkFBZTtBQUMzQyxTQUFTRixjQUFjSSxLQUFLLEVBQUVDLFVBQVUsRUFBRUMsS0FBSztJQUMzQyxJQUFJQyxvQkFBb0I7SUFDeEIsTUFBTUMsZUFBZSxDQUFDLEdBQUdMLFlBQVlNLGFBQWEsRUFBRUw7SUFDcEQsTUFBTU0sZ0JBQWdCRixhQUFhRyxNQUFNO0lBQ3pDLE1BQU1DLGlCQUNOLENBQUNQLGVBQWVELFFBQVEsQ0FBQyxHQUFHSCxjQUFjWSxlQUFlLEVBQUVMLGNBQWNILGNBQWMsRUFBQyxLQUFNLGdEQUFnRDtJQUM5SSxzRUFBc0U7SUFDdEVDO0lBQ0FDLG9CQUFvQkg7SUFDcEIsTUFBTVUsU0FBU3BCLE9BQU9xQixJQUFJLENBQUNMO0lBQzNCLElBQUksQ0FBQ0ksT0FBT0UsS0FBSyxDQUFDLENBQUNDO1FBQ2YsSUFBSXBCLFFBQVFlLGNBQWMsQ0FBQ0ssTUFBTSxJQUFJO1FBQ3JDLE1BQU0sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUUsR0FBR1QsYUFBYSxDQUFDTyxNQUFNO1FBQ2pELGlDQUFpQztRQUNqQywwREFBMEQ7UUFDMUQsSUFBSUcsV0FBVyxNQUFPRixDQUFBQSxTQUFTLFFBQVEsRUFBQyxJQUFLRCxRQUFRO1FBQ3JELElBQUlFLFVBQVU7WUFDVkMsV0FBVyxDQUFDLENBQUN2QixRQUFRLE1BQU0sRUFBQyxJQUFLLE1BQU11QixXQUFXO1FBQ3REO1FBQ0EsSUFBSUYsVUFBVSxDQUFDRyxNQUFNQyxPQUFPLENBQUN6QixRQUFRQSxRQUFRO1lBQ3pDQTtTQUNIO1FBQ0QsT0FBTyxDQUFDc0IsWUFBWUYsU0FBU0wsY0FBYSxLQUFNLDZDQUE2QztRQUM1RkwsQ0FBQUEsb0JBQW9CQSxrQkFBa0JnQixPQUFPLENBQUNILFVBQVVGLFNBQVNyQixNQUFNMkIsR0FBRyxDQUMzRSx1REFBdUQ7UUFDdkQsa0RBQWtEO1FBQ2xELG9DQUFvQztRQUNwQyxDQUFDQyxVQUFVQyxtQkFBbUJELFVBQVVFLElBQUksQ0FBQyxPQUFPRCxtQkFBbUI3QixXQUFXLEdBQUU7SUFDeEYsSUFBSTtRQUNBVSxvQkFBb0IsR0FBRyxtQ0FBbUM7O0lBRTlELHVFQUF1RTtJQUN2RSxrREFBa0Q7SUFDbEQ7SUFDQSxPQUFPO1FBQ0hPO1FBQ0FjLFFBQVFyQjtJQUNaO0FBQ0osRUFFQSwwQ0FBMEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbnRlcnBvbGF0ZS1hcy5qcz9kMGU0Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW50ZXJwb2xhdGVBc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGVBcztcbiAgICB9XG59KTtcbmNvbnN0IF9yb3V0ZW1hdGNoZXIgPSByZXF1aXJlKFwiLi9yb3V0ZS1tYXRjaGVyXCIpO1xuY29uc3QgX3JvdXRlcmVnZXggPSByZXF1aXJlKFwiLi9yb3V0ZS1yZWdleFwiKTtcbmZ1bmN0aW9uIGludGVycG9sYXRlQXMocm91dGUsIGFzUGF0aG5hbWUsIHF1ZXJ5KSB7XG4gICAgbGV0IGludGVycG9sYXRlZFJvdXRlID0gXCJcIjtcbiAgICBjb25zdCBkeW5hbWljUmVnZXggPSAoMCwgX3JvdXRlcmVnZXguZ2V0Um91dGVSZWdleCkocm91dGUpO1xuICAgIGNvbnN0IGR5bmFtaWNHcm91cHMgPSBkeW5hbWljUmVnZXguZ3JvdXBzO1xuICAgIGNvbnN0IGR5bmFtaWNNYXRjaGVzID0gLy8gVHJ5IHRvIG1hdGNoIHRoZSBkeW5hbWljIHJvdXRlIGFnYWluc3QgdGhlIGFzUGF0aFxuICAgIChhc1BhdGhuYW1lICE9PSByb3V0ZSA/ICgwLCBfcm91dGVtYXRjaGVyLmdldFJvdXRlTWF0Y2hlcikoZHluYW1pY1JlZ2V4KShhc1BhdGhuYW1lKSA6IFwiXCIpIHx8IC8vIEZhbGwgYmFjayB0byByZWFkaW5nIHRoZSB2YWx1ZXMgZnJvbSB0aGUgaHJlZlxuICAgIC8vIFRPRE86IHNob3VsZCB0aGlzIHRha2UgcHJpb3JpdHk7IGFsc28gbmVlZCB0byBjaGFuZ2UgaW4gdGhlIHJvdXRlci5cbiAgICBxdWVyeTtcbiAgICBpbnRlcnBvbGF0ZWRSb3V0ZSA9IHJvdXRlO1xuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5rZXlzKGR5bmFtaWNHcm91cHMpO1xuICAgIGlmICghcGFyYW1zLmV2ZXJ5KChwYXJhbSk9PntcbiAgICAgICAgbGV0IHZhbHVlID0gZHluYW1pY01hdGNoZXNbcGFyYW1dIHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IHsgcmVwZWF0LCBvcHRpb25hbCB9ID0gZHluYW1pY0dyb3Vwc1twYXJhbV07XG4gICAgICAgIC8vIHN1cHBvcnQgc2luZ2xlLWxldmVsIGNhdGNoLWFsbFxuICAgICAgICAvLyBUT0RPOiBtb3JlIHJvYnVzdCBoYW5kbGluZyBmb3IgdXNlci1lcnJvciAocGFzc2luZyBgL2ApXG4gICAgICAgIGxldCByZXBsYWNlZCA9IFwiW1wiICsgKHJlcGVhdCA/IFwiLi4uXCIgOiBcIlwiKSArIHBhcmFtICsgXCJdXCI7XG4gICAgICAgIGlmIChvcHRpb25hbCkge1xuICAgICAgICAgICAgcmVwbGFjZWQgPSAoIXZhbHVlID8gXCIvXCIgOiBcIlwiKSArIFwiW1wiICsgcmVwbGFjZWQgKyBcIl1cIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVwZWF0ICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUgPSBbXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gKG9wdGlvbmFsIHx8IHBhcmFtIGluIGR5bmFtaWNNYXRjaGVzKSAmJiAvLyBJbnRlcnBvbGF0ZSBncm91cCBpbnRvIGRhdGEgVVJMIGlmIHByZXNlbnRcbiAgICAgICAgKGludGVycG9sYXRlZFJvdXRlID0gaW50ZXJwb2xhdGVkUm91dGUucmVwbGFjZShyZXBsYWNlZCwgcmVwZWF0ID8gdmFsdWUubWFwKC8vIHRoZXNlIHZhbHVlcyBzaG91bGQgYmUgZnVsbHkgZW5jb2RlZCBpbnN0ZWFkIG9mIGp1c3RcbiAgICAgICAgLy8gcGF0aCBkZWxpbWl0ZXIgZXNjYXBlZCBzaW5jZSB0aGV5IGFyZSBiZWluZyBpbnNlcnRlZFxuICAgICAgICAvLyBpbnRvIHRoZSBVUkwgYW5kIHdlIGV4cGVjdCBVUkwgZW5jb2RlZCBzZWdtZW50c1xuICAgICAgICAvLyB3aGVuIHBhcnNpbmcgZHluYW1pYyByb3V0ZSBwYXJhbXNcbiAgICAgICAgKHNlZ21lbnQpPT5lbmNvZGVVUklDb21wb25lbnQoc2VnbWVudCkpLmpvaW4oXCIvXCIpIDogZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSkgfHwgXCIvXCIpO1xuICAgIH0pKSB7XG4gICAgICAgIGludGVycG9sYXRlZFJvdXRlID0gXCJcIiAvLyBkaWQgbm90IHNhdGlzZnkgYWxsIHJlcXVpcmVtZW50c1xuICAgICAgICA7XG4gICAgLy8gbi5iLiBXZSBpZ25vcmUgdGhpcyBlcnJvciBiZWNhdXNlIHdlIGhhbmRsZSB3YXJuaW5nIGZvciB0aGlzIGNhc2UgaW5cbiAgICAvLyBkZXZlbG9wbWVudCBpbiB0aGUgYDxMaW5rPmAgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbXMsXG4gICAgICAgIHJlc3VsdDogaW50ZXJwb2xhdGVkUm91dGVcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcnBvbGF0ZS1hcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaW50ZXJwb2xhdGVBcyIsIl9yb3V0ZW1hdGNoZXIiLCJyZXF1aXJlIiwiX3JvdXRlcmVnZXgiLCJyb3V0ZSIsImFzUGF0aG5hbWUiLCJxdWVyeSIsImludGVycG9sYXRlZFJvdXRlIiwiZHluYW1pY1JlZ2V4IiwiZ2V0Um91dGVSZWdleCIsImR5bmFtaWNHcm91cHMiLCJncm91cHMiLCJkeW5hbWljTWF0Y2hlcyIsImdldFJvdXRlTWF0Y2hlciIsInBhcmFtcyIsImtleXMiLCJldmVyeSIsInBhcmFtIiwicmVwZWF0Iiwib3B0aW9uYWwiLCJyZXBsYWNlZCIsIkFycmF5IiwiaXNBcnJheSIsInJlcGxhY2UiLCJtYXAiLCJzZWdtZW50IiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwiam9pbiIsInJlc3VsdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/is-bot.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/is-bot.js ***! + \******************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isBot\", ({\n enumerable: true,\n get: function() {\n return isBot;\n }\n}));\nfunction isBot(userAgent) {\n return /Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver/i.test(userAgent);\n} //# sourceMappingURL=is-bot.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWJvdC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgseUNBQXdDO0lBQ3BDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsU0FBU0EsTUFBTUMsU0FBUztJQUNwQixPQUFPLG9WQUFvVkMsSUFBSSxDQUFDRDtBQUNwVyxFQUVBLGtDQUFrQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWJvdC5qcz8wNzE1Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCb3RcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzQm90O1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gaXNCb3QodXNlckFnZW50KSB7XG4gICAgcmV0dXJuIC9Hb29nbGVib3R8TWVkaWFwYXJ0bmVycy1Hb29nbGV8QWRzQm90LUdvb2dsZXxnb29nbGV3ZWJsaWdodHxTdG9yZWJvdC1Hb29nbGV8R29vZ2xlLVBhZ2VSZW5kZXJlcnxCaW5nYm90fEJpbmdQcmV2aWV3fFNsdXJwfER1Y2tEdWNrQm90fGJhaWR1c3BpZGVyfHlhbmRleHxzb2dvdXxMaW5rZWRJbkJvdHxiaXRseWJvdHx0dW1ibHJ8dmtTaGFyZXxxdW9yYSBsaW5rIHByZXZpZXd8ZmFjZWJvb2tleHRlcm5hbGhpdHxmYWNlYm9va2NhdGFsb2d8VHdpdHRlcmJvdHxhcHBsZWJvdHxyZWRkaXRib3R8U2xhY2tib3R8RGlzY29yZGJvdHxXaGF0c0FwcHxTa3lwZVVyaVByZXZpZXd8aWFfYXJjaGl2ZXIvaS50ZXN0KHVzZXJBZ2VudCk7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzLWJvdC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiaXNCb3QiLCJ1c2VyQWdlbnQiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/is-bot.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js ***! + \**********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isDynamicRoute\", ({\n enumerable: true,\n get: function() {\n return isDynamicRoute;\n }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"./node_modules/next/dist/server/future/helpers/interception-routes.js\");\n// Identify /[param]/ in route string\nconst TEST_ROUTE = /\\/\\[[^/]+?\\](?=\\/|$)/;\nfunction isDynamicRoute(route) {\n if ((0, _interceptionroutes.isInterceptionRouteAppPath)(route)) {\n route = (0, _interceptionroutes.extractInterceptionRouteInformation)(route).interceptedRoute;\n }\n return TEST_ROUTE.test(route);\n} //# sourceMappingURL=is-dynamic.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWR5bmFtaWMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGtEQUFpRDtJQUM3Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLHNCQUFzQkMsbUJBQU9BLENBQUMsb0lBQXVEO0FBQzNGLHFDQUFxQztBQUNyQyxNQUFNQyxhQUFhO0FBQ25CLFNBQVNILGVBQWVJLEtBQUs7SUFDekIsSUFBSSxDQUFDLEdBQUdILG9CQUFvQkksMEJBQTBCLEVBQUVELFFBQVE7UUFDNURBLFFBQVEsQ0FBQyxHQUFHSCxvQkFBb0JLLG1DQUFtQyxFQUFFRixPQUFPRyxnQkFBZ0I7SUFDaEc7SUFDQSxPQUFPSixXQUFXSyxJQUFJLENBQUNKO0FBQzNCLEVBRUEsc0NBQXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtZHluYW1pYy5qcz80NmY5Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNEeW5hbWljUm91dGVcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzRHluYW1pY1JvdXRlO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyY2VwdGlvbnJvdXRlcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9zZXJ2ZXIvZnV0dXJlL2hlbHBlcnMvaW50ZXJjZXB0aW9uLXJvdXRlc1wiKTtcbi8vIElkZW50aWZ5IC9bcGFyYW1dLyBpbiByb3V0ZSBzdHJpbmdcbmNvbnN0IFRFU1RfUk9VVEUgPSAvXFwvXFxbW14vXSs/XFxdKD89XFwvfCQpLztcbmZ1bmN0aW9uIGlzRHluYW1pY1JvdXRlKHJvdXRlKSB7XG4gICAgaWYgKCgwLCBfaW50ZXJjZXB0aW9ucm91dGVzLmlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoKShyb3V0ZSkpIHtcbiAgICAgICAgcm91dGUgPSAoMCwgX2ludGVyY2VwdGlvbnJvdXRlcy5leHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbikocm91dGUpLmludGVyY2VwdGVkUm91dGU7XG4gICAgfVxuICAgIHJldHVybiBURVNUX1JPVVRFLnRlc3Qocm91dGUpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1keW5hbWljLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJpc0R5bmFtaWNSb3V0ZSIsIl9pbnRlcmNlcHRpb25yb3V0ZXMiLCJyZXF1aXJlIiwiVEVTVF9ST1VURSIsInJvdXRlIiwiaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgiLCJleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbiIsImludGVyY2VwdGVkUm91dGUiLCJ0ZXN0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/is-local-url.js": +/*!************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/is-local-url.js ***! + \************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isLocalURL\", ({\n enumerable: true,\n get: function() {\n return isLocalURL;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../../client/has-base-path */ \"./node_modules/next/dist/client/has-base-path.js\");\nfunction isLocalURL(url) {\n // prevent a hydration mismatch on href for url with anchor refs\n if (!(0, _utils.isAbsoluteUrl)(url)) return true;\n try {\n // absolute urls can be local if they are on the same origin\n const locationOrigin = (0, _utils.getLocationOrigin)();\n const resolved = new URL(url, locationOrigin);\n return resolved.origin === locationOrigin && (0, _hasbasepath.hasBasePath)(resolved.pathname);\n } catch (_) {\n return false;\n }\n} //# sourceMappingURL=is-local-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWxvY2FsLXVybC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsOENBQTZDO0lBQ3pDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsU0FBU0MsbUJBQU9BLENBQUMsaUVBQWE7QUFDcEMsTUFBTUMsZUFBZUQsbUJBQU9BLENBQUMsMEZBQWtDO0FBQy9ELFNBQVNGLFdBQVdJLEdBQUc7SUFDbkIsZ0VBQWdFO0lBQ2hFLElBQUksQ0FBQyxDQUFDLEdBQUdILE9BQU9JLGFBQWEsRUFBRUQsTUFBTSxPQUFPO0lBQzVDLElBQUk7UUFDQSw0REFBNEQ7UUFDNUQsTUFBTUUsaUJBQWlCLENBQUMsR0FBR0wsT0FBT00saUJBQWlCO1FBQ25ELE1BQU1DLFdBQVcsSUFBSUMsSUFBSUwsS0FBS0U7UUFDOUIsT0FBT0UsU0FBU0UsTUFBTSxLQUFLSixrQkFBa0IsQ0FBQyxHQUFHSCxhQUFhUSxXQUFXLEVBQUVILFNBQVNJLFFBQVE7SUFDaEcsRUFBRSxPQUFPQyxHQUFHO1FBQ1IsT0FBTztJQUNYO0FBQ0osRUFFQSx3Q0FBd0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1sb2NhbC11cmwuanM/NWQyOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTG9jYWxVUkxcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzTG9jYWxVUkw7XG4gICAgfVxufSk7XG5jb25zdCBfdXRpbHMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIik7XG5jb25zdCBfaGFzYmFzZXBhdGggPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vY2xpZW50L2hhcy1iYXNlLXBhdGhcIik7XG5mdW5jdGlvbiBpc0xvY2FsVVJMKHVybCkge1xuICAgIC8vIHByZXZlbnQgYSBoeWRyYXRpb24gbWlzbWF0Y2ggb24gaHJlZiBmb3IgdXJsIHdpdGggYW5jaG9yIHJlZnNcbiAgICBpZiAoISgwLCBfdXRpbHMuaXNBYnNvbHV0ZVVybCkodXJsKSkgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gYWJzb2x1dGUgdXJscyBjYW4gYmUgbG9jYWwgaWYgdGhleSBhcmUgb24gdGhlIHNhbWUgb3JpZ2luXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uT3JpZ2luID0gKDAsIF91dGlscy5nZXRMb2NhdGlvbk9yaWdpbikoKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgVVJMKHVybCwgbG9jYXRpb25PcmlnaW4pO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWQub3JpZ2luID09PSBsb2NhdGlvbk9yaWdpbiAmJiAoMCwgX2hhc2Jhc2VwYXRoLmhhc0Jhc2VQYXRoKShyZXNvbHZlZC5wYXRobmFtZSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1sb2NhbC11cmwuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImlzTG9jYWxVUkwiLCJfdXRpbHMiLCJyZXF1aXJlIiwiX2hhc2Jhc2VwYXRoIiwidXJsIiwiaXNBYnNvbHV0ZVVybCIsImxvY2F0aW9uT3JpZ2luIiwiZ2V0TG9jYXRpb25PcmlnaW4iLCJyZXNvbHZlZCIsIlVSTCIsIm9yaWdpbiIsImhhc0Jhc2VQYXRoIiwicGF0aG5hbWUiLCJfIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/omit.js": +/*!****************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/omit.js ***! + \****************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"omit\", ({\n enumerable: true,\n get: function() {\n return omit;\n }\n}));\nfunction omit(object, keys) {\n const omitted = {};\n Object.keys(object).forEach((key)=>{\n if (!keys.includes(key)) {\n omitted[key] = object[key];\n }\n });\n return omitted;\n} //# sourceMappingURL=omit.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL29taXQuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILHdDQUF1QztJQUNuQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLEtBQUtDLE1BQU0sRUFBRUMsSUFBSTtJQUN0QixNQUFNQyxVQUFVLENBQUM7SUFDakJULE9BQU9RLElBQUksQ0FBQ0QsUUFBUUcsT0FBTyxDQUFDLENBQUNDO1FBQ3pCLElBQUksQ0FBQ0gsS0FBS0ksUUFBUSxDQUFDRCxNQUFNO1lBQ3JCRixPQUFPLENBQUNFLElBQUksR0FBR0osTUFBTSxDQUFDSSxJQUFJO1FBQzlCO0lBQ0o7SUFDQSxPQUFPRjtBQUNYLEVBRUEsZ0NBQWdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvb21pdC5qcz9mYjc4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib21pdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gb21pdDtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzKSB7XG4gICAgY29uc3Qgb21pdHRlZCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgb21pdHRlZFtrZXldID0gb2JqZWN0W2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gb21pdHRlZDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b21pdC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwib21pdCIsIm9iamVjdCIsImtleXMiLCJvbWl0dGVkIiwiZm9yRWFjaCIsImtleSIsImluY2x1ZGVzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/omit.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/parse-path.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/parse-path.js ***! + \**********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parsePath\", ({\n enumerable: true,\n get: function() {\n return parsePath;\n }\n}));\nfunction parsePath(path) {\n const hashIndex = path.indexOf(\"#\");\n const queryIndex = path.indexOf(\"?\");\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex);\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : \"\",\n hash: hashIndex > -1 ? path.slice(hashIndex) : \"\"\n };\n }\n return {\n pathname: path,\n query: \"\",\n hash: \"\"\n };\n} //# sourceMappingURL=parse-path.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXBhdGguanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Q0FJQyxHQUFnQjtBQUNqQkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDZDQUE0QztJQUN4Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLFNBQVNBLFVBQVVDLElBQUk7SUFDbkIsTUFBTUMsWUFBWUQsS0FBS0UsT0FBTyxDQUFDO0lBQy9CLE1BQU1DLGFBQWFILEtBQUtFLE9BQU8sQ0FBQztJQUNoQyxNQUFNRSxXQUFXRCxhQUFhLENBQUMsS0FBTUYsQ0FBQUEsWUFBWSxLQUFLRSxhQUFhRixTQUFRO0lBQzNFLElBQUlHLFlBQVlILFlBQVksQ0FBQyxHQUFHO1FBQzVCLE9BQU87WUFDSEksVUFBVUwsS0FBS00sU0FBUyxDQUFDLEdBQUdGLFdBQVdELGFBQWFGO1lBQ3BETSxPQUFPSCxXQUFXSixLQUFLTSxTQUFTLENBQUNILFlBQVlGLFlBQVksQ0FBQyxJQUFJQSxZQUFZTyxhQUFhO1lBQ3ZGQyxNQUFNUixZQUFZLENBQUMsSUFBSUQsS0FBS1UsS0FBSyxDQUFDVCxhQUFhO1FBQ25EO0lBQ0o7SUFDQSxPQUFPO1FBQ0hJLFVBQVVMO1FBQ1ZPLE9BQU87UUFDUEUsTUFBTTtJQUNWO0FBQ0osRUFFQSxzQ0FBc0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1wYXRoLmpzP2U1MmMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHaXZlbiBhIHBhdGggdGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgdGhlIHBhdGhuYW1lLCBxdWVyeSBhbmQgaGFzaCBhbmQgcmV0dXJuXG4gKiB0aGVtLiBUaGlzIGlzIHVzZWZ1bCB0byBwYXJzZSBmdWxsIHBhdGhzIG9uIHRoZSBjbGllbnQgc2lkZS5cbiAqIEBwYXJhbSBwYXRoIEEgcGF0aCB0byBwYXJzZSBlLmcuIC9mb28vYmFyP2lkPTEjaGFzaFxuICovIFwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VQYXRoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVBhdGg7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBwYXJzZVBhdGgocGF0aCkge1xuICAgIGNvbnN0IGhhc2hJbmRleCA9IHBhdGguaW5kZXhPZihcIiNcIik7XG4gICAgY29uc3QgcXVlcnlJbmRleCA9IHBhdGguaW5kZXhPZihcIj9cIik7XG4gICAgY29uc3QgaGFzUXVlcnkgPSBxdWVyeUluZGV4ID4gLTEgJiYgKGhhc2hJbmRleCA8IDAgfHwgcXVlcnlJbmRleCA8IGhhc2hJbmRleCk7XG4gICAgaWYgKGhhc1F1ZXJ5IHx8IGhhc2hJbmRleCA+IC0xKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYXRobmFtZTogcGF0aC5zdWJzdHJpbmcoMCwgaGFzUXVlcnkgPyBxdWVyeUluZGV4IDogaGFzaEluZGV4KSxcbiAgICAgICAgICAgIHF1ZXJ5OiBoYXNRdWVyeSA/IHBhdGguc3Vic3RyaW5nKHF1ZXJ5SW5kZXgsIGhhc2hJbmRleCA+IC0xID8gaGFzaEluZGV4IDogdW5kZWZpbmVkKSA6IFwiXCIsXG4gICAgICAgICAgICBoYXNoOiBoYXNoSW5kZXggPiAtMSA/IHBhdGguc2xpY2UoaGFzaEluZGV4KSA6IFwiXCJcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aG5hbWU6IHBhdGgsXG4gICAgICAgIHF1ZXJ5OiBcIlwiLFxuICAgICAgICBoYXNoOiBcIlwiXG4gICAgfTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFyc2UtcGF0aC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicGFyc2VQYXRoIiwicGF0aCIsImhhc2hJbmRleCIsImluZGV4T2YiLCJxdWVyeUluZGV4IiwiaGFzUXVlcnkiLCJwYXRobmFtZSIsInN1YnN0cmluZyIsInF1ZXJ5IiwidW5kZWZpbmVkIiwiaGFzaCIsInNsaWNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/parse-path.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js": +/*!******************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js ***! + \******************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseRelativeUrl\", ({\n enumerable: true,\n get: function() {\n return parseRelativeUrl;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nconst _querystring = __webpack_require__(/*! ./querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nfunction parseRelativeUrl(url, base) {\n const globalBase = new URL( false ? 0 : (0, _utils.getLocationOrigin)());\n const resolvedBase = base ? new URL(base, globalBase) : url.startsWith(\".\") ? new URL( false ? 0 : window.location.href) : globalBase;\n const { pathname, searchParams, search, hash, href, origin } = new URL(url, resolvedBase);\n if (origin !== globalBase.origin) {\n throw new Error(\"invariant: invalid relative URL, router received \" + url);\n }\n return {\n pathname,\n query: (0, _querystring.searchParamsToUrlQuery)(searchParams),\n search,\n hash,\n href: href.slice(globalBase.origin.length)\n };\n} //# sourceMappingURL=parse-relative-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXJlbGF0aXZlLXVybC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsb0RBQW1EO0lBQy9DSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsU0FBU0MsbUJBQU9BLENBQUMsaUVBQWE7QUFDcEMsTUFBTUMsZUFBZUQsbUJBQU9BLENBQUMsc0ZBQWU7QUFDNUMsU0FBU0YsaUJBQWlCSSxHQUFHLEVBQUVDLElBQUk7SUFDL0IsTUFBTUMsYUFBYSxJQUFJQyxJQUFJLE1BQTZCLEdBQUcsQ0FBVSxHQUFHLENBQUMsR0FBR04sT0FBT08saUJBQWlCO0lBQ3BHLE1BQU1DLGVBQWVKLE9BQU8sSUFBSUUsSUFBSUYsTUFBTUMsY0FBY0YsSUFBSU0sVUFBVSxDQUFDLE9BQU8sSUFBSUgsSUFBSSxNQUE2QixHQUFHLENBQVUsR0FBR0ksT0FBT0MsUUFBUSxDQUFDQyxJQUFJLElBQUlQO0lBQzNKLE1BQU0sRUFBRVEsUUFBUSxFQUFFQyxZQUFZLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFSixJQUFJLEVBQUVLLE1BQU0sRUFBRSxHQUFHLElBQUlYLElBQUlILEtBQUtLO0lBQzVFLElBQUlTLFdBQVdaLFdBQVdZLE1BQU0sRUFBRTtRQUM5QixNQUFNLElBQUlDLE1BQU0sc0RBQXNEZjtJQUMxRTtJQUNBLE9BQU87UUFDSFU7UUFDQU0sT0FBTyxDQUFDLEdBQUdqQixhQUFha0Isc0JBQXNCLEVBQUVOO1FBQ2hEQztRQUNBQztRQUNBSixNQUFNQSxLQUFLUyxLQUFLLENBQUNoQixXQUFXWSxNQUFNLENBQUNLLE1BQU07SUFDN0M7QUFDSixFQUVBLDhDQUE4QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXJlbGF0aXZlLXVybC5qcz80ZWRmIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VSZWxhdGl2ZVVybFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcGFyc2VSZWxhdGl2ZVVybDtcbiAgICB9XG59KTtcbmNvbnN0IF91dGlscyA9IHJlcXVpcmUoXCIuLi8uLi91dGlsc1wiKTtcbmNvbnN0IF9xdWVyeXN0cmluZyA9IHJlcXVpcmUoXCIuL3F1ZXJ5c3RyaW5nXCIpO1xuZnVuY3Rpb24gcGFyc2VSZWxhdGl2ZVVybCh1cmwsIGJhc2UpIHtcbiAgICBjb25zdCBnbG9iYWxCYXNlID0gbmV3IFVSTCh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiID8gXCJodHRwOi8vblwiIDogKDAsIF91dGlscy5nZXRMb2NhdGlvbk9yaWdpbikoKSk7XG4gICAgY29uc3QgcmVzb2x2ZWRCYXNlID0gYmFzZSA/IG5ldyBVUkwoYmFzZSwgZ2xvYmFsQmFzZSkgOiB1cmwuc3RhcnRzV2l0aChcIi5cIikgPyBuZXcgVVJMKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyBcImh0dHA6Ly9uXCIgOiB3aW5kb3cubG9jYXRpb24uaHJlZikgOiBnbG9iYWxCYXNlO1xuICAgIGNvbnN0IHsgcGF0aG5hbWUsIHNlYXJjaFBhcmFtcywgc2VhcmNoLCBoYXNoLCBocmVmLCBvcmlnaW4gfSA9IG5ldyBVUkwodXJsLCByZXNvbHZlZEJhc2UpO1xuICAgIGlmIChvcmlnaW4gIT09IGdsb2JhbEJhc2Uub3JpZ2luKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFyaWFudDogaW52YWxpZCByZWxhdGl2ZSBVUkwsIHJvdXRlciByZWNlaXZlZCBcIiArIHVybCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgICBxdWVyeTogKDAsIF9xdWVyeXN0cmluZy5zZWFyY2hQYXJhbXNUb1VybFF1ZXJ5KShzZWFyY2hQYXJhbXMpLFxuICAgICAgICBzZWFyY2gsXG4gICAgICAgIGhhc2gsXG4gICAgICAgIGhyZWY6IGhyZWYuc2xpY2UoZ2xvYmFsQmFzZS5vcmlnaW4ubGVuZ3RoKVxuICAgIH07XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnNlLXJlbGF0aXZlLXVybC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicGFyc2VSZWxhdGl2ZVVybCIsIl91dGlscyIsInJlcXVpcmUiLCJfcXVlcnlzdHJpbmciLCJ1cmwiLCJiYXNlIiwiZ2xvYmFsQmFzZSIsIlVSTCIsImdldExvY2F0aW9uT3JpZ2luIiwicmVzb2x2ZWRCYXNlIiwic3RhcnRzV2l0aCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsInBhdGhuYW1lIiwic2VhcmNoUGFyYW1zIiwic2VhcmNoIiwiaGFzaCIsIm9yaWdpbiIsIkVycm9yIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5Iiwic2xpY2UiLCJsZW5ndGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/parse-url.js": +/*!*********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/parse-url.js ***! + \*********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"parseUrl\", ({\n enumerable: true,\n get: function() {\n return parseUrl;\n }\n}));\nconst _querystring = __webpack_require__(/*! ./querystring */ \"./node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./parse-relative-url */ \"./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nfunction parseUrl(url) {\n if (url.startsWith(\"/\")) {\n return (0, _parserelativeurl.parseRelativeUrl)(url);\n }\n const parsedURL = new URL(url);\n return {\n hash: parsedURL.hash,\n hostname: parsedURL.hostname,\n href: parsedURL.href,\n pathname: parsedURL.pathname,\n port: parsedURL.port,\n protocol: parsedURL.protocol,\n query: (0, _querystring.searchParamsToUrlQuery)(parsedURL.searchParams),\n search: parsedURL.search\n };\n} //# sourceMappingURL=parse-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXVybC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsNENBQTJDO0lBQ3ZDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsZUFBZUMsbUJBQU9BLENBQUMsc0ZBQWU7QUFDNUMsTUFBTUMsb0JBQW9CRCxtQkFBT0EsQ0FBQyxvR0FBc0I7QUFDeEQsU0FBU0YsU0FBU0ksR0FBRztJQUNqQixJQUFJQSxJQUFJQyxVQUFVLENBQUMsTUFBTTtRQUNyQixPQUFPLENBQUMsR0FBR0Ysa0JBQWtCRyxnQkFBZ0IsRUFBRUY7SUFDbkQ7SUFDQSxNQUFNRyxZQUFZLElBQUlDLElBQUlKO0lBQzFCLE9BQU87UUFDSEssTUFBTUYsVUFBVUUsSUFBSTtRQUNwQkMsVUFBVUgsVUFBVUcsUUFBUTtRQUM1QkMsTUFBTUosVUFBVUksSUFBSTtRQUNwQkMsVUFBVUwsVUFBVUssUUFBUTtRQUM1QkMsTUFBTU4sVUFBVU0sSUFBSTtRQUNwQkMsVUFBVVAsVUFBVU8sUUFBUTtRQUM1QkMsT0FBTyxDQUFDLEdBQUdkLGFBQWFlLHNCQUFzQixFQUFFVCxVQUFVVSxZQUFZO1FBQ3RFQyxRQUFRWCxVQUFVVyxNQUFNO0lBQzVCO0FBQ0osRUFFQSxxQ0FBcUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS11cmwuanM/Nzk1OCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlVXJsXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVVybDtcbiAgICB9XG59KTtcbmNvbnN0IF9xdWVyeXN0cmluZyA9IHJlcXVpcmUoXCIuL3F1ZXJ5c3RyaW5nXCIpO1xuY29uc3QgX3BhcnNlcmVsYXRpdmV1cmwgPSByZXF1aXJlKFwiLi9wYXJzZS1yZWxhdGl2ZS11cmxcIik7XG5mdW5jdGlvbiBwYXJzZVVybCh1cmwpIHtcbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3BhcnNlcmVsYXRpdmV1cmwucGFyc2VSZWxhdGl2ZVVybCkodXJsKTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkVVJMID0gbmV3IFVSTCh1cmwpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGhhc2g6IHBhcnNlZFVSTC5oYXNoLFxuICAgICAgICBob3N0bmFtZTogcGFyc2VkVVJMLmhvc3RuYW1lLFxuICAgICAgICBocmVmOiBwYXJzZWRVUkwuaHJlZixcbiAgICAgICAgcGF0aG5hbWU6IHBhcnNlZFVSTC5wYXRobmFtZSxcbiAgICAgICAgcG9ydDogcGFyc2VkVVJMLnBvcnQsXG4gICAgICAgIHByb3RvY29sOiBwYXJzZWRVUkwucHJvdG9jb2wsXG4gICAgICAgIHF1ZXJ5OiAoMCwgX3F1ZXJ5c3RyaW5nLnNlYXJjaFBhcmFtc1RvVXJsUXVlcnkpKHBhcnNlZFVSTC5zZWFyY2hQYXJhbXMpLFxuICAgICAgICBzZWFyY2g6IHBhcnNlZFVSTC5zZWFyY2hcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJzZS11cmwuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInBhcnNlVXJsIiwiX3F1ZXJ5c3RyaW5nIiwicmVxdWlyZSIsIl9wYXJzZXJlbGF0aXZldXJsIiwidXJsIiwic3RhcnRzV2l0aCIsInBhcnNlUmVsYXRpdmVVcmwiLCJwYXJzZWRVUkwiLCJVUkwiLCJoYXNoIiwiaG9zdG5hbWUiLCJocmVmIiwicGF0aG5hbWUiLCJwb3J0IiwicHJvdG9jb2wiLCJxdWVyeSIsInNlYXJjaFBhcmFtc1RvVXJsUXVlcnkiLCJzZWFyY2hQYXJhbXMiLCJzZWFyY2giXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/parse-url.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js": +/*!***************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js ***! + \***************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"pathHasPrefix\", ({\n enumerable: true,\n get: function() {\n return pathHasPrefix;\n }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"./node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction pathHasPrefix(path, prefix) {\n if (typeof path !== \"string\") {\n return false;\n }\n const { pathname } = (0, _parsepath.parsePath)(path);\n return pathname === prefix || pathname.startsWith(prefix + \"/\");\n} //# sourceMappingURL=path-has-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtaGFzLXByZWZpeC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsaURBQWdEO0lBQzVDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsYUFBYUMsbUJBQU9BLENBQUMsb0ZBQWM7QUFDekMsU0FBU0YsY0FBY0csSUFBSSxFQUFFQyxNQUFNO0lBQy9CLElBQUksT0FBT0QsU0FBUyxVQUFVO1FBQzFCLE9BQU87SUFDWDtJQUNBLE1BQU0sRUFBRUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxHQUFHSixXQUFXSyxTQUFTLEVBQUVIO0lBQy9DLE9BQU9FLGFBQWFELFVBQVVDLFNBQVNFLFVBQVUsQ0FBQ0gsU0FBUztBQUMvRCxFQUVBLDJDQUEyQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtaGFzLXByZWZpeC5qcz9iNTM4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGF0aEhhc1ByZWZpeFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcGF0aEhhc1ByZWZpeDtcbiAgICB9XG59KTtcbmNvbnN0IF9wYXJzZXBhdGggPSByZXF1aXJlKFwiLi9wYXJzZS1wYXRoXCIpO1xuZnVuY3Rpb24gcGF0aEhhc1ByZWZpeChwYXRoLCBwcmVmaXgpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB7IHBhdGhuYW1lIH0gPSAoMCwgX3BhcnNlcGF0aC5wYXJzZVBhdGgpKHBhdGgpO1xuICAgIHJldHVybiBwYXRobmFtZSA9PT0gcHJlZml4IHx8IHBhdGhuYW1lLnN0YXJ0c1dpdGgocHJlZml4ICsgXCIvXCIpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXRoLWhhcy1wcmVmaXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsInBhdGhIYXNQcmVmaXgiLCJfcGFyc2VwYXRoIiwicmVxdWlyZSIsInBhdGgiLCJwcmVmaXgiLCJwYXRobmFtZSIsInBhcnNlUGF0aCIsInN0YXJ0c1dpdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/path-match.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/path-match.js ***! + \**********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getPathMatch\", ({\n enumerable: true,\n get: function() {\n return getPathMatch;\n }\n}));\nconst _pathtoregexp = __webpack_require__(/*! next/dist/compiled/path-to-regexp */ \"./node_modules/next/dist/compiled/path-to-regexp/index.js\");\nfunction getPathMatch(path, options) {\n const keys = [];\n const regexp = (0, _pathtoregexp.pathToRegexp)(path, keys, {\n delimiter: \"/\",\n sensitive: typeof (options == null ? void 0 : options.sensitive) === \"boolean\" ? options.sensitive : false,\n strict: options == null ? void 0 : options.strict\n });\n const matcher = (0, _pathtoregexp.regexpToFunction)((options == null ? void 0 : options.regexModifier) ? new RegExp(options.regexModifier(regexp.source), regexp.flags) : regexp, keys);\n /**\n * A matcher function that will check if a given pathname matches the path\n * given in the builder function. When the path does not match it will return\n * `false` but if it does it will return an object with the matched params\n * merged with the params provided in the second argument.\n */ return (pathname, params)=>{\n // If no pathname is provided it's not a match.\n if (typeof pathname !== \"string\") return false;\n const match = matcher(pathname);\n // If the path did not match `false` will be returned.\n if (!match) return false;\n /**\n * If unnamed params are not allowed they must be removed from\n * the matched parameters. path-to-regexp uses \"string\" for named and\n * \"number\" for unnamed parameters.\n */ if (options == null ? void 0 : options.removeUnnamedParams) {\n for (const key of keys){\n if (typeof key.name === \"number\") {\n delete match.params[key.name];\n }\n }\n }\n return {\n ...params,\n ...match.params\n };\n };\n} //# sourceMappingURL=path-match.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtbWF0Y2guanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILGdEQUErQztJQUMzQ0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGdCQUFnQkMsbUJBQU9BLENBQUMsb0dBQW1DO0FBQ2pFLFNBQVNGLGFBQWFHLElBQUksRUFBRUMsT0FBTztJQUMvQixNQUFNQyxPQUFPLEVBQUU7SUFDZixNQUFNQyxTQUFTLENBQUMsR0FBR0wsY0FBY00sWUFBWSxFQUFFSixNQUFNRSxNQUFNO1FBQ3ZERyxXQUFXO1FBQ1hDLFdBQVcsT0FBUUwsQ0FBQUEsV0FBVyxPQUFPLEtBQUssSUFBSUEsUUFBUUssU0FBUyxNQUFNLFlBQVlMLFFBQVFLLFNBQVMsR0FBRztRQUNyR0MsUUFBUU4sV0FBVyxPQUFPLEtBQUssSUFBSUEsUUFBUU0sTUFBTTtJQUNyRDtJQUNBLE1BQU1DLFVBQVUsQ0FBQyxHQUFHVixjQUFjVyxnQkFBZ0IsRUFBRSxDQUFDUixXQUFXLE9BQU8sS0FBSyxJQUFJQSxRQUFRUyxhQUFhLElBQUksSUFBSUMsT0FBT1YsUUFBUVMsYUFBYSxDQUFDUCxPQUFPUyxNQUFNLEdBQUdULE9BQU9VLEtBQUssSUFBSVYsUUFBUUQ7SUFDbEw7Ozs7O0dBS0QsR0FBRyxPQUFPLENBQUNZLFVBQVVDO1FBQ2hCLCtDQUErQztRQUMvQyxJQUFJLE9BQU9ELGFBQWEsVUFBVSxPQUFPO1FBQ3pDLE1BQU1FLFFBQVFSLFFBQVFNO1FBQ3RCLHNEQUFzRDtRQUN0RCxJQUFJLENBQUNFLE9BQU8sT0FBTztRQUNuQjs7OztLQUlILEdBQUcsSUFBSWYsV0FBVyxPQUFPLEtBQUssSUFBSUEsUUFBUWdCLG1CQUFtQixFQUFFO1lBQ3hELEtBQUssTUFBTUMsT0FBT2hCLEtBQUs7Z0JBQ25CLElBQUksT0FBT2dCLElBQUlDLElBQUksS0FBSyxVQUFVO29CQUM5QixPQUFPSCxNQUFNRCxNQUFNLENBQUNHLElBQUlDLElBQUksQ0FBQztnQkFDakM7WUFDSjtRQUNKO1FBQ0EsT0FBTztZQUNILEdBQUdKLE1BQU07WUFDVCxHQUFHQyxNQUFNRCxNQUFNO1FBQ25CO0lBQ0o7QUFDSixFQUVBLHNDQUFzQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtbWF0Y2guanM/MTI5NSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldFBhdGhNYXRjaFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0UGF0aE1hdGNoO1xuICAgIH1cbn0pO1xuY29uc3QgX3BhdGh0b3JlZ2V4cCA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcGF0aC10by1yZWdleHBcIik7XG5mdW5jdGlvbiBnZXRQYXRoTWF0Y2gocGF0aCwgb3B0aW9ucykge1xuICAgIGNvbnN0IGtleXMgPSBbXTtcbiAgICBjb25zdCByZWdleHAgPSAoMCwgX3BhdGh0b3JlZ2V4cC5wYXRoVG9SZWdleHApKHBhdGgsIGtleXMsIHtcbiAgICAgICAgZGVsaW1pdGVyOiBcIi9cIixcbiAgICAgICAgc2Vuc2l0aXZlOiB0eXBlb2YgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuc2Vuc2l0aXZlKSA9PT0gXCJib29sZWFuXCIgPyBvcHRpb25zLnNlbnNpdGl2ZSA6IGZhbHNlLFxuICAgICAgICBzdHJpY3Q6IG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuc3RyaWN0XG4gICAgfSk7XG4gICAgY29uc3QgbWF0Y2hlciA9ICgwLCBfcGF0aHRvcmVnZXhwLnJlZ2V4cFRvRnVuY3Rpb24pKChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJlZ2V4TW9kaWZpZXIpID8gbmV3IFJlZ0V4cChvcHRpb25zLnJlZ2V4TW9kaWZpZXIocmVnZXhwLnNvdXJjZSksIHJlZ2V4cC5mbGFncykgOiByZWdleHAsIGtleXMpO1xuICAgIC8qKlxuICAgKiBBIG1hdGNoZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGEgZ2l2ZW4gcGF0aG5hbWUgbWF0Y2hlcyB0aGUgcGF0aFxuICAgKiBnaXZlbiBpbiB0aGUgYnVpbGRlciBmdW5jdGlvbi4gV2hlbiB0aGUgcGF0aCBkb2VzIG5vdCBtYXRjaCBpdCB3aWxsIHJldHVyblxuICAgKiBgZmFsc2VgIGJ1dCBpZiBpdCBkb2VzIGl0IHdpbGwgcmV0dXJuIGFuIG9iamVjdCB3aXRoIHRoZSBtYXRjaGVkIHBhcmFtc1xuICAgKiBtZXJnZWQgd2l0aCB0aGUgcGFyYW1zIHByb3ZpZGVkIGluIHRoZSBzZWNvbmQgYXJndW1lbnQuXG4gICAqLyByZXR1cm4gKHBhdGhuYW1lLCBwYXJhbXMpPT57XG4gICAgICAgIC8vIElmIG5vIHBhdGhuYW1lIGlzIHByb3ZpZGVkIGl0J3Mgbm90IGEgbWF0Y2guXG4gICAgICAgIGlmICh0eXBlb2YgcGF0aG5hbWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVyKHBhdGhuYW1lKTtcbiAgICAgICAgLy8gSWYgdGhlIHBhdGggZGlkIG5vdCBtYXRjaCBgZmFsc2VgIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICAgIGlmICghbWF0Y2gpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICogSWYgdW5uYW1lZCBwYXJhbXMgYXJlIG5vdCBhbGxvd2VkIHRoZXkgbXVzdCBiZSByZW1vdmVkIGZyb21cbiAgICAgKiB0aGUgbWF0Y2hlZCBwYXJhbWV0ZXJzLiBwYXRoLXRvLXJlZ2V4cCB1c2VzIFwic3RyaW5nXCIgZm9yIG5hbWVkIGFuZFxuICAgICAqIFwibnVtYmVyXCIgZm9yIHVubmFtZWQgcGFyYW1ldGVycy5cbiAgICAgKi8gaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucmVtb3ZlVW5uYW1lZFBhcmFtcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cyl7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkubmFtZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbWF0Y2gucGFyYW1zW2tleS5uYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIC4uLm1hdGNoLnBhcmFtc1xuICAgICAgICB9O1xuICAgIH07XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhdGgtbWF0Y2guanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImdldFBhdGhNYXRjaCIsIl9wYXRodG9yZWdleHAiLCJyZXF1aXJlIiwicGF0aCIsIm9wdGlvbnMiLCJrZXlzIiwicmVnZXhwIiwicGF0aFRvUmVnZXhwIiwiZGVsaW1pdGVyIiwic2Vuc2l0aXZlIiwic3RyaWN0IiwibWF0Y2hlciIsInJlZ2V4cFRvRnVuY3Rpb24iLCJyZWdleE1vZGlmaWVyIiwiUmVnRXhwIiwic291cmNlIiwiZmxhZ3MiLCJwYXRobmFtZSIsInBhcmFtcyIsIm1hdGNoIiwicmVtb3ZlVW5uYW1lZFBhcmFtcyIsImtleSIsIm5hbWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/path-match.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/prepare-destination.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/prepare-destination.js ***! + \*******************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n matchHas: function() {\n return matchHas;\n },\n compileNonPath: function() {\n return compileNonPath;\n },\n prepareDestination: function() {\n return prepareDestination;\n }\n});\nconst _pathtoregexp = __webpack_require__(/*! next/dist/compiled/path-to-regexp */ \"./node_modules/next/dist/compiled/path-to-regexp/index.js\");\nconst _escaperegexp = __webpack_require__(/*! ../../escape-regexp */ \"./node_modules/next/dist/shared/lib/escape-regexp.js\");\nconst _parseurl = __webpack_require__(/*! ./parse-url */ \"./node_modules/next/dist/shared/lib/router/utils/parse-url.js\");\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"./node_modules/next/dist/server/future/helpers/interception-routes.js\");\nconst _approuterheaders = __webpack_require__(/*! ../../../../client/components/app-router-headers */ \"./node_modules/next/dist/client/components/app-router-headers.js\");\nconst _getcookieparser = __webpack_require__(/*! ../../../../server/api-utils/get-cookie-parser */ \"./node_modules/next/dist/server/api-utils/get-cookie-parser.js\");\n/**\n * Ensure only a-zA-Z are used for param names for proper interpolating\n * with path-to-regexp\n */ function getSafeParamName(paramName) {\n let newParamName = \"\";\n for(let i = 0; i < paramName.length; i++){\n const charCode = paramName.charCodeAt(i);\n if (charCode > 64 && charCode < 91 || // A-Z\n charCode > 96 && charCode < 123 // a-z\n ) {\n newParamName += paramName[i];\n }\n }\n return newParamName;\n}\nfunction escapeSegment(str, segmentName) {\n return str.replace(new RegExp(\":\" + (0, _escaperegexp.escapeStringRegexp)(segmentName), \"g\"), \"__ESC_COLON_\" + segmentName);\n}\nfunction unescapeSegments(str) {\n return str.replace(/__ESC_COLON_/gi, \":\");\n}\nfunction matchHas(req, query, has, missing) {\n if (has === void 0) has = [];\n if (missing === void 0) missing = [];\n const params = {};\n const hasMatch = (hasItem)=>{\n let value;\n let key = hasItem.key;\n switch(hasItem.type){\n case \"header\":\n {\n key = key.toLowerCase();\n value = req.headers[key];\n break;\n }\n case \"cookie\":\n {\n if (\"cookies\" in req) {\n value = req.cookies[hasItem.key];\n } else {\n const cookies = (0, _getcookieparser.getCookieParser)(req.headers)();\n value = cookies[hasItem.key];\n }\n break;\n }\n case \"query\":\n {\n value = query[key];\n break;\n }\n case \"host\":\n {\n const { host } = (req == null ? void 0 : req.headers) || {};\n // remove port from host if present\n const hostname = host == null ? void 0 : host.split(\":\", 1)[0].toLowerCase();\n value = hostname;\n break;\n }\n default:\n {\n break;\n }\n }\n if (!hasItem.value && value) {\n params[getSafeParamName(key)] = value;\n return true;\n } else if (value) {\n const matcher = new RegExp(\"^\" + hasItem.value + \"$\");\n const matches = Array.isArray(value) ? value.slice(-1)[0].match(matcher) : value.match(matcher);\n if (matches) {\n if (Array.isArray(matches)) {\n if (matches.groups) {\n Object.keys(matches.groups).forEach((groupKey)=>{\n params[groupKey] = matches.groups[groupKey];\n });\n } else if (hasItem.type === \"host\" && matches[0]) {\n params.host = matches[0];\n }\n }\n return true;\n }\n }\n return false;\n };\n const allMatch = has.every((item)=>hasMatch(item)) && !missing.some((item)=>hasMatch(item));\n if (allMatch) {\n return params;\n }\n return false;\n}\nfunction compileNonPath(value, params) {\n if (!value.includes(\":\")) {\n return value;\n }\n for (const key of Object.keys(params)){\n if (value.includes(\":\" + key)) {\n value = value.replace(new RegExp(\":\" + key + \"\\\\*\", \"g\"), \":\" + key + \"--ESCAPED_PARAM_ASTERISKS\").replace(new RegExp(\":\" + key + \"\\\\?\", \"g\"), \":\" + key + \"--ESCAPED_PARAM_QUESTION\").replace(new RegExp(\":\" + key + \"\\\\+\", \"g\"), \":\" + key + \"--ESCAPED_PARAM_PLUS\").replace(new RegExp(\":\" + key + \"(?!\\\\w)\", \"g\"), \"--ESCAPED_PARAM_COLON\" + key);\n }\n }\n value = value.replace(/(:|\\*|\\?|\\+|\\(|\\)|\\{|\\})/g, \"\\\\$1\").replace(/--ESCAPED_PARAM_PLUS/g, \"+\").replace(/--ESCAPED_PARAM_COLON/g, \":\").replace(/--ESCAPED_PARAM_QUESTION/g, \"?\").replace(/--ESCAPED_PARAM_ASTERISKS/g, \"*\");\n // the value needs to start with a forward-slash to be compiled\n // correctly\n return (0, _pathtoregexp.compile)(\"/\" + value, {\n validate: false\n })(params).slice(1);\n}\nfunction prepareDestination(args) {\n const query = Object.assign({}, args.query);\n delete query.__nextLocale;\n delete query.__nextDefaultLocale;\n delete query.__nextDataReq;\n delete query.__nextInferredLocaleFromDefault;\n delete query[_approuterheaders.NEXT_RSC_UNION_QUERY];\n let escapedDestination = args.destination;\n for (const param of Object.keys({\n ...args.params,\n ...query\n })){\n escapedDestination = escapeSegment(escapedDestination, param);\n }\n const parsedDestination = (0, _parseurl.parseUrl)(escapedDestination);\n const destQuery = parsedDestination.query;\n const destPath = unescapeSegments(\"\" + parsedDestination.pathname + (parsedDestination.hash || \"\"));\n const destHostname = unescapeSegments(parsedDestination.hostname || \"\");\n const destPathParamKeys = [];\n const destHostnameParamKeys = [];\n (0, _pathtoregexp.pathToRegexp)(destPath, destPathParamKeys);\n (0, _pathtoregexp.pathToRegexp)(destHostname, destHostnameParamKeys);\n const destParams = [];\n destPathParamKeys.forEach((key)=>destParams.push(key.name));\n destHostnameParamKeys.forEach((key)=>destParams.push(key.name));\n const destPathCompiler = (0, _pathtoregexp.compile)(destPath, // have already validated before we got to this point and validating\n // breaks compiling destinations with named pattern params from the source\n // e.g. /something:hello(.*) -> /another/:hello is broken with validation\n // since compile validation is meant for reversing and not for inserting\n // params from a separate path-regex into another\n {\n validate: false\n });\n const destHostnameCompiler = (0, _pathtoregexp.compile)(destHostname, {\n validate: false\n });\n // update any params in query values\n for (const [key, strOrArray] of Object.entries(destQuery)){\n // the value needs to start with a forward-slash to be compiled\n // correctly\n if (Array.isArray(strOrArray)) {\n destQuery[key] = strOrArray.map((value)=>compileNonPath(unescapeSegments(value), args.params));\n } else if (typeof strOrArray === \"string\") {\n destQuery[key] = compileNonPath(unescapeSegments(strOrArray), args.params);\n }\n }\n // add path params to query if it's not a redirect and not\n // already defined in destination query or path\n let paramKeys = Object.keys(args.params).filter((name)=>name !== \"nextInternalLocale\");\n if (args.appendParamsToQuery && !paramKeys.some((key)=>destParams.includes(key))) {\n for (const key of paramKeys){\n if (!(key in destQuery)) {\n destQuery[key] = args.params[key];\n }\n }\n }\n let newUrl;\n // The compiler also that the interception route marker is an unnamed param, hence '0',\n // so we need to add it to the params object.\n if ((0, _interceptionroutes.isInterceptionRouteAppPath)(destPath)) {\n for (const segment of destPath.split(\"/\")){\n const marker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n if (marker) {\n args.params[\"0\"] = marker;\n break;\n }\n }\n }\n try {\n newUrl = destPathCompiler(args.params);\n const [pathname, hash] = newUrl.split(\"#\", 2);\n parsedDestination.hostname = destHostnameCompiler(args.params);\n parsedDestination.pathname = pathname;\n parsedDestination.hash = \"\" + (hash ? \"#\" : \"\") + (hash || \"\");\n delete parsedDestination.search;\n } catch (err) {\n if (err.message.match(/Expected .*? to not repeat, but got an array/)) {\n throw new Error(\"To use a multi-match in the destination you must add `*` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match\");\n }\n throw err;\n }\n // Query merge order lowest priority to highest\n // 1. initial URL query values\n // 2. path segment values\n // 3. destination specified query values\n parsedDestination.query = {\n ...query,\n ...parsedDestination.query\n };\n return {\n newUrl,\n destQuery,\n parsedDestination\n };\n} //# sourceMappingURL=prepare-destination.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3ByZXBhcmUtZGVzdGluYXRpb24uanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FJTjtBQUNBLFNBQVNJLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlWLE9BQU9DLGNBQWMsQ0FBQ1EsUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTixTQUFTO0lBQ2JHLFVBQVU7UUFDTixPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7SUFDQUMsb0JBQW9CO1FBQ2hCLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1PLGdCQUFnQkMsbUJBQU9BLENBQUMsb0dBQW1DO0FBQ2pFLE1BQU1DLGdCQUFnQkQsbUJBQU9BLENBQUMsaUZBQXFCO0FBQ25ELE1BQU1FLFlBQVlGLG1CQUFPQSxDQUFDLGtGQUFhO0FBQ3ZDLE1BQU1HLHNCQUFzQkgsbUJBQU9BLENBQUMsb0lBQXVEO0FBQzNGLE1BQU1JLG9CQUFvQkosbUJBQU9BLENBQUMsMEhBQWtEO0FBQ3BGLE1BQU1LLG1CQUFtQkwsbUJBQU9BLENBQUMsc0hBQWdEO0FBQ2pGOzs7Q0FHQyxHQUFHLFNBQVNNLGlCQUFpQkMsU0FBUztJQUNuQyxJQUFJQyxlQUFlO0lBQ25CLElBQUksSUFBSUMsSUFBSSxHQUFHQSxJQUFJRixVQUFVRyxNQUFNLEVBQUVELElBQUk7UUFDckMsTUFBTUUsV0FBV0osVUFBVUssVUFBVSxDQUFDSDtRQUN0QyxJQUFJRSxXQUFXLE1BQU1BLFdBQVcsTUFBTSxNQUFNO1FBQzVDQSxXQUFXLE1BQU1BLFdBQVcsSUFBSSxNQUFNO1VBQ3BDO1lBQ0VILGdCQUFnQkQsU0FBUyxDQUFDRSxFQUFFO1FBQ2hDO0lBQ0o7SUFDQSxPQUFPRDtBQUNYO0FBQ0EsU0FBU0ssY0FBY0MsR0FBRyxFQUFFQyxXQUFXO0lBQ25DLE9BQU9ELElBQUlFLE9BQU8sQ0FBQyxJQUFJQyxPQUFPLE1BQU0sQ0FBQyxHQUFHaEIsY0FBY2lCLGtCQUFrQixFQUFFSCxjQUFjLE1BQU0saUJBQWlCQTtBQUNuSDtBQUNBLFNBQVNJLGlCQUFpQkwsR0FBRztJQUN6QixPQUFPQSxJQUFJRSxPQUFPLENBQUMsa0JBQWtCO0FBQ3pDO0FBQ0EsU0FBUzFCLFNBQVM4QixHQUFHLEVBQUVDLEtBQUssRUFBRUMsR0FBRyxFQUFFQyxPQUFPO0lBQ3RDLElBQUlELFFBQVEsS0FBSyxHQUFHQSxNQUFNLEVBQUU7SUFDNUIsSUFBSUMsWUFBWSxLQUFLLEdBQUdBLFVBQVUsRUFBRTtJQUNwQyxNQUFNQyxTQUFTLENBQUM7SUFDaEIsTUFBTUMsV0FBVyxDQUFDQztRQUNkLElBQUl0QztRQUNKLElBQUl1QyxNQUFNRCxRQUFRQyxHQUFHO1FBQ3JCLE9BQU9ELFFBQVFFLElBQUk7WUFDZixLQUFLO2dCQUNEO29CQUNJRCxNQUFNQSxJQUFJRSxXQUFXO29CQUNyQnpDLFFBQVFnQyxJQUFJVSxPQUFPLENBQUNILElBQUk7b0JBQ3hCO2dCQUNKO1lBQ0osS0FBSztnQkFDRDtvQkFDSSxJQUFJLGFBQWFQLEtBQUs7d0JBQ2xCaEMsUUFBUWdDLElBQUlXLE9BQU8sQ0FBQ0wsUUFBUUMsR0FBRyxDQUFDO29CQUNwQyxPQUFPO3dCQUNILE1BQU1JLFVBQVUsQ0FBQyxHQUFHMUIsaUJBQWlCMkIsZUFBZSxFQUFFWixJQUFJVSxPQUFPO3dCQUNqRTFDLFFBQVEyQyxPQUFPLENBQUNMLFFBQVFDLEdBQUcsQ0FBQztvQkFDaEM7b0JBQ0E7Z0JBQ0o7WUFDSixLQUFLO2dCQUNEO29CQUNJdkMsUUFBUWlDLEtBQUssQ0FBQ00sSUFBSTtvQkFDbEI7Z0JBQ0o7WUFDSixLQUFLO2dCQUNEO29CQUNJLE1BQU0sRUFBRU0sSUFBSSxFQUFFLEdBQUcsQ0FBQ2IsT0FBTyxPQUFPLEtBQUssSUFBSUEsSUFBSVUsT0FBTyxLQUFLLENBQUM7b0JBQzFELG1DQUFtQztvQkFDbkMsTUFBTUksV0FBV0QsUUFBUSxPQUFPLEtBQUssSUFBSUEsS0FBS0UsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQ04sV0FBVztvQkFDMUV6QyxRQUFROEM7b0JBQ1I7Z0JBQ0o7WUFDSjtnQkFDSTtvQkFDSTtnQkFDSjtRQUNSO1FBQ0EsSUFBSSxDQUFDUixRQUFRdEMsS0FBSyxJQUFJQSxPQUFPO1lBQ3pCb0MsTUFBTSxDQUFDbEIsaUJBQWlCcUIsS0FBSyxHQUFHdkM7WUFDaEMsT0FBTztRQUNYLE9BQU8sSUFBSUEsT0FBTztZQUNkLE1BQU1nRCxVQUFVLElBQUluQixPQUFPLE1BQU1TLFFBQVF0QyxLQUFLLEdBQUc7WUFDakQsTUFBTWlELFVBQVVDLE1BQU1DLE9BQU8sQ0FBQ25ELFNBQVNBLE1BQU1vRCxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDQyxLQUFLLENBQUNMLFdBQVdoRCxNQUFNcUQsS0FBSyxDQUFDTDtZQUN2RixJQUFJQyxTQUFTO2dCQUNULElBQUlDLE1BQU1DLE9BQU8sQ0FBQ0YsVUFBVTtvQkFDeEIsSUFBSUEsUUFBUUssTUFBTSxFQUFFO3dCQUNoQnpELE9BQU8wRCxJQUFJLENBQUNOLFFBQVFLLE1BQU0sRUFBRUUsT0FBTyxDQUFDLENBQUNDOzRCQUNqQ3JCLE1BQU0sQ0FBQ3FCLFNBQVMsR0FBR1IsUUFBUUssTUFBTSxDQUFDRyxTQUFTO3dCQUMvQztvQkFDSixPQUFPLElBQUluQixRQUFRRSxJQUFJLEtBQUssVUFBVVMsT0FBTyxDQUFDLEVBQUUsRUFBRTt3QkFDOUNiLE9BQU9TLElBQUksR0FBR0ksT0FBTyxDQUFDLEVBQUU7b0JBQzVCO2dCQUNKO2dCQUNBLE9BQU87WUFDWDtRQUNKO1FBQ0EsT0FBTztJQUNYO0lBQ0EsTUFBTVMsV0FBV3hCLElBQUl5QixLQUFLLENBQUMsQ0FBQ0MsT0FBT3ZCLFNBQVN1QixVQUFVLENBQUN6QixRQUFRMEIsSUFBSSxDQUFDLENBQUNELE9BQU92QixTQUFTdUI7SUFDckYsSUFBSUYsVUFBVTtRQUNWLE9BQU90QjtJQUNYO0lBQ0EsT0FBTztBQUNYO0FBQ0EsU0FBU2pDLGVBQWVILEtBQUssRUFBRW9DLE1BQU07SUFDakMsSUFBSSxDQUFDcEMsTUFBTThELFFBQVEsQ0FBQyxNQUFNO1FBQ3RCLE9BQU85RDtJQUNYO0lBQ0EsS0FBSyxNQUFNdUMsT0FBTzFDLE9BQU8wRCxJQUFJLENBQUNuQixRQUFRO1FBQ2xDLElBQUlwQyxNQUFNOEQsUUFBUSxDQUFDLE1BQU12QixNQUFNO1lBQzNCdkMsUUFBUUEsTUFBTTRCLE9BQU8sQ0FBQyxJQUFJQyxPQUFPLE1BQU1VLE1BQU0sT0FBTyxNQUFNLE1BQU1BLE1BQU0sNkJBQTZCWCxPQUFPLENBQUMsSUFBSUMsT0FBTyxNQUFNVSxNQUFNLE9BQU8sTUFBTSxNQUFNQSxNQUFNLDRCQUE0QlgsT0FBTyxDQUFDLElBQUlDLE9BQU8sTUFBTVUsTUFBTSxPQUFPLE1BQU0sTUFBTUEsTUFBTSx3QkFBd0JYLE9BQU8sQ0FBQyxJQUFJQyxPQUFPLE1BQU1VLE1BQU0sV0FBVyxNQUFNLDBCQUEwQkE7UUFDclY7SUFDSjtJQUNBdkMsUUFBUUEsTUFBTTRCLE9BQU8sQ0FBQyw2QkFBNkIsUUFBUUEsT0FBTyxDQUFDLHlCQUF5QixLQUFLQSxPQUFPLENBQUMsMEJBQTBCLEtBQUtBLE9BQU8sQ0FBQyw2QkFBNkIsS0FBS0EsT0FBTyxDQUFDLDhCQUE4QjtJQUN4TiwrREFBK0Q7SUFDL0QsWUFBWTtJQUNaLE9BQU8sQ0FBQyxHQUFHakIsY0FBY29ELE9BQU8sRUFBRSxNQUFNL0QsT0FBTztRQUMzQ2dFLFVBQVU7SUFDZCxHQUFHNUIsUUFBUWdCLEtBQUssQ0FBQztBQUNyQjtBQUNBLFNBQVNoRCxtQkFBbUI2RCxJQUFJO0lBQzVCLE1BQU1oQyxRQUFRcEMsT0FBT3FFLE1BQU0sQ0FBQyxDQUFDLEdBQUdELEtBQUtoQyxLQUFLO0lBQzFDLE9BQU9BLE1BQU1rQyxZQUFZO0lBQ3pCLE9BQU9sQyxNQUFNbUMsbUJBQW1CO0lBQ2hDLE9BQU9uQyxNQUFNb0MsYUFBYTtJQUMxQixPQUFPcEMsTUFBTXFDLCtCQUErQjtJQUM1QyxPQUFPckMsS0FBSyxDQUFDakIsa0JBQWtCdUQsb0JBQW9CLENBQUM7SUFDcEQsSUFBSUMscUJBQXFCUCxLQUFLUSxXQUFXO0lBQ3pDLEtBQUssTUFBTUMsU0FBUzdFLE9BQU8wRCxJQUFJLENBQUM7UUFDNUIsR0FBR1UsS0FBSzdCLE1BQU07UUFDZCxHQUFHSCxLQUFLO0lBQ1osR0FBRztRQUNDdUMscUJBQXFCL0MsY0FBYytDLG9CQUFvQkU7SUFDM0Q7SUFDQSxNQUFNQyxvQkFBb0IsQ0FBQyxHQUFHN0QsVUFBVThELFFBQVEsRUFBRUo7SUFDbEQsTUFBTUssWUFBWUYsa0JBQWtCMUMsS0FBSztJQUN6QyxNQUFNNkMsV0FBVy9DLGlCQUFpQixLQUFLNEMsa0JBQWtCSSxRQUFRLEdBQUlKLENBQUFBLGtCQUFrQkssSUFBSSxJQUFJLEVBQUM7SUFDaEcsTUFBTUMsZUFBZWxELGlCQUFpQjRDLGtCQUFrQjdCLFFBQVEsSUFBSTtJQUNwRSxNQUFNb0Msb0JBQW9CLEVBQUU7SUFDNUIsTUFBTUMsd0JBQXdCLEVBQUU7SUFDL0IsSUFBR3hFLGNBQWN5RSxZQUFZLEVBQUVOLFVBQVVJO0lBQ3pDLElBQUd2RSxjQUFjeUUsWUFBWSxFQUFFSCxjQUFjRTtJQUM5QyxNQUFNRSxhQUFhLEVBQUU7SUFDckJILGtCQUFrQjFCLE9BQU8sQ0FBQyxDQUFDakIsTUFBTThDLFdBQVdDLElBQUksQ0FBQy9DLElBQUkvQixJQUFJO0lBQ3pEMkUsc0JBQXNCM0IsT0FBTyxDQUFDLENBQUNqQixNQUFNOEMsV0FBV0MsSUFBSSxDQUFDL0MsSUFBSS9CLElBQUk7SUFDN0QsTUFBTStFLG1CQUFtQixDQUFDLEdBQUc1RSxjQUFjb0QsT0FBTyxFQUFFZSxVQUNwRCxvRUFBb0U7SUFDcEUsMEVBQTBFO0lBQzFFLHlFQUF5RTtJQUN6RSx3RUFBd0U7SUFDeEUsaURBQWlEO0lBQ2pEO1FBQ0lkLFVBQVU7SUFDZDtJQUNBLE1BQU13Qix1QkFBdUIsQ0FBQyxHQUFHN0UsY0FBY29ELE9BQU8sRUFBRWtCLGNBQWM7UUFDbEVqQixVQUFVO0lBQ2Q7SUFDQSxvQ0FBb0M7SUFDcEMsS0FBSyxNQUFNLENBQUN6QixLQUFLa0QsV0FBVyxJQUFJNUYsT0FBTzZGLE9BQU8sQ0FBQ2IsV0FBVztRQUN0RCwrREFBK0Q7UUFDL0QsWUFBWTtRQUNaLElBQUkzQixNQUFNQyxPQUFPLENBQUNzQyxhQUFhO1lBQzNCWixTQUFTLENBQUN0QyxJQUFJLEdBQUdrRCxXQUFXRSxHQUFHLENBQUMsQ0FBQzNGLFFBQVFHLGVBQWU0QixpQkFBaUIvQixRQUFRaUUsS0FBSzdCLE1BQU07UUFDaEcsT0FBTyxJQUFJLE9BQU9xRCxlQUFlLFVBQVU7WUFDdkNaLFNBQVMsQ0FBQ3RDLElBQUksR0FBR3BDLGVBQWU0QixpQkFBaUIwRCxhQUFheEIsS0FBSzdCLE1BQU07UUFDN0U7SUFDSjtJQUNBLDBEQUEwRDtJQUMxRCwrQ0FBK0M7SUFDL0MsSUFBSXdELFlBQVkvRixPQUFPMEQsSUFBSSxDQUFDVSxLQUFLN0IsTUFBTSxFQUFFeUQsTUFBTSxDQUFDLENBQUNyRixPQUFPQSxTQUFTO0lBQ2pFLElBQUl5RCxLQUFLNkIsbUJBQW1CLElBQUksQ0FBQ0YsVUFBVS9CLElBQUksQ0FBQyxDQUFDdEIsTUFBTThDLFdBQVd2QixRQUFRLENBQUN2QixPQUFPO1FBQzlFLEtBQUssTUFBTUEsT0FBT3FELFVBQVU7WUFDeEIsSUFBSSxDQUFFckQsQ0FBQUEsT0FBT3NDLFNBQVEsR0FBSTtnQkFDckJBLFNBQVMsQ0FBQ3RDLElBQUksR0FBRzBCLEtBQUs3QixNQUFNLENBQUNHLElBQUk7WUFDckM7UUFDSjtJQUNKO0lBQ0EsSUFBSXdEO0lBQ0osdUZBQXVGO0lBQ3ZGLDZDQUE2QztJQUM3QyxJQUFJLENBQUMsR0FBR2hGLG9CQUFvQmlGLDBCQUEwQixFQUFFbEIsV0FBVztRQUMvRCxLQUFLLE1BQU1tQixXQUFXbkIsU0FBUy9CLEtBQUssQ0FBQyxLQUFLO1lBQ3RDLE1BQU1tRCxTQUFTbkYsb0JBQW9Cb0YsMEJBQTBCLENBQUNDLElBQUksQ0FBQyxDQUFDQyxJQUFJSixRQUFRSyxVQUFVLENBQUNEO1lBQzNGLElBQUlILFFBQVE7Z0JBQ1JqQyxLQUFLN0IsTUFBTSxDQUFDLElBQUksR0FBRzhEO2dCQUNuQjtZQUNKO1FBQ0o7SUFDSjtJQUNBLElBQUk7UUFDQUgsU0FBU1IsaUJBQWlCdEIsS0FBSzdCLE1BQU07UUFDckMsTUFBTSxDQUFDMkMsVUFBVUMsS0FBSyxHQUFHZSxPQUFPaEQsS0FBSyxDQUFDLEtBQUs7UUFDM0M0QixrQkFBa0I3QixRQUFRLEdBQUcwQyxxQkFBcUJ2QixLQUFLN0IsTUFBTTtRQUM3RHVDLGtCQUFrQkksUUFBUSxHQUFHQTtRQUM3Qkosa0JBQWtCSyxJQUFJLEdBQUcsS0FBTUEsQ0FBQUEsT0FBTyxNQUFNLEVBQUMsSUFBTUEsQ0FBQUEsUUFBUSxFQUFDO1FBQzVELE9BQU9MLGtCQUFrQjRCLE1BQU07SUFDbkMsRUFBRSxPQUFPQyxLQUFLO1FBQ1YsSUFBSUEsSUFBSUMsT0FBTyxDQUFDcEQsS0FBSyxDQUFDLGlEQUFpRDtZQUNuRSxNQUFNLElBQUlxRCxNQUFNO1FBQ3BCO1FBQ0EsTUFBTUY7SUFDVjtJQUNBLCtDQUErQztJQUMvQyw4QkFBOEI7SUFDOUIseUJBQXlCO0lBQ3pCLHdDQUF3QztJQUN4QzdCLGtCQUFrQjFDLEtBQUssR0FBRztRQUN0QixHQUFHQSxLQUFLO1FBQ1IsR0FBRzBDLGtCQUFrQjFDLEtBQUs7SUFDOUI7SUFDQSxPQUFPO1FBQ0g4RDtRQUNBbEI7UUFDQUY7SUFDSjtBQUNKLEVBRUEsK0NBQStDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcHJlcGFyZS1kZXN0aW5hdGlvbi5qcz85NTdjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbWF0Y2hIYXM6IG51bGwsXG4gICAgY29tcGlsZU5vblBhdGg6IG51bGwsXG4gICAgcHJlcGFyZURlc3RpbmF0aW9uOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIG1hdGNoSGFzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoSGFzO1xuICAgIH0sXG4gICAgY29tcGlsZU5vblBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY29tcGlsZU5vblBhdGg7XG4gICAgfSxcbiAgICBwcmVwYXJlRGVzdGluYXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcHJlcGFyZURlc3RpbmF0aW9uO1xuICAgIH1cbn0pO1xuY29uc3QgX3BhdGh0b3JlZ2V4cCA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcGF0aC10by1yZWdleHBcIik7XG5jb25zdCBfZXNjYXBlcmVnZXhwID0gcmVxdWlyZShcIi4uLy4uL2VzY2FwZS1yZWdleHBcIik7XG5jb25zdCBfcGFyc2V1cmwgPSByZXF1aXJlKFwiLi9wYXJzZS11cmxcIik7XG5jb25zdCBfaW50ZXJjZXB0aW9ucm91dGVzID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL3NlcnZlci9mdXR1cmUvaGVscGVycy9pbnRlcmNlcHRpb24tcm91dGVzXCIpO1xuY29uc3QgX2FwcHJvdXRlcmhlYWRlcnMgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci1oZWFkZXJzXCIpO1xuY29uc3QgX2dldGNvb2tpZXBhcnNlciA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9zZXJ2ZXIvYXBpLXV0aWxzL2dldC1jb29raWUtcGFyc2VyXCIpO1xuLyoqXG4gKiBFbnN1cmUgb25seSBhLXpBLVogYXJlIHVzZWQgZm9yIHBhcmFtIG5hbWVzIGZvciBwcm9wZXIgaW50ZXJwb2xhdGluZ1xuICogd2l0aCBwYXRoLXRvLXJlZ2V4cFxuICovIGZ1bmN0aW9uIGdldFNhZmVQYXJhbU5hbWUocGFyYW1OYW1lKSB7XG4gICAgbGV0IG5ld1BhcmFtTmFtZSA9IFwiXCI7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHBhcmFtTmFtZS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IGNoYXJDb2RlID0gcGFyYW1OYW1lLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjaGFyQ29kZSA+IDY0ICYmIGNoYXJDb2RlIDwgOTEgfHwgLy8gQS1aXG4gICAgICAgIGNoYXJDb2RlID4gOTYgJiYgY2hhckNvZGUgPCAxMjMgLy8gYS16XG4gICAgICAgICkge1xuICAgICAgICAgICAgbmV3UGFyYW1OYW1lICs9IHBhcmFtTmFtZVtpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3UGFyYW1OYW1lO1xufVxuZnVuY3Rpb24gZXNjYXBlU2VnbWVudChzdHIsIHNlZ21lbnROYW1lKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoXCI6XCIgKyAoMCwgX2VzY2FwZXJlZ2V4cC5lc2NhcGVTdHJpbmdSZWdleHApKHNlZ21lbnROYW1lKSwgXCJnXCIpLCBcIl9fRVNDX0NPTE9OX1wiICsgc2VnbWVudE5hbWUpO1xufVxuZnVuY3Rpb24gdW5lc2NhcGVTZWdtZW50cyhzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL19fRVNDX0NPTE9OXy9naSwgXCI6XCIpO1xufVxuZnVuY3Rpb24gbWF0Y2hIYXMocmVxLCBxdWVyeSwgaGFzLCBtaXNzaW5nKSB7XG4gICAgaWYgKGhhcyA9PT0gdm9pZCAwKSBoYXMgPSBbXTtcbiAgICBpZiAobWlzc2luZyA9PT0gdm9pZCAwKSBtaXNzaW5nID0gW107XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgY29uc3QgaGFzTWF0Y2ggPSAoaGFzSXRlbSk9PntcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBsZXQga2V5ID0gaGFzSXRlbS5rZXk7XG4gICAgICAgIHN3aXRjaChoYXNJdGVtLnR5cGUpe1xuICAgICAgICAgICAgY2FzZSBcImhlYWRlclwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmVxLmhlYWRlcnNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImNvb2tpZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwiY29va2llc1wiIGluIHJlcSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByZXEuY29va2llc1toYXNJdGVtLmtleV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb29raWVzID0gKDAsIF9nZXRjb29raWVwYXJzZXIuZ2V0Q29va2llUGFyc2VyKShyZXEuaGVhZGVycykoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY29va2llc1toYXNJdGVtLmtleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInF1ZXJ5XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHF1ZXJ5W2tleV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJob3N0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGhvc3QgfSA9IChyZXEgPT0gbnVsbCA/IHZvaWQgMCA6IHJlcS5oZWFkZXJzKSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHBvcnQgZnJvbSBob3N0IGlmIHByZXNlbnRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9zdG5hbWUgPSBob3N0ID09IG51bGwgPyB2b2lkIDAgOiBob3N0LnNwbGl0KFwiOlwiLCAxKVswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGhvc3RuYW1lO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghaGFzSXRlbS52YWx1ZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgcGFyYW1zW2dldFNhZmVQYXJhbU5hbWUoa2V5KV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVyID0gbmV3IFJlZ0V4cChcIl5cIiArIGhhc0l0ZW0udmFsdWUgKyBcIiRcIik7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5zbGljZSgtMSlbMF0ubWF0Y2gobWF0Y2hlcikgOiB2YWx1ZS5tYXRjaChtYXRjaGVyKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF0Y2hlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMuZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhtYXRjaGVzLmdyb3VwcykuZm9yRWFjaCgoZ3JvdXBLZXkpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2dyb3VwS2V5XSA9IG1hdGNoZXMuZ3JvdXBzW2dyb3VwS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhc0l0ZW0udHlwZSA9PT0gXCJob3N0XCIgJiYgbWF0Y2hlc1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmhvc3QgPSBtYXRjaGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IGFsbE1hdGNoID0gaGFzLmV2ZXJ5KChpdGVtKT0+aGFzTWF0Y2goaXRlbSkpICYmICFtaXNzaW5nLnNvbWUoKGl0ZW0pPT5oYXNNYXRjaChpdGVtKSk7XG4gICAgaWYgKGFsbE1hdGNoKSB7XG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGNvbXBpbGVOb25QYXRoKHZhbHVlLCBwYXJhbXMpIHtcbiAgICBpZiAoIXZhbHVlLmluY2x1ZGVzKFwiOlwiKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhcmFtcykpe1xuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCI6XCIgKyBrZXkpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChcIjpcIiArIGtleSArIFwiXFxcXCpcIiwgXCJnXCIpLCBcIjpcIiArIGtleSArIFwiLS1FU0NBUEVEX1BBUkFNX0FTVEVSSVNLU1wiKS5yZXBsYWNlKG5ldyBSZWdFeHAoXCI6XCIgKyBrZXkgKyBcIlxcXFw/XCIsIFwiZ1wiKSwgXCI6XCIgKyBrZXkgKyBcIi0tRVNDQVBFRF9QQVJBTV9RVUVTVElPTlwiKS5yZXBsYWNlKG5ldyBSZWdFeHAoXCI6XCIgKyBrZXkgKyBcIlxcXFwrXCIsIFwiZ1wiKSwgXCI6XCIgKyBrZXkgKyBcIi0tRVNDQVBFRF9QQVJBTV9QTFVTXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChcIjpcIiArIGtleSArIFwiKD8hXFxcXHcpXCIsIFwiZ1wiKSwgXCItLUVTQ0FQRURfUEFSQU1fQ09MT05cIiArIGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8oOnxcXCp8XFw/fFxcK3xcXCh8XFwpfFxce3xcXH0pL2csIFwiXFxcXCQxXCIpLnJlcGxhY2UoLy0tRVNDQVBFRF9QQVJBTV9QTFVTL2csIFwiK1wiKS5yZXBsYWNlKC8tLUVTQ0FQRURfUEFSQU1fQ09MT04vZywgXCI6XCIpLnJlcGxhY2UoLy0tRVNDQVBFRF9QQVJBTV9RVUVTVElPTi9nLCBcIj9cIikucmVwbGFjZSgvLS1FU0NBUEVEX1BBUkFNX0FTVEVSSVNLUy9nLCBcIipcIik7XG4gICAgLy8gdGhlIHZhbHVlIG5lZWRzIHRvIHN0YXJ0IHdpdGggYSBmb3J3YXJkLXNsYXNoIHRvIGJlIGNvbXBpbGVkXG4gICAgLy8gY29ycmVjdGx5XG4gICAgcmV0dXJuICgwLCBfcGF0aHRvcmVnZXhwLmNvbXBpbGUpKFwiL1wiICsgdmFsdWUsIHtcbiAgICAgICAgdmFsaWRhdGU6IGZhbHNlXG4gICAgfSkocGFyYW1zKS5zbGljZSgxKTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVEZXN0aW5hdGlvbihhcmdzKSB7XG4gICAgY29uc3QgcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzLnF1ZXJ5KTtcbiAgICBkZWxldGUgcXVlcnkuX19uZXh0TG9jYWxlO1xuICAgIGRlbGV0ZSBxdWVyeS5fX25leHREZWZhdWx0TG9jYWxlO1xuICAgIGRlbGV0ZSBxdWVyeS5fX25leHREYXRhUmVxO1xuICAgIGRlbGV0ZSBxdWVyeS5fX25leHRJbmZlcnJlZExvY2FsZUZyb21EZWZhdWx0O1xuICAgIGRlbGV0ZSBxdWVyeVtfYXBwcm91dGVyaGVhZGVycy5ORVhUX1JTQ19VTklPTl9RVUVSWV07XG4gICAgbGV0IGVzY2FwZWREZXN0aW5hdGlvbiA9IGFyZ3MuZGVzdGluYXRpb247XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBPYmplY3Qua2V5cyh7XG4gICAgICAgIC4uLmFyZ3MucGFyYW1zLFxuICAgICAgICAuLi5xdWVyeVxuICAgIH0pKXtcbiAgICAgICAgZXNjYXBlZERlc3RpbmF0aW9uID0gZXNjYXBlU2VnbWVudChlc2NhcGVkRGVzdGluYXRpb24sIHBhcmFtKTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkRGVzdGluYXRpb24gPSAoMCwgX3BhcnNldXJsLnBhcnNlVXJsKShlc2NhcGVkRGVzdGluYXRpb24pO1xuICAgIGNvbnN0IGRlc3RRdWVyeSA9IHBhcnNlZERlc3RpbmF0aW9uLnF1ZXJ5O1xuICAgIGNvbnN0IGRlc3RQYXRoID0gdW5lc2NhcGVTZWdtZW50cyhcIlwiICsgcGFyc2VkRGVzdGluYXRpb24ucGF0aG5hbWUgKyAocGFyc2VkRGVzdGluYXRpb24uaGFzaCB8fCBcIlwiKSk7XG4gICAgY29uc3QgZGVzdEhvc3RuYW1lID0gdW5lc2NhcGVTZWdtZW50cyhwYXJzZWREZXN0aW5hdGlvbi5ob3N0bmFtZSB8fCBcIlwiKTtcbiAgICBjb25zdCBkZXN0UGF0aFBhcmFtS2V5cyA9IFtdO1xuICAgIGNvbnN0IGRlc3RIb3N0bmFtZVBhcmFtS2V5cyA9IFtdO1xuICAgICgwLCBfcGF0aHRvcmVnZXhwLnBhdGhUb1JlZ2V4cCkoZGVzdFBhdGgsIGRlc3RQYXRoUGFyYW1LZXlzKTtcbiAgICAoMCwgX3BhdGh0b3JlZ2V4cC5wYXRoVG9SZWdleHApKGRlc3RIb3N0bmFtZSwgZGVzdEhvc3RuYW1lUGFyYW1LZXlzKTtcbiAgICBjb25zdCBkZXN0UGFyYW1zID0gW107XG4gICAgZGVzdFBhdGhQYXJhbUtleXMuZm9yRWFjaCgoa2V5KT0+ZGVzdFBhcmFtcy5wdXNoKGtleS5uYW1lKSk7XG4gICAgZGVzdEhvc3RuYW1lUGFyYW1LZXlzLmZvckVhY2goKGtleSk9PmRlc3RQYXJhbXMucHVzaChrZXkubmFtZSkpO1xuICAgIGNvbnN0IGRlc3RQYXRoQ29tcGlsZXIgPSAoMCwgX3BhdGh0b3JlZ2V4cC5jb21waWxlKShkZXN0UGF0aCwgLy8gd2UgZG9uJ3QgdmFsaWRhdGUgd2hpbGUgY29tcGlsaW5nIHRoZSBkZXN0aW5hdGlvbiBzaW5jZSB3ZSBzaG91bGRcbiAgICAvLyBoYXZlIGFscmVhZHkgdmFsaWRhdGVkIGJlZm9yZSB3ZSBnb3QgdG8gdGhpcyBwb2ludCBhbmQgdmFsaWRhdGluZ1xuICAgIC8vIGJyZWFrcyBjb21waWxpbmcgZGVzdGluYXRpb25zIHdpdGggbmFtZWQgcGF0dGVybiBwYXJhbXMgZnJvbSB0aGUgc291cmNlXG4gICAgLy8gZS5nLiAvc29tZXRoaW5nOmhlbGxvKC4qKSAtPiAvYW5vdGhlci86aGVsbG8gaXMgYnJva2VuIHdpdGggdmFsaWRhdGlvblxuICAgIC8vIHNpbmNlIGNvbXBpbGUgdmFsaWRhdGlvbiBpcyBtZWFudCBmb3IgcmV2ZXJzaW5nIGFuZCBub3QgZm9yIGluc2VydGluZ1xuICAgIC8vIHBhcmFtcyBmcm9tIGEgc2VwYXJhdGUgcGF0aC1yZWdleCBpbnRvIGFub3RoZXJcbiAgICB7XG4gICAgICAgIHZhbGlkYXRlOiBmYWxzZVxuICAgIH0pO1xuICAgIGNvbnN0IGRlc3RIb3N0bmFtZUNvbXBpbGVyID0gKDAsIF9wYXRodG9yZWdleHAuY29tcGlsZSkoZGVzdEhvc3RuYW1lLCB7XG4gICAgICAgIHZhbGlkYXRlOiBmYWxzZVxuICAgIH0pO1xuICAgIC8vIHVwZGF0ZSBhbnkgcGFyYW1zIGluIHF1ZXJ5IHZhbHVlc1xuICAgIGZvciAoY29uc3QgW2tleSwgc3RyT3JBcnJheV0gb2YgT2JqZWN0LmVudHJpZXMoZGVzdFF1ZXJ5KSl7XG4gICAgICAgIC8vIHRoZSB2YWx1ZSBuZWVkcyB0byBzdGFydCB3aXRoIGEgZm9yd2FyZC1zbGFzaCB0byBiZSBjb21waWxlZFxuICAgICAgICAvLyBjb3JyZWN0bHlcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3RyT3JBcnJheSkpIHtcbiAgICAgICAgICAgIGRlc3RRdWVyeVtrZXldID0gc3RyT3JBcnJheS5tYXAoKHZhbHVlKT0+Y29tcGlsZU5vblBhdGgodW5lc2NhcGVTZWdtZW50cyh2YWx1ZSksIGFyZ3MucGFyYW1zKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0ck9yQXJyYXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGRlc3RRdWVyeVtrZXldID0gY29tcGlsZU5vblBhdGgodW5lc2NhcGVTZWdtZW50cyhzdHJPckFycmF5KSwgYXJncy5wYXJhbXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGFkZCBwYXRoIHBhcmFtcyB0byBxdWVyeSBpZiBpdCdzIG5vdCBhIHJlZGlyZWN0IGFuZCBub3RcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgaW4gZGVzdGluYXRpb24gcXVlcnkgb3IgcGF0aFxuICAgIGxldCBwYXJhbUtleXMgPSBPYmplY3Qua2V5cyhhcmdzLnBhcmFtcykuZmlsdGVyKChuYW1lKT0+bmFtZSAhPT0gXCJuZXh0SW50ZXJuYWxMb2NhbGVcIik7XG4gICAgaWYgKGFyZ3MuYXBwZW5kUGFyYW1zVG9RdWVyeSAmJiAhcGFyYW1LZXlzLnNvbWUoKGtleSk9PmRlc3RQYXJhbXMuaW5jbHVkZXMoa2V5KSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcGFyYW1LZXlzKXtcbiAgICAgICAgICAgIGlmICghKGtleSBpbiBkZXN0UXVlcnkpKSB7XG4gICAgICAgICAgICAgICAgZGVzdFF1ZXJ5W2tleV0gPSBhcmdzLnBhcmFtc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBuZXdVcmw7XG4gICAgLy8gVGhlIGNvbXBpbGVyIGFsc28gdGhhdCB0aGUgaW50ZXJjZXB0aW9uIHJvdXRlIG1hcmtlciBpcyBhbiB1bm5hbWVkIHBhcmFtLCBoZW5jZSAnMCcsXG4gICAgLy8gc28gd2UgbmVlZCB0byBhZGQgaXQgdG8gdGhlIHBhcmFtcyBvYmplY3QuXG4gICAgaWYgKCgwLCBfaW50ZXJjZXB0aW9ucm91dGVzLmlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoKShkZXN0UGF0aCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIGRlc3RQYXRoLnNwbGl0KFwiL1wiKSl7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXIgPSBfaW50ZXJjZXB0aW9ucm91dGVzLklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLmZpbmQoKG0pPT5zZWdtZW50LnN0YXJ0c1dpdGgobSkpO1xuICAgICAgICAgICAgaWYgKG1hcmtlcikge1xuICAgICAgICAgICAgICAgIGFyZ3MucGFyYW1zW1wiMFwiXSA9IG1hcmtlcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBuZXdVcmwgPSBkZXN0UGF0aENvbXBpbGVyKGFyZ3MucGFyYW1zKTtcbiAgICAgICAgY29uc3QgW3BhdGhuYW1lLCBoYXNoXSA9IG5ld1VybC5zcGxpdChcIiNcIiwgMik7XG4gICAgICAgIHBhcnNlZERlc3RpbmF0aW9uLmhvc3RuYW1lID0gZGVzdEhvc3RuYW1lQ29tcGlsZXIoYXJncy5wYXJhbXMpO1xuICAgICAgICBwYXJzZWREZXN0aW5hdGlvbi5wYXRobmFtZSA9IHBhdGhuYW1lO1xuICAgICAgICBwYXJzZWREZXN0aW5hdGlvbi5oYXNoID0gXCJcIiArIChoYXNoID8gXCIjXCIgOiBcIlwiKSArIChoYXNoIHx8IFwiXCIpO1xuICAgICAgICBkZWxldGUgcGFyc2VkRGVzdGluYXRpb24uc2VhcmNoO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UubWF0Y2goL0V4cGVjdGVkIC4qPyB0byBub3QgcmVwZWF0LCBidXQgZ290IGFuIGFycmF5LykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRvIHVzZSBhIG11bHRpLW1hdGNoIGluIHRoZSBkZXN0aW5hdGlvbiB5b3UgbXVzdCBhZGQgYCpgIGF0IHRoZSBlbmQgb2YgdGhlIHBhcmFtIG5hbWUgdG8gc2lnbmlmeSBpdCBzaG91bGQgcmVwZWF0LiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9pbnZhbGlkLW11bHRpLW1hdGNoXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgLy8gUXVlcnkgbWVyZ2Ugb3JkZXIgbG93ZXN0IHByaW9yaXR5IHRvIGhpZ2hlc3RcbiAgICAvLyAxLiBpbml0aWFsIFVSTCBxdWVyeSB2YWx1ZXNcbiAgICAvLyAyLiBwYXRoIHNlZ21lbnQgdmFsdWVzXG4gICAgLy8gMy4gZGVzdGluYXRpb24gc3BlY2lmaWVkIHF1ZXJ5IHZhbHVlc1xuICAgIHBhcnNlZERlc3RpbmF0aW9uLnF1ZXJ5ID0ge1xuICAgICAgICAuLi5xdWVyeSxcbiAgICAgICAgLi4ucGFyc2VkRGVzdGluYXRpb24ucXVlcnlcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIG5ld1VybCxcbiAgICAgICAgZGVzdFF1ZXJ5LFxuICAgICAgICBwYXJzZWREZXN0aW5hdGlvblxuICAgIH07XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZXBhcmUtZGVzdGluYXRpb24uanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwibWF0Y2hIYXMiLCJjb21waWxlTm9uUGF0aCIsInByZXBhcmVEZXN0aW5hdGlvbiIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsIl9wYXRodG9yZWdleHAiLCJyZXF1aXJlIiwiX2VzY2FwZXJlZ2V4cCIsIl9wYXJzZXVybCIsIl9pbnRlcmNlcHRpb25yb3V0ZXMiLCJfYXBwcm91dGVyaGVhZGVycyIsIl9nZXRjb29raWVwYXJzZXIiLCJnZXRTYWZlUGFyYW1OYW1lIiwicGFyYW1OYW1lIiwibmV3UGFyYW1OYW1lIiwiaSIsImxlbmd0aCIsImNoYXJDb2RlIiwiY2hhckNvZGVBdCIsImVzY2FwZVNlZ21lbnQiLCJzdHIiLCJzZWdtZW50TmFtZSIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVTdHJpbmdSZWdleHAiLCJ1bmVzY2FwZVNlZ21lbnRzIiwicmVxIiwicXVlcnkiLCJoYXMiLCJtaXNzaW5nIiwicGFyYW1zIiwiaGFzTWF0Y2giLCJoYXNJdGVtIiwia2V5IiwidHlwZSIsInRvTG93ZXJDYXNlIiwiaGVhZGVycyIsImNvb2tpZXMiLCJnZXRDb29raWVQYXJzZXIiLCJob3N0IiwiaG9zdG5hbWUiLCJzcGxpdCIsIm1hdGNoZXIiLCJtYXRjaGVzIiwiQXJyYXkiLCJpc0FycmF5Iiwic2xpY2UiLCJtYXRjaCIsImdyb3VwcyIsImtleXMiLCJmb3JFYWNoIiwiZ3JvdXBLZXkiLCJhbGxNYXRjaCIsImV2ZXJ5IiwiaXRlbSIsInNvbWUiLCJpbmNsdWRlcyIsImNvbXBpbGUiLCJ2YWxpZGF0ZSIsImFyZ3MiLCJhc3NpZ24iLCJfX25leHRMb2NhbGUiLCJfX25leHREZWZhdWx0TG9jYWxlIiwiX19uZXh0RGF0YVJlcSIsIl9fbmV4dEluZmVycmVkTG9jYWxlRnJvbURlZmF1bHQiLCJORVhUX1JTQ19VTklPTl9RVUVSWSIsImVzY2FwZWREZXN0aW5hdGlvbiIsImRlc3RpbmF0aW9uIiwicGFyYW0iLCJwYXJzZWREZXN0aW5hdGlvbiIsInBhcnNlVXJsIiwiZGVzdFF1ZXJ5IiwiZGVzdFBhdGgiLCJwYXRobmFtZSIsImhhc2giLCJkZXN0SG9zdG5hbWUiLCJkZXN0UGF0aFBhcmFtS2V5cyIsImRlc3RIb3N0bmFtZVBhcmFtS2V5cyIsInBhdGhUb1JlZ2V4cCIsImRlc3RQYXJhbXMiLCJwdXNoIiwiZGVzdFBhdGhDb21waWxlciIsImRlc3RIb3N0bmFtZUNvbXBpbGVyIiwic3RyT3JBcnJheSIsImVudHJpZXMiLCJtYXAiLCJwYXJhbUtleXMiLCJmaWx0ZXIiLCJhcHBlbmRQYXJhbXNUb1F1ZXJ5IiwibmV3VXJsIiwiaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgiLCJzZWdtZW50IiwibWFya2VyIiwiSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMiLCJmaW5kIiwibSIsInN0YXJ0c1dpdGgiLCJzZWFyY2giLCJlcnIiLCJtZXNzYWdlIiwiRXJyb3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/prepare-destination.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/querystring.js": +/*!***********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/querystring.js ***! + \***********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n searchParamsToUrlQuery: function() {\n return searchParamsToUrlQuery;\n },\n urlQueryToSearchParams: function() {\n return urlQueryToSearchParams;\n },\n assign: function() {\n return assign;\n }\n});\nfunction searchParamsToUrlQuery(searchParams) {\n const query = {};\n searchParams.forEach((value, key)=>{\n if (typeof query[key] === \"undefined\") {\n query[key] = value;\n } else if (Array.isArray(query[key])) {\n query[key].push(value);\n } else {\n query[key] = [\n query[key],\n value\n ];\n }\n });\n return query;\n}\nfunction stringifyUrlQueryParam(param) {\n if (typeof param === \"string\" || typeof param === \"number\" && !isNaN(param) || typeof param === \"boolean\") {\n return String(param);\n } else {\n return \"\";\n }\n}\nfunction urlQueryToSearchParams(urlQuery) {\n const result = new URLSearchParams();\n Object.entries(urlQuery).forEach((param)=>{\n let [key, value] = param;\n if (Array.isArray(value)) {\n value.forEach((item)=>result.append(key, stringifyUrlQueryParam(item)));\n } else {\n result.set(key, stringifyUrlQueryParam(value));\n }\n });\n return result;\n}\nfunction assign(target) {\n for(var _len = arguments.length, searchParamsList = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n searchParamsList[_key - 1] = arguments[_key];\n }\n searchParamsList.forEach((searchParams)=>{\n Array.from(searchParams.keys()).forEach((key)=>target.delete(key));\n searchParams.forEach((value, key)=>target.append(key, value));\n });\n return target;\n} //# sourceMappingURL=querystring.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3F1ZXJ5c3RyaW5nLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBSU47QUFDQSxTQUFTSSxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVixPQUFPQyxjQUFjLENBQUNRLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUU4sU0FBUztJQUNiRyx3QkFBd0I7UUFDcEIsT0FBT0E7SUFDWDtJQUNBQyx3QkFBd0I7UUFDcEIsT0FBT0E7SUFDWDtJQUNBQyxRQUFRO1FBQ0osT0FBT0E7SUFDWDtBQUNKO0FBQ0EsU0FBU0YsdUJBQXVCUyxZQUFZO0lBQ3hDLE1BQU1DLFFBQVEsQ0FBQztJQUNmRCxhQUFhRSxPQUFPLENBQUMsQ0FBQ2IsT0FBT2M7UUFDekIsSUFBSSxPQUFPRixLQUFLLENBQUNFLElBQUksS0FBSyxhQUFhO1lBQ25DRixLQUFLLENBQUNFLElBQUksR0FBR2Q7UUFDakIsT0FBTyxJQUFJZSxNQUFNQyxPQUFPLENBQUNKLEtBQUssQ0FBQ0UsSUFBSSxHQUFHO1lBQ2xDRixLQUFLLENBQUNFLElBQUksQ0FBQ0csSUFBSSxDQUFDakI7UUFDcEIsT0FBTztZQUNIWSxLQUFLLENBQUNFLElBQUksR0FBRztnQkFDVEYsS0FBSyxDQUFDRSxJQUFJO2dCQUNWZDthQUNIO1FBQ0w7SUFDSjtJQUNBLE9BQU9ZO0FBQ1g7QUFDQSxTQUFTTSx1QkFBdUJDLEtBQUs7SUFDakMsSUFBSSxPQUFPQSxVQUFVLFlBQVksT0FBT0EsVUFBVSxZQUFZLENBQUNDLE1BQU1ELFVBQVUsT0FBT0EsVUFBVSxXQUFXO1FBQ3ZHLE9BQU9FLE9BQU9GO0lBQ2xCLE9BQU87UUFDSCxPQUFPO0lBQ1g7QUFDSjtBQUNBLFNBQVNoQix1QkFBdUJtQixRQUFRO0lBQ3BDLE1BQU1DLFNBQVMsSUFBSUM7SUFDbkIzQixPQUFPNEIsT0FBTyxDQUFDSCxVQUFVVCxPQUFPLENBQUMsQ0FBQ007UUFDOUIsSUFBSSxDQUFDTCxLQUFLZCxNQUFNLEdBQUdtQjtRQUNuQixJQUFJSixNQUFNQyxPQUFPLENBQUNoQixRQUFRO1lBQ3RCQSxNQUFNYSxPQUFPLENBQUMsQ0FBQ2EsT0FBT0gsT0FBT0ksTUFBTSxDQUFDYixLQUFLSSx1QkFBdUJRO1FBQ3BFLE9BQU87WUFDSEgsT0FBT0ssR0FBRyxDQUFDZCxLQUFLSSx1QkFBdUJsQjtRQUMzQztJQUNKO0lBQ0EsT0FBT3VCO0FBQ1g7QUFDQSxTQUFTbkIsT0FBT0UsTUFBTTtJQUNsQixJQUFJLElBQUl1QixPQUFPQyxVQUFVQyxNQUFNLEVBQUVDLG1CQUFtQixJQUFJakIsTUFBTWMsT0FBTyxJQUFJQSxPQUFPLElBQUksSUFBSUksT0FBTyxHQUFHQSxPQUFPSixNQUFNSSxPQUFPO1FBQ2xIRCxnQkFBZ0IsQ0FBQ0MsT0FBTyxFQUFFLEdBQUdILFNBQVMsQ0FBQ0csS0FBSztJQUNoRDtJQUNBRCxpQkFBaUJuQixPQUFPLENBQUMsQ0FBQ0Y7UUFDdEJJLE1BQU1tQixJQUFJLENBQUN2QixhQUFhd0IsSUFBSSxJQUFJdEIsT0FBTyxDQUFDLENBQUNDLE1BQU1SLE9BQU84QixNQUFNLENBQUN0QjtRQUM3REgsYUFBYUUsT0FBTyxDQUFDLENBQUNiLE9BQU9jLE1BQU1SLE9BQU9xQixNQUFNLENBQUNiLEtBQUtkO0lBQzFEO0lBQ0EsT0FBT007QUFDWCxFQUVBLHVDQUF1QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3F1ZXJ5c3RyaW5nLmpzPzAxNDkiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5OiBudWxsLFxuICAgIHVybFF1ZXJ5VG9TZWFyY2hQYXJhbXM6IG51bGwsXG4gICAgYXNzaWduOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIHNlYXJjaFBhcmFtc1RvVXJsUXVlcnk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2VhcmNoUGFyYW1zVG9VcmxRdWVyeTtcbiAgICB9LFxuICAgIHVybFF1ZXJ5VG9TZWFyY2hQYXJhbXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXJsUXVlcnlUb1NlYXJjaFBhcmFtcztcbiAgICB9LFxuICAgIGFzc2lnbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBhc3NpZ247XG4gICAgfVxufSk7XG5mdW5jdGlvbiBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5KHNlYXJjaFBhcmFtcykge1xuICAgIGNvbnN0IHF1ZXJ5ID0ge307XG4gICAgc2VhcmNoUGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpPT57XG4gICAgICAgIGlmICh0eXBlb2YgcXVlcnlba2V5XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcXVlcnlba2V5XSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlba2V5XSkpIHtcbiAgICAgICAgICAgIHF1ZXJ5W2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVyeVtrZXldID0gW1xuICAgICAgICAgICAgICAgIHF1ZXJ5W2tleV0sXG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcXVlcnk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlVcmxRdWVyeVBhcmFtKHBhcmFtKSB7XG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgcGFyYW0gPT09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHBhcmFtKSB8fCB0eXBlb2YgcGFyYW0gPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHVybFF1ZXJ5VG9TZWFyY2hQYXJhbXModXJsUXVlcnkpIHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgT2JqZWN0LmVudHJpZXModXJsUXVlcnkpLmZvckVhY2goKHBhcmFtKT0+e1xuICAgICAgICBsZXQgW2tleSwgdmFsdWVdID0gcGFyYW07XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgoaXRlbSk9PnJlc3VsdC5hcHBlbmQoa2V5LCBzdHJpbmdpZnlVcmxRdWVyeVBhcmFtKGl0ZW0pKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc2V0KGtleSwgc3RyaW5naWZ5VXJsUXVlcnlQYXJhbSh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQpIHtcbiAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzZWFyY2hQYXJhbXNMaXN0ID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICBzZWFyY2hQYXJhbXNMaXN0W19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgc2VhcmNoUGFyYW1zTGlzdC5mb3JFYWNoKChzZWFyY2hQYXJhbXMpPT57XG4gICAgICAgIEFycmF5LmZyb20oc2VhcmNoUGFyYW1zLmtleXMoKSkuZm9yRWFjaCgoa2V5KT0+dGFyZ2V0LmRlbGV0ZShrZXkpKTtcbiAgICAgICAgc2VhcmNoUGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpPT50YXJnZXQuYXBwZW5kKGtleSwgdmFsdWUpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1xdWVyeXN0cmluZy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsImFzc2lnbiIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsInNlYXJjaFBhcmFtcyIsInF1ZXJ5IiwiZm9yRWFjaCIsImtleSIsIkFycmF5IiwiaXNBcnJheSIsInB1c2giLCJzdHJpbmdpZnlVcmxRdWVyeVBhcmFtIiwicGFyYW0iLCJpc05hTiIsIlN0cmluZyIsInVybFF1ZXJ5IiwicmVzdWx0IiwiVVJMU2VhcmNoUGFyYW1zIiwiZW50cmllcyIsIml0ZW0iLCJhcHBlbmQiLCJzZXQiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic2VhcmNoUGFyYW1zTGlzdCIsIl9rZXkiLCJmcm9tIiwia2V5cyIsImRlbGV0ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/querystring.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js": +/*!******************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js ***! + \******************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removePathPrefix\", ({\n enumerable: true,\n get: function() {\n return removePathPrefix;\n }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"./node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction removePathPrefix(path, prefix) {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!(0, _pathhasprefix.pathHasPrefix)(path, prefix)) {\n return path;\n }\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length);\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith(\"/\")) {\n return withoutPrefix;\n }\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return \"/\" + withoutPrefix;\n} //# sourceMappingURL=remove-path-prefix.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS1wYXRoLXByZWZpeC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsb0RBQW1EO0lBQy9DSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsaUJBQWlCQyxtQkFBT0EsQ0FBQyw4RkFBbUI7QUFDbEQsU0FBU0YsaUJBQWlCRyxJQUFJLEVBQUVDLE1BQU07SUFDbEMseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSxrQkFBa0I7SUFDbEIsRUFBRTtJQUNGLG9CQUFvQjtJQUNwQixFQUFFO0lBQ0Ysa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsdUJBQXVCO0lBQ3ZCLHdCQUF3QjtJQUN4Qix5QkFBeUI7SUFDekIsSUFBSSxDQUFDLENBQUMsR0FBR0gsZUFBZUksYUFBYSxFQUFFRixNQUFNQyxTQUFTO1FBQ2xELE9BQU9EO0lBQ1g7SUFDQSwrQ0FBK0M7SUFDL0MsTUFBTUcsZ0JBQWdCSCxLQUFLSSxLQUFLLENBQUNILE9BQU9JLE1BQU07SUFDOUMsMkVBQTJFO0lBQzNFLElBQUlGLGNBQWNHLFVBQVUsQ0FBQyxNQUFNO1FBQy9CLE9BQU9IO0lBQ1g7SUFDQSw0RUFBNEU7SUFDNUUsbURBQW1EO0lBQ25ELE9BQU8sTUFBTUE7QUFDakIsRUFFQSw4Q0FBOEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yZW1vdmUtcGF0aC1wcmVmaXguanM/NjE0MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlbW92ZVBhdGhQcmVmaXhcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZVBhdGhQcmVmaXg7XG4gICAgfVxufSk7XG5jb25zdCBfcGF0aGhhc3ByZWZpeCA9IHJlcXVpcmUoXCIuL3BhdGgtaGFzLXByZWZpeFwiKTtcbmZ1bmN0aW9uIHJlbW92ZVBhdGhQcmVmaXgocGF0aCwgcHJlZml4KSB7XG4gICAgLy8gSWYgdGhlIHBhdGggZG9lc24ndCBzdGFydCB3aXRoIHRoZSBwcmVmaXggd2UgY2FuIHJldHVybiBpdCBhcyBpcy4gVGhpc1xuICAgIC8vIHByb3RlY3RzIHVzIGZyb20gc2l0dWF0aW9ucyB3aGVyZSB0aGUgcHJlZml4IGlzIGEgc3Vic3RyaW5nIG9mIHRoZSBwYXRoXG4gICAgLy8gcHJlZml4IHN1Y2ggYXM6XG4gICAgLy9cbiAgICAvLyBGb3IgcHJlZml4OiAvYmxvZ1xuICAgIC8vXG4gICAgLy8gICAvYmxvZyAtPiB0cnVlXG4gICAgLy8gICAvYmxvZy8gLT4gdHJ1ZVxuICAgIC8vICAgL2Jsb2cvMSAtPiB0cnVlXG4gICAgLy8gICAvYmxvZ2dpbmcgLT4gZmFsc2VcbiAgICAvLyAgIC9ibG9nZ2luZy8gLT4gZmFsc2VcbiAgICAvLyAgIC9ibG9nZ2luZy8xIC0+IGZhbHNlXG4gICAgaWYgKCEoMCwgX3BhdGhoYXNwcmVmaXgucGF0aEhhc1ByZWZpeCkocGF0aCwgcHJlZml4KSkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBwcmVmaXggZnJvbSB0aGUgcGF0aCB2aWEgc2xpY2luZy5cbiAgICBjb25zdCB3aXRob3V0UHJlZml4ID0gcGF0aC5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgICAvLyBJZiB0aGUgcGF0aCB3aXRob3V0IHRoZSBwcmVmaXggc3RhcnRzIHdpdGggYSBgL2Agd2UgY2FuIHJldHVybiBpdCBhcyBpcy5cbiAgICBpZiAod2l0aG91dFByZWZpeC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gd2l0aG91dFByZWZpeDtcbiAgICB9XG4gICAgLy8gSWYgdGhlIHBhdGggd2l0aG91dCB0aGUgcHJlZml4IGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIGAvYCB3ZSBuZWVkIHRvIGFkZCBpdFxuICAgIC8vIGJhY2sgdG8gdGhlIHBhdGggdG8gbWFrZSBzdXJlIGl0J3MgYSB2YWxpZCBwYXRoLlxuICAgIHJldHVybiBcIi9cIiArIHdpdGhvdXRQcmVmaXg7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlbW92ZS1wYXRoLXByZWZpeC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicmVtb3ZlUGF0aFByZWZpeCIsIl9wYXRoaGFzcHJlZml4IiwicmVxdWlyZSIsInBhdGgiLCJwcmVmaXgiLCJwYXRoSGFzUHJlZml4Iiwid2l0aG91dFByZWZpeCIsInNsaWNlIiwibGVuZ3RoIiwic3RhcnRzV2l0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js ***! + \*********************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"removeTrailingSlash\", ({\n enumerable: true,\n get: function() {\n return removeTrailingSlash;\n }\n}));\nfunction removeTrailingSlash(route) {\n return route.replace(/\\/$/, \"\") || \"/\";\n} //# sourceMappingURL=remove-trailing-slash.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS10cmFpbGluZy1zbGFzaC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0NBTUMsR0FBZ0I7QUFDakJBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCx1REFBc0Q7SUFDbERJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixTQUFTQSxvQkFBb0JDLEtBQUs7SUFDOUIsT0FBT0EsTUFBTUMsT0FBTyxDQUFDLE9BQU8sT0FBTztBQUN2QyxFQUVBLGlEQUFpRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS10cmFpbGluZy1zbGFzaC5qcz9lYzA2Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZm9yIGEgZ2l2ZW4gcm91dGUgb3IgcGFnZSBwYXRoLiBQcmVzZXJ2ZXMgdGhlXG4gKiByb290IHBhZ2UuIEV4YW1wbGVzOlxuICogICAtIGAvZm9vL2Jhci9gIC0+IGAvZm9vL2JhcmBcbiAqICAgLSBgL2Zvby9iYXJgIC0+IGAvZm9vL2JhcmBcbiAqICAgLSBgL2AgLT4gYC9gXG4gKi8gXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZW1vdmVUcmFpbGluZ1NsYXNoXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZW1vdmVUcmFpbGluZ1NsYXNoO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gcmVtb3ZlVHJhaWxpbmdTbGFzaChyb3V0ZSkge1xuICAgIHJldHVybiByb3V0ZS5yZXBsYWNlKC9cXC8kLywgXCJcIikgfHwgXCIvXCI7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlbW92ZS10cmFpbGluZy1zbGFzaC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsInJvdXRlIiwicmVwbGFjZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js": +/*!****************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js ***! + \****************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return resolveRewrites;\n }\n}));\nconst _pathmatch = __webpack_require__(/*! ./path-match */ \"./node_modules/next/dist/shared/lib/router/utils/path-match.js\");\nconst _preparedestination = __webpack_require__(/*! ./prepare-destination */ \"./node_modules/next/dist/shared/lib/router/utils/prepare-destination.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _normalizelocalepath = __webpack_require__(/*! ../../i18n/normalize-locale-path */ \"./node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _removebasepath = __webpack_require__(/*! ../../../../client/remove-base-path */ \"./node_modules/next/dist/client/remove-base-path.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./parse-relative-url */ \"./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nfunction resolveRewrites(asPath, pages, rewrites, query, resolveHref, locales) {\n let matchedPage = false;\n let externalDest = false;\n let parsedAs = (0, _parserelativeurl.parseRelativeUrl)(asPath);\n let fsPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(parsedAs.pathname), locales).pathname);\n let resolvedHref;\n const handleRewrite = (rewrite)=>{\n const matcher = (0, _pathmatch.getPathMatch)(rewrite.source + ( false ? 0 : \"\"), {\n removeUnnamedParams: true,\n strict: true\n });\n let params = matcher(parsedAs.pathname);\n if ((rewrite.has || rewrite.missing) && params) {\n const hasParams = (0, _preparedestination.matchHas)({\n headers: {\n host: document.location.hostname,\n \"user-agent\": navigator.userAgent\n },\n cookies: document.cookie.split(\"; \").reduce((acc, item)=>{\n const [key, ...value] = item.split(\"=\");\n acc[key] = value.join(\"=\");\n return acc;\n }, {})\n }, parsedAs.query, rewrite.has, rewrite.missing);\n if (hasParams) {\n Object.assign(params, hasParams);\n } else {\n params = false;\n }\n }\n if (params) {\n if (!rewrite.destination) {\n // this is a proxied rewrite which isn't handled on the client\n externalDest = true;\n return true;\n }\n const destRes = (0, _preparedestination.prepareDestination)({\n appendParamsToQuery: true,\n destination: rewrite.destination,\n params: params,\n query: query\n });\n parsedAs = destRes.parsedDestination;\n asPath = destRes.newUrl;\n Object.assign(query, destRes.parsedDestination.query);\n fsPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(asPath), locales).pathname);\n if (pages.includes(fsPathname)) {\n // check if we now match a page as this means we are done\n // resolving the rewrites\n matchedPage = true;\n resolvedHref = fsPathname;\n return true;\n }\n // check if we match a dynamic-route, if so we break the rewrites chain\n resolvedHref = resolveHref(fsPathname);\n if (resolvedHref !== asPath && pages.includes(resolvedHref)) {\n matchedPage = true;\n return true;\n }\n }\n };\n let finished = false;\n for(let i = 0; i < rewrites.beforeFiles.length; i++){\n // we don't end after match in beforeFiles to allow\n // continuing through all beforeFiles rewrites\n handleRewrite(rewrites.beforeFiles[i]);\n }\n matchedPage = pages.includes(fsPathname);\n if (!matchedPage) {\n if (!finished) {\n for(let i = 0; i < rewrites.afterFiles.length; i++){\n if (handleRewrite(rewrites.afterFiles[i])) {\n finished = true;\n break;\n }\n }\n }\n // check dynamic route before processing fallback rewrites\n if (!finished) {\n resolvedHref = resolveHref(fsPathname);\n matchedPage = pages.includes(resolvedHref);\n finished = matchedPage;\n }\n if (!finished) {\n for(let i = 0; i < rewrites.fallback.length; i++){\n if (handleRewrite(rewrites.fallback[i])) {\n finished = true;\n break;\n }\n }\n }\n }\n return {\n asPath,\n parsedAs,\n matchedPage,\n resolvedHref,\n externalDest\n };\n} //# sourceMappingURL=resolve-rewrites.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3Jlc29sdmUtcmV3cml0ZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILDJDQUEwQztJQUN0Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLGFBQWFDLG1CQUFPQSxDQUFDLG9GQUFjO0FBQ3pDLE1BQU1DLHNCQUFzQkQsbUJBQU9BLENBQUMsc0dBQXVCO0FBQzNELE1BQU1FLHVCQUF1QkYsbUJBQU9BLENBQUMsMEdBQXlCO0FBQzlELE1BQU1HLHVCQUF1QkgsbUJBQU9BLENBQUMsMkdBQWtDO0FBQ3ZFLE1BQU1JLGtCQUFrQkosbUJBQU9BLENBQUMsZ0dBQXFDO0FBQ3JFLE1BQU1LLG9CQUFvQkwsbUJBQU9BLENBQUMsb0dBQXNCO0FBQ3hELFNBQVNGLGdCQUFnQlEsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxXQUFXLEVBQUVDLE9BQU87SUFDekUsSUFBSUMsY0FBYztJQUNsQixJQUFJQyxlQUFlO0lBQ25CLElBQUlDLFdBQVcsQ0FBQyxHQUFHVCxrQkFBa0JVLGdCQUFnQixFQUFFVDtJQUN2RCxJQUFJVSxhQUFhLENBQUMsR0FBR2QscUJBQXFCZSxtQkFBbUIsRUFBRSxDQUFDLEdBQUdkLHFCQUFxQmUsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHZCxnQkFBZ0JlLGNBQWMsRUFBRUwsU0FBU00sUUFBUSxHQUFHVCxTQUFTUyxRQUFRO0lBQ3RMLElBQUlDO0lBQ0osTUFBTUMsZ0JBQWdCLENBQUNDO1FBQ25CLE1BQU1DLFVBQVUsQ0FBQyxHQUFHekIsV0FBVzBCLFlBQVksRUFBRUYsUUFBUUcsTUFBTSxHQUFJQyxDQUFBQSxNQUFpQyxHQUFHLENBQU0sR0FBRyxFQUFDLEdBQUk7WUFDN0dHLHFCQUFxQjtZQUNyQkMsUUFBUTtRQUNaO1FBQ0EsSUFBSUMsU0FBU1IsUUFBUVYsU0FBU00sUUFBUTtRQUN0QyxJQUFJLENBQUNHLFFBQVFVLEdBQUcsSUFBSVYsUUFBUVcsT0FBTyxLQUFLRixRQUFRO1lBQzVDLE1BQU1HLFlBQVksQ0FBQyxHQUFHbEMsb0JBQW9CbUMsUUFBUSxFQUFFO2dCQUNoREMsU0FBUztvQkFDTEMsTUFBTUMsU0FBU0MsUUFBUSxDQUFDQyxRQUFRO29CQUNoQyxjQUFjQyxVQUFVQyxTQUFTO2dCQUNyQztnQkFDQUMsU0FBU0wsU0FBU00sTUFBTSxDQUFDQyxLQUFLLENBQUMsTUFBTUMsTUFBTSxDQUFDLENBQUNDLEtBQUtDO29CQUM5QyxNQUFNLENBQUNDLEtBQUssR0FBR3ZELE1BQU0sR0FBR3NELEtBQUtILEtBQUssQ0FBQztvQkFDbkNFLEdBQUcsQ0FBQ0UsSUFBSSxHQUFHdkQsTUFBTXdELElBQUksQ0FBQztvQkFDdEIsT0FBT0g7Z0JBQ1gsR0FBRyxDQUFDO1lBQ1IsR0FBR2xDLFNBQVNMLEtBQUssRUFBRWMsUUFBUVUsR0FBRyxFQUFFVixRQUFRVyxPQUFPO1lBQy9DLElBQUlDLFdBQVc7Z0JBQ1gzQyxPQUFPNEQsTUFBTSxDQUFDcEIsUUFBUUc7WUFDMUIsT0FBTztnQkFDSEgsU0FBUztZQUNiO1FBQ0o7UUFDQSxJQUFJQSxRQUFRO1lBQ1IsSUFBSSxDQUFDVCxRQUFROEIsV0FBVyxFQUFFO2dCQUN0Qiw4REFBOEQ7Z0JBQzlEeEMsZUFBZTtnQkFDZixPQUFPO1lBQ1g7WUFDQSxNQUFNeUMsVUFBVSxDQUFDLEdBQUdyRCxvQkFBb0JzRCxrQkFBa0IsRUFBRTtnQkFDeERDLHFCQUFxQjtnQkFDckJILGFBQWE5QixRQUFROEIsV0FBVztnQkFDaENyQixRQUFRQTtnQkFDUnZCLE9BQU9BO1lBQ1g7WUFDQUssV0FBV3dDLFFBQVFHLGlCQUFpQjtZQUNwQ25ELFNBQVNnRCxRQUFRSSxNQUFNO1lBQ3ZCbEUsT0FBTzRELE1BQU0sQ0FBQzNDLE9BQU82QyxRQUFRRyxpQkFBaUIsQ0FBQ2hELEtBQUs7WUFDcERPLGFBQWEsQ0FBQyxHQUFHZCxxQkFBcUJlLG1CQUFtQixFQUFFLENBQUMsR0FBR2QscUJBQXFCZSxtQkFBbUIsRUFBRSxDQUFDLEdBQUdkLGdCQUFnQmUsY0FBYyxFQUFFYixTQUFTSyxTQUFTUyxRQUFRO1lBQ3ZLLElBQUliLE1BQU1vRCxRQUFRLENBQUMzQyxhQUFhO2dCQUM1Qix5REFBeUQ7Z0JBQ3pELHlCQUF5QjtnQkFDekJKLGNBQWM7Z0JBQ2RTLGVBQWVMO2dCQUNmLE9BQU87WUFDWDtZQUNBLHVFQUF1RTtZQUN2RUssZUFBZVgsWUFBWU07WUFDM0IsSUFBSUssaUJBQWlCZixVQUFVQyxNQUFNb0QsUUFBUSxDQUFDdEMsZUFBZTtnQkFDekRULGNBQWM7Z0JBQ2QsT0FBTztZQUNYO1FBQ0o7SUFDSjtJQUNBLElBQUlnRCxXQUFXO0lBQ2YsSUFBSSxJQUFJQyxJQUFJLEdBQUdBLElBQUlyRCxTQUFTc0QsV0FBVyxDQUFDQyxNQUFNLEVBQUVGLElBQUk7UUFDaEQsbURBQW1EO1FBQ25ELDhDQUE4QztRQUM5Q3ZDLGNBQWNkLFNBQVNzRCxXQUFXLENBQUNELEVBQUU7SUFDekM7SUFDQWpELGNBQWNMLE1BQU1vRCxRQUFRLENBQUMzQztJQUM3QixJQUFJLENBQUNKLGFBQWE7UUFDZCxJQUFJLENBQUNnRCxVQUFVO1lBQ1gsSUFBSSxJQUFJQyxJQUFJLEdBQUdBLElBQUlyRCxTQUFTd0QsVUFBVSxDQUFDRCxNQUFNLEVBQUVGLElBQUk7Z0JBQy9DLElBQUl2QyxjQUFjZCxTQUFTd0QsVUFBVSxDQUFDSCxFQUFFLEdBQUc7b0JBQ3ZDRCxXQUFXO29CQUNYO2dCQUNKO1lBQ0o7UUFDSjtRQUNBLDBEQUEwRDtRQUMxRCxJQUFJLENBQUNBLFVBQVU7WUFDWHZDLGVBQWVYLFlBQVlNO1lBQzNCSixjQUFjTCxNQUFNb0QsUUFBUSxDQUFDdEM7WUFDN0J1QyxXQUFXaEQ7UUFDZjtRQUNBLElBQUksQ0FBQ2dELFVBQVU7WUFDWCxJQUFJLElBQUlDLElBQUksR0FBR0EsSUFBSXJELFNBQVN5RCxRQUFRLENBQUNGLE1BQU0sRUFBRUYsSUFBSTtnQkFDN0MsSUFBSXZDLGNBQWNkLFNBQVN5RCxRQUFRLENBQUNKLEVBQUUsR0FBRztvQkFDckNELFdBQVc7b0JBQ1g7Z0JBQ0o7WUFDSjtRQUNKO0lBQ0o7SUFDQSxPQUFPO1FBQ0h0RDtRQUNBUTtRQUNBRjtRQUNBUztRQUNBUjtJQUNKO0FBQ0osRUFFQSw0Q0FBNEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yZXNvbHZlLXJld3JpdGVzLmpzPzkxNGEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlUmV3cml0ZXM7XG4gICAgfVxufSk7XG5jb25zdCBfcGF0aG1hdGNoID0gcmVxdWlyZShcIi4vcGF0aC1tYXRjaFwiKTtcbmNvbnN0IF9wcmVwYXJlZGVzdGluYXRpb24gPSByZXF1aXJlKFwiLi9wcmVwYXJlLWRlc3RpbmF0aW9uXCIpO1xuY29uc3QgX3JlbW92ZXRyYWlsaW5nc2xhc2ggPSByZXF1aXJlKFwiLi9yZW1vdmUtdHJhaWxpbmctc2xhc2hcIik7XG5jb25zdCBfbm9ybWFsaXplbG9jYWxlcGF0aCA9IHJlcXVpcmUoXCIuLi8uLi9pMThuL25vcm1hbGl6ZS1sb2NhbGUtcGF0aFwiKTtcbmNvbnN0IF9yZW1vdmViYXNlcGF0aCA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9jbGllbnQvcmVtb3ZlLWJhc2UtcGF0aFwiKTtcbmNvbnN0IF9wYXJzZXJlbGF0aXZldXJsID0gcmVxdWlyZShcIi4vcGFyc2UtcmVsYXRpdmUtdXJsXCIpO1xuZnVuY3Rpb24gcmVzb2x2ZVJld3JpdGVzKGFzUGF0aCwgcGFnZXMsIHJld3JpdGVzLCBxdWVyeSwgcmVzb2x2ZUhyZWYsIGxvY2FsZXMpIHtcbiAgICBsZXQgbWF0Y2hlZFBhZ2UgPSBmYWxzZTtcbiAgICBsZXQgZXh0ZXJuYWxEZXN0ID0gZmFsc2U7XG4gICAgbGV0IHBhcnNlZEFzID0gKDAsIF9wYXJzZXJlbGF0aXZldXJsLnBhcnNlUmVsYXRpdmVVcmwpKGFzUGF0aCk7XG4gICAgbGV0IGZzUGF0aG5hbWUgPSAoMCwgX3JlbW92ZXRyYWlsaW5nc2xhc2gucmVtb3ZlVHJhaWxpbmdTbGFzaCkoKDAsIF9ub3JtYWxpemVsb2NhbGVwYXRoLm5vcm1hbGl6ZUxvY2FsZVBhdGgpKCgwLCBfcmVtb3ZlYmFzZXBhdGgucmVtb3ZlQmFzZVBhdGgpKHBhcnNlZEFzLnBhdGhuYW1lKSwgbG9jYWxlcykucGF0aG5hbWUpO1xuICAgIGxldCByZXNvbHZlZEhyZWY7XG4gICAgY29uc3QgaGFuZGxlUmV3cml0ZSA9IChyZXdyaXRlKT0+e1xuICAgICAgICBjb25zdCBtYXRjaGVyID0gKDAsIF9wYXRobWF0Y2guZ2V0UGF0aE1hdGNoKShyZXdyaXRlLnNvdXJjZSArIChwcm9jZXNzLmVudi5fX05FWFRfVFJBSUxJTkdfU0xBU0ggPyBcIigvKT9cIiA6IFwiXCIpLCB7XG4gICAgICAgICAgICByZW1vdmVVbm5hbWVkUGFyYW1zOiB0cnVlLFxuICAgICAgICAgICAgc3RyaWN0OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcGFyYW1zID0gbWF0Y2hlcihwYXJzZWRBcy5wYXRobmFtZSk7XG4gICAgICAgIGlmICgocmV3cml0ZS5oYXMgfHwgcmV3cml0ZS5taXNzaW5nKSAmJiBwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1BhcmFtcyA9ICgwLCBfcHJlcGFyZWRlc3RpbmF0aW9uLm1hdGNoSGFzKSh7XG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICBob3N0OiBkb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2VyLWFnZW50XCI6IG5hdmlnYXRvci51c2VyQWdlbnRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvb2tpZXM6IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjsgXCIpLnJlZHVjZSgoYWNjLCBpdGVtKT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5LCAuLi52YWx1ZV0gPSBpdGVtLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgYWNjW2tleV0gPSB2YWx1ZS5qb2luKFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICB9LCB7fSlcbiAgICAgICAgICAgIH0sIHBhcnNlZEFzLnF1ZXJ5LCByZXdyaXRlLmhhcywgcmV3cml0ZS5taXNzaW5nKTtcbiAgICAgICAgICAgIGlmIChoYXNQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgaGFzUGFyYW1zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgaWYgKCFyZXdyaXRlLmRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhIHByb3hpZWQgcmV3cml0ZSB3aGljaCBpc24ndCBoYW5kbGVkIG9uIHRoZSBjbGllbnRcbiAgICAgICAgICAgICAgICBleHRlcm5hbERlc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVzdFJlcyA9ICgwLCBfcHJlcGFyZWRlc3RpbmF0aW9uLnByZXBhcmVEZXN0aW5hdGlvbikoe1xuICAgICAgICAgICAgICAgIGFwcGVuZFBhcmFtc1RvUXVlcnk6IHRydWUsXG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb246IHJld3JpdGUuZGVzdGluYXRpb24sXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhcnNlZEFzID0gZGVzdFJlcy5wYXJzZWREZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGFzUGF0aCA9IGRlc3RSZXMubmV3VXJsO1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihxdWVyeSwgZGVzdFJlcy5wYXJzZWREZXN0aW5hdGlvbi5xdWVyeSk7XG4gICAgICAgICAgICBmc1BhdGhuYW1lID0gKDAsIF9yZW1vdmV0cmFpbGluZ3NsYXNoLnJlbW92ZVRyYWlsaW5nU2xhc2gpKCgwLCBfbm9ybWFsaXplbG9jYWxlcGF0aC5ub3JtYWxpemVMb2NhbGVQYXRoKSgoMCwgX3JlbW92ZWJhc2VwYXRoLnJlbW92ZUJhc2VQYXRoKShhc1BhdGgpLCBsb2NhbGVzKS5wYXRobmFtZSk7XG4gICAgICAgICAgICBpZiAocGFnZXMuaW5jbHVkZXMoZnNQYXRobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBub3cgbWF0Y2ggYSBwYWdlIGFzIHRoaXMgbWVhbnMgd2UgYXJlIGRvbmVcbiAgICAgICAgICAgICAgICAvLyByZXNvbHZpbmcgdGhlIHJld3JpdGVzXG4gICAgICAgICAgICAgICAgbWF0Y2hlZFBhZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlc29sdmVkSHJlZiA9IGZzUGF0aG5hbWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBtYXRjaCBhIGR5bmFtaWMtcm91dGUsIGlmIHNvIHdlIGJyZWFrIHRoZSByZXdyaXRlcyBjaGFpblxuICAgICAgICAgICAgcmVzb2x2ZWRIcmVmID0gcmVzb2x2ZUhyZWYoZnNQYXRobmFtZSk7XG4gICAgICAgICAgICBpZiAocmVzb2x2ZWRIcmVmICE9PSBhc1BhdGggJiYgcGFnZXMuaW5jbHVkZXMocmVzb2x2ZWRIcmVmKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRQYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHJld3JpdGVzLmJlZm9yZUZpbGVzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgLy8gd2UgZG9uJ3QgZW5kIGFmdGVyIG1hdGNoIGluIGJlZm9yZUZpbGVzIHRvIGFsbG93XG4gICAgICAgIC8vIGNvbnRpbnVpbmcgdGhyb3VnaCBhbGwgYmVmb3JlRmlsZXMgcmV3cml0ZXNcbiAgICAgICAgaGFuZGxlUmV3cml0ZShyZXdyaXRlcy5iZWZvcmVGaWxlc1tpXSk7XG4gICAgfVxuICAgIG1hdGNoZWRQYWdlID0gcGFnZXMuaW5jbHVkZXMoZnNQYXRobmFtZSk7XG4gICAgaWYgKCFtYXRjaGVkUGFnZSkge1xuICAgICAgICBpZiAoIWZpbmlzaGVkKSB7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgcmV3cml0ZXMuYWZ0ZXJGaWxlcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZVJld3JpdGUocmV3cml0ZXMuYWZ0ZXJGaWxlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgZHluYW1pYyByb3V0ZSBiZWZvcmUgcHJvY2Vzc2luZyBmYWxsYmFjayByZXdyaXRlc1xuICAgICAgICBpZiAoIWZpbmlzaGVkKSB7XG4gICAgICAgICAgICByZXNvbHZlZEhyZWYgPSByZXNvbHZlSHJlZihmc1BhdGhuYW1lKTtcbiAgICAgICAgICAgIG1hdGNoZWRQYWdlID0gcGFnZXMuaW5jbHVkZXMocmVzb2x2ZWRIcmVmKTtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gbWF0Y2hlZFBhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHJld3JpdGVzLmZhbGxiYWNrLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlUmV3cml0ZShyZXdyaXRlcy5mYWxsYmFja1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYXNQYXRoLFxuICAgICAgICBwYXJzZWRBcyxcbiAgICAgICAgbWF0Y2hlZFBhZ2UsXG4gICAgICAgIHJlc29sdmVkSHJlZixcbiAgICAgICAgZXh0ZXJuYWxEZXN0XG4gICAgfTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb2x2ZS1yZXdyaXRlcy5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwicmVzb2x2ZVJld3JpdGVzIiwiX3BhdGhtYXRjaCIsInJlcXVpcmUiLCJfcHJlcGFyZWRlc3RpbmF0aW9uIiwiX3JlbW92ZXRyYWlsaW5nc2xhc2giLCJfbm9ybWFsaXplbG9jYWxlcGF0aCIsIl9yZW1vdmViYXNlcGF0aCIsIl9wYXJzZXJlbGF0aXZldXJsIiwiYXNQYXRoIiwicGFnZXMiLCJyZXdyaXRlcyIsInF1ZXJ5IiwicmVzb2x2ZUhyZWYiLCJsb2NhbGVzIiwibWF0Y2hlZFBhZ2UiLCJleHRlcm5hbERlc3QiLCJwYXJzZWRBcyIsInBhcnNlUmVsYXRpdmVVcmwiLCJmc1BhdGhuYW1lIiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsIm5vcm1hbGl6ZUxvY2FsZVBhdGgiLCJyZW1vdmVCYXNlUGF0aCIsInBhdGhuYW1lIiwicmVzb2x2ZWRIcmVmIiwiaGFuZGxlUmV3cml0ZSIsInJld3JpdGUiLCJtYXRjaGVyIiwiZ2V0UGF0aE1hdGNoIiwic291cmNlIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9UUkFJTElOR19TTEFTSCIsInJlbW92ZVVubmFtZWRQYXJhbXMiLCJzdHJpY3QiLCJwYXJhbXMiLCJoYXMiLCJtaXNzaW5nIiwiaGFzUGFyYW1zIiwibWF0Y2hIYXMiLCJoZWFkZXJzIiwiaG9zdCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJob3N0bmFtZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImNvb2tpZXMiLCJjb29raWUiLCJzcGxpdCIsInJlZHVjZSIsImFjYyIsIml0ZW0iLCJrZXkiLCJqb2luIiwiYXNzaWduIiwiZGVzdGluYXRpb24iLCJkZXN0UmVzIiwicHJlcGFyZURlc3RpbmF0aW9uIiwiYXBwZW5kUGFyYW1zVG9RdWVyeSIsInBhcnNlZERlc3RpbmF0aW9uIiwibmV3VXJsIiwiaW5jbHVkZXMiLCJmaW5pc2hlZCIsImkiLCJiZWZvcmVGaWxlcyIsImxlbmd0aCIsImFmdGVyRmlsZXMiLCJmYWxsYmFjayJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/route-matcher.js": +/*!*************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/route-matcher.js ***! + \*************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getRouteMatcher\", ({\n enumerable: true,\n get: function() {\n return getRouteMatcher;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"./node_modules/next/dist/shared/lib/utils.js\");\nfunction getRouteMatcher(param) {\n let { re, groups } = param;\n return (pathname)=>{\n const routeMatch = re.exec(pathname);\n if (!routeMatch) {\n return false;\n }\n const decode = (param)=>{\n try {\n return decodeURIComponent(param);\n } catch (_) {\n throw new _utils.DecodeError(\"failed to decode param\");\n }\n };\n const params = {};\n Object.keys(groups).forEach((slugName)=>{\n const g = groups[slugName];\n const m = routeMatch[g.pos];\n if (m !== undefined) {\n params[slugName] = ~m.indexOf(\"/\") ? m.split(\"/\").map((entry)=>decode(entry)) : g.repeat ? [\n decode(m)\n ] : decode(m);\n }\n });\n return params;\n };\n} //# sourceMappingURL=route-matcher.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JvdXRlLW1hdGNoZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILG1EQUFrRDtJQUM5Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DLFNBQVNDLG1CQUFPQSxDQUFDLGlFQUFhO0FBQ3BDLFNBQVNGLGdCQUFnQkcsS0FBSztJQUMxQixJQUFJLEVBQUVDLEVBQUUsRUFBRUMsTUFBTSxFQUFFLEdBQUdGO0lBQ3JCLE9BQU8sQ0FBQ0c7UUFDSixNQUFNQyxhQUFhSCxHQUFHSSxJQUFJLENBQUNGO1FBQzNCLElBQUksQ0FBQ0MsWUFBWTtZQUNiLE9BQU87UUFDWDtRQUNBLE1BQU1FLFNBQVMsQ0FBQ047WUFDWixJQUFJO2dCQUNBLE9BQU9PLG1CQUFtQlA7WUFDOUIsRUFBRSxPQUFPUSxHQUFHO2dCQUNSLE1BQU0sSUFBSVYsT0FBT1csV0FBVyxDQUFDO1lBQ2pDO1FBQ0o7UUFDQSxNQUFNQyxTQUFTLENBQUM7UUFDaEJuQixPQUFPb0IsSUFBSSxDQUFDVCxRQUFRVSxPQUFPLENBQUMsQ0FBQ0M7WUFDekIsTUFBTUMsSUFBSVosTUFBTSxDQUFDVyxTQUFTO1lBQzFCLE1BQU1FLElBQUlYLFVBQVUsQ0FBQ1UsRUFBRUUsR0FBRyxDQUFDO1lBQzNCLElBQUlELE1BQU1FLFdBQVc7Z0JBQ2pCUCxNQUFNLENBQUNHLFNBQVMsR0FBRyxDQUFDRSxFQUFFRyxPQUFPLENBQUMsT0FBT0gsRUFBRUksS0FBSyxDQUFDLEtBQUtDLEdBQUcsQ0FBQyxDQUFDQyxRQUFRZixPQUFPZSxVQUFVUCxFQUFFUSxNQUFNLEdBQUc7b0JBQ3ZGaEIsT0FBT1M7aUJBQ1YsR0FBR1QsT0FBT1M7WUFDZjtRQUNKO1FBQ0EsT0FBT0w7SUFDWDtBQUNKLEVBRUEseUNBQXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtbWF0Y2hlci5qcz9jODZjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0Um91dGVNYXRjaGVyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRSb3V0ZU1hdGNoZXI7XG4gICAgfVxufSk7XG5jb25zdCBfdXRpbHMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHNcIik7XG5mdW5jdGlvbiBnZXRSb3V0ZU1hdGNoZXIocGFyYW0pIHtcbiAgICBsZXQgeyByZSwgZ3JvdXBzIH0gPSBwYXJhbTtcbiAgICByZXR1cm4gKHBhdGhuYW1lKT0+e1xuICAgICAgICBjb25zdCByb3V0ZU1hdGNoID0gcmUuZXhlYyhwYXRobmFtZSk7XG4gICAgICAgIGlmICghcm91dGVNYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlY29kZSA9IChwYXJhbSk9PntcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChwYXJhbSk7XG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlscy5EZWNvZGVFcnJvcihcImZhaWxlZCB0byBkZWNvZGUgcGFyYW1cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyhncm91cHMpLmZvckVhY2goKHNsdWdOYW1lKT0+e1xuICAgICAgICAgICAgY29uc3QgZyA9IGdyb3Vwc1tzbHVnTmFtZV07XG4gICAgICAgICAgICBjb25zdCBtID0gcm91dGVNYXRjaFtnLnBvc107XG4gICAgICAgICAgICBpZiAobSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zW3NsdWdOYW1lXSA9IH5tLmluZGV4T2YoXCIvXCIpID8gbS5zcGxpdChcIi9cIikubWFwKChlbnRyeSk9PmRlY29kZShlbnRyeSkpIDogZy5yZXBlYXQgPyBbXG4gICAgICAgICAgICAgICAgICAgIGRlY29kZShtKVxuICAgICAgICAgICAgICAgIF0gOiBkZWNvZGUobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH07XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJvdXRlLW1hdGNoZXIuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsImdldFJvdXRlTWF0Y2hlciIsIl91dGlscyIsInJlcXVpcmUiLCJwYXJhbSIsInJlIiwiZ3JvdXBzIiwicGF0aG5hbWUiLCJyb3V0ZU1hdGNoIiwiZXhlYyIsImRlY29kZSIsImRlY29kZVVSSUNvbXBvbmVudCIsIl8iLCJEZWNvZGVFcnJvciIsInBhcmFtcyIsImtleXMiLCJmb3JFYWNoIiwic2x1Z05hbWUiLCJnIiwibSIsInBvcyIsInVuZGVmaW5lZCIsImluZGV4T2YiLCJzcGxpdCIsIm1hcCIsImVudHJ5IiwicmVwZWF0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/route-matcher.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/route-regex.js": +/*!***********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/route-regex.js ***! + \***********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n getRouteRegex: function() {\n return getRouteRegex;\n },\n getNamedRouteRegex: function() {\n return getNamedRouteRegex;\n },\n getNamedMiddlewareRegex: function() {\n return getNamedMiddlewareRegex;\n }\n});\nconst _interceptionroutes = __webpack_require__(/*! ../../../../server/future/helpers/interception-routes */ \"./node_modules/next/dist/server/future/helpers/interception-routes.js\");\nconst _escaperegexp = __webpack_require__(/*! ../../escape-regexp */ \"./node_modules/next/dist/shared/lib/escape-regexp.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"./node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst NEXT_QUERY_PARAM_PREFIX = \"nxtP\";\nconst NEXT_INTERCEPTION_MARKER_PREFIX = \"nxtI\";\n/**\n * Parses a given parameter from a route to a data structure that can be used\n * to generate the parametrized route. Examples:\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\n */ function parseParameter(param) {\n const optional = param.startsWith(\"[\") && param.endsWith(\"]\");\n if (optional) {\n param = param.slice(1, -1);\n }\n const repeat = param.startsWith(\"...\");\n if (repeat) {\n param = param.slice(3);\n }\n return {\n key: param,\n repeat,\n optional\n };\n}\nfunction getParametrizedRoute(route) {\n const segments = (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split(\"/\");\n const groups = {};\n let groupIndex = 1;\n return {\n parameterizedRoute: segments.map((segment)=>{\n const markerMatch = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n const paramMatches = segment.match(/\\[((?:\\[.*\\])|.+)\\]/) // Check for parameters\n ;\n if (markerMatch && paramMatches) {\n const { key, optional, repeat } = parseParameter(paramMatches[1]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(markerMatch) + \"([^/]+?)\";\n } else if (paramMatches) {\n const { key, repeat, optional } = parseParameter(paramMatches[1]);\n groups[key] = {\n pos: groupIndex++,\n repeat,\n optional\n };\n return repeat ? optional ? \"(?:/(.+?))?\" : \"/(.+?)\" : \"/([^/]+?)\";\n } else {\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(segment);\n }\n }).join(\"\"),\n groups\n };\n}\nfunction getRouteRegex(normalizedRoute) {\n const { parameterizedRoute, groups } = getParametrizedRoute(normalizedRoute);\n return {\n re: new RegExp(\"^\" + parameterizedRoute + \"(?:/)?$\"),\n groups: groups\n };\n}\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */ function buildGetSafeRouteKey() {\n let i = 0;\n return ()=>{\n let routeKey = \"\";\n let j = ++i;\n while(j > 0){\n routeKey += String.fromCharCode(97 + (j - 1) % 26);\n j = Math.floor((j - 1) / 26);\n }\n return routeKey;\n };\n}\nfunction getSafeKeyFromSegment(param) {\n let { interceptionMarker, getSafeRouteKey, segment, routeKeys, keyPrefix } = param;\n const { key, optional, repeat } = parseParameter(segment);\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, \"\");\n if (keyPrefix) {\n cleanedKey = \"\" + keyPrefix + cleanedKey;\n }\n let invalidKey = false;\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true;\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true;\n }\n if (invalidKey) {\n cleanedKey = getSafeRouteKey();\n }\n if (keyPrefix) {\n routeKeys[cleanedKey] = \"\" + keyPrefix + key;\n } else {\n routeKeys[cleanedKey] = key;\n }\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker ? (0, _escaperegexp.escapeStringRegexp)(interceptionMarker) : \"\";\n return repeat ? optional ? \"(?:/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">.+?))?\" : \"/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">.+?)\" : \"/\" + interceptionPrefix + \"(?<\" + cleanedKey + \">[^/]+?)\";\n}\nfunction getNamedParametrizedRoute(route, prefixRouteKeys) {\n const segments = (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split(\"/\");\n const getSafeRouteKey = buildGetSafeRouteKey();\n const routeKeys = {};\n return {\n namedParameterizedRoute: segments.map((segment)=>{\n const hasInterceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m));\n const paramMatches = segment.match(/\\[((?:\\[.*\\])|.+)\\]/) // Check for parameters\n ;\n if (hasInterceptionMarker && paramMatches) {\n const [usedMarker] = segment.split(paramMatches[0]);\n return getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker: usedMarker,\n segment: paramMatches[1],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_INTERCEPTION_MARKER_PREFIX : undefined\n });\n } else if (paramMatches) {\n return getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[1],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined\n });\n } else {\n return \"/\" + (0, _escaperegexp.escapeStringRegexp)(segment);\n }\n }).join(\"\"),\n routeKeys\n };\n}\nfunction getNamedRouteRegex(normalizedRoute, prefixRouteKey) {\n const result = getNamedParametrizedRoute(normalizedRoute, prefixRouteKey);\n return {\n ...getRouteRegex(normalizedRoute),\n namedRegex: \"^\" + result.namedParameterizedRoute + \"(?:/)?$\",\n routeKeys: result.routeKeys\n };\n}\nfunction getNamedMiddlewareRegex(normalizedRoute, options) {\n const { parameterizedRoute } = getParametrizedRoute(normalizedRoute);\n const { catchAll = true } = options;\n if (parameterizedRoute === \"/\") {\n let catchAllRegex = catchAll ? \".*\" : \"\";\n return {\n namedRegex: \"^/\" + catchAllRegex + \"$\"\n };\n }\n const { namedParameterizedRoute } = getNamedParametrizedRoute(normalizedRoute, false);\n let catchAllGroupedRegex = catchAll ? \"(?:(/.*)?)\" : \"\";\n return {\n namedRegex: \"^\" + namedParameterizedRoute + catchAllGroupedRegex + \"$\"\n };\n} //# sourceMappingURL=route-regex.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JvdXRlLXJlZ2V4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGLEtBQU1DLENBQUFBLENBSU47QUFDQSxTQUFTSSxRQUFRQyxNQUFNLEVBQUVDLEdBQUc7SUFDeEIsSUFBSSxJQUFJQyxRQUFRRCxJQUFJVixPQUFPQyxjQUFjLENBQUNRLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUU4sU0FBUztJQUNiRyxlQUFlO1FBQ1gsT0FBT0E7SUFDWDtJQUNBQyxvQkFBb0I7UUFDaEIsT0FBT0E7SUFDWDtJQUNBQyx5QkFBeUI7UUFDckIsT0FBT0E7SUFDWDtBQUNKO0FBQ0EsTUFBTU8sc0JBQXNCQyxtQkFBT0EsQ0FBQyxvSUFBdUQ7QUFDM0YsTUFBTUMsZ0JBQWdCRCxtQkFBT0EsQ0FBQyxpRkFBcUI7QUFDbkQsTUFBTUUsdUJBQXVCRixtQkFBT0EsQ0FBQywwR0FBeUI7QUFDOUQsTUFBTUcsMEJBQTBCO0FBQ2hDLE1BQU1DLGtDQUFrQztBQUN4Qzs7Ozs7OztDQU9DLEdBQUcsU0FBU0MsZUFBZUMsS0FBSztJQUM3QixNQUFNQyxXQUFXRCxNQUFNRSxVQUFVLENBQUMsUUFBUUYsTUFBTUcsUUFBUSxDQUFDO0lBQ3pELElBQUlGLFVBQVU7UUFDVkQsUUFBUUEsTUFBTUksS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUM1QjtJQUNBLE1BQU1DLFNBQVNMLE1BQU1FLFVBQVUsQ0FBQztJQUNoQyxJQUFJRyxRQUFRO1FBQ1JMLFFBQVFBLE1BQU1JLEtBQUssQ0FBQztJQUN4QjtJQUNBLE9BQU87UUFDSEUsS0FBS047UUFDTEs7UUFDQUo7SUFDSjtBQUNKO0FBQ0EsU0FBU00scUJBQXFCQyxLQUFLO0lBQy9CLE1BQU1DLFdBQVcsQ0FBQyxHQUFHYixxQkFBcUJjLG1CQUFtQixFQUFFRixPQUFPSixLQUFLLENBQUMsR0FBR08sS0FBSyxDQUFDO0lBQ3JGLE1BQU1DLFNBQVMsQ0FBQztJQUNoQixJQUFJQyxhQUFhO0lBQ2pCLE9BQU87UUFDSEMsb0JBQW9CTCxTQUFTTSxHQUFHLENBQUMsQ0FBQ0M7WUFDOUIsTUFBTUMsY0FBY3hCLG9CQUFvQnlCLDBCQUEwQixDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsSUFBSUosUUFBUWQsVUFBVSxDQUFDa0I7WUFDaEcsTUFBTUMsZUFBZUwsUUFBUU0sS0FBSyxDQUFDLHVCQUF1Qix1QkFBdUI7O1lBRWpGLElBQUlMLGVBQWVJLGNBQWM7Z0JBQzdCLE1BQU0sRUFBRWYsR0FBRyxFQUFFTCxRQUFRLEVBQUVJLE1BQU0sRUFBRSxHQUFHTixlQUFlc0IsWUFBWSxDQUFDLEVBQUU7Z0JBQ2hFVCxNQUFNLENBQUNOLElBQUksR0FBRztvQkFDVmlCLEtBQUtWO29CQUNMUjtvQkFDQUo7Z0JBQ0o7Z0JBQ0EsT0FBTyxNQUFNLENBQUMsR0FBR04sY0FBYzZCLGtCQUFrQixFQUFFUCxlQUFlO1lBQ3RFLE9BQU8sSUFBSUksY0FBYztnQkFDckIsTUFBTSxFQUFFZixHQUFHLEVBQUVELE1BQU0sRUFBRUosUUFBUSxFQUFFLEdBQUdGLGVBQWVzQixZQUFZLENBQUMsRUFBRTtnQkFDaEVULE1BQU0sQ0FBQ04sSUFBSSxHQUFHO29CQUNWaUIsS0FBS1Y7b0JBQ0xSO29CQUNBSjtnQkFDSjtnQkFDQSxPQUFPSSxTQUFTSixXQUFXLGdCQUFnQixXQUFXO1lBQzFELE9BQU87Z0JBQ0gsT0FBTyxNQUFNLENBQUMsR0FBR04sY0FBYzZCLGtCQUFrQixFQUFFUjtZQUN2RDtRQUNKLEdBQUdTLElBQUksQ0FBQztRQUNSYjtJQUNKO0FBQ0o7QUFDQSxTQUFTNUIsY0FBYzBDLGVBQWU7SUFDbEMsTUFBTSxFQUFFWixrQkFBa0IsRUFBRUYsTUFBTSxFQUFFLEdBQUdMLHFCQUFxQm1CO0lBQzVELE9BQU87UUFDSEMsSUFBSSxJQUFJQyxPQUFPLE1BQU1kLHFCQUFxQjtRQUMxQ0YsUUFBUUE7SUFDWjtBQUNKO0FBQ0E7OztDQUdDLEdBQUcsU0FBU2lCO0lBQ1QsSUFBSUMsSUFBSTtJQUNSLE9BQU87UUFDSCxJQUFJQyxXQUFXO1FBQ2YsSUFBSUMsSUFBSSxFQUFFRjtRQUNWLE1BQU1FLElBQUksRUFBRTtZQUNSRCxZQUFZRSxPQUFPQyxZQUFZLENBQUMsS0FBSyxDQUFDRixJQUFJLEtBQUs7WUFDL0NBLElBQUlHLEtBQUtDLEtBQUssQ0FBQyxDQUFDSixJQUFJLEtBQUs7UUFDN0I7UUFDQSxPQUFPRDtJQUNYO0FBQ0o7QUFDQSxTQUFTTSxzQkFBc0JyQyxLQUFLO0lBQ2hDLElBQUksRUFBRXNDLGtCQUFrQixFQUFFQyxlQUFlLEVBQUV2QixPQUFPLEVBQUV3QixTQUFTLEVBQUVDLFNBQVMsRUFBRSxHQUFHekM7SUFDN0UsTUFBTSxFQUFFTSxHQUFHLEVBQUVMLFFBQVEsRUFBRUksTUFBTSxFQUFFLEdBQUdOLGVBQWVpQjtJQUNqRCx1REFBdUQ7SUFDdkQsa0JBQWtCO0lBQ2xCLElBQUkwQixhQUFhcEMsSUFBSXFDLE9BQU8sQ0FBQyxPQUFPO0lBQ3BDLElBQUlGLFdBQVc7UUFDWEMsYUFBYSxLQUFLRCxZQUFZQztJQUNsQztJQUNBLElBQUlFLGFBQWE7SUFDakIsa0VBQWtFO0lBQ2xFLFdBQVc7SUFDWCxJQUFJRixXQUFXRyxNQUFNLEtBQUssS0FBS0gsV0FBV0csTUFBTSxHQUFHLElBQUk7UUFDbkRELGFBQWE7SUFDakI7SUFDQSxJQUFJLENBQUNFLE1BQU1DLFNBQVNMLFdBQVd0QyxLQUFLLENBQUMsR0FBRyxNQUFNO1FBQzFDd0MsYUFBYTtJQUNqQjtJQUNBLElBQUlBLFlBQVk7UUFDWkYsYUFBYUg7SUFDakI7SUFDQSxJQUFJRSxXQUFXO1FBQ1hELFNBQVMsQ0FBQ0UsV0FBVyxHQUFHLEtBQUtELFlBQVluQztJQUM3QyxPQUFPO1FBQ0hrQyxTQUFTLENBQUNFLFdBQVcsR0FBR3BDO0lBQzVCO0lBQ0Esd0ZBQXdGO0lBQ3hGLDBGQUEwRjtJQUMxRixxRkFBcUY7SUFDckYsTUFBTTBDLHFCQUFxQlYscUJBQXFCLENBQUMsR0FBRzNDLGNBQWM2QixrQkFBa0IsRUFBRWMsc0JBQXNCO0lBQzVHLE9BQU9qQyxTQUFTSixXQUFXLFNBQVMrQyxxQkFBcUIsUUFBUU4sYUFBYSxZQUFZLE1BQU1NLHFCQUFxQixRQUFRTixhQUFhLFVBQVUsTUFBTU0scUJBQXFCLFFBQVFOLGFBQWE7QUFDeE07QUFDQSxTQUFTTywwQkFBMEJ6QyxLQUFLLEVBQUUwQyxlQUFlO0lBQ3JELE1BQU16QyxXQUFXLENBQUMsR0FBR2IscUJBQXFCYyxtQkFBbUIsRUFBRUYsT0FBT0osS0FBSyxDQUFDLEdBQUdPLEtBQUssQ0FBQztJQUNyRixNQUFNNEIsa0JBQWtCVjtJQUN4QixNQUFNVyxZQUFZLENBQUM7SUFDbkIsT0FBTztRQUNIVyx5QkFBeUIxQyxTQUFTTSxHQUFHLENBQUMsQ0FBQ0M7WUFDbkMsTUFBTW9DLHdCQUF3QjNELG9CQUFvQnlCLDBCQUEwQixDQUFDbUMsSUFBSSxDQUFDLENBQUNqQyxJQUFJSixRQUFRZCxVQUFVLENBQUNrQjtZQUMxRyxNQUFNQyxlQUFlTCxRQUFRTSxLQUFLLENBQUMsdUJBQXVCLHVCQUF1Qjs7WUFFakYsSUFBSThCLHlCQUF5Qi9CLGNBQWM7Z0JBQ3ZDLE1BQU0sQ0FBQ2lDLFdBQVcsR0FBR3RDLFFBQVFMLEtBQUssQ0FBQ1UsWUFBWSxDQUFDLEVBQUU7Z0JBQ2xELE9BQU9nQixzQkFBc0I7b0JBQ3pCRTtvQkFDQUQsb0JBQW9CZ0I7b0JBQ3BCdEMsU0FBU0ssWUFBWSxDQUFDLEVBQUU7b0JBQ3hCbUI7b0JBQ0FDLFdBQVdTLGtCQUFrQnBELGtDQUFrQ3lEO2dCQUNuRTtZQUNKLE9BQU8sSUFBSWxDLGNBQWM7Z0JBQ3JCLE9BQU9nQixzQkFBc0I7b0JBQ3pCRTtvQkFDQXZCLFNBQVNLLFlBQVksQ0FBQyxFQUFFO29CQUN4Qm1CO29CQUNBQyxXQUFXUyxrQkFBa0JyRCwwQkFBMEIwRDtnQkFDM0Q7WUFDSixPQUFPO2dCQUNILE9BQU8sTUFBTSxDQUFDLEdBQUc1RCxjQUFjNkIsa0JBQWtCLEVBQUVSO1lBQ3ZEO1FBQ0osR0FBR1MsSUFBSSxDQUFDO1FBQ1JlO0lBQ0o7QUFDSjtBQUNBLFNBQVN2RCxtQkFBbUJ5QyxlQUFlLEVBQUU4QixjQUFjO0lBQ3ZELE1BQU1DLFNBQVNSLDBCQUEwQnZCLGlCQUFpQjhCO0lBQzFELE9BQU87UUFDSCxHQUFHeEUsY0FBYzBDLGdCQUFnQjtRQUNqQ2dDLFlBQVksTUFBTUQsT0FBT04sdUJBQXVCLEdBQUc7UUFDbkRYLFdBQVdpQixPQUFPakIsU0FBUztJQUMvQjtBQUNKO0FBQ0EsU0FBU3RELHdCQUF3QndDLGVBQWUsRUFBRWlDLE9BQU87SUFDckQsTUFBTSxFQUFFN0Msa0JBQWtCLEVBQUUsR0FBR1AscUJBQXFCbUI7SUFDcEQsTUFBTSxFQUFFa0MsV0FBVyxJQUFJLEVBQUUsR0FBR0Q7SUFDNUIsSUFBSTdDLHVCQUF1QixLQUFLO1FBQzVCLElBQUkrQyxnQkFBZ0JELFdBQVcsT0FBTztRQUN0QyxPQUFPO1lBQ0hGLFlBQVksT0FBT0csZ0JBQWdCO1FBQ3ZDO0lBQ0o7SUFDQSxNQUFNLEVBQUVWLHVCQUF1QixFQUFFLEdBQUdGLDBCQUEwQnZCLGlCQUFpQjtJQUMvRSxJQUFJb0MsdUJBQXVCRixXQUFXLGVBQWU7SUFDckQsT0FBTztRQUNIRixZQUFZLE1BQU1QLDBCQUEwQlcsdUJBQXVCO0lBQ3ZFO0FBQ0osRUFFQSx1Q0FBdUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yb3V0ZS1yZWdleC5qcz9lYWMyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZ2V0Um91dGVSZWdleDogbnVsbCxcbiAgICBnZXROYW1lZFJvdXRlUmVnZXg6IG51bGwsXG4gICAgZ2V0TmFtZWRNaWRkbGV3YXJlUmVnZXg6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZ2V0Um91dGVSZWdleDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRSb3V0ZVJlZ2V4O1xuICAgIH0sXG4gICAgZ2V0TmFtZWRSb3V0ZVJlZ2V4OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldE5hbWVkUm91dGVSZWdleDtcbiAgICB9LFxuICAgIGdldE5hbWVkTWlkZGxld2FyZVJlZ2V4OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldE5hbWVkTWlkZGxld2FyZVJlZ2V4O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyY2VwdGlvbnJvdXRlcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9zZXJ2ZXIvZnV0dXJlL2hlbHBlcnMvaW50ZXJjZXB0aW9uLXJvdXRlc1wiKTtcbmNvbnN0IF9lc2NhcGVyZWdleHAgPSByZXF1aXJlKFwiLi4vLi4vZXNjYXBlLXJlZ2V4cFwiKTtcbmNvbnN0IF9yZW1vdmV0cmFpbGluZ3NsYXNoID0gcmVxdWlyZShcIi4vcmVtb3ZlLXRyYWlsaW5nLXNsYXNoXCIpO1xuY29uc3QgTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVggPSBcIm54dFBcIjtcbmNvbnN0IE5FWFRfSU5URVJDRVBUSU9OX01BUktFUl9QUkVGSVggPSBcIm54dElcIjtcbi8qKlxuICogUGFyc2VzIGEgZ2l2ZW4gcGFyYW1ldGVyIGZyb20gYSByb3V0ZSB0byBhIGRhdGEgc3RydWN0dXJlIHRoYXQgY2FuIGJlIHVzZWRcbiAqIHRvIGdlbmVyYXRlIHRoZSBwYXJhbWV0cml6ZWQgcm91dGUuIEV4YW1wbGVzOlxuICogICAtIGBbLi4uc2x1Z11gIC0+IGB7IGtleTogJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH1gXG4gKiAgIC0gYC4uLnNsdWdgIC0+IGB7IGtleTogJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSB9YFxuICogICAtIGBbZm9vXWAgLT4gYHsga2V5OiAnZm9vJywgcmVwZWF0OiBmYWxzZSwgb3B0aW9uYWw6IHRydWUgfWBcbiAqICAgLSBgYmFyYCAtPiBgeyBrZXk6ICdiYXInLCByZXBlYXQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UgfWBcbiAqLyBmdW5jdGlvbiBwYXJzZVBhcmFtZXRlcihwYXJhbSkge1xuICAgIGNvbnN0IG9wdGlvbmFsID0gcGFyYW0uc3RhcnRzV2l0aChcIltcIikgJiYgcGFyYW0uZW5kc1dpdGgoXCJdXCIpO1xuICAgIGlmIChvcHRpb25hbCkge1xuICAgICAgICBwYXJhbSA9IHBhcmFtLnNsaWNlKDEsIC0xKTtcbiAgICB9XG4gICAgY29uc3QgcmVwZWF0ID0gcGFyYW0uc3RhcnRzV2l0aChcIi4uLlwiKTtcbiAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgIHBhcmFtID0gcGFyYW0uc2xpY2UoMyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGtleTogcGFyYW0sXG4gICAgICAgIHJlcGVhdCxcbiAgICAgICAgb3B0aW9uYWxcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0UGFyYW1ldHJpemVkUm91dGUocm91dGUpIHtcbiAgICBjb25zdCBzZWdtZW50cyA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShyb3V0ZSkuc2xpY2UoMSkuc3BsaXQoXCIvXCIpO1xuICAgIGNvbnN0IGdyb3VwcyA9IHt9O1xuICAgIGxldCBncm91cEluZGV4ID0gMTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbWV0ZXJpemVkUm91dGU6IHNlZ21lbnRzLm1hcCgoc2VnbWVudCk9PntcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlck1hdGNoID0gX2ludGVyY2VwdGlvbnJvdXRlcy5JTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5maW5kKChtKT0+c2VnbWVudC5zdGFydHNXaXRoKG0pKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtTWF0Y2hlcyA9IHNlZ21lbnQubWF0Y2goL1xcWygoPzpcXFsuKlxcXSl8LispXFxdLykgLy8gQ2hlY2sgZm9yIHBhcmFtZXRlcnNcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIGlmIChtYXJrZXJNYXRjaCAmJiBwYXJhbU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGtleSwgb3B0aW9uYWwsIHJlcGVhdCB9ID0gcGFyc2VQYXJhbWV0ZXIocGFyYW1NYXRjaGVzWzFdKTtcbiAgICAgICAgICAgICAgICBncm91cHNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zOiBncm91cEluZGV4KyssXG4gICAgICAgICAgICAgICAgICAgIHJlcGVhdCxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBcIi9cIiArICgwLCBfZXNjYXBlcmVnZXhwLmVzY2FwZVN0cmluZ1JlZ2V4cCkobWFya2VyTWF0Y2gpICsgXCIoW14vXSs/KVwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGtleSwgcmVwZWF0LCBvcHRpb25hbCB9ID0gcGFyc2VQYXJhbWV0ZXIocGFyYW1NYXRjaGVzWzFdKTtcbiAgICAgICAgICAgICAgICBncm91cHNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcG9zOiBncm91cEluZGV4KyssXG4gICAgICAgICAgICAgICAgICAgIHJlcGVhdCxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiByZXBlYXQgPyBvcHRpb25hbCA/IFwiKD86LyguKz8pKT9cIiA6IFwiLyguKz8pXCIgOiBcIi8oW14vXSs/KVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCIvXCIgKyAoMCwgX2VzY2FwZXJlZ2V4cC5lc2NhcGVTdHJpbmdSZWdleHApKHNlZ21lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5qb2luKFwiXCIpLFxuICAgICAgICBncm91cHNcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0Um91dGVSZWdleChub3JtYWxpemVkUm91dGUpIHtcbiAgICBjb25zdCB7IHBhcmFtZXRlcml6ZWRSb3V0ZSwgZ3JvdXBzIH0gPSBnZXRQYXJhbWV0cml6ZWRSb3V0ZShub3JtYWxpemVkUm91dGUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlOiBuZXcgUmVnRXhwKFwiXlwiICsgcGFyYW1ldGVyaXplZFJvdXRlICsgXCIoPzovKT8kXCIpLFxuICAgICAgICBncm91cHM6IGdyb3Vwc1xuICAgIH07XG59XG4vKipcbiAqIEJ1aWxkcyBhIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgbWluaW1hbCByb3V0ZUtleSB1c2luZyBvbmx5IGEteiBhbmQgbWluaW1hbFxuICogbnVtYmVyIG9mIGNoYXJhY3RlcnMuXG4gKi8gZnVuY3Rpb24gYnVpbGRHZXRTYWZlUm91dGVLZXkoKSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBsZXQgcm91dGVLZXkgPSBcIlwiO1xuICAgICAgICBsZXQgaiA9ICsraTtcbiAgICAgICAgd2hpbGUoaiA+IDApe1xuICAgICAgICAgICAgcm91dGVLZXkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg5NyArIChqIC0gMSkgJSAyNik7XG4gICAgICAgICAgICBqID0gTWF0aC5mbG9vcigoaiAtIDEpIC8gMjYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3V0ZUtleTtcbiAgICB9O1xufVxuZnVuY3Rpb24gZ2V0U2FmZUtleUZyb21TZWdtZW50KHBhcmFtKSB7XG4gICAgbGV0IHsgaW50ZXJjZXB0aW9uTWFya2VyLCBnZXRTYWZlUm91dGVLZXksIHNlZ21lbnQsIHJvdXRlS2V5cywga2V5UHJlZml4IH0gPSBwYXJhbTtcbiAgICBjb25zdCB7IGtleSwgb3B0aW9uYWwsIHJlcGVhdCB9ID0gcGFyc2VQYXJhbWV0ZXIoc2VnbWVudCk7XG4gICAgLy8gcmVwbGFjZSBhbnkgbm9uLXdvcmQgY2hhcmFjdGVycyBzaW5jZSB0aGV5IGNhbiBicmVha1xuICAgIC8vIHRoZSBuYW1lZCByZWdleFxuICAgIGxldCBjbGVhbmVkS2V5ID0ga2V5LnJlcGxhY2UoL1xcVy9nLCBcIlwiKTtcbiAgICBpZiAoa2V5UHJlZml4KSB7XG4gICAgICAgIGNsZWFuZWRLZXkgPSBcIlwiICsga2V5UHJlZml4ICsgY2xlYW5lZEtleTtcbiAgICB9XG4gICAgbGV0IGludmFsaWRLZXkgPSBmYWxzZTtcbiAgICAvLyBjaGVjayBpZiB0aGUga2V5IGlzIHN0aWxsIGludmFsaWQgYW5kIGZhbGxiYWNrIHRvIHVzaW5nIGEga25vd25cbiAgICAvLyBzYWZlIGtleVxuICAgIGlmIChjbGVhbmVkS2V5Lmxlbmd0aCA9PT0gMCB8fCBjbGVhbmVkS2V5Lmxlbmd0aCA+IDMwKSB7XG4gICAgICAgIGludmFsaWRLZXkgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWlzTmFOKHBhcnNlSW50KGNsZWFuZWRLZXkuc2xpY2UoMCwgMSkpKSkge1xuICAgICAgICBpbnZhbGlkS2V5ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGludmFsaWRLZXkpIHtcbiAgICAgICAgY2xlYW5lZEtleSA9IGdldFNhZmVSb3V0ZUtleSgpO1xuICAgIH1cbiAgICBpZiAoa2V5UHJlZml4KSB7XG4gICAgICAgIHJvdXRlS2V5c1tjbGVhbmVkS2V5XSA9IFwiXCIgKyBrZXlQcmVmaXggKyBrZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm91dGVLZXlzW2NsZWFuZWRLZXldID0ga2V5O1xuICAgIH1cbiAgICAvLyBpZiB0aGUgc2VnbWVudCBoYXMgYW4gaW50ZXJjZXB0aW9uIG1hcmtlciwgbWFrZSBzdXJlIHRoYXQncyBwYXJ0IG9mIHRoZSByZWdleCBwYXR0ZXJuXG4gICAgLy8gdGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgcm91dGUgd2l0aCB0aGUgaW50ZXJjZXB0aW9uIG1hcmtlciBkb2Vzbid0IGluY29ycmVjdGx5IG1hdGNoXG4gICAgLy8gdGhlIG5vbi1pbnRlcmNlcHRlZCByb3V0ZSAoaWUgL2FwcC8oLilbdXNlcm5hbWVdIHNob3VsZCBub3QgbWF0Y2ggL2FwcC9bdXNlcm5hbWVdKVxuICAgIGNvbnN0IGludGVyY2VwdGlvblByZWZpeCA9IGludGVyY2VwdGlvbk1hcmtlciA/ICgwLCBfZXNjYXBlcmVnZXhwLmVzY2FwZVN0cmluZ1JlZ2V4cCkoaW50ZXJjZXB0aW9uTWFya2VyKSA6IFwiXCI7XG4gICAgcmV0dXJuIHJlcGVhdCA/IG9wdGlvbmFsID8gXCIoPzovXCIgKyBpbnRlcmNlcHRpb25QcmVmaXggKyBcIig/PFwiICsgY2xlYW5lZEtleSArIFwiPi4rPykpP1wiIDogXCIvXCIgKyBpbnRlcmNlcHRpb25QcmVmaXggKyBcIig/PFwiICsgY2xlYW5lZEtleSArIFwiPi4rPylcIiA6IFwiL1wiICsgaW50ZXJjZXB0aW9uUHJlZml4ICsgXCIoPzxcIiArIGNsZWFuZWRLZXkgKyBcIj5bXi9dKz8pXCI7XG59XG5mdW5jdGlvbiBnZXROYW1lZFBhcmFtZXRyaXplZFJvdXRlKHJvdXRlLCBwcmVmaXhSb3V0ZUtleXMpIHtcbiAgICBjb25zdCBzZWdtZW50cyA9ICgwLCBfcmVtb3ZldHJhaWxpbmdzbGFzaC5yZW1vdmVUcmFpbGluZ1NsYXNoKShyb3V0ZSkuc2xpY2UoMSkuc3BsaXQoXCIvXCIpO1xuICAgIGNvbnN0IGdldFNhZmVSb3V0ZUtleSA9IGJ1aWxkR2V0U2FmZVJvdXRlS2V5KCk7XG4gICAgY29uc3Qgcm91dGVLZXlzID0ge307XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZWRQYXJhbWV0ZXJpemVkUm91dGU6IHNlZ21lbnRzLm1hcCgoc2VnbWVudCk9PntcbiAgICAgICAgICAgIGNvbnN0IGhhc0ludGVyY2VwdGlvbk1hcmtlciA9IF9pbnRlcmNlcHRpb25yb3V0ZXMuSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuc29tZSgobSk9PnNlZ21lbnQuc3RhcnRzV2l0aChtKSk7XG4gICAgICAgICAgICBjb25zdCBwYXJhbU1hdGNoZXMgPSBzZWdtZW50Lm1hdGNoKC9cXFsoKD86XFxbLipcXF0pfC4rKVxcXS8pIC8vIENoZWNrIGZvciBwYXJhbWV0ZXJzXG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBpZiAoaGFzSW50ZXJjZXB0aW9uTWFya2VyICYmIHBhcmFtTWF0Y2hlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFt1c2VkTWFya2VyXSA9IHNlZ21lbnQuc3BsaXQocGFyYW1NYXRjaGVzWzBdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U2FmZUtleUZyb21TZWdtZW50KHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0U2FmZVJvdXRlS2V5LFxuICAgICAgICAgICAgICAgICAgICBpbnRlcmNlcHRpb25NYXJrZXI6IHVzZWRNYXJrZXIsXG4gICAgICAgICAgICAgICAgICAgIHNlZ21lbnQ6IHBhcmFtTWF0Y2hlc1sxXSxcbiAgICAgICAgICAgICAgICAgICAgcm91dGVLZXlzLFxuICAgICAgICAgICAgICAgICAgICBrZXlQcmVmaXg6IHByZWZpeFJvdXRlS2V5cyA/IE5FWFRfSU5URVJDRVBUSU9OX01BUktFUl9QUkVGSVggOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1NYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFNhZmVLZXlGcm9tU2VnbWVudCh7XG4gICAgICAgICAgICAgICAgICAgIGdldFNhZmVSb3V0ZUtleSxcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudDogcGFyYW1NYXRjaGVzWzFdLFxuICAgICAgICAgICAgICAgICAgICByb3V0ZUtleXMsXG4gICAgICAgICAgICAgICAgICAgIGtleVByZWZpeDogcHJlZml4Um91dGVLZXlzID8gTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVggOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiL1wiICsgKDAsIF9lc2NhcGVyZWdleHAuZXNjYXBlU3RyaW5nUmVnZXhwKShzZWdtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuam9pbihcIlwiKSxcbiAgICAgICAgcm91dGVLZXlzXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGdldE5hbWVkUm91dGVSZWdleChub3JtYWxpemVkUm91dGUsIHByZWZpeFJvdXRlS2V5KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZ2V0TmFtZWRQYXJhbWV0cml6ZWRSb3V0ZShub3JtYWxpemVkUm91dGUsIHByZWZpeFJvdXRlS2V5KTtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5nZXRSb3V0ZVJlZ2V4KG5vcm1hbGl6ZWRSb3V0ZSksXG4gICAgICAgIG5hbWVkUmVnZXg6IFwiXlwiICsgcmVzdWx0Lm5hbWVkUGFyYW1ldGVyaXplZFJvdXRlICsgXCIoPzovKT8kXCIsXG4gICAgICAgIHJvdXRlS2V5czogcmVzdWx0LnJvdXRlS2V5c1xuICAgIH07XG59XG5mdW5jdGlvbiBnZXROYW1lZE1pZGRsZXdhcmVSZWdleChub3JtYWxpemVkUm91dGUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHBhcmFtZXRlcml6ZWRSb3V0ZSB9ID0gZ2V0UGFyYW1ldHJpemVkUm91dGUobm9ybWFsaXplZFJvdXRlKTtcbiAgICBjb25zdCB7IGNhdGNoQWxsID0gdHJ1ZSB9ID0gb3B0aW9ucztcbiAgICBpZiAocGFyYW1ldGVyaXplZFJvdXRlID09PSBcIi9cIikge1xuICAgICAgICBsZXQgY2F0Y2hBbGxSZWdleCA9IGNhdGNoQWxsID8gXCIuKlwiIDogXCJcIjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWVkUmVnZXg6IFwiXi9cIiArIGNhdGNoQWxsUmVnZXggKyBcIiRcIlxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB7IG5hbWVkUGFyYW1ldGVyaXplZFJvdXRlIH0gPSBnZXROYW1lZFBhcmFtZXRyaXplZFJvdXRlKG5vcm1hbGl6ZWRSb3V0ZSwgZmFsc2UpO1xuICAgIGxldCBjYXRjaEFsbEdyb3VwZWRSZWdleCA9IGNhdGNoQWxsID8gXCIoPzooLy4qKT8pXCIgOiBcIlwiO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWVkUmVnZXg6IFwiXlwiICsgbmFtZWRQYXJhbWV0ZXJpemVkUm91dGUgKyBjYXRjaEFsbEdyb3VwZWRSZWdleCArIFwiJFwiXG4gICAgfTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cm91dGUtcmVnZXguanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiZ2V0Um91dGVSZWdleCIsImdldE5hbWVkUm91dGVSZWdleCIsImdldE5hbWVkTWlkZGxld2FyZVJlZ2V4IiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2ludGVyY2VwdGlvbnJvdXRlcyIsInJlcXVpcmUiLCJfZXNjYXBlcmVnZXhwIiwiX3JlbW92ZXRyYWlsaW5nc2xhc2giLCJORVhUX1FVRVJZX1BBUkFNX1BSRUZJWCIsIk5FWFRfSU5URVJDRVBUSU9OX01BUktFUl9QUkVGSVgiLCJwYXJzZVBhcmFtZXRlciIsInBhcmFtIiwib3B0aW9uYWwiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJzbGljZSIsInJlcGVhdCIsImtleSIsImdldFBhcmFtZXRyaXplZFJvdXRlIiwicm91dGUiLCJzZWdtZW50cyIsInJlbW92ZVRyYWlsaW5nU2xhc2giLCJzcGxpdCIsImdyb3VwcyIsImdyb3VwSW5kZXgiLCJwYXJhbWV0ZXJpemVkUm91dGUiLCJtYXAiLCJzZWdtZW50IiwibWFya2VyTWF0Y2giLCJJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyIsImZpbmQiLCJtIiwicGFyYW1NYXRjaGVzIiwibWF0Y2giLCJwb3MiLCJlc2NhcGVTdHJpbmdSZWdleHAiLCJqb2luIiwibm9ybWFsaXplZFJvdXRlIiwicmUiLCJSZWdFeHAiLCJidWlsZEdldFNhZmVSb3V0ZUtleSIsImkiLCJyb3V0ZUtleSIsImoiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJNYXRoIiwiZmxvb3IiLCJnZXRTYWZlS2V5RnJvbVNlZ21lbnQiLCJpbnRlcmNlcHRpb25NYXJrZXIiLCJnZXRTYWZlUm91dGVLZXkiLCJyb3V0ZUtleXMiLCJrZXlQcmVmaXgiLCJjbGVhbmVkS2V5IiwicmVwbGFjZSIsImludmFsaWRLZXkiLCJsZW5ndGgiLCJpc05hTiIsInBhcnNlSW50IiwiaW50ZXJjZXB0aW9uUHJlZml4IiwiZ2V0TmFtZWRQYXJhbWV0cml6ZWRSb3V0ZSIsInByZWZpeFJvdXRlS2V5cyIsIm5hbWVkUGFyYW1ldGVyaXplZFJvdXRlIiwiaGFzSW50ZXJjZXB0aW9uTWFya2VyIiwic29tZSIsInVzZWRNYXJrZXIiLCJ1bmRlZmluZWQiLCJwcmVmaXhSb3V0ZUtleSIsInJlc3VsdCIsIm5hbWVkUmVnZXgiLCJvcHRpb25zIiwiY2F0Y2hBbGwiLCJjYXRjaEFsbFJlZ2V4IiwiY2F0Y2hBbGxHcm91cGVkUmVnZXgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/route-regex.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js": +/*!*************************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js ***! + \*************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getSortedRoutes\", ({\n enumerable: true,\n get: function() {\n return getSortedRoutes;\n }\n}));\nclass UrlNode {\n insert(urlPath) {\n this._insert(urlPath.split(\"/\").filter(Boolean), [], false);\n }\n smoosh() {\n return this._smoosh();\n }\n _smoosh(prefix) {\n if (prefix === void 0) prefix = \"/\";\n const childrenPaths = [\n ...this.children.keys()\n ].sort();\n if (this.slugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[]\"), 1);\n }\n if (this.restSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[...]\"), 1);\n }\n if (this.optionalRestSlugName !== null) {\n childrenPaths.splice(childrenPaths.indexOf(\"[[...]]\"), 1);\n }\n const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(\"\" + prefix + c + \"/\")).reduce((prev, curr)=>[\n ...prev,\n ...curr\n ], []);\n if (this.slugName !== null) {\n routes.push(...this.children.get(\"[]\")._smoosh(prefix + \"[\" + this.slugName + \"]/\"));\n }\n if (!this.placeholder) {\n const r = prefix === \"/\" ? \"/\" : prefix.slice(0, -1);\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot define a route with the same specificity as a optional catch-all route (\"' + r + '\" and \"' + r + \"[[...\" + this.optionalRestSlugName + ']]\").');\n }\n routes.unshift(r);\n }\n if (this.restSlugName !== null) {\n routes.push(...this.children.get(\"[...]\")._smoosh(prefix + \"[...\" + this.restSlugName + \"]/\"));\n }\n if (this.optionalRestSlugName !== null) {\n routes.push(...this.children.get(\"[[...]]\")._smoosh(prefix + \"[[...\" + this.optionalRestSlugName + \"]]/\"));\n }\n return routes;\n }\n _insert(urlPaths, slugNames, isCatchAll) {\n if (urlPaths.length === 0) {\n this.placeholder = false;\n return;\n }\n if (isCatchAll) {\n throw new Error(\"Catch-all must be the last part of the URL.\");\n }\n // The next segment in the urlPaths list\n let nextSegment = urlPaths[0];\n // Check if the segment matches `[something]`\n if (nextSegment.startsWith(\"[\") && nextSegment.endsWith(\"]\")) {\n // Strip `[` and `]`, leaving only `something`\n let segmentName = nextSegment.slice(1, -1);\n let isOptional = false;\n if (segmentName.startsWith(\"[\") && segmentName.endsWith(\"]\")) {\n // Strip optional `[` and `]`, leaving only `something`\n segmentName = segmentName.slice(1, -1);\n isOptional = true;\n }\n if (segmentName.startsWith(\"...\")) {\n // Strip `...`, leaving only `something`\n segmentName = segmentName.substring(3);\n isCatchAll = true;\n }\n if (segmentName.startsWith(\"[\") || segmentName.endsWith(\"]\")) {\n throw new Error(\"Segment names may not start or end with extra brackets ('\" + segmentName + \"').\");\n }\n if (segmentName.startsWith(\".\")) {\n throw new Error(\"Segment names may not start with erroneous periods ('\" + segmentName + \"').\");\n }\n function handleSlug(previousSlug, nextSlug) {\n if (previousSlug !== null) {\n // If the specific segment already has a slug but the slug is not `something`\n // This prevents collisions like:\n // pages/[post]/index.js\n // pages/[id]/index.js\n // Because currently multiple dynamic params on the same segment level are not supported\n if (previousSlug !== nextSlug) {\n // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n throw new Error(\"You cannot use different slug names for the same dynamic path ('\" + previousSlug + \"' !== '\" + nextSlug + \"').\");\n }\n }\n slugNames.forEach((slug)=>{\n if (slug === nextSlug) {\n throw new Error('You cannot have the same slug name \"' + nextSlug + '\" repeat within a single dynamic path');\n }\n if (slug.replace(/\\W/g, \"\") === nextSegment.replace(/\\W/g, \"\")) {\n throw new Error('You cannot have the slug names \"' + slug + '\" and \"' + nextSlug + '\" differ only by non-word symbols within a single dynamic path');\n }\n });\n slugNames.push(nextSlug);\n }\n if (isCatchAll) {\n if (isOptional) {\n if (this.restSlugName != null) {\n throw new Error('You cannot use both an required and optional catch-all route at the same level (\"[...' + this.restSlugName + ']\" and \"' + urlPaths[0] + '\" ).');\n }\n handleSlug(this.optionalRestSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.optionalRestSlugName = segmentName;\n // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n nextSegment = \"[[...]]\";\n } else {\n if (this.optionalRestSlugName != null) {\n throw new Error('You cannot use both an optional and required catch-all route at the same level (\"[[...' + this.optionalRestSlugName + ']]\" and \"' + urlPaths[0] + '\").');\n }\n handleSlug(this.restSlugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.restSlugName = segmentName;\n // nextSegment is overwritten to [...] so that it can later be sorted specifically\n nextSegment = \"[...]\";\n }\n } else {\n if (isOptional) {\n throw new Error('Optional route parameters are not yet supported (\"' + urlPaths[0] + '\").');\n }\n handleSlug(this.slugName, segmentName);\n // slugName is kept as it can only be one particular slugName\n this.slugName = segmentName;\n // nextSegment is overwritten to [] so that it can later be sorted specifically\n nextSegment = \"[]\";\n }\n }\n // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n if (!this.children.has(nextSegment)) {\n this.children.set(nextSegment, new UrlNode());\n }\n this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll);\n }\n constructor(){\n this.placeholder = true;\n this.children = new Map();\n this.slugName = null;\n this.restSlugName = null;\n this.optionalRestSlugName = null;\n }\n}\nfunction getSortedRoutes(normalizedPages) {\n // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n // Only 1 dynamic segment per nesting level\n // So in the case that is test/integration/dynamic-routing it'll be this:\n // pages/[post]/comments.js\n // pages/blog/[post]/comment/[id].js\n // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n // So in this case `UrlNode` created here has `this.slugName === 'post'`\n // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n // Instead what has to be passed through is the upwards path's dynamic names\n const root = new UrlNode();\n // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n normalizedPages.forEach((pagePath)=>root.insert(pagePath));\n // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n return root.smoosh();\n} //# sourceMappingURL=sorted-routes.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3NvcnRlZC1yb3V0ZXMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0ZILG1EQUFrRDtJQUM5Q0ksWUFBWTtJQUNaQyxLQUFLO1FBQ0QsT0FBT0M7SUFDWDtBQUNKLENBQUMsRUFBQztBQUNGLE1BQU1DO0lBQ0ZDLE9BQU9DLE9BQU8sRUFBRTtRQUNaLElBQUksQ0FBQ0MsT0FBTyxDQUFDRCxRQUFRRSxLQUFLLENBQUMsS0FBS0MsTUFBTSxDQUFDQyxVQUFVLEVBQUUsRUFBRTtJQUN6RDtJQUNBQyxTQUFTO1FBQ0wsT0FBTyxJQUFJLENBQUNDLE9BQU87SUFDdkI7SUFDQUEsUUFBUUMsTUFBTSxFQUFFO1FBQ1osSUFBSUEsV0FBVyxLQUFLLEdBQUdBLFNBQVM7UUFDaEMsTUFBTUMsZ0JBQWdCO2VBQ2YsSUFBSSxDQUFDQyxRQUFRLENBQUNDLElBQUk7U0FDeEIsQ0FBQ0MsSUFBSTtRQUNOLElBQUksSUFBSSxDQUFDQyxRQUFRLEtBQUssTUFBTTtZQUN4QkosY0FBY0ssTUFBTSxDQUFDTCxjQUFjTSxPQUFPLENBQUMsT0FBTztRQUN0RDtRQUNBLElBQUksSUFBSSxDQUFDQyxZQUFZLEtBQUssTUFBTTtZQUM1QlAsY0FBY0ssTUFBTSxDQUFDTCxjQUFjTSxPQUFPLENBQUMsVUFBVTtRQUN6RDtRQUNBLElBQUksSUFBSSxDQUFDRSxvQkFBb0IsS0FBSyxNQUFNO1lBQ3BDUixjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxZQUFZO1FBQzNEO1FBQ0EsTUFBTUcsU0FBU1QsY0FBY1UsR0FBRyxDQUFDLENBQUNDLElBQUksSUFBSSxDQUFDVixRQUFRLENBQUNiLEdBQUcsQ0FBQ3VCLEdBQUdiLE9BQU8sQ0FBQyxLQUFLQyxTQUFTWSxJQUFJLE1BQU1DLE1BQU0sQ0FBQyxDQUFDQyxNQUFNQyxPQUFPO21CQUNyR0Q7bUJBQ0FDO2FBQ04sRUFBRSxFQUFFO1FBQ1QsSUFBSSxJQUFJLENBQUNWLFFBQVEsS0FBSyxNQUFNO1lBQ3hCSyxPQUFPTSxJQUFJLElBQUksSUFBSSxDQUFDZCxRQUFRLENBQUNiLEdBQUcsQ0FBQyxNQUFNVSxPQUFPLENBQUNDLFNBQVMsTUFBTSxJQUFJLENBQUNLLFFBQVEsR0FBRztRQUNsRjtRQUNBLElBQUksQ0FBQyxJQUFJLENBQUNZLFdBQVcsRUFBRTtZQUNuQixNQUFNQyxJQUFJbEIsV0FBVyxNQUFNLE1BQU1BLE9BQU9tQixLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ2xELElBQUksSUFBSSxDQUFDVixvQkFBb0IsSUFBSSxNQUFNO2dCQUNuQyxNQUFNLElBQUlXLE1BQU0seUZBQXlGRixJQUFJLFlBQVlBLElBQUksVUFBVSxJQUFJLENBQUNULG9CQUFvQixHQUFHO1lBQ3ZLO1lBQ0FDLE9BQU9XLE9BQU8sQ0FBQ0g7UUFDbkI7UUFDQSxJQUFJLElBQUksQ0FBQ1YsWUFBWSxLQUFLLE1BQU07WUFDNUJFLE9BQU9NLElBQUksSUFBSSxJQUFJLENBQUNkLFFBQVEsQ0FBQ2IsR0FBRyxDQUFDLFNBQVNVLE9BQU8sQ0FBQ0MsU0FBUyxTQUFTLElBQUksQ0FBQ1EsWUFBWSxHQUFHO1FBQzVGO1FBQ0EsSUFBSSxJQUFJLENBQUNDLG9CQUFvQixLQUFLLE1BQU07WUFDcENDLE9BQU9NLElBQUksSUFBSSxJQUFJLENBQUNkLFFBQVEsQ0FBQ2IsR0FBRyxDQUFDLFdBQVdVLE9BQU8sQ0FBQ0MsU0FBUyxVQUFVLElBQUksQ0FBQ1Msb0JBQW9CLEdBQUc7UUFDdkc7UUFDQSxPQUFPQztJQUNYO0lBQ0FoQixRQUFRNEIsUUFBUSxFQUFFQyxTQUFTLEVBQUVDLFVBQVUsRUFBRTtRQUNyQyxJQUFJRixTQUFTRyxNQUFNLEtBQUssR0FBRztZQUN2QixJQUFJLENBQUNSLFdBQVcsR0FBRztZQUNuQjtRQUNKO1FBQ0EsSUFBSU8sWUFBWTtZQUNaLE1BQU0sSUFBSUosTUFBTTtRQUNwQjtRQUNBLHdDQUF3QztRQUN4QyxJQUFJTSxjQUFjSixRQUFRLENBQUMsRUFBRTtRQUM3Qiw2Q0FBNkM7UUFDN0MsSUFBSUksWUFBWUMsVUFBVSxDQUFDLFFBQVFELFlBQVlFLFFBQVEsQ0FBQyxNQUFNO1lBQzFELDhDQUE4QztZQUM5QyxJQUFJQyxjQUFjSCxZQUFZUCxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3hDLElBQUlXLGFBQWE7WUFDakIsSUFBSUQsWUFBWUYsVUFBVSxDQUFDLFFBQVFFLFlBQVlELFFBQVEsQ0FBQyxNQUFNO2dCQUMxRCx1REFBdUQ7Z0JBQ3ZEQyxjQUFjQSxZQUFZVixLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUNwQ1csYUFBYTtZQUNqQjtZQUNBLElBQUlELFlBQVlGLFVBQVUsQ0FBQyxRQUFRO2dCQUMvQix3Q0FBd0M7Z0JBQ3hDRSxjQUFjQSxZQUFZRSxTQUFTLENBQUM7Z0JBQ3BDUCxhQUFhO1lBQ2pCO1lBQ0EsSUFBSUssWUFBWUYsVUFBVSxDQUFDLFFBQVFFLFlBQVlELFFBQVEsQ0FBQyxNQUFNO2dCQUMxRCxNQUFNLElBQUlSLE1BQU0sOERBQThEUyxjQUFjO1lBQ2hHO1lBQ0EsSUFBSUEsWUFBWUYsVUFBVSxDQUFDLE1BQU07Z0JBQzdCLE1BQU0sSUFBSVAsTUFBTSwwREFBMERTLGNBQWM7WUFDNUY7WUFDQSxTQUFTRyxXQUFXQyxZQUFZLEVBQUVDLFFBQVE7Z0JBQ3RDLElBQUlELGlCQUFpQixNQUFNO29CQUN2Qiw2RUFBNkU7b0JBQzdFLGlDQUFpQztvQkFDakMsd0JBQXdCO29CQUN4QixzQkFBc0I7b0JBQ3RCLHdGQUF3RjtvQkFDeEYsSUFBSUEsaUJBQWlCQyxVQUFVO3dCQUMzQix3SEFBd0g7d0JBQ3hILE1BQU0sSUFBSWQsTUFBTSxxRUFBcUVhLGVBQWUsWUFBWUMsV0FBVztvQkFDL0g7Z0JBQ0o7Z0JBQ0FYLFVBQVVZLE9BQU8sQ0FBQyxDQUFDQztvQkFDZixJQUFJQSxTQUFTRixVQUFVO3dCQUNuQixNQUFNLElBQUlkLE1BQU0seUNBQXlDYyxXQUFXO29CQUN4RTtvQkFDQSxJQUFJRSxLQUFLQyxPQUFPLENBQUMsT0FBTyxRQUFRWCxZQUFZVyxPQUFPLENBQUMsT0FBTyxLQUFLO3dCQUM1RCxNQUFNLElBQUlqQixNQUFNLHFDQUFxQ2dCLE9BQU8sWUFBWUYsV0FBVztvQkFDdkY7Z0JBQ0o7Z0JBQ0FYLFVBQVVQLElBQUksQ0FBQ2tCO1lBQ25CO1lBQ0EsSUFBSVYsWUFBWTtnQkFDWixJQUFJTSxZQUFZO29CQUNaLElBQUksSUFBSSxDQUFDdEIsWUFBWSxJQUFJLE1BQU07d0JBQzNCLE1BQU0sSUFBSVksTUFBTSwwRkFBMEYsSUFBSSxDQUFDWixZQUFZLEdBQUcsYUFBYWMsUUFBUSxDQUFDLEVBQUUsR0FBRztvQkFDN0o7b0JBQ0FVLFdBQVcsSUFBSSxDQUFDdkIsb0JBQW9CLEVBQUVvQjtvQkFDdEMsNkRBQTZEO29CQUM3RCxJQUFJLENBQUNwQixvQkFBb0IsR0FBR29CO29CQUM1QixvRkFBb0Y7b0JBQ3BGSCxjQUFjO2dCQUNsQixPQUFPO29CQUNILElBQUksSUFBSSxDQUFDakIsb0JBQW9CLElBQUksTUFBTTt3QkFDbkMsTUFBTSxJQUFJVyxNQUFNLDJGQUEyRixJQUFJLENBQUNYLG9CQUFvQixHQUFHLGNBQWNhLFFBQVEsQ0FBQyxFQUFFLEdBQUc7b0JBQ3ZLO29CQUNBVSxXQUFXLElBQUksQ0FBQ3hCLFlBQVksRUFBRXFCO29CQUM5Qiw2REFBNkQ7b0JBQzdELElBQUksQ0FBQ3JCLFlBQVksR0FBR3FCO29CQUNwQixrRkFBa0Y7b0JBQ2xGSCxjQUFjO2dCQUNsQjtZQUNKLE9BQU87Z0JBQ0gsSUFBSUksWUFBWTtvQkFDWixNQUFNLElBQUlWLE1BQU0sdURBQXVERSxRQUFRLENBQUMsRUFBRSxHQUFHO2dCQUN6RjtnQkFDQVUsV0FBVyxJQUFJLENBQUMzQixRQUFRLEVBQUV3QjtnQkFDMUIsNkRBQTZEO2dCQUM3RCxJQUFJLENBQUN4QixRQUFRLEdBQUd3QjtnQkFDaEIsK0VBQStFO2dCQUMvRUgsY0FBYztZQUNsQjtRQUNKO1FBQ0EsaUZBQWlGO1FBQ2pGLElBQUksQ0FBQyxJQUFJLENBQUN4QixRQUFRLENBQUNvQyxHQUFHLENBQUNaLGNBQWM7WUFDakMsSUFBSSxDQUFDeEIsUUFBUSxDQUFDcUMsR0FBRyxDQUFDYixhQUFhLElBQUluQztRQUN2QztRQUNBLElBQUksQ0FBQ1csUUFBUSxDQUFDYixHQUFHLENBQUNxQyxhQUFhaEMsT0FBTyxDQUFDNEIsU0FBU0gsS0FBSyxDQUFDLElBQUlJLFdBQVdDO0lBQ3pFO0lBQ0FnQixhQUFhO1FBQ1QsSUFBSSxDQUFDdkIsV0FBVyxHQUFHO1FBQ25CLElBQUksQ0FBQ2YsUUFBUSxHQUFHLElBQUl1QztRQUNwQixJQUFJLENBQUNwQyxRQUFRLEdBQUc7UUFDaEIsSUFBSSxDQUFDRyxZQUFZLEdBQUc7UUFDcEIsSUFBSSxDQUFDQyxvQkFBb0IsR0FBRztJQUNoQztBQUNKO0FBQ0EsU0FBU25CLGdCQUFnQm9ELGVBQWU7SUFDcEMsa0ZBQWtGO0lBQ2xGLDRFQUE0RTtJQUM1RSwyQ0FBMkM7SUFDM0MseUVBQXlFO0lBQ3pFLDJCQUEyQjtJQUMzQixvQ0FBb0M7SUFDcEMsOEVBQThFO0lBQzlFLHdFQUF3RTtJQUN4RSxnSEFBZ0g7SUFDaEgsNEVBQTRFO0lBQzVFLE1BQU1DLE9BQU8sSUFBSXBEO0lBQ2pCLDZGQUE2RjtJQUM3Rm1ELGdCQUFnQlAsT0FBTyxDQUFDLENBQUNTLFdBQVdELEtBQUtuRCxNQUFNLENBQUNvRDtJQUNoRCw0R0FBNEc7SUFDNUcsT0FBT0QsS0FBSzdDLE1BQU07QUFDdEIsRUFFQSx5Q0FBeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9zb3J0ZWQtcm91dGVzLmpzPzJmNzgiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRTb3J0ZWRSb3V0ZXNcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldFNvcnRlZFJvdXRlcztcbiAgICB9XG59KTtcbmNsYXNzIFVybE5vZGUge1xuICAgIGluc2VydCh1cmxQYXRoKSB7XG4gICAgICAgIHRoaXMuX2luc2VydCh1cmxQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksIFtdLCBmYWxzZSk7XG4gICAgfVxuICAgIHNtb29zaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Ntb29zaCgpO1xuICAgIH1cbiAgICBfc21vb3NoKHByZWZpeCkge1xuICAgICAgICBpZiAocHJlZml4ID09PSB2b2lkIDApIHByZWZpeCA9IFwiL1wiO1xuICAgICAgICBjb25zdCBjaGlsZHJlblBhdGhzID0gW1xuICAgICAgICAgICAgLi4udGhpcy5jaGlsZHJlbi5rZXlzKClcbiAgICAgICAgXS5zb3J0KCk7XG4gICAgICAgIGlmICh0aGlzLnNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjaGlsZHJlblBhdGhzLnNwbGljZShjaGlsZHJlblBhdGhzLmluZGV4T2YoXCJbXVwiKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjaGlsZHJlblBhdGhzLnNwbGljZShjaGlsZHJlblBhdGhzLmluZGV4T2YoXCJbLi4uXVwiKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuUGF0aHMuc3BsaWNlKGNoaWxkcmVuUGF0aHMuaW5kZXhPZihcIltbLi4uXV1cIiksIDEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdXRlcyA9IGNoaWxkcmVuUGF0aHMubWFwKChjKT0+dGhpcy5jaGlsZHJlbi5nZXQoYykuX3Ntb29zaChcIlwiICsgcHJlZml4ICsgYyArIFwiL1wiKSkucmVkdWNlKChwcmV2LCBjdXJyKT0+W1xuICAgICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgICAgLi4uY3VyclxuICAgICAgICAgICAgXSwgW10pO1xuICAgICAgICBpZiAodGhpcy5zbHVnTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcm91dGVzLnB1c2goLi4udGhpcy5jaGlsZHJlbi5nZXQoXCJbXVwiKS5fc21vb3NoKHByZWZpeCArIFwiW1wiICsgdGhpcy5zbHVnTmFtZSArIFwiXS9cIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5wbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgY29uc3QgciA9IHByZWZpeCA9PT0gXCIvXCIgPyBcIi9cIiA6IHByZWZpeC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IGRlZmluZSBhIHJvdXRlIHdpdGggdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgYSBvcHRpb25hbCBjYXRjaC1hbGwgcm91dGUgKFwiJyArIHIgKyAnXCIgYW5kIFwiJyArIHIgKyBcIltbLi4uXCIgKyB0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICsgJ11dXCIpLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm91dGVzLnVuc2hpZnQocik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICByb3V0ZXMucHVzaCguLi50aGlzLmNoaWxkcmVuLmdldChcIlsuLi5dXCIpLl9zbW9vc2gocHJlZml4ICsgXCJbLi4uXCIgKyB0aGlzLnJlc3RTbHVnTmFtZSArIFwiXS9cIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICByb3V0ZXMucHVzaCguLi50aGlzLmNoaWxkcmVuLmdldChcIltbLi4uXV1cIikuX3Ntb29zaChwcmVmaXggKyBcIltbLi4uXCIgKyB0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICsgXCJdXS9cIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3V0ZXM7XG4gICAgfVxuICAgIF9pbnNlcnQodXJsUGF0aHMsIHNsdWdOYW1lcywgaXNDYXRjaEFsbCkge1xuICAgICAgICBpZiAodXJsUGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ2F0Y2hBbGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhdGNoLWFsbCBtdXN0IGJlIHRoZSBsYXN0IHBhcnQgb2YgdGhlIFVSTC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGhlIG5leHQgc2VnbWVudCBpbiB0aGUgdXJsUGF0aHMgbGlzdFxuICAgICAgICBsZXQgbmV4dFNlZ21lbnQgPSB1cmxQYXRoc1swXTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNlZ21lbnQgbWF0Y2hlcyBgW3NvbWV0aGluZ11gXG4gICAgICAgIGlmIChuZXh0U2VnbWVudC5zdGFydHNXaXRoKFwiW1wiKSAmJiBuZXh0U2VnbWVudC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAgICAgICAgIC8vIFN0cmlwIGBbYCBhbmQgYF1gLCBsZWF2aW5nIG9ubHkgYHNvbWV0aGluZ2BcbiAgICAgICAgICAgIGxldCBzZWdtZW50TmFtZSA9IG5leHRTZWdtZW50LnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgIGxldCBpc09wdGlvbmFsID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VnbWVudE5hbWUuc3RhcnRzV2l0aChcIltcIikgJiYgc2VnbWVudE5hbWUuZW5kc1dpdGgoXCJdXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gU3RyaXAgb3B0aW9uYWwgYFtgIGFuZCBgXWAsIGxlYXZpbmcgb25seSBgc29tZXRoaW5nYFxuICAgICAgICAgICAgICAgIHNlZ21lbnROYW1lID0gc2VnbWVudE5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgICAgIGlzT3B0aW9uYWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlZ21lbnROYW1lLnN0YXJ0c1dpdGgoXCIuLi5cIikpIHtcbiAgICAgICAgICAgICAgICAvLyBTdHJpcCBgLi4uYCwgbGVhdmluZyBvbmx5IGBzb21ldGhpbmdgXG4gICAgICAgICAgICAgICAgc2VnbWVudE5hbWUgPSBzZWdtZW50TmFtZS5zdWJzdHJpbmcoMyk7XG4gICAgICAgICAgICAgICAgaXNDYXRjaEFsbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VnbWVudE5hbWUuc3RhcnRzV2l0aChcIltcIikgfHwgc2VnbWVudE5hbWUuZW5kc1dpdGgoXCJdXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VnbWVudCBuYW1lcyBtYXkgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIGV4dHJhIGJyYWNrZXRzICgnXCIgKyBzZWdtZW50TmFtZSArIFwiJykuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlZ21lbnROYW1lLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2VnbWVudCBuYW1lcyBtYXkgbm90IHN0YXJ0IHdpdGggZXJyb25lb3VzIHBlcmlvZHMgKCdcIiArIHNlZ21lbnROYW1lICsgXCInKS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVTbHVnKHByZXZpb3VzU2x1ZywgbmV4dFNsdWcpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTbHVnICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzcGVjaWZpYyBzZWdtZW50IGFscmVhZHkgaGFzIGEgc2x1ZyBidXQgdGhlIHNsdWcgaXMgbm90IGBzb21ldGhpbmdgXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgY29sbGlzaW9ucyBsaWtlOlxuICAgICAgICAgICAgICAgICAgICAvLyBwYWdlcy9bcG9zdF0vaW5kZXguanNcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFnZXMvW2lkXS9pbmRleC5qc1xuICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIGN1cnJlbnRseSBtdWx0aXBsZSBkeW5hbWljIHBhcmFtcyBvbiB0aGUgc2FtZSBzZWdtZW50IGxldmVsIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1NsdWcgIT09IG5leHRTbHVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGVycm9yIHNlZW1zIHRvIGJlIGNvbmZ1c2luZyBmb3IgdXNlcnMsIG5lZWRzIGFuIGVycm9yIGxpbmssIHRoZSBkZXNjcmlwdGlvbiBjYW4gYmUgYmFzZWQgb24gYWJvdmUgY29tbWVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBjYW5ub3QgdXNlIGRpZmZlcmVudCBzbHVnIG5hbWVzIGZvciB0aGUgc2FtZSBkeW5hbWljIHBhdGggKCdcIiArIHByZXZpb3VzU2x1ZyArIFwiJyAhPT0gJ1wiICsgbmV4dFNsdWcgKyBcIicpLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzbHVnTmFtZXMuZm9yRWFjaCgoc2x1Zyk9PntcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNsdWcgPT09IG5leHRTbHVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBzbHVnIG5hbWUgXCInICsgbmV4dFNsdWcgKyAnXCIgcmVwZWF0IHdpdGhpbiBhIHNpbmdsZSBkeW5hbWljIHBhdGgnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2x1Zy5yZXBsYWNlKC9cXFcvZywgXCJcIikgPT09IG5leHRTZWdtZW50LnJlcGxhY2UoL1xcVy9nLCBcIlwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgY2Fubm90IGhhdmUgdGhlIHNsdWcgbmFtZXMgXCInICsgc2x1ZyArICdcIiBhbmQgXCInICsgbmV4dFNsdWcgKyAnXCIgZGlmZmVyIG9ubHkgYnkgbm9uLXdvcmQgc3ltYm9scyB3aXRoaW4gYSBzaW5nbGUgZHluYW1pYyBwYXRoJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzbHVnTmFtZXMucHVzaChuZXh0U2x1Zyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNDYXRjaEFsbCkge1xuICAgICAgICAgICAgICAgIGlmIChpc09wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc3RTbHVnTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBjYW5ub3QgdXNlIGJvdGggYW4gcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGNhdGNoLWFsbCByb3V0ZSBhdCB0aGUgc2FtZSBsZXZlbCAoXCJbLi4uJyArIHRoaXMucmVzdFNsdWdOYW1lICsgJ11cIiBhbmQgXCInICsgdXJsUGF0aHNbMF0gKyAnXCIgKS4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTbHVnKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUsIHNlZ21lbnROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2x1Z05hbWUgaXMga2VwdCBhcyBpdCBjYW4gb25seSBiZSBvbmUgcGFydGljdWxhciBzbHVnTmFtZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lID0gc2VnbWVudE5hbWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5leHRTZWdtZW50IGlzIG92ZXJ3cml0dGVuIHRvIFtbLi4uXV0gc28gdGhhdCBpdCBjYW4gbGF0ZXIgYmUgc29ydGVkIHNwZWNpZmljYWxseVxuICAgICAgICAgICAgICAgICAgICBuZXh0U2VnbWVudCA9IFwiW1suLi5dXVwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGNhbm5vdCB1c2UgYm90aCBhbiBvcHRpb25hbCBhbmQgcmVxdWlyZWQgY2F0Y2gtYWxsIHJvdXRlIGF0IHRoZSBzYW1lIGxldmVsIChcIltbLi4uJyArIHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgKyAnXV1cIiBhbmQgXCInICsgdXJsUGF0aHNbMF0gKyAnXCIpLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNsdWcodGhpcy5yZXN0U2x1Z05hbWUsIHNlZ21lbnROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2x1Z05hbWUgaXMga2VwdCBhcyBpdCBjYW4gb25seSBiZSBvbmUgcGFydGljdWxhciBzbHVnTmFtZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RTbHVnTmFtZSA9IHNlZ21lbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICAvLyBuZXh0U2VnbWVudCBpcyBvdmVyd3JpdHRlbiB0byBbLi4uXSBzbyB0aGF0IGl0IGNhbiBsYXRlciBiZSBzb3J0ZWQgc3BlY2lmaWNhbGx5XG4gICAgICAgICAgICAgICAgICAgIG5leHRTZWdtZW50ID0gXCJbLi4uXVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcHRpb25hbCByb3V0ZSBwYXJhbWV0ZXJzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCAoXCInICsgdXJsUGF0aHNbMF0gKyAnXCIpLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoYW5kbGVTbHVnKHRoaXMuc2x1Z05hbWUsIHNlZ21lbnROYW1lKTtcbiAgICAgICAgICAgICAgICAvLyBzbHVnTmFtZSBpcyBrZXB0IGFzIGl0IGNhbiBvbmx5IGJlIG9uZSBwYXJ0aWN1bGFyIHNsdWdOYW1lXG4gICAgICAgICAgICAgICAgdGhpcy5zbHVnTmFtZSA9IHNlZ21lbnROYW1lO1xuICAgICAgICAgICAgICAgIC8vIG5leHRTZWdtZW50IGlzIG92ZXJ3cml0dGVuIHRvIFtdIHNvIHRoYXQgaXQgY2FuIGxhdGVyIGJlIHNvcnRlZCBzcGVjaWZpY2FsbHlcbiAgICAgICAgICAgICAgICBuZXh0U2VnbWVudCA9IFwiW11cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGlzIFVybE5vZGUgZG9lc24ndCBoYXZlIHRoZSBuZXh0U2VnbWVudCB5ZXQgd2UgY3JlYXRlIGEgbmV3IGNoaWxkIFVybE5vZGVcbiAgICAgICAgaWYgKCF0aGlzLmNoaWxkcmVuLmhhcyhuZXh0U2VnbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KG5leHRTZWdtZW50LCBuZXcgVXJsTm9kZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkcmVuLmdldChuZXh0U2VnbWVudCkuX2luc2VydCh1cmxQYXRocy5zbGljZSgxKSwgc2x1Z05hbWVzLCBpc0NhdGNoQWxsKTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuc2x1Z05hbWUgPSBudWxsO1xuICAgICAgICB0aGlzLnJlc3RTbHVnTmFtZSA9IG51bGw7XG4gICAgICAgIHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgPSBudWxsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFNvcnRlZFJvdXRlcyhub3JtYWxpemVkUGFnZXMpIHtcbiAgICAvLyBGaXJzdCB0aGUgVXJsTm9kZSBpcyBjcmVhdGVkLCBhbmQgZXZlcnkgVXJsTm9kZSBjYW4gaGF2ZSBvbmx5IDEgZHluYW1pYyBzZWdtZW50XG4gICAgLy8gRWcgeW91IGNhbid0IGhhdmUgcGFnZXMvW3Bvc3RdL2FiYy5qcyBhbmQgcGFnZXMvW2hlbGxvXS9zb21ldGhpbmctZWxzZS5qc1xuICAgIC8vIE9ubHkgMSBkeW5hbWljIHNlZ21lbnQgcGVyIG5lc3RpbmcgbGV2ZWxcbiAgICAvLyBTbyBpbiB0aGUgY2FzZSB0aGF0IGlzIHRlc3QvaW50ZWdyYXRpb24vZHluYW1pYy1yb3V0aW5nIGl0J2xsIGJlIHRoaXM6XG4gICAgLy8gcGFnZXMvW3Bvc3RdL2NvbW1lbnRzLmpzXG4gICAgLy8gcGFnZXMvYmxvZy9bcG9zdF0vY29tbWVudC9baWRdLmpzXG4gICAgLy8gQm90aCBhcmUgZmluZSBiZWNhdXNlIGBwYWdlcy9bcG9zdF1gIGFuZCBgcGFnZXMvYmxvZ2AgYXJlIG9uIHRoZSBzYW1lIGxldmVsXG4gICAgLy8gU28gaW4gdGhpcyBjYXNlIGBVcmxOb2RlYCBjcmVhdGVkIGhlcmUgaGFzIGB0aGlzLnNsdWdOYW1lID09PSAncG9zdCdgXG4gICAgLy8gQW5kIHNpbmNlIHlvdXIgUFIgcGFzc2VkIHRocm91Z2ggYHNsdWdOYW1lYCBhcyBhbiBhcnJheSBiYXNpY2FsbHkgaXQnZCBpbmNsdWRpbmcgaXQgaW4gdG9vIG1hbnkgcG9zc2liaWxpdGllc1xuICAgIC8vIEluc3RlYWQgd2hhdCBoYXMgdG8gYmUgcGFzc2VkIHRocm91Z2ggaXMgdGhlIHVwd2FyZHMgcGF0aCdzIGR5bmFtaWMgbmFtZXNcbiAgICBjb25zdCByb290ID0gbmV3IFVybE5vZGUoKTtcbiAgICAvLyBIZXJlIHRoZSBgcm9vdGAgZ2V0cyBpbmplY3RlZCBtdWx0aXBsZSBwYXRocywgYW5kIGluc2VydCB3aWxsIGJyZWFrIHRoZW0gdXAgaW50byBzdWJsZXZlbHNcbiAgICBub3JtYWxpemVkUGFnZXMuZm9yRWFjaCgocGFnZVBhdGgpPT5yb290Lmluc2VydChwYWdlUGF0aCkpO1xuICAgIC8vIFNtb29zaCB3aWxsIHRoZW4gc29ydCB0aG9zZSBzdWJsZXZlbHMgdXAgdG8gdGhlIHBvaW50IHdoZXJlIHlvdSBnZXQgdGhlIGNvcnJlY3Qgcm91dGUgZGVmaW5pdGlvbiBwcmlvcml0eVxuICAgIHJldHVybiByb290LnNtb29zaCgpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zb3J0ZWQtcm91dGVzLmpzLm1hcCJdLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJnZXQiLCJnZXRTb3J0ZWRSb3V0ZXMiLCJVcmxOb2RlIiwiaW5zZXJ0IiwidXJsUGF0aCIsIl9pbnNlcnQiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzbW9vc2giLCJfc21vb3NoIiwicHJlZml4IiwiY2hpbGRyZW5QYXRocyIsImNoaWxkcmVuIiwia2V5cyIsInNvcnQiLCJzbHVnTmFtZSIsInNwbGljZSIsImluZGV4T2YiLCJyZXN0U2x1Z05hbWUiLCJvcHRpb25hbFJlc3RTbHVnTmFtZSIsInJvdXRlcyIsIm1hcCIsImMiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsInB1c2giLCJwbGFjZWhvbGRlciIsInIiLCJzbGljZSIsIkVycm9yIiwidW5zaGlmdCIsInVybFBhdGhzIiwic2x1Z05hbWVzIiwiaXNDYXRjaEFsbCIsImxlbmd0aCIsIm5leHRTZWdtZW50Iiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic2VnbWVudE5hbWUiLCJpc09wdGlvbmFsIiwic3Vic3RyaW5nIiwiaGFuZGxlU2x1ZyIsInByZXZpb3VzU2x1ZyIsIm5leHRTbHVnIiwiZm9yRWFjaCIsInNsdWciLCJyZXBsYWNlIiwiaGFzIiwic2V0IiwiY29uc3RydWN0b3IiLCJNYXAiLCJub3JtYWxpemVkUGFnZXMiLCJyb290IiwicGFnZVBhdGgiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/runtime-config.external.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/runtime-config.external.js ***! + \**********************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return _default;\n },\n setConfig: function() {\n return setConfig;\n }\n});\nlet runtimeConfig;\nconst _default = ()=>{\n return runtimeConfig;\n};\nfunction setConfig(configValue) {\n runtimeConfig = configValue;\n} //# sourceMappingURL=runtime-config.external.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcnVudGltZS1jb25maWcuZXh0ZXJuYWwuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FHTjtBQUNBLFNBQVNHLFFBQVFDLE1BQU0sRUFBRUMsR0FBRztJQUN4QixJQUFJLElBQUlDLFFBQVFELElBQUlULE9BQU9DLGNBQWMsQ0FBQ08sUUFBUUUsTUFBTTtRQUNwREMsWUFBWTtRQUNaQyxLQUFLSCxHQUFHLENBQUNDLEtBQUs7SUFDbEI7QUFDSjtBQUNBSCxRQUFRTCxTQUFTO0lBQ2JHLFNBQVM7UUFDTCxPQUFPUTtJQUNYO0lBQ0FQLFdBQVc7UUFDUCxPQUFPQTtJQUNYO0FBQ0o7QUFDQSxJQUFJUTtBQUNKLE1BQU1ELFdBQVc7SUFDYixPQUFPQztBQUNYO0FBQ0EsU0FBU1IsVUFBVVMsV0FBVztJQUMxQkQsZ0JBQWdCQztBQUNwQixFQUVBLG1EQUFtRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvcnVudGltZS1jb25maWcuZXh0ZXJuYWwuanM/ZjQ1OSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgc2V0Q29uZmlnOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGRlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2RlZmF1bHQ7XG4gICAgfSxcbiAgICBzZXRDb25maWc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2V0Q29uZmlnO1xuICAgIH1cbn0pO1xubGV0IHJ1bnRpbWVDb25maWc7XG5jb25zdCBfZGVmYXVsdCA9ICgpPT57XG4gICAgcmV0dXJuIHJ1bnRpbWVDb25maWc7XG59O1xuZnVuY3Rpb24gc2V0Q29uZmlnKGNvbmZpZ1ZhbHVlKSB7XG4gICAgcnVudGltZUNvbmZpZyA9IGNvbmZpZ1ZhbHVlO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ydW50aW1lLWNvbmZpZy5leHRlcm5hbC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJkZWZhdWx0Iiwic2V0Q29uZmlnIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX2RlZmF1bHQiLCJydW50aW1lQ29uZmlnIiwiY29uZmlnVmFsdWUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/runtime-config.external.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/segment.js": +/*!******************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/segment.js ***! + \******************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n isGroupSegment: function() {\n return isGroupSegment;\n },\n PAGE_SEGMENT_KEY: function() {\n return PAGE_SEGMENT_KEY;\n },\n DEFAULT_SEGMENT_KEY: function() {\n return DEFAULT_SEGMENT_KEY;\n }\n});\nfunction isGroupSegment(segment) {\n // Use array[0] for performant purpose\n return segment[0] === \"(\" && segment.endsWith(\")\");\n}\nconst PAGE_SEGMENT_KEY = \"__PAGE__\";\nconst DEFAULT_SEGMENT_KEY = \"__DEFAULT__\"; //# sourceMappingURL=segment.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvc2VnbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRixLQUFNQyxDQUFBQSxDQUlOO0FBQ0EsU0FBU0ksUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSVYsT0FBT0MsY0FBYyxDQUFDUSxRQUFRRSxNQUFNO1FBQ3BEQyxZQUFZO1FBQ1pDLEtBQUtILEdBQUcsQ0FBQ0MsS0FBSztJQUNsQjtBQUNKO0FBQ0FILFFBQVFOLFNBQVM7SUFDYkcsZ0JBQWdCO1FBQ1osT0FBT0E7SUFDWDtJQUNBQyxrQkFBa0I7UUFDZCxPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxTQUFTRixlQUFlUyxPQUFPO0lBQzNCLHNDQUFzQztJQUN0QyxPQUFPQSxPQUFPLENBQUMsRUFBRSxLQUFLLE9BQU9BLFFBQVFDLFFBQVEsQ0FBQztBQUNsRDtBQUNBLE1BQU1ULG1CQUFtQjtBQUN6QixNQUFNQyxzQkFBc0IsZUFFNUIsbUNBQW1DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zZWdtZW50LmpzP2ZmNzIiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBpc0dyb3VwU2VnbWVudDogbnVsbCxcbiAgICBQQUdFX1NFR01FTlRfS0VZOiBudWxsLFxuICAgIERFRkFVTFRfU0VHTUVOVF9LRVk6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgaXNHcm91cFNlZ21lbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNHcm91cFNlZ21lbnQ7XG4gICAgfSxcbiAgICBQQUdFX1NFR01FTlRfS0VZOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBBR0VfU0VHTUVOVF9LRVk7XG4gICAgfSxcbiAgICBERUZBVUxUX1NFR01FTlRfS0VZOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIERFRkFVTFRfU0VHTUVOVF9LRVk7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBpc0dyb3VwU2VnbWVudChzZWdtZW50KSB7XG4gICAgLy8gVXNlIGFycmF5WzBdIGZvciBwZXJmb3JtYW50IHB1cnBvc2VcbiAgICByZXR1cm4gc2VnbWVudFswXSA9PT0gXCIoXCIgJiYgc2VnbWVudC5lbmRzV2l0aChcIilcIik7XG59XG5jb25zdCBQQUdFX1NFR01FTlRfS0VZID0gXCJfX1BBR0VfX1wiO1xuY29uc3QgREVGQVVMVF9TRUdNRU5UX0tFWSA9IFwiX19ERUZBVUxUX19cIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VnbWVudC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJtb2R1bGUiLCJpc0dyb3VwU2VnbWVudCIsIlBBR0VfU0VHTUVOVF9LRVkiLCJERUZBVUxUX1NFR01FTlRfS0VZIiwiX2V4cG9ydCIsInRhcmdldCIsImFsbCIsIm5hbWUiLCJlbnVtZXJhYmxlIiwiZ2V0Iiwic2VnbWVudCIsImVuZHNXaXRoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/segment.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/side-effect.js": +/*!**********************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/side-effect.js ***! + \**********************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return SideEffect;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nconst isServer = \"object\" === \"undefined\";\nconst useClientOnlyLayoutEffect = isServer ? ()=>{} : _react.useLayoutEffect;\nconst useClientOnlyEffect = isServer ? ()=>{} : _react.useEffect;\nfunction SideEffect(props) {\n _s();\n const { headManager, reduceComponentsToState } = props;\n function emitChange() {\n if (headManager && headManager.mountedInstances) {\n const headElements = _react.Children.toArray(Array.from(headManager.mountedInstances).filter(Boolean));\n headManager.updateHead(reduceComponentsToState(headElements, props));\n }\n }\n if (isServer) {\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n emitChange();\n }\n useClientOnlyLayoutEffect(()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n return ()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.delete(props.children);\n };\n });\n // We need to call `updateHead` method whenever the `SideEffect` is trigger in all\n // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s\n // being rendered, we only trigger the method from the last one.\n // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`\n // singleton in the layout effect pass, and actually trigger it in the effect pass.\n useClientOnlyLayoutEffect(()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n return ()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n };\n });\n useClientOnlyEffect(()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n return ()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n };\n });\n return null;\n} //# sourceMappingURL=side-effect.js.map\n_s(SideEffect, \"gHVkikNHNxjVdD11eJBzaqkCiPY=\", false, function() {\n return [\n useClientOnlyLayoutEffect,\n useClientOnlyLayoutEffect,\n useClientOnlyEffect\n ];\n});\n_c = SideEffect;\nvar _c;\n$RefreshReg$(_c, \"SideEffect\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvc2lkZS1lZmZlY3QuanMiLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBQSw4Q0FBNkM7SUFDekNHLE9BQU87QUFDWCxDQUFDLEVBQUM7QUFDRkgsMkNBQTBDO0lBQ3RDSSxZQUFZO0lBQ1pDLEtBQUs7UUFDRCxPQUFPQztJQUNYO0FBQ0osQ0FBQyxFQUFDO0FBQ0YsTUFBTUMsU0FBU0MsbUJBQU9BLENBQUMsNENBQU87QUFDOUIsTUFBTUMsV0FBVyxhQUFrQjtBQUNuQyxNQUFNQyw0QkFBNEJELFdBQVcsS0FBSyxJQUFJRixPQUFPSSxlQUFlO0FBQzVFLE1BQU1DLHNCQUFzQkgsV0FBVyxLQUFLLElBQUlGLE9BQU9NLFNBQVM7QUFDaEUsU0FBU1AsV0FBV1EsS0FBSzs7SUFDckIsTUFBTSxFQUFFQyxXQUFXLEVBQUVDLHVCQUF1QixFQUFFLEdBQUdGO0lBQ2pELFNBQVNHO1FBQ0wsSUFBSUYsZUFBZUEsWUFBWUcsZ0JBQWdCLEVBQUU7WUFDN0MsTUFBTUMsZUFBZVosT0FBT2EsUUFBUSxDQUFDQyxPQUFPLENBQUNDLE1BQU1DLElBQUksQ0FBQ1IsWUFBWUcsZ0JBQWdCLEVBQUVNLE1BQU0sQ0FBQ0M7WUFDN0ZWLFlBQVlXLFVBQVUsQ0FBQ1Ysd0JBQXdCRyxjQUFjTDtRQUNqRTtJQUNKO0lBQ0EsSUFBSUwsVUFBVTtRQUNWLElBQUlrQjtRQUNKWixlQUFlLE9BQU8sS0FBSyxJQUFJLENBQUNZLGdDQUFnQ1osWUFBWUcsZ0JBQWdCLEtBQUssT0FBTyxLQUFLLElBQUlTLDhCQUE4QkMsR0FBRyxDQUFDZCxNQUFNZSxRQUFRO1FBQ2pLWjtJQUNKO0lBQ0FQLDBCQUEwQjtRQUN0QixJQUFJaUI7UUFDSlosZUFBZSxPQUFPLEtBQUssSUFBSSxDQUFDWSxnQ0FBZ0NaLFlBQVlHLGdCQUFnQixLQUFLLE9BQU8sS0FBSyxJQUFJUyw4QkFBOEJDLEdBQUcsQ0FBQ2QsTUFBTWUsUUFBUTtRQUNqSyxPQUFPO1lBQ0gsSUFBSUY7WUFDSlosZUFBZSxPQUFPLEtBQUssSUFBSSxDQUFDWSxnQ0FBZ0NaLFlBQVlHLGdCQUFnQixLQUFLLE9BQU8sS0FBSyxJQUFJUyw4QkFBOEJHLE1BQU0sQ0FBQ2hCLE1BQU1lLFFBQVE7UUFDeEs7SUFDSjtJQUNBLGtGQUFrRjtJQUNsRixvRkFBb0Y7SUFDcEYsZ0VBQWdFO0lBQ2hFLHFGQUFxRjtJQUNyRixtRkFBbUY7SUFDbkZuQiwwQkFBMEI7UUFDdEIsSUFBSUssYUFBYTtZQUNiQSxZQUFZZ0IsY0FBYyxHQUFHZDtRQUNqQztRQUNBLE9BQU87WUFDSCxJQUFJRixhQUFhO2dCQUNiQSxZQUFZZ0IsY0FBYyxHQUFHZDtZQUNqQztRQUNKO0lBQ0o7SUFDQUwsb0JBQW9CO1FBQ2hCLElBQUlHLGVBQWVBLFlBQVlnQixjQUFjLEVBQUU7WUFDM0NoQixZQUFZZ0IsY0FBYztZQUMxQmhCLFlBQVlnQixjQUFjLEdBQUc7UUFDakM7UUFDQSxPQUFPO1lBQ0gsSUFBSWhCLGVBQWVBLFlBQVlnQixjQUFjLEVBQUU7Z0JBQzNDaEIsWUFBWWdCLGNBQWM7Z0JBQzFCaEIsWUFBWWdCLGNBQWMsR0FBRztZQUNqQztRQUNKO0lBQ0o7SUFDQSxPQUFPO0FBQ1gsRUFFQSx1Q0FBdUM7R0FuRDlCekI7O1FBYUxJO1FBYUFBO1FBVUFFOzs7S0FwQ0tOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zaWRlLWVmZmVjdC5qcz80MDhjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU2lkZUVmZmVjdDtcbiAgICB9XG59KTtcbmNvbnN0IF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmNvbnN0IGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIjtcbmNvbnN0IHVzZUNsaWVudE9ubHlMYXlvdXRFZmZlY3QgPSBpc1NlcnZlciA/ICgpPT57fSA6IF9yZWFjdC51c2VMYXlvdXRFZmZlY3Q7XG5jb25zdCB1c2VDbGllbnRPbmx5RWZmZWN0ID0gaXNTZXJ2ZXIgPyAoKT0+e30gOiBfcmVhY3QudXNlRWZmZWN0O1xuZnVuY3Rpb24gU2lkZUVmZmVjdChwcm9wcykge1xuICAgIGNvbnN0IHsgaGVhZE1hbmFnZXIsIHJlZHVjZUNvbXBvbmVudHNUb1N0YXRlIH0gPSBwcm9wcztcbiAgICBmdW5jdGlvbiBlbWl0Q2hhbmdlKCkge1xuICAgICAgICBpZiAoaGVhZE1hbmFnZXIgJiYgaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlcykge1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW1lbnRzID0gX3JlYWN0LkNoaWxkcmVuLnRvQXJyYXkoQXJyYXkuZnJvbShoZWFkTWFuYWdlci5tb3VudGVkSW5zdGFuY2VzKS5maWx0ZXIoQm9vbGVhbikpO1xuICAgICAgICAgICAgaGVhZE1hbmFnZXIudXBkYXRlSGVhZChyZWR1Y2VDb21wb25lbnRzVG9TdGF0ZShoZWFkRWxlbWVudHMsIHByb3BzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICAgIHZhciBfaGVhZE1hbmFnZXJfbW91bnRlZEluc3RhbmNlcztcbiAgICAgICAgaGVhZE1hbmFnZXIgPT0gbnVsbCA/IHZvaWQgMCA6IChfaGVhZE1hbmFnZXJfbW91bnRlZEluc3RhbmNlcyA9IGhlYWRNYW5hZ2VyLm1vdW50ZWRJbnN0YW5jZXMpID09IG51bGwgPyB2b2lkIDAgOiBfaGVhZE1hbmFnZXJfbW91bnRlZEluc3RhbmNlcy5hZGQocHJvcHMuY2hpbGRyZW4pO1xuICAgICAgICBlbWl0Q2hhbmdlKCk7XG4gICAgfVxuICAgIHVzZUNsaWVudE9ubHlMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgdmFyIF9oZWFkTWFuYWdlcl9tb3VudGVkSW5zdGFuY2VzO1xuICAgICAgICBoZWFkTWFuYWdlciA9PSBudWxsID8gdm9pZCAwIDogKF9oZWFkTWFuYWdlcl9tb3VudGVkSW5zdGFuY2VzID0gaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9oZWFkTWFuYWdlcl9tb3VudGVkSW5zdGFuY2VzLmFkZChwcm9wcy5jaGlsZHJlbik7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgdmFyIF9oZWFkTWFuYWdlcl9tb3VudGVkSW5zdGFuY2VzO1xuICAgICAgICAgICAgaGVhZE1hbmFnZXIgPT0gbnVsbCA/IHZvaWQgMCA6IChfaGVhZE1hbmFnZXJfbW91bnRlZEluc3RhbmNlcyA9IGhlYWRNYW5hZ2VyLm1vdW50ZWRJbnN0YW5jZXMpID09IG51bGwgPyB2b2lkIDAgOiBfaGVhZE1hbmFnZXJfbW91bnRlZEluc3RhbmNlcy5kZWxldGUocHJvcHMuY2hpbGRyZW4pO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIC8vIFdlIG5lZWQgdG8gY2FsbCBgdXBkYXRlSGVhZGAgbWV0aG9kIHdoZW5ldmVyIHRoZSBgU2lkZUVmZmVjdGAgaXMgdHJpZ2dlciBpbiBhbGxcbiAgICAvLyBsaWZlLWN5Y2xlczogbW91bnQsIHVwZGF0ZSwgdW5tb3VudC4gSG93ZXZlciwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGBTaWRlRWZmZWN0YHNcbiAgICAvLyBiZWluZyByZW5kZXJlZCwgd2Ugb25seSB0cmlnZ2VyIHRoZSBtZXRob2QgZnJvbSB0aGUgbGFzdCBvbmUuXG4gICAgLy8gVGhpcyBpcyBlbnN1cmVkIGJ5IGtlZXBpbmcgdGhlIGxhc3QgdW5mbHVzaGVkIGB1cGRhdGVIZWFkYCBpbiB0aGUgYF9wZW5kaW5nVXBkYXRlYFxuICAgIC8vIHNpbmdsZXRvbiBpbiB0aGUgbGF5b3V0IGVmZmVjdCBwYXNzLCBhbmQgYWN0dWFsbHkgdHJpZ2dlciBpdCBpbiB0aGUgZWZmZWN0IHBhc3MuXG4gICAgdXNlQ2xpZW50T25seUxheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoaGVhZE1hbmFnZXIpIHtcbiAgICAgICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlID0gZW1pdENoYW5nZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmIChoZWFkTWFuYWdlcikge1xuICAgICAgICAgICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlID0gZW1pdENoYW5nZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICB1c2VDbGllbnRPbmx5RWZmZWN0KCgpPT57XG4gICAgICAgIGlmIChoZWFkTWFuYWdlciAmJiBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSkge1xuICAgICAgICAgICAgaGVhZE1hbmFnZXIuX3BlbmRpbmdVcGRhdGUoKTtcbiAgICAgICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmIChoZWFkTWFuYWdlciAmJiBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgaGVhZE1hbmFnZXIuX3BlbmRpbmdVcGRhdGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBudWxsO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaWRlLWVmZmVjdC5qcy5tYXAiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiU2lkZUVmZmVjdCIsIl9yZWFjdCIsInJlcXVpcmUiLCJpc1NlcnZlciIsInVzZUNsaWVudE9ubHlMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VDbGllbnRPbmx5RWZmZWN0IiwidXNlRWZmZWN0IiwicHJvcHMiLCJoZWFkTWFuYWdlciIsInJlZHVjZUNvbXBvbmVudHNUb1N0YXRlIiwiZW1pdENoYW5nZSIsIm1vdW50ZWRJbnN0YW5jZXMiLCJoZWFkRWxlbWVudHMiLCJDaGlsZHJlbiIsInRvQXJyYXkiLCJBcnJheSIsImZyb20iLCJmaWx0ZXIiLCJCb29sZWFuIiwidXBkYXRlSGVhZCIsIl9oZWFkTWFuYWdlcl9tb3VudGVkSW5zdGFuY2VzIiwiYWRkIiwiY2hpbGRyZW4iLCJkZWxldGUiLCJfcGVuZGluZ1VwZGF0ZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/side-effect.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/utils.js": +/*!****************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/utils.js ***! + \****************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n WEB_VITALS: function() {\n return WEB_VITALS;\n },\n execOnce: function() {\n return execOnce;\n },\n isAbsoluteUrl: function() {\n return isAbsoluteUrl;\n },\n getLocationOrigin: function() {\n return getLocationOrigin;\n },\n getURL: function() {\n return getURL;\n },\n getDisplayName: function() {\n return getDisplayName;\n },\n isResSent: function() {\n return isResSent;\n },\n normalizeRepeatedSlashes: function() {\n return normalizeRepeatedSlashes;\n },\n loadGetInitialProps: function() {\n return loadGetInitialProps;\n },\n SP: function() {\n return SP;\n },\n ST: function() {\n return ST;\n },\n DecodeError: function() {\n return DecodeError;\n },\n NormalizeError: function() {\n return NormalizeError;\n },\n PageNotFoundError: function() {\n return PageNotFoundError;\n },\n MissingStaticPage: function() {\n return MissingStaticPage;\n },\n MiddlewareNotFoundError: function() {\n return MiddlewareNotFoundError;\n },\n stringifyError: function() {\n return stringifyError;\n }\n});\nconst WEB_VITALS = [\n \"CLS\",\n \"FCP\",\n \"FID\",\n \"INP\",\n \"LCP\",\n \"TTFB\"\n];\nfunction execOnce(fn) {\n let used = false;\n let result;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!used) {\n used = true;\n result = fn(...args);\n }\n return result;\n };\n}\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nconst isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);\nfunction getLocationOrigin() {\n const { protocol, hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? \":\" + port : \"\");\n}\nfunction getURL() {\n const { href } = window.location;\n const origin = getLocationOrigin();\n return href.substring(origin.length);\n}\nfunction getDisplayName(Component) {\n return typeof Component === \"string\" ? Component : Component.displayName || Component.name || \"Unknown\";\n}\nfunction isResSent(res) {\n return res.finished || res.headersSent;\n}\nfunction normalizeRepeatedSlashes(url) {\n const urlParts = url.split(\"?\");\n const urlNoQuery = urlParts[0];\n return urlNoQuery // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, \"/\").replace(/\\/\\/+/g, \"/\") + (urlParts[1] ? \"?\" + urlParts.slice(1).join(\"?\") : \"\");\n}\nasync function loadGetInitialProps(App, ctx) {\n if (true) {\n var _App_prototype;\n if ((_App_prototype = App.prototype) == null ? void 0 : _App_prototype.getInitialProps) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.';\n throw new Error(message);\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || ctx.ctx && ctx.ctx.res;\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)\n };\n }\n return {};\n }\n const props = await App.getInitialProps(ctx);\n if (res && isResSent(res)) {\n return props;\n }\n if (!props) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" should resolve to an object. But found \"' + props + '\" instead.';\n throw new Error(message);\n }\n if (true) {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\"\" + getDisplayName(App) + \" returned an empty object from `getInitialProps`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps\");\n }\n }\n return props;\n}\nconst SP = typeof performance !== \"undefined\";\nconst ST = SP && [\n \"mark\",\n \"measure\",\n \"getEntriesByName\"\n].every((method)=>typeof performance[method] === \"function\");\nclass DecodeError extends Error {\n}\nclass NormalizeError extends Error {\n}\nclass PageNotFoundError extends Error {\n constructor(page){\n super();\n this.code = \"ENOENT\";\n this.name = \"PageNotFoundError\";\n this.message = \"Cannot find module for page: \" + page;\n }\n}\nclass MissingStaticPage extends Error {\n constructor(page, message){\n super();\n this.message = \"Failed to load static file for page: \" + page + \" \" + message;\n }\n}\nclass MiddlewareNotFoundError extends Error {\n constructor(){\n super();\n this.code = \"ENOENT\";\n this.message = \"Cannot find the middleware module\";\n }\n}\nfunction stringifyError(error) {\n return JSON.stringify({\n message: error.message,\n stack: error.stack\n });\n} //# sourceMappingURL=utils.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYkEsOENBQTZDO0lBQ3pDRyxPQUFPO0FBQ1gsQ0FBQyxFQUFDO0FBQ0YsS0FBTUMsQ0FBQUEsQ0FrQk47QUFDQSxTQUFTa0IsUUFBUUMsTUFBTSxFQUFFQyxHQUFHO0lBQ3hCLElBQUksSUFBSUMsUUFBUUQsSUFBSXhCLE9BQU9DLGNBQWMsQ0FBQ3NCLFFBQVFFLE1BQU07UUFDcERDLFlBQVk7UUFDWkMsS0FBS0gsR0FBRyxDQUFDQyxLQUFLO0lBQ2xCO0FBQ0o7QUFDQUgsUUFBUXBCLFNBQVM7SUFDYkcsWUFBWTtRQUNSLE9BQU9BO0lBQ1g7SUFDQUMsVUFBVTtRQUNOLE9BQU9BO0lBQ1g7SUFDQUMsZUFBZTtRQUNYLE9BQU9BO0lBQ1g7SUFDQUMsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxRQUFRO1FBQ0osT0FBT0E7SUFDWDtJQUNBQyxnQkFBZ0I7UUFDWixPQUFPQTtJQUNYO0lBQ0FDLFdBQVc7UUFDUCxPQUFPQTtJQUNYO0lBQ0FDLDBCQUEwQjtRQUN0QixPQUFPQTtJQUNYO0lBQ0FDLHFCQUFxQjtRQUNqQixPQUFPQTtJQUNYO0lBQ0FDLElBQUk7UUFDQSxPQUFPQTtJQUNYO0lBQ0FDLElBQUk7UUFDQSxPQUFPQTtJQUNYO0lBQ0FDLGFBQWE7UUFDVCxPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7SUFDQUMsbUJBQW1CO1FBQ2YsT0FBT0E7SUFDWDtJQUNBQyxtQkFBbUI7UUFDZixPQUFPQTtJQUNYO0lBQ0FDLHlCQUF5QjtRQUNyQixPQUFPQTtJQUNYO0lBQ0FDLGdCQUFnQjtRQUNaLE9BQU9BO0lBQ1g7QUFDSjtBQUNBLE1BQU1oQixhQUFhO0lBQ2Y7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0g7QUFDRCxTQUFTQyxTQUFTc0IsRUFBRTtJQUNoQixJQUFJQyxPQUFPO0lBQ1gsSUFBSUM7SUFDSixPQUFPO1FBQ0gsSUFBSSxJQUFJQyxPQUFPQyxVQUFVQyxNQUFNLEVBQUVDLE9BQU8sSUFBSUMsTUFBTUosT0FBT0ssT0FBTyxHQUFHQSxPQUFPTCxNQUFNSyxPQUFPO1lBQ25GRixJQUFJLENBQUNFLEtBQUssR0FBR0osU0FBUyxDQUFDSSxLQUFLO1FBQ2hDO1FBQ0EsSUFBSSxDQUFDUCxNQUFNO1lBQ1BBLE9BQU87WUFDUEMsU0FBU0YsTUFBTU07UUFDbkI7UUFDQSxPQUFPSjtJQUNYO0FBQ0o7QUFDQSwwREFBMEQ7QUFDMUQsZ0VBQWdFO0FBQ2hFLE1BQU1PLHFCQUFxQjtBQUMzQixNQUFNOUIsZ0JBQWdCLENBQUMrQixNQUFNRCxtQkFBbUJFLElBQUksQ0FBQ0Q7QUFDckQsU0FBUzlCO0lBQ0wsTUFBTSxFQUFFZ0MsUUFBUSxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRSxHQUFHQyxPQUFPQyxRQUFRO0lBQ3BELE9BQU9KLFdBQVcsT0FBT0MsV0FBWUMsQ0FBQUEsT0FBTyxNQUFNQSxPQUFPLEVBQUM7QUFDOUQ7QUFDQSxTQUFTakM7SUFDTCxNQUFNLEVBQUVvQyxJQUFJLEVBQUUsR0FBR0YsT0FBT0MsUUFBUTtJQUNoQyxNQUFNRSxTQUFTdEM7SUFDZixPQUFPcUMsS0FBS0UsU0FBUyxDQUFDRCxPQUFPYixNQUFNO0FBQ3ZDO0FBQ0EsU0FBU3ZCLGVBQWVzQyxTQUFTO0lBQzdCLE9BQU8sT0FBT0EsY0FBYyxXQUFXQSxZQUFZQSxVQUFVQyxXQUFXLElBQUlELFVBQVV2QixJQUFJLElBQUk7QUFDbEc7QUFDQSxTQUFTZCxVQUFVdUMsR0FBRztJQUNsQixPQUFPQSxJQUFJQyxRQUFRLElBQUlELElBQUlFLFdBQVc7QUFDMUM7QUFDQSxTQUFTeEMseUJBQXlCMEIsR0FBRztJQUNqQyxNQUFNZSxXQUFXZixJQUFJZ0IsS0FBSyxDQUFDO0lBQzNCLE1BQU1DLGFBQWFGLFFBQVEsQ0FBQyxFQUFFO0lBQzlCLE9BQU9FLFdBQVUsNERBQTREO0lBQzdFLDBDQUEwQztLQUN6Q0MsT0FBTyxDQUFDLE9BQU8sS0FBS0EsT0FBTyxDQUFDLFVBQVUsT0FBUUgsQ0FBQUEsUUFBUSxDQUFDLEVBQUUsR0FBRyxNQUFNQSxTQUFTSSxLQUFLLENBQUMsR0FBR0MsSUFBSSxDQUFDLE9BQU8sRUFBQztBQUN0RztBQUNBLGVBQWU3QyxvQkFBb0I4QyxHQUFHLEVBQUVDLEdBQUc7SUFDdkMsSUFBSUMsSUFBcUMsRUFBRTtRQUN2QyxJQUFJQztRQUNKLElBQUksQ0FBQ0EsaUJBQWlCSCxJQUFJSSxTQUFTLEtBQUssT0FBTyxLQUFLLElBQUlELGVBQWVFLGVBQWUsRUFBRTtZQUNwRixNQUFNQyxVQUFVLE1BQU12RCxlQUFlaUQsT0FBTztZQUM1QyxNQUFNLElBQUlPLE1BQU1EO1FBQ3BCO0lBQ0o7SUFDQSxpREFBaUQ7SUFDakQsTUFBTWYsTUFBTVUsSUFBSVYsR0FBRyxJQUFJVSxJQUFJQSxHQUFHLElBQUlBLElBQUlBLEdBQUcsQ0FBQ1YsR0FBRztJQUM3QyxJQUFJLENBQUNTLElBQUlLLGVBQWUsRUFBRTtRQUN0QixJQUFJSixJQUFJQSxHQUFHLElBQUlBLElBQUlaLFNBQVMsRUFBRTtZQUMxQiwrQkFBK0I7WUFDL0IsT0FBTztnQkFDSG1CLFdBQVcsTUFBTXRELG9CQUFvQitDLElBQUlaLFNBQVMsRUFBRVksSUFBSUEsR0FBRztZQUMvRDtRQUNKO1FBQ0EsT0FBTyxDQUFDO0lBQ1o7SUFDQSxNQUFNUSxRQUFRLE1BQU1ULElBQUlLLGVBQWUsQ0FBQ0o7SUFDeEMsSUFBSVYsT0FBT3ZDLFVBQVV1QyxNQUFNO1FBQ3ZCLE9BQU9rQjtJQUNYO0lBQ0EsSUFBSSxDQUFDQSxPQUFPO1FBQ1IsTUFBTUgsVUFBVSxNQUFNdkQsZUFBZWlELE9BQU8saUVBQWlFUyxRQUFRO1FBQ3JILE1BQU0sSUFBSUYsTUFBTUQ7SUFDcEI7SUFDQSxJQUFJSixJQUFxQyxFQUFFO1FBQ3ZDLElBQUk3RCxPQUFPcUUsSUFBSSxDQUFDRCxPQUFPbkMsTUFBTSxLQUFLLEtBQUssQ0FBQzJCLElBQUlBLEdBQUcsRUFBRTtZQUM3Q1UsUUFBUUMsSUFBSSxDQUFDLEtBQUs3RCxlQUFlaUQsT0FBTztRQUM1QztJQUNKO0lBQ0EsT0FBT1M7QUFDWDtBQUNBLE1BQU10RCxLQUFLLE9BQU8wRCxnQkFBZ0I7QUFDbEMsTUFBTXpELEtBQUtELE1BQU07SUFDYjtJQUNBO0lBQ0E7Q0FDSCxDQUFDMkQsS0FBSyxDQUFDLENBQUNDLFNBQVMsT0FBT0YsV0FBVyxDQUFDRSxPQUFPLEtBQUs7QUFDakQsTUFBTTFELG9CQUFvQmtEO0FBQzFCO0FBQ0EsTUFBTWpELHVCQUF1QmlEO0FBQzdCO0FBQ0EsTUFBTWhELDBCQUEwQmdEO0lBQzVCUyxZQUFZQyxJQUFJLENBQUM7UUFDYixLQUFLO1FBQ0wsSUFBSSxDQUFDQyxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUNwRCxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUN3QyxPQUFPLEdBQUcsa0NBQWtDVztJQUNyRDtBQUNKO0FBQ0EsTUFBTXpELDBCQUEwQitDO0lBQzVCUyxZQUFZQyxJQUFJLEVBQUVYLE9BQU8sQ0FBQztRQUN0QixLQUFLO1FBQ0wsSUFBSSxDQUFDQSxPQUFPLEdBQUcsMENBQTBDVyxPQUFPLE1BQU1YO0lBQzFFO0FBQ0o7QUFDQSxNQUFNN0MsZ0NBQWdDOEM7SUFDbENTLGFBQWE7UUFDVCxLQUFLO1FBQ0wsSUFBSSxDQUFDRSxJQUFJLEdBQUc7UUFDWixJQUFJLENBQUNaLE9BQU8sR0FBRztJQUNuQjtBQUNKO0FBQ0EsU0FBUzVDLGVBQWV5RCxLQUFLO0lBQ3pCLE9BQU9DLEtBQUtDLFNBQVMsQ0FBQztRQUNsQmYsU0FBU2EsTUFBTWIsT0FBTztRQUN0QmdCLE9BQU9ILE1BQU1HLEtBQUs7SUFDdEI7QUFDSixFQUVBLGlDQUFpQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMuanM/ZTdmZiJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIFdFQl9WSVRBTFM6IG51bGwsXG4gICAgZXhlY09uY2U6IG51bGwsXG4gICAgaXNBYnNvbHV0ZVVybDogbnVsbCxcbiAgICBnZXRMb2NhdGlvbk9yaWdpbjogbnVsbCxcbiAgICBnZXRVUkw6IG51bGwsXG4gICAgZ2V0RGlzcGxheU5hbWU6IG51bGwsXG4gICAgaXNSZXNTZW50OiBudWxsLFxuICAgIG5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlczogbnVsbCxcbiAgICBsb2FkR2V0SW5pdGlhbFByb3BzOiBudWxsLFxuICAgIFNQOiBudWxsLFxuICAgIFNUOiBudWxsLFxuICAgIERlY29kZUVycm9yOiBudWxsLFxuICAgIE5vcm1hbGl6ZUVycm9yOiBudWxsLFxuICAgIFBhZ2VOb3RGb3VuZEVycm9yOiBudWxsLFxuICAgIE1pc3NpbmdTdGF0aWNQYWdlOiBudWxsLFxuICAgIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yOiBudWxsLFxuICAgIHN0cmluZ2lmeUVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIFdFQl9WSVRBTFM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gV0VCX1ZJVEFMUztcbiAgICB9LFxuICAgIGV4ZWNPbmNlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4ZWNPbmNlO1xuICAgIH0sXG4gICAgaXNBYnNvbHV0ZVVybDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0Fic29sdXRlVXJsO1xuICAgIH0sXG4gICAgZ2V0TG9jYXRpb25PcmlnaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0TG9jYXRpb25PcmlnaW47XG4gICAgfSxcbiAgICBnZXRVUkw6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0VVJMO1xuICAgIH0sXG4gICAgZ2V0RGlzcGxheU5hbWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzcGxheU5hbWU7XG4gICAgfSxcbiAgICBpc1Jlc1NlbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNSZXNTZW50O1xuICAgIH0sXG4gICAgbm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcztcbiAgICB9LFxuICAgIGxvYWRHZXRJbml0aWFsUHJvcHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbG9hZEdldEluaXRpYWxQcm9wcztcbiAgICB9LFxuICAgIFNQOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNQO1xuICAgIH0sXG4gICAgU1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1Q7XG4gICAgfSxcbiAgICBEZWNvZGVFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBEZWNvZGVFcnJvcjtcbiAgICB9LFxuICAgIE5vcm1hbGl6ZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5vcm1hbGl6ZUVycm9yO1xuICAgIH0sXG4gICAgUGFnZU5vdEZvdW5kRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUGFnZU5vdEZvdW5kRXJyb3I7XG4gICAgfSxcbiAgICBNaXNzaW5nU3RhdGljUGFnZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNaXNzaW5nU3RhdGljUGFnZTtcbiAgICB9LFxuICAgIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yO1xuICAgIH0sXG4gICAgc3RyaW5naWZ5RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5RXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBXRUJfVklUQUxTID0gW1xuICAgIFwiQ0xTXCIsXG4gICAgXCJGQ1BcIixcbiAgICBcIkZJRFwiLFxuICAgIFwiSU5QXCIsXG4gICAgXCJMQ1BcIixcbiAgICBcIlRURkJcIlxuXTtcbmZ1bmN0aW9uIGV4ZWNPbmNlKGZuKSB7XG4gICAgbGV0IHVzZWQgPSBmYWxzZTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgZm9yKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXVzZWQpIHtcbiAgICAgICAgICAgIHVzZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmVzdWx0ID0gZm4oLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xufVxuLy8gU2NoZW1lOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuMVxuLy8gQWJzb2x1dGUgVVJMOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuM1xuY29uc3QgQUJTT0xVVEVfVVJMX1JFR0VYID0gL15bYS16QS1aXVthLXpBLVpcXGQrXFwtLl0qPzovO1xuY29uc3QgaXNBYnNvbHV0ZVVybCA9ICh1cmwpPT5BQlNPTFVURV9VUkxfUkVHRVgudGVzdCh1cmwpO1xuZnVuY3Rpb24gZ2V0TG9jYXRpb25PcmlnaW4oKSB7XG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICByZXR1cm4gcHJvdG9jb2wgKyBcIi8vXCIgKyBob3N0bmFtZSArIChwb3J0ID8gXCI6XCIgKyBwb3J0IDogXCJcIik7XG59XG5mdW5jdGlvbiBnZXRVUkwoKSB7XG4gICAgY29uc3QgeyBocmVmIH0gPSB3aW5kb3cubG9jYXRpb247XG4gICAgY29uc3Qgb3JpZ2luID0gZ2V0TG9jYXRpb25PcmlnaW4oKTtcbiAgICByZXR1cm4gaHJlZi5zdWJzdHJpbmcob3JpZ2luLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBnZXREaXNwbGF5TmFtZShDb21wb25lbnQpIHtcbiAgICByZXR1cm4gdHlwZW9mIENvbXBvbmVudCA9PT0gXCJzdHJpbmdcIiA/IENvbXBvbmVudCA6IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCBcIlVua25vd25cIjtcbn1cbmZ1bmN0aW9uIGlzUmVzU2VudChyZXMpIHtcbiAgICByZXR1cm4gcmVzLmZpbmlzaGVkIHx8IHJlcy5oZWFkZXJzU2VudDtcbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyh1cmwpIHtcbiAgICBjb25zdCB1cmxQYXJ0cyA9IHVybC5zcGxpdChcIj9cIik7XG4gICAgY29uc3QgdXJsTm9RdWVyeSA9IHVybFBhcnRzWzBdO1xuICAgIHJldHVybiB1cmxOb1F1ZXJ5Ly8gZmlyc3Qgd2UgcmVwbGFjZSBhbnkgbm9uLWVuY29kZWQgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkXG4gICAgLy8gdGhlbiBub3JtYWxpemUgcmVwZWF0ZWQgZm9yd2FyZCBzbGFzaGVzXG4gICAgLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpLnJlcGxhY2UoL1xcL1xcLysvZywgXCIvXCIpICsgKHVybFBhcnRzWzFdID8gXCI/XCIgKyB1cmxQYXJ0cy5zbGljZSgxKS5qb2luKFwiP1wiKSA6IFwiXCIpO1xufVxuYXN5bmMgZnVuY3Rpb24gbG9hZEdldEluaXRpYWxQcm9wcyhBcHAsIGN0eCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgdmFyIF9BcHBfcHJvdG90eXBlO1xuICAgICAgICBpZiAoKF9BcHBfcHJvdG90eXBlID0gQXBwLnByb3RvdHlwZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9BcHBfcHJvdG90eXBlLmdldEluaXRpYWxQcm9wcykge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdcIicgKyBnZXREaXNwbGF5TmFtZShBcHApICsgJy5nZXRJbml0aWFsUHJvcHMoKVwiIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kIC0gdmlzaXQgaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZ2V0LWluaXRpYWwtcHJvcHMtYXMtYW4taW5zdGFuY2UtbWV0aG9kIGZvciBtb3JlIGluZm9ybWF0aW9uLic7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gd2hlbiBjYWxsZWQgZnJvbSBfYXBwIGBjdHhgIGlzIG5lc3RlZCBpbiBgY3R4YFxuICAgIGNvbnN0IHJlcyA9IGN0eC5yZXMgfHwgY3R4LmN0eCAmJiBjdHguY3R4LnJlcztcbiAgICBpZiAoIUFwcC5nZXRJbml0aWFsUHJvcHMpIHtcbiAgICAgICAgaWYgKGN0eC5jdHggJiYgY3R4LkNvbXBvbmVudCkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBwYWdlUHJvcHMgZGVmYXVsdFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwYWdlUHJvcHM6IGF3YWl0IGxvYWRHZXRJbml0aWFsUHJvcHMoY3R4LkNvbXBvbmVudCwgY3R4LmN0eClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBwcm9wcyA9IGF3YWl0IEFwcC5nZXRJbml0aWFsUHJvcHMoY3R4KTtcbiAgICBpZiAocmVzICYmIGlzUmVzU2VudChyZXMpKSB7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG4gICAgaWYgKCFwcm9wcykge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gJ1wiJyArIGdldERpc3BsYXlOYW1lKEFwcCkgKyAnLmdldEluaXRpYWxQcm9wcygpXCIgc2hvdWxkIHJlc29sdmUgdG8gYW4gb2JqZWN0LiBCdXQgZm91bmQgXCInICsgcHJvcHMgKyAnXCIgaW5zdGVhZC4nO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGggPT09IDAgJiYgIWN0eC5jdHgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlwiICsgZ2V0RGlzcGxheU5hbWUoQXBwKSArIFwiIHJldHVybmVkIGFuIGVtcHR5IG9iamVjdCBmcm9tIGBnZXRJbml0aWFsUHJvcHNgLiBUaGlzIGRlLW9wdGltaXplcyBhbmQgcHJldmVudHMgYXV0b21hdGljIHN0YXRpYyBvcHRpbWl6YXRpb24uIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2VtcHR5LW9iamVjdC1nZXRJbml0aWFsUHJvcHNcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BzO1xufVxuY29uc3QgU1AgPSB0eXBlb2YgcGVyZm9ybWFuY2UgIT09IFwidW5kZWZpbmVkXCI7XG5jb25zdCBTVCA9IFNQICYmIFtcbiAgICBcIm1hcmtcIixcbiAgICBcIm1lYXN1cmVcIixcbiAgICBcImdldEVudHJpZXNCeU5hbWVcIlxuXS5ldmVyeSgobWV0aG9kKT0+dHlwZW9mIHBlcmZvcm1hbmNlW21ldGhvZF0gPT09IFwiZnVuY3Rpb25cIik7XG5jbGFzcyBEZWNvZGVFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbmNsYXNzIE5vcm1hbGl6ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuY2xhc3MgUGFnZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocGFnZSl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29kZSA9IFwiRU5PRU5UXCI7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUGFnZU5vdEZvdW5kRXJyb3JcIjtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gXCJDYW5ub3QgZmluZCBtb2R1bGUgZm9yIHBhZ2U6IFwiICsgcGFnZTtcbiAgICB9XG59XG5jbGFzcyBNaXNzaW5nU3RhdGljUGFnZSBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihwYWdlLCBtZXNzYWdlKXtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gXCJGYWlsZWQgdG8gbG9hZCBzdGF0aWMgZmlsZSBmb3IgcGFnZTogXCIgKyBwYWdlICsgXCIgXCIgKyBtZXNzYWdlO1xuICAgIH1cbn1cbmNsYXNzIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY29kZSA9IFwiRU5PRU5UXCI7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IFwiQ2Fubm90IGZpbmQgdGhlIG1pZGRsZXdhcmUgbW9kdWxlXCI7XG4gICAgfVxufVxuZnVuY3Rpb24gc3RyaW5naWZ5RXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2tcbiAgICB9KTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwibW9kdWxlIiwiV0VCX1ZJVEFMUyIsImV4ZWNPbmNlIiwiaXNBYnNvbHV0ZVVybCIsImdldExvY2F0aW9uT3JpZ2luIiwiZ2V0VVJMIiwiZ2V0RGlzcGxheU5hbWUiLCJpc1Jlc1NlbnQiLCJub3JtYWxpemVSZXBlYXRlZFNsYXNoZXMiLCJsb2FkR2V0SW5pdGlhbFByb3BzIiwiU1AiLCJTVCIsIkRlY29kZUVycm9yIiwiTm9ybWFsaXplRXJyb3IiLCJQYWdlTm90Rm91bmRFcnJvciIsIk1pc3NpbmdTdGF0aWNQYWdlIiwiTWlkZGxld2FyZU5vdEZvdW5kRXJyb3IiLCJzdHJpbmdpZnlFcnJvciIsIl9leHBvcnQiLCJ0YXJnZXQiLCJhbGwiLCJuYW1lIiwiZW51bWVyYWJsZSIsImdldCIsImZuIiwidXNlZCIsInJlc3VsdCIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiQUJTT0xVVEVfVVJMX1JFR0VYIiwidXJsIiwidGVzdCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwb3J0Iiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwib3JpZ2luIiwic3Vic3RyaW5nIiwiQ29tcG9uZW50IiwiZGlzcGxheU5hbWUiLCJyZXMiLCJmaW5pc2hlZCIsImhlYWRlcnNTZW50IiwidXJsUGFydHMiLCJzcGxpdCIsInVybE5vUXVlcnkiLCJyZXBsYWNlIiwic2xpY2UiLCJqb2luIiwiQXBwIiwiY3R4IiwicHJvY2VzcyIsIl9BcHBfcHJvdG90eXBlIiwicHJvdG90eXBlIiwiZ2V0SW5pdGlhbFByb3BzIiwibWVzc2FnZSIsIkVycm9yIiwicGFnZVByb3BzIiwicHJvcHMiLCJrZXlzIiwiY29uc29sZSIsIndhcm4iLCJwZXJmb3JtYW5jZSIsImV2ZXJ5IiwibWV0aG9kIiwiY29uc3RydWN0b3IiLCJwYWdlIiwiY29kZSIsImVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YWNrIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/utils.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/shared/lib/utils/warn-once.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/shared/lib/utils/warn-once.js ***! + \**************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"warnOnce\", ({\n enumerable: true,\n get: function() {\n return warnOnce;\n }\n}));\nlet warnOnce = (_)=>{};\nif (true) {\n const warnings = new Set();\n warnOnce = (msg)=>{\n if (!warnings.has(msg)) {\n console.warn(msg);\n }\n warnings.add(msg);\n };\n} //# sourceMappingURL=warn-once.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NoYXJlZC9saWIvdXRpbHMvd2Fybi1vbmNlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2JBLDhDQUE2QztJQUN6Q0csT0FBTztBQUNYLENBQUMsRUFBQztBQUNGSCw0Q0FBMkM7SUFDdkNJLFlBQVk7SUFDWkMsS0FBSztRQUNELE9BQU9DO0lBQ1g7QUFDSixDQUFDLEVBQUM7QUFDRixJQUFJQSxXQUFXLENBQUNDLEtBQUs7QUFDckIsSUFBSUMsSUFBcUMsRUFBRTtJQUN2QyxNQUFNQyxXQUFXLElBQUlDO0lBQ3JCSixXQUFXLENBQUNLO1FBQ1IsSUFBSSxDQUFDRixTQUFTRyxHQUFHLENBQUNELE1BQU07WUFDcEJFLFFBQVFDLElBQUksQ0FBQ0g7UUFDakI7UUFDQUYsU0FBU00sR0FBRyxDQUFDSjtJQUNqQjtBQUNKLEVBRUEscUNBQXFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UuanM/NzM5NSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndhcm5PbmNlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB3YXJuT25jZTtcbiAgICB9XG59KTtcbmxldCB3YXJuT25jZSA9IChfKT0+e307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgY29uc3Qgd2FybmluZ3MgPSBuZXcgU2V0KCk7XG4gICAgd2Fybk9uY2UgPSAobXNnKT0+e1xuICAgICAgICBpZiAoIXdhcm5pbmdzLmhhcyhtc2cpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4obXNnKTtcbiAgICAgICAgfVxuICAgICAgICB3YXJuaW5ncy5hZGQobXNnKTtcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD13YXJuLW9uY2UuanMubWFwIl0sIm5hbWVzIjpbIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwiZW51bWVyYWJsZSIsImdldCIsIndhcm5PbmNlIiwiXyIsInByb2Nlc3MiLCJ3YXJuaW5ncyIsIlNldCIsIm1zZyIsImhhcyIsImNvbnNvbGUiLCJ3YXJuIiwiYWRkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/shared/lib/utils/warn-once.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/anser/index.js": +/*!********************************************************!*\ + !*** ./node_modules/next/dist/compiled/anser/index.js ***! + \********************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";var e={211:e=>{var r=function(){function defineProperties(e,r){for(var n=0;n<r.length;n++){var s=r[n];s.enumerable=s.enumerable||false;s.configurable=true;if(\"value\"in s)s.writable=true;Object.defineProperty(e,s.key,s)}}return function(e,r,n){if(r)defineProperties(e.prototype,r);if(n)defineProperties(e,n);return e}}();function _classCallCheck(e,r){if(!(e instanceof r)){throw new TypeError(\"Cannot call a class as a function\")}}var n=[[{color:\"0, 0, 0\",class:\"ansi-black\"},{color:\"187, 0, 0\",class:\"ansi-red\"},{color:\"0, 187, 0\",class:\"ansi-green\"},{color:\"187, 187, 0\",class:\"ansi-yellow\"},{color:\"0, 0, 187\",class:\"ansi-blue\"},{color:\"187, 0, 187\",class:\"ansi-magenta\"},{color:\"0, 187, 187\",class:\"ansi-cyan\"},{color:\"255,255,255\",class:\"ansi-white\"}],[{color:\"85, 85, 85\",class:\"ansi-bright-black\"},{color:\"255, 85, 85\",class:\"ansi-bright-red\"},{color:\"0, 255, 0\",class:\"ansi-bright-green\"},{color:\"255, 255, 85\",class:\"ansi-bright-yellow\"},{color:\"85, 85, 255\",class:\"ansi-bright-blue\"},{color:\"255, 85, 255\",class:\"ansi-bright-magenta\"},{color:\"85, 255, 255\",class:\"ansi-bright-cyan\"},{color:\"255, 255, 255\",class:\"ansi-bright-white\"}]];var s=function(){r(Anser,null,[{key:\"escapeForHtml\",value:function escapeForHtml(e){return(new Anser).escapeForHtml(e)}},{key:\"linkify\",value:function linkify(e){return(new Anser).linkify(e)}},{key:\"ansiToHtml\",value:function ansiToHtml(e,r){return(new Anser).ansiToHtml(e,r)}},{key:\"ansiToJson\",value:function ansiToJson(e,r){return(new Anser).ansiToJson(e,r)}},{key:\"ansiToText\",value:function ansiToText(e){return(new Anser).ansiToText(e)}}]);function Anser(){_classCallCheck(this,Anser);this.fg=this.bg=this.fg_truecolor=this.bg_truecolor=null;this.bright=0}r(Anser,[{key:\"setupPalette\",value:function setupPalette(){this.PALETTE_COLORS=[];for(var e=0;e<2;++e){for(var r=0;r<8;++r){this.PALETTE_COLORS.push(n[e][r].color)}}var s=[0,95,135,175,215,255];var i=function format(e,r,n){return s[e]+\", \"+s[r]+\", \"+s[n]};var t=void 0,o=void 0,a=void 0;for(var l=0;l<6;++l){for(var c=0;c<6;++c){for(var u=0;u<6;++u){this.PALETTE_COLORS.push(i(l,c,u))}}}var f=8;for(var h=0;h<24;++h,f+=10){this.PALETTE_COLORS.push(i(f,f,f))}}},{key:\"escapeForHtml\",value:function escapeForHtml(e){return e.replace(/[&<>]/gm,(function(e){return e==\"&\"?\"&\":e==\"<\"?\"<\":e==\">\"?\">\":\"\"}))}},{key:\"linkify\",value:function linkify(e){return e.replace(/(https?:\\/\\/[^\\s]+)/gm,(function(e){return'<a href=\"'+e+'\">'+e+\"</a>\"}))}},{key:\"ansiToHtml\",value:function ansiToHtml(e,r){return this.process(e,r,true)}},{key:\"ansiToJson\",value:function ansiToJson(e,r){r=r||{};r.json=true;r.clearLine=false;return this.process(e,r,true)}},{key:\"ansiToText\",value:function ansiToText(e){return this.process(e,{},false)}},{key:\"process\",value:function process(e,r,n){var s=this;var i=this;var t=e.split(/\\033\\[/);var o=t.shift();if(r===undefined||r===null){r={}}r.clearLine=/\\r/.test(e);var a=t.map((function(e){return s.processChunk(e,r,n)}));if(r&&r.json){var l=i.processChunkJson(\"\");l.content=o;l.clearLine=r.clearLine;a.unshift(l);if(r.remove_empty){a=a.filter((function(e){return!e.isEmpty()}))}return a}else{a.unshift(o)}return a.join(\"\")}},{key:\"processChunkJson\",value:function processChunkJson(e,r,s){r=typeof r==\"undefined\"?{}:r;var i=r.use_classes=typeof r.use_classes!=\"undefined\"&&r.use_classes;var t=r.key=i?\"class\":\"color\";var o={content:e,fg:null,bg:null,fg_truecolor:null,bg_truecolor:null,clearLine:r.clearLine,decoration:null,was_processed:false,isEmpty:function isEmpty(){return!o.content}};var a=e.match(/^([!\\x3c-\\x3f]*)([\\d;]*)([\\x20-\\x2c]*[\\x40-\\x7e])([\\s\\S]*)/m);if(!a)return o;var l=o.content=a[4];var c=a[2].split(\";\");if(a[1]!==\"\"||a[3]!==\"m\"){return o}if(!s){return o}var u=this;u.decoration=null;while(c.length>0){var f=c.shift();var h=parseInt(f);if(isNaN(h)||h===0){u.fg=u.bg=u.decoration=null}else if(h===1){u.decoration=\"bold\"}else if(h===2){u.decoration=\"dim\"}else if(h==3){u.decoration=\"italic\"}else if(h==4){u.decoration=\"underline\"}else if(h==5){u.decoration=\"blink\"}else if(h===7){u.decoration=\"reverse\"}else if(h===8){u.decoration=\"hidden\"}else if(h===9){u.decoration=\"strikethrough\"}else if(h==39){u.fg=null}else if(h==49){u.bg=null}else if(h>=30&&h<38){u.fg=n[0][h%10][t]}else if(h>=90&&h<98){u.fg=n[1][h%10][t]}else if(h>=40&&h<48){u.bg=n[0][h%10][t]}else if(h>=100&&h<108){u.bg=n[1][h%10][t]}else if(h===38||h===48){var p=h===38;if(c.length>=1){var g=c.shift();if(g===\"5\"&&c.length>=1){var v=parseInt(c.shift());if(v>=0&&v<=255){if(!i){if(!this.PALETTE_COLORS){u.setupPalette()}if(p){u.fg=this.PALETTE_COLORS[v]}else{u.bg=this.PALETTE_COLORS[v]}}else{var d=v>=16?\"ansi-palette-\"+v:n[v>7?1:0][v%8][\"class\"];if(p){u.fg=d}else{u.bg=d}}}}else if(g===\"2\"&&c.length>=3){var _=parseInt(c.shift());var b=parseInt(c.shift());var y=parseInt(c.shift());if(_>=0&&_<=255&&b>=0&&b<=255&&y>=0&&y<=255){var k=_+\", \"+b+\", \"+y;if(!i){if(p){u.fg=k}else{u.bg=k}}else{if(p){u.fg=\"ansi-truecolor\";u.fg_truecolor=k}else{u.bg=\"ansi-truecolor\";u.bg_truecolor=k}}}}}}}if(u.fg===null&&u.bg===null&&u.decoration===null){return o}else{var T=[];var m=[];var w={};o.fg=u.fg;o.bg=u.bg;o.fg_truecolor=u.fg_truecolor;o.bg_truecolor=u.bg_truecolor;o.decoration=u.decoration;o.was_processed=true;return o}}},{key:\"processChunk\",value:function processChunk(e,r,n){var s=this;var i=this;r=r||{};var t=this.processChunkJson(e,r,n);if(r.json){return t}if(t.isEmpty()){return\"\"}if(!t.was_processed){return t.content}var o=r.use_classes;var a=[];var l=[];var c={};var u=function render_data(e){var r=[];var n=void 0;for(n in e){if(e.hasOwnProperty(n)){r.push(\"data-\"+n+'=\"'+s.escapeForHtml(e[n])+'\"')}}return r.length>0?\" \"+r.join(\" \"):\"\"};if(t.fg){if(o){l.push(t.fg+\"-fg\");if(t.fg_truecolor!==null){c[\"ansi-truecolor-fg\"]=t.fg_truecolor;t.fg_truecolor=null}}else{a.push(\"color:rgb(\"+t.fg+\")\")}}if(t.bg){if(o){l.push(t.bg+\"-bg\");if(t.bg_truecolor!==null){c[\"ansi-truecolor-bg\"]=t.bg_truecolor;t.bg_truecolor=null}}else{a.push(\"background-color:rgb(\"+t.bg+\")\")}}if(t.decoration){if(o){l.push(\"ansi-\"+t.decoration)}else if(t.decoration===\"bold\"){a.push(\"font-weight:bold\")}else if(t.decoration===\"dim\"){a.push(\"opacity:0.5\")}else if(t.decoration===\"italic\"){a.push(\"font-style:italic\")}else if(t.decoration===\"reverse\"){a.push(\"filter:invert(100%)\")}else if(t.decoration===\"hidden\"){a.push(\"visibility:hidden\")}else if(t.decoration===\"strikethrough\"){a.push(\"text-decoration:line-through\")}else{a.push(\"text-decoration:\"+t.decoration)}}if(o){return'<span class=\"'+l.join(\" \")+'\"'+u(c)+\">\"+t.content+\"</span>\"}else{return'<span style=\"'+a.join(\";\")+'\"'+u(c)+\">\"+t.content+\"</span>\"}}}]);return Anser}();e.exports=s}};var r={};function __nccwpck_require__(n){var s=r[n];if(s!==undefined){return s.exports}var i=r[n]={exports:{}};var t=true;try{e[n](i,i.exports,__nccwpck_require__);t=false}finally{if(t)delete r[n]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n=__nccwpck_require__(211);module.exports=n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Fuc2VyL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLGFBQWEsT0FBTyxRQUFRLGlCQUFpQiwrQkFBK0IsWUFBWSxXQUFXLEtBQUssV0FBVyxpQ0FBaUMsb0JBQW9CLCtCQUErQixrQ0FBa0MsdUJBQXVCLHFDQUFxQywyQkFBMkIsVUFBVSxHQUFHLDhCQUE4QixzQkFBc0IsMERBQTBELFNBQVMsbUNBQW1DLEVBQUUsbUNBQW1DLEVBQUUscUNBQXFDLEVBQUUsd0NBQXdDLEVBQUUsb0NBQW9DLEVBQUUseUNBQXlDLEVBQUUsc0NBQXNDLEVBQUUsdUNBQXVDLElBQUksNkNBQTZDLEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsZ0RBQWdELEVBQUUsNkNBQTZDLEVBQUUsaURBQWlELEVBQUUsOENBQThDLEVBQUUsZ0RBQWdELEdBQUcsaUJBQWlCLGVBQWUsb0RBQW9ELG9DQUFvQyxFQUFFLHdDQUF3Qyw4QkFBOEIsRUFBRSxnREFBZ0QsbUNBQW1DLEVBQUUsZ0RBQWdELG1DQUFtQyxFQUFFLDhDQUE4QyxpQ0FBaUMsR0FBRyxpQkFBaUIsNEJBQTRCLHlEQUF5RCxjQUFjLFVBQVUsaURBQWlELHVCQUF1QixZQUFZLElBQUksS0FBSyxZQUFZLElBQUksS0FBSyx5Q0FBeUMsNkJBQTZCLDZCQUE2QixpQ0FBaUMsK0JBQStCLFlBQVksSUFBSSxLQUFLLFlBQVksSUFBSSxLQUFLLFlBQVksSUFBSSxLQUFLLHFDQUFxQyxRQUFRLFlBQVksS0FBSyxXQUFXLHFDQUFxQyxFQUFFLG9EQUFvRCx3Q0FBd0Msb0JBQW9CLGNBQWMsY0FBYyxLQUFLLElBQUksRUFBRSx3Q0FBd0Msc0RBQXNELGtDQUFrQyxJQUFJLEVBQUUsZ0RBQWdELCtCQUErQixFQUFFLGdEQUFnRCxRQUFRLFlBQVksa0JBQWtCLCtCQUErQixFQUFFLDhDQUE4Qyx3QkFBd0IsU0FBUyxFQUFFLDRDQUE0QyxXQUFXLFdBQVcsd0JBQXdCLGdCQUFnQiw0QkFBNEIsS0FBSyx5QkFBeUIseUJBQXlCLDZCQUE2QixHQUFHLGNBQWMsNkJBQTZCLFlBQVksd0JBQXdCLGFBQWEsbUJBQW1CLHdCQUF3QixtQkFBbUIsR0FBRyxTQUFTLEtBQUssYUFBYSxtQkFBbUIsRUFBRSw4REFBOEQsMEJBQTBCLEdBQUcscUVBQXFFLDhCQUE4QixPQUFPLG1KQUFtSixtQkFBbUIsb0NBQW9DLHlDQUF5QyxlQUFlLHFCQUFxQixtQkFBbUIsR0FBRywwQkFBMEIsU0FBUyxPQUFPLFNBQVMsV0FBVyxrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isb0JBQW9CLDRCQUE0QixlQUFlLG9CQUFvQixlQUFlLG1CQUFtQixjQUFjLHNCQUFzQixjQUFjLHlCQUF5QixjQUFjLHFCQUFxQixlQUFlLHVCQUF1QixlQUFlLHNCQUFzQixlQUFlLDZCQUE2QixlQUFlLFVBQVUsZUFBZSxVQUFVLHFCQUFxQixtQkFBbUIscUJBQXFCLG1CQUFtQixxQkFBcUIsbUJBQW1CLHVCQUF1QixtQkFBbUIsd0JBQXdCLGFBQWEsZ0JBQWdCLGdCQUFnQix5QkFBeUIsMEJBQTBCLGlCQUFpQixPQUFPLHlCQUF5QixpQkFBaUIsTUFBTSw0QkFBNEIsS0FBSyw2QkFBNkIsS0FBSyx1REFBdUQsTUFBTSxPQUFPLEtBQUssVUFBVSw4QkFBOEIsMEJBQTBCLDBCQUEwQiwwQkFBMEIsNkNBQTZDLHNCQUFzQixPQUFPLE1BQU0sT0FBTyxLQUFLLFFBQVEsS0FBSyxNQUFNLHNCQUFzQixpQkFBaUIsS0FBSyxzQkFBc0IsdUJBQXVCLGtEQUFrRCxTQUFTLEtBQUssU0FBUyxTQUFTLFNBQVMsVUFBVSxVQUFVLDhCQUE4Qiw4QkFBOEIsMEJBQTBCLHFCQUFxQixXQUFXLEVBQUUsc0RBQXNELFdBQVcsV0FBVyxRQUFRLG1DQUFtQyxXQUFXLFNBQVMsZ0JBQWdCLFNBQVMscUJBQXFCLGlCQUFpQixvQkFBb0IsU0FBUyxTQUFTLFNBQVMsOEJBQThCLFNBQVMsYUFBYSxZQUFZLHdCQUF3QixrREFBa0Qsc0NBQXNDLFNBQVMsTUFBTSxtQkFBbUIsMEJBQTBCLHNDQUFzQyxxQkFBcUIsS0FBSywrQkFBK0IsU0FBUyxNQUFNLG1CQUFtQiwwQkFBMEIsc0NBQXNDLHFCQUFxQixLQUFLLDBDQUEwQyxpQkFBaUIsTUFBTSw2QkFBNkIsK0JBQStCLDJCQUEyQiw4QkFBOEIsc0JBQXNCLGlDQUFpQyw0QkFBNEIsa0NBQWtDLDhCQUE4QixpQ0FBaUMsNEJBQTRCLHdDQUF3Qyx1Q0FBdUMsS0FBSyx5Q0FBeUMsTUFBTSxtRUFBbUUsS0FBSywrQkFBK0Isc0NBQXNDLEdBQUcsYUFBYSxHQUFHLGNBQWMsU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUksc0NBQXNDLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLG1FQUFtRSxTQUFTLEtBQUssK0JBQStCLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Fuc2VyL2luZGV4LmpzPzQyZGQiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9ezIxMTplPT57dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBzPXJbbl07cy5lbnVtZXJhYmxlPXMuZW51bWVyYWJsZXx8ZmFsc2U7cy5jb25maWd1cmFibGU9dHJ1ZTtpZihcInZhbHVlXCJpbiBzKXMud3JpdGFibGU9dHJ1ZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxzLmtleSxzKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtpZihyKWRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUscik7aWYobilkZWZpbmVQcm9wZXJ0aWVzKGUsbik7cmV0dXJuIGV9fSgpO2Z1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhlLHIpe2lmKCEoZSBpbnN0YW5jZW9mIHIpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfX12YXIgbj1bW3tjb2xvcjpcIjAsIDAsIDBcIixjbGFzczpcImFuc2ktYmxhY2tcIn0se2NvbG9yOlwiMTg3LCAwLCAwXCIsY2xhc3M6XCJhbnNpLXJlZFwifSx7Y29sb3I6XCIwLCAxODcsIDBcIixjbGFzczpcImFuc2ktZ3JlZW5cIn0se2NvbG9yOlwiMTg3LCAxODcsIDBcIixjbGFzczpcImFuc2kteWVsbG93XCJ9LHtjb2xvcjpcIjAsIDAsIDE4N1wiLGNsYXNzOlwiYW5zaS1ibHVlXCJ9LHtjb2xvcjpcIjE4NywgMCwgMTg3XCIsY2xhc3M6XCJhbnNpLW1hZ2VudGFcIn0se2NvbG9yOlwiMCwgMTg3LCAxODdcIixjbGFzczpcImFuc2ktY3lhblwifSx7Y29sb3I6XCIyNTUsMjU1LDI1NVwiLGNsYXNzOlwiYW5zaS13aGl0ZVwifV0sW3tjb2xvcjpcIjg1LCA4NSwgODVcIixjbGFzczpcImFuc2ktYnJpZ2h0LWJsYWNrXCJ9LHtjb2xvcjpcIjI1NSwgODUsIDg1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1yZWRcIn0se2NvbG9yOlwiMCwgMjU1LCAwXCIsY2xhc3M6XCJhbnNpLWJyaWdodC1ncmVlblwifSx7Y29sb3I6XCIyNTUsIDI1NSwgODVcIixjbGFzczpcImFuc2ktYnJpZ2h0LXllbGxvd1wifSx7Y29sb3I6XCI4NSwgODUsIDI1NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtYmx1ZVwifSx7Y29sb3I6XCIyNTUsIDg1LCAyNTVcIixjbGFzczpcImFuc2ktYnJpZ2h0LW1hZ2VudGFcIn0se2NvbG9yOlwiODUsIDI1NSwgMjU1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1jeWFuXCJ9LHtjb2xvcjpcIjI1NSwgMjU1LCAyNTVcIixjbGFzczpcImFuc2ktYnJpZ2h0LXdoaXRlXCJ9XV07dmFyIHM9ZnVuY3Rpb24oKXtyKEFuc2VyLG51bGwsW3trZXk6XCJlc2NhcGVGb3JIdG1sXCIsdmFsdWU6ZnVuY3Rpb24gZXNjYXBlRm9ySHRtbChlKXtyZXR1cm4obmV3IEFuc2VyKS5lc2NhcGVGb3JIdG1sKGUpfX0se2tleTpcImxpbmtpZnlcIix2YWx1ZTpmdW5jdGlvbiBsaW5raWZ5KGUpe3JldHVybihuZXcgQW5zZXIpLmxpbmtpZnkoZSl9fSx7a2V5OlwiYW5zaVRvSHRtbFwiLHZhbHVlOmZ1bmN0aW9uIGFuc2lUb0h0bWwoZSxyKXtyZXR1cm4obmV3IEFuc2VyKS5hbnNpVG9IdG1sKGUscil9fSx7a2V5OlwiYW5zaVRvSnNvblwiLHZhbHVlOmZ1bmN0aW9uIGFuc2lUb0pzb24oZSxyKXtyZXR1cm4obmV3IEFuc2VyKS5hbnNpVG9Kc29uKGUscil9fSx7a2V5OlwiYW5zaVRvVGV4dFwiLHZhbHVlOmZ1bmN0aW9uIGFuc2lUb1RleHQoZSl7cmV0dXJuKG5ldyBBbnNlcikuYW5zaVRvVGV4dChlKX19XSk7ZnVuY3Rpb24gQW5zZXIoKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxBbnNlcik7dGhpcy5mZz10aGlzLmJnPXRoaXMuZmdfdHJ1ZWNvbG9yPXRoaXMuYmdfdHJ1ZWNvbG9yPW51bGw7dGhpcy5icmlnaHQ9MH1yKEFuc2VyLFt7a2V5Olwic2V0dXBQYWxldHRlXCIsdmFsdWU6ZnVuY3Rpb24gc2V0dXBQYWxldHRlKCl7dGhpcy5QQUxFVFRFX0NPTE9SUz1bXTtmb3IodmFyIGU9MDtlPDI7KytlKXtmb3IodmFyIHI9MDtyPDg7KytyKXt0aGlzLlBBTEVUVEVfQ09MT1JTLnB1c2gobltlXVtyXS5jb2xvcil9fXZhciBzPVswLDk1LDEzNSwxNzUsMjE1LDI1NV07dmFyIGk9ZnVuY3Rpb24gZm9ybWF0KGUscixuKXtyZXR1cm4gc1tlXStcIiwgXCIrc1tyXStcIiwgXCIrc1tuXX07dmFyIHQ9dm9pZCAwLG89dm9pZCAwLGE9dm9pZCAwO2Zvcih2YXIgbD0wO2w8NjsrK2wpe2Zvcih2YXIgYz0wO2M8NjsrK2Mpe2Zvcih2YXIgdT0wO3U8NjsrK3Upe3RoaXMuUEFMRVRURV9DT0xPUlMucHVzaChpKGwsYyx1KSl9fX12YXIgZj04O2Zvcih2YXIgaD0wO2g8MjQ7KytoLGYrPTEwKXt0aGlzLlBBTEVUVEVfQ09MT1JTLnB1c2goaShmLGYsZikpfX19LHtrZXk6XCJlc2NhcGVGb3JIdG1sXCIsdmFsdWU6ZnVuY3Rpb24gZXNjYXBlRm9ySHRtbChlKXtyZXR1cm4gZS5yZXBsYWNlKC9bJjw+XS9nbSwoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PVwiJlwiP1wiJmFtcDtcIjplPT1cIjxcIj9cIiZsdDtcIjplPT1cIj5cIj9cIiZndDtcIjpcIlwifSkpfX0se2tleTpcImxpbmtpZnlcIix2YWx1ZTpmdW5jdGlvbiBsaW5raWZ5KGUpe3JldHVybiBlLnJlcGxhY2UoLyhodHRwcz86XFwvXFwvW15cXHNdKykvZ20sKGZ1bmN0aW9uKGUpe3JldHVybic8YSBocmVmPVwiJytlKydcIj4nK2UrXCI8L2E+XCJ9KSl9fSx7a2V5OlwiYW5zaVRvSHRtbFwiLHZhbHVlOmZ1bmN0aW9uIGFuc2lUb0h0bWwoZSxyKXtyZXR1cm4gdGhpcy5wcm9jZXNzKGUscix0cnVlKX19LHtrZXk6XCJhbnNpVG9Kc29uXCIsdmFsdWU6ZnVuY3Rpb24gYW5zaVRvSnNvbihlLHIpe3I9cnx8e307ci5qc29uPXRydWU7ci5jbGVhckxpbmU9ZmFsc2U7cmV0dXJuIHRoaXMucHJvY2VzcyhlLHIsdHJ1ZSl9fSx7a2V5OlwiYW5zaVRvVGV4dFwiLHZhbHVlOmZ1bmN0aW9uIGFuc2lUb1RleHQoZSl7cmV0dXJuIHRoaXMucHJvY2VzcyhlLHt9LGZhbHNlKX19LHtrZXk6XCJwcm9jZXNzXCIsdmFsdWU6ZnVuY3Rpb24gcHJvY2VzcyhlLHIsbil7dmFyIHM9dGhpczt2YXIgaT10aGlzO3ZhciB0PWUuc3BsaXQoL1xcMDMzXFxbLyk7dmFyIG89dC5zaGlmdCgpO2lmKHI9PT11bmRlZmluZWR8fHI9PT1udWxsKXtyPXt9fXIuY2xlYXJMaW5lPS9cXHIvLnRlc3QoZSk7dmFyIGE9dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBzLnByb2Nlc3NDaHVuayhlLHIsbil9KSk7aWYociYmci5qc29uKXt2YXIgbD1pLnByb2Nlc3NDaHVua0pzb24oXCJcIik7bC5jb250ZW50PW87bC5jbGVhckxpbmU9ci5jbGVhckxpbmU7YS51bnNoaWZ0KGwpO2lmKHIucmVtb3ZlX2VtcHR5KXthPWEuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5pc0VtcHR5KCl9KSl9cmV0dXJuIGF9ZWxzZXthLnVuc2hpZnQobyl9cmV0dXJuIGEuam9pbihcIlwiKX19LHtrZXk6XCJwcm9jZXNzQ2h1bmtKc29uXCIsdmFsdWU6ZnVuY3Rpb24gcHJvY2Vzc0NodW5rSnNvbihlLHIscyl7cj10eXBlb2Ygcj09XCJ1bmRlZmluZWRcIj97fTpyO3ZhciBpPXIudXNlX2NsYXNzZXM9dHlwZW9mIHIudXNlX2NsYXNzZXMhPVwidW5kZWZpbmVkXCImJnIudXNlX2NsYXNzZXM7dmFyIHQ9ci5rZXk9aT9cImNsYXNzXCI6XCJjb2xvclwiO3ZhciBvPXtjb250ZW50OmUsZmc6bnVsbCxiZzpudWxsLGZnX3RydWVjb2xvcjpudWxsLGJnX3RydWVjb2xvcjpudWxsLGNsZWFyTGluZTpyLmNsZWFyTGluZSxkZWNvcmF0aW9uOm51bGwsd2FzX3Byb2Nlc3NlZDpmYWxzZSxpc0VtcHR5OmZ1bmN0aW9uIGlzRW1wdHkoKXtyZXR1cm4hby5jb250ZW50fX07dmFyIGE9ZS5tYXRjaCgvXihbIVxceDNjLVxceDNmXSopKFtcXGQ7XSopKFtcXHgyMC1cXHgyY10qW1xceDQwLVxceDdlXSkoW1xcc1xcU10qKS9tKTtpZighYSlyZXR1cm4gbzt2YXIgbD1vLmNvbnRlbnQ9YVs0XTt2YXIgYz1hWzJdLnNwbGl0KFwiO1wiKTtpZihhWzFdIT09XCJcInx8YVszXSE9PVwibVwiKXtyZXR1cm4gb31pZighcyl7cmV0dXJuIG99dmFyIHU9dGhpczt1LmRlY29yYXRpb249bnVsbDt3aGlsZShjLmxlbmd0aD4wKXt2YXIgZj1jLnNoaWZ0KCk7dmFyIGg9cGFyc2VJbnQoZik7aWYoaXNOYU4oaCl8fGg9PT0wKXt1LmZnPXUuYmc9dS5kZWNvcmF0aW9uPW51bGx9ZWxzZSBpZihoPT09MSl7dS5kZWNvcmF0aW9uPVwiYm9sZFwifWVsc2UgaWYoaD09PTIpe3UuZGVjb3JhdGlvbj1cImRpbVwifWVsc2UgaWYoaD09Myl7dS5kZWNvcmF0aW9uPVwiaXRhbGljXCJ9ZWxzZSBpZihoPT00KXt1LmRlY29yYXRpb249XCJ1bmRlcmxpbmVcIn1lbHNlIGlmKGg9PTUpe3UuZGVjb3JhdGlvbj1cImJsaW5rXCJ9ZWxzZSBpZihoPT09Nyl7dS5kZWNvcmF0aW9uPVwicmV2ZXJzZVwifWVsc2UgaWYoaD09PTgpe3UuZGVjb3JhdGlvbj1cImhpZGRlblwifWVsc2UgaWYoaD09PTkpe3UuZGVjb3JhdGlvbj1cInN0cmlrZXRocm91Z2hcIn1lbHNlIGlmKGg9PTM5KXt1LmZnPW51bGx9ZWxzZSBpZihoPT00OSl7dS5iZz1udWxsfWVsc2UgaWYoaD49MzAmJmg8Mzgpe3UuZmc9blswXVtoJTEwXVt0XX1lbHNlIGlmKGg+PTkwJiZoPDk4KXt1LmZnPW5bMV1baCUxMF1bdF19ZWxzZSBpZihoPj00MCYmaDw0OCl7dS5iZz1uWzBdW2glMTBdW3RdfWVsc2UgaWYoaD49MTAwJiZoPDEwOCl7dS5iZz1uWzFdW2glMTBdW3RdfWVsc2UgaWYoaD09PTM4fHxoPT09NDgpe3ZhciBwPWg9PT0zODtpZihjLmxlbmd0aD49MSl7dmFyIGc9Yy5zaGlmdCgpO2lmKGc9PT1cIjVcIiYmYy5sZW5ndGg+PTEpe3ZhciB2PXBhcnNlSW50KGMuc2hpZnQoKSk7aWYodj49MCYmdjw9MjU1KXtpZighaSl7aWYoIXRoaXMuUEFMRVRURV9DT0xPUlMpe3Uuc2V0dXBQYWxldHRlKCl9aWYocCl7dS5mZz10aGlzLlBBTEVUVEVfQ09MT1JTW3ZdfWVsc2V7dS5iZz10aGlzLlBBTEVUVEVfQ09MT1JTW3ZdfX1lbHNle3ZhciBkPXY+PTE2P1wiYW5zaS1wYWxldHRlLVwiK3Y6blt2Pjc/MTowXVt2JThdW1wiY2xhc3NcIl07aWYocCl7dS5mZz1kfWVsc2V7dS5iZz1kfX19fWVsc2UgaWYoZz09PVwiMlwiJiZjLmxlbmd0aD49Myl7dmFyIF89cGFyc2VJbnQoYy5zaGlmdCgpKTt2YXIgYj1wYXJzZUludChjLnNoaWZ0KCkpO3ZhciB5PXBhcnNlSW50KGMuc2hpZnQoKSk7aWYoXz49MCYmXzw9MjU1JiZiPj0wJiZiPD0yNTUmJnk+PTAmJnk8PTI1NSl7dmFyIGs9XytcIiwgXCIrYitcIiwgXCIreTtpZighaSl7aWYocCl7dS5mZz1rfWVsc2V7dS5iZz1rfX1lbHNle2lmKHApe3UuZmc9XCJhbnNpLXRydWVjb2xvclwiO3UuZmdfdHJ1ZWNvbG9yPWt9ZWxzZXt1LmJnPVwiYW5zaS10cnVlY29sb3JcIjt1LmJnX3RydWVjb2xvcj1rfX19fX19fWlmKHUuZmc9PT1udWxsJiZ1LmJnPT09bnVsbCYmdS5kZWNvcmF0aW9uPT09bnVsbCl7cmV0dXJuIG99ZWxzZXt2YXIgVD1bXTt2YXIgbT1bXTt2YXIgdz17fTtvLmZnPXUuZmc7by5iZz11LmJnO28uZmdfdHJ1ZWNvbG9yPXUuZmdfdHJ1ZWNvbG9yO28uYmdfdHJ1ZWNvbG9yPXUuYmdfdHJ1ZWNvbG9yO28uZGVjb3JhdGlvbj11LmRlY29yYXRpb247by53YXNfcHJvY2Vzc2VkPXRydWU7cmV0dXJuIG99fX0se2tleTpcInByb2Nlc3NDaHVua1wiLHZhbHVlOmZ1bmN0aW9uIHByb2Nlc3NDaHVuayhlLHIsbil7dmFyIHM9dGhpczt2YXIgaT10aGlzO3I9cnx8e307dmFyIHQ9dGhpcy5wcm9jZXNzQ2h1bmtKc29uKGUscixuKTtpZihyLmpzb24pe3JldHVybiB0fWlmKHQuaXNFbXB0eSgpKXtyZXR1cm5cIlwifWlmKCF0Lndhc19wcm9jZXNzZWQpe3JldHVybiB0LmNvbnRlbnR9dmFyIG89ci51c2VfY2xhc3Nlczt2YXIgYT1bXTt2YXIgbD1bXTt2YXIgYz17fTt2YXIgdT1mdW5jdGlvbiByZW5kZXJfZGF0YShlKXt2YXIgcj1bXTt2YXIgbj12b2lkIDA7Zm9yKG4gaW4gZSl7aWYoZS5oYXNPd25Qcm9wZXJ0eShuKSl7ci5wdXNoKFwiZGF0YS1cIituKyc9XCInK3MuZXNjYXBlRm9ySHRtbChlW25dKSsnXCInKX19cmV0dXJuIHIubGVuZ3RoPjA/XCIgXCIrci5qb2luKFwiIFwiKTpcIlwifTtpZih0LmZnKXtpZihvKXtsLnB1c2godC5mZytcIi1mZ1wiKTtpZih0LmZnX3RydWVjb2xvciE9PW51bGwpe2NbXCJhbnNpLXRydWVjb2xvci1mZ1wiXT10LmZnX3RydWVjb2xvcjt0LmZnX3RydWVjb2xvcj1udWxsfX1lbHNle2EucHVzaChcImNvbG9yOnJnYihcIit0LmZnK1wiKVwiKX19aWYodC5iZyl7aWYobyl7bC5wdXNoKHQuYmcrXCItYmdcIik7aWYodC5iZ190cnVlY29sb3IhPT1udWxsKXtjW1wiYW5zaS10cnVlY29sb3ItYmdcIl09dC5iZ190cnVlY29sb3I7dC5iZ190cnVlY29sb3I9bnVsbH19ZWxzZXthLnB1c2goXCJiYWNrZ3JvdW5kLWNvbG9yOnJnYihcIit0LmJnK1wiKVwiKX19aWYodC5kZWNvcmF0aW9uKXtpZihvKXtsLnB1c2goXCJhbnNpLVwiK3QuZGVjb3JhdGlvbil9ZWxzZSBpZih0LmRlY29yYXRpb249PT1cImJvbGRcIil7YS5wdXNoKFwiZm9udC13ZWlnaHQ6Ym9sZFwiKX1lbHNlIGlmKHQuZGVjb3JhdGlvbj09PVwiZGltXCIpe2EucHVzaChcIm9wYWNpdHk6MC41XCIpfWVsc2UgaWYodC5kZWNvcmF0aW9uPT09XCJpdGFsaWNcIil7YS5wdXNoKFwiZm9udC1zdHlsZTppdGFsaWNcIil9ZWxzZSBpZih0LmRlY29yYXRpb249PT1cInJldmVyc2VcIil7YS5wdXNoKFwiZmlsdGVyOmludmVydCgxMDAlKVwiKX1lbHNlIGlmKHQuZGVjb3JhdGlvbj09PVwiaGlkZGVuXCIpe2EucHVzaChcInZpc2liaWxpdHk6aGlkZGVuXCIpfWVsc2UgaWYodC5kZWNvcmF0aW9uPT09XCJzdHJpa2V0aHJvdWdoXCIpe2EucHVzaChcInRleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2hcIil9ZWxzZXthLnB1c2goXCJ0ZXh0LWRlY29yYXRpb246XCIrdC5kZWNvcmF0aW9uKX19aWYobyl7cmV0dXJuJzxzcGFuIGNsYXNzPVwiJytsLmpvaW4oXCIgXCIpKydcIicrdShjKStcIj5cIit0LmNvbnRlbnQrXCI8L3NwYW4+XCJ9ZWxzZXtyZXR1cm4nPHNwYW4gc3R5bGU9XCInK2Euam9pbihcIjtcIikrJ1wiJyt1KGMpK1wiPlwiK3QuY29udGVudCtcIjwvc3Bhbj5cIn19fV0pO3JldHVybiBBbnNlcn0oKTtlLmV4cG9ydHM9c319O3ZhciByPXt9O2Z1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18obil7dmFyIHM9cltuXTtpZihzIT09dW5kZWZpbmVkKXtyZXR1cm4gcy5leHBvcnRzfXZhciBpPXJbbl09e2V4cG9ydHM6e319O3ZhciB0PXRydWU7dHJ5e2Vbbl0oaSxpLmV4cG9ydHMsX19uY2N3cGNrX3JlcXVpcmVfXyk7dD1mYWxzZX1maW5hbGx5e2lmKHQpZGVsZXRlIHJbbl19cmV0dXJuIGkuZXhwb3J0c31pZih0eXBlb2YgX19uY2N3cGNrX3JlcXVpcmVfXyE9PVwidW5kZWZpbmVkXCIpX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIG49X19uY2N3cGNrX3JlcXVpcmVfXygyMTEpO21vZHVsZS5leHBvcnRzPW59KSgpOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/anser/index.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/cookie/index.js": +/*!*********************************************************!*\ + !*** ./node_modules/next/dist/compiled/cookie/index.js ***! + \*********************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p<o.length;p++){var f=o[p];var u=f.indexOf(\"=\");if(u<0){continue}var v=f.substr(0,u).trim();var c=f.substr(++u,f.length).trim();if('\"'==c[0]){c=c.slice(1,-1)}if(undefined==t[v]){t[v]=tryDecode(c,s)}}return t}function serialize(e,r,i){var a=i||{};var o=a.encode||t;if(typeof o!==\"function\"){throw new TypeError(\"option encode is invalid\")}if(!n.test(e)){throw new TypeError(\"argument name is invalid\")}var s=o(r);if(s&&!n.test(s)){throw new TypeError(\"argument val is invalid\")}var p=e+\"=\"+s;if(null!=a.maxAge){var f=a.maxAge-0;if(isNaN(f)||!isFinite(f)){throw new TypeError(\"option maxAge is invalid\")}p+=\"; Max-Age=\"+Math.floor(f)}if(a.domain){if(!n.test(a.domain)){throw new TypeError(\"option domain is invalid\")}p+=\"; Domain=\"+a.domain}if(a.path){if(!n.test(a.path)){throw new TypeError(\"option path is invalid\")}p+=\"; Path=\"+a.path}if(a.expires){if(typeof a.expires.toUTCString!==\"function\"){throw new TypeError(\"option expires is invalid\")}p+=\"; Expires=\"+a.expires.toUTCString()}if(a.httpOnly){p+=\"; HttpOnly\"}if(a.secure){p+=\"; Secure\"}if(a.sameSite){var u=typeof a.sameSite===\"string\"?a.sameSite.toLowerCase():a.sameSite;switch(u){case true:p+=\"; SameSite=Strict\";break;case\"lax\":p+=\"; SameSite=Lax\";break;case\"strict\":p+=\"; SameSite=Strict\";break;case\"none\":p+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return p}function tryDecode(e,r){try{return r(e)}catch(r){return e}}})();module.exports=e})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nvb2tpZS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxhQUFhLG1FQUFtRSxTQUFTLEtBQUssU0FBUyxNQUFNO0FBQ25IO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsc0JBQXNCLHlCQUF5Qix5QkFBeUIsU0FBUyxHQUFHLDhDQUE4QyxvQkFBb0Isd0JBQXdCLHFEQUFxRCxTQUFTLFlBQVksaUJBQWlCLGtCQUFrQixZQUFZLFdBQVcsS0FBSyxXQUFXLHFCQUFxQixRQUFRLFNBQVMsMkJBQTJCLG9DQUFvQyxjQUFjLGdCQUFnQixvQkFBb0IscUJBQXFCLFNBQVMsMEJBQTBCLFlBQVksa0JBQWtCLDBCQUEwQixnREFBZ0QsZUFBZSxnREFBZ0QsV0FBVyxrQkFBa0IsK0NBQStDLGNBQWMsbUJBQW1CLGlCQUFpQiwyQkFBMkIsZ0RBQWdELE1BQU0sd0JBQXdCLGFBQWEsc0JBQXNCLGdEQUFnRCxNQUFNLGtCQUFrQixXQUFXLG9CQUFvQiw4Q0FBOEMsTUFBTSxjQUFjLGNBQWMsOENBQThDLGlEQUFpRCxNQUFNLGtDQUFrQyxlQUFlLE1BQU0sVUFBVSxhQUFhLE1BQU0sUUFBUSxlQUFlLHVFQUF1RSxVQUFVLGdCQUFnQixpQkFBaUIsTUFBTSxnQkFBZ0IsY0FBYyxNQUFNLG1CQUFtQixpQkFBaUIsTUFBTSxpQkFBaUIsZUFBZSxNQUFNLDJEQUEyRCxTQUFTLHdCQUF3QixJQUFJLFlBQVksU0FBUyxXQUFXLElBQUksaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvY29va2llL2luZGV4LmpzP2IyNWUiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57XCJ1c2Ugc3RyaWN0XCI7aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciBlPXt9OygoKT0+e3ZhciByPWU7XG4vKiFcbiAqIGNvb2tpZVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBSb21hbiBTaHR5bG1hblxuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovci5wYXJzZT1wYXJzZTtyLnNlcmlhbGl6ZT1zZXJpYWxpemU7dmFyIGk9ZGVjb2RlVVJJQ29tcG9uZW50O3ZhciB0PWVuY29kZVVSSUNvbXBvbmVudDt2YXIgYT0vOyAqLzt2YXIgbj0vXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXSskLztmdW5jdGlvbiBwYXJzZShlLHIpe2lmKHR5cGVvZiBlIT09XCJzdHJpbmdcIil7dGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHN0ciBtdXN0IGJlIGEgc3RyaW5nXCIpfXZhciB0PXt9O3ZhciBuPXJ8fHt9O3ZhciBvPWUuc3BsaXQoYSk7dmFyIHM9bi5kZWNvZGV8fGk7Zm9yKHZhciBwPTA7cDxvLmxlbmd0aDtwKyspe3ZhciBmPW9bcF07dmFyIHU9Zi5pbmRleE9mKFwiPVwiKTtpZih1PDApe2NvbnRpbnVlfXZhciB2PWYuc3Vic3RyKDAsdSkudHJpbSgpO3ZhciBjPWYuc3Vic3RyKCsrdSxmLmxlbmd0aCkudHJpbSgpO2lmKCdcIic9PWNbMF0pe2M9Yy5zbGljZSgxLC0xKX1pZih1bmRlZmluZWQ9PXRbdl0pe3Rbdl09dHJ5RGVjb2RlKGMscyl9fXJldHVybiB0fWZ1bmN0aW9uIHNlcmlhbGl6ZShlLHIsaSl7dmFyIGE9aXx8e307dmFyIG89YS5lbmNvZGV8fHQ7aWYodHlwZW9mIG8hPT1cImZ1bmN0aW9uXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb24gZW5jb2RlIGlzIGludmFsaWRcIil9aWYoIW4udGVzdChlKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG5hbWUgaXMgaW52YWxpZFwiKX12YXIgcz1vKHIpO2lmKHMmJiFuLnRlc3Qocykpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCB2YWwgaXMgaW52YWxpZFwiKX12YXIgcD1lK1wiPVwiK3M7aWYobnVsbCE9YS5tYXhBZ2Upe3ZhciBmPWEubWF4QWdlLTA7aWYoaXNOYU4oZil8fCFpc0Zpbml0ZShmKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBtYXhBZ2UgaXMgaW52YWxpZFwiKX1wKz1cIjsgTWF4LUFnZT1cIitNYXRoLmZsb29yKGYpfWlmKGEuZG9tYWluKXtpZighbi50ZXN0KGEuZG9tYWluKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBkb21haW4gaXMgaW52YWxpZFwiKX1wKz1cIjsgRG9tYWluPVwiK2EuZG9tYWlufWlmKGEucGF0aCl7aWYoIW4udGVzdChhLnBhdGgpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwib3B0aW9uIHBhdGggaXMgaW52YWxpZFwiKX1wKz1cIjsgUGF0aD1cIithLnBhdGh9aWYoYS5leHBpcmVzKXtpZih0eXBlb2YgYS5leHBpcmVzLnRvVVRDU3RyaW5nIT09XCJmdW5jdGlvblwiKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwib3B0aW9uIGV4cGlyZXMgaXMgaW52YWxpZFwiKX1wKz1cIjsgRXhwaXJlcz1cIithLmV4cGlyZXMudG9VVENTdHJpbmcoKX1pZihhLmh0dHBPbmx5KXtwKz1cIjsgSHR0cE9ubHlcIn1pZihhLnNlY3VyZSl7cCs9XCI7IFNlY3VyZVwifWlmKGEuc2FtZVNpdGUpe3ZhciB1PXR5cGVvZiBhLnNhbWVTaXRlPT09XCJzdHJpbmdcIj9hLnNhbWVTaXRlLnRvTG93ZXJDYXNlKCk6YS5zYW1lU2l0ZTtzd2l0Y2godSl7Y2FzZSB0cnVlOnArPVwiOyBTYW1lU2l0ZT1TdHJpY3RcIjticmVhaztjYXNlXCJsYXhcIjpwKz1cIjsgU2FtZVNpdGU9TGF4XCI7YnJlYWs7Y2FzZVwic3RyaWN0XCI6cCs9XCI7IFNhbWVTaXRlPVN0cmljdFwiO2JyZWFrO2Nhc2VcIm5vbmVcIjpwKz1cIjsgU2FtZVNpdGU9Tm9uZVwiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBzYW1lU2l0ZSBpcyBpbnZhbGlkXCIpfX1yZXR1cm4gcH1mdW5jdGlvbiB0cnlEZWNvZGUoZSxyKXt0cnl7cmV0dXJuIHIoZSl9Y2F0Y2gocil7cmV0dXJuIGV9fX0pKCk7bW9kdWxlLmV4cG9ydHM9ZX0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/cookie/index.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/css.escape/css.escape.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/compiled/css.escape/css.escape.js ***! + \******************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{var e={553:function(e){(function(r,t){if(true){e.exports=t(r)}else{}})(typeof __webpack_require__.g!=\"undefined\"?__webpack_require__.g:this,(function(e){if(e.CSS&&e.CSS.escape){return e.CSS.escape}var cssEscape=function(e){if(arguments.length==0){throw new TypeError(\"`CSS.escape` requires an argument.\")}var r=String(e);var t=r.length;var n=-1;var a;var i=\"\";var u=r.charCodeAt(0);while(++n<t){a=r.charCodeAt(n);if(a==0){i+=\"�\";continue}if(a>=1&&a<=31||a==127||n==0&&a>=48&&a<=57||n==1&&a>=48&&a<=57&&u==45){i+=\"\\\\\"+a.toString(16)+\" \";continue}if(n==0&&t==1&&a==45){i+=\"\\\\\"+r.charAt(n);continue}if(a>=128||a==45||a==95||a>=48&&a<=57||a>=65&&a<=90||a>=97&&a<=122){i+=r.charAt(n);continue}i+=\"\\\\\"+r.charAt(n)}return i};if(!e.CSS){e.CSS={}}e.CSS.escape=cssEscape;return cssEscape}))}};var r={};function __nccwpck_require__(t){var n=r[t];if(n!==undefined){return n.exports}var a=r[t]={exports:{}};var i=true;try{e[t].call(a.exports,a,a.exports,__nccwpck_require__);i=false}finally{if(i)delete r[t]}return a.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(553);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL2Nzcy5lc2NhcGUvY3NzLmVzY2FwZS5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxPQUFPLGdCQUFnQixlQUFlLEdBQUcsSUFBSSxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUMsU0FBUyxxQkFBTSxjQUFjLHFCQUFNLG1CQUFtQix3QkFBd0Isb0JBQW9CLDBCQUEwQix3QkFBd0IsMERBQTBELGdCQUFnQixlQUFlLFNBQVMsTUFBTSxTQUFTLHNCQUFzQixhQUFhLGtCQUFrQixTQUFTLE9BQU8sU0FBUyx1RUFBdUUsMkJBQTJCLFNBQVMsc0JBQXNCLG9CQUFvQixTQUFTLG9FQUFvRSxlQUFlLFNBQVMsb0JBQW9CLFVBQVUsV0FBVyxTQUFTLHVCQUF1QixpQkFBaUIsS0FBSyxTQUFTLGdDQUFnQyxXQUFXLGtCQUFrQixpQkFBaUIsWUFBWSxZQUFZLFdBQVcsSUFBSSxxREFBcUQsUUFBUSxRQUFRLGlCQUFpQixpQkFBaUIsbUVBQW1FLFNBQVMsS0FBSywrQkFBK0IsaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvY3NzLmVzY2FwZS9jc3MuZXNjYXBlLmpzPzQ3MzMiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57dmFyIGU9ezU1MzpmdW5jdGlvbihlKXsoZnVuY3Rpb24ocix0KXtpZih0cnVlKXtlLmV4cG9ydHM9dChyKX1lbHNle319KSh0eXBlb2YgZ2xvYmFsIT1cInVuZGVmaW5lZFwiP2dsb2JhbDp0aGlzLChmdW5jdGlvbihlKXtpZihlLkNTUyYmZS5DU1MuZXNjYXBlKXtyZXR1cm4gZS5DU1MuZXNjYXBlfXZhciBjc3NFc2NhcGU9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aD09MCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcImBDU1MuZXNjYXBlYCByZXF1aXJlcyBhbiBhcmd1bWVudC5cIil9dmFyIHI9U3RyaW5nKGUpO3ZhciB0PXIubGVuZ3RoO3ZhciBuPS0xO3ZhciBhO3ZhciBpPVwiXCI7dmFyIHU9ci5jaGFyQ29kZUF0KDApO3doaWxlKCsrbjx0KXthPXIuY2hhckNvZGVBdChuKTtpZihhPT0wKXtpKz1cIu+/vVwiO2NvbnRpbnVlfWlmKGE+PTEmJmE8PTMxfHxhPT0xMjd8fG49PTAmJmE+PTQ4JiZhPD01N3x8bj09MSYmYT49NDgmJmE8PTU3JiZ1PT00NSl7aSs9XCJcXFxcXCIrYS50b1N0cmluZygxNikrXCIgXCI7Y29udGludWV9aWYobj09MCYmdD09MSYmYT09NDUpe2krPVwiXFxcXFwiK3IuY2hhckF0KG4pO2NvbnRpbnVlfWlmKGE+PTEyOHx8YT09NDV8fGE9PTk1fHxhPj00OCYmYTw9NTd8fGE+PTY1JiZhPD05MHx8YT49OTcmJmE8PTEyMil7aSs9ci5jaGFyQXQobik7Y29udGludWV9aSs9XCJcXFxcXCIrci5jaGFyQXQobil9cmV0dXJuIGl9O2lmKCFlLkNTUyl7ZS5DU1M9e319ZS5DU1MuZXNjYXBlPWNzc0VzY2FwZTtyZXR1cm4gY3NzRXNjYXBlfSkpfX07dmFyIHI9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyh0KXt2YXIgbj1yW3RdO2lmKG4hPT11bmRlZmluZWQpe3JldHVybiBuLmV4cG9ydHN9dmFyIGE9clt0XT17ZXhwb3J0czp7fX07dmFyIGk9dHJ1ZTt0cnl7ZVt0XS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtpPWZhbHNlfWZpbmFsbHl7aWYoaSlkZWxldGUgclt0XX1yZXR1cm4gYS5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgdD1fX25jY3dwY2tfcmVxdWlyZV9fKDU1Myk7bW9kdWxlLmV4cG9ydHM9dH0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/css.escape/css.escape.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/path-to-regexp/index.js": +/*!*****************************************************************!*\ + !*** ./node_modules/next/dist/compiled/path-to-regexp/index.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n/**\n * Tokenize input string.\n */\nfunction lexer(str) {\n var tokens = [];\n var i = 0;\n while (i < str.length) {\n var char = str[i];\n if (char === \"*\" || char === \"+\" || char === \"?\") {\n tokens.push({ type: \"MODIFIER\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"\\\\\") {\n tokens.push({ type: \"ESCAPED_CHAR\", index: i++, value: str[i++] });\n continue;\n }\n if (char === \"{\") {\n tokens.push({ type: \"OPEN\", index: i, value: str[i++] });\n continue;\n }\n if (char === \"}\") {\n tokens.push({ type: \"CLOSE\", index: i, value: str[i++] });\n continue;\n }\n if (char === \":\") {\n var name = \"\";\n var j = i + 1;\n while (j < str.length) {\n var code = str.charCodeAt(j);\n if (\n // `0-9`\n (code >= 48 && code <= 57) ||\n // `A-Z`\n (code >= 65 && code <= 90) ||\n // `a-z`\n (code >= 97 && code <= 122) ||\n // `_`\n code === 95) {\n name += str[j++];\n continue;\n }\n break;\n }\n if (!name)\n throw new TypeError(\"Missing parameter name at \" + i);\n tokens.push({ type: \"NAME\", index: i, value: name });\n i = j;\n continue;\n }\n if (char === \"(\") {\n var count = 1;\n var pattern = \"\";\n var j = i + 1;\n if (str[j] === \"?\") {\n throw new TypeError(\"Pattern cannot start with \\\"?\\\" at \" + j);\n }\n while (j < str.length) {\n if (str[j] === \"\\\\\") {\n pattern += str[j++] + str[j++];\n continue;\n }\n if (str[j] === \")\") {\n count--;\n if (count === 0) {\n j++;\n break;\n }\n }\n else if (str[j] === \"(\") {\n count++;\n if (str[j + 1] !== \"?\") {\n throw new TypeError(\"Capturing groups are not allowed at \" + j);\n }\n }\n pattern += str[j++];\n }\n if (count)\n throw new TypeError(\"Unbalanced pattern at \" + i);\n if (!pattern)\n throw new TypeError(\"Missing pattern at \" + i);\n tokens.push({ type: \"PATTERN\", index: i, value: pattern });\n i = j;\n continue;\n }\n tokens.push({ type: \"CHAR\", index: i, value: str[i++] });\n }\n tokens.push({ type: \"END\", index: i, value: \"\" });\n return tokens;\n}\n/**\n * Parse a string for the raw tokens.\n */\nfunction parse(str, options) {\n if (options === void 0) { options = {}; }\n var tokens = lexer(str);\n var _a = options.prefixes, prefixes = _a === void 0 ? \"./\" : _a;\n var defaultPattern = \"[^\" + escapeString(options.delimiter || \"/#?\") + \"]+?\";\n var result = [];\n var key = 0;\n var i = 0;\n var path = \"\";\n var tryConsume = function (type) {\n if (i < tokens.length && tokens[i].type === type)\n return tokens[i++].value;\n };\n var mustConsume = function (type) {\n var value = tryConsume(type);\n if (value !== undefined)\n return value;\n var _a = tokens[i], nextType = _a.type, index = _a.index;\n throw new TypeError(\"Unexpected \" + nextType + \" at \" + index + \", expected \" + type);\n };\n var consumeText = function () {\n var result = \"\";\n var value;\n // tslint:disable-next-line\n while ((value = tryConsume(\"CHAR\") || tryConsume(\"ESCAPED_CHAR\"))) {\n result += value;\n }\n return result;\n };\n while (i < tokens.length) {\n var char = tryConsume(\"CHAR\");\n var name = tryConsume(\"NAME\");\n var pattern = tryConsume(\"PATTERN\");\n if (name || pattern) {\n var prefix = char || \"\";\n if (prefixes.indexOf(prefix) === -1) {\n path += prefix;\n prefix = \"\";\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n result.push({\n name: name || key++,\n prefix: prefix,\n suffix: \"\",\n pattern: pattern || defaultPattern,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n var value = char || tryConsume(\"ESCAPED_CHAR\");\n if (value) {\n path += value;\n continue;\n }\n if (path) {\n result.push(path);\n path = \"\";\n }\n var open = tryConsume(\"OPEN\");\n if (open) {\n var prefix = consumeText();\n var name_1 = tryConsume(\"NAME\") || \"\";\n var pattern_1 = tryConsume(\"PATTERN\") || \"\";\n var suffix = consumeText();\n mustConsume(\"CLOSE\");\n result.push({\n name: name_1 || (pattern_1 ? key++ : \"\"),\n pattern: name_1 && !pattern_1 ? defaultPattern : pattern_1,\n prefix: prefix,\n suffix: suffix,\n modifier: tryConsume(\"MODIFIER\") || \"\"\n });\n continue;\n }\n mustConsume(\"END\");\n }\n return result;\n}\nexports.parse = parse;\n/**\n * Compile a string to a template function for the path.\n */\nfunction compile(str, options) {\n return tokensToFunction(parse(str, options), options);\n}\nexports.compile = compile;\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction(tokens, options) {\n if (options === void 0) { options = {}; }\n var reFlags = flags(options);\n var _a = options.encode, encode = _a === void 0 ? function (x) { return x; } : _a, _b = options.validate, validate = _b === void 0 ? true : _b;\n // Compile all the tokens into regexps.\n var matches = tokens.map(function (token) {\n if (typeof token === \"object\") {\n return new RegExp(\"^(?:\" + token.pattern + \")$\", reFlags);\n }\n });\n return function (data) {\n var path = \"\";\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (typeof token === \"string\") {\n path += token;\n continue;\n }\n var value = data ? data[token.name] : undefined;\n var optional = token.modifier === \"?\" || token.modifier === \"*\";\n var repeat = token.modifier === \"*\" || token.modifier === \"+\";\n if (Array.isArray(value)) {\n if (!repeat) {\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to not repeat, but got an array\");\n }\n if (value.length === 0) {\n if (optional)\n continue;\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to not be empty\");\n }\n for (var j = 0; j < value.length; j++) {\n var segment = encode(value[j], token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected all \\\"\" + token.name + \"\\\" to match \\\"\" + token.pattern + \"\\\", but got \\\"\" + segment + \"\\\"\");\n }\n path += token.prefix + segment + token.suffix;\n }\n continue;\n }\n if (typeof value === \"string\" || typeof value === \"number\") {\n var segment = encode(String(value), token);\n if (validate && !matches[i].test(segment)) {\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to match \\\"\" + token.pattern + \"\\\", but got \\\"\" + segment + \"\\\"\");\n }\n path += token.prefix + segment + token.suffix;\n continue;\n }\n if (optional)\n continue;\n var typeOfMessage = repeat ? \"an array\" : \"a string\";\n throw new TypeError(\"Expected \\\"\" + token.name + \"\\\" to be \" + typeOfMessage);\n }\n return path;\n };\n}\nexports.tokensToFunction = tokensToFunction;\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nfunction match(str, options) {\n var keys = [];\n var re = pathToRegexp(str, keys, options);\n return regexpToFunction(re, keys, options);\n}\nexports.match = match;\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nfunction regexpToFunction(re, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.decode, decode = _a === void 0 ? function (x) { return x; } : _a;\n return function (pathname) {\n var m = re.exec(pathname);\n if (!m)\n return false;\n var path = m[0], index = m.index;\n var params = Object.create(null);\n var _loop_1 = function (i) {\n // tslint:disable-next-line\n if (m[i] === undefined)\n return \"continue\";\n var key = keys[i - 1];\n if (key.modifier === \"*\" || key.modifier === \"+\") {\n params[key.name] = m[i].split(key.prefix + key.suffix).map(function (value) {\n return decode(value, key);\n });\n }\n else {\n params[key.name] = decode(m[i], key);\n }\n };\n for (var i = 1; i < m.length; i++) {\n _loop_1(i);\n }\n return { path: path, index: index, params: params };\n };\n}\nexports.regexpToFunction = regexpToFunction;\n/**\n * Escape a regular expression string.\n */\nfunction escapeString(str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n}\n/**\n * Get the flags for a regexp from the options.\n */\nfunction flags(options) {\n return options && options.sensitive ? \"\" : \"i\";\n}\n/**\n * Pull out keys from a regexp.\n */\nfunction regexpToRegexp(path, keys) {\n if (!keys)\n return path;\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g);\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: \"\",\n suffix: \"\",\n modifier: \"\",\n pattern: \"\"\n });\n }\n }\n return path;\n}\n/**\n * Transform an array into a regexp.\n */\nfunction arrayToRegexp(paths, keys, options) {\n var parts = paths.map(function (path) { return pathToRegexp(path, keys, options).source; });\n return new RegExp(\"(?:\" + parts.join(\"|\") + \")\", flags(options));\n}\n/**\n * Create a path regexp from string input.\n */\nfunction stringToRegexp(path, keys, options) {\n return tokensToRegexp(parse(path, options), keys, options);\n}\n/**\n * Expose a function for taking tokens and returning a RegExp.\n */\nfunction tokensToRegexp(tokens, keys, options) {\n if (options === void 0) { options = {}; }\n var _a = options.strict, strict = _a === void 0 ? false : _a, _b = options.start, start = _b === void 0 ? true : _b, _c = options.end, end = _c === void 0 ? true : _c, _d = options.encode, encode = _d === void 0 ? function (x) { return x; } : _d;\n var endsWith = \"[\" + escapeString(options.endsWith || \"\") + \"]|$\";\n var delimiter = \"[\" + escapeString(options.delimiter || \"/#?\") + \"]\";\n var route = start ? \"^\" : \"\";\n // Iterate over the tokens and create our regexp string.\n for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n var token = tokens_1[_i];\n if (typeof token === \"string\") {\n route += escapeString(encode(token));\n }\n else {\n var prefix = escapeString(encode(token.prefix));\n var suffix = escapeString(encode(token.suffix));\n if (token.pattern) {\n if (keys)\n keys.push(token);\n if (prefix || suffix) {\n if (token.modifier === \"+\" || token.modifier === \"*\") {\n var mod = token.modifier === \"*\" ? \"?\" : \"\";\n route += \"(?:\" + prefix + \"((?:\" + token.pattern + \")(?:\" + suffix + prefix + \"(?:\" + token.pattern + \"))*)\" + suffix + \")\" + mod;\n }\n else {\n route += \"(?:\" + prefix + \"(\" + token.pattern + \")\" + suffix + \")\" + token.modifier;\n }\n }\n else {\n route += \"(\" + token.pattern + \")\" + token.modifier;\n }\n }\n else {\n route += \"(?:\" + prefix + suffix + \")\" + token.modifier;\n }\n }\n }\n if (end) {\n if (!strict)\n route += delimiter + \"?\";\n route += !options.endsWith ? \"$\" : \"(?=\" + endsWith + \")\";\n }\n else {\n var endToken = tokens[tokens.length - 1];\n var isEndDelimited = typeof endToken === \"string\"\n ? delimiter.indexOf(endToken[endToken.length - 1]) > -1\n : // tslint:disable-next-line\n endToken === undefined;\n if (!strict) {\n route += \"(?:\" + delimiter + \"(?=\" + endsWith + \"))?\";\n }\n if (!isEndDelimited) {\n route += \"(?=\" + delimiter + \"|\" + endsWith + \")\";\n }\n }\n return new RegExp(route, flags(options));\n}\nexports.tokensToRegexp = tokensToRegexp;\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n */\nfunction pathToRegexp(path, keys, options) {\n if (path instanceof RegExp)\n return regexpToRegexp(path, keys);\n if (Array.isArray(path))\n return arrayToRegexp(path, keys, options);\n return stringToRegexp(path, keys, options);\n}\nexports.pathToRegexp = pathToRegexp;\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3BhdGgtdG8tcmVnZXhwL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw2Q0FBNkM7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG1EQUFtRDtBQUM3RTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDBCQUEwQix5Q0FBeUM7QUFDbkU7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QiwwQkFBMEIsMENBQTBDO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIscUNBQXFDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDJDQUEyQztBQUNyRTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IseUNBQXlDO0FBQy9EO0FBQ0Esa0JBQWtCLGtDQUFrQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBLHFFQUFxRSxZQUFZO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxrQkFBa0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIscUVBQXFFLFlBQVk7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGNBQWM7QUFDdEM7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG1CQUFtQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxrREFBa0Q7QUFDOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCLHlPQUF5TyxZQUFZO0FBQ3JQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLHNCQUFzQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNERBQTREO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9wYXRoLXRvLXJlZ2V4cC9pbmRleC5qcz83ZDEyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqXG4gKiBUb2tlbml6ZSBpbnB1dCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGxleGVyKHN0cikge1xuICAgIHZhciB0b2tlbnMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgIHZhciBjaGFyID0gc3RyW2ldO1xuICAgICAgICBpZiAoY2hhciA9PT0gXCIqXCIgfHwgY2hhciA9PT0gXCIrXCIgfHwgY2hhciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJNT0RJRklFUlwiLCBpbmRleDogaSwgdmFsdWU6IHN0cltpKytdIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXIgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwiRVNDQVBFRF9DSEFSXCIsIGluZGV4OiBpKyssIHZhbHVlOiBzdHJbaSsrXSB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBcIntcIikge1xuICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcIk9QRU5cIiwgaW5kZXg6IGksIHZhbHVlOiBzdHJbaSsrXSB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBcIn1cIikge1xuICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcIkNMT1NFXCIsIGluZGV4OiBpLCB2YWx1ZTogc3RyW2krK10gfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhciA9PT0gXCI6XCIpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gXCJcIjtcbiAgICAgICAgICAgIHZhciBqID0gaSArIDE7XG4gICAgICAgICAgICB3aGlsZSAoaiA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGopO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAvLyBgMC05YFxuICAgICAgICAgICAgICAgIChjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcpIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIGBBLVpgXG4gICAgICAgICAgICAgICAgICAgIChjb2RlID49IDY1ICYmIGNvZGUgPD0gOTApIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIGBhLXpgXG4gICAgICAgICAgICAgICAgICAgIChjb2RlID49IDk3ICYmIGNvZGUgPD0gMTIyKSB8fFxuICAgICAgICAgICAgICAgICAgICAvLyBgX2BcbiAgICAgICAgICAgICAgICAgICAgY29kZSA9PT0gOTUpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBzdHJbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFuYW1lKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNaXNzaW5nIHBhcmFtZXRlciBuYW1lIGF0IFwiICsgaSk7XG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwiTkFNRVwiLCBpbmRleDogaSwgdmFsdWU6IG5hbWUgfSk7XG4gICAgICAgICAgICBpID0gajtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFyID09PSBcIihcIikge1xuICAgICAgICAgICAgdmFyIGNvdW50ID0gMTtcbiAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gXCJcIjtcbiAgICAgICAgICAgIHZhciBqID0gaSArIDE7XG4gICAgICAgICAgICBpZiAoc3RyW2pdID09PSBcIj9cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXR0ZXJuIGNhbm5vdCBzdGFydCB3aXRoIFxcXCI/XFxcIiBhdCBcIiArIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGogPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0cltqXSA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybiArPSBzdHJbaisrXSArIHN0cltqKytdO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0cltqXSA9PT0gXCIpXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJbal0gPT09IFwiKFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJbaiArIDFdICE9PSBcIj9cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhcHR1cmluZyBncm91cHMgYXJlIG5vdCBhbGxvd2VkIGF0IFwiICsgaik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGF0dGVybiArPSBzdHJbaisrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3VudClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5iYWxhbmNlZCBwYXR0ZXJuIGF0IFwiICsgaSk7XG4gICAgICAgICAgICBpZiAoIXBhdHRlcm4pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1pc3NpbmcgcGF0dGVybiBhdCBcIiArIGkpO1xuICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiBcIlBBVFRFUk5cIiwgaW5kZXg6IGksIHZhbHVlOiBwYXR0ZXJuIH0pO1xuICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwiQ0hBUlwiLCBpbmRleDogaSwgdmFsdWU6IHN0cltpKytdIH0pO1xuICAgIH1cbiAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwiRU5EXCIsIGluZGV4OiBpLCB2YWx1ZTogXCJcIiB9KTtcbiAgICByZXR1cm4gdG9rZW5zO1xufVxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBmb3IgdGhlIHJhdyB0b2tlbnMuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlKHN0ciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIHRva2VucyA9IGxleGVyKHN0cik7XG4gICAgdmFyIF9hID0gb3B0aW9ucy5wcmVmaXhlcywgcHJlZml4ZXMgPSBfYSA9PT0gdm9pZCAwID8gXCIuL1wiIDogX2E7XG4gICAgdmFyIGRlZmF1bHRQYXR0ZXJuID0gXCJbXlwiICsgZXNjYXBlU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVyIHx8IFwiLyM/XCIpICsgXCJdKz9cIjtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBwYXRoID0gXCJcIjtcbiAgICB2YXIgdHJ5Q29uc3VtZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIGlmIChpIDwgdG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbaV0udHlwZSA9PT0gdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB0b2tlbnNbaSsrXS52YWx1ZTtcbiAgICB9O1xuICAgIHZhciBtdXN0Q29uc3VtZSA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRyeUNvbnN1bWUodHlwZSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YXIgX2EgPSB0b2tlbnNbaV0sIG5leHRUeXBlID0gX2EudHlwZSwgaW5kZXggPSBfYS5pbmRleDtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuZXhwZWN0ZWQgXCIgKyBuZXh0VHlwZSArIFwiIGF0IFwiICsgaW5kZXggKyBcIiwgZXhwZWN0ZWQgXCIgKyB0eXBlKTtcbiAgICB9O1xuICAgIHZhciBjb25zdW1lVGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFwiXCI7XG4gICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHdoaWxlICgodmFsdWUgPSB0cnlDb25zdW1lKFwiQ0hBUlwiKSB8fCB0cnlDb25zdW1lKFwiRVNDQVBFRF9DSEFSXCIpKSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICB3aGlsZSAoaSA8IHRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGNoYXIgPSB0cnlDb25zdW1lKFwiQ0hBUlwiKTtcbiAgICAgICAgdmFyIG5hbWUgPSB0cnlDb25zdW1lKFwiTkFNRVwiKTtcbiAgICAgICAgdmFyIHBhdHRlcm4gPSB0cnlDb25zdW1lKFwiUEFUVEVSTlwiKTtcbiAgICAgICAgaWYgKG5hbWUgfHwgcGF0dGVybikge1xuICAgICAgICAgICAgdmFyIHByZWZpeCA9IGNoYXIgfHwgXCJcIjtcbiAgICAgICAgICAgIGlmIChwcmVmaXhlcy5pbmRleE9mKHByZWZpeCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcGF0aCArPSBwcmVmaXg7XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aCk7XG4gICAgICAgICAgICAgICAgcGF0aCA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSB8fCBrZXkrKyxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeCxcbiAgICAgICAgICAgICAgICBzdWZmaXg6IFwiXCIsXG4gICAgICAgICAgICAgICAgcGF0dGVybjogcGF0dGVybiB8fCBkZWZhdWx0UGF0dGVybixcbiAgICAgICAgICAgICAgICBtb2RpZmllcjogdHJ5Q29uc3VtZShcIk1PRElGSUVSXCIpIHx8IFwiXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZhbHVlID0gY2hhciB8fCB0cnlDb25zdW1lKFwiRVNDQVBFRF9DSEFSXCIpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHBhdGggKz0gdmFsdWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGF0aCk7XG4gICAgICAgICAgICBwYXRoID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3BlbiA9IHRyeUNvbnN1bWUoXCJPUEVOXCIpO1xuICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgICAgdmFyIHByZWZpeCA9IGNvbnN1bWVUZXh0KCk7XG4gICAgICAgICAgICB2YXIgbmFtZV8xID0gdHJ5Q29uc3VtZShcIk5BTUVcIikgfHwgXCJcIjtcbiAgICAgICAgICAgIHZhciBwYXR0ZXJuXzEgPSB0cnlDb25zdW1lKFwiUEFUVEVSTlwiKSB8fCBcIlwiO1xuICAgICAgICAgICAgdmFyIHN1ZmZpeCA9IGNvbnN1bWVUZXh0KCk7XG4gICAgICAgICAgICBtdXN0Q29uc3VtZShcIkNMT1NFXCIpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IG5hbWVfMSB8fCAocGF0dGVybl8xID8ga2V5KysgOiBcIlwiKSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBuYW1lXzEgJiYgIXBhdHRlcm5fMSA/IGRlZmF1bHRQYXR0ZXJuIDogcGF0dGVybl8xLFxuICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LFxuICAgICAgICAgICAgICAgIHN1ZmZpeDogc3VmZml4LFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyOiB0cnlDb25zdW1lKFwiTU9ESUZJRVJcIikgfHwgXCJcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBtdXN0Q29uc3VtZShcIkVORFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbi8qKlxuICogQ29tcGlsZSBhIHN0cmluZyB0byBhIHRlbXBsYXRlIGZ1bmN0aW9uIGZvciB0aGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZShzdHIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdG9rZW5zVG9GdW5jdGlvbihwYXJzZShzdHIsIG9wdGlvbnMpLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGU7XG4vKipcbiAqIEV4cG9zZSBhIG1ldGhvZCBmb3IgdHJhbnNmb3JtaW5nIHRva2VucyBpbnRvIHRoZSBwYXRoIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uKHRva2Vucywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIHJlRmxhZ3MgPSBmbGFncyhvcHRpb25zKTtcbiAgICB2YXIgX2EgPSBvcHRpb25zLmVuY29kZSwgZW5jb2RlID0gX2EgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4OyB9IDogX2EsIF9iID0gb3B0aW9ucy52YWxpZGF0ZSwgdmFsaWRhdGUgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iO1xuICAgIC8vIENvbXBpbGUgYWxsIHRoZSB0b2tlbnMgaW50byByZWdleHBzLlxuICAgIHZhciBtYXRjaGVzID0gdG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyB0b2tlbi5wYXR0ZXJuICsgXCIpJFwiLCByZUZsYWdzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgcGF0aCA9IFwiXCI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcGF0aCArPSB0b2tlbjtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGEgPyBkYXRhW3Rva2VuLm5hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFyIG9wdGlvbmFsID0gdG9rZW4ubW9kaWZpZXIgPT09IFwiP1wiIHx8IHRva2VuLm1vZGlmaWVyID09PSBcIipcIjtcbiAgICAgICAgICAgIHZhciByZXBlYXQgPSB0b2tlbi5tb2RpZmllciA9PT0gXCIqXCIgfHwgdG9rZW4ubW9kaWZpZXIgPT09IFwiK1wiO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIFxcXCJcIiArIHRva2VuLm5hbWUgKyBcIlxcXCIgdG8gbm90IHJlcGVhdCwgYnV0IGdvdCBhbiBhcnJheVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWwpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIFxcXCJcIiArIHRva2VuLm5hbWUgKyBcIlxcXCIgdG8gbm90IGJlIGVtcHR5XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbHVlLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWdtZW50ID0gZW5jb2RlKHZhbHVlW2pdLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZSAmJiAhbWF0Y2hlc1tpXS50ZXN0KHNlZ21lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYWxsIFxcXCJcIiArIHRva2VuLm5hbWUgKyBcIlxcXCIgdG8gbWF0Y2ggXFxcIlwiICsgdG9rZW4ucGF0dGVybiArIFwiXFxcIiwgYnV0IGdvdCBcXFwiXCIgKyBzZWdtZW50ICsgXCJcXFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudCArIHRva2VuLnN1ZmZpeDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHZhciBzZWdtZW50ID0gZW5jb2RlKFN0cmluZyh2YWx1ZSksIHRva2VuKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGUgJiYgIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgXFxcIlwiICsgdG9rZW4ubmFtZSArIFwiXFxcIiB0byBtYXRjaCBcXFwiXCIgKyB0b2tlbi5wYXR0ZXJuICsgXCJcXFwiLCBidXQgZ290IFxcXCJcIiArIHNlZ21lbnQgKyBcIlxcXCJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4ICsgc2VnbWVudCArIHRva2VuLnN1ZmZpeDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25hbClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciB0eXBlT2ZNZXNzYWdlID0gcmVwZWF0ID8gXCJhbiBhcnJheVwiIDogXCJhIHN0cmluZ1wiO1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIFxcXCJcIiArIHRva2VuLm5hbWUgKyBcIlxcXCIgdG8gYmUgXCIgKyB0eXBlT2ZNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9O1xufVxuZXhwb3J0cy50b2tlbnNUb0Z1bmN0aW9uID0gdG9rZW5zVG9GdW5jdGlvbjtcbi8qKlxuICogQ3JlYXRlIHBhdGggbWF0Y2ggZnVuY3Rpb24gZnJvbSBgcGF0aC10by1yZWdleHBgIHNwZWMuXG4gKi9cbmZ1bmN0aW9uIG1hdGNoKHN0ciwgb3B0aW9ucykge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgdmFyIHJlID0gcGF0aFRvUmVnZXhwKHN0ciwga2V5cywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHJlZ2V4cFRvRnVuY3Rpb24ocmUsIGtleXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5tYXRjaCA9IG1hdGNoO1xuLyoqXG4gKiBDcmVhdGUgYSBwYXRoIG1hdGNoIGZ1bmN0aW9uIGZyb20gYHBhdGgtdG8tcmVnZXhwYCBvdXRwdXQuXG4gKi9cbmZ1bmN0aW9uIHJlZ2V4cFRvRnVuY3Rpb24ocmUsIGtleXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBfYSA9IG9wdGlvbnMuZGVjb2RlLCBkZWNvZGUgPSBfYSA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0gOiBfYTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHBhdGhuYW1lKSB7XG4gICAgICAgIHZhciBtID0gcmUuZXhlYyhwYXRobmFtZSk7XG4gICAgICAgIGlmICghbSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIHBhdGggPSBtWzBdLCBpbmRleCA9IG0uaW5kZXg7XG4gICAgICAgIHZhciBwYXJhbXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIGlmIChtW2ldID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2kgLSAxXTtcbiAgICAgICAgICAgIGlmIChrZXkubW9kaWZpZXIgPT09IFwiKlwiIHx8IGtleS5tb2RpZmllciA9PT0gXCIrXCIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNba2V5Lm5hbWVdID0gbVtpXS5zcGxpdChrZXkucHJlZml4ICsga2V5LnN1ZmZpeCkubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlKHZhbHVlLCBrZXkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zW2tleS5uYW1lXSA9IGRlY29kZShtW2ldLCBrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcGF0aDogcGF0aCwgaW5kZXg6IGluZGV4LCBwYXJhbXM6IHBhcmFtcyB9O1xuICAgIH07XG59XG5leHBvcnRzLnJlZ2V4cFRvRnVuY3Rpb24gPSByZWdleHBUb0Z1bmN0aW9uO1xuLyoqXG4gKiBFc2NhcGUgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfC9cXFxcXSkvZywgXCJcXFxcJDFcIik7XG59XG4vKipcbiAqIEdldCB0aGUgZmxhZ3MgZm9yIGEgcmVnZXhwIGZyb20gdGhlIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGZsYWdzKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLnNlbnNpdGl2ZSA/IFwiXCIgOiBcImlcIjtcbn1cbi8qKlxuICogUHVsbCBvdXQga2V5cyBmcm9tIGEgcmVnZXhwLlxuICovXG5mdW5jdGlvbiByZWdleHBUb1JlZ2V4cChwYXRoLCBrZXlzKSB7XG4gICAgaWYgKCFrZXlzKVxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAvLyBVc2UgYSBuZWdhdGl2ZSBsb29rYWhlYWQgdG8gbWF0Y2ggb25seSBjYXB0dXJpbmcgZ3JvdXBzLlxuICAgIHZhciBncm91cHMgPSBwYXRoLnNvdXJjZS5tYXRjaCgvXFwoKD8hXFw/KS9nKTtcbiAgICBpZiAoZ3JvdXBzKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IGksXG4gICAgICAgICAgICAgICAgcHJlZml4OiBcIlwiLFxuICAgICAgICAgICAgICAgIHN1ZmZpeDogXCJcIixcbiAgICAgICAgICAgICAgICBtb2RpZmllcjogXCJcIixcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBcIlwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbn1cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFycmF5IGludG8gYSByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9SZWdleHAocGF0aHMsIGtleXMsIG9wdGlvbnMpIHtcbiAgICB2YXIgcGFydHMgPSBwYXRocy5tYXAoZnVuY3Rpb24gKHBhdGgpIHsgcmV0dXJuIHBhdGhUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKS5zb3VyY2U7IH0pO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKFwiKD86XCIgKyBwYXJ0cy5qb2luKFwifFwiKSArIFwiKVwiLCBmbGFncyhvcHRpb25zKSk7XG59XG4vKipcbiAqIENyZWF0ZSBhIHBhdGggcmVnZXhwIGZyb20gc3RyaW5nIGlucHV0LlxuICovXG5mdW5jdGlvbiBzdHJpbmdUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRva2Vuc1RvUmVnZXhwKHBhcnNlKHBhdGgsIG9wdGlvbnMpLCBrZXlzLCBvcHRpb25zKTtcbn1cbi8qKlxuICogRXhwb3NlIGEgZnVuY3Rpb24gZm9yIHRha2luZyB0b2tlbnMgYW5kIHJldHVybmluZyBhIFJlZ0V4cC5cbiAqL1xuZnVuY3Rpb24gdG9rZW5zVG9SZWdleHAodG9rZW5zLCBrZXlzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgX2EgPSBvcHRpb25zLnN0cmljdCwgc3RyaWN0ID0gX2EgPT09IHZvaWQgMCA/IGZhbHNlIDogX2EsIF9iID0gb3B0aW9ucy5zdGFydCwgc3RhcnQgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iLCBfYyA9IG9wdGlvbnMuZW5kLCBlbmQgPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IG9wdGlvbnMuZW5jb2RlLCBlbmNvZGUgPSBfZCA9PT0gdm9pZCAwID8gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0gOiBfZDtcbiAgICB2YXIgZW5kc1dpdGggPSBcIltcIiArIGVzY2FwZVN0cmluZyhvcHRpb25zLmVuZHNXaXRoIHx8IFwiXCIpICsgXCJdfCRcIjtcbiAgICB2YXIgZGVsaW1pdGVyID0gXCJbXCIgKyBlc2NhcGVTdHJpbmcob3B0aW9ucy5kZWxpbWl0ZXIgfHwgXCIvIz9cIikgKyBcIl1cIjtcbiAgICB2YXIgcm91dGUgPSBzdGFydCA/IFwiXlwiIDogXCJcIjtcbiAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHRva2VucyBhbmQgY3JlYXRlIG91ciByZWdleHAgc3RyaW5nLlxuICAgIGZvciAodmFyIF9pID0gMCwgdG9rZW5zXzEgPSB0b2tlbnM7IF9pIDwgdG9rZW5zXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc18xW19pXTtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcm91dGUgKz0gZXNjYXBlU3RyaW5nKGVuY29kZSh0b2tlbikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZWZpeCA9IGVzY2FwZVN0cmluZyhlbmNvZGUodG9rZW4ucHJlZml4KSk7XG4gICAgICAgICAgICB2YXIgc3VmZml4ID0gZXNjYXBlU3RyaW5nKGVuY29kZSh0b2tlbi5zdWZmaXgpKTtcbiAgICAgICAgICAgIGlmICh0b2tlbi5wYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleXMpXG4gICAgICAgICAgICAgICAgICAgIGtleXMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKHByZWZpeCB8fCBzdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLm1vZGlmaWVyID09PSBcIitcIiB8fCB0b2tlbi5tb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSB0b2tlbi5tb2RpZmllciA9PT0gXCIqXCIgPyBcIj9cIiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZSArPSBcIig/OlwiICsgcHJlZml4ICsgXCIoKD86XCIgKyB0b2tlbi5wYXR0ZXJuICsgXCIpKD86XCIgKyBzdWZmaXggKyBwcmVmaXggKyBcIig/OlwiICsgdG9rZW4ucGF0dGVybiArIFwiKSkqKVwiICsgc3VmZml4ICsgXCIpXCIgKyBtb2Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZSArPSBcIig/OlwiICsgcHJlZml4ICsgXCIoXCIgKyB0b2tlbi5wYXR0ZXJuICsgXCIpXCIgKyBzdWZmaXggKyBcIilcIiArIHRva2VuLm1vZGlmaWVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3V0ZSArPSBcIihcIiArIHRva2VuLnBhdHRlcm4gKyBcIilcIiArIHRva2VuLm1vZGlmaWVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJvdXRlICs9IFwiKD86XCIgKyBwcmVmaXggKyBzdWZmaXggKyBcIilcIiArIHRva2VuLm1vZGlmaWVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlbmQpIHtcbiAgICAgICAgaWYgKCFzdHJpY3QpXG4gICAgICAgICAgICByb3V0ZSArPSBkZWxpbWl0ZXIgKyBcIj9cIjtcbiAgICAgICAgcm91dGUgKz0gIW9wdGlvbnMuZW5kc1dpdGggPyBcIiRcIiA6IFwiKD89XCIgKyBlbmRzV2l0aCArIFwiKVwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIGVuZFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgdmFyIGlzRW5kRGVsaW1pdGVkID0gdHlwZW9mIGVuZFRva2VuID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IGRlbGltaXRlci5pbmRleE9mKGVuZFRva2VuW2VuZFRva2VuLmxlbmd0aCAtIDFdKSA+IC0xXG4gICAgICAgICAgICA6IC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgICAgIGVuZFRva2VuID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghc3RyaWN0KSB7XG4gICAgICAgICAgICByb3V0ZSArPSBcIig/OlwiICsgZGVsaW1pdGVyICsgXCIoPz1cIiArIGVuZHNXaXRoICsgXCIpKT9cIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW5kRGVsaW1pdGVkKSB7XG4gICAgICAgICAgICByb3V0ZSArPSBcIig/PVwiICsgZGVsaW1pdGVyICsgXCJ8XCIgKyBlbmRzV2l0aCArIFwiKVwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVnRXhwKHJvdXRlLCBmbGFncyhvcHRpb25zKSk7XG59XG5leHBvcnRzLnRva2Vuc1RvUmVnZXhwID0gdG9rZW5zVG9SZWdleHA7XG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgZ2l2ZW4gcGF0aCBzdHJpbmcsIHJldHVybmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqXG4gKiBBbiBlbXB0eSBhcnJheSBjYW4gYmUgcGFzc2VkIGluIGZvciB0aGUga2V5cywgd2hpY2ggd2lsbCBob2xkIHRoZVxuICogcGxhY2Vob2xkZXIga2V5IGRlc2NyaXB0aW9ucy4gRm9yIGV4YW1wbGUsIHVzaW5nIGAvdXNlci86aWRgLCBga2V5c2Agd2lsbFxuICogY29udGFpbiBgW3sgbmFtZTogJ2lkJywgZGVsaW1pdGVyOiAnLycsIG9wdGlvbmFsOiBmYWxzZSwgcmVwZWF0OiBmYWxzZSB9XWAuXG4gKi9cbmZ1bmN0aW9uIHBhdGhUb1JlZ2V4cChwYXRoLCBrZXlzLCBvcHRpb25zKSB7XG4gICAgaWYgKHBhdGggaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgICAgIHJldHVybiByZWdleHBUb1JlZ2V4cChwYXRoLCBrZXlzKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoKSlcbiAgICAgICAgcmV0dXJuIGFycmF5VG9SZWdleHAocGF0aCwga2V5cywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHN0cmluZ1RvUmVnZXhwKHBhdGgsIGtleXMsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5wYXRoVG9SZWdleHAgPSBwYXRoVG9SZWdleHA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/path-to-regexp/index.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/platform/platform.js": +/*!**************************************************************!*\ + !*** ./node_modules/next/dist/compiled/platform/platform.js ***! + \**************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{var e={541:function(e,i,t){e=t.nmd(e);\n/*!\n * Platform.js v1.3.6\n * Copyright 2014-2020 Benjamin Tan\n * Copyright 2011-2013 John-David Dalton\n * Available under MIT license\n */(function(){\"use strict\";var t={function:true,object:true};var r=t[typeof window]&&window||this;var a=r;var n=t[typeof i]&&i;var o=t[\"object\"]&&e&&!e.nodeType&&e;var l=n&&o&&typeof __webpack_require__.g==\"object\"&&__webpack_require__.g;if(l&&(l.global===l||l.window===l||l.self===l)){r=l}var s=Math.pow(2,53)-1;var f=/\\bOpera/;var b=this;var c=Object.prototype;var p=c.hasOwnProperty;var u=c.toString;function capitalize(e){e=String(e);return e.charAt(0).toUpperCase()+e.slice(1)}function cleanupOS(e,i,t){var r={\"10.0\":\"10\",6.4:\"10 Technical Preview\",6.3:\"8.1\",6.2:\"8\",6.1:\"Server 2008 R2 / 7\",\"6.0\":\"Server 2008 / Vista\",5.2:\"Server 2003 / XP 64-bit\",5.1:\"XP\",5.01:\"2000 SP1\",\"5.0\":\"2000\",\"4.0\":\"NT\",\"4.90\":\"ME\"};if(i&&t&&/^Win/i.test(e)&&!/^Windows Phone /i.test(e)&&(r=r[/[\\d.]+$/.exec(e)])){e=\"Windows \"+r}e=String(e);if(i&&t){e=e.replace(RegExp(i,\"i\"),t)}e=format(e.replace(/ ce$/i,\" CE\").replace(/\\bhpw/i,\"web\").replace(/\\bMacintosh\\b/,\"Mac OS\").replace(/_PowerPC\\b/i,\" OS\").replace(/\\b(OS X) [^ \\d]+/i,\"$1\").replace(/\\bMac (OS X)\\b/,\"$1\").replace(/\\/(\\d)/,\" $1\").replace(/_/g,\".\").replace(/(?: BePC|[ .]*fc[ \\d.]+)$/i,\"\").replace(/\\bx86\\.64\\b/gi,\"x86_64\").replace(/\\b(Windows Phone) OS\\b/,\"$1\").replace(/\\b(Chrome OS \\w+) [\\d.]+\\b/,\"$1\").split(\" on \")[0]);return e}function each(e,i){var t=-1,r=e?e.length:0;if(typeof r==\"number\"&&r>-1&&r<=s){while(++t<r){i(e[t],t,e)}}else{forOwn(e,i)}}function format(e){e=trim(e);return/^(?:webOS|i(?:OS|P))/.test(e)?e:capitalize(e)}function forOwn(e,i){for(var t in e){if(p.call(e,t)){i(e[t],t,e)}}}function getClassOf(e){return e==null?capitalize(e):u.call(e).slice(8,-1)}function isHostType(e,i){var t=e!=null?typeof e[i]:\"number\";return!/^(?:boolean|number|string|undefined)$/.test(t)&&(t==\"object\"?!!e[i]:true)}function qualify(e){return String(e).replace(/([ -])(?!$)/g,\"$1?\")}function reduce(e,i){var t=null;each(e,(function(r,a){t=i(t,r,a,e)}));return t}function trim(e){return String(e).replace(/^ +| +$/g,\"\")}function parse(e){var i=r;var t=e&&typeof e==\"object\"&&getClassOf(e)!=\"String\";if(t){i=e;e=null}var n=i.navigator||{};var o=n.userAgent||\"\";e||(e=o);var l=t||b==a;var s=t?!!n.likeChrome:/\\bChrome\\b/.test(e)&&!/internal|\\n/i.test(u.toString());var c=\"Object\",p=t?c:\"ScriptBridgingProxyObject\",d=t?c:\"Environment\",S=t&&i.java?\"JavaPackage\":getClassOf(i.java),x=t?c:\"RuntimeObject\";var m=/\\bJava/.test(S)&&i.java;var g=m&&getClassOf(i.environment)==d;var h=m?\"a\":\"α\";var v=m?\"b\":\"β\";var O=i.document||{};var y=i.operamini||i.opera;var w=f.test(w=t&&y?y[\"[[Class]]\"]:getClassOf(y))?w:y=null;var M;var E=e;var P=[];var C=null;var k=e==o;var B=k&&y&&typeof y.version==\"function\"&&y.version();var W;var _=getLayout([{label:\"EdgeHTML\",pattern:\"Edge\"},\"Trident\",{label:\"WebKit\",pattern:\"AppleWebKit\"},\"iCab\",\"Presto\",\"NetFront\",\"Tasman\",\"KHTML\",\"Gecko\"]);var R=getName([\"Adobe AIR\",\"Arora\",\"Avant Browser\",\"Breach\",\"Camino\",\"Electron\",\"Epiphany\",\"Fennec\",\"Flock\",\"Galeon\",\"GreenBrowser\",\"iCab\",\"Iceweasel\",\"K-Meleon\",\"Konqueror\",\"Lunascape\",\"Maxthon\",{label:\"Microsoft Edge\",pattern:\"(?:Edge|Edg|EdgA|EdgiOS)\"},\"Midori\",\"Nook Browser\",\"PaleMoon\",\"PhantomJS\",\"Raven\",\"Rekonq\",\"RockMelt\",{label:\"Samsung Internet\",pattern:\"SamsungBrowser\"},\"SeaMonkey\",{label:\"Silk\",pattern:\"(?:Cloud9|Silk-Accelerated)\"},\"Sleipnir\",\"SlimBrowser\",{label:\"SRWare Iron\",pattern:\"Iron\"},\"Sunrise\",\"Swiftfox\",\"Vivaldi\",\"Waterfox\",\"WebPositive\",{label:\"Yandex Browser\",pattern:\"YaBrowser\"},{label:\"UC Browser\",pattern:\"UCBrowser\"},\"Opera Mini\",{label:\"Opera Mini\",pattern:\"OPiOS\"},\"Opera\",{label:\"Opera\",pattern:\"OPR\"},\"Chromium\",\"Chrome\",{label:\"Chrome\",pattern:\"(?:HeadlessChrome)\"},{label:\"Chrome Mobile\",pattern:\"(?:CriOS|CrMo)\"},{label:\"Firefox\",pattern:\"(?:Firefox|Minefield)\"},{label:\"Firefox for iOS\",pattern:\"FxiOS\"},{label:\"IE\",pattern:\"IEMobile\"},{label:\"IE\",pattern:\"MSIE\"},\"Safari\"]);var A=getProduct([{label:\"BlackBerry\",pattern:\"BB10\"},\"BlackBerry\",{label:\"Galaxy S\",pattern:\"GT-I9000\"},{label:\"Galaxy S2\",pattern:\"GT-I9100\"},{label:\"Galaxy S3\",pattern:\"GT-I9300\"},{label:\"Galaxy S4\",pattern:\"GT-I9500\"},{label:\"Galaxy S5\",pattern:\"SM-G900\"},{label:\"Galaxy S6\",pattern:\"SM-G920\"},{label:\"Galaxy S6 Edge\",pattern:\"SM-G925\"},{label:\"Galaxy S7\",pattern:\"SM-G930\"},{label:\"Galaxy S7 Edge\",pattern:\"SM-G935\"},\"Google TV\",\"Lumia\",\"iPad\",\"iPod\",\"iPhone\",\"Kindle\",{label:\"Kindle Fire\",pattern:\"(?:Cloud9|Silk-Accelerated)\"},\"Nexus\",\"Nook\",\"PlayBook\",\"PlayStation Vita\",\"PlayStation\",\"TouchPad\",\"Transformer\",{label:\"Wii U\",pattern:\"WiiU\"},\"Wii\",\"Xbox One\",{label:\"Xbox 360\",pattern:\"Xbox\"},\"Xoom\"]);var I=getManufacturer({Apple:{iPad:1,iPhone:1,iPod:1},Alcatel:{},Archos:{},Amazon:{Kindle:1,\"Kindle Fire\":1},Asus:{Transformer:1},\"Barnes & Noble\":{Nook:1},BlackBerry:{PlayBook:1},Google:{\"Google TV\":1,Nexus:1},HP:{TouchPad:1},HTC:{},Huawei:{},Lenovo:{},LG:{},Microsoft:{Xbox:1,\"Xbox One\":1},Motorola:{Xoom:1},Nintendo:{\"Wii U\":1,Wii:1},Nokia:{Lumia:1},Oppo:{},Samsung:{\"Galaxy S\":1,\"Galaxy S2\":1,\"Galaxy S3\":1,\"Galaxy S4\":1},Sony:{PlayStation:1,\"PlayStation Vita\":1},Xiaomi:{Mi:1,Redmi:1}});var T=getOS([\"Windows Phone\",\"KaiOS\",\"Android\",\"CentOS\",{label:\"Chrome OS\",pattern:\"CrOS\"},\"Debian\",{label:\"DragonFly BSD\",pattern:\"DragonFly\"},\"Fedora\",\"FreeBSD\",\"Gentoo\",\"Haiku\",\"Kubuntu\",\"Linux Mint\",\"OpenBSD\",\"Red Hat\",\"SuSE\",\"Ubuntu\",\"Xubuntu\",\"Cygwin\",\"Symbian OS\",\"hpwOS\",\"webOS \",\"webOS\",\"Tablet OS\",\"Tizen\",\"Linux\",\"Mac OS X\",\"Macintosh\",\"Mac\",\"Windows 98;\",\"Windows \"]);function getLayout(i){return reduce(i,(function(i,t){return i||RegExp(\"\\\\b\"+(t.pattern||qualify(t))+\"\\\\b\",\"i\").exec(e)&&(t.label||t)}))}function getManufacturer(i){return reduce(i,(function(i,t,r){return i||(t[A]||t[/^[a-z]+(?: +[a-z]+\\b)*/i.exec(A)]||RegExp(\"\\\\b\"+qualify(r)+\"(?:\\\\b|\\\\w*\\\\d)\",\"i\").exec(e))&&r}))}function getName(i){return reduce(i,(function(i,t){return i||RegExp(\"\\\\b\"+(t.pattern||qualify(t))+\"\\\\b\",\"i\").exec(e)&&(t.label||t)}))}function getOS(i){return reduce(i,(function(i,t){var r=t.pattern||qualify(t);if(!i&&(i=RegExp(\"\\\\b\"+r+\"(?:/[\\\\d.]+|[ \\\\w.]*)\",\"i\").exec(e))){i=cleanupOS(i,r,t.label||t)}return i}))}function getProduct(i){return reduce(i,(function(i,t){var r=t.pattern||qualify(t);if(!i&&(i=RegExp(\"\\\\b\"+r+\" *\\\\d+[.\\\\w_]*\",\"i\").exec(e)||RegExp(\"\\\\b\"+r+\" *\\\\w+-[\\\\w]*\",\"i\").exec(e)||RegExp(\"\\\\b\"+r+\"(?:; *(?:[a-z]+[_-])?[a-z]+\\\\d+|[^ ();-]*)\",\"i\").exec(e))){if((i=String(t.label&&!RegExp(r,\"i\").test(t.label)?t.label:i).split(\"/\"))[1]&&!/[\\d.]+/.test(i[0])){i[0]+=\" \"+i[1]}t=t.label||t;i=format(i[0].replace(RegExp(r,\"i\"),t).replace(RegExp(\"; *(?:\"+t+\"[_-])?\",\"i\"),\" \").replace(RegExp(\"(\"+t+\")[-_.]?(\\\\w)\",\"i\"),\"$1 $2\"))}return i}))}function getVersion(i){return reduce(i,(function(i,t){return i||(RegExp(t+\"(?:-[\\\\d.]+/|(?: for [\\\\w-]+)?[ /-])([\\\\d.]+[^ ();/_-]*)\",\"i\").exec(e)||0)[1]||null}))}function toStringPlatform(){return this.description||\"\"}_&&(_=[_]);if(/\\bAndroid\\b/.test(T)&&!A&&(M=/\\bAndroid[^;]*;(.*?)(?:Build|\\) AppleWebKit)\\b/i.exec(e))){A=trim(M[1]).replace(/^[a-z]{2}-[a-z]{2};\\s*/i,\"\")||null}if(I&&!A){A=getProduct([I])}else if(I&&A){A=A.replace(RegExp(\"^(\"+qualify(I)+\")[-_.\\\\s]\",\"i\"),I+\" \").replace(RegExp(\"^(\"+qualify(I)+\")[-_.]?(\\\\w)\",\"i\"),I+\" $2\")}if(M=/\\bGoogle TV\\b/.exec(A)){A=M[0]}if(/\\bSimulator\\b/i.test(e)){A=(A?A+\" \":\"\")+\"Simulator\"}if(R==\"Opera Mini\"&&/\\bOPiOS\\b/.test(e)){P.push(\"running in Turbo/Uncompressed mode\")}if(R==\"IE\"&&/\\blike iPhone OS\\b/.test(e)){M=parse(e.replace(/like iPhone OS/,\"\"));I=M.manufacturer;A=M.product}else if(/^iP/.test(A)){R||(R=\"Safari\");T=\"iOS\"+((M=/ OS ([\\d_]+)/i.exec(e))?\" \"+M[1].replace(/_/g,\".\"):\"\")}else if(R==\"Konqueror\"&&/^Linux\\b/i.test(T)){T=\"Kubuntu\"}else if(I&&I!=\"Google\"&&(/Chrome/.test(R)&&!/\\bMobile Safari\\b/i.test(e)||/\\bVita\\b/.test(A))||/\\bAndroid\\b/.test(T)&&/^Chrome/.test(R)&&/\\bVersion\\//i.test(e)){R=\"Android Browser\";T=/\\bAndroid\\b/.test(T)?T:\"Android\"}else if(R==\"Silk\"){if(!/\\bMobi/i.test(e)){T=\"Android\";P.unshift(\"desktop mode\")}if(/Accelerated *= *true/i.test(e)){P.unshift(\"accelerated\")}}else if(R==\"UC Browser\"&&/\\bUCWEB\\b/.test(e)){P.push(\"speed mode\")}else if(R==\"PaleMoon\"&&(M=/\\bFirefox\\/([\\d.]+)\\b/.exec(e))){P.push(\"identifying as Firefox \"+M[1])}else if(R==\"Firefox\"&&(M=/\\b(Mobile|Tablet|TV)\\b/i.exec(e))){T||(T=\"Firefox OS\");A||(A=M[1])}else if(!R||(M=!/\\bMinefield\\b/i.test(e)&&/\\b(?:Firefox|Safari)\\b/.exec(R))){if(R&&!A&&/[\\/,]|^[^(]+?\\)/.test(e.slice(e.indexOf(M+\"/\")+8))){R=null}if((M=A||I||T)&&(A||I||/\\b(?:Android|Symbian OS|Tablet OS|webOS)\\b/.test(T))){R=/[a-z]+(?: Hat)?/i.exec(/\\bAndroid\\b/.test(T)?T:M)+\" Browser\"}}else if(R==\"Electron\"&&(M=(/\\bChrome\\/([\\d.]+)\\b/.exec(e)||0)[1])){P.push(\"Chromium \"+M)}if(!B){B=getVersion([\"(?:Cloud9|CriOS|CrMo|Edge|Edg|EdgA|EdgiOS|FxiOS|HeadlessChrome|IEMobile|Iron|Opera ?Mini|OPiOS|OPR|Raven|SamsungBrowser|Silk(?!/[\\\\d.]+$)|UCBrowser|YaBrowser)\",\"Version\",qualify(R),\"(?:Firefox|Minefield|NetFront)\"])}if(M=_==\"iCab\"&&parseFloat(B)>3&&\"WebKit\"||/\\bOpera\\b/.test(R)&&(/\\bOPR\\b/.test(e)?\"Blink\":\"Presto\")||/\\b(?:Midori|Nook|Safari)\\b/i.test(e)&&!/^(?:Trident|EdgeHTML)$/.test(_)&&\"WebKit\"||!_&&/\\bMSIE\\b/i.test(e)&&(T==\"Mac OS\"?\"Tasman\":\"Trident\")||_==\"WebKit\"&&/\\bPlayStation\\b(?! Vita\\b)/i.test(R)&&\"NetFront\"){_=[M]}if(R==\"IE\"&&(M=(/; *(?:XBLWP|ZuneWP)(\\d+)/i.exec(e)||0)[1])){R+=\" Mobile\";T=\"Windows Phone \"+(/\\+$/.test(M)?M:M+\".x\");P.unshift(\"desktop mode\")}else if(/\\bWPDesktop\\b/i.test(e)){R=\"IE Mobile\";T=\"Windows Phone 8.x\";P.unshift(\"desktop mode\");B||(B=(/\\brv:([\\d.]+)/.exec(e)||0)[1])}else if(R!=\"IE\"&&_==\"Trident\"&&(M=/\\brv:([\\d.]+)/.exec(e))){if(R){P.push(\"identifying as \"+R+(B?\" \"+B:\"\"))}R=\"IE\";B=M[1]}if(k){if(isHostType(i,\"global\")){if(m){M=m.lang.System;E=M.getProperty(\"os.arch\");T=T||M.getProperty(\"os.name\")+\" \"+M.getProperty(\"os.version\")}if(g){try{B=i.require(\"ringo/engine\").version.join(\".\");R=\"RingoJS\"}catch(e){if((M=i.system)&&M.global.system==i.system){R=\"Narwhal\";T||(T=M[0].os||null)}}if(!R){R=\"Rhino\"}}else if(typeof i.process==\"object\"&&!i.process.browser&&(M=i.process)){if(typeof M.versions==\"object\"){if(typeof M.versions.electron==\"string\"){P.push(\"Node \"+M.versions.node);R=\"Electron\";B=M.versions.electron}else if(typeof M.versions.nw==\"string\"){P.push(\"Chromium \"+B,\"Node \"+M.versions.node);R=\"NW.js\";B=M.versions.nw}}if(!R){R=\"Node.js\";E=M.arch;T=M.platform;B=/[\\d.]+/.exec(M.version);B=B?B[0]:null}}}else if(getClassOf(M=i.runtime)==p){R=\"Adobe AIR\";T=M.flash.system.Capabilities.os}else if(getClassOf(M=i.phantom)==x){R=\"PhantomJS\";B=(M=M.version||null)&&M.major+\".\"+M.minor+\".\"+M.patch}else if(typeof O.documentMode==\"number\"&&(M=/\\bTrident\\/(\\d+)/i.exec(e))){B=[B,O.documentMode];if((M=+M[1]+4)!=B[1]){P.push(\"IE \"+B[1]+\" mode\");_&&(_[1]=\"\");B[1]=M}B=R==\"IE\"?String(B[1].toFixed(1)):B[0]}else if(typeof O.documentMode==\"number\"&&/^(?:Chrome|Firefox)\\b/.test(R)){P.push(\"masking as \"+R+\" \"+B);R=\"IE\";B=\"11.0\";_=[\"Trident\"];T=\"Windows\"}T=T&&format(T)}if(B&&(M=/(?:[ab]|dp|pre|[ab]\\d+pre)(?:\\d+\\+?)?$/i.exec(B)||/(?:alpha|beta)(?: ?\\d)?/i.exec(e+\";\"+(k&&n.appMinorVersion))||/\\bMinefield\\b/i.test(e)&&\"a\")){C=/b/i.test(M)?\"beta\":\"alpha\";B=B.replace(RegExp(M+\"\\\\+?$\"),\"\")+(C==\"beta\"?v:h)+(/\\d+\\+?/.exec(M)||\"\")}if(R==\"Fennec\"||R==\"Firefox\"&&/\\b(?:Android|Firefox OS|KaiOS)\\b/.test(T)){R=\"Firefox Mobile\"}else if(R==\"Maxthon\"&&B){B=B.replace(/\\.[\\d.]+/,\".x\")}else if(/\\bXbox\\b/i.test(A)){if(A==\"Xbox 360\"){T=null}if(A==\"Xbox 360\"&&/\\bIEMobile\\b/.test(e)){P.unshift(\"mobile mode\")}}else if((/^(?:Chrome|IE|Opera)$/.test(R)||R&&!A&&!/Browser|Mobi/.test(R))&&(T==\"Windows CE\"||/Mobi/i.test(e))){R+=\" Mobile\"}else if(R==\"IE\"&&k){try{if(i.external===null){P.unshift(\"platform preview\")}}catch(e){P.unshift(\"embedded\")}}else if((/\\bBlackBerry\\b/.test(A)||/\\bBB10\\b/.test(e))&&(M=(RegExp(A.replace(/ +/g,\" *\")+\"/([.\\\\d]+)\",\"i\").exec(e)||0)[1]||B)){M=[M,/BB10/.test(e)];T=(M[1]?(A=null,I=\"BlackBerry\"):\"Device Software\")+\" \"+M[0];B=null}else if(this!=forOwn&&A!=\"Wii\"&&(k&&y||/Opera/.test(R)&&/\\b(?:MSIE|Firefox)\\b/i.test(e)||R==\"Firefox\"&&/\\bOS X (?:\\d+\\.){2,}/.test(T)||R==\"IE\"&&(T&&!/^Win/.test(T)&&B>5.5||/\\bWindows XP\\b/.test(T)&&B>8||B==8&&!/\\bTrident\\b/.test(e)))&&!f.test(M=parse.call(forOwn,e.replace(f,\"\")+\";\"))&&M.name){M=\"ing as \"+M.name+((M=M.version)?\" \"+M:\"\");if(f.test(R)){if(/\\bIE\\b/.test(M)&&T==\"Mac OS\"){T=null}M=\"identify\"+M}else{M=\"mask\"+M;if(w){R=format(w.replace(/([a-z])([A-Z])/g,\"$1 $2\"))}else{R=\"Opera\"}if(/\\bIE\\b/.test(M)){T=null}if(!k){B=null}}_=[\"Presto\"];P.push(M)}if(M=(/\\bAppleWebKit\\/([\\d.]+\\+?)/i.exec(e)||0)[1]){M=[parseFloat(M.replace(/\\.(\\d)$/,\".0$1\")),M];if(R==\"Safari\"&&M[1].slice(-1)==\"+\"){R=\"WebKit Nightly\";C=\"alpha\";B=M[1].slice(0,-1)}else if(B==M[1]||B==(M[2]=(/\\bSafari\\/([\\d.]+\\+?)/i.exec(e)||0)[1])){B=null}M[1]=(/\\b(?:Headless)?Chrome\\/([\\d.]+)/i.exec(e)||0)[1];if(M[0]==537.36&&M[2]==537.36&&parseFloat(M[1])>=28&&_==\"WebKit\"){_=[\"Blink\"]}if(!k||!s&&!M[1]){_&&(_[1]=\"like Safari\");M=(M=M[0],M<400?1:M<500?2:M<526?3:M<533?4:M<534?\"4+\":M<535?5:M<537?6:M<538?7:M<601?8:M<602?9:M<604?10:M<606?11:M<608?12:\"12\")}else{_&&(_[1]=\"like Chrome\");M=M[1]||(M=M[0],M<530?1:M<532?2:M<532.05?3:M<533?4:M<534.03?5:M<534.07?6:M<534.1?7:M<534.13?8:M<534.16?9:M<534.24?10:M<534.3?11:M<535.01?12:M<535.02?\"13+\":M<535.07?15:M<535.11?16:M<535.19?17:M<536.05?18:M<536.1?19:M<537.01?20:M<537.11?\"21+\":M<537.13?23:M<537.18?24:M<537.24?25:M<537.36?26:_!=\"Blink\"?\"27\":\"28\")}_&&(_[1]+=\" \"+(M+=typeof M==\"number\"?\".x\":/[.+]/.test(M)?\"\":\"+\"));if(R==\"Safari\"&&(!B||parseInt(B)>45)){B=M}else if(R==\"Chrome\"&&/\\bHeadlessChrome/i.test(e)){P.unshift(\"headless\")}}if(R==\"Opera\"&&(M=/\\bzbov|zvav$/.exec(T))){R+=\" \";P.unshift(\"desktop mode\");if(M==\"zvav\"){R+=\"Mini\";B=null}else{R+=\"Mobile\"}T=T.replace(RegExp(\" *\"+M+\"$\"),\"\")}else if(R==\"Safari\"&&/\\bChrome\\b/.exec(_&&_[1])){P.unshift(\"desktop mode\");R=\"Chrome Mobile\";B=null;if(/\\bOS X\\b/.test(T)){I=\"Apple\";T=\"iOS 4.3+\"}else{T=null}}else if(/\\bSRWare Iron\\b/.test(R)&&!B){B=getVersion(\"Chrome\")}if(B&&B.indexOf(M=/[\\d.]+$/.exec(T))==0&&e.indexOf(\"/\"+M+\"-\")>-1){T=trim(T.replace(M,\"\"))}if(T&&T.indexOf(R)!=-1&&!RegExp(R+\" OS\").test(T)){T=T.replace(RegExp(\" *\"+qualify(R)+\" *\"),\"\")}if(_&&!/\\b(?:Avant|Nook)\\b/.test(R)&&(/Browser|Lunascape|Maxthon/.test(R)||R!=\"Safari\"&&/^iOS/.test(T)&&/\\bSafari\\b/.test(_[1])||/^(?:Adobe|Arora|Breach|Midori|Opera|Phantom|Rekonq|Rock|Samsung Internet|Sleipnir|SRWare Iron|Vivaldi|Web)/.test(R)&&_[1])){(M=_[_.length-1])&&P.push(M)}if(P.length){P=[\"(\"+P.join(\"; \")+\")\"]}if(I&&A&&A.indexOf(I)<0){P.push(\"on \"+I)}if(A){P.push((/^on /.test(P[P.length-1])?\"\":\"on \")+A)}if(T){M=/ ([\\d.+]+)$/.exec(T);W=M&&T.charAt(T.length-M[0].length-1)==\"/\";T={architecture:32,family:M&&!W?T.replace(M[0],\"\"):T,version:M?M[1]:null,toString:function(){var e=this.version;return this.family+(e&&!W?\" \"+e:\"\")+(this.architecture==64?\" 64-bit\":\"\")}}}if((M=/\\b(?:AMD|IA|Win|WOW|x86_|x)64\\b/i.exec(E))&&!/\\bi686\\b/i.test(E)){if(T){T.architecture=64;T.family=T.family.replace(RegExp(\" *\"+M),\"\")}if(R&&(/\\bWOW64\\b/i.test(e)||k&&/\\w(?:86|32)$/.test(n.cpuClass||n.platform)&&!/\\bWin64; x64\\b/i.test(e))){P.unshift(\"32-bit\")}}else if(T&&/^OS X/.test(T.family)&&R==\"Chrome\"&&parseFloat(B)>=39){T.architecture=64}e||(e=null);var F={};F.description=e;F.layout=_&&_[0];F.manufacturer=I;F.name=R;F.prerelease=C;F.product=A;F.ua=e;F.version=R&&B;F.os=T||{architecture:null,family:null,version:null,toString:function(){return\"null\"}};F.parse=parse;F.toString=toStringPlatform;if(F.version){P.unshift(B)}if(F.name){P.unshift(R)}if(T&&R&&!(T==String(T).split(\" \")[0]&&(T==R.split(\" \")[0]||A))){P.push(A?\"(\"+T+\")\":\"on \"+T)}if(P.length){F.description=P.join(\" \")}return F}var d=parse();if(n&&o){forOwn(d,(function(e,i){n[i]=e}))}else{r.platform=d}}).call(this)}};var i={};function __nccwpck_require__(t){var r=i[t];if(r!==undefined){return r.exports}var a=i[t]={id:t,loaded:false,exports:{}};var n=true;try{e[t].call(a.exports,a,a.exports,__nccwpck_require__);n=false}finally{if(n)delete i[t]}a.loaded=true;return a.exports}(()=>{__nccwpck_require__.nmd=e=>{e.paths=[];if(!e.children)e.children=[];return e}})();if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(541);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3BsYXRmb3JtL3BsYXRmb3JtLmpzIiwibWFwcGluZ3MiOiI7QUFBQSxNQUFNLE9BQU8sb0JBQW9CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGFBQWEsT0FBTywyQkFBMkIscUNBQXFDLFFBQVEscUJBQXFCLHFDQUFxQyxtQkFBbUIscUJBQU0sWUFBWSxxQkFBTSxDQUFDLGdEQUFnRCxJQUFJLHVCQUF1QixnQkFBZ0IsV0FBVyx1QkFBdUIsdUJBQXVCLGlCQUFpQix1QkFBdUIsWUFBWSw0Q0FBNEMsMEJBQTBCLE9BQU8sME1BQTBNLGlGQUFpRixlQUFlLFlBQVksU0FBUyw2QkFBNkIsbVpBQW1aLFNBQVMsbUJBQW1CLHdCQUF3QixtQ0FBbUMsYUFBYSxhQUFhLEtBQUssYUFBYSxtQkFBbUIsVUFBVSxxREFBcUQscUJBQXFCLGdCQUFnQixnQkFBZ0IsY0FBYyx1QkFBdUIsbURBQW1ELHlCQUF5QixtQ0FBbUMsa0ZBQWtGLG9CQUFvQiwrQ0FBK0MscUJBQXFCLFdBQVcsc0JBQXNCLGFBQWEsR0FBRyxTQUFTLGlCQUFpQix3Q0FBd0Msa0JBQWtCLFFBQVEscURBQXFELE1BQU0sSUFBSSxPQUFPLHNCQUFzQixzQkFBc0IsU0FBUyxjQUFjLGdGQUFnRix3SUFBd0ksK0JBQStCLHNDQUFzQyxnQkFBZ0IsZ0JBQWdCLHFCQUFxQiwyQkFBMkIsMkRBQTJELE1BQU0sUUFBUSxTQUFTLFdBQVcsV0FBVyxzREFBc0QsTUFBTSxrQkFBa0IsZ0NBQWdDLFlBQVkscUNBQXFDLHVEQUF1RCxxTUFBcU0sMERBQTBELDZFQUE2RSxrREFBa0QsY0FBYyxtREFBbUQsMkJBQTJCLG1DQUFtQywwREFBMEQsMkNBQTJDLEVBQUUsdUNBQXVDLGVBQWUsbUNBQW1DLFVBQVUsNEJBQTRCLHNCQUFzQiw0Q0FBNEMsRUFBRSwrQ0FBK0MsRUFBRSxnREFBZ0QsRUFBRSx3Q0FBd0MsRUFBRSw4QkFBOEIsRUFBRSwwQkFBMEIsWUFBWSxtQkFBbUIsa0NBQWtDLGVBQWUsb0NBQW9DLEVBQUUscUNBQXFDLEVBQUUscUNBQXFDLEVBQUUscUNBQXFDLEVBQUUsb0NBQW9DLEVBQUUsb0NBQW9DLEVBQUUseUNBQXlDLEVBQUUsb0NBQW9DLEVBQUUseUNBQXlDLHNEQUFzRCwwREFBMEQsc0ZBQXNGLDZCQUE2QixtQkFBbUIsZ0NBQWdDLFVBQVUsdUJBQXVCLE9BQU8sdUJBQXVCLFdBQVcsVUFBVSxTQUFTLHlCQUF5QixPQUFPLGNBQWMsbUJBQW1CLE9BQU8sYUFBYSxXQUFXLFNBQVMsc0JBQXNCLEtBQUssV0FBVyxPQUFPLFVBQVUsVUFBVSxNQUFNLFlBQVksb0JBQW9CLFdBQVcsT0FBTyxXQUFXLGdCQUFnQixRQUFRLFFBQVEsUUFBUSxVQUFVLHVEQUF1RCxPQUFPLG1DQUFtQyxTQUFTLGNBQWMsRUFBRSx5REFBeUQsaUNBQWlDLFdBQVcsMENBQTBDLDhOQUE4TixlQUFlLHNCQUFzQiwrQkFBK0IsZ0ZBQWdGLEdBQUcsNEJBQTRCLGlDQUFpQyxrSEFBa0gsR0FBRyxvQkFBb0IsK0JBQStCLGdGQUFnRixHQUFHLGtCQUFrQiwrQkFBK0IsNEJBQTRCLGdFQUFnRSw0QkFBNEIsU0FBUyxHQUFHLHVCQUF1QiwrQkFBK0IsNEJBQTRCLDBIQUEwSCxpQ0FBaUMscUJBQXFCLG9HQUFvRyxlQUFlLGFBQWEseURBQXlELDhFQUE4RSxTQUFTLEdBQUcsdUJBQXVCLCtCQUErQix1RUFBdUUsa0NBQWtDLEdBQUcsNEJBQTRCLDRCQUE0QixXQUFXLDhDQUE4QyxHQUFHLDRDQUE0Qyw2QkFBNkIsRUFBRSxPQUFPLEdBQUcsZ0JBQWdCLFVBQVUsa0JBQWtCLGNBQWMsdUhBQXVILDhCQUE4QixPQUFPLDZCQUE2QiwyQkFBMkIseUNBQXlDLDZDQUE2QywwQ0FBMEMsd0NBQXdDLGlCQUFpQixZQUFZLHVCQUF1QixnQkFBZ0Isb0VBQW9FLDZDQUE2QyxZQUFZLGlLQUFpSyxvQkFBb0Isb0NBQW9DLG1CQUFtQix1QkFBdUIsWUFBWSwwQkFBMEIsb0NBQW9DLDBCQUEwQiw4Q0FBOEMscUJBQXFCLDREQUE0RCx1Q0FBdUMsNkRBQTZELG9CQUFvQixZQUFZLDZFQUE2RSwrREFBK0QsT0FBTyw4RUFBOEUsaUVBQWlFLG1FQUFtRSxzQkFBc0IsT0FBTyx1T0FBdU8scVRBQXFULE1BQU0sbUJBQW1CLDBDQUEwQyxhQUFhLDRDQUE0QywwQkFBMEIsa0NBQWtDLGNBQWMsc0JBQXNCLDBCQUEwQix1Q0FBdUMsNERBQTRELE1BQU0seUNBQXlDLE9BQU8sT0FBTyxNQUFNLDJCQUEyQixNQUFNLGdCQUFnQiwyQkFBMkIsOERBQThELE1BQU0sSUFBSSw4Q0FBOEMsWUFBWSxTQUFTLDRDQUE0QyxZQUFZLHNCQUFzQixPQUFPLFdBQVcsdUVBQXVFLGdDQUFnQyx5Q0FBeUMsZ0NBQWdDLGFBQWEsc0JBQXNCLHdDQUF3Qyw4Q0FBOEMsVUFBVSxpQkFBaUIsT0FBTyxZQUFZLFNBQVMsYUFBYSwyQkFBMkIsZ0JBQWdCLG9DQUFvQyxjQUFjLGlDQUFpQyxvQ0FBb0MsY0FBYyx1REFBdUQsMEVBQTBFLHFCQUFxQixzQkFBc0IsMkJBQTJCLGFBQWEsT0FBTyx1Q0FBdUMsMEVBQTBFLDhCQUE4QixPQUFPLFNBQVMsY0FBYyxZQUFZLGVBQWUsZ0dBQWdHLDJEQUEyRCw4QkFBOEIseUVBQXlFLDBFQUEwRSxtQkFBbUIseUJBQXlCLDZCQUE2Qiw2QkFBNkIsa0JBQWtCLE9BQU8sMENBQTBDLDBCQUEwQiwrR0FBK0csYUFBYSxvQkFBb0IsSUFBSSxzQkFBc0IsK0JBQStCLFNBQVMsdUJBQXVCLCtIQUErSCxxQkFBcUIsNERBQTRELE9BQU8seUhBQXlILEdBQUcsNkpBQTZKLGFBQWEsNENBQTRDLGNBQWMsa0NBQWtDLE9BQU8sZUFBZSxLQUFLLFdBQVcsTUFBTSwrQ0FBK0MsS0FBSyxVQUFVLHFCQUFxQixPQUFPLE9BQU8sUUFBUSxhQUFhLFVBQVUsb0RBQW9ELDhDQUE4QyxxQ0FBcUMsbUJBQW1CLFVBQVUsbUJBQW1CLHFFQUFxRSxPQUFPLHdEQUF3RCxrRUFBa0UsWUFBWSxrQkFBa0Isd0JBQXdCLDhIQUE4SCxLQUFLLHdCQUF3Qix1VEFBdVQsa0VBQWtFLHNDQUFzQyxJQUFJLGtEQUFrRCx1QkFBdUIsMkNBQTJDLE9BQU8sMEJBQTBCLGNBQWMsVUFBVSxPQUFPLEtBQUssWUFBWSxtQ0FBbUMsaURBQWlELDBCQUEwQixrQkFBa0IsT0FBTyx1QkFBdUIsVUFBVSxhQUFhLEtBQUssUUFBUSx1Q0FBdUMsdUJBQXVCLGtFQUFrRSx3QkFBd0Isa0RBQWtELDZDQUE2Qyw4UEFBOFAsNkJBQTZCLGFBQWEsaUJBQWlCLFFBQVEseUJBQXlCLGdCQUFnQixNQUFNLGdEQUFnRCxNQUFNLHdCQUF3QiwyQ0FBMkMsR0FBRywwRkFBMEYsbUJBQW1CLDJFQUEyRSx5RUFBeUUsTUFBTSxrQkFBa0IsNkNBQTZDLHdGQUF3RixrQkFBa0IscUJBQXFCLG1FQUFtRSxrQkFBa0IsWUFBWSxTQUFTLGdCQUFnQixpQkFBaUIsaUJBQWlCLFNBQVMsZUFBZSxZQUFZLE9BQU8sZUFBZSxTQUFTLCtEQUErRCxlQUFlLGNBQWMsNEJBQTRCLGNBQWMsYUFBYSxXQUFXLGFBQWEsaUVBQWlFLDRCQUE0QixhQUFhLDBCQUEwQixTQUFTLGNBQWMsU0FBUyx3QkFBd0IsT0FBTyxHQUFHLEtBQUssY0FBYyxlQUFlLFNBQVMsZ0NBQWdDLFdBQVcsa0JBQWtCLGlCQUFpQixZQUFZLDhCQUE4QixXQUFXLElBQUkscURBQXFELFFBQVEsUUFBUSxpQkFBaUIsY0FBYyxpQkFBaUIsTUFBTSw0QkFBNEIsV0FBVyw2QkFBNkIsVUFBVSxJQUFJLG1FQUFtRSxTQUFTLEtBQUssK0JBQStCLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3BsYXRmb3JtL3BsYXRmb3JtLmpzP2VhZmYiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57dmFyIGU9ezU0MTpmdW5jdGlvbihlLGksdCl7ZT10Lm5tZChlKTtcbi8qIVxuICogUGxhdGZvcm0uanMgdjEuMy42XG4gKiBDb3B5cmlnaHQgMjAxNC0yMDIwIEJlbmphbWluIFRhblxuICogQ29weXJpZ2h0IDIwMTEtMjAxMyBKb2huLURhdmlkIERhbHRvblxuICogQXZhaWxhYmxlIHVuZGVyIE1JVCBsaWNlbnNlXG4gKi8oZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD17ZnVuY3Rpb246dHJ1ZSxvYmplY3Q6dHJ1ZX07dmFyIHI9dFt0eXBlb2Ygd2luZG93XSYmd2luZG93fHx0aGlzO3ZhciBhPXI7dmFyIG49dFt0eXBlb2YgaV0mJmk7dmFyIG89dFtcIm9iamVjdFwiXSYmZSYmIWUubm9kZVR5cGUmJmU7dmFyIGw9biYmbyYmdHlwZW9mIGdsb2JhbD09XCJvYmplY3RcIiYmZ2xvYmFsO2lmKGwmJihsLmdsb2JhbD09PWx8fGwud2luZG93PT09bHx8bC5zZWxmPT09bCkpe3I9bH12YXIgcz1NYXRoLnBvdygyLDUzKS0xO3ZhciBmPS9cXGJPcGVyYS87dmFyIGI9dGhpczt2YXIgYz1PYmplY3QucHJvdG90eXBlO3ZhciBwPWMuaGFzT3duUHJvcGVydHk7dmFyIHU9Yy50b1N0cmluZztmdW5jdGlvbiBjYXBpdGFsaXplKGUpe2U9U3RyaW5nKGUpO3JldHVybiBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSl9ZnVuY3Rpb24gY2xlYW51cE9TKGUsaSx0KXt2YXIgcj17XCIxMC4wXCI6XCIxMFwiLDYuNDpcIjEwIFRlY2huaWNhbCBQcmV2aWV3XCIsNi4zOlwiOC4xXCIsNi4yOlwiOFwiLDYuMTpcIlNlcnZlciAyMDA4IFIyIC8gN1wiLFwiNi4wXCI6XCJTZXJ2ZXIgMjAwOCAvIFZpc3RhXCIsNS4yOlwiU2VydmVyIDIwMDMgLyBYUCA2NC1iaXRcIiw1LjE6XCJYUFwiLDUuMDE6XCIyMDAwIFNQMVwiLFwiNS4wXCI6XCIyMDAwXCIsXCI0LjBcIjpcIk5UXCIsXCI0LjkwXCI6XCJNRVwifTtpZihpJiZ0JiYvXldpbi9pLnRlc3QoZSkmJiEvXldpbmRvd3MgUGhvbmUgL2kudGVzdChlKSYmKHI9clsvW1xcZC5dKyQvLmV4ZWMoZSldKSl7ZT1cIldpbmRvd3MgXCIrcn1lPVN0cmluZyhlKTtpZihpJiZ0KXtlPWUucmVwbGFjZShSZWdFeHAoaSxcImlcIiksdCl9ZT1mb3JtYXQoZS5yZXBsYWNlKC8gY2UkL2ksXCIgQ0VcIikucmVwbGFjZSgvXFxiaHB3L2ksXCJ3ZWJcIikucmVwbGFjZSgvXFxiTWFjaW50b3NoXFxiLyxcIk1hYyBPU1wiKS5yZXBsYWNlKC9fUG93ZXJQQ1xcYi9pLFwiIE9TXCIpLnJlcGxhY2UoL1xcYihPUyBYKSBbXiBcXGRdKy9pLFwiJDFcIikucmVwbGFjZSgvXFxiTWFjIChPUyBYKVxcYi8sXCIkMVwiKS5yZXBsYWNlKC9cXC8oXFxkKS8sXCIgJDFcIikucmVwbGFjZSgvXy9nLFwiLlwiKS5yZXBsYWNlKC8oPzogQmVQQ3xbIC5dKmZjWyBcXGQuXSspJC9pLFwiXCIpLnJlcGxhY2UoL1xcYng4NlxcLjY0XFxiL2dpLFwieDg2XzY0XCIpLnJlcGxhY2UoL1xcYihXaW5kb3dzIFBob25lKSBPU1xcYi8sXCIkMVwiKS5yZXBsYWNlKC9cXGIoQ2hyb21lIE9TIFxcdyspIFtcXGQuXStcXGIvLFwiJDFcIikuc3BsaXQoXCIgb24gXCIpWzBdKTtyZXR1cm4gZX1mdW5jdGlvbiBlYWNoKGUsaSl7dmFyIHQ9LTEscj1lP2UubGVuZ3RoOjA7aWYodHlwZW9mIHI9PVwibnVtYmVyXCImJnI+LTEmJnI8PXMpe3doaWxlKCsrdDxyKXtpKGVbdF0sdCxlKX19ZWxzZXtmb3JPd24oZSxpKX19ZnVuY3Rpb24gZm9ybWF0KGUpe2U9dHJpbShlKTtyZXR1cm4vXig/OndlYk9TfGkoPzpPU3xQKSkvLnRlc3QoZSk/ZTpjYXBpdGFsaXplKGUpfWZ1bmN0aW9uIGZvck93bihlLGkpe2Zvcih2YXIgdCBpbiBlKXtpZihwLmNhbGwoZSx0KSl7aShlW3RdLHQsZSl9fX1mdW5jdGlvbiBnZXRDbGFzc09mKGUpe3JldHVybiBlPT1udWxsP2NhcGl0YWxpemUoZSk6dS5jYWxsKGUpLnNsaWNlKDgsLTEpfWZ1bmN0aW9uIGlzSG9zdFR5cGUoZSxpKXt2YXIgdD1lIT1udWxsP3R5cGVvZiBlW2ldOlwibnVtYmVyXCI7cmV0dXJuIS9eKD86Ym9vbGVhbnxudW1iZXJ8c3RyaW5nfHVuZGVmaW5lZCkkLy50ZXN0KHQpJiYodD09XCJvYmplY3RcIj8hIWVbaV06dHJ1ZSl9ZnVuY3Rpb24gcXVhbGlmeShlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoLyhbIC1dKSg/ISQpL2csXCIkMT9cIil9ZnVuY3Rpb24gcmVkdWNlKGUsaSl7dmFyIHQ9bnVsbDtlYWNoKGUsKGZ1bmN0aW9uKHIsYSl7dD1pKHQscixhLGUpfSkpO3JldHVybiB0fWZ1bmN0aW9uIHRyaW0oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC9eICt8ICskL2csXCJcIil9ZnVuY3Rpb24gcGFyc2UoZSl7dmFyIGk9cjt2YXIgdD1lJiZ0eXBlb2YgZT09XCJvYmplY3RcIiYmZ2V0Q2xhc3NPZihlKSE9XCJTdHJpbmdcIjtpZih0KXtpPWU7ZT1udWxsfXZhciBuPWkubmF2aWdhdG9yfHx7fTt2YXIgbz1uLnVzZXJBZ2VudHx8XCJcIjtlfHwoZT1vKTt2YXIgbD10fHxiPT1hO3ZhciBzPXQ/ISFuLmxpa2VDaHJvbWU6L1xcYkNocm9tZVxcYi8udGVzdChlKSYmIS9pbnRlcm5hbHxcXG4vaS50ZXN0KHUudG9TdHJpbmcoKSk7dmFyIGM9XCJPYmplY3RcIixwPXQ/YzpcIlNjcmlwdEJyaWRnaW5nUHJveHlPYmplY3RcIixkPXQ/YzpcIkVudmlyb25tZW50XCIsUz10JiZpLmphdmE/XCJKYXZhUGFja2FnZVwiOmdldENsYXNzT2YoaS5qYXZhKSx4PXQ/YzpcIlJ1bnRpbWVPYmplY3RcIjt2YXIgbT0vXFxiSmF2YS8udGVzdChTKSYmaS5qYXZhO3ZhciBnPW0mJmdldENsYXNzT2YoaS5lbnZpcm9ubWVudCk9PWQ7dmFyIGg9bT9cImFcIjpcIs6xXCI7dmFyIHY9bT9cImJcIjpcIs6yXCI7dmFyIE89aS5kb2N1bWVudHx8e307dmFyIHk9aS5vcGVyYW1pbml8fGkub3BlcmE7dmFyIHc9Zi50ZXN0KHc9dCYmeT95W1wiW1tDbGFzc11dXCJdOmdldENsYXNzT2YoeSkpP3c6eT1udWxsO3ZhciBNO3ZhciBFPWU7dmFyIFA9W107dmFyIEM9bnVsbDt2YXIgaz1lPT1vO3ZhciBCPWsmJnkmJnR5cGVvZiB5LnZlcnNpb249PVwiZnVuY3Rpb25cIiYmeS52ZXJzaW9uKCk7dmFyIFc7dmFyIF89Z2V0TGF5b3V0KFt7bGFiZWw6XCJFZGdlSFRNTFwiLHBhdHRlcm46XCJFZGdlXCJ9LFwiVHJpZGVudFwiLHtsYWJlbDpcIldlYktpdFwiLHBhdHRlcm46XCJBcHBsZVdlYktpdFwifSxcImlDYWJcIixcIlByZXN0b1wiLFwiTmV0RnJvbnRcIixcIlRhc21hblwiLFwiS0hUTUxcIixcIkdlY2tvXCJdKTt2YXIgUj1nZXROYW1lKFtcIkFkb2JlIEFJUlwiLFwiQXJvcmFcIixcIkF2YW50IEJyb3dzZXJcIixcIkJyZWFjaFwiLFwiQ2FtaW5vXCIsXCJFbGVjdHJvblwiLFwiRXBpcGhhbnlcIixcIkZlbm5lY1wiLFwiRmxvY2tcIixcIkdhbGVvblwiLFwiR3JlZW5Ccm93c2VyXCIsXCJpQ2FiXCIsXCJJY2V3ZWFzZWxcIixcIkstTWVsZW9uXCIsXCJLb25xdWVyb3JcIixcIkx1bmFzY2FwZVwiLFwiTWF4dGhvblwiLHtsYWJlbDpcIk1pY3Jvc29mdCBFZGdlXCIscGF0dGVybjpcIig/OkVkZ2V8RWRnfEVkZ0F8RWRnaU9TKVwifSxcIk1pZG9yaVwiLFwiTm9vayBCcm93c2VyXCIsXCJQYWxlTW9vblwiLFwiUGhhbnRvbUpTXCIsXCJSYXZlblwiLFwiUmVrb25xXCIsXCJSb2NrTWVsdFwiLHtsYWJlbDpcIlNhbXN1bmcgSW50ZXJuZXRcIixwYXR0ZXJuOlwiU2Ftc3VuZ0Jyb3dzZXJcIn0sXCJTZWFNb25rZXlcIix7bGFiZWw6XCJTaWxrXCIscGF0dGVybjpcIig/OkNsb3VkOXxTaWxrLUFjY2VsZXJhdGVkKVwifSxcIlNsZWlwbmlyXCIsXCJTbGltQnJvd3NlclwiLHtsYWJlbDpcIlNSV2FyZSBJcm9uXCIscGF0dGVybjpcIklyb25cIn0sXCJTdW5yaXNlXCIsXCJTd2lmdGZveFwiLFwiVml2YWxkaVwiLFwiV2F0ZXJmb3hcIixcIldlYlBvc2l0aXZlXCIse2xhYmVsOlwiWWFuZGV4IEJyb3dzZXJcIixwYXR0ZXJuOlwiWWFCcm93c2VyXCJ9LHtsYWJlbDpcIlVDIEJyb3dzZXJcIixwYXR0ZXJuOlwiVUNCcm93c2VyXCJ9LFwiT3BlcmEgTWluaVwiLHtsYWJlbDpcIk9wZXJhIE1pbmlcIixwYXR0ZXJuOlwiT1BpT1NcIn0sXCJPcGVyYVwiLHtsYWJlbDpcIk9wZXJhXCIscGF0dGVybjpcIk9QUlwifSxcIkNocm9taXVtXCIsXCJDaHJvbWVcIix7bGFiZWw6XCJDaHJvbWVcIixwYXR0ZXJuOlwiKD86SGVhZGxlc3NDaHJvbWUpXCJ9LHtsYWJlbDpcIkNocm9tZSBNb2JpbGVcIixwYXR0ZXJuOlwiKD86Q3JpT1N8Q3JNbylcIn0se2xhYmVsOlwiRmlyZWZveFwiLHBhdHRlcm46XCIoPzpGaXJlZm94fE1pbmVmaWVsZClcIn0se2xhYmVsOlwiRmlyZWZveCBmb3IgaU9TXCIscGF0dGVybjpcIkZ4aU9TXCJ9LHtsYWJlbDpcIklFXCIscGF0dGVybjpcIklFTW9iaWxlXCJ9LHtsYWJlbDpcIklFXCIscGF0dGVybjpcIk1TSUVcIn0sXCJTYWZhcmlcIl0pO3ZhciBBPWdldFByb2R1Y3QoW3tsYWJlbDpcIkJsYWNrQmVycnlcIixwYXR0ZXJuOlwiQkIxMFwifSxcIkJsYWNrQmVycnlcIix7bGFiZWw6XCJHYWxheHkgU1wiLHBhdHRlcm46XCJHVC1JOTAwMFwifSx7bGFiZWw6XCJHYWxheHkgUzJcIixwYXR0ZXJuOlwiR1QtSTkxMDBcIn0se2xhYmVsOlwiR2FsYXh5IFMzXCIscGF0dGVybjpcIkdULUk5MzAwXCJ9LHtsYWJlbDpcIkdhbGF4eSBTNFwiLHBhdHRlcm46XCJHVC1JOTUwMFwifSx7bGFiZWw6XCJHYWxheHkgUzVcIixwYXR0ZXJuOlwiU00tRzkwMFwifSx7bGFiZWw6XCJHYWxheHkgUzZcIixwYXR0ZXJuOlwiU00tRzkyMFwifSx7bGFiZWw6XCJHYWxheHkgUzYgRWRnZVwiLHBhdHRlcm46XCJTTS1HOTI1XCJ9LHtsYWJlbDpcIkdhbGF4eSBTN1wiLHBhdHRlcm46XCJTTS1HOTMwXCJ9LHtsYWJlbDpcIkdhbGF4eSBTNyBFZGdlXCIscGF0dGVybjpcIlNNLUc5MzVcIn0sXCJHb29nbGUgVFZcIixcIkx1bWlhXCIsXCJpUGFkXCIsXCJpUG9kXCIsXCJpUGhvbmVcIixcIktpbmRsZVwiLHtsYWJlbDpcIktpbmRsZSBGaXJlXCIscGF0dGVybjpcIig/OkNsb3VkOXxTaWxrLUFjY2VsZXJhdGVkKVwifSxcIk5leHVzXCIsXCJOb29rXCIsXCJQbGF5Qm9va1wiLFwiUGxheVN0YXRpb24gVml0YVwiLFwiUGxheVN0YXRpb25cIixcIlRvdWNoUGFkXCIsXCJUcmFuc2Zvcm1lclwiLHtsYWJlbDpcIldpaSBVXCIscGF0dGVybjpcIldpaVVcIn0sXCJXaWlcIixcIlhib3ggT25lXCIse2xhYmVsOlwiWGJveCAzNjBcIixwYXR0ZXJuOlwiWGJveFwifSxcIlhvb21cIl0pO3ZhciBJPWdldE1hbnVmYWN0dXJlcih7QXBwbGU6e2lQYWQ6MSxpUGhvbmU6MSxpUG9kOjF9LEFsY2F0ZWw6e30sQXJjaG9zOnt9LEFtYXpvbjp7S2luZGxlOjEsXCJLaW5kbGUgRmlyZVwiOjF9LEFzdXM6e1RyYW5zZm9ybWVyOjF9LFwiQmFybmVzICYgTm9ibGVcIjp7Tm9vazoxfSxCbGFja0JlcnJ5OntQbGF5Qm9vazoxfSxHb29nbGU6e1wiR29vZ2xlIFRWXCI6MSxOZXh1czoxfSxIUDp7VG91Y2hQYWQ6MX0sSFRDOnt9LEh1YXdlaTp7fSxMZW5vdm86e30sTEc6e30sTWljcm9zb2Z0OntYYm94OjEsXCJYYm94IE9uZVwiOjF9LE1vdG9yb2xhOntYb29tOjF9LE5pbnRlbmRvOntcIldpaSBVXCI6MSxXaWk6MX0sTm9raWE6e0x1bWlhOjF9LE9wcG86e30sU2Ftc3VuZzp7XCJHYWxheHkgU1wiOjEsXCJHYWxheHkgUzJcIjoxLFwiR2FsYXh5IFMzXCI6MSxcIkdhbGF4eSBTNFwiOjF9LFNvbnk6e1BsYXlTdGF0aW9uOjEsXCJQbGF5U3RhdGlvbiBWaXRhXCI6MX0sWGlhb21pOntNaToxLFJlZG1pOjF9fSk7dmFyIFQ9Z2V0T1MoW1wiV2luZG93cyBQaG9uZVwiLFwiS2FpT1NcIixcIkFuZHJvaWRcIixcIkNlbnRPU1wiLHtsYWJlbDpcIkNocm9tZSBPU1wiLHBhdHRlcm46XCJDck9TXCJ9LFwiRGViaWFuXCIse2xhYmVsOlwiRHJhZ29uRmx5IEJTRFwiLHBhdHRlcm46XCJEcmFnb25GbHlcIn0sXCJGZWRvcmFcIixcIkZyZWVCU0RcIixcIkdlbnRvb1wiLFwiSGFpa3VcIixcIkt1YnVudHVcIixcIkxpbnV4IE1pbnRcIixcIk9wZW5CU0RcIixcIlJlZCBIYXRcIixcIlN1U0VcIixcIlVidW50dVwiLFwiWHVidW50dVwiLFwiQ3lnd2luXCIsXCJTeW1iaWFuIE9TXCIsXCJocHdPU1wiLFwid2ViT1MgXCIsXCJ3ZWJPU1wiLFwiVGFibGV0IE9TXCIsXCJUaXplblwiLFwiTGludXhcIixcIk1hYyBPUyBYXCIsXCJNYWNpbnRvc2hcIixcIk1hY1wiLFwiV2luZG93cyA5ODtcIixcIldpbmRvd3MgXCJdKTtmdW5jdGlvbiBnZXRMYXlvdXQoaSl7cmV0dXJuIHJlZHVjZShpLChmdW5jdGlvbihpLHQpe3JldHVybiBpfHxSZWdFeHAoXCJcXFxcYlwiKyh0LnBhdHRlcm58fHF1YWxpZnkodCkpK1wiXFxcXGJcIixcImlcIikuZXhlYyhlKSYmKHQubGFiZWx8fHQpfSkpfWZ1bmN0aW9uIGdldE1hbnVmYWN0dXJlcihpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCxyKXtyZXR1cm4gaXx8KHRbQV18fHRbL15bYS16XSsoPzogK1thLXpdK1xcYikqL2kuZXhlYyhBKV18fFJlZ0V4cChcIlxcXFxiXCIrcXVhbGlmeShyKStcIig/OlxcXFxifFxcXFx3KlxcXFxkKVwiLFwiaVwiKS5leGVjKGUpKSYmcn0pKX1mdW5jdGlvbiBnZXROYW1lKGkpe3JldHVybiByZWR1Y2UoaSwoZnVuY3Rpb24oaSx0KXtyZXR1cm4gaXx8UmVnRXhwKFwiXFxcXGJcIisodC5wYXR0ZXJufHxxdWFsaWZ5KHQpKStcIlxcXFxiXCIsXCJpXCIpLmV4ZWMoZSkmJih0LmxhYmVsfHx0KX0pKX1mdW5jdGlvbiBnZXRPUyhpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCl7dmFyIHI9dC5wYXR0ZXJufHxxdWFsaWZ5KHQpO2lmKCFpJiYoaT1SZWdFeHAoXCJcXFxcYlwiK3IrXCIoPzovW1xcXFxkLl0rfFsgXFxcXHcuXSopXCIsXCJpXCIpLmV4ZWMoZSkpKXtpPWNsZWFudXBPUyhpLHIsdC5sYWJlbHx8dCl9cmV0dXJuIGl9KSl9ZnVuY3Rpb24gZ2V0UHJvZHVjdChpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCl7dmFyIHI9dC5wYXR0ZXJufHxxdWFsaWZ5KHQpO2lmKCFpJiYoaT1SZWdFeHAoXCJcXFxcYlwiK3IrXCIgKlxcXFxkK1suXFxcXHdfXSpcIixcImlcIikuZXhlYyhlKXx8UmVnRXhwKFwiXFxcXGJcIityK1wiICpcXFxcdystW1xcXFx3XSpcIixcImlcIikuZXhlYyhlKXx8UmVnRXhwKFwiXFxcXGJcIityK1wiKD86OyAqKD86W2Etel0rW18tXSk/W2Etel0rXFxcXGQrfFteICgpOy1dKilcIixcImlcIikuZXhlYyhlKSkpe2lmKChpPVN0cmluZyh0LmxhYmVsJiYhUmVnRXhwKHIsXCJpXCIpLnRlc3QodC5sYWJlbCk/dC5sYWJlbDppKS5zcGxpdChcIi9cIikpWzFdJiYhL1tcXGQuXSsvLnRlc3QoaVswXSkpe2lbMF0rPVwiIFwiK2lbMV19dD10LmxhYmVsfHx0O2k9Zm9ybWF0KGlbMF0ucmVwbGFjZShSZWdFeHAocixcImlcIiksdCkucmVwbGFjZShSZWdFeHAoXCI7ICooPzpcIit0K1wiW18tXSk/XCIsXCJpXCIpLFwiIFwiKS5yZXBsYWNlKFJlZ0V4cChcIihcIit0K1wiKVstXy5dPyhcXFxcdylcIixcImlcIiksXCIkMSAkMlwiKSl9cmV0dXJuIGl9KSl9ZnVuY3Rpb24gZ2V0VmVyc2lvbihpKXtyZXR1cm4gcmVkdWNlKGksKGZ1bmN0aW9uKGksdCl7cmV0dXJuIGl8fChSZWdFeHAodCtcIig/Oi1bXFxcXGQuXSsvfCg/OiBmb3IgW1xcXFx3LV0rKT9bIC8tXSkoW1xcXFxkLl0rW14gKCk7L18tXSopXCIsXCJpXCIpLmV4ZWMoZSl8fDApWzFdfHxudWxsfSkpfWZ1bmN0aW9uIHRvU3RyaW5nUGxhdGZvcm0oKXtyZXR1cm4gdGhpcy5kZXNjcmlwdGlvbnx8XCJcIn1fJiYoXz1bX10pO2lmKC9cXGJBbmRyb2lkXFxiLy50ZXN0KFQpJiYhQSYmKE09L1xcYkFuZHJvaWRbXjtdKjsoLio/KSg/OkJ1aWxkfFxcKSBBcHBsZVdlYktpdClcXGIvaS5leGVjKGUpKSl7QT10cmltKE1bMV0pLnJlcGxhY2UoL15bYS16XXsyfS1bYS16XXsyfTtcXHMqL2ksXCJcIil8fG51bGx9aWYoSSYmIUEpe0E9Z2V0UHJvZHVjdChbSV0pfWVsc2UgaWYoSSYmQSl7QT1BLnJlcGxhY2UoUmVnRXhwKFwiXihcIitxdWFsaWZ5KEkpK1wiKVstXy5cXFxcc11cIixcImlcIiksSStcIiBcIikucmVwbGFjZShSZWdFeHAoXCJeKFwiK3F1YWxpZnkoSSkrXCIpWy1fLl0/KFxcXFx3KVwiLFwiaVwiKSxJK1wiICQyXCIpfWlmKE09L1xcYkdvb2dsZSBUVlxcYi8uZXhlYyhBKSl7QT1NWzBdfWlmKC9cXGJTaW11bGF0b3JcXGIvaS50ZXN0KGUpKXtBPShBP0ErXCIgXCI6XCJcIikrXCJTaW11bGF0b3JcIn1pZihSPT1cIk9wZXJhIE1pbmlcIiYmL1xcYk9QaU9TXFxiLy50ZXN0KGUpKXtQLnB1c2goXCJydW5uaW5nIGluIFR1cmJvL1VuY29tcHJlc3NlZCBtb2RlXCIpfWlmKFI9PVwiSUVcIiYmL1xcYmxpa2UgaVBob25lIE9TXFxiLy50ZXN0KGUpKXtNPXBhcnNlKGUucmVwbGFjZSgvbGlrZSBpUGhvbmUgT1MvLFwiXCIpKTtJPU0ubWFudWZhY3R1cmVyO0E9TS5wcm9kdWN0fWVsc2UgaWYoL15pUC8udGVzdChBKSl7Unx8KFI9XCJTYWZhcmlcIik7VD1cImlPU1wiKygoTT0vIE9TIChbXFxkX10rKS9pLmV4ZWMoZSkpP1wiIFwiK01bMV0ucmVwbGFjZSgvXy9nLFwiLlwiKTpcIlwiKX1lbHNlIGlmKFI9PVwiS29ucXVlcm9yXCImJi9eTGludXhcXGIvaS50ZXN0KFQpKXtUPVwiS3VidW50dVwifWVsc2UgaWYoSSYmSSE9XCJHb29nbGVcIiYmKC9DaHJvbWUvLnRlc3QoUikmJiEvXFxiTW9iaWxlIFNhZmFyaVxcYi9pLnRlc3QoZSl8fC9cXGJWaXRhXFxiLy50ZXN0KEEpKXx8L1xcYkFuZHJvaWRcXGIvLnRlc3QoVCkmJi9eQ2hyb21lLy50ZXN0KFIpJiYvXFxiVmVyc2lvblxcLy9pLnRlc3QoZSkpe1I9XCJBbmRyb2lkIEJyb3dzZXJcIjtUPS9cXGJBbmRyb2lkXFxiLy50ZXN0KFQpP1Q6XCJBbmRyb2lkXCJ9ZWxzZSBpZihSPT1cIlNpbGtcIil7aWYoIS9cXGJNb2JpL2kudGVzdChlKSl7VD1cIkFuZHJvaWRcIjtQLnVuc2hpZnQoXCJkZXNrdG9wIG1vZGVcIil9aWYoL0FjY2VsZXJhdGVkICo9ICp0cnVlL2kudGVzdChlKSl7UC51bnNoaWZ0KFwiYWNjZWxlcmF0ZWRcIil9fWVsc2UgaWYoUj09XCJVQyBCcm93c2VyXCImJi9cXGJVQ1dFQlxcYi8udGVzdChlKSl7UC5wdXNoKFwic3BlZWQgbW9kZVwiKX1lbHNlIGlmKFI9PVwiUGFsZU1vb25cIiYmKE09L1xcYkZpcmVmb3hcXC8oW1xcZC5dKylcXGIvLmV4ZWMoZSkpKXtQLnB1c2goXCJpZGVudGlmeWluZyBhcyBGaXJlZm94IFwiK01bMV0pfWVsc2UgaWYoUj09XCJGaXJlZm94XCImJihNPS9cXGIoTW9iaWxlfFRhYmxldHxUVilcXGIvaS5leGVjKGUpKSl7VHx8KFQ9XCJGaXJlZm94IE9TXCIpO0F8fChBPU1bMV0pfWVsc2UgaWYoIVJ8fChNPSEvXFxiTWluZWZpZWxkXFxiL2kudGVzdChlKSYmL1xcYig/OkZpcmVmb3h8U2FmYXJpKVxcYi8uZXhlYyhSKSkpe2lmKFImJiFBJiYvW1xcLyxdfF5bXihdKz9cXCkvLnRlc3QoZS5zbGljZShlLmluZGV4T2YoTStcIi9cIikrOCkpKXtSPW51bGx9aWYoKE09QXx8SXx8VCkmJihBfHxJfHwvXFxiKD86QW5kcm9pZHxTeW1iaWFuIE9TfFRhYmxldCBPU3x3ZWJPUylcXGIvLnRlc3QoVCkpKXtSPS9bYS16XSsoPzogSGF0KT8vaS5leGVjKC9cXGJBbmRyb2lkXFxiLy50ZXN0KFQpP1Q6TSkrXCIgQnJvd3NlclwifX1lbHNlIGlmKFI9PVwiRWxlY3Ryb25cIiYmKE09KC9cXGJDaHJvbWVcXC8oW1xcZC5dKylcXGIvLmV4ZWMoZSl8fDApWzFdKSl7UC5wdXNoKFwiQ2hyb21pdW0gXCIrTSl9aWYoIUIpe0I9Z2V0VmVyc2lvbihbXCIoPzpDbG91ZDl8Q3JpT1N8Q3JNb3xFZGdlfEVkZ3xFZGdBfEVkZ2lPU3xGeGlPU3xIZWFkbGVzc0Nocm9tZXxJRU1vYmlsZXxJcm9ufE9wZXJhID9NaW5pfE9QaU9TfE9QUnxSYXZlbnxTYW1zdW5nQnJvd3NlcnxTaWxrKD8hL1tcXFxcZC5dKyQpfFVDQnJvd3NlcnxZYUJyb3dzZXIpXCIsXCJWZXJzaW9uXCIscXVhbGlmeShSKSxcIig/OkZpcmVmb3h8TWluZWZpZWxkfE5ldEZyb250KVwiXSl9aWYoTT1fPT1cImlDYWJcIiYmcGFyc2VGbG9hdChCKT4zJiZcIldlYktpdFwifHwvXFxiT3BlcmFcXGIvLnRlc3QoUikmJigvXFxiT1BSXFxiLy50ZXN0KGUpP1wiQmxpbmtcIjpcIlByZXN0b1wiKXx8L1xcYig/Ok1pZG9yaXxOb29rfFNhZmFyaSlcXGIvaS50ZXN0KGUpJiYhL14oPzpUcmlkZW50fEVkZ2VIVE1MKSQvLnRlc3QoXykmJlwiV2ViS2l0XCJ8fCFfJiYvXFxiTVNJRVxcYi9pLnRlc3QoZSkmJihUPT1cIk1hYyBPU1wiP1wiVGFzbWFuXCI6XCJUcmlkZW50XCIpfHxfPT1cIldlYktpdFwiJiYvXFxiUGxheVN0YXRpb25cXGIoPyEgVml0YVxcYikvaS50ZXN0KFIpJiZcIk5ldEZyb250XCIpe189W01dfWlmKFI9PVwiSUVcIiYmKE09KC87ICooPzpYQkxXUHxadW5lV1ApKFxcZCspL2kuZXhlYyhlKXx8MClbMV0pKXtSKz1cIiBNb2JpbGVcIjtUPVwiV2luZG93cyBQaG9uZSBcIisoL1xcKyQvLnRlc3QoTSk/TTpNK1wiLnhcIik7UC51bnNoaWZ0KFwiZGVza3RvcCBtb2RlXCIpfWVsc2UgaWYoL1xcYldQRGVza3RvcFxcYi9pLnRlc3QoZSkpe1I9XCJJRSBNb2JpbGVcIjtUPVwiV2luZG93cyBQaG9uZSA4LnhcIjtQLnVuc2hpZnQoXCJkZXNrdG9wIG1vZGVcIik7Qnx8KEI9KC9cXGJydjooW1xcZC5dKykvLmV4ZWMoZSl8fDApWzFdKX1lbHNlIGlmKFIhPVwiSUVcIiYmXz09XCJUcmlkZW50XCImJihNPS9cXGJydjooW1xcZC5dKykvLmV4ZWMoZSkpKXtpZihSKXtQLnB1c2goXCJpZGVudGlmeWluZyBhcyBcIitSKyhCP1wiIFwiK0I6XCJcIikpfVI9XCJJRVwiO0I9TVsxXX1pZihrKXtpZihpc0hvc3RUeXBlKGksXCJnbG9iYWxcIikpe2lmKG0pe009bS5sYW5nLlN5c3RlbTtFPU0uZ2V0UHJvcGVydHkoXCJvcy5hcmNoXCIpO1Q9VHx8TS5nZXRQcm9wZXJ0eShcIm9zLm5hbWVcIikrXCIgXCIrTS5nZXRQcm9wZXJ0eShcIm9zLnZlcnNpb25cIil9aWYoZyl7dHJ5e0I9aS5yZXF1aXJlKFwicmluZ28vZW5naW5lXCIpLnZlcnNpb24uam9pbihcIi5cIik7Uj1cIlJpbmdvSlNcIn1jYXRjaChlKXtpZigoTT1pLnN5c3RlbSkmJk0uZ2xvYmFsLnN5c3RlbT09aS5zeXN0ZW0pe1I9XCJOYXJ3aGFsXCI7VHx8KFQ9TVswXS5vc3x8bnVsbCl9fWlmKCFSKXtSPVwiUmhpbm9cIn19ZWxzZSBpZih0eXBlb2YgaS5wcm9jZXNzPT1cIm9iamVjdFwiJiYhaS5wcm9jZXNzLmJyb3dzZXImJihNPWkucHJvY2Vzcykpe2lmKHR5cGVvZiBNLnZlcnNpb25zPT1cIm9iamVjdFwiKXtpZih0eXBlb2YgTS52ZXJzaW9ucy5lbGVjdHJvbj09XCJzdHJpbmdcIil7UC5wdXNoKFwiTm9kZSBcIitNLnZlcnNpb25zLm5vZGUpO1I9XCJFbGVjdHJvblwiO0I9TS52ZXJzaW9ucy5lbGVjdHJvbn1lbHNlIGlmKHR5cGVvZiBNLnZlcnNpb25zLm53PT1cInN0cmluZ1wiKXtQLnB1c2goXCJDaHJvbWl1bSBcIitCLFwiTm9kZSBcIitNLnZlcnNpb25zLm5vZGUpO1I9XCJOVy5qc1wiO0I9TS52ZXJzaW9ucy5ud319aWYoIVIpe1I9XCJOb2RlLmpzXCI7RT1NLmFyY2g7VD1NLnBsYXRmb3JtO0I9L1tcXGQuXSsvLmV4ZWMoTS52ZXJzaW9uKTtCPUI/QlswXTpudWxsfX19ZWxzZSBpZihnZXRDbGFzc09mKE09aS5ydW50aW1lKT09cCl7Uj1cIkFkb2JlIEFJUlwiO1Q9TS5mbGFzaC5zeXN0ZW0uQ2FwYWJpbGl0aWVzLm9zfWVsc2UgaWYoZ2V0Q2xhc3NPZihNPWkucGhhbnRvbSk9PXgpe1I9XCJQaGFudG9tSlNcIjtCPShNPU0udmVyc2lvbnx8bnVsbCkmJk0ubWFqb3IrXCIuXCIrTS5taW5vcitcIi5cIitNLnBhdGNofWVsc2UgaWYodHlwZW9mIE8uZG9jdW1lbnRNb2RlPT1cIm51bWJlclwiJiYoTT0vXFxiVHJpZGVudFxcLyhcXGQrKS9pLmV4ZWMoZSkpKXtCPVtCLE8uZG9jdW1lbnRNb2RlXTtpZigoTT0rTVsxXSs0KSE9QlsxXSl7UC5wdXNoKFwiSUUgXCIrQlsxXStcIiBtb2RlXCIpO18mJihfWzFdPVwiXCIpO0JbMV09TX1CPVI9PVwiSUVcIj9TdHJpbmcoQlsxXS50b0ZpeGVkKDEpKTpCWzBdfWVsc2UgaWYodHlwZW9mIE8uZG9jdW1lbnRNb2RlPT1cIm51bWJlclwiJiYvXig/OkNocm9tZXxGaXJlZm94KVxcYi8udGVzdChSKSl7UC5wdXNoKFwibWFza2luZyBhcyBcIitSK1wiIFwiK0IpO1I9XCJJRVwiO0I9XCIxMS4wXCI7Xz1bXCJUcmlkZW50XCJdO1Q9XCJXaW5kb3dzXCJ9VD1UJiZmb3JtYXQoVCl9aWYoQiYmKE09Lyg/OlthYl18ZHB8cHJlfFthYl1cXGQrcHJlKSg/OlxcZCtcXCs/KT8kL2kuZXhlYyhCKXx8Lyg/OmFscGhhfGJldGEpKD86ID9cXGQpPy9pLmV4ZWMoZStcIjtcIisoayYmbi5hcHBNaW5vclZlcnNpb24pKXx8L1xcYk1pbmVmaWVsZFxcYi9pLnRlc3QoZSkmJlwiYVwiKSl7Qz0vYi9pLnRlc3QoTSk/XCJiZXRhXCI6XCJhbHBoYVwiO0I9Qi5yZXBsYWNlKFJlZ0V4cChNK1wiXFxcXCs/JFwiKSxcIlwiKSsoQz09XCJiZXRhXCI/djpoKSsoL1xcZCtcXCs/Ly5leGVjKE0pfHxcIlwiKX1pZihSPT1cIkZlbm5lY1wifHxSPT1cIkZpcmVmb3hcIiYmL1xcYig/OkFuZHJvaWR8RmlyZWZveCBPU3xLYWlPUylcXGIvLnRlc3QoVCkpe1I9XCJGaXJlZm94IE1vYmlsZVwifWVsc2UgaWYoUj09XCJNYXh0aG9uXCImJkIpe0I9Qi5yZXBsYWNlKC9cXC5bXFxkLl0rLyxcIi54XCIpfWVsc2UgaWYoL1xcYlhib3hcXGIvaS50ZXN0KEEpKXtpZihBPT1cIlhib3ggMzYwXCIpe1Q9bnVsbH1pZihBPT1cIlhib3ggMzYwXCImJi9cXGJJRU1vYmlsZVxcYi8udGVzdChlKSl7UC51bnNoaWZ0KFwibW9iaWxlIG1vZGVcIil9fWVsc2UgaWYoKC9eKD86Q2hyb21lfElFfE9wZXJhKSQvLnRlc3QoUil8fFImJiFBJiYhL0Jyb3dzZXJ8TW9iaS8udGVzdChSKSkmJihUPT1cIldpbmRvd3MgQ0VcInx8L01vYmkvaS50ZXN0KGUpKSl7Uis9XCIgTW9iaWxlXCJ9ZWxzZSBpZihSPT1cIklFXCImJmspe3RyeXtpZihpLmV4dGVybmFsPT09bnVsbCl7UC51bnNoaWZ0KFwicGxhdGZvcm0gcHJldmlld1wiKX19Y2F0Y2goZSl7UC51bnNoaWZ0KFwiZW1iZWRkZWRcIil9fWVsc2UgaWYoKC9cXGJCbGFja0JlcnJ5XFxiLy50ZXN0KEEpfHwvXFxiQkIxMFxcYi8udGVzdChlKSkmJihNPShSZWdFeHAoQS5yZXBsYWNlKC8gKy9nLFwiICpcIikrXCIvKFsuXFxcXGRdKylcIixcImlcIikuZXhlYyhlKXx8MClbMV18fEIpKXtNPVtNLC9CQjEwLy50ZXN0KGUpXTtUPShNWzFdPyhBPW51bGwsST1cIkJsYWNrQmVycnlcIik6XCJEZXZpY2UgU29mdHdhcmVcIikrXCIgXCIrTVswXTtCPW51bGx9ZWxzZSBpZih0aGlzIT1mb3JPd24mJkEhPVwiV2lpXCImJihrJiZ5fHwvT3BlcmEvLnRlc3QoUikmJi9cXGIoPzpNU0lFfEZpcmVmb3gpXFxiL2kudGVzdChlKXx8Uj09XCJGaXJlZm94XCImJi9cXGJPUyBYICg/OlxcZCtcXC4pezIsfS8udGVzdChUKXx8Uj09XCJJRVwiJiYoVCYmIS9eV2luLy50ZXN0KFQpJiZCPjUuNXx8L1xcYldpbmRvd3MgWFBcXGIvLnRlc3QoVCkmJkI+OHx8Qj09OCYmIS9cXGJUcmlkZW50XFxiLy50ZXN0KGUpKSkmJiFmLnRlc3QoTT1wYXJzZS5jYWxsKGZvck93bixlLnJlcGxhY2UoZixcIlwiKStcIjtcIikpJiZNLm5hbWUpe009XCJpbmcgYXMgXCIrTS5uYW1lKygoTT1NLnZlcnNpb24pP1wiIFwiK006XCJcIik7aWYoZi50ZXN0KFIpKXtpZigvXFxiSUVcXGIvLnRlc3QoTSkmJlQ9PVwiTWFjIE9TXCIpe1Q9bnVsbH1NPVwiaWRlbnRpZnlcIitNfWVsc2V7TT1cIm1hc2tcIitNO2lmKHcpe1I9Zm9ybWF0KHcucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZyxcIiQxICQyXCIpKX1lbHNle1I9XCJPcGVyYVwifWlmKC9cXGJJRVxcYi8udGVzdChNKSl7VD1udWxsfWlmKCFrKXtCPW51bGx9fV89W1wiUHJlc3RvXCJdO1AucHVzaChNKX1pZihNPSgvXFxiQXBwbGVXZWJLaXRcXC8oW1xcZC5dK1xcKz8pL2kuZXhlYyhlKXx8MClbMV0pe009W3BhcnNlRmxvYXQoTS5yZXBsYWNlKC9cXC4oXFxkKSQvLFwiLjAkMVwiKSksTV07aWYoUj09XCJTYWZhcmlcIiYmTVsxXS5zbGljZSgtMSk9PVwiK1wiKXtSPVwiV2ViS2l0IE5pZ2h0bHlcIjtDPVwiYWxwaGFcIjtCPU1bMV0uc2xpY2UoMCwtMSl9ZWxzZSBpZihCPT1NWzFdfHxCPT0oTVsyXT0oL1xcYlNhZmFyaVxcLyhbXFxkLl0rXFwrPykvaS5leGVjKGUpfHwwKVsxXSkpe0I9bnVsbH1NWzFdPSgvXFxiKD86SGVhZGxlc3MpP0Nocm9tZVxcLyhbXFxkLl0rKS9pLmV4ZWMoZSl8fDApWzFdO2lmKE1bMF09PTUzNy4zNiYmTVsyXT09NTM3LjM2JiZwYXJzZUZsb2F0KE1bMV0pPj0yOCYmXz09XCJXZWJLaXRcIil7Xz1bXCJCbGlua1wiXX1pZigha3x8IXMmJiFNWzFdKXtfJiYoX1sxXT1cImxpa2UgU2FmYXJpXCIpO009KE09TVswXSxNPDQwMD8xOk08NTAwPzI6TTw1MjY/MzpNPDUzMz80Ok08NTM0P1wiNCtcIjpNPDUzNT81Ok08NTM3PzY6TTw1Mzg/NzpNPDYwMT84Ok08NjAyPzk6TTw2MDQ/MTA6TTw2MDY/MTE6TTw2MDg/MTI6XCIxMlwiKX1lbHNle18mJihfWzFdPVwibGlrZSBDaHJvbWVcIik7TT1NWzFdfHwoTT1NWzBdLE08NTMwPzE6TTw1MzI/MjpNPDUzMi4wNT8zOk08NTMzPzQ6TTw1MzQuMDM/NTpNPDUzNC4wNz82Ok08NTM0LjE/NzpNPDUzNC4xMz84Ok08NTM0LjE2Pzk6TTw1MzQuMjQ/MTA6TTw1MzQuMz8xMTpNPDUzNS4wMT8xMjpNPDUzNS4wMj9cIjEzK1wiOk08NTM1LjA3PzE1Ok08NTM1LjExPzE2Ok08NTM1LjE5PzE3Ok08NTM2LjA1PzE4Ok08NTM2LjE/MTk6TTw1MzcuMDE/MjA6TTw1MzcuMTE/XCIyMStcIjpNPDUzNy4xMz8yMzpNPDUzNy4xOD8yNDpNPDUzNy4yND8yNTpNPDUzNy4zNj8yNjpfIT1cIkJsaW5rXCI/XCIyN1wiOlwiMjhcIil9XyYmKF9bMV0rPVwiIFwiKyhNKz10eXBlb2YgTT09XCJudW1iZXJcIj9cIi54XCI6L1suK10vLnRlc3QoTSk/XCJcIjpcIitcIikpO2lmKFI9PVwiU2FmYXJpXCImJighQnx8cGFyc2VJbnQoQik+NDUpKXtCPU19ZWxzZSBpZihSPT1cIkNocm9tZVwiJiYvXFxiSGVhZGxlc3NDaHJvbWUvaS50ZXN0KGUpKXtQLnVuc2hpZnQoXCJoZWFkbGVzc1wiKX19aWYoUj09XCJPcGVyYVwiJiYoTT0vXFxiemJvdnx6dmF2JC8uZXhlYyhUKSkpe1IrPVwiIFwiO1AudW5zaGlmdChcImRlc2t0b3AgbW9kZVwiKTtpZihNPT1cInp2YXZcIil7Uis9XCJNaW5pXCI7Qj1udWxsfWVsc2V7Uis9XCJNb2JpbGVcIn1UPVQucmVwbGFjZShSZWdFeHAoXCIgKlwiK00rXCIkXCIpLFwiXCIpfWVsc2UgaWYoUj09XCJTYWZhcmlcIiYmL1xcYkNocm9tZVxcYi8uZXhlYyhfJiZfWzFdKSl7UC51bnNoaWZ0KFwiZGVza3RvcCBtb2RlXCIpO1I9XCJDaHJvbWUgTW9iaWxlXCI7Qj1udWxsO2lmKC9cXGJPUyBYXFxiLy50ZXN0KFQpKXtJPVwiQXBwbGVcIjtUPVwiaU9TIDQuMytcIn1lbHNle1Q9bnVsbH19ZWxzZSBpZigvXFxiU1JXYXJlIElyb25cXGIvLnRlc3QoUikmJiFCKXtCPWdldFZlcnNpb24oXCJDaHJvbWVcIil9aWYoQiYmQi5pbmRleE9mKE09L1tcXGQuXSskLy5leGVjKFQpKT09MCYmZS5pbmRleE9mKFwiL1wiK00rXCItXCIpPi0xKXtUPXRyaW0oVC5yZXBsYWNlKE0sXCJcIikpfWlmKFQmJlQuaW5kZXhPZihSKSE9LTEmJiFSZWdFeHAoUitcIiBPU1wiKS50ZXN0KFQpKXtUPVQucmVwbGFjZShSZWdFeHAoXCIgKlwiK3F1YWxpZnkoUikrXCIgKlwiKSxcIlwiKX1pZihfJiYhL1xcYig/OkF2YW50fE5vb2spXFxiLy50ZXN0KFIpJiYoL0Jyb3dzZXJ8THVuYXNjYXBlfE1heHRob24vLnRlc3QoUil8fFIhPVwiU2FmYXJpXCImJi9eaU9TLy50ZXN0KFQpJiYvXFxiU2FmYXJpXFxiLy50ZXN0KF9bMV0pfHwvXig/OkFkb2JlfEFyb3JhfEJyZWFjaHxNaWRvcml8T3BlcmF8UGhhbnRvbXxSZWtvbnF8Um9ja3xTYW1zdW5nIEludGVybmV0fFNsZWlwbmlyfFNSV2FyZSBJcm9ufFZpdmFsZGl8V2ViKS8udGVzdChSKSYmX1sxXSkpeyhNPV9bXy5sZW5ndGgtMV0pJiZQLnB1c2goTSl9aWYoUC5sZW5ndGgpe1A9W1wiKFwiK1Auam9pbihcIjsgXCIpK1wiKVwiXX1pZihJJiZBJiZBLmluZGV4T2YoSSk8MCl7UC5wdXNoKFwib24gXCIrSSl9aWYoQSl7UC5wdXNoKCgvXm9uIC8udGVzdChQW1AubGVuZ3RoLTFdKT9cIlwiOlwib24gXCIpK0EpfWlmKFQpe009LyAoW1xcZC4rXSspJC8uZXhlYyhUKTtXPU0mJlQuY2hhckF0KFQubGVuZ3RoLU1bMF0ubGVuZ3RoLTEpPT1cIi9cIjtUPXthcmNoaXRlY3R1cmU6MzIsZmFtaWx5Ok0mJiFXP1QucmVwbGFjZShNWzBdLFwiXCIpOlQsdmVyc2lvbjpNP01bMV06bnVsbCx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmVyc2lvbjtyZXR1cm4gdGhpcy5mYW1pbHkrKGUmJiFXP1wiIFwiK2U6XCJcIikrKHRoaXMuYXJjaGl0ZWN0dXJlPT02ND9cIiA2NC1iaXRcIjpcIlwiKX19fWlmKChNPS9cXGIoPzpBTUR8SUF8V2lufFdPV3x4ODZffHgpNjRcXGIvaS5leGVjKEUpKSYmIS9cXGJpNjg2XFxiL2kudGVzdChFKSl7aWYoVCl7VC5hcmNoaXRlY3R1cmU9NjQ7VC5mYW1pbHk9VC5mYW1pbHkucmVwbGFjZShSZWdFeHAoXCIgKlwiK00pLFwiXCIpfWlmKFImJigvXFxiV09XNjRcXGIvaS50ZXN0KGUpfHxrJiYvXFx3KD86ODZ8MzIpJC8udGVzdChuLmNwdUNsYXNzfHxuLnBsYXRmb3JtKSYmIS9cXGJXaW42NDsgeDY0XFxiL2kudGVzdChlKSkpe1AudW5zaGlmdChcIjMyLWJpdFwiKX19ZWxzZSBpZihUJiYvXk9TIFgvLnRlc3QoVC5mYW1pbHkpJiZSPT1cIkNocm9tZVwiJiZwYXJzZUZsb2F0KEIpPj0zOSl7VC5hcmNoaXRlY3R1cmU9NjR9ZXx8KGU9bnVsbCk7dmFyIEY9e307Ri5kZXNjcmlwdGlvbj1lO0YubGF5b3V0PV8mJl9bMF07Ri5tYW51ZmFjdHVyZXI9STtGLm5hbWU9UjtGLnByZXJlbGVhc2U9QztGLnByb2R1Y3Q9QTtGLnVhPWU7Ri52ZXJzaW9uPVImJkI7Ri5vcz1UfHx7YXJjaGl0ZWN0dXJlOm51bGwsZmFtaWx5Om51bGwsdmVyc2lvbjpudWxsLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJudWxsXCJ9fTtGLnBhcnNlPXBhcnNlO0YudG9TdHJpbmc9dG9TdHJpbmdQbGF0Zm9ybTtpZihGLnZlcnNpb24pe1AudW5zaGlmdChCKX1pZihGLm5hbWUpe1AudW5zaGlmdChSKX1pZihUJiZSJiYhKFQ9PVN0cmluZyhUKS5zcGxpdChcIiBcIilbMF0mJihUPT1SLnNwbGl0KFwiIFwiKVswXXx8QSkpKXtQLnB1c2goQT9cIihcIitUK1wiKVwiOlwib24gXCIrVCl9aWYoUC5sZW5ndGgpe0YuZGVzY3JpcHRpb249UC5qb2luKFwiIFwiKX1yZXR1cm4gRn12YXIgZD1wYXJzZSgpO2lmKG4mJm8pe2Zvck93bihkLChmdW5jdGlvbihlLGkpe25baV09ZX0pKX1lbHNle3IucGxhdGZvcm09ZH19KS5jYWxsKHRoaXMpfX07dmFyIGk9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyh0KXt2YXIgcj1pW3RdO2lmKHIhPT11bmRlZmluZWQpe3JldHVybiByLmV4cG9ydHN9dmFyIGE9aVt0XT17aWQ6dCxsb2FkZWQ6ZmFsc2UsZXhwb3J0czp7fX07dmFyIG49dHJ1ZTt0cnl7ZVt0XS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtuPWZhbHNlfWZpbmFsbHl7aWYobilkZWxldGUgaVt0XX1hLmxvYWRlZD10cnVlO3JldHVybiBhLmV4cG9ydHN9KCgpPT57X19uY2N3cGNrX3JlcXVpcmVfXy5ubWQ9ZT0+e2UucGF0aHM9W107aWYoIWUuY2hpbGRyZW4pZS5jaGlsZHJlbj1bXTtyZXR1cm4gZX19KSgpO2lmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgdD1fX25jY3dwY2tfcmVxdWlyZV9fKDU0MSk7bW9kdWxlLmV4cG9ydHM9dH0pKCk7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/platform/platform.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js": +/*!******************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js ***! + \******************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction typeOf(object) {\n if (typeof object === 'object' && object !== null) {\n var $$typeof = object.$$typeof;\n\n switch ($$typeof) {\n case REACT_ELEMENT_TYPE:\n var type = object.type;\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n case REACT_PROFILER_TYPE:\n case REACT_STRICT_MODE_TYPE:\n case REACT_SUSPENSE_TYPE:\n case REACT_SUSPENSE_LIST_TYPE:\n return type;\n\n default:\n var $$typeofType = type && type.$$typeof;\n\n switch ($$typeofType) {\n case REACT_SERVER_CONTEXT_TYPE:\n case REACT_CONTEXT_TYPE:\n case REACT_FORWARD_REF_TYPE:\n case REACT_LAZY_TYPE:\n case REACT_MEMO_TYPE:\n case REACT_PROVIDER_TYPE:\n return $$typeofType;\n\n default:\n return $$typeof;\n }\n\n }\n\n case REACT_PORTAL_TYPE:\n return $$typeof;\n }\n }\n\n return undefined;\n}\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false;\nvar hasWarnedAboutDeprecatedIsConcurrentMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isConcurrentMode(object) {\n {\n if (!hasWarnedAboutDeprecatedIsConcurrentMode) {\n hasWarnedAboutDeprecatedIsConcurrentMode = true; // Using console['warn'] to evade Babel and ESLint\n\n console['warn']('The ReactIs.isConcurrentMode() alias has been deprecated, ' + 'and will be removed in React 18+.');\n }\n }\n\n return false;\n}\nfunction isContextConsumer(object) {\n return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\nfunction isSuspenseList(object) {\n return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n}\n\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.SuspenseList = SuspenseList;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isSuspenseList = isSuspenseList;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWlzL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEI7QUFDNUI7QUFDQSxxQ0FBcUM7O0FBRXJDLGdDQUFnQztBQUNoQztBQUNBOztBQUVBLGdDQUFnQzs7QUFFaEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEOztBQUV0RDtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCLGVBQWU7QUFDZixrQkFBa0I7QUFDbEIsZ0JBQWdCO0FBQ2hCLFlBQVk7QUFDWixZQUFZO0FBQ1osY0FBYztBQUNkLGdCQUFnQjtBQUNoQixrQkFBa0I7QUFDbEIsZ0JBQWdCO0FBQ2hCLG9CQUFvQjtBQUNwQixtQkFBbUI7QUFDbkIsd0JBQXdCO0FBQ3hCLHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFDekIsaUJBQWlCO0FBQ2pCLG9CQUFvQjtBQUNwQixrQkFBa0I7QUFDbEIsY0FBYztBQUNkLGNBQWM7QUFDZCxnQkFBZ0I7QUFDaEIsa0JBQWtCO0FBQ2xCLG9CQUFvQjtBQUNwQixrQkFBa0I7QUFDbEIsc0JBQXNCO0FBQ3RCLDBCQUEwQjtBQUMxQixjQUFjO0FBQ2QsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzP2VjODUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc2VydmVyX2NvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxudmFyIGVuYWJsZUNhY2hlRWxlbWVudCA9IGZhbHNlO1xudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXG5cbnZhciBlbmFibGVMZWdhY3lIaWRkZW4gPSBmYWxzZTsgLy8gRW5hYmxlcyB1bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayBmZWF0dXJlIGluIEZpYmVyXG4vLyBzdHVmZi4gSW50ZW5kZWQgdG8gZW5hYmxlIFJlYWN0IGNvcmUgbWVtYmVycyB0byBtb3JlIGVhc2lseSBkZWJ1ZyBzY2hlZHVsaW5nXG4vLyBpc3N1ZXMgaW4gREVWIGJ1aWxkcy5cblxudmFyIGVuYWJsZURlYnVnVHJhY2luZyA9IGZhbHNlOyAvLyBUcmFjayB3aGljaCBGaWJlcihzKSBzY2hlZHVsZSByZW5kZXIgd29yay5cblxudmFyIFJFQUNUX01PRFVMRV9SRUZFUkVOQ0U7XG5cbntcbiAgUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1vZHVsZS5yZWZlcmVuY2UnKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5vdGU6IHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIChlLmcuIGlmIGl0J3MgYSBwb2x5ZmlsbCkuXG5cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IGVuYWJsZURlYnVnVHJhY2luZyAgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCBlbmFibGVMZWdhY3lIaWRkZW4gIHx8IHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICB8fCBlbmFibGVDYWNoZUVsZW1lbnQgIHx8IGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBUaGlzIG5lZWRzIHRvIGluY2x1ZGUgYWxsIHBvc3NpYmxlIG1vZHVsZSByZWZlcmVuY2Ugb2JqZWN0XG4gICAgLy8gdHlwZXMgc3VwcG9ydGVkIGJ5IGFueSBGbGlnaHQgY29uZmlndXJhdGlvbiBhbnl3aGVyZSBzaW5jZVxuICAgIC8vIHdlIGRvbid0IGtub3cgd2hpY2ggRmxpZ2h0IGJ1aWxkIHRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgdXNlZFxuICAgIC8vIHdpdGguXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRSB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9TRVJWRVJfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgU3VzcGVuc2VMaXN0ID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNDb25jdXJyZW50TW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQ29uY3VycmVudE1vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2VMaXN0KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbn1cblxuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLlN1c3BlbnNlTGlzdCA9IFN1c3BlbnNlTGlzdDtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1N1c3BlbnNlTGlzdCA9IGlzU3VzcGVuc2VMaXN0O1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/react-is/index.js": +/*!***********************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-is/index.js ***! + \***********************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"./node_modules/next/dist/compiled/react-is/cjs/react-is.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWlzL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSxtSkFBeUQ7QUFDM0QiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1pcy9pbmRleC5qcz80MjNkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/react-is/index.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js ***! + \*************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;Object.defineProperty(r,\"__esModule\",{value:true});var n=\"<unknown>\";function parse(e){var r=e.split(\"\\n\");return r.reduce((function(e,r){var n=parseChrome(r)||parseWinjs(r)||parseGecko(r)||parseNode(r)||parseJSC(r);if(n){e.push(n)}return e}),[])}var a=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;var l=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;function parseChrome(e){var r=a.exec(e);if(!r){return null}var u=r[2]&&r[2].indexOf(\"native\")===0;var t=r[2]&&r[2].indexOf(\"eval\")===0;var i=l.exec(r[2]);if(t&&i!=null){r[2]=i[1];r[3]=i[2];r[4]=i[3]}return{file:!u?r[2]:null,methodName:r[1]||n,arguments:u?[r[2]]:[],lineNumber:r[3]?+r[3]:null,column:r[4]?+r[4]:null}}var u=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseWinjs(e){var r=u.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}var t=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;var i=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;function parseGecko(e){var r=t.exec(e);if(!r){return null}var a=r[3]&&r[3].indexOf(\" > eval\")>-1;var l=i.exec(r[3]);if(a&&l!=null){r[3]=l[1];r[4]=l[2];r[5]=null}return{file:r[3],methodName:r[1]||n,arguments:r[2]?r[2].split(\",\"):[],lineNumber:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}var s=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;function parseJSC(e){var r=s.exec(e);if(!r){return null}return{file:r[3],methodName:r[1]||n,arguments:[],lineNumber:+r[4],column:r[5]?+r[5]:null}}var o=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;function parseNode(e){var r=o.exec(e);if(!r){return null}return{file:r[2],methodName:r[1]||n,arguments:[],lineNumber:+r[3],column:r[4]?+r[4]:null}}r.parse=parse})();module.exports=e})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3N0YWNrdHJhY2UtcGFyc2VyL3N0YWNrLXRyYWNlLXBhcnNlci5janMuanMiLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU0sYUFBYSxtRUFBbUUsU0FBUyxLQUFLLFNBQVMsTUFBTSxRQUFRLHNDQUFzQyxXQUFXLEVBQUUsa0JBQWtCLGtCQUFrQixvQkFBb0IsK0JBQStCLDhFQUE4RSxNQUFNLFVBQVUsU0FBUyxNQUFNLGtKQUFrSixzQ0FBc0Msd0JBQXdCLGdCQUFnQixPQUFPLFlBQVksdUNBQXVDLHFDQUFxQyxtQkFBbUIsZUFBZSxVQUFVLFVBQVUsVUFBVSxPQUFPLDhHQUE4RyxzSEFBc0gsdUJBQXVCLGdCQUFnQixPQUFPLFlBQVksT0FBTyxtRkFBbUYsd0lBQXdJLHNEQUFzRCx1QkFBdUIsZ0JBQWdCLE9BQU8sWUFBWSx1Q0FBdUMsbUJBQW1CLGVBQWUsVUFBVSxVQUFVLFVBQVUsT0FBTyxrSEFBa0gscUVBQXFFLHFCQUFxQixnQkFBZ0IsT0FBTyxZQUFZLE9BQU8sbUZBQW1GLHNHQUFzRyxzQkFBc0IsZ0JBQWdCLE9BQU8sWUFBWSxPQUFPLG1GQUFtRixjQUFjLElBQUksaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc3RhY2t0cmFjZS1wYXJzZXIvc3RhY2stdHJhY2UtcGFyc2VyLmNqcy5qcz9mZTBlIl0sInNvdXJjZXNDb250ZW50IjpbIigoKT0+e1widXNlIHN0cmljdFwiO2lmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgZT17fTsoKCk9Pnt2YXIgcj1lO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTp0cnVlfSk7dmFyIG49XCI8dW5rbm93bj5cIjtmdW5jdGlvbiBwYXJzZShlKXt2YXIgcj1lLnNwbGl0KFwiXFxuXCIpO3JldHVybiByLnJlZHVjZSgoZnVuY3Rpb24oZSxyKXt2YXIgbj1wYXJzZUNocm9tZShyKXx8cGFyc2VXaW5qcyhyKXx8cGFyc2VHZWNrbyhyKXx8cGFyc2VOb2RlKHIpfHxwYXJzZUpTQyhyKTtpZihuKXtlLnB1c2gobil9cmV0dXJuIGV9KSxbXSl9dmFyIGE9L15cXHMqYXQgKC4qPykgP1xcKCgoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZS1leHRlbnNpb258bmF0aXZlfGV2YWx8d2VicGFja3w8YW5vbnltb3VzPnxcXC98W2Etel06XFxcXHxcXFxcXFxcXCkuKj8pKD86OihcXGQrKSk/KD86OihcXGQrKSk/XFwpP1xccyokL2k7dmFyIGw9L1xcKChcXFMqKSg/OjooXFxkKykpKD86OihcXGQrKSlcXCkvO2Z1bmN0aW9uIHBhcnNlQ2hyb21lKGUpe3ZhciByPWEuZXhlYyhlKTtpZighcil7cmV0dXJuIG51bGx9dmFyIHU9clsyXSYmclsyXS5pbmRleE9mKFwibmF0aXZlXCIpPT09MDt2YXIgdD1yWzJdJiZyWzJdLmluZGV4T2YoXCJldmFsXCIpPT09MDt2YXIgaT1sLmV4ZWMoclsyXSk7aWYodCYmaSE9bnVsbCl7clsyXT1pWzFdO3JbM109aVsyXTtyWzRdPWlbM119cmV0dXJue2ZpbGU6IXU/clsyXTpudWxsLG1ldGhvZE5hbWU6clsxXXx8bixhcmd1bWVudHM6dT9bclsyXV06W10sbGluZU51bWJlcjpyWzNdPytyWzNdOm51bGwsY29sdW1uOnJbNF0/K3JbNF06bnVsbH19dmFyIHU9L15cXHMqYXQgKD86KCg/OlxcW29iamVjdCBvYmplY3RcXF0pPy4rKSApP1xcKD8oKD86ZmlsZXxtcy1hcHB4fGh0dHBzP3x3ZWJwYWNrfGJsb2IpOi4qPyk6KFxcZCspKD86OihcXGQrKSk/XFwpP1xccyokL2k7ZnVuY3Rpb24gcGFyc2VXaW5qcyhlKXt2YXIgcj11LmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXJldHVybntmaWxlOnJbMl0sbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOityWzNdLGNvbHVtbjpyWzRdPytyWzRdOm51bGx9fXZhciB0PS9eXFxzKiguKj8pKD86XFwoKC4qPylcXCkpPyg/Ol58QCkoKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWV8d2VicGFja3xyZXNvdXJjZXxcXFtuYXRpdmUpLio/fFteQF0qYnVuZGxlKSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xccyokL2k7dmFyIGk9LyhcXFMrKSBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsL2k7ZnVuY3Rpb24gcGFyc2VHZWNrbyhlKXt2YXIgcj10LmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXZhciBhPXJbM10mJnJbM10uaW5kZXhPZihcIiA+IGV2YWxcIik+LTE7dmFyIGw9aS5leGVjKHJbM10pO2lmKGEmJmwhPW51bGwpe3JbM109bFsxXTtyWzRdPWxbMl07cls1XT1udWxsfXJldHVybntmaWxlOnJbM10sbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czpyWzJdP3JbMl0uc3BsaXQoXCIsXCIpOltdLGxpbmVOdW1iZXI6cls0XT8rcls0XTpudWxsLGNvbHVtbjpyWzVdPytyWzVdOm51bGx9fXZhciBzPS9eXFxzKig/OihbXkBdKikoPzpcXCgoLio/KVxcKSk/QCk/KFxcUy4qPyk6KFxcZCspKD86OihcXGQrKSk/XFxzKiQvaTtmdW5jdGlvbiBwYXJzZUpTQyhlKXt2YXIgcj1zLmV4ZWMoZSk7aWYoIXIpe3JldHVybiBudWxsfXJldHVybntmaWxlOnJbM10sbWV0aG9kTmFtZTpyWzFdfHxuLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOityWzRdLGNvbHVtbjpyWzVdPytyWzVdOm51bGx9fXZhciBvPS9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT9bXlxcXFwvXSsoPzogXFxbYXMgXFxTK1xcXSk/KSApP1xcKD8oLio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtmdW5jdGlvbiBwYXJzZU5vZGUoZSl7dmFyIHI9by5leGVjKGUpO2lmKCFyKXtyZXR1cm4gbnVsbH1yZXR1cm57ZmlsZTpyWzJdLG1ldGhvZE5hbWU6clsxXXx8bixhcmd1bWVudHM6W10sbGluZU51bWJlcjorclszXSxjb2x1bW46cls0XT8rcls0XTpudWxsfX1yLnBhcnNlPXBhcnNlfSkoKTttb2R1bGUuZXhwb3J0cz1lfSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/web-vitals/web-vitals.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/compiled/web-vitals/web-vitals.js ***! + \******************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){\"use strict\";var n={};!function(){n.d=function(y,T){for(var C in T){if(n.o(T,C)&&!n.o(y,C)){Object.defineProperty(y,C,{enumerable:true,get:T[C]})}}}}();!function(){n.o=function(n,y){return Object.prototype.hasOwnProperty.call(n,y)}}();!function(){n.r=function(n){if(typeof Symbol!==\"undefined\"&&Symbol.toStringTag){Object.defineProperty(n,Symbol.toStringTag,{value:\"Module\"})}Object.defineProperty(n,\"__esModule\",{value:true})}}();if(typeof n!==\"undefined\")n.ab=__dirname+\"/\";var y={};n.r(y);n.d(y,{getCLS:function(){return E},getFCP:function(){return g},getFID:function(){return F},getINP:function(){return O},getLCP:function(){return _},getTTFB:function(){return G},onCLS:function(){return E},onFCP:function(){return g},onFID:function(){return F},onINP:function(){return O},onLCP:function(){return _},onTTFB:function(){return G}});var T,C,w,P,I,k=-1,o=function(n){addEventListener(\"pageshow\",(function(y){y.persisted&&(k=y.timeStamp,n(y))}),!0)},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType(\"navigation\")[0]},u=function(){var n=c();return n&&n.activationStart||0},f=function(n,y){var T=c(),C=\"navigate\";return k>=0?C=\"back-forward-cache\":T&&(C=document.prerendering||u()>0?\"prerender\":T.type.replace(/_/g,\"-\")),{name:n,value:void 0===y?-1:y,rating:\"good\",delta:0,entries:[],id:\"v3-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:C}},s=function(n,y,T){try{if(PerformanceObserver.supportedEntryTypes.includes(n)){var C=new PerformanceObserver((function(n){y(n.getEntries())}));return C.observe(Object.assign({type:n,buffered:!0},T||{})),C}}catch(n){}},d=function(n,y){var T=function t(T){\"pagehide\"!==T.type&&\"hidden\"!==document.visibilityState||(n(T),y&&(removeEventListener(\"visibilitychange\",t,!0),removeEventListener(\"pagehide\",t,!0)))};addEventListener(\"visibilitychange\",T,!0),addEventListener(\"pagehide\",T,!0)},l=function(n,y,T,C){var w,P;return function(I){y.value>=0&&(I||C)&&((P=y.value-(w||0))||void 0===w)&&(w=y.value,y.delta=P,y.rating=function(n,y){return n>y[1]?\"poor\":n>y[0]?\"needs-improvement\":\"good\"}(y.value,T),n(y))}},N=-1,v=function(){return\"hidden\"!==document.visibilityState||document.prerendering?1/0:0},m=function(){d((function(n){var y=n.timeStamp;N=y}),!0)},h=function(){return N<0&&(N=v(),m(),o((function(){setTimeout((function(){N=v(),m()}),0)}))),{get firstHiddenTime(){return N}}},g=function(n,y){y=y||{};var T,C=[1800,3e3],w=h(),P=f(\"FCP\"),c=function(n){n.forEach((function(n){\"first-contentful-paint\"===n.name&&(k&&k.disconnect(),n.startTime<w.firstHiddenTime&&(P.value=n.startTime-u(),P.entries.push(n),T(!0)))}))},I=window.performance&&window.performance.getEntriesByName&&window.performance.getEntriesByName(\"first-contentful-paint\")[0],k=I?null:s(\"paint\",c);(I||k)&&(T=l(n,P,C,y.reportAllChanges),I&&c([I]),o((function(w){P=f(\"FCP\"),T=l(n,P,C,y.reportAllChanges),requestAnimationFrame((function(){requestAnimationFrame((function(){P.value=performance.now()-w.timeStamp,T(!0)}))}))})))},j=!1,q=-1,E=function(n,y){y=y||{};var T=[.1,.25];j||(g((function(n){q=n.value})),j=!0);var C,i=function(y){q>-1&&n(y)},w=f(\"CLS\",0),P=0,I=[],p=function(n){n.forEach((function(n){if(!n.hadRecentInput){var y=I[0],T=I[I.length-1];P&&n.startTime-T.startTime<1e3&&n.startTime-y.startTime<5e3?(P+=n.value,I.push(n)):(P=n.value,I=[n]),P>w.value&&(w.value=P,w.entries=I,C())}}))},k=s(\"layout-shift\",p);k&&(C=l(i,w,T,y.reportAllChanges),d((function(){p(k.takeRecords()),C(!0)})),o((function(){P=0,q=-1,w=f(\"CLS\",0),C=l(i,w,T,y.reportAllChanges)})))},x={passive:!0,capture:!0},z=new Date,L=function(n,y){T||(T=y,C=n,w=new Date,A(removeEventListener),S())},S=function(){if(C>=0&&C<w-z){var n={entryType:\"first-input\",name:T.type,target:T.target,cancelable:T.cancelable,startTime:T.timeStamp,processingStart:T.timeStamp+C};P.forEach((function(y){y(n)})),P=[]}},b=function(n){if(n.cancelable){var y=(n.timeStamp>1e12?new Date:performance.now())-n.timeStamp;\"pointerdown\"==n.type?function(n,y){var t=function(){L(n,y),i()},r=function(){i()},i=function(){removeEventListener(\"pointerup\",t,x),removeEventListener(\"pointercancel\",r,x)};addEventListener(\"pointerup\",t,x),addEventListener(\"pointercancel\",r,x)}(y,n):L(y,n)}},A=function(n){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(y){return n(y,b,x)}))},F=function(n,y){y=y||{};var w,I=[100,300],k=h(),N=f(\"FID\"),v=function(n){n.startTime<k.firstHiddenTime&&(N.value=n.processingStart-n.startTime,N.entries.push(n),w(!0))},m=function(n){n.forEach(v)},j=s(\"first-input\",m);w=l(n,N,I,y.reportAllChanges),j&&d((function(){m(j.takeRecords()),j.disconnect()}),!0),j&&o((function(){var k;N=f(\"FID\"),w=l(n,N,I,y.reportAllChanges),P=[],C=-1,T=null,A(addEventListener),k=v,P.push(k),S()}))},J=0,K=1/0,Q=0,M=function(n){n.forEach((function(n){n.interactionId&&(K=Math.min(K,n.interactionId),Q=Math.max(Q,n.interactionId),J=Q?(Q-K)/7+1:0)}))},B=function(){return I?J:performance.interactionCount||0},D=function(){\"interactionCount\"in performance||I||(I=s(\"event\",M,{type:\"event\",buffered:!0,durationThreshold:0}))},U=0,R=function(){return B()-U},V=[],W={},H=function(n){var y=V[V.length-1],T=W[n.interactionId];if(T||V.length<10||n.duration>y.latency){if(T)T.entries.push(n),T.latency=Math.max(T.latency,n.duration);else{var C={id:n.interactionId,latency:n.duration,entries:[n]};W[C.id]=C,V.push(C)}V.sort((function(n,y){return y.latency-n.latency})),V.splice(10).forEach((function(n){delete W[n.id]}))}},O=function(n,y){y=y||{};var T=[200,500];D();var C,w=f(\"INP\"),a=function(n){n.forEach((function(n){(n.interactionId&&H(n),\"first-input\"===n.entryType)&&(!V.some((function(y){return y.entries.some((function(y){return n.duration===y.duration&&n.startTime===y.startTime}))}))&&H(n))}));var y,T=(y=Math.min(V.length-1,Math.floor(R()/50)),V[y]);T&&T.latency!==w.value&&(w.value=T.latency,w.entries=T.entries,C())},P=s(\"event\",a,{durationThreshold:y.durationThreshold||40});C=l(n,w,T,y.reportAllChanges),P&&(P.observe({type:\"first-input\",buffered:!0}),d((function(){a(P.takeRecords()),w.value<0&&R()>0&&(w.value=0,w.entries=[]),C(!0)})),o((function(){V=[],U=B(),w=f(\"INP\"),C=l(n,w,T,y.reportAllChanges)})))},X={},_=function(n,y){y=y||{};var T,C=[2500,4e3],w=h(),P=f(\"LCP\"),c=function(n){var y=n[n.length-1];if(y){var C=y.startTime-u();C<w.firstHiddenTime&&(P.value=C,P.entries=[y],T())}},I=s(\"largest-contentful-paint\",c);if(I){T=l(n,P,C,y.reportAllChanges);var v=function(){X[P.id]||(c(I.takeRecords()),I.disconnect(),X[P.id]=!0,T(!0))};[\"keydown\",\"click\"].forEach((function(n){addEventListener(n,v,{once:!0,capture:!0})})),d(v,!0),o((function(w){P=f(\"LCP\"),T=l(n,P,C,y.reportAllChanges),requestAnimationFrame((function(){requestAnimationFrame((function(){P.value=performance.now()-w.timeStamp,X[P.id]=!0,T(!0)}))}))}))}},Y=function e(n){document.prerendering?addEventListener(\"prerenderingchange\",(function(){return e(n)}),!0):\"complete\"!==document.readyState?addEventListener(\"load\",(function(){return e(n)}),!0):setTimeout(n,0)},G=function(n,y){y=y||{};var T=[800,1800],C=f(\"TTFB\"),w=l(n,C,T,y.reportAllChanges);Y((function(){var P=c();if(P){if(C.value=Math.max(P.responseStart-u(),0),C.value<0||C.value>performance.now())return;C.entries=[P],w(!0),o((function(){C=f(\"TTFB\",0),(w=l(n,C,T,y.reportAllChanges))(!0)}))}}))};module.exports=y})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3dlYi12aXRhbHMvd2ViLXZpdGFscy5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsWUFBWSxhQUFhLFNBQVMsWUFBWSxrQkFBa0IsZ0JBQWdCLHdCQUF3QiwyQkFBMkIseUJBQXlCLEtBQUssR0FBRyxZQUFZLGtCQUFrQixrREFBa0QsR0FBRyxZQUFZLGdCQUFnQixvREFBb0QsNENBQTRDLGVBQWUsRUFBRSxzQ0FBc0MsV0FBVyxHQUFHLEdBQUcsK0JBQStCLFNBQVMsS0FBSyxTQUFTLE9BQU8sT0FBTyxrQkFBa0IsU0FBUyxtQkFBbUIsU0FBUyxtQkFBbUIsU0FBUyxtQkFBbUIsU0FBUyxtQkFBbUIsU0FBUyxvQkFBb0IsU0FBUyxrQkFBa0IsU0FBUyxrQkFBa0IsU0FBUyxrQkFBa0IsU0FBUyxrQkFBa0IsU0FBUyxrQkFBa0IsU0FBUyxtQkFBbUIsVUFBVSxFQUFFLGlDQUFpQyx5Q0FBeUMsa0NBQWtDLE1BQU0sY0FBYyx1R0FBdUcsY0FBYyxVQUFVLCtCQUErQixpQkFBaUIsdUJBQXVCLDZHQUE2RyxxS0FBcUssbUJBQW1CLElBQUksd0RBQXdELDJDQUEyQyxrQkFBa0IsR0FBRyxnQ0FBZ0MsbUJBQW1CLE1BQU0sTUFBTSxXQUFXLGlCQUFpQixvQkFBb0IseUpBQXlKLDRFQUE0RSxxQkFBcUIsUUFBUSxtQkFBbUIsa0dBQWtHLHVEQUF1RCxtQkFBbUIsbUJBQW1CLHVFQUF1RSxjQUFjLGVBQWUsa0JBQWtCLElBQUksTUFBTSxjQUFjLHFDQUFxQyx1QkFBdUIsVUFBVSxLQUFLLEtBQUssc0JBQXNCLFdBQVcsaUJBQWlCLFFBQVEsa0RBQWtELHVCQUF1Qix3SUFBd0ksR0FBRyxtSkFBbUosZ0VBQWdFLDJFQUEyRSxrQ0FBa0MsNENBQTRDLEdBQUcsR0FBRyxJQUFJLDJCQUEyQixRQUFRLGVBQWUsbUJBQW1CLFVBQVUsU0FBUyxvQkFBb0IsV0FBVyxxQ0FBcUMsdUJBQXVCLHNCQUFzQiwyQkFBMkIsNklBQTZJLEdBQUcsdUJBQXVCLGdEQUFnRCx5QkFBeUIsaUJBQWlCLG9EQUFvRCxJQUFJLElBQUksc0JBQXNCLDRCQUE0QixtREFBbUQsY0FBYyxnQkFBZ0IsT0FBTyxpSUFBaUksdUJBQXVCLEtBQUssU0FBUyxlQUFlLGlCQUFpQixnRUFBZ0Usb0NBQW9DLGlCQUFpQixXQUFXLGNBQWMsSUFBSSxjQUFjLCtFQUErRSx3RUFBd0UsY0FBYyxlQUFlLHdFQUF3RSxnQkFBZ0IsR0FBRyxpQkFBaUIsUUFBUSxpREFBaUQsK0ZBQStGLGVBQWUsYUFBYSxzQkFBc0IsK0NBQStDLGtDQUFrQyx1QkFBdUIsTUFBTSxnR0FBZ0csR0FBRyw2QkFBNkIsdUJBQXVCLCtGQUErRixHQUFHLGNBQWMsMkNBQTJDLGNBQWMscURBQXFELDZDQUE2QyxHQUFHLGtCQUFrQixhQUFhLFVBQVUsZUFBZSx5Q0FBeUMseUNBQXlDLGdFQUFnRSxLQUFLLE9BQU8sbURBQW1ELG9CQUFvQixzQkFBc0IsMkJBQTJCLHFDQUFxQyxlQUFlLElBQUksaUJBQWlCLFFBQVEsZ0JBQWdCLElBQUksK0JBQStCLHVCQUF1QiwyRUFBMkUsbUNBQW1DLDBEQUEwRCxHQUFHLFVBQVUsR0FBRyx5REFBeUQsb0VBQW9FLGdCQUFnQiwwQ0FBMEMsRUFBRSw2Q0FBNkMsK0JBQStCLGdCQUFnQixvRUFBb0UsaUJBQWlCLG9EQUFvRCxJQUFJLEtBQUssaUJBQWlCLFFBQVEsa0RBQWtELG9CQUFvQixNQUFNLHNCQUFzQixvREFBb0QsbUNBQW1DLE1BQU0sOEJBQThCLGlCQUFpQiwrREFBK0QseUNBQXlDLHNCQUFzQixtQkFBbUIsRUFBRSwwQkFBMEIsMkVBQTJFLGtDQUFrQyx1REFBdUQsR0FBRyxHQUFHLElBQUksaUJBQWlCLHdFQUF3RSxZQUFZLDJFQUEyRSxZQUFZLHNCQUFzQixpQkFBaUIsUUFBUSwyREFBMkQsY0FBYyxVQUFVLE1BQU0sdUZBQXVGLGtDQUFrQyxrREFBa0QsSUFBSSxJQUFJLGlCQUFpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3dlYi12aXRhbHMvd2ViLXZpdGFscy5qcz8wOWY0Il0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9OyFmdW5jdGlvbigpe24uZD1mdW5jdGlvbih5LFQpe2Zvcih2YXIgQyBpbiBUKXtpZihuLm8oVCxDKSYmIW4ubyh5LEMpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeSxDLHtlbnVtZXJhYmxlOnRydWUsZ2V0OlRbQ119KX19fX0oKTshZnVuY3Rpb24oKXtuLm89ZnVuY3Rpb24obix5KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4seSl9fSgpOyFmdW5jdGlvbigpe24ucj1mdW5jdGlvbihuKXtpZih0eXBlb2YgU3ltYm9sIT09XCJ1bmRlZmluZWRcIiYmU3ltYm9sLnRvU3RyaW5nVGFnKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KX1PYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6dHJ1ZX0pfX0oKTtpZih0eXBlb2YgbiE9PVwidW5kZWZpbmVkXCIpbi5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIHk9e307bi5yKHkpO24uZCh5LHtnZXRDTFM6ZnVuY3Rpb24oKXtyZXR1cm4gRX0sZ2V0RkNQOmZ1bmN0aW9uKCl7cmV0dXJuIGd9LGdldEZJRDpmdW5jdGlvbigpe3JldHVybiBGfSxnZXRJTlA6ZnVuY3Rpb24oKXtyZXR1cm4gT30sZ2V0TENQOmZ1bmN0aW9uKCl7cmV0dXJuIF99LGdldFRURkI6ZnVuY3Rpb24oKXtyZXR1cm4gR30sb25DTFM6ZnVuY3Rpb24oKXtyZXR1cm4gRX0sb25GQ1A6ZnVuY3Rpb24oKXtyZXR1cm4gZ30sb25GSUQ6ZnVuY3Rpb24oKXtyZXR1cm4gRn0sb25JTlA6ZnVuY3Rpb24oKXtyZXR1cm4gT30sb25MQ1A6ZnVuY3Rpb24oKXtyZXR1cm4gX30sb25UVEZCOmZ1bmN0aW9uKCl7cmV0dXJuIEd9fSk7dmFyIFQsQyx3LFAsSSxrPS0xLG89ZnVuY3Rpb24obil7YWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VzaG93XCIsKGZ1bmN0aW9uKHkpe3kucGVyc2lzdGVkJiYoaz15LnRpbWVTdGFtcCxuKHkpKX0pLCEwKX0sYz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUmJnBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUoXCJuYXZpZ2F0aW9uXCIpWzBdfSx1PWZ1bmN0aW9uKCl7dmFyIG49YygpO3JldHVybiBuJiZuLmFjdGl2YXRpb25TdGFydHx8MH0sZj1mdW5jdGlvbihuLHkpe3ZhciBUPWMoKSxDPVwibmF2aWdhdGVcIjtyZXR1cm4gaz49MD9DPVwiYmFjay1mb3J3YXJkLWNhY2hlXCI6VCYmKEM9ZG9jdW1lbnQucHJlcmVuZGVyaW5nfHx1KCk+MD9cInByZXJlbmRlclwiOlQudHlwZS5yZXBsYWNlKC9fL2csXCItXCIpKSx7bmFtZTpuLHZhbHVlOnZvaWQgMD09PXk/LTE6eSxyYXRpbmc6XCJnb29kXCIsZGVsdGE6MCxlbnRyaWVzOltdLGlkOlwidjMtXCIuY29uY2F0KERhdGUubm93KCksXCItXCIpLmNvbmNhdChNYXRoLmZsb29yKDg5OTk5OTk5OTk5OTkqTWF0aC5yYW5kb20oKSkrMWUxMiksbmF2aWdhdGlvblR5cGU6Q319LHM9ZnVuY3Rpb24obix5LFQpe3RyeXtpZihQZXJmb3JtYW5jZU9ic2VydmVyLnN1cHBvcnRlZEVudHJ5VHlwZXMuaW5jbHVkZXMobikpe3ZhciBDPW5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKChmdW5jdGlvbihuKXt5KG4uZ2V0RW50cmllcygpKX0pKTtyZXR1cm4gQy5vYnNlcnZlKE9iamVjdC5hc3NpZ24oe3R5cGU6bixidWZmZXJlZDohMH0sVHx8e30pKSxDfX1jYXRjaChuKXt9fSxkPWZ1bmN0aW9uKG4seSl7dmFyIFQ9ZnVuY3Rpb24gdChUKXtcInBhZ2VoaWRlXCIhPT1ULnR5cGUmJlwiaGlkZGVuXCIhPT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGV8fChuKFQpLHkmJihyZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHQsITApLHJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLHQsITApKSl9O2FkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsVCwhMCksYWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VoaWRlXCIsVCwhMCl9LGw9ZnVuY3Rpb24obix5LFQsQyl7dmFyIHcsUDtyZXR1cm4gZnVuY3Rpb24oSSl7eS52YWx1ZT49MCYmKEl8fEMpJiYoKFA9eS52YWx1ZS0od3x8MCkpfHx2b2lkIDA9PT13KSYmKHc9eS52YWx1ZSx5LmRlbHRhPVAseS5yYXRpbmc9ZnVuY3Rpb24obix5KXtyZXR1cm4gbj55WzFdP1wicG9vclwiOm4+eVswXT9cIm5lZWRzLWltcHJvdmVtZW50XCI6XCJnb29kXCJ9KHkudmFsdWUsVCksbih5KSl9fSxOPS0xLHY9ZnVuY3Rpb24oKXtyZXR1cm5cImhpZGRlblwiIT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlfHxkb2N1bWVudC5wcmVyZW5kZXJpbmc/MS8wOjB9LG09ZnVuY3Rpb24oKXtkKChmdW5jdGlvbihuKXt2YXIgeT1uLnRpbWVTdGFtcDtOPXl9KSwhMCl9LGg9ZnVuY3Rpb24oKXtyZXR1cm4gTjwwJiYoTj12KCksbSgpLG8oKGZ1bmN0aW9uKCl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtOPXYoKSxtKCl9KSwwKX0pKSkse2dldCBmaXJzdEhpZGRlblRpbWUoKXtyZXR1cm4gTn19fSxnPWZ1bmN0aW9uKG4seSl7eT15fHx7fTt2YXIgVCxDPVsxODAwLDNlM10sdz1oKCksUD1mKFwiRkNQXCIpLGM9ZnVuY3Rpb24obil7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtcImZpcnN0LWNvbnRlbnRmdWwtcGFpbnRcIj09PW4ubmFtZSYmKGsmJmsuZGlzY29ubmVjdCgpLG4uc3RhcnRUaW1lPHcuZmlyc3RIaWRkZW5UaW1lJiYoUC52YWx1ZT1uLnN0YXJ0VGltZS11KCksUC5lbnRyaWVzLnB1c2gobiksVCghMCkpKX0pKX0sST13aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lJiZ3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZShcImZpcnN0LWNvbnRlbnRmdWwtcGFpbnRcIilbMF0saz1JP251bGw6cyhcInBhaW50XCIsYyk7KEl8fGspJiYoVD1sKG4sUCxDLHkucmVwb3J0QWxsQ2hhbmdlcyksSSYmYyhbSV0pLG8oKGZ1bmN0aW9uKHcpe1A9ZihcIkZDUFwiKSxUPWwobixQLEMseS5yZXBvcnRBbGxDaGFuZ2VzKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe1AudmFsdWU9cGVyZm9ybWFuY2Uubm93KCktdy50aW1lU3RhbXAsVCghMCl9KSl9KSl9KSkpfSxqPSExLHE9LTEsRT1mdW5jdGlvbihuLHkpe3k9eXx8e307dmFyIFQ9Wy4xLC4yNV07anx8KGcoKGZ1bmN0aW9uKG4pe3E9bi52YWx1ZX0pKSxqPSEwKTt2YXIgQyxpPWZ1bmN0aW9uKHkpe3E+LTEmJm4oeSl9LHc9ZihcIkNMU1wiLDApLFA9MCxJPVtdLHA9ZnVuY3Rpb24obil7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtpZighbi5oYWRSZWNlbnRJbnB1dCl7dmFyIHk9SVswXSxUPUlbSS5sZW5ndGgtMV07UCYmbi5zdGFydFRpbWUtVC5zdGFydFRpbWU8MWUzJiZuLnN0YXJ0VGltZS15LnN0YXJ0VGltZTw1ZTM/KFArPW4udmFsdWUsSS5wdXNoKG4pKTooUD1uLnZhbHVlLEk9W25dKSxQPncudmFsdWUmJih3LnZhbHVlPVAsdy5lbnRyaWVzPUksQygpKX19KSl9LGs9cyhcImxheW91dC1zaGlmdFwiLHApO2smJihDPWwoaSx3LFQseS5yZXBvcnRBbGxDaGFuZ2VzKSxkKChmdW5jdGlvbigpe3Aoay50YWtlUmVjb3JkcygpKSxDKCEwKX0pKSxvKChmdW5jdGlvbigpe1A9MCxxPS0xLHc9ZihcIkNMU1wiLDApLEM9bChpLHcsVCx5LnJlcG9ydEFsbENoYW5nZXMpfSkpKX0seD17cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSx6PW5ldyBEYXRlLEw9ZnVuY3Rpb24obix5KXtUfHwoVD15LEM9bix3PW5ldyBEYXRlLEEocmVtb3ZlRXZlbnRMaXN0ZW5lciksUygpKX0sUz1mdW5jdGlvbigpe2lmKEM+PTAmJkM8dy16KXt2YXIgbj17ZW50cnlUeXBlOlwiZmlyc3QtaW5wdXRcIixuYW1lOlQudHlwZSx0YXJnZXQ6VC50YXJnZXQsY2FuY2VsYWJsZTpULmNhbmNlbGFibGUsc3RhcnRUaW1lOlQudGltZVN0YW1wLHByb2Nlc3NpbmdTdGFydDpULnRpbWVTdGFtcCtDfTtQLmZvckVhY2goKGZ1bmN0aW9uKHkpe3kobil9KSksUD1bXX19LGI9ZnVuY3Rpb24obil7aWYobi5jYW5jZWxhYmxlKXt2YXIgeT0obi50aW1lU3RhbXA+MWUxMj9uZXcgRGF0ZTpwZXJmb3JtYW5jZS5ub3coKSktbi50aW1lU3RhbXA7XCJwb2ludGVyZG93blwiPT1uLnR5cGU/ZnVuY3Rpb24obix5KXt2YXIgdD1mdW5jdGlvbigpe0wobix5KSxpKCl9LHI9ZnVuY3Rpb24oKXtpKCl9LGk9ZnVuY3Rpb24oKXtyZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsdCx4KSxyZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLHIseCl9O2FkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIix0LHgpLGFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIscix4KX0oeSxuKTpMKHksbil9fSxBPWZ1bmN0aW9uKG4pe1tcIm1vdXNlZG93blwiLFwia2V5ZG93blwiLFwidG91Y2hzdGFydFwiLFwicG9pbnRlcmRvd25cIl0uZm9yRWFjaCgoZnVuY3Rpb24oeSl7cmV0dXJuIG4oeSxiLHgpfSkpfSxGPWZ1bmN0aW9uKG4seSl7eT15fHx7fTt2YXIgdyxJPVsxMDAsMzAwXSxrPWgoKSxOPWYoXCJGSURcIiksdj1mdW5jdGlvbihuKXtuLnN0YXJ0VGltZTxrLmZpcnN0SGlkZGVuVGltZSYmKE4udmFsdWU9bi5wcm9jZXNzaW5nU3RhcnQtbi5zdGFydFRpbWUsTi5lbnRyaWVzLnB1c2gobiksdyghMCkpfSxtPWZ1bmN0aW9uKG4pe24uZm9yRWFjaCh2KX0saj1zKFwiZmlyc3QtaW5wdXRcIixtKTt3PWwobixOLEkseS5yZXBvcnRBbGxDaGFuZ2VzKSxqJiZkKChmdW5jdGlvbigpe20oai50YWtlUmVjb3JkcygpKSxqLmRpc2Nvbm5lY3QoKX0pLCEwKSxqJiZvKChmdW5jdGlvbigpe3ZhciBrO049ZihcIkZJRFwiKSx3PWwobixOLEkseS5yZXBvcnRBbGxDaGFuZ2VzKSxQPVtdLEM9LTEsVD1udWxsLEEoYWRkRXZlbnRMaXN0ZW5lciksaz12LFAucHVzaChrKSxTKCl9KSl9LEo9MCxLPTEvMCxRPTAsTT1mdW5jdGlvbihuKXtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe24uaW50ZXJhY3Rpb25JZCYmKEs9TWF0aC5taW4oSyxuLmludGVyYWN0aW9uSWQpLFE9TWF0aC5tYXgoUSxuLmludGVyYWN0aW9uSWQpLEo9UT8oUS1LKS83KzE6MCl9KSl9LEI9ZnVuY3Rpb24oKXtyZXR1cm4gST9KOnBlcmZvcm1hbmNlLmludGVyYWN0aW9uQ291bnR8fDB9LEQ9ZnVuY3Rpb24oKXtcImludGVyYWN0aW9uQ291bnRcImluIHBlcmZvcm1hbmNlfHxJfHwoST1zKFwiZXZlbnRcIixNLHt0eXBlOlwiZXZlbnRcIixidWZmZXJlZDohMCxkdXJhdGlvblRocmVzaG9sZDowfSkpfSxVPTAsUj1mdW5jdGlvbigpe3JldHVybiBCKCktVX0sVj1bXSxXPXt9LEg9ZnVuY3Rpb24obil7dmFyIHk9VltWLmxlbmd0aC0xXSxUPVdbbi5pbnRlcmFjdGlvbklkXTtpZihUfHxWLmxlbmd0aDwxMHx8bi5kdXJhdGlvbj55LmxhdGVuY3kpe2lmKFQpVC5lbnRyaWVzLnB1c2gobiksVC5sYXRlbmN5PU1hdGgubWF4KFQubGF0ZW5jeSxuLmR1cmF0aW9uKTtlbHNle3ZhciBDPXtpZDpuLmludGVyYWN0aW9uSWQsbGF0ZW5jeTpuLmR1cmF0aW9uLGVudHJpZXM6W25dfTtXW0MuaWRdPUMsVi5wdXNoKEMpfVYuc29ydCgoZnVuY3Rpb24obix5KXtyZXR1cm4geS5sYXRlbmN5LW4ubGF0ZW5jeX0pKSxWLnNwbGljZSgxMCkuZm9yRWFjaCgoZnVuY3Rpb24obil7ZGVsZXRlIFdbbi5pZF19KSl9fSxPPWZ1bmN0aW9uKG4seSl7eT15fHx7fTt2YXIgVD1bMjAwLDUwMF07RCgpO3ZhciBDLHc9ZihcIklOUFwiKSxhPWZ1bmN0aW9uKG4pe24uZm9yRWFjaCgoZnVuY3Rpb24obil7KG4uaW50ZXJhY3Rpb25JZCYmSChuKSxcImZpcnN0LWlucHV0XCI9PT1uLmVudHJ5VHlwZSkmJighVi5zb21lKChmdW5jdGlvbih5KXtyZXR1cm4geS5lbnRyaWVzLnNvbWUoKGZ1bmN0aW9uKHkpe3JldHVybiBuLmR1cmF0aW9uPT09eS5kdXJhdGlvbiYmbi5zdGFydFRpbWU9PT15LnN0YXJ0VGltZX0pKX0pKSYmSChuKSl9KSk7dmFyIHksVD0oeT1NYXRoLm1pbihWLmxlbmd0aC0xLE1hdGguZmxvb3IoUigpLzUwKSksVlt5XSk7VCYmVC5sYXRlbmN5IT09dy52YWx1ZSYmKHcudmFsdWU9VC5sYXRlbmN5LHcuZW50cmllcz1ULmVudHJpZXMsQygpKX0sUD1zKFwiZXZlbnRcIixhLHtkdXJhdGlvblRocmVzaG9sZDp5LmR1cmF0aW9uVGhyZXNob2xkfHw0MH0pO0M9bChuLHcsVCx5LnJlcG9ydEFsbENoYW5nZXMpLFAmJihQLm9ic2VydmUoe3R5cGU6XCJmaXJzdC1pbnB1dFwiLGJ1ZmZlcmVkOiEwfSksZCgoZnVuY3Rpb24oKXthKFAudGFrZVJlY29yZHMoKSksdy52YWx1ZTwwJiZSKCk+MCYmKHcudmFsdWU9MCx3LmVudHJpZXM9W10pLEMoITApfSkpLG8oKGZ1bmN0aW9uKCl7Vj1bXSxVPUIoKSx3PWYoXCJJTlBcIiksQz1sKG4sdyxULHkucmVwb3J0QWxsQ2hhbmdlcyl9KSkpfSxYPXt9LF89ZnVuY3Rpb24obix5KXt5PXl8fHt9O3ZhciBULEM9WzI1MDAsNGUzXSx3PWgoKSxQPWYoXCJMQ1BcIiksYz1mdW5jdGlvbihuKXt2YXIgeT1uW24ubGVuZ3RoLTFdO2lmKHkpe3ZhciBDPXkuc3RhcnRUaW1lLXUoKTtDPHcuZmlyc3RIaWRkZW5UaW1lJiYoUC52YWx1ZT1DLFAuZW50cmllcz1beV0sVCgpKX19LEk9cyhcImxhcmdlc3QtY29udGVudGZ1bC1wYWludFwiLGMpO2lmKEkpe1Q9bChuLFAsQyx5LnJlcG9ydEFsbENoYW5nZXMpO3ZhciB2PWZ1bmN0aW9uKCl7WFtQLmlkXXx8KGMoSS50YWtlUmVjb3JkcygpKSxJLmRpc2Nvbm5lY3QoKSxYW1AuaWRdPSEwLFQoITApKX07W1wia2V5ZG93blwiLFwiY2xpY2tcIl0uZm9yRWFjaCgoZnVuY3Rpb24obil7YWRkRXZlbnRMaXN0ZW5lcihuLHYse29uY2U6ITAsY2FwdHVyZTohMH0pfSkpLGQodiwhMCksbygoZnVuY3Rpb24odyl7UD1mKFwiTENQXCIpLFQ9bChuLFAsQyx5LnJlcG9ydEFsbENoYW5nZXMpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7UC52YWx1ZT1wZXJmb3JtYW5jZS5ub3coKS13LnRpbWVTdGFtcCxYW1AuaWRdPSEwLFQoITApfSkpfSkpfSkpfX0sWT1mdW5jdGlvbiBlKG4pe2RvY3VtZW50LnByZXJlbmRlcmluZz9hZGRFdmVudExpc3RlbmVyKFwicHJlcmVuZGVyaW5nY2hhbmdlXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGUobil9KSwhMCk6XCJjb21wbGV0ZVwiIT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLChmdW5jdGlvbigpe3JldHVybiBlKG4pfSksITApOnNldFRpbWVvdXQobiwwKX0sRz1mdW5jdGlvbihuLHkpe3k9eXx8e307dmFyIFQ9WzgwMCwxODAwXSxDPWYoXCJUVEZCXCIpLHc9bChuLEMsVCx5LnJlcG9ydEFsbENoYW5nZXMpO1koKGZ1bmN0aW9uKCl7dmFyIFA9YygpO2lmKFApe2lmKEMudmFsdWU9TWF0aC5tYXgoUC5yZXNwb25zZVN0YXJ0LXUoKSwwKSxDLnZhbHVlPDB8fEMudmFsdWU+cGVyZm9ybWFuY2Uubm93KCkpcmV0dXJuO0MuZW50cmllcz1bUF0sdyghMCksbygoZnVuY3Rpb24oKXtDPWYoXCJUVEZCXCIsMCksKHc9bChuLEMsVCx5LnJlcG9ydEFsbENoYW5nZXMpKSghMCl9KSl9fSkpfTttb2R1bGUuZXhwb3J0cz15fSkoKTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/web-vitals/web-vitals.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/lib/is-api-route.js": +/*!****************************************************!*\ + !*** ./node_modules/next/dist/lib/is-api-route.js ***! + \****************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isAPIRoute\", ({\n enumerable: true,\n get: function() {\n return isAPIRoute;\n }\n}));\nfunction isAPIRoute(value) {\n return value === \"/api\" || Boolean(value == null ? void 0 : value.startsWith(\"/api/\"));\n}\n\n//# sourceMappingURL=is-api-route.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9pcy1hcGktcm91dGUuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRiw4Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvaXMtYXBpLXJvdXRlLmpzPzE2ODEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FQSVJvdXRlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0FQSVJvdXRlO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gaXNBUElSb3V0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gXCIvYXBpXCIgfHwgQm9vbGVhbih2YWx1ZSA9PSBudWxsID8gdm9pZCAwIDogdmFsdWUuc3RhcnRzV2l0aChcIi9hcGkvXCIpKTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXMtYXBpLXJvdXRlLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/lib/is-api-route.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/lib/is-error.js": +/*!************************************************!*\ + !*** ./node_modules/next/dist/lib/is-error.js ***! + \************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return isError;\n },\n getProperError: function() {\n return getProperError;\n }\n});\nconst _isplainobject = __webpack_require__(/*! ../shared/lib/is-plain-object */ \"./node_modules/next/dist/shared/lib/is-plain-object.js\");\nfunction isError(err) {\n return typeof err === \"object\" && err !== null && \"name\" in err && \"message\" in err;\n}\nfunction getProperError(err) {\n if (isError(err)) {\n return err;\n }\n if (true) {\n // provide better error for case where `throw undefined`\n // is called in development\n if (typeof err === \"undefined\") {\n return new Error(\"An undefined error was thrown, \" + \"see here for more info: https://nextjs.org/docs/messages/threw-undefined\");\n }\n if (err === null) {\n return new Error(\"A null error was thrown, \" + \"see here for more info: https://nextjs.org/docs/messages/threw-undefined\");\n }\n }\n return new Error((0, _isplainobject.isPlainObject)(err) ? JSON.stringify(err) : err + \"\");\n}\n\n//# sourceMappingURL=is-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9pcy1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLE1BQU0sQ0FHTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCx1QkFBdUIsbUJBQU8sQ0FBQyw2RkFBK0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXNDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvaXMtZXJyb3IuanM/MTc4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgZ2V0UHJvcGVyRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZGVmYXVsdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0Vycm9yO1xuICAgIH0sXG4gICAgZ2V0UHJvcGVyRXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0UHJvcGVyRXJyb3I7XG4gICAgfVxufSk7XG5jb25zdCBfaXNwbGFpbm9iamVjdCA9IHJlcXVpcmUoXCIuLi9zaGFyZWQvbGliL2lzLXBsYWluLW9iamVjdFwiKTtcbmZ1bmN0aW9uIGlzRXJyb3IoZXJyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIgJiYgZXJyICE9PSBudWxsICYmIFwibmFtZVwiIGluIGVyciAmJiBcIm1lc3NhZ2VcIiBpbiBlcnI7XG59XG5mdW5jdGlvbiBnZXRQcm9wZXJFcnJvcihlcnIpIHtcbiAgICBpZiAoaXNFcnJvcihlcnIpKSB7XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiKSB7XG4gICAgICAgIC8vIHByb3ZpZGUgYmV0dGVyIGVycm9yIGZvciBjYXNlIHdoZXJlIGB0aHJvdyB1bmRlZmluZWRgXG4gICAgICAgIC8vIGlzIGNhbGxlZCBpbiBkZXZlbG9wbWVudFxuICAgICAgICBpZiAodHlwZW9mIGVyciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkFuIHVuZGVmaW5lZCBlcnJvciB3YXMgdGhyb3duLCBcIiArIFwic2VlIGhlcmUgZm9yIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvdGhyZXctdW5kZWZpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIG51bGwgZXJyb3Igd2FzIHRocm93biwgXCIgKyBcInNlZSBoZXJlIGZvciBtb3JlIGluZm86IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3RocmV3LXVuZGVmaW5lZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEVycm9yKCgwLCBfaXNwbGFpbm9iamVjdC5pc1BsYWluT2JqZWN0KShlcnIpID8gSlNPTi5zdHJpbmdpZnkoZXJyKSA6IGVyciArIFwiXCIpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1lcnJvci5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/lib/is-error.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/server/api-utils/get-cookie-parser.js": +/*!**********************************************************************!*\ + !*** ./node_modules/next/dist/server/api-utils/get-cookie-parser.js ***! + \**********************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getCookieParser\", ({\n enumerable: true,\n get: function() {\n return getCookieParser;\n }\n}));\nfunction getCookieParser(headers) {\n return function parseCookie() {\n const { cookie } = headers;\n if (!cookie) {\n return {};\n }\n const { parse: parseCookieFn } = __webpack_require__(/*! next/dist/compiled/cookie */ \"./node_modules/next/dist/compiled/cookie/index.js\");\n return parseCookieFn(Array.isArray(cookie) ? cookie.join(\"; \") : cookie);\n };\n}\n\n//# sourceMappingURL=get-cookie-parser.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9hcGktdXRpbHMvZ2V0LWNvb2tpZS1wYXJzZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixtREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRjtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHVCQUF1QixFQUFFLG1CQUFPLENBQUMsb0ZBQTJCO0FBQzVFLG9FQUFvRTtBQUNwRTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2FwaS11dGlscy9nZXQtY29va2llLXBhcnNlci5qcz85OWNkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0Q29va2llUGFyc2VyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRDb29raWVQYXJzZXI7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBnZXRDb29raWVQYXJzZXIoaGVhZGVycykge1xuICAgIHJldHVybiBmdW5jdGlvbiBwYXJzZUNvb2tpZSgpIHtcbiAgICAgICAgY29uc3QgeyBjb29raWUgfSA9IGhlYWRlcnM7XG4gICAgICAgIGlmICghY29va2llKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwYXJzZTogcGFyc2VDb29raWVGbiB9ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9jb29raWVcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUNvb2tpZUZuKEFycmF5LmlzQXJyYXkoY29va2llKSA/IGNvb2tpZS5qb2luKFwiOyBcIikgOiBjb29raWUpO1xuICAgIH07XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldC1jb29raWUtcGFyc2VyLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/api-utils/get-cookie-parser.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/server/dev/hot-reloader-types.js": +/*!*****************************************************************!*\ + !*** ./node_modules/next/dist/server/dev/hot-reloader-types.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"HMR_ACTIONS_SENT_TO_BROWSER\", ({\n enumerable: true,\n get: function() {\n return HMR_ACTIONS_SENT_TO_BROWSER;\n }\n}));\nvar HMR_ACTIONS_SENT_TO_BROWSER;\n(function(HMR_ACTIONS_SENT_TO_BROWSER) {\n HMR_ACTIONS_SENT_TO_BROWSER[\"ADDED_PAGE\"] = \"addedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"REMOVED_PAGE\"] = \"removedPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"RELOAD_PAGE\"] = \"reloadPage\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_COMPONENT_CHANGES\"] = \"serverComponentChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"MIDDLEWARE_CHANGES\"] = \"middlewareChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"CLIENT_CHANGES\"] = \"clientChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ONLY_CHANGES\"] = \"serverOnlyChanges\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SYNC\"] = \"sync\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILT\"] = \"built\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"BUILDING\"] = \"building\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"FINISH_BUILDING\"] = \"finishBuilding\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_PAGES_MANIFEST_UPDATE\"] = \"devPagesManifestUpdate\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_MESSAGE\"] = \"turbopack-message\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ERROR\"] = \"serverError\";\n HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_CONNECTED\"] = \"turbopack-connected\";\n})(HMR_ACTIONS_SENT_TO_BROWSER || (HMR_ACTIONS_SENT_TO_BROWSER = {}));\n\n//# sourceMappingURL=hot-reloader-types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsK0RBQThEO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsa0VBQWtFOztBQUVuRSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzLmpzP2JmYWEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUjtcbiAgICB9XG59KTtcbnZhciBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVI7XG4oZnVuY3Rpb24oSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSKSB7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQURERURfUEFHRVwiXSA9IFwiYWRkZWRQYWdlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiUkVNT1ZFRF9QQUdFXCJdID0gXCJyZW1vdmVkUGFnZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlJFTE9BRF9QQUdFXCJdID0gXCJyZWxvYWRQYWdlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiU0VSVkVSX0NPTVBPTkVOVF9DSEFOR0VTXCJdID0gXCJzZXJ2ZXJDb21wb25lbnRDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiTUlERExFV0FSRV9DSEFOR0VTXCJdID0gXCJtaWRkbGV3YXJlQ2hhbmdlc1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkNMSUVOVF9DSEFOR0VTXCJdID0gXCJjbGllbnRDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiU0VSVkVSX09OTFlfQ0hBTkdFU1wiXSA9IFwic2VydmVyT25seUNoYW5nZXNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTWU5DXCJdID0gXCJzeW5jXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQlVJTFRcIl0gPSBcImJ1aWx0XCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQlVJTERJTkdcIl0gPSBcImJ1aWxkaW5nXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiRklOSVNIX0JVSUxESU5HXCJdID0gXCJmaW5pc2hCdWlsZGluZ1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkRFVl9QQUdFU19NQU5JRkVTVF9VUERBVEVcIl0gPSBcImRldlBhZ2VzTWFuaWZlc3RVcGRhdGVcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJUVVJCT1BBQ0tfTUVTU0FHRVwiXSA9IFwidHVyYm9wYWNrLW1lc3NhZ2VcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTRVJWRVJfRVJST1JcIl0gPSBcInNlcnZlckVycm9yXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiVFVSQk9QQUNLX0NPTk5FQ1RFRFwiXSA9IFwidHVyYm9wYWNrLWNvbm5lY3RlZFwiO1xufSkoSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIHx8IChITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIgPSB7fSkpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob3QtcmVsb2FkZXItdHlwZXMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/dev/hot-reloader-types.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/server/future/helpers/interception-routes.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/next/dist/server/future/helpers/interception-routes.js ***! + \*****************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n INTERCEPTION_ROUTE_MARKERS: function() {\n return INTERCEPTION_ROUTE_MARKERS;\n },\n isInterceptionRouteAppPath: function() {\n return isInterceptionRouteAppPath;\n },\n extractInterceptionRouteInformation: function() {\n return extractInterceptionRouteInformation;\n }\n});\nconst _apppaths = __webpack_require__(/*! ../../../shared/lib/router/utils/app-paths */ \"./node_modules/next/dist/shared/lib/router/utils/app-paths.js\");\nconst INTERCEPTION_ROUTE_MARKERS = [\n \"(..)(..)\",\n \"(.)\",\n \"(..)\",\n \"(...)\"\n];\nfunction isInterceptionRouteAppPath(path) {\n // TODO-APP: add more serious validation\n return path.split(\"/\").find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined;\n}\nfunction extractInterceptionRouteInformation(path) {\n let interceptingRoute, marker, interceptedRoute;\n for (const segment of path.split(\"/\")){\n marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n if (marker) {\n [interceptingRoute, interceptedRoute] = path.split(marker, 2);\n break;\n }\n }\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(`Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`);\n }\n interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n ;\n switch(marker){\n case \"(.)\":\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === \"/\") {\n interceptedRoute = `/${interceptedRoute}`;\n } else {\n interceptedRoute = interceptingRoute + \"/\" + interceptedRoute;\n }\n break;\n case \"(..)\":\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === \"/\") {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`);\n }\n interceptedRoute = interceptingRoute.split(\"/\").slice(0, -1).concat(interceptedRoute).join(\"/\");\n break;\n case \"(...)\":\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = \"/\" + interceptedRoute;\n break;\n case \"(..)(..)\":\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n const splitInterceptingRoute = interceptingRoute.split(\"/\");\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(`Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`);\n }\n interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join(\"/\");\n break;\n default:\n throw new Error(\"Invariant: unexpected marker\");\n }\n return {\n interceptingRoute,\n interceptedRoute\n };\n}\n\n//# sourceMappingURL=interception-routes.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9mdXR1cmUvaGVscGVycy9pbnRlcmNlcHRpb24tcm91dGVzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUlMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsa0JBQWtCLG1CQUFPLENBQUMsaUhBQTRDO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsS0FBSztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxpQkFBaUI7QUFDeEQsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCxLQUFLO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0QsS0FBSztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2Z1dHVyZS9oZWxwZXJzL2ludGVyY2VwdGlvbi1yb3V0ZXMuanM/MzVjYyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTOiBudWxsLFxuICAgIGlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoOiBudWxsLFxuICAgIGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTO1xuICAgIH0sXG4gICAgaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGg7XG4gICAgfSxcbiAgICBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbjtcbiAgICB9XG59KTtcbmNvbnN0IF9hcHBwYXRocyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hcHAtcGF0aHNcIik7XG5jb25zdCBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyA9IFtcbiAgICBcIiguLikoLi4pXCIsXG4gICAgXCIoLilcIixcbiAgICBcIiguLilcIixcbiAgICBcIiguLi4pXCJcbl07XG5mdW5jdGlvbiBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aChwYXRoKSB7XG4gICAgLy8gVE9ETy1BUFA6IGFkZCBtb3JlIHNlcmlvdXMgdmFsaWRhdGlvblxuICAgIHJldHVybiBwYXRoLnNwbGl0KFwiL1wiKS5maW5kKChzZWdtZW50KT0+SU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSk9PnNlZ21lbnQuc3RhcnRzV2l0aChtKSkpICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBleHRyYWN0SW50ZXJjZXB0aW9uUm91dGVJbmZvcm1hdGlvbihwYXRoKSB7XG4gICAgbGV0IGludGVyY2VwdGluZ1JvdXRlLCBtYXJrZXIsIGludGVyY2VwdGVkUm91dGU7XG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHBhdGguc3BsaXQoXCIvXCIpKXtcbiAgICAgICAgbWFya2VyID0gSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSk9PnNlZ21lbnQuc3RhcnRzV2l0aChtKSk7XG4gICAgICAgIGlmIChtYXJrZXIpIHtcbiAgICAgICAgICAgIFtpbnRlcmNlcHRpbmdSb3V0ZSwgaW50ZXJjZXB0ZWRSb3V0ZV0gPSBwYXRoLnNwbGl0KG1hcmtlciwgMik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWludGVyY2VwdGluZ1JvdXRlIHx8ICFtYXJrZXIgfHwgIWludGVyY2VwdGVkUm91dGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gTXVzdCBiZSBpbiB0aGUgZm9ybWF0IC88aW50ZXJjZXB0aW5nIHJvdXRlPi8oLi58Li4ufC4uKSguLikvPGludGVyY2VwdGVkIHJvdXRlPmApO1xuICAgIH1cbiAgICBpbnRlcmNlcHRpbmdSb3V0ZSA9ICgwLCBfYXBwcGF0aHMubm9ybWFsaXplQXBwUGF0aCkoaW50ZXJjZXB0aW5nUm91dGUpIC8vIG5vcm1hbGl6ZSB0aGUgcGF0aCwgZS5nLiAvKGJsb2cpL2ZlZWQgLT4gL2ZlZWRcbiAgICA7XG4gICAgc3dpdGNoKG1hcmtlcil7XG4gICAgICAgIGNhc2UgXCIoLilcIjpcbiAgICAgICAgICAgIC8vICguKSBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgbWF0Y2ggd2l0aCBzaWJsaW5nIHJvdXRlcywgc28gd2UganVzdCBuZWVkIHRvIGFwcGVuZCB0aGUgaW50ZXJjZXB0ZWQgcm91dGUgdG8gdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgICAgICAgaWYgKGludGVyY2VwdGluZ1JvdXRlID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIGludGVyY2VwdGVkUm91dGUgPSBgLyR7aW50ZXJjZXB0ZWRSb3V0ZX1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnRlcmNlcHRlZFJvdXRlID0gaW50ZXJjZXB0aW5nUm91dGUgKyBcIi9cIiArIGludGVyY2VwdGVkUm91dGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIiguLilcIjpcbiAgICAgICAgICAgIC8vICguLikgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIG1hdGNoIGF0IG9uZSBsZXZlbCB1cCwgc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG4gICAgICAgICAgICBpZiAoaW50ZXJjZXB0aW5nUm91dGUgPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pIG1hcmtlciBhdCB0aGUgcm9vdCBsZXZlbCwgdXNlICguKSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlLnNwbGl0KFwiL1wiKS5zbGljZSgwLCAtMSkuY29uY2F0KGludGVyY2VwdGVkUm91dGUpLmpvaW4oXCIvXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCIoLi4uKVwiOlxuICAgICAgICAgICAgLy8gKC4uLikgd2lsbCBtYXRjaCB0aGUgcm91dGUgc2VnbWVudCBpbiB0aGUgcm9vdCBkaXJlY3RvcnksIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSByb290IGRpcmVjdG9yeSB0byBwcmVwZW5kIHRoZSBpbnRlcmNlcHRlZCByb3V0ZVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IFwiL1wiICsgaW50ZXJjZXB0ZWRSb3V0ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiKC4uKSguLilcIjpcbiAgICAgICAgICAgIC8vICguLikoLi4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCBhdCB0d28gbGV2ZWxzIHVwLCBzbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCB0d28gc2VnbWVudHMgb2YgdGhlIGludGVyY2VwdGluZyByb3V0ZVxuICAgICAgICAgICAgY29uc3Qgc3BsaXRJbnRlcmNlcHRpbmdSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChzcGxpdEludGVyY2VwdGluZ1JvdXRlLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVyY2VwdGlvbiByb3V0ZTogJHtwYXRofS4gQ2Fubm90IHVzZSAoLi4pKC4uKSBtYXJrZXIgYXQgdGhlIHJvb3QgbGV2ZWwgb3Igb25lIGxldmVsIHVwLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IHNwbGl0SW50ZXJjZXB0aW5nUm91dGUuc2xpY2UoMCwgLTIpLmNvbmNhdChpbnRlcmNlcHRlZFJvdXRlKS5qb2luKFwiL1wiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YXJpYW50OiB1bmV4cGVjdGVkIG1hcmtlclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW50ZXJjZXB0aW5nUm91dGUsXG4gICAgICAgIGludGVyY2VwdGVkUm91dGVcbiAgICB9O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcmNlcHRpb24tcm91dGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/server/future/helpers/interception-routes.js\n")); + +/***/ }), + +/***/ "./node_modules/react-dom/cjs/react-dom.development.js": +/*!*************************************************************!*\ + !*** ./node_modules/react-dom/cjs/react-dom.development.js ***! + \*************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * react-dom.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nvar Scheduler = __webpack_require__(/*! scheduler */ \"./node_modules/scheduler/index.js\");\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nvar suppressWarning = false;\nfunction setSuppressWarning(newSuppressWarning) {\n {\n suppressWarning = newSuppressWarning;\n }\n} // In DEV, calls to console.warn and console.error get replaced\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n {\n if (!suppressWarning) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n printWarning('warn', format, args);\n }\n }\n}\nfunction error(format) {\n {\n if (!suppressWarning) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\nvar FunctionComponent = 0;\nvar ClassComponent = 1;\nvar IndeterminateComponent = 2; // Before we know whether it is function or class\n\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\n\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\n\nvar HostComponent = 5;\nvar HostText = 6;\nvar Fragment = 7;\nvar Mode = 8;\nvar ContextConsumer = 9;\nvar ContextProvider = 10;\nvar ForwardRef = 11;\nvar Profiler = 12;\nvar SuspenseComponent = 13;\nvar MemoComponent = 14;\nvar SimpleMemoComponent = 15;\nvar LazyComponent = 16;\nvar IncompleteClassComponent = 17;\nvar DehydratedFragment = 18;\nvar SuspenseListComponent = 19;\nvar ScopeComponent = 21;\nvar OffscreenComponent = 22;\nvar LegacyHiddenComponent = 23;\nvar CacheComponent = 24;\nvar TracingMarkerComponent = 25;\n\n// -----------------------------------------------------------------------------\n\nvar enableClientRenderFallbackOnTextMismatch = true; // TODO: Need to review this code one more time before landing\n// the react-reconciler package.\n\nvar enableNewReconciler = false; // Support legacy Primer support on internal FB www\n\nvar enableLazyContextPropagation = false; // FB-only usage. The new API has different semantics.\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n\nvar enableSuspenseAvoidThisFallback = false; // Enables unstable_avoidThisFallback feature in Fizz\n// React DOM Chopping Block\n//\n// Similar to main Chopping Block but only flags related to React DOM. These are\n// grouped because we will likely batch all of them into a single major release.\n// -----------------------------------------------------------------------------\n// Disable support for comment nodes as React DOM containers. Already disabled\n// in open source, but www codebase still relies on it. Need to remove.\n\nvar disableCommentsAsDOMContainers = true; // Disable javascript: URL strings in href for XSS protection.\n// and client rendering, mostly to allow JSX attributes to apply to the custom\n// element's object properties instead of only HTML attributes.\n// https://github.com/facebook/react/issues/11347\n\nvar enableCustomElementPropertySupport = false; // Disables children for <textarea> elements\nvar warnAboutStringRefs = false; // -----------------------------------------------------------------------------\n// Debugging and DevTools\n// -----------------------------------------------------------------------------\n// Adds user timing marks for e.g. state updates, suspense, and work loop stuff,\n// for an experimental timeline tool.\n\nvar enableSchedulingProfiler = true; // Helps identify side effects in render-phase lifecycle hooks and setState\n\nvar enableProfilerTimer = true; // Record durations for commit and passive effects phases.\n\nvar enableProfilerCommitHooks = true; // Phase param passed to onRender callback differentiates between an \"update\" and a \"cascading-update\".\n\nvar allNativeEvents = new Set();\n/**\n * Mapping from registration name to event name\n */\n\n\nvar registrationNameDependencies = {};\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\n\nvar possibleRegistrationNames = {} ; // Trust the developer to only use possibleRegistrationNames in true\n\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n registerDirectEvent(registrationName, dependencies);\n registerDirectEvent(registrationName + 'Capture', dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n {\n if (registrationNameDependencies[registrationName]) {\n error('EventRegistry: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName);\n }\n }\n\n registrationNameDependencies[registrationName] = dependencies;\n\n {\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n\n for (var i = 0; i < dependencies.length; i++) {\n allNativeEvents.add(dependencies[i]);\n }\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\n\nfunction checkAttributeStringCoercion(value, attributeName) {\n {\n if (willCoercionThrow(value)) {\n error('The provided `%s` attribute is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', attributeName, typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\nfunction checkPropStringCoercion(value, propName) {\n {\n if (willCoercionThrow(value)) {\n error('The provided `%s` prop is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', propName, typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\nfunction checkCSSPropertyStringCoercion(value, propName) {\n {\n if (willCoercionThrow(value)) {\n error('The provided `%s` CSS property is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', propName, typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\nfunction checkHtmlStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided HTML markup uses a value of unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\nfunction checkFormFieldValueStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('Form field values (value, checked, defaultValue, or defaultChecked props)' + ' must be strings, not %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the filter are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n\n illegalAttributeNameCache[attributeName] = true;\n\n {\n error('Invalid attribute name: `%s`', attributeName);\n }\n\n return false;\n}\nfunction shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null) {\n return propertyInfo.type === RESERVED;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n return true;\n }\n\n return false;\n}\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n return false;\n }\n\n switch (typeof value) {\n case 'function': // $FlowIssue symbol is perfectly valid here\n\n case 'symbol':\n // eslint-disable-line\n return true;\n\n case 'boolean':\n {\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n return !propertyInfo.acceptsBooleans;\n } else {\n var prefix = name.toLowerCase().slice(0, 5);\n return prefix !== 'data-' && prefix !== 'aria-';\n }\n }\n\n default:\n return false;\n }\n}\nfunction shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {\n if (value === null || typeof value === 'undefined') {\n return true;\n }\n\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {\n return true;\n }\n\n if (isCustomComponentTag) {\n\n return false;\n }\n\n if (propertyInfo !== null) {\n\n switch (propertyInfo.type) {\n case BOOLEAN:\n return !value;\n\n case OVERLOADED_BOOLEAN:\n return value === false;\n\n case NUMERIC:\n return isNaN(value);\n\n case POSITIVE_NUMERIC:\n return isNaN(value) || value < 1;\n }\n }\n\n return false;\n}\nfunction getPropertyInfo(name) {\n return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL, removeEmptyString) {\n this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n this.attributeName = attributeName;\n this.attributeNamespace = attributeNamespace;\n this.mustUseProperty = mustUseProperty;\n this.propertyName = name;\n this.type = type;\n this.sanitizeURL = sanitizeURL;\n this.removeEmptyString = removeEmptyString;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\nvar reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];\n\nreservedProps.forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false, // sanitizeURL\n false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n var name = _ref[0],\n attributeName = _ref[1];\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, // attributeName\n null, // attributeNamespace\n false, // sanitizeURL\n false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false, // sanitizeURL\n false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false, // sanitizeURL\n false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'disableRemotePlayback', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false, // sanitizeURL\n false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false, // sanitizeURL\n false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false, // sanitizeURL\n false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false, // sanitizeURL\n false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false, // sanitizeURL\n false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function (token) {\n return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML attribute filter.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n\n\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, null, // attributeNamespace\n false, // sanitizeURL\n false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/1999/xlink', false, // sanitizeURL\n false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/XML/1998/namespace', false, // sanitizeURL\n false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n false, // sanitizeURL\n false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true, // sanitizeURL\nfalse);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n true, // sanitizeURL\n true);\n});\n\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\nvar isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n {\n if (!didWarn && isJavaScriptProtocol.test(url)) {\n didWarn = true;\n\n error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));\n }\n }\n}\n\n/**\n * Get the value for a property on a node. Only used in DEV for SSR validation.\n * The \"expected\" argument is used as a hint of what the expected value is.\n * Some properties have multiple equivalent values.\n */\nfunction getValueForProperty(node, name, expected, propertyInfo) {\n {\n if (propertyInfo.mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n return node[propertyName];\n } else {\n // This check protects multiple uses of `expected`, which is why the\n // react-internal/safe-string-coercion rule is disabled in several spots\n // below.\n {\n checkAttributeStringCoercion(expected, name);\n }\n\n if ( propertyInfo.sanitizeURL) {\n // If we haven't fully disabled javascript: URLs, and if\n // the hydration is successful of a javascript: URL, we\n // still want to warn on the client.\n // eslint-disable-next-line react-internal/safe-string-coercion\n sanitizeURL('' + expected);\n }\n\n var attributeName = propertyInfo.attributeName;\n var stringValue = null;\n\n if (propertyInfo.type === OVERLOADED_BOOLEAN) {\n if (node.hasAttribute(attributeName)) {\n var value = node.getAttribute(attributeName);\n\n if (value === '') {\n return true;\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return value;\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n } else if (node.hasAttribute(attributeName)) {\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n // We had an attribute but shouldn't have had one, so read it\n // for the error message.\n return node.getAttribute(attributeName);\n }\n\n if (propertyInfo.type === BOOLEAN) {\n // If this was a boolean, it doesn't matter what the value is\n // the fact that we have it is the same as the expected.\n return expected;\n } // Even if this property uses a namespace we use getAttribute\n // because we assume its namespaced name is the same as our config.\n // To use getAttributeNS we need the local name which we don't have\n // in our config atm.\n\n\n stringValue = node.getAttribute(attributeName);\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return stringValue === null ? expected : stringValue; // eslint-disable-next-line react-internal/safe-string-coercion\n } else if (stringValue === '' + expected) {\n return expected;\n } else {\n return stringValue;\n }\n }\n }\n}\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\n\nfunction getValueForAttribute(node, name, expected, isCustomComponentTag) {\n {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n\n if (!node.hasAttribute(name)) {\n return expected === undefined ? undefined : null;\n }\n\n var value = node.getAttribute(name);\n\n {\n checkAttributeStringCoercion(expected, name);\n }\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n}\n/**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n\nfunction setValueForProperty(node, name, value, isCustomComponentTag) {\n var propertyInfo = getPropertyInfo(name);\n\n if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {\n return;\n }\n\n if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {\n value = null;\n }\n\n\n if (isCustomComponentTag || propertyInfo === null) {\n if (isAttributeNameSafe(name)) {\n var _attributeName = name;\n\n if (value === null) {\n node.removeAttribute(_attributeName);\n } else {\n {\n checkAttributeStringCoercion(value, name);\n }\n\n node.setAttribute(_attributeName, '' + value);\n }\n }\n\n return;\n }\n\n var mustUseProperty = propertyInfo.mustUseProperty;\n\n if (mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n\n if (value === null) {\n var type = propertyInfo.type;\n node[propertyName] = type === BOOLEAN ? false : '';\n } else {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propertyName] = value;\n }\n\n return;\n } // The rest are treated as attributes with special cases.\n\n\n var attributeName = propertyInfo.attributeName,\n attributeNamespace = propertyInfo.attributeNamespace;\n\n if (value === null) {\n node.removeAttribute(attributeName);\n } else {\n var _type = propertyInfo.type;\n var attributeValue;\n\n if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {\n // If attribute type is boolean, we know for sure it won't be an execution sink\n // and we won't require Trusted Type here.\n attributeValue = '';\n } else {\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n {\n {\n checkAttributeStringCoercion(value, attributeName);\n }\n\n attributeValue = '' + value;\n }\n\n if (propertyInfo.sanitizeURL) {\n sanitizeURL(attributeValue.toString());\n }\n }\n\n if (attributeNamespace) {\n node.setAttributeNS(attributeNamespace, attributeName, attributeValue);\n } else {\n node.setAttribute(attributeName, attributeValue);\n }\n }\n}\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_SCOPE_TYPE = Symbol.for('react.scope');\nvar REACT_DEBUG_TRACING_MODE_TYPE = Symbol.for('react.debug_trace_mode');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_LEGACY_HIDDEN_TYPE = Symbol.for('react.legacy_hidden');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar REACT_TRACING_MARKER_TYPE = Symbol.for('react.tracing_marker');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\n\nfunction describeClassComponentFrame(ctor, source, ownerFn) {\n {\n return describeNativeComponentFrame(ctor, true);\n }\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nfunction describeFiber(fiber) {\n var owner = fiber._debugOwner ? fiber._debugOwner.type : null ;\n var source = fiber._debugSource ;\n\n switch (fiber.tag) {\n case HostComponent:\n return describeBuiltInComponentFrame(fiber.type);\n\n case LazyComponent:\n return describeBuiltInComponentFrame('Lazy');\n\n case SuspenseComponent:\n return describeBuiltInComponentFrame('Suspense');\n\n case SuspenseListComponent:\n return describeBuiltInComponentFrame('SuspenseList');\n\n case FunctionComponent:\n case IndeterminateComponent:\n case SimpleMemoComponent:\n return describeFunctionComponentFrame(fiber.type);\n\n case ForwardRef:\n return describeFunctionComponentFrame(fiber.type.render);\n\n case ClassComponent:\n return describeClassComponentFrame(fiber.type);\n\n default:\n return '';\n }\n}\n\nfunction getStackByFiberInDevAndProd(workInProgress) {\n try {\n var info = '';\n var node = workInProgress;\n\n do {\n info += describeFiber(node);\n node = node.return;\n } while (node);\n\n return info;\n } catch (x) {\n return '\\nError generating stack: ' + x.message + '\\n' + x.stack;\n }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nfunction getWrappedName$1(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n} // Keep in sync with shared/getComponentNameFromType\n\n\nfunction getContextName$1(type) {\n return type.displayName || 'Context';\n}\n\nfunction getComponentNameFromFiber(fiber) {\n var tag = fiber.tag,\n type = fiber.type;\n\n switch (tag) {\n case CacheComponent:\n return 'Cache';\n\n case ContextConsumer:\n var context = type;\n return getContextName$1(context) + '.Consumer';\n\n case ContextProvider:\n var provider = type;\n return getContextName$1(provider._context) + '.Provider';\n\n case DehydratedFragment:\n return 'DehydratedFragment';\n\n case ForwardRef:\n return getWrappedName$1(type, type.render, 'ForwardRef');\n\n case Fragment:\n return 'Fragment';\n\n case HostComponent:\n // Host component type is the display name (e.g. \"div\", \"View\")\n return type;\n\n case HostPortal:\n return 'Portal';\n\n case HostRoot:\n return 'Root';\n\n case HostText:\n return 'Text';\n\n case LazyComponent:\n // Name comes from the type in this case; we don't have a tag.\n return getComponentNameFromType(type);\n\n case Mode:\n if (type === REACT_STRICT_MODE_TYPE) {\n // Don't be less specific than shared/getComponentNameFromType\n return 'StrictMode';\n }\n\n return 'Mode';\n\n case OffscreenComponent:\n return 'Offscreen';\n\n case Profiler:\n return 'Profiler';\n\n case ScopeComponent:\n return 'Scope';\n\n case SuspenseComponent:\n return 'Suspense';\n\n case SuspenseListComponent:\n return 'SuspenseList';\n\n case TracingMarkerComponent:\n return 'TracingMarker';\n // The display name for this tags come from the user-provided type:\n\n case ClassComponent:\n case FunctionComponent:\n case IncompleteClassComponent:\n case IndeterminateComponent:\n case MemoComponent:\n case SimpleMemoComponent:\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n break;\n\n }\n\n return null;\n}\n\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar current = null;\nvar isRendering = false;\nfunction getCurrentFiberOwnerNameInDevOrNull() {\n {\n if (current === null) {\n return null;\n }\n\n var owner = current._debugOwner;\n\n if (owner !== null && typeof owner !== 'undefined') {\n return getComponentNameFromFiber(owner);\n }\n }\n\n return null;\n}\n\nfunction getCurrentFiberStackInDev() {\n {\n if (current === null) {\n return '';\n } // Safe because if current fiber exists, we are reconciling,\n // and it is guaranteed to be the work-in-progress version.\n\n\n return getStackByFiberInDevAndProd(current);\n }\n}\n\nfunction resetCurrentFiber() {\n {\n ReactDebugCurrentFrame.getCurrentStack = null;\n current = null;\n isRendering = false;\n }\n}\nfunction setCurrentFiber(fiber) {\n {\n ReactDebugCurrentFrame.getCurrentStack = fiber === null ? null : getCurrentFiberStackInDev;\n current = fiber;\n isRendering = false;\n }\n}\nfunction getCurrentFiber() {\n {\n return current;\n }\n}\nfunction setIsRendering(rendering) {\n {\n isRendering = rendering;\n }\n}\n\n// Flow does not allow string concatenation of most non-string types. To work\n// around this limitation, we use an opaque type that can only be obtained by\n// passing the value through getToStringValue first.\nfunction toString(value) {\n // The coercion safety check is performed in getToStringValue().\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n case 'string':\n case 'undefined':\n return value;\n\n case 'object':\n {\n checkFormFieldValueStringCoercion(value);\n }\n\n return value;\n\n default:\n // function, symbol are assigned as empty strings\n return '';\n }\n}\n\nvar hasReadOnlyValue = {\n button: true,\n checkbox: true,\n image: true,\n hidden: true,\n radio: true,\n reset: true,\n submit: true\n};\nfunction checkControlledValueProps(tagName, props) {\n {\n if (!(hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null)) {\n error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n }\n\n if (!(props.onChange || props.readOnly || props.disabled || props.checked == null)) {\n error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n }\n }\n}\n\nfunction isCheckable(elem) {\n var type = elem.type;\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n var value = '';\n\n if (!node) {\n return value;\n }\n\n if (isCheckable(node)) {\n value = node.checked ? 'true' : 'false';\n } else {\n value = node.value;\n }\n\n return value;\n}\n\nfunction trackValueOnNode(node) {\n var valueField = isCheckable(node) ? 'checked' : 'value';\n var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n\n {\n checkFormFieldValueStringCoercion(node[valueField]);\n }\n\n var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail\n // and don't track value will cause over reporting of changes,\n // but it's better then a hard failure\n // (needed for certain tests that spyOn input values and Safari)\n\n if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n return;\n }\n\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: true,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n {\n checkFormFieldValueStringCoercion(value);\n }\n\n currentValue = '' + value;\n set.call(this, value);\n }\n }); // We could've passed this the first time\n // but it triggers a bug in IE11 and Edge 14/15.\n // Calling defineProperty() again should be equivalent.\n // https://github.com/facebook/react/issues/11768\n\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n var tracker = {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n {\n checkFormFieldValueStringCoercion(value);\n }\n\n currentValue = '' + value;\n },\n stopTracking: function () {\n detachTracker(node);\n delete node[valueField];\n }\n };\n return tracker;\n}\n\nfunction track(node) {\n if (getTracker(node)) {\n return;\n } // TODO: Once it's just Fiber we can move this to node._wrapperState\n\n\n node._valueTracker = trackValueOnNode(node);\n}\nfunction updateValueIfChanged(node) {\n if (!node) {\n return false;\n }\n\n var tracker = getTracker(node); // if there is no tracker at this point it's unlikely\n // that trying again will succeed\n\n if (!tracker) {\n return true;\n }\n\n var lastValue = tracker.getValue();\n var nextValue = getValueFromNode(node);\n\n if (nextValue !== lastValue) {\n tracker.setValue(nextValue);\n return true;\n }\n\n return false;\n}\n\nfunction getActiveElement(doc) {\n doc = doc || (typeof document !== 'undefined' ? document : undefined);\n\n if (typeof doc === 'undefined') {\n return null;\n }\n\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\n\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction isControlled(props) {\n var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n return usesChecked ? props.checked != null : props.value != null;\n}\n/**\n * Implements an <input> host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\n\nfunction getHostProps(element, props) {\n var node = element;\n var checked = props.checked;\n var hostProps = assign({}, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: undefined,\n checked: checked != null ? checked : node._wrapperState.initialChecked\n });\n return hostProps;\n}\nfunction initWrapperState(element, props) {\n {\n checkControlledValueProps('input', props);\n\n if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnCheckedDefaultChecked = true;\n }\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnValueDefaultValue = true;\n }\n }\n\n var node = element;\n var defaultValue = props.defaultValue == null ? '' : props.defaultValue;\n node._wrapperState = {\n initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n initialValue: getToStringValue(props.value != null ? props.value : defaultValue),\n controlled: isControlled(props)\n };\n}\nfunction updateChecked(element, props) {\n var node = element;\n var checked = props.checked;\n\n if (checked != null) {\n setValueForProperty(node, 'checked', checked, false);\n }\n}\nfunction updateWrapper(element, props) {\n var node = element;\n\n {\n var controlled = isControlled(props);\n\n if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n error('A component is changing an uncontrolled input to be controlled. ' + 'This is likely caused by the value changing from undefined to ' + 'a defined value, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');\n\n didWarnUncontrolledToControlled = true;\n }\n\n if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n error('A component is changing a controlled input to be uncontrolled. ' + 'This is likely caused by the value changing from a defined to ' + 'undefined, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');\n\n didWarnControlledToUncontrolled = true;\n }\n }\n\n updateChecked(element, props);\n var value = getToStringValue(props.value);\n var type = props.type;\n\n if (value != null) {\n if (type === 'number') {\n if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.\n // eslint-disable-next-line\n node.value != value) {\n node.value = toString(value);\n }\n } else if (node.value !== toString(value)) {\n node.value = toString(value);\n }\n } else if (type === 'submit' || type === 'reset') {\n // Submit/reset inputs need the attribute removed completely to avoid\n // blank-text buttons.\n node.removeAttribute('value');\n return;\n }\n\n {\n // When syncing the value attribute, the value comes from a cascade of\n // properties:\n // 1. The value React property\n // 2. The defaultValue React property\n // 3. Otherwise there should be no change\n if (props.hasOwnProperty('value')) {\n setDefaultValue(node, props.type, value);\n } else if (props.hasOwnProperty('defaultValue')) {\n setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n }\n }\n\n {\n // When syncing the checked attribute, it only changes when it needs\n // to be removed, such as transitioning from a checkbox into a text input\n if (props.checked == null && props.defaultChecked != null) {\n node.defaultChecked = !!props.defaultChecked;\n }\n }\n}\nfunction postMountWrapper(element, props, isHydrating) {\n var node = element; // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {\n var type = props.type;\n var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the\n // default value provided by the browser. See: #12872\n\n if (isButton && (props.value === undefined || props.value === null)) {\n return;\n }\n\n var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (!isHydrating) {\n {\n // When syncing the value attribute, the value property should use\n // the wrapperState._initialValue property. This uses:\n //\n // 1. The value React property when present\n // 2. The defaultValue React property when present\n // 3. An empty string\n if (initialValue !== node.value) {\n node.value = initialValue;\n }\n }\n }\n\n {\n // Otherwise, the value attribute is synchronized to the property,\n // so we assign defaultValue to the same thing as the value property\n // assignment step above.\n node.defaultValue = initialValue;\n }\n } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n // this is needed to work around a chrome bug where setting defaultChecked\n // will sometimes influence the value of checked (even after detachment).\n // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n // We need to temporarily unset name to avoid disrupting radio button groups.\n\n\n var name = node.name;\n\n if (name !== '') {\n node.name = '';\n }\n\n {\n // When syncing the checked attribute, both the checked property and\n // attribute are assigned at the same time using defaultChecked. This uses:\n //\n // 1. The checked React property when present\n // 2. The defaultChecked React property when present\n // 3. Otherwise, false\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !!node._wrapperState.initialChecked;\n }\n\n if (name !== '') {\n node.name = name;\n }\n}\nfunction restoreControlledState(element, props) {\n var node = element;\n updateWrapper(node, props);\n updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n var name = props.name;\n\n if (props.type === 'radio' && name != null) {\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n } // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form. It might not even be in the\n // document. Let's just use the local `querySelectorAll` to ensure we don't\n // miss anything.\n\n\n {\n checkAttributeStringCoercion(name, 'name');\n }\n\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n } // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React radio buttons with non-React ones.\n\n\n var otherProps = getFiberCurrentPropsFromNode(otherNode);\n\n if (!otherProps) {\n throw new Error('ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.');\n } // We need update the tracked value on the named cousin since the value\n // was changed but the input saw no event or value set\n\n\n updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n\n updateWrapper(otherNode, otherProps);\n }\n }\n} // In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value <x> is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\n\n\nfunction setDefaultValue(node, type, value) {\n if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n type !== 'number' || getActiveElement(node.ownerDocument) !== node) {\n if (value == null) {\n node.defaultValue = toString(node._wrapperState.initialValue);\n } else if (node.defaultValue !== toString(value)) {\n node.defaultValue = toString(value);\n }\n }\n}\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\nvar didWarnInvalidInnerHTML = false;\n/**\n * Implements an <option> host component that warns when `selected` is set.\n */\n\nfunction validateProps(element, props) {\n {\n // If a value is not provided, then the children must be simple.\n if (props.value == null) {\n if (typeof props.children === 'object' && props.children !== null) {\n React.Children.forEach(props.children, function (child) {\n if (child == null) {\n return;\n }\n\n if (typeof child === 'string' || typeof child === 'number') {\n return;\n }\n\n if (!didWarnInvalidChild) {\n didWarnInvalidChild = true;\n\n error('Cannot infer the option value of complex children. ' + 'Pass a `value` prop or use a plain string as children to <option>.');\n }\n });\n } else if (props.dangerouslySetInnerHTML != null) {\n if (!didWarnInvalidInnerHTML) {\n didWarnInvalidInnerHTML = true;\n\n error('Pass a `value` prop if you set dangerouslyInnerHTML so React knows ' + 'which value should be selected.');\n }\n }\n } // TODO: Remove support for `selected` in <option>.\n\n\n if (props.selected != null && !didWarnSelectedSetOnOption) {\n error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');\n\n didWarnSelectedSetOnOption = true;\n }\n }\n}\nfunction postMountWrapper$1(element, props) {\n // value=\"\" should make a value attribute (#6219)\n if (props.value != null) {\n element.setAttribute('value', toString(getToStringValue(props.value)));\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\nvar didWarnValueDefaultValue$1;\n\n{\n didWarnValueDefaultValue$1 = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n if (ownerName) {\n return '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n\n return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n/**\n * Validation function for `value` and `defaultValue`.\n */\n\nfunction checkSelectPropTypes(props) {\n {\n checkControlledValueProps('select', props);\n\n for (var i = 0; i < valuePropNames.length; i++) {\n var propName = valuePropNames[i];\n\n if (props[propName] == null) {\n continue;\n }\n\n var propNameIsArray = isArray(props[propName]);\n\n if (props.multiple && !propNameIsArray) {\n error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());\n } else if (!props.multiple && propNameIsArray) {\n error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());\n }\n }\n }\n}\n\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n var options = node.options;\n\n if (multiple) {\n var selectedValues = propValue;\n var selectedValue = {};\n\n for (var i = 0; i < selectedValues.length; i++) {\n // Prefix to avoid chaos with special keys.\n selectedValue['$' + selectedValues[i]] = true;\n }\n\n for (var _i = 0; _i < options.length; _i++) {\n var selected = selectedValue.hasOwnProperty('$' + options[_i].value);\n\n if (options[_i].selected !== selected) {\n options[_i].selected = selected;\n }\n\n if (selected && setDefaultSelected) {\n options[_i].defaultSelected = true;\n }\n }\n } else {\n // Do not set `select.value` as exact behavior isn't consistent across all\n // browsers for all cases.\n var _selectedValue = toString(getToStringValue(propValue));\n\n var defaultSelected = null;\n\n for (var _i2 = 0; _i2 < options.length; _i2++) {\n if (options[_i2].value === _selectedValue) {\n options[_i2].selected = true;\n\n if (setDefaultSelected) {\n options[_i2].defaultSelected = true;\n }\n\n return;\n }\n\n if (defaultSelected === null && !options[_i2].disabled) {\n defaultSelected = options[_i2];\n }\n }\n\n if (defaultSelected !== null) {\n defaultSelected.selected = true;\n }\n }\n}\n/**\n * Implements a <select> host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\n\n\nfunction getHostProps$1(element, props) {\n return assign({}, props, {\n value: undefined\n });\n}\nfunction initWrapperState$1(element, props) {\n var node = element;\n\n {\n checkSelectPropTypes(props);\n }\n\n node._wrapperState = {\n wasMultiple: !!props.multiple\n };\n\n {\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {\n error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components');\n\n didWarnValueDefaultValue$1 = true;\n }\n }\n}\nfunction postMountWrapper$2(element, props) {\n var node = element;\n node.multiple = !!props.multiple;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n } else if (props.defaultValue != null) {\n updateOptions(node, !!props.multiple, props.defaultValue, true);\n }\n}\nfunction postUpdateWrapper(element, props) {\n var node = element;\n var wasMultiple = node._wrapperState.wasMultiple;\n node._wrapperState.wasMultiple = !!props.multiple;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n } else if (wasMultiple !== !!props.multiple) {\n // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n if (props.defaultValue != null) {\n updateOptions(node, !!props.multiple, props.defaultValue, true);\n } else {\n // Revert the select back to its default unselected state.\n updateOptions(node, !!props.multiple, props.multiple ? [] : '', false);\n }\n }\n}\nfunction restoreControlledState$1(element, props) {\n var node = element;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n }\n}\n\nvar didWarnValDefaultVal = false;\n\n/**\n * Implements a <textarea> host component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nfunction getHostProps$2(element, props) {\n var node = element;\n\n if (props.dangerouslySetInnerHTML != null) {\n throw new Error('`dangerouslySetInnerHTML` does not make sense on <textarea>.');\n } // Always set children to the same thing. In IE9, the selection range will\n // get reset if `textContent` is mutated. We could add a check in setTextContent\n // to only set the value if/when the value differs from the node value (which would\n // completely solve this IE9 bug), but Sebastian+Sophie seemed to like this\n // solution. The value can be a boolean or object so that's why it's forced\n // to be a string.\n\n\n var hostProps = assign({}, props, {\n value: undefined,\n defaultValue: undefined,\n children: toString(node._wrapperState.initialValue)\n });\n\n return hostProps;\n}\nfunction initWrapperState$2(element, props) {\n var node = element;\n\n {\n checkControlledValueProps('textarea', props);\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\n error('%s contains a textarea with both value and defaultValue props. ' + 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component');\n\n didWarnValDefaultVal = true;\n }\n }\n\n var initialValue = props.value; // Only bother fetching default value if we're going to use it\n\n if (initialValue == null) {\n var children = props.children,\n defaultValue = props.defaultValue;\n\n if (children != null) {\n {\n error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');\n }\n\n {\n if (defaultValue != null) {\n throw new Error('If you supply `defaultValue` on a <textarea>, do not pass children.');\n }\n\n if (isArray(children)) {\n if (children.length > 1) {\n throw new Error('<textarea> can only have at most one child.');\n }\n\n children = children[0];\n }\n\n defaultValue = children;\n }\n }\n\n if (defaultValue == null) {\n defaultValue = '';\n }\n\n initialValue = defaultValue;\n }\n\n node._wrapperState = {\n initialValue: getToStringValue(initialValue)\n };\n}\nfunction updateWrapper$1(element, props) {\n var node = element;\n var value = getToStringValue(props.value);\n var defaultValue = getToStringValue(props.defaultValue);\n\n if (value != null) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n var newValue = toString(value); // To avoid side effects (such as losing text selection), only set value if changed\n\n if (newValue !== node.value) {\n node.value = newValue;\n }\n\n if (props.defaultValue == null && node.defaultValue !== newValue) {\n node.defaultValue = newValue;\n }\n }\n\n if (defaultValue != null) {\n node.defaultValue = toString(defaultValue);\n }\n}\nfunction postMountWrapper$3(element, props) {\n var node = element; // This is in postMount because we need access to the DOM node, which is not\n // available until after the component has mounted.\n\n var textContent = node.textContent; // Only set node.value if textContent is equal to the expected\n // initial value. In IE10/IE11 there is a bug where the placeholder attribute\n // will populate textContent as well.\n // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/\n\n if (textContent === node._wrapperState.initialValue) {\n if (textContent !== '' && textContent !== null) {\n node.value = textContent;\n }\n }\n}\nfunction restoreControlledState$2(element, props) {\n // DOM component is still mounted; update\n updateWrapper$1(element, props);\n}\n\nvar HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nvar MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; // Assumes there is no parent namespace.\n\nfunction getIntrinsicNamespace(type) {\n switch (type) {\n case 'svg':\n return SVG_NAMESPACE;\n\n case 'math':\n return MATH_NAMESPACE;\n\n default:\n return HTML_NAMESPACE;\n }\n}\nfunction getChildNamespace(parentNamespace, type) {\n if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {\n // No (or default) parent namespace: potential entry point.\n return getIntrinsicNamespace(type);\n }\n\n if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {\n // We're leaving SVG.\n return HTML_NAMESPACE;\n } // By default, pass namespace below.\n\n\n return parentNamespace;\n}\n\n/* globals MSApp */\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n return function (arg0, arg1, arg2, arg3) {\n MSApp.execUnsafeLocalFunction(function () {\n return func(arg0, arg1, arg2, arg3);\n });\n };\n } else {\n return func;\n }\n};\n\nvar reusableSVGContainer;\n/**\n * Set the innerHTML property of a node\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\n\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n if (node.namespaceURI === SVG_NAMESPACE) {\n\n if (!('innerHTML' in node)) {\n // IE does not have innerHTML for SVG nodes, so instead we inject the\n // new markup in a temp node and then move the child nodes across into\n // the target node\n reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n reusableSVGContainer.innerHTML = '<svg>' + html.valueOf().toString() + '</svg>';\n var svgNode = reusableSVGContainer.firstChild;\n\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n\n while (svgNode.firstChild) {\n node.appendChild(svgNode.firstChild);\n }\n\n return;\n }\n }\n\n node.innerHTML = html;\n});\n\n/**\n * HTML nodeType values that represent the type of the node\n */\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\nvar DOCUMENT_NODE = 9;\nvar DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Set the textContent property of a node. For text updates, it's faster\n * to set the `nodeValue` of the Text node directly instead of using\n * `.textContent` which will remove the existing node and create a new one.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\n\nvar setTextContent = function (node, text) {\n if (text) {\n var firstChild = node.firstChild;\n\n if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) {\n firstChild.nodeValue = text;\n return;\n }\n }\n\n node.textContent = text;\n};\n\n// List derived from Gecko source code:\n// https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js\nvar shorthandToLonghand = {\n animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'],\n background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'],\n backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],\n border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'],\n borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'],\n borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'],\n borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'],\n borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'],\n borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'],\n borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'],\n borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'],\n borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'],\n borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'],\n borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'],\n borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'],\n columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'],\n columns: ['columnCount', 'columnWidth'],\n flex: ['flexBasis', 'flexGrow', 'flexShrink'],\n flexFlow: ['flexDirection', 'flexWrap'],\n font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'],\n fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'],\n gap: ['columnGap', 'rowGap'],\n grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'],\n gridColumn: ['gridColumnEnd', 'gridColumnStart'],\n gridColumnGap: ['columnGap'],\n gridGap: ['columnGap', 'rowGap'],\n gridRow: ['gridRowEnd', 'gridRowStart'],\n gridRowGap: ['rowGap'],\n gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'],\n margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'],\n marker: ['markerEnd', 'markerMid', 'markerStart'],\n mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'],\n maskPosition: ['maskPositionX', 'maskPositionY'],\n outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],\n overflow: ['overflowX', 'overflowY'],\n padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'],\n placeContent: ['alignContent', 'justifyContent'],\n placeItems: ['alignItems', 'justifyItems'],\n placeSelf: ['alignSelf', 'justifySelf'],\n textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'],\n textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'],\n transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'],\n wordWrap: ['overflowWrap']\n};\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n animationIterationCount: true,\n aspectRatio: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n columns: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridArea: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowSpan: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnSpan: true,\n gridColumnStart: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n // SVG-related properties\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\n\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\n\n\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\n\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n prefixes.forEach(function (prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\n\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n\n if (isEmpty) {\n return '';\n }\n\n if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n }\n\n {\n checkCSSPropertyStringCoercion(value, name);\n }\n\n return ('' + value).trim();\n}\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern = /^ms-/;\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\n\nfunction hyphenateStyleName(name) {\n return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');\n}\n\nvar warnValidStyle = function () {};\n\n{\n // 'msTransform' is correct, but the other prefixes should be capitalized\n var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n var msPattern$1 = /^-ms-/;\n var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon\n\n var badStyleValueWithSemicolonPattern = /;\\s*$/;\n var warnedStyleNames = {};\n var warnedStyleValues = {};\n var warnedForNaNValue = false;\n var warnedForInfinityValue = false;\n\n var camelize = function (string) {\n return string.replace(hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n };\n\n var warnHyphenatedStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n\n error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests\n // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n // is converted to lowercase `ms`.\n camelize(name.replace(msPattern$1, 'ms-')));\n };\n\n var warnBadVendoredStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n\n error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));\n };\n\n var warnStyleValueWithSemicolon = function (name, value) {\n if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n return;\n }\n\n warnedStyleValues[value] = true;\n\n error(\"Style property values shouldn't contain a semicolon. \" + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));\n };\n\n var warnStyleValueIsNaN = function (name, value) {\n if (warnedForNaNValue) {\n return;\n }\n\n warnedForNaNValue = true;\n\n error('`NaN` is an invalid value for the `%s` css style property.', name);\n };\n\n var warnStyleValueIsInfinity = function (name, value) {\n if (warnedForInfinityValue) {\n return;\n }\n\n warnedForInfinityValue = true;\n\n error('`Infinity` is an invalid value for the `%s` css style property.', name);\n };\n\n warnValidStyle = function (name, value) {\n if (name.indexOf('-') > -1) {\n warnHyphenatedStyleName(name);\n } else if (badVendoredStyleNamePattern.test(name)) {\n warnBadVendoredStyleName(name);\n } else if (badStyleValueWithSemicolonPattern.test(value)) {\n warnStyleValueWithSemicolon(name, value);\n }\n\n if (typeof value === 'number') {\n if (isNaN(value)) {\n warnStyleValueIsNaN(name, value);\n } else if (!isFinite(value)) {\n warnStyleValueIsInfinity(name, value);\n }\n }\n };\n}\n\nvar warnValidStyle$1 = warnValidStyle;\n\n/**\n * Operations for dealing with CSS properties.\n */\n\n/**\n * This creates a string that is expected to be equivalent to the style\n * attribute generated by server-side rendering. It by-passes warnings and\n * security checks so it's not safe to use this value for anything other than\n * comparison. It is only used in DEV for SSR validation.\n */\n\nfunction createDangerousStringForStyles(styles) {\n {\n var serialized = '';\n var delimiter = '';\n\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n\n var styleValue = styles[styleName];\n\n if (styleValue != null) {\n var isCustomProperty = styleName.indexOf('--') === 0;\n serialized += delimiter + (isCustomProperty ? styleName : hyphenateStyleName(styleName)) + ':';\n serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);\n delimiter = ';';\n }\n }\n\n return serialized || null;\n }\n}\n/**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\n\nfunction setValueForStyles(node, styles) {\n var style = node.style;\n\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n\n var isCustomProperty = styleName.indexOf('--') === 0;\n\n {\n if (!isCustomProperty) {\n warnValidStyle$1(styleName, styles[styleName]);\n }\n }\n\n var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);\n\n if (styleName === 'float') {\n styleName = 'cssFloat';\n }\n\n if (isCustomProperty) {\n style.setProperty(styleName, styleValue);\n } else {\n style[styleName] = styleValue;\n }\n }\n}\n\nfunction isValueEmpty(value) {\n return value == null || typeof value === 'boolean' || value === '';\n}\n/**\n * Given {color: 'red', overflow: 'hidden'} returns {\n * color: 'color',\n * overflowX: 'overflow',\n * overflowY: 'overflow',\n * }. This can be read as \"the overflowY property was set by the overflow\n * shorthand\". That is, the values are the property that each was derived from.\n */\n\n\nfunction expandShorthandMap(styles) {\n var expanded = {};\n\n for (var key in styles) {\n var longhands = shorthandToLonghand[key] || [key];\n\n for (var i = 0; i < longhands.length; i++) {\n expanded[longhands[i]] = key;\n }\n }\n\n return expanded;\n}\n/**\n * When mixing shorthand and longhand property names, we warn during updates if\n * we expect an incorrect result to occur. In particular, we warn for:\n *\n * Updating a shorthand property (longhand gets overwritten):\n * {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'}\n * becomes .style.font = 'baz'\n * Removing a shorthand property (longhand gets lost too):\n * {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'}\n * becomes .style.font = ''\n * Removing a longhand property (should revert to shorthand; doesn't):\n * {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'}\n * becomes .style.fontVariant = ''\n */\n\n\nfunction validateShorthandPropertyCollisionInDev(styleUpdates, nextStyles) {\n {\n if (!nextStyles) {\n return;\n }\n\n var expandedUpdates = expandShorthandMap(styleUpdates);\n var expandedStyles = expandShorthandMap(nextStyles);\n var warnedAbout = {};\n\n for (var key in expandedUpdates) {\n var originalKey = expandedUpdates[key];\n var correctOriginalKey = expandedStyles[key];\n\n if (correctOriginalKey && originalKey !== correctOriginalKey) {\n var warningKey = originalKey + ',' + correctOriginalKey;\n\n if (warnedAbout[warningKey]) {\n continue;\n }\n\n warnedAbout[warningKey] = true;\n\n error('%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + \"avoid this, don't mix shorthand and non-shorthand properties \" + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(styleUpdates[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey);\n }\n }\n }\n}\n\n// For HTML, certain tags should omit their close tag. We keep a list for\n// those special-case tags.\nvar omittedCloseTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.\n\n};\n\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = assign({\n menuitem: true\n}, omittedCloseTags);\n\nvar HTML = '__html';\n\nfunction assertValidProps(tag, props) {\n if (!props) {\n return;\n } // Note the use of `==` which checks for null or undefined.\n\n\n if (voidElementTags[tag]) {\n if (props.children != null || props.dangerouslySetInnerHTML != null) {\n throw new Error(tag + \" is a void element tag and must neither have `children` nor \" + 'use `dangerouslySetInnerHTML`.');\n }\n }\n\n if (props.dangerouslySetInnerHTML != null) {\n if (props.children != null) {\n throw new Error('Can only set one of `children` or `props.dangerouslySetInnerHTML`.');\n }\n\n if (typeof props.dangerouslySetInnerHTML !== 'object' || !(HTML in props.dangerouslySetInnerHTML)) {\n throw new Error('`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://reactjs.org/link/dangerously-set-inner-html ' + 'for more information.');\n }\n }\n\n {\n if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {\n error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');\n }\n }\n\n if (props.style != null && typeof props.style !== 'object') {\n throw new Error('The `style` prop expects a mapping from style properties to values, ' + \"not a string. For example, style={{marginRight: spacing + 'em'}} when \" + 'using JSX.');\n }\n}\n\nfunction isCustomComponent(tagName, props) {\n if (tagName.indexOf('-') === -1) {\n return typeof props.is === 'string';\n }\n\n switch (tagName) {\n // These are reserved SVG and MathML elements.\n // We don't mind this list too much because we expect it to never grow.\n // The alternative is to track the namespace in a few places which is convoluted.\n // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n case 'annotation-xml':\n case 'color-profile':\n case 'font-face':\n case 'font-face-src':\n case 'font-face-uri':\n case 'font-face-format':\n case 'font-face-name':\n case 'missing-glyph':\n return false;\n\n default:\n return true;\n }\n}\n\n// When adding attributes to the HTML or SVG allowed attribute list, be sure to\n// also add them to this module to ensure casing and incorrect name\n// warnings.\nvar possibleStandardNames = {\n // HTML\n accept: 'accept',\n acceptcharset: 'acceptCharset',\n 'accept-charset': 'acceptCharset',\n accesskey: 'accessKey',\n action: 'action',\n allowfullscreen: 'allowFullScreen',\n alt: 'alt',\n as: 'as',\n async: 'async',\n autocapitalize: 'autoCapitalize',\n autocomplete: 'autoComplete',\n autocorrect: 'autoCorrect',\n autofocus: 'autoFocus',\n autoplay: 'autoPlay',\n autosave: 'autoSave',\n capture: 'capture',\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing',\n challenge: 'challenge',\n charset: 'charSet',\n checked: 'checked',\n children: 'children',\n cite: 'cite',\n class: 'className',\n classid: 'classID',\n classname: 'className',\n cols: 'cols',\n colspan: 'colSpan',\n content: 'content',\n contenteditable: 'contentEditable',\n contextmenu: 'contextMenu',\n controls: 'controls',\n controlslist: 'controlsList',\n coords: 'coords',\n crossorigin: 'crossOrigin',\n dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n data: 'data',\n datetime: 'dateTime',\n default: 'default',\n defaultchecked: 'defaultChecked',\n defaultvalue: 'defaultValue',\n defer: 'defer',\n dir: 'dir',\n disabled: 'disabled',\n disablepictureinpicture: 'disablePictureInPicture',\n disableremoteplayback: 'disableRemotePlayback',\n download: 'download',\n draggable: 'draggable',\n enctype: 'encType',\n enterkeyhint: 'enterKeyHint',\n for: 'htmlFor',\n form: 'form',\n formmethod: 'formMethod',\n formaction: 'formAction',\n formenctype: 'formEncType',\n formnovalidate: 'formNoValidate',\n formtarget: 'formTarget',\n frameborder: 'frameBorder',\n headers: 'headers',\n height: 'height',\n hidden: 'hidden',\n high: 'high',\n href: 'href',\n hreflang: 'hrefLang',\n htmlfor: 'htmlFor',\n httpequiv: 'httpEquiv',\n 'http-equiv': 'httpEquiv',\n icon: 'icon',\n id: 'id',\n imagesizes: 'imageSizes',\n imagesrcset: 'imageSrcSet',\n innerhtml: 'innerHTML',\n inputmode: 'inputMode',\n integrity: 'integrity',\n is: 'is',\n itemid: 'itemID',\n itemprop: 'itemProp',\n itemref: 'itemRef',\n itemscope: 'itemScope',\n itemtype: 'itemType',\n keyparams: 'keyParams',\n keytype: 'keyType',\n kind: 'kind',\n label: 'label',\n lang: 'lang',\n list: 'list',\n loop: 'loop',\n low: 'low',\n manifest: 'manifest',\n marginwidth: 'marginWidth',\n marginheight: 'marginHeight',\n max: 'max',\n maxlength: 'maxLength',\n media: 'media',\n mediagroup: 'mediaGroup',\n method: 'method',\n min: 'min',\n minlength: 'minLength',\n multiple: 'multiple',\n muted: 'muted',\n name: 'name',\n nomodule: 'noModule',\n nonce: 'nonce',\n novalidate: 'noValidate',\n open: 'open',\n optimum: 'optimum',\n pattern: 'pattern',\n placeholder: 'placeholder',\n playsinline: 'playsInline',\n poster: 'poster',\n preload: 'preload',\n profile: 'profile',\n radiogroup: 'radioGroup',\n readonly: 'readOnly',\n referrerpolicy: 'referrerPolicy',\n rel: 'rel',\n required: 'required',\n reversed: 'reversed',\n role: 'role',\n rows: 'rows',\n rowspan: 'rowSpan',\n sandbox: 'sandbox',\n scope: 'scope',\n scoped: 'scoped',\n scrolling: 'scrolling',\n seamless: 'seamless',\n selected: 'selected',\n shape: 'shape',\n size: 'size',\n sizes: 'sizes',\n span: 'span',\n spellcheck: 'spellCheck',\n src: 'src',\n srcdoc: 'srcDoc',\n srclang: 'srcLang',\n srcset: 'srcSet',\n start: 'start',\n step: 'step',\n style: 'style',\n summary: 'summary',\n tabindex: 'tabIndex',\n target: 'target',\n title: 'title',\n type: 'type',\n usemap: 'useMap',\n value: 'value',\n width: 'width',\n wmode: 'wmode',\n wrap: 'wrap',\n // SVG\n about: 'about',\n accentheight: 'accentHeight',\n 'accent-height': 'accentHeight',\n accumulate: 'accumulate',\n additive: 'additive',\n alignmentbaseline: 'alignmentBaseline',\n 'alignment-baseline': 'alignmentBaseline',\n allowreorder: 'allowReorder',\n alphabetic: 'alphabetic',\n amplitude: 'amplitude',\n arabicform: 'arabicForm',\n 'arabic-form': 'arabicForm',\n ascent: 'ascent',\n attributename: 'attributeName',\n attributetype: 'attributeType',\n autoreverse: 'autoReverse',\n azimuth: 'azimuth',\n basefrequency: 'baseFrequency',\n baselineshift: 'baselineShift',\n 'baseline-shift': 'baselineShift',\n baseprofile: 'baseProfile',\n bbox: 'bbox',\n begin: 'begin',\n bias: 'bias',\n by: 'by',\n calcmode: 'calcMode',\n capheight: 'capHeight',\n 'cap-height': 'capHeight',\n clip: 'clip',\n clippath: 'clipPath',\n 'clip-path': 'clipPath',\n clippathunits: 'clipPathUnits',\n cliprule: 'clipRule',\n 'clip-rule': 'clipRule',\n color: 'color',\n colorinterpolation: 'colorInterpolation',\n 'color-interpolation': 'colorInterpolation',\n colorinterpolationfilters: 'colorInterpolationFilters',\n 'color-interpolation-filters': 'colorInterpolationFilters',\n colorprofile: 'colorProfile',\n 'color-profile': 'colorProfile',\n colorrendering: 'colorRendering',\n 'color-rendering': 'colorRendering',\n contentscripttype: 'contentScriptType',\n contentstyletype: 'contentStyleType',\n cursor: 'cursor',\n cx: 'cx',\n cy: 'cy',\n d: 'd',\n datatype: 'datatype',\n decelerate: 'decelerate',\n descent: 'descent',\n diffuseconstant: 'diffuseConstant',\n direction: 'direction',\n display: 'display',\n divisor: 'divisor',\n dominantbaseline: 'dominantBaseline',\n 'dominant-baseline': 'dominantBaseline',\n dur: 'dur',\n dx: 'dx',\n dy: 'dy',\n edgemode: 'edgeMode',\n elevation: 'elevation',\n enablebackground: 'enableBackground',\n 'enable-background': 'enableBackground',\n end: 'end',\n exponent: 'exponent',\n externalresourcesrequired: 'externalResourcesRequired',\n fill: 'fill',\n fillopacity: 'fillOpacity',\n 'fill-opacity': 'fillOpacity',\n fillrule: 'fillRule',\n 'fill-rule': 'fillRule',\n filter: 'filter',\n filterres: 'filterRes',\n filterunits: 'filterUnits',\n floodopacity: 'floodOpacity',\n 'flood-opacity': 'floodOpacity',\n floodcolor: 'floodColor',\n 'flood-color': 'floodColor',\n focusable: 'focusable',\n fontfamily: 'fontFamily',\n 'font-family': 'fontFamily',\n fontsize: 'fontSize',\n 'font-size': 'fontSize',\n fontsizeadjust: 'fontSizeAdjust',\n 'font-size-adjust': 'fontSizeAdjust',\n fontstretch: 'fontStretch',\n 'font-stretch': 'fontStretch',\n fontstyle: 'fontStyle',\n 'font-style': 'fontStyle',\n fontvariant: 'fontVariant',\n 'font-variant': 'fontVariant',\n fontweight: 'fontWeight',\n 'font-weight': 'fontWeight',\n format: 'format',\n from: 'from',\n fx: 'fx',\n fy: 'fy',\n g1: 'g1',\n g2: 'g2',\n glyphname: 'glyphName',\n 'glyph-name': 'glyphName',\n glyphorientationhorizontal: 'glyphOrientationHorizontal',\n 'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n glyphorientationvertical: 'glyphOrientationVertical',\n 'glyph-orientation-vertical': 'glyphOrientationVertical',\n glyphref: 'glyphRef',\n gradienttransform: 'gradientTransform',\n gradientunits: 'gradientUnits',\n hanging: 'hanging',\n horizadvx: 'horizAdvX',\n 'horiz-adv-x': 'horizAdvX',\n horizoriginx: 'horizOriginX',\n 'horiz-origin-x': 'horizOriginX',\n ideographic: 'ideographic',\n imagerendering: 'imageRendering',\n 'image-rendering': 'imageRendering',\n in2: 'in2',\n in: 'in',\n inlist: 'inlist',\n intercept: 'intercept',\n k1: 'k1',\n k2: 'k2',\n k3: 'k3',\n k4: 'k4',\n k: 'k',\n kernelmatrix: 'kernelMatrix',\n kernelunitlength: 'kernelUnitLength',\n kerning: 'kerning',\n keypoints: 'keyPoints',\n keysplines: 'keySplines',\n keytimes: 'keyTimes',\n lengthadjust: 'lengthAdjust',\n letterspacing: 'letterSpacing',\n 'letter-spacing': 'letterSpacing',\n lightingcolor: 'lightingColor',\n 'lighting-color': 'lightingColor',\n limitingconeangle: 'limitingConeAngle',\n local: 'local',\n markerend: 'markerEnd',\n 'marker-end': 'markerEnd',\n markerheight: 'markerHeight',\n markermid: 'markerMid',\n 'marker-mid': 'markerMid',\n markerstart: 'markerStart',\n 'marker-start': 'markerStart',\n markerunits: 'markerUnits',\n markerwidth: 'markerWidth',\n mask: 'mask',\n maskcontentunits: 'maskContentUnits',\n maskunits: 'maskUnits',\n mathematical: 'mathematical',\n mode: 'mode',\n numoctaves: 'numOctaves',\n offset: 'offset',\n opacity: 'opacity',\n operator: 'operator',\n order: 'order',\n orient: 'orient',\n orientation: 'orientation',\n origin: 'origin',\n overflow: 'overflow',\n overlineposition: 'overlinePosition',\n 'overline-position': 'overlinePosition',\n overlinethickness: 'overlineThickness',\n 'overline-thickness': 'overlineThickness',\n paintorder: 'paintOrder',\n 'paint-order': 'paintOrder',\n panose1: 'panose1',\n 'panose-1': 'panose1',\n pathlength: 'pathLength',\n patterncontentunits: 'patternContentUnits',\n patterntransform: 'patternTransform',\n patternunits: 'patternUnits',\n pointerevents: 'pointerEvents',\n 'pointer-events': 'pointerEvents',\n points: 'points',\n pointsatx: 'pointsAtX',\n pointsaty: 'pointsAtY',\n pointsatz: 'pointsAtZ',\n prefix: 'prefix',\n preservealpha: 'preserveAlpha',\n preserveaspectratio: 'preserveAspectRatio',\n primitiveunits: 'primitiveUnits',\n property: 'property',\n r: 'r',\n radius: 'radius',\n refx: 'refX',\n refy: 'refY',\n renderingintent: 'renderingIntent',\n 'rendering-intent': 'renderingIntent',\n repeatcount: 'repeatCount',\n repeatdur: 'repeatDur',\n requiredextensions: 'requiredExtensions',\n requiredfeatures: 'requiredFeatures',\n resource: 'resource',\n restart: 'restart',\n result: 'result',\n results: 'results',\n rotate: 'rotate',\n rx: 'rx',\n ry: 'ry',\n scale: 'scale',\n security: 'security',\n seed: 'seed',\n shaperendering: 'shapeRendering',\n 'shape-rendering': 'shapeRendering',\n slope: 'slope',\n spacing: 'spacing',\n specularconstant: 'specularConstant',\n specularexponent: 'specularExponent',\n speed: 'speed',\n spreadmethod: 'spreadMethod',\n startoffset: 'startOffset',\n stddeviation: 'stdDeviation',\n stemh: 'stemh',\n stemv: 'stemv',\n stitchtiles: 'stitchTiles',\n stopcolor: 'stopColor',\n 'stop-color': 'stopColor',\n stopopacity: 'stopOpacity',\n 'stop-opacity': 'stopOpacity',\n strikethroughposition: 'strikethroughPosition',\n 'strikethrough-position': 'strikethroughPosition',\n strikethroughthickness: 'strikethroughThickness',\n 'strikethrough-thickness': 'strikethroughThickness',\n string: 'string',\n stroke: 'stroke',\n strokedasharray: 'strokeDasharray',\n 'stroke-dasharray': 'strokeDasharray',\n strokedashoffset: 'strokeDashoffset',\n 'stroke-dashoffset': 'strokeDashoffset',\n strokelinecap: 'strokeLinecap',\n 'stroke-linecap': 'strokeLinecap',\n strokelinejoin: 'strokeLinejoin',\n 'stroke-linejoin': 'strokeLinejoin',\n strokemiterlimit: 'strokeMiterlimit',\n 'stroke-miterlimit': 'strokeMiterlimit',\n strokewidth: 'strokeWidth',\n 'stroke-width': 'strokeWidth',\n strokeopacity: 'strokeOpacity',\n 'stroke-opacity': 'strokeOpacity',\n suppresscontenteditablewarning: 'suppressContentEditableWarning',\n suppresshydrationwarning: 'suppressHydrationWarning',\n surfacescale: 'surfaceScale',\n systemlanguage: 'systemLanguage',\n tablevalues: 'tableValues',\n targetx: 'targetX',\n targety: 'targetY',\n textanchor: 'textAnchor',\n 'text-anchor': 'textAnchor',\n textdecoration: 'textDecoration',\n 'text-decoration': 'textDecoration',\n textlength: 'textLength',\n textrendering: 'textRendering',\n 'text-rendering': 'textRendering',\n to: 'to',\n transform: 'transform',\n typeof: 'typeof',\n u1: 'u1',\n u2: 'u2',\n underlineposition: 'underlinePosition',\n 'underline-position': 'underlinePosition',\n underlinethickness: 'underlineThickness',\n 'underline-thickness': 'underlineThickness',\n unicode: 'unicode',\n unicodebidi: 'unicodeBidi',\n 'unicode-bidi': 'unicodeBidi',\n unicoderange: 'unicodeRange',\n 'unicode-range': 'unicodeRange',\n unitsperem: 'unitsPerEm',\n 'units-per-em': 'unitsPerEm',\n unselectable: 'unselectable',\n valphabetic: 'vAlphabetic',\n 'v-alphabetic': 'vAlphabetic',\n values: 'values',\n vectoreffect: 'vectorEffect',\n 'vector-effect': 'vectorEffect',\n version: 'version',\n vertadvy: 'vertAdvY',\n 'vert-adv-y': 'vertAdvY',\n vertoriginx: 'vertOriginX',\n 'vert-origin-x': 'vertOriginX',\n vertoriginy: 'vertOriginY',\n 'vert-origin-y': 'vertOriginY',\n vhanging: 'vHanging',\n 'v-hanging': 'vHanging',\n videographic: 'vIdeographic',\n 'v-ideographic': 'vIdeographic',\n viewbox: 'viewBox',\n viewtarget: 'viewTarget',\n visibility: 'visibility',\n vmathematical: 'vMathematical',\n 'v-mathematical': 'vMathematical',\n vocab: 'vocab',\n widths: 'widths',\n wordspacing: 'wordSpacing',\n 'word-spacing': 'wordSpacing',\n writingmode: 'writingMode',\n 'writing-mode': 'writingMode',\n x1: 'x1',\n x2: 'x2',\n x: 'x',\n xchannelselector: 'xChannelSelector',\n xheight: 'xHeight',\n 'x-height': 'xHeight',\n xlinkactuate: 'xlinkActuate',\n 'xlink:actuate': 'xlinkActuate',\n xlinkarcrole: 'xlinkArcrole',\n 'xlink:arcrole': 'xlinkArcrole',\n xlinkhref: 'xlinkHref',\n 'xlink:href': 'xlinkHref',\n xlinkrole: 'xlinkRole',\n 'xlink:role': 'xlinkRole',\n xlinkshow: 'xlinkShow',\n 'xlink:show': 'xlinkShow',\n xlinktitle: 'xlinkTitle',\n 'xlink:title': 'xlinkTitle',\n xlinktype: 'xlinkType',\n 'xlink:type': 'xlinkType',\n xmlbase: 'xmlBase',\n 'xml:base': 'xmlBase',\n xmllang: 'xmlLang',\n 'xml:lang': 'xmlLang',\n xmlns: 'xmlns',\n 'xml:space': 'xmlSpace',\n xmlnsxlink: 'xmlnsXlink',\n 'xmlns:xlink': 'xmlnsXlink',\n xmlspace: 'xmlSpace',\n y1: 'y1',\n y2: 'y2',\n y: 'y',\n ychannelselector: 'yChannelSelector',\n z: 'z',\n zoomandpan: 'zoomAndPan'\n};\n\nvar ariaProperties = {\n 'aria-current': 0,\n // state\n 'aria-description': 0,\n 'aria-details': 0,\n 'aria-disabled': 0,\n // state\n 'aria-hidden': 0,\n // state\n 'aria-invalid': 0,\n // state\n 'aria-keyshortcuts': 0,\n 'aria-label': 0,\n 'aria-roledescription': 0,\n // Widget Attributes\n 'aria-autocomplete': 0,\n 'aria-checked': 0,\n 'aria-expanded': 0,\n 'aria-haspopup': 0,\n 'aria-level': 0,\n 'aria-modal': 0,\n 'aria-multiline': 0,\n 'aria-multiselectable': 0,\n 'aria-orientation': 0,\n 'aria-placeholder': 0,\n 'aria-pressed': 0,\n 'aria-readonly': 0,\n 'aria-required': 0,\n 'aria-selected': 0,\n 'aria-sort': 0,\n 'aria-valuemax': 0,\n 'aria-valuemin': 0,\n 'aria-valuenow': 0,\n 'aria-valuetext': 0,\n // Live Region Attributes\n 'aria-atomic': 0,\n 'aria-busy': 0,\n 'aria-live': 0,\n 'aria-relevant': 0,\n // Drag-and-Drop Attributes\n 'aria-dropeffect': 0,\n 'aria-grabbed': 0,\n // Relationship Attributes\n 'aria-activedescendant': 0,\n 'aria-colcount': 0,\n 'aria-colindex': 0,\n 'aria-colspan': 0,\n 'aria-controls': 0,\n 'aria-describedby': 0,\n 'aria-errormessage': 0,\n 'aria-flowto': 0,\n 'aria-labelledby': 0,\n 'aria-owns': 0,\n 'aria-posinset': 0,\n 'aria-rowcount': 0,\n 'aria-rowindex': 0,\n 'aria-rowspan': 0,\n 'aria-setsize': 0\n};\n\nvar warnedProperties = {};\nvar rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\nfunction validateProperty(tagName, name) {\n {\n if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name]) {\n return true;\n }\n\n if (rARIACamel.test(name)) {\n var ariaName = 'aria-' + name.slice(4).toLowerCase();\n var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n\n if (correctName == null) {\n error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);\n\n warnedProperties[name] = true;\n return true;\n } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n if (name !== correctName) {\n error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);\n\n warnedProperties[name] = true;\n return true;\n }\n }\n\n if (rARIA.test(name)) {\n var lowerCasedName = name.toLowerCase();\n var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n\n if (standardName == null) {\n warnedProperties[name] = true;\n return false;\n } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n if (name !== standardName) {\n error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);\n\n warnedProperties[name] = true;\n return true;\n }\n }\n }\n\n return true;\n}\n\nfunction warnInvalidARIAProps(type, props) {\n {\n var invalidProps = [];\n\n for (var key in props) {\n var isValid = validateProperty(type, key);\n\n if (!isValid) {\n invalidProps.push(key);\n }\n }\n\n var unknownPropString = invalidProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n\n if (invalidProps.length === 1) {\n error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);\n } else if (invalidProps.length > 1) {\n error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);\n }\n }\n}\n\nfunction validateProperties(type, props) {\n if (isCustomComponent(type, props)) {\n return;\n }\n\n warnInvalidARIAProps(type, props);\n}\n\nvar didWarnValueNull = false;\nfunction validateProperties$1(type, props) {\n {\n if (type !== 'input' && type !== 'textarea' && type !== 'select') {\n return;\n }\n\n if (props != null && props.value === null && !didWarnValueNull) {\n didWarnValueNull = true;\n\n if (type === 'select' && props.multiple) {\n error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);\n } else {\n error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);\n }\n }\n }\n}\n\nvar validateProperty$1 = function () {};\n\n{\n var warnedProperties$1 = {};\n var EVENT_NAME_REGEX = /^on./;\n var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;\n var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\n var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\n validateProperty$1 = function (tagName, name, value, eventRegistry) {\n if (hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {\n return true;\n }\n\n var lowerCasedName = name.toLowerCase();\n\n if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {\n error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');\n\n warnedProperties$1[name] = true;\n return true;\n } // We can't rely on the event system being injected on the server.\n\n\n if (eventRegistry != null) {\n var registrationNameDependencies = eventRegistry.registrationNameDependencies,\n possibleRegistrationNames = eventRegistry.possibleRegistrationNames;\n\n if (registrationNameDependencies.hasOwnProperty(name)) {\n return true;\n }\n\n var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;\n\n if (registrationName != null) {\n error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (EVENT_NAME_REGEX.test(name)) {\n error('Unknown event handler property `%s`. It will be ignored.', name);\n\n warnedProperties$1[name] = true;\n return true;\n }\n } else if (EVENT_NAME_REGEX.test(name)) {\n // If no event plugins have been injected, we are in a server environment.\n // So we can't tell if the event name is correct for sure, but we can filter\n // out known bad ones like `onclick`. We can't suggest a specific replacement though.\n if (INVALID_EVENT_NAME_REGEX.test(name)) {\n error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);\n }\n\n warnedProperties$1[name] = true;\n return true;\n } // Let the ARIA attribute hook validate ARIA attributes\n\n\n if (rARIA$1.test(name) || rARIACamel$1.test(name)) {\n return true;\n }\n\n if (lowerCasedName === 'innerhtml') {\n error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'aria') {\n error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {\n error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (typeof value === 'number' && isNaN(value)) {\n error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n var propertyInfo = getPropertyInfo(name);\n var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.\n\n if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n var standardName = possibleStandardNames[lowerCasedName];\n\n if (standardName !== name) {\n error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);\n\n warnedProperties$1[name] = true;\n return true;\n }\n } else if (!isReserved && name !== lowerCasedName) {\n // Unknown attributes should have lowercase casing since that's how they\n // will be cased anyway with server rendering.\n error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n if (value) {\n error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.', value, name, name, value, name);\n } else {\n error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);\n }\n\n warnedProperties$1[name] = true;\n return true;\n } // Now that we've validated casing, do not validate\n // data types for reserved props\n\n\n if (isReserved) {\n return true;\n } // Warn when a known attribute is a bad type\n\n\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n warnedProperties$1[name] = true;\n return false;\n } // Warn when passing the strings 'false' or 'true' into a boolean prop\n\n\n if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {\n error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string \"false\".', name, value);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n return true;\n };\n}\n\nvar warnUnknownProperties = function (type, props, eventRegistry) {\n {\n var unknownProps = [];\n\n for (var key in props) {\n var isValid = validateProperty$1(type, key, props[key], eventRegistry);\n\n if (!isValid) {\n unknownProps.push(key);\n }\n }\n\n var unknownPropString = unknownProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n\n if (unknownProps.length === 1) {\n error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);\n } else if (unknownProps.length > 1) {\n error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);\n }\n }\n};\n\nfunction validateProperties$2(type, props, eventRegistry) {\n if (isCustomComponent(type, props)) {\n return;\n }\n\n warnUnknownProperties(type, props, eventRegistry);\n}\n\nvar IS_EVENT_HANDLE_NON_MANAGED_NODE = 1;\nvar IS_NON_DELEGATED = 1 << 1;\nvar IS_CAPTURE_PHASE = 1 << 2;\n// set to LEGACY_FB_SUPPORT. LEGACY_FB_SUPPORT only gets set when\n// we call willDeferLaterForLegacyFBSupport, thus not bailing out\n// will result in endless cycles like an infinite loop.\n// We also don't want to defer during event replaying.\n\nvar SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS = IS_EVENT_HANDLE_NON_MANAGED_NODE | IS_NON_DELEGATED | IS_CAPTURE_PHASE;\n\n// This exists to avoid circular dependency between ReactDOMEventReplaying\n// and DOMPluginEventSystem.\nvar currentReplayingEvent = null;\nfunction setReplayingEvent(event) {\n {\n if (currentReplayingEvent !== null) {\n error('Expected currently replaying event to be null. This error ' + 'is likely caused by a bug in React. Please file an issue.');\n }\n }\n\n currentReplayingEvent = event;\n}\nfunction resetReplayingEvent() {\n {\n if (currentReplayingEvent === null) {\n error('Expected currently replaying event to not be null. This error ' + 'is likely caused by a bug in React. Please file an issue.');\n }\n }\n\n currentReplayingEvent = null;\n}\nfunction isReplayingEvent(event) {\n return event === currentReplayingEvent;\n}\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n // Fallback to nativeEvent.srcElement for IE9\n // https://github.com/facebook/react/issues/12506\n var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG <use> element events #4963\n\n if (target.correspondingUseElement) {\n target = target.correspondingUseElement;\n } // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n // @see http://www.quirksmode.org/js/events_properties.html\n\n\n return target.nodeType === TEXT_NODE ? target.parentNode : target;\n}\n\nvar restoreImpl = null;\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n // We perform this translation at the end of the event loop so that we\n // always receive the correct fiber here\n var internalInstance = getInstanceFromNode(target);\n\n if (!internalInstance) {\n // Unmounted\n return;\n }\n\n if (typeof restoreImpl !== 'function') {\n throw new Error('setRestoreImplementation() needs to be called to handle a target for controlled ' + 'events. This error is likely caused by a bug in React. Please file an issue.');\n }\n\n var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.\n\n if (stateNode) {\n var _props = getFiberCurrentPropsFromNode(stateNode);\n\n restoreImpl(internalInstance.stateNode, internalInstance.type, _props);\n }\n}\n\nfunction setRestoreImplementation(impl) {\n restoreImpl = impl;\n}\nfunction enqueueStateRestore(target) {\n if (restoreTarget) {\n if (restoreQueue) {\n restoreQueue.push(target);\n } else {\n restoreQueue = [target];\n }\n } else {\n restoreTarget = target;\n }\n}\nfunction needsStateRestore() {\n return restoreTarget !== null || restoreQueue !== null;\n}\nfunction restoreStateIfNeeded() {\n if (!restoreTarget) {\n return;\n }\n\n var target = restoreTarget;\n var queuedTargets = restoreQueue;\n restoreTarget = null;\n restoreQueue = null;\n restoreStateOfTarget(target);\n\n if (queuedTargets) {\n for (var i = 0; i < queuedTargets.length; i++) {\n restoreStateOfTarget(queuedTargets[i]);\n }\n }\n}\n\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n// Defaults\n\nvar batchedUpdatesImpl = function (fn, bookkeeping) {\n return fn(bookkeeping);\n};\n\nvar flushSyncImpl = function () {};\n\nvar isInsideEventHandler = false;\n\nfunction finishEventHandler() {\n // Here we wait until all updates have propagated, which is important\n // when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n // Then we restore state of any controlled component.\n var controlledComponentsHavePendingUpdates = needsStateRestore();\n\n if (controlledComponentsHavePendingUpdates) {\n // If a controlled event was fired, we may need to restore the state of\n // the DOM node back to the controlled value. This is necessary when React\n // bails out of the update without touching the DOM.\n // TODO: Restore state in the microtask, after the discrete updates flush,\n // instead of early flushing them here.\n flushSyncImpl();\n restoreStateIfNeeded();\n }\n}\n\nfunction batchedUpdates(fn, a, b) {\n if (isInsideEventHandler) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(a, b);\n }\n\n isInsideEventHandler = true;\n\n try {\n return batchedUpdatesImpl(fn, a, b);\n } finally {\n isInsideEventHandler = false;\n finishEventHandler();\n }\n} // TODO: Replace with flushSync\nfunction setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushSyncImpl) {\n batchedUpdatesImpl = _batchedUpdatesImpl;\n flushSyncImpl = _flushSyncImpl;\n}\n\nfunction isInteractive(tag) {\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nfunction shouldPreventMouseEvent(name, type, props) {\n switch (name) {\n case 'onClick':\n case 'onClickCapture':\n case 'onDoubleClick':\n case 'onDoubleClickCapture':\n case 'onMouseDown':\n case 'onMouseDownCapture':\n case 'onMouseMove':\n case 'onMouseMoveCapture':\n case 'onMouseUp':\n case 'onMouseUpCapture':\n case 'onMouseEnter':\n return !!(props.disabled && isInteractive(type));\n\n default:\n return false;\n }\n}\n/**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n\n\nfunction getListener(inst, registrationName) {\n var stateNode = inst.stateNode;\n\n if (stateNode === null) {\n // Work in progress (ex: onload events in incremental mode).\n return null;\n }\n\n var props = getFiberCurrentPropsFromNode(stateNode);\n\n if (props === null) {\n // Work in progress.\n return null;\n }\n\n var listener = props[registrationName];\n\n if (shouldPreventMouseEvent(registrationName, inst.type, props)) {\n return null;\n }\n\n if (listener && typeof listener !== 'function') {\n throw new Error(\"Expected `\" + registrationName + \"` listener to be a function, instead got a value of `\" + typeof listener + \"` type.\");\n }\n\n return listener;\n}\n\nvar passiveBrowserEventsSupported = false; // Check if browser support events with passive listeners\n// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n\nif (canUseDOM) {\n try {\n var options = {}; // $FlowFixMe: Ignore Flow complaining about needing a value\n\n Object.defineProperty(options, 'passive', {\n get: function () {\n passiveBrowserEventsSupported = true;\n }\n });\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, options);\n } catch (e) {\n passiveBrowserEventsSupported = false;\n }\n}\n\nfunction invokeGuardedCallbackProd(name, func, context, a, b, c, d, e, f) {\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n try {\n func.apply(context, funcArgs);\n } catch (error) {\n this.onError(error);\n }\n}\n\nvar invokeGuardedCallbackImpl = invokeGuardedCallbackProd;\n\n{\n // In DEV mode, we swap out invokeGuardedCallback for a special version\n // that plays more nicely with the browser's DevTools. The idea is to preserve\n // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n // functions in invokeGuardedCallback, and the production version of\n // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n // like caught exceptions, and the DevTools won't pause unless the developer\n // takes the extra step of enabling pause on caught exceptions. This is\n // unintuitive, though, because even though React has caught the error, from\n // the developer's perspective, the error is uncaught.\n //\n // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n // DOM node, and call the user-provided callback from inside an event handler\n // for that fake event. If the callback throws, the error is \"captured\" using\n // a global event handler. But because the error happens in a different\n // event loop context, it does not interrupt the normal program flow.\n // Effectively, this gives us try-catch behavior without actually using\n // try-catch. Neat!\n // Check that the browser supports the APIs we need to implement our special\n // DEV version of invokeGuardedCallback\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n\n invokeGuardedCallbackImpl = function invokeGuardedCallbackDev(name, func, context, a, b, c, d, e, f) {\n // If document doesn't exist we know for sure we will crash in this method\n // when we call document.createEvent(). However this can cause confusing\n // errors: https://github.com/facebook/create-react-app/issues/3482\n // So we preemptively throw with a better message instead.\n if (typeof document === 'undefined' || document === null) {\n throw new Error('The `document` global was defined when React was initialized, but is not ' + 'defined anymore. This can happen in a test environment if a component ' + 'schedules an update from an asynchronous callback, but the test has already ' + 'finished running. To solve this, you can either unmount the component at ' + 'the end of your test (and ensure that any asynchronous operations get ' + 'canceled in `componentWillUnmount`), or you can change the test itself ' + 'to be asynchronous.');\n }\n\n var evt = document.createEvent('Event');\n var didCall = false; // Keeps track of whether the user-provided callback threw an error. We\n // set this to true at the beginning, then set it to false right after\n // calling the function. If the function errors, `didError` will never be\n // set to false. This strategy works even if the browser is flaky and\n // fails to call our global error handler, because it doesn't rely on\n // the error event at all.\n\n var didError = true; // Keeps track of the value of window.event so that we can reset it\n // during the callback to let user code access window.event in the\n // browsers that support it.\n\n var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event\n // dispatching: https://github.com/facebook/react/issues/13688\n\n var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event');\n\n function restoreAfterDispatch() {\n // We immediately remove the callback from event listeners so that\n // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n // nested call would trigger the fake event handlers of any call higher\n // in the stack.\n fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the\n // window.event assignment in both IE <= 10 as they throw an error\n // \"Member not found\" in strict mode, and in Firefox which does not\n // support window.event.\n\n if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {\n window.event = windowEvent;\n }\n } // Create an event handler for our fake event. We will synchronously\n // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n // call the user-provided callback.\n\n\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n function callCallback() {\n didCall = true;\n restoreAfterDispatch();\n func.apply(context, funcArgs);\n didError = false;\n } // Create a global error event handler. We use this to capture the value\n // that was thrown. It's possible that this error handler will fire more\n // than once; for example, if non-React code also calls `dispatchEvent`\n // and a handler for that event throws. We should be resilient to most of\n // those cases. Even if our error event handler fires more than once, the\n // last error event is always used. If the callback actually does error,\n // we know that the last error event is the correct one, because it's not\n // possible for anything else to have happened in between our callback\n // erroring and the code that follows the `dispatchEvent` call below. If\n // the callback doesn't error, but the error event was fired, we know to\n // ignore it because `didError` will be false, as described above.\n\n\n var error; // Use this to track whether the error event is ever called.\n\n var didSetError = false;\n var isCrossOriginError = false;\n\n function handleWindowError(event) {\n error = event.error;\n didSetError = true;\n\n if (error === null && event.colno === 0 && event.lineno === 0) {\n isCrossOriginError = true;\n }\n\n if (event.defaultPrevented) {\n // Some other error handler has prevented default.\n // Browsers silence the error report if this happens.\n // We'll remember this to later decide whether to log it or not.\n if (error != null && typeof error === 'object') {\n try {\n error._suppressLogging = true;\n } catch (inner) {// Ignore.\n }\n }\n }\n } // Create a fake event type.\n\n\n var evtType = \"react-\" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers\n\n window.addEventListener('error', handleWindowError);\n fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function\n // errors, it will trigger our global error handler.\n\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n\n if (windowEventDescriptor) {\n Object.defineProperty(window, 'event', windowEventDescriptor);\n }\n\n if (didCall && didError) {\n if (!didSetError) {\n // The callback errored, but the error event never fired.\n // eslint-disable-next-line react-internal/prod-error-codes\n error = new Error('An error was thrown inside one of your components, but React ' + \"doesn't know what it was. This is likely due to browser \" + 'flakiness. React does its best to preserve the \"Pause on ' + 'exceptions\" behavior of the DevTools, which requires some ' + \"DEV-mode only tricks. It's possible that these don't work in \" + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');\n } else if (isCrossOriginError) {\n // eslint-disable-next-line react-internal/prod-error-codes\n error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://reactjs.org/link/crossorigin-error for more information.');\n }\n\n this.onError(error);\n } // Remove our event listeners\n\n\n window.removeEventListener('error', handleWindowError);\n\n if (!didCall) {\n // Something went really wrong, and our event was not dispatched.\n // https://github.com/facebook/react/issues/16734\n // https://github.com/facebook/react/issues/16585\n // Fall back to the production implementation.\n restoreAfterDispatch();\n return invokeGuardedCallbackProd.apply(this, arguments);\n }\n };\n }\n}\n\nvar invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;\n\nvar hasError = false;\nvar caughtError = null; // Used by event system to capture/rethrow the first error.\n\nvar hasRethrowError = false;\nvar rethrowError = null;\nvar reporter = {\n onError: function (error) {\n hasError = true;\n caughtError = error;\n }\n};\n/**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n hasError = false;\n caughtError = null;\n invokeGuardedCallbackImpl$1.apply(reporter, arguments);\n}\n/**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if caughtError and rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {\n invokeGuardedCallback.apply(this, arguments);\n\n if (hasError) {\n var error = clearCaughtError();\n\n if (!hasRethrowError) {\n hasRethrowError = true;\n rethrowError = error;\n }\n }\n}\n/**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n\nfunction rethrowCaughtError() {\n if (hasRethrowError) {\n var error = rethrowError;\n hasRethrowError = false;\n rethrowError = null;\n throw error;\n }\n}\nfunction hasCaughtError() {\n return hasError;\n}\nfunction clearCaughtError() {\n if (hasError) {\n var error = caughtError;\n hasError = false;\n caughtError = null;\n return error;\n } else {\n throw new Error('clearCaughtError was called but no error was captured. This error ' + 'is likely caused by a bug in React. Please file an issue.');\n }\n}\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n *\n * Note that this module is currently shared and assumed to be stateless.\n * If this becomes an actual Map, that will break.\n */\nfunction get(key) {\n return key._reactInternals;\n}\nfunction has(key) {\n return key._reactInternals !== undefined;\n}\nfunction set(key, value) {\n key._reactInternals = value;\n}\n\n// Don't change these two values. They're used by React Dev Tools.\nvar NoFlags =\n/* */\n0;\nvar PerformedWork =\n/* */\n1; // You can change the rest (and add more).\n\nvar Placement =\n/* */\n2;\nvar Update =\n/* */\n4;\nvar ChildDeletion =\n/* */\n16;\nvar ContentReset =\n/* */\n32;\nvar Callback =\n/* */\n64;\nvar DidCapture =\n/* */\n128;\nvar ForceClientRender =\n/* */\n256;\nvar Ref =\n/* */\n512;\nvar Snapshot =\n/* */\n1024;\nvar Passive =\n/* */\n2048;\nvar Hydrating =\n/* */\n4096;\nvar Visibility =\n/* */\n8192;\nvar StoreConsistency =\n/* */\n16384;\nvar LifecycleEffectMask = Passive | Update | Callback | Ref | Snapshot | StoreConsistency; // Union of all commit flags (flags with the lifetime of a particular commit)\n\nvar HostEffectMask =\n/* */\n32767; // These are not really side effects, but we still reuse this field.\n\nvar Incomplete =\n/* */\n32768;\nvar ShouldCapture =\n/* */\n65536;\nvar ForceUpdateForLegacySuspense =\n/* */\n131072;\nvar Forked =\n/* */\n1048576; // Static tags describe aspects of a fiber that are not specific to a render,\n// e.g. a fiber uses a passive effect (even if there are no updates on this particular render).\n// This enables us to defer more work in the unmount case,\n// since we can defer traversing the tree during layout to look for Passive effects,\n// and instead rely on the static flag as a signal that there may be cleanup work.\n\nvar RefStatic =\n/* */\n2097152;\nvar LayoutStatic =\n/* */\n4194304;\nvar PassiveStatic =\n/* */\n8388608; // These flags allow us to traverse to fibers that have effects on mount\n// without traversing the entire tree after every commit for\n// double invoking\n\nvar MountLayoutDev =\n/* */\n16777216;\nvar MountPassiveDev =\n/* */\n33554432; // Groups of flags that are used in the commit phase to skip over trees that\n// don't contain effects, by checking subtreeFlags.\n\nvar BeforeMutationMask = // TODO: Remove Update flag from before mutation phase by re-landing Visibility\n// flag logic (see #20043)\nUpdate | Snapshot | ( 0);\nvar MutationMask = Placement | Update | ChildDeletion | ContentReset | Ref | Hydrating | Visibility;\nvar LayoutMask = Update | Callback | Ref | Visibility; // TODO: Split into PassiveMountMask and PassiveUnmountMask\n\nvar PassiveMask = Passive | ChildDeletion; // Union of tags that don't get reset on clones.\n// This allows certain concepts to persist without recalculating them,\n// e.g. whether a subtree contains passive effects or portals.\n\nvar StaticMask = LayoutStatic | PassiveStatic | RefStatic;\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nfunction getNearestMountedFiber(fiber) {\n var node = fiber;\n var nearestMounted = fiber;\n\n if (!fiber.alternate) {\n // If there is no alternate, this might be a new tree that isn't inserted\n // yet. If it is, then it will have a pending insertion effect on it.\n var nextNode = node;\n\n do {\n node = nextNode;\n\n if ((node.flags & (Placement | Hydrating)) !== NoFlags) {\n // This is an insertion or in-progress hydration. The nearest possible\n // mounted fiber is the parent but we need to continue to figure out\n // if that one is still mounted.\n nearestMounted = node.return;\n }\n\n nextNode = node.return;\n } while (nextNode);\n } else {\n while (node.return) {\n node = node.return;\n }\n }\n\n if (node.tag === HostRoot) {\n // TODO: Check if this was a nested HostRoot when used with\n // renderContainerIntoSubtree.\n return nearestMounted;\n } // If we didn't hit the root, that means that we're in an disconnected tree\n // that has been unmounted.\n\n\n return null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (fiber.tag === SuspenseComponent) {\n var suspenseState = fiber.memoizedState;\n\n if (suspenseState === null) {\n var current = fiber.alternate;\n\n if (current !== null) {\n suspenseState = current.memoizedState;\n }\n }\n\n if (suspenseState !== null) {\n return suspenseState.dehydrated;\n }\n }\n\n return null;\n}\nfunction getContainerFromFiber(fiber) {\n return fiber.tag === HostRoot ? fiber.stateNode.containerInfo : null;\n}\nfunction isFiberMounted(fiber) {\n return getNearestMountedFiber(fiber) === fiber;\n}\nfunction isMounted(component) {\n {\n var owner = ReactCurrentOwner.current;\n\n if (owner !== null && owner.tag === ClassComponent) {\n var ownerFiber = owner;\n var instance = ownerFiber.stateNode;\n\n if (!instance._warnedAboutRefsInRender) {\n error('%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentNameFromFiber(ownerFiber) || 'A component');\n }\n\n instance._warnedAboutRefsInRender = true;\n }\n }\n\n var fiber = get(component);\n\n if (!fiber) {\n return false;\n }\n\n return getNearestMountedFiber(fiber) === fiber;\n}\n\nfunction assertIsMounted(fiber) {\n if (getNearestMountedFiber(fiber) !== fiber) {\n throw new Error('Unable to find node on an unmounted component.');\n }\n}\n\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n\n if (!alternate) {\n // If there is no alternate, then we only need to check if it is mounted.\n var nearestMounted = getNearestMountedFiber(fiber);\n\n if (nearestMounted === null) {\n throw new Error('Unable to find node on an unmounted component.');\n }\n\n if (nearestMounted !== fiber) {\n return null;\n }\n\n return fiber;\n } // If we have two possible branches, we'll walk backwards up to the root\n // to see what path the root points to. On the way we may hit one of the\n // special cases and we'll deal with them.\n\n\n var a = fiber;\n var b = alternate;\n\n while (true) {\n var parentA = a.return;\n\n if (parentA === null) {\n // We're at the root.\n break;\n }\n\n var parentB = parentA.alternate;\n\n if (parentB === null) {\n // There is no alternate. This is an unusual case. Currently, it only\n // happens when a Suspense component is hidden. An extra fragment fiber\n // is inserted in between the Suspense fiber and its children. Skip\n // over this extra fragment fiber and proceed to the next parent.\n var nextParent = parentA.return;\n\n if (nextParent !== null) {\n a = b = nextParent;\n continue;\n } // If there's no parent, we're at the root.\n\n\n break;\n } // If both copies of the parent fiber point to the same child, we can\n // assume that the child is current. This happens when we bailout on low\n // priority: the bailed out fiber's child reuses the current child.\n\n\n if (parentA.child === parentB.child) {\n var child = parentA.child;\n\n while (child) {\n if (child === a) {\n // We've determined that A is the current branch.\n assertIsMounted(parentA);\n return fiber;\n }\n\n if (child === b) {\n // We've determined that B is the current branch.\n assertIsMounted(parentA);\n return alternate;\n }\n\n child = child.sibling;\n } // We should never have an alternate for any mounting node. So the only\n // way this could possibly happen is if this was unmounted, if at all.\n\n\n throw new Error('Unable to find node on an unmounted component.');\n }\n\n if (a.return !== b.return) {\n // The return pointer of A and the return pointer of B point to different\n // fibers. We assume that return pointers never criss-cross, so A must\n // belong to the child set of A.return, and B must belong to the child\n // set of B.return.\n a = parentA;\n b = parentB;\n } else {\n // The return pointers point to the same fiber. We'll have to use the\n // default, slow path: scan the child sets of each parent alternate to see\n // which child belongs to which set.\n //\n // Search parent A's child set\n var didFindChild = false;\n var _child = parentA.child;\n\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentA;\n b = parentB;\n break;\n }\n\n if (_child === b) {\n didFindChild = true;\n b = parentA;\n a = parentB;\n break;\n }\n\n _child = _child.sibling;\n }\n\n if (!didFindChild) {\n // Search parent B's child set\n _child = parentB.child;\n\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentB;\n b = parentA;\n break;\n }\n\n if (_child === b) {\n didFindChild = true;\n b = parentB;\n a = parentA;\n break;\n }\n\n _child = _child.sibling;\n }\n\n if (!didFindChild) {\n throw new Error('Child was not found in either parent set. This indicates a bug ' + 'in React related to the return pointer. Please file an issue.');\n }\n }\n }\n\n if (a.alternate !== b) {\n throw new Error(\"Return fibers should always be each others' alternates. \" + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n } // If the root is not a host container, we're in a disconnected tree. I.e.\n // unmounted.\n\n\n if (a.tag !== HostRoot) {\n throw new Error('Unable to find node on an unmounted component.');\n }\n\n if (a.stateNode.current === a) {\n // We've determined that A is the current branch.\n return fiber;\n } // Otherwise B has to be current branch.\n\n\n return alternate;\n}\nfunction findCurrentHostFiber(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n return currentParent !== null ? findCurrentHostFiberImpl(currentParent) : null;\n}\n\nfunction findCurrentHostFiberImpl(node) {\n // Next we'll drill down this component to find the first HostComponent/Text.\n if (node.tag === HostComponent || node.tag === HostText) {\n return node;\n }\n\n var child = node.child;\n\n while (child !== null) {\n var match = findCurrentHostFiberImpl(child);\n\n if (match !== null) {\n return match;\n }\n\n child = child.sibling;\n }\n\n return null;\n}\n\nfunction findCurrentHostFiberWithNoPortals(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n return currentParent !== null ? findCurrentHostFiberWithNoPortalsImpl(currentParent) : null;\n}\n\nfunction findCurrentHostFiberWithNoPortalsImpl(node) {\n // Next we'll drill down this component to find the first HostComponent/Text.\n if (node.tag === HostComponent || node.tag === HostText) {\n return node;\n }\n\n var child = node.child;\n\n while (child !== null) {\n if (child.tag !== HostPortal) {\n var match = findCurrentHostFiberWithNoPortalsImpl(child);\n\n if (match !== null) {\n return match;\n }\n }\n\n child = child.sibling;\n }\n\n return null;\n}\n\n// This module only exists as an ESM wrapper around the external CommonJS\nvar scheduleCallback = Scheduler.unstable_scheduleCallback;\nvar cancelCallback = Scheduler.unstable_cancelCallback;\nvar shouldYield = Scheduler.unstable_shouldYield;\nvar requestPaint = Scheduler.unstable_requestPaint;\nvar now = Scheduler.unstable_now;\nvar getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel;\nvar ImmediatePriority = Scheduler.unstable_ImmediatePriority;\nvar UserBlockingPriority = Scheduler.unstable_UserBlockingPriority;\nvar NormalPriority = Scheduler.unstable_NormalPriority;\nvar LowPriority = Scheduler.unstable_LowPriority;\nvar IdlePriority = Scheduler.unstable_IdlePriority;\n// this doesn't actually exist on the scheduler, but it *does*\n// on scheduler/unstable_mock, which we'll need for internal testing\nvar unstable_yieldValue = Scheduler.unstable_yieldValue;\nvar unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue;\n\nvar rendererID = null;\nvar injectedHook = null;\nvar injectedProfilingHooks = null;\nvar hasLoggedError = false;\nvar isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined';\nfunction injectInternals(internals) {\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n // No DevTools\n return false;\n }\n\n var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n if (hook.isDisabled) {\n // This isn't a real property on the hook, but it can be set to opt out\n // of DevTools integration and associated warnings and logs.\n // https://github.com/facebook/react/issues/3877\n return true;\n }\n\n if (!hook.supportsFiber) {\n {\n error('The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://reactjs.org/link/react-devtools');\n } // DevTools exists, even though it doesn't support Fiber.\n\n\n return true;\n }\n\n try {\n if (enableSchedulingProfiler) {\n // Conditionally inject these hooks only if Timeline profiler is supported by this build.\n // This gives DevTools a way to feature detect that isn't tied to version number\n // (since profiling and timeline are controlled by different feature flags).\n internals = assign({}, internals, {\n getLaneLabelMap: getLaneLabelMap,\n injectProfilingHooks: injectProfilingHooks\n });\n }\n\n rendererID = hook.inject(internals); // We have successfully injected, so now it is safe to set up hooks.\n\n injectedHook = hook;\n } catch (err) {\n // Catch all errors because it is unsafe to throw during initialization.\n {\n error('React instrumentation encountered an error: %s.', err);\n }\n }\n\n if (hook.checkDCE) {\n // This is the real DevTools.\n return true;\n } else {\n // This is likely a hook installed by Fast Refresh runtime.\n return false;\n }\n}\nfunction onScheduleRoot(root, children) {\n {\n if (injectedHook && typeof injectedHook.onScheduleFiberRoot === 'function') {\n try {\n injectedHook.onScheduleFiberRoot(rendererID, root, children);\n } catch (err) {\n if ( !hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n }\n}\nfunction onCommitRoot(root, eventPriority) {\n if (injectedHook && typeof injectedHook.onCommitFiberRoot === 'function') {\n try {\n var didError = (root.current.flags & DidCapture) === DidCapture;\n\n if (enableProfilerTimer) {\n var schedulerPriority;\n\n switch (eventPriority) {\n case DiscreteEventPriority:\n schedulerPriority = ImmediatePriority;\n break;\n\n case ContinuousEventPriority:\n schedulerPriority = UserBlockingPriority;\n break;\n\n case DefaultEventPriority:\n schedulerPriority = NormalPriority;\n break;\n\n case IdleEventPriority:\n schedulerPriority = IdlePriority;\n break;\n\n default:\n schedulerPriority = NormalPriority;\n break;\n }\n\n injectedHook.onCommitFiberRoot(rendererID, root, schedulerPriority, didError);\n } else {\n injectedHook.onCommitFiberRoot(rendererID, root, undefined, didError);\n }\n } catch (err) {\n {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n }\n}\nfunction onPostCommitRoot(root) {\n if (injectedHook && typeof injectedHook.onPostCommitFiberRoot === 'function') {\n try {\n injectedHook.onPostCommitFiberRoot(rendererID, root);\n } catch (err) {\n {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n }\n}\nfunction onCommitUnmount(fiber) {\n if (injectedHook && typeof injectedHook.onCommitFiberUnmount === 'function') {\n try {\n injectedHook.onCommitFiberUnmount(rendererID, fiber);\n } catch (err) {\n {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n }\n}\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n {\n if (typeof unstable_yieldValue === 'function') {\n // We're in a test because Scheduler.unstable_yieldValue only exists\n // in SchedulerMock. To reduce the noise in strict mode tests,\n // suppress warnings and disable scheduler yielding during the double render\n unstable_setDisableYieldValue(newIsStrictMode);\n setSuppressWarning(newIsStrictMode);\n }\n\n if (injectedHook && typeof injectedHook.setStrictMode === 'function') {\n try {\n injectedHook.setStrictMode(rendererID, newIsStrictMode);\n } catch (err) {\n {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n }\n }\n} // Profiler API hooks\n\nfunction injectProfilingHooks(profilingHooks) {\n injectedProfilingHooks = profilingHooks;\n}\n\nfunction getLaneLabelMap() {\n {\n var map = new Map();\n var lane = 1;\n\n for (var index = 0; index < TotalLanes; index++) {\n var label = getLabelForLane(lane);\n map.set(lane, label);\n lane *= 2;\n }\n\n return map;\n }\n}\n\nfunction markCommitStarted(lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markCommitStarted === 'function') {\n injectedProfilingHooks.markCommitStarted(lanes);\n }\n }\n}\nfunction markCommitStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markCommitStopped === 'function') {\n injectedProfilingHooks.markCommitStopped();\n }\n }\n}\nfunction markComponentRenderStarted(fiber) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentRenderStarted === 'function') {\n injectedProfilingHooks.markComponentRenderStarted(fiber);\n }\n }\n}\nfunction markComponentRenderStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentRenderStopped === 'function') {\n injectedProfilingHooks.markComponentRenderStopped();\n }\n }\n}\nfunction markComponentPassiveEffectMountStarted(fiber) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted === 'function') {\n injectedProfilingHooks.markComponentPassiveEffectMountStarted(fiber);\n }\n }\n}\nfunction markComponentPassiveEffectMountStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped === 'function') {\n injectedProfilingHooks.markComponentPassiveEffectMountStopped();\n }\n }\n}\nfunction markComponentPassiveEffectUnmountStarted(fiber) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted === 'function') {\n injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(fiber);\n }\n }\n}\nfunction markComponentPassiveEffectUnmountStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped === 'function') {\n injectedProfilingHooks.markComponentPassiveEffectUnmountStopped();\n }\n }\n}\nfunction markComponentLayoutEffectMountStarted(fiber) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted === 'function') {\n injectedProfilingHooks.markComponentLayoutEffectMountStarted(fiber);\n }\n }\n}\nfunction markComponentLayoutEffectMountStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped === 'function') {\n injectedProfilingHooks.markComponentLayoutEffectMountStopped();\n }\n }\n}\nfunction markComponentLayoutEffectUnmountStarted(fiber) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted === 'function') {\n injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(fiber);\n }\n }\n}\nfunction markComponentLayoutEffectUnmountStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped === 'function') {\n injectedProfilingHooks.markComponentLayoutEffectUnmountStopped();\n }\n }\n}\nfunction markComponentErrored(fiber, thrownValue, lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentErrored === 'function') {\n injectedProfilingHooks.markComponentErrored(fiber, thrownValue, lanes);\n }\n }\n}\nfunction markComponentSuspended(fiber, wakeable, lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentSuspended === 'function') {\n injectedProfilingHooks.markComponentSuspended(fiber, wakeable, lanes);\n }\n }\n}\nfunction markLayoutEffectsStarted(lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markLayoutEffectsStarted === 'function') {\n injectedProfilingHooks.markLayoutEffectsStarted(lanes);\n }\n }\n}\nfunction markLayoutEffectsStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markLayoutEffectsStopped === 'function') {\n injectedProfilingHooks.markLayoutEffectsStopped();\n }\n }\n}\nfunction markPassiveEffectsStarted(lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markPassiveEffectsStarted === 'function') {\n injectedProfilingHooks.markPassiveEffectsStarted(lanes);\n }\n }\n}\nfunction markPassiveEffectsStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markPassiveEffectsStopped === 'function') {\n injectedProfilingHooks.markPassiveEffectsStopped();\n }\n }\n}\nfunction markRenderStarted(lanes) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderStarted === 'function') {\n injectedProfilingHooks.markRenderStarted(lanes);\n }\n }\n}\nfunction markRenderYielded() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderYielded === 'function') {\n injectedProfilingHooks.markRenderYielded();\n }\n }\n}\nfunction markRenderStopped() {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderStopped === 'function') {\n injectedProfilingHooks.markRenderStopped();\n }\n }\n}\nfunction markRenderScheduled(lane) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderScheduled === 'function') {\n injectedProfilingHooks.markRenderScheduled(lane);\n }\n }\n}\nfunction markForceUpdateScheduled(fiber, lane) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markForceUpdateScheduled === 'function') {\n injectedProfilingHooks.markForceUpdateScheduled(fiber, lane);\n }\n }\n}\nfunction markStateUpdateScheduled(fiber, lane) {\n {\n if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markStateUpdateScheduled === 'function') {\n injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);\n }\n }\n}\n\nvar NoMode =\n/* */\n0; // TODO: Remove ConcurrentMode by reading from the root tag instead\n\nvar ConcurrentMode =\n/* */\n1;\nvar ProfileMode =\n/* */\n2;\nvar StrictLegacyMode =\n/* */\n8;\nvar StrictEffectsMode =\n/* */\n16;\n\n// TODO: This is pretty well supported by browsers. Maybe we can drop it.\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback; // Count leading zeros.\n// Based on:\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nfunction clz32Fallback(x) {\n var asUint = x >>> 0;\n\n if (asUint === 0) {\n return 32;\n }\n\n return 31 - (log(asUint) / LN2 | 0) | 0;\n}\n\n// If those values are changed that package should be rebuilt and redeployed.\n\nvar TotalLanes = 31;\nvar NoLanes =\n/* */\n0;\nvar NoLane =\n/* */\n0;\nvar SyncLane =\n/* */\n1;\nvar InputContinuousHydrationLane =\n/* */\n2;\nvar InputContinuousLane =\n/* */\n4;\nvar DefaultHydrationLane =\n/* */\n8;\nvar DefaultLane =\n/* */\n16;\nvar TransitionHydrationLane =\n/* */\n32;\nvar TransitionLanes =\n/* */\n4194240;\nvar TransitionLane1 =\n/* */\n64;\nvar TransitionLane2 =\n/* */\n128;\nvar TransitionLane3 =\n/* */\n256;\nvar TransitionLane4 =\n/* */\n512;\nvar TransitionLane5 =\n/* */\n1024;\nvar TransitionLane6 =\n/* */\n2048;\nvar TransitionLane7 =\n/* */\n4096;\nvar TransitionLane8 =\n/* */\n8192;\nvar TransitionLane9 =\n/* */\n16384;\nvar TransitionLane10 =\n/* */\n32768;\nvar TransitionLane11 =\n/* */\n65536;\nvar TransitionLane12 =\n/* */\n131072;\nvar TransitionLane13 =\n/* */\n262144;\nvar TransitionLane14 =\n/* */\n524288;\nvar TransitionLane15 =\n/* */\n1048576;\nvar TransitionLane16 =\n/* */\n2097152;\nvar RetryLanes =\n/* */\n130023424;\nvar RetryLane1 =\n/* */\n4194304;\nvar RetryLane2 =\n/* */\n8388608;\nvar RetryLane3 =\n/* */\n16777216;\nvar RetryLane4 =\n/* */\n33554432;\nvar RetryLane5 =\n/* */\n67108864;\nvar SomeRetryLane = RetryLane1;\nvar SelectiveHydrationLane =\n/* */\n134217728;\nvar NonIdleLanes =\n/* */\n268435455;\nvar IdleHydrationLane =\n/* */\n268435456;\nvar IdleLane =\n/* */\n536870912;\nvar OffscreenLane =\n/* */\n1073741824; // This function is used for the experimental timeline (react-devtools-timeline)\n// It should be kept in sync with the Lanes values above.\n\nfunction getLabelForLane(lane) {\n {\n if (lane & SyncLane) {\n return 'Sync';\n }\n\n if (lane & InputContinuousHydrationLane) {\n return 'InputContinuousHydration';\n }\n\n if (lane & InputContinuousLane) {\n return 'InputContinuous';\n }\n\n if (lane & DefaultHydrationLane) {\n return 'DefaultHydration';\n }\n\n if (lane & DefaultLane) {\n return 'Default';\n }\n\n if (lane & TransitionHydrationLane) {\n return 'TransitionHydration';\n }\n\n if (lane & TransitionLanes) {\n return 'Transition';\n }\n\n if (lane & RetryLanes) {\n return 'Retry';\n }\n\n if (lane & SelectiveHydrationLane) {\n return 'SelectiveHydration';\n }\n\n if (lane & IdleHydrationLane) {\n return 'IdleHydration';\n }\n\n if (lane & IdleLane) {\n return 'Idle';\n }\n\n if (lane & OffscreenLane) {\n return 'Offscreen';\n }\n }\n}\nvar NoTimestamp = -1;\nvar nextTransitionLane = TransitionLane1;\nvar nextRetryLane = RetryLane1;\n\nfunction getHighestPriorityLanes(lanes) {\n switch (getHighestPriorityLane(lanes)) {\n case SyncLane:\n return SyncLane;\n\n case InputContinuousHydrationLane:\n return InputContinuousHydrationLane;\n\n case InputContinuousLane:\n return InputContinuousLane;\n\n case DefaultHydrationLane:\n return DefaultHydrationLane;\n\n case DefaultLane:\n return DefaultLane;\n\n case TransitionHydrationLane:\n return TransitionHydrationLane;\n\n case TransitionLane1:\n case TransitionLane2:\n case TransitionLane3:\n case TransitionLane4:\n case TransitionLane5:\n case TransitionLane6:\n case TransitionLane7:\n case TransitionLane8:\n case TransitionLane9:\n case TransitionLane10:\n case TransitionLane11:\n case TransitionLane12:\n case TransitionLane13:\n case TransitionLane14:\n case TransitionLane15:\n case TransitionLane16:\n return lanes & TransitionLanes;\n\n case RetryLane1:\n case RetryLane2:\n case RetryLane3:\n case RetryLane4:\n case RetryLane5:\n return lanes & RetryLanes;\n\n case SelectiveHydrationLane:\n return SelectiveHydrationLane;\n\n case IdleHydrationLane:\n return IdleHydrationLane;\n\n case IdleLane:\n return IdleLane;\n\n case OffscreenLane:\n return OffscreenLane;\n\n default:\n {\n error('Should have found matching lanes. This is a bug in React.');\n } // This shouldn't be reachable, but as a fallback, return the entire bitmask.\n\n\n return lanes;\n }\n}\n\nfunction getNextLanes(root, wipLanes) {\n // Early bailout if there's no pending work left.\n var pendingLanes = root.pendingLanes;\n\n if (pendingLanes === NoLanes) {\n return NoLanes;\n }\n\n var nextLanes = NoLanes;\n var suspendedLanes = root.suspendedLanes;\n var pingedLanes = root.pingedLanes; // Do not work on any idle work until all the non-idle work has finished,\n // even if the work is suspended.\n\n var nonIdlePendingLanes = pendingLanes & NonIdleLanes;\n\n if (nonIdlePendingLanes !== NoLanes) {\n var nonIdleUnblockedLanes = nonIdlePendingLanes & ~suspendedLanes;\n\n if (nonIdleUnblockedLanes !== NoLanes) {\n nextLanes = getHighestPriorityLanes(nonIdleUnblockedLanes);\n } else {\n var nonIdlePingedLanes = nonIdlePendingLanes & pingedLanes;\n\n if (nonIdlePingedLanes !== NoLanes) {\n nextLanes = getHighestPriorityLanes(nonIdlePingedLanes);\n }\n }\n } else {\n // The only remaining work is Idle.\n var unblockedLanes = pendingLanes & ~suspendedLanes;\n\n if (unblockedLanes !== NoLanes) {\n nextLanes = getHighestPriorityLanes(unblockedLanes);\n } else {\n if (pingedLanes !== NoLanes) {\n nextLanes = getHighestPriorityLanes(pingedLanes);\n }\n }\n }\n\n if (nextLanes === NoLanes) {\n // This should only be reachable if we're suspended\n // TODO: Consider warning in this path if a fallback timer is not scheduled.\n return NoLanes;\n } // If we're already in the middle of a render, switching lanes will interrupt\n // it and we'll lose our progress. We should only do this if the new lanes are\n // higher priority.\n\n\n if (wipLanes !== NoLanes && wipLanes !== nextLanes && // If we already suspended with a delay, then interrupting is fine. Don't\n // bother waiting until the root is complete.\n (wipLanes & suspendedLanes) === NoLanes) {\n var nextLane = getHighestPriorityLane(nextLanes);\n var wipLane = getHighestPriorityLane(wipLanes);\n\n if ( // Tests whether the next lane is equal or lower priority than the wip\n // one. This works because the bits decrease in priority as you go left.\n nextLane >= wipLane || // Default priority updates should not interrupt transition updates. The\n // only difference between default updates and transition updates is that\n // default updates do not support refresh transitions.\n nextLane === DefaultLane && (wipLane & TransitionLanes) !== NoLanes) {\n // Keep working on the existing in-progress tree. Do not interrupt.\n return wipLanes;\n }\n }\n\n if ((nextLanes & InputContinuousLane) !== NoLanes) {\n // When updates are sync by default, we entangle continuous priority updates\n // and default updates, so they render in the same batch. The only reason\n // they use separate lanes is because continuous updates should interrupt\n // transitions, but default updates should not.\n nextLanes |= pendingLanes & DefaultLane;\n } // Check for entangled lanes and add them to the batch.\n //\n // A lane is said to be entangled with another when it's not allowed to render\n // in a batch that does not also include the other lane. Typically we do this\n // when multiple updates have the same source, and we only want to respond to\n // the most recent event from that source.\n //\n // Note that we apply entanglements *after* checking for partial work above.\n // This means that if a lane is entangled during an interleaved event while\n // it's already rendering, we won't interrupt it. This is intentional, since\n // entanglement is usually \"best effort\": we'll try our best to render the\n // lanes in the same batch, but it's not worth throwing out partially\n // completed work in order to do it.\n // TODO: Reconsider this. The counter-argument is that the partial work\n // represents an intermediate state, which we don't want to show to the user.\n // And by spending extra time finishing it, we're increasing the amount of\n // time it takes to show the final state, which is what they are actually\n // waiting for.\n //\n // For those exceptions where entanglement is semantically important, like\n // useMutableSource, we should ensure that there is no partial work at the\n // time we apply the entanglement.\n\n\n var entangledLanes = root.entangledLanes;\n\n if (entangledLanes !== NoLanes) {\n var entanglements = root.entanglements;\n var lanes = nextLanes & entangledLanes;\n\n while (lanes > 0) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n nextLanes |= entanglements[index];\n lanes &= ~lane;\n }\n }\n\n return nextLanes;\n}\nfunction getMostRecentEventTime(root, lanes) {\n var eventTimes = root.eventTimes;\n var mostRecentEventTime = NoTimestamp;\n\n while (lanes > 0) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n var eventTime = eventTimes[index];\n\n if (eventTime > mostRecentEventTime) {\n mostRecentEventTime = eventTime;\n }\n\n lanes &= ~lane;\n }\n\n return mostRecentEventTime;\n}\n\nfunction computeExpirationTime(lane, currentTime) {\n switch (lane) {\n case SyncLane:\n case InputContinuousHydrationLane:\n case InputContinuousLane:\n // User interactions should expire slightly more quickly.\n //\n // NOTE: This is set to the corresponding constant as in Scheduler.js.\n // When we made it larger, a product metric in www regressed, suggesting\n // there's a user interaction that's being starved by a series of\n // synchronous updates. If that theory is correct, the proper solution is\n // to fix the starvation. However, this scenario supports the idea that\n // expiration times are an important safeguard when starvation\n // does happen.\n return currentTime + 250;\n\n case DefaultHydrationLane:\n case DefaultLane:\n case TransitionHydrationLane:\n case TransitionLane1:\n case TransitionLane2:\n case TransitionLane3:\n case TransitionLane4:\n case TransitionLane5:\n case TransitionLane6:\n case TransitionLane7:\n case TransitionLane8:\n case TransitionLane9:\n case TransitionLane10:\n case TransitionLane11:\n case TransitionLane12:\n case TransitionLane13:\n case TransitionLane14:\n case TransitionLane15:\n case TransitionLane16:\n return currentTime + 5000;\n\n case RetryLane1:\n case RetryLane2:\n case RetryLane3:\n case RetryLane4:\n case RetryLane5:\n // TODO: Retries should be allowed to expire if they are CPU bound for\n // too long, but when I made this change it caused a spike in browser\n // crashes. There must be some other underlying bug; not super urgent but\n // ideally should figure out why and fix it. Unfortunately we don't have\n // a repro for the crashes, only detected via production metrics.\n return NoTimestamp;\n\n case SelectiveHydrationLane:\n case IdleHydrationLane:\n case IdleLane:\n case OffscreenLane:\n // Anything idle priority or lower should never expire.\n return NoTimestamp;\n\n default:\n {\n error('Should have found matching lanes. This is a bug in React.');\n }\n\n return NoTimestamp;\n }\n}\n\nfunction markStarvedLanesAsExpired(root, currentTime) {\n // TODO: This gets called every time we yield. We can optimize by storing\n // the earliest expiration time on the root. Then use that to quickly bail out\n // of this function.\n var pendingLanes = root.pendingLanes;\n var suspendedLanes = root.suspendedLanes;\n var pingedLanes = root.pingedLanes;\n var expirationTimes = root.expirationTimes; // Iterate through the pending lanes and check if we've reached their\n // expiration time. If so, we'll assume the update is being starved and mark\n // it as expired to force it to finish.\n\n var lanes = pendingLanes;\n\n while (lanes > 0) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n var expirationTime = expirationTimes[index];\n\n if (expirationTime === NoTimestamp) {\n // Found a pending lane with no expiration time. If it's not suspended, or\n // if it's pinged, assume it's CPU-bound. Compute a new expiration time\n // using the current time.\n if ((lane & suspendedLanes) === NoLanes || (lane & pingedLanes) !== NoLanes) {\n // Assumes timestamps are monotonically increasing.\n expirationTimes[index] = computeExpirationTime(lane, currentTime);\n }\n } else if (expirationTime <= currentTime) {\n // This lane expired\n root.expiredLanes |= lane;\n }\n\n lanes &= ~lane;\n }\n} // This returns the highest priority pending lanes regardless of whether they\n// are suspended.\n\nfunction getHighestPriorityPendingLanes(root) {\n return getHighestPriorityLanes(root.pendingLanes);\n}\nfunction getLanesToRetrySynchronouslyOnError(root) {\n var everythingButOffscreen = root.pendingLanes & ~OffscreenLane;\n\n if (everythingButOffscreen !== NoLanes) {\n return everythingButOffscreen;\n }\n\n if (everythingButOffscreen & OffscreenLane) {\n return OffscreenLane;\n }\n\n return NoLanes;\n}\nfunction includesSyncLane(lanes) {\n return (lanes & SyncLane) !== NoLanes;\n}\nfunction includesNonIdleWork(lanes) {\n return (lanes & NonIdleLanes) !== NoLanes;\n}\nfunction includesOnlyRetries(lanes) {\n return (lanes & RetryLanes) === lanes;\n}\nfunction includesOnlyNonUrgentLanes(lanes) {\n var UrgentLanes = SyncLane | InputContinuousLane | DefaultLane;\n return (lanes & UrgentLanes) === NoLanes;\n}\nfunction includesOnlyTransitions(lanes) {\n return (lanes & TransitionLanes) === lanes;\n}\nfunction includesBlockingLane(root, lanes) {\n\n var SyncDefaultLanes = InputContinuousHydrationLane | InputContinuousLane | DefaultHydrationLane | DefaultLane;\n return (lanes & SyncDefaultLanes) !== NoLanes;\n}\nfunction includesExpiredLane(root, lanes) {\n // This is a separate check from includesBlockingLane because a lane can\n // expire after a render has already started.\n return (lanes & root.expiredLanes) !== NoLanes;\n}\nfunction isTransitionLane(lane) {\n return (lane & TransitionLanes) !== NoLanes;\n}\nfunction claimNextTransitionLane() {\n // Cycle through the lanes, assigning each new transition to the next lane.\n // In most cases, this means every transition gets its own lane, until we\n // run out of lanes and cycle back to the beginning.\n var lane = nextTransitionLane;\n nextTransitionLane <<= 1;\n\n if ((nextTransitionLane & TransitionLanes) === NoLanes) {\n nextTransitionLane = TransitionLane1;\n }\n\n return lane;\n}\nfunction claimNextRetryLane() {\n var lane = nextRetryLane;\n nextRetryLane <<= 1;\n\n if ((nextRetryLane & RetryLanes) === NoLanes) {\n nextRetryLane = RetryLane1;\n }\n\n return lane;\n}\nfunction getHighestPriorityLane(lanes) {\n return lanes & -lanes;\n}\nfunction pickArbitraryLane(lanes) {\n // This wrapper function gets inlined. Only exists so to communicate that it\n // doesn't matter which bit is selected; you can pick any bit without\n // affecting the algorithms where its used. Here I'm using\n // getHighestPriorityLane because it requires the fewest operations.\n return getHighestPriorityLane(lanes);\n}\n\nfunction pickArbitraryLaneIndex(lanes) {\n return 31 - clz32(lanes);\n}\n\nfunction laneToIndex(lane) {\n return pickArbitraryLaneIndex(lane);\n}\n\nfunction includesSomeLane(a, b) {\n return (a & b) !== NoLanes;\n}\nfunction isSubsetOfLanes(set, subset) {\n return (set & subset) === subset;\n}\nfunction mergeLanes(a, b) {\n return a | b;\n}\nfunction removeLanes(set, subset) {\n return set & ~subset;\n}\nfunction intersectLanes(a, b) {\n return a & b;\n} // Seems redundant, but it changes the type from a single lane (used for\n// updates) to a group of lanes (used for flushing work).\n\nfunction laneToLanes(lane) {\n return lane;\n}\nfunction higherPriorityLane(a, b) {\n // This works because the bit ranges decrease in priority as you go left.\n return a !== NoLane && a < b ? a : b;\n}\nfunction createLaneMap(initial) {\n // Intentionally pushing one by one.\n // https://v8.dev/blog/elements-kinds#avoid-creating-holes\n var laneMap = [];\n\n for (var i = 0; i < TotalLanes; i++) {\n laneMap.push(initial);\n }\n\n return laneMap;\n}\nfunction markRootUpdated(root, updateLane, eventTime) {\n root.pendingLanes |= updateLane; // If there are any suspended transitions, it's possible this new update\n // could unblock them. Clear the suspended lanes so that we can try rendering\n // them again.\n //\n // TODO: We really only need to unsuspend only lanes that are in the\n // `subtreeLanes` of the updated fiber, or the update lanes of the return\n // path. This would exclude suspended updates in an unrelated sibling tree,\n // since there's no way for this update to unblock it.\n //\n // We don't do this if the incoming update is idle, because we never process\n // idle updates until after all the regular updates have finished; there's no\n // way it could unblock a transition.\n\n if (updateLane !== IdleLane) {\n root.suspendedLanes = NoLanes;\n root.pingedLanes = NoLanes;\n }\n\n var eventTimes = root.eventTimes;\n var index = laneToIndex(updateLane); // We can always overwrite an existing timestamp because we prefer the most\n // recent event, and we assume time is monotonically increasing.\n\n eventTimes[index] = eventTime;\n}\nfunction markRootSuspended(root, suspendedLanes) {\n root.suspendedLanes |= suspendedLanes;\n root.pingedLanes &= ~suspendedLanes; // The suspended lanes are no longer CPU-bound. Clear their expiration times.\n\n var expirationTimes = root.expirationTimes;\n var lanes = suspendedLanes;\n\n while (lanes > 0) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n expirationTimes[index] = NoTimestamp;\n lanes &= ~lane;\n }\n}\nfunction markRootPinged(root, pingedLanes, eventTime) {\n root.pingedLanes |= root.suspendedLanes & pingedLanes;\n}\nfunction markRootFinished(root, remainingLanes) {\n var noLongerPendingLanes = root.pendingLanes & ~remainingLanes;\n root.pendingLanes = remainingLanes; // Let's try everything again\n\n root.suspendedLanes = NoLanes;\n root.pingedLanes = NoLanes;\n root.expiredLanes &= remainingLanes;\n root.mutableReadLanes &= remainingLanes;\n root.entangledLanes &= remainingLanes;\n var entanglements = root.entanglements;\n var eventTimes = root.eventTimes;\n var expirationTimes = root.expirationTimes; // Clear the lanes that no longer have pending work\n\n var lanes = noLongerPendingLanes;\n\n while (lanes > 0) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n entanglements[index] = NoLanes;\n eventTimes[index] = NoTimestamp;\n expirationTimes[index] = NoTimestamp;\n lanes &= ~lane;\n }\n}\nfunction markRootEntangled(root, entangledLanes) {\n // In addition to entangling each of the given lanes with each other, we also\n // have to consider _transitive_ entanglements. For each lane that is already\n // entangled with *any* of the given lanes, that lane is now transitively\n // entangled with *all* the given lanes.\n //\n // Translated: If C is entangled with A, then entangling A with B also\n // entangles C with B.\n //\n // If this is hard to grasp, it might help to intentionally break this\n // function and look at the tests that fail in ReactTransition-test.js. Try\n // commenting out one of the conditions below.\n var rootEntangledLanes = root.entangledLanes |= entangledLanes;\n var entanglements = root.entanglements;\n var lanes = rootEntangledLanes;\n\n while (lanes) {\n var index = pickArbitraryLaneIndex(lanes);\n var lane = 1 << index;\n\n if ( // Is this one of the newly entangled lanes?\n lane & entangledLanes | // Is this lane transitively entangled with the newly entangled lanes?\n entanglements[index] & entangledLanes) {\n entanglements[index] |= entangledLanes;\n }\n\n lanes &= ~lane;\n }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n var renderLane = getHighestPriorityLane(renderLanes);\n var lane;\n\n switch (renderLane) {\n case InputContinuousLane:\n lane = InputContinuousHydrationLane;\n break;\n\n case DefaultLane:\n lane = DefaultHydrationLane;\n break;\n\n case TransitionLane1:\n case TransitionLane2:\n case TransitionLane3:\n case TransitionLane4:\n case TransitionLane5:\n case TransitionLane6:\n case TransitionLane7:\n case TransitionLane8:\n case TransitionLane9:\n case TransitionLane10:\n case TransitionLane11:\n case TransitionLane12:\n case TransitionLane13:\n case TransitionLane14:\n case TransitionLane15:\n case TransitionLane16:\n case RetryLane1:\n case RetryLane2:\n case RetryLane3:\n case RetryLane4:\n case RetryLane5:\n lane = TransitionHydrationLane;\n break;\n\n case IdleLane:\n lane = IdleHydrationLane;\n break;\n\n default:\n // Everything else is already either a hydration lane, or shouldn't\n // be retried at a hydration lane.\n lane = NoLane;\n break;\n } // Check if the lane we chose is suspended. If so, that indicates that we\n // already attempted and failed to hydrate at that level. Also check if we're\n // already rendering that lane, which is rare but could happen.\n\n\n if ((lane & (root.suspendedLanes | renderLanes)) !== NoLane) {\n // Give up trying to hydrate and fall back to client render.\n return NoLane;\n }\n\n return lane;\n}\nfunction addFiberToLanesMap(root, fiber, lanes) {\n\n if (!isDevToolsPresent) {\n return;\n }\n\n var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap;\n\n while (lanes > 0) {\n var index = laneToIndex(lanes);\n var lane = 1 << index;\n var updaters = pendingUpdatersLaneMap[index];\n updaters.add(fiber);\n lanes &= ~lane;\n }\n}\nfunction movePendingFibersToMemoized(root, lanes) {\n\n if (!isDevToolsPresent) {\n return;\n }\n\n var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap;\n var memoizedUpdaters = root.memoizedUpdaters;\n\n while (lanes > 0) {\n var index = laneToIndex(lanes);\n var lane = 1 << index;\n var updaters = pendingUpdatersLaneMap[index];\n\n if (updaters.size > 0) {\n updaters.forEach(function (fiber) {\n var alternate = fiber.alternate;\n\n if (alternate === null || !memoizedUpdaters.has(alternate)) {\n memoizedUpdaters.add(fiber);\n }\n });\n updaters.clear();\n }\n\n lanes &= ~lane;\n }\n}\nfunction getTransitionsForLanes(root, lanes) {\n {\n return null;\n }\n}\n\nvar DiscreteEventPriority = SyncLane;\nvar ContinuousEventPriority = InputContinuousLane;\nvar DefaultEventPriority = DefaultLane;\nvar IdleEventPriority = IdleLane;\nvar currentUpdatePriority = NoLane;\nfunction getCurrentUpdatePriority() {\n return currentUpdatePriority;\n}\nfunction setCurrentUpdatePriority(newPriority) {\n currentUpdatePriority = newPriority;\n}\nfunction runWithPriority(priority, fn) {\n var previousPriority = currentUpdatePriority;\n\n try {\n currentUpdatePriority = priority;\n return fn();\n } finally {\n currentUpdatePriority = previousPriority;\n }\n}\nfunction higherEventPriority(a, b) {\n return a !== 0 && a < b ? a : b;\n}\nfunction lowerEventPriority(a, b) {\n return a === 0 || a > b ? a : b;\n}\nfunction isHigherEventPriority(a, b) {\n return a !== 0 && a < b;\n}\nfunction lanesToEventPriority(lanes) {\n var lane = getHighestPriorityLane(lanes);\n\n if (!isHigherEventPriority(DiscreteEventPriority, lane)) {\n return DiscreteEventPriority;\n }\n\n if (!isHigherEventPriority(ContinuousEventPriority, lane)) {\n return ContinuousEventPriority;\n }\n\n if (includesNonIdleWork(lane)) {\n return DefaultEventPriority;\n }\n\n return IdleEventPriority;\n}\n\n// This is imported by the event replaying implementation in React DOM. It's\n// in a separate file to break a circular dependency between the renderer and\n// the reconciler.\nfunction isRootDehydrated(root) {\n var currentState = root.current.memoizedState;\n return currentState.isDehydrated;\n}\n\nvar _attemptSynchronousHydration;\n\nfunction setAttemptSynchronousHydration(fn) {\n _attemptSynchronousHydration = fn;\n}\nfunction attemptSynchronousHydration(fiber) {\n _attemptSynchronousHydration(fiber);\n}\nvar attemptContinuousHydration;\nfunction setAttemptContinuousHydration(fn) {\n attemptContinuousHydration = fn;\n}\nvar attemptHydrationAtCurrentPriority;\nfunction setAttemptHydrationAtCurrentPriority(fn) {\n attemptHydrationAtCurrentPriority = fn;\n}\nvar getCurrentUpdatePriority$1;\nfunction setGetCurrentUpdatePriority(fn) {\n getCurrentUpdatePriority$1 = fn;\n}\nvar attemptHydrationAtPriority;\nfunction setAttemptHydrationAtPriority(fn) {\n attemptHydrationAtPriority = fn;\n} // TODO: Upgrade this definition once we're on a newer version of Flow that\n// has this definition built-in.\n\nvar hasScheduledReplayAttempt = false; // The queue of discrete events to be replayed.\n\nvar queuedDiscreteEvents = []; // Indicates if any continuous event targets are non-null for early bailout.\n// if the last target was dehydrated.\n\nvar queuedFocus = null;\nvar queuedDrag = null;\nvar queuedMouse = null; // For pointer events there can be one latest event per pointerId.\n\nvar queuedPointers = new Map();\nvar queuedPointerCaptures = new Map(); // We could consider replaying selectionchange and touchmoves too.\n\nvar queuedExplicitHydrationTargets = [];\nvar discreteReplayableEvents = ['mousedown', 'mouseup', 'touchcancel', 'touchend', 'touchstart', 'auxclick', 'dblclick', 'pointercancel', 'pointerdown', 'pointerup', 'dragend', 'dragstart', 'drop', 'compositionend', 'compositionstart', 'keydown', 'keypress', 'keyup', 'input', 'textInput', // Intentionally camelCase\n'copy', 'cut', 'paste', 'click', 'change', 'contextmenu', 'reset', 'submit'];\nfunction isDiscreteEventThatRequiresHydration(eventType) {\n return discreteReplayableEvents.indexOf(eventType) > -1;\n}\n\nfunction createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n return {\n blockedOn: blockedOn,\n domEventName: domEventName,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetContainers: [targetContainer]\n };\n}\n\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n switch (domEventName) {\n case 'focusin':\n case 'focusout':\n queuedFocus = null;\n break;\n\n case 'dragenter':\n case 'dragleave':\n queuedDrag = null;\n break;\n\n case 'mouseover':\n case 'mouseout':\n queuedMouse = null;\n break;\n\n case 'pointerover':\n case 'pointerout':\n {\n var pointerId = nativeEvent.pointerId;\n queuedPointers.delete(pointerId);\n break;\n }\n\n case 'gotpointercapture':\n case 'lostpointercapture':\n {\n var _pointerId = nativeEvent.pointerId;\n queuedPointerCaptures.delete(_pointerId);\n break;\n }\n }\n}\n\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n if (existingQueuedEvent === null || existingQueuedEvent.nativeEvent !== nativeEvent) {\n var queuedEvent = createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent);\n\n if (blockedOn !== null) {\n var _fiber2 = getInstanceFromNode(blockedOn);\n\n if (_fiber2 !== null) {\n // Attempt to increase the priority of this target.\n attemptContinuousHydration(_fiber2);\n }\n }\n\n return queuedEvent;\n } // If we have already queued this exact event, then it's because\n // the different event systems have different DOM event listeners.\n // We can accumulate the flags, and the targetContainers, and\n // store a single event to be replayed.\n\n\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n var targetContainers = existingQueuedEvent.targetContainers;\n\n if (targetContainer !== null && targetContainers.indexOf(targetContainer) === -1) {\n targetContainers.push(targetContainer);\n }\n\n return existingQueuedEvent;\n}\n\nfunction queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n // These set relatedTarget to null because the replayed event will be treated as if we\n // moved from outside the window (no target) onto the target once it hydrates.\n // Instead of mutating we could clone the event.\n switch (domEventName) {\n case 'focusin':\n {\n var focusEvent = nativeEvent;\n queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(queuedFocus, blockedOn, domEventName, eventSystemFlags, targetContainer, focusEvent);\n return true;\n }\n\n case 'dragenter':\n {\n var dragEvent = nativeEvent;\n queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(queuedDrag, blockedOn, domEventName, eventSystemFlags, targetContainer, dragEvent);\n return true;\n }\n\n case 'mouseover':\n {\n var mouseEvent = nativeEvent;\n queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(queuedMouse, blockedOn, domEventName, eventSystemFlags, targetContainer, mouseEvent);\n return true;\n }\n\n case 'pointerover':\n {\n var pointerEvent = nativeEvent;\n var pointerId = pointerEvent.pointerId;\n queuedPointers.set(pointerId, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointers.get(pointerId) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, pointerEvent));\n return true;\n }\n\n case 'gotpointercapture':\n {\n var _pointerEvent = nativeEvent;\n var _pointerId2 = _pointerEvent.pointerId;\n queuedPointerCaptures.set(_pointerId2, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointerCaptures.get(_pointerId2) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, _pointerEvent));\n return true;\n }\n }\n\n return false;\n} // Check if this target is unblocked. Returns true if it's unblocked.\n\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n // TODO: This function shares a lot of logic with findInstanceBlockingEvent.\n // Try to unify them. It's a bit tricky since it would require two return\n // values.\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n\n if (targetInst !== null) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n\n if (nearestMounted !== null) {\n var tag = nearestMounted.tag;\n\n if (tag === SuspenseComponent) {\n var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n if (instance !== null) {\n // We're blocked on hydrating this boundary.\n // Increase its priority.\n queuedTarget.blockedOn = instance;\n attemptHydrationAtPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (tag === HostRoot) {\n var root = nearestMounted.stateNode;\n\n if (isRootDehydrated(root)) {\n queuedTarget.blockedOn = getContainerFromFiber(nearestMounted); // We don't currently have a way to increase the priority of\n // a root other than sync.\n\n return;\n }\n }\n }\n }\n\n queuedTarget.blockedOn = null;\n}\n\nfunction queueExplicitHydrationTarget(target) {\n // TODO: This will read the priority if it's dispatched by the React\n // event system but not native events. Should read window.event.type, like\n // we do for updates (getCurrentEventPriority).\n var updatePriority = getCurrentUpdatePriority$1();\n var queuedTarget = {\n blockedOn: null,\n target: target,\n priority: updatePriority\n };\n var i = 0;\n\n for (; i < queuedExplicitHydrationTargets.length; i++) {\n // Stop once we hit the first target with lower priority than\n if (!isHigherEventPriority(updatePriority, queuedExplicitHydrationTargets[i].priority)) {\n break;\n }\n }\n\n queuedExplicitHydrationTargets.splice(i, 0, queuedTarget);\n\n if (i === 0) {\n attemptExplicitHydrationTarget(queuedTarget);\n }\n}\n\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (queuedEvent.blockedOn !== null) {\n return false;\n }\n\n var targetContainers = queuedEvent.targetContainers;\n\n while (targetContainers.length > 0) {\n var targetContainer = targetContainers[0];\n var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.domEventName, queuedEvent.eventSystemFlags, targetContainer, queuedEvent.nativeEvent);\n\n if (nextBlockedOn === null) {\n {\n var nativeEvent = queuedEvent.nativeEvent;\n var nativeEventClone = new nativeEvent.constructor(nativeEvent.type, nativeEvent);\n setReplayingEvent(nativeEventClone);\n nativeEvent.target.dispatchEvent(nativeEventClone);\n resetReplayingEvent();\n }\n } else {\n // We're still blocked. Try again later.\n var _fiber3 = getInstanceFromNode(nextBlockedOn);\n\n if (_fiber3 !== null) {\n attemptContinuousHydration(_fiber3);\n }\n\n queuedEvent.blockedOn = nextBlockedOn;\n return false;\n } // This target container was successfully dispatched. Try the next.\n\n\n targetContainers.shift();\n }\n\n return true;\n}\n\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n if (attemptReplayContinuousQueuedEvent(queuedEvent)) {\n map.delete(key);\n }\n}\n\nfunction replayUnblockedEvents() {\n hasScheduledReplayAttempt = false;\n\n\n if (queuedFocus !== null && attemptReplayContinuousQueuedEvent(queuedFocus)) {\n queuedFocus = null;\n }\n\n if (queuedDrag !== null && attemptReplayContinuousQueuedEvent(queuedDrag)) {\n queuedDrag = null;\n }\n\n if (queuedMouse !== null && attemptReplayContinuousQueuedEvent(queuedMouse)) {\n queuedMouse = null;\n }\n\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\n\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n if (queuedEvent.blockedOn === unblocked) {\n queuedEvent.blockedOn = null;\n\n if (!hasScheduledReplayAttempt) {\n hasScheduledReplayAttempt = true; // Schedule a callback to attempt replaying as many events as are\n // now unblocked. This first might not actually be unblocked yet.\n // We could check it early to avoid scheduling an unnecessary callback.\n\n Scheduler.unstable_scheduleCallback(Scheduler.unstable_NormalPriority, replayUnblockedEvents);\n }\n }\n}\n\nfunction retryIfBlockedOn(unblocked) {\n // Mark anything that was blocked on this as no longer blocked\n // and eligible for a replay.\n if (queuedDiscreteEvents.length > 0) {\n scheduleCallbackIfUnblocked(queuedDiscreteEvents[0], unblocked); // This is a exponential search for each boundary that commits. I think it's\n // worth it because we expect very few discrete events to queue up and once\n // we are actually fully unblocked it will be fast to replay them.\n\n for (var i = 1; i < queuedDiscreteEvents.length; i++) {\n var queuedEvent = queuedDiscreteEvents[i];\n\n if (queuedEvent.blockedOn === unblocked) {\n queuedEvent.blockedOn = null;\n }\n }\n }\n\n if (queuedFocus !== null) {\n scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n }\n\n if (queuedDrag !== null) {\n scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n }\n\n if (queuedMouse !== null) {\n scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n }\n\n var unblock = function (queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n };\n\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n\n for (var _i = 0; _i < queuedExplicitHydrationTargets.length; _i++) {\n var queuedTarget = queuedExplicitHydrationTargets[_i];\n\n if (queuedTarget.blockedOn === unblocked) {\n queuedTarget.blockedOn = null;\n }\n }\n\n while (queuedExplicitHydrationTargets.length > 0) {\n var nextExplicitTarget = queuedExplicitHydrationTargets[0];\n\n if (nextExplicitTarget.blockedOn !== null) {\n // We're still blocked.\n break;\n } else {\n attemptExplicitHydrationTarget(nextExplicitTarget);\n\n if (nextExplicitTarget.blockedOn === null) {\n // We're unblocked.\n queuedExplicitHydrationTargets.shift();\n }\n }\n }\n}\n\nvar ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig; // TODO: can we stop exporting these?\n\nvar _enabled = true; // This is exported in FB builds for use by legacy FB layer infra.\n// We'd like to remove this but it's not clear if this is safe.\n\nfunction setEnabled(enabled) {\n _enabled = !!enabled;\n}\nfunction isEnabled() {\n return _enabled;\n}\nfunction createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags) {\n var eventPriority = getEventPriority(domEventName);\n var listenerWrapper;\n\n switch (eventPriority) {\n case DiscreteEventPriority:\n listenerWrapper = dispatchDiscreteEvent;\n break;\n\n case ContinuousEventPriority:\n listenerWrapper = dispatchContinuousEvent;\n break;\n\n case DefaultEventPriority:\n default:\n listenerWrapper = dispatchEvent;\n break;\n }\n\n return listenerWrapper.bind(null, domEventName, eventSystemFlags, targetContainer);\n}\n\nfunction dispatchDiscreteEvent(domEventName, eventSystemFlags, container, nativeEvent) {\n var previousPriority = getCurrentUpdatePriority();\n var prevTransition = ReactCurrentBatchConfig.transition;\n ReactCurrentBatchConfig.transition = null;\n\n try {\n setCurrentUpdatePriority(DiscreteEventPriority);\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig.transition = prevTransition;\n }\n}\n\nfunction dispatchContinuousEvent(domEventName, eventSystemFlags, container, nativeEvent) {\n var previousPriority = getCurrentUpdatePriority();\n var prevTransition = ReactCurrentBatchConfig.transition;\n ReactCurrentBatchConfig.transition = null;\n\n try {\n setCurrentUpdatePriority(ContinuousEventPriority);\n dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n } finally {\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig.transition = prevTransition;\n }\n}\n\nfunction dispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n if (!_enabled) {\n return;\n }\n\n {\n dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay(domEventName, eventSystemFlags, targetContainer, nativeEvent);\n }\n}\n\nfunction dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay(domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n var blockedOn = findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent);\n\n if (blockedOn === null) {\n dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, return_targetInst, targetContainer);\n clearIfContinuousEvent(domEventName, nativeEvent);\n return;\n }\n\n if (queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent)) {\n nativeEvent.stopPropagation();\n return;\n } // We need to clear only if we didn't queue because\n // queueing is accumulative.\n\n\n clearIfContinuousEvent(domEventName, nativeEvent);\n\n if (eventSystemFlags & IS_CAPTURE_PHASE && isDiscreteEventThatRequiresHydration(domEventName)) {\n while (blockedOn !== null) {\n var fiber = getInstanceFromNode(blockedOn);\n\n if (fiber !== null) {\n attemptSynchronousHydration(fiber);\n }\n\n var nextBlockedOn = findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent);\n\n if (nextBlockedOn === null) {\n dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, return_targetInst, targetContainer);\n }\n\n if (nextBlockedOn === blockedOn) {\n break;\n }\n\n blockedOn = nextBlockedOn;\n }\n\n if (blockedOn !== null) {\n nativeEvent.stopPropagation();\n }\n\n return;\n } // This is not replayable so we'll invoke it but without a target,\n // in case the event system needs to trace it.\n\n\n dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, null, targetContainer);\n}\n\nvar return_targetInst = null; // Returns a SuspenseInstance or Container if it's blocked.\n// The return_targetInst field above is conceptually part of the return value.\n\nfunction findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) {\n // TODO: Warn if _enabled is false.\n return_targetInst = null;\n var nativeEventTarget = getEventTarget(nativeEvent);\n var targetInst = getClosestInstanceFromNode(nativeEventTarget);\n\n if (targetInst !== null) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n\n if (nearestMounted === null) {\n // This tree has been unmounted already. Dispatch without a target.\n targetInst = null;\n } else {\n var tag = nearestMounted.tag;\n\n if (tag === SuspenseComponent) {\n var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n if (instance !== null) {\n // Queue the event to be replayed later. Abort dispatching since we\n // don't want this event dispatched twice through the event system.\n // TODO: If this is the first discrete event in the queue. Schedule an increased\n // priority for this boundary.\n return instance;\n } // This shouldn't happen, something went wrong but to avoid blocking\n // the whole system, dispatch the event without a target.\n // TODO: Warn.\n\n\n targetInst = null;\n } else if (tag === HostRoot) {\n var root = nearestMounted.stateNode;\n\n if (isRootDehydrated(root)) {\n // If this happens during a replay something went wrong and it might block\n // the whole system.\n return getContainerFromFiber(nearestMounted);\n }\n\n targetInst = null;\n } else if (nearestMounted !== targetInst) {\n // If we get an event (ex: img onload) before committing that\n // component's mount, ignore it for now (that is, treat it as if it was an\n // event on a non-React tree). We might also consider queueing events and\n // dispatching them after the mount.\n targetInst = null;\n }\n }\n }\n\n return_targetInst = targetInst; // We're not blocked on anything.\n\n return null;\n}\nfunction getEventPriority(domEventName) {\n switch (domEventName) {\n // Used by SimpleEventPlugin:\n case 'cancel':\n case 'click':\n case 'close':\n case 'contextmenu':\n case 'copy':\n case 'cut':\n case 'auxclick':\n case 'dblclick':\n case 'dragend':\n case 'dragstart':\n case 'drop':\n case 'focusin':\n case 'focusout':\n case 'input':\n case 'invalid':\n case 'keydown':\n case 'keypress':\n case 'keyup':\n case 'mousedown':\n case 'mouseup':\n case 'paste':\n case 'pause':\n case 'play':\n case 'pointercancel':\n case 'pointerdown':\n case 'pointerup':\n case 'ratechange':\n case 'reset':\n case 'resize':\n case 'seeked':\n case 'submit':\n case 'touchcancel':\n case 'touchend':\n case 'touchstart':\n case 'volumechange': // Used by polyfills:\n // eslint-disable-next-line no-fallthrough\n\n case 'change':\n case 'selectionchange':\n case 'textInput':\n case 'compositionstart':\n case 'compositionend':\n case 'compositionupdate': // Only enableCreateEventHandleAPI:\n // eslint-disable-next-line no-fallthrough\n\n case 'beforeblur':\n case 'afterblur': // Not used by React but could be by user code:\n // eslint-disable-next-line no-fallthrough\n\n case 'beforeinput':\n case 'blur':\n case 'fullscreenchange':\n case 'focus':\n case 'hashchange':\n case 'popstate':\n case 'select':\n case 'selectstart':\n return DiscreteEventPriority;\n\n case 'drag':\n case 'dragenter':\n case 'dragexit':\n case 'dragleave':\n case 'dragover':\n case 'mousemove':\n case 'mouseout':\n case 'mouseover':\n case 'pointermove':\n case 'pointerout':\n case 'pointerover':\n case 'scroll':\n case 'toggle':\n case 'touchmove':\n case 'wheel': // Not used by React but could be by user code:\n // eslint-disable-next-line no-fallthrough\n\n case 'mouseenter':\n case 'mouseleave':\n case 'pointerenter':\n case 'pointerleave':\n return ContinuousEventPriority;\n\n case 'message':\n {\n // We might be in the Scheduler callback.\n // Eventually this mechanism will be replaced by a check\n // of the current priority on the native scheduler.\n var schedulerPriority = getCurrentPriorityLevel();\n\n switch (schedulerPriority) {\n case ImmediatePriority:\n return DiscreteEventPriority;\n\n case UserBlockingPriority:\n return ContinuousEventPriority;\n\n case NormalPriority:\n case LowPriority:\n // TODO: Handle LowSchedulerPriority, somehow. Maybe the same lane as hydration.\n return DefaultEventPriority;\n\n case IdlePriority:\n return IdleEventPriority;\n\n default:\n return DefaultEventPriority;\n }\n }\n\n default:\n return DefaultEventPriority;\n }\n}\n\nfunction addEventBubbleListener(target, eventType, listener) {\n target.addEventListener(eventType, listener, false);\n return listener;\n}\nfunction addEventCaptureListener(target, eventType, listener) {\n target.addEventListener(eventType, listener, true);\n return listener;\n}\nfunction addEventCaptureListenerWithPassiveFlag(target, eventType, listener, passive) {\n target.addEventListener(eventType, listener, {\n capture: true,\n passive: passive\n });\n return listener;\n}\nfunction addEventBubbleListenerWithPassiveFlag(target, eventType, listener, passive) {\n target.addEventListener(eventType, listener, {\n passive: passive\n });\n return listener;\n}\n\n/**\n * These variables store information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n *\n */\nvar root = null;\nvar startText = null;\nvar fallbackText = null;\nfunction initialize(nativeEventTarget) {\n root = nativeEventTarget;\n startText = getText();\n return true;\n}\nfunction reset() {\n root = null;\n startText = null;\n fallbackText = null;\n}\nfunction getData() {\n if (fallbackText) {\n return fallbackText;\n }\n\n var start;\n var startValue = startText;\n var startLength = startValue.length;\n var end;\n var endValue = getText();\n var endLength = endValue.length;\n\n for (start = 0; start < startLength; start++) {\n if (startValue[start] !== endValue[start]) {\n break;\n }\n }\n\n var minEnd = startLength - start;\n\n for (end = 1; end <= minEnd; end++) {\n if (startValue[startLength - end] !== endValue[endLength - end]) {\n break;\n }\n }\n\n var sliceTail = end > 1 ? 1 - end : undefined;\n fallbackText = endValue.slice(start, sliceTail);\n return fallbackText;\n}\nfunction getText() {\n if ('value' in root) {\n return root.value;\n }\n\n return root.textContent;\n}\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n var charCode;\n var keyCode = nativeEvent.keyCode;\n\n if ('charCode' in nativeEvent) {\n charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n\n if (charCode === 0 && keyCode === 13) {\n charCode = 13;\n }\n } else {\n // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n charCode = keyCode;\n } // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux)\n // report Enter as charCode 10 when ctrl is pressed.\n\n\n if (charCode === 10) {\n charCode = 13;\n } // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n // Must not discard the (non-)printable Enter-key.\n\n\n if (charCode >= 32 || charCode === 13) {\n return charCode;\n }\n\n return 0;\n}\n\nfunction functionThatReturnsTrue() {\n return true;\n}\n\nfunction functionThatReturnsFalse() {\n return false;\n} // This is intentionally a factory so that we have different returned constructors.\n// If we had a single constructor, it would be megamorphic and engines would deopt.\n\n\nfunction createSyntheticEvent(Interface) {\n /**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n */\n function SyntheticBaseEvent(reactName, reactEventType, targetInst, nativeEvent, nativeEventTarget) {\n this._reactName = reactName;\n this._targetInst = targetInst;\n this.type = reactEventType;\n this.nativeEvent = nativeEvent;\n this.target = nativeEventTarget;\n this.currentTarget = null;\n\n for (var _propName in Interface) {\n if (!Interface.hasOwnProperty(_propName)) {\n continue;\n }\n\n var normalize = Interface[_propName];\n\n if (normalize) {\n this[_propName] = normalize(nativeEvent);\n } else {\n this[_propName] = nativeEvent[_propName];\n }\n }\n\n var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n\n if (defaultPrevented) {\n this.isDefaultPrevented = functionThatReturnsTrue;\n } else {\n this.isDefaultPrevented = functionThatReturnsFalse;\n }\n\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n }\n\n assign(SyntheticBaseEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = true;\n var event = this.nativeEvent;\n\n if (!event) {\n return;\n }\n\n if (event.preventDefault) {\n event.preventDefault(); // $FlowFixMe - flow is not aware of `unknown` in IE\n } else if (typeof event.returnValue !== 'unknown') {\n event.returnValue = false;\n }\n\n this.isDefaultPrevented = functionThatReturnsTrue;\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n\n if (!event) {\n return;\n }\n\n if (event.stopPropagation) {\n event.stopPropagation(); // $FlowFixMe - flow is not aware of `unknown` in IE\n } else if (typeof event.cancelBubble !== 'unknown') {\n // The ChangeEventPlugin registers a \"propertychange\" event for\n // IE. This event does not support bubbling or cancelling, and\n // any references to cancelBubble throw \"Member not found\". A\n // typeof check of \"unknown\" circumvents this issue (and is also\n // IE specific).\n event.cancelBubble = true;\n }\n\n this.isPropagationStopped = functionThatReturnsTrue;\n },\n\n /**\n * We release all dispatched `SyntheticEvent`s after each event loop, adding\n * them back into the pool. This allows a way to hold onto a reference that\n * won't be added back into the pool.\n */\n persist: function () {// Modern event system doesn't use pooling.\n },\n\n /**\n * Checks if this event should be released back into the pool.\n *\n * @return {boolean} True if this should not be released, false otherwise.\n */\n isPersistent: functionThatReturnsTrue\n });\n return SyntheticBaseEvent;\n}\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\n\nvar EventInterface = {\n eventPhase: 0,\n bubbles: 0,\n cancelable: 0,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: 0,\n isTrusted: 0\n};\nvar SyntheticEvent = createSyntheticEvent(EventInterface);\n\nvar UIEventInterface = assign({}, EventInterface, {\n view: 0,\n detail: 0\n});\n\nvar SyntheticUIEvent = createSyntheticEvent(UIEventInterface);\nvar lastMovementX;\nvar lastMovementY;\nvar lastMouseEvent;\n\nfunction updateMouseMovementPolyfillState(event) {\n if (event !== lastMouseEvent) {\n if (lastMouseEvent && event.type === 'mousemove') {\n lastMovementX = event.screenX - lastMouseEvent.screenX;\n lastMovementY = event.screenY - lastMouseEvent.screenY;\n } else {\n lastMovementX = 0;\n lastMovementY = 0;\n }\n\n lastMouseEvent = event;\n }\n}\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\n\nvar MouseEventInterface = assign({}, UIEventInterface, {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n getModifierState: getEventModifierState,\n button: 0,\n buttons: 0,\n relatedTarget: function (event) {\n if (event.relatedTarget === undefined) return event.fromElement === event.srcElement ? event.toElement : event.fromElement;\n return event.relatedTarget;\n },\n movementX: function (event) {\n if ('movementX' in event) {\n return event.movementX;\n }\n\n updateMouseMovementPolyfillState(event);\n return lastMovementX;\n },\n movementY: function (event) {\n if ('movementY' in event) {\n return event.movementY;\n } // Don't need to call updateMouseMovementPolyfillState() here\n // because it's guaranteed to have already run when movementX\n // was copied.\n\n\n return lastMovementY;\n }\n});\n\nvar SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface);\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar DragEventInterface = assign({}, MouseEventInterface, {\n dataTransfer: 0\n});\n\nvar SyntheticDragEvent = createSyntheticEvent(DragEventInterface);\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar FocusEventInterface = assign({}, UIEventInterface, {\n relatedTarget: 0\n});\n\nvar SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\n\nvar AnimationEventInterface = assign({}, EventInterface, {\n animationName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n});\n\nvar SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\n\nvar ClipboardEventInterface = assign({}, EventInterface, {\n clipboardData: function (event) {\n return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n }\n});\n\nvar SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\n\nvar CompositionEventInterface = assign({}, EventInterface, {\n data: 0\n});\n\nvar SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n * /#events-inputevents\n */\n// Happens to share the same list for now.\n\nvar SyntheticInputEvent = SyntheticCompositionEvent;\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar normalizeKey = {\n Esc: 'Escape',\n Spacebar: ' ',\n Left: 'ArrowLeft',\n Up: 'ArrowUp',\n Right: 'ArrowRight',\n Down: 'ArrowDown',\n Del: 'Delete',\n Win: 'OS',\n Menu: 'ContextMenu',\n Apps: 'ContextMenu',\n Scroll: 'ScrollLock',\n MozPrintableKey: 'Unidentified'\n};\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar translateToKey = {\n '8': 'Backspace',\n '9': 'Tab',\n '12': 'Clear',\n '13': 'Enter',\n '16': 'Shift',\n '17': 'Control',\n '18': 'Alt',\n '19': 'Pause',\n '20': 'CapsLock',\n '27': 'Escape',\n '32': ' ',\n '33': 'PageUp',\n '34': 'PageDown',\n '35': 'End',\n '36': 'Home',\n '37': 'ArrowLeft',\n '38': 'ArrowUp',\n '39': 'ArrowRight',\n '40': 'ArrowDown',\n '45': 'Insert',\n '46': 'Delete',\n '112': 'F1',\n '113': 'F2',\n '114': 'F3',\n '115': 'F4',\n '116': 'F5',\n '117': 'F6',\n '118': 'F7',\n '119': 'F8',\n '120': 'F9',\n '121': 'F10',\n '122': 'F11',\n '123': 'F12',\n '144': 'NumLock',\n '145': 'ScrollLock',\n '224': 'Meta'\n};\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\n\nfunction getEventKey(nativeEvent) {\n if (nativeEvent.key) {\n // Normalize inconsistent values reported by browsers due to\n // implementations of a working draft specification.\n // FireFox implements `key` but returns `MozPrintableKey` for all\n // printable characters (normalized to `Unidentified`), ignore it.\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n\n if (key !== 'Unidentified') {\n return key;\n }\n } // Browser does not implement `key`, polyfill as much of it as we can.\n\n\n if (nativeEvent.type === 'keypress') {\n var charCode = getEventCharCode(nativeEvent); // The enter-key is technically both printable and non-printable and can\n // thus be captured by `keypress`, no other non-printable key should.\n\n return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n }\n\n if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n // While user keyboard layout determines the actual meaning of each\n // `keyCode` value, almost all function keys have a universal value.\n return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n }\n\n return '';\n}\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\n\nvar modifierKeyToProp = {\n Alt: 'altKey',\n Control: 'ctrlKey',\n Meta: 'metaKey',\n Shift: 'shiftKey'\n}; // Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support\n// getModifierState. If getModifierState is not supported, we map it to a set of\n// modifier keys exposed by the event. In this case, Lock-keys are not supported.\n\nfunction modifierStateGetter(keyArg) {\n var syntheticEvent = this;\n var nativeEvent = syntheticEvent.nativeEvent;\n\n if (nativeEvent.getModifierState) {\n return nativeEvent.getModifierState(keyArg);\n }\n\n var keyProp = modifierKeyToProp[keyArg];\n return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n return modifierStateGetter;\n}\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\n\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n key: getEventKey,\n code: 0,\n location: 0,\n ctrlKey: 0,\n shiftKey: 0,\n altKey: 0,\n metaKey: 0,\n repeat: 0,\n locale: 0,\n getModifierState: getEventModifierState,\n // Legacy Interface\n charCode: function (event) {\n // `charCode` is the result of a KeyPress event and represents the value of\n // the actual printable character.\n // KeyPress is deprecated, but its replacement is not yet final and not\n // implemented in any major browser. Only KeyPress has charCode.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n\n return 0;\n },\n keyCode: function (event) {\n // `keyCode` is the result of a KeyDown/Up event and represents the value of\n // physical keyboard key.\n // The actual meaning of the value depends on the users' keyboard layout\n // which cannot be detected. Assuming that it is a US keyboard layout\n // provides a surprisingly accurate mapping for US and European users.\n // Due to this, it is left to the user to implement at this time.\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n\n return 0;\n },\n which: function (event) {\n // `which` is an alias for either `keyCode` or `charCode` depending on the\n // type of the event.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n\n return 0;\n }\n});\n\nvar SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface);\n/**\n * @interface PointerEvent\n * @see http://www.w3.org/TR/pointerevents/\n */\n\nvar PointerEventInterface = assign({}, MouseEventInterface, {\n pointerId: 0,\n width: 0,\n height: 0,\n pressure: 0,\n tangentialPressure: 0,\n tiltX: 0,\n tiltY: 0,\n twist: 0,\n pointerType: 0,\n isPrimary: 0\n});\n\nvar SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface);\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\n\nvar TouchEventInterface = assign({}, UIEventInterface, {\n touches: 0,\n targetTouches: 0,\n changedTouches: 0,\n altKey: 0,\n metaKey: 0,\n ctrlKey: 0,\n shiftKey: 0,\n getModifierState: getEventModifierState\n});\n\nvar SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface);\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\n\nvar TransitionEventInterface = assign({}, EventInterface, {\n propertyName: 0,\n elapsedTime: 0,\n pseudoElement: 0\n});\n\nvar SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface);\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar WheelEventInterface = assign({}, MouseEventInterface, {\n deltaX: function (event) {\n return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n 'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n },\n deltaY: function (event) {\n return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n 'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n 'wheelDelta' in event ? -event.wheelDelta : 0;\n },\n deltaZ: 0,\n // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n deltaMode: 0\n});\n\nvar SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface);\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\n\nvar START_KEYCODE = 229;\nvar canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;\nvar documentMode = null;\n\nif (canUseDOM && 'documentMode' in document) {\n documentMode = document.documentMode;\n} // Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\n\n\nvar canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode; // In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\n\nvar useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\nfunction registerEvents() {\n registerTwoPhaseEvent('onBeforeInput', ['compositionend', 'keypress', 'textInput', 'paste']);\n registerTwoPhaseEvent('onCompositionEnd', ['compositionend', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);\n registerTwoPhaseEvent('onCompositionStart', ['compositionstart', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);\n registerTwoPhaseEvent('onCompositionUpdate', ['compositionupdate', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);\n} // Track whether we've ever handled a keypress on the space key.\n\n\nvar hasSpaceKeypress = false;\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\n\nfunction isKeypressCommand(nativeEvent) {\n return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n/**\n * Translate native top level events into event types.\n */\n\n\nfunction getCompositionEventType(domEventName) {\n switch (domEventName) {\n case 'compositionstart':\n return 'onCompositionStart';\n\n case 'compositionend':\n return 'onCompositionEnd';\n\n case 'compositionupdate':\n return 'onCompositionUpdate';\n }\n}\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n */\n\n\nfunction isFallbackCompositionStart(domEventName, nativeEvent) {\n return domEventName === 'keydown' && nativeEvent.keyCode === START_KEYCODE;\n}\n/**\n * Does our fallback mode think that this event is the end of composition?\n */\n\n\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n switch (domEventName) {\n case 'keyup':\n // Command keys insert or clear IME input.\n return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n\n case 'keydown':\n // Expect IME keyCode on each keydown. If we get any other\n // code we must have exited earlier.\n return nativeEvent.keyCode !== START_KEYCODE;\n\n case 'keypress':\n case 'mousedown':\n case 'focusout':\n // Events are not possible without cancelling IME.\n return true;\n\n default:\n return false;\n }\n}\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\n\n\nfunction getDataFromCustomEvent(nativeEvent) {\n var detail = nativeEvent.detail;\n\n if (typeof detail === 'object' && 'data' in detail) {\n return detail.data;\n }\n\n return null;\n}\n/**\n * Check if a composition event was triggered by Korean IME.\n * Our fallback mode does not work well with IE's Korean IME,\n * so just use native composition events when Korean IME is used.\n * Although CompositionEvent.locale property is deprecated,\n * it is available in IE, where our fallback mode is enabled.\n *\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isUsingKoreanIME(nativeEvent) {\n return nativeEvent.locale === 'ko';\n} // Track the current IME composition status, if any.\n\n\nvar isComposing = false;\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\n\nfunction extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {\n var eventType;\n var fallbackData;\n\n if (canUseCompositionEvent) {\n eventType = getCompositionEventType(domEventName);\n } else if (!isComposing) {\n if (isFallbackCompositionStart(domEventName, nativeEvent)) {\n eventType = 'onCompositionStart';\n }\n } else if (isFallbackCompositionEnd(domEventName, nativeEvent)) {\n eventType = 'onCompositionEnd';\n }\n\n if (!eventType) {\n return null;\n }\n\n if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) {\n // The current composition is stored statically and must not be\n // overwritten while composition continues.\n if (!isComposing && eventType === 'onCompositionStart') {\n isComposing = initialize(nativeEventTarget);\n } else if (eventType === 'onCompositionEnd') {\n if (isComposing) {\n fallbackData = getData();\n }\n }\n }\n\n var listeners = accumulateTwoPhaseListeners(targetInst, eventType);\n\n if (listeners.length > 0) {\n var event = new SyntheticCompositionEvent(eventType, domEventName, null, nativeEvent, nativeEventTarget);\n dispatchQueue.push({\n event: event,\n listeners: listeners\n });\n\n if (fallbackData) {\n // Inject data generated from fallback path into the synthetic event.\n // This matches the property of native CompositionEventInterface.\n event.data = fallbackData;\n } else {\n var customData = getDataFromCustomEvent(nativeEvent);\n\n if (customData !== null) {\n event.data = customData;\n }\n }\n }\n}\n\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n switch (domEventName) {\n case 'compositionend':\n return getDataFromCustomEvent(nativeEvent);\n\n case 'keypress':\n /**\n * If native `textInput` events are available, our goal is to make\n * use of them. However, there is a special case: the spacebar key.\n * In Webkit, preventing default on a spacebar `textInput` event\n * cancels character insertion, but it *also* causes the browser\n * to fall back to its default spacebar behavior of scrolling the\n * page.\n *\n * Tracking at:\n * https://code.google.com/p/chromium/issues/detail?id=355103\n *\n * To avoid this issue, use the keypress event as if no `textInput`\n * event is available.\n */\n var which = nativeEvent.which;\n\n if (which !== SPACEBAR_CODE) {\n return null;\n }\n\n hasSpaceKeypress = true;\n return SPACEBAR_CHAR;\n\n case 'textInput':\n // Record the characters to be added to the DOM.\n var chars = nativeEvent.data; // If it's a spacebar character, assume that we have already handled\n // it at the keypress level and bail immediately. Android Chrome\n // doesn't give us keycodes, so we need to ignore it.\n\n if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n return null;\n }\n\n return chars;\n\n default:\n // For other native event types, do nothing.\n return null;\n }\n}\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n */\n\n\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n // If we are currently composing (IME) and using a fallback to do so,\n // try to extract the composed characters from the fallback object.\n // If composition event is available, we extract a string only at\n // compositionevent, otherwise extract it at fallback events.\n if (isComposing) {\n if (domEventName === 'compositionend' || !canUseCompositionEvent && isFallbackCompositionEnd(domEventName, nativeEvent)) {\n var chars = getData();\n reset();\n isComposing = false;\n return chars;\n }\n\n return null;\n }\n\n switch (domEventName) {\n case 'paste':\n // If a paste event occurs after a keypress, throw out the input\n // chars. Paste events should not lead to BeforeInput events.\n return null;\n\n case 'keypress':\n /**\n * As of v27, Firefox may fire keypress events even when no character\n * will be inserted. A few possibilities:\n *\n * - `which` is `0`. Arrow keys, Esc key, etc.\n *\n * - `which` is the pressed key code, but no char is available.\n * Ex: 'AltGr + d` in Polish. There is no modified character for\n * this key combination and no character is inserted into the\n * document, but FF fires the keypress for char code `100` anyway.\n * No `input` event will occur.\n *\n * - `which` is the pressed key code, but a command combination is\n * being used. Ex: `Cmd+C`. No character is inserted, and no\n * `input` event will occur.\n */\n if (!isKeypressCommand(nativeEvent)) {\n // IE fires the `keypress` event when a user types an emoji via\n // Touch keyboard of Windows. In such a case, the `char` property\n // holds an emoji character like `\\uD83D\\uDE0A`. Because its length\n // is 2, the property `which` does not represent an emoji correctly.\n // In such a case, we directly return the `char` property instead of\n // using `which`.\n if (nativeEvent.char && nativeEvent.char.length > 1) {\n return nativeEvent.char;\n } else if (nativeEvent.which) {\n return String.fromCharCode(nativeEvent.which);\n }\n }\n\n return null;\n\n case 'compositionend':\n return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;\n\n default:\n return null;\n }\n}\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\n\n\nfunction extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {\n var chars;\n\n if (canUseTextInputEvent) {\n chars = getNativeBeforeInputChars(domEventName, nativeEvent);\n } else {\n chars = getFallbackBeforeInputChars(domEventName, nativeEvent);\n } // If no characters are being inserted, no BeforeInput event should\n // be fired.\n\n\n if (!chars) {\n return null;\n }\n\n var listeners = accumulateTwoPhaseListeners(targetInst, 'onBeforeInput');\n\n if (listeners.length > 0) {\n var event = new SyntheticInputEvent('onBeforeInput', 'beforeinput', null, nativeEvent, nativeEventTarget);\n dispatchQueue.push({\n event: event,\n listeners: listeners\n });\n event.data = chars;\n }\n}\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\n\n\nfunction extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n}\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n color: true,\n date: true,\n datetime: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n password: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true\n};\n\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n if (nodeName === 'input') {\n return !!supportedInputTypes[elem.type];\n }\n\n if (nodeName === 'textarea') {\n return true;\n }\n\n return false;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\n\nfunction isEventSupported(eventNameSuffix) {\n if (!canUseDOM) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = (eventName in document);\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n return isSupported;\n}\n\nfunction registerEvents$1() {\n registerTwoPhaseEvent('onChange', ['change', 'click', 'focusin', 'focusout', 'input', 'keydown', 'keyup', 'selectionchange']);\n}\n\nfunction createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, target) {\n // Flag this event loop as needing state restore.\n enqueueStateRestore(target);\n var listeners = accumulateTwoPhaseListeners(inst, 'onChange');\n\n if (listeners.length > 0) {\n var event = new SyntheticEvent('onChange', 'change', null, nativeEvent, target);\n dispatchQueue.push({\n event: event,\n listeners: listeners\n });\n }\n}\n/**\n * For IE shims\n */\n\n\nvar activeElement = null;\nvar activeElementInst = null;\n/**\n * SECTION: handle `change` event\n */\n\nfunction shouldUseChangeEvent(elem) {\n var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n var dispatchQueue = [];\n createAndAccumulateChangeEvent(dispatchQueue, activeElementInst, nativeEvent, getEventTarget(nativeEvent)); // If change and propertychange bubbled, we'd just bind to it like all the\n // other events and have it go through ReactBrowserEventEmitter. Since it\n // doesn't, we manually listen for the events and so we have to enqueue and\n // process the abstract event manually.\n //\n // Batching is necessary here in order to ensure that all event handlers run\n // before the next rerender (including event handlers attached to ancestor\n // elements instead of directly on the input). Without this, controlled\n // components don't work properly in conjunction with event bubbling because\n // the component is rerendered and the value reverted before all the event\n // handlers can run. See https://github.com/facebook/react/issues/708.\n\n batchedUpdates(runEventInBatch, dispatchQueue);\n}\n\nfunction runEventInBatch(dispatchQueue) {\n processDispatchQueue(dispatchQueue, 0);\n}\n\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance(targetInst);\n\n if (updateValueIfChanged(targetNode)) {\n return targetInst;\n }\n}\n\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n if (domEventName === 'change') {\n return targetInst;\n }\n}\n/**\n * SECTION: handle `input` event\n */\n\n\nvar isInputEventSupported = false;\n\nif (canUseDOM) {\n // IE9 claims to support the input event but fails to trigger it when\n // deleting text, so we ignore its input events.\n isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);\n}\n/**\n * (For IE <=9) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\n\n\nfunction startWatchingForValueChange(target, targetInst) {\n activeElement = target;\n activeElementInst = targetInst;\n activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n/**\n * (For IE <=9) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\n\n\nfunction stopWatchingForValueChange() {\n if (!activeElement) {\n return;\n }\n\n activeElement.detachEvent('onpropertychange', handlePropertyChange);\n activeElement = null;\n activeElementInst = null;\n}\n/**\n * (For IE <=9) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\n\n\nfunction handlePropertyChange(nativeEvent) {\n if (nativeEvent.propertyName !== 'value') {\n return;\n }\n\n if (getInstIfValueChanged(activeElementInst)) {\n manualDispatchChangeEvent(nativeEvent);\n }\n}\n\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n if (domEventName === 'focusin') {\n // In IE9, propertychange fires for most input events but is buggy and\n // doesn't fire when text is deleted, but conveniently, selectionchange\n // appears to fire in all of the remaining cases so we catch those and\n // forward the event if the value has changed\n // In either case, we don't want to call the event handler if the value\n // is changed from JS so we redefine a setter for `.value` that updates\n // our activeElementValue variable, allowing us to ignore those changes\n //\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForValueChange();\n startWatchingForValueChange(target, targetInst);\n } else if (domEventName === 'focusout') {\n stopWatchingForValueChange();\n }\n} // For IE8 and IE9.\n\n\nfunction getTargetInstForInputEventPolyfill(domEventName, targetInst) {\n if (domEventName === 'selectionchange' || domEventName === 'keyup' || domEventName === 'keydown') {\n // On the selectionchange event, the target is just document which isn't\n // helpful for us so just check activeElement instead.\n //\n // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n // propertychange on the first input event after setting `value` from a\n // script and fires only keydown, keypress, keyup. Catching keyup usually\n // gets it and catching keydown lets us fire an event for the first\n // keystroke if user does a key repeat (it'll be a little delayed: right\n // before the second keystroke). Other input methods (e.g., paste) seem to\n // fire selectionchange normally.\n return getInstIfValueChanged(activeElementInst);\n }\n}\n/**\n * SECTION: handle `click` event\n */\n\n\nfunction shouldUseClickEvent(elem) {\n // Use the `click` event to detect changes to checkbox and radio inputs.\n // This approach works across all browsers, whereas `change` does not fire\n // until `blur` in IE8.\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n if (domEventName === 'click') {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n if (domEventName === 'input' || domEventName === 'change') {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction handleControlledInputBlur(node) {\n var state = node._wrapperState;\n\n if (!state || !state.controlled || node.type !== 'number') {\n return;\n }\n\n {\n // If controlled, assign the value attribute to the current value on blur\n setDefaultValue(node, 'number', node.value);\n }\n}\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\n\n\nfunction extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;\n var getTargetInstFunc, handleEventFunc;\n\n if (shouldUseChangeEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForChangeEvent;\n } else if (isTextInputElement(targetNode)) {\n if (isInputEventSupported) {\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n } else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n handleEventFunc = handleEventsForInputEventPolyfill;\n }\n } else if (shouldUseClickEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForClickEvent;\n }\n\n if (getTargetInstFunc) {\n var inst = getTargetInstFunc(domEventName, targetInst);\n\n if (inst) {\n createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, nativeEventTarget);\n return;\n }\n }\n\n if (handleEventFunc) {\n handleEventFunc(domEventName, targetNode, targetInst);\n } // When blurring, set the value attribute for number inputs\n\n\n if (domEventName === 'focusout') {\n handleControlledInputBlur(targetNode);\n }\n}\n\nfunction registerEvents$2() {\n registerDirectEvent('onMouseEnter', ['mouseout', 'mouseover']);\n registerDirectEvent('onMouseLeave', ['mouseout', 'mouseover']);\n registerDirectEvent('onPointerEnter', ['pointerout', 'pointerover']);\n registerDirectEvent('onPointerLeave', ['pointerout', 'pointerover']);\n}\n/**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n */\n\n\nfunction extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n var isOverEvent = domEventName === 'mouseover' || domEventName === 'pointerover';\n var isOutEvent = domEventName === 'mouseout' || domEventName === 'pointerout';\n\n if (isOverEvent && !isReplayingEvent(nativeEvent)) {\n // If this is an over event with a target, we might have already dispatched\n // the event in the out event of the other target. If this is replayed,\n // then it's because we couldn't dispatch against this target previously\n // so we have to do it now instead.\n var related = nativeEvent.relatedTarget || nativeEvent.fromElement;\n\n if (related) {\n // If the related node is managed by React, we can assume that we have\n // already dispatched the corresponding events during its mouseout.\n if (getClosestInstanceFromNode(related) || isContainerMarkedAsRoot(related)) {\n return;\n }\n }\n }\n\n if (!isOutEvent && !isOverEvent) {\n // Must not be a mouse or pointer in or out - ignoring.\n return;\n }\n\n var win; // TODO: why is this nullable in the types but we read from it?\n\n if (nativeEventTarget.window === nativeEventTarget) {\n // `nativeEventTarget` is probably a window object.\n win = nativeEventTarget;\n } else {\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n var doc = nativeEventTarget.ownerDocument;\n\n if (doc) {\n win = doc.defaultView || doc.parentWindow;\n } else {\n win = window;\n }\n }\n\n var from;\n var to;\n\n if (isOutEvent) {\n var _related = nativeEvent.relatedTarget || nativeEvent.toElement;\n\n from = targetInst;\n to = _related ? getClosestInstanceFromNode(_related) : null;\n\n if (to !== null) {\n var nearestMounted = getNearestMountedFiber(to);\n\n if (to !== nearestMounted || to.tag !== HostComponent && to.tag !== HostText) {\n to = null;\n }\n }\n } else {\n // Moving to a node from outside the window.\n from = null;\n to = targetInst;\n }\n\n if (from === to) {\n // Nothing pertains to our managed components.\n return;\n }\n\n var SyntheticEventCtor = SyntheticMouseEvent;\n var leaveEventType = 'onMouseLeave';\n var enterEventType = 'onMouseEnter';\n var eventTypePrefix = 'mouse';\n\n if (domEventName === 'pointerout' || domEventName === 'pointerover') {\n SyntheticEventCtor = SyntheticPointerEvent;\n leaveEventType = 'onPointerLeave';\n enterEventType = 'onPointerEnter';\n eventTypePrefix = 'pointer';\n }\n\n var fromNode = from == null ? win : getNodeFromInstance(from);\n var toNode = to == null ? win : getNodeFromInstance(to);\n var leave = new SyntheticEventCtor(leaveEventType, eventTypePrefix + 'leave', from, nativeEvent, nativeEventTarget);\n leave.target = fromNode;\n leave.relatedTarget = toNode;\n var enter = null; // We should only process this nativeEvent if we are processing\n // the first ancestor. Next time, we will ignore the event.\n\n var nativeTargetInst = getClosestInstanceFromNode(nativeEventTarget);\n\n if (nativeTargetInst === targetInst) {\n var enterEvent = new SyntheticEventCtor(enterEventType, eventTypePrefix + 'enter', to, nativeEvent, nativeEventTarget);\n enterEvent.target = toNode;\n enterEvent.relatedTarget = fromNode;\n enter = enterEvent;\n }\n\n accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leave, enter, from, to);\n}\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\n\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n } // Test for A's keys different from B.\n\n\n for (var i = 0; i < keysA.length; i++) {\n var currentKey = keysA[i];\n\n if (!hasOwnProperty.call(objB, currentKey) || !objectIs(objA[currentKey], objB[currentKey])) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\n\nfunction getLeafNode(node) {\n while (node && node.firstChild) {\n node = node.firstChild;\n }\n\n return node;\n}\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\n\n\nfunction getSiblingNode(node) {\n while (node) {\n if (node.nextSibling) {\n return node.nextSibling;\n }\n\n node = node.parentNode;\n }\n}\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\n\n\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n var nodeStart = 0;\n var nodeEnd = 0;\n\n while (node) {\n if (node.nodeType === TEXT_NODE) {\n nodeEnd = nodeStart + node.textContent.length;\n\n if (nodeStart <= offset && nodeEnd >= offset) {\n return {\n node: node,\n offset: offset - nodeStart\n };\n }\n\n nodeStart = nodeEnd;\n }\n\n node = getLeafNode(getSiblingNode(node));\n }\n}\n\n/**\n * @param {DOMElement} outerNode\n * @return {?object}\n */\n\nfunction getOffsets(outerNode) {\n var ownerDocument = outerNode.ownerDocument;\n var win = ownerDocument && ownerDocument.defaultView || window;\n var selection = win.getSelection && win.getSelection();\n\n if (!selection || selection.rangeCount === 0) {\n return null;\n }\n\n var anchorNode = selection.anchorNode,\n anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode,\n focusOffset = selection.focusOffset; // In Firefox, anchorNode and focusNode can be \"anonymous divs\", e.g. the\n // up/down buttons on an <input type=\"number\">. Anonymous divs do not seem to\n // expose properties, triggering a \"Permission denied error\" if any of its\n // properties are accessed. The only seemingly possible way to avoid erroring\n // is to access a property that typically works for non-anonymous divs and\n // catch any error that may otherwise arise. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n\n try {\n /* eslint-disable no-unused-expressions */\n anchorNode.nodeType;\n focusNode.nodeType;\n /* eslint-enable no-unused-expressions */\n } catch (e) {\n return null;\n }\n\n return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset);\n}\n/**\n * Returns {start, end} where `start` is the character/codepoint index of\n * (anchorNode, anchorOffset) within the textContent of `outerNode`, and\n * `end` is the index of (focusNode, focusOffset).\n *\n * Returns null if you pass in garbage input but we should probably just crash.\n *\n * Exported only for testing.\n */\n\nfunction getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) {\n var length = 0;\n var start = -1;\n var end = -1;\n var indexWithinAnchor = 0;\n var indexWithinFocus = 0;\n var node = outerNode;\n var parentNode = null;\n\n outer: while (true) {\n var next = null;\n\n while (true) {\n if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {\n start = length + anchorOffset;\n }\n\n if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {\n end = length + focusOffset;\n }\n\n if (node.nodeType === TEXT_NODE) {\n length += node.nodeValue.length;\n }\n\n if ((next = node.firstChild) === null) {\n break;\n } // Moving from `node` to its first child `next`.\n\n\n parentNode = node;\n node = next;\n }\n\n while (true) {\n if (node === outerNode) {\n // If `outerNode` has children, this is always the second time visiting\n // it. If it has no children, this is still the first loop, and the only\n // valid selection is anchorNode and focusNode both equal to this node\n // and both offsets 0, in which case we will have handled above.\n break outer;\n }\n\n if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {\n start = length;\n }\n\n if (parentNode === focusNode && ++indexWithinFocus === focusOffset) {\n end = length;\n }\n\n if ((next = node.nextSibling) !== null) {\n break;\n }\n\n node = parentNode;\n parentNode = node.parentNode;\n } // Moving from `node` to its next sibling `next`.\n\n\n node = next;\n }\n\n if (start === -1 || end === -1) {\n // This should never happen. (Would happen if the anchor/focus nodes aren't\n // actually inside the passed-in node.)\n return null;\n }\n\n return {\n start: start,\n end: end\n };\n}\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\n\nfunction setOffsets(node, offsets) {\n var doc = node.ownerDocument || document;\n var win = doc && doc.defaultView || window; // Edge fails with \"Object expected\" in some scenarios.\n // (For instance: TinyMCE editor used in a list component that supports pasting to add more,\n // fails when pasting 100+ items)\n\n if (!win.getSelection) {\n return;\n }\n\n var selection = win.getSelection();\n var length = node.textContent.length;\n var start = Math.min(offsets.start, length);\n var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method.\n // Flip backward selections, so we can set with a single range.\n\n if (!selection.extend && start > end) {\n var temp = end;\n end = start;\n start = temp;\n }\n\n var startMarker = getNodeForCharacterOffset(node, start);\n var endMarker = getNodeForCharacterOffset(node, end);\n\n if (startMarker && endMarker) {\n if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {\n return;\n }\n\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n\n if (start > end) {\n selection.addRange(range);\n selection.extend(endMarker.node, endMarker.offset);\n } else {\n range.setEnd(endMarker.node, endMarker.offset);\n selection.addRange(range);\n }\n }\n}\n\nfunction isTextNode(node) {\n return node && node.nodeType === TEXT_NODE;\n}\n\nfunction containsNode(outerNode, innerNode) {\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n return containsNode(outerNode, innerNode.parentNode);\n } else if ('contains' in outerNode) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n}\n\nfunction isInDocument(node) {\n return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node);\n}\n\nfunction isSameOriginFrame(iframe) {\n try {\n // Accessing the contentDocument of a HTMLIframeElement can cause the browser\n // to throw, e.g. if it has a cross-origin src attribute.\n // Safari will show an error in the console when the access results in \"Blocked a frame with origin\". e.g:\n // iframe.contentDocument.defaultView;\n // A safety way is to access one of the cross origin properties: Window or Location\n // Which might result in \"SecurityError\" DOM Exception and it is compatible to Safari.\n // https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl\n return typeof iframe.contentWindow.location.href === 'string';\n } catch (err) {\n return false;\n }\n}\n\nfunction getActiveElementDeep() {\n var win = window;\n var element = getActiveElement();\n\n while (element instanceof win.HTMLIFrameElement) {\n if (isSameOriginFrame(element)) {\n win = element.contentWindow;\n } else {\n return element;\n }\n\n element = getActiveElement(win.document);\n }\n\n return element;\n}\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\n\n/**\n * @hasSelectionCapabilities: we get the element types that support selection\n * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart`\n * and `selectionEnd` rows.\n */\n\n\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true');\n}\nfunction getSelectionInformation() {\n var focusedElem = getActiveElementDeep();\n return {\n focusedElem: focusedElem,\n selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection(focusedElem) : null\n };\n}\n/**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\n\nfunction restoreSelection(priorSelectionInformation) {\n var curFocusedElem = getActiveElementDeep();\n var priorFocusedElem = priorSelectionInformation.focusedElem;\n var priorSelectionRange = priorSelectionInformation.selectionRange;\n\n if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) {\n setSelection(priorFocusedElem, priorSelectionRange);\n } // Focusing a node can change the scroll position, which is undesirable\n\n\n var ancestors = [];\n var ancestor = priorFocusedElem;\n\n while (ancestor = ancestor.parentNode) {\n if (ancestor.nodeType === ELEMENT_NODE) {\n ancestors.push({\n element: ancestor,\n left: ancestor.scrollLeft,\n top: ancestor.scrollTop\n });\n }\n }\n\n if (typeof priorFocusedElem.focus === 'function') {\n priorFocusedElem.focus();\n }\n\n for (var i = 0; i < ancestors.length; i++) {\n var info = ancestors[i];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n}\n/**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\n\nfunction getSelection(input) {\n var selection;\n\n if ('selectionStart' in input) {\n // Modern browser with input or textarea.\n selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n } else {\n // Content editable or old IE textarea.\n selection = getOffsets(input);\n }\n\n return selection || {\n start: 0,\n end: 0\n };\n}\n/**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input Set selection bounds of this input or textarea\n * -@offsets Object of same form that is returned from get*\n */\n\nfunction setSelection(input, offsets) {\n var start = offsets.start;\n var end = offsets.end;\n\n if (end === undefined) {\n end = start;\n }\n\n if ('selectionStart' in input) {\n input.selectionStart = start;\n input.selectionEnd = Math.min(end, input.value.length);\n } else {\n setOffsets(input, offsets);\n }\n}\n\nvar skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nfunction registerEvents$3() {\n registerTwoPhaseEvent('onSelect', ['focusout', 'contextmenu', 'dragend', 'focusin', 'keydown', 'keyup', 'mousedown', 'mouseup', 'selectionchange']);\n}\n\nvar activeElement$1 = null;\nvar activeElementInst$1 = null;\nvar lastSelection = null;\nvar mouseDown = false;\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n */\n\nfunction getSelection$1(node) {\n if ('selectionStart' in node && hasSelectionCapabilities(node)) {\n return {\n start: node.selectionStart,\n end: node.selectionEnd\n };\n } else {\n var win = node.ownerDocument && node.ownerDocument.defaultView || window;\n var selection = win.getSelection();\n return {\n anchorNode: selection.anchorNode,\n anchorOffset: selection.anchorOffset,\n focusNode: selection.focusNode,\n focusOffset: selection.focusOffset\n };\n }\n}\n/**\n * Get document associated with the event target.\n */\n\n\nfunction getEventTargetDocument(eventTarget) {\n return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument;\n}\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @param {object} nativeEventTarget\n * @return {?SyntheticEvent}\n */\n\n\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n // Ensure we have the right element, and that the user is not dragging a\n // selection (this matches native `select` event behavior). In HTML5, select\n // fires only on input and textarea thus if there's no focused element we\n // won't dispatch.\n var doc = getEventTargetDocument(nativeEventTarget);\n\n if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement(doc)) {\n return;\n } // Only fire when selection has actually changed.\n\n\n var currentSelection = getSelection$1(activeElement$1);\n\n if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n lastSelection = currentSelection;\n var listeners = accumulateTwoPhaseListeners(activeElementInst$1, 'onSelect');\n\n if (listeners.length > 0) {\n var event = new SyntheticEvent('onSelect', 'select', null, nativeEvent, nativeEventTarget);\n dispatchQueue.push({\n event: event,\n listeners: listeners\n });\n event.target = activeElement$1;\n }\n }\n}\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\n\n\nfunction extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;\n\n switch (domEventName) {\n // Track the input node that has focus.\n case 'focusin':\n if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n activeElement$1 = targetNode;\n activeElementInst$1 = targetInst;\n lastSelection = null;\n }\n\n break;\n\n case 'focusout':\n activeElement$1 = null;\n activeElementInst$1 = null;\n lastSelection = null;\n break;\n // Don't fire the event while the user is dragging. This matches the\n // semantics of the native select event.\n\n case 'mousedown':\n mouseDown = true;\n break;\n\n case 'contextmenu':\n case 'mouseup':\n case 'dragend':\n mouseDown = false;\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n break;\n // Chrome and IE fire non-standard event when selection is changed (and\n // sometimes when it hasn't). IE's event fires out of order with respect\n // to key and input events on deletion, so we discard it.\n //\n // Firefox doesn't support selectionchange, so check selection status\n // after each key entry. The selection changes after keydown and before\n // keyup, but we check on keydown as well in the case of holding down a\n // key, when multiple keydown events are fired but only one keyup is.\n // This is also our approach for IE handling, for the reason above.\n\n case 'selectionchange':\n if (skipSelectionChangeEvent) {\n break;\n }\n\n // falls through\n\n case 'keydown':\n case 'keyup':\n constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n }\n}\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\n\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n prefixes['Moz' + styleProp] = 'moz' + eventName;\n return prefixes;\n}\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\n\n\nvar vendorPrefixes = {\n animationend: makePrefixMap('Animation', 'AnimationEnd'),\n animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n animationstart: makePrefixMap('Animation', 'AnimationStart'),\n transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\n\nvar prefixedEventNames = {};\n/**\n * Element to check for prefixes on.\n */\n\nvar style = {};\n/**\n * Bootstrap if a DOM exists.\n */\n\nif (canUseDOM) {\n style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,\n // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n // style object but the events that fire will still be prefixed, so we need\n // to check if the un-prefixed events are usable, and if not remove them from the map.\n\n if (!('AnimationEvent' in window)) {\n delete vendorPrefixes.animationend.animation;\n delete vendorPrefixes.animationiteration.animation;\n delete vendorPrefixes.animationstart.animation;\n } // Same as above\n\n\n if (!('TransitionEvent' in window)) {\n delete vendorPrefixes.transitionend.transition;\n }\n}\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\n\n\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) {\n return prefixedEventNames[eventName];\n } else if (!vendorPrefixes[eventName]) {\n return eventName;\n }\n\n var prefixMap = vendorPrefixes[eventName];\n\n for (var styleProp in prefixMap) {\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n return prefixedEventNames[eventName] = prefixMap[styleProp];\n }\n }\n\n return eventName;\n}\n\nvar ANIMATION_END = getVendorPrefixedEventName('animationend');\nvar ANIMATION_ITERATION = getVendorPrefixedEventName('animationiteration');\nvar ANIMATION_START = getVendorPrefixedEventName('animationstart');\nvar TRANSITION_END = getVendorPrefixedEventName('transitionend');\n\nvar topLevelEventsToReactNames = new Map(); // NOTE: Capitalization is important in this list!\n//\n// E.g. it needs \"pointerDown\", not \"pointerdown\".\n// This is because we derive both React name (\"onPointerDown\")\n// and DOM name (\"pointerdown\") from the same list.\n//\n// Exceptions that don't match this convention are listed separately.\n//\n// prettier-ignore\n\nvar simpleEventPluginEvents = ['abort', 'auxClick', 'cancel', 'canPlay', 'canPlayThrough', 'click', 'close', 'contextMenu', 'copy', 'cut', 'drag', 'dragEnd', 'dragEnter', 'dragExit', 'dragLeave', 'dragOver', 'dragStart', 'drop', 'durationChange', 'emptied', 'encrypted', 'ended', 'error', 'gotPointerCapture', 'input', 'invalid', 'keyDown', 'keyPress', 'keyUp', 'load', 'loadedData', 'loadedMetadata', 'loadStart', 'lostPointerCapture', 'mouseDown', 'mouseMove', 'mouseOut', 'mouseOver', 'mouseUp', 'paste', 'pause', 'play', 'playing', 'pointerCancel', 'pointerDown', 'pointerMove', 'pointerOut', 'pointerOver', 'pointerUp', 'progress', 'rateChange', 'reset', 'resize', 'seeked', 'seeking', 'stalled', 'submit', 'suspend', 'timeUpdate', 'touchCancel', 'touchEnd', 'touchStart', 'volumeChange', 'scroll', 'toggle', 'touchMove', 'waiting', 'wheel'];\n\nfunction registerSimpleEvent(domEventName, reactName) {\n topLevelEventsToReactNames.set(domEventName, reactName);\n registerTwoPhaseEvent(reactName, [domEventName]);\n}\n\nfunction registerSimpleEvents() {\n for (var i = 0; i < simpleEventPluginEvents.length; i++) {\n var eventName = simpleEventPluginEvents[i];\n var domEventName = eventName.toLowerCase();\n var capitalizedEvent = eventName[0].toUpperCase() + eventName.slice(1);\n registerSimpleEvent(domEventName, 'on' + capitalizedEvent);\n } // Special cases where event names don't match.\n\n\n registerSimpleEvent(ANIMATION_END, 'onAnimationEnd');\n registerSimpleEvent(ANIMATION_ITERATION, 'onAnimationIteration');\n registerSimpleEvent(ANIMATION_START, 'onAnimationStart');\n registerSimpleEvent('dblclick', 'onDoubleClick');\n registerSimpleEvent('focusin', 'onFocus');\n registerSimpleEvent('focusout', 'onBlur');\n registerSimpleEvent(TRANSITION_END, 'onTransitionEnd');\n}\n\nfunction extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n var reactName = topLevelEventsToReactNames.get(domEventName);\n\n if (reactName === undefined) {\n return;\n }\n\n var SyntheticEventCtor = SyntheticEvent;\n var reactEventType = domEventName;\n\n switch (domEventName) {\n case 'keypress':\n // Firefox creates a keypress event for function keys too. This removes\n // the unwanted keypress events. Enter is however both printable and\n // non-printable. One would expect Tab to be as well (but it isn't).\n if (getEventCharCode(nativeEvent) === 0) {\n return;\n }\n\n /* falls through */\n\n case 'keydown':\n case 'keyup':\n SyntheticEventCtor = SyntheticKeyboardEvent;\n break;\n\n case 'focusin':\n reactEventType = 'focus';\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n\n case 'focusout':\n reactEventType = 'blur';\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n\n case 'beforeblur':\n case 'afterblur':\n SyntheticEventCtor = SyntheticFocusEvent;\n break;\n\n case 'click':\n // Firefox creates a click event on right mouse clicks. This removes the\n // unwanted click events.\n if (nativeEvent.button === 2) {\n return;\n }\n\n /* falls through */\n\n case 'auxclick':\n case 'dblclick':\n case 'mousedown':\n case 'mousemove':\n case 'mouseup': // TODO: Disabled elements should not respond to mouse events\n\n /* falls through */\n\n case 'mouseout':\n case 'mouseover':\n case 'contextmenu':\n SyntheticEventCtor = SyntheticMouseEvent;\n break;\n\n case 'drag':\n case 'dragend':\n case 'dragenter':\n case 'dragexit':\n case 'dragleave':\n case 'dragover':\n case 'dragstart':\n case 'drop':\n SyntheticEventCtor = SyntheticDragEvent;\n break;\n\n case 'touchcancel':\n case 'touchend':\n case 'touchmove':\n case 'touchstart':\n SyntheticEventCtor = SyntheticTouchEvent;\n break;\n\n case ANIMATION_END:\n case ANIMATION_ITERATION:\n case ANIMATION_START:\n SyntheticEventCtor = SyntheticAnimationEvent;\n break;\n\n case TRANSITION_END:\n SyntheticEventCtor = SyntheticTransitionEvent;\n break;\n\n case 'scroll':\n SyntheticEventCtor = SyntheticUIEvent;\n break;\n\n case 'wheel':\n SyntheticEventCtor = SyntheticWheelEvent;\n break;\n\n case 'copy':\n case 'cut':\n case 'paste':\n SyntheticEventCtor = SyntheticClipboardEvent;\n break;\n\n case 'gotpointercapture':\n case 'lostpointercapture':\n case 'pointercancel':\n case 'pointerdown':\n case 'pointermove':\n case 'pointerout':\n case 'pointerover':\n case 'pointerup':\n SyntheticEventCtor = SyntheticPointerEvent;\n break;\n }\n\n var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;\n\n {\n // Some events don't bubble in the browser.\n // In the past, React has always bubbled them, but this can be surprising.\n // We're going to try aligning closer to the browser behavior by not bubbling\n // them in React either. We'll start by not bubbling onScroll, and then expand.\n var accumulateTargetOnly = !inCapturePhase && // TODO: ideally, we'd eventually add all events from\n // nonDelegatedEvents list in DOMPluginEventSystem.\n // Then we can remove this special list.\n // This is a breaking change that can wait until React 18.\n domEventName === 'scroll';\n\n var _listeners = accumulateSinglePhaseListeners(targetInst, reactName, nativeEvent.type, inCapturePhase, accumulateTargetOnly);\n\n if (_listeners.length > 0) {\n // Intentionally create event lazily.\n var _event = new SyntheticEventCtor(reactName, reactEventType, null, nativeEvent, nativeEventTarget);\n\n dispatchQueue.push({\n event: _event,\n listeners: _listeners\n });\n }\n }\n}\n\n// TODO: remove top-level side effect.\nregisterSimpleEvents();\nregisterEvents$2();\nregisterEvents$1();\nregisterEvents$3();\nregisterEvents();\n\nfunction extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {\n // TODO: we should remove the concept of a \"SimpleEventPlugin\".\n // This is the basic functionality of the event system. All\n // the other plugins are essentially polyfills. So the plugin\n // should probably be inlined somewhere and have its logic\n // be core the to event system. This would potentially allow\n // us to ship builds of React without the polyfilled plugins below.\n extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n var shouldProcessPolyfillPlugins = (eventSystemFlags & SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS) === 0; // We don't process these events unless we are in the\n // event's native \"bubble\" phase, which means that we're\n // not in the capture phase. That's because we emulate\n // the capture phase here still. This is a trade-off,\n // because in an ideal world we would not emulate and use\n // the phases properly, like we do with the SimpleEvent\n // plugin. However, the plugins below either expect\n // emulation (EnterLeave) or use state localized to that\n // plugin (BeforeInput, Change, Select). The state in\n // these modules complicates things, as you'll essentially\n // get the case where the capture phase event might change\n // state, only for the following bubble event to come in\n // later and not trigger anything as the state now\n // invalidates the heuristics of the event plugin. We\n // could alter all these plugins to work in such ways, but\n // that might cause other unknown side-effects that we\n // can't foresee right now.\n\n if (shouldProcessPolyfillPlugins) {\n extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);\n }\n} // List of events that need to be individually attached to media elements.\n\n\nvar mediaEventTypes = ['abort', 'canplay', 'canplaythrough', 'durationchange', 'emptied', 'encrypted', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart', 'pause', 'play', 'playing', 'progress', 'ratechange', 'resize', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting']; // We should not delegate these events to the container, but rather\n// set them on the actual target element itself. This is primarily\n// because these events do not consistently bubble in the DOM.\n\nvar nonDelegatedEvents = new Set(['cancel', 'close', 'invalid', 'load', 'scroll', 'toggle'].concat(mediaEventTypes));\n\nfunction executeDispatch(event, listener, currentTarget) {\n var type = event.type || 'unknown-event';\n event.currentTarget = currentTarget;\n invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n event.currentTarget = null;\n}\n\nfunction processDispatchQueueItemsInOrder(event, dispatchListeners, inCapturePhase) {\n var previousInstance;\n\n if (inCapturePhase) {\n for (var i = dispatchListeners.length - 1; i >= 0; i--) {\n var _dispatchListeners$i = dispatchListeners[i],\n instance = _dispatchListeners$i.instance,\n currentTarget = _dispatchListeners$i.currentTarget,\n listener = _dispatchListeners$i.listener;\n\n if (instance !== previousInstance && event.isPropagationStopped()) {\n return;\n }\n\n executeDispatch(event, listener, currentTarget);\n previousInstance = instance;\n }\n } else {\n for (var _i = 0; _i < dispatchListeners.length; _i++) {\n var _dispatchListeners$_i = dispatchListeners[_i],\n _instance = _dispatchListeners$_i.instance,\n _currentTarget = _dispatchListeners$_i.currentTarget,\n _listener = _dispatchListeners$_i.listener;\n\n if (_instance !== previousInstance && event.isPropagationStopped()) {\n return;\n }\n\n executeDispatch(event, _listener, _currentTarget);\n previousInstance = _instance;\n }\n }\n}\n\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;\n\n for (var i = 0; i < dispatchQueue.length; i++) {\n var _dispatchQueue$i = dispatchQueue[i],\n event = _dispatchQueue$i.event,\n listeners = _dispatchQueue$i.listeners;\n processDispatchQueueItemsInOrder(event, listeners, inCapturePhase); // event system doesn't use pooling.\n } // This would be a good time to rethrow if any of the event handlers threw.\n\n\n rethrowCaughtError();\n}\n\nfunction dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {\n var nativeEventTarget = getEventTarget(nativeEvent);\n var dispatchQueue = [];\n extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n processDispatchQueue(dispatchQueue, eventSystemFlags);\n}\n\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n {\n if (!nonDelegatedEvents.has(domEventName)) {\n error('Did not expect a listenToNonDelegatedEvent() call for \"%s\". ' + 'This is a bug in React. Please file an issue.', domEventName);\n }\n }\n\n var isCapturePhaseListener = false;\n var listenerSet = getEventListenerSet(targetElement);\n var listenerSetKey = getListenerSetKey(domEventName, isCapturePhaseListener);\n\n if (!listenerSet.has(listenerSetKey)) {\n addTrappedEventListener(targetElement, domEventName, IS_NON_DELEGATED, isCapturePhaseListener);\n listenerSet.add(listenerSetKey);\n }\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n {\n if (nonDelegatedEvents.has(domEventName) && !isCapturePhaseListener) {\n error('Did not expect a listenToNativeEvent() call for \"%s\" in the bubble phase. ' + 'This is a bug in React. Please file an issue.', domEventName);\n }\n }\n\n var eventSystemFlags = 0;\n\n if (isCapturePhaseListener) {\n eventSystemFlags |= IS_CAPTURE_PHASE;\n }\n\n addTrappedEventListener(target, domEventName, eventSystemFlags, isCapturePhaseListener);\n} // This is only used by createEventHandle when the\nvar listeningMarker = '_reactListening' + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n if (!rootContainerElement[listeningMarker]) {\n rootContainerElement[listeningMarker] = true;\n allNativeEvents.forEach(function (domEventName) {\n // We handle selectionchange separately because it\n // doesn't bubble and needs to be on the document.\n if (domEventName !== 'selectionchange') {\n if (!nonDelegatedEvents.has(domEventName)) {\n listenToNativeEvent(domEventName, false, rootContainerElement);\n }\n\n listenToNativeEvent(domEventName, true, rootContainerElement);\n }\n });\n var ownerDocument = rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;\n\n if (ownerDocument !== null) {\n // The selectionchange event also needs deduplication\n // but it is attached to the document.\n if (!ownerDocument[listeningMarker]) {\n ownerDocument[listeningMarker] = true;\n listenToNativeEvent('selectionchange', false, ownerDocument);\n }\n }\n }\n}\n\nfunction addTrappedEventListener(targetContainer, domEventName, eventSystemFlags, isCapturePhaseListener, isDeferredListenerForLegacyFBSupport) {\n var listener = createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags); // If passive option is not supported, then the event will be\n // active and not passive.\n\n var isPassiveListener = undefined;\n\n if (passiveBrowserEventsSupported) {\n // Browsers introduced an intervention, making these events\n // passive by default on document. React doesn't bind them\n // to document anymore, but changing this now would undo\n // the performance wins from the change. So we emulate\n // the existing behavior manually on the roots now.\n // https://github.com/facebook/react/issues/19651\n if (domEventName === 'touchstart' || domEventName === 'touchmove' || domEventName === 'wheel') {\n isPassiveListener = true;\n }\n }\n\n targetContainer = targetContainer;\n var unsubscribeListener; // When legacyFBSupport is enabled, it's for when we\n\n\n if (isCapturePhaseListener) {\n if (isPassiveListener !== undefined) {\n unsubscribeListener = addEventCaptureListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);\n } else {\n unsubscribeListener = addEventCaptureListener(targetContainer, domEventName, listener);\n }\n } else {\n if (isPassiveListener !== undefined) {\n unsubscribeListener = addEventBubbleListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);\n } else {\n unsubscribeListener = addEventBubbleListener(targetContainer, domEventName, listener);\n }\n }\n}\n\nfunction isMatchingRootContainer(grandContainer, targetContainer) {\n return grandContainer === targetContainer || grandContainer.nodeType === COMMENT_NODE && grandContainer.parentNode === targetContainer;\n}\n\nfunction dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {\n var ancestorInst = targetInst;\n\n if ((eventSystemFlags & IS_EVENT_HANDLE_NON_MANAGED_NODE) === 0 && (eventSystemFlags & IS_NON_DELEGATED) === 0) {\n var targetContainerNode = targetContainer; // If we are using the legacy FB support flag, we\n\n if (targetInst !== null) {\n // The below logic attempts to work out if we need to change\n // the target fiber to a different ancestor. We had similar logic\n // in the legacy event system, except the big difference between\n // systems is that the modern event system now has an event listener\n // attached to each React Root and React Portal Root. Together,\n // the DOM nodes representing these roots are the \"rootContainer\".\n // To figure out which ancestor instance we should use, we traverse\n // up the fiber tree from the target instance and attempt to find\n // root boundaries that match that of our current \"rootContainer\".\n // If we find that \"rootContainer\", we find the parent fiber\n // sub-tree for that root and make that our ancestor instance.\n var node = targetInst;\n\n mainLoop: while (true) {\n if (node === null) {\n return;\n }\n\n var nodeTag = node.tag;\n\n if (nodeTag === HostRoot || nodeTag === HostPortal) {\n var container = node.stateNode.containerInfo;\n\n if (isMatchingRootContainer(container, targetContainerNode)) {\n break;\n }\n\n if (nodeTag === HostPortal) {\n // The target is a portal, but it's not the rootContainer we're looking for.\n // Normally portals handle their own events all the way down to the root.\n // So we should be able to stop now. However, we don't know if this portal\n // was part of *our* root.\n var grandNode = node.return;\n\n while (grandNode !== null) {\n var grandTag = grandNode.tag;\n\n if (grandTag === HostRoot || grandTag === HostPortal) {\n var grandContainer = grandNode.stateNode.containerInfo;\n\n if (isMatchingRootContainer(grandContainer, targetContainerNode)) {\n // This is the rootContainer we're looking for and we found it as\n // a parent of the Portal. That means we can ignore it because the\n // Portal will bubble through to us.\n return;\n }\n }\n\n grandNode = grandNode.return;\n }\n } // Now we need to find it's corresponding host fiber in the other\n // tree. To do this we can use getClosestInstanceFromNode, but we\n // need to validate that the fiber is a host instance, otherwise\n // we need to traverse up through the DOM till we find the correct\n // node that is from the other tree.\n\n\n while (container !== null) {\n var parentNode = getClosestInstanceFromNode(container);\n\n if (parentNode === null) {\n return;\n }\n\n var parentTag = parentNode.tag;\n\n if (parentTag === HostComponent || parentTag === HostText) {\n node = ancestorInst = parentNode;\n continue mainLoop;\n }\n\n container = container.parentNode;\n }\n }\n\n node = node.return;\n }\n }\n }\n\n batchedUpdates(function () {\n return dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, ancestorInst);\n });\n}\n\nfunction createDispatchListener(instance, listener, currentTarget) {\n return {\n instance: instance,\n listener: listener,\n currentTarget: currentTarget\n };\n}\n\nfunction accumulateSinglePhaseListeners(targetFiber, reactName, nativeEventType, inCapturePhase, accumulateTargetOnly, nativeEvent) {\n var captureName = reactName !== null ? reactName + 'Capture' : null;\n var reactEventName = inCapturePhase ? captureName : reactName;\n var listeners = [];\n var instance = targetFiber;\n var lastHostComponent = null; // Accumulate all instances and listeners via the target -> root path.\n\n while (instance !== null) {\n var _instance2 = instance,\n stateNode = _instance2.stateNode,\n tag = _instance2.tag; // Handle listeners that are on HostComponents (i.e. <div>)\n\n if (tag === HostComponent && stateNode !== null) {\n lastHostComponent = stateNode; // createEventHandle listeners\n\n\n if (reactEventName !== null) {\n var listener = getListener(instance, reactEventName);\n\n if (listener != null) {\n listeners.push(createDispatchListener(instance, listener, lastHostComponent));\n }\n }\n } // If we are only accumulating events for the target, then we don't\n // continue to propagate through the React fiber tree to find other\n // listeners.\n\n\n if (accumulateTargetOnly) {\n break;\n } // If we are processing the onBeforeBlur event, then we need to take\n\n instance = instance.return;\n }\n\n return listeners;\n} // We should only use this function for:\n// - BeforeInputEventPlugin\n// - ChangeEventPlugin\n// - SelectEventPlugin\n// This is because we only process these plugins\n// in the bubble phase, so we need to accumulate two\n// phase event listeners (via emulation).\n\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n var captureName = reactName + 'Capture';\n var listeners = [];\n var instance = targetFiber; // Accumulate all instances and listeners via the target -> root path.\n\n while (instance !== null) {\n var _instance3 = instance,\n stateNode = _instance3.stateNode,\n tag = _instance3.tag; // Handle listeners that are on HostComponents (i.e. <div>)\n\n if (tag === HostComponent && stateNode !== null) {\n var currentTarget = stateNode;\n var captureListener = getListener(instance, captureName);\n\n if (captureListener != null) {\n listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));\n }\n\n var bubbleListener = getListener(instance, reactName);\n\n if (bubbleListener != null) {\n listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));\n }\n }\n\n instance = instance.return;\n }\n\n return listeners;\n}\n\nfunction getParent(inst) {\n if (inst === null) {\n return null;\n }\n\n do {\n inst = inst.return; // TODO: If this is a HostRoot we might want to bail out.\n // That is depending on if we want nested subtrees (layers) to bubble\n // events to their parent. We could also go through parentNode on the\n // host node but that wouldn't work for React Native and doesn't let us\n // do the portal feature.\n } while (inst && inst.tag !== HostComponent);\n\n if (inst) {\n return inst;\n }\n\n return null;\n}\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\n\n\nfunction getLowestCommonAncestor(instA, instB) {\n var nodeA = instA;\n var nodeB = instB;\n var depthA = 0;\n\n for (var tempA = nodeA; tempA; tempA = getParent(tempA)) {\n depthA++;\n }\n\n var depthB = 0;\n\n for (var tempB = nodeB; tempB; tempB = getParent(tempB)) {\n depthB++;\n } // If A is deeper, crawl up.\n\n\n while (depthA - depthB > 0) {\n nodeA = getParent(nodeA);\n depthA--;\n } // If B is deeper, crawl up.\n\n\n while (depthB - depthA > 0) {\n nodeB = getParent(nodeB);\n depthB--;\n } // Walk in lockstep until we find a match.\n\n\n var depth = depthA;\n\n while (depth--) {\n if (nodeA === nodeB || nodeB !== null && nodeA === nodeB.alternate) {\n return nodeA;\n }\n\n nodeA = getParent(nodeA);\n nodeB = getParent(nodeB);\n }\n\n return null;\n}\n\nfunction accumulateEnterLeaveListenersForEvent(dispatchQueue, event, target, common, inCapturePhase) {\n var registrationName = event._reactName;\n var listeners = [];\n var instance = target;\n\n while (instance !== null) {\n if (instance === common) {\n break;\n }\n\n var _instance4 = instance,\n alternate = _instance4.alternate,\n stateNode = _instance4.stateNode,\n tag = _instance4.tag;\n\n if (alternate !== null && alternate === common) {\n break;\n }\n\n if (tag === HostComponent && stateNode !== null) {\n var currentTarget = stateNode;\n\n if (inCapturePhase) {\n var captureListener = getListener(instance, registrationName);\n\n if (captureListener != null) {\n listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));\n }\n } else if (!inCapturePhase) {\n var bubbleListener = getListener(instance, registrationName);\n\n if (bubbleListener != null) {\n listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));\n }\n }\n }\n\n instance = instance.return;\n }\n\n if (listeners.length !== 0) {\n dispatchQueue.push({\n event: event,\n listeners: listeners\n });\n }\n} // We should only use this function for:\n// - EnterLeaveEventPlugin\n// This is because we only process this plugin\n// in the bubble phase, so we need to accumulate two\n// phase event listeners.\n\n\nfunction accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leaveEvent, enterEvent, from, to) {\n var common = from && to ? getLowestCommonAncestor(from, to) : null;\n\n if (from !== null) {\n accumulateEnterLeaveListenersForEvent(dispatchQueue, leaveEvent, from, common, false);\n }\n\n if (to !== null && enterEvent !== null) {\n accumulateEnterLeaveListenersForEvent(dispatchQueue, enterEvent, to, common, true);\n }\n}\nfunction getListenerSetKey(domEventName, capture) {\n return domEventName + \"__\" + (capture ? 'capture' : 'bubble');\n}\n\nvar didWarnInvalidHydration = false;\nvar DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML';\nvar SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning';\nvar SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning';\nvar AUTOFOCUS = 'autoFocus';\nvar CHILDREN = 'children';\nvar STYLE = 'style';\nvar HTML$1 = '__html';\nvar warnedUnknownTags;\nvar validatePropertiesInDevelopment;\nvar warnForPropDifference;\nvar warnForExtraAttributes;\nvar warnForInvalidEventListener;\nvar canDiffStyleForHydrationWarning;\nvar normalizeHTML;\n\n{\n warnedUnknownTags = {\n // There are working polyfills for <dialog>. Let people use it.\n dialog: true,\n // Electron ships a custom <webview> tag to display external web content in\n // an isolated frame and process.\n // This tag is not present in non Electron environments such as JSDom which\n // is often used for testing purposes.\n // @see https://electronjs.org/docs/api/webview-tag\n webview: true\n };\n\n validatePropertiesInDevelopment = function (type, props) {\n validateProperties(type, props);\n validateProperties$1(type, props);\n validateProperties$2(type, props, {\n registrationNameDependencies: registrationNameDependencies,\n possibleRegistrationNames: possibleRegistrationNames\n });\n }; // IE 11 parses & normalizes the style attribute as opposed to other\n // browsers. It adds spaces and sorts the properties in some\n // non-alphabetical order. Handling that would require sorting CSS\n // properties in the client & server versions or applying\n // `expectedStyle` to a temporary DOM node to read its `style` attribute\n // normalized. Since it only affects IE, we're skipping style warnings\n // in that browser completely in favor of doing all that work.\n // See https://github.com/facebook/react/issues/11807\n\n\n canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode;\n\n warnForPropDifference = function (propName, serverValue, clientValue) {\n if (didWarnInvalidHydration) {\n return;\n }\n\n var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue);\n var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue);\n\n if (normalizedServerValue === normalizedClientValue) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue));\n };\n\n warnForExtraAttributes = function (attributeNames) {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n var names = [];\n attributeNames.forEach(function (name) {\n names.push(name);\n });\n\n error('Extra attributes from the server: %s', names);\n };\n\n warnForInvalidEventListener = function (registrationName, listener) {\n if (listener === false) {\n error('Expected `%s` listener to be a function, instead got `false`.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName);\n } else {\n error('Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener);\n }\n }; // Parse the HTML and read it back to normalize the HTML string so that it\n // can be used for comparison.\n\n\n normalizeHTML = function (parent, html) {\n // We could have created a separate document here to avoid\n // re-initializing custom elements if they exist. But this breaks\n // how <noscript> is being handled. So we use the same document.\n // See the discussion in https://github.com/facebook/react/pull/11157.\n var testElement = parent.namespaceURI === HTML_NAMESPACE ? parent.ownerDocument.createElement(parent.tagName) : parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName);\n testElement.innerHTML = html;\n return testElement.innerHTML;\n };\n} // HTML parsing normalizes CR and CRLF to LF.\n// It also can turn \\u0000 into \\uFFFD inside attributes.\n// https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream\n// If we have a mismatch, it might be caused by that.\n// We will still patch up in this case but not fire the warning.\n\n\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g;\nvar NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\n\nfunction normalizeMarkupForTextOrAttribute(markup) {\n {\n checkHtmlStringCoercion(markup);\n }\n\n var markupString = typeof markup === 'string' ? markup : '' + markup;\n return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');\n}\n\nfunction checkForUnmatchedText(serverText, clientText, isConcurrentMode, shouldWarnDev) {\n var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);\n var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);\n\n if (normalizedServerText === normalizedClientText) {\n return;\n }\n\n if (shouldWarnDev) {\n {\n if (!didWarnInvalidHydration) {\n didWarnInvalidHydration = true;\n\n error('Text content did not match. Server: \"%s\" Client: \"%s\"', normalizedServerText, normalizedClientText);\n }\n }\n }\n\n if (isConcurrentMode && enableClientRenderFallbackOnTextMismatch) {\n // In concurrent roots, we throw when there's a text mismatch and revert to\n // client rendering, up to the nearest Suspense boundary.\n throw new Error('Text content does not match server-rendered HTML.');\n }\n}\n\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;\n}\n\nfunction noop() {}\n\nfunction trapClickOnNonInteractiveElement(node) {\n // Mobile Safari does not fire properly bubble click events on\n // non-interactive elements, which means delegated click listeners do not\n // fire. The workaround for this bug involves attaching an empty click\n // listener on the target node.\n // https://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n // Just set it using the onclick property so that we don't have to manage any\n // bookkeeping for it. Not sure if we need to clear it when the listener is\n // removed.\n // TODO: Only do this for the relevant Safaris maybe?\n node.onclick = noop;\n}\n\nfunction setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) {\n for (var propKey in nextProps) {\n if (!nextProps.hasOwnProperty(propKey)) {\n continue;\n }\n\n var nextProp = nextProps[propKey];\n\n if (propKey === STYLE) {\n {\n if (nextProp) {\n // Freeze the next style object so that we can assume it won't be\n // mutated. We have already warned for this in the past.\n Object.freeze(nextProp);\n }\n } // Relies on `updateStylesByID` not mutating `styleUpdates`.\n\n\n setValueForStyles(domElement, nextProp);\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n\n if (nextHtml != null) {\n setInnerHTML(domElement, nextHtml);\n }\n } else if (propKey === CHILDREN) {\n if (typeof nextProp === 'string') {\n // Avoid setting initial textContent when the text is empty. In IE11 setting\n // textContent on a <textarea> will cause the placeholder to not\n // show within the <textarea> until it has been focused and blurred again.\n // https://github.com/facebook/react/issues/6731#issuecomment-254874553\n var canSetTextContent = tag !== 'textarea' || nextProp !== '';\n\n if (canSetTextContent) {\n setTextContent(domElement, nextProp);\n }\n } else if (typeof nextProp === 'number') {\n setTextContent(domElement, '' + nextProp);\n }\n } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n if ( typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n\n if (propKey === 'onScroll') {\n listenToNonDelegatedEvent('scroll', domElement);\n }\n }\n } else if (nextProp != null) {\n setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);\n }\n }\n}\n\nfunction updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) {\n // TODO: Handle wasCustomComponentTag\n for (var i = 0; i < updatePayload.length; i += 2) {\n var propKey = updatePayload[i];\n var propValue = updatePayload[i + 1];\n\n if (propKey === STYLE) {\n setValueForStyles(domElement, propValue);\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n setInnerHTML(domElement, propValue);\n } else if (propKey === CHILDREN) {\n setTextContent(domElement, propValue);\n } else {\n setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);\n }\n }\n}\n\nfunction createElement(type, props, rootContainerElement, parentNamespace) {\n var isCustomComponentTag; // We create tags in the namespace of their parent container, except HTML\n // tags get no namespace.\n\n var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement);\n var domElement;\n var namespaceURI = parentNamespace;\n\n if (namespaceURI === HTML_NAMESPACE) {\n namespaceURI = getIntrinsicNamespace(type);\n }\n\n if (namespaceURI === HTML_NAMESPACE) {\n {\n isCustomComponentTag = isCustomComponent(type, props); // Should this check be gated by parent namespace? Not sure we want to\n // allow <SVG> or <mATH>.\n\n if (!isCustomComponentTag && type !== type.toLowerCase()) {\n error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);\n }\n }\n\n if (type === 'script') {\n // Create the script via .innerHTML so its \"parser-inserted\" flag is\n // set to true and it does not execute\n var div = ownerDocument.createElement('div');\n\n div.innerHTML = '<script><' + '/script>'; // eslint-disable-line\n // This is guaranteed to yield a script element.\n\n var firstChild = div.firstChild;\n domElement = div.removeChild(firstChild);\n } else if (typeof props.is === 'string') {\n // $FlowIssue `createElement` should be updated for Web Components\n domElement = ownerDocument.createElement(type, {\n is: props.is\n });\n } else {\n // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.\n // See discussion in https://github.com/facebook/react/pull/6896\n // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\n domElement = ownerDocument.createElement(type); // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size`\n // attributes on `select`s needs to be added before `option`s are inserted.\n // This prevents:\n // - a bug where the `select` does not scroll to the correct option because singular\n // `select` elements automatically pick the first item #13222\n // - a bug where the `select` set the first item as selected despite the `size` attribute #14239\n // See https://github.com/facebook/react/issues/13222\n // and https://github.com/facebook/react/issues/14239\n\n if (type === 'select') {\n var node = domElement;\n\n if (props.multiple) {\n node.multiple = true;\n } else if (props.size) {\n // Setting a size greater than 1 causes a select to behave like `multiple=true`, where\n // it is possible that no option is selected.\n //\n // This is only necessary when a select in \"single selection mode\".\n node.size = props.size;\n }\n }\n }\n } else {\n domElement = ownerDocument.createElementNS(namespaceURI, type);\n }\n\n {\n if (namespaceURI === HTML_NAMESPACE) {\n if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !hasOwnProperty.call(warnedUnknownTags, type)) {\n warnedUnknownTags[type] = true;\n\n error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);\n }\n }\n }\n\n return domElement;\n}\nfunction createTextNode(text, rootContainerElement) {\n return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text);\n}\nfunction setInitialProperties(domElement, tag, rawProps, rootContainerElement) {\n var isCustomComponentTag = isCustomComponent(tag, rawProps);\n\n {\n validatePropertiesInDevelopment(tag, rawProps);\n } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n var props;\n\n switch (tag) {\n case 'dialog':\n listenToNonDelegatedEvent('cancel', domElement);\n listenToNonDelegatedEvent('close', domElement);\n props = rawProps;\n break;\n\n case 'iframe':\n case 'object':\n case 'embed':\n // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the load event.\n listenToNonDelegatedEvent('load', domElement);\n props = rawProps;\n break;\n\n case 'video':\n case 'audio':\n // We listen to these events in case to ensure emulated bubble\n // listeners still fire for all the media events.\n for (var i = 0; i < mediaEventTypes.length; i++) {\n listenToNonDelegatedEvent(mediaEventTypes[i], domElement);\n }\n\n props = rawProps;\n break;\n\n case 'source':\n // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the error event.\n listenToNonDelegatedEvent('error', domElement);\n props = rawProps;\n break;\n\n case 'img':\n case 'image':\n case 'link':\n // We listen to these events in case to ensure emulated bubble\n // listeners still fire for error and load events.\n listenToNonDelegatedEvent('error', domElement);\n listenToNonDelegatedEvent('load', domElement);\n props = rawProps;\n break;\n\n case 'details':\n // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the toggle event.\n listenToNonDelegatedEvent('toggle', domElement);\n props = rawProps;\n break;\n\n case 'input':\n initWrapperState(domElement, rawProps);\n props = getHostProps(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n listenToNonDelegatedEvent('invalid', domElement);\n break;\n\n case 'option':\n validateProps(domElement, rawProps);\n props = rawProps;\n break;\n\n case 'select':\n initWrapperState$1(domElement, rawProps);\n props = getHostProps$1(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n listenToNonDelegatedEvent('invalid', domElement);\n break;\n\n case 'textarea':\n initWrapperState$2(domElement, rawProps);\n props = getHostProps$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n listenToNonDelegatedEvent('invalid', domElement);\n break;\n\n default:\n props = rawProps;\n }\n\n assertValidProps(tag, props);\n setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag);\n\n switch (tag) {\n case 'input':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper(domElement, rawProps, false);\n break;\n\n case 'textarea':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper$3(domElement);\n break;\n\n case 'option':\n postMountWrapper$1(domElement, rawProps);\n break;\n\n case 'select':\n postMountWrapper$2(domElement, rawProps);\n break;\n\n default:\n if (typeof props.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n\n break;\n }\n} // Calculate the diff between the two objects.\n\nfunction diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) {\n {\n validatePropertiesInDevelopment(tag, nextRawProps);\n }\n\n var updatePayload = null;\n var lastProps;\n var nextProps;\n\n switch (tag) {\n case 'input':\n lastProps = getHostProps(domElement, lastRawProps);\n nextProps = getHostProps(domElement, nextRawProps);\n updatePayload = [];\n break;\n\n case 'select':\n lastProps = getHostProps$1(domElement, lastRawProps);\n nextProps = getHostProps$1(domElement, nextRawProps);\n updatePayload = [];\n break;\n\n case 'textarea':\n lastProps = getHostProps$2(domElement, lastRawProps);\n nextProps = getHostProps$2(domElement, nextRawProps);\n updatePayload = [];\n break;\n\n default:\n lastProps = lastRawProps;\n nextProps = nextRawProps;\n\n if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n\n break;\n }\n\n assertValidProps(tag, nextProps);\n var propKey;\n var styleName;\n var styleUpdates = null;\n\n for (propKey in lastProps) {\n if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {\n continue;\n }\n\n if (propKey === STYLE) {\n var lastStyle = lastProps[propKey];\n\n for (styleName in lastStyle) {\n if (lastStyle.hasOwnProperty(styleName)) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n\n styleUpdates[styleName] = '';\n }\n }\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {\n // This is a special case. If any listener updates we need to ensure\n // that the \"current\" fiber pointer gets updated so we need a commit\n // to update this element.\n if (!updatePayload) {\n updatePayload = [];\n }\n } else {\n // For all other deleted properties we add it to the queue. We use\n // the allowed property list in the commit phase instead.\n (updatePayload = updatePayload || []).push(propKey, null);\n }\n }\n\n for (propKey in nextProps) {\n var nextProp = nextProps[propKey];\n var lastProp = lastProps != null ? lastProps[propKey] : undefined;\n\n if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {\n continue;\n }\n\n if (propKey === STYLE) {\n {\n if (nextProp) {\n // Freeze the next style object so that we can assume it won't be\n // mutated. We have already warned for this in the past.\n Object.freeze(nextProp);\n }\n }\n\n if (lastProp) {\n // Unset styles on `lastProp` but not on `nextProp`.\n for (styleName in lastProp) {\n if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n\n styleUpdates[styleName] = '';\n }\n } // Update styles that changed since `lastProp`.\n\n\n for (styleName in nextProp) {\n if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n\n styleUpdates[styleName] = nextProp[styleName];\n }\n }\n } else {\n // Relies on `updateStylesByID` not mutating `styleUpdates`.\n if (!styleUpdates) {\n if (!updatePayload) {\n updatePayload = [];\n }\n\n updatePayload.push(propKey, styleUpdates);\n }\n\n styleUpdates = nextProp;\n }\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n var lastHtml = lastProp ? lastProp[HTML$1] : undefined;\n\n if (nextHtml != null) {\n if (lastHtml !== nextHtml) {\n (updatePayload = updatePayload || []).push(propKey, nextHtml);\n }\n }\n } else if (propKey === CHILDREN) {\n if (typeof nextProp === 'string' || typeof nextProp === 'number') {\n (updatePayload = updatePayload || []).push(propKey, '' + nextProp);\n }\n } else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n // We eagerly listen to this even though we haven't committed yet.\n if ( typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n\n if (propKey === 'onScroll') {\n listenToNonDelegatedEvent('scroll', domElement);\n }\n }\n\n if (!updatePayload && lastProp !== nextProp) {\n // This is a special case. If any listener updates we need to ensure\n // that the \"current\" props pointer gets updated so we need a commit\n // to update this element.\n updatePayload = [];\n }\n } else {\n // For any other property we always add it to the queue and then we\n // filter it out using the allowed property list during the commit.\n (updatePayload = updatePayload || []).push(propKey, nextProp);\n }\n }\n\n if (styleUpdates) {\n {\n validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);\n }\n\n (updatePayload = updatePayload || []).push(STYLE, styleUpdates);\n }\n\n return updatePayload;\n} // Apply the diff.\n\nfunction updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) {\n // Update checked *before* name.\n // In the middle of an update, it is possible to have multiple checked.\n // When a checked radio tries to change name, browser makes another radio's checked false.\n if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) {\n updateChecked(domElement, nextRawProps);\n }\n\n var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);\n var isCustomComponentTag = isCustomComponent(tag, nextRawProps); // Apply the diff.\n\n updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag); // TODO: Ensure that an update gets scheduled if any of the special props\n // changed.\n\n switch (tag) {\n case 'input':\n // Update the wrapper around inputs *after* updating props. This has to\n // happen after `updateDOMProperties`. Otherwise HTML5 input validations\n // raise warnings and prevent the new value from being assigned.\n updateWrapper(domElement, nextRawProps);\n break;\n\n case 'textarea':\n updateWrapper$1(domElement, nextRawProps);\n break;\n\n case 'select':\n // <select> value update needs to occur after <option> children\n // reconciliation\n postUpdateWrapper(domElement, nextRawProps);\n break;\n }\n}\n\nfunction getPossibleStandardName(propName) {\n {\n var lowerCasedName = propName.toLowerCase();\n\n if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n return null;\n }\n\n return possibleStandardNames[lowerCasedName] || null;\n }\n}\n\nfunction diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement, isConcurrentMode, shouldWarnDev) {\n var isCustomComponentTag;\n var extraAttributeNames;\n\n {\n isCustomComponentTag = isCustomComponent(tag, rawProps);\n validatePropertiesInDevelopment(tag, rawProps);\n } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n switch (tag) {\n case 'dialog':\n listenToNonDelegatedEvent('cancel', domElement);\n listenToNonDelegatedEvent('close', domElement);\n break;\n\n case 'iframe':\n case 'object':\n case 'embed':\n // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the load event.\n listenToNonDelegatedEvent('load', domElement);\n break;\n\n case 'video':\n case 'audio':\n // We listen to these events in case to ensure emulated bubble\n // listeners still fire for all the media events.\n for (var i = 0; i < mediaEventTypes.length; i++) {\n listenToNonDelegatedEvent(mediaEventTypes[i], domElement);\n }\n\n break;\n\n case 'source':\n // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the error event.\n listenToNonDelegatedEvent('error', domElement);\n break;\n\n case 'img':\n case 'image':\n case 'link':\n // We listen to these events in case to ensure emulated bubble\n // listeners still fire for error and load events.\n listenToNonDelegatedEvent('error', domElement);\n listenToNonDelegatedEvent('load', domElement);\n break;\n\n case 'details':\n // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the toggle event.\n listenToNonDelegatedEvent('toggle', domElement);\n break;\n\n case 'input':\n initWrapperState(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n listenToNonDelegatedEvent('invalid', domElement);\n break;\n\n case 'option':\n validateProps(domElement, rawProps);\n break;\n\n case 'select':\n initWrapperState$1(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n listenToNonDelegatedEvent('invalid', domElement);\n break;\n\n case 'textarea':\n initWrapperState$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble\n // listeners still fire for the invalid event.\n\n listenToNonDelegatedEvent('invalid', domElement);\n break;\n }\n\n assertValidProps(tag, rawProps);\n\n {\n extraAttributeNames = new Set();\n var attributes = domElement.attributes;\n\n for (var _i = 0; _i < attributes.length; _i++) {\n var name = attributes[_i].name.toLowerCase();\n\n switch (name) {\n // Controlled attributes are not validated\n // TODO: Only ignore them on controlled tags.\n case 'value':\n break;\n\n case 'checked':\n break;\n\n case 'selected':\n break;\n\n default:\n // Intentionally use the original name.\n // See discussion in https://github.com/facebook/react/pull/10676.\n extraAttributeNames.add(attributes[_i].name);\n }\n }\n }\n\n var updatePayload = null;\n\n for (var propKey in rawProps) {\n if (!rawProps.hasOwnProperty(propKey)) {\n continue;\n }\n\n var nextProp = rawProps[propKey];\n\n if (propKey === CHILDREN) {\n // For text content children we compare against textContent. This\n // might match additional HTML that is hidden when we read it using\n // textContent. E.g. \"foo\" will match \"f<span>oo</span>\" but that still\n // satisfies our requirement. Our requirement is not to produce perfect\n // HTML and attributes. Ideally we should preserve structure but it's\n // ok not to if the visible content is still enough to indicate what\n // even listeners these nodes might be wired up to.\n // TODO: Warn if there is more than a single textNode as a child.\n // TODO: Should we use domElement.firstChild.nodeValue to compare?\n if (typeof nextProp === 'string') {\n if (domElement.textContent !== nextProp) {\n if (rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n checkForUnmatchedText(domElement.textContent, nextProp, isConcurrentMode, shouldWarnDev);\n }\n\n updatePayload = [CHILDREN, nextProp];\n }\n } else if (typeof nextProp === 'number') {\n if (domElement.textContent !== '' + nextProp) {\n if (rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n checkForUnmatchedText(domElement.textContent, nextProp, isConcurrentMode, shouldWarnDev);\n }\n\n updatePayload = [CHILDREN, '' + nextProp];\n }\n }\n } else if (registrationNameDependencies.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n if ( typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n\n if (propKey === 'onScroll') {\n listenToNonDelegatedEvent('scroll', domElement);\n }\n }\n } else if (shouldWarnDev && true && // Convince Flow we've calculated it (it's DEV-only in this method.)\n typeof isCustomComponentTag === 'boolean') {\n // Validate that the properties correspond to their expected values.\n var serverValue = void 0;\n var propertyInfo = isCustomComponentTag && enableCustomElementPropertySupport ? null : getPropertyInfo(propKey);\n\n if (rawProps[SUPPRESS_HYDRATION_WARNING] === true) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING || // Controlled attributes are not validated\n // TODO: Only ignore them on controlled tags.\n propKey === 'value' || propKey === 'checked' || propKey === 'selected') ; else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var serverHTML = domElement.innerHTML;\n var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n\n if (nextHtml != null) {\n var expectedHTML = normalizeHTML(domElement, nextHtml);\n\n if (expectedHTML !== serverHTML) {\n warnForPropDifference(propKey, serverHTML, expectedHTML);\n }\n }\n } else if (propKey === STYLE) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey);\n\n if (canDiffStyleForHydrationWarning) {\n var expectedStyle = createDangerousStringForStyles(nextProp);\n serverValue = domElement.getAttribute('style');\n\n if (expectedStyle !== serverValue) {\n warnForPropDifference(propKey, serverValue, expectedStyle);\n }\n }\n } else if (isCustomComponentTag && !enableCustomElementPropertySupport) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey.toLowerCase());\n serverValue = getValueForAttribute(domElement, propKey, nextProp);\n\n if (nextProp !== serverValue) {\n warnForPropDifference(propKey, serverValue, nextProp);\n }\n } else if (!shouldIgnoreAttribute(propKey, propertyInfo, isCustomComponentTag) && !shouldRemoveAttribute(propKey, nextProp, propertyInfo, isCustomComponentTag)) {\n var isMismatchDueToBadCasing = false;\n\n if (propertyInfo !== null) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propertyInfo.attributeName);\n serverValue = getValueForProperty(domElement, propKey, nextProp, propertyInfo);\n } else {\n var ownNamespace = parentNamespace;\n\n if (ownNamespace === HTML_NAMESPACE) {\n ownNamespace = getIntrinsicNamespace(tag);\n }\n\n if (ownNamespace === HTML_NAMESPACE) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey.toLowerCase());\n } else {\n var standardName = getPossibleStandardName(propKey);\n\n if (standardName !== null && standardName !== propKey) {\n // If an SVG prop is supplied with bad casing, it will\n // be successfully parsed from HTML, but will produce a mismatch\n // (and would be incorrectly rendered on the client).\n // However, we already warn about bad casing elsewhere.\n // So we'll skip the misleading extra mismatch warning in this case.\n isMismatchDueToBadCasing = true; // $FlowFixMe - Should be inferred as not undefined.\n\n extraAttributeNames.delete(standardName);\n } // $FlowFixMe - Should be inferred as not undefined.\n\n\n extraAttributeNames.delete(propKey);\n }\n\n serverValue = getValueForAttribute(domElement, propKey, nextProp);\n }\n\n var dontWarnCustomElement = enableCustomElementPropertySupport ;\n\n if (!dontWarnCustomElement && nextProp !== serverValue && !isMismatchDueToBadCasing) {\n warnForPropDifference(propKey, serverValue, nextProp);\n }\n }\n }\n }\n\n {\n if (shouldWarnDev) {\n if ( // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.size > 0 && rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {\n // $FlowFixMe - Should be inferred as not undefined.\n warnForExtraAttributes(extraAttributeNames);\n }\n }\n }\n\n switch (tag) {\n case 'input':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper(domElement, rawProps, true);\n break;\n\n case 'textarea':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper$3(domElement);\n break;\n\n case 'select':\n case 'option':\n // For input and textarea we current always set the value property at\n // post mount to force it to diverge from attributes. However, for\n // option and select we don't quite do the same thing and select\n // is not resilient to the DOM state changing so we don't do that here.\n // TODO: Consider not doing this for input and textarea.\n break;\n\n default:\n if (typeof rawProps.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n\n break;\n }\n\n return updatePayload;\n}\nfunction diffHydratedText(textNode, text, isConcurrentMode) {\n var isDifferent = textNode.nodeValue !== text;\n return isDifferent;\n}\nfunction warnForDeletedHydratableElement(parentNode, child) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForDeletedHydratableText(parentNode, child) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Did not expect server HTML to contain the text node \"%s\" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForInsertedHydratedElement(parentNode, tag, props) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForInsertedHydratedText(parentNode, text) {\n {\n if (text === '') {\n // We expect to insert empty text nodes since they're not represented in\n // the HTML.\n // TODO: Remove this special case if we can just avoid inserting empty\n // text nodes.\n return;\n }\n\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Expected server HTML to contain a matching text node for \"%s\" in <%s>.', text, parentNode.nodeName.toLowerCase());\n }\n}\nfunction restoreControlledState$3(domElement, tag, props) {\n switch (tag) {\n case 'input':\n restoreControlledState(domElement, props);\n return;\n\n case 'textarea':\n restoreControlledState$2(domElement, props);\n return;\n\n case 'select':\n restoreControlledState$1(domElement, props);\n return;\n }\n}\n\nvar validateDOMNesting = function () {};\n\nvar updatedAncestorInfo = function () {};\n\n{\n // This validation code was written based on the HTML5 parsing spec:\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n //\n // Note: this does not catch all invalid nesting, nor does it try to (as it's\n // not clear what practical benefit doing so provides); instead, we warn only\n // for cases where the parser will give a parse tree differing from what React\n // intended. For example, <b><div></div></b> is invalid but we don't warn\n // because it still parses correctly; we do warn for other cases like nested\n // <p> tags where the beginning of the second element implicitly closes the\n // first, causing a confusing mess.\n // https://html.spec.whatwg.org/multipage/syntax.html#special\n var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n\n var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n // TODO: Distinguish by namespace here -- for <title>, including it here\n // errs on the side of fewer warnings\n 'foreignObject', 'desc', 'title']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n\n var buttonScopeTags = inScopeTags.concat(['button']); // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n\n var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n var emptyAncestorInfo = {\n current: null,\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null\n };\n\n updatedAncestorInfo = function (oldInfo, tag) {\n var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo);\n\n var info = {\n tag: tag\n };\n\n if (inScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.aTagInScope = null;\n ancestorInfo.buttonTagInScope = null;\n ancestorInfo.nobrTagInScope = null;\n }\n\n if (buttonScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.pTagInButtonScope = null;\n } // See rules for 'li', 'dd', 'dt' start tags in\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n ancestorInfo.listItemTagAutoclosing = null;\n ancestorInfo.dlItemTagAutoclosing = null;\n }\n\n ancestorInfo.current = info;\n\n if (tag === 'form') {\n ancestorInfo.formTag = info;\n }\n\n if (tag === 'a') {\n ancestorInfo.aTagInScope = info;\n }\n\n if (tag === 'button') {\n ancestorInfo.buttonTagInScope = info;\n }\n\n if (tag === 'nobr') {\n ancestorInfo.nobrTagInScope = info;\n }\n\n if (tag === 'p') {\n ancestorInfo.pTagInButtonScope = info;\n }\n\n if (tag === 'li') {\n ancestorInfo.listItemTagAutoclosing = info;\n }\n\n if (tag === 'dd' || tag === 'dt') {\n ancestorInfo.dlItemTagAutoclosing = info;\n }\n\n return ancestorInfo;\n };\n /**\n * Returns whether\n */\n\n\n var isTagValidWithParent = function (tag, parentTag) {\n // First, let's check if we're in an unusual parsing mode...\n switch (parentTag) {\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n case 'select':\n return tag === 'option' || tag === 'optgroup' || tag === '#text';\n\n case 'optgroup':\n return tag === 'option' || tag === '#text';\n // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n // but\n\n case 'option':\n return tag === '#text';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n // No special behavior since these rules fall back to \"in body\" mode for\n // all except special table nodes which cause bad parsing behavior anyway.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n\n case 'tr':\n return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n\n case 'tbody':\n case 'thead':\n case 'tfoot':\n return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n\n case 'colgroup':\n return tag === 'col' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n\n case 'table':\n return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n\n case 'head':\n return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n\n case 'html':\n return tag === 'head' || tag === 'body' || tag === 'frameset';\n\n case 'frameset':\n return tag === 'frame';\n\n case '#document':\n return tag === 'html';\n } // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n // where the parsing rules cause implicit opens or closes to be added.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n switch (tag) {\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n case 'rp':\n case 'rt':\n return impliedEndTags.indexOf(parentTag) === -1;\n\n case 'body':\n case 'caption':\n case 'col':\n case 'colgroup':\n case 'frameset':\n case 'frame':\n case 'head':\n case 'html':\n case 'tbody':\n case 'td':\n case 'tfoot':\n case 'th':\n case 'thead':\n case 'tr':\n // These tags are only valid with a few parents that have special child\n // parsing rules -- if we're down here, then none of those matched and\n // so we allow it only if we don't know what the parent is, as all other\n // cases are invalid.\n return parentTag == null;\n }\n\n return true;\n };\n /**\n * Returns whether\n */\n\n\n var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n switch (tag) {\n case 'address':\n case 'article':\n case 'aside':\n case 'blockquote':\n case 'center':\n case 'details':\n case 'dialog':\n case 'dir':\n case 'div':\n case 'dl':\n case 'fieldset':\n case 'figcaption':\n case 'figure':\n case 'footer':\n case 'header':\n case 'hgroup':\n case 'main':\n case 'menu':\n case 'nav':\n case 'ol':\n case 'p':\n case 'section':\n case 'summary':\n case 'ul':\n case 'pre':\n case 'listing':\n case 'table':\n case 'hr':\n case 'xmp':\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return ancestorInfo.pTagInButtonScope;\n\n case 'form':\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n case 'li':\n return ancestorInfo.listItemTagAutoclosing;\n\n case 'dd':\n case 'dt':\n return ancestorInfo.dlItemTagAutoclosing;\n\n case 'button':\n return ancestorInfo.buttonTagInScope;\n\n case 'a':\n // Spec says something about storing a list of markers, but it sounds\n // equivalent to this check.\n return ancestorInfo.aTagInScope;\n\n case 'nobr':\n return ancestorInfo.nobrTagInScope;\n }\n\n return null;\n };\n\n var didWarn$1 = {};\n\n validateDOMNesting = function (childTag, childText, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.current;\n var parentTag = parentInfo && parentInfo.tag;\n\n if (childText != null) {\n if (childTag != null) {\n error('validateDOMNesting: when childText is passed, childTag should be null');\n }\n\n childTag = '#text';\n }\n\n var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n var invalidParentOrAncestor = invalidParent || invalidAncestor;\n\n if (!invalidParentOrAncestor) {\n return;\n }\n\n var ancestorTag = invalidParentOrAncestor.tag;\n var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag;\n\n if (didWarn$1[warnKey]) {\n return;\n }\n\n didWarn$1[warnKey] = true;\n var tagDisplayName = childTag;\n var whitespaceInfo = '';\n\n if (childTag === '#text') {\n if (/\\S/.test(childText)) {\n tagDisplayName = 'Text nodes';\n } else {\n tagDisplayName = 'Whitespace text nodes';\n whitespaceInfo = \" Make sure you don't have any extra whitespace between tags on \" + 'each line of your source code.';\n }\n } else {\n tagDisplayName = '<' + childTag + '>';\n }\n\n if (invalidParent) {\n var info = '';\n\n if (ancestorTag === 'table' && childTag === 'tr') {\n info += ' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by ' + 'the browser.';\n }\n\n error('validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s', tagDisplayName, ancestorTag, whitespaceInfo, info);\n } else {\n error('validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.', tagDisplayName, ancestorTag);\n }\n };\n}\n\nvar SUPPRESS_HYDRATION_WARNING$1 = 'suppressHydrationWarning';\nvar SUSPENSE_START_DATA = '$';\nvar SUSPENSE_END_DATA = '/$';\nvar SUSPENSE_PENDING_START_DATA = '$?';\nvar SUSPENSE_FALLBACK_START_DATA = '$!';\nvar STYLE$1 = 'style';\nvar eventsEnabled = null;\nvar selectionInformation = null;\nfunction getRootHostContext(rootContainerInstance) {\n var type;\n var namespace;\n var nodeType = rootContainerInstance.nodeType;\n\n switch (nodeType) {\n case DOCUMENT_NODE:\n case DOCUMENT_FRAGMENT_NODE:\n {\n type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';\n var root = rootContainerInstance.documentElement;\n namespace = root ? root.namespaceURI : getChildNamespace(null, '');\n break;\n }\n\n default:\n {\n var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance;\n var ownNamespace = container.namespaceURI || null;\n type = container.tagName;\n namespace = getChildNamespace(ownNamespace, type);\n break;\n }\n }\n\n {\n var validatedTag = type.toLowerCase();\n var ancestorInfo = updatedAncestorInfo(null, validatedTag);\n return {\n namespace: namespace,\n ancestorInfo: ancestorInfo\n };\n }\n}\nfunction getChildHostContext(parentHostContext, type, rootContainerInstance) {\n {\n var parentHostContextDev = parentHostContext;\n var namespace = getChildNamespace(parentHostContextDev.namespace, type);\n var ancestorInfo = updatedAncestorInfo(parentHostContextDev.ancestorInfo, type);\n return {\n namespace: namespace,\n ancestorInfo: ancestorInfo\n };\n }\n}\nfunction getPublicInstance(instance) {\n return instance;\n}\nfunction prepareForCommit(containerInfo) {\n eventsEnabled = isEnabled();\n selectionInformation = getSelectionInformation();\n var activeInstance = null;\n\n setEnabled(false);\n return activeInstance;\n}\nfunction resetAfterCommit(containerInfo) {\n restoreSelection(selectionInformation);\n setEnabled(eventsEnabled);\n eventsEnabled = null;\n selectionInformation = null;\n}\nfunction createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n var parentNamespace;\n\n {\n // TODO: take namespace into account when validating.\n var hostContextDev = hostContext;\n validateDOMNesting(type, null, hostContextDev.ancestorInfo);\n\n if (typeof props.children === 'string' || typeof props.children === 'number') {\n var string = '' + props.children;\n var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n validateDOMNesting(null, string, ownAncestorInfo);\n }\n\n parentNamespace = hostContextDev.namespace;\n }\n\n var domElement = createElement(type, props, rootContainerInstance, parentNamespace);\n precacheFiberNode(internalInstanceHandle, domElement);\n updateFiberProps(domElement, props);\n return domElement;\n}\nfunction appendInitialChild(parentInstance, child) {\n parentInstance.appendChild(child);\n}\nfunction finalizeInitialChildren(domElement, type, props, rootContainerInstance, hostContext) {\n setInitialProperties(domElement, type, props, rootContainerInstance);\n\n switch (type) {\n case 'button':\n case 'input':\n case 'select':\n case 'textarea':\n return !!props.autoFocus;\n\n case 'img':\n return true;\n\n default:\n return false;\n }\n}\nfunction prepareUpdate(domElement, type, oldProps, newProps, rootContainerInstance, hostContext) {\n {\n var hostContextDev = hostContext;\n\n if (typeof newProps.children !== typeof oldProps.children && (typeof newProps.children === 'string' || typeof newProps.children === 'number')) {\n var string = '' + newProps.children;\n var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n validateDOMNesting(null, string, ownAncestorInfo);\n }\n }\n\n return diffProperties(domElement, type, oldProps, newProps);\n}\nfunction shouldSetTextContent(type, props) {\n return type === 'textarea' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null;\n}\nfunction createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {\n {\n var hostContextDev = hostContext;\n validateDOMNesting(null, text, hostContextDev.ancestorInfo);\n }\n\n var textNode = createTextNode(text, rootContainerInstance);\n precacheFiberNode(internalInstanceHandle, textNode);\n return textNode;\n}\nfunction getCurrentEventPriority() {\n var currentEvent = window.event;\n\n if (currentEvent === undefined) {\n return DefaultEventPriority;\n }\n\n return getEventPriority(currentEvent.type);\n}\n// if a component just imports ReactDOM (e.g. for findDOMNode).\n// Some environments might not have setTimeout or clearTimeout.\n\nvar scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;\nvar cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;\nvar noTimeout = -1;\nvar localPromise = typeof Promise === 'function' ? Promise : undefined; // -------------------\nvar scheduleMicrotask = typeof queueMicrotask === 'function' ? queueMicrotask : typeof localPromise !== 'undefined' ? function (callback) {\n return localPromise.resolve(null).then(callback).catch(handleErrorInNextTick);\n} : scheduleTimeout; // TODO: Determine the best fallback here.\n\nfunction handleErrorInNextTick(error) {\n setTimeout(function () {\n throw error;\n });\n} // -------------------\nfunction commitMount(domElement, type, newProps, internalInstanceHandle) {\n // Despite the naming that might imply otherwise, this method only\n // fires if there is an `Update` effect scheduled during mounting.\n // This happens if `finalizeInitialChildren` returns `true` (which it\n // does to implement the `autoFocus` attribute on the client). But\n // there are also other cases when this might happen (such as patching\n // up text content during hydration mismatch). So we'll check this again.\n switch (type) {\n case 'button':\n case 'input':\n case 'select':\n case 'textarea':\n if (newProps.autoFocus) {\n domElement.focus();\n }\n\n return;\n\n case 'img':\n {\n if (newProps.src) {\n domElement.src = newProps.src;\n }\n\n return;\n }\n }\n}\nfunction commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) {\n // Apply the diff to the DOM node.\n updateProperties(domElement, updatePayload, type, oldProps, newProps); // Update the props handle so that we know which props are the ones with\n // with current event handlers.\n\n updateFiberProps(domElement, newProps);\n}\nfunction resetTextContent(domElement) {\n setTextContent(domElement, '');\n}\nfunction commitTextUpdate(textInstance, oldText, newText) {\n textInstance.nodeValue = newText;\n}\nfunction appendChild(parentInstance, child) {\n parentInstance.appendChild(child);\n}\nfunction appendChildToContainer(container, child) {\n var parentNode;\n\n if (container.nodeType === COMMENT_NODE) {\n parentNode = container.parentNode;\n parentNode.insertBefore(child, container);\n } else {\n parentNode = container;\n parentNode.appendChild(child);\n } // This container might be used for a portal.\n // If something inside a portal is clicked, that click should bubble\n // through the React tree. However, on Mobile Safari the click would\n // never bubble through the *DOM* tree unless an ancestor with onclick\n // event exists. So we wouldn't see it and dispatch it.\n // This is why we ensure that non React root containers have inline onclick\n // defined.\n // https://github.com/facebook/react/issues/11918\n\n\n var reactRootContainer = container._reactRootContainer;\n\n if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(parentNode);\n }\n}\nfunction insertBefore(parentInstance, child, beforeChild) {\n parentInstance.insertBefore(child, beforeChild);\n}\nfunction insertInContainerBefore(container, child, beforeChild) {\n if (container.nodeType === COMMENT_NODE) {\n container.parentNode.insertBefore(child, beforeChild);\n } else {\n container.insertBefore(child, beforeChild);\n }\n}\n\nfunction removeChild(parentInstance, child) {\n parentInstance.removeChild(child);\n}\nfunction removeChildFromContainer(container, child) {\n if (container.nodeType === COMMENT_NODE) {\n container.parentNode.removeChild(child);\n } else {\n container.removeChild(child);\n }\n}\nfunction clearSuspenseBoundary(parentInstance, suspenseInstance) {\n var node = suspenseInstance; // Delete all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n\n var depth = 0;\n\n do {\n var nextNode = node.nextSibling;\n parentInstance.removeChild(node);\n\n if (nextNode && nextNode.nodeType === COMMENT_NODE) {\n var data = nextNode.data;\n\n if (data === SUSPENSE_END_DATA) {\n if (depth === 0) {\n parentInstance.removeChild(nextNode); // Retry if any event replaying was blocked on this.\n\n retryIfBlockedOn(suspenseInstance);\n return;\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_PENDING_START_DATA || data === SUSPENSE_FALLBACK_START_DATA) {\n depth++;\n }\n }\n\n node = nextNode;\n } while (node); // TODO: Warn, we didn't find the end comment boundary.\n // Retry if any event replaying was blocked on this.\n\n\n retryIfBlockedOn(suspenseInstance);\n}\nfunction clearSuspenseBoundaryFromContainer(container, suspenseInstance) {\n if (container.nodeType === COMMENT_NODE) {\n clearSuspenseBoundary(container.parentNode, suspenseInstance);\n } else if (container.nodeType === ELEMENT_NODE) {\n clearSuspenseBoundary(container, suspenseInstance);\n } // Retry if any event replaying was blocked on this.\n\n\n retryIfBlockedOn(container);\n}\nfunction hideInstance(instance) {\n // TODO: Does this work for all element types? What about MathML? Should we\n // pass host context to this method?\n instance = instance;\n var style = instance.style;\n\n if (typeof style.setProperty === 'function') {\n style.setProperty('display', 'none', 'important');\n } else {\n style.display = 'none';\n }\n}\nfunction hideTextInstance(textInstance) {\n textInstance.nodeValue = '';\n}\nfunction unhideInstance(instance, props) {\n instance = instance;\n var styleProp = props[STYLE$1];\n var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null;\n instance.style.display = dangerousStyleValue('display', display);\n}\nfunction unhideTextInstance(textInstance, text) {\n textInstance.nodeValue = text;\n}\nfunction clearContainer(container) {\n if (container.nodeType === ELEMENT_NODE) {\n container.textContent = '';\n } else if (container.nodeType === DOCUMENT_NODE) {\n if (container.documentElement) {\n container.removeChild(container.documentElement);\n }\n }\n} // -------------------\nfunction canHydrateInstance(instance, type, props) {\n if (instance.nodeType !== ELEMENT_NODE || type.toLowerCase() !== instance.nodeName.toLowerCase()) {\n return null;\n } // This has now been refined to an element node.\n\n\n return instance;\n}\nfunction canHydrateTextInstance(instance, text) {\n if (text === '' || instance.nodeType !== TEXT_NODE) {\n // Empty strings are not parsed by HTML so there won't be a correct match here.\n return null;\n } // This has now been refined to a text node.\n\n\n return instance;\n}\nfunction canHydrateSuspenseInstance(instance) {\n if (instance.nodeType !== COMMENT_NODE) {\n // Empty strings are not parsed by HTML so there won't be a correct match here.\n return null;\n } // This has now been refined to a suspense node.\n\n\n return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n return instance.data === SUSPENSE_PENDING_START_DATA;\n}\nfunction isSuspenseInstanceFallback(instance) {\n return instance.data === SUSPENSE_FALLBACK_START_DATA;\n}\nfunction getSuspenseInstanceFallbackErrorDetails(instance) {\n var dataset = instance.nextSibling && instance.nextSibling.dataset;\n var digest, message, stack;\n\n if (dataset) {\n digest = dataset.dgst;\n\n {\n message = dataset.msg;\n stack = dataset.stck;\n }\n }\n\n {\n return {\n message: message,\n digest: digest,\n stack: stack\n };\n } // let value = {message: undefined, hash: undefined};\n // const nextSibling = instance.nextSibling;\n // if (nextSibling) {\n // const dataset = ((nextSibling: any): HTMLTemplateElement).dataset;\n // value.message = dataset.msg;\n // value.hash = dataset.hash;\n // if (true) {\n // value.stack = dataset.stack;\n // }\n // }\n // return value;\n\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n instance._reactRetry = callback;\n}\n\nfunction getNextHydratable(node) {\n // Skip non-hydratable nodes.\n for (; node != null; node = node.nextSibling) {\n var nodeType = node.nodeType;\n\n if (nodeType === ELEMENT_NODE || nodeType === TEXT_NODE) {\n break;\n }\n\n if (nodeType === COMMENT_NODE) {\n var nodeData = node.data;\n\n if (nodeData === SUSPENSE_START_DATA || nodeData === SUSPENSE_FALLBACK_START_DATA || nodeData === SUSPENSE_PENDING_START_DATA) {\n break;\n }\n\n if (nodeData === SUSPENSE_END_DATA) {\n return null;\n }\n }\n }\n\n return node;\n}\n\nfunction getNextHydratableSibling(instance) {\n return getNextHydratable(instance.nextSibling);\n}\nfunction getFirstHydratableChild(parentInstance) {\n return getNextHydratable(parentInstance.firstChild);\n}\nfunction getFirstHydratableChildWithinContainer(parentContainer) {\n return getNextHydratable(parentContainer.firstChild);\n}\nfunction getFirstHydratableChildWithinSuspenseInstance(parentInstance) {\n return getNextHydratable(parentInstance.nextSibling);\n}\nfunction hydrateInstance(instance, type, props, rootContainerInstance, hostContext, internalInstanceHandle, shouldWarnDev) {\n precacheFiberNode(internalInstanceHandle, instance); // TODO: Possibly defer this until the commit phase where all the events\n // get attached.\n\n updateFiberProps(instance, props);\n var parentNamespace;\n\n {\n var hostContextDev = hostContext;\n parentNamespace = hostContextDev.namespace;\n } // TODO: Temporary hack to check if we're in a concurrent root. We can delete\n // when the legacy root API is removed.\n\n\n var isConcurrentMode = (internalInstanceHandle.mode & ConcurrentMode) !== NoMode;\n return diffHydratedProperties(instance, type, props, parentNamespace, rootContainerInstance, isConcurrentMode, shouldWarnDev);\n}\nfunction hydrateTextInstance(textInstance, text, internalInstanceHandle, shouldWarnDev) {\n precacheFiberNode(internalInstanceHandle, textInstance); // TODO: Temporary hack to check if we're in a concurrent root. We can delete\n // when the legacy root API is removed.\n\n var isConcurrentMode = (internalInstanceHandle.mode & ConcurrentMode) !== NoMode;\n return diffHydratedText(textInstance, text);\n}\nfunction hydrateSuspenseInstance(suspenseInstance, internalInstanceHandle) {\n precacheFiberNode(internalInstanceHandle, suspenseInstance);\n}\nfunction getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {\n var node = suspenseInstance.nextSibling; // Skip past all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n\n var depth = 0;\n\n while (node) {\n if (node.nodeType === COMMENT_NODE) {\n var data = node.data;\n\n if (data === SUSPENSE_END_DATA) {\n if (depth === 0) {\n return getNextHydratableSibling(node);\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n depth++;\n }\n }\n\n node = node.nextSibling;\n } // TODO: Warn, we didn't find the end comment boundary.\n\n\n return null;\n} // Returns the SuspenseInstance if this node is a direct child of a\n// SuspenseInstance. I.e. if its previous sibling is a Comment with\n// SUSPENSE_x_START_DATA. Otherwise, null.\n\nfunction getParentSuspenseInstance(targetInstance) {\n var node = targetInstance.previousSibling; // Skip past all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n\n var depth = 0;\n\n while (node) {\n if (node.nodeType === COMMENT_NODE) {\n var data = node.data;\n\n if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n if (depth === 0) {\n return node;\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_END_DATA) {\n depth++;\n }\n }\n\n node = node.previousSibling;\n }\n\n return null;\n}\nfunction commitHydratedContainer(container) {\n // Retry if any event replaying was blocked on this.\n retryIfBlockedOn(container);\n}\nfunction commitHydratedSuspenseInstance(suspenseInstance) {\n // Retry if any event replaying was blocked on this.\n retryIfBlockedOn(suspenseInstance);\n}\nfunction shouldDeleteUnhydratedTailInstances(parentType) {\n return parentType !== 'head' && parentType !== 'body';\n}\nfunction didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text, isConcurrentMode) {\n var shouldWarnDev = true;\n checkForUnmatchedText(textInstance.nodeValue, text, isConcurrentMode, shouldWarnDev);\n}\nfunction didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text, isConcurrentMode) {\n if (parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n var shouldWarnDev = true;\n checkForUnmatchedText(textInstance.nodeValue, text, isConcurrentMode, shouldWarnDev);\n }\n}\nfunction didNotHydrateInstanceWithinContainer(parentContainer, instance) {\n {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentContainer, instance);\n } else if (instance.nodeType === COMMENT_NODE) ; else {\n warnForDeletedHydratableText(parentContainer, instance);\n }\n }\n}\nfunction didNotHydrateInstanceWithinSuspenseInstance(parentInstance, instance) {\n {\n // $FlowFixMe: Only Element or Document can be parent nodes.\n var parentNode = parentInstance.parentNode;\n\n if (parentNode !== null) {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentNode, instance);\n } else if (instance.nodeType === COMMENT_NODE) ; else {\n warnForDeletedHydratableText(parentNode, instance);\n }\n }\n }\n}\nfunction didNotHydrateInstance(parentType, parentProps, parentInstance, instance, isConcurrentMode) {\n {\n if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentInstance, instance);\n } else if (instance.nodeType === COMMENT_NODE) ; else {\n warnForDeletedHydratableText(parentInstance, instance);\n }\n }\n }\n}\nfunction didNotFindHydratableInstanceWithinContainer(parentContainer, type, props) {\n {\n warnForInsertedHydratedElement(parentContainer, type);\n }\n}\nfunction didNotFindHydratableTextInstanceWithinContainer(parentContainer, text) {\n {\n warnForInsertedHydratedText(parentContainer, text);\n }\n}\nfunction didNotFindHydratableInstanceWithinSuspenseInstance(parentInstance, type, props) {\n {\n // $FlowFixMe: Only Element or Document can be parent nodes.\n var parentNode = parentInstance.parentNode;\n if (parentNode !== null) warnForInsertedHydratedElement(parentNode, type);\n }\n}\nfunction didNotFindHydratableTextInstanceWithinSuspenseInstance(parentInstance, text) {\n {\n // $FlowFixMe: Only Element or Document can be parent nodes.\n var parentNode = parentInstance.parentNode;\n if (parentNode !== null) warnForInsertedHydratedText(parentNode, text);\n }\n}\nfunction didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props, isConcurrentMode) {\n {\n if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n warnForInsertedHydratedElement(parentInstance, type);\n }\n }\n}\nfunction didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text, isConcurrentMode) {\n {\n if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n warnForInsertedHydratedText(parentInstance, text);\n }\n }\n}\nfunction errorHydratingContainer(parentContainer) {\n {\n // TODO: This gets logged by onRecoverableError, too, so we should be\n // able to remove it.\n error('An error occurred during hydration. The server HTML was replaced with client content in <%s>.', parentContainer.nodeName.toLowerCase());\n }\n}\nfunction preparePortalMount(portalInstance) {\n listenToAllSupportedEvents(portalInstance);\n}\n\nvar randomKey = Math.random().toString(36).slice(2);\nvar internalInstanceKey = '__reactFiber$' + randomKey;\nvar internalPropsKey = '__reactProps$' + randomKey;\nvar internalContainerInstanceKey = '__reactContainer$' + randomKey;\nvar internalEventHandlersKey = '__reactEvents$' + randomKey;\nvar internalEventHandlerListenersKey = '__reactListeners$' + randomKey;\nvar internalEventHandlesSetKey = '__reactHandles$' + randomKey;\nfunction detachDeletedInstance(node) {\n // TODO: This function is only called on host components. I don't think all of\n // these fields are relevant.\n delete node[internalInstanceKey];\n delete node[internalPropsKey];\n delete node[internalEventHandlersKey];\n delete node[internalEventHandlerListenersKey];\n delete node[internalEventHandlesSetKey];\n}\nfunction precacheFiberNode(hostInst, node) {\n node[internalInstanceKey] = hostInst;\n}\nfunction markContainerAsRoot(hostRoot, node) {\n node[internalContainerInstanceKey] = hostRoot;\n}\nfunction unmarkContainerAsRoot(node) {\n node[internalContainerInstanceKey] = null;\n}\nfunction isContainerMarkedAsRoot(node) {\n return !!node[internalContainerInstanceKey];\n} // Given a DOM node, return the closest HostComponent or HostText fiber ancestor.\n// If the target node is part of a hydrated or not yet rendered subtree, then\n// this may also return a SuspenseComponent or HostRoot to indicate that.\n// Conceptually the HostRoot fiber is a child of the Container node. So if you\n// pass the Container node as the targetNode, you will not actually get the\n// HostRoot back. To get to the HostRoot, you need to pass a child of it.\n// The same thing applies to Suspense boundaries.\n\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n\n if (targetInst) {\n // Don't return HostRoot or SuspenseComponent here.\n return targetInst;\n } // If the direct event target isn't a React owned DOM node, we need to look\n // to see if one of its parents is a React owned DOM node.\n\n\n var parentNode = targetNode.parentNode;\n\n while (parentNode) {\n // We'll check if this is a container root that could include\n // React nodes in the future. We need to check this first because\n // if we're a child of a dehydrated container, we need to first\n // find that inner container before moving on to finding the parent\n // instance. Note that we don't check this field on the targetNode\n // itself because the fibers are conceptually between the container\n // node and the first child. It isn't surrounding the container node.\n // If it's not a container, we check if it's an instance.\n targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey];\n\n if (targetInst) {\n // Since this wasn't the direct target of the event, we might have\n // stepped past dehydrated DOM nodes to get here. However they could\n // also have been non-React nodes. We need to answer which one.\n // If we the instance doesn't have any children, then there can't be\n // a nested suspense boundary within it. So we can use this as a fast\n // bailout. Most of the time, when people add non-React children to\n // the tree, it is using a ref to a child-less DOM node.\n // Normally we'd only need to check one of the fibers because if it\n // has ever gone from having children to deleting them or vice versa\n // it would have deleted the dehydrated boundary nested inside already.\n // However, since the HostRoot starts out with an alternate it might\n // have one on the alternate so we need to check in case this was a\n // root.\n var alternate = targetInst.alternate;\n\n if (targetInst.child !== null || alternate !== null && alternate.child !== null) {\n // Next we need to figure out if the node that skipped past is\n // nested within a dehydrated boundary and if so, which one.\n var suspenseInstance = getParentSuspenseInstance(targetNode);\n\n while (suspenseInstance !== null) {\n // We found a suspense instance. That means that we haven't\n // hydrated it yet. Even though we leave the comments in the\n // DOM after hydrating, and there are boundaries in the DOM\n // that could already be hydrated, we wouldn't have found them\n // through this pass since if the target is hydrated it would\n // have had an internalInstanceKey on it.\n // Let's get the fiber associated with the SuspenseComponent\n // as the deepest instance.\n var targetSuspenseInst = suspenseInstance[internalInstanceKey];\n\n if (targetSuspenseInst) {\n return targetSuspenseInst;\n } // If we don't find a Fiber on the comment, it might be because\n // we haven't gotten to hydrate it yet. There might still be a\n // parent boundary that hasn't above this one so we need to find\n // the outer most that is known.\n\n\n suspenseInstance = getParentSuspenseInstance(suspenseInstance); // If we don't find one, then that should mean that the parent\n // host component also hasn't hydrated yet. We can return it\n // below since it will bail out on the isMounted check later.\n }\n }\n\n return targetInst;\n }\n\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n\n return null;\n}\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\n\nfunction getInstanceFromNode(node) {\n var inst = node[internalInstanceKey] || node[internalContainerInstanceKey];\n\n if (inst) {\n if (inst.tag === HostComponent || inst.tag === HostText || inst.tag === SuspenseComponent || inst.tag === HostRoot) {\n return inst;\n } else {\n return null;\n }\n }\n\n return null;\n}\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\n\nfunction getNodeFromInstance(inst) {\n if (inst.tag === HostComponent || inst.tag === HostText) {\n // In Fiber this, is just the state node right now. We assume it will be\n // a host component or host text.\n return inst.stateNode;\n } // Without this first invariant, passing a non-DOM-component triggers the next\n // invariant for a missing parent, which is super confusing.\n\n\n throw new Error('getNodeFromInstance: Invalid argument.');\n}\nfunction getFiberCurrentPropsFromNode(node) {\n return node[internalPropsKey] || null;\n}\nfunction updateFiberProps(node, props) {\n node[internalPropsKey] = props;\n}\nfunction getEventListenerSet(node) {\n var elementListenerSet = node[internalEventHandlersKey];\n\n if (elementListenerSet === undefined) {\n elementListenerSet = node[internalEventHandlersKey] = new Set();\n }\n\n return elementListenerSet;\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar valueStack = [];\nvar fiberStack;\n\n{\n fiberStack = [];\n}\n\nvar index = -1;\n\nfunction createCursor(defaultValue) {\n return {\n current: defaultValue\n };\n}\n\nfunction pop(cursor, fiber) {\n if (index < 0) {\n {\n error('Unexpected pop.');\n }\n\n return;\n }\n\n {\n if (fiber !== fiberStack[index]) {\n error('Unexpected Fiber popped.');\n }\n }\n\n cursor.current = valueStack[index];\n valueStack[index] = null;\n\n {\n fiberStack[index] = null;\n }\n\n index--;\n}\n\nfunction push(cursor, value, fiber) {\n index++;\n valueStack[index] = cursor.current;\n\n {\n fiberStack[index] = fiber;\n }\n\n cursor.current = value;\n}\n\nvar warnedAboutMissingGetChildContext;\n\n{\n warnedAboutMissingGetChildContext = {};\n}\n\nvar emptyContextObject = {};\n\n{\n Object.freeze(emptyContextObject);\n} // A cursor to the current merged context object on the stack.\n\n\nvar contextStackCursor = createCursor(emptyContextObject); // A cursor to a boolean indicating whether the context has changed.\n\nvar didPerformWorkStackCursor = createCursor(false); // Keep track of the previous context object that was on the stack.\n// We use this to get access to the parent context after we have already\n// pushed the next context provider, and now need to merge their contexts.\n\nvar previousContext = emptyContextObject;\n\nfunction getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) {\n {\n if (didPushOwnContextIfProvider && isContextProvider(Component)) {\n // If the fiber is a context provider itself, when we read its context\n // we may have already pushed its own child context on the stack. A context\n // provider should not \"see\" its own child context. Therefore we read the\n // previous (parent) context instead for a context provider.\n return previousContext;\n }\n\n return contextStackCursor.current;\n }\n}\n\nfunction cacheContext(workInProgress, unmaskedContext, maskedContext) {\n {\n var instance = workInProgress.stateNode;\n instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;\n instance.__reactInternalMemoizedMaskedChildContext = maskedContext;\n }\n}\n\nfunction getMaskedContext(workInProgress, unmaskedContext) {\n {\n var type = workInProgress.type;\n var contextTypes = type.contextTypes;\n\n if (!contextTypes) {\n return emptyContextObject;\n } // Avoid recreating masked context unless unmasked context has changed.\n // Failing to do this will result in unnecessary calls to componentWillReceiveProps.\n // This may trigger infinite loops if componentWillReceiveProps calls setState.\n\n\n var instance = workInProgress.stateNode;\n\n if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {\n return instance.__reactInternalMemoizedMaskedChildContext;\n }\n\n var context = {};\n\n for (var key in contextTypes) {\n context[key] = unmaskedContext[key];\n }\n\n {\n var name = getComponentNameFromFiber(workInProgress) || 'Unknown';\n checkPropTypes(contextTypes, context, 'context', name);\n } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // Context is created before the class component is instantiated so check for instance.\n\n\n if (instance) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return context;\n }\n}\n\nfunction hasContextChanged() {\n {\n return didPerformWorkStackCursor.current;\n }\n}\n\nfunction isContextProvider(type) {\n {\n var childContextTypes = type.childContextTypes;\n return childContextTypes !== null && childContextTypes !== undefined;\n }\n}\n\nfunction popContext(fiber) {\n {\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n }\n}\n\nfunction popTopLevelContextObject(fiber) {\n {\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n }\n}\n\nfunction pushTopLevelContextObject(fiber, context, didChange) {\n {\n if (contextStackCursor.current !== emptyContextObject) {\n throw new Error('Unexpected context found on stack. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n\n push(contextStackCursor, context, fiber);\n push(didPerformWorkStackCursor, didChange, fiber);\n }\n}\n\nfunction processChildContext(fiber, type, parentContext) {\n {\n var instance = fiber.stateNode;\n var childContextTypes = type.childContextTypes; // TODO (bvaughn) Replace this behavior with an invariant() in the future.\n // It has only been added in Fiber to match the (unintentional) behavior in Stack.\n\n if (typeof instance.getChildContext !== 'function') {\n {\n var componentName = getComponentNameFromFiber(fiber) || 'Unknown';\n\n if (!warnedAboutMissingGetChildContext[componentName]) {\n warnedAboutMissingGetChildContext[componentName] = true;\n\n error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);\n }\n }\n\n return parentContext;\n }\n\n var childContext = instance.getChildContext();\n\n for (var contextKey in childContext) {\n if (!(contextKey in childContextTypes)) {\n throw new Error((getComponentNameFromFiber(fiber) || 'Unknown') + \".getChildContext(): key \\\"\" + contextKey + \"\\\" is not defined in childContextTypes.\");\n }\n }\n\n {\n var name = getComponentNameFromFiber(fiber) || 'Unknown';\n checkPropTypes(childContextTypes, childContext, 'child context', name);\n }\n\n return assign({}, parentContext, childContext);\n }\n}\n\nfunction pushContextProvider(workInProgress) {\n {\n var instance = workInProgress.stateNode; // We push the context as early as possible to ensure stack integrity.\n // If the instance does not exist yet, we will push null at first,\n // and replace it on the stack later when invalidating the context.\n\n var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject; // Remember the parent context so we can merge with it later.\n // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.\n\n previousContext = contextStackCursor.current;\n push(contextStackCursor, memoizedMergedChildContext, workInProgress);\n push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);\n return true;\n }\n}\n\nfunction invalidateContextProvider(workInProgress, type, didChange) {\n {\n var instance = workInProgress.stateNode;\n\n if (!instance) {\n throw new Error('Expected to have an instance by this point. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n\n if (didChange) {\n // Merge parent and own context.\n // Skip this if we're not updating due to sCU.\n // This avoids unnecessarily recomputing memoized values.\n var mergedContext = processChildContext(workInProgress, type, previousContext);\n instance.__reactInternalMemoizedMergedChildContext = mergedContext; // Replace the old (or empty) context with the new one.\n // It is important to unwind the context in the reverse order.\n\n pop(didPerformWorkStackCursor, workInProgress);\n pop(contextStackCursor, workInProgress); // Now push the new context and mark that it has changed.\n\n push(contextStackCursor, mergedContext, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n } else {\n pop(didPerformWorkStackCursor, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n }\n }\n}\n\nfunction findCurrentUnmaskedContext(fiber) {\n {\n // Currently this is only used with renderSubtreeIntoContainer; not sure if it\n // makes sense elsewhere\n if (!isFiberMounted(fiber) || fiber.tag !== ClassComponent) {\n throw new Error('Expected subtree parent to be a mounted class component. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n\n var node = fiber;\n\n do {\n switch (node.tag) {\n case HostRoot:\n return node.stateNode.context;\n\n case ClassComponent:\n {\n var Component = node.type;\n\n if (isContextProvider(Component)) {\n return node.stateNode.__reactInternalMemoizedMergedChildContext;\n }\n\n break;\n }\n }\n\n node = node.return;\n } while (node !== null);\n\n throw new Error('Found unexpected detached subtree parent. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n}\n\nvar LegacyRoot = 0;\nvar ConcurrentRoot = 1;\n\nvar syncQueue = null;\nvar includesLegacySyncCallbacks = false;\nvar isFlushingSyncQueue = false;\nfunction scheduleSyncCallback(callback) {\n // Push this callback into an internal queue. We'll flush these either in\n // the next tick, or earlier if something calls `flushSyncCallbackQueue`.\n if (syncQueue === null) {\n syncQueue = [callback];\n } else {\n // Push onto existing queue. Don't need to schedule a callback because\n // we already scheduled one when we created the queue.\n syncQueue.push(callback);\n }\n}\nfunction scheduleLegacySyncCallback(callback) {\n includesLegacySyncCallbacks = true;\n scheduleSyncCallback(callback);\n}\nfunction flushSyncCallbacksOnlyInLegacyMode() {\n // Only flushes the queue if there's a legacy sync callback scheduled.\n // TODO: There's only a single type of callback: performSyncOnWorkOnRoot. So\n // it might make more sense for the queue to be a list of roots instead of a\n // list of generic callbacks. Then we can have two: one for legacy roots, one\n // for concurrent roots. And this method would only flush the legacy ones.\n if (includesLegacySyncCallbacks) {\n flushSyncCallbacks();\n }\n}\nfunction flushSyncCallbacks() {\n if (!isFlushingSyncQueue && syncQueue !== null) {\n // Prevent re-entrance.\n isFlushingSyncQueue = true;\n var i = 0;\n var previousUpdatePriority = getCurrentUpdatePriority();\n\n try {\n var isSync = true;\n var queue = syncQueue; // TODO: Is this necessary anymore? The only user code that runs in this\n // queue is in the render or commit phases.\n\n setCurrentUpdatePriority(DiscreteEventPriority);\n\n for (; i < queue.length; i++) {\n var callback = queue[i];\n\n do {\n callback = callback(isSync);\n } while (callback !== null);\n }\n\n syncQueue = null;\n includesLegacySyncCallbacks = false;\n } catch (error) {\n // If something throws, leave the remaining callbacks on the queue.\n if (syncQueue !== null) {\n syncQueue = syncQueue.slice(i + 1);\n } // Resume flushing in the next tick\n\n\n scheduleCallback(ImmediatePriority, flushSyncCallbacks);\n throw error;\n } finally {\n setCurrentUpdatePriority(previousUpdatePriority);\n isFlushingSyncQueue = false;\n }\n }\n\n return null;\n}\n\n// TODO: Use the unified fiber stack module instead of this local one?\n// Intentionally not using it yet to derisk the initial implementation, because\n// the way we push/pop these values is a bit unusual. If there's a mistake, I'd\n// rather the ids be wrong than crash the whole reconciler.\nvar forkStack = [];\nvar forkStackIndex = 0;\nvar treeForkProvider = null;\nvar treeForkCount = 0;\nvar idStack = [];\nvar idStackIndex = 0;\nvar treeContextProvider = null;\nvar treeContextId = 1;\nvar treeContextOverflow = '';\nfunction isForkedChild(workInProgress) {\n warnIfNotHydrating();\n return (workInProgress.flags & Forked) !== NoFlags;\n}\nfunction getForksAtLevel(workInProgress) {\n warnIfNotHydrating();\n return treeForkCount;\n}\nfunction getTreeId() {\n var overflow = treeContextOverflow;\n var idWithLeadingBit = treeContextId;\n var id = idWithLeadingBit & ~getLeadingBit(idWithLeadingBit);\n return id.toString(32) + overflow;\n}\nfunction pushTreeFork(workInProgress, totalChildren) {\n // This is called right after we reconcile an array (or iterator) of child\n // fibers, because that's the only place where we know how many children in\n // the whole set without doing extra work later, or storing addtional\n // information on the fiber.\n //\n // That's why this function is separate from pushTreeId — it's called during\n // the render phase of the fork parent, not the child, which is where we push\n // the other context values.\n //\n // In the Fizz implementation this is much simpler because the child is\n // rendered in the same callstack as the parent.\n //\n // It might be better to just add a `forks` field to the Fiber type. It would\n // make this module simpler.\n warnIfNotHydrating();\n forkStack[forkStackIndex++] = treeForkCount;\n forkStack[forkStackIndex++] = treeForkProvider;\n treeForkProvider = workInProgress;\n treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n warnIfNotHydrating();\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextProvider = workInProgress;\n var baseIdWithLeadingBit = treeContextId;\n var baseOverflow = treeContextOverflow; // The leftmost 1 marks the end of the sequence, non-inclusive. It's not part\n // of the id; we use it to account for leading 0s.\n\n var baseLength = getBitLength(baseIdWithLeadingBit) - 1;\n var baseId = baseIdWithLeadingBit & ~(1 << baseLength);\n var slot = index + 1;\n var length = getBitLength(totalChildren) + baseLength; // 30 is the max length we can store without overflowing, taking into\n // consideration the leading 1 we use to mark the end of the sequence.\n\n if (length > 30) {\n // We overflowed the bitwise-safe range. Fall back to slower algorithm.\n // This branch assumes the length of the base id is greater than 5; it won't\n // work for smaller ids, because you need 5 bits per character.\n //\n // We encode the id in multiple steps: first the base id, then the\n // remaining digits.\n //\n // Each 5 bit sequence corresponds to a single base 32 character. So for\n // example, if the current id is 23 bits long, we can convert 20 of those\n // bits into a string of 4 characters, with 3 bits left over.\n //\n // First calculate how many bits in the base id represent a complete\n // sequence of characters.\n var numberOfOverflowBits = baseLength - baseLength % 5; // Then create a bitmask that selects only those bits.\n\n var newOverflowBits = (1 << numberOfOverflowBits) - 1; // Select the bits, and convert them to a base 32 string.\n\n var newOverflow = (baseId & newOverflowBits).toString(32); // Now we can remove those bits from the base id.\n\n var restOfBaseId = baseId >> numberOfOverflowBits;\n var restOfBaseLength = baseLength - numberOfOverflowBits; // Finally, encode the rest of the bits using the normal algorithm. Because\n // we made more room, this time it won't overflow.\n\n var restOfLength = getBitLength(totalChildren) + restOfBaseLength;\n var restOfNewBits = slot << restOfBaseLength;\n var id = restOfNewBits | restOfBaseId;\n var overflow = newOverflow + baseOverflow;\n treeContextId = 1 << restOfLength | id;\n treeContextOverflow = overflow;\n } else {\n // Normal path\n var newBits = slot << baseLength;\n\n var _id = newBits | baseId;\n\n var _overflow = baseOverflow;\n treeContextId = 1 << length | _id;\n treeContextOverflow = _overflow;\n }\n}\nfunction pushMaterializedTreeId(workInProgress) {\n warnIfNotHydrating(); // This component materialized an id. This will affect any ids that appear\n // in its children.\n\n var returnFiber = workInProgress.return;\n\n if (returnFiber !== null) {\n var numberOfForks = 1;\n var slotIndex = 0;\n pushTreeFork(workInProgress, numberOfForks);\n pushTreeId(workInProgress, numberOfForks, slotIndex);\n }\n}\n\nfunction getBitLength(number) {\n return 32 - clz32(number);\n}\n\nfunction getLeadingBit(id) {\n return 1 << getBitLength(id) - 1;\n}\n\nfunction popTreeContext(workInProgress) {\n // Restore the previous values.\n // This is a bit more complicated than other context-like modules in Fiber\n // because the same Fiber may appear on the stack multiple times and for\n // different reasons. We have to keep popping until the work-in-progress is\n // no longer at the top of the stack.\n while (workInProgress === treeForkProvider) {\n treeForkProvider = forkStack[--forkStackIndex];\n forkStack[forkStackIndex] = null;\n treeForkCount = forkStack[--forkStackIndex];\n forkStack[forkStackIndex] = null;\n }\n\n while (workInProgress === treeContextProvider) {\n treeContextProvider = idStack[--idStackIndex];\n idStack[idStackIndex] = null;\n treeContextOverflow = idStack[--idStackIndex];\n idStack[idStackIndex] = null;\n treeContextId = idStack[--idStackIndex];\n idStack[idStackIndex] = null;\n }\n}\nfunction getSuspendedTreeContext() {\n warnIfNotHydrating();\n\n if (treeContextProvider !== null) {\n return {\n id: treeContextId,\n overflow: treeContextOverflow\n };\n } else {\n return null;\n }\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n warnIfNotHydrating();\n idStack[idStackIndex++] = treeContextId;\n idStack[idStackIndex++] = treeContextOverflow;\n idStack[idStackIndex++] = treeContextProvider;\n treeContextId = suspendedContext.id;\n treeContextOverflow = suspendedContext.overflow;\n treeContextProvider = workInProgress;\n}\n\nfunction warnIfNotHydrating() {\n {\n if (!getIsHydrating()) {\n error('Expected to be hydrating. This is a bug in React. Please file ' + 'an issue.');\n }\n }\n}\n\n// This may have been an insertion or a hydration.\n\nvar hydrationParentFiber = null;\nvar nextHydratableInstance = null;\nvar isHydrating = false; // This flag allows for warning supression when we expect there to be mismatches\n// due to earlier mismatches or a suspended fiber.\n\nvar didSuspendOrErrorDEV = false; // Hydration errors that were thrown inside this boundary\n\nvar hydrationErrors = null;\n\nfunction warnIfHydrating() {\n {\n if (isHydrating) {\n error('We should not be hydrating here. This is a bug in React. Please file a bug.');\n }\n }\n}\n\nfunction markDidThrowWhileHydratingDEV() {\n {\n didSuspendOrErrorDEV = true;\n }\n}\nfunction didSuspendOrErrorWhileHydratingDEV() {\n {\n return didSuspendOrErrorDEV;\n }\n}\n\nfunction enterHydrationState(fiber) {\n\n var parentInstance = fiber.stateNode.containerInfo;\n nextHydratableInstance = getFirstHydratableChildWithinContainer(parentInstance);\n hydrationParentFiber = fiber;\n isHydrating = true;\n hydrationErrors = null;\n didSuspendOrErrorDEV = false;\n return true;\n}\n\nfunction reenterHydrationStateFromDehydratedSuspenseInstance(fiber, suspenseInstance, treeContext) {\n\n nextHydratableInstance = getFirstHydratableChildWithinSuspenseInstance(suspenseInstance);\n hydrationParentFiber = fiber;\n isHydrating = true;\n hydrationErrors = null;\n didSuspendOrErrorDEV = false;\n\n if (treeContext !== null) {\n restoreSuspendedTreeContext(fiber, treeContext);\n }\n\n return true;\n}\n\nfunction warnUnhydratedInstance(returnFiber, instance) {\n {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n didNotHydrateInstanceWithinContainer(returnFiber.stateNode.containerInfo, instance);\n break;\n }\n\n case HostComponent:\n {\n var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance, // TODO: Delete this argument when we remove the legacy root API.\n isConcurrentMode);\n break;\n }\n\n case SuspenseComponent:\n {\n var suspenseState = returnFiber.memoizedState;\n if (suspenseState.dehydrated !== null) didNotHydrateInstanceWithinSuspenseInstance(suspenseState.dehydrated, instance);\n break;\n }\n }\n }\n}\n\nfunction deleteHydratableInstance(returnFiber, instance) {\n warnUnhydratedInstance(returnFiber, instance);\n var childToDelete = createFiberFromHostInstanceForDeletion();\n childToDelete.stateNode = instance;\n childToDelete.return = returnFiber;\n var deletions = returnFiber.deletions;\n\n if (deletions === null) {\n returnFiber.deletions = [childToDelete];\n returnFiber.flags |= ChildDeletion;\n } else {\n deletions.push(childToDelete);\n }\n}\n\nfunction warnNonhydratedInstance(returnFiber, fiber) {\n {\n if (didSuspendOrErrorDEV) {\n // Inside a boundary that already suspended. We're currently rendering the\n // siblings of a suspended node. The mismatch may be due to the missing\n // data, so it's probably a false positive.\n return;\n }\n\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n\n switch (fiber.tag) {\n case HostComponent:\n var type = fiber.type;\n var props = fiber.pendingProps;\n didNotFindHydratableInstanceWithinContainer(parentContainer, type);\n break;\n\n case HostText:\n var text = fiber.pendingProps;\n didNotFindHydratableTextInstanceWithinContainer(parentContainer, text);\n break;\n }\n\n break;\n }\n\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n\n switch (fiber.tag) {\n case HostComponent:\n {\n var _type = fiber.type;\n var _props = fiber.pendingProps;\n var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type, _props, // TODO: Delete this argument when we remove the legacy root API.\n isConcurrentMode);\n break;\n }\n\n case HostText:\n {\n var _text = fiber.pendingProps;\n\n var _isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n\n didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text, // TODO: Delete this argument when we remove the legacy root API.\n _isConcurrentMode);\n break;\n }\n }\n\n break;\n }\n\n case SuspenseComponent:\n {\n var suspenseState = returnFiber.memoizedState;\n var _parentInstance = suspenseState.dehydrated;\n if (_parentInstance !== null) switch (fiber.tag) {\n case HostComponent:\n var _type2 = fiber.type;\n var _props2 = fiber.pendingProps;\n didNotFindHydratableInstanceWithinSuspenseInstance(_parentInstance, _type2);\n break;\n\n case HostText:\n var _text2 = fiber.pendingProps;\n didNotFindHydratableTextInstanceWithinSuspenseInstance(_parentInstance, _text2);\n break;\n }\n break;\n }\n\n default:\n return;\n }\n }\n}\n\nfunction insertNonHydratedInstance(returnFiber, fiber) {\n fiber.flags = fiber.flags & ~Hydrating | Placement;\n warnNonhydratedInstance(returnFiber, fiber);\n}\n\nfunction tryHydrate(fiber, nextInstance) {\n switch (fiber.tag) {\n case HostComponent:\n {\n var type = fiber.type;\n var props = fiber.pendingProps;\n var instance = canHydrateInstance(nextInstance, type);\n\n if (instance !== null) {\n fiber.stateNode = instance;\n hydrationParentFiber = fiber;\n nextHydratableInstance = getFirstHydratableChild(instance);\n return true;\n }\n\n return false;\n }\n\n case HostText:\n {\n var text = fiber.pendingProps;\n var textInstance = canHydrateTextInstance(nextInstance, text);\n\n if (textInstance !== null) {\n fiber.stateNode = textInstance;\n hydrationParentFiber = fiber; // Text Instances don't have children so there's nothing to hydrate.\n\n nextHydratableInstance = null;\n return true;\n }\n\n return false;\n }\n\n case SuspenseComponent:\n {\n var suspenseInstance = canHydrateSuspenseInstance(nextInstance);\n\n if (suspenseInstance !== null) {\n var suspenseState = {\n dehydrated: suspenseInstance,\n treeContext: getSuspendedTreeContext(),\n retryLane: OffscreenLane\n };\n fiber.memoizedState = suspenseState; // Store the dehydrated fragment as a child fiber.\n // This simplifies the code for getHostSibling and deleting nodes,\n // since it doesn't have to consider all Suspense boundaries and\n // check if they're dehydrated ones or not.\n\n var dehydratedFragment = createFiberFromDehydratedFragment(suspenseInstance);\n dehydratedFragment.return = fiber;\n fiber.child = dehydratedFragment;\n hydrationParentFiber = fiber; // While a Suspense Instance does have children, we won't step into\n // it during the first pass. Instead, we'll reenter it later.\n\n nextHydratableInstance = null;\n return true;\n }\n\n return false;\n }\n\n default:\n return false;\n }\n}\n\nfunction shouldClientRenderOnMismatch(fiber) {\n return (fiber.mode & ConcurrentMode) !== NoMode && (fiber.flags & DidCapture) === NoFlags;\n}\n\nfunction throwOnHydrationMismatch(fiber) {\n throw new Error('Hydration failed because the initial UI does not match what was ' + 'rendered on the server.');\n}\n\nfunction tryToClaimNextHydratableInstance(fiber) {\n if (!isHydrating) {\n return;\n }\n\n var nextInstance = nextHydratableInstance;\n\n if (!nextInstance) {\n if (shouldClientRenderOnMismatch(fiber)) {\n warnNonhydratedInstance(hydrationParentFiber, fiber);\n throwOnHydrationMismatch();\n } // Nothing to hydrate. Make it an insertion.\n\n\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n return;\n }\n\n var firstAttemptedInstance = nextInstance;\n\n if (!tryHydrate(fiber, nextInstance)) {\n if (shouldClientRenderOnMismatch(fiber)) {\n warnNonhydratedInstance(hydrationParentFiber, fiber);\n throwOnHydrationMismatch();\n } // If we can't hydrate this instance let's try the next one.\n // We use this as a heuristic. It's based on intuition and not data so it\n // might be flawed or unnecessary.\n\n\n nextInstance = getNextHydratableSibling(firstAttemptedInstance);\n var prevHydrationParentFiber = hydrationParentFiber;\n\n if (!nextInstance || !tryHydrate(fiber, nextInstance)) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n return;\n } // We matched the next one, we'll now assume that the first one was\n // superfluous and we'll delete it. Since we can't eagerly delete it\n // we'll have to schedule a deletion. To do that, this node needs a dummy\n // fiber associated with it.\n\n\n deleteHydratableInstance(prevHydrationParentFiber, firstAttemptedInstance);\n }\n}\n\nfunction prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) {\n\n var instance = fiber.stateNode;\n var shouldWarnIfMismatchDev = !didSuspendOrErrorDEV;\n var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber, shouldWarnIfMismatchDev); // TODO: Type this specific to this type of component.\n\n fiber.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n // is a new ref we mark this as an update.\n\n if (updatePayload !== null) {\n return true;\n }\n\n return false;\n}\n\nfunction prepareToHydrateHostTextInstance(fiber) {\n\n var textInstance = fiber.stateNode;\n var textContent = fiber.memoizedProps;\n var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);\n\n if (shouldUpdate) {\n // We assume that prepareToHydrateHostTextInstance is called in a context where the\n // hydration parent is the parent host component of this host text.\n var returnFiber = hydrationParentFiber;\n\n if (returnFiber !== null) {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;\n didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent, // TODO: Delete this argument when we remove the legacy root API.\n isConcurrentMode);\n break;\n }\n\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n\n var _isConcurrentMode2 = (returnFiber.mode & ConcurrentMode) !== NoMode;\n\n didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent, // TODO: Delete this argument when we remove the legacy root API.\n _isConcurrentMode2);\n break;\n }\n }\n }\n }\n\n return shouldUpdate;\n}\n\nfunction prepareToHydrateHostSuspenseInstance(fiber) {\n\n var suspenseState = fiber.memoizedState;\n var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;\n\n if (!suspenseInstance) {\n throw new Error('Expected to have a hydrated suspense instance. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n\n hydrateSuspenseInstance(suspenseInstance, fiber);\n}\n\nfunction skipPastDehydratedSuspenseInstance(fiber) {\n\n var suspenseState = fiber.memoizedState;\n var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;\n\n if (!suspenseInstance) {\n throw new Error('Expected to have a hydrated suspense instance. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n\n return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);\n}\n\nfunction popToNextHostParent(fiber) {\n var parent = fiber.return;\n\n while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot && parent.tag !== SuspenseComponent) {\n parent = parent.return;\n }\n\n hydrationParentFiber = parent;\n}\n\nfunction popHydrationState(fiber) {\n\n if (fiber !== hydrationParentFiber) {\n // We're deeper than the current hydration context, inside an inserted\n // tree.\n return false;\n }\n\n if (!isHydrating) {\n // If we're not currently hydrating but we're in a hydration context, then\n // we were an insertion and now need to pop up reenter hydration of our\n // siblings.\n popToNextHostParent(fiber);\n isHydrating = true;\n return false;\n } // If we have any remaining hydratable nodes, we need to delete them now.\n // We only do this deeper than head and body since they tend to have random\n // other nodes in them. We also ignore components with pure text content in\n // side of them. We also don't delete anything inside the root container.\n\n\n if (fiber.tag !== HostRoot && (fiber.tag !== HostComponent || shouldDeleteUnhydratedTailInstances(fiber.type) && !shouldSetTextContent(fiber.type, fiber.memoizedProps))) {\n var nextInstance = nextHydratableInstance;\n\n if (nextInstance) {\n if (shouldClientRenderOnMismatch(fiber)) {\n warnIfUnhydratedTailNodes(fiber);\n throwOnHydrationMismatch();\n } else {\n while (nextInstance) {\n deleteHydratableInstance(fiber, nextInstance);\n nextInstance = getNextHydratableSibling(nextInstance);\n }\n }\n }\n }\n\n popToNextHostParent(fiber);\n\n if (fiber.tag === SuspenseComponent) {\n nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber);\n } else {\n nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;\n }\n\n return true;\n}\n\nfunction hasUnhydratedTailNodes() {\n return isHydrating && nextHydratableInstance !== null;\n}\n\nfunction warnIfUnhydratedTailNodes(fiber) {\n var nextInstance = nextHydratableInstance;\n\n while (nextInstance) {\n warnUnhydratedInstance(fiber, nextInstance);\n nextInstance = getNextHydratableSibling(nextInstance);\n }\n}\n\nfunction resetHydrationState() {\n\n hydrationParentFiber = null;\n nextHydratableInstance = null;\n isHydrating = false;\n didSuspendOrErrorDEV = false;\n}\n\nfunction upgradeHydrationErrorsToRecoverable() {\n if (hydrationErrors !== null) {\n // Successfully completed a forced client render. The errors that occurred\n // during the hydration attempt are now recovered. We will log them in\n // commit phase, once the entire tree has finished.\n queueRecoverableErrors(hydrationErrors);\n hydrationErrors = null;\n }\n}\n\nfunction getIsHydrating() {\n return isHydrating;\n}\n\nfunction queueHydrationError(error) {\n if (hydrationErrors === null) {\n hydrationErrors = [error];\n } else {\n hydrationErrors.push(error);\n }\n}\n\nvar ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig;\nvar NoTransition = null;\nfunction requestCurrentTransition() {\n return ReactCurrentBatchConfig$1.transition;\n}\n\nvar ReactStrictModeWarnings = {\n recordUnsafeLifecycleWarnings: function (fiber, instance) {},\n flushPendingUnsafeLifecycleWarnings: function () {},\n recordLegacyContextWarning: function (fiber, instance) {},\n flushLegacyContextWarning: function () {},\n discardPendingWarnings: function () {}\n};\n\n{\n var findStrictRoot = function (fiber) {\n var maybeStrictRoot = null;\n var node = fiber;\n\n while (node !== null) {\n if (node.mode & StrictLegacyMode) {\n maybeStrictRoot = node;\n }\n\n node = node.return;\n }\n\n return maybeStrictRoot;\n };\n\n var setToSortedString = function (set) {\n var array = [];\n set.forEach(function (value) {\n array.push(value);\n });\n return array.sort().join(', ');\n };\n\n var pendingComponentWillMountWarnings = [];\n var pendingUNSAFE_ComponentWillMountWarnings = [];\n var pendingComponentWillReceivePropsWarnings = [];\n var pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n var pendingComponentWillUpdateWarnings = [];\n var pendingUNSAFE_ComponentWillUpdateWarnings = []; // Tracks components we have already warned about.\n\n var didWarnAboutUnsafeLifecycles = new Set();\n\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) {\n // Dedupe strategy: Warn once per component.\n if (didWarnAboutUnsafeLifecycles.has(fiber.type)) {\n return;\n }\n\n if (typeof instance.componentWillMount === 'function' && // Don't warn about react-lifecycles-compat polyfilled components.\n instance.componentWillMount.__suppressDeprecationWarning !== true) {\n pendingComponentWillMountWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillMount === 'function') {\n pendingUNSAFE_ComponentWillMountWarnings.push(fiber);\n }\n\n if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n pendingComponentWillReceivePropsWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber);\n }\n\n if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n pendingComponentWillUpdateWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillUpdate === 'function') {\n pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber);\n }\n };\n\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n // We do an initial pass to gather component names\n var componentWillMountUniqueNames = new Set();\n\n if (pendingComponentWillMountWarnings.length > 0) {\n pendingComponentWillMountWarnings.forEach(function (fiber) {\n componentWillMountUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillMountWarnings = [];\n }\n\n var UNSAFE_componentWillMountUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) {\n pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n UNSAFE_componentWillMountUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillMountWarnings = [];\n }\n\n var componentWillReceivePropsUniqueNames = new Set();\n\n if (pendingComponentWillReceivePropsWarnings.length > 0) {\n pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n componentWillReceivePropsUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillReceivePropsWarnings = [];\n }\n\n var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) {\n pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) {\n UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n }\n\n var componentWillUpdateUniqueNames = new Set();\n\n if (pendingComponentWillUpdateWarnings.length > 0) {\n pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n componentWillUpdateUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillUpdateWarnings = [];\n }\n\n var UNSAFE_componentWillUpdateUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) {\n pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n UNSAFE_componentWillUpdateUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n } // Finally, we flush all the warnings\n // UNSAFE_ ones before the deprecated ones, since they'll be 'louder'\n\n\n if (UNSAFE_componentWillMountUniqueNames.size > 0) {\n var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames);\n\n error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '\\nPlease update the following components: %s', sortedNames);\n }\n\n if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) {\n var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames);\n\n error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, \" + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\\n' + '\\nPlease update the following components: %s', _sortedNames);\n }\n\n if (UNSAFE_componentWillUpdateUniqueNames.size > 0) {\n var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames);\n\n error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '\\nPlease update the following components: %s', _sortedNames2);\n }\n\n if (componentWillMountUniqueNames.size > 0) {\n var _sortedNames3 = setToSortedString(componentWillMountUniqueNames);\n\n warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames3);\n }\n\n if (componentWillReceivePropsUniqueNames.size > 0) {\n var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);\n\n warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, refactor your \" + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames4);\n }\n\n if (componentWillUpdateUniqueNames.size > 0) {\n var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames);\n\n warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames5);\n }\n };\n\n var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about.\n\n var didWarnAboutLegacyContext = new Set();\n\n ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) {\n var strictRoot = findStrictRoot(fiber);\n\n if (strictRoot === null) {\n error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n\n return;\n } // Dedup strategy: Warn once per component.\n\n\n if (didWarnAboutLegacyContext.has(fiber.type)) {\n return;\n }\n\n var warningsForRoot = pendingLegacyContextWarning.get(strictRoot);\n\n if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') {\n if (warningsForRoot === undefined) {\n warningsForRoot = [];\n pendingLegacyContextWarning.set(strictRoot, warningsForRoot);\n }\n\n warningsForRoot.push(fiber);\n }\n };\n\n ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) {\n if (fiberArray.length === 0) {\n return;\n }\n\n var firstFiber = fiberArray[0];\n var uniqueNames = new Set();\n fiberArray.forEach(function (fiber) {\n uniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');\n didWarnAboutLegacyContext.add(fiber.type);\n });\n var sortedNames = setToSortedString(uniqueNames);\n\n try {\n setCurrentFiber(firstFiber);\n\n error('Legacy context API has been detected within a strict-mode tree.' + '\\n\\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\\n\\nPlease update the following components: %s' + '\\n\\nLearn more about this warning here: https://reactjs.org/link/legacy-context', sortedNames);\n } finally {\n resetCurrentFiber();\n }\n });\n };\n\n ReactStrictModeWarnings.discardPendingWarnings = function () {\n pendingComponentWillMountWarnings = [];\n pendingUNSAFE_ComponentWillMountWarnings = [];\n pendingComponentWillReceivePropsWarnings = [];\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n pendingComponentWillUpdateWarnings = [];\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n pendingLegacyContextWarning = new Map();\n };\n}\n\nfunction resolveDefaultProps(Component, baseProps) {\n if (Component && Component.defaultProps) {\n // Resolve default props. Taken from ReactElement\n var props = assign({}, baseProps);\n var defaultProps = Component.defaultProps;\n\n for (var propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n\n return props;\n }\n\n return baseProps;\n}\n\nvar valueCursor = createCursor(null);\nvar rendererSigil;\n\n{\n // Use this to detect multiple renderers using the same context\n rendererSigil = {};\n}\n\nvar currentlyRenderingFiber = null;\nvar lastContextDependency = null;\nvar lastFullyObservedContext = null;\nvar isDisallowedContextReadInDEV = false;\nfunction resetContextDependencies() {\n // This is called right before React yields execution, to ensure `readContext`\n // cannot be called outside the render phase.\n currentlyRenderingFiber = null;\n lastContextDependency = null;\n lastFullyObservedContext = null;\n\n {\n isDisallowedContextReadInDEV = false;\n }\n}\nfunction enterDisallowedContextReadInDEV() {\n {\n isDisallowedContextReadInDEV = true;\n }\n}\nfunction exitDisallowedContextReadInDEV() {\n {\n isDisallowedContextReadInDEV = false;\n }\n}\nfunction pushProvider(providerFiber, context, nextValue) {\n {\n push(valueCursor, context._currentValue, providerFiber);\n context._currentValue = nextValue;\n\n {\n if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {\n error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');\n }\n\n context._currentRenderer = rendererSigil;\n }\n }\n}\nfunction popProvider(context, providerFiber) {\n var currentValue = valueCursor.current;\n pop(valueCursor, providerFiber);\n\n {\n {\n context._currentValue = currentValue;\n }\n }\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n // Update the child lanes of all the ancestors, including the alternates.\n var node = parent;\n\n while (node !== null) {\n var alternate = node.alternate;\n\n if (!isSubsetOfLanes(node.childLanes, renderLanes)) {\n node.childLanes = mergeLanes(node.childLanes, renderLanes);\n\n if (alternate !== null) {\n alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);\n }\n } else if (alternate !== null && !isSubsetOfLanes(alternate.childLanes, renderLanes)) {\n alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);\n }\n\n if (node === propagationRoot) {\n break;\n }\n\n node = node.return;\n }\n\n {\n if (node !== propagationRoot) {\n error('Expected to find the propagation root when scheduling context work. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n }\n}\nfunction propagateContextChange(workInProgress, context, renderLanes) {\n {\n propagateContextChange_eager(workInProgress, context, renderLanes);\n }\n}\n\nfunction propagateContextChange_eager(workInProgress, context, renderLanes) {\n\n var fiber = workInProgress.child;\n\n if (fiber !== null) {\n // Set the return pointer of the child to the work-in-progress fiber.\n fiber.return = workInProgress;\n }\n\n while (fiber !== null) {\n var nextFiber = void 0; // Visit this fiber.\n\n var list = fiber.dependencies;\n\n if (list !== null) {\n nextFiber = fiber.child;\n var dependency = list.firstContext;\n\n while (dependency !== null) {\n // Check if the context matches.\n if (dependency.context === context) {\n // Match! Schedule an update on this fiber.\n if (fiber.tag === ClassComponent) {\n // Schedule a force update on the work-in-progress.\n var lane = pickArbitraryLane(renderLanes);\n var update = createUpdate(NoTimestamp, lane);\n update.tag = ForceUpdate; // TODO: Because we don't have a work-in-progress, this will add the\n // update to the current fiber, too, which means it will persist even if\n // this render is thrown away. Since it's a race condition, not sure it's\n // worth fixing.\n // Inlined `enqueueUpdate` to remove interleaved update check\n\n var updateQueue = fiber.updateQueue;\n\n if (updateQueue === null) ; else {\n var sharedQueue = updateQueue.shared;\n var pending = sharedQueue.pending;\n\n if (pending === null) {\n // This is the first update. Create a circular list.\n update.next = update;\n } else {\n update.next = pending.next;\n pending.next = update;\n }\n\n sharedQueue.pending = update;\n }\n }\n\n fiber.lanes = mergeLanes(fiber.lanes, renderLanes);\n var alternate = fiber.alternate;\n\n if (alternate !== null) {\n alternate.lanes = mergeLanes(alternate.lanes, renderLanes);\n }\n\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, workInProgress); // Mark the updated lanes on the list, too.\n\n list.lanes = mergeLanes(list.lanes, renderLanes); // Since we already found a match, we can stop traversing the\n // dependency list.\n\n break;\n }\n\n dependency = dependency.next;\n }\n } else if (fiber.tag === ContextProvider) {\n // Don't scan deeper if this is a matching provider\n nextFiber = fiber.type === workInProgress.type ? null : fiber.child;\n } else if (fiber.tag === DehydratedFragment) {\n // If a dehydrated suspense boundary is in this subtree, we don't know\n // if it will have any context consumers in it. The best we can do is\n // mark it as having updates.\n var parentSuspense = fiber.return;\n\n if (parentSuspense === null) {\n throw new Error('We just came from a parent so we must have had a parent. This is a bug in React.');\n }\n\n parentSuspense.lanes = mergeLanes(parentSuspense.lanes, renderLanes);\n var _alternate = parentSuspense.alternate;\n\n if (_alternate !== null) {\n _alternate.lanes = mergeLanes(_alternate.lanes, renderLanes);\n } // This is intentionally passing this fiber as the parent\n // because we want to schedule this fiber as having work\n // on its children. We'll use the childLanes on\n // this fiber to indicate that a context has changed.\n\n\n scheduleContextWorkOnParentPath(parentSuspense, renderLanes, workInProgress);\n nextFiber = fiber.sibling;\n } else {\n // Traverse down.\n nextFiber = fiber.child;\n }\n\n if (nextFiber !== null) {\n // Set the return pointer of the child to the work-in-progress fiber.\n nextFiber.return = fiber;\n } else {\n // No child. Traverse to next sibling.\n nextFiber = fiber;\n\n while (nextFiber !== null) {\n if (nextFiber === workInProgress) {\n // We're back to the root of this subtree. Exit.\n nextFiber = null;\n break;\n }\n\n var sibling = nextFiber.sibling;\n\n if (sibling !== null) {\n // Set the return pointer of the sibling to the work-in-progress fiber.\n sibling.return = nextFiber.return;\n nextFiber = sibling;\n break;\n } // No more siblings. Traverse up.\n\n\n nextFiber = nextFiber.return;\n }\n }\n\n fiber = nextFiber;\n }\n}\nfunction prepareToReadContext(workInProgress, renderLanes) {\n currentlyRenderingFiber = workInProgress;\n lastContextDependency = null;\n lastFullyObservedContext = null;\n var dependencies = workInProgress.dependencies;\n\n if (dependencies !== null) {\n {\n var firstContext = dependencies.firstContext;\n\n if (firstContext !== null) {\n if (includesSomeLane(dependencies.lanes, renderLanes)) {\n // Context list has a pending update. Mark that this fiber performed work.\n markWorkInProgressReceivedUpdate();\n } // Reset the work-in-progress list\n\n\n dependencies.firstContext = null;\n }\n }\n }\n}\nfunction readContext(context) {\n {\n // This warning would fire if you read context inside a Hook like useMemo.\n // Unlike the class check below, it's not enforced in production for perf.\n if (isDisallowedContextReadInDEV) {\n error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n }\n }\n\n var value = context._currentValue ;\n\n if (lastFullyObservedContext === context) ; else {\n var contextItem = {\n context: context,\n memoizedValue: value,\n next: null\n };\n\n if (lastContextDependency === null) {\n if (currentlyRenderingFiber === null) {\n throw new Error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n } // This is the first dependency for this component. Create a new list.\n\n\n lastContextDependency = contextItem;\n currentlyRenderingFiber.dependencies = {\n lanes: NoLanes,\n firstContext: contextItem\n };\n } else {\n // Append a new context item.\n lastContextDependency = lastContextDependency.next = contextItem;\n }\n }\n\n return value;\n}\n\n// render. When this render exits, either because it finishes or because it is\n// interrupted, the interleaved updates will be transferred onto the main part\n// of the queue.\n\nvar concurrentQueues = null;\nfunction pushConcurrentUpdateQueue(queue) {\n if (concurrentQueues === null) {\n concurrentQueues = [queue];\n } else {\n concurrentQueues.push(queue);\n }\n}\nfunction finishQueueingConcurrentUpdates() {\n // Transfer the interleaved updates onto the main queue. Each queue has a\n // `pending` field and an `interleaved` field. When they are not null, they\n // point to the last node in a circular linked list. We need to append the\n // interleaved list to the end of the pending list by joining them into a\n // single, circular list.\n if (concurrentQueues !== null) {\n for (var i = 0; i < concurrentQueues.length; i++) {\n var queue = concurrentQueues[i];\n var lastInterleavedUpdate = queue.interleaved;\n\n if (lastInterleavedUpdate !== null) {\n queue.interleaved = null;\n var firstInterleavedUpdate = lastInterleavedUpdate.next;\n var lastPendingUpdate = queue.pending;\n\n if (lastPendingUpdate !== null) {\n var firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = firstInterleavedUpdate;\n lastInterleavedUpdate.next = firstPendingUpdate;\n }\n\n queue.pending = lastInterleavedUpdate;\n }\n }\n\n concurrentQueues = null;\n }\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n var interleaved = queue.interleaved;\n\n if (interleaved === null) {\n // This is the first update. Create a circular list.\n update.next = update; // At the end of the current render, this queue's interleaved updates will\n // be transferred to the pending queue.\n\n pushConcurrentUpdateQueue(queue);\n } else {\n update.next = interleaved.next;\n interleaved.next = update;\n }\n\n queue.interleaved = update;\n return markUpdateLaneFromFiberToRoot(fiber, lane);\n}\nfunction enqueueConcurrentHookUpdateAndEagerlyBailout(fiber, queue, update, lane) {\n var interleaved = queue.interleaved;\n\n if (interleaved === null) {\n // This is the first update. Create a circular list.\n update.next = update; // At the end of the current render, this queue's interleaved updates will\n // be transferred to the pending queue.\n\n pushConcurrentUpdateQueue(queue);\n } else {\n update.next = interleaved.next;\n interleaved.next = update;\n }\n\n queue.interleaved = update;\n}\nfunction enqueueConcurrentClassUpdate(fiber, queue, update, lane) {\n var interleaved = queue.interleaved;\n\n if (interleaved === null) {\n // This is the first update. Create a circular list.\n update.next = update; // At the end of the current render, this queue's interleaved updates will\n // be transferred to the pending queue.\n\n pushConcurrentUpdateQueue(queue);\n } else {\n update.next = interleaved.next;\n interleaved.next = update;\n }\n\n queue.interleaved = update;\n return markUpdateLaneFromFiberToRoot(fiber, lane);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n return markUpdateLaneFromFiberToRoot(fiber, lane);\n} // Calling this function outside this module should only be done for backwards\n// compatibility and should always be accompanied by a warning.\n\nvar unsafe_markUpdateLaneFromFiberToRoot = markUpdateLaneFromFiberToRoot;\n\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, lane) {\n // Update the source fiber's lanes\n sourceFiber.lanes = mergeLanes(sourceFiber.lanes, lane);\n var alternate = sourceFiber.alternate;\n\n if (alternate !== null) {\n alternate.lanes = mergeLanes(alternate.lanes, lane);\n }\n\n {\n if (alternate === null && (sourceFiber.flags & (Placement | Hydrating)) !== NoFlags) {\n warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);\n }\n } // Walk the parent path to the root and update the child lanes.\n\n\n var node = sourceFiber;\n var parent = sourceFiber.return;\n\n while (parent !== null) {\n parent.childLanes = mergeLanes(parent.childLanes, lane);\n alternate = parent.alternate;\n\n if (alternate !== null) {\n alternate.childLanes = mergeLanes(alternate.childLanes, lane);\n } else {\n {\n if ((parent.flags & (Placement | Hydrating)) !== NoFlags) {\n warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);\n }\n }\n }\n\n node = parent;\n parent = parent.return;\n }\n\n if (node.tag === HostRoot) {\n var root = node.stateNode;\n return root;\n } else {\n return null;\n }\n}\n\nvar UpdateState = 0;\nvar ReplaceState = 1;\nvar ForceUpdate = 2;\nvar CaptureUpdate = 3; // Global state that is reset at the beginning of calling `processUpdateQueue`.\n// It should only be read right after calling `processUpdateQueue`, via\n// `checkHasForceUpdateAfterProcessing`.\n\nvar hasForceUpdate = false;\nvar didWarnUpdateInsideUpdate;\nvar currentlyProcessingQueue;\n\n{\n didWarnUpdateInsideUpdate = false;\n currentlyProcessingQueue = null;\n}\n\nfunction initializeUpdateQueue(fiber) {\n var queue = {\n baseState: fiber.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: {\n pending: null,\n interleaved: null,\n lanes: NoLanes\n },\n effects: null\n };\n fiber.updateQueue = queue;\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n // Clone the update queue from current. Unless it's already a clone.\n var queue = workInProgress.updateQueue;\n var currentQueue = current.updateQueue;\n\n if (queue === currentQueue) {\n var clone = {\n baseState: currentQueue.baseState,\n firstBaseUpdate: currentQueue.firstBaseUpdate,\n lastBaseUpdate: currentQueue.lastBaseUpdate,\n shared: currentQueue.shared,\n effects: currentQueue.effects\n };\n workInProgress.updateQueue = clone;\n }\n}\nfunction createUpdate(eventTime, lane) {\n var update = {\n eventTime: eventTime,\n lane: lane,\n tag: UpdateState,\n payload: null,\n callback: null,\n next: null\n };\n return update;\n}\nfunction enqueueUpdate(fiber, update, lane) {\n var updateQueue = fiber.updateQueue;\n\n if (updateQueue === null) {\n // Only occurs if the fiber has been unmounted.\n return null;\n }\n\n var sharedQueue = updateQueue.shared;\n\n {\n if (currentlyProcessingQueue === sharedQueue && !didWarnUpdateInsideUpdate) {\n error('An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.');\n\n didWarnUpdateInsideUpdate = true;\n }\n }\n\n if (isUnsafeClassRenderPhaseUpdate()) {\n // This is an unsafe render phase update. Add directly to the update\n // queue so we can process it immediately during the current render.\n var pending = sharedQueue.pending;\n\n if (pending === null) {\n // This is the first update. Create a circular list.\n update.next = update;\n } else {\n update.next = pending.next;\n pending.next = update;\n }\n\n sharedQueue.pending = update; // Update the childLanes even though we're most likely already rendering\n // this fiber. This is for backwards compatibility in the case where you\n // update a different component during render phase than the one that is\n // currently renderings (a pattern that is accompanied by a warning).\n\n return unsafe_markUpdateLaneFromFiberToRoot(fiber, lane);\n } else {\n return enqueueConcurrentClassUpdate(fiber, sharedQueue, update, lane);\n }\n}\nfunction entangleTransitions(root, fiber, lane) {\n var updateQueue = fiber.updateQueue;\n\n if (updateQueue === null) {\n // Only occurs if the fiber has been unmounted.\n return;\n }\n\n var sharedQueue = updateQueue.shared;\n\n if (isTransitionLane(lane)) {\n var queueLanes = sharedQueue.lanes; // If any entangled lanes are no longer pending on the root, then they must\n // have finished. We can remove them from the shared queue, which represents\n // a superset of the actually pending lanes. In some cases we may entangle\n // more than we need to, but that's OK. In fact it's worse if we *don't*\n // entangle when we should.\n\n queueLanes = intersectLanes(queueLanes, root.pendingLanes); // Entangle the new transition lane with the other transition lanes.\n\n var newQueueLanes = mergeLanes(queueLanes, lane);\n sharedQueue.lanes = newQueueLanes; // Even if queue.lanes already include lane, we don't know for certain if\n // the lane finished since the last time we entangled it. So we need to\n // entangle it again, just to be sure.\n\n markRootEntangled(root, newQueueLanes);\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n // Captured updates are updates that are thrown by a child during the render\n // phase. They should be discarded if the render is aborted. Therefore,\n // we should only put them on the work-in-progress queue, not the current one.\n var queue = workInProgress.updateQueue; // Check if the work-in-progress queue is a clone.\n\n var current = workInProgress.alternate;\n\n if (current !== null) {\n var currentQueue = current.updateQueue;\n\n if (queue === currentQueue) {\n // The work-in-progress queue is the same as current. This happens when\n // we bail out on a parent fiber that then captures an error thrown by\n // a child. Since we want to append the update only to the work-in\n // -progress queue, we need to clone the updates. We usually clone during\n // processUpdateQueue, but that didn't happen in this case because we\n // skipped over the parent when we bailed out.\n var newFirst = null;\n var newLast = null;\n var firstBaseUpdate = queue.firstBaseUpdate;\n\n if (firstBaseUpdate !== null) {\n // Loop through the updates and clone them.\n var update = firstBaseUpdate;\n\n do {\n var clone = {\n eventTime: update.eventTime,\n lane: update.lane,\n tag: update.tag,\n payload: update.payload,\n callback: update.callback,\n next: null\n };\n\n if (newLast === null) {\n newFirst = newLast = clone;\n } else {\n newLast.next = clone;\n newLast = clone;\n }\n\n update = update.next;\n } while (update !== null); // Append the captured update the end of the cloned list.\n\n\n if (newLast === null) {\n newFirst = newLast = capturedUpdate;\n } else {\n newLast.next = capturedUpdate;\n newLast = capturedUpdate;\n }\n } else {\n // There are no base updates.\n newFirst = newLast = capturedUpdate;\n }\n\n queue = {\n baseState: currentQueue.baseState,\n firstBaseUpdate: newFirst,\n lastBaseUpdate: newLast,\n shared: currentQueue.shared,\n effects: currentQueue.effects\n };\n workInProgress.updateQueue = queue;\n return;\n }\n } // Append the update to the end of the list.\n\n\n var lastBaseUpdate = queue.lastBaseUpdate;\n\n if (lastBaseUpdate === null) {\n queue.firstBaseUpdate = capturedUpdate;\n } else {\n lastBaseUpdate.next = capturedUpdate;\n }\n\n queue.lastBaseUpdate = capturedUpdate;\n}\n\nfunction getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) {\n switch (update.tag) {\n case ReplaceState:\n {\n var payload = update.payload;\n\n if (typeof payload === 'function') {\n // Updater function\n {\n enterDisallowedContextReadInDEV();\n }\n\n var nextState = payload.call(instance, prevState, nextProps);\n\n {\n if ( workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n payload.call(instance, prevState, nextProps);\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n exitDisallowedContextReadInDEV();\n }\n\n return nextState;\n } // State object\n\n\n return payload;\n }\n\n case CaptureUpdate:\n {\n workInProgress.flags = workInProgress.flags & ~ShouldCapture | DidCapture;\n }\n // Intentional fallthrough\n\n case UpdateState:\n {\n var _payload = update.payload;\n var partialState;\n\n if (typeof _payload === 'function') {\n // Updater function\n {\n enterDisallowedContextReadInDEV();\n }\n\n partialState = _payload.call(instance, prevState, nextProps);\n\n {\n if ( workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n _payload.call(instance, prevState, nextProps);\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n exitDisallowedContextReadInDEV();\n }\n } else {\n // Partial state object\n partialState = _payload;\n }\n\n if (partialState === null || partialState === undefined) {\n // Null and undefined are treated as no-ops.\n return prevState;\n } // Merge the partial state and the previous state.\n\n\n return assign({}, prevState, partialState);\n }\n\n case ForceUpdate:\n {\n hasForceUpdate = true;\n return prevState;\n }\n }\n\n return prevState;\n}\n\nfunction processUpdateQueue(workInProgress, props, instance, renderLanes) {\n // This is always non-null on a ClassComponent or HostRoot\n var queue = workInProgress.updateQueue;\n hasForceUpdate = false;\n\n {\n currentlyProcessingQueue = queue.shared;\n }\n\n var firstBaseUpdate = queue.firstBaseUpdate;\n var lastBaseUpdate = queue.lastBaseUpdate; // Check if there are pending updates. If so, transfer them to the base queue.\n\n var pendingQueue = queue.shared.pending;\n\n if (pendingQueue !== null) {\n queue.shared.pending = null; // The pending queue is circular. Disconnect the pointer between first\n // and last so that it's non-circular.\n\n var lastPendingUpdate = pendingQueue;\n var firstPendingUpdate = lastPendingUpdate.next;\n lastPendingUpdate.next = null; // Append pending updates to base queue\n\n if (lastBaseUpdate === null) {\n firstBaseUpdate = firstPendingUpdate;\n } else {\n lastBaseUpdate.next = firstPendingUpdate;\n }\n\n lastBaseUpdate = lastPendingUpdate; // If there's a current queue, and it's different from the base queue, then\n // we need to transfer the updates to that queue, too. Because the base\n // queue is a singly-linked list with no cycles, we can append to both\n // lists and take advantage of structural sharing.\n // TODO: Pass `current` as argument\n\n var current = workInProgress.alternate;\n\n if (current !== null) {\n // This is always non-null on a ClassComponent or HostRoot\n var currentQueue = current.updateQueue;\n var currentLastBaseUpdate = currentQueue.lastBaseUpdate;\n\n if (currentLastBaseUpdate !== lastBaseUpdate) {\n if (currentLastBaseUpdate === null) {\n currentQueue.firstBaseUpdate = firstPendingUpdate;\n } else {\n currentLastBaseUpdate.next = firstPendingUpdate;\n }\n\n currentQueue.lastBaseUpdate = lastPendingUpdate;\n }\n }\n } // These values may change as we process the queue.\n\n\n if (firstBaseUpdate !== null) {\n // Iterate through the list of updates to compute the result.\n var newState = queue.baseState; // TODO: Don't need to accumulate this. Instead, we can remove renderLanes\n // from the original lanes.\n\n var newLanes = NoLanes;\n var newBaseState = null;\n var newFirstBaseUpdate = null;\n var newLastBaseUpdate = null;\n var update = firstBaseUpdate;\n\n do {\n var updateLane = update.lane;\n var updateEventTime = update.eventTime;\n\n if (!isSubsetOfLanes(renderLanes, updateLane)) {\n // Priority is insufficient. Skip this update. If this is the first\n // skipped update, the previous update/state is the new base\n // update/state.\n var clone = {\n eventTime: updateEventTime,\n lane: updateLane,\n tag: update.tag,\n payload: update.payload,\n callback: update.callback,\n next: null\n };\n\n if (newLastBaseUpdate === null) {\n newFirstBaseUpdate = newLastBaseUpdate = clone;\n newBaseState = newState;\n } else {\n newLastBaseUpdate = newLastBaseUpdate.next = clone;\n } // Update the remaining priority in the queue.\n\n\n newLanes = mergeLanes(newLanes, updateLane);\n } else {\n // This update does have sufficient priority.\n if (newLastBaseUpdate !== null) {\n var _clone = {\n eventTime: updateEventTime,\n // This update is going to be committed so we never want uncommit\n // it. Using NoLane works because 0 is a subset of all bitmasks, so\n // this will never be skipped by the check above.\n lane: NoLane,\n tag: update.tag,\n payload: update.payload,\n callback: update.callback,\n next: null\n };\n newLastBaseUpdate = newLastBaseUpdate.next = _clone;\n } // Process this update.\n\n\n newState = getStateFromUpdate(workInProgress, queue, update, newState, props, instance);\n var callback = update.callback;\n\n if (callback !== null && // If the update was already committed, we should not queue its\n // callback again.\n update.lane !== NoLane) {\n workInProgress.flags |= Callback;\n var effects = queue.effects;\n\n if (effects === null) {\n queue.effects = [update];\n } else {\n effects.push(update);\n }\n }\n }\n\n update = update.next;\n\n if (update === null) {\n pendingQueue = queue.shared.pending;\n\n if (pendingQueue === null) {\n break;\n } else {\n // An update was scheduled from inside a reducer. Add the new\n // pending updates to the end of the list and keep processing.\n var _lastPendingUpdate = pendingQueue; // Intentionally unsound. Pending updates form a circular list, but we\n // unravel them when transferring them to the base queue.\n\n var _firstPendingUpdate = _lastPendingUpdate.next;\n _lastPendingUpdate.next = null;\n update = _firstPendingUpdate;\n queue.lastBaseUpdate = _lastPendingUpdate;\n queue.shared.pending = null;\n }\n }\n } while (true);\n\n if (newLastBaseUpdate === null) {\n newBaseState = newState;\n }\n\n queue.baseState = newBaseState;\n queue.firstBaseUpdate = newFirstBaseUpdate;\n queue.lastBaseUpdate = newLastBaseUpdate; // Interleaved updates are stored on a separate queue. We aren't going to\n // process them during this render, but we do need to track which lanes\n // are remaining.\n\n var lastInterleaved = queue.shared.interleaved;\n\n if (lastInterleaved !== null) {\n var interleaved = lastInterleaved;\n\n do {\n newLanes = mergeLanes(newLanes, interleaved.lane);\n interleaved = interleaved.next;\n } while (interleaved !== lastInterleaved);\n } else if (firstBaseUpdate === null) {\n // `queue.lanes` is used for entangling transitions. We can set it back to\n // zero once the queue is empty.\n queue.shared.lanes = NoLanes;\n } // Set the remaining expiration time to be whatever is remaining in the queue.\n // This should be fine because the only two other things that contribute to\n // expiration time are props and context. We're already in the middle of the\n // begin phase by the time we start processing the queue, so we've already\n // dealt with the props. Context in components that specify\n // shouldComponentUpdate is tricky; but we'll have to account for\n // that regardless.\n\n\n markSkippedUpdateLanes(newLanes);\n workInProgress.lanes = newLanes;\n workInProgress.memoizedState = newState;\n }\n\n {\n currentlyProcessingQueue = null;\n }\n}\n\nfunction callCallback(callback, context) {\n if (typeof callback !== 'function') {\n throw new Error('Invalid argument passed as callback. Expected a function. Instead ' + (\"received: \" + callback));\n }\n\n callback.call(context);\n}\n\nfunction resetHasForceUpdateBeforeProcessing() {\n hasForceUpdate = false;\n}\nfunction checkHasForceUpdateAfterProcessing() {\n return hasForceUpdate;\n}\nfunction commitUpdateQueue(finishedWork, finishedQueue, instance) {\n // Commit the effects\n var effects = finishedQueue.effects;\n finishedQueue.effects = null;\n\n if (effects !== null) {\n for (var i = 0; i < effects.length; i++) {\n var effect = effects[i];\n var callback = effect.callback;\n\n if (callback !== null) {\n effect.callback = null;\n callCallback(callback, instance);\n }\n }\n }\n}\n\nvar fakeInternalInstance = {}; // React.Component uses a shared frozen object by default.\n// We'll use it to determine whether we need to initialize legacy refs.\n\nvar emptyRefsObject = new React.Component().refs;\nvar didWarnAboutStateAssignmentForComponent;\nvar didWarnAboutUninitializedState;\nvar didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;\nvar didWarnAboutLegacyLifecyclesAndDerivedState;\nvar didWarnAboutUndefinedDerivedState;\nvar warnOnUndefinedDerivedState;\nvar warnOnInvalidCallback;\nvar didWarnAboutDirectlyAssigningPropsToState;\nvar didWarnAboutContextTypeAndContextTypes;\nvar didWarnAboutInvalidateContextType;\n\n{\n didWarnAboutStateAssignmentForComponent = new Set();\n didWarnAboutUninitializedState = new Set();\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n didWarnAboutDirectlyAssigningPropsToState = new Set();\n didWarnAboutUndefinedDerivedState = new Set();\n didWarnAboutContextTypeAndContextTypes = new Set();\n didWarnAboutInvalidateContextType = new Set();\n var didWarnOnInvalidCallback = new Set();\n\n warnOnInvalidCallback = function (callback, callerName) {\n if (callback === null || typeof callback === 'function') {\n return;\n }\n\n var key = callerName + '_' + callback;\n\n if (!didWarnOnInvalidCallback.has(key)) {\n didWarnOnInvalidCallback.add(key);\n\n error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n }\n };\n\n warnOnUndefinedDerivedState = function (type, partialState) {\n if (partialState === undefined) {\n var componentName = getComponentNameFromType(type) || 'Component';\n\n if (!didWarnAboutUndefinedDerivedState.has(componentName)) {\n didWarnAboutUndefinedDerivedState.add(componentName);\n\n error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);\n }\n }\n }; // This is so gross but it's at least non-critical and can be removed if\n // it causes problems. This is meant to give a nicer error message for\n // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,\n // ...)) which otherwise throws a \"_processChildContext is not a function\"\n // exception.\n\n\n Object.defineProperty(fakeInternalInstance, '_processChildContext', {\n enumerable: false,\n value: function () {\n throw new Error('_processChildContext is not available in React 16+. This likely ' + 'means you have multiple copies of React and are attempting to nest ' + 'a React 15 tree inside a React 16 tree using ' + \"unstable_renderSubtreeIntoContainer, which isn't supported. Try \" + 'to make sure you have only one copy of React (and ideally, switch ' + 'to ReactDOM.createPortal).');\n }\n });\n Object.freeze(fakeInternalInstance);\n}\n\nfunction applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) {\n var prevState = workInProgress.memoizedState;\n var partialState = getDerivedStateFromProps(nextProps, prevState);\n\n {\n if ( workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n // Invoke the function an extra time to help detect side-effects.\n partialState = getDerivedStateFromProps(nextProps, prevState);\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n warnOnUndefinedDerivedState(ctor, partialState);\n } // Merge the partial state and the previous state.\n\n\n var memoizedState = partialState === null || partialState === undefined ? prevState : assign({}, prevState, partialState);\n workInProgress.memoizedState = memoizedState; // Once the update queue is empty, persist the derived state onto the\n // base state.\n\n if (workInProgress.lanes === NoLanes) {\n // Queue is always non-null for classes\n var updateQueue = workInProgress.updateQueue;\n updateQueue.baseState = memoizedState;\n }\n}\n\nvar classComponentUpdater = {\n isMounted: isMounted,\n enqueueSetState: function (inst, payload, callback) {\n var fiber = get(inst);\n var eventTime = requestEventTime();\n var lane = requestUpdateLane(fiber);\n var update = createUpdate(eventTime, lane);\n update.payload = payload;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback(callback, 'setState');\n }\n\n update.callback = callback;\n }\n\n var root = enqueueUpdate(fiber, update, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n entangleTransitions(root, fiber, lane);\n }\n\n {\n markStateUpdateScheduled(fiber, lane);\n }\n },\n enqueueReplaceState: function (inst, payload, callback) {\n var fiber = get(inst);\n var eventTime = requestEventTime();\n var lane = requestUpdateLane(fiber);\n var update = createUpdate(eventTime, lane);\n update.tag = ReplaceState;\n update.payload = payload;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback(callback, 'replaceState');\n }\n\n update.callback = callback;\n }\n\n var root = enqueueUpdate(fiber, update, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n entangleTransitions(root, fiber, lane);\n }\n\n {\n markStateUpdateScheduled(fiber, lane);\n }\n },\n enqueueForceUpdate: function (inst, callback) {\n var fiber = get(inst);\n var eventTime = requestEventTime();\n var lane = requestUpdateLane(fiber);\n var update = createUpdate(eventTime, lane);\n update.tag = ForceUpdate;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback(callback, 'forceUpdate');\n }\n\n update.callback = callback;\n }\n\n var root = enqueueUpdate(fiber, update, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n entangleTransitions(root, fiber, lane);\n }\n\n {\n markForceUpdateScheduled(fiber, lane);\n }\n }\n};\n\nfunction checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {\n var instance = workInProgress.stateNode;\n\n if (typeof instance.shouldComponentUpdate === 'function') {\n var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);\n\n {\n if ( workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n // Invoke the function an extra time to help detect side-effects.\n shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n if (shouldUpdate === undefined) {\n error('%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentNameFromType(ctor) || 'Component');\n }\n }\n\n return shouldUpdate;\n }\n\n if (ctor.prototype && ctor.prototype.isPureReactComponent) {\n return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);\n }\n\n return true;\n}\n\nfunction checkClassInstance(workInProgress, ctor, newProps) {\n var instance = workInProgress.stateNode;\n\n {\n var name = getComponentNameFromType(ctor) || 'Component';\n var renderPresent = instance.render;\n\n if (!renderPresent) {\n if (ctor.prototype && typeof ctor.prototype.render === 'function') {\n error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);\n } else {\n error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);\n }\n }\n\n if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {\n error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);\n }\n\n if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);\n }\n\n if (instance.propTypes) {\n error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);\n }\n\n if (instance.contextType) {\n error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);\n }\n\n {\n if (instance.contextTypes) {\n error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);\n }\n\n if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {\n didWarnAboutContextTypeAndContextTypes.add(ctor);\n\n error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);\n }\n }\n\n if (typeof instance.componentShouldUpdate === 'function') {\n error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name);\n }\n\n if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {\n error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentNameFromType(ctor) || 'A pure component');\n }\n\n if (typeof instance.componentDidUnmount === 'function') {\n error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);\n }\n\n if (typeof instance.componentDidReceiveProps === 'function') {\n error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);\n }\n\n if (typeof instance.componentWillRecieveProps === 'function') {\n error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);\n }\n\n if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {\n error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);\n }\n\n var hasMutatedProps = instance.props !== newProps;\n\n if (instance.props !== undefined && hasMutatedProps) {\n error('%s(...): When calling super() in `%s`, make sure to pass ' + \"up the same props that your component's constructor was passed.\", name, name);\n }\n\n if (instance.defaultProps) {\n error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);\n\n error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentNameFromType(ctor));\n }\n\n if (typeof instance.getDerivedStateFromProps === 'function') {\n error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n }\n\n if (typeof instance.getDerivedStateFromError === 'function') {\n error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n }\n\n if (typeof ctor.getSnapshotBeforeUpdate === 'function') {\n error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);\n }\n\n var _state = instance.state;\n\n if (_state && (typeof _state !== 'object' || isArray(_state))) {\n error('%s.state: must be set to an object or null', name);\n }\n\n if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {\n error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);\n }\n }\n}\n\nfunction adoptClassInstance(workInProgress, instance) {\n instance.updater = classComponentUpdater;\n workInProgress.stateNode = instance; // The instance needs access to the fiber so that it can schedule updates\n\n set(instance, workInProgress);\n\n {\n instance._reactInternalInstance = fakeInternalInstance;\n }\n}\n\nfunction constructClassInstance(workInProgress, ctor, props) {\n var isLegacyContextConsumer = false;\n var unmaskedContext = emptyContextObject;\n var context = emptyContextObject;\n var contextType = ctor.contextType;\n\n {\n if ('contextType' in ctor) {\n var isValid = // Allow null for conditional declaration\n contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>\n\n if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {\n didWarnAboutInvalidateContextType.add(ctor);\n var addendum = '';\n\n if (contextType === undefined) {\n addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';\n } else if (typeof contextType !== 'object') {\n addendum = ' However, it is set to a ' + typeof contextType + '.';\n } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {\n addendum = ' Did you accidentally pass the Context.Provider instead?';\n } else if (contextType._context !== undefined) {\n // <Context.Consumer>\n addendum = ' Did you accidentally pass the Context.Consumer instead?';\n } else {\n addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';\n }\n\n error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentNameFromType(ctor) || 'Component', addendum);\n }\n }\n }\n\n if (typeof contextType === 'object' && contextType !== null) {\n context = readContext(contextType);\n } else {\n unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n var contextTypes = ctor.contextTypes;\n isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined;\n context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject;\n }\n\n var instance = new ctor(props, context); // Instantiate twice to help detect side-effects.\n\n {\n if ( workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n instance = new ctor(props, context); // eslint-disable-line no-new\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n }\n\n var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null;\n adoptClassInstance(workInProgress, instance);\n\n {\n if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) {\n var componentName = getComponentNameFromType(ctor) || 'Component';\n\n if (!didWarnAboutUninitializedState.has(componentName)) {\n didWarnAboutUninitializedState.add(componentName);\n\n error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);\n }\n } // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Warn about these lifecycles if they are present.\n // Don't warn about react-lifecycles-compat polyfilled methods though.\n\n\n if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n\n if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {\n foundWillMountName = 'componentWillMount';\n } else if (typeof instance.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n\n if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n\n if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n\n if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {\n var _componentName = getComponentNameFromType(ctor) || 'Component';\n\n var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';\n\n if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {\n didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);\n\n error('Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\n' + 'The above lifecycles should be removed. Learn more about this warning here:\\n' + 'https://reactjs.org/link/unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? \"\\n \" + foundWillMountName : '', foundWillReceivePropsName !== null ? \"\\n \" + foundWillReceivePropsName : '', foundWillUpdateName !== null ? \"\\n \" + foundWillUpdateName : '');\n }\n }\n }\n } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // ReactFiberContext usually updates this cache but can't for newly-created instances.\n\n\n if (isLegacyContextConsumer) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return instance;\n}\n\nfunction callComponentWillMount(workInProgress, instance) {\n var oldState = instance.state;\n\n if (typeof instance.componentWillMount === 'function') {\n instance.componentWillMount();\n }\n\n if (typeof instance.UNSAFE_componentWillMount === 'function') {\n instance.UNSAFE_componentWillMount();\n }\n\n if (oldState !== instance.state) {\n {\n error('%s.componentWillMount(): Assigning directly to this.state is ' + \"deprecated (except inside a component's \" + 'constructor). Use setState instead.', getComponentNameFromFiber(workInProgress) || 'Component');\n }\n\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n }\n}\n\nfunction callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) {\n var oldState = instance.state;\n\n if (typeof instance.componentWillReceiveProps === 'function') {\n instance.componentWillReceiveProps(newProps, nextContext);\n }\n\n if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n }\n\n if (instance.state !== oldState) {\n {\n var componentName = getComponentNameFromFiber(workInProgress) || 'Component';\n\n if (!didWarnAboutStateAssignmentForComponent.has(componentName)) {\n didWarnAboutStateAssignmentForComponent.add(componentName);\n\n error('%s.componentWillReceiveProps(): Assigning directly to ' + \"this.state is deprecated (except inside a component's \" + 'constructor). Use setState instead.', componentName);\n }\n }\n\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n }\n} // Invokes the mount life-cycles on a previously never rendered instance.\n\n\nfunction mountClassInstance(workInProgress, ctor, newProps, renderLanes) {\n {\n checkClassInstance(workInProgress, ctor, newProps);\n }\n\n var instance = workInProgress.stateNode;\n instance.props = newProps;\n instance.state = workInProgress.memoizedState;\n instance.refs = emptyRefsObject;\n initializeUpdateQueue(workInProgress);\n var contextType = ctor.contextType;\n\n if (typeof contextType === 'object' && contextType !== null) {\n instance.context = readContext(contextType);\n } else {\n var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n instance.context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n {\n if (instance.state === newProps) {\n var componentName = getComponentNameFromType(ctor) || 'Component';\n\n if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {\n didWarnAboutDirectlyAssigningPropsToState.add(componentName);\n\n error('%s: It is not recommended to assign props directly to state ' + \"because updates to props won't be reflected in state. \" + 'In most cases, it is better to use props directly.', componentName);\n }\n }\n\n if (workInProgress.mode & StrictLegacyMode) {\n ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance);\n }\n\n {\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance);\n }\n }\n\n instance.state = workInProgress.memoizedState;\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n instance.state = workInProgress.memoizedState;\n } // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n\n if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n callComponentWillMount(workInProgress, instance); // If we had additional state updates during this life-cycle, let's\n // process them now.\n\n processUpdateQueue(workInProgress, newProps, instance, renderLanes);\n instance.state = workInProgress.memoizedState;\n }\n\n if (typeof instance.componentDidMount === 'function') {\n var fiberFlags = Update;\n\n {\n fiberFlags |= LayoutStatic;\n }\n\n if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {\n fiberFlags |= MountLayoutDev;\n }\n\n workInProgress.flags |= fiberFlags;\n }\n}\n\nfunction resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) {\n var instance = workInProgress.stateNode;\n var oldProps = workInProgress.memoizedProps;\n instance.props = oldProps;\n var oldContext = instance.context;\n var contextType = ctor.contextType;\n var nextContext = emptyContextObject;\n\n if (typeof contextType === 'object' && contextType !== null) {\n nextContext = readContext(contextType);\n } else {\n var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext);\n }\n\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n // ever the previously attempted to render - not the \"current\". However,\n // during componentDidUpdate we pass the \"current\" props.\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n if (oldProps !== newProps || oldContext !== nextContext) {\n callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n }\n }\n\n resetHasForceUpdateBeforeProcessing();\n var oldState = workInProgress.memoizedState;\n var newState = instance.state = oldState;\n processUpdateQueue(workInProgress, newProps, instance, renderLanes);\n newState = workInProgress.memoizedState;\n\n if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidMount === 'function') {\n var fiberFlags = Update;\n\n {\n fiberFlags |= LayoutStatic;\n }\n\n if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {\n fiberFlags |= MountLayoutDev;\n }\n\n workInProgress.flags |= fiberFlags;\n }\n\n return false;\n }\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n newState = workInProgress.memoizedState;\n }\n\n var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n if (shouldUpdate) {\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n if (typeof instance.componentWillMount === 'function') {\n instance.componentWillMount();\n }\n\n if (typeof instance.UNSAFE_componentWillMount === 'function') {\n instance.UNSAFE_componentWillMount();\n }\n }\n\n if (typeof instance.componentDidMount === 'function') {\n var _fiberFlags = Update;\n\n {\n _fiberFlags |= LayoutStatic;\n }\n\n if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {\n _fiberFlags |= MountLayoutDev;\n }\n\n workInProgress.flags |= _fiberFlags;\n }\n } else {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidMount === 'function') {\n var _fiberFlags2 = Update;\n\n {\n _fiberFlags2 |= LayoutStatic;\n }\n\n if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {\n _fiberFlags2 |= MountLayoutDev;\n }\n\n workInProgress.flags |= _fiberFlags2;\n } // If shouldComponentUpdate returned false, we should still update the\n // memoized state to indicate that this work can be reused.\n\n\n workInProgress.memoizedProps = newProps;\n workInProgress.memoizedState = newState;\n } // Update the existing instance's state, props, and context pointers even\n // if shouldComponentUpdate returns false.\n\n\n instance.props = newProps;\n instance.state = newState;\n instance.context = nextContext;\n return shouldUpdate;\n} // Invokes the update life-cycles and returns false if it shouldn't rerender.\n\n\nfunction updateClassInstance(current, workInProgress, ctor, newProps, renderLanes) {\n var instance = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n var unresolvedOldProps = workInProgress.memoizedProps;\n var oldProps = workInProgress.type === workInProgress.elementType ? unresolvedOldProps : resolveDefaultProps(workInProgress.type, unresolvedOldProps);\n instance.props = oldProps;\n var unresolvedNewProps = workInProgress.pendingProps;\n var oldContext = instance.context;\n var contextType = ctor.contextType;\n var nextContext = emptyContextObject;\n\n if (typeof contextType === 'object' && contextType !== null) {\n nextContext = readContext(contextType);\n } else {\n var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n nextContext = getMaskedContext(workInProgress, nextUnmaskedContext);\n }\n\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n // ever the previously attempted to render - not the \"current\". However,\n // during componentDidUpdate we pass the \"current\" props.\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n if (unresolvedOldProps !== unresolvedNewProps || oldContext !== nextContext) {\n callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n }\n }\n\n resetHasForceUpdateBeforeProcessing();\n var oldState = workInProgress.memoizedState;\n var newState = instance.state = oldState;\n processUpdateQueue(workInProgress, newProps, instance, renderLanes);\n newState = workInProgress.memoizedState;\n\n if (unresolvedOldProps === unresolvedNewProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing() && !(enableLazyContextPropagation )) {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.flags |= Update;\n }\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.flags |= Snapshot;\n }\n }\n\n return false;\n }\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n newState = workInProgress.memoizedState;\n }\n\n var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) || // TODO: In some cases, we'll end up checking if context has changed twice,\n // both before and after `shouldComponentUpdate` has been called. Not ideal,\n // but I'm loath to refactor this function. This only happens for memoized\n // components so it's not that common.\n enableLazyContextPropagation ;\n\n if (shouldUpdate) {\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) {\n if (typeof instance.componentWillUpdate === 'function') {\n instance.componentWillUpdate(newProps, newState, nextContext);\n }\n\n if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext);\n }\n }\n\n if (typeof instance.componentDidUpdate === 'function') {\n workInProgress.flags |= Update;\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n workInProgress.flags |= Snapshot;\n }\n } else {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.flags |= Update;\n }\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.flags |= Snapshot;\n }\n } // If shouldComponentUpdate returned false, we should still update the\n // memoized props/state to indicate that this work can be reused.\n\n\n workInProgress.memoizedProps = newProps;\n workInProgress.memoizedState = newState;\n } // Update the existing instance's state, props, and context pointers even\n // if shouldComponentUpdate returns false.\n\n\n instance.props = newProps;\n instance.state = newState;\n instance.context = nextContext;\n return shouldUpdate;\n}\n\nvar didWarnAboutMaps;\nvar didWarnAboutGenerators;\nvar didWarnAboutStringRefs;\nvar ownerHasKeyUseWarning;\nvar ownerHasFunctionTypeWarning;\n\nvar warnForMissingKey = function (child, returnFiber) {};\n\n{\n didWarnAboutMaps = false;\n didWarnAboutGenerators = false;\n didWarnAboutStringRefs = {};\n /**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n ownerHasKeyUseWarning = {};\n ownerHasFunctionTypeWarning = {};\n\n warnForMissingKey = function (child, returnFiber) {\n if (child === null || typeof child !== 'object') {\n return;\n }\n\n if (!child._store || child._store.validated || child.key != null) {\n return;\n }\n\n if (typeof child._store !== 'object') {\n throw new Error('React Component in warnForMissingKey should have a _store. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n }\n\n child._store.validated = true;\n var componentName = getComponentNameFromFiber(returnFiber) || 'Component';\n\n if (ownerHasKeyUseWarning[componentName]) {\n return;\n }\n\n ownerHasKeyUseWarning[componentName] = true;\n\n error('Each child in a list should have a unique ' + '\"key\" prop. See https://reactjs.org/link/warning-keys for ' + 'more information.');\n };\n}\n\nfunction coerceRef(returnFiber, current, element) {\n var mixedRef = element.ref;\n\n if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') {\n {\n // TODO: Clean this up once we turn on the string ref warning for\n // everyone, because the strict mode case will no longer be relevant\n if ((returnFiber.mode & StrictLegacyMode || warnAboutStringRefs) && // We warn in ReactElement.js if owner and self are equal for string refs\n // because these cannot be automatically converted to an arrow function\n // using a codemod. Therefore, we don't have to warn about string refs again.\n !(element._owner && element._self && element._owner.stateNode !== element._self)) {\n var componentName = getComponentNameFromFiber(returnFiber) || 'Component';\n\n if (!didWarnAboutStringRefs[componentName]) {\n {\n error('A string ref, \"%s\", has been found within a strict mode tree. ' + 'String refs are a source of potential bugs and should be avoided. ' + 'We recommend using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', mixedRef);\n }\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n\n if (element._owner) {\n var owner = element._owner;\n var inst;\n\n if (owner) {\n var ownerFiber = owner;\n\n if (ownerFiber.tag !== ClassComponent) {\n throw new Error('Function components cannot have string refs. ' + 'We recommend using useRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref');\n }\n\n inst = ownerFiber.stateNode;\n }\n\n if (!inst) {\n throw new Error(\"Missing owner for string ref \" + mixedRef + \". This error is likely caused by a \" + 'bug in React. Please file an issue.');\n } // Assigning this to a const so Flow knows it won't change in the closure\n\n\n var resolvedInst = inst;\n\n {\n checkPropStringCoercion(mixedRef, 'ref');\n }\n\n var stringRef = '' + mixedRef; // Check if previous string ref matches new string ref\n\n if (current !== null && current.ref !== null && typeof current.ref === 'function' && current.ref._stringRef === stringRef) {\n return current.ref;\n }\n\n var ref = function (value) {\n var refs = resolvedInst.refs;\n\n if (refs === emptyRefsObject) {\n // This is a lazy pooled frozen object, so we need to initialize.\n refs = resolvedInst.refs = {};\n }\n\n if (value === null) {\n delete refs[stringRef];\n } else {\n refs[stringRef] = value;\n }\n };\n\n ref._stringRef = stringRef;\n return ref;\n } else {\n if (typeof mixedRef !== 'string') {\n throw new Error('Expected ref to be a function, a string, an object returned by React.createRef(), or null.');\n }\n\n if (!element._owner) {\n throw new Error(\"Element ref was specified as a string (\" + mixedRef + \") but no owner was set. This could happen for one of\" + ' the following reasons:\\n' + '1. You may be adding a ref to a function component\\n' + \"2. You may be adding a ref to a component that was not created inside a component's render method\\n\" + '3. You have multiple copies of React loaded\\n' + 'See https://reactjs.org/link/refs-must-have-owner for more information.');\n }\n }\n }\n\n return mixedRef;\n}\n\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n var childString = Object.prototype.toString.call(newChild);\n throw new Error(\"Objects are not valid as a React child (found: \" + (childString === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : childString) + \"). \" + 'If you meant to render a collection of children, use an array ' + 'instead.');\n}\n\nfunction warnOnFunctionType(returnFiber) {\n {\n var componentName = getComponentNameFromFiber(returnFiber) || 'Component';\n\n if (ownerHasFunctionTypeWarning[componentName]) {\n return;\n }\n\n ownerHasFunctionTypeWarning[componentName] = true;\n\n error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');\n }\n}\n\nfunction resolveLazy(lazyType) {\n var payload = lazyType._payload;\n var init = lazyType._init;\n return init(payload);\n} // This wrapper function exists because I expect to clone the code in each path\n// to be able to optimize each path individually by branching early. This needs\n// a compiler or we can do it manually. Helpers that don't need this branching\n// live outside of this function.\n\n\nfunction ChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return;\n }\n\n var deletions = returnFiber.deletions;\n\n if (deletions === null) {\n returnFiber.deletions = [childToDelete];\n returnFiber.flags |= ChildDeletion;\n } else {\n deletions.push(childToDelete);\n }\n }\n\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return null;\n } // TODO: For the shouldClone case, this could be micro-optimized a bit by\n // assuming that after the first child we've already added everything.\n\n\n var childToDelete = currentFirstChild;\n\n while (childToDelete !== null) {\n deleteChild(returnFiber, childToDelete);\n childToDelete = childToDelete.sibling;\n }\n\n return null;\n }\n\n function mapRemainingChildren(returnFiber, currentFirstChild) {\n // Add the remaining children to a temporary map so that we can find them by\n // keys quickly. Implicit (null) keys get added to this set with their index\n // instead.\n var existingChildren = new Map();\n var existingChild = currentFirstChild;\n\n while (existingChild !== null) {\n if (existingChild.key !== null) {\n existingChildren.set(existingChild.key, existingChild);\n } else {\n existingChildren.set(existingChild.index, existingChild);\n }\n\n existingChild = existingChild.sibling;\n }\n\n return existingChildren;\n }\n\n function useFiber(fiber, pendingProps) {\n // We currently set sibling to null and index to 0 here because it is easy\n // to forget to do before returning it. E.g. for the single child case.\n var clone = createWorkInProgress(fiber, pendingProps);\n clone.index = 0;\n clone.sibling = null;\n return clone;\n }\n\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n\n if (!shouldTrackSideEffects) {\n // During hydration, the useId algorithm needs to know which fibers are\n // part of a list of children (arrays, iterators).\n newFiber.flags |= Forked;\n return lastPlacedIndex;\n }\n\n var current = newFiber.alternate;\n\n if (current !== null) {\n var oldIndex = current.index;\n\n if (oldIndex < lastPlacedIndex) {\n // This is a move.\n newFiber.flags |= Placement;\n return lastPlacedIndex;\n } else {\n // This item can stay in place.\n return oldIndex;\n }\n } else {\n // This is an insertion.\n newFiber.flags |= Placement;\n return lastPlacedIndex;\n }\n }\n\n function placeSingleChild(newFiber) {\n // This is simpler for the single child case. We only need to do a\n // placement for inserting new children.\n if (shouldTrackSideEffects && newFiber.alternate === null) {\n newFiber.flags |= Placement;\n }\n\n return newFiber;\n }\n\n function updateTextNode(returnFiber, current, textContent, lanes) {\n if (current === null || current.tag !== HostText) {\n // Insert\n var created = createFiberFromText(textContent, returnFiber.mode, lanes);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, textContent);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function updateElement(returnFiber, current, element, lanes) {\n var elementType = element.type;\n\n if (elementType === REACT_FRAGMENT_TYPE) {\n return updateFragment(returnFiber, current, element.props.children, lanes, element.key);\n }\n\n if (current !== null) {\n if (current.elementType === elementType || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(current, element) ) || // Lazy types should reconcile their resolved type.\n // We need to do this after the Hot Reloading check above,\n // because hot reloading has different semantics than prod because\n // it doesn't resuspend. So we can't let the call below suspend.\n typeof elementType === 'object' && elementType !== null && elementType.$$typeof === REACT_LAZY_TYPE && resolveLazy(elementType) === current.type) {\n // Move based on index\n var existing = useFiber(current, element.props);\n existing.ref = coerceRef(returnFiber, current, element);\n existing.return = returnFiber;\n\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n\n return existing;\n }\n } // Insert\n\n\n var created = createFiberFromElement(element, returnFiber.mode, lanes);\n created.ref = coerceRef(returnFiber, current, element);\n created.return = returnFiber;\n return created;\n }\n\n function updatePortal(returnFiber, current, portal, lanes) {\n if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {\n // Insert\n var created = createFiberFromPortal(portal, returnFiber.mode, lanes);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, portal.children || []);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function updateFragment(returnFiber, current, fragment, lanes, key) {\n if (current === null || current.tag !== Fragment) {\n // Insert\n var created = createFiberFromFragment(fragment, returnFiber.mode, lanes, key);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, fragment);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function createChild(returnFiber, newChild, lanes) {\n if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n var created = createFiberFromText('' + newChild, returnFiber.mode, lanes);\n created.return = returnFiber;\n return created;\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n var _created = createFiberFromElement(newChild, returnFiber.mode, lanes);\n\n _created.ref = coerceRef(returnFiber, null, newChild);\n _created.return = returnFiber;\n return _created;\n }\n\n case REACT_PORTAL_TYPE:\n {\n var _created2 = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n\n _created2.return = returnFiber;\n return _created2;\n }\n\n case REACT_LAZY_TYPE:\n {\n var payload = newChild._payload;\n var init = newChild._init;\n return createChild(returnFiber, init(payload), lanes);\n }\n }\n\n if (isArray(newChild) || getIteratorFn(newChild)) {\n var _created3 = createFiberFromFragment(newChild, returnFiber.mode, lanes, null);\n\n _created3.return = returnFiber;\n return _created3;\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType(returnFiber);\n }\n }\n\n return null;\n }\n\n function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n // Update the fiber if the keys match, otherwise return null.\n var key = oldFiber !== null ? oldFiber.key : null;\n\n if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n if (key !== null) {\n return null;\n }\n\n return updateTextNode(returnFiber, oldFiber, '' + newChild, lanes);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n if (newChild.key === key) {\n return updateElement(returnFiber, oldFiber, newChild, lanes);\n } else {\n return null;\n }\n }\n\n case REACT_PORTAL_TYPE:\n {\n if (newChild.key === key) {\n return updatePortal(returnFiber, oldFiber, newChild, lanes);\n } else {\n return null;\n }\n }\n\n case REACT_LAZY_TYPE:\n {\n var payload = newChild._payload;\n var init = newChild._init;\n return updateSlot(returnFiber, oldFiber, init(payload), lanes);\n }\n }\n\n if (isArray(newChild) || getIteratorFn(newChild)) {\n if (key !== null) {\n return null;\n }\n\n return updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType(returnFiber);\n }\n }\n\n return null;\n }\n\n function updateFromMap(existingChildren, returnFiber, newIdx, newChild, lanes) {\n if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n // Text nodes don't have keys, so we neither have to check the old nor\n // new node for the key. If both are text nodes, they match.\n var matchedFiber = existingChildren.get(newIdx) || null;\n return updateTextNode(returnFiber, matchedFiber, '' + newChild, lanes);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n return updateElement(returnFiber, _matchedFiber, newChild, lanes);\n }\n\n case REACT_PORTAL_TYPE:\n {\n var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n return updatePortal(returnFiber, _matchedFiber2, newChild, lanes);\n }\n\n case REACT_LAZY_TYPE:\n var payload = newChild._payload;\n var init = newChild._init;\n return updateFromMap(existingChildren, returnFiber, newIdx, init(payload), lanes);\n }\n\n if (isArray(newChild) || getIteratorFn(newChild)) {\n var _matchedFiber3 = existingChildren.get(newIdx) || null;\n\n return updateFragment(returnFiber, _matchedFiber3, newChild, lanes, null);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType(returnFiber);\n }\n }\n\n return null;\n }\n /**\n * Warns if there is a duplicate or missing key\n */\n\n\n function warnOnInvalidKey(child, knownKeys, returnFiber) {\n {\n if (typeof child !== 'object' || child === null) {\n return knownKeys;\n }\n\n switch (child.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n warnForMissingKey(child, returnFiber);\n var key = child.key;\n\n if (typeof key !== 'string') {\n break;\n }\n\n if (knownKeys === null) {\n knownKeys = new Set();\n knownKeys.add(key);\n break;\n }\n\n if (!knownKeys.has(key)) {\n knownKeys.add(key);\n break;\n }\n\n error('Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', key);\n\n break;\n\n case REACT_LAZY_TYPE:\n var payload = child._payload;\n var init = child._init;\n warnOnInvalidKey(init(payload), knownKeys, returnFiber);\n break;\n }\n }\n\n return knownKeys;\n }\n\n function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, lanes) {\n // This algorithm can't optimize by searching from both ends since we\n // don't have backpointers on fibers. I'm trying to see how far we can get\n // with that model. If it ends up not being worth the tradeoffs, we can\n // add it later.\n // Even with a two ended optimization, we'd want to optimize for the case\n // where there are few changes and brute force the comparison instead of\n // going for the Map. It'd like to explore hitting that path first in\n // forward-only mode and only go for the Map once we notice that we need\n // lots of look ahead. This doesn't handle reversal as well as two ended\n // search but that's unusual. Besides, for the two ended optimization to\n // work on Iterables, we'd need to copy the whole set.\n // In this first iteration, we'll just live with hitting the bad case\n // (adding everything to a Map) in for every insert/move.\n // If you change this code, also update reconcileChildrenIterator() which\n // uses the same algorithm.\n {\n // First, validate keys.\n var knownKeys = null;\n\n for (var i = 0; i < newChildren.length; i++) {\n var child = newChildren[i];\n knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);\n }\n }\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n\n for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n\n var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], lanes);\n\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (oldFiber === null) {\n oldFiber = nextOldFiber;\n }\n\n break;\n }\n\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (newIdx === newChildren.length) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n\n if (getIsHydrating()) {\n var numberOfForks = newIdx;\n pushTreeFork(returnFiber, numberOfForks);\n }\n\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber = createChild(returnFiber, newChildren[newIdx], lanes);\n\n if (_newFiber === null) {\n continue;\n }\n\n lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber;\n } else {\n previousNewFiber.sibling = _newFiber;\n }\n\n previousNewFiber = _newFiber;\n }\n\n if (getIsHydrating()) {\n var _numberOfForks = newIdx;\n pushTreeFork(returnFiber, _numberOfForks);\n }\n\n return resultingFirstChild;\n } // Add all children to a key map for quick lookups.\n\n\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], lanes);\n\n if (_newFiber2 !== null) {\n if (shouldTrackSideEffects) {\n if (_newFiber2.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);\n }\n }\n\n lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber2;\n } else {\n previousNewFiber.sibling = _newFiber2;\n }\n\n previousNewFiber = _newFiber2;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n if (getIsHydrating()) {\n var _numberOfForks2 = newIdx;\n pushTreeFork(returnFiber, _numberOfForks2);\n }\n\n return resultingFirstChild;\n }\n\n function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, lanes) {\n // This is the same implementation as reconcileChildrenArray(),\n // but using the iterator instead.\n var iteratorFn = getIteratorFn(newChildrenIterable);\n\n if (typeof iteratorFn !== 'function') {\n throw new Error('An object is not an iterable. This error is likely caused by a bug in ' + 'React. Please file an issue.');\n }\n\n {\n // We don't support rendering Generators because it's a mutation.\n // See https://github.com/facebook/react/issues/12995\n if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag\n newChildrenIterable[Symbol.toStringTag] === 'Generator') {\n if (!didWarnAboutGenerators) {\n error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');\n }\n\n didWarnAboutGenerators = true;\n } // Warn about using Maps as children\n\n\n if (newChildrenIterable.entries === iteratorFn) {\n if (!didWarnAboutMaps) {\n error('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');\n }\n\n didWarnAboutMaps = true;\n } // First, validate keys.\n // We'll get a different iterator later for the main pass.\n\n\n var _newChildren = iteratorFn.call(newChildrenIterable);\n\n if (_newChildren) {\n var knownKeys = null;\n\n var _step = _newChildren.next();\n\n for (; !_step.done; _step = _newChildren.next()) {\n var child = _step.value;\n knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);\n }\n }\n }\n\n var newChildren = iteratorFn.call(newChildrenIterable);\n\n if (newChildren == null) {\n throw new Error('An iterable object provided no iterator.');\n }\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n var step = newChildren.next();\n\n for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (oldFiber === null) {\n oldFiber = nextOldFiber;\n }\n\n break;\n }\n\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (step.done) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n\n if (getIsHydrating()) {\n var numberOfForks = newIdx;\n pushTreeFork(returnFiber, numberOfForks);\n }\n\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber3 = createChild(returnFiber, step.value, lanes);\n\n if (_newFiber3 === null) {\n continue;\n }\n\n lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber3;\n } else {\n previousNewFiber.sibling = _newFiber3;\n }\n\n previousNewFiber = _newFiber3;\n }\n\n if (getIsHydrating()) {\n var _numberOfForks3 = newIdx;\n pushTreeFork(returnFiber, _numberOfForks3);\n }\n\n return resultingFirstChild;\n } // Add all children to a key map for quick lookups.\n\n\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, lanes);\n\n if (_newFiber4 !== null) {\n if (shouldTrackSideEffects) {\n if (_newFiber4.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);\n }\n }\n\n lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber4;\n } else {\n previousNewFiber.sibling = _newFiber4;\n }\n\n previousNewFiber = _newFiber4;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n if (getIsHydrating()) {\n var _numberOfForks4 = newIdx;\n pushTreeFork(returnFiber, _numberOfForks4);\n }\n\n return resultingFirstChild;\n }\n\n function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, lanes) {\n // There's no need to check for keys on text nodes since we don't have a\n // way to define them.\n if (currentFirstChild !== null && currentFirstChild.tag === HostText) {\n // We already have an existing node so let's just update it and delete\n // the rest.\n deleteRemainingChildren(returnFiber, currentFirstChild.sibling);\n var existing = useFiber(currentFirstChild, textContent);\n existing.return = returnFiber;\n return existing;\n } // The existing first child is not a text node so we need to create one\n // and delete the existing ones.\n\n\n deleteRemainingChildren(returnFiber, currentFirstChild);\n var created = createFiberFromText(textContent, returnFiber.mode, lanes);\n created.return = returnFiber;\n return created;\n }\n\n function reconcileSingleElement(returnFiber, currentFirstChild, element, lanes) {\n var key = element.key;\n var child = currentFirstChild;\n\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n var elementType = element.type;\n\n if (elementType === REACT_FRAGMENT_TYPE) {\n if (child.tag === Fragment) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, element.props.children);\n existing.return = returnFiber;\n\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n\n return existing;\n }\n } else {\n if (child.elementType === elementType || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(child, element) ) || // Lazy types should reconcile their resolved type.\n // We need to do this after the Hot Reloading check above,\n // because hot reloading has different semantics than prod because\n // it doesn't resuspend. So we can't let the call below suspend.\n typeof elementType === 'object' && elementType !== null && elementType.$$typeof === REACT_LAZY_TYPE && resolveLazy(elementType) === child.type) {\n deleteRemainingChildren(returnFiber, child.sibling);\n\n var _existing = useFiber(child, element.props);\n\n _existing.ref = coerceRef(returnFiber, child, element);\n _existing.return = returnFiber;\n\n {\n _existing._debugSource = element._source;\n _existing._debugOwner = element._owner;\n }\n\n return _existing;\n }\n } // Didn't match.\n\n\n deleteRemainingChildren(returnFiber, child);\n break;\n } else {\n deleteChild(returnFiber, child);\n }\n\n child = child.sibling;\n }\n\n if (element.type === REACT_FRAGMENT_TYPE) {\n var created = createFiberFromFragment(element.props.children, returnFiber.mode, lanes, element.key);\n created.return = returnFiber;\n return created;\n } else {\n var _created4 = createFiberFromElement(element, returnFiber.mode, lanes);\n\n _created4.ref = coerceRef(returnFiber, currentFirstChild, element);\n _created4.return = returnFiber;\n return _created4;\n }\n }\n\n function reconcileSinglePortal(returnFiber, currentFirstChild, portal, lanes) {\n var key = portal.key;\n var child = currentFirstChild;\n\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, portal.children || []);\n existing.return = returnFiber;\n return existing;\n } else {\n deleteRemainingChildren(returnFiber, child);\n break;\n }\n } else {\n deleteChild(returnFiber, child);\n }\n\n child = child.sibling;\n }\n\n var created = createFiberFromPortal(portal, returnFiber.mode, lanes);\n created.return = returnFiber;\n return created;\n } // This API will tag the children with the side-effect of the reconciliation\n // itself. They will be added to the side-effect list as we pass through the\n // children and the parent.\n\n\n function reconcileChildFibers(returnFiber, currentFirstChild, newChild, lanes) {\n // This function is not recursive.\n // If the top level item is an array, we treat it as a set of children,\n // not as a fragment. Nested arrays on the other hand will be treated as\n // fragment nodes. Recursion happens at the normal flow.\n // Handle top level unkeyed fragments as if they were arrays.\n // This leads to an ambiguity between <>{[...]}</> and <>...</>.\n // We treat the ambiguous cases above the same.\n var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null;\n\n if (isUnkeyedTopLevelFragment) {\n newChild = newChild.props.children;\n } // Handle object types\n\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, lanes));\n\n case REACT_PORTAL_TYPE:\n return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, lanes));\n\n case REACT_LAZY_TYPE:\n var payload = newChild._payload;\n var init = newChild._init; // TODO: This function is supposed to be non-recursive.\n\n return reconcileChildFibers(returnFiber, currentFirstChild, init(payload), lanes);\n }\n\n if (isArray(newChild)) {\n return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, lanes);\n }\n\n if (getIteratorFn(newChild)) {\n return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, lanes);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {\n return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, lanes));\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType(returnFiber);\n }\n } // Remaining cases are all treated as empty.\n\n\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n\n return reconcileChildFibers;\n}\n\nvar reconcileChildFibers = ChildReconciler(true);\nvar mountChildFibers = ChildReconciler(false);\nfunction cloneChildFibers(current, workInProgress) {\n if (current !== null && workInProgress.child !== current.child) {\n throw new Error('Resuming work not yet implemented.');\n }\n\n if (workInProgress.child === null) {\n return;\n }\n\n var currentChild = workInProgress.child;\n var newChild = createWorkInProgress(currentChild, currentChild.pendingProps);\n workInProgress.child = newChild;\n newChild.return = workInProgress;\n\n while (currentChild.sibling !== null) {\n currentChild = currentChild.sibling;\n newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps);\n newChild.return = workInProgress;\n }\n\n newChild.sibling = null;\n} // Reset a workInProgress child set to prepare it for a second pass.\n\nfunction resetChildFibers(workInProgress, lanes) {\n var child = workInProgress.child;\n\n while (child !== null) {\n resetWorkInProgress(child, lanes);\n child = child.sibling;\n }\n}\n\nvar NO_CONTEXT = {};\nvar contextStackCursor$1 = createCursor(NO_CONTEXT);\nvar contextFiberStackCursor = createCursor(NO_CONTEXT);\nvar rootInstanceStackCursor = createCursor(NO_CONTEXT);\n\nfunction requiredContext(c) {\n if (c === NO_CONTEXT) {\n throw new Error('Expected host context to exist. This error is likely caused by a bug ' + 'in React. Please file an issue.');\n }\n\n return c;\n}\n\nfunction getRootHostContainer() {\n var rootInstance = requiredContext(rootInstanceStackCursor.current);\n return rootInstance;\n}\n\nfunction pushHostContainer(fiber, nextRootInstance) {\n // Push current root instance onto the stack;\n // This allows us to reset root when portals are popped.\n push(rootInstanceStackCursor, nextRootInstance, fiber); // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n\n push(contextFiberStackCursor, fiber, fiber); // Finally, we need to push the host context to the stack.\n // However, we can't just call getRootHostContext() and push it because\n // we'd have a different number of entries on the stack depending on\n // whether getRootHostContext() throws somewhere in renderer code or not.\n // So we push an empty value first. This lets us safely unwind on errors.\n\n push(contextStackCursor$1, NO_CONTEXT, fiber);\n var nextRootContext = getRootHostContext(nextRootInstance); // Now that we know this function doesn't throw, replace it.\n\n pop(contextStackCursor$1, fiber);\n push(contextStackCursor$1, nextRootContext, fiber);\n}\n\nfunction popHostContainer(fiber) {\n pop(contextStackCursor$1, fiber);\n pop(contextFiberStackCursor, fiber);\n pop(rootInstanceStackCursor, fiber);\n}\n\nfunction getHostContext() {\n var context = requiredContext(contextStackCursor$1.current);\n return context;\n}\n\nfunction pushHostContext(fiber) {\n var rootInstance = requiredContext(rootInstanceStackCursor.current);\n var context = requiredContext(contextStackCursor$1.current);\n var nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique.\n\n if (context === nextContext) {\n return;\n } // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n\n\n push(contextFiberStackCursor, fiber, fiber);\n push(contextStackCursor$1, nextContext, fiber);\n}\n\nfunction popHostContext(fiber) {\n // Do not pop unless this Fiber provided the current context.\n // pushHostContext() only pushes Fibers that provide unique contexts.\n if (contextFiberStackCursor.current !== fiber) {\n return;\n }\n\n pop(contextStackCursor$1, fiber);\n pop(contextFiberStackCursor, fiber);\n}\n\nvar DefaultSuspenseContext = 0; // The Suspense Context is split into two parts. The lower bits is\n// inherited deeply down the subtree. The upper bits only affect\n// this immediate suspense boundary and gets reset each new\n// boundary or suspense list.\n\nvar SubtreeSuspenseContextMask = 1; // Subtree Flags:\n// InvisibleParentSuspenseContext indicates that one of our parent Suspense\n// boundaries is not currently showing visible main content.\n// Either because it is already showing a fallback or is not mounted at all.\n// We can use this to determine if it is desirable to trigger a fallback at\n// the parent. If not, then we might need to trigger undesirable boundaries\n// and/or suspend the commit to avoid hiding the parent content.\n\nvar InvisibleParentSuspenseContext = 1; // Shallow Flags:\n// ForceSuspenseFallback can be used by SuspenseList to force newly added\n// items into their fallback state during one of the render passes.\n\nvar ForceSuspenseFallback = 2;\nvar suspenseStackCursor = createCursor(DefaultSuspenseContext);\nfunction hasSuspenseContext(parentContext, flag) {\n return (parentContext & flag) !== 0;\n}\nfunction setDefaultShallowSuspenseContext(parentContext) {\n return parentContext & SubtreeSuspenseContextMask;\n}\nfunction setShallowSuspenseContext(parentContext, shallowContext) {\n return parentContext & SubtreeSuspenseContextMask | shallowContext;\n}\nfunction addSubtreeSuspenseContext(parentContext, subtreeContext) {\n return parentContext | subtreeContext;\n}\nfunction pushSuspenseContext(fiber, newContext) {\n push(suspenseStackCursor, newContext, fiber);\n}\nfunction popSuspenseContext(fiber) {\n pop(suspenseStackCursor, fiber);\n}\n\nfunction shouldCaptureSuspense(workInProgress, hasInvisibleParent) {\n // If it was the primary children that just suspended, capture and render the\n // fallback. Otherwise, don't capture and bubble to the next boundary.\n var nextState = workInProgress.memoizedState;\n\n if (nextState !== null) {\n if (nextState.dehydrated !== null) {\n // A dehydrated boundary always captures.\n return true;\n }\n\n return false;\n }\n\n var props = workInProgress.memoizedProps; // Regular boundaries always capture.\n\n {\n return true;\n } // If it's a boundary we should avoid, then we prefer to bubble up to the\n}\nfunction findFirstSuspended(row) {\n var node = row;\n\n while (node !== null) {\n if (node.tag === SuspenseComponent) {\n var state = node.memoizedState;\n\n if (state !== null) {\n var dehydrated = state.dehydrated;\n\n if (dehydrated === null || isSuspenseInstancePending(dehydrated) || isSuspenseInstanceFallback(dehydrated)) {\n return node;\n }\n }\n } else if (node.tag === SuspenseListComponent && // revealOrder undefined can't be trusted because it don't\n // keep track of whether it suspended or not.\n node.memoizedProps.revealOrder !== undefined) {\n var didSuspend = (node.flags & DidCapture) !== NoFlags;\n\n if (didSuspend) {\n return node;\n }\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === row) {\n return null;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === row) {\n return null;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n\n return null;\n}\n\nvar NoFlags$1 =\n/* */\n0; // Represents whether effect should fire.\n\nvar HasEffect =\n/* */\n1; // Represents the phase in which the effect (not the clean-up) fires.\n\nvar Insertion =\n/* */\n2;\nvar Layout =\n/* */\n4;\nvar Passive$1 =\n/* */\n8;\n\n// and should be reset before starting a new render.\n// This tracks which mutable sources need to be reset after a render.\n\nvar workInProgressSources = [];\nfunction resetWorkInProgressVersions() {\n for (var i = 0; i < workInProgressSources.length; i++) {\n var mutableSource = workInProgressSources[i];\n\n {\n mutableSource._workInProgressVersionPrimary = null;\n }\n }\n\n workInProgressSources.length = 0;\n}\n// This ensures that the version used for server rendering matches the one\n// that is eventually read during hydration.\n// If they don't match there's a potential tear and a full deopt render is required.\n\nfunction registerMutableSourceForHydration(root, mutableSource) {\n var getVersion = mutableSource._getVersion;\n var version = getVersion(mutableSource._source); // TODO Clear this data once all pending hydration work is finished.\n // Retaining it forever may interfere with GC.\n\n if (root.mutableSourceEagerHydrationData == null) {\n root.mutableSourceEagerHydrationData = [mutableSource, version];\n } else {\n root.mutableSourceEagerHydrationData.push(mutableSource, version);\n }\n}\n\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentBatchConfig$2 = ReactSharedInternals.ReactCurrentBatchConfig;\nvar didWarnAboutMismatchedHooksForComponent;\nvar didWarnUncachedGetSnapshot;\n\n{\n didWarnAboutMismatchedHooksForComponent = new Set();\n}\n\n// These are set right before calling the component.\nvar renderLanes = NoLanes; // The work-in-progress fiber. I've named it differently to distinguish it from\n// the work-in-progress hook.\n\nvar currentlyRenderingFiber$1 = null; // Hooks are stored as a linked list on the fiber's memoizedState field. The\n// current hook list is the list that belongs to the current fiber. The\n// work-in-progress hook list is a new list that will be added to the\n// work-in-progress fiber.\n\nvar currentHook = null;\nvar workInProgressHook = null; // Whether an update was scheduled at any point during the render phase. This\n// does not get reset if we do another render pass; only when we're completely\n// finished evaluating this component. This is an optimization so we know\n// whether we need to clear render phase updates after a throw.\n\nvar didScheduleRenderPhaseUpdate = false; // Where an update was scheduled only during the current render pass. This\n// gets reset after each attempt.\n// TODO: Maybe there's some way to consolidate this with\n// `didScheduleRenderPhaseUpdate`. Or with `numberOfReRenders`.\n\nvar didScheduleRenderPhaseUpdateDuringThisPass = false; // Counts the number of useId hooks in this component.\n\nvar localIdCounter = 0; // Used for ids that are generated completely client-side (i.e. not during\n// hydration). This counter is global, so client ids are not stable across\n// render attempts.\n\nvar globalClientIdCounter = 0;\nvar RE_RENDER_LIMIT = 25; // In DEV, this is the name of the currently executing primitive hook\n\nvar currentHookNameInDev = null; // In DEV, this list ensures that hooks are called in the same order between renders.\n// The list stores the order of hooks used during the initial render (mount).\n// Subsequent renders (updates) reference this list.\n\nvar hookTypesDev = null;\nvar hookTypesUpdateIndexDev = -1; // In DEV, this tracks whether currently rendering component needs to ignore\n// the dependencies for Hooks that need them (e.g. useEffect or useMemo).\n// When true, such Hooks will always be \"remounted\". Only used during hot reload.\n\nvar ignorePreviousDependencies = false;\n\nfunction mountHookTypesDev() {\n {\n var hookName = currentHookNameInDev;\n\n if (hookTypesDev === null) {\n hookTypesDev = [hookName];\n } else {\n hookTypesDev.push(hookName);\n }\n }\n}\n\nfunction updateHookTypesDev() {\n {\n var hookName = currentHookNameInDev;\n\n if (hookTypesDev !== null) {\n hookTypesUpdateIndexDev++;\n\n if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) {\n warnOnHookMismatchInDev(hookName);\n }\n }\n }\n}\n\nfunction checkDepsAreArrayDev(deps) {\n {\n if (deps !== undefined && deps !== null && !isArray(deps)) {\n // Verify deps, but only on mount to avoid extra checks.\n // It's unlikely their type would change as usually you define them inline.\n error('%s received a final argument that is not an array (instead, received `%s`). When ' + 'specified, the final argument must be an array.', currentHookNameInDev, typeof deps);\n }\n }\n}\n\nfunction warnOnHookMismatchInDev(currentHookName) {\n {\n var componentName = getComponentNameFromFiber(currentlyRenderingFiber$1);\n\n if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) {\n didWarnAboutMismatchedHooksForComponent.add(componentName);\n\n if (hookTypesDev !== null) {\n var table = '';\n var secondColumnStart = 30;\n\n for (var i = 0; i <= hookTypesUpdateIndexDev; i++) {\n var oldHookName = hookTypesDev[i];\n var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName;\n var row = i + 1 + \". \" + oldHookName; // Extra space so second column lines up\n // lol @ IE not supporting String#repeat\n\n while (row.length < secondColumnStart) {\n row += ' ';\n }\n\n row += newHookName + '\\n';\n table += row;\n }\n\n error('React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://reactjs.org/link/rules-of-hooks\\n\\n' + ' Previous render Next render\\n' + ' ------------------------------------------------------\\n' + '%s' + ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n', componentName, table);\n }\n }\n }\n}\n\nfunction throwInvalidHookError() {\n throw new Error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\\n' + '2. You might be breaking the Rules of Hooks\\n' + '3. You might have more than one copy of React in the same app\\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');\n}\n\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n {\n if (ignorePreviousDependencies) {\n // Only true when this component is being hot reloaded.\n return false;\n }\n }\n\n if (prevDeps === null) {\n {\n error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);\n }\n\n return false;\n }\n\n {\n // Don't bother comparing lengths in prod because these arrays should be\n // passed inline.\n if (nextDeps.length !== prevDeps.length) {\n error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\\n\\n' + 'Previous: %s\\n' + 'Incoming: %s', currentHookNameInDev, \"[\" + prevDeps.join(', ') + \"]\", \"[\" + nextDeps.join(', ') + \"]\");\n }\n }\n\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {\n if (objectIs(nextDeps[i], prevDeps[i])) {\n continue;\n }\n\n return false;\n }\n\n return true;\n}\n\nfunction renderWithHooks(current, workInProgress, Component, props, secondArg, nextRenderLanes) {\n renderLanes = nextRenderLanes;\n currentlyRenderingFiber$1 = workInProgress;\n\n {\n hookTypesDev = current !== null ? current._debugHookTypes : null;\n hookTypesUpdateIndexDev = -1; // Used for hot reloading:\n\n ignorePreviousDependencies = current !== null && current.type !== workInProgress.type;\n }\n\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.lanes = NoLanes; // The following should have already been reset\n // currentHook = null;\n // workInProgressHook = null;\n // didScheduleRenderPhaseUpdate = false;\n // localIdCounter = 0;\n // TODO Warn if no hooks are used at all during mount, then some are used during update.\n // Currently we will identify the update render as a mount because memoizedState === null.\n // This is tricky because it's valid for certain types of components (e.g. React.lazy)\n // Using memoizedState to differentiate between mount/update only works if at least one stateful hook is used.\n // Non-stateful hooks (e.g. context) don't get added to memoizedState,\n // so memoizedState would be null during updates and mounts.\n\n {\n if (current !== null && current.memoizedState !== null) {\n ReactCurrentDispatcher$1.current = HooksDispatcherOnUpdateInDEV;\n } else if (hookTypesDev !== null) {\n // This dispatcher handles an edge case where a component is updating,\n // but no stateful hooks have been used.\n // We want to match the production code behavior (which will use HooksDispatcherOnMount),\n // but with the extra DEV validation to ensure hooks ordering hasn't changed.\n // This dispatcher does that.\n ReactCurrentDispatcher$1.current = HooksDispatcherOnMountWithHookTypesInDEV;\n } else {\n ReactCurrentDispatcher$1.current = HooksDispatcherOnMountInDEV;\n }\n }\n\n var children = Component(props, secondArg); // Check if there was a render phase update\n\n if (didScheduleRenderPhaseUpdateDuringThisPass) {\n // Keep rendering in a loop for as long as render phase updates continue to\n // be scheduled. Use a counter to prevent infinite loops.\n var numberOfReRenders = 0;\n\n do {\n didScheduleRenderPhaseUpdateDuringThisPass = false;\n localIdCounter = 0;\n\n if (numberOfReRenders >= RE_RENDER_LIMIT) {\n throw new Error('Too many re-renders. React limits the number of renders to prevent ' + 'an infinite loop.');\n }\n\n numberOfReRenders += 1;\n\n {\n // Even when hot reloading, allow dependencies to stabilize\n // after first render to prevent infinite render phase updates.\n ignorePreviousDependencies = false;\n } // Start over from the beginning of the list\n\n\n currentHook = null;\n workInProgressHook = null;\n workInProgress.updateQueue = null;\n\n {\n // Also validate hook order for cascading updates.\n hookTypesUpdateIndexDev = -1;\n }\n\n ReactCurrentDispatcher$1.current = HooksDispatcherOnRerenderInDEV ;\n children = Component(props, secondArg);\n } while (didScheduleRenderPhaseUpdateDuringThisPass);\n } // We can assume the previous dispatcher is always this one, since we set it\n // at the beginning of the render phase and there's no re-entrance.\n\n\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n\n {\n workInProgress._debugHookTypes = hookTypesDev;\n } // This check uses currentHook so that it works the same in DEV and prod bundles.\n // hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.\n\n\n var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null;\n renderLanes = NoLanes;\n currentlyRenderingFiber$1 = null;\n currentHook = null;\n workInProgressHook = null;\n\n {\n currentHookNameInDev = null;\n hookTypesDev = null;\n hookTypesUpdateIndexDev = -1; // Confirm that a static flag was not added or removed since the last\n // render. If this fires, it suggests that we incorrectly reset the static\n // flags in some other part of the codebase. This has happened before, for\n // example, in the SuspenseList implementation.\n\n if (current !== null && (current.flags & StaticMask) !== (workInProgress.flags & StaticMask) && // Disable this warning in legacy mode, because legacy Suspense is weird\n // and creates false positives. To make this work in legacy mode, we'd\n // need to mark fibers that commit in an incomplete state, somehow. For\n // now I'll disable the warning that most of the bugs that would trigger\n // it are either exclusive to concurrent mode or exist in both.\n (current.mode & ConcurrentMode) !== NoMode) {\n error('Internal React error: Expected static flag was missing. Please ' + 'notify the React team.');\n }\n }\n\n didScheduleRenderPhaseUpdate = false; // This is reset by checkDidRenderIdHook\n // localIdCounter = 0;\n\n if (didRenderTooFewHooks) {\n throw new Error('Rendered fewer hooks than expected. This may be caused by an accidental ' + 'early return statement.');\n }\n\n return children;\n}\nfunction checkDidRenderIdHook() {\n // This should be called immediately after every renderWithHooks call.\n // Conceptually, it's part of the return value of renderWithHooks; it's only a\n // separate function to avoid using an array tuple.\n var didRenderIdHook = localIdCounter !== 0;\n localIdCounter = 0;\n return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n workInProgress.updateQueue = current.updateQueue; // TODO: Don't need to reset the flags here, because they're reset in the\n // complete phase (bubbleProperties).\n\n if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {\n workInProgress.flags &= ~(MountPassiveDev | MountLayoutDev | Passive | Update);\n } else {\n workInProgress.flags &= ~(Passive | Update);\n }\n\n current.lanes = removeLanes(current.lanes, lanes);\n}\nfunction resetHooksAfterThrow() {\n // We can assume the previous dispatcher is always this one, since we set it\n // at the beginning of the render phase and there's no re-entrance.\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n\n if (didScheduleRenderPhaseUpdate) {\n // There were render phase updates. These are only valid for this render\n // phase, which we are now aborting. Remove the updates from the queues so\n // they do not persist to the next render. Do not remove updates from hooks\n // that weren't processed.\n //\n // Only reset the updates from the queue if it has a clone. If it does\n // not have a clone, that means it wasn't processed, and the updates were\n // scheduled before we entered the render phase.\n var hook = currentlyRenderingFiber$1.memoizedState;\n\n while (hook !== null) {\n var queue = hook.queue;\n\n if (queue !== null) {\n queue.pending = null;\n }\n\n hook = hook.next;\n }\n\n didScheduleRenderPhaseUpdate = false;\n }\n\n renderLanes = NoLanes;\n currentlyRenderingFiber$1 = null;\n currentHook = null;\n workInProgressHook = null;\n\n {\n hookTypesDev = null;\n hookTypesUpdateIndexDev = -1;\n currentHookNameInDev = null;\n isUpdatingOpaqueValueInRenderPhase = false;\n }\n\n didScheduleRenderPhaseUpdateDuringThisPass = false;\n localIdCounter = 0;\n}\n\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n\n if (workInProgressHook === null) {\n // This is the first hook in the list\n currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook;\n } else {\n // Append to the end of the list\n workInProgressHook = workInProgressHook.next = hook;\n }\n\n return workInProgressHook;\n}\n\nfunction updateWorkInProgressHook() {\n // This function is used both for updates and for re-renders triggered by a\n // render phase update. It assumes there is either a current hook we can\n // clone, or a work-in-progress hook from a previous render pass that we can\n // use as a base. When we reach the end of the base list, we must switch to\n // the dispatcher used for mounts.\n var nextCurrentHook;\n\n if (currentHook === null) {\n var current = currentlyRenderingFiber$1.alternate;\n\n if (current !== null) {\n nextCurrentHook = current.memoizedState;\n } else {\n nextCurrentHook = null;\n }\n } else {\n nextCurrentHook = currentHook.next;\n }\n\n var nextWorkInProgressHook;\n\n if (workInProgressHook === null) {\n nextWorkInProgressHook = currentlyRenderingFiber$1.memoizedState;\n } else {\n nextWorkInProgressHook = workInProgressHook.next;\n }\n\n if (nextWorkInProgressHook !== null) {\n // There's already a work-in-progress. Reuse it.\n workInProgressHook = nextWorkInProgressHook;\n nextWorkInProgressHook = workInProgressHook.next;\n currentHook = nextCurrentHook;\n } else {\n // Clone from the current hook.\n if (nextCurrentHook === null) {\n throw new Error('Rendered more hooks than during the previous render.');\n }\n\n currentHook = nextCurrentHook;\n var newHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n\n if (workInProgressHook === null) {\n // This is the first hook in the list.\n currentlyRenderingFiber$1.memoizedState = workInProgressHook = newHook;\n } else {\n // Append to the end of the list.\n workInProgressHook = workInProgressHook.next = newHook;\n }\n }\n\n return workInProgressHook;\n}\n\nfunction createFunctionComponentUpdateQueue() {\n return {\n lastEffect: null,\n stores: null\n };\n}\n\nfunction basicStateReducer(state, action) {\n // $FlowFixMe: Flow doesn't like mixed types\n return typeof action === 'function' ? action(state) : action;\n}\n\nfunction mountReducer(reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n var initialState;\n\n if (init !== undefined) {\n initialState = init(initialArg);\n } else {\n initialState = initialArg;\n }\n\n hook.memoizedState = hook.baseState = initialState;\n var queue = {\n pending: null,\n interleaved: null,\n lanes: NoLanes,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n hook.queue = queue;\n var dispatch = queue.dispatch = dispatchReducerAction.bind(null, currentlyRenderingFiber$1, queue);\n return [hook.memoizedState, dispatch];\n}\n\nfunction updateReducer(reducer, initialArg, init) {\n var hook = updateWorkInProgressHook();\n var queue = hook.queue;\n\n if (queue === null) {\n throw new Error('Should have a queue. This is likely a bug in React. Please file an issue.');\n }\n\n queue.lastRenderedReducer = reducer;\n var current = currentHook; // The last rebase update that is NOT part of the base state.\n\n var baseQueue = current.baseQueue; // The last pending update that hasn't been processed yet.\n\n var pendingQueue = queue.pending;\n\n if (pendingQueue !== null) {\n // We have new updates that haven't been processed yet.\n // We'll add them to the base queue.\n if (baseQueue !== null) {\n // Merge the pending queue and the base queue.\n var baseFirst = baseQueue.next;\n var pendingFirst = pendingQueue.next;\n baseQueue.next = pendingFirst;\n pendingQueue.next = baseFirst;\n }\n\n {\n if (current.baseQueue !== baseQueue) {\n // Internal invariant that should never happen, but feasibly could in\n // the future if we implement resuming, or some form of that.\n error('Internal error: Expected work-in-progress queue to be a clone. ' + 'This is a bug in React.');\n }\n }\n\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n\n if (baseQueue !== null) {\n // We have a queue to process.\n var first = baseQueue.next;\n var newState = current.baseState;\n var newBaseState = null;\n var newBaseQueueFirst = null;\n var newBaseQueueLast = null;\n var update = first;\n\n do {\n var updateLane = update.lane;\n\n if (!isSubsetOfLanes(renderLanes, updateLane)) {\n // Priority is insufficient. Skip this update. If this is the first\n // skipped update, the previous update/state is the new base\n // update/state.\n var clone = {\n lane: updateLane,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n };\n\n if (newBaseQueueLast === null) {\n newBaseQueueFirst = newBaseQueueLast = clone;\n newBaseState = newState;\n } else {\n newBaseQueueLast = newBaseQueueLast.next = clone;\n } // Update the remaining priority in the queue.\n // TODO: Don't need to accumulate this. Instead, we can remove\n // renderLanes from the original lanes.\n\n\n currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, updateLane);\n markSkippedUpdateLanes(updateLane);\n } else {\n // This update does have sufficient priority.\n if (newBaseQueueLast !== null) {\n var _clone = {\n // This update is going to be committed so we never want uncommit\n // it. Using NoLane works because 0 is a subset of all bitmasks, so\n // this will never be skipped by the check above.\n lane: NoLane,\n action: update.action,\n hasEagerState: update.hasEagerState,\n eagerState: update.eagerState,\n next: null\n };\n newBaseQueueLast = newBaseQueueLast.next = _clone;\n } // Process this update.\n\n\n if (update.hasEagerState) {\n // If this update is a state update (not a reducer) and was processed eagerly,\n // we can use the eagerly computed state\n newState = update.eagerState;\n } else {\n var action = update.action;\n newState = reducer(newState, action);\n }\n }\n\n update = update.next;\n } while (update !== null && update !== first);\n\n if (newBaseQueueLast === null) {\n newBaseState = newState;\n } else {\n newBaseQueueLast.next = newBaseQueueFirst;\n } // Mark that the fiber performed work, but only if the new state is\n // different from the current state.\n\n\n if (!objectIs(newState, hook.memoizedState)) {\n markWorkInProgressReceivedUpdate();\n }\n\n hook.memoizedState = newState;\n hook.baseState = newBaseState;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = newState;\n } // Interleaved updates are stored on a separate queue. We aren't going to\n // process them during this render, but we do need to track which lanes\n // are remaining.\n\n\n var lastInterleaved = queue.interleaved;\n\n if (lastInterleaved !== null) {\n var interleaved = lastInterleaved;\n\n do {\n var interleavedLane = interleaved.lane;\n currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, interleavedLane);\n markSkippedUpdateLanes(interleavedLane);\n interleaved = interleaved.next;\n } while (interleaved !== lastInterleaved);\n } else if (baseQueue === null) {\n // `queue.lanes` is used for entangling transitions. We can set it back to\n // zero once the queue is empty.\n queue.lanes = NoLanes;\n }\n\n var dispatch = queue.dispatch;\n return [hook.memoizedState, dispatch];\n}\n\nfunction rerenderReducer(reducer, initialArg, init) {\n var hook = updateWorkInProgressHook();\n var queue = hook.queue;\n\n if (queue === null) {\n throw new Error('Should have a queue. This is likely a bug in React. Please file an issue.');\n }\n\n queue.lastRenderedReducer = reducer; // This is a re-render. Apply the new render phase updates to the previous\n // work-in-progress hook.\n\n var dispatch = queue.dispatch;\n var lastRenderPhaseUpdate = queue.pending;\n var newState = hook.memoizedState;\n\n if (lastRenderPhaseUpdate !== null) {\n // The queue doesn't persist past this render pass.\n queue.pending = null;\n var firstRenderPhaseUpdate = lastRenderPhaseUpdate.next;\n var update = firstRenderPhaseUpdate;\n\n do {\n // Process this render phase update. We don't have to check the\n // priority because it will always be the same as the current\n // render's.\n var action = update.action;\n newState = reducer(newState, action);\n update = update.next;\n } while (update !== firstRenderPhaseUpdate); // Mark that the fiber performed work, but only if the new state is\n // different from the current state.\n\n\n if (!objectIs(newState, hook.memoizedState)) {\n markWorkInProgressReceivedUpdate();\n }\n\n hook.memoizedState = newState; // Don't persist the state accumulated from the render phase updates to\n // the base state unless the queue is empty.\n // TODO: Not sure if this is the desired semantics, but it's what we\n // do for gDSFP. I can't remember why.\n\n if (hook.baseQueue === null) {\n hook.baseState = newState;\n }\n\n queue.lastRenderedState = newState;\n }\n\n return [newState, dispatch];\n}\n\nfunction mountMutableSource(source, getSnapshot, subscribe) {\n {\n return undefined;\n }\n}\n\nfunction updateMutableSource(source, getSnapshot, subscribe) {\n {\n return undefined;\n }\n}\n\nfunction mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber$1;\n var hook = mountWorkInProgressHook();\n var nextSnapshot;\n var isHydrating = getIsHydrating();\n\n if (isHydrating) {\n if (getServerSnapshot === undefined) {\n throw new Error('Missing getServerSnapshot, which is required for ' + 'server-rendered content. Will revert to client rendering.');\n }\n\n nextSnapshot = getServerSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n if (nextSnapshot !== getServerSnapshot()) {\n error('The result of getServerSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n }\n } else {\n nextSnapshot = getSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n var cachedSnapshot = getSnapshot();\n\n if (!objectIs(nextSnapshot, cachedSnapshot)) {\n error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n } // Unless we're rendering a blocking lane, schedule a consistency check.\n // Right before committing, we will walk the tree and check if any of the\n // stores were mutated.\n //\n // We won't do this if we're hydrating server-rendered content, because if\n // the content is stale, it's already visible anyway. Instead we'll patch\n // it up in a passive effect.\n\n\n var root = getWorkInProgressRoot();\n\n if (root === null) {\n throw new Error('Expected a work-in-progress root. This is a bug in React. Please file an issue.');\n }\n\n if (!includesBlockingLane(root, renderLanes)) {\n pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);\n }\n } // Read the current snapshot from the store on every render. This breaks the\n // normal rules of React, and only works because store updates are\n // always synchronous.\n\n\n hook.memoizedState = nextSnapshot;\n var inst = {\n value: nextSnapshot,\n getSnapshot: getSnapshot\n };\n hook.queue = inst; // Schedule an effect to subscribe to the store.\n\n mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [subscribe]); // Schedule an effect to update the mutable instance fields. We will update\n // this whenever subscribe, getSnapshot, or value changes. Because there's no\n // clean-up function, and we track the deps correctly, we can call pushEffect\n // directly, without storing any additional state. For the same reason, we\n // don't need to set a static flag, either.\n // TODO: We can move this to the passive phase once we add a pre-commit\n // consistency check. See the next comment.\n\n fiber.flags |= Passive;\n pushEffect(HasEffect | Passive$1, updateStoreInstance.bind(null, fiber, inst, nextSnapshot, getSnapshot), undefined, null);\n return nextSnapshot;\n}\n\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var fiber = currentlyRenderingFiber$1;\n var hook = updateWorkInProgressHook(); // Read the current snapshot from the store on every render. This breaks the\n // normal rules of React, and only works because store updates are\n // always synchronous.\n\n var nextSnapshot = getSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n var cachedSnapshot = getSnapshot();\n\n if (!objectIs(nextSnapshot, cachedSnapshot)) {\n error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n }\n\n var prevSnapshot = hook.memoizedState;\n var snapshotChanged = !objectIs(prevSnapshot, nextSnapshot);\n\n if (snapshotChanged) {\n hook.memoizedState = nextSnapshot;\n markWorkInProgressReceivedUpdate();\n }\n\n var inst = hook.queue;\n updateEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [subscribe]); // Whenever getSnapshot or subscribe changes, we need to check in the\n // commit phase if there was an interleaved mutation. In concurrent mode\n // this can happen all the time, but even in synchronous mode, an earlier\n // effect may have mutated the store.\n\n if (inst.getSnapshot !== getSnapshot || snapshotChanged || // Check if the susbcribe function changed. We can save some memory by\n // checking whether we scheduled a subscription effect above.\n workInProgressHook !== null && workInProgressHook.memoizedState.tag & HasEffect) {\n fiber.flags |= Passive;\n pushEffect(HasEffect | Passive$1, updateStoreInstance.bind(null, fiber, inst, nextSnapshot, getSnapshot), undefined, null); // Unless we're rendering a blocking lane, schedule a consistency check.\n // Right before committing, we will walk the tree and check if any of the\n // stores were mutated.\n\n var root = getWorkInProgressRoot();\n\n if (root === null) {\n throw new Error('Expected a work-in-progress root. This is a bug in React. Please file an issue.');\n }\n\n if (!includesBlockingLane(root, renderLanes)) {\n pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);\n }\n }\n\n return nextSnapshot;\n}\n\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n fiber.flags |= StoreConsistency;\n var check = {\n getSnapshot: getSnapshot,\n value: renderedSnapshot\n };\n var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;\n\n if (componentUpdateQueue === null) {\n componentUpdateQueue = createFunctionComponentUpdateQueue();\n currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;\n componentUpdateQueue.stores = [check];\n } else {\n var stores = componentUpdateQueue.stores;\n\n if (stores === null) {\n componentUpdateQueue.stores = [check];\n } else {\n stores.push(check);\n }\n }\n}\n\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n // These are updated in the passive phase\n inst.value = nextSnapshot;\n inst.getSnapshot = getSnapshot; // Something may have been mutated in between render and commit. This could\n // have been in an event that fired before the passive effects, or it could\n // have been in a layout effect. In that case, we would have used the old\n // snapsho and getSnapshot values to bail out. We need to check one more time.\n\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceStoreRerender(fiber);\n }\n}\n\nfunction subscribeToStore(fiber, inst, subscribe) {\n var handleStoreChange = function () {\n // The store changed. Check if the snapshot changed since the last time we\n // read from the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceStoreRerender(fiber);\n }\n }; // Subscribe to the store and return a clean-up function.\n\n\n return subscribe(handleStoreChange);\n}\n\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n var prevValue = inst.value;\n\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(prevValue, nextValue);\n } catch (error) {\n return true;\n }\n}\n\nfunction forceStoreRerender(fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n }\n}\n\nfunction mountState(initialState) {\n var hook = mountWorkInProgressHook();\n\n if (typeof initialState === 'function') {\n // $FlowFixMe: Flow doesn't like mixed types\n initialState = initialState();\n }\n\n hook.memoizedState = hook.baseState = initialState;\n var queue = {\n pending: null,\n interleaved: null,\n lanes: NoLanes,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n hook.queue = queue;\n var dispatch = queue.dispatch = dispatchSetState.bind(null, currentlyRenderingFiber$1, queue);\n return [hook.memoizedState, dispatch];\n}\n\nfunction updateState(initialState) {\n return updateReducer(basicStateReducer);\n}\n\nfunction rerenderState(initialState) {\n return rerenderReducer(basicStateReducer);\n}\n\nfunction pushEffect(tag, create, destroy, deps) {\n var effect = {\n tag: tag,\n create: create,\n destroy: destroy,\n deps: deps,\n // Circular\n next: null\n };\n var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;\n\n if (componentUpdateQueue === null) {\n componentUpdateQueue = createFunctionComponentUpdateQueue();\n currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;\n componentUpdateQueue.lastEffect = effect.next = effect;\n } else {\n var lastEffect = componentUpdateQueue.lastEffect;\n\n if (lastEffect === null) {\n componentUpdateQueue.lastEffect = effect.next = effect;\n } else {\n var firstEffect = lastEffect.next;\n lastEffect.next = effect;\n effect.next = firstEffect;\n componentUpdateQueue.lastEffect = effect;\n }\n }\n\n return effect;\n}\n\nfunction mountRef(initialValue) {\n var hook = mountWorkInProgressHook();\n\n {\n var _ref2 = {\n current: initialValue\n };\n hook.memoizedState = _ref2;\n return _ref2;\n }\n}\n\nfunction updateRef(initialValue) {\n var hook = updateWorkInProgressHook();\n return hook.memoizedState;\n}\n\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n currentlyRenderingFiber$1.flags |= fiberFlags;\n hook.memoizedState = pushEffect(HasEffect | hookFlags, create, undefined, nextDeps);\n}\n\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var destroy = undefined;\n\n if (currentHook !== null) {\n var prevEffect = currentHook.memoizedState;\n destroy = prevEffect.destroy;\n\n if (nextDeps !== null) {\n var prevDeps = prevEffect.deps;\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n hook.memoizedState = pushEffect(hookFlags, create, destroy, nextDeps);\n return;\n }\n }\n }\n\n currentlyRenderingFiber$1.flags |= fiberFlags;\n hook.memoizedState = pushEffect(HasEffect | hookFlags, create, destroy, nextDeps);\n}\n\nfunction mountEffect(create, deps) {\n if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {\n return mountEffectImpl(MountPassiveDev | Passive | PassiveStatic, Passive$1, create, deps);\n } else {\n return mountEffectImpl(Passive | PassiveStatic, Passive$1, create, deps);\n }\n}\n\nfunction updateEffect(create, deps) {\n return updateEffectImpl(Passive, Passive$1, create, deps);\n}\n\nfunction mountInsertionEffect(create, deps) {\n return mountEffectImpl(Update, Insertion, create, deps);\n}\n\nfunction updateInsertionEffect(create, deps) {\n return updateEffectImpl(Update, Insertion, create, deps);\n}\n\nfunction mountLayoutEffect(create, deps) {\n var fiberFlags = Update;\n\n {\n fiberFlags |= LayoutStatic;\n }\n\n if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {\n fiberFlags |= MountLayoutDev;\n }\n\n return mountEffectImpl(fiberFlags, Layout, create, deps);\n}\n\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(Update, Layout, create, deps);\n}\n\nfunction imperativeHandleEffect(create, ref) {\n if (typeof ref === 'function') {\n var refCallback = ref;\n\n var _inst = create();\n\n refCallback(_inst);\n return function () {\n refCallback(null);\n };\n } else if (ref !== null && ref !== undefined) {\n var refObject = ref;\n\n {\n if (!refObject.hasOwnProperty('current')) {\n error('Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}');\n }\n }\n\n var _inst2 = create();\n\n refObject.current = _inst2;\n return function () {\n refObject.current = null;\n };\n }\n}\n\nfunction mountImperativeHandle(ref, create, deps) {\n {\n if (typeof create !== 'function') {\n error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n }\n } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n var fiberFlags = Update;\n\n {\n fiberFlags |= LayoutStatic;\n }\n\n if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {\n fiberFlags |= MountLayoutDev;\n }\n\n return mountEffectImpl(fiberFlags, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction updateImperativeHandle(ref, create, deps) {\n {\n if (typeof create !== 'function') {\n error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n }\n } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n return updateEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction mountDebugValue(value, formatterFn) {// This hook is normally a no-op.\n // The react-debug-hooks package injects its own implementation\n // so that e.g. DevTools can display custom hook values.\n}\n\nvar updateDebugValue = mountDebugValue;\n\nfunction mountCallback(callback, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n hook.memoizedState = [callback, nextDeps];\n return callback;\n}\n\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var prevState = hook.memoizedState;\n\n if (prevState !== null) {\n if (nextDeps !== null) {\n var prevDeps = prevState[1];\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n return prevState[0];\n }\n }\n }\n\n hook.memoizedState = [callback, nextDeps];\n return callback;\n}\n\nfunction mountMemo(nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var nextValue = nextCreate();\n hook.memoizedState = [nextValue, nextDeps];\n return nextValue;\n}\n\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var prevState = hook.memoizedState;\n\n if (prevState !== null) {\n // Assume these are defined. If they're not, areHookInputsEqual will warn.\n if (nextDeps !== null) {\n var prevDeps = prevState[1];\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n return prevState[0];\n }\n }\n }\n\n var nextValue = nextCreate();\n hook.memoizedState = [nextValue, nextDeps];\n return nextValue;\n}\n\nfunction mountDeferredValue(value) {\n var hook = mountWorkInProgressHook();\n hook.memoizedState = value;\n return value;\n}\n\nfunction updateDeferredValue(value) {\n var hook = updateWorkInProgressHook();\n var resolvedCurrentHook = currentHook;\n var prevValue = resolvedCurrentHook.memoizedState;\n return updateDeferredValueImpl(hook, prevValue, value);\n}\n\nfunction rerenderDeferredValue(value) {\n var hook = updateWorkInProgressHook();\n\n if (currentHook === null) {\n // This is a rerender during a mount.\n hook.memoizedState = value;\n return value;\n } else {\n // This is a rerender during an update.\n var prevValue = currentHook.memoizedState;\n return updateDeferredValueImpl(hook, prevValue, value);\n }\n}\n\nfunction updateDeferredValueImpl(hook, prevValue, value) {\n var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes);\n\n if (shouldDeferValue) {\n // This is an urgent update. If the value has changed, keep using the\n // previous value and spawn a deferred render to update it later.\n if (!objectIs(value, prevValue)) {\n // Schedule a deferred render\n var deferredLane = claimNextTransitionLane();\n currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, deferredLane);\n markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent\n // from the latest value. The name \"baseState\" doesn't really match how we\n // use it because we're reusing a state hook field instead of creating a\n // new one.\n\n hook.baseState = true;\n } // Reuse the previous value\n\n\n return prevValue;\n } else {\n // This is not an urgent update, so we can use the latest value regardless\n // of what it is. No need to defer it.\n // However, if we're currently inside a spawned render, then we need to mark\n // this as an update to prevent the fiber from bailing out.\n //\n // `baseState` is true when the current value is different from the rendered\n // value. The name doesn't really match how we use it because we're reusing\n // a state hook field instead of creating a new one.\n if (hook.baseState) {\n // Flip this back to false.\n hook.baseState = false;\n markWorkInProgressReceivedUpdate();\n }\n\n hook.memoizedState = value;\n return value;\n }\n}\n\nfunction startTransition(setPending, callback, options) {\n var previousPriority = getCurrentUpdatePriority();\n setCurrentUpdatePriority(higherEventPriority(previousPriority, ContinuousEventPriority));\n setPending(true);\n var prevTransition = ReactCurrentBatchConfig$2.transition;\n ReactCurrentBatchConfig$2.transition = {};\n var currentTransition = ReactCurrentBatchConfig$2.transition;\n\n {\n ReactCurrentBatchConfig$2.transition._updatedFibers = new Set();\n }\n\n try {\n setPending(false);\n callback();\n } finally {\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig$2.transition = prevTransition;\n\n {\n if (prevTransition === null && currentTransition._updatedFibers) {\n var updatedFibersCount = currentTransition._updatedFibers.size;\n\n if (updatedFibersCount > 10) {\n warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');\n }\n\n currentTransition._updatedFibers.clear();\n }\n }\n }\n}\n\nfunction mountTransition() {\n var _mountState = mountState(false),\n isPending = _mountState[0],\n setPending = _mountState[1]; // The `start` method never changes.\n\n\n var start = startTransition.bind(null, setPending);\n var hook = mountWorkInProgressHook();\n hook.memoizedState = start;\n return [isPending, start];\n}\n\nfunction updateTransition() {\n var _updateState = updateState(),\n isPending = _updateState[0];\n\n var hook = updateWorkInProgressHook();\n var start = hook.memoizedState;\n return [isPending, start];\n}\n\nfunction rerenderTransition() {\n var _rerenderState = rerenderState(),\n isPending = _rerenderState[0];\n\n var hook = updateWorkInProgressHook();\n var start = hook.memoizedState;\n return [isPending, start];\n}\n\nvar isUpdatingOpaqueValueInRenderPhase = false;\nfunction getIsUpdatingOpaqueValueInRenderPhaseInDEV() {\n {\n return isUpdatingOpaqueValueInRenderPhase;\n }\n}\n\nfunction mountId() {\n var hook = mountWorkInProgressHook();\n var root = getWorkInProgressRoot(); // TODO: In Fizz, id generation is specific to each server config. Maybe we\n // should do this in Fiber, too? Deferring this decision for now because\n // there's no other place to store the prefix except for an internal field on\n // the public createRoot object, which the fiber tree does not currently have\n // a reference to.\n\n var identifierPrefix = root.identifierPrefix;\n var id;\n\n if (getIsHydrating()) {\n var treeId = getTreeId(); // Use a captial R prefix for server-generated ids.\n\n id = ':' + identifierPrefix + 'R' + treeId; // Unless this is the first id at this level, append a number at the end\n // that represents the position of this useId hook among all the useId\n // hooks for this fiber.\n\n var localId = localIdCounter++;\n\n if (localId > 0) {\n id += 'H' + localId.toString(32);\n }\n\n id += ':';\n } else {\n // Use a lowercase r prefix for client-generated ids.\n var globalClientId = globalClientIdCounter++;\n id = ':' + identifierPrefix + 'r' + globalClientId.toString(32) + ':';\n }\n\n hook.memoizedState = id;\n return id;\n}\n\nfunction updateId() {\n var hook = updateWorkInProgressHook();\n var id = hook.memoizedState;\n return id;\n}\n\nfunction dispatchReducerAction(fiber, queue, action) {\n {\n if (typeof arguments[3] === 'function') {\n error(\"State updates from the useState() and useReducer() Hooks don't support the \" + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');\n }\n }\n\n var lane = requestUpdateLane(fiber);\n var update = {\n lane: lane,\n action: action,\n hasEagerState: false,\n eagerState: null,\n next: null\n };\n\n if (isRenderPhaseUpdate(fiber)) {\n enqueueRenderPhaseUpdate(queue, update);\n } else {\n var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n\n if (root !== null) {\n var eventTime = requestEventTime();\n scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n entangleTransitionUpdate(root, queue, lane);\n }\n }\n\n markUpdateInDevTools(fiber, lane);\n}\n\nfunction dispatchSetState(fiber, queue, action) {\n {\n if (typeof arguments[3] === 'function') {\n error(\"State updates from the useState() and useReducer() Hooks don't support the \" + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');\n }\n }\n\n var lane = requestUpdateLane(fiber);\n var update = {\n lane: lane,\n action: action,\n hasEagerState: false,\n eagerState: null,\n next: null\n };\n\n if (isRenderPhaseUpdate(fiber)) {\n enqueueRenderPhaseUpdate(queue, update);\n } else {\n var alternate = fiber.alternate;\n\n if (fiber.lanes === NoLanes && (alternate === null || alternate.lanes === NoLanes)) {\n // The queue is currently empty, which means we can eagerly compute the\n // next state before entering the render phase. If the new state is the\n // same as the current state, we may be able to bail out entirely.\n var lastRenderedReducer = queue.lastRenderedReducer;\n\n if (lastRenderedReducer !== null) {\n var prevDispatcher;\n\n {\n prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n }\n\n try {\n var currentState = queue.lastRenderedState;\n var eagerState = lastRenderedReducer(currentState, action); // Stash the eagerly computed state, and the reducer used to compute\n // it, on the update object. If the reducer hasn't changed by the\n // time we enter the render phase, then the eager state can be used\n // without calling the reducer again.\n\n update.hasEagerState = true;\n update.eagerState = eagerState;\n\n if (objectIs(eagerState, currentState)) {\n // Fast path. We can bail out without scheduling React to re-render.\n // It's still possible that we'll need to rebase this update later,\n // if the component re-renders for a different reason and by that\n // time the reducer has changed.\n // TODO: Do we still need to entangle transitions in this case?\n enqueueConcurrentHookUpdateAndEagerlyBailout(fiber, queue, update, lane);\n return;\n }\n } catch (error) {// Suppress the error. It will throw again in the render phase.\n } finally {\n {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n }\n }\n }\n\n var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n\n if (root !== null) {\n var eventTime = requestEventTime();\n scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n entangleTransitionUpdate(root, queue, lane);\n }\n }\n\n markUpdateInDevTools(fiber, lane);\n}\n\nfunction isRenderPhaseUpdate(fiber) {\n var alternate = fiber.alternate;\n return fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1;\n}\n\nfunction enqueueRenderPhaseUpdate(queue, update) {\n // This is a render phase update. Stash it in a lazily-created map of\n // queue -> linked list of updates. After this render pass, we'll restart\n // and apply the stashed updates on top of the work-in-progress hook.\n didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate = true;\n var pending = queue.pending;\n\n if (pending === null) {\n // This is the first update. Create a circular list.\n update.next = update;\n } else {\n update.next = pending.next;\n pending.next = update;\n }\n\n queue.pending = update;\n} // TODO: Move to ReactFiberConcurrentUpdates?\n\n\nfunction entangleTransitionUpdate(root, queue, lane) {\n if (isTransitionLane(lane)) {\n var queueLanes = queue.lanes; // If any entangled lanes are no longer pending on the root, then they\n // must have finished. We can remove them from the shared queue, which\n // represents a superset of the actually pending lanes. In some cases we\n // may entangle more than we need to, but that's OK. In fact it's worse if\n // we *don't* entangle when we should.\n\n queueLanes = intersectLanes(queueLanes, root.pendingLanes); // Entangle the new transition lane with the other transition lanes.\n\n var newQueueLanes = mergeLanes(queueLanes, lane);\n queue.lanes = newQueueLanes; // Even if queue.lanes already include lane, we don't know for certain if\n // the lane finished since the last time we entangled it. So we need to\n // entangle it again, just to be sure.\n\n markRootEntangled(root, newQueueLanes);\n }\n}\n\nfunction markUpdateInDevTools(fiber, lane, action) {\n\n {\n markStateUpdateScheduled(fiber, lane);\n }\n}\n\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useInsertionEffect: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError,\n useMutableSource: throwInvalidHookError,\n useSyncExternalStore: throwInvalidHookError,\n useId: throwInvalidHookError,\n unstable_isNewReconciler: enableNewReconciler\n};\n\nvar HooksDispatcherOnMountInDEV = null;\nvar HooksDispatcherOnMountWithHookTypesInDEV = null;\nvar HooksDispatcherOnUpdateInDEV = null;\nvar HooksDispatcherOnRerenderInDEV = null;\nvar InvalidNestedHooksDispatcherOnMountInDEV = null;\nvar InvalidNestedHooksDispatcherOnUpdateInDEV = null;\nvar InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n\n{\n var warnInvalidContextAccess = function () {\n error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n };\n\n var warnInvalidHookAccess = function () {\n error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://reactjs.org/link/rules-of-hooks');\n };\n\n HooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n mountHookTypesDev();\n return mountDebugValue();\n },\n useDeferredValue: function (value) {\n currentHookNameInDev = 'useDeferredValue';\n mountHookTypesDev();\n return mountDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n mountHookTypesDev();\n return mountTransition();\n },\n useMutableSource: function (source, getSnapshot, subscribe) {\n currentHookNameInDev = 'useMutableSource';\n mountHookTypesDev();\n return mountMutableSource();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n mountHookTypesDev();\n return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n mountHookTypesDev();\n return mountId();\n },\n unstable_isNewReconciler: enableNewReconciler\n };\n\n HooksDispatcherOnMountWithHookTypesInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n updateHookTypesDev();\n return mountInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return mountDebugValue();\n },\n useDeferredValue: function (value) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return mountDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return mountTransition();\n },\n useMutableSource: function (source, getSnapshot, subscribe) {\n currentHookNameInDev = 'useMutableSource';\n updateHookTypesDev();\n return mountMutableSource();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n updateHookTypesDev();\n return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n updateHookTypesDev();\n return mountId();\n },\n unstable_isNewReconciler: enableNewReconciler\n };\n\n HooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n updateHookTypesDev();\n return updateInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return updateDebugValue();\n },\n useDeferredValue: function (value) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return updateDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return updateTransition();\n },\n useMutableSource: function (source, getSnapshot, subscribe) {\n currentHookNameInDev = 'useMutableSource';\n updateHookTypesDev();\n return updateMutableSource();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n updateHookTypesDev();\n return updateSyncExternalStore(subscribe, getSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n updateHookTypesDev();\n return updateId();\n },\n unstable_isNewReconciler: enableNewReconciler\n };\n\n HooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n return readContext(context);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n updateHookTypesDev();\n return updateInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return rerenderState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return updateDebugValue();\n },\n useDeferredValue: function (value) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return rerenderDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return rerenderTransition();\n },\n useMutableSource: function (source, getSnapshot, subscribe) {\n currentHookNameInDev = 'useMutableSource';\n updateHookTypesDev();\n return updateMutableSource();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n updateHookTypesDev();\n return updateSyncExternalStore(subscribe, getSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n updateHookTypesDev();\n return updateId();\n },\n unstable_isNewReconciler: enableNewReconciler\n };\n\n InvalidNestedHooksDispatcherOnMountInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDebugValue();\n },\n useDeferredValue: function (value) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountTransition();\n },\n useMutableSource: function (source, getSnapshot, subscribe) {\n currentHookNameInDev = 'useMutableSource';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountMutableSource();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountId();\n },\n unstable_isNewReconciler: enableNewReconciler\n };\n\n InvalidNestedHooksDispatcherOnUpdateInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDebugValue();\n },\n useDeferredValue: function (value) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateTransition();\n },\n useMutableSource: function (source, getSnapshot, subscribe) {\n currentHookNameInDev = 'useMutableSource';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateMutableSource();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(subscribe, getSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateId();\n },\n unstable_isNewReconciler: enableNewReconciler\n };\n\n InvalidNestedHooksDispatcherOnRerenderInDEV = {\n readContext: function (context) {\n warnInvalidContextAccess();\n return readContext(context);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useInsertionEffect: function (create, deps) {\n currentHookNameInDev = 'useInsertionEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateInsertionEffect(create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return rerenderState(initialState);\n } finally {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDebugValue();\n },\n useDeferredValue: function (value) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderDeferredValue(value);\n },\n useTransition: function () {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderTransition();\n },\n useMutableSource: function (source, getSnapshot, subscribe) {\n currentHookNameInDev = 'useMutableSource';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateMutableSource();\n },\n useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n currentHookNameInDev = 'useSyncExternalStore';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateSyncExternalStore(subscribe, getSnapshot);\n },\n useId: function () {\n currentHookNameInDev = 'useId';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateId();\n },\n unstable_isNewReconciler: enableNewReconciler\n };\n}\n\nvar now$1 = Scheduler.unstable_now;\nvar commitTime = 0;\nvar layoutEffectStartTime = -1;\nvar profilerStartTime = -1;\nvar passiveEffectStartTime = -1;\n/**\n * Tracks whether the current update was a nested/cascading update (scheduled from a layout effect).\n *\n * The overall sequence is:\n * 1. render\n * 2. commit (and call `onRender`, `onCommit`)\n * 3. check for nested updates\n * 4. flush passive effects (and call `onPostCommit`)\n *\n * Nested updates are identified in step 3 above,\n * but step 4 still applies to the work that was just committed.\n * We use two flags to track nested updates then:\n * one tracks whether the upcoming update is a nested update,\n * and the other tracks whether the current update was a nested update.\n * The first value gets synced to the second at the start of the render phase.\n */\n\nvar currentUpdateIsNested = false;\nvar nestedUpdateScheduled = false;\n\nfunction isCurrentUpdateNested() {\n return currentUpdateIsNested;\n}\n\nfunction markNestedUpdateScheduled() {\n {\n nestedUpdateScheduled = true;\n }\n}\n\nfunction resetNestedUpdateFlag() {\n {\n currentUpdateIsNested = false;\n nestedUpdateScheduled = false;\n }\n}\n\nfunction syncNestedUpdateFlag() {\n {\n currentUpdateIsNested = nestedUpdateScheduled;\n nestedUpdateScheduled = false;\n }\n}\n\nfunction getCommitTime() {\n return commitTime;\n}\n\nfunction recordCommitTime() {\n\n commitTime = now$1();\n}\n\nfunction startProfilerTimer(fiber) {\n\n profilerStartTime = now$1();\n\n if (fiber.actualStartTime < 0) {\n fiber.actualStartTime = now$1();\n }\n}\n\nfunction stopProfilerTimerIfRunning(fiber) {\n\n profilerStartTime = -1;\n}\n\nfunction stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) {\n\n if (profilerStartTime >= 0) {\n var elapsedTime = now$1() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n\n if (overrideBaseTime) {\n fiber.selfBaseDuration = elapsedTime;\n }\n\n profilerStartTime = -1;\n }\n}\n\nfunction recordLayoutEffectDuration(fiber) {\n\n if (layoutEffectStartTime >= 0) {\n var elapsedTime = now$1() - layoutEffectStartTime;\n layoutEffectStartTime = -1; // Store duration on the next nearest Profiler ancestor\n // Or the root (for the DevTools Profiler to read)\n\n var parentFiber = fiber.return;\n\n while (parentFiber !== null) {\n switch (parentFiber.tag) {\n case HostRoot:\n var root = parentFiber.stateNode;\n root.effectDuration += elapsedTime;\n return;\n\n case Profiler:\n var parentStateNode = parentFiber.stateNode;\n parentStateNode.effectDuration += elapsedTime;\n return;\n }\n\n parentFiber = parentFiber.return;\n }\n }\n}\n\nfunction recordPassiveEffectDuration(fiber) {\n\n if (passiveEffectStartTime >= 0) {\n var elapsedTime = now$1() - passiveEffectStartTime;\n passiveEffectStartTime = -1; // Store duration on the next nearest Profiler ancestor\n // Or the root (for the DevTools Profiler to read)\n\n var parentFiber = fiber.return;\n\n while (parentFiber !== null) {\n switch (parentFiber.tag) {\n case HostRoot:\n var root = parentFiber.stateNode;\n\n if (root !== null) {\n root.passiveEffectDuration += elapsedTime;\n }\n\n return;\n\n case Profiler:\n var parentStateNode = parentFiber.stateNode;\n\n if (parentStateNode !== null) {\n // Detached fibers have their state node cleared out.\n // In this case, the return pointer is also cleared out,\n // so we won't be able to report the time spent in this Profiler's subtree.\n parentStateNode.passiveEffectDuration += elapsedTime;\n }\n\n return;\n }\n\n parentFiber = parentFiber.return;\n }\n }\n}\n\nfunction startLayoutEffectTimer() {\n\n layoutEffectStartTime = now$1();\n}\n\nfunction startPassiveEffectTimer() {\n\n passiveEffectStartTime = now$1();\n}\n\nfunction transferActualDuration(fiber) {\n // Transfer time spent rendering these children so we don't lose it\n // after we rerender. This is used as a helper in special cases\n // where we should count the work of multiple passes.\n var child = fiber.child;\n\n while (child) {\n fiber.actualDuration += child.actualDuration;\n child = child.sibling;\n }\n}\n\nfunction createCapturedValueAtFiber(value, source) {\n // If the value is an error, call this function immediately after it is thrown\n // so the stack is accurate.\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source),\n digest: null\n };\n}\nfunction createCapturedValue(value, digest, stack) {\n return {\n value: value,\n source: null,\n stack: stack != null ? stack : null,\n digest: digest != null ? digest : null\n };\n}\n\n// This module is forked in different environments.\n// By default, return `true` to log errors to the console.\n// Forks can return `false` if this isn't desirable.\nfunction showErrorDialog(boundary, errorInfo) {\n return true;\n}\n\nfunction logCapturedError(boundary, errorInfo) {\n try {\n var logError = showErrorDialog(boundary, errorInfo); // Allow injected showErrorDialog() to prevent default console.error logging.\n // This enables renderers like ReactNative to better manage redbox behavior.\n\n if (logError === false) {\n return;\n }\n\n var error = errorInfo.value;\n\n if (true) {\n var source = errorInfo.source;\n var stack = errorInfo.stack;\n var componentStack = stack !== null ? stack : ''; // Browsers support silencing uncaught errors by calling\n // `preventDefault()` in window `error` handler.\n // We record this information as an expando on the error.\n\n if (error != null && error._suppressLogging) {\n if (boundary.tag === ClassComponent) {\n // The error is recoverable and was silenced.\n // Ignore it and don't print the stack addendum.\n // This is handy for testing error boundaries without noise.\n return;\n } // The error is fatal. Since the silencing might have\n // been accidental, we'll surface it anyway.\n // However, the browser would have silenced the original error\n // so we'll print it first, and then print the stack addendum.\n\n\n console['error'](error); // Don't transform to our wrapper\n // For a more detailed description of this block, see:\n // https://github.com/facebook/react/pull/13384\n }\n\n var componentName = source ? getComponentNameFromFiber(source) : null;\n var componentNameMessage = componentName ? \"The above error occurred in the <\" + componentName + \"> component:\" : 'The above error occurred in one of your React components:';\n var errorBoundaryMessage;\n\n if (boundary.tag === HostRoot) {\n errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\\n' + 'Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.';\n } else {\n var errorBoundaryName = getComponentNameFromFiber(boundary) || 'Anonymous';\n errorBoundaryMessage = \"React will try to recreate this component tree from scratch \" + (\"using the error boundary you provided, \" + errorBoundaryName + \".\");\n }\n\n var combinedMessage = componentNameMessage + \"\\n\" + componentStack + \"\\n\\n\" + (\"\" + errorBoundaryMessage); // In development, we provide our own message with just the component stack.\n // We don't include the original error message and JS stack because the browser\n // has already printed it. Even if the application swallows the error, it is still\n // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.\n\n console['error'](combinedMessage); // Don't transform to our wrapper\n } else {}\n } catch (e) {\n // This method must not throw, or React internal state will get messed up.\n // If console.error is overridden, or logCapturedError() shows a dialog that throws,\n // we want to report this error outside of the normal stack as a last resort.\n // https://github.com/facebook/react/issues/13188\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nvar PossiblyWeakMap$1 = typeof WeakMap === 'function' ? WeakMap : Map;\n\nfunction createRootErrorUpdate(fiber, errorInfo, lane) {\n var update = createUpdate(NoTimestamp, lane); // Unmount the root by rendering null.\n\n update.tag = CaptureUpdate; // Caution: React DevTools currently depends on this property\n // being called \"element\".\n\n update.payload = {\n element: null\n };\n var error = errorInfo.value;\n\n update.callback = function () {\n onUncaughtError(error);\n logCapturedError(fiber, errorInfo);\n };\n\n return update;\n}\n\nfunction createClassErrorUpdate(fiber, errorInfo, lane) {\n var update = createUpdate(NoTimestamp, lane);\n update.tag = CaptureUpdate;\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n\n if (typeof getDerivedStateFromError === 'function') {\n var error$1 = errorInfo.value;\n\n update.payload = function () {\n return getDerivedStateFromError(error$1);\n };\n\n update.callback = function () {\n {\n markFailedErrorBoundaryForHotReloading(fiber);\n }\n\n logCapturedError(fiber, errorInfo);\n };\n }\n\n var inst = fiber.stateNode;\n\n if (inst !== null && typeof inst.componentDidCatch === 'function') {\n update.callback = function callback() {\n {\n markFailedErrorBoundaryForHotReloading(fiber);\n }\n\n logCapturedError(fiber, errorInfo);\n\n if (typeof getDerivedStateFromError !== 'function') {\n // To preserve the preexisting retry behavior of error boundaries,\n // we keep track of which ones already failed during this batch.\n // This gets reset before we yield back to the browser.\n // TODO: Warn in strict mode if getDerivedStateFromError is\n // not defined.\n markLegacyErrorBoundaryAsFailed(this);\n }\n\n var error$1 = errorInfo.value;\n var stack = errorInfo.stack;\n this.componentDidCatch(error$1, {\n componentStack: stack !== null ? stack : ''\n });\n\n {\n if (typeof getDerivedStateFromError !== 'function') {\n // If componentDidCatch is the only error boundary method defined,\n // then it needs to call setState to recover from errors.\n // If no state update is scheduled then the boundary will swallow the error.\n if (!includesSomeLane(fiber.lanes, SyncLane)) {\n error('%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentNameFromFiber(fiber) || 'Unknown');\n }\n }\n }\n };\n }\n\n return update;\n}\n\nfunction attachPingListener(root, wakeable, lanes) {\n // Attach a ping listener\n //\n // The data might resolve before we have a chance to commit the fallback. Or,\n // in the case of a refresh, we'll never commit a fallback. So we need to\n // attach a listener now. When it resolves (\"pings\"), we can decide whether to\n // try rendering the tree again.\n //\n // Only attach a listener if one does not already exist for the lanes\n // we're currently rendering (which acts like a \"thread ID\" here).\n //\n // We only need to do this in concurrent mode. Legacy Suspense always\n // commits fallbacks synchronously, so there are no pings.\n var pingCache = root.pingCache;\n var threadIDs;\n\n if (pingCache === null) {\n pingCache = root.pingCache = new PossiblyWeakMap$1();\n threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n } else {\n threadIDs = pingCache.get(wakeable);\n\n if (threadIDs === undefined) {\n threadIDs = new Set();\n pingCache.set(wakeable, threadIDs);\n }\n }\n\n if (!threadIDs.has(lanes)) {\n // Memoize using the thread ID to prevent redundant listeners.\n threadIDs.add(lanes);\n var ping = pingSuspendedRoot.bind(null, root, wakeable, lanes);\n\n {\n if (isDevToolsPresent) {\n // If we have pending work still, restore the original updaters\n restorePendingUpdaters(root, lanes);\n }\n }\n\n wakeable.then(ping, ping);\n }\n}\n\nfunction attachRetryListener(suspenseBoundary, root, wakeable, lanes) {\n // Retry listener\n //\n // If the fallback does commit, we need to attach a different type of\n // listener. This one schedules an update on the Suspense boundary to turn\n // the fallback state off.\n //\n // Stash the wakeable on the boundary fiber so we can access it in the\n // commit phase.\n //\n // When the wakeable resolves, we'll attempt to render the boundary\n // again (\"retry\").\n var wakeables = suspenseBoundary.updateQueue;\n\n if (wakeables === null) {\n var updateQueue = new Set();\n updateQueue.add(wakeable);\n suspenseBoundary.updateQueue = updateQueue;\n } else {\n wakeables.add(wakeable);\n }\n}\n\nfunction resetSuspendedComponent(sourceFiber, rootRenderLanes) {\n // A legacy mode Suspense quirk, only relevant to hook components.\n\n\n var tag = sourceFiber.tag;\n\n if ((sourceFiber.mode & ConcurrentMode) === NoMode && (tag === FunctionComponent || tag === ForwardRef || tag === SimpleMemoComponent)) {\n var currentSource = sourceFiber.alternate;\n\n if (currentSource) {\n sourceFiber.updateQueue = currentSource.updateQueue;\n sourceFiber.memoizedState = currentSource.memoizedState;\n sourceFiber.lanes = currentSource.lanes;\n } else {\n sourceFiber.updateQueue = null;\n sourceFiber.memoizedState = null;\n }\n }\n}\n\nfunction getNearestSuspenseBoundaryToCapture(returnFiber) {\n var node = returnFiber;\n\n do {\n if (node.tag === SuspenseComponent && shouldCaptureSuspense(node)) {\n return node;\n } // This boundary already captured during this render. Continue to the next\n // boundary.\n\n\n node = node.return;\n } while (node !== null);\n\n return null;\n}\n\nfunction markSuspenseBoundaryShouldCapture(suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes) {\n // This marks a Suspense boundary so that when we're unwinding the stack,\n // it captures the suspended \"exception\" and does a second (fallback) pass.\n if ((suspenseBoundary.mode & ConcurrentMode) === NoMode) {\n // Legacy Mode Suspense\n //\n // If the boundary is in legacy mode, we should *not*\n // suspend the commit. Pretend as if the suspended component rendered\n // null and keep rendering. When the Suspense boundary completes,\n // we'll do a second pass to render the fallback.\n if (suspenseBoundary === returnFiber) {\n // Special case where we suspended while reconciling the children of\n // a Suspense boundary's inner Offscreen wrapper fiber. This happens\n // when a React.lazy component is a direct child of a\n // Suspense boundary.\n //\n // Suspense boundaries are implemented as multiple fibers, but they\n // are a single conceptual unit. The legacy mode behavior where we\n // pretend the suspended fiber committed as `null` won't work,\n // because in this case the \"suspended\" fiber is the inner\n // Offscreen wrapper.\n //\n // Because the contents of the boundary haven't started rendering\n // yet (i.e. nothing in the tree has partially rendered) we can\n // switch to the regular, concurrent mode behavior: mark the\n // boundary with ShouldCapture and enter the unwind phase.\n suspenseBoundary.flags |= ShouldCapture;\n } else {\n suspenseBoundary.flags |= DidCapture;\n sourceFiber.flags |= ForceUpdateForLegacySuspense; // We're going to commit this fiber even though it didn't complete.\n // But we shouldn't call any lifecycle methods or callbacks. Remove\n // all lifecycle effect tags.\n\n sourceFiber.flags &= ~(LifecycleEffectMask | Incomplete);\n\n if (sourceFiber.tag === ClassComponent) {\n var currentSourceFiber = sourceFiber.alternate;\n\n if (currentSourceFiber === null) {\n // This is a new mount. Change the tag so it's not mistaken for a\n // completed class component. For example, we should not call\n // componentWillUnmount if it is deleted.\n sourceFiber.tag = IncompleteClassComponent;\n } else {\n // When we try rendering again, we should not reuse the current fiber,\n // since it's known to be in an inconsistent state. Use a force update to\n // prevent a bail out.\n var update = createUpdate(NoTimestamp, SyncLane);\n update.tag = ForceUpdate;\n enqueueUpdate(sourceFiber, update, SyncLane);\n }\n } // The source fiber did not complete. Mark it with Sync priority to\n // indicate that it still has pending work.\n\n\n sourceFiber.lanes = mergeLanes(sourceFiber.lanes, SyncLane);\n }\n\n return suspenseBoundary;\n } // Confirmed that the boundary is in a concurrent mode tree. Continue\n // with the normal suspend path.\n //\n // After this we'll use a set of heuristics to determine whether this\n // render pass will run to completion or restart or \"suspend\" the commit.\n // The actual logic for this is spread out in different places.\n //\n // This first principle is that if we're going to suspend when we complete\n // a root, then we should also restart if we get an update or ping that\n // might unsuspend it, and vice versa. The only reason to suspend is\n // because you think you might want to restart before committing. However,\n // it doesn't make sense to restart only while in the period we're suspended.\n //\n // Restarting too aggressively is also not good because it starves out any\n // intermediate loading state. So we use heuristics to determine when.\n // Suspense Heuristics\n //\n // If nothing threw a Promise or all the same fallbacks are already showing,\n // then don't suspend/restart.\n //\n // If this is an initial render of a new tree of Suspense boundaries and\n // those trigger a fallback, then don't suspend/restart. We want to ensure\n // that we can show the initial loading state as quickly as possible.\n //\n // If we hit a \"Delayed\" case, such as when we'd switch from content back into\n // a fallback, then we should always suspend/restart. Transitions apply\n // to this case. If none is defined, JND is used instead.\n //\n // If we're already showing a fallback and it gets \"retried\", allowing us to show\n // another level, but there's still an inner boundary that would show a fallback,\n // then we suspend/restart for 500ms since the last time we showed a fallback\n // anywhere in the tree. This effectively throttles progressive loading into a\n // consistent train of commits. This also gives us an opportunity to restart to\n // get to the completed state slightly earlier.\n //\n // If there's ambiguity due to batching it's resolved in preference of:\n // 1) \"delayed\", 2) \"initial render\", 3) \"retry\".\n //\n // We want to ensure that a \"busy\" state doesn't get force committed. We want to\n // ensure that new initial loading states can commit as soon as possible.\n\n\n suspenseBoundary.flags |= ShouldCapture; // TODO: I think we can remove this, since we now use `DidCapture` in\n // the begin phase to prevent an early bailout.\n\n suspenseBoundary.lanes = rootRenderLanes;\n return suspenseBoundary;\n}\n\nfunction throwException(root, returnFiber, sourceFiber, value, rootRenderLanes) {\n // The source fiber did not complete.\n sourceFiber.flags |= Incomplete;\n\n {\n if (isDevToolsPresent) {\n // If we have pending work still, restore the original updaters\n restorePendingUpdaters(root, rootRenderLanes);\n }\n }\n\n if (value !== null && typeof value === 'object' && typeof value.then === 'function') {\n // This is a wakeable. The component suspended.\n var wakeable = value;\n resetSuspendedComponent(sourceFiber);\n\n {\n if (getIsHydrating() && sourceFiber.mode & ConcurrentMode) {\n markDidThrowWhileHydratingDEV();\n }\n }\n\n\n var suspenseBoundary = getNearestSuspenseBoundaryToCapture(returnFiber);\n\n if (suspenseBoundary !== null) {\n suspenseBoundary.flags &= ~ForceClientRender;\n markSuspenseBoundaryShouldCapture(suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes); // We only attach ping listeners in concurrent mode. Legacy Suspense always\n // commits fallbacks synchronously, so there are no pings.\n\n if (suspenseBoundary.mode & ConcurrentMode) {\n attachPingListener(root, wakeable, rootRenderLanes);\n }\n\n attachRetryListener(suspenseBoundary, root, wakeable);\n return;\n } else {\n // No boundary was found. Unless this is a sync update, this is OK.\n // We can suspend and wait for more data to arrive.\n if (!includesSyncLane(rootRenderLanes)) {\n // This is not a sync update. Suspend. Since we're not activating a\n // Suspense boundary, this will unwind all the way to the root without\n // performing a second pass to render a fallback. (This is arguably how\n // refresh transitions should work, too, since we're not going to commit\n // the fallbacks anyway.)\n //\n // This case also applies to initial hydration.\n attachPingListener(root, wakeable, rootRenderLanes);\n renderDidSuspendDelayIfPossible();\n return;\n } // This is a sync/discrete update. We treat this case like an error\n // because discrete renders are expected to produce a complete tree\n // synchronously to maintain consistency with external state.\n\n\n var uncaughtSuspenseError = new Error('A component suspended while responding to synchronous input. This ' + 'will cause the UI to be replaced with a loading indicator. To ' + 'fix, updates that suspend should be wrapped ' + 'with startTransition.'); // If we're outside a transition, fall through to the regular error path.\n // The error will be caught by the nearest suspense boundary.\n\n value = uncaughtSuspenseError;\n }\n } else {\n // This is a regular error, not a Suspense wakeable.\n if (getIsHydrating() && sourceFiber.mode & ConcurrentMode) {\n markDidThrowWhileHydratingDEV();\n\n var _suspenseBoundary = getNearestSuspenseBoundaryToCapture(returnFiber); // If the error was thrown during hydration, we may be able to recover by\n // discarding the dehydrated content and switching to a client render.\n // Instead of surfacing the error, find the nearest Suspense boundary\n // and render it again without hydration.\n\n\n if (_suspenseBoundary !== null) {\n if ((_suspenseBoundary.flags & ShouldCapture) === NoFlags) {\n // Set a flag to indicate that we should try rendering the normal\n // children again, not the fallback.\n _suspenseBoundary.flags |= ForceClientRender;\n }\n\n markSuspenseBoundaryShouldCapture(_suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes); // Even though the user may not be affected by this error, we should\n // still log it so it can be fixed.\n\n queueHydrationError(createCapturedValueAtFiber(value, sourceFiber));\n return;\n }\n }\n }\n\n value = createCapturedValueAtFiber(value, sourceFiber);\n renderDidError(value); // We didn't find a boundary that could handle this type of exception. Start\n // over and traverse parent path again, this time treating the exception\n // as an error.\n\n var workInProgress = returnFiber;\n\n do {\n switch (workInProgress.tag) {\n case HostRoot:\n {\n var _errorInfo = value;\n workInProgress.flags |= ShouldCapture;\n var lane = pickArbitraryLane(rootRenderLanes);\n workInProgress.lanes = mergeLanes(workInProgress.lanes, lane);\n var update = createRootErrorUpdate(workInProgress, _errorInfo, lane);\n enqueueCapturedUpdate(workInProgress, update);\n return;\n }\n\n case ClassComponent:\n // Capture and retry\n var errorInfo = value;\n var ctor = workInProgress.type;\n var instance = workInProgress.stateNode;\n\n if ((workInProgress.flags & DidCapture) === NoFlags && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) {\n workInProgress.flags |= ShouldCapture;\n\n var _lane = pickArbitraryLane(rootRenderLanes);\n\n workInProgress.lanes = mergeLanes(workInProgress.lanes, _lane); // Schedule the error boundary to re-render using updated state\n\n var _update = createClassErrorUpdate(workInProgress, errorInfo, _lane);\n\n enqueueCapturedUpdate(workInProgress, _update);\n return;\n }\n\n break;\n }\n\n workInProgress = workInProgress.return;\n } while (workInProgress !== null);\n}\n\nfunction getSuspendedCache() {\n {\n return null;\n } // This function is called when a Suspense boundary suspends. It returns the\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar didReceiveUpdate = false;\nvar didWarnAboutBadClass;\nvar didWarnAboutModulePatternComponent;\nvar didWarnAboutContextTypeOnFunctionComponent;\nvar didWarnAboutGetDerivedStateOnFunctionComponent;\nvar didWarnAboutFunctionRefs;\nvar didWarnAboutReassigningProps;\nvar didWarnAboutRevealOrder;\nvar didWarnAboutTailOptions;\n\n{\n didWarnAboutBadClass = {};\n didWarnAboutModulePatternComponent = {};\n didWarnAboutContextTypeOnFunctionComponent = {};\n didWarnAboutGetDerivedStateOnFunctionComponent = {};\n didWarnAboutFunctionRefs = {};\n didWarnAboutReassigningProps = false;\n didWarnAboutRevealOrder = {};\n didWarnAboutTailOptions = {};\n}\n\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n if (current === null) {\n // If this is a fresh new component that hasn't been rendered yet, we\n // won't update its child set by applying minimal side-effects. Instead,\n // we will add them all to the child before it gets rendered. That means\n // we can optimize this reconciliation pass by not tracking side-effects.\n workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);\n } else {\n // If the current child is the same as the work in progress, it means that\n // we haven't yet started any work on these children. Therefore, we use\n // the clone algorithm to create a copy of all the current children.\n // If we had any progressed work already, that is invalid at this point so\n // let's throw it out.\n workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderLanes);\n }\n}\n\nfunction forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes) {\n // This function is fork of reconcileChildren. It's used in cases where we\n // want to reconcile without matching against the existing set. This has the\n // effect of all current children being unmounted; even if the type and key\n // are the same, the old child is unmounted and a new child is created.\n //\n // To do this, we're going to go through the reconcile algorithm twice. In\n // the first pass, we schedule a deletion for all the current children by\n // passing null.\n workInProgress.child = reconcileChildFibers(workInProgress, current.child, null, renderLanes); // In the second pass, we mount the new children. The trick here is that we\n // pass null in place of where we usually pass the current child set. This has\n // the effect of remounting all children regardless of whether their\n // identities match.\n\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);\n}\n\nfunction updateForwardRef(current, workInProgress, Component, nextProps, renderLanes) {\n // TODO: current can be non-null here even if the component\n // hasn't yet mounted. This happens after the first render suspends.\n // We'll need to figure out if this is fine or can cause issues.\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentNameFromType(Component));\n }\n }\n }\n\n var render = Component.render;\n var ref = workInProgress.ref; // The rest is a fork of updateFunctionComponent\n\n var nextChildren;\n var hasId;\n prepareToReadContext(workInProgress, renderLanes);\n\n {\n markComponentRenderStarted(workInProgress);\n }\n\n {\n ReactCurrentOwner$1.current = workInProgress;\n setIsRendering(true);\n nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes);\n hasId = checkDidRenderIdHook();\n\n if ( workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes);\n hasId = checkDidRenderIdHook();\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n setIsRendering(false);\n }\n\n {\n markComponentRenderStopped();\n }\n\n if (current !== null && !didReceiveUpdate) {\n bailoutHooks(current, workInProgress, renderLanes);\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n\n if (getIsHydrating() && hasId) {\n pushMaterializedTreeId(workInProgress);\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateMemoComponent(current, workInProgress, Component, nextProps, renderLanes) {\n if (current === null) {\n var type = Component.type;\n\n if (isSimpleFunctionComponent(type) && Component.compare === null && // SimpleMemoComponent codepath doesn't resolve outer props either.\n Component.defaultProps === undefined) {\n var resolvedType = type;\n\n {\n resolvedType = resolveFunctionForHotReloading(type);\n } // If this is a plain function component without default props,\n // and with only the default shallow comparison, we upgrade it\n // to a SimpleMemoComponent to allow fast path updates.\n\n\n workInProgress.tag = SimpleMemoComponent;\n workInProgress.type = resolvedType;\n\n {\n validateFunctionComponentInDev(workInProgress, type);\n }\n\n return updateSimpleMemoComponent(current, workInProgress, resolvedType, nextProps, renderLanes);\n }\n\n {\n var innerPropTypes = type.propTypes;\n\n if (innerPropTypes) {\n // Inner memo component props aren't currently validated in createElement.\n // We could move it there, but we'd still need this for lazy code path.\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentNameFromType(type));\n }\n }\n\n var child = createFiberFromTypeAndProps(Component.type, null, nextProps, workInProgress, workInProgress.mode, renderLanes);\n child.ref = workInProgress.ref;\n child.return = workInProgress;\n workInProgress.child = child;\n return child;\n }\n\n {\n var _type = Component.type;\n var _innerPropTypes = _type.propTypes;\n\n if (_innerPropTypes) {\n // Inner memo component props aren't currently validated in createElement.\n // We could move it there, but we'd still need this for lazy code path.\n checkPropTypes(_innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentNameFromType(_type));\n }\n }\n\n var currentChild = current.child; // This is always exactly one child\n\n var hasScheduledUpdateOrContext = checkScheduledUpdateOrContext(current, renderLanes);\n\n if (!hasScheduledUpdateOrContext) {\n // This will be the props with resolved defaultProps,\n // unlike current.memoizedProps which will be the unresolved ones.\n var prevProps = currentChild.memoizedProps; // Default to shallow comparison\n\n var compare = Component.compare;\n compare = compare !== null ? compare : shallowEqual;\n\n if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n var newChild = createWorkInProgress(currentChild, nextProps);\n newChild.ref = workInProgress.ref;\n newChild.return = workInProgress;\n workInProgress.child = newChild;\n return newChild;\n}\n\nfunction updateSimpleMemoComponent(current, workInProgress, Component, nextProps, renderLanes) {\n // TODO: current can be non-null here even if the component\n // hasn't yet mounted. This happens when the inner render suspends.\n // We'll need to figure out if this is fine or can cause issues.\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var outerMemoType = workInProgress.elementType;\n\n if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {\n // We warn when you define propTypes on lazy()\n // so let's just skip over it to find memo() outer wrapper.\n // Inner props for memo are validated later.\n var lazyComponent = outerMemoType;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n outerMemoType = init(payload);\n } catch (x) {\n outerMemoType = null;\n } // Inner propTypes will be validated in the function component path.\n\n\n var outerPropTypes = outerMemoType && outerMemoType.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps)\n 'prop', getComponentNameFromType(outerMemoType));\n }\n }\n }\n }\n\n if (current !== null) {\n var prevProps = current.memoizedProps;\n\n if (shallowEqual(prevProps, nextProps) && current.ref === workInProgress.ref && ( // Prevent bailout if the implementation changed due to hot reload.\n workInProgress.type === current.type )) {\n didReceiveUpdate = false; // The props are shallowly equal. Reuse the previous props object, like we\n // would during a normal fiber bailout.\n //\n // We don't have strong guarantees that the props object is referentially\n // equal during updates where we can't bail out anyway — like if the props\n // are shallowly equal, but there's a local state or context update in the\n // same batch.\n //\n // However, as a principle, we should aim to make the behavior consistent\n // across different ways of memoizing a component. For example, React.memo\n // has a different internal Fiber layout if you pass a normal function\n // component (SimpleMemoComponent) versus if you pass a different type\n // like forwardRef (MemoComponent). But this is an implementation detail.\n // Wrapping a component in forwardRef (or React.lazy, etc) shouldn't\n // affect whether the props object is reused during a bailout.\n\n workInProgress.pendingProps = nextProps = prevProps;\n\n if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n // The pending lanes were cleared at the beginning of beginWork. We're\n // about to bail out, but there might be other lanes that weren't\n // included in the current render. Usually, the priority level of the\n // remaining updates is accumulated during the evaluation of the\n // component (i.e. when processing the update queue). But since since\n // we're bailing out early *without* evaluating the component, we need\n // to account for it here, too. Reset to the value of the current fiber.\n // NOTE: This only applies to SimpleMemoComponent, not MemoComponent,\n // because a MemoComponent fiber does not have hooks or an update queue;\n // rather, it wraps around an inner component, which may or may not\n // contains hooks.\n // TODO: Move the reset at in beginWork out of the common path so that\n // this is no longer necessary.\n workInProgress.lanes = current.lanes;\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n } else if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) {\n // This is a special case that only exists for legacy mode.\n // See https://github.com/facebook/react/pull/19216.\n didReceiveUpdate = true;\n }\n }\n }\n\n return updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes);\n}\n\nfunction updateOffscreenComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps;\n var nextChildren = nextProps.children;\n var prevState = current !== null ? current.memoizedState : null;\n\n if (nextProps.mode === 'hidden' || enableLegacyHidden ) {\n // Rendering a hidden tree.\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n // In legacy sync mode, don't defer the subtree. Render it now.\n // TODO: Consider how Offscreen should work with transitions in the future\n var nextState = {\n baseLanes: NoLanes,\n cachePool: null,\n transitions: null\n };\n workInProgress.memoizedState = nextState;\n\n pushRenderLanes(workInProgress, renderLanes);\n } else if (!includesSomeLane(renderLanes, OffscreenLane)) {\n var spawnedCachePool = null; // We're hidden, and we're not rendering at Offscreen. We will bail out\n // and resume this tree later.\n\n var nextBaseLanes;\n\n if (prevState !== null) {\n var prevBaseLanes = prevState.baseLanes;\n nextBaseLanes = mergeLanes(prevBaseLanes, renderLanes);\n } else {\n nextBaseLanes = renderLanes;\n } // Schedule this fiber to re-render at offscreen priority. Then bailout.\n\n\n workInProgress.lanes = workInProgress.childLanes = laneToLanes(OffscreenLane);\n var _nextState = {\n baseLanes: nextBaseLanes,\n cachePool: spawnedCachePool,\n transitions: null\n };\n workInProgress.memoizedState = _nextState;\n workInProgress.updateQueue = null;\n // to avoid a push/pop misalignment.\n\n\n pushRenderLanes(workInProgress, nextBaseLanes);\n\n return null;\n } else {\n // This is the second render. The surrounding visible content has already\n // committed. Now we resume rendering the hidden tree.\n // Rendering at offscreen, so we can clear the base lanes.\n var _nextState2 = {\n baseLanes: NoLanes,\n cachePool: null,\n transitions: null\n };\n workInProgress.memoizedState = _nextState2; // Push the lanes that were skipped when we bailed out.\n\n var subtreeRenderLanes = prevState !== null ? prevState.baseLanes : renderLanes;\n\n pushRenderLanes(workInProgress, subtreeRenderLanes);\n }\n } else {\n // Rendering a visible tree.\n var _subtreeRenderLanes;\n\n if (prevState !== null) {\n // We're going from hidden -> visible.\n _subtreeRenderLanes = mergeLanes(prevState.baseLanes, renderLanes);\n\n workInProgress.memoizedState = null;\n } else {\n // We weren't previously hidden, and we still aren't, so there's nothing\n // special to do. Need to push to the stack regardless, though, to avoid\n // a push/pop misalignment.\n _subtreeRenderLanes = renderLanes;\n }\n\n pushRenderLanes(workInProgress, _subtreeRenderLanes);\n }\n\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n} // Note: These happen to have identical begin phases, for now. We shouldn't hold\n\nfunction updateFragment(current, workInProgress, renderLanes) {\n var nextChildren = workInProgress.pendingProps;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateMode(current, workInProgress, renderLanes) {\n var nextChildren = workInProgress.pendingProps.children;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateProfiler(current, workInProgress, renderLanes) {\n {\n workInProgress.flags |= Update;\n\n {\n // Reset effect durations for the next eventual effect phase.\n // These are reset during render to allow the DevTools commit hook a chance to read them,\n var stateNode = workInProgress.stateNode;\n stateNode.effectDuration = 0;\n stateNode.passiveEffectDuration = 0;\n }\n }\n\n var nextProps = workInProgress.pendingProps;\n var nextChildren = nextProps.children;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n\n if (current === null && ref !== null || current !== null && current.ref !== ref) {\n // Schedule a Ref effect\n workInProgress.flags |= Ref;\n\n {\n workInProgress.flags |= RefStatic;\n }\n }\n}\n\nfunction updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes) {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentNameFromType(Component));\n }\n }\n }\n\n var context;\n\n {\n var unmaskedContext = getUnmaskedContext(workInProgress, Component, true);\n context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n var nextChildren;\n var hasId;\n prepareToReadContext(workInProgress, renderLanes);\n\n {\n markComponentRenderStarted(workInProgress);\n }\n\n {\n ReactCurrentOwner$1.current = workInProgress;\n setIsRendering(true);\n nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes);\n hasId = checkDidRenderIdHook();\n\n if ( workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes);\n hasId = checkDidRenderIdHook();\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n setIsRendering(false);\n }\n\n {\n markComponentRenderStopped();\n }\n\n if (current !== null && !didReceiveUpdate) {\n bailoutHooks(current, workInProgress, renderLanes);\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n\n if (getIsHydrating() && hasId) {\n pushMaterializedTreeId(workInProgress);\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateClassComponent(current, workInProgress, Component, nextProps, renderLanes) {\n {\n // This is used by DevTools to force a boundary to error.\n switch (shouldError(workInProgress)) {\n case false:\n {\n var _instance = workInProgress.stateNode;\n var ctor = workInProgress.type; // TODO This way of resetting the error boundary state is a hack.\n // Is there a better way to do this?\n\n var tempInstance = new ctor(workInProgress.memoizedProps, _instance.context);\n var state = tempInstance.state;\n\n _instance.updater.enqueueSetState(_instance, state, null);\n\n break;\n }\n\n case true:\n {\n workInProgress.flags |= DidCapture;\n workInProgress.flags |= ShouldCapture; // eslint-disable-next-line react-internal/prod-error-codes\n\n var error$1 = new Error('Simulated error coming from DevTools');\n var lane = pickArbitraryLane(renderLanes);\n workInProgress.lanes = mergeLanes(workInProgress.lanes, lane); // Schedule the error boundary to re-render using updated state\n\n var update = createClassErrorUpdate(workInProgress, createCapturedValueAtFiber(error$1, workInProgress), lane);\n enqueueCapturedUpdate(workInProgress, update);\n break;\n }\n }\n\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentNameFromType(Component));\n }\n }\n } // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n\n var hasContext;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n prepareToReadContext(workInProgress, renderLanes);\n var instance = workInProgress.stateNode;\n var shouldUpdate;\n\n if (instance === null) {\n resetSuspendedCurrentOnMountInLegacyMode(current, workInProgress); // In the initial pass we might need to construct the instance.\n\n constructClassInstance(workInProgress, Component, nextProps);\n mountClassInstance(workInProgress, Component, nextProps, renderLanes);\n shouldUpdate = true;\n } else if (current === null) {\n // In a resume, we'll already have an instance we can reuse.\n shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderLanes);\n } else {\n shouldUpdate = updateClassInstance(current, workInProgress, Component, nextProps, renderLanes);\n }\n\n var nextUnitOfWork = finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes);\n\n {\n var inst = workInProgress.stateNode;\n\n if (shouldUpdate && inst.props !== nextProps) {\n if (!didWarnAboutReassigningProps) {\n error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentNameFromFiber(workInProgress) || 'a component');\n }\n\n didWarnAboutReassigningProps = true;\n }\n }\n\n return nextUnitOfWork;\n}\n\nfunction finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes) {\n // Refs should update even if shouldComponentUpdate returns false\n markRef(current, workInProgress);\n var didCaptureError = (workInProgress.flags & DidCapture) !== NoFlags;\n\n if (!shouldUpdate && !didCaptureError) {\n // Context providers should defer to sCU for rendering\n if (hasContext) {\n invalidateContextProvider(workInProgress, Component, false);\n }\n\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n\n var instance = workInProgress.stateNode; // Rerender\n\n ReactCurrentOwner$1.current = workInProgress;\n var nextChildren;\n\n if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') {\n // If we captured an error, but getDerivedStateFromError is not defined,\n // unmount all the children. componentDidCatch will schedule an update to\n // re-render a fallback. This is temporary until we migrate everyone to\n // the new API.\n // TODO: Warn in a future release.\n nextChildren = null;\n\n {\n stopProfilerTimerIfRunning();\n }\n } else {\n {\n markComponentRenderStarted(workInProgress);\n }\n\n {\n setIsRendering(true);\n nextChildren = instance.render();\n\n if ( workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n instance.render();\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n\n setIsRendering(false);\n }\n\n {\n markComponentRenderStopped();\n }\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n\n if (current !== null && didCaptureError) {\n // If we're recovering from an error, reconcile without reusing any of\n // the existing children. Conceptually, the normal children and the children\n // that are shown on error are two different sets, so we shouldn't reuse\n // normal children even if their identities match.\n forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes);\n } else {\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n } // Memoize state using the values we just used to render.\n // TODO: Restructure so we never read values from the instance.\n\n\n workInProgress.memoizedState = instance.state; // The context might have changed so we need to recalculate it.\n\n if (hasContext) {\n invalidateContextProvider(workInProgress, Component, true);\n }\n\n return workInProgress.child;\n}\n\nfunction pushHostRootContext(workInProgress) {\n var root = workInProgress.stateNode;\n\n if (root.pendingContext) {\n pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);\n } else if (root.context) {\n // Should always be set\n pushTopLevelContextObject(workInProgress, root.context, false);\n }\n\n pushHostContainer(workInProgress, root.containerInfo);\n}\n\nfunction updateHostRoot(current, workInProgress, renderLanes) {\n pushHostRootContext(workInProgress);\n\n if (current === null) {\n throw new Error('Should have a current fiber. This is a bug in React.');\n }\n\n var nextProps = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n var prevChildren = prevState.element;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, nextProps, null, renderLanes);\n var nextState = workInProgress.memoizedState;\n var root = workInProgress.stateNode;\n // being called \"element\".\n\n\n var nextChildren = nextState.element;\n\n if ( prevState.isDehydrated) {\n // This is a hydration root whose shell has not yet hydrated. We should\n // attempt to hydrate.\n // Flip isDehydrated to false to indicate that when this render\n // finishes, the root will no longer be dehydrated.\n var overrideState = {\n element: nextChildren,\n isDehydrated: false,\n cache: nextState.cache,\n pendingSuspenseBoundaries: nextState.pendingSuspenseBoundaries,\n transitions: nextState.transitions\n };\n var updateQueue = workInProgress.updateQueue; // `baseState` can always be the last state because the root doesn't\n // have reducer functions so it doesn't need rebasing.\n\n updateQueue.baseState = overrideState;\n workInProgress.memoizedState = overrideState;\n\n if (workInProgress.flags & ForceClientRender) {\n // Something errored during a previous attempt to hydrate the shell, so we\n // forced a client render.\n var recoverableError = createCapturedValueAtFiber(new Error('There was an error while hydrating. Because the error happened outside ' + 'of a Suspense boundary, the entire root will switch to ' + 'client rendering.'), workInProgress);\n return mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, recoverableError);\n } else if (nextChildren !== prevChildren) {\n var _recoverableError = createCapturedValueAtFiber(new Error('This root received an early update, before anything was able ' + 'hydrate. Switched the entire root to client rendering.'), workInProgress);\n\n return mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, _recoverableError);\n } else {\n // The outermost shell has not hydrated yet. Start hydrating.\n enterHydrationState(workInProgress);\n\n var child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);\n workInProgress.child = child;\n var node = child;\n\n while (node) {\n // Mark each child as hydrating. This is a fast path to know whether this\n // tree is part of a hydrating tree. This is used to determine if a child\n // node has fully mounted yet, and for scheduling event replaying.\n // Conceptually this is similar to Placement in that a new subtree is\n // inserted into the React tree here. It just happens to not need DOM\n // mutations because it already exists.\n node.flags = node.flags & ~Placement | Hydrating;\n node = node.sibling;\n }\n }\n } else {\n // Root is not dehydrated. Either this is a client-only root, or it\n // already hydrated.\n resetHydrationState();\n\n if (nextChildren === prevChildren) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n }\n\n return workInProgress.child;\n}\n\nfunction mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, recoverableError) {\n // Revert to client rendering.\n resetHydrationState();\n queueHydrationError(recoverableError);\n workInProgress.flags |= ForceClientRender;\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateHostComponent(current, workInProgress, renderLanes) {\n pushHostContext(workInProgress);\n\n if (current === null) {\n tryToClaimNextHydratableInstance(workInProgress);\n }\n\n var type = workInProgress.type;\n var nextProps = workInProgress.pendingProps;\n var prevProps = current !== null ? current.memoizedProps : null;\n var nextChildren = nextProps.children;\n var isDirectTextChild = shouldSetTextContent(type, nextProps);\n\n if (isDirectTextChild) {\n // We special case a direct text child of a host node. This is a common\n // case. We won't handle it as a reified child. We will instead handle\n // this in the host environment that also has access to this prop. That\n // avoids allocating another HostText fiber and traversing it.\n nextChildren = null;\n } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {\n // If we're switching from a direct text child to a normal child, or to\n // empty, we need to schedule the text content to be reset.\n workInProgress.flags |= ContentReset;\n }\n\n markRef(current, workInProgress);\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction updateHostText(current, workInProgress) {\n if (current === null) {\n tryToClaimNextHydratableInstance(workInProgress);\n } // Nothing to do here. This is terminal. We'll do the completion step\n // immediately after.\n\n\n return null;\n}\n\nfunction mountLazyComponent(_current, workInProgress, elementType, renderLanes) {\n resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress);\n var props = workInProgress.pendingProps;\n var lazyComponent = elementType;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n var Component = init(payload); // Store the unwrapped component in the type.\n\n workInProgress.type = Component;\n var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component);\n var resolvedProps = resolveDefaultProps(Component, props);\n var child;\n\n switch (resolvedTag) {\n case FunctionComponent:\n {\n {\n validateFunctionComponentInDev(workInProgress, Component);\n workInProgress.type = Component = resolveFunctionForHotReloading(Component);\n }\n\n child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderLanes);\n return child;\n }\n\n case ClassComponent:\n {\n {\n workInProgress.type = Component = resolveClassForHotReloading(Component);\n }\n\n child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderLanes);\n return child;\n }\n\n case ForwardRef:\n {\n {\n workInProgress.type = Component = resolveForwardRefForHotReloading(Component);\n }\n\n child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderLanes);\n return child;\n }\n\n case MemoComponent:\n {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n var outerPropTypes = Component.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only\n 'prop', getComponentNameFromType(Component));\n }\n }\n }\n\n child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too\n renderLanes);\n return child;\n }\n }\n\n var hint = '';\n\n {\n if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) {\n hint = ' Did you wrap a component in React.lazy() more than once?';\n }\n } // This message intentionally doesn't mention ForwardRef or MemoComponent\n // because the fact that it's a separate type of work is an\n // implementation detail.\n\n\n throw new Error(\"Element type is invalid. Received a promise that resolves to: \" + Component + \". \" + (\"Lazy element type must resolve to a class or function.\" + hint));\n}\n\nfunction mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderLanes) {\n resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress); // Promote the fiber to a class and try rendering again.\n\n workInProgress.tag = ClassComponent; // The rest of this function is a fork of `updateClassComponent`\n // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n var hasContext;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n prepareToReadContext(workInProgress, renderLanes);\n constructClassInstance(workInProgress, Component, nextProps);\n mountClassInstance(workInProgress, Component, nextProps, renderLanes);\n return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);\n}\n\nfunction mountIndeterminateComponent(_current, workInProgress, Component, renderLanes) {\n resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress);\n var props = workInProgress.pendingProps;\n var context;\n\n {\n var unmaskedContext = getUnmaskedContext(workInProgress, Component, false);\n context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n prepareToReadContext(workInProgress, renderLanes);\n var value;\n var hasId;\n\n {\n markComponentRenderStarted(workInProgress);\n }\n\n {\n if (Component.prototype && typeof Component.prototype.render === 'function') {\n var componentName = getComponentNameFromType(Component) || 'Unknown';\n\n if (!didWarnAboutBadClass[componentName]) {\n error(\"The <%s /> component appears to have a render method, but doesn't extend React.Component. \" + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);\n\n didWarnAboutBadClass[componentName] = true;\n }\n }\n\n if (workInProgress.mode & StrictLegacyMode) {\n ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);\n }\n\n setIsRendering(true);\n ReactCurrentOwner$1.current = workInProgress;\n value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes);\n hasId = checkDidRenderIdHook();\n setIsRendering(false);\n }\n\n {\n markComponentRenderStopped();\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n\n {\n // Support for module components is deprecated and is removed behind a flag.\n // Whether or not it would crash later, we want to show a good message in DEV first.\n if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n var _componentName = getComponentNameFromType(Component) || 'Unknown';\n\n if (!didWarnAboutModulePatternComponent[_componentName]) {\n error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName);\n\n didWarnAboutModulePatternComponent[_componentName] = true;\n }\n }\n }\n\n if ( // Run these checks in production only if the flag is off.\n // Eventually we'll delete this branch altogether.\n typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n {\n var _componentName2 = getComponentNameFromType(Component) || 'Unknown';\n\n if (!didWarnAboutModulePatternComponent[_componentName2]) {\n error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName2, _componentName2, _componentName2);\n\n didWarnAboutModulePatternComponent[_componentName2] = true;\n }\n } // Proceed under the assumption that this is a class instance\n\n\n workInProgress.tag = ClassComponent; // Throw out any hooks that were used.\n\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null; // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n var hasContext = false;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null;\n initializeUpdateQueue(workInProgress);\n adoptClassInstance(workInProgress, value);\n mountClassInstance(workInProgress, Component, props, renderLanes);\n return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);\n } else {\n // Proceed under the assumption that this is a function component\n workInProgress.tag = FunctionComponent;\n\n {\n\n if ( workInProgress.mode & StrictLegacyMode) {\n setIsStrictModeForDevtools(true);\n\n try {\n value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes);\n hasId = checkDidRenderIdHook();\n } finally {\n setIsStrictModeForDevtools(false);\n }\n }\n }\n\n if (getIsHydrating() && hasId) {\n pushMaterializedTreeId(workInProgress);\n }\n\n reconcileChildren(null, workInProgress, value, renderLanes);\n\n {\n validateFunctionComponentInDev(workInProgress, Component);\n }\n\n return workInProgress.child;\n }\n}\n\nfunction validateFunctionComponentInDev(workInProgress, Component) {\n {\n if (Component) {\n if (Component.childContextTypes) {\n error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');\n }\n }\n\n if (workInProgress.ref !== null) {\n var info = '';\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n\n var warningKey = ownerName || '';\n var debugSource = workInProgress._debugSource;\n\n if (debugSource) {\n warningKey = debugSource.fileName + ':' + debugSource.lineNumber;\n }\n\n if (!didWarnAboutFunctionRefs[warningKey]) {\n didWarnAboutFunctionRefs[warningKey] = true;\n\n error('Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info);\n }\n }\n\n if (typeof Component.getDerivedStateFromProps === 'function') {\n var _componentName3 = getComponentNameFromType(Component) || 'Unknown';\n\n if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3]) {\n error('%s: Function components do not support getDerivedStateFromProps.', _componentName3);\n\n didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3] = true;\n }\n }\n\n if (typeof Component.contextType === 'object' && Component.contextType !== null) {\n var _componentName4 = getComponentNameFromType(Component) || 'Unknown';\n\n if (!didWarnAboutContextTypeOnFunctionComponent[_componentName4]) {\n error('%s: Function components do not support contextType.', _componentName4);\n\n didWarnAboutContextTypeOnFunctionComponent[_componentName4] = true;\n }\n }\n }\n}\n\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n treeContext: null,\n retryLane: NoLane\n};\n\nfunction mountSuspenseOffscreenState(renderLanes) {\n return {\n baseLanes: renderLanes,\n cachePool: getSuspendedCache(),\n transitions: null\n };\n}\n\nfunction updateSuspenseOffscreenState(prevOffscreenState, renderLanes) {\n var cachePool = null;\n\n return {\n baseLanes: mergeLanes(prevOffscreenState.baseLanes, renderLanes),\n cachePool: cachePool,\n transitions: prevOffscreenState.transitions\n };\n} // TODO: Probably should inline this back\n\n\nfunction shouldRemainOnFallback(suspenseContext, current, workInProgress, renderLanes) {\n // If we're already showing a fallback, there are cases where we need to\n // remain on that fallback regardless of whether the content has resolved.\n // For example, SuspenseList coordinates when nested content appears.\n if (current !== null) {\n var suspenseState = current.memoizedState;\n\n if (suspenseState === null) {\n // Currently showing content. Don't hide it, even if ForceSuspenseFallback\n // is true. More precise name might be \"ForceRemainSuspenseFallback\".\n // Note: This is a factoring smell. Can't remain on a fallback if there's\n // no fallback to remain on.\n return false;\n }\n } // Not currently showing content. Consult the Suspense context.\n\n\n return hasSuspenseContext(suspenseContext, ForceSuspenseFallback);\n}\n\nfunction getRemainingWorkInPrimaryTree(current, renderLanes) {\n // TODO: Should not remove render lanes that were pinged during this render\n return removeLanes(current.childLanes, renderLanes);\n}\n\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps; // This is used by DevTools to force a boundary to suspend.\n\n {\n if (shouldSuspend(workInProgress)) {\n workInProgress.flags |= DidCapture;\n }\n }\n\n var suspenseContext = suspenseStackCursor.current;\n var showFallback = false;\n var didSuspend = (workInProgress.flags & DidCapture) !== NoFlags;\n\n if (didSuspend || shouldRemainOnFallback(suspenseContext, current)) {\n // Something in this boundary's subtree already suspended. Switch to\n // rendering the fallback children.\n showFallback = true;\n workInProgress.flags &= ~DidCapture;\n } else {\n // Attempting the main content\n if (current === null || current.memoizedState !== null) {\n // This is a new mount or this boundary is already showing a fallback state.\n // Mark this subtree context as having at least one invisible parent that could\n // handle the fallback state.\n // Avoided boundaries are not considered since they cannot handle preferred fallback states.\n {\n suspenseContext = addSubtreeSuspenseContext(suspenseContext, InvisibleParentSuspenseContext);\n }\n }\n }\n\n suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n pushSuspenseContext(workInProgress, suspenseContext); // OK, the next part is confusing. We're about to reconcile the Suspense\n // boundary's children. This involves some custom reconciliation logic. Two\n // main reasons this is so complicated.\n //\n // First, Legacy Mode has different semantics for backwards compatibility. The\n // primary tree will commit in an inconsistent state, so when we do the\n // second pass to render the fallback, we do some exceedingly, uh, clever\n // hacks to make that not totally break. Like transferring effects and\n // deletions from hidden tree. In Concurrent Mode, it's much simpler,\n // because we bailout on the primary tree completely and leave it in its old\n // state, no effects. Same as what we do for Offscreen (except that\n // Offscreen doesn't have the first render pass).\n //\n // Second is hydration. During hydration, the Suspense fiber has a slightly\n // different layout, where the child points to a dehydrated fragment, which\n // contains the DOM rendered by the server.\n //\n // Third, even if you set all that aside, Suspense is like error boundaries in\n // that we first we try to render one tree, and if that fails, we render again\n // and switch to a different tree. Like a try/catch block. So we have to track\n // which branch we're currently rendering. Ideally we would model this using\n // a stack.\n\n if (current === null) {\n // Initial mount\n // Special path for hydration\n // If we're currently hydrating, try to hydrate this boundary.\n tryToClaimNextHydratableInstance(workInProgress); // This could've been a dehydrated suspense component.\n\n var suspenseState = workInProgress.memoizedState;\n\n if (suspenseState !== null) {\n var dehydrated = suspenseState.dehydrated;\n\n if (dehydrated !== null) {\n return mountDehydratedSuspenseComponent(workInProgress, dehydrated);\n }\n }\n\n var nextPrimaryChildren = nextProps.children;\n var nextFallbackChildren = nextProps.fallback;\n\n if (showFallback) {\n var fallbackFragment = mountSuspenseFallbackChildren(workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);\n var primaryChildFragment = workInProgress.child;\n primaryChildFragment.memoizedState = mountSuspenseOffscreenState(renderLanes);\n workInProgress.memoizedState = SUSPENDED_MARKER;\n\n return fallbackFragment;\n } else {\n return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n }\n } else {\n // This is an update.\n // Special path for hydration\n var prevState = current.memoizedState;\n\n if (prevState !== null) {\n var _dehydrated = prevState.dehydrated;\n\n if (_dehydrated !== null) {\n return updateDehydratedSuspenseComponent(current, workInProgress, didSuspend, nextProps, _dehydrated, prevState, renderLanes);\n }\n }\n\n if (showFallback) {\n var _nextFallbackChildren = nextProps.fallback;\n var _nextPrimaryChildren = nextProps.children;\n var fallbackChildFragment = updateSuspenseFallbackChildren(current, workInProgress, _nextPrimaryChildren, _nextFallbackChildren, renderLanes);\n var _primaryChildFragment2 = workInProgress.child;\n var prevOffscreenState = current.child.memoizedState;\n _primaryChildFragment2.memoizedState = prevOffscreenState === null ? mountSuspenseOffscreenState(renderLanes) : updateSuspenseOffscreenState(prevOffscreenState, renderLanes);\n\n _primaryChildFragment2.childLanes = getRemainingWorkInPrimaryTree(current, renderLanes);\n workInProgress.memoizedState = SUSPENDED_MARKER;\n return fallbackChildFragment;\n } else {\n var _nextPrimaryChildren2 = nextProps.children;\n\n var _primaryChildFragment3 = updateSuspensePrimaryChildren(current, workInProgress, _nextPrimaryChildren2, renderLanes);\n\n workInProgress.memoizedState = null;\n return _primaryChildFragment3;\n }\n }\n}\n\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren, renderLanes) {\n var mode = workInProgress.mode;\n var primaryChildProps = {\n mode: 'visible',\n children: primaryChildren\n };\n var primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, mode);\n primaryChildFragment.return = workInProgress;\n workInProgress.child = primaryChildFragment;\n return primaryChildFragment;\n}\n\nfunction mountSuspenseFallbackChildren(workInProgress, primaryChildren, fallbackChildren, renderLanes) {\n var mode = workInProgress.mode;\n var progressedPrimaryFragment = workInProgress.child;\n var primaryChildProps = {\n mode: 'hidden',\n children: primaryChildren\n };\n var primaryChildFragment;\n var fallbackChildFragment;\n\n if ((mode & ConcurrentMode) === NoMode && progressedPrimaryFragment !== null) {\n // In legacy mode, we commit the primary tree as if it successfully\n // completed, even though it's in an inconsistent state.\n primaryChildFragment = progressedPrimaryFragment;\n primaryChildFragment.childLanes = NoLanes;\n primaryChildFragment.pendingProps = primaryChildProps;\n\n if ( workInProgress.mode & ProfileMode) {\n // Reset the durations from the first pass so they aren't included in the\n // final amounts. This seems counterintuitive, since we're intentionally\n // not measuring part of the render phase, but this makes it match what we\n // do in Concurrent Mode.\n primaryChildFragment.actualDuration = 0;\n primaryChildFragment.actualStartTime = -1;\n primaryChildFragment.selfBaseDuration = 0;\n primaryChildFragment.treeBaseDuration = 0;\n }\n\n fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);\n } else {\n primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, mode);\n fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);\n }\n\n primaryChildFragment.return = workInProgress;\n fallbackChildFragment.return = workInProgress;\n primaryChildFragment.sibling = fallbackChildFragment;\n workInProgress.child = primaryChildFragment;\n return fallbackChildFragment;\n}\n\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode, renderLanes) {\n // The props argument to `createFiberFromOffscreen` is `any` typed, so we use\n // this wrapper function to constrain it.\n return createFiberFromOffscreen(offscreenProps, mode, NoLanes, null);\n}\n\nfunction updateWorkInProgressOffscreenFiber(current, offscreenProps) {\n // The props argument to `createWorkInProgress` is `any` typed, so we use this\n // wrapper function to constrain it.\n return createWorkInProgress(current, offscreenProps);\n}\n\nfunction updateSuspensePrimaryChildren(current, workInProgress, primaryChildren, renderLanes) {\n var currentPrimaryChildFragment = current.child;\n var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;\n var primaryChildFragment = updateWorkInProgressOffscreenFiber(currentPrimaryChildFragment, {\n mode: 'visible',\n children: primaryChildren\n });\n\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n primaryChildFragment.lanes = renderLanes;\n }\n\n primaryChildFragment.return = workInProgress;\n primaryChildFragment.sibling = null;\n\n if (currentFallbackChildFragment !== null) {\n // Delete the fallback child fragment\n var deletions = workInProgress.deletions;\n\n if (deletions === null) {\n workInProgress.deletions = [currentFallbackChildFragment];\n workInProgress.flags |= ChildDeletion;\n } else {\n deletions.push(currentFallbackChildFragment);\n }\n }\n\n workInProgress.child = primaryChildFragment;\n return primaryChildFragment;\n}\n\nfunction updateSuspenseFallbackChildren(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) {\n var mode = workInProgress.mode;\n var currentPrimaryChildFragment = current.child;\n var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;\n var primaryChildProps = {\n mode: 'hidden',\n children: primaryChildren\n };\n var primaryChildFragment;\n\n if ( // In legacy mode, we commit the primary tree as if it successfully\n // completed, even though it's in an inconsistent state.\n (mode & ConcurrentMode) === NoMode && // Make sure we're on the second pass, i.e. the primary child fragment was\n // already cloned. In legacy mode, the only case where this isn't true is\n // when DevTools forces us to display a fallback; we skip the first render\n // pass entirely and go straight to rendering the fallback. (In Concurrent\n // Mode, SuspenseList can also trigger this scenario, but this is a legacy-\n // only codepath.)\n workInProgress.child !== currentPrimaryChildFragment) {\n var progressedPrimaryFragment = workInProgress.child;\n primaryChildFragment = progressedPrimaryFragment;\n primaryChildFragment.childLanes = NoLanes;\n primaryChildFragment.pendingProps = primaryChildProps;\n\n if ( workInProgress.mode & ProfileMode) {\n // Reset the durations from the first pass so they aren't included in the\n // final amounts. This seems counterintuitive, since we're intentionally\n // not measuring part of the render phase, but this makes it match what we\n // do in Concurrent Mode.\n primaryChildFragment.actualDuration = 0;\n primaryChildFragment.actualStartTime = -1;\n primaryChildFragment.selfBaseDuration = currentPrimaryChildFragment.selfBaseDuration;\n primaryChildFragment.treeBaseDuration = currentPrimaryChildFragment.treeBaseDuration;\n } // The fallback fiber was added as a deletion during the first pass.\n // However, since we're going to remain on the fallback, we no longer want\n // to delete it.\n\n\n workInProgress.deletions = null;\n } else {\n primaryChildFragment = updateWorkInProgressOffscreenFiber(currentPrimaryChildFragment, primaryChildProps); // Since we're reusing a current tree, we need to reuse the flags, too.\n // (We don't do this in legacy mode, because in legacy mode we don't re-use\n // the current tree; see previous branch.)\n\n primaryChildFragment.subtreeFlags = currentPrimaryChildFragment.subtreeFlags & StaticMask;\n }\n\n var fallbackChildFragment;\n\n if (currentFallbackChildFragment !== null) {\n fallbackChildFragment = createWorkInProgress(currentFallbackChildFragment, fallbackChildren);\n } else {\n fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null); // Needs a placement effect because the parent (the Suspense boundary) already\n // mounted but this is a new fiber.\n\n fallbackChildFragment.flags |= Placement;\n }\n\n fallbackChildFragment.return = workInProgress;\n primaryChildFragment.return = workInProgress;\n primaryChildFragment.sibling = fallbackChildFragment;\n workInProgress.child = primaryChildFragment;\n return fallbackChildFragment;\n}\n\nfunction retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, recoverableError) {\n // Falling back to client rendering. Because this has performance\n // implications, it's considered a recoverable error, even though the user\n // likely won't observe anything wrong with the UI.\n //\n // The error is passed in as an argument to enforce that every caller provide\n // a custom message, or explicitly opt out (currently the only path that opts\n // out is legacy mode; every concurrent path provides an error).\n if (recoverableError !== null) {\n queueHydrationError(recoverableError);\n } // This will add the old fiber to the deletion list\n\n\n reconcileChildFibers(workInProgress, current.child, null, renderLanes); // We're now not suspended nor dehydrated.\n\n var nextProps = workInProgress.pendingProps;\n var primaryChildren = nextProps.children;\n var primaryChildFragment = mountSuspensePrimaryChildren(workInProgress, primaryChildren); // Needs a placement effect because the parent (the Suspense boundary) already\n // mounted but this is a new fiber.\n\n primaryChildFragment.flags |= Placement;\n workInProgress.memoizedState = null;\n return primaryChildFragment;\n}\n\nfunction mountSuspenseFallbackAfterRetryWithoutHydrating(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) {\n var fiberMode = workInProgress.mode;\n var primaryChildProps = {\n mode: 'visible',\n children: primaryChildren\n };\n var primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, fiberMode);\n var fallbackChildFragment = createFiberFromFragment(fallbackChildren, fiberMode, renderLanes, null); // Needs a placement effect because the parent (the Suspense\n // boundary) already mounted but this is a new fiber.\n\n fallbackChildFragment.flags |= Placement;\n primaryChildFragment.return = workInProgress;\n fallbackChildFragment.return = workInProgress;\n primaryChildFragment.sibling = fallbackChildFragment;\n workInProgress.child = primaryChildFragment;\n\n if ((workInProgress.mode & ConcurrentMode) !== NoMode) {\n // We will have dropped the effect list which contains the\n // deletion. We need to reconcile to delete the current child.\n reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n }\n\n return fallbackChildFragment;\n}\n\nfunction mountDehydratedSuspenseComponent(workInProgress, suspenseInstance, renderLanes) {\n // During the first pass, we'll bail out and not drill into the children.\n // Instead, we'll leave the content in place and try to hydrate it later.\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n {\n error('Cannot hydrate Suspense in legacy mode. Switch from ' + 'ReactDOM.hydrate(element, container) to ' + 'ReactDOMClient.hydrateRoot(container, <App />)' + '.render(element) or remove the Suspense components from ' + 'the server rendered components.');\n }\n\n workInProgress.lanes = laneToLanes(SyncLane);\n } else if (isSuspenseInstanceFallback(suspenseInstance)) {\n // This is a client-only boundary. Since we won't get any content from the server\n // for this, we need to schedule that at a higher priority based on when it would\n // have timed out. In theory we could render it in this pass but it would have the\n // wrong priority associated with it and will prevent hydration of parent path.\n // Instead, we'll leave work left on it to render it in a separate commit.\n // TODO This time should be the time at which the server rendered response that is\n // a parent to this boundary was displayed. However, since we currently don't have\n // a protocol to transfer that time, we'll just estimate it by using the current\n // time. This will mean that Suspense timeouts are slightly shifted to later than\n // they should be.\n // Schedule a normal pri update to render this content.\n workInProgress.lanes = laneToLanes(DefaultHydrationLane);\n } else {\n // We'll continue hydrating the rest at offscreen priority since we'll already\n // be showing the right content coming from the server, it is no rush.\n workInProgress.lanes = laneToLanes(OffscreenLane);\n }\n\n return null;\n}\n\nfunction updateDehydratedSuspenseComponent(current, workInProgress, didSuspend, nextProps, suspenseInstance, suspenseState, renderLanes) {\n if (!didSuspend) {\n // This is the first render pass. Attempt to hydrate.\n // We should never be hydrating at this point because it is the first pass,\n // but after we've already committed once.\n warnIfHydrating();\n\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, // TODO: When we delete legacy mode, we should make this error argument\n // required — every concurrent mode path that causes hydration to\n // de-opt to client rendering should have an error message.\n null);\n }\n\n if (isSuspenseInstanceFallback(suspenseInstance)) {\n // This boundary is in a permanent fallback state. In this case, we'll never\n // get an update and we'll never be able to hydrate the final content. Let's just try the\n // client side render instead.\n var digest, message, stack;\n\n {\n var _getSuspenseInstanceF = getSuspenseInstanceFallbackErrorDetails(suspenseInstance);\n\n digest = _getSuspenseInstanceF.digest;\n message = _getSuspenseInstanceF.message;\n stack = _getSuspenseInstanceF.stack;\n }\n\n var error;\n\n if (message) {\n // eslint-disable-next-line react-internal/prod-error-codes\n error = new Error(message);\n } else {\n error = new Error('The server could not finish this Suspense boundary, likely ' + 'due to an error during server rendering. Switched to ' + 'client rendering.');\n }\n\n var capturedValue = createCapturedValue(error, digest, stack);\n return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, capturedValue);\n }\n // any context has changed, we need to treat is as if the input might have changed.\n\n\n var hasContextChanged = includesSomeLane(renderLanes, current.childLanes);\n\n if (didReceiveUpdate || hasContextChanged) {\n // This boundary has changed since the first render. This means that we are now unable to\n // hydrate it. We might still be able to hydrate it using a higher priority lane.\n var root = getWorkInProgressRoot();\n\n if (root !== null) {\n var attemptHydrationAtLane = getBumpedLaneForHydration(root, renderLanes);\n\n if (attemptHydrationAtLane !== NoLane && attemptHydrationAtLane !== suspenseState.retryLane) {\n // Intentionally mutating since this render will get interrupted. This\n // is one of the very rare times where we mutate the current tree\n // during the render phase.\n suspenseState.retryLane = attemptHydrationAtLane; // TODO: Ideally this would inherit the event time of the current render\n\n var eventTime = NoTimestamp;\n enqueueConcurrentRenderForLane(current, attemptHydrationAtLane);\n scheduleUpdateOnFiber(root, current, attemptHydrationAtLane, eventTime);\n }\n } // If we have scheduled higher pri work above, this will probably just abort the render\n // since we now have higher priority work, but in case it doesn't, we need to prepare to\n // render something, if we time out. Even if that requires us to delete everything and\n // skip hydration.\n // Delay having to do this as long as the suspense timeout allows us.\n\n\n renderDidSuspendDelayIfPossible();\n\n var _capturedValue = createCapturedValue(new Error('This Suspense boundary received an update before it finished ' + 'hydrating. This caused the boundary to switch to client rendering. ' + 'The usual way to fix this is to wrap the original update ' + 'in startTransition.'));\n\n return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, _capturedValue);\n } else if (isSuspenseInstancePending(suspenseInstance)) {\n // This component is still pending more data from the server, so we can't hydrate its\n // content. We treat it as if this component suspended itself. It might seem as if\n // we could just try to render it client-side instead. However, this will perform a\n // lot of unnecessary work and is unlikely to complete since it often will suspend\n // on missing data anyway. Additionally, the server might be able to render more\n // than we can on the client yet. In that case we'd end up with more fallback states\n // on the client than if we just leave it alone. If the server times out or errors\n // these should update this boundary to the permanent Fallback state instead.\n // Mark it as having captured (i.e. suspended).\n workInProgress.flags |= DidCapture; // Leave the child in place. I.e. the dehydrated fragment.\n\n workInProgress.child = current.child; // Register a callback to retry this boundary once the server has sent the result.\n\n var retry = retryDehydratedSuspenseBoundary.bind(null, current);\n registerSuspenseInstanceRetry(suspenseInstance, retry);\n return null;\n } else {\n // This is the first attempt.\n reenterHydrationStateFromDehydratedSuspenseInstance(workInProgress, suspenseInstance, suspenseState.treeContext);\n var primaryChildren = nextProps.children;\n var primaryChildFragment = mountSuspensePrimaryChildren(workInProgress, primaryChildren); // Mark the children as hydrating. This is a fast path to know whether this\n // tree is part of a hydrating tree. This is used to determine if a child\n // node has fully mounted yet, and for scheduling event replaying.\n // Conceptually this is similar to Placement in that a new subtree is\n // inserted into the React tree here. It just happens to not need DOM\n // mutations because it already exists.\n\n primaryChildFragment.flags |= Hydrating;\n return primaryChildFragment;\n }\n } else {\n // This is the second render pass. We already attempted to hydrated, but\n // something either suspended or errored.\n if (workInProgress.flags & ForceClientRender) {\n // Something errored during hydration. Try again without hydrating.\n workInProgress.flags &= ~ForceClientRender;\n\n var _capturedValue2 = createCapturedValue(new Error('There was an error while hydrating this Suspense boundary. ' + 'Switched to client rendering.'));\n\n return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, _capturedValue2);\n } else if (workInProgress.memoizedState !== null) {\n // Something suspended and we should still be in dehydrated mode.\n // Leave the existing child in place.\n workInProgress.child = current.child; // The dehydrated completion pass expects this flag to be there\n // but the normal suspense pass doesn't.\n\n workInProgress.flags |= DidCapture;\n return null;\n } else {\n // Suspended but we should no longer be in dehydrated mode.\n // Therefore we now have to render the fallback.\n var nextPrimaryChildren = nextProps.children;\n var nextFallbackChildren = nextProps.fallback;\n var fallbackChildFragment = mountSuspenseFallbackAfterRetryWithoutHydrating(current, workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);\n var _primaryChildFragment4 = workInProgress.child;\n _primaryChildFragment4.memoizedState = mountSuspenseOffscreenState(renderLanes);\n workInProgress.memoizedState = SUSPENDED_MARKER;\n return fallbackChildFragment;\n }\n }\n}\n\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n fiber.lanes = mergeLanes(fiber.lanes, renderLanes);\n var alternate = fiber.alternate;\n\n if (alternate !== null) {\n alternate.lanes = mergeLanes(alternate.lanes, renderLanes);\n }\n\n scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\n\nfunction propagateSuspenseContextChange(workInProgress, firstChild, renderLanes) {\n // Mark any Suspense boundaries with fallbacks as having work to do.\n // If they were previously forced into fallbacks, they may now be able\n // to unblock.\n var node = firstChild;\n\n while (node !== null) {\n if (node.tag === SuspenseComponent) {\n var state = node.memoizedState;\n\n if (state !== null) {\n scheduleSuspenseWorkOnFiber(node, renderLanes, workInProgress);\n }\n } else if (node.tag === SuspenseListComponent) {\n // If the tail is hidden there might not be an Suspense boundaries\n // to schedule work on. In this case we have to schedule it on the\n // list itself.\n // We don't have to traverse to the children of the list since\n // the list will propagate the change when it rerenders.\n scheduleSuspenseWorkOnFiber(node, renderLanes, workInProgress);\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === workInProgress) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === workInProgress) {\n return;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\n\nfunction findLastContentRow(firstChild) {\n // This is going to find the last row among these children that is already\n // showing content on the screen, as opposed to being in fallback state or\n // new. If a row has multiple Suspense boundaries, any of them being in the\n // fallback state, counts as the whole row being in a fallback state.\n // Note that the \"rows\" will be workInProgress, but any nested children\n // will still be current since we haven't rendered them yet. The mounted\n // order may not be the same as the new order. We use the new order.\n var row = firstChild;\n var lastContentRow = null;\n\n while (row !== null) {\n var currentRow = row.alternate; // New rows can't be content rows.\n\n if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n lastContentRow = row;\n }\n\n row = row.sibling;\n }\n\n return lastContentRow;\n}\n\nfunction validateRevealOrder(revealOrder) {\n {\n if (revealOrder !== undefined && revealOrder !== 'forwards' && revealOrder !== 'backwards' && revealOrder !== 'together' && !didWarnAboutRevealOrder[revealOrder]) {\n didWarnAboutRevealOrder[revealOrder] = true;\n\n if (typeof revealOrder === 'string') {\n switch (revealOrder.toLowerCase()) {\n case 'together':\n case 'forwards':\n case 'backwards':\n {\n error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'Use lowercase \"%s\" instead.', revealOrder, revealOrder.toLowerCase());\n\n break;\n }\n\n case 'forward':\n case 'backward':\n {\n error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'React uses the -s suffix in the spelling. Use \"%ss\" instead.', revealOrder, revealOrder.toLowerCase());\n\n break;\n }\n\n default:\n error('\"%s\" is not a supported revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n\n break;\n }\n } else {\n error('%s is not a supported value for revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n }\n }\n }\n}\n\nfunction validateTailOptions(tailMode, revealOrder) {\n {\n if (tailMode !== undefined && !didWarnAboutTailOptions[tailMode]) {\n if (tailMode !== 'collapsed' && tailMode !== 'hidden') {\n didWarnAboutTailOptions[tailMode] = true;\n\n error('\"%s\" is not a supported value for tail on <SuspenseList />. ' + 'Did you mean \"collapsed\" or \"hidden\"?', tailMode);\n } else if (revealOrder !== 'forwards' && revealOrder !== 'backwards') {\n didWarnAboutTailOptions[tailMode] = true;\n\n error('<SuspenseList tail=\"%s\" /> is only valid if revealOrder is ' + '\"forwards\" or \"backwards\". ' + 'Did you mean to specify revealOrder=\"forwards\"?', tailMode);\n }\n }\n }\n}\n\nfunction validateSuspenseListNestedChild(childSlot, index) {\n {\n var isAnArray = isArray(childSlot);\n var isIterable = !isAnArray && typeof getIteratorFn(childSlot) === 'function';\n\n if (isAnArray || isIterable) {\n var type = isAnArray ? 'array' : 'iterable';\n\n error('A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' + 'an additional SuspenseList to configure its revealOrder: ' + '<SuspenseList revealOrder=...> ... ' + '<SuspenseList revealOrder=...>{%s}</SuspenseList> ... ' + '</SuspenseList>', type, index, type);\n\n return false;\n }\n }\n\n return true;\n}\n\nfunction validateSuspenseListChildren(children, revealOrder) {\n {\n if ((revealOrder === 'forwards' || revealOrder === 'backwards') && children !== undefined && children !== null && children !== false) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n if (!validateSuspenseListNestedChild(children[i], i)) {\n return;\n }\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n\n if (typeof iteratorFn === 'function') {\n var childrenIterator = iteratorFn.call(children);\n\n if (childrenIterator) {\n var step = childrenIterator.next();\n var _i = 0;\n\n for (; !step.done; step = childrenIterator.next()) {\n if (!validateSuspenseListNestedChild(step.value, _i)) {\n return;\n }\n\n _i++;\n }\n }\n } else {\n error('A single row was passed to a <SuspenseList revealOrder=\"%s\" />. ' + 'This is not useful since it needs multiple rows. ' + 'Did you mean to pass multiple children or an array?', revealOrder);\n }\n }\n }\n }\n}\n\nfunction initSuspenseListRenderState(workInProgress, isBackwards, tail, lastContentRow, tailMode) {\n var renderState = workInProgress.memoizedState;\n\n if (renderState === null) {\n workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailMode: tailMode\n };\n } else {\n // We can reuse the existing object from previous renders.\n renderState.isBackwards = isBackwards;\n renderState.rendering = null;\n renderState.renderingStartTime = 0;\n renderState.last = lastContentRow;\n renderState.tail = tail;\n renderState.tailMode = tailMode;\n }\n} // This can end up rendering this component multiple passes.\n// The first pass splits the children fibers into two sets. A head and tail.\n// We first render the head. If anything is in fallback state, we do another\n// pass through beginWork to rerender all children (including the tail) with\n// the force suspend context. If the first render didn't have anything in\n// in fallback state. Then we render each row in the tail one-by-one.\n// That happens in the completeWork phase without going back to beginWork.\n\n\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n var nextProps = workInProgress.pendingProps;\n var revealOrder = nextProps.revealOrder;\n var tailMode = nextProps.tail;\n var newChildren = nextProps.children;\n validateRevealOrder(revealOrder);\n validateTailOptions(tailMode, revealOrder);\n validateSuspenseListChildren(newChildren, revealOrder);\n reconcileChildren(current, workInProgress, newChildren, renderLanes);\n var suspenseContext = suspenseStackCursor.current;\n var shouldForceFallback = hasSuspenseContext(suspenseContext, ForceSuspenseFallback);\n\n if (shouldForceFallback) {\n suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n workInProgress.flags |= DidCapture;\n } else {\n var didSuspendBefore = current !== null && (current.flags & DidCapture) !== NoFlags;\n\n if (didSuspendBefore) {\n // If we previously forced a fallback, we need to schedule work\n // on any nested boundaries to let them know to try to render\n // again. This is the same as context updating.\n propagateSuspenseContextChange(workInProgress, workInProgress.child, renderLanes);\n }\n\n suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n }\n\n pushSuspenseContext(workInProgress, suspenseContext);\n\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n // In legacy mode, SuspenseList doesn't work so we just\n // use make it a noop by treating it as the default revealOrder.\n workInProgress.memoizedState = null;\n } else {\n switch (revealOrder) {\n case 'forwards':\n {\n var lastContentRow = findLastContentRow(workInProgress.child);\n var tail;\n\n if (lastContentRow === null) {\n // The whole list is part of the tail.\n // TODO: We could fast path by just rendering the tail now.\n tail = workInProgress.child;\n workInProgress.child = null;\n } else {\n // Disconnect the tail rows after the content row.\n // We're going to render them separately later.\n tail = lastContentRow.sibling;\n lastContentRow.sibling = null;\n }\n\n initSuspenseListRenderState(workInProgress, false, // isBackwards\n tail, lastContentRow, tailMode);\n break;\n }\n\n case 'backwards':\n {\n // We're going to find the first row that has existing content.\n // At the same time we're going to reverse the list of everything\n // we pass in the meantime. That's going to be our tail in reverse\n // order.\n var _tail = null;\n var row = workInProgress.child;\n workInProgress.child = null;\n\n while (row !== null) {\n var currentRow = row.alternate; // New rows can't be content rows.\n\n if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n // This is the beginning of the main content.\n workInProgress.child = row;\n break;\n }\n\n var nextRow = row.sibling;\n row.sibling = _tail;\n _tail = row;\n row = nextRow;\n } // TODO: If workInProgress.child is null, we can continue on the tail immediately.\n\n\n initSuspenseListRenderState(workInProgress, true, // isBackwards\n _tail, null, // last\n tailMode);\n break;\n }\n\n case 'together':\n {\n initSuspenseListRenderState(workInProgress, false, // isBackwards\n null, // tail\n null, // last\n undefined);\n break;\n }\n\n default:\n {\n // The default reveal order is the same as not having\n // a boundary.\n workInProgress.memoizedState = null;\n }\n }\n }\n\n return workInProgress.child;\n}\n\nfunction updatePortalComponent(current, workInProgress, renderLanes) {\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n var nextChildren = workInProgress.pendingProps;\n\n if (current === null) {\n // Portals are special because we don't append the children during mount\n // but at commit. Therefore we need to track insertions which the normal\n // flow doesn't do during mount. This doesn't happen at the root because\n // the root always starts with a \"current\" with a null child.\n // TODO: Consider unifying this with how the root works.\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);\n } else {\n reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n }\n\n return workInProgress.child;\n}\n\nvar hasWarnedAboutUsingNoValuePropOnContextProvider = false;\n\nfunction updateContextProvider(current, workInProgress, renderLanes) {\n var providerType = workInProgress.type;\n var context = providerType._context;\n var newProps = workInProgress.pendingProps;\n var oldProps = workInProgress.memoizedProps;\n var newValue = newProps.value;\n\n {\n if (!('value' in newProps)) {\n if (!hasWarnedAboutUsingNoValuePropOnContextProvider) {\n hasWarnedAboutUsingNoValuePropOnContextProvider = true;\n\n error('The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?');\n }\n }\n\n var providerPropTypes = workInProgress.type.propTypes;\n\n if (providerPropTypes) {\n checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider');\n }\n }\n\n pushProvider(workInProgress, context, newValue);\n\n {\n if (oldProps !== null) {\n var oldValue = oldProps.value;\n\n if (objectIs(oldValue, newValue)) {\n // No change. Bailout early if children are the same.\n if (oldProps.children === newProps.children && !hasContextChanged()) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n }\n } else {\n // The context value changed. Search for matching consumers and schedule\n // them to update.\n propagateContextChange(workInProgress, context, renderLanes);\n }\n }\n }\n\n var newChildren = newProps.children;\n reconcileChildren(current, workInProgress, newChildren, renderLanes);\n return workInProgress.child;\n}\n\nvar hasWarnedAboutUsingContextAsConsumer = false;\n\nfunction updateContextConsumer(current, workInProgress, renderLanes) {\n var context = workInProgress.type; // The logic below for Context differs depending on PROD or DEV mode. In\n // DEV mode, we create a separate object for Context.Consumer that acts\n // like a proxy to Context. This proxy object adds unnecessary code in PROD\n // so we use the old behaviour (Context.Consumer references Context) to\n // reduce size and overhead. The separate object references context via\n // a property called \"_context\", which also gives us the ability to check\n // in DEV mode if this property exists or not and warn if it does not.\n\n {\n if (context._context === undefined) {\n // This may be because it's a Context (rather than a Consumer).\n // Or it may be because it's older React where they're the same thing.\n // We only want to warn if we're sure it's a new React.\n if (context !== context.Consumer) {\n if (!hasWarnedAboutUsingContextAsConsumer) {\n hasWarnedAboutUsingContextAsConsumer = true;\n\n error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n }\n } else {\n context = context._context;\n }\n }\n\n var newProps = workInProgress.pendingProps;\n var render = newProps.children;\n\n {\n if (typeof render !== 'function') {\n error('A context consumer was rendered with multiple children, or a child ' + \"that isn't a function. A context consumer expects a single child \" + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');\n }\n }\n\n prepareToReadContext(workInProgress, renderLanes);\n var newValue = readContext(context);\n\n {\n markComponentRenderStarted(workInProgress);\n }\n\n var newChildren;\n\n {\n ReactCurrentOwner$1.current = workInProgress;\n setIsRendering(true);\n newChildren = render(newValue);\n setIsRendering(false);\n }\n\n {\n markComponentRenderStopped();\n } // React DevTools reads this flag.\n\n\n workInProgress.flags |= PerformedWork;\n reconcileChildren(current, workInProgress, newChildren, renderLanes);\n return workInProgress.child;\n}\n\nfunction markWorkInProgressReceivedUpdate() {\n didReceiveUpdate = true;\n}\n\nfunction resetSuspendedCurrentOnMountInLegacyMode(current, workInProgress) {\n if ((workInProgress.mode & ConcurrentMode) === NoMode) {\n if (current !== null) {\n // A lazy component only mounts if it suspended inside a non-\n // concurrent tree, in an inconsistent state. We want to treat it like\n // a new mount, even though an empty version of it already committed.\n // Disconnect the alternate pointers.\n current.alternate = null;\n workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n workInProgress.flags |= Placement;\n }\n }\n}\n\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n if (current !== null) {\n // Reuse previous dependencies\n workInProgress.dependencies = current.dependencies;\n }\n\n {\n // Don't update \"base\" render times for bailouts.\n stopProfilerTimerIfRunning();\n }\n\n markSkippedUpdateLanes(workInProgress.lanes); // Check if the children have any pending work.\n\n if (!includesSomeLane(renderLanes, workInProgress.childLanes)) {\n // The children don't have any work either. We can skip them.\n // TODO: Once we add back resuming, we should check if the children are\n // a work-in-progress set. If so, we need to transfer their effects.\n {\n return null;\n }\n } // This fiber doesn't have work, but its subtree does. Clone the child\n // fibers and continue.\n\n\n cloneChildFibers(current, workInProgress);\n return workInProgress.child;\n}\n\nfunction remountFiber(current, oldWorkInProgress, newWorkInProgress) {\n {\n var returnFiber = oldWorkInProgress.return;\n\n if (returnFiber === null) {\n // eslint-disable-next-line react-internal/prod-error-codes\n throw new Error('Cannot swap the root fiber.');\n } // Disconnect from the old current.\n // It will get deleted.\n\n\n current.alternate = null;\n oldWorkInProgress.alternate = null; // Connect to the new tree.\n\n newWorkInProgress.index = oldWorkInProgress.index;\n newWorkInProgress.sibling = oldWorkInProgress.sibling;\n newWorkInProgress.return = oldWorkInProgress.return;\n newWorkInProgress.ref = oldWorkInProgress.ref; // Replace the child/sibling pointers above it.\n\n if (oldWorkInProgress === returnFiber.child) {\n returnFiber.child = newWorkInProgress;\n } else {\n var prevSibling = returnFiber.child;\n\n if (prevSibling === null) {\n // eslint-disable-next-line react-internal/prod-error-codes\n throw new Error('Expected parent to have a child.');\n }\n\n while (prevSibling.sibling !== oldWorkInProgress) {\n prevSibling = prevSibling.sibling;\n\n if (prevSibling === null) {\n // eslint-disable-next-line react-internal/prod-error-codes\n throw new Error('Expected to find the previous sibling.');\n }\n }\n\n prevSibling.sibling = newWorkInProgress;\n } // Delete the old fiber and place the new one.\n // Since the old fiber is disconnected, we have to schedule it manually.\n\n\n var deletions = returnFiber.deletions;\n\n if (deletions === null) {\n returnFiber.deletions = [current];\n returnFiber.flags |= ChildDeletion;\n } else {\n deletions.push(current);\n }\n\n newWorkInProgress.flags |= Placement; // Restart work from the new fiber.\n\n return newWorkInProgress;\n }\n}\n\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n // Before performing an early bailout, we must check if there are pending\n // updates or context.\n var updateLanes = current.lanes;\n\n if (includesSomeLane(updateLanes, renderLanes)) {\n return true;\n } // No pending update, but because context is propagated lazily, we need\n\n return false;\n}\n\nfunction attemptEarlyBailoutIfNoScheduledUpdate(current, workInProgress, renderLanes) {\n // This fiber does not have any pending work. Bailout without entering\n // the begin phase. There's still some bookkeeping we that needs to be done\n // in this optimized path, mostly pushing stuff onto the stack.\n switch (workInProgress.tag) {\n case HostRoot:\n pushHostRootContext(workInProgress);\n var root = workInProgress.stateNode;\n\n resetHydrationState();\n break;\n\n case HostComponent:\n pushHostContext(workInProgress);\n break;\n\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n pushContextProvider(workInProgress);\n }\n\n break;\n }\n\n case HostPortal:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n\n case ContextProvider:\n {\n var newValue = workInProgress.memoizedProps.value;\n var context = workInProgress.type._context;\n pushProvider(workInProgress, context, newValue);\n break;\n }\n\n case Profiler:\n {\n // Profiler should only call onRender when one of its descendants actually rendered.\n var hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);\n\n if (hasChildWork) {\n workInProgress.flags |= Update;\n }\n\n {\n // Reset effect durations for the next eventual effect phase.\n // These are reset during render to allow the DevTools commit hook a chance to read them,\n var stateNode = workInProgress.stateNode;\n stateNode.effectDuration = 0;\n stateNode.passiveEffectDuration = 0;\n }\n }\n\n break;\n\n case SuspenseComponent:\n {\n var state = workInProgress.memoizedState;\n\n if (state !== null) {\n if (state.dehydrated !== null) {\n pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // We know that this component will suspend again because if it has\n // been unsuspended it has committed as a resolved Suspense component.\n // If it needs to be retried, it should have work scheduled on it.\n\n workInProgress.flags |= DidCapture; // We should never render the children of a dehydrated boundary until we\n // upgrade it. We return null instead of bailoutOnAlreadyFinishedWork.\n\n return null;\n } // If this boundary is currently timed out, we need to decide\n // whether to retry the primary children, or to skip over it and\n // go straight to the fallback. Check the priority of the primary\n // child fragment.\n\n\n var primaryChildFragment = workInProgress.child;\n var primaryChildLanes = primaryChildFragment.childLanes;\n\n if (includesSomeLane(renderLanes, primaryChildLanes)) {\n // The primary children have pending work. Use the normal path\n // to attempt to render the primary children again.\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n } else {\n // The primary child fragment does not have pending work marked\n // on it\n pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // The primary children do not have pending work with sufficient\n // priority. Bailout.\n\n var child = bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n\n if (child !== null) {\n // The fallback children have pending work. Skip over the\n // primary children and work on the fallback.\n return child.sibling;\n } else {\n // Note: We can return `null` here because we already checked\n // whether there were nested context consumers, via the call to\n // `bailoutOnAlreadyFinishedWork` above.\n return null;\n }\n }\n } else {\n pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current));\n }\n\n break;\n }\n\n case SuspenseListComponent:\n {\n var didSuspendBefore = (current.flags & DidCapture) !== NoFlags;\n\n var _hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);\n\n if (didSuspendBefore) {\n if (_hasChildWork) {\n // If something was in fallback state last time, and we have all the\n // same children then we're still in progressive loading state.\n // Something might get unblocked by state updates or retries in the\n // tree which will affect the tail. So we need to use the normal\n // path to compute the correct tail.\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n } // If none of the children had any work, that means that none of\n // them got retried so they'll still be blocked in the same way\n // as before. We can fast bail out.\n\n\n workInProgress.flags |= DidCapture;\n } // If nothing suspended before and we're rendering the same children,\n // then the tail doesn't matter. Anything new that suspends will work\n // in the \"together\" mode, so we can continue from the state we had.\n\n\n var renderState = workInProgress.memoizedState;\n\n if (renderState !== null) {\n // Reset to the \"together\" mode in case we've started a different\n // update in the past but didn't complete it.\n renderState.rendering = null;\n renderState.tail = null;\n renderState.lastEffect = null;\n }\n\n pushSuspenseContext(workInProgress, suspenseStackCursor.current);\n\n if (_hasChildWork) {\n break;\n } else {\n // If none of the children had any work, that means that none of\n // them got retried so they'll still be blocked in the same way\n // as before. We can fast bail out.\n return null;\n }\n }\n\n case OffscreenComponent:\n case LegacyHiddenComponent:\n {\n // Need to check if the tree still needs to be deferred. This is\n // almost identical to the logic used in the normal update path,\n // so we'll just enter that. The only difference is we'll bail out\n // at the next level instead of this one, because the child props\n // have not changed. Which is fine.\n // TODO: Probably should refactor `beginWork` to split the bailout\n // path from the normal path. I'm tempted to do a labeled break here\n // but I won't :)\n workInProgress.lanes = NoLanes;\n return updateOffscreenComponent(current, workInProgress, renderLanes);\n }\n }\n\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\n\nfunction beginWork(current, workInProgress, renderLanes) {\n {\n if (workInProgress._debugNeedsRemount && current !== null) {\n // This will restart the begin phase with a new fiber.\n return remountFiber(current, workInProgress, createFiberFromTypeAndProps(workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.lanes));\n }\n }\n\n if (current !== null) {\n var oldProps = current.memoizedProps;\n var newProps = workInProgress.pendingProps;\n\n if (oldProps !== newProps || hasContextChanged() || ( // Force a re-render if the implementation changed due to hot reload:\n workInProgress.type !== current.type )) {\n // If props or context changed, mark the fiber as having performed work.\n // This may be unset if the props are determined to be equal later (memo).\n didReceiveUpdate = true;\n } else {\n // Neither props nor legacy context changes. Check if there's a pending\n // update or context change.\n var hasScheduledUpdateOrContext = checkScheduledUpdateOrContext(current, renderLanes);\n\n if (!hasScheduledUpdateOrContext && // If this is the second pass of an error or suspense boundary, there\n // may not be work scheduled on `current`, so we check for this flag.\n (workInProgress.flags & DidCapture) === NoFlags) {\n // No pending updates or context. Bail out now.\n didReceiveUpdate = false;\n return attemptEarlyBailoutIfNoScheduledUpdate(current, workInProgress, renderLanes);\n }\n\n if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) {\n // This is a special case that only exists for legacy mode.\n // See https://github.com/facebook/react/pull/19216.\n didReceiveUpdate = true;\n } else {\n // An update was scheduled on this fiber, but there are no new props\n // nor legacy context. Set this to false. If an update queue or context\n // consumer produces a changed value, it will set this to true. Otherwise,\n // the component will assume the children have not changed and bail out.\n didReceiveUpdate = false;\n }\n }\n } else {\n didReceiveUpdate = false;\n\n if (getIsHydrating() && isForkedChild(workInProgress)) {\n // Check if this child belongs to a list of muliple children in\n // its parent.\n //\n // In a true multi-threaded implementation, we would render children on\n // parallel threads. This would represent the beginning of a new render\n // thread for this subtree.\n //\n // We only use this for id generation during hydration, which is why the\n // logic is located in this special branch.\n var slotIndex = workInProgress.index;\n var numberOfForks = getForksAtLevel();\n pushTreeId(workInProgress, numberOfForks, slotIndex);\n }\n } // Before entering the begin phase, clear pending update priority.\n // TODO: This assumes that we're about to evaluate the component and process\n // the update queue. However, there's an exception: SimpleMemoComponent\n // sometimes bails out later in the begin phase. This indicates that we should\n // move this assignment out of the common path and into each branch.\n\n\n workInProgress.lanes = NoLanes;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n {\n return mountIndeterminateComponent(current, workInProgress, workInProgress.type, renderLanes);\n }\n\n case LazyComponent:\n {\n var elementType = workInProgress.elementType;\n return mountLazyComponent(current, workInProgress, elementType, renderLanes);\n }\n\n case FunctionComponent:\n {\n var Component = workInProgress.type;\n var unresolvedProps = workInProgress.pendingProps;\n var resolvedProps = workInProgress.elementType === Component ? unresolvedProps : resolveDefaultProps(Component, unresolvedProps);\n return updateFunctionComponent(current, workInProgress, Component, resolvedProps, renderLanes);\n }\n\n case ClassComponent:\n {\n var _Component = workInProgress.type;\n var _unresolvedProps = workInProgress.pendingProps;\n\n var _resolvedProps = workInProgress.elementType === _Component ? _unresolvedProps : resolveDefaultProps(_Component, _unresolvedProps);\n\n return updateClassComponent(current, workInProgress, _Component, _resolvedProps, renderLanes);\n }\n\n case HostRoot:\n return updateHostRoot(current, workInProgress, renderLanes);\n\n case HostComponent:\n return updateHostComponent(current, workInProgress, renderLanes);\n\n case HostText:\n return updateHostText(current, workInProgress);\n\n case SuspenseComponent:\n return updateSuspenseComponent(current, workInProgress, renderLanes);\n\n case HostPortal:\n return updatePortalComponent(current, workInProgress, renderLanes);\n\n case ForwardRef:\n {\n var type = workInProgress.type;\n var _unresolvedProps2 = workInProgress.pendingProps;\n\n var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2);\n\n return updateForwardRef(current, workInProgress, type, _resolvedProps2, renderLanes);\n }\n\n case Fragment:\n return updateFragment(current, workInProgress, renderLanes);\n\n case Mode:\n return updateMode(current, workInProgress, renderLanes);\n\n case Profiler:\n return updateProfiler(current, workInProgress, renderLanes);\n\n case ContextProvider:\n return updateContextProvider(current, workInProgress, renderLanes);\n\n case ContextConsumer:\n return updateContextConsumer(current, workInProgress, renderLanes);\n\n case MemoComponent:\n {\n var _type2 = workInProgress.type;\n var _unresolvedProps3 = workInProgress.pendingProps; // Resolve outer props first, then resolve inner props.\n\n var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3);\n\n {\n if (workInProgress.type !== workInProgress.elementType) {\n var outerPropTypes = _type2.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only\n 'prop', getComponentNameFromType(_type2));\n }\n }\n }\n\n _resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3);\n return updateMemoComponent(current, workInProgress, _type2, _resolvedProps3, renderLanes);\n }\n\n case SimpleMemoComponent:\n {\n return updateSimpleMemoComponent(current, workInProgress, workInProgress.type, workInProgress.pendingProps, renderLanes);\n }\n\n case IncompleteClassComponent:\n {\n var _Component2 = workInProgress.type;\n var _unresolvedProps4 = workInProgress.pendingProps;\n\n var _resolvedProps4 = workInProgress.elementType === _Component2 ? _unresolvedProps4 : resolveDefaultProps(_Component2, _unresolvedProps4);\n\n return mountIncompleteClassComponent(current, workInProgress, _Component2, _resolvedProps4, renderLanes);\n }\n\n case SuspenseListComponent:\n {\n return updateSuspenseListComponent(current, workInProgress, renderLanes);\n }\n\n case ScopeComponent:\n {\n\n break;\n }\n\n case OffscreenComponent:\n {\n return updateOffscreenComponent(current, workInProgress, renderLanes);\n }\n }\n\n throw new Error(\"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in \" + 'React. Please file an issue.');\n}\n\nfunction markUpdate(workInProgress) {\n // Tag the fiber with an update effect. This turns a Placement into\n // a PlacementAndUpdate.\n workInProgress.flags |= Update;\n}\n\nfunction markRef$1(workInProgress) {\n workInProgress.flags |= Ref;\n\n {\n workInProgress.flags |= RefStatic;\n }\n}\n\nvar appendAllChildren;\nvar updateHostContainer;\nvar updateHostComponent$1;\nvar updateHostText$1;\n\n{\n // Mutation mode\n appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) {\n // We only have the top Fiber that was created but we need recurse down its\n // children to find all the terminal nodes.\n var node = workInProgress.child;\n\n while (node !== null) {\n if (node.tag === HostComponent || node.tag === HostText) {\n appendInitialChild(parent, node.stateNode);\n } else if (node.tag === HostPortal) ; else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === workInProgress) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === workInProgress) {\n return;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n };\n\n updateHostContainer = function (current, workInProgress) {// Noop\n };\n\n updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {\n // If we have an alternate, that means this is an update and we need to\n // schedule a side-effect to do the updates.\n var oldProps = current.memoizedProps;\n\n if (oldProps === newProps) {\n // In mutation mode, this is sufficient for a bailout because\n // we won't touch this node even if children changed.\n return;\n } // If we get updated because one of our children updated, we don't\n // have newProps so we'll have to reuse them.\n // TODO: Split the update API as separate for the props vs. children.\n // Even better would be if children weren't special cased at all tho.\n\n\n var instance = workInProgress.stateNode;\n var currentHostContext = getHostContext(); // TODO: Experiencing an error where oldProps is null. Suggests a host\n // component is hitting the resume path. Figure out why. Possibly\n // related to `hidden`.\n\n var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); // TODO: Type this specific to this type of component.\n\n workInProgress.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n // is a new ref we mark this as an update. All the work is done in commitWork.\n\n if (updatePayload) {\n markUpdate(workInProgress);\n }\n };\n\n updateHostText$1 = function (current, workInProgress, oldText, newText) {\n // If the text differs, mark it as an update. All the work in done in commitWork.\n if (oldText !== newText) {\n markUpdate(workInProgress);\n }\n };\n}\n\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n if (getIsHydrating()) {\n // If we're hydrating, we should consume as many items as we can\n // so we don't leave any behind.\n return;\n }\n\n switch (renderState.tailMode) {\n case 'hidden':\n {\n // Any insertions at the end of the tail list after this point\n // should be invisible. If there are already mounted boundaries\n // anything before them are not considered for collapsing.\n // Therefore we need to go through the whole tail to find if\n // there are any.\n var tailNode = renderState.tail;\n var lastTailNode = null;\n\n while (tailNode !== null) {\n if (tailNode.alternate !== null) {\n lastTailNode = tailNode;\n }\n\n tailNode = tailNode.sibling;\n } // Next we're simply going to delete all insertions after the\n // last rendered item.\n\n\n if (lastTailNode === null) {\n // All remaining items in the tail are insertions.\n renderState.tail = null;\n } else {\n // Detach the insertion after the last node that was already\n // inserted.\n lastTailNode.sibling = null;\n }\n\n break;\n }\n\n case 'collapsed':\n {\n // Any insertions at the end of the tail list after this point\n // should be invisible. If there are already mounted boundaries\n // anything before them are not considered for collapsing.\n // Therefore we need to go through the whole tail to find if\n // there are any.\n var _tailNode = renderState.tail;\n var _lastTailNode = null;\n\n while (_tailNode !== null) {\n if (_tailNode.alternate !== null) {\n _lastTailNode = _tailNode;\n }\n\n _tailNode = _tailNode.sibling;\n } // Next we're simply going to delete all insertions after the\n // last rendered item.\n\n\n if (_lastTailNode === null) {\n // All remaining items in the tail are insertions.\n if (!hasRenderedATailFallback && renderState.tail !== null) {\n // We suspended during the head. We want to show at least one\n // row at the tail. So we'll keep on and cut off the rest.\n renderState.tail.sibling = null;\n } else {\n renderState.tail = null;\n }\n } else {\n // Detach the insertion after the last node that was already\n // inserted.\n _lastTailNode.sibling = null;\n }\n\n break;\n }\n }\n}\n\nfunction bubbleProperties(completedWork) {\n var didBailout = completedWork.alternate !== null && completedWork.alternate.child === completedWork.child;\n var newChildLanes = NoLanes;\n var subtreeFlags = NoFlags;\n\n if (!didBailout) {\n // Bubble up the earliest expiration time.\n if ( (completedWork.mode & ProfileMode) !== NoMode) {\n // In profiling mode, resetChildExpirationTime is also used to reset\n // profiler durations.\n var actualDuration = completedWork.actualDuration;\n var treeBaseDuration = completedWork.selfBaseDuration;\n var child = completedWork.child;\n\n while (child !== null) {\n newChildLanes = mergeLanes(newChildLanes, mergeLanes(child.lanes, child.childLanes));\n subtreeFlags |= child.subtreeFlags;\n subtreeFlags |= child.flags; // When a fiber is cloned, its actualDuration is reset to 0. This value will\n // only be updated if work is done on the fiber (i.e. it doesn't bailout).\n // When work is done, it should bubble to the parent's actualDuration. If\n // the fiber has not been cloned though, (meaning no work was done), then\n // this value will reflect the amount of time spent working on a previous\n // render. In that case it should not bubble. We determine whether it was\n // cloned by comparing the child pointer.\n\n actualDuration += child.actualDuration;\n treeBaseDuration += child.treeBaseDuration;\n child = child.sibling;\n }\n\n completedWork.actualDuration = actualDuration;\n completedWork.treeBaseDuration = treeBaseDuration;\n } else {\n var _child = completedWork.child;\n\n while (_child !== null) {\n newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child.lanes, _child.childLanes));\n subtreeFlags |= _child.subtreeFlags;\n subtreeFlags |= _child.flags; // Update the return pointer so the tree is consistent. This is a code\n // smell because it assumes the commit phase is never concurrent with\n // the render phase. Will address during refactor to alternate model.\n\n _child.return = completedWork;\n _child = _child.sibling;\n }\n }\n\n completedWork.subtreeFlags |= subtreeFlags;\n } else {\n // Bubble up the earliest expiration time.\n if ( (completedWork.mode & ProfileMode) !== NoMode) {\n // In profiling mode, resetChildExpirationTime is also used to reset\n // profiler durations.\n var _treeBaseDuration = completedWork.selfBaseDuration;\n var _child2 = completedWork.child;\n\n while (_child2 !== null) {\n newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child2.lanes, _child2.childLanes)); // \"Static\" flags share the lifetime of the fiber/hook they belong to,\n // so we should bubble those up even during a bailout. All the other\n // flags have a lifetime only of a single render + commit, so we should\n // ignore them.\n\n subtreeFlags |= _child2.subtreeFlags & StaticMask;\n subtreeFlags |= _child2.flags & StaticMask;\n _treeBaseDuration += _child2.treeBaseDuration;\n _child2 = _child2.sibling;\n }\n\n completedWork.treeBaseDuration = _treeBaseDuration;\n } else {\n var _child3 = completedWork.child;\n\n while (_child3 !== null) {\n newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child3.lanes, _child3.childLanes)); // \"Static\" flags share the lifetime of the fiber/hook they belong to,\n // so we should bubble those up even during a bailout. All the other\n // flags have a lifetime only of a single render + commit, so we should\n // ignore them.\n\n subtreeFlags |= _child3.subtreeFlags & StaticMask;\n subtreeFlags |= _child3.flags & StaticMask; // Update the return pointer so the tree is consistent. This is a code\n // smell because it assumes the commit phase is never concurrent with\n // the render phase. Will address during refactor to alternate model.\n\n _child3.return = completedWork;\n _child3 = _child3.sibling;\n }\n }\n\n completedWork.subtreeFlags |= subtreeFlags;\n }\n\n completedWork.childLanes = newChildLanes;\n return didBailout;\n}\n\nfunction completeDehydratedSuspenseBoundary(current, workInProgress, nextState) {\n if (hasUnhydratedTailNodes() && (workInProgress.mode & ConcurrentMode) !== NoMode && (workInProgress.flags & DidCapture) === NoFlags) {\n warnIfUnhydratedTailNodes(workInProgress);\n resetHydrationState();\n workInProgress.flags |= ForceClientRender | Incomplete | ShouldCapture;\n return false;\n }\n\n var wasHydrated = popHydrationState(workInProgress);\n\n if (nextState !== null && nextState.dehydrated !== null) {\n // We might be inside a hydration state the first time we're picking up this\n // Suspense boundary, and also after we've reentered it for further hydration.\n if (current === null) {\n if (!wasHydrated) {\n throw new Error('A dehydrated suspense component was completed without a hydrated node. ' + 'This is probably a bug in React.');\n }\n\n prepareToHydrateHostSuspenseInstance(workInProgress);\n bubbleProperties(workInProgress);\n\n {\n if ((workInProgress.mode & ProfileMode) !== NoMode) {\n var isTimedOutSuspense = nextState !== null;\n\n if (isTimedOutSuspense) {\n // Don't count time spent in a timed out Suspense subtree as part of the base duration.\n var primaryChildFragment = workInProgress.child;\n\n if (primaryChildFragment !== null) {\n // $FlowFixMe Flow doesn't support type casting in combination with the -= operator\n workInProgress.treeBaseDuration -= primaryChildFragment.treeBaseDuration;\n }\n }\n }\n }\n\n return false;\n } else {\n // We might have reentered this boundary to hydrate it. If so, we need to reset the hydration\n // state since we're now exiting out of it. popHydrationState doesn't do that for us.\n resetHydrationState();\n\n if ((workInProgress.flags & DidCapture) === NoFlags) {\n // This boundary did not suspend so it's now hydrated and unsuspended.\n workInProgress.memoizedState = null;\n } // If nothing suspended, we need to schedule an effect to mark this boundary\n // as having hydrated so events know that they're free to be invoked.\n // It's also a signal to replay events and the suspense callback.\n // If something suspended, schedule an effect to attach retry listeners.\n // So we might as well always mark this.\n\n\n workInProgress.flags |= Update;\n bubbleProperties(workInProgress);\n\n {\n if ((workInProgress.mode & ProfileMode) !== NoMode) {\n var _isTimedOutSuspense = nextState !== null;\n\n if (_isTimedOutSuspense) {\n // Don't count time spent in a timed out Suspense subtree as part of the base duration.\n var _primaryChildFragment = workInProgress.child;\n\n if (_primaryChildFragment !== null) {\n // $FlowFixMe Flow doesn't support type casting in combination with the -= operator\n workInProgress.treeBaseDuration -= _primaryChildFragment.treeBaseDuration;\n }\n }\n }\n }\n\n return false;\n }\n } else {\n // Successfully completed this tree. If this was a forced client render,\n // there may have been recoverable errors during first hydration\n // attempt. If so, add them to a queue so we can log them in the\n // commit phase.\n upgradeHydrationErrorsToRecoverable(); // Fall through to normal Suspense path\n\n return true;\n }\n}\n\nfunction completeWork(current, workInProgress, renderLanes) {\n var newProps = workInProgress.pendingProps; // Note: This intentionally doesn't check if we're hydrating because comparing\n // to the current tree provider fiber is just as fast and less error-prone.\n // Ideally we would have a special version of the work loop only\n // for hydration.\n\n popTreeContext(workInProgress);\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n case LazyComponent:\n case SimpleMemoComponent:\n case FunctionComponent:\n case ForwardRef:\n case Fragment:\n case Mode:\n case Profiler:\n case ContextConsumer:\n case MemoComponent:\n bubbleProperties(workInProgress);\n return null;\n\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n popContext(workInProgress);\n }\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n case HostRoot:\n {\n var fiberRoot = workInProgress.stateNode;\n popHostContainer(workInProgress);\n popTopLevelContextObject(workInProgress);\n resetWorkInProgressVersions();\n\n if (fiberRoot.pendingContext) {\n fiberRoot.context = fiberRoot.pendingContext;\n fiberRoot.pendingContext = null;\n }\n\n if (current === null || current.child === null) {\n // If we hydrated, pop so that we can delete any remaining children\n // that weren't hydrated.\n var wasHydrated = popHydrationState(workInProgress);\n\n if (wasHydrated) {\n // If we hydrated, then we'll need to schedule an update for\n // the commit side-effects on the root.\n markUpdate(workInProgress);\n } else {\n if (current !== null) {\n var prevState = current.memoizedState;\n\n if ( // Check if this is a client root\n !prevState.isDehydrated || // Check if we reverted to client rendering (e.g. due to an error)\n (workInProgress.flags & ForceClientRender) !== NoFlags) {\n // Schedule an effect to clear this container at the start of the\n // next commit. This handles the case of React rendering into a\n // container with previous children. It's also safe to do for\n // updates too, because current.child would only be null if the\n // previous render was null (so the container would already\n // be empty).\n workInProgress.flags |= Snapshot; // If this was a forced client render, there may have been\n // recoverable errors during first hydration attempt. If so, add\n // them to a queue so we can log them in the commit phase.\n\n upgradeHydrationErrorsToRecoverable();\n }\n }\n }\n }\n\n updateHostContainer(current, workInProgress);\n bubbleProperties(workInProgress);\n\n return null;\n }\n\n case HostComponent:\n {\n popHostContext(workInProgress);\n var rootContainerInstance = getRootHostContainer();\n var type = workInProgress.type;\n\n if (current !== null && workInProgress.stateNode != null) {\n updateHostComponent$1(current, workInProgress, type, newProps, rootContainerInstance);\n\n if (current.ref !== workInProgress.ref) {\n markRef$1(workInProgress);\n }\n } else {\n if (!newProps) {\n if (workInProgress.stateNode === null) {\n throw new Error('We must have new props for new mounts. This error is likely ' + 'caused by a bug in React. Please file an issue.');\n } // This can happen when we abort work.\n\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n var currentHostContext = getHostContext(); // TODO: Move createInstance to beginWork and keep it on a context\n // \"stack\" as the parent. Then append children as we go in beginWork\n // or completeWork depending on whether we want to add them top->down or\n // bottom->up. Top->down is faster in IE11.\n\n var _wasHydrated = popHydrationState(workInProgress);\n\n if (_wasHydrated) {\n // TODO: Move this and createInstance step into the beginPhase\n // to consolidate.\n if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, currentHostContext)) {\n // If changes to the hydrated node need to be applied at the\n // commit-phase we mark this as such.\n markUpdate(workInProgress);\n }\n } else {\n var instance = createInstance(type, newProps, rootContainerInstance, currentHostContext, workInProgress);\n appendAllChildren(instance, workInProgress, false, false);\n workInProgress.stateNode = instance; // Certain renderers require commit-time effects for initial mount.\n // (eg DOM renderer supports auto-focus for certain elements).\n // Make sure such renderers get scheduled for later work.\n\n if (finalizeInitialChildren(instance, type, newProps, rootContainerInstance)) {\n markUpdate(workInProgress);\n }\n }\n\n if (workInProgress.ref !== null) {\n // If there is a ref on a host node we need to schedule a callback\n markRef$1(workInProgress);\n }\n }\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n case HostText:\n {\n var newText = newProps;\n\n if (current && workInProgress.stateNode != null) {\n var oldText = current.memoizedProps; // If we have an alternate, that means this is an update and we need\n // to schedule a side-effect to do the updates.\n\n updateHostText$1(current, workInProgress, oldText, newText);\n } else {\n if (typeof newText !== 'string') {\n if (workInProgress.stateNode === null) {\n throw new Error('We must have new props for new mounts. This error is likely ' + 'caused by a bug in React. Please file an issue.');\n } // This can happen when we abort work.\n\n }\n\n var _rootContainerInstance = getRootHostContainer();\n\n var _currentHostContext = getHostContext();\n\n var _wasHydrated2 = popHydrationState(workInProgress);\n\n if (_wasHydrated2) {\n if (prepareToHydrateHostTextInstance(workInProgress)) {\n markUpdate(workInProgress);\n }\n } else {\n workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext, workInProgress);\n }\n }\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n case SuspenseComponent:\n {\n popSuspenseContext(workInProgress);\n var nextState = workInProgress.memoizedState; // Special path for dehydrated boundaries. We may eventually move this\n // to its own fiber type so that we can add other kinds of hydration\n // boundaries that aren't associated with a Suspense tree. In anticipation\n // of such a refactor, all the hydration logic is contained in\n // this branch.\n\n if (current === null || current.memoizedState !== null && current.memoizedState.dehydrated !== null) {\n var fallthroughToNormalSuspensePath = completeDehydratedSuspenseBoundary(current, workInProgress, nextState);\n\n if (!fallthroughToNormalSuspensePath) {\n if (workInProgress.flags & ShouldCapture) {\n // Special case. There were remaining unhydrated nodes. We treat\n // this as a mismatch. Revert to client rendering.\n return workInProgress;\n } else {\n // Did not finish hydrating, either because this is the initial\n // render or because something suspended.\n return null;\n }\n } // Continue with the normal Suspense path.\n\n }\n\n if ((workInProgress.flags & DidCapture) !== NoFlags) {\n // Something suspended. Re-render with the fallback children.\n workInProgress.lanes = renderLanes; // Do not reset the effect list.\n\n if ( (workInProgress.mode & ProfileMode) !== NoMode) {\n transferActualDuration(workInProgress);\n } // Don't bubble properties in this case.\n\n\n return workInProgress;\n }\n\n var nextDidTimeout = nextState !== null;\n var prevDidTimeout = current !== null && current.memoizedState !== null;\n // a passive effect, which is when we process the transitions\n\n\n if (nextDidTimeout !== prevDidTimeout) {\n // an effect to toggle the subtree's visibility. When we switch from\n // fallback -> primary, the inner Offscreen fiber schedules this effect\n // as part of its normal complete phase. But when we switch from\n // primary -> fallback, the inner Offscreen fiber does not have a complete\n // phase. So we need to schedule its effect here.\n //\n // We also use this flag to connect/disconnect the effects, but the same\n // logic applies: when re-connecting, the Offscreen fiber's complete\n // phase will handle scheduling the effect. It's only when the fallback\n // is active that we have to do anything special.\n\n\n if (nextDidTimeout) {\n var _offscreenFiber2 = workInProgress.child;\n _offscreenFiber2.flags |= Visibility; // TODO: This will still suspend a synchronous tree if anything\n // in the concurrent tree already suspended during this render.\n // This is a known bug.\n\n if ((workInProgress.mode & ConcurrentMode) !== NoMode) {\n // TODO: Move this back to throwException because this is too late\n // if this is a large tree which is common for initial loads. We\n // don't know if we should restart a render or not until we get\n // this marker, and this is too late.\n // If this render already had a ping or lower pri updates,\n // and this is the first time we know we're going to suspend we\n // should be able to immediately restart from within throwException.\n var hasInvisibleChildContext = current === null && (workInProgress.memoizedProps.unstable_avoidThisFallback !== true || !enableSuspenseAvoidThisFallback);\n\n if (hasInvisibleChildContext || hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext)) {\n // If this was in an invisible tree or a new render, then showing\n // this boundary is ok.\n renderDidSuspend();\n } else {\n // Otherwise, we're going to have to hide content so we should\n // suspend for longer if possible.\n renderDidSuspendDelayIfPossible();\n }\n }\n }\n }\n\n var wakeables = workInProgress.updateQueue;\n\n if (wakeables !== null) {\n // Schedule an effect to attach a retry listener to the promise.\n // TODO: Move to passive phase\n workInProgress.flags |= Update;\n }\n\n bubbleProperties(workInProgress);\n\n {\n if ((workInProgress.mode & ProfileMode) !== NoMode) {\n if (nextDidTimeout) {\n // Don't count time spent in a timed out Suspense subtree as part of the base duration.\n var primaryChildFragment = workInProgress.child;\n\n if (primaryChildFragment !== null) {\n // $FlowFixMe Flow doesn't support type casting in combination with the -= operator\n workInProgress.treeBaseDuration -= primaryChildFragment.treeBaseDuration;\n }\n }\n }\n }\n\n return null;\n }\n\n case HostPortal:\n popHostContainer(workInProgress);\n updateHostContainer(current, workInProgress);\n\n if (current === null) {\n preparePortalMount(workInProgress.stateNode.containerInfo);\n }\n\n bubbleProperties(workInProgress);\n return null;\n\n case ContextProvider:\n // Pop provider fiber\n var context = workInProgress.type._context;\n popProvider(context, workInProgress);\n bubbleProperties(workInProgress);\n return null;\n\n case IncompleteClassComponent:\n {\n // Same as class component case. I put it down here so that the tags are\n // sequential to ensure this switch is compiled to a jump table.\n var _Component = workInProgress.type;\n\n if (isContextProvider(_Component)) {\n popContext(workInProgress);\n }\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n case SuspenseListComponent:\n {\n popSuspenseContext(workInProgress);\n var renderState = workInProgress.memoizedState;\n\n if (renderState === null) {\n // We're running in the default, \"independent\" mode.\n // We don't do anything in this mode.\n bubbleProperties(workInProgress);\n return null;\n }\n\n var didSuspendAlready = (workInProgress.flags & DidCapture) !== NoFlags;\n var renderedTail = renderState.rendering;\n\n if (renderedTail === null) {\n // We just rendered the head.\n if (!didSuspendAlready) {\n // This is the first pass. We need to figure out if anything is still\n // suspended in the rendered set.\n // If new content unsuspended, but there's still some content that\n // didn't. Then we need to do a second pass that forces everything\n // to keep showing their fallbacks.\n // We might be suspended if something in this render pass suspended, or\n // something in the previous committed pass suspended. Otherwise,\n // there's no chance so we can skip the expensive call to\n // findFirstSuspended.\n var cannotBeSuspended = renderHasNotSuspendedYet() && (current === null || (current.flags & DidCapture) === NoFlags);\n\n if (!cannotBeSuspended) {\n var row = workInProgress.child;\n\n while (row !== null) {\n var suspended = findFirstSuspended(row);\n\n if (suspended !== null) {\n didSuspendAlready = true;\n workInProgress.flags |= DidCapture;\n cutOffTailIfNeeded(renderState, false); // If this is a newly suspended tree, it might not get committed as\n // part of the second pass. In that case nothing will subscribe to\n // its thenables. Instead, we'll transfer its thenables to the\n // SuspenseList so that it can retry if they resolve.\n // There might be multiple of these in the list but since we're\n // going to wait for all of them anyway, it doesn't really matter\n // which ones gets to ping. In theory we could get clever and keep\n // track of how many dependencies remain but it gets tricky because\n // in the meantime, we can add/remove/change items and dependencies.\n // We might bail out of the loop before finding any but that\n // doesn't matter since that means that the other boundaries that\n // we did find already has their listeners attached.\n\n var newThenables = suspended.updateQueue;\n\n if (newThenables !== null) {\n workInProgress.updateQueue = newThenables;\n workInProgress.flags |= Update;\n } // Rerender the whole list, but this time, we'll force fallbacks\n // to stay in place.\n // Reset the effect flags before doing the second pass since that's now invalid.\n // Reset the child fibers to their original state.\n\n\n workInProgress.subtreeFlags = NoFlags;\n resetChildFibers(workInProgress, renderLanes); // Set up the Suspense Context to force suspense and immediately\n // rerender the children.\n\n pushSuspenseContext(workInProgress, setShallowSuspenseContext(suspenseStackCursor.current, ForceSuspenseFallback)); // Don't bubble properties in this case.\n\n return workInProgress.child;\n }\n\n row = row.sibling;\n }\n }\n\n if (renderState.tail !== null && now() > getRenderTargetTime()) {\n // We have already passed our CPU deadline but we still have rows\n // left in the tail. We'll just give up further attempts to render\n // the main content and only render fallbacks.\n workInProgress.flags |= DidCapture;\n didSuspendAlready = true;\n cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this\n // to get it started back up to attempt the next item. While in terms\n // of priority this work has the same priority as this current render,\n // it's not part of the same transition once the transition has\n // committed. If it's sync, we still want to yield so that it can be\n // painted. Conceptually, this is really the same as pinging.\n // We can use any RetryLane even if it's the one currently rendering\n // since we're leaving it behind on this node.\n\n workInProgress.lanes = SomeRetryLane;\n }\n } else {\n cutOffTailIfNeeded(renderState, false);\n } // Next we're going to render the tail.\n\n } else {\n // Append the rendered row to the child list.\n if (!didSuspendAlready) {\n var _suspended = findFirstSuspended(renderedTail);\n\n if (_suspended !== null) {\n workInProgress.flags |= DidCapture;\n didSuspendAlready = true; // Ensure we transfer the update queue to the parent so that it doesn't\n // get lost if this row ends up dropped during a second pass.\n\n var _newThenables = _suspended.updateQueue;\n\n if (_newThenables !== null) {\n workInProgress.updateQueue = _newThenables;\n workInProgress.flags |= Update;\n }\n\n cutOffTailIfNeeded(renderState, true); // This might have been modified.\n\n if (renderState.tail === null && renderState.tailMode === 'hidden' && !renderedTail.alternate && !getIsHydrating() // We don't cut it if we're hydrating.\n ) {\n // We're done.\n bubbleProperties(workInProgress);\n return null;\n }\n } else if ( // The time it took to render last row is greater than the remaining\n // time we have to render. So rendering one more row would likely\n // exceed it.\n now() * 2 - renderState.renderingStartTime > getRenderTargetTime() && renderLanes !== OffscreenLane) {\n // We have now passed our CPU deadline and we'll just give up further\n // attempts to render the main content and only render fallbacks.\n // The assumption is that this is usually faster.\n workInProgress.flags |= DidCapture;\n didSuspendAlready = true;\n cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this\n // to get it started back up to attempt the next item. While in terms\n // of priority this work has the same priority as this current render,\n // it's not part of the same transition once the transition has\n // committed. If it's sync, we still want to yield so that it can be\n // painted. Conceptually, this is really the same as pinging.\n // We can use any RetryLane even if it's the one currently rendering\n // since we're leaving it behind on this node.\n\n workInProgress.lanes = SomeRetryLane;\n }\n }\n\n if (renderState.isBackwards) {\n // The effect list of the backwards tail will have been added\n // to the end. This breaks the guarantee that life-cycles fire in\n // sibling order but that isn't a strong guarantee promised by React.\n // Especially since these might also just pop in during future commits.\n // Append to the beginning of the list.\n renderedTail.sibling = workInProgress.child;\n workInProgress.child = renderedTail;\n } else {\n var previousSibling = renderState.last;\n\n if (previousSibling !== null) {\n previousSibling.sibling = renderedTail;\n } else {\n workInProgress.child = renderedTail;\n }\n\n renderState.last = renderedTail;\n }\n }\n\n if (renderState.tail !== null) {\n // We still have tail rows to render.\n // Pop a row.\n var next = renderState.tail;\n renderState.rendering = next;\n renderState.tail = next.sibling;\n renderState.renderingStartTime = now();\n next.sibling = null; // Restore the context.\n // TODO: We can probably just avoid popping it instead and only\n // setting it the first time we go from not suspended to suspended.\n\n var suspenseContext = suspenseStackCursor.current;\n\n if (didSuspendAlready) {\n suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n } else {\n suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n }\n\n pushSuspenseContext(workInProgress, suspenseContext); // Do a pass over the next row.\n // Don't bubble properties in this case.\n\n return next;\n }\n\n bubbleProperties(workInProgress);\n return null;\n }\n\n case ScopeComponent:\n {\n\n break;\n }\n\n case OffscreenComponent:\n case LegacyHiddenComponent:\n {\n popRenderLanes(workInProgress);\n var _nextState = workInProgress.memoizedState;\n var nextIsHidden = _nextState !== null;\n\n if (current !== null) {\n var _prevState = current.memoizedState;\n var prevIsHidden = _prevState !== null;\n\n if (prevIsHidden !== nextIsHidden && ( // LegacyHidden doesn't do any hiding — it only pre-renders.\n !enableLegacyHidden )) {\n workInProgress.flags |= Visibility;\n }\n }\n\n if (!nextIsHidden || (workInProgress.mode & ConcurrentMode) === NoMode) {\n bubbleProperties(workInProgress);\n } else {\n // Don't bubble properties for hidden children unless we're rendering\n // at offscreen priority.\n if (includesSomeLane(subtreeRenderLanes, OffscreenLane)) {\n bubbleProperties(workInProgress);\n\n {\n // Check if there was an insertion or update in the hidden subtree.\n // If so, we need to hide those nodes in the commit phase, so\n // schedule a visibility effect.\n if ( workInProgress.subtreeFlags & (Placement | Update)) {\n workInProgress.flags |= Visibility;\n }\n }\n }\n }\n return null;\n }\n\n case CacheComponent:\n {\n\n return null;\n }\n\n case TracingMarkerComponent:\n {\n\n return null;\n }\n }\n\n throw new Error(\"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in \" + 'React. Please file an issue.');\n}\n\nfunction unwindWork(current, workInProgress, renderLanes) {\n // Note: This intentionally doesn't check if we're hydrating because comparing\n // to the current tree provider fiber is just as fast and less error-prone.\n // Ideally we would have a special version of the work loop only\n // for hydration.\n popTreeContext(workInProgress);\n\n switch (workInProgress.tag) {\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n popContext(workInProgress);\n }\n\n var flags = workInProgress.flags;\n\n if (flags & ShouldCapture) {\n workInProgress.flags = flags & ~ShouldCapture | DidCapture;\n\n if ( (workInProgress.mode & ProfileMode) !== NoMode) {\n transferActualDuration(workInProgress);\n }\n\n return workInProgress;\n }\n\n return null;\n }\n\n case HostRoot:\n {\n var root = workInProgress.stateNode;\n popHostContainer(workInProgress);\n popTopLevelContextObject(workInProgress);\n resetWorkInProgressVersions();\n var _flags = workInProgress.flags;\n\n if ((_flags & ShouldCapture) !== NoFlags && (_flags & DidCapture) === NoFlags) {\n // There was an error during render that wasn't captured by a suspense\n // boundary. Do a second pass on the root to unmount the children.\n workInProgress.flags = _flags & ~ShouldCapture | DidCapture;\n return workInProgress;\n } // We unwound to the root without completing it. Exit.\n\n\n return null;\n }\n\n case HostComponent:\n {\n // TODO: popHydrationState\n popHostContext(workInProgress);\n return null;\n }\n\n case SuspenseComponent:\n {\n popSuspenseContext(workInProgress);\n var suspenseState = workInProgress.memoizedState;\n\n if (suspenseState !== null && suspenseState.dehydrated !== null) {\n if (workInProgress.alternate === null) {\n throw new Error('Threw in newly mounted dehydrated component. This is likely a bug in ' + 'React. Please file an issue.');\n }\n\n resetHydrationState();\n }\n\n var _flags2 = workInProgress.flags;\n\n if (_flags2 & ShouldCapture) {\n workInProgress.flags = _flags2 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary.\n\n if ( (workInProgress.mode & ProfileMode) !== NoMode) {\n transferActualDuration(workInProgress);\n }\n\n return workInProgress;\n }\n\n return null;\n }\n\n case SuspenseListComponent:\n {\n popSuspenseContext(workInProgress); // SuspenseList doesn't actually catch anything. It should've been\n // caught by a nested boundary. If not, it should bubble through.\n\n return null;\n }\n\n case HostPortal:\n popHostContainer(workInProgress);\n return null;\n\n case ContextProvider:\n var context = workInProgress.type._context;\n popProvider(context, workInProgress);\n return null;\n\n case OffscreenComponent:\n case LegacyHiddenComponent:\n popRenderLanes(workInProgress);\n return null;\n\n case CacheComponent:\n\n return null;\n\n default:\n return null;\n }\n}\n\nfunction unwindInterruptedWork(current, interruptedWork, renderLanes) {\n // Note: This intentionally doesn't check if we're hydrating because comparing\n // to the current tree provider fiber is just as fast and less error-prone.\n // Ideally we would have a special version of the work loop only\n // for hydration.\n popTreeContext(interruptedWork);\n\n switch (interruptedWork.tag) {\n case ClassComponent:\n {\n var childContextTypes = interruptedWork.type.childContextTypes;\n\n if (childContextTypes !== null && childContextTypes !== undefined) {\n popContext(interruptedWork);\n }\n\n break;\n }\n\n case HostRoot:\n {\n var root = interruptedWork.stateNode;\n popHostContainer(interruptedWork);\n popTopLevelContextObject(interruptedWork);\n resetWorkInProgressVersions();\n break;\n }\n\n case HostComponent:\n {\n popHostContext(interruptedWork);\n break;\n }\n\n case HostPortal:\n popHostContainer(interruptedWork);\n break;\n\n case SuspenseComponent:\n popSuspenseContext(interruptedWork);\n break;\n\n case SuspenseListComponent:\n popSuspenseContext(interruptedWork);\n break;\n\n case ContextProvider:\n var context = interruptedWork.type._context;\n popProvider(context, interruptedWork);\n break;\n\n case OffscreenComponent:\n case LegacyHiddenComponent:\n popRenderLanes(interruptedWork);\n break;\n }\n}\n\nvar didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n\n{\n didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n} // Used during the commit phase to track the state of the Offscreen component stack.\n// Allows us to avoid traversing the return path to find the nearest Offscreen ancestor.\n// Only used when enableSuspenseLayoutEffectSemantics is enabled.\n\n\nvar offscreenSubtreeIsHidden = false;\nvar offscreenSubtreeWasHidden = false;\nvar PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;\nvar nextEffect = null; // Used for Profiling builds to track updaters.\n\nvar inProgressLanes = null;\nvar inProgressRoot = null;\nfunction reportUncaughtErrorInDEV(error) {\n // Wrapping each small part of the commit phase into a guarded\n // callback is a bit too slow (https://github.com/facebook/react/pull/21666).\n // But we rely on it to surface errors to DEV tools like overlays\n // (https://github.com/facebook/react/issues/21712).\n // As a compromise, rethrow only caught errors in a guard.\n {\n invokeGuardedCallback(null, function () {\n throw error;\n });\n clearCaughtError();\n }\n}\n\nvar callComponentWillUnmountWithTimer = function (current, instance) {\n instance.props = current.memoizedProps;\n instance.state = current.memoizedState;\n\n if ( current.mode & ProfileMode) {\n try {\n startLayoutEffectTimer();\n instance.componentWillUnmount();\n } finally {\n recordLayoutEffectDuration(current);\n }\n } else {\n instance.componentWillUnmount();\n }\n}; // Capture errors so they don't interrupt mounting.\n\n\nfunction safelyCallCommitHookLayoutEffectListMount(current, nearestMountedAncestor) {\n try {\n commitHookEffectListMount(Layout, current);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n} // Capture errors so they don't interrupt unmounting.\n\n\nfunction safelyCallComponentWillUnmount(current, nearestMountedAncestor, instance) {\n try {\n callComponentWillUnmountWithTimer(current, instance);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n} // Capture errors so they don't interrupt mounting.\n\n\nfunction safelyCallComponentDidMount(current, nearestMountedAncestor, instance) {\n try {\n instance.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n} // Capture errors so they don't interrupt mounting.\n\n\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n try {\n commitAttachRef(current);\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\n\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n var ref = current.ref;\n\n if (ref !== null) {\n if (typeof ref === 'function') {\n var retVal;\n\n try {\n if (enableProfilerTimer && enableProfilerCommitHooks && current.mode & ProfileMode) {\n try {\n startLayoutEffectTimer();\n retVal = ref(null);\n } finally {\n recordLayoutEffectDuration(current);\n }\n } else {\n retVal = ref(null);\n }\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n\n {\n if (typeof retVal === 'function') {\n error('Unexpected return value from a callback ref in %s. ' + 'A callback ref should not return a function.', getComponentNameFromFiber(current));\n }\n }\n } else {\n ref.current = null;\n }\n }\n}\n\nfunction safelyCallDestroy(current, nearestMountedAncestor, destroy) {\n try {\n destroy();\n } catch (error) {\n captureCommitPhaseError(current, nearestMountedAncestor, error);\n }\n}\n\nvar focusedInstanceHandle = null;\nvar shouldFireAfterActiveInstanceBlur = false;\nfunction commitBeforeMutationEffects(root, firstChild) {\n focusedInstanceHandle = prepareForCommit(root.containerInfo);\n nextEffect = firstChild;\n commitBeforeMutationEffects_begin(); // We no longer need to track the active instance fiber\n\n var shouldFire = shouldFireAfterActiveInstanceBlur;\n shouldFireAfterActiveInstanceBlur = false;\n focusedInstanceHandle = null;\n return shouldFire;\n}\n\nfunction commitBeforeMutationEffects_begin() {\n while (nextEffect !== null) {\n var fiber = nextEffect; // This phase is only used for beforeActiveInstanceBlur.\n\n var child = fiber.child;\n\n if ((fiber.subtreeFlags & BeforeMutationMask) !== NoFlags && child !== null) {\n child.return = fiber;\n nextEffect = child;\n } else {\n commitBeforeMutationEffects_complete();\n }\n }\n}\n\nfunction commitBeforeMutationEffects_complete() {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n setCurrentFiber(fiber);\n\n try {\n commitBeforeMutationEffectsOnFiber(fiber);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n resetCurrentFiber();\n var sibling = fiber.sibling;\n\n if (sibling !== null) {\n sibling.return = fiber.return;\n nextEffect = sibling;\n return;\n }\n\n nextEffect = fiber.return;\n }\n}\n\nfunction commitBeforeMutationEffectsOnFiber(finishedWork) {\n var current = finishedWork.alternate;\n var flags = finishedWork.flags;\n\n if ((flags & Snapshot) !== NoFlags) {\n setCurrentFiber(finishedWork);\n\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n break;\n }\n\n case ClassComponent:\n {\n if (current !== null) {\n var prevProps = current.memoizedProps;\n var prevState = current.memoizedState;\n var instance = finishedWork.stateNode; // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n }\n }\n\n var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState);\n\n {\n var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate;\n\n if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) {\n didWarnSet.add(finishedWork.type);\n\n error('%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentNameFromFiber(finishedWork));\n }\n }\n\n instance.__reactInternalSnapshotBeforeUpdate = snapshot;\n }\n\n break;\n }\n\n case HostRoot:\n {\n {\n var root = finishedWork.stateNode;\n clearContainer(root.containerInfo);\n }\n\n break;\n }\n\n case HostComponent:\n case HostText:\n case HostPortal:\n case IncompleteClassComponent:\n // Nothing to do for these component types\n break;\n\n default:\n {\n throw new Error('This unit of work tag should not have side-effects. This error is ' + 'likely caused by a bug in React. Please file an issue.');\n }\n }\n\n resetCurrentFiber();\n }\n}\n\nfunction commitHookEffectListUnmount(flags, finishedWork, nearestMountedAncestor) {\n var updateQueue = finishedWork.updateQueue;\n var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n\n do {\n if ((effect.tag & flags) === flags) {\n // Unmount\n var destroy = effect.destroy;\n effect.destroy = undefined;\n\n if (destroy !== undefined) {\n {\n if ((flags & Passive$1) !== NoFlags$1) {\n markComponentPassiveEffectUnmountStarted(finishedWork);\n } else if ((flags & Layout) !== NoFlags$1) {\n markComponentLayoutEffectUnmountStarted(finishedWork);\n }\n }\n\n {\n if ((flags & Insertion) !== NoFlags$1) {\n setIsRunningInsertionEffect(true);\n }\n }\n\n safelyCallDestroy(finishedWork, nearestMountedAncestor, destroy);\n\n {\n if ((flags & Insertion) !== NoFlags$1) {\n setIsRunningInsertionEffect(false);\n }\n }\n\n {\n if ((flags & Passive$1) !== NoFlags$1) {\n markComponentPassiveEffectUnmountStopped();\n } else if ((flags & Layout) !== NoFlags$1) {\n markComponentLayoutEffectUnmountStopped();\n }\n }\n }\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n}\n\nfunction commitHookEffectListMount(flags, finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n\n do {\n if ((effect.tag & flags) === flags) {\n {\n if ((flags & Passive$1) !== NoFlags$1) {\n markComponentPassiveEffectMountStarted(finishedWork);\n } else if ((flags & Layout) !== NoFlags$1) {\n markComponentLayoutEffectMountStarted(finishedWork);\n }\n } // Mount\n\n\n var create = effect.create;\n\n {\n if ((flags & Insertion) !== NoFlags$1) {\n setIsRunningInsertionEffect(true);\n }\n }\n\n effect.destroy = create();\n\n {\n if ((flags & Insertion) !== NoFlags$1) {\n setIsRunningInsertionEffect(false);\n }\n }\n\n {\n if ((flags & Passive$1) !== NoFlags$1) {\n markComponentPassiveEffectMountStopped();\n } else if ((flags & Layout) !== NoFlags$1) {\n markComponentLayoutEffectMountStopped();\n }\n }\n\n {\n var destroy = effect.destroy;\n\n if (destroy !== undefined && typeof destroy !== 'function') {\n var hookName = void 0;\n\n if ((effect.tag & Layout) !== NoFlags) {\n hookName = 'useLayoutEffect';\n } else if ((effect.tag & Insertion) !== NoFlags) {\n hookName = 'useInsertionEffect';\n } else {\n hookName = 'useEffect';\n }\n\n var addendum = void 0;\n\n if (destroy === null) {\n addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).';\n } else if (typeof destroy.then === 'function') {\n addendum = '\\n\\nIt looks like you wrote ' + hookName + '(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\\n\\n' + hookName + '(() => {\\n' + ' async function fetchData() {\\n' + ' // You can await here\\n' + ' const response = await MyAPI.getData(someId);\\n' + ' // ...\\n' + ' }\\n' + ' fetchData();\\n' + \"}, [someId]); // Or [] if effect doesn't need props or state\\n\\n\" + 'Learn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching';\n } else {\n addendum = ' You returned: ' + destroy;\n }\n\n error('%s must not return anything besides a function, ' + 'which is used for clean-up.%s', hookName, addendum);\n }\n }\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n}\n\nfunction commitPassiveEffectDurations(finishedRoot, finishedWork) {\n {\n // Only Profilers with work in their subtree will have an Update effect scheduled.\n if ((finishedWork.flags & Update) !== NoFlags) {\n switch (finishedWork.tag) {\n case Profiler:\n {\n var passiveEffectDuration = finishedWork.stateNode.passiveEffectDuration;\n var _finishedWork$memoize = finishedWork.memoizedProps,\n id = _finishedWork$memoize.id,\n onPostCommit = _finishedWork$memoize.onPostCommit; // This value will still reflect the previous commit phase.\n // It does not get reset until the start of the next commit phase.\n\n var commitTime = getCommitTime();\n var phase = finishedWork.alternate === null ? 'mount' : 'update';\n\n {\n if (isCurrentUpdateNested()) {\n phase = 'nested-update';\n }\n }\n\n if (typeof onPostCommit === 'function') {\n onPostCommit(id, phase, passiveEffectDuration, commitTime);\n } // Bubble times to the next nearest ancestor Profiler.\n // After we process that Profiler, we'll bubble further up.\n\n\n var parentFiber = finishedWork.return;\n\n outer: while (parentFiber !== null) {\n switch (parentFiber.tag) {\n case HostRoot:\n var root = parentFiber.stateNode;\n root.passiveEffectDuration += passiveEffectDuration;\n break outer;\n\n case Profiler:\n var parentStateNode = parentFiber.stateNode;\n parentStateNode.passiveEffectDuration += passiveEffectDuration;\n break outer;\n }\n\n parentFiber = parentFiber.return;\n }\n\n break;\n }\n }\n }\n }\n}\n\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork, committedLanes) {\n if ((finishedWork.flags & LayoutMask) !== NoFlags) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n if ( !offscreenSubtreeWasHidden) {\n // At this point layout effects have already been destroyed (during mutation phase).\n // This is done to prevent sibling component effects from interfering with each other,\n // e.g. a destroy function in one component should never override a ref set\n // by a create function in another component during the same commit.\n if ( finishedWork.mode & ProfileMode) {\n try {\n startLayoutEffectTimer();\n commitHookEffectListMount(Layout | HasEffect, finishedWork);\n } finally {\n recordLayoutEffectDuration(finishedWork);\n }\n } else {\n commitHookEffectListMount(Layout | HasEffect, finishedWork);\n }\n }\n\n break;\n }\n\n case ClassComponent:\n {\n var instance = finishedWork.stateNode;\n\n if (finishedWork.flags & Update) {\n if (!offscreenSubtreeWasHidden) {\n if (current === null) {\n // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n }\n }\n\n if ( finishedWork.mode & ProfileMode) {\n try {\n startLayoutEffectTimer();\n instance.componentDidMount();\n } finally {\n recordLayoutEffectDuration(finishedWork);\n }\n } else {\n instance.componentDidMount();\n }\n } else {\n var prevProps = finishedWork.elementType === finishedWork.type ? current.memoizedProps : resolveDefaultProps(finishedWork.type, current.memoizedProps);\n var prevState = current.memoizedState; // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n }\n }\n\n if ( finishedWork.mode & ProfileMode) {\n try {\n startLayoutEffectTimer();\n instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);\n } finally {\n recordLayoutEffectDuration(finishedWork);\n }\n } else {\n instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);\n }\n }\n }\n } // TODO: I think this is now always non-null by the time it reaches the\n // commit phase. Consider removing the type check.\n\n\n var updateQueue = finishedWork.updateQueue;\n\n if (updateQueue !== null) {\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');\n }\n }\n } // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n\n commitUpdateQueue(finishedWork, updateQueue, instance);\n }\n\n break;\n }\n\n case HostRoot:\n {\n // TODO: I think this is now always non-null by the time it reaches the\n // commit phase. Consider removing the type check.\n var _updateQueue = finishedWork.updateQueue;\n\n if (_updateQueue !== null) {\n var _instance = null;\n\n if (finishedWork.child !== null) {\n switch (finishedWork.child.tag) {\n case HostComponent:\n _instance = getPublicInstance(finishedWork.child.stateNode);\n break;\n\n case ClassComponent:\n _instance = finishedWork.child.stateNode;\n break;\n }\n }\n\n commitUpdateQueue(finishedWork, _updateQueue, _instance);\n }\n\n break;\n }\n\n case HostComponent:\n {\n var _instance2 = finishedWork.stateNode; // Renderers may schedule work to be done after host components are mounted\n // (eg DOM renderer may schedule auto-focus for inputs and form controls).\n // These effects should only be committed when components are first mounted,\n // aka when there is no current/alternate.\n\n if (current === null && finishedWork.flags & Update) {\n var type = finishedWork.type;\n var props = finishedWork.memoizedProps;\n commitMount(_instance2, type, props);\n }\n\n break;\n }\n\n case HostText:\n {\n // We have no life-cycles associated with text.\n break;\n }\n\n case HostPortal:\n {\n // We have no life-cycles associated with portals.\n break;\n }\n\n case Profiler:\n {\n {\n var _finishedWork$memoize2 = finishedWork.memoizedProps,\n onCommit = _finishedWork$memoize2.onCommit,\n onRender = _finishedWork$memoize2.onRender;\n var effectDuration = finishedWork.stateNode.effectDuration;\n var commitTime = getCommitTime();\n var phase = current === null ? 'mount' : 'update';\n\n {\n if (isCurrentUpdateNested()) {\n phase = 'nested-update';\n }\n }\n\n if (typeof onRender === 'function') {\n onRender(finishedWork.memoizedProps.id, phase, finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, commitTime);\n }\n\n {\n if (typeof onCommit === 'function') {\n onCommit(finishedWork.memoizedProps.id, phase, effectDuration, commitTime);\n } // Schedule a passive effect for this Profiler to call onPostCommit hooks.\n // This effect should be scheduled even if there is no onPostCommit callback for this Profiler,\n // because the effect is also where times bubble to parent Profilers.\n\n\n enqueuePendingPassiveProfilerEffect(finishedWork); // Propagate layout effect durations to the next nearest Profiler ancestor.\n // Do not reset these values until the next render so DevTools has a chance to read them first.\n\n var parentFiber = finishedWork.return;\n\n outer: while (parentFiber !== null) {\n switch (parentFiber.tag) {\n case HostRoot:\n var root = parentFiber.stateNode;\n root.effectDuration += effectDuration;\n break outer;\n\n case Profiler:\n var parentStateNode = parentFiber.stateNode;\n parentStateNode.effectDuration += effectDuration;\n break outer;\n }\n\n parentFiber = parentFiber.return;\n }\n }\n }\n\n break;\n }\n\n case SuspenseComponent:\n {\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n break;\n }\n\n case SuspenseListComponent:\n case IncompleteClassComponent:\n case ScopeComponent:\n case OffscreenComponent:\n case LegacyHiddenComponent:\n case TracingMarkerComponent:\n {\n break;\n }\n\n default:\n throw new Error('This unit of work tag should not have side-effects. This error is ' + 'likely caused by a bug in React. Please file an issue.');\n }\n }\n\n if ( !offscreenSubtreeWasHidden) {\n {\n if (finishedWork.flags & Ref) {\n commitAttachRef(finishedWork);\n }\n }\n }\n}\n\nfunction reappearLayoutEffectsOnFiber(node) {\n // Turn on layout effects in a tree that previously disappeared.\n // TODO (Offscreen) Check: flags & LayoutStatic\n switch (node.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n if ( node.mode & ProfileMode) {\n try {\n startLayoutEffectTimer();\n safelyCallCommitHookLayoutEffectListMount(node, node.return);\n } finally {\n recordLayoutEffectDuration(node);\n }\n } else {\n safelyCallCommitHookLayoutEffectListMount(node, node.return);\n }\n\n break;\n }\n\n case ClassComponent:\n {\n var instance = node.stateNode;\n\n if (typeof instance.componentDidMount === 'function') {\n safelyCallComponentDidMount(node, node.return, instance);\n }\n\n safelyAttachRef(node, node.return);\n break;\n }\n\n case HostComponent:\n {\n safelyAttachRef(node, node.return);\n break;\n }\n }\n}\n\nfunction hideOrUnhideAllChildren(finishedWork, isHidden) {\n // Only hide or unhide the top-most host nodes.\n var hostSubtreeRoot = null;\n\n {\n // We only have the top Fiber that was inserted but we need to recurse down its\n // children to find all the terminal nodes.\n var node = finishedWork;\n\n while (true) {\n if (node.tag === HostComponent) {\n if (hostSubtreeRoot === null) {\n hostSubtreeRoot = node;\n\n try {\n var instance = node.stateNode;\n\n if (isHidden) {\n hideInstance(instance);\n } else {\n unhideInstance(node.stateNode, node.memoizedProps);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n } else if (node.tag === HostText) {\n if (hostSubtreeRoot === null) {\n try {\n var _instance3 = node.stateNode;\n\n if (isHidden) {\n hideTextInstance(_instance3);\n } else {\n unhideTextInstance(_instance3, node.memoizedProps);\n }\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n } else if ((node.tag === OffscreenComponent || node.tag === LegacyHiddenComponent) && node.memoizedState !== null && node !== finishedWork) ; else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === finishedWork) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === finishedWork) {\n return;\n }\n\n if (hostSubtreeRoot === node) {\n hostSubtreeRoot = null;\n }\n\n node = node.return;\n }\n\n if (hostSubtreeRoot === node) {\n hostSubtreeRoot = null;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n}\n\nfunction commitAttachRef(finishedWork) {\n var ref = finishedWork.ref;\n\n if (ref !== null) {\n var instance = finishedWork.stateNode;\n var instanceToUse;\n\n switch (finishedWork.tag) {\n case HostComponent:\n instanceToUse = getPublicInstance(instance);\n break;\n\n default:\n instanceToUse = instance;\n } // Moved outside to ensure DCE works with this flag\n\n if (typeof ref === 'function') {\n var retVal;\n\n if ( finishedWork.mode & ProfileMode) {\n try {\n startLayoutEffectTimer();\n retVal = ref(instanceToUse);\n } finally {\n recordLayoutEffectDuration(finishedWork);\n }\n } else {\n retVal = ref(instanceToUse);\n }\n\n {\n if (typeof retVal === 'function') {\n error('Unexpected return value from a callback ref in %s. ' + 'A callback ref should not return a function.', getComponentNameFromFiber(finishedWork));\n }\n }\n } else {\n {\n if (!ref.hasOwnProperty('current')) {\n error('Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().', getComponentNameFromFiber(finishedWork));\n }\n }\n\n ref.current = instanceToUse;\n }\n }\n}\n\nfunction detachFiberMutation(fiber) {\n // Cut off the return pointer to disconnect it from the tree.\n // This enables us to detect and warn against state updates on an unmounted component.\n // It also prevents events from bubbling from within disconnected components.\n //\n // Ideally, we should also clear the child pointer of the parent alternate to let this\n // get GC:ed but we don't know which for sure which parent is the current\n // one so we'll settle for GC:ing the subtree of this child.\n // This child itself will be GC:ed when the parent updates the next time.\n //\n // Note that we can't clear child or sibling pointers yet.\n // They're needed for passive effects and for findDOMNode.\n // We defer those fields, and all other cleanup, to the passive phase (see detachFiberAfterEffects).\n //\n // Don't reset the alternate yet, either. We need that so we can detach the\n // alternate's fields in the passive phase. Clearing the return pointer is\n // sufficient for findDOMNode semantics.\n var alternate = fiber.alternate;\n\n if (alternate !== null) {\n alternate.return = null;\n }\n\n fiber.return = null;\n}\n\nfunction detachFiberAfterEffects(fiber) {\n var alternate = fiber.alternate;\n\n if (alternate !== null) {\n fiber.alternate = null;\n detachFiberAfterEffects(alternate);\n } // Note: Defensively using negation instead of < in case\n // `deletedTreeCleanUpLevel` is undefined.\n\n\n {\n // Clear cyclical Fiber fields. This level alone is designed to roughly\n // approximate the planned Fiber refactor. In that world, `setState` will be\n // bound to a special \"instance\" object instead of a Fiber. The Instance\n // object will not have any of these fields. It will only be connected to\n // the fiber tree via a single link at the root. So if this level alone is\n // sufficient to fix memory issues, that bodes well for our plans.\n fiber.child = null;\n fiber.deletions = null;\n fiber.sibling = null; // The `stateNode` is cyclical because on host nodes it points to the host\n // tree, which has its own pointers to children, parents, and siblings.\n // The other host nodes also point back to fibers, so we should detach that\n // one, too.\n\n if (fiber.tag === HostComponent) {\n var hostInstance = fiber.stateNode;\n\n if (hostInstance !== null) {\n detachDeletedInstance(hostInstance);\n }\n }\n\n fiber.stateNode = null; // I'm intentionally not clearing the `return` field in this level. We\n // already disconnect the `return` pointer at the root of the deleted\n // subtree (in `detachFiberMutation`). Besides, `return` by itself is not\n // cyclical — it's only cyclical when combined with `child`, `sibling`, and\n // `alternate`. But we'll clear it in the next level anyway, just in case.\n\n {\n fiber._debugOwner = null;\n }\n\n {\n // Theoretically, nothing in here should be necessary, because we already\n // disconnected the fiber from the tree. So even if something leaks this\n // particular fiber, it won't leak anything else\n //\n // The purpose of this branch is to be super aggressive so we can measure\n // if there's any difference in memory impact. If there is, that could\n // indicate a React leak we don't know about.\n fiber.return = null;\n fiber.dependencies = null;\n fiber.memoizedProps = null;\n fiber.memoizedState = null;\n fiber.pendingProps = null;\n fiber.stateNode = null; // TODO: Move to `commitPassiveUnmountInsideDeletedTreeOnFiber` instead.\n\n fiber.updateQueue = null;\n }\n }\n}\n\nfunction getHostParentFiber(fiber) {\n var parent = fiber.return;\n\n while (parent !== null) {\n if (isHostParent(parent)) {\n return parent;\n }\n\n parent = parent.return;\n }\n\n throw new Error('Expected to find a host parent. This error is likely caused by a bug ' + 'in React. Please file an issue.');\n}\n\nfunction isHostParent(fiber) {\n return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal;\n}\n\nfunction getHostSibling(fiber) {\n // We're going to search forward into the tree until we find a sibling host\n // node. Unfortunately, if multiple insertions are done in a row we have to\n // search past them. This leads to exponential search for the next sibling.\n // TODO: Find a more efficient way to do this.\n var node = fiber;\n\n siblings: while (true) {\n // If we didn't find anything, let's try the next sibling.\n while (node.sibling === null) {\n if (node.return === null || isHostParent(node.return)) {\n // If we pop out of the root or hit the parent the fiber we are the\n // last sibling.\n return null;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n\n while (node.tag !== HostComponent && node.tag !== HostText && node.tag !== DehydratedFragment) {\n // If it is not host node and, we might have a host node inside it.\n // Try to search down until we find one.\n if (node.flags & Placement) {\n // If we don't have a child, try the siblings instead.\n continue siblings;\n } // If we don't have a child, try the siblings instead.\n // We also skip portals because they are not part of this host tree.\n\n\n if (node.child === null || node.tag === HostPortal) {\n continue siblings;\n } else {\n node.child.return = node;\n node = node.child;\n }\n } // Check if this host node is stable or about to be placed.\n\n\n if (!(node.flags & Placement)) {\n // Found it!\n return node.stateNode;\n }\n }\n}\n\nfunction commitPlacement(finishedWork) {\n\n\n var parentFiber = getHostParentFiber(finishedWork); // Note: these two variables *must* always be updated together.\n\n switch (parentFiber.tag) {\n case HostComponent:\n {\n var parent = parentFiber.stateNode;\n\n if (parentFiber.flags & ContentReset) {\n // Reset the text content of the parent before doing any insertions\n resetTextContent(parent); // Clear ContentReset from the effect tag\n\n parentFiber.flags &= ~ContentReset;\n }\n\n var before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its\n // children to find all the terminal nodes.\n\n insertOrAppendPlacementNode(finishedWork, before, parent);\n break;\n }\n\n case HostRoot:\n case HostPortal:\n {\n var _parent = parentFiber.stateNode.containerInfo;\n\n var _before = getHostSibling(finishedWork);\n\n insertOrAppendPlacementNodeIntoContainer(finishedWork, _before, _parent);\n break;\n }\n // eslint-disable-next-line-no-fallthrough\n\n default:\n throw new Error('Invalid host parent fiber. This error is likely caused by a bug ' + 'in React. Please file an issue.');\n }\n}\n\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n var isHost = tag === HostComponent || tag === HostText;\n\n if (isHost) {\n var stateNode = node.stateNode;\n\n if (before) {\n insertInContainerBefore(parent, stateNode, before);\n } else {\n appendChildToContainer(parent, stateNode);\n }\n } else if (tag === HostPortal) ; else {\n var child = node.child;\n\n if (child !== null) {\n insertOrAppendPlacementNodeIntoContainer(child, before, parent);\n var sibling = child.sibling;\n\n while (sibling !== null) {\n insertOrAppendPlacementNodeIntoContainer(sibling, before, parent);\n sibling = sibling.sibling;\n }\n }\n }\n}\n\nfunction insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n var isHost = tag === HostComponent || tag === HostText;\n\n if (isHost) {\n var stateNode = node.stateNode;\n\n if (before) {\n insertBefore(parent, stateNode, before);\n } else {\n appendChild(parent, stateNode);\n }\n } else if (tag === HostPortal) ; else {\n var child = node.child;\n\n if (child !== null) {\n insertOrAppendPlacementNode(child, before, parent);\n var sibling = child.sibling;\n\n while (sibling !== null) {\n insertOrAppendPlacementNode(sibling, before, parent);\n sibling = sibling.sibling;\n }\n }\n }\n} // These are tracked on the stack as we recursively traverse a\n// deleted subtree.\n// TODO: Update these during the whole mutation phase, not just during\n// a deletion.\n\n\nvar hostParent = null;\nvar hostParentIsContainer = false;\n\nfunction commitDeletionEffects(root, returnFiber, deletedFiber) {\n {\n // We only have the top Fiber that was deleted but we need to recurse down its\n // children to find all the terminal nodes.\n // Recursively delete all host nodes from the parent, detach refs, clean\n // up mounted layout effects, and call componentWillUnmount.\n // We only need to remove the topmost host child in each branch. But then we\n // still need to keep traversing to unmount effects, refs, and cWU. TODO: We\n // could split this into two separate traversals functions, where the second\n // one doesn't include any removeChild logic. This is maybe the same\n // function as \"disappearLayoutEffects\" (or whatever that turns into after\n // the layout phase is refactored to use recursion).\n // Before starting, find the nearest host parent on the stack so we know\n // which instance/container to remove the children from.\n // TODO: Instead of searching up the fiber return path on every deletion, we\n // can track the nearest host component on the JS stack as we traverse the\n // tree during the commit phase. This would make insertions faster, too.\n var parent = returnFiber;\n\n findParent: while (parent !== null) {\n switch (parent.tag) {\n case HostComponent:\n {\n hostParent = parent.stateNode;\n hostParentIsContainer = false;\n break findParent;\n }\n\n case HostRoot:\n {\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = true;\n break findParent;\n }\n\n case HostPortal:\n {\n hostParent = parent.stateNode.containerInfo;\n hostParentIsContainer = true;\n break findParent;\n }\n }\n\n parent = parent.return;\n }\n\n if (hostParent === null) {\n throw new Error('Expected to find a host parent. This error is likely caused by ' + 'a bug in React. Please file an issue.');\n }\n\n commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);\n hostParent = null;\n hostParentIsContainer = false;\n }\n\n detachFiberMutation(deletedFiber);\n}\n\nfunction recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, parent) {\n // TODO: Use a static flag to skip trees that don't have unmount effects\n var child = parent.child;\n\n while (child !== null) {\n commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, child);\n child = child.sibling;\n }\n}\n\nfunction commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, deletedFiber) {\n onCommitUnmount(deletedFiber); // The cases in this outer switch modify the stack before they traverse\n // into their subtree. There are simpler cases in the inner switch\n // that don't modify the stack.\n\n switch (deletedFiber.tag) {\n case HostComponent:\n {\n if (!offscreenSubtreeWasHidden) {\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n } // Intentional fallthrough to next branch\n\n }\n // eslint-disable-next-line-no-fallthrough\n\n case HostText:\n {\n // We only need to remove the nearest host child. Set the host parent\n // to `null` on the stack to indicate that nested children don't\n // need to be removed.\n {\n var prevHostParent = hostParent;\n var prevHostParentIsContainer = hostParentIsContainer;\n hostParent = null;\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n hostParent = prevHostParent;\n hostParentIsContainer = prevHostParentIsContainer;\n\n if (hostParent !== null) {\n // Now that all the child effects have unmounted, we can remove the\n // node from the tree.\n if (hostParentIsContainer) {\n removeChildFromContainer(hostParent, deletedFiber.stateNode);\n } else {\n removeChild(hostParent, deletedFiber.stateNode);\n }\n }\n }\n\n return;\n }\n\n case DehydratedFragment:\n {\n // Delete the dehydrated suspense boundary and all of its content.\n\n\n {\n if (hostParent !== null) {\n if (hostParentIsContainer) {\n clearSuspenseBoundaryFromContainer(hostParent, deletedFiber.stateNode);\n } else {\n clearSuspenseBoundary(hostParent, deletedFiber.stateNode);\n }\n }\n }\n\n return;\n }\n\n case HostPortal:\n {\n {\n // When we go into a portal, it becomes the parent to remove from.\n var _prevHostParent = hostParent;\n var _prevHostParentIsContainer = hostParentIsContainer;\n hostParent = deletedFiber.stateNode.containerInfo;\n hostParentIsContainer = true;\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n hostParent = _prevHostParent;\n hostParentIsContainer = _prevHostParentIsContainer;\n }\n\n return;\n }\n\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n {\n if (!offscreenSubtreeWasHidden) {\n var updateQueue = deletedFiber.updateQueue;\n\n if (updateQueue !== null) {\n var lastEffect = updateQueue.lastEffect;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n\n do {\n var _effect = effect,\n destroy = _effect.destroy,\n tag = _effect.tag;\n\n if (destroy !== undefined) {\n if ((tag & Insertion) !== NoFlags$1) {\n safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);\n } else if ((tag & Layout) !== NoFlags$1) {\n {\n markComponentLayoutEffectUnmountStarted(deletedFiber);\n }\n\n if ( deletedFiber.mode & ProfileMode) {\n startLayoutEffectTimer();\n safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);\n recordLayoutEffectDuration(deletedFiber);\n } else {\n safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);\n }\n\n {\n markComponentLayoutEffectUnmountStopped();\n }\n }\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n }\n }\n\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n return;\n }\n\n case ClassComponent:\n {\n if (!offscreenSubtreeWasHidden) {\n safelyDetachRef(deletedFiber, nearestMountedAncestor);\n var instance = deletedFiber.stateNode;\n\n if (typeof instance.componentWillUnmount === 'function') {\n safelyCallComponentWillUnmount(deletedFiber, nearestMountedAncestor, instance);\n }\n }\n\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n return;\n }\n\n case ScopeComponent:\n {\n\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n return;\n }\n\n case OffscreenComponent:\n {\n if ( // TODO: Remove this dead flag\n deletedFiber.mode & ConcurrentMode) {\n // If this offscreen component is hidden, we already unmounted it. Before\n // deleting the children, track that it's already unmounted so that we\n // don't attempt to unmount the effects again.\n // TODO: If the tree is hidden, in most cases we should be able to skip\n // over the nested children entirely. An exception is we haven't yet found\n // the topmost host node to delete, which we already track on the stack.\n // But the other case is portals, which need to be detached no matter how\n // deeply they are nested. We should use a subtree flag to track whether a\n // subtree includes a nested portal.\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || deletedFiber.memoizedState !== null;\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n } else {\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n }\n\n break;\n }\n\n default:\n {\n recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);\n return;\n }\n }\n}\n\nfunction commitSuspenseCallback(finishedWork) {\n // TODO: Move this to passive phase\n var newState = finishedWork.memoizedState;\n}\n\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n\n var newState = finishedWork.memoizedState;\n\n if (newState === null) {\n var current = finishedWork.alternate;\n\n if (current !== null) {\n var prevState = current.memoizedState;\n\n if (prevState !== null) {\n var suspenseInstance = prevState.dehydrated;\n\n if (suspenseInstance !== null) {\n commitHydratedSuspenseInstance(suspenseInstance);\n }\n }\n }\n }\n}\n\nfunction attachSuspenseRetryListeners(finishedWork) {\n // If this boundary just timed out, then it will have a set of wakeables.\n // For each wakeable, attach a listener so that when it resolves, React\n // attempts to re-render the boundary in the primary (pre-timeout) state.\n var wakeables = finishedWork.updateQueue;\n\n if (wakeables !== null) {\n finishedWork.updateQueue = null;\n var retryCache = finishedWork.stateNode;\n\n if (retryCache === null) {\n retryCache = finishedWork.stateNode = new PossiblyWeakSet();\n }\n\n wakeables.forEach(function (wakeable) {\n // Memoize using the boundary fiber to prevent redundant listeners.\n var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n\n if (!retryCache.has(wakeable)) {\n retryCache.add(wakeable);\n\n {\n if (isDevToolsPresent) {\n if (inProgressLanes !== null && inProgressRoot !== null) {\n // If we have pending work still, associate the original updaters with it.\n restorePendingUpdaters(inProgressRoot, inProgressLanes);\n } else {\n throw Error('Expected finished root and lanes to be set. This is a bug in React.');\n }\n }\n }\n\n wakeable.then(retry, retry);\n }\n });\n }\n} // This function detects when a Suspense boundary goes from visible to hidden.\nfunction commitMutationEffects(root, finishedWork, committedLanes) {\n inProgressLanes = committedLanes;\n inProgressRoot = root;\n setCurrentFiber(finishedWork);\n commitMutationEffectsOnFiber(finishedWork, root);\n setCurrentFiber(finishedWork);\n inProgressLanes = null;\n inProgressRoot = null;\n}\n\nfunction recursivelyTraverseMutationEffects(root, parentFiber, lanes) {\n // Deletions effects can be scheduled on any fiber type. They need to happen\n // before the children effects hae fired.\n var deletions = parentFiber.deletions;\n\n if (deletions !== null) {\n for (var i = 0; i < deletions.length; i++) {\n var childToDelete = deletions[i];\n\n try {\n commitDeletionEffects(root, parentFiber, childToDelete);\n } catch (error) {\n captureCommitPhaseError(childToDelete, parentFiber, error);\n }\n }\n }\n\n var prevDebugFiber = getCurrentFiber();\n\n if (parentFiber.subtreeFlags & MutationMask) {\n var child = parentFiber.child;\n\n while (child !== null) {\n setCurrentFiber(child);\n commitMutationEffectsOnFiber(child, root);\n child = child.sibling;\n }\n }\n\n setCurrentFiber(prevDebugFiber);\n}\n\nfunction commitMutationEffectsOnFiber(finishedWork, root, lanes) {\n var current = finishedWork.alternate;\n var flags = finishedWork.flags; // The effect flag should be checked *after* we refine the type of fiber,\n // because the fiber tag is more specific. An exception is any flag related\n // to reconcilation, because those can be set on all fiber types.\n\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Update) {\n try {\n commitHookEffectListUnmount(Insertion | HasEffect, finishedWork, finishedWork.return);\n commitHookEffectListMount(Insertion | HasEffect, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n } // Layout effects are destroyed during the mutation phase so that all\n // destroy functions for all fibers are called before any create functions.\n // This prevents sibling component effects from interfering with each other,\n // e.g. a destroy function in one component should never override a ref set\n // by a create function in another component during the same commit.\n\n\n if ( finishedWork.mode & ProfileMode) {\n try {\n startLayoutEffectTimer();\n commitHookEffectListUnmount(Layout | HasEffect, finishedWork, finishedWork.return);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n\n recordLayoutEffectDuration(finishedWork);\n } else {\n try {\n commitHookEffectListUnmount(Layout | HasEffect, finishedWork, finishedWork.return);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n\n return;\n }\n\n case ClassComponent:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Ref) {\n if (current !== null) {\n safelyDetachRef(current, current.return);\n }\n }\n\n return;\n }\n\n case HostComponent:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Ref) {\n if (current !== null) {\n safelyDetachRef(current, current.return);\n }\n }\n\n {\n // TODO: ContentReset gets cleared by the children during the commit\n // phase. This is a refactor hazard because it means we must read\n // flags the flags after `commitReconciliationEffects` has already run;\n // the order matters. We should refactor so that ContentReset does not\n // rely on mutating the flag during commit. Like by setting a flag\n // during the render phase instead.\n if (finishedWork.flags & ContentReset) {\n var instance = finishedWork.stateNode;\n\n try {\n resetTextContent(instance);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n\n if (flags & Update) {\n var _instance4 = finishedWork.stateNode;\n\n if (_instance4 != null) {\n // Commit the work prepared earlier.\n var newProps = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n\n var oldProps = current !== null ? current.memoizedProps : newProps;\n var type = finishedWork.type; // TODO: Type the updateQueue to be specific to host components.\n\n var updatePayload = finishedWork.updateQueue;\n finishedWork.updateQueue = null;\n\n if (updatePayload !== null) {\n try {\n commitUpdate(_instance4, updatePayload, type, oldProps, newProps, finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n }\n }\n\n return;\n }\n\n case HostText:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Update) {\n {\n if (finishedWork.stateNode === null) {\n throw new Error('This should have a text node initialized. This error is likely ' + 'caused by a bug in React. Please file an issue.');\n }\n\n var textInstance = finishedWork.stateNode;\n var newText = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n\n var oldText = current !== null ? current.memoizedProps : newText;\n\n try {\n commitTextUpdate(textInstance, oldText, newText);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n\n return;\n }\n\n case HostRoot:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Update) {\n {\n if (current !== null) {\n var prevRootState = current.memoizedState;\n\n if (prevRootState.isDehydrated) {\n try {\n commitHydratedContainer(root.containerInfo);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n }\n }\n }\n }\n\n return;\n }\n\n case HostPortal:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n return;\n }\n\n case SuspenseComponent:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n var offscreenFiber = finishedWork.child;\n\n if (offscreenFiber.flags & Visibility) {\n var offscreenInstance = offscreenFiber.stateNode;\n var newState = offscreenFiber.memoizedState;\n var isHidden = newState !== null; // Track the current state on the Offscreen instance so we can\n // read it during an event\n\n offscreenInstance.isHidden = isHidden;\n\n if (isHidden) {\n var wasHidden = offscreenFiber.alternate !== null && offscreenFiber.alternate.memoizedState !== null;\n\n if (!wasHidden) {\n // TODO: Move to passive phase\n markCommitTimeOfFallback();\n }\n }\n }\n\n if (flags & Update) {\n try {\n commitSuspenseCallback(finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n }\n\n attachSuspenseRetryListeners(finishedWork);\n }\n\n return;\n }\n\n case OffscreenComponent:\n {\n var _wasHidden = current !== null && current.memoizedState !== null;\n\n if ( // TODO: Remove this dead flag\n finishedWork.mode & ConcurrentMode) {\n // Before committing the children, track on the stack whether this\n // offscreen subtree was already hidden, so that we don't unmount the\n // effects again.\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || _wasHidden;\n recursivelyTraverseMutationEffects(root, finishedWork);\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n } else {\n recursivelyTraverseMutationEffects(root, finishedWork);\n }\n\n commitReconciliationEffects(finishedWork);\n\n if (flags & Visibility) {\n var _offscreenInstance = finishedWork.stateNode;\n var _newState = finishedWork.memoizedState;\n\n var _isHidden = _newState !== null;\n\n var offscreenBoundary = finishedWork; // Track the current state on the Offscreen instance so we can\n // read it during an event\n\n _offscreenInstance.isHidden = _isHidden;\n\n {\n if (_isHidden) {\n if (!_wasHidden) {\n if ((offscreenBoundary.mode & ConcurrentMode) !== NoMode) {\n nextEffect = offscreenBoundary;\n var offscreenChild = offscreenBoundary.child;\n\n while (offscreenChild !== null) {\n nextEffect = offscreenChild;\n disappearLayoutEffects_begin(offscreenChild);\n offscreenChild = offscreenChild.sibling;\n }\n }\n }\n }\n }\n\n {\n // TODO: This needs to run whenever there's an insertion or update\n // inside a hidden Offscreen tree.\n hideOrUnhideAllChildren(offscreenBoundary, _isHidden);\n }\n }\n\n return;\n }\n\n case SuspenseListComponent:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n\n if (flags & Update) {\n attachSuspenseRetryListeners(finishedWork);\n }\n\n return;\n }\n\n case ScopeComponent:\n {\n\n return;\n }\n\n default:\n {\n recursivelyTraverseMutationEffects(root, finishedWork);\n commitReconciliationEffects(finishedWork);\n return;\n }\n }\n}\n\nfunction commitReconciliationEffects(finishedWork) {\n // Placement effects (insertions, reorders) can be scheduled on any fiber\n // type. They needs to happen after the children effects have fired, but\n // before the effects on this fiber have fired.\n var flags = finishedWork.flags;\n\n if (flags & Placement) {\n try {\n commitPlacement(finishedWork);\n } catch (error) {\n captureCommitPhaseError(finishedWork, finishedWork.return, error);\n } // Clear the \"placement\" from effect tag so that we know that this is\n // inserted, before any life-cycles like componentDidMount gets called.\n // TODO: findDOMNode doesn't rely on this any more but isMounted does\n // and isMounted is deprecated anyway so we should be able to kill this.\n\n\n finishedWork.flags &= ~Placement;\n }\n\n if (flags & Hydrating) {\n finishedWork.flags &= ~Hydrating;\n }\n}\n\nfunction commitLayoutEffects(finishedWork, root, committedLanes) {\n inProgressLanes = committedLanes;\n inProgressRoot = root;\n nextEffect = finishedWork;\n commitLayoutEffects_begin(finishedWork, root, committedLanes);\n inProgressLanes = null;\n inProgressRoot = null;\n}\n\nfunction commitLayoutEffects_begin(subtreeRoot, root, committedLanes) {\n // Suspense layout effects semantics don't change for legacy roots.\n var isModernRoot = (subtreeRoot.mode & ConcurrentMode) !== NoMode;\n\n while (nextEffect !== null) {\n var fiber = nextEffect;\n var firstChild = fiber.child;\n\n if ( fiber.tag === OffscreenComponent && isModernRoot) {\n // Keep track of the current Offscreen stack's state.\n var isHidden = fiber.memoizedState !== null;\n var newOffscreenSubtreeIsHidden = isHidden || offscreenSubtreeIsHidden;\n\n if (newOffscreenSubtreeIsHidden) {\n // The Offscreen tree is hidden. Skip over its layout effects.\n commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);\n continue;\n } else {\n // TODO (Offscreen) Also check: subtreeFlags & LayoutMask\n var current = fiber.alternate;\n var wasHidden = current !== null && current.memoizedState !== null;\n var newOffscreenSubtreeWasHidden = wasHidden || offscreenSubtreeWasHidden;\n var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden;\n var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; // Traverse the Offscreen subtree with the current Offscreen as the root.\n\n offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden;\n offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden;\n\n if (offscreenSubtreeWasHidden && !prevOffscreenSubtreeWasHidden) {\n // This is the root of a reappearing boundary. Turn its layout effects\n // back on.\n nextEffect = fiber;\n reappearLayoutEffects_begin(fiber);\n }\n\n var child = firstChild;\n\n while (child !== null) {\n nextEffect = child;\n commitLayoutEffects_begin(child, // New root; bubble back up to here and stop.\n root, committedLanes);\n child = child.sibling;\n } // Restore Offscreen state and resume in our-progress traversal.\n\n\n nextEffect = fiber;\n offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);\n continue;\n }\n }\n\n if ((fiber.subtreeFlags & LayoutMask) !== NoFlags && firstChild !== null) {\n firstChild.return = fiber;\n nextEffect = firstChild;\n } else {\n commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);\n }\n }\n}\n\nfunction commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes) {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n\n if ((fiber.flags & LayoutMask) !== NoFlags) {\n var current = fiber.alternate;\n setCurrentFiber(fiber);\n\n try {\n commitLayoutEffectOnFiber(root, current, fiber, committedLanes);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n resetCurrentFiber();\n }\n\n if (fiber === subtreeRoot) {\n nextEffect = null;\n return;\n }\n\n var sibling = fiber.sibling;\n\n if (sibling !== null) {\n sibling.return = fiber.return;\n nextEffect = sibling;\n return;\n }\n\n nextEffect = fiber.return;\n }\n}\n\nfunction disappearLayoutEffects_begin(subtreeRoot) {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n var firstChild = fiber.child; // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic)\n\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n {\n if ( fiber.mode & ProfileMode) {\n try {\n startLayoutEffectTimer();\n commitHookEffectListUnmount(Layout, fiber, fiber.return);\n } finally {\n recordLayoutEffectDuration(fiber);\n }\n } else {\n commitHookEffectListUnmount(Layout, fiber, fiber.return);\n }\n\n break;\n }\n\n case ClassComponent:\n {\n // TODO (Offscreen) Check: flags & RefStatic\n safelyDetachRef(fiber, fiber.return);\n var instance = fiber.stateNode;\n\n if (typeof instance.componentWillUnmount === 'function') {\n safelyCallComponentWillUnmount(fiber, fiber.return, instance);\n }\n\n break;\n }\n\n case HostComponent:\n {\n safelyDetachRef(fiber, fiber.return);\n break;\n }\n\n case OffscreenComponent:\n {\n // Check if this is a\n var isHidden = fiber.memoizedState !== null;\n\n if (isHidden) {\n // Nested Offscreen tree is already hidden. Don't disappear\n // its effects.\n disappearLayoutEffects_complete(subtreeRoot);\n continue;\n }\n\n break;\n }\n } // TODO (Offscreen) Check: subtreeFlags & LayoutStatic\n\n\n if (firstChild !== null) {\n firstChild.return = fiber;\n nextEffect = firstChild;\n } else {\n disappearLayoutEffects_complete(subtreeRoot);\n }\n }\n}\n\nfunction disappearLayoutEffects_complete(subtreeRoot) {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n\n if (fiber === subtreeRoot) {\n nextEffect = null;\n return;\n }\n\n var sibling = fiber.sibling;\n\n if (sibling !== null) {\n sibling.return = fiber.return;\n nextEffect = sibling;\n return;\n }\n\n nextEffect = fiber.return;\n }\n}\n\nfunction reappearLayoutEffects_begin(subtreeRoot) {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n var firstChild = fiber.child;\n\n if (fiber.tag === OffscreenComponent) {\n var isHidden = fiber.memoizedState !== null;\n\n if (isHidden) {\n // Nested Offscreen tree is still hidden. Don't re-appear its effects.\n reappearLayoutEffects_complete(subtreeRoot);\n continue;\n }\n } // TODO (Offscreen) Check: subtreeFlags & LayoutStatic\n\n\n if (firstChild !== null) {\n // This node may have been reused from a previous render, so we can't\n // assume its return pointer is correct.\n firstChild.return = fiber;\n nextEffect = firstChild;\n } else {\n reappearLayoutEffects_complete(subtreeRoot);\n }\n }\n}\n\nfunction reappearLayoutEffects_complete(subtreeRoot) {\n while (nextEffect !== null) {\n var fiber = nextEffect; // TODO (Offscreen) Check: flags & LayoutStatic\n\n setCurrentFiber(fiber);\n\n try {\n reappearLayoutEffectsOnFiber(fiber);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n resetCurrentFiber();\n\n if (fiber === subtreeRoot) {\n nextEffect = null;\n return;\n }\n\n var sibling = fiber.sibling;\n\n if (sibling !== null) {\n // This node may have been reused from a previous render, so we can't\n // assume its return pointer is correct.\n sibling.return = fiber.return;\n nextEffect = sibling;\n return;\n }\n\n nextEffect = fiber.return;\n }\n}\n\nfunction commitPassiveMountEffects(root, finishedWork, committedLanes, committedTransitions) {\n nextEffect = finishedWork;\n commitPassiveMountEffects_begin(finishedWork, root, committedLanes, committedTransitions);\n}\n\nfunction commitPassiveMountEffects_begin(subtreeRoot, root, committedLanes, committedTransitions) {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n var firstChild = fiber.child;\n\n if ((fiber.subtreeFlags & PassiveMask) !== NoFlags && firstChild !== null) {\n firstChild.return = fiber;\n nextEffect = firstChild;\n } else {\n commitPassiveMountEffects_complete(subtreeRoot, root, committedLanes, committedTransitions);\n }\n }\n}\n\nfunction commitPassiveMountEffects_complete(subtreeRoot, root, committedLanes, committedTransitions) {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n\n if ((fiber.flags & Passive) !== NoFlags) {\n setCurrentFiber(fiber);\n\n try {\n commitPassiveMountOnFiber(root, fiber, committedLanes, committedTransitions);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n resetCurrentFiber();\n }\n\n if (fiber === subtreeRoot) {\n nextEffect = null;\n return;\n }\n\n var sibling = fiber.sibling;\n\n if (sibling !== null) {\n sibling.return = fiber.return;\n nextEffect = sibling;\n return;\n }\n\n nextEffect = fiber.return;\n }\n}\n\nfunction commitPassiveMountOnFiber(finishedRoot, finishedWork, committedLanes, committedTransitions) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n if ( finishedWork.mode & ProfileMode) {\n startPassiveEffectTimer();\n\n try {\n commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);\n } finally {\n recordPassiveEffectDuration(finishedWork);\n }\n } else {\n commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);\n }\n\n break;\n }\n }\n}\n\nfunction commitPassiveUnmountEffects(firstChild) {\n nextEffect = firstChild;\n commitPassiveUnmountEffects_begin();\n}\n\nfunction commitPassiveUnmountEffects_begin() {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n var child = fiber.child;\n\n if ((nextEffect.flags & ChildDeletion) !== NoFlags) {\n var deletions = fiber.deletions;\n\n if (deletions !== null) {\n for (var i = 0; i < deletions.length; i++) {\n var fiberToDelete = deletions[i];\n nextEffect = fiberToDelete;\n commitPassiveUnmountEffectsInsideOfDeletedTree_begin(fiberToDelete, fiber);\n }\n\n {\n // A fiber was deleted from this parent fiber, but it's still part of\n // the previous (alternate) parent fiber's list of children. Because\n // children are a linked list, an earlier sibling that's still alive\n // will be connected to the deleted fiber via its `alternate`:\n //\n // live fiber\n // --alternate--> previous live fiber\n // --sibling--> deleted fiber\n //\n // We can't disconnect `alternate` on nodes that haven't been deleted\n // yet, but we can disconnect the `sibling` and `child` pointers.\n var previousFiber = fiber.alternate;\n\n if (previousFiber !== null) {\n var detachedChild = previousFiber.child;\n\n if (detachedChild !== null) {\n previousFiber.child = null;\n\n do {\n var detachedSibling = detachedChild.sibling;\n detachedChild.sibling = null;\n detachedChild = detachedSibling;\n } while (detachedChild !== null);\n }\n }\n }\n\n nextEffect = fiber;\n }\n }\n\n if ((fiber.subtreeFlags & PassiveMask) !== NoFlags && child !== null) {\n child.return = fiber;\n nextEffect = child;\n } else {\n commitPassiveUnmountEffects_complete();\n }\n }\n}\n\nfunction commitPassiveUnmountEffects_complete() {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n\n if ((fiber.flags & Passive) !== NoFlags) {\n setCurrentFiber(fiber);\n commitPassiveUnmountOnFiber(fiber);\n resetCurrentFiber();\n }\n\n var sibling = fiber.sibling;\n\n if (sibling !== null) {\n sibling.return = fiber.return;\n nextEffect = sibling;\n return;\n }\n\n nextEffect = fiber.return;\n }\n}\n\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n if ( finishedWork.mode & ProfileMode) {\n startPassiveEffectTimer();\n commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork, finishedWork.return);\n recordPassiveEffectDuration(finishedWork);\n } else {\n commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork, finishedWork.return);\n }\n\n break;\n }\n }\n}\n\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(deletedSubtreeRoot, nearestMountedAncestor) {\n while (nextEffect !== null) {\n var fiber = nextEffect; // Deletion effects fire in parent -> child order\n // TODO: Check if fiber has a PassiveStatic flag\n\n setCurrentFiber(fiber);\n commitPassiveUnmountInsideDeletedTreeOnFiber(fiber, nearestMountedAncestor);\n resetCurrentFiber();\n var child = fiber.child; // TODO: Only traverse subtree if it has a PassiveStatic flag. (But, if we\n // do this, still need to handle `deletedTreeCleanUpLevel` correctly.)\n\n if (child !== null) {\n child.return = fiber;\n nextEffect = child;\n } else {\n commitPassiveUnmountEffectsInsideOfDeletedTree_complete(deletedSubtreeRoot);\n }\n }\n}\n\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_complete(deletedSubtreeRoot) {\n while (nextEffect !== null) {\n var fiber = nextEffect;\n var sibling = fiber.sibling;\n var returnFiber = fiber.return;\n\n {\n // Recursively traverse the entire deleted tree and clean up fiber fields.\n // This is more aggressive than ideal, and the long term goal is to only\n // have to detach the deleted tree at the root.\n detachFiberAfterEffects(fiber);\n\n if (fiber === deletedSubtreeRoot) {\n nextEffect = null;\n return;\n }\n }\n\n if (sibling !== null) {\n sibling.return = returnFiber;\n nextEffect = sibling;\n return;\n }\n\n nextEffect = returnFiber;\n }\n}\n\nfunction commitPassiveUnmountInsideDeletedTreeOnFiber(current, nearestMountedAncestor) {\n switch (current.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n if ( current.mode & ProfileMode) {\n startPassiveEffectTimer();\n commitHookEffectListUnmount(Passive$1, current, nearestMountedAncestor);\n recordPassiveEffectDuration(current);\n } else {\n commitHookEffectListUnmount(Passive$1, current, nearestMountedAncestor);\n }\n\n break;\n }\n }\n} // TODO: Reuse reappearLayoutEffects traversal here?\n\n\nfunction invokeLayoutEffectMountInDEV(fiber) {\n {\n // We don't need to re-check StrictEffectsMode here.\n // This function is only called if that check has already passed.\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n try {\n commitHookEffectListMount(Layout | HasEffect, fiber);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n break;\n }\n\n case ClassComponent:\n {\n var instance = fiber.stateNode;\n\n try {\n instance.componentDidMount();\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n break;\n }\n }\n }\n}\n\nfunction invokePassiveEffectMountInDEV(fiber) {\n {\n // We don't need to re-check StrictEffectsMode here.\n // This function is only called if that check has already passed.\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n try {\n commitHookEffectListMount(Passive$1 | HasEffect, fiber);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n break;\n }\n }\n }\n}\n\nfunction invokeLayoutEffectUnmountInDEV(fiber) {\n {\n // We don't need to re-check StrictEffectsMode here.\n // This function is only called if that check has already passed.\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n try {\n commitHookEffectListUnmount(Layout | HasEffect, fiber, fiber.return);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n\n break;\n }\n\n case ClassComponent:\n {\n var instance = fiber.stateNode;\n\n if (typeof instance.componentWillUnmount === 'function') {\n safelyCallComponentWillUnmount(fiber, fiber.return, instance);\n }\n\n break;\n }\n }\n }\n}\n\nfunction invokePassiveEffectUnmountInDEV(fiber) {\n {\n // We don't need to re-check StrictEffectsMode here.\n // This function is only called if that check has already passed.\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n try {\n commitHookEffectListUnmount(Passive$1 | HasEffect, fiber, fiber.return);\n } catch (error) {\n captureCommitPhaseError(fiber, fiber.return, error);\n }\n }\n }\n }\n}\n\nvar COMPONENT_TYPE = 0;\nvar HAS_PSEUDO_CLASS_TYPE = 1;\nvar ROLE_TYPE = 2;\nvar TEST_NAME_TYPE = 3;\nvar TEXT_TYPE = 4;\n\nif (typeof Symbol === 'function' && Symbol.for) {\n var symbolFor = Symbol.for;\n COMPONENT_TYPE = symbolFor('selector.component');\n HAS_PSEUDO_CLASS_TYPE = symbolFor('selector.has_pseudo_class');\n ROLE_TYPE = symbolFor('selector.role');\n TEST_NAME_TYPE = symbolFor('selector.test_id');\n TEXT_TYPE = symbolFor('selector.text');\n}\nvar commitHooks = [];\nfunction onCommitRoot$1() {\n {\n commitHooks.forEach(function (commitHook) {\n return commitHook();\n });\n }\n}\n\nvar ReactCurrentActQueue = ReactSharedInternals.ReactCurrentActQueue;\nfunction isLegacyActEnvironment(fiber) {\n {\n // Legacy mode. We preserve the behavior of React 17's act. It assumes an\n // act environment whenever `jest` is defined, but you can still turn off\n // spurious warnings by setting IS_REACT_ACT_ENVIRONMENT explicitly\n // to false.\n var isReactActEnvironmentGlobal = // $FlowExpectedError – Flow doesn't know about IS_REACT_ACT_ENVIRONMENT global\n typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined' ? IS_REACT_ACT_ENVIRONMENT : undefined; // $FlowExpectedError - Flow doesn't know about jest\n\n var jestIsDefined = typeof jest !== 'undefined';\n return jestIsDefined && isReactActEnvironmentGlobal !== false;\n }\n}\nfunction isConcurrentActEnvironment() {\n {\n var isReactActEnvironmentGlobal = // $FlowExpectedError – Flow doesn't know about IS_REACT_ACT_ENVIRONMENT global\n typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined' ? IS_REACT_ACT_ENVIRONMENT : undefined;\n\n if (!isReactActEnvironmentGlobal && ReactCurrentActQueue.current !== null) {\n // TODO: Include link to relevant documentation page.\n error('The current testing environment is not configured to support ' + 'act(...)');\n }\n\n return isReactActEnvironmentGlobal;\n }\n}\n\nvar ceil = Math.ceil;\nvar ReactCurrentDispatcher$2 = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner,\n ReactCurrentBatchConfig$3 = ReactSharedInternals.ReactCurrentBatchConfig,\n ReactCurrentActQueue$1 = ReactSharedInternals.ReactCurrentActQueue;\nvar NoContext =\n/* */\n0;\nvar BatchedContext =\n/* */\n1;\nvar RenderContext =\n/* */\n2;\nvar CommitContext =\n/* */\n4;\nvar RootInProgress = 0;\nvar RootFatalErrored = 1;\nvar RootErrored = 2;\nvar RootSuspended = 3;\nvar RootSuspendedWithDelay = 4;\nvar RootCompleted = 5;\nvar RootDidNotComplete = 6; // Describes where we are in the React execution stack\n\nvar executionContext = NoContext; // The root we're working on\n\nvar workInProgressRoot = null; // The fiber we're working on\n\nvar workInProgress = null; // The lanes we're rendering\n\nvar workInProgressRootRenderLanes = NoLanes; // Stack that allows components to change the render lanes for its subtree\n// This is a superset of the lanes we started working on at the root. The only\n// case where it's different from `workInProgressRootRenderLanes` is when we\n// enter a subtree that is hidden and needs to be unhidden: Suspense and\n// Offscreen component.\n//\n// Most things in the work loop should deal with workInProgressRootRenderLanes.\n// Most things in begin/complete phases should deal with subtreeRenderLanes.\n\nvar subtreeRenderLanes = NoLanes;\nvar subtreeRenderLanesCursor = createCursor(NoLanes); // Whether to root completed, errored, suspended, etc.\n\nvar workInProgressRootExitStatus = RootInProgress; // A fatal error, if one is thrown\n\nvar workInProgressRootFatalError = null; // \"Included\" lanes refer to lanes that were worked on during this render. It's\n// slightly different than `renderLanes` because `renderLanes` can change as you\n// enter and exit an Offscreen tree. This value is the combination of all render\n// lanes for the entire render phase.\n\nvar workInProgressRootIncludedLanes = NoLanes; // The work left over by components that were visited during this render. Only\n// includes unprocessed updates, not work in bailed out children.\n\nvar workInProgressRootSkippedLanes = NoLanes; // Lanes that were updated (in an interleaved event) during this render.\n\nvar workInProgressRootInterleavedUpdatedLanes = NoLanes; // Lanes that were updated during the render phase (*not* an interleaved event).\n\nvar workInProgressRootPingedLanes = NoLanes; // Errors that are thrown during the render phase.\n\nvar workInProgressRootConcurrentErrors = null; // These are errors that we recovered from without surfacing them to the UI.\n// We will log them once the tree commits.\n\nvar workInProgressRootRecoverableErrors = null; // The most recent time we committed a fallback. This lets us ensure a train\n// model where we don't commit new loading states in too quick succession.\n\nvar globalMostRecentFallbackTime = 0;\nvar FALLBACK_THROTTLE_MS = 500; // The absolute time for when we should start giving up on rendering\n// more and prefer CPU suspense heuristics instead.\n\nvar workInProgressRootRenderTargetTime = Infinity; // How long a render is supposed to take before we start following CPU\n// suspense heuristics and opt out of rendering more content.\n\nvar RENDER_TIMEOUT_MS = 500;\nvar workInProgressTransitions = null;\n\nfunction resetRenderTimer() {\n workInProgressRootRenderTargetTime = now() + RENDER_TIMEOUT_MS;\n}\n\nfunction getRenderTargetTime() {\n return workInProgressRootRenderTargetTime;\n}\nvar hasUncaughtError = false;\nvar firstUncaughtError = null;\nvar legacyErrorBoundariesThatAlreadyFailed = null; // Only used when enableProfilerNestedUpdateScheduledHook is true;\nvar rootDoesHavePassiveEffects = false;\nvar rootWithPendingPassiveEffects = null;\nvar pendingPassiveEffectsLanes = NoLanes;\nvar pendingPassiveProfilerEffects = [];\nvar pendingPassiveTransitions = null; // Use these to prevent an infinite loop of nested updates\n\nvar NESTED_UPDATE_LIMIT = 50;\nvar nestedUpdateCount = 0;\nvar rootWithNestedUpdates = null;\nvar isFlushingPassiveEffects = false;\nvar didScheduleUpdateDuringPassiveEffects = false;\nvar NESTED_PASSIVE_UPDATE_LIMIT = 50;\nvar nestedPassiveUpdateCount = 0;\nvar rootWithPassiveNestedUpdates = null; // If two updates are scheduled within the same event, we should treat their\n// event times as simultaneous, even if the actual clock time has advanced\n// between the first and second call.\n\nvar currentEventTime = NoTimestamp;\nvar currentEventTransitionLane = NoLanes;\nvar isRunningInsertionEffect = false;\nfunction getWorkInProgressRoot() {\n return workInProgressRoot;\n}\nfunction requestEventTime() {\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n // We're inside React, so it's fine to read the actual time.\n return now();\n } // We're not inside React, so we may be in the middle of a browser event.\n\n\n if (currentEventTime !== NoTimestamp) {\n // Use the same start time for all updates until we enter React again.\n return currentEventTime;\n } // This is the first update since React yielded. Compute a new start time.\n\n\n currentEventTime = now();\n return currentEventTime;\n}\nfunction requestUpdateLane(fiber) {\n // Special cases\n var mode = fiber.mode;\n\n if ((mode & ConcurrentMode) === NoMode) {\n return SyncLane;\n } else if ( (executionContext & RenderContext) !== NoContext && workInProgressRootRenderLanes !== NoLanes) {\n // This is a render phase update. These are not officially supported. The\n // old behavior is to give this the same \"thread\" (lanes) as\n // whatever is currently rendering. So if you call `setState` on a component\n // that happens later in the same render, it will flush. Ideally, we want to\n // remove the special case and treat them as if they came from an\n // interleaved event. Regardless, this pattern is not officially supported.\n // This behavior is only a fallback. The flag only exists until we can roll\n // out the setState warning, since existing code might accidentally rely on\n // the current behavior.\n return pickArbitraryLane(workInProgressRootRenderLanes);\n }\n\n var isTransition = requestCurrentTransition() !== NoTransition;\n\n if (isTransition) {\n if ( ReactCurrentBatchConfig$3.transition !== null) {\n var transition = ReactCurrentBatchConfig$3.transition;\n\n if (!transition._updatedFibers) {\n transition._updatedFibers = new Set();\n }\n\n transition._updatedFibers.add(fiber);\n } // The algorithm for assigning an update to a lane should be stable for all\n // updates at the same priority within the same event. To do this, the\n // inputs to the algorithm must be the same.\n //\n // The trick we use is to cache the first of each of these inputs within an\n // event. Then reset the cached values once we can be sure the event is\n // over. Our heuristic for that is whenever we enter a concurrent work loop.\n\n\n if (currentEventTransitionLane === NoLane) {\n // All transitions within the same event are assigned the same lane.\n currentEventTransitionLane = claimNextTransitionLane();\n }\n\n return currentEventTransitionLane;\n } // Updates originating inside certain React methods, like flushSync, have\n // their priority set by tracking it with a context variable.\n //\n // The opaque type returned by the host config is internally a lane, so we can\n // use that directly.\n // TODO: Move this type conversion to the event priority module.\n\n\n var updateLane = getCurrentUpdatePriority();\n\n if (updateLane !== NoLane) {\n return updateLane;\n } // This update originated outside React. Ask the host environment for an\n // appropriate priority, based on the type of event.\n //\n // The opaque type returned by the host config is internally a lane, so we can\n // use that directly.\n // TODO: Move this type conversion to the event priority module.\n\n\n var eventLane = getCurrentEventPriority();\n return eventLane;\n}\n\nfunction requestRetryLane(fiber) {\n // This is a fork of `requestUpdateLane` designed specifically for Suspense\n // \"retries\" — a special update that attempts to flip a Suspense boundary\n // from its placeholder state to its primary/resolved state.\n // Special cases\n var mode = fiber.mode;\n\n if ((mode & ConcurrentMode) === NoMode) {\n return SyncLane;\n }\n\n return claimNextRetryLane();\n}\n\nfunction scheduleUpdateOnFiber(root, fiber, lane, eventTime) {\n checkForNestedUpdates();\n\n {\n if (isRunningInsertionEffect) {\n error('useInsertionEffect must not schedule updates.');\n }\n }\n\n {\n if (isFlushingPassiveEffects) {\n didScheduleUpdateDuringPassiveEffects = true;\n }\n } // Mark that the root has a pending update.\n\n\n markRootUpdated(root, lane, eventTime);\n\n if ((executionContext & RenderContext) !== NoLanes && root === workInProgressRoot) {\n // This update was dispatched during the render phase. This is a mistake\n // if the update originates from user space (with the exception of local\n // hook updates, which are handled differently and don't reach this\n // function), but there are some internal React features that use this as\n // an implementation detail, like selective hydration.\n warnAboutRenderPhaseUpdatesInDEV(fiber); // Track lanes that were updated during the render phase\n } else {\n // This is a normal update, scheduled from outside the render phase. For\n // example, during an input event.\n {\n if (isDevToolsPresent) {\n addFiberToLanesMap(root, fiber, lane);\n }\n }\n\n warnIfUpdatesNotWrappedWithActDEV(fiber);\n\n if (root === workInProgressRoot) {\n // Received an update to a tree that's in the middle of rendering. Mark\n // that there was an interleaved update work on this root. Unless the\n // `deferRenderPhaseUpdateToNextBatch` flag is off and this is a render\n // phase update. In that case, we don't treat render phase updates as if\n // they were interleaved, for backwards compat reasons.\n if ( (executionContext & RenderContext) === NoContext) {\n workInProgressRootInterleavedUpdatedLanes = mergeLanes(workInProgressRootInterleavedUpdatedLanes, lane);\n }\n\n if (workInProgressRootExitStatus === RootSuspendedWithDelay) {\n // The root already suspended with a delay, which means this render\n // definitely won't finish. Since we have a new update, let's mark it as\n // suspended now, right before marking the incoming update. This has the\n // effect of interrupting the current render and switching to the update.\n // TODO: Make sure this doesn't override pings that happen while we've\n // already started rendering.\n markRootSuspended$1(root, workInProgressRootRenderLanes);\n }\n }\n\n ensureRootIsScheduled(root, eventTime);\n\n if (lane === SyncLane && executionContext === NoContext && (fiber.mode & ConcurrentMode) === NoMode && // Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.\n !( ReactCurrentActQueue$1.isBatchingLegacy)) {\n // Flush the synchronous work now, unless we're already working or inside\n // a batch. This is intentionally inside scheduleUpdateOnFiber instead of\n // scheduleCallbackForFiber to preserve the ability to schedule a callback\n // without immediately flushing it. We only do this for user-initiated\n // updates, to preserve historical behavior of legacy mode.\n resetRenderTimer();\n flushSyncCallbacksOnlyInLegacyMode();\n }\n }\n}\nfunction scheduleInitialHydrationOnRoot(root, lane, eventTime) {\n // This is a special fork of scheduleUpdateOnFiber that is only used to\n // schedule the initial hydration of a root that has just been created. Most\n // of the stuff in scheduleUpdateOnFiber can be skipped.\n //\n // The main reason for this separate path, though, is to distinguish the\n // initial children from subsequent updates. In fully client-rendered roots\n // (createRoot instead of hydrateRoot), all top-level renders are modeled as\n // updates, but hydration roots are special because the initial render must\n // match what was rendered on the server.\n var current = root.current;\n current.lanes = lane;\n markRootUpdated(root, lane, eventTime);\n ensureRootIsScheduled(root, eventTime);\n}\nfunction isUnsafeClassRenderPhaseUpdate(fiber) {\n // Check if this is a render phase update. Only called by class components,\n // which special (deprecated) behavior for UNSAFE_componentWillReceive props.\n return (// TODO: Remove outdated deferRenderPhaseUpdateToNextBatch experiment. We\n // decided not to enable it.\n (executionContext & RenderContext) !== NoContext\n );\n} // Use this function to schedule a task for a root. There's only one task per\n// root; if a task was already scheduled, we'll check to make sure the priority\n// of the existing task is the same as the priority of the next level that the\n// root has work on. This function is called on every update, and right before\n// exiting a task.\n\nfunction ensureRootIsScheduled(root, currentTime) {\n var existingCallbackNode = root.callbackNode; // Check if any lanes are being starved by other work. If so, mark them as\n // expired so we know to work on those next.\n\n markStarvedLanesAsExpired(root, currentTime); // Determine the next lanes to work on, and their priority.\n\n var nextLanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);\n\n if (nextLanes === NoLanes) {\n // Special case: There's nothing to work on.\n if (existingCallbackNode !== null) {\n cancelCallback$1(existingCallbackNode);\n }\n\n root.callbackNode = null;\n root.callbackPriority = NoLane;\n return;\n } // We use the highest priority lane to represent the priority of the callback.\n\n\n var newCallbackPriority = getHighestPriorityLane(nextLanes); // Check if there's an existing task. We may be able to reuse it.\n\n var existingCallbackPriority = root.callbackPriority;\n\n if (existingCallbackPriority === newCallbackPriority && // Special case related to `act`. If the currently scheduled task is a\n // Scheduler task, rather than an `act` task, cancel it and re-scheduled\n // on the `act` queue.\n !( ReactCurrentActQueue$1.current !== null && existingCallbackNode !== fakeActCallbackNode)) {\n {\n // If we're going to re-use an existing task, it needs to exist.\n // Assume that discrete update microtasks are non-cancellable and null.\n // TODO: Temporary until we confirm this warning is not fired.\n if (existingCallbackNode == null && existingCallbackPriority !== SyncLane) {\n error('Expected scheduled callback to exist. This error is likely caused by a bug in React. Please file an issue.');\n }\n } // The priority hasn't changed. We can reuse the existing task. Exit.\n\n\n return;\n }\n\n if (existingCallbackNode != null) {\n // Cancel the existing callback. We'll schedule a new one below.\n cancelCallback$1(existingCallbackNode);\n } // Schedule a new callback.\n\n\n var newCallbackNode;\n\n if (newCallbackPriority === SyncLane) {\n // Special case: Sync React callbacks are scheduled on a special\n // internal queue\n if (root.tag === LegacyRoot) {\n if ( ReactCurrentActQueue$1.isBatchingLegacy !== null) {\n ReactCurrentActQueue$1.didScheduleLegacyUpdate = true;\n }\n\n scheduleLegacySyncCallback(performSyncWorkOnRoot.bind(null, root));\n } else {\n scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));\n }\n\n {\n // Flush the queue in a microtask.\n if ( ReactCurrentActQueue$1.current !== null) {\n // Inside `act`, use our internal `act` queue so that these get flushed\n // at the end of the current scope even when using the sync version\n // of `act`.\n ReactCurrentActQueue$1.current.push(flushSyncCallbacks);\n } else {\n scheduleMicrotask(function () {\n // In Safari, appending an iframe forces microtasks to run.\n // https://github.com/facebook/react/issues/22459\n // We don't support running callbacks in the middle of render\n // or commit so we need to check against that.\n if ((executionContext & (RenderContext | CommitContext)) === NoContext) {\n // Note that this would still prematurely flush the callbacks\n // if this happens outside render or commit phase (e.g. in an event).\n flushSyncCallbacks();\n }\n });\n }\n }\n\n newCallbackNode = null;\n } else {\n var schedulerPriorityLevel;\n\n switch (lanesToEventPriority(nextLanes)) {\n case DiscreteEventPriority:\n schedulerPriorityLevel = ImmediatePriority;\n break;\n\n case ContinuousEventPriority:\n schedulerPriorityLevel = UserBlockingPriority;\n break;\n\n case DefaultEventPriority:\n schedulerPriorityLevel = NormalPriority;\n break;\n\n case IdleEventPriority:\n schedulerPriorityLevel = IdlePriority;\n break;\n\n default:\n schedulerPriorityLevel = NormalPriority;\n break;\n }\n\n newCallbackNode = scheduleCallback$1(schedulerPriorityLevel, performConcurrentWorkOnRoot.bind(null, root));\n }\n\n root.callbackPriority = newCallbackPriority;\n root.callbackNode = newCallbackNode;\n} // This is the entry point for every concurrent task, i.e. anything that\n// goes through Scheduler.\n\n\nfunction performConcurrentWorkOnRoot(root, didTimeout) {\n {\n resetNestedUpdateFlag();\n } // Since we know we're in a React event, we can clear the current\n // event time. The next update will compute a new event time.\n\n\n currentEventTime = NoTimestamp;\n currentEventTransitionLane = NoLanes;\n\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n throw new Error('Should not already be working.');\n } // Flush any pending passive effects before deciding which lanes to work on,\n // in case they schedule additional work.\n\n\n var originalCallbackNode = root.callbackNode;\n var didFlushPassiveEffects = flushPassiveEffects();\n\n if (didFlushPassiveEffects) {\n // Something in the passive effect phase may have canceled the current task.\n // Check if the task node for this root was changed.\n if (root.callbackNode !== originalCallbackNode) {\n // The current task was canceled. Exit. We don't need to call\n // `ensureRootIsScheduled` because the check above implies either that\n // there's a new task, or that there's no remaining work on this root.\n return null;\n }\n } // Determine the next lanes to work on, using the fields stored\n // on the root.\n\n\n var lanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);\n\n if (lanes === NoLanes) {\n // Defensive coding. This is never expected to happen.\n return null;\n } // We disable time-slicing in some cases: if the work has been CPU-bound\n // for too long (\"expired\" work, to prevent starvation), or we're in\n // sync-updates-by-default mode.\n // TODO: We only check `didTimeout` defensively, to account for a Scheduler\n // bug we're still investigating. Once the bug in Scheduler is fixed,\n // we can remove this, since we track expiration ourselves.\n\n\n var shouldTimeSlice = !includesBlockingLane(root, lanes) && !includesExpiredLane(root, lanes) && ( !didTimeout);\n var exitStatus = shouldTimeSlice ? renderRootConcurrent(root, lanes) : renderRootSync(root, lanes);\n\n if (exitStatus !== RootInProgress) {\n if (exitStatus === RootErrored) {\n // If something threw an error, try rendering one more time. We'll\n // render synchronously to block concurrent data mutations, and we'll\n // includes all pending updates are included. If it still fails after\n // the second attempt, we'll give up and commit the resulting tree.\n var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);\n\n if (errorRetryLanes !== NoLanes) {\n lanes = errorRetryLanes;\n exitStatus = recoverFromConcurrentError(root, errorRetryLanes);\n }\n }\n\n if (exitStatus === RootFatalErrored) {\n var fatalError = workInProgressRootFatalError;\n prepareFreshStack(root, NoLanes);\n markRootSuspended$1(root, lanes);\n ensureRootIsScheduled(root, now());\n throw fatalError;\n }\n\n if (exitStatus === RootDidNotComplete) {\n // The render unwound without completing the tree. This happens in special\n // cases where need to exit the current render without producing a\n // consistent tree or committing.\n //\n // This should only happen during a concurrent render, not a discrete or\n // synchronous update. We should have already checked for this when we\n // unwound the stack.\n markRootSuspended$1(root, lanes);\n } else {\n // The render completed.\n // Check if this render may have yielded to a concurrent event, and if so,\n // confirm that any newly rendered stores are consistent.\n // TODO: It's possible that even a concurrent render may never have yielded\n // to the main thread, if it was fast enough, or if it expired. We could\n // skip the consistency check in that case, too.\n var renderWasConcurrent = !includesBlockingLane(root, lanes);\n var finishedWork = root.current.alternate;\n\n if (renderWasConcurrent && !isRenderConsistentWithExternalStores(finishedWork)) {\n // A store was mutated in an interleaved event. Render again,\n // synchronously, to block further mutations.\n exitStatus = renderRootSync(root, lanes); // We need to check again if something threw\n\n if (exitStatus === RootErrored) {\n var _errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);\n\n if (_errorRetryLanes !== NoLanes) {\n lanes = _errorRetryLanes;\n exitStatus = recoverFromConcurrentError(root, _errorRetryLanes); // We assume the tree is now consistent because we didn't yield to any\n // concurrent events.\n }\n }\n\n if (exitStatus === RootFatalErrored) {\n var _fatalError = workInProgressRootFatalError;\n prepareFreshStack(root, NoLanes);\n markRootSuspended$1(root, lanes);\n ensureRootIsScheduled(root, now());\n throw _fatalError;\n }\n } // We now have a consistent tree. The next step is either to commit it,\n // or, if something suspended, wait to commit it after a timeout.\n\n\n root.finishedWork = finishedWork;\n root.finishedLanes = lanes;\n finishConcurrentRender(root, exitStatus, lanes);\n }\n }\n\n ensureRootIsScheduled(root, now());\n\n if (root.callbackNode === originalCallbackNode) {\n // The task node scheduled for this root is the same one that's\n // currently executed. Need to return a continuation.\n return performConcurrentWorkOnRoot.bind(null, root);\n }\n\n return null;\n}\n\nfunction recoverFromConcurrentError(root, errorRetryLanes) {\n // If an error occurred during hydration, discard server response and fall\n // back to client side render.\n // Before rendering again, save the errors from the previous attempt.\n var errorsFromFirstAttempt = workInProgressRootConcurrentErrors;\n\n if (isRootDehydrated(root)) {\n // The shell failed to hydrate. Set a flag to force a client rendering\n // during the next attempt. To do this, we call prepareFreshStack now\n // to create the root work-in-progress fiber. This is a bit weird in terms\n // of factoring, because it relies on renderRootSync not calling\n // prepareFreshStack again in the call below, which happens because the\n // root and lanes haven't changed.\n //\n // TODO: I think what we should do is set ForceClientRender inside\n // throwException, like we do for nested Suspense boundaries. The reason\n // it's here instead is so we can switch to the synchronous work loop, too.\n // Something to consider for a future refactor.\n var rootWorkInProgress = prepareFreshStack(root, errorRetryLanes);\n rootWorkInProgress.flags |= ForceClientRender;\n\n {\n errorHydratingContainer(root.containerInfo);\n }\n }\n\n var exitStatus = renderRootSync(root, errorRetryLanes);\n\n if (exitStatus !== RootErrored) {\n // Successfully finished rendering on retry\n // The errors from the failed first attempt have been recovered. Add\n // them to the collection of recoverable errors. We'll log them in the\n // commit phase.\n var errorsFromSecondAttempt = workInProgressRootRecoverableErrors;\n workInProgressRootRecoverableErrors = errorsFromFirstAttempt; // The errors from the second attempt should be queued after the errors\n // from the first attempt, to preserve the causal sequence.\n\n if (errorsFromSecondAttempt !== null) {\n queueRecoverableErrors(errorsFromSecondAttempt);\n }\n }\n\n return exitStatus;\n}\n\nfunction queueRecoverableErrors(errors) {\n if (workInProgressRootRecoverableErrors === null) {\n workInProgressRootRecoverableErrors = errors;\n } else {\n workInProgressRootRecoverableErrors.push.apply(workInProgressRootRecoverableErrors, errors);\n }\n}\n\nfunction finishConcurrentRender(root, exitStatus, lanes) {\n switch (exitStatus) {\n case RootInProgress:\n case RootFatalErrored:\n {\n throw new Error('Root did not complete. This is a bug in React.');\n }\n // Flow knows about invariant, so it complains if I add a break\n // statement, but eslint doesn't know about invariant, so it complains\n // if I do. eslint-disable-next-line no-fallthrough\n\n case RootErrored:\n {\n // We should have already attempted to retry this tree. If we reached\n // this point, it errored again. Commit it.\n commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);\n break;\n }\n\n case RootSuspended:\n {\n markRootSuspended$1(root, lanes); // We have an acceptable loading state. We need to figure out if we\n // should immediately commit it or wait a bit.\n\n if (includesOnlyRetries(lanes) && // do not delay if we're inside an act() scope\n !shouldForceFlushFallbacksInDEV()) {\n // This render only included retries, no updates. Throttle committing\n // retries so that we don't show too many loading states too quickly.\n var msUntilTimeout = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now(); // Don't bother with a very short suspense time.\n\n if (msUntilTimeout > 10) {\n var nextLanes = getNextLanes(root, NoLanes);\n\n if (nextLanes !== NoLanes) {\n // There's additional work on this root.\n break;\n }\n\n var suspendedLanes = root.suspendedLanes;\n\n if (!isSubsetOfLanes(suspendedLanes, lanes)) {\n // We should prefer to render the fallback of at the last\n // suspended level. Ping the last suspended level to try\n // rendering it again.\n // FIXME: What if the suspended lanes are Idle? Should not restart.\n var eventTime = requestEventTime();\n markRootPinged(root, suspendedLanes);\n break;\n } // The render is suspended, it hasn't timed out, and there's no\n // lower priority work to do. Instead of committing the fallback\n // immediately, wait for more data to arrive.\n\n\n root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root, workInProgressRootRecoverableErrors, workInProgressTransitions), msUntilTimeout);\n break;\n }\n } // The work expired. Commit immediately.\n\n\n commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);\n break;\n }\n\n case RootSuspendedWithDelay:\n {\n markRootSuspended$1(root, lanes);\n\n if (includesOnlyTransitions(lanes)) {\n // This is a transition, so we should exit without committing a\n // placeholder and without scheduling a timeout. Delay indefinitely\n // until we receive more data.\n break;\n }\n\n if (!shouldForceFlushFallbacksInDEV()) {\n // This is not a transition, but we did trigger an avoided state.\n // Schedule a placeholder to display after a short delay, using the Just\n // Noticeable Difference.\n // TODO: Is the JND optimization worth the added complexity? If this is\n // the only reason we track the event time, then probably not.\n // Consider removing.\n var mostRecentEventTime = getMostRecentEventTime(root, lanes);\n var eventTimeMs = mostRecentEventTime;\n var timeElapsedMs = now() - eventTimeMs;\n\n var _msUntilTimeout = jnd(timeElapsedMs) - timeElapsedMs; // Don't bother with a very short suspense time.\n\n\n if (_msUntilTimeout > 10) {\n // Instead of committing the fallback immediately, wait for more data\n // to arrive.\n root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root, workInProgressRootRecoverableErrors, workInProgressTransitions), _msUntilTimeout);\n break;\n }\n } // Commit the placeholder.\n\n\n commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);\n break;\n }\n\n case RootCompleted:\n {\n // The work completed. Ready to commit.\n commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);\n break;\n }\n\n default:\n {\n throw new Error('Unknown root exit status.');\n }\n }\n}\n\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n // Search the rendered tree for external store reads, and check whether the\n // stores were mutated in a concurrent event. Intentionally using an iterative\n // loop instead of recursion so we can exit early.\n var node = finishedWork;\n\n while (true) {\n if (node.flags & StoreConsistency) {\n var updateQueue = node.updateQueue;\n\n if (updateQueue !== null) {\n var checks = updateQueue.stores;\n\n if (checks !== null) {\n for (var i = 0; i < checks.length; i++) {\n var check = checks[i];\n var getSnapshot = check.getSnapshot;\n var renderedValue = check.value;\n\n try {\n if (!objectIs(getSnapshot(), renderedValue)) {\n // Found an inconsistent store.\n return false;\n }\n } catch (error) {\n // If `getSnapshot` throws, return `false`. This will schedule\n // a re-render, and the error will be rethrown during render.\n return false;\n }\n }\n }\n }\n }\n\n var child = node.child;\n\n if (node.subtreeFlags & StoreConsistency && child !== null) {\n child.return = node;\n node = child;\n continue;\n }\n\n if (node === finishedWork) {\n return true;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === finishedWork) {\n return true;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n } // Flow doesn't know this is unreachable, but eslint does\n // eslint-disable-next-line no-unreachable\n\n\n return true;\n}\n\nfunction markRootSuspended$1(root, suspendedLanes) {\n // When suspending, we should always exclude lanes that were pinged or (more\n // rarely, since we try to avoid it) updated during the render phase.\n // TODO: Lol maybe there's a better way to factor this besides this\n // obnoxiously named function :)\n suspendedLanes = removeLanes(suspendedLanes, workInProgressRootPingedLanes);\n suspendedLanes = removeLanes(suspendedLanes, workInProgressRootInterleavedUpdatedLanes);\n markRootSuspended(root, suspendedLanes);\n} // This is the entry point for synchronous tasks that don't go\n// through Scheduler\n\n\nfunction performSyncWorkOnRoot(root) {\n {\n syncNestedUpdateFlag();\n }\n\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n throw new Error('Should not already be working.');\n }\n\n flushPassiveEffects();\n var lanes = getNextLanes(root, NoLanes);\n\n if (!includesSomeLane(lanes, SyncLane)) {\n // There's no remaining sync work left.\n ensureRootIsScheduled(root, now());\n return null;\n }\n\n var exitStatus = renderRootSync(root, lanes);\n\n if (root.tag !== LegacyRoot && exitStatus === RootErrored) {\n // If something threw an error, try rendering one more time. We'll render\n // synchronously to block concurrent data mutations, and we'll includes\n // all pending updates are included. If it still fails after the second\n // attempt, we'll give up and commit the resulting tree.\n var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);\n\n if (errorRetryLanes !== NoLanes) {\n lanes = errorRetryLanes;\n exitStatus = recoverFromConcurrentError(root, errorRetryLanes);\n }\n }\n\n if (exitStatus === RootFatalErrored) {\n var fatalError = workInProgressRootFatalError;\n prepareFreshStack(root, NoLanes);\n markRootSuspended$1(root, lanes);\n ensureRootIsScheduled(root, now());\n throw fatalError;\n }\n\n if (exitStatus === RootDidNotComplete) {\n throw new Error('Root did not complete. This is a bug in React.');\n } // We now have a consistent tree. Because this is a sync render, we\n // will commit it even if something suspended.\n\n\n var finishedWork = root.current.alternate;\n root.finishedWork = finishedWork;\n root.finishedLanes = lanes;\n commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions); // Before exiting, make sure there's a callback scheduled for the next\n // pending level.\n\n ensureRootIsScheduled(root, now());\n return null;\n}\n\nfunction flushRoot(root, lanes) {\n if (lanes !== NoLanes) {\n markRootEntangled(root, mergeLanes(lanes, SyncLane));\n ensureRootIsScheduled(root, now());\n\n if ((executionContext & (RenderContext | CommitContext)) === NoContext) {\n resetRenderTimer();\n flushSyncCallbacks();\n }\n }\n}\nfunction batchedUpdates$1(fn, a) {\n var prevExecutionContext = executionContext;\n executionContext |= BatchedContext;\n\n try {\n return fn(a);\n } finally {\n executionContext = prevExecutionContext; // If there were legacy sync updates, flush them at the end of the outer\n // most batchedUpdates-like method.\n\n if (executionContext === NoContext && // Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.\n !( ReactCurrentActQueue$1.isBatchingLegacy)) {\n resetRenderTimer();\n flushSyncCallbacksOnlyInLegacyMode();\n }\n }\n}\nfunction discreteUpdates(fn, a, b, c, d) {\n var previousPriority = getCurrentUpdatePriority();\n var prevTransition = ReactCurrentBatchConfig$3.transition;\n\n try {\n ReactCurrentBatchConfig$3.transition = null;\n setCurrentUpdatePriority(DiscreteEventPriority);\n return fn(a, b, c, d);\n } finally {\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig$3.transition = prevTransition;\n\n if (executionContext === NoContext) {\n resetRenderTimer();\n }\n }\n} // Overload the definition to the two valid signatures.\n// Warning, this opts-out of checking the function body.\n\n// eslint-disable-next-line no-redeclare\nfunction flushSync(fn) {\n // In legacy mode, we flush pending passive effects at the beginning of the\n // next event, not at the end of the previous one.\n if (rootWithPendingPassiveEffects !== null && rootWithPendingPassiveEffects.tag === LegacyRoot && (executionContext & (RenderContext | CommitContext)) === NoContext) {\n flushPassiveEffects();\n }\n\n var prevExecutionContext = executionContext;\n executionContext |= BatchedContext;\n var prevTransition = ReactCurrentBatchConfig$3.transition;\n var previousPriority = getCurrentUpdatePriority();\n\n try {\n ReactCurrentBatchConfig$3.transition = null;\n setCurrentUpdatePriority(DiscreteEventPriority);\n\n if (fn) {\n return fn();\n } else {\n return undefined;\n }\n } finally {\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig$3.transition = prevTransition;\n executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch.\n // Note that this will happen even if batchedUpdates is higher up\n // the stack.\n\n if ((executionContext & (RenderContext | CommitContext)) === NoContext) {\n flushSyncCallbacks();\n }\n }\n}\nfunction isAlreadyRendering() {\n // Used by the renderer to print a warning if certain APIs are called from\n // the wrong context.\n return (executionContext & (RenderContext | CommitContext)) !== NoContext;\n}\nfunction pushRenderLanes(fiber, lanes) {\n push(subtreeRenderLanesCursor, subtreeRenderLanes, fiber);\n subtreeRenderLanes = mergeLanes(subtreeRenderLanes, lanes);\n workInProgressRootIncludedLanes = mergeLanes(workInProgressRootIncludedLanes, lanes);\n}\nfunction popRenderLanes(fiber) {\n subtreeRenderLanes = subtreeRenderLanesCursor.current;\n pop(subtreeRenderLanesCursor, fiber);\n}\n\nfunction prepareFreshStack(root, lanes) {\n root.finishedWork = null;\n root.finishedLanes = NoLanes;\n var timeoutHandle = root.timeoutHandle;\n\n if (timeoutHandle !== noTimeout) {\n // The root previous suspended and scheduled a timeout to commit a fallback\n // state. Now that we have additional work, cancel the timeout.\n root.timeoutHandle = noTimeout; // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above\n\n cancelTimeout(timeoutHandle);\n }\n\n if (workInProgress !== null) {\n var interruptedWork = workInProgress.return;\n\n while (interruptedWork !== null) {\n var current = interruptedWork.alternate;\n unwindInterruptedWork(current, interruptedWork);\n interruptedWork = interruptedWork.return;\n }\n }\n\n workInProgressRoot = root;\n var rootWorkInProgress = createWorkInProgress(root.current, null);\n workInProgress = rootWorkInProgress;\n workInProgressRootRenderLanes = subtreeRenderLanes = workInProgressRootIncludedLanes = lanes;\n workInProgressRootExitStatus = RootInProgress;\n workInProgressRootFatalError = null;\n workInProgressRootSkippedLanes = NoLanes;\n workInProgressRootInterleavedUpdatedLanes = NoLanes;\n workInProgressRootPingedLanes = NoLanes;\n workInProgressRootConcurrentErrors = null;\n workInProgressRootRecoverableErrors = null;\n finishQueueingConcurrentUpdates();\n\n {\n ReactStrictModeWarnings.discardPendingWarnings();\n }\n\n return rootWorkInProgress;\n}\n\nfunction handleError(root, thrownValue) {\n do {\n var erroredWork = workInProgress;\n\n try {\n // Reset module-level state that was set during the render phase.\n resetContextDependencies();\n resetHooksAfterThrow();\n resetCurrentFiber(); // TODO: I found and added this missing line while investigating a\n // separate issue. Write a regression test using string refs.\n\n ReactCurrentOwner$2.current = null;\n\n if (erroredWork === null || erroredWork.return === null) {\n // Expected to be working on a non-root fiber. This is a fatal error\n // because there's no ancestor that can handle it; the root is\n // supposed to capture all errors that weren't caught by an error\n // boundary.\n workInProgressRootExitStatus = RootFatalErrored;\n workInProgressRootFatalError = thrownValue; // Set `workInProgress` to null. This represents advancing to the next\n // sibling, or the parent if there are no siblings. But since the root\n // has no siblings nor a parent, we set it to null. Usually this is\n // handled by `completeUnitOfWork` or `unwindWork`, but since we're\n // intentionally not calling those, we need set it here.\n // TODO: Consider calling `unwindWork` to pop the contexts.\n\n workInProgress = null;\n return;\n }\n\n if (enableProfilerTimer && erroredWork.mode & ProfileMode) {\n // Record the time spent rendering before an error was thrown. This\n // avoids inaccurate Profiler durations in the case of a\n // suspended render.\n stopProfilerTimerIfRunningAndRecordDelta(erroredWork, true);\n }\n\n if (enableSchedulingProfiler) {\n markComponentRenderStopped();\n\n if (thrownValue !== null && typeof thrownValue === 'object' && typeof thrownValue.then === 'function') {\n var wakeable = thrownValue;\n markComponentSuspended(erroredWork, wakeable, workInProgressRootRenderLanes);\n } else {\n markComponentErrored(erroredWork, thrownValue, workInProgressRootRenderLanes);\n }\n }\n\n throwException(root, erroredWork.return, erroredWork, thrownValue, workInProgressRootRenderLanes);\n completeUnitOfWork(erroredWork);\n } catch (yetAnotherThrownValue) {\n // Something in the return path also threw.\n thrownValue = yetAnotherThrownValue;\n\n if (workInProgress === erroredWork && erroredWork !== null) {\n // If this boundary has already errored, then we had trouble processing\n // the error. Bubble it to the next boundary.\n erroredWork = erroredWork.return;\n workInProgress = erroredWork;\n } else {\n erroredWork = workInProgress;\n }\n\n continue;\n } // Return to the normal work loop.\n\n\n return;\n } while (true);\n}\n\nfunction pushDispatcher() {\n var prevDispatcher = ReactCurrentDispatcher$2.current;\n ReactCurrentDispatcher$2.current = ContextOnlyDispatcher;\n\n if (prevDispatcher === null) {\n // The React isomorphic package does not include a default dispatcher.\n // Instead the first renderer will lazily attach one, in order to give\n // nicer error messages.\n return ContextOnlyDispatcher;\n } else {\n return prevDispatcher;\n }\n}\n\nfunction popDispatcher(prevDispatcher) {\n ReactCurrentDispatcher$2.current = prevDispatcher;\n}\n\nfunction markCommitTimeOfFallback() {\n globalMostRecentFallbackTime = now();\n}\nfunction markSkippedUpdateLanes(lane) {\n workInProgressRootSkippedLanes = mergeLanes(lane, workInProgressRootSkippedLanes);\n}\nfunction renderDidSuspend() {\n if (workInProgressRootExitStatus === RootInProgress) {\n workInProgressRootExitStatus = RootSuspended;\n }\n}\nfunction renderDidSuspendDelayIfPossible() {\n if (workInProgressRootExitStatus === RootInProgress || workInProgressRootExitStatus === RootSuspended || workInProgressRootExitStatus === RootErrored) {\n workInProgressRootExitStatus = RootSuspendedWithDelay;\n } // Check if there are updates that we skipped tree that might have unblocked\n // this render.\n\n\n if (workInProgressRoot !== null && (includesNonIdleWork(workInProgressRootSkippedLanes) || includesNonIdleWork(workInProgressRootInterleavedUpdatedLanes))) {\n // Mark the current render as suspended so that we switch to working on\n // the updates that were skipped. Usually we only suspend at the end of\n // the render phase.\n // TODO: We should probably always mark the root as suspended immediately\n // (inside this function), since by suspending at the end of the render\n // phase introduces a potential mistake where we suspend lanes that were\n // pinged or updated while we were rendering.\n markRootSuspended$1(workInProgressRoot, workInProgressRootRenderLanes);\n }\n}\nfunction renderDidError(error) {\n if (workInProgressRootExitStatus !== RootSuspendedWithDelay) {\n workInProgressRootExitStatus = RootErrored;\n }\n\n if (workInProgressRootConcurrentErrors === null) {\n workInProgressRootConcurrentErrors = [error];\n } else {\n workInProgressRootConcurrentErrors.push(error);\n }\n} // Called during render to determine if anything has suspended.\n// Returns false if we're not sure.\n\nfunction renderHasNotSuspendedYet() {\n // If something errored or completed, we can't really be sure,\n // so those are false.\n return workInProgressRootExitStatus === RootInProgress;\n}\n\nfunction renderRootSync(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack\n // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {\n {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n\n if (memoizedUpdaters.size > 0) {\n restorePendingUpdaters(root, workInProgressRootRenderLanes);\n memoizedUpdaters.clear();\n } // At this point, move Fibers that scheduled the upcoming work from the Map to the Set.\n // If we bailout on this work, we'll move them back (like above).\n // It's important to move them now in case the work spawns more work at the same priority with different updaters.\n // That way we can keep the current update and future updates separate.\n\n\n movePendingFibersToMemoized(root, lanes);\n }\n }\n\n workInProgressTransitions = getTransitionsForLanes();\n prepareFreshStack(root, lanes);\n }\n\n {\n markRenderStarted(lanes);\n }\n\n do {\n try {\n workLoopSync();\n break;\n } catch (thrownValue) {\n handleError(root, thrownValue);\n }\n } while (true);\n\n resetContextDependencies();\n executionContext = prevExecutionContext;\n popDispatcher(prevDispatcher);\n\n if (workInProgress !== null) {\n // This is a sync render, so we should have finished the whole tree.\n throw new Error('Cannot commit an incomplete root. This error is likely caused by a ' + 'bug in React. Please file an issue.');\n }\n\n {\n markRenderStopped();\n } // Set this to null to indicate there's no in-progress render.\n\n\n workInProgressRoot = null;\n workInProgressRootRenderLanes = NoLanes;\n return workInProgressRootExitStatus;\n} // The work loop is an extremely hot path. Tell Closure not to inline it.\n\n/** @noinline */\n\n\nfunction workLoopSync() {\n // Already timed out, so perform work without checking if we need to yield.\n while (workInProgress !== null) {\n performUnitOfWork(workInProgress);\n }\n}\n\nfunction renderRootConcurrent(root, lanes) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack\n // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {\n {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n\n if (memoizedUpdaters.size > 0) {\n restorePendingUpdaters(root, workInProgressRootRenderLanes);\n memoizedUpdaters.clear();\n } // At this point, move Fibers that scheduled the upcoming work from the Map to the Set.\n // If we bailout on this work, we'll move them back (like above).\n // It's important to move them now in case the work spawns more work at the same priority with different updaters.\n // That way we can keep the current update and future updates separate.\n\n\n movePendingFibersToMemoized(root, lanes);\n }\n }\n\n workInProgressTransitions = getTransitionsForLanes();\n resetRenderTimer();\n prepareFreshStack(root, lanes);\n }\n\n {\n markRenderStarted(lanes);\n }\n\n do {\n try {\n workLoopConcurrent();\n break;\n } catch (thrownValue) {\n handleError(root, thrownValue);\n }\n } while (true);\n\n resetContextDependencies();\n popDispatcher(prevDispatcher);\n executionContext = prevExecutionContext;\n\n\n if (workInProgress !== null) {\n // Still work remaining.\n {\n markRenderYielded();\n }\n\n return RootInProgress;\n } else {\n // Completed the tree.\n {\n markRenderStopped();\n } // Set this to null to indicate there's no in-progress render.\n\n\n workInProgressRoot = null;\n workInProgressRootRenderLanes = NoLanes; // Return the final exit status.\n\n return workInProgressRootExitStatus;\n }\n}\n/** @noinline */\n\n\nfunction workLoopConcurrent() {\n // Perform work until Scheduler asks us to yield\n while (workInProgress !== null && !shouldYield()) {\n performUnitOfWork(workInProgress);\n }\n}\n\nfunction performUnitOfWork(unitOfWork) {\n // The current, flushed, state of this fiber is the alternate. Ideally\n // nothing should rely on this, but relying on it here means that we don't\n // need an additional field on the work in progress.\n var current = unitOfWork.alternate;\n setCurrentFiber(unitOfWork);\n var next;\n\n if ( (unitOfWork.mode & ProfileMode) !== NoMode) {\n startProfilerTimer(unitOfWork);\n next = beginWork$1(current, unitOfWork, subtreeRenderLanes);\n stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true);\n } else {\n next = beginWork$1(current, unitOfWork, subtreeRenderLanes);\n }\n\n resetCurrentFiber();\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n\n if (next === null) {\n // If this doesn't spawn new work, complete the current work.\n completeUnitOfWork(unitOfWork);\n } else {\n workInProgress = next;\n }\n\n ReactCurrentOwner$2.current = null;\n}\n\nfunction completeUnitOfWork(unitOfWork) {\n // Attempt to complete the current unit of work, then move to the next\n // sibling. If there are no more siblings, return to the parent fiber.\n var completedWork = unitOfWork;\n\n do {\n // The current, flushed, state of this fiber is the alternate. Ideally\n // nothing should rely on this, but relying on it here means that we don't\n // need an additional field on the work in progress.\n var current = completedWork.alternate;\n var returnFiber = completedWork.return; // Check if the work completed or if something threw.\n\n if ((completedWork.flags & Incomplete) === NoFlags) {\n setCurrentFiber(completedWork);\n var next = void 0;\n\n if ( (completedWork.mode & ProfileMode) === NoMode) {\n next = completeWork(current, completedWork, subtreeRenderLanes);\n } else {\n startProfilerTimer(completedWork);\n next = completeWork(current, completedWork, subtreeRenderLanes); // Update render duration assuming we didn't error.\n\n stopProfilerTimerIfRunningAndRecordDelta(completedWork, false);\n }\n\n resetCurrentFiber();\n\n if (next !== null) {\n // Completing this fiber spawned new work. Work on that next.\n workInProgress = next;\n return;\n }\n } else {\n // This fiber did not complete because something threw. Pop values off\n // the stack without entering the complete phase. If this is a boundary,\n // capture values if possible.\n var _next = unwindWork(current, completedWork); // Because this fiber did not complete, don't reset its lanes.\n\n\n if (_next !== null) {\n // If completing this work spawned new work, do that next. We'll come\n // back here again.\n // Since we're restarting, remove anything that is not a host effect\n // from the effect tag.\n _next.flags &= HostEffectMask;\n workInProgress = _next;\n return;\n }\n\n if ( (completedWork.mode & ProfileMode) !== NoMode) {\n // Record the render duration for the fiber that errored.\n stopProfilerTimerIfRunningAndRecordDelta(completedWork, false); // Include the time spent working on failed children before continuing.\n\n var actualDuration = completedWork.actualDuration;\n var child = completedWork.child;\n\n while (child !== null) {\n actualDuration += child.actualDuration;\n child = child.sibling;\n }\n\n completedWork.actualDuration = actualDuration;\n }\n\n if (returnFiber !== null) {\n // Mark the parent fiber as incomplete and clear its subtree flags.\n returnFiber.flags |= Incomplete;\n returnFiber.subtreeFlags = NoFlags;\n returnFiber.deletions = null;\n } else {\n // We've unwound all the way to the root.\n workInProgressRootExitStatus = RootDidNotComplete;\n workInProgress = null;\n return;\n }\n }\n\n var siblingFiber = completedWork.sibling;\n\n if (siblingFiber !== null) {\n // If there is more work to do in this returnFiber, do that next.\n workInProgress = siblingFiber;\n return;\n } // Otherwise, return to the parent\n\n\n completedWork = returnFiber; // Update the next thing we're working on in case something throws.\n\n workInProgress = completedWork;\n } while (completedWork !== null); // We've reached the root.\n\n\n if (workInProgressRootExitStatus === RootInProgress) {\n workInProgressRootExitStatus = RootCompleted;\n }\n}\n\nfunction commitRoot(root, recoverableErrors, transitions) {\n // TODO: This no longer makes any sense. We already wrap the mutation and\n // layout phases. Should be able to remove.\n var previousUpdateLanePriority = getCurrentUpdatePriority();\n var prevTransition = ReactCurrentBatchConfig$3.transition;\n\n try {\n ReactCurrentBatchConfig$3.transition = null;\n setCurrentUpdatePriority(DiscreteEventPriority);\n commitRootImpl(root, recoverableErrors, transitions, previousUpdateLanePriority);\n } finally {\n ReactCurrentBatchConfig$3.transition = prevTransition;\n setCurrentUpdatePriority(previousUpdateLanePriority);\n }\n\n return null;\n}\n\nfunction commitRootImpl(root, recoverableErrors, transitions, renderPriorityLevel) {\n do {\n // `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which\n // means `flushPassiveEffects` will sometimes result in additional\n // passive effects. So we need to keep flushing in a loop until there are\n // no more pending effects.\n // TODO: Might be better if `flushPassiveEffects` did not automatically\n // flush synchronous work at the end, to avoid factoring hazards like this.\n flushPassiveEffects();\n } while (rootWithPendingPassiveEffects !== null);\n\n flushRenderPhaseStrictModeWarningsInDEV();\n\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n throw new Error('Should not already be working.');\n }\n\n var finishedWork = root.finishedWork;\n var lanes = root.finishedLanes;\n\n {\n markCommitStarted(lanes);\n }\n\n if (finishedWork === null) {\n\n {\n markCommitStopped();\n }\n\n return null;\n } else {\n {\n if (lanes === NoLanes) {\n error('root.finishedLanes should not be empty during a commit. This is a ' + 'bug in React.');\n }\n }\n }\n\n root.finishedWork = null;\n root.finishedLanes = NoLanes;\n\n if (finishedWork === root.current) {\n throw new Error('Cannot commit the same tree as before. This error is likely caused by ' + 'a bug in React. Please file an issue.');\n } // commitRoot never returns a continuation; it always finishes synchronously.\n // So we can clear these now to allow a new callback to be scheduled.\n\n\n root.callbackNode = null;\n root.callbackPriority = NoLane; // Update the first and last pending times on this root. The new first\n // pending time is whatever is left on the root fiber.\n\n var remainingLanes = mergeLanes(finishedWork.lanes, finishedWork.childLanes);\n markRootFinished(root, remainingLanes);\n\n if (root === workInProgressRoot) {\n // We can reset these now that they are finished.\n workInProgressRoot = null;\n workInProgress = null;\n workInProgressRootRenderLanes = NoLanes;\n } // If there are pending passive effects, schedule a callback to process them.\n // Do this as early as possible, so it is queued before anything else that\n // might get scheduled in the commit phase. (See #16714.)\n // TODO: Delete all other places that schedule the passive effect callback\n // They're redundant.\n\n\n if ((finishedWork.subtreeFlags & PassiveMask) !== NoFlags || (finishedWork.flags & PassiveMask) !== NoFlags) {\n if (!rootDoesHavePassiveEffects) {\n rootDoesHavePassiveEffects = true;\n // to store it in pendingPassiveTransitions until they get processed\n // We need to pass this through as an argument to commitRoot\n // because workInProgressTransitions might have changed between\n // the previous render and commit if we throttle the commit\n // with setTimeout\n\n pendingPassiveTransitions = transitions;\n scheduleCallback$1(NormalPriority, function () {\n flushPassiveEffects(); // This render triggered passive effects: release the root cache pool\n // *after* passive effects fire to avoid freeing a cache pool that may\n // be referenced by a node in the tree (HostRoot, Cache boundary etc)\n\n return null;\n });\n }\n } // Check if there are any effects in the whole tree.\n // TODO: This is left over from the effect list implementation, where we had\n // to check for the existence of `firstEffect` to satisfy Flow. I think the\n // only other reason this optimization exists is because it affects profiling.\n // Reconsider whether this is necessary.\n\n\n var subtreeHasEffects = (finishedWork.subtreeFlags & (BeforeMutationMask | MutationMask | LayoutMask | PassiveMask)) !== NoFlags;\n var rootHasEffect = (finishedWork.flags & (BeforeMutationMask | MutationMask | LayoutMask | PassiveMask)) !== NoFlags;\n\n if (subtreeHasEffects || rootHasEffect) {\n var prevTransition = ReactCurrentBatchConfig$3.transition;\n ReactCurrentBatchConfig$3.transition = null;\n var previousPriority = getCurrentUpdatePriority();\n setCurrentUpdatePriority(DiscreteEventPriority);\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext; // Reset this to null before calling lifecycles\n\n ReactCurrentOwner$2.current = null; // The commit phase is broken into several sub-phases. We do a separate pass\n // of the effect list for each phase: all mutation effects come before all\n // layout effects, and so on.\n // The first phase a \"before mutation\" phase. We use this phase to read the\n // state of the host tree right before we mutate it. This is where\n // getSnapshotBeforeUpdate is called.\n\n var shouldFireAfterActiveInstanceBlur = commitBeforeMutationEffects(root, finishedWork);\n\n {\n // Mark the current commit time to be shared by all Profilers in this\n // batch. This enables them to be grouped later.\n recordCommitTime();\n }\n\n\n commitMutationEffects(root, finishedWork, lanes);\n\n resetAfterCommit(root.containerInfo); // The work-in-progress tree is now the current tree. This must come after\n // the mutation phase, so that the previous tree is still current during\n // componentWillUnmount, but before the layout phase, so that the finished\n // work is current during componentDidMount/Update.\n\n root.current = finishedWork; // The next phase is the layout phase, where we call effects that read\n\n {\n markLayoutEffectsStarted(lanes);\n }\n\n commitLayoutEffects(finishedWork, root, lanes);\n\n {\n markLayoutEffectsStopped();\n }\n // opportunity to paint.\n\n\n requestPaint();\n executionContext = prevExecutionContext; // Reset the priority to the previous non-sync value.\n\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig$3.transition = prevTransition;\n } else {\n // No effects.\n root.current = finishedWork; // Measure these anyway so the flamegraph explicitly shows that there were\n // no effects.\n // TODO: Maybe there's a better way to report this.\n\n {\n recordCommitTime();\n }\n }\n\n var rootDidHavePassiveEffects = rootDoesHavePassiveEffects;\n\n if (rootDoesHavePassiveEffects) {\n // This commit has passive effects. Stash a reference to them. But don't\n // schedule a callback until after flushing layout work.\n rootDoesHavePassiveEffects = false;\n rootWithPendingPassiveEffects = root;\n pendingPassiveEffectsLanes = lanes;\n } else {\n\n {\n nestedPassiveUpdateCount = 0;\n rootWithPassiveNestedUpdates = null;\n }\n } // Read this again, since an effect might have updated it\n\n\n remainingLanes = root.pendingLanes; // Check if there's remaining work on this root\n // TODO: This is part of the `componentDidCatch` implementation. Its purpose\n // is to detect whether something might have called setState inside\n // `componentDidCatch`. The mechanism is known to be flawed because `setState`\n // inside `componentDidCatch` is itself flawed — that's why we recommend\n // `getDerivedStateFromError` instead. However, it could be improved by\n // checking if remainingLanes includes Sync work, instead of whether there's\n // any work remaining at all (which would also include stuff like Suspense\n // retries or transitions). It's been like this for a while, though, so fixing\n // it probably isn't that urgent.\n\n if (remainingLanes === NoLanes) {\n // If there's no remaining work, we can clear the set of already failed\n // error boundaries.\n legacyErrorBoundariesThatAlreadyFailed = null;\n }\n\n {\n if (!rootDidHavePassiveEffects) {\n commitDoubleInvokeEffectsInDEV(root.current, false);\n }\n }\n\n onCommitRoot(finishedWork.stateNode, renderPriorityLevel);\n\n {\n if (isDevToolsPresent) {\n root.memoizedUpdaters.clear();\n }\n }\n\n {\n onCommitRoot$1();\n } // Always call this before exiting `commitRoot`, to ensure that any\n // additional work on this root is scheduled.\n\n\n ensureRootIsScheduled(root, now());\n\n if (recoverableErrors !== null) {\n // There were errors during this render, but recovered from them without\n // needing to surface it to the UI. We log them here.\n var onRecoverableError = root.onRecoverableError;\n\n for (var i = 0; i < recoverableErrors.length; i++) {\n var recoverableError = recoverableErrors[i];\n var componentStack = recoverableError.stack;\n var digest = recoverableError.digest;\n onRecoverableError(recoverableError.value, {\n componentStack: componentStack,\n digest: digest\n });\n }\n }\n\n if (hasUncaughtError) {\n hasUncaughtError = false;\n var error$1 = firstUncaughtError;\n firstUncaughtError = null;\n throw error$1;\n } // If the passive effects are the result of a discrete render, flush them\n // synchronously at the end of the current task so that the result is\n // immediately observable. Otherwise, we assume that they are not\n // order-dependent and do not need to be observed by external systems, so we\n // can wait until after paint.\n // TODO: We can optimize this by not scheduling the callback earlier. Since we\n // currently schedule the callback in multiple places, will wait until those\n // are consolidated.\n\n\n if (includesSomeLane(pendingPassiveEffectsLanes, SyncLane) && root.tag !== LegacyRoot) {\n flushPassiveEffects();\n } // Read this again, since a passive effect might have updated it\n\n\n remainingLanes = root.pendingLanes;\n\n if (includesSomeLane(remainingLanes, SyncLane)) {\n {\n markNestedUpdateScheduled();\n } // Count the number of times the root synchronously re-renders without\n // finishing. If there are too many, it indicates an infinite update loop.\n\n\n if (root === rootWithNestedUpdates) {\n nestedUpdateCount++;\n } else {\n nestedUpdateCount = 0;\n rootWithNestedUpdates = root;\n }\n } else {\n nestedUpdateCount = 0;\n } // If layout work was scheduled, flush it now.\n\n\n flushSyncCallbacks();\n\n {\n markCommitStopped();\n }\n\n return null;\n}\n\nfunction flushPassiveEffects() {\n // Returns whether passive effects were flushed.\n // TODO: Combine this check with the one in flushPassiveEFfectsImpl. We should\n // probably just combine the two functions. I believe they were only separate\n // in the first place because we used to wrap it with\n // `Scheduler.runWithPriority`, which accepts a function. But now we track the\n // priority within React itself, so we can mutate the variable directly.\n if (rootWithPendingPassiveEffects !== null) {\n var renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes);\n var priority = lowerEventPriority(DefaultEventPriority, renderPriority);\n var prevTransition = ReactCurrentBatchConfig$3.transition;\n var previousPriority = getCurrentUpdatePriority();\n\n try {\n ReactCurrentBatchConfig$3.transition = null;\n setCurrentUpdatePriority(priority);\n return flushPassiveEffectsImpl();\n } finally {\n setCurrentUpdatePriority(previousPriority);\n ReactCurrentBatchConfig$3.transition = prevTransition; // Once passive effects have run for the tree - giving components a\n }\n }\n\n return false;\n}\nfunction enqueuePendingPassiveProfilerEffect(fiber) {\n {\n pendingPassiveProfilerEffects.push(fiber);\n\n if (!rootDoesHavePassiveEffects) {\n rootDoesHavePassiveEffects = true;\n scheduleCallback$1(NormalPriority, function () {\n flushPassiveEffects();\n return null;\n });\n }\n }\n}\n\nfunction flushPassiveEffectsImpl() {\n if (rootWithPendingPassiveEffects === null) {\n return false;\n } // Cache and clear the transitions flag\n\n\n var transitions = pendingPassiveTransitions;\n pendingPassiveTransitions = null;\n var root = rootWithPendingPassiveEffects;\n var lanes = pendingPassiveEffectsLanes;\n rootWithPendingPassiveEffects = null; // TODO: This is sometimes out of sync with rootWithPendingPassiveEffects.\n // Figure out why and fix it. It's not causing any known issues (probably\n // because it's only used for profiling), but it's a refactor hazard.\n\n pendingPassiveEffectsLanes = NoLanes;\n\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n throw new Error('Cannot flush passive effects while already rendering.');\n }\n\n {\n isFlushingPassiveEffects = true;\n didScheduleUpdateDuringPassiveEffects = false;\n }\n\n {\n markPassiveEffectsStarted(lanes);\n }\n\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n commitPassiveUnmountEffects(root.current);\n commitPassiveMountEffects(root, root.current, lanes, transitions); // TODO: Move to commitPassiveMountEffects\n\n {\n var profilerEffects = pendingPassiveProfilerEffects;\n pendingPassiveProfilerEffects = [];\n\n for (var i = 0; i < profilerEffects.length; i++) {\n var _fiber = profilerEffects[i];\n commitPassiveEffectDurations(root, _fiber);\n }\n }\n\n {\n markPassiveEffectsStopped();\n }\n\n {\n commitDoubleInvokeEffectsInDEV(root.current, true);\n }\n\n executionContext = prevExecutionContext;\n flushSyncCallbacks();\n\n {\n // If additional passive effects were scheduled, increment a counter. If this\n // exceeds the limit, we'll fire a warning.\n if (didScheduleUpdateDuringPassiveEffects) {\n if (root === rootWithPassiveNestedUpdates) {\n nestedPassiveUpdateCount++;\n } else {\n nestedPassiveUpdateCount = 0;\n rootWithPassiveNestedUpdates = root;\n }\n } else {\n nestedPassiveUpdateCount = 0;\n }\n\n isFlushingPassiveEffects = false;\n didScheduleUpdateDuringPassiveEffects = false;\n } // TODO: Move to commitPassiveMountEffects\n\n\n onPostCommitRoot(root);\n\n {\n var stateNode = root.current.stateNode;\n stateNode.effectDuration = 0;\n stateNode.passiveEffectDuration = 0;\n }\n\n return true;\n}\n\nfunction isAlreadyFailedLegacyErrorBoundary(instance) {\n return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance);\n}\nfunction markLegacyErrorBoundaryAsFailed(instance) {\n if (legacyErrorBoundariesThatAlreadyFailed === null) {\n legacyErrorBoundariesThatAlreadyFailed = new Set([instance]);\n } else {\n legacyErrorBoundariesThatAlreadyFailed.add(instance);\n }\n}\n\nfunction prepareToThrowUncaughtError(error) {\n if (!hasUncaughtError) {\n hasUncaughtError = true;\n firstUncaughtError = error;\n }\n}\n\nvar onUncaughtError = prepareToThrowUncaughtError;\n\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n var errorInfo = createCapturedValueAtFiber(error, sourceFiber);\n var update = createRootErrorUpdate(rootFiber, errorInfo, SyncLane);\n var root = enqueueUpdate(rootFiber, update, SyncLane);\n var eventTime = requestEventTime();\n\n if (root !== null) {\n markRootUpdated(root, SyncLane, eventTime);\n ensureRootIsScheduled(root, eventTime);\n }\n}\n\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error$1) {\n {\n reportUncaughtErrorInDEV(error$1);\n setIsRunningInsertionEffect(false);\n }\n\n if (sourceFiber.tag === HostRoot) {\n // Error was thrown at the root. There is no parent, so the root\n // itself should capture it.\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error$1);\n return;\n }\n\n var fiber = null;\n\n {\n fiber = nearestMountedAncestor;\n }\n\n while (fiber !== null) {\n if (fiber.tag === HostRoot) {\n captureCommitPhaseErrorOnRoot(fiber, sourceFiber, error$1);\n return;\n } else if (fiber.tag === ClassComponent) {\n var ctor = fiber.type;\n var instance = fiber.stateNode;\n\n if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {\n var errorInfo = createCapturedValueAtFiber(error$1, sourceFiber);\n var update = createClassErrorUpdate(fiber, errorInfo, SyncLane);\n var root = enqueueUpdate(fiber, update, SyncLane);\n var eventTime = requestEventTime();\n\n if (root !== null) {\n markRootUpdated(root, SyncLane, eventTime);\n ensureRootIsScheduled(root, eventTime);\n }\n\n return;\n }\n }\n\n fiber = fiber.return;\n }\n\n {\n // TODO: Until we re-land skipUnmountedBoundaries (see #20147), this warning\n // will fire for errors that are thrown by destroy functions inside deleted\n // trees. What it should instead do is propagate the error to the parent of\n // the deleted tree. In the meantime, do not add this warning to the\n // allowlist; this is only for our internal use.\n error('Internal React error: Attempted to capture a commit phase error ' + 'inside a detached tree. This indicates a bug in React. Likely ' + 'causes include deleting the same fiber more than once, committing an ' + 'already-finished tree, or an inconsistent return pointer.\\n\\n' + 'Error message:\\n\\n%s', error$1);\n }\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n var pingCache = root.pingCache;\n\n if (pingCache !== null) {\n // The wakeable resolved, so we no longer need to memoize, because it will\n // never be thrown again.\n pingCache.delete(wakeable);\n }\n\n var eventTime = requestEventTime();\n markRootPinged(root, pingedLanes);\n warnIfSuspenseResolutionNotWrappedWithActDEV(root);\n\n if (workInProgressRoot === root && isSubsetOfLanes(workInProgressRootRenderLanes, pingedLanes)) {\n // Received a ping at the same priority level at which we're currently\n // rendering. We might want to restart this render. This should mirror\n // the logic of whether or not a root suspends once it completes.\n // TODO: If we're rendering sync either due to Sync, Batched or expired,\n // we should probably never restart.\n // If we're suspended with delay, or if it's a retry, we'll always suspend\n // so we can always restart.\n if (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && includesOnlyRetries(workInProgressRootRenderLanes) && now() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS) {\n // Restart from the root.\n prepareFreshStack(root, NoLanes);\n } else {\n // Even though we can't restart right now, we might get an\n // opportunity later. So we mark this render as having a ping.\n workInProgressRootPingedLanes = mergeLanes(workInProgressRootPingedLanes, pingedLanes);\n }\n }\n\n ensureRootIsScheduled(root, eventTime);\n}\n\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n // The boundary fiber (a Suspense component or SuspenseList component)\n // previously was rendered in its fallback state. One of the promises that\n // suspended it has resolved, which means at least part of the tree was\n // likely unblocked. Try rendering again, at a new lanes.\n if (retryLane === NoLane) {\n // TODO: Assign this to `suspenseState.retryLane`? to avoid\n // unnecessary entanglement?\n retryLane = requestRetryLane(boundaryFiber);\n } // TODO: Special case idle priority?\n\n\n var eventTime = requestEventTime();\n var root = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n\n if (root !== null) {\n markRootUpdated(root, retryLane, eventTime);\n ensureRootIsScheduled(root, eventTime);\n }\n}\n\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n var suspenseState = boundaryFiber.memoizedState;\n var retryLane = NoLane;\n\n if (suspenseState !== null) {\n retryLane = suspenseState.retryLane;\n }\n\n retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n var retryLane = NoLane; // Default\n\n var retryCache;\n\n switch (boundaryFiber.tag) {\n case SuspenseComponent:\n retryCache = boundaryFiber.stateNode;\n var suspenseState = boundaryFiber.memoizedState;\n\n if (suspenseState !== null) {\n retryLane = suspenseState.retryLane;\n }\n\n break;\n\n case SuspenseListComponent:\n retryCache = boundaryFiber.stateNode;\n break;\n\n default:\n throw new Error('Pinged unknown suspense boundary type. ' + 'This is probably a bug in React.');\n }\n\n if (retryCache !== null) {\n // The wakeable resolved, so we no longer need to memoize, because it will\n // never be thrown again.\n retryCache.delete(wakeable);\n }\n\n retryTimedOutBoundary(boundaryFiber, retryLane);\n} // Computes the next Just Noticeable Difference (JND) boundary.\n// The theory is that a person can't tell the difference between small differences in time.\n// Therefore, if we wait a bit longer than necessary that won't translate to a noticeable\n// difference in the experience. However, waiting for longer might mean that we can avoid\n// showing an intermediate loading state. The longer we have already waited, the harder it\n// is to tell small differences in time. Therefore, the longer we've already waited,\n// the longer we can wait additionally. At some point we have to give up though.\n// We pick a train model where the next boundary commits at a consistent schedule.\n// These particular numbers are vague estimates. We expect to adjust them based on research.\n\nfunction jnd(timeElapsed) {\n return timeElapsed < 120 ? 120 : timeElapsed < 480 ? 480 : timeElapsed < 1080 ? 1080 : timeElapsed < 1920 ? 1920 : timeElapsed < 3000 ? 3000 : timeElapsed < 4320 ? 4320 : ceil(timeElapsed / 1960) * 1960;\n}\n\nfunction checkForNestedUpdates() {\n if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {\n nestedUpdateCount = 0;\n rootWithNestedUpdates = null;\n throw new Error('Maximum update depth exceeded. This can happen when a component ' + 'repeatedly calls setState inside componentWillUpdate or ' + 'componentDidUpdate. React limits the number of nested updates to ' + 'prevent infinite loops.');\n }\n\n {\n if (nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT) {\n nestedPassiveUpdateCount = 0;\n rootWithPassiveNestedUpdates = null;\n\n error('Maximum update depth exceeded. This can happen when a component ' + \"calls setState inside useEffect, but useEffect either doesn't \" + 'have a dependency array, or one of the dependencies changes on ' + 'every render.');\n }\n }\n}\n\nfunction flushRenderPhaseStrictModeWarningsInDEV() {\n {\n ReactStrictModeWarnings.flushLegacyContextWarning();\n\n {\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n }\n }\n}\n\nfunction commitDoubleInvokeEffectsInDEV(fiber, hasPassiveEffects) {\n {\n // TODO (StrictEffects) Should we set a marker on the root if it contains strict effects\n // so we don't traverse unnecessarily? similar to subtreeFlags but just at the root level.\n // Maybe not a big deal since this is DEV only behavior.\n setCurrentFiber(fiber);\n invokeEffectsInDev(fiber, MountLayoutDev, invokeLayoutEffectUnmountInDEV);\n\n if (hasPassiveEffects) {\n invokeEffectsInDev(fiber, MountPassiveDev, invokePassiveEffectUnmountInDEV);\n }\n\n invokeEffectsInDev(fiber, MountLayoutDev, invokeLayoutEffectMountInDEV);\n\n if (hasPassiveEffects) {\n invokeEffectsInDev(fiber, MountPassiveDev, invokePassiveEffectMountInDEV);\n }\n\n resetCurrentFiber();\n }\n}\n\nfunction invokeEffectsInDev(firstChild, fiberFlags, invokeEffectFn) {\n {\n // We don't need to re-check StrictEffectsMode here.\n // This function is only called if that check has already passed.\n var current = firstChild;\n var subtreeRoot = null;\n\n while (current !== null) {\n var primarySubtreeFlag = current.subtreeFlags & fiberFlags;\n\n if (current !== subtreeRoot && current.child !== null && primarySubtreeFlag !== NoFlags) {\n current = current.child;\n } else {\n if ((current.flags & fiberFlags) !== NoFlags) {\n invokeEffectFn(current);\n }\n\n if (current.sibling !== null) {\n current = current.sibling;\n } else {\n current = subtreeRoot = current.return;\n }\n }\n }\n }\n}\n\nvar didWarnStateUpdateForNotYetMountedComponent = null;\nfunction warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {\n {\n if ((executionContext & RenderContext) !== NoContext) {\n // We let the other warning about render phase updates deal with this one.\n return;\n }\n\n if (!(fiber.mode & ConcurrentMode)) {\n return;\n }\n\n var tag = fiber.tag;\n\n if (tag !== IndeterminateComponent && tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent) {\n // Only warn for user-defined components, not internal ones like Suspense.\n return;\n } // We show the whole stack but dedupe on the top component's name because\n // the problematic code almost always lies inside that component.\n\n\n var componentName = getComponentNameFromFiber(fiber) || 'ReactComponent';\n\n if (didWarnStateUpdateForNotYetMountedComponent !== null) {\n if (didWarnStateUpdateForNotYetMountedComponent.has(componentName)) {\n return;\n }\n\n didWarnStateUpdateForNotYetMountedComponent.add(componentName);\n } else {\n didWarnStateUpdateForNotYetMountedComponent = new Set([componentName]);\n }\n\n var previousFiber = current;\n\n try {\n setCurrentFiber(fiber);\n\n error(\"Can't perform a React state update on a component that hasn't mounted yet. \" + 'This indicates that you have a side-effect in your render function that ' + 'asynchronously later calls tries to update the component. Move this work to ' + 'useEffect instead.');\n } finally {\n if (previousFiber) {\n setCurrentFiber(fiber);\n } else {\n resetCurrentFiber();\n }\n }\n }\n}\nvar beginWork$1;\n\n{\n var dummyFiber = null;\n\n beginWork$1 = function (current, unitOfWork, lanes) {\n // If a component throws an error, we replay it again in a synchronously\n // dispatched event, so that the debugger will treat it as an uncaught\n // error See ReactErrorUtils for more information.\n // Before entering the begin phase, copy the work-in-progress onto a dummy\n // fiber. If beginWork throws, we'll use this to reset the state.\n var originalWorkInProgressCopy = assignFiberPropertiesInDEV(dummyFiber, unitOfWork);\n\n try {\n return beginWork(current, unitOfWork, lanes);\n } catch (originalError) {\n if (didSuspendOrErrorWhileHydratingDEV() || originalError !== null && typeof originalError === 'object' && typeof originalError.then === 'function') {\n // Don't replay promises.\n // Don't replay errors if we are hydrating and have already suspended or handled an error\n throw originalError;\n } // Keep this code in sync with handleError; any changes here must have\n // corresponding changes there.\n\n\n resetContextDependencies();\n resetHooksAfterThrow(); // Don't reset current debug fiber, since we're about to work on the\n // same fiber again.\n // Unwind the failed stack frame\n\n unwindInterruptedWork(current, unitOfWork); // Restore the original properties of the fiber.\n\n assignFiberPropertiesInDEV(unitOfWork, originalWorkInProgressCopy);\n\n if ( unitOfWork.mode & ProfileMode) {\n // Reset the profiler timer.\n startProfilerTimer(unitOfWork);\n } // Run beginWork again.\n\n\n invokeGuardedCallback(null, beginWork, null, current, unitOfWork, lanes);\n\n if (hasCaughtError()) {\n var replayError = clearCaughtError();\n\n if (typeof replayError === 'object' && replayError !== null && replayError._suppressLogging && typeof originalError === 'object' && originalError !== null && !originalError._suppressLogging) {\n // If suppressed, let the flag carry over to the original error which is the one we'll rethrow.\n originalError._suppressLogging = true;\n }\n } // We always throw the original error in case the second render pass is not idempotent.\n // This can happen if a memoized function or CommonJS module doesn't throw after first invocation.\n\n\n throw originalError;\n }\n };\n}\n\nvar didWarnAboutUpdateInRender = false;\nvar didWarnAboutUpdateInRenderForAnotherComponent;\n\n{\n didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n}\n\nfunction warnAboutRenderPhaseUpdatesInDEV(fiber) {\n {\n if (isRendering && !getIsUpdatingOpaqueValueInRenderPhaseInDEV()) {\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n var renderingComponentName = workInProgress && getComponentNameFromFiber(workInProgress) || 'Unknown'; // Dedupe by the rendering component because it's the one that needs to be fixed.\n\n var dedupeKey = renderingComponentName;\n\n if (!didWarnAboutUpdateInRenderForAnotherComponent.has(dedupeKey)) {\n didWarnAboutUpdateInRenderForAnotherComponent.add(dedupeKey);\n var setStateComponentName = getComponentNameFromFiber(fiber) || 'Unknown';\n\n error('Cannot update a component (`%s`) while rendering a ' + 'different component (`%s`). To locate the bad setState() call inside `%s`, ' + 'follow the stack trace as described in https://reactjs.org/link/setstate-in-render', setStateComponentName, renderingComponentName, renderingComponentName);\n }\n\n break;\n }\n\n case ClassComponent:\n {\n if (!didWarnAboutUpdateInRender) {\n error('Cannot update during an existing state transition (such as ' + 'within `render`). Render methods should be a pure ' + 'function of props and state.');\n\n didWarnAboutUpdateInRender = true;\n }\n\n break;\n }\n }\n }\n }\n}\n\nfunction restorePendingUpdaters(root, lanes) {\n {\n if (isDevToolsPresent) {\n var memoizedUpdaters = root.memoizedUpdaters;\n memoizedUpdaters.forEach(function (schedulingFiber) {\n addFiberToLanesMap(root, schedulingFiber, lanes);\n }); // This function intentionally does not clear memoized updaters.\n // Those may still be relevant to the current commit\n // and a future one (e.g. Suspense).\n }\n }\n}\nvar fakeActCallbackNode = {};\n\nfunction scheduleCallback$1(priorityLevel, callback) {\n {\n // If we're currently inside an `act` scope, bypass Scheduler and push to\n // the `act` queue instead.\n var actQueue = ReactCurrentActQueue$1.current;\n\n if (actQueue !== null) {\n actQueue.push(callback);\n return fakeActCallbackNode;\n } else {\n return scheduleCallback(priorityLevel, callback);\n }\n }\n}\n\nfunction cancelCallback$1(callbackNode) {\n if ( callbackNode === fakeActCallbackNode) {\n return;\n } // In production, always call Scheduler. This function will be stripped out.\n\n\n return cancelCallback(callbackNode);\n}\n\nfunction shouldForceFlushFallbacksInDEV() {\n // Never force flush in production. This function should get stripped out.\n return ReactCurrentActQueue$1.current !== null;\n}\n\nfunction warnIfUpdatesNotWrappedWithActDEV(fiber) {\n {\n if (fiber.mode & ConcurrentMode) {\n if (!isConcurrentActEnvironment()) {\n // Not in an act environment. No need to warn.\n return;\n }\n } else {\n // Legacy mode has additional cases where we suppress a warning.\n if (!isLegacyActEnvironment()) {\n // Not in an act environment. No need to warn.\n return;\n }\n\n if (executionContext !== NoContext) {\n // Legacy mode doesn't warn if the update is batched, i.e.\n // batchedUpdates or flushSync.\n return;\n }\n\n if (fiber.tag !== FunctionComponent && fiber.tag !== ForwardRef && fiber.tag !== SimpleMemoComponent) {\n // For backwards compatibility with pre-hooks code, legacy mode only\n // warns for updates that originate from a hook.\n return;\n }\n }\n\n if (ReactCurrentActQueue$1.current === null) {\n var previousFiber = current;\n\n try {\n setCurrentFiber(fiber);\n\n error('An update to %s inside a test was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\\n\\n' + 'act(() => {\\n' + ' /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act', getComponentNameFromFiber(fiber));\n } finally {\n if (previousFiber) {\n setCurrentFiber(fiber);\n } else {\n resetCurrentFiber();\n }\n }\n }\n }\n}\n\nfunction warnIfSuspenseResolutionNotWrappedWithActDEV(root) {\n {\n if (root.tag !== LegacyRoot && isConcurrentActEnvironment() && ReactCurrentActQueue$1.current === null) {\n error('A suspended resource finished loading inside a test, but the event ' + 'was not wrapped in act(...).\\n\\n' + 'When testing, code that resolves suspended data should be wrapped ' + 'into act(...):\\n\\n' + 'act(() => {\\n' + ' /* finish loading suspended data */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act');\n }\n }\n}\n\nfunction setIsRunningInsertionEffect(isRunning) {\n {\n isRunningInsertionEffect = isRunning;\n }\n}\n\n/* eslint-disable react-internal/prod-error-codes */\nvar resolveFamily = null; // $FlowFixMe Flow gets confused by a WeakSet feature check below.\n\nvar failedBoundaries = null;\nvar setRefreshHandler = function (handler) {\n {\n resolveFamily = handler;\n }\n};\nfunction resolveFunctionForHotReloading(type) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return type;\n }\n\n var family = resolveFamily(type);\n\n if (family === undefined) {\n return type;\n } // Use the latest known implementation.\n\n\n return family.current;\n }\n}\nfunction resolveClassForHotReloading(type) {\n // No implementation differences.\n return resolveFunctionForHotReloading(type);\n}\nfunction resolveForwardRefForHotReloading(type) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return type;\n }\n\n var family = resolveFamily(type);\n\n if (family === undefined) {\n // Check if we're dealing with a real forwardRef. Don't want to crash early.\n if (type !== null && type !== undefined && typeof type.render === 'function') {\n // ForwardRef is special because its resolved .type is an object,\n // but it's possible that we only have its inner render function in the map.\n // If that inner render function is different, we'll build a new forwardRef type.\n var currentRender = resolveFunctionForHotReloading(type.render);\n\n if (type.render !== currentRender) {\n var syntheticType = {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: currentRender\n };\n\n if (type.displayName !== undefined) {\n syntheticType.displayName = type.displayName;\n }\n\n return syntheticType;\n }\n }\n\n return type;\n } // Use the latest known implementation.\n\n\n return family.current;\n }\n}\nfunction isCompatibleFamilyForHotReloading(fiber, element) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return false;\n }\n\n var prevType = fiber.elementType;\n var nextType = element.type; // If we got here, we know types aren't === equal.\n\n var needsCompareFamilies = false;\n var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null;\n\n switch (fiber.tag) {\n case ClassComponent:\n {\n if (typeof nextType === 'function') {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case FunctionComponent:\n {\n if (typeof nextType === 'function') {\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n // We don't know the inner type yet.\n // We're going to assume that the lazy inner type is stable,\n // and so it is sufficient to avoid reconciling it away.\n // We're not going to unwrap or actually use the new lazy type.\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case ForwardRef:\n {\n if ($$typeofNextType === REACT_FORWARD_REF_TYPE) {\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case MemoComponent:\n case SimpleMemoComponent:\n {\n if ($$typeofNextType === REACT_MEMO_TYPE) {\n // TODO: if it was but can no longer be simple,\n // we shouldn't set this.\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n default:\n return false;\n } // Check if both types have a family and it's the same one.\n\n\n if (needsCompareFamilies) {\n // Note: memo() and forwardRef() we'll compare outer rather than inner type.\n // This means both of them need to be registered to preserve state.\n // If we unwrapped and compared the inner types for wrappers instead,\n // then we would risk falsely saying two separate memo(Foo)\n // calls are equivalent because they wrap the same Foo function.\n var prevFamily = resolveFamily(prevType);\n\n if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) {\n return true;\n }\n }\n\n return false;\n }\n}\nfunction markFailedErrorBoundaryForHotReloading(fiber) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return;\n }\n\n if (typeof WeakSet !== 'function') {\n return;\n }\n\n if (failedBoundaries === null) {\n failedBoundaries = new WeakSet();\n }\n\n failedBoundaries.add(fiber);\n }\n}\nvar scheduleRefresh = function (root, update) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return;\n }\n\n var staleFamilies = update.staleFamilies,\n updatedFamilies = update.updatedFamilies;\n flushPassiveEffects();\n flushSync(function () {\n scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies);\n });\n }\n};\nvar scheduleRoot = function (root, element) {\n {\n if (root.context !== emptyContextObject) {\n // Super edge case: root has a legacy _renderSubtree context\n // but we don't know the parentComponent so we can't pass it.\n // Just ignore. We'll delete this with _renderSubtree code path later.\n return;\n }\n\n flushPassiveEffects();\n flushSync(function () {\n updateContainer(element, root, null, null);\n });\n }\n};\n\nfunction scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) {\n {\n var alternate = fiber.alternate,\n child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type;\n var candidateType = null;\n\n switch (tag) {\n case FunctionComponent:\n case SimpleMemoComponent:\n case ClassComponent:\n candidateType = type;\n break;\n\n case ForwardRef:\n candidateType = type.render;\n break;\n }\n\n if (resolveFamily === null) {\n throw new Error('Expected resolveFamily to be set during hot reload.');\n }\n\n var needsRender = false;\n var needsRemount = false;\n\n if (candidateType !== null) {\n var family = resolveFamily(candidateType);\n\n if (family !== undefined) {\n if (staleFamilies.has(family)) {\n needsRemount = true;\n } else if (updatedFamilies.has(family)) {\n if (tag === ClassComponent) {\n needsRemount = true;\n } else {\n needsRender = true;\n }\n }\n }\n }\n\n if (failedBoundaries !== null) {\n if (failedBoundaries.has(fiber) || alternate !== null && failedBoundaries.has(alternate)) {\n needsRemount = true;\n }\n }\n\n if (needsRemount) {\n fiber._debugNeedsRemount = true;\n }\n\n if (needsRemount || needsRender) {\n var _root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (_root !== null) {\n scheduleUpdateOnFiber(_root, fiber, SyncLane, NoTimestamp);\n }\n }\n\n if (child !== null && !needsRemount) {\n scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies);\n }\n\n if (sibling !== null) {\n scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies);\n }\n }\n}\n\nvar findHostInstancesForRefresh = function (root, families) {\n {\n var hostInstances = new Set();\n var types = new Set(families.map(function (family) {\n return family.current;\n }));\n findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances);\n return hostInstances;\n }\n};\n\nfunction findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) {\n {\n var child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type;\n var candidateType = null;\n\n switch (tag) {\n case FunctionComponent:\n case SimpleMemoComponent:\n case ClassComponent:\n candidateType = type;\n break;\n\n case ForwardRef:\n candidateType = type.render;\n break;\n }\n\n var didMatch = false;\n\n if (candidateType !== null) {\n if (types.has(candidateType)) {\n didMatch = true;\n }\n }\n\n if (didMatch) {\n // We have a match. This only drills down to the closest host components.\n // There's no need to search deeper because for the purpose of giving\n // visual feedback, \"flashing\" outermost parent rectangles is sufficient.\n findHostInstancesForFiberShallowly(fiber, hostInstances);\n } else {\n // If there's no match, maybe there will be one further down in the child tree.\n if (child !== null) {\n findHostInstancesForMatchingFibersRecursively(child, types, hostInstances);\n }\n }\n\n if (sibling !== null) {\n findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances);\n }\n }\n}\n\nfunction findHostInstancesForFiberShallowly(fiber, hostInstances) {\n {\n var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances);\n\n if (foundHostInstances) {\n return;\n } // If we didn't find any host children, fallback to closest host parent.\n\n\n var node = fiber;\n\n while (true) {\n switch (node.tag) {\n case HostComponent:\n hostInstances.add(node.stateNode);\n return;\n\n case HostPortal:\n hostInstances.add(node.stateNode.containerInfo);\n return;\n\n case HostRoot:\n hostInstances.add(node.stateNode.containerInfo);\n return;\n }\n\n if (node.return === null) {\n throw new Error('Expected to reach root first.');\n }\n\n node = node.return;\n }\n }\n}\n\nfunction findChildHostInstancesForFiberShallowly(fiber, hostInstances) {\n {\n var node = fiber;\n var foundHostInstances = false;\n\n while (true) {\n if (node.tag === HostComponent) {\n // We got a match.\n foundHostInstances = true;\n hostInstances.add(node.stateNode); // There may still be more, so keep searching.\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === fiber) {\n return foundHostInstances;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === fiber) {\n return foundHostInstances;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n\n return false;\n}\n\nvar hasBadMapPolyfill;\n\n{\n hasBadMapPolyfill = false;\n\n try {\n var nonExtensibleObject = Object.preventExtensions({});\n /* eslint-disable no-new */\n\n new Map([[nonExtensibleObject, null]]);\n new Set([nonExtensibleObject]);\n /* eslint-enable no-new */\n } catch (e) {\n // TODO: Consider warning about bad polyfills\n hasBadMapPolyfill = true;\n }\n}\n\nfunction FiberNode(tag, pendingProps, key, mode) {\n // Instance\n this.tag = tag;\n this.key = key;\n this.elementType = null;\n this.type = null;\n this.stateNode = null; // Fiber\n\n this.return = null;\n this.child = null;\n this.sibling = null;\n this.index = 0;\n this.ref = null;\n this.pendingProps = pendingProps;\n this.memoizedProps = null;\n this.updateQueue = null;\n this.memoizedState = null;\n this.dependencies = null;\n this.mode = mode; // Effects\n\n this.flags = NoFlags;\n this.subtreeFlags = NoFlags;\n this.deletions = null;\n this.lanes = NoLanes;\n this.childLanes = NoLanes;\n this.alternate = null;\n\n {\n // Note: The following is done to avoid a v8 performance cliff.\n //\n // Initializing the fields below to smis and later updating them with\n // double values will cause Fibers to end up having separate shapes.\n // This behavior/bug has something to do with Object.preventExtension().\n // Fortunately this only impacts DEV builds.\n // Unfortunately it makes React unusably slow for some applications.\n // To work around this, initialize the fields below with doubles.\n //\n // Learn more about this here:\n // https://github.com/facebook/react/issues/14365\n // https://bugs.chromium.org/p/v8/issues/detail?id=8538\n this.actualDuration = Number.NaN;\n this.actualStartTime = Number.NaN;\n this.selfBaseDuration = Number.NaN;\n this.treeBaseDuration = Number.NaN; // It's okay to replace the initial doubles with smis after initialization.\n // This won't trigger the performance cliff mentioned above,\n // and it simplifies other profiler code (including DevTools).\n\n this.actualDuration = 0;\n this.actualStartTime = -1;\n this.selfBaseDuration = 0;\n this.treeBaseDuration = 0;\n }\n\n {\n // This isn't directly used but is handy for debugging internals:\n this._debugSource = null;\n this._debugOwner = null;\n this._debugNeedsRemount = false;\n this._debugHookTypes = null;\n\n if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {\n Object.preventExtensions(this);\n }\n }\n} // This is a constructor function, rather than a POJO constructor, still\n// please ensure we do the following:\n// 1) Nobody should add any instance methods on this. Instance methods can be\n// more difficult to predict when they get optimized and they are almost\n// never inlined properly in static compilers.\n// 2) Nobody should rely on `instanceof Fiber` for type testing. We should\n// always know when it is a fiber.\n// 3) We might want to experiment with using numeric keys since they are easier\n// to optimize in a non-JIT environment.\n// 4) We can easily go from a constructor to a createFiber object literal if that\n// is faster.\n// 5) It should be easy to port this to a C struct and keep a C implementation\n// compatible.\n\n\nvar createFiber = function (tag, pendingProps, key, mode) {\n // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors\n return new FiberNode(tag, pendingProps, key, mode);\n};\n\nfunction shouldConstruct$1(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction isSimpleFunctionComponent(type) {\n return typeof type === 'function' && !shouldConstruct$1(type) && type.defaultProps === undefined;\n}\nfunction resolveLazyComponentTag(Component) {\n if (typeof Component === 'function') {\n return shouldConstruct$1(Component) ? ClassComponent : FunctionComponent;\n } else if (Component !== undefined && Component !== null) {\n var $$typeof = Component.$$typeof;\n\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n return ForwardRef;\n }\n\n if ($$typeof === REACT_MEMO_TYPE) {\n return MemoComponent;\n }\n }\n\n return IndeterminateComponent;\n} // This is used to create an alternate fiber to do work on.\n\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n\n if (workInProgress === null) {\n // We use a double buffering pooling technique because we know that we'll\n // only ever need at most two versions of a tree. We pool the \"other\" unused\n // node that we're free to reuse. This is lazily created to avoid allocating\n // extra objects for things that are never updated. It also allow us to\n // reclaim the extra memory if needed.\n workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode);\n workInProgress.elementType = current.elementType;\n workInProgress.type = current.type;\n workInProgress.stateNode = current.stateNode;\n\n {\n // DEV-only fields\n workInProgress._debugSource = current._debugSource;\n workInProgress._debugOwner = current._debugOwner;\n workInProgress._debugHookTypes = current._debugHookTypes;\n }\n\n workInProgress.alternate = current;\n current.alternate = workInProgress;\n } else {\n workInProgress.pendingProps = pendingProps; // Needed because Blocks store data on type.\n\n workInProgress.type = current.type; // We already have an alternate.\n // Reset the effect tag.\n\n workInProgress.flags = NoFlags; // The effects are no longer valid.\n\n workInProgress.subtreeFlags = NoFlags;\n workInProgress.deletions = null;\n\n {\n // We intentionally reset, rather than copy, actualDuration & actualStartTime.\n // This prevents time from endlessly accumulating in new commits.\n // This has the downside of resetting values for different priority renders,\n // But works for yielding (the common case) and should support resuming.\n workInProgress.actualDuration = 0;\n workInProgress.actualStartTime = -1;\n }\n } // Reset all effects except static ones.\n // Static effects are not specific to a render.\n\n\n workInProgress.flags = current.flags & StaticMask;\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so\n // it cannot be shared with the current fiber.\n\n var currentDependencies = current.dependencies;\n workInProgress.dependencies = currentDependencies === null ? null : {\n lanes: currentDependencies.lanes,\n firstContext: currentDependencies.firstContext\n }; // These will be overridden during the parent's reconciliation\n\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n\n {\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n }\n\n {\n workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n case FunctionComponent:\n case SimpleMemoComponent:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n\n case ClassComponent:\n workInProgress.type = resolveClassForHotReloading(current.type);\n break;\n\n case ForwardRef:\n workInProgress.type = resolveForwardRefForHotReloading(current.type);\n break;\n }\n }\n\n return workInProgress;\n} // Used to reuse a Fiber for a second pass.\n\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n // This resets the Fiber to what createFiber or createWorkInProgress would\n // have set the values to before during the first pass. Ideally this wouldn't\n // be necessary but unfortunately many code paths reads from the workInProgress\n // when they should be reading from current and writing to workInProgress.\n // We assume pendingProps, index, key, ref, return are still untouched to\n // avoid doing another reconciliation.\n // Reset the effect flags but keep any Placement tags, since that's something\n // that child fiber is setting, not the reconciliation.\n workInProgress.flags &= StaticMask | Placement; // The effects are no longer valid.\n\n var current = workInProgress.alternate;\n\n if (current === null) {\n // Reset to createFiber's initial values.\n workInProgress.childLanes = NoLanes;\n workInProgress.lanes = renderLanes;\n workInProgress.child = null;\n workInProgress.subtreeFlags = NoFlags;\n workInProgress.memoizedProps = null;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.dependencies = null;\n workInProgress.stateNode = null;\n\n {\n // Note: We don't reset the actualTime counts. It's useful to accumulate\n // actual time across multiple render passes.\n workInProgress.selfBaseDuration = 0;\n workInProgress.treeBaseDuration = 0;\n }\n } else {\n // Reset to the cloned values that createWorkInProgress would've.\n workInProgress.childLanes = current.childLanes;\n workInProgress.lanes = current.lanes;\n workInProgress.child = current.child;\n workInProgress.subtreeFlags = NoFlags;\n workInProgress.deletions = null;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue; // Needed because Blocks store data on type.\n\n workInProgress.type = current.type; // Clone the dependencies object. This is mutated during the render phase, so\n // it cannot be shared with the current fiber.\n\n var currentDependencies = current.dependencies;\n workInProgress.dependencies = currentDependencies === null ? null : {\n lanes: currentDependencies.lanes,\n firstContext: currentDependencies.firstContext\n };\n\n {\n // Note: We don't reset the actualTime counts. It's useful to accumulate\n // actual time across multiple render passes.\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n }\n }\n\n return workInProgress;\n}\nfunction createHostRootFiber(tag, isStrictMode, concurrentUpdatesByDefaultOverride) {\n var mode;\n\n if (tag === ConcurrentRoot) {\n mode = ConcurrentMode;\n\n if (isStrictMode === true) {\n mode |= StrictLegacyMode;\n\n {\n mode |= StrictEffectsMode;\n }\n }\n } else {\n mode = NoMode;\n }\n\n if ( isDevToolsPresent) {\n // Always collect profile timings when DevTools are present.\n // This enables DevTools to start capturing timing at any point–\n // Without some nodes in the tree having empty base times.\n mode |= ProfileMode;\n }\n\n return createFiber(HostRoot, null, null, mode);\n}\nfunction createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, lanes) {\n var fiberTag = IndeterminateComponent; // The resolved type is set if we know what the final type will be. I.e. it's not lazy.\n\n var resolvedType = type;\n\n if (typeof type === 'function') {\n if (shouldConstruct$1(type)) {\n fiberTag = ClassComponent;\n\n {\n resolvedType = resolveClassForHotReloading(resolvedType);\n }\n } else {\n {\n resolvedType = resolveFunctionForHotReloading(resolvedType);\n }\n }\n } else if (typeof type === 'string') {\n fiberTag = HostComponent;\n } else {\n getTag: switch (type) {\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n\n case REACT_STRICT_MODE_TYPE:\n fiberTag = Mode;\n mode |= StrictLegacyMode;\n\n if ( (mode & ConcurrentMode) !== NoMode) {\n // Strict effects should never run on legacy roots\n mode |= StrictEffectsMode;\n }\n\n break;\n\n case REACT_PROFILER_TYPE:\n return createFiberFromProfiler(pendingProps, mode, lanes, key);\n\n case REACT_SUSPENSE_TYPE:\n return createFiberFromSuspense(pendingProps, mode, lanes, key);\n\n case REACT_SUSPENSE_LIST_TYPE:\n return createFiberFromSuspenseList(pendingProps, mode, lanes, key);\n\n case REACT_OFFSCREEN_TYPE:\n return createFiberFromOffscreen(pendingProps, mode, lanes, key);\n\n case REACT_LEGACY_HIDDEN_TYPE:\n\n // eslint-disable-next-line no-fallthrough\n\n case REACT_SCOPE_TYPE:\n\n // eslint-disable-next-line no-fallthrough\n\n case REACT_CACHE_TYPE:\n\n // eslint-disable-next-line no-fallthrough\n\n case REACT_TRACING_MARKER_TYPE:\n\n // eslint-disable-next-line no-fallthrough\n\n case REACT_DEBUG_TRACING_MODE_TYPE:\n\n // eslint-disable-next-line no-fallthrough\n\n default:\n {\n if (typeof type === 'object' && type !== null) {\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n fiberTag = ContextProvider;\n break getTag;\n\n case REACT_CONTEXT_TYPE:\n // This is a consumer\n fiberTag = ContextConsumer;\n break getTag;\n\n case REACT_FORWARD_REF_TYPE:\n fiberTag = ForwardRef;\n\n {\n resolvedType = resolveForwardRefForHotReloading(resolvedType);\n }\n\n break getTag;\n\n case REACT_MEMO_TYPE:\n fiberTag = MemoComponent;\n break getTag;\n\n case REACT_LAZY_TYPE:\n fiberTag = LazyComponent;\n resolvedType = null;\n break getTag;\n }\n }\n\n var info = '';\n\n {\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and \" + 'named imports.';\n }\n\n var ownerName = owner ? getComponentNameFromFiber(owner) : null;\n\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n }\n\n throw new Error('Element type is invalid: expected a string (for built-in ' + 'components) or a class/function (for composite components) ' + (\"but got: \" + (type == null ? type : typeof type) + \".\" + info));\n }\n }\n }\n\n var fiber = createFiber(fiberTag, pendingProps, key, mode);\n fiber.elementType = type;\n fiber.type = resolvedType;\n fiber.lanes = lanes;\n\n {\n fiber._debugOwner = owner;\n }\n\n return fiber;\n}\nfunction createFiberFromElement(element, mode, lanes) {\n var owner = null;\n\n {\n owner = element._owner;\n }\n\n var type = element.type;\n var key = element.key;\n var pendingProps = element.props;\n var fiber = createFiberFromTypeAndProps(type, key, pendingProps, owner, mode, lanes);\n\n {\n fiber._debugSource = element._source;\n fiber._debugOwner = element._owner;\n }\n\n return fiber;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n var fiber = createFiber(Fragment, elements, key, mode);\n fiber.lanes = lanes;\n return fiber;\n}\n\nfunction createFiberFromProfiler(pendingProps, mode, lanes, key) {\n {\n if (typeof pendingProps.id !== 'string') {\n error('Profiler must specify an \"id\" of type `string` as a prop. Received the type `%s` instead.', typeof pendingProps.id);\n }\n }\n\n var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode);\n fiber.elementType = REACT_PROFILER_TYPE;\n fiber.lanes = lanes;\n\n {\n fiber.stateNode = {\n effectDuration: 0,\n passiveEffectDuration: 0\n };\n }\n\n return fiber;\n}\n\nfunction createFiberFromSuspense(pendingProps, mode, lanes, key) {\n var fiber = createFiber(SuspenseComponent, pendingProps, key, mode);\n fiber.elementType = REACT_SUSPENSE_TYPE;\n fiber.lanes = lanes;\n return fiber;\n}\nfunction createFiberFromSuspenseList(pendingProps, mode, lanes, key) {\n var fiber = createFiber(SuspenseListComponent, pendingProps, key, mode);\n fiber.elementType = REACT_SUSPENSE_LIST_TYPE;\n fiber.lanes = lanes;\n return fiber;\n}\nfunction createFiberFromOffscreen(pendingProps, mode, lanes, key) {\n var fiber = createFiber(OffscreenComponent, pendingProps, key, mode);\n fiber.elementType = REACT_OFFSCREEN_TYPE;\n fiber.lanes = lanes;\n var primaryChildInstance = {\n isHidden: false\n };\n fiber.stateNode = primaryChildInstance;\n return fiber;\n}\nfunction createFiberFromText(content, mode, lanes) {\n var fiber = createFiber(HostText, content, null, mode);\n fiber.lanes = lanes;\n return fiber;\n}\nfunction createFiberFromHostInstanceForDeletion() {\n var fiber = createFiber(HostComponent, null, null, NoMode);\n fiber.elementType = 'DELETED';\n return fiber;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n var fiber = createFiber(DehydratedFragment, null, null, NoMode);\n fiber.stateNode = dehydratedNode;\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n var pendingProps = portal.children !== null ? portal.children : [];\n var fiber = createFiber(HostPortal, pendingProps, portal.key, mode);\n fiber.lanes = lanes;\n fiber.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n // Used by persistent updates\n implementation: portal.implementation\n };\n return fiber;\n} // Used for stashing WIP properties to replay failed work in DEV.\n\nfunction assignFiberPropertiesInDEV(target, source) {\n if (target === null) {\n // This Fiber's initial properties will always be overwritten.\n // We only use a Fiber to ensure the same hidden class so DEV isn't slow.\n target = createFiber(IndeterminateComponent, null, null, NoMode);\n } // This is intentionally written as a list of all properties.\n // We tried to use Object.assign() instead but this is called in\n // the hottest path, and Object.assign() was too slow:\n // https://github.com/facebook/react/issues/12502\n // This code is DEV-only so size is not a concern.\n\n\n target.tag = source.tag;\n target.key = source.key;\n target.elementType = source.elementType;\n target.type = source.type;\n target.stateNode = source.stateNode;\n target.return = source.return;\n target.child = source.child;\n target.sibling = source.sibling;\n target.index = source.index;\n target.ref = source.ref;\n target.pendingProps = source.pendingProps;\n target.memoizedProps = source.memoizedProps;\n target.updateQueue = source.updateQueue;\n target.memoizedState = source.memoizedState;\n target.dependencies = source.dependencies;\n target.mode = source.mode;\n target.flags = source.flags;\n target.subtreeFlags = source.subtreeFlags;\n target.deletions = source.deletions;\n target.lanes = source.lanes;\n target.childLanes = source.childLanes;\n target.alternate = source.alternate;\n\n {\n target.actualDuration = source.actualDuration;\n target.actualStartTime = source.actualStartTime;\n target.selfBaseDuration = source.selfBaseDuration;\n target.treeBaseDuration = source.treeBaseDuration;\n }\n\n target._debugSource = source._debugSource;\n target._debugOwner = source._debugOwner;\n target._debugNeedsRemount = source._debugNeedsRemount;\n target._debugHookTypes = source._debugHookTypes;\n return target;\n}\n\nfunction FiberRootNode(containerInfo, tag, hydrate, identifierPrefix, onRecoverableError) {\n this.tag = tag;\n this.containerInfo = containerInfo;\n this.pendingChildren = null;\n this.current = null;\n this.pingCache = null;\n this.finishedWork = null;\n this.timeoutHandle = noTimeout;\n this.context = null;\n this.pendingContext = null;\n this.callbackNode = null;\n this.callbackPriority = NoLane;\n this.eventTimes = createLaneMap(NoLanes);\n this.expirationTimes = createLaneMap(NoTimestamp);\n this.pendingLanes = NoLanes;\n this.suspendedLanes = NoLanes;\n this.pingedLanes = NoLanes;\n this.expiredLanes = NoLanes;\n this.mutableReadLanes = NoLanes;\n this.finishedLanes = NoLanes;\n this.entangledLanes = NoLanes;\n this.entanglements = createLaneMap(NoLanes);\n this.identifierPrefix = identifierPrefix;\n this.onRecoverableError = onRecoverableError;\n\n {\n this.mutableSourceEagerHydrationData = null;\n }\n\n {\n this.effectDuration = 0;\n this.passiveEffectDuration = 0;\n }\n\n {\n this.memoizedUpdaters = new Set();\n var pendingUpdatersLaneMap = this.pendingUpdatersLaneMap = [];\n\n for (var _i = 0; _i < TotalLanes; _i++) {\n pendingUpdatersLaneMap.push(new Set());\n }\n }\n\n {\n switch (tag) {\n case ConcurrentRoot:\n this._debugRootType = hydrate ? 'hydrateRoot()' : 'createRoot()';\n break;\n\n case LegacyRoot:\n this._debugRootType = hydrate ? 'hydrate()' : 'render()';\n break;\n }\n }\n}\n\nfunction createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, // TODO: We have several of these arguments that are conceptually part of the\n// host config, but because they are passed in at runtime, we have to thread\n// them through the root constructor. Perhaps we should put them all into a\n// single type, like a DynamicHostConfig that is defined by the renderer.\nidentifierPrefix, onRecoverableError, transitionCallbacks) {\n var root = new FiberRootNode(containerInfo, tag, hydrate, identifierPrefix, onRecoverableError);\n // stateNode is any.\n\n\n var uninitializedFiber = createHostRootFiber(tag, isStrictMode);\n root.current = uninitializedFiber;\n uninitializedFiber.stateNode = root;\n\n {\n var _initialState = {\n element: initialChildren,\n isDehydrated: hydrate,\n cache: null,\n // not enabled yet\n transitions: null,\n pendingSuspenseBoundaries: null\n };\n uninitializedFiber.memoizedState = _initialState;\n }\n\n initializeUpdateQueue(uninitializedFiber);\n return root;\n}\n\nvar ReactVersion = '18.2.0';\n\nfunction createPortal(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.\nimplementation) {\n var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n {\n checkKeyStringCoercion(key);\n }\n\n return {\n // This tag allow us to uniquely identify this as a React Portal\n $$typeof: REACT_PORTAL_TYPE,\n key: key == null ? null : '' + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\n\nvar didWarnAboutNestedUpdates;\nvar didWarnAboutFindNodeInStrictMode;\n\n{\n didWarnAboutNestedUpdates = false;\n didWarnAboutFindNodeInStrictMode = {};\n}\n\nfunction getContextForSubtree(parentComponent) {\n if (!parentComponent) {\n return emptyContextObject;\n }\n\n var fiber = get(parentComponent);\n var parentContext = findCurrentUnmaskedContext(fiber);\n\n if (fiber.tag === ClassComponent) {\n var Component = fiber.type;\n\n if (isContextProvider(Component)) {\n return processChildContext(fiber, Component, parentContext);\n }\n }\n\n return parentContext;\n}\n\nfunction findHostInstanceWithWarning(component, methodName) {\n {\n var fiber = get(component);\n\n if (fiber === undefined) {\n if (typeof component.render === 'function') {\n throw new Error('Unable to find node on an unmounted component.');\n } else {\n var keys = Object.keys(component).join(',');\n throw new Error(\"Argument appears to not be a ReactComponent. Keys: \" + keys);\n }\n }\n\n var hostFiber = findCurrentHostFiber(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n if (hostFiber.mode & StrictLegacyMode) {\n var componentName = getComponentNameFromFiber(fiber) || 'Component';\n\n if (!didWarnAboutFindNodeInStrictMode[componentName]) {\n didWarnAboutFindNodeInStrictMode[componentName] = true;\n var previousFiber = current;\n\n try {\n setCurrentFiber(hostFiber);\n\n if (fiber.mode & StrictLegacyMode) {\n error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);\n } else {\n error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);\n }\n } finally {\n // Ideally this should reset to previous but this shouldn't be called in\n // render and there's another warning for that anyway.\n if (previousFiber) {\n setCurrentFiber(previousFiber);\n } else {\n resetCurrentFiber();\n }\n }\n }\n }\n\n return hostFiber.stateNode;\n }\n}\n\nfunction createContainer(containerInfo, tag, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks) {\n var hydrate = false;\n var initialChildren = null;\n return createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);\n}\nfunction createHydrationContainer(initialChildren, // TODO: Remove `callback` when we delete legacy mode.\ncallback, containerInfo, tag, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks) {\n var hydrate = true;\n var root = createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError); // TODO: Move this to FiberRoot constructor\n\n root.context = getContextForSubtree(null); // Schedule the initial render. In a hydration root, this is different from\n // a regular update because the initial render must match was was rendered\n // on the server.\n // NOTE: This update intentionally doesn't have a payload. We're only using\n // the update to schedule work on the root fiber (and, for legacy roots, to\n // enqueue the callback if one is provided).\n\n var current = root.current;\n var eventTime = requestEventTime();\n var lane = requestUpdateLane(current);\n var update = createUpdate(eventTime, lane);\n update.callback = callback !== undefined && callback !== null ? callback : null;\n enqueueUpdate(current, update, lane);\n scheduleInitialHydrationOnRoot(root, lane, eventTime);\n return root;\n}\nfunction updateContainer(element, container, parentComponent, callback) {\n {\n onScheduleRoot(container, element);\n }\n\n var current$1 = container.current;\n var eventTime = requestEventTime();\n var lane = requestUpdateLane(current$1);\n\n {\n markRenderScheduled(lane);\n }\n\n var context = getContextForSubtree(parentComponent);\n\n if (container.context === null) {\n container.context = context;\n } else {\n container.pendingContext = context;\n }\n\n {\n if (isRendering && current !== null && !didWarnAboutNestedUpdates) {\n didWarnAboutNestedUpdates = true;\n\n error('Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\\n\\n' + 'Check the render method of %s.', getComponentNameFromFiber(current) || 'Unknown');\n }\n }\n\n var update = createUpdate(eventTime, lane); // Caution: React DevTools currently depends on this property\n // being called \"element\".\n\n update.payload = {\n element: element\n };\n callback = callback === undefined ? null : callback;\n\n if (callback !== null) {\n {\n if (typeof callback !== 'function') {\n error('render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback);\n }\n }\n\n update.callback = callback;\n }\n\n var root = enqueueUpdate(current$1, update, lane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, current$1, lane, eventTime);\n entangleTransitions(root, current$1, lane);\n }\n\n return lane;\n}\nfunction getPublicRootInstance(container) {\n var containerFiber = container.current;\n\n if (!containerFiber.child) {\n return null;\n }\n\n switch (containerFiber.child.tag) {\n case HostComponent:\n return getPublicInstance(containerFiber.child.stateNode);\n\n default:\n return containerFiber.child.stateNode;\n }\n}\nfunction attemptSynchronousHydration$1(fiber) {\n switch (fiber.tag) {\n case HostRoot:\n {\n var root = fiber.stateNode;\n\n if (isRootDehydrated(root)) {\n // Flush the first scheduled \"update\".\n var lanes = getHighestPriorityPendingLanes(root);\n flushRoot(root, lanes);\n }\n\n break;\n }\n\n case SuspenseComponent:\n {\n flushSync(function () {\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n var eventTime = requestEventTime();\n scheduleUpdateOnFiber(root, fiber, SyncLane, eventTime);\n }\n }); // If we're still blocked after this, we need to increase\n // the priority of any promises resolving within this\n // boundary so that they next attempt also has higher pri.\n\n var retryLane = SyncLane;\n markRetryLaneIfNotHydrated(fiber, retryLane);\n break;\n }\n }\n}\n\nfunction markRetryLaneImpl(fiber, retryLane) {\n var suspenseState = fiber.memoizedState;\n\n if (suspenseState !== null && suspenseState.dehydrated !== null) {\n suspenseState.retryLane = higherPriorityLane(suspenseState.retryLane, retryLane);\n }\n} // Increases the priority of thenables when they resolve within this boundary.\n\n\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n markRetryLaneImpl(fiber, retryLane);\n var alternate = fiber.alternate;\n\n if (alternate) {\n markRetryLaneImpl(alternate, retryLane);\n }\n}\nfunction attemptContinuousHydration$1(fiber) {\n if (fiber.tag !== SuspenseComponent) {\n // We ignore HostRoots here because we can't increase\n // their priority and they should not suspend on I/O,\n // since you have to wrap anything that might suspend in\n // Suspense.\n return;\n }\n\n var lane = SelectiveHydrationLane;\n var root = enqueueConcurrentRenderForLane(fiber, lane);\n\n if (root !== null) {\n var eventTime = requestEventTime();\n scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n }\n\n markRetryLaneIfNotHydrated(fiber, lane);\n}\nfunction attemptHydrationAtCurrentPriority$1(fiber) {\n if (fiber.tag !== SuspenseComponent) {\n // We ignore HostRoots here because we can't increase\n // their priority other than synchronously flush it.\n return;\n }\n\n var lane = requestUpdateLane(fiber);\n var root = enqueueConcurrentRenderForLane(fiber, lane);\n\n if (root !== null) {\n var eventTime = requestEventTime();\n scheduleUpdateOnFiber(root, fiber, lane, eventTime);\n }\n\n markRetryLaneIfNotHydrated(fiber, lane);\n}\nfunction findHostInstanceWithNoPortals(fiber) {\n var hostFiber = findCurrentHostFiberWithNoPortals(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n return hostFiber.stateNode;\n}\n\nvar shouldErrorImpl = function (fiber) {\n return null;\n};\n\nfunction shouldError(fiber) {\n return shouldErrorImpl(fiber);\n}\n\nvar shouldSuspendImpl = function (fiber) {\n return false;\n};\n\nfunction shouldSuspend(fiber) {\n return shouldSuspendImpl(fiber);\n}\nvar overrideHookState = null;\nvar overrideHookStateDeletePath = null;\nvar overrideHookStateRenamePath = null;\nvar overrideProps = null;\nvar overridePropsDeletePath = null;\nvar overridePropsRenamePath = null;\nvar scheduleUpdate = null;\nvar setErrorHandler = null;\nvar setSuspenseHandler = null;\n\n{\n var copyWithDeleteImpl = function (obj, path, index) {\n var key = path[index];\n var updated = isArray(obj) ? obj.slice() : assign({}, obj);\n\n if (index + 1 === path.length) {\n if (isArray(updated)) {\n updated.splice(key, 1);\n } else {\n delete updated[key];\n }\n\n return updated;\n } // $FlowFixMe number or string is fine here\n\n\n updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);\n return updated;\n };\n\n var copyWithDelete = function (obj, path) {\n return copyWithDeleteImpl(obj, path, 0);\n };\n\n var copyWithRenameImpl = function (obj, oldPath, newPath, index) {\n var oldKey = oldPath[index];\n var updated = isArray(obj) ? obj.slice() : assign({}, obj);\n\n if (index + 1 === oldPath.length) {\n var newKey = newPath[index]; // $FlowFixMe number or string is fine here\n\n updated[newKey] = updated[oldKey];\n\n if (isArray(updated)) {\n updated.splice(oldKey, 1);\n } else {\n delete updated[oldKey];\n }\n } else {\n // $FlowFixMe number or string is fine here\n updated[oldKey] = copyWithRenameImpl( // $FlowFixMe number or string is fine here\n obj[oldKey], oldPath, newPath, index + 1);\n }\n\n return updated;\n };\n\n var copyWithRename = function (obj, oldPath, newPath) {\n if (oldPath.length !== newPath.length) {\n warn('copyWithRename() expects paths of the same length');\n\n return;\n } else {\n for (var i = 0; i < newPath.length - 1; i++) {\n if (oldPath[i] !== newPath[i]) {\n warn('copyWithRename() expects paths to be the same except for the deepest key');\n\n return;\n }\n }\n }\n\n return copyWithRenameImpl(obj, oldPath, newPath, 0);\n };\n\n var copyWithSetImpl = function (obj, path, index, value) {\n if (index >= path.length) {\n return value;\n }\n\n var key = path[index];\n var updated = isArray(obj) ? obj.slice() : assign({}, obj); // $FlowFixMe number or string is fine here\n\n updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);\n return updated;\n };\n\n var copyWithSet = function (obj, path, value) {\n return copyWithSetImpl(obj, path, 0, value);\n };\n\n var findHook = function (fiber, id) {\n // For now, the \"id\" of stateful hooks is just the stateful hook index.\n // This may change in the future with e.g. nested hooks.\n var currentHook = fiber.memoizedState;\n\n while (currentHook !== null && id > 0) {\n currentHook = currentHook.next;\n id--;\n }\n\n return currentHook;\n }; // Support DevTools editable values for useState and useReducer.\n\n\n overrideHookState = function (fiber, id, path, value) {\n var hook = findHook(fiber, id);\n\n if (hook !== null) {\n var newState = copyWithSet(hook.memoizedState, path, value);\n hook.memoizedState = newState;\n hook.baseState = newState; // We aren't actually adding an update to the queue,\n // because there is no update we can add for useReducer hooks that won't trigger an error.\n // (There's no appropriate action type for DevTools overrides.)\n // As a result though, React will see the scheduled update as a noop and bailout.\n // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n fiber.memoizedProps = assign({}, fiber.memoizedProps);\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n }\n }\n };\n\n overrideHookStateDeletePath = function (fiber, id, path) {\n var hook = findHook(fiber, id);\n\n if (hook !== null) {\n var newState = copyWithDelete(hook.memoizedState, path);\n hook.memoizedState = newState;\n hook.baseState = newState; // We aren't actually adding an update to the queue,\n // because there is no update we can add for useReducer hooks that won't trigger an error.\n // (There's no appropriate action type for DevTools overrides.)\n // As a result though, React will see the scheduled update as a noop and bailout.\n // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n fiber.memoizedProps = assign({}, fiber.memoizedProps);\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n }\n }\n };\n\n overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {\n var hook = findHook(fiber, id);\n\n if (hook !== null) {\n var newState = copyWithRename(hook.memoizedState, oldPath, newPath);\n hook.memoizedState = newState;\n hook.baseState = newState; // We aren't actually adding an update to the queue,\n // because there is no update we can add for useReducer hooks that won't trigger an error.\n // (There's no appropriate action type for DevTools overrides.)\n // As a result though, React will see the scheduled update as a noop and bailout.\n // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n fiber.memoizedProps = assign({}, fiber.memoizedProps);\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n }\n }\n }; // Support DevTools props for function components, forwardRef, memo, host components, etc.\n\n\n overrideProps = function (fiber, path, value) {\n fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value);\n\n if (fiber.alternate) {\n fiber.alternate.pendingProps = fiber.pendingProps;\n }\n\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n }\n };\n\n overridePropsDeletePath = function (fiber, path) {\n fiber.pendingProps = copyWithDelete(fiber.memoizedProps, path);\n\n if (fiber.alternate) {\n fiber.alternate.pendingProps = fiber.pendingProps;\n }\n\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n }\n };\n\n overridePropsRenamePath = function (fiber, oldPath, newPath) {\n fiber.pendingProps = copyWithRename(fiber.memoizedProps, oldPath, newPath);\n\n if (fiber.alternate) {\n fiber.alternate.pendingProps = fiber.pendingProps;\n }\n\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n }\n };\n\n scheduleUpdate = function (fiber) {\n var root = enqueueConcurrentRenderForLane(fiber, SyncLane);\n\n if (root !== null) {\n scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);\n }\n };\n\n setErrorHandler = function (newShouldErrorImpl) {\n shouldErrorImpl = newShouldErrorImpl;\n };\n\n setSuspenseHandler = function (newShouldSuspendImpl) {\n shouldSuspendImpl = newShouldSuspendImpl;\n };\n}\n\nfunction findHostInstanceByFiber(fiber) {\n var hostFiber = findCurrentHostFiber(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n return hostFiber.stateNode;\n}\n\nfunction emptyFindFiberByHostInstance(instance) {\n return null;\n}\n\nfunction getCurrentFiberForDevTools() {\n return current;\n}\n\nfunction injectIntoDevTools(devToolsConfig) {\n var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;\n var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\n return injectInternals({\n bundleType: devToolsConfig.bundleType,\n version: devToolsConfig.version,\n rendererPackageName: devToolsConfig.rendererPackageName,\n rendererConfig: devToolsConfig.rendererConfig,\n overrideHookState: overrideHookState,\n overrideHookStateDeletePath: overrideHookStateDeletePath,\n overrideHookStateRenamePath: overrideHookStateRenamePath,\n overrideProps: overrideProps,\n overridePropsDeletePath: overridePropsDeletePath,\n overridePropsRenamePath: overridePropsRenamePath,\n setErrorHandler: setErrorHandler,\n setSuspenseHandler: setSuspenseHandler,\n scheduleUpdate: scheduleUpdate,\n currentDispatcherRef: ReactCurrentDispatcher,\n findHostInstanceByFiber: findHostInstanceByFiber,\n findFiberByHostInstance: findFiberByHostInstance || emptyFindFiberByHostInstance,\n // React Refresh\n findHostInstancesForRefresh: findHostInstancesForRefresh ,\n scheduleRefresh: scheduleRefresh ,\n scheduleRoot: scheduleRoot ,\n setRefreshHandler: setRefreshHandler ,\n // Enables DevTools to append owner stacks to error messages in DEV mode.\n getCurrentFiber: getCurrentFiberForDevTools ,\n // Enables DevTools to detect reconciler version rather than renderer version\n // which may not match for third party renderers.\n reconcilerVersion: ReactVersion\n });\n}\n\n/* global reportError */\n\nvar defaultOnRecoverableError = typeof reportError === 'function' ? // In modern browsers, reportError will dispatch an error event,\n// emulating an uncaught JavaScript error.\nreportError : function (error) {\n // In older browsers and test environments, fallback to console.error.\n // eslint-disable-next-line react-internal/no-production-logging\n console['error'](error);\n};\n\nfunction ReactDOMRoot(internalRoot) {\n this._internalRoot = internalRoot;\n}\n\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render = function (children) {\n var root = this._internalRoot;\n\n if (root === null) {\n throw new Error('Cannot update an unmounted root.');\n }\n\n {\n if (typeof arguments[1] === 'function') {\n error('render(...): does not support the second callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n } else if (isValidContainer(arguments[1])) {\n error('You passed a container to the second argument of root.render(...). ' + \"You don't need to pass it again since you already passed it to create the root.\");\n } else if (typeof arguments[1] !== 'undefined') {\n error('You passed a second argument to root.render(...) but it only accepts ' + 'one argument.');\n }\n\n var container = root.containerInfo;\n\n if (container.nodeType !== COMMENT_NODE) {\n var hostInstance = findHostInstanceWithNoPortals(root.current);\n\n if (hostInstance) {\n if (hostInstance.parentNode !== container) {\n error('render(...): It looks like the React-rendered content of the ' + 'root container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + \"root.unmount() to empty a root's container.\");\n }\n }\n }\n }\n\n updateContainer(children, root, null, null);\n};\n\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount = function () {\n {\n if (typeof arguments[0] === 'function') {\n error('unmount(...): does not support a callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n }\n }\n\n var root = this._internalRoot;\n\n if (root !== null) {\n this._internalRoot = null;\n var container = root.containerInfo;\n\n {\n if (isAlreadyRendering()) {\n error('Attempted to synchronously unmount a root while React was already ' + 'rendering. React cannot finish unmounting the root until the ' + 'current render has completed, which may lead to a race condition.');\n }\n }\n\n flushSync(function () {\n updateContainer(null, root, null, null);\n });\n unmarkContainerAsRoot(container);\n }\n};\n\nfunction createRoot(container, options) {\n if (!isValidContainer(container)) {\n throw new Error('createRoot(...): Target container is not a DOM element.');\n }\n\n warnIfReactDOMContainerInDEV(container);\n var isStrictMode = false;\n var concurrentUpdatesByDefaultOverride = false;\n var identifierPrefix = '';\n var onRecoverableError = defaultOnRecoverableError;\n var transitionCallbacks = null;\n\n if (options !== null && options !== undefined) {\n {\n if (options.hydrate) {\n warn('hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead.');\n } else {\n if (typeof options === 'object' && options !== null && options.$$typeof === REACT_ELEMENT_TYPE) {\n error('You passed a JSX element to createRoot. You probably meant to ' + 'call root.render instead. ' + 'Example usage:\\n\\n' + ' let root = createRoot(domContainer);\\n' + ' root.render(<App />);');\n }\n }\n }\n\n if (options.unstable_strictMode === true) {\n isStrictMode = true;\n }\n\n if (options.identifierPrefix !== undefined) {\n identifierPrefix = options.identifierPrefix;\n }\n\n if (options.onRecoverableError !== undefined) {\n onRecoverableError = options.onRecoverableError;\n }\n\n if (options.transitionCallbacks !== undefined) {\n transitionCallbacks = options.transitionCallbacks;\n }\n }\n\n var root = createContainer(container, ConcurrentRoot, null, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);\n markContainerAsRoot(root.current, container);\n var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;\n listenToAllSupportedEvents(rootContainerElement);\n return new ReactDOMRoot(root);\n}\n\nfunction ReactDOMHydrationRoot(internalRoot) {\n this._internalRoot = internalRoot;\n}\n\nfunction scheduleHydration(target) {\n if (target) {\n queueExplicitHydrationTarget(target);\n }\n}\n\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = scheduleHydration;\nfunction hydrateRoot(container, initialChildren, options) {\n if (!isValidContainer(container)) {\n throw new Error('hydrateRoot(...): Target container is not a DOM element.');\n }\n\n warnIfReactDOMContainerInDEV(container);\n\n {\n if (initialChildren === undefined) {\n error('Must provide initial children as second argument to hydrateRoot. ' + 'Example usage: hydrateRoot(domContainer, <App />)');\n }\n } // For now we reuse the whole bag of options since they contain\n // the hydration callbacks.\n\n\n var hydrationCallbacks = options != null ? options : null; // TODO: Delete this option\n\n var mutableSources = options != null && options.hydratedSources || null;\n var isStrictMode = false;\n var concurrentUpdatesByDefaultOverride = false;\n var identifierPrefix = '';\n var onRecoverableError = defaultOnRecoverableError;\n\n if (options !== null && options !== undefined) {\n if (options.unstable_strictMode === true) {\n isStrictMode = true;\n }\n\n if (options.identifierPrefix !== undefined) {\n identifierPrefix = options.identifierPrefix;\n }\n\n if (options.onRecoverableError !== undefined) {\n onRecoverableError = options.onRecoverableError;\n }\n }\n\n var root = createHydrationContainer(initialChildren, null, container, ConcurrentRoot, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);\n markContainerAsRoot(root.current, container); // This can't be a comment node since hydration doesn't work on comment nodes anyway.\n\n listenToAllSupportedEvents(container);\n\n if (mutableSources) {\n for (var i = 0; i < mutableSources.length; i++) {\n var mutableSource = mutableSources[i];\n registerMutableSourceForHydration(root, mutableSource);\n }\n }\n\n return new ReactDOMHydrationRoot(root);\n}\nfunction isValidContainer(node) {\n return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || !disableCommentsAsDOMContainers ));\n} // TODO: Remove this function which also includes comment nodes.\n// We only use it in places that are currently more relaxed.\n\nfunction isValidContainerLegacy(node) {\n return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable '));\n}\n\nfunction warnIfReactDOMContainerInDEV(container) {\n {\n if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {\n error('createRoot(): Creating roots directly with document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try using a container element created ' + 'for your app.');\n }\n\n if (isContainerMarkedAsRoot(container)) {\n if (container._reactRootContainer) {\n error('You are calling ReactDOMClient.createRoot() on a container that was previously ' + 'passed to ReactDOM.render(). This is not supported.');\n } else {\n error('You are calling ReactDOMClient.createRoot() on a container that ' + 'has already been passed to createRoot() before. Instead, call ' + 'root.render() on the existing root instead if you want to update it.');\n }\n }\n }\n}\n\nvar ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner;\nvar topLevelUpdateWarnings;\n\n{\n topLevelUpdateWarnings = function (container) {\n if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {\n var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer.current);\n\n if (hostInstance) {\n if (hostInstance.parentNode !== container) {\n error('render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.');\n }\n }\n }\n\n var isRootRenderedBySomeReact = !!container._reactRootContainer;\n var rootEl = getReactRootElementInContainer(container);\n var hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));\n\n if (hasNonRootReactChild && !isRootRenderedBySomeReact) {\n error('render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.');\n }\n\n if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {\n error('render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.');\n }\n };\n}\n\nfunction getReactRootElementInContainer(container) {\n if (!container) {\n return null;\n }\n\n if (container.nodeType === DOCUMENT_NODE) {\n return container.documentElement;\n } else {\n return container.firstChild;\n }\n}\n\nfunction noopOnRecoverableError() {// This isn't reachable because onRecoverableError isn't called in the\n // legacy API.\n}\n\nfunction legacyCreateRootFromDOMContainer(container, initialChildren, parentComponent, callback, isHydrationContainer) {\n if (isHydrationContainer) {\n if (typeof callback === 'function') {\n var originalCallback = callback;\n\n callback = function () {\n var instance = getPublicRootInstance(root);\n originalCallback.call(instance);\n };\n }\n\n var root = createHydrationContainer(initialChildren, callback, container, LegacyRoot, null, // hydrationCallbacks\n false, // isStrictMode\n false, // concurrentUpdatesByDefaultOverride,\n '', // identifierPrefix\n noopOnRecoverableError);\n container._reactRootContainer = root;\n markContainerAsRoot(root.current, container);\n var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;\n listenToAllSupportedEvents(rootContainerElement);\n flushSync();\n return root;\n } else {\n // First clear any existing content.\n var rootSibling;\n\n while (rootSibling = container.lastChild) {\n container.removeChild(rootSibling);\n }\n\n if (typeof callback === 'function') {\n var _originalCallback = callback;\n\n callback = function () {\n var instance = getPublicRootInstance(_root);\n\n _originalCallback.call(instance);\n };\n }\n\n var _root = createContainer(container, LegacyRoot, null, // hydrationCallbacks\n false, // isStrictMode\n false, // concurrentUpdatesByDefaultOverride,\n '', // identifierPrefix\n noopOnRecoverableError);\n\n container._reactRootContainer = _root;\n markContainerAsRoot(_root.current, container);\n\n var _rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;\n\n listenToAllSupportedEvents(_rootContainerElement); // Initial mount should not be batched.\n\n flushSync(function () {\n updateContainer(initialChildren, _root, parentComponent, callback);\n });\n return _root;\n }\n}\n\nfunction warnOnInvalidCallback$1(callback, callerName) {\n {\n if (callback !== null && typeof callback !== 'function') {\n error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n }\n }\n}\n\nfunction legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) {\n {\n topLevelUpdateWarnings(container);\n warnOnInvalidCallback$1(callback === undefined ? null : callback, 'render');\n }\n\n var maybeRoot = container._reactRootContainer;\n var root;\n\n if (!maybeRoot) {\n // Initial mount\n root = legacyCreateRootFromDOMContainer(container, children, parentComponent, callback, forceHydrate);\n } else {\n root = maybeRoot;\n\n if (typeof callback === 'function') {\n var originalCallback = callback;\n\n callback = function () {\n var instance = getPublicRootInstance(root);\n originalCallback.call(instance);\n };\n } // Update\n\n\n updateContainer(children, root, parentComponent, callback);\n }\n\n return getPublicRootInstance(root);\n}\n\nfunction findDOMNode(componentOrElement) {\n {\n var owner = ReactCurrentOwner$3.current;\n\n if (owner !== null && owner.stateNode !== null) {\n var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;\n\n if (!warnedAboutRefsInRender) {\n error('%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentNameFromType(owner.type) || 'A component');\n }\n\n owner.stateNode._warnedAboutRefsInRender = true;\n }\n }\n\n if (componentOrElement == null) {\n return null;\n }\n\n if (componentOrElement.nodeType === ELEMENT_NODE) {\n return componentOrElement;\n }\n\n {\n return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');\n }\n}\nfunction hydrate(element, container, callback) {\n {\n error('ReactDOM.hydrate is no longer supported in React 18. Use hydrateRoot ' + 'instead. Until you switch to the new API, your app will behave as ' + \"if it's running React 17. Learn \" + 'more: https://reactjs.org/link/switch-to-createroot');\n }\n\n if (!isValidContainerLegacy(container)) {\n throw new Error('Target container is not a DOM element.');\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. ' + 'Did you mean to call hydrateRoot(container, element)?');\n }\n } // TODO: throw or warn if we couldn't hydrate?\n\n\n return legacyRenderSubtreeIntoContainer(null, element, container, true, callback);\n}\nfunction render(element, container, callback) {\n {\n error('ReactDOM.render is no longer supported in React 18. Use createRoot ' + 'instead. Until you switch to the new API, your app will behave as ' + \"if it's running React 17. Learn \" + 'more: https://reactjs.org/link/switch-to-createroot');\n }\n\n if (!isValidContainerLegacy(container)) {\n throw new Error('Target container is not a DOM element.');\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?');\n }\n }\n\n return legacyRenderSubtreeIntoContainer(null, element, container, false, callback);\n}\nfunction unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n {\n error('ReactDOM.unstable_renderSubtreeIntoContainer() is no longer supported ' + 'in React 18. Consider using a portal instead. Until you switch to ' + \"the createRoot API, your app will behave as if it's running React \" + '17. Learn more: https://reactjs.org/link/switch-to-createroot');\n }\n\n if (!isValidContainerLegacy(containerNode)) {\n throw new Error('Target container is not a DOM element.');\n }\n\n if (parentComponent == null || !has(parentComponent)) {\n throw new Error('parentComponent must be a valid React Component');\n }\n\n return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback);\n}\nfunction unmountComponentAtNode(container) {\n if (!isValidContainerLegacy(container)) {\n throw new Error('unmountComponentAtNode(...): Target container is not a DOM element.');\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. Did you mean to call root.unmount()?');\n }\n }\n\n if (container._reactRootContainer) {\n {\n var rootEl = getReactRootElementInContainer(container);\n var renderedByDifferentReact = rootEl && !getInstanceFromNode(rootEl);\n\n if (renderedByDifferentReact) {\n error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by another copy of React.');\n }\n } // Unmount should not be batched.\n\n\n flushSync(function () {\n legacyRenderSubtreeIntoContainer(null, null, container, false, function () {\n // $FlowFixMe This should probably use `delete container._reactRootContainer`\n container._reactRootContainer = null;\n unmarkContainerAsRoot(container);\n });\n }); // If you call unmountComponentAtNode twice in quick succession, you'll\n // get `true` twice. That's probably fine?\n\n return true;\n } else {\n {\n var _rootEl = getReactRootElementInContainer(container);\n\n var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode(_rootEl)); // Check if the container itself is a React root node.\n\n var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainerLegacy(container.parentNode) && !!container.parentNode._reactRootContainer;\n\n if (hasNonRootReactChild) {\n error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.');\n }\n }\n\n return false;\n }\n}\n\nsetAttemptSynchronousHydration(attemptSynchronousHydration$1);\nsetAttemptContinuousHydration(attemptContinuousHydration$1);\nsetAttemptHydrationAtCurrentPriority(attemptHydrationAtCurrentPriority$1);\nsetGetCurrentUpdatePriority(getCurrentUpdatePriority);\nsetAttemptHydrationAtPriority(runWithPriority);\n\n{\n if (typeof Map !== 'function' || // $FlowIssue Flow incorrectly thinks Map has no prototype\n Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' || // $FlowIssue Flow incorrectly thinks Set has no prototype\n Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') {\n error('React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://reactjs.org/link/react-polyfills');\n }\n}\n\nsetRestoreImplementation(restoreControlledState$3);\nsetBatchingImplementation(batchedUpdates$1, discreteUpdates, flushSync);\n\nfunction createPortal$1(children, container) {\n var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n if (!isValidContainer(container)) {\n throw new Error('Target container is not a DOM element.');\n } // TODO: pass ReactDOM portal implementation as third argument\n // $FlowFixMe The Flow type is opaque but there's no way to actually create it.\n\n\n return createPortal(children, container, null, key);\n}\n\nfunction renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback);\n}\n\nvar Internals = {\n usingClientEntryPoint: false,\n // Keep in sync with ReactTestUtils.js.\n // This is an array for better minification.\n Events: [getInstanceFromNode, getNodeFromInstance, getFiberCurrentPropsFromNode, enqueueStateRestore, restoreStateIfNeeded, batchedUpdates$1]\n};\n\nfunction createRoot$1(container, options) {\n {\n if (!Internals.usingClientEntryPoint && !false) {\n error('You are importing createRoot from \"react-dom\" which is not supported. ' + 'You should instead import it from \"react-dom/client\".');\n }\n }\n\n return createRoot(container, options);\n}\n\nfunction hydrateRoot$1(container, initialChildren, options) {\n {\n if (!Internals.usingClientEntryPoint && !false) {\n error('You are importing hydrateRoot from \"react-dom\" which is not supported. ' + 'You should instead import it from \"react-dom/client\".');\n }\n }\n\n return hydrateRoot(container, initialChildren, options);\n} // Overload the definition to the two valid signatures.\n// Warning, this opts-out of checking the function body.\n\n\n// eslint-disable-next-line no-redeclare\nfunction flushSync$1(fn) {\n {\n if (isAlreadyRendering()) {\n error('flushSync was called from inside a lifecycle method. React cannot ' + 'flush when React is already rendering. Consider moving this call to ' + 'a scheduler task or micro task.');\n }\n }\n\n return flushSync(fn);\n}\nvar foundDevTools = injectIntoDevTools({\n findFiberByHostInstance: getClosestInstanceFromNode,\n bundleType: 1 ,\n version: ReactVersion,\n rendererPackageName: 'react-dom'\n});\n\n{\n if (!foundDevTools && canUseDOM && window.top === window.self) {\n // If we're in Chrome or Firefox, provide a download link if not installed.\n if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n var protocol = window.location.protocol; // Don't warn in exotic cases like chrome-extension://.\n\n if (/^(https?|file):$/.test(protocol)) {\n // eslint-disable-next-line react-internal/no-production-logging\n console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://reactjs.org/link/react-devtools' + (protocol === 'file:' ? '\\nYou might need to use a local HTTP server (instead of file://): ' + 'https://reactjs.org/link/react-devtools-faq' : ''), 'font-weight:bold');\n }\n }\n }\n}\n\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;\nexports.createPortal = createPortal$1;\nexports.createRoot = createRoot$1;\nexports.findDOMNode = findDOMNode;\nexports.flushSync = flushSync$1;\nexports.hydrate = hydrate;\nexports.hydrateRoot = hydrateRoot$1;\nexports.render = render;\nexports.unmountComponentAtNode = unmountComponentAtNode;\nexports.unstable_batchedUpdates = batchedUpdates$1;\nexports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer;\nexports.version = ReactVersion;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLElBQUksSUFBcUM7QUFDekM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixtQkFBTyxDQUFDLDRDQUFPO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLG9EQUFXOztBQUVuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZGQUE2RixhQUFhO0FBQzFHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUcsZUFBZTtBQUNoSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSLGtEQUFrRDtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQyxrQkFBa0I7O0FBRWxCLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxxREFBcUQ7QUFDckQ7O0FBRUEsaUNBQWlDOztBQUVqQywwQ0FBMEM7O0FBRTFDLGdDQUFnQzs7QUFFaEMsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7O0FBRUEsZ0RBQWdEO0FBQ2hELGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDLGdDQUFnQzs7QUFFaEMsc0NBQXNDOztBQUV0QztBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IseUJBQXlCO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7O0FBRUEsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEI7QUFDNUI7O0FBRUEsaUJBQWlCO0FBQ2pCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRzs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZOzs7QUFHWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBLDhEQUE4RDtBQUM5RCxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFlBQVk7QUFDdkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsR0FBRztBQUNkOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0EsU0FBUztBQUNULHVCQUF1QjtBQUN2QjtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQSxTQUFTO0FBQ1Qsd0JBQXdCO0FBQ3hCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCxpQ0FBaUM7QUFDakM7QUFDQSxTQUFTO0FBQ1QsMkJBQTJCO0FBQzNCO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkRBQTJEOztBQUUzRDtBQUNBOztBQUVBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQSxnRkFBZ0Y7QUFDaEY7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOzs7QUFHbEI7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0RBQWdEO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRyxHQUFHO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7O0FBRUE7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0VBQWtFO0FBQ2xFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxvQkFBb0Isa0JBQWtCO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSwrQkFBK0I7QUFDL0I7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7OztBQUdBLHVDQUF1QztBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDJCQUEyQjtBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9CQUFvQiwyQkFBMkI7QUFDL0M7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixxQkFBcUI7QUFDMUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxzQkFBc0Isc0JBQXNCO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDOztBQUVsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0RBQWtEOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCLFdBQVcsUUFBUTtBQUNuQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QixXQUFXLFFBQVE7QUFDbkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsNkNBQTZDO0FBQzdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxHQUFHO0FBQ2QsWUFBWSxRQUFRO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7O0FBRS9CLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsWUFBWTtBQUN2QixXQUFXLFFBQVE7QUFDbkI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxrQ0FBa0M7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0saUNBQWlDLElBQUk7QUFDM0M7QUFDQTtBQUNBLE1BQU0saUNBQWlDLElBQUk7QUFDM0M7QUFDQSw2REFBNkQ7QUFDN0QsTUFBTSxpQ0FBaUMsSUFBSTtBQUMzQztBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsNk5BQTZOO0FBQzdOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkVBQTZFLFlBQVk7QUFDekY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUlBQWlJLDhCQUE4QjtBQUMvSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLDBDQUEwQzs7O0FBR2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdHQUFnRztBQUNoRzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDBDQUEwQzs7O0FBR2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4RUFBOEU7O0FBRTlFO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0pBQXNKLGlCQUFpQjtBQUN2SyxRQUFRO0FBQ1Isc0pBQXNKLGlCQUFpQix3REFBd0QsbUJBQW1CLGdCQUFnQiwrQkFBK0I7QUFDalM7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0Esb0dBQW9HLEdBQUc7O0FBRXZHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxnQkFBZ0I7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFOztBQUV2RTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDOztBQUU5QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsWUFBWSxXQUFXO0FBQ3ZCOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7QUFDM0I7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRTtBQUNwRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsaUJBQWlCOztBQUVqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLGVBQWU7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1Isd0VBQXdFOztBQUV4RTtBQUNBLCtEQUErRDtBQUMvRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7OztBQUdSOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsVUFBVTtBQUNyQixXQUFXLEdBQUc7QUFDZCxXQUFXLE1BQU07QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxVQUFVO0FBQ3JCLFdBQVcsR0FBRztBQUNkLFdBQVcsTUFBTTtBQUNqQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkZBQTJGOztBQUUzRjtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVEOztBQUV2RCwyQ0FBMkM7QUFDM0M7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTixJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEseUNBQXlDOztBQUV6QztBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLG9CQUFvQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFO0FBQ3JFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUNBQXVDO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDOztBQUV2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7O0FBRTlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUEsdUNBQXVDOztBQUV2QywrQkFBK0I7QUFDL0I7O0FBRUE7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBLDBFQUEwRTtBQUMxRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLDJDQUEyQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTs7QUFFQSxvQkFBb0IsaUNBQWlDO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLDRDQUE0QztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0RUFBNEU7O0FBRTVFLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTs7QUFFQSw4QkFBOEI7QUFDOUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOzs7QUFHQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IscUJBQXFCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGdCQUFnQixlQUFlO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEMsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7QUFDakMsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFNBQVM7QUFDekI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDO0FBQ3pDO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQSxrREFBa0Q7QUFDbEQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0EsZ0ZBQWdGO0FBQ2hGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBLFlBQVksU0FBUztBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFNBQVM7QUFDckI7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhHQUE4RztBQUM5RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0osa0JBQWtCLGtCQUFrQjtBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsd0JBQXdCO0FBQ25DLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHdCQUF3QjtBQUNuQyxZQUFZO0FBQ1o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsWUFBWTtBQUN2QixZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx3QkFBd0I7QUFDbkMsV0FBVyxRQUFRO0FBQ25COztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0VBQStFO0FBQy9FOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixzQkFBc0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLGFBQWE7QUFDYjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLG9DQUFvQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkdBQTJHO0FBQzNHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGLDJUQUEyVDtBQUMzVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsK0NBQStDLFFBQVE7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixxQkFBcUIsK0JBQStCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLDBCQUEwQjtBQUM1QztBQUNBO0FBQ0E7QUFDQSx3RUFBd0U7QUFDeEUsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwR0FBMEc7QUFDMUc7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjs7O0FBRzNCO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBLHFDQUFxQzs7O0FBR3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIsT0FBTztBQUNqQztBQUNBOztBQUVBOztBQUVBLDBCQUEwQixPQUFPO0FBQ2pDO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpSUFBaUksbUJBQW1CLGdCQUFnQiwrQkFBK0I7QUFDbk0sTUFBTTtBQUNOO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU0sb0dBQW9HLGtDQUFrQztBQUM1STtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLDBCQUEwQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkRBQTZEO0FBQzdEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDRCQUE0QjtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSwyRUFBMkUsb0dBQW9HLGtDQUFrQztBQUN2TjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNLG9HQUFvRztBQUMxRztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUVBQW1FOztBQUVuRSwrRkFBK0Y7QUFDL0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDRCQUE0QjtBQUNsRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDO0FBQzlDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0RBQWdEO0FBQ2hEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxnREFBZ0Q7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsd0JBQXdCO0FBQzdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyREFBMkQ7QUFDM0Q7QUFDQSxnRkFBZ0Y7QUFDaEY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0EsY0FBYzs7O0FBR2Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsMnZCQUEydkI7O0FBRTN2QjtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDLHdEQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0U7QUFDeEU7QUFDQTtBQUNBLEVBQUUsbUJBQW1COztBQUVyQjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RTtBQUN6RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDs7QUFFaEQ7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksY0FBYztBQUNsQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZ0JBQWdCO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTLGNBQWM7QUFDdkI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLCtDQUErQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsK0NBQStDO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSwrQ0FBK0M7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7OztBQUdBLDBFQUEwRTtBQUMxRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJIQUEySDtBQUMzSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9FQUFvRTs7QUFFcEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0YsMkRBQTJEOztBQUUzRCxxREFBcUQ7QUFDckQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQjtBQUNwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTs7QUFFQSwySEFBMkg7QUFDM0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRTtBQUMxRTs7QUFFQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvRUFBb0U7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qjs7QUFFQTs7QUFFQSxhQUFhLGtCQUFrQjtBQUMvQjs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQSx3RUFBd0U7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDs7QUFFNUQsMkRBQTJEOztBQUUzRCwrREFBK0Q7O0FBRS9EO0FBQ0EsOERBQThEO0FBQzlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7O0FBRUEsa0NBQWtDOztBQUVsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esc0pBQXNKOztBQUV0SixxQ0FBcUM7QUFDckM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBOEQ7QUFDOUQscURBQXFEO0FBQ3JELDJEQUEyRDtBQUMzRCwyQ0FBMkM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEOztBQUV0RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtDQUErQzs7QUFFL0M7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRCQUE0Qjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsc0ZBQXNGOztBQUV0Riw0REFBNEQ7QUFDNUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiw2QkFBNkI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0VBQWdFOztBQUVoRTtBQUNBLHVDQUF1QztBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDOztBQUUxQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLHlCQUF5Qjs7O0FBR25DO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVix3QkFBd0I7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDOztBQUU3Qzs7QUFFQTtBQUNBLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DOztBQUVuQztBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7OztBQUdWO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVOzs7QUFHVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQjtBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKLGlHQUFpRztBQUNqRyxnREFBZ0Q7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUNBQXVDOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhJQUE4STs7QUFFOUk7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVixrRUFBa0UsNENBQTRDO0FBQzlHOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QztBQUM3QyxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQSxzREFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtSUFBbUk7QUFDbkk7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1JQUFtSTtBQUNuSTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7OztBQUdSOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEhBQThILHlDQUF5QztBQUN2Szs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLHdCQUF3QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxrREFBa0Q7QUFDN0Q7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsNkJBQTZCO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7O0FBR04sd0VBQXdFOztBQUV4RSxXQUFXLDZCQUE2QjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTtBQUNSOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLGVBQWUsYUFBYTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLGlDQUFpQztBQUM1QztBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7O0FBR04sd0VBQXdFOztBQUV4RSxXQUFXLFlBQVk7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsTUFBTTtBQUNuRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDs7QUFFQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RDs7QUFFOUQ7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLGtDQUFrQztBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0Isb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQSx3REFBd0Q7O0FBRXhELHdCQUF3QjtBQUN4QjtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCOztBQUUxQixpQ0FBaUM7QUFDakM7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHdCQUF3Qiw4QkFBOEI7QUFDdEQ7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLDRDQUE0QztBQUM5RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsOENBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2QkFBNkI7O0FBRTdCLHFDQUFxQzs7QUFFckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVDQUF1QztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sMkNBQTJDO0FBQ2pEOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckIsaUZBQWlGO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtGQUFrRjtBQUNsRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnSUFBZ0k7QUFDaEk7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBLHlLQUF5SywwQ0FBMEM7QUFDbk47QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7O0FBR047QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7OztBQUduQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhCQUE4Qjs7QUFFOUIsZ0RBQWdEO0FBQ2hEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGVBQWU7QUFDekIsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0VBQWdFOztBQUVoRTtBQUNBLGlDQUFpQztBQUNqQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLFFBQVEsSUFBSTtBQUNaO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOzs7QUFHQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQSxpSEFBaUg7QUFDakg7QUFDQTtBQUNBOztBQUVBLHlDQUF5QztBQUN6QyxNQUFNLEtBQUssRUFLTjtBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGdEQUFnRDs7QUFFaEQsOEJBQThCO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLDRHQUE0RztBQUM1Rzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQSxpUUFBaVE7QUFDalE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUEsZ0ZBQWdGO0FBQ2hGO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtHQUErRztBQUMvRzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSwwRUFBMEU7O0FBRTFFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUdBQWlHO0FBQ2pHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7O0FBRXBDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDs7QUFFaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7OztBQUdWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ04sbUNBQW1DO0FBQ25DOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7OztBQUdSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQ7O0FBRWpEO0FBQ0E7QUFDQSx5RUFBeUU7O0FBRXpFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1RUFBdUU7O0FBRXZFO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkNBQTJDOztBQUUzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7OztBQUdBLGlEQUFpRDs7QUFFakQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQSxzRUFBc0U7O0FBRXRFLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTix5Q0FBeUM7O0FBRXpDO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTtBQUNBLElBQUk7QUFDSiwrR0FBK0c7QUFDL0c7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSixnR0FBZ0c7QUFDaEc7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLElBQUk7OztBQUdKLDBFQUEwRTs7QUFFMUU7QUFDQTtBQUNBLDRGQUE0RjtBQUM1Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVHQUF1RztBQUN2Rzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQzs7QUFFMUMsNENBQTRDOztBQUU1QztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsZ0dBQWdHO0FBQ2hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLDRDQUE0QztBQUM1Qzs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEseU5BQXlOLEdBQUc7O0FBRTVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHFCQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7O0FBR1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0RBQWdEOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7O0FBRW5EO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQSwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdIQUFnSDtBQUNoSDtBQUNBOztBQUVBLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGdIQUFnSDtBQUNoSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7OztBQUdBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEOztBQUU3RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLG9DQUFvQztBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0REFBNEQ7QUFDNUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOzs7QUFHQTtBQUNBLCtDQUErQztBQUMvQztBQUNBOztBQUVBLHNIQUFzSDs7QUFFdEgsZ0RBQWdEO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrR0FBa0c7QUFDbEc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQSxrR0FBa0c7QUFDbEc7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7O0FBR2Q7QUFDQTtBQUNBOztBQUVBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0NBQStDO0FBQy9DOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQ7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjs7QUFFQTtBQUNBO0FBQ0EsOENBQThDOztBQUU5QztBQUNBO0FBQ0EsWUFBWTs7O0FBR1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsaUVBQWlFO0FBQ2pFOztBQUVBLHNJQUFzSTs7QUFFdEk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZOztBQUVaLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxREFBcUQ7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUEsZ0VBQWdFO0FBQ2hFOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx3RUFBd0U7O0FBRXhFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QztBQUM1Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qjs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7OztBQUdWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGNBQWM7QUFDZCxrT0FBa08scUNBQXFDLHdGQUF3RiwyQkFBMkIscUJBQXFCLFFBQVEsYUFBYTtBQUNwYSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7OztBQUdBLGlFQUFpRTtBQUNqRTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxRQUFRLDRJQUE0STtBQUNwSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOzs7QUFHQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0Esc0RBQXNEOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBOztBQUVBLG1EQUFtRDtBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUksK0JBQStCO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLHNCQUFzQjtBQUMxQzs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTs7QUFFQTtBQUNBLDRDQUE0Qzs7QUFFNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1Qzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxnREFBZ0Q7QUFDaEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUU7O0FBRXZFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBLFVBQVU7OztBQUdWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0Rjs7QUFFNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUIsa0NBQWtDOztBQUVsQywrQkFBK0I7O0FBRS9CLDJCQUEyQjs7QUFFM0IsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0RBQXNEOztBQUV0RCxtREFBbUQ7O0FBRW5ELHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7O0FBRUEsK0NBQStDO0FBQy9DOztBQUVBLDhDQUE4Qzs7QUFFOUMseURBQXlEOztBQUV6RCw2Q0FBNkM7O0FBRTdDLCtDQUErQztBQUMvQzs7QUFFQSxnREFBZ0Q7QUFDaEQ7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7O0FBRUEsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0YsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdEQUFnRDtBQUNoRDs7QUFFQSxnREFBZ0Q7O0FBRWhEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0osK0RBQStEOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEOztBQUVsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2RUFBNkU7QUFDN0U7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFO0FBQ2xFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEZBQTRGOztBQUU1RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0VBQW9FOzs7QUFHcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7O0FBR1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQixtQkFBbUI7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxvRkFBb0Y7QUFDcEY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLDZDQUE2QztBQUM3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBLE1BQU07OztBQUdOO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSx5RUFBeUU7O0FBRXpFO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7OztBQUd0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdFQUF3RTs7QUFFeEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR04saUNBQWlDOztBQUVqQztBQUNBLElBQUksZ0NBQWdDOzs7QUFHcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksNENBQTRDO0FBQ2hEOzs7QUFHQTtBQUNBLGtDQUFrQztBQUNsQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkMsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUEsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0osc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsOEJBQThCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTs7O0FBR0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsNkRBQTZEO0FBQzdEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUVBQXFFOztBQUVyRTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDRCQUE0QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsNENBQTRDO0FBQ3BEOzs7QUFHQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBOztBQUVBLGtEQUFrRDs7QUFFbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1IQUFtSDs7QUFFbkg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLEdBQUc7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4TEFBOEwsb0RBQW9ELEVBQUU7QUFDcFAsUUFBUTtBQUNSO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1PQUFtTyxvREFBb0QsRUFBRTtBQUN6UjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07OztBQUdOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQyxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osZ0RBQWdEOztBQUVoRCx3Q0FBd0M7QUFDeEM7O0FBRUEsb0NBQW9DOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7O0FBRWxEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXRELHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0xBQXdMOztBQUV4TCw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMEVBQTBFO0FBQzFFO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsR0FBRztBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0RBQXdEOztBQUV4RDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdEQUF3RDs7QUFFeEQ7QUFDQSxtQ0FBbUM7O0FBRW5DOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTixzQkFBc0Isd0JBQXdCO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdEQUF3RCxRQUFROztBQUVoRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxnTEFBZ0wsOEJBQThCO0FBQzlNO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7O0FBR0EsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdEQUFnRDs7QUFFaEQ7O0FBRUE7QUFDQSxvQkFBb0IsMkJBQTJCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxHQUFHO0FBQ1I7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQSw4RUFBOEU7O0FBRTlFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBEQUEwRDtBQUMxRCxvQkFBb0I7QUFDcEIsa0JBQWtCO0FBQ2xCLG1CQUFtQjtBQUNuQixpQkFBaUI7QUFDakIsZUFBZTtBQUNmLG1CQUFtQjtBQUNuQixjQUFjO0FBQ2QsOEJBQThCO0FBQzlCLCtCQUErQjtBQUMvQiwyQ0FBMkM7QUFDM0MsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanM/YWM4OSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1kb20uZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgJ3VzZSBzdHJpY3QnO1xuXG4vKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ID09PVxuICAgICdmdW5jdGlvbidcbikge1xuICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KG5ldyBFcnJvcigpKTtcbn1cbiAgICAgICAgICB2YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyIFNjaGVkdWxlciA9IHJlcXVpcmUoJ3NjaGVkdWxlcicpO1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSBSZWFjdC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtcblxudmFyIHN1cHByZXNzV2FybmluZyA9IGZhbHNlO1xuZnVuY3Rpb24gc2V0U3VwcHJlc3NXYXJuaW5nKG5ld1N1cHByZXNzV2FybmluZykge1xuICB7XG4gICAgc3VwcHJlc3NXYXJuaW5nID0gbmV3U3VwcHJlc3NXYXJuaW5nO1xuICB9XG59IC8vIEluIERFViwgY2FsbHMgdG8gY29uc29sZS53YXJuIGFuZCBjb25zb2xlLmVycm9yIGdldCByZXBsYWNlZFxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgaWYgKCFzdXBwcmVzc1dhcm5pbmcpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZygnd2FybicsIGZvcm1hdCwgYXJncyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGlmICghc3VwcHJlc3NXYXJuaW5nKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG52YXIgRnVuY3Rpb25Db21wb25lbnQgPSAwO1xudmFyIENsYXNzQ29tcG9uZW50ID0gMTtcbnZhciBJbmRldGVybWluYXRlQ29tcG9uZW50ID0gMjsgLy8gQmVmb3JlIHdlIGtub3cgd2hldGhlciBpdCBpcyBmdW5jdGlvbiBvciBjbGFzc1xuXG52YXIgSG9zdFJvb3QgPSAzOyAvLyBSb290IG9mIGEgaG9zdCB0cmVlLiBDb3VsZCBiZSBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgbm9kZS5cblxudmFyIEhvc3RQb3J0YWwgPSA0OyAvLyBBIHN1YnRyZWUuIENvdWxkIGJlIGFuIGVudHJ5IHBvaW50IHRvIGEgZGlmZmVyZW50IHJlbmRlcmVyLlxuXG52YXIgSG9zdENvbXBvbmVudCA9IDU7XG52YXIgSG9zdFRleHQgPSA2O1xudmFyIEZyYWdtZW50ID0gNztcbnZhciBNb2RlID0gODtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSA5O1xudmFyIENvbnRleHRQcm92aWRlciA9IDEwO1xudmFyIEZvcndhcmRSZWYgPSAxMTtcbnZhciBQcm9maWxlciA9IDEyO1xudmFyIFN1c3BlbnNlQ29tcG9uZW50ID0gMTM7XG52YXIgTWVtb0NvbXBvbmVudCA9IDE0O1xudmFyIFNpbXBsZU1lbW9Db21wb25lbnQgPSAxNTtcbnZhciBMYXp5Q29tcG9uZW50ID0gMTY7XG52YXIgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50ID0gMTc7XG52YXIgRGVoeWRyYXRlZEZyYWdtZW50ID0gMTg7XG52YXIgU3VzcGVuc2VMaXN0Q29tcG9uZW50ID0gMTk7XG52YXIgU2NvcGVDb21wb25lbnQgPSAyMTtcbnZhciBPZmZzY3JlZW5Db21wb25lbnQgPSAyMjtcbnZhciBMZWdhY3lIaWRkZW5Db21wb25lbnQgPSAyMztcbnZhciBDYWNoZUNvbXBvbmVudCA9IDI0O1xudmFyIFRyYWNpbmdNYXJrZXJDb21wb25lbnQgPSAyNTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGVuYWJsZUNsaWVudFJlbmRlckZhbGxiYWNrT25UZXh0TWlzbWF0Y2ggPSB0cnVlOyAvLyBUT0RPOiBOZWVkIHRvIHJldmlldyB0aGlzIGNvZGUgb25lIG1vcmUgdGltZSBiZWZvcmUgbGFuZGluZ1xuLy8gdGhlIHJlYWN0LXJlY29uY2lsZXIgcGFja2FnZS5cblxudmFyIGVuYWJsZU5ld1JlY29uY2lsZXIgPSBmYWxzZTsgLy8gU3VwcG9ydCBsZWdhY3kgUHJpbWVyIHN1cHBvcnQgb24gaW50ZXJuYWwgRkIgd3d3XG5cbnZhciBlbmFibGVMYXp5Q29udGV4dFByb3BhZ2F0aW9uID0gZmFsc2U7IC8vIEZCLW9ubHkgdXNhZ2UuIFRoZSBuZXcgQVBJIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzLlxuXG52YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7IC8vIEVuYWJsZXMgdW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgZmVhdHVyZSBpbiBGaWJlclxuXG52YXIgZW5hYmxlU3VzcGVuc2VBdm9pZFRoaXNGYWxsYmFjayA9IGZhbHNlOyAvLyBFbmFibGVzIHVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrIGZlYXR1cmUgaW4gRml6elxuLy8gUmVhY3QgRE9NIENob3BwaW5nIEJsb2NrXG4vL1xuLy8gU2ltaWxhciB0byBtYWluIENob3BwaW5nIEJsb2NrIGJ1dCBvbmx5IGZsYWdzIHJlbGF0ZWQgdG8gUmVhY3QgRE9NLiBUaGVzZSBhcmVcbi8vIGdyb3VwZWQgYmVjYXVzZSB3ZSB3aWxsIGxpa2VseSBiYXRjaCBhbGwgb2YgdGhlbSBpbnRvIGEgc2luZ2xlIG1ham9yIHJlbGVhc2UuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRGlzYWJsZSBzdXBwb3J0IGZvciBjb21tZW50IG5vZGVzIGFzIFJlYWN0IERPTSBjb250YWluZXJzLiBBbHJlYWR5IGRpc2FibGVkXG4vLyBpbiBvcGVuIHNvdXJjZSwgYnV0IHd3dyBjb2RlYmFzZSBzdGlsbCByZWxpZXMgb24gaXQuIE5lZWQgdG8gcmVtb3ZlLlxuXG52YXIgZGlzYWJsZUNvbW1lbnRzQXNET01Db250YWluZXJzID0gdHJ1ZTsgLy8gRGlzYWJsZSBqYXZhc2NyaXB0OiBVUkwgc3RyaW5ncyBpbiBocmVmIGZvciBYU1MgcHJvdGVjdGlvbi5cbi8vIGFuZCBjbGllbnQgcmVuZGVyaW5nLCBtb3N0bHkgdG8gYWxsb3cgSlNYIGF0dHJpYnV0ZXMgdG8gYXBwbHkgdG8gdGhlIGN1c3RvbVxuLy8gZWxlbWVudCdzIG9iamVjdCBwcm9wZXJ0aWVzIGluc3RlYWQgb2Ygb25seSBIVE1MIGF0dHJpYnV0ZXMuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExMzQ3XG5cbnZhciBlbmFibGVDdXN0b21FbGVtZW50UHJvcGVydHlTdXBwb3J0ID0gZmFsc2U7IC8vIERpc2FibGVzIGNoaWxkcmVuIGZvciA8dGV4dGFyZWE+IGVsZW1lbnRzXG52YXIgd2FybkFib3V0U3RyaW5nUmVmcyA9IGZhbHNlOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRGVidWdnaW5nIGFuZCBEZXZUb29sc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFkZHMgdXNlciB0aW1pbmcgbWFya3MgZm9yIGUuZy4gc3RhdGUgdXBkYXRlcywgc3VzcGVuc2UsIGFuZCB3b3JrIGxvb3Agc3R1ZmYsXG4vLyBmb3IgYW4gZXhwZXJpbWVudGFsIHRpbWVsaW5lIHRvb2wuXG5cbnZhciBlbmFibGVTY2hlZHVsaW5nUHJvZmlsZXIgPSB0cnVlOyAvLyBIZWxwcyBpZGVudGlmeSBzaWRlIGVmZmVjdHMgaW4gcmVuZGVyLXBoYXNlIGxpZmVjeWNsZSBob29rcyBhbmQgc2V0U3RhdGVcblxudmFyIGVuYWJsZVByb2ZpbGVyVGltZXIgPSB0cnVlOyAvLyBSZWNvcmQgZHVyYXRpb25zIGZvciBjb21taXQgYW5kIHBhc3NpdmUgZWZmZWN0cyBwaGFzZXMuXG5cbnZhciBlbmFibGVQcm9maWxlckNvbW1pdEhvb2tzID0gdHJ1ZTsgLy8gUGhhc2UgcGFyYW0gcGFzc2VkIHRvIG9uUmVuZGVyIGNhbGxiYWNrIGRpZmZlcmVudGlhdGVzIGJldHdlZW4gYW4gXCJ1cGRhdGVcIiBhbmQgYSBcImNhc2NhZGluZy11cGRhdGVcIi5cblxudmFyIGFsbE5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoKTtcbi8qKlxuICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIGV2ZW50IG5hbWVcbiAqL1xuXG5cbnZhciByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0ge307XG4vKipcbiAqIE1hcHBpbmcgZnJvbSBsb3dlcmNhc2UgcmVnaXN0cmF0aW9uIG5hbWVzIHRvIHRoZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLFxuICogdXNlZCB0byB3YXJuIGluIHRoZSBjYXNlIG9mIG1pc3NpbmcgZXZlbnQgaGFuZGxlcnMuIEF2YWlsYWJsZVxuICogb25seSBpbiB0cnVlLlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuXG52YXIgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9ICB7fSA7IC8vIFRydXN0IHRoZSBkZXZlbG9wZXIgdG8gb25seSB1c2UgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyBpbiB0cnVlXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUgKyAnQ2FwdHVyZScsIGRlcGVuZGVuY2llcyk7XG59XG5mdW5jdGlvbiByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICB7XG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0pIHtcbiAgICAgIGVycm9yKCdFdmVudFJlZ2lzdHJ5OiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSAnICsgJ3JlZ2lzdHJhdGlvbiBuYW1lLCBgJXNgLicsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBkZXBlbmRlbmNpZXM7XG5cbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHJlZ2lzdHJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA9IHJlZ2lzdHJhdGlvbk5hbWU7XG5cbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSA9PT0gJ29uRG91YmxlQ2xpY2snKSB7XG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLm9uZGJsY2xpY2sgPSByZWdpc3RyYXRpb25OYW1lO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmFkZChkZXBlbmRlbmNpZXNbaV0pO1xuICB9XG59XG5cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKTtcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWUgb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnO1xuICAgIHJldHVybiB0eXBlO1xuICB9XG59IC8vICRGbG93Rml4TWUgb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5cblxuZnVuY3Rpb24gd2lsbENvZXJjaW9uVGhyb3codmFsdWUpIHtcbiAge1xuICAgIHRyeSB7XG4gICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgLy8gSWYgeW91IGVuZGVkIHVwIGhlcmUgYnkgZm9sbG93aW5nIGFuIGV4Y2VwdGlvbiBjYWxsIHN0YWNrLCBoZXJlJ3Mgd2hhdCdzXG4gIC8vIGhhcHBlbmVkOiB5b3Ugc3VwcGxpZWQgYW4gb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBSZWFjdCAoYXMgYSBwcm9wLCBrZXksXG4gIC8vIERPTSBhdHRyaWJ1dGUsIENTUyBwcm9wZXJ0eSwgc3RyaW5nIHJlZiwgZXRjLikgYW5kIHdoZW4gUmVhY3QgdHJpZWQgdG9cbiAgLy8gY29lcmNlIGl0IHRvIGEgc3RyaW5nIHVzaW5nIGAnJyArIHZhbHVlYCwgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uXG4gIC8vXG4gIC8vIFRoZSBtb3N0IGNvbW1vbiB0eXBlcyB0aGF0IHdpbGwgY2F1c2UgdGhpcyBleGNlcHRpb24gYXJlIGBTeW1ib2xgIGluc3RhbmNlc1xuICAvLyBhbmQgVGVtcG9yYWwgb2JqZWN0cyBsaWtlIGBUZW1wb3JhbC5JbnN0YW50YC4gQnV0IGFueSBvYmplY3QgdGhhdCBoYXMgYVxuICAvLyBgdmFsdWVPZmAgb3IgYFtTeW1ib2wudG9QcmltaXRpdmVdYCBtZXRob2QgdGhhdCB0aHJvd3Mgd2lsbCBhbHNvIGNhdXNlIHRoaXNcbiAgLy8gZXhjZXB0aW9uLiAoTGlicmFyeSBhdXRob3JzIGRvIHRoaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIHVzaW5nIGJ1aWx0LWluXG4gIC8vIG51bWVyaWMgb3BlcmF0b3JzIGxpa2UgYCtgIG9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGxpa2UgYD49YCBiZWNhdXNlIGN1c3RvbVxuICAvLyBtZXRob2RzIGFyZSBuZWVkZWQgdG8gcGVyZm9ybSBhY2N1cmF0ZSBhcml0aG1ldGljIG9yIGNvbXBhcmlzb24uKVxuICAvL1xuICAvLyBUbyBmaXggdGhlIHByb2JsZW0sIGNvZXJjZSB0aGlzIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXG4gIC8vIHBhc3NpbmcgaXQgdG8gUmVhY3QuIFRoZSBtb3N0IHJlbGlhYmxlIHdheSBpcyB1c3VhbGx5IGBTdHJpbmcodmFsdWUpYC5cbiAgLy9cbiAgLy8gVG8gZmluZCB3aGljaCB2YWx1ZSBpcyB0aHJvd2luZywgY2hlY2sgdGhlIGJyb3dzZXIgb3IgZGVidWdnZXIgY29uc29sZS5cbiAgLy8gQmVmb3JlIHRoaXMgZXhjZXB0aW9uIHdhcyB0aHJvd24sIHRoZXJlIHNob3VsZCBiZSBgY29uc29sZS5lcnJvcmAgb3V0cHV0XG4gIC8vIHRoYXQgc2hvd3MgdGhlIHR5cGUgKFN5bWJvbCwgVGVtcG9yYWwuUGxhaW5EYXRlLCBldGMuKSB0aGF0IGNhdXNlZCB0aGVcbiAgLy8gcHJvYmxlbSBhbmQgaG93IHRoYXQgdHlwZSB3YXMgdXNlZDoga2V5LCBhdHJyaWJ1dGUsIGlucHV0IHZhbHVlIHByb3AsIGV0Yy5cbiAgLy8gSW4gbW9zdCBjYXNlcywgdGhpcyBjb25zb2xlIG91dHB1dCBhbHNvIHNob3dzIHRoZSBjb21wb25lbnQgYW5kIGl0c1xuICAvLyBhbmNlc3RvciBjb21wb25lbnRzIHdoZXJlIHRoZSBleGNlcHRpb24gaGFwcGVuZWQuXG4gIC8vXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgYXR0cmlidXRlTmFtZSkge1xuICB7XG4gICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1RoZSBwcm92aWRlZCBgJXNgIGF0dHJpYnV0ZSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCBhdHRyaWJ1dGVOYW1lLCB0eXBlTmFtZSh2YWx1ZSkpO1xuXG4gICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTsgLy8gdGhyb3cgKHRvIGhlbHAgY2FsbGVycyBmaW5kIHRyb3VibGVzaG9vdGluZyBjb21tZW50cylcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAge1xuICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuJyArICcgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY2hlY2tQcm9wU3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BOYW1lKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGAlc2AgcHJvcCBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCBwcm9wTmFtZSwgdHlwZU5hbWUodmFsdWUpKTtcblxuICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BOYW1lKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGAlc2AgQ1NTIHByb3BlcnR5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuJyArICcgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHByb3BOYW1lLCB0eXBlTmFtZSh2YWx1ZSkpO1xuXG4gICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTsgLy8gdGhyb3cgKHRvIGhlbHAgY2FsbGVycyBmaW5kIHRyb3VibGVzaG9vdGluZyBjb21tZW50cylcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNoZWNrSHRtbFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIEhUTUwgbWFya3VwIHVzZXMgYSB2YWx1ZSBvZiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCB0eXBlTmFtZSh2YWx1ZSkpO1xuXG4gICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTsgLy8gdGhyb3cgKHRvIGhlbHAgY2FsbGVycyBmaW5kIHRyb3VibGVzaG9vdGluZyBjb21tZW50cylcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNoZWNrRm9ybUZpZWxkVmFsdWVTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICB7XG4gICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ0Zvcm0gZmllbGQgdmFsdWVzICh2YWx1ZSwgY2hlY2tlZCwgZGVmYXVsdFZhbHVlLCBvciBkZWZhdWx0Q2hlY2tlZCBwcm9wcyknICsgJyBtdXN0IGJlIHN0cmluZ3MsIG5vdCAlcy4nICsgJyBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgYmVmb3JlIHVzaW5nIGl0IGhlcmUuJywgdHlwZU5hbWUodmFsdWUpKTtcblxuICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXG4gICAgfVxuICB9XG59XG5cbi8vIEEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuLy8gSXQgaXMgaGFuZGxlZCBieSBSZWFjdCBzZXBhcmF0ZWx5IGFuZCBzaG91bGRuJ3QgYmUgd3JpdHRlbiB0byB0aGUgRE9NLlxudmFyIFJFU0VSVkVEID0gMDsgLy8gQSBzaW1wbGUgc3RyaW5nIGF0dHJpYnV0ZS5cbi8vIEF0dHJpYnV0ZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIGZpbHRlciBhcmUgcHJlc3VtZWQgdG8gaGF2ZSB0aGlzIHR5cGUuXG5cbnZhciBTVFJJTkcgPSAxOyAvLyBBIHN0cmluZyBhdHRyaWJ1dGUgdGhhdCBhY2NlcHRzIGJvb2xlYW5zIGluIFJlYWN0LiBJbiBIVE1MLCB0aGVzZSBhcmUgY2FsbGVkXG4vLyBcImVudW1lcmF0ZWRcIiBhdHRyaWJ1dGVzIHdpdGggXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIiBhcyBwb3NzaWJsZSB2YWx1ZXMuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBcInRydWVcIiBzdHJpbmcuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJmYWxzZVwiIHN0cmluZy5cblxudmFyIEJPT0xFQU5JU0hfU1RSSU5HID0gMjsgLy8gQSByZWFsIGJvb2xlYW4gYXR0cmlidXRlLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgcHJlc2VudCAoc2V0IGVpdGhlciB0byBhbiBlbXB0eSBzdHJpbmcgb3IgaXRzIG5hbWUpLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIG9taXR0ZWQuXG5cbnZhciBCT09MRUFOID0gMzsgLy8gQW4gYXR0cmlidXRlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBmbGFnIGFzIHdlbGwgYXMgd2l0aCBhIHZhbHVlLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgcHJlc2VudCAoc2V0IGVpdGhlciB0byBhbiBlbXB0eSBzdHJpbmcgb3IgaXRzIG5hbWUpLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIG9taXR0ZWQuXG4vLyBGb3IgYW55IG90aGVyIHZhbHVlLCBzaG91bGQgYmUgcHJlc2VudCB3aXRoIHRoYXQgdmFsdWUuXG5cbnZhciBPVkVSTE9BREVEX0JPT0xFQU4gPSA0OyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBtdXN0IGJlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBudW1lcmljLlxuLy8gV2hlbiBmYWxzeSwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuXG5cbnZhciBOVU1FUklDID0gNTsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBwb3NpdGl2ZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgcG9zaXRpdmUgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgUE9TSVRJVkVfTlVNRVJJQyA9IDY7XG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbnZhciBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSID0gXCI6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXCI7XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxudmFyIEFUVFJJQlVURV9OQU1FX0NIQVIgPSBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgXCJcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MFwiO1xudmFyIFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYID0gbmV3IFJlZ0V4cCgnXlsnICsgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArICddWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbnZhciB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGlzQXR0cmlidXRlTmFtZVNhZmUoYXR0cmlidXRlTmFtZSkge1xuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWC50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuXG4gIHtcbiAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgbmFtZTogYCVzYCcsIGF0dHJpYnV0ZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQ7XG4gIH1cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPiAyICYmIChuYW1lWzBdID09PSAnbycgfHwgbmFtZVswXSA9PT0gJ08nKSAmJiAobmFtZVsxXSA9PT0gJ24nIHx8IG5hbWVbMV0gPT09ICdOJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICdmdW5jdGlvbic6IC8vICRGbG93SXNzdWUgc3ltYm9sIGlzIHBlcmZlY3RseSB2YWxpZCBoZXJlXG5cbiAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAhcHJvcGVydHlJbmZvLmFjY2VwdHNCb29sZWFucztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJlZml4ID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDUpO1xuICAgICAgICAgIHJldHVybiBwcmVmaXggIT09ICdkYXRhLScgJiYgcHJlZml4ICE9PSAnYXJpYS0nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuXG4gICAgc3dpdGNoIChwcm9wZXJ0eUluZm8udHlwZSkge1xuICAgICAgY2FzZSBCT09MRUFOOlxuICAgICAgICByZXR1cm4gIXZhbHVlO1xuXG4gICAgICBjYXNlIE9WRVJMT0FERURfQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBmYWxzZTtcblxuICAgICAgY2FzZSBOVU1FUklDOlxuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpO1xuXG4gICAgICBjYXNlIFBPU0lUSVZFX05VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldFByb3BlcnR5SW5mbyhuYW1lKSB7XG4gIHJldHVybiBwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8gcHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCB0eXBlLCBtdXN0VXNlUHJvcGVydHksIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZU5hbWVzcGFjZSwgc2FuaXRpemVVUkwsIHJlbW92ZUVtcHR5U3RyaW5nKSB7XG4gIHRoaXMuYWNjZXB0c0Jvb2xlYW5zID0gdHlwZSA9PT0gQk9PTEVBTklTSF9TVFJJTkcgfHwgdHlwZSA9PT0gQk9PTEVBTiB8fCB0eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU47XG4gIHRoaXMuYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZU5hbWU7XG4gIHRoaXMuYXR0cmlidXRlTmFtZXNwYWNlID0gYXR0cmlidXRlTmFtZXNwYWNlO1xuICB0aGlzLm11c3RVc2VQcm9wZXJ0eSA9IG11c3RVc2VQcm9wZXJ0eTtcbiAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBuYW1lO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnNhbml0aXplVVJMID0gc2FuaXRpemVVUkw7XG4gIHRoaXMucmVtb3ZlRW1wdHlTdHJpbmcgPSByZW1vdmVFbXB0eVN0cmluZztcbn0gLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGlzIGxpc3QsIGJlIHN1cmUgdG8gYWxzbyBhZGQgdGhlbSB0b1xuLy8gdGhlIGBwb3NzaWJsZVN0YW5kYXJkTmFtZXNgIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3Rcbi8vIG5hbWUgd2FybmluZ3MuXG5cblxudmFyIHByb3BlcnRpZXMgPSB7fTsgLy8gVGhlc2UgcHJvcHMgYXJlIHJlc2VydmVkIGJ5IFJlYWN0LiBUaGV5IHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG5cbnZhciByZXNlcnZlZFByb3BzID0gWydjaGlsZHJlbicsICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsIC8vIFRPRE86IFRoaXMgcHJldmVudHMgdGhlIGFzc2lnbm1lbnQgb2YgZGVmYXVsdFZhbHVlIHRvIHJlZ3VsYXJcbi8vIGVsZW1lbnRzIChub3QganVzdCBpbnB1dHMpLiBOb3cgdGhhdCBSZWFjdERPTUlucHV0IGFzc2lnbnMgdG8gdGhlXG4vLyBkZWZhdWx0VmFsdWUgcHJvcGVydHkgLS0gZG8gd2UgbmVlZCB0aGlzP1xuJ2RlZmF1bHRWYWx1ZScsICdkZWZhdWx0Q2hlY2tlZCcsICdpbm5lckhUTUwnLCAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJywgJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsICdzdHlsZSddO1xuXG5yZXNlcnZlZFByb3BzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUkVTRVJWRUQsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBBIGZldyBSZWFjdCBzdHJpbmcgYXR0cmlidXRlcyBoYXZlIGEgZGlmZmVyZW50IG5hbWUuXG4vLyBUaGlzIGlzIGEgbWFwcGluZyBmcm9tIFJlYWN0IHByb3AgbmFtZXMgdG8gdGhlIGF0dHJpYnV0ZSBuYW1lcy5cblxuW1snYWNjZXB0Q2hhcnNldCcsICdhY2NlcHQtY2hhcnNldCddLCBbJ2NsYXNzTmFtZScsICdjbGFzcyddLCBbJ2h0bWxGb3InLCAnZm9yJ10sIFsnaHR0cEVxdWl2JywgJ2h0dHAtZXF1aXYnXV0uZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWZbMF0sXG4gICAgICBhdHRyaWJ1dGVOYW1lID0gX3JlZlsxXTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCBcInRydWVcIiBhbmQgXCJmYWxzZVwiLlxuLy8gSW4gUmVhY3QsIHdlIGxldCB1c2VycyBwYXNzIGB0cnVlYCBhbmQgYGZhbHNlYCBldmVuIHRob3VnaCB0ZWNobmljYWxseVxuLy8gdGhlc2UgYXJlbid0IGJvb2xlYW4gYXR0cmlidXRlcyAodGhleSBhcmUgY29lcmNlZCB0byBzdHJpbmdzKS5cblxuWydjb250ZW50RWRpdGFibGUnLCAnZHJhZ2dhYmxlJywgJ3NwZWxsQ2hlY2snLCAndmFsdWUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG4vLyBTaW5jZSB0aGVzZSBhcmUgU1ZHIGF0dHJpYnV0ZXMsIHRoZWlyIGF0dHJpYnV0ZSBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG5cblsnYXV0b1JldmVyc2UnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmb2N1c2FibGUnLCAncHJlc2VydmVBbHBoYSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTklTSF9TVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBib29sZWFuIGF0dHJpYnV0ZXMuXG5cblsnYWxsb3dGdWxsU2NyZWVuJywgJ2FzeW5jJywgLy8gTm90ZTogdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIERPTVxuLy8gb24gdGhlIGNsaWVudCBzaWRlIGJlY2F1c2UgdGhlIGJyb3dzZXJzIGFyZSBpbmNvbnNpc3RlbnQuIEluc3RlYWQgd2UgY2FsbCBmb2N1cygpLlxuJ2F1dG9Gb2N1cycsICdhdXRvUGxheScsICdjb250cm9scycsICdkZWZhdWx0JywgJ2RlZmVyJywgJ2Rpc2FibGVkJywgJ2Rpc2FibGVQaWN0dXJlSW5QaWN0dXJlJywgJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsICdmb3JtTm9WYWxpZGF0ZScsICdoaWRkZW4nLCAnbG9vcCcsICdub01vZHVsZScsICdub1ZhbGlkYXRlJywgJ29wZW4nLCAncGxheXNJbmxpbmUnLCAncmVhZE9ubHknLCAncmVxdWlyZWQnLCAncmV2ZXJzZWQnLCAnc2NvcGVkJywgJ3NlYW1sZXNzJywgLy8gTWljcm9kYXRhXG4naXRlbVNjb3BlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgdGhlIGZldyBSZWFjdCBwcm9wcyB0aGF0IHdlIHNldCBhcyBET00gcHJvcGVydGllc1xuLy8gcmF0aGVyIHRoYW4gYXR0cmlidXRlcy4gVGhlc2UgYXJlIGFsbCBib29sZWFucy5cblxuWydjaGVja2VkJywgLy8gTm90ZTogYG9wdGlvbi5zZWxlY3RlZGAgaXMgbm90IHVwZGF0ZWQgaWYgYHNlbGVjdC5tdWx0aXBsZWAgaXNcbi8vIGRpc2FibGVkIHdpdGggYHJlbW92ZUF0dHJpYnV0ZWAuIFdlIGhhdmUgc3BlY2lhbCBsb2dpYyBmb3IgaGFuZGxpbmcgdGhpcy5cbidtdWx0aXBsZScsICdtdXRlZCcsICdzZWxlY3RlZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgdHJ1ZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFyZSBcIm92ZXJsb2FkZWQgYm9vbGVhbnNcIjogdGhleSBiZWhhdmUgbGlrZVxuLy8gYm9vbGVhbnMsIGJ1dCBjYW4gYWxzbyBhY2NlcHQgYSBzdHJpbmcgdmFsdWUuXG5cblsnY2FwdHVyZScsICdkb3dubG9hZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgT1ZFUkxPQURFRF9CT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtYmVycy5cblxuWydjb2xzJywgJ3Jvd3MnLCAnc2l6ZScsICdzcGFuJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBQT1NJVElWRV9OVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgbnVtYmVycy5cblxuWydyb3dTcGFuJywgJ3N0YXJ0J10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBOVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pO1xudmFyIENBTUVMSVpFID0gL1tcXC1cXDpdKFthLXpdKS9nO1xuXG52YXIgY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICByZXR1cm4gdG9rZW5bMV0udG9VcHBlckNhc2UoKTtcbn07IC8vIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCBTVkcgYXR0cmlidXRlcyB0aGF0IG5lZWQgc3BlY2lhbCBjYXNpbmcsIG5hbWVzcGFjaW5nLFxuLy8gb3IgYm9vbGVhbiB2YWx1ZSBhc3NpZ25tZW50LiBSZWd1bGFyIGF0dHJpYnV0ZXMgdGhhdCBqdXN0IGFjY2VwdCBzdHJpbmdzXG4vLyBhbmQgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcmUgb21pdHRlZCwganVzdCBsaWtlIGluIHRoZSBIVE1MIGF0dHJpYnV0ZSBmaWx0ZXIuXG4vLyBTb21lIG9mIHRoZXNlIGF0dHJpYnV0ZXMgY2FuIGJlIGhhcmQgdG8gZmluZC4gVGhpcyBsaXN0IHdhcyBjcmVhdGVkIGJ5XG4vLyBzY3JhcGluZyB0aGUgTUROIGRvY3VtZW50YXRpb24uXG5cblxuWydhY2NlbnQtaGVpZ2h0JywgJ2FsaWdubWVudC1iYXNlbGluZScsICdhcmFiaWMtZm9ybScsICdiYXNlbGluZS1zaGlmdCcsICdjYXAtaGVpZ2h0JywgJ2NsaXAtcGF0aCcsICdjbGlwLXJ1bGUnLCAnY29sb3ItaW50ZXJwb2xhdGlvbicsICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnLCAnY29sb3ItcHJvZmlsZScsICdjb2xvci1yZW5kZXJpbmcnLCAnZG9taW5hbnQtYmFzZWxpbmUnLCAnZW5hYmxlLWJhY2tncm91bmQnLCAnZmlsbC1vcGFjaXR5JywgJ2ZpbGwtcnVsZScsICdmbG9vZC1jb2xvcicsICdmbG9vZC1vcGFjaXR5JywgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZScsICdmb250LXNpemUtYWRqdXN0JywgJ2ZvbnQtc3RyZXRjaCcsICdmb250LXN0eWxlJywgJ2ZvbnQtdmFyaWFudCcsICdmb250LXdlaWdodCcsICdnbHlwaC1uYW1lJywgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnLCAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnLCAnaG9yaXotYWR2LXgnLCAnaG9yaXotb3JpZ2luLXgnLCAnaW1hZ2UtcmVuZGVyaW5nJywgJ2xldHRlci1zcGFjaW5nJywgJ2xpZ2h0aW5nLWNvbG9yJywgJ21hcmtlci1lbmQnLCAnbWFya2VyLW1pZCcsICdtYXJrZXItc3RhcnQnLCAnb3ZlcmxpbmUtcG9zaXRpb24nLCAnb3ZlcmxpbmUtdGhpY2tuZXNzJywgJ3BhaW50LW9yZGVyJywgJ3Bhbm9zZS0xJywgJ3BvaW50ZXItZXZlbnRzJywgJ3JlbmRlcmluZy1pbnRlbnQnLCAnc2hhcGUtcmVuZGVyaW5nJywgJ3N0b3AtY29sb3InLCAnc3RvcC1vcGFjaXR5JywgJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nLCAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnLCAnc3Ryb2tlLWRhc2hhcnJheScsICdzdHJva2UtZGFzaG9mZnNldCcsICdzdHJva2UtbGluZWNhcCcsICdzdHJva2UtbGluZWpvaW4nLCAnc3Ryb2tlLW1pdGVybGltaXQnLCAnc3Ryb2tlLW9wYWNpdHknLCAnc3Ryb2tlLXdpZHRoJywgJ3RleHQtYW5jaG9yJywgJ3RleHQtZGVjb3JhdGlvbicsICd0ZXh0LXJlbmRlcmluZycsICd1bmRlcmxpbmUtcG9zaXRpb24nLCAndW5kZXJsaW5lLXRoaWNrbmVzcycsICd1bmljb2RlLWJpZGknLCAndW5pY29kZS1yYW5nZScsICd1bml0cy1wZXItZW0nLCAndi1hbHBoYWJldGljJywgJ3YtaGFuZ2luZycsICd2LWlkZW9ncmFwaGljJywgJ3YtbWF0aGVtYXRpY2FsJywgJ3ZlY3Rvci1lZmZlY3QnLCAndmVydC1hZHYteScsICd2ZXJ0LW9yaWdpbi14JywgJ3ZlcnQtb3JpZ2luLXknLCAnd29yZC1zcGFjaW5nJywgJ3dyaXRpbmctbW9kZScsICd4bWxuczp4bGluaycsICd4LWhlaWdodCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhsaW5rIG5hbWVzcGFjZS5cblxuWyd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBTdHJpbmcgU1ZHIGF0dHJpYnV0ZXMgd2l0aCB0aGUgeG1sIG5hbWVzcGFjZS5cblxuWyd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLCBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGF0dHJpYnV0ZSBleGlzdHMgYm90aCBpbiBIVE1MIGFuZCBTVkcuXG4vLyBUaGUgYXR0cmlidXRlIG5hbWUgaXMgY2FzZS1zZW5zaXRpdmUgaW4gU1ZHIHNvIHdlIGNhbid0IGp1c3QgdXNlXG4vLyB0aGUgUmVhY3QgbmFtZSBsaWtlIHdlIGRvIGZvciBhdHRyaWJ1dGVzIHRoYXQgZXhpc3Qgb25seSBpbiBIVE1MLlxuXG5bJ3RhYkluZGV4JywgJ2Nyb3NzT3JpZ2luJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGF0dHJpYnV0ZXMgYWNjZXB0IFVSTHMuIFRoZXNlIG11c3Qgbm90IGFsbG93IGphdmFzY3JpcHQ6IFVSTFMuXG4vLyBUaGVzZSB3aWxsIGFsc28gbmVlZCB0byBhY2NlcHQgVHJ1c3RlZCBUeXBlcyBvYmplY3QgaW4gdGhlIGZ1dHVyZS5cblxudmFyIHhsaW5rSHJlZiA9ICd4bGlua0hyZWYnO1xucHJvcGVydGllc1t4bGlua0hyZWZdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZCgneGxpbmtIcmVmJywgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4neGxpbms6aHJlZicsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgdHJ1ZSwgLy8gc2FuaXRpemVVUkxcbmZhbHNlKTtcblsnc3JjJywgJ2hyZWYnLCAnYWN0aW9uJywgJ2Zvcm1BY3Rpb24nXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHByb3BlcnRpZXNbYXR0cmlidXRlTmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKGF0dHJpYnV0ZU5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIHRydWUsIC8vIHNhbml0aXplVVJMXG4gIHRydWUpO1xufSk7XG5cbi8vIGFuZCBhbnkgbmV3bGluZSBvciB0YWIgYXJlIGZpbHRlcmVkIG91dCBhcyBpZiB0aGV5J3JlIG5vdCBwYXJ0IG9mIHRoZSBVUkwuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybC1wYXJzaW5nXG4vLyBUYWIgb3IgbmV3bGluZSBhcmUgZGVmaW5lZCBhcyBcXHJcXG5cXHQ6XG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYXNjaWktdGFiLW9yLW5ld2xpbmVcbi8vIEEgQzAgY29udHJvbCBpcyBhIGNvZGUgcG9pbnQgaW4gdGhlIHJhbmdlIFxcdTAwMDAgTlVMTCB0byBcXHUwMDFGXG4vLyBJTkZPUk1BVElPTiBTRVBBUkFUT1IgT05FLCBpbmNsdXNpdmU6XG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYzAtY29udHJvbC1vci1zcGFjZVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbnZhciBpc0phdmFTY3JpcHRQcm90b2NvbCA9IC9eW1xcdTAwMDAtXFx1MDAxRiBdKmpbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qdltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSpzW1xcclxcblxcdF0qY1tcXHJcXG5cXHRdKnJbXFxyXFxuXFx0XSppW1xcclxcblxcdF0qcFtcXHJcXG5cXHRdKnRbXFxyXFxuXFx0XSpcXDovaTtcbnZhciBkaWRXYXJuID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNhbml0aXplVVJMKHVybCkge1xuICB7XG4gICAgaWYgKCFkaWRXYXJuICYmIGlzSmF2YVNjcmlwdFByb3RvY29sLnRlc3QodXJsKSkge1xuICAgICAgZGlkV2FybiA9IHRydWU7XG5cbiAgICAgIGVycm9yKCdBIGZ1dHVyZSB2ZXJzaW9uIG9mIFJlYWN0IHdpbGwgYmxvY2sgamF2YXNjcmlwdDogVVJMcyBhcyBhIHNlY3VyaXR5IHByZWNhdXRpb24uICcgKyAnVXNlIGV2ZW50IGhhbmRsZXJzIGluc3RlYWQgaWYgeW91IGNhbi4gSWYgeW91IG5lZWQgdG8gZ2VuZXJhdGUgdW5zYWZlIEhUTUwgdHJ5ICcgKyAndXNpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgaW5zdGVhZC4gUmVhY3Qgd2FzIHBhc3NlZCAlcy4nLCBKU09OLnN0cmluZ2lmeSh1cmwpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgXCJleHBlY3RlZFwiIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLlxuICogU29tZSBwcm9wZXJ0aWVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbykge1xuICB7XG4gICAgaWYgKHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHkpIHtcbiAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuICAgICAgcmV0dXJuIG5vZGVbcHJvcGVydHlOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBjaGVjayBwcm90ZWN0cyBtdWx0aXBsZSB1c2VzIG9mIGBleHBlY3RlZGAsIHdoaWNoIGlzIHdoeSB0aGVcbiAgICAgIC8vIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uIHJ1bGUgaXMgZGlzYWJsZWQgaW4gc2V2ZXJhbCBzcG90c1xuICAgICAgLy8gYmVsb3cuXG4gICAgICB7XG4gICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24oZXhwZWN0ZWQsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIHByb3BlcnR5SW5mby5zYW5pdGl6ZVVSTCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGZ1bGx5IGRpc2FibGVkIGphdmFzY3JpcHQ6IFVSTHMsIGFuZCBpZlxuICAgICAgICAvLyB0aGUgaHlkcmF0aW9uIGlzIHN1Y2Nlc3NmdWwgb2YgYSBqYXZhc2NyaXB0OiBVUkwsIHdlXG4gICAgICAgIC8vIHN0aWxsIHdhbnQgdG8gd2FybiBvbiB0aGUgY2xpZW50LlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgICAgICAgc2FuaXRpemVVUkwoJycgKyBleHBlY3RlZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWU7XG4gICAgICB2YXIgc3RyaW5nVmFsdWUgPSBudWxsO1xuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTikge1xuICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgLy8gV2UgaGFkIGFuIGF0dHJpYnV0ZSBidXQgc2hvdWxkbid0IGhhdmUgaGFkIG9uZSwgc28gcmVhZCBpdFxuICAgICAgICAgIC8vIGZvciB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgICAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIGJvb2xlYW4sIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIHZhbHVlIGlzXG4gICAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBleHBlY3RlZC5cbiAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgIH0gLy8gRXZlbiBpZiB0aGlzIHByb3BlcnR5IHVzZXMgYSBuYW1lc3BhY2Ugd2UgdXNlIGdldEF0dHJpYnV0ZVxuICAgICAgICAvLyBiZWNhdXNlIHdlIGFzc3VtZSBpdHMgbmFtZXNwYWNlZCBuYW1lIGlzIHRoZSBzYW1lIGFzIG91ciBjb25maWcuXG4gICAgICAgIC8vIFRvIHVzZSBnZXRBdHRyaWJ1dGVOUyB3ZSBuZWVkIHRoZSBsb2NhbCBuYW1lIHdoaWNoIHdlIGRvbid0IGhhdmVcbiAgICAgICAgLy8gaW4gb3VyIGNvbmZpZyBhdG0uXG5cblxuICAgICAgICBzdHJpbmdWYWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUgPT09IG51bGwgPyBleHBlY3RlZCA6IHN0cmluZ1ZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nVmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIGF0dHJpYnV0ZSBvbiBhIG5vZGUuIE9ubHkgdXNlZCBpbiBERVYgZm9yIFNTUiB2YWxpZGF0aW9uLlxuICogVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLiBTb21lXG4gKiBhdHRyaWJ1dGVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgZXhwZWN0ZWQsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIHtcbiAgICBpZiAoIWlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW5vZGUuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cbiAgICB7XG4gICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKGV4cGVjdGVkLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIHZhbHVlLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuXG4gIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHZhbHVlID0gbnVsbDtcbiAgfVxuXG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnIHx8IHByb3BlcnR5SW5mbyA9PT0gbnVsbCkge1xuICAgIGlmIChpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICB2YXIgX2F0dHJpYnV0ZU5hbWUgPSBuYW1lO1xuXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoX2F0dHJpYnV0ZU5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAge1xuICAgICAgICAgIGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoX2F0dHJpYnV0ZU5hbWUsICAnJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbXVzdFVzZVByb3BlcnR5ID0gcHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eTtcblxuICBpZiAobXVzdFVzZVByb3BlcnR5KSB7XG4gICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHZhciB0eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgICBub2RlW3Byb3BlcnR5TmFtZV0gPSB0eXBlID09PSBCT09MRUFOID8gZmFsc2UgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udHJhcnkgdG8gYHNldEF0dHJpYnV0ZWAsIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBwcm9wZXJseVxuICAgICAgLy8gYHRvU3RyaW5nYGVkIGJ5IElFOC85LlxuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIFRoZSByZXN0IGFyZSB0cmVhdGVkIGFzIGF0dHJpYnV0ZXMgd2l0aCBzcGVjaWFsIGNhc2VzLlxuXG5cbiAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZSxcbiAgICAgIGF0dHJpYnV0ZU5hbWVzcGFjZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lc3BhY2U7XG5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF90eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgdmFyIGF0dHJpYnV0ZVZhbHVlO1xuXG4gICAgaWYgKF90eXBlID09PSBCT09MRUFOIHx8IF90eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4gJiYgdmFsdWUgPT09IHRydWUpIHtcbiAgICAgIC8vIElmIGF0dHJpYnV0ZSB0eXBlIGlzIGJvb2xlYW4sIHdlIGtub3cgZm9yIHN1cmUgaXQgd29uJ3QgYmUgYW4gZXhlY3V0aW9uIHNpbmtcbiAgICAgIC8vIGFuZCB3ZSB3b24ndCByZXF1aXJlIFRydXN0ZWQgVHlwZSBoZXJlLlxuICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYHNldEF0dHJpYnV0ZWAgd2l0aCBvYmplY3RzIGJlY29tZXMgb25seSBgW29iamVjdF1gIGluIElFOC85LFxuICAgICAgLy8gKCcnICsgdmFsdWUpIG1ha2VzIGl0IG91dHB1dCB0aGUgY29ycmVjdCB0b1N0cmluZygpLXZhbHVlLlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eUluZm8uc2FuaXRpemVVUkwpIHtcbiAgICAgICAgc2FuaXRpemVVUkwoYXR0cmlidXRlVmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGF0dHJpYnV0ZU5hbWVzcGFjZSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhhdHRyaWJ1dGVOYW1lc3BhY2UsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKTtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbnZhciBSRUFDVF9DQUNIRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY2FjaGUnKTtcbnZhciBSRUFDVF9UUkFDSU5HX01BUktFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QudHJhY2luZ19tYXJrZXInKTtcbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoICFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTsgLy8gSWYgb3VyIGNvbXBvbmVudCBmcmFtZSBpcyBsYWJlbGVkIFwiPGFub255bW91cz5cIlxuICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIGEgdXNlci1wcm92aWRlZCBcImRpc3BsYXlOYW1lXCJcbiAgICAgICAgICAgICAgICAvLyBzcGxpY2UgaXQgaW4gdG8gbWFrZSB0aGUgc3RhY2sgbW9yZSByZWFkYWJsZS5cblxuXG4gICAgICAgICAgICAgICAgaWYgKGZuLmRpc3BsYXlOYW1lICYmIF9mcmFtZS5pbmNsdWRlcygnPGFub255bW91cz4nKSkge1xuICAgICAgICAgICAgICAgICAgX2ZyYW1lID0gX2ZyYW1lLnJlcGxhY2UoJzxhbm9ueW1vdXM+JywgZm4uZGlzcGxheU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZShjdG9yLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGN0b3IsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUZpYmVyKGZpYmVyKSB7XG4gIHZhciBvd25lciA9ICBmaWJlci5fZGVidWdPd25lciA/IGZpYmVyLl9kZWJ1Z093bmVyLnR5cGUgOiBudWxsIDtcbiAgdmFyIHNvdXJjZSA9ICBmaWJlci5fZGVidWdTb3VyY2UgO1xuXG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdMYXp5Jyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIpO1xuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUNsYXNzQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZCh3b3JrSW5Qcm9ncmVzcykge1xuICB0cnkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcztcblxuICAgIGRvIHtcbiAgICAgIGluZm8gKz0gZGVzY3JpYmVGaWJlcihub2RlKTtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlKTtcblxuICAgIHJldHVybiBpbmZvO1xuICB9IGNhdGNoICh4KSB7XG4gICAgcmV0dXJuICdcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiAnICsgeC5tZXNzYWdlICsgJ1xcbicgKyB4LnN0YWNrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZGlzcGxheU5hbWUgPSBvdXRlclR5cGUuZGlzcGxheU5hbWU7XG5cbiAgaWYgKGRpc3BsYXlOYW1lKSB7XG4gICAgcmV0dXJuIGRpc3BsYXlOYW1lO1xuICB9XG5cbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZTtcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXG5cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59IC8vIE5vdGUgdGhhdCB0aGUgcmVjb25jaWxlciBwYWNrYWdlIHNob3VsZCBnZW5lcmFsbHkgcHJlZmVyIHRvIHVzZSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKCkgaW5zdGVhZC5cblxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuXG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgdmFyIG91dGVyTmFtZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbDtcblxuICAgICAgICBpZiAob3V0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG91dGVyTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnTWVtbyc7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lJDEob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59IC8vIEtlZXAgaW4gc3luYyB3aXRoIHNoYXJlZC9nZXRDb21wb25lbnROYW1lRnJvbVR5cGVcblxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSQxKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB7XG4gIHZhciB0YWcgPSBmaWJlci50YWcsXG4gICAgICB0eXBlID0gZmliZXIudHlwZTtcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgQ2FjaGVDb21wb25lbnQ6XG4gICAgICByZXR1cm4gJ0NhY2hlJztcblxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lJDEoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZSQxKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgY2FzZSBEZWh5ZHJhdGVkRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gJ0RlaHlkcmF0ZWRGcmFnbWVudCc7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUkMSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIC8vIEhvc3QgY29tcG9uZW50IHR5cGUgaXMgdGhlIGRpc3BsYXkgbmFtZSAoZS5nLiBcImRpdlwiLCBcIlZpZXdcIilcbiAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHJldHVybiAnUm9vdCc7XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgcmV0dXJuICdUZXh0JztcblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIC8vIE5hbWUgY29tZXMgZnJvbSB0aGUgdHlwZSBpbiB0aGlzIGNhc2U7IHdlIGRvbid0IGhhdmUgYSB0YWcuXG4gICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuXG4gICAgY2FzZSBNb2RlOlxuICAgICAgaWYgKHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUpIHtcbiAgICAgICAgLy8gRG9uJ3QgYmUgbGVzcyBzcGVjaWZpYyB0aGFuIHNoYXJlZC9nZXRDb21wb25lbnROYW1lRnJvbVR5cGVcbiAgICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdNb2RlJztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgcmV0dXJuICdPZmZzY3JlZW4nO1xuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiAnU2NvcGUnO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG5cbiAgICBjYXNlIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6XG4gICAgICByZXR1cm4gJ1RyYWNpbmdNYXJrZXInO1xuICAgIC8vIFRoZSBkaXNwbGF5IG5hbWUgZm9yIHRoaXMgdGFncyBjb21lIGZyb20gdGhlIHVzZXItcHJvdmlkZWQgdHlwZTpcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG52YXIgY3VycmVudCA9IG51bGw7XG52YXIgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgdHlwZW9mIG93bmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIob3duZXIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2KCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IC8vIFNhZmUgYmVjYXVzZSBpZiBjdXJyZW50IGZpYmVyIGV4aXN0cywgd2UgYXJlIHJlY29uY2lsaW5nLFxuICAgIC8vIGFuZCBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSB3b3JrLWluLXByb2dyZXNzIHZlcnNpb24uXG5cblxuICAgIHJldHVybiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2QoY3VycmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRDdXJyZW50RmliZXIoKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG4gICAgY3VycmVudCA9IG51bGw7XG4gICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0Q3VycmVudEZpYmVyKGZpYmVyKSB7XG4gIHtcbiAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IGZpYmVyID09PSBudWxsID8gbnVsbCA6IGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXY7XG4gICAgY3VycmVudCA9IGZpYmVyO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlcigpIHtcbiAge1xuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiBzZXRJc1JlbmRlcmluZyhyZW5kZXJpbmcpIHtcbiAge1xuICAgIGlzUmVuZGVyaW5nID0gcmVuZGVyaW5nO1xuICB9XG59XG5cbi8vIEZsb3cgZG9lcyBub3QgYWxsb3cgc3RyaW5nIGNvbmNhdGVuYXRpb24gb2YgbW9zdCBub24tc3RyaW5nIHR5cGVzLiBUbyB3b3JrXG4vLyBhcm91bmQgdGhpcyBsaW1pdGF0aW9uLCB3ZSB1c2UgYW4gb3BhcXVlIHR5cGUgdGhhdCBjYW4gb25seSBiZSBvYnRhaW5lZCBieVxuLy8gcGFzc2luZyB0aGUgdmFsdWUgdGhyb3VnaCBnZXRUb1N0cmluZ1ZhbHVlIGZpcnN0LlxuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gVGhlIGNvZXJjaW9uIHNhZmV0eSBjaGVjayBpcyBwZXJmb3JtZWQgaW4gZ2V0VG9TdHJpbmdWYWx1ZSgpLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gZnVuY3Rpb24sIHN5bWJvbCBhcmUgYXNzaWduZWQgYXMgZW1wdHkgc3RyaW5nc1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbnZhciBoYXNSZWFkT25seVZhbHVlID0ge1xuICBidXR0b246IHRydWUsXG4gIGNoZWNrYm94OiB0cnVlLFxuICBpbWFnZTogdHJ1ZSxcbiAgaGlkZGVuOiB0cnVlLFxuICByYWRpbzogdHJ1ZSxcbiAgcmVzZXQ6IHRydWUsXG4gIHN1Ym1pdDogdHJ1ZVxufTtcbmZ1bmN0aW9uIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHModGFnTmFtZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICghKGhhc1JlYWRPbmx5VmFsdWVbcHJvcHMudHlwZV0gfHwgcHJvcHMub25DaGFuZ2UgfHwgcHJvcHMub25JbnB1dCB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy52YWx1ZSA9PSBudWxsKSkge1xuICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuXG4gICAgaWYgKCEocHJvcHMub25DaGFuZ2UgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQgfHwgcHJvcHMuY2hlY2tlZCA9PSBudWxsKSkge1xuICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGBjaGVja2VkYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NoZWNrYWJsZShlbGVtKSB7XG4gIHZhciB0eXBlID0gZWxlbS50eXBlO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAodHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhY2tlcihub2RlKSB7XG4gIHJldHVybiBub2RlLl92YWx1ZVRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIGRldGFjaFRyYWNrZXIobm9kZSkge1xuICBub2RlLl92YWx1ZVRyYWNrZXIgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlID0gJyc7XG5cbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKGlzQ2hlY2thYmxlKG5vZGUpKSB7XG4gICAgdmFsdWUgPSBub2RlLmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdHJhY2tWYWx1ZU9uTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZUZpZWxkID0gaXNDaGVja2FibGUobm9kZSkgPyAnY2hlY2tlZCcgOiAndmFsdWUnO1xuICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHZhbHVlRmllbGQpO1xuXG4gIHtcbiAgICBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24obm9kZVt2YWx1ZUZpZWxkXSk7XG4gIH1cblxuICB2YXIgY3VycmVudFZhbHVlID0gJycgKyBub2RlW3ZhbHVlRmllbGRdOyAvLyBpZiBzb21lb25lIGhhcyBhbHJlYWR5IGRlZmluZWQgYSB2YWx1ZSBvciBTYWZhcmksIHRoZW4gYmFpbFxuICAvLyBhbmQgZG9uJ3QgdHJhY2sgdmFsdWUgd2lsbCBjYXVzZSBvdmVyIHJlcG9ydGluZyBvZiBjaGFuZ2VzLFxuICAvLyBidXQgaXQncyBiZXR0ZXIgdGhlbiBhIGhhcmQgZmFpbHVyZVxuICAvLyAobmVlZGVkIGZvciBjZXJ0YWluIHRlc3RzIHRoYXQgc3B5T24gaW5wdXQgdmFsdWVzIGFuZCBTYWZhcmkpXG5cbiAgaWYgKG5vZGUuaGFzT3duUHJvcGVydHkodmFsdWVGaWVsZCkgfHwgdHlwZW9mIGRlc2NyaXB0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkZXNjcmlwdG9yLmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5zZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsXG4gICAgICBzZXQgPSBkZXNjcmlwdG9yLnNldDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0LmNhbGwodGhpcyk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAge1xuICAgICAgICBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50VmFsdWUgPSAnJyArIHZhbHVlO1xuICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbiAgfSk7IC8vIFdlIGNvdWxkJ3ZlIHBhc3NlZCB0aGlzIHRoZSBmaXJzdCB0aW1lXG4gIC8vIGJ1dCBpdCB0cmlnZ2VycyBhIGJ1ZyBpbiBJRTExIGFuZCBFZGdlIDE0LzE1LlxuICAvLyBDYWxsaW5nIGRlZmluZVByb3BlcnR5KCkgYWdhaW4gc2hvdWxkIGJlIGVxdWl2YWxlbnQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE3NjhcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgIGVudW1lcmFibGU6IGRlc2NyaXB0b3IuZW51bWVyYWJsZVxuICB9KTtcbiAgdmFyIHRyYWNrZXIgPSB7XG4gICAgZ2V0VmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB7XG4gICAgICAgIGNoZWNrRm9ybUZpZWxkVmFsdWVTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgfSxcbiAgICBzdG9wVHJhY2tpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRldGFjaFRyYWNrZXIobm9kZSk7XG4gICAgICBkZWxldGUgbm9kZVt2YWx1ZUZpZWxkXTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB0cmFja2VyO1xufVxuXG5mdW5jdGlvbiB0cmFjayhub2RlKSB7XG4gIGlmIChnZXRUcmFja2VyKG5vZGUpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIFRPRE86IE9uY2UgaXQncyBqdXN0IEZpYmVyIHdlIGNhbiBtb3ZlIHRoaXMgdG8gbm9kZS5fd3JhcHBlclN0YXRlXG5cblxuICBub2RlLl92YWx1ZVRyYWNrZXIgPSB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlVmFsdWVJZkNoYW5nZWQobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHJhY2tlciA9IGdldFRyYWNrZXIobm9kZSk7IC8vIGlmIHRoZXJlIGlzIG5vIHRyYWNrZXIgYXQgdGhpcyBwb2ludCBpdCdzIHVubGlrZWx5XG4gIC8vIHRoYXQgdHJ5aW5nIGFnYWluIHdpbGwgc3VjY2VlZFxuXG4gIGlmICghdHJhY2tlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIGxhc3RWYWx1ZSA9IHRyYWNrZXIuZ2V0VmFsdWUoKTtcbiAgdmFyIG5leHRWYWx1ZSA9IGdldFZhbHVlRnJvbU5vZGUobm9kZSk7XG5cbiAgaWYgKG5leHRWYWx1ZSAhPT0gbGFzdFZhbHVlKSB7XG4gICAgdHJhY2tlci5zZXRWYWx1ZShuZXh0VmFsdWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KGRvYykge1xuICBkb2MgPSBkb2MgfHwgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHR5cGVvZiBkb2MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBkb2MuYWN0aXZlRWxlbWVudCB8fCBkb2MuYm9keTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBkb2MuYm9keTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gZmFsc2U7XG52YXIgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGlzQ29udHJvbGxlZChwcm9wcykge1xuICB2YXIgdXNlc0NoZWNrZWQgPSBwcm9wcy50eXBlID09PSAnY2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT09ICdyYWRpbyc7XG4gIHJldHVybiB1c2VzQ2hlY2tlZCA/IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA6IHByb3BzLnZhbHVlICE9IG51bGw7XG59XG4vKipcbiAqIEltcGxlbWVudHMgYW4gPGlucHV0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIHRoZXNlIG9wdGlvbmFsXG4gKiBwcm9wczogYGNoZWNrZWRgLCBgdmFsdWVgLCBgZGVmYXVsdENoZWNrZWRgLCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKlxuICogSWYgYGNoZWNrZWRgIG9yIGB2YWx1ZWAgYXJlIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnNcbiAqIHRoYXQgYWZmZWN0IHRoZSBjaGVja2VkIHN0YXRlIG9yIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIHRoZXkgYXJlIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBub3RcbiAqIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIHByb3BzIG11c3QgY2hhbmdlIGluIG9yZGVyIGZvclxuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIGFzIHVuY2hlY2tlZCAob3IgYGRlZmF1bHRDaGVja2VkYClcbiAqIHdpdGggYW4gZW1wdHkgdmFsdWUgKG9yIGBkZWZhdWx0VmFsdWVgKS5cbiAqXG4gKiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMTAyNS90aGUtaW5wdXQtZWxlbWVudC5odG1sXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG4gIHZhciBob3N0UHJvcHMgPSBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgZGVmYXVsdENoZWNrZWQ6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGNoZWNrZWQ6IGNoZWNrZWQgIT0gbnVsbCA/IGNoZWNrZWQgOiBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWRcbiAgfSk7XG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdpbnB1dCcsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5jaGVja2VkICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVja2VkIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSBjaGVja2VkIHByb3AsIG9yIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG5cbiAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCA/ICcnIDogcHJvcHMuZGVmYXVsdFZhbHVlO1xuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgaW5pdGlhbENoZWNrZWQ6IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA/IHByb3BzLmNoZWNrZWQgOiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUgIT0gbnVsbCA/IHByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlKSxcbiAgICBjb250cm9sbGVkOiBpc0NvbnRyb2xsZWQocHJvcHMpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuXG4gIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsICdjaGVja2VkJywgY2hlY2tlZCwgZmFsc2UpO1xuICB9XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgdmFyIGNvbnRyb2xsZWQgPSBpc0NvbnRyb2xsZWQocHJvcHMpO1xuXG4gICAgaWYgKCFub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiBjb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlucHV0IHRvIGJlIGNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIHVuZGVmaW5lZCB0byAnICsgJ2EgZGVmaW5lZCB2YWx1ZSwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmICFjb250cm9sbGVkICYmICFkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkKSB7XG4gICAgICBlcnJvcignQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYSBjb250cm9sbGVkIGlucHV0IHRvIGJlIHVuY29udHJvbGxlZC4gJyArICdUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gYSBkZWZpbmVkIHRvICcgKyAndW5kZWZpbmVkLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVDaGVja2VkKGVsZW1lbnQsIHByb3BzKTtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciB0eXBlID0gcHJvcHMudHlwZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHZhbHVlID09PSAwICYmIG5vZGUudmFsdWUgPT09ICcnIHx8IC8vIFdlIGV4cGxpY2l0bHkgd2FudCB0byBjb2VyY2UgdG8gbnVtYmVyIGhlcmUgaWYgcG9zc2libGUuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIG5vZGUudmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS52YWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0Jykge1xuICAgIC8vIFN1Ym1pdC9yZXNldCBpbnB1dHMgbmVlZCB0aGUgYXR0cmlidXRlIHJlbW92ZWQgY29tcGxldGVseSB0byBhdm9pZFxuICAgIC8vIGJsYW5rLXRleHQgYnV0dG9ucy5cbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgndmFsdWUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBjb21lcyBmcm9tIGEgY2FzY2FkZSBvZlxuICAgIC8vIHByb3BlcnRpZXM6XG4gICAgLy8gIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDMuIE90aGVyd2lzZSB0aGVyZSBzaG91bGQgYmUgbm8gY2hhbmdlXG4gICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpKSB7XG4gICAgICBzZXREZWZhdWx0VmFsdWUobm9kZSwgcHJvcHMudHlwZSwgZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy5kZWZhdWx0VmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgaXQgb25seSBjaGFuZ2VzIHdoZW4gaXQgbmVlZHNcbiAgICAvLyB0byBiZSByZW1vdmVkLCBzdWNoIGFzIHRyYW5zaXRpb25pbmcgZnJvbSBhIGNoZWNrYm94IGludG8gYSB0ZXh0IGlucHV0XG4gICAgaWYgKHByb3BzLmNoZWNrZWQgPT0gbnVsbCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFwcm9wcy5kZWZhdWx0Q2hlY2tlZDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIoZWxlbWVudCwgcHJvcHMsIGlzSHlkcmF0aW5nKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSB8fCBwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG4gICAgdmFyIGlzQnV0dG9uID0gdHlwZSA9PT0gJ3N1Ym1pdCcgfHwgdHlwZSA9PT0gJ3Jlc2V0JzsgLy8gQXZvaWQgc2V0dGluZyB2YWx1ZSBhdHRyaWJ1dGUgb24gc3VibWl0L3Jlc2V0IGlucHV0cyBhcyBpdCBvdmVycmlkZXMgdGhlXG4gICAgLy8gZGVmYXVsdCB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYnJvd3Nlci4gU2VlOiAjMTI4NzJcblxuICAgIGlmIChpc0J1dHRvbiAmJiAocHJvcHMudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcm9wcy52YWx1ZSA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7IC8vIERvIG5vdCBhc3NpZ24gdmFsdWUgaWYgaXQgaXMgYWxyZWFkeSBzZXQuIFRoaXMgcHJldmVudHMgdXNlciB0ZXh0IGlucHV0XG4gICAgLy8gZnJvbSBiZWluZyBsb3N0IGR1cmluZyBTU1IgaHlkcmF0aW9uLlxuXG4gICAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgICAge1xuICAgICAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIHByb3BlcnR5IHNob3VsZCB1c2VcbiAgICAgICAgLy8gdGhlIHdyYXBwZXJTdGF0ZS5faW5pdGlhbFZhbHVlIHByb3BlcnR5LiBUaGlzIHVzZXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMy4gQW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmIChpbml0aWFsVmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgICAgICBub2RlLnZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgYXR0cmlidXRlIGlzIHN5bmNocm9uaXplZCB0byB0aGUgcHJvcGVydHksXG4gICAgICAvLyBzbyB3ZSBhc3NpZ24gZGVmYXVsdFZhbHVlIHRvIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgLy8gYXNzaWdubWVudCBzdGVwIGFib3ZlLlxuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgfVxuICB9IC8vIE5vcm1hbGx5LCB3ZSdkIGp1c3QgZG8gYG5vZGUuY2hlY2tlZCA9IG5vZGUuY2hlY2tlZGAgdXBvbiBpbml0aWFsIG1vdW50LCBsZXNzIHRoaXMgYnVnXG4gIC8vIHRoaXMgaXMgbmVlZGVkIHRvIHdvcmsgYXJvdW5kIGEgY2hyb21lIGJ1ZyB3aGVyZSBzZXR0aW5nIGRlZmF1bHRDaGVja2VkXG4gIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAoZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgLy8gUmVmZXJlbmNlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02MDg0MTZcbiAgLy8gV2UgbmVlZCB0byB0ZW1wb3JhcmlseSB1bnNldCBuYW1lIHRvIGF2b2lkIGRpc3J1cHRpbmcgcmFkaW8gYnV0dG9uIGdyb3Vwcy5cblxuXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lO1xuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9ICcnO1xuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGJvdGggdGhlIGNoZWNrZWQgcHJvcGVydHkgYW5kXG4gICAgLy8gYXR0cmlidXRlIGFyZSBhc3NpZ25lZCBhdCB0aGUgc2FtZSB0aW1lIHVzaW5nIGRlZmF1bHRDaGVja2VkLiBUaGlzIHVzZXM6XG4gICAgLy9cbiAgICAvLyAgIDEuIFRoZSBjaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMi4gVGhlIGRlZmF1bHRDaGVja2VkIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgIC8vICAgMy4gT3RoZXJ3aXNlLCBmYWxzZVxuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQ7XG4gIH1cblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSBuYW1lO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdXBkYXRlV3JhcHBlcihub2RlLCBwcm9wcyk7XG4gIHVwZGF0ZU5hbWVkQ291c2lucyhub2RlLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU5hbWVkQ291c2lucyhyb290Tm9kZSwgcHJvcHMpIHtcbiAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuXG4gIGlmIChwcm9wcy50eXBlID09PSAncmFkaW8nICYmIG5hbWUgIT0gbnVsbCkge1xuICAgIHZhciBxdWVyeVJvb3QgPSByb290Tm9kZTtcblxuICAgIHdoaWxlIChxdWVyeVJvb3QucGFyZW50Tm9kZSkge1xuICAgICAgcXVlcnlSb290ID0gcXVlcnlSb290LnBhcmVudE5vZGU7XG4gICAgfSAvLyBJZiBgcm9vdE5vZGUuZm9ybWAgd2FzIG5vbi1udWxsLCB0aGVuIHdlIGNvdWxkIHRyeSBgZm9ybS5lbGVtZW50c2AsXG4gICAgLy8gYnV0IHRoYXQgc29tZXRpbWVzIGJlaGF2ZXMgc3RyYW5nZWx5IGluIElFOC4gV2UgY291bGQgYWxzbyB0cnkgdXNpbmdcbiAgICAvLyBgZm9ybS5nZXRFbGVtZW50c0J5TmFtZWAsIGJ1dCB0aGF0IHdpbGwgb25seSByZXR1cm4gZGlyZWN0IGNoaWxkcmVuXG4gICAgLy8gYW5kIHdvbid0IGluY2x1ZGUgaW5wdXRzIHRoYXQgdXNlIHRoZSBIVE1MNSBgZm9ybT1gIGF0dHJpYnV0ZS4gU2luY2VcbiAgICAvLyB0aGUgaW5wdXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gYSBmb3JtLiBJdCBtaWdodCBub3QgZXZlbiBiZSBpbiB0aGVcbiAgICAvLyBkb2N1bWVudC4gTGV0J3MganVzdCB1c2UgdGhlIGxvY2FsIGBxdWVyeVNlbGVjdG9yQWxsYCB0byBlbnN1cmUgd2UgZG9uJ3RcbiAgICAvLyBtaXNzIGFueXRoaW5nLlxuXG5cbiAgICB7XG4gICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKG5hbWUsICduYW1lJyk7XG4gICAgfVxuXG4gICAgdmFyIGdyb3VwID0gcXVlcnlSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9JyArIEpTT04uc3RyaW5naWZ5KCcnICsgbmFtZSkgKyAnXVt0eXBlPVwicmFkaW9cIl0nKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBvdGhlck5vZGUgPSBncm91cFtpXTtcblxuICAgICAgaWYgKG90aGVyTm9kZSA9PT0gcm9vdE5vZGUgfHwgb3RoZXJOb2RlLmZvcm0gIT09IHJvb3ROb2RlLmZvcm0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIFRoaXMgd2lsbCB0aHJvdyBpZiByYWRpbyBidXR0b25zIHJlbmRlcmVkIGJ5IGRpZmZlcmVudCBjb3BpZXMgb2YgUmVhY3RcbiAgICAgIC8vIGFuZCB0aGUgc2FtZSBuYW1lIGFyZSByZW5kZXJlZCBpbnRvIHRoZSBzYW1lIGZvcm0gKHNhbWUgYXMgIzE5MzkpLlxuICAgICAgLy8gVGhhdCdzIHByb2JhYmx5IG9rYXk7IHdlIGRvbid0IHN1cHBvcnQgaXQganVzdCBhcyB3ZSBkb24ndCBzdXBwb3J0XG4gICAgICAvLyBtaXhpbmcgUmVhY3QgcmFkaW8gYnV0dG9ucyB3aXRoIG5vbi1SZWFjdCBvbmVzLlxuXG5cbiAgICAgIHZhciBvdGhlclByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShvdGhlck5vZGUpO1xuXG4gICAgICBpZiAoIW90aGVyUHJvcHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWFjdERPTUlucHV0OiBNaXhpbmcgUmVhY3QgYW5kIG5vbi1SZWFjdCByYWRpbyBpbnB1dHMgd2l0aCB0aGUgJyArICdzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICAgICAgfSAvLyBXZSBuZWVkIHVwZGF0ZSB0aGUgdHJhY2tlZCB2YWx1ZSBvbiB0aGUgbmFtZWQgY291c2luIHNpbmNlIHRoZSB2YWx1ZVxuICAgICAgLy8gd2FzIGNoYW5nZWQgYnV0IHRoZSBpbnB1dCBzYXcgbm8gZXZlbnQgb3IgdmFsdWUgc2V0XG5cblxuICAgICAgdXBkYXRlVmFsdWVJZkNoYW5nZWQob3RoZXJOb2RlKTsgLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgLy8gYXMgYXBwcm9wcmlhdGUuXG5cbiAgICAgIHVwZGF0ZVdyYXBwZXIob3RoZXJOb2RlLCBvdGhlclByb3BzKTtcbiAgICB9XG4gIH1cbn0gLy8gSW4gQ2hyb21lLCBhc3NpZ25pbmcgZGVmYXVsdFZhbHVlIHRvIGNlcnRhaW4gaW5wdXQgdHlwZXMgdHJpZ2dlcnMgaW5wdXQgdmFsaWRhdGlvbi5cbi8vIEZvciBudW1iZXIgaW5wdXRzLCB0aGUgZGlzcGxheSB2YWx1ZSBsb3NlcyB0cmFpbGluZyBkZWNpbWFsIHBvaW50cy4gRm9yIGVtYWlsIGlucHV0cyxcbi8vIENocm9tZSByYWlzZXMgXCJUaGUgc3BlY2lmaWVkIHZhbHVlIDx4PiBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIuXG4vL1xuLy8gSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGRlZmF1bHRWYWx1ZSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYXZvaWRpbmcgdGhlc2UgcHJvYmxlbXNcbi8vIHdoZW4gdGhlIHVzZXIgaXMgaW5wdXR0aW5nIHRleHRcbi8vXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNTNcblxuXG5mdW5jdGlvbiBzZXREZWZhdWx0VmFsdWUobm9kZSwgdHlwZSwgdmFsdWUpIHtcbiAgaWYgKCAvLyBGb2N1c2VkIG51bWJlciBpbnB1dHMgc3luY2hyb25pemUgb24gYmx1ci4gU2VlIENoYW5nZUV2ZW50UGx1Z2luLmpzXG4gIHR5cGUgIT09ICdudW1iZXInIHx8IGdldEFjdGl2ZUVsZW1lbnQobm9kZS5vd25lckRvY3VtZW50KSAhPT0gbm9kZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAobm9kZS5kZWZhdWx0VmFsdWUgIT09IHRvU3RyaW5nKHZhbHVlKSkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IGZhbHNlO1xudmFyIGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSBmYWxzZTtcbnZhciBkaWRXYXJuSW52YWxpZElubmVySFRNTCA9IGZhbHNlO1xuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IGhvc3QgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICAvLyBJZiBhIHZhbHVlIGlzIG5vdCBwcm92aWRlZCwgdGhlbiB0aGUgY2hpbGRyZW4gbXVzdCBiZSBzaW1wbGUuXG4gICAgaWYgKHByb3BzLnZhbHVlID09IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdvYmplY3QnICYmIHByb3BzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2gocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGNoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZGlkV2FybkludmFsaWRDaGlsZCkge1xuICAgICAgICAgICAgZGlkV2FybkludmFsaWRDaGlsZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgaW5mZXIgdGhlIG9wdGlvbiB2YWx1ZSBvZiBjb21wbGV4IGNoaWxkcmVuLiAnICsgJ1Bhc3MgYSBgdmFsdWVgIHByb3Agb3IgdXNlIGEgcGxhaW4gc3RyaW5nIGFzIGNoaWxkcmVuIHRvIDxvcHRpb24+LicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuSW52YWxpZElubmVySFRNTCkge1xuICAgICAgICAgIGRpZFdhcm5JbnZhbGlkSW5uZXJIVE1MID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdQYXNzIGEgYHZhbHVlYCBwcm9wIGlmIHlvdSBzZXQgZGFuZ2Vyb3VzbHlJbm5lckhUTUwgc28gUmVhY3Qga25vd3MgJyArICd3aGljaCB2YWx1ZSBzaG91bGQgYmUgc2VsZWN0ZWQuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFRPRE86IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuXG5cbiAgICBpZiAocHJvcHMuc2VsZWN0ZWQgIT0gbnVsbCAmJiAhZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24pIHtcbiAgICAgIGVycm9yKCdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgb24gPHNlbGVjdD4gaW5zdGVhZCBvZiAnICsgJ3NldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi4nKTtcblxuICAgICAgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIC8vIHZhbHVlPVwiXCIgc2hvdWxkIG1ha2UgYSB2YWx1ZSBhdHRyaWJ1dGUgKCM2MjE5KVxuICBpZiAocHJvcHMudmFsdWUgIT0gbnVsbCkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHRvU3RyaW5nKGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpKSk7XG4gIH1cbn1cblxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDE7XG5cbntcbiAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICBpZiAob3duZXJOYW1lKSB7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciB2YWx1ZVByb3BOYW1lcyA9IFsndmFsdWUnLCAnZGVmYXVsdFZhbHVlJ107XG4vKipcbiAqIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICovXG5cbmZ1bmN0aW9uIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdzZWxlY3QnLCBwcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlUHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcE5hbWUgPSB2YWx1ZVByb3BOYW1lc1tpXTtcblxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcE5hbWVJc0FycmF5ID0gaXNBcnJheShwcm9wc1twcm9wTmFtZV0pO1xuXG4gICAgICBpZiAocHJvcHMubXVsdGlwbGUgJiYgIXByb3BOYW1lSXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmICcgKyAnYG11bHRpcGxlYCBpcyB0cnVlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb3BzLm11bHRpcGxlICYmIHByb3BOYW1lSXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGEgc2NhbGFyICcgKyAndmFsdWUgaWYgYG11bHRpcGxlYCBpcyBmYWxzZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMobm9kZSwgbXVsdGlwbGUsIHByb3BWYWx1ZSwgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gIHZhciBvcHRpb25zID0gbm9kZS5vcHRpb25zO1xuXG4gIGlmIChtdWx0aXBsZSkge1xuICAgIHZhciBzZWxlY3RlZFZhbHVlcyA9IHByb3BWYWx1ZTtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gUHJlZml4IHRvIGF2b2lkIGNoYW9zIHdpdGggc3BlY2lhbCBrZXlzLlxuICAgICAgc2VsZWN0ZWRWYWx1ZVsnJCcgKyBzZWxlY3RlZFZhbHVlc1tpXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBvcHRpb25zLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eSgnJCcgKyBvcHRpb25zW19pXS52YWx1ZSk7XG5cbiAgICAgIGlmIChvcHRpb25zW19pXS5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdGVkICYmIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW19pXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgc2V0IGBzZWxlY3QudmFsdWVgIGFzIGV4YWN0IGJlaGF2aW9yIGlzbid0IGNvbnNpc3RlbnQgYWNyb3NzIGFsbFxuICAgIC8vIGJyb3dzZXJzIGZvciBhbGwgY2FzZXMuXG4gICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShwcm9wVmFsdWUpKTtcblxuICAgIHZhciBkZWZhdWx0U2VsZWN0ZWQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgb3B0aW9ucy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICBpZiAob3B0aW9uc1tfaTJdLnZhbHVlID09PSBfc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBvcHRpb25zW19pMl0uc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgICBvcHRpb25zW19pMl0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRTZWxlY3RlZCA9PT0gbnVsbCAmJiAhb3B0aW9uc1tfaTJdLmRpc2FibGVkKSB7XG4gICAgICAgIGRlZmF1bHRTZWxlY3RlZCA9IG9wdGlvbnNbX2kyXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFNlbGVjdGVkICE9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0U2VsZWN0ZWQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHNlbGVjdD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgb3B0aW9uYWxseSBzZXR0aW5nIHRoZVxuICogcHJvcHMgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuIElmIGBtdWx0aXBsZWAgaXMgZmFsc2UsIHRoZSBwcm9wIG11c3QgYmUgYVxuICogc3RyaW5nYWJsZS4gSWYgYG11bHRpcGxlYCBpcyB0cnVlLCB0aGUgcHJvcCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ2FibGVzLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGNoYW5nZSB0aGVcbiAqIHNlbGVjdGVkIG9wdGlvbiB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAqXG4gKiBJZiBpdCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBvcHRpb25zIHdpbGwgbm90XG4gKiB1cGRhdGUgaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb25zLiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIG9wdGlvbnMgdG8gdXBkYXRlLlxuICpcbiAqIElmIGBkZWZhdWx0VmFsdWVgIGlzIHByb3ZpZGVkLCBhbnkgb3B0aW9ucyB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZXMgd2lsbCBiZVxuICogc2VsZWN0ZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMShlbGVtZW50LCBwcm9wcykge1xuICByZXR1cm4gYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgfSk7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcyk7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgd2FzTXVsdGlwbGU6ICEhcHJvcHMubXVsdGlwbGVcbiAgfTtcblxuICB7XG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxKSB7XG4gICAgICBlcnJvcignU2VsZWN0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBzZWxlY3QgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICBub2RlLm11bHRpcGxlID0gISFwcm9wcy5tdWx0aXBsZTtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RVcGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHdhc011bHRpcGxlID0gbm9kZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlO1xuICBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmICh3YXNNdWx0aXBsZSAhPT0gISFwcm9wcy5tdWx0aXBsZSkge1xuICAgIC8vIEZvciBzaW1wbGljaXR5LCByZWFwcGx5IGBkZWZhdWx0VmFsdWVgIGlmIGBtdWx0aXBsZWAgaXMgdG9nZ2xlZC5cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmV2ZXJ0IHRoZSBzZWxlY3QgYmFjayB0byBpdHMgZGVmYXVsdCB1bnNlbGVjdGVkIHN0YXRlLlxuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5tdWx0aXBsZSA/IFtdIDogJycsIGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IGZhbHNlO1xuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8dGV4dGFyZWE+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgYHZhbHVlYCwgYW5kXG4gKiBgZGVmYXVsdFZhbHVlYC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHRyYWRpdGlvbmFsIERPTSBBUEkgYmVjYXVzZSB2YWx1ZSBpc1xuICogdXN1YWxseSBzZXQgYXMgUENEQVRBIGNoaWxkcmVuLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGVcbiAqIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsXG4gKiBub3QgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUsIHRoZSBwcm9wXG4gKiBgZGVmYXVsdFZhbHVlYCBpZiBzcGVjaWZpZWQsIG9yIHRoZSBjaGlsZHJlbiBjb250ZW50IChkZXByZWNhdGVkKS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIGlmIChwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi4nKTtcbiAgfSAvLyBBbHdheXMgc2V0IGNoaWxkcmVuIHRvIHRoZSBzYW1lIHRoaW5nLiBJbiBJRTksIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugd2lsbFxuICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLiAgV2UgY291bGQgYWRkIGEgY2hlY2sgaW4gc2V0VGV4dENvbnRlbnRcbiAgLy8gdG8gb25seSBzZXQgdGhlIHZhbHVlIGlmL3doZW4gdGhlIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgbm9kZSB2YWx1ZSAod2hpY2ggd291bGRcbiAgLy8gY29tcGxldGVseSBzb2x2ZSB0aGlzIElFOSBidWcpLCBidXQgU2ViYXN0aWFuK1NvcGhpZSBzZWVtZWQgdG8gbGlrZSB0aGlzXG4gIC8vIHNvbHV0aW9uLiBUaGUgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzIGZvcmNlZFxuICAvLyB0byBiZSBhIHN0cmluZy5cblxuXG4gIHZhciBob3N0UHJvcHMgPSBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGlsZHJlbjogdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSlcbiAgfSk7XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ3RleHRhcmVhJywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWxEZWZhdWx0VmFsKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYSB0ZXh0YXJlYSB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gJyArICdUZXh0YXJlYSBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdGV4dGFyZWEgJyArICdhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcpO1xuXG4gICAgICBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluaXRpYWxWYWx1ZSA9IHByb3BzLnZhbHVlOyAvLyBPbmx5IGJvdGhlciBmZXRjaGluZyBkZWZhdWx0IHZhbHVlIGlmIHdlJ3JlIGdvaW5nIHRvIHVzZSBpdFxuXG4gIGlmIChpbml0aWFsVmFsdWUgPT0gbnVsbCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7XG5cbiAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICBlcnJvcignVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIGluc3RlYWQgb2Ygc2V0dGluZyAnICsgJ2NoaWxkcmVuIG9uIDx0ZXh0YXJlYT4uJyk7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJZiB5b3Ugc3VwcGx5IGBkZWZhdWx0VmFsdWVgIG9uIGEgPHRleHRhcmVhPiwgZG8gbm90IHBhc3MgY2hpbGRyZW4uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCc8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlblswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgaW5pdGlhbFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIGluaXRpYWxWYWx1ZTogZ2V0VG9TdHJpbmdWYWx1ZShpbml0aWFsVmFsdWUpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgIHZhciBuZXdWYWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTsgLy8gVG8gYXZvaWQgc2lkZSBlZmZlY3RzIChzdWNoIGFzIGxvc2luZyB0ZXh0IHNlbGVjdGlvbiksIG9ubHkgc2V0IHZhbHVlIGlmIGNoYW5nZWRcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgbm9kZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCAmJiBub2RlLmRlZmF1bHRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhkZWZhdWx0VmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBUaGlzIGlzIGluIHBvc3RNb3VudCBiZWNhdXNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBET00gbm9kZSwgd2hpY2ggaXMgbm90XG4gIC8vIGF2YWlsYWJsZSB1bnRpbCBhZnRlciB0aGUgY29tcG9uZW50IGhhcyBtb3VudGVkLlxuXG4gIHZhciB0ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQ7IC8vIE9ubHkgc2V0IG5vZGUudmFsdWUgaWYgdGV4dENvbnRlbnQgaXMgZXF1YWwgdG8gdGhlIGV4cGVjdGVkXG4gIC8vIGluaXRpYWwgdmFsdWUuIEluIElFMTAvSUUxMSB0aGVyZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlXG4gIC8vIHdpbGwgcG9wdWxhdGUgdGV4dENvbnRlbnQgYXMgd2VsbC5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvMTAxNTI1L1xuXG4gIGlmICh0ZXh0Q29udGVudCA9PT0gbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSkge1xuICAgIGlmICh0ZXh0Q29udGVudCAhPT0gJycgJiYgdGV4dENvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0ZXh0Q29udGVudDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMihlbGVtZW50LCBwcm9wcykge1xuICAvLyBET00gY29tcG9uZW50IGlzIHN0aWxsIG1vdW50ZWQ7IHVwZGF0ZVxuICB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpO1xufVxuXG52YXIgSFRNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG52YXIgTUFUSF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG52YXIgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7IC8vIEFzc3VtZXMgdGhlcmUgaXMgbm8gcGFyZW50IG5hbWVzcGFjZS5cblxuZnVuY3Rpb24gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnc3ZnJzpcbiAgICAgIHJldHVybiBTVkdfTkFNRVNQQUNFO1xuXG4gICAgY2FzZSAnbWF0aCc6XG4gICAgICByZXR1cm4gTUFUSF9OQU1FU1BBQ0U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEhUTUxfTkFNRVNQQUNFO1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnROYW1lc3BhY2UsIHR5cGUpIHtcbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PSBudWxsIHx8IHBhcmVudE5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAvLyBObyAob3IgZGVmYXVsdCkgcGFyZW50IG5hbWVzcGFjZTogcG90ZW50aWFsIGVudHJ5IHBvaW50LlxuICAgIHJldHVybiBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSk7XG4gIH1cblxuICBpZiAocGFyZW50TmFtZXNwYWNlID09PSBTVkdfTkFNRVNQQUNFICYmIHR5cGUgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgIC8vIFdlJ3JlIGxlYXZpbmcgU1ZHLlxuICAgIHJldHVybiBIVE1MX05BTUVTUEFDRTtcbiAgfSAvLyBCeSBkZWZhdWx0LCBwYXNzIG5hbWVzcGFjZSBiZWxvdy5cblxuXG4gIHJldHVybiBwYXJlbnROYW1lc3BhY2U7XG59XG5cbi8qIGdsb2JhbHMgTVNBcHAgKi9cblxuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB3aGljaCBoYXMgJ3Vuc2FmZScgcHJpdmlsZWdlcyAocmVxdWlyZWQgYnkgd2luZG93czggYXBwcylcbiAqL1xudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xuICBpZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuYyhhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbn07XG5cbnZhciByZXVzYWJsZVNWR0NvbnRhaW5lcjtcbi8qKlxuICogU2V0IHRoZSBpbm5lckhUTUwgcHJvcGVydHkgb2YgYSBub2RlXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldElubmVySFRNTCA9IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGh0bWwpIHtcbiAgaWYgKG5vZGUubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFKSB7XG5cbiAgICBpZiAoISgnaW5uZXJIVE1MJyBpbiBub2RlKSkge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBpbm5lckhUTUwgZm9yIFNWRyBub2Rlcywgc28gaW5zdGVhZCB3ZSBpbmplY3QgdGhlXG4gICAgICAvLyBuZXcgbWFya3VwIGluIGEgdGVtcCBub2RlIGFuZCB0aGVuIG1vdmUgdGhlIGNoaWxkIG5vZGVzIGFjcm9zcyBpbnRvXG4gICAgICAvLyB0aGUgdGFyZ2V0IG5vZGVcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyID0gcmV1c2FibGVTVkdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICByZXVzYWJsZVNWR0NvbnRhaW5lci5pbm5lckhUTUwgPSAnPHN2Zz4nICsgaHRtbC52YWx1ZU9mKCkudG9TdHJpbmcoKSArICc8L3N2Zz4nO1xuICAgICAgdmFyIHN2Z05vZGUgPSByZXVzYWJsZVNWR0NvbnRhaW5lci5maXJzdENoaWxkO1xuXG4gICAgICB3aGlsZSAobm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHN2Z05vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLmFwcGVuZENoaWxkKHN2Z05vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG59KTtcblxuLyoqXG4gKiBIVE1MIG5vZGVUeXBlIHZhbHVlcyB0aGF0IHJlcHJlc2VudCB0aGUgdHlwZSBvZiB0aGUgbm9kZVxuICovXG52YXIgRUxFTUVOVF9OT0RFID0gMTtcbnZhciBURVhUX05PREUgPSAzO1xudmFyIENPTU1FTlRfTk9ERSA9IDg7XG52YXIgRE9DVU1FTlRfTk9ERSA9IDk7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSA9IDExO1xuXG4vKipcbiAqIFNldCB0aGUgdGV4dENvbnRlbnQgcHJvcGVydHkgb2YgYSBub2RlLiBGb3IgdGV4dCB1cGRhdGVzLCBpdCdzIGZhc3RlclxuICogdG8gc2V0IHRoZSBgbm9kZVZhbHVlYCBvZiB0aGUgVGV4dCBub2RlIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmdcbiAqIGAudGV4dENvbnRlbnRgIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBleGlzdGluZyBub2RlIGFuZCBjcmVhdGUgYSBuZXcgb25lLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uIChub2RlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgdmFyIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBpZiAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkID09PSBub2RlLmxhc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn07XG5cbi8vIExpc3QgZGVyaXZlZCBmcm9tIEdlY2tvIHNvdXJjZSBjb2RlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvZ2Vja28tZGV2L2Jsb2IvNGU2MzhlZmM3MS9sYXlvdXQvc3R5bGUvdGVzdC9wcm9wZXJ0eV9kYXRhYmFzZS5qc1xudmFyIHNob3J0aGFuZFRvTG9uZ2hhbmQgPSB7XG4gIGFuaW1hdGlvbjogWydhbmltYXRpb25EZWxheScsICdhbmltYXRpb25EaXJlY3Rpb24nLCAnYW5pbWF0aW9uRHVyYXRpb24nLCAnYW5pbWF0aW9uRmlsbE1vZGUnLCAnYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQnLCAnYW5pbWF0aW9uTmFtZScsICdhbmltYXRpb25QbGF5U3RhdGUnLCAnYW5pbWF0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgYmFja2dyb3VuZDogWydiYWNrZ3JvdW5kQXR0YWNobWVudCcsICdiYWNrZ3JvdW5kQ2xpcCcsICdiYWNrZ3JvdW5kQ29sb3InLCAnYmFja2dyb3VuZEltYWdlJywgJ2JhY2tncm91bmRPcmlnaW4nLCAnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJywgJ2JhY2tncm91bmRSZXBlYXQnLCAnYmFja2dyb3VuZFNpemUnXSxcbiAgYmFja2dyb3VuZFBvc2l0aW9uOiBbJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWSddLFxuICBib3JkZXI6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrRW5kOiBbJ2JvcmRlckJsb2NrRW5kQ29sb3InLCAnYm9yZGVyQmxvY2tFbmRTdHlsZScsICdib3JkZXJCbG9ja0VuZFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrU3RhcnQ6IFsnYm9yZGVyQmxvY2tTdGFydENvbG9yJywgJ2JvcmRlckJsb2NrU3RhcnRTdHlsZScsICdib3JkZXJCbG9ja1N0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyQm90dG9tOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG4gIGJvcmRlckNvbG9yOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclRvcENvbG9yJ10sXG4gIGJvcmRlckltYWdlOiBbJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCddLFxuICBib3JkZXJJbmxpbmVFbmQ6IFsnYm9yZGVySW5saW5lRW5kQ29sb3InLCAnYm9yZGVySW5saW5lRW5kU3R5bGUnLCAnYm9yZGVySW5saW5lRW5kV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lU3RhcnQ6IFsnYm9yZGVySW5saW5lU3RhcnRDb2xvcicsICdib3JkZXJJbmxpbmVTdGFydFN0eWxlJywgJ2JvcmRlcklubGluZVN0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyTGVmdDogWydib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCddLFxuICBib3JkZXJSYWRpdXM6IFsnYm9yZGVyQm90dG9tTGVmdFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJ10sXG4gIGJvcmRlclJpZ2h0OiBbJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJ10sXG4gIGJvcmRlclN0eWxlOiBbJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclRvcFN0eWxlJ10sXG4gIGJvcmRlclRvcDogWydib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJXaWR0aDogWydib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BXaWR0aCddLFxuICBjb2x1bW5SdWxlOiBbJ2NvbHVtblJ1bGVDb2xvcicsICdjb2x1bW5SdWxlU3R5bGUnLCAnY29sdW1uUnVsZVdpZHRoJ10sXG4gIGNvbHVtbnM6IFsnY29sdW1uQ291bnQnLCAnY29sdW1uV2lkdGgnXSxcbiAgZmxleDogWydmbGV4QmFzaXMnLCAnZmxleEdyb3cnLCAnZmxleFNocmluayddLFxuICBmbGV4RmxvdzogWydmbGV4RGlyZWN0aW9uJywgJ2ZsZXhXcmFwJ10sXG4gIGZvbnQ6IFsnZm9udEZhbWlseScsICdmb250RmVhdHVyZVNldHRpbmdzJywgJ2ZvbnRLZXJuaW5nJywgJ2ZvbnRMYW5ndWFnZU92ZXJyaWRlJywgJ2ZvbnRTaXplJywgJ2ZvbnRTaXplQWRqdXN0JywgJ2ZvbnRTdHJldGNoJywgJ2ZvbnRTdHlsZScsICdmb250VmFyaWFudCcsICdmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJywgJ2ZvbnRXZWlnaHQnLCAnbGluZUhlaWdodCddLFxuICBmb250VmFyaWFudDogWydmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJ10sXG4gIGdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWQ6IFsnZ3JpZEF1dG9Db2x1bW5zJywgJ2dyaWRBdXRvRmxvdycsICdncmlkQXV0b1Jvd3MnLCAnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGdyaWRBcmVhOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0JywgJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRDb2x1bW46IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnXSxcbiAgZ3JpZENvbHVtbkdhcDogWydjb2x1bW5HYXAnXSxcbiAgZ3JpZEdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWRSb3c6IFsnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZFJvd0dhcDogWydyb3dHYXAnXSxcbiAgZ3JpZFRlbXBsYXRlOiBbJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBsaXN0U3R5bGU6IFsnbGlzdFN0eWxlSW1hZ2UnLCAnbGlzdFN0eWxlUG9zaXRpb24nLCAnbGlzdFN0eWxlVHlwZSddLFxuICBtYXJnaW46IFsnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luVG9wJ10sXG4gIG1hcmtlcjogWydtYXJrZXJFbmQnLCAnbWFya2VyTWlkJywgJ21hcmtlclN0YXJ0J10sXG4gIG1hc2s6IFsnbWFza0NsaXAnLCAnbWFza0NvbXBvc2l0ZScsICdtYXNrSW1hZ2UnLCAnbWFza01vZGUnLCAnbWFza09yaWdpbicsICdtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknLCAnbWFza1JlcGVhdCcsICdtYXNrU2l6ZSddLFxuICBtYXNrUG9zaXRpb246IFsnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJ10sXG4gIG91dGxpbmU6IFsnb3V0bGluZUNvbG9yJywgJ291dGxpbmVTdHlsZScsICdvdXRsaW5lV2lkdGgnXSxcbiAgb3ZlcmZsb3c6IFsnb3ZlcmZsb3dYJywgJ292ZXJmbG93WSddLFxuICBwYWRkaW5nOiBbJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdUb3AnXSxcbiAgcGxhY2VDb250ZW50OiBbJ2FsaWduQ29udGVudCcsICdqdXN0aWZ5Q29udGVudCddLFxuICBwbGFjZUl0ZW1zOiBbJ2FsaWduSXRlbXMnLCAnanVzdGlmeUl0ZW1zJ10sXG4gIHBsYWNlU2VsZjogWydhbGlnblNlbGYnLCAnanVzdGlmeVNlbGYnXSxcbiAgdGV4dERlY29yYXRpb246IFsndGV4dERlY29yYXRpb25Db2xvcicsICd0ZXh0RGVjb3JhdGlvbkxpbmUnLCAndGV4dERlY29yYXRpb25TdHlsZSddLFxuICB0ZXh0RW1waGFzaXM6IFsndGV4dEVtcGhhc2lzQ29sb3InLCAndGV4dEVtcGhhc2lzU3R5bGUnXSxcbiAgdHJhbnNpdGlvbjogWyd0cmFuc2l0aW9uRGVsYXknLCAndHJhbnNpdGlvbkR1cmF0aW9uJywgJ3RyYW5zaXRpb25Qcm9wZXJ0eScsICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgd29yZFdyYXA6IFsnb3ZlcmZsb3dXcmFwJ11cbn07XG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG52YXIgaXNVbml0bGVzc051bWJlciA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHRydWUsXG4gIGFzcGVjdFJhdGlvOiB0cnVlLFxuICBib3JkZXJJbWFnZU91dHNldDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VTbGljZTogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogdHJ1ZSxcbiAgYm94RmxleDogdHJ1ZSxcbiAgYm94RmxleEdyb3VwOiB0cnVlLFxuICBib3hPcmRpbmFsR3JvdXA6IHRydWUsXG4gIGNvbHVtbkNvdW50OiB0cnVlLFxuICBjb2x1bW5zOiB0cnVlLFxuICBmbGV4OiB0cnVlLFxuICBmbGV4R3JvdzogdHJ1ZSxcbiAgZmxleFBvc2l0aXZlOiB0cnVlLFxuICBmbGV4U2hyaW5rOiB0cnVlLFxuICBmbGV4TmVnYXRpdmU6IHRydWUsXG4gIGZsZXhPcmRlcjogdHJ1ZSxcbiAgZ3JpZEFyZWE6IHRydWUsXG4gIGdyaWRSb3c6IHRydWUsXG4gIGdyaWRSb3dFbmQ6IHRydWUsXG4gIGdyaWRSb3dTcGFuOiB0cnVlLFxuICBncmlkUm93U3RhcnQ6IHRydWUsXG4gIGdyaWRDb2x1bW46IHRydWUsXG4gIGdyaWRDb2x1bW5FbmQ6IHRydWUsXG4gIGdyaWRDb2x1bW5TcGFuOiB0cnVlLFxuICBncmlkQ29sdW1uU3RhcnQ6IHRydWUsXG4gIGZvbnRXZWlnaHQ6IHRydWUsXG4gIGxpbmVDbGFtcDogdHJ1ZSxcbiAgbGluZUhlaWdodDogdHJ1ZSxcbiAgb3BhY2l0eTogdHJ1ZSxcbiAgb3JkZXI6IHRydWUsXG4gIG9ycGhhbnM6IHRydWUsXG4gIHRhYlNpemU6IHRydWUsXG4gIHdpZG93czogdHJ1ZSxcbiAgekluZGV4OiB0cnVlLFxuICB6b29tOiB0cnVlLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiB0cnVlLFxuICBmbG9vZE9wYWNpdHk6IHRydWUsXG4gIHN0b3BPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VEYXNoYXJyYXk6IHRydWUsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IHRydWUsXG4gIHN0cm9rZU1pdGVybGltaXQ6IHRydWUsXG4gIHN0cm9rZU9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZVdpZHRoOiB0cnVlXG59O1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IHZlbmRvci1zcGVjaWZpYyBwcmVmaXgsIGVnOiBXZWJraXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgc3R5bGUgbmFtZSwgZWc6IHRyYW5zaXRpb25EdXJhdGlvblxuICogQHJldHVybiB7c3RyaW5nfSBzdHlsZSBuYW1lIHByZWZpeGVkIHdpdGggYHByZWZpeGAsIHByb3Blcmx5IGNhbWVsQ2FzZWQsIGVnOlxuICogV2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uXG4gKi9cblxuZnVuY3Rpb24gcHJlZml4S2V5KHByZWZpeCwga2V5KSB7XG4gIHJldHVybiBwcmVmaXggKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc3Vic3RyaW5nKDEpO1xufVxuLyoqXG4gKiBTdXBwb3J0IHN0eWxlIG5hbWVzIHRoYXQgbWF5IGNvbWUgcGFzc2VkIGluIHByZWZpeGVkIGJ5IGFkZGluZyBwZXJtdXRhdGlvbnNcbiAqIG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xuXG5cbnZhciBwcmVmaXhlcyA9IFsnV2Via2l0JywgJ21zJywgJ01veicsICdPJ107IC8vIFVzaW5nIE9iamVjdC5rZXlzIGhlcmUsIG9yIGVsc2UgdGhlIHZhbmlsbGEgZm9yLWluIGxvb3AgbWFrZXMgSUU4IGdvIGludG8gYW5cbi8vIGluZmluaXRlIGxvb3AsIGJlY2F1c2UgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgbmV3bHkgYWRkZWQgcHJvcHMgdG9vLlxuXG5PYmplY3Qua2V5cyhpc1VuaXRsZXNzTnVtYmVyKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIHByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgIGlzVW5pdGxlc3NOdW1iZXJbcHJlZml4S2V5KHByZWZpeCwgcHJvcCldID0gaXNVbml0bGVzc051bWJlcltwcm9wXTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgaW50byB0aGUgcHJvcGVyIGNzcyB3cml0YWJsZSB2YWx1ZS4gVGhlIHN0eWxlIG5hbWUgYG5hbWVgXG4gKiBzaG91bGQgYmUgbG9naWNhbCAobm8gaHlwaGVucyksIGFzIHNwZWNpZmllZFxuICogaW4gYENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENTUyBwcm9wZXJ0eSBuYW1lIHN1Y2ggYXMgYHRvcE1hcmdpbmAuXG4gKiBAcGFyYW0geyp9IHZhbHVlIENTUyBwcm9wZXJ0eSB2YWx1ZSBzdWNoIGFzIGAxMHB4YC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBzdHlsZSB2YWx1ZSB3aXRoIGRpbWVuc2lvbnMgYXBwbGllZC5cbiAqL1xuXG5mdW5jdGlvbiBkYW5nZXJvdXNTdHlsZVZhbHVlKG5hbWUsIHZhbHVlLCBpc0N1c3RvbVByb3BlcnR5KSB7XG4gIC8vIE5vdGUgdGhhdCB3ZSd2ZSByZW1vdmVkIGVzY2FwZVRleHRGb3JCcm93c2VyKCkgY2FsbHMgaGVyZSBzaW5jZSB0aGVcbiAgLy8gd2hvbGUgc3RyaW5nIHdpbGwgYmUgZXNjYXBlZCB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgaW5qZWN0ZWQgaW50b1xuICAvLyB0aGUgbWFya3VwLiBJZiB5b3UgcHJvdmlkZSB1bnNhZmUgdXNlciBkYXRhIGhlcmUgdGhleSBjYW4gaW5qZWN0XG4gIC8vIGFyYml0cmFyeSBDU1Mgd2hpY2ggbWF5IGJlIHByb2JsZW1hdGljIChJIGNvdWxkbid0IHJlcHJvIHRoaXMpOlxuICAvLyBodHRwczovL3d3dy5vd2FzcC5vcmcvaW5kZXgucGhwL1hTU19GaWx0ZXJfRXZhc2lvbl9DaGVhdF9TaGVldFxuICAvLyBodHRwOi8vd3d3LnRoZXNwYW5uZXIuY28udWsvMjAwNy8xMS8yNi91bHRpbWF0ZS14c3MtY3NzLWluamVjdGlvbi9cbiAgLy8gVGhpcyBpcyBub3QgYW4gWFNTIGhvbGUgYnV0IGluc3RlYWQgYSBwb3RlbnRpYWwgQ1NTIGluamVjdGlvbiBpc3N1ZVxuICAvLyB3aGljaCBoYXMgbGVhZCB0byBhIGdyZWF0ZXIgZGlzY3Vzc2lvbiBhYm91dCBob3cgd2UncmUgZ29pbmcgdG9cbiAgLy8gdHJ1c3QgVVJMcyBtb3ZpbmcgZm9yd2FyZC4gU2VlICMyMTE1OTAxXG4gIHZhciBpc0VtcHR5ID0gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG5cbiAgaWYgKGlzRW1wdHkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoIWlzQ3VzdG9tUHJvcGVydHkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCAmJiAhKGlzVW5pdGxlc3NOdW1iZXIuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgaXNVbml0bGVzc051bWJlcltuYW1lXSkpIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnOyAvLyBQcmVzdW1lcyBpbXBsaWNpdCAncHgnIHN1ZmZpeCBmb3IgdW5pdGxlc3MgbnVtYmVyc1xuICB9XG5cbiAge1xuICAgIGNoZWNrQ1NTUHJvcGVydHlTdHJpbmdDb2VyY2lvbih2YWx1ZSwgbmFtZSk7XG4gIH1cblxuICByZXR1cm4gKCcnICsgdmFsdWUpLnRyaW0oKTtcbn1cblxudmFyIHVwcGVyY2FzZVBhdHRlcm4gPSAvKFtBLVpdKS9nO1xudmFyIG1zUGF0dGVybiA9IC9ebXMtLztcbi8qKlxuICogSHlwaGVuYXRlcyBhIGNhbWVsY2FzZWQgQ1NTIHByb3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ01velRyYW5zaXRpb24nKVxuICogICA8IFwiLW1vei10cmFuc2l0aW9uXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ21zVHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbXMtdHJhbnNpdGlvblwiXG4gKlxuICogQXMgTW9kZXJuaXpyIHN1Z2dlc3RzIChodHRwOi8vbW9kZXJuaXpyLmNvbS9kb2NzLyNwcmVmaXhlZCksIGFuIGBtc2AgcHJlZml4XG4gKiBpcyBjb252ZXJ0ZWQgdG8gYC1tcy1gLlxuICovXG5cbmZ1bmN0aW9uIGh5cGhlbmF0ZVN0eWxlTmFtZShuYW1lKSB7XG4gIHJldHVybiBuYW1lLnJlcGxhY2UodXBwZXJjYXNlUGF0dGVybiwgJy0kMScpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShtc1BhdHRlcm4sICctbXMtJyk7XG59XG5cbnZhciB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vICdtc1RyYW5zZm9ybScgaXMgY29ycmVjdCwgYnV0IHRoZSBvdGhlciBwcmVmaXhlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWRcbiAgdmFyIGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiA9IC9eKD86d2Via2l0fG1venxvKVtBLVpdLztcbiAgdmFyIG1zUGF0dGVybiQxID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nOyAvLyBzdHlsZSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb25cblxuICB2YXIgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuID0gLztcXHMqJC87XG4gIHZhciB3YXJuZWRTdHlsZU5hbWVzID0ge307XG4gIHZhciB3YXJuZWRTdHlsZVZhbHVlcyA9IHt9O1xuICB2YXIgd2FybmVkRm9yTmFOVmFsdWUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSBmYWxzZTtcblxuICB2YXIgY2FtZWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChfLCBjaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdVbnN1cHBvcnRlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIC8vIEFzIEFuZGkgU21pdGggc3VnZ2VzdHNcbiAgICAvLyAoaHR0cDovL3d3dy5hbmRpc21pdGguY29tL2Jsb2cvMjAxMi8wMi9tb2Rlcm5penItcHJlZml4ZWQvKSwgYW4gYC1tc2AgcHJlZml4XG4gICAgLy8gaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZSBgbXNgLlxuICAgIGNhbWVsaXplKG5hbWUucmVwbGFjZShtc1BhdHRlcm4kMSwgJ21zLScpKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoXCJTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb24uIFwiICsgJ1RyeSBcIiVzOiAlc1wiIGluc3RlYWQuJywgbmFtZSwgdmFsdWUucmVwbGFjZShiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4sICcnKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNOYU4gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9yTmFOVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JOYU5WYWx1ZSA9IHRydWU7XG5cbiAgICBlcnJvcignYE5hTmAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9ySW5maW5pdHlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSB0cnVlO1xuXG4gICAgZXJyb3IoJ2BJbmZpbml0eWAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICAgIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uKG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzTmFOKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkobmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlJDEgPSB3YXJuVmFsaWRTdHlsZTtcblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggQ1NTIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNyZWF0ZXMgYSBzdHJpbmcgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBlcXVpdmFsZW50IHRvIHRoZSBzdHlsZVxuICogYXR0cmlidXRlIGdlbmVyYXRlZCBieSBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIEl0IGJ5LXBhc3NlcyB3YXJuaW5ncyBhbmRcbiAqIHNlY3VyaXR5IGNoZWNrcyBzbyBpdCdzIG5vdCBzYWZlIHRvIHVzZSB0aGlzIHZhbHVlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuXG4gKiBjb21wYXJpc29uLiBJdCBpcyBvbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMoc3R5bGVzKSB7XG4gIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9ICcnO1xuICAgIHZhciBkZWxpbWl0ZXIgPSAnJztcblxuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cbiAgICAgIGlmIChzdHlsZVZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcbiAgICAgICAgc2VyaWFsaXplZCArPSBkZWxpbWl0ZXIgKyAoaXNDdXN0b21Qcm9wZXJ0eSA/IHN0eWxlTmFtZSA6IGh5cGhlbmF0ZVN0eWxlTmFtZShzdHlsZU5hbWUpKSArICc6JztcbiAgICAgICAgc2VyaWFsaXplZCArPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG4gICAgICAgIGRlbGltaXRlciA9ICc7JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VyaWFsaXplZCB8fCBudWxsO1xuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBtdWx0aXBsZSBzdHlsZXMgb24gYSBub2RlLiAgSWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXNcbiAqICcnIChlbXB0eSBzdHJpbmcpLCB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IHN0eWxlc1xuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0eWxlcykge1xuICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlO1xuXG4gIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuXG4gICAge1xuICAgICAgaWYgKCFpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICAgIHdhcm5WYWxpZFN0eWxlJDEoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlVmFsdWUgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0sIGlzQ3VzdG9tUHJvcGVydHkpO1xuXG4gICAgaWYgKHN0eWxlTmFtZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgc3R5bGVOYW1lID0gJ2Nzc0Zsb2F0JztcbiAgICB9XG5cbiAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCBzdHlsZVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVbc3R5bGVOYW1lXSA9IHN0eWxlVmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVFbXB0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG59XG4vKipcbiAqIEdpdmVuIHtjb2xvcjogJ3JlZCcsIG92ZXJmbG93OiAnaGlkZGVuJ30gcmV0dXJucyB7XG4gKiAgIGNvbG9yOiAnY29sb3InLFxuICogICBvdmVyZmxvd1g6ICdvdmVyZmxvdycsXG4gKiAgIG92ZXJmbG93WTogJ292ZXJmbG93JyxcbiAqIH0uIFRoaXMgY2FuIGJlIHJlYWQgYXMgXCJ0aGUgb3ZlcmZsb3dZIHByb3BlcnR5IHdhcyBzZXQgYnkgdGhlIG92ZXJmbG93XG4gKiBzaG9ydGhhbmRcIi4gVGhhdCBpcywgdGhlIHZhbHVlcyBhcmUgdGhlIHByb3BlcnR5IHRoYXQgZWFjaCB3YXMgZGVyaXZlZCBmcm9tLlxuICovXG5cblxuZnVuY3Rpb24gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlcykge1xuICB2YXIgZXhwYW5kZWQgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gc3R5bGVzKSB7XG4gICAgdmFyIGxvbmdoYW5kcyA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5XSB8fCBba2V5XTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2hhbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHBhbmRlZFtsb25naGFuZHNbaV1dID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBhbmRlZDtcbn1cbi8qKlxuICogV2hlbiBtaXhpbmcgc2hvcnRoYW5kIGFuZCBsb25naGFuZCBwcm9wZXJ0eSBuYW1lcywgd2Ugd2FybiBkdXJpbmcgdXBkYXRlcyBpZlxuICogd2UgZXhwZWN0IGFuIGluY29ycmVjdCByZXN1bHQgdG8gb2NjdXIuIEluIHBhcnRpY3VsYXIsIHdlIHdhcm4gZm9yOlxuICpcbiAqIFVwZGF0aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIG92ZXJ3cml0dGVuKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnYmF6JywgZm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJ2JheidcbiAqIFJlbW92aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIGxvc3QgdG9vKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnJ1xuICogUmVtb3ZpbmcgYSBsb25naGFuZCBwcm9wZXJ0eSAoc2hvdWxkIHJldmVydCB0byBzaG9ydGhhbmQ7IGRvZXNuJ3QpOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdmb28nfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250VmFyaWFudCA9ICcnXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0U3R5bGVzKSB7XG4gIHtcbiAgICBpZiAoIW5leHRTdHlsZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXhwYW5kZWRVcGRhdGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlVXBkYXRlcyk7XG4gICAgdmFyIGV4cGFuZGVkU3R5bGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKG5leHRTdHlsZXMpO1xuICAgIHZhciB3YXJuZWRBYm91dCA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGV4cGFuZGVkVXBkYXRlcykge1xuICAgICAgdmFyIG9yaWdpbmFsS2V5ID0gZXhwYW5kZWRVcGRhdGVzW2tleV07XG4gICAgICB2YXIgY29ycmVjdE9yaWdpbmFsS2V5ID0gZXhwYW5kZWRTdHlsZXNba2V5XTtcblxuICAgICAgaWYgKGNvcnJlY3RPcmlnaW5hbEtleSAmJiBvcmlnaW5hbEtleSAhPT0gY29ycmVjdE9yaWdpbmFsS2V5KSB7XG4gICAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3JpZ2luYWxLZXkgKyAnLCcgKyBjb3JyZWN0T3JpZ2luYWxLZXk7XG5cbiAgICAgICAgaWYgKHdhcm5lZEFib3V0W3dhcm5pbmdLZXldKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuZWRBYm91dFt3YXJuaW5nS2V5XSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzIGEgc3R5bGUgcHJvcGVydHkgZHVyaW5nIHJlcmVuZGVyICglcykgd2hlbiBhICcgKyAnY29uZmxpY3RpbmcgcHJvcGVydHkgaXMgc2V0ICglcykgY2FuIGxlYWQgdG8gc3R5bGluZyBidWdzLiBUbyAnICsgXCJhdm9pZCB0aGlzLCBkb24ndCBtaXggc2hvcnRoYW5kIGFuZCBub24tc2hvcnRoYW5kIHByb3BlcnRpZXMgXCIgKyAnZm9yIHRoZSBzYW1lIHZhbHVlOyBpbnN0ZWFkLCByZXBsYWNlIHRoZSBzaG9ydGhhbmQgd2l0aCAnICsgJ3NlcGFyYXRlIHZhbHVlcy4nLCBpc1ZhbHVlRW1wdHkoc3R5bGVVcGRhdGVzW29yaWdpbmFsS2V5XSkgPyAnUmVtb3ZpbmcnIDogJ1VwZGF0aW5nJywgb3JpZ2luYWxLZXksIGNvcnJlY3RPcmlnaW5hbEtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZvciBIVE1MLCBjZXJ0YWluIHRhZ3Mgc2hvdWxkIG9taXQgdGhlaXIgY2xvc2UgdGFnLiBXZSBrZWVwIGEgbGlzdCBmb3Jcbi8vIHRob3NlIHNwZWNpYWwtY2FzZSB0YWdzLlxudmFyIG9taXR0ZWRDbG9zZVRhZ3MgPSB7XG4gIGFyZWE6IHRydWUsXG4gIGJhc2U6IHRydWUsXG4gIGJyOiB0cnVlLFxuICBjb2w6IHRydWUsXG4gIGVtYmVkOiB0cnVlLFxuICBocjogdHJ1ZSxcbiAgaW1nOiB0cnVlLFxuICBpbnB1dDogdHJ1ZSxcbiAga2V5Z2VuOiB0cnVlLFxuICBsaW5rOiB0cnVlLFxuICBtZXRhOiB0cnVlLFxuICBwYXJhbTogdHJ1ZSxcbiAgc291cmNlOiB0cnVlLFxuICB0cmFjazogdHJ1ZSxcbiAgd2JyOiB0cnVlIC8vIE5PVEU6IG1lbnVpdGVtJ3MgY2xvc2UgdGFnIHNob3VsZCBiZSBvbWl0dGVkLCBidXQgdGhhdCBjYXVzZXMgcHJvYmxlbXMuXG5cbn07XG5cbi8vIGBvbWl0dGVkQ2xvc2VUYWdzYCBleGNlcHQgdGhhdCBgbWVudWl0ZW1gIHNob3VsZCBzdGlsbCBoYXZlIGl0cyBjbG9zaW5nIHRhZy5cblxudmFyIHZvaWRFbGVtZW50VGFncyA9IGFzc2lnbih7XG4gIG1lbnVpdGVtOiB0cnVlXG59LCBvbWl0dGVkQ2xvc2VUYWdzKTtcblxudmFyIEhUTUwgPSAnX19odG1sJztcblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKSB7XG4gIGlmICghcHJvcHMpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gTm90ZSB0aGUgdXNlIG9mIGA9PWAgd2hpY2ggY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZC5cblxuXG4gIGlmICh2b2lkRWxlbWVudFRhZ3NbdGFnXSkge1xuICAgIGlmIChwcm9wcy5jaGlsZHJlbiAhPSBudWxsIHx8IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0YWcgKyBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIFwiICsgJ3VzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPSBudWxsKSB7XG4gICAgaWYgKHByb3BzLmNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPT0gJ29iamVjdCcgfHwgIShIVE1MIGluIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiAnICsgJ1BsZWFzZSB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgJyArICdmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKCFwcm9wcy5zdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgJiYgcHJvcHMuY29udGVudEVkaXRhYmxlICYmIHByb3BzLmNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBgY29udGVudEVkaXRhYmxlYCBhbmQgY29udGFpbnMgYGNoaWxkcmVuYCBtYW5hZ2VkIGJ5ICcgKyAnUmVhY3QuIEl0IGlzIG5vdyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSB0aGF0IG5vbmUgb2YgJyArICd0aG9zZSBub2RlcyBhcmUgdW5leHBlY3RlZGx5IG1vZGlmaWVkIG9yIGR1cGxpY2F0ZWQuIFRoaXMgaXMgJyArICdwcm9iYWJseSBub3QgaW50ZW50aW9uYWwuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb3BzLnN0eWxlICE9IG51bGwgJiYgdHlwZW9mIHByb3BzLnN0eWxlICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGBzdHlsZWAgcHJvcCBleHBlY3RzIGEgbWFwcGluZyBmcm9tIHN0eWxlIHByb3BlcnRpZXMgdG8gdmFsdWVzLCAnICsgXCJub3QgYSBzdHJpbmcuIEZvciBleGFtcGxlLCBzdHlsZT17e21hcmdpblJpZ2h0OiBzcGFjaW5nICsgJ2VtJ319IHdoZW4gXCIgKyAndXNpbmcgSlNYLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tQ29tcG9uZW50KHRhZ05hbWUsIHByb3BzKSB7XG4gIGlmICh0YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gdHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIHN3aXRjaCAodGFnTmFtZSkge1xuICAgIC8vIFRoZXNlIGFyZSByZXNlcnZlZCBTVkcgYW5kIE1hdGhNTCBlbGVtZW50cy5cbiAgICAvLyBXZSBkb24ndCBtaW5kIHRoaXMgbGlzdCB0b28gbXVjaCBiZWNhdXNlIHdlIGV4cGVjdCBpdCB0byBuZXZlciBncm93LlxuICAgIC8vIFRoZSBhbHRlcm5hdGl2ZSBpcyB0byB0cmFjayB0aGUgbmFtZXNwYWNlIGluIGEgZmV3IHBsYWNlcyB3aGljaCBpcyBjb252b2x1dGVkLlxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJjb21wb25lbnRzL3NwZWMvY3VzdG9tLyNjdXN0b20tZWxlbWVudHMtY29yZS1jb25jZXB0c1xuICAgIGNhc2UgJ2Fubm90YXRpb24teG1sJzpcbiAgICBjYXNlICdjb2xvci1wcm9maWxlJzpcbiAgICBjYXNlICdmb250LWZhY2UnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1zcmMnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS11cmknOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1mb3JtYXQnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1uYW1lJzpcbiAgICBjYXNlICdtaXNzaW5nLWdseXBoJzpcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vLyBXaGVuIGFkZGluZyBhdHRyaWJ1dGVzIHRvIHRoZSBIVE1MIG9yIFNWRyBhbGxvd2VkIGF0dHJpYnV0ZSBsaXN0LCBiZSBzdXJlIHRvXG4vLyBhbHNvIGFkZCB0aGVtIHRvIHRoaXMgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdCBuYW1lXG4vLyB3YXJuaW5ncy5cbnZhciBwb3NzaWJsZVN0YW5kYXJkTmFtZXMgPSB7XG4gIC8vIEhUTUxcbiAgYWNjZXB0OiAnYWNjZXB0JyxcbiAgYWNjZXB0Y2hhcnNldDogJ2FjY2VwdENoYXJzZXQnLFxuICAnYWNjZXB0LWNoYXJzZXQnOiAnYWNjZXB0Q2hhcnNldCcsXG4gIGFjY2Vzc2tleTogJ2FjY2Vzc0tleScsXG4gIGFjdGlvbjogJ2FjdGlvbicsXG4gIGFsbG93ZnVsbHNjcmVlbjogJ2FsbG93RnVsbFNjcmVlbicsXG4gIGFsdDogJ2FsdCcsXG4gIGFzOiAnYXMnLFxuICBhc3luYzogJ2FzeW5jJyxcbiAgYXV0b2NhcGl0YWxpemU6ICdhdXRvQ2FwaXRhbGl6ZScsXG4gIGF1dG9jb21wbGV0ZTogJ2F1dG9Db21wbGV0ZScsXG4gIGF1dG9jb3JyZWN0OiAnYXV0b0NvcnJlY3QnLFxuICBhdXRvZm9jdXM6ICdhdXRvRm9jdXMnLFxuICBhdXRvcGxheTogJ2F1dG9QbGF5JyxcbiAgYXV0b3NhdmU6ICdhdXRvU2F2ZScsXG4gIGNhcHR1cmU6ICdjYXB0dXJlJyxcbiAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsXG4gIGNlbGxzcGFjaW5nOiAnY2VsbFNwYWNpbmcnLFxuICBjaGFsbGVuZ2U6ICdjaGFsbGVuZ2UnLFxuICBjaGFyc2V0OiAnY2hhclNldCcsXG4gIGNoZWNrZWQ6ICdjaGVja2VkJyxcbiAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gIGNpdGU6ICdjaXRlJyxcbiAgY2xhc3M6ICdjbGFzc05hbWUnLFxuICBjbGFzc2lkOiAnY2xhc3NJRCcsXG4gIGNsYXNzbmFtZTogJ2NsYXNzTmFtZScsXG4gIGNvbHM6ICdjb2xzJyxcbiAgY29sc3BhbjogJ2NvbFNwYW4nLFxuICBjb250ZW50OiAnY29udGVudCcsXG4gIGNvbnRlbnRlZGl0YWJsZTogJ2NvbnRlbnRFZGl0YWJsZScsXG4gIGNvbnRleHRtZW51OiAnY29udGV4dE1lbnUnLFxuICBjb250cm9sczogJ2NvbnRyb2xzJyxcbiAgY29udHJvbHNsaXN0OiAnY29udHJvbHNMaXN0JyxcbiAgY29vcmRzOiAnY29vcmRzJyxcbiAgY3Jvc3NvcmlnaW46ICdjcm9zc09yaWdpbicsXG4gIGRhbmdlcm91c2x5c2V0aW5uZXJodG1sOiAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLFxuICBkYXRhOiAnZGF0YScsXG4gIGRhdGV0aW1lOiAnZGF0ZVRpbWUnLFxuICBkZWZhdWx0OiAnZGVmYXVsdCcsXG4gIGRlZmF1bHRjaGVja2VkOiAnZGVmYXVsdENoZWNrZWQnLFxuICBkZWZhdWx0dmFsdWU6ICdkZWZhdWx0VmFsdWUnLFxuICBkZWZlcjogJ2RlZmVyJyxcbiAgZGlyOiAnZGlyJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGRpc2FibGVwaWN0dXJlaW5waWN0dXJlOiAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnLFxuICBkaXNhYmxlcmVtb3RlcGxheWJhY2s6ICdkaXNhYmxlUmVtb3RlUGxheWJhY2snLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZHJhZ2dhYmxlOiAnZHJhZ2dhYmxlJyxcbiAgZW5jdHlwZTogJ2VuY1R5cGUnLFxuICBlbnRlcmtleWhpbnQ6ICdlbnRlcktleUhpbnQnLFxuICBmb3I6ICdodG1sRm9yJyxcbiAgZm9ybTogJ2Zvcm0nLFxuICBmb3JtbWV0aG9kOiAnZm9ybU1ldGhvZCcsXG4gIGZvcm1hY3Rpb246ICdmb3JtQWN0aW9uJyxcbiAgZm9ybWVuY3R5cGU6ICdmb3JtRW5jVHlwZScsXG4gIGZvcm1ub3ZhbGlkYXRlOiAnZm9ybU5vVmFsaWRhdGUnLFxuICBmb3JtdGFyZ2V0OiAnZm9ybVRhcmdldCcsXG4gIGZyYW1lYm9yZGVyOiAnZnJhbWVCb3JkZXInLFxuICBoZWFkZXJzOiAnaGVhZGVycycsXG4gIGhlaWdodDogJ2hlaWdodCcsXG4gIGhpZGRlbjogJ2hpZGRlbicsXG4gIGhpZ2g6ICdoaWdoJyxcbiAgaHJlZjogJ2hyZWYnLFxuICBocmVmbGFuZzogJ2hyZWZMYW5nJyxcbiAgaHRtbGZvcjogJ2h0bWxGb3InLFxuICBodHRwZXF1aXY6ICdodHRwRXF1aXYnLFxuICAnaHR0cC1lcXVpdic6ICdodHRwRXF1aXYnLFxuICBpY29uOiAnaWNvbicsXG4gIGlkOiAnaWQnLFxuICBpbWFnZXNpemVzOiAnaW1hZ2VTaXplcycsXG4gIGltYWdlc3Jjc2V0OiAnaW1hZ2VTcmNTZXQnLFxuICBpbm5lcmh0bWw6ICdpbm5lckhUTUwnLFxuICBpbnB1dG1vZGU6ICdpbnB1dE1vZGUnLFxuICBpbnRlZ3JpdHk6ICdpbnRlZ3JpdHknLFxuICBpczogJ2lzJyxcbiAgaXRlbWlkOiAnaXRlbUlEJyxcbiAgaXRlbXByb3A6ICdpdGVtUHJvcCcsXG4gIGl0ZW1yZWY6ICdpdGVtUmVmJyxcbiAgaXRlbXNjb3BlOiAnaXRlbVNjb3BlJyxcbiAgaXRlbXR5cGU6ICdpdGVtVHlwZScsXG4gIGtleXBhcmFtczogJ2tleVBhcmFtcycsXG4gIGtleXR5cGU6ICdrZXlUeXBlJyxcbiAga2luZDogJ2tpbmQnLFxuICBsYWJlbDogJ2xhYmVsJyxcbiAgbGFuZzogJ2xhbmcnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxvb3A6ICdsb29wJyxcbiAgbG93OiAnbG93JyxcbiAgbWFuaWZlc3Q6ICdtYW5pZmVzdCcsXG4gIG1hcmdpbndpZHRoOiAnbWFyZ2luV2lkdGgnLFxuICBtYXJnaW5oZWlnaHQ6ICdtYXJnaW5IZWlnaHQnLFxuICBtYXg6ICdtYXgnLFxuICBtYXhsZW5ndGg6ICdtYXhMZW5ndGgnLFxuICBtZWRpYTogJ21lZGlhJyxcbiAgbWVkaWFncm91cDogJ21lZGlhR3JvdXAnLFxuICBtZXRob2Q6ICdtZXRob2QnLFxuICBtaW46ICdtaW4nLFxuICBtaW5sZW5ndGg6ICdtaW5MZW5ndGgnLFxuICBtdWx0aXBsZTogJ211bHRpcGxlJyxcbiAgbXV0ZWQ6ICdtdXRlZCcsXG4gIG5hbWU6ICduYW1lJyxcbiAgbm9tb2R1bGU6ICdub01vZHVsZScsXG4gIG5vbmNlOiAnbm9uY2UnLFxuICBub3ZhbGlkYXRlOiAnbm9WYWxpZGF0ZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgb3B0aW11bTogJ29wdGltdW0nLFxuICBwYXR0ZXJuOiAncGF0dGVybicsXG4gIHBsYWNlaG9sZGVyOiAncGxhY2Vob2xkZXInLFxuICBwbGF5c2lubGluZTogJ3BsYXlzSW5saW5lJyxcbiAgcG9zdGVyOiAncG9zdGVyJyxcbiAgcHJlbG9hZDogJ3ByZWxvYWQnLFxuICBwcm9maWxlOiAncHJvZmlsZScsXG4gIHJhZGlvZ3JvdXA6ICdyYWRpb0dyb3VwJyxcbiAgcmVhZG9ubHk6ICdyZWFkT25seScsXG4gIHJlZmVycmVycG9saWN5OiAncmVmZXJyZXJQb2xpY3knLFxuICByZWw6ICdyZWwnLFxuICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgcmV2ZXJzZWQ6ICdyZXZlcnNlZCcsXG4gIHJvbGU6ICdyb2xlJyxcbiAgcm93czogJ3Jvd3MnLFxuICByb3dzcGFuOiAncm93U3BhbicsXG4gIHNhbmRib3g6ICdzYW5kYm94JyxcbiAgc2NvcGU6ICdzY29wZScsXG4gIHNjb3BlZDogJ3Njb3BlZCcsXG4gIHNjcm9sbGluZzogJ3Njcm9sbGluZycsXG4gIHNlYW1sZXNzOiAnc2VhbWxlc3MnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJyxcbiAgc2hhcGU6ICdzaGFwZScsXG4gIHNpemU6ICdzaXplJyxcbiAgc2l6ZXM6ICdzaXplcycsXG4gIHNwYW46ICdzcGFuJyxcbiAgc3BlbGxjaGVjazogJ3NwZWxsQ2hlY2snLFxuICBzcmM6ICdzcmMnLFxuICBzcmNkb2M6ICdzcmNEb2MnLFxuICBzcmNsYW5nOiAnc3JjTGFuZycsXG4gIHNyY3NldDogJ3NyY1NldCcsXG4gIHN0YXJ0OiAnc3RhcnQnLFxuICBzdGVwOiAnc3RlcCcsXG4gIHN0eWxlOiAnc3R5bGUnLFxuICBzdW1tYXJ5OiAnc3VtbWFyeScsXG4gIHRhYmluZGV4OiAndGFiSW5kZXgnLFxuICB0YXJnZXQ6ICd0YXJnZXQnLFxuICB0aXRsZTogJ3RpdGxlJyxcbiAgdHlwZTogJ3R5cGUnLFxuICB1c2VtYXA6ICd1c2VNYXAnLFxuICB2YWx1ZTogJ3ZhbHVlJyxcbiAgd2lkdGg6ICd3aWR0aCcsXG4gIHdtb2RlOiAnd21vZGUnLFxuICB3cmFwOiAnd3JhcCcsXG4gIC8vIFNWR1xuICBhYm91dDogJ2Fib3V0JyxcbiAgYWNjZW50aGVpZ2h0OiAnYWNjZW50SGVpZ2h0JyxcbiAgJ2FjY2VudC1oZWlnaHQnOiAnYWNjZW50SGVpZ2h0JyxcbiAgYWNjdW11bGF0ZTogJ2FjY3VtdWxhdGUnLFxuICBhZGRpdGl2ZTogJ2FkZGl0aXZlJyxcbiAgYWxpZ25tZW50YmFzZWxpbmU6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gICdhbGlnbm1lbnQtYmFzZWxpbmUnOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICBhbGxvd3Jlb3JkZXI6ICdhbGxvd1Jlb3JkZXInLFxuICBhbHBoYWJldGljOiAnYWxwaGFiZXRpYycsXG4gIGFtcGxpdHVkZTogJ2FtcGxpdHVkZScsXG4gIGFyYWJpY2Zvcm06ICdhcmFiaWNGb3JtJyxcbiAgJ2FyYWJpYy1mb3JtJzogJ2FyYWJpY0Zvcm0nLFxuICBhc2NlbnQ6ICdhc2NlbnQnLFxuICBhdHRyaWJ1dGVuYW1lOiAnYXR0cmlidXRlTmFtZScsXG4gIGF0dHJpYnV0ZXR5cGU6ICdhdHRyaWJ1dGVUeXBlJyxcbiAgYXV0b3JldmVyc2U6ICdhdXRvUmV2ZXJzZScsXG4gIGF6aW11dGg6ICdhemltdXRoJyxcbiAgYmFzZWZyZXF1ZW5jeTogJ2Jhc2VGcmVxdWVuY3knLFxuICBiYXNlbGluZXNoaWZ0OiAnYmFzZWxpbmVTaGlmdCcsXG4gICdiYXNlbGluZS1zaGlmdCc6ICdiYXNlbGluZVNoaWZ0JyxcbiAgYmFzZXByb2ZpbGU6ICdiYXNlUHJvZmlsZScsXG4gIGJib3g6ICdiYm94JyxcbiAgYmVnaW46ICdiZWdpbicsXG4gIGJpYXM6ICdiaWFzJyxcbiAgYnk6ICdieScsXG4gIGNhbGNtb2RlOiAnY2FsY01vZGUnLFxuICBjYXBoZWlnaHQ6ICdjYXBIZWlnaHQnLFxuICAnY2FwLWhlaWdodCc6ICdjYXBIZWlnaHQnLFxuICBjbGlwOiAnY2xpcCcsXG4gIGNsaXBwYXRoOiAnY2xpcFBhdGgnLFxuICAnY2xpcC1wYXRoJzogJ2NsaXBQYXRoJyxcbiAgY2xpcHBhdGh1bml0czogJ2NsaXBQYXRoVW5pdHMnLFxuICBjbGlwcnVsZTogJ2NsaXBSdWxlJyxcbiAgJ2NsaXAtcnVsZSc6ICdjbGlwUnVsZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb2xvcmludGVycG9sYXRpb246ICdjb2xvckludGVycG9sYXRpb24nLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbic6ICdjb2xvckludGVycG9sYXRpb24nLFxuICBjb2xvcmludGVycG9sYXRpb25maWx0ZXJzOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gIGNvbG9ycHJvZmlsZTogJ2NvbG9yUHJvZmlsZScsXG4gICdjb2xvci1wcm9maWxlJzogJ2NvbG9yUHJvZmlsZScsXG4gIGNvbG9ycmVuZGVyaW5nOiAnY29sb3JSZW5kZXJpbmcnLFxuICAnY29sb3ItcmVuZGVyaW5nJzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgY29udGVudHNjcmlwdHR5cGU6ICdjb250ZW50U2NyaXB0VHlwZScsXG4gIGNvbnRlbnRzdHlsZXR5cGU6ICdjb250ZW50U3R5bGVUeXBlJyxcbiAgY3Vyc29yOiAnY3Vyc29yJyxcbiAgY3g6ICdjeCcsXG4gIGN5OiAnY3knLFxuICBkOiAnZCcsXG4gIGRhdGF0eXBlOiAnZGF0YXR5cGUnLFxuICBkZWNlbGVyYXRlOiAnZGVjZWxlcmF0ZScsXG4gIGRlc2NlbnQ6ICdkZXNjZW50JyxcbiAgZGlmZnVzZWNvbnN0YW50OiAnZGlmZnVzZUNvbnN0YW50JyxcbiAgZGlyZWN0aW9uOiAnZGlyZWN0aW9uJyxcbiAgZGlzcGxheTogJ2Rpc3BsYXknLFxuICBkaXZpc29yOiAnZGl2aXNvcicsXG4gIGRvbWluYW50YmFzZWxpbmU6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgJ2RvbWluYW50LWJhc2VsaW5lJzogJ2RvbWluYW50QmFzZWxpbmUnLFxuICBkdXI6ICdkdXInLFxuICBkeDogJ2R4JyxcbiAgZHk6ICdkeScsXG4gIGVkZ2Vtb2RlOiAnZWRnZU1vZGUnLFxuICBlbGV2YXRpb246ICdlbGV2YXRpb24nLFxuICBlbmFibGViYWNrZ3JvdW5kOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gICdlbmFibGUtYmFja2dyb3VuZCc6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgZW5kOiAnZW5kJyxcbiAgZXhwb25lbnQ6ICdleHBvbmVudCcsXG4gIGV4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQ6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcbiAgZmlsbDogJ2ZpbGwnLFxuICBmaWxsb3BhY2l0eTogJ2ZpbGxPcGFjaXR5JyxcbiAgJ2ZpbGwtb3BhY2l0eSc6ICdmaWxsT3BhY2l0eScsXG4gIGZpbGxydWxlOiAnZmlsbFJ1bGUnLFxuICAnZmlsbC1ydWxlJzogJ2ZpbGxSdWxlJyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmlsdGVycmVzOiAnZmlsdGVyUmVzJyxcbiAgZmlsdGVydW5pdHM6ICdmaWx0ZXJVbml0cycsXG4gIGZsb29kb3BhY2l0eTogJ2Zsb29kT3BhY2l0eScsXG4gICdmbG9vZC1vcGFjaXR5JzogJ2Zsb29kT3BhY2l0eScsXG4gIGZsb29kY29sb3I6ICdmbG9vZENvbG9yJyxcbiAgJ2Zsb29kLWNvbG9yJzogJ2Zsb29kQ29sb3InLFxuICBmb2N1c2FibGU6ICdmb2N1c2FibGUnLFxuICBmb250ZmFtaWx5OiAnZm9udEZhbWlseScsXG4gICdmb250LWZhbWlseSc6ICdmb250RmFtaWx5JyxcbiAgZm9udHNpemU6ICdmb250U2l6ZScsXG4gICdmb250LXNpemUnOiAnZm9udFNpemUnLFxuICBmb250c2l6ZWFkanVzdDogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnOiAnZm9udFNpemVBZGp1c3QnLFxuICBmb250c3RyZXRjaDogJ2ZvbnRTdHJldGNoJyxcbiAgJ2ZvbnQtc3RyZXRjaCc6ICdmb250U3RyZXRjaCcsXG4gIGZvbnRzdHlsZTogJ2ZvbnRTdHlsZScsXG4gICdmb250LXN0eWxlJzogJ2ZvbnRTdHlsZScsXG4gIGZvbnR2YXJpYW50OiAnZm9udFZhcmlhbnQnLFxuICAnZm9udC12YXJpYW50JzogJ2ZvbnRWYXJpYW50JyxcbiAgZm9udHdlaWdodDogJ2ZvbnRXZWlnaHQnLFxuICAnZm9udC13ZWlnaHQnOiAnZm9udFdlaWdodCcsXG4gIGZvcm1hdDogJ2Zvcm1hdCcsXG4gIGZyb206ICdmcm9tJyxcbiAgZng6ICdmeCcsXG4gIGZ5OiAnZnknLFxuICBnMTogJ2cxJyxcbiAgZzI6ICdnMicsXG4gIGdseXBobmFtZTogJ2dseXBoTmFtZScsXG4gICdnbHlwaC1uYW1lJzogJ2dseXBoTmFtZScsXG4gIGdseXBob3JpZW50YXRpb25ob3Jpem9udGFsOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCc6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gIGdseXBob3JpZW50YXRpb252ZXJ0aWNhbDogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCc6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICBnbHlwaHJlZjogJ2dseXBoUmVmJyxcbiAgZ3JhZGllbnR0cmFuc2Zvcm06ICdncmFkaWVudFRyYW5zZm9ybScsXG4gIGdyYWRpZW50dW5pdHM6ICdncmFkaWVudFVuaXRzJyxcbiAgaGFuZ2luZzogJ2hhbmdpbmcnLFxuICBob3JpemFkdng6ICdob3JpekFkdlgnLFxuICAnaG9yaXotYWR2LXgnOiAnaG9yaXpBZHZYJyxcbiAgaG9yaXpvcmlnaW54OiAnaG9yaXpPcmlnaW5YJyxcbiAgJ2hvcml6LW9yaWdpbi14JzogJ2hvcml6T3JpZ2luWCcsXG4gIGlkZW9ncmFwaGljOiAnaWRlb2dyYXBoaWMnLFxuICBpbWFnZXJlbmRlcmluZzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgJ2ltYWdlLXJlbmRlcmluZyc6ICdpbWFnZVJlbmRlcmluZycsXG4gIGluMjogJ2luMicsXG4gIGluOiAnaW4nLFxuICBpbmxpc3Q6ICdpbmxpc3QnLFxuICBpbnRlcmNlcHQ6ICdpbnRlcmNlcHQnLFxuICBrMTogJ2sxJyxcbiAgazI6ICdrMicsXG4gIGszOiAnazMnLFxuICBrNDogJ2s0JyxcbiAgazogJ2snLFxuICBrZXJuZWxtYXRyaXg6ICdrZXJuZWxNYXRyaXgnLFxuICBrZXJuZWx1bml0bGVuZ3RoOiAna2VybmVsVW5pdExlbmd0aCcsXG4gIGtlcm5pbmc6ICdrZXJuaW5nJyxcbiAga2V5cG9pbnRzOiAna2V5UG9pbnRzJyxcbiAga2V5c3BsaW5lczogJ2tleVNwbGluZXMnLFxuICBrZXl0aW1lczogJ2tleVRpbWVzJyxcbiAgbGVuZ3RoYWRqdXN0OiAnbGVuZ3RoQWRqdXN0JyxcbiAgbGV0dGVyc3BhY2luZzogJ2xldHRlclNwYWNpbmcnLFxuICAnbGV0dGVyLXNwYWNpbmcnOiAnbGV0dGVyU3BhY2luZycsXG4gIGxpZ2h0aW5nY29sb3I6ICdsaWdodGluZ0NvbG9yJyxcbiAgJ2xpZ2h0aW5nLWNvbG9yJzogJ2xpZ2h0aW5nQ29sb3InLFxuICBsaW1pdGluZ2NvbmVhbmdsZTogJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcbiAgbG9jYWw6ICdsb2NhbCcsXG4gIG1hcmtlcmVuZDogJ21hcmtlckVuZCcsXG4gICdtYXJrZXItZW5kJzogJ21hcmtlckVuZCcsXG4gIG1hcmtlcmhlaWdodDogJ21hcmtlckhlaWdodCcsXG4gIG1hcmtlcm1pZDogJ21hcmtlck1pZCcsXG4gICdtYXJrZXItbWlkJzogJ21hcmtlck1pZCcsXG4gIG1hcmtlcnN0YXJ0OiAnbWFya2VyU3RhcnQnLFxuICAnbWFya2VyLXN0YXJ0JzogJ21hcmtlclN0YXJ0JyxcbiAgbWFya2VydW5pdHM6ICdtYXJrZXJVbml0cycsXG4gIG1hcmtlcndpZHRoOiAnbWFya2VyV2lkdGgnLFxuICBtYXNrOiAnbWFzaycsXG4gIG1hc2tjb250ZW50dW5pdHM6ICdtYXNrQ29udGVudFVuaXRzJyxcbiAgbWFza3VuaXRzOiAnbWFza1VuaXRzJyxcbiAgbWF0aGVtYXRpY2FsOiAnbWF0aGVtYXRpY2FsJyxcbiAgbW9kZTogJ21vZGUnLFxuICBudW1vY3RhdmVzOiAnbnVtT2N0YXZlcycsXG4gIG9mZnNldDogJ29mZnNldCcsXG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgb3BlcmF0b3I6ICdvcGVyYXRvcicsXG4gIG9yZGVyOiAnb3JkZXInLFxuICBvcmllbnQ6ICdvcmllbnQnLFxuICBvcmllbnRhdGlvbjogJ29yaWVudGF0aW9uJyxcbiAgb3JpZ2luOiAnb3JpZ2luJyxcbiAgb3ZlcmZsb3c6ICdvdmVyZmxvdycsXG4gIG92ZXJsaW5lcG9zaXRpb246ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgJ292ZXJsaW5lLXBvc2l0aW9uJzogJ292ZXJsaW5lUG9zaXRpb24nLFxuICBvdmVybGluZXRoaWNrbmVzczogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ292ZXJsaW5lLXRoaWNrbmVzcyc6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gIHBhaW50b3JkZXI6ICdwYWludE9yZGVyJyxcbiAgJ3BhaW50LW9yZGVyJzogJ3BhaW50T3JkZXInLFxuICBwYW5vc2UxOiAncGFub3NlMScsXG4gICdwYW5vc2UtMSc6ICdwYW5vc2UxJyxcbiAgcGF0aGxlbmd0aDogJ3BhdGhMZW5ndGgnLFxuICBwYXR0ZXJuY29udGVudHVuaXRzOiAncGF0dGVybkNvbnRlbnRVbml0cycsXG4gIHBhdHRlcm50cmFuc2Zvcm06ICdwYXR0ZXJuVHJhbnNmb3JtJyxcbiAgcGF0dGVybnVuaXRzOiAncGF0dGVyblVuaXRzJyxcbiAgcG9pbnRlcmV2ZW50czogJ3BvaW50ZXJFdmVudHMnLFxuICAncG9pbnRlci1ldmVudHMnOiAncG9pbnRlckV2ZW50cycsXG4gIHBvaW50czogJ3BvaW50cycsXG4gIHBvaW50c2F0eDogJ3BvaW50c0F0WCcsXG4gIHBvaW50c2F0eTogJ3BvaW50c0F0WScsXG4gIHBvaW50c2F0ejogJ3BvaW50c0F0WicsXG4gIHByZWZpeDogJ3ByZWZpeCcsXG4gIHByZXNlcnZlYWxwaGE6ICdwcmVzZXJ2ZUFscGhhJyxcbiAgcHJlc2VydmVhc3BlY3RyYXRpbzogJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxuICBwcmltaXRpdmV1bml0czogJ3ByaW1pdGl2ZVVuaXRzJyxcbiAgcHJvcGVydHk6ICdwcm9wZXJ0eScsXG4gIHI6ICdyJyxcbiAgcmFkaXVzOiAncmFkaXVzJyxcbiAgcmVmeDogJ3JlZlgnLFxuICByZWZ5OiAncmVmWScsXG4gIHJlbmRlcmluZ2ludGVudDogJ3JlbmRlcmluZ0ludGVudCcsXG4gICdyZW5kZXJpbmctaW50ZW50JzogJ3JlbmRlcmluZ0ludGVudCcsXG4gIHJlcGVhdGNvdW50OiAncmVwZWF0Q291bnQnLFxuICByZXBlYXRkdXI6ICdyZXBlYXREdXInLFxuICByZXF1aXJlZGV4dGVuc2lvbnM6ICdyZXF1aXJlZEV4dGVuc2lvbnMnLFxuICByZXF1aXJlZGZlYXR1cmVzOiAncmVxdWlyZWRGZWF0dXJlcycsXG4gIHJlc291cmNlOiAncmVzb3VyY2UnLFxuICByZXN0YXJ0OiAncmVzdGFydCcsXG4gIHJlc3VsdDogJ3Jlc3VsdCcsXG4gIHJlc3VsdHM6ICdyZXN1bHRzJyxcbiAgcm90YXRlOiAncm90YXRlJyxcbiAgcng6ICdyeCcsXG4gIHJ5OiAncnknLFxuICBzY2FsZTogJ3NjYWxlJyxcbiAgc2VjdXJpdHk6ICdzZWN1cml0eScsXG4gIHNlZWQ6ICdzZWVkJyxcbiAgc2hhcGVyZW5kZXJpbmc6ICdzaGFwZVJlbmRlcmluZycsXG4gICdzaGFwZS1yZW5kZXJpbmcnOiAnc2hhcGVSZW5kZXJpbmcnLFxuICBzbG9wZTogJ3Nsb3BlJyxcbiAgc3BhY2luZzogJ3NwYWNpbmcnLFxuICBzcGVjdWxhcmNvbnN0YW50OiAnc3BlY3VsYXJDb25zdGFudCcsXG4gIHNwZWN1bGFyZXhwb25lbnQ6ICdzcGVjdWxhckV4cG9uZW50JyxcbiAgc3BlZWQ6ICdzcGVlZCcsXG4gIHNwcmVhZG1ldGhvZDogJ3NwcmVhZE1ldGhvZCcsXG4gIHN0YXJ0b2Zmc2V0OiAnc3RhcnRPZmZzZXQnLFxuICBzdGRkZXZpYXRpb246ICdzdGREZXZpYXRpb24nLFxuICBzdGVtaDogJ3N0ZW1oJyxcbiAgc3RlbXY6ICdzdGVtdicsXG4gIHN0aXRjaHRpbGVzOiAnc3RpdGNoVGlsZXMnLFxuICBzdG9wY29sb3I6ICdzdG9wQ29sb3InLFxuICAnc3RvcC1jb2xvcic6ICdzdG9wQ29sb3InLFxuICBzdG9wb3BhY2l0eTogJ3N0b3BPcGFjaXR5JyxcbiAgJ3N0b3Atb3BhY2l0eSc6ICdzdG9wT3BhY2l0eScsXG4gIHN0cmlrZXRocm91Z2hwb3NpdGlvbjogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJzogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gIHN0cmlrZXRocm91Z2h0aGlja25lc3M6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJzogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICBzdHJpbmc6ICdzdHJpbmcnLFxuICBzdHJva2U6ICdzdHJva2UnLFxuICBzdHJva2VkYXNoYXJyYXk6ICdzdHJva2VEYXNoYXJyYXknLFxuICAnc3Ryb2tlLWRhc2hhcnJheSc6ICdzdHJva2VEYXNoYXJyYXknLFxuICBzdHJva2VkYXNob2Zmc2V0OiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gICdzdHJva2UtZGFzaG9mZnNldCc6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgc3Ryb2tlbGluZWNhcDogJ3N0cm9rZUxpbmVjYXAnLFxuICAnc3Ryb2tlLWxpbmVjYXAnOiAnc3Ryb2tlTGluZWNhcCcsXG4gIHN0cm9rZWxpbmVqb2luOiAnc3Ryb2tlTGluZWpvaW4nLFxuICAnc3Ryb2tlLWxpbmVqb2luJzogJ3N0cm9rZUxpbmVqb2luJyxcbiAgc3Ryb2tlbWl0ZXJsaW1pdDogJ3N0cm9rZU1pdGVybGltaXQnLFxuICAnc3Ryb2tlLW1pdGVybGltaXQnOiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gIHN0cm9rZXdpZHRoOiAnc3Ryb2tlV2lkdGgnLFxuICAnc3Ryb2tlLXdpZHRoJzogJ3N0cm9rZVdpZHRoJyxcbiAgc3Ryb2tlb3BhY2l0eTogJ3N0cm9rZU9wYWNpdHknLFxuICAnc3Ryb2tlLW9wYWNpdHknOiAnc3Ryb2tlT3BhY2l0eScsXG4gIHN1cHByZXNzY29udGVudGVkaXRhYmxld2FybmluZzogJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZycsXG4gIHN1cHByZXNzaHlkcmF0aW9ud2FybmluZzogJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsXG4gIHN1cmZhY2VzY2FsZTogJ3N1cmZhY2VTY2FsZScsXG4gIHN5c3RlbWxhbmd1YWdlOiAnc3lzdGVtTGFuZ3VhZ2UnLFxuICB0YWJsZXZhbHVlczogJ3RhYmxlVmFsdWVzJyxcbiAgdGFyZ2V0eDogJ3RhcmdldFgnLFxuICB0YXJnZXR5OiAndGFyZ2V0WScsXG4gIHRleHRhbmNob3I6ICd0ZXh0QW5jaG9yJyxcbiAgJ3RleHQtYW5jaG9yJzogJ3RleHRBbmNob3InLFxuICB0ZXh0ZGVjb3JhdGlvbjogJ3RleHREZWNvcmF0aW9uJyxcbiAgJ3RleHQtZGVjb3JhdGlvbic6ICd0ZXh0RGVjb3JhdGlvbicsXG4gIHRleHRsZW5ndGg6ICd0ZXh0TGVuZ3RoJyxcbiAgdGV4dHJlbmRlcmluZzogJ3RleHRSZW5kZXJpbmcnLFxuICAndGV4dC1yZW5kZXJpbmcnOiAndGV4dFJlbmRlcmluZycsXG4gIHRvOiAndG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2Zvcm0nLFxuICB0eXBlb2Y6ICd0eXBlb2YnLFxuICB1MTogJ3UxJyxcbiAgdTI6ICd1MicsXG4gIHVuZGVybGluZXBvc2l0aW9uOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICAndW5kZXJsaW5lLXBvc2l0aW9uJzogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgdW5kZXJsaW5ldGhpY2tuZXNzOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ3VuZGVybGluZS10aGlja25lc3MnOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgdW5pY29kZTogJ3VuaWNvZGUnLFxuICB1bmljb2RlYmlkaTogJ3VuaWNvZGVCaWRpJyxcbiAgJ3VuaWNvZGUtYmlkaSc6ICd1bmljb2RlQmlkaScsXG4gIHVuaWNvZGVyYW5nZTogJ3VuaWNvZGVSYW5nZScsXG4gICd1bmljb2RlLXJhbmdlJzogJ3VuaWNvZGVSYW5nZScsXG4gIHVuaXRzcGVyZW06ICd1bml0c1BlckVtJyxcbiAgJ3VuaXRzLXBlci1lbSc6ICd1bml0c1BlckVtJyxcbiAgdW5zZWxlY3RhYmxlOiAndW5zZWxlY3RhYmxlJyxcbiAgdmFscGhhYmV0aWM6ICd2QWxwaGFiZXRpYycsXG4gICd2LWFscGhhYmV0aWMnOiAndkFscGhhYmV0aWMnLFxuICB2YWx1ZXM6ICd2YWx1ZXMnLFxuICB2ZWN0b3JlZmZlY3Q6ICd2ZWN0b3JFZmZlY3QnLFxuICAndmVjdG9yLWVmZmVjdCc6ICd2ZWN0b3JFZmZlY3QnLFxuICB2ZXJzaW9uOiAndmVyc2lvbicsXG4gIHZlcnRhZHZ5OiAndmVydEFkdlknLFxuICAndmVydC1hZHYteSc6ICd2ZXJ0QWR2WScsXG4gIHZlcnRvcmlnaW54OiAndmVydE9yaWdpblgnLFxuICAndmVydC1vcmlnaW4teCc6ICd2ZXJ0T3JpZ2luWCcsXG4gIHZlcnRvcmlnaW55OiAndmVydE9yaWdpblknLFxuICAndmVydC1vcmlnaW4teSc6ICd2ZXJ0T3JpZ2luWScsXG4gIHZoYW5naW5nOiAndkhhbmdpbmcnLFxuICAndi1oYW5naW5nJzogJ3ZIYW5naW5nJyxcbiAgdmlkZW9ncmFwaGljOiAndklkZW9ncmFwaGljJyxcbiAgJ3YtaWRlb2dyYXBoaWMnOiAndklkZW9ncmFwaGljJyxcbiAgdmlld2JveDogJ3ZpZXdCb3gnLFxuICB2aWV3dGFyZ2V0OiAndmlld1RhcmdldCcsXG4gIHZpc2liaWxpdHk6ICd2aXNpYmlsaXR5JyxcbiAgdm1hdGhlbWF0aWNhbDogJ3ZNYXRoZW1hdGljYWwnLFxuICAndi1tYXRoZW1hdGljYWwnOiAndk1hdGhlbWF0aWNhbCcsXG4gIHZvY2FiOiAndm9jYWInLFxuICB3aWR0aHM6ICd3aWR0aHMnLFxuICB3b3Jkc3BhY2luZzogJ3dvcmRTcGFjaW5nJyxcbiAgJ3dvcmQtc3BhY2luZyc6ICd3b3JkU3BhY2luZycsXG4gIHdyaXRpbmdtb2RlOiAnd3JpdGluZ01vZGUnLFxuICAnd3JpdGluZy1tb2RlJzogJ3dyaXRpbmdNb2RlJyxcbiAgeDE6ICd4MScsXG4gIHgyOiAneDInLFxuICB4OiAneCcsXG4gIHhjaGFubmVsc2VsZWN0b3I6ICd4Q2hhbm5lbFNlbGVjdG9yJyxcbiAgeGhlaWdodDogJ3hIZWlnaHQnLFxuICAneC1oZWlnaHQnOiAneEhlaWdodCcsXG4gIHhsaW5rYWN0dWF0ZTogJ3hsaW5rQWN0dWF0ZScsXG4gICd4bGluazphY3R1YXRlJzogJ3hsaW5rQWN0dWF0ZScsXG4gIHhsaW5rYXJjcm9sZTogJ3hsaW5rQXJjcm9sZScsXG4gICd4bGluazphcmNyb2xlJzogJ3hsaW5rQXJjcm9sZScsXG4gIHhsaW5raHJlZjogJ3hsaW5rSHJlZicsXG4gICd4bGluazpocmVmJzogJ3hsaW5rSHJlZicsXG4gIHhsaW5rcm9sZTogJ3hsaW5rUm9sZScsXG4gICd4bGluazpyb2xlJzogJ3hsaW5rUm9sZScsXG4gIHhsaW5rc2hvdzogJ3hsaW5rU2hvdycsXG4gICd4bGluazpzaG93JzogJ3hsaW5rU2hvdycsXG4gIHhsaW5rdGl0bGU6ICd4bGlua1RpdGxlJyxcbiAgJ3hsaW5rOnRpdGxlJzogJ3hsaW5rVGl0bGUnLFxuICB4bGlua3R5cGU6ICd4bGlua1R5cGUnLFxuICAneGxpbms6dHlwZSc6ICd4bGlua1R5cGUnLFxuICB4bWxiYXNlOiAneG1sQmFzZScsXG4gICd4bWw6YmFzZSc6ICd4bWxCYXNlJyxcbiAgeG1sbGFuZzogJ3htbExhbmcnLFxuICAneG1sOmxhbmcnOiAneG1sTGFuZycsXG4gIHhtbG5zOiAneG1sbnMnLFxuICAneG1sOnNwYWNlJzogJ3htbFNwYWNlJyxcbiAgeG1sbnN4bGluazogJ3htbG5zWGxpbmsnLFxuICAneG1sbnM6eGxpbmsnOiAneG1sbnNYbGluaycsXG4gIHhtbHNwYWNlOiAneG1sU3BhY2UnLFxuICB5MTogJ3kxJyxcbiAgeTI6ICd5MicsXG4gIHk6ICd5JyxcbiAgeWNoYW5uZWxzZWxlY3RvcjogJ3lDaGFubmVsU2VsZWN0b3InLFxuICB6OiAneicsXG4gIHpvb21hbmRwYW46ICd6b29tQW5kUGFuJ1xufTtcblxudmFyIGFyaWFQcm9wZXJ0aWVzID0ge1xuICAnYXJpYS1jdXJyZW50JzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtZGVzY3JpcHRpb24nOiAwLFxuICAnYXJpYS1kZXRhaWxzJzogMCxcbiAgJ2FyaWEtZGlzYWJsZWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1oaWRkZW4nOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1pbnZhbGlkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEta2V5c2hvcnRjdXRzJzogMCxcbiAgJ2FyaWEtbGFiZWwnOiAwLFxuICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nOiAwLFxuICAvLyBXaWRnZXQgQXR0cmlidXRlc1xuICAnYXJpYS1hdXRvY29tcGxldGUnOiAwLFxuICAnYXJpYS1jaGVja2VkJzogMCxcbiAgJ2FyaWEtZXhwYW5kZWQnOiAwLFxuICAnYXJpYS1oYXNwb3B1cCc6IDAsXG4gICdhcmlhLWxldmVsJzogMCxcbiAgJ2FyaWEtbW9kYWwnOiAwLFxuICAnYXJpYS1tdWx0aWxpbmUnOiAwLFxuICAnYXJpYS1tdWx0aXNlbGVjdGFibGUnOiAwLFxuICAnYXJpYS1vcmllbnRhdGlvbic6IDAsXG4gICdhcmlhLXBsYWNlaG9sZGVyJzogMCxcbiAgJ2FyaWEtcHJlc3NlZCc6IDAsXG4gICdhcmlhLXJlYWRvbmx5JzogMCxcbiAgJ2FyaWEtcmVxdWlyZWQnOiAwLFxuICAnYXJpYS1zZWxlY3RlZCc6IDAsXG4gICdhcmlhLXNvcnQnOiAwLFxuICAnYXJpYS12YWx1ZW1heCc6IDAsXG4gICdhcmlhLXZhbHVlbWluJzogMCxcbiAgJ2FyaWEtdmFsdWVub3cnOiAwLFxuICAnYXJpYS12YWx1ZXRleHQnOiAwLFxuICAvLyBMaXZlIFJlZ2lvbiBBdHRyaWJ1dGVzXG4gICdhcmlhLWF0b21pYyc6IDAsXG4gICdhcmlhLWJ1c3knOiAwLFxuICAnYXJpYS1saXZlJzogMCxcbiAgJ2FyaWEtcmVsZXZhbnQnOiAwLFxuICAvLyBEcmFnLWFuZC1Ecm9wIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtZHJvcGVmZmVjdCc6IDAsXG4gICdhcmlhLWdyYWJiZWQnOiAwLFxuICAvLyBSZWxhdGlvbnNoaXAgQXR0cmlidXRlc1xuICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JzogMCxcbiAgJ2FyaWEtY29sY291bnQnOiAwLFxuICAnYXJpYS1jb2xpbmRleCc6IDAsXG4gICdhcmlhLWNvbHNwYW4nOiAwLFxuICAnYXJpYS1jb250cm9scyc6IDAsXG4gICdhcmlhLWRlc2NyaWJlZGJ5JzogMCxcbiAgJ2FyaWEtZXJyb3JtZXNzYWdlJzogMCxcbiAgJ2FyaWEtZmxvd3RvJzogMCxcbiAgJ2FyaWEtbGFiZWxsZWRieSc6IDAsXG4gICdhcmlhLW93bnMnOiAwLFxuICAnYXJpYS1wb3NpbnNldCc6IDAsXG4gICdhcmlhLXJvd2NvdW50JzogMCxcbiAgJ2FyaWEtcm93aW5kZXgnOiAwLFxuICAnYXJpYS1yb3dzcGFuJzogMCxcbiAgJ2FyaWEtc2V0c2l6ZSc6IDBcbn07XG5cbnZhciB3YXJuZWRQcm9wZXJ0aWVzID0ge307XG52YXIgckFSSUEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciByQVJJQUNhbWVsID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHRhZ05hbWUsIG5hbWUpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFByb3BlcnRpZXMsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyQVJJQUNhbWVsLnRlc3QobmFtZSkpIHtcbiAgICAgIHZhciBhcmlhTmFtZSA9ICdhcmlhLScgKyBuYW1lLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgY29ycmVjdE5hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShhcmlhTmFtZSkgPyBhcmlhTmFtZSA6IG51bGw7IC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgICAgLy8gRE9NIHByb3BlcnRpZXMsIHRoZW4gaXQgaXMgYW4gaW52YWxpZCBhcmlhLSogYXR0cmlidXRlLlxuXG4gICAgICBpZiAoY29ycmVjdE5hbWUgPT0gbnVsbCkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBBUklBIGF0dHJpYnV0ZXMgZm9sbG93IHRoZSBwYXR0ZXJuIGFyaWEtKiBhbmQgbXVzdCBiZSBsb3dlcmNhc2UuJywgbmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cblxuXG4gICAgICBpZiAobmFtZSAhPT0gY29ycmVjdE5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgY29ycmVjdE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAockFSSUEudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IGxvd2VyQ2FzZWROYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChzdGFuZGFyZE5hbWUgPT0gbnVsbCkge1xuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cblxuXG4gICAgICBpZiAobmFtZSAhPT0gc3RhbmRhcmROYW1lKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHN0YW5kYXJkTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB3YXJuSW52YWxpZEFSSUFQcm9wcyh0eXBlLCBwcm9wcykge1xuICB7XG4gICAgdmFyIGludmFsaWRQcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkodHlwZSwga2V5KTtcblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIGludmFsaWRQcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVua25vd25Qcm9wU3RyaW5nID0gaW52YWxpZFByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gICAgfSkuam9pbignLCAnKTtcblxuICAgIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBhcmlhIHByb3AgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1hcmlhLXByb3BzJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcHMgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1hcmlhLXByb3BzJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXModHlwZSwgcHJvcHMpIHtcbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKTtcbn1cblxudmFyIGRpZFdhcm5WYWx1ZU51bGwgPSBmYWxzZTtcbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQxKHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAodHlwZSAhPT0gJ2lucHV0JyAmJiB0eXBlICE9PSAndGV4dGFyZWEnICYmIHR5cGUgIT09ICdzZWxlY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BzICE9IG51bGwgJiYgcHJvcHMudmFsdWUgPT09IG51bGwgJiYgIWRpZFdhcm5WYWx1ZU51bGwpIHtcbiAgICAgIGRpZFdhcm5WYWx1ZU51bGwgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcgJiYgcHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgZXJyb3IoJ2B2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gJyArICdDb25zaWRlciB1c2luZyBhbiBlbXB0eSBhcnJheSB3aGVuIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGB0cnVlYCAnICsgJ3RvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJ2B2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gJyArICdDb25zaWRlciB1c2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCAnICsgJ2ZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlUHJvcGVydHkkMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIHZhciB3YXJuZWRQcm9wZXJ0aWVzJDEgPSB7fTtcbiAgdmFyIEVWRU5UX05BTUVfUkVHRVggPSAvXm9uLi87XG4gIHZhciBJTlZBTElEX0VWRU5UX05BTUVfUkVHRVggPSAvXm9uW15BLVpdLztcbiAgdmFyIHJBUklBJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpLVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbiAgdmFyIHJBUklBQ2FtZWwkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcblxuICB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAodGFnTmFtZSwgbmFtZSwgdmFsdWUsIGV2ZW50UmVnaXN0cnkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzJDEsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c2luJyB8fCBsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNvdXQnKSB7XG4gICAgICBlcnJvcignUmVhY3QgdXNlcyBvbkZvY3VzIGFuZCBvbkJsdXIgaW5zdGVhZCBvZiBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQuICcgKyAnQWxsIFJlYWN0IGV2ZW50cyBhcmUgbm9ybWFsaXplZCB0byBidWJibGUsIHNvIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dCAnICsgJ2FyZSBub3QgbmVlZGVkL3N1cHBvcnRlZCBieSBSZWFjdC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2UgY2FuJ3QgcmVseSBvbiB0aGUgZXZlbnQgc3lzdGVtIGJlaW5nIGluamVjdGVkIG9uIHRoZSBzZXJ2ZXIuXG5cblxuICAgIGlmIChldmVudFJlZ2lzdHJ5ICE9IG51bGwpIHtcbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0gZXZlbnRSZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSBldmVudFJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM7XG5cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gOiBudWxsO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZXJyb3IoJ1Vua25vd24gZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBJdCB3aWxsIGJlIGlnbm9yZWQuJywgbmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgIC8vIElmIG5vIGV2ZW50IHBsdWdpbnMgaGF2ZSBiZWVuIGluamVjdGVkLCB3ZSBhcmUgaW4gYSBzZXJ2ZXIgZW52aXJvbm1lbnQuXG4gICAgICAvLyBTbyB3ZSBjYW4ndCB0ZWxsIGlmIHRoZSBldmVudCBuYW1lIGlzIGNvcnJlY3QgZm9yIHN1cmUsIGJ1dCB3ZSBjYW4gZmlsdGVyXG4gICAgICAvLyBvdXQga25vd24gYmFkIG9uZXMgbGlrZSBgb25jbGlja2AuIFdlIGNhbid0IHN1Z2dlc3QgYSBzcGVjaWZpYyByZXBsYWNlbWVudCB0aG91Z2guXG4gICAgICBpZiAoSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiAnICsgJ1JlYWN0IGV2ZW50cyB1c2UgdGhlIGNhbWVsQ2FzZSBuYW1pbmcgY29udmVudGlvbiwgZm9yIGV4YW1wbGUgYG9uQ2xpY2tgLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBMZXQgdGhlIEFSSUEgYXR0cmlidXRlIGhvb2sgdmFsaWRhdGUgQVJJQSBhdHRyaWJ1dGVzXG5cblxuICAgIGlmIChyQVJJQSQxLnRlc3QobmFtZSkgfHwgckFSSUFDYW1lbCQxLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lubmVyaHRtbCcpIHtcbiAgICAgIGVycm9yKCdEaXJlY3RseSBzZXR0aW5nIHByb3BlcnR5IGBpbm5lckhUTUxgIGlzIG5vdCBwZXJtaXR0ZWQuICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIGxvb2t1cCBkb2N1bWVudGF0aW9uIG9uIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdhcmlhJykge1xuICAgICAgZXJyb3IoJ1RoZSBgYXJpYWAgYXR0cmlidXRlIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGluIFJlYWN0LiAnICsgJ1Bhc3MgaW5kaXZpZHVhbCBgYXJpYS1gIGF0dHJpYnV0ZXMgaW5zdGVhZC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lzJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhIGAlc2AgZm9yIGEgc3RyaW5nIGF0dHJpYnV0ZSBgaXNgLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0ICcgKyAndGhlIHZhbHVlIHRvIGEgc3RyaW5nLicsIHR5cGVvZiB2YWx1ZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBOYU4gZm9yIHRoZSBgJXNgIGF0dHJpYnV0ZS4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCBuYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG4gICAgdmFyIGlzUmVzZXJ2ZWQgPSBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEOyAvLyBLbm93biBhdHRyaWJ1dGVzIHNob3VsZCBtYXRjaCB0aGUgY2FzaW5nIHNwZWNpZmllZCBpbiB0aGUgcHJvcGVydHkgY29uZmlnLlxuXG4gICAgaWYgKHBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdO1xuXG4gICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBuYW1lKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIERPTSBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQgJiYgbmFtZSAhPT0gbG93ZXJDYXNlZE5hbWUpIHtcbiAgICAgIC8vIFVua25vd24gYXR0cmlidXRlcyBzaG91bGQgaGF2ZSBsb3dlcmNhc2UgY2FzaW5nIHNpbmNlIHRoYXQncyBob3cgdGhleVxuICAgICAgLy8gd2lsbCBiZSBjYXNlZCBhbnl3YXkgd2l0aCBzZXJ2ZXIgcmVuZGVyaW5nLlxuICAgICAgZXJyb3IoJ1JlYWN0IGRvZXMgbm90IHJlY29nbml6ZSB0aGUgYCVzYCBwcm9wIG9uIGEgRE9NIGVsZW1lbnQuIElmIHlvdSAnICsgJ2ludGVudGlvbmFsbHkgd2FudCBpdCB0byBhcHBlYXIgaW4gdGhlIERPTSBhcyBhIGN1c3RvbSAnICsgJ2F0dHJpYnV0ZSwgc3BlbGwgaXQgYXMgbG93ZXJjYXNlIGAlc2AgaW5zdGVhZC4gJyArICdJZiB5b3UgYWNjaWRlbnRhbGx5IHBhc3NlZCBpdCBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCwgcmVtb3ZlICcgKyAnaXQgZnJvbSB0aGUgRE9NIGVsZW1lbnQuJywgbmFtZSwgbG93ZXJDYXNlZE5hbWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCB2YWx1ZSwgbmFtZSwgbmFtZSwgdmFsdWUsIG5hbWUsIG5hbWUsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBOb3cgdGhhdCB3ZSd2ZSB2YWxpZGF0ZWQgY2FzaW5nLCBkbyBub3QgdmFsaWRhdGVcbiAgICAvLyBkYXRhIHR5cGVzIGZvciByZXNlcnZlZCBwcm9wc1xuXG5cbiAgICBpZiAoaXNSZXNlcnZlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBXYXJuIHdoZW4gYSBrbm93biBhdHRyaWJ1dGUgaXMgYSBiYWQgdHlwZVxuXG5cbiAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gV2FybiB3aGVuIHBhc3NpbmcgdGhlIHN0cmluZ3MgJ2ZhbHNlJyBvciAndHJ1ZScgaW50byBhIGJvb2xlYW4gcHJvcFxuXG5cbiAgICBpZiAoKHZhbHVlID09PSAnZmFsc2UnIHx8IHZhbHVlID09PSAndHJ1ZScpICYmIHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gQk9PTEVBTikge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIHRoZSBzdHJpbmcgYCVzYCBmb3IgdGhlIGJvb2xlYW4gYXR0cmlidXRlIGAlc2AuICcgKyAnJXMgJyArICdEaWQgeW91IG1lYW4gJXM9eyVzfT8nLCB2YWx1ZSwgbmFtZSwgdmFsdWUgPT09ICdmYWxzZScgPyAnVGhlIGJyb3dzZXIgd2lsbCBpbnRlcnByZXQgaXQgYXMgYSB0cnV0aHkgdmFsdWUuJyA6ICdBbHRob3VnaCB0aGlzIHdvcmtzLCBpdCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGlmIHlvdSBwYXNzIHRoZSBzdHJpbmcgXCJmYWxzZVwiLicsIG5hbWUsIHZhbHVlKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuXG52YXIgd2FyblVua25vd25Qcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gIHtcbiAgICB2YXIgdW5rbm93blByb3BzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSQxKHR5cGUsIGtleSwgcHJvcHNba2V5XSwgZXZlbnRSZWdpc3RyeSk7XG5cbiAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICB1bmtub3duUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB1bmtub3duUHJvcFN0cmluZyA9IHVua25vd25Qcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHJldHVybiAnYCcgKyBwcm9wICsgJ2AnO1xuICAgIH0pLmpvaW4oJywgJyk7XG5cbiAgICBpZiAodW5rbm93blByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWUgZm9yIHByb3AgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgaXQgZnJvbSB0aGUgZWxlbWVudCwgJyArICdvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIGl0IGluIHRoZSBET00uICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yICcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9IGVsc2UgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCB2YWx1ZXMgZm9yIHByb3BzICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZWxlbWVudCwgJyArICdvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIHRoZW0gaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpIHtcbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdhcm5Vbmtub3duUHJvcGVydGllcyh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSk7XG59XG5cbnZhciBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSA9IDE7XG52YXIgSVNfTk9OX0RFTEVHQVRFRCA9IDEgPDwgMTtcbnZhciBJU19DQVBUVVJFX1BIQVNFID0gMSA8PCAyO1xuLy8gc2V0IHRvIExFR0FDWV9GQl9TVVBQT1JULiBMRUdBQ1lfRkJfU1VQUE9SVCBvbmx5IGdldHMgc2V0IHdoZW5cbi8vIHdlIGNhbGwgd2lsbERlZmVyTGF0ZXJGb3JMZWdhY3lGQlN1cHBvcnQsIHRodXMgbm90IGJhaWxpbmcgb3V0XG4vLyB3aWxsIHJlc3VsdCBpbiBlbmRsZXNzIGN5Y2xlcyBsaWtlIGFuIGluZmluaXRlIGxvb3AuXG4vLyBXZSBhbHNvIGRvbid0IHdhbnQgdG8gZGVmZXIgZHVyaW5nIGV2ZW50IHJlcGxheWluZy5cblxudmFyIFNIT1VMRF9OT1RfUFJPQ0VTU19QT0xZRklMTF9FVkVOVF9QTFVHSU5TID0gSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgfCBJU19OT05fREVMRUdBVEVEIHwgSVNfQ0FQVFVSRV9QSEFTRTtcblxuLy8gVGhpcyBleGlzdHMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIFJlYWN0RE9NRXZlbnRSZXBsYXlpbmdcbi8vIGFuZCBET01QbHVnaW5FdmVudFN5c3RlbS5cbnZhciBjdXJyZW50UmVwbGF5aW5nRXZlbnQgPSBudWxsO1xuZnVuY3Rpb24gc2V0UmVwbGF5aW5nRXZlbnQoZXZlbnQpIHtcbiAge1xuICAgIGlmIChjdXJyZW50UmVwbGF5aW5nRXZlbnQgIT09IG51bGwpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBjdXJyZW50bHkgcmVwbGF5aW5nIGV2ZW50IHRvIGJlIG51bGwuIFRoaXMgZXJyb3IgJyArICdpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBjdXJyZW50UmVwbGF5aW5nRXZlbnQgPSBldmVudDtcbn1cbmZ1bmN0aW9uIHJlc2V0UmVwbGF5aW5nRXZlbnQoKSB7XG4gIHtcbiAgICBpZiAoY3VycmVudFJlcGxheWluZ0V2ZW50ID09PSBudWxsKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgY3VycmVudGx5IHJlcGxheWluZyBldmVudCB0byBub3QgYmUgbnVsbC4gVGhpcyBlcnJvciAnICsgJ2lzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGN1cnJlbnRSZXBsYXlpbmdFdmVudCA9IG51bGw7XG59XG5mdW5jdGlvbiBpc1JlcGxheWluZ0V2ZW50KGV2ZW50KSB7XG4gIHJldHVybiBldmVudCA9PT0gY3VycmVudFJlcGxheWluZ0V2ZW50O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvclxuICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSB7XG4gIC8vIEZhbGxiYWNrIHRvIG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgZm9yIElFOVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTA2XG4gIHZhciB0YXJnZXQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7IC8vIE5vcm1hbGl6ZSBTVkcgPHVzZT4gZWxlbWVudCBldmVudHMgIzQ5NjNcblxuICBpZiAodGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSB7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50O1xuICB9IC8vIFNhZmFyaSBtYXkgZmlyZSBldmVudHMgb24gdGV4dCBub2RlcyAoTm9kZS5URVhUX05PREUgaXMgMykuXG4gIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfcHJvcGVydGllcy5odG1sXG5cblxuICByZXR1cm4gdGFyZ2V0Lm5vZGVUeXBlID09PSBURVhUX05PREUgPyB0YXJnZXQucGFyZW50Tm9kZSA6IHRhcmdldDtcbn1cblxudmFyIHJlc3RvcmVJbXBsID0gbnVsbDtcbnZhciByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbnZhciByZXN0b3JlUXVldWUgPSBudWxsO1xuXG5mdW5jdGlvbiByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpIHtcbiAgLy8gV2UgcGVyZm9ybSB0aGlzIHRyYW5zbGF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3Agc28gdGhhdCB3ZVxuICAvLyBhbHdheXMgcmVjZWl2ZSB0aGUgY29ycmVjdCBmaWJlciBoZXJlXG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXQpO1xuXG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIC8vIFVubW91bnRlZFxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcmVzdG9yZUltcGwgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFJlc3RvcmVJbXBsZW1lbnRhdGlvbigpIG5lZWRzIHRvIGJlIGNhbGxlZCB0byBoYW5kbGUgYSB0YXJnZXQgZm9yIGNvbnRyb2xsZWQgJyArICdldmVudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gIH1cblxuICB2YXIgc3RhdGVOb2RlID0gaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGU7IC8vIEd1YXJkIGFnYWluc3QgRmliZXIgYmVpbmcgdW5tb3VudGVkLlxuXG4gIGlmIChzdGF0ZU5vZGUpIHtcbiAgICB2YXIgX3Byb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpO1xuXG4gICAgcmVzdG9yZUltcGwoaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUsIGludGVybmFsSW5zdGFuY2UudHlwZSwgX3Byb3BzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRSZXN0b3JlSW1wbGVtZW50YXRpb24oaW1wbCkge1xuICByZXN0b3JlSW1wbCA9IGltcGw7XG59XG5mdW5jdGlvbiBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCkge1xuICBpZiAocmVzdG9yZVRhcmdldCkge1xuICAgIGlmIChyZXN0b3JlUXVldWUpIHtcbiAgICAgIHJlc3RvcmVRdWV1ZS5wdXNoKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3RvcmVRdWV1ZSA9IFt0YXJnZXRdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN0b3JlVGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG59XG5mdW5jdGlvbiBuZWVkc1N0YXRlUmVzdG9yZSgpIHtcbiAgcmV0dXJuIHJlc3RvcmVUYXJnZXQgIT09IG51bGwgfHwgcmVzdG9yZVF1ZXVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gcmVzdG9yZVN0YXRlSWZOZWVkZWQoKSB7XG4gIGlmICghcmVzdG9yZVRhcmdldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSByZXN0b3JlVGFyZ2V0O1xuICB2YXIgcXVldWVkVGFyZ2V0cyA9IHJlc3RvcmVRdWV1ZTtcbiAgcmVzdG9yZVRhcmdldCA9IG51bGw7XG4gIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG4gIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCk7XG5cbiAgaWYgKHF1ZXVlZFRhcmdldHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlZFRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHF1ZXVlZFRhcmdldHNbaV0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyB0aGUgcmVuZGVyZXIuIFN1Y2ggYXMgd2hlbiB3ZSdyZSBkaXNwYXRjaGluZyBldmVudHMgb3IgaWYgdGhpcmQgcGFydHlcbi8vIGxpYnJhcmllcyBuZWVkIHRvIGNhbGwgYmF0Y2hlZFVwZGF0ZXMuIEV2ZW50dWFsbHksIHRoaXMgQVBJIHdpbGwgZ28gYXdheSB3aGVuXG4vLyBldmVyeXRoaW5nIGlzIGJhdGNoZWQgYnkgZGVmYXVsdC4gV2UnbGwgdGhlbiBoYXZlIGEgc2ltaWxhciBBUEkgdG8gb3B0LW91dCBvZlxuLy8gc2NoZWR1bGVkIHdvcmsgYW5kIGluc3RlYWQgZG8gc3luY2hyb25vdXMgd29yay5cbi8vIERlZmF1bHRzXG5cbnZhciBiYXRjaGVkVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGJvb2trZWVwaW5nKSB7XG4gIHJldHVybiBmbihib29ra2VlcGluZyk7XG59O1xuXG52YXIgZmx1c2hTeW5jSW1wbCA9IGZ1bmN0aW9uICgpIHt9O1xuXG52YXIgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmluaXNoRXZlbnRIYW5kbGVyKCkge1xuICAvLyBIZXJlIHdlIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkLCB3aGljaCBpcyBpbXBvcnRhbnRcbiAgLy8gd2hlbiB1c2luZyBjb250cm9sbGVkIGNvbXBvbmVudHMgd2l0aGluIGxheWVyczpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjk4XG4gIC8vIFRoZW4gd2UgcmVzdG9yZSBzdGF0ZSBvZiBhbnkgY29udHJvbGxlZCBjb21wb25lbnQuXG4gIHZhciBjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcyA9IG5lZWRzU3RhdGVSZXN0b3JlKCk7XG5cbiAgaWYgKGNvbnRyb2xsZWRDb21wb25lbnRzSGF2ZVBlbmRpbmdVcGRhdGVzKSB7XG4gICAgLy8gSWYgYSBjb250cm9sbGVkIGV2ZW50IHdhcyBmaXJlZCwgd2UgbWF5IG5lZWQgdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2ZcbiAgICAvLyB0aGUgRE9NIG5vZGUgYmFjayB0byB0aGUgY29udHJvbGxlZCB2YWx1ZS4gVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiBSZWFjdFxuICAgIC8vIGJhaWxzIG91dCBvZiB0aGUgdXBkYXRlIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTS5cbiAgICAvLyBUT0RPOiBSZXN0b3JlIHN0YXRlIGluIHRoZSBtaWNyb3Rhc2ssIGFmdGVyIHRoZSBkaXNjcmV0ZSB1cGRhdGVzIGZsdXNoLFxuICAgIC8vIGluc3RlYWQgb2YgZWFybHkgZmx1c2hpbmcgdGhlbSBoZXJlLlxuICAgIGZsdXNoU3luY0ltcGwoKTtcbiAgICByZXN0b3JlU3RhdGVJZk5lZWRlZCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzKGZuLCBhLCBiKSB7XG4gIGlmIChpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGFub3RoZXIgYmF0Y2gsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdFxuICAgIC8vIGZ1bGx5IGNvbXBsZXRlcyBiZWZvcmUgcmVzdG9yaW5nIHN0YXRlLlxuICAgIHJldHVybiBmbihhLCBiKTtcbiAgfVxuXG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkVXBkYXRlc0ltcGwoZm4sIGEsIGIpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG4gICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gIH1cbn0gLy8gVE9ETzogUmVwbGFjZSB3aXRoIGZsdXNoU3luY1xuZnVuY3Rpb24gc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihfYmF0Y2hlZFVwZGF0ZXNJbXBsLCBfZGlzY3JldGVVcGRhdGVzSW1wbCwgX2ZsdXNoU3luY0ltcGwpIHtcbiAgYmF0Y2hlZFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRVcGRhdGVzSW1wbDtcbiAgZmx1c2hTeW5jSW1wbCA9IF9mbHVzaFN5bmNJbXBsO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyYWN0aXZlKHRhZykge1xuICByZXR1cm4gdGFnID09PSAnYnV0dG9uJyB8fCB0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAnc2VsZWN0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYSc7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KG5hbWUsIHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ29uQ2xpY2snOlxuICAgIGNhc2UgJ29uQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZURvd24nOlxuICAgIGNhc2UgJ29uTW91c2VEb3duQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZVVwJzpcbiAgICBjYXNlICdvbk1vdXNlVXBDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlRW50ZXInOlxuICAgICAgcmV0dXJuICEhKHByb3BzLmRpc2FibGVkICYmIGlzSW50ZXJhY3RpdmUodHlwZSkpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gaW5zdCBUaGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBzb3VyY2Ugb2YgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLlxuICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICB2YXIgc3RhdGVOb2RlID0gaW5zdC5zdGF0ZU5vZGU7XG5cbiAgaWYgKHN0YXRlTm9kZSA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MgKGV4OiBvbmxvYWQgZXZlbnRzIGluIGluY3JlbWVudGFsIG1vZGUpLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpO1xuXG4gIGlmIChwcm9wcyA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBwcm9wc1tyZWdpc3RyYXRpb25OYW1lXTtcblxuICBpZiAoc2hvdWxkUHJldmVudE1vdXNlRXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgaW5zdC50eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBgXCIgKyByZWdpc3RyYXRpb25OYW1lICsgXCJgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYFwiICsgdHlwZW9mIGxpc3RlbmVyICsgXCJgIHR5cGUuXCIpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG52YXIgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTsgLy8gQ2hlY2sgaWYgYnJvd3NlciBzdXBwb3J0IGV2ZW50cyB3aXRoIHBhc3NpdmUgbGlzdGVuZXJzXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lciNTYWZlbHlfZGV0ZWN0aW5nX29wdGlvbl9zdXBwb3J0XG5cbmlmIChjYW5Vc2VET00pIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0aW9ucyA9IHt9OyAvLyAkRmxvd0ZpeE1lOiBJZ25vcmUgRmxvdyBjb21wbGFpbmluZyBhYm91dCBuZWVkaW5nIGEgdmFsdWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRpb25zLCAncGFzc2l2ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIGZ1bmNBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblxuICB0cnkge1xuICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwgPSBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kO1xuXG57XG4gIC8vIEluIERFViBtb2RlLCB3ZSBzd2FwIG91dCBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgZm9yIGEgc3BlY2lhbCB2ZXJzaW9uXG4gIC8vIHRoYXQgcGxheXMgbW9yZSBuaWNlbHkgd2l0aCB0aGUgYnJvd3NlcidzIERldlRvb2xzLiBUaGUgaWRlYSBpcyB0byBwcmVzZXJ2ZVxuICAvLyBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvci4gQmVjYXVzZSBSZWFjdCB3cmFwcyBhbGwgdXNlci1wcm92aWRlZFxuICAvLyBmdW5jdGlvbnMgaW4gaW52b2tlR3VhcmRlZENhbGxiYWNrLCBhbmQgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiBvZlxuICAvLyBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgdXNlcyBhIHRyeS1jYXRjaCwgYWxsIHVzZXIgZXhjZXB0aW9ucyBhcmUgdHJlYXRlZFxuICAvLyBsaWtlIGNhdWdodCBleGNlcHRpb25zLCBhbmQgdGhlIERldlRvb2xzIHdvbid0IHBhdXNlIHVubGVzcyB0aGUgZGV2ZWxvcGVyXG4gIC8vIHRha2VzIHRoZSBleHRyYSBzdGVwIG9mIGVuYWJsaW5nIHBhdXNlIG9uIGNhdWdodCBleGNlcHRpb25zLiBUaGlzIGlzXG4gIC8vIHVuaW50dWl0aXZlLCB0aG91Z2gsIGJlY2F1c2UgZXZlbiB0aG91Z2ggUmVhY3QgaGFzIGNhdWdodCB0aGUgZXJyb3IsIGZyb21cbiAgLy8gdGhlIGRldmVsb3BlcidzIHBlcnNwZWN0aXZlLCB0aGUgZXJyb3IgaXMgdW5jYXVnaHQuXG4gIC8vXG4gIC8vIFRvIHByZXNlcnZlIHRoZSBleHBlY3RlZCBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvciwgd2UgZG9uJ3QgdXNlIGFcbiAgLy8gdHJ5LWNhdGNoIGluIERFVi4gSW5zdGVhZCwgd2Ugc3luY2hyb25vdXNseSBkaXNwYXRjaCBhIGZha2UgZXZlbnQgdG8gYSBmYWtlXG4gIC8vIERPTSBub2RlLCBhbmQgY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayBmcm9tIGluc2lkZSBhbiBldmVudCBoYW5kbGVyXG4gIC8vIGZvciB0aGF0IGZha2UgZXZlbnQuIElmIHRoZSBjYWxsYmFjayB0aHJvd3MsIHRoZSBlcnJvciBpcyBcImNhcHR1cmVkXCIgdXNpbmdcbiAgLy8gYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gQnV0IGJlY2F1c2UgdGhlIGVycm9yIGhhcHBlbnMgaW4gYSBkaWZmZXJlbnRcbiAgLy8gZXZlbnQgbG9vcCBjb250ZXh0LCBpdCBkb2VzIG5vdCBpbnRlcnJ1cHQgdGhlIG5vcm1hbCBwcm9ncmFtIGZsb3cuXG4gIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIGdpdmVzIHVzIHRyeS1jYXRjaCBiZWhhdmlvciB3aXRob3V0IGFjdHVhbGx5IHVzaW5nXG4gIC8vIHRyeS1jYXRjaC4gTmVhdCFcbiAgLy8gQ2hlY2sgdGhhdCB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgQVBJcyB3ZSBuZWVkIHRvIGltcGxlbWVudCBvdXIgc3BlY2lhbFxuICAvLyBERVYgdmVyc2lvbiBvZiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZGlzcGF0Y2hFdmVudCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBmYWtlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3JlYWN0Jyk7XG5cbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrRGV2KG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIC8vIElmIGRvY3VtZW50IGRvZXNuJ3QgZXhpc3Qgd2Uga25vdyBmb3Igc3VyZSB3ZSB3aWxsIGNyYXNoIGluIHRoaXMgbWV0aG9kXG4gICAgICAvLyB3aGVuIHdlIGNhbGwgZG9jdW1lbnQuY3JlYXRlRXZlbnQoKS4gSG93ZXZlciB0aGlzIGNhbiBjYXVzZSBjb25mdXNpbmdcbiAgICAgIC8vIGVycm9yczogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2NyZWF0ZS1yZWFjdC1hcHAvaXNzdWVzLzM0ODJcbiAgICAgIC8vIFNvIHdlIHByZWVtcHRpdmVseSB0aHJvdyB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UgaW5zdGVhZC5cbiAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnIHx8IGRvY3VtZW50ID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGBkb2N1bWVudGAgZ2xvYmFsIHdhcyBkZWZpbmVkIHdoZW4gUmVhY3Qgd2FzIGluaXRpYWxpemVkLCBidXQgaXMgbm90ICcgKyAnZGVmaW5lZCBhbnltb3JlLiBUaGlzIGNhbiBoYXBwZW4gaW4gYSB0ZXN0IGVudmlyb25tZW50IGlmIGEgY29tcG9uZW50ICcgKyAnc2NoZWR1bGVzIGFuIHVwZGF0ZSBmcm9tIGFuIGFzeW5jaHJvbm91cyBjYWxsYmFjaywgYnV0IHRoZSB0ZXN0IGhhcyBhbHJlYWR5ICcgKyAnZmluaXNoZWQgcnVubmluZy4gVG8gc29sdmUgdGhpcywgeW91IGNhbiBlaXRoZXIgdW5tb3VudCB0aGUgY29tcG9uZW50IGF0ICcgKyAndGhlIGVuZCBvZiB5b3VyIHRlc3QgKGFuZCBlbnN1cmUgdGhhdCBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgZ2V0ICcgKyAnY2FuY2VsZWQgaW4gYGNvbXBvbmVudFdpbGxVbm1vdW50YCksIG9yIHlvdSBjYW4gY2hhbmdlIHRoZSB0ZXN0IGl0c2VsZiAnICsgJ3RvIGJlIGFzeW5jaHJvbm91cy4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgdmFyIGRpZENhbGwgPSBmYWxzZTsgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayB0aHJldyBhbiBlcnJvci4gV2VcbiAgICAgIC8vIHNldCB0aGlzIHRvIHRydWUgYXQgdGhlIGJlZ2lubmluZywgdGhlbiBzZXQgaXQgdG8gZmFsc2UgcmlnaHQgYWZ0ZXJcbiAgICAgIC8vIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gZXJyb3JzLCBgZGlkRXJyb3JgIHdpbGwgbmV2ZXIgYmVcbiAgICAgIC8vIHNldCB0byBmYWxzZS4gVGhpcyBzdHJhdGVneSB3b3JrcyBldmVuIGlmIHRoZSBicm93c2VyIGlzIGZsYWt5IGFuZFxuICAgICAgLy8gZmFpbHMgdG8gY2FsbCBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIsIGJlY2F1c2UgaXQgZG9lc24ndCByZWx5IG9uXG4gICAgICAvLyB0aGUgZXJyb3IgZXZlbnQgYXQgYWxsLlxuXG4gICAgICB2YXIgZGlkRXJyb3IgPSB0cnVlOyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgdmFsdWUgb2Ygd2luZG93LmV2ZW50IHNvIHRoYXQgd2UgY2FuIHJlc2V0IGl0XG4gICAgICAvLyBkdXJpbmcgdGhlIGNhbGxiYWNrIHRvIGxldCB1c2VyIGNvZGUgYWNjZXNzIHdpbmRvdy5ldmVudCBpbiB0aGVcbiAgICAgIC8vIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBpdC5cblxuICAgICAgdmFyIHdpbmRvd0V2ZW50ID0gd2luZG93LmV2ZW50OyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgZGVzY3JpcHRvciBvZiB3aW5kb3cuZXZlbnQgdG8gcmVzdG9yZSBpdCBhZnRlciBldmVudFxuICAgICAgLy8gZGlzcGF0Y2hpbmc6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2ODhcblxuICAgICAgdmFyIHdpbmRvd0V2ZW50RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnZXZlbnQnKTtcblxuICAgICAgZnVuY3Rpb24gcmVzdG9yZUFmdGVyRGlzcGF0Y2goKSB7XG4gICAgICAgIC8vIFdlIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgY2FsbGJhY2sgZnJvbSBldmVudCBsaXN0ZW5lcnMgc28gdGhhdFxuICAgICAgICAvLyBuZXN0ZWQgYGludm9rZUd1YXJkZWRDYWxsYmFja2AgY2FsbHMgZG8gbm90IGNsYXNoLiBPdGhlcndpc2UsIGFcbiAgICAgICAgLy8gbmVzdGVkIGNhbGwgd291bGQgdHJpZ2dlciB0aGUgZmFrZSBldmVudCBoYW5kbGVycyBvZiBhbnkgY2FsbCBoaWdoZXJcbiAgICAgICAgLy8gaW4gdGhlIHN0YWNrLlxuICAgICAgICBmYWtlTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBXZSBjaGVjayBmb3Igd2luZG93Lmhhc093blByb3BlcnR5KCdldmVudCcpIHRvIHByZXZlbnQgdGhlXG4gICAgICAgIC8vIHdpbmRvdy5ldmVudCBhc3NpZ25tZW50IGluIGJvdGggSUUgPD0gMTAgYXMgdGhleSB0aHJvdyBhbiBlcnJvclxuICAgICAgICAvLyBcIk1lbWJlciBub3QgZm91bmRcIiBpbiBzdHJpY3QgbW9kZSwgYW5kIGluIEZpcmVmb3ggd2hpY2ggZG9lcyBub3RcbiAgICAgICAgLy8gc3VwcG9ydCB3aW5kb3cuZXZlbnQuXG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuZXZlbnQgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSkge1xuICAgICAgICAgIHdpbmRvdy5ldmVudCA9IHdpbmRvd0V2ZW50O1xuICAgICAgICB9XG4gICAgICB9IC8vIENyZWF0ZSBhbiBldmVudCBoYW5kbGVyIGZvciBvdXIgZmFrZSBldmVudC4gV2Ugd2lsbCBzeW5jaHJvbm91c2x5XG4gICAgICAvLyBkaXNwYXRjaCBvdXIgZmFrZSBldmVudCB1c2luZyBgZGlzcGF0Y2hFdmVudGAuIEluc2lkZSB0aGUgaGFuZGxlciwgd2VcbiAgICAgIC8vIGNhbGwgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2suXG5cblxuICAgICAgdmFyIGZ1bmNBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblxuICAgICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKCkge1xuICAgICAgICBkaWRDYWxsID0gdHJ1ZTtcbiAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBmdW5jQXJncyk7XG4gICAgICAgIGRpZEVycm9yID0gZmFsc2U7XG4gICAgICB9IC8vIENyZWF0ZSBhIGdsb2JhbCBlcnJvciBldmVudCBoYW5kbGVyLiBXZSB1c2UgdGhpcyB0byBjYXB0dXJlIHRoZSB2YWx1ZVxuICAgICAgLy8gdGhhdCB3YXMgdGhyb3duLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBlcnJvciBoYW5kbGVyIHdpbGwgZmlyZSBtb3JlXG4gICAgICAvLyB0aGFuIG9uY2U7IGZvciBleGFtcGxlLCBpZiBub24tUmVhY3QgY29kZSBhbHNvIGNhbGxzIGBkaXNwYXRjaEV2ZW50YFxuICAgICAgLy8gYW5kIGEgaGFuZGxlciBmb3IgdGhhdCBldmVudCB0aHJvd3MuIFdlIHNob3VsZCBiZSByZXNpbGllbnQgdG8gbW9zdCBvZlxuICAgICAgLy8gdGhvc2UgY2FzZXMuIEV2ZW4gaWYgb3VyIGVycm9yIGV2ZW50IGhhbmRsZXIgZmlyZXMgbW9yZSB0aGFuIG9uY2UsIHRoZVxuICAgICAgLy8gbGFzdCBlcnJvciBldmVudCBpcyBhbHdheXMgdXNlZC4gSWYgdGhlIGNhbGxiYWNrIGFjdHVhbGx5IGRvZXMgZXJyb3IsXG4gICAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGxhc3QgZXJyb3IgZXZlbnQgaXMgdGhlIGNvcnJlY3Qgb25lLCBiZWNhdXNlIGl0J3Mgbm90XG4gICAgICAvLyBwb3NzaWJsZSBmb3IgYW55dGhpbmcgZWxzZSB0byBoYXZlIGhhcHBlbmVkIGluIGJldHdlZW4gb3VyIGNhbGxiYWNrXG4gICAgICAvLyBlcnJvcmluZyBhbmQgdGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoZSBgZGlzcGF0Y2hFdmVudGAgY2FsbCBiZWxvdy4gSWZcbiAgICAgIC8vIHRoZSBjYWxsYmFjayBkb2Vzbid0IGVycm9yLCBidXQgdGhlIGVycm9yIGV2ZW50IHdhcyBmaXJlZCwgd2Uga25vdyB0b1xuICAgICAgLy8gaWdub3JlIGl0IGJlY2F1c2UgYGRpZEVycm9yYCB3aWxsIGJlIGZhbHNlLCBhcyBkZXNjcmliZWQgYWJvdmUuXG5cblxuICAgICAgdmFyIGVycm9yOyAvLyBVc2UgdGhpcyB0byB0cmFjayB3aGV0aGVyIHRoZSBlcnJvciBldmVudCBpcyBldmVyIGNhbGxlZC5cblxuICAgICAgdmFyIGRpZFNldEVycm9yID0gZmFsc2U7XG4gICAgICB2YXIgaXNDcm9zc09yaWdpbkVycm9yID0gZmFsc2U7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZVdpbmRvd0Vycm9yKGV2ZW50KSB7XG4gICAgICAgIGVycm9yID0gZXZlbnQuZXJyb3I7XG4gICAgICAgIGRpZFNldEVycm9yID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwgJiYgZXZlbnQuY29sbm8gPT09IDAgJiYgZXZlbnQubGluZW5vID09PSAwKSB7XG4gICAgICAgICAgaXNDcm9zc09yaWdpbkVycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgLy8gU29tZSBvdGhlciBlcnJvciBoYW5kbGVyIGhhcyBwcmV2ZW50ZWQgZGVmYXVsdC5cbiAgICAgICAgICAvLyBCcm93c2VycyBzaWxlbmNlIHRoZSBlcnJvciByZXBvcnQgaWYgdGhpcyBoYXBwZW5zLlxuICAgICAgICAgIC8vIFdlJ2xsIHJlbWVtYmVyIHRoaXMgdG8gbGF0ZXIgZGVjaWRlIHdoZXRoZXIgdG8gbG9nIGl0IG9yIG5vdC5cbiAgICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBlcnJvci5fc3VwcHJlc3NMb2dnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlubmVyKSB7Ly8gSWdub3JlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBDcmVhdGUgYSBmYWtlIGV2ZW50IHR5cGUuXG5cblxuICAgICAgdmFyIGV2dFR5cGUgPSBcInJlYWN0LVwiICsgKG5hbWUgPyBuYW1lIDogJ2ludm9rZWd1YXJkZWRjYWxsYmFjaycpOyAvLyBBdHRhY2ggb3VyIGV2ZW50IGhhbmRsZXJzXG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVdpbmRvd0Vycm9yKTtcbiAgICAgIGZha2VOb2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQuIElmIHRoZSB1c2VyLXByb3ZpZGVkIGZ1bmN0aW9uXG4gICAgICAvLyBlcnJvcnMsIGl0IHdpbGwgdHJpZ2dlciBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIuXG5cbiAgICAgIGV2dC5pbml0RXZlbnQoZXZ0VHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZha2VOb2RlLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblxuICAgICAgaWYgKHdpbmRvd0V2ZW50RGVzY3JpcHRvcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnZXZlbnQnLCB3aW5kb3dFdmVudERlc2NyaXB0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlkQ2FsbCAmJiBkaWRFcnJvcikge1xuICAgICAgICBpZiAoIWRpZFNldEVycm9yKSB7XG4gICAgICAgICAgLy8gVGhlIGNhbGxiYWNrIGVycm9yZWQsIGJ1dCB0aGUgZXJyb3IgZXZlbnQgbmV2ZXIgZmlyZWQuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignQW4gZXJyb3Igd2FzIHRocm93biBpbnNpZGUgb25lIG9mIHlvdXIgY29tcG9uZW50cywgYnV0IFJlYWN0ICcgKyBcImRvZXNuJ3Qga25vdyB3aGF0IGl0IHdhcy4gVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGJyb3dzZXIgXCIgKyAnZmxha2luZXNzLiBSZWFjdCBkb2VzIGl0cyBiZXN0IHRvIHByZXNlcnZlIHRoZSBcIlBhdXNlIG9uICcgKyAnZXhjZXB0aW9uc1wiIGJlaGF2aW9yIG9mIHRoZSBEZXZUb29scywgd2hpY2ggcmVxdWlyZXMgc29tZSAnICsgXCJERVYtbW9kZSBvbmx5IHRyaWNrcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlIGRvbid0IHdvcmsgaW4gXCIgKyAneW91ciBicm93c2VyLiBUcnkgdHJpZ2dlcmluZyB0aGUgZXJyb3IgaW4gcHJvZHVjdGlvbiBtb2RlLCAnICsgJ29yIHN3aXRjaGluZyB0byBhIG1vZGVybiBicm93c2VyLiBJZiB5b3Ugc3VzcGVjdCB0aGF0IHRoaXMgaXMgJyArICdhY3R1YWxseSBhbiBpc3N1ZSB3aXRoIFJlYWN0LCBwbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Nyb3NzT3JpZ2luRXJyb3IpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiQSBjcm9zcy1vcmlnaW4gZXJyb3Igd2FzIHRocm93bi4gUmVhY3QgZG9lc24ndCBoYXZlIGFjY2VzcyB0byBcIiArICd0aGUgYWN0dWFsIGVycm9yIG9iamVjdCBpbiBkZXZlbG9wbWVudC4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Nyb3Nzb3JpZ2luLWVycm9yIGZvciBtb3JlIGluZm9ybWF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgICAgIH0gLy8gUmVtb3ZlIG91ciBldmVudCBsaXN0ZW5lcnNcblxuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVXaW5kb3dFcnJvcik7XG5cbiAgICAgIGlmICghZGlkQ2FsbCkge1xuICAgICAgICAvLyBTb21ldGhpbmcgd2VudCByZWFsbHkgd3JvbmcsIGFuZCBvdXIgZXZlbnQgd2FzIG5vdCBkaXNwYXRjaGVkLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NzM0XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY1ODVcbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBwcm9kdWN0aW9uIGltcGxlbWVudGF0aW9uLlxuICAgICAgICByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpO1xuICAgICAgICByZXR1cm4gaW52b2tlR3VhcmRlZENhbGxiYWNrUHJvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMSA9IGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGw7XG5cbnZhciBoYXNFcnJvciA9IGZhbHNlO1xudmFyIGNhdWdodEVycm9yID0gbnVsbDsgLy8gVXNlZCBieSBldmVudCBzeXN0ZW0gdG8gY2FwdHVyZS9yZXRocm93IHRoZSBmaXJzdCBlcnJvci5cblxudmFyIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xudmFyIHJldGhyb3dFcnJvciA9IG51bGw7XG52YXIgcmVwb3J0ZXIgPSB7XG4gIG9uRXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICB9XG59O1xuLyoqXG4gKiBDYWxsIGEgZnVuY3Rpb24gd2hpbGUgZ3VhcmRpbmcgYWdhaW5zdCBlcnJvcnMgdGhhdCBoYXBwZW5zIHdpdGhpbiBpdC5cbiAqIFJldHVybnMgYW4gZXJyb3IgaWYgaXQgdGhyb3dzLCBvdGhlcndpc2UgbnVsbC5cbiAqXG4gKiBJbiBwcm9kdWN0aW9uLCB0aGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgdHJ5LWNhdGNoLiBUaGUgcmVhc29uIHdlIGRvbid0XG4gKiB1c2UgYSB0cnktY2F0Y2ggZGlyZWN0bHkgaXMgc28gdGhhdCB3ZSBjYW4gc3dhcCBvdXQgYSBkaWZmZXJlbnRcbiAqIGltcGxlbWVudGF0aW9uIGluIERFViBtb2RlLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBoYXNFcnJvciA9IGZhbHNlO1xuICBjYXVnaHRFcnJvciA9IG51bGw7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwkMS5hcHBseShyZXBvcnRlciwgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogU2FtZSBhcyBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhbiBlcnJvciwgaXQgc3RvcmVzXG4gKiBpdCBpbiBhIGdsb2JhbCBzbyBpdCBjYW4gYmUgcmV0aHJvd24gYnkgYHJldGhyb3dDYXVnaHRFcnJvcmAgbGF0ZXIuXG4gKiBUT0RPOiBTZWUgaWYgY2F1Z2h0RXJyb3IgYW5kIHJldGhyb3dFcnJvciBjYW4gYmUgdW5pZmllZC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrQW5kQ2F0Y2hGaXJzdEVycm9yKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgaWYgKCFoYXNSZXRocm93RXJyb3IpIHtcbiAgICAgIGhhc1JldGhyb3dFcnJvciA9IHRydWU7XG4gICAgICByZXRocm93RXJyb3IgPSBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRHVyaW5nIGV4ZWN1dGlvbiBvZiBndWFyZGVkIGZ1bmN0aW9ucyB3ZSB3aWxsIGNhcHR1cmUgdGhlIGZpcnN0IGVycm9yIHdoaWNoXG4gKiB3ZSB3aWxsIHJldGhyb3cgdG8gYmUgaGFuZGxlZCBieSB0aGUgdG9wIGxldmVsIGVycm9yIGhhbmRsZXIuXG4gKi9cblxuZnVuY3Rpb24gcmV0aHJvd0NhdWdodEVycm9yKCkge1xuICBpZiAoaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gcmV0aHJvd0Vycm9yO1xuICAgIGhhc1JldGhyb3dFcnJvciA9IGZhbHNlO1xuICAgIHJldGhyb3dFcnJvciA9IG51bGw7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc0NhdWdodEVycm9yKCkge1xuICByZXR1cm4gaGFzRXJyb3I7XG59XG5mdW5jdGlvbiBjbGVhckNhdWdodEVycm9yKCkge1xuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjYXVnaHRFcnJvcjtcbiAgICBoYXNFcnJvciA9IGZhbHNlO1xuICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhckNhdWdodEVycm9yIHdhcyBjYWxsZWQgYnV0IG5vIGVycm9yIHdhcyBjYXB0dXJlZC4gVGhpcyBlcnJvciAnICsgJ2lzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICB9XG59XG5cbi8qKlxuICogYFJlYWN0SW5zdGFuY2VNYXBgIG1haW50YWlucyBhIG1hcHBpbmcgZnJvbSBhIHB1YmxpYyBmYWNpbmcgc3RhdGVmdWxcbiAqIGluc3RhbmNlIChrZXkpIGFuZCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKHZhbHVlKS4gVGhpcyBhbGxvd3MgcHVibGljXG4gKiBtZXRob2RzIHRvIGFjY2VwdCB0aGUgdXNlciBmYWNpbmcgaW5zdGFuY2UgYXMgYW4gYXJndW1lbnQgYW5kIG1hcCB0aGVtIGJhY2tcbiAqIHRvIGludGVybmFsIG1ldGhvZHMuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgbW9kdWxlIGlzIGN1cnJlbnRseSBzaGFyZWQgYW5kIGFzc3VtZWQgdG8gYmUgc3RhdGVsZXNzLlxuICogSWYgdGhpcyBiZWNvbWVzIGFuIGFjdHVhbCBNYXAsIHRoYXQgd2lsbCBicmVhay5cbiAqL1xuZnVuY3Rpb24gZ2V0KGtleSkge1xuICByZXR1cm4ga2V5Ll9yZWFjdEludGVybmFscztcbn1cbmZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHMgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gIGtleS5fcmVhY3RJbnRlcm5hbHMgPSB2YWx1ZTtcbn1cblxuLy8gRG9uJ3QgY2hhbmdlIHRoZXNlIHR3byB2YWx1ZXMuIFRoZXkncmUgdXNlZCBieSBSZWFjdCBEZXYgVG9vbHMuXG52YXIgTm9GbGFncyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBQZXJmb3JtZWRXb3JrID1cbi8qICAgICAgICAgICAgICAgICovXG4xOyAvLyBZb3UgY2FuIGNoYW5nZSB0aGUgcmVzdCAoYW5kIGFkZCBtb3JlKS5cblxudmFyIFBsYWNlbWVudCA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgVXBkYXRlID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuNDtcbnZhciBDaGlsZERlbGV0aW9uID1cbi8qICAgICAgICAgICAgICAgICovXG4xNjtcbnZhciBDb250ZW50UmVzZXQgPVxuLyogICAgICAgICAgICAgICAgICovXG4zMjtcbnZhciBDYWxsYmFjayA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG42NDtcbnZhciBEaWRDYXB0dXJlID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4xMjg7XG52YXIgRm9yY2VDbGllbnRSZW5kZXIgPVxuLyogICAgICAgICAgICAqL1xuMjU2O1xudmFyIFJlZiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjUxMjtcbnZhciBTbmFwc2hvdCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4xMDI0O1xudmFyIFBhc3NpdmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjIwNDg7XG52YXIgSHlkcmF0aW5nID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuNDA5NjtcbnZhciBWaXNpYmlsaXR5ID1cbi8qICAgICAgICAgICAgICAgICAgICovXG44MTkyO1xudmFyIFN0b3JlQ29uc2lzdGVuY3kgPVxuLyogICAgICAgICAgICAgKi9cbjE2Mzg0O1xudmFyIExpZmVjeWNsZUVmZmVjdE1hc2sgPSBQYXNzaXZlIHwgVXBkYXRlIHwgQ2FsbGJhY2sgfCBSZWYgfCBTbmFwc2hvdCB8IFN0b3JlQ29uc2lzdGVuY3k7IC8vIFVuaW9uIG9mIGFsbCBjb21taXQgZmxhZ3MgKGZsYWdzIHdpdGggdGhlIGxpZmV0aW1lIG9mIGEgcGFydGljdWxhciBjb21taXQpXG5cbnZhciBIb3N0RWZmZWN0TWFzayA9XG4vKiAgICAgICAgICAgICAgICovXG4zMjc2NzsgLy8gVGhlc2UgYXJlIG5vdCByZWFsbHkgc2lkZSBlZmZlY3RzLCBidXQgd2Ugc3RpbGwgcmV1c2UgdGhpcyBmaWVsZC5cblxudmFyIEluY29tcGxldGUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjMyNzY4O1xudmFyIFNob3VsZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgKi9cbjY1NTM2O1xudmFyIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UgPVxuLyogKi9cbjEzMTA3MjtcbnZhciBGb3JrZWQgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4xMDQ4NTc2OyAvLyBTdGF0aWMgdGFncyBkZXNjcmliZSBhc3BlY3RzIG9mIGEgZmliZXIgdGhhdCBhcmUgbm90IHNwZWNpZmljIHRvIGEgcmVuZGVyLFxuLy8gZS5nLiBhIGZpYmVyIHVzZXMgYSBwYXNzaXZlIGVmZmVjdCAoZXZlbiBpZiB0aGVyZSBhcmUgbm8gdXBkYXRlcyBvbiB0aGlzIHBhcnRpY3VsYXIgcmVuZGVyKS5cbi8vIFRoaXMgZW5hYmxlcyB1cyB0byBkZWZlciBtb3JlIHdvcmsgaW4gdGhlIHVubW91bnQgY2FzZSxcbi8vIHNpbmNlIHdlIGNhbiBkZWZlciB0cmF2ZXJzaW5nIHRoZSB0cmVlIGR1cmluZyBsYXlvdXQgdG8gbG9vayBmb3IgUGFzc2l2ZSBlZmZlY3RzLFxuLy8gYW5kIGluc3RlYWQgcmVseSBvbiB0aGUgc3RhdGljIGZsYWcgYXMgYSBzaWduYWwgdGhhdCB0aGVyZSBtYXkgYmUgY2xlYW51cCB3b3JrLlxuXG52YXIgUmVmU3RhdGljID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMjA5NzE1MjtcbnZhciBMYXlvdXRTdGF0aWMgPVxuLyogICAgICAgICAgICAgICAgICovXG40MTk0MzA0O1xudmFyIFBhc3NpdmVTdGF0aWMgPVxuLyogICAgICAgICAgICAgICAgKi9cbjgzODg2MDg7IC8vIFRoZXNlIGZsYWdzIGFsbG93IHVzIHRvIHRyYXZlcnNlIHRvIGZpYmVycyB0aGF0IGhhdmUgZWZmZWN0cyBvbiBtb3VudFxuLy8gd2l0aG91dCB0cmF2ZXJzaW5nIHRoZSBlbnRpcmUgdHJlZSBhZnRlciBldmVyeSBjb21taXQgZm9yXG4vLyBkb3VibGUgaW52b2tpbmdcblxudmFyIE1vdW50TGF5b3V0RGV2ID1cbi8qICAgICAgICAgICAgICAgKi9cbjE2Nzc3MjE2O1xudmFyIE1vdW50UGFzc2l2ZURldiA9XG4vKiAgICAgICAgICAgICAgKi9cbjMzNTU0NDMyOyAvLyBHcm91cHMgb2YgZmxhZ3MgdGhhdCBhcmUgdXNlZCBpbiB0aGUgY29tbWl0IHBoYXNlIHRvIHNraXAgb3ZlciB0cmVlcyB0aGF0XG4vLyBkb24ndCBjb250YWluIGVmZmVjdHMsIGJ5IGNoZWNraW5nIHN1YnRyZWVGbGFncy5cblxudmFyIEJlZm9yZU11dGF0aW9uTWFzayA9IC8vIFRPRE86IFJlbW92ZSBVcGRhdGUgZmxhZyBmcm9tIGJlZm9yZSBtdXRhdGlvbiBwaGFzZSBieSByZS1sYW5kaW5nIFZpc2liaWxpdHlcbi8vIGZsYWcgbG9naWMgKHNlZSAjMjAwNDMpXG5VcGRhdGUgfCBTbmFwc2hvdCB8ICggMCk7XG52YXIgTXV0YXRpb25NYXNrID0gUGxhY2VtZW50IHwgVXBkYXRlIHwgQ2hpbGREZWxldGlvbiB8IENvbnRlbnRSZXNldCB8IFJlZiB8IEh5ZHJhdGluZyB8IFZpc2liaWxpdHk7XG52YXIgTGF5b3V0TWFzayA9IFVwZGF0ZSB8IENhbGxiYWNrIHwgUmVmIHwgVmlzaWJpbGl0eTsgLy8gVE9ETzogU3BsaXQgaW50byBQYXNzaXZlTW91bnRNYXNrIGFuZCBQYXNzaXZlVW5tb3VudE1hc2tcblxudmFyIFBhc3NpdmVNYXNrID0gUGFzc2l2ZSB8IENoaWxkRGVsZXRpb247IC8vIFVuaW9uIG9mIHRhZ3MgdGhhdCBkb24ndCBnZXQgcmVzZXQgb24gY2xvbmVzLlxuLy8gVGhpcyBhbGxvd3MgY2VydGFpbiBjb25jZXB0cyB0byBwZXJzaXN0IHdpdGhvdXQgcmVjYWxjdWxhdGluZyB0aGVtLFxuLy8gZS5nLiB3aGV0aGVyIGEgc3VidHJlZSBjb250YWlucyBwYXNzaXZlIGVmZmVjdHMgb3IgcG9ydGFscy5cblxudmFyIFN0YXRpY01hc2sgPSBMYXlvdXRTdGF0aWMgfCBQYXNzaXZlU3RhdGljIHwgUmVmU3RhdGljO1xuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbmZ1bmN0aW9uIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpIHtcbiAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgdmFyIG5lYXJlc3RNb3VudGVkID0gZmliZXI7XG5cbiAgaWYgKCFmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoaXMgbWlnaHQgYmUgYSBuZXcgdHJlZSB0aGF0IGlzbid0IGluc2VydGVkXG4gICAgLy8geWV0LiBJZiBpdCBpcywgdGhlbiBpdCB3aWxsIGhhdmUgYSBwZW5kaW5nIGluc2VydGlvbiBlZmZlY3Qgb24gaXQuXG4gICAgdmFyIG5leHROb2RlID0gbm9kZTtcblxuICAgIGRvIHtcbiAgICAgIG5vZGUgPSBuZXh0Tm9kZTtcblxuICAgICAgaWYgKChub2RlLmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uIG9yIGluLXByb2dyZXNzIGh5ZHJhdGlvbi4gVGhlIG5lYXJlc3QgcG9zc2libGVcbiAgICAgICAgLy8gbW91bnRlZCBmaWJlciBpcyB0aGUgcGFyZW50IGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIGZpZ3VyZSBvdXRcbiAgICAgICAgLy8gaWYgdGhhdCBvbmUgaXMgc3RpbGwgbW91bnRlZC5cbiAgICAgICAgbmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dE5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChuZXh0Tm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKG5vZGUucmV0dXJuKSB7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgd2FzIGEgbmVzdGVkIEhvc3RSb290IHdoZW4gdXNlZCB3aXRoXG4gICAgLy8gcmVuZGVyQ29udGFpbmVySW50b1N1YnRyZWUuXG4gICAgcmV0dXJuIG5lYXJlc3RNb3VudGVkO1xuICB9IC8vIElmIHdlIGRpZG4ndCBoaXQgdGhlIHJvb3QsIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSBpbiBhbiBkaXNjb25uZWN0ZWQgdHJlZVxuICAvLyB0aGF0IGhhcyBiZWVuIHVubW91bnRlZC5cblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihmaWJlcikge1xuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5lckZyb21GaWJlcihmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Um9vdCA/IGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGlzRmliZXJNb3VudGVkKGZpYmVyKSB7XG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5mdW5jdGlvbiBpc01vdW50ZWQoY29tcG9uZW50KSB7XG4gIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKCFpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIGFjY2Vzc2luZyBpc01vdW50ZWQgaW5zaWRlIGl0cyByZW5kZXIoKSBmdW5jdGlvbi4gJyArICdyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkICcgKyAnbmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgJyArICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIob3duZXJGaWJlcikgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgaWYgKCFmaWJlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGFzc2VydElzTW91bnRlZChmaWJlcikge1xuICBpZiAoZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgIT09IGZpYmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoIWFsdGVybmF0ZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhlbiB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgbW91bnRlZC5cbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKTtcblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuJyk7XG4gICAgfVxuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBmaWJlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIElmIHdlIGhhdmUgdHdvIHBvc3NpYmxlIGJyYW5jaGVzLCB3ZSdsbCB3YWxrIGJhY2t3YXJkcyB1cCB0byB0aGUgcm9vdFxuICAvLyB0byBzZWUgd2hhdCBwYXRoIHRoZSByb290IHBvaW50cyB0by4gT24gdGhlIHdheSB3ZSBtYXkgaGl0IG9uZSBvZiB0aGVcbiAgLy8gc3BlY2lhbCBjYXNlcyBhbmQgd2UnbGwgZGVhbCB3aXRoIHRoZW0uXG5cblxuICB2YXIgYSA9IGZpYmVyO1xuICB2YXIgYiA9IGFsdGVybmF0ZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRBID0gYS5yZXR1cm47XG5cbiAgICBpZiAocGFyZW50QSA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgYXQgdGhlIHJvb3QuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50QiA9IHBhcmVudEEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKHBhcmVudEIgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGlzIG5vIGFsdGVybmF0ZS4gVGhpcyBpcyBhbiB1bnVzdWFsIGNhc2UuIEN1cnJlbnRseSwgaXQgb25seVxuICAgICAgLy8gaGFwcGVucyB3aGVuIGEgU3VzcGVuc2UgY29tcG9uZW50IGlzIGhpZGRlbi4gQW4gZXh0cmEgZnJhZ21lbnQgZmliZXJcbiAgICAgIC8vIGlzIGluc2VydGVkIGluIGJldHdlZW4gdGhlIFN1c3BlbnNlIGZpYmVyIGFuZCBpdHMgY2hpbGRyZW4uIFNraXBcbiAgICAgIC8vIG92ZXIgdGhpcyBleHRyYSBmcmFnbWVudCBmaWJlciBhbmQgcHJvY2VlZCB0byB0aGUgbmV4dCBwYXJlbnQuXG4gICAgICB2YXIgbmV4dFBhcmVudCA9IHBhcmVudEEucmV0dXJuO1xuXG4gICAgICBpZiAobmV4dFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBhID0gYiA9IG5leHRQYXJlbnQ7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBJZiB0aGVyZSdzIG5vIHBhcmVudCwgd2UncmUgYXQgdGhlIHJvb3QuXG5cblxuICAgICAgYnJlYWs7XG4gICAgfSAvLyBJZiBib3RoIGNvcGllcyBvZiB0aGUgcGFyZW50IGZpYmVyIHBvaW50IHRvIHRoZSBzYW1lIGNoaWxkLCB3ZSBjYW5cbiAgICAvLyBhc3N1bWUgdGhhdCB0aGUgY2hpbGQgaXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW4gd2UgYmFpbG91dCBvbiBsb3dcbiAgICAvLyBwcmlvcml0eTogdGhlIGJhaWxlZCBvdXQgZmliZXIncyBjaGlsZCByZXVzZXMgdGhlIGN1cnJlbnQgY2hpbGQuXG5cblxuICAgIGlmIChwYXJlbnRBLmNoaWxkID09PSBwYXJlbnRCLmNoaWxkKSB7XG4gICAgICB2YXIgY2hpbGQgPSBwYXJlbnRBLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkID09PSBhKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQiBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBhbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9IC8vIFdlIHNob3VsZCBuZXZlciBoYXZlIGFuIGFsdGVybmF0ZSBmb3IgYW55IG1vdW50aW5nIG5vZGUuIFNvIHRoZSBvbmx5XG4gICAgICAvLyB3YXkgdGhpcyBjb3VsZCBwb3NzaWJseSBoYXBwZW4gaXMgaWYgdGhpcyB3YXMgdW5tb3VudGVkLCBpZiBhdCBhbGwuXG5cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuJyk7XG4gICAgfVxuXG4gICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVyIG9mIEEgYW5kIHRoZSByZXR1cm4gcG9pbnRlciBvZiBCIHBvaW50IHRvIGRpZmZlcmVudFxuICAgICAgLy8gZmliZXJzLiBXZSBhc3N1bWUgdGhhdCByZXR1cm4gcG9pbnRlcnMgbmV2ZXIgY3Jpc3MtY3Jvc3MsIHNvIEEgbXVzdFxuICAgICAgLy8gYmVsb25nIHRvIHRoZSBjaGlsZCBzZXQgb2YgQS5yZXR1cm4sIGFuZCBCIG11c3QgYmVsb25nIHRvIHRoZSBjaGlsZFxuICAgICAgLy8gc2V0IG9mIEIucmV0dXJuLlxuICAgICAgYSA9IHBhcmVudEE7XG4gICAgICBiID0gcGFyZW50QjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVycyBwb2ludCB0byB0aGUgc2FtZSBmaWJlci4gV2UnbGwgaGF2ZSB0byB1c2UgdGhlXG4gICAgICAvLyBkZWZhdWx0LCBzbG93IHBhdGg6IHNjYW4gdGhlIGNoaWxkIHNldHMgb2YgZWFjaCBwYXJlbnQgYWx0ZXJuYXRlIHRvIHNlZVxuICAgICAgLy8gd2hpY2ggY2hpbGQgYmVsb25ncyB0byB3aGljaCBzZXQuXG4gICAgICAvL1xuICAgICAgLy8gU2VhcmNoIHBhcmVudCBBJ3MgY2hpbGQgc2V0XG4gICAgICB2YXIgZGlkRmluZENoaWxkID0gZmFsc2U7XG4gICAgICB2YXIgX2NoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgIC8vIFNlYXJjaCBwYXJlbnQgQidzIGNoaWxkIHNldFxuICAgICAgICBfY2hpbGQgPSBwYXJlbnRCLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2hpbGQgd2FzIG5vdCBmb3VuZCBpbiBlaXRoZXIgcGFyZW50IHNldC4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgJyArICdpbiBSZWFjdCByZWxhdGVkIHRvIHRoZSByZXR1cm4gcG9pbnRlci4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYS5hbHRlcm5hdGUgIT09IGIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlJldHVybiBmaWJlcnMgc2hvdWxkIGFsd2F5cyBiZSBlYWNoIG90aGVycycgYWx0ZXJuYXRlcy4gXCIgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH0gLy8gSWYgdGhlIHJvb3QgaXMgbm90IGEgaG9zdCBjb250YWluZXIsIHdlJ3JlIGluIGEgZGlzY29ubmVjdGVkIHRyZWUuIEkuZS5cbiAgLy8gdW5tb3VudGVkLlxuXG5cbiAgaWYgKGEudGFnICE9PSBIb3N0Um9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LicpO1xuICB9XG5cbiAgaWYgKGEuc3RhdGVOb2RlLmN1cnJlbnQgPT09IGEpIHtcbiAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgcmV0dXJuIGZpYmVyO1xuICB9IC8vIE90aGVyd2lzZSBCIGhhcyB0byBiZSBjdXJyZW50IGJyYW5jaC5cblxuXG4gIHJldHVybiBhbHRlcm5hdGU7XG59XG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcihwYXJlbnQpIHtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuICByZXR1cm4gY3VycmVudFBhcmVudCAhPT0gbnVsbCA/IGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChjdXJyZW50UGFyZW50KSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChub2RlKSB7XG4gIC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgdmFyIG1hdGNoID0gZmluZEN1cnJlbnRIb3N0RmliZXJJbXBsKGNoaWxkKTtcblxuICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH1cblxuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcbiAgcmV0dXJuIGN1cnJlbnRQYXJlbnQgIT09IG51bGwgPyBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHNJbXBsKGN1cnJlbnRQYXJlbnQpIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzSW1wbChub2RlKSB7XG4gIC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG4gIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgaWYgKGNoaWxkLnRhZyAhPT0gSG9zdFBvcnRhbCkge1xuICAgICAgdmFyIG1hdGNoID0gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzSW1wbChjaGlsZCk7XG5cbiAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIFRoaXMgbW9kdWxlIG9ubHkgZXhpc3RzIGFzIGFuIEVTTSB3cmFwcGVyIGFyb3VuZCB0aGUgZXh0ZXJuYWwgQ29tbW9uSlNcbnZhciBzY2hlZHVsZUNhbGxiYWNrID0gU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s7XG52YXIgY2FuY2VsQ2FsbGJhY2sgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s7XG52YXIgc2hvdWxkWWllbGQgPSBTY2hlZHVsZXIudW5zdGFibGVfc2hvdWxkWWllbGQ7XG52YXIgcmVxdWVzdFBhaW50ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3JlcXVlc3RQYWludDtcbnZhciBub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xudmFyIGdldEN1cnJlbnRQcmlvcml0eUxldmVsID0gU2NoZWR1bGVyLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsO1xudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5O1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5O1xudmFyIE5vcm1hbFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5O1xudmFyIExvd1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0xvd1ByaW9yaXR5O1xudmFyIElkbGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JZGxlUHJpb3JpdHk7XG4vLyB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3Qgb24gdGhlIHNjaGVkdWxlciwgYnV0IGl0ICpkb2VzKlxuLy8gb24gc2NoZWR1bGVyL3Vuc3RhYmxlX21vY2ssIHdoaWNoIHdlJ2xsIG5lZWQgZm9yIGludGVybmFsIHRlc3RpbmdcbnZhciB1bnN0YWJsZV95aWVsZFZhbHVlID0gU2NoZWR1bGVyLnVuc3RhYmxlX3lpZWxkVmFsdWU7XG52YXIgdW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWUgPSBTY2hlZHVsZXIudW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWU7XG5cbnZhciByZW5kZXJlcklEID0gbnVsbDtcbnZhciBpbmplY3RlZEhvb2sgPSBudWxsO1xudmFyIGluamVjdGVkUHJvZmlsaW5nSG9va3MgPSBudWxsO1xudmFyIGhhc0xvZ2dlZEVycm9yID0gZmFsc2U7XG52YXIgaXNEZXZUb29sc1ByZXNlbnQgPSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGluamVjdEludGVybmFscyhpbnRlcm5hbHMpIHtcbiAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gTm8gRGV2VG9vbHNcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgaG9vayA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICBpZiAoaG9vay5pc0Rpc2FibGVkKSB7XG4gICAgLy8gVGhpcyBpc24ndCBhIHJlYWwgcHJvcGVydHkgb24gdGhlIGhvb2ssIGJ1dCBpdCBjYW4gYmUgc2V0IHRvIG9wdCBvdXRcbiAgICAvLyBvZiBEZXZUb29scyBpbnRlZ3JhdGlvbiBhbmQgYXNzb2NpYXRlZCB3YXJuaW5ncyBhbmQgbG9ncy5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzM4NzdcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaG9vay5zdXBwb3J0c0ZpYmVyKSB7XG4gICAge1xuICAgICAgZXJyb3IoJ1RoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBSZWFjdCBEZXZUb29scyBpcyB0b28gb2xkIGFuZCB3aWxsIG5vdCB3b3JrICcgKyAnd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFJlYWN0LiBQbGVhc2UgdXBkYXRlIFJlYWN0IERldlRvb2xzLiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scycpO1xuICAgIH0gLy8gRGV2VG9vbHMgZXhpc3RzLCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IHN1cHBvcnQgRmliZXIuXG5cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoZW5hYmxlU2NoZWR1bGluZ1Byb2ZpbGVyKSB7XG4gICAgICAvLyBDb25kaXRpb25hbGx5IGluamVjdCB0aGVzZSBob29rcyBvbmx5IGlmIFRpbWVsaW5lIHByb2ZpbGVyIGlzIHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkLlxuICAgICAgLy8gVGhpcyBnaXZlcyBEZXZUb29scyBhIHdheSB0byBmZWF0dXJlIGRldGVjdCB0aGF0IGlzbid0IHRpZWQgdG8gdmVyc2lvbiBudW1iZXJcbiAgICAgIC8vIChzaW5jZSBwcm9maWxpbmcgYW5kIHRpbWVsaW5lIGFyZSBjb250cm9sbGVkIGJ5IGRpZmZlcmVudCBmZWF0dXJlIGZsYWdzKS5cbiAgICAgIGludGVybmFscyA9IGFzc2lnbih7fSwgaW50ZXJuYWxzLCB7XG4gICAgICAgIGdldExhbmVMYWJlbE1hcDogZ2V0TGFuZUxhYmVsTWFwLFxuICAgICAgICBpbmplY3RQcm9maWxpbmdIb29rczogaW5qZWN0UHJvZmlsaW5nSG9va3NcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcmVySUQgPSBob29rLmluamVjdChpbnRlcm5hbHMpOyAvLyBXZSBoYXZlIHN1Y2Nlc3NmdWxseSBpbmplY3RlZCwgc28gbm93IGl0IGlzIHNhZmUgdG8gc2V0IHVwIGhvb2tzLlxuXG4gICAgaW5qZWN0ZWRIb29rID0gaG9vaztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQ2F0Y2ggYWxsIGVycm9ycyBiZWNhdXNlIGl0IGlzIHVuc2FmZSB0byB0aHJvdyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMuJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaG9vay5jaGVja0RDRSkge1xuICAgIC8vIFRoaXMgaXMgdGhlIHJlYWwgRGV2VG9vbHMuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBsaWtlbHkgYSBob29rIGluc3RhbGxlZCBieSBGYXN0IFJlZnJlc2ggcnVudGltZS5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIG9uU2NoZWR1bGVSb290KHJvb3QsIGNoaWxkcmVuKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgY2hpbGRyZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICggIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvbkNvbW1pdFJvb3Qocm9vdCwgZXZlbnRQcmlvcml0eSkge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGRpZEVycm9yID0gKHJvb3QuY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBEaWRDYXB0dXJlO1xuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHk7XG5cbiAgICAgICAgc3dpdGNoIChldmVudFByaW9yaXR5KSB7XG4gICAgICAgICAgY2FzZSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IEltbWVkaWF0ZVByaW9yaXR5O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIENvbnRpbnVvdXNFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHkgPSBVc2VyQmxvY2tpbmdQcmlvcml0eTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBEZWZhdWx0RXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgSWRsZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IElkbGVQcmlvcml0eTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCBzY2hlZHVsZXJQcmlvcml0eSwgZGlkRXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIHVuZGVmaW5lZCwgZGlkRXJyb3IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAge1xuICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvblBvc3RDb21taXRSb290KHJvb3QpIHtcbiAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uUG9zdENvbW1pdEZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbmplY3RlZEhvb2sub25Qb3N0Q29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAge1xuICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvbkNvbW1pdFVubW91bnQoZmliZXIpIHtcbiAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudChyZW5kZXJlcklELCBmaWJlcik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKG5ld0lzU3RyaWN0TW9kZSkge1xuICB7XG4gICAgaWYgKHR5cGVvZiB1bnN0YWJsZV95aWVsZFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdyZSBpbiBhIHRlc3QgYmVjYXVzZSBTY2hlZHVsZXIudW5zdGFibGVfeWllbGRWYWx1ZSBvbmx5IGV4aXN0c1xuICAgICAgLy8gaW4gU2NoZWR1bGVyTW9jay4gVG8gcmVkdWNlIHRoZSBub2lzZSBpbiBzdHJpY3QgbW9kZSB0ZXN0cyxcbiAgICAgIC8vIHN1cHByZXNzIHdhcm5pbmdzIGFuZCBkaXNhYmxlIHNjaGVkdWxlciB5aWVsZGluZyBkdXJpbmcgdGhlIGRvdWJsZSByZW5kZXJcbiAgICAgIHVuc3RhYmxlX3NldERpc2FibGVZaWVsZFZhbHVlKG5ld0lzU3RyaWN0TW9kZSk7XG4gICAgICBzZXRTdXBwcmVzc1dhcm5pbmcobmV3SXNTdHJpY3RNb2RlKTtcbiAgICB9XG5cbiAgICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2suc2V0U3RyaWN0TW9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLnNldFN0cmljdE1vZGUocmVuZGVyZXJJRCwgbmV3SXNTdHJpY3RNb2RlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIFByb2ZpbGVyIEFQSSBob29rc1xuXG5mdW5jdGlvbiBpbmplY3RQcm9maWxpbmdIb29rcyhwcm9maWxpbmdIb29rcykge1xuICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzID0gcHJvZmlsaW5nSG9va3M7XG59XG5cbmZ1bmN0aW9uIGdldExhbmVMYWJlbE1hcCgpIHtcbiAge1xuICAgIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gICAgdmFyIGxhbmUgPSAxO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IFRvdGFsTGFuZXM7IGluZGV4KyspIHtcbiAgICAgIHZhciBsYWJlbCA9IGdldExhYmVsRm9yTGFuZShsYW5lKTtcbiAgICAgIG1hcC5zZXQobGFuZSwgbGFiZWwpO1xuICAgICAgbGFuZSAqPSAyO1xuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya0NvbW1pdFN0YXJ0ZWQobGFuZXMpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21taXRTdGFydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21taXRTdGFydGVkKGxhbmVzKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtDb21taXRTdG9wcGVkKCkge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbW1pdFN0b3BwZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbW1pdFN0b3BwZWQoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZChmaWJlcik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RhcnRlZChmaWJlcikge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0YXJ0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0YXJ0ZWQoZmliZXIpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQoKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RvcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdE1vdW50U3RvcHBlZCgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RhcnRlZChmaWJlcikge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RhcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdGFydGVkKGZpYmVyKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0b3BwZWQoKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdG9wcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0b3BwZWQoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0YXJ0ZWQoZmliZXIpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0YXJ0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RhcnRlZChmaWJlcik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdG9wcGVkKCkge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RvcHBlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdG9wcGVkKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0YXJ0ZWQoZmliZXIpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0YXJ0ZWQoZmliZXIpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdG9wcGVkKCkge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudExheW91dEVmZmVjdFVubW91bnRTdG9wcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya0NvbXBvbmVudEVycm9yZWQoZmliZXIsIHRocm93blZhbHVlLCBsYW5lcykge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudEVycm9yZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudEVycm9yZWQoZmliZXIsIHRocm93blZhbHVlLCBsYW5lcyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrQ29tcG9uZW50U3VzcGVuZGVkKGZpYmVyLCB3YWtlYWJsZSwgbGFuZXMpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRTdXNwZW5kZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFN1c3BlbmRlZChmaWJlciwgd2FrZWFibGUsIGxhbmVzKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtMYXlvdXRFZmZlY3RzU3RhcnRlZChsYW5lcykge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0xheW91dEVmZmVjdHNTdGFydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtMYXlvdXRFZmZlY3RzU3RhcnRlZChsYW5lcyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrTGF5b3V0RWZmZWN0c1N0b3BwZWQoKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrTGF5b3V0RWZmZWN0c1N0b3BwZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0xheW91dEVmZmVjdHNTdG9wcGVkKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBtYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkKGxhbmVzKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtQYXNzaXZlRWZmZWN0c1N0YXJ0ZWQobGFuZXMpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya1Bhc3NpdmVFZmZlY3RzU3RvcHBlZCgpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtQYXNzaXZlRWZmZWN0c1N0b3BwZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1Bhc3NpdmVFZmZlY3RzU3RvcHBlZCgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpIHtcbiAge1xuICAgIGlmIChpbmplY3RlZFByb2ZpbGluZ0hvb2tzICE9PSBudWxsICYmIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTdGFydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTdGFydGVkKGxhbmVzKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSZW5kZXJZaWVsZGVkKCkge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlcllpZWxkZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlcllpZWxkZWQoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSZW5kZXJTdG9wcGVkKCkge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclN0b3BwZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclN0b3BwZWQoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSZW5kZXJTY2hlZHVsZWQobGFuZSkge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclNjaGVkdWxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU2NoZWR1bGVkKGxhbmUpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gbWFya0ZvcmNlVXBkYXRlU2NoZWR1bGVkKGZpYmVyLCBsYW5lKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAhPT0gbnVsbCAmJiB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrRm9yY2VVcGRhdGVTY2hlZHVsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0ZvcmNlVXBkYXRlU2NoZWR1bGVkKGZpYmVyLCBsYW5lKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSkge1xuICB7XG4gICAgaWYgKGluamVjdGVkUHJvZmlsaW5nSG9va3MgIT09IG51bGwgJiYgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBOb01vZGUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjA7IC8vIFRPRE86IFJlbW92ZSBDb25jdXJyZW50TW9kZSBieSByZWFkaW5nIGZyb20gdGhlIHJvb3QgdGFnIGluc3RlYWRcblxudmFyIENvbmN1cnJlbnRNb2RlID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMTtcbnZhciBQcm9maWxlTW9kZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgU3RyaWN0TGVnYWN5TW9kZSA9XG4vKiAgICAgICAgICAgICAgICovXG44O1xudmFyIFN0cmljdEVmZmVjdHNNb2RlID1cbi8qICAgICAgICAgICAgICAqL1xuMTY7XG5cbi8vIFRPRE86IFRoaXMgaXMgcHJldHR5IHdlbGwgc3VwcG9ydGVkIGJ5IGJyb3dzZXJzLiBNYXliZSB3ZSBjYW4gZHJvcCBpdC5cbnZhciBjbHozMiA9IE1hdGguY2x6MzIgPyBNYXRoLmNsejMyIDogY2x6MzJGYWxsYmFjazsgLy8gQ291bnQgbGVhZGluZyB6ZXJvcy5cbi8vIEJhc2VkIG9uOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9jbHozMlxuXG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG5cbmZ1bmN0aW9uIGNsejMyRmFsbGJhY2soeCkge1xuICB2YXIgYXNVaW50ID0geCA+Pj4gMDtcblxuICBpZiAoYXNVaW50ID09PSAwKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9XG5cbiAgcmV0dXJuIDMxIC0gKGxvZyhhc1VpbnQpIC8gTE4yIHwgMCkgfCAwO1xufVxuXG4vLyBJZiB0aG9zZSB2YWx1ZXMgYXJlIGNoYW5nZWQgdGhhdCBwYWNrYWdlIHNob3VsZCBiZSByZWJ1aWx0IGFuZCByZWRlcGxveWVkLlxuXG52YXIgVG90YWxMYW5lcyA9IDMxO1xudmFyIE5vTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBOb0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIFN5bmNMYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAqL1xuMjtcbnZhciBJbnB1dENvbnRpbnVvdXNMYW5lID1cbi8qICAgICAgICAgICAgICovXG40O1xudmFyIERlZmF1bHRIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgKi9cbjg7XG52YXIgRGVmYXVsdExhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuMTY7XG52YXIgVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAgICAgKi9cbjMyO1xudmFyIFRyYW5zaXRpb25MYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjQxOTQyNDA7XG52YXIgVHJhbnNpdGlvbkxhbmUxID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjY0O1xudmFyIFRyYW5zaXRpb25MYW5lMiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMjg7XG52YXIgVHJhbnNpdGlvbkxhbmUzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjI1NjtcbnZhciBUcmFuc2l0aW9uTGFuZTQgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuNTEyO1xudmFyIFRyYW5zaXRpb25MYW5lNSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMDI0O1xudmFyIFRyYW5zaXRpb25MYW5lNiA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4yMDQ4O1xudmFyIFRyYW5zaXRpb25MYW5lNyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIFRyYW5zaXRpb25MYW5lOCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG44MTkyO1xudmFyIFRyYW5zaXRpb25MYW5lOSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4xNjM4NDtcbnZhciBUcmFuc2l0aW9uTGFuZTEwID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuMzI3Njg7XG52YXIgVHJhbnNpdGlvbkxhbmUxMSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjY1NTM2O1xudmFyIFRyYW5zaXRpb25MYW5lMTIgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4xMzEwNzI7XG52YXIgVHJhbnNpdGlvbkxhbmUxMyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbjI2MjE0NDtcbnZhciBUcmFuc2l0aW9uTGFuZTE0ID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuNTI0Mjg4O1xudmFyIFRyYW5zaXRpb25MYW5lMTUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4xMDQ4NTc2O1xudmFyIFRyYW5zaXRpb25MYW5lMTYgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4yMDk3MTUyO1xudmFyIFJldHJ5TGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEzMDAyMzQyNDtcbnZhciBSZXRyeUxhbmUxID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuNDE5NDMwNDtcbnZhciBSZXRyeUxhbmUyID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuODM4ODYwODtcbnZhciBSZXRyeUxhbmUzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTY3NzcyMTY7XG52YXIgUmV0cnlMYW5lNCA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjMzNTU0NDMyO1xudmFyIFJldHJ5TGFuZTUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG42NzEwODg2NDtcbnZhciBTb21lUmV0cnlMYW5lID0gUmV0cnlMYW5lMTtcbnZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICovXG4xMzQyMTc3Mjg7XG52YXIgTm9uSWRsZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMjY4NDM1NDU1O1xudmFyIElkbGVIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgICAgKi9cbjI2ODQzNTQ1NjtcbnZhciBJZGxlTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG41MzY4NzA5MTI7XG52YXIgT2Zmc2NyZWVuTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMTA3Mzc0MTgyNDsgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciB0aGUgZXhwZXJpbWVudGFsIHRpbWVsaW5lIChyZWFjdC1kZXZ0b29scy10aW1lbGluZSlcbi8vIEl0IHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgTGFuZXMgdmFsdWVzIGFib3ZlLlxuXG5mdW5jdGlvbiBnZXRMYWJlbEZvckxhbmUobGFuZSkge1xuICB7XG4gICAgaWYgKGxhbmUgJiBTeW5jTGFuZSkge1xuICAgICAgcmV0dXJuICdTeW5jJztcbiAgICB9XG5cbiAgICBpZiAobGFuZSAmIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUpIHtcbiAgICAgIHJldHVybiAnSW5wdXRDb250aW51b3VzSHlkcmF0aW9uJztcbiAgICB9XG5cbiAgICBpZiAobGFuZSAmIElucHV0Q29udGludW91c0xhbmUpIHtcbiAgICAgIHJldHVybiAnSW5wdXRDb250aW51b3VzJztcbiAgICB9XG5cbiAgICBpZiAobGFuZSAmIERlZmF1bHRIeWRyYXRpb25MYW5lKSB7XG4gICAgICByZXR1cm4gJ0RlZmF1bHRIeWRyYXRpb24nO1xuICAgIH1cblxuICAgIGlmIChsYW5lICYgRGVmYXVsdExhbmUpIHtcbiAgICAgIHJldHVybiAnRGVmYXVsdCc7XG4gICAgfVxuXG4gICAgaWYgKGxhbmUgJiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZSkge1xuICAgICAgcmV0dXJuICdUcmFuc2l0aW9uSHlkcmF0aW9uJztcbiAgICB9XG5cbiAgICBpZiAobGFuZSAmIFRyYW5zaXRpb25MYW5lcykge1xuICAgICAgcmV0dXJuICdUcmFuc2l0aW9uJztcbiAgICB9XG5cbiAgICBpZiAobGFuZSAmIFJldHJ5TGFuZXMpIHtcbiAgICAgIHJldHVybiAnUmV0cnknO1xuICAgIH1cblxuICAgIGlmIChsYW5lICYgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZSkge1xuICAgICAgcmV0dXJuICdTZWxlY3RpdmVIeWRyYXRpb24nO1xuICAgIH1cblxuICAgIGlmIChsYW5lICYgSWRsZUh5ZHJhdGlvbkxhbmUpIHtcbiAgICAgIHJldHVybiAnSWRsZUh5ZHJhdGlvbic7XG4gICAgfVxuXG4gICAgaWYgKGxhbmUgJiBJZGxlTGFuZSkge1xuICAgICAgcmV0dXJuICdJZGxlJztcbiAgICB9XG5cbiAgICBpZiAobGFuZSAmIE9mZnNjcmVlbkxhbmUpIHtcbiAgICAgIHJldHVybiAnT2Zmc2NyZWVuJztcbiAgICB9XG4gIH1cbn1cbnZhciBOb1RpbWVzdGFtcCA9IC0xO1xudmFyIG5leHRUcmFuc2l0aW9uTGFuZSA9IFRyYW5zaXRpb25MYW5lMTtcbnZhciBuZXh0UmV0cnlMYW5lID0gUmV0cnlMYW5lMTtcblxuZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgc3dpdGNoIChnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSkge1xuICAgIGNhc2UgU3luY0xhbmU6XG4gICAgICByZXR1cm4gU3luY0xhbmU7XG5cbiAgICBjYXNlIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmU6XG4gICAgICByZXR1cm4gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTtcblxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZTpcbiAgICAgIHJldHVybiBJbnB1dENvbnRpbnVvdXNMYW5lO1xuXG4gICAgY2FzZSBEZWZhdWx0SHlkcmF0aW9uTGFuZTpcbiAgICAgIHJldHVybiBEZWZhdWx0SHlkcmF0aW9uTGFuZTtcblxuICAgIGNhc2UgRGVmYXVsdExhbmU6XG4gICAgICByZXR1cm4gRGVmYXVsdExhbmU7XG5cbiAgICBjYXNlIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lOlxuICAgICAgcmV0dXJuIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lO1xuXG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTI6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTM6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTQ6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTU6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTY6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTc6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTg6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTk6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEwOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMTpcbiAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTI6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEzOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxNDpcbiAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTU6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE2OlxuICAgICAgcmV0dXJuIGxhbmVzICYgVHJhbnNpdGlvbkxhbmVzO1xuXG4gICAgY2FzZSBSZXRyeUxhbmUxOlxuICAgIGNhc2UgUmV0cnlMYW5lMjpcbiAgICBjYXNlIFJldHJ5TGFuZTM6XG4gICAgY2FzZSBSZXRyeUxhbmU0OlxuICAgIGNhc2UgUmV0cnlMYW5lNTpcbiAgICAgIHJldHVybiBsYW5lcyAmIFJldHJ5TGFuZXM7XG5cbiAgICBjYXNlIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU6XG4gICAgICByZXR1cm4gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTtcblxuICAgIGNhc2UgSWRsZUh5ZHJhdGlvbkxhbmU6XG4gICAgICByZXR1cm4gSWRsZUh5ZHJhdGlvbkxhbmU7XG5cbiAgICBjYXNlIElkbGVMYW5lOlxuICAgICAgcmV0dXJuIElkbGVMYW5lO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5MYW5lOlxuICAgICAgcmV0dXJuIE9mZnNjcmVlbkxhbmU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICBlcnJvcignU2hvdWxkIGhhdmUgZm91bmQgbWF0Y2hpbmcgbGFuZXMuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgICB9IC8vIFRoaXMgc2hvdWxkbid0IGJlIHJlYWNoYWJsZSwgYnV0IGFzIGEgZmFsbGJhY2ssIHJldHVybiB0aGUgZW50aXJlIGJpdG1hc2suXG5cblxuICAgICAgcmV0dXJuIGxhbmVzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE5leHRMYW5lcyhyb290LCB3aXBMYW5lcykge1xuICAvLyBFYXJseSBiYWlsb3V0IGlmIHRoZXJlJ3Mgbm8gcGVuZGluZyB3b3JrIGxlZnQuXG4gIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcblxuICBpZiAocGVuZGluZ0xhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH1cblxuICB2YXIgbmV4dExhbmVzID0gTm9MYW5lcztcbiAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcbiAgdmFyIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lczsgLy8gRG8gbm90IHdvcmsgb24gYW55IGlkbGUgd29yayB1bnRpbCBhbGwgdGhlIG5vbi1pZGxlIHdvcmsgaGFzIGZpbmlzaGVkLFxuICAvLyBldmVuIGlmIHRoZSB3b3JrIGlzIHN1c3BlbmRlZC5cblxuICB2YXIgbm9uSWRsZVBlbmRpbmdMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIE5vbklkbGVMYW5lcztcblxuICBpZiAobm9uSWRsZVBlbmRpbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHZhciBub25JZGxlVW5ibG9ja2VkTGFuZXMgPSBub25JZGxlUGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgaWYgKG5vbklkbGVVbmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVVuYmxvY2tlZExhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vbklkbGVQaW5nZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiBwaW5nZWRMYW5lcztcblxuICAgICAgaWYgKG5vbklkbGVQaW5nZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlUGluZ2VkTGFuZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGUgb25seSByZW1haW5pbmcgd29yayBpcyBJZGxlLlxuICAgIHZhciB1bmJsb2NrZWRMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcztcblxuICAgIGlmICh1bmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXModW5ibG9ja2VkTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocGluZ2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGluZ2VkTGFuZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIHJlYWNoYWJsZSBpZiB3ZSdyZSBzdXNwZW5kZWRcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGluIHRoaXMgcGF0aCBpZiBhIGZhbGxiYWNrIHRpbWVyIGlzIG5vdCBzY2hlZHVsZWQuXG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH0gLy8gSWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVuZGVyLCBzd2l0Y2hpbmcgbGFuZXMgd2lsbCBpbnRlcnJ1cHRcbiAgLy8gaXQgYW5kIHdlJ2xsIGxvc2Ugb3VyIHByb2dyZXNzLiBXZSBzaG91bGQgb25seSBkbyB0aGlzIGlmIHRoZSBuZXcgbGFuZXMgYXJlXG4gIC8vIGhpZ2hlciBwcmlvcml0eS5cblxuXG4gIGlmICh3aXBMYW5lcyAhPT0gTm9MYW5lcyAmJiB3aXBMYW5lcyAhPT0gbmV4dExhbmVzICYmIC8vIElmIHdlIGFscmVhZHkgc3VzcGVuZGVkIHdpdGggYSBkZWxheSwgdGhlbiBpbnRlcnJ1cHRpbmcgaXMgZmluZS4gRG9uJ3RcbiAgLy8gYm90aGVyIHdhaXRpbmcgdW50aWwgdGhlIHJvb3QgaXMgY29tcGxldGUuXG4gICh3aXBMYW5lcyAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcykge1xuICAgIHZhciBuZXh0TGFuZSA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobmV4dExhbmVzKTtcbiAgICB2YXIgd2lwTGFuZSA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmUod2lwTGFuZXMpO1xuXG4gICAgaWYgKCAvLyBUZXN0cyB3aGV0aGVyIHRoZSBuZXh0IGxhbmUgaXMgZXF1YWwgb3IgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgd2lwXG4gICAgLy8gb25lLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGJpdHMgZGVjcmVhc2UgaW4gcHJpb3JpdHkgYXMgeW91IGdvIGxlZnQuXG4gICAgbmV4dExhbmUgPj0gd2lwTGFuZSB8fCAvLyBEZWZhdWx0IHByaW9yaXR5IHVwZGF0ZXMgc2hvdWxkIG5vdCBpbnRlcnJ1cHQgdHJhbnNpdGlvbiB1cGRhdGVzLiBUaGVcbiAgICAvLyBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBkZWZhdWx0IHVwZGF0ZXMgYW5kIHRyYW5zaXRpb24gdXBkYXRlcyBpcyB0aGF0XG4gICAgLy8gZGVmYXVsdCB1cGRhdGVzIGRvIG5vdCBzdXBwb3J0IHJlZnJlc2ggdHJhbnNpdGlvbnMuXG4gICAgbmV4dExhbmUgPT09IERlZmF1bHRMYW5lICYmICh3aXBMYW5lICYgVHJhbnNpdGlvbkxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgICAgLy8gS2VlcCB3b3JraW5nIG9uIHRoZSBleGlzdGluZyBpbi1wcm9ncmVzcyB0cmVlLiBEbyBub3QgaW50ZXJydXB0LlxuICAgICAgcmV0dXJuIHdpcExhbmVzO1xuICAgIH1cbiAgfVxuXG4gIGlmICgobmV4dExhbmVzICYgSW5wdXRDb250aW51b3VzTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICAvLyBXaGVuIHVwZGF0ZXMgYXJlIHN5bmMgYnkgZGVmYXVsdCwgd2UgZW50YW5nbGUgY29udGludW91cyBwcmlvcml0eSB1cGRhdGVzXG4gICAgLy8gYW5kIGRlZmF1bHQgdXBkYXRlcywgc28gdGhleSByZW5kZXIgaW4gdGhlIHNhbWUgYmF0Y2guIFRoZSBvbmx5IHJlYXNvblxuICAgIC8vIHRoZXkgdXNlIHNlcGFyYXRlIGxhbmVzIGlzIGJlY2F1c2UgY29udGludW91cyB1cGRhdGVzIHNob3VsZCBpbnRlcnJ1cHRcbiAgICAvLyB0cmFuc2l0aW9ucywgYnV0IGRlZmF1bHQgdXBkYXRlcyBzaG91bGQgbm90LlxuICAgIG5leHRMYW5lcyB8PSBwZW5kaW5nTGFuZXMgJiBEZWZhdWx0TGFuZTtcbiAgfSAvLyBDaGVjayBmb3IgZW50YW5nbGVkIGxhbmVzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmF0Y2guXG4gIC8vXG4gIC8vIEEgbGFuZSBpcyBzYWlkIHRvIGJlIGVudGFuZ2xlZCB3aXRoIGFub3RoZXIgd2hlbiBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlbmRlclxuICAvLyBpbiBhIGJhdGNoIHRoYXQgZG9lcyBub3QgYWxzbyBpbmNsdWRlIHRoZSBvdGhlciBsYW5lLiBUeXBpY2FsbHkgd2UgZG8gdGhpc1xuICAvLyB3aGVuIG11bHRpcGxlIHVwZGF0ZXMgaGF2ZSB0aGUgc2FtZSBzb3VyY2UsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gcmVzcG9uZCB0b1xuICAvLyB0aGUgbW9zdCByZWNlbnQgZXZlbnQgZnJvbSB0aGF0IHNvdXJjZS5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IHdlIGFwcGx5IGVudGFuZ2xlbWVudHMgKmFmdGVyKiBjaGVja2luZyBmb3IgcGFydGlhbCB3b3JrIGFib3ZlLlxuICAvLyBUaGlzIG1lYW5zIHRoYXQgaWYgYSBsYW5lIGlzIGVudGFuZ2xlZCBkdXJpbmcgYW4gaW50ZXJsZWF2ZWQgZXZlbnQgd2hpbGVcbiAgLy8gaXQncyBhbHJlYWR5IHJlbmRlcmluZywgd2Ugd29uJ3QgaW50ZXJydXB0IGl0LiBUaGlzIGlzIGludGVudGlvbmFsLCBzaW5jZVxuICAvLyBlbnRhbmdsZW1lbnQgaXMgdXN1YWxseSBcImJlc3QgZWZmb3J0XCI6IHdlJ2xsIHRyeSBvdXIgYmVzdCB0byByZW5kZXIgdGhlXG4gIC8vIGxhbmVzIGluIHRoZSBzYW1lIGJhdGNoLCBidXQgaXQncyBub3Qgd29ydGggdGhyb3dpbmcgb3V0IHBhcnRpYWxseVxuICAvLyBjb21wbGV0ZWQgd29yayBpbiBvcmRlciB0byBkbyBpdC5cbiAgLy8gVE9ETzogUmVjb25zaWRlciB0aGlzLiBUaGUgY291bnRlci1hcmd1bWVudCBpcyB0aGF0IHRoZSBwYXJ0aWFsIHdvcmtcbiAgLy8gcmVwcmVzZW50cyBhbiBpbnRlcm1lZGlhdGUgc3RhdGUsIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gc2hvdyB0byB0aGUgdXNlci5cbiAgLy8gQW5kIGJ5IHNwZW5kaW5nIGV4dHJhIHRpbWUgZmluaXNoaW5nIGl0LCB3ZSdyZSBpbmNyZWFzaW5nIHRoZSBhbW91bnQgb2ZcbiAgLy8gdGltZSBpdCB0YWtlcyB0byBzaG93IHRoZSBmaW5hbCBzdGF0ZSwgd2hpY2ggaXMgd2hhdCB0aGV5IGFyZSBhY3R1YWxseVxuICAvLyB3YWl0aW5nIGZvci5cbiAgLy9cbiAgLy8gRm9yIHRob3NlIGV4Y2VwdGlvbnMgd2hlcmUgZW50YW5nbGVtZW50IGlzIHNlbWFudGljYWxseSBpbXBvcnRhbnQsIGxpa2VcbiAgLy8gdXNlTXV0YWJsZVNvdXJjZSwgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHBhcnRpYWwgd29yayBhdCB0aGVcbiAgLy8gdGltZSB3ZSBhcHBseSB0aGUgZW50YW5nbGVtZW50LlxuXG5cbiAgdmFyIGVudGFuZ2xlZExhbmVzID0gcm9vdC5lbnRhbmdsZWRMYW5lcztcblxuICBpZiAoZW50YW5nbGVkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgICB2YXIgbGFuZXMgPSBuZXh0TGFuZXMgJiBlbnRhbmdsZWRMYW5lcztcblxuICAgIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgbmV4dExhbmVzIHw9IGVudGFuZ2xlbWVudHNbaW5kZXhdO1xuICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRMYW5lcztcbn1cbmZ1bmN0aW9uIGdldE1vc3RSZWNlbnRFdmVudFRpbWUocm9vdCwgbGFuZXMpIHtcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBtb3N0UmVjZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICB2YXIgZXZlbnRUaW1lID0gZXZlbnRUaW1lc1tpbmRleF07XG5cbiAgICBpZiAoZXZlbnRUaW1lID4gbW9zdFJlY2VudEV2ZW50VGltZSkge1xuICAgICAgbW9zdFJlY2VudEV2ZW50VGltZSA9IGV2ZW50VGltZTtcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxuXG4gIHJldHVybiBtb3N0UmVjZW50RXZlbnRUaW1lO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpIHtcbiAgc3dpdGNoIChsYW5lKSB7XG4gICAgY2FzZSBTeW5jTGFuZTpcbiAgICBjYXNlIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmU6XG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lOlxuICAgICAgLy8gVXNlciBpbnRlcmFjdGlvbnMgc2hvdWxkIGV4cGlyZSBzbGlnaHRseSBtb3JlIHF1aWNrbHkuXG4gICAgICAvL1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQgYXMgaW4gU2NoZWR1bGVyLmpzLlxuICAgICAgLy8gV2hlbiB3ZSBtYWRlIGl0IGxhcmdlciwgYSBwcm9kdWN0IG1ldHJpYyBpbiB3d3cgcmVncmVzc2VkLCBzdWdnZXN0aW5nXG4gICAgICAvLyB0aGVyZSdzIGEgdXNlciBpbnRlcmFjdGlvbiB0aGF0J3MgYmVpbmcgc3RhcnZlZCBieSBhIHNlcmllcyBvZlxuICAgICAgLy8gc3luY2hyb25vdXMgdXBkYXRlcy4gSWYgdGhhdCB0aGVvcnkgaXMgY29ycmVjdCwgdGhlIHByb3BlciBzb2x1dGlvbiBpc1xuICAgICAgLy8gdG8gZml4IHRoZSBzdGFydmF0aW9uLiBIb3dldmVyLCB0aGlzIHNjZW5hcmlvIHN1cHBvcnRzIHRoZSBpZGVhIHRoYXRcbiAgICAgIC8vIGV4cGlyYXRpb24gdGltZXMgYXJlIGFuIGltcG9ydGFudCBzYWZlZ3VhcmQgd2hlbiBzdGFydmF0aW9uXG4gICAgICAvLyBkb2VzIGhhcHBlbi5cbiAgICAgIHJldHVybiBjdXJyZW50VGltZSArIDI1MDtcblxuICAgIGNhc2UgRGVmYXVsdEh5ZHJhdGlvbkxhbmU6XG4gICAgY2FzZSBEZWZhdWx0TGFuZTpcbiAgICBjYXNlIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUyOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUzOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU0OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU1OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU2OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU3OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU4OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmU5OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMDpcbiAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTE6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEyOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMzpcbiAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTQ6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE1OlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxNjpcbiAgICAgIHJldHVybiBjdXJyZW50VGltZSArIDUwMDA7XG5cbiAgICBjYXNlIFJldHJ5TGFuZTE6XG4gICAgY2FzZSBSZXRyeUxhbmUyOlxuICAgIGNhc2UgUmV0cnlMYW5lMzpcbiAgICBjYXNlIFJldHJ5TGFuZTQ6XG4gICAgY2FzZSBSZXRyeUxhbmU1OlxuICAgICAgLy8gVE9ETzogUmV0cmllcyBzaG91bGQgYmUgYWxsb3dlZCB0byBleHBpcmUgaWYgdGhleSBhcmUgQ1BVIGJvdW5kIGZvclxuICAgICAgLy8gdG9vIGxvbmcsIGJ1dCB3aGVuIEkgbWFkZSB0aGlzIGNoYW5nZSBpdCBjYXVzZWQgYSBzcGlrZSBpbiBicm93c2VyXG4gICAgICAvLyBjcmFzaGVzLiBUaGVyZSBtdXN0IGJlIHNvbWUgb3RoZXIgdW5kZXJseWluZyBidWc7IG5vdCBzdXBlciB1cmdlbnQgYnV0XG4gICAgICAvLyBpZGVhbGx5IHNob3VsZCBmaWd1cmUgb3V0IHdoeSBhbmQgZml4IGl0LiBVbmZvcnR1bmF0ZWx5IHdlIGRvbid0IGhhdmVcbiAgICAgIC8vIGEgcmVwcm8gZm9yIHRoZSBjcmFzaGVzLCBvbmx5IGRldGVjdGVkIHZpYSBwcm9kdWN0aW9uIG1ldHJpY3MuXG4gICAgICByZXR1cm4gTm9UaW1lc3RhbXA7XG5cbiAgICBjYXNlIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU6XG4gICAgY2FzZSBJZGxlSHlkcmF0aW9uTGFuZTpcbiAgICBjYXNlIElkbGVMYW5lOlxuICAgIGNhc2UgT2Zmc2NyZWVuTGFuZTpcbiAgICAgIC8vIEFueXRoaW5nIGlkbGUgcHJpb3JpdHkgb3IgbG93ZXIgc2hvdWxkIG5ldmVyIGV4cGlyZS5cbiAgICAgIHJldHVybiBOb1RpbWVzdGFtcDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIGVycm9yKCdTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIE5vVGltZXN0YW1wO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpIHtcbiAgLy8gVE9ETzogVGhpcyBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIHdlIHlpZWxkLiBXZSBjYW4gb3B0aW1pemUgYnkgc3RvcmluZ1xuICAvLyB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lIG9uIHRoZSByb290LiBUaGVuIHVzZSB0aGF0IHRvIHF1aWNrbHkgYmFpbCBvdXRcbiAgLy8gb2YgdGhpcyBmdW5jdGlvbi5cbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgcGVuZGluZyBsYW5lcyBhbmQgY2hlY2sgaWYgd2UndmUgcmVhY2hlZCB0aGVpclxuICAvLyBleHBpcmF0aW9uIHRpbWUuIElmIHNvLCB3ZSdsbCBhc3N1bWUgdGhlIHVwZGF0ZSBpcyBiZWluZyBzdGFydmVkIGFuZCBtYXJrXG4gIC8vIGl0IGFzIGV4cGlyZWQgdG8gZm9yY2UgaXQgdG8gZmluaXNoLlxuXG4gIHZhciBsYW5lcyA9IHBlbmRpbmdMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciBleHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lc1tpbmRleF07XG5cbiAgICBpZiAoZXhwaXJhdGlvblRpbWUgPT09IE5vVGltZXN0YW1wKSB7XG4gICAgICAvLyBGb3VuZCBhIHBlbmRpbmcgbGFuZSB3aXRoIG5vIGV4cGlyYXRpb24gdGltZS4gSWYgaXQncyBub3Qgc3VzcGVuZGVkLCBvclxuICAgICAgLy8gaWYgaXQncyBwaW5nZWQsIGFzc3VtZSBpdCdzIENQVS1ib3VuZC4gQ29tcHV0ZSBhIG5ldyBleHBpcmF0aW9uIHRpbWVcbiAgICAgIC8vIHVzaW5nIHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICBpZiAoKGxhbmUgJiBzdXNwZW5kZWRMYW5lcykgPT09IE5vTGFuZXMgfHwgKGxhbmUgJiBwaW5nZWRMYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgLy8gQXNzdW1lcyB0aW1lc3RhbXBzIGFyZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuXG4gICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgIC8vIFRoaXMgbGFuZSBleHBpcmVkXG4gICAgICByb290LmV4cGlyZWRMYW5lcyB8PSBsYW5lO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59IC8vIFRoaXMgcmV0dXJucyB0aGUgaGlnaGVzdCBwcmlvcml0eSBwZW5kaW5nIGxhbmVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5XG4vLyBhcmUgc3VzcGVuZGVkLlxuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlQZW5kaW5nTGFuZXMocm9vdCkge1xuICByZXR1cm4gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocm9vdC5wZW5kaW5nTGFuZXMpO1xufVxuZnVuY3Rpb24gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCkge1xuICB2YXIgZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiA9IHJvb3QucGVuZGluZ0xhbmVzICYgfk9mZnNjcmVlbkxhbmU7XG5cbiAgaWYgKGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm4gZXZlcnl0aGluZ0J1dE9mZnNjcmVlbjtcbiAgfVxuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICYgT2Zmc2NyZWVuTGFuZSkge1xuICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuICB9XG5cbiAgcmV0dXJuIE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc1N5bmNMYW5lKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBTeW5jTGFuZSkgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc05vbklkbGVXb3JrKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBOb25JZGxlTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNPbmx5UmV0cmllcyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgUmV0cnlMYW5lcykgPT09IGxhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNPbmx5Tm9uVXJnZW50TGFuZXMobGFuZXMpIHtcbiAgdmFyIFVyZ2VudExhbmVzID0gU3luY0xhbmUgfCBJbnB1dENvbnRpbnVvdXNMYW5lIHwgRGVmYXVsdExhbmU7XG4gIHJldHVybiAobGFuZXMgJiBVcmdlbnRMYW5lcykgPT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgVHJhbnNpdGlvbkxhbmVzKSA9PT0gbGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc0Jsb2NraW5nTGFuZShyb290LCBsYW5lcykge1xuXG4gIHZhciBTeW5jRGVmYXVsdExhbmVzID0gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZSB8IElucHV0Q29udGludW91c0xhbmUgfCBEZWZhdWx0SHlkcmF0aW9uTGFuZSB8IERlZmF1bHRMYW5lO1xuICByZXR1cm4gKGxhbmVzICYgU3luY0RlZmF1bHRMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpbmNsdWRlc0V4cGlyZWRMYW5lKHJvb3QsIGxhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYSBzZXBhcmF0ZSBjaGVjayBmcm9tIGluY2x1ZGVzQmxvY2tpbmdMYW5lIGJlY2F1c2UgYSBsYW5lIGNhblxuICAvLyBleHBpcmUgYWZ0ZXIgYSByZW5kZXIgaGFzIGFscmVhZHkgc3RhcnRlZC5cbiAgcmV0dXJuIChsYW5lcyAmIHJvb3QuZXhwaXJlZExhbmVzKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGlzVHJhbnNpdGlvbkxhbmUobGFuZSkge1xuICByZXR1cm4gKGxhbmUgJiBUcmFuc2l0aW9uTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKSB7XG4gIC8vIEN5Y2xlIHRocm91Z2ggdGhlIGxhbmVzLCBhc3NpZ25pbmcgZWFjaCBuZXcgdHJhbnNpdGlvbiB0byB0aGUgbmV4dCBsYW5lLlxuICAvLyBJbiBtb3N0IGNhc2VzLCB0aGlzIG1lYW5zIGV2ZXJ5IHRyYW5zaXRpb24gZ2V0cyBpdHMgb3duIGxhbmUsIHVudGlsIHdlXG4gIC8vIHJ1biBvdXQgb2YgbGFuZXMgYW5kIGN5Y2xlIGJhY2sgdG8gdGhlIGJlZ2lubmluZy5cbiAgdmFyIGxhbmUgPSBuZXh0VHJhbnNpdGlvbkxhbmU7XG4gIG5leHRUcmFuc2l0aW9uTGFuZSA8PD0gMTtcblxuICBpZiAoKG5leHRUcmFuc2l0aW9uTGFuZSAmIFRyYW5zaXRpb25MYW5lcykgPT09IE5vTGFuZXMpIHtcbiAgICBuZXh0VHJhbnNpdGlvbkxhbmUgPSBUcmFuc2l0aW9uTGFuZTE7XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGNsYWltTmV4dFJldHJ5TGFuZSgpIHtcbiAgdmFyIGxhbmUgPSBuZXh0UmV0cnlMYW5lO1xuICBuZXh0UmV0cnlMYW5lIDw8PSAxO1xuXG4gIGlmICgobmV4dFJldHJ5TGFuZSAmIFJldHJ5TGFuZXMpID09PSBOb0xhbmVzKSB7XG4gICAgbmV4dFJldHJ5TGFuZSA9IFJldHJ5TGFuZTE7XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpIHtcbiAgcmV0dXJuIGxhbmVzICYgLWxhbmVzO1xufVxuZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmUobGFuZXMpIHtcbiAgLy8gVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGdldHMgaW5saW5lZC4gT25seSBleGlzdHMgc28gdG8gY29tbXVuaWNhdGUgdGhhdCBpdFxuICAvLyBkb2Vzbid0IG1hdHRlciB3aGljaCBiaXQgaXMgc2VsZWN0ZWQ7IHlvdSBjYW4gcGljayBhbnkgYml0IHdpdGhvdXRcbiAgLy8gYWZmZWN0aW5nIHRoZSBhbGdvcml0aG1zIHdoZXJlIGl0cyB1c2VkLiBIZXJlIEknbSB1c2luZ1xuICAvLyBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lIGJlY2F1c2UgaXQgcmVxdWlyZXMgdGhlIGZld2VzdCBvcGVyYXRpb25zLlxuICByZXR1cm4gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpIHtcbiAgcmV0dXJuIDMxIC0gY2x6MzIobGFuZXMpO1xufVxuXG5mdW5jdGlvbiBsYW5lVG9JbmRleChsYW5lKSB7XG4gIHJldHVybiBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmUpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlc1NvbWVMYW5lKGEsIGIpIHtcbiAgcmV0dXJuIChhICYgYikgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpc1N1YnNldE9mTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgcmV0dXJuIChzZXQgJiBzdWJzZXQpID09PSBzdWJzZXQ7XG59XG5mdW5jdGlvbiBtZXJnZUxhbmVzKGEsIGIpIHtcbiAgcmV0dXJuIGEgfCBiO1xufVxuZnVuY3Rpb24gcmVtb3ZlTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgcmV0dXJuIHNldCAmIH5zdWJzZXQ7XG59XG5mdW5jdGlvbiBpbnRlcnNlY3RMYW5lcyhhLCBiKSB7XG4gIHJldHVybiBhICYgYjtcbn0gLy8gU2VlbXMgcmVkdW5kYW50LCBidXQgaXQgY2hhbmdlcyB0aGUgdHlwZSBmcm9tIGEgc2luZ2xlIGxhbmUgKHVzZWQgZm9yXG4vLyB1cGRhdGVzKSB0byBhIGdyb3VwIG9mIGxhbmVzICh1c2VkIGZvciBmbHVzaGluZyB3b3JrKS5cblxuZnVuY3Rpb24gbGFuZVRvTGFuZXMobGFuZSkge1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGhpZ2hlclByaW9yaXR5TGFuZShhLCBiKSB7XG4gIC8vIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYml0IHJhbmdlcyBkZWNyZWFzZSBpbiBwcmlvcml0eSBhcyB5b3UgZ28gbGVmdC5cbiAgcmV0dXJuIGEgIT09IE5vTGFuZSAmJiBhIDwgYiA/IGEgOiBiO1xufVxuZnVuY3Rpb24gY3JlYXRlTGFuZU1hcChpbml0aWFsKSB7XG4gIC8vIEludGVudGlvbmFsbHkgcHVzaGluZyBvbmUgYnkgb25lLlxuICAvLyBodHRwczovL3Y4LmRldi9ibG9nL2VsZW1lbnRzLWtpbmRzI2F2b2lkLWNyZWF0aW5nLWhvbGVzXG4gIHZhciBsYW5lTWFwID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBUb3RhbExhbmVzOyBpKyspIHtcbiAgICBsYW5lTWFwLnB1c2goaW5pdGlhbCk7XG4gIH1cblxuICByZXR1cm4gbGFuZU1hcDtcbn1cbmZ1bmN0aW9uIG1hcmtSb290VXBkYXRlZChyb290LCB1cGRhdGVMYW5lLCBldmVudFRpbWUpIHtcbiAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gdXBkYXRlTGFuZTsgLy8gSWYgdGhlcmUgYXJlIGFueSBzdXNwZW5kZWQgdHJhbnNpdGlvbnMsIGl0J3MgcG9zc2libGUgdGhpcyBuZXcgdXBkYXRlXG4gIC8vIGNvdWxkIHVuYmxvY2sgdGhlbS4gQ2xlYXIgdGhlIHN1c3BlbmRlZCBsYW5lcyBzbyB0aGF0IHdlIGNhbiB0cnkgcmVuZGVyaW5nXG4gIC8vIHRoZW0gYWdhaW4uXG4gIC8vXG4gIC8vIFRPRE86IFdlIHJlYWxseSBvbmx5IG5lZWQgdG8gdW5zdXNwZW5kIG9ubHkgbGFuZXMgdGhhdCBhcmUgaW4gdGhlXG4gIC8vIGBzdWJ0cmVlTGFuZXNgIG9mIHRoZSB1cGRhdGVkIGZpYmVyLCBvciB0aGUgdXBkYXRlIGxhbmVzIG9mIHRoZSByZXR1cm5cbiAgLy8gcGF0aC4gVGhpcyB3b3VsZCBleGNsdWRlIHN1c3BlbmRlZCB1cGRhdGVzIGluIGFuIHVucmVsYXRlZCBzaWJsaW5nIHRyZWUsXG4gIC8vIHNpbmNlIHRoZXJlJ3Mgbm8gd2F5IGZvciB0aGlzIHVwZGF0ZSB0byB1bmJsb2NrIGl0LlxuICAvL1xuICAvLyBXZSBkb24ndCBkbyB0aGlzIGlmIHRoZSBpbmNvbWluZyB1cGRhdGUgaXMgaWRsZSwgYmVjYXVzZSB3ZSBuZXZlciBwcm9jZXNzXG4gIC8vIGlkbGUgdXBkYXRlcyB1bnRpbCBhZnRlciBhbGwgdGhlIHJlZ3VsYXIgdXBkYXRlcyBoYXZlIGZpbmlzaGVkOyB0aGVyZSdzIG5vXG4gIC8vIHdheSBpdCBjb3VsZCB1bmJsb2NrIGEgdHJhbnNpdGlvbi5cblxuICBpZiAodXBkYXRlTGFuZSAhPT0gSWRsZUxhbmUpIHtcbiAgICByb290LnN1c3BlbmRlZExhbmVzID0gTm9MYW5lcztcbiAgICByb290LnBpbmdlZExhbmVzID0gTm9MYW5lcztcbiAgfVxuXG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgaW5kZXggPSBsYW5lVG9JbmRleCh1cGRhdGVMYW5lKTsgLy8gV2UgY2FuIGFsd2F5cyBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdGltZXN0YW1wIGJlY2F1c2Ugd2UgcHJlZmVyIHRoZSBtb3N0XG4gIC8vIHJlY2VudCBldmVudCwgYW5kIHdlIGFzc3VtZSB0aW1lIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cblxuICBldmVudFRpbWVzW2luZGV4XSA9IGV2ZW50VGltZTtcbn1cbmZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIHN1c3BlbmRlZExhbmVzKSB7XG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzOyAvLyBUaGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBubyBsb25nZXIgQ1BVLWJvdW5kLiBDbGVhciB0aGVpciBleHBpcmF0aW9uIHRpbWVzLlxuXG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcztcbiAgdmFyIGxhbmVzID0gc3VzcGVuZGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzLCBldmVudFRpbWUpIHtcbiAgcm9vdC5waW5nZWRMYW5lcyB8PSByb290LnN1c3BlbmRlZExhbmVzICYgcGluZ2VkTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrUm9vdEZpbmlzaGVkKHJvb3QsIHJlbWFpbmluZ0xhbmVzKSB7XG4gIHZhciBub0xvbmdlclBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgfnJlbWFpbmluZ0xhbmVzO1xuICByb290LnBlbmRpbmdMYW5lcyA9IHJlbWFpbmluZ0xhbmVzOyAvLyBMZXQncyB0cnkgZXZlcnl0aGluZyBhZ2FpblxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSBOb0xhbmVzO1xuICByb290LnBpbmdlZExhbmVzID0gTm9MYW5lcztcbiAgcm9vdC5leHBpcmVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QubXV0YWJsZVJlYWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIENsZWFyIHRoZSBsYW5lcyB0aGF0IG5vIGxvbmdlciBoYXZlIHBlbmRpbmcgd29ya1xuXG4gIHZhciBsYW5lcyA9IG5vTG9uZ2VyUGVuZGluZ0xhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZW50YW5nbGVtZW50c1tpbmRleF0gPSBOb0xhbmVzO1xuICAgIGV2ZW50VGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBlbnRhbmdsZWRMYW5lcykge1xuICAvLyBJbiBhZGRpdGlvbiB0byBlbnRhbmdsaW5nIGVhY2ggb2YgdGhlIGdpdmVuIGxhbmVzIHdpdGggZWFjaCBvdGhlciwgd2UgYWxzb1xuICAvLyBoYXZlIHRvIGNvbnNpZGVyIF90cmFuc2l0aXZlXyBlbnRhbmdsZW1lbnRzLiBGb3IgZWFjaCBsYW5lIHRoYXQgaXMgYWxyZWFkeVxuICAvLyBlbnRhbmdsZWQgd2l0aCAqYW55KiBvZiB0aGUgZ2l2ZW4gbGFuZXMsIHRoYXQgbGFuZSBpcyBub3cgdHJhbnNpdGl2ZWx5XG4gIC8vIGVudGFuZ2xlZCB3aXRoICphbGwqIHRoZSBnaXZlbiBsYW5lcy5cbiAgLy9cbiAgLy8gVHJhbnNsYXRlZDogSWYgQyBpcyBlbnRhbmdsZWQgd2l0aCBBLCB0aGVuIGVudGFuZ2xpbmcgQSB3aXRoIEIgYWxzb1xuICAvLyBlbnRhbmdsZXMgQyB3aXRoIEIuXG4gIC8vXG4gIC8vIElmIHRoaXMgaXMgaGFyZCB0byBncmFzcCwgaXQgbWlnaHQgaGVscCB0byBpbnRlbnRpb25hbGx5IGJyZWFrIHRoaXNcbiAgLy8gZnVuY3Rpb24gYW5kIGxvb2sgYXQgdGhlIHRlc3RzIHRoYXQgZmFpbCBpbiBSZWFjdFRyYW5zaXRpb24tdGVzdC5qcy4gVHJ5XG4gIC8vIGNvbW1lbnRpbmcgb3V0IG9uZSBvZiB0aGUgY29uZGl0aW9ucyBiZWxvdy5cbiAgdmFyIHJvb3RFbnRhbmdsZWRMYW5lcyA9IHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gZW50YW5nbGVkTGFuZXM7XG4gIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICB2YXIgbGFuZXMgPSByb290RW50YW5nbGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuXG4gICAgaWYgKCAvLyBJcyB0aGlzIG9uZSBvZiB0aGUgbmV3bHkgZW50YW5nbGVkIGxhbmVzP1xuICAgIGxhbmUgJiBlbnRhbmdsZWRMYW5lcyB8IC8vIElzIHRoaXMgbGFuZSB0cmFuc2l0aXZlbHkgZW50YW5nbGVkIHdpdGggdGhlIG5ld2x5IGVudGFuZ2xlZCBsYW5lcz9cbiAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSAmIGVudGFuZ2xlZExhbmVzKSB7XG4gICAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSB8PSBlbnRhbmdsZWRMYW5lcztcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0QnVtcGVkTGFuZUZvckh5ZHJhdGlvbihyb290LCByZW5kZXJMYW5lcykge1xuICB2YXIgcmVuZGVyTGFuZSA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmUocmVuZGVyTGFuZXMpO1xuICB2YXIgbGFuZTtcblxuICBzd2l0Y2ggKHJlbmRlckxhbmUpIHtcbiAgICBjYXNlIElucHV0Q29udGludW91c0xhbmU6XG4gICAgICBsYW5lID0gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBEZWZhdWx0TGFuZTpcbiAgICAgIGxhbmUgPSBEZWZhdWx0SHlkcmF0aW9uTGFuZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTI6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTM6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTQ6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTU6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTY6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTc6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTg6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTk6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEwOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxMTpcbiAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTI6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTEzOlxuICAgIGNhc2UgVHJhbnNpdGlvbkxhbmUxNDpcbiAgICBjYXNlIFRyYW5zaXRpb25MYW5lMTU6XG4gICAgY2FzZSBUcmFuc2l0aW9uTGFuZTE2OlxuICAgIGNhc2UgUmV0cnlMYW5lMTpcbiAgICBjYXNlIFJldHJ5TGFuZTI6XG4gICAgY2FzZSBSZXRyeUxhbmUzOlxuICAgIGNhc2UgUmV0cnlMYW5lNDpcbiAgICBjYXNlIFJldHJ5TGFuZTU6XG4gICAgICBsYW5lID0gVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZUxhbmU6XG4gICAgICBsYW5lID0gSWRsZUh5ZHJhdGlvbkxhbmU7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBFdmVyeXRoaW5nIGVsc2UgaXMgYWxyZWFkeSBlaXRoZXIgYSBoeWRyYXRpb24gbGFuZSwgb3Igc2hvdWxkbid0XG4gICAgICAvLyBiZSByZXRyaWVkIGF0IGEgaHlkcmF0aW9uIGxhbmUuXG4gICAgICBsYW5lID0gTm9MYW5lO1xuICAgICAgYnJlYWs7XG4gIH0gLy8gQ2hlY2sgaWYgdGhlIGxhbmUgd2UgY2hvc2UgaXMgc3VzcGVuZGVkLiBJZiBzbywgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZVxuICAvLyBhbHJlYWR5IGF0dGVtcHRlZCBhbmQgZmFpbGVkIHRvIGh5ZHJhdGUgYXQgdGhhdCBsZXZlbC4gQWxzbyBjaGVjayBpZiB3ZSdyZVxuICAvLyBhbHJlYWR5IHJlbmRlcmluZyB0aGF0IGxhbmUsIHdoaWNoIGlzIHJhcmUgYnV0IGNvdWxkIGhhcHBlbi5cblxuXG4gIGlmICgobGFuZSAmIChyb290LnN1c3BlbmRlZExhbmVzIHwgcmVuZGVyTGFuZXMpKSAhPT0gTm9MYW5lKSB7XG4gICAgLy8gR2l2ZSB1cCB0cnlpbmcgdG8gaHlkcmF0ZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCByZW5kZXIuXG4gICAgcmV0dXJuIE5vTGFuZTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gYWRkRmliZXJUb0xhbmVzTWFwKHJvb3QsIGZpYmVyLCBsYW5lcykge1xuXG4gIGlmICghaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGVuZGluZ1VwZGF0ZXJzTGFuZU1hcCA9IHJvb3QucGVuZGluZ1VwZGF0ZXJzTGFuZU1hcDtcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gbGFuZVRvSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICB2YXIgdXBkYXRlcnMgPSBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwW2luZGV4XTtcbiAgICB1cGRhdGVycy5hZGQoZmliZXIpO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtb3ZlUGVuZGluZ0ZpYmVyc1RvTWVtb2l6ZWQocm9vdCwgbGFuZXMpIHtcblxuICBpZiAoIWlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBlbmRpbmdVcGRhdGVyc0xhbmVNYXAgPSByb290LnBlbmRpbmdVcGRhdGVyc0xhbmVNYXA7XG4gIHZhciBtZW1vaXplZFVwZGF0ZXJzID0gcm9vdC5tZW1vaXplZFVwZGF0ZXJzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBsYW5lVG9JbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciB1cGRhdGVycyA9IHBlbmRpbmdVcGRhdGVyc0xhbmVNYXBbaW5kZXhdO1xuXG4gICAgaWYgKHVwZGF0ZXJzLnNpemUgPiAwKSB7XG4gICAgICB1cGRhdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgIGlmIChhbHRlcm5hdGUgPT09IG51bGwgfHwgIW1lbW9pemVkVXBkYXRlcnMuaGFzKGFsdGVybmF0ZSkpIHtcbiAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmFkZChmaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdXBkYXRlcnMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbnNGb3JMYW5lcyhyb290LCBsYW5lcykge1xuICB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxudmFyIERpc2NyZXRlRXZlbnRQcmlvcml0eSA9IFN5bmNMYW5lO1xudmFyIENvbnRpbnVvdXNFdmVudFByaW9yaXR5ID0gSW5wdXRDb250aW51b3VzTGFuZTtcbnZhciBEZWZhdWx0RXZlbnRQcmlvcml0eSA9IERlZmF1bHRMYW5lO1xudmFyIElkbGVFdmVudFByaW9yaXR5ID0gSWRsZUxhbmU7XG52YXIgY3VycmVudFVwZGF0ZVByaW9yaXR5ID0gTm9MYW5lO1xuZnVuY3Rpb24gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCkge1xuICByZXR1cm4gY3VycmVudFVwZGF0ZVByaW9yaXR5O1xufVxuZnVuY3Rpb24gc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KG5ld1ByaW9yaXR5KSB7XG4gIGN1cnJlbnRVcGRhdGVQcmlvcml0eSA9IG5ld1ByaW9yaXR5O1xufVxuZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5LCBmbikge1xuICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IGN1cnJlbnRVcGRhdGVQcmlvcml0eTtcblxuICB0cnkge1xuICAgIGN1cnJlbnRVcGRhdGVQcmlvcml0eSA9IHByaW9yaXR5O1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRVcGRhdGVQcmlvcml0eSA9IHByZXZpb3VzUHJpb3JpdHk7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZ2hlckV2ZW50UHJpb3JpdHkoYSwgYikge1xuICByZXR1cm4gYSAhPT0gMCAmJiBhIDwgYiA/IGEgOiBiO1xufVxuZnVuY3Rpb24gbG93ZXJFdmVudFByaW9yaXR5KGEsIGIpIHtcbiAgcmV0dXJuIGEgPT09IDAgfHwgYSA+IGIgPyBhIDogYjtcbn1cbmZ1bmN0aW9uIGlzSGlnaGVyRXZlbnRQcmlvcml0eShhLCBiKSB7XG4gIHJldHVybiBhICE9PSAwICYmIGEgPCBiO1xufVxuZnVuY3Rpb24gbGFuZXNUb0V2ZW50UHJpb3JpdHkobGFuZXMpIHtcbiAgdmFyIGxhbmUgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lKGxhbmVzKTtcblxuICBpZiAoIWlzSGlnaGVyRXZlbnRQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHksIGxhbmUpKSB7XG4gICAgcmV0dXJuIERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgfVxuXG4gIGlmICghaXNIaWdoZXJFdmVudFByaW9yaXR5KENvbnRpbnVvdXNFdmVudFByaW9yaXR5LCBsYW5lKSkge1xuICAgIHJldHVybiBDb250aW51b3VzRXZlbnRQcmlvcml0eTtcbiAgfVxuXG4gIGlmIChpbmNsdWRlc05vbklkbGVXb3JrKGxhbmUpKSB7XG4gICAgcmV0dXJuIERlZmF1bHRFdmVudFByaW9yaXR5O1xuICB9XG5cbiAgcmV0dXJuIElkbGVFdmVudFByaW9yaXR5O1xufVxuXG4vLyBUaGlzIGlzIGltcG9ydGVkIGJ5IHRoZSBldmVudCByZXBsYXlpbmcgaW1wbGVtZW50YXRpb24gaW4gUmVhY3QgRE9NLiBJdCdzXG4vLyBpbiBhIHNlcGFyYXRlIGZpbGUgdG8gYnJlYWsgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIHJlbmRlcmVyIGFuZFxuLy8gdGhlIHJlY29uY2lsZXIuXG5mdW5jdGlvbiBpc1Jvb3REZWh5ZHJhdGVkKHJvb3QpIHtcbiAgdmFyIGN1cnJlbnRTdGF0ZSA9IHJvb3QuY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICByZXR1cm4gY3VycmVudFN0YXRlLmlzRGVoeWRyYXRlZDtcbn1cblxudmFyIF9hdHRlbXB0U3luY2hyb25vdXNIeWRyYXRpb247XG5cbmZ1bmN0aW9uIHNldEF0dGVtcHRTeW5jaHJvbm91c0h5ZHJhdGlvbihmbikge1xuICBfYXR0ZW1wdFN5bmNocm9ub3VzSHlkcmF0aW9uID0gZm47XG59XG5mdW5jdGlvbiBhdHRlbXB0U3luY2hyb25vdXNIeWRyYXRpb24oZmliZXIpIHtcbiAgX2F0dGVtcHRTeW5jaHJvbm91c0h5ZHJhdGlvbihmaWJlcik7XG59XG52YXIgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihmbikge1xuICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eTtcbmZ1bmN0aW9uIHNldEF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShmbikge1xuICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkgPSBmbjtcbn1cbnZhciBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkkMTtcbmZ1bmN0aW9uIHNldEdldEN1cnJlbnRVcGRhdGVQcmlvcml0eShmbikge1xuICBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkkMSA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5O1xuZnVuY3Rpb24gc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkgPSBmbjtcbn0gLy8gVE9ETzogVXBncmFkZSB0aGlzIGRlZmluaXRpb24gb25jZSB3ZSdyZSBvbiBhIG5ld2VyIHZlcnNpb24gb2YgRmxvdyB0aGF0XG4vLyBoYXMgdGhpcyBkZWZpbml0aW9uIGJ1aWx0LWluLlxuXG52YXIgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBUaGUgcXVldWUgb2YgZGlzY3JldGUgZXZlbnRzIHRvIGJlIHJlcGxheWVkLlxuXG52YXIgcXVldWVkRGlzY3JldGVFdmVudHMgPSBbXTsgLy8gSW5kaWNhdGVzIGlmIGFueSBjb250aW51b3VzIGV2ZW50IHRhcmdldHMgYXJlIG5vbi1udWxsIGZvciBlYXJseSBiYWlsb3V0LlxuLy8gaWYgdGhlIGxhc3QgdGFyZ2V0IHdhcyBkZWh5ZHJhdGVkLlxuXG52YXIgcXVldWVkRm9jdXMgPSBudWxsO1xudmFyIHF1ZXVlZERyYWcgPSBudWxsO1xudmFyIHF1ZXVlZE1vdXNlID0gbnVsbDsgLy8gRm9yIHBvaW50ZXIgZXZlbnRzIHRoZXJlIGNhbiBiZSBvbmUgbGF0ZXN0IGV2ZW50IHBlciBwb2ludGVySWQuXG5cbnZhciBxdWV1ZWRQb2ludGVycyA9IG5ldyBNYXAoKTtcbnZhciBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMgPSBuZXcgTWFwKCk7IC8vIFdlIGNvdWxkIGNvbnNpZGVyIHJlcGxheWluZyBzZWxlY3Rpb25jaGFuZ2UgYW5kIHRvdWNobW92ZXMgdG9vLlxuXG52YXIgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzID0gW107XG52YXIgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzID0gWydtb3VzZWRvd24nLCAnbW91c2V1cCcsICd0b3VjaGNhbmNlbCcsICd0b3VjaGVuZCcsICd0b3VjaHN0YXJ0JywgJ2F1eGNsaWNrJywgJ2RibGNsaWNrJywgJ3BvaW50ZXJjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcnVwJywgJ2RyYWdlbmQnLCAnZHJhZ3N0YXJ0JywgJ2Ryb3AnLCAnY29tcG9zaXRpb25lbmQnLCAnY29tcG9zaXRpb25zdGFydCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ2lucHV0JywgJ3RleHRJbnB1dCcsIC8vIEludGVudGlvbmFsbHkgY2FtZWxDYXNlXG4nY29weScsICdjdXQnLCAncGFzdGUnLCAnY2xpY2snLCAnY2hhbmdlJywgJ2NvbnRleHRtZW51JywgJ3Jlc2V0JywgJ3N1Ym1pdCddO1xuZnVuY3Rpb24gaXNEaXNjcmV0ZUV2ZW50VGhhdFJlcXVpcmVzSHlkcmF0aW9uKGV2ZW50VHlwZSkge1xuICByZXR1cm4gZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzLmluZGV4T2YoZXZlbnRUeXBlKSA+IC0xO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBibG9ja2VkT246IGJsb2NrZWRPbixcbiAgICBkb21FdmVudE5hbWU6IGRvbUV2ZW50TmFtZSxcbiAgICBldmVudFN5c3RlbUZsYWdzOiBldmVudFN5c3RlbUZsYWdzLFxuICAgIG5hdGl2ZUV2ZW50OiBuYXRpdmVFdmVudCxcbiAgICB0YXJnZXRDb250YWluZXJzOiBbdGFyZ2V0Q29udGFpbmVyXVxuICB9O1xufVxuXG5mdW5jdGlvbiBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2xlYXZlJzpcbiAgICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgICAge1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVycy5kZWxldGUocG9pbnRlcklkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5kZWxldGUoX3BvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoZXhpc3RpbmdRdWV1ZWRFdmVudCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKGV4aXN0aW5nUXVldWVkRXZlbnQgPT09IG51bGwgfHwgZXhpc3RpbmdRdWV1ZWRFdmVudC5uYXRpdmVFdmVudCAhPT0gbmF0aXZlRXZlbnQpIHtcbiAgICB2YXIgcXVldWVkRXZlbnQgPSBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKGJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9maWJlcjIgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKGJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoaXMgdGFyZ2V0LlxuICAgICAgICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihfZmliZXIyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVldWVkRXZlbnQ7XG4gIH0gLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHF1ZXVlZCB0aGlzIGV4YWN0IGV2ZW50LCB0aGVuIGl0J3MgYmVjYXVzZVxuICAvLyB0aGUgZGlmZmVyZW50IGV2ZW50IHN5c3RlbXMgaGF2ZSBkaWZmZXJlbnQgRE9NIGV2ZW50IGxpc3RlbmVycy5cbiAgLy8gV2UgY2FuIGFjY3VtdWxhdGUgdGhlIGZsYWdzLCBhbmQgdGhlIHRhcmdldENvbnRhaW5lcnMsIGFuZFxuICAvLyBzdG9yZSBhIHNpbmdsZSBldmVudCB0byBiZSByZXBsYXllZC5cblxuXG4gIGV4aXN0aW5nUXVldWVkRXZlbnQuZXZlbnRTeXN0ZW1GbGFncyB8PSBldmVudFN5c3RlbUZsYWdzO1xuICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IGV4aXN0aW5nUXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICBpZiAodGFyZ2V0Q29udGFpbmVyICE9PSBudWxsICYmIHRhcmdldENvbnRhaW5lcnMuaW5kZXhPZih0YXJnZXRDb250YWluZXIpID09PSAtMSkge1xuICAgIHRhcmdldENvbnRhaW5lcnMucHVzaCh0YXJnZXRDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIGV4aXN0aW5nUXVldWVkRXZlbnQ7XG59XG5cbmZ1bmN0aW9uIHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gVGhlc2Ugc2V0IHJlbGF0ZWRUYXJnZXQgdG8gbnVsbCBiZWNhdXNlIHRoZSByZXBsYXllZCBldmVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgd2VcbiAgLy8gbW92ZWQgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cgKG5vIHRhcmdldCkgb250byB0aGUgdGFyZ2V0IG9uY2UgaXQgaHlkcmF0ZXMuXG4gIC8vIEluc3RlYWQgb2YgbXV0YXRpbmcgd2UgY291bGQgY2xvbmUgdGhlIGV2ZW50LlxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAge1xuICAgICAgICB2YXIgZm9jdXNFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRGb2N1cyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRm9jdXMsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGZvY3VzRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBkcmFnRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRHJhZyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRHJhZywgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgZHJhZ0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRNb3VzZSA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkTW91c2UsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG1vdXNlRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuc2V0KHBvaW50ZXJJZCwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVycy5nZXQocG9pbnRlcklkKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBwb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlckV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHZhciBfcG9pbnRlcklkMiA9IF9wb2ludGVyRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuc2V0KF9wb2ludGVySWQyLCBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5nZXQoX3BvaW50ZXJJZDIpIHx8IG51bGwsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIF9wb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IC8vIENoZWNrIGlmIHRoaXMgdGFyZ2V0IGlzIHVuYmxvY2tlZC4gUmV0dXJucyB0cnVlIGlmIGl0J3MgdW5ibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQocXVldWVkVGFyZ2V0KSB7XG4gIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hhcmVzIGEgbG90IG9mIGxvZ2ljIHdpdGggZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudC5cbiAgLy8gVHJ5IHRvIHVuaWZ5IHRoZW0uIEl0J3MgYSBiaXQgdHJpY2t5IHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgdHdvIHJldHVyblxuICAvLyB2YWx1ZXMuXG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocXVldWVkVGFyZ2V0LnRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGFnID0gbmVhcmVzdE1vdW50ZWQudGFnO1xuXG4gICAgICBpZiAodGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSBibG9ja2VkIG9uIGh5ZHJhdGluZyB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIC8vIEluY3JlYXNlIGl0cyBwcmlvcml0eS5cbiAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gaW5zdGFuY2U7XG4gICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkocXVldWVkVGFyZ2V0LnByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc1Jvb3REZWh5ZHJhdGVkKHJvb3QpKSB7XG4gICAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7IC8vIFdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgd2F5IHRvIGluY3JlYXNlIHRoZSBwcmlvcml0eSBvZlxuICAgICAgICAgIC8vIGEgcm9vdCBvdGhlciB0aGFuIHN5bmMuXG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcXVldWVFeHBsaWNpdEh5ZHJhdGlvblRhcmdldCh0YXJnZXQpIHtcbiAgLy8gVE9ETzogVGhpcyB3aWxsIHJlYWQgdGhlIHByaW9yaXR5IGlmIGl0J3MgZGlzcGF0Y2hlZCBieSB0aGUgUmVhY3RcbiAgLy8gZXZlbnQgc3lzdGVtIGJ1dCBub3QgbmF0aXZlIGV2ZW50cy4gU2hvdWxkIHJlYWQgd2luZG93LmV2ZW50LnR5cGUsIGxpa2VcbiAgLy8gd2UgZG8gZm9yIHVwZGF0ZXMgKGdldEN1cnJlbnRFdmVudFByaW9yaXR5KS5cbiAgdmFyIHVwZGF0ZVByaW9yaXR5ID0gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5JDEoKTtcbiAgdmFyIHF1ZXVlZFRhcmdldCA9IHtcbiAgICBibG9ja2VkT246IG51bGwsXG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcHJpb3JpdHk6IHVwZGF0ZVByaW9yaXR5XG4gIH07XG4gIHZhciBpID0gMDtcblxuICBmb3IgKDsgaSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgIC8vIFN0b3Agb25jZSB3ZSBoaXQgdGhlIGZpcnN0IHRhcmdldCB3aXRoIGxvd2VyIHByaW9yaXR5IHRoYW5cbiAgICBpZiAoIWlzSGlnaGVyRXZlbnRQcmlvcml0eSh1cGRhdGVQcmlvcml0eSwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzW2ldLnByaW9yaXR5KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNwbGljZShpLCAwLCBxdWV1ZWRUYXJnZXQpO1xuXG4gIGlmIChpID09PSAwKSB7XG4gICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHF1ZXVlZFRhcmdldCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBxdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gIHdoaWxlICh0YXJnZXRDb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyID0gdGFyZ2V0Q29udGFpbmVyc1swXTtcbiAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGZpbmRJbnN0YW5jZUJsb2NraW5nRXZlbnQocXVldWVkRXZlbnQuZG9tRXZlbnROYW1lLCBxdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICAgIGlmIChuZXh0QmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHZhciBuYXRpdmVFdmVudCA9IHF1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgbmF0aXZlRXZlbnRDbG9uZSA9IG5ldyBuYXRpdmVFdmVudC5jb25zdHJ1Y3RvcihuYXRpdmVFdmVudC50eXBlLCBuYXRpdmVFdmVudCk7XG4gICAgICAgIHNldFJlcGxheWluZ0V2ZW50KG5hdGl2ZUV2ZW50Q2xvbmUpO1xuICAgICAgICBuYXRpdmVFdmVudC50YXJnZXQuZGlzcGF0Y2hFdmVudChuYXRpdmVFdmVudENsb25lKTtcbiAgICAgICAgcmVzZXRSZXBsYXlpbmdFdmVudCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLiBUcnkgYWdhaW4gbGF0ZXIuXG4gICAgICB2YXIgX2ZpYmVyMyA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dEJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIzICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKF9maWJlcjMpO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKHF1ZXVlZEV2ZW50LCBrZXksIG1hcCkge1xuICBpZiAoYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkpIHtcbiAgICBtYXAuZGVsZXRlKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGF5VW5ibG9ja2VkRXZlbnRzKCkge1xuICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7XG5cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRGb2N1cykpIHtcbiAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZERyYWcpKSB7XG4gICAgcXVldWVkRHJhZyA9IG51bGw7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRNb3VzZSkpIHtcbiAgICBxdWV1ZWRNb3VzZSA9IG51bGw7XG4gIH1cblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG5cbiAgICBpZiAoIWhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQpIHtcbiAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSB0cnVlOyAvLyBTY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGF0dGVtcHQgcmVwbGF5aW5nIGFzIG1hbnkgZXZlbnRzIGFzIGFyZVxuICAgICAgLy8gbm93IHVuYmxvY2tlZC4gVGhpcyBmaXJzdCBtaWdodCBub3QgYWN0dWFsbHkgYmUgdW5ibG9ja2VkIHlldC5cbiAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGl0IGVhcmx5IHRvIGF2b2lkIHNjaGVkdWxpbmcgYW4gdW5uZWNlc3NhcnkgY2FsbGJhY2suXG5cbiAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSwgcmVwbGF5VW5ibG9ja2VkRXZlbnRzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmV0cnlJZkJsb2NrZWRPbih1bmJsb2NrZWQpIHtcbiAgLy8gTWFyayBhbnl0aGluZyB0aGF0IHdhcyBibG9ja2VkIG9uIHRoaXMgYXMgbm8gbG9uZ2VyIGJsb2NrZWRcbiAgLy8gYW5kIGVsaWdpYmxlIGZvciBhIHJlcGxheS5cbiAgaWYgKHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRGlzY3JldGVFdmVudHNbMF0sIHVuYmxvY2tlZCk7IC8vIFRoaXMgaXMgYSBleHBvbmVudGlhbCBzZWFyY2ggZm9yIGVhY2ggYm91bmRhcnkgdGhhdCBjb21taXRzLiBJIHRoaW5rIGl0J3NcbiAgICAvLyB3b3J0aCBpdCBiZWNhdXNlIHdlIGV4cGVjdCB2ZXJ5IGZldyBkaXNjcmV0ZSBldmVudHMgdG8gcXVldWUgdXAgYW5kIG9uY2VcbiAgICAvLyB3ZSBhcmUgYWN0dWFsbHkgZnVsbHkgdW5ibG9ja2VkIGl0IHdpbGwgYmUgZmFzdCB0byByZXBsYXkgdGhlbS5cblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWV1ZWRFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzW2ldO1xuXG4gICAgICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocXVldWVkRm9jdXMgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRm9jdXMsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkRHJhZyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREcmFnLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZE1vdXNlLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgdmFyIHVuYmxvY2sgPSBmdW5jdGlvbiAocXVldWVkRXZlbnQpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpO1xuICB9O1xuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2godW5ibG9jayk7XG4gIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKHVuYmxvY2spO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIHF1ZXVlZFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tfaV07XG5cbiAgICBpZiAocXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAocXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgbmV4dEV4cGxpY2l0VGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzWzBdO1xuXG4gICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuXG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KG5leHRFeHBsaWNpdFRhcmdldCk7XG5cbiAgICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHVuYmxvY2tlZC5cbiAgICAgICAgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOyAvLyBUT0RPOiBjYW4gd2Ugc3RvcCBleHBvcnRpbmcgdGhlc2U/XG5cbnZhciBfZW5hYmxlZCA9IHRydWU7IC8vIFRoaXMgaXMgZXhwb3J0ZWQgaW4gRkIgYnVpbGRzIGZvciB1c2UgYnkgbGVnYWN5IEZCIGxheWVyIGluZnJhLlxuLy8gV2UnZCBsaWtlIHRvIHJlbW92ZSB0aGlzIGJ1dCBpdCdzIG5vdCBjbGVhciBpZiB0aGlzIGlzIHNhZmUuXG5cbmZ1bmN0aW9uIHNldEVuYWJsZWQoZW5hYmxlZCkge1xuICBfZW5hYmxlZCA9ICEhZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGlzRW5hYmxlZCgpIHtcbiAgcmV0dXJuIF9lbmFibGVkO1xufVxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGV2ZW50UHJpb3JpdHkgPSBnZXRFdmVudFByaW9yaXR5KGRvbUV2ZW50TmFtZSk7XG4gIHZhciBsaXN0ZW5lcldyYXBwZXI7XG5cbiAgc3dpdGNoIChldmVudFByaW9yaXR5KSB7XG4gICAgY2FzZSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaENvbnRpbnVvdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBEZWZhdWx0RXZlbnRQcmlvcml0eTpcbiAgICBkZWZhdWx0OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hFdmVudDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyV3JhcHBlci5iaW5kKG51bGwsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSgpO1xuICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gbnVsbDtcblxuICB0cnkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHkpO1xuICAgIGRpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNQcmlvcml0eSk7XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSgpO1xuICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gbnVsbDtcblxuICB0cnkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShDb250aW51b3VzRXZlbnRQcmlvcml0eSk7XG4gICAgZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICB9IGZpbmFsbHkge1xuICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShwcmV2aW91c1ByaW9yaXR5KTtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKCFfZW5hYmxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICBkaXNwYXRjaEV2ZW50V2l0aEVuYWJsZUNhcHR1cmVQaGFzZVNlbGVjdGl2ZUh5ZHJhdGlvbldpdGhvdXREaXNjcmV0ZUV2ZW50UmVwbGF5KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudFdpdGhFbmFibGVDYXB0dXJlUGhhc2VTZWxlY3RpdmVIeWRyYXRpb25XaXRob3V0RGlzY3JldGVFdmVudFJlcGxheShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgdmFyIGJsb2NrZWRPbiA9IGZpbmRJbnN0YW5jZUJsb2NraW5nRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcblxuICBpZiAoYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHJldHVybl90YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpO1xuICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpKSB7XG4gICAgbmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgcmV0dXJuO1xuICB9IC8vIFdlIG5lZWQgdG8gY2xlYXIgb25seSBpZiB3ZSBkaWRuJ3QgcXVldWUgYmVjYXVzZVxuICAvLyBxdWV1ZWluZyBpcyBhY2N1bXVsYXRpdmUuXG5cblxuICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuXG4gIGlmIChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSAmJiBpc0Rpc2NyZXRlRXZlbnRUaGF0UmVxdWlyZXNIeWRyYXRpb24oZG9tRXZlbnROYW1lKSkge1xuICAgIHdoaWxlIChibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIHZhciBmaWJlciA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKTtcblxuICAgICAgaWYgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRTeW5jaHJvbm91c0h5ZHJhdGlvbihmaWJlcik7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0QmxvY2tlZE9uID0gZmluZEluc3RhbmNlQmxvY2tpbmdFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuXG4gICAgICBpZiAobmV4dEJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgICAgICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgcmV0dXJuX3RhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0QmxvY2tlZE9uID09PSBibG9ja2VkT24pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgfVxuXG4gICAgaWYgKGJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgbmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIFRoaXMgaXMgbm90IHJlcGxheWFibGUgc28gd2UnbGwgaW52b2tlIGl0IGJ1dCB3aXRob3V0IGEgdGFyZ2V0LFxuICAvLyBpbiBjYXNlIHRoZSBldmVudCBzeXN0ZW0gbmVlZHMgdG8gdHJhY2UgaXQuXG5cblxuICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgbnVsbCwgdGFyZ2V0Q29udGFpbmVyKTtcbn1cblxudmFyIHJldHVybl90YXJnZXRJbnN0ID0gbnVsbDsgLy8gUmV0dXJucyBhIFN1c3BlbnNlSW5zdGFuY2Ugb3IgQ29udGFpbmVyIGlmIGl0J3MgYmxvY2tlZC5cbi8vIFRoZSByZXR1cm5fdGFyZ2V0SW5zdCBmaWVsZCBhYm92ZSBpcyBjb25jZXB0dWFsbHkgcGFydCBvZiB0aGUgcmV0dXJuIHZhbHVlLlxuXG5mdW5jdGlvbiBmaW5kSW5zdGFuY2VCbG9ja2luZ0V2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICAvLyBUT0RPOiBXYXJuIGlmIF9lbmFibGVkIGlzIGZhbHNlLlxuICByZXR1cm5fdGFyZ2V0SW5zdCA9IG51bGw7XG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHRyZWUgaGFzIGJlZW4gdW5tb3VudGVkIGFscmVhZHkuIERpc3BhdGNoIHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gUXVldWUgdGhlIGV2ZW50IHRvIGJlIHJlcGxheWVkIGxhdGVyLiBBYm9ydCBkaXNwYXRjaGluZyBzaW5jZSB3ZVxuICAgICAgICAgIC8vIGRvbid0IHdhbnQgdGhpcyBldmVudCBkaXNwYXRjaGVkIHR3aWNlIHRocm91Z2ggdGhlIGV2ZW50IHN5c3RlbS5cbiAgICAgICAgICAvLyBUT0RPOiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBkaXNjcmV0ZSBldmVudCBpbiB0aGUgcXVldWUuIFNjaGVkdWxlIGFuIGluY3JlYXNlZFxuICAgICAgICAgIC8vIHByaW9yaXR5IGZvciB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4sIHNvbWV0aGluZyB3ZW50IHdyb25nIGJ1dCB0byBhdm9pZCBibG9ja2luZ1xuICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLCBkaXNwYXRjaCB0aGUgZXZlbnQgd2l0aG91dCBhIHRhcmdldC5cbiAgICAgICAgLy8gVE9ETzogV2Fybi5cblxuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc1Jvb3REZWh5ZHJhdGVkKHJvb3QpKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zIGR1cmluZyBhIHJlcGxheSBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgaXQgbWlnaHQgYmxvY2tcbiAgICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLlxuICAgICAgICAgIHJldHVybiBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKG5lYXJlc3RNb3VudGVkICE9PSB0YXJnZXRJbnN0KSB7XG4gICAgICAgIC8vIElmIHdlIGdldCBhbiBldmVudCAoZXg6IGltZyBvbmxvYWQpIGJlZm9yZSBjb21taXR0aW5nIHRoYXRcbiAgICAgICAgLy8gY29tcG9uZW50J3MgbW91bnQsIGlnbm9yZSBpdCBmb3Igbm93ICh0aGF0IGlzLCB0cmVhdCBpdCBhcyBpZiBpdCB3YXMgYW5cbiAgICAgICAgLy8gZXZlbnQgb24gYSBub24tUmVhY3QgdHJlZSkuIFdlIG1pZ2h0IGFsc28gY29uc2lkZXIgcXVldWVpbmcgZXZlbnRzIGFuZFxuICAgICAgICAvLyBkaXNwYXRjaGluZyB0aGVtIGFmdGVyIHRoZSBtb3VudC5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuX3RhcmdldEluc3QgPSB0YXJnZXRJbnN0OyAvLyBXZSdyZSBub3QgYmxvY2tlZCBvbiBhbnl0aGluZy5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEV2ZW50UHJpb3JpdHkoZG9tRXZlbnROYW1lKSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgLy8gVXNlZCBieSBTaW1wbGVFdmVudFBsdWdpbjpcbiAgICBjYXNlICdjYW5jZWwnOlxuICAgIGNhc2UgJ2NsaWNrJzpcbiAgICBjYXNlICdjbG9zZSc6XG4gICAgY2FzZSAnY29udGV4dG1lbnUnOlxuICAgIGNhc2UgJ2NvcHknOlxuICAgIGNhc2UgJ2N1dCc6XG4gICAgY2FzZSAnYXV4Y2xpY2snOlxuICAgIGNhc2UgJ2RibGNsaWNrJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICBjYXNlICdkcmFnc3RhcnQnOlxuICAgIGNhc2UgJ2Ryb3AnOlxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgY2FzZSAnaW52YWxpZCc6XG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgIGNhc2UgJ2tleXVwJzpcbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgIGNhc2UgJ21vdXNldXAnOlxuICAgIGNhc2UgJ3Bhc3RlJzpcbiAgICBjYXNlICdwYXVzZSc6XG4gICAgY2FzZSAncGxheSc6XG4gICAgY2FzZSAncG9pbnRlcmNhbmNlbCc6XG4gICAgY2FzZSAncG9pbnRlcmRvd24nOlxuICAgIGNhc2UgJ3BvaW50ZXJ1cCc6XG4gICAgY2FzZSAncmF0ZWNoYW5nZSc6XG4gICAgY2FzZSAncmVzZXQnOlxuICAgIGNhc2UgJ3Jlc2l6ZSc6XG4gICAgY2FzZSAnc2Vla2VkJzpcbiAgICBjYXNlICdzdWJtaXQnOlxuICAgIGNhc2UgJ3RvdWNoY2FuY2VsJzpcbiAgICBjYXNlICd0b3VjaGVuZCc6XG4gICAgY2FzZSAndG91Y2hzdGFydCc6XG4gICAgY2FzZSAndm9sdW1lY2hhbmdlJzogLy8gVXNlZCBieSBwb2x5ZmlsbHM6XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICBjYXNlICdjaGFuZ2UnOlxuICAgIGNhc2UgJ3NlbGVjdGlvbmNoYW5nZSc6XG4gICAgY2FzZSAndGV4dElucHV0JzpcbiAgICBjYXNlICdjb21wb3NpdGlvbnN0YXJ0JzpcbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgY2FzZSAnY29tcG9zaXRpb251cGRhdGUnOiAvLyBPbmx5IGVuYWJsZUNyZWF0ZUV2ZW50SGFuZGxlQVBJOlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuXG4gICAgY2FzZSAnYmVmb3JlYmx1cic6XG4gICAgY2FzZSAnYWZ0ZXJibHVyJzogLy8gTm90IHVzZWQgYnkgUmVhY3QgYnV0IGNvdWxkIGJlIGJ5IHVzZXIgY29kZTpcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgIGNhc2UgJ2JlZm9yZWlucHV0JzpcbiAgICBjYXNlICdibHVyJzpcbiAgICBjYXNlICdmdWxsc2NyZWVuY2hhbmdlJzpcbiAgICBjYXNlICdmb2N1cyc6XG4gICAgY2FzZSAnaGFzaGNoYW5nZSc6XG4gICAgY2FzZSAncG9wc3RhdGUnOlxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAnc2VsZWN0c3RhcnQnOlxuICAgICAgcmV0dXJuIERpc2NyZXRlRXZlbnRQcmlvcml0eTtcblxuICAgIGNhc2UgJ2RyYWcnOlxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2V4aXQnOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgY2FzZSAnZHJhZ292ZXInOlxuICAgIGNhc2UgJ21vdXNlbW92ZSc6XG4gICAgY2FzZSAnbW91c2VvdXQnOlxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgY2FzZSAncG9pbnRlcm1vdmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICBjYXNlICdzY3JvbGwnOlxuICAgIGNhc2UgJ3RvZ2dsZSc6XG4gICAgY2FzZSAndG91Y2htb3ZlJzpcbiAgICBjYXNlICd3aGVlbCc6IC8vIE5vdCB1c2VkIGJ5IFJlYWN0IGJ1dCBjb3VsZCBiZSBieSB1c2VyIGNvZGU6XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICBjYXNlICdtb3VzZWVudGVyJzpcbiAgICBjYXNlICdtb3VzZWxlYXZlJzpcbiAgICBjYXNlICdwb2ludGVyZW50ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJsZWF2ZSc6XG4gICAgICByZXR1cm4gQ29udGludW91c0V2ZW50UHJpb3JpdHk7XG5cbiAgICBjYXNlICdtZXNzYWdlJzpcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgbWlnaHQgYmUgaW4gdGhlIFNjaGVkdWxlciBjYWxsYmFjay5cbiAgICAgICAgLy8gRXZlbnR1YWxseSB0aGlzIG1lY2hhbmlzbSB3aWxsIGJlIHJlcGxhY2VkIGJ5IGEgY2hlY2tcbiAgICAgICAgLy8gb2YgdGhlIGN1cnJlbnQgcHJpb3JpdHkgb24gdGhlIG5hdGl2ZSBzY2hlZHVsZXIuXG4gICAgICAgIHZhciBzY2hlZHVsZXJQcmlvcml0eSA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAgICAgICAgc3dpdGNoIChzY2hlZHVsZXJQcmlvcml0eSkge1xuICAgICAgICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICAgICAgICByZXR1cm4gRGlzY3JldGVFdmVudFByaW9yaXR5O1xuXG4gICAgICAgICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgICAgICAgIHJldHVybiBDb250aW51b3VzRXZlbnRQcmlvcml0eTtcblxuICAgICAgICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgICAgICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMb3dTY2hlZHVsZXJQcmlvcml0eSwgc29tZWhvdy4gTWF5YmUgdGhlIHNhbWUgbGFuZSBhcyBoeWRyYXRpb24uXG4gICAgICAgICAgICByZXR1cm4gRGVmYXVsdEV2ZW50UHJpb3JpdHk7XG5cbiAgICAgICAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgICAgICAgIHJldHVybiBJZGxlRXZlbnRQcmlvcml0eTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gRGVmYXVsdEV2ZW50UHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gRGVmYXVsdEV2ZW50UHJpb3JpdHk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9KTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG4vKipcbiAqIFRoZXNlIHZhcmlhYmxlcyBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0IGNvbnRlbnQgb2YgYSB0YXJnZXQgbm9kZSxcbiAqIGFsbG93aW5nIGNvbXBhcmlzb24gb2YgY29udGVudCBiZWZvcmUgYW5kIGFmdGVyIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogSWRlbnRpZnkgdGhlIG5vZGUgd2hlcmUgc2VsZWN0aW9uIGN1cnJlbnRseSBiZWdpbnMsIHRoZW4gb2JzZXJ2ZVxuICogYm90aCBpdHMgdGV4dCBjb250ZW50IGFuZCBpdHMgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgRE9NLiBTaW5jZSB0aGVcbiAqIGJyb3dzZXIgbWF5IG5hdGl2ZWx5IHJlcGxhY2UgdGhlIHRhcmdldCBub2RlIGR1cmluZyBjb21wb3NpdGlvbiwgd2UgY2FuXG4gKiB1c2UgaXRzIHBvc2l0aW9uIHRvIGZpbmQgaXRzIHJlcGxhY2VtZW50LlxuICpcbiAqXG4gKi9cbnZhciByb290ID0gbnVsbDtcbnZhciBzdGFydFRleHQgPSBudWxsO1xudmFyIGZhbGxiYWNrVGV4dCA9IG51bGw7XG5mdW5jdGlvbiBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJvb3QgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgc3RhcnRUZXh0ID0gZ2V0VGV4dCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlc2V0KCkge1xuICByb290ID0gbnVsbDtcbiAgc3RhcnRUZXh0ID0gbnVsbDtcbiAgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldERhdGEoKSB7XG4gIGlmIChmYWxsYmFja1RleHQpIHtcbiAgICByZXR1cm4gZmFsbGJhY2tUZXh0O1xuICB9XG5cbiAgdmFyIHN0YXJ0O1xuICB2YXIgc3RhcnRWYWx1ZSA9IHN0YXJ0VGV4dDtcbiAgdmFyIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS5sZW5ndGg7XG4gIHZhciBlbmQ7XG4gIHZhciBlbmRWYWx1ZSA9IGdldFRleHQoKTtcbiAgdmFyIGVuZExlbmd0aCA9IGVuZFZhbHVlLmxlbmd0aDtcblxuICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBzdGFydExlbmd0aDsgc3RhcnQrKykge1xuICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0XSAhPT0gZW5kVmFsdWVbc3RhcnRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcblxuICBmb3IgKGVuZCA9IDE7IGVuZCA8PSBtaW5FbmQ7IGVuZCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRMZW5ndGggLSBlbmRdICE9PSBlbmRWYWx1ZVtlbmRMZW5ndGggLSBlbmRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgc2xpY2VUYWlsID0gZW5kID4gMSA/IDEgLSBlbmQgOiB1bmRlZmluZWQ7XG4gIGZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCBzbGljZVRhaWwpO1xuICByZXR1cm4gZmFsbGJhY2tUZXh0O1xufVxuZnVuY3Rpb24gZ2V0VGV4dCgpIHtcbiAgaWYgKCd2YWx1ZScgaW4gcm9vdCkge1xuICAgIHJldHVybiByb290LnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QudGV4dENvbnRlbnQ7XG59XG5cbi8qKlxuICogYGNoYXJDb2RlYCByZXByZXNlbnRzIHRoZSBhY3R1YWwgXCJjaGFyYWN0ZXIgY29kZVwiIGFuZCBpcyBzYWZlIHRvIHVzZSB3aXRoXG4gKiBgU3RyaW5nLmZyb21DaGFyQ29kZWAuIEFzIHN1Y2gsIG9ubHkga2V5cyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJpbnRhYmxlXG4gKiBjaGFyYWN0ZXJzIHByb2R1Y2UgYSB2YWxpZCBgY2hhckNvZGVgLCB0aGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyBFbnRlci5cbiAqIFRoZSBUYWIta2V5IGlzIGNvbnNpZGVyZWQgbm9uLXByaW50YWJsZSBhbmQgZG9lcyBub3QgaGF2ZSBhIGBjaGFyQ29kZWAsXG4gKiBwcmVzdW1hYmx5IGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvZHVjZSBhIHRhYi1jaGFyYWN0ZXIgaW4gYnJvd3NlcnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBOb3JtYWxpemVkIGBjaGFyQ29kZWAgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGNoYXJDb2RlO1xuICB2YXIga2V5Q29kZSA9IG5hdGl2ZUV2ZW50LmtleUNvZGU7XG5cbiAgaWYgKCdjaGFyQ29kZScgaW4gbmF0aXZlRXZlbnQpIHtcbiAgICBjaGFyQ29kZSA9IG5hdGl2ZUV2ZW50LmNoYXJDb2RlOyAvLyBGRiBkb2VzIG5vdCBzZXQgYGNoYXJDb2RlYCBmb3IgdGhlIEVudGVyLWtleSwgY2hlY2sgYWdhaW5zdCBga2V5Q29kZWAuXG5cbiAgICBpZiAoY2hhckNvZGUgPT09IDAgJiYga2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIGNoYXJDb2RlID0gMTM7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElFOCBkb2VzIG5vdCBpbXBsZW1lbnQgYGNoYXJDb2RlYCwgYnV0IGBrZXlDb2RlYCBoYXMgdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAgY2hhckNvZGUgPSBrZXlDb2RlO1xuICB9IC8vIElFIGFuZCBFZGdlIChvbiBXaW5kb3dzKSBhbmQgQ2hyb21lIC8gU2FmYXJpIChvbiBXaW5kb3dzIGFuZCBMaW51eClcbiAgLy8gcmVwb3J0IEVudGVyIGFzIGNoYXJDb2RlIDEwIHdoZW4gY3RybCBpcyBwcmVzc2VkLlxuXG5cbiAgaWYgKGNoYXJDb2RlID09PSAxMCkge1xuICAgIGNoYXJDb2RlID0gMTM7XG4gIH0gLy8gU29tZSBub24tcHJpbnRhYmxlIGtleXMgYXJlIHJlcG9ydGVkIGluIGBjaGFyQ29kZWAvYGtleUNvZGVgLCBkaXNjYXJkIHRoZW0uXG4gIC8vIE11c3Qgbm90IGRpc2NhcmQgdGhlIChub24tKXByaW50YWJsZSBFbnRlci1rZXkuXG5cblxuICBpZiAoY2hhckNvZGUgPj0gMzIgfHwgY2hhckNvZGUgPT09IDEzKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhIGZhY3Rvcnkgc28gdGhhdCB3ZSBoYXZlIGRpZmZlcmVudCByZXR1cm5lZCBjb25zdHJ1Y3RvcnMuXG4vLyBJZiB3ZSBoYWQgYSBzaW5nbGUgY29uc3RydWN0b3IsIGl0IHdvdWxkIGJlIG1lZ2Ftb3JwaGljIGFuZCBlbmdpbmVzIHdvdWxkIGRlb3B0LlxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEludGVyZmFjZSkge1xuICAvKipcbiAgICogU3ludGhldGljIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBieSBldmVudCBwbHVnaW5zLCB0eXBpY2FsbHkgaW4gcmVzcG9uc2UgdG8gYVxuICAgKiB0b3AtbGV2ZWwgZXZlbnQgZGVsZWdhdGlvbiBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGVzZSBzeXN0ZW1zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHBvb2xpbmcgdG8gcmVkdWNlIHRoZSBmcmVxdWVuY3kgb2YgZ2FyYmFnZVxuICAgKiBjb2xsZWN0aW9uLiBUaGUgc3lzdGVtIHNob3VsZCBjaGVjayBgaXNQZXJzaXN0ZW50YCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbiAgICogZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGludG8gdGhlIHBvb2wgYWZ0ZXIgYmVpbmcgZGlzcGF0Y2hlZC4gVXNlcnMgdGhhdFxuICAgKiBuZWVkIGEgcGVyc2lzdGVkIGV2ZW50IHNob3VsZCBpbnZva2UgYHBlcnNpc3RgLlxuICAgKlxuICAgKiBTeW50aGV0aWMgZXZlbnRzIChhbmQgc3ViY2xhc3NlcykgaW1wbGVtZW50IHRoZSBET00gTGV2ZWwgMyBFdmVudHMgQVBJIGJ5XG4gICAqIG5vcm1hbGl6aW5nIGJyb3dzZXIgcXVpcmtzLiBTdWJjbGFzc2VzIGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGltcGxlbWVudCBhXG4gICAqIERPTSBpbnRlcmZhY2U7IGN1c3RvbSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBldmVudHMgY2FuIGFsc28gc3ViY2xhc3MgdGhpcy5cbiAgICovXG4gIGZ1bmN0aW9uIFN5bnRoZXRpY0Jhc2VFdmVudChyZWFjdE5hbWUsIHJlYWN0RXZlbnRUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICB0aGlzLl9yZWFjdE5hbWUgPSByZWFjdE5hbWU7XG4gICAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gICAgdGhpcy50eXBlID0gcmVhY3RFdmVudFR5cGU7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9wcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICAgIGlmICghSW50ZXJmYWNlLmhhc093blByb3BlcnR5KF9wcm9wTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBub3JtYWxpemUgPSBJbnRlcmZhY2VbX3Byb3BOYW1lXTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgICB0aGlzW19wcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tfcHJvcE5hbWVdID0gbmF0aXZlRXZlbnRbX3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgOiBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2U7XG5cbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzc2lnbihTeW50aGV0aWNCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LnJldHVyblZhbHVlICE9PSAndW5rbm93bicpIHtcbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9LFxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vICRGbG93Rml4TWUgLSBmbG93IGlzIG5vdCBhd2FyZSBvZiBgdW5rbm93bmAgaW4gSUVcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIC8vIFRoZSBDaGFuZ2VFdmVudFBsdWdpbiByZWdpc3RlcnMgYSBcInByb3BlcnR5Y2hhbmdlXCIgZXZlbnQgZm9yXG4gICAgICAgIC8vIElFLiBUaGlzIGV2ZW50IGRvZXMgbm90IHN1cHBvcnQgYnViYmxpbmcgb3IgY2FuY2VsbGluZywgYW5kXG4gICAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgICAgLy8gdHlwZW9mIGNoZWNrIG9mIFwidW5rbm93blwiIGNpcmN1bXZlbnRzIHRoaXMgaXNzdWUgKGFuZCBpcyBhbHNvXG4gICAgICAgIC8vIElFIHNwZWNpZmljKS5cbiAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBXZSByZWxlYXNlIGFsbCBkaXNwYXRjaGVkIGBTeW50aGV0aWNFdmVudGBzIGFmdGVyIGVhY2ggZXZlbnQgbG9vcCwgYWRkaW5nXG4gICAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAgICogd29uJ3QgYmUgYWRkZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqL1xuICAgIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHsvLyBNb2Rlcm4gZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGlzIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGlzUGVyc2lzdGVudDogZnVuY3Rpb25UaGF0UmV0dXJuc1RydWVcbiAgfSk7XG4gIHJldHVybiBTeW50aGV0aWNCYXNlRXZlbnQ7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIEV2ZW50SW50ZXJmYWNlID0ge1xuICBldmVudFBoYXNlOiAwLFxuICBidWJibGVzOiAwLFxuICBjYW5jZWxhYmxlOiAwLFxuICB0aW1lU3RhbXA6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVmYXVsdFByZXZlbnRlZDogMCxcbiAgaXNUcnVzdGVkOiAwXG59O1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRXZlbnRJbnRlcmZhY2UpO1xuXG52YXIgVUlFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgdmlldzogMCxcbiAgZGV0YWlsOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChVSUV2ZW50SW50ZXJmYWNlKTtcbnZhciBsYXN0TW92ZW1lbnRYO1xudmFyIGxhc3RNb3ZlbWVudFk7XG52YXIgbGFzdE1vdXNlRXZlbnQ7XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKGV2ZW50KSB7XG4gIGlmIChldmVudCAhPT0gbGFzdE1vdXNlRXZlbnQpIHtcbiAgICBpZiAobGFzdE1vdXNlRXZlbnQgJiYgZXZlbnQudHlwZSA9PT0gJ21vdXNlbW92ZScpIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSBldmVudC5zY3JlZW5YIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWDtcbiAgICAgIGxhc3RNb3ZlbWVudFkgPSBldmVudC5zY3JlZW5ZIC0gbGFzdE1vdXNlRXZlbnQuc2NyZWVuWTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdE1vdmVtZW50WCA9IDA7XG4gICAgICBsYXN0TW92ZW1lbnRZID0gMDtcbiAgICB9XG5cbiAgICBsYXN0TW91c2VFdmVudCA9IGV2ZW50O1xuICB9XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgTW91c2VFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgTW91c2VFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICBzY3JlZW5YOiAwLFxuICBzY3JlZW5ZOiAwLFxuICBjbGllbnRYOiAwLFxuICBjbGllbnRZOiAwLFxuICBwYWdlWDogMCxcbiAgcGFnZVk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgYnV0dG9uOiAwLFxuICBidXR0b25zOiAwLFxuICByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnNyY0VsZW1lbnQgPyBldmVudC50b0VsZW1lbnQgOiBldmVudC5mcm9tRWxlbWVudDtcbiAgICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgfSxcbiAgbW92ZW1lbnRYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WCcgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFg7XG4gICAgfVxuXG4gICAgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoZXZlbnQpO1xuICAgIHJldHVybiBsYXN0TW92ZW1lbnRYO1xuICB9LFxuICBtb3ZlbWVudFk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICgnbW92ZW1lbnRZJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGV2ZW50Lm1vdmVtZW50WTtcbiAgICB9IC8vIERvbid0IG5lZWQgdG8gY2FsbCB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZSgpIGhlcmVcbiAgICAvLyBiZWNhdXNlIGl0J3MgZ3VhcmFudGVlZCB0byBoYXZlIGFscmVhZHkgcnVuIHdoZW4gbW92ZW1lbnRYXG4gICAgLy8gd2FzIGNvcGllZC5cblxuXG4gICAgcmV0dXJuIGxhc3RNb3ZlbWVudFk7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KE1vdXNlRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIERyYWdFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIERyYWdFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBkYXRhVHJhbnNmZXI6IDBcbn0pO1xuXG52YXIgU3ludGhldGljRHJhZ0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRHJhZ0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBGb2N1c0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgRm9jdXNFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICByZWxhdGVkVGFyZ2V0OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0ZvY3VzRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChGb2N1c0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI0FuaW1hdGlvbkV2ZW50LWludGVyZmFjZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQW5pbWF0aW9uRXZlbnRcbiAqL1xuXG52YXIgQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGFuaW1hdGlvbk5hbWU6IDAsXG4gIGVsYXBzZWRUaW1lOiAwLFxuICBwc2V1ZG9FbGVtZW50OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NsaXBib2FyZC1hcGlzL1xuICovXG5cbnZhciBDbGlwYm9hcmRFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgY2xpcGJvYXJkRGF0YTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjbGlwYm9hcmREYXRhJyBpbiBldmVudCA/IGV2ZW50LmNsaXBib2FyZERhdGEgOiB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNDbGlwYm9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KENsaXBib2FyZEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1jb21wb3NpdGlvbmV2ZW50c1xuICovXG5cbnZhciBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBkYXRhOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDEzMTEwNVxuICogICAgICAvI2V2ZW50cy1pbnB1dGV2ZW50c1xuICovXG4vLyBIYXBwZW5zIHRvIHNoYXJlIHRoZSBzYW1lIGxpc3QgZm9yIG5vdy5cblxudmFyIFN5bnRoZXRpY0lucHV0RXZlbnQgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuLyoqXG4gKiBOb3JtYWxpemF0aW9uIG9mIGRlcHJlY2F0ZWQgSFRNTDUgYGtleWAgdmFsdWVzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciBub3JtYWxpemVLZXkgPSB7XG4gIEVzYzogJ0VzY2FwZScsXG4gIFNwYWNlYmFyOiAnICcsXG4gIExlZnQ6ICdBcnJvd0xlZnQnLFxuICBVcDogJ0Fycm93VXAnLFxuICBSaWdodDogJ0Fycm93UmlnaHQnLFxuICBEb3duOiAnQXJyb3dEb3duJyxcbiAgRGVsOiAnRGVsZXRlJyxcbiAgV2luOiAnT1MnLFxuICBNZW51OiAnQ29udGV4dE1lbnUnLFxuICBBcHBzOiAnQ29udGV4dE1lbnUnLFxuICBTY3JvbGw6ICdTY3JvbGxMb2NrJyxcbiAgTW96UHJpbnRhYmxlS2V5OiAnVW5pZGVudGlmaWVkJ1xufTtcbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBsZWdhY3kgYGtleUNvZGVgIHRvIEhUTUw1IGBrZXlgXG4gKiBPbmx5IHNwZWNpYWwga2V5cyBzdXBwb3J0ZWQsIGFsbCBvdGhlcnMgZGVwZW5kIG9uIGtleWJvYXJkIGxheW91dCBvciBicm93c2VyXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50I0tleV9uYW1lc1xuICovXG5cbnZhciB0cmFuc2xhdGVUb0tleSA9IHtcbiAgJzgnOiAnQmFja3NwYWNlJyxcbiAgJzknOiAnVGFiJyxcbiAgJzEyJzogJ0NsZWFyJyxcbiAgJzEzJzogJ0VudGVyJyxcbiAgJzE2JzogJ1NoaWZ0JyxcbiAgJzE3JzogJ0NvbnRyb2wnLFxuICAnMTgnOiAnQWx0JyxcbiAgJzE5JzogJ1BhdXNlJyxcbiAgJzIwJzogJ0NhcHNMb2NrJyxcbiAgJzI3JzogJ0VzY2FwZScsXG4gICczMic6ICcgJyxcbiAgJzMzJzogJ1BhZ2VVcCcsXG4gICczNCc6ICdQYWdlRG93bicsXG4gICczNSc6ICdFbmQnLFxuICAnMzYnOiAnSG9tZScsXG4gICczNyc6ICdBcnJvd0xlZnQnLFxuICAnMzgnOiAnQXJyb3dVcCcsXG4gICczOSc6ICdBcnJvd1JpZ2h0JyxcbiAgJzQwJzogJ0Fycm93RG93bicsXG4gICc0NSc6ICdJbnNlcnQnLFxuICAnNDYnOiAnRGVsZXRlJyxcbiAgJzExMic6ICdGMScsXG4gICcxMTMnOiAnRjInLFxuICAnMTE0JzogJ0YzJyxcbiAgJzExNSc6ICdGNCcsXG4gICcxMTYnOiAnRjUnLFxuICAnMTE3JzogJ0Y2JyxcbiAgJzExOCc6ICdGNycsXG4gICcxMTknOiAnRjgnLFxuICAnMTIwJzogJ0Y5JyxcbiAgJzEyMSc6ICdGMTAnLFxuICAnMTIyJzogJ0YxMScsXG4gICcxMjMnOiAnRjEyJyxcbiAgJzE0NCc6ICdOdW1Mb2NrJyxcbiAgJzE0NSc6ICdTY3JvbGxMb2NrJyxcbiAgJzIyNCc6ICdNZXRhJ1xufTtcbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIGBrZXlgIHByb3BlcnR5LlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50S2V5KG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5rZXkpIHtcbiAgICAvLyBOb3JtYWxpemUgaW5jb25zaXN0ZW50IHZhbHVlcyByZXBvcnRlZCBieSBicm93c2VycyBkdWUgdG9cbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgYSB3b3JraW5nIGRyYWZ0IHNwZWNpZmljYXRpb24uXG4gICAgLy8gRmlyZUZveCBpbXBsZW1lbnRzIGBrZXlgIGJ1dCByZXR1cm5zIGBNb3pQcmludGFibGVLZXlgIGZvciBhbGxcbiAgICAvLyBwcmludGFibGUgY2hhcmFjdGVycyAobm9ybWFsaXplZCB0byBgVW5pZGVudGlmaWVkYCksIGlnbm9yZSBpdC5cbiAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuXG4gICAgaWYgKGtleSAhPT0gJ1VuaWRlbnRpZmllZCcpIHtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICB9IC8vIEJyb3dzZXIgZG9lcyBub3QgaW1wbGVtZW50IGBrZXlgLCBwb2x5ZmlsbCBhcyBtdWNoIG9mIGl0IGFzIHdlIGNhbi5cblxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7IC8vIFRoZSBlbnRlci1rZXkgaXMgdGVjaG5pY2FsbHkgYm90aCBwcmludGFibGUgYW5kIG5vbi1wcmludGFibGUgYW5kIGNhblxuICAgIC8vIHRodXMgYmUgY2FwdHVyZWQgYnkgYGtleXByZXNzYCwgbm8gb3RoZXIgbm9uLXByaW50YWJsZSBrZXkgc2hvdWxkLlxuXG4gICAgcmV0dXJuIGNoYXJDb2RlID09PSAxMyA/ICdFbnRlcicgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgfVxuXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxuXG52YXIgbW9kaWZpZXJLZXlUb1Byb3AgPSB7XG4gIEFsdDogJ2FsdEtleScsXG4gIENvbnRyb2w6ICdjdHJsS2V5JyxcbiAgTWV0YTogJ21ldGFLZXknLFxuICBTaGlmdDogJ3NoaWZ0S2V5J1xufTsgLy8gT2xkZXIgYnJvd3NlcnMgKFNhZmFyaSA8PSAxMCwgaU9TIFNhZmFyaSA8PSAxMC4yKSBkbyBub3Qgc3VwcG9ydFxuLy8gZ2V0TW9kaWZpZXJTdGF0ZS4gSWYgZ2V0TW9kaWZpZXJTdGF0ZSBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBtYXAgaXQgdG8gYSBzZXQgb2Zcbi8vIG1vZGlmaWVyIGtleXMgZXhwb3NlZCBieSB0aGUgZXZlbnQuIEluIHRoaXMgY2FzZSwgTG9jay1rZXlzIGFyZSBub3Qgc3VwcG9ydGVkLlxuXG5mdW5jdGlvbiBtb2RpZmllclN0YXRlR2V0dGVyKGtleUFyZykge1xuICB2YXIgc3ludGhldGljRXZlbnQgPSB0aGlzO1xuICB2YXIgbmF0aXZlRXZlbnQgPSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudDtcblxuICBpZiAobmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSkge1xuICAgIHJldHVybiBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKGtleUFyZyk7XG4gIH1cblxuICB2YXIga2V5UHJvcCA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ107XG4gIHJldHVybiBrZXlQcm9wID8gISFuYXRpdmVFdmVudFtrZXlQcm9wXSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG1vZGlmaWVyU3RhdGVHZXR0ZXI7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgS2V5Ym9hcmRFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxuXG52YXIgS2V5Ym9hcmRFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICBrZXk6IGdldEV2ZW50S2V5LFxuICBjb2RlOiAwLFxuICBsb2NhdGlvbjogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgcmVwZWF0OiAwLFxuICBsb2NhbGU6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgLy8gTGVnYWN5IEludGVyZmFjZVxuICBjaGFyQ29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGNoYXJDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5UHJlc3MgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gdGhlIGFjdHVhbCBwcmludGFibGUgY2hhcmFjdGVyLlxuICAgIC8vIEtleVByZXNzIGlzIGRlcHJlY2F0ZWQsIGJ1dCBpdHMgcmVwbGFjZW1lbnQgaXMgbm90IHlldCBmaW5hbCBhbmQgbm90XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gYW55IG1ham9yIGJyb3dzZXIuIE9ubHkgS2V5UHJlc3MgaGFzIGNoYXJDb2RlLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIGtleUNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBrZXlDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5RG93bi9VcCBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyBwaHlzaWNhbCBrZXlib2FyZCBrZXkuXG4gICAgLy8gVGhlIGFjdHVhbCBtZWFuaW5nIG9mIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSB1c2Vycycga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gd2hpY2ggY2Fubm90IGJlIGRldGVjdGVkLiBBc3N1bWluZyB0aGF0IGl0IGlzIGEgVVMga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gcHJvdmlkZXMgYSBzdXJwcmlzaW5nbHkgYWNjdXJhdGUgbWFwcGluZyBmb3IgVVMgYW5kIEV1cm9wZWFuIHVzZXJzLlxuICAgIC8vIER1ZSB0byB0aGlzLCBpdCBpcyBsZWZ0IHRvIHRoZSB1c2VyIHRvIGltcGxlbWVudCBhdCB0aGlzIHRpbWUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgd2hpY2g6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGB3aGljaGAgaXMgYW4gYWxpYXMgZm9yIGVpdGhlciBga2V5Q29kZWAgb3IgYGNoYXJDb2RlYCBkZXBlbmRpbmcgb24gdGhlXG4gICAgLy8gdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChLZXlib2FyZEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBQb2ludGVyRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy9cbiAqL1xuXG52YXIgUG9pbnRlckV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIHBvaW50ZXJJZDogMCxcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMCxcbiAgcHJlc3N1cmU6IDAsXG4gIHRhbmdlbnRpYWxQcmVzc3VyZTogMCxcbiAgdGlsdFg6IDAsXG4gIHRpbHRZOiAwLFxuICB0d2lzdDogMCxcbiAgcG9pbnRlclR5cGU6IDAsXG4gIGlzUHJpbWFyeTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNQb2ludGVyRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChQb2ludGVyRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFRvdWNoRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzL1xuICovXG5cbnZhciBUb3VjaEV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHRvdWNoZXM6IDAsXG4gIHRhcmdldFRvdWNoZXM6IDAsXG4gIGNoYW5nZWRUb3VjaGVzOiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn0pO1xuXG52YXIgU3ludGhldGljVG91Y2hFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRvdWNoRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDkvV0QtY3NzMy10cmFuc2l0aW9ucy0yMDA5MDMyMC8jdHJhbnNpdGlvbi1ldmVudHMtXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UcmFuc2l0aW9uRXZlbnRcbiAqL1xuXG52YXIgVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlID0gYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBwcm9wZXJ0eU5hbWU6IDAsXG4gIGVsYXBzZWRUaW1lOiAwLFxuICBwc2V1ZG9FbGVtZW50OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRyYW5zaXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgV2hlZWxFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIFdoZWVsRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGVsdGFYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVudC5kZWx0YVggOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWCcgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVggOiAwO1xuICB9LFxuICBkZWx0YVk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFZJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWWAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhIDogMDtcbiAgfSxcbiAgZGVsdGFaOiAwLFxuICAvLyBCcm93c2VycyB3aXRob3V0IFwiZGVsdGFNb2RlXCIgaXMgcmVwb3J0aW5nIGluIHJhdyB3aGVlbCBkZWx0YSB3aGVyZSBvbmVcbiAgLy8gbm90Y2ggb24gdGhlIHNjcm9sbCBpcyBhbHdheXMgKy8tIDEyMCwgcm91Z2hseSBlcXVpdmFsZW50IHRvIHBpeGVscy5cbiAgLy8gQSBnb29kIGFwcHJveGltYXRpb24gb2YgRE9NX0RFTFRBX0xJTkUgKDEpIGlzIDUlIG9mIHZpZXdwb3J0IHNpemUgb3JcbiAgLy8gfjQwIHBpeGVscywgZm9yIERPTV9ERUxUQV9TQ1JFRU4gKDIpIGl0IGlzIDg3LjUlIG9mIHZpZXdwb3J0IHNpemUuXG4gIGRlbHRhTW9kZTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNXaGVlbEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoV2hlZWxFdmVudEludGVyZmFjZSk7XG5cbnZhciBFTkRfS0VZQ09ERVMgPSBbOSwgMTMsIDI3LCAzMl07IC8vIFRhYiwgUmV0dXJuLCBFc2MsIFNwYWNlXG5cbnZhciBTVEFSVF9LRVlDT0RFID0gMjI5O1xudmFyIGNhblVzZUNvbXBvc2l0aW9uRXZlbnQgPSBjYW5Vc2VET00gJiYgJ0NvbXBvc2l0aW9uRXZlbnQnIGluIHdpbmRvdztcbnZhciBkb2N1bWVudE1vZGUgPSBudWxsO1xuXG5pZiAoY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB7XG4gIGRvY3VtZW50TW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn0gLy8gV2Via2l0IG9mZmVycyBhIHZlcnkgdXNlZnVsIGB0ZXh0SW5wdXRgIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQgdG9cbi8vIGRpcmVjdGx5IHJlcHJlc2VudCBgYmVmb3JlSW5wdXRgLiBUaGUgSUUgYHRleHRpbnB1dGAgZXZlbnQgaXMgbm90IGFzXG4vLyB1c2VmdWwsIHNvIHdlIGRvbid0IHVzZSBpdC5cblxuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSBjYW5Vc2VET00gJiYgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGU7IC8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG5cbnZhciB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA9IGNhblVzZURPTSAmJiAoIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgfHwgZG9jdW1lbnRNb2RlICYmIGRvY3VtZW50TW9kZSA+IDggJiYgZG9jdW1lbnRNb2RlIDw9IDExKTtcbnZhciBTUEFDRUJBUl9DT0RFID0gMzI7XG52YXIgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09ERSk7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQmVmb3JlSW5wdXQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2tleXByZXNzJywgJ3RleHRJbnB1dCcsICdwYXN0ZSddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uRW5kJywgWydjb21wb3NpdGlvbmVuZCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uU3RhcnQnLCBbJ2NvbXBvc2l0aW9uc3RhcnQnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvblVwZGF0ZScsIFsnY29tcG9zaXRpb251cGRhdGUnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG59IC8vIFRyYWNrIHdoZXRoZXIgd2UndmUgZXZlciBoYW5kbGVkIGEga2V5cHJlc3Mgb24gdGhlIHNwYWNlIGtleS5cblxuXG52YXIgaGFzU3BhY2VLZXlwcmVzcyA9IGZhbHNlO1xuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBhIG5hdGl2ZSBrZXlwcmVzcyBldmVudCBpcyBhc3N1bWVkIHRvIGJlIGEgY29tbWFuZC5cbiAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBGaXJlZm94IGZpcmVzIGBrZXlwcmVzc2AgZXZlbnRzIGZvciBrZXkgY29tbWFuZHNcbiAqIChjdXQsIGNvcHksIHNlbGVjdC1hbGwsIGV0Yy4pIGV2ZW4gdGhvdWdoIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZC5cbiAqL1xuXG5mdW5jdGlvbiBpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkge1xuICByZXR1cm4gKG5hdGl2ZUV2ZW50LmN0cmxLZXkgfHwgbmF0aXZlRXZlbnQuYWx0S2V5IHx8IG5hdGl2ZUV2ZW50Lm1ldGFLZXkpICYmIC8vIGN0cmxLZXkgJiYgYWx0S2V5IGlzIGVxdWl2YWxlbnQgdG8gQWx0R3IsIGFuZCBpcyBub3QgYSBjb21tYW5kLlxuICAhKG5hdGl2ZUV2ZW50LmN0cmxLZXkgJiYgbmF0aXZlRXZlbnQuYWx0S2V5KTtcbn1cbi8qKlxuICogVHJhbnNsYXRlIG5hdGl2ZSB0b3AgbGV2ZWwgZXZlbnRzIGludG8gZXZlbnQgdHlwZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZShkb21FdmVudE5hbWUpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdjb21wb3NpdGlvbnN0YXJ0JzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblN0YXJ0JztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvbkVuZCc7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbnVwZGF0ZSc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25VcGRhdGUnO1xuICB9XG59XG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIGJlc3QtZ3Vlc3MgbW9kZWwgdGhpbmsgdGhpcyBldmVudCBzaWduaWZpZXMgdGhhdFxuICogY29tcG9zaXRpb24gaGFzIGJlZ3VuP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4gZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicgJiYgbmF0aXZlRXZlbnQua2V5Q29kZSA9PT0gU1RBUlRfS0VZQ09ERTtcbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgbW9kZSB0aGluayB0aGF0IHRoaXMgZXZlbnQgaXMgdGhlIGVuZCBvZiBjb21wb3NpdGlvbj9cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgLy8gQ29tbWFuZCBrZXlzIGluc2VydCBvciBjbGVhciBJTUUgaW5wdXQuXG4gICAgICByZXR1cm4gRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSkgIT09IC0xO1xuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgICAvLyBFeHBlY3QgSU1FIGtleUNvZGUgb24gZWFjaCBrZXlkb3duLiBJZiB3ZSBnZXQgYW55IG90aGVyXG4gICAgICAvLyBjb2RlIHdlIG11c3QgaGF2ZSBleGl0ZWQgZWFybGllci5cbiAgICAgIHJldHVybiBuYXRpdmVFdmVudC5rZXlDb2RlICE9PSBTVEFSVF9LRVlDT0RFO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgLy8gRXZlbnRzIGFyZSBub3QgcG9zc2libGUgd2l0aG91dCBjYW5jZWxsaW5nIElNRS5cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBHb29nbGUgSW5wdXQgVG9vbHMgcHJvdmlkZXMgY29tcG9zaXRpb24gZGF0YSB2aWEgYSBDdXN0b21FdmVudCxcbiAqIHdpdGggdGhlIGBkYXRhYCBwcm9wZXJ0eSBwb3B1bGF0ZWQgaW4gdGhlIGBkZXRhaWxgIG9iamVjdC4gSWYgdGhpc1xuICogaXMgYXZhaWxhYmxlIG9uIHRoZSBldmVudCBvYmplY3QsIHVzZSBpdC4gSWYgbm90LCB0aGlzIGlzIGEgcGxhaW5cbiAqIGNvbXBvc2l0aW9uIGV2ZW50IGFuZCB3ZSBoYXZlIG5vdGhpbmcgc3BlY2lhbCB0byBleHRyYWN0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRldGFpbCA9IG5hdGl2ZUV2ZW50LmRldGFpbDtcblxuICBpZiAodHlwZW9mIGRldGFpbCA9PT0gJ29iamVjdCcgJiYgJ2RhdGEnIGluIGRldGFpbCkge1xuICAgIHJldHVybiBkZXRhaWwuZGF0YTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBDaGVjayBpZiBhIGNvbXBvc2l0aW9uIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgS29yZWFuIElNRS5cbiAqIE91ciBmYWxsYmFjayBtb2RlIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIElFJ3MgS29yZWFuIElNRSxcbiAqIHNvIGp1c3QgdXNlIG5hdGl2ZSBjb21wb3NpdGlvbiBldmVudHMgd2hlbiBLb3JlYW4gSU1FIGlzIHVzZWQuXG4gKiBBbHRob3VnaCBDb21wb3NpdGlvbkV2ZW50LmxvY2FsZSBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLFxuICogaXQgaXMgYXZhaWxhYmxlIGluIElFLCB3aGVyZSBvdXIgZmFsbGJhY2sgbW9kZSBpcyBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG5hdGl2ZUV2ZW50LmxvY2FsZSA9PT0gJ2tvJztcbn0gLy8gVHJhY2sgdGhlIGN1cnJlbnQgSU1FIGNvbXBvc2l0aW9uIHN0YXR1cywgaWYgYW55LlxuXG5cbnZhciBpc0NvbXBvc2luZyA9IGZhbHNlO1xuLyoqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuXG4gKi9cblxuZnVuY3Rpb24gZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGV2ZW50VHlwZTtcbiAgdmFyIGZhbGxiYWNrRGF0YTtcblxuICBpZiAoY2FuVXNlQ29tcG9zaXRpb25FdmVudCkge1xuICAgIGV2ZW50VHlwZSA9IGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSk7XG4gIH0gZWxzZSBpZiAoIWlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvblN0YXJ0JztcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgZXZlbnRUeXBlID0gJ29uQ29tcG9zaXRpb25FbmQnO1xuICB9XG5cbiAgaWYgKCFldmVudFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiAhaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkpIHtcbiAgICAvLyBUaGUgY3VycmVudCBjb21wb3NpdGlvbiBpcyBzdG9yZWQgc3RhdGljYWxseSBhbmQgbXVzdCBub3QgYmVcbiAgICAvLyBvdmVyd3JpdHRlbiB3aGlsZSBjb21wb3NpdGlvbiBjb250aW51ZXMuXG4gICAgaWYgKCFpc0NvbXBvc2luZyAmJiBldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uU3RhcnQnKSB7XG4gICAgICBpc0NvbXBvc2luZyA9IGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnb25Db21wb3NpdGlvbkVuZCcpIHtcbiAgICAgIGlmIChpc0NvbXBvc2luZykge1xuICAgICAgICBmYWxsYmFja0RhdGEgPSBnZXREYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCBldmVudFR5cGUpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50KGV2ZW50VHlwZSwgZG9tRXZlbnROYW1lLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuXG4gICAgaWYgKGZhbGxiYWNrRGF0YSkge1xuICAgICAgLy8gSW5qZWN0IGRhdGEgZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2sgcGF0aCBpbnRvIHRoZSBzeW50aGV0aWMgZXZlbnQuXG4gICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIHByb3BlcnR5IG9mIG5hdGl2ZSBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlLlxuICAgICAgZXZlbnQuZGF0YSA9IGZhbGxiYWNrRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGN1c3RvbURhdGEgPSBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgICAgaWYgKGN1c3RvbURhdGEgIT09IG51bGwpIHtcbiAgICAgICAgZXZlbnQuZGF0YSA9IGN1c3RvbURhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogSWYgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCBvdXIgZ29hbCBpcyB0byBtYWtlXG4gICAgICAgKiB1c2Ugb2YgdGhlbS4gSG93ZXZlciwgdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2U6IHRoZSBzcGFjZWJhciBrZXkuXG4gICAgICAgKiBJbiBXZWJraXQsIHByZXZlbnRpbmcgZGVmYXVsdCBvbiBhIHNwYWNlYmFyIGB0ZXh0SW5wdXRgIGV2ZW50XG4gICAgICAgKiBjYW5jZWxzIGNoYXJhY3RlciBpbnNlcnRpb24sIGJ1dCBpdCAqYWxzbyogY2F1c2VzIHRoZSBicm93c2VyXG4gICAgICAgKiB0byBmYWxsIGJhY2sgdG8gaXRzIGRlZmF1bHQgc3BhY2ViYXIgYmVoYXZpb3Igb2Ygc2Nyb2xsaW5nIHRoZVxuICAgICAgICogcGFnZS5cbiAgICAgICAqXG4gICAgICAgKiBUcmFja2luZyBhdDpcbiAgICAgICAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNTUxMDNcbiAgICAgICAqXG4gICAgICAgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB1c2UgdGhlIGtleXByZXNzIGV2ZW50IGFzIGlmIG5vIGB0ZXh0SW5wdXRgXG4gICAgICAgKiBldmVudCBpcyBhdmFpbGFibGUuXG4gICAgICAgKi9cbiAgICAgIHZhciB3aGljaCA9IG5hdGl2ZUV2ZW50LndoaWNoO1xuXG4gICAgICBpZiAod2hpY2ggIT09IFNQQUNFQkFSX0NPREUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGhhc1NwYWNlS2V5cHJlc3MgPSB0cnVlO1xuICAgICAgcmV0dXJuIFNQQUNFQkFSX0NIQVI7XG5cbiAgICBjYXNlICd0ZXh0SW5wdXQnOlxuICAgICAgLy8gUmVjb3JkIHRoZSBjaGFyYWN0ZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSBET00uXG4gICAgICB2YXIgY2hhcnMgPSBuYXRpdmVFdmVudC5kYXRhOyAvLyBJZiBpdCdzIGEgc3BhY2ViYXIgY2hhcmFjdGVyLCBhc3N1bWUgdGhhdCB3ZSBoYXZlIGFscmVhZHkgaGFuZGxlZFxuICAgICAgLy8gaXQgYXQgdGhlIGtleXByZXNzIGxldmVsIGFuZCBiYWlsIGltbWVkaWF0ZWx5LiBBbmRyb2lkIENocm9tZVxuICAgICAgLy8gZG9lc24ndCBnaXZlIHVzIGtleWNvZGVzLCBzbyB3ZSBuZWVkIHRvIGlnbm9yZSBpdC5cblxuICAgICAgaWYgKGNoYXJzID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBGb3Igb3RoZXIgbmF0aXZlIGV2ZW50IHR5cGVzLCBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qKlxuICogRm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlIGB0ZXh0SW5wdXRgIGV2ZW50LCBleHRyYWN0IHRoZVxuICogYXBwcm9wcmlhdGUgc3RyaW5nIHRvIHVzZSBmb3IgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgY29tcG9zaW5nIChJTUUpIGFuZCB1c2luZyBhIGZhbGxiYWNrIHRvIGRvIHNvLFxuICAvLyB0cnkgdG8gZXh0cmFjdCB0aGUgY29tcG9zZWQgY2hhcmFjdGVycyBmcm9tIHRoZSBmYWxsYmFjayBvYmplY3QuXG4gIC8vIElmIGNvbXBvc2l0aW9uIGV2ZW50IGlzIGF2YWlsYWJsZSwgd2UgZXh0cmFjdCBhIHN0cmluZyBvbmx5IGF0XG4gIC8vIGNvbXBvc2l0aW9uZXZlbnQsIG90aGVyd2lzZSBleHRyYWN0IGl0IGF0IGZhbGxiYWNrIGV2ZW50cy5cbiAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NvbXBvc2l0aW9uZW5kJyB8fCAhY2FuVXNlQ29tcG9zaXRpb25FdmVudCAmJiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHZhciBjaGFycyA9IGdldERhdGEoKTtcbiAgICAgIHJlc2V0KCk7XG4gICAgICBpc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGNoYXJzO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdwYXN0ZSc6XG4gICAgICAvLyBJZiBhIHBhc3RlIGV2ZW50IG9jY3VycyBhZnRlciBhIGtleXByZXNzLCB0aHJvdyBvdXQgdGhlIGlucHV0XG4gICAgICAvLyBjaGFycy4gUGFzdGUgZXZlbnRzIHNob3VsZCBub3QgbGVhZCB0byBCZWZvcmVJbnB1dCBldmVudHMuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogQXMgb2YgdjI3LCBGaXJlZm94IG1heSBmaXJlIGtleXByZXNzIGV2ZW50cyBldmVuIHdoZW4gbm8gY2hhcmFjdGVyXG4gICAgICAgKiB3aWxsIGJlIGluc2VydGVkLiBBIGZldyBwb3NzaWJpbGl0aWVzOlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyBgMGAuIEFycm93IGtleXMsIEVzYyBrZXksIGV0Yy5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBubyBjaGFyIGlzIGF2YWlsYWJsZS5cbiAgICAgICAqICAgRXg6ICdBbHRHciArIGRgIGluIFBvbGlzaC4gVGhlcmUgaXMgbm8gbW9kaWZpZWQgY2hhcmFjdGVyIGZvclxuICAgICAgICogICB0aGlzIGtleSBjb21iaW5hdGlvbiBhbmQgbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkIGludG8gdGhlXG4gICAgICAgKiAgIGRvY3VtZW50LCBidXQgRkYgZmlyZXMgdGhlIGtleXByZXNzIGZvciBjaGFyIGNvZGUgYDEwMGAgYW55d2F5LlxuICAgICAgICogICBObyBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgYSBjb21tYW5kIGNvbWJpbmF0aW9uIGlzXG4gICAgICAgKiAgIGJlaW5nIHVzZWQuIEV4OiBgQ21kK0NgLiBObyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGFuZCBub1xuICAgICAgICogICBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKi9cbiAgICAgIGlmICghaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgIC8vIElFIGZpcmVzIHRoZSBga2V5cHJlc3NgIGV2ZW50IHdoZW4gYSB1c2VyIHR5cGVzIGFuIGVtb2ppIHZpYVxuICAgICAgICAvLyBUb3VjaCBrZXlib2FyZCBvZiBXaW5kb3dzLiAgSW4gc3VjaCBhIGNhc2UsIHRoZSBgY2hhcmAgcHJvcGVydHlcbiAgICAgICAgLy8gaG9sZHMgYW4gZW1vamkgY2hhcmFjdGVyIGxpa2UgYFxcdUQ4M0RcXHVERTBBYC4gIEJlY2F1c2UgaXRzIGxlbmd0aFxuICAgICAgICAvLyBpcyAyLCB0aGUgcHJvcGVydHkgYHdoaWNoYCBkb2VzIG5vdCByZXByZXNlbnQgYW4gZW1vamkgY29ycmVjdGx5LlxuICAgICAgICAvLyBJbiBzdWNoIGEgY2FzZSwgd2UgZGlyZWN0bHkgcmV0dXJuIHRoZSBgY2hhcmAgcHJvcGVydHkgaW5zdGVhZCBvZlxuICAgICAgICAvLyB1c2luZyBgd2hpY2hgLlxuICAgICAgICBpZiAobmF0aXZlRXZlbnQuY2hhciAmJiBuYXRpdmVFdmVudC5jaGFyLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmF0aXZlRXZlbnQuY2hhcjtcbiAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVFdmVudC53aGljaCkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiAhaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkgPyBudWxsIDogbmF0aXZlRXZlbnQuZGF0YTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBFeHRyYWN0IGEgU3ludGhldGljSW5wdXRFdmVudCBmb3IgYGJlZm9yZUlucHV0YCwgYmFzZWQgb24gZWl0aGVyIG5hdGl2ZVxuICogYHRleHRJbnB1dGAgb3IgZmFsbGJhY2sgYmVoYXZpb3IuXG4gKlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGNoYXJzO1xuXG4gIGlmIChjYW5Vc2VUZXh0SW5wdXRFdmVudCkge1xuICAgIGNoYXJzID0gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBjaGFycyA9IGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSAvLyBJZiBubyBjaGFyYWN0ZXJzIGFyZSBiZWluZyBpbnNlcnRlZCwgbm8gQmVmb3JlSW5wdXQgZXZlbnQgc2hvdWxkXG4gIC8vIGJlIGZpcmVkLlxuXG5cbiAgaWYgKCFjaGFycykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCAnb25CZWZvcmVJbnB1dCcpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNJbnB1dEV2ZW50KCdvbkJlZm9yZUlucHV0JywgJ2JlZm9yZWlucHV0JywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgICBldmVudC5kYXRhID0gY2hhcnM7XG4gIH1cbn1cbi8qKlxuICogQ3JlYXRlIGFuIGBvbkJlZm9yZUlucHV0YCBldmVudCB0byBtYXRjaFxuICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDUvI2V2ZW50cy1pbnB1dGV2ZW50cy5cbiAqXG4gKiBUaGlzIGV2ZW50IHBsdWdpbiBpcyBiYXNlZCBvbiB0aGUgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50XG4gKiBhdmFpbGFibGUgaW4gQ2hyb21lLCBTYWZhcmksIE9wZXJhLCBhbmQgSUUuIFRoaXMgZXZlbnQgZmlyZXMgYWZ0ZXJcbiAqIGBvbktleVByZXNzYCBhbmQgYG9uQ29tcG9zaXRpb25FbmRgLCBidXQgYmVmb3JlIGBvbklucHV0YC5cbiAqXG4gKiBgYmVmb3JlSW5wdXRgIGlzIHNwZWMnZCBidXQgbm90IGltcGxlbWVudGVkIGluIGFueSBicm93c2VycywgYW5kXG4gKiB0aGUgYGlucHV0YCBldmVudCBkb2VzIG5vdCBwcm92aWRlIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBoYXNcbiAqIGFjdHVhbGx5IGJlZW4gYWRkZWQsIGNvbnRyYXJ5IHRvIHRoZSBzcGVjLiBUaHVzLCBgdGV4dElucHV0YCBpcyB0aGUgYmVzdFxuICogYXZhaWxhYmxlIGV2ZW50IHRvIGlkZW50aWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGluc2VydGVkXG4gKiBpbnRvIHRoZSB0YXJnZXQgbm9kZS5cbiAqXG4gKiBUaGlzIHBsdWdpbiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBgY29tcG9zaXRpb25gIGV2ZW50cywgdGh1c1xuICogYWxsb3dpbmcgdXMgdG8gc2hhcmUgY29tcG9zaXRpb24gZmFsbGJhY2sgY29kZSBmb3IgYm90aCBgYmVmb3JlSW5wdXRgIGFuZFxuICogYGNvbXBvc2l0aW9uYCBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1pbnB1dC1lbGVtZW50Lmh0bWwjaW5wdXQtdHlwZS1hdHRyLXN1bW1hcnlcbiAqL1xudmFyIHN1cHBvcnRlZElucHV0VHlwZXMgPSB7XG4gIGNvbG9yOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBkYXRldGltZTogdHJ1ZSxcbiAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSxcbiAgZW1haWw6IHRydWUsXG4gIG1vbnRoOiB0cnVlLFxuICBudW1iZXI6IHRydWUsXG4gIHBhc3N3b3JkOiB0cnVlLFxuICByYW5nZTogdHJ1ZSxcbiAgc2VhcmNoOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIHRleHQ6IHRydWUsXG4gIHRpbWU6IHRydWUsXG4gIHVybDogdHJ1ZSxcbiAgd2VlazogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNUZXh0SW5wdXRFbGVtZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICByZXR1cm4gISFzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV07XG4gIH1cblxuICBpZiAobm9kZU5hbWUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cbiAqXG4gKiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZvciBub24tZ2VuZXJpYyBldmVudHMgc3VjaCBhcyBgY2hhbmdlYCxcbiAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLlxuICpcbiAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcuIFwiY2xpY2tcIi5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IGlzIHN1cHBvcnRlZC5cbiAqIEBpbnRlcm5hbFxuICogQGxpY2Vuc2UgTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUXG4gKi9cblxuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgpIHtcbiAgaWYgKCFjYW5Vc2VET00pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZXZlbnROYW1lID0gJ29uJyArIGV2ZW50TmFtZVN1ZmZpeDtcbiAgdmFyIGlzU3VwcG9ydGVkID0gKGV2ZW50TmFtZSBpbiBkb2N1bWVudCk7XG5cbiAgaWYgKCFpc1N1cHBvcnRlZCkge1xuICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lLCAncmV0dXJuOycpO1xuICAgIGlzU3VwcG9ydGVkID0gdHlwZW9mIGVsZW1lbnRbZXZlbnROYW1lXSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHJldHVybiBpc1N1cHBvcnRlZDtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMSgpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNoYW5nZScsIFsnY2hhbmdlJywgJ2NsaWNrJywgJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnLCAnaW5wdXQnLCAna2V5ZG93bicsICdrZXl1cCcsICdzZWxlY3Rpb25jaGFuZ2UnXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBpbnN0LCBuYXRpdmVFdmVudCwgdGFyZ2V0KSB7XG4gIC8vIEZsYWcgdGhpcyBldmVudCBsb29wIGFzIG5lZWRpbmcgc3RhdGUgcmVzdG9yZS5cbiAgZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpO1xuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGluc3QsICdvbkNoYW5nZScpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudCgnb25DaGFuZ2UnLCAnY2hhbmdlJywgbnVsbCwgbmF0aXZlRXZlbnQsIHRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogRm9yIElFIHNoaW1zXG4gKi9cblxuXG52YXIgYWN0aXZlRWxlbWVudCA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNoYW5nZWAgZXZlbnRcbiAqL1xuXG5mdW5jdGlvbiBzaG91bGRVc2VDaGFuZ2VFdmVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgPT09ICdzZWxlY3QnIHx8IG5vZGVOYW1lID09PSAnaW5wdXQnICYmIGVsZW0udHlwZSA9PT0gJ2ZpbGUnO1xufVxuXG5mdW5jdGlvbiBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBhY3RpdmVFbGVtZW50SW5zdCwgbmF0aXZlRXZlbnQsIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSk7IC8vIElmIGNoYW5nZSBhbmQgcHJvcGVydHljaGFuZ2UgYnViYmxlZCwgd2UnZCBqdXN0IGJpbmQgdG8gaXQgbGlrZSBhbGwgdGhlXG4gIC8vIG90aGVyIGV2ZW50cyBhbmQgaGF2ZSBpdCBnbyB0aHJvdWdoIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci4gU2luY2UgaXRcbiAgLy8gZG9lc24ndCwgd2UgbWFudWFsbHkgbGlzdGVuIGZvciB0aGUgZXZlbnRzIGFuZCBzbyB3ZSBoYXZlIHRvIGVucXVldWUgYW5kXG4gIC8vIHByb2Nlc3MgdGhlIGFic3RyYWN0IGV2ZW50IG1hbnVhbGx5LlxuICAvL1xuICAvLyBCYXRjaGluZyBpcyBuZWNlc3NhcnkgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBhbGwgZXZlbnQgaGFuZGxlcnMgcnVuXG4gIC8vIGJlZm9yZSB0aGUgbmV4dCByZXJlbmRlciAoaW5jbHVkaW5nIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkIHRvIGFuY2VzdG9yXG4gIC8vIGVsZW1lbnRzIGluc3RlYWQgb2YgZGlyZWN0bHkgb24gdGhlIGlucHV0KS4gV2l0aG91dCB0aGlzLCBjb250cm9sbGVkXG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBjb25qdW5jdGlvbiB3aXRoIGV2ZW50IGJ1YmJsaW5nIGJlY2F1c2VcbiAgLy8gdGhlIGNvbXBvbmVudCBpcyByZXJlbmRlcmVkIGFuZCB0aGUgdmFsdWUgcmV2ZXJ0ZWQgYmVmb3JlIGFsbCB0aGUgZXZlbnRcbiAgLy8gaGFuZGxlcnMgY2FuIHJ1bi4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzA4LlxuXG4gIGJhdGNoZWRVcGRhdGVzKHJ1bkV2ZW50SW5CYXRjaCwgZGlzcGF0Y2hRdWV1ZSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChkaXNwYXRjaFF1ZXVlKSB7XG4gIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIDApO1xufVxuXG5mdW5jdGlvbiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCkge1xuICB2YXIgdGFyZ2V0Tm9kZSA9IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCk7XG5cbiAgaWYgKHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKHRhcmdldE5vZGUpKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgaW5wdXRgIGV2ZW50XG4gKi9cblxuXG52YXIgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gZmFsc2U7XG5cbmlmIChjYW5Vc2VET00pIHtcbiAgLy8gSUU5IGNsYWltcyB0byBzdXBwb3J0IHRoZSBpbnB1dCBldmVudCBidXQgZmFpbHMgdG8gdHJpZ2dlciBpdCB3aGVuXG4gIC8vIGRlbGV0aW5nIHRleHQsIHNvIHdlIGlnbm9yZSBpdHMgaW5wdXQgZXZlbnRzLlxuICBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBpc0V2ZW50U3VwcG9ydGVkKCdpbnB1dCcpICYmICghZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDkpO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgU3RhcnRzIHRyYWNraW5nIHByb3BlcnR5Y2hhbmdlIGV2ZW50cyBvbiB0aGUgcGFzc2VkLWluIGVsZW1lbnRcbiAqIGFuZCBvdmVycmlkZSB0aGUgdmFsdWUgcHJvcGVydHkgc28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggdXNlciBldmVudHMgZnJvbVxuICogdmFsdWUgY2hhbmdlcyBpbiBKUy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgYWN0aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0O1xuICBhY3RpdmVFbGVtZW50LmF0dGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgUmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnRseS10cmFja2VkIGVsZW1lbnQsXG4gKiBpZiBhbnkgZXhpc3RzLlxuICovXG5cblxuZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSB7XG4gIGlmICghYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFjdGl2ZUVsZW1lbnQuZGV0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG4gIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBIYW5kbGVzIGEgcHJvcGVydHljaGFuZ2UgZXZlbnQsIHNlbmRpbmcgYSBgY2hhbmdlYCBldmVudCBpZlxuICogdGhlIHZhbHVlIG9mIHRoZSBhY3RpdmUgZWxlbWVudCBoYXMgY2hhbmdlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5wcm9wZXJ0eU5hbWUgIT09ICd2YWx1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KSkge1xuICAgIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUsIHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNpbicpIHtcbiAgICAvLyBJbiBJRTksIHByb3BlcnR5Y2hhbmdlIGZpcmVzIGZvciBtb3N0IGlucHV0IGV2ZW50cyBidXQgaXMgYnVnZ3kgYW5kXG4gICAgLy8gZG9lc24ndCBmaXJlIHdoZW4gdGV4dCBpcyBkZWxldGVkLCBidXQgY29udmVuaWVudGx5LCBzZWxlY3Rpb25jaGFuZ2VcbiAgICAvLyBhcHBlYXJzIHRvIGZpcmUgaW4gYWxsIG9mIHRoZSByZW1haW5pbmcgY2FzZXMgc28gd2UgY2F0Y2ggdGhvc2UgYW5kXG4gICAgLy8gZm9yd2FyZCB0aGUgZXZlbnQgaWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgLy8gSW4gZWl0aGVyIGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gY2FsbCB0aGUgZXZlbnQgaGFuZGxlciBpZiB0aGUgdmFsdWVcbiAgICAvLyBpcyBjaGFuZ2VkIGZyb20gSlMgc28gd2UgcmVkZWZpbmUgYSBzZXR0ZXIgZm9yIGAudmFsdWVgIHRoYXQgdXBkYXRlc1xuICAgIC8vIG91ciBhY3RpdmVFbGVtZW50VmFsdWUgdmFyaWFibGUsIGFsbG93aW5nIHVzIHRvIGlnbm9yZSB0aG9zZSBjaGFuZ2VzXG4gICAgLy9cbiAgICAvLyBzdG9wV2F0Y2hpbmcoKSBzaG91bGQgYmUgYSBub29wIGhlcmUgYnV0IHdlIGNhbGwgaXQganVzdCBpbiBjYXNlIHdlXG4gICAgLy8gbWlzc2VkIGEgYmx1ciBldmVudCBzb21laG93LlxuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gICAgc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCk7XG4gIH0gZWxzZSBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNvdXQnKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgfVxufSAvLyBGb3IgSUU4IGFuZCBJRTkuXG5cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScgfHwgZG9tRXZlbnROYW1lID09PSAna2V5dXAnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2tleWRvd24nKSB7XG4gICAgLy8gT24gdGhlIHNlbGVjdGlvbmNoYW5nZSBldmVudCwgdGhlIHRhcmdldCBpcyBqdXN0IGRvY3VtZW50IHdoaWNoIGlzbid0XG4gICAgLy8gaGVscGZ1bCBmb3IgdXMgc28ganVzdCBjaGVjayBhY3RpdmVFbGVtZW50IGluc3RlYWQuXG4gICAgLy9cbiAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIGtleWRvd24gYW5kIGtleXVwIGFyZW4ndCBuZWNlc3NhcnkuIElFOCBmYWlscyB0byBmaXJlXG4gICAgLy8gcHJvcGVydHljaGFuZ2Ugb24gdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFmdGVyIHNldHRpbmcgYHZhbHVlYCBmcm9tIGFcbiAgICAvLyBzY3JpcHQgYW5kIGZpcmVzIG9ubHkga2V5ZG93biwga2V5cHJlc3MsIGtleXVwLiBDYXRjaGluZyBrZXl1cCB1c3VhbGx5XG4gICAgLy8gZ2V0cyBpdCBhbmQgY2F0Y2hpbmcga2V5ZG93biBsZXRzIHVzIGZpcmUgYW4gZXZlbnQgZm9yIHRoZSBmaXJzdFxuICAgIC8vIGtleXN0cm9rZSBpZiB1c2VyIGRvZXMgYSBrZXkgcmVwZWF0IChpdCdsbCBiZSBhIGxpdHRsZSBkZWxheWVkOiByaWdodFxuICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIGtleXN0cm9rZSkuIE90aGVyIGlucHV0IG1ldGhvZHMgKGUuZy4sIHBhc3RlKSBzZWVtIHRvXG4gICAgLy8gZmlyZSBzZWxlY3Rpb25jaGFuZ2Ugbm9ybWFsbHkuXG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCk7XG4gIH1cbn1cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjbGlja2AgZXZlbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNsaWNrRXZlbnQoZWxlbSkge1xuICAvLyBVc2UgdGhlIGBjbGlja2AgZXZlbnQgdG8gZGV0ZWN0IGNoYW5nZXMgdG8gY2hlY2tib3ggYW5kIHJhZGlvIGlucHV0cy5cbiAgLy8gVGhpcyBhcHByb2FjaCB3b3JrcyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCB3aGVyZWFzIGBjaGFuZ2VgIGRvZXMgbm90IGZpcmVcbiAgLy8gdW50aWwgYGJsdXJgIGluIElFOC5cbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIG5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBlbGVtLnR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NsaWNrJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2lucHV0JyB8fCBkb21FdmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fd3JhcHBlclN0YXRlO1xuXG4gIGlmICghc3RhdGUgfHwgIXN0YXRlLmNvbnRyb2xsZWQgfHwgbm9kZS50eXBlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICAvLyBJZiBjb250cm9sbGVkLCBhc3NpZ24gdGhlIHZhbHVlIGF0dHJpYnV0ZSB0byB0aGUgY3VycmVudCB2YWx1ZSBvbiBibHVyXG4gICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsICdudW1iZXInLCBub2RlLnZhbHVlKTtcbiAgfVxufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAgZXZlbnQgdGhhdCBub3JtYWxpemVzIGNoYW5nZSBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLiBUaGlzIGV2ZW50IGZpcmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG9cbiAqIGNoYW5nZSB0aGUgZWxlbWVudCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBzZWxlY3RcbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG4gIHZhciBnZXRUYXJnZXRJbnN0RnVuYywgaGFuZGxlRXZlbnRGdW5jO1xuXG4gIGlmIChzaG91bGRVc2VDaGFuZ2VFdmVudCh0YXJnZXROb2RlKSkge1xuICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50O1xuICB9IGVsc2UgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSkge1xuICAgIGlmIChpc0lucHV0RXZlbnRTdXBwb3J0ZWQpIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzaG91bGRVc2VDbGlja0V2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudDtcbiAgfVxuXG4gIGlmIChnZXRUYXJnZXRJbnN0RnVuYykge1xuICAgIHZhciBpbnN0ID0gZ2V0VGFyZ2V0SW5zdEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KTtcblxuICAgIGlmIChpbnN0KSB7XG4gICAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgaW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgaGFuZGxlRXZlbnRGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0Tm9kZSwgdGFyZ2V0SW5zdCk7XG4gIH0gLy8gV2hlbiBibHVycmluZywgc2V0IHRoZSB2YWx1ZSBhdHRyaWJ1dGUgZm9yIG51bWJlciBpbnB1dHNcblxuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKHRhcmdldE5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDIoKSB7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VFbnRlcicsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvbk1vdXNlTGVhdmUnLCBbJ21vdXNlb3V0JywgJ21vdXNlb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyRW50ZXInLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uUG9pbnRlckxlYXZlJywgWydwb2ludGVyb3V0JywgJ3BvaW50ZXJvdmVyJ10pO1xufVxuLyoqXG4gKiBGb3IgYWxtb3N0IGV2ZXJ5IGludGVyYWN0aW9uIHdlIGNhcmUgYWJvdXQsIHRoZXJlIHdpbGwgYmUgYm90aCBhIHRvcC1sZXZlbFxuICogYG1vdXNlb3ZlcmAgYW5kIGBtb3VzZW91dGAgZXZlbnQgdGhhdCBvY2N1cnMuIE9ubHkgdXNlIGBtb3VzZW91dGAgc28gdGhhdFxuICogd2UgZG8gbm90IGV4dHJhY3QgZHVwbGljYXRlIGV2ZW50cy4gSG93ZXZlciwgbW92aW5nIHRoZSBtb3VzZSBpbnRvIHRoZVxuICogYnJvd3NlciBmcm9tIG91dHNpZGUgd2lsbCBub3QgZmlyZSBhIGBtb3VzZW91dGAgZXZlbnQuIEluIHRoaXMgY2FzZSwgd2UgdXNlXG4gKiB0aGUgYG1vdXNlb3ZlcmAgdG9wLWxldmVsIGV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQyKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGlzT3ZlckV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdmVyJyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3Zlcic7XG4gIHZhciBpc091dEV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdXQnO1xuXG4gIGlmIChpc092ZXJFdmVudCAmJiAhaXNSZXBsYXlpbmdFdmVudChuYXRpdmVFdmVudCkpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGFuIG92ZXIgZXZlbnQgd2l0aCBhIHRhcmdldCwgd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IGRpc3BhdGNoZWRcbiAgICAvLyB0aGUgZXZlbnQgaW4gdGhlIG91dCBldmVudCBvZiB0aGUgb3RoZXIgdGFyZ2V0LiBJZiB0aGlzIGlzIHJlcGxheWVkLFxuICAgIC8vIHRoZW4gaXQncyBiZWNhdXNlIHdlIGNvdWxkbid0IGRpc3BhdGNoIGFnYWluc3QgdGhpcyB0YXJnZXQgcHJldmlvdXNseVxuICAgIC8vIHNvIHdlIGhhdmUgdG8gZG8gaXQgbm93IGluc3RlYWQuXG4gICAgdmFyIHJlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LmZyb21FbGVtZW50O1xuXG4gICAgaWYgKHJlbGF0ZWQpIHtcbiAgICAgIC8vIElmIHRoZSByZWxhdGVkIG5vZGUgaXMgbWFuYWdlZCBieSBSZWFjdCwgd2UgY2FuIGFzc3VtZSB0aGF0IHdlIGhhdmVcbiAgICAgIC8vIGFscmVhZHkgZGlzcGF0Y2hlZCB0aGUgY29ycmVzcG9uZGluZyBldmVudHMgZHVyaW5nIGl0cyBtb3VzZW91dC5cbiAgICAgIGlmIChnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyZWxhdGVkKSB8fCBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChyZWxhdGVkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc091dEV2ZW50ICYmICFpc092ZXJFdmVudCkge1xuICAgIC8vIE11c3Qgbm90IGJlIGEgbW91c2Ugb3IgcG9pbnRlciBpbiBvciBvdXQgLSBpZ25vcmluZy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgd2luOyAvLyBUT0RPOiB3aHkgaXMgdGhpcyBudWxsYWJsZSBpbiB0aGUgdHlwZXMgYnV0IHdlIHJlYWQgZnJvbSBpdD9cblxuICBpZiAobmF0aXZlRXZlbnRUYXJnZXQud2luZG93ID09PSBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIC8vIGBuYXRpdmVFdmVudFRhcmdldGAgaXMgcHJvYmFibHkgYSB3aW5kb3cgb2JqZWN0LlxuICAgIHdpbiA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGBvd25lckRvY3VtZW50YCBpcyBzb21ldGltZXMgdW5kZWZpbmVkIGluIElFOC5cbiAgICB2YXIgZG9jID0gbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcblxuICAgIGlmIChkb2MpIHtcbiAgICAgIHdpbiA9IGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW4gPSB3aW5kb3c7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZyb207XG4gIHZhciB0bztcblxuICBpZiAoaXNPdXRFdmVudCkge1xuICAgIHZhciBfcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50O1xuXG4gICAgZnJvbSA9IHRhcmdldEluc3Q7XG4gICAgdG8gPSBfcmVsYXRlZCA/IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKF9yZWxhdGVkKSA6IG51bGw7XG5cbiAgICBpZiAodG8gIT09IG51bGwpIHtcbiAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodG8pO1xuXG4gICAgICBpZiAodG8gIT09IG5lYXJlc3RNb3VudGVkIHx8IHRvLnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiB0by50YWcgIT09IEhvc3RUZXh0KSB7XG4gICAgICAgIHRvID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTW92aW5nIHRvIGEgbm9kZSBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdy5cbiAgICBmcm9tID0gbnVsbDtcbiAgICB0byA9IHRhcmdldEluc3Q7XG4gIH1cblxuICBpZiAoZnJvbSA9PT0gdG8pIHtcbiAgICAvLyBOb3RoaW5nIHBlcnRhaW5zIHRvIG91ciBtYW5hZ2VkIGNvbXBvbmVudHMuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gIHZhciBsZWF2ZUV2ZW50VHlwZSA9ICdvbk1vdXNlTGVhdmUnO1xuICB2YXIgZW50ZXJFdmVudFR5cGUgPSAnb25Nb3VzZUVudGVyJztcbiAgdmFyIGV2ZW50VHlwZVByZWZpeCA9ICdtb3VzZSc7XG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdmVyJykge1xuICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICBsZWF2ZUV2ZW50VHlwZSA9ICdvblBvaW50ZXJMZWF2ZSc7XG4gICAgZW50ZXJFdmVudFR5cGUgPSAnb25Qb2ludGVyRW50ZXInO1xuICAgIGV2ZW50VHlwZVByZWZpeCA9ICdwb2ludGVyJztcbiAgfVxuXG4gIHZhciBmcm9tTm9kZSA9IGZyb20gPT0gbnVsbCA/IHdpbiA6IGdldE5vZGVGcm9tSW5zdGFuY2UoZnJvbSk7XG4gIHZhciB0b05vZGUgPSB0byA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZSh0byk7XG4gIHZhciBsZWF2ZSA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IobGVhdmVFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeCArICdsZWF2ZScsIGZyb20sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIGxlYXZlLnRhcmdldCA9IGZyb21Ob2RlO1xuICBsZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gdG9Ob2RlO1xuICB2YXIgZW50ZXIgPSBudWxsOyAvLyBXZSBzaG91bGQgb25seSBwcm9jZXNzIHRoaXMgbmF0aXZlRXZlbnQgaWYgd2UgYXJlIHByb2Nlc3NpbmdcbiAgLy8gdGhlIGZpcnN0IGFuY2VzdG9yLiBOZXh0IHRpbWUsIHdlIHdpbGwgaWdub3JlIHRoZSBldmVudC5cblxuICB2YXIgbmF0aXZlVGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAobmF0aXZlVGFyZ2V0SW5zdCA9PT0gdGFyZ2V0SW5zdCkge1xuICAgIHZhciBlbnRlckV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihlbnRlckV2ZW50VHlwZSwgZXZlbnRUeXBlUHJlZml4ICsgJ2VudGVyJywgdG8sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZW50ZXJFdmVudC50YXJnZXQgPSB0b05vZGU7XG4gICAgZW50ZXJFdmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJvbU5vZGU7XG4gICAgZW50ZXIgPSBlbnRlckV2ZW50O1xuICB9XG5cbiAgYWNjdW11bGF0ZUVudGVyTGVhdmVUd29QaGFzZUxpc3RlbmVycyhkaXNwYXRjaFF1ZXVlLCBsZWF2ZSwgZW50ZXIsIGZyb20sIHRvKTtcbn1cblxuLyoqXG4gKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAqL1xuZnVuY3Rpb24gaXMoeCwgeSkge1xuICByZXR1cm4geCA9PT0geSAmJiAoeCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkpIHx8IHggIT09IHggJiYgeSAhPT0geSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuICA7XG59XG5cbnZhciBvYmplY3RJcyA9IHR5cGVvZiBPYmplY3QuaXMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QuaXMgOiBpcztcblxuLyoqXG4gKiBQZXJmb3JtcyBlcXVhbGl0eSBieSBpdGVyYXRpbmcgdGhyb3VnaCBrZXlzIG9uIGFuIG9iamVjdCBhbmQgcmV0dXJuaW5nIGZhbHNlXG4gKiB3aGVuIGFueSBrZXkgaGFzIHZhbHVlcyB3aGljaCBhcmUgbm90IHN0cmljdGx5IGVxdWFsIGJldHdlZW4gdGhlIGFyZ3VtZW50cy5cbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgYWxsIGtleXMgYXJlIHN0cmljdGx5IGVxdWFsLlxuICovXG5cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChvYmplY3RJcyhvYmpBLCBvYmpCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBUZXN0IGZvciBBJ3Mga2V5cyBkaWZmZXJlbnQgZnJvbSBCLlxuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjdXJyZW50S2V5ID0ga2V5c0FbaV07XG5cbiAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwob2JqQiwgY3VycmVudEtleSkgfHwgIW9iamVjdElzKG9iakFbY3VycmVudEtleV0sIG9iakJbY3VycmVudEtleV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2l2ZW4gYW55IG5vZGUgcmV0dXJuIHRoZSBmaXJzdCBsZWFmIG5vZGUgd2l0aG91dCBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSAmJiBub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICBub2RlID0gbm9kZS5maXJzdENoaWxkO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG4vKipcbiAqIEdldCB0aGUgbmV4dCBzaWJsaW5nIHdpdGhpbiBhIGNvbnRhaW5lci4gVGhpcyB3aWxsIHdhbGsgdXAgdGhlXG4gKiBET00gaWYgYSBub2RlJ3Mgc2libGluZ3MgaGF2ZSBiZWVuIGV4aGF1c3RlZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4gez9ET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0U2libGluZ05vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG59XG4vKipcbiAqIEdldCBvYmplY3QgZGVzY3JpYmluZyB0aGUgbm9kZXMgd2hpY2ggY29udGFpbiBjaGFyYWN0ZXJzIGF0IG9mZnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IHJvb3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KHJvb3QsIG9mZnNldCkge1xuICB2YXIgbm9kZSA9IGdldExlYWZOb2RlKHJvb3QpO1xuICB2YXIgbm9kZVN0YXJ0ID0gMDtcbiAgdmFyIG5vZGVFbmQgPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgbm9kZUVuZCA9IG5vZGVTdGFydCArIG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZVN0YXJ0IDw9IG9mZnNldCAmJiBub2RlRW5kID49IG9mZnNldCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQgLSBub2RlU3RhcnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbm9kZVN0YXJ0ID0gbm9kZUVuZDtcbiAgICB9XG5cbiAgICBub2RlID0gZ2V0TGVhZk5vZGUoZ2V0U2libGluZ05vZGUobm9kZSkpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBvdXRlck5vZGVcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0cyhvdXRlck5vZGUpIHtcbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBvdXRlck5vZGUub3duZXJEb2N1bWVudDtcbiAgdmFyIHdpbiA9IG93bmVyRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uICYmIHdpbi5nZXRTZWxlY3Rpb24oKTtcblxuICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGFuY2hvck5vZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQgPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7IC8vIEluIEZpcmVmb3gsIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBjYW4gYmUgXCJhbm9ueW1vdXMgZGl2c1wiLCBlLmcuIHRoZVxuICAvLyB1cC9kb3duIGJ1dHRvbnMgb24gYW4gPGlucHV0IHR5cGU9XCJudW1iZXJcIj4uIEFub255bW91cyBkaXZzIGRvIG5vdCBzZWVtIHRvXG4gIC8vIGV4cG9zZSBwcm9wZXJ0aWVzLCB0cmlnZ2VyaW5nIGEgXCJQZXJtaXNzaW9uIGRlbmllZCBlcnJvclwiIGlmIGFueSBvZiBpdHNcbiAgLy8gcHJvcGVydGllcyBhcmUgYWNjZXNzZWQuIFRoZSBvbmx5IHNlZW1pbmdseSBwb3NzaWJsZSB3YXkgdG8gYXZvaWQgZXJyb3JpbmdcbiAgLy8gaXMgdG8gYWNjZXNzIGEgcHJvcGVydHkgdGhhdCB0eXBpY2FsbHkgd29ya3MgZm9yIG5vbi1hbm9ueW1vdXMgZGl2cyBhbmRcbiAgLy8gY2F0Y2ggYW55IGVycm9yIHRoYXQgbWF5IG90aGVyd2lzZSBhcmlzZS4gU2VlXG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQyN1xuXG4gIHRyeSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgYW5jaG9yTm9kZS5ub2RlVHlwZTtcbiAgICBmb2N1c05vZGUubm9kZVR5cGU7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbn1cbi8qKlxuICogUmV0dXJucyB7c3RhcnQsIGVuZH0gd2hlcmUgYHN0YXJ0YCBpcyB0aGUgY2hhcmFjdGVyL2NvZGVwb2ludCBpbmRleCBvZlxuICogKGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCkgd2l0aGluIHRoZSB0ZXh0Q29udGVudCBvZiBgb3V0ZXJOb2RlYCwgYW5kXG4gKiBgZW5kYCBpcyB0aGUgaW5kZXggb2YgKGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpLlxuICpcbiAqIFJldHVybnMgbnVsbCBpZiB5b3UgcGFzcyBpbiBnYXJiYWdlIGlucHV0IGJ1dCB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBjcmFzaC5cbiAqXG4gKiBFeHBvcnRlZCBvbmx5IGZvciB0ZXN0aW5nLlxuICovXG5cbmZ1bmN0aW9uIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KSB7XG4gIHZhciBsZW5ndGggPSAwO1xuICB2YXIgc3RhcnQgPSAtMTtcbiAgdmFyIGVuZCA9IC0xO1xuICB2YXIgaW5kZXhXaXRoaW5BbmNob3IgPSAwO1xuICB2YXIgaW5kZXhXaXRoaW5Gb2N1cyA9IDA7XG4gIHZhciBub2RlID0gb3V0ZXJOb2RlO1xuICB2YXIgcGFyZW50Tm9kZSA9IG51bGw7XG5cbiAgb3V0ZXI6IHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIG5leHQgPSBudWxsO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBhbmNob3JOb2RlICYmIChhbmNob3JPZmZzZXQgPT09IDAgfHwgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSkge1xuICAgICAgICBzdGFydCA9IGxlbmd0aCArIGFuY2hvck9mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZvY3VzTm9kZSAmJiAoZm9jdXNPZmZzZXQgPT09IDAgfHwgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSkge1xuICAgICAgICBlbmQgPSBsZW5ndGggKyBmb2N1c09mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgICBsZW5ndGggKz0gbm9kZS5ub2RlVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLmZpcnN0Q2hpbGQpID09PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBNb3ZpbmcgZnJvbSBgbm9kZWAgdG8gaXRzIGZpcnN0IGNoaWxkIGBuZXh0YC5cblxuXG4gICAgICBwYXJlbnROb2RlID0gbm9kZTtcbiAgICAgIG5vZGUgPSBuZXh0O1xuICAgIH1cblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gb3V0ZXJOb2RlKSB7XG4gICAgICAgIC8vIElmIGBvdXRlck5vZGVgIGhhcyBjaGlsZHJlbiwgdGhpcyBpcyBhbHdheXMgdGhlIHNlY29uZCB0aW1lIHZpc2l0aW5nXG4gICAgICAgIC8vIGl0LiBJZiBpdCBoYXMgbm8gY2hpbGRyZW4sIHRoaXMgaXMgc3RpbGwgdGhlIGZpcnN0IGxvb3AsIGFuZCB0aGUgb25seVxuICAgICAgICAvLyB2YWxpZCBzZWxlY3Rpb24gaXMgYW5jaG9yTm9kZSBhbmQgZm9jdXNOb2RlIGJvdGggZXF1YWwgdG8gdGhpcyBub2RlXG4gICAgICAgIC8vIGFuZCBib3RoIG9mZnNldHMgMCwgaW4gd2hpY2ggY2FzZSB3ZSB3aWxsIGhhdmUgaGFuZGxlZCBhYm92ZS5cbiAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnROb2RlID09PSBhbmNob3JOb2RlICYmICsraW5kZXhXaXRoaW5BbmNob3IgPT09IGFuY2hvck9mZnNldCkge1xuICAgICAgICBzdGFydCA9IGxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGZvY3VzTm9kZSAmJiArK2luZGV4V2l0aGluRm9jdXMgPT09IGZvY3VzT2Zmc2V0KSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKChuZXh0ID0gbm9kZS5uZXh0U2libGluZykgIT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBwYXJlbnROb2RlO1xuICAgICAgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgbmV4dCBzaWJsaW5nIGBuZXh0YC5cblxuXG4gICAgbm9kZSA9IG5leHQ7XG4gIH1cblxuICBpZiAoc3RhcnQgPT09IC0xIHx8IGVuZCA9PT0gLTEpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uIChXb3VsZCBoYXBwZW4gaWYgdGhlIGFuY2hvci9mb2N1cyBub2RlcyBhcmVuJ3RcbiAgICAvLyBhY3R1YWxseSBpbnNpZGUgdGhlIHBhc3NlZC1pbiBub2RlLilcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kXG4gIH07XG59XG4vKipcbiAqIEluIG1vZGVybiBub24tSUUgYnJvd3NlcnMsIHdlIGNhbiBzdXBwb3J0IGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmRcbiAqIHNlbGVjdGlvbnMuXG4gKlxuICogTm90ZTogSUUxMCsgc3VwcG9ydHMgdGhlIFNlbGVjdGlvbiBvYmplY3QsIGJ1dCBpdCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGUgYGV4dGVuZGAgbWV0aG9kLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gaW4gbW9kZXJuIElFLCBpdCdzIG5vdCBwb3NzaWJsZVxuICogdG8gcHJvZ3JhbW1hdGljYWxseSBjcmVhdGUgYSBiYWNrd2FyZCBzZWxlY3Rpb24uIFRodXMsIGZvciBhbGwgSUVcbiAqIHZlcnNpb25zLCB3ZSB1c2UgdGhlIG9sZCBJRSBBUEkgdG8gY3JlYXRlIG91ciBzZWxlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAqL1xuXG5mdW5jdGlvbiBzZXRPZmZzZXRzKG5vZGUsIG9mZnNldHMpIHtcbiAgdmFyIGRvYyA9IG5vZGUub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcbiAgdmFyIHdpbiA9IGRvYyAmJiBkb2MuZGVmYXVsdFZpZXcgfHwgd2luZG93OyAvLyBFZGdlIGZhaWxzIHdpdGggXCJPYmplY3QgZXhwZWN0ZWRcIiBpbiBzb21lIHNjZW5hcmlvcy5cbiAgLy8gKEZvciBpbnN0YW5jZTogVGlueU1DRSBlZGl0b3IgdXNlZCBpbiBhIGxpc3QgY29tcG9uZW50IHRoYXQgc3VwcG9ydHMgcGFzdGluZyB0byBhZGQgbW9yZSxcbiAgLy8gZmFpbHMgd2hlbiBwYXN0aW5nIDEwMCsgaXRlbXMpXG5cbiAgaWYgKCF3aW4uZ2V0U2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgdmFyIGxlbmd0aCA9IG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICB2YXIgc3RhcnQgPSBNYXRoLm1pbihvZmZzZXRzLnN0YXJ0LCBsZW5ndGgpO1xuICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQgPT09IHVuZGVmaW5lZCA/IHN0YXJ0IDogTWF0aC5taW4ob2Zmc2V0cy5lbmQsIGxlbmd0aCk7IC8vIElFIDExIHVzZXMgbW9kZXJuIHNlbGVjdGlvbiwgYnV0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZXh0ZW5kIG1ldGhvZC5cbiAgLy8gRmxpcCBiYWNrd2FyZCBzZWxlY3Rpb25zLCBzbyB3ZSBjYW4gc2V0IHdpdGggYSBzaW5nbGUgcmFuZ2UuXG5cbiAgaWYgKCFzZWxlY3Rpb24uZXh0ZW5kICYmIHN0YXJ0ID4gZW5kKSB7XG4gICAgdmFyIHRlbXAgPSBlbmQ7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSB0ZW1wO1xuICB9XG5cbiAgdmFyIHN0YXJ0TWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBzdGFydCk7XG4gIHZhciBlbmRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIGVuZCk7XG5cbiAgaWYgKHN0YXJ0TWFya2VyICYmIGVuZE1hcmtlcikge1xuICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMSAmJiBzZWxlY3Rpb24uYW5jaG9yTm9kZSA9PT0gc3RhcnRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0ID09PSBzdGFydE1hcmtlci5vZmZzZXQgJiYgc2VsZWN0aW9uLmZvY3VzTm9kZSA9PT0gZW5kTWFya2VyLm5vZGUgJiYgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0ID09PSBlbmRNYXJrZXIub2Zmc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJhbmdlID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnRNYXJrZXIubm9kZSwgc3RhcnRNYXJrZXIub2Zmc2V0KTtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICBzZWxlY3Rpb24uZXh0ZW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2Uuc2V0RW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREU7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICBpZiAoIW91dGVyTm9kZSB8fCAhaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZSA9PT0gaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShvdXRlck5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUoaW5uZXJOb2RlKSkge1xuICAgIHJldHVybiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUucGFyZW50Tm9kZSk7XG4gIH0gZWxzZSBpZiAoJ2NvbnRhaW5zJyBpbiBvdXRlck5vZGUpIHtcbiAgICByZXR1cm4gb3V0ZXJOb2RlLmNvbnRhaW5zKGlubmVyTm9kZSk7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuICEhKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpbm5lck5vZGUpICYgMTYpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luRG9jdW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm93bmVyRG9jdW1lbnQgJiYgY29udGFpbnNOb2RlKG5vZGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmlnaW5GcmFtZShpZnJhbWUpIHtcbiAgdHJ5IHtcbiAgICAvLyBBY2Nlc3NpbmcgdGhlIGNvbnRlbnREb2N1bWVudCBvZiBhIEhUTUxJZnJhbWVFbGVtZW50IGNhbiBjYXVzZSB0aGUgYnJvd3NlclxuICAgIC8vIHRvIHRocm93LCBlLmcuIGlmIGl0IGhhcyBhIGNyb3NzLW9yaWdpbiBzcmMgYXR0cmlidXRlLlxuICAgIC8vIFNhZmFyaSB3aWxsIHNob3cgYW4gZXJyb3IgaW4gdGhlIGNvbnNvbGUgd2hlbiB0aGUgYWNjZXNzIHJlc3VsdHMgaW4gXCJCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW5cIi4gZS5nOlxuICAgIC8vIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgLy8gQSBzYWZldHkgd2F5IGlzIHRvIGFjY2VzcyBvbmUgb2YgdGhlIGNyb3NzIG9yaWdpbiBwcm9wZXJ0aWVzOiBXaW5kb3cgb3IgTG9jYXRpb25cbiAgICAvLyBXaGljaCBtaWdodCByZXN1bHQgaW4gXCJTZWN1cml0eUVycm9yXCIgRE9NIEV4Y2VwdGlvbiBhbmQgaXQgaXMgY29tcGF0aWJsZSB0byBTYWZhcmkuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvYnJvd3NlcnMuaHRtbCNpbnRlZ3JhdGlvbi13aXRoLWlkbFxuICAgIHJldHVybiB0eXBlb2YgaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9PT0gJ3N0cmluZyc7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50RGVlcCgpIHtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KCk7XG5cbiAgd2hpbGUgKGVsZW1lbnQgaW5zdGFuY2VvZiB3aW4uSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNTYW1lT3JpZ2luRnJhbWUoZWxlbWVudCkpIHtcbiAgICAgIHdpbiA9IGVsZW1lbnQuY29udGVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQod2luLmRvY3VtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuLyoqXG4gKiBAUmVhY3RJbnB1dFNlbGVjdGlvbjogUmVhY3QgaW5wdXQgc2VsZWN0aW9uIG1vZHVsZS4gQmFzZWQgb24gU2VsZWN0aW9uLmpzLFxuICogYnV0IG1vZGlmaWVkIHRvIGJlIHN1aXRhYmxlIGZvciByZWFjdCBhbmQgaGFzIGEgY291cGxlIG9mIGJ1ZyBmaXhlcyAoZG9lc24ndFxuICogYXNzdW1lIGJ1dHRvbnMgaGF2ZSByYW5nZSBzZWxlY3Rpb25zIGFsbG93ZWQpLlxuICogSW5wdXQgc2VsZWN0aW9uIG1vZHVsZSBmb3IgUmVhY3QuXG4gKi9cblxuLyoqXG4gKiBAaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOiB3ZSBnZXQgdGhlIGVsZW1lbnQgdHlwZXMgdGhhdCBzdXBwb3J0IHNlbGVjdGlvblxuICogZnJvbSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkby1ub3QtYXBwbHksIGxvb2tpbmcgYXQgYHNlbGVjdGlvblN0YXJ0YFxuICogYW5kIGBzZWxlY3Rpb25FbmRgIHJvd3MuXG4gKi9cblxuXG5mdW5jdGlvbiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIChlbGVtLnR5cGUgPT09ICd0ZXh0JyB8fCBlbGVtLnR5cGUgPT09ICdzZWFyY2gnIHx8IGVsZW0udHlwZSA9PT0gJ3RlbCcgfHwgZWxlbS50eXBlID09PSAndXJsJyB8fCBlbGVtLnR5cGUgPT09ICdwYXNzd29yZCcpIHx8IG5vZGVOYW1lID09PSAndGV4dGFyZWEnIHx8IGVsZW0uY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xufVxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24oKSB7XG4gIHZhciBmb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKCk7XG4gIHJldHVybiB7XG4gICAgZm9jdXNlZEVsZW06IGZvY3VzZWRFbGVtLFxuICAgIHNlbGVjdGlvblJhbmdlOiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZm9jdXNlZEVsZW0pID8gZ2V0U2VsZWN0aW9uKGZvY3VzZWRFbGVtKSA6IG51bGxcbiAgfTtcbn1cbi8qKlxuICogQHJlc3RvcmVTZWxlY3Rpb246IElmIGFueSBzZWxlY3Rpb24gaW5mb3JtYXRpb24gd2FzIHBvdGVudGlhbGx5IGxvc3QsXG4gKiByZXN0b3JlIGl0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHJlbW92ZSBkb21cbiAqIG5vZGVzIGFuZCBwbGFjZSB0aGVtIGJhY2sgaW4sIHJlc3VsdGluZyBpbiBmb2N1cyBiZWluZyBsb3N0LlxuICovXG5cbmZ1bmN0aW9uIHJlc3RvcmVTZWxlY3Rpb24ocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbikge1xuICB2YXIgY3VyRm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcCgpO1xuICB2YXIgcHJpb3JGb2N1c2VkRWxlbSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uZm9jdXNlZEVsZW07XG4gIHZhciBwcmlvclNlbGVjdGlvblJhbmdlID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5zZWxlY3Rpb25SYW5nZTtcblxuICBpZiAoY3VyRm9jdXNlZEVsZW0gIT09IHByaW9yRm9jdXNlZEVsZW0gJiYgaXNJbkRvY3VtZW50KHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgaWYgKHByaW9yU2VsZWN0aW9uUmFuZ2UgIT09IG51bGwgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgICBzZXRTZWxlY3Rpb24ocHJpb3JGb2N1c2VkRWxlbSwgcHJpb3JTZWxlY3Rpb25SYW5nZSk7XG4gICAgfSAvLyBGb2N1c2luZyBhIG5vZGUgY2FuIGNoYW5nZSB0aGUgc2Nyb2xsIHBvc2l0aW9uLCB3aGljaCBpcyB1bmRlc2lyYWJsZVxuXG5cbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdmFyIGFuY2VzdG9yID0gcHJpb3JGb2N1c2VkRWxlbTtcblxuICAgIHdoaWxlIChhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChhbmNlc3Rvci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIGFuY2VzdG9ycy5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50OiBhbmNlc3RvcixcbiAgICAgICAgICBsZWZ0OiBhbmNlc3Rvci5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHRvcDogYW5jZXN0b3Iuc2Nyb2xsVG9wXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cygpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5jZXN0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IGFuY2VzdG9yc1tpXTtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxMZWZ0ID0gaW5mby5sZWZ0O1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbFRvcCA9IGluZm8udG9wO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBAZ2V0U2VsZWN0aW9uOiBHZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgZm9jdXNlZCB0ZXh0YXJlYSwgaW5wdXQgb3JcbiAqIGNvbnRlbnRFZGl0YWJsZSBub2RlLlxuICogLUBpbnB1dDogTG9vayB1cCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXRcbiAqIC1AcmV0dXJuIHtzdGFydDogc2VsZWN0aW9uU3RhcnQsIGVuZDogc2VsZWN0aW9uRW5kfVxuICovXG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbihpbnB1dCkge1xuICB2YXIgc2VsZWN0aW9uO1xuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXIgd2l0aCBpbnB1dCBvciB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSB7XG4gICAgICBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gQ29udGVudCBlZGl0YWJsZSBvciBvbGQgSUUgdGV4dGFyZWEuXG4gICAgc2VsZWN0aW9uID0gZ2V0T2Zmc2V0cyhpbnB1dCk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0aW9uIHx8IHtcbiAgICBzdGFydDogMCxcbiAgICBlbmQ6IDBcbiAgfTtcbn1cbi8qKlxuICogQHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVhIG9yIGlucHV0IGFuZCBmb2N1c2VzXG4gKiB0aGUgaW5wdXQuXG4gKiAtQGlucHV0ICAgICBTZXQgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0IG9yIHRleHRhcmVhXG4gKiAtQG9mZnNldHMgICBPYmplY3Qgb2Ygc2FtZSBmb3JtIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBnZXQqXG4gKi9cblxuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGlucHV0LCBvZmZzZXRzKSB7XG4gIHZhciBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZDtcblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgfVxuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcbiAgICBpbnB1dC5zZWxlY3Rpb25FbmQgPSBNYXRoLm1pbihlbmQsIGlucHV0LnZhbHVlLmxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgc2V0T2Zmc2V0cyhpbnB1dCwgb2Zmc2V0cyk7XG4gIH1cbn1cblxudmFyIHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCA9IGNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUgPD0gMTE7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25TZWxlY3QnLCBbJ2ZvY3Vzb3V0JywgJ2NvbnRleHRtZW51JywgJ2RyYWdlbmQnLCAnZm9jdXNpbicsICdrZXlkb3duJywgJ2tleXVwJywgJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ3NlbGVjdGlvbmNoYW5nZSddKTtcbn1cblxudmFyIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG52YXIgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG52YXIgbW91c2VEb3duID0gZmFsc2U7XG4vKipcbiAqIEdldCBhbiBvYmplY3Qgd2hpY2ggaXMgYSB1bmlxdWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICpcbiAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBub3QgYmUgY29uc2lzdGVudCBhY3Jvc3Mgbm9kZXMgb3IgYnJvd3NlcnMsIGJ1dFxuICogdHdvIGlkZW50aWNhbCBzZWxlY3Rpb25zIG9uIHRoZSBzYW1lIG5vZGUgd2lsbCByZXR1cm4gaWRlbnRpY2FsIG9iamVjdHMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uJDEobm9kZSkge1xuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBub2RlICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhub2RlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogbm9kZS5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciB3aW4gPSBub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICAgIHJldHVybiB7XG4gICAgICBhbmNob3JOb2RlOiBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldDogc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZTogc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0OiBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICB9O1xuICB9XG59XG4vKipcbiAqIEdldCBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50IHRhcmdldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQoZXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIGV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gZXZlbnRUYXJnZXQgPyBldmVudFRhcmdldC5kb2N1bWVudCA6IGV2ZW50VGFyZ2V0Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gZXZlbnRUYXJnZXQgOiBldmVudFRhcmdldC5vd25lckRvY3VtZW50O1xufVxuLyoqXG4gKiBQb2xsIHNlbGVjdGlvbiB0byBzZWUgd2hldGhlciBpdCdzIGNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRUYXJnZXRcbiAqIEByZXR1cm4gez9TeW50aGV0aWNFdmVudH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZWxlbWVudCwgYW5kIHRoYXQgdGhlIHVzZXIgaXMgbm90IGRyYWdnaW5nIGFcbiAgLy8gc2VsZWN0aW9uICh0aGlzIG1hdGNoZXMgbmF0aXZlIGBzZWxlY3RgIGV2ZW50IGJlaGF2aW9yKS4gSW4gSFRNTDUsIHNlbGVjdFxuICAvLyBmaXJlcyBvbmx5IG9uIGlucHV0IGFuZCB0ZXh0YXJlYSB0aHVzIGlmIHRoZXJlJ3Mgbm8gZm9jdXNlZCBlbGVtZW50IHdlXG4gIC8vIHdvbid0IGRpc3BhdGNoLlxuICB2YXIgZG9jID0gZ2V0RXZlbnRUYXJnZXREb2N1bWVudChuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKG1vdXNlRG93biB8fCBhY3RpdmVFbGVtZW50JDEgPT0gbnVsbCB8fCBhY3RpdmVFbGVtZW50JDEgIT09IGdldEFjdGl2ZUVsZW1lbnQoZG9jKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBPbmx5IGZpcmUgd2hlbiBzZWxlY3Rpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG5cblxuICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbiQxKGFjdGl2ZUVsZW1lbnQkMSk7XG5cbiAgaWYgKCFsYXN0U2VsZWN0aW9uIHx8ICFzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgY3VycmVudFNlbGVjdGlvbikpIHtcbiAgICBsYXN0U2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjtcbiAgICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGFjdGl2ZUVsZW1lbnRJbnN0JDEsICdvblNlbGVjdCcpO1xuXG4gICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoJ29uU2VsZWN0JywgJ3NlbGVjdCcsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICAgIGV2ZW50LnRhcmdldCA9IGFjdGl2ZUVsZW1lbnQkMTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25TZWxlY3RgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBzZWxlY3QgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBjb250ZW50RWRpdGFibGVcbiAqXG4gKiBUaGlzIGRpZmZlcnMgZnJvbSBuYXRpdmUgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICogLSBGaXJlcyBvbiBjb250ZW50RWRpdGFibGUgZmllbGRzIGFzIHdlbGwgYXMgaW5wdXRzLlxuICogLSBGaXJlcyBmb3IgY29sbGFwc2VkIHNlbGVjdGlvbi5cbiAqIC0gRmlyZXMgYWZ0ZXIgdXNlciBpbnB1dC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAvLyBUcmFjayB0aGUgaW5wdXQgbm9kZSB0aGF0IGhhcyBmb2N1cy5cbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkgfHwgdGFyZ2V0Tm9kZS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJykge1xuICAgICAgICBhY3RpdmVFbGVtZW50JDEgPSB0YXJnZXROb2RlO1xuICAgICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbiAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBudWxsO1xuICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICAvLyBEb24ndCBmaXJlIHRoZSBldmVudCB3aGlsZSB0aGUgdXNlciBpcyBkcmFnZ2luZy4gVGhpcyBtYXRjaGVzIHRoZVxuICAgIC8vIHNlbWFudGljcyBvZiB0aGUgbmF0aXZlIHNlbGVjdCBldmVudC5cblxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgICBtb3VzZURvd24gPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgY2FzZSAnbW91c2V1cCc6XG4gICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgICBtb3VzZURvd24gPSBmYWxzZTtcbiAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBicmVhaztcbiAgICAvLyBDaHJvbWUgYW5kIElFIGZpcmUgbm9uLXN0YW5kYXJkIGV2ZW50IHdoZW4gc2VsZWN0aW9uIGlzIGNoYW5nZWQgKGFuZFxuICAgIC8vIHNvbWV0aW1lcyB3aGVuIGl0IGhhc24ndCkuIElFJ3MgZXZlbnQgZmlyZXMgb3V0IG9mIG9yZGVyIHdpdGggcmVzcGVjdFxuICAgIC8vIHRvIGtleSBhbmQgaW5wdXQgZXZlbnRzIG9uIGRlbGV0aW9uLCBzbyB3ZSBkaXNjYXJkIGl0LlxuICAgIC8vXG4gICAgLy8gRmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgc2VsZWN0aW9uY2hhbmdlLCBzbyBjaGVjayBzZWxlY3Rpb24gc3RhdHVzXG4gICAgLy8gYWZ0ZXIgZWFjaCBrZXkgZW50cnkuIFRoZSBzZWxlY3Rpb24gY2hhbmdlcyBhZnRlciBrZXlkb3duIGFuZCBiZWZvcmVcbiAgICAvLyBrZXl1cCwgYnV0IHdlIGNoZWNrIG9uIGtleWRvd24gYXMgd2VsbCBpbiB0aGUgY2FzZSBvZiBob2xkaW5nIGRvd24gYVxuICAgIC8vIGtleSwgd2hlbiBtdWx0aXBsZSBrZXlkb3duIGV2ZW50cyBhcmUgZmlyZWQgYnV0IG9ubHkgb25lIGtleXVwIGlzLlxuICAgIC8vIFRoaXMgaXMgYWxzbyBvdXIgYXBwcm9hY2ggZm9yIElFIGhhbmRsaW5nLCBmb3IgdGhlIHJlYXNvbiBhYm92ZS5cblxuICAgIGNhc2UgJ3NlbGVjdGlvbmNoYW5nZSc6XG4gICAgICBpZiAoc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgLy8gZmFsbHMgdGhyb3VnaFxuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbWFwcGluZyBvZiBzdGFuZGFyZCB2ZW5kb3IgcHJlZml4ZXMgdXNpbmcgdGhlIGRlZmluZWQgc3R5bGUgcHJvcGVydHkgYW5kIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlUHJvcFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gIHZhciBwcmVmaXhlcyA9IHt9O1xuICBwcmVmaXhlc1tzdHlsZVByb3AudG9Mb3dlckNhc2UoKV0gPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcHJlZml4ZXNbJ1dlYmtpdCcgKyBzdHlsZVByb3BdID0gJ3dlYmtpdCcgKyBldmVudE5hbWU7XG4gIHByZWZpeGVzWydNb3onICsgc3R5bGVQcm9wXSA9ICdtb3onICsgZXZlbnROYW1lO1xuICByZXR1cm4gcHJlZml4ZXM7XG59XG4vKipcbiAqIEEgbGlzdCBvZiBldmVudCBuYW1lcyB0byBhIGNvbmZpZ3VyYWJsZSBsaXN0IG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xuXG5cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkl0ZXJhdGlvbicpLFxuICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvblN0YXJ0JyksXG4gIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ1RyYW5zaXRpb24nLCAnVHJhbnNpdGlvbkVuZCcpXG59O1xuLyoqXG4gKiBFdmVudCBuYW1lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGRldGVjdGVkIGFuZCBwcmVmaXhlZCAoaWYgYXBwbGljYWJsZSkuXG4gKi9cblxudmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuLyoqXG4gKiBFbGVtZW50IHRvIGNoZWNrIGZvciBwcmVmaXhlcyBvbi5cbiAqL1xuXG52YXIgc3R5bGUgPSB7fTtcbi8qKlxuICogQm9vdHN0cmFwIGlmIGEgRE9NIGV4aXN0cy5cbiAqL1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7IC8vIE9uIHNvbWUgcGxhdGZvcm1zLCBpbiBwYXJ0aWN1bGFyIHNvbWUgcmVsZWFzZXMgb2YgQW5kcm9pZCA0LngsXG4gIC8vIHRoZSB1bi1wcmVmaXhlZCBcImFuaW1hdGlvblwiIGFuZCBcInRyYW5zaXRpb25cIiBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIG9uIHRoZVxuICAvLyBzdHlsZSBvYmplY3QgYnV0IHRoZSBldmVudHMgdGhhdCBmaXJlIHdpbGwgc3RpbGwgYmUgcHJlZml4ZWQsIHNvIHdlIG5lZWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlIHVuLXByZWZpeGVkIGV2ZW50cyBhcmUgdXNhYmxlLCBhbmQgaWYgbm90IHJlbW92ZSB0aGVtIGZyb20gdGhlIG1hcC5cblxuICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uO1xuICB9IC8vIFNhbWUgYXMgYWJvdmVcblxuXG4gIGlmICghKCdUcmFuc2l0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uO1xuICB9XG59XG4vKipcbiAqIEF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2ZW5kb3IgcHJlZml4ZWQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gIGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgfSBlbHNlIGlmICghdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBldmVudE5hbWU7XG4gIH1cblxuICB2YXIgcHJlZml4TWFwID0gdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXTtcblxuICBmb3IgKHZhciBzdHlsZVByb3AgaW4gcHJlZml4TWFwKSB7XG4gICAgaWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3ApICYmIHN0eWxlUHJvcCBpbiBzdHlsZSkge1xuICAgICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50TmFtZTtcbn1cblxudmFyIEFOSU1BVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uZW5kJyk7XG52YXIgQU5JTUFUSU9OX0lURVJBVElPTiA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25pdGVyYXRpb24nKTtcbnZhciBBTklNQVRJT05fU1RBUlQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uc3RhcnQnKTtcbnZhciBUUkFOU0lUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCd0cmFuc2l0aW9uZW5kJyk7XG5cbnZhciB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcyA9IG5ldyBNYXAoKTsgLy8gTk9URTogQ2FwaXRhbGl6YXRpb24gaXMgaW1wb3J0YW50IGluIHRoaXMgbGlzdCFcbi8vXG4vLyBFLmcuIGl0IG5lZWRzIFwicG9pbnRlckRvd25cIiwgbm90IFwicG9pbnRlcmRvd25cIi5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBkZXJpdmUgYm90aCBSZWFjdCBuYW1lIChcIm9uUG9pbnRlckRvd25cIilcbi8vIGFuZCBET00gbmFtZSAoXCJwb2ludGVyZG93blwiKSBmcm9tIHRoZSBzYW1lIGxpc3QuXG4vL1xuLy8gRXhjZXB0aW9ucyB0aGF0IGRvbid0IG1hdGNoIHRoaXMgY29udmVudGlvbiBhcmUgbGlzdGVkIHNlcGFyYXRlbHkuXG4vL1xuLy8gcHJldHRpZXItaWdub3JlXG5cbnZhciBzaW1wbGVFdmVudFBsdWdpbkV2ZW50cyA9IFsnYWJvcnQnLCAnYXV4Q2xpY2snLCAnY2FuY2VsJywgJ2NhblBsYXknLCAnY2FuUGxheVRocm91Z2gnLCAnY2xpY2snLCAnY2xvc2UnLCAnY29udGV4dE1lbnUnLCAnY29weScsICdjdXQnLCAnZHJhZycsICdkcmFnRW5kJywgJ2RyYWdFbnRlcicsICdkcmFnRXhpdCcsICdkcmFnTGVhdmUnLCAnZHJhZ092ZXInLCAnZHJhZ1N0YXJ0JywgJ2Ryb3AnLCAnZHVyYXRpb25DaGFuZ2UnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnZ290UG9pbnRlckNhcHR1cmUnLCAnaW5wdXQnLCAnaW52YWxpZCcsICdrZXlEb3duJywgJ2tleVByZXNzJywgJ2tleVVwJywgJ2xvYWQnLCAnbG9hZGVkRGF0YScsICdsb2FkZWRNZXRhZGF0YScsICdsb2FkU3RhcnQnLCAnbG9zdFBvaW50ZXJDYXB0dXJlJywgJ21vdXNlRG93bicsICdtb3VzZU1vdmUnLCAnbW91c2VPdXQnLCAnbW91c2VPdmVyJywgJ21vdXNlVXAnLCAncGFzdGUnLCAncGF1c2UnLCAncGxheScsICdwbGF5aW5nJywgJ3BvaW50ZXJDYW5jZWwnLCAncG9pbnRlckRvd24nLCAncG9pbnRlck1vdmUnLCAncG9pbnRlck91dCcsICdwb2ludGVyT3ZlcicsICdwb2ludGVyVXAnLCAncHJvZ3Jlc3MnLCAncmF0ZUNoYW5nZScsICdyZXNldCcsICdyZXNpemUnLCAnc2Vla2VkJywgJ3NlZWtpbmcnLCAnc3RhbGxlZCcsICdzdWJtaXQnLCAnc3VzcGVuZCcsICd0aW1lVXBkYXRlJywgJ3RvdWNoQ2FuY2VsJywgJ3RvdWNoRW5kJywgJ3RvdWNoU3RhcnQnLCAndm9sdW1lQ2hhbmdlJywgJ3Njcm9sbCcsICd0b2dnbGUnLCAndG91Y2hNb3ZlJywgJ3dhaXRpbmcnLCAnd2hlZWwnXTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVFdmVudChkb21FdmVudE5hbWUsIHJlYWN0TmFtZSkge1xuICB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcy5zZXQoZG9tRXZlbnROYW1lLCByZWFjdE5hbWUpO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVhY3ROYW1lLCBbZG9tRXZlbnROYW1lXSk7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlRXZlbnRzKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpbXBsZUV2ZW50UGx1Z2luRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGV2ZW50TmFtZSA9IHNpbXBsZUV2ZW50UGx1Z2luRXZlbnRzW2ldO1xuICAgIHZhciBkb21FdmVudE5hbWUgPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgY2FwaXRhbGl6ZWRFdmVudCA9IGV2ZW50TmFtZVswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnROYW1lLnNsaWNlKDEpO1xuICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoZG9tRXZlbnROYW1lLCAnb24nICsgY2FwaXRhbGl6ZWRFdmVudCk7XG4gIH0gLy8gU3BlY2lhbCBjYXNlcyB3aGVyZSBldmVudCBuYW1lcyBkb24ndCBtYXRjaC5cblxuXG4gIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX0VORCwgJ29uQW5pbWF0aW9uRW5kJyk7XG4gIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX0lURVJBVElPTiwgJ29uQW5pbWF0aW9uSXRlcmF0aW9uJyk7XG4gIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX1NUQVJULCAnb25BbmltYXRpb25TdGFydCcpO1xuICByZWdpc3RlclNpbXBsZUV2ZW50KCdkYmxjbGljaycsICdvbkRvdWJsZUNsaWNrJyk7XG4gIHJlZ2lzdGVyU2ltcGxlRXZlbnQoJ2ZvY3VzaW4nLCAnb25Gb2N1cycpO1xuICByZWdpc3RlclNpbXBsZUV2ZW50KCdmb2N1c291dCcsICdvbkJsdXInKTtcbiAgcmVnaXN0ZXJTaW1wbGVFdmVudChUUkFOU0lUSU9OX0VORCwgJ29uVHJhbnNpdGlvbkVuZCcpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgcmVhY3ROYW1lID0gdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuZ2V0KGRvbUV2ZW50TmFtZSk7XG5cbiAgaWYgKHJlYWN0TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0V2ZW50O1xuICB2YXIgcmVhY3RFdmVudFR5cGUgPSBkb21FdmVudE5hbWU7XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBrZXlwcmVzcyBldmVudCBmb3IgZnVuY3Rpb24ga2V5cyB0b28uIFRoaXMgcmVtb3Zlc1xuICAgICAgLy8gdGhlIHVud2FudGVkIGtleXByZXNzIGV2ZW50cy4gRW50ZXIgaXMgaG93ZXZlciBib3RoIHByaW50YWJsZSBhbmRcbiAgICAgIC8vIG5vbi1wcmludGFibGUuIE9uZSB3b3VsZCBleHBlY3QgVGFiIHRvIGJlIGFzIHdlbGwgKGJ1dCBpdCBpc24ndCkuXG4gICAgICBpZiAoZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljS2V5Ym9hcmRFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICByZWFjdEV2ZW50VHlwZSA9ICdmb2N1cyc7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICByZWFjdEV2ZW50VHlwZSA9ICdibHVyJztcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2JlZm9yZWJsdXInOlxuICAgIGNhc2UgJ2FmdGVyYmx1cic6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjbGljayc6XG4gICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBjbGljayBldmVudCBvbiByaWdodCBtb3VzZSBjbGlja3MuIFRoaXMgcmVtb3ZlcyB0aGVcbiAgICAgIC8vIHVud2FudGVkIGNsaWNrIGV2ZW50cy5cbiAgICAgIGlmIChuYXRpdmVFdmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAnYXV4Y2xpY2snOlxuICAgIGNhc2UgJ2RibGNsaWNrJzpcbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgIGNhc2UgJ21vdXNlbW92ZSc6XG4gICAgY2FzZSAnbW91c2V1cCc6IC8vIFRPRE86IERpc2FibGVkIGVsZW1lbnRzIHNob3VsZCBub3QgcmVzcG9uZCB0byBtb3VzZSBldmVudHNcblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ2NvbnRleHRtZW51JzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RyYWcnOlxuICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2V4aXQnOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgY2FzZSAnZHJhZ292ZXInOlxuICAgIGNhc2UgJ2RyYWdzdGFydCc6XG4gICAgY2FzZSAnZHJvcCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RvdWNoY2FuY2VsJzpcbiAgICBjYXNlICd0b3VjaGVuZCc6XG4gICAgY2FzZSAndG91Y2htb3ZlJzpcbiAgICBjYXNlICd0b3VjaHN0YXJ0JzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQU5JTUFUSU9OX0VORDpcbiAgICBjYXNlIEFOSU1BVElPTl9JVEVSQVRJT046XG4gICAgY2FzZSBBTklNQVRJT05fU1RBUlQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBUUkFOU0lUSU9OX0VORDpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2Nyb2xsJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3doZWVsJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvcHknOlxuICAgIGNhc2UgJ2N1dCc6XG4gICAgY2FzZSAncGFzdGUnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuICAgIGNhc2UgJ3BvaW50ZXJkb3duJzpcbiAgICBjYXNlICdwb2ludGVybW92ZSc6XG4gICAgY2FzZSAncG9pbnRlcm91dCc6XG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJ1cCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBpbkNhcHR1cmVQaGFzZSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgIT09IDA7XG5cbiAge1xuICAgIC8vIFNvbWUgZXZlbnRzIGRvbid0IGJ1YmJsZSBpbiB0aGUgYnJvd3Nlci5cbiAgICAvLyBJbiB0aGUgcGFzdCwgUmVhY3QgaGFzIGFsd2F5cyBidWJibGVkIHRoZW0sIGJ1dCB0aGlzIGNhbiBiZSBzdXJwcmlzaW5nLlxuICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHRyeSBhbGlnbmluZyBjbG9zZXIgdG8gdGhlIGJyb3dzZXIgYmVoYXZpb3IgYnkgbm90IGJ1YmJsaW5nXG4gICAgLy8gdGhlbSBpbiBSZWFjdCBlaXRoZXIuIFdlJ2xsIHN0YXJ0IGJ5IG5vdCBidWJibGluZyBvblNjcm9sbCwgYW5kIHRoZW4gZXhwYW5kLlxuICAgIHZhciBhY2N1bXVsYXRlVGFyZ2V0T25seSA9ICFpbkNhcHR1cmVQaGFzZSAmJiAvLyBUT0RPOiBpZGVhbGx5LCB3ZSdkIGV2ZW50dWFsbHkgYWRkIGFsbCBldmVudHMgZnJvbVxuICAgIC8vIG5vbkRlbGVnYXRlZEV2ZW50cyBsaXN0IGluIERPTVBsdWdpbkV2ZW50U3lzdGVtLlxuICAgIC8vIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIHNwZWNpYWwgbGlzdC5cbiAgICAvLyBUaGlzIGlzIGEgYnJlYWtpbmcgY2hhbmdlIHRoYXQgY2FuIHdhaXQgdW50aWwgUmVhY3QgMTguXG4gICAgZG9tRXZlbnROYW1lID09PSAnc2Nyb2xsJztcblxuICAgIHZhciBfbGlzdGVuZXJzID0gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIHJlYWN0TmFtZSwgbmF0aXZlRXZlbnQudHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5KTtcblxuICAgIGlmIChfbGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgY3JlYXRlIGV2ZW50IGxhemlseS5cbiAgICAgIHZhciBfZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgIGV2ZW50OiBfZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyczogX2xpc3RlbmVyc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE86IHJlbW92ZSB0b3AtbGV2ZWwgc2lkZSBlZmZlY3QuXG5yZWdpc3RlclNpbXBsZUV2ZW50cygpO1xucmVnaXN0ZXJFdmVudHMkMigpO1xucmVnaXN0ZXJFdmVudHMkMSgpO1xucmVnaXN0ZXJFdmVudHMkMygpO1xucmVnaXN0ZXJFdmVudHMoKTtcblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgLy8gVE9ETzogd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29uY2VwdCBvZiBhIFwiU2ltcGxlRXZlbnRQbHVnaW5cIi5cbiAgLy8gVGhpcyBpcyB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZXZlbnQgc3lzdGVtLiBBbGxcbiAgLy8gdGhlIG90aGVyIHBsdWdpbnMgYXJlIGVzc2VudGlhbGx5IHBvbHlmaWxscy4gU28gdGhlIHBsdWdpblxuICAvLyBzaG91bGQgcHJvYmFibHkgYmUgaW5saW5lZCBzb21ld2hlcmUgYW5kIGhhdmUgaXRzIGxvZ2ljXG4gIC8vIGJlIGNvcmUgdGhlIHRvIGV2ZW50IHN5c3RlbS4gVGhpcyB3b3VsZCBwb3RlbnRpYWxseSBhbGxvd1xuICAvLyB1cyB0byBzaGlwIGJ1aWxkcyBvZiBSZWFjdCB3aXRob3V0IHRoZSBwb2x5ZmlsbGVkIHBsdWdpbnMgYmVsb3cuXG4gIGV4dHJhY3RFdmVudHMkNChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIHZhciBzaG91bGRQcm9jZXNzUG9seWZpbGxQbHVnaW5zID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUykgPT09IDA7IC8vIFdlIGRvbid0IHByb2Nlc3MgdGhlc2UgZXZlbnRzIHVubGVzcyB3ZSBhcmUgaW4gdGhlXG4gIC8vIGV2ZW50J3MgbmF0aXZlIFwiYnViYmxlXCIgcGhhc2UsIHdoaWNoIG1lYW5zIHRoYXQgd2UncmVcbiAgLy8gbm90IGluIHRoZSBjYXB0dXJlIHBoYXNlLiBUaGF0J3MgYmVjYXVzZSB3ZSBlbXVsYXRlXG4gIC8vIHRoZSBjYXB0dXJlIHBoYXNlIGhlcmUgc3RpbGwuIFRoaXMgaXMgYSB0cmFkZS1vZmYsXG4gIC8vIGJlY2F1c2UgaW4gYW4gaWRlYWwgd29ybGQgd2Ugd291bGQgbm90IGVtdWxhdGUgYW5kIHVzZVxuICAvLyB0aGUgcGhhc2VzIHByb3Blcmx5LCBsaWtlIHdlIGRvIHdpdGggdGhlIFNpbXBsZUV2ZW50XG4gIC8vIHBsdWdpbi4gSG93ZXZlciwgdGhlIHBsdWdpbnMgYmVsb3cgZWl0aGVyIGV4cGVjdFxuICAvLyBlbXVsYXRpb24gKEVudGVyTGVhdmUpIG9yIHVzZSBzdGF0ZSBsb2NhbGl6ZWQgdG8gdGhhdFxuICAvLyBwbHVnaW4gKEJlZm9yZUlucHV0LCBDaGFuZ2UsIFNlbGVjdCkuIFRoZSBzdGF0ZSBpblxuICAvLyB0aGVzZSBtb2R1bGVzIGNvbXBsaWNhdGVzIHRoaW5ncywgYXMgeW91J2xsIGVzc2VudGlhbGx5XG4gIC8vIGdldCB0aGUgY2FzZSB3aGVyZSB0aGUgY2FwdHVyZSBwaGFzZSBldmVudCBtaWdodCBjaGFuZ2VcbiAgLy8gc3RhdGUsIG9ubHkgZm9yIHRoZSBmb2xsb3dpbmcgYnViYmxlIGV2ZW50IHRvIGNvbWUgaW5cbiAgLy8gbGF0ZXIgYW5kIG5vdCB0cmlnZ2VyIGFueXRoaW5nIGFzIHRoZSBzdGF0ZSBub3dcbiAgLy8gaW52YWxpZGF0ZXMgdGhlIGhldXJpc3RpY3Mgb2YgdGhlIGV2ZW50IHBsdWdpbi4gV2VcbiAgLy8gY291bGQgYWx0ZXIgYWxsIHRoZXNlIHBsdWdpbnMgdG8gd29yayBpbiBzdWNoIHdheXMsIGJ1dFxuICAvLyB0aGF0IG1pZ2h0IGNhdXNlIG90aGVyIHVua25vd24gc2lkZS1lZmZlY3RzIHRoYXQgd2VcbiAgLy8gY2FuJ3QgZm9yZXNlZSByaWdodCBub3cuXG5cbiAgaWYgKHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMpIHtcbiAgICBleHRyYWN0RXZlbnRzJDIoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyQzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufSAvLyBMaXN0IG9mIGV2ZW50cyB0aGF0IG5lZWQgdG8gYmUgaW5kaXZpZHVhbGx5IGF0dGFjaGVkIHRvIG1lZGlhIGVsZW1lbnRzLlxuXG5cbnZhciBtZWRpYUV2ZW50VHlwZXMgPSBbJ2Fib3J0JywgJ2NhbnBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnbG9hZGVkZGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAncGF1c2UnLCAncGxheScsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3JhdGVjaGFuZ2UnLCAncmVzaXplJywgJ3NlZWtlZCcsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3VzcGVuZCcsICd0aW1ldXBkYXRlJywgJ3ZvbHVtZWNoYW5nZScsICd3YWl0aW5nJ107IC8vIFdlIHNob3VsZCBub3QgZGVsZWdhdGUgdGhlc2UgZXZlbnRzIHRvIHRoZSBjb250YWluZXIsIGJ1dCByYXRoZXJcbi8vIHNldCB0aGVtIG9uIHRoZSBhY3R1YWwgdGFyZ2V0IGVsZW1lbnQgaXRzZWxmLiBUaGlzIGlzIHByaW1hcmlseVxuLy8gYmVjYXVzZSB0aGVzZSBldmVudHMgZG8gbm90IGNvbnNpc3RlbnRseSBidWJibGUgaW4gdGhlIERPTS5cblxudmFyIG5vbkRlbGVnYXRlZEV2ZW50cyA9IG5ldyBTZXQoWydjYW5jZWwnLCAnY2xvc2UnLCAnaW52YWxpZCcsICdsb2FkJywgJ3Njcm9sbCcsICd0b2dnbGUnXS5jb25jYXQobWVkaWFFdmVudFR5cGVzKSk7XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgdmFyIHR5cGUgPSBldmVudC50eXBlIHx8ICd1bmtub3duLWV2ZW50JztcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcih0eXBlLCBsaXN0ZW5lciwgdW5kZWZpbmVkLCBldmVudCk7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZUl0ZW1zSW5PcmRlcihldmVudCwgZGlzcGF0Y2hMaXN0ZW5lcnMsIGluQ2FwdHVyZVBoYXNlKSB7XG4gIHZhciBwcmV2aW91c0luc3RhbmNlO1xuXG4gIGlmIChpbkNhcHR1cmVQaGFzZSkge1xuICAgIGZvciAodmFyIGkgPSBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIF9kaXNwYXRjaExpc3RlbmVycyRpID0gZGlzcGF0Y2hMaXN0ZW5lcnNbaV0sXG4gICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZSxcbiAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldCxcbiAgICAgICAgICBsaXN0ZW5lciA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmxpc3RlbmVyO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgIT09IHByZXZpb3VzSW5zdGFuY2UgJiYgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpO1xuICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJF9pID0gZGlzcGF0Y2hMaXN0ZW5lcnNbX2ldLFxuICAgICAgICAgIF9pbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5pbnN0YW5jZSxcbiAgICAgICAgICBfY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgIF9saXN0ZW5lciA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5saXN0ZW5lcjtcblxuICAgICAgaWYgKF9pbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBfbGlzdGVuZXIsIF9jdXJyZW50VGFyZ2V0KTtcbiAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBfaW5zdGFuY2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGluQ2FwdHVyZVBoYXNlID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSAhPT0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX2Rpc3BhdGNoUXVldWUkaSA9IGRpc3BhdGNoUXVldWVbaV0sXG4gICAgICAgIGV2ZW50ID0gX2Rpc3BhdGNoUXVldWUkaS5ldmVudCxcbiAgICAgICAgbGlzdGVuZXJzID0gX2Rpc3BhdGNoUXVldWUkaS5saXN0ZW5lcnM7XG4gICAgcHJvY2Vzc0Rpc3BhdGNoUXVldWVJdGVtc0luT3JkZXIoZXZlbnQsIGxpc3RlbmVycywgaW5DYXB0dXJlUGhhc2UpOyAvLyAgZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gIH0gLy8gVGhpcyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byByZXRocm93IGlmIGFueSBvZiB0aGUgZXZlbnQgaGFuZGxlcnMgdGhyZXcuXG5cblxuICByZXRocm93Q2F1Z2h0RXJyb3IoKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudHNGb3JQbHVnaW5zKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpO1xufVxuXG5mdW5jdGlvbiBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0RWxlbWVudCkge1xuICB7XG4gICAgaWYgKCFub25EZWxlZ2F0ZWRFdmVudHMuaGFzKGRvbUV2ZW50TmFtZSkpIHtcbiAgICAgIGVycm9yKCdEaWQgbm90IGV4cGVjdCBhIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoKSBjYWxsIGZvciBcIiVzXCIuICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZG9tRXZlbnROYW1lKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciA9IGZhbHNlO1xuICB2YXIgbGlzdGVuZXJTZXQgPSBnZXRFdmVudExpc3RlbmVyU2V0KHRhcmdldEVsZW1lbnQpO1xuICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuXG4gIGlmICghbGlzdGVuZXJTZXQuaGFzKGxpc3RlbmVyU2V0S2V5KSkge1xuICAgIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldEVsZW1lbnQsIGRvbUV2ZW50TmFtZSwgSVNfTk9OX0RFTEVHQVRFRCwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG4gICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KTtcbiAgfVxufVxuZnVuY3Rpb24gbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIsIHRhcmdldCkge1xuICB7XG4gICAgaWYgKG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSAmJiAhaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IGEgbGlzdGVuVG9OYXRpdmVFdmVudCgpIGNhbGwgZm9yIFwiJXNcIiBpbiB0aGUgYnViYmxlIHBoYXNlLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGRvbUV2ZW50TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGV2ZW50U3lzdGVtRmxhZ3MgPSAwO1xuXG4gIGlmIChpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKSB7XG4gICAgZXZlbnRTeXN0ZW1GbGFncyB8PSBJU19DQVBUVVJFX1BIQVNFO1xuICB9XG5cbiAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0LCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xufSAvLyBUaGlzIGlzIG9ubHkgdXNlZCBieSBjcmVhdGVFdmVudEhhbmRsZSB3aGVuIHRoZVxudmFyIGxpc3RlbmluZ01hcmtlciA9ICdfcmVhY3RMaXN0ZW5pbmcnICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG5mdW5jdGlvbiBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCkge1xuICBpZiAoIXJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0pIHtcbiAgICByb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdID0gdHJ1ZTtcbiAgICBhbGxOYXRpdmVFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAvLyBXZSBoYW5kbGUgc2VsZWN0aW9uY2hhbmdlIHNlcGFyYXRlbHkgYmVjYXVzZSBpdFxuICAgICAgLy8gZG9lc24ndCBidWJibGUgYW5kIG5lZWRzIHRvIGJlIG9uIHRoZSBkb2N1bWVudC5cbiAgICAgIGlmIChkb21FdmVudE5hbWUgIT09ICdzZWxlY3Rpb25jaGFuZ2UnKSB7XG4gICAgICAgIGlmICghbm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpKSB7XG4gICAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGZhbHNlLCByb290Q29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgdHJ1ZSwgcm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyByb290Q29udGFpbmVyRWxlbWVudCA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG5cbiAgICBpZiAob3duZXJEb2N1bWVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhlIHNlbGVjdGlvbmNoYW5nZSBldmVudCBhbHNvIG5lZWRzIGRlZHVwbGljYXRpb25cbiAgICAgIC8vIGJ1dCBpdCBpcyBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnQuXG4gICAgICBpZiAoIW93bmVyRG9jdW1lbnRbbGlzdGVuaW5nTWFya2VyXSkge1xuICAgICAgICBvd25lckRvY3VtZW50W2xpc3RlbmluZ01hcmtlcl0gPSB0cnVlO1xuICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KCdzZWxlY3Rpb25jaGFuZ2UnLCBmYWxzZSwgb3duZXJEb2N1bWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCBpc0RlZmVycmVkTGlzdGVuZXJGb3JMZWdhY3lGQlN1cHBvcnQpIHtcbiAgdmFyIGxpc3RlbmVyID0gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpOyAvLyBJZiBwYXNzaXZlIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGVuIHRoZSBldmVudCB3aWxsIGJlXG4gIC8vIGFjdGl2ZSBhbmQgbm90IHBhc3NpdmUuXG5cbiAgdmFyIGlzUGFzc2l2ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuXG4gIGlmIChwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCkge1xuICAgIC8vIEJyb3dzZXJzIGludHJvZHVjZWQgYW4gaW50ZXJ2ZW50aW9uLCBtYWtpbmcgdGhlc2UgZXZlbnRzXG4gICAgLy8gcGFzc2l2ZSBieSBkZWZhdWx0IG9uIGRvY3VtZW50LiBSZWFjdCBkb2Vzbid0IGJpbmQgdGhlbVxuICAgIC8vIHRvIGRvY3VtZW50IGFueW1vcmUsIGJ1dCBjaGFuZ2luZyB0aGlzIG5vdyB3b3VsZCB1bmRvXG4gICAgLy8gdGhlIHBlcmZvcm1hbmNlIHdpbnMgZnJvbSB0aGUgY2hhbmdlLiBTbyB3ZSBlbXVsYXRlXG4gICAgLy8gdGhlIGV4aXN0aW5nIGJlaGF2aW9yIG1hbnVhbGx5IG9uIHRoZSByb290cyBub3cuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTY1MVxuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICd0b3VjaHN0YXJ0JyB8fCBkb21FdmVudE5hbWUgPT09ICd0b3VjaG1vdmUnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3doZWVsJykge1xuICAgICAgaXNQYXNzaXZlTGlzdGVuZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRhcmdldENvbnRhaW5lciA9ICB0YXJnZXRDb250YWluZXI7XG4gIHZhciB1bnN1YnNjcmliZUxpc3RlbmVyOyAvLyBXaGVuIGxlZ2FjeUZCU3VwcG9ydCBpcyBlbmFibGVkLCBpdCdzIGZvciB3aGVuIHdlXG5cblxuICBpZiAoaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcikge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50QnViYmxlTGlzdGVuZXJXaXRoUGFzc2l2ZUZsYWcodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyLCBpc1Bhc3NpdmVMaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXIpIHtcbiAgcmV0dXJuIGdyYW5kQ29udGFpbmVyID09PSB0YXJnZXRDb250YWluZXIgfHwgZ3JhbmRDb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBncmFuZENvbnRhaW5lci5wYXJlbnROb2RlID09PSB0YXJnZXRDb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGFuY2VzdG9ySW5zdCA9IHRhcmdldEluc3Q7XG5cbiAgaWYgKChldmVudFN5c3RlbUZsYWdzICYgSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUpID09PSAwICYmIChldmVudFN5c3RlbUZsYWdzICYgSVNfTk9OX0RFTEVHQVRFRCkgPT09IDApIHtcbiAgICB2YXIgdGFyZ2V0Q29udGFpbmVyTm9kZSA9IHRhcmdldENvbnRhaW5lcjsgLy8gSWYgd2UgYXJlIHVzaW5nIHRoZSBsZWdhY3kgRkIgc3VwcG9ydCBmbGFnLCB3ZVxuXG4gICAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSBiZWxvdyBsb2dpYyBhdHRlbXB0cyB0byB3b3JrIG91dCBpZiB3ZSBuZWVkIHRvIGNoYW5nZVxuICAgICAgLy8gdGhlIHRhcmdldCBmaWJlciB0byBhIGRpZmZlcmVudCBhbmNlc3Rvci4gV2UgaGFkIHNpbWlsYXIgbG9naWNcbiAgICAgIC8vIGluIHRoZSBsZWdhY3kgZXZlbnQgc3lzdGVtLCBleGNlcHQgdGhlIGJpZyBkaWZmZXJlbmNlIGJldHdlZW5cbiAgICAgIC8vIHN5c3RlbXMgaXMgdGhhdCB0aGUgbW9kZXJuIGV2ZW50IHN5c3RlbSBub3cgaGFzIGFuIGV2ZW50IGxpc3RlbmVyXG4gICAgICAvLyBhdHRhY2hlZCB0byBlYWNoIFJlYWN0IFJvb3QgYW5kIFJlYWN0IFBvcnRhbCBSb290LiBUb2dldGhlcixcbiAgICAgIC8vIHRoZSBET00gbm9kZXMgcmVwcmVzZW50aW5nIHRoZXNlIHJvb3RzIGFyZSB0aGUgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBUbyBmaWd1cmUgb3V0IHdoaWNoIGFuY2VzdG9yIGluc3RhbmNlIHdlIHNob3VsZCB1c2UsIHdlIHRyYXZlcnNlXG4gICAgICAvLyB1cCB0aGUgZmliZXIgdHJlZSBmcm9tIHRoZSB0YXJnZXQgaW5zdGFuY2UgYW5kIGF0dGVtcHQgdG8gZmluZFxuICAgICAgLy8gcm9vdCBib3VuZGFyaWVzIHRoYXQgbWF0Y2ggdGhhdCBvZiBvdXIgY3VycmVudCBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIElmIHdlIGZpbmQgdGhhdCBcInJvb3RDb250YWluZXJcIiwgd2UgZmluZCB0aGUgcGFyZW50IGZpYmVyXG4gICAgICAvLyBzdWItdHJlZSBmb3IgdGhhdCByb290IGFuZCBtYWtlIHRoYXQgb3VyIGFuY2VzdG9yIGluc3RhbmNlLlxuICAgICAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0O1xuXG4gICAgICBtYWluTG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZVRhZyA9IG5vZGUudGFnO1xuXG4gICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0Um9vdCB8fCBub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoY29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB0YXJnZXQgaXMgYSBwb3J0YWwsIGJ1dCBpdCdzIG5vdCB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvci5cbiAgICAgICAgICAgIC8vIE5vcm1hbGx5IHBvcnRhbHMgaGFuZGxlIHRoZWlyIG93biBldmVudHMgYWxsIHRoZSB3YXkgZG93biB0byB0aGUgcm9vdC5cbiAgICAgICAgICAgIC8vIFNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHN0b3Agbm93LiBIb3dldmVyLCB3ZSBkb24ndCBrbm93IGlmIHRoaXMgcG9ydGFsXG4gICAgICAgICAgICAvLyB3YXMgcGFydCBvZiAqb3VyKiByb290LlxuICAgICAgICAgICAgdmFyIGdyYW5kTm9kZSA9IG5vZGUucmV0dXJuO1xuXG4gICAgICAgICAgICB3aGlsZSAoZ3JhbmROb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBncmFuZFRhZyA9IGdyYW5kTm9kZS50YWc7XG5cbiAgICAgICAgICAgICAgaWYgKGdyYW5kVGFnID09PSBIb3N0Um9vdCB8fCBncmFuZFRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgICAgIHZhciBncmFuZENvbnRhaW5lciA9IGdyYW5kTm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IgYW5kIHdlIGZvdW5kIGl0IGFzXG4gICAgICAgICAgICAgICAgICAvLyBhIHBhcmVudCBvZiB0aGUgUG9ydGFsLiBUaGF0IG1lYW5zIHdlIGNhbiBpZ25vcmUgaXQgYmVjYXVzZSB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFBvcnRhbCB3aWxsIGJ1YmJsZSB0aHJvdWdoIHRvIHVzLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGdyYW5kTm9kZSA9IGdyYW5kTm9kZS5yZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBOb3cgd2UgbmVlZCB0byBmaW5kIGl0J3MgY29ycmVzcG9uZGluZyBob3N0IGZpYmVyIGluIHRoZSBvdGhlclxuICAgICAgICAgIC8vIHRyZWUuIFRvIGRvIHRoaXMgd2UgY2FuIHVzZSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSwgYnV0IHdlXG4gICAgICAgICAgLy8gbmVlZCB0byB2YWxpZGF0ZSB0aGF0IHRoZSBmaWJlciBpcyBhIGhvc3QgaW5zdGFuY2UsIG90aGVyd2lzZVxuICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdHJhdmVyc2UgdXAgdGhyb3VnaCB0aGUgRE9NIHRpbGwgd2UgZmluZCB0aGUgY29ycmVjdFxuICAgICAgICAgIC8vIG5vZGUgdGhhdCBpcyBmcm9tIHRoZSBvdGhlciB0cmVlLlxuXG5cbiAgICAgICAgICB3aGlsZSAoY29udGFpbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKGNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudE5vZGUudGFnO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50VGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHBhcmVudFRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgICAgICAgbm9kZSA9IGFuY2VzdG9ySW5zdCA9IHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG1haW5Mb29wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50c0ZvclBsdWdpbnMoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgYW5jZXN0b3JJbnN0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gIHJldHVybiB7XG4gICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgIGxpc3RlbmVyOiBsaXN0ZW5lcixcbiAgICBjdXJyZW50VGFyZ2V0OiBjdXJyZW50VGFyZ2V0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVTaW5nbGVQaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lLCBuYXRpdmVFdmVudFR5cGUsIGluQ2FwdHVyZVBoYXNlLCBhY2N1bXVsYXRlVGFyZ2V0T25seSwgbmF0aXZlRXZlbnQpIHtcbiAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICE9PSBudWxsID8gcmVhY3ROYW1lICsgJ0NhcHR1cmUnIDogbnVsbDtcbiAgdmFyIHJlYWN0RXZlbnROYW1lID0gaW5DYXB0dXJlUGhhc2UgPyBjYXB0dXJlTmFtZSA6IHJlYWN0TmFtZTtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRGaWJlcjtcbiAgdmFyIGxhc3RIb3N0Q29tcG9uZW50ID0gbnVsbDsgLy8gQWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIGFuZCBsaXN0ZW5lcnMgdmlhIHRoZSB0YXJnZXQgLT4gcm9vdCBwYXRoLlxuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBfaW5zdGFuY2UyID0gaW5zdGFuY2UsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTIuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2UyLnRhZzsgLy8gSGFuZGxlIGxpc3RlbmVycyB0aGF0IGFyZSBvbiBIb3N0Q29tcG9uZW50cyAoaS5lLiA8ZGl2PilcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBsYXN0SG9zdENvbXBvbmVudCA9IHN0YXRlTm9kZTsgLy8gY3JlYXRlRXZlbnRIYW5kbGUgbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKHJlYWN0RXZlbnROYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdEV2ZW50TmFtZSk7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgbGFzdEhvc3RDb21wb25lbnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gSWYgd2UgYXJlIG9ubHkgYWNjdW11bGF0aW5nIGV2ZW50cyBmb3IgdGhlIHRhcmdldCwgdGhlbiB3ZSBkb24ndFxuICAgIC8vIGNvbnRpbnVlIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIHRoZSBSZWFjdCBmaWJlciB0cmVlIHRvIGZpbmQgb3RoZXJcbiAgICAvLyBsaXN0ZW5lcnMuXG5cblxuICAgIGlmIChhY2N1bXVsYXRlVGFyZ2V0T25seSkge1xuICAgICAgYnJlYWs7XG4gICAgfSAvLyBJZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGUgb25CZWZvcmVCbHVyIGV2ZW50LCB0aGVuIHdlIG5lZWQgdG8gdGFrZVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJzO1xufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbi8vIC0gQ2hhbmdlRXZlbnRQbHVnaW5cbi8vIC0gU2VsZWN0RXZlbnRQbHVnaW5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IHByb2Nlc3MgdGhlc2UgcGx1Z2luc1xuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzICh2aWEgZW11bGF0aW9uKS5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUpIHtcbiAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICsgJ0NhcHR1cmUnO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldEZpYmVyOyAvLyBBY2N1bXVsYXRlIGFsbCBpbnN0YW5jZXMgYW5kIGxpc3RlbmVycyB2aWEgdGhlIHRhcmdldCAtPiByb290IHBhdGguXG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgdmFyIF9pbnN0YW5jZTMgPSBpbnN0YW5jZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMy5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTMudGFnOyAvLyBIYW5kbGUgbGlzdGVuZXJzIHRoYXQgYXJlIG9uIEhvc3RDb21wb25lbnRzIChpLmUuIDxkaXY+KVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gc3RhdGVOb2RlO1xuICAgICAgdmFyIGNhcHR1cmVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTmFtZSk7XG5cbiAgICAgIGlmIChjYXB0dXJlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJ1YmJsZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0TmFtZSk7XG5cbiAgICAgIGlmIChidWJibGVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGJ1YmJsZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnQoaW5zdCkge1xuICBpZiAoaW5zdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZG8ge1xuICAgIGluc3QgPSBpbnN0LnJldHVybjsgLy8gVE9ETzogSWYgdGhpcyBpcyBhIEhvc3RSb290IHdlIG1pZ2h0IHdhbnQgdG8gYmFpbCBvdXQuXG4gICAgLy8gVGhhdCBpcyBkZXBlbmRpbmcgb24gaWYgd2Ugd2FudCBuZXN0ZWQgc3VidHJlZXMgKGxheWVycykgdG8gYnViYmxlXG4gICAgLy8gZXZlbnRzIHRvIHRoZWlyIHBhcmVudC4gV2UgY291bGQgYWxzbyBnbyB0aHJvdWdoIHBhcmVudE5vZGUgb24gdGhlXG4gICAgLy8gaG9zdCBub2RlIGJ1dCB0aGF0IHdvdWxkbid0IHdvcmsgZm9yIFJlYWN0IE5hdGl2ZSBhbmQgZG9lc24ndCBsZXQgdXNcbiAgICAvLyBkbyB0aGUgcG9ydGFsIGZlYXR1cmUuXG4gIH0gd2hpbGUgKGluc3QgJiYgaW5zdC50YWcgIT09IEhvc3RDb21wb25lbnQpO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogUmV0dXJuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIEEgYW5kIEIsIG9yIG51bGwgaWYgdGhleSBhcmUgaW5cbiAqIGRpZmZlcmVudCB0cmVlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGluc3RBLCBpbnN0Qikge1xuICB2YXIgbm9kZUEgPSBpbnN0QTtcbiAgdmFyIG5vZGVCID0gaW5zdEI7XG4gIHZhciBkZXB0aEEgPSAwO1xuXG4gIGZvciAodmFyIHRlbXBBID0gbm9kZUE7IHRlbXBBOyB0ZW1wQSA9IGdldFBhcmVudCh0ZW1wQSkpIHtcbiAgICBkZXB0aEErKztcbiAgfVxuXG4gIHZhciBkZXB0aEIgPSAwO1xuXG4gIGZvciAodmFyIHRlbXBCID0gbm9kZUI7IHRlbXBCOyB0ZW1wQiA9IGdldFBhcmVudCh0ZW1wQikpIHtcbiAgICBkZXB0aEIrKztcbiAgfSAvLyBJZiBBIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG5cblxuICB3aGlsZSAoZGVwdGhBIC0gZGVwdGhCID4gMCkge1xuICAgIG5vZGVBID0gZ2V0UGFyZW50KG5vZGVBKTtcbiAgICBkZXB0aEEtLTtcbiAgfSAvLyBJZiBCIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG5cblxuICB3aGlsZSAoZGVwdGhCIC0gZGVwdGhBID4gMCkge1xuICAgIG5vZGVCID0gZ2V0UGFyZW50KG5vZGVCKTtcbiAgICBkZXB0aEItLTtcbiAgfSAvLyBXYWxrIGluIGxvY2tzdGVwIHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cblxuXG4gIHZhciBkZXB0aCA9IGRlcHRoQTtcblxuICB3aGlsZSAoZGVwdGgtLSkge1xuICAgIGlmIChub2RlQSA9PT0gbm9kZUIgfHwgbm9kZUIgIT09IG51bGwgJiYgbm9kZUEgPT09IG5vZGVCLmFsdGVybmF0ZSkge1xuICAgICAgcmV0dXJuIG5vZGVBO1xuICAgIH1cblxuICAgIG5vZGVBID0gZ2V0UGFyZW50KG5vZGVBKTtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBldmVudCwgdGFyZ2V0LCBjb21tb24sIGluQ2FwdHVyZVBoYXNlKSB7XG4gIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuX3JlYWN0TmFtZTtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXQ7XG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgaWYgKGluc3RhbmNlID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBfaW5zdGFuY2U0ID0gaW5zdGFuY2UsXG4gICAgICAgIGFsdGVybmF0ZSA9IF9pbnN0YW5jZTQuYWx0ZXJuYXRlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2U0LnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlNC50YWc7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBzdGF0ZU5vZGU7XG5cbiAgICAgIGlmIChpbkNhcHR1cmVQaGFzZSkge1xuICAgICAgICB2YXIgY2FwdHVyZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmIChjYXB0dXJlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpbkNhcHR1cmVQaGFzZSkge1xuICAgICAgICB2YXIgYnViYmxlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGJ1YmJsZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICB9XG59IC8vIFdlIHNob3VsZCBvbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIGZvcjpcbi8vIC0gRW50ZXJMZWF2ZUV2ZW50UGx1Z2luXG4vLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSBwcm9jZXNzIHRoaXMgcGx1Z2luXG4vLyBpbiB0aGUgYnViYmxlIHBoYXNlLCBzbyB3ZSBuZWVkIHRvIGFjY3VtdWxhdGUgdHdvXG4vLyBwaGFzZSBldmVudCBsaXN0ZW5lcnMuXG5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVUd29QaGFzZUxpc3RlbmVycyhkaXNwYXRjaFF1ZXVlLCBsZWF2ZUV2ZW50LCBlbnRlckV2ZW50LCBmcm9tLCB0bykge1xuICB2YXIgY29tbW9uID0gZnJvbSAmJiB0byA/IGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGZyb20sIHRvKSA6IG51bGw7XG5cbiAgaWYgKGZyb20gIT09IG51bGwpIHtcbiAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGxlYXZlRXZlbnQsIGZyb20sIGNvbW1vbiwgZmFsc2UpO1xuICB9XG5cbiAgaWYgKHRvICE9PSBudWxsICYmIGVudGVyRXZlbnQgIT09IG51bGwpIHtcbiAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGVudGVyRXZlbnQsIHRvLCBjb21tb24sIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGNhcHR1cmUpIHtcbiAgcmV0dXJuIGRvbUV2ZW50TmFtZSArIFwiX19cIiArIChjYXB0dXJlID8gJ2NhcHR1cmUnIDogJ2J1YmJsZScpO1xufVxuXG52YXIgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSBmYWxzZTtcbnZhciBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCA9ICdkYW5nZXJvdXNseVNldElubmVySFRNTCc7XG52YXIgU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HID0gJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyc7XG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgPSAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJztcbnZhciBBVVRPRk9DVVMgPSAnYXV0b0ZvY3VzJztcbnZhciBDSElMRFJFTiA9ICdjaGlsZHJlbic7XG52YXIgU1RZTEUgPSAnc3R5bGUnO1xudmFyIEhUTUwkMSA9ICdfX2h0bWwnO1xudmFyIHdhcm5lZFVua25vd25UYWdzO1xudmFyIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQ7XG52YXIgd2FybkZvclByb3BEaWZmZXJlbmNlO1xudmFyIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXM7XG52YXIgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyO1xudmFyIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmc7XG52YXIgbm9ybWFsaXplSFRNTDtcblxue1xuICB3YXJuZWRVbmtub3duVGFncyA9IHtcbiAgICAvLyBUaGVyZSBhcmUgd29ya2luZyBwb2x5ZmlsbHMgZm9yIDxkaWFsb2c+LiBMZXQgcGVvcGxlIHVzZSBpdC5cbiAgICBkaWFsb2c6IHRydWUsXG4gICAgLy8gRWxlY3Ryb24gc2hpcHMgYSBjdXN0b20gPHdlYnZpZXc+IHRhZyB0byBkaXNwbGF5IGV4dGVybmFsIHdlYiBjb250ZW50IGluXG4gICAgLy8gYW4gaXNvbGF0ZWQgZnJhbWUgYW5kIHByb2Nlc3MuXG4gICAgLy8gVGhpcyB0YWcgaXMgbm90IHByZXNlbnQgaW4gbm9uIEVsZWN0cm9uIGVudmlyb25tZW50cyBzdWNoIGFzIEpTRG9tIHdoaWNoXG4gICAgLy8gaXMgb2Z0ZW4gdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAgICAvLyBAc2VlIGh0dHBzOi8vZWxlY3Ryb25qcy5vcmcvZG9jcy9hcGkvd2Vidmlldy10YWdcbiAgICB3ZWJ2aWV3OiB0cnVlXG4gIH07XG5cbiAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBwcm9wcykge1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDEodHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzLCB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzOiByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lczogcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1xuICAgIH0pO1xuICB9OyAvLyBJRSAxMSBwYXJzZXMgJiBub3JtYWxpemVzIHRoZSBzdHlsZSBhdHRyaWJ1dGUgYXMgb3Bwb3NlZCB0byBvdGhlclxuICAvLyBicm93c2Vycy4gSXQgYWRkcyBzcGFjZXMgYW5kIHNvcnRzIHRoZSBwcm9wZXJ0aWVzIGluIHNvbWVcbiAgLy8gbm9uLWFscGhhYmV0aWNhbCBvcmRlci4gSGFuZGxpbmcgdGhhdCB3b3VsZCByZXF1aXJlIHNvcnRpbmcgQ1NTXG4gIC8vIHByb3BlcnRpZXMgaW4gdGhlIGNsaWVudCAmIHNlcnZlciB2ZXJzaW9ucyBvciBhcHBseWluZ1xuICAvLyBgZXhwZWN0ZWRTdHlsZWAgdG8gYSB0ZW1wb3JhcnkgRE9NIG5vZGUgdG8gcmVhZCBpdHMgYHN0eWxlYCBhdHRyaWJ1dGVcbiAgLy8gbm9ybWFsaXplZC4gU2luY2UgaXQgb25seSBhZmZlY3RzIElFLCB3ZSdyZSBza2lwcGluZyBzdHlsZSB3YXJuaW5nc1xuICAvLyBpbiB0aGF0IGJyb3dzZXIgY29tcGxldGVseSBpbiBmYXZvciBvZiBkb2luZyBhbGwgdGhhdCB3b3JrLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTgwN1xuXG5cbiAgY2FuRGlmZlN0eWxlRm9ySHlkcmF0aW9uV2FybmluZyA9IGNhblVzZURPTSAmJiAhZG9jdW1lbnQuZG9jdW1lbnRNb2RlO1xuXG4gIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChwcm9wTmFtZSwgc2VydmVyVmFsdWUsIGNsaWVudFZhbHVlKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRWYWx1ZSk7XG4gICAgdmFyIG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJWYWx1ZSk7XG5cbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclZhbHVlID09PSBub3JtYWxpemVkQ2xpZW50VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignUHJvcCBgJXNgIGRpZCBub3QgbWF0Y2guIFNlcnZlcjogJXMgQ2xpZW50OiAlcycsIHByb3BOYW1lLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkU2VydmVyVmFsdWUpLCBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkQ2xpZW50VmFsdWUpKTtcbiAgfTtcblxuICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGF0dHJpYnV0ZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgfSk7XG5cbiAgICBlcnJvcignRXh0cmEgYXR0cmlidXRlcyBmcm9tIHRoZSBzZXJ2ZXI6ICVzJywgbmFtZXMpO1xuICB9O1xuXG4gIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChyZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgIGlmIChsaXN0ZW5lciA9PT0gZmFsc2UpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGBmYWxzZWAuXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgJXNgIHR5cGUuJywgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxpc3RlbmVyKTtcbiAgICB9XG4gIH07IC8vIFBhcnNlIHRoZSBIVE1MIGFuZCByZWFkIGl0IGJhY2sgdG8gbm9ybWFsaXplIHRoZSBIVE1MIHN0cmluZyBzbyB0aGF0IGl0XG4gIC8vIGNhbiBiZSB1c2VkIGZvciBjb21wYXJpc29uLlxuXG5cbiAgbm9ybWFsaXplSFRNTCA9IGZ1bmN0aW9uIChwYXJlbnQsIGh0bWwpIHtcbiAgICAvLyBXZSBjb3VsZCBoYXZlIGNyZWF0ZWQgYSBzZXBhcmF0ZSBkb2N1bWVudCBoZXJlIHRvIGF2b2lkXG4gICAgLy8gcmUtaW5pdGlhbGl6aW5nIGN1c3RvbSBlbGVtZW50cyBpZiB0aGV5IGV4aXN0LiBCdXQgdGhpcyBicmVha3NcbiAgICAvLyBob3cgPG5vc2NyaXB0PiBpcyBiZWluZyBoYW5kbGVkLiBTbyB3ZSB1c2UgdGhlIHNhbWUgZG9jdW1lbnQuXG4gICAgLy8gU2VlIHRoZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzExMTU3LlxuICAgIHZhciB0ZXN0RWxlbWVudCA9IHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFID8gcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChwYXJlbnQudGFnTmFtZSkgOiBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocGFyZW50Lm5hbWVzcGFjZVVSSSwgcGFyZW50LnRhZ05hbWUpO1xuICAgIHRlc3RFbGVtZW50LmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIHRlc3RFbGVtZW50LmlubmVySFRNTDtcbiAgfTtcbn0gLy8gSFRNTCBwYXJzaW5nIG5vcm1hbGl6ZXMgQ1IgYW5kIENSTEYgdG8gTEYuXG4vLyBJdCBhbHNvIGNhbiB0dXJuIFxcdTAwMDAgaW50byBcXHVGRkZEIGluc2lkZSBhdHRyaWJ1dGVzLlxuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3NpbmdsZS1wYWdlLmh0bWwjcHJlcHJvY2Vzc2luZy10aGUtaW5wdXQtc3RyZWFtXG4vLyBJZiB3ZSBoYXZlIGEgbWlzbWF0Y2gsIGl0IG1pZ2h0IGJlIGNhdXNlZCBieSB0aGF0LlxuLy8gV2Ugd2lsbCBzdGlsbCBwYXRjaCB1cCBpbiB0aGlzIGNhc2UgYnV0IG5vdCBmaXJlIHRoZSB3YXJuaW5nLlxuXG5cbnZhciBOT1JNQUxJWkVfTkVXTElORVNfUkVHRVggPSAvXFxyXFxuPy9nO1xudmFyIE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCA9IC9cXHUwMDAwfFxcdUZGRkQvZztcblxuZnVuY3Rpb24gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKG1hcmt1cCkge1xuICB7XG4gICAgY2hlY2tIdG1sU3RyaW5nQ29lcmNpb24obWFya3VwKTtcbiAgfVxuXG4gIHZhciBtYXJrdXBTdHJpbmcgPSB0eXBlb2YgbWFya3VwID09PSAnc3RyaW5nJyA/IG1hcmt1cCA6ICcnICsgbWFya3VwO1xuICByZXR1cm4gbWFya3VwU3RyaW5nLnJlcGxhY2UoTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYLCAnXFxuJykucmVwbGFjZShOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVgsICcnKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tGb3JVbm1hdGNoZWRUZXh0KHNlcnZlclRleHQsIGNsaWVudFRleHQsIGlzQ29uY3VycmVudE1vZGUsIHNob3VsZFdhcm5EZXYpIHtcbiAgdmFyIG5vcm1hbGl6ZWRDbGllbnRUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFRleHQpO1xuICB2YXIgbm9ybWFsaXplZFNlcnZlclRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVGV4dCk7XG5cbiAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0ID09PSBub3JtYWxpemVkQ2xpZW50VGV4dCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChzaG91bGRXYXJuRGV2KSB7XG4gICAge1xuICAgICAgaWYgKCFkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1RleHQgY29udGVudCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6IFwiJXNcIiBDbGllbnQ6IFwiJXNcIicsIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0LCBub3JtYWxpemVkQ2xpZW50VGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ29uY3VycmVudE1vZGUgJiYgZW5hYmxlQ2xpZW50UmVuZGVyRmFsbGJhY2tPblRleHRNaXNtYXRjaCkge1xuICAgIC8vIEluIGNvbmN1cnJlbnQgcm9vdHMsIHdlIHRocm93IHdoZW4gdGhlcmUncyBhIHRleHQgbWlzbWF0Y2ggYW5kIHJldmVydCB0b1xuICAgIC8vIGNsaWVudCByZW5kZXJpbmcsIHVwIHRvIHRoZSBuZWFyZXN0IFN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgIHRocm93IG5ldyBFcnJvcignVGV4dCBjb250ZW50IGRvZXMgbm90IG1hdGNoIHNlcnZlci1yZW5kZXJlZCBIVE1MLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyByb290Q29udGFpbmVyRWxlbWVudCA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChub2RlKSB7XG4gIC8vIE1vYmlsZSBTYWZhcmkgZG9lcyBub3QgZmlyZSBwcm9wZXJseSBidWJibGUgY2xpY2sgZXZlbnRzIG9uXG4gIC8vIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cywgd2hpY2ggbWVhbnMgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3RcbiAgLy8gZmlyZS4gVGhlIHdvcmthcm91bmQgZm9yIHRoaXMgYnVnIGludm9sdmVzIGF0dGFjaGluZyBhbiBlbXB0eSBjbGlja1xuICAvLyBsaXN0ZW5lciBvbiB0aGUgdGFyZ2V0IG5vZGUuXG4gIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxMC8wOS9jbGlja19ldmVudF9kZWwuaHRtbFxuICAvLyBKdXN0IHNldCBpdCB1c2luZyB0aGUgb25jbGljayBwcm9wZXJ0eSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gbWFuYWdlIGFueVxuICAvLyBib29ra2VlcGluZyBmb3IgaXQuIE5vdCBzdXJlIGlmIHdlIG5lZWQgdG8gY2xlYXIgaXQgd2hlbiB0aGUgbGlzdGVuZXIgaXNcbiAgLy8gcmVtb3ZlZC5cbiAgLy8gVE9ETzogT25seSBkbyB0aGlzIGZvciB0aGUgcmVsZXZhbnQgU2FmYXJpcyBtYXliZT9cbiAgbm9kZS5vbmNsaWNrID0gbm9vcDtcbn1cblxuZnVuY3Rpb24gc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgbmV4dFByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBmb3IgKHZhciBwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG5leHRQcm9wKSB7XG4gICAgICAgICAgLy8gRnJlZXplIHRoZSBuZXh0IHN0eWxlIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgYmVcbiAgICAgICAgICAvLyBtdXRhdGVkLiBXZSBoYXZlIGFscmVhZHkgd2FybmVkIGZvciB0aGlzIGluIHRoZSBwYXN0LlxuICAgICAgICAgIE9iamVjdC5mcmVlemUobmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuXG5cbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgIHNldElubmVySFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQXZvaWQgc2V0dGluZyBpbml0aWFsIHRleHRDb250ZW50IHdoZW4gdGhlIHRleHQgaXMgZW1wdHkuIEluIElFMTEgc2V0dGluZ1xuICAgICAgICAvLyB0ZXh0Q29udGVudCBvbiBhIDx0ZXh0YXJlYT4gd2lsbCBjYXVzZSB0aGUgcGxhY2Vob2xkZXIgdG8gbm90XG4gICAgICAgIC8vIHNob3cgd2l0aGluIHRoZSA8dGV4dGFyZWE+IHVudGlsIGl0IGhhcyBiZWVuIGZvY3VzZWQgYW5kIGJsdXJyZWQgYWdhaW4uXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjczMSNpc3N1ZWNvbW1lbnQtMjU0ODc0NTUzXG4gICAgICAgIHZhciBjYW5TZXRUZXh0Q29udGVudCA9IHRhZyAhPT0gJ3RleHRhcmVhJyB8fCBuZXh0UHJvcCAhPT0gJyc7XG5cbiAgICAgICAgaWYgKGNhblNldFRleHRDb250ZW50KSB7XG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gQVVUT0ZPQ1VTKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgIHNldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRE9NUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB3YXNDdXN0b21Db21wb25lbnRUYWcsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIC8vIFRPRE86IEhhbmRsZSB3YXNDdXN0b21Db21wb25lbnRUYWdcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVQYXlsb2FkLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHByb3BLZXkgPSB1cGRhdGVQYXlsb2FkW2ldO1xuICAgIHZhciBwcm9wVmFsdWUgPSB1cGRhdGVQYXlsb2FkW2kgKyAxXTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIHByb3BWYWx1ZSwgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCByb290Q29udGFpbmVyRWxlbWVudCwgcGFyZW50TmFtZXNwYWNlKSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZzsgLy8gV2UgY3JlYXRlIHRhZ3MgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGVpciBwYXJlbnQgY29udGFpbmVyLCBleGNlcHQgSFRNTFxuICAvLyB0YWdzIGdldCBubyBuYW1lc3BhY2UuXG5cbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB2YXIgZG9tRWxlbWVudDtcbiAgdmFyIG5hbWVzcGFjZVVSSSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgIG5hbWVzcGFjZVVSSSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAge1xuICAgICAgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcyk7IC8vIFNob3VsZCB0aGlzIGNoZWNrIGJlIGdhdGVkIGJ5IHBhcmVudCBuYW1lc3BhY2U/IE5vdCBzdXJlIHdlIHdhbnQgdG9cbiAgICAgIC8vIGFsbG93IDxTVkc+IG9yIDxtQVRIPi5cblxuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiB0eXBlICE9PSB0eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgZXJyb3IoJzwlcyAvPiBpcyB1c2luZyBpbmNvcnJlY3QgY2FzaW5nLiAnICsgJ1VzZSBQYXNjYWxDYXNlIGZvciBSZWFjdCBjb21wb25lbnRzLCAnICsgJ29yIGxvd2VyY2FzZSBmb3IgSFRNTCBlbGVtZW50cy4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgc2NyaXB0IHZpYSAuaW5uZXJIVE1MIHNvIGl0cyBcInBhcnNlci1pbnNlcnRlZFwiIGZsYWcgaXNcbiAgICAgIC8vIHNldCB0byB0cnVlIGFuZCBpdCBkb2VzIG5vdCBleGVjdXRlXG4gICAgICB2YXIgZGl2ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgZGl2LmlubmVySFRNTCA9ICc8c2NyaXB0PjwnICsgJy9zY3JpcHQ+JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIHlpZWxkIGEgc2NyaXB0IGVsZW1lbnQuXG5cbiAgICAgIHZhciBmaXJzdENoaWxkID0gZGl2LmZpcnN0Q2hpbGQ7XG4gICAgICBkb21FbGVtZW50ID0gZGl2LnJlbW92ZUNoaWxkKGZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gJEZsb3dJc3N1ZSBgY3JlYXRlRWxlbWVudGAgc2hvdWxkIGJlIHVwZGF0ZWQgZm9yIFdlYiBDb21wb25lbnRzXG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUsIHtcbiAgICAgICAgaXM6IHByb3BzLmlzXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VwYXJhdGUgZWxzZSBicmFuY2ggaW5zdGVhZCBvZiB1c2luZyBgcHJvcHMuaXMgfHwgdW5kZWZpbmVkYCBhYm92ZSBiZWNhdXNlIG9mIGEgRmlyZWZveCBidWcuXG4gICAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC82ODk2XG4gICAgICAvLyBhbmQgZGlzY3Vzc2lvbiBpbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjQwXG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpOyAvLyBOb3JtYWxseSBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCBpbiBgc2V0SW5pdGlhbERPTVByb3BlcnRpZXNgLCBob3dldmVyIHRoZSBgbXVsdGlwbGVgIGFuZCBgc2l6ZWBcbiAgICAgIC8vIGF0dHJpYnV0ZXMgb24gYHNlbGVjdGBzIG5lZWRzIHRvIGJlIGFkZGVkIGJlZm9yZSBgb3B0aW9uYHMgYXJlIGluc2VydGVkLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50czpcbiAgICAgIC8vIC0gYSBidWcgd2hlcmUgdGhlIGBzZWxlY3RgIGRvZXMgbm90IHNjcm9sbCB0byB0aGUgY29ycmVjdCBvcHRpb24gYmVjYXVzZSBzaW5ndWxhclxuICAgICAgLy8gIGBzZWxlY3RgIGVsZW1lbnRzIGF1dG9tYXRpY2FsbHkgcGljayB0aGUgZmlyc3QgaXRlbSAjMTMyMjJcbiAgICAgIC8vIC0gYSBidWcgd2hlcmUgdGhlIGBzZWxlY3RgIHNldCB0aGUgZmlyc3QgaXRlbSBhcyBzZWxlY3RlZCBkZXNwaXRlIHRoZSBgc2l6ZWAgYXR0cmlidXRlICMxNDIzOVxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMyMjJcbiAgICAgIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MjM5XG5cbiAgICAgIGlmICh0eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICB2YXIgbm9kZSA9IGRvbUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgICAgbm9kZS5tdWx0aXBsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMuc2l6ZSkge1xuICAgICAgICAgIC8vIFNldHRpbmcgYSBzaXplIGdyZWF0ZXIgdGhhbiAxIGNhdXNlcyBhIHNlbGVjdCB0byBiZWhhdmUgbGlrZSBgbXVsdGlwbGU9dHJ1ZWAsIHdoZXJlXG4gICAgICAgICAgLy8gaXQgaXMgcG9zc2libGUgdGhhdCBubyBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gYSBzZWxlY3QgaW4gXCJzaW5nbGUgc2VsZWN0aW9uIG1vZGVcIi5cbiAgICAgICAgICBub2RlLnNpemUgPSBwcm9wcy5zaXplO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHR5cGUpO1xuICB9XG5cbiAge1xuICAgIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb21FbGVtZW50KSA9PT0gJ1tvYmplY3QgSFRNTFVua25vd25FbGVtZW50XScgJiYgIWhhc093blByb3BlcnR5LmNhbGwod2FybmVkVW5rbm93blRhZ3MsIHR5cGUpKSB7XG4gICAgICAgIHdhcm5lZFVua25vd25UYWdzW3R5cGVdID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignVGhlIHRhZyA8JXM+IGlzIHVucmVjb2duaXplZCBpbiB0aGlzIGJyb3dzZXIuICcgKyAnSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIFJlYWN0IGNvbXBvbmVudCwgc3RhcnQgaXRzIG5hbWUgd2l0aCAnICsgJ2FuIHVwcGVyY2FzZSBsZXR0ZXIuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KS5jcmVhdGVUZXh0Tm9kZSh0ZXh0KTtcbn1cbmZ1bmN0aW9uIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICB2YXIgcHJvcHM7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjbG9zZScsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgZXJyb3IgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKTtcbiAgc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgcHJvcHMsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIoZG9tRWxlbWVudCwgcmF3UHJvcHMsIGZhbHNlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgcG9zdE1vdW50V3JhcHBlciQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG59IC8vIENhbGN1bGF0ZSB0aGUgZGlmZiBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cblxuZnVuY3Rpb24gZGlmZlByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAge1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuICB2YXIgbGFzdFByb3BzO1xuICB2YXIgbmV4dFByb3BzO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGxhc3RQcm9wcyA9IGxhc3RSYXdQcm9wcztcbiAgICAgIG5leHRQcm9wcyA9IG5leHRSYXdQcm9wcztcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0UHJvcHMub25DbGljayAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbmV4dFByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIG5leHRQcm9wcyk7XG4gIHZhciBwcm9wS2V5O1xuICB2YXIgc3R5bGVOYW1lO1xuICB2YXIgc3R5bGVVcGRhdGVzID0gbnVsbDtcblxuICBmb3IgKHByb3BLZXkgaW4gbGFzdFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IGxhc3RQcm9wc1twcm9wS2V5XSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHZhciBsYXN0U3R5bGUgPSBsYXN0UHJvcHNbcHJvcEtleV07XG5cbiAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RTdHlsZSkge1xuICAgICAgICBpZiAobGFzdFN0eWxlLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwgfHwgcHJvcEtleSA9PT0gQ0hJTERSRU4pIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IEFVVE9GT0NVUykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgZmliZXIgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBhbGwgb3RoZXIgZGVsZXRlZCBwcm9wZXJ0aWVzIHdlIGFkZCBpdCB0byB0aGUgcXVldWUuIFdlIHVzZVxuICAgICAgLy8gdGhlIGFsbG93ZWQgcHJvcGVydHkgbGlzdCBpbiB0aGUgY29tbWl0IHBoYXNlIGluc3RlYWQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcbiAgICB2YXIgbGFzdFByb3AgPSBsYXN0UHJvcHMgIT0gbnVsbCA/IGxhc3RQcm9wc1twcm9wS2V5XSA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IG5leHRQcm9wID09PSBsYXN0UHJvcCB8fCBuZXh0UHJvcCA9PSBudWxsICYmIGxhc3RQcm9wID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgIC8vIFVuc2V0IHN0eWxlcyBvbiBgbGFzdFByb3BgIGJ1dCBub3Qgb24gYG5leHRQcm9wYC5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFByb3ApIHtcbiAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG5cblxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBuZXh0UHJvcCkge1xuICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxlTmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZWxpZXMgb24gYHVwZGF0ZVN0eWxlc0J5SURgIG5vdCBtdXRhdGluZyBgc3R5bGVVcGRhdGVzYC5cbiAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICBpZiAoIXVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkLnB1c2gocHJvcEtleSwgc3R5bGVVcGRhdGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBsYXN0SHRtbCA9IGxhc3RQcm9wID8gbGFzdFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGxhc3RIdG1sICE9PSBuZXh0SHRtbCkge1xuICAgICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBuZXh0SHRtbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCAnJyArIG5leHRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICAvLyBXZSBlYWdlcmx5IGxpc3RlbiB0byB0aGlzIGV2ZW4gdGhvdWdoIHdlIGhhdmVuJ3QgY29tbWl0dGVkIHlldC5cbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQgJiYgbGFzdFByb3AgIT09IG5leHRQcm9wKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIElmIGFueSBsaXN0ZW5lciB1cGRhdGVzIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgdGhlIFwiY3VycmVudFwiIHByb3BzIHBvaW50ZXIgZ2V0cyB1cGRhdGVkIHNvIHdlIG5lZWQgYSBjb21taXRcbiAgICAgICAgLy8gdG8gdXBkYXRlIHRoaXMgZWxlbWVudC5cbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgYW55IG90aGVyIHByb3BlcnR5IHdlIGFsd2F5cyBhZGQgaXQgdG8gdGhlIHF1ZXVlIGFuZCB0aGVuIHdlXG4gICAgICAvLyBmaWx0ZXIgaXQgb3V0IHVzaW5nIHRoZSBhbGxvd2VkIHByb3BlcnR5IGxpc3QgZHVyaW5nIHRoZSBjb21taXQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbmV4dFByb3ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZVVwZGF0ZXMpIHtcbiAgICB7XG4gICAgICB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0UHJvcHNbU1RZTEVdKTtcbiAgICB9XG5cbiAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2goU1RZTEUsIHN0eWxlVXBkYXRlcyk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn0gLy8gQXBwbHkgdGhlIGRpZmYuXG5cbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcykge1xuICAvLyBVcGRhdGUgY2hlY2tlZCAqYmVmb3JlKiBuYW1lLlxuICAvLyBJbiB0aGUgbWlkZGxlIG9mIGFuIHVwZGF0ZSwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBjaGVja2VkLlxuICAvLyBXaGVuIGEgY2hlY2tlZCByYWRpbyB0cmllcyB0byBjaGFuZ2UgbmFtZSwgYnJvd3NlciBtYWtlcyBhbm90aGVyIHJhZGlvJ3MgY2hlY2tlZCBmYWxzZS5cbiAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiBuZXh0UmF3UHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuZXh0UmF3UHJvcHMubmFtZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlQ2hlY2tlZChkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHdhc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgbGFzdFJhd1Byb3BzKTtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBuZXh0UmF3UHJvcHMpOyAvLyBBcHBseSB0aGUgZGlmZi5cblxuICB1cGRhdGVET01Qcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHdhc0N1c3RvbUNvbXBvbmVudFRhZywgaXNDdXN0b21Db21wb25lbnRUYWcpOyAvLyBUT0RPOiBFbnN1cmUgdGhhdCBhbiB1cGRhdGUgZ2V0cyBzY2hlZHVsZWQgaWYgYW55IG9mIHRoZSBzcGVjaWFsIHByb3BzXG4gIC8vIGNoYW5nZWQuXG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBVcGRhdGUgdGhlIHdyYXBwZXIgYXJvdW5kIGlucHV0cyAqYWZ0ZXIqIHVwZGF0aW5nIHByb3BzLiBUaGlzIGhhcyB0b1xuICAgICAgLy8gaGFwcGVuIGFmdGVyIGB1cGRhdGVET01Qcm9wZXJ0aWVzYC4gT3RoZXJ3aXNlIEhUTUw1IGlucHV0IHZhbGlkYXRpb25zXG4gICAgICAvLyByYWlzZSB3YXJuaW5ncyBhbmQgcHJldmVudCB0aGUgbmV3IHZhbHVlIGZyb20gYmVpbmcgYXNzaWduZWQuXG4gICAgICB1cGRhdGVXcmFwcGVyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHVwZGF0ZVdyYXBwZXIkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgLy8gPHNlbGVjdD4gdmFsdWUgdXBkYXRlIG5lZWRzIHRvIG9jY3VyIGFmdGVyIDxvcHRpb24+IGNoaWxkcmVuXG4gICAgICAvLyByZWNvbmNpbGlhdGlvblxuICAgICAgcG9zdFVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BOYW1lKSB7XG4gIHtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCFwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXSB8fCBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCByYXdQcm9wcywgcGFyZW50TmFtZXNwYWNlLCByb290Q29udGFpbmVyRWxlbWVudCwgaXNDb25jdXJyZW50TW9kZSwgc2hvdWxkV2FybkRldikge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7XG4gIHZhciBleHRyYUF0dHJpYnV0ZU5hbWVzO1xuXG4gIHtcbiAgICBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgcmF3UHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2NhbmNlbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2xvc2UnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgIGNhc2UgJ2VtYmVkJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBsb2FkIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBhbGwgdGhlIG1lZGlhIGV2ZW50cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGVycm9yIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICBjYXNlICdpbWFnZSc6XG4gICAgY2FzZSAnbGluayc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGVycm9yIGFuZCBsb2FkIGV2ZW50cy5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3RvZ2dsZScsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHZhbGlkYXRlUHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHJhd1Byb3BzKTtcblxuICB7XG4gICAgZXh0cmFBdHRyaWJ1dGVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuYXR0cmlidXRlcztcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVzW19pXS5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAvLyBDb250cm9sbGVkIGF0dHJpYnV0ZXMgYXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG4gICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjaGVja2VkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzZWxlY3RlZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IHVzZSB0aGUgb3JpZ2luYWwgbmFtZS5cbiAgICAgICAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMDY3Ni5cbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmFkZChhdHRyaWJ1dGVzW19pXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlUGF5bG9hZCA9IG51bGw7XG5cbiAgZm9yICh2YXIgcHJvcEtleSBpbiByYXdQcm9wcykge1xuICAgIGlmICghcmF3UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXh0UHJvcCA9IHJhd1Byb3BzW3Byb3BLZXldO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICAvLyBGb3IgdGV4dCBjb250ZW50IGNoaWxkcmVuIHdlIGNvbXBhcmUgYWdhaW5zdCB0ZXh0Q29udGVudC4gVGhpc1xuICAgICAgLy8gbWlnaHQgbWF0Y2ggYWRkaXRpb25hbCBIVE1MIHRoYXQgaXMgaGlkZGVuIHdoZW4gd2UgcmVhZCBpdCB1c2luZ1xuICAgICAgLy8gdGV4dENvbnRlbnQuIEUuZy4gXCJmb29cIiB3aWxsIG1hdGNoIFwiZjxzcGFuPm9vPC9zcGFuPlwiIGJ1dCB0aGF0IHN0aWxsXG4gICAgICAvLyBzYXRpc2ZpZXMgb3VyIHJlcXVpcmVtZW50LiBPdXIgcmVxdWlyZW1lbnQgaXMgbm90IHRvIHByb2R1Y2UgcGVyZmVjdFxuICAgICAgLy8gSFRNTCBhbmQgYXR0cmlidXRlcy4gSWRlYWxseSB3ZSBzaG91bGQgcHJlc2VydmUgc3RydWN0dXJlIGJ1dCBpdCdzXG4gICAgICAvLyBvayBub3QgdG8gaWYgdGhlIHZpc2libGUgY29udGVudCBpcyBzdGlsbCBlbm91Z2ggdG8gaW5kaWNhdGUgd2hhdFxuICAgICAgLy8gZXZlbiBsaXN0ZW5lcnMgdGhlc2Ugbm9kZXMgbWlnaHQgYmUgd2lyZWQgdXAgdG8uXG4gICAgICAvLyBUT0RPOiBXYXJuIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBhIHNpbmdsZSB0ZXh0Tm9kZSBhcyBhIGNoaWxkLlxuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIHVzZSBkb21FbGVtZW50LmZpcnN0Q2hpbGQubm9kZVZhbHVlIHRvIGNvbXBhcmU/XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAocmF3UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkddICE9PSB0cnVlKSB7XG4gICAgICAgICAgICBjaGVja0ZvclVubWF0Y2hlZFRleHQoZG9tRWxlbWVudC50ZXh0Q29udGVudCwgbmV4dFByb3AsIGlzQ29uY3VycmVudE1vZGUsIHNob3VsZFdhcm5EZXYpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbQ0hJTERSRU4sIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50LnRleHRDb250ZW50ICE9PSAnJyArIG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKHJhd1Byb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgY2hlY2tGb3JVbm1hdGNoZWRUZXh0KGRvbUVsZW1lbnQudGV4dENvbnRlbnQsIG5leHRQcm9wLCBpc0NvbmN1cnJlbnRNb2RlLCBzaG91bGRXYXJuRGV2KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW0NISUxEUkVOLCAnJyArIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2hvdWxkV2FybkRldiAmJiB0cnVlICYmIC8vIENvbnZpbmNlIEZsb3cgd2UndmUgY2FsY3VsYXRlZCBpdCAoaXQncyBERVYtb25seSBpbiB0aGlzIG1ldGhvZC4pXG4gICAgdHlwZW9mIGlzQ3VzdG9tQ29tcG9uZW50VGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIHByb3BlcnRpZXMgY29ycmVzcG9uZCB0byB0aGVpciBleHBlY3RlZCB2YWx1ZXMuXG4gICAgICB2YXIgc2VydmVyVmFsdWUgPSB2b2lkIDA7XG4gICAgICB2YXIgcHJvcGVydHlJbmZvID0gaXNDdXN0b21Db21wb25lbnRUYWcgJiYgZW5hYmxlQ3VzdG9tRWxlbWVudFByb3BlcnR5U3VwcG9ydCA/IG51bGwgOiBnZXRQcm9wZXJ0eUluZm8ocHJvcEtleSk7XG5cbiAgICAgIGlmIChyYXdQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklOR10gPT09IHRydWUpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HIHx8IC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG4gICAgICBwcm9wS2V5ID09PSAndmFsdWUnIHx8IHByb3BLZXkgPT09ICdjaGVja2VkJyB8fCBwcm9wS2V5ID09PSAnc2VsZWN0ZWQnKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICAgIHZhciBzZXJ2ZXJIVE1MID0gZG9tRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBleHBlY3RlZEhUTUwgPSBub3JtYWxpemVIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcblxuICAgICAgICAgIGlmIChleHBlY3RlZEhUTUwgIT09IHNlcnZlckhUTUwpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJIVE1MLCBleHBlY3RlZEhUTUwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkpO1xuXG4gICAgICAgIGlmIChjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgdmFyIGV4cGVjdGVkU3R5bGUgPSBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMobmV4dFByb3ApO1xuICAgICAgICAgIHNlcnZlclZhbHVlID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRTdHlsZSAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgZXhwZWN0ZWRTdHlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnICYmICFlbmFibGVDdXN0b21FbGVtZW50UHJvcGVydHlTdXBwb3J0KSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCk7XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSkge1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzaG91bGRJZ25vcmVBdHRyaWJ1dGUocHJvcEtleSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykgJiYgIXNob3VsZFJlbW92ZUF0dHJpYnV0ZShwcm9wS2V5LCBuZXh0UHJvcCwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICAgICAgdmFyIGlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCwgcHJvcGVydHlJbmZvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgb3duTmFtZXNwYWNlID0gcGFyZW50TmFtZXNwYWNlO1xuXG4gICAgICAgICAgaWYgKG93bk5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICAgIG93bk5hbWVzcGFjZSA9IGdldEludHJpbnNpY05hbWVzcGFjZSh0YWcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvd25OYW1lc3BhY2UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc3RhbmRhcmROYW1lID0gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcEtleSk7XG5cbiAgICAgICAgICAgIGlmIChzdGFuZGFyZE5hbWUgIT09IG51bGwgJiYgc3RhbmRhcmROYW1lICE9PSBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgIC8vIElmIGFuIFNWRyBwcm9wIGlzIHN1cHBsaWVkIHdpdGggYmFkIGNhc2luZywgaXQgd2lsbFxuICAgICAgICAgICAgICAvLyBiZSBzdWNjZXNzZnVsbHkgcGFyc2VkIGZyb20gSFRNTCwgYnV0IHdpbGwgcHJvZHVjZSBhIG1pc21hdGNoXG4gICAgICAgICAgICAgIC8vIChhbmQgd291bGQgYmUgaW5jb3JyZWN0bHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCkuXG4gICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgd2FybiBhYm91dCBiYWQgY2FzaW5nIGVsc2V3aGVyZS5cbiAgICAgICAgICAgICAgLy8gU28gd2UnbGwgc2tpcCB0aGUgbWlzbGVhZGluZyBleHRyYSBtaXNtYXRjaCB3YXJuaW5nIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nID0gdHJ1ZTsgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuXG4gICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHN0YW5kYXJkTmFtZSk7XG4gICAgICAgICAgICB9IC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cblxuXG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkb250V2FybkN1c3RvbUVsZW1lbnQgPSBlbmFibGVDdXN0b21FbGVtZW50UHJvcGVydHlTdXBwb3J0ICA7XG5cbiAgICAgICAgaWYgKCFkb250V2FybkN1c3RvbUVsZW1lbnQgJiYgbmV4dFByb3AgIT09IHNlcnZlclZhbHVlICYmICFpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoc2hvdWxkV2FybkRldikge1xuICAgICAgaWYgKCAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLnNpemUgPiAwICYmIHJhd1Byb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXSAhPT0gdHJ1ZSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoZXh0cmFBdHRyaWJ1dGVOYW1lcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyKGRvbUVsZW1lbnQsIHJhd1Byb3BzLCB0cnVlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAvLyBGb3IgaW5wdXQgYW5kIHRleHRhcmVhIHdlIGN1cnJlbnQgYWx3YXlzIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgYXRcbiAgICAgIC8vIHBvc3QgbW91bnQgdG8gZm9yY2UgaXQgdG8gZGl2ZXJnZSBmcm9tIGF0dHJpYnV0ZXMuIEhvd2V2ZXIsIGZvclxuICAgICAgLy8gb3B0aW9uIGFuZCBzZWxlY3Qgd2UgZG9uJ3QgcXVpdGUgZG8gdGhlIHNhbWUgdGhpbmcgYW5kIHNlbGVjdFxuICAgICAgLy8gaXMgbm90IHJlc2lsaWVudCB0byB0aGUgRE9NIHN0YXRlIGNoYW5naW5nIHNvIHdlIGRvbid0IGRvIHRoYXQgaGVyZS5cbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIG5vdCBkb2luZyB0aGlzIGZvciBpbnB1dCBhbmQgdGV4dGFyZWEuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHJhd1Byb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59XG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRUZXh0KHRleHROb2RlLCB0ZXh0LCBpc0NvbmN1cnJlbnRNb2RlKSB7XG4gIHZhciBpc0RpZmZlcmVudCA9IHRleHROb2RlLm5vZGVWYWx1ZSAhPT0gdGV4dDtcbiAgcmV0dXJuIGlzRGlmZmVyZW50O1xufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSA8JXM+IGluIDwlcz4uJywgY2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gdGhlIHRleHQgbm9kZSBcIiVzXCIgaW4gPCVzPi4nLCBjaGlsZC5ub2RlVmFsdWUsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnROb2RlLCB0YWcsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIDwlcz4gaW4gPCVzPi4nLCB0YWcsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnROb2RlLCB0ZXh0KSB7XG4gIHtcbiAgICBpZiAodGV4dCA9PT0gJycpIHtcbiAgICAgIC8vIFdlIGV4cGVjdCB0byBpbnNlcnQgZW1wdHkgdGV4dCBub2RlcyBzaW5jZSB0aGV5J3JlIG5vdCByZXByZXNlbnRlZCBpblxuICAgICAgLy8gdGhlIEhUTUwuXG4gICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBzcGVjaWFsIGNhc2UgaWYgd2UgY2FuIGp1c3QgYXZvaWQgaW5zZXJ0aW5nIGVtcHR5XG4gICAgICAvLyB0ZXh0IG5vZGVzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgdGV4dCBub2RlIGZvciBcIiVzXCIgaW4gPCVzPi4nLCB0ZXh0LCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDMoZG9tRWxlbWVudCwgdGFnLCBwcm9wcykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDEoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuICB9XG59XG5cbnZhciB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICAvLyBUaGlzIHZhbGlkYXRpb24gY29kZSB3YXMgd3JpdHRlbiBiYXNlZCBvbiB0aGUgSFRNTDUgcGFyc2luZyBzcGVjOlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuICAvL1xuICAvLyBOb3RlOiB0aGlzIGRvZXMgbm90IGNhdGNoIGFsbCBpbnZhbGlkIG5lc3RpbmcsIG5vciBkb2VzIGl0IHRyeSB0byAoYXMgaXQnc1xuICAvLyBub3QgY2xlYXIgd2hhdCBwcmFjdGljYWwgYmVuZWZpdCBkb2luZyBzbyBwcm92aWRlcyk7IGluc3RlYWQsIHdlIHdhcm4gb25seVxuICAvLyBmb3IgY2FzZXMgd2hlcmUgdGhlIHBhcnNlciB3aWxsIGdpdmUgYSBwYXJzZSB0cmVlIGRpZmZlcmluZyBmcm9tIHdoYXQgUmVhY3RcbiAgLy8gaW50ZW5kZWQuIEZvciBleGFtcGxlLCA8Yj48ZGl2PjwvZGl2PjwvYj4gaXMgaW52YWxpZCBidXQgd2UgZG9uJ3Qgd2FyblxuICAvLyBiZWNhdXNlIGl0IHN0aWxsIHBhcnNlcyBjb3JyZWN0bHk7IHdlIGRvIHdhcm4gZm9yIG90aGVyIGNhc2VzIGxpa2UgbmVzdGVkXG4gIC8vIDxwPiB0YWdzIHdoZXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY29uZCBlbGVtZW50IGltcGxpY2l0bHkgY2xvc2VzIHRoZVxuICAvLyBmaXJzdCwgY2F1c2luZyBhIGNvbmZ1c2luZyBtZXNzLlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNzcGVjaWFsXG4gIHZhciBzcGVjaWFsVGFncyA9IFsnYWRkcmVzcycsICdhcHBsZXQnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2Jhc2UnLCAnYmFzZWZvbnQnLCAnYmdzb3VuZCcsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnY2VudGVyJywgJ2NvbCcsICdjb2xncm91cCcsICdkZCcsICdkZXRhaWxzJywgJ2RpcicsICdkaXYnLCAnZGwnLCAnZHQnLCAnZW1iZWQnLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnZnJhbWUnLCAnZnJhbWVzZXQnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaWZyYW1lJywgJ2ltZycsICdpbnB1dCcsICdpc2luZGV4JywgJ2xpJywgJ2xpbmsnLCAnbGlzdGluZycsICdtYWluJywgJ21hcnF1ZWUnLCAnbWVudScsICdtZW51aXRlbScsICdtZXRhJywgJ25hdicsICdub2VtYmVkJywgJ25vZnJhbWVzJywgJ25vc2NyaXB0JywgJ29iamVjdCcsICdvbCcsICdwJywgJ3BhcmFtJywgJ3BsYWludGV4dCcsICdwcmUnLCAnc2NyaXB0JywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NvdXJjZScsICdzdHlsZScsICdzdW1tYXJ5JywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RlbXBsYXRlJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJywgJ3VsJywgJ3dicicsICd4bXAnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcblxuICB2YXIgaW5TY29wZVRhZ3MgPSBbJ2FwcGxldCcsICdjYXB0aW9uJywgJ2h0bWwnLCAndGFibGUnLCAndGQnLCAndGgnLCAnbWFycXVlZScsICdvYmplY3QnLCAndGVtcGxhdGUnLCAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNodG1sLWludGVncmF0aW9uLXBvaW50XG4gIC8vIFRPRE86IERpc3Rpbmd1aXNoIGJ5IG5hbWVzcGFjZSBoZXJlIC0tIGZvciA8dGl0bGU+LCBpbmNsdWRpbmcgaXQgaGVyZVxuICAvLyBlcnJzIG9uIHRoZSBzaWRlIG9mIGZld2VyIHdhcm5pbmdzXG4gICdmb3JlaWduT2JqZWN0JywgJ2Rlc2MnLCAndGl0bGUnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tYnV0dG9uLXNjb3BlXG5cbiAgdmFyIGJ1dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbJ2J1dHRvbiddKTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjZ2VuZXJhdGUtaW1wbGllZC1lbmQtdGFnc1xuXG4gIHZhciBpbXBsaWVkRW5kVGFncyA9IFsnZGQnLCAnZHQnLCAnbGknLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3AnLCAncnAnLCAncnQnXTtcbiAgdmFyIGVtcHR5QW5jZXN0b3JJbmZvID0ge1xuICAgIGN1cnJlbnQ6IG51bGwsXG4gICAgZm9ybVRhZzogbnVsbCxcbiAgICBhVGFnSW5TY29wZTogbnVsbCxcbiAgICBidXR0b25UYWdJblNjb3BlOiBudWxsLFxuICAgIG5vYnJUYWdJblNjb3BlOiBudWxsLFxuICAgIHBUYWdJbkJ1dHRvblNjb3BlOiBudWxsLFxuICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgZGxJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGxcbiAgfTtcblxuICB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKG9sZEluZm8sIHRhZykge1xuICAgIHZhciBhbmNlc3RvckluZm8gPSBhc3NpZ24oe30sIG9sZEluZm8gfHwgZW1wdHlBbmNlc3RvckluZm8pO1xuXG4gICAgdmFyIGluZm8gPSB7XG4gICAgICB0YWc6IHRhZ1xuICAgIH07XG5cbiAgICBpZiAoaW5TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBudWxsO1xuICAgIH0gLy8gU2VlIHJ1bGVzIGZvciAnbGknLCAnZGQnLCAnZHQnIHN0YXJ0IHRhZ3MgaW5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIGlmIChzcGVjaWFsVGFncy5pbmRleE9mKHRhZykgIT09IC0xICYmIHRhZyAhPT0gJ2FkZHJlc3MnICYmIHRhZyAhPT0gJ2RpdicgJiYgdGFnICE9PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgfVxuXG4gICAgYW5jZXN0b3JJbmZvLmN1cnJlbnQgPSBpbmZvO1xuXG4gICAgaWYgKHRhZyA9PT0gJ2Zvcm0nKSB7XG4gICAgICBhbmNlc3RvckluZm8uZm9ybVRhZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2EnKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdidXR0b24nKSB7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ25vYnInKSB7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdwJykge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnbGknKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2RkJyB8fCB0YWcgPT09ICdkdCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2VzdG9ySW5mbztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBpc1RhZ1ZhbGlkV2l0aFBhcmVudCA9IGZ1bmN0aW9uICh0YWcsIHBhcmVudFRhZykge1xuICAgIC8vIEZpcnN0LCBsZXQncyBjaGVjayBpZiB3ZSdyZSBpbiBhbiB1bnVzdWFsIHBhcnNpbmcgbW9kZS4uLlxuICAgIHN3aXRjaCAocGFyZW50VGFnKSB7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5zZWxlY3RcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJ29wdGdyb3VwJyB8fCB0YWcgPT09ICcjdGV4dCc7XG5cbiAgICAgIGNhc2UgJ29wdGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gU3RyaWN0bHkgc3BlYWtpbmcsIHNlZWluZyBhbiA8b3B0aW9uPiBkb2Vzbid0IG1lYW4gd2UncmUgaW4gYSA8c2VsZWN0PlxuICAgICAgLy8gYnV0XG5cbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50ZFxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY2FwdGlvblxuICAgICAgLy8gTm8gc3BlY2lhbCBiZWhhdmlvciBzaW5jZSB0aGVzZSBydWxlcyBmYWxsIGJhY2sgdG8gXCJpbiBib2R5XCIgbW9kZSBmb3JcbiAgICAgIC8vIGFsbCBleGNlcHQgc3BlY2lhbCB0YWJsZSBub2RlcyB3aGljaCBjYXVzZSBiYWQgcGFyc2luZyBiZWhhdmlvciBhbnl3YXkuXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50clxuXG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0aCcgfHwgdGFnID09PSAndGQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRib2R5XG5cbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RyJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5jb2xncm91cFxuXG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjb2wnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRhYmxlXG5cbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NhcHRpb24nIHx8IHRhZyA9PT0gJ2NvbGdyb3VwJyB8fCB0YWcgPT09ICd0Ym9keScgfHwgdGFnID09PSAndGZvb3QnIHx8IHRhZyA9PT0gJ3RoZWFkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5oZWFkXG5cbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnYmFzZScgfHwgdGFnID09PSAnYmFzZWZvbnQnIHx8IHRhZyA9PT0gJ2Jnc291bmQnIHx8IHRhZyA9PT0gJ2xpbmsnIHx8IHRhZyA9PT0gJ21ldGEnIHx8IHRhZyA9PT0gJ3RpdGxlJyB8fCB0YWcgPT09ICdub3NjcmlwdCcgfHwgdGFnID09PSAnbm9mcmFtZXMnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlbWFudGljcy5odG1sI3RoZS1odG1sLWVsZW1lbnRcblxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdoZWFkJyB8fCB0YWcgPT09ICdib2R5JyB8fCB0YWcgPT09ICdmcmFtZXNldCc7XG5cbiAgICAgIGNhc2UgJ2ZyYW1lc2V0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2ZyYW1lJztcblxuICAgICAgY2FzZSAnI2RvY3VtZW50JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2h0bWwnO1xuICAgIH0gLy8gUHJvYmFibHkgaW4gdGhlIFwiaW4gYm9keVwiIHBhcnNpbmcgbW9kZSwgc28gd2Ugb3V0bGF3IG9ubHkgdGFnIGNvbWJvc1xuICAgIC8vIHdoZXJlIHRoZSBwYXJzaW5nIHJ1bGVzIGNhdXNlIGltcGxpY2l0IG9wZW5zIG9yIGNsb3NlcyB0byBiZSBhZGRlZC5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5ib2R5XG5cblxuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgIT09ICdoMScgJiYgcGFyZW50VGFnICE9PSAnaDInICYmIHBhcmVudFRhZyAhPT0gJ2gzJyAmJiBwYXJlbnRUYWcgIT09ICdoNCcgJiYgcGFyZW50VGFnICE9PSAnaDUnICYmIHBhcmVudFRhZyAhPT0gJ2g2JztcblxuICAgICAgY2FzZSAncnAnOlxuICAgICAgY2FzZSAncnQnOlxuICAgICAgICByZXR1cm4gaW1wbGllZEVuZFRhZ3MuaW5kZXhPZihwYXJlbnRUYWcpID09PSAtMTtcblxuICAgICAgY2FzZSAnYm9keSc6XG4gICAgICBjYXNlICdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2NvbCc6XG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICBjYXNlICdmcmFtZSc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgY2FzZSAndGgnOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndHInOlxuICAgICAgICAvLyBUaGVzZSB0YWdzIGFyZSBvbmx5IHZhbGlkIHdpdGggYSBmZXcgcGFyZW50cyB0aGF0IGhhdmUgc3BlY2lhbCBjaGlsZFxuICAgICAgICAvLyBwYXJzaW5nIHJ1bGVzIC0tIGlmIHdlJ3JlIGRvd24gaGVyZSwgdGhlbiBub25lIG9mIHRob3NlIG1hdGNoZWQgYW5kXG4gICAgICAgIC8vIHNvIHdlIGFsbG93IGl0IG9ubHkgaWYgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBwYXJlbnQgaXMsIGFzIGFsbCBvdGhlclxuICAgICAgICAvLyBjYXNlcyBhcmUgaW52YWxpZC5cbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyA9PSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuXG5cbiAgdmFyIGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcgPSBmdW5jdGlvbiAodGFnLCBhbmNlc3RvckluZm8pIHtcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdhcnRpY2xlJzpcbiAgICAgIGNhc2UgJ2FzaWRlJzpcbiAgICAgIGNhc2UgJ2Jsb2NrcXVvdGUnOlxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGNhc2UgJ2Rpcic6XG4gICAgICBjYXNlICdkaXYnOlxuICAgICAgY2FzZSAnZGwnOlxuICAgICAgY2FzZSAnZmllbGRzZXQnOlxuICAgICAgY2FzZSAnZmlnY2FwdGlvbic6XG4gICAgICBjYXNlICdmaWd1cmUnOlxuICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICBjYXNlICdoZ3JvdXAnOlxuICAgICAgY2FzZSAnbWFpbic6XG4gICAgICBjYXNlICdtZW51JzpcbiAgICAgIGNhc2UgJ25hdic6XG4gICAgICBjYXNlICdvbCc6XG4gICAgICBjYXNlICdwJzpcbiAgICAgIGNhc2UgJ3NlY3Rpb24nOlxuICAgICAgY2FzZSAnc3VtbWFyeSc6XG4gICAgICBjYXNlICd1bCc6XG4gICAgICBjYXNlICdwcmUnOlxuICAgICAgY2FzZSAnbGlzdGluZyc6XG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICBjYXNlICdocic6XG4gICAgICBjYXNlICd4bXAnOlxuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5mb3JtVGFnIHx8IGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnbGknOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2RkJzpcbiAgICAgIGNhc2UgJ2R0JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5kbEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnYnV0dG9uJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdhJzpcbiAgICAgICAgLy8gU3BlYyBzYXlzIHNvbWV0aGluZyBhYm91dCBzdG9yaW5nIGEgbGlzdCBvZiBtYXJrZXJzLCBidXQgaXQgc291bmRzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhpcyBjaGVjay5cbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnbm9icic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgdmFyIGRpZFdhcm4kMSA9IHt9O1xuXG4gIHZhbGlkYXRlRE9NTmVzdGluZyA9IGZ1bmN0aW9uIChjaGlsZFRhZywgY2hpbGRUZXh0LCBhbmNlc3RvckluZm8pIHtcbiAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8gfHwgZW1wdHlBbmNlc3RvckluZm87XG4gICAgdmFyIHBhcmVudEluZm8gPSBhbmNlc3RvckluZm8uY3VycmVudDtcbiAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50SW5mbyAmJiBwYXJlbnRJbmZvLnRhZztcblxuICAgIGlmIChjaGlsZFRleHQgIT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkVGFnICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZzogd2hlbiBjaGlsZFRleHQgaXMgcGFzc2VkLCBjaGlsZFRhZyBzaG91bGQgYmUgbnVsbCcpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZFRhZyA9ICcjdGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGludmFsaWRQYXJlbnQgPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChjaGlsZFRhZywgcGFyZW50VGFnKSA/IG51bGwgOiBwYXJlbnRJbmZvO1xuICAgIHZhciBpbnZhbGlkQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50ID8gbnVsbCA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIGludmFsaWRQYXJlbnRPckFuY2VzdG9yID0gaW52YWxpZFBhcmVudCB8fCBpbnZhbGlkQW5jZXN0b3I7XG5cbiAgICBpZiAoIWludmFsaWRQYXJlbnRPckFuY2VzdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGFuY2VzdG9yVGFnID0gaW52YWxpZFBhcmVudE9yQW5jZXN0b3IudGFnO1xuICAgIHZhciB3YXJuS2V5ID0gISFpbnZhbGlkUGFyZW50ICsgJ3wnICsgY2hpbGRUYWcgKyAnfCcgKyBhbmNlc3RvclRhZztcblxuICAgIGlmIChkaWRXYXJuJDFbd2FybktleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuJDFbd2FybktleV0gPSB0cnVlO1xuICAgIHZhciB0YWdEaXNwbGF5TmFtZSA9IGNoaWxkVGFnO1xuICAgIHZhciB3aGl0ZXNwYWNlSW5mbyA9ICcnO1xuXG4gICAgaWYgKGNoaWxkVGFnID09PSAnI3RleHQnKSB7XG4gICAgICBpZiAoL1xcUy8udGVzdChjaGlsZFRleHQpKSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1RleHQgbm9kZXMnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnV2hpdGVzcGFjZSB0ZXh0IG5vZGVzJztcbiAgICAgICAgd2hpdGVzcGFjZUluZm8gPSBcIiBNYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgYW55IGV4dHJhIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIG9uIFwiICsgJ2VhY2ggbGluZSBvZiB5b3VyIHNvdXJjZSBjb2RlLic7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJzwnICsgY2hpbGRUYWcgKyAnPic7XG4gICAgfVxuXG4gICAgaWYgKGludmFsaWRQYXJlbnQpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgIGlmIChhbmNlc3RvclRhZyA9PT0gJ3RhYmxlJyAmJiBjaGlsZFRhZyA9PT0gJ3RyJykge1xuICAgICAgICBpbmZvICs9ICcgQWRkIGEgPHRib2R5PiwgPHRoZWFkPiBvciA8dGZvb3Q+IHRvIHlvdXIgY29kZSB0byBtYXRjaCB0aGUgRE9NIHRyZWUgZ2VuZXJhdGVkIGJ5ICcgKyAndGhlIGJyb3dzZXIuJztcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgY2hpbGQgb2YgPCVzPi4lcyVzJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCB3aGl0ZXNwYWNlSW5mbywgaW5mbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGRlc2NlbmRhbnQgb2YgJyArICc8JXM+LicsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZyk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMSA9ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnO1xudmFyIFNVU1BFTlNFX1NUQVJUX0RBVEEgPSAnJCc7XG52YXIgU1VTUEVOU0VfRU5EX0RBVEEgPSAnLyQnO1xudmFyIFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSA9ICckPyc7XG52YXIgU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSA9ICckISc7XG52YXIgU1RZTEUkMSA9ICdzdHlsZSc7XG52YXIgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG52YXIgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250ZXh0KHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB2YXIgdHlwZTtcbiAgdmFyIG5hbWVzcGFjZTtcbiAgdmFyIG5vZGVUeXBlID0gcm9vdENvbnRhaW5lckluc3RhbmNlLm5vZGVUeXBlO1xuXG4gIHN3aXRjaCAobm9kZVR5cGUpIHtcbiAgICBjYXNlIERPQ1VNRU5UX05PREU6XG4gICAgY2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlxuICAgICAge1xuICAgICAgICB0eXBlID0gbm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyAnI2RvY3VtZW50JyA6ICcjZnJhZ21lbnQnO1xuICAgICAgICB2YXIgcm9vdCA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIG5hbWVzcGFjZSA9IHJvb3QgPyByb290Lm5hbWVzcGFjZVVSSSA6IGdldENoaWxkTmFtZXNwYWNlKG51bGwsICcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB2YXIgY29udGFpbmVyID0gbm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSA/IHJvb3RDb250YWluZXJJbnN0YW5jZS5wYXJlbnROb2RlIDogcm9vdENvbnRhaW5lckluc3RhbmNlO1xuICAgICAgICB2YXIgb3duTmFtZXNwYWNlID0gY29udGFpbmVyLm5hbWVzcGFjZVVSSSB8fCBudWxsO1xuICAgICAgICB0eXBlID0gY29udGFpbmVyLnRhZ05hbWU7XG4gICAgICAgIG5hbWVzcGFjZSA9IGdldENoaWxkTmFtZXNwYWNlKG93bk5hbWVzcGFjZSwgdHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHZhciB2YWxpZGF0ZWRUYWcgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8obnVsbCwgdmFsaWRhdGVkVGFnKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICBhbmNlc3RvckluZm86IGFuY2VzdG9ySW5mb1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldENoaWxkSG9zdENvbnRleHQocGFyZW50SG9zdENvbnRleHQsIHR5cGUsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB7XG4gICAgdmFyIHBhcmVudEhvc3RDb250ZXh0RGV2ID0gcGFyZW50SG9zdENvbnRleHQ7XG4gICAgdmFyIG5hbWVzcGFjZSA9IGdldENoaWxkTmFtZXNwYWNlKHBhcmVudEhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZSwgdHlwZSk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8ocGFyZW50SG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICBhbmNlc3RvckluZm86IGFuY2VzdG9ySW5mb1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVGb3JDb21taXQoY29udGFpbmVySW5mbykge1xuICBldmVudHNFbmFibGVkID0gaXNFbmFibGVkKCk7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24oKTtcbiAgdmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcblxuICBzZXRFbmFibGVkKGZhbHNlKTtcbiAgcmV0dXJuIGFjdGl2ZUluc3RhbmNlO1xufVxuZnVuY3Rpb24gcmVzZXRBZnRlckNvbW1pdChjb250YWluZXJJbmZvKSB7XG4gIHJlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uSW5mb3JtYXRpb24pO1xuICBzZXRFbmFibGVkKGV2ZW50c0VuYWJsZWQpO1xuICBldmVudHNFbmFibGVkID0gbnVsbDtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgLy8gVE9ETzogdGFrZSBuYW1lc3BhY2UgaW50byBhY2NvdW50IHdoZW4gdmFsaWRhdGluZy5cbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcodHlwZSwgbnVsbCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcblxuICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHZhciBzdHJpbmcgPSAnJyArIHByb3BzLmNoaWxkcmVuO1xuICAgICAgdmFyIG93bkFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8oaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBzdHJpbmcsIG93bkFuY2VzdG9ySW5mbyk7XG4gICAgfVxuXG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG5cbiAgdmFyIGRvbUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIHBhcmVudE5hbWVzcGFjZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGRvbUVsZW1lbnQpO1xuICB1cGRhdGVGaWJlclByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGRvbUVsZW1lbnQsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG4gIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmV0dXJuICEhcHJvcHMuYXV0b0ZvY3VzO1xuXG4gICAgY2FzZSAnaW1nJzpcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZVVwZGF0ZShkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuXG4gICAgaWYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiAhPT0gdHlwZW9mIG9sZFByb3BzLmNoaWxkcmVuICYmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpKSB7XG4gICAgICB2YXIgc3RyaW5nID0gJycgKyBuZXdQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBvd25BbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvKGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbywgdHlwZSk7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgc3RyaW5nLCBvd25BbmNlc3RvckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgcHJvcHMpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICd0ZXh0YXJlYScgfHwgdHlwZSA9PT0gJ25vc2NyaXB0JyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09PSAnb2JqZWN0JyAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHRJbnN0YW5jZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcobnVsbCwgdGV4dCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcbiAgfVxuXG4gIHZhciB0ZXh0Tm9kZSA9IGNyZWF0ZVRleHROb2RlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHROb2RlKTtcbiAgcmV0dXJuIHRleHROb2RlO1xufVxuZnVuY3Rpb24gZ2V0Q3VycmVudEV2ZW50UHJpb3JpdHkoKSB7XG4gIHZhciBjdXJyZW50RXZlbnQgPSB3aW5kb3cuZXZlbnQ7XG5cbiAgaWYgKGN1cnJlbnRFdmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIERlZmF1bHRFdmVudFByaW9yaXR5O1xuICB9XG5cbiAgcmV0dXJuIGdldEV2ZW50UHJpb3JpdHkoY3VycmVudEV2ZW50LnR5cGUpO1xufVxuLy8gaWYgYSBjb21wb25lbnQganVzdCBpbXBvcnRzIFJlYWN0RE9NIChlLmcuIGZvciBmaW5kRE9NTm9kZSkuXG4vLyBTb21lIGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBzZXRUaW1lb3V0IG9yIGNsZWFyVGltZW91dC5cblxudmFyIHNjaGVkdWxlVGltZW91dCA9IHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gc2V0VGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBjYW5jZWxUaW1lb3V0ID0gdHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IGNsZWFyVGltZW91dCA6IHVuZGVmaW5lZDtcbnZhciBub1RpbWVvdXQgPSAtMTtcbnZhciBsb2NhbFByb21pc2UgPSB0eXBlb2YgUHJvbWlzZSA9PT0gJ2Z1bmN0aW9uJyA/IFByb21pc2UgOiB1bmRlZmluZWQ7IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBzY2hlZHVsZU1pY3JvdGFzayA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gJ2Z1bmN0aW9uJyA/IHF1ZXVlTWljcm90YXNrIDogdHlwZW9mIGxvY2FsUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgPyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGxvY2FsUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oY2FsbGJhY2spLmNhdGNoKGhhbmRsZUVycm9ySW5OZXh0VGljayk7XG59IDogc2NoZWR1bGVUaW1lb3V0OyAvLyBUT0RPOiBEZXRlcm1pbmUgdGhlIGJlc3QgZmFsbGJhY2sgaGVyZS5cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3JJbk5leHRUaWNrKGVycm9yKSB7XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIHRocm93IGVycm9yO1xuICB9KTtcbn0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY29tbWl0TW91bnQoZG9tRWxlbWVudCwgdHlwZSwgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gRGVzcGl0ZSB0aGUgbmFtaW5nIHRoYXQgbWlnaHQgaW1wbHkgb3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCBvbmx5XG4gIC8vIGZpcmVzIGlmIHRoZXJlIGlzIGFuIGBVcGRhdGVgIGVmZmVjdCBzY2hlZHVsZWQgZHVyaW5nIG1vdW50aW5nLlxuICAvLyBUaGlzIGhhcHBlbnMgaWYgYGZpbmFsaXplSW5pdGlhbENoaWxkcmVuYCByZXR1cm5zIGB0cnVlYCAod2hpY2ggaXRcbiAgLy8gZG9lcyB0byBpbXBsZW1lbnQgdGhlIGBhdXRvRm9jdXNgIGF0dHJpYnV0ZSBvbiB0aGUgY2xpZW50KS4gQnV0XG4gIC8vIHRoZXJlIGFyZSBhbHNvIG90aGVyIGNhc2VzIHdoZW4gdGhpcyBtaWdodCBoYXBwZW4gKHN1Y2ggYXMgcGF0Y2hpbmdcbiAgLy8gdXAgdGV4dCBjb250ZW50IGR1cmluZyBoeWRyYXRpb24gbWlzbWF0Y2gpLiBTbyB3ZSdsbCBjaGVjayB0aGlzIGFnYWluLlxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdidXR0b24nOlxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGlmIChuZXdQcm9wcy5hdXRvRm9jdXMpIHtcbiAgICAgICAgZG9tRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICdpbWcnOlxuICAgICAge1xuICAgICAgICBpZiAobmV3UHJvcHMuc3JjKSB7XG4gICAgICAgICAgZG9tRWxlbWVudC5zcmMgPSBuZXdQcm9wcy5zcmM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNvbW1pdFVwZGF0ZShkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIERPTSBub2RlLlxuICB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7IC8vIFVwZGF0ZSB0aGUgcHJvcHMgaGFuZGxlIHNvIHRoYXQgd2Uga25vdyB3aGljaCBwcm9wcyBhcmUgdGhlIG9uZXMgd2l0aFxuICAvLyB3aXRoIGN1cnJlbnQgZXZlbnQgaGFuZGxlcnMuXG5cbiAgdXBkYXRlRmliZXJQcm9wcyhkb21FbGVtZW50LCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiByZXNldFRleHRDb250ZW50KGRvbUVsZW1lbnQpIHtcbiAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycpO1xufVxuZnVuY3Rpb24gY29tbWl0VGV4dFVwZGF0ZSh0ZXh0SW5zdGFuY2UsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9IG5ld1RleHQ7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIHZhciBwYXJlbnROb2RlO1xuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXIucGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgY29udGFpbmVyKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyO1xuICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9IC8vIFRoaXMgY29udGFpbmVyIG1pZ2h0IGJlIHVzZWQgZm9yIGEgcG9ydGFsLlxuICAvLyBJZiBzb21ldGhpbmcgaW5zaWRlIGEgcG9ydGFsIGlzIGNsaWNrZWQsIHRoYXQgY2xpY2sgc2hvdWxkIGJ1YmJsZVxuICAvLyB0aHJvdWdoIHRoZSBSZWFjdCB0cmVlLiBIb3dldmVyLCBvbiBNb2JpbGUgU2FmYXJpIHRoZSBjbGljayB3b3VsZFxuICAvLyBuZXZlciBidWJibGUgdGhyb3VnaCB0aGUgKkRPTSogdHJlZSB1bmxlc3MgYW4gYW5jZXN0b3Igd2l0aCBvbmNsaWNrXG4gIC8vIGV2ZW50IGV4aXN0cy4gU28gd2Ugd291bGRuJ3Qgc2VlIGl0IGFuZCBkaXNwYXRjaCBpdC5cbiAgLy8gVGhpcyBpcyB3aHkgd2UgZW5zdXJlIHRoYXQgbm9uIFJlYWN0IHJvb3QgY29udGFpbmVycyBoYXZlIGlubGluZSBvbmNsaWNrXG4gIC8vIGRlZmluZWQuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE5MThcblxuXG4gIHZhciByZWFjdFJvb3RDb250YWluZXIgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICBpZiAoKHJlYWN0Um9vdENvbnRhaW5lciA9PT0gbnVsbCB8fCByZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZCkgJiYgcGFyZW50Tm9kZS5vbmNsaWNrID09PSBudWxsKSB7XG4gICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChwYXJlbnROb2RlKTtcbiAgfVxufVxuZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKHBhcmVudEluc3RhbmNlLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG59XG5mdW5jdGlvbiBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShjb250YWluZXIsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjb250YWluZXIsIGNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9XG59XG5mdW5jdGlvbiBjbGVhclN1c3BlbnNlQm91bmRhcnkocGFyZW50SW5zdGFuY2UsIHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSBzdXNwZW5zZUluc3RhbmNlOyAvLyBEZWxldGUgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIGRvIHtcbiAgICB2YXIgbmV4dE5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICAgIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKG5vZGUpO1xuXG4gICAgaWYgKG5leHROb2RlICYmIG5leHROb2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbmV4dE5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGlmIChkZXB0aCA9PT0gMCkge1xuICAgICAgICAgIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKG5leHROb2RlKTsgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuXG4gICAgICAgICAgcmV0cnlJZkJsb2NrZWRPbihzdXNwZW5zZUluc3RhbmNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5leHROb2RlO1xuICB9IHdoaWxlIChub2RlKTsgLy8gVE9ETzogV2Fybiwgd2UgZGlkbid0IGZpbmQgdGhlIGVuZCBjb21tZW50IGJvdW5kYXJ5LlxuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG5cblxuICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gY2xlYXJTdXNwZW5zZUJvdW5kYXJ5RnJvbUNvbnRhaW5lcihjb250YWluZXIsIHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY2xlYXJTdXNwZW5zZUJvdW5kYXJ5KGNvbnRhaW5lci5wYXJlbnROb2RlLCBzdXNwZW5zZUluc3RhbmNlKTtcbiAgfSBlbHNlIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIGNsZWFyU3VzcGVuc2VCb3VuZGFyeShjb250YWluZXIsIHN1c3BlbnNlSW5zdGFuY2UpO1xuICB9IC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cblxuXG4gIHJldHJ5SWZCbG9ja2VkT24oY29udGFpbmVyKTtcbn1cbmZ1bmN0aW9uIGhpZGVJbnN0YW5jZShpbnN0YW5jZSkge1xuICAvLyBUT0RPOiBEb2VzIHRoaXMgd29yayBmb3IgYWxsIGVsZW1lbnQgdHlwZXM/IFdoYXQgYWJvdXQgTWF0aE1MPyBTaG91bGQgd2VcbiAgLy8gcGFzcyBob3N0IGNvbnRleHQgdG8gdGhpcyBtZXRob2Q/XG4gIGluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHZhciBzdHlsZSA9IGluc3RhbmNlLnN0eWxlO1xuXG4gIGlmICh0eXBlb2Ygc3R5bGUuc2V0UHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJywgJ2ltcG9ydGFudCcpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlKSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSAnJztcbn1cbmZ1bmN0aW9uIHVuaGlkZUluc3RhbmNlKGluc3RhbmNlLCBwcm9wcykge1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGVQcm9wID0gcHJvcHNbU1RZTEUkMV07XG4gIHZhciBkaXNwbGF5ID0gc3R5bGVQcm9wICE9PSB1bmRlZmluZWQgJiYgc3R5bGVQcm9wICE9PSBudWxsICYmIHN0eWxlUHJvcC5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpID8gc3R5bGVQcm9wLmRpc3BsYXkgOiBudWxsO1xuICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZSgnZGlzcGxheScsIGRpc3BsYXkpO1xufVxuZnVuY3Rpb24gdW5oaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gdGV4dDtcbn1cbmZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICBjb250YWluZXIudGV4dENvbnRlbnQgPSAnJztcbiAgfSBlbHNlIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUpIHtcbiAgICBpZiAoY29udGFpbmVyLmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5kb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxufSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjYW5IeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmIChpbnN0YW5jZS5ub2RlVHlwZSAhPT0gRUxFTUVOVF9OT0RFIHx8IHR5cGUudG9Mb3dlckNhc2UoKSAhPT0gaW5zdGFuY2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYW4gZWxlbWVudCBub2RlLlxuXG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShpbnN0YW5jZSwgdGV4dCkge1xuICBpZiAodGV4dCA9PT0gJycgfHwgaW5zdGFuY2Uubm9kZVR5cGUgIT09IFRFWFRfTk9ERSkge1xuICAgIC8vIEVtcHR5IHN0cmluZ3MgYXJlIG5vdCBwYXJzZWQgYnkgSFRNTCBzbyB0aGVyZSB3b24ndCBiZSBhIGNvcnJlY3QgbWF0Y2ggaGVyZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGEgdGV4dCBub2RlLlxuXG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gY2FuSHlkcmF0ZVN1c3BlbnNlSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgaWYgKGluc3RhbmNlLm5vZGVUeXBlICE9PSBDT01NRU5UX05PREUpIHtcbiAgICAvLyBFbXB0eSBzdHJpbmdzIGFyZSBub3QgcGFyc2VkIGJ5IEhUTUwgc28gdGhlcmUgd29uJ3QgYmUgYSBjb3JyZWN0IG1hdGNoIGhlcmUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhIHN1c3BlbnNlIG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEE7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQTtcbn1cbmZ1bmN0aW9uIGdldFN1c3BlbnNlSW5zdGFuY2VGYWxsYmFja0Vycm9yRGV0YWlscyhpbnN0YW5jZSkge1xuICB2YXIgZGF0YXNldCA9IGluc3RhbmNlLm5leHRTaWJsaW5nICYmIGluc3RhbmNlLm5leHRTaWJsaW5nLmRhdGFzZXQ7XG4gIHZhciBkaWdlc3QsIG1lc3NhZ2UsIHN0YWNrO1xuXG4gIGlmIChkYXRhc2V0KSB7XG4gICAgZGlnZXN0ID0gZGF0YXNldC5kZ3N0O1xuXG4gICAge1xuICAgICAgbWVzc2FnZSA9IGRhdGFzZXQubXNnO1xuICAgICAgc3RhY2sgPSBkYXRhc2V0LnN0Y2s7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgZGlnZXN0OiBkaWdlc3QsXG4gICAgICBzdGFjazogc3RhY2tcbiAgICB9O1xuICB9IC8vIGxldCB2YWx1ZSA9IHttZXNzYWdlOiB1bmRlZmluZWQsIGhhc2g6IHVuZGVmaW5lZH07XG4gIC8vIGNvbnN0IG5leHRTaWJsaW5nID0gaW5zdGFuY2UubmV4dFNpYmxpbmc7XG4gIC8vIGlmIChuZXh0U2libGluZykge1xuICAvLyAgIGNvbnN0IGRhdGFzZXQgPSAoKG5leHRTaWJsaW5nOiBhbnkpOiBIVE1MVGVtcGxhdGVFbGVtZW50KS5kYXRhc2V0O1xuICAvLyAgIHZhbHVlLm1lc3NhZ2UgPSBkYXRhc2V0Lm1zZztcbiAgLy8gICB2YWx1ZS5oYXNoID0gZGF0YXNldC5oYXNoO1xuICAvLyAgIGlmICh0cnVlKSB7XG4gIC8vICAgICB2YWx1ZS5zdGFjayA9IGRhdGFzZXQuc3RhY2s7XG4gIC8vICAgfVxuICAvLyB9XG4gIC8vIHJldHVybiB2YWx1ZTtcblxufVxuZnVuY3Rpb24gcmVnaXN0ZXJTdXNwZW5zZUluc3RhbmNlUmV0cnkoaW5zdGFuY2UsIGNhbGxiYWNrKSB7XG4gIGluc3RhbmNlLl9yZWFjdFJldHJ5ID0gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlKG5vZGUpIHtcbiAgLy8gU2tpcCBub24taHlkcmF0YWJsZSBub2Rlcy5cbiAgZm9yICg7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICB2YXIgbm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlO1xuXG4gICAgaWYgKG5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKG5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBub2RlRGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKG5vZGVEYXRhID09PSBTVVNQRU5TRV9TVEFSVF9EQVRBIHx8IG5vZGVEYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IG5vZGVEYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlRGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKHBhcmVudEluc3RhbmNlLmZpcnN0Q2hpbGQpO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGRXaXRoaW5Db250YWluZXIocGFyZW50Q29udGFpbmVyKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShwYXJlbnRDb250YWluZXIuZmlyc3RDaGlsZCk7XG59XG5mdW5jdGlvbiBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZFdpdGhpblN1c3BlbnNlSW5zdGFuY2UocGFyZW50SW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKHBhcmVudEluc3RhbmNlLm5leHRTaWJsaW5nKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHNob3VsZFdhcm5EZXYpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgaW5zdGFuY2UpOyAvLyBUT0RPOiBQb3NzaWJseSBkZWZlciB0aGlzIHVudGlsIHRoZSBjb21taXQgcGhhc2Ugd2hlcmUgYWxsIHRoZSBldmVudHNcbiAgLy8gZ2V0IGF0dGFjaGVkLlxuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoaW5zdGFuY2UsIHByb3BzKTtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9IC8vIFRPRE86IFRlbXBvcmFyeSBoYWNrIHRvIGNoZWNrIGlmIHdlJ3JlIGluIGEgY29uY3VycmVudCByb290LiBXZSBjYW4gZGVsZXRlXG4gIC8vIHdoZW4gdGhlIGxlZ2FjeSByb290IEFQSSBpcyByZW1vdmVkLlxuXG5cbiAgdmFyIGlzQ29uY3VycmVudE1vZGUgPSAoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZS5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGU7XG4gIHJldHVybiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgcGFyZW50TmFtZXNwYWNlLCByb290Q29udGFpbmVySW5zdGFuY2UsIGlzQ29uY3VycmVudE1vZGUsIHNob3VsZFdhcm5EZXYpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHNob3VsZFdhcm5EZXYpIHtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dEluc3RhbmNlKTsgLy8gVE9ETzogVGVtcG9yYXJ5IGhhY2sgdG8gY2hlY2sgaWYgd2UncmUgaW4gYSBjb25jdXJyZW50IHJvb3QuIFdlIGNhbiBkZWxldGVcbiAgLy8gd2hlbiB0aGUgbGVnYWN5IHJvb3QgQVBJIGlzIHJlbW92ZWQuXG5cbiAgdmFyIGlzQ29uY3VycmVudE1vZGUgPSAoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZS5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGU7XG4gIHJldHVybiBkaWZmSHlkcmF0ZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG59XG5mdW5jdGlvbiBoeWRyYXRlU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gc3VzcGVuc2VJbnN0YW5jZS5uZXh0U2libGluZzsgLy8gU2tpcCBwYXN0IGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgfSAvLyBUT0RPOiBXYXJuLCB3ZSBkaWRuJ3QgZmluZCB0aGUgZW5kIGNvbW1lbnQgYm91bmRhcnkuXG5cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gUmV0dXJucyB0aGUgU3VzcGVuc2VJbnN0YW5jZSBpZiB0aGlzIG5vZGUgaXMgYSBkaXJlY3QgY2hpbGQgb2YgYVxuLy8gU3VzcGVuc2VJbnN0YW5jZS4gSS5lLiBpZiBpdHMgcHJldmlvdXMgc2libGluZyBpcyBhIENvbW1lbnQgd2l0aFxuLy8gU1VTUEVOU0VfeF9TVEFSVF9EQVRBLiBPdGhlcndpc2UsIG51bGwuXG5cbmZ1bmN0aW9uIGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0SW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0YW5jZS5wcmV2aW91c1NpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihjb250YWluZXIpO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gc2hvdWxkRGVsZXRlVW5oeWRyYXRlZFRhaWxJbnN0YW5jZXMocGFyZW50VHlwZSkge1xuICByZXR1cm4gcGFyZW50VHlwZSAhPT0gJ2hlYWQnICYmIHBhcmVudFR5cGUgIT09ICdib2R5Jztcbn1cbmZ1bmN0aW9uIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHQsIGlzQ29uY3VycmVudE1vZGUpIHtcbiAgdmFyIHNob3VsZFdhcm5EZXYgPSB0cnVlO1xuICBjaGVja0ZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLm5vZGVWYWx1ZSwgdGV4dCwgaXNDb25jdXJyZW50TW9kZSwgc2hvdWxkV2FybkRldik7XG59XG5mdW5jdGlvbiBkaWROb3RNYXRjaEh5ZHJhdGVkVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dEluc3RhbmNlLCB0ZXh0LCBpc0NvbmN1cnJlbnRNb2RlKSB7XG4gIGlmIChwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHZhciBzaG91bGRXYXJuRGV2ID0gdHJ1ZTtcbiAgICBjaGVja0ZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLm5vZGVWYWx1ZSwgdGV4dCwgaXNDb25jdXJyZW50TW9kZSwgc2hvdWxkV2FybkRldik7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZVdpdGhpbkNvbnRhaW5lcihwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUluc3RhbmNlV2l0aGluU3VzcGVuc2VJbnN0YW5jZShwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWU6IE9ubHkgRWxlbWVudCBvciBEb2N1bWVudCBjYW4gYmUgcGFyZW50IG5vZGVzLlxuICAgIHZhciBwYXJlbnROb2RlID0gcGFyZW50SW5zdGFuY2UucGFyZW50Tm9kZTtcblxuICAgIGlmIChwYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudE5vZGUsIGluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnROb2RlLCBpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSwgaXNDb25jdXJyZW50TW9kZSkge1xuICB7XG4gICAgaWYgKGlzQ29uY3VycmVudE1vZGUgfHwgcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZVdpdGhpbkNvbnRhaW5lcihwYXJlbnRDb250YWluZXIsIHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Q29udGFpbmVyLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2VXaXRoaW5Db250YWluZXIocGFyZW50Q29udGFpbmVyLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZVdpdGhpblN1c3BlbnNlSW5zdGFuY2UocGFyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lOiBPbmx5IEVsZW1lbnQgb3IgRG9jdW1lbnQgY2FuIGJlIHBhcmVudCBub2Rlcy5cbiAgICB2YXIgcGFyZW50Tm9kZSA9IHBhcmVudEluc3RhbmNlLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudE5vZGUgIT09IG51bGwpIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnROb2RlLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2VXaXRoaW5TdXNwZW5zZUluc3RhbmNlKHBhcmVudEluc3RhbmNlLCB0ZXh0KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lOiBPbmx5IEVsZW1lbnQgb3IgRG9jdW1lbnQgY2FuIGJlIHBhcmVudCBub2Rlcy5cbiAgICB2YXIgcGFyZW50Tm9kZSA9IHBhcmVudEluc3RhbmNlLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudE5vZGUgIT09IG51bGwpIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnROb2RlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHR5cGUsIHByb3BzLCBpc0NvbmN1cnJlbnRNb2RlKSB7XG4gIHtcbiAgICBpZiAoaXNDb25jdXJyZW50TW9kZSB8fCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudEluc3RhbmNlLCB0eXBlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dCwgaXNDb25jdXJyZW50TW9kZSkge1xuICB7XG4gICAgaWYgKGlzQ29uY3VycmVudE1vZGUgfHwgcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRJbnN0YW5jZSwgdGV4dCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBlcnJvckh5ZHJhdGluZ0NvbnRhaW5lcihwYXJlbnRDb250YWluZXIpIHtcbiAge1xuICAgIC8vIFRPRE86IFRoaXMgZ2V0cyBsb2dnZWQgYnkgb25SZWNvdmVyYWJsZUVycm9yLCB0b28sIHNvIHdlIHNob3VsZCBiZVxuICAgIC8vIGFibGUgdG8gcmVtb3ZlIGl0LlxuICAgIGVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgaHlkcmF0aW9uLiBUaGUgc2VydmVyIEhUTUwgd2FzIHJlcGxhY2VkIHdpdGggY2xpZW50IGNvbnRlbnQgaW4gPCVzPi4nLCBwYXJlbnRDb250YWluZXIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHByZXBhcmVQb3J0YWxNb3VudChwb3J0YWxJbnN0YW5jZSkge1xuICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhwb3J0YWxJbnN0YW5jZSk7XG59XG5cbnZhciByYW5kb21LZXkgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbnZhciBpbnRlcm5hbEluc3RhbmNlS2V5ID0gJ19fcmVhY3RGaWJlciQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsUHJvcHNLZXkgPSAnX19yZWFjdFByb3BzJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleSA9ICdfX3JlYWN0Q29udGFpbmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5ID0gJ19fcmVhY3RFdmVudHMkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbEV2ZW50SGFuZGxlckxpc3RlbmVyc0tleSA9ICdfX3JlYWN0TGlzdGVuZXJzJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxFdmVudEhhbmRsZXNTZXRLZXkgPSAnX19yZWFjdEhhbmRsZXMkJyArIHJhbmRvbUtleTtcbmZ1bmN0aW9uIGRldGFjaERlbGV0ZWRJbnN0YW5jZShub2RlKSB7XG4gIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb24gaG9zdCBjb21wb25lbnRzLiBJIGRvbid0IHRoaW5rIGFsbCBvZlxuICAvLyB0aGVzZSBmaWVsZHMgYXJlIHJlbGV2YW50LlxuICBkZWxldGUgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcbiAgZGVsZXRlIG5vZGVbaW50ZXJuYWxQcm9wc0tleV07XG4gIGRlbGV0ZSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG4gIGRlbGV0ZSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyTGlzdGVuZXJzS2V5XTtcbiAgZGVsZXRlIG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXNTZXRLZXldO1xufVxuZnVuY3Rpb24gcHJlY2FjaGVGaWJlck5vZGUoaG9zdEluc3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGhvc3RJbnN0O1xufVxuZnVuY3Rpb24gbWFya0NvbnRhaW5lckFzUm9vdChob3N0Um9vdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gaG9zdFJvb3Q7XG59XG5mdW5jdGlvbiB1bm1hcmtDb250YWluZXJBc1Jvb3Qobm9kZSkge1xuICBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzQ29udGFpbmVyTWFya2VkQXNSb290KG5vZGUpIHtcbiAgcmV0dXJuICEhbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcbn0gLy8gR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBjbG9zZXN0IEhvc3RDb21wb25lbnQgb3IgSG9zdFRleHQgZmliZXIgYW5jZXN0b3IuXG4vLyBJZiB0aGUgdGFyZ2V0IG5vZGUgaXMgcGFydCBvZiBhIGh5ZHJhdGVkIG9yIG5vdCB5ZXQgcmVuZGVyZWQgc3VidHJlZSwgdGhlblxuLy8gdGhpcyBtYXkgYWxzbyByZXR1cm4gYSBTdXNwZW5zZUNvbXBvbmVudCBvciBIb3N0Um9vdCB0byBpbmRpY2F0ZSB0aGF0LlxuLy8gQ29uY2VwdHVhbGx5IHRoZSBIb3N0Um9vdCBmaWJlciBpcyBhIGNoaWxkIG9mIHRoZSBDb250YWluZXIgbm9kZS4gU28gaWYgeW91XG4vLyBwYXNzIHRoZSBDb250YWluZXIgbm9kZSBhcyB0aGUgdGFyZ2V0Tm9kZSwgeW91IHdpbGwgbm90IGFjdHVhbGx5IGdldCB0aGVcbi8vIEhvc3RSb290IGJhY2suIFRvIGdldCB0byB0aGUgSG9zdFJvb3QsIHlvdSBuZWVkIHRvIHBhc3MgYSBjaGlsZCBvZiBpdC5cbi8vIFRoZSBzYW1lIHRoaW5nIGFwcGxpZXMgdG8gU3VzcGVuc2UgYm91bmRhcmllcy5cblxuZnVuY3Rpb24gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0Tm9kZSkge1xuICB2YXIgdGFyZ2V0SW5zdCA9IHRhcmdldE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAvLyBEb24ndCByZXR1cm4gSG9zdFJvb3Qgb3IgU3VzcGVuc2VDb21wb25lbnQgaGVyZS5cbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfSAvLyBJZiB0aGUgZGlyZWN0IGV2ZW50IHRhcmdldCBpc24ndCBhIFJlYWN0IG93bmVkIERPTSBub2RlLCB3ZSBuZWVkIHRvIGxvb2tcbiAgLy8gdG8gc2VlIGlmIG9uZSBvZiBpdHMgcGFyZW50cyBpcyBhIFJlYWN0IG93bmVkIERPTSBub2RlLlxuXG5cbiAgdmFyIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG5cbiAgd2hpbGUgKHBhcmVudE5vZGUpIHtcbiAgICAvLyBXZSdsbCBjaGVjayBpZiB0aGlzIGlzIGEgY29udGFpbmVyIHJvb3QgdGhhdCBjb3VsZCBpbmNsdWRlXG4gICAgLy8gUmVhY3Qgbm9kZXMgaW4gdGhlIGZ1dHVyZS4gV2UgbmVlZCB0byBjaGVjayB0aGlzIGZpcnN0IGJlY2F1c2VcbiAgICAvLyBpZiB3ZSdyZSBhIGNoaWxkIG9mIGEgZGVoeWRyYXRlZCBjb250YWluZXIsIHdlIG5lZWQgdG8gZmlyc3RcbiAgICAvLyBmaW5kIHRoYXQgaW5uZXIgY29udGFpbmVyIGJlZm9yZSBtb3Zpbmcgb24gdG8gZmluZGluZyB0aGUgcGFyZW50XG4gICAgLy8gaW5zdGFuY2UuIE5vdGUgdGhhdCB3ZSBkb24ndCBjaGVjayB0aGlzIGZpZWxkIG9uICB0aGUgdGFyZ2V0Tm9kZVxuICAgIC8vIGl0c2VsZiBiZWNhdXNlIHRoZSBmaWJlcnMgYXJlIGNvbmNlcHR1YWxseSBiZXR3ZWVuIHRoZSBjb250YWluZXJcbiAgICAvLyBub2RlIGFuZCB0aGUgZmlyc3QgY2hpbGQuIEl0IGlzbid0IHN1cnJvdW5kaW5nIHRoZSBjb250YWluZXIgbm9kZS5cbiAgICAvLyBJZiBpdCdzIG5vdCBhIGNvbnRhaW5lciwgd2UgY2hlY2sgaWYgaXQncyBhbiBpbnN0YW5jZS5cbiAgICB0YXJnZXRJbnN0ID0gcGFyZW50Tm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSB8fCBwYXJlbnROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgaWYgKHRhcmdldEluc3QpIHtcbiAgICAgIC8vIFNpbmNlIHRoaXMgd2Fzbid0IHRoZSBkaXJlY3QgdGFyZ2V0IG9mIHRoZSBldmVudCwgd2UgbWlnaHQgaGF2ZVxuICAgICAgLy8gc3RlcHBlZCBwYXN0IGRlaHlkcmF0ZWQgRE9NIG5vZGVzIHRvIGdldCBoZXJlLiBIb3dldmVyIHRoZXkgY291bGRcbiAgICAgIC8vIGFsc28gaGF2ZSBiZWVuIG5vbi1SZWFjdCBub2Rlcy4gV2UgbmVlZCB0byBhbnN3ZXIgd2hpY2ggb25lLlxuICAgICAgLy8gSWYgd2UgdGhlIGluc3RhbmNlIGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4sIHRoZW4gdGhlcmUgY2FuJ3QgYmVcbiAgICAgIC8vIGEgbmVzdGVkIHN1c3BlbnNlIGJvdW5kYXJ5IHdpdGhpbiBpdC4gU28gd2UgY2FuIHVzZSB0aGlzIGFzIGEgZmFzdFxuICAgICAgLy8gYmFpbG91dC4gTW9zdCBvZiB0aGUgdGltZSwgd2hlbiBwZW9wbGUgYWRkIG5vbi1SZWFjdCBjaGlsZHJlbiB0b1xuICAgICAgLy8gdGhlIHRyZWUsIGl0IGlzIHVzaW5nIGEgcmVmIHRvIGEgY2hpbGQtbGVzcyBET00gbm9kZS5cbiAgICAgIC8vIE5vcm1hbGx5IHdlJ2Qgb25seSBuZWVkIHRvIGNoZWNrIG9uZSBvZiB0aGUgZmliZXJzIGJlY2F1c2UgaWYgaXRcbiAgICAgIC8vIGhhcyBldmVyIGdvbmUgZnJvbSBoYXZpbmcgY2hpbGRyZW4gdG8gZGVsZXRpbmcgdGhlbSBvciB2aWNlIHZlcnNhXG4gICAgICAvLyBpdCB3b3VsZCBoYXZlIGRlbGV0ZWQgdGhlIGRlaHlkcmF0ZWQgYm91bmRhcnkgbmVzdGVkIGluc2lkZSBhbHJlYWR5LlxuICAgICAgLy8gSG93ZXZlciwgc2luY2UgdGhlIEhvc3RSb290IHN0YXJ0cyBvdXQgd2l0aCBhbiBhbHRlcm5hdGUgaXQgbWlnaHRcbiAgICAgIC8vIGhhdmUgb25lIG9uIHRoZSBhbHRlcm5hdGUgc28gd2UgbmVlZCB0byBjaGVjayBpbiBjYXNlIHRoaXMgd2FzIGFcbiAgICAgIC8vIHJvb3QuXG4gICAgICB2YXIgYWx0ZXJuYXRlID0gdGFyZ2V0SW5zdC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmICh0YXJnZXRJbnN0LmNoaWxkICE9PSBudWxsIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIG5vZGUgdGhhdCBza2lwcGVkIHBhc3QgaXNcbiAgICAgICAgLy8gbmVzdGVkIHdpdGhpbiBhIGRlaHlkcmF0ZWQgYm91bmRhcnkgYW5kIGlmIHNvLCB3aGljaCBvbmUuXG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXROb2RlKTtcblxuICAgICAgICB3aGlsZSAoc3VzcGVuc2VJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGZvdW5kIGEgc3VzcGVuc2UgaW5zdGFuY2UuIFRoYXQgbWVhbnMgdGhhdCB3ZSBoYXZlbid0XG4gICAgICAgICAgLy8gaHlkcmF0ZWQgaXQgeWV0LiBFdmVuIHRob3VnaCB3ZSBsZWF2ZSB0aGUgY29tbWVudHMgaW4gdGhlXG4gICAgICAgICAgLy8gRE9NIGFmdGVyIGh5ZHJhdGluZywgYW5kIHRoZXJlIGFyZSBib3VuZGFyaWVzIGluIHRoZSBET01cbiAgICAgICAgICAvLyB0aGF0IGNvdWxkIGFscmVhZHkgYmUgaHlkcmF0ZWQsIHdlIHdvdWxkbid0IGhhdmUgZm91bmQgdGhlbVxuICAgICAgICAgIC8vIHRocm91Z2ggdGhpcyBwYXNzIHNpbmNlIGlmIHRoZSB0YXJnZXQgaXMgaHlkcmF0ZWQgaXQgd291bGRcbiAgICAgICAgICAvLyBoYXZlIGhhZCBhbiBpbnRlcm5hbEluc3RhbmNlS2V5IG9uIGl0LlxuICAgICAgICAgIC8vIExldCdzIGdldCB0aGUgZmliZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBTdXNwZW5zZUNvbXBvbmVudFxuICAgICAgICAgIC8vIGFzIHRoZSBkZWVwZXN0IGluc3RhbmNlLlxuICAgICAgICAgIHZhciB0YXJnZXRTdXNwZW5zZUluc3QgPSBzdXNwZW5zZUluc3RhbmNlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gICAgICAgICAgaWYgKHRhcmdldFN1c3BlbnNlSW5zdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldFN1c3BlbnNlSW5zdDtcbiAgICAgICAgICB9IC8vIElmIHdlIGRvbid0IGZpbmQgYSBGaWJlciBvbiB0aGUgY29tbWVudCwgaXQgbWlnaHQgYmUgYmVjYXVzZVxuICAgICAgICAgIC8vIHdlIGhhdmVuJ3QgZ290dGVuIHRvIGh5ZHJhdGUgaXQgeWV0LiBUaGVyZSBtaWdodCBzdGlsbCBiZSBhXG4gICAgICAgICAgLy8gcGFyZW50IGJvdW5kYXJ5IHRoYXQgaGFzbid0IGFib3ZlIHRoaXMgb25lIHNvIHdlIG5lZWQgdG8gZmluZFxuICAgICAgICAgIC8vIHRoZSBvdXRlciBtb3N0IHRoYXQgaXMga25vd24uXG5cblxuICAgICAgICAgIHN1c3BlbnNlSW5zdGFuY2UgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpOyAvLyBJZiB3ZSBkb24ndCBmaW5kIG9uZSwgdGhlbiB0aGF0IHNob3VsZCBtZWFuIHRoYXQgdGhlIHBhcmVudFxuICAgICAgICAgIC8vIGhvc3QgY29tcG9uZW50IGFsc28gaGFzbid0IGh5ZHJhdGVkIHlldC4gV2UgY2FuIHJldHVybiBpdFxuICAgICAgICAgIC8vIGJlbG93IHNpbmNlIGl0IHdpbGwgYmFpbCBvdXQgb24gdGhlIGlzTW91bnRlZCBjaGVjayBsYXRlci5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICB9XG5cbiAgICB0YXJnZXROb2RlID0gcGFyZW50Tm9kZTtcbiAgICBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBpbnN0YW5jZSwgb3IgbnVsbCBpZiB0aGUgbm9kZSB3YXMgbm90IHJlbmRlcmVkIGJ5IHRoaXMgUmVhY3QuXG4gKi9cblxuZnVuY3Rpb24gZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKSB7XG4gIHZhciBpbnN0ID0gbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fCBub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCB8fCBpbnN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICByZXR1cm4gaW5zdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdpdmVuIGEgUmVhY3RET01Db21wb25lbnQgb3IgUmVhY3RET01UZXh0Q29tcG9uZW50LCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmdcbiAqIERPTSBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkge1xuICBpZiAoaW5zdC50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgLy8gSW4gRmliZXIgdGhpcywgaXMganVzdCB0aGUgc3RhdGUgbm9kZSByaWdodCBub3cuIFdlIGFzc3VtZSBpdCB3aWxsIGJlXG4gICAgLy8gYSBob3N0IGNvbXBvbmVudCBvciBob3N0IHRleHQuXG4gICAgcmV0dXJuIGluc3Quc3RhdGVOb2RlO1xuICB9IC8vIFdpdGhvdXQgdGhpcyBmaXJzdCBpbnZhcmlhbnQsIHBhc3NpbmcgYSBub24tRE9NLWNvbXBvbmVudCB0cmlnZ2VycyB0aGUgbmV4dFxuICAvLyBpbnZhcmlhbnQgZm9yIGEgbWlzc2luZyBwYXJlbnQsIHdoaWNoIGlzIHN1cGVyIGNvbmZ1c2luZy5cblxuXG4gIHRocm93IG5ldyBFcnJvcignZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC4nKTtcbn1cbmZ1bmN0aW9uIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZVtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xufVxuZnVuY3Rpb24gdXBkYXRlRmliZXJQcm9wcyhub2RlLCBwcm9wcykge1xuICBub2RlW2ludGVybmFsUHJvcHNLZXldID0gcHJvcHM7XG59XG5mdW5jdGlvbiBnZXRFdmVudExpc3RlbmVyU2V0KG5vZGUpIHtcbiAgdmFyIGVsZW1lbnRMaXN0ZW5lclNldCA9IG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XTtcblxuICBpZiAoZWxlbWVudExpc3RlbmVyU2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV0gPSBuZXcgU2V0KCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudExpc3RlbmVyU2V0O1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKGhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWx1ZVN0YWNrID0gW107XG52YXIgZmliZXJTdGFjaztcblxue1xuICBmaWJlclN0YWNrID0gW107XG59XG5cbnZhciBpbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudDogZGVmYXVsdFZhbHVlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBvcChjdXJzb3IsIGZpYmVyKSB7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICB7XG4gICAgICBlcnJvcignVW5leHBlY3RlZCBwb3AuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIGlmIChmaWJlciAhPT0gZmliZXJTdGFja1tpbmRleF0pIHtcbiAgICAgIGVycm9yKCdVbmV4cGVjdGVkIEZpYmVyIHBvcHBlZC4nKTtcbiAgICB9XG4gIH1cblxuICBjdXJzb3IuY3VycmVudCA9IHZhbHVlU3RhY2tbaW5kZXhdO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IG51bGw7XG5cbiAge1xuICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gbnVsbDtcbiAgfVxuXG4gIGluZGV4LS07XG59XG5cbmZ1bmN0aW9uIHB1c2goY3Vyc29yLCB2YWx1ZSwgZmliZXIpIHtcbiAgaW5kZXgrKztcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBmaWJlcjtcbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWU7XG59XG5cbnZhciB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQ7XG5cbntcbiAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0ID0ge307XG59XG5cbnZhciBlbXB0eUNvbnRleHRPYmplY3QgPSB7fTtcblxue1xuICBPYmplY3QuZnJlZXplKGVtcHR5Q29udGV4dE9iamVjdCk7XG59IC8vIEEgY3Vyc29yIHRvIHRoZSBjdXJyZW50IG1lcmdlZCBjb250ZXh0IG9iamVjdCBvbiB0aGUgc3RhY2suXG5cblxudmFyIGNvbnRleHRTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihlbXB0eUNvbnRleHRPYmplY3QpOyAvLyBBIGN1cnNvciB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuXG52YXIgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihmYWxzZSk7IC8vIEtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIGNvbnRleHQgb2JqZWN0IHRoYXQgd2FzIG9uIHRoZSBzdGFjay5cbi8vIFdlIHVzZSB0aGlzIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHBhcmVudCBjb250ZXh0IGFmdGVyIHdlIGhhdmUgYWxyZWFkeVxuLy8gcHVzaGVkIHRoZSBuZXh0IGNvbnRleHQgcHJvdmlkZXIsIGFuZCBub3cgbmVlZCB0byBtZXJnZSB0aGVpciBjb250ZXh0cy5cblxudmFyIHByZXZpb3VzQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuZnVuY3Rpb24gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlcikge1xuICB7XG4gICAgaWYgKGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlciAmJiBpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAvLyBJZiB0aGUgZmliZXIgaXMgYSBjb250ZXh0IHByb3ZpZGVyIGl0c2VsZiwgd2hlbiB3ZSByZWFkIGl0cyBjb250ZXh0XG4gICAgICAvLyB3ZSBtYXkgaGF2ZSBhbHJlYWR5IHB1c2hlZCBpdHMgb3duIGNoaWxkIGNvbnRleHQgb24gdGhlIHN0YWNrLiBBIGNvbnRleHRcbiAgICAgIC8vIHByb3ZpZGVyIHNob3VsZCBub3QgXCJzZWVcIiBpdHMgb3duIGNoaWxkIGNvbnRleHQuIFRoZXJlZm9yZSB3ZSByZWFkIHRoZVxuICAgICAgLy8gcHJldmlvdXMgKHBhcmVudCkgY29udGV4dCBpbnN0ZWFkIGZvciBhIGNvbnRleHQgcHJvdmlkZXIuXG4gICAgICByZXR1cm4gcHJldmlvdXNDb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgbWFza2VkQ29udGV4dCkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPSB1bm1hc2tlZENvbnRleHQ7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQgPSBtYXNrZWRDb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgIHZhciBjb250ZXh0VHlwZXMgPSB0eXBlLmNvbnRleHRUeXBlcztcblxuICAgIGlmICghY29udGV4dFR5cGVzKSB7XG4gICAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgIH0gLy8gQXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgdW5tYXNrZWQgY29udGV4dCBoYXMgY2hhbmdlZC5cbiAgICAvLyBGYWlsaW5nIHRvIGRvIHRoaXMgd2lsbCByZXN1bHQgaW4gdW5uZWNlc3NhcnkgY2FsbHMgdG8gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5cbiAgICAvLyBUaGlzIG1heSB0cmlnZ2VyIGluZmluaXRlIGxvb3BzIGlmIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgY2FsbHMgc2V0U3RhdGUuXG5cblxuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID09PSB1bm1hc2tlZENvbnRleHQpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGNvbnRleHRUeXBlcykge1xuICAgICAgY29udGV4dFtrZXldID0gdW5tYXNrZWRDb250ZXh0W2tleV07XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCAnVW5rbm93bic7XG4gICAgICBjaGVja1Byb3BUeXBlcyhjb250ZXh0VHlwZXMsIGNvbnRleHQsICdjb250ZXh0JywgbmFtZSk7XG4gICAgfSAvLyBDYWNoZSB1bm1hc2tlZCBjb250ZXh0IHNvIHdlIGNhbiBhdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuXG4gICAgLy8gQ29udGV4dCBpcyBjcmVhdGVkIGJlZm9yZSB0aGUgY2xhc3MgY29tcG9uZW50IGlzIGluc3RhbnRpYXRlZCBzbyBjaGVjayBmb3IgaW5zdGFuY2UuXG5cblxuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NvbnRleHRDaGFuZ2VkKCkge1xuICB7XG4gICAgcmV0dXJuIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcih0eXBlKSB7XG4gIHtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuICAgIHJldHVybiBjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChmaWJlcikge1xuICB7XG4gICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVzaFRvcExldmVsQ29udGV4dE9iamVjdChmaWJlciwgY29udGV4dCwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICBpZiAoY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQgIT09IGVtcHR5Q29udGV4dE9iamVjdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGNvbnRleHQgZm91bmQgb24gc3RhY2suICcgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG5cbiAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgY29udGV4dCwgZmliZXIpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0NoaWxkQ29udGV4dChmaWJlciwgdHlwZSwgcGFyZW50Q29udGV4dCkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7IC8vIFRPRE8gKGJ2YXVnaG4pIFJlcGxhY2UgdGhpcyBiZWhhdmlvciB3aXRoIGFuIGludmFyaWFudCgpIGluIHRoZSBmdXR1cmUuXG4gICAgLy8gSXQgaGFzIG9ubHkgYmVlbiBhZGRlZCBpbiBGaWJlciB0byBtYXRjaCB0aGUgKHVuaW50ZW50aW9uYWwpIGJlaGF2aW9yIGluIFN0YWNrLlxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgaWYgKCF3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHRbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJyVzLmNoaWxkQ29udGV4dFR5cGVzIGlzIHNwZWNpZmllZCBidXQgdGhlcmUgaXMgbm8gZ2V0Q2hpbGRDb250ZXh0KCkgbWV0aG9kICcgKyAnb24gdGhlIGluc3RhbmNlLiBZb3UgY2FuIGVpdGhlciBkZWZpbmUgZ2V0Q2hpbGRDb250ZXh0KCkgb24gJXMgb3IgcmVtb3ZlICcgKyAnY2hpbGRDb250ZXh0VHlwZXMgZnJvbSBpdC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyZW50Q29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRDb250ZXh0ID0gaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0KCk7XG5cbiAgICBmb3IgKHZhciBjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dCkge1xuICAgICAgaWYgKCEoY29udGV4dEtleSBpbiBjaGlsZENvbnRleHRUeXBlcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKChnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bicpICsgXCIuZ2V0Q2hpbGRDb250ZXh0KCk6IGtleSBcXFwiXCIgKyBjb250ZXh0S2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIGluIGNoaWxkQ29udGV4dFR5cGVzLlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8ICdVbmtub3duJztcbiAgICAgIGNoZWNrUHJvcFR5cGVzKGNoaWxkQ29udGV4dFR5cGVzLCBjaGlsZENvbnRleHQsICdjaGlsZCBjb250ZXh0JywgbmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzc2lnbih7fSwgcGFyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFdlIHB1c2ggdGhlIGNvbnRleHQgYXMgZWFybHkgYXMgcG9zc2libGUgdG8gZW5zdXJlIHN0YWNrIGludGVncml0eS5cbiAgICAvLyBJZiB0aGUgaW5zdGFuY2UgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSB3aWxsIHB1c2ggbnVsbCBhdCBmaXJzdCxcbiAgICAvLyBhbmQgcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgbGF0ZXIgd2hlbiBpbnZhbGlkYXRpbmcgdGhlIGNvbnRleHQuXG5cbiAgICB2YXIgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCB8fCBlbXB0eUNvbnRleHRPYmplY3Q7IC8vIFJlbWVtYmVyIHRoZSBwYXJlbnQgY29udGV4dCBzbyB3ZSBjYW4gbWVyZ2Ugd2l0aCBpdCBsYXRlci5cbiAgICAvLyBJbmhlcml0IHRoZSBwYXJlbnQncyBkaWQtcGVyZm9ybS13b3JrIHZhbHVlIHRvIGF2b2lkIGluYWR2ZXJ0ZW50bHkgYmxvY2tpbmcgdXBkYXRlcy5cblxuICAgIHByZXZpb3VzQ29udGV4dCA9IGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50O1xuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgdHlwZSwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGhhdmUgYW4gaW5zdGFuY2UgYnkgdGhpcyBwb2ludC4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cblxuICAgIGlmIChkaWRDaGFuZ2UpIHtcbiAgICAgIC8vIE1lcmdlIHBhcmVudCBhbmQgb3duIGNvbnRleHQuXG4gICAgICAvLyBTa2lwIHRoaXMgaWYgd2UncmUgbm90IHVwZGF0aW5nIGR1ZSB0byBzQ1UuXG4gICAgICAvLyBUaGlzIGF2b2lkcyB1bm5lY2Vzc2FyaWx5IHJlY29tcHV0aW5nIG1lbW9pemVkIHZhbHVlcy5cbiAgICAgIHZhciBtZXJnZWRDb250ZXh0ID0gcHJvY2Vzc0NoaWxkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdHlwZSwgcHJldmlvdXNDb250ZXh0KTtcbiAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gbWVyZ2VkQ29udGV4dDsgLy8gUmVwbGFjZSB0aGUgb2xkIChvciBlbXB0eSkgY29udGV4dCB3aXRoIHRoZSBuZXcgb25lLlxuICAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRvIHVud2luZCB0aGUgY29udGV4dCBpbiB0aGUgcmV2ZXJzZSBvcmRlci5cblxuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTsgLy8gTm93IHB1c2ggdGhlIG5ldyBjb250ZXh0IGFuZCBtYXJrIHRoYXQgaXQgaGFzIGNoYW5nZWQuXG5cbiAgICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBtZXJnZWRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRVbm1hc2tlZENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIC8vIEN1cnJlbnRseSB0aGlzIGlzIG9ubHkgdXNlZCB3aXRoIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOyBub3Qgc3VyZSBpZiBpdFxuICAgIC8vIG1ha2VzIHNlbnNlIGVsc2V3aGVyZVxuICAgIGlmICghaXNGaWJlck1vdW50ZWQoZmliZXIpIHx8IGZpYmVyLnRhZyAhPT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgc3VidHJlZSBwYXJlbnQgdG8gYmUgYSBtb3VudGVkIGNsYXNzIGNvbXBvbmVudC4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICBkbyB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLmNvbnRleHQ7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gbm9kZS50eXBlO1xuXG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5vZGUgIT09IG51bGwpO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1bmV4cGVjdGVkIGRldGFjaGVkIHN1YnRyZWUgcGFyZW50LiAnICsgJ1RoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gIH1cbn1cblxudmFyIExlZ2FjeVJvb3QgPSAwO1xudmFyIENvbmN1cnJlbnRSb290ID0gMTtcblxudmFyIHN5bmNRdWV1ZSA9IG51bGw7XG52YXIgaW5jbHVkZXNMZWdhY3lTeW5jQ2FsbGJhY2tzID0gZmFsc2U7XG52YXIgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IGZhbHNlO1xuZnVuY3Rpb24gc2NoZWR1bGVTeW5jQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgLy8gUHVzaCB0aGlzIGNhbGxiYWNrIGludG8gYW4gaW50ZXJuYWwgcXVldWUuIFdlJ2xsIGZsdXNoIHRoZXNlIGVpdGhlciBpblxuICAvLyB0aGUgbmV4dCB0aWNrLCBvciBlYXJsaWVyIGlmIHNvbWV0aGluZyBjYWxscyBgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZWAuXG4gIGlmIChzeW5jUXVldWUgPT09IG51bGwpIHtcbiAgICBzeW5jUXVldWUgPSBbY2FsbGJhY2tdO1xuICB9IGVsc2Uge1xuICAgIC8vIFB1c2ggb250byBleGlzdGluZyBxdWV1ZS4gRG9uJ3QgbmVlZCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIGJlY2F1c2VcbiAgICAvLyB3ZSBhbHJlYWR5IHNjaGVkdWxlZCBvbmUgd2hlbiB3ZSBjcmVhdGVkIHRoZSBxdWV1ZS5cbiAgICBzeW5jUXVldWUucHVzaChjYWxsYmFjayk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNjaGVkdWxlTGVnYWN5U3luY0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIGluY2x1ZGVzTGVnYWN5U3luY0NhbGxiYWNrcyA9IHRydWU7XG4gIHNjaGVkdWxlU3luY0NhbGxiYWNrKGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIGZsdXNoU3luY0NhbGxiYWNrc09ubHlJbkxlZ2FjeU1vZGUoKSB7XG4gIC8vIE9ubHkgZmx1c2hlcyB0aGUgcXVldWUgaWYgdGhlcmUncyBhIGxlZ2FjeSBzeW5jIGNhbGxiYWNrIHNjaGVkdWxlZC5cbiAgLy8gVE9ETzogVGhlcmUncyBvbmx5IGEgc2luZ2xlIHR5cGUgb2YgY2FsbGJhY2s6IHBlcmZvcm1TeW5jT25Xb3JrT25Sb290LiBTb1xuICAvLyBpdCBtaWdodCBtYWtlIG1vcmUgc2Vuc2UgZm9yIHRoZSBxdWV1ZSB0byBiZSBhIGxpc3Qgb2Ygcm9vdHMgaW5zdGVhZCBvZiBhXG4gIC8vIGxpc3Qgb2YgZ2VuZXJpYyBjYWxsYmFja3MuIFRoZW4gd2UgY2FuIGhhdmUgdHdvOiBvbmUgZm9yIGxlZ2FjeSByb290cywgb25lXG4gIC8vIGZvciBjb25jdXJyZW50IHJvb3RzLiBBbmQgdGhpcyBtZXRob2Qgd291bGQgb25seSBmbHVzaCB0aGUgbGVnYWN5IG9uZXMuXG4gIGlmIChpbmNsdWRlc0xlZ2FjeVN5bmNDYWxsYmFja3MpIHtcbiAgICBmbHVzaFN5bmNDYWxsYmFja3MoKTtcbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jQ2FsbGJhY2tzKCkge1xuICBpZiAoIWlzRmx1c2hpbmdTeW5jUXVldWUgJiYgc3luY1F1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gUHJldmVudCByZS1lbnRyYW5jZS5cbiAgICBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gdHJ1ZTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHByZXZpb3VzVXBkYXRlUHJpb3JpdHkgPSBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoKTtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgaXNTeW5jID0gdHJ1ZTtcbiAgICAgIHZhciBxdWV1ZSA9IHN5bmNRdWV1ZTsgLy8gVE9ETzogSXMgdGhpcyBuZWNlc3NhcnkgYW55bW9yZT8gVGhlIG9ubHkgdXNlciBjb2RlIHRoYXQgcnVucyBpbiB0aGlzXG4gICAgICAvLyBxdWV1ZSBpcyBpbiB0aGUgcmVuZGVyIG9yIGNvbW1pdCBwaGFzZXMuXG5cbiAgICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHkpO1xuXG4gICAgICBmb3IgKDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHF1ZXVlW2ldO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrKGlzU3luYyk7XG4gICAgICAgIH0gd2hpbGUgKGNhbGxiYWNrICE9PSBudWxsKTtcbiAgICAgIH1cblxuICAgICAgc3luY1F1ZXVlID0gbnVsbDtcbiAgICAgIGluY2x1ZGVzTGVnYWN5U3luY0NhbGxiYWNrcyA9IGZhbHNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZiBzb21ldGhpbmcgdGhyb3dzLCBsZWF2ZSB0aGUgcmVtYWluaW5nIGNhbGxiYWNrcyBvbiB0aGUgcXVldWUuXG4gICAgICBpZiAoc3luY1F1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgIHN5bmNRdWV1ZSA9IHN5bmNRdWV1ZS5zbGljZShpICsgMSk7XG4gICAgICB9IC8vIFJlc3VtZSBmbHVzaGluZyBpbiB0aGUgbmV4dCB0aWNrXG5cblxuICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSwgZmx1c2hTeW5jQ2FsbGJhY2tzKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNVcGRhdGVQcmlvcml0eSk7XG4gICAgICBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIFRPRE86IFVzZSB0aGUgdW5pZmllZCBmaWJlciBzdGFjayBtb2R1bGUgaW5zdGVhZCBvZiB0aGlzIGxvY2FsIG9uZT9cbi8vIEludGVudGlvbmFsbHkgbm90IHVzaW5nIGl0IHlldCB0byBkZXJpc2sgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24sIGJlY2F1c2Vcbi8vIHRoZSB3YXkgd2UgcHVzaC9wb3AgdGhlc2UgdmFsdWVzIGlzIGEgYml0IHVudXN1YWwuIElmIHRoZXJlJ3MgYSBtaXN0YWtlLCBJJ2Rcbi8vIHJhdGhlciB0aGUgaWRzIGJlIHdyb25nIHRoYW4gY3Jhc2ggdGhlIHdob2xlIHJlY29uY2lsZXIuXG52YXIgZm9ya1N0YWNrID0gW107XG52YXIgZm9ya1N0YWNrSW5kZXggPSAwO1xudmFyIHRyZWVGb3JrUHJvdmlkZXIgPSBudWxsO1xudmFyIHRyZWVGb3JrQ291bnQgPSAwO1xudmFyIGlkU3RhY2sgPSBbXTtcbnZhciBpZFN0YWNrSW5kZXggPSAwO1xudmFyIHRyZWVDb250ZXh0UHJvdmlkZXIgPSBudWxsO1xudmFyIHRyZWVDb250ZXh0SWQgPSAxO1xudmFyIHRyZWVDb250ZXh0T3ZlcmZsb3cgPSAnJztcbmZ1bmN0aW9uIGlzRm9ya2VkQ2hpbGQod29ya0luUHJvZ3Jlc3MpIHtcbiAgd2FybklmTm90SHlkcmF0aW5nKCk7XG4gIHJldHVybiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBGb3JrZWQpICE9PSBOb0ZsYWdzO1xufVxuZnVuY3Rpb24gZ2V0Rm9ya3NBdExldmVsKHdvcmtJblByb2dyZXNzKSB7XG4gIHdhcm5JZk5vdEh5ZHJhdGluZygpO1xuICByZXR1cm4gdHJlZUZvcmtDb3VudDtcbn1cbmZ1bmN0aW9uIGdldFRyZWVJZCgpIHtcbiAgdmFyIG92ZXJmbG93ID0gdHJlZUNvbnRleHRPdmVyZmxvdztcbiAgdmFyIGlkV2l0aExlYWRpbmdCaXQgPSB0cmVlQ29udGV4dElkO1xuICB2YXIgaWQgPSBpZFdpdGhMZWFkaW5nQml0ICYgfmdldExlYWRpbmdCaXQoaWRXaXRoTGVhZGluZ0JpdCk7XG4gIHJldHVybiBpZC50b1N0cmluZygzMikgKyBvdmVyZmxvdztcbn1cbmZ1bmN0aW9uIHB1c2hUcmVlRm9yayh3b3JrSW5Qcm9ncmVzcywgdG90YWxDaGlsZHJlbikge1xuICAvLyBUaGlzIGlzIGNhbGxlZCByaWdodCBhZnRlciB3ZSByZWNvbmNpbGUgYW4gYXJyYXkgKG9yIGl0ZXJhdG9yKSBvZiBjaGlsZFxuICAvLyBmaWJlcnMsIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIHdlIGtub3cgaG93IG1hbnkgY2hpbGRyZW4gaW5cbiAgLy8gdGhlIHdob2xlIHNldCB3aXRob3V0IGRvaW5nIGV4dHJhIHdvcmsgbGF0ZXIsIG9yIHN0b3JpbmcgYWRkdGlvbmFsXG4gIC8vIGluZm9ybWF0aW9uIG9uIHRoZSBmaWJlci5cbiAgLy9cbiAgLy8gVGhhdCdzIHdoeSB0aGlzIGZ1bmN0aW9uIGlzIHNlcGFyYXRlIGZyb20gcHVzaFRyZWVJZCDigJQgaXQncyBjYWxsZWQgZHVyaW5nXG4gIC8vIHRoZSByZW5kZXIgcGhhc2Ugb2YgdGhlIGZvcmsgcGFyZW50LCBub3QgdGhlIGNoaWxkLCB3aGljaCBpcyB3aGVyZSB3ZSBwdXNoXG4gIC8vIHRoZSBvdGhlciBjb250ZXh0IHZhbHVlcy5cbiAgLy9cbiAgLy8gSW4gdGhlIEZpenogaW1wbGVtZW50YXRpb24gdGhpcyBpcyBtdWNoIHNpbXBsZXIgYmVjYXVzZSB0aGUgY2hpbGQgaXNcbiAgLy8gcmVuZGVyZWQgaW4gdGhlIHNhbWUgY2FsbHN0YWNrIGFzIHRoZSBwYXJlbnQuXG4gIC8vXG4gIC8vIEl0IG1pZ2h0IGJlIGJldHRlciB0byBqdXN0IGFkZCBhIGBmb3Jrc2AgZmllbGQgdG8gdGhlIEZpYmVyIHR5cGUuIEl0IHdvdWxkXG4gIC8vIG1ha2UgdGhpcyBtb2R1bGUgc2ltcGxlci5cbiAgd2FybklmTm90SHlkcmF0aW5nKCk7XG4gIGZvcmtTdGFja1tmb3JrU3RhY2tJbmRleCsrXSA9IHRyZWVGb3JrQ291bnQ7XG4gIGZvcmtTdGFja1tmb3JrU3RhY2tJbmRleCsrXSA9IHRyZWVGb3JrUHJvdmlkZXI7XG4gIHRyZWVGb3JrUHJvdmlkZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgdHJlZUZvcmtDb3VudCA9IHRvdGFsQ2hpbGRyZW47XG59XG5mdW5jdGlvbiBwdXNoVHJlZUlkKHdvcmtJblByb2dyZXNzLCB0b3RhbENoaWxkcmVuLCBpbmRleCkge1xuICB3YXJuSWZOb3RIeWRyYXRpbmcoKTtcbiAgaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dElkO1xuICBpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0T3ZlcmZsb3c7XG4gIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRQcm92aWRlcjtcbiAgdHJlZUNvbnRleHRQcm92aWRlciA9IHdvcmtJblByb2dyZXNzO1xuICB2YXIgYmFzZUlkV2l0aExlYWRpbmdCaXQgPSB0cmVlQ29udGV4dElkO1xuICB2YXIgYmFzZU92ZXJmbG93ID0gdHJlZUNvbnRleHRPdmVyZmxvdzsgLy8gVGhlIGxlZnRtb3N0IDEgbWFya3MgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UsIG5vbi1pbmNsdXNpdmUuIEl0J3Mgbm90IHBhcnRcbiAgLy8gb2YgdGhlIGlkOyB3ZSB1c2UgaXQgdG8gYWNjb3VudCBmb3IgbGVhZGluZyAwcy5cblxuICB2YXIgYmFzZUxlbmd0aCA9IGdldEJpdExlbmd0aChiYXNlSWRXaXRoTGVhZGluZ0JpdCkgLSAxO1xuICB2YXIgYmFzZUlkID0gYmFzZUlkV2l0aExlYWRpbmdCaXQgJiB+KDEgPDwgYmFzZUxlbmd0aCk7XG4gIHZhciBzbG90ID0gaW5kZXggKyAxO1xuICB2YXIgbGVuZ3RoID0gZ2V0Qml0TGVuZ3RoKHRvdGFsQ2hpbGRyZW4pICsgYmFzZUxlbmd0aDsgLy8gMzAgaXMgdGhlIG1heCBsZW5ndGggd2UgY2FuIHN0b3JlIHdpdGhvdXQgb3ZlcmZsb3dpbmcsIHRha2luZyBpbnRvXG4gIC8vIGNvbnNpZGVyYXRpb24gdGhlIGxlYWRpbmcgMSB3ZSB1c2UgdG8gbWFyayB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZS5cblxuICBpZiAobGVuZ3RoID4gMzApIHtcbiAgICAvLyBXZSBvdmVyZmxvd2VkIHRoZSBiaXR3aXNlLXNhZmUgcmFuZ2UuIEZhbGwgYmFjayB0byBzbG93ZXIgYWxnb3JpdGhtLlxuICAgIC8vIFRoaXMgYnJhbmNoIGFzc3VtZXMgdGhlIGxlbmd0aCBvZiB0aGUgYmFzZSBpZCBpcyBncmVhdGVyIHRoYW4gNTsgaXQgd29uJ3RcbiAgICAvLyB3b3JrIGZvciBzbWFsbGVyIGlkcywgYmVjYXVzZSB5b3UgbmVlZCA1IGJpdHMgcGVyIGNoYXJhY3Rlci5cbiAgICAvL1xuICAgIC8vIFdlIGVuY29kZSB0aGUgaWQgaW4gbXVsdGlwbGUgc3RlcHM6IGZpcnN0IHRoZSBiYXNlIGlkLCB0aGVuIHRoZVxuICAgIC8vIHJlbWFpbmluZyBkaWdpdHMuXG4gICAgLy9cbiAgICAvLyBFYWNoIDUgYml0IHNlcXVlbmNlIGNvcnJlc3BvbmRzIHRvIGEgc2luZ2xlIGJhc2UgMzIgY2hhcmFjdGVyLiBTbyBmb3JcbiAgICAvLyBleGFtcGxlLCBpZiB0aGUgY3VycmVudCBpZCBpcyAyMyBiaXRzIGxvbmcsIHdlIGNhbiBjb252ZXJ0IDIwIG9mIHRob3NlXG4gICAgLy8gYml0cyBpbnRvIGEgc3RyaW5nIG9mIDQgY2hhcmFjdGVycywgd2l0aCAzIGJpdHMgbGVmdCBvdmVyLlxuICAgIC8vXG4gICAgLy8gRmlyc3QgY2FsY3VsYXRlIGhvdyBtYW55IGJpdHMgaW4gdGhlIGJhc2UgaWQgcmVwcmVzZW50IGEgY29tcGxldGVcbiAgICAvLyBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzLlxuICAgIHZhciBudW1iZXJPZk92ZXJmbG93Qml0cyA9IGJhc2VMZW5ndGggLSBiYXNlTGVuZ3RoICUgNTsgLy8gVGhlbiBjcmVhdGUgYSBiaXRtYXNrIHRoYXQgc2VsZWN0cyBvbmx5IHRob3NlIGJpdHMuXG5cbiAgICB2YXIgbmV3T3ZlcmZsb3dCaXRzID0gKDEgPDwgbnVtYmVyT2ZPdmVyZmxvd0JpdHMpIC0gMTsgLy8gU2VsZWN0IHRoZSBiaXRzLCBhbmQgY29udmVydCB0aGVtIHRvIGEgYmFzZSAzMiBzdHJpbmcuXG5cbiAgICB2YXIgbmV3T3ZlcmZsb3cgPSAoYmFzZUlkICYgbmV3T3ZlcmZsb3dCaXRzKS50b1N0cmluZygzMik7IC8vIE5vdyB3ZSBjYW4gcmVtb3ZlIHRob3NlIGJpdHMgZnJvbSB0aGUgYmFzZSBpZC5cblxuICAgIHZhciByZXN0T2ZCYXNlSWQgPSBiYXNlSWQgPj4gbnVtYmVyT2ZPdmVyZmxvd0JpdHM7XG4gICAgdmFyIHJlc3RPZkJhc2VMZW5ndGggPSBiYXNlTGVuZ3RoIC0gbnVtYmVyT2ZPdmVyZmxvd0JpdHM7IC8vIEZpbmFsbHksIGVuY29kZSB0aGUgcmVzdCBvZiB0aGUgYml0cyB1c2luZyB0aGUgbm9ybWFsIGFsZ29yaXRobS4gQmVjYXVzZVxuICAgIC8vIHdlIG1hZGUgbW9yZSByb29tLCB0aGlzIHRpbWUgaXQgd29uJ3Qgb3ZlcmZsb3cuXG5cbiAgICB2YXIgcmVzdE9mTGVuZ3RoID0gZ2V0Qml0TGVuZ3RoKHRvdGFsQ2hpbGRyZW4pICsgcmVzdE9mQmFzZUxlbmd0aDtcbiAgICB2YXIgcmVzdE9mTmV3Qml0cyA9IHNsb3QgPDwgcmVzdE9mQmFzZUxlbmd0aDtcbiAgICB2YXIgaWQgPSByZXN0T2ZOZXdCaXRzIHwgcmVzdE9mQmFzZUlkO1xuICAgIHZhciBvdmVyZmxvdyA9IG5ld092ZXJmbG93ICsgYmFzZU92ZXJmbG93O1xuICAgIHRyZWVDb250ZXh0SWQgPSAxIDw8IHJlc3RPZkxlbmd0aCB8IGlkO1xuICAgIHRyZWVDb250ZXh0T3ZlcmZsb3cgPSBvdmVyZmxvdztcbiAgfSBlbHNlIHtcbiAgICAvLyBOb3JtYWwgcGF0aFxuICAgIHZhciBuZXdCaXRzID0gc2xvdCA8PCBiYXNlTGVuZ3RoO1xuXG4gICAgdmFyIF9pZCA9IG5ld0JpdHMgfCBiYXNlSWQ7XG5cbiAgICB2YXIgX292ZXJmbG93ID0gYmFzZU92ZXJmbG93O1xuICAgIHRyZWVDb250ZXh0SWQgPSAxIDw8IGxlbmd0aCB8IF9pZDtcbiAgICB0cmVlQ29udGV4dE92ZXJmbG93ID0gX292ZXJmbG93O1xuICB9XG59XG5mdW5jdGlvbiBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKSB7XG4gIHdhcm5JZk5vdEh5ZHJhdGluZygpOyAvLyBUaGlzIGNvbXBvbmVudCBtYXRlcmlhbGl6ZWQgYW4gaWQuIFRoaXMgd2lsbCBhZmZlY3QgYW55IGlkcyB0aGF0IGFwcGVhclxuICAvLyBpbiBpdHMgY2hpbGRyZW4uXG5cbiAgdmFyIHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCkge1xuICAgIHZhciBudW1iZXJPZkZvcmtzID0gMTtcbiAgICB2YXIgc2xvdEluZGV4ID0gMDtcbiAgICBwdXNoVHJlZUZvcmsod29ya0luUHJvZ3Jlc3MsIG51bWJlck9mRm9ya3MpO1xuICAgIHB1c2hUcmVlSWQod29ya0luUHJvZ3Jlc3MsIG51bWJlck9mRm9ya3MsIHNsb3RJbmRleCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Qml0TGVuZ3RoKG51bWJlcikge1xuICByZXR1cm4gMzIgLSBjbHozMihudW1iZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRMZWFkaW5nQml0KGlkKSB7XG4gIHJldHVybiAxIDw8IGdldEJpdExlbmd0aChpZCkgLSAxO1xufVxuXG5mdW5jdGlvbiBwb3BUcmVlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBSZXN0b3JlIHRoZSBwcmV2aW91cyB2YWx1ZXMuXG4gIC8vIFRoaXMgaXMgYSBiaXQgbW9yZSBjb21wbGljYXRlZCB0aGFuIG90aGVyIGNvbnRleHQtbGlrZSBtb2R1bGVzIGluIEZpYmVyXG4gIC8vIGJlY2F1c2UgdGhlIHNhbWUgRmliZXIgbWF5IGFwcGVhciBvbiB0aGUgc3RhY2sgbXVsdGlwbGUgdGltZXMgYW5kIGZvclxuICAvLyBkaWZmZXJlbnQgcmVhc29ucy4gV2UgaGF2ZSB0byBrZWVwIHBvcHBpbmcgdW50aWwgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgaXNcbiAgLy8gbm8gbG9uZ2VyIGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLlxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgPT09IHRyZWVGb3JrUHJvdmlkZXIpIHtcbiAgICB0cmVlRm9ya1Byb3ZpZGVyID0gZm9ya1N0YWNrWy0tZm9ya1N0YWNrSW5kZXhdO1xuICAgIGZvcmtTdGFja1tmb3JrU3RhY2tJbmRleF0gPSBudWxsO1xuICAgIHRyZWVGb3JrQ291bnQgPSBmb3JrU3RhY2tbLS1mb3JrU3RhY2tJbmRleF07XG4gICAgZm9ya1N0YWNrW2ZvcmtTdGFja0luZGV4XSA9IG51bGw7XG4gIH1cblxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgPT09IHRyZWVDb250ZXh0UHJvdmlkZXIpIHtcbiAgICB0cmVlQ29udGV4dFByb3ZpZGVyID0gaWRTdGFja1stLWlkU3RhY2tJbmRleF07XG4gICAgaWRTdGFja1tpZFN0YWNrSW5kZXhdID0gbnVsbDtcbiAgICB0cmVlQ29udGV4dE92ZXJmbG93ID0gaWRTdGFja1stLWlkU3RhY2tJbmRleF07XG4gICAgaWRTdGFja1tpZFN0YWNrSW5kZXhdID0gbnVsbDtcbiAgICB0cmVlQ29udGV4dElkID0gaWRTdGFja1stLWlkU3RhY2tJbmRleF07XG4gICAgaWRTdGFja1tpZFN0YWNrSW5kZXhdID0gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0U3VzcGVuZGVkVHJlZUNvbnRleHQoKSB7XG4gIHdhcm5JZk5vdEh5ZHJhdGluZygpO1xuXG4gIGlmICh0cmVlQ29udGV4dFByb3ZpZGVyICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0cmVlQ29udGV4dElkLFxuICAgICAgb3ZlcmZsb3c6IHRyZWVDb250ZXh0T3ZlcmZsb3dcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlU3VzcGVuZGVkVHJlZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbmRlZENvbnRleHQpIHtcbiAgd2FybklmTm90SHlkcmF0aW5nKCk7XG4gIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRJZDtcbiAgaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dE92ZXJmbG93O1xuICBpZFN0YWNrW2lkU3RhY2tJbmRleCsrXSA9IHRyZWVDb250ZXh0UHJvdmlkZXI7XG4gIHRyZWVDb250ZXh0SWQgPSBzdXNwZW5kZWRDb250ZXh0LmlkO1xuICB0cmVlQ29udGV4dE92ZXJmbG93ID0gc3VzcGVuZGVkQ29udGV4dC5vdmVyZmxvdztcbiAgdHJlZUNvbnRleHRQcm92aWRlciA9IHdvcmtJblByb2dyZXNzO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZOb3RIeWRyYXRpbmcoKSB7XG4gIHtcbiAgICBpZiAoIWdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB0byBiZSBoeWRyYXRpbmcuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlICcgKyAnYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgbWF5IGhhdmUgYmVlbiBhbiBpbnNlcnRpb24gb3IgYSBoeWRyYXRpb24uXG5cbnZhciBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG52YXIgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNIeWRyYXRpbmcgPSBmYWxzZTsgLy8gVGhpcyBmbGFnIGFsbG93cyBmb3Igd2FybmluZyBzdXByZXNzaW9uIHdoZW4gd2UgZXhwZWN0IHRoZXJlIHRvIGJlIG1pc21hdGNoZXNcbi8vIGR1ZSB0byBlYXJsaWVyIG1pc21hdGNoZXMgb3IgYSBzdXNwZW5kZWQgZmliZXIuXG5cbnZhciBkaWRTdXNwZW5kT3JFcnJvckRFViA9IGZhbHNlOyAvLyBIeWRyYXRpb24gZXJyb3JzIHRoYXQgd2VyZSB0aHJvd24gaW5zaWRlIHRoaXMgYm91bmRhcnlcblxudmFyIGh5ZHJhdGlvbkVycm9ycyA9IG51bGw7XG5cbmZ1bmN0aW9uIHdhcm5JZkh5ZHJhdGluZygpIHtcbiAge1xuICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgZXJyb3IoJ1dlIHNob3VsZCBub3QgYmUgaHlkcmF0aW5nIGhlcmUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGEgYnVnLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrRGlkVGhyb3dXaGlsZUh5ZHJhdGluZ0RFVigpIHtcbiAge1xuICAgIGRpZFN1c3BlbmRPckVycm9yREVWID0gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkU3VzcGVuZE9yRXJyb3JXaGlsZUh5ZHJhdGluZ0RFVigpIHtcbiAge1xuICAgIHJldHVybiBkaWRTdXNwZW5kT3JFcnJvckRFVjtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnRlckh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG5cbiAgdmFyIHBhcmVudEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZFdpdGhpbkNvbnRhaW5lcihwYXJlbnRJbnN0YW5jZSk7XG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgaHlkcmF0aW9uRXJyb3JzID0gbnVsbDtcbiAgZGlkU3VzcGVuZE9yRXJyb3JERVYgPSBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlZW50ZXJIeWRyYXRpb25TdGF0ZUZyb21EZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlciwgc3VzcGVuc2VJbnN0YW5jZSwgdHJlZUNvbnRleHQpIHtcblxuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGRXaXRoaW5TdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICBpc0h5ZHJhdGluZyA9IHRydWU7XG4gIGh5ZHJhdGlvbkVycm9ycyA9IG51bGw7XG4gIGRpZFN1c3BlbmRPckVycm9yREVWID0gZmFsc2U7XG5cbiAgaWYgKHRyZWVDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgcmVzdG9yZVN1c3BlbmRlZFRyZWVDb250ZXh0KGZpYmVyLCB0cmVlQ29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gd2FyblVuaHlkcmF0ZWRJbnN0YW5jZShyZXR1cm5GaWJlciwgaW5zdGFuY2UpIHtcbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgZGlkTm90SHlkcmF0ZUluc3RhbmNlV2l0aGluQ29udGFpbmVyKHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLCBpbnN0YW5jZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGlzQ29uY3VycmVudE1vZGUgPSAocmV0dXJuRmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlO1xuICAgICAgICAgIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZShyZXR1cm5GaWJlci50eXBlLCByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzLCByZXR1cm5GaWJlci5zdGF0ZU5vZGUsIGluc3RhbmNlLCAvLyBUT0RPOiBEZWxldGUgdGhpcyBhcmd1bWVudCB3aGVuIHdlIHJlbW92ZSB0aGUgbGVnYWN5IHJvb3QgQVBJLlxuICAgICAgICAgIGlzQ29uY3VycmVudE1vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IHJldHVybkZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkgZGlkTm90SHlkcmF0ZUluc3RhbmNlV2l0aGluU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQsIGluc3RhbmNlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UocmV0dXJuRmliZXIsIGluc3RhbmNlKSB7XG4gIHdhcm5Vbmh5ZHJhdGVkSW5zdGFuY2UocmV0dXJuRmliZXIsIGluc3RhbmNlKTtcbiAgdmFyIGNoaWxkVG9EZWxldGUgPSBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpO1xuICBjaGlsZFRvRGVsZXRlLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICBjaGlsZFRvRGVsZXRlLnJldHVybiA9IHJldHVybkZpYmVyO1xuICB2YXIgZGVsZXRpb25zID0gcmV0dXJuRmliZXIuZGVsZXRpb25zO1xuXG4gIGlmIChkZWxldGlvbnMgPT09IG51bGwpIHtcbiAgICByZXR1cm5GaWJlci5kZWxldGlvbnMgPSBbY2hpbGRUb0RlbGV0ZV07XG4gICAgcmV0dXJuRmliZXIuZmxhZ3MgfD0gQ2hpbGREZWxldGlvbjtcbiAgfSBlbHNlIHtcbiAgICBkZWxldGlvbnMucHVzaChjaGlsZFRvRGVsZXRlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuTm9uaHlkcmF0ZWRJbnN0YW5jZShyZXR1cm5GaWJlciwgZmliZXIpIHtcbiAge1xuICAgIGlmIChkaWRTdXNwZW5kT3JFcnJvckRFVikge1xuICAgICAgLy8gSW5zaWRlIGEgYm91bmRhcnkgdGhhdCBhbHJlYWR5IHN1c3BlbmRlZC4gV2UncmUgY3VycmVudGx5IHJlbmRlcmluZyB0aGVcbiAgICAgIC8vIHNpYmxpbmdzIG9mIGEgc3VzcGVuZGVkIG5vZGUuIFRoZSBtaXNtYXRjaCBtYXkgYmUgZHVlIHRvIHRoZSBtaXNzaW5nXG4gICAgICAvLyBkYXRhLCBzbyBpdCdzIHByb2JhYmx5IGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZVdpdGhpbkNvbnRhaW5lcihwYXJlbnRDb250YWluZXIsIHR5cGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICAgICAgdmFyIHRleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlV2l0aGluQ29udGFpbmVyKHBhcmVudENvbnRhaW5lciwgdGV4dCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBwYXJlbnRUeXBlID0gcmV0dXJuRmliZXIudHlwZTtcbiAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgX3R5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICAgICAgICAgIHZhciBfcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgICAgdmFyIGlzQ29uY3VycmVudE1vZGUgPSAocmV0dXJuRmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlO1xuICAgICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBfdHlwZSwgX3Byb3BzLCAvLyBUT0RPOiBEZWxldGUgdGhpcyBhcmd1bWVudCB3aGVuIHdlIHJlbW92ZSB0aGUgbGVnYWN5IHJvb3QgQVBJLlxuICAgICAgICAgICAgICAgIGlzQ29uY3VycmVudE1vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgX3RleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2lzQ29uY3VycmVudE1vZGUgPSAocmV0dXJuRmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlO1xuXG4gICAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBfdGV4dCwgLy8gVE9ETzogRGVsZXRlIHRoaXMgYXJndW1lbnQgd2hlbiB3ZSByZW1vdmUgdGhlIGxlZ2FjeSByb290IEFQSS5cbiAgICAgICAgICAgICAgICBfaXNDb25jdXJyZW50TW9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHN1c3BlbnNlU3RhdGUgPSByZXR1cm5GaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHZhciBfcGFyZW50SW5zdGFuY2UgPSBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQ7XG4gICAgICAgICAgaWYgKF9wYXJlbnRJbnN0YW5jZSAhPT0gbnVsbCkgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIF90eXBlMiA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBfcHJvcHMyID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlV2l0aGluU3VzcGVuc2VJbnN0YW5jZShfcGFyZW50SW5zdGFuY2UsIF90eXBlMik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgX3RleHQyID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVRleHRJbnN0YW5jZVdpdGhpblN1c3BlbnNlSW5zdGFuY2UoX3BhcmVudEluc3RhbmNlLCBfdGV4dDIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKHJldHVybkZpYmVyLCBmaWJlcikge1xuICBmaWJlci5mbGFncyA9IGZpYmVyLmZsYWdzICYgfkh5ZHJhdGluZyB8IFBsYWNlbWVudDtcbiAgd2Fybk5vbmh5ZHJhdGVkSW5zdGFuY2UocmV0dXJuRmliZXIsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSB7XG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY2FuSHlkcmF0ZUluc3RhbmNlKG5leHRJbnN0YW5jZSwgdHlwZSk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgZmliZXIuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gICAgICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICAgICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQoaW5zdGFuY2UpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHRleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKG5leHRJbnN0YW5jZSwgdGV4dCk7XG5cbiAgICAgICAgaWYgKHRleHRJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IHRleHRJbnN0YW5jZTtcbiAgICAgICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyOyAvLyBUZXh0IEluc3RhbmNlcyBkb24ndCBoYXZlIGNoaWxkcmVuIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBoeWRyYXRlLlxuXG4gICAgICAgICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IGNhbkh5ZHJhdGVTdXNwZW5zZUluc3RhbmNlKG5leHRJbnN0YW5jZSk7XG5cbiAgICAgICAgaWYgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IHtcbiAgICAgICAgICAgIGRlaHlkcmF0ZWQ6IHN1c3BlbnNlSW5zdGFuY2UsXG4gICAgICAgICAgICB0cmVlQ29udGV4dDogZ2V0U3VzcGVuZGVkVHJlZUNvbnRleHQoKSxcbiAgICAgICAgICAgIHJldHJ5TGFuZTogT2Zmc2NyZWVuTGFuZVxuICAgICAgICAgIH07XG4gICAgICAgICAgZmliZXIubWVtb2l6ZWRTdGF0ZSA9IHN1c3BlbnNlU3RhdGU7IC8vIFN0b3JlIHRoZSBkZWh5ZHJhdGVkIGZyYWdtZW50IGFzIGEgY2hpbGQgZmliZXIuXG4gICAgICAgICAgLy8gVGhpcyBzaW1wbGlmaWVzIHRoZSBjb2RlIGZvciBnZXRIb3N0U2libGluZyBhbmQgZGVsZXRpbmcgbm9kZXMsXG4gICAgICAgICAgLy8gc2luY2UgaXQgZG9lc24ndCBoYXZlIHRvIGNvbnNpZGVyIGFsbCBTdXNwZW5zZSBib3VuZGFyaWVzIGFuZFxuICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXkncmUgZGVoeWRyYXRlZCBvbmVzIG9yIG5vdC5cblxuICAgICAgICAgIHZhciBkZWh5ZHJhdGVkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21EZWh5ZHJhdGVkRnJhZ21lbnQoc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgICAgICAgZGVoeWRyYXRlZEZyYWdtZW50LnJldHVybiA9IGZpYmVyO1xuICAgICAgICAgIGZpYmVyLmNoaWxkID0gZGVoeWRyYXRlZEZyYWdtZW50O1xuICAgICAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7IC8vIFdoaWxlIGEgU3VzcGVuc2UgSW5zdGFuY2UgZG9lcyBoYXZlIGNoaWxkcmVuLCB3ZSB3b24ndCBzdGVwIGludG9cbiAgICAgICAgICAvLyBpdCBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuIEluc3RlYWQsIHdlJ2xsIHJlZW50ZXIgaXQgbGF0ZXIuXG5cbiAgICAgICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ2xpZW50UmVuZGVyT25NaXNtYXRjaChmaWJlcikge1xuICByZXR1cm4gKGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTW9kZSAmJiAoZmliZXIuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncztcbn1cblxuZnVuY3Rpb24gdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKGZpYmVyKSB7XG4gIHRocm93IG5ldyBFcnJvcignSHlkcmF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBpbml0aWFsIFVJIGRvZXMgbm90IG1hdGNoIHdoYXQgd2FzICcgKyAncmVuZGVyZWQgb24gdGhlIHNlcnZlci4nKTtcbn1cblxuZnVuY3Rpb24gdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2UoZmliZXIpIHtcbiAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gIGlmICghbmV4dEluc3RhbmNlKSB7XG4gICAgaWYgKHNob3VsZENsaWVudFJlbmRlck9uTWlzbWF0Y2goZmliZXIpKSB7XG4gICAgICB3YXJuTm9uaHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKCk7XG4gICAgfSAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuXG5cbiAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaXJzdEF0dGVtcHRlZEluc3RhbmNlID0gbmV4dEluc3RhbmNlO1xuXG4gIGlmICghdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSkge1xuICAgIGlmIChzaG91bGRDbGllbnRSZW5kZXJPbk1pc21hdGNoKGZpYmVyKSkge1xuICAgICAgd2Fybk5vbmh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaCgpO1xuICAgIH0gLy8gSWYgd2UgY2FuJ3QgaHlkcmF0ZSB0aGlzIGluc3RhbmNlIGxldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgLy8gV2UgdXNlIHRoaXMgYXMgYSBoZXVyaXN0aWMuIEl0J3MgYmFzZWQgb24gaW50dWl0aW9uIGFuZCBub3QgZGF0YSBzbyBpdFxuICAgIC8vIG1pZ2h0IGJlIGZsYXdlZCBvciB1bm5lY2Vzc2FyeS5cblxuXG4gICAgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuICAgIHZhciBwcmV2SHlkcmF0aW9uUGFyZW50RmliZXIgPSBoeWRyYXRpb25QYXJlbnRGaWJlcjtcblxuICAgIGlmICghbmV4dEluc3RhbmNlIHx8ICF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgICAgaW5zZXJ0Tm9uSHlkcmF0ZWRJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmliZXIpO1xuICAgICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBtYXRjaGVkIHRoZSBuZXh0IG9uZSwgd2UnbGwgbm93IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBvbmUgd2FzXG4gICAgLy8gc3VwZXJmbHVvdXMgYW5kIHdlJ2xsIGRlbGV0ZSBpdC4gU2luY2Ugd2UgY2FuJ3QgZWFnZXJseSBkZWxldGUgaXRcbiAgICAvLyB3ZSdsbCBoYXZlIHRvIHNjaGVkdWxlIGEgZGVsZXRpb24uIFRvIGRvIHRoYXQsIHRoaXMgbm9kZSBuZWVkcyBhIGR1bW15XG4gICAgLy8gZmliZXIgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UocHJldkh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKGZpYmVyLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG5cbiAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgc2hvdWxkV2FybklmTWlzbWF0Y2hEZXYgPSAhZGlkU3VzcGVuZE9yRXJyb3JERVY7XG4gIHZhciB1cGRhdGVQYXlsb2FkID0gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCBmaWJlci50eXBlLCBmaWJlci5tZW1vaXplZFByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBmaWJlciwgc2hvdWxkV2FybklmTWlzbWF0Y2hEZXYpOyAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cblxuICBmaWJlci51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAvLyBpcyBhIG5ldyByZWYgd2UgbWFyayB0aGlzIGFzIGFuIHVwZGF0ZS5cblxuICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciB0ZXh0SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB0ZXh0Q29udGVudCA9IGZpYmVyLm1lbW9pemVkUHJvcHM7XG4gIHZhciBzaG91bGRVcGRhdGUgPSBoeWRyYXRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQsIGZpYmVyKTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gV2UgYXNzdW1lIHRoYXQgcHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UgaXMgY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZSB0aGVcbiAgICAvLyBoeWRyYXRpb24gcGFyZW50IGlzIHRoZSBwYXJlbnQgaG9zdCBjb21wb25lbnQgb2YgdGhpcyBob3N0IHRleHQuXG4gICAgdmFyIHJldHVybkZpYmVyID0gaHlkcmF0aW9uUGFyZW50RmliZXI7XG5cbiAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgdmFyIGlzQ29uY3VycmVudE1vZGUgPSAocmV0dXJuRmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlO1xuICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQsIC8vIFRPRE86IERlbGV0ZSB0aGlzIGFyZ3VtZW50IHdoZW4gd2UgcmVtb3ZlIHRoZSBsZWdhY3kgcm9vdCBBUEkuXG4gICAgICAgICAgICBpc0NvbmN1cnJlbnRNb2RlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHBhcmVudFR5cGUgPSByZXR1cm5GaWJlci50eXBlO1xuICAgICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgdmFyIF9pc0NvbmN1cnJlbnRNb2RlMiA9IChyZXR1cm5GaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGU7XG5cbiAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50LCAvLyBUT0RPOiBEZWxldGUgdGhpcyBhcmd1bWVudCB3aGVuIHdlIHJlbW92ZSB0aGUgbGVnYWN5IHJvb3QgQVBJLlxuICAgICAgICAgICAgX2lzQ29uY3VycmVudE1vZGUyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpIHtcblxuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG4gIHZhciBzdXNwZW5zZUluc3RhbmNlID0gc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCA/IHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCA6IG51bGw7XG5cbiAgaWYgKCFzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBoYXZlIGEgaHlkcmF0ZWQgc3VzcGVuc2UgaW5zdGFuY2UuICcgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgfVxuXG4gIGh5ZHJhdGVTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBzdXNwZW5zZVN0YXRlICE9PSBudWxsID8gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkIDogbnVsbDtcblxuICBpZiAoIXN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICB9XG5cbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpIHtcbiAgdmFyIHBhcmVudCA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsICYmIHBhcmVudC50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgcGFyZW50LnRhZyAhPT0gSG9zdFJvb3QgJiYgcGFyZW50LnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIHBvcEh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG5cbiAgaWYgKGZpYmVyICE9PSBoeWRyYXRpb25QYXJlbnRGaWJlcikge1xuICAgIC8vIFdlJ3JlIGRlZXBlciB0aGFuIHRoZSBjdXJyZW50IGh5ZHJhdGlvbiBjb250ZXh0LCBpbnNpZGUgYW4gaW5zZXJ0ZWRcbiAgICAvLyB0cmVlLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICAvLyBJZiB3ZSdyZSBub3QgY3VycmVudGx5IGh5ZHJhdGluZyBidXQgd2UncmUgaW4gYSBoeWRyYXRpb24gY29udGV4dCwgdGhlblxuICAgIC8vIHdlIHdlcmUgYW4gaW5zZXJ0aW9uIGFuZCBub3cgbmVlZCB0byBwb3AgdXAgcmVlbnRlciBoeWRyYXRpb24gb2Ygb3VyXG4gICAgLy8gc2libGluZ3MuXG4gICAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiB3ZSBoYXZlIGFueSByZW1haW5pbmcgaHlkcmF0YWJsZSBub2Rlcywgd2UgbmVlZCB0byBkZWxldGUgdGhlbSBub3cuXG4gIC8vIFdlIG9ubHkgZG8gdGhpcyBkZWVwZXIgdGhhbiBoZWFkIGFuZCBib2R5IHNpbmNlIHRoZXkgdGVuZCB0byBoYXZlIHJhbmRvbVxuICAvLyBvdGhlciBub2RlcyBpbiB0aGVtLiBXZSBhbHNvIGlnbm9yZSBjb21wb25lbnRzIHdpdGggcHVyZSB0ZXh0IGNvbnRlbnQgaW5cbiAgLy8gc2lkZSBvZiB0aGVtLiBXZSBhbHNvIGRvbid0IGRlbGV0ZSBhbnl0aGluZyBpbnNpZGUgdGhlIHJvb3QgY29udGFpbmVyLlxuXG5cbiAgaWYgKGZpYmVyLnRhZyAhPT0gSG9zdFJvb3QgJiYgKGZpYmVyLnRhZyAhPT0gSG9zdENvbXBvbmVudCB8fCBzaG91bGREZWxldGVVbmh5ZHJhdGVkVGFpbEluc3RhbmNlcyhmaWJlci50eXBlKSAmJiAhc2hvdWxkU2V0VGV4dENvbnRlbnQoZmliZXIudHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcykpKSB7XG4gICAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgICBpZiAobmV4dEluc3RhbmNlKSB7XG4gICAgICBpZiAoc2hvdWxkQ2xpZW50UmVuZGVyT25NaXNtYXRjaChmaWJlcikpIHtcbiAgICAgICAgd2FybklmVW5oeWRyYXRlZFRhaWxOb2RlcyhmaWJlcik7XG4gICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2hpbGUgKG5leHRJbnN0YW5jZSkge1xuICAgICAgICAgIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShmaWJlciwgbmV4dEluc3RhbmNlKTtcbiAgICAgICAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobmV4dEluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IHNraXBQYXN0RGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpO1xuICB9IGVsc2Uge1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBoeWRyYXRpb25QYXJlbnRGaWJlciA/IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaWJlci5zdGF0ZU5vZGUpIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBoYXNVbmh5ZHJhdGVkVGFpbE5vZGVzKCkge1xuICByZXR1cm4gaXNIeWRyYXRpbmcgJiYgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gd2FybklmVW5oeWRyYXRlZFRhaWxOb2RlcyhmaWJlcikge1xuICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICB3aGlsZSAobmV4dEluc3RhbmNlKSB7XG4gICAgd2FyblVuaHlkcmF0ZWRJbnN0YW5jZShmaWJlciwgbmV4dEluc3RhbmNlKTtcbiAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobmV4dEluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEh5ZHJhdGlvblN0YXRlKCkge1xuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG4gIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gIGRpZFN1c3BlbmRPckVycm9yREVWID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlKCkge1xuICBpZiAoaHlkcmF0aW9uRXJyb3JzICE9PSBudWxsKSB7XG4gICAgLy8gU3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBhIGZvcmNlZCBjbGllbnQgcmVuZGVyLiBUaGUgZXJyb3JzIHRoYXQgb2NjdXJyZWRcbiAgICAvLyBkdXJpbmcgdGhlIGh5ZHJhdGlvbiBhdHRlbXB0IGFyZSBub3cgcmVjb3ZlcmVkLiBXZSB3aWxsIGxvZyB0aGVtIGluXG4gICAgLy8gY29tbWl0IHBoYXNlLCBvbmNlIHRoZSBlbnRpcmUgdHJlZSBoYXMgZmluaXNoZWQuXG4gICAgcXVldWVSZWNvdmVyYWJsZUVycm9ycyhoeWRyYXRpb25FcnJvcnMpO1xuICAgIGh5ZHJhdGlvbkVycm9ycyA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SXNIeWRyYXRpbmcoKSB7XG4gIHJldHVybiBpc0h5ZHJhdGluZztcbn1cblxuZnVuY3Rpb24gcXVldWVIeWRyYXRpb25FcnJvcihlcnJvcikge1xuICBpZiAoaHlkcmF0aW9uRXJyb3JzID09PSBudWxsKSB7XG4gICAgaHlkcmF0aW9uRXJyb3JzID0gW2Vycm9yXTtcbiAgfSBlbHNlIHtcbiAgICBoeWRyYXRpb25FcnJvcnMucHVzaChlcnJvcik7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBOb1RyYW5zaXRpb24gPSBudWxsO1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkge1xuICByZXR1cm4gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xufVxuXG52YXIgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MgPSB7XG4gIHJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9LFxuICByZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uICgpIHt9LFxuICBkaXNjYXJkUGVuZGluZ1dhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fVxufTtcblxue1xuICB2YXIgZmluZFN0cmljdFJvb3QgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICB2YXIgbWF5YmVTdHJpY3RSb290ID0gbnVsbDtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgIG1heWJlU3RyaWN0Um9vdCA9IG5vZGU7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF5YmVTdHJpY3RSb290O1xuICB9O1xuXG4gIHZhciBzZXRUb1NvcnRlZFN0cmluZyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGFycmF5LnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJheS5zb3J0KCkuam9pbignLCAnKTtcbiAgfTtcblxuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcyA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICAvLyBEZWR1cGUgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuICAgIGlmIChkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLlxuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gV2UgZG8gYW4gaW5pdGlhbCBwYXNzIHRvIGdhdGhlciBjb21wb25lbnQgbmFtZXNcbiAgICB2YXIgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH0gLy8gRmluYWxseSwgd2UgZmx1c2ggYWxsIHRoZSB3YXJuaW5nc1xuICAgIC8vIFVOU0FGRV8gb25lcyBiZWZvcmUgdGhlIGRlcHJlY2F0ZWQgb25lcywgc2luY2UgdGhleSdsbCBiZSAnbG91ZGVyJ1xuXG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgXCIgKyAncmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGVyaXZlZC1zdGF0ZVxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczIgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCAnICsgJ2FuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMyKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsTW91bnQgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsTW91bnQgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczQgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgXCIgKyAnY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczQpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM1ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFVwZGF0ZSBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsVXBkYXRlIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM1KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dCA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICB2YXIgc3RyaWN0Um9vdCA9IGZpbmRTdHJpY3RSb290KGZpYmVyKTtcblxuICAgIGlmIChzdHJpY3RSb290ID09PSBudWxsKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdG8gZmluZCBhIFN0cmljdE1vZGUgY29tcG9uZW50IGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG5cblxuICAgIGlmIChkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmhhcyhmaWJlci50eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3YXJuaW5nc0ZvclJvb3QgPSBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZ2V0KHN0cmljdFJvb3QpO1xuXG4gICAgaWYgKGZpYmVyLnR5cGUuY29udGV4dFR5cGVzICE9IG51bGwgfHwgZmliZXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyAhPSBudWxsIHx8IGluc3RhbmNlICE9PSBudWxsICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh3YXJuaW5nc0ZvclJvb3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB3YXJuaW5nc0ZvclJvb3QgPSBbXTtcbiAgICAgICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLnNldChzdHJpY3RSb290LCB3YXJuaW5nc0ZvclJvb3QpO1xuICAgICAgfVxuXG4gICAgICB3YXJuaW5nc0ZvclJvb3QucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyQXJyYXksIHN0cmljdFJvb3QpIHtcbiAgICAgIGlmIChmaWJlckFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBmaXJzdEZpYmVyID0gZmliZXJBcnJheVswXTtcbiAgICAgIHZhciB1bmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIGZpYmVyQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgdW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKHVuaXF1ZU5hbWVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpcnN0RmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdMZWdhY3kgY29udGV4dCBBUEkgaGFzIGJlZW4gZGV0ZWN0ZWQgd2l0aGluIGEgc3RyaWN0LW1vZGUgdHJlZS4nICsgJ1xcblxcblRoZSBvbGQgQVBJIHdpbGwgYmUgc3VwcG9ydGVkIGluIGFsbCAxNi54IHJlbGVhc2VzLCBidXQgYXBwbGljYXRpb25zICcgKyAndXNpbmcgaXQgc2hvdWxkIG1pZ3JhdGUgdG8gdGhlIG5ldyB2ZXJzaW9uLicgKyAnXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJyArICdcXG5cXG5MZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvbGVnYWN5LWNvbnRleHQnLCBzb3J0ZWROYW1lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGJhc2VQcm9wcykge1xuICBpZiAoQ29tcG9uZW50ICYmIENvbXBvbmVudC5kZWZhdWx0UHJvcHMpIHtcbiAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHMuIFRha2VuIGZyb20gUmVhY3RFbGVtZW50XG4gICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBiYXNlUHJvcHMpO1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSBDb21wb25lbnQuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICByZXR1cm4gYmFzZVByb3BzO1xufVxuXG52YXIgdmFsdWVDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG52YXIgcmVuZGVyZXJTaWdpbDtcblxue1xuICAvLyBVc2UgdGhpcyB0byBkZXRlY3QgbXVsdGlwbGUgcmVuZGVyZXJzIHVzaW5nIHRoZSBzYW1lIGNvbnRleHRcbiAgcmVuZGVyZXJTaWdpbCA9IHt9O1xufVxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG52YXIgbGFzdEZ1bGx5T2JzZXJ2ZWRDb250ZXh0ID0gbnVsbDtcbnZhciBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG5mdW5jdGlvbiByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSB7XG4gIC8vIFRoaXMgaXMgY2FsbGVkIHJpZ2h0IGJlZm9yZSBSZWFjdCB5aWVsZHMgZXhlY3V0aW9uLCB0byBlbnN1cmUgYHJlYWRDb250ZXh0YFxuICAvLyBjYW5ub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhlIHJlbmRlciBwaGFzZS5cbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSBudWxsO1xuICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xuICBsYXN0RnVsbHlPYnNlcnZlZENvbnRleHQgPSBudWxsO1xuXG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gdHJ1ZTtcbiAgfVxufVxuZnVuY3Rpb24gZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBwdXNoUHJvdmlkZXIocHJvdmlkZXJGaWJlciwgY29udGV4dCwgbmV4dFZhbHVlKSB7XG4gIHtcbiAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IG5leHRWYWx1ZTtcblxuICAgIHtcbiAgICAgIGlmIChjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHVuZGVmaW5lZCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IG51bGwgJiYgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsKSB7XG4gICAgICAgIGVycm9yKCdEZXRlY3RlZCBtdWx0aXBsZSByZW5kZXJlcnMgY29uY3VycmVudGx5IHJlbmRlcmluZyB0aGUgJyArICdzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9wUHJvdmlkZXIoY29udGV4dCwgcHJvdmlkZXJGaWJlcikge1xuICB2YXIgY3VycmVudFZhbHVlID0gdmFsdWVDdXJzb3IuY3VycmVudDtcbiAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcblxuICB7XG4gICAge1xuICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChwYXJlbnQsIHJlbmRlckxhbmVzLCBwcm9wYWdhdGlvblJvb3QpIHtcbiAgLy8gVXBkYXRlIHRoZSBjaGlsZCBsYW5lcyBvZiBhbGwgdGhlIGFuY2VzdG9ycywgaW5jbHVkaW5nIHRoZSBhbHRlcm5hdGVzLlxuICB2YXIgbm9kZSA9IHBhcmVudDtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBhbHRlcm5hdGUgPSBub2RlLmFsdGVybmF0ZTtcblxuICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBub2RlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmICFpc1N1YnNldE9mTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHByb3BhZ2F0aW9uUm9vdCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG5cbiAge1xuICAgIGlmIChub2RlICE9PSBwcm9wYWdhdGlvblJvb3QpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB0byBmaW5kIHRoZSBwcm9wYWdhdGlvbiByb290IHdoZW4gc2NoZWR1bGluZyBjb250ZXh0IHdvcmsuICcgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlX2VhZ2VyKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvcGFnYXRlQ29udGV4dENoYW5nZV9lYWdlcih3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgcmVuZGVyTGFuZXMpIHtcblxuICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBjaGlsZCB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICBmaWJlci5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgIHZhciBuZXh0RmliZXIgPSB2b2lkIDA7IC8vIFZpc2l0IHRoaXMgZmliZXIuXG5cbiAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcblxuICAgIGlmIChsaXN0ICE9PSBudWxsKSB7XG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdC5maXJzdENvbnRleHQ7XG5cbiAgICAgIHdoaWxlIChkZXBlbmRlbmN5ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IG1hdGNoZXMuXG4gICAgICAgIGlmIChkZXBlbmRlbmN5LmNvbnRleHQgPT09IGNvbnRleHQpIHtcbiAgICAgICAgICAvLyBNYXRjaCEgU2NoZWR1bGUgYW4gdXBkYXRlIG9uIHRoaXMgZmliZXIuXG4gICAgICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGEgZm9yY2UgdXBkYXRlIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBsYW5lKTtcbiAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTsgLy8gVE9ETzogQmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgd29yay1pbi1wcm9ncmVzcywgdGhpcyB3aWxsIGFkZCB0aGVcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0byB0aGUgY3VycmVudCBmaWJlciwgdG9vLCB3aGljaCBtZWFucyBpdCB3aWxsIHBlcnNpc3QgZXZlbiBpZlxuICAgICAgICAgICAgLy8gdGhpcyByZW5kZXIgaXMgdGhyb3duIGF3YXkuIFNpbmNlIGl0J3MgYSByYWNlIGNvbmRpdGlvbiwgbm90IHN1cmUgaXQnc1xuICAgICAgICAgICAgLy8gd29ydGggZml4aW5nLlxuICAgICAgICAgICAgLy8gSW5saW5lZCBgZW5xdWV1ZVVwZGF0ZWAgdG8gcmVtb3ZlIGludGVybGVhdmVkIHVwZGF0ZSBjaGVja1xuXG4gICAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaWJlci51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlID09PSBudWxsKSA7IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgc2hhcmVkUXVldWUgPSB1cGRhdGVRdWV1ZS5zaGFyZWQ7XG4gICAgICAgICAgICAgIHZhciBwZW5kaW5nID0gc2hhcmVkUXVldWUucGVuZGluZztcblxuICAgICAgICAgICAgICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICAgICAgICAgICAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dDtcbiAgICAgICAgICAgICAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzaGFyZWRRdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNjaGVkdWxlQ29udGV4dFdvcmtPblBhcmVudFBhdGgoZmliZXIucmV0dXJuLCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpOyAvLyBNYXJrIHRoZSB1cGRhdGVkIGxhbmVzIG9uIHRoZSBsaXN0LCB0b28uXG5cbiAgICAgICAgICBsaXN0LmxhbmVzID0gbWVyZ2VMYW5lcyhsaXN0LmxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlIGFscmVhZHkgZm91bmQgYSBtYXRjaCwgd2UgY2FuIHN0b3AgdHJhdmVyc2luZyB0aGVcbiAgICAgICAgICAvLyBkZXBlbmRlbmN5IGxpc3QuXG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmN5Lm5leHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWJlci50YWcgPT09IENvbnRleHRQcm92aWRlcikge1xuICAgICAgLy8gRG9uJ3Qgc2NhbiBkZWVwZXIgaWYgdGhpcyBpcyBhIG1hdGNoaW5nIHByb3ZpZGVyXG4gICAgICBuZXh0RmliZXIgPSBmaWJlci50eXBlID09PSB3b3JrSW5Qcm9ncmVzcy50eXBlID8gbnVsbCA6IGZpYmVyLmNoaWxkO1xuICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBEZWh5ZHJhdGVkRnJhZ21lbnQpIHtcbiAgICAgIC8vIElmIGEgZGVoeWRyYXRlZCBzdXNwZW5zZSBib3VuZGFyeSBpcyBpbiB0aGlzIHN1YnRyZWUsIHdlIGRvbid0IGtub3dcbiAgICAgIC8vIGlmIGl0IHdpbGwgaGF2ZSBhbnkgY29udGV4dCBjb25zdW1lcnMgaW4gaXQuIFRoZSBiZXN0IHdlIGNhbiBkbyBpc1xuICAgICAgLy8gbWFyayBpdCBhcyBoYXZpbmcgdXBkYXRlcy5cbiAgICAgIHZhciBwYXJlbnRTdXNwZW5zZSA9IGZpYmVyLnJldHVybjtcblxuICAgICAgaWYgKHBhcmVudFN1c3BlbnNlID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignV2UganVzdCBjYW1lIGZyb20gYSBwYXJlbnQgc28gd2UgbXVzdCBoYXZlIGhhZCBhIHBhcmVudC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgICAgIH1cblxuICAgICAgcGFyZW50U3VzcGVuc2UubGFuZXMgPSBtZXJnZUxhbmVzKHBhcmVudFN1c3BlbnNlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgX2FsdGVybmF0ZSA9IHBhcmVudFN1c3BlbnNlLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKF9hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgX2FsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoX2FsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgcGFzc2luZyB0aGlzIGZpYmVyIGFzIHRoZSBwYXJlbnRcbiAgICAgIC8vIGJlY2F1c2Ugd2Ugd2FudCB0byBzY2hlZHVsZSB0aGlzIGZpYmVyIGFzIGhhdmluZyB3b3JrXG4gICAgICAvLyBvbiBpdHMgY2hpbGRyZW4uIFdlJ2xsIHVzZSB0aGUgY2hpbGRMYW5lcyBvblxuICAgICAgLy8gdGhpcyBmaWJlciB0byBpbmRpY2F0ZSB0aGF0IGEgY29udGV4dCBoYXMgY2hhbmdlZC5cblxuXG4gICAgICBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKHBhcmVudFN1c3BlbnNlLCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbmV4dEZpYmVyID0gZmliZXIuc2libGluZztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJhdmVyc2UgZG93bi5cbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgIH1cblxuICAgIGlmIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgbmV4dEZpYmVyLnJldHVybiA9IGZpYmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjaGlsZC4gVHJhdmVyc2UgdG8gbmV4dCBzaWJsaW5nLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXI7XG5cbiAgICAgIHdoaWxlIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAvLyBXZSdyZSBiYWNrIHRvIHRoZSByb290IG9mIHRoaXMgc3VidHJlZS4gRXhpdC5cbiAgICAgICAgICBuZXh0RmliZXIgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpYmxpbmcgPSBuZXh0RmliZXIuc2libGluZztcblxuICAgICAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIHNpYmxpbmcgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICAgICAgc2libGluZy5yZXR1cm4gPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgICAgIG5leHRGaWJlciA9IHNpYmxpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gTm8gbW9yZSBzaWJsaW5ncy4gVHJhdmVyc2UgdXAuXG5cblxuICAgICAgICBuZXh0RmliZXIgPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gbmV4dEZpYmVyO1xuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgbGFzdEZ1bGx5T2JzZXJ2ZWRDb250ZXh0ID0gbnVsbDtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcztcblxuICBpZiAoZGVwZW5kZW5jaWVzICE9PSBudWxsKSB7XG4gICAge1xuICAgICAgdmFyIGZpcnN0Q29udGV4dCA9IGRlcGVuZGVuY2llcy5maXJzdENvbnRleHQ7XG5cbiAgICAgIGlmIChmaXJzdENvbnRleHQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKGluY2x1ZGVzU29tZUxhbmUoZGVwZW5kZW5jaWVzLmxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgICAgICAvLyBDb250ZXh0IGxpc3QgaGFzIGEgcGVuZGluZyB1cGRhdGUuIE1hcmsgdGhhdCB0aGlzIGZpYmVyIHBlcmZvcm1lZCB3b3JrLlxuICAgICAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgICAgIH0gLy8gUmVzZXQgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgbGlzdFxuXG5cbiAgICAgICAgZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZWFkQ29udGV4dChjb250ZXh0KSB7XG4gIHtcbiAgICAvLyBUaGlzIHdhcm5pbmcgd291bGQgZmlyZSBpZiB5b3UgcmVhZCBjb250ZXh0IGluc2lkZSBhIEhvb2sgbGlrZSB1c2VNZW1vLlxuICAgIC8vIFVubGlrZSB0aGUgY2xhc3MgY2hlY2sgYmVsb3csIGl0J3Mgbm90IGVuZm9yY2VkIGluIHByb2R1Y3Rpb24gZm9yIHBlcmYuXG4gICAgaWYgKGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYpIHtcbiAgICAgIGVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdmFsdWUgPSAgY29udGV4dC5fY3VycmVudFZhbHVlIDtcblxuICBpZiAobGFzdEZ1bGx5T2JzZXJ2ZWRDb250ZXh0ID09PSBjb250ZXh0KSA7IGVsc2Uge1xuICAgIHZhciBjb250ZXh0SXRlbSA9IHtcbiAgICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgICBtZW1vaXplZFZhbHVlOiB2YWx1ZSxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9PT0gbnVsbCkge1xuICAgICAgaWYgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gICAgICB9IC8vIFRoaXMgaXMgdGhlIGZpcnN0IGRlcGVuZGVuY3kgZm9yIHRoaXMgY29tcG9uZW50LiBDcmVhdGUgYSBuZXcgbGlzdC5cblxuXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBjb250ZXh0SXRlbTtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgbGFuZXM6IE5vTGFuZXMsXG4gICAgICAgIGZpcnN0Q29udGV4dDogY29udGV4dEl0ZW1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCBhIG5ldyBjb250ZXh0IGl0ZW0uXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBsYXN0Q29udGV4dERlcGVuZGVuY3kubmV4dCA9IGNvbnRleHRJdGVtO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLy8gcmVuZGVyLiBXaGVuIHRoaXMgcmVuZGVyIGV4aXRzLCBlaXRoZXIgYmVjYXVzZSBpdCBmaW5pc2hlcyBvciBiZWNhdXNlIGl0IGlzXG4vLyBpbnRlcnJ1cHRlZCwgdGhlIGludGVybGVhdmVkIHVwZGF0ZXMgd2lsbCBiZSB0cmFuc2ZlcnJlZCBvbnRvIHRoZSBtYWluIHBhcnRcbi8vIG9mIHRoZSBxdWV1ZS5cblxudmFyIGNvbmN1cnJlbnRRdWV1ZXMgPSBudWxsO1xuZnVuY3Rpb24gcHVzaENvbmN1cnJlbnRVcGRhdGVRdWV1ZShxdWV1ZSkge1xuICBpZiAoY29uY3VycmVudFF1ZXVlcyA9PT0gbnVsbCkge1xuICAgIGNvbmN1cnJlbnRRdWV1ZXMgPSBbcXVldWVdO1xuICB9IGVsc2Uge1xuICAgIGNvbmN1cnJlbnRRdWV1ZXMucHVzaChxdWV1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKSB7XG4gIC8vIFRyYW5zZmVyIHRoZSBpbnRlcmxlYXZlZCB1cGRhdGVzIG9udG8gdGhlIG1haW4gcXVldWUuIEVhY2ggcXVldWUgaGFzIGFcbiAgLy8gYHBlbmRpbmdgIGZpZWxkIGFuZCBhbiBgaW50ZXJsZWF2ZWRgIGZpZWxkLiBXaGVuIHRoZXkgYXJlIG5vdCBudWxsLCB0aGV5XG4gIC8vIHBvaW50IHRvIHRoZSBsYXN0IG5vZGUgaW4gYSBjaXJjdWxhciBsaW5rZWQgbGlzdC4gV2UgbmVlZCB0byBhcHBlbmQgdGhlXG4gIC8vIGludGVybGVhdmVkIGxpc3QgdG8gdGhlIGVuZCBvZiB0aGUgcGVuZGluZyBsaXN0IGJ5IGpvaW5pbmcgdGhlbSBpbnRvIGFcbiAgLy8gc2luZ2xlLCBjaXJjdWxhciBsaXN0LlxuICBpZiAoY29uY3VycmVudFF1ZXVlcyAhPT0gbnVsbCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uY3VycmVudFF1ZXVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXVlID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICAgIHZhciBsYXN0SW50ZXJsZWF2ZWRVcGRhdGUgPSBxdWV1ZS5pbnRlcmxlYXZlZDtcblxuICAgICAgaWYgKGxhc3RJbnRlcmxlYXZlZFVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBxdWV1ZS5pbnRlcmxlYXZlZCA9IG51bGw7XG4gICAgICAgIHZhciBmaXJzdEludGVybGVhdmVkVXBkYXRlID0gbGFzdEludGVybGVhdmVkVXBkYXRlLm5leHQ7XG4gICAgICAgIHZhciBsYXN0UGVuZGluZ1VwZGF0ZSA9IHF1ZXVlLnBlbmRpbmc7XG5cbiAgICAgICAgaWYgKGxhc3RQZW5kaW5nVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgICAgICAgbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IGZpcnN0SW50ZXJsZWF2ZWRVcGRhdGU7XG4gICAgICAgICAgbGFzdEludGVybGVhdmVkVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBxdWV1ZS5wZW5kaW5nID0gbGFzdEludGVybGVhdmVkVXBkYXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbmN1cnJlbnRRdWV1ZXMgPSBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpIHtcbiAgdmFyIGludGVybGVhdmVkID0gcXVldWUuaW50ZXJsZWF2ZWQ7XG5cbiAgaWYgKGludGVybGVhdmVkID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlOyAvLyBBdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHJlbmRlciwgdGhpcyBxdWV1ZSdzIGludGVybGVhdmVkIHVwZGF0ZXMgd2lsbFxuICAgIC8vIGJlIHRyYW5zZmVycmVkIHRvIHRoZSBwZW5kaW5nIHF1ZXVlLlxuXG4gICAgcHVzaENvbmN1cnJlbnRVcGRhdGVRdWV1ZShxdWV1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLm5leHQgPSBpbnRlcmxlYXZlZC5uZXh0O1xuICAgIGludGVybGVhdmVkLm5leHQgPSB1cGRhdGU7XG4gIH1cblxuICBxdWV1ZS5pbnRlcmxlYXZlZCA9IHVwZGF0ZTtcbiAgcmV0dXJuIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZUFuZEVhZ2VybHlCYWlsb3V0KGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKSB7XG4gIHZhciBpbnRlcmxlYXZlZCA9IHF1ZXVlLmludGVybGVhdmVkO1xuXG4gIGlmIChpbnRlcmxlYXZlZCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTsgLy8gQXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCByZW5kZXIsIHRoaXMgcXVldWUncyBpbnRlcmxlYXZlZCB1cGRhdGVzIHdpbGxcbiAgICAvLyBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgcGVuZGluZyBxdWV1ZS5cblxuICAgIHB1c2hDb25jdXJyZW50VXBkYXRlUXVldWUocXVldWUpO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gaW50ZXJsZWF2ZWQubmV4dDtcbiAgICBpbnRlcmxlYXZlZC5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgcXVldWUuaW50ZXJsZWF2ZWQgPSB1cGRhdGU7XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudENsYXNzVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKSB7XG4gIHZhciBpbnRlcmxlYXZlZCA9IHF1ZXVlLmludGVybGVhdmVkO1xuXG4gIGlmIChpbnRlcmxlYXZlZCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTsgLy8gQXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCByZW5kZXIsIHRoaXMgcXVldWUncyBpbnRlcmxlYXZlZCB1cGRhdGVzIHdpbGxcbiAgICAvLyBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgcGVuZGluZyBxdWV1ZS5cblxuICAgIHB1c2hDb25jdXJyZW50VXBkYXRlUXVldWUocXVldWUpO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gaW50ZXJsZWF2ZWQubmV4dDtcbiAgICBpbnRlcmxlYXZlZC5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgcXVldWUuaW50ZXJsZWF2ZWQgPSB1cGRhdGU7XG4gIHJldHVybiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIGxhbmUpIHtcbiAgcmV0dXJuIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBsYW5lKTtcbn0gLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIG91dHNpZGUgdGhpcyBtb2R1bGUgc2hvdWxkIG9ubHkgYmUgZG9uZSBmb3IgYmFja3dhcmRzXG4vLyBjb21wYXRpYmlsaXR5IGFuZCBzaG91bGQgYWx3YXlzIGJlIGFjY29tcGFuaWVkIGJ5IGEgd2FybmluZy5cblxudmFyIHVuc2FmZV9tYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290O1xuXG5mdW5jdGlvbiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChzb3VyY2VGaWJlciwgbGFuZSkge1xuICAvLyBVcGRhdGUgdGhlIHNvdXJjZSBmaWJlcidzIGxhbmVzXG4gIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgbGFuZSk7XG4gIHZhciBhbHRlcm5hdGUgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCBsYW5lKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAoYWx0ZXJuYXRlID09PSBudWxsICYmIChzb3VyY2VGaWJlci5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgfVxuICB9IC8vIFdhbGsgdGhlIHBhcmVudCBwYXRoIHRvIHRoZSByb290IGFuZCB1cGRhdGUgdGhlIGNoaWxkIGxhbmVzLlxuXG5cbiAgdmFyIG5vZGUgPSBzb3VyY2VGaWJlcjtcbiAgdmFyIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgcGFyZW50LmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKHBhcmVudC5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICBhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBpZiAoKHBhcmVudC5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IHBhcmVudDtcbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIHZhciByb290ID0gbm9kZS5zdGF0ZU5vZGU7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxudmFyIFVwZGF0ZVN0YXRlID0gMDtcbnZhciBSZXBsYWNlU3RhdGUgPSAxO1xudmFyIEZvcmNlVXBkYXRlID0gMjtcbnZhciBDYXB0dXJlVXBkYXRlID0gMzsgLy8gR2xvYmFsIHN0YXRlIHRoYXQgaXMgcmVzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLlxuLy8gSXQgc2hvdWxkIG9ubHkgYmUgcmVhZCByaWdodCBhZnRlciBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLCB2aWFcbi8vIGBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nYC5cblxudmFyIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG52YXIgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZTtcbnZhciBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWU7XG5cbntcbiAgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9IGZhbHNlO1xuICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplVXBkYXRlUXVldWUoZmliZXIpIHtcbiAgdmFyIHF1ZXVlID0ge1xuICAgIGJhc2VTdGF0ZTogZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICBmaXJzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgbGFzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgc2hhcmVkOiB7XG4gICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgaW50ZXJsZWF2ZWQ6IG51bGwsXG4gICAgICBsYW5lczogTm9MYW5lc1xuICAgIH0sXG4gICAgZWZmZWN0czogbnVsbFxuICB9O1xuICBmaWJlci51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xufVxuZnVuY3Rpb24gY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBDbG9uZSB0aGUgdXBkYXRlIHF1ZXVlIGZyb20gY3VycmVudC4gVW5sZXNzIGl0J3MgYWxyZWFkeSBhIGNsb25lLlxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICB2YXIgY2xvbmUgPSB7XG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICBmaXJzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5maXJzdEJhc2VVcGRhdGUsXG4gICAgICBsYXN0QmFzZVVwZGF0ZTogY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlLFxuICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgZWZmZWN0czogY3VycmVudFF1ZXVlLmVmZmVjdHNcbiAgICB9O1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY2xvbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICBldmVudFRpbWU6IGV2ZW50VGltZSxcbiAgICBsYW5lOiBsYW5lLFxuICAgIHRhZzogVXBkYXRlU3RhdGUsXG4gICAgcGF5bG9hZDogbnVsbCxcbiAgICBjYWxsYmFjazogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHJldHVybiB1cGRhdGU7XG59XG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUsIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG5cbiAgaWYgKHVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgLy8gT25seSBvY2N1cnMgaWYgdGhlIGZpYmVyIGhhcyBiZWVuIHVubW91bnRlZC5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBzaGFyZWRRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcblxuICB7XG4gICAgaWYgKGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9PT0gc2hhcmVkUXVldWUgJiYgIWRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUpIHtcbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkICcgKyAnZnJvbSBpbnNpZGUgYW4gdXBkYXRlIGZ1bmN0aW9uLiBVcGRhdGUgZnVuY3Rpb25zIHNob3VsZCBiZSBwdXJlLCAnICsgJ3dpdGggemVybyBzaWRlLWVmZmVjdHMuIENvbnNpZGVyIHVzaW5nIGNvbXBvbmVudERpZFVwZGF0ZSBvciBhICcgKyAnY2FsbGJhY2suJyk7XG5cbiAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc1Vuc2FmZUNsYXNzUmVuZGVyUGhhc2VVcGRhdGUoKSkge1xuICAgIC8vIFRoaXMgaXMgYW4gdW5zYWZlIHJlbmRlciBwaGFzZSB1cGRhdGUuIEFkZCBkaXJlY3RseSB0byB0aGUgdXBkYXRlXG4gICAgLy8gcXVldWUgc28gd2UgY2FuIHByb2Nlc3MgaXQgaW1tZWRpYXRlbHkgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlci5cbiAgICB2YXIgcGVuZGluZyA9IHNoYXJlZFF1ZXVlLnBlbmRpbmc7XG5cbiAgICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICAgIH1cblxuICAgIHNoYXJlZFF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7IC8vIFVwZGF0ZSB0aGUgY2hpbGRMYW5lcyBldmVuIHRob3VnaCB3ZSdyZSBtb3N0IGxpa2VseSBhbHJlYWR5IHJlbmRlcmluZ1xuICAgIC8vIHRoaXMgZmliZXIuIFRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGluIHRoZSBjYXNlIHdoZXJlIHlvdVxuICAgIC8vIHVwZGF0ZSBhIGRpZmZlcmVudCBjb21wb25lbnQgZHVyaW5nIHJlbmRlciBwaGFzZSB0aGFuIHRoZSBvbmUgdGhhdCBpc1xuICAgIC8vIGN1cnJlbnRseSByZW5kZXJpbmdzIChhIHBhdHRlcm4gdGhhdCBpcyBhY2NvbXBhbmllZCBieSBhIHdhcm5pbmcpLlxuXG4gICAgcmV0dXJuIHVuc2FmZV9tYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbGFuZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGVucXVldWVDb25jdXJyZW50Q2xhc3NVcGRhdGUoZmliZXIsIHNoYXJlZFF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiBlbnRhbmdsZVRyYW5zaXRpb25zKHJvb3QsIGZpYmVyLCBsYW5lKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh1cGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIC8vIE9ubHkgb2NjdXJzIGlmIHRoZSBmaWJlciBoYXMgYmVlbiB1bm1vdW50ZWQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNoYXJlZFF1ZXVlID0gdXBkYXRlUXVldWUuc2hhcmVkO1xuXG4gIGlmIChpc1RyYW5zaXRpb25MYW5lKGxhbmUpKSB7XG4gICAgdmFyIHF1ZXVlTGFuZXMgPSBzaGFyZWRRdWV1ZS5sYW5lczsgLy8gSWYgYW55IGVudGFuZ2xlZCBsYW5lcyBhcmUgbm8gbG9uZ2VyIHBlbmRpbmcgb24gdGhlIHJvb3QsIHRoZW4gdGhleSBtdXN0XG4gICAgLy8gaGF2ZSBmaW5pc2hlZC4gV2UgY2FuIHJlbW92ZSB0aGVtIGZyb20gdGhlIHNoYXJlZCBxdWV1ZSwgd2hpY2ggcmVwcmVzZW50c1xuICAgIC8vIGEgc3VwZXJzZXQgb2YgdGhlIGFjdHVhbGx5IHBlbmRpbmcgbGFuZXMuIEluIHNvbWUgY2FzZXMgd2UgbWF5IGVudGFuZ2xlXG4gICAgLy8gbW9yZSB0aGFuIHdlIG5lZWQgdG8sIGJ1dCB0aGF0J3MgT0suIEluIGZhY3QgaXQncyB3b3JzZSBpZiB3ZSAqZG9uJ3QqXG4gICAgLy8gZW50YW5nbGUgd2hlbiB3ZSBzaG91bGQuXG5cbiAgICBxdWV1ZUxhbmVzID0gaW50ZXJzZWN0TGFuZXMocXVldWVMYW5lcywgcm9vdC5wZW5kaW5nTGFuZXMpOyAvLyBFbnRhbmdsZSB0aGUgbmV3IHRyYW5zaXRpb24gbGFuZSB3aXRoIHRoZSBvdGhlciB0cmFuc2l0aW9uIGxhbmVzLlxuXG4gICAgdmFyIG5ld1F1ZXVlTGFuZXMgPSBtZXJnZUxhbmVzKHF1ZXVlTGFuZXMsIGxhbmUpO1xuICAgIHNoYXJlZFF1ZXVlLmxhbmVzID0gbmV3UXVldWVMYW5lczsgLy8gRXZlbiBpZiBxdWV1ZS5sYW5lcyBhbHJlYWR5IGluY2x1ZGUgbGFuZSwgd2UgZG9uJ3Qga25vdyBmb3IgY2VydGFpbiBpZlxuICAgIC8vIHRoZSBsYW5lIGZpbmlzaGVkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgZW50YW5nbGVkIGl0LiBTbyB3ZSBuZWVkIHRvXG4gICAgLy8gZW50YW5nbGUgaXQgYWdhaW4sIGp1c3QgdG8gYmUgc3VyZS5cblxuICAgIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIG5ld1F1ZXVlTGFuZXMpO1xuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGNhcHR1cmVkVXBkYXRlKSB7XG4gIC8vIENhcHR1cmVkIHVwZGF0ZXMgYXJlIHVwZGF0ZXMgdGhhdCBhcmUgdGhyb3duIGJ5IGEgY2hpbGQgZHVyaW5nIHRoZSByZW5kZXJcbiAgLy8gcGhhc2UuIFRoZXkgc2hvdWxkIGJlIGRpc2NhcmRlZCBpZiB0aGUgcmVuZGVyIGlzIGFib3J0ZWQuIFRoZXJlZm9yZSxcbiAgLy8gd2Ugc2hvdWxkIG9ubHkgcHV0IHRoZW0gb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUsIG5vdCB0aGUgY3VycmVudCBvbmUuXG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlOyAvLyBDaGVjayBpZiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyBhIGNsb25lLlxuXG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICBpZiAocXVldWUgPT09IGN1cnJlbnRRdWV1ZSkge1xuICAgICAgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaXMgdGhlIHNhbWUgYXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW5cbiAgICAgIC8vIHdlIGJhaWwgb3V0IG9uIGEgcGFyZW50IGZpYmVyIHRoYXQgdGhlbiBjYXB0dXJlcyBhbiBlcnJvciB0aHJvd24gYnlcbiAgICAgIC8vIGEgY2hpbGQuIFNpbmNlIHdlIHdhbnQgdG8gYXBwZW5kIHRoZSB1cGRhdGUgb25seSB0byB0aGUgd29yay1pblxuICAgICAgLy8gLXByb2dyZXNzIHF1ZXVlLCB3ZSBuZWVkIHRvIGNsb25lIHRoZSB1cGRhdGVzLiBXZSB1c3VhbGx5IGNsb25lIGR1cmluZ1xuICAgICAgLy8gcHJvY2Vzc1VwZGF0ZVF1ZXVlLCBidXQgdGhhdCBkaWRuJ3QgaGFwcGVuIGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlXG4gICAgICAvLyBza2lwcGVkIG92ZXIgdGhlIHBhcmVudCB3aGVuIHdlIGJhaWxlZCBvdXQuXG4gICAgICB2YXIgbmV3Rmlyc3QgPSBudWxsO1xuICAgICAgdmFyIG5ld0xhc3QgPSBudWxsO1xuICAgICAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgaWYgKGZpcnN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIHVwZGF0ZXMgYW5kIGNsb25lIHRoZW0uXG4gICAgICAgIHZhciB1cGRhdGUgPSBmaXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlLmV2ZW50VGltZSxcbiAgICAgICAgICAgIGxhbmU6IHVwZGF0ZS5sYW5lLFxuICAgICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNsb25lO1xuICAgICAgICAgICAgbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgICAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwpOyAvLyBBcHBlbmQgdGhlIGNhcHR1cmVkIHVwZGF0ZSB0aGUgZW5kIG9mIHRoZSBjbG9uZWQgbGlzdC5cblxuXG4gICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgICAgbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGVyZSBhcmUgbm8gYmFzZSB1cGRhdGVzLlxuICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgIH1cblxuICAgICAgcXVldWUgPSB7XG4gICAgICAgIGJhc2VTdGF0ZTogY3VycmVudFF1ZXVlLmJhc2VTdGF0ZSxcbiAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBuZXdGaXJzdCxcbiAgICAgICAgbGFzdEJhc2VVcGRhdGU6IG5ld0xhc3QsXG4gICAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgICAgZWZmZWN0czogY3VycmVudFF1ZXVlLmVmZmVjdHNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG5cbiAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7XG5cbiAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICB9XG5cbiAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCBwcmV2U3RhdGUsIG5leHRQcm9wcywgaW5zdGFuY2UpIHtcbiAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgY2FzZSBSZXBsYWNlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBwYXlsb2FkID0gdXBkYXRlLnBheWxvYWQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKHRydWUpO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICAgIH0gLy8gU3RhdGUgb2JqZWN0XG5cblxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2FwdHVyZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgIH1cbiAgICAvLyBJbnRlbnRpb25hbCBmYWxsdGhyb3VnaFxuXG4gICAgY2FzZSBVcGRhdGVTdGF0ZTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wYXlsb2FkID0gdXBkYXRlLnBheWxvYWQ7XG4gICAgICAgIHZhciBwYXJ0aWFsU3RhdGU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFVwZGF0ZXIgZnVuY3Rpb25cbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhpdERpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBhcnRpYWwgc3RhdGUgb2JqZWN0XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gTnVsbCBhbmQgdW5kZWZpbmVkIGFyZSB0cmVhdGVkIGFzIG5vLW9wcy5cbiAgICAgICAgICByZXR1cm4gcHJldlN0YXRlO1xuICAgICAgICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICAgICAgICByZXR1cm4gYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcmNlVXBkYXRlOlxuICAgICAge1xuICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gcHJldlN0YXRlO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIHByb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxuICB7XG4gICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gcXVldWUuc2hhcmVkO1xuICB9XG5cbiAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcbiAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7IC8vIENoZWNrIGlmIHRoZXJlIGFyZSBwZW5kaW5nIHVwZGF0ZXMuIElmIHNvLCB0cmFuc2ZlciB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsOyAvLyBUaGUgcGVuZGluZyBxdWV1ZSBpcyBjaXJjdWxhci4gRGlzY29ubmVjdCB0aGUgcG9pbnRlciBiZXR3ZWVuIGZpcnN0XG4gICAgLy8gYW5kIGxhc3Qgc28gdGhhdCBpdCdzIG5vbi1jaXJjdWxhci5cblxuICAgIHZhciBsYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICB2YXIgZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDsgLy8gQXBwZW5kIHBlbmRpbmcgdXBkYXRlcyB0byBiYXNlIHF1ZXVlXG5cbiAgICBpZiAobGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9XG5cbiAgICBsYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlOyAvLyBJZiB0aGVyZSdzIGEgY3VycmVudCBxdWV1ZSwgYW5kIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIGJhc2UgcXVldWUsIHRoZW5cbiAgICAvLyB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZSB1cGRhdGVzIHRvIHRoYXQgcXVldWUsIHRvby4gQmVjYXVzZSB0aGUgYmFzZVxuICAgIC8vIHF1ZXVlIGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHdpdGggbm8gY3ljbGVzLCB3ZSBjYW4gYXBwZW5kIHRvIGJvdGhcbiAgICAvLyBsaXN0cyBhbmQgdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RydWN0dXJhbCBzaGFyaW5nLlxuICAgIC8vIFRPRE86IFBhc3MgYGN1cnJlbnRgIGFzIGFyZ3VtZW50XG5cbiAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGFsd2F5cyBub24tbnVsbCBvbiBhIENsYXNzQ29tcG9uZW50IG9yIEhvc3RSb290XG4gICAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHZhciBjdXJyZW50TGFzdEJhc2VVcGRhdGUgPSBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgIT09IGxhc3RCYXNlVXBkYXRlKSB7XG4gICAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFRoZXNlIHZhbHVlcyBtYXkgY2hhbmdlIGFzIHdlIHByb2Nlc3MgdGhlIHF1ZXVlLlxuXG5cbiAgaWYgKGZpcnN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCBvZiB1cGRhdGVzIHRvIGNvbXB1dGUgdGhlIHJlc3VsdC5cbiAgICB2YXIgbmV3U3RhdGUgPSBxdWV1ZS5iYXNlU3RhdGU7IC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlIHJlbmRlckxhbmVzXG4gICAgLy8gZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cbiAgICB2YXIgbmV3TGFuZXMgPSBOb0xhbmVzO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdGaXJzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciBuZXdMYXN0QmFzZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmU7XG4gICAgICB2YXIgdXBkYXRlRXZlbnRUaW1lID0gdXBkYXRlLmV2ZW50VGltZTtcblxuICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpKSB7XG4gICAgICAgIC8vIFByaW9yaXR5IGlzIGluc3VmZmljaWVudC4gU2tpcCB0aGlzIHVwZGF0ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3RcbiAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgIC8vIHVwZGF0ZS9zdGF0ZS5cbiAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlRXZlbnRUaW1lLFxuICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlID0gY2xvbmU7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3TGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gY2xvbmU7XG4gICAgICAgIH0gLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgcHJpb3JpdHkgaW4gdGhlIHF1ZXVlLlxuXG5cbiAgICAgICAgbmV3TGFuZXMgPSBtZXJnZUxhbmVzKG5ld0xhbmVzLCB1cGRhdGVMYW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGVFdmVudFRpbWUsXG4gICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgc28gd2UgbmV2ZXIgd2FudCB1bmNvbW1pdFxuICAgICAgICAgICAgLy8gaXQuIFVzaW5nIE5vTGFuZSB3b3JrcyBiZWNhdXNlIDAgaXMgYSBzdWJzZXQgb2YgYWxsIGJpdG1hc2tzLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG5ldmVyIGJlIHNraXBwZWQgYnkgdGhlIGNoZWNrIGFib3ZlLlxuICAgICAgICAgICAgbGFuZTogTm9MYW5lLFxuICAgICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgbmV3TGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gX2Nsb25lO1xuICAgICAgICB9IC8vIFByb2Nlc3MgdGhpcyB1cGRhdGUuXG5cblxuICAgICAgICBuZXdTdGF0ZSA9IGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgbmV3U3RhdGUsIHByb3BzLCBpbnN0YW5jZSk7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHVwZGF0ZS5jYWxsYmFjaztcblxuICAgICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwgJiYgLy8gSWYgdGhlIHVwZGF0ZSB3YXMgYWxyZWFkeSBjb21taXR0ZWQsIHdlIHNob3VsZCBub3QgcXVldWUgaXRzXG4gICAgICAgIC8vIGNhbGxiYWNrIGFnYWluLlxuICAgICAgICB1cGRhdGUubGFuZSAhPT0gTm9MYW5lKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2FsbGJhY2s7XG4gICAgICAgICAgdmFyIGVmZmVjdHMgPSBxdWV1ZS5lZmZlY3RzO1xuXG4gICAgICAgICAgaWYgKGVmZmVjdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXVlLmVmZmVjdHMgPSBbdXBkYXRlXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWZmZWN0cy5wdXNoKHVwZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuXG4gICAgICBpZiAodXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuXG4gICAgICAgIGlmIChwZW5kaW5nUXVldWUgPT09IG51bGwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBmcm9tIGluc2lkZSBhIHJlZHVjZXIuIEFkZCB0aGUgbmV3XG4gICAgICAgICAgLy8gcGVuZGluZyB1cGRhdGVzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kIGtlZXAgcHJvY2Vzc2luZy5cbiAgICAgICAgICB2YXIgX2xhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlOyAvLyBJbnRlbnRpb25hbGx5IHVuc291bmQuIFBlbmRpbmcgdXBkYXRlcyBmb3JtIGEgY2lyY3VsYXIgbGlzdCwgYnV0IHdlXG4gICAgICAgICAgLy8gdW5yYXZlbCB0aGVtIHdoZW4gdHJhbnNmZXJyaW5nIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgICAgICAgICB2YXIgX2ZpcnN0UGVuZGluZ1VwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgICAgICAgIF9sYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDtcbiAgICAgICAgICB1cGRhdGUgPSBfZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKHRydWUpO1xuXG4gICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9XG5cbiAgICBxdWV1ZS5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gbmV3Rmlyc3RCYXNlVXBkYXRlO1xuICAgIHF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGU7IC8vIEludGVybGVhdmVkIHVwZGF0ZXMgYXJlIHN0b3JlZCBvbiBhIHNlcGFyYXRlIHF1ZXVlLiBXZSBhcmVuJ3QgZ29pbmcgdG9cbiAgICAvLyBwcm9jZXNzIHRoZW0gZHVyaW5nIHRoaXMgcmVuZGVyLCBidXQgd2UgZG8gbmVlZCB0byB0cmFjayB3aGljaCBsYW5lc1xuICAgIC8vIGFyZSByZW1haW5pbmcuXG5cbiAgICB2YXIgbGFzdEludGVybGVhdmVkID0gcXVldWUuc2hhcmVkLmludGVybGVhdmVkO1xuXG4gICAgaWYgKGxhc3RJbnRlcmxlYXZlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIGludGVybGVhdmVkID0gbGFzdEludGVybGVhdmVkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIG5ld0xhbmVzID0gbWVyZ2VMYW5lcyhuZXdMYW5lcywgaW50ZXJsZWF2ZWQubGFuZSk7XG4gICAgICAgIGludGVybGVhdmVkID0gaW50ZXJsZWF2ZWQubmV4dDtcbiAgICAgIH0gd2hpbGUgKGludGVybGVhdmVkICE9PSBsYXN0SW50ZXJsZWF2ZWQpO1xuICAgIH0gZWxzZSBpZiAoZmlyc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAvLyBgcXVldWUubGFuZXNgIGlzIHVzZWQgZm9yIGVudGFuZ2xpbmcgdHJhbnNpdGlvbnMuIFdlIGNhbiBzZXQgaXQgYmFjayB0b1xuICAgICAgLy8gemVybyBvbmNlIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICAgIHF1ZXVlLnNoYXJlZC5sYW5lcyA9IE5vTGFuZXM7XG4gICAgfSAvLyBTZXQgdGhlIHJlbWFpbmluZyBleHBpcmF0aW9uIHRpbWUgdG8gYmUgd2hhdGV2ZXIgaXMgcmVtYWluaW5nIGluIHRoZSBxdWV1ZS5cbiAgICAvLyBUaGlzIHNob3VsZCBiZSBmaW5lIGJlY2F1c2UgdGhlIG9ubHkgdHdvIG90aGVyIHRoaW5ncyB0aGF0IGNvbnRyaWJ1dGUgdG9cbiAgICAvLyBleHBpcmF0aW9uIHRpbWUgYXJlIHByb3BzIGFuZCBjb250ZXh0LiBXZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgdGhlXG4gICAgLy8gYmVnaW4gcGhhc2UgYnkgdGhlIHRpbWUgd2Ugc3RhcnQgcHJvY2Vzc2luZyB0aGUgcXVldWUsIHNvIHdlJ3ZlIGFscmVhZHlcbiAgICAvLyBkZWFsdCB3aXRoIHRoZSBwcm9wcy4gQ29udGV4dCBpbiBjb21wb25lbnRzIHRoYXQgc3BlY2lmeVxuICAgIC8vIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB0cmlja3k7IGJ1dCB3ZSdsbCBoYXZlIHRvIGFjY291bnQgZm9yXG4gICAgLy8gdGhhdCByZWdhcmRsZXNzLlxuXG5cbiAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKG5ld0xhbmVzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG5ld0xhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDYWxsYmFjayhjYWxsYmFjaywgY29udGV4dCkge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBhcyBjYWxsYmFjay4gRXhwZWN0ZWQgYSBmdW5jdGlvbi4gSW5zdGVhZCAnICsgKFwicmVjZWl2ZWQ6IFwiICsgY2FsbGJhY2spKTtcbiAgfVxuXG4gIGNhbGxiYWNrLmNhbGwoY29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCkge1xuICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xufVxuZnVuY3Rpb24gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHtcbiAgcmV0dXJuIGhhc0ZvcmNlVXBkYXRlO1xufVxuZnVuY3Rpb24gY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFF1ZXVlLCBpbnN0YW5jZSkge1xuICAvLyBDb21taXQgdGhlIGVmZmVjdHNcbiAgdmFyIGVmZmVjdHMgPSBmaW5pc2hlZFF1ZXVlLmVmZmVjdHM7XG4gIGZpbmlzaGVkUXVldWUuZWZmZWN0cyA9IG51bGw7XG5cbiAgaWYgKGVmZmVjdHMgIT09IG51bGwpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVmZmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlZmZlY3QgPSBlZmZlY3RzW2ldO1xuICAgICAgdmFyIGNhbGxiYWNrID0gZWZmZWN0LmNhbGxiYWNrO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgZWZmZWN0LmNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBmYWtlSW50ZXJuYWxJbnN0YW5jZSA9IHt9OyAvLyBSZWFjdC5Db21wb25lbnQgdXNlcyBhIHNoYXJlZCBmcm96ZW4gb2JqZWN0IGJ5IGRlZmF1bHQuXG4vLyBXZSdsbCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBpbml0aWFsaXplIGxlZ2FjeSByZWZzLlxuXG52YXIgZW1wdHlSZWZzT2JqZWN0ID0gbmV3IFJlYWN0LkNvbXBvbmVudCgpLnJlZnM7XG52YXIgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGU7XG52YXIgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGU7XG52YXIgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PbkludmFsaWRDYWxsYmFjaztcbnZhciBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcztcbnZhciBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGU7XG5cbntcbiAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZSA9IG5ldyBTZXQoKTtcbiAgdmFyIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjayA9IG5ldyBTZXQoKTtcblxuICB3YXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwgfHwgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IGNhbGxlck5hbWUgKyAnXycgKyBjYWxsYmFjaztcblxuICAgIGlmICghZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmhhcyhrZXkpKSB7XG4gICAgICBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suYWRkKGtleSk7XG5cbiAgICAgIGVycm9yKCclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfTtcblxuICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUgPSBmdW5jdGlvbiAodHlwZSwgcGFydGlhbFN0YXRlKSB7XG4gICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpOiBBIHZhbGlkIHN0YXRlIG9iamVjdCAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4gJyArICdZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9OyAvLyBUaGlzIGlzIHNvIGdyb3NzIGJ1dCBpdCdzIGF0IGxlYXN0IG5vbi1jcml0aWNhbCBhbmQgY2FuIGJlIHJlbW92ZWQgaWZcbiAgLy8gaXQgY2F1c2VzIHByb2JsZW1zLiBUaGlzIGlzIG1lYW50IHRvIGdpdmUgYSBuaWNlciBlcnJvciBtZXNzYWdlIGZvclxuICAvLyBSZWFjdERPTTE1LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHJlYWN0RE9NMTZDb21wb25lbnQsXG4gIC8vIC4uLikpIHdoaWNoIG90aGVyd2lzZSB0aHJvd3MgYSBcIl9wcm9jZXNzQ2hpbGRDb250ZXh0IGlzIG5vdCBhIGZ1bmN0aW9uXCJcbiAgLy8gZXhjZXB0aW9uLlxuXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZha2VJbnRlcm5hbEluc3RhbmNlLCAnX3Byb2Nlc3NDaGlsZENvbnRleHQnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignX3Byb2Nlc3NDaGlsZENvbnRleHQgaXMgbm90IGF2YWlsYWJsZSBpbiBSZWFjdCAxNisuIFRoaXMgbGlrZWx5ICcgKyAnbWVhbnMgeW91IGhhdmUgbXVsdGlwbGUgY29waWVzIG9mIFJlYWN0IGFuZCBhcmUgYXR0ZW1wdGluZyB0byBuZXN0ICcgKyAnYSBSZWFjdCAxNSB0cmVlIGluc2lkZSBhIFJlYWN0IDE2IHRyZWUgdXNpbmcgJyArIFwidW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIsIHdoaWNoIGlzbid0IHN1cHBvcnRlZC4gVHJ5IFwiICsgJ3RvIG1ha2Ugc3VyZSB5b3UgaGF2ZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0IChhbmQgaWRlYWxseSwgc3dpdGNoICcgKyAndG8gUmVhY3RET00uY3JlYXRlUG9ydGFsKS4nKTtcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZnJlZXplKGZha2VJbnRlcm5hbEluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV4dFByb3BzKSB7XG4gIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgcGFydGlhbFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcblxuICB7XG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHModHJ1ZSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEludm9rZSB0aGUgZnVuY3Rpb24gYW4gZXh0cmEgdGltZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG4gICAgICAgIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlKGN0b3IsIHBhcnRpYWxTdGF0ZSk7XG4gIH0gLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cblxuXG4gIHZhciBtZW1vaXplZFN0YXRlID0gcGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkID8gcHJldlN0YXRlIDogYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBtZW1vaXplZFN0YXRlOyAvLyBPbmNlIHRoZSB1cGRhdGUgcXVldWUgaXMgZW1wdHksIHBlcnNpc3QgdGhlIGRlcml2ZWQgc3RhdGUgb250byB0aGVcbiAgLy8gYmFzZSBzdGF0ZS5cblxuICBpZiAod29ya0luUHJvZ3Jlc3MubGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBRdWV1ZSBpcyBhbHdheXMgbm9uLW51bGwgZm9yIGNsYXNzZXNcbiAgICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgICB1cGRhdGVRdWV1ZS5iYXNlU3RhdGUgPSBtZW1vaXplZFN0YXRlO1xuICB9XG59XG5cbnZhciBjbGFzc0NvbXBvbmVudFVwZGF0ZXIgPSB7XG4gIGlzTW91bnRlZDogaXNNb3VudGVkLFxuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICB2YXIgcm9vdCA9IGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSwgbGFuZSk7XG5cbiAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhyb290LCBmaWJlciwgbGFuZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGZpYmVyLCBsYW5lKTtcbiAgICB9XG4gIH0sXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gUmVwbGFjZVN0YXRlO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3JlcGxhY2VTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICB2YXIgcm9vdCA9IGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSwgbGFuZSk7XG5cbiAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhyb290LCBmaWJlciwgbGFuZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGZpYmVyLCBsYW5lKTtcbiAgICB9XG4gIH0sXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKGluc3QsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIHZhciByb290ID0gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlLCBsYW5lKTtcblxuICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKHJvb3QsIGZpYmVyLCBsYW5lKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBtYXJrRm9yY2VVcGRhdGVTY2hlZHVsZWQoZmliZXIsIGxhbmUpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCkge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuXG4gICAge1xuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEludm9rZSB0aGUgZnVuY3Rpb24gYW4gZXh0cmEgdGltZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG4gICAgICAgICAgc2hvdWxkVXBkYXRlID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVXBkYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3IoJyVzLnNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBSZXR1cm5lZCB1bmRlZmluZWQgaW5zdGVhZCBvZiBhICcgKyAnYm9vbGVhbiB2YWx1ZS4gTWFrZSBzdXJlIHRvIHJldHVybiB0cnVlIG9yIGZhbHNlLicsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCkge1xuICAgIHJldHVybiAhc2hhbGxvd0VxdWFsKG9sZFByb3BzLCBuZXdQcm9wcykgfHwgIXNoYWxsb3dFcXVhbChvbGRTdGF0ZSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQ2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIHtcbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCAnQ29tcG9uZW50JztcbiAgICB2YXIgcmVuZGVyUHJlc2VudCA9IGluc3RhbmNlLnJlbmRlcjtcblxuICAgIGlmICghcmVuZGVyUHJlc2VudCkge1xuICAgICAgaWYgKGN0b3IucHJvdG90eXBlICYmIHR5cGVvZiBjdG9yLnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IGRpZCB5b3UgYWNjaWRlbnRhbGx5IHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgY29uc3RydWN0b3I/JywgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogeW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBkZWZpbmUgYHJlbmRlcmAuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldEluaXRpYWxTdGF0ZSAmJiAhaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkICYmICFpbnN0YW5jZS5zdGF0ZSkge1xuICAgICAgZXJyb3IoJ2dldEluaXRpYWxTdGF0ZSB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdEaWQgeW91IG1lYW4gdG8gZGVmaW5lIGEgc3RhdGUgcHJvcGVydHkgaW5zdGVhZD8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzICYmICFpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnVXNlIGEgc3RhdGljIHByb3BlcnR5IHRvIGRlZmluZSBkZWZhdWx0UHJvcHMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UucHJvcFR5cGVzKSB7XG4gICAgICBlcnJvcigncHJvcFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgcHJvcFR5cGVzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlKSB7XG4gICAgICBlcnJvcignY29udGV4dFR5cGUgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZSBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3Rvci5jb250ZXh0VHlwZSAmJiBjdG9yLmNvbnRleHRUeXBlcyAmJiAhZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmFkZChjdG9yKTtcblxuICAgICAgICBlcnJvcignJXMgZGVjbGFyZXMgYm90aCBjb250ZXh0VHlwZXMgYW5kIGNvbnRleHRUeXBlIHN0YXRpYyBwcm9wZXJ0aWVzLiAnICsgJ1RoZSBsZWdhY3kgY29udGV4dFR5cGVzIHByb3BlcnR5IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpPyAnICsgJ1RoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyAnICsgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCAmJiB0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkuICcgKyAnc2hvdWxkQ29tcG9uZW50VXBkYXRlIHNob3VsZCBub3QgYmUgdXNlZCB3aGVuIGV4dGVuZGluZyBSZWFjdC5QdXJlQ29tcG9uZW50LiAnICsgJ1BsZWFzZSBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB1c2VkLicsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCAnQSBwdXJlIGNvbXBvbmVudCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnREaWRVbm1vdW50KCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxVbm1vdW50KCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzKCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnSWYgeW91IG1lYW50IHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgcHJvcHMsICcgKyAndXNlIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKS4gSWYgeW91IG1lYW50IHRvIGZldGNoIGRhdGEgb3IgJyArICdydW4gc2lkZS1lZmZlY3RzIG9yIG11dGF0aW9ucyBhZnRlciBSZWFjdCBoYXMgdXBkYXRlZCB0aGUgVUksIHVzZSBjb21wb25lbnREaWRVcGRhdGUoKS4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIGhhc011dGF0ZWRQcm9wcyA9IGluc3RhbmNlLnByb3BzICE9PSBuZXdQcm9wcztcblxuICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gdW5kZWZpbmVkICYmIGhhc011dGF0ZWRQcm9wcykge1xuICAgICAgZXJyb3IoJyVzKC4uLik6IFdoZW4gY2FsbGluZyBzdXBlcigpIGluIGAlc2AsIG1ha2Ugc3VyZSB0byBwYXNzICcgKyBcInVwIHRoZSBzYW1lIHByb3BzIHRoYXQgeW91ciBjb21wb25lbnQncyBjb25zdHJ1Y3RvciB3YXMgcGFzc2VkLlwiLCBuYW1lLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZGVmYXVsdFByb3BzKSB7XG4gICAgICBlcnJvcignU2V0dGluZyBkZWZhdWx0UHJvcHMgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSBpZ25vcmVkLicgKyAnIEluc3RlYWQsIGRlZmluZSBkZWZhdWx0UHJvcHMgYXMgYSBzdGF0aWMgcHJvcGVydHkgb24gJXMuJywgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICFkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuaGFzKGN0b3IpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuYWRkKGN0b3IpO1xuXG4gICAgICBlcnJvcignJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgc2hvdWxkIGJlIHVzZWQgd2l0aCBjb21wb25lbnREaWRVcGRhdGUoKS4gJyArICdUaGlzIGNvbXBvbmVudCBkZWZpbmVzIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgb25seS4nLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBfc3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgIGlmIChfc3RhdGUgJiYgKHR5cGVvZiBfc3RhdGUgIT09ICdvYmplY3QnIHx8IGlzQXJyYXkoX3N0YXRlKSkpIHtcbiAgICAgIGVycm9yKCclcy5zdGF0ZTogbXVzdCBiZSBzZXQgdG8gYW4gb2JqZWN0IG9yIG51bGwnLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3Rvci5jaGlsZENvbnRleHRUeXBlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9yKCclcy5nZXRDaGlsZENvbnRleHQoKTogY2hpbGRDb250ZXh0VHlwZXMgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvICcgKyAndXNlIGdldENoaWxkQ29udGV4dCgpLicsIG5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlOyAvLyBUaGUgaW5zdGFuY2UgbmVlZHMgYWNjZXNzIHRvIHRoZSBmaWJlciBzbyB0aGF0IGl0IGNhbiBzY2hlZHVsZSB1cGRhdGVzXG5cbiAgc2V0KGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAge1xuICAgIGluc3RhbmNlLl9yZWFjdEludGVybmFsSW5zdGFuY2UgPSBmYWtlSW50ZXJuYWxJbnN0YW5jZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBwcm9wcykge1xuICB2YXIgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBmYWxzZTtcbiAgdmFyIHVubWFza2VkQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAge1xuICAgIGlmICgnY29udGV4dFR5cGUnIGluIGN0b3IpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gLy8gQWxsb3cgbnVsbCBmb3IgY29uZGl0aW9uYWwgZGVjbGFyYXRpb25cbiAgICAgIGNvbnRleHRUeXBlID09PSBudWxsIHx8IGNvbnRleHRUeXBlICE9PSB1bmRlZmluZWQgJiYgY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSAmJiBjb250ZXh0VHlwZS5fY29udGV4dCA9PT0gdW5kZWZpbmVkOyAvLyBOb3QgYSA8Q29udGV4dC5Db25zdW1lcj5cblxuICAgICAgaWYgKCFpc1ZhbGlkICYmICFkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5hZGQoY3Rvcik7XG4gICAgICAgIHZhciBhZGRlbmR1bSA9ICcnO1xuXG4gICAgICAgIGlmIChjb250ZXh0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byB1bmRlZmluZWQuICcgKyAnVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgdHlwbyBvciBieSBtaXhpbmcgdXAgbmFtZWQgYW5kIGRlZmF1bHQgaW1wb3J0cy4gJyArICdUaGlzIGNhbiBhbHNvIGhhcHBlbiBkdWUgdG8gYSBjaXJjdWxhciBkZXBlbmRlbmN5LCBzbyAnICsgJ3RyeSBtb3ZpbmcgdGhlIGNyZWF0ZUNvbnRleHQoKSBjYWxsIHRvIGEgc2VwYXJhdGUgZmlsZS4nO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGEgJyArIHR5cGVvZiBjb250ZXh0VHlwZSArICcuJztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSkge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LlByb3ZpZGVyIGluc3RlYWQ/JztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuQ29uc3VtZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNvbnRleHRUeXBlKS5qb2luKCcsICcpICsgJ30uJztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCclcyBkZWZpbmVzIGFuIGludmFsaWQgY29udGV4dFR5cGUuICcgKyAnY29udGV4dFR5cGUgc2hvdWxkIHBvaW50IHRvIHRoZSBDb250ZXh0IG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVDb250ZXh0KCkuJXMnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgJ0NvbXBvbmVudCcsIGFkZGVuZHVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gY3Rvci5jb250ZXh0VHlwZXM7XG4gICAgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBjb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gICAgY29udGV4dCA9IGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID8gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KSA6IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTsgLy8gSW5zdGFudGlhdGUgdHdpY2UgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuXG4gIHtcbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaW5zdGFuY2UgPSBuZXcgY3Rvcihwcm9wcywgY29udGV4dCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlICE9PSBudWxsICYmIGluc3RhbmNlLnN0YXRlICE9PSB1bmRlZmluZWQgPyBpbnN0YW5jZS5zdGF0ZSA6IG51bGw7XG4gIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nICYmIHN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJ2Alc2AgdXNlcyBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBidXQgaXRzIGluaXRpYWwgc3RhdGUgaXMgJyArICclcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSAnICsgJ2Fzc2lnbmluZyBhbiBvYmplY3QgdG8gYHRoaXMuc3RhdGVgIGluIHRoZSBjb25zdHJ1Y3RvciBvZiBgJXNgLiAnICsgJ1RoaXMgZW5zdXJlcyB0aGF0IGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGFyZ3VtZW50cyBoYXZlIGEgY29uc2lzdGVudCBzaGFwZS4nLCBjb21wb25lbnROYW1lLCBpbnN0YW5jZS5zdGF0ZSA9PT0gbnVsbCA/ICdudWxsJyA6ICd1bmRlZmluZWQnLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9IC8vIElmIG5ldyBjb21wb25lbnQgQVBJcyBhcmUgZGVmaW5lZCwgXCJ1bnNhZmVcIiBsaWZlY3ljbGVzIHdvbid0IGJlIGNhbGxlZC5cbiAgICAvLyBXYXJuIGFib3V0IHRoZXNlIGxpZmVjeWNsZXMgaWYgdGhleSBhcmUgcHJlc2VudC5cbiAgICAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgbWV0aG9kcyB0aG91Z2guXG5cblxuICAgIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgZm91bmRXaWxsTW91bnROYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gbnVsbDtcbiAgICAgIHZhciBmb3VuZFdpbGxVcGRhdGVOYW1lID0gbnVsbDtcblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdjb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsVXBkYXRlTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgICAgdmFyIG5ld0FwaU5hbWUgPSB0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgPyAnZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCknIDogJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlKCknO1xuXG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5oYXMoX2NvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5hZGQoX2NvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgICAgZXJyb3IoJ1Vuc2FmZSBsZWdhY3kgbGlmZWN5Y2xlcyB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgbmV3IGNvbXBvbmVudCBBUElzLlxcblxcbicgKyAnJXMgdXNlcyAlcyBidXQgYWxzbyBjb250YWlucyB0aGUgZm9sbG93aW5nIGxlZ2FjeSBsaWZlY3ljbGVzOiVzJXMlc1xcblxcbicgKyAnVGhlIGFib3ZlIGxpZmVjeWNsZXMgc2hvdWxkIGJlIHJlbW92ZWQuIExlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6XFxuJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzJywgX2NvbXBvbmVudE5hbWUsIG5ld0FwaU5hbWUsIGZvdW5kV2lsbE1vdW50TmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbE1vdW50TmFtZSA6ICcnLCBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA6ICcnLCBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsVXBkYXRlTmFtZSA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDYWNoZSB1bm1hc2tlZCBjb250ZXh0IHNvIHdlIGNhbiBhdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuXG4gIC8vIFJlYWN0RmliZXJDb250ZXh0IHVzdWFsbHkgdXBkYXRlcyB0aGlzIGNhY2hlIGJ1dCBjYW4ndCBmb3IgbmV3bHktY3JlYXRlZCBpbnN0YW5jZXMuXG5cblxuICBpZiAoaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIpIHtcbiAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIHZhciBvbGRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBpZiAob2xkU3RhdGUgIT09IGluc3RhbmNlLnN0YXRlKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzLmNvbXBvbmVudFdpbGxNb3VudCgpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy5zdGF0ZSBpcyAnICsgXCJkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UsIG5ld1Byb3BzLCBuZXh0Q29udGV4dCkge1xuICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gb2xkU3RhdGUpIHtcbiAgICB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gJyArIFwidGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpO1xuICB9XG59IC8vIEludm9rZXMgdGhlIG1vdW50IGxpZmUtY3ljbGVzIG9uIGEgcHJldmlvdXNseSBuZXZlciByZW5kZXJlZCBpbnN0YW5jZS5cblxuXG5mdW5jdGlvbiBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcyk7XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgaW5zdGFuY2UucmVmcyA9IGVtcHR5UmVmc09iamVjdDtcbiAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgaW5zdGFuY2UuY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB7XG4gICAgaWYgKGluc3RhbmNlLnN0YXRlID09PSBuZXdQcm9wcykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXM6IEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBhc3NpZ24gcHJvcHMgZGlyZWN0bHkgdG8gc3RhdGUgJyArIFwiYmVjYXVzZSB1cGRhdGVzIHRvIHByb3BzIHdvbid0IGJlIHJlZmxlY3RlZCBpbiBzdGF0ZS4gXCIgKyAnSW4gbW9zdCBjYXNlcywgaXQgaXMgYmV0dGVyIHRvIHVzZSBwcm9wcyBkaXJlY3RseS4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3Mod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH0gLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cblxuICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPT0gJ2Z1bmN0aW9uJyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBjYWxsQ29tcG9uZW50V2lsbE1vdW50KHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7IC8vIElmIHdlIGhhZCBhZGRpdGlvbmFsIHN0YXRlIHVwZGF0ZXMgZHVyaW5nIHRoaXMgbGlmZS1jeWNsZSwgbGV0J3NcbiAgICAvLyBwcm9jZXNzIHRoZW0gbm93LlxuXG4gICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGZpYmVyRmxhZ3MgPSBVcGRhdGU7XG5cbiAgICB7XG4gICAgICBmaWJlckZsYWdzIHw9IExheW91dFN0YXRpYztcbiAgICB9XG5cbiAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgIGZpYmVyRmxhZ3MgfD0gTW91bnRMYXlvdXREZXY7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzICYmIG9sZFN0YXRlID09PSBuZXdTdGF0ZSAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSAmJiAhY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpKSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgZmliZXJGbGFncyA9IFVwZGF0ZTtcblxuICAgICAge1xuICAgICAgICBmaWJlckZsYWdzIHw9IExheW91dFN0YXRpYztcbiAgICAgIH1cblxuICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIGZpYmVyRmxhZ3MgfD0gTW91bnRMYXlvdXREZXY7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fCBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cbiAgICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgX2ZpYmVyRmxhZ3MgPSBVcGRhdGU7XG5cbiAgICAgIHtcbiAgICAgICAgX2ZpYmVyRmxhZ3MgfD0gTGF5b3V0U3RhdGljO1xuICAgICAgfVxuXG4gICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgX2ZpYmVyRmxhZ3MgfD0gTW91bnRMYXlvdXREZXY7XG4gICAgICB9XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IF9maWJlckZsYWdzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfZmliZXJGbGFnczIgPSBVcGRhdGU7XG5cbiAgICAgIHtcbiAgICAgICAgX2ZpYmVyRmxhZ3MyIHw9IExheW91dFN0YXRpYztcbiAgICAgIH1cblxuICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIF9maWJlckZsYWdzMiB8PSBNb3VudExheW91dERldjtcbiAgICAgIH1cblxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gX2ZpYmVyRmxhZ3MyO1xuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn0gLy8gSW52b2tlcyB0aGUgdXBkYXRlIGxpZmUtY3ljbGVzIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IHNob3VsZG4ndCByZXJlbmRlci5cblxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVucmVzb2x2ZWRPbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID8gdW5yZXNvbHZlZE9sZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh3b3JrSW5Qcm9ncmVzcy50eXBlLCB1bnJlc29sdmVkT2xkUHJvcHMpO1xuICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICB2YXIgdW5yZXNvbHZlZE5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIG5leHRDb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRVbm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nOyAvLyBOb3RlOiBEdXJpbmcgdGhlc2UgbGlmZS1jeWNsZXMsIGluc3RhbmNlLnByb3BzL2luc3RhbmNlLnN0YXRlIGFyZSB3aGF0XG4gIC8vIGV2ZXIgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHRvIHJlbmRlciAtIG5vdCB0aGUgXCJjdXJyZW50XCIuIEhvd2V2ZXIsXG4gIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG4gIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IHVucmVzb2x2ZWROZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAodW5yZXNvbHZlZE9sZFByb3BzID09PSB1bnJlc29sdmVkTmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgJiYgIShlbmFibGVMYXp5Q29udGV4dFByb3BhZ2F0aW9uICAgKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBjdG9yLCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIG5ld1Byb3BzKTtcbiAgICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIH1cblxuICB2YXIgc2hvdWxkVXBkYXRlID0gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHx8IGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBvbGRQcm9wcywgbmV3UHJvcHMsIG9sZFN0YXRlLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpIHx8IC8vIFRPRE86IEluIHNvbWUgY2FzZXMsIHdlJ2xsIGVuZCB1cCBjaGVja2luZyBpZiBjb250ZXh0IGhhcyBjaGFuZ2VkIHR3aWNlLFxuICAvLyBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAgaGFzIGJlZW4gY2FsbGVkLiBOb3QgaWRlYWwsXG4gIC8vIGJ1dCBJJ20gbG9hdGggdG8gcmVmYWN0b3IgdGhpcyBmdW5jdGlvbi4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIG1lbW9pemVkXG4gIC8vIGNvbXBvbmVudHMgc28gaXQncyBub3QgdGhhdCBjb21tb24uXG4gIGVuYWJsZUxhenlDb250ZXh0UHJvcGFnYXRpb24gICA7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICB9XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgcHJvcHMvc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG52YXIgZGlkV2FybkFib3V0TWFwcztcbnZhciBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nO1xudmFyIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZztcblxudmFyIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkLCByZXR1cm5GaWJlcikge307XG5cbntcbiAgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbiAgLyoqXG4gICAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAgICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gICAqIHVwZGF0ZXMuXG4gICAqL1xuXG4gIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuICBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmcgPSB7fTtcblxuICB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHtcbiAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY2hpbGQuX3N0b3JlIHx8IGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgfHwgY2hpbGQua2V5ICE9IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNoaWxkLl9zdG9yZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVhY3QgQ29tcG9uZW50IGluIHdhcm5Gb3JNaXNzaW5nS2V5IHNob3VsZCBoYXZlIGEgX3N0b3JlLiAnICsgJ1RoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuXG4gICAgY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlICcgKyAnXCJrZXlcIiBwcm9wLiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgJyArICdtb3JlIGluZm9ybWF0aW9uLicpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIG1peGVkUmVmID0gZWxlbWVudC5yZWY7XG5cbiAgaWYgKG1peGVkUmVmICE9PSBudWxsICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdvYmplY3QnKSB7XG4gICAge1xuICAgICAgLy8gVE9ETzogQ2xlYW4gdGhpcyB1cCBvbmNlIHdlIHR1cm4gb24gdGhlIHN0cmluZyByZWYgd2FybmluZyBmb3JcbiAgICAgIC8vIGV2ZXJ5b25lLCBiZWNhdXNlIHRoZSBzdHJpY3QgbW9kZSBjYXNlIHdpbGwgbm8gbG9uZ2VyIGJlIHJlbGV2YW50XG4gICAgICBpZiAoKHJldHVybkZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlIHx8IHdhcm5BYm91dFN0cmluZ1JlZnMpICYmIC8vIFdlIHdhcm4gaW4gUmVhY3RFbGVtZW50LmpzIGlmIG93bmVyIGFuZCBzZWxmIGFyZSBlcXVhbCBmb3Igc3RyaW5nIHJlZnNcbiAgICAgIC8vIGJlY2F1c2UgdGhlc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uXG4gICAgICAvLyB1c2luZyBhIGNvZGVtb2QuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgaGF2ZSB0byB3YXJuIGFib3V0IHN0cmluZyByZWZzIGFnYWluLlxuICAgICAgIShlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9zZWxmICYmIGVsZW1lbnQuX293bmVyLnN0YXRlTm9kZSAhPT0gZWxlbWVudC5fc2VsZikpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlcnJvcignQSBzdHJpbmcgcmVmLCBcIiVzXCIsIGhhcyBiZWVuIGZvdW5kIHdpdGhpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnU3RyaW5nIHJlZnMgYXJlIGEgc291cmNlIG9mIHBvdGVudGlhbCBidWdzIGFuZCBzaG91bGQgYmUgYXZvaWRlZC4gJyArICdXZSByZWNvbW1lbmQgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBtaXhlZFJlZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5fb3duZXIpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIGluc3Q7XG5cbiAgICAgIGlmIChvd25lcikge1xuICAgICAgICB2YXIgb3duZXJGaWJlciA9IG93bmVyO1xuXG4gICAgICAgIGlmIChvd25lckZpYmVyLnRhZyAhPT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGhhdmUgc3RyaW5nIHJlZnMuICcgKyAnV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnN0ID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5zdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG93bmVyIGZvciBzdHJpbmcgcmVmIFwiICsgbWl4ZWRSZWYgKyBcIi4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgXCIgKyAnYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgIH0gLy8gQXNzaWduaW5nIHRoaXMgdG8gYSBjb25zdCBzbyBGbG93IGtub3dzIGl0IHdvbid0IGNoYW5nZSBpbiB0aGUgY2xvc3VyZVxuXG5cbiAgICAgIHZhciByZXNvbHZlZEluc3QgPSBpbnN0O1xuXG4gICAgICB7XG4gICAgICAgIGNoZWNrUHJvcFN0cmluZ0NvZXJjaW9uKG1peGVkUmVmLCAncmVmJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHJpbmdSZWYgPSAnJyArIG1peGVkUmVmOyAvLyBDaGVjayBpZiBwcmV2aW91cyBzdHJpbmcgcmVmIG1hdGNoZXMgbmV3IHN0cmluZyByZWZcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IG51bGwgJiYgdHlwZW9mIGN1cnJlbnQucmVmID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnQucmVmLl9zdHJpbmdSZWYgPT09IHN0cmluZ1JlZikge1xuICAgICAgICByZXR1cm4gY3VycmVudC5yZWY7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWYgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlZnMgPSByZXNvbHZlZEluc3QucmVmcztcblxuICAgICAgICBpZiAocmVmcyA9PT0gZW1wdHlSZWZzT2JqZWN0KSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGxhenkgcG9vbGVkIGZyb3plbiBvYmplY3QsIHNvIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZS5cbiAgICAgICAgICByZWZzID0gcmVzb2x2ZWRJbnN0LnJlZnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZSByZWZzW3N0cmluZ1JlZl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmc1tzdHJpbmdSZWZdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJlZi5fc3RyaW5nUmVmID0gc3RyaW5nUmVmO1xuICAgICAgcmV0dXJuIHJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBtaXhlZFJlZiAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCByZWYgdG8gYmUgYSBmdW5jdGlvbiwgYSBzdHJpbmcsIGFuIG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVSZWYoKSwgb3IgbnVsbC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFlbGVtZW50Ll9vd25lcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IHJlZiB3YXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChcIiArIG1peGVkUmVmICsgXCIpIGJ1dCBubyBvd25lciB3YXMgc2V0LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mXCIgKyAnIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4nICsgJzEuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgZnVuY3Rpb24gY29tcG9uZW50XFxuJyArIFwiMi4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50J3MgcmVuZGVyIG1ldGhvZFxcblwiICsgJzMuIFlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWRcXG4nICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVmcy1tdXN0LWhhdmUtb3duZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1peGVkUmVmO1xufVxuXG5mdW5jdGlvbiB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKSB7XG4gIHZhciBjaGlsZFN0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdDaGlsZCk7XG4gIHRocm93IG5ldyBFcnJvcihcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgKyAoY2hpbGRTdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhuZXdDaGlsZCkuam9pbignLCAnKSArICd9JyA6IGNoaWxkU3RyaW5nKSArIFwiKS4gXCIgKyAnSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSAnICsgJ2luc3RlYWQuJyk7XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcikge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0Z1bmN0aW9ucyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuIFRoaXMgbWF5IGhhcHBlbiBpZiAnICsgJ3lvdSByZXR1cm4gYSBDb21wb25lbnQgaW5zdGVhZCBvZiA8Q29tcG9uZW50IC8+IGZyb20gcmVuZGVyLiAnICsgJ09yIG1heWJlIHlvdSBtZWFudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmV0dXJuIGl0LicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVMYXp5KGxhenlUeXBlKSB7XG4gIHZhciBwYXlsb2FkID0gbGF6eVR5cGUuX3BheWxvYWQ7XG4gIHZhciBpbml0ID0gbGF6eVR5cGUuX2luaXQ7XG4gIHJldHVybiBpbml0KHBheWxvYWQpO1xufSAvLyBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gZXhpc3RzIGJlY2F1c2UgSSBleHBlY3QgdG8gY2xvbmUgdGhlIGNvZGUgaW4gZWFjaCBwYXRoXG4vLyB0byBiZSBhYmxlIHRvIG9wdGltaXplIGVhY2ggcGF0aCBpbmRpdmlkdWFsbHkgYnkgYnJhbmNoaW5nIGVhcmx5LiBUaGlzIG5lZWRzXG4vLyBhIGNvbXBpbGVyIG9yIHdlIGNhbiBkbyBpdCBtYW51YWxseS4gSGVscGVycyB0aGF0IGRvbid0IG5lZWQgdGhpcyBicmFuY2hpbmdcbi8vIGxpdmUgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLlxuXG5cbmZ1bmN0aW9uIENoaWxkUmVjb25jaWxlcihzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBkZWxldGlvbnMgPSByZXR1cm5GaWJlci5kZWxldGlvbnM7XG5cbiAgICBpZiAoZGVsZXRpb25zID09PSBudWxsKSB7XG4gICAgICByZXR1cm5GaWJlci5kZWxldGlvbnMgPSBbY2hpbGRUb0RlbGV0ZV07XG4gICAgICByZXR1cm5GaWJlci5mbGFncyB8PSBDaGlsZERlbGV0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGlvbnMucHVzaChjaGlsZFRvRGVsZXRlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIFRPRE86IEZvciB0aGUgc2hvdWxkQ2xvbmUgY2FzZSwgdGhpcyBjb3VsZCBiZSBtaWNyby1vcHRpbWl6ZWQgYSBiaXQgYnlcbiAgICAvLyBhc3N1bWluZyB0aGF0IGFmdGVyIHRoZSBmaXJzdCBjaGlsZCB3ZSd2ZSBhbHJlYWR5IGFkZGVkIGV2ZXJ5dGhpbmcuXG5cblxuICAgIHZhciBjaGlsZFRvRGVsZXRlID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGRUb0RlbGV0ZSAhPT0gbnVsbCkge1xuICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpO1xuICAgICAgY2hpbGRUb0RlbGV0ZSA9IGNoaWxkVG9EZWxldGUuc2libGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIC8vIEFkZCB0aGUgcmVtYWluaW5nIGNoaWxkcmVuIHRvIGEgdGVtcG9yYXJ5IG1hcCBzbyB0aGF0IHdlIGNhbiBmaW5kIHRoZW0gYnlcbiAgICAvLyBrZXlzIHF1aWNrbHkuIEltcGxpY2l0IChudWxsKSBrZXlzIGdldCBhZGRlZCB0byB0aGlzIHNldCB3aXRoIHRoZWlyIGluZGV4XG4gICAgLy8gaW5zdGVhZC5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG5ldyBNYXAoKTtcbiAgICB2YXIgZXhpc3RpbmdDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGV4aXN0aW5nQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGlmIChleGlzdGluZ0NoaWxkLmtleSAhPT0gbnVsbCkge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmtleSwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmluZGV4LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH1cblxuICAgICAgZXhpc3RpbmdDaGlsZCA9IGV4aXN0aW5nQ2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gZXhpc3RpbmdDaGlsZHJlbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZUZpYmVyKGZpYmVyLCBwZW5kaW5nUHJvcHMpIHtcbiAgICAvLyBXZSBjdXJyZW50bHkgc2V0IHNpYmxpbmcgdG8gbnVsbCBhbmQgaW5kZXggdG8gMCBoZXJlIGJlY2F1c2UgaXQgaXMgZWFzeVxuICAgIC8vIHRvIGZvcmdldCB0byBkbyBiZWZvcmUgcmV0dXJuaW5nIGl0LiBFLmcuIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuXG4gICAgdmFyIGNsb25lID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoZmliZXIsIHBlbmRpbmdQcm9wcyk7XG4gICAgY2xvbmUuaW5kZXggPSAwO1xuICAgIGNsb25lLnNpYmxpbmcgPSBudWxsO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SW5kZXgpIHtcbiAgICBuZXdGaWJlci5pbmRleCA9IG5ld0luZGV4O1xuXG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBEdXJpbmcgaHlkcmF0aW9uLCB0aGUgdXNlSWQgYWxnb3JpdGhtIG5lZWRzIHRvIGtub3cgd2hpY2ggZmliZXJzIGFyZVxuICAgICAgLy8gcGFydCBvZiBhIGxpc3Qgb2YgY2hpbGRyZW4gKGFycmF5cywgaXRlcmF0b3JzKS5cbiAgICAgIG5ld0ZpYmVyLmZsYWdzIHw9IEZvcmtlZDtcbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnQgPSBuZXdGaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG9sZEluZGV4ID0gY3VycmVudC5pbmRleDtcblxuICAgICAgaWYgKG9sZEluZGV4IDwgbGFzdFBsYWNlZEluZGV4KSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBtb3ZlLlxuICAgICAgICBuZXdGaWJlci5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGl0ZW0gY2FuIHN0YXkgaW4gcGxhY2UuXG4gICAgICAgIHJldHVybiBvbGRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24uXG4gICAgICBuZXdGaWJlci5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlU2luZ2xlQ2hpbGQobmV3RmliZXIpIHtcbiAgICAvLyBUaGlzIGlzIHNpbXBsZXIgZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS4gV2Ugb25seSBuZWVkIHRvIGRvIGFcbiAgICAvLyBwbGFjZW1lbnQgZm9yIGluc2VydGluZyBuZXcgY2hpbGRyZW4uXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdGaWJlci5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZpYmVyO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCB0ZXh0Q29udGVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50LCBsYW5lcykge1xuICAgIHZhciBlbGVtZW50VHlwZSA9IGVsZW1lbnQudHlwZTtcblxuICAgIGlmIChlbGVtZW50VHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50LnByb3BzLmNoaWxkcmVuLCBsYW5lcywgZWxlbWVudC5rZXkpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoY3VycmVudC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudFR5cGUgfHwgKCAvLyBLZWVwIHRoaXMgY2hlY2sgaW5saW5lIHNvIGl0IG9ubHkgcnVucyBvbiB0aGUgZmFsc2UgcGF0aDpcbiAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY3VycmVudCwgZWxlbWVudCkgKSB8fCAvLyBMYXp5IHR5cGVzIHNob3VsZCByZWNvbmNpbGUgdGhlaXIgcmVzb2x2ZWQgdHlwZS5cbiAgICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyBhZnRlciB0aGUgSG90IFJlbG9hZGluZyBjaGVjayBhYm92ZSxcbiAgICAgIC8vIGJlY2F1c2UgaG90IHJlbG9hZGluZyBoYXMgZGlmZmVyZW50IHNlbWFudGljcyB0aGFuIHByb2QgYmVjYXVzZVxuICAgICAgLy8gaXQgZG9lc24ndCByZXN1c3BlbmQuIFNvIHdlIGNhbid0IGxldCB0aGUgY2FsbCBiZWxvdyBzdXNwZW5kLlxuICAgICAgdHlwZW9mIGVsZW1lbnRUeXBlID09PSAnb2JqZWN0JyAmJiBlbGVtZW50VHlwZSAhPT0gbnVsbCAmJiBlbGVtZW50VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmIHJlc29sdmVMYXp5KGVsZW1lbnRUeXBlKSA9PT0gY3VycmVudC50eXBlKSB7XG4gICAgICAgIC8vIE1vdmUgYmFzZWQgb24gaW5kZXhcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgZWxlbWVudC5wcm9wcyk7XG4gICAgICAgIGV4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH1cbiAgICB9IC8vIEluc2VydFxuXG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50LCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RQb3J0YWwgfHwgY3VycmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyAhPT0gcG9ydGFsLmNvbnRhaW5lckluZm8gfHwgY3VycmVudC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gIT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBwb3J0YWwuY2hpbGRyZW4gfHwgW10pO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGZyYWdtZW50LCBsYW5lcywga2V5KSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEZyYWdtZW50KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBrZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGZyYWdtZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyAmJiBuZXdDaGlsZCAhPT0gJycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KCcnICsgbmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgbnVsbCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgX2NyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkMiA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICAgICAgICBfY3JlYXRlZDIucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZWQyO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcGF5bG9hZCA9IG5ld0NoaWxkLl9wYXlsb2FkO1xuICAgICAgICAgICAgdmFyIGluaXQgPSBuZXdDaGlsZC5faW5pdDtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgaW5pdChwYXlsb2FkKSwgbGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfY3JlYXRlZDMgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIG51bGwpO1xuXG4gICAgICAgIF9jcmVhdGVkMy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVkMztcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFVwZGF0ZSB0aGUgZmliZXIgaWYgdGhlIGtleXMgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gbnVsbC5cbiAgICB2YXIga2V5ID0gb2xkRmliZXIgIT09IG51bGwgPyBvbGRGaWJlci5rZXkgOiBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgJiYgbmV3Q2hpbGQgIT09ICcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIGlmIChrZXkgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgb2xkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBwYXlsb2FkID0gbmV3Q2hpbGQuX3BheWxvYWQ7XG4gICAgICAgICAgICB2YXIgaW5pdCA9IG5ld0NoaWxkLl9pbml0O1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBpbml0KHBheWxvYWQpLCBsYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyAmJiBuZXdDaGlsZCAhPT0gJycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMsIHNvIHdlIG5laXRoZXIgaGF2ZSB0byBjaGVjayB0aGUgb2xkIG5vclxuICAgICAgLy8gbmV3IG5vZGUgZm9yIHRoZSBrZXkuIElmIGJvdGggYXJlIHRleHQgbm9kZXMsIHRoZXkgbWF0Y2guXG4gICAgICB2YXIgbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBtYXRjaGVkRmliZXIsICcnICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0NoaWxkLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleSkgfHwgbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMiwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBuZXdDaGlsZC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IG5ld0NoaWxkLl9pbml0O1xuICAgICAgICAgIHJldHVybiB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIGluaXQocGF5bG9hZCksIGxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyMyA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIzLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFdhcm5zIGlmIHRoZXJlIGlzIGEgZHVwbGljYXRlIG9yIG1pc3Npbmcga2V5XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcikge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnIHx8IGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBrbm93bktleXM7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgd2FybkZvck1pc3NpbmdLZXkoY2hpbGQsIHJldHVybkZpYmVyKTtcbiAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoa25vd25LZXlzID09PSBudWxsKSB7XG4gICAgICAgICAgICBrbm93bktleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWtub3duS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IoJ0VuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgYCVzYC4gJyArICdLZXlzIHNob3VsZCBiZSB1bmlxdWUgc28gdGhhdCBjb21wb25lbnRzIG1haW50YWluIHRoZWlyIGlkZW50aXR5ICcgKyAnYWNyb3NzIHVwZGF0ZXMuIE5vbi11bmlxdWUga2V5cyBtYXkgY2F1c2UgY2hpbGRyZW4gdG8gYmUgJyArICdkdXBsaWNhdGVkIGFuZC9vciBvbWl0dGVkIOKAlCB0aGUgYmVoYXZpb3IgaXMgdW5zdXBwb3J0ZWQgYW5kICcgKyAnY291bGQgY2hhbmdlIGluIGEgZnV0dXJlIHZlcnNpb24uJywga2V5KTtcblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgIHZhciBwYXlsb2FkID0gY2hpbGQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBjaGlsZC5faW5pdDtcbiAgICAgICAgICB3YXJuT25JbnZhbGlkS2V5KGluaXQocGF5bG9hZCksIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBrbm93bktleXM7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW4sIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBhbGdvcml0aG0gY2FuJ3Qgb3B0aW1pemUgYnkgc2VhcmNoaW5nIGZyb20gYm90aCBlbmRzIHNpbmNlIHdlXG4gICAgLy8gZG9uJ3QgaGF2ZSBiYWNrcG9pbnRlcnMgb24gZmliZXJzLiBJJ20gdHJ5aW5nIHRvIHNlZSBob3cgZmFyIHdlIGNhbiBnZXRcbiAgICAvLyB3aXRoIHRoYXQgbW9kZWwuIElmIGl0IGVuZHMgdXAgbm90IGJlaW5nIHdvcnRoIHRoZSB0cmFkZW9mZnMsIHdlIGNhblxuICAgIC8vIGFkZCBpdCBsYXRlci5cbiAgICAvLyBFdmVuIHdpdGggYSB0d28gZW5kZWQgb3B0aW1pemF0aW9uLCB3ZSdkIHdhbnQgdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlXG4gICAgLy8gd2hlcmUgdGhlcmUgYXJlIGZldyBjaGFuZ2VzIGFuZCBicnV0ZSBmb3JjZSB0aGUgY29tcGFyaXNvbiBpbnN0ZWFkIG9mXG4gICAgLy8gZ29pbmcgZm9yIHRoZSBNYXAuIEl0J2QgbGlrZSB0byBleHBsb3JlIGhpdHRpbmcgdGhhdCBwYXRoIGZpcnN0IGluXG4gICAgLy8gZm9yd2FyZC1vbmx5IG1vZGUgYW5kIG9ubHkgZ28gZm9yIHRoZSBNYXAgb25jZSB3ZSBub3RpY2UgdGhhdCB3ZSBuZWVkXG4gICAgLy8gbG90cyBvZiBsb29rIGFoZWFkLiBUaGlzIGRvZXNuJ3QgaGFuZGxlIHJldmVyc2FsIGFzIHdlbGwgYXMgdHdvIGVuZGVkXG4gICAgLy8gc2VhcmNoIGJ1dCB0aGF0J3MgdW51c3VhbC4gQmVzaWRlcywgZm9yIHRoZSB0d28gZW5kZWQgb3B0aW1pemF0aW9uIHRvXG4gICAgLy8gd29yayBvbiBJdGVyYWJsZXMsIHdlJ2QgbmVlZCB0byBjb3B5IHRoZSB3aG9sZSBzZXQuXG4gICAgLy8gSW4gdGhpcyBmaXJzdCBpdGVyYXRpb24sIHdlJ2xsIGp1c3QgbGl2ZSB3aXRoIGhpdHRpbmcgdGhlIGJhZCBjYXNlXG4gICAgLy8gKGFkZGluZyBldmVyeXRoaW5nIHRvIGEgTWFwKSBpbiBmb3IgZXZlcnkgaW5zZXJ0L21vdmUuXG4gICAgLy8gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gdXBkYXRlIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IoKSB3aGljaFxuICAgIC8vIHVzZXMgdGhlIHNhbWUgYWxnb3JpdGhtLlxuICAgIHtcbiAgICAgIC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbmV3Q2hpbGRyZW5baV07XG4gICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZXN1bHRpbmdGaXJzdENoaWxkID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNOZXdGaWJlciA9IG51bGw7XG4gICAgdmFyIG9sZEZpYmVyID0gY3VycmVudEZpcnN0Q2hpbGQ7XG4gICAgdmFyIGxhc3RQbGFjZWRJbmRleCA9IDA7XG4gICAgdmFyIG5ld0lkeCA9IDA7XG4gICAgdmFyIG5leHRPbGRGaWJlciA9IG51bGw7XG5cbiAgICBmb3IgKDsgb2xkRmliZXIgIT09IG51bGwgJiYgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG5cbiAgICAgIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgICAgIHZhciBudW1iZXJPZkZvcmtzID0gbmV3SWR4O1xuICAgICAgICBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG51bWJlck9mRm9ya3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICAgIHZhciBfbmV3RmliZXIgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgICAgICB2YXIgX251bWJlck9mRm9ya3MgPSBuZXdJZHg7XG4gICAgICAgIHB1c2hUcmVlRm9yayhyZXR1cm5GaWJlciwgX251bWJlck9mRm9ya3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyMiA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgbmV3Q2hpbGRyZW5bbmV3SWR4XSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyMiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXIyLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjIua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyMi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMiwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXIyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAgIHZhciBfbnVtYmVyT2ZGb3JrczIgPSBuZXdJZHg7XG4gICAgICBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIF9udW1iZXJPZkZvcmtzMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGRyZW5JdGVyYWJsZSwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uIGFzIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoKSxcbiAgICAvLyBidXQgdXNpbmcgdGhlIGl0ZXJhdG9yIGluc3RlYWQuXG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIG9iamVjdCBpcyBub3QgYW4gaXRlcmFibGUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiAnICsgJ1JlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHJlbmRlcmluZyBHZW5lcmF0b3JzIGJlY2F1c2UgaXQncyBhIG11dGF0aW9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI5OTVcbiAgICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IGtub3cgYWJvdXQgdG9TdHJpbmdUYWdcbiAgICAgIG5ld0NoaWxkcmVuSXRlcmFibGVbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0dlbmVyYXRvcicpIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRHZW5lcmF0b3JzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIEdlbmVyYXRvcnMgYXMgY2hpbGRyZW4gaXMgdW5zdXBwb3J0ZWQgYW5kIHdpbGwgbGlrZWx5IHlpZWxkICcgKyAndW5leHBlY3RlZCByZXN1bHRzIGJlY2F1c2UgZW51bWVyYXRpbmcgYSBnZW5lcmF0b3IgbXV0YXRlcyBpdC4gJyArICdZb3UgbWF5IGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgd2l0aCBgQXJyYXkuZnJvbSgpYCBvciB0aGUgJyArICdgWy4uLnNwcmVhZF1gIG9wZXJhdG9yIGJlZm9yZSByZW5kZXJpbmcuIEtlZXAgaW4gbWluZCAnICsgJ3lvdSBtaWdodCBuZWVkIHRvIHBvbHlmaWxsIHRoZXNlIGZlYXR1cmVzIGZvciBvbGRlciBicm93c2Vycy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSB0cnVlO1xuICAgICAgfSAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cblxuXG4gICAgICBpZiAobmV3Q2hpbGRyZW5JdGVyYWJsZS5lbnRyaWVzID09PSBpdGVyYXRvckZuKSB7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgIGVycm9yKCdVc2luZyBNYXBzIGFzIGNoaWxkcmVuIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgfSAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIC8vIFdlJ2xsIGdldCBhIGRpZmZlcmVudCBpdGVyYXRvciBsYXRlciBmb3IgdGhlIG1haW4gcGFzcy5cblxuXG4gICAgICB2YXIgX25ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgICBpZiAoX25ld0NoaWxkcmVuKSB7XG4gICAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICAgIHZhciBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCk7XG5cbiAgICAgICAgZm9yICg7ICFfc3RlcC5kb25lOyBfc3RlcCA9IF9uZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgIGlmIChuZXdDaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGl0ZXJhYmxlIG9iamVjdCBwcm92aWRlZCBubyBpdGVyYXRvci4nKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzTmV3RmliZXIgPSBudWxsO1xuICAgIHZhciBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgIHZhciBuZXdJZHggPSAwO1xuICAgIHZhciBuZXh0T2xkRmliZXIgPSBudWxsO1xuICAgIHZhciBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpO1xuXG4gICAgZm9yICg7IG9sZEZpYmVyICE9PSBudWxsICYmICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXI7XG4gICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAvLyB1bmZvcnR1bmF0ZSBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBzbG93IHBhdGggYWxsIHRoZSB0aW1lLiBXZSBuZWVkXG4gICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgaWYgKG9sZEZpYmVyICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgIC8vIEkuZS4gaWYgd2UgaGFkIG51bGwgdmFsdWVzIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIGRlZmVyIHRoaXNcbiAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICB9XG5cbiAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG5cbiAgICAgIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgICAgIHZhciBudW1iZXJPZkZvcmtzID0gbmV3SWR4O1xuICAgICAgICBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG51bWJlck9mRm9ya3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICB2YXIgX25ld0ZpYmVyMyA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKF9uZXdGaWJlcjMgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMywgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyMztcbiAgICAgIH1cblxuICAgICAgaWYgKGdldElzSHlkcmF0aW5nKCkpIHtcbiAgICAgICAgdmFyIF9udW1iZXJPZkZvcmtzMyA9IG5ld0lkeDtcbiAgICAgICAgcHVzaFRyZWVGb3JrKHJldHVybkZpYmVyLCBfbnVtYmVyT2ZGb3JrczMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9IC8vIEFkZCBhbGwgY2hpbGRyZW4gdG8gYSBrZXkgbWFwIGZvciBxdWljayBsb29rdXBzLlxuXG5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7IC8vIEtlZXAgc2Nhbm5pbmcgYW5kIHVzZSB0aGUgbWFwIHRvIHJlc3RvcmUgZGVsZXRlZCBpdGVtcyBhcyBtb3Zlcy5cblxuICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgdmFyIF9uZXdGaWJlcjQgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIHN0ZXAudmFsdWUsIGxhbmVzKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyNC5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXI0LmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjQua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjQsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyNDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgICB2YXIgX251bWJlck9mRm9ya3M0ID0gbmV3SWR4O1xuICAgICAgcHVzaFRyZWVGb3JrKHJldHVybkZpYmVyLCBfbnVtYmVyT2ZGb3JrczQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCwgbGFuZXMpIHtcbiAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gY2hlY2sgZm9yIGtleXMgb24gdGV4dCBub2RlcyBzaW5jZSB3ZSBkb24ndCBoYXZlIGFcbiAgICAvLyB3YXkgdG8gZGVmaW5lIHRoZW0uXG4gICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkICE9PSBudWxsICYmIGN1cnJlbnRGaXJzdENoaWxkLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBub2RlIHNvIGxldCdzIGp1c3QgdXBkYXRlIGl0IGFuZCBkZWxldGVcbiAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmcpO1xuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH0gLy8gVGhlIGV4aXN0aW5nIGZpcnN0IGNoaWxkIGlzIG5vdCBhIHRleHQgbm9kZSBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSBvbmVcbiAgICAvLyBhbmQgZGVsZXRlIHRoZSBleGlzdGluZyBvbmVzLlxuXG5cbiAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgZWxlbWVudCwgbGFuZXMpIHtcbiAgICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gRnJhZ21lbnQpIHtcbiAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgICAgZXhpc3RpbmcuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoY2hpbGQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnRUeXBlIHx8ICggLy8gS2VlcCB0aGlzIGNoZWNrIGlubGluZSBzbyBpdCBvbmx5IHJ1bnMgb24gdGhlIGZhbHNlIHBhdGg6XG4gICAgICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjaGlsZCwgZWxlbWVudCkgKSB8fCAvLyBMYXp5IHR5cGVzIHNob3VsZCByZWNvbmNpbGUgdGhlaXIgcmVzb2x2ZWQgdHlwZS5cbiAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoaXMgYWZ0ZXIgdGhlIEhvdCBSZWxvYWRpbmcgY2hlY2sgYWJvdmUsXG4gICAgICAgICAgLy8gYmVjYXVzZSBob3QgcmVsb2FkaW5nIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIHRoYW4gcHJvZCBiZWNhdXNlXG4gICAgICAgICAgLy8gaXQgZG9lc24ndCByZXN1c3BlbmQuIFNvIHdlIGNhbid0IGxldCB0aGUgY2FsbCBiZWxvdyBzdXNwZW5kLlxuICAgICAgICAgIHR5cGVvZiBlbGVtZW50VHlwZSA9PT0gJ29iamVjdCcgJiYgZWxlbWVudFR5cGUgIT09IG51bGwgJiYgZWxlbWVudFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSAmJiByZXNvbHZlTGF6eShlbGVtZW50VHlwZSkgPT09IGNoaWxkLnR5cGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcblxuICAgICAgICAgICAgdmFyIF9leGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzKTtcblxuICAgICAgICAgICAgX2V4aXN0aW5nLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY2hpbGQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgX2V4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIF9leGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgICAgIF9leGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gX2V4aXN0aW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBEaWRuJ3QgbWF0Y2guXG5cblxuICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBlbGVtZW50LmtleSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfY3JlYXRlZDQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgX2NyZWF0ZWQ0LnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGVsZW1lbnQpO1xuICAgICAgX2NyZWF0ZWQ0LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIF9jcmVhdGVkNDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgdmFyIGtleSA9IHBvcnRhbC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoY2hpbGQudGFnID09PSBIb3N0UG9ydGFsICYmIGNoaWxkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvID09PSBwb3J0YWwuY29udGFpbmVySW5mbyAmJiBjaGlsZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gPT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH0gLy8gVGhpcyBBUEkgd2lsbCB0YWcgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHNpZGUtZWZmZWN0IG9mIHRoZSByZWNvbmNpbGlhdGlvblxuICAvLyBpdHNlbGYuIFRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGUgc2lkZS1lZmZlY3QgbGlzdCBhcyB3ZSBwYXNzIHRocm91Z2ggdGhlXG4gIC8vIGNoaWxkcmVuIGFuZCB0aGUgcGFyZW50LlxuXG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRGaWJlcnMocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWN1cnNpdmUuXG4gICAgLy8gSWYgdGhlIHRvcCBsZXZlbCBpdGVtIGlzIGFuIGFycmF5LCB3ZSB0cmVhdCBpdCBhcyBhIHNldCBvZiBjaGlsZHJlbixcbiAgICAvLyBub3QgYXMgYSBmcmFnbWVudC4gTmVzdGVkIGFycmF5cyBvbiB0aGUgb3RoZXIgaGFuZCB3aWxsIGJlIHRyZWF0ZWQgYXNcbiAgICAvLyBmcmFnbWVudCBub2Rlcy4gUmVjdXJzaW9uIGhhcHBlbnMgYXQgdGhlIG5vcm1hbCBmbG93LlxuICAgIC8vIEhhbmRsZSB0b3AgbGV2ZWwgdW5rZXllZCBmcmFnbWVudHMgYXMgaWYgdGhleSB3ZXJlIGFycmF5cy5cbiAgICAvLyBUaGlzIGxlYWRzIHRvIGFuIGFtYmlndWl0eSBiZXR3ZWVuIDw+e1suLi5dfTwvPiBhbmQgPD4uLi48Lz4uXG4gICAgLy8gV2UgdHJlYXQgdGhlIGFtYmlndW91cyBjYXNlcyBhYm92ZSB0aGUgc2FtZS5cbiAgICB2YXIgaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCA9IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwgJiYgbmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSAmJiBuZXdDaGlsZC5rZXkgPT09IG51bGw7XG5cbiAgICBpZiAoaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCkge1xuICAgICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbjtcbiAgICB9IC8vIEhhbmRsZSBvYmplY3QgdHlwZXNcblxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykpO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSk7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBuZXdDaGlsZC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IG5ld0NoaWxkLl9pbml0OyAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIG5vbi1yZWN1cnNpdmUuXG5cbiAgICAgICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnMocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBpbml0KHBheWxvYWQpLCBsYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5KG5ld0NoaWxkKSkge1xuICAgICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICByZXR1cm4gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnICYmIG5ld0NoaWxkICE9PSAnJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsICcnICsgbmV3Q2hpbGQsIGxhbmVzKSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH0gLy8gUmVtYWluaW5nIGNhc2VzIGFyZSBhbGwgdHJlYXRlZCBhcyBlbXB0eS5cblxuXG4gICAgcmV0dXJuIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gIH1cblxuICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnM7XG59XG5cbnZhciByZWNvbmNpbGVDaGlsZEZpYmVycyA9IENoaWxkUmVjb25jaWxlcih0cnVlKTtcbnZhciBtb3VudENoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKGZhbHNlKTtcbmZ1bmN0aW9uIGNsb25lQ2hpbGRGaWJlcnMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgd29ya0luUHJvZ3Jlc3MuY2hpbGQgIT09IGN1cnJlbnQuY2hpbGQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc3VtaW5nIHdvcmsgbm90IHlldCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgd2hpbGUgKGN1cnJlbnRDaGlsZC5zaWJsaW5nICE9PSBudWxsKSB7XG4gICAgY3VycmVudENoaWxkID0gY3VycmVudENoaWxkLnNpYmxpbmc7XG4gICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5zaWJsaW5nID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBjdXJyZW50Q2hpbGQucGVuZGluZ1Byb3BzKTtcbiAgICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIG5ld0NoaWxkLnNpYmxpbmcgPSBudWxsO1xufSAvLyBSZXNldCBhIHdvcmtJblByb2dyZXNzIGNoaWxkIHNldCB0byBwcmVwYXJlIGl0IGZvciBhIHNlY29uZCBwYXNzLlxuXG5mdW5jdGlvbiByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB2YXIgY2hpbGQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICByZXNldFdvcmtJblByb2dyZXNzKGNoaWxkLCBsYW5lcyk7XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbnZhciBOT19DT05URVhUID0ge307XG52YXIgY29udGV4dFN0YWNrQ3Vyc29yJDEgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgY29udGV4dEZpYmVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG52YXIgcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTk9fQ09OVEVYVCk7XG5cbmZ1bmN0aW9uIHJlcXVpcmVkQ29udGV4dChjKSB7XG4gIGlmIChjID09PSBOT19DT05URVhUKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBob3N0IGNvbnRleHQgdG8gZXhpc3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyAnICsgJ2luIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgfVxuXG4gIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBnZXRSb290SG9zdENvbnRhaW5lcigpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgcmV0dXJuIHJvb3RJbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RDb250YWluZXIoZmliZXIsIG5leHRSb290SW5zdGFuY2UpIHtcbiAgLy8gUHVzaCBjdXJyZW50IHJvb3QgaW5zdGFuY2Ugb250byB0aGUgc3RhY2s7XG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHJlc2V0IHJvb3Qgd2hlbiBwb3J0YWxzIGFyZSBwb3BwZWQuXG4gIHB1c2gocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIG5leHRSb290SW5zdGFuY2UsIGZpYmVyKTsgLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTsgLy8gRmluYWxseSwgd2UgbmVlZCB0byBwdXNoIHRoZSBob3N0IGNvbnRleHQgdG8gdGhlIHN0YWNrLlxuICAvLyBIb3dldmVyLCB3ZSBjYW4ndCBqdXN0IGNhbGwgZ2V0Um9vdEhvc3RDb250ZXh0KCkgYW5kIHB1c2ggaXQgYmVjYXVzZVxuICAvLyB3ZSdkIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVudHJpZXMgb24gdGhlIHN0YWNrIGRlcGVuZGluZyBvblxuICAvLyB3aGV0aGVyIGdldFJvb3RIb3N0Q29udGV4dCgpIHRocm93cyBzb21ld2hlcmUgaW4gcmVuZGVyZXIgY29kZSBvciBub3QuXG4gIC8vIFNvIHdlIHB1c2ggYW4gZW1wdHkgdmFsdWUgZmlyc3QuIFRoaXMgbGV0cyB1cyBzYWZlbHkgdW53aW5kIG9uIGVycm9ycy5cblxuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBOT19DT05URVhULCBmaWJlcik7XG4gIHZhciBuZXh0Um9vdENvbnRleHQgPSBnZXRSb290SG9zdENvbnRleHQobmV4dFJvb3RJbnN0YW5jZSk7IC8vIE5vdyB0aGF0IHdlIGtub3cgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHRocm93LCByZXBsYWNlIGl0LlxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBuZXh0Um9vdENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRhaW5lcihmaWJlcikge1xuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIHBvcChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0Q29udGV4dCgpIHtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHZhciBuZXh0Q29udGV4dCA9IGdldENoaWxkSG9zdENvbnRleHQoY29udGV4dCwgZmliZXIudHlwZSk7IC8vIERvbid0IHB1c2ggdGhpcyBGaWJlcidzIGNvbnRleHQgdW5sZXNzIGl0J3MgdW5pcXVlLlxuXG4gIGlmIChjb250ZXh0ID09PSBuZXh0Q29udGV4dCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIC8vIERvIG5vdCBwb3AgdW5sZXNzIHRoaXMgRmliZXIgcHJvdmlkZWQgdGhlIGN1cnJlbnQgY29udGV4dC5cbiAgLy8gcHVzaEhvc3RDb250ZXh0KCkgb25seSBwdXNoZXMgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG4gIGlmIChjb250ZXh0RmliZXJTdGFja0N1cnNvci5jdXJyZW50ICE9PSBmaWJlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxudmFyIERlZmF1bHRTdXNwZW5zZUNvbnRleHQgPSAwOyAvLyBUaGUgU3VzcGVuc2UgQ29udGV4dCBpcyBzcGxpdCBpbnRvIHR3byBwYXJ0cy4gVGhlIGxvd2VyIGJpdHMgaXNcbi8vIGluaGVyaXRlZCBkZWVwbHkgZG93biB0aGUgc3VidHJlZS4gVGhlIHVwcGVyIGJpdHMgb25seSBhZmZlY3Rcbi8vIHRoaXMgaW1tZWRpYXRlIHN1c3BlbnNlIGJvdW5kYXJ5IGFuZCBnZXRzIHJlc2V0IGVhY2ggbmV3XG4vLyBib3VuZGFyeSBvciBzdXNwZW5zZSBsaXN0LlxuXG52YXIgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgPSAxOyAvLyBTdWJ0cmVlIEZsYWdzOlxuLy8gSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0IGluZGljYXRlcyB0aGF0IG9uZSBvZiBvdXIgcGFyZW50IFN1c3BlbnNlXG4vLyBib3VuZGFyaWVzIGlzIG5vdCBjdXJyZW50bHkgc2hvd2luZyB2aXNpYmxlIG1haW4gY29udGVudC5cbi8vIEVpdGhlciBiZWNhdXNlIGl0IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIG9yIGlzIG5vdCBtb3VudGVkIGF0IGFsbC5cbi8vIFdlIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZGVzaXJhYmxlIHRvIHRyaWdnZXIgYSBmYWxsYmFjayBhdFxuLy8gdGhlIHBhcmVudC4gSWYgbm90LCB0aGVuIHdlIG1pZ2h0IG5lZWQgdG8gdHJpZ2dlciB1bmRlc2lyYWJsZSBib3VuZGFyaWVzXG4vLyBhbmQvb3Igc3VzcGVuZCB0aGUgY29tbWl0IHRvIGF2b2lkIGhpZGluZyB0aGUgcGFyZW50IGNvbnRlbnQuXG5cbnZhciBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgPSAxOyAvLyBTaGFsbG93IEZsYWdzOlxuLy8gRm9yY2VTdXNwZW5zZUZhbGxiYWNrIGNhbiBiZSB1c2VkIGJ5IFN1c3BlbnNlTGlzdCB0byBmb3JjZSBuZXdseSBhZGRlZFxuLy8gaXRlbXMgaW50byB0aGVpciBmYWxsYmFjayBzdGF0ZSBkdXJpbmcgb25lIG9mIHRoZSByZW5kZXIgcGFzc2VzLlxuXG52YXIgRm9yY2VTdXNwZW5zZUZhbGxiYWNrID0gMjtcbnZhciBzdXNwZW5zZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKERlZmF1bHRTdXNwZW5zZUNvbnRleHQpO1xuZnVuY3Rpb24gaGFzU3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIGZsYWcpIHtcbiAgcmV0dXJuIChwYXJlbnRDb250ZXh0ICYgZmxhZykgIT09IDA7XG59XG5mdW5jdGlvbiBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2s7XG59XG5mdW5jdGlvbiBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIHNoYWxsb3dDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgfCBzaGFsbG93Q29udGV4dDtcbn1cbmZ1bmN0aW9uIGFkZFN1YnRyZWVTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc3VidHJlZUNvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgfCBzdWJ0cmVlQ29udGV4dDtcbn1cbmZ1bmN0aW9uIHB1c2hTdXNwZW5zZUNvbnRleHQoZmliZXIsIG5ld0NvbnRleHQpIHtcbiAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBuZXdDb250ZXh0LCBmaWJlcik7XG59XG5mdW5jdGlvbiBwb3BTdXNwZW5zZUNvbnRleHQoZmliZXIpIHtcbiAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQ2FwdHVyZVN1c3BlbnNlKHdvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgLy8gSWYgaXQgd2FzIHRoZSBwcmltYXJ5IGNoaWxkcmVuIHRoYXQganVzdCBzdXNwZW5kZWQsIGNhcHR1cmUgYW5kIHJlbmRlciB0aGVcbiAgLy8gZmFsbGJhY2suIE90aGVyd2lzZSwgZG9uJ3QgY2FwdHVyZSBhbmQgYnViYmxlIHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV4dFN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGRlaHlkcmF0ZWQgYm91bmRhcnkgYWx3YXlzIGNhcHR1cmVzLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wczsgLy8gUmVndWxhciBib3VuZGFyaWVzIGFsd2F5cyBjYXB0dXJlLlxuXG4gIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBpdCdzIGEgYm91bmRhcnkgd2Ugc2hvdWxkIGF2b2lkLCB0aGVuIHdlIHByZWZlciB0byBidWJibGUgdXAgdG8gdGhlXG59XG5mdW5jdGlvbiBmaW5kRmlyc3RTdXNwZW5kZWQocm93KSB7XG4gIHZhciBub2RlID0gcm93O1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgdmFyIHN0YXRlID0gbm9kZS5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGRlaHlkcmF0ZWQgPSBzdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChkZWh5ZHJhdGVkID09PSBudWxsIHx8IGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoZGVoeWRyYXRlZCkgfHwgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soZGVoeWRyYXRlZCkpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCAmJiAvLyByZXZlYWxPcmRlciB1bmRlZmluZWQgY2FuJ3QgYmUgdHJ1c3RlZCBiZWNhdXNlIGl0IGRvbid0XG4gICAgLy8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIGl0IHN1c3BlbmRlZCBvciBub3QuXG4gICAgbm9kZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gKG5vZGUuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgaWYgKGRpZFN1c3BlbmQpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm93KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIE5vRmxhZ3MkMSA9XG4vKiAgICovXG4wOyAvLyBSZXByZXNlbnRzIHdoZXRoZXIgZWZmZWN0IHNob3VsZCBmaXJlLlxuXG52YXIgSGFzRWZmZWN0ID1cbi8qICovXG4xOyAvLyBSZXByZXNlbnRzIHRoZSBwaGFzZSBpbiB3aGljaCB0aGUgZWZmZWN0IChub3QgdGhlIGNsZWFuLXVwKSBmaXJlcy5cblxudmFyIEluc2VydGlvbiA9XG4vKiAgKi9cbjI7XG52YXIgTGF5b3V0ID1cbi8qICAgICovXG40O1xudmFyIFBhc3NpdmUkMSA9XG4vKiAgICovXG44O1xuXG4vLyBhbmQgc2hvdWxkIGJlIHJlc2V0IGJlZm9yZSBzdGFydGluZyBhIG5ldyByZW5kZXIuXG4vLyBUaGlzIHRyYWNrcyB3aGljaCBtdXRhYmxlIHNvdXJjZXMgbmVlZCB0byBiZSByZXNldCBhZnRlciBhIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzU291cmNlcyA9IFtdO1xuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmtJblByb2dyZXNzU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtdXRhYmxlU291cmNlID0gd29ya0luUHJvZ3Jlc3NTb3VyY2VzW2ldO1xuXG4gICAge1xuICAgICAgbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLmxlbmd0aCA9IDA7XG59XG4vLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgdmVyc2lvbiB1c2VkIGZvciBzZXJ2ZXIgcmVuZGVyaW5nIG1hdGNoZXMgdGhlIG9uZVxuLy8gdGhhdCBpcyBldmVudHVhbGx5IHJlYWQgZHVyaW5nIGh5ZHJhdGlvbi5cbi8vIElmIHRoZXkgZG9uJ3QgbWF0Y2ggdGhlcmUncyBhIHBvdGVudGlhbCB0ZWFyIGFuZCBhIGZ1bGwgZGVvcHQgcmVuZGVyIGlzIHJlcXVpcmVkLlxuXG5mdW5jdGlvbiByZWdpc3Rlck11dGFibGVTb3VyY2VGb3JIeWRyYXRpb24ocm9vdCwgbXV0YWJsZVNvdXJjZSkge1xuICB2YXIgZ2V0VmVyc2lvbiA9IG11dGFibGVTb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihtdXRhYmxlU291cmNlLl9zb3VyY2UpOyAvLyBUT0RPIENsZWFyIHRoaXMgZGF0YSBvbmNlIGFsbCBwZW5kaW5nIGh5ZHJhdGlvbiB3b3JrIGlzIGZpbmlzaGVkLlxuICAvLyBSZXRhaW5pbmcgaXQgZm9yZXZlciBtYXkgaW50ZXJmZXJlIHdpdGggR0MuXG5cbiAgaWYgKHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9PSBudWxsKSB7XG4gICAgcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gW211dGFibGVTb3VyY2UsIHZlcnNpb25dO1xuICB9IGVsc2Uge1xuICAgIHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG11dGFibGVTb3VyY2UsIHZlcnNpb24pO1xuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQ7XG52YXIgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3Q7XG5cbntcbiAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xufVxuXG4vLyBUaGVzZSBhcmUgc2V0IHJpZ2h0IGJlZm9yZSBjYWxsaW5nIHRoZSBjb21wb25lbnQuXG52YXIgcmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci4gSSd2ZSBuYW1lZCBpdCBkaWZmZXJlbnRseSB0byBkaXN0aW5ndWlzaCBpdCBmcm9tXG4vLyB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7IC8vIEhvb2tzIGFyZSBzdG9yZWQgYXMgYSBsaW5rZWQgbGlzdCBvbiB0aGUgZmliZXIncyBtZW1vaXplZFN0YXRlIGZpZWxkLiBUaGVcbi8vIGN1cnJlbnQgaG9vayBsaXN0IGlzIHRoZSBsaXN0IHRoYXQgYmVsb25ncyB0byB0aGUgY3VycmVudCBmaWJlci4gVGhlXG4vLyB3b3JrLWluLXByb2dyZXNzIGhvb2sgbGlzdCBpcyBhIG5ldyBsaXN0IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG5cbnZhciBjdXJyZW50SG9vayA9IG51bGw7XG52YXIgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDsgLy8gV2hldGhlciBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIFRoaXNcbi8vIGRvZXMgbm90IGdldCByZXNldCBpZiB3ZSBkbyBhbm90aGVyIHJlbmRlciBwYXNzOyBvbmx5IHdoZW4gd2UncmUgY29tcGxldGVseVxuLy8gZmluaXNoZWQgZXZhbHVhdGluZyB0aGlzIGNvbXBvbmVudC4gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gd2Uga25vd1xuLy8gd2hldGhlciB3ZSBuZWVkIHRvIGNsZWFyIHJlbmRlciBwaGFzZSB1cGRhdGVzIGFmdGVyIGEgdGhyb3cuXG5cbnZhciBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7IC8vIFdoZXJlIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9ubHkgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLiBUaGlzXG4vLyBnZXRzIHJlc2V0IGFmdGVyIGVhY2ggYXR0ZW1wdC5cbi8vIFRPRE86IE1heWJlIHRoZXJlJ3Mgc29tZSB3YXkgdG8gY29uc29saWRhdGUgdGhpcyB3aXRoXG4vLyBgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZWAuIE9yIHdpdGggYG51bWJlck9mUmVSZW5kZXJzYC5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlOyAvLyBDb3VudHMgdGhlIG51bWJlciBvZiB1c2VJZCBob29rcyBpbiB0aGlzIGNvbXBvbmVudC5cblxudmFyIGxvY2FsSWRDb3VudGVyID0gMDsgLy8gVXNlZCBmb3IgaWRzIHRoYXQgYXJlIGdlbmVyYXRlZCBjb21wbGV0ZWx5IGNsaWVudC1zaWRlIChpLmUuIG5vdCBkdXJpbmdcbi8vIGh5ZHJhdGlvbikuIFRoaXMgY291bnRlciBpcyBnbG9iYWwsIHNvIGNsaWVudCBpZHMgYXJlIG5vdCBzdGFibGUgYWNyb3NzXG4vLyByZW5kZXIgYXR0ZW1wdHMuXG5cbnZhciBnbG9iYWxDbGllbnRJZENvdW50ZXIgPSAwO1xudmFyIFJFX1JFTkRFUl9MSU1JVCA9IDI1OyAvLyBJbiBERVYsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcHJpbWl0aXZlIGhvb2tcblxudmFyIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDsgLy8gSW4gREVWLCB0aGlzIGxpc3QgZW5zdXJlcyB0aGF0IGhvb2tzIGFyZSBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgYmV0d2VlbiByZW5kZXJzLlxuLy8gVGhlIGxpc3Qgc3RvcmVzIHRoZSBvcmRlciBvZiBob29rcyB1c2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIgKG1vdW50KS5cbi8vIFN1YnNlcXVlbnQgcmVuZGVycyAodXBkYXRlcykgcmVmZXJlbmNlIHRoaXMgbGlzdC5cblxudmFyIGhvb2tUeXBlc0RldiA9IG51bGw7XG52YXIgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gSW4gREVWLCB0aGlzIHRyYWNrcyB3aGV0aGVyIGN1cnJlbnRseSByZW5kZXJpbmcgY29tcG9uZW50IG5lZWRzIHRvIGlnbm9yZVxuLy8gdGhlIGRlcGVuZGVuY2llcyBmb3IgSG9va3MgdGhhdCBuZWVkIHRoZW0gKGUuZy4gdXNlRWZmZWN0IG9yIHVzZU1lbW8pLlxuLy8gV2hlbiB0cnVlLCBzdWNoIEhvb2tzIHdpbGwgYWx3YXlzIGJlIFwicmVtb3VudGVkXCIuIE9ubHkgdXNlZCBkdXJpbmcgaG90IHJlbG9hZC5cblxudmFyIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIG1vdW50SG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ID09PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNEZXYgPSBbaG9va05hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBob29rVHlwZXNEZXYucHVzaChob29rTmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYrKztcblxuICAgICAgaWYgKGhvb2tUeXBlc0Rldltob29rVHlwZXNVcGRhdGVJbmRleERldl0gIT09IGhvb2tOYW1lKSB7XG4gICAgICAgIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGhvb2tOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcykge1xuICB7XG4gICAgaWYgKGRlcHMgIT09IHVuZGVmaW5lZCAmJiBkZXBzICE9PSBudWxsICYmICFpc0FycmF5KGRlcHMpKSB7XG4gICAgICAvLyBWZXJpZnkgZGVwcywgYnV0IG9ubHkgb24gbW91bnQgdG8gYXZvaWQgZXh0cmEgY2hlY2tzLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGVpciB0eXBlIHdvdWxkIGNoYW5nZSBhcyB1c3VhbGx5IHlvdSBkZWZpbmUgdGhlbSBpbmxpbmUuXG4gICAgICBlcnJvcignJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCB0aGF0IGlzIG5vdCBhbiBhcnJheSAoaW5zdGVhZCwgcmVjZWl2ZWQgYCVzYCkuIFdoZW4gJyArICdzcGVjaWZpZWQsIHRoZSBmaW5hbCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LicsIGN1cnJlbnRIb29rTmFtZUluRGV2LCB0eXBlb2YgZGVwcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGN1cnJlbnRIb29rTmFtZSkge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuXG4gICAgaWYgKCFkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciB0YWJsZSA9ICcnO1xuICAgICAgICB2YXIgc2Vjb25kQ29sdW1uU3RhcnQgPSAzMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBob29rVHlwZXNVcGRhdGVJbmRleERldjsgaSsrKSB7XG4gICAgICAgICAgdmFyIG9sZEhvb2tOYW1lID0gaG9va1R5cGVzRGV2W2ldO1xuICAgICAgICAgIHZhciBuZXdIb29rTmFtZSA9IGkgPT09IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID8gY3VycmVudEhvb2tOYW1lIDogb2xkSG9va05hbWU7XG4gICAgICAgICAgdmFyIHJvdyA9IGkgKyAxICsgXCIuIFwiICsgb2xkSG9va05hbWU7IC8vIEV4dHJhIHNwYWNlIHNvIHNlY29uZCBjb2x1bW4gbGluZXMgdXBcbiAgICAgICAgICAvLyBsb2wgQCBJRSBub3Qgc3VwcG9ydGluZyBTdHJpbmcjcmVwZWF0XG5cbiAgICAgICAgICB3aGlsZSAocm93Lmxlbmd0aCA8IHNlY29uZENvbHVtblN0YXJ0KSB7XG4gICAgICAgICAgICByb3cgKz0gJyAnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJvdyArPSBuZXdIb29rTmFtZSArICdcXG4nO1xuICAgICAgICAgIHRhYmxlICs9IHJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCdSZWFjdCBoYXMgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIEhvb2tzIGNhbGxlZCBieSAlcy4gJyArICdUaGlzIHdpbGwgbGVhZCB0byBidWdzIGFuZCBlcnJvcnMgaWYgbm90IGZpeGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIHRoZSBSdWxlcyBvZiBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzXFxuXFxuJyArICcgICBQcmV2aW91cyByZW5kZXIgICAgICAgICAgICBOZXh0IHJlbmRlclxcbicgKyAnICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyArICclcycgKyAnICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuJywgY29tcG9uZW50TmFtZSwgdGFibGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0ludmFsaWRIb29rRXJyb3IoKSB7XG4gIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvcicgKyAnIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuJyArICcxLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4nICsgJzIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4nICsgJzMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG4nICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLicpO1xufVxuXG5mdW5jdGlvbiBhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSB7XG4gIHtcbiAgICBpZiAoaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMpIHtcbiAgICAgIC8vIE9ubHkgdHJ1ZSB3aGVuIHRoaXMgY29tcG9uZW50IGlzIGJlaW5nIGhvdCByZWxvYWRlZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAocHJldkRlcHMgPT09IG51bGwpIHtcbiAgICB7XG4gICAgICBlcnJvcignJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCBkdXJpbmcgdGhpcyByZW5kZXIsIGJ1dCBub3QgZHVyaW5nICcgKyAndGhlIHByZXZpb3VzIHJlbmRlci4gRXZlbiB0aG91Z2ggdGhlIGZpbmFsIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCAnICsgJ2l0cyB0eXBlIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLicsIGN1cnJlbnRIb29rTmFtZUluRGV2KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB7XG4gICAgLy8gRG9uJ3QgYm90aGVyIGNvbXBhcmluZyBsZW5ndGhzIGluIHByb2QgYmVjYXVzZSB0aGVzZSBhcnJheXMgc2hvdWxkIGJlXG4gICAgLy8gcGFzc2VkIGlubGluZS5cbiAgICBpZiAobmV4dERlcHMubGVuZ3RoICE9PSBwcmV2RGVwcy5sZW5ndGgpIHtcbiAgICAgIGVycm9yKCdUaGUgZmluYWwgYXJndW1lbnQgcGFzc2VkIHRvICVzIGNoYW5nZWQgc2l6ZSBiZXR3ZWVuIHJlbmRlcnMuIFRoZSAnICsgJ29yZGVyIGFuZCBzaXplIG9mIHRoaXMgYXJyYXkgbXVzdCByZW1haW4gY29uc3RhbnQuXFxuXFxuJyArICdQcmV2aW91czogJXNcXG4nICsgJ0luY29taW5nOiAlcycsIGN1cnJlbnRIb29rTmFtZUluRGV2LCBcIltcIiArIHByZXZEZXBzLmpvaW4oJywgJykgKyBcIl1cIiwgXCJbXCIgKyBuZXh0RGVwcy5qb2luKCcsICcpICsgXCJdXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldkRlcHMubGVuZ3RoICYmIGkgPCBuZXh0RGVwcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvYmplY3RJcyhuZXh0RGVwc1tpXSwgcHJldkRlcHNbaV0pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcsIG5leHRSZW5kZXJMYW5lcykge1xuICByZW5kZXJMYW5lcyA9IG5leHRSZW5kZXJMYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IHdvcmtJblByb2dyZXNzO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5fZGVidWdIb29rVHlwZXMgOiBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIFVzZWQgZm9yIGhvdCByZWxvYWRpbmc6XG5cbiAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgZm9sbG93aW5nIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZXNldFxuICAvLyBjdXJyZW50SG9vayA9IG51bGw7XG4gIC8vIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gIC8vIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgLy8gbG9jYWxJZENvdW50ZXIgPSAwO1xuICAvLyBUT0RPIFdhcm4gaWYgbm8gaG9va3MgYXJlIHVzZWQgYXQgYWxsIGR1cmluZyBtb3VudCwgdGhlbiBzb21lIGFyZSB1c2VkIGR1cmluZyB1cGRhdGUuXG4gIC8vIEN1cnJlbnRseSB3ZSB3aWxsIGlkZW50aWZ5IHRoZSB1cGRhdGUgcmVuZGVyIGFzIGEgbW91bnQgYmVjYXVzZSBtZW1vaXplZFN0YXRlID09PSBudWxsLlxuICAvLyBUaGlzIGlzIHRyaWNreSBiZWNhdXNlIGl0J3MgdmFsaWQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgY29tcG9uZW50cyAoZS5nLiBSZWFjdC5sYXp5KVxuICAvLyBVc2luZyBtZW1vaXplZFN0YXRlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBtb3VudC91cGRhdGUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBvbmUgc3RhdGVmdWwgaG9vayBpcyB1c2VkLlxuICAvLyBOb24tc3RhdGVmdWwgaG9va3MgKGUuZy4gY29udGV4dCkgZG9uJ3QgZ2V0IGFkZGVkIHRvIG1lbW9pemVkU3RhdGUsXG4gIC8vIHNvIG1lbW9pemVkU3RhdGUgd291bGQgYmUgbnVsbCBkdXJpbmcgdXBkYXRlcyBhbmQgbW91bnRzLlxuXG4gIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICB9IGVsc2UgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGhhbmRsZXMgYW4gZWRnZSBjYXNlIHdoZXJlIGEgY29tcG9uZW50IGlzIHVwZGF0aW5nLFxuICAgICAgLy8gYnV0IG5vIHN0YXRlZnVsIGhvb2tzIGhhdmUgYmVlbiB1c2VkLlxuICAgICAgLy8gV2Ugd2FudCB0byBtYXRjaCB0aGUgcHJvZHVjdGlvbiBjb2RlIGJlaGF2aW9yICh3aGljaCB3aWxsIHVzZSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50KSxcbiAgICAgIC8vIGJ1dCB3aXRoIHRoZSBleHRyYSBERVYgdmFsaWRhdGlvbiB0byBlbnN1cmUgaG9va3Mgb3JkZXJpbmcgaGFzbid0IGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgZG9lcyB0aGF0LlxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICB9XG4gIH1cblxuICB2YXIgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7IC8vIENoZWNrIGlmIHRoZXJlIHdhcyBhIHJlbmRlciBwaGFzZSB1cGRhdGVcblxuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKSB7XG4gICAgLy8gS2VlcCByZW5kZXJpbmcgaW4gYSBsb29wIGZvciBhcyBsb25nIGFzIHJlbmRlciBwaGFzZSB1cGRhdGVzIGNvbnRpbnVlIHRvXG4gICAgLy8gYmUgc2NoZWR1bGVkLiBVc2UgYSBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXG4gICAgdmFyIG51bWJlck9mUmVSZW5kZXJzID0gMDtcblxuICAgIGRvIHtcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xuICAgICAgbG9jYWxJZENvdW50ZXIgPSAwO1xuXG4gICAgICBpZiAobnVtYmVyT2ZSZVJlbmRlcnMgPj0gUkVfUkVOREVSX0xJTUlUKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVG9vIG1hbnkgcmUtcmVuZGVycy4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgcmVuZGVycyB0byBwcmV2ZW50ICcgKyAnYW4gaW5maW5pdGUgbG9vcC4nKTtcbiAgICAgIH1cblxuICAgICAgbnVtYmVyT2ZSZVJlbmRlcnMgKz0gMTtcblxuICAgICAge1xuICAgICAgICAvLyBFdmVuIHdoZW4gaG90IHJlbG9hZGluZywgYWxsb3cgZGVwZW5kZW5jaWVzIHRvIHN0YWJpbGl6ZVxuICAgICAgICAvLyBhZnRlciBmaXJzdCByZW5kZXIgdG8gcHJldmVudCBpbmZpbml0ZSByZW5kZXIgcGhhc2UgdXBkYXRlcy5cbiAgICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBmYWxzZTtcbiAgICAgIH0gLy8gU3RhcnQgb3ZlciBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3RcblxuXG4gICAgICBjdXJyZW50SG9vayA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEFsc28gdmFsaWRhdGUgaG9vayBvcmRlciBmb3IgY2FzY2FkaW5nIHVwZGF0ZXMuXG4gICAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICB9XG5cbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA7XG4gICAgICBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTtcbiAgICB9IHdoaWxlIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpO1xuICB9IC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmNlLlxuXG5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGhvb2tUeXBlc0RldjtcbiAgfSAvLyBUaGlzIGNoZWNrIHVzZXMgY3VycmVudEhvb2sgc28gdGhhdCBpdCB3b3JrcyB0aGUgc2FtZSBpbiBERVYgYW5kIHByb2QgYnVuZGxlcy5cbiAgLy8gaG9va1R5cGVzRGV2IGNvdWxkIGNhdGNoIG1vcmUgY2FzZXMgKGUuZy4gY29udGV4dCkgYnV0IG9ubHkgaW4gREVWIGJ1bmRsZXMuXG5cblxuICB2YXIgZGlkUmVuZGVyVG9vRmV3SG9va3MgPSBjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBjdXJyZW50SG9vay5uZXh0ICE9PSBudWxsO1xuICByZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIENvbmZpcm0gdGhhdCBhIHN0YXRpYyBmbGFnIHdhcyBub3QgYWRkZWQgb3IgcmVtb3ZlZCBzaW5jZSB0aGUgbGFzdFxuICAgIC8vIHJlbmRlci4gSWYgdGhpcyBmaXJlcywgaXQgc3VnZ2VzdHMgdGhhdCB3ZSBpbmNvcnJlY3RseSByZXNldCB0aGUgc3RhdGljXG4gICAgLy8gZmxhZ3MgaW4gc29tZSBvdGhlciBwYXJ0IG9mIHRoZSBjb2RlYmFzZS4gVGhpcyBoYXMgaGFwcGVuZWQgYmVmb3JlLCBmb3JcbiAgICAvLyBleGFtcGxlLCBpbiB0aGUgU3VzcGVuc2VMaXN0IGltcGxlbWVudGF0aW9uLlxuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgKGN1cnJlbnQuZmxhZ3MgJiBTdGF0aWNNYXNrKSAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgU3RhdGljTWFzaykgJiYgLy8gRGlzYWJsZSB0aGlzIHdhcm5pbmcgaW4gbGVnYWN5IG1vZGUsIGJlY2F1c2UgbGVnYWN5IFN1c3BlbnNlIGlzIHdlaXJkXG4gICAgLy8gYW5kIGNyZWF0ZXMgZmFsc2UgcG9zaXRpdmVzLiBUbyBtYWtlIHRoaXMgd29yayBpbiBsZWdhY3kgbW9kZSwgd2UnZFxuICAgIC8vIG5lZWQgdG8gbWFyayBmaWJlcnMgdGhhdCBjb21taXQgaW4gYW4gaW5jb21wbGV0ZSBzdGF0ZSwgc29tZWhvdy4gRm9yXG4gICAgLy8gbm93IEknbGwgZGlzYWJsZSB0aGUgd2FybmluZyB0aGF0IG1vc3Qgb2YgdGhlIGJ1Z3MgdGhhdCB3b3VsZCB0cmlnZ2VyXG4gICAgLy8gaXQgYXJlIGVpdGhlciBleGNsdXNpdmUgdG8gY29uY3VycmVudCBtb2RlIG9yIGV4aXN0IGluIGJvdGguXG4gICAgKGN1cnJlbnQubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICBlcnJvcignSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEV4cGVjdGVkIHN0YXRpYyBmbGFnIHdhcyBtaXNzaW5nLiBQbGVhc2UgJyArICdub3RpZnkgdGhlIFJlYWN0IHRlYW0uJyk7XG4gICAgfVxuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlOyAvLyBUaGlzIGlzIHJlc2V0IGJ5IGNoZWNrRGlkUmVuZGVySWRIb29rXG4gIC8vIGxvY2FsSWRDb3VudGVyID0gMDtcblxuICBpZiAoZGlkUmVuZGVyVG9vRmV3SG9va3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlbmRlcmVkIGZld2VyIGhvb2tzIHRoYW4gZXhwZWN0ZWQuIFRoaXMgbWF5IGJlIGNhdXNlZCBieSBhbiBhY2NpZGVudGFsICcgKyAnZWFybHkgcmV0dXJuIHN0YXRlbWVudC4nKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cbmZ1bmN0aW9uIGNoZWNrRGlkUmVuZGVySWRIb29rKCkge1xuICAvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZXZlcnkgcmVuZGVyV2l0aEhvb2tzIGNhbGwuXG4gIC8vIENvbmNlcHR1YWxseSwgaXQncyBwYXJ0IG9mIHRoZSByZXR1cm4gdmFsdWUgb2YgcmVuZGVyV2l0aEhvb2tzOyBpdCdzIG9ubHkgYVxuICAvLyBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhdm9pZCB1c2luZyBhbiBhcnJheSB0dXBsZS5cbiAgdmFyIGRpZFJlbmRlcklkSG9vayA9IGxvY2FsSWRDb3VudGVyICE9PSAwO1xuICBsb2NhbElkQ291bnRlciA9IDA7XG4gIHJldHVybiBkaWRSZW5kZXJJZEhvb2s7XG59XG5mdW5jdGlvbiBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gVE9ETzogRG9uJ3QgbmVlZCB0byByZXNldCB0aGUgZmxhZ3MgaGVyZSwgYmVjYXVzZSB0aGV5J3JlIHJlc2V0IGluIHRoZVxuICAvLyBjb21wbGV0ZSBwaGFzZSAoYnViYmxlUHJvcGVydGllcykuXG5cbiAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfihNb3VudFBhc3NpdmVEZXYgfCBNb3VudExheW91dERldiB8IFBhc3NpdmUgfCBVcGRhdGUpO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH4oUGFzc2l2ZSB8IFVwZGF0ZSk7XG4gIH1cblxuICBjdXJyZW50LmxhbmVzID0gcmVtb3ZlTGFuZXMoY3VycmVudC5sYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcmVzZXRIb29rc0FmdGVyVGhyb3coKSB7XG4gIC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmNlLlxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSkge1xuICAgIC8vIFRoZXJlIHdlcmUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMuIFRoZXNlIGFyZSBvbmx5IHZhbGlkIGZvciB0aGlzIHJlbmRlclxuICAgIC8vIHBoYXNlLCB3aGljaCB3ZSBhcmUgbm93IGFib3J0aW5nLiBSZW1vdmUgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWVzIHNvXG4gICAgLy8gdGhleSBkbyBub3QgcGVyc2lzdCB0byB0aGUgbmV4dCByZW5kZXIuIERvIG5vdCByZW1vdmUgdXBkYXRlcyBmcm9tIGhvb2tzXG4gICAgLy8gdGhhdCB3ZXJlbid0IHByb2Nlc3NlZC5cbiAgICAvL1xuICAgIC8vIE9ubHkgcmVzZXQgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWUgaWYgaXQgaGFzIGEgY2xvbmUuIElmIGl0IGRvZXNcbiAgICAvLyBub3QgaGF2ZSBhIGNsb25lLCB0aGF0IG1lYW5zIGl0IHdhc24ndCBwcm9jZXNzZWQsIGFuZCB0aGUgdXBkYXRlcyB3ZXJlXG4gICAgLy8gc2NoZWR1bGVkIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgdmFyIGhvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICAgICAgaWYgKHF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBob29rID0gaG9vay5uZXh0O1xuICAgIH1cblxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG4gIH1cblxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcbiAgbG9jYWxJZENvdW50ZXIgPSAwO1xufVxuXG5mdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgdmFyIGhvb2sgPSB7XG4gICAgbWVtb2l6ZWRTdGF0ZTogbnVsbCxcbiAgICBiYXNlU3RhdGU6IG51bGwsXG4gICAgYmFzZVF1ZXVlOiBudWxsLFxuICAgIHF1ZXVlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdFxuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IGhvb2s7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IGhvb2s7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBib3RoIGZvciB1cGRhdGVzIGFuZCBmb3IgcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgYVxuICAvLyByZW5kZXIgcGhhc2UgdXBkYXRlLiBJdCBhc3N1bWVzIHRoZXJlIGlzIGVpdGhlciBhIGN1cnJlbnQgaG9vayB3ZSBjYW5cbiAgLy8gY2xvbmUsIG9yIGEgd29yay1pbi1wcm9ncmVzcyBob29rIGZyb20gYSBwcmV2aW91cyByZW5kZXIgcGFzcyB0aGF0IHdlIGNhblxuICAvLyB1c2UgYXMgYSBiYXNlLiBXaGVuIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGJhc2UgbGlzdCwgd2UgbXVzdCBzd2l0Y2ggdG9cbiAgLy8gdGhlIGRpc3BhdGNoZXIgdXNlZCBmb3IgbW91bnRzLlxuICB2YXIgbmV4dEN1cnJlbnRIb29rO1xuXG4gIGlmIChjdXJyZW50SG9vayA9PT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICB9XG5cbiAgdmFyIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICB9XG5cbiAgaWYgKG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgIT09IG51bGwpIHtcbiAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSB3b3JrLWluLXByb2dyZXNzLiBSZXVzZSBpdC5cbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgfSBlbHNlIHtcbiAgICAvLyBDbG9uZSBmcm9tIHRoZSBjdXJyZW50IGhvb2suXG4gICAgaWYgKG5leHRDdXJyZW50SG9vayA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuJyk7XG4gICAgfVxuXG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gICAgdmFyIG5ld0hvb2sgPSB7XG4gICAgICBtZW1vaXplZFN0YXRlOiBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50SG9vay5iYXNlU3RhdGUsXG4gICAgICBiYXNlUXVldWU6IGN1cnJlbnRIb29rLmJhc2VRdWV1ZSxcbiAgICAgIHF1ZXVlOiBjdXJyZW50SG9vay5xdWV1ZSxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdC5cbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IG5ld0hvb2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBuZXdIb29rO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSB7XG4gIHJldHVybiB7XG4gICAgbGFzdEVmZmVjdDogbnVsbCxcbiAgICBzdG9yZXM6IG51bGxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmFzaWNTdGF0ZVJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAvLyAkRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICByZXR1cm4gdHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbihzdGF0ZSkgOiBhY3Rpb247XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIGluaXRpYWxTdGF0ZTtcblxuICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdChpbml0aWFsQXJnKTtcbiAgfSBlbHNlIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsQXJnO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGludGVybGVhdmVkOiBudWxsLFxuICAgIGxhbmVzOiBOb0xhbmVzLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IHJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICBob29rLnF1ZXVlID0gcXVldWU7XG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoID0gZGlzcGF0Y2hSZWR1Y2VyQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICBpZiAocXVldWUgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgfVxuXG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgY3VycmVudCA9IGN1cnJlbnRIb29rOyAvLyBUaGUgbGFzdCByZWJhc2UgdXBkYXRlIHRoYXQgaXMgTk9UIHBhcnQgb2YgdGhlIGJhc2Ugc3RhdGUuXG5cbiAgdmFyIGJhc2VRdWV1ZSA9IGN1cnJlbnQuYmFzZVF1ZXVlOyAvLyBUaGUgbGFzdCBwZW5kaW5nIHVwZGF0ZSB0aGF0IGhhc24ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG5cbiAgdmFyIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmdRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFdlIGhhdmUgbmV3IHVwZGF0ZXMgdGhhdCBoYXZlbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cbiAgICAvLyBXZSdsbCBhZGQgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cbiAgICBpZiAoYmFzZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAvLyBNZXJnZSB0aGUgcGVuZGluZyBxdWV1ZSBhbmQgdGhlIGJhc2UgcXVldWUuXG4gICAgICB2YXIgYmFzZUZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgICB2YXIgcGVuZGluZ0ZpcnN0ID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICBiYXNlUXVldWUubmV4dCA9IHBlbmRpbmdGaXJzdDtcbiAgICAgIHBlbmRpbmdRdWV1ZS5uZXh0ID0gYmFzZUZpcnN0O1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChjdXJyZW50LmJhc2VRdWV1ZSAhPT0gYmFzZVF1ZXVlKSB7XG4gICAgICAgIC8vIEludGVybmFsIGludmFyaWFudCB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBmZWFzaWJseSBjb3VsZCBpblxuICAgICAgICAvLyB0aGUgZnV0dXJlIGlmIHdlIGltcGxlbWVudCByZXN1bWluZywgb3Igc29tZSBmb3JtIG9mIHRoYXQuXG4gICAgICAgIGVycm9yKCdJbnRlcm5hbCBlcnJvcjogRXhwZWN0ZWQgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSB0byBiZSBhIGNsb25lLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudC5iYXNlUXVldWUgPSBiYXNlUXVldWUgPSBwZW5kaW5nUXVldWU7XG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoYmFzZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gV2UgaGF2ZSBhIHF1ZXVlIHRvIHByb2Nlc3MuXG4gICAgdmFyIGZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgdmFyIG5ld1N0YXRlID0gY3VycmVudC5iYXNlU3RhdGU7XG4gICAgdmFyIG5ld0Jhc2VTdGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlTGFzdCA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0O1xuXG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZTtcblxuICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpKSB7XG4gICAgICAgIC8vIFByaW9yaXR5IGlzIGluc3VmZmljaWVudC4gU2tpcCB0aGlzIHVwZGF0ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3RcbiAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgIC8vIHVwZGF0ZS9zdGF0ZS5cbiAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbmV3QmFzZVF1ZXVlTGFzdCA9IGNsb25lO1xuICAgICAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBjbG9uZTtcbiAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG4gICAgICAgIC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlXG4gICAgICAgIC8vIHJlbmRlckxhbmVzIGZyb20gdGhlIG9yaWdpbmFsIGxhbmVzLlxuXG5cbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyA9IG1lcmdlTGFuZXMoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcywgdXBkYXRlTGFuZSk7XG4gICAgICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXModXBkYXRlTGFuZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIHVwZGF0ZSBkb2VzIGhhdmUgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgLy8gVGhpcyB1cGRhdGUgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIHNvIHdlIG5ldmVyIHdhbnQgdW5jb21taXRcbiAgICAgICAgICAgIC8vIGl0LiBVc2luZyBOb0xhbmUgd29ya3MgYmVjYXVzZSAwIGlzIGEgc3Vic2V0IG9mIGFsbCBiaXRtYXNrcywgc29cbiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBuZXZlciBiZSBza2lwcGVkIGJ5IHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgIGxhbmU6IE5vTGFuZSxcbiAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gX2Nsb25lO1xuICAgICAgICB9IC8vIFByb2Nlc3MgdGhpcyB1cGRhdGUuXG5cblxuICAgICAgICBpZiAodXBkYXRlLmhhc0VhZ2VyU3RhdGUpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHVwZGF0ZSBpcyBhIHN0YXRlIHVwZGF0ZSAobm90IGEgcmVkdWNlcikgYW5kIHdhcyBwcm9jZXNzZWQgZWFnZXJseSxcbiAgICAgICAgICAvLyB3ZSBjYW4gdXNlIHRoZSBlYWdlcmx5IGNvbXB1dGVkIHN0YXRlXG4gICAgICAgICAgbmV3U3RhdGUgPSB1cGRhdGUuZWFnZXJTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYWN0aW9uID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgICAgICBuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsICYmIHVwZGF0ZSAhPT0gZmlyc3QpO1xuXG4gICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBuZXdCYXNlUXVldWVGaXJzdDtcbiAgICB9IC8vIE1hcmsgdGhhdCB0aGUgZmliZXIgcGVyZm9ybWVkIHdvcmssIGJ1dCBvbmx5IGlmIHRoZSBuZXcgc3RhdGUgaXNcbiAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgaWYgKCFvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICBob29rLmJhc2VTdGF0ZSA9IG5ld0Jhc2VTdGF0ZTtcbiAgICBob29rLmJhc2VRdWV1ZSA9IG5ld0Jhc2VRdWV1ZUxhc3Q7XG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBJbnRlcmxlYXZlZCB1cGRhdGVzIGFyZSBzdG9yZWQgb24gYSBzZXBhcmF0ZSBxdWV1ZS4gV2UgYXJlbid0IGdvaW5nIHRvXG4gIC8vIHByb2Nlc3MgdGhlbSBkdXJpbmcgdGhpcyByZW5kZXIsIGJ1dCB3ZSBkbyBuZWVkIHRvIHRyYWNrIHdoaWNoIGxhbmVzXG4gIC8vIGFyZSByZW1haW5pbmcuXG5cblxuICB2YXIgbGFzdEludGVybGVhdmVkID0gcXVldWUuaW50ZXJsZWF2ZWQ7XG5cbiAgaWYgKGxhc3RJbnRlcmxlYXZlZCAhPT0gbnVsbCkge1xuICAgIHZhciBpbnRlcmxlYXZlZCA9IGxhc3RJbnRlcmxlYXZlZDtcblxuICAgIGRvIHtcbiAgICAgIHZhciBpbnRlcmxlYXZlZExhbmUgPSBpbnRlcmxlYXZlZC5sYW5lO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcyA9IG1lcmdlTGFuZXMoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5sYW5lcywgaW50ZXJsZWF2ZWRMYW5lKTtcbiAgICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMoaW50ZXJsZWF2ZWRMYW5lKTtcbiAgICAgIGludGVybGVhdmVkID0gaW50ZXJsZWF2ZWQubmV4dDtcbiAgICB9IHdoaWxlIChpbnRlcmxlYXZlZCAhPT0gbGFzdEludGVybGVhdmVkKTtcbiAgfSBlbHNlIGlmIChiYXNlUXVldWUgPT09IG51bGwpIHtcbiAgICAvLyBgcXVldWUubGFuZXNgIGlzIHVzZWQgZm9yIGVudGFuZ2xpbmcgdHJhbnNpdGlvbnMuIFdlIGNhbiBzZXQgaXQgYmFjayB0b1xuICAgIC8vIHplcm8gb25jZSB0aGUgcXVldWUgaXMgZW1wdHkuXG4gICAgcXVldWUubGFuZXMgPSBOb0xhbmVzO1xuICB9XG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWU7XG5cbiAgaWYgKHF1ZXVlID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gIH1cblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjsgLy8gVGhpcyBpcyBhIHJlLXJlbmRlci4gQXBwbHkgdGhlIG5ldyByZW5kZXIgcGhhc2UgdXBkYXRlcyB0byB0aGUgcHJldmlvdXNcbiAgLy8gd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICB2YXIgbGFzdFJlbmRlclBoYXNlVXBkYXRlID0gcXVldWUucGVuZGluZztcbiAgdmFyIG5ld1N0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChsYXN0UmVuZGVyUGhhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgcXVldWUgZG9lc24ndCBwZXJzaXN0IHBhc3QgdGhpcyByZW5kZXIgcGFzcy5cbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICB2YXIgZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZS5uZXh0O1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlO1xuXG4gICAgZG8ge1xuICAgICAgLy8gUHJvY2VzcyB0aGlzIHJlbmRlciBwaGFzZSB1cGRhdGUuIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhlXG4gICAgICAvLyBwcmlvcml0eSBiZWNhdXNlIGl0IHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50XG4gICAgICAvLyByZW5kZXIncy5cbiAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgbmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgfSB3aGlsZSAodXBkYXRlICE9PSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlKTsgLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlOyAvLyBEb24ndCBwZXJzaXN0IHRoZSBzdGF0ZSBhY2N1bXVsYXRlZCBmcm9tIHRoZSByZW5kZXIgcGhhc2UgdXBkYXRlcyB0b1xuICAgIC8vIHRoZSBiYXNlIHN0YXRlIHVubGVzcyB0aGUgcXVldWUgaXMgZW1wdHkuXG4gICAgLy8gVE9ETzogTm90IHN1cmUgaWYgdGhpcyBpcyB0aGUgZGVzaXJlZCBzZW1hbnRpY3MsIGJ1dCBpdCdzIHdoYXQgd2VcbiAgICAvLyBkbyBmb3IgZ0RTRlAuIEkgY2FuJ3QgcmVtZW1iZXIgd2h5LlxuXG4gICAgaWYgKGhvb2suYmFzZVF1ZXVlID09PSBudWxsKSB7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH1cblxuICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICByZXR1cm4gW25ld1N0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCkge1xuICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0U25hcHNob3Q7XG4gIHZhciBpc0h5ZHJhdGluZyA9IGdldElzSHlkcmF0aW5nKCk7XG5cbiAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgaWYgKGdldFNlcnZlclNuYXBzaG90ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBnZXRTZXJ2ZXJTbmFwc2hvdCwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yICcgKyAnc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFdpbGwgcmV2ZXJ0IHRvIGNsaWVudCByZW5kZXJpbmcuJyk7XG4gICAgfVxuXG4gICAgbmV4dFNuYXBzaG90ID0gZ2V0U2VydmVyU25hcHNob3QoKTtcblxuICAgIHtcbiAgICAgIGlmICghZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QpIHtcbiAgICAgICAgaWYgKG5leHRTbmFwc2hvdCAhPT0gZ2V0U2VydmVyU25hcHNob3QoKSkge1xuICAgICAgICAgIGVycm9yKCdUaGUgcmVzdWx0IG9mIGdldFNlcnZlclNuYXBzaG90IHNob3VsZCBiZSBjYWNoZWQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcCcpO1xuXG4gICAgICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5leHRTbmFwc2hvdCA9IGdldFNuYXBzaG90KCk7XG5cbiAgICB7XG4gICAgICBpZiAoIWRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90KSB7XG4gICAgICAgIHZhciBjYWNoZWRTbmFwc2hvdCA9IGdldFNuYXBzaG90KCk7XG5cbiAgICAgICAgaWYgKCFvYmplY3RJcyhuZXh0U25hcHNob3QsIGNhY2hlZFNuYXBzaG90KSkge1xuICAgICAgICAgIGVycm9yKCdUaGUgcmVzdWx0IG9mIGdldFNuYXBzaG90IHNob3VsZCBiZSBjYWNoZWQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcCcpO1xuXG4gICAgICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBVbmxlc3Mgd2UncmUgcmVuZGVyaW5nIGEgYmxvY2tpbmcgbGFuZSwgc2NoZWR1bGUgYSBjb25zaXN0ZW5jeSBjaGVjay5cbiAgICAvLyBSaWdodCBiZWZvcmUgY29tbWl0dGluZywgd2Ugd2lsbCB3YWxrIHRoZSB0cmVlIGFuZCBjaGVjayBpZiBhbnkgb2YgdGhlXG4gICAgLy8gc3RvcmVzIHdlcmUgbXV0YXRlZC5cbiAgICAvL1xuICAgIC8vIFdlIHdvbid0IGRvIHRoaXMgaWYgd2UncmUgaHlkcmF0aW5nIHNlcnZlci1yZW5kZXJlZCBjb250ZW50LCBiZWNhdXNlIGlmXG4gICAgLy8gdGhlIGNvbnRlbnQgaXMgc3RhbGUsIGl0J3MgYWxyZWFkeSB2aXNpYmxlIGFueXdheS4gSW5zdGVhZCB3ZSdsbCBwYXRjaFxuICAgIC8vIGl0IHVwIGluIGEgcGFzc2l2ZSBlZmZlY3QuXG5cblxuICAgIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgICBpZiAocm9vdCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuXG4gICAgaWYgKCFpbmNsdWRlc0Jsb2NraW5nTGFuZShyb290LCByZW5kZXJMYW5lcykpIHtcbiAgICAgIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuICAgIH1cbiAgfSAvLyBSZWFkIHRoZSBjdXJyZW50IHNuYXBzaG90IGZyb20gdGhlIHN0b3JlIG9uIGV2ZXJ5IHJlbmRlci4gVGhpcyBicmVha3MgdGhlXG4gIC8vIG5vcm1hbCBydWxlcyBvZiBSZWFjdCwgYW5kIG9ubHkgd29ya3MgYmVjYXVzZSBzdG9yZSB1cGRhdGVzIGFyZVxuICAvLyBhbHdheXMgc3luY2hyb25vdXMuXG5cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXh0U25hcHNob3Q7XG4gIHZhciBpbnN0ID0ge1xuICAgIHZhbHVlOiBuZXh0U25hcHNob3QsXG4gICAgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90XG4gIH07XG4gIGhvb2sucXVldWUgPSBpbnN0OyAvLyBTY2hlZHVsZSBhbiBlZmZlY3QgdG8gc3Vic2NyaWJlIHRvIHRoZSBzdG9yZS5cblxuICBtb3VudEVmZmVjdChzdWJzY3JpYmVUb1N0b3JlLmJpbmQobnVsbCwgZmliZXIsIGluc3QsIHN1YnNjcmliZSksIFtzdWJzY3JpYmVdKTsgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIHVwZGF0ZSB0aGUgbXV0YWJsZSBpbnN0YW5jZSBmaWVsZHMuIFdlIHdpbGwgdXBkYXRlXG4gIC8vIHRoaXMgd2hlbmV2ZXIgc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgb3IgdmFsdWUgY2hhbmdlcy4gQmVjYXVzZSB0aGVyZSdzIG5vXG4gIC8vIGNsZWFuLXVwIGZ1bmN0aW9uLCBhbmQgd2UgdHJhY2sgdGhlIGRlcHMgY29ycmVjdGx5LCB3ZSBjYW4gY2FsbCBwdXNoRWZmZWN0XG4gIC8vIGRpcmVjdGx5LCB3aXRob3V0IHN0b3JpbmcgYW55IGFkZGl0aW9uYWwgc3RhdGUuIEZvciB0aGUgc2FtZSByZWFzb24sIHdlXG4gIC8vIGRvbid0IG5lZWQgdG8gc2V0IGEgc3RhdGljIGZsYWcsIGVpdGhlci5cbiAgLy8gVE9ETzogV2UgY2FuIG1vdmUgdGhpcyB0byB0aGUgcGFzc2l2ZSBwaGFzZSBvbmNlIHdlIGFkZCBhIHByZS1jb21taXRcbiAgLy8gY29uc2lzdGVuY3kgY2hlY2suIFNlZSB0aGUgbmV4dCBjb21tZW50LlxuXG4gIGZpYmVyLmZsYWdzIHw9IFBhc3NpdmU7XG4gIHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgUGFzc2l2ZSQxLCB1cGRhdGVTdG9yZUluc3RhbmNlLmJpbmQobnVsbCwgZmliZXIsIGluc3QsIG5leHRTbmFwc2hvdCwgZ2V0U25hcHNob3QpLCB1bmRlZmluZWQsIG51bGwpO1xuICByZXR1cm4gbmV4dFNuYXBzaG90O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCkge1xuICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpOyAvLyBSZWFkIHRoZSBjdXJyZW50IHNuYXBzaG90IGZyb20gdGhlIHN0b3JlIG9uIGV2ZXJ5IHJlbmRlci4gVGhpcyBicmVha3MgdGhlXG4gIC8vIG5vcm1hbCBydWxlcyBvZiBSZWFjdCwgYW5kIG9ubHkgd29ya3MgYmVjYXVzZSBzdG9yZSB1cGRhdGVzIGFyZVxuICAvLyBhbHdheXMgc3luY2hyb25vdXMuXG5cbiAgdmFyIG5leHRTbmFwc2hvdCA9IGdldFNuYXBzaG90KCk7XG5cbiAge1xuICAgIGlmICghZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QpIHtcbiAgICAgIHZhciBjYWNoZWRTbmFwc2hvdCA9IGdldFNuYXBzaG90KCk7XG5cbiAgICAgIGlmICghb2JqZWN0SXMobmV4dFNuYXBzaG90LCBjYWNoZWRTbmFwc2hvdCkpIHtcbiAgICAgICAgZXJyb3IoJ1RoZSByZXN1bHQgb2YgZ2V0U25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wJyk7XG5cbiAgICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBwcmV2U25hcHNob3QgPSBob29rLm1lbW9pemVkU3RhdGU7XG4gIHZhciBzbmFwc2hvdENoYW5nZWQgPSAhb2JqZWN0SXMocHJldlNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuXG4gIGlmIChzbmFwc2hvdENoYW5nZWQpIHtcbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXh0U25hcHNob3Q7XG4gICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgfVxuXG4gIHZhciBpbnN0ID0gaG9vay5xdWV1ZTtcbiAgdXBkYXRlRWZmZWN0KHN1YnNjcmliZVRvU3RvcmUuYmluZChudWxsLCBmaWJlciwgaW5zdCwgc3Vic2NyaWJlKSwgW3N1YnNjcmliZV0pOyAvLyBXaGVuZXZlciBnZXRTbmFwc2hvdCBvciBzdWJzY3JpYmUgY2hhbmdlcywgd2UgbmVlZCB0byBjaGVjayBpbiB0aGVcbiAgLy8gY29tbWl0IHBoYXNlIGlmIHRoZXJlIHdhcyBhbiBpbnRlcmxlYXZlZCBtdXRhdGlvbi4gSW4gY29uY3VycmVudCBtb2RlXG4gIC8vIHRoaXMgY2FuIGhhcHBlbiBhbGwgdGhlIHRpbWUsIGJ1dCBldmVuIGluIHN5bmNocm9ub3VzIG1vZGUsIGFuIGVhcmxpZXJcbiAgLy8gZWZmZWN0IG1heSBoYXZlIG11dGF0ZWQgdGhlIHN0b3JlLlxuXG4gIGlmIChpbnN0LmdldFNuYXBzaG90ICE9PSBnZXRTbmFwc2hvdCB8fCBzbmFwc2hvdENoYW5nZWQgfHwgLy8gQ2hlY2sgaWYgdGhlIHN1c2JjcmliZSBmdW5jdGlvbiBjaGFuZ2VkLiBXZSBjYW4gc2F2ZSBzb21lIG1lbW9yeSBieVxuICAvLyBjaGVja2luZyB3aGV0aGVyIHdlIHNjaGVkdWxlZCBhIHN1YnNjcmlwdGlvbiBlZmZlY3QgYWJvdmUuXG4gIHdvcmtJblByb2dyZXNzSG9vayAhPT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzc0hvb2subWVtb2l6ZWRTdGF0ZS50YWcgJiBIYXNFZmZlY3QpIHtcbiAgICBmaWJlci5mbGFncyB8PSBQYXNzaXZlO1xuICAgIHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgUGFzc2l2ZSQxLCB1cGRhdGVTdG9yZUluc3RhbmNlLmJpbmQobnVsbCwgZmliZXIsIGluc3QsIG5leHRTbmFwc2hvdCwgZ2V0U25hcHNob3QpLCB1bmRlZmluZWQsIG51bGwpOyAvLyBVbmxlc3Mgd2UncmUgcmVuZGVyaW5nIGEgYmxvY2tpbmcgbGFuZSwgc2NoZWR1bGUgYSBjb25zaXN0ZW5jeSBjaGVjay5cbiAgICAvLyBSaWdodCBiZWZvcmUgY29tbWl0dGluZywgd2Ugd2lsbCB3YWxrIHRoZSB0cmVlIGFuZCBjaGVjayBpZiBhbnkgb2YgdGhlXG4gICAgLy8gc3RvcmVzIHdlcmUgbXV0YXRlZC5cblxuICAgIHZhciByb290ID0gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCk7XG5cbiAgICBpZiAocm9vdCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuXG4gICAgaWYgKCFpbmNsdWRlc0Jsb2NraW5nTGFuZShyb290LCByZW5kZXJMYW5lcykpIHtcbiAgICAgIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCBuZXh0U25hcHNob3QpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0U25hcHNob3Q7XG59XG5cbmZ1bmN0aW9uIHB1c2hTdG9yZUNvbnNpc3RlbmN5Q2hlY2soZmliZXIsIGdldFNuYXBzaG90LCByZW5kZXJlZFNuYXBzaG90KSB7XG4gIGZpYmVyLmZsYWdzIHw9IFN0b3JlQ29uc2lzdGVuY3k7XG4gIHZhciBjaGVjayA9IHtcbiAgICBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3QsXG4gICAgdmFsdWU6IHJlbmRlcmVkU25hcHNob3RcbiAgfTtcbiAgdmFyIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZTtcblxuICBpZiAoY29tcG9uZW50VXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKTtcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gY29tcG9uZW50VXBkYXRlUXVldWU7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUuc3RvcmVzID0gW2NoZWNrXTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc3RvcmVzID0gY29tcG9uZW50VXBkYXRlUXVldWUuc3RvcmVzO1xuXG4gICAgaWYgKHN0b3JlcyA9PT0gbnVsbCkge1xuICAgICAgY29tcG9uZW50VXBkYXRlUXVldWUuc3RvcmVzID0gW2NoZWNrXTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RvcmVzLnB1c2goY2hlY2spO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVTdG9yZUluc3RhbmNlKGZpYmVyLCBpbnN0LCBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90KSB7XG4gIC8vIFRoZXNlIGFyZSB1cGRhdGVkIGluIHRoZSBwYXNzaXZlIHBoYXNlXG4gIGluc3QudmFsdWUgPSBuZXh0U25hcHNob3Q7XG4gIGluc3QuZ2V0U25hcHNob3QgPSBnZXRTbmFwc2hvdDsgLy8gU29tZXRoaW5nIG1heSBoYXZlIGJlZW4gbXV0YXRlZCBpbiBiZXR3ZWVuIHJlbmRlciBhbmQgY29tbWl0LiBUaGlzIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiBpbiBhbiBldmVudCB0aGF0IGZpcmVkIGJlZm9yZSB0aGUgcGFzc2l2ZSBlZmZlY3RzLCBvciBpdCBjb3VsZFxuICAvLyBoYXZlIGJlZW4gaW4gYSBsYXlvdXQgZWZmZWN0LiBJbiB0aGF0IGNhc2UsIHdlIHdvdWxkIGhhdmUgdXNlZCB0aGUgb2xkXG4gIC8vIHNuYXBzaG8gYW5kIGdldFNuYXBzaG90IHZhbHVlcyB0byBiYWlsIG91dC4gV2UgbmVlZCB0byBjaGVjayBvbmUgbW9yZSB0aW1lLlxuXG4gIGlmIChjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpKSB7XG4gICAgLy8gRm9yY2UgYSByZS1yZW5kZXIuXG4gICAgZm9yY2VTdG9yZVJlcmVuZGVyKGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdWJzY3JpYmVUb1N0b3JlKGZpYmVyLCBpbnN0LCBzdWJzY3JpYmUpIHtcbiAgdmFyIGhhbmRsZVN0b3JlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoZSBzdG9yZSBjaGFuZ2VkLiBDaGVjayBpZiB0aGUgc25hcHNob3QgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlXG4gICAgLy8gcmVhZCBmcm9tIHRoZSBzdG9yZS5cbiAgICBpZiAoY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSkge1xuICAgICAgLy8gRm9yY2UgYSByZS1yZW5kZXIuXG4gICAgICBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpO1xuICAgIH1cbiAgfTsgLy8gU3Vic2NyaWJlIHRvIHRoZSBzdG9yZSBhbmQgcmV0dXJuIGEgY2xlYW4tdXAgZnVuY3Rpb24uXG5cblxuICByZXR1cm4gc3Vic2NyaWJlKGhhbmRsZVN0b3JlQ2hhbmdlKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSB7XG4gIHZhciBsYXRlc3RHZXRTbmFwc2hvdCA9IGluc3QuZ2V0U25hcHNob3Q7XG4gIHZhciBwcmV2VmFsdWUgPSBpbnN0LnZhbHVlO1xuXG4gIHRyeSB7XG4gICAgdmFyIG5leHRWYWx1ZSA9IGxhdGVzdEdldFNuYXBzaG90KCk7XG4gICAgcmV0dXJuICFvYmplY3RJcyhwcmV2VmFsdWUsIG5leHRWYWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9yY2VTdG9yZVJlcmVuZGVyKGZpYmVyKSB7XG4gIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gIGlmICh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGUoKTtcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB2YXIgcXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBpbnRlcmxlYXZlZDogbnVsbCxcbiAgICBsYW5lczogTm9MYW5lcyxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gIH07XG4gIGhvb2sucXVldWUgPSBxdWV1ZTtcbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2ggPSBkaXNwYXRjaFNldFN0YXRlLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gcHVzaEVmZmVjdCh0YWcsIGNyZWF0ZSwgZGVzdHJveSwgZGVwcykge1xuICB2YXIgZWZmZWN0ID0ge1xuICAgIHRhZzogdGFnLFxuICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgZGVwczogZGVwcyxcbiAgICAvLyBDaXJjdWxhclxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgdmFyIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZTtcblxuICBpZiAoY29tcG9uZW50VXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKTtcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gY29tcG9uZW50VXBkYXRlUXVldWU7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICB9IGVsc2Uge1xuICAgIHZhciBsYXN0RWZmZWN0ID0gY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgIGxhc3RFZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICAgIGVmZmVjdC5uZXh0ID0gZmlyc3RFZmZlY3Q7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlZmZlY3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG5cbiAge1xuICAgIHZhciBfcmVmMiA9IHtcbiAgICAgIGN1cnJlbnQ6IGluaXRpYWxWYWx1ZVxuICAgIH07XG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gX3JlZjI7XG4gICAgcmV0dXJuIF9yZWYyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIGhvb2subWVtb2l6ZWRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBob29rRmxhZ3MsIGNyZWF0ZSwgdW5kZWZpbmVkLCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBkZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gIGlmIChjdXJyZW50SG9vayAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2RWZmZWN0ID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICBkZXN0cm95ID0gcHJldkVmZmVjdC5kZXN0cm95O1xuXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2RWZmZWN0LmRlcHM7XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KGhvb2tGbGFncywgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgaG9va0ZsYWdzLCBjcmVhdGUsIGRlc3Ryb3ksIG5leHREZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIGlmICggKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChNb3VudFBhc3NpdmVEZXYgfCBQYXNzaXZlIHwgUGFzc2l2ZVN0YXRpYywgUGFzc2l2ZSQxLCBjcmVhdGUsIGRlcHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtb3VudEVmZmVjdEltcGwoUGFzc2l2ZSB8IFBhc3NpdmVTdGF0aWMsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFBhc3NpdmUsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZmliZXJGbGFncyA9IFVwZGF0ZTtcblxuICB7XG4gICAgZmliZXJGbGFncyB8PSBMYXlvdXRTdGF0aWM7XG4gIH1cblxuICBpZiAoIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSkge1xuICAgIGZpYmVyRmxhZ3MgfD0gTW91bnRMYXlvdXREZXY7XG4gIH1cblxuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdChjcmVhdGUsIHJlZikge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZWZDYWxsYmFjayA9IHJlZjtcblxuICAgIHZhciBfaW5zdCA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmQ2FsbGJhY2soX2luc3QpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZWZDYWxsYmFjayhudWxsKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZWZPYmplY3QgPSByZWY7XG5cbiAgICB7XG4gICAgICBpZiAoIXJlZk9iamVjdC5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgZmlyc3QgYXJndW1lbnQgdG8gZWl0aGVyIGJlIGEgJyArICdyZWYgY2FsbGJhY2sgb3IgUmVhY3QuY3JlYXRlUmVmKCkgb2JqZWN0LiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCAnYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKHJlZk9iamVjdCkuam9pbignLCAnKSArICd9Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIF9pbnN0MiA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBfaW5zdDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZk9iamVjdC5jdXJyZW50ID0gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHZhciBmaWJlckZsYWdzID0gVXBkYXRlO1xuXG4gIHtcbiAgICBmaWJlckZsYWdzIHw9IExheW91dFN0YXRpYztcbiAgfVxuXG4gIGlmICggKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgZmliZXJGbGFncyB8PSBNb3VudExheW91dERldjtcbiAgfVxuXG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgTGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikgey8vIFRoaXMgaG9vayBpcyBub3JtYWxseSBhIG5vLW9wLlxuICAvLyBUaGUgcmVhY3QtZGVidWctaG9va3MgcGFja2FnZSBpbmplY3RzIGl0cyBvd24gaW1wbGVtZW50YXRpb25cbiAgLy8gc28gdGhhdCBlLmcuIERldlRvb2xzIGNhbiBkaXNwbGF5IGN1c3RvbSBob29rIHZhbHVlcy5cbn1cblxudmFyIHVwZGF0ZURlYnVnVmFsdWUgPSBtb3VudERlYnVnVmFsdWU7XG5cbmZ1bmN0aW9uIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIG5leHREZXBzXTtcbiAgcmV0dXJuIGNhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiBtb3VudE1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgLy8gQXNzdW1lIHRoZXNlIGFyZSBkZWZpbmVkLiBJZiB0aGV5J3JlIG5vdCwgYXJlSG9va0lucHV0c0VxdWFsIHdpbGwgd2Fybi5cbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZTdGF0ZVsxXTtcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciByZXNvbHZlZEN1cnJlbnRIb29rID0gY3VycmVudEhvb2s7XG4gIHZhciBwcmV2VmFsdWUgPSByZXNvbHZlZEN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGU7XG4gIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbChob29rLCBwcmV2VmFsdWUsIHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG5cbiAgaWYgKGN1cnJlbnRIb29rID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlcmVuZGVyIGR1cmluZyBhIG1vdW50LlxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGEgcmVyZW5kZXIgZHVyaW5nIGFuIHVwZGF0ZS5cbiAgICB2YXIgcHJldlZhbHVlID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgcHJldlZhbHVlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgcHJldlZhbHVlLCB2YWx1ZSkge1xuICB2YXIgc2hvdWxkRGVmZXJWYWx1ZSA9ICFpbmNsdWRlc09ubHlOb25VcmdlbnRMYW5lcyhyZW5kZXJMYW5lcyk7XG5cbiAgaWYgKHNob3VsZERlZmVyVmFsdWUpIHtcbiAgICAvLyBUaGlzIGlzIGFuIHVyZ2VudCB1cGRhdGUuIElmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZCwga2VlcCB1c2luZyB0aGVcbiAgICAvLyBwcmV2aW91cyB2YWx1ZSBhbmQgc3Bhd24gYSBkZWZlcnJlZCByZW5kZXIgdG8gdXBkYXRlIGl0IGxhdGVyLlxuICAgIGlmICghb2JqZWN0SXModmFsdWUsIHByZXZWYWx1ZSkpIHtcbiAgICAgIC8vIFNjaGVkdWxlIGEgZGVmZXJyZWQgcmVuZGVyXG4gICAgICB2YXIgZGVmZXJyZWRMYW5lID0gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKTtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgPSBtZXJnZUxhbmVzKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMsIGRlZmVycmVkTGFuZSk7XG4gICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKGRlZmVycmVkTGFuZSk7IC8vIFNldCB0aGlzIHRvIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcmVuZGVyZWQgdmFsdWUgaXMgaW5jb25zaXN0ZW50XG4gICAgICAvLyBmcm9tIHRoZSBsYXRlc3QgdmFsdWUuIFRoZSBuYW1lIFwiYmFzZVN0YXRlXCIgZG9lc24ndCByZWFsbHkgbWF0Y2ggaG93IHdlXG4gICAgICAvLyB1c2UgaXQgYmVjYXVzZSB3ZSdyZSByZXVzaW5nIGEgc3RhdGUgaG9vayBmaWVsZCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGFcbiAgICAgIC8vIG5ldyBvbmUuXG5cbiAgICAgIGhvb2suYmFzZVN0YXRlID0gdHJ1ZTtcbiAgICB9IC8vIFJldXNlIHRoZSBwcmV2aW91cyB2YWx1ZVxuXG5cbiAgICByZXR1cm4gcHJldlZhbHVlO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgbm90IGFuIHVyZ2VudCB1cGRhdGUsIHNvIHdlIGNhbiB1c2UgdGhlIGxhdGVzdCB2YWx1ZSByZWdhcmRsZXNzXG4gICAgLy8gb2Ygd2hhdCBpdCBpcy4gTm8gbmVlZCB0byBkZWZlciBpdC5cbiAgICAvLyBIb3dldmVyLCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgc3Bhd25lZCByZW5kZXIsIHRoZW4gd2UgbmVlZCB0byBtYXJrXG4gICAgLy8gdGhpcyBhcyBhbiB1cGRhdGUgdG8gcHJldmVudCB0aGUgZmliZXIgZnJvbSBiYWlsaW5nIG91dC5cbiAgICAvL1xuICAgIC8vIGBiYXNlU3RhdGVgIGlzIHRydWUgd2hlbiB0aGUgY3VycmVudCB2YWx1ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcmVuZGVyZWRcbiAgICAvLyB2YWx1ZS4gVGhlIG5hbWUgZG9lc24ndCByZWFsbHkgbWF0Y2ggaG93IHdlIHVzZSBpdCBiZWNhdXNlIHdlJ3JlIHJldXNpbmdcbiAgICAvLyBhIHN0YXRlIGhvb2sgZmllbGQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuXG4gICAgaWYgKGhvb2suYmFzZVN0YXRlKSB7XG4gICAgICAvLyBGbGlwIHRoaXMgYmFjayB0byBmYWxzZS5cbiAgICAgIGhvb2suYmFzZVN0YXRlID0gZmFsc2U7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oc2V0UGVuZGluZywgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoKTtcbiAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KGhpZ2hlckV2ZW50UHJpb3JpdHkocHJldmlvdXNQcmlvcml0eSwgQ29udGludW91c0V2ZW50UHJpb3JpdHkpKTtcbiAgc2V0UGVuZGluZyh0cnVlKTtcbiAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMi50cmFuc2l0aW9uO1xuICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyLnRyYW5zaXRpb24gPSB7fTtcbiAgdmFyIGN1cnJlbnRUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMi50cmFuc2l0aW9uO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQyLnRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICB0cnkge1xuICAgIHNldFBlbmRpbmcoZmFsc2UpO1xuICAgIGNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KHByZXZpb3VzUHJpb3JpdHkpO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDIudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuXG4gICAge1xuICAgICAgaWYgKHByZXZUcmFuc2l0aW9uID09PSBudWxsICYmIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzKSB7XG4gICAgICAgIHZhciB1cGRhdGVkRmliZXJzQ291bnQgPSBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5zaXplO1xuXG4gICAgICAgIGlmICh1cGRhdGVkRmliZXJzQ291bnQgPiAxMCkge1xuICAgICAgICAgIHdhcm4oJ0RldGVjdGVkIGEgbGFyZ2UgbnVtYmVyIG9mIHVwZGF0ZXMgaW5zaWRlIHN0YXJ0VHJhbnNpdGlvbi4gJyArICdJZiB0aGlzIGlzIGR1ZSB0byBhIHN1YnNjcmlwdGlvbiBwbGVhc2UgcmUtd3JpdGUgaXQgdG8gdXNlIFJlYWN0IHByb3ZpZGVkIGhvb2tzLiAnICsgJ090aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50VHJhbnNpdGlvbigpIHtcbiAgdmFyIF9tb3VudFN0YXRlID0gbW91bnRTdGF0ZShmYWxzZSksXG4gICAgICBpc1BlbmRpbmcgPSBfbW91bnRTdGF0ZVswXSxcbiAgICAgIHNldFBlbmRpbmcgPSBfbW91bnRTdGF0ZVsxXTsgLy8gVGhlIGBzdGFydGAgbWV0aG9kIG5ldmVyIGNoYW5nZXMuXG5cblxuICB2YXIgc3RhcnQgPSBzdGFydFRyYW5zaXRpb24uYmluZChudWxsLCBzZXRQZW5kaW5nKTtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBzdGFydDtcbiAgcmV0dXJuIFtpc1BlbmRpbmcsIHN0YXJ0XTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlVHJhbnNpdGlvbigpIHtcbiAgdmFyIF91cGRhdGVTdGF0ZSA9IHVwZGF0ZVN0YXRlKCksXG4gICAgICBpc1BlbmRpbmcgPSBfdXBkYXRlU3RhdGVbMF07XG5cbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHN0YXJ0ID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICByZXR1cm4gW2lzUGVuZGluZywgc3RhcnRdO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclRyYW5zaXRpb24oKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZSA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIGlzUGVuZGluZyA9IF9yZXJlbmRlclN0YXRlWzBdO1xuXG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBzdGFydCA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgcmV0dXJuIFtpc1BlbmRpbmcsIHN0YXJ0XTtcbn1cblxudmFyIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpIHtcbiAge1xuICAgIHJldHVybiBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SWQoKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHJvb3QgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKTsgLy8gVE9ETzogSW4gRml6eiwgaWQgZ2VuZXJhdGlvbiBpcyBzcGVjaWZpYyB0byBlYWNoIHNlcnZlciBjb25maWcuIE1heWJlIHdlXG4gIC8vIHNob3VsZCBkbyB0aGlzIGluIEZpYmVyLCB0b28/IERlZmVycmluZyB0aGlzIGRlY2lzaW9uIGZvciBub3cgYmVjYXVzZVxuICAvLyB0aGVyZSdzIG5vIG90aGVyIHBsYWNlIHRvIHN0b3JlIHRoZSBwcmVmaXggZXhjZXB0IGZvciBhbiBpbnRlcm5hbCBmaWVsZCBvblxuICAvLyB0aGUgcHVibGljIGNyZWF0ZVJvb3Qgb2JqZWN0LCB3aGljaCB0aGUgZmliZXIgdHJlZSBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZVxuICAvLyBhIHJlZmVyZW5jZSB0by5cblxuICB2YXIgaWRlbnRpZmllclByZWZpeCA9IHJvb3QuaWRlbnRpZmllclByZWZpeDtcbiAgdmFyIGlkO1xuXG4gIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgdmFyIHRyZWVJZCA9IGdldFRyZWVJZCgpOyAvLyBVc2UgYSBjYXB0aWFsIFIgcHJlZml4IGZvciBzZXJ2ZXItZ2VuZXJhdGVkIGlkcy5cblxuICAgIGlkID0gJzonICsgaWRlbnRpZmllclByZWZpeCArICdSJyArIHRyZWVJZDsgLy8gVW5sZXNzIHRoaXMgaXMgdGhlIGZpcnN0IGlkIGF0IHRoaXMgbGV2ZWwsIGFwcGVuZCBhIG51bWJlciBhdCB0aGUgZW5kXG4gICAgLy8gdGhhdCByZXByZXNlbnRzIHRoZSBwb3NpdGlvbiBvZiB0aGlzIHVzZUlkIGhvb2sgYW1vbmcgYWxsIHRoZSB1c2VJZFxuICAgIC8vIGhvb2tzIGZvciB0aGlzIGZpYmVyLlxuXG4gICAgdmFyIGxvY2FsSWQgPSBsb2NhbElkQ291bnRlcisrO1xuXG4gICAgaWYgKGxvY2FsSWQgPiAwKSB7XG4gICAgICBpZCArPSAnSCcgKyBsb2NhbElkLnRvU3RyaW5nKDMyKTtcbiAgICB9XG5cbiAgICBpZCArPSAnOic7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIGEgbG93ZXJjYXNlIHIgcHJlZml4IGZvciBjbGllbnQtZ2VuZXJhdGVkIGlkcy5cbiAgICB2YXIgZ2xvYmFsQ2xpZW50SWQgPSBnbG9iYWxDbGllbnRJZENvdW50ZXIrKztcbiAgICBpZCA9ICc6JyArIGlkZW50aWZpZXJQcmVmaXggKyAncicgKyBnbG9iYWxDbGllbnRJZC50b1N0cmluZygzMikgKyAnOic7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBpZDtcbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJZCgpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIGlkID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoUmVkdWNlckFjdGlvbihmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbM10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKFwiU3RhdGUgdXBkYXRlcyBmcm9tIHRoZSB1c2VTdGF0ZSgpIGFuZCB1c2VSZWR1Y2VyKCkgSG9va3MgZG9uJ3Qgc3VwcG9ydCB0aGUgXCIgKyAnc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgJyArICdyZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gdGhlIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgbGFuZTogbGFuZSxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICBoYXNFYWdlclN0YXRlOiBmYWxzZSxcbiAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcblxuICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpIHtcbiAgICBlbnF1ZXVlUmVuZGVyUGhhc2VVcGRhdGUocXVldWUsIHVwZGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuXG4gICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gICAgICBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUocm9vdCwgcXVldWUsIGxhbmUpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtVcGRhdGVJbkRldlRvb2xzKGZpYmVyLCBsYW5lKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hTZXRTdGF0ZShmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbM10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKFwiU3RhdGUgdXBkYXRlcyBmcm9tIHRoZSB1c2VTdGF0ZSgpIGFuZCB1c2VSZWR1Y2VyKCkgSG9va3MgZG9uJ3Qgc3VwcG9ydCB0aGUgXCIgKyAnc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgJyArICdyZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gdGhlIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgbGFuZTogbGFuZSxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICBoYXNFYWdlclN0YXRlOiBmYWxzZSxcbiAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcblxuICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpIHtcbiAgICBlbnF1ZXVlUmVuZGVyUGhhc2VVcGRhdGUocXVldWUsIHVwZGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChmaWJlci5sYW5lcyA9PT0gTm9MYW5lcyAmJiAoYWx0ZXJuYXRlID09PSBudWxsIHx8IGFsdGVybmF0ZS5sYW5lcyA9PT0gTm9MYW5lcykpIHtcbiAgICAgIC8vIFRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgZW1wdHksIHdoaWNoIG1lYW5zIHdlIGNhbiBlYWdlcmx5IGNvbXB1dGUgdGhlXG4gICAgICAvLyBuZXh0IHN0YXRlIGJlZm9yZSBlbnRlcmluZyB0aGUgcmVuZGVyIHBoYXNlLiBJZiB0aGUgbmV3IHN0YXRlIGlzIHRoZVxuICAgICAgLy8gc2FtZSBhcyB0aGUgY3VycmVudCBzdGF0ZSwgd2UgbWF5IGJlIGFibGUgdG8gYmFpbCBvdXQgZW50aXJlbHkuXG4gICAgICB2YXIgbGFzdFJlbmRlcmVkUmVkdWNlciA9IHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXI7XG5cbiAgICAgIGlmIChsYXN0UmVuZGVyZWRSZWR1Y2VyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gcXVldWUubGFzdFJlbmRlcmVkU3RhdGU7XG4gICAgICAgICAgdmFyIGVhZ2VyU3RhdGUgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTsgLy8gU3Rhc2ggdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUsIGFuZCB0aGUgcmVkdWNlciB1c2VkIHRvIGNvbXB1dGVcbiAgICAgICAgICAvLyBpdCwgb24gdGhlIHVwZGF0ZSBvYmplY3QuIElmIHRoZSByZWR1Y2VyIGhhc24ndCBjaGFuZ2VkIGJ5IHRoZVxuICAgICAgICAgIC8vIHRpbWUgd2UgZW50ZXIgdGhlIHJlbmRlciBwaGFzZSwgdGhlbiB0aGUgZWFnZXIgc3RhdGUgY2FuIGJlIHVzZWRcbiAgICAgICAgICAvLyB3aXRob3V0IGNhbGxpbmcgdGhlIHJlZHVjZXIgYWdhaW4uXG5cbiAgICAgICAgICB1cGRhdGUuaGFzRWFnZXJTdGF0ZSA9IHRydWU7XG4gICAgICAgICAgdXBkYXRlLmVhZ2VyU3RhdGUgPSBlYWdlclN0YXRlO1xuXG4gICAgICAgICAgaWYgKG9iamVjdElzKGVhZ2VyU3RhdGUsIGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgICAgIC8vIEZhc3QgcGF0aC4gV2UgY2FuIGJhaWwgb3V0IHdpdGhvdXQgc2NoZWR1bGluZyBSZWFjdCB0byByZS1yZW5kZXIuXG4gICAgICAgICAgICAvLyBJdCdzIHN0aWxsIHBvc3NpYmxlIHRoYXQgd2UnbGwgbmVlZCB0byByZWJhc2UgdGhpcyB1cGRhdGUgbGF0ZXIsXG4gICAgICAgICAgICAvLyBpZiB0aGUgY29tcG9uZW50IHJlLXJlbmRlcnMgZm9yIGEgZGlmZmVyZW50IHJlYXNvbiBhbmQgYnkgdGhhdFxuICAgICAgICAgICAgLy8gdGltZSB0aGUgcmVkdWNlciBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgIC8vIFRPRE86IERvIHdlIHN0aWxsIG5lZWQgdG8gZW50YW5nbGUgdHJhbnNpdGlvbnMgaW4gdGhpcyBjYXNlP1xuICAgICAgICAgICAgZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlQW5kRWFnZXJseUJhaWxvdXQoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsvLyBTdXBwcmVzcyB0aGUgZXJyb3IuIEl0IHdpbGwgdGhyb3cgYWdhaW4gaW4gdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKTtcblxuICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICAgICAgZW50YW5nbGVUcmFuc2l0aW9uVXBkYXRlKHJvb3QsIHF1ZXVlLCBsYW5lKTtcbiAgICB9XG4gIH1cblxuICBtYXJrVXBkYXRlSW5EZXZUb29scyhmaWJlciwgbGFuZSk7XG59XG5cbmZ1bmN0aW9uIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgcmV0dXJuIGZpYmVyID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG59XG5cbmZ1bmN0aW9uIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKSB7XG4gIC8vIFRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBTdGFzaCBpdCBpbiBhIGxhemlseS1jcmVhdGVkIG1hcCBvZlxuICAvLyBxdWV1ZSAtPiBsaW5rZWQgbGlzdCBvZiB1cGRhdGVzLiBBZnRlciB0aGlzIHJlbmRlciBwYXNzLCB3ZSdsbCByZXN0YXJ0XG4gIC8vIGFuZCBhcHBseSB0aGUgc3Rhc2hlZCB1cGRhdGVzIG9uIHRvcCBvZiB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gdHJ1ZTtcbiAgdmFyIHBlbmRpbmcgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG59IC8vIFRPRE86IE1vdmUgdG8gUmVhY3RGaWJlckNvbmN1cnJlbnRVcGRhdGVzP1xuXG5cbmZ1bmN0aW9uIGVudGFuZ2xlVHJhbnNpdGlvblVwZGF0ZShyb290LCBxdWV1ZSwgbGFuZSkge1xuICBpZiAoaXNUcmFuc2l0aW9uTGFuZShsYW5lKSkge1xuICAgIHZhciBxdWV1ZUxhbmVzID0gcXVldWUubGFuZXM7IC8vIElmIGFueSBlbnRhbmdsZWQgbGFuZXMgYXJlIG5vIGxvbmdlciBwZW5kaW5nIG9uIHRoZSByb290LCB0aGVuIHRoZXlcbiAgICAvLyBtdXN0IGhhdmUgZmluaXNoZWQuIFdlIGNhbiByZW1vdmUgdGhlbSBmcm9tIHRoZSBzaGFyZWQgcXVldWUsIHdoaWNoXG4gICAgLy8gcmVwcmVzZW50cyBhIHN1cGVyc2V0IG9mIHRoZSBhY3R1YWxseSBwZW5kaW5nIGxhbmVzLiBJbiBzb21lIGNhc2VzIHdlXG4gICAgLy8gbWF5IGVudGFuZ2xlIG1vcmUgdGhhbiB3ZSBuZWVkIHRvLCBidXQgdGhhdCdzIE9LLiBJbiBmYWN0IGl0J3Mgd29yc2UgaWZcbiAgICAvLyB3ZSAqZG9uJ3QqIGVudGFuZ2xlIHdoZW4gd2Ugc2hvdWxkLlxuXG4gICAgcXVldWVMYW5lcyA9IGludGVyc2VjdExhbmVzKHF1ZXVlTGFuZXMsIHJvb3QucGVuZGluZ0xhbmVzKTsgLy8gRW50YW5nbGUgdGhlIG5ldyB0cmFuc2l0aW9uIGxhbmUgd2l0aCB0aGUgb3RoZXIgdHJhbnNpdGlvbiBsYW5lcy5cblxuICAgIHZhciBuZXdRdWV1ZUxhbmVzID0gbWVyZ2VMYW5lcyhxdWV1ZUxhbmVzLCBsYW5lKTtcbiAgICBxdWV1ZS5sYW5lcyA9IG5ld1F1ZXVlTGFuZXM7IC8vIEV2ZW4gaWYgcXVldWUubGFuZXMgYWxyZWFkeSBpbmNsdWRlIGxhbmUsIHdlIGRvbid0IGtub3cgZm9yIGNlcnRhaW4gaWZcbiAgICAvLyB0aGUgbGFuZSBmaW5pc2hlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIGVudGFuZ2xlZCBpdC4gU28gd2UgbmVlZCB0b1xuICAgIC8vIGVudGFuZ2xlIGl0IGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuXG5cbiAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBuZXdRdWV1ZUxhbmVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlSW5EZXZUb29scyhmaWJlciwgbGFuZSwgYWN0aW9uKSB7XG5cbiAge1xuICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgbGFuZSk7XG4gIH1cbn1cblxudmFyIENvbnRleHRPbmx5RGlzcGF0Y2hlciA9IHtcbiAgcmVhZENvbnRleHQ6IHJlYWRDb250ZXh0LFxuICB1c2VDYWxsYmFjazogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VDb250ZXh0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUluc2VydGlvbkVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VMYXlvdXRFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTWVtbzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWR1Y2VyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VTdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VEZWJ1Z1ZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlZmVycmVkVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlVHJhbnNpdGlvbjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNdXRhYmxlU291cmNlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUlkOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxufTtcblxudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG5cbntcbiAgdmFyIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gIH07XG5cbiAgdmFyIHdhcm5JbnZhbGlkSG9va0FjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignRG8gbm90IGNhbGwgSG9va3MgaW5zaWRlIHVzZUVmZmVjdCguLi4pLCB1c2VNZW1vKC4uLiksIG9yIG90aGVyIGJ1aWx0LWluIEhvb2tzLiAnICsgJ1lvdSBjYW4gb25seSBjYWxsIEhvb2tzIGF0IHRoZSB0b3AgbGV2ZWwgb2YgeW91ciBSZWFjdCBmdW5jdGlvbi4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzJyk7XG4gIH07XG5cbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbnNlcnRpb25FZmZlY3QnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50SW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZSgpO1xuICAgIH0sXG4gICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3luY0V4dGVybmFsU3RvcmUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KTtcbiAgICB9LFxuICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJZCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SWQoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuXG4gIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbnNlcnRpb25FZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2UoKTtcbiAgICB9LFxuICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50U3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpO1xuICAgIH0sXG4gICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUlkJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SWQoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuXG4gIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbnNlcnRpb25FZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKCk7XG4gICAgfSxcbiAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90KTtcbiAgICB9LFxuICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJZCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJZCgpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG5cbiAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW5zZXJ0aW9uRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKCk7XG4gICAgfSxcbiAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90KTtcbiAgICB9LFxuICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJZCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJZCgpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG5cbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUluc2VydGlvbkVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2UoKTtcbiAgICB9LFxuICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KTtcbiAgICB9LFxuICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJZCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJZCgpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG5cbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW5zZXJ0aW9uRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKCk7XG4gICAgfSxcbiAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTeW5jRXh0ZXJuYWxTdG9yZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QpO1xuICAgIH0sXG4gICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUlkJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSWQoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuXG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW5zZXJ0aW9uRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2UoKTtcbiAgICB9LFxuICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN5bmNFeHRlcm5hbFN0b3JlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCk7XG4gICAgfSxcbiAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSWQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJZCgpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG59XG5cbnZhciBub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG52YXIgY29tbWl0VGltZSA9IDA7XG52YXIgbGF5b3V0RWZmZWN0U3RhcnRUaW1lID0gLTE7XG52YXIgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbnZhciBwYXNzaXZlRWZmZWN0U3RhcnRUaW1lID0gLTE7XG4vKipcbiAqIFRyYWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHVwZGF0ZSB3YXMgYSBuZXN0ZWQvY2FzY2FkaW5nIHVwZGF0ZSAoc2NoZWR1bGVkIGZyb20gYSBsYXlvdXQgZWZmZWN0KS5cbiAqXG4gKiBUaGUgb3ZlcmFsbCBzZXF1ZW5jZSBpczpcbiAqICAgMS4gcmVuZGVyXG4gKiAgIDIuIGNvbW1pdCAoYW5kIGNhbGwgYG9uUmVuZGVyYCwgYG9uQ29tbWl0YClcbiAqICAgMy4gY2hlY2sgZm9yIG5lc3RlZCB1cGRhdGVzXG4gKiAgIDQuIGZsdXNoIHBhc3NpdmUgZWZmZWN0cyAoYW5kIGNhbGwgYG9uUG9zdENvbW1pdGApXG4gKlxuICogTmVzdGVkIHVwZGF0ZXMgYXJlIGlkZW50aWZpZWQgaW4gc3RlcCAzIGFib3ZlLFxuICogYnV0IHN0ZXAgNCBzdGlsbCBhcHBsaWVzIHRvIHRoZSB3b3JrIHRoYXQgd2FzIGp1c3QgY29tbWl0dGVkLlxuICogV2UgdXNlIHR3byBmbGFncyB0byB0cmFjayBuZXN0ZWQgdXBkYXRlcyB0aGVuOlxuICogb25lIHRyYWNrcyB3aGV0aGVyIHRoZSB1cGNvbWluZyB1cGRhdGUgaXMgYSBuZXN0ZWQgdXBkYXRlLFxuICogYW5kIHRoZSBvdGhlciB0cmFja3Mgd2hldGhlciB0aGUgY3VycmVudCB1cGRhdGUgd2FzIGEgbmVzdGVkIHVwZGF0ZS5cbiAqIFRoZSBmaXJzdCB2YWx1ZSBnZXRzIHN5bmNlZCB0byB0aGUgc2Vjb25kIGF0IHRoZSBzdGFydCBvZiB0aGUgcmVuZGVyIHBoYXNlLlxuICovXG5cbnZhciBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgPSBmYWxzZTtcbnZhciBuZXN0ZWRVcGRhdGVTY2hlZHVsZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gaXNDdXJyZW50VXBkYXRlTmVzdGVkKCkge1xuICByZXR1cm4gY3VycmVudFVwZGF0ZUlzTmVzdGVkO1xufVxuXG5mdW5jdGlvbiBtYXJrTmVzdGVkVXBkYXRlU2NoZWR1bGVkKCkge1xuICB7XG4gICAgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldE5lc3RlZFVwZGF0ZUZsYWcoKSB7XG4gIHtcbiAgICBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgPSBmYWxzZTtcbiAgICBuZXN0ZWRVcGRhdGVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzeW5jTmVzdGVkVXBkYXRlRmxhZygpIHtcbiAge1xuICAgIGN1cnJlbnRVcGRhdGVJc05lc3RlZCA9IG5lc3RlZFVwZGF0ZVNjaGVkdWxlZDtcbiAgICBuZXN0ZWRVcGRhdGVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDb21taXRUaW1lKCkge1xuICByZXR1cm4gY29tbWl0VGltZTtcbn1cblxuZnVuY3Rpb24gcmVjb3JkQ29tbWl0VGltZSgpIHtcblxuICBjb21taXRUaW1lID0gbm93JDEoKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRQcm9maWxlclRpbWVyKGZpYmVyKSB7XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSBub3ckMSgpO1xuXG4gIGlmIChmaWJlci5hY3R1YWxTdGFydFRpbWUgPCAwKSB7XG4gICAgZmliZXIuYWN0dWFsU3RhcnRUaW1lID0gbm93JDEoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZyhmaWJlcikge1xuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoZmliZXIsIG92ZXJyaWRlQmFzZVRpbWUpIHtcblxuICBpZiAocHJvZmlsZXJTdGFydFRpbWUgPj0gMCkge1xuICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdyQxKCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcblxuICAgIGlmIChvdmVycmlkZUJhc2VUaW1lKSB7XG4gICAgICBmaWJlci5zZWxmQmFzZUR1cmF0aW9uID0gZWxhcHNlZFRpbWU7XG4gICAgfVxuXG4gICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihmaWJlcikge1xuXG4gIGlmIChsYXlvdXRFZmZlY3RTdGFydFRpbWUgPj0gMCkge1xuICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdyQxKCkgLSBsYXlvdXRFZmZlY3RTdGFydFRpbWU7XG4gICAgbGF5b3V0RWZmZWN0U3RhcnRUaW1lID0gLTE7IC8vIFN0b3JlIGR1cmF0aW9uIG9uIHRoZSBuZXh0IG5lYXJlc3QgUHJvZmlsZXIgYW5jZXN0b3JcbiAgICAvLyBPciB0aGUgcm9vdCAoZm9yIHRoZSBEZXZUb29scyBQcm9maWxlciB0byByZWFkKVxuXG4gICAgdmFyIHBhcmVudEZpYmVyID0gZmliZXIucmV0dXJuO1xuXG4gICAgd2hpbGUgKHBhcmVudEZpYmVyICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKHBhcmVudEZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIHZhciByb290ID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIHJvb3QuZWZmZWN0RHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICBwYXJlbnRTdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVjb3JkUGFzc2l2ZUVmZmVjdER1cmF0aW9uKGZpYmVyKSB7XG5cbiAgaWYgKHBhc3NpdmVFZmZlY3RTdGFydFRpbWUgPj0gMCkge1xuICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdyQxKCkgLSBwYXNzaXZlRWZmZWN0U3RhcnRUaW1lO1xuICAgIHBhc3NpdmVFZmZlY3RTdGFydFRpbWUgPSAtMTsgLy8gU3RvcmUgZHVyYXRpb24gb24gdGhlIG5leHQgbmVhcmVzdCBQcm9maWxlciBhbmNlc3RvclxuICAgIC8vIE9yIHRoZSByb290IChmb3IgdGhlIERldlRvb2xzIFByb2ZpbGVyIHRvIHJlYWQpXG5cbiAgICB2YXIgcGFyZW50RmliZXIgPSBmaWJlci5yZXR1cm47XG5cbiAgICB3aGlsZSAocGFyZW50RmliZXIgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAocGFyZW50RmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgdmFyIHJvb3QgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcm9vdC5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmIChwYXJlbnRTdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIERldGFjaGVkIGZpYmVycyBoYXZlIHRoZWlyIHN0YXRlIG5vZGUgY2xlYXJlZCBvdXQuXG4gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHRoZSByZXR1cm4gcG9pbnRlciBpcyBhbHNvIGNsZWFyZWQgb3V0LFxuICAgICAgICAgICAgLy8gc28gd2Ugd29uJ3QgYmUgYWJsZSB0byByZXBvcnQgdGhlIHRpbWUgc3BlbnQgaW4gdGhpcyBQcm9maWxlcidzIHN1YnRyZWUuXG4gICAgICAgICAgICBwYXJlbnRTdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5yZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKSB7XG5cbiAgbGF5b3V0RWZmZWN0U3RhcnRUaW1lID0gbm93JDEoKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRQYXNzaXZlRWZmZWN0VGltZXIoKSB7XG5cbiAgcGFzc2l2ZUVmZmVjdFN0YXJ0VGltZSA9IG5vdyQxKCk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24oZmliZXIpIHtcbiAgLy8gVHJhbnNmZXIgdGltZSBzcGVudCByZW5kZXJpbmcgdGhlc2UgY2hpbGRyZW4gc28gd2UgZG9uJ3QgbG9zZSBpdFxuICAvLyBhZnRlciB3ZSByZXJlbmRlci4gVGhpcyBpcyB1c2VkIGFzIGEgaGVscGVyIGluIHNwZWNpYWwgY2FzZXNcbiAgLy8gd2hlcmUgd2Ugc2hvdWxkIGNvdW50IHRoZSB3b3JrIG9mIG11bHRpcGxlIHBhc3Nlcy5cbiAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkKSB7XG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHZhbHVlLCBzb3VyY2UpIHtcbiAgLy8gSWYgdGhlIHZhbHVlIGlzIGFuIGVycm9yLCBjYWxsIHRoaXMgZnVuY3Rpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgaXMgdGhyb3duXG4gIC8vIHNvIHRoZSBzdGFjayBpcyBhY2N1cmF0ZS5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3RhY2s6IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2UpLFxuICAgIGRpZ2VzdDogbnVsbFxuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlQ2FwdHVyZWRWYWx1ZSh2YWx1ZSwgZGlnZXN0LCBzdGFjaykge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBzb3VyY2U6IG51bGwsXG4gICAgc3RhY2s6IHN0YWNrICE9IG51bGwgPyBzdGFjayA6IG51bGwsXG4gICAgZGlnZXN0OiBkaWdlc3QgIT0gbnVsbCA/IGRpZ2VzdCA6IG51bGxcbiAgfTtcbn1cblxuLy8gVGhpcyBtb2R1bGUgaXMgZm9ya2VkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuXG4vLyBCeSBkZWZhdWx0LCByZXR1cm4gYHRydWVgIHRvIGxvZyBlcnJvcnMgdG8gdGhlIGNvbnNvbGUuXG4vLyBGb3JrcyBjYW4gcmV0dXJuIGBmYWxzZWAgaWYgdGhpcyBpc24ndCBkZXNpcmFibGUuXG5mdW5jdGlvbiBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbykge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbG9nQ2FwdHVyZWRFcnJvcihib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHRyeSB7XG4gICAgdmFyIGxvZ0Vycm9yID0gc2hvd0Vycm9yRGlhbG9nKGJvdW5kYXJ5LCBlcnJvckluZm8pOyAvLyBBbGxvdyBpbmplY3RlZCBzaG93RXJyb3JEaWFsb2coKSB0byBwcmV2ZW50IGRlZmF1bHQgY29uc29sZS5lcnJvciBsb2dnaW5nLlxuICAgIC8vIFRoaXMgZW5hYmxlcyByZW5kZXJlcnMgbGlrZSBSZWFjdE5hdGl2ZSB0byBiZXR0ZXIgbWFuYWdlIHJlZGJveCBiZWhhdmlvci5cblxuICAgIGlmIChsb2dFcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgICBpZiAodHJ1ZSkge1xuICAgICAgdmFyIHNvdXJjZSA9IGVycm9ySW5mby5zb3VyY2U7XG4gICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICB2YXIgY29tcG9uZW50U3RhY2sgPSBzdGFjayAhPT0gbnVsbCA/IHN0YWNrIDogJyc7IC8vIEJyb3dzZXJzIHN1cHBvcnQgc2lsZW5jaW5nIHVuY2F1Z2h0IGVycm9ycyBieSBjYWxsaW5nXG4gICAgICAvLyBgcHJldmVudERlZmF1bHQoKWAgaW4gd2luZG93IGBlcnJvcmAgaGFuZGxlci5cbiAgICAgIC8vIFdlIHJlY29yZCB0aGlzIGluZm9ybWF0aW9uIGFzIGFuIGV4cGFuZG8gb24gdGhlIGVycm9yLlxuXG4gICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiBlcnJvci5fc3VwcHJlc3NMb2dnaW5nKSB7XG4gICAgICAgIGlmIChib3VuZGFyeS50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgLy8gVGhlIGVycm9yIGlzIHJlY292ZXJhYmxlIGFuZCB3YXMgc2lsZW5jZWQuXG4gICAgICAgICAgLy8gSWdub3JlIGl0IGFuZCBkb24ndCBwcmludCB0aGUgc3RhY2sgYWRkZW5kdW0uXG4gICAgICAgICAgLy8gVGhpcyBpcyBoYW5keSBmb3IgdGVzdGluZyBlcnJvciBib3VuZGFyaWVzIHdpdGhvdXQgbm9pc2UuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFRoZSBlcnJvciBpcyBmYXRhbC4gU2luY2UgdGhlIHNpbGVuY2luZyBtaWdodCBoYXZlXG4gICAgICAgIC8vIGJlZW4gYWNjaWRlbnRhbCwgd2UnbGwgc3VyZmFjZSBpdCBhbnl3YXkuXG4gICAgICAgIC8vIEhvd2V2ZXIsIHRoZSBicm93c2VyIHdvdWxkIGhhdmUgc2lsZW5jZWQgdGhlIG9yaWdpbmFsIGVycm9yXG4gICAgICAgIC8vIHNvIHdlJ2xsIHByaW50IGl0IGZpcnN0LCBhbmQgdGhlbiBwcmludCB0aGUgc3RhY2sgYWRkZW5kdW0uXG5cblxuICAgICAgICBjb25zb2xlWydlcnJvciddKGVycm9yKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgICAgIC8vIEZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhpcyBibG9jaywgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMzM4NFxuICAgICAgfVxuXG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IHNvdXJjZSA/IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoc291cmNlKSA6IG51bGw7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZU1lc3NhZ2UgPSBjb21wb25lbnROYW1lID8gXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDxcIiArIGNvbXBvbmVudE5hbWUgKyBcIj4gY29tcG9uZW50OlwiIDogJ1RoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiBvbmUgb2YgeW91ciBSZWFjdCBjb21wb25lbnRzOic7XG4gICAgICB2YXIgZXJyb3JCb3VuZGFyeU1lc3NhZ2U7XG5cbiAgICAgIGlmIChib3VuZGFyeS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gJ0NvbnNpZGVyIGFkZGluZyBhbiBlcnJvciBib3VuZGFyeSB0byB5b3VyIHRyZWUgdG8gY3VzdG9taXplIGVycm9yIGhhbmRsaW5nIGJlaGF2aW9yLlxcbicgKyAnVmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Vycm9yLWJvdW5kYXJpZXMgdG8gbGVhcm4gbW9yZSBhYm91dCBlcnJvciBib3VuZGFyaWVzLic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZXJyb3JCb3VuZGFyeU5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGJvdW5kYXJ5KSB8fCAnQW5vbnltb3VzJztcbiAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPSBcIlJlYWN0IHdpbGwgdHJ5IHRvIHJlY3JlYXRlIHRoaXMgY29tcG9uZW50IHRyZWUgZnJvbSBzY3JhdGNoIFwiICsgKFwidXNpbmcgdGhlIGVycm9yIGJvdW5kYXJ5IHlvdSBwcm92aWRlZCwgXCIgKyBlcnJvckJvdW5kYXJ5TmFtZSArIFwiLlwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbWJpbmVkTWVzc2FnZSA9IGNvbXBvbmVudE5hbWVNZXNzYWdlICsgXCJcXG5cIiArIGNvbXBvbmVudFN0YWNrICsgXCJcXG5cXG5cIiArIChcIlwiICsgZXJyb3JCb3VuZGFyeU1lc3NhZ2UpOyAvLyBJbiBkZXZlbG9wbWVudCwgd2UgcHJvdmlkZSBvdXIgb3duIG1lc3NhZ2Ugd2l0aCBqdXN0IHRoZSBjb21wb25lbnQgc3RhY2suXG4gICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRoZSBvcmlnaW5hbCBlcnJvciBtZXNzYWdlIGFuZCBKUyBzdGFjayBiZWNhdXNlIHRoZSBicm93c2VyXG4gICAgICAvLyBoYXMgYWxyZWFkeSBwcmludGVkIGl0LiBFdmVuIGlmIHRoZSBhcHBsaWNhdGlvbiBzd2FsbG93cyB0aGUgZXJyb3IsIGl0IGlzIHN0aWxsXG4gICAgICAvLyBkaXNwbGF5ZWQgYnkgdGhlIGJyb3dzZXIgdGhhbmtzIHRvIHRoZSBERVYtb25seSBmYWtlIGV2ZW50IHRyaWNrIGluIFJlYWN0RXJyb3JVdGlscy5cblxuICAgICAgY29uc29sZVsnZXJyb3InXShjb21iaW5lZE1lc3NhZ2UpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gcHJvZHVjdGlvbiwgd2UgcHJpbnQgdGhlIGVycm9yIGRpcmVjdGx5LlxuICAgICAgLy8gVGhpcyB3aWxsIGluY2x1ZGUgdGhlIG1lc3NhZ2UsIHRoZSBKUyBzdGFjaywgYW5kIGFueXRoaW5nIHRoZSBicm93c2VyIHdhbnRzIHRvIHNob3cuXG4gICAgICAvLyBXZSBwYXNzIHRoZSBlcnJvciBvYmplY3QgaW5zdGVhZCBvZiBjdXN0b20gbWVzc2FnZSBzbyB0aGF0IHRoZSBicm93c2VyIGRpc3BsYXlzIHRoZSBlcnJvciBuYXRpdmVseS5cbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IG5vdCB0aHJvdywgb3IgUmVhY3QgaW50ZXJuYWwgc3RhdGUgd2lsbCBnZXQgbWVzc2VkIHVwLlxuICAgIC8vIElmIGNvbnNvbGUuZXJyb3IgaXMgb3ZlcnJpZGRlbiwgb3IgbG9nQ2FwdHVyZWRFcnJvcigpIHNob3dzIGEgZGlhbG9nIHRoYXQgdGhyb3dzLFxuICAgIC8vIHdlIHdhbnQgdG8gcmVwb3J0IHRoaXMgZXJyb3Igb3V0c2lkZSBvZiB0aGUgbm9ybWFsIHN0YWNrIGFzIGEgbGFzdCByZXNvcnQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzE4OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgUG9zc2libHlXZWFrTWFwJDEgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIGxhbmUpOyAvLyBVbm1vdW50IHRoZSByb290IGJ5IHJlbmRlcmluZyBudWxsLlxuXG4gIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB1cGRhdGUucGF5bG9hZCA9IHtcbiAgICBlbGVtZW50OiBudWxsXG4gIH07XG4gIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgb25VbmNhdWdodEVycm9yKGVycm9yKTtcbiAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICB9O1xuXG4gIHJldHVybiB1cGRhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBsYW5lKTtcbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPSBmaWJlci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgdXBkYXRlLnBheWxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yJDEpO1xuICAgIH07XG5cbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB7XG4gICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgIH1cblxuICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGluc3QgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgaWYgKGluc3QgIT09IG51bGwgJiYgdHlwZW9mIGluc3QuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHtcbiAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgfVxuXG4gICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuXG4gICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUbyBwcmVzZXJ2ZSB0aGUgcHJlZXhpc3RpbmcgcmV0cnkgYmVoYXZpb3Igb2YgZXJyb3IgYm91bmRhcmllcyxcbiAgICAgICAgLy8gd2Uga2VlcCB0cmFjayBvZiB3aGljaCBvbmVzIGFscmVhZHkgZmFpbGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgICAgICAvLyBUaGlzIGdldHMgcmVzZXQgYmVmb3JlIHdlIHlpZWxkIGJhY2sgdG8gdGhlIGJyb3dzZXIuXG4gICAgICAgIC8vIFRPRE86IFdhcm4gaW4gc3RyaWN0IG1vZGUgaWYgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzXG4gICAgICAgIC8vIG5vdCBkZWZpbmVkLlxuICAgICAgICBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcbiAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgIHRoaXMuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IkMSwge1xuICAgICAgICBjb21wb25lbnRTdGFjazogc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnXG4gICAgICB9KTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIElmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkLFxuICAgICAgICAgIC8vIHRoZW4gaXQgbmVlZHMgdG8gY2FsbCBzZXRTdGF0ZSB0byByZWNvdmVyIGZyb20gZXJyb3JzLlxuICAgICAgICAgIC8vIElmIG5vIHN0YXRlIHVwZGF0ZSBpcyBzY2hlZHVsZWQgdGhlbiB0aGUgYm91bmRhcnkgd2lsbCBzd2FsbG93IHRoZSBlcnJvci5cbiAgICAgICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUoZmliZXIubGFuZXMsIFN5bmNMYW5lKSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzOiBFcnJvciBib3VuZGFyaWVzIHNob3VsZCBpbXBsZW1lbnQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkuICcgKyAnSW4gdGhhdCBtZXRob2QsIHJldHVybiBhIHN0YXRlIHVwZGF0ZSB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2Ugb3IgZmFsbGJhY2sgVUkuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgJ1Vua25vd24nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCBsYW5lcykge1xuICAvLyBBdHRhY2ggYSBwaW5nIGxpc3RlbmVyXG4gIC8vXG4gIC8vIFRoZSBkYXRhIG1pZ2h0IHJlc29sdmUgYmVmb3JlIHdlIGhhdmUgYSBjaGFuY2UgdG8gY29tbWl0IHRoZSBmYWxsYmFjay4gT3IsXG4gIC8vIGluIHRoZSBjYXNlIG9mIGEgcmVmcmVzaCwgd2UnbGwgbmV2ZXIgY29tbWl0IGEgZmFsbGJhY2suIFNvIHdlIG5lZWQgdG9cbiAgLy8gYXR0YWNoIGEgbGlzdGVuZXIgbm93LiBXaGVuIGl0IHJlc29sdmVzIChcInBpbmdzXCIpLCB3ZSBjYW4gZGVjaWRlIHdoZXRoZXIgdG9cbiAgLy8gdHJ5IHJlbmRlcmluZyB0aGUgdHJlZSBhZ2Fpbi5cbiAgLy9cbiAgLy8gT25seSBhdHRhY2ggYSBsaXN0ZW5lciBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBmb3IgdGhlIGxhbmVzXG4gIC8vIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcgKHdoaWNoIGFjdHMgbGlrZSBhIFwidGhyZWFkIElEXCIgaGVyZSkuXG4gIC8vXG4gIC8vIFdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIGluIGNvbmN1cnJlbnQgbW9kZS4gTGVnYWN5IFN1c3BlbnNlIGFsd2F5c1xuICAvLyBjb21taXRzIGZhbGxiYWNrcyBzeW5jaHJvbm91c2x5LCBzbyB0aGVyZSBhcmUgbm8gcGluZ3MuXG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgdmFyIHRocmVhZElEcztcblxuICBpZiAocGluZ0NhY2hlID09PSBudWxsKSB7XG4gICAgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwJDEoKTtcbiAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJlYWRJRHMgPSBwaW5nQ2FjaGUuZ2V0KHdha2VhYmxlKTtcblxuICAgIGlmICh0aHJlYWRJRHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRocmVhZElEcy5oYXMobGFuZXMpKSB7XG4gICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgdGhyZWFkIElEIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cbiAgICB0aHJlYWRJRHMuYWRkKGxhbmVzKTtcbiAgICB2YXIgcGluZyA9IHBpbmdTdXNwZW5kZWRSb290LmJpbmQobnVsbCwgcm9vdCwgd2FrZWFibGUsIGxhbmVzKTtcblxuICAgIHtcbiAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIHBlbmRpbmcgd29yayBzdGlsbCwgcmVzdG9yZSB0aGUgb3JpZ2luYWwgdXBkYXRlcnNcbiAgICAgICAgcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCBsYW5lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2FrZWFibGUudGhlbihwaW5nLCBwaW5nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhdHRhY2hSZXRyeUxpc3RlbmVyKHN1c3BlbnNlQm91bmRhcnksIHJvb3QsIHdha2VhYmxlLCBsYW5lcykge1xuICAvLyBSZXRyeSBsaXN0ZW5lclxuICAvL1xuICAvLyBJZiB0aGUgZmFsbGJhY2sgZG9lcyBjb21taXQsIHdlIG5lZWQgdG8gYXR0YWNoIGEgZGlmZmVyZW50IHR5cGUgb2ZcbiAgLy8gbGlzdGVuZXIuIFRoaXMgb25lIHNjaGVkdWxlcyBhbiB1cGRhdGUgb24gdGhlIFN1c3BlbnNlIGJvdW5kYXJ5IHRvIHR1cm5cbiAgLy8gdGhlIGZhbGxiYWNrIHN0YXRlIG9mZi5cbiAgLy9cbiAgLy8gU3Rhc2ggdGhlIHdha2VhYmxlIG9uIHRoZSBib3VuZGFyeSBmaWJlciBzbyB3ZSBjYW4gYWNjZXNzIGl0IGluIHRoZVxuICAvLyBjb21taXQgcGhhc2UuXG4gIC8vXG4gIC8vIFdoZW4gdGhlIHdha2VhYmxlIHJlc29sdmVzLCB3ZSdsbCBhdHRlbXB0IHRvIHJlbmRlciB0aGUgYm91bmRhcnlcbiAgLy8gYWdhaW4gKFwicmV0cnlcIikuXG4gIHZhciB3YWtlYWJsZXMgPSBzdXNwZW5zZUJvdW5kYXJ5LnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh3YWtlYWJsZXMgPT09IG51bGwpIHtcbiAgICB2YXIgdXBkYXRlUXVldWUgPSBuZXcgU2V0KCk7XG4gICAgdXBkYXRlUXVldWUuYWRkKHdha2VhYmxlKTtcbiAgICBzdXNwZW5zZUJvdW5kYXJ5LnVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWU7XG4gIH0gZWxzZSB7XG4gICAgd2FrZWFibGVzLmFkZCh3YWtlYWJsZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRTdXNwZW5kZWRDb21wb25lbnQoc291cmNlRmliZXIsIHJvb3RSZW5kZXJMYW5lcykge1xuICAvLyBBIGxlZ2FjeSBtb2RlIFN1c3BlbnNlIHF1aXJrLCBvbmx5IHJlbGV2YW50IHRvIGhvb2sgY29tcG9uZW50cy5cblxuXG4gIHZhciB0YWcgPSBzb3VyY2VGaWJlci50YWc7XG5cbiAgaWYgKChzb3VyY2VGaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUgJiYgKHRhZyA9PT0gRnVuY3Rpb25Db21wb25lbnQgfHwgdGFnID09PSBGb3J3YXJkUmVmIHx8IHRhZyA9PT0gU2ltcGxlTWVtb0NvbXBvbmVudCkpIHtcbiAgICB2YXIgY3VycmVudFNvdXJjZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50U291cmNlKSB7XG4gICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IGN1cnJlbnRTb3VyY2UudXBkYXRlUXVldWU7XG4gICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gY3VycmVudFNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICAgICAgc291cmNlRmliZXIubGFuZXMgPSBjdXJyZW50U291cmNlLmxhbmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TmVhcmVzdFN1c3BlbnNlQm91bmRhcnlUb0NhcHR1cmUocmV0dXJuRmliZXIpIHtcbiAgdmFyIG5vZGUgPSByZXR1cm5GaWJlcjtcblxuICBkbyB7XG4gICAgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBzaG91bGRDYXB0dXJlU3VzcGVuc2Uobm9kZSkpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gLy8gVGhpcyBib3VuZGFyeSBhbHJlYWR5IGNhcHR1cmVkIGR1cmluZyB0aGlzIHJlbmRlci4gQ29udGludWUgdG8gdGhlIG5leHRcbiAgICAvLyBib3VuZGFyeS5cblxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9IHdoaWxlIChub2RlICE9PSBudWxsKTtcblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbWFya1N1c3BlbnNlQm91bmRhcnlTaG91bGRDYXB0dXJlKHN1c3BlbnNlQm91bmRhcnksIHJldHVybkZpYmVyLCBzb3VyY2VGaWJlciwgcm9vdCwgcm9vdFJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgbWFya3MgYSBTdXNwZW5zZSBib3VuZGFyeSBzbyB0aGF0IHdoZW4gd2UncmUgdW53aW5kaW5nIHRoZSBzdGFjayxcbiAgLy8gaXQgY2FwdHVyZXMgdGhlIHN1c3BlbmRlZCBcImV4Y2VwdGlvblwiIGFuZCBkb2VzIGEgc2Vjb25kIChmYWxsYmFjaykgcGFzcy5cbiAgaWYgKChzdXNwZW5zZUJvdW5kYXJ5Lm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIC8vIExlZ2FjeSBNb2RlIFN1c3BlbnNlXG4gICAgLy9cbiAgICAvLyBJZiB0aGUgYm91bmRhcnkgaXMgaW4gbGVnYWN5IG1vZGUsIHdlIHNob3VsZCAqbm90KlxuICAgIC8vIHN1c3BlbmQgdGhlIGNvbW1pdC4gUHJldGVuZCBhcyBpZiB0aGUgc3VzcGVuZGVkIGNvbXBvbmVudCByZW5kZXJlZFxuICAgIC8vIG51bGwgYW5kIGtlZXAgcmVuZGVyaW5nLiBXaGVuIHRoZSBTdXNwZW5zZSBib3VuZGFyeSBjb21wbGV0ZXMsXG4gICAgLy8gd2UnbGwgZG8gYSBzZWNvbmQgcGFzcyB0byByZW5kZXIgdGhlIGZhbGxiYWNrLlxuICAgIGlmIChzdXNwZW5zZUJvdW5kYXJ5ID09PSByZXR1cm5GaWJlcikge1xuICAgICAgLy8gU3BlY2lhbCBjYXNlIHdoZXJlIHdlIHN1c3BlbmRlZCB3aGlsZSByZWNvbmNpbGluZyB0aGUgY2hpbGRyZW4gb2ZcbiAgICAgIC8vIGEgU3VzcGVuc2UgYm91bmRhcnkncyBpbm5lciBPZmZzY3JlZW4gd3JhcHBlciBmaWJlci4gVGhpcyBoYXBwZW5zXG4gICAgICAvLyB3aGVuIGEgUmVhY3QubGF6eSBjb21wb25lbnQgaXMgYSBkaXJlY3QgY2hpbGQgb2YgYVxuICAgICAgLy8gU3VzcGVuc2UgYm91bmRhcnkuXG4gICAgICAvL1xuICAgICAgLy8gU3VzcGVuc2UgYm91bmRhcmllcyBhcmUgaW1wbGVtZW50ZWQgYXMgbXVsdGlwbGUgZmliZXJzLCBidXQgdGhleVxuICAgICAgLy8gYXJlIGEgc2luZ2xlIGNvbmNlcHR1YWwgdW5pdC4gVGhlIGxlZ2FjeSBtb2RlIGJlaGF2aW9yIHdoZXJlIHdlXG4gICAgICAvLyBwcmV0ZW5kIHRoZSBzdXNwZW5kZWQgZmliZXIgY29tbWl0dGVkIGFzIGBudWxsYCB3b24ndCB3b3JrLFxuICAgICAgLy8gYmVjYXVzZSBpbiB0aGlzIGNhc2UgdGhlIFwic3VzcGVuZGVkXCIgZmliZXIgaXMgdGhlIGlubmVyXG4gICAgICAvLyBPZmZzY3JlZW4gd3JhcHBlci5cbiAgICAgIC8vXG4gICAgICAvLyBCZWNhdXNlIHRoZSBjb250ZW50cyBvZiB0aGUgYm91bmRhcnkgaGF2ZW4ndCBzdGFydGVkIHJlbmRlcmluZ1xuICAgICAgLy8geWV0IChpLmUuIG5vdGhpbmcgaW4gdGhlIHRyZWUgaGFzIHBhcnRpYWxseSByZW5kZXJlZCkgd2UgY2FuXG4gICAgICAvLyBzd2l0Y2ggdG8gdGhlIHJlZ3VsYXIsIGNvbmN1cnJlbnQgbW9kZSBiZWhhdmlvcjogbWFyayB0aGVcbiAgICAgIC8vIGJvdW5kYXJ5IHdpdGggU2hvdWxkQ2FwdHVyZSBhbmQgZW50ZXIgdGhlIHVud2luZCBwaGFzZS5cbiAgICAgIHN1c3BlbnNlQm91bmRhcnkuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VzcGVuc2VCb3VuZGFyeS5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgc291cmNlRmliZXIuZmxhZ3MgfD0gRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZTsgLy8gV2UncmUgZ29pbmcgdG8gY29tbWl0IHRoaXMgZmliZXIgZXZlbiB0aG91Z2ggaXQgZGlkbid0IGNvbXBsZXRlLlxuICAgICAgLy8gQnV0IHdlIHNob3VsZG4ndCBjYWxsIGFueSBsaWZlY3ljbGUgbWV0aG9kcyBvciBjYWxsYmFja3MuIFJlbW92ZVxuICAgICAgLy8gYWxsIGxpZmVjeWNsZSBlZmZlY3QgdGFncy5cblxuICAgICAgc291cmNlRmliZXIuZmxhZ3MgJj0gfihMaWZlY3ljbGVFZmZlY3RNYXNrIHwgSW5jb21wbGV0ZSk7XG5cbiAgICAgIGlmIChzb3VyY2VGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBjdXJyZW50U291cmNlRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRTb3VyY2VGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQuIENoYW5nZSB0aGUgdGFnIHNvIGl0J3Mgbm90IG1pc3Rha2VuIGZvciBhXG4gICAgICAgICAgLy8gY29tcGxldGVkIGNsYXNzIGNvbXBvbmVudC4gRm9yIGV4YW1wbGUsIHdlIHNob3VsZCBub3QgY2FsbFxuICAgICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGlmIGl0IGlzIGRlbGV0ZWQuXG4gICAgICAgICAgc291cmNlRmliZXIudGFnID0gSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFdoZW4gd2UgdHJ5IHJlbmRlcmluZyBhZ2Fpbiwgd2Ugc2hvdWxkIG5vdCByZXVzZSB0aGUgY3VycmVudCBmaWJlcixcbiAgICAgICAgICAvLyBzaW5jZSBpdCdzIGtub3duIHRvIGJlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gVXNlIGEgZm9yY2UgdXBkYXRlIHRvXG4gICAgICAgICAgLy8gcHJldmVudCBhIGJhaWwgb3V0LlxuICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIFN5bmNMYW5lKTtcbiAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG4gICAgICAgICAgZW5xdWV1ZVVwZGF0ZShzb3VyY2VGaWJlciwgdXBkYXRlLCBTeW5jTGFuZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLiBNYXJrIGl0IHdpdGggU3luYyBwcmlvcml0eSB0b1xuICAgICAgLy8gaW5kaWNhdGUgdGhhdCBpdCBzdGlsbCBoYXMgcGVuZGluZyB3b3JrLlxuXG5cbiAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgU3luY0xhbmUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXNwZW5zZUJvdW5kYXJ5O1xuICB9IC8vIENvbmZpcm1lZCB0aGF0IHRoZSBib3VuZGFyeSBpcyBpbiBhIGNvbmN1cnJlbnQgbW9kZSB0cmVlLiBDb250aW51ZVxuICAvLyB3aXRoIHRoZSBub3JtYWwgc3VzcGVuZCBwYXRoLlxuICAvL1xuICAvLyBBZnRlciB0aGlzIHdlJ2xsIHVzZSBhIHNldCBvZiBoZXVyaXN0aWNzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXNcbiAgLy8gcmVuZGVyIHBhc3Mgd2lsbCBydW4gdG8gY29tcGxldGlvbiBvciByZXN0YXJ0IG9yIFwic3VzcGVuZFwiIHRoZSBjb21taXQuXG4gIC8vIFRoZSBhY3R1YWwgbG9naWMgZm9yIHRoaXMgaXMgc3ByZWFkIG91dCBpbiBkaWZmZXJlbnQgcGxhY2VzLlxuICAvL1xuICAvLyBUaGlzIGZpcnN0IHByaW5jaXBsZSBpcyB0aGF0IGlmIHdlJ3JlIGdvaW5nIHRvIHN1c3BlbmQgd2hlbiB3ZSBjb21wbGV0ZVxuICAvLyBhIHJvb3QsIHRoZW4gd2Ugc2hvdWxkIGFsc28gcmVzdGFydCBpZiB3ZSBnZXQgYW4gdXBkYXRlIG9yIHBpbmcgdGhhdFxuICAvLyBtaWdodCB1bnN1c3BlbmQgaXQsIGFuZCB2aWNlIHZlcnNhLiBUaGUgb25seSByZWFzb24gdG8gc3VzcGVuZCBpc1xuICAvLyBiZWNhdXNlIHlvdSB0aGluayB5b3UgbWlnaHQgd2FudCB0byByZXN0YXJ0IGJlZm9yZSBjb21taXR0aW5nLiBIb3dldmVyLFxuICAvLyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcmVzdGFydCBvbmx5IHdoaWxlIGluIHRoZSBwZXJpb2Qgd2UncmUgc3VzcGVuZGVkLlxuICAvL1xuICAvLyBSZXN0YXJ0aW5nIHRvbyBhZ2dyZXNzaXZlbHkgaXMgYWxzbyBub3QgZ29vZCBiZWNhdXNlIGl0IHN0YXJ2ZXMgb3V0IGFueVxuICAvLyBpbnRlcm1lZGlhdGUgbG9hZGluZyBzdGF0ZS4gU28gd2UgdXNlIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZW4uXG4gIC8vIFN1c3BlbnNlIEhldXJpc3RpY3NcbiAgLy9cbiAgLy8gSWYgbm90aGluZyB0aHJldyBhIFByb21pc2Ugb3IgYWxsIHRoZSBzYW1lIGZhbGxiYWNrcyBhcmUgYWxyZWFkeSBzaG93aW5nLFxuICAvLyB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC5cbiAgLy9cbiAgLy8gSWYgdGhpcyBpcyBhbiBpbml0aWFsIHJlbmRlciBvZiBhIG5ldyB0cmVlIG9mIFN1c3BlbnNlIGJvdW5kYXJpZXMgYW5kXG4gIC8vIHRob3NlIHRyaWdnZXIgYSBmYWxsYmFjaywgdGhlbiBkb24ndCBzdXNwZW5kL3Jlc3RhcnQuIFdlIHdhbnQgdG8gZW5zdXJlXG4gIC8vIHRoYXQgd2UgY2FuIHNob3cgdGhlIGluaXRpYWwgbG9hZGluZyBzdGF0ZSBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLlxuICAvL1xuICAvLyBJZiB3ZSBoaXQgYSBcIkRlbGF5ZWRcIiBjYXNlLCBzdWNoIGFzIHdoZW4gd2UnZCBzd2l0Y2ggZnJvbSBjb250ZW50IGJhY2sgaW50b1xuICAvLyBhIGZhbGxiYWNrLCB0aGVuIHdlIHNob3VsZCBhbHdheXMgc3VzcGVuZC9yZXN0YXJ0LiBUcmFuc2l0aW9ucyBhcHBseVxuICAvLyB0byB0aGlzIGNhc2UuIElmIG5vbmUgaXMgZGVmaW5lZCwgSk5EIGlzIHVzZWQgaW5zdGVhZC5cbiAgLy9cbiAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgYW5kIGl0IGdldHMgXCJyZXRyaWVkXCIsIGFsbG93aW5nIHVzIHRvIHNob3dcbiAgLy8gYW5vdGhlciBsZXZlbCwgYnV0IHRoZXJlJ3Mgc3RpbGwgYW4gaW5uZXIgYm91bmRhcnkgdGhhdCB3b3VsZCBzaG93IGEgZmFsbGJhY2ssXG4gIC8vIHRoZW4gd2Ugc3VzcGVuZC9yZXN0YXJ0IGZvciA1MDBtcyBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHNob3dlZCBhIGZhbGxiYWNrXG4gIC8vIGFueXdoZXJlIGluIHRoZSB0cmVlLiBUaGlzIGVmZmVjdGl2ZWx5IHRocm90dGxlcyBwcm9ncmVzc2l2ZSBsb2FkaW5nIGludG8gYVxuICAvLyBjb25zaXN0ZW50IHRyYWluIG9mIGNvbW1pdHMuIFRoaXMgYWxzbyBnaXZlcyB1cyBhbiBvcHBvcnR1bml0eSB0byByZXN0YXJ0IHRvXG4gIC8vIGdldCB0byB0aGUgY29tcGxldGVkIHN0YXRlIHNsaWdodGx5IGVhcmxpZXIuXG4gIC8vXG4gIC8vIElmIHRoZXJlJ3MgYW1iaWd1aXR5IGR1ZSB0byBiYXRjaGluZyBpdCdzIHJlc29sdmVkIGluIHByZWZlcmVuY2Ugb2Y6XG4gIC8vIDEpIFwiZGVsYXllZFwiLCAyKSBcImluaXRpYWwgcmVuZGVyXCIsIDMpIFwicmV0cnlcIi5cbiAgLy9cbiAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBhIFwiYnVzeVwiIHN0YXRlIGRvZXNuJ3QgZ2V0IGZvcmNlIGNvbW1pdHRlZC4gV2Ugd2FudCB0b1xuICAvLyBlbnN1cmUgdGhhdCBuZXcgaW5pdGlhbCBsb2FkaW5nIHN0YXRlcyBjYW4gY29tbWl0IGFzIHNvb24gYXMgcG9zc2libGUuXG5cblxuICBzdXNwZW5zZUJvdW5kYXJ5LmZsYWdzIHw9IFNob3VsZENhcHR1cmU7IC8vIFRPRE86IEkgdGhpbmsgd2UgY2FuIHJlbW92ZSB0aGlzLCBzaW5jZSB3ZSBub3cgdXNlIGBEaWRDYXB0dXJlYCBpblxuICAvLyB0aGUgYmVnaW4gcGhhc2UgdG8gcHJldmVudCBhbiBlYXJseSBiYWlsb3V0LlxuXG4gIHN1c3BlbnNlQm91bmRhcnkubGFuZXMgPSByb290UmVuZGVyTGFuZXM7XG4gIHJldHVybiBzdXNwZW5zZUJvdW5kYXJ5O1xufVxuXG5mdW5jdGlvbiB0aHJvd0V4Y2VwdGlvbihyb290LCByZXR1cm5GaWJlciwgc291cmNlRmliZXIsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLlxuICBzb3VyY2VGaWJlci5mbGFncyB8PSBJbmNvbXBsZXRlO1xuXG4gIHtcbiAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgIC8vIElmIHdlIGhhdmUgcGVuZGluZyB3b3JrIHN0aWxsLCByZXN0b3JlIHRoZSBvcmlnaW5hbCB1cGRhdGVyc1xuICAgICAgcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCByb290UmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVGhpcyBpcyBhIHdha2VhYmxlLiBUaGUgY29tcG9uZW50IHN1c3BlbmRlZC5cbiAgICB2YXIgd2FrZWFibGUgPSB2YWx1ZTtcbiAgICByZXNldFN1c3BlbmRlZENvbXBvbmVudChzb3VyY2VGaWJlcik7XG5cbiAgICB7XG4gICAgICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSAmJiBzb3VyY2VGaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgbWFya0RpZFRocm93V2hpbGVIeWRyYXRpbmdERVYoKTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIHZhciBzdXNwZW5zZUJvdW5kYXJ5ID0gZ2V0TmVhcmVzdFN1c3BlbnNlQm91bmRhcnlUb0NhcHR1cmUocmV0dXJuRmliZXIpO1xuXG4gICAgaWYgKHN1c3BlbnNlQm91bmRhcnkgIT09IG51bGwpIHtcbiAgICAgIHN1c3BlbnNlQm91bmRhcnkuZmxhZ3MgJj0gfkZvcmNlQ2xpZW50UmVuZGVyO1xuICAgICAgbWFya1N1c3BlbnNlQm91bmRhcnlTaG91bGRDYXB0dXJlKHN1c3BlbnNlQm91bmRhcnksIHJldHVybkZpYmVyLCBzb3VyY2VGaWJlciwgcm9vdCwgcm9vdFJlbmRlckxhbmVzKTsgLy8gV2Ugb25seSBhdHRhY2ggcGluZyBsaXN0ZW5lcnMgaW4gY29uY3VycmVudCBtb2RlLiBMZWdhY3kgU3VzcGVuc2UgYWx3YXlzXG4gICAgICAvLyBjb21taXRzIGZhbGxiYWNrcyBzeW5jaHJvbm91c2x5LCBzbyB0aGVyZSBhcmUgbm8gcGluZ3MuXG5cbiAgICAgIGlmIChzdXNwZW5zZUJvdW5kYXJ5Lm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIGF0dGFjaFJldHJ5TGlzdGVuZXIoc3VzcGVuc2VCb3VuZGFyeSwgcm9vdCwgd2FrZWFibGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBib3VuZGFyeSB3YXMgZm91bmQuIFVubGVzcyB0aGlzIGlzIGEgc3luYyB1cGRhdGUsIHRoaXMgaXMgT0suXG4gICAgICAvLyBXZSBjYW4gc3VzcGVuZCBhbmQgd2FpdCBmb3IgbW9yZSBkYXRhIHRvIGFycml2ZS5cbiAgICAgIGlmICghaW5jbHVkZXNTeW5jTGFuZShyb290UmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgbm90IGEgc3luYyB1cGRhdGUuIFN1c3BlbmQuIFNpbmNlIHdlJ3JlIG5vdCBhY3RpdmF0aW5nIGFcbiAgICAgICAgLy8gU3VzcGVuc2UgYm91bmRhcnksIHRoaXMgd2lsbCB1bndpbmQgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3Qgd2l0aG91dFxuICAgICAgICAvLyBwZXJmb3JtaW5nIGEgc2Vjb25kIHBhc3MgdG8gcmVuZGVyIGEgZmFsbGJhY2suIChUaGlzIGlzIGFyZ3VhYmx5IGhvd1xuICAgICAgICAvLyByZWZyZXNoIHRyYW5zaXRpb25zIHNob3VsZCB3b3JrLCB0b28sIHNpbmNlIHdlJ3JlIG5vdCBnb2luZyB0byBjb21taXRcbiAgICAgICAgLy8gdGhlIGZhbGxiYWNrcyBhbnl3YXkuKVxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGlzIGNhc2UgYWxzbyBhcHBsaWVzIHRvIGluaXRpYWwgaHlkcmF0aW9uLlxuICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSAvLyBUaGlzIGlzIGEgc3luYy9kaXNjcmV0ZSB1cGRhdGUuIFdlIHRyZWF0IHRoaXMgY2FzZSBsaWtlIGFuIGVycm9yXG4gICAgICAvLyBiZWNhdXNlIGRpc2NyZXRlIHJlbmRlcnMgYXJlIGV4cGVjdGVkIHRvIHByb2R1Y2UgYSBjb21wbGV0ZSB0cmVlXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRvIG1haW50YWluIGNvbnNpc3RlbmN5IHdpdGggZXh0ZXJuYWwgc3RhdGUuXG5cblxuICAgICAgdmFyIHVuY2F1Z2h0U3VzcGVuc2VFcnJvciA9IG5ldyBFcnJvcignQSBjb21wb25lbnQgc3VzcGVuZGVkIHdoaWxlIHJlc3BvbmRpbmcgdG8gc3luY2hyb25vdXMgaW5wdXQuIFRoaXMgJyArICd3aWxsIGNhdXNlIHRoZSBVSSB0byBiZSByZXBsYWNlZCB3aXRoIGEgbG9hZGluZyBpbmRpY2F0b3IuIFRvICcgKyAnZml4LCB1cGRhdGVzIHRoYXQgc3VzcGVuZCBzaG91bGQgYmUgd3JhcHBlZCAnICsgJ3dpdGggc3RhcnRUcmFuc2l0aW9uLicpOyAvLyBJZiB3ZSdyZSBvdXRzaWRlIGEgdHJhbnNpdGlvbiwgZmFsbCB0aHJvdWdoIHRvIHRoZSByZWd1bGFyIGVycm9yIHBhdGguXG4gICAgICAvLyBUaGUgZXJyb3Igd2lsbCBiZSBjYXVnaHQgYnkgdGhlIG5lYXJlc3Qgc3VzcGVuc2UgYm91bmRhcnkuXG5cbiAgICAgIHZhbHVlID0gdW5jYXVnaHRTdXNwZW5zZUVycm9yO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBlcnJvciwgbm90IGEgU3VzcGVuc2Ugd2FrZWFibGUuXG4gICAgaWYgKGdldElzSHlkcmF0aW5nKCkgJiYgc291cmNlRmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICBtYXJrRGlkVGhyb3dXaGlsZUh5ZHJhdGluZ0RFVigpO1xuXG4gICAgICB2YXIgX3N1c3BlbnNlQm91bmRhcnkgPSBnZXROZWFyZXN0U3VzcGVuc2VCb3VuZGFyeVRvQ2FwdHVyZShyZXR1cm5GaWJlcik7IC8vIElmIHRoZSBlcnJvciB3YXMgdGhyb3duIGR1cmluZyBoeWRyYXRpb24sIHdlIG1heSBiZSBhYmxlIHRvIHJlY292ZXIgYnlcbiAgICAgIC8vIGRpc2NhcmRpbmcgdGhlIGRlaHlkcmF0ZWQgY29udGVudCBhbmQgc3dpdGNoaW5nIHRvIGEgY2xpZW50IHJlbmRlci5cbiAgICAgIC8vIEluc3RlYWQgb2Ygc3VyZmFjaW5nIHRoZSBlcnJvciwgZmluZCB0aGUgbmVhcmVzdCBTdXNwZW5zZSBib3VuZGFyeVxuICAgICAgLy8gYW5kIHJlbmRlciBpdCBhZ2FpbiB3aXRob3V0IGh5ZHJhdGlvbi5cblxuXG4gICAgICBpZiAoX3N1c3BlbnNlQm91bmRhcnkgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKChfc3VzcGVuc2VCb3VuZGFyeS5mbGFncyAmIFNob3VsZENhcHR1cmUpID09PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgLy8gU2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCB0cnkgcmVuZGVyaW5nIHRoZSBub3JtYWxcbiAgICAgICAgICAvLyBjaGlsZHJlbiBhZ2Fpbiwgbm90IHRoZSBmYWxsYmFjay5cbiAgICAgICAgICBfc3VzcGVuc2VCb3VuZGFyeS5mbGFncyB8PSBGb3JjZUNsaWVudFJlbmRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcmtTdXNwZW5zZUJvdW5kYXJ5U2hvdWxkQ2FwdHVyZShfc3VzcGVuc2VCb3VuZGFyeSwgcmV0dXJuRmliZXIsIHNvdXJjZUZpYmVyLCByb290LCByb290UmVuZGVyTGFuZXMpOyAvLyBFdmVuIHRob3VnaCB0aGUgdXNlciBtYXkgbm90IGJlIGFmZmVjdGVkIGJ5IHRoaXMgZXJyb3IsIHdlIHNob3VsZFxuICAgICAgICAvLyBzdGlsbCBsb2cgaXQgc28gaXQgY2FuIGJlIGZpeGVkLlxuXG4gICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IoY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZUZpYmVyKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHZhbHVlLCBzb3VyY2VGaWJlcik7XG4gIHJlbmRlckRpZEVycm9yKHZhbHVlKTsgLy8gV2UgZGlkbid0IGZpbmQgYSBib3VuZGFyeSB0aGF0IGNvdWxkIGhhbmRsZSB0aGlzIHR5cGUgb2YgZXhjZXB0aW9uLiBTdGFydFxuICAvLyBvdmVyIGFuZCB0cmF2ZXJzZSBwYXJlbnQgcGF0aCBhZ2FpbiwgdGhpcyB0aW1lIHRyZWF0aW5nIHRoZSBleGNlcHRpb25cbiAgLy8gYXMgYW4gZXJyb3IuXG5cbiAgdmFyIHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9lcnJvckluZm8gPSB2YWx1ZTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUocm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMsIGxhbmUpO1xuICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF9lcnJvckluZm8sIGxhbmUpO1xuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgdXBkYXRlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgLy8gQ2FwdHVyZSBhbmQgcmV0cnlcbiAgICAgICAgdmFyIGVycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICB2YXIgY3RvciA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MgJiYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCBpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG5cbiAgICAgICAgICB2YXIgX2xhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBfbGFuZSk7IC8vIFNjaGVkdWxlIHRoZSBlcnJvciBib3VuZGFyeSB0byByZS1yZW5kZXIgdXNpbmcgdXBkYXRlZCBzdGF0ZVxuXG4gICAgICAgICAgdmFyIF91cGRhdGUgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBlcnJvckluZm8sIF9sYW5lKTtcblxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gIH0gd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3VzcGVuZGVkQ2FjaGUoKSB7XG4gIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgU3VzcGVuc2UgYm91bmRhcnkgc3VzcGVuZHMuIEl0IHJldHVybnMgdGhlXG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dEJhZENsYXNzO1xudmFyIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzO1xudmFyIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHM7XG52YXIgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXI7XG52YXIgZGlkV2FybkFib3V0VGFpbE9wdGlvbnM7XG5cbntcbiAgZGlkV2FybkFib3V0QmFkQ2xhc3MgPSB7fTtcbiAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnMgPSB7fTtcbiAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlciA9IHt9O1xuICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucyA9IHt9O1xufVxuXG5mdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBmcmVzaCBuZXcgY29tcG9uZW50IHRoYXQgaGFzbid0IGJlZW4gcmVuZGVyZWQgeWV0LCB3ZVxuICAgIC8vIHdvbid0IHVwZGF0ZSBpdHMgY2hpbGQgc2V0IGJ5IGFwcGx5aW5nIG1pbmltYWwgc2lkZS1lZmZlY3RzLiBJbnN0ZWFkLFxuICAgIC8vIHdlIHdpbGwgYWRkIHRoZW0gYWxsIHRvIHRoZSBjaGlsZCBiZWZvcmUgaXQgZ2V0cyByZW5kZXJlZC4gVGhhdCBtZWFuc1xuICAgIC8vIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIHJlY29uY2lsaWF0aW9uIHBhc3MgYnkgbm90IHRyYWNraW5nIHNpZGUtZWZmZWN0cy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZSBjdXJyZW50IGNoaWxkIGlzIHRoZSBzYW1lIGFzIHRoZSB3b3JrIGluIHByb2dyZXNzLCBpdCBtZWFucyB0aGF0XG4gICAgLy8gd2UgaGF2ZW4ndCB5ZXQgc3RhcnRlZCBhbnkgd29yayBvbiB0aGVzZSBjaGlsZHJlbi4gVGhlcmVmb3JlLCB3ZSB1c2VcbiAgICAvLyB0aGUgY2xvbmUgYWxnb3JpdGhtIHRvIGNyZWF0ZSBhIGNvcHkgb2YgYWxsIHRoZSBjdXJyZW50IGNoaWxkcmVuLlxuICAgIC8vIElmIHdlIGhhZCBhbnkgcHJvZ3Jlc3NlZCB3b3JrIGFscmVhZHksIHRoYXQgaXMgaW52YWxpZCBhdCB0aGlzIHBvaW50IHNvXG4gICAgLy8gbGV0J3MgdGhyb3cgaXQgb3V0LlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3JrIG9mIHJlY29uY2lsZUNoaWxkcmVuLiBJdCdzIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2VcbiAgLy8gd2FudCB0byByZWNvbmNpbGUgd2l0aG91dCBtYXRjaGluZyBhZ2FpbnN0IHRoZSBleGlzdGluZyBzZXQuIFRoaXMgaGFzIHRoZVxuICAvLyBlZmZlY3Qgb2YgYWxsIGN1cnJlbnQgY2hpbGRyZW4gYmVpbmcgdW5tb3VudGVkOyBldmVuIGlmIHRoZSB0eXBlIGFuZCBrZXlcbiAgLy8gYXJlIHRoZSBzYW1lLCB0aGUgb2xkIGNoaWxkIGlzIHVubW91bnRlZCBhbmQgYSBuZXcgY2hpbGQgaXMgY3JlYXRlZC5cbiAgLy9cbiAgLy8gVG8gZG8gdGhpcywgd2UncmUgZ29pbmcgdG8gZ28gdGhyb3VnaCB0aGUgcmVjb25jaWxlIGFsZ29yaXRobSB0d2ljZS4gSW5cbiAgLy8gdGhlIGZpcnN0IHBhc3MsIHdlIHNjaGVkdWxlIGEgZGVsZXRpb24gZm9yIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbiBieVxuICAvLyBwYXNzaW5nIG51bGwuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTsgLy8gSW4gdGhlIHNlY29uZCBwYXNzLCB3ZSBtb3VudCB0aGUgbmV3IGNoaWxkcmVuLiBUaGUgdHJpY2sgaGVyZSBpcyB0aGF0IHdlXG4gIC8vIHBhc3MgbnVsbCBpbiBwbGFjZSBvZiB3aGVyZSB3ZSB1c3VhbGx5IHBhc3MgdGhlIGN1cnJlbnQgY2hpbGQgc2V0LiBUaGlzIGhhc1xuICAvLyB0aGUgZWZmZWN0IG9mIHJlbW91bnRpbmcgYWxsIGNoaWxkcmVuIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVpclxuICAvLyBpZGVudGl0aWVzIG1hdGNoLlxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVGb3J3YXJkUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgdGhlIGZpcnN0IHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciByZW5kZXIgPSBDb21wb25lbnQucmVuZGVyO1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmOyAvLyBUaGUgcmVzdCBpcyBhIGZvcmsgb2YgdXBkYXRlRnVuY3Rpb25Db21wb25lbnRcblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICB2YXIgaGFzSWQ7XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckxhbmVzKTtcbiAgICBoYXNJZCA9IGNoZWNrRGlkUmVuZGVySWRIb29rKCk7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIGhhc0lkID0gY2hlY2tEaWRSZW5kZXJJZEhvb2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH1cblxuICB7XG4gICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIGlmIChnZXRJc0h5ZHJhdGluZygpICYmIGhhc0lkKSB7XG4gICAgcHVzaE1hdGVyaWFsaXplZFRyZWVJZCh3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHZhciB0eXBlID0gQ29tcG9uZW50LnR5cGU7XG5cbiAgICBpZiAoaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSAmJiBDb21wb25lbnQuY29tcGFyZSA9PT0gbnVsbCAmJiAvLyBTaW1wbGVNZW1vQ29tcG9uZW50IGNvZGVwYXRoIGRvZXNuJ3QgcmVzb2x2ZSBvdXRlciBwcm9wcyBlaXRoZXIuXG4gICAgQ29tcG9uZW50LmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYSBwbGFpbiBmdW5jdGlvbiBjb21wb25lbnQgd2l0aG91dCBkZWZhdWx0IHByb3BzLFxuICAgICAgLy8gYW5kIHdpdGggb25seSB0aGUgZGVmYXVsdCBzaGFsbG93IGNvbXBhcmlzb24sIHdlIHVwZ3JhZGUgaXRcbiAgICAgIC8vIHRvIGEgU2ltcGxlTWVtb0NvbXBvbmVudCB0byBhbGxvdyBmYXN0IHBhdGggdXBkYXRlcy5cblxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBTaW1wbGVNZW1vQ29tcG9uZW50O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVkVHlwZTtcblxuICAgICAge1xuICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIHR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVzb2x2ZWRUeXBlLCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAgIC8vIFdlIGNvdWxkIG1vdmUgaXQgdGhlcmUsIGJ1dCB3ZSdkIHN0aWxsIG5lZWQgdGhpcyBmb3IgbGF6eSBjb2RlIHBhdGguXG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hpbGQgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoQ29tcG9uZW50LnR5cGUsIG51bGwsIG5leHRQcm9wcywgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLm1vZGUsIHJlbmRlckxhbmVzKTtcbiAgICBjaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgY2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjaGlsZDtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICB7XG4gICAgdmFyIF90eXBlID0gQ29tcG9uZW50LnR5cGU7XG4gICAgdmFyIF9pbm5lclByb3BUeXBlcyA9IF90eXBlLnByb3BUeXBlcztcblxuICAgIGlmIChfaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgY2hlY2tQcm9wVHlwZXMoX2lubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShfdHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSBjdXJyZW50LmNoaWxkOyAvLyBUaGlzIGlzIGFsd2F5cyBleGFjdGx5IG9uZSBjaGlsZFxuXG4gIHZhciBoYXNTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQgPSBjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcyk7XG5cbiAgaWYgKCFoYXNTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQpIHtcbiAgICAvLyBUaGlzIHdpbGwgYmUgdGhlIHByb3BzIHdpdGggcmVzb2x2ZWQgZGVmYXVsdFByb3BzLFxuICAgIC8vIHVubGlrZSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgd2hpY2ggd2lsbCBiZSB0aGUgdW5yZXNvbHZlZCBvbmVzLlxuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Q2hpbGQubWVtb2l6ZWRQcm9wczsgLy8gRGVmYXVsdCB0byBzaGFsbG93IGNvbXBhcmlzb25cblxuICAgIHZhciBjb21wYXJlID0gQ29tcG9uZW50LmNvbXBhcmU7XG4gICAgY29tcGFyZSA9IGNvbXBhcmUgIT09IG51bGwgPyBjb21wYXJlIDogc2hhbGxvd0VxdWFsO1xuXG4gICAgaWYgKGNvbXBhcmUocHJldlByb3BzLCBuZXh0UHJvcHMpICYmIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWYpIHtcbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgbmV4dFByb3BzKTtcbiAgbmV3Q2hpbGQucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXdDaGlsZDtcbiAgcmV0dXJuIG5ld0NoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaW5uZXIgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgb3V0ZXJNZW1vVHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuXG4gICAgICBpZiAob3V0ZXJNZW1vVHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgIC8vIFdlIHdhcm4gd2hlbiB5b3UgZGVmaW5lIHByb3BUeXBlcyBvbiBsYXp5KClcbiAgICAgICAgLy8gc28gbGV0J3MganVzdCBza2lwIG92ZXIgaXQgdG8gZmluZCBtZW1vKCkgb3V0ZXIgd3JhcHBlci5cbiAgICAgICAgLy8gSW5uZXIgcHJvcHMgZm9yIG1lbW8gYXJlIHZhbGlkYXRlZCBsYXRlci5cbiAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSBvdXRlck1lbW9UeXBlO1xuICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBpbml0KHBheWxvYWQpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgb3V0ZXJNZW1vVHlwZSA9IG51bGw7XG4gICAgICAgIH0gLy8gSW5uZXIgcHJvcFR5cGVzIHdpbGwgYmUgdmFsaWRhdGVkIGluIHRoZSBmdW5jdGlvbiBjb21wb25lbnQgcGF0aC5cblxuXG4gICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IG91dGVyTWVtb1R5cGUgJiYgb3V0ZXJNZW1vVHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgKFNpbXBsZU1lbW9Db21wb25lbnQgaGFzIG5vIGRlZmF1bHRQcm9wcylcbiAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShvdXRlck1lbW9UeXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAoc2hhbGxvd0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJiBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmICYmICggLy8gUHJldmVudCBiYWlsb3V0IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkLlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID09PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlOyAvLyBUaGUgcHJvcHMgYXJlIHNoYWxsb3dseSBlcXVhbC4gUmV1c2UgdGhlIHByZXZpb3VzIHByb3BzIG9iamVjdCwgbGlrZSB3ZVxuICAgICAgLy8gd291bGQgZHVyaW5nIGEgbm9ybWFsIGZpYmVyIGJhaWxvdXQuXG4gICAgICAvL1xuICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBzdHJvbmcgZ3VhcmFudGVlcyB0aGF0IHRoZSBwcm9wcyBvYmplY3QgaXMgcmVmZXJlbnRpYWxseVxuICAgICAgLy8gZXF1YWwgZHVyaW5nIHVwZGF0ZXMgd2hlcmUgd2UgY2FuJ3QgYmFpbCBvdXQgYW55d2F5IOKAlCBsaWtlIGlmIHRoZSBwcm9wc1xuICAgICAgLy8gYXJlIHNoYWxsb3dseSBlcXVhbCwgYnV0IHRoZXJlJ3MgYSBsb2NhbCBzdGF0ZSBvciBjb250ZXh0IHVwZGF0ZSBpbiB0aGVcbiAgICAgIC8vIHNhbWUgYmF0Y2guXG4gICAgICAvL1xuICAgICAgLy8gSG93ZXZlciwgYXMgYSBwcmluY2lwbGUsIHdlIHNob3VsZCBhaW0gdG8gbWFrZSB0aGUgYmVoYXZpb3IgY29uc2lzdGVudFxuICAgICAgLy8gYWNyb3NzIGRpZmZlcmVudCB3YXlzIG9mIG1lbW9pemluZyBhIGNvbXBvbmVudC4gRm9yIGV4YW1wbGUsIFJlYWN0Lm1lbW9cbiAgICAgIC8vIGhhcyBhIGRpZmZlcmVudCBpbnRlcm5hbCBGaWJlciBsYXlvdXQgaWYgeW91IHBhc3MgYSBub3JtYWwgZnVuY3Rpb25cbiAgICAgIC8vIGNvbXBvbmVudCAoU2ltcGxlTWVtb0NvbXBvbmVudCkgdmVyc3VzIGlmIHlvdSBwYXNzIGEgZGlmZmVyZW50IHR5cGVcbiAgICAgIC8vIGxpa2UgZm9yd2FyZFJlZiAoTWVtb0NvbXBvbmVudCkuIEJ1dCB0aGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC5cbiAgICAgIC8vIFdyYXBwaW5nIGEgY29tcG9uZW50IGluIGZvcndhcmRSZWYgKG9yIFJlYWN0LmxhenksIGV0Yykgc2hvdWxkbid0XG4gICAgICAvLyBhZmZlY3Qgd2hldGhlciB0aGUgcHJvcHMgb2JqZWN0IGlzIHJldXNlZCBkdXJpbmcgYSBiYWlsb3V0LlxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgPSBuZXh0UHJvcHMgPSBwcmV2UHJvcHM7XG5cbiAgICAgIGlmICghY2hlY2tTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQoY3VycmVudCwgcmVuZGVyTGFuZXMpKSB7XG4gICAgICAgIC8vIFRoZSBwZW5kaW5nIGxhbmVzIHdlcmUgY2xlYXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGJlZ2luV29yay4gV2UncmVcbiAgICAgICAgLy8gYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB0aGVyZSBtaWdodCBiZSBvdGhlciBsYW5lcyB0aGF0IHdlcmVuJ3RcbiAgICAgICAgLy8gaW5jbHVkZWQgaW4gdGhlIGN1cnJlbnQgcmVuZGVyLiBVc3VhbGx5LCB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlXG4gICAgICAgIC8vIHJlbWFpbmluZyB1cGRhdGVzIGlzIGFjY3VtdWxhdGVkIGR1cmluZyB0aGUgZXZhbHVhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gY29tcG9uZW50IChpLmUuIHdoZW4gcHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlKS4gQnV0IHNpbmNlIHNpbmNlXG4gICAgICAgIC8vIHdlJ3JlIGJhaWxpbmcgb3V0IGVhcmx5ICp3aXRob3V0KiBldmFsdWF0aW5nIHRoZSBjb21wb25lbnQsIHdlIG5lZWRcbiAgICAgICAgLy8gdG8gYWNjb3VudCBmb3IgaXQgaGVyZSwgdG9vLiBSZXNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgZmliZXIuXG4gICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBhcHBsaWVzIHRvIFNpbXBsZU1lbW9Db21wb25lbnQsIG5vdCBNZW1vQ29tcG9uZW50LFxuICAgICAgICAvLyBiZWNhdXNlIGEgTWVtb0NvbXBvbmVudCBmaWJlciBkb2VzIG5vdCBoYXZlIGhvb2tzIG9yIGFuIHVwZGF0ZSBxdWV1ZTtcbiAgICAgICAgLy8gcmF0aGVyLCBpdCB3cmFwcyBhcm91bmQgYW4gaW5uZXIgY29tcG9uZW50LCB3aGljaCBtYXkgb3IgbWF5IG5vdFxuICAgICAgICAvLyBjb250YWlucyBob29rcy5cbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgcmVzZXQgYXQgaW4gYmVnaW5Xb3JrIG91dCBvZiB0aGUgY29tbW9uIHBhdGggc28gdGhhdFxuICAgICAgICAvLyB0aGlzIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSBpZiAoKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgb25seSBleGlzdHMgZm9yIGxlZ2FjeSBtb2RlLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkyMTYuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgcHJldlN0YXRlID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG5cbiAgaWYgKG5leHRQcm9wcy5tb2RlID09PSAnaGlkZGVuJyB8fCBlbmFibGVMZWdhY3lIaWRkZW4gKSB7XG4gICAgLy8gUmVuZGVyaW5nIGEgaGlkZGVuIHRyZWUuXG4gICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIC8vIEluIGxlZ2FjeSBzeW5jIG1vZGUsIGRvbid0IGRlZmVyIHRoZSBzdWJ0cmVlLiBSZW5kZXIgaXQgbm93LlxuICAgICAgLy8gVE9ETzogQ29uc2lkZXIgaG93IE9mZnNjcmVlbiBzaG91bGQgd29yayB3aXRoIHRyYW5zaXRpb25zIGluIHRoZSBmdXR1cmVcbiAgICAgIHZhciBuZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogTm9MYW5lcyxcbiAgICAgICAgY2FjaGVQb29sOiBudWxsLFxuICAgICAgICB0cmFuc2l0aW9uczogbnVsbFxuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXh0U3RhdGU7XG5cbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIE9mZnNjcmVlbkxhbmUpKSB7XG4gICAgICB2YXIgc3Bhd25lZENhY2hlUG9vbCA9IG51bGw7IC8vIFdlJ3JlIGhpZGRlbiwgYW5kIHdlJ3JlIG5vdCByZW5kZXJpbmcgYXQgT2Zmc2NyZWVuLiBXZSB3aWxsIGJhaWwgb3V0XG4gICAgICAvLyBhbmQgcmVzdW1lIHRoaXMgdHJlZSBsYXRlci5cblxuICAgICAgdmFyIG5leHRCYXNlTGFuZXM7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZCYXNlTGFuZXMgPSBwcmV2U3RhdGUuYmFzZUxhbmVzO1xuICAgICAgICBuZXh0QmFzZUxhbmVzID0gbWVyZ2VMYW5lcyhwcmV2QmFzZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0QmFzZUxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgICB9IC8vIFNjaGVkdWxlIHRoaXMgZmliZXIgdG8gcmUtcmVuZGVyIGF0IG9mZnNjcmVlbiBwcmlvcml0eS4gVGhlbiBiYWlsb3V0LlxuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGxhbmVUb0xhbmVzKE9mZnNjcmVlbkxhbmUpO1xuICAgICAgdmFyIF9uZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogbmV4dEJhc2VMYW5lcyxcbiAgICAgICAgY2FjaGVQb29sOiBzcGF3bmVkQ2FjaGVQb29sLFxuICAgICAgICB0cmFuc2l0aW9uczogbnVsbFxuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBfbmV4dFN0YXRlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICAgICAgLy8gdG8gYXZvaWQgYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG5cblxuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBuZXh0QmFzZUxhbmVzKTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgdGhlIHNlY29uZCByZW5kZXIuIFRoZSBzdXJyb3VuZGluZyB2aXNpYmxlIGNvbnRlbnQgaGFzIGFscmVhZHlcbiAgICAgIC8vIGNvbW1pdHRlZC4gTm93IHdlIHJlc3VtZSByZW5kZXJpbmcgdGhlIGhpZGRlbiB0cmVlLlxuICAgICAgLy8gUmVuZGVyaW5nIGF0IG9mZnNjcmVlbiwgc28gd2UgY2FuIGNsZWFyIHRoZSBiYXNlIGxhbmVzLlxuICAgICAgdmFyIF9uZXh0U3RhdGUyID0ge1xuICAgICAgICBiYXNlTGFuZXM6IE5vTGFuZXMsXG4gICAgICAgIGNhY2hlUG9vbDogbnVsbCxcbiAgICAgICAgdHJhbnNpdGlvbnM6IG51bGxcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTI7IC8vIFB1c2ggdGhlIGxhbmVzIHRoYXQgd2VyZSBza2lwcGVkIHdoZW4gd2UgYmFpbGVkIG91dC5cblxuICAgICAgdmFyIHN1YnRyZWVSZW5kZXJMYW5lcyA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5iYXNlTGFuZXMgOiByZW5kZXJMYW5lcztcblxuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBSZW5kZXJpbmcgYSB2aXNpYmxlIHRyZWUuXG4gICAgdmFyIF9zdWJ0cmVlUmVuZGVyTGFuZXM7XG5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBnb2luZyBmcm9tIGhpZGRlbiAtPiB2aXNpYmxlLlxuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IG1lcmdlTGFuZXMocHJldlN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugd2VyZW4ndCBwcmV2aW91c2x5IGhpZGRlbiwgYW5kIHdlIHN0aWxsIGFyZW4ndCwgc28gdGhlcmUncyBub3RoaW5nXG4gICAgICAvLyBzcGVjaWFsIHRvIGRvLiBOZWVkIHRvIHB1c2ggdG8gdGhlIHN0YWNrIHJlZ2FyZGxlc3MsIHRob3VnaCwgdG8gYXZvaWRcbiAgICAgIC8vIGEgcHVzaC9wb3AgbWlzYWxpZ25tZW50LlxuICAgICAgX3N1YnRyZWVSZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgIH1cblxuICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgX3N1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn0gLy8gTm90ZTogVGhlc2UgaGFwcGVuIHRvIGhhdmUgaWRlbnRpY2FsIGJlZ2luIHBoYXNlcywgZm9yIG5vdy4gV2Ugc2hvdWxkbid0IGhvbGRcblxuZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG5cbiAgICB7XG4gICAgICAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuICAgICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsICYmIHJlZiAhPT0gbnVsbCB8fCBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQucmVmICE9PSByZWYpIHtcbiAgICAvLyBTY2hlZHVsZSBhIFJlZiBlZmZlY3RcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG5cbiAgICB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWZTdGF0aWM7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgY29udGV4dDtcblxuICB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBuZXh0Q2hpbGRyZW47XG4gIHZhciBoYXNJZDtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQod29ya0luUHJvZ3Jlc3MpO1xuICB9XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICBoYXNJZCA9IGNoZWNrRGlkUmVuZGVySWRIb29rKCk7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBoYXNJZCA9IGNoZWNrRGlkUmVuZGVySWRIb29rKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyhmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9XG5cbiAge1xuICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCk7XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSAmJiBoYXNJZCkge1xuICAgIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICAvLyBUaGlzIGlzIHVzZWQgYnkgRGV2VG9vbHMgdG8gZm9yY2UgYSBib3VuZGFyeSB0byBlcnJvci5cbiAgICBzd2l0Y2ggKHNob3VsZEVycm9yKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgY2FzZSBmYWxzZTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICAgICAgdmFyIGN0b3IgPSB3b3JrSW5Qcm9ncmVzcy50eXBlOyAvLyBUT0RPIFRoaXMgd2F5IG9mIHJlc2V0dGluZyB0aGUgZXJyb3IgYm91bmRhcnkgc3RhdGUgaXMgYSBoYWNrLlxuICAgICAgICAgIC8vIElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzP1xuXG4gICAgICAgICAgdmFyIHRlbXBJbnN0YW5jZSA9IG5ldyBjdG9yKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMsIF9pbnN0YW5jZS5jb250ZXh0KTtcbiAgICAgICAgICB2YXIgc3RhdGUgPSB0ZW1wSW5zdGFuY2Uuc3RhdGU7XG5cbiAgICAgICAgICBfaW5zdGFuY2UudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUoX2luc3RhbmNlLCBzdGF0ZSwgbnVsbCk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIHRydWU6XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9wcm9kLWVycm9yLWNvZGVzXG5cbiAgICAgICAgICB2YXIgZXJyb3IkMSA9IG5ldyBFcnJvcignU2ltdWxhdGVkIGVycm9yIGNvbWluZyBmcm9tIERldlRvb2xzJyk7XG4gICAgICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyZW5kZXJMYW5lcyk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBsYW5lKTsgLy8gU2NoZWR1bGUgdGhlIGVycm9yIGJvdW5kYXJ5IHRvIHJlLXJlbmRlciB1c2luZyB1cGRhdGVkIHN0YXRlXG5cbiAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoZXJyb3IkMSwgd29ya0luUHJvZ3Jlc3MpLCBsYW5lKTtcbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIHVwZGF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgaW5uZXJQcm9wVHlwZXMgPSBDb21wb25lbnQucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG5cbiAgdmFyIGhhc0NvbnRleHQ7XG5cbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBzaG91bGRVcGRhdGU7XG5cbiAgaWYgKGluc3RhbmNlID09PSBudWxsKSB7XG4gICAgcmVzZXRTdXNwZW5kZWRDdXJyZW50T25Nb3VudEluTGVnYWN5TW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7IC8vIEluIHRoZSBpbml0aWFsIHBhc3Mgd2UgbWlnaHQgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlLlxuXG4gICAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICBzaG91bGRVcGRhdGUgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJbiBhIHJlc3VtZSwgd2UnbGwgYWxyZWFkeSBoYXZlIGFuIGluc3RhbmNlIHdlIGNhbiByZXVzZS5cbiAgICBzaG91bGRVcGRhdGUgPSByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVXBkYXRlID0gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBuZXh0VW5pdE9mV29yayA9IGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICB2YXIgaW5zdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChzaG91bGRVcGRhdGUgJiYgaW5zdC5wcm9wcyAhPT0gbmV4dFByb3BzKSB7XG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgZXJyb3IoJ0l0IGxvb2tzIGxpa2UgJXMgaXMgcmVhc3NpZ25pbmcgaXRzIG93biBgdGhpcy5wcm9wc2Agd2hpbGUgcmVuZGVyaW5nLiAnICsgJ1RoaXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgY2FuIGxlYWQgdG8gY29uZnVzaW5nIGJ1Z3MuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgJ2EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0VW5pdE9mV29yaztcbn1cblxuZnVuY3Rpb24gZmluaXNoQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgc2hvdWxkVXBkYXRlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcykge1xuICAvLyBSZWZzIHNob3VsZCB1cGRhdGUgZXZlbiBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZVxuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGRpZENhcHR1cmVFcnJvciA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gIGlmICghc2hvdWxkVXBkYXRlICYmICFkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBDb250ZXh0IHByb3ZpZGVycyBzaG91bGQgZGVmZXIgdG8gc0NVIGZvciByZW5kZXJpbmdcbiAgICBpZiAoaGFzQ29udGV4dCkge1xuICAgICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTsgLy8gUmVyZW5kZXJcblxuICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgdmFyIG5leHRDaGlsZHJlbjtcblxuICBpZiAoZGlkQ2FwdHVyZUVycm9yICYmIHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYgd2UgY2FwdHVyZWQgYW4gZXJyb3IsIGJ1dCBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXMgbm90IGRlZmluZWQsXG4gICAgLy8gdW5tb3VudCBhbGwgdGhlIGNoaWxkcmVuLiBjb21wb25lbnREaWRDYXRjaCB3aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB0b1xuICAgIC8vIHJlLXJlbmRlciBhIGZhbGxiYWNrLiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBtaWdyYXRlIGV2ZXJ5b25lIHRvXG4gICAgLy8gdGhlIG5ldyBBUEkuXG4gICAgLy8gVE9ETzogV2FybiBpbiBhIGZ1dHVyZSByZWxlYXNlLlxuICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG5cbiAgICB7XG4gICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZygpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuXG4gICAge1xuICAgICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgICBuZXh0Q2hpbGRyZW4gPSBpbnN0YW5jZS5yZW5kZXIoKTtcblxuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKTtcbiAgICB9XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBJZiB3ZSdyZSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlY29uY2lsZSB3aXRob3V0IHJldXNpbmcgYW55IG9mXG4gICAgLy8gdGhlIGV4aXN0aW5nIGNoaWxkcmVuLiBDb25jZXB0dWFsbHksIHRoZSBub3JtYWwgY2hpbGRyZW4gYW5kIHRoZSBjaGlsZHJlblxuICAgIC8vIHRoYXQgYXJlIHNob3duIG9uIGVycm9yIGFyZSB0d28gZGlmZmVyZW50IHNldHMsIHNvIHdlIHNob3VsZG4ndCByZXVzZVxuICAgIC8vIG5vcm1hbCBjaGlsZHJlbiBldmVuIGlmIHRoZWlyIGlkZW50aXRpZXMgbWF0Y2guXG4gICAgZm9yY2VVbm1vdW50Q3VycmVudEFuZFJlY29uY2lsZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IC8vIE1lbW9pemUgc3RhdGUgdXNpbmcgdGhlIHZhbHVlcyB3ZSBqdXN0IHVzZWQgdG8gcmVuZGVyLlxuICAvLyBUT0RPOiBSZXN0cnVjdHVyZSBzbyB3ZSBuZXZlciByZWFkIHZhbHVlcyBmcm9tIHRoZSBpbnN0YW5jZS5cblxuXG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTsgLy8gVGhlIGNvbnRleHQgbWlnaHQgaGF2ZSBjaGFuZ2VkIHNvIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgaXQuXG5cbiAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSB7XG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmIChyb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5wZW5kaW5nQ29udGV4dCwgcm9vdC5wZW5kaW5nQ29udGV4dCAhPT0gcm9vdC5jb250ZXh0KTtcbiAgfSBlbHNlIGlmIChyb290LmNvbnRleHQpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGJlIHNldFxuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGV4dCwgZmFsc2UpO1xuICB9XG5cbiAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHJvb3QuY29udGFpbmVySW5mbyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2hvdWxkIGhhdmUgYSBjdXJyZW50IGZpYmVyLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICB9XG5cbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBwcmV2Q2hpbGRyZW4gPSBwcmV2U3RhdGUuZWxlbWVudDtcbiAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gIHZhciBuZXh0U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG5cbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRTdGF0ZS5lbGVtZW50O1xuXG4gIGlmICggcHJldlN0YXRlLmlzRGVoeWRyYXRlZCkge1xuICAgIC8vIFRoaXMgaXMgYSBoeWRyYXRpb24gcm9vdCB3aG9zZSBzaGVsbCBoYXMgbm90IHlldCBoeWRyYXRlZC4gV2Ugc2hvdWxkXG4gICAgLy8gYXR0ZW1wdCB0byBoeWRyYXRlLlxuICAgIC8vIEZsaXAgaXNEZWh5ZHJhdGVkIHRvIGZhbHNlIHRvIGluZGljYXRlIHRoYXQgd2hlbiB0aGlzIHJlbmRlclxuICAgIC8vIGZpbmlzaGVzLCB0aGUgcm9vdCB3aWxsIG5vIGxvbmdlciBiZSBkZWh5ZHJhdGVkLlxuICAgIHZhciBvdmVycmlkZVN0YXRlID0ge1xuICAgICAgZWxlbWVudDogbmV4dENoaWxkcmVuLFxuICAgICAgaXNEZWh5ZHJhdGVkOiBmYWxzZSxcbiAgICAgIGNhY2hlOiBuZXh0U3RhdGUuY2FjaGUsXG4gICAgICBwZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzOiBuZXh0U3RhdGUucGVuZGluZ1N1c3BlbnNlQm91bmRhcmllcyxcbiAgICAgIHRyYW5zaXRpb25zOiBuZXh0U3RhdGUudHJhbnNpdGlvbnNcbiAgICB9O1xuICAgIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlOyAvLyBgYmFzZVN0YXRlYCBjYW4gYWx3YXlzIGJlIHRoZSBsYXN0IHN0YXRlIGJlY2F1c2UgdGhlIHJvb3QgZG9lc24ndFxuICAgIC8vIGhhdmUgcmVkdWNlciBmdW5jdGlvbnMgc28gaXQgZG9lc24ndCBuZWVkIHJlYmFzaW5nLlxuXG4gICAgdXBkYXRlUXVldWUuYmFzZVN0YXRlID0gb3ZlcnJpZGVTdGF0ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gb3ZlcnJpZGVTdGF0ZTtcblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIEZvcmNlQ2xpZW50UmVuZGVyKSB7XG4gICAgICAvLyBTb21ldGhpbmcgZXJyb3JlZCBkdXJpbmcgYSBwcmV2aW91cyBhdHRlbXB0IHRvIGh5ZHJhdGUgdGhlIHNoZWxsLCBzbyB3ZVxuICAgICAgLy8gZm9yY2VkIGEgY2xpZW50IHJlbmRlci5cbiAgICAgIHZhciByZWNvdmVyYWJsZUVycm9yID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIobmV3IEVycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgaHlkcmF0aW5nLiBCZWNhdXNlIHRoZSBlcnJvciBoYXBwZW5lZCBvdXRzaWRlICcgKyAnb2YgYSBTdXNwZW5zZSBib3VuZGFyeSwgdGhlIGVudGlyZSByb290IHdpbGwgc3dpdGNoIHRvICcgKyAnY2xpZW50IHJlbmRlcmluZy4nKSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG1vdW50SG9zdFJvb3RXaXRob3V0SHlkcmF0aW5nKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzLCByZWNvdmVyYWJsZUVycm9yKTtcbiAgICB9IGVsc2UgaWYgKG5leHRDaGlsZHJlbiAhPT0gcHJldkNoaWxkcmVuKSB7XG4gICAgICB2YXIgX3JlY292ZXJhYmxlRXJyb3IgPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihuZXcgRXJyb3IoJ1RoaXMgcm9vdCByZWNlaXZlZCBhbiBlYXJseSB1cGRhdGUsIGJlZm9yZSBhbnl0aGluZyB3YXMgYWJsZSAnICsgJ2h5ZHJhdGUuIFN3aXRjaGVkIHRoZSBlbnRpcmUgcm9vdCB0byBjbGllbnQgcmVuZGVyaW5nLicpLCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIHJldHVybiBtb3VudEhvc3RSb290V2l0aG91dEh5ZHJhdGluZyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcywgX3JlY292ZXJhYmxlRXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgb3V0ZXJtb3N0IHNoZWxsIGhhcyBub3QgaHlkcmF0ZWQgeWV0LiBTdGFydCBoeWRyYXRpbmcuXG4gICAgICBlbnRlckh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgdmFyIGNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICAgICAgdmFyIG5vZGUgPSBjaGlsZDtcblxuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgLy8gTWFyayBlYWNoIGNoaWxkIGFzIGh5ZHJhdGluZy4gVGhpcyBpcyBhIGZhc3QgcGF0aCB0byBrbm93IHdoZXRoZXIgdGhpc1xuICAgICAgICAvLyB0cmVlIGlzIHBhcnQgb2YgYSBoeWRyYXRpbmcgdHJlZS4gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIGNoaWxkXG4gICAgICAgIC8vIG5vZGUgaGFzIGZ1bGx5IG1vdW50ZWQgeWV0LCBhbmQgZm9yIHNjaGVkdWxpbmcgZXZlbnQgcmVwbGF5aW5nLlxuICAgICAgICAvLyBDb25jZXB0dWFsbHkgdGhpcyBpcyBzaW1pbGFyIHRvIFBsYWNlbWVudCBpbiB0aGF0IGEgbmV3IHN1YnRyZWUgaXNcbiAgICAgICAgLy8gaW5zZXJ0ZWQgaW50byB0aGUgUmVhY3QgdHJlZSBoZXJlLiBJdCBqdXN0IGhhcHBlbnMgdG8gbm90IG5lZWQgRE9NXG4gICAgICAgIC8vIG11dGF0aW9ucyBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzLlxuICAgICAgICBub2RlLmZsYWdzID0gbm9kZS5mbGFncyAmIH5QbGFjZW1lbnQgfCBIeWRyYXRpbmc7XG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFJvb3QgaXMgbm90IGRlaHlkcmF0ZWQuIEVpdGhlciB0aGlzIGlzIGEgY2xpZW50LW9ubHkgcm9vdCwgb3IgaXRcbiAgICAvLyBhbHJlYWR5IGh5ZHJhdGVkLlxuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcblxuICAgIGlmIChuZXh0Q2hpbGRyZW4gPT09IHByZXZDaGlsZHJlbikge1xuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50SG9zdFJvb3RXaXRob3V0SHlkcmF0aW5nKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzLCByZWNvdmVyYWJsZUVycm9yKSB7XG4gIC8vIFJldmVydCB0byBjbGllbnQgcmVuZGVyaW5nLlxuICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gIHF1ZXVlSHlkcmF0aW9uRXJyb3IocmVjb3ZlcmFibGVFcnJvcik7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IEZvcmNlQ2xpZW50UmVuZGVyO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBudWxsO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgaXNEaXJlY3RUZXh0Q2hpbGQgPSBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBuZXh0UHJvcHMpO1xuXG4gIGlmIChpc0RpcmVjdFRleHRDaGlsZCkge1xuICAgIC8vIFdlIHNwZWNpYWwgY2FzZSBhIGRpcmVjdCB0ZXh0IGNoaWxkIG9mIGEgaG9zdCBub2RlLiBUaGlzIGlzIGEgY29tbW9uXG4gICAgLy8gY2FzZS4gV2Ugd29uJ3QgaGFuZGxlIGl0IGFzIGEgcmVpZmllZCBjaGlsZC4gV2Ugd2lsbCBpbnN0ZWFkIGhhbmRsZVxuICAgIC8vIHRoaXMgaW4gdGhlIGhvc3QgZW52aXJvbm1lbnQgdGhhdCBhbHNvIGhhcyBhY2Nlc3MgdG8gdGhpcyBwcm9wLiBUaGF0XG4gICAgLy8gYXZvaWRzIGFsbG9jYXRpbmcgYW5vdGhlciBIb3N0VGV4dCBmaWJlciBhbmQgdHJhdmVyc2luZyBpdC5cbiAgICBuZXh0Q2hpbGRyZW4gPSBudWxsO1xuICB9IGVsc2UgaWYgKHByZXZQcm9wcyAhPT0gbnVsbCAmJiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcmV2UHJvcHMpKSB7XG4gICAgLy8gSWYgd2UncmUgc3dpdGNoaW5nIGZyb20gYSBkaXJlY3QgdGV4dCBjaGlsZCB0byBhIG5vcm1hbCBjaGlsZCwgb3IgdG9cbiAgICAvLyBlbXB0eSwgd2UgbmVlZCB0byBzY2hlZHVsZSB0aGUgdGV4dCBjb250ZW50IHRvIGJlIHJlc2V0LlxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IENvbnRlbnRSZXNldDtcbiAgfVxuXG4gIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFRleHQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIGlzIHRlcm1pbmFsLiBXZSdsbCBkbyB0aGUgY29tcGxldGlvbiBzdGVwXG4gIC8vIGltbWVkaWF0ZWx5IGFmdGVyLlxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF6eUNvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCByZW5kZXJMYW5lcykge1xuICByZXNldFN1c3BlbmRlZEN1cnJlbnRPbk1vdW50SW5MZWdhY3lNb2RlKF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIGxhenlDb21wb25lbnQgPSBlbGVtZW50VHlwZTtcbiAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG4gIHZhciBDb21wb25lbnQgPSBpbml0KHBheWxvYWQpOyAvLyBTdG9yZSB0aGUgdW53cmFwcGVkIGNvbXBvbmVudCBpbiB0aGUgdHlwZS5cblxuICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50O1xuICB2YXIgcmVzb2x2ZWRUYWcgPSB3b3JrSW5Qcm9ncmVzcy50YWcgPSByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpO1xuICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBwcm9wcyk7XG4gIHZhciBjaGlsZDtcblxuICBzd2l0Y2ggKHJlc29sdmVkVGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRm9yd2FyZFJlZihudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCByZXNvbHZlZFByb3BzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZU1lbW9Db21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQudHlwZSwgcmVzb2x2ZWRQcm9wcyksIC8vIFRoZSBpbm5lciB0eXBlIGNhbiBoYXZlIGRlZmF1bHRzIHRvb1xuICAgICAgICByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgfVxuXG4gIHZhciBoaW50ID0gJyc7XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQgIT09IG51bGwgJiYgdHlwZW9mIENvbXBvbmVudCA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgIGhpbnQgPSAnIERpZCB5b3Ugd3JhcCBhIGNvbXBvbmVudCBpbiBSZWFjdC5sYXp5KCkgbW9yZSB0aGFuIG9uY2U/JztcbiAgICB9XG4gIH0gLy8gVGhpcyBtZXNzYWdlIGludGVudGlvbmFsbHkgZG9lc24ndCBtZW50aW9uIEZvcndhcmRSZWYgb3IgTWVtb0NvbXBvbmVudFxuICAvLyBiZWNhdXNlIHRoZSBmYWN0IHRoYXQgaXQncyBhIHNlcGFyYXRlIHR5cGUgb2Ygd29yayBpcyBhblxuICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuXG5cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZC4gUmVjZWl2ZWQgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG86IFwiICsgQ29tcG9uZW50ICsgXCIuIFwiICsgKFwiTGF6eSBlbGVtZW50IHR5cGUgbXVzdCByZXNvbHZlIHRvIGEgY2xhc3Mgb3IgZnVuY3Rpb24uXCIgKyBoaW50KSk7XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzKTsgLy8gUHJvbW90ZSB0aGUgZmliZXIgdG8gYSBjbGFzcyBhbmQgdHJ5IHJlbmRlcmluZyBhZ2Fpbi5cblxuICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiBpcyBhIGZvcmsgb2YgYHVwZGF0ZUNsYXNzQ29tcG9uZW50YFxuICAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICB2YXIgaGFzQ29udGV4dDtcblxuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlbmRlckxhbmVzKSB7XG4gIHJlc2V0U3VzcGVuZGVkQ3VycmVudE9uTW91bnRJbkxlZ2FjeU1vZGUoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgY29udGV4dDtcblxuICB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgdmFsdWU7XG4gIHZhciBoYXNJZDtcblxuICB7XG4gICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQod29ya0luUHJvZ3Jlc3MpO1xuICB9XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQucHJvdG90eXBlICYmIHR5cGVvZiBDb21wb25lbnQucHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoXCJUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGhhdmUgYSByZW5kZXIgbWV0aG9kLCBidXQgZG9lc24ndCBleHRlbmQgUmVhY3QuQ29tcG9uZW50LiBcIiArICdUaGlzIGlzIGxpa2VseSB0byBjYXVzZSBlcnJvcnMuIENoYW5nZSAlcyB0byBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0QmFkQ2xhc3NbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIG51bGwpO1xuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgaGFzSWQgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIHtcbiAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAge1xuICAgIC8vIFN1cHBvcnQgZm9yIG1vZHVsZSBjb21wb25lbnRzIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIHJlbW92ZWQgYmVoaW5kIGEgZmxhZy5cbiAgICAvLyBXaGV0aGVyIG9yIG5vdCBpdCB3b3VsZCBjcmFzaCBsYXRlciwgd2Ugd2FudCB0byBzaG93IGEgZ29vZCBtZXNzYWdlIGluIERFViBmaXJzdC5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUucmVuZGVyID09PSAnZnVuY3Rpb24nICYmIHZhbHVlLiQkdHlwZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYSBjbGFzcyBpbnN0YW5jZS4gJyArICdDaGFuZ2UgJXMgdG8gYSBjbGFzcyB0aGF0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuICcgKyBcIklmIHlvdSBjYW4ndCB1c2UgYSBjbGFzcyB0cnkgYXNzaWduaW5nIHRoZSBwcm90b3R5cGUgb24gdGhlIGZ1bmN0aW9uIGFzIGEgd29ya2Fyb3VuZC4gXCIgKyBcImAlcy5wcm90b3R5cGUgPSBSZWFjdC5Db21wb25lbnQucHJvdG90eXBlYC4gRG9uJ3QgdXNlIGFuIGFycm93IGZ1bmN0aW9uIHNpbmNlIGl0IFwiICsgJ2Nhbm5vdCBiZSBjYWxsZWQgd2l0aCBgbmV3YCBieSBSZWFjdC4nLCBfY29tcG9uZW50TmFtZSwgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCAvLyBSdW4gdGhlc2UgY2hlY2tzIGluIHByb2R1Y3Rpb24gb25seSBpZiB0aGUgZmxhZyBpcyBvZmYuXG4gIC8vIEV2ZW50dWFsbHkgd2UnbGwgZGVsZXRlIHRoaXMgYnJhbmNoIGFsdG9nZXRoZXIuXG4gICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZS5yZW5kZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTIgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdKSB7XG4gICAgICAgIGVycm9yKCdUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50IHRoYXQgcmV0dXJucyBhIGNsYXNzIGluc3RhbmNlLiAnICsgJ0NoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gJyArIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArIFwiYCVzLnByb3RvdHlwZSA9IFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGVgLiBEb24ndCB1c2UgYW4gYXJyb3cgZnVuY3Rpb24gc2luY2UgaXQgXCIgKyAnY2Fubm90IGJlIGNhbGxlZCB3aXRoIGBuZXdgIGJ5IFJlYWN0LicsIF9jb21wb25lbnROYW1lMiwgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGNsYXNzIGluc3RhbmNlXG5cblxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaHJvdyBvdXQgYW55IGhvb2tzIHRoYXQgd2VyZSB1c2VkLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsOyAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAgIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgICB2YXIgaGFzQ29udGV4dCA9IGZhbHNlO1xuXG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gdmFsdWUuc3RhdGUgIT09IG51bGwgJiYgdmFsdWUuc3RhdGUgIT09IHVuZGVmaW5lZCA/IHZhbHVlLnN0YXRlIDogbnVsbDtcbiAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICAgIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgdmFsdWUpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHJvY2VlZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbiBjb21wb25lbnRcbiAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBGdW5jdGlvbkNvbXBvbmVudDtcblxuICAgIHtcblxuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyh0cnVlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgaGFzSWQgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChnZXRJc0h5ZHJhdGluZygpICYmIGhhc0lkKSB7XG4gICAgICBwdXNoTWF0ZXJpYWxpemVkVHJlZUlkKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihudWxsLCB3b3JrSW5Qcm9ncmVzcywgdmFsdWUsIHJlbmRlckxhbmVzKTtcblxuICAgIHtcbiAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpIHtcbiAge1xuICAgIGlmIChDb21wb25lbnQpIHtcbiAgICAgIGlmIChDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IGNoaWxkQ29udGV4dFR5cGVzIGNhbm5vdCBiZSBkZWZpbmVkIG9uIGEgZnVuY3Rpb24gY29tcG9uZW50LicsIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgdmFyIGluZm8gPSAnJztcbiAgICAgIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpO1xuXG4gICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgIGluZm8gKz0gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgICAgIH1cblxuICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvd25lck5hbWUgfHwgJyc7XG4gICAgICB2YXIgZGVidWdTb3VyY2UgPSB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTb3VyY2U7XG5cbiAgICAgIGlmIChkZWJ1Z1NvdXJjZSkge1xuICAgICAgICB3YXJuaW5nS2V5ID0gZGVidWdTb3VyY2UuZmlsZU5hbWUgKyAnOicgKyBkZWJ1Z1NvdXJjZS5saW5lTnVtYmVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmc1t3YXJuaW5nS2V5XSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBiZSBnaXZlbiByZWZzLiAnICsgJ0F0dGVtcHRzIHRvIGFjY2VzcyB0aGlzIHJlZiB3aWxsIGZhaWwuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHVzZSBSZWFjdC5mb3J3YXJkUmVmKCk/JXMnLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTMgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTNdKSB7XG4gICAgICAgIGVycm9yKCclczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuJywgX2NvbXBvbmVudE5hbWUzKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBDb21wb25lbnQuY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTQgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0pIHtcbiAgICAgICAgZXJyb3IoJyVzOiBGdW5jdGlvbiBjb21wb25lbnRzIGRvIG5vdCBzdXBwb3J0IGNvbnRleHRUeXBlLicsIF9jb21wb25lbnROYW1lNCk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lNF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgU1VTUEVOREVEX01BUktFUiA9IHtcbiAgZGVoeWRyYXRlZDogbnVsbCxcbiAgdHJlZUNvbnRleHQ6IG51bGwsXG4gIHJldHJ5TGFuZTogTm9MYW5lXG59O1xuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlTGFuZXM6IHJlbmRlckxhbmVzLFxuICAgIGNhY2hlUG9vbDogZ2V0U3VzcGVuZGVkQ2FjaGUoKSxcbiAgICB0cmFuc2l0aW9uczogbnVsbFxuICB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGNhY2hlUG9vbCA9IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICBiYXNlTGFuZXM6IG1lcmdlTGFuZXMocHJldk9mZnNjcmVlblN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpLFxuICAgIGNhY2hlUG9vbDogY2FjaGVQb29sLFxuICAgIHRyYW5zaXRpb25zOiBwcmV2T2Zmc2NyZWVuU3RhdGUudHJhbnNpdGlvbnNcbiAgfTtcbn0gLy8gVE9ETzogUHJvYmFibHkgc2hvdWxkIGlubGluZSB0aGlzIGJhY2tcblxuXG5mdW5jdGlvbiBzaG91bGRSZW1haW5PbkZhbGxiYWNrKHN1c3BlbnNlQ29udGV4dCwgY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIElmIHdlJ3JlIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0b1xuICAvLyByZW1haW4gb24gdGhhdCBmYWxsYmFjayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNvbnRlbnQgaGFzIHJlc29sdmVkLlxuICAvLyBGb3IgZXhhbXBsZSwgU3VzcGVuc2VMaXN0IGNvb3JkaW5hdGVzIHdoZW4gbmVzdGVkIGNvbnRlbnQgYXBwZWFycy5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICAvLyBDdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBEb24ndCBoaWRlIGl0LCBldmVuIGlmIEZvcmNlU3VzcGVuc2VGYWxsYmFja1xuICAgICAgLy8gaXMgdHJ1ZS4gTW9yZSBwcmVjaXNlIG5hbWUgbWlnaHQgYmUgXCJGb3JjZVJlbWFpblN1c3BlbnNlRmFsbGJhY2tcIi5cbiAgICAgIC8vIE5vdGU6IFRoaXMgaXMgYSBmYWN0b3Jpbmcgc21lbGwuIENhbid0IHJlbWFpbiBvbiBhIGZhbGxiYWNrIGlmIHRoZXJlJ3NcbiAgICAgIC8vIG5vIGZhbGxiYWNrIHRvIHJlbWFpbiBvbi5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gLy8gTm90IGN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIENvbnN1bHQgdGhlIFN1c3BlbnNlIGNvbnRleHQuXG5cblxuICByZXR1cm4gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogU2hvdWxkIG5vdCByZW1vdmUgcmVuZGVyIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgZHVyaW5nIHRoaXMgcmVuZGVyXG4gIHJldHVybiByZW1vdmVMYW5lcyhjdXJyZW50LmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFRoaXMgaXMgdXNlZCBieSBEZXZUb29scyB0byBmb3JjZSBhIGJvdW5kYXJ5IHRvIHN1c3BlbmQuXG5cbiAge1xuICAgIGlmIChzaG91bGRTdXNwZW5kKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuICB2YXIgc2hvd0ZhbGxiYWNrID0gZmFsc2U7XG4gIHZhciBkaWRTdXNwZW5kID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKGRpZFN1c3BlbmQgfHwgc2hvdWxkUmVtYWluT25GYWxsYmFjayhzdXNwZW5zZUNvbnRleHQsIGN1cnJlbnQpKSB7XG4gICAgLy8gU29tZXRoaW5nIGluIHRoaXMgYm91bmRhcnkncyBzdWJ0cmVlIGFscmVhZHkgc3VzcGVuZGVkLiBTd2l0Y2ggdG9cbiAgICAvLyByZW5kZXJpbmcgdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgIHNob3dGYWxsYmFjayA9IHRydWU7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfkRpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXR0ZW1wdGluZyB0aGUgbWFpbiBjb250ZW50XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgbmV3IG1vdW50IG9yIHRoaXMgYm91bmRhcnkgaXMgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgc3RhdGUuXG4gICAgICAvLyBNYXJrIHRoaXMgc3VidHJlZSBjb250ZXh0IGFzIGhhdmluZyBhdCBsZWFzdCBvbmUgaW52aXNpYmxlIHBhcmVudCB0aGF0IGNvdWxkXG4gICAgICAvLyBoYW5kbGUgdGhlIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gQXZvaWRlZCBib3VuZGFyaWVzIGFyZSBub3QgY29uc2lkZXJlZCBzaW5jZSB0aGV5IGNhbm5vdCBoYW5kbGUgcHJlZmVycmVkIGZhbGxiYWNrIHN0YXRlcy5cbiAgICAgIHtcbiAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gYWRkU3VidHJlZVN1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTsgLy8gT0ssIHRoZSBuZXh0IHBhcnQgaXMgY29uZnVzaW5nLiBXZSdyZSBhYm91dCB0byByZWNvbmNpbGUgdGhlIFN1c3BlbnNlXG4gIC8vIGJvdW5kYXJ5J3MgY2hpbGRyZW4uIFRoaXMgaW52b2x2ZXMgc29tZSBjdXN0b20gcmVjb25jaWxpYXRpb24gbG9naWMuIFR3b1xuICAvLyBtYWluIHJlYXNvbnMgdGhpcyBpcyBzbyBjb21wbGljYXRlZC5cbiAgLy9cbiAgLy8gRmlyc3QsIExlZ2FjeSBNb2RlIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlXG4gIC8vIHByaW1hcnkgdHJlZSB3aWxsIGNvbW1pdCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIHNvIHdoZW4gd2UgZG8gdGhlXG4gIC8vIHNlY29uZCBwYXNzIHRvIHJlbmRlciB0aGUgZmFsbGJhY2ssIHdlIGRvIHNvbWUgZXhjZWVkaW5nbHksIHVoLCBjbGV2ZXJcbiAgLy8gaGFja3MgdG8gbWFrZSB0aGF0IG5vdCB0b3RhbGx5IGJyZWFrLiBMaWtlIHRyYW5zZmVycmluZyBlZmZlY3RzIGFuZFxuICAvLyBkZWxldGlvbnMgZnJvbSBoaWRkZW4gdHJlZS4gSW4gQ29uY3VycmVudCBNb2RlLCBpdCdzIG11Y2ggc2ltcGxlcixcbiAgLy8gYmVjYXVzZSB3ZSBiYWlsb3V0IG9uIHRoZSBwcmltYXJ5IHRyZWUgY29tcGxldGVseSBhbmQgbGVhdmUgaXQgaW4gaXRzIG9sZFxuICAvLyBzdGF0ZSwgbm8gZWZmZWN0cy4gU2FtZSBhcyB3aGF0IHdlIGRvIGZvciBPZmZzY3JlZW4gKGV4Y2VwdCB0aGF0XG4gIC8vIE9mZnNjcmVlbiBkb2Vzbid0IGhhdmUgdGhlIGZpcnN0IHJlbmRlciBwYXNzKS5cbiAgLy9cbiAgLy8gU2Vjb25kIGlzIGh5ZHJhdGlvbi4gRHVyaW5nIGh5ZHJhdGlvbiwgdGhlIFN1c3BlbnNlIGZpYmVyIGhhcyBhIHNsaWdodGx5XG4gIC8vIGRpZmZlcmVudCBsYXlvdXQsIHdoZXJlIHRoZSBjaGlsZCBwb2ludHMgdG8gYSBkZWh5ZHJhdGVkIGZyYWdtZW50LCB3aGljaFxuICAvLyBjb250YWlucyB0aGUgRE9NIHJlbmRlcmVkIGJ5IHRoZSBzZXJ2ZXIuXG4gIC8vXG4gIC8vIFRoaXJkLCBldmVuIGlmIHlvdSBzZXQgYWxsIHRoYXQgYXNpZGUsIFN1c3BlbnNlIGlzIGxpa2UgZXJyb3IgYm91bmRhcmllcyBpblxuICAvLyB0aGF0IHdlIGZpcnN0IHdlIHRyeSB0byByZW5kZXIgb25lIHRyZWUsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSByZW5kZXIgYWdhaW5cbiAgLy8gYW5kIHN3aXRjaCB0byBhIGRpZmZlcmVudCB0cmVlLiBMaWtlIGEgdHJ5L2NhdGNoIGJsb2NrLiBTbyB3ZSBoYXZlIHRvIHRyYWNrXG4gIC8vIHdoaWNoIGJyYW5jaCB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nLiBJZGVhbGx5IHdlIHdvdWxkIG1vZGVsIHRoaXMgdXNpbmdcbiAgLy8gYSBzdGFjay5cblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICAvLyBTcGVjaWFsIHBhdGggZm9yIGh5ZHJhdGlvblxuICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBoeWRyYXRpbmcsIHRyeSB0byBoeWRyYXRlIHRoaXMgYm91bmRhcnkuXG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpOyAvLyBUaGlzIGNvdWxkJ3ZlIGJlZW4gYSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGNvbXBvbmVudC5cblxuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICB2YXIgZGVoeWRyYXRlZCA9IHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgaWYgKGRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG1vdW50RGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KHdvcmtJblByb2dyZXNzLCBkZWh5ZHJhdGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgbmV4dEZhbGxiYWNrQ2hpbGRyZW4gPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG5cbiAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICB2YXIgZmFsbGJhY2tGcmFnbWVudCA9IG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCBuZXh0RmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5tZW1vaXplZFN0YXRlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuXG4gICAgICByZXR1cm4gZmFsbGJhY2tGcmFnbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGFuIHVwZGF0ZS5cbiAgICAvLyBTcGVjaWFsIHBhdGggZm9yIGh5ZHJhdGlvblxuICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICB2YXIgX2RlaHlkcmF0ZWQgPSBwcmV2U3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgaWYgKF9kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVEZWh5ZHJhdGVkU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGRpZFN1c3BlbmQsIG5leHRQcm9wcywgX2RlaHlkcmF0ZWQsIHByZXZTdGF0ZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4gPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbiwgX25leHRGYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50MiA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDIubWVtb2l6ZWRTdGF0ZSA9IHByZXZPZmZzY3JlZW5TdGF0ZSA9PT0gbnVsbCA/IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykgOiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQyLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjIgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzID0gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihwcmltYXJ5Q2hpbGRQcm9wcywgbW9kZSk7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICB2YXIgZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuXG4gIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlICYmIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gICAgLy8gY29tcGxldGVkLCBldmVuIHRob3VnaCBpdCdzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS5cbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgIH1cblxuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihwcmltYXJ5Q2hpbGRQcm9wcywgbW9kZSk7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKG9mZnNjcmVlblByb3BzLCBtb2RlLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGUgcHJvcHMgYXJndW1lbnQgdG8gYGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbmAgaXMgYGFueWAgdHlwZWQsIHNvIHdlIHVzZVxuICAvLyB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gdG8gY29uc3RyYWluIGl0LlxuICByZXR1cm4gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKG9mZnNjcmVlblByb3BzLCBtb2RlLCBOb0xhbmVzLCBudWxsKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcykge1xuICAvLyBUaGUgcHJvcHMgYXJndW1lbnQgdG8gYGNyZWF0ZVdvcmtJblByb2dyZXNzYCBpcyBgYW55YCB0eXBlZCwgc28gd2UgdXNlIHRoaXNcbiAgLy8gd3JhcHBlciBmdW5jdGlvbiB0byBjb25zdHJhaW4gaXQuXG4gIHJldHVybiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH0pO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFuZXMgPSByZW5kZXJMYW5lcztcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gbnVsbDtcblxuICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIC8vIERlbGV0ZSB0aGUgZmFsbGJhY2sgY2hpbGQgZnJhZ21lbnRcbiAgICB2YXIgZGVsZXRpb25zID0gd29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zO1xuXG4gICAgaWYgKGRlbGV0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gW2N1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnRdO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ2hpbGREZWxldGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRpb25zLnB1c2goY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCk7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgZmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuXG4gIGlmICggLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlICYmIC8vIE1ha2Ugc3VyZSB3ZSdyZSBvbiB0aGUgc2Vjb25kIHBhc3MsIGkuZS4gdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgd2FzXG4gIC8vIGFscmVhZHkgY2xvbmVkLiBJbiBsZWdhY3kgbW9kZSwgdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGlzIGlzbid0IHRydWUgaXNcbiAgLy8gd2hlbiBEZXZUb29scyBmb3JjZXMgdXMgdG8gZGlzcGxheSBhIGZhbGxiYWNrOyB3ZSBza2lwIHRoZSBmaXJzdCByZW5kZXJcbiAgLy8gcGFzcyBlbnRpcmVseSBhbmQgZ28gc3RyYWlnaHQgdG8gcmVuZGVyaW5nIHRoZSBmYWxsYmFjay4gKEluIENvbmN1cnJlbnRcbiAgLy8gTW9kZSwgU3VzcGVuc2VMaXN0IGNhbiBhbHNvIHRyaWdnZXIgdGhpcyBzY2VuYXJpbywgYnV0IHRoaXMgaXMgYSBsZWdhY3ktXG4gIC8vIG9ubHkgY29kZXBhdGguKVxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50KSB7XG4gICAgdmFyIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb247XG4gICAgfSAvLyBUaGUgZmFsbGJhY2sgZmliZXIgd2FzIGFkZGVkIGFzIGEgZGVsZXRpb24gZHVyaW5nIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIGdvaW5nIHRvIHJlbWFpbiBvbiB0aGUgZmFsbGJhY2ssIHdlIG5vIGxvbmdlciB3YW50XG4gICAgLy8gdG8gZGVsZXRlIGl0LlxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIHByaW1hcnlDaGlsZFByb3BzKTsgLy8gU2luY2Ugd2UncmUgcmV1c2luZyBhIGN1cnJlbnQgdHJlZSwgd2UgbmVlZCB0byByZXVzZSB0aGUgZmxhZ3MsIHRvby5cbiAgICAvLyAoV2UgZG9uJ3QgZG8gdGhpcyBpbiBsZWdhY3kgbW9kZSwgYmVjYXVzZSBpbiBsZWdhY3kgbW9kZSB3ZSBkb24ndCByZS11c2VcbiAgICAvLyB0aGUgY3VycmVudCB0cmVlOyBzZWUgcHJldmlvdXMgYnJhbmNoLilcblxuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnN1YnRyZWVGbGFncyA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zdWJ0cmVlRmxhZ3MgJiBTdGF0aWNNYXNrO1xuICB9XG5cbiAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQsIGZhbGxiYWNrQ2hpbGRyZW4pO1xuICB9IGVsc2Uge1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTsgLy8gTmVlZHMgYSBwbGFjZW1lbnQgZWZmZWN0IGJlY2F1c2UgdGhlIHBhcmVudCAodGhlIFN1c3BlbnNlIGJvdW5kYXJ5KSBhbHJlYWR5XG4gICAgLy8gbW91bnRlZCBidXQgdGhpcyBpcyBhIG5ldyBmaWJlci5cblxuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMsIHJlY292ZXJhYmxlRXJyb3IpIHtcbiAgLy8gRmFsbGluZyBiYWNrIHRvIGNsaWVudCByZW5kZXJpbmcuIEJlY2F1c2UgdGhpcyBoYXMgcGVyZm9ybWFuY2VcbiAgLy8gaW1wbGljYXRpb25zLCBpdCdzIGNvbnNpZGVyZWQgYSByZWNvdmVyYWJsZSBlcnJvciwgZXZlbiB0aG91Z2ggdGhlIHVzZXJcbiAgLy8gbGlrZWx5IHdvbid0IG9ic2VydmUgYW55dGhpbmcgd3Jvbmcgd2l0aCB0aGUgVUkuXG4gIC8vXG4gIC8vIFRoZSBlcnJvciBpcyBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQgdG8gZW5mb3JjZSB0aGF0IGV2ZXJ5IGNhbGxlciBwcm92aWRlXG4gIC8vIGEgY3VzdG9tIG1lc3NhZ2UsIG9yIGV4cGxpY2l0bHkgb3B0IG91dCAoY3VycmVudGx5IHRoZSBvbmx5IHBhdGggdGhhdCBvcHRzXG4gIC8vIG91dCBpcyBsZWdhY3kgbW9kZTsgZXZlcnkgY29uY3VycmVudCBwYXRoIHByb3ZpZGVzIGFuIGVycm9yKS5cbiAgaWYgKHJlY292ZXJhYmxlRXJyb3IgIT09IG51bGwpIHtcbiAgICBxdWV1ZUh5ZHJhdGlvbkVycm9yKHJlY292ZXJhYmxlRXJyb3IpO1xuICB9IC8vIFRoaXMgd2lsbCBhZGQgdGhlIG9sZCBmaWJlciB0byB0aGUgZGVsZXRpb24gbGlzdFxuXG5cbiAgcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTsgLy8gV2UncmUgbm93IG5vdCBzdXNwZW5kZWQgbm9yIGRlaHlkcmF0ZWQuXG5cbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuKTsgLy8gTmVlZHMgYSBwbGFjZW1lbnQgZWZmZWN0IGJlY2F1c2UgdGhlIHBhcmVudCAodGhlIFN1c3BlbnNlIGJvdW5kYXJ5KSBhbHJlYWR5XG4gIC8vIG1vdW50ZWQgYnV0IHRoaXMgaXMgYSBuZXcgZmliZXIuXG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlRmFsbGJhY2tBZnRlclJldHJ5V2l0aG91dEh5ZHJhdGluZyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgZmliZXJNb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihwcmltYXJ5Q2hpbGRQcm9wcywgZmliZXJNb2RlKTtcbiAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIGZpYmVyTW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpOyAvLyBOZWVkcyBhIHBsYWNlbWVudCBlZmZlY3QgYmVjYXVzZSB0aGUgcGFyZW50ICh0aGUgU3VzcGVuc2VcbiAgLy8gYm91bmRhcnkpIGFscmVhZHkgbW91bnRlZCBidXQgdGhpcyBpcyBhIG5ldyBmaWJlci5cblxuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgLy8gV2Ugd2lsbCBoYXZlIGRyb3BwZWQgdGhlIGVmZmVjdCBsaXN0IHdoaWNoIGNvbnRhaW5zIHRoZVxuICAgIC8vIGRlbGV0aW9uLiBXZSBuZWVkIHRvIHJlY29uY2lsZSB0byBkZWxldGUgdGhlIGN1cnJlbnQgY2hpbGQuXG4gICAgcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVoeWRyYXRlZFN1c3BlbnNlQ29tcG9uZW50KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUluc3RhbmNlLCByZW5kZXJMYW5lcykge1xuICAvLyBEdXJpbmcgdGhlIGZpcnN0IHBhc3MsIHdlJ2xsIGJhaWwgb3V0IGFuZCBub3QgZHJpbGwgaW50byB0aGUgY2hpbGRyZW4uXG4gIC8vIEluc3RlYWQsIHdlJ2xsIGxlYXZlIHRoZSBjb250ZW50IGluIHBsYWNlIGFuZCB0cnkgdG8gaHlkcmF0ZSBpdCBsYXRlci5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICB7XG4gICAgICBlcnJvcignQ2Fubm90IGh5ZHJhdGUgU3VzcGVuc2UgaW4gbGVnYWN5IG1vZGUuIFN3aXRjaCBmcm9tICcgKyAnUmVhY3RET00uaHlkcmF0ZShlbGVtZW50LCBjb250YWluZXIpIHRvICcgKyAnUmVhY3RET01DbGllbnQuaHlkcmF0ZVJvb3QoY29udGFpbmVyLCA8QXBwIC8+KScgKyAnLnJlbmRlcihlbGVtZW50KSBvciByZW1vdmUgdGhlIFN1c3BlbnNlIGNvbXBvbmVudHMgZnJvbSAnICsgJ3RoZSBzZXJ2ZXIgcmVuZGVyZWQgY29tcG9uZW50cy4nKTtcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGxhbmVUb0xhbmVzKFN5bmNMYW5lKTtcbiAgfSBlbHNlIGlmIChpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhzdXNwZW5zZUluc3RhbmNlKSkge1xuICAgIC8vIFRoaXMgaXMgYSBjbGllbnQtb25seSBib3VuZGFyeS4gU2luY2Ugd2Ugd29uJ3QgZ2V0IGFueSBjb250ZW50IGZyb20gdGhlIHNlcnZlclxuICAgIC8vIGZvciB0aGlzLCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHRoYXQgYXQgYSBoaWdoZXIgcHJpb3JpdHkgYmFzZWQgb24gd2hlbiBpdCB3b3VsZFxuICAgIC8vIGhhdmUgdGltZWQgb3V0LiBJbiB0aGVvcnkgd2UgY291bGQgcmVuZGVyIGl0IGluIHRoaXMgcGFzcyBidXQgaXQgd291bGQgaGF2ZSB0aGVcbiAgICAvLyB3cm9uZyBwcmlvcml0eSBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIHdpbGwgcHJldmVudCBoeWRyYXRpb24gb2YgcGFyZW50IHBhdGguXG4gICAgLy8gSW5zdGVhZCwgd2UnbGwgbGVhdmUgd29yayBsZWZ0IG9uIGl0IHRvIHJlbmRlciBpdCBpbiBhIHNlcGFyYXRlIGNvbW1pdC5cbiAgICAvLyBUT0RPIFRoaXMgdGltZSBzaG91bGQgYmUgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIHNlcnZlciByZW5kZXJlZCByZXNwb25zZSB0aGF0IGlzXG4gICAgLy8gYSBwYXJlbnQgdG8gdGhpcyBib3VuZGFyeSB3YXMgZGlzcGxheWVkLiBIb3dldmVyLCBzaW5jZSB3ZSBjdXJyZW50bHkgZG9uJ3QgaGF2ZVxuICAgIC8vIGEgcHJvdG9jb2wgdG8gdHJhbnNmZXIgdGhhdCB0aW1lLCB3ZSdsbCBqdXN0IGVzdGltYXRlIGl0IGJ5IHVzaW5nIHRoZSBjdXJyZW50XG4gICAgLy8gdGltZS4gVGhpcyB3aWxsIG1lYW4gdGhhdCBTdXNwZW5zZSB0aW1lb3V0cyBhcmUgc2xpZ2h0bHkgc2hpZnRlZCB0byBsYXRlciB0aGFuXG4gICAgLy8gdGhleSBzaG91bGQgYmUuXG4gICAgLy8gU2NoZWR1bGUgYSBub3JtYWwgcHJpIHVwZGF0ZSB0byByZW5kZXIgdGhpcyBjb250ZW50LlxuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbGFuZVRvTGFuZXMoRGVmYXVsdEh5ZHJhdGlvbkxhbmUpO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlJ2xsIGNvbnRpbnVlIGh5ZHJhdGluZyB0aGUgcmVzdCBhdCBvZmZzY3JlZW4gcHJpb3JpdHkgc2luY2Ugd2UnbGwgYWxyZWFkeVxuICAgIC8vIGJlIHNob3dpbmcgdGhlIHJpZ2h0IGNvbnRlbnQgY29taW5nIGZyb20gdGhlIHNlcnZlciwgaXQgaXMgbm8gcnVzaC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGxhbmVUb0xhbmVzKE9mZnNjcmVlbkxhbmUpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURlaHlkcmF0ZWRTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZGlkU3VzcGVuZCwgbmV4dFByb3BzLCBzdXNwZW5zZUluc3RhbmNlLCBzdXNwZW5zZVN0YXRlLCByZW5kZXJMYW5lcykge1xuICBpZiAoIWRpZFN1c3BlbmQpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCByZW5kZXIgcGFzcy4gQXR0ZW1wdCB0byBoeWRyYXRlLlxuICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBoeWRyYXRpbmcgYXQgdGhpcyBwb2ludCBiZWNhdXNlIGl0IGlzIHRoZSBmaXJzdCBwYXNzLFxuICAgIC8vIGJ1dCBhZnRlciB3ZSd2ZSBhbHJlYWR5IGNvbW1pdHRlZCBvbmNlLlxuICAgIHdhcm5JZkh5ZHJhdGluZygpO1xuXG4gICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgIHJldHVybiByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMsIC8vIFRPRE86IFdoZW4gd2UgZGVsZXRlIGxlZ2FjeSBtb2RlLCB3ZSBzaG91bGQgbWFrZSB0aGlzIGVycm9yIGFyZ3VtZW50XG4gICAgICAvLyByZXF1aXJlZCDigJQgZXZlcnkgY29uY3VycmVudCBtb2RlIHBhdGggdGhhdCBjYXVzZXMgaHlkcmF0aW9uIHRvXG4gICAgICAvLyBkZS1vcHQgdG8gY2xpZW50IHJlbmRlcmluZyBzaG91bGQgaGF2ZSBhbiBlcnJvciBtZXNzYWdlLlxuICAgICAgbnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKHN1c3BlbnNlSW5zdGFuY2UpKSB7XG4gICAgICAvLyBUaGlzIGJvdW5kYXJ5IGlzIGluIGEgcGVybWFuZW50IGZhbGxiYWNrIHN0YXRlLiBJbiB0aGlzIGNhc2UsIHdlJ2xsIG5ldmVyXG4gICAgICAvLyBnZXQgYW4gdXBkYXRlIGFuZCB3ZSdsbCBuZXZlciBiZSBhYmxlIHRvIGh5ZHJhdGUgdGhlIGZpbmFsIGNvbnRlbnQuIExldCdzIGp1c3QgdHJ5IHRoZVxuICAgICAgLy8gY2xpZW50IHNpZGUgcmVuZGVyIGluc3RlYWQuXG4gICAgICB2YXIgZGlnZXN0LCBtZXNzYWdlLCBzdGFjaztcblxuICAgICAge1xuICAgICAgICB2YXIgX2dldFN1c3BlbnNlSW5zdGFuY2VGID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrRXJyb3JEZXRhaWxzKHN1c3BlbnNlSW5zdGFuY2UpO1xuXG4gICAgICAgIGRpZ2VzdCA9IF9nZXRTdXNwZW5zZUluc3RhbmNlRi5kaWdlc3Q7XG4gICAgICAgIG1lc3NhZ2UgPSBfZ2V0U3VzcGVuc2VJbnN0YW5jZUYubWVzc2FnZTtcbiAgICAgICAgc3RhY2sgPSBfZ2V0U3VzcGVuc2VJbnN0YW5jZUYuc3RhY2s7XG4gICAgICB9XG5cbiAgICAgIHZhciBlcnJvcjtcblxuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignVGhlIHNlcnZlciBjb3VsZCBub3QgZmluaXNoIHRoaXMgU3VzcGVuc2UgYm91bmRhcnksIGxpa2VseSAnICsgJ2R1ZSB0byBhbiBlcnJvciBkdXJpbmcgc2VydmVyIHJlbmRlcmluZy4gU3dpdGNoZWQgdG8gJyArICdjbGllbnQgcmVuZGVyaW5nLicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY2FwdHVyZWRWYWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUoZXJyb3IsIGRpZ2VzdCwgc3RhY2spO1xuICAgICAgcmV0dXJuIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcywgY2FwdHVyZWRWYWx1ZSk7XG4gICAgfVxuICAgIC8vIGFueSBjb250ZXh0IGhhcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHRyZWF0IGlzIGFzIGlmIHRoZSBpbnB1dCBtaWdodCBoYXZlIGNoYW5nZWQuXG5cblxuICAgIHZhciBoYXNDb250ZXh0Q2hhbmdlZCA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIGN1cnJlbnQuY2hpbGRMYW5lcyk7XG5cbiAgICBpZiAoZGlkUmVjZWl2ZVVwZGF0ZSB8fCBoYXNDb250ZXh0Q2hhbmdlZCkge1xuICAgICAgLy8gVGhpcyBib3VuZGFyeSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgZmlyc3QgcmVuZGVyLiBUaGlzIG1lYW5zIHRoYXQgd2UgYXJlIG5vdyB1bmFibGUgdG9cbiAgICAgIC8vIGh5ZHJhdGUgaXQuIFdlIG1pZ2h0IHN0aWxsIGJlIGFibGUgdG8gaHlkcmF0ZSBpdCB1c2luZyBhIGhpZ2hlciBwcmlvcml0eSBsYW5lLlxuICAgICAgdmFyIHJvb3QgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKTtcblxuICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGF0dGVtcHRIeWRyYXRpb25BdExhbmUgPSBnZXRCdW1wZWRMYW5lRm9ySHlkcmF0aW9uKHJvb3QsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICBpZiAoYXR0ZW1wdEh5ZHJhdGlvbkF0TGFuZSAhPT0gTm9MYW5lICYmIGF0dGVtcHRIeWRyYXRpb25BdExhbmUgIT09IHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lKSB7XG4gICAgICAgICAgLy8gSW50ZW50aW9uYWxseSBtdXRhdGluZyBzaW5jZSB0aGlzIHJlbmRlciB3aWxsIGdldCBpbnRlcnJ1cHRlZC4gVGhpc1xuICAgICAgICAgIC8vIGlzIG9uZSBvZiB0aGUgdmVyeSByYXJlIHRpbWVzIHdoZXJlIHdlIG11dGF0ZSB0aGUgY3VycmVudCB0cmVlXG4gICAgICAgICAgLy8gZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgICAgc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUgPSBhdHRlbXB0SHlkcmF0aW9uQXRMYW5lOyAvLyBUT0RPOiBJZGVhbGx5IHRoaXMgd291bGQgaW5oZXJpdCB0aGUgZXZlbnQgdGltZSBvZiB0aGUgY3VycmVudCByZW5kZXJcblxuICAgICAgICAgIHZhciBldmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbiAgICAgICAgICBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoY3VycmVudCwgYXR0ZW1wdEh5ZHJhdGlvbkF0TGFuZSk7XG4gICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGN1cnJlbnQsIGF0dGVtcHRIeWRyYXRpb25BdExhbmUsIGV2ZW50VGltZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gSWYgd2UgaGF2ZSBzY2hlZHVsZWQgaGlnaGVyIHByaSB3b3JrIGFib3ZlLCB0aGlzIHdpbGwgcHJvYmFibHkganVzdCBhYm9ydCB0aGUgcmVuZGVyXG4gICAgICAvLyBzaW5jZSB3ZSBub3cgaGF2ZSBoaWdoZXIgcHJpb3JpdHkgd29yaywgYnV0IGluIGNhc2UgaXQgZG9lc24ndCwgd2UgbmVlZCB0byBwcmVwYXJlIHRvXG4gICAgICAvLyByZW5kZXIgc29tZXRoaW5nLCBpZiB3ZSB0aW1lIG91dC4gRXZlbiBpZiB0aGF0IHJlcXVpcmVzIHVzIHRvIGRlbGV0ZSBldmVyeXRoaW5nIGFuZFxuICAgICAgLy8gc2tpcCBoeWRyYXRpb24uXG4gICAgICAvLyBEZWxheSBoYXZpbmcgdG8gZG8gdGhpcyBhcyBsb25nIGFzIHRoZSBzdXNwZW5zZSB0aW1lb3V0IGFsbG93cyB1cy5cblxuXG4gICAgICByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCk7XG5cbiAgICAgIHZhciBfY2FwdHVyZWRWYWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUobmV3IEVycm9yKCdUaGlzIFN1c3BlbnNlIGJvdW5kYXJ5IHJlY2VpdmVkIGFuIHVwZGF0ZSBiZWZvcmUgaXQgZmluaXNoZWQgJyArICdoeWRyYXRpbmcuIFRoaXMgY2F1c2VkIHRoZSBib3VuZGFyeSB0byBzd2l0Y2ggdG8gY2xpZW50IHJlbmRlcmluZy4gJyArICdUaGUgdXN1YWwgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHdyYXAgdGhlIG9yaWdpbmFsIHVwZGF0ZSAnICsgJ2luIHN0YXJ0VHJhbnNpdGlvbi4nKSk7XG5cbiAgICAgIHJldHVybiByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMsIF9jYXB0dXJlZFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoc3VzcGVuc2VJbnN0YW5jZSkpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIHN0aWxsIHBlbmRpbmcgbW9yZSBkYXRhIGZyb20gdGhlIHNlcnZlciwgc28gd2UgY2FuJ3QgaHlkcmF0ZSBpdHNcbiAgICAgIC8vIGNvbnRlbnQuIFdlIHRyZWF0IGl0IGFzIGlmIHRoaXMgY29tcG9uZW50IHN1c3BlbmRlZCBpdHNlbGYuIEl0IG1pZ2h0IHNlZW0gYXMgaWZcbiAgICAgIC8vIHdlIGNvdWxkIGp1c3QgdHJ5IHRvIHJlbmRlciBpdCBjbGllbnQtc2lkZSBpbnN0ZWFkLiBIb3dldmVyLCB0aGlzIHdpbGwgcGVyZm9ybSBhXG4gICAgICAvLyBsb3Qgb2YgdW5uZWNlc3Nhcnkgd29yayBhbmQgaXMgdW5saWtlbHkgdG8gY29tcGxldGUgc2luY2UgaXQgb2Z0ZW4gd2lsbCBzdXNwZW5kXG4gICAgICAvLyBvbiBtaXNzaW5nIGRhdGEgYW55d2F5LiBBZGRpdGlvbmFsbHksIHRoZSBzZXJ2ZXIgbWlnaHQgYmUgYWJsZSB0byByZW5kZXIgbW9yZVxuICAgICAgLy8gdGhhbiB3ZSBjYW4gb24gdGhlIGNsaWVudCB5ZXQuIEluIHRoYXQgY2FzZSB3ZSdkIGVuZCB1cCB3aXRoIG1vcmUgZmFsbGJhY2sgc3RhdGVzXG4gICAgICAvLyBvbiB0aGUgY2xpZW50IHRoYW4gaWYgd2UganVzdCBsZWF2ZSBpdCBhbG9uZS4gSWYgdGhlIHNlcnZlciB0aW1lcyBvdXQgb3IgZXJyb3JzXG4gICAgICAvLyB0aGVzZSBzaG91bGQgdXBkYXRlIHRoaXMgYm91bmRhcnkgdG8gdGhlIHBlcm1hbmVudCBGYWxsYmFjayBzdGF0ZSBpbnN0ZWFkLlxuICAgICAgLy8gTWFyayBpdCBhcyBoYXZpbmcgY2FwdHVyZWQgKGkuZS4gc3VzcGVuZGVkKS5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7IC8vIExlYXZlIHRoZSBjaGlsZCBpbiBwbGFjZS4gSS5lLiB0aGUgZGVoeWRyYXRlZCBmcmFnbWVudC5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkOyAvLyBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIHJldHJ5IHRoaXMgYm91bmRhcnkgb25jZSB0aGUgc2VydmVyIGhhcyBzZW50IHRoZSByZXN1bHQuXG5cbiAgICAgIHZhciByZXRyeSA9IHJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkuYmluZChudWxsLCBjdXJyZW50KTtcbiAgICAgIHJlZ2lzdGVyU3VzcGVuc2VJbnN0YW5jZVJldHJ5KHN1c3BlbnNlSW5zdGFuY2UsIHJldHJ5KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBhdHRlbXB0LlxuICAgICAgcmVlbnRlckh5ZHJhdGlvblN0YXRlRnJvbURlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUluc3RhbmNlLCBzdXNwZW5zZVN0YXRlLnRyZWVDb250ZXh0KTtcbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4pOyAvLyBNYXJrIHRoZSBjaGlsZHJlbiBhcyBoeWRyYXRpbmcuIFRoaXMgaXMgYSBmYXN0IHBhdGggdG8ga25vdyB3aGV0aGVyIHRoaXNcbiAgICAgIC8vIHRyZWUgaXMgcGFydCBvZiBhIGh5ZHJhdGluZyB0cmVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgY2hpbGRcbiAgICAgIC8vIG5vZGUgaGFzIGZ1bGx5IG1vdW50ZWQgeWV0LCBhbmQgZm9yIHNjaGVkdWxpbmcgZXZlbnQgcmVwbGF5aW5nLlxuICAgICAgLy8gQ29uY2VwdHVhbGx5IHRoaXMgaXMgc2ltaWxhciB0byBQbGFjZW1lbnQgaW4gdGhhdCBhIG5ldyBzdWJ0cmVlIGlzXG4gICAgICAvLyBpbnNlcnRlZCBpbnRvIHRoZSBSZWFjdCB0cmVlIGhlcmUuIEl0IGp1c3QgaGFwcGVucyB0byBub3QgbmVlZCBET01cbiAgICAgIC8vIG11dGF0aW9ucyBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzLlxuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5mbGFncyB8PSBIeWRyYXRpbmc7XG4gICAgICByZXR1cm4gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgdGhlIHNlY29uZCByZW5kZXIgcGFzcy4gV2UgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gaHlkcmF0ZWQsIGJ1dFxuICAgIC8vIHNvbWV0aGluZyBlaXRoZXIgc3VzcGVuZGVkIG9yIGVycm9yZWQuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRm9yY2VDbGllbnRSZW5kZXIpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBlcnJvcmVkIGR1cmluZyBoeWRyYXRpb24uIFRyeSBhZ2FpbiB3aXRob3V0IGh5ZHJhdGluZy5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH5Gb3JjZUNsaWVudFJlbmRlcjtcblxuICAgICAgdmFyIF9jYXB0dXJlZFZhbHVlMiA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUobmV3IEVycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgaHlkcmF0aW5nIHRoaXMgU3VzcGVuc2UgYm91bmRhcnkuICcgKyAnU3dpdGNoZWQgdG8gY2xpZW50IHJlbmRlcmluZy4nKSk7XG5cbiAgICAgIHJldHVybiByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMsIF9jYXB0dXJlZFZhbHVlMik7XG4gICAgfSBlbHNlIGlmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAvLyBTb21ldGhpbmcgc3VzcGVuZGVkIGFuZCB3ZSBzaG91bGQgc3RpbGwgYmUgaW4gZGVoeWRyYXRlZCBtb2RlLlxuICAgICAgLy8gTGVhdmUgdGhlIGV4aXN0aW5nIGNoaWxkIGluIHBsYWNlLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkOyAvLyBUaGUgZGVoeWRyYXRlZCBjb21wbGV0aW9uIHBhc3MgZXhwZWN0cyB0aGlzIGZsYWcgdG8gYmUgdGhlcmVcbiAgICAgIC8vIGJ1dCB0aGUgbm9ybWFsIHN1c3BlbnNlIHBhc3MgZG9lc24ndC5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdXNwZW5kZWQgYnV0IHdlIHNob3VsZCBubyBsb25nZXIgYmUgaW4gZGVoeWRyYXRlZCBtb2RlLlxuICAgICAgLy8gVGhlcmVmb3JlIHdlIG5vdyBoYXZlIHRvIHJlbmRlciB0aGUgZmFsbGJhY2suXG4gICAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICAgIHZhciBuZXh0RmFsbGJhY2tDaGlsZHJlbiA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBtb3VudFN1c3BlbnNlRmFsbGJhY2tBZnRlclJldHJ5V2l0aG91dEh5ZHJhdGluZyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgbmV4dEZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIoZmliZXIsIHJlbmRlckxhbmVzLCBwcm9wYWdhdGlvblJvb3QpIHtcbiAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKGZpYmVyLnJldHVybiwgcmVuZGVyTGFuZXMsIHByb3BhZ2F0aW9uUm9vdCk7XG59XG5cbmZ1bmN0aW9uIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgZmlyc3RDaGlsZCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gTWFyayBhbnkgU3VzcGVuc2UgYm91bmRhcmllcyB3aXRoIGZhbGxiYWNrcyBhcyBoYXZpbmcgd29yayB0byBkby5cbiAgLy8gSWYgdGhleSB3ZXJlIHByZXZpb3VzbHkgZm9yY2VkIGludG8gZmFsbGJhY2tzLCB0aGV5IG1heSBub3cgYmUgYWJsZVxuICAvLyB0byB1bmJsb2NrLlxuICB2YXIgbm9kZSA9IGZpcnN0Q2hpbGQ7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBzY2hlZHVsZVN1c3BlbnNlV29ya09uRmliZXIobm9kZSwgcmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQpIHtcbiAgICAgIC8vIElmIHRoZSB0YWlsIGlzIGhpZGRlbiB0aGVyZSBtaWdodCBub3QgYmUgYW4gU3VzcGVuc2UgYm91bmRhcmllc1xuICAgICAgLy8gdG8gc2NoZWR1bGUgd29yayBvbi4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gc2NoZWR1bGUgaXQgb24gdGhlXG4gICAgICAvLyBsaXN0IGl0c2VsZi5cbiAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gdHJhdmVyc2UgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBsaXN0IHNpbmNlXG4gICAgICAvLyB0aGUgbGlzdCB3aWxsIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHdoZW4gaXQgcmVyZW5kZXJzLlxuICAgICAgc2NoZWR1bGVTdXNwZW5zZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZExhc3RDb250ZW50Um93KGZpcnN0Q2hpbGQpIHtcbiAgLy8gVGhpcyBpcyBnb2luZyB0byBmaW5kIHRoZSBsYXN0IHJvdyBhbW9uZyB0aGVzZSBjaGlsZHJlbiB0aGF0IGlzIGFscmVhZHlcbiAgLy8gc2hvd2luZyBjb250ZW50IG9uIHRoZSBzY3JlZW4sIGFzIG9wcG9zZWQgdG8gYmVpbmcgaW4gZmFsbGJhY2sgc3RhdGUgb3JcbiAgLy8gbmV3LiBJZiBhIHJvdyBoYXMgbXVsdGlwbGUgU3VzcGVuc2UgYm91bmRhcmllcywgYW55IG9mIHRoZW0gYmVpbmcgaW4gdGhlXG4gIC8vIGZhbGxiYWNrIHN0YXRlLCBjb3VudHMgYXMgdGhlIHdob2xlIHJvdyBiZWluZyBpbiBhIGZhbGxiYWNrIHN0YXRlLlxuICAvLyBOb3RlIHRoYXQgdGhlIFwicm93c1wiIHdpbGwgYmUgd29ya0luUHJvZ3Jlc3MsIGJ1dCBhbnkgbmVzdGVkIGNoaWxkcmVuXG4gIC8vIHdpbGwgc3RpbGwgYmUgY3VycmVudCBzaW5jZSB3ZSBoYXZlbid0IHJlbmRlcmVkIHRoZW0geWV0LiBUaGUgbW91bnRlZFxuICAvLyBvcmRlciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBuZXcgb3JkZXIuIFdlIHVzZSB0aGUgbmV3IG9yZGVyLlxuICB2YXIgcm93ID0gZmlyc3RDaGlsZDtcbiAgdmFyIGxhc3RDb250ZW50Um93ID0gbnVsbDtcblxuICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgIGxhc3RDb250ZW50Um93ID0gcm93O1xuICAgIH1cblxuICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIGxhc3RDb250ZW50Um93O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJldmVhbE9yZGVyKHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAocmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCAmJiByZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICd0b2dldGhlcicgJiYgIWRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSkge1xuICAgICAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiByZXZlYWxPcmRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3dpdGNoIChyZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmRzJzpcbiAgICAgICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1VzZSBsb3dlcmNhc2UgXCIlc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnZm9yd2FyZCc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmQnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1JlYWN0IHVzZXMgdGhlIC1zIHN1ZmZpeCBpbiB0aGUgc3BlbGxpbmcuIFVzZSBcIiVzc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLCByZXZlYWxPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFpbE9wdGlvbnModGFpbE1vZGUsIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAodGFpbE1vZGUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdKSB7XG4gICAgICBpZiAodGFpbE1vZGUgIT09ICdjb2xsYXBzZWQnICYmIHRhaWxNb2RlICE9PSAnaGlkZGVuJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciB0YWlsIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwiY29sbGFwc2VkXCIgb3IgXCJoaWRkZW5cIj8nLCB0YWlsTW9kZSk7XG4gICAgICB9IGVsc2UgaWYgKHJldmVhbE9yZGVyICE9PSAnZm9yd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAnYmFja3dhcmRzJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCc8U3VzcGVuc2VMaXN0IHRhaWw9XCIlc1wiIC8+IGlzIG9ubHkgdmFsaWQgaWYgcmV2ZWFsT3JkZXIgaXMgJyArICdcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIi4gJyArICdEaWQgeW91IG1lYW4gdG8gc3BlY2lmeSByZXZlYWxPcmRlcj1cImZvcndhcmRzXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkU2xvdCwgaW5kZXgpIHtcbiAge1xuICAgIHZhciBpc0FuQXJyYXkgPSBpc0FycmF5KGNoaWxkU2xvdCk7XG4gICAgdmFyIGlzSXRlcmFibGUgPSAhaXNBbkFycmF5ICYmIHR5cGVvZiBnZXRJdGVyYXRvckZuKGNoaWxkU2xvdCkgPT09ICdmdW5jdGlvbic7XG5cbiAgICBpZiAoaXNBbkFycmF5IHx8IGlzSXRlcmFibGUpIHtcbiAgICAgIHZhciB0eXBlID0gaXNBbkFycmF5ID8gJ2FycmF5JyA6ICdpdGVyYWJsZSc7XG5cbiAgICAgIGVycm9yKCdBIG5lc3RlZCAlcyB3YXMgcGFzc2VkIHRvIHJvdyAjJXMgaW4gPFN1c3BlbnNlTGlzdCAvPi4gV3JhcCBpdCBpbiAnICsgJ2FuIGFkZGl0aW9uYWwgU3VzcGVuc2VMaXN0IHRvIGNvbmZpZ3VyZSBpdHMgcmV2ZWFsT3JkZXI6ICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+IC4uLiAnICsgJzxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPnslc308L1N1c3BlbnNlTGlzdD4gLi4uICcgKyAnPC9TdXNwZW5zZUxpc3Q+JywgdHlwZSwgaW5kZXgsIHR5cGUpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4oY2hpbGRyZW4sIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAoKHJldmVhbE9yZGVyID09PSAnZm9yd2FyZHMnIHx8IHJldmVhbE9yZGVyID09PSAnYmFja3dhcmRzJykgJiYgY2hpbGRyZW4gIT09IHVuZGVmaW5lZCAmJiBjaGlsZHJlbiAhPT0gbnVsbCAmJiBjaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkcmVuW2ldLCBpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2hpbGRyZW5JdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChjaGlsZHJlbik7XG5cbiAgICAgICAgICBpZiAoY2hpbGRyZW5JdGVyYXRvcikge1xuICAgICAgICAgICAgdmFyIHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIHZhciBfaSA9IDA7XG5cbiAgICAgICAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKHN0ZXAudmFsdWUsIF9pKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF9pKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yKCdBIHNpbmdsZSByb3cgd2FzIHBhc3NlZCB0byBhIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9XCIlc1wiIC8+LiAnICsgJ1RoaXMgaXMgbm90IHVzZWZ1bCBzaW5jZSBpdCBuZWVkcyBtdWx0aXBsZSByb3dzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBwYXNzIG11bHRpcGxlIGNoaWxkcmVuIG9yIGFuIGFycmF5PycsIHJldmVhbE9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGlzQmFja3dhcmRzLCB0YWlsLCBsYXN0Q29udGVudFJvdywgdGFpbE1vZGUpIHtcbiAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgaXNCYWNrd2FyZHM6IGlzQmFja3dhcmRzLFxuICAgICAgcmVuZGVyaW5nOiBudWxsLFxuICAgICAgcmVuZGVyaW5nU3RhcnRUaW1lOiAwLFxuICAgICAgbGFzdDogbGFzdENvbnRlbnRSb3csXG4gICAgICB0YWlsOiB0YWlsLFxuICAgICAgdGFpbE1vZGU6IHRhaWxNb2RlXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICAvLyBXZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIG9iamVjdCBmcm9tIHByZXZpb3VzIHJlbmRlcnMuXG4gICAgcmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcztcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA9IDA7XG4gICAgcmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93O1xuICAgIHJlbmRlclN0YXRlLnRhaWwgPSB0YWlsO1xuICAgIHJlbmRlclN0YXRlLnRhaWxNb2RlID0gdGFpbE1vZGU7XG4gIH1cbn0gLy8gVGhpcyBjYW4gZW5kIHVwIHJlbmRlcmluZyB0aGlzIGNvbXBvbmVudCBtdWx0aXBsZSBwYXNzZXMuXG4vLyBUaGUgZmlyc3QgcGFzcyBzcGxpdHMgdGhlIGNoaWxkcmVuIGZpYmVycyBpbnRvIHR3byBzZXRzLiBBIGhlYWQgYW5kIHRhaWwuXG4vLyBXZSBmaXJzdCByZW5kZXIgdGhlIGhlYWQuIElmIGFueXRoaW5nIGlzIGluIGZhbGxiYWNrIHN0YXRlLCB3ZSBkbyBhbm90aGVyXG4vLyBwYXNzIHRocm91Z2ggYmVnaW5Xb3JrIHRvIHJlcmVuZGVyIGFsbCBjaGlsZHJlbiAoaW5jbHVkaW5nIHRoZSB0YWlsKSB3aXRoXG4vLyB0aGUgZm9yY2Ugc3VzcGVuZCBjb250ZXh0LiBJZiB0aGUgZmlyc3QgcmVuZGVyIGRpZG4ndCBoYXZlIGFueXRoaW5nIGluXG4vLyBpbiBmYWxsYmFjayBzdGF0ZS4gVGhlbiB3ZSByZW5kZXIgZWFjaCByb3cgaW4gdGhlIHRhaWwgb25lLWJ5LW9uZS5cbi8vIFRoYXQgaGFwcGVucyBpbiB0aGUgY29tcGxldGVXb3JrIHBoYXNlIHdpdGhvdXQgZ29pbmcgYmFjayB0byBiZWdpbldvcmsuXG5cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcmV2ZWFsT3JkZXIgPSBuZXh0UHJvcHMucmV2ZWFsT3JkZXI7XG4gIHZhciB0YWlsTW9kZSA9IG5leHRQcm9wcy50YWlsO1xuICB2YXIgbmV3Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVRhaWxPcHRpb25zKHRhaWxNb2RlLCByZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4obmV3Q2hpbGRyZW4sIHJldmVhbE9yZGVyKTtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5ld0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG91bGRGb3JjZUZhbGxiYWNrID0gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcblxuICBpZiAoc2hvdWxkRm9yY2VGYWxsYmFjaykge1xuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGRpZFN1c3BlbmRCZWZvcmUgPSBjdXJyZW50ICE9PSBudWxsICYmIChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICBpZiAoZGlkU3VzcGVuZEJlZm9yZSkge1xuICAgICAgLy8gSWYgd2UgcHJldmlvdXNseSBmb3JjZWQgYSBmYWxsYmFjaywgd2UgbmVlZCB0byBzY2hlZHVsZSB3b3JrXG4gICAgICAvLyBvbiBhbnkgbmVzdGVkIGJvdW5kYXJpZXMgdG8gbGV0IHRoZW0ga25vdyB0byB0cnkgdG8gcmVuZGVyXG4gICAgICAvLyBhZ2Fpbi4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjb250ZXh0IHVwZGF0aW5nLlxuICAgICAgcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCwgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIH1cblxuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIFN1c3BlbnNlTGlzdCBkb2Vzbid0IHdvcmsgc28gd2UganVzdFxuICAgIC8vIHVzZSBtYWtlIGl0IGEgbm9vcCBieSB0cmVhdGluZyBpdCBhcyB0aGUgZGVmYXVsdCByZXZlYWxPcmRlci5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHJldmVhbE9yZGVyKSB7XG4gICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGFzdENvbnRlbnRSb3cgPSBmaW5kTGFzdENvbnRlbnRSb3cod29ya0luUHJvZ3Jlc3MuY2hpbGQpO1xuICAgICAgICAgIHZhciB0YWlsO1xuXG4gICAgICAgICAgaWYgKGxhc3RDb250ZW50Um93ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgd2hvbGUgbGlzdCBpcyBwYXJ0IG9mIHRoZSB0YWlsLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgY291bGQgZmFzdCBwYXRoIGJ5IGp1c3QgcmVuZGVyaW5nIHRoZSB0YWlsIG5vdy5cbiAgICAgICAgICAgIHRhaWwgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRGlzY29ubmVjdCB0aGUgdGFpbCByb3dzIGFmdGVyIHRoZSBjb250ZW50IHJvdy5cbiAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGVtIHNlcGFyYXRlbHkgbGF0ZXIuXG4gICAgICAgICAgICB0YWlsID0gbGFzdENvbnRlbnRSb3cuc2libGluZztcbiAgICAgICAgICAgIGxhc3RDb250ZW50Um93LnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgdGFpbCwgbGFzdENvbnRlbnRSb3csIHRhaWxNb2RlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gZmluZCB0aGUgZmlyc3Qgcm93IHRoYXQgaGFzIGV4aXN0aW5nIGNvbnRlbnQuXG4gICAgICAgICAgLy8gQXQgdGhlIHNhbWUgdGltZSB3ZSdyZSBnb2luZyB0byByZXZlcnNlIHRoZSBsaXN0IG9mIGV2ZXJ5dGhpbmdcbiAgICAgICAgICAvLyB3ZSBwYXNzIGluIHRoZSBtZWFudGltZS4gVGhhdCdzIGdvaW5nIHRvIGJlIG91ciB0YWlsIGluIHJldmVyc2VcbiAgICAgICAgICAvLyBvcmRlci5cbiAgICAgICAgICB2YXIgX3RhaWwgPSBudWxsO1xuICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG5cbiAgICAgICAgICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFpbiBjb250ZW50LlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJvdztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuZXh0Um93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICByb3cuc2libGluZyA9IF90YWlsO1xuICAgICAgICAgICAgX3RhaWwgPSByb3c7XG4gICAgICAgICAgICByb3cgPSBuZXh0Um93O1xuICAgICAgICAgIH0gLy8gVE9ETzogSWYgd29ya0luUHJvZ3Jlc3MuY2hpbGQgaXMgbnVsbCwgd2UgY2FuIGNvbnRpbnVlIG9uIHRoZSB0YWlsIGltbWVkaWF0ZWx5LlxuXG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIHRydWUsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgX3RhaWwsIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB0YWlsTW9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICB7XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICBudWxsLCAvLyB0YWlsXG4gICAgICAgICAgbnVsbCwgLy8gbGFzdFxuICAgICAgICAgIHVuZGVmaW5lZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IHJldmVhbCBvcmRlciBpcyB0aGUgc2FtZSBhcyBub3QgaGF2aW5nXG4gICAgICAgICAgLy8gYSBib3VuZGFyeS5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gUG9ydGFscyBhcmUgc3BlY2lhbCBiZWNhdXNlIHdlIGRvbid0IGFwcGVuZCB0aGUgY2hpbGRyZW4gZHVyaW5nIG1vdW50XG4gICAgLy8gYnV0IGF0IGNvbW1pdC4gVGhlcmVmb3JlIHdlIG5lZWQgdG8gdHJhY2sgaW5zZXJ0aW9ucyB3aGljaCB0aGUgbm9ybWFsXG4gICAgLy8gZmxvdyBkb2Vzbid0IGRvIGR1cmluZyBtb3VudC4gVGhpcyBkb2Vzbid0IGhhcHBlbiBhdCB0aGUgcm9vdCBiZWNhdXNlXG4gICAgLy8gdGhlIHJvb3QgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgXCJjdXJyZW50XCIgd2l0aCBhIG51bGwgY2hpbGQuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgdW5pZnlpbmcgdGhpcyB3aXRoIGhvdyB0aGUgcm9vdCB3b3Jrcy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBwcm92aWRlclR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyVHlwZS5fY29udGV4dDtcbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICB2YXIgbmV3VmFsdWUgPSBuZXdQcm9wcy52YWx1ZTtcblxuICB7XG4gICAgaWYgKCEoJ3ZhbHVlJyBpbiBuZXdQcm9wcykpIHtcbiAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIpIHtcbiAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdUaGUgYHZhbHVlYCBwcm9wIGlzIHJlcXVpcmVkIGZvciB0aGUgYDxDb250ZXh0LlByb3ZpZGVyPmAuIERpZCB5b3UgbWlzc3BlbGwgaXQgb3IgZm9yZ2V0IHRvIHBhc3MgaXQ/Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb3ZpZGVyUHJvcFR5cGVzID0gd29ya0luUHJvZ3Jlc3MudHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAocHJvdmlkZXJQcm9wVHlwZXMpIHtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3ZpZGVyUHJvcFR5cGVzLCBuZXdQcm9wcywgJ3Byb3AnLCAnQ29udGV4dC5Qcm92aWRlcicpO1xuICAgIH1cbiAgfVxuXG4gIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgbmV3VmFsdWUpO1xuXG4gIHtcbiAgICBpZiAob2xkUHJvcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBvbGRWYWx1ZSA9IG9sZFByb3BzLnZhbHVlO1xuXG4gICAgICBpZiAob2JqZWN0SXMob2xkVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgICAgICAvLyBObyBjaGFuZ2UuIEJhaWxvdXQgZWFybHkgaWYgY2hpbGRyZW4gYXJlIHRoZSBzYW1lLlxuICAgICAgICBpZiAob2xkUHJvcHMuY2hpbGRyZW4gPT09IG5ld1Byb3BzLmNoaWxkcmVuICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlIGNvbnRleHQgdmFsdWUgY2hhbmdlZC4gU2VhcmNoIGZvciBtYXRjaGluZyBjb25zdW1lcnMgYW5kIHNjaGVkdWxlXG4gICAgICAgIC8vIHRoZW0gdG8gdXBkYXRlLlxuICAgICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld0NoaWxkcmVuID0gbmV3UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGU7IC8vIFRoZSBsb2dpYyBiZWxvdyBmb3IgQ29udGV4dCBkaWZmZXJzIGRlcGVuZGluZyBvbiBQUk9EIG9yIERFViBtb2RlLiBJblxuICAvLyBERVYgbW9kZSwgd2UgY3JlYXRlIGEgc2VwYXJhdGUgb2JqZWN0IGZvciBDb250ZXh0LkNvbnN1bWVyIHRoYXQgYWN0c1xuICAvLyBsaWtlIGEgcHJveHkgdG8gQ29udGV4dC4gVGhpcyBwcm94eSBvYmplY3QgYWRkcyB1bm5lY2Vzc2FyeSBjb2RlIGluIFBST0RcbiAgLy8gc28gd2UgdXNlIHRoZSBvbGQgYmVoYXZpb3VyIChDb250ZXh0LkNvbnN1bWVyIHJlZmVyZW5jZXMgQ29udGV4dCkgdG9cbiAgLy8gcmVkdWNlIHNpemUgYW5kIG92ZXJoZWFkLiBUaGUgc2VwYXJhdGUgb2JqZWN0IHJlZmVyZW5jZXMgY29udGV4dCB2aWFcbiAgLy8gYSBwcm9wZXJ0eSBjYWxsZWQgXCJfY29udGV4dFwiLCB3aGljaCBhbHNvIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrXG4gIC8vIGluIERFViBtb2RlIGlmIHRoaXMgcHJvcGVydHkgZXhpc3RzIG9yIG5vdCBhbmQgd2FybiBpZiBpdCBkb2VzIG5vdC5cblxuICB7XG4gICAgaWYgKGNvbnRleHQuX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVGhpcyBtYXkgYmUgYmVjYXVzZSBpdCdzIGEgQ29udGV4dCAocmF0aGVyIHRoYW4gYSBDb25zdW1lcikuXG4gICAgICAvLyBPciBpdCBtYXkgYmUgYmVjYXVzZSBpdCdzIG9sZGVyIFJlYWN0IHdoZXJlIHRoZXkncmUgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gd2FybiBpZiB3ZSdyZSBzdXJlIGl0J3MgYSBuZXcgUmVhY3QuXG4gICAgICBpZiAoY29udGV4dCAhPT0gY29udGV4dC5Db25zdW1lcikge1xuICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lcikge1xuICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0PiBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0Ll9jb250ZXh0O1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHJlbmRlciA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0EgY29udGV4dCBjb25zdW1lciB3YXMgcmVuZGVyZWQgd2l0aCBtdWx0aXBsZSBjaGlsZHJlbiwgb3IgYSBjaGlsZCAnICsgXCJ0aGF0IGlzbid0IGEgZnVuY3Rpb24uIEEgY29udGV4dCBjb25zdW1lciBleHBlY3RzIGEgc2luZ2xlIGNoaWxkIFwiICsgJ3RoYXQgaXMgYSBmdW5jdGlvbi4gSWYgeW91IGRpZCBwYXNzIGEgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0aGVyZSAnICsgJ2lzIG5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBhcm91bmQgaXQuJyk7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIG5ld1ZhbHVlID0gcmVhZENvbnRleHQoY29udGV4dCk7XG5cbiAge1xuICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciBuZXdDaGlsZHJlbjtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV3Q2hpbGRyZW4gPSByZW5kZXIobmV3VmFsdWUpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIHtcbiAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCkge1xuICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVzZXRTdXNwZW5kZWRDdXJyZW50T25Nb3VudEluTGVnYWN5TW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGxhenkgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIFJldXNlIHByZXZpb3VzIGRlcGVuZGVuY2llc1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAge1xuICAgIC8vIERvbid0IHVwZGF0ZSBcImJhc2VcIiByZW5kZXIgdGltZXMgZm9yIGJhaWxvdXRzLlxuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKCk7XG4gIH1cblxuICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzKTsgLy8gQ2hlY2sgaWYgdGhlIGNoaWxkcmVuIGhhdmUgYW55IHBlbmRpbmcgd29yay5cblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIGRvbid0IGhhdmUgYW55IHdvcmsgZWl0aGVyLiBXZSBjYW4gc2tpcCB0aGVtLlxuICAgIC8vIFRPRE86IE9uY2Ugd2UgYWRkIGJhY2sgcmVzdW1pbmcsIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgY2hpbGRyZW4gYXJlXG4gICAgLy8gYSB3b3JrLWluLXByb2dyZXNzIHNldC4gSWYgc28sIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlaXIgZWZmZWN0cy5cbiAgICB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gLy8gVGhpcyBmaWJlciBkb2Vzbid0IGhhdmUgd29yaywgYnV0IGl0cyBzdWJ0cmVlIGRvZXMuIENsb25lIHRoZSBjaGlsZFxuICAvLyBmaWJlcnMgYW5kIGNvbnRpbnVlLlxuXG5cbiAgY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gcmVtb3VudEZpYmVyKGN1cnJlbnQsIG9sZFdvcmtJblByb2dyZXNzLCBuZXdXb3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIHJldHVybkZpYmVyID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgaWYgKHJldHVybkZpYmVyID09PSBudWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3dhcCB0aGUgcm9vdCBmaWJlci4nKTtcbiAgICB9IC8vIERpc2Nvbm5lY3QgZnJvbSB0aGUgb2xkIGN1cnJlbnQuXG4gICAgLy8gSXQgd2lsbCBnZXQgZGVsZXRlZC5cblxuXG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIG9sZFdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIENvbm5lY3QgdG8gdGhlIG5ldyB0cmVlLlxuXG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuaW5kZXggPSBvbGRXb3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gb2xkV29ya0luUHJvZ3Jlc3Muc2libGluZztcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZXR1cm4gPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MucmVmID0gb2xkV29ya0luUHJvZ3Jlc3MucmVmOyAvLyBSZXBsYWNlIHRoZSBjaGlsZC9zaWJsaW5nIHBvaW50ZXJzIGFib3ZlIGl0LlxuXG4gICAgaWYgKG9sZFdvcmtJblByb2dyZXNzID09PSByZXR1cm5GaWJlci5jaGlsZCkge1xuICAgICAgcmV0dXJuRmliZXIuY2hpbGQgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByZXZTaWJsaW5nID0gcmV0dXJuRmliZXIuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvcHJvZC1lcnJvci1jb2Rlc1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCB0byBoYXZlIGEgY2hpbGQuJyk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwcmV2U2libGluZy5zaWJsaW5nICE9PSBvbGRXb3JrSW5Qcm9ncmVzcykge1xuICAgICAgICBwcmV2U2libGluZyA9IHByZXZTaWJsaW5nLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgdGhlIHByZXZpb3VzIHNpYmxpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJldlNpYmxpbmcuc2libGluZyA9IG5ld1dvcmtJblByb2dyZXNzO1xuICAgIH0gLy8gRGVsZXRlIHRoZSBvbGQgZmliZXIgYW5kIHBsYWNlIHRoZSBuZXcgb25lLlxuICAgIC8vIFNpbmNlIHRoZSBvbGQgZmliZXIgaXMgZGlzY29ubmVjdGVkLCB3ZSBoYXZlIHRvIHNjaGVkdWxlIGl0IG1hbnVhbGx5LlxuXG5cbiAgICB2YXIgZGVsZXRpb25zID0gcmV0dXJuRmliZXIuZGVsZXRpb25zO1xuXG4gICAgaWYgKGRlbGV0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuRmliZXIuZGVsZXRpb25zID0gW2N1cnJlbnRdO1xuICAgICAgcmV0dXJuRmliZXIuZmxhZ3MgfD0gQ2hpbGREZWxldGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRpb25zLnB1c2goY3VycmVudCk7XG4gICAgfVxuXG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50OyAvLyBSZXN0YXJ0IHdvcmsgZnJvbSB0aGUgbmV3IGZpYmVyLlxuXG4gICAgcmV0dXJuIG5ld1dvcmtJblByb2dyZXNzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIEJlZm9yZSBwZXJmb3JtaW5nIGFuIGVhcmx5IGJhaWxvdXQsIHdlIG11c3QgY2hlY2sgaWYgdGhlcmUgYXJlIHBlbmRpbmdcbiAgLy8gdXBkYXRlcyBvciBjb250ZXh0LlxuICB2YXIgdXBkYXRlTGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuXG4gIGlmIChpbmNsdWRlc1NvbWVMYW5lKHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBObyBwZW5kaW5nIHVwZGF0ZSwgYnV0IGJlY2F1c2UgY29udGV4dCBpcyBwcm9wYWdhdGVkIGxhemlseSwgd2UgbmVlZFxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdEVhcmx5QmFpbG91dElmTm9TY2hlZHVsZWRVcGRhdGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgZmliZXIgZG9lcyBub3QgaGF2ZSBhbnkgcGVuZGluZyB3b3JrLiBCYWlsb3V0IHdpdGhvdXQgZW50ZXJpbmdcbiAgLy8gdGhlIGJlZ2luIHBoYXNlLiBUaGVyZSdzIHN0aWxsIHNvbWUgYm9va2tlZXBpbmcgd2UgdGhhdCBuZWVkcyB0byBiZSBkb25lXG4gIC8vIGluIHRoaXMgb3B0aW1pemVkIHBhdGgsIG1vc3RseSBwdXNoaW5nIHN0dWZmIG9udG8gdGhlIHN0YWNrLlxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAge1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnZhbHVlO1xuICAgICAgICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQ7XG4gICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgbmV3VmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIC8vIFByb2ZpbGVyIHNob3VsZCBvbmx5IGNhbGwgb25SZW5kZXIgd2hlbiBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgICAgICB2YXIgaGFzQ2hpbGRXb3JrID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG5cbiAgICAgICAgaWYgKGhhc0NoaWxkV29yaykge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBSZXNldCBlZmZlY3QgZHVyYXRpb25zIGZvciB0aGUgbmV4dCBldmVudHVhbCBlZmZlY3QgcGhhc2UuXG4gICAgICAgICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcbiAgICAgICAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChzdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTsgLy8gV2Uga25vdyB0aGF0IHRoaXMgY29tcG9uZW50IHdpbGwgc3VzcGVuZCBhZ2FpbiBiZWNhdXNlIGlmIGl0IGhhc1xuICAgICAgICAgICAgLy8gYmVlbiB1bnN1c3BlbmRlZCBpdCBoYXMgY29tbWl0dGVkIGFzIGEgcmVzb2x2ZWQgU3VzcGVuc2UgY29tcG9uZW50LlxuICAgICAgICAgICAgLy8gSWYgaXQgbmVlZHMgdG8gYmUgcmV0cmllZCwgaXQgc2hvdWxkIGhhdmUgd29yayBzY2hlZHVsZWQgb24gaXQuXG5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7IC8vIFdlIHNob3VsZCBuZXZlciByZW5kZXIgdGhlIGNoaWxkcmVuIG9mIGEgZGVoeWRyYXRlZCBib3VuZGFyeSB1bnRpbCB3ZVxuICAgICAgICAgICAgLy8gdXBncmFkZSBpdC4gV2UgcmV0dXJuIG51bGwgaW5zdGVhZCBvZiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrLlxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9IC8vIElmIHRoaXMgYm91bmRhcnkgaXMgY3VycmVudGx5IHRpbWVkIG91dCwgd2UgbmVlZCB0byBkZWNpZGVcbiAgICAgICAgICAvLyB3aGV0aGVyIHRvIHJldHJ5IHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBvciB0byBza2lwIG92ZXIgaXQgYW5kXG4gICAgICAgICAgLy8gZ28gc3RyYWlnaHQgdG8gdGhlIGZhbGxiYWNrLiBDaGVjayB0aGUgcHJpb3JpdHkgb2YgdGhlIHByaW1hcnlcbiAgICAgICAgICAvLyBjaGlsZCBmcmFnbWVudC5cblxuXG4gICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgdmFyIHByaW1hcnlDaGlsZExhbmVzID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcztcblxuICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBwcmltYXJ5Q2hpbGRMYW5lcykpIHtcbiAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBVc2UgdGhlIG5vcm1hbCBwYXRoXG4gICAgICAgICAgICAvLyB0byBhdHRlbXB0IHRvIHJlbmRlciB0aGUgcHJpbWFyeSBjaGlsZHJlbiBhZ2Fpbi5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCBkb2VzIG5vdCBoYXZlIHBlbmRpbmcgd29yayBtYXJrZWRcbiAgICAgICAgICAgIC8vIG9uIGl0XG4gICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTsgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gZG8gbm90IGhhdmUgcGVuZGluZyB3b3JrIHdpdGggc3VmZmljaWVudFxuICAgICAgICAgICAgLy8gcHJpb3JpdHkuIEJhaWxvdXQuXG5cbiAgICAgICAgICAgIHZhciBjaGlsZCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBmYWxsYmFjayBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gU2tpcCBvdmVyIHRoZVxuICAgICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuIGFuZCB3b3JrIG9uIHRoZSBmYWxsYmFjay5cbiAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBOb3RlOiBXZSBjYW4gcmV0dXJuIGBudWxsYCBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBjaGVja2VkXG4gICAgICAgICAgICAgIC8vIHdoZXRoZXIgdGhlcmUgd2VyZSBuZXN0ZWQgY29udGV4dCBjb25zdW1lcnMsIHZpYSB0aGUgY2FsbCB0b1xuICAgICAgICAgICAgICAvLyBgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29ya2AgYWJvdmUuXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgICB2YXIgX2hhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAgICAgaWYgKF9oYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgIC8vIElmIHNvbWV0aGluZyB3YXMgaW4gZmFsbGJhY2sgc3RhdGUgbGFzdCB0aW1lLCBhbmQgd2UgaGF2ZSBhbGwgdGhlXG4gICAgICAgICAgICAvLyBzYW1lIGNoaWxkcmVuIHRoZW4gd2UncmUgc3RpbGwgaW4gcHJvZ3Jlc3NpdmUgbG9hZGluZyBzdGF0ZS5cbiAgICAgICAgICAgIC8vIFNvbWV0aGluZyBtaWdodCBnZXQgdW5ibG9ja2VkIGJ5IHN0YXRlIHVwZGF0ZXMgb3IgcmV0cmllcyBpbiB0aGVcbiAgICAgICAgICAgIC8vIHRyZWUgd2hpY2ggd2lsbCBhZmZlY3QgdGhlIHRhaWwuIFNvIHdlIG5lZWQgdG8gdXNlIHRoZSBub3JtYWxcbiAgICAgICAgICAgIC8vIHBhdGggdG8gY29tcHV0ZSB0aGUgY29ycmVjdCB0YWlsLlxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH0gLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgIC8vIGFzIGJlZm9yZS4gV2UgY2FuIGZhc3QgYmFpbCBvdXQuXG5cblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgIH0gLy8gSWYgbm90aGluZyBzdXNwZW5kZWQgYmVmb3JlIGFuZCB3ZSdyZSByZW5kZXJpbmcgdGhlIHNhbWUgY2hpbGRyZW4sXG4gICAgICAgIC8vIHRoZW4gdGhlIHRhaWwgZG9lc24ndCBtYXR0ZXIuIEFueXRoaW5nIG5ldyB0aGF0IHN1c3BlbmRzIHdpbGwgd29ya1xuICAgICAgICAvLyBpbiB0aGUgXCJ0b2dldGhlclwiIG1vZGUsIHNvIHdlIGNhbiBjb250aW51ZSBmcm9tIHRoZSBzdGF0ZSB3ZSBoYWQuXG5cblxuICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFJlc2V0IHRvIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSBpbiBjYXNlIHdlJ3ZlIHN0YXJ0ZWQgYSBkaWZmZXJlbnRcbiAgICAgICAgICAvLyB1cGRhdGUgaW4gdGhlIHBhc3QgYnV0IGRpZG4ndCBjb21wbGV0ZSBpdC5cbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBudWxsO1xuICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KTtcblxuICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGNoaWxkcmVuIGhhZCBhbnkgd29yaywgdGhhdCBtZWFucyB0aGF0IG5vbmUgb2ZcbiAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gTmVlZCB0byBjaGVjayBpZiB0aGUgdHJlZSBzdGlsbCBuZWVkcyB0byBiZSBkZWZlcnJlZC4gVGhpcyBpc1xuICAgICAgICAvLyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBsb2dpYyB1c2VkIGluIHRoZSBub3JtYWwgdXBkYXRlIHBhdGgsXG4gICAgICAgIC8vIHNvIHdlJ2xsIGp1c3QgZW50ZXIgdGhhdC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3ZSdsbCBiYWlsIG91dFxuICAgICAgICAvLyBhdCB0aGUgbmV4dCBsZXZlbCBpbnN0ZWFkIG9mIHRoaXMgb25lLCBiZWNhdXNlIHRoZSBjaGlsZCBwcm9wc1xuICAgICAgICAvLyBoYXZlIG5vdCBjaGFuZ2VkLiBXaGljaCBpcyBmaW5lLlxuICAgICAgICAvLyBUT0RPOiBQcm9iYWJseSBzaG91bGQgcmVmYWN0b3IgYGJlZ2luV29ya2AgdG8gc3BsaXQgdGhlIGJhaWxvdXRcbiAgICAgICAgLy8gcGF0aCBmcm9tIHRoZSBub3JtYWwgcGF0aC4gSSdtIHRlbXB0ZWQgdG8gZG8gYSBsYWJlbGVkIGJyZWFrIGhlcmVcbiAgICAgICAgLy8gYnV0IEkgd29uJ3QgOilcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBiZWdpbldvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ICYmIGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCByZXN0YXJ0IHRoZSBiZWdpbiBwaGFzZSB3aXRoIGEgbmV3IGZpYmVyLlxuICAgICAgcmV0dXJuIHJlbW91bnRGaWJlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzLmtleSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fCBudWxsLCB3b3JrSW5Qcm9ncmVzcy5tb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYW5lcykpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgaGFzQ29udGV4dENoYW5nZWQoKSB8fCAoIC8vIEZvcmNlIGEgcmUtcmVuZGVyIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkOlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgLy8gSWYgcHJvcHMgb3IgY29udGV4dCBjaGFuZ2VkLCBtYXJrIHRoZSBmaWJlciBhcyBoYXZpbmcgcGVyZm9ybWVkIHdvcmsuXG4gICAgICAvLyBUaGlzIG1heSBiZSB1bnNldCBpZiB0aGUgcHJvcHMgYXJlIGRldGVybWluZWQgdG8gYmUgZXF1YWwgbGF0ZXIgKG1lbW8pLlxuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgcHJvcHMgbm9yIGxlZ2FjeSBjb250ZXh0IGNoYW5nZXMuIENoZWNrIGlmIHRoZXJlJ3MgYSBwZW5kaW5nXG4gICAgICAvLyB1cGRhdGUgb3IgY29udGV4dCBjaGFuZ2UuXG4gICAgICB2YXIgaGFzU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0ID0gY2hlY2tTY2hlZHVsZWRVcGRhdGVPckNvbnRleHQoY3VycmVudCwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICBpZiAoIWhhc1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dCAmJiAvLyBJZiB0aGlzIGlzIHRoZSBzZWNvbmQgcGFzcyBvZiBhbiBlcnJvciBvciBzdXNwZW5zZSBib3VuZGFyeSwgdGhlcmVcbiAgICAgIC8vIG1heSBub3QgYmUgd29yayBzY2hlZHVsZWQgb24gYGN1cnJlbnRgLCBzbyB3ZSBjaGVjayBmb3IgdGhpcyBmbGFnLlxuICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gTm8gcGVuZGluZyB1cGRhdGVzIG9yIGNvbnRleHQuIEJhaWwgb3V0IG5vdy5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gYXR0ZW1wdEVhcmx5QmFpbG91dElmTm9TY2hlZHVsZWRVcGRhdGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChjdXJyZW50LmZsYWdzICYgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9uIHRoaXMgZmliZXIsIGJ1dCB0aGVyZSBhcmUgbm8gbmV3IHByb3BzXG4gICAgICAgIC8vIG5vciBsZWdhY3kgY29udGV4dC4gU2V0IHRoaXMgdG8gZmFsc2UuIElmIGFuIHVwZGF0ZSBxdWV1ZSBvciBjb250ZXh0XG4gICAgICAgIC8vIGNvbnN1bWVyIHByb2R1Y2VzIGEgY2hhbmdlZCB2YWx1ZSwgaXQgd2lsbCBzZXQgdGhpcyB0byB0cnVlLiBPdGhlcndpc2UsXG4gICAgICAgIC8vIHRoZSBjb21wb25lbnQgd2lsbCBhc3N1bWUgdGhlIGNoaWxkcmVuIGhhdmUgbm90IGNoYW5nZWQgYW5kIGJhaWwgb3V0LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcblxuICAgIGlmIChnZXRJc0h5ZHJhdGluZygpICYmIGlzRm9ya2VkQ2hpbGQod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGNoaWxkIGJlbG9uZ3MgdG8gYSBsaXN0IG9mIG11bGlwbGUgY2hpbGRyZW4gaW5cbiAgICAgIC8vIGl0cyBwYXJlbnQuXG4gICAgICAvL1xuICAgICAgLy8gSW4gYSB0cnVlIG11bHRpLXRocmVhZGVkIGltcGxlbWVudGF0aW9uLCB3ZSB3b3VsZCByZW5kZXIgY2hpbGRyZW4gb25cbiAgICAgIC8vIHBhcmFsbGVsIHRocmVhZHMuIFRoaXMgd291bGQgcmVwcmVzZW50IHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgcmVuZGVyXG4gICAgICAvLyB0aHJlYWQgZm9yIHRoaXMgc3VidHJlZS5cbiAgICAgIC8vXG4gICAgICAvLyBXZSBvbmx5IHVzZSB0aGlzIGZvciBpZCBnZW5lcmF0aW9uIGR1cmluZyBoeWRyYXRpb24sIHdoaWNoIGlzIHdoeSB0aGVcbiAgICAgIC8vIGxvZ2ljIGlzIGxvY2F0ZWQgaW4gdGhpcyBzcGVjaWFsIGJyYW5jaC5cbiAgICAgIHZhciBzbG90SW5kZXggPSB3b3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICAgIHZhciBudW1iZXJPZkZvcmtzID0gZ2V0Rm9ya3NBdExldmVsKCk7XG4gICAgICBwdXNoVHJlZUlkKHdvcmtJblByb2dyZXNzLCBudW1iZXJPZkZvcmtzLCBzbG90SW5kZXgpO1xuICAgIH1cbiAgfSAvLyBCZWZvcmUgZW50ZXJpbmcgdGhlIGJlZ2luIHBoYXNlLCBjbGVhciBwZW5kaW5nIHVwZGF0ZSBwcmlvcml0eS5cbiAgLy8gVE9ETzogVGhpcyBhc3N1bWVzIHRoYXQgd2UncmUgYWJvdXQgdG8gZXZhbHVhdGUgdGhlIGNvbXBvbmVudCBhbmQgcHJvY2Vzc1xuICAvLyB0aGUgdXBkYXRlIHF1ZXVlLiBIb3dldmVyLCB0aGVyZSdzIGFuIGV4Y2VwdGlvbjogU2ltcGxlTWVtb0NvbXBvbmVudFxuICAvLyBzb21ldGltZXMgYmFpbHMgb3V0IGxhdGVyIGluIHRoZSBiZWdpbiBwaGFzZS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGRcbiAgLy8gbW92ZSB0aGlzIGFzc2lnbm1lbnQgb3V0IG9mIHRoZSBjb21tb24gcGF0aCBhbmQgaW50byBlYWNoIGJyYW5jaC5cblxuXG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIG1vdW50TGF6eUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBDb21wb25lbnQgPyB1bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQgPyBfdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50LCBfdW5yZXNvbHZlZFByb3BzKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQsIF9yZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RSb290KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0VGV4dChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICByZXR1cm4gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczIgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gdHlwZSA/IF91bnJlc29sdmVkUHJvcHMyIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh0eXBlLCBfdW5yZXNvbHZlZFByb3BzMik7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZvcndhcmRSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIF9yZXNvbHZlZFByb3BzMiwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNb2RlOlxuICAgICAgcmV0dXJuIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICByZXR1cm4gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfdHlwZTIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFJlc29sdmUgb3V0ZXIgcHJvcHMgZmlyc3QsIHRoZW4gcmVzb2x2ZSBpbm5lciBwcm9wcy5cblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIsIF91bnJlc29sdmVkUHJvcHMzKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICB2YXIgb3V0ZXJQcm9wVHlwZXMgPSBfdHlwZTIucHJvcFR5cGVzO1xuXG4gICAgICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIF9yZXNvbHZlZFByb3BzMywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoX3R5cGUyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIudHlwZSwgX3Jlc29sdmVkUHJvcHMzKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF90eXBlMiwgX3Jlc29sdmVkUHJvcHMzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudDIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MiA/IF91bnJlc29sdmVkUHJvcHM0IDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MiwgX3VucmVzb2x2ZWRQcm9wczQpO1xuXG4gICAgICAgIHJldHVybiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX0NvbXBvbmVudDIsIF9yZXNvbHZlZFByb3BzNCwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArIHdvcmtJblByb2dyZXNzLnRhZyArIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFwiICsgJ1JlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbn1cblxuZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBUYWcgdGhlIGZpYmVyIHdpdGggYW4gdXBkYXRlIGVmZmVjdC4gVGhpcyB0dXJucyBhIFBsYWNlbWVudCBpbnRvXG4gIC8vIGEgUGxhY2VtZW50QW5kVXBkYXRlLlxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcykge1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZlN0YXRpYztcbiAgfVxufVxuXG52YXIgYXBwZW5kQWxsQ2hpbGRyZW47XG52YXIgdXBkYXRlSG9zdENvbnRhaW5lcjtcbnZhciB1cGRhdGVIb3N0Q29tcG9uZW50JDE7XG52YXIgdXBkYXRlSG9zdFRleHQkMTtcblxue1xuICAvLyBNdXRhdGlvbiBtb2RlXG4gIGFwcGVuZEFsbENoaWxkcmVuID0gZnVuY3Rpb24gKHBhcmVudCwgd29ya0luUHJvZ3Jlc3MsIG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSwgaXNIaWRkZW4pIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBjcmVhdGVkIGJ1dCB3ZSBuZWVkIHJlY3Vyc2UgZG93biBpdHNcbiAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0Q29udGFpbmVyID0gZnVuY3Rpb24gKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7Ly8gTm9vcFxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb21wb25lbnQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkIHRvXG4gICAgLy8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzKSB7XG4gICAgICAvLyBJbiBtdXRhdGlvbiBtb2RlLCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIGEgYmFpbG91dCBiZWNhdXNlXG4gICAgICAvLyB3ZSB3b24ndCB0b3VjaCB0aGlzIG5vZGUgZXZlbiBpZiBjaGlsZHJlbiBjaGFuZ2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgZ2V0IHVwZGF0ZWQgYmVjYXVzZSBvbmUgb2Ygb3VyIGNoaWxkcmVuIHVwZGF0ZWQsIHdlIGRvbid0XG4gICAgLy8gaGF2ZSBuZXdQcm9wcyBzbyB3ZSdsbCBoYXZlIHRvIHJldXNlIHRoZW0uXG4gICAgLy8gVE9ETzogU3BsaXQgdGhlIHVwZGF0ZSBBUEkgYXMgc2VwYXJhdGUgZm9yIHRoZSBwcm9wcyB2cy4gY2hpbGRyZW4uXG4gICAgLy8gRXZlbiBiZXR0ZXIgd291bGQgYmUgaWYgY2hpbGRyZW4gd2VyZW4ndCBzcGVjaWFsIGNhc2VkIGF0IGFsbCB0aG8uXG5cblxuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICB2YXIgY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTsgLy8gVE9ETzogRXhwZXJpZW5jaW5nIGFuIGVycm9yIHdoZXJlIG9sZFByb3BzIGlzIG51bGwuIFN1Z2dlc3RzIGEgaG9zdFxuICAgIC8vIGNvbXBvbmVudCBpcyBoaXR0aW5nIHRoZSByZXN1bWUgcGF0aC4gRmlndXJlIG91dCB3aHkuIFBvc3NpYmx5XG4gICAgLy8gcmVsYXRlZCB0byBgaGlkZGVuYC5cblxuICAgIHZhciB1cGRhdGVQYXlsb2FkID0gcHJlcGFyZVVwZGF0ZShpbnN0YW5jZSwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCk7IC8vIFRPRE86IFR5cGUgdGhpcyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29tcG9uZW50LlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB1cGRhdGVQYXlsb2FkOyAvLyBJZiB0aGUgdXBkYXRlIHBheWxvYWQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2Ugb3IgaWYgdGhlcmVcbiAgICAvLyBpcyBhIG5ldyByZWYgd2UgbWFyayB0aGlzIGFzIGFuIHVwZGF0ZS4gQWxsIHRoZSB3b3JrIGlzIGRvbmUgaW4gY29tbWl0V29yay5cblxuICAgIGlmICh1cGRhdGVQYXlsb2FkKSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlSG9zdFRleHQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCkge1xuICAgIC8vIElmIHRoZSB0ZXh0IGRpZmZlcnMsIG1hcmsgaXQgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaW4gZG9uZSBpbiBjb21taXRXb3JrLlxuICAgIGlmIChvbGRUZXh0ICE9PSBuZXdUZXh0KSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrKSB7XG4gIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgLy8gSWYgd2UncmUgaHlkcmF0aW5nLCB3ZSBzaG91bGQgY29uc3VtZSBhcyBtYW55IGl0ZW1zIGFzIHdlIGNhblxuICAgIC8vIHNvIHdlIGRvbid0IGxlYXZlIGFueSBiZWhpbmQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChyZW5kZXJTdGF0ZS50YWlsTW9kZSkge1xuICAgIGNhc2UgJ2hpZGRlbic6XG4gICAgICB7XG4gICAgICAgIC8vIEFueSBpbnNlcnRpb25zIGF0IHRoZSBlbmQgb2YgdGhlIHRhaWwgbGlzdCBhZnRlciB0aGlzIHBvaW50XG4gICAgICAgIC8vIHNob3VsZCBiZSBpbnZpc2libGUuIElmIHRoZXJlIGFyZSBhbHJlYWR5IG1vdW50ZWQgYm91bmRhcmllc1xuICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHdob2xlIHRhaWwgdG8gZmluZCBpZlxuICAgICAgICAvLyB0aGVyZSBhcmUgYW55LlxuICAgICAgICB2YXIgdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgbGFzdFRhaWxOb2RlID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAodGFpbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAodGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsYXN0VGFpbE5vZGUgPSB0YWlsTm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWlsTm9kZSA9IHRhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBzaW1wbHkgZ29pbmcgdG8gZGVsZXRlIGFsbCBpbnNlcnRpb25zIGFmdGVyIHRoZVxuICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cblxuICAgICAgICBpZiAobGFzdFRhaWxOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBsYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2NvbGxhcHNlZCc6XG4gICAgICB7XG4gICAgICAgIC8vIEFueSBpbnNlcnRpb25zIGF0IHRoZSBlbmQgb2YgdGhlIHRhaWwgbGlzdCBhZnRlciB0aGlzIHBvaW50XG4gICAgICAgIC8vIHNob3VsZCBiZSBpbnZpc2libGUuIElmIHRoZXJlIGFyZSBhbHJlYWR5IG1vdW50ZWQgYm91bmRhcmllc1xuICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHdob2xlIHRhaWwgdG8gZmluZCBpZlxuICAgICAgICAvLyB0aGVyZSBhcmUgYW55LlxuICAgICAgICB2YXIgX3RhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgdmFyIF9sYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlIChfdGFpbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoX3RhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX2xhc3RUYWlsTm9kZSA9IF90YWlsTm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGFpbE5vZGUgPSBfdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChfbGFzdFRhaWxOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICBpZiAoIWhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayAmJiByZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBzdXNwZW5kZWQgZHVyaW5nIHRoZSBoZWFkLiBXZSB3YW50IHRvIHNob3cgYXQgbGVhc3Qgb25lXG4gICAgICAgICAgICAvLyByb3cgYXQgdGhlIHRhaWwuIFNvIHdlJ2xsIGtlZXAgb24gYW5kIGN1dCBvZmYgdGhlIHJlc3QuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gaW5zZXJ0ZWQuXG4gICAgICAgICAgX2xhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1YmJsZVByb3BlcnRpZXMoY29tcGxldGVkV29yaykge1xuICB2YXIgZGlkQmFpbG91dCA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlICE9PSBudWxsICYmIGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlLmNoaWxkID09PSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuICB2YXIgbmV3Q2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gIHZhciBzdWJ0cmVlRmxhZ3MgPSBOb0ZsYWdzO1xuXG4gIGlmICghZGlkQmFpbG91dCkge1xuICAgIC8vIEJ1YmJsZSB1cCB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lLlxuICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAvLyBJbiBwcm9maWxpbmcgbW9kZSwgcmVzZXRDaGlsZEV4cGlyYXRpb25UaW1lIGlzIGFsc28gdXNlZCB0byByZXNldFxuICAgICAgLy8gcHJvZmlsZXIgZHVyYXRpb25zLlxuICAgICAgdmFyIGFjdHVhbER1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgIHZhciB0cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgdmFyIGNoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoY2hpbGQubGFuZXMsIGNoaWxkLmNoaWxkTGFuZXMpKTtcbiAgICAgICAgc3VidHJlZUZsYWdzIHw9IGNoaWxkLnN1YnRyZWVGbGFncztcbiAgICAgICAgc3VidHJlZUZsYWdzIHw9IGNoaWxkLmZsYWdzOyAvLyBXaGVuIGEgZmliZXIgaXMgY2xvbmVkLCBpdHMgYWN0dWFsRHVyYXRpb24gaXMgcmVzZXQgdG8gMC4gVGhpcyB2YWx1ZSB3aWxsXG4gICAgICAgIC8vIG9ubHkgYmUgdXBkYXRlZCBpZiB3b3JrIGlzIGRvbmUgb24gdGhlIGZpYmVyIChpLmUuIGl0IGRvZXNuJ3QgYmFpbG91dCkuXG4gICAgICAgIC8vIFdoZW4gd29yayBpcyBkb25lLCBpdCBzaG91bGQgYnViYmxlIHRvIHRoZSBwYXJlbnQncyBhY3R1YWxEdXJhdGlvbi4gSWZcbiAgICAgICAgLy8gdGhlIGZpYmVyIGhhcyBub3QgYmVlbiBjbG9uZWQgdGhvdWdoLCAobWVhbmluZyBubyB3b3JrIHdhcyBkb25lKSwgdGhlblxuICAgICAgICAvLyB0aGlzIHZhbHVlIHdpbGwgcmVmbGVjdCB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd29ya2luZyBvbiBhIHByZXZpb3VzXG4gICAgICAgIC8vIHJlbmRlci4gSW4gdGhhdCBjYXNlIGl0IHNob3VsZCBub3QgYnViYmxlLiBXZSBkZXRlcm1pbmUgd2hldGhlciBpdCB3YXNcbiAgICAgICAgLy8gY2xvbmVkIGJ5IGNvbXBhcmluZyB0aGUgY2hpbGQgcG9pbnRlci5cblxuICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgdHJlZUJhc2VEdXJhdGlvbiArPSBjaGlsZC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IHRyZWVCYXNlRHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoX2NoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoX2NoaWxkLmxhbmVzLCBfY2hpbGQuY2hpbGRMYW5lcykpO1xuICAgICAgICBzdWJ0cmVlRmxhZ3MgfD0gX2NoaWxkLnN1YnRyZWVGbGFncztcbiAgICAgICAgc3VidHJlZUZsYWdzIHw9IF9jaGlsZC5mbGFnczsgLy8gVXBkYXRlIHRoZSByZXR1cm4gcG9pbnRlciBzbyB0aGUgdHJlZSBpcyBjb25zaXN0ZW50LiBUaGlzIGlzIGEgY29kZVxuICAgICAgICAvLyBzbWVsbCBiZWNhdXNlIGl0IGFzc3VtZXMgdGhlIGNvbW1pdCBwaGFzZSBpcyBuZXZlciBjb25jdXJyZW50IHdpdGhcbiAgICAgICAgLy8gdGhlIHJlbmRlciBwaGFzZS4gV2lsbCBhZGRyZXNzIGR1cmluZyByZWZhY3RvciB0byBhbHRlcm5hdGUgbW9kZWwuXG5cbiAgICAgICAgX2NoaWxkLnJldHVybiA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBsZXRlZFdvcmsuc3VidHJlZUZsYWdzIHw9IHN1YnRyZWVGbGFncztcbiAgfSBlbHNlIHtcbiAgICAvLyBCdWJibGUgdXAgdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gdGltZS5cbiAgICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgLy8gSW4gcHJvZmlsaW5nIG1vZGUsIHJlc2V0Q2hpbGRFeHBpcmF0aW9uVGltZSBpcyBhbHNvIHVzZWQgdG8gcmVzZXRcbiAgICAgIC8vIHByb2ZpbGVyIGR1cmF0aW9ucy5cbiAgICAgIHZhciBfdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHZhciBfY2hpbGQyID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgd2hpbGUgKF9jaGlsZDIgIT09IG51bGwpIHtcbiAgICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhfY2hpbGQyLmxhbmVzLCBfY2hpbGQyLmNoaWxkTGFuZXMpKTsgLy8gXCJTdGF0aWNcIiBmbGFncyBzaGFyZSB0aGUgbGlmZXRpbWUgb2YgdGhlIGZpYmVyL2hvb2sgdGhleSBiZWxvbmcgdG8sXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBidWJibGUgdGhvc2UgdXAgZXZlbiBkdXJpbmcgYSBiYWlsb3V0LiBBbGwgdGhlIG90aGVyXG4gICAgICAgIC8vIGZsYWdzIGhhdmUgYSBsaWZldGltZSBvbmx5IG9mIGEgc2luZ2xlIHJlbmRlciArIGNvbW1pdCwgc28gd2Ugc2hvdWxkXG4gICAgICAgIC8vIGlnbm9yZSB0aGVtLlxuXG4gICAgICAgIHN1YnRyZWVGbGFncyB8PSBfY2hpbGQyLnN1YnRyZWVGbGFncyAmIFN0YXRpY01hc2s7XG4gICAgICAgIHN1YnRyZWVGbGFncyB8PSBfY2hpbGQyLmZsYWdzICYgU3RhdGljTWFzaztcbiAgICAgICAgX3RyZWVCYXNlRHVyYXRpb24gKz0gX2NoaWxkMi50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgICBfY2hpbGQyID0gX2NoaWxkMi5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBjb21wbGV0ZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24gPSBfdHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9jaGlsZDMgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICB3aGlsZSAoX2NoaWxkMyAhPT0gbnVsbCkge1xuICAgICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKF9jaGlsZDMubGFuZXMsIF9jaGlsZDMuY2hpbGRMYW5lcykpOyAvLyBcIlN0YXRpY1wiIGZsYWdzIHNoYXJlIHRoZSBsaWZldGltZSBvZiB0aGUgZmliZXIvaG9vayB0aGV5IGJlbG9uZyB0byxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGJ1YmJsZSB0aG9zZSB1cCBldmVuIGR1cmluZyBhIGJhaWxvdXQuIEFsbCB0aGUgb3RoZXJcbiAgICAgICAgLy8gZmxhZ3MgaGF2ZSBhIGxpZmV0aW1lIG9ubHkgb2YgYSBzaW5nbGUgcmVuZGVyICsgY29tbWl0LCBzbyB3ZSBzaG91bGRcbiAgICAgICAgLy8gaWdub3JlIHRoZW0uXG5cbiAgICAgICAgc3VidHJlZUZsYWdzIHw9IF9jaGlsZDMuc3VidHJlZUZsYWdzICYgU3RhdGljTWFzaztcbiAgICAgICAgc3VidHJlZUZsYWdzIHw9IF9jaGlsZDMuZmxhZ3MgJiBTdGF0aWNNYXNrOyAvLyBVcGRhdGUgdGhlIHJldHVybiBwb2ludGVyIHNvIHRoZSB0cmVlIGlzIGNvbnNpc3RlbnQuIFRoaXMgaXMgYSBjb2RlXG4gICAgICAgIC8vIHNtZWxsIGJlY2F1c2UgaXQgYXNzdW1lcyB0aGUgY29tbWl0IHBoYXNlIGlzIG5ldmVyIGNvbmN1cnJlbnQgd2l0aFxuICAgICAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLiBXaWxsIGFkZHJlc3MgZHVyaW5nIHJlZmFjdG9yIHRvIGFsdGVybmF0ZSBtb2RlbC5cblxuICAgICAgICBfY2hpbGQzLnJldHVybiA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgIF9jaGlsZDMgPSBfY2hpbGQzLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGxldGVkV29yay5zdWJ0cmVlRmxhZ3MgfD0gc3VidHJlZUZsYWdzO1xuICB9XG5cbiAgY29tcGxldGVkV29yay5jaGlsZExhbmVzID0gbmV3Q2hpbGRMYW5lcztcbiAgcmV0dXJuIGRpZEJhaWxvdXQ7XG59XG5cbmZ1bmN0aW9uIGNvbXBsZXRlRGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRTdGF0ZSkge1xuICBpZiAoaGFzVW5oeWRyYXRlZFRhaWxOb2RlcygpICYmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGUgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MpIHtcbiAgICB3YXJuSWZVbmh5ZHJhdGVkVGFpbE5vZGVzKHdvcmtJblByb2dyZXNzKTtcbiAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRm9yY2VDbGllbnRSZW5kZXIgfCBJbmNvbXBsZXRlIHwgU2hvdWxkQ2FwdHVyZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgaWYgKG5leHRTdGF0ZSAhPT0gbnVsbCAmJiBuZXh0U3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgIC8vIFdlIG1pZ2h0IGJlIGluc2lkZSBhIGh5ZHJhdGlvbiBzdGF0ZSB0aGUgZmlyc3QgdGltZSB3ZSdyZSBwaWNraW5nIHVwIHRoaXNcbiAgICAvLyBTdXNwZW5zZSBib3VuZGFyeSwgYW5kIGFsc28gYWZ0ZXIgd2UndmUgcmVlbnRlcmVkIGl0IGZvciBmdXJ0aGVyIGh5ZHJhdGlvbi5cbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgaWYgKCF3YXNIeWRyYXRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQgd2FzIGNvbXBsZXRlZCB3aXRob3V0IGEgaHlkcmF0ZWQgbm9kZS4gJyArICdUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIFJlYWN0LicpO1xuICAgICAgfVxuXG4gICAgICBwcmVwYXJlVG9IeWRyYXRlSG9zdFN1c3BlbnNlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICB2YXIgaXNUaW1lZE91dFN1c3BlbnNlID0gbmV4dFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgICAgaWYgKGlzVGltZWRPdXRTdXNwZW5zZSkge1xuICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGltZSBzcGVudCBpbiBhIHRpbWVkIG91dCBTdXNwZW5zZSBzdWJ0cmVlIGFzIHBhcnQgb2YgdGhlIGJhc2UgZHVyYXRpb24uXG4gICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICAgICAgaWYgKHByaW1hcnlDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vICRGbG93Rml4TWUgRmxvdyBkb2Vzbid0IHN1cHBvcnQgdHlwZSBjYXN0aW5nIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIC09IG9wZXJhdG9yXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT0gcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBtaWdodCBoYXZlIHJlZW50ZXJlZCB0aGlzIGJvdW5kYXJ5IHRvIGh5ZHJhdGUgaXQuIElmIHNvLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBoeWRyYXRpb25cbiAgICAgIC8vIHN0YXRlIHNpbmNlIHdlJ3JlIG5vdyBleGl0aW5nIG91dCBvZiBpdC4gcG9wSHlkcmF0aW9uU3RhdGUgZG9lc24ndCBkbyB0aGF0IGZvciB1cy5cbiAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcblxuICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgYm91bmRhcnkgZGlkIG5vdCBzdXNwZW5kIHNvIGl0J3Mgbm93IGh5ZHJhdGVkIGFuZCB1bnN1c3BlbmRlZC5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICB9IC8vIElmIG5vdGhpbmcgc3VzcGVuZGVkLCB3ZSBuZWVkIHRvIHNjaGVkdWxlIGFuIGVmZmVjdCB0byBtYXJrIHRoaXMgYm91bmRhcnlcbiAgICAgIC8vIGFzIGhhdmluZyBoeWRyYXRlZCBzbyBldmVudHMga25vdyB0aGF0IHRoZXkncmUgZnJlZSB0byBiZSBpbnZva2VkLlxuICAgICAgLy8gSXQncyBhbHNvIGEgc2lnbmFsIHRvIHJlcGxheSBldmVudHMgYW5kIHRoZSBzdXNwZW5zZSBjYWxsYmFjay5cbiAgICAgIC8vIElmIHNvbWV0aGluZyBzdXNwZW5kZWQsIHNjaGVkdWxlIGFuIGVmZmVjdCB0byBhdHRhY2ggcmV0cnkgbGlzdGVuZXJzLlxuICAgICAgLy8gU28gd2UgbWlnaHQgYXMgd2VsbCBhbHdheXMgbWFyayB0aGlzLlxuXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICB7XG4gICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgdmFyIF9pc1RpbWVkT3V0U3VzcGVuc2UgPSBuZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAoX2lzVGltZWRPdXRTdXNwZW5zZSkge1xuICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGltZSBzcGVudCBpbiBhIHRpbWVkIG91dCBTdXNwZW5zZSBzdWJ0cmVlIGFzIHBhcnQgb2YgdGhlIGJhc2UgZHVyYXRpb24uXG4gICAgICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgIGlmIChfcHJpbWFyeUNoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0eXBlIGNhc3RpbmcgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgLT0gb3BlcmF0b3JcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPSBfcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBTdWNjZXNzZnVsbHkgY29tcGxldGVkIHRoaXMgdHJlZS4gSWYgdGhpcyB3YXMgYSBmb3JjZWQgY2xpZW50IHJlbmRlcixcbiAgICAvLyB0aGVyZSBtYXkgaGF2ZSBiZWVuIHJlY292ZXJhYmxlIGVycm9ycyBkdXJpbmcgZmlyc3QgaHlkcmF0aW9uXG4gICAgLy8gYXR0ZW1wdC4gSWYgc28sIGFkZCB0aGVtIHRvIGEgcXVldWUgc28gd2UgY2FuIGxvZyB0aGVtIGluIHRoZVxuICAgIC8vIGNvbW1pdCBwaGFzZS5cbiAgICB1cGdyYWRlSHlkcmF0aW9uRXJyb3JzVG9SZWNvdmVyYWJsZSgpOyAvLyBGYWxsIHRocm91Z2ggdG8gbm9ybWFsIFN1c3BlbnNlIHBhdGhcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBsZXRlV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBOb3RlOiBUaGlzIGludGVudGlvbmFsbHkgZG9lc24ndCBjaGVjayBpZiB3ZSdyZSBoeWRyYXRpbmcgYmVjYXVzZSBjb21wYXJpbmdcbiAgLy8gdG8gdGhlIGN1cnJlbnQgdHJlZSBwcm92aWRlciBmaWJlciBpcyBqdXN0IGFzIGZhc3QgYW5kIGxlc3MgZXJyb3ItcHJvbmUuXG4gIC8vIElkZWFsbHkgd2Ugd291bGQgaGF2ZSBhIHNwZWNpYWwgdmVyc2lvbiBvZiB0aGUgd29yayBsb29wIG9ubHlcbiAgLy8gZm9yIGh5ZHJhdGlvbi5cblxuICBwb3BUcmVlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIEZyYWdtZW50OlxuICAgIGNhc2UgTW9kZTpcbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGZpYmVyUm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuXG4gICAgICAgIGlmIChmaWJlclJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICBmaWJlclJvb3QuY29udGV4dCA9IGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dDtcbiAgICAgICAgICBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5jaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCBwb3Agc28gdGhhdCB3ZSBjYW4gZGVsZXRlIGFueSByZW1haW5pbmcgY2hpbGRyZW5cbiAgICAgICAgICAvLyB0aGF0IHdlcmVuJ3QgaHlkcmF0ZWQuXG4gICAgICAgICAgdmFyIHdhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKHdhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgdGhlbiB3ZSdsbCBuZWVkIHRvIHNjaGVkdWxlIGFuIHVwZGF0ZSBmb3JcbiAgICAgICAgICAgIC8vIHRoZSBjb21taXQgc2lkZS1lZmZlY3RzIG9uIHRoZSByb290LlxuICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICAgICAgaWYgKCAvLyBDaGVjayBpZiB0aGlzIGlzIGEgY2xpZW50IHJvb3RcbiAgICAgICAgICAgICAgIXByZXZTdGF0ZS5pc0RlaHlkcmF0ZWQgfHwgLy8gQ2hlY2sgaWYgd2UgcmV2ZXJ0ZWQgdG8gY2xpZW50IHJlbmRlcmluZyAoZS5nLiBkdWUgdG8gYW4gZXJyb3IpXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIEZvcmNlQ2xpZW50UmVuZGVyKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgICAgICAgIC8vIFNjaGVkdWxlIGFuIGVmZmVjdCB0byBjbGVhciB0aGlzIGNvbnRhaW5lciBhdCB0aGUgc3RhcnQgb2YgdGhlXG4gICAgICAgICAgICAgICAgLy8gbmV4dCBjb21taXQuIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiBSZWFjdCByZW5kZXJpbmcgaW50byBhXG4gICAgICAgICAgICAgICAgLy8gY29udGFpbmVyIHdpdGggcHJldmlvdXMgY2hpbGRyZW4uIEl0J3MgYWxzbyBzYWZlIHRvIGRvIGZvclxuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZXMgdG9vLCBiZWNhdXNlIGN1cnJlbnQuY2hpbGQgd291bGQgb25seSBiZSBudWxsIGlmIHRoZVxuICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzIHJlbmRlciB3YXMgbnVsbCAoc28gdGhlIGNvbnRhaW5lciB3b3VsZCBhbHJlYWR5XG4gICAgICAgICAgICAgICAgLy8gYmUgZW1wdHkpLlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90OyAvLyBJZiB0aGlzIHdhcyBhIGZvcmNlZCBjbGllbnQgcmVuZGVyLCB0aGVyZSBtYXkgaGF2ZSBiZWVuXG4gICAgICAgICAgICAgICAgLy8gcmVjb3ZlcmFibGUgZXJyb3JzIGR1cmluZyBmaXJzdCBoeWRyYXRpb24gYXR0ZW1wdC4gSWYgc28sIGFkZFxuICAgICAgICAgICAgICAgIC8vIHRoZW0gdG8gYSBxdWV1ZSBzbyB3ZSBjYW4gbG9nIHRoZW0gaW4gdGhlIGNvbW1pdCBwaGFzZS5cblxuICAgICAgICAgICAgICAgIHVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIHJvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHVwZGF0ZUhvc3RDb21wb25lbnQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudC5yZWYgIT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlIG11c3QgaGF2ZSBuZXcgcHJvcHMgZm9yIG5ldyBtb3VudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5ICcgKyAnY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gd2UgYWJvcnQgd29yay5cblxuXG4gICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBjdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpOyAvLyBUT0RPOiBNb3ZlIGNyZWF0ZUluc3RhbmNlIHRvIGJlZ2luV29yayBhbmQga2VlcCBpdCBvbiBhIGNvbnRleHRcbiAgICAgICAgICAvLyBcInN0YWNrXCIgYXMgdGhlIHBhcmVudC4gVGhlbiBhcHBlbmQgY2hpbGRyZW4gYXMgd2UgZ28gaW4gYmVnaW5Xb3JrXG4gICAgICAgICAgLy8gb3IgY29tcGxldGVXb3JrIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHdhbnQgdG8gYWRkIHRoZW0gdG9wLT5kb3duIG9yXG4gICAgICAgICAgLy8gYm90dG9tLT51cC4gVG9wLT5kb3duIGlzIGZhc3RlciBpbiBJRTExLlxuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBhbmQgY3JlYXRlSW5zdGFuY2Ugc3RlcCBpbnRvIHRoZSBiZWdpblBoYXNlXG4gICAgICAgICAgICAvLyB0byBjb25zb2xpZGF0ZS5cbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgY2hhbmdlcyB0byB0aGUgaHlkcmF0ZWQgbm9kZSBuZWVkIHRvIGJlIGFwcGxpZWQgYXQgdGhlXG4gICAgICAgICAgICAgIC8vIGNvbW1pdC1waGFzZSB3ZSBtYXJrIHRoaXMgYXMgc3VjaC5cbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZUluc3RhbmNlKHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgYXBwZW5kQWxsQ2hpbGRyZW4oaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gaW5zdGFuY2U7IC8vIENlcnRhaW4gcmVuZGVyZXJzIHJlcXVpcmUgY29tbWl0LXRpbWUgZWZmZWN0cyBmb3IgaW5pdGlhbCBtb3VudC5cbiAgICAgICAgICAgIC8vIChlZyBET00gcmVuZGVyZXIgc3VwcG9ydHMgYXV0by1mb2N1cyBmb3IgY2VydGFpbiBlbGVtZW50cykuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgc3VjaCByZW5kZXJlcnMgZ2V0IHNjaGVkdWxlZCBmb3IgbGF0ZXIgd29yay5cblxuICAgICAgICAgICAgaWYgKGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGluc3RhbmNlLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJlZiBvbiBhIGhvc3Qgbm9kZSB3ZSBuZWVkIHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgICAgIG1hcmtSZWYkMSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1RleHQgPSBuZXdQcm9wcztcblxuICAgICAgICBpZiAoY3VycmVudCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBvbGRUZXh0ID0gY3VycmVudC5tZW1vaXplZFByb3BzOyAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZFxuICAgICAgICAgIC8vIHRvIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG5cbiAgICAgICAgICB1cGRhdGVIb3N0VGV4dCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld1RleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgJyArICdjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICAgICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBhYm9ydCB3b3JrLlxuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9yb290Q29udGFpbmVySW5zdGFuY2UgPSBnZXRSb290SG9zdENvbnRhaW5lcigpO1xuXG4gICAgICAgICAgdmFyIF9jdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuXG4gICAgICAgICAgdmFyIF93YXNIeWRyYXRlZDIgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkMikge1xuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3JlYXRlVGV4dEluc3RhbmNlKG5ld1RleHQsIF9yb290Q29udGFpbmVySW5zdGFuY2UsIF9jdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTsgLy8gU3BlY2lhbCBwYXRoIGZvciBkZWh5ZHJhdGVkIGJvdW5kYXJpZXMuIFdlIG1heSBldmVudHVhbGx5IG1vdmUgdGhpc1xuICAgICAgICAvLyB0byBpdHMgb3duIGZpYmVyIHR5cGUgc28gdGhhdCB3ZSBjYW4gYWRkIG90aGVyIGtpbmRzIG9mIGh5ZHJhdGlvblxuICAgICAgICAvLyBib3VuZGFyaWVzIHRoYXQgYXJlbid0IGFzc29jaWF0ZWQgd2l0aCBhIFN1c3BlbnNlIHRyZWUuIEluIGFudGljaXBhdGlvblxuICAgICAgICAvLyBvZiBzdWNoIGEgcmVmYWN0b3IsIGFsbCB0aGUgaHlkcmF0aW9uIGxvZ2ljIGlzIGNvbnRhaW5lZCBpblxuICAgICAgICAvLyB0aGlzIGJyYW5jaC5cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgZmFsbHRocm91Z2hUb05vcm1hbFN1c3BlbnNlUGF0aCA9IGNvbXBsZXRlRGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRTdGF0ZSk7XG5cbiAgICAgICAgICBpZiAoIWZhbGx0aHJvdWdoVG9Ob3JtYWxTdXNwZW5zZVBhdGgpIHtcbiAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlLiBUaGVyZSB3ZXJlIHJlbWFpbmluZyB1bmh5ZHJhdGVkIG5vZGVzLiBXZSB0cmVhdFxuICAgICAgICAgICAgICAvLyB0aGlzIGFzIGEgbWlzbWF0Y2guIFJldmVydCB0byBjbGllbnQgcmVuZGVyaW5nLlxuICAgICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBEaWQgbm90IGZpbmlzaCBoeWRyYXRpbmcsIGVpdGhlciBiZWNhdXNlIHRoaXMgaXMgdGhlIGluaXRpYWxcbiAgICAgICAgICAgICAgLy8gcmVuZGVyIG9yIGJlY2F1c2Ugc29tZXRoaW5nIHN1c3BlbmRlZC5cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBDb250aW51ZSB3aXRoIHRoZSBub3JtYWwgU3VzcGVuc2UgcGF0aC5cblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIHN1c3BlbmRlZC4gUmUtcmVuZGVyIHdpdGggdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7IC8vIERvIG5vdCByZXNldCB0aGUgZWZmZWN0IGxpc3QuXG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gLy8gRG9uJ3QgYnViYmxlIHByb3BlcnRpZXMgaW4gdGhpcyBjYXNlLlxuXG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV4dERpZFRpbWVvdXQgPSBuZXh0U3RhdGUgIT09IG51bGw7XG4gICAgICAgIHZhciBwcmV2RGlkVGltZW91dCA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuICAgICAgICAvLyBhIHBhc3NpdmUgZWZmZWN0LCB3aGljaCBpcyB3aGVuIHdlIHByb2Nlc3MgdGhlIHRyYW5zaXRpb25zXG5cblxuICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgIT09IHByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgLy8gYW4gZWZmZWN0IHRvIHRvZ2dsZSB0aGUgc3VidHJlZSdzIHZpc2liaWxpdHkuIFdoZW4gd2Ugc3dpdGNoIGZyb21cbiAgICAgICAgICAvLyBmYWxsYmFjayAtPiBwcmltYXJ5LCB0aGUgaW5uZXIgT2Zmc2NyZWVuIGZpYmVyIHNjaGVkdWxlcyB0aGlzIGVmZmVjdFxuICAgICAgICAgIC8vIGFzIHBhcnQgb2YgaXRzIG5vcm1hbCBjb21wbGV0ZSBwaGFzZS4gQnV0IHdoZW4gd2Ugc3dpdGNoIGZyb21cbiAgICAgICAgICAvLyBwcmltYXJ5IC0+IGZhbGxiYWNrLCB0aGUgaW5uZXIgT2Zmc2NyZWVuIGZpYmVyIGRvZXMgbm90IGhhdmUgYSBjb21wbGV0ZVxuICAgICAgICAgIC8vIHBoYXNlLiBTbyB3ZSBuZWVkIHRvIHNjaGVkdWxlIGl0cyBlZmZlY3QgaGVyZS5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFdlIGFsc28gdXNlIHRoaXMgZmxhZyB0byBjb25uZWN0L2Rpc2Nvbm5lY3QgdGhlIGVmZmVjdHMsIGJ1dCB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxvZ2ljIGFwcGxpZXM6IHdoZW4gcmUtY29ubmVjdGluZywgdGhlIE9mZnNjcmVlbiBmaWJlcidzIGNvbXBsZXRlXG4gICAgICAgICAgLy8gcGhhc2Ugd2lsbCBoYW5kbGUgc2NoZWR1bGluZyB0aGUgZWZmZWN0LiBJdCdzIG9ubHkgd2hlbiB0aGUgZmFsbGJhY2tcbiAgICAgICAgICAvLyBpcyBhY3RpdmUgdGhhdCB3ZSBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuXG5cblxuICAgICAgICAgIGlmIChuZXh0RGlkVGltZW91dCkge1xuICAgICAgICAgICAgdmFyIF9vZmZzY3JlZW5GaWJlcjIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIF9vZmZzY3JlZW5GaWJlcjIuZmxhZ3MgfD0gVmlzaWJpbGl0eTsgLy8gVE9ETzogVGhpcyB3aWxsIHN0aWxsIHN1c3BlbmQgYSBzeW5jaHJvbm91cyB0cmVlIGlmIGFueXRoaW5nXG4gICAgICAgICAgICAvLyBpbiB0aGUgY29uY3VycmVudCB0cmVlIGFscmVhZHkgc3VzcGVuZGVkIGR1cmluZyB0aGlzIHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBrbm93biBidWcuXG5cbiAgICAgICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBiYWNrIHRvIHRocm93RXhjZXB0aW9uIGJlY2F1c2UgdGhpcyBpcyB0b28gbGF0ZVxuICAgICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgbGFyZ2UgdHJlZSB3aGljaCBpcyBjb21tb24gZm9yIGluaXRpYWwgbG9hZHMuIFdlXG4gICAgICAgICAgICAgIC8vIGRvbid0IGtub3cgaWYgd2Ugc2hvdWxkIHJlc3RhcnQgYSByZW5kZXIgb3Igbm90IHVudGlsIHdlIGdldFxuICAgICAgICAgICAgICAvLyB0aGlzIG1hcmtlciwgYW5kIHRoaXMgaXMgdG9vIGxhdGUuXG4gICAgICAgICAgICAgIC8vIElmIHRoaXMgcmVuZGVyIGFscmVhZHkgaGFkIGEgcGluZyBvciBsb3dlciBwcmkgdXBkYXRlcyxcbiAgICAgICAgICAgICAgLy8gYW5kIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2Uga25vdyB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdlXG4gICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGltbWVkaWF0ZWx5IHJlc3RhcnQgZnJvbSB3aXRoaW4gdGhyb3dFeGNlcHRpb24uXG4gICAgICAgICAgICAgIHZhciBoYXNJbnZpc2libGVDaGlsZENvbnRleHQgPSBjdXJyZW50ID09PSBudWxsICYmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlIHx8ICFlbmFibGVTdXNwZW5zZUF2b2lkVGhpc0ZhbGxiYWNrKTtcblxuICAgICAgICAgICAgICBpZiAoaGFzSW52aXNpYmxlQ2hpbGRDb250ZXh0IHx8IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBpbiBhbiBpbnZpc2libGUgdHJlZSBvciBhIG5ldyByZW5kZXIsIHRoZW4gc2hvd2luZ1xuICAgICAgICAgICAgICAgIC8vIHRoaXMgYm91bmRhcnkgaXMgb2suXG4gICAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZCgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBoaWRlIGNvbnRlbnQgc28gd2Ugc2hvdWxkXG4gICAgICAgICAgICAgICAgLy8gc3VzcGVuZCBmb3IgbG9uZ2VyIGlmIHBvc3NpYmxlLlxuICAgICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3YWtlYWJsZXMgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAod2FrZWFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIGF0dGFjaCBhIHJldHJ5IGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlLlxuICAgICAgICAgIC8vIFRPRE86IE1vdmUgdG8gcGFzc2l2ZSBwaGFzZVxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0KSB7XG4gICAgICAgICAgICAgIC8vIERvbid0IGNvdW50IHRpbWUgc3BlbnQgaW4gYSB0aW1lZCBvdXQgU3VzcGVuc2Ugc3VidHJlZSBhcyBwYXJ0IG9mIHRoZSBiYXNlIGR1cmF0aW9uLlxuICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICAgICAgICBpZiAocHJpbWFyeUNoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBzdXBwb3J0IHR5cGUgY2FzdGluZyBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSAtPSBvcGVyYXRvclxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gLT0gcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcHJlcGFyZVBvcnRhbE1vdW50KHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgIH1cblxuICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgLy8gUG9wIHByb3ZpZGVyIGZpYmVyXG4gICAgICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQ7XG4gICAgICBwb3BQcm92aWRlcihjb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFNhbWUgYXMgY2xhc3MgY29tcG9uZW50IGNhc2UuIEkgcHV0IGl0IGRvd24gaGVyZSBzbyB0aGF0IHRoZSB0YWdzIGFyZVxuICAgICAgICAvLyBzZXF1ZW50aWFsIHRvIGVuc3VyZSB0aGlzIHN3aXRjaCBpcyBjb21waWxlZCB0byBhIGp1bXAgdGFibGUuXG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoX0NvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgIGlmIChyZW5kZXJTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgaW4gdGhlIGRlZmF1bHQsIFwiaW5kZXBlbmRlbnRcIiBtb2RlLlxuICAgICAgICAgIC8vIFdlIGRvbid0IGRvIGFueXRoaW5nIGluIHRoaXMgbW9kZS5cbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBkaWRTdXNwZW5kQWxyZWFkeSA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuICAgICAgICB2YXIgcmVuZGVyZWRUYWlsID0gcmVuZGVyU3RhdGUucmVuZGVyaW5nO1xuXG4gICAgICAgIGlmIChyZW5kZXJlZFRhaWwgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBqdXN0IHJlbmRlcmVkIHRoZSBoZWFkLlxuICAgICAgICAgIGlmICghZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHBhc3MuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiBhbnl0aGluZyBpcyBzdGlsbFxuICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGluIHRoZSByZW5kZXJlZCBzZXQuXG4gICAgICAgICAgICAvLyBJZiBuZXcgY29udGVudCB1bnN1c3BlbmRlZCwgYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSBjb250ZW50IHRoYXRcbiAgICAgICAgICAgIC8vIGRpZG4ndC4gVGhlbiB3ZSBuZWVkIHRvIGRvIGEgc2Vjb25kIHBhc3MgdGhhdCBmb3JjZXMgZXZlcnl0aGluZ1xuICAgICAgICAgICAgLy8gdG8ga2VlcCBzaG93aW5nIHRoZWlyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJlIHN1c3BlbmRlZCBpZiBzb21ldGhpbmcgaW4gdGhpcyByZW5kZXIgcGFzcyBzdXNwZW5kZWQsIG9yXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgaW4gdGhlIHByZXZpb3VzIGNvbW1pdHRlZCBwYXNzIHN1c3BlbmRlZC4gT3RoZXJ3aXNlLFxuICAgICAgICAgICAgLy8gdGhlcmUncyBubyBjaGFuY2Ugc28gd2UgY2FuIHNraXAgdGhlIGV4cGVuc2l2ZSBjYWxsIHRvXG4gICAgICAgICAgICAvLyBmaW5kRmlyc3RTdXNwZW5kZWQuXG4gICAgICAgICAgICB2YXIgY2Fubm90QmVTdXNwZW5kZWQgPSByZW5kZXJIYXNOb3RTdXNwZW5kZWRZZXQoKSAmJiAoY3VycmVudCA9PT0gbnVsbCB8fCAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKTtcblxuICAgICAgICAgICAgaWYgKCFjYW5ub3RCZVN1c3BlbmRlZCkge1xuICAgICAgICAgICAgICB2YXIgcm93ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICAgICAgICAgICAgd2hpbGUgKHJvdyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBzdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocm93KTtcblxuICAgICAgICAgICAgICAgIGlmIChzdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gSWYgdGhpcyBpcyBhIG5ld2x5IHN1c3BlbmRlZCB0cmVlLCBpdCBtaWdodCBub3QgZ2V0IGNvbW1pdHRlZCBhc1xuICAgICAgICAgICAgICAgICAgLy8gcGFydCBvZiB0aGUgc2Vjb25kIHBhc3MuIEluIHRoYXQgY2FzZSBub3RoaW5nIHdpbGwgc3Vic2NyaWJlIHRvXG4gICAgICAgICAgICAgICAgICAvLyBpdHMgdGhlbmFibGVzLiBJbnN0ZWFkLCB3ZSdsbCB0cmFuc2ZlciBpdHMgdGhlbmFibGVzIHRvIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gU3VzcGVuc2VMaXN0IHNvIHRoYXQgaXQgY2FuIHJldHJ5IGlmIHRoZXkgcmVzb2x2ZS5cbiAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIG9mIHRoZXNlIGluIHRoZSBsaXN0IGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgICAgICAgICAgICAgLy8gZ29pbmcgdG8gd2FpdCBmb3IgYWxsIG9mIHRoZW0gYW55d2F5LCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXJcbiAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIG9uZXMgZ2V0cyB0byBwaW5nLiBJbiB0aGVvcnkgd2UgY291bGQgZ2V0IGNsZXZlciBhbmQga2VlcFxuICAgICAgICAgICAgICAgICAgLy8gdHJhY2sgb2YgaG93IG1hbnkgZGVwZW5kZW5jaWVzIHJlbWFpbiBidXQgaXQgZ2V0cyB0cmlja3kgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIG1lYW50aW1lLCB3ZSBjYW4gYWRkL3JlbW92ZS9jaGFuZ2UgaXRlbXMgYW5kIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJhaWwgb3V0IG9mIHRoZSBsb29wIGJlZm9yZSBmaW5kaW5nIGFueSBidXQgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gZG9lc24ndCBtYXR0ZXIgc2luY2UgdGhhdCBtZWFucyB0aGF0IHRoZSBvdGhlciBib3VuZGFyaWVzIHRoYXRcbiAgICAgICAgICAgICAgICAgIC8vIHdlIGRpZCBmaW5kIGFscmVhZHkgaGFzIHRoZWlyIGxpc3RlbmVycyBhdHRhY2hlZC5cblxuICAgICAgICAgICAgICAgICAgdmFyIG5ld1RoZW5hYmxlcyA9IHN1c3BlbmRlZC51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgaWYgKG5ld1RoZW5hYmxlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG5ld1RoZW5hYmxlcztcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICAgICAgfSAvLyBSZXJlbmRlciB0aGUgd2hvbGUgbGlzdCwgYnV0IHRoaXMgdGltZSwgd2UnbGwgZm9yY2UgZmFsbGJhY2tzXG4gICAgICAgICAgICAgICAgICAvLyB0byBzdGF5IGluIHBsYWNlLlxuICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVmZmVjdCBmbGFncyBiZWZvcmUgZG9pbmcgdGhlIHNlY29uZCBwYXNzIHNpbmNlIHRoYXQncyBub3cgaW52YWxpZC5cbiAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBjaGlsZCBmaWJlcnMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuXG5cblxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gTm9GbGFncztcbiAgICAgICAgICAgICAgICAgIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTsgLy8gU2V0IHVwIHRoZSBTdXNwZW5zZSBDb250ZXh0IHRvIGZvcmNlIHN1c3BlbnNlIGFuZCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgLy8gcmVyZW5kZXIgdGhlIGNoaWxkcmVuLlxuXG4gICAgICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSk7IC8vIERvbid0IGJ1YmJsZSBwcm9wZXJ0aWVzIGluIHRoaXMgY2FzZS5cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsICYmIG5vdygpID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBwYXNzZWQgb3VyIENQVSBkZWFkbGluZSBidXQgd2Ugc3RpbGwgaGF2ZSByb3dzXG4gICAgICAgICAgICAgIC8vIGxlZnQgaW4gdGhlIHRhaWwuIFdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyIGF0dGVtcHRzIHRvIHJlbmRlclxuICAgICAgICAgICAgICAvLyB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpO1xuICAgICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBnb2luZyB0byByZW5kZXIgdGhlIHRhaWwuXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBcHBlbmQgdGhlIHJlbmRlcmVkIHJvdyB0byB0aGUgY2hpbGQgbGlzdC5cbiAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICB2YXIgX3N1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyZW5kZXJlZFRhaWwpO1xuXG4gICAgICAgICAgICBpZiAoX3N1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7IC8vIEVuc3VyZSB3ZSB0cmFuc2ZlciB0aGUgdXBkYXRlIHF1ZXVlIHRvIHRoZSBwYXJlbnQgc28gdGhhdCBpdCBkb2Vzbid0XG4gICAgICAgICAgICAgIC8vIGdldCBsb3N0IGlmIHRoaXMgcm93IGVuZHMgdXAgZHJvcHBlZCBkdXJpbmcgYSBzZWNvbmQgcGFzcy5cblxuICAgICAgICAgICAgICB2YXIgX25ld1RoZW5hYmxlcyA9IF9zdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgaWYgKF9uZXdUaGVuYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IF9uZXdUaGVuYWJsZXM7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCB0cnVlKTsgLy8gVGhpcyBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cbiAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgPT09IG51bGwgJiYgcmVuZGVyU3RhdGUudGFpbE1vZGUgPT09ICdoaWRkZW4nICYmICFyZW5kZXJlZFRhaWwuYWx0ZXJuYXRlICYmICFnZXRJc0h5ZHJhdGluZygpIC8vIFdlIGRvbid0IGN1dCBpdCBpZiB3ZSdyZSBoeWRyYXRpbmcuXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgLy8gV2UncmUgZG9uZS5cbiAgICAgICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICggLy8gVGhlIHRpbWUgaXQgdG9vayB0byByZW5kZXIgbGFzdCByb3cgaXMgZ3JlYXRlciB0aGFuIHRoZSByZW1haW5pbmdcbiAgICAgICAgICAgIC8vIHRpbWUgd2UgaGF2ZSB0byByZW5kZXIuIFNvIHJlbmRlcmluZyBvbmUgbW9yZSByb3cgd291bGQgbGlrZWx5XG4gICAgICAgICAgICAvLyBleGNlZWQgaXQuXG4gICAgICAgICAgICBub3coKSAqIDIgLSByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkgJiYgcmVuZGVyTGFuZXMgIT09IE9mZnNjcmVlbkxhbmUpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBub3cgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYW5kIHdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyXG4gICAgICAgICAgICAgIC8vIGF0dGVtcHRzIHRvIHJlbmRlciB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIC8vIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB1c3VhbGx5IGZhc3Rlci5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXNcbiAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgIC8vIG9mIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlcixcbiAgICAgICAgICAgICAgLy8gaXQncyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzXG4gICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgIC8vIHBhaW50ZWQuIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy5cbiAgICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSBhbnkgUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIC8vIFRoZSBlZmZlY3QgbGlzdCBvZiB0aGUgYmFja3dhcmRzIHRhaWwgd2lsbCBoYXZlIGJlZW4gYWRkZWRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBlbmQuIFRoaXMgYnJlYWtzIHRoZSBndWFyYW50ZWUgdGhhdCBsaWZlLWN5Y2xlcyBmaXJlIGluXG4gICAgICAgICAgICAvLyBzaWJsaW5nIG9yZGVyIGJ1dCB0aGF0IGlzbid0IGEgc3Ryb25nIGd1YXJhbnRlZSBwcm9taXNlZCBieSBSZWFjdC5cbiAgICAgICAgICAgIC8vIEVzcGVjaWFsbHkgc2luY2UgdGhlc2UgbWlnaHQgYWxzbyBqdXN0IHBvcCBpbiBkdXJpbmcgZnV0dXJlIGNvbW1pdHMuXG4gICAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC5cbiAgICAgICAgICAgIHJlbmRlcmVkVGFpbC5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZpb3VzU2libGluZyA9IHJlbmRlclN0YXRlLmxhc3Q7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nLnNpYmxpbmcgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgdGFpbCByb3dzIHRvIHJlbmRlci5cbiAgICAgICAgICAvLyBQb3AgYSByb3cuXG4gICAgICAgICAgdmFyIG5leHQgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG5leHQ7XG4gICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG5leHQuc2libGluZztcbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSBub3coKTtcbiAgICAgICAgICBuZXh0LnNpYmxpbmcgPSBudWxsOyAvLyBSZXN0b3JlIHRoZSBjb250ZXh0LlxuICAgICAgICAgIC8vIFRPRE86IFdlIGNhbiBwcm9iYWJseSBqdXN0IGF2b2lkIHBvcHBpbmcgaXQgaW5zdGVhZCBhbmQgb25seVxuICAgICAgICAgIC8vIHNldHRpbmcgaXQgdGhlIGZpcnN0IHRpbWUgd2UgZ28gZnJvbSBub3Qgc3VzcGVuZGVkIHRvIHN1c3BlbmRlZC5cblxuICAgICAgICAgIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG5cbiAgICAgICAgICBpZiAoZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7IC8vIERvIGEgcGFzcyBvdmVyIHRoZSBuZXh0IHJvdy5cbiAgICAgICAgICAvLyBEb24ndCBidWJibGUgcHJvcGVydGllcyBpbiB0aGlzIGNhc2UuXG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgX25leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHZhciBuZXh0SXNIaWRkZW4gPSBfbmV4dFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9wcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIHByZXZJc0hpZGRlbiA9IF9wcmV2U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAocHJldklzSGlkZGVuICE9PSBuZXh0SXNIaWRkZW4gJiYgKCAvLyBMZWdhY3lIaWRkZW4gZG9lc24ndCBkbyBhbnkgaGlkaW5nIOKAlCBpdCBvbmx5IHByZS1yZW5kZXJzLlxuICAgICAgICAgICFlbmFibGVMZWdhY3lIaWRkZW4gKSkge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVmlzaWJpbGl0eTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5leHRJc0hpZGRlbiB8fCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHByb3BlcnRpZXMgZm9yIGhpZGRlbiBjaGlsZHJlbiB1bmxlc3Mgd2UncmUgcmVuZGVyaW5nXG4gICAgICAgICAgLy8gYXQgb2Zmc2NyZWVuIHByaW9yaXR5LlxuICAgICAgICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKHN1YnRyZWVSZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkpIHtcbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBpbnNlcnRpb24gb3IgdXBkYXRlIGluIHRoZSBoaWRkZW4gc3VidHJlZS5cbiAgICAgICAgICAgICAgLy8gSWYgc28sIHdlIG5lZWQgdG8gaGlkZSB0aG9zZSBub2RlcyBpbiB0aGUgY29tbWl0IHBoYXNlLCBzb1xuICAgICAgICAgICAgICAvLyBzY2hlZHVsZSBhIHZpc2liaWxpdHkgZWZmZWN0LlxuICAgICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyAmIChQbGFjZW1lbnQgfCBVcGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVmlzaWJpbGl0eTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2FjaGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFRyYWNpbmdNYXJrZXJDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gXCIgKyAnUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xufVxuXG5mdW5jdGlvbiB1bndpbmRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAvLyBOb3RlOiBUaGlzIGludGVudGlvbmFsbHkgZG9lc24ndCBjaGVjayBpZiB3ZSdyZSBoeWRyYXRpbmcgYmVjYXVzZSBjb21wYXJpbmdcbiAgLy8gdG8gdGhlIGN1cnJlbnQgdHJlZSBwcm92aWRlciBmaWJlciBpcyBqdXN0IGFzIGZhc3QgYW5kIGxlc3MgZXJyb3ItcHJvbmUuXG4gIC8vIElkZWFsbHkgd2Ugd291bGQgaGF2ZSBhIHNwZWNpYWwgdmVyc2lvbiBvZiB0aGUgd29yayBsb29wIG9ubHlcbiAgLy8gZm9yIGh5ZHJhdGlvbi5cbiAgcG9wVHJlZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIENvbXBvbmVudCA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG5cbiAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBmbGFncyA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFNob3VsZENhcHR1cmUpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuXG4gICAgICAgICAgaWYgKCAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIHZhciBfZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoKF9mbGFncyAmIFNob3VsZENhcHR1cmUpICE9PSBOb0ZsYWdzICYmIChfZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncykge1xuICAgICAgICAgIC8vIFRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgcmVuZGVyIHRoYXQgd2Fzbid0IGNhcHR1cmVkIGJ5IGEgc3VzcGVuc2VcbiAgICAgICAgICAvLyBib3VuZGFyeS4gRG8gYSBzZWNvbmQgcGFzcyBvbiB0aGUgcm9vdCB0byB1bm1vdW50IHRoZSBjaGlsZHJlbi5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IF9mbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIH0gLy8gV2UgdW53b3VuZCB0byB0aGUgcm9vdCB3aXRob3V0IGNvbXBsZXRpbmcgaXQuIEV4aXQuXG5cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogcG9wSHlkcmF0aW9uU3RhdGVcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCAmJiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RocmV3IGluIG5ld2x5IG1vdW50ZWQgZGVoeWRyYXRlZCBjb21wb25lbnQuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluICcgKyAnUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfZmxhZ3MyID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKF9mbGFnczIgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBfZmxhZ3MyICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlOyAvLyBDYXB0dXJlZCBhIHN1c3BlbnNlIGVmZmVjdC4gUmUtcmVuZGVyIHRoZSBib3VuZGFyeS5cblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTsgLy8gU3VzcGVuc2VMaXN0IGRvZXNuJ3QgYWN0dWFsbHkgY2F0Y2ggYW55dGhpbmcuIEl0IHNob3VsZCd2ZSBiZWVuXG4gICAgICAgIC8vIGNhdWdodCBieSBhIG5lc3RlZCBib3VuZGFyeS4gSWYgbm90LCBpdCBzaG91bGQgYnViYmxlIHRocm91Z2guXG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGUuX2NvbnRleHQ7XG4gICAgICBwb3BQcm92aWRlcihjb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENhY2hlQ29tcG9uZW50OlxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoY3VycmVudCwgaW50ZXJydXB0ZWRXb3JrLCByZW5kZXJMYW5lcykge1xuICAvLyBOb3RlOiBUaGlzIGludGVudGlvbmFsbHkgZG9lc24ndCBjaGVjayBpZiB3ZSdyZSBoeWRyYXRpbmcgYmVjYXVzZSBjb21wYXJpbmdcbiAgLy8gdG8gdGhlIGN1cnJlbnQgdHJlZSBwcm92aWRlciBmaWJlciBpcyBqdXN0IGFzIGZhc3QgYW5kIGxlc3MgZXJyb3ItcHJvbmUuXG4gIC8vIElkZWFsbHkgd2Ugd291bGQgaGF2ZSBhIHNwZWNpYWwgdmVyc2lvbiBvZiB0aGUgd29yayBsb29wIG9ubHlcbiAgLy8gZm9yIGh5ZHJhdGlvbi5cbiAgcG9wVHJlZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcblxuICBzd2l0Y2ggKGludGVycnVwdGVkV29yay50YWcpIHtcbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSBpbnRlcnJ1cHRlZFdvcmsudHlwZS5jaGlsZENvbnRleHRUeXBlcztcblxuICAgICAgICBpZiAoY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBvcENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHJvb3QgPSBpbnRlcnJ1cHRlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgdmFyIGNvbnRleHQgPSBpbnRlcnJ1cHRlZFdvcmsudHlwZS5fY29udGV4dDtcbiAgICAgIHBvcFByb3ZpZGVyKGNvbnRleHQsIGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcG9wUmVuZGVyTGFuZXMoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG5cbntcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG59IC8vIFVzZWQgZHVyaW5nIHRoZSBjb21taXQgcGhhc2UgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHN0YWNrLlxuLy8gQWxsb3dzIHVzIHRvIGF2b2lkIHRyYXZlcnNpbmcgdGhlIHJldHVybiBwYXRoIHRvIGZpbmQgdGhlIG5lYXJlc3QgT2Zmc2NyZWVuIGFuY2VzdG9yLlxuLy8gT25seSB1c2VkIHdoZW4gZW5hYmxlU3VzcGVuc2VMYXlvdXRFZmZlY3RTZW1hbnRpY3MgaXMgZW5hYmxlZC5cblxuXG52YXIgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gZmFsc2U7XG52YXIgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IGZhbHNlO1xudmFyIFBvc3NpYmx5V2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nID8gV2Vha1NldCA6IFNldDtcbnZhciBuZXh0RWZmZWN0ID0gbnVsbDsgLy8gVXNlZCBmb3IgUHJvZmlsaW5nIGJ1aWxkcyB0byB0cmFjayB1cGRhdGVycy5cblxudmFyIGluUHJvZ3Jlc3NMYW5lcyA9IG51bGw7XG52YXIgaW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuZnVuY3Rpb24gcmVwb3J0VW5jYXVnaHRFcnJvckluREVWKGVycm9yKSB7XG4gIC8vIFdyYXBwaW5nIGVhY2ggc21hbGwgcGFydCBvZiB0aGUgY29tbWl0IHBoYXNlIGludG8gYSBndWFyZGVkXG4gIC8vIGNhbGxiYWNrIGlzIGEgYml0IHRvbyBzbG93IChodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMTY2NikuXG4gIC8vIEJ1dCB3ZSByZWx5IG9uIGl0IHRvIHN1cmZhY2UgZXJyb3JzIHRvIERFViB0b29scyBsaWtlIG92ZXJsYXlzXG4gIC8vIChodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzIxNzEyKS5cbiAgLy8gQXMgYSBjb21wcm9taXNlLCByZXRocm93IG9ubHkgY2F1Z2h0IGVycm9ycyBpbiBhIGd1YXJkLlxuICB7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICAgIGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgfVxufVxuXG52YXIgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyID0gZnVuY3Rpb24gKGN1cnJlbnQsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAoIGN1cnJlbnQubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGN1cnJlbnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICB9XG59OyAvLyBDYXB0dXJlIGVycm9ycyBzbyB0aGV5IGRvbid0IGludGVycnVwdCBtb3VudGluZy5cblxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsQ29tbWl0SG9va0xheW91dEVmZmVjdExpc3RNb3VudChjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKSB7XG4gIHRyeSB7XG4gICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChMYXlvdXQsIGN1cnJlbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgfVxufSAvLyBDYXB0dXJlIGVycm9ycyBzbyB0aGV5IGRvbid0IGludGVycnVwdCB1bm1vdW50aW5nLlxuXG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBpbnN0YW5jZSkge1xuICB0cnkge1xuICAgIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lcihjdXJyZW50LCBpbnN0YW5jZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICB9XG59IC8vIENhcHR1cmUgZXJyb3JzIHNvIHRoZXkgZG9uJ3QgaW50ZXJydXB0IG1vdW50aW5nLlxuXG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxDb21wb25lbnREaWRNb3VudChjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBpbnN0YW5jZSkge1xuICB0cnkge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICB9XG59IC8vIENhcHR1cmUgZXJyb3JzIHNvIHRoZXkgZG9uJ3QgaW50ZXJydXB0IG1vdW50aW5nLlxuXG5cbmZ1bmN0aW9uIHNhZmVseUF0dGFjaFJlZihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKSB7XG4gIHRyeSB7XG4gICAgY29tbWl0QXR0YWNoUmVmKGN1cnJlbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcikge1xuICB2YXIgcmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgcmV0VmFsO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lciAmJiBlbmFibGVQcm9maWxlckNvbW1pdEhvb2tzICYmIGN1cnJlbnQubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgICAgICAgIHJldFZhbCA9IHJlZihudWxsKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oY3VycmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldFZhbCA9IHJlZihudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0VmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIGZyb20gYSBjYWxsYmFjayByZWYgaW4gJXMuICcgKyAnQSBjYWxsYmFjayByZWYgc2hvdWxkIG5vdCByZXR1cm4gYSBmdW5jdGlvbi4nLCBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGN1cnJlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseUNhbGxEZXN0cm95KGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGRlc3Ryb3kpIHtcbiAgdHJ5IHtcbiAgICBkZXN0cm95KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICB9XG59XG5cbnZhciBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xudmFyIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpcnN0Q2hpbGQpIHtcbiAgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gcHJlcGFyZUZvckNvbW1pdChyb290LmNvbnRhaW5lckluZm8pO1xuICBuZXh0RWZmZWN0ID0gZmlyc3RDaGlsZDtcbiAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzX2JlZ2luKCk7IC8vIFdlIG5vIGxvbmdlciBuZWVkIHRvIHRyYWNrIHRoZSBhY3RpdmUgaW5zdGFuY2UgZmliZXJcblxuICB2YXIgc2hvdWxkRmlyZSA9IHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1cjtcbiAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG4gIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG4gIHJldHVybiBzaG91bGRGaXJlO1xufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHNfYmVnaW4oKSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpYmVyID0gbmV4dEVmZmVjdDsgLy8gVGhpcyBwaGFzZSBpcyBvbmx5IHVzZWQgZm9yIGJlZm9yZUFjdGl2ZUluc3RhbmNlQmx1ci5cblxuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gICAgaWYgKChmaWJlci5zdWJ0cmVlRmxhZ3MgJiBCZWZvcmVNdXRhdGlvbk1hc2spICE9PSBOb0ZsYWdzICYmIGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBjaGlsZC5yZXR1cm4gPSBmaWJlcjtcbiAgICAgIG5leHRFZmZlY3QgPSBjaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzX2NvbXBsZXRlKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0c19jb21wbGV0ZSgpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0O1xuICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICB0cnkge1xuICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzT25GaWJlcihmaWJlcik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpYmVyLCBmaWJlci5yZXR1cm4sIGVycm9yKTtcbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIHZhciBzaWJsaW5nID0gZmliZXIuc2libGluZztcblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBzaWJsaW5nLnJldHVybiA9IGZpYmVyLnJldHVybjtcbiAgICAgIG5leHRFZmZlY3QgPSBzaWJsaW5nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5leHRFZmZlY3QgPSBmaWJlci5yZXR1cm47XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFdvcmspIHtcbiAgdmFyIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlO1xuICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG5cbiAgaWYgKChmbGFncyAmIFNuYXBzaG90KSAhPT0gTm9GbGFncykge1xuICAgIHNldEN1cnJlbnRGaWJlcihmaW5pc2hlZFdvcmspO1xuXG4gICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHNuYXBzaG90ID0gaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IHByZXZQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIHByZXZQcm9wcyksIHByZXZTdGF0ZSk7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGRpZFdhcm5TZXQgPSBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcblxuICAgICAgICAgICAgICBpZiAoc25hcHNob3QgPT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblNldC5oYXMoZmluaXNoZWRXb3JrLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgZGlkV2FyblNldC5hZGQoZmluaXNoZWRXb3JrLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgZXJyb3IoJyVzLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCk6IEEgc25hcHNob3QgdmFsdWUgKG9yIG51bGwpICcgKyAnbXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUgPSBzbmFwc2hvdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gZm9yIHRoZXNlIGNvbXBvbmVudCB0eXBlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgJyArICdsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KGZsYWdzLCBmaW5pc2hlZFdvcmssIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgZmxhZ3MpID09PSBmbGFncykge1xuICAgICAgICAvLyBVbm1vdW50XG4gICAgICAgIHZhciBkZXN0cm95ID0gZWZmZWN0LmRlc3Ryb3k7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoKGZsYWdzICYgUGFzc2l2ZSQxKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAgIG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0YXJ0ZWQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGZsYWdzICYgTGF5b3V0KSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgICAgc2V0SXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KGZpbmlzaGVkV29yaywgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZGVzdHJveSk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoKGZsYWdzICYgSW5zZXJ0aW9uKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAgIHNldElzUnVubmluZ0luc2VydGlvbkVmZmVjdChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKChmbGFncyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgICBtYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdG9wcGVkKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChmbGFncyAmIExheW91dCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgICBtYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0b3BwZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChmbGFncywgZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIGlmICgoZWZmZWN0LnRhZyAmIGZsYWdzKSA9PT0gZmxhZ3MpIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICgoZmxhZ3MgJiBQYXNzaXZlJDEpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgIG1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0TW91bnRTdGFydGVkKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfSBlbHNlIGlmICgoZmxhZ3MgJiBMYXlvdXQpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0YXJ0ZWQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gTW91bnRcblxuXG4gICAgICAgIHZhciBjcmVhdGUgPSBlZmZlY3QuY3JlYXRlO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoKGZsYWdzICYgSW5zZXJ0aW9uKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICBzZXRJc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUoKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKChmbGFncyAmIEluc2VydGlvbikgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgc2V0SXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKChmbGFncyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgbWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKChmbGFncyAmIExheW91dCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgbWFya0NvbXBvbmVudExheW91dEVmZmVjdE1vdW50U3RvcHBlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZGVzdHJveSA9IGVmZmVjdC5kZXN0cm95O1xuXG4gICAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZGVzdHJveSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGhvb2tOYW1lID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoKGVmZmVjdC50YWcgJiBMYXlvdXQpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgICAgIGhvb2tOYW1lID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChlZmZlY3QudGFnICYgSW5zZXJ0aW9uKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgICAgICBob29rTmFtZSA9ICd1c2VJbnNlcnRpb25FZmZlY3QnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaG9va05hbWUgPSAndXNlRWZmZWN0JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGFkZGVuZHVtID0gdm9pZCAwO1xuXG4gICAgICAgICAgICBpZiAoZGVzdHJveSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkIG51bGwuIElmIHlvdXIgZWZmZWN0IGRvZXMgbm90IHJlcXVpcmUgY2xlYW4gJyArICd1cCwgcmV0dXJuIHVuZGVmaW5lZCAob3Igbm90aGluZykuJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc3Ryb3kudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICdcXG5cXG5JdCBsb29rcyBsaWtlIHlvdSB3cm90ZSAnICsgaG9va05hbWUgKyAnKGFzeW5jICgpID0+IC4uLikgb3IgcmV0dXJuZWQgYSBQcm9taXNlLiAnICsgJ0luc3RlYWQsIHdyaXRlIHRoZSBhc3luYyBmdW5jdGlvbiBpbnNpZGUgeW91ciBlZmZlY3QgJyArICdhbmQgY2FsbCBpdCBpbW1lZGlhdGVseTpcXG5cXG4nICsgaG9va05hbWUgKyAnKCgpID0+IHtcXG4nICsgJyAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKCkge1xcbicgKyAnICAgIC8vIFlvdSBjYW4gYXdhaXQgaGVyZVxcbicgKyAnICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgTXlBUEkuZ2V0RGF0YShzb21lSWQpO1xcbicgKyAnICAgIC8vIC4uLlxcbicgKyAnICB9XFxuJyArICcgIGZldGNoRGF0YSgpO1xcbicgKyBcIn0sIFtzb21lSWRdKTsgLy8gT3IgW10gaWYgZWZmZWN0IGRvZXNuJ3QgbmVlZCBwcm9wcyBvciBzdGF0ZVxcblxcblwiICsgJ0xlYXJuIG1vcmUgYWJvdXQgZGF0YSBmZXRjaGluZyB3aXRoIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaG9va3MtZGF0YS1mZXRjaGluZyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRlbmR1bSA9ICcgWW91IHJldHVybmVkOiAnICsgZGVzdHJveTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IoJyVzIG11c3Qgbm90IHJldHVybiBhbnl0aGluZyBiZXNpZGVzIGEgZnVuY3Rpb24sICcgKyAnd2hpY2ggaXMgdXNlZCBmb3IgY2xlYW4tdXAuJXMnLCBob29rTmFtZSwgYWRkZW5kdW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQYXNzaXZlRWZmZWN0RHVyYXRpb25zKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG4gIHtcbiAgICAvLyBPbmx5IFByb2ZpbGVycyB3aXRoIHdvcmsgaW4gdGhlaXIgc3VidHJlZSB3aWxsIGhhdmUgYW4gVXBkYXRlIGVmZmVjdCBzY2hlZHVsZWQuXG4gICAgaWYgKChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBVcGRhdGUpICE9PSBOb0ZsYWdzKSB7XG4gICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgICAgaWQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUuaWQsXG4gICAgICAgICAgICAgICAgb25Qb3N0Q29tbWl0ID0gX2ZpbmlzaGVkV29yayRtZW1vaXplLm9uUG9zdENvbW1pdDsgLy8gVGhpcyB2YWx1ZSB3aWxsIHN0aWxsIHJlZmxlY3QgdGhlIHByZXZpb3VzIGNvbW1pdCBwaGFzZS5cbiAgICAgICAgICAgIC8vIEl0IGRvZXMgbm90IGdldCByZXNldCB1bnRpbCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgY29tbWl0IHBoYXNlLlxuXG4gICAgICAgICAgICB2YXIgY29tbWl0VGltZSA9IGdldENvbW1pdFRpbWUoKTtcbiAgICAgICAgICAgIHZhciBwaGFzZSA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUgPT09IG51bGwgPyAnbW91bnQnIDogJ3VwZGF0ZSc7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudFVwZGF0ZU5lc3RlZCgpKSB7XG4gICAgICAgICAgICAgICAgcGhhc2UgPSAnbmVzdGVkLXVwZGF0ZSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvblBvc3RDb21taXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgb25Qb3N0Q29tbWl0KGlkLCBwaGFzZSwgcGFzc2l2ZUVmZmVjdER1cmF0aW9uLCBjb21taXRUaW1lKTtcbiAgICAgICAgICAgIH0gLy8gQnViYmxlIHRpbWVzIHRvIHRoZSBuZXh0IG5lYXJlc3QgYW5jZXN0b3IgUHJvZmlsZXIuXG4gICAgICAgICAgICAvLyBBZnRlciB3ZSBwcm9jZXNzIHRoYXQgUHJvZmlsZXIsIHdlJ2xsIGJ1YmJsZSBmdXJ0aGVyIHVwLlxuXG5cbiAgICAgICAgICAgIHZhciBwYXJlbnRGaWJlciA9IGZpbmlzaGVkV29yay5yZXR1cm47XG5cbiAgICAgICAgICAgIG91dGVyOiB3aGlsZSAocGFyZW50RmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAgICAgICAgdmFyIHJvb3QgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICByb290LnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPSBwYXNzaXZlRWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgICAgICAgICBicmVhayBvdXRlcjtcblxuICAgICAgICAgICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAgICAgICAgICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgcGFyZW50U3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPSBwYXNzaXZlRWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgICAgICAgICBicmVhayBvdXRlcjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIucmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdExheW91dEVmZmVjdE9uRmliZXIoZmluaXNoZWRSb290LCBjdXJyZW50LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzKSB7XG4gIGlmICgoZmluaXNoZWRXb3JrLmZsYWdzICYgTGF5b3V0TWFzaykgIT09IE5vRmxhZ3MpIHtcbiAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoICFvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB7XG4gICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGxheW91dCBlZmZlY3RzIGhhdmUgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCAoZHVyaW5nIG11dGF0aW9uIHBoYXNlKS5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHNpYmxpbmcgY29tcG9uZW50IGVmZmVjdHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIsXG4gICAgICAgICAgICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IHNob3VsZCBuZXZlciBvdmVycmlkZSBhIHJlZiBzZXRcbiAgICAgICAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG4gICAgICAgICAgICBpZiAoIGZpbmlzaGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgICBpZiAoIW9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHtcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkTW91bnQuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZE1vdW50LiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCBmaW5pc2hlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJldlByb3BzID0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpbmlzaGVkV29yaykgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIGZpbmlzaGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TGF5b3V0RWZmZWN0VGltZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlLCBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSk7XG4gICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cblxuXG4gICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuXG4gICAgICAgICAgICBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIHVwZGF0ZVF1ZXVlLCBpbnN0YW5jZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFRPRE86IEkgdGhpbmsgdGhpcyBpcyBub3cgYWx3YXlzIG5vbi1udWxsIGJ5IHRoZSB0aW1lIGl0IHJlYWNoZXMgdGhlXG4gICAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cbiAgICAgICAgICB2YXIgX3VwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgaWYgKF91cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIF9pbnN0YW5jZSA9IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsuY2hpbGQudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICAgICAgX2luc3RhbmNlID0gZ2V0UHVibGljSW5zdGFuY2UoZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBfdXBkYXRlUXVldWUsIF9pbnN0YW5jZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBSZW5kZXJlcnMgbWF5IHNjaGVkdWxlIHdvcmsgdG8gYmUgZG9uZSBhZnRlciBob3N0IGNvbXBvbmVudHMgYXJlIG1vdW50ZWRcbiAgICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIG1heSBzY2hlZHVsZSBhdXRvLWZvY3VzIGZvciBpbnB1dHMgYW5kIGZvcm0gY29udHJvbHMpLlxuICAgICAgICAgIC8vIFRoZXNlIGVmZmVjdHMgc2hvdWxkIG9ubHkgYmUgY29tbWl0dGVkIHdoZW4gY29tcG9uZW50cyBhcmUgZmlyc3QgbW91bnRlZCxcbiAgICAgICAgICAvLyBha2Egd2hlbiB0aGVyZSBpcyBubyBjdXJyZW50L2FsdGVybmF0ZS5cblxuICAgICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsICYmIGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICAgIHZhciBwcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgY29tbWl0TW91bnQoX2luc3RhbmNlMiwgdHlwZSwgcHJvcHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSBoYXZlIG5vIGxpZmUtY3ljbGVzIGFzc29jaWF0ZWQgd2l0aCB0ZXh0LlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHBvcnRhbHMuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfZmluaXNoZWRXb3JrJG1lbW9pemUyID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgICAgb25Db21taXQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uQ29tbWl0LFxuICAgICAgICAgICAgICAgIG9uUmVuZGVyID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vblJlbmRlcjtcbiAgICAgICAgICAgIHZhciBlZmZlY3REdXJhdGlvbiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgICB2YXIgY29tbWl0VGltZSA9IGdldENvbW1pdFRpbWUoKTtcbiAgICAgICAgICAgIHZhciBwaGFzZSA9IGN1cnJlbnQgPT09IG51bGwgPyAnbW91bnQnIDogJ3VwZGF0ZSc7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGlzQ3VycmVudFVwZGF0ZU5lc3RlZCgpKSB7XG4gICAgICAgICAgICAgICAgcGhhc2UgPSAnbmVzdGVkLXVwZGF0ZSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvblJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBvblJlbmRlcihmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5pZCwgcGhhc2UsIGZpbmlzaGVkV29yay5hY3R1YWxEdXJhdGlvbiwgZmluaXNoZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24sIGZpbmlzaGVkV29yay5hY3R1YWxTdGFydFRpbWUsIGNvbW1pdFRpbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygb25Db21taXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBvbkNvbW1pdChmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcy5pZCwgcGhhc2UsIGVmZmVjdER1cmF0aW9uLCBjb21taXRUaW1lKTtcbiAgICAgICAgICAgICAgfSAvLyBTY2hlZHVsZSBhIHBhc3NpdmUgZWZmZWN0IGZvciB0aGlzIFByb2ZpbGVyIHRvIGNhbGwgb25Qb3N0Q29tbWl0IGhvb2tzLlxuICAgICAgICAgICAgICAvLyBUaGlzIGVmZmVjdCBzaG91bGQgYmUgc2NoZWR1bGVkIGV2ZW4gaWYgdGhlcmUgaXMgbm8gb25Qb3N0Q29tbWl0IGNhbGxiYWNrIGZvciB0aGlzIFByb2ZpbGVyLFxuICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBlZmZlY3QgaXMgYWxzbyB3aGVyZSB0aW1lcyBidWJibGUgdG8gcGFyZW50IFByb2ZpbGVycy5cblxuXG4gICAgICAgICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZVByb2ZpbGVyRWZmZWN0KGZpbmlzaGVkV29yayk7IC8vIFByb3BhZ2F0ZSBsYXlvdXQgZWZmZWN0IGR1cmF0aW9ucyB0byB0aGUgbmV4dCBuZWFyZXN0IFByb2ZpbGVyIGFuY2VzdG9yLlxuICAgICAgICAgICAgICAvLyBEbyBub3QgcmVzZXQgdGhlc2UgdmFsdWVzIHVudGlsIHRoZSBuZXh0IHJlbmRlciBzbyBEZXZUb29scyBoYXMgYSBjaGFuY2UgdG8gcmVhZCB0aGVtIGZpcnN0LlxuXG4gICAgICAgICAgICAgIHZhciBwYXJlbnRGaWJlciA9IGZpbmlzaGVkV29yay5yZXR1cm47XG5cbiAgICAgICAgICAgICAgb3V0ZXI6IHdoaWxlIChwYXJlbnRGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyZW50RmliZXIudGFnKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdCA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5lZmZlY3REdXJhdGlvbiArPSBlZmZlY3REdXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiArPSBlZmZlY3REdXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5yZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgVHJhY2luZ01hcmtlckNvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgJyArICdsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoICFvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuKSB7XG4gICAge1xuICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFJlZikge1xuICAgICAgICBjb21taXRBdHRhY2hSZWYoZmluaXNoZWRXb3JrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhcHBlYXJMYXlvdXRFZmZlY3RzT25GaWJlcihub2RlKSB7XG4gIC8vIFR1cm4gb24gbGF5b3V0IGVmZmVjdHMgaW4gYSB0cmVlIHRoYXQgcHJldmlvdXNseSBkaXNhcHBlYXJlZC5cbiAgLy8gVE9ETyAoT2Zmc2NyZWVuKSBDaGVjazogZmxhZ3MgJiBMYXlvdXRTdGF0aWNcbiAgc3dpdGNoIChub2RlLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKCBub2RlLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzdGFydExheW91dEVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgICBzYWZlbHlDYWxsQ29tbWl0SG9va0xheW91dEVmZmVjdExpc3RNb3VudChub2RlLCBub2RlLnJldHVybik7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzYWZlbHlDYWxsQ29tbWl0SG9va0xheW91dEVmZmVjdExpc3RNb3VudChub2RlLCBub2RlLnJldHVybik7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50RGlkTW91bnQobm9kZSwgbm9kZS5yZXR1cm4sIGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNhZmVseUF0dGFjaFJlZihub2RlLCBub2RlLnJldHVybik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBzYWZlbHlBdHRhY2hSZWYobm9kZSwgbm9kZS5yZXR1cm4pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKSB7XG4gIC8vIE9ubHkgaGlkZSBvciB1bmhpZGUgdGhlIHRvcC1tb3N0IGhvc3Qgbm9kZXMuXG4gIHZhciBob3N0U3VidHJlZVJvb3QgPSBudWxsO1xuXG4gIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gZmluaXNoZWRXb3JrO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICBpZiAoaG9zdFN1YnRyZWVSb290ID09PSBudWxsKSB7XG4gICAgICAgICAgaG9zdFN1YnRyZWVSb290ID0gbm9kZTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIGhpZGVJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1bmhpZGVJbnN0YW5jZShub2RlLnN0YXRlTm9kZSwgbm9kZS5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICBpZiAoaG9zdFN1YnRyZWVSb290ID09PSBudWxsKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBfaW5zdGFuY2UzID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgICAgICBoaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdW5oaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgobm9kZS50YWcgPT09IE9mZnNjcmVlbkNvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50KSAmJiBub2RlLm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgbm9kZSAhPT0gZmluaXNoZWRXb3JrKSA7IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhvc3RTdWJ0cmVlUm9vdCA9PT0gbm9kZSkge1xuICAgICAgICAgIGhvc3RTdWJ0cmVlUm9vdCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChob3N0U3VidHJlZVJvb3QgPT09IG5vZGUpIHtcbiAgICAgICAgaG9zdFN1YnRyZWVSb290ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QXR0YWNoUmVmKGZpbmlzaGVkV29yaykge1xuICB2YXIgcmVmID0gZmluaXNoZWRXb3JrLnJlZjtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICB2YXIgaW5zdGFuY2VUb1VzZTtcblxuICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGluc3RhbmNlO1xuICAgIH0gLy8gTW92ZWQgb3V0c2lkZSB0byBlbnN1cmUgRENFIHdvcmtzIHdpdGggdGhpcyBmbGFnXG5cbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIHJldFZhbDtcblxuICAgICAgaWYgKCBmaW5pc2hlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgIHJldFZhbCA9IHJlZihpbnN0YW5jZVRvVXNlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWNvcmRMYXlvdXRFZmZlY3REdXJhdGlvbihmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXRWYWwgPSByZWYoaW5zdGFuY2VUb1VzZSk7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRWYWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBlcnJvcignVW5leHBlY3RlZCByZXR1cm4gdmFsdWUgZnJvbSBhIGNhbGxiYWNrIHJlZiBpbiAlcy4gJyArICdBIGNhbGxiYWNrIHJlZiBzaG91bGQgbm90IHJldHVybiBhIGZ1bmN0aW9uLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBpZiAoIXJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgcmVmIG9iamVjdCBwcm92aWRlZCBmb3IgJXMuICcgKyAnVXNlIGVpdGhlciBhIHJlZi1zZXR0ZXIgZnVuY3Rpb24gb3IgUmVhY3QuY3JlYXRlUmVmKCkuJywgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWYuY3VycmVudCA9IGluc3RhbmNlVG9Vc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRldGFjaEZpYmVyTXV0YXRpb24oZmliZXIpIHtcbiAgLy8gQ3V0IG9mZiB0aGUgcmV0dXJuIHBvaW50ZXIgdG8gZGlzY29ubmVjdCBpdCBmcm9tIHRoZSB0cmVlLlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gZGV0ZWN0IGFuZCB3YXJuIGFnYWluc3Qgc3RhdGUgdXBkYXRlcyBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlxuICAvLyBJdCBhbHNvIHByZXZlbnRzIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIGZyb20gd2l0aGluIGRpc2Nvbm5lY3RlZCBjb21wb25lbnRzLlxuICAvL1xuICAvLyBJZGVhbGx5LCB3ZSBzaG91bGQgYWxzbyBjbGVhciB0aGUgY2hpbGQgcG9pbnRlciBvZiB0aGUgcGFyZW50IGFsdGVybmF0ZSB0byBsZXQgdGhpc1xuICAvLyBnZXQgR0M6ZWQgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggZm9yIHN1cmUgd2hpY2ggcGFyZW50IGlzIHRoZSBjdXJyZW50XG4gIC8vIG9uZSBzbyB3ZSdsbCBzZXR0bGUgZm9yIEdDOmluZyB0aGUgc3VidHJlZSBvZiB0aGlzIGNoaWxkLlxuICAvLyBUaGlzIGNoaWxkIGl0c2VsZiB3aWxsIGJlIEdDOmVkIHdoZW4gdGhlIHBhcmVudCB1cGRhdGVzIHRoZSBuZXh0IHRpbWUuXG4gIC8vXG4gIC8vIE5vdGUgdGhhdCB3ZSBjYW4ndCBjbGVhciBjaGlsZCBvciBzaWJsaW5nIHBvaW50ZXJzIHlldC5cbiAgLy8gVGhleSdyZSBuZWVkZWQgZm9yIHBhc3NpdmUgZWZmZWN0cyBhbmQgZm9yIGZpbmRET01Ob2RlLlxuICAvLyBXZSBkZWZlciB0aG9zZSBmaWVsZHMsIGFuZCBhbGwgb3RoZXIgY2xlYW51cCwgdG8gdGhlIHBhc3NpdmUgcGhhc2UgKHNlZSBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cykuXG4gIC8vXG4gIC8vIERvbid0IHJlc2V0IHRoZSBhbHRlcm5hdGUgeWV0LCBlaXRoZXIuIFdlIG5lZWQgdGhhdCBzbyB3ZSBjYW4gZGV0YWNoIHRoZVxuICAvLyBhbHRlcm5hdGUncyBmaWVsZHMgaW4gdGhlIHBhc3NpdmUgcGhhc2UuIENsZWFyaW5nIHRoZSByZXR1cm4gcG9pbnRlciBpc1xuICAvLyBzdWZmaWNpZW50IGZvciBmaW5kRE9NTm9kZSBzZW1hbnRpY3MuXG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5yZXR1cm4gPSBudWxsO1xuICB9XG5cbiAgZmliZXIucmV0dXJuID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgZmliZXIuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhhbHRlcm5hdGUpO1xuICB9IC8vIE5vdGU6IERlZmVuc2l2ZWx5IHVzaW5nIG5lZ2F0aW9uIGluc3RlYWQgb2YgPCBpbiBjYXNlXG4gIC8vIGBkZWxldGVkVHJlZUNsZWFuVXBMZXZlbGAgaXMgdW5kZWZpbmVkLlxuXG5cbiAge1xuICAgIC8vIENsZWFyIGN5Y2xpY2FsIEZpYmVyIGZpZWxkcy4gVGhpcyBsZXZlbCBhbG9uZSBpcyBkZXNpZ25lZCB0byByb3VnaGx5XG4gICAgLy8gYXBwcm94aW1hdGUgdGhlIHBsYW5uZWQgRmliZXIgcmVmYWN0b3IuIEluIHRoYXQgd29ybGQsIGBzZXRTdGF0ZWAgd2lsbCBiZVxuICAgIC8vIGJvdW5kIHRvIGEgc3BlY2lhbCBcImluc3RhbmNlXCIgb2JqZWN0IGluc3RlYWQgb2YgYSBGaWJlci4gVGhlIEluc3RhbmNlXG4gICAgLy8gb2JqZWN0IHdpbGwgbm90IGhhdmUgYW55IG9mIHRoZXNlIGZpZWxkcy4gSXQgd2lsbCBvbmx5IGJlIGNvbm5lY3RlZCB0b1xuICAgIC8vIHRoZSBmaWJlciB0cmVlIHZpYSBhIHNpbmdsZSBsaW5rIGF0IHRoZSByb290LiBTbyBpZiB0aGlzIGxldmVsIGFsb25lIGlzXG4gICAgLy8gc3VmZmljaWVudCB0byBmaXggbWVtb3J5IGlzc3VlcywgdGhhdCBib2RlcyB3ZWxsIGZvciBvdXIgcGxhbnMuXG4gICAgZmliZXIuY2hpbGQgPSBudWxsO1xuICAgIGZpYmVyLmRlbGV0aW9ucyA9IG51bGw7XG4gICAgZmliZXIuc2libGluZyA9IG51bGw7IC8vIFRoZSBgc3RhdGVOb2RlYCBpcyBjeWNsaWNhbCBiZWNhdXNlIG9uIGhvc3Qgbm9kZXMgaXQgcG9pbnRzIHRvIHRoZSBob3N0XG4gICAgLy8gdHJlZSwgd2hpY2ggaGFzIGl0cyBvd24gcG9pbnRlcnMgdG8gY2hpbGRyZW4sIHBhcmVudHMsIGFuZCBzaWJsaW5ncy5cbiAgICAvLyBUaGUgb3RoZXIgaG9zdCBub2RlcyBhbHNvIHBvaW50IGJhY2sgdG8gZmliZXJzLCBzbyB3ZSBzaG91bGQgZGV0YWNoIHRoYXRcbiAgICAvLyBvbmUsIHRvby5cblxuICAgIGlmIChmaWJlci50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgIHZhciBob3N0SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgZGV0YWNoRGVsZXRlZEluc3RhbmNlKGhvc3RJbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDsgLy8gSSdtIGludGVudGlvbmFsbHkgbm90IGNsZWFyaW5nIHRoZSBgcmV0dXJuYCBmaWVsZCBpbiB0aGlzIGxldmVsLiBXZVxuICAgIC8vIGFscmVhZHkgZGlzY29ubmVjdCB0aGUgYHJldHVybmAgcG9pbnRlciBhdCB0aGUgcm9vdCBvZiB0aGUgZGVsZXRlZFxuICAgIC8vIHN1YnRyZWUgKGluIGBkZXRhY2hGaWJlck11dGF0aW9uYCkuIEJlc2lkZXMsIGByZXR1cm5gIGJ5IGl0c2VsZiBpcyBub3RcbiAgICAvLyBjeWNsaWNhbCDigJQgaXQncyBvbmx5IGN5Y2xpY2FsIHdoZW4gY29tYmluZWQgd2l0aCBgY2hpbGRgLCBgc2libGluZ2AsIGFuZFxuICAgIC8vIGBhbHRlcm5hdGVgLiBCdXQgd2UnbGwgY2xlYXIgaXQgaW4gdGhlIG5leHQgbGV2ZWwgYW55d2F5LCBqdXN0IGluIGNhc2UuXG5cbiAgICB7XG4gICAgICBmaWJlci5fZGVidWdPd25lciA9IG51bGw7XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gVGhlb3JldGljYWxseSwgbm90aGluZyBpbiBoZXJlIHNob3VsZCBiZSBuZWNlc3NhcnksIGJlY2F1c2Ugd2UgYWxyZWFkeVxuICAgICAgLy8gZGlzY29ubmVjdGVkIHRoZSBmaWJlciBmcm9tIHRoZSB0cmVlLiBTbyBldmVuIGlmIHNvbWV0aGluZyBsZWFrcyB0aGlzXG4gICAgICAvLyBwYXJ0aWN1bGFyIGZpYmVyLCBpdCB3b24ndCBsZWFrIGFueXRoaW5nIGVsc2VcbiAgICAgIC8vXG4gICAgICAvLyBUaGUgcHVycG9zZSBvZiB0aGlzIGJyYW5jaCBpcyB0byBiZSBzdXBlciBhZ2dyZXNzaXZlIHNvIHdlIGNhbiBtZWFzdXJlXG4gICAgICAvLyBpZiB0aGVyZSdzIGFueSBkaWZmZXJlbmNlIGluIG1lbW9yeSBpbXBhY3QuIElmIHRoZXJlIGlzLCB0aGF0IGNvdWxkXG4gICAgICAvLyBpbmRpY2F0ZSBhIFJlYWN0IGxlYWsgd2UgZG9uJ3Qga25vdyBhYm91dC5cbiAgICAgIGZpYmVyLnJldHVybiA9IG51bGw7XG4gICAgICBmaWJlci5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gICAgICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IG51bGw7XG4gICAgICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsOyAvLyBUT0RPOiBNb3ZlIHRvIGBjb21taXRQYXNzaXZlVW5tb3VudEluc2lkZURlbGV0ZWRUcmVlT25GaWJlcmAgaW5zdGVhZC5cblxuICAgICAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRIb3N0UGFyZW50RmliZXIoZmliZXIpIHtcbiAgdmFyIHBhcmVudCA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKGlzSG9zdFBhcmVudChwYXJlbnQpKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnICcgKyAnaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xufVxuXG5mdW5jdGlvbiBpc0hvc3RQYXJlbnQoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBmaWJlci50YWcgPT09IEhvc3RSb290IHx8IGZpYmVyLnRhZyA9PT0gSG9zdFBvcnRhbDtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFNpYmxpbmcoZmliZXIpIHtcbiAgLy8gV2UncmUgZ29pbmcgdG8gc2VhcmNoIGZvcndhcmQgaW50byB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGEgc2libGluZyBob3N0XG4gIC8vIG5vZGUuIFVuZm9ydHVuYXRlbHksIGlmIG11bHRpcGxlIGluc2VydGlvbnMgYXJlIGRvbmUgaW4gYSByb3cgd2UgaGF2ZSB0b1xuICAvLyBzZWFyY2ggcGFzdCB0aGVtLiBUaGlzIGxlYWRzIHRvIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgdGhlIG5leHQgc2libGluZy5cbiAgLy8gVE9ETzogRmluZCBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBkbyB0aGlzLlxuICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gIHNpYmxpbmdzOiB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLCBsZXQncyB0cnkgdGhlIG5leHQgc2libGluZy5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgaXNIb3N0UGFyZW50KG5vZGUucmV0dXJuKSkge1xuICAgICAgICAvLyBJZiB3ZSBwb3Agb3V0IG9mIHRoZSByb290IG9yIGhpdCB0aGUgcGFyZW50IHRoZSBmaWJlciB3ZSBhcmUgdGhlXG4gICAgICAgIC8vIGxhc3Qgc2libGluZy5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcblxuICAgIHdoaWxlIChub2RlLnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiBub2RlLnRhZyAhPT0gSG9zdFRleHQgJiYgbm9kZS50YWcgIT09IERlaHlkcmF0ZWRGcmFnbWVudCkge1xuICAgICAgLy8gSWYgaXQgaXMgbm90IGhvc3Qgbm9kZSBhbmQsIHdlIG1pZ2h0IGhhdmUgYSBob3N0IG5vZGUgaW5zaWRlIGl0LlxuICAgICAgLy8gVHJ5IHRvIHNlYXJjaCBkb3duIHVudGlsIHdlIGZpbmQgb25lLlxuICAgICAgaWYgKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpIHtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY2hpbGQsIHRyeSB0aGUgc2libGluZ3MgaW5zdGVhZC5cbiAgICAgIC8vIFdlIGFsc28gc2tpcCBwb3J0YWxzIGJlY2F1c2UgdGhleSBhcmUgbm90IHBhcnQgb2YgdGhpcyBob3N0IHRyZWUuXG5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgPT09IG51bGwgfHwgbm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgfVxuICAgIH0gLy8gQ2hlY2sgaWYgdGhpcyBob3N0IG5vZGUgaXMgc3RhYmxlIG9yIGFib3V0IHRvIGJlIHBsYWNlZC5cblxuXG4gICAgaWYgKCEobm9kZS5mbGFncyAmIFBsYWNlbWVudCkpIHtcbiAgICAgIC8vIEZvdW5kIGl0IVxuICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQbGFjZW1lbnQoZmluaXNoZWRXb3JrKSB7XG5cblxuICB2YXIgcGFyZW50RmliZXIgPSBnZXRIb3N0UGFyZW50RmliZXIoZmluaXNoZWRXb3JrKTsgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG5cbiAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBwYXJlbnQgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHBhcmVudEZpYmVyLmZsYWdzICYgQ29udGVudFJlc2V0KSB7XG4gICAgICAgICAgLy8gUmVzZXQgdGhlIHRleHQgY29udGVudCBvZiB0aGUgcGFyZW50IGJlZm9yZSBkb2luZyBhbnkgaW5zZXJ0aW9uc1xuICAgICAgICAgIHJlc2V0VGV4dENvbnRlbnQocGFyZW50KTsgLy8gQ2xlYXIgQ29udGVudFJlc2V0IGZyb20gdGhlIGVmZmVjdCB0YWdcblxuICAgICAgICAgIHBhcmVudEZpYmVyLmZsYWdzICY9IH5Db250ZW50UmVzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTsgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAgICAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG5cbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGZpbmlzaGVkV29yaywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAge1xuICAgICAgICB2YXIgX3BhcmVudCA9IHBhcmVudEZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgIHZhciBfYmVmb3JlID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcblxuICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKGZpbmlzaGVkV29yaywgX2JlZm9yZSwgX3BhcmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZS1uby1mYWxsdGhyb3VnaFxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBob3N0IHBhcmVudCBmaWJlci4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnICcgKyAnaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICB2YXIgaXNIb3N0ID0gdGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHRhZyA9PT0gSG9zdFRleHQ7XG5cbiAgaWYgKGlzSG9zdCkge1xuICAgIHZhciBzdGF0ZU5vZGUgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIGluc2VydEluQ29udGFpbmVyQmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgd2hpbGUgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihzaWJsaW5nLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0KSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGlsZChwYXJlbnQsIHN0YXRlTm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIHtcbiAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkO1xuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgd2hpbGUgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgc2libGluZyA9IHNpYmxpbmcuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gVGhlc2UgYXJlIHRyYWNrZWQgb24gdGhlIHN0YWNrIGFzIHdlIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFcbi8vIGRlbGV0ZWQgc3VidHJlZS5cbi8vIFRPRE86IFVwZGF0ZSB0aGVzZSBkdXJpbmcgdGhlIHdob2xlIG11dGF0aW9uIHBoYXNlLCBub3QganVzdCBkdXJpbmdcbi8vIGEgZGVsZXRpb24uXG5cblxudmFyIGhvc3RQYXJlbnQgPSBudWxsO1xudmFyIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjb21taXREZWxldGlvbkVmZmVjdHMocm9vdCwgcmV0dXJuRmliZXIsIGRlbGV0ZWRGaWJlcikge1xuICB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgZGVsZXRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIC8vIFJlY3Vyc2l2ZWx5IGRlbGV0ZSBhbGwgaG9zdCBub2RlcyBmcm9tIHRoZSBwYXJlbnQsIGRldGFjaCByZWZzLCBjbGVhblxuICAgIC8vIHVwIG1vdW50ZWQgbGF5b3V0IGVmZmVjdHMsIGFuZCBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50LlxuICAgIC8vIFdlIG9ubHkgbmVlZCB0byByZW1vdmUgdGhlIHRvcG1vc3QgaG9zdCBjaGlsZCBpbiBlYWNoIGJyYW5jaC4gQnV0IHRoZW4gd2VcbiAgICAvLyBzdGlsbCBuZWVkIHRvIGtlZXAgdHJhdmVyc2luZyB0byB1bm1vdW50IGVmZmVjdHMsIHJlZnMsIGFuZCBjV1UuIFRPRE86IFdlXG4gICAgLy8gY291bGQgc3BsaXQgdGhpcyBpbnRvIHR3byBzZXBhcmF0ZSB0cmF2ZXJzYWxzIGZ1bmN0aW9ucywgd2hlcmUgdGhlIHNlY29uZFxuICAgIC8vIG9uZSBkb2Vzbid0IGluY2x1ZGUgYW55IHJlbW92ZUNoaWxkIGxvZ2ljLiBUaGlzIGlzIG1heWJlIHRoZSBzYW1lXG4gICAgLy8gZnVuY3Rpb24gYXMgXCJkaXNhcHBlYXJMYXlvdXRFZmZlY3RzXCIgKG9yIHdoYXRldmVyIHRoYXQgdHVybnMgaW50byBhZnRlclxuICAgIC8vIHRoZSBsYXlvdXQgcGhhc2UgaXMgcmVmYWN0b3JlZCB0byB1c2UgcmVjdXJzaW9uKS5cbiAgICAvLyBCZWZvcmUgc3RhcnRpbmcsIGZpbmQgdGhlIG5lYXJlc3QgaG9zdCBwYXJlbnQgb24gdGhlIHN0YWNrIHNvIHdlIGtub3dcbiAgICAvLyB3aGljaCBpbnN0YW5jZS9jb250YWluZXIgdG8gcmVtb3ZlIHRoZSBjaGlsZHJlbiBmcm9tLlxuICAgIC8vIFRPRE86IEluc3RlYWQgb2Ygc2VhcmNoaW5nIHVwIHRoZSBmaWJlciByZXR1cm4gcGF0aCBvbiBldmVyeSBkZWxldGlvbiwgd2VcbiAgICAvLyBjYW4gdHJhY2sgdGhlIG5lYXJlc3QgaG9zdCBjb21wb25lbnQgb24gdGhlIEpTIHN0YWNrIGFzIHdlIHRyYXZlcnNlIHRoZVxuICAgIC8vIHRyZWUgZHVyaW5nIHRoZSBjb21taXQgcGhhc2UuIFRoaXMgd291bGQgbWFrZSBpbnNlcnRpb25zIGZhc3RlciwgdG9vLlxuICAgIHZhciBwYXJlbnQgPSByZXR1cm5GaWJlcjtcblxuICAgIGZpbmRQYXJlbnQ6IHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAocGFyZW50LnRhZykge1xuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaG9zdFBhcmVudCA9IHBhcmVudC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaG9zdFBhcmVudCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBmaW5kIGEgaG9zdCBwYXJlbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSAnICsgJ2EgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG5cbiAgICBjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyKHJvb3QsIHJldHVybkZpYmVyLCBkZWxldGVkRmliZXIpO1xuICAgIGhvc3RQYXJlbnQgPSBudWxsO1xuICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGZhbHNlO1xuICB9XG5cbiAgZGV0YWNoRmliZXJNdXRhdGlvbihkZWxldGVkRmliZXIpO1xufVxuXG5mdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKGZpbmlzaGVkUm9vdCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgcGFyZW50KSB7XG4gIC8vIFRPRE86IFVzZSBhIHN0YXRpYyBmbGFnIHRvIHNraXAgdHJlZXMgdGhhdCBkb24ndCBoYXZlIHVubW91bnQgZWZmZWN0c1xuICB2YXIgY2hpbGQgPSBwYXJlbnQuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFJvb3QsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGNoaWxkKTtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFJvb3QsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGRlbGV0ZWRGaWJlcikge1xuICBvbkNvbW1pdFVubW91bnQoZGVsZXRlZEZpYmVyKTsgLy8gVGhlIGNhc2VzIGluIHRoaXMgb3V0ZXIgc3dpdGNoIG1vZGlmeSB0aGUgc3RhY2sgYmVmb3JlIHRoZXkgdHJhdmVyc2VcbiAgLy8gaW50byB0aGVpciBzdWJ0cmVlLiBUaGVyZSBhcmUgc2ltcGxlciBjYXNlcyBpbiB0aGUgaW5uZXIgc3dpdGNoXG4gIC8vIHRoYXQgZG9uJ3QgbW9kaWZ5IHRoZSBzdGFjay5cblxuICBzd2l0Y2ggKGRlbGV0ZWRGaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmICghb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbikge1xuICAgICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgICB9IC8vIEludGVudGlvbmFsIGZhbGx0aHJvdWdoIHRvIG5leHQgYnJhbmNoXG5cbiAgICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUtbm8tZmFsbHRocm91Z2hcblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byByZW1vdmUgdGhlIG5lYXJlc3QgaG9zdCBjaGlsZC4gU2V0IHRoZSBob3N0IHBhcmVudFxuICAgICAgICAvLyB0byBgbnVsbGAgb24gdGhlIHN0YWNrIHRvIGluZGljYXRlIHRoYXQgbmVzdGVkIGNoaWxkcmVuIGRvbid0XG4gICAgICAgIC8vIG5lZWQgdG8gYmUgcmVtb3ZlZC5cbiAgICAgICAge1xuICAgICAgICAgIHZhciBwcmV2SG9zdFBhcmVudCA9IGhvc3RQYXJlbnQ7XG4gICAgICAgICAgdmFyIHByZXZIb3N0UGFyZW50SXNDb250YWluZXIgPSBob3N0UGFyZW50SXNDb250YWluZXI7XG4gICAgICAgICAgaG9zdFBhcmVudCA9IG51bGw7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhmaW5pc2hlZFJvb3QsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGRlbGV0ZWRGaWJlcik7XG4gICAgICAgICAgaG9zdFBhcmVudCA9IHByZXZIb3N0UGFyZW50O1xuICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHByZXZIb3N0UGFyZW50SXNDb250YWluZXI7XG5cbiAgICAgICAgICBpZiAoaG9zdFBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gTm93IHRoYXQgYWxsIHRoZSBjaGlsZCBlZmZlY3RzIGhhdmUgdW5tb3VudGVkLCB3ZSBjYW4gcmVtb3ZlIHRoZVxuICAgICAgICAgICAgLy8gbm9kZSBmcm9tIHRoZSB0cmVlLlxuICAgICAgICAgICAgaWYgKGhvc3RQYXJlbnRJc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICByZW1vdmVDaGlsZEZyb21Db250YWluZXIoaG9zdFBhcmVudCwgZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZW1vdmVDaGlsZChob3N0UGFyZW50LCBkZWxldGVkRmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIERlaHlkcmF0ZWRGcmFnbWVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gRGVsZXRlIHRoZSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGJvdW5kYXJ5IGFuZCBhbGwgb2YgaXRzIGNvbnRlbnQuXG5cblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGhvc3RQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3N0UGFyZW50SXNDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgY2xlYXJTdXNwZW5zZUJvdW5kYXJ5RnJvbUNvbnRhaW5lcihob3N0UGFyZW50LCBkZWxldGVkRmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNsZWFyU3VzcGVuc2VCb3VuZGFyeShob3N0UGFyZW50LCBkZWxldGVkRmliZXIuc3RhdGVOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXaGVuIHdlIGdvIGludG8gYSBwb3J0YWwsIGl0IGJlY29tZXMgdGhlIHBhcmVudCB0byByZW1vdmUgZnJvbS5cbiAgICAgICAgICB2YXIgX3ByZXZIb3N0UGFyZW50ID0gaG9zdFBhcmVudDtcbiAgICAgICAgICB2YXIgX3ByZXZIb3N0UGFyZW50SXNDb250YWluZXIgPSBob3N0UGFyZW50SXNDb250YWluZXI7XG4gICAgICAgICAgaG9zdFBhcmVudCA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZWxldGVkRmliZXIpO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBfcHJldkhvc3RQYXJlbnQ7XG4gICAgICAgICAgaG9zdFBhcmVudElzQ29udGFpbmVyID0gX3ByZXZIb3N0UGFyZW50SXNDb250YWluZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoIW9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHtcbiAgICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBkZWxldGVkRmliZXIudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgICAgICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgIHZhciBfZWZmZWN0ID0gZWZmZWN0LFxuICAgICAgICAgICAgICAgICAgICBkZXN0cm95ID0gX2VmZmVjdC5kZXN0cm95LFxuICAgICAgICAgICAgICAgICAgICB0YWcgPSBfZWZmZWN0LnRhZztcblxuICAgICAgICAgICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgodGFnICYgSW5zZXJ0aW9uKSAhPT0gTm9GbGFncyQxKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh0YWcgJiBMYXlvdXQpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZChkZWxldGVkRmliZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWxldGVkRmliZXIubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgICAgICAgICAgICAgIHNhZmVseUNhbGxEZXN0cm95KGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgICAgICAgcmVjb3JkTGF5b3V0RWZmZWN0RHVyYXRpb24oZGVsZXRlZEZpYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzYWZlbHlDYWxsRGVzdHJveShkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RvcHBlZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZWxldGVkRmliZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoIW9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHtcbiAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgaW5zdGFuY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZWxldGVkRmliZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZWxldGVkRmliZXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKCAvLyBUT0RPOiBSZW1vdmUgdGhpcyBkZWFkIGZsYWdcbiAgICAgICAgIGRlbGV0ZWRGaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIG9mZnNjcmVlbiBjb21wb25lbnQgaXMgaGlkZGVuLCB3ZSBhbHJlYWR5IHVubW91bnRlZCBpdC4gQmVmb3JlXG4gICAgICAgICAgLy8gZGVsZXRpbmcgdGhlIGNoaWxkcmVuLCB0cmFjayB0aGF0IGl0J3MgYWxyZWFkeSB1bm1vdW50ZWQgc28gdGhhdCB3ZVxuICAgICAgICAgIC8vIGRvbid0IGF0dGVtcHQgdG8gdW5tb3VudCB0aGUgZWZmZWN0cyBhZ2Fpbi5cbiAgICAgICAgICAvLyBUT0RPOiBJZiB0aGUgdHJlZSBpcyBoaWRkZW4sIGluIG1vc3QgY2FzZXMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gc2tpcFxuICAgICAgICAgIC8vIG92ZXIgdGhlIG5lc3RlZCBjaGlsZHJlbiBlbnRpcmVseS4gQW4gZXhjZXB0aW9uIGlzIHdlIGhhdmVuJ3QgeWV0IGZvdW5kXG4gICAgICAgICAgLy8gdGhlIHRvcG1vc3QgaG9zdCBub2RlIHRvIGRlbGV0ZSwgd2hpY2ggd2UgYWxyZWFkeSB0cmFjayBvbiB0aGUgc3RhY2suXG4gICAgICAgICAgLy8gQnV0IHRoZSBvdGhlciBjYXNlIGlzIHBvcnRhbHMsIHdoaWNoIG5lZWQgdG8gYmUgZGV0YWNoZWQgbm8gbWF0dGVyIGhvd1xuICAgICAgICAgIC8vIGRlZXBseSB0aGV5IGFyZSBuZXN0ZWQuIFdlIHNob3VsZCB1c2UgYSBzdWJ0cmVlIGZsYWcgdG8gdHJhY2sgd2hldGhlciBhXG4gICAgICAgICAgLy8gc3VidHJlZSBpbmNsdWRlcyBhIG5lc3RlZCBwb3J0YWwuXG4gICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHwgZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhmaW5pc2hlZFJvb3QsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGRlbGV0ZWRGaWJlcik7XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoZmluaXNoZWRSb290LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBkZWxldGVkRmliZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKGZpbmlzaGVkUm9vdCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZGVsZXRlZEZpYmVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlQ2FsbGJhY2soZmluaXNoZWRXb3JrKSB7XG4gIC8vIFRPRE86IE1vdmUgdGhpcyB0byBwYXNzaXZlIHBoYXNlXG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykge1xuXG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gcHJldlN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgaWYgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspIHtcbiAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgdGhlbiBpdCB3aWxsIGhhdmUgYSBzZXQgb2Ygd2FrZWFibGVzLlxuICAvLyBGb3IgZWFjaCB3YWtlYWJsZSwgYXR0YWNoIGEgbGlzdGVuZXIgc28gdGhhdCB3aGVuIGl0IHJlc29sdmVzLCBSZWFjdFxuICAvLyBhdHRlbXB0cyB0byByZS1yZW5kZXIgdGhlIGJvdW5kYXJ5IGluIHRoZSBwcmltYXJ5IChwcmUtdGltZW91dCkgc3RhdGUuXG4gIHZhciB3YWtlYWJsZXMgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgaWYgKHdha2VhYmxlcyAhPT0gbnVsbCkge1xuICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgdmFyIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgaWYgKHJldHJ5Q2FjaGUgPT09IG51bGwpIHtcbiAgICAgIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpO1xuICAgIH1cblxuICAgIHdha2VhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uICh3YWtlYWJsZSkge1xuICAgICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgYm91bmRhcnkgZmliZXIgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgICAgdmFyIHJldHJ5ID0gcmVzb2x2ZVJldHJ5V2FrZWFibGUuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHdha2VhYmxlKTtcblxuICAgICAgaWYgKCFyZXRyeUNhY2hlLmhhcyh3YWtlYWJsZSkpIHtcbiAgICAgICAgcmV0cnlDYWNoZS5hZGQod2FrZWFibGUpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICAgIGlmIChpblByb2dyZXNzTGFuZXMgIT09IG51bGwgJiYgaW5Qcm9ncmVzc1Jvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIHdvcmsgc3RpbGwsIGFzc29jaWF0ZSB0aGUgb3JpZ2luYWwgdXBkYXRlcnMgd2l0aCBpdC5cbiAgICAgICAgICAgICAgcmVzdG9yZVBlbmRpbmdVcGRhdGVycyhpblByb2dyZXNzUm9vdCwgaW5Qcm9ncmVzc0xhbmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCdFeHBlY3RlZCBmaW5pc2hlZCByb290IGFuZCBsYW5lcyB0byBiZSBzZXQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgd2FrZWFibGUudGhlbihyZXRyeSwgcmV0cnkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IC8vIFRoaXMgZnVuY3Rpb24gZGV0ZWN0cyB3aGVuIGEgU3VzcGVuc2UgYm91bmRhcnkgZ29lcyBmcm9tIHZpc2libGUgdG8gaGlkZGVuLlxuZnVuY3Rpb24gY29tbWl0TXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMpIHtcbiAgaW5Qcm9ncmVzc0xhbmVzID0gY29tbWl0dGVkTGFuZXM7XG4gIGluUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgc2V0Q3VycmVudEZpYmVyKGZpbmlzaGVkV29yayk7XG4gIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRXb3JrLCByb290KTtcbiAgc2V0Q3VycmVudEZpYmVyKGZpbmlzaGVkV29yayk7XG4gIGluUHJvZ3Jlc3NMYW5lcyA9IG51bGw7XG4gIGluUHJvZ3Jlc3NSb290ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBwYXJlbnRGaWJlciwgbGFuZXMpIHtcbiAgLy8gRGVsZXRpb25zIGVmZmVjdHMgY2FuIGJlIHNjaGVkdWxlZCBvbiBhbnkgZmliZXIgdHlwZS4gVGhleSBuZWVkIHRvIGhhcHBlblxuICAvLyBiZWZvcmUgdGhlIGNoaWxkcmVuIGVmZmVjdHMgaGFlIGZpcmVkLlxuICB2YXIgZGVsZXRpb25zID0gcGFyZW50RmliZXIuZGVsZXRpb25zO1xuXG4gIGlmIChkZWxldGlvbnMgIT09IG51bGwpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkVG9EZWxldGUgPSBkZWxldGlvbnNbaV07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbW1pdERlbGV0aW9uRWZmZWN0cyhyb290LCBwYXJlbnRGaWJlciwgY2hpbGRUb0RlbGV0ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjaGlsZFRvRGVsZXRlLCBwYXJlbnRGaWJlciwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBwcmV2RGVidWdGaWJlciA9IGdldEN1cnJlbnRGaWJlcigpO1xuXG4gIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiBNdXRhdGlvbk1hc2spIHtcbiAgICB2YXIgY2hpbGQgPSBwYXJlbnRGaWJlci5jaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGNoaWxkKTtcbiAgICAgIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIoY2hpbGQsIHJvb3QpO1xuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIHNldEN1cnJlbnRGaWJlcihwcmV2RGVidWdGaWJlcik7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRXb3JrLCByb290LCBsYW5lcykge1xuICB2YXIgY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGU7XG4gIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFnczsgLy8gVGhlIGVmZmVjdCBmbGFnIHNob3VsZCBiZSBjaGVja2VkICphZnRlciogd2UgcmVmaW5lIHRoZSB0eXBlIG9mIGZpYmVyLFxuICAvLyBiZWNhdXNlIHRoZSBmaWJlciB0YWcgaXMgbW9yZSBzcGVjaWZpYy4gQW4gZXhjZXB0aW9uIGlzIGFueSBmbGFnIHJlbGF0ZWRcbiAgLy8gdG8gcmVjb25jaWxhdGlvbiwgYmVjYXVzZSB0aG9zZSBjYW4gYmUgc2V0IG9uIGFsbCBmaWJlciB0eXBlcy5cblxuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoSW5zZXJ0aW9uIHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChJbnNlcnRpb24gfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH0gLy8gTGF5b3V0IGVmZmVjdHMgYXJlIGRlc3Ryb3llZCBkdXJpbmcgdGhlIG11dGF0aW9uIHBoYXNlIHNvIHRoYXQgYWxsXG4gICAgICAgICAgLy8gZGVzdHJveSBmdW5jdGlvbnMgZm9yIGFsbCBmaWJlcnMgYXJlIGNhbGxlZCBiZWZvcmUgYW55IGNyZWF0ZSBmdW5jdGlvbnMuXG4gICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBzaWJsaW5nIGNvbXBvbmVudCBlZmZlY3RzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLFxuICAgICAgICAgIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgc2hvdWxkIG5ldmVyIG92ZXJyaWRlIGEgcmVmIHNldFxuICAgICAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG5cblxuICAgICAgICAgIGlmICggZmluaXNoZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCwgY3VycmVudC5yZXR1cm4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcblxuICAgICAgICBpZiAoZmxhZ3MgJiBSZWYpIHtcbiAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgLy8gVE9ETzogQ29udGVudFJlc2V0IGdldHMgY2xlYXJlZCBieSB0aGUgY2hpbGRyZW4gZHVyaW5nIHRoZSBjb21taXRcbiAgICAgICAgICAvLyBwaGFzZS4gVGhpcyBpcyBhIHJlZmFjdG9yIGhhemFyZCBiZWNhdXNlIGl0IG1lYW5zIHdlIG11c3QgcmVhZFxuICAgICAgICAgIC8vIGZsYWdzIHRoZSBmbGFncyBhZnRlciBgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzYCBoYXMgYWxyZWFkeSBydW47XG4gICAgICAgICAgLy8gdGhlIG9yZGVyIG1hdHRlcnMuIFdlIHNob3VsZCByZWZhY3RvciBzbyB0aGF0IENvbnRlbnRSZXNldCBkb2VzIG5vdFxuICAgICAgICAgIC8vIHJlbHkgb24gbXV0YXRpbmcgdGhlIGZsYWcgZHVyaW5nIGNvbW1pdC4gTGlrZSBieSBzZXR0aW5nIGEgZmxhZ1xuICAgICAgICAgIC8vIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlIGluc3RlYWQuXG4gICAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIENvbnRlbnRSZXNldCkge1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmVzZXRUZXh0Q29udGVudChpbnN0YW5jZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICAgIHZhciBfaW5zdGFuY2U0ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgaWYgKF9pbnN0YW5jZTQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBDb21taXQgdGhlIHdvcmsgcHJlcGFyZWQgZWFybGllci5cbiAgICAgICAgICAgICAgdmFyIG5ld1Byb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICAgICAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3UHJvcHM7XG4gICAgICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7IC8vIFRPRE86IFR5cGUgdGhlIHVwZGF0ZVF1ZXVlIHRvIGJlIHNwZWNpZmljIHRvIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICAgICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAgICAgICAgICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb21taXRVcGRhdGUoX2luc3RhbmNlNCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBzaG91bGQgaGF2ZSBhIHRleHQgbm9kZSBpbml0aWFsaXplZC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgJyArICdjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdGV4dEluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIHZhciBuZXdUZXh0ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBuZXdUZXh0O1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuXG4gICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHZhciBwcmV2Um9vdFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICAgIGlmIChwcmV2Um9vdFN0YXRlLmlzRGVoeWRyYXRlZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb21taXRIeWRyYXRlZENvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgdmFyIG9mZnNjcmVlbkZpYmVyID0gZmluaXNoZWRXb3JrLmNoaWxkO1xuXG4gICAgICAgIGlmIChvZmZzY3JlZW5GaWJlci5mbGFncyAmIFZpc2liaWxpdHkpIHtcbiAgICAgICAgICB2YXIgb2Zmc2NyZWVuSW5zdGFuY2UgPSBvZmZzY3JlZW5GaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgdmFyIG5ld1N0YXRlID0gb2Zmc2NyZWVuRmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgaXNIaWRkZW4gPSBuZXdTdGF0ZSAhPT0gbnVsbDsgLy8gVHJhY2sgdGhlIGN1cnJlbnQgc3RhdGUgb24gdGhlIE9mZnNjcmVlbiBpbnN0YW5jZSBzbyB3ZSBjYW5cbiAgICAgICAgICAvLyByZWFkIGl0IGR1cmluZyBhbiBldmVudFxuXG4gICAgICAgICAgb2Zmc2NyZWVuSW5zdGFuY2UuaXNIaWRkZW4gPSBpc0hpZGRlbjtcblxuICAgICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgICAgdmFyIHdhc0hpZGRlbiA9IG9mZnNjcmVlbkZpYmVyLmFsdGVybmF0ZSAhPT0gbnVsbCAmJiBvZmZzY3JlZW5GaWJlci5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCF3YXNIaWRkZW4pIHtcbiAgICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0byBwYXNzaXZlIHBoYXNlXG4gICAgICAgICAgICAgIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21taXRTdXNwZW5zZUNhbGxiYWNrKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX3dhc0hpZGRlbiA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgICAgIGlmICggLy8gVE9ETzogUmVtb3ZlIHRoaXMgZGVhZCBmbGFnXG4gICAgICAgICBmaW5pc2hlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgLy8gQmVmb3JlIGNvbW1pdHRpbmcgdGhlIGNoaWxkcmVuLCB0cmFjayBvbiB0aGUgc3RhY2sgd2hldGhlciB0aGlzXG4gICAgICAgICAgLy8gb2Zmc2NyZWVuIHN1YnRyZWUgd2FzIGFscmVhZHkgaGlkZGVuLCBzbyB0aGF0IHdlIGRvbid0IHVubW91bnQgdGhlXG4gICAgICAgICAgLy8gZWZmZWN0cyBhZ2Fpbi5cbiAgICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fCBfd2FzSGlkZGVuO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgaWYgKGZsYWdzICYgVmlzaWJpbGl0eSkge1xuICAgICAgICAgIHZhciBfb2Zmc2NyZWVuSW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIHZhciBfbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgIHZhciBfaXNIaWRkZW4gPSBfbmV3U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICB2YXIgb2Zmc2NyZWVuQm91bmRhcnkgPSBmaW5pc2hlZFdvcms7IC8vIFRyYWNrIHRoZSBjdXJyZW50IHN0YXRlIG9uIHRoZSBPZmZzY3JlZW4gaW5zdGFuY2Ugc28gd2UgY2FuXG4gICAgICAgICAgLy8gcmVhZCBpdCBkdXJpbmcgYW4gZXZlbnRcblxuICAgICAgICAgIF9vZmZzY3JlZW5JbnN0YW5jZS5pc0hpZGRlbiA9IF9pc0hpZGRlbjtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChfaXNIaWRkZW4pIHtcbiAgICAgICAgICAgICAgaWYgKCFfd2FzSGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgaWYgKChvZmZzY3JlZW5Cb3VuZGFyeS5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgICAgICAgIG5leHRFZmZlY3QgPSBvZmZzY3JlZW5Cb3VuZGFyeTtcbiAgICAgICAgICAgICAgICAgIHZhciBvZmZzY3JlZW5DaGlsZCA9IG9mZnNjcmVlbkJvdW5kYXJ5LmNoaWxkO1xuXG4gICAgICAgICAgICAgICAgICB3aGlsZSAob2Zmc2NyZWVuQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEVmZmVjdCA9IG9mZnNjcmVlbkNoaWxkO1xuICAgICAgICAgICAgICAgICAgICBkaXNhcHBlYXJMYXlvdXRFZmZlY3RzX2JlZ2luKG9mZnNjcmVlbkNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2NyZWVuQ2hpbGQgPSBvZmZzY3JlZW5DaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgbmVlZHMgdG8gcnVuIHdoZW5ldmVyIHRoZXJlJ3MgYW4gaW5zZXJ0aW9uIG9yIHVwZGF0ZVxuICAgICAgICAgICAgLy8gaW5zaWRlIGEgaGlkZGVuIE9mZnNjcmVlbiB0cmVlLlxuICAgICAgICAgICAgaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4ob2Zmc2NyZWVuQm91bmRhcnksIF9pc0hpZGRlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG5cbiAgICAgICAgaWYgKGZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICAvLyBQbGFjZW1lbnQgZWZmZWN0cyAoaW5zZXJ0aW9ucywgcmVvcmRlcnMpIGNhbiBiZSBzY2hlZHVsZWQgb24gYW55IGZpYmVyXG4gIC8vIHR5cGUuIFRoZXkgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHRoZSBjaGlsZHJlbiBlZmZlY3RzIGhhdmUgZmlyZWQsIGJ1dFxuICAvLyBiZWZvcmUgdGhlIGVmZmVjdHMgb24gdGhpcyBmaWJlciBoYXZlIGZpcmVkLlxuICB2YXIgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG5cbiAgaWYgKGZsYWdzICYgUGxhY2VtZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbW1pdFBsYWNlbWVudChmaW5pc2hlZFdvcmspO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICB9IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cbiAgICAvLyBUT0RPOiBmaW5kRE9NTm9kZSBkb2Vzbid0IHJlbHkgb24gdGhpcyBhbnkgbW9yZSBidXQgaXNNb3VudGVkIGRvZXNcbiAgICAvLyBhbmQgaXNNb3VudGVkIGlzIGRlcHJlY2F0ZWQgYW55d2F5IHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGtpbGwgdGhpcy5cblxuXG4gICAgZmluaXNoZWRXb3JrLmZsYWdzICY9IH5QbGFjZW1lbnQ7XG4gIH1cblxuICBpZiAoZmxhZ3MgJiBIeWRyYXRpbmcpIHtcbiAgICBmaW5pc2hlZFdvcmsuZmxhZ3MgJj0gfkh5ZHJhdGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgcm9vdCwgY29tbWl0dGVkTGFuZXMpIHtcbiAgaW5Qcm9ncmVzc0xhbmVzID0gY29tbWl0dGVkTGFuZXM7XG4gIGluUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgbmV4dEVmZmVjdCA9IGZpbmlzaGVkV29yaztcbiAgY29tbWl0TGF5b3V0RWZmZWN0c19iZWdpbihmaW5pc2hlZFdvcmssIHJvb3QsIGNvbW1pdHRlZExhbmVzKTtcbiAgaW5Qcm9ncmVzc0xhbmVzID0gbnVsbDtcbiAgaW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRMYXlvdXRFZmZlY3RzX2JlZ2luKHN1YnRyZWVSb290LCByb290LCBjb21taXR0ZWRMYW5lcykge1xuICAvLyBTdXNwZW5zZSBsYXlvdXQgZWZmZWN0cyBzZW1hbnRpY3MgZG9uJ3QgY2hhbmdlIGZvciBsZWdhY3kgcm9vdHMuXG4gIHZhciBpc01vZGVyblJvb3QgPSAoc3VidHJlZVJvb3QubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9Nb2RlO1xuXG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpYmVyID0gbmV4dEVmZmVjdDtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gICAgaWYgKCBmaWJlci50YWcgPT09IE9mZnNjcmVlbkNvbXBvbmVudCAmJiBpc01vZGVyblJvb3QpIHtcbiAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgT2Zmc2NyZWVuIHN0YWNrJ3Mgc3RhdGUuXG4gICAgICB2YXIgaXNIaWRkZW4gPSBmaWJlci5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuICAgICAgdmFyIG5ld09mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IGlzSGlkZGVuIHx8IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcblxuICAgICAgaWYgKG5ld09mZnNjcmVlblN1YnRyZWVJc0hpZGRlbikge1xuICAgICAgICAvLyBUaGUgT2Zmc2NyZWVuIHRyZWUgaXMgaGlkZGVuLiBTa2lwIG92ZXIgaXRzIGxheW91dCBlZmZlY3RzLlxuICAgICAgICBjb21taXRMYXlvdXRNb3VudEVmZmVjdHNfY29tcGxldGUoc3VidHJlZVJvb3QsIHJvb3QsIGNvbW1pdHRlZExhbmVzKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPIChPZmZzY3JlZW4pIEFsc28gY2hlY2s6IHN1YnRyZWVGbGFncyAmIExheW91dE1hc2tcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICAgIHZhciB3YXNIaWRkZW4gPSBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgdmFyIG5ld09mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSB3YXNIaWRkZW4gfHwgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW47IC8vIFRyYXZlcnNlIHRoZSBPZmZzY3JlZW4gc3VidHJlZSB3aXRoIHRoZSBjdXJyZW50IE9mZnNjcmVlbiBhcyB0aGUgcm9vdC5cblxuICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBuZXdPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBuZXdPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuXG4gICAgICAgIGlmIChvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuICYmICFwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbikge1xuICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHJvb3Qgb2YgYSByZWFwcGVhcmluZyBib3VuZGFyeS4gVHVybiBpdHMgbGF5b3V0IGVmZmVjdHNcbiAgICAgICAgICAvLyBiYWNrIG9uLlxuICAgICAgICAgIG5leHRFZmZlY3QgPSBmaWJlcjtcbiAgICAgICAgICByZWFwcGVhckxheW91dEVmZmVjdHNfYmVnaW4oZmliZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoaWxkID0gZmlyc3RDaGlsZDtcblxuICAgICAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gY2hpbGQ7XG4gICAgICAgICAgY29tbWl0TGF5b3V0RWZmZWN0c19iZWdpbihjaGlsZCwgLy8gTmV3IHJvb3Q7IGJ1YmJsZSBiYWNrIHVwIHRvIGhlcmUgYW5kIHN0b3AuXG4gICAgICAgICAgcm9vdCwgY29tbWl0dGVkTGFuZXMpO1xuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfSAvLyBSZXN0b3JlIE9mZnNjcmVlbiBzdGF0ZSBhbmQgcmVzdW1lIGluIG91ci1wcm9ncmVzcyB0cmF2ZXJzYWwuXG5cblxuICAgICAgICBuZXh0RWZmZWN0ID0gZmliZXI7XG4gICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW47XG4gICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgY29tbWl0TGF5b3V0TW91bnRFZmZlY3RzX2NvbXBsZXRlKHN1YnRyZWVSb290LCByb290LCBjb21taXR0ZWRMYW5lcyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgoZmliZXIuc3VidHJlZUZsYWdzICYgTGF5b3V0TWFzaykgIT09IE5vRmxhZ3MgJiYgZmlyc3RDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgZmlyc3RDaGlsZC5yZXR1cm4gPSBmaWJlcjtcbiAgICAgIG5leHRFZmZlY3QgPSBmaXJzdENoaWxkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21taXRMYXlvdXRNb3VudEVmZmVjdHNfY29tcGxldGUoc3VidHJlZVJvb3QsIHJvb3QsIGNvbW1pdHRlZExhbmVzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TGF5b3V0TW91bnRFZmZlY3RzX2NvbXBsZXRlKHN1YnRyZWVSb290LCByb290LCBjb21taXR0ZWRMYW5lcykge1xuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaWJlciA9IG5leHRFZmZlY3Q7XG5cbiAgICBpZiAoKGZpYmVyLmZsYWdzICYgTGF5b3V0TWFzaykgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlcihyb290LCBjdXJyZW50LCBmaWJlciwgY29tbWl0dGVkTGFuZXMpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cblxuICAgIGlmIChmaWJlciA9PT0gc3VidHJlZVJvb3QpIHtcbiAgICAgIG5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzaWJsaW5nID0gZmliZXIuc2libGluZztcblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBzaWJsaW5nLnJldHVybiA9IGZpYmVyLnJldHVybjtcbiAgICAgIG5leHRFZmZlY3QgPSBzaWJsaW5nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5leHRFZmZlY3QgPSBmaWJlci5yZXR1cm47XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzYXBwZWFyTGF5b3V0RWZmZWN0c19iZWdpbihzdWJ0cmVlUm9vdCkge1xuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaWJlciA9IG5leHRFZmZlY3Q7XG4gICAgdmFyIGZpcnN0Q2hpbGQgPSBmaWJlci5jaGlsZDsgLy8gVE9ETyAoT2Zmc2NyZWVuKSBDaGVjazogZmxhZ3MgJiAoUmVmU3RhdGljIHwgTGF5b3V0U3RhdGljKVxuXG4gICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIGZpYmVyLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3RhcnRMYXlvdXRFZmZlY3RUaW1lcigpO1xuICAgICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoTGF5b3V0LCBmaWJlciwgZmliZXIucmV0dXJuKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIHJlY29yZExheW91dEVmZmVjdER1cmF0aW9uKGZpYmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KExheW91dCwgZmliZXIsIGZpYmVyLnJldHVybik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFRPRE8gKE9mZnNjcmVlbikgQ2hlY2s6IGZsYWdzICYgUmVmU3RhdGljXG4gICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpYmVyLCBmaWJlci5yZXR1cm4pO1xuICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChmaWJlciwgZmliZXIucmV0dXJuLCBpbnN0YW5jZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpYmVyLCBmaWJlci5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhXG4gICAgICAgICAgdmFyIGlzSGlkZGVuID0gZmliZXIubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgICAgLy8gTmVzdGVkIE9mZnNjcmVlbiB0cmVlIGlzIGFscmVhZHkgaGlkZGVuLiBEb24ndCBkaXNhcHBlYXJcbiAgICAgICAgICAgIC8vIGl0cyBlZmZlY3RzLlxuICAgICAgICAgICAgZGlzYXBwZWFyTGF5b3V0RWZmZWN0c19jb21wbGV0ZShzdWJ0cmVlUm9vdCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0gLy8gVE9ETyAoT2Zmc2NyZWVuKSBDaGVjazogc3VidHJlZUZsYWdzICYgTGF5b3V0U3RhdGljXG5cblxuICAgIGlmIChmaXJzdENoaWxkICE9PSBudWxsKSB7XG4gICAgICBmaXJzdENoaWxkLnJldHVybiA9IGZpYmVyO1xuICAgICAgbmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc2FwcGVhckxheW91dEVmZmVjdHNfY29tcGxldGUoc3VidHJlZVJvb3QpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNhcHBlYXJMYXlvdXRFZmZlY3RzX2NvbXBsZXRlKHN1YnRyZWVSb290KSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpYmVyID0gbmV4dEVmZmVjdDtcblxuICAgIGlmIChmaWJlciA9PT0gc3VidHJlZVJvb3QpIHtcbiAgICAgIG5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzaWJsaW5nID0gZmliZXIuc2libGluZztcblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBzaWJsaW5nLnJldHVybiA9IGZpYmVyLnJldHVybjtcbiAgICAgIG5leHRFZmZlY3QgPSBzaWJsaW5nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5leHRFZmZlY3QgPSBmaWJlci5yZXR1cm47XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhcHBlYXJMYXlvdXRFZmZlY3RzX2JlZ2luKHN1YnRyZWVSb290KSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpYmVyID0gbmV4dEVmZmVjdDtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gICAgaWYgKGZpYmVyLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50KSB7XG4gICAgICB2YXIgaXNIaWRkZW4gPSBmaWJlci5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgLy8gTmVzdGVkIE9mZnNjcmVlbiB0cmVlIGlzIHN0aWxsIGhpZGRlbi4gRG9uJ3QgcmUtYXBwZWFyIGl0cyBlZmZlY3RzLlxuICAgICAgICByZWFwcGVhckxheW91dEVmZmVjdHNfY29tcGxldGUoc3VidHJlZVJvb3QpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9IC8vIFRPRE8gKE9mZnNjcmVlbikgQ2hlY2s6IHN1YnRyZWVGbGFncyAmIExheW91dFN0YXRpY1xuXG5cbiAgICBpZiAoZmlyc3RDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBub2RlIG1heSBoYXZlIGJlZW4gcmV1c2VkIGZyb20gYSBwcmV2aW91cyByZW5kZXIsIHNvIHdlIGNhbid0XG4gICAgICAvLyBhc3N1bWUgaXRzIHJldHVybiBwb2ludGVyIGlzIGNvcnJlY3QuXG4gICAgICBmaXJzdENoaWxkLnJldHVybiA9IGZpYmVyO1xuICAgICAgbmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYXBwZWFyTGF5b3V0RWZmZWN0c19jb21wbGV0ZShzdWJ0cmVlUm9vdCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYXBwZWFyTGF5b3V0RWZmZWN0c19jb21wbGV0ZShzdWJ0cmVlUm9vdCkge1xuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaWJlciA9IG5leHRFZmZlY3Q7IC8vIFRPRE8gKE9mZnNjcmVlbikgQ2hlY2s6IGZsYWdzICYgTGF5b3V0U3RhdGljXG5cbiAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlYXBwZWFyTGF5b3V0RWZmZWN0c09uRmliZXIoZmliZXIpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZmliZXIucmV0dXJuLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcblxuICAgIGlmIChmaWJlciA9PT0gc3VidHJlZVJvb3QpIHtcbiAgICAgIG5leHRFZmZlY3QgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzaWJsaW5nID0gZmliZXIuc2libGluZztcblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIG5vZGUgbWF5IGhhdmUgYmVlbiByZXVzZWQgZnJvbSBhIHByZXZpb3VzIHJlbmRlciwgc28gd2UgY2FuJ3RcbiAgICAgIC8vIGFzc3VtZSBpdHMgcmV0dXJuIHBvaW50ZXIgaXMgY29ycmVjdC5cbiAgICAgIHNpYmxpbmcucmV0dXJuID0gZmliZXIucmV0dXJuO1xuICAgICAgbmV4dEVmZmVjdCA9IHNpYmxpbmc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV4dEVmZmVjdCA9IGZpYmVyLnJldHVybjtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQYXNzaXZlTW91bnRFZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMsIGNvbW1pdHRlZFRyYW5zaXRpb25zKSB7XG4gIG5leHRFZmZlY3QgPSBmaW5pc2hlZFdvcms7XG4gIGNvbW1pdFBhc3NpdmVNb3VudEVmZmVjdHNfYmVnaW4oZmluaXNoZWRXb3JrLCByb290LCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBjb21taXRQYXNzaXZlTW91bnRFZmZlY3RzX2JlZ2luKHN1YnRyZWVSb290LCByb290LCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0O1xuICAgIHZhciBmaXJzdENoaWxkID0gZmliZXIuY2hpbGQ7XG5cbiAgICBpZiAoKGZpYmVyLnN1YnRyZWVGbGFncyAmIFBhc3NpdmVNYXNrKSAhPT0gTm9GbGFncyAmJiBmaXJzdENoaWxkICE9PSBudWxsKSB7XG4gICAgICBmaXJzdENoaWxkLnJldHVybiA9IGZpYmVyO1xuICAgICAgbmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1pdFBhc3NpdmVNb3VudEVmZmVjdHNfY29tcGxldGUoc3VidHJlZVJvb3QsIHJvb3QsIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVNb3VudEVmZmVjdHNfY29tcGxldGUoc3VidHJlZVJvb3QsIHJvb3QsIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucykge1xuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaWJlciA9IG5leHRFZmZlY3Q7XG5cbiAgICBpZiAoKGZpYmVyLmZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIocm9vdCwgZmliZXIsIGNvbW1pdHRlZExhbmVzLCBjb21taXR0ZWRUcmFuc2l0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaWJlciwgZmliZXIucmV0dXJuLCBlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyID09PSBzdWJ0cmVlUm9vdCkge1xuICAgICAgbmV4dEVmZmVjdCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nO1xuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIHNpYmxpbmcucmV0dXJuID0gZmliZXIucmV0dXJuO1xuICAgICAgbmV4dEVmZmVjdCA9IHNpYmxpbmc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV4dEVmZmVjdCA9IGZpYmVyLnJldHVybjtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrLCBjb21taXR0ZWRMYW5lcywgY29tbWl0dGVkVHJhbnNpdGlvbnMpIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoIGZpbmlzaGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgICBzdGFydFBhc3NpdmVFZmZlY3RUaW1lcigpO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoUGFzc2l2ZSQxIHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICByZWNvcmRQYXNzaXZlRWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChQYXNzaXZlJDEgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmlyc3RDaGlsZCkge1xuICBuZXh0RWZmZWN0ID0gZmlyc3RDaGlsZDtcbiAgY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzX2JlZ2luKCk7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c19iZWdpbigpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0O1xuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gICAgaWYgKChuZXh0RWZmZWN0LmZsYWdzICYgQ2hpbGREZWxldGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHZhciBkZWxldGlvbnMgPSBmaWJlci5kZWxldGlvbnM7XG5cbiAgICAgIGlmIChkZWxldGlvbnMgIT09IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgZmliZXJUb0RlbGV0ZSA9IGRlbGV0aW9uc1tpXTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gZmliZXJUb0RlbGV0ZTtcbiAgICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNJbnNpZGVPZkRlbGV0ZWRUcmVlX2JlZ2luKGZpYmVyVG9EZWxldGUsIGZpYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBBIGZpYmVyIHdhcyBkZWxldGVkIGZyb20gdGhpcyBwYXJlbnQgZmliZXIsIGJ1dCBpdCdzIHN0aWxsIHBhcnQgb2ZcbiAgICAgICAgICAvLyB0aGUgcHJldmlvdXMgKGFsdGVybmF0ZSkgcGFyZW50IGZpYmVyJ3MgbGlzdCBvZiBjaGlsZHJlbi4gQmVjYXVzZVxuICAgICAgICAgIC8vIGNoaWxkcmVuIGFyZSBhIGxpbmtlZCBsaXN0LCBhbiBlYXJsaWVyIHNpYmxpbmcgdGhhdCdzIHN0aWxsIGFsaXZlXG4gICAgICAgICAgLy8gd2lsbCBiZSBjb25uZWN0ZWQgdG8gdGhlIGRlbGV0ZWQgZmliZXIgdmlhIGl0cyBgYWx0ZXJuYXRlYDpcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vICAgbGl2ZSBmaWJlclxuICAgICAgICAgIC8vICAgLS1hbHRlcm5hdGUtLT4gcHJldmlvdXMgbGl2ZSBmaWJlclxuICAgICAgICAgIC8vICAgLS1zaWJsaW5nLS0+IGRlbGV0ZWQgZmliZXJcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFdlIGNhbid0IGRpc2Nvbm5lY3QgYGFsdGVybmF0ZWAgb24gbm9kZXMgdGhhdCBoYXZlbid0IGJlZW4gZGVsZXRlZFxuICAgICAgICAgIC8vIHlldCwgYnV0IHdlIGNhbiBkaXNjb25uZWN0IHRoZSBgc2libGluZ2AgYW5kIGBjaGlsZGAgcG9pbnRlcnMuXG4gICAgICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICBpZiAocHJldmlvdXNGaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGRldGFjaGVkQ2hpbGQgPSBwcmV2aW91c0ZpYmVyLmNoaWxkO1xuXG4gICAgICAgICAgICBpZiAoZGV0YWNoZWRDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBwcmV2aW91c0ZpYmVyLmNoaWxkID0gbnVsbDtcblxuICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgdmFyIGRldGFjaGVkU2libGluZyA9IGRldGFjaGVkQ2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgICBkZXRhY2hlZENoaWxkLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgIGRldGFjaGVkQ2hpbGQgPSBkZXRhY2hlZFNpYmxpbmc7XG4gICAgICAgICAgICAgIH0gd2hpbGUgKGRldGFjaGVkQ2hpbGQgIT09IG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5leHRFZmZlY3QgPSBmaWJlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKGZpYmVyLnN1YnRyZWVGbGFncyAmIFBhc3NpdmVNYXNrKSAhPT0gTm9GbGFncyAmJiBjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgY2hpbGQucmV0dXJuID0gZmliZXI7XG4gICAgICBuZXh0RWZmZWN0ID0gY2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c19jb21wbGV0ZSgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHNfY29tcGxldGUoKSB7XG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpYmVyID0gbmV4dEVmZmVjdDtcblxuICAgIGlmICgoZmliZXIuZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50T25GaWJlcihmaWJlcik7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cblxuICAgIHZhciBzaWJsaW5nID0gZmliZXIuc2libGluZztcblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBzaWJsaW5nLnJldHVybiA9IGZpYmVyLnJldHVybjtcbiAgICAgIG5leHRFZmZlY3QgPSBzaWJsaW5nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5leHRFZmZlY3QgPSBmaWJlci5yZXR1cm47XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKGZpbmlzaGVkV29yaykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGlmICggZmluaXNoZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAgIHN0YXJ0UGFzc2l2ZUVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFBhc3NpdmUkMSB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICByZWNvcmRQYXNzaXZlRWZmZWN0RHVyYXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoUGFzc2l2ZSQxIHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9iZWdpbihkZWxldGVkU3VidHJlZVJvb3QsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0OyAvLyBEZWxldGlvbiBlZmZlY3RzIGZpcmUgaW4gcGFyZW50IC0+IGNoaWxkIG9yZGVyXG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgZmliZXIgaGFzIGEgUGFzc2l2ZVN0YXRpYyBmbGFnXG5cbiAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50SW5zaWRlRGVsZXRlZFRyZWVPbkZpYmVyKGZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkOyAvLyBUT0RPOiBPbmx5IHRyYXZlcnNlIHN1YnRyZWUgaWYgaXQgaGFzIGEgUGFzc2l2ZVN0YXRpYyBmbGFnLiAoQnV0LCBpZiB3ZVxuICAgIC8vIGRvIHRoaXMsIHN0aWxsIG5lZWQgdG8gaGFuZGxlIGBkZWxldGVkVHJlZUNsZWFuVXBMZXZlbGAgY29ycmVjdGx5LilcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgY2hpbGQucmV0dXJuID0gZmliZXI7XG4gICAgICBuZXh0RWZmZWN0ID0gY2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfY29tcGxldGUoZGVsZXRlZFN1YnRyZWVSb290KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRFZmZlY3RzSW5zaWRlT2ZEZWxldGVkVHJlZV9jb21wbGV0ZShkZWxldGVkU3VidHJlZVJvb3QpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmliZXIgPSBuZXh0RWZmZWN0O1xuICAgIHZhciBzaWJsaW5nID0gZmliZXIuc2libGluZztcbiAgICB2YXIgcmV0dXJuRmliZXIgPSBmaWJlci5yZXR1cm47XG5cbiAgICB7XG4gICAgICAvLyBSZWN1cnNpdmVseSB0cmF2ZXJzZSB0aGUgZW50aXJlIGRlbGV0ZWQgdHJlZSBhbmQgY2xlYW4gdXAgZmliZXIgZmllbGRzLlxuICAgICAgLy8gVGhpcyBpcyBtb3JlIGFnZ3Jlc3NpdmUgdGhhbiBpZGVhbCwgYW5kIHRoZSBsb25nIHRlcm0gZ29hbCBpcyB0byBvbmx5XG4gICAgICAvLyBoYXZlIHRvIGRldGFjaCB0aGUgZGVsZXRlZCB0cmVlIGF0IHRoZSByb290LlxuICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZmliZXIpO1xuXG4gICAgICBpZiAoZmliZXIgPT09IGRlbGV0ZWRTdWJ0cmVlUm9vdCkge1xuICAgICAgICBuZXh0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBzaWJsaW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgbmV4dEVmZmVjdCA9IHNpYmxpbmc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV4dEVmZmVjdCA9IHJldHVybkZpYmVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVVbm1vdW50SW5zaWRlRGVsZXRlZFRyZWVPbkZpYmVyKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgc3dpdGNoIChjdXJyZW50LnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKCBjdXJyZW50Lm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAgIHN0YXJ0UGFzc2l2ZUVmZmVjdFRpbWVyKCk7XG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFBhc3NpdmUkMSwgY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICAgICAgcmVjb3JkUGFzc2l2ZUVmZmVjdER1cmF0aW9uKGN1cnJlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChQYXNzaXZlJDEsIGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn0gLy8gVE9ETzogUmV1c2UgcmVhcHBlYXJMYXlvdXRFZmZlY3RzIHRyYXZlcnNhbCBoZXJlP1xuXG5cbmZ1bmN0aW9uIGludm9rZUxheW91dEVmZmVjdE1vdW50SW5ERVYoZmliZXIpIHtcbiAge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmUtY2hlY2sgU3RyaWN0RWZmZWN0c01vZGUgaGVyZS5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIHRoYXQgY2hlY2sgaGFzIGFscmVhZHkgcGFzc2VkLlxuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaWJlcik7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpYmVyLCBmaWJlci5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpYmVyLCBmaWJlci5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VQYXNzaXZlRWZmZWN0TW91bnRJbkRFVihmaWJlcikge1xuICB7XG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZS1jaGVjayBTdHJpY3RFZmZlY3RzTW9kZSBoZXJlLlxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYgdGhhdCBjaGVjayBoYXMgYWxyZWFkeSBwYXNzZWQuXG4gICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChQYXNzaXZlJDEgfCBIYXNFZmZlY3QsIGZpYmVyKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUxheW91dEVmZmVjdFVubW91bnRJbkRFVihmaWJlcikge1xuICB7XG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZS1jaGVjayBTdHJpY3RFZmZlY3RzTW9kZSBoZXJlLlxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgaWYgdGhhdCBjaGVjayBoYXMgYWxyZWFkeSBwYXNzZWQuXG4gICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmliZXIsIGZpYmVyLnJldHVybik7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpYmVyLCBmaWJlci5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGZpYmVyLCBmaWJlci5yZXR1cm4sIGluc3RhbmNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VQYXNzaXZlRWZmZWN0VW5tb3VudEluREVWKGZpYmVyKSB7XG4gIHtcbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlLWNoZWNrIFN0cmljdEVmZmVjdHNNb2RlIGhlcmUuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBpZiB0aGF0IGNoZWNrIGhhcyBhbHJlYWR5IHBhc3NlZC5cbiAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoUGFzc2l2ZSQxIHwgSGFzRWZmZWN0LCBmaWJlciwgZmliZXIucmV0dXJuKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGZpYmVyLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgQ09NUE9ORU5UX1RZUEUgPSAwO1xudmFyIEhBU19QU0VVRE9fQ0xBU1NfVFlQRSA9IDE7XG52YXIgUk9MRV9UWVBFID0gMjtcbnZhciBURVNUX05BTUVfVFlQRSA9IDM7XG52YXIgVEVYVF9UWVBFID0gNDtcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgQ09NUE9ORU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3NlbGVjdG9yLmNvbXBvbmVudCcpO1xuICBIQVNfUFNFVURPX0NMQVNTX1RZUEUgPSBzeW1ib2xGb3IoJ3NlbGVjdG9yLmhhc19wc2V1ZG9fY2xhc3MnKTtcbiAgUk9MRV9UWVBFID0gc3ltYm9sRm9yKCdzZWxlY3Rvci5yb2xlJyk7XG4gIFRFU1RfTkFNRV9UWVBFID0gc3ltYm9sRm9yKCdzZWxlY3Rvci50ZXN0X2lkJyk7XG4gIFRFWFRfVFlQRSA9IHN5bWJvbEZvcignc2VsZWN0b3IudGV4dCcpO1xufVxudmFyIGNvbW1pdEhvb2tzID0gW107XG5mdW5jdGlvbiBvbkNvbW1pdFJvb3QkMSgpIHtcbiAge1xuICAgIGNvbW1pdEhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGNvbW1pdEhvb2spIHtcbiAgICAgIHJldHVybiBjb21taXRIb29rKCk7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudEFjdFF1ZXVlID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QWN0UXVldWU7XG5mdW5jdGlvbiBpc0xlZ2FjeUFjdEVudmlyb25tZW50KGZpYmVyKSB7XG4gIHtcbiAgICAvLyBMZWdhY3kgbW9kZS4gV2UgcHJlc2VydmUgdGhlIGJlaGF2aW9yIG9mIFJlYWN0IDE3J3MgYWN0LiBJdCBhc3N1bWVzIGFuXG4gICAgLy8gYWN0IGVudmlyb25tZW50IHdoZW5ldmVyIGBqZXN0YCBpcyBkZWZpbmVkLCBidXQgeW91IGNhbiBzdGlsbCB0dXJuIG9mZlxuICAgIC8vIHNwdXJpb3VzIHdhcm5pbmdzIGJ5IHNldHRpbmcgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UIGV4cGxpY2l0bHlcbiAgICAvLyB0byBmYWxzZS5cbiAgICB2YXIgaXNSZWFjdEFjdEVudmlyb25tZW50R2xvYmFsID0gLy8gJEZsb3dFeHBlY3RlZEVycm9yIOKAkyBGbG93IGRvZXNuJ3Qga25vdyBhYm91dCBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlQgZ2xvYmFsXG4gICAgdHlwZW9mIElTX1JFQUNUX0FDVF9FTlZJUk9OTUVOVCAhPT0gJ3VuZGVmaW5lZCcgPyBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlQgOiB1bmRlZmluZWQ7IC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIEZsb3cgZG9lc24ndCBrbm93IGFib3V0IGplc3RcblxuICAgIHZhciBqZXN0SXNEZWZpbmVkID0gdHlwZW9mIGplc3QgIT09ICd1bmRlZmluZWQnO1xuICAgIHJldHVybiAgamVzdElzRGVmaW5lZCAmJiBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgIT09IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCgpIHtcbiAge1xuICAgIHZhciBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgPSAvLyAkRmxvd0V4cGVjdGVkRXJyb3Ig4oCTIEZsb3cgZG9lc24ndCBrbm93IGFib3V0IElTX1JFQUNUX0FDVF9FTlZJUk9OTUVOVCBnbG9iYWxcbiAgICB0eXBlb2YgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UICE9PSAndW5kZWZpbmVkJyA/IElTX1JFQUNUX0FDVF9FTlZJUk9OTUVOVCA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghaXNSZWFjdEFjdEVudmlyb25tZW50R2xvYmFsICYmIFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IEluY2x1ZGUgbGluayB0byByZWxldmFudCBkb2N1bWVudGF0aW9uIHBhZ2UuXG4gICAgICBlcnJvcignVGhlIGN1cnJlbnQgdGVzdGluZyBlbnZpcm9ubWVudCBpcyBub3QgY29uZmlndXJlZCB0byBzdXBwb3J0ICcgKyAnYWN0KC4uLiknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNSZWFjdEFjdEVudmlyb25tZW50R2xvYmFsO1xuICB9XG59XG5cbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyLFxuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDMgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxcbiAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QWN0UXVldWU7XG52YXIgTm9Db250ZXh0ID1cbi8qICAgICAgICAgICAgICovXG4wO1xudmFyIEJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgUmVuZGVyQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBDb21taXRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICovXG40O1xudmFyIFJvb3RJblByb2dyZXNzID0gMDtcbnZhciBSb290RmF0YWxFcnJvcmVkID0gMTtcbnZhciBSb290RXJyb3JlZCA9IDI7XG52YXIgUm9vdFN1c3BlbmRlZCA9IDM7XG52YXIgUm9vdFN1c3BlbmRlZFdpdGhEZWxheSA9IDQ7XG52YXIgUm9vdENvbXBsZXRlZCA9IDU7XG52YXIgUm9vdERpZE5vdENvbXBsZXRlID0gNjsgLy8gRGVzY3JpYmVzIHdoZXJlIHdlIGFyZSBpbiB0aGUgUmVhY3QgZXhlY3V0aW9uIHN0YWNrXG5cbnZhciBleGVjdXRpb25Db250ZXh0ID0gTm9Db250ZXh0OyAvLyBUaGUgcm9vdCB3ZSdyZSB3b3JraW5nIG9uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsOyAvLyBUaGUgZmliZXIgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3MgPSBudWxsOyAvLyBUaGUgbGFuZXMgd2UncmUgcmVuZGVyaW5nXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFN0YWNrIHRoYXQgYWxsb3dzIGNvbXBvbmVudHMgdG8gY2hhbmdlIHRoZSByZW5kZXIgbGFuZXMgZm9yIGl0cyBzdWJ0cmVlXG4vLyBUaGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgd29ya2luZyBvbiBhdCB0aGUgcm9vdC4gVGhlIG9ubHlcbi8vIGNhc2Ugd2hlcmUgaXQncyBkaWZmZXJlbnQgZnJvbSBgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNgIGlzIHdoZW4gd2Vcbi8vIGVudGVyIGEgc3VidHJlZSB0aGF0IGlzIGhpZGRlbiBhbmQgbmVlZHMgdG8gYmUgdW5oaWRkZW46IFN1c3BlbnNlIGFuZFxuLy8gT2Zmc2NyZWVuIGNvbXBvbmVudC5cbi8vXG4vLyBNb3N0IHRoaW5ncyBpbiB0aGUgd29yayBsb29wIHNob3VsZCBkZWFsIHdpdGggd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMuXG4vLyBNb3N0IHRoaW5ncyBpbiBiZWdpbi9jb21wbGV0ZSBwaGFzZXMgc2hvdWxkIGRlYWwgd2l0aCBzdWJ0cmVlUmVuZGVyTGFuZXMuXG5cbnZhciBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xudmFyIHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOb0xhbmVzKTsgLy8gV2hldGhlciB0byByb290IGNvbXBsZXRlZCwgZXJyb3JlZCwgc3VzcGVuZGVkLCBldGMuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluUHJvZ3Jlc3M7IC8vIEEgZmF0YWwgZXJyb3IsIGlmIG9uZSBpcyB0aHJvd25cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsOyAvLyBcIkluY2x1ZGVkXCIgbGFuZXMgcmVmZXIgdG8gbGFuZXMgdGhhdCB3ZXJlIHdvcmtlZCBvbiBkdXJpbmcgdGhpcyByZW5kZXIuIEl0J3Ncbi8vIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIGByZW5kZXJMYW5lc2AgYmVjYXVzZSBgcmVuZGVyTGFuZXNgIGNhbiBjaGFuZ2UgYXMgeW91XG4vLyBlbnRlciBhbmQgZXhpdCBhbiBPZmZzY3JlZW4gdHJlZS4gVGhpcyB2YWx1ZSBpcyB0aGUgY29tYmluYXRpb24gb2YgYWxsIHJlbmRlclxuLy8gbGFuZXMgZm9yIHRoZSBlbnRpcmUgcmVuZGVyIHBoYXNlLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSB3b3JrIGxlZnQgb3ZlciBieSBjb21wb25lbnRzIHRoYXQgd2VyZSB2aXNpdGVkIGR1cmluZyB0aGlzIHJlbmRlci4gT25seVxuLy8gaW5jbHVkZXMgdW5wcm9jZXNzZWQgdXBkYXRlcywgbm90IHdvcmsgaW4gYmFpbGVkIG91dCBjaGlsZHJlbi5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBMYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSAoKm5vdCogYW4gaW50ZXJsZWF2ZWQgZXZlbnQpLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzOyAvLyBFcnJvcnMgdGhhdCBhcmUgdGhyb3duIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9IG51bGw7IC8vIFRoZXNlIGFyZSBlcnJvcnMgdGhhdCB3ZSByZWNvdmVyZWQgZnJvbSB3aXRob3V0IHN1cmZhY2luZyB0aGVtIHRvIHRoZSBVSS5cbi8vIFdlIHdpbGwgbG9nIHRoZW0gb25jZSB0aGUgdHJlZSBjb21taXRzLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBudWxsOyAvLyBUaGUgbW9zdCByZWNlbnQgdGltZSB3ZSBjb21taXR0ZWQgYSBmYWxsYmFjay4gVGhpcyBsZXRzIHVzIGVuc3VyZSBhIHRyYWluXG4vLyBtb2RlbCB3aGVyZSB3ZSBkb24ndCBjb21taXQgbmV3IGxvYWRpbmcgc3RhdGVzIGluIHRvbyBxdWljayBzdWNjZXNzaW9uLlxuXG52YXIgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IDA7XG52YXIgRkFMTEJBQ0tfVEhST1RUTEVfTVMgPSA1MDA7IC8vIFRoZSBhYnNvbHV0ZSB0aW1lIGZvciB3aGVuIHdlIHNob3VsZCBzdGFydCBnaXZpbmcgdXAgb24gcmVuZGVyaW5nXG4vLyBtb3JlIGFuZCBwcmVmZXIgQ1BVIHN1c3BlbnNlIGhldXJpc3RpY3MgaW5zdGVhZC5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBJbmZpbml0eTsgLy8gSG93IGxvbmcgYSByZW5kZXIgaXMgc3VwcG9zZWQgdG8gdGFrZSBiZWZvcmUgd2Ugc3RhcnQgZm9sbG93aW5nIENQVVxuLy8gc3VzcGVuc2UgaGV1cmlzdGljcyBhbmQgb3B0IG91dCBvZiByZW5kZXJpbmcgbW9yZSBjb250ZW50LlxuXG52YXIgUkVOREVSX1RJTUVPVVRfTVMgPSA1MDA7XG52YXIgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlc2V0UmVuZGVyVGltZXIoKSB7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBub3coKSArIFJFTkRFUl9USU1FT1VUX01TO1xufVxuXG5mdW5jdGlvbiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZTtcbn1cbnZhciBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG52YXIgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbnZhciBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7IC8vIE9ubHkgdXNlZCB3aGVuIGVuYWJsZVByb2ZpbGVyTmVzdGVkVXBkYXRlU2NoZWR1bGVkSG9vayBpcyB0cnVlO1xudmFyIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG52YXIgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xudmFyIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gTm9MYW5lcztcbnZhciBwZW5kaW5nUGFzc2l2ZVByb2ZpbGVyRWZmZWN0cyA9IFtdO1xudmFyIHBlbmRpbmdQYXNzaXZlVHJhbnNpdGlvbnMgPSBudWxsOyAvLyBVc2UgdGhlc2UgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIG5lc3RlZCB1cGRhdGVzXG5cbnZhciBORVNURURfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xudmFyIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG52YXIgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG52YXIgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCA9IDUwO1xudmFyIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG52YXIgcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGw7IC8vIElmIHR3byB1cGRhdGVzIGFyZSBzY2hlZHVsZWQgd2l0aGluIHRoZSBzYW1lIGV2ZW50LCB3ZSBzaG91bGQgdHJlYXQgdGhlaXJcbi8vIGV2ZW50IHRpbWVzIGFzIHNpbXVsdGFuZW91cywgZXZlbiBpZiB0aGUgYWN0dWFsIGNsb2NrIHRpbWUgaGFzIGFkdmFuY2VkXG4vLyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGwuXG5cbnZhciBjdXJyZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG52YXIgY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgPSBOb0xhbmVzO1xudmFyIGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0V29ya0luUHJvZ3Jlc3NSb290KCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290O1xufVxuZnVuY3Rpb24gcmVxdWVzdEV2ZW50VGltZSgpIHtcbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIFdlJ3JlIGluc2lkZSBSZWFjdCwgc28gaXQncyBmaW5lIHRvIHJlYWQgdGhlIGFjdHVhbCB0aW1lLlxuICAgIHJldHVybiBub3coKTtcbiAgfSAvLyBXZSdyZSBub3QgaW5zaWRlIFJlYWN0LCBzbyB3ZSBtYXkgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIGJyb3dzZXIgZXZlbnQuXG5cblxuICBpZiAoY3VycmVudEV2ZW50VGltZSAhPT0gTm9UaW1lc3RhbXApIHtcbiAgICAvLyBVc2UgdGhlIHNhbWUgc3RhcnQgdGltZSBmb3IgYWxsIHVwZGF0ZXMgdW50aWwgd2UgZW50ZXIgUmVhY3QgYWdhaW4uXG4gICAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG4gIH0gLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlIHNpbmNlIFJlYWN0IHlpZWxkZWQuIENvbXB1dGUgYSBuZXcgc3RhcnQgdGltZS5cblxuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBub3coKTtcbiAgcmV0dXJuIGN1cnJlbnRFdmVudFRpbWU7XG59XG5mdW5jdGlvbiByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcikge1xuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfSBlbHNlIGlmICggKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgLy8gVGhpcyBpcyBhIHJlbmRlciBwaGFzZSB1cGRhdGUuIFRoZXNlIGFyZSBub3Qgb2ZmaWNpYWxseSBzdXBwb3J0ZWQuIFRoZVxuICAgIC8vIG9sZCBiZWhhdmlvciBpcyB0byBnaXZlIHRoaXMgdGhlIHNhbWUgXCJ0aHJlYWRcIiAobGFuZXMpIGFzXG4gICAgLy8gd2hhdGV2ZXIgaXMgY3VycmVudGx5IHJlbmRlcmluZy4gU28gaWYgeW91IGNhbGwgYHNldFN0YXRlYCBvbiBhIGNvbXBvbmVudFxuICAgIC8vIHRoYXQgaGFwcGVucyBsYXRlciBpbiB0aGUgc2FtZSByZW5kZXIsIGl0IHdpbGwgZmx1c2guIElkZWFsbHksIHdlIHdhbnQgdG9cbiAgICAvLyByZW1vdmUgdGhlIHNwZWNpYWwgY2FzZSBhbmQgdHJlYXQgdGhlbSBhcyBpZiB0aGV5IGNhbWUgZnJvbSBhblxuICAgIC8vIGludGVybGVhdmVkIGV2ZW50LiBSZWdhcmRsZXNzLCB0aGlzIHBhdHRlcm4gaXMgbm90IG9mZmljaWFsbHkgc3VwcG9ydGVkLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IgaXMgb25seSBhIGZhbGxiYWNrLiBUaGUgZmxhZyBvbmx5IGV4aXN0cyB1bnRpbCB3ZSBjYW4gcm9sbFxuICAgIC8vIG91dCB0aGUgc2V0U3RhdGUgd2FybmluZywgc2luY2UgZXhpc3RpbmcgY29kZSBtaWdodCBhY2NpZGVudGFsbHkgcmVseSBvblxuICAgIC8vIHRoZSBjdXJyZW50IGJlaGF2aW9yLlxuICAgIHJldHVybiBwaWNrQXJiaXRyYXJ5TGFuZSh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgaXNUcmFuc2l0aW9uID0gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkgIT09IE5vVHJhbnNpdGlvbjtcblxuICBpZiAoaXNUcmFuc2l0aW9uKSB7XG4gICAgaWYgKCBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQzLnRyYW5zaXRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhciB0cmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMy50cmFuc2l0aW9uO1xuXG4gICAgICBpZiAoIXRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMpIHtcbiAgICAgICAgdHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgICAgIH1cblxuICAgICAgdHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5hZGQoZmliZXIpO1xuICAgIH0gLy8gVGhlIGFsZ29yaXRobSBmb3IgYXNzaWduaW5nIGFuIHVwZGF0ZSB0byBhIGxhbmUgc2hvdWxkIGJlIHN0YWJsZSBmb3IgYWxsXG4gICAgLy8gdXBkYXRlcyBhdCB0aGUgc2FtZSBwcmlvcml0eSB3aXRoaW4gdGhlIHNhbWUgZXZlbnQuIFRvIGRvIHRoaXMsIHRoZVxuICAgIC8vIGlucHV0cyB0byB0aGUgYWxnb3JpdGhtIG11c3QgYmUgdGhlIHNhbWUuXG4gICAgLy9cbiAgICAvLyBUaGUgdHJpY2sgd2UgdXNlIGlzIHRvIGNhY2hlIHRoZSBmaXJzdCBvZiBlYWNoIG9mIHRoZXNlIGlucHV0cyB3aXRoaW4gYW5cbiAgICAvLyBldmVudC4gVGhlbiByZXNldCB0aGUgY2FjaGVkIHZhbHVlcyBvbmNlIHdlIGNhbiBiZSBzdXJlIHRoZSBldmVudCBpc1xuICAgIC8vIG92ZXIuIE91ciBoZXVyaXN0aWMgZm9yIHRoYXQgaXMgd2hlbmV2ZXIgd2UgZW50ZXIgYSBjb25jdXJyZW50IHdvcmsgbG9vcC5cblxuXG4gICAgaWYgKGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID09PSBOb0xhbmUpIHtcbiAgICAgIC8vIEFsbCB0cmFuc2l0aW9ucyB3aXRoaW4gdGhlIHNhbWUgZXZlbnQgYXJlIGFzc2lnbmVkIHRoZSBzYW1lIGxhbmUuXG4gICAgICBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSA9IGNsYWltTmV4dFRyYW5zaXRpb25MYW5lKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lO1xuICB9IC8vIFVwZGF0ZXMgb3JpZ2luYXRpbmcgaW5zaWRlIGNlcnRhaW4gUmVhY3QgbWV0aG9kcywgbGlrZSBmbHVzaFN5bmMsIGhhdmVcbiAgLy8gdGhlaXIgcHJpb3JpdHkgc2V0IGJ5IHRyYWNraW5nIGl0IHdpdGggYSBjb250ZXh0IHZhcmlhYmxlLlxuICAvL1xuICAvLyBUaGUgb3BhcXVlIHR5cGUgcmV0dXJuZWQgYnkgdGhlIGhvc3QgY29uZmlnIGlzIGludGVybmFsbHkgYSBsYW5lLCBzbyB3ZSBjYW5cbiAgLy8gdXNlIHRoYXQgZGlyZWN0bHkuXG4gIC8vIFRPRE86IE1vdmUgdGhpcyB0eXBlIGNvbnZlcnNpb24gdG8gdGhlIGV2ZW50IHByaW9yaXR5IG1vZHVsZS5cblxuXG4gIHZhciB1cGRhdGVMYW5lID0gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCk7XG5cbiAgaWYgKHVwZGF0ZUxhbmUgIT09IE5vTGFuZSkge1xuICAgIHJldHVybiB1cGRhdGVMYW5lO1xuICB9IC8vIFRoaXMgdXBkYXRlIG9yaWdpbmF0ZWQgb3V0c2lkZSBSZWFjdC4gQXNrIHRoZSBob3N0IGVudmlyb25tZW50IGZvciBhblxuICAvLyBhcHByb3ByaWF0ZSBwcmlvcml0eSwgYmFzZWQgb24gdGhlIHR5cGUgb2YgZXZlbnQuXG4gIC8vXG4gIC8vIFRoZSBvcGFxdWUgdHlwZSByZXR1cm5lZCBieSB0aGUgaG9zdCBjb25maWcgaXMgaW50ZXJuYWxseSBhIGxhbmUsIHNvIHdlIGNhblxuICAvLyB1c2UgdGhhdCBkaXJlY3RseS5cbiAgLy8gVE9ETzogTW92ZSB0aGlzIHR5cGUgY29udmVyc2lvbiB0byB0aGUgZXZlbnQgcHJpb3JpdHkgbW9kdWxlLlxuXG5cbiAgdmFyIGV2ZW50TGFuZSA9IGdldEN1cnJlbnRFdmVudFByaW9yaXR5KCk7XG4gIHJldHVybiBldmVudExhbmU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RSZXRyeUxhbmUoZmliZXIpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYHJlcXVlc3RVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIOKAlCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICAvLyBTcGVjaWFsIGNhc2VzXG4gIHZhciBtb2RlID0gZmliZXIubW9kZTtcblxuICBpZiAoKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfVxuXG4gIHJldHVybiBjbGFpbU5leHRSZXRyeUxhbmUoKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lLCBldmVudFRpbWUpIHtcbiAgY2hlY2tGb3JOZXN0ZWRVcGRhdGVzKCk7XG5cbiAge1xuICAgIGlmIChpc1J1bm5pbmdJbnNlcnRpb25FZmZlY3QpIHtcbiAgICAgIGVycm9yKCd1c2VJbnNlcnRpb25FZmZlY3QgbXVzdCBub3Qgc2NoZWR1bGUgdXBkYXRlcy4nKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cykge1xuICAgICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgfVxuICB9IC8vIE1hcmsgdGhhdCB0aGUgcm9vdCBoYXMgYSBwZW5kaW5nIHVwZGF0ZS5cblxuXG4gIG1hcmtSb290VXBkYXRlZChyb290LCBsYW5lLCBldmVudFRpbWUpO1xuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0xhbmVzICYmIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgIC8vIFRoaXMgdXBkYXRlIHdhcyBkaXNwYXRjaGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLiBUaGlzIGlzIGEgbWlzdGFrZVxuICAgIC8vIGlmIHRoZSB1cGRhdGUgb3JpZ2luYXRlcyBmcm9tIHVzZXIgc3BhY2UgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBsb2NhbFxuICAgIC8vIGhvb2sgdXBkYXRlcywgd2hpY2ggYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgYW5kIGRvbid0IHJlYWNoIHRoaXNcbiAgICAvLyBmdW5jdGlvbiksIGJ1dCB0aGVyZSBhcmUgc29tZSBpbnRlcm5hbCBSZWFjdCBmZWF0dXJlcyB0aGF0IHVzZSB0aGlzIGFzXG4gICAgLy8gYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBsaWtlIHNlbGVjdGl2ZSBoeWRyYXRpb24uXG4gICAgd2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYoZmliZXIpOyAvLyBUcmFjayBsYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYSBub3JtYWwgdXBkYXRlLCBzY2hlZHVsZWQgZnJvbSBvdXRzaWRlIHRoZSByZW5kZXIgcGhhc2UuIEZvclxuICAgIC8vIGV4YW1wbGUsIGR1cmluZyBhbiBpbnB1dCBldmVudC5cbiAgICB7XG4gICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgYWRkRmliZXJUb0xhbmVzTWFwKHJvb3QsIGZpYmVyLCBsYW5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3YXJuSWZVcGRhdGVzTm90V3JhcHBlZFdpdGhBY3RERVYoZmliZXIpO1xuXG4gICAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgICAgLy8gUmVjZWl2ZWQgYW4gdXBkYXRlIHRvIGEgdHJlZSB0aGF0J3MgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcuIE1hcmtcbiAgICAgIC8vIHRoYXQgdGhlcmUgd2FzIGFuIGludGVybGVhdmVkIHVwZGF0ZSB3b3JrIG9uIHRoaXMgcm9vdC4gVW5sZXNzIHRoZVxuICAgICAgLy8gYGRlZmVyUmVuZGVyUGhhc2VVcGRhdGVUb05leHRCYXRjaGAgZmxhZyBpcyBvZmYgYW5kIHRoaXMgaXMgYSByZW5kZXJcbiAgICAgIC8vIHBoYXNlIHVwZGF0ZS4gSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB0cmVhdCByZW5kZXIgcGhhc2UgdXBkYXRlcyBhcyBpZlxuICAgICAgLy8gdGhleSB3ZXJlIGludGVybGVhdmVkLCBmb3IgYmFja3dhcmRzIGNvbXBhdCByZWFzb25zLlxuICAgICAgaWYgKCAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzLCBsYW5lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkpIHtcbiAgICAgICAgLy8gVGhlIHJvb3QgYWxyZWFkeSBzdXNwZW5kZWQgd2l0aCBhIGRlbGF5LCB3aGljaCBtZWFucyB0aGlzIHJlbmRlclxuICAgICAgICAvLyBkZWZpbml0ZWx5IHdvbid0IGZpbmlzaC4gU2luY2Ugd2UgaGF2ZSBhIG5ldyB1cGRhdGUsIGxldCdzIG1hcmsgaXQgYXNcbiAgICAgICAgLy8gc3VzcGVuZGVkIG5vdywgcmlnaHQgYmVmb3JlIG1hcmtpbmcgdGhlIGluY29taW5nIHVwZGF0ZS4gVGhpcyBoYXMgdGhlXG4gICAgICAgIC8vIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIGFuZCBzd2l0Y2hpbmcgdG8gdGhlIHVwZGF0ZS5cbiAgICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHRoaXMgZG9lc24ndCBvdmVycmlkZSBwaW5ncyB0aGF0IGhhcHBlbiB3aGlsZSB3ZSd2ZVxuICAgICAgICAvLyBhbHJlYWR5IHN0YXJ0ZWQgcmVuZGVyaW5nLlxuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcblxuICAgIGlmIChsYW5lID09PSBTeW5jTGFuZSAmJiBleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQgJiYgKGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSAmJiAvLyBUcmVhdCBgYWN0YCBhcyBpZiBpdCdzIGluc2lkZSBgYmF0Y2hlZFVwZGF0ZXNgLCBldmVuIGluIGxlZ2FjeSBtb2RlLlxuICAgICEoIFJlYWN0Q3VycmVudEFjdFF1ZXVlJDEuaXNCYXRjaGluZ0xlZ2FjeSkpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBzeW5jaHJvbm91cyB3b3JrIG5vdywgdW5sZXNzIHdlJ3JlIGFscmVhZHkgd29ya2luZyBvciBpbnNpZGVcbiAgICAgIC8vIGEgYmF0Y2guIFRoaXMgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUgc2NoZWR1bGVVcGRhdGVPbkZpYmVyIGluc3RlYWQgb2ZcbiAgICAgIC8vIHNjaGVkdWxlQ2FsbGJhY2tGb3JGaWJlciB0byBwcmVzZXJ2ZSB0aGUgYWJpbGl0eSB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAvLyB3aXRob3V0IGltbWVkaWF0ZWx5IGZsdXNoaW5nIGl0LiBXZSBvbmx5IGRvIHRoaXMgZm9yIHVzZXItaW5pdGlhdGVkXG4gICAgICAvLyB1cGRhdGVzLCB0byBwcmVzZXJ2ZSBoaXN0b3JpY2FsIGJlaGF2aW9yIG9mIGxlZ2FjeSBtb2RlLlxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tzT25seUluTGVnYWN5TW9kZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2NoZWR1bGVJbml0aWFsSHlkcmF0aW9uT25Sb290KHJvb3QsIGxhbmUsIGV2ZW50VGltZSkge1xuICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBmb3JrIG9mIHNjaGVkdWxlVXBkYXRlT25GaWJlciB0aGF0IGlzIG9ubHkgdXNlZCB0b1xuICAvLyBzY2hlZHVsZSB0aGUgaW5pdGlhbCBoeWRyYXRpb24gb2YgYSByb290IHRoYXQgaGFzIGp1c3QgYmVlbiBjcmVhdGVkLiBNb3N0XG4gIC8vIG9mIHRoZSBzdHVmZiBpbiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIgY2FuIGJlIHNraXBwZWQuXG4gIC8vXG4gIC8vIFRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcyBzZXBhcmF0ZSBwYXRoLCB0aG91Z2gsIGlzIHRvIGRpc3Rpbmd1aXNoIHRoZVxuICAvLyBpbml0aWFsIGNoaWxkcmVuIGZyb20gc3Vic2VxdWVudCB1cGRhdGVzLiBJbiBmdWxseSBjbGllbnQtcmVuZGVyZWQgcm9vdHNcbiAgLy8gKGNyZWF0ZVJvb3QgaW5zdGVhZCBvZiBoeWRyYXRlUm9vdCksIGFsbCB0b3AtbGV2ZWwgcmVuZGVycyBhcmUgbW9kZWxlZCBhc1xuICAvLyB1cGRhdGVzLCBidXQgaHlkcmF0aW9uIHJvb3RzIGFyZSBzcGVjaWFsIGJlY2F1c2UgdGhlIGluaXRpYWwgcmVuZGVyIG11c3RcbiAgLy8gbWF0Y2ggd2hhdCB3YXMgcmVuZGVyZWQgb24gdGhlIHNlcnZlci5cbiAgdmFyIGN1cnJlbnQgPSByb290LmN1cnJlbnQ7XG4gIGN1cnJlbnQubGFuZXMgPSBsYW5lO1xuICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG59XG5mdW5jdGlvbiBpc1Vuc2FmZUNsYXNzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpIHtcbiAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlbmRlciBwaGFzZSB1cGRhdGUuIE9ubHkgY2FsbGVkIGJ5IGNsYXNzIGNvbXBvbmVudHMsXG4gIC8vIHdoaWNoIHNwZWNpYWwgKGRlcHJlY2F0ZWQpIGJlaGF2aW9yIGZvciBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmUgcHJvcHMuXG4gIHJldHVybiAoLy8gVE9ETzogUmVtb3ZlIG91dGRhdGVkIGRlZmVyUmVuZGVyUGhhc2VVcGRhdGVUb05leHRCYXRjaCBleHBlcmltZW50LiBXZVxuICAgIC8vIGRlY2lkZWQgbm90IHRvIGVuYWJsZSBpdC5cbiAgICAgKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0XG4gICk7XG59IC8vIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHNjaGVkdWxlIGEgdGFzayBmb3IgYSByb290LiBUaGVyZSdzIG9ubHkgb25lIHRhc2sgcGVyXG4vLyByb290OyBpZiBhIHRhc2sgd2FzIGFscmVhZHkgc2NoZWR1bGVkLCB3ZSdsbCBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHByaW9yaXR5XG4vLyBvZiB0aGUgZXhpc3RpbmcgdGFzayBpcyB0aGUgc2FtZSBhcyB0aGUgcHJpb3JpdHkgb2YgdGhlIG5leHQgbGV2ZWwgdGhhdCB0aGVcbi8vIHJvb3QgaGFzIHdvcmsgb24uIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGV2ZXJ5IHVwZGF0ZSwgYW5kIHJpZ2h0IGJlZm9yZVxuLy8gZXhpdGluZyBhIHRhc2suXG5cbmZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBjdXJyZW50VGltZSkge1xuICB2YXIgZXhpc3RpbmdDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTsgLy8gQ2hlY2sgaWYgYW55IGxhbmVzIGFyZSBiZWluZyBzdGFydmVkIGJ5IG90aGVyIHdvcmsuIElmIHNvLCBtYXJrIHRoZW0gYXNcbiAgLy8gZXhwaXJlZCBzbyB3ZSBrbm93IHRvIHdvcmsgb24gdGhvc2UgbmV4dC5cblxuICBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKTsgLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGxhbmVzIHRvIHdvcmsgb24sIGFuZCB0aGVpciBwcmlvcml0eS5cblxuICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7XG5cbiAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogVGhlcmUncyBub3RoaW5nIHRvIHdvcmsgb24uXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxDYWxsYmFjayQxKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgICB9XG5cbiAgICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lO1xuICAgIHJldHVybjtcbiAgfSAvLyBXZSB1c2UgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgbGFuZSB0byByZXByZXNlbnQgdGhlIHByaW9yaXR5IG9mIHRoZSBjYWxsYmFjay5cblxuXG4gIHZhciBuZXdDYWxsYmFja1ByaW9yaXR5ID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShuZXh0TGFuZXMpOyAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHRhc2suIFdlIG1heSBiZSBhYmxlIHRvIHJldXNlIGl0LlxuXG4gIHZhciBleGlzdGluZ0NhbGxiYWNrUHJpb3JpdHkgPSByb290LmNhbGxiYWNrUHJpb3JpdHk7XG5cbiAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9PT0gbmV3Q2FsbGJhY2tQcmlvcml0eSAmJiAvLyBTcGVjaWFsIGNhc2UgcmVsYXRlZCB0byBgYWN0YC4gSWYgdGhlIGN1cnJlbnRseSBzY2hlZHVsZWQgdGFzayBpcyBhXG4gIC8vIFNjaGVkdWxlciB0YXNrLCByYXRoZXIgdGhhbiBhbiBgYWN0YCB0YXNrLCBjYW5jZWwgaXQgYW5kIHJlLXNjaGVkdWxlZFxuICAvLyBvbiB0aGUgYGFjdGAgcXVldWUuXG4gICEoIFJlYWN0Q3VycmVudEFjdFF1ZXVlJDEuY3VycmVudCAhPT0gbnVsbCAmJiBleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gZmFrZUFjdENhbGxiYWNrTm9kZSkpIHtcbiAgICB7XG4gICAgICAvLyBJZiB3ZSdyZSBnb2luZyB0byByZS11c2UgYW4gZXhpc3RpbmcgdGFzaywgaXQgbmVlZHMgdG8gZXhpc3QuXG4gICAgICAvLyBBc3N1bWUgdGhhdCBkaXNjcmV0ZSB1cGRhdGUgbWljcm90YXNrcyBhcmUgbm9uLWNhbmNlbGxhYmxlIGFuZCBudWxsLlxuICAgICAgLy8gVE9ETzogVGVtcG9yYXJ5IHVudGlsIHdlIGNvbmZpcm0gdGhpcyB3YXJuaW5nIGlzIG5vdCBmaXJlZC5cbiAgICAgIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSA9PSBudWxsICYmIGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSAhPT0gU3luY0xhbmUpIHtcbiAgICAgICAgZXJyb3IoJ0V4cGVjdGVkIHNjaGVkdWxlZCBjYWxsYmFjayB0byBleGlzdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBwcmlvcml0eSBoYXNuJ3QgY2hhbmdlZC4gV2UgY2FuIHJldXNlIHRoZSBleGlzdGluZyB0YXNrLiBFeGl0LlxuXG5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZXhpc3RpbmdDYWxsYmFja05vZGUgIT0gbnVsbCkge1xuICAgIC8vIENhbmNlbCB0aGUgZXhpc3RpbmcgY2FsbGJhY2suIFdlJ2xsIHNjaGVkdWxlIGEgbmV3IG9uZSBiZWxvdy5cbiAgICBjYW5jZWxDYWxsYmFjayQxKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgfSAvLyBTY2hlZHVsZSBhIG5ldyBjYWxsYmFjay5cblxuXG4gIHZhciBuZXdDYWxsYmFja05vZGU7XG5cbiAgaWYgKG5ld0NhbGxiYWNrUHJpb3JpdHkgPT09IFN5bmNMYW5lKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBTeW5jIFJlYWN0IGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIG9uIGEgc3BlY2lhbFxuICAgIC8vIGludGVybmFsIHF1ZXVlXG4gICAgaWYgKHJvb3QudGFnID09PSBMZWdhY3lSb290KSB7XG4gICAgICBpZiAoIFJlYWN0Q3VycmVudEFjdFF1ZXVlJDEuaXNCYXRjaGluZ0xlZ2FjeSAhPT0gbnVsbCkge1xuICAgICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQxLmRpZFNjaGVkdWxlTGVnYWN5VXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGVMZWdhY3lTeW5jQ2FsbGJhY2socGVyZm9ybVN5bmNXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZVN5bmNDYWxsYmFjayhwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gRmx1c2ggdGhlIHF1ZXVlIGluIGEgbWljcm90YXNrLlxuICAgICAgaWYgKCBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQxLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSW5zaWRlIGBhY3RgLCB1c2Ugb3VyIGludGVybmFsIGBhY3RgIHF1ZXVlIHNvIHRoYXQgdGhlc2UgZ2V0IGZsdXNoZWRcbiAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzY29wZSBldmVuIHdoZW4gdXNpbmcgdGhlIHN5bmMgdmVyc2lvblxuICAgICAgICAvLyBvZiBgYWN0YC5cbiAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUkMS5jdXJyZW50LnB1c2goZmx1c2hTeW5jQ2FsbGJhY2tzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBJbiBTYWZhcmksIGFwcGVuZGluZyBhbiBpZnJhbWUgZm9yY2VzIG1pY3JvdGFza3MgdG8gcnVuLlxuICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMjI0NTlcbiAgICAgICAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHJ1bm5pbmcgY2FsbGJhY2tzIGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyXG4gICAgICAgICAgLy8gb3IgY29tbWl0IHNvIHdlIG5lZWQgdG8gY2hlY2sgYWdhaW5zdCB0aGF0LlxuICAgICAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHdvdWxkIHN0aWxsIHByZW1hdHVyZWx5IGZsdXNoIHRoZSBjYWxsYmFja3NcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaGFwcGVucyBvdXRzaWRlIHJlbmRlciBvciBjb21taXQgcGhhc2UgKGUuZy4gaW4gYW4gZXZlbnQpLlxuICAgICAgICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXdDYWxsYmFja05vZGUgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHZhciBzY2hlZHVsZXJQcmlvcml0eUxldmVsO1xuXG4gICAgc3dpdGNoIChsYW5lc1RvRXZlbnRQcmlvcml0eShuZXh0TGFuZXMpKSB7XG4gICAgICBjYXNlIERpc2NyZXRlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IEltbWVkaWF0ZVByaW9yaXR5O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBDb250aW51b3VzRXZlbnRQcmlvcml0eTpcbiAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBEZWZhdWx0RXZlbnRQcmlvcml0eTpcbiAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBJZGxlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCA9IElkbGVQcmlvcml0eTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHNjaGVkdWxlclByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayQxKHNjaGVkdWxlclByaW9yaXR5TGV2ZWwsIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfVxuXG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IG5ld0NhbGxiYWNrUHJpb3JpdHk7XG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbmV3Q2FsbGJhY2tOb2RlO1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZXZlcnkgY29uY3VycmVudCB0YXNrLCBpLmUuIGFueXRoaW5nIHRoYXRcbi8vIGdvZXMgdGhyb3VnaCBTY2hlZHVsZXIuXG5cblxuZnVuY3Rpb24gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KHJvb3QsIGRpZFRpbWVvdXQpIHtcbiAge1xuICAgIHJlc2V0TmVzdGVkVXBkYXRlRmxhZygpO1xuICB9IC8vIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gYSBSZWFjdCBldmVudCwgd2UgY2FuIGNsZWFyIHRoZSBjdXJyZW50XG4gIC8vIGV2ZW50IHRpbWUuIFRoZSBuZXh0IHVwZGF0ZSB3aWxsIGNvbXB1dGUgYSBuZXcgZXZlbnQgdGltZS5cblxuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbiAgY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgPSBOb0xhbmVzO1xuXG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLicpO1xuICB9IC8vIEZsdXNoIGFueSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cyBiZWZvcmUgZGVjaWRpbmcgd2hpY2ggbGFuZXMgdG8gd29yayBvbixcbiAgLy8gaW4gY2FzZSB0aGV5IHNjaGVkdWxlIGFkZGl0aW9uYWwgd29yay5cblxuXG4gIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICB2YXIgZGlkRmx1c2hQYXNzaXZlRWZmZWN0cyA9IGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcblxuICBpZiAoZGlkRmx1c2hQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcGFzc2l2ZSBlZmZlY3QgcGhhc2UgbWF5IGhhdmUgY2FuY2VsZWQgdGhlIGN1cnJlbnQgdGFzay5cbiAgICAvLyBDaGVjayBpZiB0aGUgdGFzayBub2RlIGZvciB0aGlzIHJvb3Qgd2FzIGNoYW5nZWQuXG4gICAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdGFzayB3YXMgY2FuY2VsZWQuIEV4aXQuIFdlIGRvbid0IG5lZWQgdG8gY2FsbFxuICAgICAgLy8gYGVuc3VyZVJvb3RJc1NjaGVkdWxlZGAgYmVjYXVzZSB0aGUgY2hlY2sgYWJvdmUgaW1wbGllcyBlaXRoZXIgdGhhdFxuICAgICAgLy8gdGhlcmUncyBhIG5ldyB0YXNrLCBvciB0aGF0IHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IC8vIERldGVybWluZSB0aGUgbmV4dCBsYW5lcyB0byB3b3JrIG9uLCB1c2luZyB0aGUgZmllbGRzIHN0b3JlZFxuICAvLyBvbiB0aGUgcm9vdC5cblxuXG4gIHZhciBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA6IE5vTGFuZXMpO1xuXG4gIGlmIChsYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIERlZmVuc2l2ZSBjb2RpbmcuIFRoaXMgaXMgbmV2ZXIgZXhwZWN0ZWQgdG8gaGFwcGVuLlxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFdlIGRpc2FibGUgdGltZS1zbGljaW5nIGluIHNvbWUgY2FzZXM6IGlmIHRoZSB3b3JrIGhhcyBiZWVuIENQVS1ib3VuZFxuICAvLyBmb3IgdG9vIGxvbmcgKFwiZXhwaXJlZFwiIHdvcmssIHRvIHByZXZlbnQgc3RhcnZhdGlvbiksIG9yIHdlJ3JlIGluXG4gIC8vIHN5bmMtdXBkYXRlcy1ieS1kZWZhdWx0IG1vZGUuXG4gIC8vIFRPRE86IFdlIG9ubHkgY2hlY2sgYGRpZFRpbWVvdXRgIGRlZmVuc2l2ZWx5LCB0byBhY2NvdW50IGZvciBhIFNjaGVkdWxlclxuICAvLyBidWcgd2UncmUgc3RpbGwgaW52ZXN0aWdhdGluZy4gT25jZSB0aGUgYnVnIGluIFNjaGVkdWxlciBpcyBmaXhlZCxcbiAgLy8gd2UgY2FuIHJlbW92ZSB0aGlzLCBzaW5jZSB3ZSB0cmFjayBleHBpcmF0aW9uIG91cnNlbHZlcy5cblxuXG4gIHZhciBzaG91bGRUaW1lU2xpY2UgPSAhaW5jbHVkZXNCbG9ja2luZ0xhbmUocm9vdCwgbGFuZXMpICYmICFpbmNsdWRlc0V4cGlyZWRMYW5lKHJvb3QsIGxhbmVzKSAmJiAoICFkaWRUaW1lb3V0KTtcbiAgdmFyIGV4aXRTdGF0dXMgPSBzaG91bGRUaW1lU2xpY2UgPyByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcykgOiByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG5cbiAgaWYgKGV4aXRTdGF0dXMgIT09IFJvb3RJblByb2dyZXNzKSB7XG4gICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgICAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGxcbiAgICAgIC8vIHJlbmRlciBzeW5jaHJvbm91c2x5IHRvIGJsb2NrIGNvbmN1cnJlbnQgZGF0YSBtdXRhdGlvbnMsIGFuZCB3ZSdsbFxuICAgICAgLy8gaW5jbHVkZXMgYWxsIHBlbmRpbmcgdXBkYXRlcyBhcmUgaW5jbHVkZWQuIElmIGl0IHN0aWxsIGZhaWxzIGFmdGVyXG4gICAgICAvLyB0aGUgc2Vjb25kIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG4gICAgICB2YXIgZXJyb3JSZXRyeUxhbmVzID0gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCk7XG5cbiAgICAgIGlmIChlcnJvclJldHJ5TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgbGFuZXMgPSBlcnJvclJldHJ5TGFuZXM7XG4gICAgICAgIGV4aXRTdGF0dXMgPSByZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvcihyb290LCBlcnJvclJldHJ5TGFuZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgICB2YXIgZmF0YWxFcnJvciA9IHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3I7XG4gICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgICAgIHRocm93IGZhdGFsRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3REaWROb3RDb21wbGV0ZSkge1xuICAgICAgLy8gVGhlIHJlbmRlciB1bndvdW5kIHdpdGhvdXQgY29tcGxldGluZyB0aGUgdHJlZS4gVGhpcyBoYXBwZW5zIGluIHNwZWNpYWxcbiAgICAgIC8vIGNhc2VzIHdoZXJlIG5lZWQgdG8gZXhpdCB0aGUgY3VycmVudCByZW5kZXIgd2l0aG91dCBwcm9kdWNpbmcgYVxuICAgICAgLy8gY29uc2lzdGVudCB0cmVlIG9yIGNvbW1pdHRpbmcuXG4gICAgICAvL1xuICAgICAgLy8gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gZHVyaW5nIGEgY29uY3VycmVudCByZW5kZXIsIG5vdCBhIGRpc2NyZXRlIG9yXG4gICAgICAvLyBzeW5jaHJvbm91cyB1cGRhdGUuIFdlIHNob3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCBmb3IgdGhpcyB3aGVuIHdlXG4gICAgICAvLyB1bndvdW5kIHRoZSBzdGFjay5cbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcmVuZGVyIGNvbXBsZXRlZC5cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgcmVuZGVyIG1heSBoYXZlIHlpZWxkZWQgdG8gYSBjb25jdXJyZW50IGV2ZW50LCBhbmQgaWYgc28sXG4gICAgICAvLyBjb25maXJtIHRoYXQgYW55IG5ld2x5IHJlbmRlcmVkIHN0b3JlcyBhcmUgY29uc2lzdGVudC5cbiAgICAgIC8vIFRPRE86IEl0J3MgcG9zc2libGUgdGhhdCBldmVuIGEgY29uY3VycmVudCByZW5kZXIgbWF5IG5ldmVyIGhhdmUgeWllbGRlZFxuICAgICAgLy8gdG8gdGhlIG1haW4gdGhyZWFkLCBpZiBpdCB3YXMgZmFzdCBlbm91Z2gsIG9yIGlmIGl0IGV4cGlyZWQuIFdlIGNvdWxkXG4gICAgICAvLyBza2lwIHRoZSBjb25zaXN0ZW5jeSBjaGVjayBpbiB0aGF0IGNhc2UsIHRvby5cbiAgICAgIHZhciByZW5kZXJXYXNDb25jdXJyZW50ID0gIWluY2x1ZGVzQmxvY2tpbmdMYW5lKHJvb3QsIGxhbmVzKTtcbiAgICAgIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAocmVuZGVyV2FzQ29uY3VycmVudCAmJiAhaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGZpbmlzaGVkV29yaykpIHtcbiAgICAgICAgLy8gQSBzdG9yZSB3YXMgbXV0YXRlZCBpbiBhbiBpbnRlcmxlYXZlZCBldmVudC4gUmVuZGVyIGFnYWluLFxuICAgICAgICAvLyBzeW5jaHJvbm91c2x5LCB0byBibG9jayBmdXJ0aGVyIG11dGF0aW9ucy5cbiAgICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTsgLy8gV2UgbmVlZCB0byBjaGVjayBhZ2FpbiBpZiBzb21ldGhpbmcgdGhyZXdcblxuICAgICAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICAgICAgICB2YXIgX2Vycm9yUmV0cnlMYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpO1xuXG4gICAgICAgICAgaWYgKF9lcnJvclJldHJ5TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgIGxhbmVzID0gX2Vycm9yUmV0cnlMYW5lcztcbiAgICAgICAgICAgIGV4aXRTdGF0dXMgPSByZWNvdmVyRnJvbUNvbmN1cnJlbnRFcnJvcihyb290LCBfZXJyb3JSZXRyeUxhbmVzKTsgLy8gV2UgYXNzdW1lIHRoZSB0cmVlIGlzIG5vdyBjb25zaXN0ZW50IGJlY2F1c2Ugd2UgZGlkbid0IHlpZWxkIHRvIGFueVxuICAgICAgICAgICAgLy8gY29uY3VycmVudCBldmVudHMuXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICAgICAgICB2YXIgX2ZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgICAgICAgdGhyb3cgX2ZhdGFsRXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIFRoZSBuZXh0IHN0ZXAgaXMgZWl0aGVyIHRvIGNvbW1pdCBpdCxcbiAgICAgIC8vIG9yLCBpZiBzb21ldGhpbmcgc3VzcGVuZGVkLCB3YWl0IHRvIGNvbW1pdCBpdCBhZnRlciBhIHRpbWVvdXQuXG5cblxuICAgICAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gICAgICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgICAgIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgbGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG5cbiAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlID09PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgIC8vIFRoZSB0YXNrIG5vZGUgc2NoZWR1bGVkIGZvciB0aGlzIHJvb3QgaXMgdGhlIHNhbWUgb25lIHRoYXQnc1xuICAgIC8vIGN1cnJlbnRseSBleGVjdXRlZC4gTmVlZCB0byByZXR1cm4gYSBjb250aW51YXRpb24uXG4gICAgcmV0dXJuIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHJlY292ZXJGcm9tQ29uY3VycmVudEVycm9yKHJvb3QsIGVycm9yUmV0cnlMYW5lcykge1xuICAvLyBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgaHlkcmF0aW9uLCBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbFxuICAvLyBiYWNrIHRvIGNsaWVudCBzaWRlIHJlbmRlci5cbiAgLy8gQmVmb3JlIHJlbmRlcmluZyBhZ2Fpbiwgc2F2ZSB0aGUgZXJyb3JzIGZyb20gdGhlIHByZXZpb3VzIGF0dGVtcHQuXG4gIHZhciBlcnJvcnNGcm9tRmlyc3RBdHRlbXB0ID0gd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycztcblxuICBpZiAoaXNSb290RGVoeWRyYXRlZChyb290KSkge1xuICAgIC8vIFRoZSBzaGVsbCBmYWlsZWQgdG8gaHlkcmF0ZS4gU2V0IGEgZmxhZyB0byBmb3JjZSBhIGNsaWVudCByZW5kZXJpbmdcbiAgICAvLyBkdXJpbmcgdGhlIG5leHQgYXR0ZW1wdC4gVG8gZG8gdGhpcywgd2UgY2FsbCBwcmVwYXJlRnJlc2hTdGFjayBub3dcbiAgICAvLyB0byBjcmVhdGUgdGhlIHJvb3Qgd29yay1pbi1wcm9ncmVzcyBmaWJlci4gVGhpcyBpcyBhIGJpdCB3ZWlyZCBpbiB0ZXJtc1xuICAgIC8vIG9mIGZhY3RvcmluZywgYmVjYXVzZSBpdCByZWxpZXMgb24gcmVuZGVyUm9vdFN5bmMgbm90IGNhbGxpbmdcbiAgICAvLyBwcmVwYXJlRnJlc2hTdGFjayBhZ2FpbiBpbiB0aGUgY2FsbCBiZWxvdywgd2hpY2ggaGFwcGVucyBiZWNhdXNlIHRoZVxuICAgIC8vIHJvb3QgYW5kIGxhbmVzIGhhdmVuJ3QgY2hhbmdlZC5cbiAgICAvL1xuICAgIC8vIFRPRE86IEkgdGhpbmsgd2hhdCB3ZSBzaG91bGQgZG8gaXMgc2V0IEZvcmNlQ2xpZW50UmVuZGVyIGluc2lkZVxuICAgIC8vIHRocm93RXhjZXB0aW9uLCBsaWtlIHdlIGRvIGZvciBuZXN0ZWQgU3VzcGVuc2UgYm91bmRhcmllcy4gVGhlIHJlYXNvblxuICAgIC8vIGl0J3MgaGVyZSBpbnN0ZWFkIGlzIHNvIHdlIGNhbiBzd2l0Y2ggdG8gdGhlIHN5bmNocm9ub3VzIHdvcmsgbG9vcCwgdG9vLlxuICAgIC8vIFNvbWV0aGluZyB0byBjb25zaWRlciBmb3IgYSBmdXR1cmUgcmVmYWN0b3IuXG4gICAgdmFyIHJvb3RXb3JrSW5Qcm9ncmVzcyA9IHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGVycm9yUmV0cnlMYW5lcyk7XG4gICAgcm9vdFdvcmtJblByb2dyZXNzLmZsYWdzIHw9IEZvcmNlQ2xpZW50UmVuZGVyO1xuXG4gICAge1xuICAgICAgZXJyb3JIeWRyYXRpbmdDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGVycm9yUmV0cnlMYW5lcyk7XG5cbiAgaWYgKGV4aXRTdGF0dXMgIT09IFJvb3RFcnJvcmVkKSB7XG4gICAgLy8gU3VjY2Vzc2Z1bGx5IGZpbmlzaGVkIHJlbmRlcmluZyBvbiByZXRyeVxuICAgIC8vIFRoZSBlcnJvcnMgZnJvbSB0aGUgZmFpbGVkIGZpcnN0IGF0dGVtcHQgaGF2ZSBiZWVuIHJlY292ZXJlZC4gQWRkXG4gICAgLy8gdGhlbSB0byB0aGUgY29sbGVjdGlvbiBvZiByZWNvdmVyYWJsZSBlcnJvcnMuIFdlJ2xsIGxvZyB0aGVtIGluIHRoZVxuICAgIC8vIGNvbW1pdCBwaGFzZS5cbiAgICB2YXIgZXJyb3JzRnJvbVNlY29uZEF0dGVtcHQgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycztcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IGVycm9yc0Zyb21GaXJzdEF0dGVtcHQ7IC8vIFRoZSBlcnJvcnMgZnJvbSB0aGUgc2Vjb25kIGF0dGVtcHQgc2hvdWxkIGJlIHF1ZXVlZCBhZnRlciB0aGUgZXJyb3JzXG4gICAgLy8gZnJvbSB0aGUgZmlyc3QgYXR0ZW1wdCwgdG8gcHJlc2VydmUgdGhlIGNhdXNhbCBzZXF1ZW5jZS5cblxuICAgIGlmIChlcnJvcnNGcm9tU2Vjb25kQXR0ZW1wdCAhPT0gbnVsbCkge1xuICAgICAgcXVldWVSZWNvdmVyYWJsZUVycm9ycyhlcnJvcnNGcm9tU2Vjb25kQXR0ZW1wdCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4aXRTdGF0dXM7XG59XG5cbmZ1bmN0aW9uIHF1ZXVlUmVjb3ZlcmFibGVFcnJvcnMoZXJyb3JzKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9PT0gbnVsbCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gZXJyb3JzO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLnB1c2guYXBwbHkod29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMsIGVycm9ycyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBsYW5lcykge1xuICBzd2l0Y2ggKGV4aXRTdGF0dXMpIHtcbiAgICBjYXNlIFJvb3RJblByb2dyZXNzOlxuICAgIGNhc2UgUm9vdEZhdGFsRXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb290IGRpZCBub3QgY29tcGxldGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgICB9XG4gICAgLy8gRmxvdyBrbm93cyBhYm91dCBpbnZhcmlhbnQsIHNvIGl0IGNvbXBsYWlucyBpZiBJIGFkZCBhIGJyZWFrXG4gICAgLy8gc3RhdGVtZW50LCBidXQgZXNsaW50IGRvZXNuJ3Qga25vdyBhYm91dCBpbnZhcmlhbnQsIHNvIGl0IGNvbXBsYWluc1xuICAgIC8vIGlmIEkgZG8uIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuXG4gICAgY2FzZSBSb290RXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gcmV0cnkgdGhpcyB0cmVlLiBJZiB3ZSByZWFjaGVkXG4gICAgICAgIC8vIHRoaXMgcG9pbnQsIGl0IGVycm9yZWQgYWdhaW4uIENvbW1pdCBpdC5cbiAgICAgICAgY29tbWl0Um9vdChyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycywgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290U3VzcGVuZGVkOlxuICAgICAge1xuICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTsgLy8gV2UgaGF2ZSBhbiBhY2NlcHRhYmxlIGxvYWRpbmcgc3RhdGUuIFdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZVxuICAgICAgICAvLyBzaG91bGQgaW1tZWRpYXRlbHkgY29tbWl0IGl0IG9yIHdhaXQgYSBiaXQuXG5cbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpICYmIC8vIGRvIG5vdCBkZWxheSBpZiB3ZSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGVcbiAgICAgICAgIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyByZW5kZXIgb25seSBpbmNsdWRlZCByZXRyaWVzLCBubyB1cGRhdGVzLiBUaHJvdHRsZSBjb21taXR0aW5nXG4gICAgICAgICAgLy8gcmV0cmllcyBzbyB0aGF0IHdlIGRvbid0IHNob3cgdG9vIG1hbnkgbG9hZGluZyBzdGF0ZXMgdG9vIHF1aWNrbHkuXG4gICAgICAgICAgdmFyIG1zVW50aWxUaW1lb3V0ID0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSArIEZBTExCQUNLX1RIUk9UVExFX01TIC0gbm93KCk7IC8vIERvbid0IGJvdGhlciB3aXRoIGEgdmVyeSBzaG9ydCBzdXNwZW5zZSB0aW1lLlxuXG4gICAgICAgICAgaWYgKG1zVW50aWxUaW1lb3V0ID4gMTApIHtcbiAgICAgICAgICAgIHZhciBuZXh0TGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICAgICAgLy8gVGhlcmUncyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290LlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMoc3VzcGVuZGVkTGFuZXMsIGxhbmVzKSkge1xuICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgcHJlZmVyIHRvIHJlbmRlciB0aGUgZmFsbGJhY2sgb2YgYXQgdGhlIGxhc3RcbiAgICAgICAgICAgICAgLy8gc3VzcGVuZGVkIGxldmVsLiBQaW5nIHRoZSBsYXN0IHN1c3BlbmRlZCBsZXZlbCB0byB0cnlcbiAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nIGl0IGFnYWluLlxuICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpZiB0aGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBJZGxlPyBTaG91bGQgbm90IHJlc3RhcnQuXG4gICAgICAgICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgICAgICAgIG1hcmtSb290UGluZ2VkKHJvb3QsIHN1c3BlbmRlZExhbmVzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IC8vIFRoZSByZW5kZXIgaXMgc3VzcGVuZGVkLCBpdCBoYXNuJ3QgdGltZWQgb3V0LCBhbmQgdGhlcmUncyBub1xuICAgICAgICAgICAgLy8gbG93ZXIgcHJpb3JpdHkgd29yayB0byBkby4gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFja1xuICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHksIHdhaXQgZm9yIG1vcmUgZGF0YSB0byBhcnJpdmUuXG5cblxuICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlID0gc2NoZWR1bGVUaW1lb3V0KGNvbW1pdFJvb3QuYmluZChudWxsLCByb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycywgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyksIG1zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUaGUgd29yayBleHBpcmVkLiBDb21taXQgaW1tZWRpYXRlbHkuXG5cblxuICAgICAgICBjb21taXRSb290KHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLCB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk6XG4gICAgICB7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgdHJhbnNpdGlvbiwgc28gd2Ugc2hvdWxkIGV4aXQgd2l0aG91dCBjb21taXR0aW5nIGFcbiAgICAgICAgICAvLyBwbGFjZWhvbGRlciBhbmQgd2l0aG91dCBzY2hlZHVsaW5nIGEgdGltZW91dC4gRGVsYXkgaW5kZWZpbml0ZWx5XG4gICAgICAgICAgLy8gdW50aWwgd2UgcmVjZWl2ZSBtb3JlIGRhdGEuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB0cmFuc2l0aW9uLCBidXQgd2UgZGlkIHRyaWdnZXIgYW4gYXZvaWRlZCBzdGF0ZS5cbiAgICAgICAgICAvLyBTY2hlZHVsZSBhIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkgYWZ0ZXIgYSBzaG9ydCBkZWxheSwgdXNpbmcgdGhlIEp1c3RcbiAgICAgICAgICAvLyBOb3RpY2VhYmxlIERpZmZlcmVuY2UuXG4gICAgICAgICAgLy8gVE9ETzogSXMgdGhlIEpORCBvcHRpbWl6YXRpb24gd29ydGggdGhlIGFkZGVkIGNvbXBsZXhpdHk/IElmIHRoaXMgaXNcbiAgICAgICAgICAvLyB0aGUgb25seSByZWFzb24gd2UgdHJhY2sgdGhlIGV2ZW50IHRpbWUsIHRoZW4gcHJvYmFibHkgbm90LlxuICAgICAgICAgIC8vIENvbnNpZGVyIHJlbW92aW5nLlxuICAgICAgICAgIHZhciBtb3N0UmVjZW50RXZlbnRUaW1lID0gZ2V0TW9zdFJlY2VudEV2ZW50VGltZShyb290LCBsYW5lcyk7XG4gICAgICAgICAgdmFyIGV2ZW50VGltZU1zID0gbW9zdFJlY2VudEV2ZW50VGltZTtcbiAgICAgICAgICB2YXIgdGltZUVsYXBzZWRNcyA9IG5vdygpIC0gZXZlbnRUaW1lTXM7XG5cbiAgICAgICAgICB2YXIgX21zVW50aWxUaW1lb3V0ID0gam5kKHRpbWVFbGFwc2VkTXMpIC0gdGltZUVsYXBzZWRNczsgLy8gRG9uJ3QgYm90aGVyIHdpdGggYSB2ZXJ5IHNob3J0IHN1c3BlbnNlIHRpbWUuXG5cblxuICAgICAgICAgIGlmIChfbXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICAgICAgLy8gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFjayBpbW1lZGlhdGVseSwgd2FpdCBmb3IgbW9yZSBkYXRhXG4gICAgICAgICAgICAvLyB0byBhcnJpdmUuXG4gICAgICAgICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLCB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zKSwgX21zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBDb21taXQgdGhlIHBsYWNlaG9sZGVyLlxuXG5cbiAgICAgICAgY29tbWl0Um9vdChyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycywgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290Q29tcGxldGVkOlxuICAgICAge1xuICAgICAgICAvLyBUaGUgd29yayBjb21wbGV0ZWQuIFJlYWR5IHRvIGNvbW1pdC5cbiAgICAgICAgY29tbWl0Um9vdChyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycywgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHJvb3QgZXhpdCBzdGF0dXMuJyk7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGZpbmlzaGVkV29yaykge1xuICAvLyBTZWFyY2ggdGhlIHJlbmRlcmVkIHRyZWUgZm9yIGV4dGVybmFsIHN0b3JlIHJlYWRzLCBhbmQgY2hlY2sgd2hldGhlciB0aGVcbiAgLy8gc3RvcmVzIHdlcmUgbXV0YXRlZCBpbiBhIGNvbmN1cnJlbnQgZXZlbnQuIEludGVudGlvbmFsbHkgdXNpbmcgYW4gaXRlcmF0aXZlXG4gIC8vIGxvb3AgaW5zdGVhZCBvZiByZWN1cnNpb24gc28gd2UgY2FuIGV4aXQgZWFybHkuXG4gIHZhciBub2RlID0gZmluaXNoZWRXb3JrO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUuZmxhZ3MgJiBTdG9yZUNvbnNpc3RlbmN5KSB7XG4gICAgICB2YXIgdXBkYXRlUXVldWUgPSBub2RlLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IHVwZGF0ZVF1ZXVlLnN0b3JlcztcblxuICAgICAgICBpZiAoY2hlY2tzICE9PSBudWxsKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGVja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGVjayA9IGNoZWNrc1tpXTtcbiAgICAgICAgICAgIHZhciBnZXRTbmFwc2hvdCA9IGNoZWNrLmdldFNuYXBzaG90O1xuICAgICAgICAgICAgdmFyIHJlbmRlcmVkVmFsdWUgPSBjaGVjay52YWx1ZTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKCFvYmplY3RJcyhnZXRTbmFwc2hvdCgpLCByZW5kZXJlZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGFuIGluY29uc2lzdGVudCBzdG9yZS5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIElmIGBnZXRTbmFwc2hvdGAgdGhyb3dzLCByZXR1cm4gYGZhbHNlYC4gVGhpcyB3aWxsIHNjaGVkdWxlXG4gICAgICAgICAgICAgIC8vIGEgcmUtcmVuZGVyLCBhbmQgdGhlIGVycm9yIHdpbGwgYmUgcmV0aHJvd24gZHVyaW5nIHJlbmRlci5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAobm9kZS5zdWJ0cmVlRmxhZ3MgJiBTdG9yZUNvbnNpc3RlbmN5ICYmIGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBjaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IGNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfSAvLyBGbG93IGRvZXNuJ3Qga25vdyB0aGlzIGlzIHVucmVhY2hhYmxlLCBidXQgZXNsaW50IGRvZXNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBzdXNwZW5kZWRMYW5lcykge1xuICAvLyBXaGVuIHN1c3BlbmRpbmcsIHdlIHNob3VsZCBhbHdheXMgZXhjbHVkZSBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIG9yIChtb3JlXG4gIC8vIHJhcmVseSwgc2luY2Ugd2UgdHJ5IHRvIGF2b2lkIGl0KSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAvLyBUT0RPOiBMb2wgbWF5YmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gZmFjdG9yIHRoaXMgYmVzaWRlcyB0aGlzXG4gIC8vIG9ibm94aW91c2x5IG5hbWVkIGZ1bmN0aW9uIDopXG4gIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoc3VzcGVuZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzKTtcbiAgc3VzcGVuZGVkTGFuZXMgPSByZW1vdmVMYW5lcyhzdXNwZW5kZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMpO1xuICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcyk7XG59IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBzeW5jaHJvbm91cyB0YXNrcyB0aGF0IGRvbid0IGdvXG4vLyB0aHJvdWdoIFNjaGVkdWxlclxuXG5cbmZ1bmN0aW9uIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290KSB7XG4gIHtcbiAgICBzeW5jTmVzdGVkVXBkYXRlRmxhZygpO1xuICB9XG5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuJyk7XG4gIH1cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIHZhciBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUobGFuZXMsIFN5bmNMYW5lKSkge1xuICAgIC8vIFRoZXJlJ3Mgbm8gcmVtYWluaW5nIHN5bmMgd29yayBsZWZ0LlxuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcblxuICBpZiAocm9vdC50YWcgIT09IExlZ2FjeVJvb3QgJiYgZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgLy8gc3luY2hyb25vdXNseSB0byBibG9jayBjb25jdXJyZW50IGRhdGEgbXV0YXRpb25zLCBhbmQgd2UnbGwgaW5jbHVkZXNcbiAgICAvLyBhbGwgcGVuZGluZyB1cGRhdGVzIGFyZSBpbmNsdWRlZC4gSWYgaXQgc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZFxuICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG4gICAgdmFyIGVycm9yUmV0cnlMYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpO1xuXG4gICAgaWYgKGVycm9yUmV0cnlMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgbGFuZXMgPSBlcnJvclJldHJ5TGFuZXM7XG4gICAgICBleGl0U3RhdHVzID0gcmVjb3ZlckZyb21Db25jdXJyZW50RXJyb3Iocm9vdCwgZXJyb3JSZXRyeUxhbmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgIHZhciBmYXRhbEVycm9yID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvcjtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgIHRocm93IGZhdGFsRXJyb3I7XG4gIH1cblxuICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdERpZE5vdENvbXBsZXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSb290IGRpZCBub3QgY29tcGxldGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gIH0gLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIEJlY2F1c2UgdGhpcyBpcyBhIHN5bmMgcmVuZGVyLCB3ZVxuICAvLyB3aWxsIGNvbW1pdCBpdCBldmVuIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQuXG5cblxuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICBjb21taXRSb290KHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLCB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zKTsgLy8gQmVmb3JlIGV4aXRpbmcsIG1ha2Ugc3VyZSB0aGVyZSdzIGEgY2FsbGJhY2sgc2NoZWR1bGVkIGZvciB0aGUgbmV4dFxuICAvLyBwZW5kaW5nIGxldmVsLlxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmbHVzaFJvb3Qocm9vdCwgbGFuZXMpIHtcbiAgaWYgKGxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgbWVyZ2VMYW5lcyhsYW5lcywgU3luY0xhbmUpKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkge1xuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tzKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyQxKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0OyAvLyBJZiB0aGVyZSB3ZXJlIGxlZ2FjeSBzeW5jIHVwZGF0ZXMsIGZsdXNoIHRoZW0gYXQgdGhlIGVuZCBvZiB0aGUgb3V0ZXJcbiAgICAvLyBtb3N0IGJhdGNoZWRVcGRhdGVzLWxpa2UgbWV0aG9kLlxuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCAmJiAvLyBUcmVhdCBgYWN0YCBhcyBpZiBpdCdzIGluc2lkZSBgYmF0Y2hlZFVwZGF0ZXNgLCBldmVuIGluIGxlZ2FjeSBtb2RlLlxuICAgICEoIFJlYWN0Q3VycmVudEFjdFF1ZXVlJDEuaXNCYXRjaGluZ0xlZ2FjeSkpIHtcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrc09ubHlJbkxlZ2FjeU1vZGUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpc2NyZXRlVXBkYXRlcyhmbiwgYSwgYiwgYywgZCkge1xuICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSgpO1xuICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQzLnRyYW5zaXRpb247XG5cbiAgdHJ5IHtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQzLnRyYW5zaXRpb24gPSBudWxsO1xuICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHkpO1xuICAgIHJldHVybiBmbihhLCBiLCBjLCBkKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNQcmlvcml0eSk7XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMy50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgfVxuICB9XG59IC8vIE92ZXJsb2FkIHRoZSBkZWZpbml0aW9uIHRvIHRoZSB0d28gdmFsaWQgc2lnbmF0dXJlcy5cbi8vIFdhcm5pbmcsIHRoaXMgb3B0cy1vdXQgb2YgY2hlY2tpbmcgdGhlIGZ1bmN0aW9uIGJvZHkuXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbmZ1bmN0aW9uIGZsdXNoU3luYyhmbikge1xuICAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgZmx1c2ggcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGVcbiAgLy8gbmV4dCBldmVudCwgbm90IGF0IHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIG9uZS5cbiAgaWYgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzICE9PSBudWxsICYmIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzLnRhZyA9PT0gTGVnYWN5Um9vdCAmJiAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpIHtcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIH1cblxuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQzLnRyYW5zaXRpb247XG4gIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gZ2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KCk7XG5cbiAgdHJ5IHtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQzLnRyYW5zaXRpb24gPSBudWxsO1xuICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHkpO1xuXG4gICAgaWYgKGZuKSB7XG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KHByZXZpb3VzUHJpb3JpdHkpO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDMudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDsgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaC5cbiAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIGhhcHBlbiBldmVuIGlmIGJhdGNoZWRVcGRhdGVzIGlzIGhpZ2hlciB1cFxuICAgIC8vIHRoZSBzdGFjay5cblxuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpIHtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrcygpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gaXNBbHJlYWR5UmVuZGVyaW5nKCkge1xuICAvLyBVc2VkIGJ5IHRoZSByZW5kZXJlciB0byBwcmludCBhIHdhcm5pbmcgaWYgY2VydGFpbiBBUElzIGFyZSBjYWxsZWQgZnJvbVxuICAvLyB0aGUgd3JvbmcgY29udGV4dC5cbiAgcmV0dXJuICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQ7XG59XG5mdW5jdGlvbiBwdXNoUmVuZGVyTGFuZXMoZmliZXIsIGxhbmVzKSB7XG4gIHB1c2goc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLCBzdWJ0cmVlUmVuZGVyTGFuZXMsIGZpYmVyKTtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gbWVyZ2VMYW5lcyhzdWJ0cmVlUmVuZGVyTGFuZXMsIGxhbmVzKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcG9wUmVuZGVyTGFuZXMoZmliZXIpIHtcbiAgc3VidHJlZVJlbmRlckxhbmVzID0gc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcChzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpIHtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgdGltZW91dEhhbmRsZSA9IHJvb3QudGltZW91dEhhbmRsZTtcblxuICBpZiAodGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0KSB7XG4gICAgLy8gVGhlIHJvb3QgcHJldmlvdXMgc3VzcGVuZGVkIGFuZCBzY2hlZHVsZWQgYSB0aW1lb3V0IHRvIGNvbW1pdCBhIGZhbGxiYWNrXG4gICAgLy8gc3RhdGUuIE5vdyB0aGF0IHdlIGhhdmUgYWRkaXRpb25hbCB3b3JrLCBjYW5jZWwgdGhlIHRpbWVvdXQuXG4gICAgcm9vdC50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0OyAvLyAkRmxvd0ZpeE1lIENvbXBsYWlucyBub1RpbWVvdXQgaXMgbm90IGEgVGltZW91dElELCBkZXNwaXRlIHRoZSBjaGVjayBhYm92ZVxuXG4gICAgY2FuY2VsVGltZW91dCh0aW1lb3V0SGFuZGxlKTtcbiAgfVxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIHZhciBpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgICB3aGlsZSAoaW50ZXJydXB0ZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGludGVycnVwdGVkV29yay5hbHRlcm5hdGU7XG4gICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoY3VycmVudCwgaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGludGVycnVwdGVkV29yayA9IGludGVycnVwdGVkV29yay5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gcm9vdDtcbiAgdmFyIHJvb3RXb3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHJvb3QuY3VycmVudCwgbnVsbCk7XG4gIHdvcmtJblByb2dyZXNzID0gcm9vdFdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IHN1YnRyZWVSZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBsYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lcztcbiAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgPSBOb0xhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IG51bGw7XG4gIGZpbmlzaFF1ZXVlaW5nQ29uY3VycmVudFVwZGF0ZXMoKTtcblxuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncygpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3RXb3JrSW5Qcm9ncmVzcztcbn1cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpIHtcbiAgZG8ge1xuICAgIHZhciBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc2V0IG1vZHVsZS1sZXZlbCBzdGF0ZSB0aGF0IHdhcyBzZXQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NBZnRlclRocm93KCk7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpOyAvLyBUT0RPOiBJIGZvdW5kIGFuZCBhZGRlZCB0aGlzIG1pc3NpbmcgbGluZSB3aGlsZSBpbnZlc3RpZ2F0aW5nIGFcbiAgICAgIC8vIHNlcGFyYXRlIGlzc3VlLiBXcml0ZSBhIHJlZ3Jlc3Npb24gdGVzdCB1c2luZyBzdHJpbmcgcmVmcy5cblxuICAgICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcblxuICAgICAgaWYgKGVycm9yZWRXb3JrID09PSBudWxsIHx8IGVycm9yZWRXb3JrLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBFeHBlY3RlZCB0byBiZSB3b3JraW5nIG9uIGEgbm9uLXJvb3QgZmliZXIuIFRoaXMgaXMgYSBmYXRhbCBlcnJvclxuICAgICAgICAvLyBiZWNhdXNlIHRoZXJlJ3Mgbm8gYW5jZXN0b3IgdGhhdCBjYW4gaGFuZGxlIGl0OyB0aGUgcm9vdCBpc1xuICAgICAgICAvLyBzdXBwb3NlZCB0byBjYXB0dXJlIGFsbCBlcnJvcnMgdGhhdCB3ZXJlbid0IGNhdWdodCBieSBhbiBlcnJvclxuICAgICAgICAvLyBib3VuZGFyeS5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RGYXRhbEVycm9yZWQ7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSB0aHJvd25WYWx1ZTsgLy8gU2V0IGB3b3JrSW5Qcm9ncmVzc2AgdG8gbnVsbC4gVGhpcyByZXByZXNlbnRzIGFkdmFuY2luZyB0byB0aGUgbmV4dFxuICAgICAgICAvLyBzaWJsaW5nLCBvciB0aGUgcGFyZW50IGlmIHRoZXJlIGFyZSBubyBzaWJsaW5ncy4gQnV0IHNpbmNlIHRoZSByb290XG4gICAgICAgIC8vIGhhcyBubyBzaWJsaW5ncyBub3IgYSBwYXJlbnQsIHdlIHNldCBpdCB0byBudWxsLiBVc3VhbGx5IHRoaXMgaXNcbiAgICAgICAgLy8gaGFuZGxlZCBieSBgY29tcGxldGVVbml0T2ZXb3JrYCBvciBgdW53aW5kV29ya2AsIGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgICAvLyBpbnRlbnRpb25hbGx5IG5vdCBjYWxsaW5nIHRob3NlLCB3ZSBuZWVkIHNldCBpdCBoZXJlLlxuICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBjYWxsaW5nIGB1bndpbmRXb3JrYCB0byBwb3AgdGhlIGNvbnRleHRzLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lciAmJiBlcnJvcmVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSB0aW1lIHNwZW50IHJlbmRlcmluZyBiZWZvcmUgYW4gZXJyb3Igd2FzIHRocm93bi4gVGhpc1xuICAgICAgICAvLyBhdm9pZHMgaW5hY2N1cmF0ZSBQcm9maWxlciBkdXJhdGlvbnMgaW4gdGhlIGNhc2Ugb2YgYVxuICAgICAgICAvLyBzdXNwZW5kZWQgcmVuZGVyLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGVycm9yZWRXb3JrLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuYWJsZVNjaGVkdWxpbmdQcm9maWxlcikge1xuICAgICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuXG4gICAgICAgIGlmICh0aHJvd25WYWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhyb3duVmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0aHJvd25WYWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIHdha2VhYmxlID0gdGhyb3duVmFsdWU7XG4gICAgICAgICAgbWFya0NvbXBvbmVudFN1c3BlbmRlZChlcnJvcmVkV29yaywgd2FrZWFibGUsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXJrQ29tcG9uZW50RXJyb3JlZChlcnJvcmVkV29yaywgdGhyb3duVmFsdWUsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvd0V4Y2VwdGlvbihyb290LCBlcnJvcmVkV29yay5yZXR1cm4sIGVycm9yZWRXb3JrLCB0aHJvd25WYWx1ZSwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgICAgY29tcGxldGVVbml0T2ZXb3JrKGVycm9yZWRXb3JrKTtcbiAgICB9IGNhdGNoICh5ZXRBbm90aGVyVGhyb3duVmFsdWUpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcmV0dXJuIHBhdGggYWxzbyB0aHJldy5cbiAgICAgIHRocm93blZhbHVlID0geWV0QW5vdGhlclRocm93blZhbHVlO1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IGVycm9yZWRXb3JrICYmIGVycm9yZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkgaGFzIGFscmVhZHkgZXJyb3JlZCwgdGhlbiB3ZSBoYWQgdHJvdWJsZSBwcm9jZXNzaW5nXG4gICAgICAgIC8vIHRoZSBlcnJvci4gQnViYmxlIGl0IHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICAgICAgICBlcnJvcmVkV29yayA9IGVycm9yZWRXb3JrLnJldHVybjtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBlcnJvcmVkV29yaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gLy8gUmV0dXJuIHRvIHRoZSBub3JtYWwgd29yayBsb29wLlxuXG5cbiAgICByZXR1cm47XG4gIH0gd2hpbGUgKHRydWUpO1xufVxuXG5mdW5jdGlvbiBwdXNoRGlzcGF0Y2hlcigpIHtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQ7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIGlmIChwcmV2RGlzcGF0Y2hlciA9PT0gbnVsbCkge1xuICAgIC8vIFRoZSBSZWFjdCBpc29tb3JwaGljIHBhY2thZ2UgZG9lcyBub3QgaW5jbHVkZSBhIGRlZmF1bHQgZGlzcGF0Y2hlci5cbiAgICAvLyBJbnN0ZWFkIHRoZSBmaXJzdCByZW5kZXJlciB3aWxsIGxhemlseSBhdHRhY2ggb25lLCBpbiBvcmRlciB0byBnaXZlXG4gICAgLy8gbmljZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgcmV0dXJuIENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJldkRpc3BhdGNoZXI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcikge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xufVxuXG5mdW5jdGlvbiBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKSB7XG4gIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSBub3coKTtcbn1cbmZ1bmN0aW9uIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobGFuZSkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBtZXJnZUxhbmVzKGxhbmUsIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyk7XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluUHJvZ3Jlc3MpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZDtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJblByb2dyZXNzIHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQgfHwgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTtcbiAgfSAvLyBDaGVjayBpZiB0aGVyZSBhcmUgdXBkYXRlcyB0aGF0IHdlIHNraXBwZWQgdHJlZSB0aGF0IG1pZ2h0IGhhdmUgdW5ibG9ja2VkXG4gIC8vIHRoaXMgcmVuZGVyLlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gbnVsbCAmJiAoaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpIHx8IGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMpKSkge1xuICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgcmVuZGVyIGFzIHN1c3BlbmRlZCBzbyB0aGF0IHdlIHN3aXRjaCB0byB3b3JraW5nIG9uXG4gICAgLy8gdGhlIHVwZGF0ZXMgdGhhdCB3ZXJlIHNraXBwZWQuIFVzdWFsbHkgd2Ugb25seSBzdXNwZW5kIGF0IHRoZSBlbmQgb2ZcbiAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIFRPRE86IFdlIHNob3VsZCBwcm9iYWJseSBhbHdheXMgbWFyayB0aGUgcm9vdCBhcyBzdXNwZW5kZWQgaW1tZWRpYXRlbHlcbiAgICAvLyAoaW5zaWRlIHRoaXMgZnVuY3Rpb24pLCBzaW5jZSBieSBzdXNwZW5kaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHJlbmRlclxuICAgIC8vIHBoYXNlIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgbWlzdGFrZSB3aGVyZSB3ZSBzdXNwZW5kIGxhbmVzIHRoYXQgd2VyZVxuICAgIC8vIHBpbmdlZCBvciB1cGRhdGVkIHdoaWxlIHdlIHdlcmUgcmVuZGVyaW5nLlxuICAgIG1hcmtSb290U3VzcGVuZGVkJDEod29ya0luUHJvZ3Jlc3NSb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckRpZEVycm9yKGVycm9yKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzICE9PSBSb290U3VzcGVuZGVkV2l0aERlbGF5KSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RFcnJvcmVkO1xuICB9XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnMgPT09IG51bGwpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzID0gW2Vycm9yXTtcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzLnB1c2goZXJyb3IpO1xuICB9XG59IC8vIENhbGxlZCBkdXJpbmcgcmVuZGVyIHRvIGRldGVybWluZSBpZiBhbnl0aGluZyBoYXMgc3VzcGVuZGVkLlxuLy8gUmV0dXJucyBmYWxzZSBpZiB3ZSdyZSBub3Qgc3VyZS5cblxuZnVuY3Rpb24gcmVuZGVySGFzTm90U3VzcGVuZGVkWWV0KCkge1xuICAvLyBJZiBzb21ldGhpbmcgZXJyb3JlZCBvciBjb21wbGV0ZWQsIHdlIGNhbid0IHJlYWxseSBiZSBzdXJlLFxuICAvLyBzbyB0aG9zZSBhcmUgZmFsc2UuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcztcbn1cblxuZnVuY3Rpb24gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpOyAvLyBJZiB0aGUgcm9vdCBvciBsYW5lcyBoYXZlIGNoYW5nZWQsIHRocm93IG91dCB0aGUgZXhpc3Rpbmcgc3RhY2tcbiAgLy8gYW5kIHByZXBhcmUgYSBmcmVzaCBvbmUuIE90aGVyd2lzZSB3ZSdsbCBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcykge1xuICAgIHtcbiAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICB2YXIgbWVtb2l6ZWRVcGRhdGVycyA9IHJvb3QubWVtb2l6ZWRVcGRhdGVycztcblxuICAgICAgICBpZiAobWVtb2l6ZWRVcGRhdGVycy5zaXplID4gMCkge1xuICAgICAgICAgIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMuY2xlYXIoKTtcbiAgICAgICAgfSAvLyBBdCB0aGlzIHBvaW50LCBtb3ZlIEZpYmVycyB0aGF0IHNjaGVkdWxlZCB0aGUgdXBjb21pbmcgd29yayBmcm9tIHRoZSBNYXAgdG8gdGhlIFNldC5cbiAgICAgICAgLy8gSWYgd2UgYmFpbG91dCBvbiB0aGlzIHdvcmssIHdlJ2xsIG1vdmUgdGhlbSBiYWNrIChsaWtlIGFib3ZlKS5cbiAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gbW92ZSB0aGVtIG5vdyBpbiBjYXNlIHRoZSB3b3JrIHNwYXducyBtb3JlIHdvcmsgYXQgdGhlIHNhbWUgcHJpb3JpdHkgd2l0aCBkaWZmZXJlbnQgdXBkYXRlcnMuXG4gICAgICAgIC8vIFRoYXQgd2F5IHdlIGNhbiBrZWVwIHRoZSBjdXJyZW50IHVwZGF0ZSBhbmQgZnV0dXJlIHVwZGF0ZXMgc2VwYXJhdGUuXG5cblxuICAgICAgICBtb3ZlUGVuZGluZ0ZpYmVyc1RvTWVtb2l6ZWQocm9vdCwgbGFuZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMgPSBnZXRUcmFuc2l0aW9uc0ZvckxhbmVzKCk7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICB9XG5cbiAge1xuICAgIG1hcmtSZW5kZXJTdGFydGVkKGxhbmVzKTtcbiAgfVxuXG4gIGRvIHtcbiAgICB0cnkge1xuICAgICAgd29ya0xvb3BTeW5jKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyBhIHN5bmMgcmVuZGVyLCBzbyB3ZSBzaG91bGQgaGF2ZSBmaW5pc2hlZCB0aGUgd2hvbGUgdHJlZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21taXQgYW4gaW5jb21wbGV0ZSByb290LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSAnICsgJ2J1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gIH1cblxuICB7XG4gICAgbWFya1JlbmRlclN0b3BwZWQoKTtcbiAgfSAvLyBTZXQgdGhpcyB0byBudWxsIHRvIGluZGljYXRlIHRoZXJlJ3Mgbm8gaW4tcHJvZ3Jlc3MgcmVuZGVyLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbn0gLy8gVGhlIHdvcmsgbG9vcCBpcyBhbiBleHRyZW1lbHkgaG90IHBhdGguIFRlbGwgQ2xvc3VyZSBub3QgdG8gaW5saW5lIGl0LlxuXG4vKiogQG5vaW5saW5lICovXG5cblxuZnVuY3Rpb24gd29ya0xvb3BTeW5jKCkge1xuICAvLyBBbHJlYWR5IHRpbWVkIG91dCwgc28gcGVyZm9ybSB3b3JrIHdpdGhvdXQgY2hlY2tpbmcgaWYgd2UgbmVlZCB0byB5aWVsZC5cbiAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTsgLy8gSWYgdGhlIHJvb3Qgb3IgbGFuZXMgaGF2ZSBjaGFuZ2VkLCB0aHJvdyBvdXQgdGhlIGV4aXN0aW5nIHN0YWNrXG4gIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpIHtcbiAgICB7XG4gICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgdmFyIG1lbW9pemVkVXBkYXRlcnMgPSByb290Lm1lbW9pemVkVXBkYXRlcnM7XG5cbiAgICAgICAgaWYgKG1lbW9pemVkVXBkYXRlcnMuc2l6ZSA+IDApIHtcbiAgICAgICAgICByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCk7XG4gICAgICAgIH0gLy8gQXQgdGhpcyBwb2ludCwgbW92ZSBGaWJlcnMgdGhhdCBzY2hlZHVsZWQgdGhlIHVwY29taW5nIHdvcmsgZnJvbSB0aGUgTWFwIHRvIHRoZSBTZXQuXG4gICAgICAgIC8vIElmIHdlIGJhaWxvdXQgb24gdGhpcyB3b3JrLCB3ZSdsbCBtb3ZlIHRoZW0gYmFjayAobGlrZSBhYm92ZSkuXG4gICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIG1vdmUgdGhlbSBub3cgaW4gY2FzZSB0aGUgd29yayBzcGF3bnMgbW9yZSB3b3JrIGF0IHRoZSBzYW1lIHByaW9yaXR5IHdpdGggZGlmZmVyZW50IHVwZGF0ZXJzLlxuICAgICAgICAvLyBUaGF0IHdheSB3ZSBjYW4ga2VlcCB0aGUgY3VycmVudCB1cGRhdGUgYW5kIGZ1dHVyZSB1cGRhdGVzIHNlcGFyYXRlLlxuXG5cbiAgICAgICAgbW92ZVBlbmRpbmdGaWJlcnNUb01lbW9pemVkKHJvb3QsIGxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gZ2V0VHJhbnNpdGlvbnNGb3JMYW5lcygpO1xuICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gIH1cblxuICB7XG4gICAgbWFya1JlbmRlclN0YXJ0ZWQobGFuZXMpO1xuICB9XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcENvbmN1cnJlbnQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIC8vIFN0aWxsIHdvcmsgcmVtYWluaW5nLlxuICAgIHtcbiAgICAgIG1hcmtSZW5kZXJZaWVsZGVkKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFJvb3RJblByb2dyZXNzO1xuICB9IGVsc2Uge1xuICAgIC8vIENvbXBsZXRlZCB0aGUgdHJlZS5cbiAgICB7XG4gICAgICBtYXJrUmVuZGVyU3RvcHBlZCgpO1xuICAgIH0gLy8gU2V0IHRoaXMgdG8gbnVsbCB0byBpbmRpY2F0ZSB0aGVyZSdzIG5vIGluLXByb2dyZXNzIHJlbmRlci5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7IC8vIFJldHVybiB0aGUgZmluYWwgZXhpdCBzdGF0dXMuXG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgfVxufVxuLyoqIEBub2lubGluZSAqL1xuXG5cbmZ1bmN0aW9uIHdvcmtMb29wQ29uY3VycmVudCgpIHtcbiAgLy8gUGVyZm9ybSB3b3JrIHVudGlsIFNjaGVkdWxlciBhc2tzIHVzIHRvIHlpZWxkXG4gIHdoaWxlICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCAmJiAhc2hvdWxkWWllbGQoKSkge1xuICAgIHBlcmZvcm1Vbml0T2ZXb3JrKHdvcmtJblByb2dyZXNzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICBzZXRDdXJyZW50RmliZXIodW5pdE9mV29yayk7XG4gIHZhciBuZXh0O1xuXG4gIGlmICggKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgIG5leHQgPSBiZWdpbldvcmskMShjdXJyZW50LCB1bml0T2ZXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEodW5pdE9mV29yaywgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dCA9IGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXNldEN1cnJlbnRGaWJlcigpO1xuICB1bml0T2ZXb3JrLm1lbW9pemVkUHJvcHMgPSB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcztcblxuICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgZG9lc24ndCBzcGF3biBuZXcgd29yaywgY29tcGxldGUgdGhlIGN1cnJlbnQgd29yay5cbiAgICBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yayk7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICB9XG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gQXR0ZW1wdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCB1bml0IG9mIHdvcmssIHRoZW4gbW92ZSB0byB0aGUgbmV4dFxuICAvLyBzaWJsaW5nLiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzaWJsaW5ncywgcmV0dXJuIHRvIHRoZSBwYXJlbnQgZmliZXIuXG4gIHZhciBjb21wbGV0ZWRXb3JrID0gdW5pdE9mV29yaztcblxuICBkbyB7XG4gICAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAgIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gICAgLy8gbmVlZCBhbiBhZGRpdGlvbmFsIGZpZWxkIG9uIHRoZSB3b3JrIGluIHByb2dyZXNzLlxuICAgIHZhciBjdXJyZW50ID0gY29tcGxldGVkV29yay5hbHRlcm5hdGU7XG4gICAgdmFyIHJldHVybkZpYmVyID0gY29tcGxldGVkV29yay5yZXR1cm47IC8vIENoZWNrIGlmIHRoZSB3b3JrIGNvbXBsZXRlZCBvciBpZiBzb21ldGhpbmcgdGhyZXcuXG5cbiAgICBpZiAoKGNvbXBsZXRlZFdvcmsuZmxhZ3MgJiBJbmNvbXBsZXRlKSA9PT0gTm9GbGFncykge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgdmFyIG5leHQgPSB2b2lkIDA7XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpOyAvLyBVcGRhdGUgcmVuZGVyIGR1cmF0aW9uIGFzc3VtaW5nIHdlIGRpZG4ndCBlcnJvci5cblxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcblxuICAgICAgaWYgKG5leHQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ29tcGxldGluZyB0aGlzIGZpYmVyIHNwYXduZWQgbmV3IHdvcmsuIFdvcmsgb24gdGhhdCBuZXh0LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlIGJlY2F1c2Ugc29tZXRoaW5nIHRocmV3LiBQb3AgdmFsdWVzIG9mZlxuICAgICAgLy8gdGhlIHN0YWNrIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGNvbXBsZXRlIHBoYXNlLiBJZiB0aGlzIGlzIGEgYm91bmRhcnksXG4gICAgICAvLyBjYXB0dXJlIHZhbHVlcyBpZiBwb3NzaWJsZS5cbiAgICAgIHZhciBfbmV4dCA9IHVud2luZFdvcmsoY3VycmVudCwgY29tcGxldGVkV29yayk7IC8vIEJlY2F1c2UgdGhpcyBmaWJlciBkaWQgbm90IGNvbXBsZXRlLCBkb24ndCByZXNldCBpdHMgbGFuZXMuXG5cblxuICAgICAgaWYgKF9uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIGNvbXBsZXRpbmcgdGhpcyB3b3JrIHNwYXduZWQgbmV3IHdvcmssIGRvIHRoYXQgbmV4dC4gV2UnbGwgY29tZVxuICAgICAgICAvLyBiYWNrIGhlcmUgYWdhaW4uXG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHJlc3RhcnRpbmcsIHJlbW92ZSBhbnl0aGluZyB0aGF0IGlzIG5vdCBhIGhvc3QgZWZmZWN0XG4gICAgICAgIC8vIGZyb20gdGhlIGVmZmVjdCB0YWcuXG4gICAgICAgIF9uZXh0LmZsYWdzICY9IEhvc3RFZmZlY3RNYXNrO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IF9uZXh0O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgcmVuZGVyIGR1cmF0aW9uIGZvciB0aGUgZmliZXIgdGhhdCBlcnJvcmVkLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTsgLy8gSW5jbHVkZSB0aGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGZhaWxlZCBjaGlsZHJlbiBiZWZvcmUgY29udGludWluZy5cblxuICAgICAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICB2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIE1hcmsgdGhlIHBhcmVudCBmaWJlciBhcyBpbmNvbXBsZXRlIGFuZCBjbGVhciBpdHMgc3VidHJlZSBmbGFncy5cbiAgICAgICAgcmV0dXJuRmliZXIuZmxhZ3MgfD0gSW5jb21wbGV0ZTtcbiAgICAgICAgcmV0dXJuRmliZXIuc3VidHJlZUZsYWdzID0gTm9GbGFncztcbiAgICAgICAgcmV0dXJuRmliZXIuZGVsZXRpb25zID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlJ3ZlIHVud291bmQgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3QuXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RGlkTm90Q29tcGxldGU7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaWJsaW5nRmliZXIgPSBjb21wbGV0ZWRXb3JrLnNpYmxpbmc7XG5cbiAgICBpZiAoc2libGluZ0ZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHdvcmsgdG8gZG8gaW4gdGhpcyByZXR1cm5GaWJlciwgZG8gdGhhdCBuZXh0LlxuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBzaWJsaW5nRmliZXI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBPdGhlcndpc2UsIHJldHVybiB0byB0aGUgcGFyZW50XG5cblxuICAgIGNvbXBsZXRlZFdvcmsgPSByZXR1cm5GaWJlcjsgLy8gVXBkYXRlIHRoZSBuZXh0IHRoaW5nIHdlJ3JlIHdvcmtpbmcgb24gaW4gY2FzZSBzb21ldGhpbmcgdGhyb3dzLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjb21wbGV0ZWRXb3JrO1xuICB9IHdoaWxlIChjb21wbGV0ZWRXb3JrICE9PSBudWxsKTsgLy8gV2UndmUgcmVhY2hlZCB0aGUgcm9vdC5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5Qcm9ncmVzcykge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290Q29tcGxldGVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3Qocm9vdCwgcmVjb3ZlcmFibGVFcnJvcnMsIHRyYW5zaXRpb25zKSB7XG4gIC8vIFRPRE86IFRoaXMgbm8gbG9uZ2VyIG1ha2VzIGFueSBzZW5zZS4gV2UgYWxyZWFkeSB3cmFwIHRoZSBtdXRhdGlvbiBhbmRcbiAgLy8gbGF5b3V0IHBoYXNlcy4gU2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlLlxuICB2YXIgcHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHkgPSBnZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoKTtcbiAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMy50cmFuc2l0aW9uO1xuXG4gIHRyeSB7XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMy50cmFuc2l0aW9uID0gbnVsbDtcbiAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkoRGlzY3JldGVFdmVudFByaW9yaXR5KTtcbiAgICBjb21taXRSb290SW1wbChyb290LCByZWNvdmVyYWJsZUVycm9ycywgdHJhbnNpdGlvbnMsIHByZXZpb3VzVXBkYXRlTGFuZVByaW9yaXR5KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQzLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNVcGRhdGVMYW5lUHJpb3JpdHkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3RJbXBsKHJvb3QsIHJlY292ZXJhYmxlRXJyb3JzLCB0cmFuc2l0aW9ucywgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICBkbyB7XG4gICAgLy8gYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgY2FsbCBgZmx1c2hTeW5jVXBkYXRlUXVldWVgIGF0IHRoZSBlbmQsIHdoaWNoXG4gICAgLy8gbWVhbnMgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIHdpbGwgc29tZXRpbWVzIHJlc3VsdCBpbiBhZGRpdGlvbmFsXG4gICAgLy8gcGFzc2l2ZSBlZmZlY3RzLiBTbyB3ZSBuZWVkIHRvIGtlZXAgZmx1c2hpbmcgaW4gYSBsb29wIHVudGlsIHRoZXJlIGFyZVxuICAgIC8vIG5vIG1vcmUgcGVuZGluZyBlZmZlY3RzLlxuICAgIC8vIFRPRE86IE1pZ2h0IGJlIGJldHRlciBpZiBgZmx1c2hQYXNzaXZlRWZmZWN0c2AgZGlkIG5vdCBhdXRvbWF0aWNhbGx5XG4gICAgLy8gZmx1c2ggc3luY2hyb25vdXMgd29yayBhdCB0aGUgZW5kLCB0byBhdm9pZCBmYWN0b3JpbmcgaGF6YXJkcyBsaWtlIHRoaXMuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICB9IHdoaWxlIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyAhPT0gbnVsbCk7XG5cbiAgZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCk7XG5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgIT09IE5vQ29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuJyk7XG4gIH1cblxuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcms7XG4gIHZhciBsYW5lcyA9IHJvb3QuZmluaXNoZWRMYW5lcztcblxuICB7XG4gICAgbWFya0NvbW1pdFN0YXJ0ZWQobGFuZXMpO1xuICB9XG5cbiAgaWYgKGZpbmlzaGVkV29yayA9PT0gbnVsbCkge1xuXG4gICAge1xuICAgICAgbWFya0NvbW1pdFN0b3BwZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBpZiAobGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAgICAgZXJyb3IoJ3Jvb3QuZmluaXNoZWRMYW5lcyBzaG91bGQgbm90IGJlIGVtcHR5IGR1cmluZyBhIGNvbW1pdC4gVGhpcyBpcyBhICcgKyAnYnVnIGluIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcblxuICBpZiAoZmluaXNoZWRXb3JrID09PSByb290LmN1cnJlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21taXQgdGhlIHNhbWUgdHJlZSBhcyBiZWZvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSAnICsgJ2EgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgfSAvLyBjb21taXRSb290IG5ldmVyIHJldHVybnMgYSBjb250aW51YXRpb247IGl0IGFsd2F5cyBmaW5pc2hlcyBzeW5jaHJvbm91c2x5LlxuICAvLyBTbyB3ZSBjYW4gY2xlYXIgdGhlc2Ugbm93IHRvIGFsbG93IGEgbmV3IGNhbGxiYWNrIHRvIGJlIHNjaGVkdWxlZC5cblxuXG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lOyAvLyBVcGRhdGUgdGhlIGZpcnN0IGFuZCBsYXN0IHBlbmRpbmcgdGltZXMgb24gdGhpcyByb290LiBUaGUgbmV3IGZpcnN0XG4gIC8vIHBlbmRpbmcgdGltZSBpcyB3aGF0ZXZlciBpcyBsZWZ0IG9uIHRoZSByb290IGZpYmVyLlxuXG4gIHZhciByZW1haW5pbmdMYW5lcyA9IG1lcmdlTGFuZXMoZmluaXNoZWRXb3JrLmxhbmVzLCBmaW5pc2hlZFdvcmsuY2hpbGRMYW5lcyk7XG4gIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMpO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBXZSBjYW4gcmVzZXQgdGhlc2Ugbm93IHRoYXQgdGhleSBhcmUgZmluaXNoZWQuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICB9IC8vIElmIHRoZXJlIGFyZSBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0cywgc2NoZWR1bGUgYSBjYWxsYmFjayB0byBwcm9jZXNzIHRoZW0uXG4gIC8vIERvIHRoaXMgYXMgZWFybHkgYXMgcG9zc2libGUsIHNvIGl0IGlzIHF1ZXVlZCBiZWZvcmUgYW55dGhpbmcgZWxzZSB0aGF0XG4gIC8vIG1pZ2h0IGdldCBzY2hlZHVsZWQgaW4gdGhlIGNvbW1pdCBwaGFzZS4gKFNlZSAjMTY3MTQuKVxuICAvLyBUT0RPOiBEZWxldGUgYWxsIG90aGVyIHBsYWNlcyB0aGF0IHNjaGVkdWxlIHRoZSBwYXNzaXZlIGVmZmVjdCBjYWxsYmFja1xuICAvLyBUaGV5J3JlIHJlZHVuZGFudC5cblxuXG4gIGlmICgoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIFBhc3NpdmVNYXNrKSAhPT0gTm9GbGFncyB8fCAoZmluaXNoZWRXb3JrLmZsYWdzICYgUGFzc2l2ZU1hc2spICE9PSBOb0ZsYWdzKSB7XG4gICAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgICAgLy8gdG8gc3RvcmUgaXQgaW4gcGVuZGluZ1Bhc3NpdmVUcmFuc2l0aW9ucyB1bnRpbCB0aGV5IGdldCBwcm9jZXNzZWRcbiAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyB0aGlzIHRocm91Z2ggYXMgYW4gYXJndW1lbnQgdG8gY29tbWl0Um9vdFxuICAgICAgLy8gYmVjYXVzZSB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zIG1pZ2h0IGhhdmUgY2hhbmdlZCBiZXR3ZWVuXG4gICAgICAvLyB0aGUgcHJldmlvdXMgcmVuZGVyIGFuZCBjb21taXQgaWYgd2UgdGhyb3R0bGUgdGhlIGNvbW1pdFxuICAgICAgLy8gd2l0aCBzZXRUaW1lb3V0XG5cbiAgICAgIHBlbmRpbmdQYXNzaXZlVHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9ucztcbiAgICAgIHNjaGVkdWxlQ2FsbGJhY2skMShOb3JtYWxQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7IC8vIFRoaXMgcmVuZGVyIHRyaWdnZXJlZCBwYXNzaXZlIGVmZmVjdHM6IHJlbGVhc2UgdGhlIHJvb3QgY2FjaGUgcG9vbFxuICAgICAgICAvLyAqYWZ0ZXIqIHBhc3NpdmUgZWZmZWN0cyBmaXJlIHRvIGF2b2lkIGZyZWVpbmcgYSBjYWNoZSBwb29sIHRoYXQgbWF5XG4gICAgICAgIC8vIGJlIHJlZmVyZW5jZWQgYnkgYSBub2RlIGluIHRoZSB0cmVlIChIb3N0Um9vdCwgQ2FjaGUgYm91bmRhcnkgZXRjKVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgfVxuICB9IC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZWZmZWN0cyBpbiB0aGUgd2hvbGUgdHJlZS5cbiAgLy8gVE9ETzogVGhpcyBpcyBsZWZ0IG92ZXIgZnJvbSB0aGUgZWZmZWN0IGxpc3QgaW1wbGVtZW50YXRpb24sIHdoZXJlIHdlIGhhZFxuICAvLyB0byBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBgZmlyc3RFZmZlY3RgIHRvIHNhdGlzZnkgRmxvdy4gSSB0aGluayB0aGVcbiAgLy8gb25seSBvdGhlciByZWFzb24gdGhpcyBvcHRpbWl6YXRpb24gZXhpc3RzIGlzIGJlY2F1c2UgaXQgYWZmZWN0cyBwcm9maWxpbmcuXG4gIC8vIFJlY29uc2lkZXIgd2hldGhlciB0aGlzIGlzIG5lY2Vzc2FyeS5cblxuXG4gIHZhciBzdWJ0cmVlSGFzRWZmZWN0cyA9IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgKEJlZm9yZU11dGF0aW9uTWFzayB8IE11dGF0aW9uTWFzayB8IExheW91dE1hc2sgfCBQYXNzaXZlTWFzaykpICE9PSBOb0ZsYWdzO1xuICB2YXIgcm9vdEhhc0VmZmVjdCA9IChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAoQmVmb3JlTXV0YXRpb25NYXNrIHwgTXV0YXRpb25NYXNrIHwgTGF5b3V0TWFzayB8IFBhc3NpdmVNYXNrKSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKHN1YnRyZWVIYXNFZmZlY3RzIHx8IHJvb3RIYXNFZmZlY3QpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQzLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMy50cmFuc2l0aW9uID0gbnVsbDtcbiAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSgpO1xuICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShEaXNjcmV0ZUV2ZW50UHJpb3JpdHkpO1xuICAgIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0OyAvLyBSZXNldCB0aGlzIHRvIG51bGwgYmVmb3JlIGNhbGxpbmcgbGlmZWN5Y2xlc1xuXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDsgLy8gVGhlIGNvbW1pdCBwaGFzZSBpcyBicm9rZW4gaW50byBzZXZlcmFsIHN1Yi1waGFzZXMuIFdlIGRvIGEgc2VwYXJhdGUgcGFzc1xuICAgIC8vIG9mIHRoZSBlZmZlY3QgbGlzdCBmb3IgZWFjaCBwaGFzZTogYWxsIG11dGF0aW9uIGVmZmVjdHMgY29tZSBiZWZvcmUgYWxsXG4gICAgLy8gbGF5b3V0IGVmZmVjdHMsIGFuZCBzbyBvbi5cbiAgICAvLyBUaGUgZmlyc3QgcGhhc2UgYSBcImJlZm9yZSBtdXRhdGlvblwiIHBoYXNlLiBXZSB1c2UgdGhpcyBwaGFzZSB0byByZWFkIHRoZVxuICAgIC8vIHN0YXRlIG9mIHRoZSBob3N0IHRyZWUgcmlnaHQgYmVmb3JlIHdlIG11dGF0ZSBpdC4gVGhpcyBpcyB3aGVyZVxuICAgIC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlIGlzIGNhbGxlZC5cblxuICAgIHZhciBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrKTtcblxuICAgIHtcbiAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgY29tbWl0IHRpbWUgdG8gYmUgc2hhcmVkIGJ5IGFsbCBQcm9maWxlcnMgaW4gdGhpc1xuICAgICAgLy8gYmF0Y2guIFRoaXMgZW5hYmxlcyB0aGVtIHRvIGJlIGdyb3VwZWQgbGF0ZXIuXG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfVxuXG5cbiAgICBjb21taXRNdXRhdGlvbkVmZmVjdHMocm9vdCwgZmluaXNoZWRXb3JrLCBsYW5lcyk7XG5cbiAgICByZXNldEFmdGVyQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIHRyZWUgaXMgbm93IHRoZSBjdXJyZW50IHRyZWUuIFRoaXMgbXVzdCBjb21lIGFmdGVyXG4gICAgLy8gdGhlIG11dGF0aW9uIHBoYXNlLCBzbyB0aGF0IHRoZSBwcmV2aW91cyB0cmVlIGlzIHN0aWxsIGN1cnJlbnQgZHVyaW5nXG4gICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQsIGJ1dCBiZWZvcmUgdGhlIGxheW91dCBwaGFzZSwgc28gdGhhdCB0aGUgZmluaXNoZWRcbiAgICAvLyB3b3JrIGlzIGN1cnJlbnQgZHVyaW5nIGNvbXBvbmVudERpZE1vdW50L1VwZGF0ZS5cblxuICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIGxheW91dCBwaGFzZSwgd2hlcmUgd2UgY2FsbCBlZmZlY3RzIHRoYXQgcmVhZFxuXG4gICAge1xuICAgICAgbWFya0xheW91dEVmZmVjdHNTdGFydGVkKGxhbmVzKTtcbiAgICB9XG5cbiAgICBjb21taXRMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgcm9vdCwgbGFuZXMpO1xuXG4gICAge1xuICAgICAgbWFya0xheW91dEVmZmVjdHNTdG9wcGVkKCk7XG4gICAgfVxuICAgIC8vIG9wcG9ydHVuaXR5IHRvIHBhaW50LlxuXG5cbiAgICByZXF1ZXN0UGFpbnQoKTtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7IC8vIFJlc2V0IHRoZSBwcmlvcml0eSB0byB0aGUgcHJldmlvdXMgbm9uLXN5bmMgdmFsdWUuXG5cbiAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJldmlvdXNQcmlvcml0eSk7XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMy50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gZWZmZWN0cy5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIE1lYXN1cmUgdGhlc2UgYW55d2F5IHNvIHRoZSBmbGFtZWdyYXBoIGV4cGxpY2l0bHkgc2hvd3MgdGhhdCB0aGVyZSB3ZXJlXG4gICAgLy8gbm8gZWZmZWN0cy5cbiAgICAvLyBUT0RPOiBNYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byByZXBvcnQgdGhpcy5cblxuICAgIHtcbiAgICAgIHJlY29yZENvbW1pdFRpbWUoKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyA9IHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzO1xuXG4gIGlmIChyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFRoaXMgY29tbWl0IGhhcyBwYXNzaXZlIGVmZmVjdHMuIFN0YXNoIGEgcmVmZXJlbmNlIHRvIHRoZW0uIEJ1dCBkb24ndFxuICAgIC8vIHNjaGVkdWxlIGEgY2FsbGJhY2sgdW50aWwgYWZ0ZXIgZmx1c2hpbmcgbGF5b3V0IHdvcmsuXG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IHJvb3Q7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBsYW5lcztcbiAgfSBlbHNlIHtcblxuICAgIHtcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDA7XG4gICAgICByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbiAgICB9XG4gIH0gLy8gUmVhZCB0aGlzIGFnYWluLCBzaW5jZSBhbiBlZmZlY3QgbWlnaHQgaGF2ZSB1cGRhdGVkIGl0XG5cblxuICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzOyAvLyBDaGVjayBpZiB0aGVyZSdzIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdFxuICAvLyBUT0RPOiBUaGlzIGlzIHBhcnQgb2YgdGhlIGBjb21wb25lbnREaWRDYXRjaGAgaW1wbGVtZW50YXRpb24uIEl0cyBwdXJwb3NlXG4gIC8vIGlzIHRvIGRldGVjdCB3aGV0aGVyIHNvbWV0aGluZyBtaWdodCBoYXZlIGNhbGxlZCBzZXRTdGF0ZSBpbnNpZGVcbiAgLy8gYGNvbXBvbmVudERpZENhdGNoYC4gVGhlIG1lY2hhbmlzbSBpcyBrbm93biB0byBiZSBmbGF3ZWQgYmVjYXVzZSBgc2V0U3RhdGVgXG4gIC8vIGluc2lkZSBgY29tcG9uZW50RGlkQ2F0Y2hgIGlzIGl0c2VsZiBmbGF3ZWQg4oCUIHRoYXQncyB3aHkgd2UgcmVjb21tZW5kXG4gIC8vIGBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3JgIGluc3RlYWQuIEhvd2V2ZXIsIGl0IGNvdWxkIGJlIGltcHJvdmVkIGJ5XG4gIC8vIGNoZWNraW5nIGlmIHJlbWFpbmluZ0xhbmVzIGluY2x1ZGVzIFN5bmMgd29yaywgaW5zdGVhZCBvZiB3aGV0aGVyIHRoZXJlJ3NcbiAgLy8gYW55IHdvcmsgcmVtYWluaW5nIGF0IGFsbCAod2hpY2ggd291bGQgYWxzbyBpbmNsdWRlIHN0dWZmIGxpa2UgU3VzcGVuc2VcbiAgLy8gcmV0cmllcyBvciB0cmFuc2l0aW9ucykuIEl0J3MgYmVlbiBsaWtlIHRoaXMgZm9yIGEgd2hpbGUsIHRob3VnaCwgc28gZml4aW5nXG4gIC8vIGl0IHByb2JhYmx5IGlzbid0IHRoYXQgdXJnZW50LlxuXG4gIGlmIChyZW1haW5pbmdMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmssIHdlIGNhbiBjbGVhciB0aGUgc2V0IG9mIGFscmVhZHkgZmFpbGVkXG4gICAgLy8gZXJyb3IgYm91bmRhcmllcy5cbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKCFyb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICBjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdC5jdXJyZW50LCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgb25Db21taXRSb290KGZpbmlzaGVkV29yay5zdGF0ZU5vZGUsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gIHtcbiAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgIHJvb3QubWVtb2l6ZWRVcGRhdGVycy5jbGVhcigpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBvbkNvbW1pdFJvb3QkMSgpO1xuICB9IC8vIEFsd2F5cyBjYWxsIHRoaXMgYmVmb3JlIGV4aXRpbmcgYGNvbW1pdFJvb3RgLCB0byBlbnN1cmUgdGhhdCBhbnlcbiAgLy8gYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdCBpcyBzY2hlZHVsZWQuXG5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gIGlmIChyZWNvdmVyYWJsZUVycm9ycyAhPT0gbnVsbCkge1xuICAgIC8vIFRoZXJlIHdlcmUgZXJyb3JzIGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IHJlY292ZXJlZCBmcm9tIHRoZW0gd2l0aG91dFxuICAgIC8vIG5lZWRpbmcgdG8gc3VyZmFjZSBpdCB0byB0aGUgVUkuIFdlIGxvZyB0aGVtIGhlcmUuXG4gICAgdmFyIG9uUmVjb3ZlcmFibGVFcnJvciA9IHJvb3Qub25SZWNvdmVyYWJsZUVycm9yO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvdmVyYWJsZUVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJlY292ZXJhYmxlRXJyb3IgPSByZWNvdmVyYWJsZUVycm9yc1tpXTtcbiAgICAgIHZhciBjb21wb25lbnRTdGFjayA9IHJlY292ZXJhYmxlRXJyb3Iuc3RhY2s7XG4gICAgICB2YXIgZGlnZXN0ID0gcmVjb3ZlcmFibGVFcnJvci5kaWdlc3Q7XG4gICAgICBvblJlY292ZXJhYmxlRXJyb3IocmVjb3ZlcmFibGVFcnJvci52YWx1ZSwge1xuICAgICAgICBjb21wb25lbnRTdGFjazogY29tcG9uZW50U3RhY2ssXG4gICAgICAgIGRpZ2VzdDogZGlnZXN0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAoaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgZXJyb3IkMSA9IGZpcnN0VW5jYXVnaHRFcnJvcjtcbiAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgIHRocm93IGVycm9yJDE7XG4gIH0gLy8gSWYgdGhlIHBhc3NpdmUgZWZmZWN0cyBhcmUgdGhlIHJlc3VsdCBvZiBhIGRpc2NyZXRlIHJlbmRlciwgZmx1c2ggdGhlbVxuICAvLyBzeW5jaHJvbm91c2x5IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgdGFzayBzbyB0aGF0IHRoZSByZXN1bHQgaXNcbiAgLy8gaW1tZWRpYXRlbHkgb2JzZXJ2YWJsZS4gT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgdGhhdCB0aGV5IGFyZSBub3RcbiAgLy8gb3JkZXItZGVwZW5kZW50IGFuZCBkbyBub3QgbmVlZCB0byBiZSBvYnNlcnZlZCBieSBleHRlcm5hbCBzeXN0ZW1zLCBzbyB3ZVxuICAvLyBjYW4gd2FpdCB1bnRpbCBhZnRlciBwYWludC5cbiAgLy8gVE9ETzogV2UgY2FuIG9wdGltaXplIHRoaXMgYnkgbm90IHNjaGVkdWxpbmcgdGhlIGNhbGxiYWNrIGVhcmxpZXIuIFNpbmNlIHdlXG4gIC8vIGN1cnJlbnRseSBzY2hlZHVsZSB0aGUgY2FsbGJhY2sgaW4gbXVsdGlwbGUgcGxhY2VzLCB3aWxsIHdhaXQgdW50aWwgdGhvc2VcbiAgLy8gYXJlIGNvbnNvbGlkYXRlZC5cblxuXG4gIGlmIChpbmNsdWRlc1NvbWVMYW5lKHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzLCBTeW5jTGFuZSkgJiYgcm9vdC50YWcgIT09IExlZ2FjeVJvb3QpIHtcbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIH0gLy8gUmVhZCB0aGlzIGFnYWluLCBzaW5jZSBhIHBhc3NpdmUgZWZmZWN0IG1pZ2h0IGhhdmUgdXBkYXRlZCBpdFxuXG5cbiAgcmVtYWluaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcblxuICBpZiAoaW5jbHVkZXNTb21lTGFuZShyZW1haW5pbmdMYW5lcywgU3luY0xhbmUpKSB7XG4gICAge1xuICAgICAgbWFya05lc3RlZFVwZGF0ZVNjaGVkdWxlZCgpO1xuICAgIH0gLy8gQ291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgcm9vdCBzeW5jaHJvbm91c2x5IHJlLXJlbmRlcnMgd2l0aG91dFxuICAgIC8vIGZpbmlzaGluZy4gSWYgdGhlcmUgYXJlIHRvbyBtYW55LCBpdCBpbmRpY2F0ZXMgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AuXG5cblxuICAgIGlmIChyb290ID09PSByb290V2l0aE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgIG5lc3RlZFVwZGF0ZUNvdW50Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IHJvb3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgfSAvLyBJZiBsYXlvdXQgd29yayB3YXMgc2NoZWR1bGVkLCBmbHVzaCBpdCBub3cuXG5cblxuICBmbHVzaFN5bmNDYWxsYmFja3MoKTtcblxuICB7XG4gICAgbWFya0NvbW1pdFN0b3BwZWQoKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzKCkge1xuICAvLyBSZXR1cm5zIHdoZXRoZXIgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgZmx1c2hlZC5cbiAgLy8gVE9ETzogQ29tYmluZSB0aGlzIGNoZWNrIHdpdGggdGhlIG9uZSBpbiBmbHVzaFBhc3NpdmVFRmZlY3RzSW1wbC4gV2Ugc2hvdWxkXG4gIC8vIHByb2JhYmx5IGp1c3QgY29tYmluZSB0aGUgdHdvIGZ1bmN0aW9ucy4gSSBiZWxpZXZlIHRoZXkgd2VyZSBvbmx5IHNlcGFyYXRlXG4gIC8vIGluIHRoZSBmaXJzdCBwbGFjZSBiZWNhdXNlIHdlIHVzZWQgdG8gd3JhcCBpdCB3aXRoXG4gIC8vIGBTY2hlZHVsZXIucnVuV2l0aFByaW9yaXR5YCwgd2hpY2ggYWNjZXB0cyBhIGZ1bmN0aW9uLiBCdXQgbm93IHdlIHRyYWNrIHRoZVxuICAvLyBwcmlvcml0eSB3aXRoaW4gUmVhY3QgaXRzZWxmLCBzbyB3ZSBjYW4gbXV0YXRlIHRoZSB2YXJpYWJsZSBkaXJlY3RseS5cbiAgaWYgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzICE9PSBudWxsKSB7XG4gICAgdmFyIHJlbmRlclByaW9yaXR5ID0gbGFuZXNUb0V2ZW50UHJpb3JpdHkocGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMpO1xuICAgIHZhciBwcmlvcml0eSA9IGxvd2VyRXZlbnRQcmlvcml0eShEZWZhdWx0RXZlbnRQcmlvcml0eSwgcmVuZGVyUHJpb3JpdHkpO1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDMudHJhbnNpdGlvbjtcbiAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDMudHJhbnNpdGlvbiA9IG51bGw7XG4gICAgICBzZXRDdXJyZW50VXBkYXRlUHJpb3JpdHkocHJpb3JpdHkpO1xuICAgICAgcmV0dXJuIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldEN1cnJlbnRVcGRhdGVQcmlvcml0eShwcmV2aW91c1ByaW9yaXR5KTtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDMudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uOyAvLyBPbmNlIHBhc3NpdmUgZWZmZWN0cyBoYXZlIHJ1biBmb3IgdGhlIHRyZWUgLSBnaXZpbmcgY29tcG9uZW50cyBhXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlUHJvZmlsZXJFZmZlY3QoZmliZXIpIHtcbiAge1xuICAgIHBlbmRpbmdQYXNzaXZlUHJvZmlsZXJFZmZlY3RzLnB1c2goZmliZXIpO1xuXG4gICAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgICAgc2NoZWR1bGVDYWxsYmFjayQxKE5vcm1hbFByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwoKSB7XG4gIGlmIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBDYWNoZSBhbmQgY2xlYXIgdGhlIHRyYW5zaXRpb25zIGZsYWdcblxuXG4gIHZhciB0cmFuc2l0aW9ucyA9IHBlbmRpbmdQYXNzaXZlVHJhbnNpdGlvbnM7XG4gIHBlbmRpbmdQYXNzaXZlVHJhbnNpdGlvbnMgPSBudWxsO1xuICB2YXIgcm9vdCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzO1xuICB2YXIgbGFuZXMgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcztcbiAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsOyAvLyBUT0RPOiBUaGlzIGlzIHNvbWV0aW1lcyBvdXQgb2Ygc3luYyB3aXRoIHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzLlxuICAvLyBGaWd1cmUgb3V0IHdoeSBhbmQgZml4IGl0LiBJdCdzIG5vdCBjYXVzaW5nIGFueSBrbm93biBpc3N1ZXMgKHByb2JhYmx5XG4gIC8vIGJlY2F1c2UgaXQncyBvbmx5IHVzZWQgZm9yIHByb2ZpbGluZyksIGJ1dCBpdCdzIGEgcmVmYWN0b3IgaGF6YXJkLlxuXG4gIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gTm9MYW5lcztcblxuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmx1c2ggcGFzc2l2ZSBlZmZlY3RzIHdoaWxlIGFscmVhZHkgcmVuZGVyaW5nLicpO1xuICB9XG5cbiAge1xuICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xuICB9XG5cbiAge1xuICAgIG1hcmtQYXNzaXZlRWZmZWN0c1N0YXJ0ZWQobGFuZXMpO1xuICB9XG5cbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICBjb21taXRQYXNzaXZlVW5tb3VudEVmZmVjdHMocm9vdC5jdXJyZW50KTtcbiAgY29tbWl0UGFzc2l2ZU1vdW50RWZmZWN0cyhyb290LCByb290LmN1cnJlbnQsIGxhbmVzLCB0cmFuc2l0aW9ucyk7IC8vIFRPRE86IE1vdmUgdG8gY29tbWl0UGFzc2l2ZU1vdW50RWZmZWN0c1xuXG4gIHtcbiAgICB2YXIgcHJvZmlsZXJFZmZlY3RzID0gcGVuZGluZ1Bhc3NpdmVQcm9maWxlckVmZmVjdHM7XG4gICAgcGVuZGluZ1Bhc3NpdmVQcm9maWxlckVmZmVjdHMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvZmlsZXJFZmZlY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgX2ZpYmVyID0gcHJvZmlsZXJFZmZlY3RzW2ldO1xuICAgICAgY29tbWl0UGFzc2l2ZUVmZmVjdER1cmF0aW9ucyhyb290LCBfZmliZXIpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBtYXJrUGFzc2l2ZUVmZmVjdHNTdG9wcGVkKCk7XG4gIH1cblxuICB7XG4gICAgY29tbWl0RG91YmxlSW52b2tlRWZmZWN0c0luREVWKHJvb3QuY3VycmVudCwgdHJ1ZSk7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIGZsdXNoU3luY0NhbGxiYWNrcygpO1xuXG4gIHtcbiAgICAvLyBJZiBhZGRpdGlvbmFsIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIHNjaGVkdWxlZCwgaW5jcmVtZW50IGEgY291bnRlci4gSWYgdGhpc1xuICAgIC8vIGV4Y2VlZHMgdGhlIGxpbWl0LCB3ZSdsbCBmaXJlIGEgd2FybmluZy5cbiAgICBpZiAoZGlkU2NoZWR1bGVVcGRhdGVEdXJpbmdQYXNzaXZlRWZmZWN0cykge1xuICAgICAgaWYgKHJvb3QgPT09IHJvb3RXaXRoUGFzc2l2ZU5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuICAgICAgICByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gcm9vdDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcbiAgICB9XG5cbiAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gIH0gLy8gVE9ETzogTW92ZSB0byBjb21taXRQYXNzaXZlTW91bnRFZmZlY3RzXG5cblxuICBvblBvc3RDb21taXRSb290KHJvb3QpO1xuXG4gIHtcbiAgICB2YXIgc3RhdGVOb2RlID0gcm9vdC5jdXJyZW50LnN0YXRlTm9kZTtcbiAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkICE9PSBudWxsICYmIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhpbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKGluc3RhbmNlKSB7XG4gIGlmIChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9PT0gbnVsbCkge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbmV3IFNldChbaW5zdGFuY2VdKTtcbiAgfSBlbHNlIHtcbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5hZGQoaW5zdGFuY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvcihlcnJvcikge1xuICBpZiAoIWhhc1VuY2F1Z2h0RXJyb3IpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yID0gdHJ1ZTtcbiAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgfVxufVxuXG52YXIgb25VbmNhdWdodEVycm9yID0gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yO1xuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChyb290RmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290RmliZXIsIGVycm9ySW5mbywgU3luY0xhbmUpO1xuICB2YXIgcm9vdCA9IGVucXVldWVVcGRhdGUocm9vdEZpYmVyLCB1cGRhdGUsIFN5bmNMYW5lKTtcbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihzb3VyY2VGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IkMSkge1xuICB7XG4gICAgcmVwb3J0VW5jYXVnaHRFcnJvckluREVWKGVycm9yJDEpO1xuICAgIHNldElzUnVubmluZ0luc2VydGlvbkVmZmVjdChmYWxzZSk7XG4gIH1cblxuICBpZiAoc291cmNlRmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIEVycm9yIHdhcyB0aHJvd24gYXQgdGhlIHJvb3QuIFRoZXJlIGlzIG5vIHBhcmVudCwgc28gdGhlIHJvb3RcbiAgICAvLyBpdHNlbGYgc2hvdWxkIGNhcHR1cmUgaXQuXG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qoc291cmNlRmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvciQxKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZmliZXIgPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlciA9IG5lYXJlc3RNb3VudGVkQW5jZXN0b3I7XG4gIH1cblxuICB3aGlsZSAoZmliZXIgIT09IG51bGwpIHtcbiAgICBpZiAoZmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoZmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvciQxKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBjdG9yID0gZmliZXIudHlwZTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSB7XG4gICAgICAgIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihlcnJvciQxLCBzb3VyY2VGaWJlcik7XG4gICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUsIFN5bmNMYW5lKTtcbiAgICAgICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcblxuICAgICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgfVxuXG4gIHtcbiAgICAvLyBUT0RPOiBVbnRpbCB3ZSByZS1sYW5kIHNraXBVbm1vdW50ZWRCb3VuZGFyaWVzIChzZWUgIzIwMTQ3KSwgdGhpcyB3YXJuaW5nXG4gICAgLy8gd2lsbCBmaXJlIGZvciBlcnJvcnMgdGhhdCBhcmUgdGhyb3duIGJ5IGRlc3Ryb3kgZnVuY3Rpb25zIGluc2lkZSBkZWxldGVkXG4gICAgLy8gdHJlZXMuIFdoYXQgaXQgc2hvdWxkIGluc3RlYWQgZG8gaXMgcHJvcGFnYXRlIHRoZSBlcnJvciB0byB0aGUgcGFyZW50IG9mXG4gICAgLy8gdGhlIGRlbGV0ZWQgdHJlZS4gSW4gdGhlIG1lYW50aW1lLCBkbyBub3QgYWRkIHRoaXMgd2FybmluZyB0byB0aGVcbiAgICAvLyBhbGxvd2xpc3Q7IHRoaXMgaXMgb25seSBmb3Igb3VyIGludGVybmFsIHVzZS5cbiAgICBlcnJvcignSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEF0dGVtcHRlZCB0byBjYXB0dXJlIGEgY29tbWl0IHBoYXNlIGVycm9yICcgKyAnaW5zaWRlIGEgZGV0YWNoZWQgdHJlZS4gVGhpcyBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QuIExpa2VseSAnICsgJ2NhdXNlcyBpbmNsdWRlIGRlbGV0aW5nIHRoZSBzYW1lIGZpYmVyIG1vcmUgdGhhbiBvbmNlLCBjb21taXR0aW5nIGFuICcgKyAnYWxyZWFkeS1maW5pc2hlZCB0cmVlLCBvciBhbiBpbmNvbnNpc3RlbnQgcmV0dXJuIHBvaW50ZXIuXFxuXFxuJyArICdFcnJvciBtZXNzYWdlOlxcblxcbiVzJywgZXJyb3IkMSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBpbmdTdXNwZW5kZWRSb290KHJvb3QsIHdha2VhYmxlLCBwaW5nZWRMYW5lcykge1xuICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG5cbiAgaWYgKHBpbmdDYWNoZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSB3YWtlYWJsZSByZXNvbHZlZCwgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gbWVtb2l6ZSwgYmVjYXVzZSBpdCB3aWxsXG4gICAgLy8gbmV2ZXIgYmUgdGhyb3duIGFnYWluLlxuICAgIHBpbmdDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMpO1xuICB3YXJuSWZTdXNwZW5zZVJlc29sdXRpb25Ob3RXcmFwcGVkV2l0aEFjdERFVihyb290KTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmIGlzU3Vic2V0T2ZMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcywgcGluZ2VkTGFuZXMpKSB7XG4gICAgLy8gUmVjZWl2ZWQgYSBwaW5nIGF0IHRoZSBzYW1lIHByaW9yaXR5IGxldmVsIGF0IHdoaWNoIHdlJ3JlIGN1cnJlbnRseVxuICAgIC8vIHJlbmRlcmluZy4gV2UgbWlnaHQgd2FudCB0byByZXN0YXJ0IHRoaXMgcmVuZGVyLiBUaGlzIHNob3VsZCBtaXJyb3JcbiAgICAvLyB0aGUgbG9naWMgb2Ygd2hldGhlciBvciBub3QgYSByb290IHN1c3BlbmRzIG9uY2UgaXQgY29tcGxldGVzLlxuICAgIC8vIFRPRE86IElmIHdlJ3JlIHJlbmRlcmluZyBzeW5jIGVpdGhlciBkdWUgdG8gU3luYywgQmF0Y2hlZCBvciBleHBpcmVkLFxuICAgIC8vIHdlIHNob3VsZCBwcm9iYWJseSBuZXZlciByZXN0YXJ0LlxuICAgIC8vIElmIHdlJ3JlIHN1c3BlbmRlZCB3aXRoIGRlbGF5LCBvciBpZiBpdCdzIGEgcmV0cnksIHdlJ2xsIGFsd2F5cyBzdXNwZW5kXG4gICAgLy8gc28gd2UgY2FuIGFsd2F5cyByZXN0YXJ0LlxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5IHx8IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQgJiYgaW5jbHVkZXNPbmx5UmV0cmllcyh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykgJiYgbm93KCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIDwgRkFMTEJBQ0tfVEhST1RUTEVfTVMpIHtcbiAgICAgIC8vIFJlc3RhcnQgZnJvbSB0aGUgcm9vdC5cbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBFdmVuIHRob3VnaCB3ZSBjYW4ndCByZXN0YXJ0IHJpZ2h0IG5vdywgd2UgbWlnaHQgZ2V0IGFuXG4gICAgICAvLyBvcHBvcnR1bml0eSBsYXRlci4gU28gd2UgbWFyayB0aGlzIHJlbmRlciBhcyBoYXZpbmcgYSBwaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzLCBwaW5nZWRMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG59XG5cbmZ1bmN0aW9uIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpIHtcbiAgLy8gVGhlIGJvdW5kYXJ5IGZpYmVyIChhIFN1c3BlbnNlIGNvbXBvbmVudCBvciBTdXNwZW5zZUxpc3QgY29tcG9uZW50KVxuICAvLyBwcmV2aW91c2x5IHdhcyByZW5kZXJlZCBpbiBpdHMgZmFsbGJhY2sgc3RhdGUuIE9uZSBvZiB0aGUgcHJvbWlzZXMgdGhhdFxuICAvLyBzdXNwZW5kZWQgaXQgaGFzIHJlc29sdmVkLCB3aGljaCBtZWFucyBhdCBsZWFzdCBwYXJ0IG9mIHRoZSB0cmVlIHdhc1xuICAvLyBsaWtlbHkgdW5ibG9ja2VkLiBUcnkgcmVuZGVyaW5nIGFnYWluLCBhdCBhIG5ldyBsYW5lcy5cbiAgaWYgKHJldHJ5TGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgLy8gVE9ETzogQXNzaWduIHRoaXMgdG8gYHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lYD8gdG8gYXZvaWRcbiAgICAvLyB1bm5lY2Vzc2FyeSBlbnRhbmdsZW1lbnQ/XG4gICAgcmV0cnlMYW5lID0gcmVxdWVzdFJldHJ5TGFuZShib3VuZGFyeUZpYmVyKTtcbiAgfSAvLyBUT0RPOiBTcGVjaWFsIGNhc2UgaWRsZSBwcmlvcml0eT9cblxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgcmV0cnlMYW5lLCBldmVudFRpbWUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJldHJ5RGVoeWRyYXRlZFN1c3BlbnNlQm91bmRhcnkoYm91bmRhcnlGaWJlcikge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGJvdW5kYXJ5RmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHJldHJ5TGFuZSA9IE5vTGFuZTtcblxuICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgIHJldHJ5TGFuZSA9IHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lO1xuICB9XG5cbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG59XG5mdW5jdGlvbiByZXNvbHZlUmV0cnlXYWtlYWJsZShib3VuZGFyeUZpYmVyLCB3YWtlYWJsZSkge1xuICB2YXIgcmV0cnlMYW5lID0gTm9MYW5lOyAvLyBEZWZhdWx0XG5cbiAgdmFyIHJldHJ5Q2FjaGU7XG5cbiAgc3dpdGNoIChib3VuZGFyeUZpYmVyLnRhZykge1xuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gICAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGJvdW5kYXJ5RmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0cnlMYW5lID0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpbmdlZCB1bmtub3duIHN1c3BlbnNlIGJvdW5kYXJ5IHR5cGUuICcgKyAnVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC4nKTtcbiAgfVxuXG4gIGlmIChyZXRyeUNhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcmV0cnlDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG59IC8vIENvbXB1dGVzIHRoZSBuZXh0IEp1c3QgTm90aWNlYWJsZSBEaWZmZXJlbmNlIChKTkQpIGJvdW5kYXJ5LlxuLy8gVGhlIHRoZW9yeSBpcyB0aGF0IGEgcGVyc29uIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLlxuLy8gVGhlcmVmb3JlLCBpZiB3ZSB3YWl0IGEgYml0IGxvbmdlciB0aGFuIG5lY2Vzc2FyeSB0aGF0IHdvbid0IHRyYW5zbGF0ZSB0byBhIG5vdGljZWFibGVcbi8vIGRpZmZlcmVuY2UgaW4gdGhlIGV4cGVyaWVuY2UuIEhvd2V2ZXIsIHdhaXRpbmcgZm9yIGxvbmdlciBtaWdodCBtZWFuIHRoYXQgd2UgY2FuIGF2b2lkXG4vLyBzaG93aW5nIGFuIGludGVybWVkaWF0ZSBsb2FkaW5nIHN0YXRlLiBUaGUgbG9uZ2VyIHdlIGhhdmUgYWxyZWFkeSB3YWl0ZWQsIHRoZSBoYXJkZXIgaXRcbi8vIGlzIHRvIHRlbGwgc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS4gVGhlcmVmb3JlLCB0aGUgbG9uZ2VyIHdlJ3ZlIGFscmVhZHkgd2FpdGVkLFxuLy8gdGhlIGxvbmdlciB3ZSBjYW4gd2FpdCBhZGRpdGlvbmFsbHkuIEF0IHNvbWUgcG9pbnQgd2UgaGF2ZSB0byBnaXZlIHVwIHRob3VnaC5cbi8vIFdlIHBpY2sgYSB0cmFpbiBtb2RlbCB3aGVyZSB0aGUgbmV4dCBib3VuZGFyeSBjb21taXRzIGF0IGEgY29uc2lzdGVudCBzY2hlZHVsZS5cbi8vIFRoZXNlIHBhcnRpY3VsYXIgbnVtYmVycyBhcmUgdmFndWUgZXN0aW1hdGVzLiBXZSBleHBlY3QgdG8gYWRqdXN0IHRoZW0gYmFzZWQgb24gcmVzZWFyY2guXG5cbmZ1bmN0aW9uIGpuZCh0aW1lRWxhcHNlZCkge1xuICByZXR1cm4gdGltZUVsYXBzZWQgPCAxMjAgPyAxMjAgOiB0aW1lRWxhcHNlZCA8IDQ4MCA/IDQ4MCA6IHRpbWVFbGFwc2VkIDwgMTA4MCA/IDEwODAgOiB0aW1lRWxhcHNlZCA8IDE5MjAgPyAxOTIwIDogdGltZUVsYXBzZWQgPCAzMDAwID8gMzAwMCA6IHRpbWVFbGFwc2VkIDwgNDMyMCA/IDQzMjAgOiBjZWlsKHRpbWVFbGFwc2VkIC8gMTk2MCkgKiAxOTYwO1xufVxuXG5mdW5jdGlvbiBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKSB7XG4gIGlmIChuZXN0ZWRVcGRhdGVDb3VudCA+IE5FU1RFRF9VUERBVEVfTElNSVQpIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCAnICsgJ3JlcGVhdGVkbHkgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIGNvbXBvbmVudFdpbGxVcGRhdGUgb3IgJyArICdjb21wb25lbnREaWRVcGRhdGUuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIG5lc3RlZCB1cGRhdGVzIHRvICcgKyAncHJldmVudCBpbmZpbml0ZSBsb29wcy4nKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID4gTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUKSB7XG4gICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuICAgICAgcm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGw7XG5cbiAgICAgIGVycm9yKCdNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgJyArIFwiY2FsbHMgc2V0U3RhdGUgaW5zaWRlIHVzZUVmZmVjdCwgYnV0IHVzZUVmZmVjdCBlaXRoZXIgZG9lc24ndCBcIiArICdoYXZlIGEgZGVwZW5kZW5jeSBhcnJheSwgb3Igb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlcyBvbiAnICsgJ2V2ZXJ5IHJlbmRlci4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmx1c2hSZW5kZXJQaGFzZVN0cmljdE1vZGVXYXJuaW5nc0luREVWKCkge1xuICB7XG4gICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZygpO1xuXG4gICAge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3MoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RG91YmxlSW52b2tlRWZmZWN0c0luREVWKGZpYmVyLCBoYXNQYXNzaXZlRWZmZWN0cykge1xuICB7XG4gICAgLy8gVE9ETyAoU3RyaWN0RWZmZWN0cykgU2hvdWxkIHdlIHNldCBhIG1hcmtlciBvbiB0aGUgcm9vdCBpZiBpdCBjb250YWlucyBzdHJpY3QgZWZmZWN0c1xuICAgIC8vIHNvIHdlIGRvbid0IHRyYXZlcnNlIHVubmVjZXNzYXJpbHk/IHNpbWlsYXIgdG8gc3VidHJlZUZsYWdzIGJ1dCBqdXN0IGF0IHRoZSByb290IGxldmVsLlxuICAgIC8vIE1heWJlIG5vdCBhIGJpZyBkZWFsIHNpbmNlIHRoaXMgaXMgREVWIG9ubHkgYmVoYXZpb3IuXG4gICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICBpbnZva2VFZmZlY3RzSW5EZXYoZmliZXIsIE1vdW50TGF5b3V0RGV2LCBpbnZva2VMYXlvdXRFZmZlY3RVbm1vdW50SW5ERVYpO1xuXG4gICAgaWYgKGhhc1Bhc3NpdmVFZmZlY3RzKSB7XG4gICAgICBpbnZva2VFZmZlY3RzSW5EZXYoZmliZXIsIE1vdW50UGFzc2l2ZURldiwgaW52b2tlUGFzc2l2ZUVmZmVjdFVubW91bnRJbkRFVik7XG4gICAgfVxuXG4gICAgaW52b2tlRWZmZWN0c0luRGV2KGZpYmVyLCBNb3VudExheW91dERldiwgaW52b2tlTGF5b3V0RWZmZWN0TW91bnRJbkRFVik7XG5cbiAgICBpZiAoaGFzUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAgIGludm9rZUVmZmVjdHNJbkRldihmaWJlciwgTW91bnRQYXNzaXZlRGV2LCBpbnZva2VQYXNzaXZlRWZmZWN0TW91bnRJbkRFVik7XG4gICAgfVxuXG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VFZmZlY3RzSW5EZXYoZmlyc3RDaGlsZCwgZmliZXJGbGFncywgaW52b2tlRWZmZWN0Rm4pIHtcbiAge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gcmUtY2hlY2sgU3RyaWN0RWZmZWN0c01vZGUgaGVyZS5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlmIHRoYXQgY2hlY2sgaGFzIGFscmVhZHkgcGFzc2VkLlxuICAgIHZhciBjdXJyZW50ID0gZmlyc3RDaGlsZDtcbiAgICB2YXIgc3VidHJlZVJvb3QgPSBudWxsO1xuXG4gICAgd2hpbGUgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmltYXJ5U3VidHJlZUZsYWcgPSBjdXJyZW50LnN1YnRyZWVGbGFncyAmIGZpYmVyRmxhZ3M7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBzdWJ0cmVlUm9vdCAmJiBjdXJyZW50LmNoaWxkICE9PSBudWxsICYmIHByaW1hcnlTdWJ0cmVlRmxhZyAhPT0gTm9GbGFncykge1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5jaGlsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgoY3VycmVudC5mbGFncyAmIGZpYmVyRmxhZ3MpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgaW52b2tlRWZmZWN0Rm4oY3VycmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudC5zaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQuc2libGluZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50ID0gc3VidHJlZVJvb3QgPSBjdXJyZW50LnJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG51bGw7XG5mdW5jdGlvbiB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBXZSBsZXQgdGhlIG90aGVyIHdhcm5pbmcgYWJvdXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgZGVhbCB3aXRoIHRoaXMgb25lLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gZmliZXIudGFnO1xuXG4gICAgaWYgKHRhZyAhPT0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCAmJiB0YWcgIT09IEhvc3RSb290ICYmIHRhZyAhPT0gQ2xhc3NDb21wb25lbnQgJiYgdGFnICE9PSBGdW5jdGlvbkNvbXBvbmVudCAmJiB0YWcgIT09IEZvcndhcmRSZWYgJiYgdGFnICE9PSBNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gU2ltcGxlTWVtb0NvbXBvbmVudCkge1xuICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtjb21wb25lbnROYW1lXSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgIGVycm9yKFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhIGNvbXBvbmVudCB0aGF0IGhhc24ndCBtb3VudGVkIHlldC4gXCIgKyAnVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgaGF2ZSBhIHNpZGUtZWZmZWN0IGluIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgJyArICdhc3luY2hyb25vdXNseSBsYXRlciBjYWxscyB0cmllcyB0byB1cGRhdGUgdGhlIGNvbXBvbmVudC4gTW92ZSB0aGlzIHdvcmsgdG8gJyArICd1c2VFZmZlY3QgaW5zdGVhZC4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG52YXIgYmVnaW5Xb3JrJDE7XG5cbntcbiAgdmFyIGR1bW15RmliZXIgPSBudWxsO1xuXG4gIGJlZ2luV29yayQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKSB7XG4gICAgLy8gSWYgYSBjb21wb25lbnQgdGhyb3dzIGFuIGVycm9yLCB3ZSByZXBsYXkgaXQgYWdhaW4gaW4gYSBzeW5jaHJvbm91c2x5XG4gICAgLy8gZGlzcGF0Y2hlZCBldmVudCwgc28gdGhhdCB0aGUgZGVidWdnZXIgd2lsbCB0cmVhdCBpdCBhcyBhbiB1bmNhdWdodFxuICAgIC8vIGVycm9yIFNlZSBSZWFjdEVycm9yVXRpbHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgLy8gQmVmb3JlIGVudGVyaW5nIHRoZSBiZWdpbiBwaGFzZSwgY29weSB0aGUgd29yay1pbi1wcm9ncmVzcyBvbnRvIGEgZHVtbXlcbiAgICAvLyBmaWJlci4gSWYgYmVnaW5Xb3JrIHRocm93cywgd2UnbGwgdXNlIHRoaXMgdG8gcmVzZXQgdGhlIHN0YXRlLlxuICAgIHZhciBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSA9IGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKGR1bW15RmliZXIsIHVuaXRPZldvcmspO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBiZWdpbldvcmsoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuICAgIH0gY2F0Y2ggKG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgIGlmIChkaWRTdXNwZW5kT3JFcnJvcldoaWxlSHlkcmF0aW5nREVWKCkgfHwgb3JpZ2luYWxFcnJvciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3JpZ2luYWxFcnJvciA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBEb24ndCByZXBsYXkgcHJvbWlzZXMuXG4gICAgICAgIC8vIERvbid0IHJlcGxheSBlcnJvcnMgaWYgd2UgYXJlIGh5ZHJhdGluZyBhbmQgaGF2ZSBhbHJlYWR5IHN1c3BlbmRlZCBvciBoYW5kbGVkIGFuIGVycm9yXG4gICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICB9IC8vIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgd2l0aCBoYW5kbGVFcnJvcjsgYW55IGNoYW5nZXMgaGVyZSBtdXN0IGhhdmVcbiAgICAgIC8vIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0aGVyZS5cblxuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NBZnRlclRocm93KCk7IC8vIERvbid0IHJlc2V0IGN1cnJlbnQgZGVidWcgZmliZXIsIHNpbmNlIHdlJ3JlIGFib3V0IHRvIHdvcmsgb24gdGhlXG4gICAgICAvLyBzYW1lIGZpYmVyIGFnYWluLlxuICAgICAgLy8gVW53aW5kIHRoZSBmYWlsZWQgc3RhY2sgZnJhbWVcblxuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIHVuaXRPZldvcmspOyAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm9wZXJ0aWVzIG9mIHRoZSBmaWJlci5cblxuICAgICAgYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodW5pdE9mV29yaywgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkpO1xuXG4gICAgICBpZiAoIHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlc2V0IHRoZSBwcm9maWxlciB0aW1lci5cbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgICAgfSAvLyBSdW4gYmVnaW5Xb3JrIGFnYWluLlxuXG5cbiAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBiZWdpbldvcmssIG51bGwsIGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKTtcblxuICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgdmFyIHJlcGxheUVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcmVwbGF5RXJyb3IgPT09ICdvYmplY3QnICYmIHJlcGxheUVycm9yICE9PSBudWxsICYmIHJlcGxheUVycm9yLl9zdXBwcmVzc0xvZ2dpbmcgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IgPT09ICdvYmplY3QnICYmIG9yaWdpbmFsRXJyb3IgIT09IG51bGwgJiYgIW9yaWdpbmFsRXJyb3IuX3N1cHByZXNzTG9nZ2luZykge1xuICAgICAgICAgIC8vIElmIHN1cHByZXNzZWQsIGxldCB0aGUgZmxhZyBjYXJyeSBvdmVyIHRvIHRoZSBvcmlnaW5hbCBlcnJvciB3aGljaCBpcyB0aGUgb25lIHdlJ2xsIHJldGhyb3cuXG4gICAgICAgICAgb3JpZ2luYWxFcnJvci5fc3VwcHJlc3NMb2dnaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBXZSBhbHdheXMgdGhyb3cgdGhlIG9yaWdpbmFsIGVycm9yIGluIGNhc2UgdGhlIHNlY29uZCByZW5kZXIgcGFzcyBpcyBub3QgaWRlbXBvdGVudC5cbiAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiBhIG1lbW9pemVkIGZ1bmN0aW9uIG9yIENvbW1vbkpTIG1vZHVsZSBkb2Vzbid0IHRocm93IGFmdGVyIGZpcnN0IGludm9jYXRpb24uXG5cblxuICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICB9XG4gIH07XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudDtcblxue1xuICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoaXNSZW5kZXJpbmcgJiYgIWdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcmVuZGVyaW5nQ29tcG9uZW50TmFtZSA9IHdvcmtJblByb2dyZXNzICYmIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8ICdVbmtub3duJzsgLy8gRGVkdXBlIGJ5IHRoZSByZW5kZXJpbmcgY29tcG9uZW50IGJlY2F1c2UgaXQncyB0aGUgb25lIHRoYXQgbmVlZHMgdG8gYmUgZml4ZWQuXG5cbiAgICAgICAgICAgIHZhciBkZWR1cGVLZXkgPSByZW5kZXJpbmdDb21wb25lbnROYW1lO1xuXG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5oYXMoZGVkdXBlS2V5KSkge1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuYWRkKGRlZHVwZUtleSk7XG4gICAgICAgICAgICAgIHZhciBzZXRTdGF0ZUNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgYSBjb21wb25lbnQgKGAlc2ApIHdoaWxlIHJlbmRlcmluZyBhICcgKyAnZGlmZmVyZW50IGNvbXBvbmVudCAoYCVzYCkuIFRvIGxvY2F0ZSB0aGUgYmFkIHNldFN0YXRlKCkgY2FsbCBpbnNpZGUgYCVzYCwgJyArICdmb2xsb3cgdGhlIHN0YWNrIHRyYWNlIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc2V0c3RhdGUtaW4tcmVuZGVyJywgc2V0U3RhdGVDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlcikge1xuICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyAnICsgJ3dpdGhpbiBgcmVuZGVyYCkuIFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgJyArICdmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuJyk7XG5cbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgbGFuZXMpIHtcbiAge1xuICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgdmFyIG1lbW9pemVkVXBkYXRlcnMgPSByb290Lm1lbW9pemVkVXBkYXRlcnM7XG4gICAgICBtZW1vaXplZFVwZGF0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxpbmdGaWJlcikge1xuICAgICAgICBhZGRGaWJlclRvTGFuZXNNYXAocm9vdCwgc2NoZWR1bGluZ0ZpYmVyLCBsYW5lcyk7XG4gICAgICB9KTsgLy8gVGhpcyBmdW5jdGlvbiBpbnRlbnRpb25hbGx5IGRvZXMgbm90IGNsZWFyIG1lbW9pemVkIHVwZGF0ZXJzLlxuICAgICAgLy8gVGhvc2UgbWF5IHN0aWxsIGJlIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGNvbW1pdFxuICAgICAgLy8gYW5kIGEgZnV0dXJlIG9uZSAoZS5nLiBTdXNwZW5zZSkuXG4gICAgfVxuICB9XG59XG52YXIgZmFrZUFjdENhbGxiYWNrTm9kZSA9IHt9O1xuXG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrJDEocHJpb3JpdHlMZXZlbCwgY2FsbGJhY2spIHtcbiAge1xuICAgIC8vIElmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUgYW4gYGFjdGAgc2NvcGUsIGJ5cGFzcyBTY2hlZHVsZXIgYW5kIHB1c2ggdG9cbiAgICAvLyB0aGUgYGFjdGAgcXVldWUgaW5zdGVhZC5cbiAgICB2YXIgYWN0UXVldWUgPSBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQxLmN1cnJlbnQ7XG5cbiAgICBpZiAoYWN0UXVldWUgIT09IG51bGwpIHtcbiAgICAgIGFjdFF1ZXVlLnB1c2goY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIGZha2VBY3RDYWxsYmFja05vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2skMShjYWxsYmFja05vZGUpIHtcbiAgaWYgKCBjYWxsYmFja05vZGUgPT09IGZha2VBY3RDYWxsYmFja05vZGUpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gSW4gcHJvZHVjdGlvbiwgYWx3YXlzIGNhbGwgU2NoZWR1bGVyLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgc3RyaXBwZWQgb3V0LlxuXG5cbiAgcmV0dXJuIGNhbmNlbENhbGxiYWNrKGNhbGxiYWNrTm9kZSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpIHtcbiAgLy8gTmV2ZXIgZm9yY2UgZmx1c2ggaW4gcHJvZHVjdGlvbi4gVGhpcyBmdW5jdGlvbiBzaG91bGQgZ2V0IHN0cmlwcGVkIG91dC5cbiAgcmV0dXJuICBSZWFjdEN1cnJlbnRBY3RRdWV1ZSQxLmN1cnJlbnQgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlVwZGF0ZXNOb3RXcmFwcGVkV2l0aEFjdERFVihmaWJlcikge1xuICB7XG4gICAgaWYgKGZpYmVyLm1vZGUgJiBDb25jdXJyZW50TW9kZSkge1xuICAgICAgaWYgKCFpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCgpKSB7XG4gICAgICAgIC8vIE5vdCBpbiBhbiBhY3QgZW52aXJvbm1lbnQuIE5vIG5lZWQgdG8gd2Fybi5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMZWdhY3kgbW9kZSBoYXMgYWRkaXRpb25hbCBjYXNlcyB3aGVyZSB3ZSBzdXBwcmVzcyBhIHdhcm5pbmcuXG4gICAgICBpZiAoIWlzTGVnYWN5QWN0RW52aXJvbm1lbnQoKSkge1xuICAgICAgICAvLyBOb3QgaW4gYW4gYWN0IGVudmlyb25tZW50LiBObyBuZWVkIHRvIHdhcm4uXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgIT09IE5vQ29udGV4dCkge1xuICAgICAgICAvLyBMZWdhY3kgbW9kZSBkb2Vzbid0IHdhcm4gaWYgdGhlIHVwZGF0ZSBpcyBiYXRjaGVkLCBpLmUuXG4gICAgICAgIC8vIGJhdGNoZWRVcGRhdGVzIG9yIGZsdXNoU3luYy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmliZXIudGFnICE9PSBGdW5jdGlvbkNvbXBvbmVudCAmJiBmaWJlci50YWcgIT09IEZvcndhcmRSZWYgJiYgZmliZXIudGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50KSB7XG4gICAgICAgIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHByZS1ob29rcyBjb2RlLCBsZWdhY3kgbW9kZSBvbmx5XG4gICAgICAgIC8vIHdhcm5zIGZvciB1cGRhdGVzIHRoYXQgb3JpZ2luYXRlIGZyb20gYSBob29rLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFJlYWN0Q3VycmVudEFjdFF1ZXVlJDEuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgaW5zaWRlIGEgdGVzdCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlN1c3BlbnNlUmVzb2x1dGlvbk5vdFdyYXBwZWRXaXRoQWN0REVWKHJvb3QpIHtcbiAge1xuICAgIGlmIChyb290LnRhZyAhPT0gTGVnYWN5Um9vdCAmJiBpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCgpICYmIFJlYWN0Q3VycmVudEFjdFF1ZXVlJDEuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0Egc3VzcGVuZGVkIHJlc291cmNlIGZpbmlzaGVkIGxvYWRpbmcgaW5zaWRlIGEgdGVzdCwgYnV0IHRoZSBldmVudCAnICsgJ3dhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG4nICsgJ1doZW4gdGVzdGluZywgY29kZSB0aGF0IHJlc29sdmVzIHN1c3BlbmRlZCBkYXRhIHNob3VsZCBiZSB3cmFwcGVkICcgKyAnaW50byBhY3QoLi4uKTpcXG5cXG4nICsgJ2FjdCgoKSA9PiB7XFxuJyArICcgIC8qIGZpbmlzaCBsb2FkaW5nIHN1c3BlbmRlZCBkYXRhICovXFxuJyArICd9KTtcXG4nICsgJy8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuJyArIFwiVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBcIiArICdpbiB0aGUgYnJvd3Nlci4nICsgJyBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0Jyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldElzUnVubmluZ0luc2VydGlvbkVmZmVjdChpc1J1bm5pbmcpIHtcbiAge1xuICAgIGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9IGlzUnVubmluZztcbiAgfVxufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9wcm9kLWVycm9yLWNvZGVzICovXG52YXIgcmVzb2x2ZUZhbWlseSA9IG51bGw7IC8vICRGbG93Rml4TWUgRmxvdyBnZXRzIGNvbmZ1c2VkIGJ5IGEgV2Vha1NldCBmZWF0dXJlIGNoZWNrIGJlbG93LlxuXG52YXIgZmFpbGVkQm91bmRhcmllcyA9IG51bGw7XG52YXIgc2V0UmVmcmVzaEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICB7XG4gICAgcmVzb2x2ZUZhbWlseSA9IGhhbmRsZXI7XG4gIH1cbn07XG5mdW5jdGlvbiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAvLyBObyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlcy5cbiAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlYWwgZm9yd2FyZFJlZi4gRG9uJ3Qgd2FudCB0byBjcmFzaCBlYXJseS5cbiAgICAgIGlmICh0eXBlICE9PSBudWxsICYmIHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRm9yd2FyZFJlZiBpcyBzcGVjaWFsIGJlY2F1c2UgaXRzIHJlc29sdmVkIC50eXBlIGlzIGFuIG9iamVjdCxcbiAgICAgICAgLy8gYnV0IGl0J3MgcG9zc2libGUgdGhhdCB3ZSBvbmx5IGhhdmUgaXRzIGlubmVyIHJlbmRlciBmdW5jdGlvbiBpbiB0aGUgbWFwLlxuICAgICAgICAvLyBJZiB0aGF0IGlubmVyIHJlbmRlciBmdW5jdGlvbiBpcyBkaWZmZXJlbnQsIHdlJ2xsIGJ1aWxkIGEgbmV3IGZvcndhcmRSZWYgdHlwZS5cbiAgICAgICAgdmFyIGN1cnJlbnRSZW5kZXIgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZS5yZW5kZXIpO1xuXG4gICAgICAgIGlmICh0eXBlLnJlbmRlciAhPT0gY3VycmVudFJlbmRlcikge1xuICAgICAgICAgIHZhciBzeW50aGV0aWNUeXBlID0ge1xuICAgICAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgICAgICAgICByZW5kZXI6IGN1cnJlbnRSZW5kZXJcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3ludGhldGljVHlwZS5kaXNwbGF5TmFtZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN5bnRoZXRpY1R5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoZmliZXIsIGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBwcmV2VHlwZSA9IGZpYmVyLmVsZW1lbnRUeXBlO1xuICAgIHZhciBuZXh0VHlwZSA9IGVsZW1lbnQudHlwZTsgLy8gSWYgd2UgZ290IGhlcmUsIHdlIGtub3cgdHlwZXMgYXJlbid0ID09PSBlcXVhbC5cblxuICAgIHZhciBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IGZhbHNlO1xuICAgIHZhciAkJHR5cGVvZk5leHRUeXBlID0gdHlwZW9mIG5leHRUeXBlID09PSAnb2JqZWN0JyAmJiBuZXh0VHlwZSAhPT0gbnVsbCA/IG5leHRUeXBlLiQkdHlwZW9mIDogbnVsbDtcblxuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIGlubmVyIHR5cGUgeWV0LlxuICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoYXQgdGhlIGxhenkgaW5uZXIgdHlwZSBpcyBzdGFibGUsXG4gICAgICAgICAgICAvLyBhbmQgc28gaXQgaXMgc3VmZmljaWVudCB0byBhdm9pZCByZWNvbmNpbGluZyBpdCBhd2F5LlxuICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIHVud3JhcCBvciBhY3R1YWxseSB1c2UgdGhlIG5ldyBsYXp5IHR5cGUuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IGlmIGl0IHdhcyBidXQgY2FuIG5vIGxvbmdlciBiZSBzaW1wbGUsXG4gICAgICAgICAgICAvLyB3ZSBzaG91bGRuJ3Qgc2V0IHRoaXMuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBDaGVjayBpZiBib3RoIHR5cGVzIGhhdmUgYSBmYW1pbHkgYW5kIGl0J3MgdGhlIHNhbWUgb25lLlxuXG5cbiAgICBpZiAobmVlZHNDb21wYXJlRmFtaWxpZXMpIHtcbiAgICAgIC8vIE5vdGU6IG1lbW8oKSBhbmQgZm9yd2FyZFJlZigpIHdlJ2xsIGNvbXBhcmUgb3V0ZXIgcmF0aGVyIHRoYW4gaW5uZXIgdHlwZS5cbiAgICAgIC8vIFRoaXMgbWVhbnMgYm90aCBvZiB0aGVtIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCB0byBwcmVzZXJ2ZSBzdGF0ZS5cbiAgICAgIC8vIElmIHdlIHVud3JhcHBlZCBhbmQgY29tcGFyZWQgdGhlIGlubmVyIHR5cGVzIGZvciB3cmFwcGVycyBpbnN0ZWFkLFxuICAgICAgLy8gdGhlbiB3ZSB3b3VsZCByaXNrIGZhbHNlbHkgc2F5aW5nIHR3byBzZXBhcmF0ZSBtZW1vKEZvbylcbiAgICAgIC8vIGNhbGxzIGFyZSBlcXVpdmFsZW50IGJlY2F1c2UgdGhleSB3cmFwIHRoZSBzYW1lIEZvbyBmdW5jdGlvbi5cbiAgICAgIHZhciBwcmV2RmFtaWx5ID0gcmVzb2x2ZUZhbWlseShwcmV2VHlwZSk7XG5cbiAgICAgIGlmIChwcmV2RmFtaWx5ICE9PSB1bmRlZmluZWQgJiYgcHJldkZhbWlseSA9PT0gcmVzb2x2ZUZhbWlseShuZXh0VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcikge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBXZWFrU2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgPT09IG51bGwpIHtcbiAgICAgIGZhaWxlZEJvdW5kYXJpZXMgPSBuZXcgV2Vha1NldCgpO1xuICAgIH1cblxuICAgIGZhaWxlZEJvdW5kYXJpZXMuYWRkKGZpYmVyKTtcbiAgfVxufVxudmFyIHNjaGVkdWxlUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCB1cGRhdGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzdGFsZUZhbWlsaWVzID0gdXBkYXRlLnN0YWxlRmFtaWxpZXMsXG4gICAgICAgIHVwZGF0ZWRGYW1pbGllcyA9IHVwZGF0ZS51cGRhdGVkRmFtaWxpZXM7XG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBzY2hlZHVsZVJvb3QgPSBmdW5jdGlvbiAocm9vdCwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJvb3QuY29udGV4dCAhPT0gZW1wdHlDb250ZXh0T2JqZWN0KSB7XG4gICAgICAvLyBTdXBlciBlZGdlIGNhc2U6IHJvb3QgaGFzIGEgbGVnYWN5IF9yZW5kZXJTdWJ0cmVlIGNvbnRleHRcbiAgICAgIC8vIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSBwYXJlbnRDb21wb25lbnQgc28gd2UgY2FuJ3QgcGFzcyBpdC5cbiAgICAgIC8vIEp1c3QgaWdub3JlLiBXZSdsbCBkZWxldGUgdGhpcyB3aXRoIF9yZW5kZXJTdWJ0cmVlIGNvZGUgcGF0aCBsYXRlci5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCByb290LCBudWxsLCBudWxsKTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShmaWJlciwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlLFxuICAgICAgICBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJlc29sdmVGYW1pbHkgdG8gYmUgc2V0IGR1cmluZyBob3QgcmVsb2FkLicpO1xuICAgIH1cblxuICAgIHZhciBuZWVkc1JlbmRlciA9IGZhbHNlO1xuICAgIHZhciBuZWVkc1JlbW91bnQgPSBmYWxzZTtcblxuICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseShjYW5kaWRhdGVUeXBlKTtcblxuICAgICAgaWYgKGZhbWlseSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzdGFsZUZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1cGRhdGVkRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBpZiAodGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmVlZHNSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzICE9PSBudWxsKSB7XG4gICAgICBpZiAoZmFpbGVkQm91bmRhcmllcy5oYXMoZmliZXIpIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBmYWlsZWRCb3VuZGFyaWVzLmhhcyhhbHRlcm5hdGUpKSB7XG4gICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzUmVtb3VudCkge1xuICAgICAgZmliZXIuX2RlYnVnTmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50IHx8IG5lZWRzUmVuZGVyKSB7XG4gICAgICB2YXIgX3Jvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgICAgaWYgKF9yb290ICE9PSBudWxsKSB7XG4gICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihfcm9vdCwgZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsICYmICFuZWVkc1JlbW91bnQpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoY2hpbGQsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfVxuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoc2libGluZywgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCBmYW1pbGllcykge1xuICB7XG4gICAgdmFyIGhvc3RJbnN0YW5jZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHR5cGVzID0gbmV3IFNldChmYW1pbGllcy5tYXAoZnVuY3Rpb24gKGZhbWlseSkge1xuICAgICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICAgIH0pKTtcbiAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgcmV0dXJuIGhvc3RJbnN0YW5jZXM7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShmaWJlciwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBkaWRNYXRjaCA9IGZhbHNlO1xuXG4gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgIGlmICh0eXBlcy5oYXMoY2FuZGlkYXRlVHlwZSkpIHtcbiAgICAgICAgZGlkTWF0Y2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWRNYXRjaCkge1xuICAgICAgLy8gV2UgaGF2ZSBhIG1hdGNoLiBUaGlzIG9ubHkgZHJpbGxzIGRvd24gdG8gdGhlIGNsb3Nlc3QgaG9zdCBjb21wb25lbnRzLlxuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIHNlYXJjaCBkZWVwZXIgYmVjYXVzZSBmb3IgdGhlIHB1cnBvc2Ugb2YgZ2l2aW5nXG4gICAgICAvLyB2aXN1YWwgZmVlZGJhY2ssIFwiZmxhc2hpbmdcIiBvdXRlcm1vc3QgcGFyZW50IHJlY3RhbmdsZXMgaXMgc3VmZmljaWVudC5cbiAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSdzIG5vIG1hdGNoLCBtYXliZSB0aGVyZSB3aWxsIGJlIG9uZSBmdXJ0aGVyIGRvd24gaW4gdGhlIGNoaWxkIHRyZWUuXG4gICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGNoaWxkLCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShzaWJsaW5nLCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpO1xuXG4gICAgaWYgKGZvdW5kSG9zdEluc3RhbmNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55IGhvc3QgY2hpbGRyZW4sIGZhbGxiYWNrIHRvIGNsb3Nlc3QgaG9zdCBwYXJlbnQuXG5cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byByZWFjaCByb290IGZpcnN0LicpO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgICB2YXIgZm91bmRIb3N0SW5zdGFuY2VzID0gZmFsc2U7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIG1hdGNoLlxuICAgICAgICBmb3VuZEhvc3RJbnN0YW5jZXMgPSB0cnVlO1xuICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7IC8vIFRoZXJlIG1heSBzdGlsbCBiZSBtb3JlLCBzbyBrZWVwIHNlYXJjaGluZy5cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZpYmVyKSB7XG4gICAgICAgIHJldHVybiBmb3VuZEhvc3RJbnN0YW5jZXM7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBmaWJlcikge1xuICAgICAgICAgIHJldHVybiBmb3VuZEhvc3RJbnN0YW5jZXM7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgaGFzQmFkTWFwUG9seWZpbGw7XG5cbntcbiAgaGFzQmFkTWFwUG9seWZpbGwgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIHZhciBub25FeHRlbnNpYmxlT2JqZWN0ID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cblxuICAgIG5ldyBNYXAoW1tub25FeHRlbnNpYmxlT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW25vbkV4dGVuc2libGVPYmplY3RdKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBhYm91dCBiYWQgcG9seWZpbGxzXG4gICAgaGFzQmFkTWFwUG9seWZpbGwgPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gIC8vIEluc3RhbmNlXG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmtleSA9IGtleTtcbiAgdGhpcy5lbGVtZW50VHlwZSA9IG51bGw7XG4gIHRoaXMudHlwZSA9IG51bGw7XG4gIHRoaXMuc3RhdGVOb2RlID0gbnVsbDsgLy8gRmliZXJcblxuICB0aGlzLnJldHVybiA9IG51bGw7XG4gIHRoaXMuY2hpbGQgPSBudWxsO1xuICB0aGlzLnNpYmxpbmcgPSBudWxsO1xuICB0aGlzLmluZGV4ID0gMDtcbiAgdGhpcy5yZWYgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcztcbiAgdGhpcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgdGhpcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gIHRoaXMubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHRoaXMuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgdGhpcy5tb2RlID0gbW9kZTsgLy8gRWZmZWN0c1xuXG4gIHRoaXMuZmxhZ3MgPSBOb0ZsYWdzO1xuICB0aGlzLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3M7XG4gIHRoaXMuZGVsZXRpb25zID0gbnVsbDtcbiAgdGhpcy5sYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuYWx0ZXJuYXRlID0gbnVsbDtcblxuICB7XG4gICAgLy8gTm90ZTogVGhlIGZvbGxvd2luZyBpcyBkb25lIHRvIGF2b2lkIGEgdjggcGVyZm9ybWFuY2UgY2xpZmYuXG4gICAgLy9cbiAgICAvLyBJbml0aWFsaXppbmcgdGhlIGZpZWxkcyBiZWxvdyB0byBzbWlzIGFuZCBsYXRlciB1cGRhdGluZyB0aGVtIHdpdGhcbiAgICAvLyBkb3VibGUgdmFsdWVzIHdpbGwgY2F1c2UgRmliZXJzIHRvIGVuZCB1cCBoYXZpbmcgc2VwYXJhdGUgc2hhcGVzLlxuICAgIC8vIFRoaXMgYmVoYXZpb3IvYnVnIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBPYmplY3QucHJldmVudEV4dGVuc2lvbigpLlxuICAgIC8vIEZvcnR1bmF0ZWx5IHRoaXMgb25seSBpbXBhY3RzIERFViBidWlsZHMuXG4gICAgLy8gVW5mb3J0dW5hdGVseSBpdCBtYWtlcyBSZWFjdCB1bnVzYWJseSBzbG93IGZvciBzb21lIGFwcGxpY2F0aW9ucy5cbiAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCBpbml0aWFsaXplIHRoZSBmaWVsZHMgYmVsb3cgd2l0aCBkb3VibGVzLlxuICAgIC8vXG4gICAgLy8gTGVhcm4gbW9yZSBhYm91dCB0aGlzIGhlcmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDM2NVxuICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTg1MzhcbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IE51bWJlci5OYU47XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOOyAvLyBJdCdzIG9rYXkgdG8gcmVwbGFjZSB0aGUgaW5pdGlhbCBkb3VibGVzIHdpdGggc21pcyBhZnRlciBpbml0aWFsaXphdGlvbi5cbiAgICAvLyBUaGlzIHdvbid0IHRyaWdnZXIgdGhlIHBlcmZvcm1hbmNlIGNsaWZmIG1lbnRpb25lZCBhYm92ZSxcbiAgICAvLyBhbmQgaXQgc2ltcGxpZmllcyBvdGhlciBwcm9maWxlciBjb2RlIChpbmNsdWRpbmcgRGV2VG9vbHMpLlxuXG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gIH1cblxuICB7XG4gICAgLy8gVGhpcyBpc24ndCBkaXJlY3RseSB1c2VkIGJ1dCBpcyBoYW5keSBmb3IgZGVidWdnaW5nIGludGVybmFsczpcbiAgICB0aGlzLl9kZWJ1Z1NvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5fZGVidWdPd25lciA9IG51bGw7XG4gICAgdGhpcy5fZGVidWdOZWVkc1JlbW91bnQgPSBmYWxzZTtcbiAgICB0aGlzLl9kZWJ1Z0hvb2tUeXBlcyA9IG51bGw7XG5cbiAgICBpZiAoIWhhc0JhZE1hcFBvbHlmaWxsICYmIHR5cGVvZiBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKTtcbiAgICB9XG4gIH1cbn0gLy8gVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBhIFBPSk8gY29uc3RydWN0b3IsIHN0aWxsXG4vLyBwbGVhc2UgZW5zdXJlIHdlIGRvIHRoZSBmb2xsb3dpbmc6XG4vLyAxKSBOb2JvZHkgc2hvdWxkIGFkZCBhbnkgaW5zdGFuY2UgbWV0aG9kcyBvbiB0aGlzLiBJbnN0YW5jZSBtZXRob2RzIGNhbiBiZVxuLy8gICAgbW9yZSBkaWZmaWN1bHQgdG8gcHJlZGljdCB3aGVuIHRoZXkgZ2V0IG9wdGltaXplZCBhbmQgdGhleSBhcmUgYWxtb3N0XG4vLyAgICBuZXZlciBpbmxpbmVkIHByb3Blcmx5IGluIHN0YXRpYyBjb21waWxlcnMuXG4vLyAyKSBOb2JvZHkgc2hvdWxkIHJlbHkgb24gYGluc3RhbmNlb2YgRmliZXJgIGZvciB0eXBlIHRlc3RpbmcuIFdlIHNob3VsZFxuLy8gICAgYWx3YXlzIGtub3cgd2hlbiBpdCBpcyBhIGZpYmVyLlxuLy8gMykgV2UgbWlnaHQgd2FudCB0byBleHBlcmltZW50IHdpdGggdXNpbmcgbnVtZXJpYyBrZXlzIHNpbmNlIHRoZXkgYXJlIGVhc2llclxuLy8gICAgdG8gb3B0aW1pemUgaW4gYSBub24tSklUIGVudmlyb25tZW50LlxuLy8gNCkgV2UgY2FuIGVhc2lseSBnbyBmcm9tIGEgY29uc3RydWN0b3IgdG8gYSBjcmVhdGVGaWJlciBvYmplY3QgbGl0ZXJhbCBpZiB0aGF0XG4vLyAgICBpcyBmYXN0ZXIuXG4vLyA1KSBJdCBzaG91bGQgYmUgZWFzeSB0byBwb3J0IHRoaXMgdG8gYSBDIHN0cnVjdCBhbmQga2VlcCBhIEMgaW1wbGVtZW50YXRpb25cbi8vICAgIGNvbXBhdGlibGUuXG5cblxudmFyIGNyZWF0ZUZpYmVyID0gZnVuY3Rpb24gKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgLy8gJEZsb3dGaXhNZTogdGhlIHNoYXBlcyBhcmUgZXhhY3QgaGVyZSBidXQgRmxvdyBkb2Vzbid0IGxpa2UgY29uc3RydWN0b3JzXG4gIHJldHVybiBuZXcgRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhc2hvdWxkQ29uc3RydWN0JDEodHlwZSkgJiYgdHlwZS5kZWZhdWx0UHJvcHMgPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCkge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzaG91bGRDb25zdHJ1Y3QkMShDb21wb25lbnQpID8gQ2xhc3NDb21wb25lbnQgOiBGdW5jdGlvbkNvbXBvbmVudDtcbiAgfSBlbHNlIGlmIChDb21wb25lbnQgIT09IHVuZGVmaW5lZCAmJiBDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBDb21wb25lbnQuJCR0eXBlb2Y7XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgIHJldHVybiBGb3J3YXJkUmVmO1xuICAgIH1cblxuICAgIGlmICgkJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICByZXR1cm4gTWVtb0NvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDtcbn0gLy8gVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBhbHRlcm5hdGUgZmliZXIgdG8gZG8gd29yayBvbi5cblxuZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgcGVuZGluZ1Byb3BzKSB7XG4gIHZhciB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHVzZSBhIGRvdWJsZSBidWZmZXJpbmcgcG9vbGluZyB0ZWNobmlxdWUgYmVjYXVzZSB3ZSBrbm93IHRoYXQgd2UnbGxcbiAgICAvLyBvbmx5IGV2ZXIgbmVlZCBhdCBtb3N0IHR3byB2ZXJzaW9ucyBvZiBhIHRyZWUuIFdlIHBvb2wgdGhlIFwib3RoZXJcIiB1bnVzZWRcbiAgICAvLyBub2RlIHRoYXQgd2UncmUgZnJlZSB0byByZXVzZS4gVGhpcyBpcyBsYXppbHkgY3JlYXRlZCB0byBhdm9pZCBhbGxvY2F0aW5nXG4gICAgLy8gZXh0cmEgb2JqZWN0cyBmb3IgdGhpbmdzIHRoYXQgYXJlIG5ldmVyIHVwZGF0ZWQuIEl0IGFsc28gYWxsb3cgdXMgdG9cbiAgICAvLyByZWNsYWltIHRoZSBleHRyYSBtZW1vcnkgaWYgbmVlZGVkLlxuICAgIHdvcmtJblByb2dyZXNzID0gY3JlYXRlRmliZXIoY3VycmVudC50YWcsIHBlbmRpbmdQcm9wcywgY3VycmVudC5rZXksIGN1cnJlbnQubW9kZSk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPSBjdXJyZW50LmVsZW1lbnRUeXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICB7XG4gICAgICAvLyBERVYtb25seSBmaWVsZHNcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZSA9IGN1cnJlbnQuX2RlYnVnU291cmNlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gY3VycmVudC5fZGVidWdIb29rVHlwZXM7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gY3VycmVudDtcbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IHdvcmtJblByb2dyZXNzO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wczsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBhbHRlcm5hdGUuXG4gICAgLy8gUmVzZXQgdGhlIGVmZmVjdCB0YWcuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IE5vRmxhZ3M7IC8vIFRoZSBlZmZlY3RzIGFyZSBubyBsb25nZXIgdmFsaWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSBOb0ZsYWdzO1xuICAgIHdvcmtJblByb2dyZXNzLmRlbGV0aW9ucyA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IHJlc2V0LCByYXRoZXIgdGhhbiBjb3B5LCBhY3R1YWxEdXJhdGlvbiAmIGFjdHVhbFN0YXJ0VGltZS5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGltZSBmcm9tIGVuZGxlc3NseSBhY2N1bXVsYXRpbmcgaW4gbmV3IGNvbW1pdHMuXG4gICAgICAvLyBUaGlzIGhhcyB0aGUgZG93bnNpZGUgb2YgcmVzZXR0aW5nIHZhbHVlcyBmb3IgZGlmZmVyZW50IHByaW9yaXR5IHJlbmRlcnMsXG4gICAgICAvLyBCdXQgd29ya3MgZm9yIHlpZWxkaW5nICh0aGUgY29tbW9uIGNhc2UpIGFuZCBzaG91bGQgc3VwcG9ydCByZXN1bWluZy5cbiAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgIH1cbiAgfSAvLyBSZXNldCBhbGwgZWZmZWN0cyBleGNlcHQgc3RhdGljIG9uZXMuXG4gIC8vIFN0YXRpYyBlZmZlY3RzIGFyZSBub3Qgc3BlY2lmaWMgdG8gYSByZW5kZXIuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IGN1cnJlbnQuZmxhZ3MgJiBTdGF0aWNNYXNrO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gY3VycmVudC5jaGlsZExhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgdmFyIGN1cnJlbnREZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgZmlyc3RDb250ZXh0OiBjdXJyZW50RGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dFxuICB9OyAvLyBUaGVzZSB3aWxsIGJlIG92ZXJyaWRkZW4gZHVyaW5nIHRoZSBwYXJlbnQncyByZWNvbmNpbGlhdGlvblxuXG4gIHdvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBjdXJyZW50LnNpYmxpbmc7XG4gIHdvcmtJblByb2dyZXNzLmluZGV4ID0gY3VycmVudC5pbmRleDtcbiAgd29ya0luUHJvZ3Jlc3MucmVmID0gY3VycmVudC5yZWY7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgPSBjdXJyZW50Ll9kZWJ1Z05lZWRzUmVtb3VudDtcblxuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59IC8vIFVzZWQgdG8gcmV1c2UgYSBGaWJlciBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzcyh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyByZXNldHMgdGhlIEZpYmVyIHRvIHdoYXQgY3JlYXRlRmliZXIgb3IgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGRcbiAgLy8gaGF2ZSBzZXQgdGhlIHZhbHVlcyB0byBiZWZvcmUgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLiBJZGVhbGx5IHRoaXMgd291bGRuJ3RcbiAgLy8gYmUgbmVjZXNzYXJ5IGJ1dCB1bmZvcnR1bmF0ZWx5IG1hbnkgY29kZSBwYXRocyByZWFkcyBmcm9tIHRoZSB3b3JrSW5Qcm9ncmVzc1xuICAvLyB3aGVuIHRoZXkgc2hvdWxkIGJlIHJlYWRpbmcgZnJvbSBjdXJyZW50IGFuZCB3cml0aW5nIHRvIHdvcmtJblByb2dyZXNzLlxuICAvLyBXZSBhc3N1bWUgcGVuZGluZ1Byb3BzLCBpbmRleCwga2V5LCByZWYsIHJldHVybiBhcmUgc3RpbGwgdW50b3VjaGVkIHRvXG4gIC8vIGF2b2lkIGRvaW5nIGFub3RoZXIgcmVjb25jaWxpYXRpb24uXG4gIC8vIFJlc2V0IHRoZSBlZmZlY3QgZmxhZ3MgYnV0IGtlZXAgYW55IFBsYWNlbWVudCB0YWdzLCBzaW5jZSB0aGF0J3Mgc29tZXRoaW5nXG4gIC8vIHRoYXQgY2hpbGQgZmliZXIgaXMgc2V0dGluZywgbm90IHRoZSByZWNvbmNpbGlhdGlvbi5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gU3RhdGljTWFzayB8IFBsYWNlbWVudDsgLy8gVGhlIGVmZmVjdHMgYXJlIG5vIGxvbmdlciB2YWxpZC5cblxuICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIFJlc2V0IHRvIGNyZWF0ZUZpYmVyJ3MgaW5pdGlhbCB2YWx1ZXMuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gTm9GbGFncztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAvLyBhY3R1YWwgdGltZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyIHBhc3Nlcy5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFJlc2V0IHRvIHRoZSBjbG9uZWQgdmFsdWVzIHRoYXQgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGQndmUuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgIHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IE5vRmxhZ3M7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBOZWVkZWQgYmVjYXVzZSBCbG9ja3Mgc3RvcmUgZGF0YSBvbiB0eXBlLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgICB2YXIgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMgPT09IG51bGwgPyBudWxsIDoge1xuICAgICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgICBmaXJzdENvbnRleHQ6IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0XG4gICAgfTtcblxuICAgIHtcbiAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59XG5mdW5jdGlvbiBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZywgaXNTdHJpY3RNb2RlLCBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlKSB7XG4gIHZhciBtb2RlO1xuXG4gIGlmICh0YWcgPT09IENvbmN1cnJlbnRSb290KSB7XG4gICAgbW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuXG4gICAgaWYgKGlzU3RyaWN0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgbW9kZSB8PSBTdHJpY3RMZWdhY3lNb2RlO1xuXG4gICAgICB7XG4gICAgICAgIG1vZGUgfD0gU3RyaWN0RWZmZWN0c01vZGU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG1vZGUgPSBOb01vZGU7XG4gIH1cblxuICBpZiAoIGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgLy8gQWx3YXlzIGNvbGxlY3QgcHJvZmlsZSB0aW1pbmdzIHdoZW4gRGV2VG9vbHMgYXJlIHByZXNlbnQuXG4gICAgLy8gVGhpcyBlbmFibGVzIERldlRvb2xzIHRvIHN0YXJ0IGNhcHR1cmluZyB0aW1pbmcgYXQgYW55IHBvaW504oCTXG4gICAgLy8gV2l0aG91dCBzb21lIG5vZGVzIGluIHRoZSB0cmVlIGhhdmluZyBlbXB0eSBiYXNlIHRpbWVzLlxuICAgIG1vZGUgfD0gUHJvZmlsZU1vZGU7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlRmliZXIoSG9zdFJvb3QsIG51bGwsIG51bGwsIG1vZGUpO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHR5cGUsIC8vIFJlYWN0JEVsZW1lbnRUeXBlXG5rZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBmaWJlclRhZyA9IEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7IC8vIFRoZSByZXNvbHZlZCB0eXBlIGlzIHNldCBpZiB3ZSBrbm93IHdoYXQgdGhlIGZpbmFsIHR5cGUgd2lsbCBiZS4gSS5lLiBpdCdzIG5vdCBsYXp5LlxuXG4gIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChzaG91bGRDb25zdHJ1Y3QkMSh0eXBlKSkge1xuICAgICAgZmliZXJUYWcgPSBDbGFzc0NvbXBvbmVudDtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgZmliZXJUYWcgPSBIb3N0Q29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGdldFRhZzogc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChwZW5kaW5nUHJvcHMuY2hpbGRyZW4sIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgbW9kZSB8PSBTdHJpY3RMZWdhY3lNb2RlO1xuXG4gICAgICAgIGlmICggKG1vZGUgJiBDb25jdXJyZW50TW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgIC8vIFN0cmljdCBlZmZlY3RzIHNob3VsZCBuZXZlciBydW4gb24gbGVnYWN5IHJvb3RzXG4gICAgICAgICAgbW9kZSB8PSBTdHJpY3RFZmZlY3RzTW9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdChwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX09GRlNDUkVFTl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgICAgY2FzZSBSRUFDVF9TQ09QRV9UWVBFOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgICAgY2FzZSBSRUFDVF9DQUNIRV9UWVBFOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgICAgY2FzZSBSRUFDVF9UUkFDSU5HX01BUktFUl9UWVBFOlxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZmFsbHRocm91Z2hcblxuICAgICAgY2FzZSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRTpcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0UHJvdmlkZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zdW1lclxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dENvbnN1bWVyO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBGb3J3YXJkUmVmO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBNZW1vQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IExhenlDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIFwiICsgJ25hbWVkIGltcG9ydHMuJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG93bmVyTmFtZSA9IG93bmVyID8gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihvd25lcikgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VsZW1lbnQgdHlwZSBpcyBpbnZhbGlkOiBleHBlY3RlZCBhIHN0cmluZyAoZm9yIGJ1aWx0LWluICcgKyAnY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSAnICsgKFwiYnV0IGdvdDogXCIgKyAodHlwZSA9PSBudWxsID8gdHlwZSA6IHR5cGVvZiB0eXBlKSArIFwiLlwiICsgaW5mbykpO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoZmliZXJUYWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSB0eXBlO1xuICBmaWJlci50eXBlID0gcmVzb2x2ZWRUeXBlO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IG93bmVyO1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCBtb2RlLCBsYW5lcykge1xuICB2YXIgb3duZXIgPSBudWxsO1xuXG4gIHtcbiAgICBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IGVsZW1lbnQucHJvcHM7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCBrZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKTtcblxuICB7XG4gICAgZmliZXIuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50cywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihGcmFnbWVudCwgZWxlbWVudHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIHBlbmRpbmdQcm9wcy5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdQcm9maWxlciBtdXN0IHNwZWNpZnkgYW4gXCJpZFwiIG9mIHR5cGUgYHN0cmluZ2AgYXMgYSBwcm9wLiBSZWNlaXZlZCB0aGUgdHlwZSBgJXNgIGluc3RlYWQuJywgdHlwZW9mIHBlbmRpbmdQcm9wcy5pZCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoUHJvZmlsZXIsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlIHwgUHJvZmlsZU1vZGUpO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICAgIGVmZmVjdER1cmF0aW9uOiAwLFxuICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uOiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKFN1c3BlbnNlQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUxpc3RDb21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoT2Zmc2NyZWVuQ29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHZhciBwcmltYXJ5Q2hpbGRJbnN0YW5jZSA9IHtcbiAgICBpc0hpZGRlbjogZmFsc2VcbiAgfTtcbiAgZmliZXIuc3RhdGVOb2RlID0gcHJpbWFyeUNoaWxkSW5zdGFuY2U7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVRleHQoY29udGVudCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFRleHQsIGNvbnRlbnQsIG51bGwsIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdENvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTtcbiAgZmliZXIuZWxlbWVudFR5cGUgPSAnREVMRVRFRCc7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbURlaHlkcmF0ZWRGcmFnbWVudChkZWh5ZHJhdGVkTm9kZSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihEZWh5ZHJhdGVkRnJhZ21lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IGRlaHlkcmF0ZWROb2RlO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCBtb2RlLCBsYW5lcykge1xuICB2YXIgcGVuZGluZ1Byb3BzID0gcG9ydGFsLmNoaWxkcmVuICE9PSBudWxsID8gcG9ydGFsLmNoaWxkcmVuIDogW107XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RQb3J0YWwsIHBlbmRpbmdQcm9wcywgcG9ydGFsLmtleSwgbW9kZSk7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIGZpYmVyLnN0YXRlTm9kZSA9IHtcbiAgICBjb250YWluZXJJbmZvOiBwb3J0YWwuY29udGFpbmVySW5mbyxcbiAgICBwZW5kaW5nQ2hpbGRyZW46IG51bGwsXG4gICAgLy8gVXNlZCBieSBwZXJzaXN0ZW50IHVwZGF0ZXNcbiAgICBpbXBsZW1lbnRhdGlvbjogcG9ydGFsLmltcGxlbWVudGF0aW9uXG4gIH07XG4gIHJldHVybiBmaWJlcjtcbn0gLy8gVXNlZCBmb3Igc3Rhc2hpbmcgV0lQIHByb3BlcnRpZXMgdG8gcmVwbGF5IGZhaWxlZCB3b3JrIGluIERFVi5cblxuZnVuY3Rpb24gYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodGFyZ2V0LCBzb3VyY2UpIHtcbiAgaWYgKHRhcmdldCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgRmliZXIncyBpbml0aWFsIHByb3BlcnRpZXMgd2lsbCBhbHdheXMgYmUgb3ZlcndyaXR0ZW4uXG4gICAgLy8gV2Ugb25seSB1c2UgYSBGaWJlciB0byBlbnN1cmUgdGhlIHNhbWUgaGlkZGVuIGNsYXNzIHNvIERFViBpc24ndCBzbG93LlxuICAgIHRhcmdldCA9IGNyZWF0ZUZpYmVyKEluZGV0ZXJtaW5hdGVDb21wb25lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7XG4gIH0gLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHdyaXR0ZW4gYXMgYSBsaXN0IG9mIGFsbCBwcm9wZXJ0aWVzLlxuICAvLyBXZSB0cmllZCB0byB1c2UgT2JqZWN0LmFzc2lnbigpIGluc3RlYWQgYnV0IHRoaXMgaXMgY2FsbGVkIGluXG4gIC8vIHRoZSBob3R0ZXN0IHBhdGgsIGFuZCBPYmplY3QuYXNzaWduKCkgd2FzIHRvbyBzbG93OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTAyXG4gIC8vIFRoaXMgY29kZSBpcyBERVYtb25seSBzbyBzaXplIGlzIG5vdCBhIGNvbmNlcm4uXG5cblxuICB0YXJnZXQudGFnID0gc291cmNlLnRhZztcbiAgdGFyZ2V0LmtleSA9IHNvdXJjZS5rZXk7XG4gIHRhcmdldC5lbGVtZW50VHlwZSA9IHNvdXJjZS5lbGVtZW50VHlwZTtcbiAgdGFyZ2V0LnR5cGUgPSBzb3VyY2UudHlwZTtcbiAgdGFyZ2V0LnN0YXRlTm9kZSA9IHNvdXJjZS5zdGF0ZU5vZGU7XG4gIHRhcmdldC5yZXR1cm4gPSBzb3VyY2UucmV0dXJuO1xuICB0YXJnZXQuY2hpbGQgPSBzb3VyY2UuY2hpbGQ7XG4gIHRhcmdldC5zaWJsaW5nID0gc291cmNlLnNpYmxpbmc7XG4gIHRhcmdldC5pbmRleCA9IHNvdXJjZS5pbmRleDtcbiAgdGFyZ2V0LnJlZiA9IHNvdXJjZS5yZWY7XG4gIHRhcmdldC5wZW5kaW5nUHJvcHMgPSBzb3VyY2UucGVuZGluZ1Byb3BzO1xuICB0YXJnZXQubWVtb2l6ZWRQcm9wcyA9IHNvdXJjZS5tZW1vaXplZFByb3BzO1xuICB0YXJnZXQudXBkYXRlUXVldWUgPSBzb3VyY2UudXBkYXRlUXVldWU7XG4gIHRhcmdldC5tZW1vaXplZFN0YXRlID0gc291cmNlLm1lbW9pemVkU3RhdGU7XG4gIHRhcmdldC5kZXBlbmRlbmNpZXMgPSBzb3VyY2UuZGVwZW5kZW5jaWVzO1xuICB0YXJnZXQubW9kZSA9IHNvdXJjZS5tb2RlO1xuICB0YXJnZXQuZmxhZ3MgPSBzb3VyY2UuZmxhZ3M7XG4gIHRhcmdldC5zdWJ0cmVlRmxhZ3MgPSBzb3VyY2Uuc3VidHJlZUZsYWdzO1xuICB0YXJnZXQuZGVsZXRpb25zID0gc291cmNlLmRlbGV0aW9ucztcbiAgdGFyZ2V0LmxhbmVzID0gc291cmNlLmxhbmVzO1xuICB0YXJnZXQuY2hpbGRMYW5lcyA9IHNvdXJjZS5jaGlsZExhbmVzO1xuICB0YXJnZXQuYWx0ZXJuYXRlID0gc291cmNlLmFsdGVybmF0ZTtcblxuICB7XG4gICAgdGFyZ2V0LmFjdHVhbER1cmF0aW9uID0gc291cmNlLmFjdHVhbER1cmF0aW9uO1xuICAgIHRhcmdldC5hY3R1YWxTdGFydFRpbWUgPSBzb3VyY2UuYWN0dWFsU3RhcnRUaW1lO1xuICAgIHRhcmdldC5zZWxmQmFzZUR1cmF0aW9uID0gc291cmNlLnNlbGZCYXNlRHVyYXRpb247XG4gICAgdGFyZ2V0LnRyZWVCYXNlRHVyYXRpb24gPSBzb3VyY2UudHJlZUJhc2VEdXJhdGlvbjtcbiAgfVxuXG4gIHRhcmdldC5fZGVidWdTb3VyY2UgPSBzb3VyY2UuX2RlYnVnU291cmNlO1xuICB0YXJnZXQuX2RlYnVnT3duZXIgPSBzb3VyY2UuX2RlYnVnT3duZXI7XG4gIHRhcmdldC5fZGVidWdOZWVkc1JlbW91bnQgPSBzb3VyY2UuX2RlYnVnTmVlZHNSZW1vdW50O1xuICB0YXJnZXQuX2RlYnVnSG9va1R5cGVzID0gc291cmNlLl9kZWJ1Z0hvb2tUeXBlcztcbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gRmliZXJSb290Tm9kZShjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGlkZW50aWZpZXJQcmVmaXgsIG9uUmVjb3ZlcmFibGVFcnJvcikge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5jb250YWluZXJJbmZvID0gY29udGFpbmVySW5mbztcbiAgdGhpcy5wZW5kaW5nQ2hpbGRyZW4gPSBudWxsO1xuICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICB0aGlzLnBpbmdDYWNoZSA9IG51bGw7XG4gIHRoaXMuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgdGhpcy50aW1lb3V0SGFuZGxlID0gbm9UaW1lb3V0O1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5jYWxsYmFja05vZGUgPSBudWxsO1xuICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmU7XG4gIHRoaXMuZXZlbnRUaW1lcyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG4gIHRoaXMuZXhwaXJhdGlvblRpbWVzID0gY3JlYXRlTGFuZU1hcChOb1RpbWVzdGFtcCk7XG4gIHRoaXMucGVuZGluZ0xhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5zdXNwZW5kZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMucGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmV4cGlyZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMubXV0YWJsZVJlYWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmVudGFuZ2xlbWVudHMgPSBjcmVhdGVMYW5lTWFwKE5vTGFuZXMpO1xuICB0aGlzLmlkZW50aWZpZXJQcmVmaXggPSBpZGVudGlmaWVyUHJlZml4O1xuICB0aGlzLm9uUmVjb3ZlcmFibGVFcnJvciA9IG9uUmVjb3ZlcmFibGVFcnJvcjtcblxuICB7XG4gICAgdGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICB0aGlzLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICB0aGlzLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gIH1cblxuICB7XG4gICAgdGhpcy5tZW1vaXplZFVwZGF0ZXJzID0gbmV3IFNldCgpO1xuICAgIHZhciBwZW5kaW5nVXBkYXRlcnNMYW5lTWFwID0gdGhpcy5wZW5kaW5nVXBkYXRlcnNMYW5lTWFwID0gW107XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgVG90YWxMYW5lczsgX2krKykge1xuICAgICAgcGVuZGluZ1VwZGF0ZXJzTGFuZU1hcC5wdXNoKG5ldyBTZXQoKSk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIENvbmN1cnJlbnRSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gaHlkcmF0ZSA/ICdoeWRyYXRlUm9vdCgpJyA6ICdjcmVhdGVSb290KCknO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMZWdhY3lSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gaHlkcmF0ZSA/ICdoeWRyYXRlKCknIDogJ3JlbmRlcigpJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGluaXRpYWxDaGlsZHJlbiwgaHlkcmF0aW9uQ2FsbGJhY2tzLCBpc1N0cmljdE1vZGUsIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUsIC8vIFRPRE86IFdlIGhhdmUgc2V2ZXJhbCBvZiB0aGVzZSBhcmd1bWVudHMgdGhhdCBhcmUgY29uY2VwdHVhbGx5IHBhcnQgb2YgdGhlXG4vLyBob3N0IGNvbmZpZywgYnV0IGJlY2F1c2UgdGhleSBhcmUgcGFzc2VkIGluIGF0IHJ1bnRpbWUsIHdlIGhhdmUgdG8gdGhyZWFkXG4vLyB0aGVtIHRocm91Z2ggdGhlIHJvb3QgY29uc3RydWN0b3IuIFBlcmhhcHMgd2Ugc2hvdWxkIHB1dCB0aGVtIGFsbCBpbnRvIGFcbi8vIHNpbmdsZSB0eXBlLCBsaWtlIGEgRHluYW1pY0hvc3RDb25maWcgdGhhdCBpcyBkZWZpbmVkIGJ5IHRoZSByZW5kZXJlci5cbmlkZW50aWZpZXJQcmVmaXgsIG9uUmVjb3ZlcmFibGVFcnJvciwgdHJhbnNpdGlvbkNhbGxiYWNrcykge1xuICB2YXIgcm9vdCA9IG5ldyBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaWRlbnRpZmllclByZWZpeCwgb25SZWNvdmVyYWJsZUVycm9yKTtcbiAgLy8gc3RhdGVOb2RlIGlzIGFueS5cblxuXG4gIHZhciB1bmluaXRpYWxpemVkRmliZXIgPSBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZywgaXNTdHJpY3RNb2RlKTtcbiAgcm9vdC5jdXJyZW50ID0gdW5pbml0aWFsaXplZEZpYmVyO1xuICB1bmluaXRpYWxpemVkRmliZXIuc3RhdGVOb2RlID0gcm9vdDtcblxuICB7XG4gICAgdmFyIF9pbml0aWFsU3RhdGUgPSB7XG4gICAgICBlbGVtZW50OiBpbml0aWFsQ2hpbGRyZW4sXG4gICAgICBpc0RlaHlkcmF0ZWQ6IGh5ZHJhdGUsXG4gICAgICBjYWNoZTogbnVsbCxcbiAgICAgIC8vIG5vdCBlbmFibGVkIHlldFxuICAgICAgdHJhbnNpdGlvbnM6IG51bGwsXG4gICAgICBwZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzOiBudWxsXG4gICAgfTtcbiAgICB1bmluaXRpYWxpemVkRmliZXIubWVtb2l6ZWRTdGF0ZSA9IF9pbml0aWFsU3RhdGU7XG4gIH1cblxuICBpbml0aWFsaXplVXBkYXRlUXVldWUodW5pbml0aWFsaXplZEZpYmVyKTtcbiAgcmV0dXJuIHJvb3Q7XG59XG5cbnZhciBSZWFjdFZlcnNpb24gPSAnMTguMi4wJztcblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXJJbmZvLCAvLyBUT0RPOiBmaWd1cmUgb3V0IHRoZSBBUEkgZm9yIGNyb3NzLXJlbmRlcmVyIGltcGxlbWVudGF0aW9uLlxuaW1wbGVtZW50YXRpb24pIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblxuICB7XG4gICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihrZXkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvdyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgUG9ydGFsXG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BPUlRBTF9UWVBFLFxuICAgIGtleToga2V5ID09IG51bGwgPyBudWxsIDogJycgKyBrZXksXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gIH07XG59XG5cbnZhciBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzO1xudmFyIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlO1xuXG57XG4gIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGUgPSB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KSB7XG4gIGlmICghcGFyZW50Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfVxuXG4gIHZhciBmaWJlciA9IGdldChwYXJlbnRDb21wb25lbnQpO1xuICB2YXIgcGFyZW50Q29udGV4dCA9IGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKTtcblxuICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgIHZhciBDb21wb25lbnQgPSBmaWJlci50eXBlO1xuXG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCBDb21wb25lbnQsIHBhcmVudENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmcoY29tcG9uZW50LCBtZXRob2ROYW1lKSB7XG4gIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcblxuICAgIGlmIChmaWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGNvbXBvbmVudCkuam9pbignLCcpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSBhIFJlYWN0Q29tcG9uZW50LiBLZXlzOiBcIiArIGtleXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaG9zdEZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGhvc3RGaWJlcik7XG5cbiAgICAgICAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgIGVycm9yKCclcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuICcgKyAnJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCBpcyBpbnNpZGUgU3RyaWN0TW9kZS4gJyArICdJbnN0ZWFkLCBhZGQgYSByZWYgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gcmVmZXJlbmNlLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtZmluZC1ub2RlJywgbWV0aG9kTmFtZSwgbWV0aG9kTmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKCclcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuICcgKyAnJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCByZW5kZXJzIFN0cmljdE1vZGUgY2hpbGRyZW4uICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAvLyBJZGVhbGx5IHRoaXMgc2hvdWxkIHJlc2V0IHRvIHByZXZpb3VzIGJ1dCB0aGlzIHNob3VsZG4ndCBiZSBjYWxsZWQgaW5cbiAgICAgICAgICAvLyByZW5kZXIgYW5kIHRoZXJlJ3MgYW5vdGhlciB3YXJuaW5nIGZvciB0aGF0IGFueXdheS5cbiAgICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZpb3VzRmliZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGlvbkNhbGxiYWNrcywgaXNTdHJpY3RNb2RlLCBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlLCBpZGVudGlmaWVyUHJlZml4LCBvblJlY292ZXJhYmxlRXJyb3IsIHRyYW5zaXRpb25DYWxsYmFja3MpIHtcbiAgdmFyIGh5ZHJhdGUgPSBmYWxzZTtcbiAgdmFyIGluaXRpYWxDaGlsZHJlbiA9IG51bGw7XG4gIHJldHVybiBjcmVhdGVGaWJlclJvb3QoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBpbml0aWFsQ2hpbGRyZW4sIGh5ZHJhdGlvbkNhbGxiYWNrcywgaXNTdHJpY3RNb2RlLCBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlLCBpZGVudGlmaWVyUHJlZml4LCBvblJlY292ZXJhYmxlRXJyb3IpO1xufVxuZnVuY3Rpb24gY3JlYXRlSHlkcmF0aW9uQ29udGFpbmVyKGluaXRpYWxDaGlsZHJlbiwgLy8gVE9ETzogUmVtb3ZlIGBjYWxsYmFja2Agd2hlbiB3ZSBkZWxldGUgbGVnYWN5IG1vZGUuXG5jYWxsYmFjaywgY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRpb25DYWxsYmFja3MsIGlzU3RyaWN0TW9kZSwgY29uY3VycmVudFVwZGF0ZXNCeURlZmF1bHRPdmVycmlkZSwgaWRlbnRpZmllclByZWZpeCwgb25SZWNvdmVyYWJsZUVycm9yLCB0cmFuc2l0aW9uQ2FsbGJhY2tzKSB7XG4gIHZhciBoeWRyYXRlID0gdHJ1ZTtcbiAgdmFyIHJvb3QgPSBjcmVhdGVGaWJlclJvb3QoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBpbml0aWFsQ2hpbGRyZW4sIGh5ZHJhdGlvbkNhbGxiYWNrcywgaXNTdHJpY3RNb2RlLCBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlLCBpZGVudGlmaWVyUHJlZml4LCBvblJlY292ZXJhYmxlRXJyb3IpOyAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gRmliZXJSb290IGNvbnN0cnVjdG9yXG5cbiAgcm9vdC5jb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUobnVsbCk7IC8vIFNjaGVkdWxlIHRoZSBpbml0aWFsIHJlbmRlci4gSW4gYSBoeWRyYXRpb24gcm9vdCwgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbVxuICAvLyBhIHJlZ3VsYXIgdXBkYXRlIGJlY2F1c2UgdGhlIGluaXRpYWwgcmVuZGVyIG11c3QgbWF0Y2ggd2FzIHdhcyByZW5kZXJlZFxuICAvLyBvbiB0aGUgc2VydmVyLlxuICAvLyBOT1RFOiBUaGlzIHVwZGF0ZSBpbnRlbnRpb25hbGx5IGRvZXNuJ3QgaGF2ZSBhIHBheWxvYWQuIFdlJ3JlIG9ubHkgdXNpbmdcbiAgLy8gdGhlIHVwZGF0ZSB0byBzY2hlZHVsZSB3b3JrIG9uIHRoZSByb290IGZpYmVyIChhbmQsIGZvciBsZWdhY3kgcm9vdHMsIHRvXG4gIC8vIGVucXVldWUgdGhlIGNhbGxiYWNrIGlmIG9uZSBpcyBwcm92aWRlZCkuXG5cbiAgdmFyIGN1cnJlbnQgPSByb290LmN1cnJlbnQ7XG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoY3VycmVudCk7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCA/IGNhbGxiYWNrIDogbnVsbDtcbiAgZW5xdWV1ZVVwZGF0ZShjdXJyZW50LCB1cGRhdGUsIGxhbmUpO1xuICBzY2hlZHVsZUluaXRpYWxIeWRyYXRpb25PblJvb3Qocm9vdCwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgcmV0dXJuIHJvb3Q7XG59XG5mdW5jdGlvbiB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICBvblNjaGVkdWxlUm9vdChjb250YWluZXIsIGVsZW1lbnQpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnQkMSA9IGNvbnRhaW5lci5jdXJyZW50O1xuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGN1cnJlbnQkMSk7XG5cbiAge1xuICAgIG1hcmtSZW5kZXJTY2hlZHVsZWQobGFuZSk7XG4gIH1cblxuICB2YXIgY29udGV4dCA9IGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCk7XG5cbiAgaWYgKGNvbnRhaW5lci5jb250ZXh0ID09PSBudWxsKSB7XG4gICAgY29udGFpbmVyLmNvbnRleHQgPSBjb250ZXh0O1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICB7XG4gICAgaWYgKGlzUmVuZGVyaW5nICYmIGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSB0cnVlO1xuXG4gICAgICBlcnJvcignUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGU7ICcgKyAndHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgaXMgbm90IGFsbG93ZWQuICcgKyAnSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cXG4nICsgJ0NoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mICVzLicsIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoY3VycmVudCkgfHwgJ1Vua25vd24nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHVwZGF0ZS5wYXlsb2FkID0ge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgfTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrO1xuXG4gIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICB9XG5cbiAgdmFyIHJvb3QgPSBlbnF1ZXVlVXBkYXRlKGN1cnJlbnQkMSwgdXBkYXRlLCBsYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBjdXJyZW50JDEsIGxhbmUsIGV2ZW50VGltZSk7XG4gICAgZW50YW5nbGVUcmFuc2l0aW9ucyhyb290LCBjdXJyZW50JDEsIGxhbmUpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNSb290SW5zdGFuY2UoY29udGFpbmVyKSB7XG4gIHZhciBjb250YWluZXJGaWJlciA9IGNvbnRhaW5lci5jdXJyZW50O1xuXG4gIGlmICghY29udGFpbmVyRmliZXIuY2hpbGQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoY29udGFpbmVyRmliZXIuY2hpbGQudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGdldFB1YmxpY0luc3RhbmNlKGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZTtcbiAgfVxufVxuZnVuY3Rpb24gYXR0ZW1wdFN5bmNocm9ub3VzSHlkcmF0aW9uJDEoZmliZXIpIHtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICB2YXIgcm9vdCA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNSb290RGVoeWRyYXRlZChyb290KSkge1xuICAgICAgICAgIC8vIEZsdXNoIHRoZSBmaXJzdCBzY2hlZHVsZWQgXCJ1cGRhdGVcIi5cbiAgICAgICAgICB2YXIgbGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlQZW5kaW5nTGFuZXMocm9vdCk7XG4gICAgICAgICAgZmx1c2hSb290KHJvb3QsIGxhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lLCBldmVudFRpbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7IC8vIElmIHdlJ3JlIHN0aWxsIGJsb2NrZWQgYWZ0ZXIgdGhpcywgd2UgbmVlZCB0byBpbmNyZWFzZVxuICAgICAgICAvLyB0aGUgcHJpb3JpdHkgb2YgYW55IHByb21pc2VzIHJlc29sdmluZyB3aXRoaW4gdGhpc1xuICAgICAgICAvLyBib3VuZGFyeSBzbyB0aGF0IHRoZXkgbmV4dCBhdHRlbXB0IGFsc28gaGFzIGhpZ2hlciBwcmkuXG5cbiAgICAgICAgdmFyIHJldHJ5TGFuZSA9IFN5bmNMYW5lO1xuICAgICAgICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgcmV0cnlMYW5lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSkge1xuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHN1c3BlbnNlU3RhdGUgIT09IG51bGwgJiYgc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUgPSBoaWdoZXJQcmlvcml0eUxhbmUoc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUsIHJldHJ5TGFuZSk7XG4gIH1cbn0gLy8gSW5jcmVhc2VzIHRoZSBwcmlvcml0eSBvZiB0aGVuYWJsZXMgd2hlbiB0aGV5IHJlc29sdmUgd2l0aGluIHRoaXMgYm91bmRhcnkuXG5cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIHJldHJ5TGFuZSkge1xuICBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlKSB7XG4gICAgbWFya1JldHJ5TGFuZUltcGwoYWx0ZXJuYXRlLCByZXRyeUxhbmUpO1xuICB9XG59XG5mdW5jdGlvbiBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBhbmQgdGhleSBzaG91bGQgbm90IHN1c3BlbmQgb24gSS9PLFxuICAgIC8vIHNpbmNlIHlvdSBoYXZlIHRvIHdyYXAgYW55dGhpbmcgdGhhdCBtaWdodCBzdXNwZW5kIGluXG4gICAgLy8gU3VzcGVuc2UuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGxhbmUgPSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lO1xuICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgbGFuZSk7XG5cbiAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfVxuXG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBvdGhlciB0aGFuIHN5bmNocm9ub3VzbHkgZmx1c2ggaXQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBsYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9XG5cbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoZmliZXIpIHtcbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFscyhmaWJlcik7XG5cbiAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG59XG5cbnZhciBzaG91bGRFcnJvckltcGwgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG5mdW5jdGlvbiBzaG91bGRFcnJvcihmaWJlcikge1xuICByZXR1cm4gc2hvdWxkRXJyb3JJbXBsKGZpYmVyKTtcbn1cblxudmFyIHNob3VsZFN1c3BlbmRJbXBsID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZFN1c3BlbmQoZmliZXIpIHtcbiAgcmV0dXJuIHNob3VsZFN1c3BlbmRJbXBsKGZpYmVyKTtcbn1cbnZhciBvdmVycmlkZUhvb2tTdGF0ZSA9IG51bGw7XG52YXIgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHMgPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgc2NoZWR1bGVVcGRhdGUgPSBudWxsO1xudmFyIHNldEVycm9ySGFuZGxlciA9IG51bGw7XG52YXIgc2V0U3VzcGVuc2VIYW5kbGVyID0gbnVsbDtcblxue1xuICB2YXIgY29weVdpdGhEZWxldGVJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgpIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBpc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IGFzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmIChpbmRleCArIDEgPT09IHBhdGgubGVuZ3RoKSB7XG4gICAgICBpZiAoaXNBcnJheSh1cGRhdGVkKSkge1xuICAgICAgICB1cGRhdGVkLnNwbGljZShrZXksIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRba2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cblxuICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoRGVsZXRlSW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhEZWxldGUgPSBmdW5jdGlvbiAob2JqLCBwYXRoKSB7XG4gICAgcmV0dXJuIGNvcHlXaXRoRGVsZXRlSW1wbChvYmosIHBhdGgsIDApO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFJlbmFtZUltcGwgPSBmdW5jdGlvbiAob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCkge1xuICAgIHZhciBvbGRLZXkgPSBvbGRQYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IGlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogYXNzaWduKHt9LCBvYmopO1xuXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gb2xkUGF0aC5sZW5ndGgpIHtcbiAgICAgIHZhciBuZXdLZXkgPSBuZXdQYXRoW2luZGV4XTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgICB1cGRhdGVkW25ld0tleV0gPSB1cGRhdGVkW29sZEtleV07XG5cbiAgICAgIGlmIChpc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgIHVwZGF0ZWQuc3BsaWNlKG9sZEtleSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtvbGRLZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgICB1cGRhdGVkW29sZEtleV0gPSBjb3B5V2l0aFJlbmFtZUltcGwoIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIG9ialtvbGRLZXldLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFJlbmFtZSA9IGZ1bmN0aW9uIChvYmosIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICBpZiAob2xkUGF0aC5sZW5ndGggIT09IG5ld1BhdGgubGVuZ3RoKSB7XG4gICAgICB3YXJuKCdjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgb2YgdGhlIHNhbWUgbGVuZ3RoJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYXRoLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBpZiAob2xkUGF0aFtpXSAhPT0gbmV3UGF0aFtpXSkge1xuICAgICAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyB0byBiZSB0aGUgc2FtZSBleGNlcHQgZm9yIHRoZSBkZWVwZXN0IGtleScpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvcHlXaXRoUmVuYW1lSW1wbChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIDApO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFNldEltcGwgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCBpbmRleCwgdmFsdWUpIHtcbiAgICBpZiAoaW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBpc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IGFzc2lnbih7fSwgb2JqKTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhTZXRJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEsIHZhbHVlKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXQgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCB2YWx1ZSkge1xuICAgIHJldHVybiBjb3B5V2l0aFNldEltcGwob2JqLCBwYXRoLCAwLCB2YWx1ZSk7XG4gIH07XG5cbiAgdmFyIGZpbmRIb29rID0gZnVuY3Rpb24gKGZpYmVyLCBpZCkge1xuICAgIC8vIEZvciBub3csIHRoZSBcImlkXCIgb2Ygc3RhdGVmdWwgaG9va3MgaXMganVzdCB0aGUgc3RhdGVmdWwgaG9vayBpbmRleC5cbiAgICAvLyBUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSB3aXRoIGUuZy4gbmVzdGVkIGhvb2tzLlxuICAgIHZhciBjdXJyZW50SG9vayA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoY3VycmVudEhvb2sgIT09IG51bGwgJiYgaWQgPiAwKSB7XG4gICAgICBjdXJyZW50SG9vayA9IGN1cnJlbnRIb29rLm5leHQ7XG4gICAgICBpZC0tO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50SG9vaztcbiAgfTsgLy8gU3VwcG9ydCBEZXZUb29scyBlZGl0YWJsZSB2YWx1ZXMgZm9yIHVzZVN0YXRlIGFuZCB1c2VSZWR1Y2VyLlxuXG5cbiAgb3ZlcnJpZGVIb29rU3RhdGUgPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoLCB2YWx1ZSkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aFNldChob29rLm1lbW9pemVkU3RhdGUsIHBhdGgsIHZhbHVlKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IGFzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhEZWxldGUoaG9vay5tZW1vaXplZFN0YXRlLCBwYXRoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IGFzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhSZW5hbWUoaG9vay5tZW1vaXplZFN0YXRlLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IGFzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgICB9XG4gICAgfVxuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIHByb3BzIGZvciBmdW5jdGlvbiBjb21wb25lbnRzLCBmb3J3YXJkUmVmLCBtZW1vLCBob3N0IGNvbXBvbmVudHMsIGV0Yy5cblxuXG4gIG92ZXJyaWRlUHJvcHMgPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgsIHZhbHVlKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhTZXQoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCwgdmFsdWUpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICB2YXIgcm9vdCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIHBhdGgpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aERlbGV0ZShmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIFN5bmNMYW5lKTtcblxuICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhSZW5hbWUoZmliZXIubWVtb2l6ZWRQcm9wcywgb2xkUGF0aCwgbmV3UGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBzY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBzZXRFcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAobmV3U2hvdWxkRXJyb3JJbXBsKSB7XG4gICAgc2hvdWxkRXJyb3JJbXBsID0gbmV3U2hvdWxkRXJyb3JJbXBsO1xuICB9O1xuXG4gIHNldFN1c3BlbnNlSGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRTdXNwZW5kSW1wbCkge1xuICAgIHNob3VsZFN1c3BlbmRJbXBsID0gbmV3U2hvdWxkU3VzcGVuZEltcGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyKGZpYmVyKSB7XG4gIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG59XG5cbmZ1bmN0aW9uIGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzKCkge1xuICByZXR1cm4gY3VycmVudDtcbn1cblxuZnVuY3Rpb24gaW5qZWN0SW50b0RldlRvb2xzKGRldlRvb2xzQ29uZmlnKSB7XG4gIHZhciBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSA9IGRldlRvb2xzQ29uZmlnLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlO1xuICB2YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG4gIHJldHVybiBpbmplY3RJbnRlcm5hbHMoe1xuICAgIGJ1bmRsZVR5cGU6IGRldlRvb2xzQ29uZmlnLmJ1bmRsZVR5cGUsXG4gICAgdmVyc2lvbjogZGV2VG9vbHNDb25maWcudmVyc2lvbixcbiAgICByZW5kZXJlclBhY2thZ2VOYW1lOiBkZXZUb29sc0NvbmZpZy5yZW5kZXJlclBhY2thZ2VOYW1lLFxuICAgIHJlbmRlcmVyQ29uZmlnOiBkZXZUb29sc0NvbmZpZy5yZW5kZXJlckNvbmZpZyxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZTogb3ZlcnJpZGVIb29rU3RhdGUsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOiBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGgsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOiBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGgsXG4gICAgb3ZlcnJpZGVQcm9wczogb3ZlcnJpZGVQcm9wcyxcbiAgICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aDogb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGgsXG4gICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6IG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoLFxuICAgIHNldEVycm9ySGFuZGxlcjogc2V0RXJyb3JIYW5kbGVyLFxuICAgIHNldFN1c3BlbnNlSGFuZGxlcjogc2V0U3VzcGVuc2VIYW5kbGVyLFxuICAgIHNjaGVkdWxlVXBkYXRlOiBzY2hlZHVsZVVwZGF0ZSxcbiAgICBjdXJyZW50RGlzcGF0Y2hlclJlZjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjogZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIsXG4gICAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlIHx8IGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UsXG4gICAgLy8gUmVhY3QgUmVmcmVzaFxuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDogIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSZWZyZXNoOiAgc2NoZWR1bGVSZWZyZXNoICxcbiAgICBzY2hlZHVsZVJvb3Q6ICBzY2hlZHVsZVJvb3QgLFxuICAgIHNldFJlZnJlc2hIYW5kbGVyOiAgc2V0UmVmcmVzaEhhbmRsZXIgLFxuICAgIC8vIEVuYWJsZXMgRGV2VG9vbHMgdG8gYXBwZW5kIG93bmVyIHN0YWNrcyB0byBlcnJvciBtZXNzYWdlcyBpbiBERVYgbW9kZS5cbiAgICBnZXRDdXJyZW50RmliZXI6ICBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scyAsXG4gICAgLy8gRW5hYmxlcyBEZXZUb29scyB0byBkZXRlY3QgcmVjb25jaWxlciB2ZXJzaW9uIHJhdGhlciB0aGFuIHJlbmRlcmVyIHZlcnNpb25cbiAgICAvLyB3aGljaCBtYXkgbm90IG1hdGNoIGZvciB0aGlyZCBwYXJ0eSByZW5kZXJlcnMuXG4gICAgcmVjb25jaWxlclZlcnNpb246IFJlYWN0VmVyc2lvblxuICB9KTtcbn1cblxuLyogZ2xvYmFsIHJlcG9ydEVycm9yICovXG5cbnZhciBkZWZhdWx0T25SZWNvdmVyYWJsZUVycm9yID0gdHlwZW9mIHJlcG9ydEVycm9yID09PSAnZnVuY3Rpb24nID8gLy8gSW4gbW9kZXJuIGJyb3dzZXJzLCByZXBvcnRFcnJvciB3aWxsIGRpc3BhdGNoIGFuIGVycm9yIGV2ZW50LFxuLy8gZW11bGF0aW5nIGFuIHVuY2F1Z2h0IEphdmFTY3JpcHQgZXJyb3IuXG5yZXBvcnRFcnJvciA6IGZ1bmN0aW9uIChlcnJvcikge1xuICAvLyBJbiBvbGRlciBicm93c2VycyBhbmQgdGVzdCBlbnZpcm9ubWVudHMsIGZhbGxiYWNrIHRvIGNvbnNvbGUuZXJyb3IuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcbiAgY29uc29sZVsnZXJyb3InXShlcnJvcik7XG59O1xuXG5mdW5jdGlvbiBSZWFjdERPTVJvb3QoaW50ZXJuYWxSb290KSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGludGVybmFsUm9vdDtcbn1cblxuUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS5yZW5kZXIgPSBSZWFjdERPTVJvb3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcblxuICBpZiAocm9vdCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVwZGF0ZSBhbiB1bm1vdW50ZWQgcm9vdC4nKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuICcgKyAnVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkQ29udGFpbmVyKGFyZ3VtZW50c1sxXSkpIHtcbiAgICAgIGVycm9yKCdZb3UgcGFzc2VkIGEgY29udGFpbmVyIHRvIHRoZSBzZWNvbmQgYXJndW1lbnQgb2Ygcm9vdC5yZW5kZXIoLi4uKS4gJyArIFwiWW91IGRvbid0IG5lZWQgdG8gcGFzcyBpdCBhZ2FpbiBzaW5jZSB5b3UgYWxyZWFkeSBwYXNzZWQgaXQgdG8gY3JlYXRlIHRoZSByb290LlwiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlcnJvcignWW91IHBhc3NlZCBhIHNlY29uZCBhcmd1bWVudCB0byByb290LnJlbmRlciguLi4pIGJ1dCBpdCBvbmx5IGFjY2VwdHMgJyArICdvbmUgYXJndW1lbnQuJyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKHJvb3QuY3VycmVudCk7XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGhvc3RJbnN0YW5jZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEl0IGxvb2tzIGxpa2UgdGhlIFJlYWN0LXJlbmRlcmVkIGNvbnRlbnQgb2YgdGhlICcgKyAncm9vdCBjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyBcInJvb3QudW5tb3VudCgpIHRvIGVtcHR5IGEgcm9vdCdzIGNvbnRhaW5lci5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIHJvb3QsIG51bGwsIG51bGwpO1xufTtcblxuUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS51bm1vdW50ID0gUmVhY3RET01Sb290LnByb3RvdHlwZS51bm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCd1bm1vdW50KC4uLik6IGRvZXMgbm90IHN1cHBvcnQgYSBjYWxsYmFjayBhcmd1bWVudC4gJyArICdUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIHRoaXMuX2ludGVybmFsUm9vdCA9IG51bGw7XG4gICAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcblxuICAgIHtcbiAgICAgIGlmIChpc0FscmVhZHlSZW5kZXJpbmcoKSkge1xuICAgICAgICBlcnJvcignQXR0ZW1wdGVkIHRvIHN5bmNocm9ub3VzbHkgdW5tb3VudCBhIHJvb3Qgd2hpbGUgUmVhY3Qgd2FzIGFscmVhZHkgJyArICdyZW5kZXJpbmcuIFJlYWN0IGNhbm5vdCBmaW5pc2ggdW5tb3VudGluZyB0aGUgcm9vdCB1bnRpbCB0aGUgJyArICdjdXJyZW50IHJlbmRlciBoYXMgY29tcGxldGVkLCB3aGljaCBtYXkgbGVhZCB0byBhIHJhY2UgY29uZGl0aW9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVDb250YWluZXIobnVsbCwgcm9vdCwgbnVsbCwgbnVsbCk7XG4gICAgfSk7XG4gICAgdW5tYXJrQ29udGFpbmVyQXNSb290KGNvbnRhaW5lcik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3QoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjcmVhdGVSb290KC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJyk7XG4gIH1cblxuICB3YXJuSWZSZWFjdERPTUNvbnRhaW5lckluREVWKGNvbnRhaW5lcik7XG4gIHZhciBpc1N0cmljdE1vZGUgPSBmYWxzZTtcbiAgdmFyIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUgPSBmYWxzZTtcbiAgdmFyIGlkZW50aWZpZXJQcmVmaXggPSAnJztcbiAgdmFyIG9uUmVjb3ZlcmFibGVFcnJvciA9IGRlZmF1bHRPblJlY292ZXJhYmxlRXJyb3I7XG4gIHZhciB0cmFuc2l0aW9uQ2FsbGJhY2tzID0gbnVsbDtcblxuICBpZiAob3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICB7XG4gICAgICBpZiAob3B0aW9ucy5oeWRyYXRlKSB7XG4gICAgICAgIHdhcm4oJ2h5ZHJhdGUgdGhyb3VnaCBjcmVhdGVSb290IGlzIGRlcHJlY2F0ZWQuIFVzZSBSZWFjdERPTUNsaWVudC5oeWRyYXRlUm9vdChjb250YWluZXIsIDxBcHAgLz4pIGluc3RlYWQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucy4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICAgICAgZXJyb3IoJ1lvdSBwYXNzZWQgYSBKU1ggZWxlbWVudCB0byBjcmVhdGVSb290LiBZb3UgcHJvYmFibHkgbWVhbnQgdG8gJyArICdjYWxsIHJvb3QucmVuZGVyIGluc3RlYWQuICcgKyAnRXhhbXBsZSB1c2FnZTpcXG5cXG4nICsgJyAgbGV0IHJvb3QgPSBjcmVhdGVSb290KGRvbUNvbnRhaW5lcik7XFxuJyArICcgIHJvb3QucmVuZGVyKDxBcHAgLz4pOycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudW5zdGFibGVfc3RyaWN0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgaXNTdHJpY3RNb2RlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5pZGVudGlmaWVyUHJlZml4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlkZW50aWZpZXJQcmVmaXggPSBvcHRpb25zLmlkZW50aWZpZXJQcmVmaXg7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9uUmVjb3ZlcmFibGVFcnJvciA9IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnRyYW5zaXRpb25DYWxsYmFja3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJhbnNpdGlvbkNhbGxiYWNrcyA9IG9wdGlvbnMudHJhbnNpdGlvbkNhbGxiYWNrcztcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdCA9IGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXIsIENvbmN1cnJlbnRSb290LCBudWxsLCBpc1N0cmljdE1vZGUsIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUsIGlkZW50aWZpZXJQcmVmaXgsIG9uUmVjb3ZlcmFibGVFcnJvcik7XG4gIG1hcmtDb250YWluZXJBc1Jvb3Qocm9vdC5jdXJyZW50LCBjb250YWluZXIpO1xuICB2YXIgcm9vdENvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSA/IGNvbnRhaW5lci5wYXJlbnROb2RlIDogY29udGFpbmVyO1xuICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCk7XG4gIHJldHVybiBuZXcgUmVhY3RET01Sb290KHJvb3QpO1xufVxuXG5mdW5jdGlvbiBSZWFjdERPTUh5ZHJhdGlvblJvb3QoaW50ZXJuYWxSb290KSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGludGVybmFsUm9vdDtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVIeWRyYXRpb24odGFyZ2V0KSB7XG4gIGlmICh0YXJnZXQpIHtcbiAgICBxdWV1ZUV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHRhcmdldCk7XG4gIH1cbn1cblxuUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS51bnN0YWJsZV9zY2hlZHVsZUh5ZHJhdGlvbiA9IHNjaGVkdWxlSHlkcmF0aW9uO1xuZnVuY3Rpb24gaHlkcmF0ZVJvb3QoY29udGFpbmVyLCBpbml0aWFsQ2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2h5ZHJhdGVSb290KC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJyk7XG4gIH1cblxuICB3YXJuSWZSZWFjdERPTUNvbnRhaW5lckluREVWKGNvbnRhaW5lcik7XG5cbiAge1xuICAgIGlmIChpbml0aWFsQ2hpbGRyZW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IoJ011c3QgcHJvdmlkZSBpbml0aWFsIGNoaWxkcmVuIGFzIHNlY29uZCBhcmd1bWVudCB0byBoeWRyYXRlUm9vdC4gJyArICdFeGFtcGxlIHVzYWdlOiBoeWRyYXRlUm9vdChkb21Db250YWluZXIsIDxBcHAgLz4pJyk7XG4gICAgfVxuICB9IC8vIEZvciBub3cgd2UgcmV1c2UgdGhlIHdob2xlIGJhZyBvZiBvcHRpb25zIHNpbmNlIHRoZXkgY29udGFpblxuICAvLyB0aGUgaHlkcmF0aW9uIGNhbGxiYWNrcy5cblxuXG4gIHZhciBoeWRyYXRpb25DYWxsYmFja3MgPSBvcHRpb25zICE9IG51bGwgPyBvcHRpb25zIDogbnVsbDsgLy8gVE9ETzogRGVsZXRlIHRoaXMgb3B0aW9uXG5cbiAgdmFyIG11dGFibGVTb3VyY2VzID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0ZWRTb3VyY2VzIHx8IG51bGw7XG4gIHZhciBpc1N0cmljdE1vZGUgPSBmYWxzZTtcbiAgdmFyIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUgPSBmYWxzZTtcbiAgdmFyIGlkZW50aWZpZXJQcmVmaXggPSAnJztcbiAgdmFyIG9uUmVjb3ZlcmFibGVFcnJvciA9IGRlZmF1bHRPblJlY292ZXJhYmxlRXJyb3I7XG5cbiAgaWYgKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKG9wdGlvbnMudW5zdGFibGVfc3RyaWN0TW9kZSA9PT0gdHJ1ZSkge1xuICAgICAgaXNTdHJpY3RNb2RlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5pZGVudGlmaWVyUHJlZml4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlkZW50aWZpZXJQcmVmaXggPSBvcHRpb25zLmlkZW50aWZpZXJQcmVmaXg7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9uUmVjb3ZlcmFibGVFcnJvciA9IG9wdGlvbnMub25SZWNvdmVyYWJsZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290ID0gY3JlYXRlSHlkcmF0aW9uQ29udGFpbmVyKGluaXRpYWxDaGlsZHJlbiwgbnVsbCwgY29udGFpbmVyLCBDb25jdXJyZW50Um9vdCwgaHlkcmF0aW9uQ2FsbGJhY2tzLCBpc1N0cmljdE1vZGUsIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUsIGlkZW50aWZpZXJQcmVmaXgsIG9uUmVjb3ZlcmFibGVFcnJvcik7XG4gIG1hcmtDb250YWluZXJBc1Jvb3Qocm9vdC5jdXJyZW50LCBjb250YWluZXIpOyAvLyBUaGlzIGNhbid0IGJlIGEgY29tbWVudCBub2RlIHNpbmNlIGh5ZHJhdGlvbiBkb2Vzbid0IHdvcmsgb24gY29tbWVudCBub2RlcyBhbnl3YXkuXG5cbiAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMoY29udGFpbmVyKTtcblxuICBpZiAobXV0YWJsZVNvdXJjZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dGFibGVTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IG11dGFibGVTb3VyY2VzW2ldO1xuICAgICAgcmVnaXN0ZXJNdXRhYmxlU291cmNlRm9ySHlkcmF0aW9uKHJvb3QsIG11dGFibGVTb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgUmVhY3RET01IeWRyYXRpb25Sb290KHJvb3QpO1xufVxuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8ICFkaXNhYmxlQ29tbWVudHNBc0RPTUNvbnRhaW5lcnMgICkpO1xufSAvLyBUT0RPOiBSZW1vdmUgdGhpcyBmdW5jdGlvbiB3aGljaCBhbHNvIGluY2x1ZGVzIGNvbW1lbnQgbm9kZXMuXG4vLyBXZSBvbmx5IHVzZSBpdCBpbiBwbGFjZXMgdGhhdCBhcmUgY3VycmVudGx5IG1vcmUgcmVsYXhlZC5cblxuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lckxlZ2FjeShub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBub2RlLm5vZGVWYWx1ZSA9PT0gJyByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSAnKSk7XG59XG5cbmZ1bmN0aW9uIHdhcm5JZlJlYWN0RE9NQ29udGFpbmVySW5ERVYoY29udGFpbmVyKSB7XG4gIHtcbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgY29udGFpbmVyLnRhZ05hbWUgJiYgY29udGFpbmVyLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSB7XG4gICAgICBlcnJvcignY3JlYXRlUm9vdCgpOiBDcmVhdGluZyByb290cyBkaXJlY3RseSB3aXRoIGRvY3VtZW50LmJvZHkgaXMgJyArICdkaXNjb3VyYWdlZCwgc2luY2UgaXRzIGNoaWxkcmVuIGFyZSBvZnRlbiBtYW5pcHVsYXRlZCBieSB0aGlyZC1wYXJ0eSAnICsgJ3NjcmlwdHMgYW5kIGJyb3dzZXIgZXh0ZW5zaW9ucy4gVGhpcyBtYXkgbGVhZCB0byBzdWJ0bGUgJyArICdyZWNvbmNpbGlhdGlvbiBpc3N1ZXMuIFRyeSB1c2luZyBhIGNvbnRhaW5lciBlbGVtZW50IGNyZWF0ZWQgJyArICdmb3IgeW91ciBhcHAuJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikpIHtcbiAgICAgIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcikge1xuICAgICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NQ2xpZW50LmNyZWF0ZVJvb3QoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLnJlbmRlcigpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NQ2xpZW50LmNyZWF0ZVJvb3QoKSBvbiBhIGNvbnRhaW5lciB0aGF0ICcgKyAnaGFzIGFscmVhZHkgYmVlbiBwYXNzZWQgdG8gY3JlYXRlUm9vdCgpIGJlZm9yZS4gSW5zdGVhZCwgY2FsbCAnICsgJ3Jvb3QucmVuZGVyKCkgb24gdGhlIGV4aXN0aW5nIHJvb3QgaW5zdGVhZCBpZiB5b3Ugd2FudCB0byB1cGRhdGUgaXQuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQzID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncztcblxue1xuICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciAmJiBjb250YWluZXIubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyLmN1cnJlbnQpO1xuXG4gICAgICBpZiAoaG9zdEluc3RhbmNlKSB7XG4gICAgICAgIGlmIChob3N0SW5zdGFuY2UucGFyZW50Tm9kZSAhPT0gY29udGFpbmVyKSB7XG4gICAgICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBJdCBsb29rcyBsaWtlIHRoZSBSZWFjdC1yZW5kZXJlZCBjb250ZW50IG9mIHRoaXMgJyArICdjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyAnUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSB0byBlbXB0eSBhIGNvbnRhaW5lci4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0ID0gISFjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEocm9vdEVsICYmIGdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKSk7XG5cbiAgICBpZiAoaGFzTm9uUm9vdFJlYWN0Q2hpbGQgJiYgIWlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCAnICsgJ2NvbXBvbmVudC4gSWYgeW91IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlLCAnICsgJ3lvdSBzaG91bGQgaW5zdGVhZCBoYXZlIHRoZSBleGlzdGluZyBjaGlsZHJlbiB1cGRhdGUgdGhlaXIgc3RhdGUgJyArICdhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50cyBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLicpO1xuICAgIH1cblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBjb250YWluZXIudGFnTmFtZSAmJiBjb250YWluZXIudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQk9EWScpIHtcbiAgICAgIGVycm9yKCdyZW5kZXIoKTogUmVuZGVyaW5nIGNvbXBvbmVudHMgZGlyZWN0bHkgaW50byBkb2N1bWVudC5ib2R5IGlzICcgKyAnZGlzY291cmFnZWQsIHNpbmNlIGl0cyBjaGlsZHJlbiBhcmUgb2Z0ZW4gbWFuaXB1bGF0ZWQgYnkgdGhpcmQtcGFydHkgJyArICdzY3JpcHRzIGFuZCBicm93c2VyIGV4dGVuc2lvbnMuIFRoaXMgbWF5IGxlYWQgdG8gc3VidGxlICcgKyAncmVjb25jaWxpYXRpb24gaXNzdWVzLiBUcnkgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgZWxlbWVudCBjcmVhdGVkICcgKyAnZm9yIHlvdXIgYXBwLicpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjb250YWluZXIuZmlyc3RDaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBub29wT25SZWNvdmVyYWJsZUVycm9yKCkgey8vIFRoaXMgaXNuJ3QgcmVhY2hhYmxlIGJlY2F1c2Ugb25SZWNvdmVyYWJsZUVycm9yIGlzbid0IGNhbGxlZCBpbiB0aGVcbiAgLy8gbGVnYWN5IEFQSS5cbn1cblxuZnVuY3Rpb24gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBpbml0aWFsQ2hpbGRyZW4sIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2ssIGlzSHlkcmF0aW9uQ29udGFpbmVyKSB7XG4gIGlmIChpc0h5ZHJhdGlvbkNvbnRhaW5lcikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBvcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2Uocm9vdCk7XG4gICAgICAgIG9yaWdpbmFsQ2FsbGJhY2suY2FsbChpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciByb290ID0gY3JlYXRlSHlkcmF0aW9uQ29udGFpbmVyKGluaXRpYWxDaGlsZHJlbiwgY2FsbGJhY2ssIGNvbnRhaW5lciwgTGVnYWN5Um9vdCwgbnVsbCwgLy8gaHlkcmF0aW9uQ2FsbGJhY2tzXG4gICAgZmFsc2UsIC8vIGlzU3RyaWN0TW9kZVxuICAgIGZhbHNlLCAvLyBjb25jdXJyZW50VXBkYXRlc0J5RGVmYXVsdE92ZXJyaWRlLFxuICAgICcnLCAvLyBpZGVudGlmaWVyUHJlZml4XG4gICAgbm9vcE9uUmVjb3ZlcmFibGVFcnJvcik7XG4gICAgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSByb290O1xuICAgIG1hcmtDb250YWluZXJBc1Jvb3Qocm9vdC5jdXJyZW50LCBjb250YWluZXIpO1xuICAgIHZhciByb290Q29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXI7XG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICAgIGZsdXNoU3luYygpO1xuICAgIHJldHVybiByb290O1xuICB9IGVsc2Uge1xuICAgIC8vIEZpcnN0IGNsZWFyIGFueSBleGlzdGluZyBjb250ZW50LlxuICAgIHZhciByb290U2libGluZztcblxuICAgIHdoaWxlIChyb290U2libGluZyA9IGNvbnRhaW5lci5sYXN0Q2hpbGQpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChyb290U2libGluZyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIF9vcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2UoX3Jvb3QpO1xuXG4gICAgICAgIF9vcmlnaW5hbENhbGxiYWNrLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgX3Jvb3QgPSBjcmVhdGVDb250YWluZXIoY29udGFpbmVyLCBMZWdhY3lSb290LCBudWxsLCAvLyBoeWRyYXRpb25DYWxsYmFja3NcbiAgICBmYWxzZSwgLy8gaXNTdHJpY3RNb2RlXG4gICAgZmFsc2UsIC8vIGNvbmN1cnJlbnRVcGRhdGVzQnlEZWZhdWx0T3ZlcnJpZGUsXG4gICAgJycsIC8vIGlkZW50aWZpZXJQcmVmaXhcbiAgICBub29wT25SZWNvdmVyYWJsZUVycm9yKTtcblxuICAgIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gX3Jvb3Q7XG4gICAgbWFya0NvbnRhaW5lckFzUm9vdChfcm9vdC5jdXJyZW50LCBjb250YWluZXIpO1xuXG4gICAgdmFyIF9yb290Q29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gY29udGFpbmVyLnBhcmVudE5vZGUgOiBjb250YWluZXI7XG5cbiAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhfcm9vdENvbnRhaW5lckVsZW1lbnQpOyAvLyBJbml0aWFsIG1vdW50IHNob3VsZCBub3QgYmUgYmF0Y2hlZC5cblxuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVDb250YWluZXIoaW5pdGlhbENoaWxkcmVuLCBfcm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gICAgfSk7XG4gICAgcmV0dXJuIF9yb290O1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gIHtcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBjaGlsZHJlbiwgY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzKGNvbnRhaW5lcik7XG4gICAgd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaywgJ3JlbmRlcicpO1xuICB9XG5cbiAgdmFyIG1heWJlUm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICB2YXIgcm9vdDtcblxuICBpZiAoIW1heWJlUm9vdCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICByb290ID0gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBjaGlsZHJlbiwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjaywgZm9yY2VIeWRyYXRlKTtcbiAgfSBlbHNlIHtcbiAgICByb290ID0gbWF5YmVSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIG9yaWdpbmFsQ2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFB1YmxpY1Jvb3RJbnN0YW5jZShyb290KTtcbiAgICAgICAgb3JpZ2luYWxDYWxsYmFjay5jYWxsKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgfSAvLyBVcGRhdGVcblxuXG4gICAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCByb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBnZXRQdWJsaWNSb290SW5zdGFuY2Uocm9vdCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRET01Ob2RlKGNvbXBvbmVudE9yRWxlbWVudCkge1xuICB7XG4gICAgdmFyIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIkMy5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHdhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcjtcblxuICAgICAgaWYgKCF3YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGZpbmRET01Ob2RlIGluc2lkZSBpdHMgcmVuZGVyKCkuICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUob3duZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgfVxuXG4gIHtcbiAgICByZXR1cm4gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudE9yRWxlbWVudCwgJ2ZpbmRET01Ob2RlJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGh5ZHJhdGUoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICB7XG4gICAgZXJyb3IoJ1JlYWN0RE9NLmh5ZHJhdGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiBSZWFjdCAxOC4gVXNlIGh5ZHJhdGVSb290ICcgKyAnaW5zdGVhZC4gVW50aWwgeW91IHN3aXRjaCB0byB0aGUgbmV3IEFQSSwgeW91ciBhcHAgd2lsbCBiZWhhdmUgYXMgJyArIFwiaWYgaXQncyBydW5uaW5nIFJlYWN0IDE3LiBMZWFybiBcIiArICdtb3JlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3dpdGNoLXRvLWNyZWF0ZXJvb3QnKTtcbiAgfVxuXG4gIGlmICghaXNWYWxpZENvbnRhaW5lckxlZ2FjeShjb250YWluZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LicpO1xuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLmh5ZHJhdGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NQ2xpZW50LmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIGh5ZHJhdGVSb290KGNvbnRhaW5lciwgZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9IC8vIFRPRE86IHRocm93IG9yIHdhcm4gaWYgd2UgY291bGRuJ3QgaHlkcmF0ZT9cblxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIHRydWUsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHJlbmRlcihlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICBlcnJvcignUmVhY3RET00ucmVuZGVyIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gUmVhY3QgMTguIFVzZSBjcmVhdGVSb290ICcgKyAnaW5zdGVhZC4gVW50aWwgeW91IHN3aXRjaCB0byB0aGUgbmV3IEFQSSwgeW91ciBhcHAgd2lsbCBiZWhhdmUgYXMgJyArIFwiaWYgaXQncyBydW5uaW5nIFJlYWN0IDE3LiBMZWFybiBcIiArICdtb3JlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3dpdGNoLXRvLWNyZWF0ZXJvb3QnKTtcbiAgfVxuXG4gIGlmICghaXNWYWxpZENvbnRhaW5lckxlZ2FjeShjb250YWluZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LicpO1xuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlcigpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET01DbGllbnQuY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgcm9vdC5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIGVsZW1lbnQsIGNvbnRhaW5lciwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcbiAge1xuICAgIGVycm9yKCdSZWFjdERPTS51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcigpIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgJyArICdpbiBSZWFjdCAxOC4gQ29uc2lkZXIgdXNpbmcgYSBwb3J0YWwgaW5zdGVhZC4gVW50aWwgeW91IHN3aXRjaCB0byAnICsgXCJ0aGUgY3JlYXRlUm9vdCBBUEksIHlvdXIgYXBwIHdpbGwgYmVoYXZlIGFzIGlmIGl0J3MgcnVubmluZyBSZWFjdCBcIiArICcxNy4gTGVhcm4gbW9yZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N3aXRjaC10by1jcmVhdGVyb290Jyk7XG4gIH1cblxuICBpZiAoIWlzVmFsaWRDb250YWluZXJMZWdhY3koY29udGFpbmVyTm9kZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJyk7XG4gIH1cblxuICBpZiAocGFyZW50Q29tcG9uZW50ID09IG51bGwgfHwgIWhhcyhwYXJlbnRDb21wb25lbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnRDb21wb25lbnQgbXVzdCBiZSBhIHZhbGlkIFJlYWN0IENvbXBvbmVudCcpO1xuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lckxlZ2FjeShjb250YWluZXIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJyk7XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET01DbGllbnQuY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QudW5tb3VudCgpPycpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcikge1xuICAgIHtcbiAgICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIHZhciByZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QgPSByb290RWwgJiYgIWdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKTtcblxuICAgICAgaWYgKHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgYW5vdGhlciBjb3B5IG9mIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH0gLy8gVW5tb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG5cblxuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBudWxsLCBjb250YWluZXIsIGZhbHNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgVGhpcyBzaG91bGQgcHJvYmFibHkgdXNlIGBkZWxldGUgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXJgXG4gICAgICAgIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gbnVsbDtcbiAgICAgICAgdW5tYXJrQ29udGFpbmVyQXNSb290KGNvbnRhaW5lcik7XG4gICAgICB9KTtcbiAgICB9KTsgLy8gSWYgeW91IGNhbGwgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB0d2ljZSBpbiBxdWljayBzdWNjZXNzaW9uLCB5b3UnbGxcbiAgICAvLyBnZXQgYHRydWVgIHR3aWNlLiBUaGF0J3MgcHJvYmFibHkgZmluZT9cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHZhciBfcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG5cbiAgICAgIHZhciBoYXNOb25Sb290UmVhY3RDaGlsZCA9ICEhKF9yb290RWwgJiYgZ2V0SW5zdGFuY2VGcm9tTm9kZShfcm9vdEVsKSk7IC8vIENoZWNrIGlmIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGEgUmVhY3Qgcm9vdCBub2RlLlxuXG4gICAgICB2YXIgaXNDb250YWluZXJSZWFjdFJvb3QgPSBjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBpc1ZhbGlkQ29udGFpbmVyTGVnYWN5KGNvbnRhaW5lci5wYXJlbnROb2RlKSAmJiAhIWNvbnRhaW5lci5wYXJlbnROb2RlLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgICAgIGlmIChoYXNOb25Sb290UmVhY3RDaGlsZCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgUmVhY3QgYW5kIGlzIG5vdCBhIHRvcC1sZXZlbCBjb250YWluZXIuICVzJywgaXNDb250YWluZXJSZWFjdFJvb3QgPyAnWW91IG1heSBoYXZlIGFjY2lkZW50YWxseSBwYXNzZWQgaW4gYSBSZWFjdCByb290IG5vZGUgaW5zdGVhZCAnICsgJ29mIGl0cyBjb250YWluZXIuJyA6ICdJbnN0ZWFkLCBoYXZlIHRoZSBwYXJlbnQgY29tcG9uZW50IHVwZGF0ZSBpdHMgc3RhdGUgYW5kICcgKyAncmVyZW5kZXIgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoaXMgY29tcG9uZW50LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5zZXRBdHRlbXB0U3luY2hyb25vdXNIeWRyYXRpb24oYXR0ZW1wdFN5bmNocm9ub3VzSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5JDEpO1xuc2V0R2V0Q3VycmVudFVwZGF0ZVByaW9yaXR5KGdldEN1cnJlbnRVcGRhdGVQcmlvcml0eSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShydW5XaXRoUHJpb3JpdHkpO1xuXG57XG4gIGlmICh0eXBlb2YgTWFwICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgTWFwIGhhcyBubyBwcm90b3R5cGVcbiAgTWFwLnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBNYXAucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIFNldCAhPT0gJ2Z1bmN0aW9uJyB8fCAvLyAkRmxvd0lzc3VlIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIFNldCBoYXMgbm8gcHJvdG90eXBlXG4gIFNldC5wcm90b3R5cGUgPT0gbnVsbCB8fCB0eXBlb2YgU2V0LnByb3RvdHlwZS5jbGVhciAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0LnByb3RvdHlwZS5mb3JFYWNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgZXJyb3IoJ1JlYWN0IGRlcGVuZHMgb24gTWFwIGFuZCBTZXQgYnVpbHQtaW4gdHlwZXMuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICB9XG59XG5cbnNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbihyZXN0b3JlQ29udHJvbGxlZFN0YXRlJDMpO1xuc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihiYXRjaGVkVXBkYXRlcyQxLCBkaXNjcmV0ZVVwZGF0ZXMsIGZsdXNoU3luYyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC4nKTtcbiAgfSAvLyBUT0RPOiBwYXNzIFJlYWN0RE9NIHBvcnRhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGlyZCBhcmd1bWVudFxuICAvLyAkRmxvd0ZpeE1lIFRoZSBGbG93IHR5cGUgaXMgb3BhcXVlIGJ1dCB0aGVyZSdzIG5vIHdheSB0byBhY3R1YWxseSBjcmVhdGUgaXQuXG5cblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXIsIG51bGwsIGtleSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spO1xufVxuXG52YXIgSW50ZXJuYWxzID0ge1xuICB1c2luZ0NsaWVudEVudHJ5UG9pbnQ6IGZhbHNlLFxuICAvLyBLZWVwIGluIHN5bmMgd2l0aCBSZWFjdFRlc3RVdGlscy5qcy5cbiAgLy8gVGhpcyBpcyBhbiBhcnJheSBmb3IgYmV0dGVyIG1pbmlmaWNhdGlvbi5cbiAgRXZlbnRzOiBbZ2V0SW5zdGFuY2VGcm9tTm9kZSwgZ2V0Tm9kZUZyb21JbnN0YW5jZSwgZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSwgZW5xdWV1ZVN0YXRlUmVzdG9yZSwgcmVzdG9yZVN0YXRlSWZOZWVkZWQsIGJhdGNoZWRVcGRhdGVzJDFdXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVSb290JDEoY29udGFpbmVyLCBvcHRpb25zKSB7XG4gIHtcbiAgICBpZiAoIUludGVybmFscy51c2luZ0NsaWVudEVudHJ5UG9pbnQgJiYgIWZhbHNlKSB7XG4gICAgICBlcnJvcignWW91IGFyZSBpbXBvcnRpbmcgY3JlYXRlUm9vdCBmcm9tIFwicmVhY3QtZG9tXCIgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4gJyArICdZb3Ugc2hvdWxkIGluc3RlYWQgaW1wb3J0IGl0IGZyb20gXCJyZWFjdC1kb20vY2xpZW50XCIuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVJvb3QoY29udGFpbmVyLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gaHlkcmF0ZVJvb3QkMShjb250YWluZXIsIGluaXRpYWxDaGlsZHJlbiwgb3B0aW9ucykge1xuICB7XG4gICAgaWYgKCFJbnRlcm5hbHMudXNpbmdDbGllbnRFbnRyeVBvaW50ICYmICFmYWxzZSkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgaW1wb3J0aW5nIGh5ZHJhdGVSb290IGZyb20gXCJyZWFjdC1kb21cIiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1lvdSBzaG91bGQgaW5zdGVhZCBpbXBvcnQgaXQgZnJvbSBcInJlYWN0LWRvbS9jbGllbnRcIi4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaHlkcmF0ZVJvb3QoY29udGFpbmVyLCBpbml0aWFsQ2hpbGRyZW4sIG9wdGlvbnMpO1xufSAvLyBPdmVybG9hZCB0aGUgZGVmaW5pdGlvbiB0byB0aGUgdHdvIHZhbGlkIHNpZ25hdHVyZXMuXG4vLyBXYXJuaW5nLCB0aGlzIG9wdHMtb3V0IG9mIGNoZWNraW5nIHRoZSBmdW5jdGlvbiBib2R5LlxuXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcbmZ1bmN0aW9uIGZsdXNoU3luYyQxKGZuKSB7XG4gIHtcbiAgICBpZiAoaXNBbHJlYWR5UmVuZGVyaW5nKCkpIHtcbiAgICAgIGVycm9yKCdmbHVzaFN5bmMgd2FzIGNhbGxlZCBmcm9tIGluc2lkZSBhIGxpZmVjeWNsZSBtZXRob2QuIFJlYWN0IGNhbm5vdCAnICsgJ2ZsdXNoIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuIENvbnNpZGVyIG1vdmluZyB0aGlzIGNhbGwgdG8gJyArICdhIHNjaGVkdWxlciB0YXNrIG9yIG1pY3JvIHRhc2suJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZsdXNoU3luYyhmbik7XG59XG52YXIgZm91bmREZXZUb29scyA9IGluamVjdEludG9EZXZUb29scyh7XG4gIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgYnVuZGxlVHlwZTogIDEgLFxuICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG4gIHJlbmRlcmVyUGFja2FnZU5hbWU6ICdyZWFjdC1kb20nXG59KTtcblxue1xuICBpZiAoIWZvdW5kRGV2VG9vbHMgJiYgY2FuVXNlRE9NICYmIHdpbmRvdy50b3AgPT09IHdpbmRvdy5zZWxmKSB7XG4gICAgLy8gSWYgd2UncmUgaW4gQ2hyb21lIG9yIEZpcmVmb3gsIHByb3ZpZGUgYSBkb3dubG9hZCBsaW5rIGlmIG5vdCBpbnN0YWxsZWQuXG4gICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lJykgPiAtMSAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VkZ2UnKSA9PT0gLTEgfHwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPiAtMSkge1xuICAgICAgdmFyIHByb3RvY29sID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sOyAvLyBEb24ndCB3YXJuIGluIGV4b3RpYyBjYXNlcyBsaWtlIGNocm9tZS1leHRlbnNpb246Ly8uXG5cbiAgICAgIGlmICgvXihodHRwcz98ZmlsZSk6JC8udGVzdChwcm90b2NvbCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuICAgICAgICBjb25zb2xlLmluZm8oJyVjRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyArIChwcm90b2NvbCA9PT0gJ2ZpbGU6JyA/ICdcXG5Zb3UgbWlnaHQgbmVlZCB0byB1c2UgYSBsb2NhbCBIVFRQIHNlcnZlciAoaW5zdGVhZCBvZiBmaWxlOi8vKTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMtZmFxJyA6ICcnKSwgJ2ZvbnQtd2VpZ2h0OmJvbGQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IEludGVybmFscztcbmV4cG9ydHMuY3JlYXRlUG9ydGFsID0gY3JlYXRlUG9ydGFsJDE7XG5leHBvcnRzLmNyZWF0ZVJvb3QgPSBjcmVhdGVSb290JDE7XG5leHBvcnRzLmZpbmRET01Ob2RlID0gZmluZERPTU5vZGU7XG5leHBvcnRzLmZsdXNoU3luYyA9IGZsdXNoU3luYyQxO1xuZXhwb3J0cy5oeWRyYXRlID0gaHlkcmF0ZTtcbmV4cG9ydHMuaHlkcmF0ZVJvb3QgPSBoeWRyYXRlUm9vdCQxO1xuZXhwb3J0cy5yZW5kZXIgPSByZW5kZXI7XG5leHBvcnRzLnVubW91bnRDb21wb25lbnRBdE5vZGUgPSB1bm1vdW50Q29tcG9uZW50QXROb2RlO1xuZXhwb3J0cy51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IGJhdGNoZWRVcGRhdGVzJDE7XG5leHBvcnRzLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyID0gcmVuZGVyU3VidHJlZUludG9Db250YWluZXI7XG5leHBvcnRzLnZlcnNpb24gPSBSZWFjdFZlcnNpb247XG4gICAgICAgICAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuaWYgKFxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJyAmJlxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wID09PVxuICAgICdmdW5jdGlvbidcbikge1xuICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AobmV3IEVycm9yKCkpO1xufVxuICAgICAgICBcbiAgfSkoKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js\n")); + +/***/ }), + +/***/ "./node_modules/react-dom/client.js": +/*!******************************************!*\ + !*** ./node_modules/react-dom/client.js ***! + \******************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nvar m = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\nif (false) {} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2NsaWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixRQUFRLG1CQUFPLENBQUMsb0RBQVc7QUFDM0IsSUFBSSxLQUFxQyxFQUFFLEVBRzFDLENBQUM7QUFDRjtBQUNBLEVBQUUsa0JBQWtCO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1CQUFtQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9jbGllbnQuanM/YWY4MSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBtID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBleHBvcnRzLmNyZWF0ZVJvb3QgPSBtLmNyZWF0ZVJvb3Q7XG4gIGV4cG9ydHMuaHlkcmF0ZVJvb3QgPSBtLmh5ZHJhdGVSb290O1xufSBlbHNlIHtcbiAgdmFyIGkgPSBtLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuICBleHBvcnRzLmNyZWF0ZVJvb3QgPSBmdW5jdGlvbihjLCBvKSB7XG4gICAgaS51c2luZ0NsaWVudEVudHJ5UG9pbnQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbS5jcmVhdGVSb290KGMsIG8pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpLnVzaW5nQ2xpZW50RW50cnlQb2ludCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgZXhwb3J0cy5oeWRyYXRlUm9vdCA9IGZ1bmN0aW9uKGMsIGgsIG8pIHtcbiAgICBpLnVzaW5nQ2xpZW50RW50cnlQb2ludCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBtLmh5ZHJhdGVSb290KGMsIGgsIG8pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpLnVzaW5nQ2xpZW50RW50cnlQb2ludCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/react-dom/client.js\n")); + +/***/ }), + +/***/ "./node_modules/react-dom/index.js": +/*!*****************************************!*\ + !*** ./node_modules/react-dom/index.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (true) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ \"./node_modules/react-dom/cjs/react-dom.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksS0FBcUMsRUFBRSxFQUsxQyxDQUFDO0FBQ0YsRUFBRSxtSUFBMEQ7QUFDNUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbS9pbmRleC5qcz83NzIyIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/react-dom/index.js\n")); + +/***/ }), + +/***/ "./node_modules/react/cjs/react-jsx-runtime.development.js": +/*!*****************************************************************!*\ + !*** ./node_modules/react/cjs/react-jsx-runtime.development.js ***! + \*****************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUEsWUFBWSxtQkFBTyxDQUFDLDRDQUFPOztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxlQUFlO0FBQ2hIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVIsa0RBQWtEO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLDRCQUE0QjtBQUM1QjtBQUNBLHFDQUFxQzs7QUFFckMsZ0NBQWdDO0FBQ2hDO0FBQ0E7O0FBRUEsZ0NBQWdDOztBQUVoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQSxTQUFTO0FBQ1QsdUJBQXVCO0FBQ3ZCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCx3QkFBd0I7QUFDeEI7QUFDQSxTQUFTO0FBQ1QsaUNBQWlDO0FBQ2pDO0FBQ0EsU0FBUztBQUNULDJCQUEyQjtBQUMzQjtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0EsZ0ZBQWdGO0FBQ2hGO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjs7O0FBR2xCO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOzs7QUFHSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkhBQTJIO0FBQzNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsb0VBQW9FOztBQUVwRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZCxXQUFXLGVBQWU7QUFDMUIsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQjs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCOztBQUVsQjtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCLDJEQUEyRCxVQUFVO0FBQ3JFLHlCQUF5QixVQUFVO0FBQ25DO0FBQ0EsYUFBYSxVQUFVO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsV0FBVyxHQUFHO0FBQ2Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkRBQTZEO0FBQzdEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsR0FBRztBQUNkOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLGlCQUFpQjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6Qjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLDRDQUE0Qzs7QUFFNUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6Qjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMERBQTBEO0FBQzFEOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7O0FBRUE7O0FBRUEsZ0JBQWdCO0FBQ2hCLFdBQVc7QUFDWCxZQUFZO0FBQ1osR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9yZWFjdC9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanM/MmZjMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpO1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJyk7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGF6eScpO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuXG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuXG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIFN0cmluZyhpdGVtKTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG52YXIgZW5hYmxlQ2FjaGVFbGVtZW50ID0gZmFsc2U7XG52YXIgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgPSBmYWxzZTsgLy8gTm8ga25vd24gYnVncywgYnV0IG5lZWRzIHBlcmZvcm1hbmNlIHRlc3RpbmdcblxudmFyIGVuYWJsZUxlZ2FjeUhpZGRlbiA9IGZhbHNlOyAvLyBFbmFibGVzIHVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrIGZlYXR1cmUgaW4gRmliZXJcbi8vIHN0dWZmLiBJbnRlbmRlZCB0byBlbmFibGUgUmVhY3QgY29yZSBtZW1iZXJzIHRvIG1vcmUgZWFzaWx5IGRlYnVnIHNjaGVkdWxpbmdcbi8vIGlzc3VlcyBpbiBERVYgYnVpbGRzLlxuXG52YXIgZW5hYmxlRGVidWdUcmFjaW5nID0gZmFsc2U7IC8vIFRyYWNrIHdoaWNoIEZpYmVyKHMpIHNjaGVkdWxlIHJlbmRlciB3b3JrLlxuXG52YXIgUkVBQ1RfTU9EVUxFX1JFRkVSRU5DRTtcblxue1xuICBSRUFDVF9NT0RVTEVfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QubW9kdWxlLnJlZmVyZW5jZScpO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgZW5hYmxlRGVidWdUcmFjaW5nICB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IGVuYWJsZUxlZ2FjeUhpZGRlbiAgfHwgdHlwZSA9PT0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgIHx8IGVuYWJsZUNhY2hlRWxlbWVudCAgfHwgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIFRoaXMgbmVlZHMgdG8gaW5jbHVkZSBhbGwgcG9zc2libGUgbW9kdWxlIHJlZmVyZW5jZSBvYmplY3RcbiAgICAvLyB0eXBlcyBzdXBwb3J0ZWQgYnkgYW55IEZsaWdodCBjb25maWd1cmF0aW9uIGFueXdoZXJlIHNpbmNlXG4gICAgLy8gd2UgZG9uJ3Qga25vdyB3aGljaCBGbGlnaHQgYnVpbGQgdGhpcyB3aWxsIGVuZCB1cCBiZWluZyB1c2VkXG4gICAgLy8gd2l0aC5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NT0RVTEVfUkVGRVJFTkNFIHx8IHR5cGUuZ2V0TW9kdWxlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGRpc3BsYXlOYW1lID0gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lO1xuXG4gIGlmIChkaXNwbGF5TmFtZSkge1xuICAgIHJldHVybiBkaXNwbGF5TmFtZTtcbiAgfVxuXG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWU7XG59IC8vIEtlZXAgaW4gc3luYyB3aXRoIHJlYWN0LXJlY29uY2lsZXIvZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlclxuXG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufSAvLyBOb3RlIHRoYXQgdGhlIHJlY29uY2lsZXIgcGFja2FnZSBzaG91bGQgZ2VuZXJhbGx5IHByZWZlciB0byB1c2UgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcigpIGluc3RlYWQuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHZhciBvdXRlck5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKG91dGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBvdXRlck5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ01lbW8nO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG52YXIgcHJlZml4O1xuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICBpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEV4dHJhY3QgdGhlIFZNIHNwZWNpZmljIHByZWZpeCB1c2VkIGJ5IGVhY2ggbGluZS5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgIHByZWZpeCA9IG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xuICAgICAgfVxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXG5cblxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XG4gIH1cbn1cbnZhciByZWVudHJ5ID0gZmFsc2U7XG52YXIgY29tcG9uZW50RnJhbWVDYWNoZTtcblxue1xuICB2YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuICBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGFza2VkIGZvciBhIHN0YWNrIGluc2lkZSBhIGZha2UgcmVuZGVyLCBpdCBzaG91bGQgZ2V0IGlnbm9yZWQuXG4gIGlmICggIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpOyAvLyBJZiBvdXIgY29tcG9uZW50IGZyYW1lIGlzIGxhYmVsZWQgXCI8YW5vbnltb3VzPlwiXG4gICAgICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgYSB1c2VyLXByb3ZpZGVkIFwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgICAgICAgIC8vIHNwbGljZSBpdCBpbiB0byBtYWtlIHRoZSBzdGFjayBtb3JlIHJlYWRhYmxlLlxuXG5cbiAgICAgICAgICAgICAgICBpZiAoZm4uZGlzcGxheU5hbWUgJiYgX2ZyYW1lLmluY2x1ZGVzKCc8YW5vbnltb3VzPicpKSB7XG4gICAgICAgICAgICAgICAgICBfZnJhbWUgPSBfZnJhbWUucmVwbGFjZSgnPGFub255bW91cz4nLCBmbi5kaXNwbGF5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9wcm9kLWVycm9yLWNvZGVzXG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxuXG5mdW5jdGlvbiBpc0FycmF5KGEpIHtcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xufVxuXG4vKlxuICogVGhlIGAnJyArIHZhbHVlYCBwYXR0ZXJuICh1c2VkIGluIGluIHBlcmYtc2Vuc2l0aXZlIGNvZGUpIHRocm93cyBmb3IgU3ltYm9sXG4gKiBhbmQgVGVtcG9yYWwuKiB0eXBlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzIyMDY0LlxuICpcbiAqIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgd2lsbCB0aHJvdyBhbiBlYXNpZXItdG8tdW5kZXJzdGFuZCxcbiAqIGVhc2llci10by1kZWJ1ZyBleGNlcHRpb24gd2l0aCBhIGNsZWFyIGVycm9ycyBtZXNzYWdlIG1lc3NhZ2UgZXhwbGFpbmluZyB0aGVcbiAqIHByb2JsZW0uIChJbnN0ZWFkIG9mIGEgY29uZnVzaW5nIGV4Y2VwdGlvbiB0aHJvd24gaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvblxuICogb2YgdGhlIGB2YWx1ZWAgb2JqZWN0KS5cbiAqL1xuLy8gJEZsb3dGaXhNZSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cbmZ1bmN0aW9uIHR5cGVOYW1lKHZhbHVlKSB7XG4gIHtcbiAgICAvLyB0b1N0cmluZ1RhZyBpcyBuZWVkZWQgZm9yIG5hbWVzcGFjZWQgdHlwZXMgbGlrZSBUZW1wb3JhbC5JbnN0YW50XG4gICAgdmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wudG9TdHJpbmdUYWc7XG4gICAgdmFyIHR5cGUgPSBoYXNUb1N0cmluZ1RhZyAmJiB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddIHx8IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHwgJ09iamVjdCc7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbn0gLy8gJEZsb3dGaXhNZSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cblxuXG5mdW5jdGlvbiB3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkge1xuICB7XG4gICAgdHJ5IHtcbiAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAvLyBJZiB5b3UgZW5kZWQgdXAgaGVyZSBieSBmb2xsb3dpbmcgYW4gZXhjZXB0aW9uIGNhbGwgc3RhY2ssIGhlcmUncyB3aGF0J3NcbiAgLy8gaGFwcGVuZWQ6IHlvdSBzdXBwbGllZCBhbiBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIFJlYWN0IChhcyBhIHByb3AsIGtleSxcbiAgLy8gRE9NIGF0dHJpYnV0ZSwgQ1NTIHByb3BlcnR5LCBzdHJpbmcgcmVmLCBldGMuKSBhbmQgd2hlbiBSZWFjdCB0cmllZCB0b1xuICAvLyBjb2VyY2UgaXQgdG8gYSBzdHJpbmcgdXNpbmcgYCcnICsgdmFsdWVgLCBhbiBleGNlcHRpb24gd2FzIHRocm93bi5cbiAgLy9cbiAgLy8gVGhlIG1vc3QgY29tbW9uIHR5cGVzIHRoYXQgd2lsbCBjYXVzZSB0aGlzIGV4Y2VwdGlvbiBhcmUgYFN5bWJvbGAgaW5zdGFuY2VzXG4gIC8vIGFuZCBUZW1wb3JhbCBvYmplY3RzIGxpa2UgYFRlbXBvcmFsLkluc3RhbnRgLiBCdXQgYW55IG9iamVjdCB0aGF0IGhhcyBhXG4gIC8vIGB2YWx1ZU9mYCBvciBgW1N5bWJvbC50b1ByaW1pdGl2ZV1gIG1ldGhvZCB0aGF0IHRocm93cyB3aWxsIGFsc28gY2F1c2UgdGhpc1xuICAvLyBleGNlcHRpb24uIChMaWJyYXJ5IGF1dGhvcnMgZG8gdGhpcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gdXNpbmcgYnVpbHQtaW5cbiAgLy8gbnVtZXJpYyBvcGVyYXRvcnMgbGlrZSBgK2Agb3IgY29tcGFyaXNvbiBvcGVyYXRvcnMgbGlrZSBgPj1gIGJlY2F1c2UgY3VzdG9tXG4gIC8vIG1ldGhvZHMgYXJlIG5lZWRlZCB0byBwZXJmb3JtIGFjY3VyYXRlIGFyaXRobWV0aWMgb3IgY29tcGFyaXNvbi4pXG4gIC8vXG4gIC8vIFRvIGZpeCB0aGUgcHJvYmxlbSwgY29lcmNlIHRoaXMgb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyBiZWZvcmVcbiAgLy8gcGFzc2luZyBpdCB0byBSZWFjdC4gVGhlIG1vc3QgcmVsaWFibGUgd2F5IGlzIHVzdWFsbHkgYFN0cmluZyh2YWx1ZSlgLlxuICAvL1xuICAvLyBUbyBmaW5kIHdoaWNoIHZhbHVlIGlzIHRocm93aW5nLCBjaGVjayB0aGUgYnJvd3NlciBvciBkZWJ1Z2dlciBjb25zb2xlLlxuICAvLyBCZWZvcmUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93biwgdGhlcmUgc2hvdWxkIGJlIGBjb25zb2xlLmVycm9yYCBvdXRwdXRcbiAgLy8gdGhhdCBzaG93cyB0aGUgdHlwZSAoU3ltYm9sLCBUZW1wb3JhbC5QbGFpbkRhdGUsIGV0Yy4pIHRoYXQgY2F1c2VkIHRoZVxuICAvLyBwcm9ibGVtIGFuZCBob3cgdGhhdCB0eXBlIHdhcyB1c2VkOiBrZXksIGF0cnJpYnV0ZSwgaW5wdXQgdmFsdWUgcHJvcCwgZXRjLlxuICAvLyBJbiBtb3N0IGNhc2VzLCB0aGlzIGNvbnNvbGUgb3V0cHV0IGFsc28gc2hvd3MgdGhlIGNvbXBvbmVudCBhbmQgaXRzXG4gIC8vIGFuY2VzdG9yIGNvbXBvbmVudHMgd2hlcmUgdGhlIGV4Y2VwdGlvbiBoYXBwZW5lZC5cbiAgLy9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG4gIHJldHVybiAnJyArIHZhbHVlO1xufVxuZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICB7XG4gICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1RoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4nICsgJyBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgYmVmb3JlIHVzaW5nIGl0IGhlcmUuJywgdHlwZU5hbWUodmFsdWUpKTtcblxuICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bjtcbnZhciBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bjtcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIHNlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5zdGF0ZU5vZGUgIT09IHNlbGYpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKSwgY29uZmlnLnJlZik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB7XG4gICAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XG4gICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB7XG4gICAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG59XG4vKipcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXG4gKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywgaW5zdGFuY2VvZiBjaGVja1xuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZmNzL3B1bGwvMTA3XG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5cbmZ1bmN0aW9uIGpzeERFVih0eXBlLCBjb25maWcsIG1heWJlS2V5LCBzb3VyY2UsIHNlbGYpIHtcbiAge1xuICAgIHZhciBwcm9wTmFtZTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG4gICAgdmFyIHByb3BzID0ge307XG4gICAgdmFyIGtleSA9IG51bGw7XG4gICAgdmFyIHJlZiA9IG51bGw7IC8vIEN1cnJlbnRseSwga2V5IGNhbiBiZSBzcHJlYWQgaW4gYXMgYSBwcm9wLiBUaGlzIGNhdXNlcyBhIHBvdGVudGlhbFxuICAgIC8vIGlzc3VlIGlmIGtleSBpcyBhbHNvIGV4cGxpY2l0bHkgZGVjbGFyZWQgKGllLiA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPlxuICAgIC8vIG9yIDxkaXYga2V5PVwiSGlcIiB7Li4ucHJvcHN9IC8+ICkuIFdlIHdhbnQgdG8gZGVwcmVjYXRlIGtleSBzcHJlYWQsXG4gICAgLy8gYnV0IGFzIGFuIGludGVybWVkaWFyeSBzdGVwLCB3ZSB3aWxsIHVzZSBqc3hERVYgZm9yIGV2ZXJ5dGhpbmcgZXhjZXB0XG4gICAgLy8gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz4sIGJlY2F1c2Ugd2UgYXJlbid0IGN1cnJlbnRseSBhYmxlIHRvIHRlbGwgaWZcbiAgICAvLyBrZXkgaXMgZXhwbGljaXRseSBkZWNsYXJlZCB0byBiZSB1bmRlZmluZWQgb3Igbm90LlxuXG4gICAgaWYgKG1heWJlS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihtYXliZUtleSk7XG4gICAgICB9XG5cbiAgICAgIGtleSA9ICcnICsgbWF5YmVLZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZik7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG5cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gICAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIHZhciBkZWZhdWx0UHJvcHMgPSB0eXBlLmRlZmF1bHRQcm9wcztcblxuICAgICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHtcbiAgICBpZiAoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50KSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIHtcbiAgICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgICB2YXIgbGluZU51bWJlciA9IHNvdXJjZS5saW5lTnVtYmVyO1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbi8qKlxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gKiB1cGRhdGVzLlxuICovXG5cblxudmFyIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAge1xuICAgIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgICBpZiAoIWluZm8pIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuXG4gICAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZm87XG4gIH1cbn1cbi8qKlxuICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LlxuICogVGhpcyBlbGVtZW50IGlzIGluIGFuIGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlXG4gKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG9cbiAqIGhhdmUgYSBcImtleVwiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZ1xuICogd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAge1xuICAgIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTtcblxuICAgIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAgIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcbiAgICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuXG5cbiAgICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCkge1xuICAgICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAge1xuICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRW50cnkgaXRlcmF0b3JzIHVzZWQgdG8gcHJvdmlkZSBpbXBsaWNpdCBrZXlzLFxuICAgICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgICB2YXIgc3RlcDtcblxuICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wVHlwZXM7XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cbiAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wVHlwZXMpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcblxuICAgICAgZXJyb3IoJ0NvbXBvbmVudCAlcyBkZWNsYXJlZCBgUHJvcFR5cGVzYCBpbnN0ZWFkIG9mIGBwcm9wVHlwZXNgLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBwcm9wZXJ0eSBhc3NpZ25tZW50PycsIF9uYW1lIHx8ICdVbmtub3duJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlLmdldERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiAhdHlwZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJyk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGEgZnJhZ21lbnQsIHZhbGlkYXRlIHRoYXQgaXQgY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2l0aCBmcmFnbWVudCBwcm9wc1xuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGZyYWdtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZnJhZ21lbnQpIHtcbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICAgIGVycm9yKCdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiAnICsgJ1JlYWN0LkZyYWdtZW50IGNhbiBvbmx5IGhhdmUgYGtleWAgYW5kIGBjaGlsZHJlbmAgcHJvcHMuJywga2V5KTtcblxuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGpzeFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBrZXksIGlzU3RhdGljQ2hpbGRyZW4sIHNvdXJjZSwgc2VsZikge1xuICB7XG4gICAgdmFyIHZhbGlkVHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKTsgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gICAgaWYgKCF2YWxpZFR5cGUpIHtcbiAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKTtcblxuICAgICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCdSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfVxuXG4gICAgdmFyIGVsZW1lbnQgPSBqc3hERVYodHlwZSwgcHJvcHMsIGtleSwgc291cmNlLCBzZWxmKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgICAvLyBUT0RPOiBEcm9wIHRoaXMgd2hlbiB0aGVzZSBhcmUgbm8gbG9uZ2VyIGFsbG93ZWQgYXMgdGhlIHR5cGUgYXJndW1lbnQuXG5cbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9IC8vIFNraXAga2V5IHdhcm5pbmcgaWYgdGhlIHR5cGUgaXNuJ3QgdmFsaWQgc2luY2Ugb3VyIGtleSB2YWxpZGF0aW9uIGxvZ2ljXG4gICAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLlxuICAgIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgICAvLyAoUmVuZGVyaW5nIHdpbGwgdGhyb3cgd2l0aCBhIGhlbHBmdWwgbWVzc2FnZSBhbmQgYXMgc29vbiBhcyB0aGUgdHlwZSBpc1xuICAgIC8vIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcblxuXG4gICAgaWYgKHZhbGlkVHlwZSkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG5cbiAgICAgIGlmIChjaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChpc1N0YXRpY0NoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuW2ldLCB0eXBlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZShjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKCdSZWFjdC5qc3g6IFN0YXRpYyBjaGlsZHJlbiBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LiAnICsgJ1lvdSBhcmUgbGlrZWx5IGV4cGxpY2l0bHkgY2FsbGluZyBSZWFjdC5qc3hzIG9yIFJlYWN0LmpzeERFVi4gJyArICdVc2UgdGhlIEJhYmVsIHRyYW5zZm9ybSBpbnN0ZWFkLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbiwgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxufSAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGV4aXN0IHRvIHN0aWxsIGdldCBjaGlsZCB3YXJuaW5ncyBpbiBkZXZcbi8vIGV2ZW4gd2l0aCB0aGUgcHJvZCB0cmFuc2Zvcm0uIFRoaXMgbWVhbnMgdGhhdCBqc3hERVYgaXMgcHVyZWx5XG4vLyBvcHQtaW4gYmVoYXZpb3IgZm9yIGJldHRlciBtZXNzYWdlcyBidXQgdGhhdCB3ZSB3b24ndCBzdG9wXG4vLyBnaXZpbmcgeW91IHdhcm5pbmdzIGlmIHlvdSB1c2UgcHJvZHVjdGlvbiBhcGlzLlxuXG5mdW5jdGlvbiBqc3hXaXRoVmFsaWRhdGlvblN0YXRpYyh0eXBlLCBwcm9wcywga2V5KSB7XG4gIHtcbiAgICByZXR1cm4ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGpzeFdpdGhWYWxpZGF0aW9uRHluYW1pYyh0eXBlLCBwcm9wcywga2V5KSB7XG4gIHtcbiAgICByZXR1cm4ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgZmFsc2UpO1xuICB9XG59XG5cbnZhciBqc3ggPSAganN4V2l0aFZhbGlkYXRpb25EeW5hbWljIDsgLy8gd2UgbWF5IHdhbnQgdG8gc3BlY2lhbCBjYXNlIGpzeHMgaW50ZXJuYWxseSB0byB0YWtlIGFkdmFudGFnZSBvZiBzdGF0aWMgY2hpbGRyZW4uXG4vLyBmb3Igbm93IHdlIGNhbiBzaGlwIGlkZW50aWNhbCBwcm9kIGZ1bmN0aW9uc1xuXG52YXIganN4cyA9ICBqc3hXaXRoVmFsaWRhdGlvblN0YXRpYyA7XG5cbmV4cG9ydHMuRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuZXhwb3J0cy5qc3ggPSBqc3g7XG5leHBvcnRzLmpzeHMgPSBqc3hzO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react/cjs/react-jsx-runtime.development.js\n")); + +/***/ }), + +/***/ "./node_modules/react/cjs/react.development.js": +/*!*****************************************************!*\ + !*** ./node_modules/react/cjs/react.development.js ***! + \*****************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/* module decorator */ module = __webpack_require__.nmd(module);\n/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var ReactVersion = '18.2.0';\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\n/**\n * Keeps track of the current dispatcher.\n */\nvar ReactCurrentDispatcher = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\n/**\n * Keeps track of the current batch's configuration such as how long an update\n * should suspend for if it needs to.\n */\nvar ReactCurrentBatchConfig = {\n transition: null\n};\n\nvar ReactCurrentActQueue = {\n current: null,\n // Used to reproduce behavior of `batchedUpdates` in legacy mode.\n isBatchingLegacy: false,\n didScheduleLegacyUpdate: false\n};\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\nvar ReactDebugCurrentFrame = {};\nvar currentExtraStackFrame = null;\nfunction setExtraStackFrame(stack) {\n {\n currentExtraStackFrame = stack;\n }\n}\n\n{\n ReactDebugCurrentFrame.setExtraStackFrame = function (stack) {\n {\n currentExtraStackFrame = stack;\n }\n }; // Stack implementation injected by the current renderer.\n\n\n ReactDebugCurrentFrame.getCurrentStack = null;\n\n ReactDebugCurrentFrame.getStackAddendum = function () {\n var stack = ''; // Add an extra top frame while an element is being validated\n\n if (currentExtraStackFrame) {\n stack += currentExtraStackFrame;\n } // Delegate to the injected renderer-specific implementation\n\n\n var impl = ReactDebugCurrentFrame.getCurrentStack;\n\n if (impl) {\n stack += impl() || '';\n }\n\n return stack;\n };\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar ReactSharedInternals = {\n ReactCurrentDispatcher: ReactCurrentDispatcher,\n ReactCurrentBatchConfig: ReactCurrentBatchConfig,\n ReactCurrentOwner: ReactCurrentOwner\n};\n\n{\n ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame;\n ReactSharedInternals.ReactCurrentActQueue = ReactCurrentActQueue;\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n {\n {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n printWarning('warn', format, args);\n }\n }\n}\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n {\n var _constructor = publicInstance.constructor;\n var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n var warningKey = componentName + \".\" + callerName;\n\n if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n return;\n }\n\n error(\"Can't call %s on a component that is not yet mounted. \" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\n\n didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n }\n}\n/**\n * This is the abstract API for an update queue.\n */\n\n\nvar ReactNoopUpdateQueue = {\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance, callback, callerName) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} Name of the calling function in the public API.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n warnNoop(publicInstance, 'setState');\n }\n};\n\nvar assign = Object.assign;\n\nvar emptyObject = {};\n\n{\n Object.freeze(emptyObject);\n}\n/**\n * Base class helpers for the updating state of a component.\n */\n\n\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context; // If a component has string refs, we will assign a different object later.\n\n this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the\n // renderer.\n\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\n\nComponent.prototype.setState = function (partialState, callback) {\n if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) {\n throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.');\n }\n\n this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\n\n\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n\n\n{\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n\n var defineDeprecationWarning = function (methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n\n return undefined;\n }\n });\n };\n\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nfunction ComponentDummy() {}\n\nComponentDummy.prototype = Component.prototype;\n/**\n * Convenience component with default shallow equality check for sCU.\n */\n\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context; // If a component has string refs, we will assign a different object later.\n\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.\n\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = true;\n\n// an immutable object with a single mutable value\nfunction createRef() {\n var refObject = {\n current: null\n };\n\n {\n Object.seal(refObject);\n }\n\n return refObject;\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n var warnAboutAccessingKey = function () {\n {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n var warnAboutAccessingRef = function () {\n {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\n\nfunction createElement(type, config, children) {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n if (hasValidRef(config)) {\n ref = config.ref;\n\n {\n warnIfStringRefCannotBeAutoConverted(config);\n }\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n } // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n\n\n var childrenLength = arguments.length - 2;\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n\n {\n if (Object.freeze) {\n Object.freeze(childArray);\n }\n }\n\n props.children = childArray;\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n {\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n return newElement;\n}\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\n\nfunction cloneElement(element, config, children) {\n if (element === null || element === undefined) {\n throw new Error(\"React.cloneElement(...): The argument must be a React element, but you passed \" + element + \".\");\n }\n\n var propName; // Original props are copied\n\n var props = assign({}, element.props); // Reserved names are extracted\n\n var key = element.key;\n var ref = element.ref; // Self is preserved since the owner is preserved.\n\n var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n\n var source = element._source; // Owner will be preserved, unless ref is overridden\n\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n } // Remaining properties override existing props\n\n\n var defaultProps;\n\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n } // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n\n\n var childrenLength = arguments.length - 2;\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = key.replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n return '$' + escapedString;\n}\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\n\nvar didWarnAboutMaps = false;\nvar userProvidedKeyEscapeRegex = /\\/+/g;\n\nfunction escapeUserProvidedKey(text) {\n return text.replace(userProvidedKeyEscapeRegex, '$&/');\n}\n/**\n * Generate a key string that identifies a element within a set.\n *\n * @param {*} element A element that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\n\n\nfunction getElementKey(element, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (typeof element === 'object' && element !== null && element.key != null) {\n // Explicit key\n {\n checkKeyStringCoercion(element.key);\n }\n\n return escape('' + element.key);\n } // Implicit key determined by the index in the set\n\n\n return index.toString(36);\n}\n\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n var invokeCallback = false;\n\n if (children === null) {\n invokeCallback = true;\n } else {\n switch (type) {\n case 'string':\n case 'number':\n invokeCallback = true;\n break;\n\n case 'object':\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = true;\n }\n\n }\n }\n\n if (invokeCallback) {\n var _child = children;\n var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows:\n\n var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar;\n\n if (isArray(mappedChild)) {\n var escapedChildKey = '';\n\n if (childKey != null) {\n escapedChildKey = escapeUserProvidedKey(childKey) + '/';\n }\n\n mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) {\n return c;\n });\n } else if (mappedChild != null) {\n if (isValidElement(mappedChild)) {\n {\n // The `if` statement here prevents auto-disabling of the safe\n // coercion ESLint rule, so we must manually disable it below.\n // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key\n if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) {\n checkKeyStringCoercion(mappedChild.key);\n }\n }\n\n mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key\n mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number\n // eslint-disable-next-line react-internal/safe-string-coercion\n escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey);\n }\n\n array.push(mappedChild);\n }\n\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getElementKey(child, i);\n subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n\n if (typeof iteratorFn === 'function') {\n var iterableChildren = children;\n\n {\n // Warn about using Maps as children\n if (iteratorFn === iterableChildren.entries) {\n if (!didWarnAboutMaps) {\n warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');\n }\n\n didWarnAboutMaps = true;\n }\n }\n\n var iterator = iteratorFn.call(iterableChildren);\n var step;\n var ii = 0;\n\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getElementKey(child, ii++);\n subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);\n }\n } else if (type === 'object') {\n // eslint-disable-next-line react-internal/safe-string-coercion\n var childrenString = String(children);\n throw new Error(\"Objects are not valid as a React child (found: \" + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + \"). \" + 'If you meant to render a collection of children, use an array ' + 'instead.');\n }\n }\n\n return subtreeCount;\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n\n var result = [];\n var count = 0;\n mapIntoArray(children, result, '', '', function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\n\n\nfunction countChildren(children) {\n var n = 0;\n mapChildren(children, function () {\n n++; // Don't return anything\n });\n return n;\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n mapChildren(children, function () {\n forEachFunc.apply(this, arguments); // Don't return anything.\n }, forEachContext);\n}\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\n\n\nfunction toArray(children) {\n return mapChildren(children, function (child) {\n return child;\n }) || [];\n}\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\n\n\nfunction onlyChild(children) {\n if (!isValidElement(children)) {\n throw new Error('React.Children.only expected to receive a single React element child.');\n }\n\n return children;\n}\n\nfunction createContext(defaultValue) {\n // TODO: Second argument used to be an optional `calculateChangedBits`\n // function. Warn to reserve for future use?\n var context = {\n $$typeof: REACT_CONTEXT_TYPE,\n // As a workaround to support multiple concurrent renderers, we categorize\n // some renderers as primary and others as secondary. We only expect\n // there to be two concurrent renderers at most: React Native (primary) and\n // Fabric (secondary); React DOM (primary) and React ART (secondary).\n // Secondary renderers store their context values on separate fields.\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n // Used to track how many concurrent renderers this context currently\n // supports within in a single renderer. Such as parallel server rendering.\n _threadCount: 0,\n // These are circular\n Provider: null,\n Consumer: null,\n // Add these to use same hidden class in VM as ServerContext\n _defaultValue: null,\n _globalName: null\n };\n context.Provider = {\n $$typeof: REACT_PROVIDER_TYPE,\n _context: context\n };\n var hasWarnedAboutUsingNestedContextConsumers = false;\n var hasWarnedAboutUsingConsumerProvider = false;\n var hasWarnedAboutDisplayNameOnConsumer = false;\n\n {\n // A separate object, but proxies back to the original context object for\n // backwards compatibility. It has a different $$typeof, so we can properly\n // warn for the incorrect usage of Context as a Consumer.\n var Consumer = {\n $$typeof: REACT_CONTEXT_TYPE,\n _context: context\n }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here\n\n Object.defineProperties(Consumer, {\n Provider: {\n get: function () {\n if (!hasWarnedAboutUsingConsumerProvider) {\n hasWarnedAboutUsingConsumerProvider = true;\n\n error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\n }\n\n return context.Provider;\n },\n set: function (_Provider) {\n context.Provider = _Provider;\n }\n },\n _currentValue: {\n get: function () {\n return context._currentValue;\n },\n set: function (_currentValue) {\n context._currentValue = _currentValue;\n }\n },\n _currentValue2: {\n get: function () {\n return context._currentValue2;\n },\n set: function (_currentValue2) {\n context._currentValue2 = _currentValue2;\n }\n },\n _threadCount: {\n get: function () {\n return context._threadCount;\n },\n set: function (_threadCount) {\n context._threadCount = _threadCount;\n }\n },\n Consumer: {\n get: function () {\n if (!hasWarnedAboutUsingNestedContextConsumers) {\n hasWarnedAboutUsingNestedContextConsumers = true;\n\n error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n\n return context.Consumer;\n }\n },\n displayName: {\n get: function () {\n return context.displayName;\n },\n set: function (displayName) {\n if (!hasWarnedAboutDisplayNameOnConsumer) {\n warn('Setting `displayName` on Context.Consumer has no effect. ' + \"You should set it directly on the context with Context.displayName = '%s'.\", displayName);\n\n hasWarnedAboutDisplayNameOnConsumer = true;\n }\n }\n }\n }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\n\n context.Consumer = Consumer;\n }\n\n {\n context._currentRenderer = null;\n context._currentRenderer2 = null;\n }\n\n return context;\n}\n\nvar Uninitialized = -1;\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\n\nfunction lazyInitializer(payload) {\n if (payload._status === Uninitialized) {\n var ctor = payload._result;\n var thenable = ctor(); // Transition to the next state.\n // This might throw either because it's missing or throws. If so, we treat it\n // as still uninitialized and try again next time. Which is the same as what\n // happens if the ctor or any wrappers processing the ctor throws. This might\n // end up fixing it if the resolution was a concurrency bug.\n\n thenable.then(function (moduleObject) {\n if (payload._status === Pending || payload._status === Uninitialized) {\n // Transition to the next state.\n var resolved = payload;\n resolved._status = Resolved;\n resolved._result = moduleObject;\n }\n }, function (error) {\n if (payload._status === Pending || payload._status === Uninitialized) {\n // Transition to the next state.\n var rejected = payload;\n rejected._status = Rejected;\n rejected._result = error;\n }\n });\n\n if (payload._status === Uninitialized) {\n // In case, we're still uninitialized, then we're waiting for the thenable\n // to resolve. Set it as pending in the meantime.\n var pending = payload;\n pending._status = Pending;\n pending._result = thenable;\n }\n }\n\n if (payload._status === Resolved) {\n var moduleObject = payload._result;\n\n {\n if (moduleObject === undefined) {\n error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n ' + // Break up imports to avoid accidentally parsing them as dependencies.\n 'const MyComponent = lazy(() => imp' + \"ort('./MyComponent'))\\n\\n\" + 'Did you accidentally put curly braces around the import?', moduleObject);\n }\n }\n\n {\n if (!('default' in moduleObject)) {\n error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n ' + // Break up imports to avoid accidentally parsing them as dependencies.\n 'const MyComponent = lazy(() => imp' + \"ort('./MyComponent'))\", moduleObject);\n }\n }\n\n return moduleObject.default;\n } else {\n throw payload._result;\n }\n}\n\nfunction lazy(ctor) {\n var payload = {\n // We use these fields to store the result.\n _status: Uninitialized,\n _result: ctor\n };\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _payload: payload,\n _init: lazyInitializer\n };\n\n {\n // In production, this would just set it on the object.\n var defaultProps;\n var propTypes; // $FlowFixMe\n\n Object.defineProperties(lazyType, {\n defaultProps: {\n configurable: true,\n get: function () {\n return defaultProps;\n },\n set: function (newDefaultProps) {\n error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n defaultProps = newDefaultProps; // Match production behavior more closely:\n // $FlowFixMe\n\n Object.defineProperty(lazyType, 'defaultProps', {\n enumerable: true\n });\n }\n },\n propTypes: {\n configurable: true,\n get: function () {\n return propTypes;\n },\n set: function (newPropTypes) {\n error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n propTypes = newPropTypes; // Match production behavior more closely:\n // $FlowFixMe\n\n Object.defineProperty(lazyType, 'propTypes', {\n enumerable: true\n });\n }\n }\n });\n }\n\n return lazyType;\n}\n\nfunction forwardRef(render) {\n {\n if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n } else if (typeof render !== 'function') {\n error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\n } else {\n if (render.length !== 0 && render.length !== 2) {\n error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');\n }\n }\n\n if (render != null) {\n if (render.defaultProps != null || render.propTypes != null) {\n error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');\n }\n }\n }\n\n var elementType = {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: render\n };\n\n {\n var ownName;\n Object.defineProperty(elementType, 'displayName', {\n enumerable: false,\n configurable: true,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name; // The inner component shouldn't inherit this display name in most cases,\n // because the component may be used elsewhere.\n // But it's nice for anonymous functions to inherit the name,\n // so that our component-stack generation logic will display their frames.\n // An anonymous function generally suggests a pattern like:\n // React.forwardRef((props, ref) => {...});\n // This kind of inner function is not used elsewhere so the side effect is okay.\n\n if (!render.name && !render.displayName) {\n render.displayName = name;\n }\n }\n });\n }\n\n return elementType;\n}\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction memo(type, compare) {\n {\n if (!isValidElementType(type)) {\n error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\n }\n }\n\n var elementType = {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: compare === undefined ? null : compare\n };\n\n {\n var ownName;\n Object.defineProperty(elementType, 'displayName', {\n enumerable: false,\n configurable: true,\n get: function () {\n return ownName;\n },\n set: function (name) {\n ownName = name; // The inner component shouldn't inherit this display name in most cases,\n // because the component may be used elsewhere.\n // But it's nice for anonymous functions to inherit the name,\n // so that our component-stack generation logic will display their frames.\n // An anonymous function generally suggests a pattern like:\n // React.memo((props) => {...});\n // This kind of inner function is not used elsewhere so the side effect is okay.\n\n if (!type.name && !type.displayName) {\n type.displayName = name;\n }\n }\n });\n }\n\n return elementType;\n}\n\nfunction resolveDispatcher() {\n var dispatcher = ReactCurrentDispatcher.current;\n\n {\n if (dispatcher === null) {\n error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\\n' + '2. You might be breaking the Rules of Hooks\\n' + '3. You might have more than one copy of React in the same app\\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');\n }\n } // Will result in a null access error if accessed outside render phase. We\n // intentionally don't throw our own error because this is in a hot path.\n // Also helps ensure this is inlined.\n\n\n return dispatcher;\n}\nfunction useContext(Context) {\n var dispatcher = resolveDispatcher();\n\n {\n // TODO: add a more generic warning for invalid values.\n if (Context._context !== undefined) {\n var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs\n // and nobody should be using this in existing code.\n\n if (realContext.Consumer === Context) {\n error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\n } else if (realContext.Provider === Context) {\n error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n }\n }\n }\n\n return dispatcher.useContext(Context);\n}\nfunction useState(initialState) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useState(initialState);\n}\nfunction useReducer(reducer, initialArg, init) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useReducer(reducer, initialArg, init);\n}\nfunction useRef(initialValue) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useRef(initialValue);\n}\nfunction useEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useEffect(create, deps);\n}\nfunction useInsertionEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useInsertionEffect(create, deps);\n}\nfunction useLayoutEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useLayoutEffect(create, deps);\n}\nfunction useCallback(callback, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useCallback(callback, deps);\n}\nfunction useMemo(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useMemo(create, deps);\n}\nfunction useImperativeHandle(ref, create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useImperativeHandle(ref, create, deps);\n}\nfunction useDebugValue(value, formatterFn) {\n {\n var dispatcher = resolveDispatcher();\n return dispatcher.useDebugValue(value, formatterFn);\n }\n}\nfunction useTransition() {\n var dispatcher = resolveDispatcher();\n return dispatcher.useTransition();\n}\nfunction useDeferredValue(value) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useDeferredValue(value);\n}\nfunction useId() {\n var dispatcher = resolveDispatcher();\n return dispatcher.useId();\n}\nfunction useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher$1.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher$1.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n setExtraStackFrame(stack);\n } else {\n setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n}\n\nfunction getSourceInfoErrorAddendumForProps(elementProps) {\n if (elementProps !== null && elementProps !== undefined) {\n return getSourceInfoErrorAddendum(elementProps.__source);\n }\n\n return '';\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n {\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\nfunction createElementWithValidation(type, props, children) {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendumForProps(props);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n {\n error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n }\n\n var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n}\nvar didWarnAboutDeprecatedCreateFactory = false;\nfunction createFactoryWithValidation(type) {\n var validatedFactory = createElementWithValidation.bind(null, type);\n validatedFactory.type = type;\n\n {\n if (!didWarnAboutDeprecatedCreateFactory) {\n didWarnAboutDeprecatedCreateFactory = true;\n\n warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');\n } // Legacy hook: remove it\n\n\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function () {\n warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n\n return validatedFactory;\n}\nfunction cloneElementWithValidation(element, props, children) {\n var newElement = cloneElement.apply(this, arguments);\n\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n\n validatePropTypes(newElement);\n return newElement;\n}\n\nfunction startTransition(scope, options) {\n var prevTransition = ReactCurrentBatchConfig.transition;\n ReactCurrentBatchConfig.transition = {};\n var currentTransition = ReactCurrentBatchConfig.transition;\n\n {\n ReactCurrentBatchConfig.transition._updatedFibers = new Set();\n }\n\n try {\n scope();\n } finally {\n ReactCurrentBatchConfig.transition = prevTransition;\n\n {\n if (prevTransition === null && currentTransition._updatedFibers) {\n var updatedFibersCount = currentTransition._updatedFibers.size;\n\n if (updatedFibersCount > 10) {\n warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');\n }\n\n currentTransition._updatedFibers.clear();\n }\n }\n }\n}\n\nvar didWarnAboutMessageChannel = false;\nvar enqueueTaskImpl = null;\nfunction enqueueTask(task) {\n if (enqueueTaskImpl === null) {\n try {\n // read require off the module object to get around the bundlers.\n // we don't want them to detect a require and bundle a Node polyfill.\n var requireString = ('require' + Math.random()).slice(0, 7);\n var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's\n // version of setImmediate, bypassing fake timers if any.\n\n enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate;\n } catch (_err) {\n // we're in a browser\n // we can't use regular timers because they may still be faked\n // so we try MessageChannel+postMessage instead\n enqueueTaskImpl = function (callback) {\n {\n if (didWarnAboutMessageChannel === false) {\n didWarnAboutMessageChannel = true;\n\n if (typeof MessageChannel === 'undefined') {\n error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.');\n }\n }\n }\n\n var channel = new MessageChannel();\n channel.port1.onmessage = callback;\n channel.port2.postMessage(undefined);\n };\n }\n }\n\n return enqueueTaskImpl(task);\n}\n\nvar actScopeDepth = 0;\nvar didWarnNoAwaitAct = false;\nfunction act(callback) {\n {\n // `act` calls can be nested, so we track the depth. This represents the\n // number of `act` scopes on the stack.\n var prevActScopeDepth = actScopeDepth;\n actScopeDepth++;\n\n if (ReactCurrentActQueue.current === null) {\n // This is the outermost `act` scope. Initialize the queue. The reconciler\n // will detect the queue and use it instead of Scheduler.\n ReactCurrentActQueue.current = [];\n }\n\n var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy;\n var result;\n\n try {\n // Used to reproduce behavior of `batchedUpdates` in legacy mode. Only\n // set to `true` while the given callback is executed, not for updates\n // triggered during an async event, because this is how the legacy\n // implementation of `act` behaved.\n ReactCurrentActQueue.isBatchingLegacy = true;\n result = callback(); // Replicate behavior of original `act` implementation in legacy mode,\n // which flushed updates immediately after the scope function exits, even\n // if it's an async function.\n\n if (!prevIsBatchingLegacy && ReactCurrentActQueue.didScheduleLegacyUpdate) {\n var queue = ReactCurrentActQueue.current;\n\n if (queue !== null) {\n ReactCurrentActQueue.didScheduleLegacyUpdate = false;\n flushActQueue(queue);\n }\n }\n } catch (error) {\n popActScope(prevActScopeDepth);\n throw error;\n } finally {\n ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy;\n }\n\n if (result !== null && typeof result === 'object' && typeof result.then === 'function') {\n var thenableResult = result; // The callback is an async function (i.e. returned a promise). Wait\n // for it to resolve before exiting the current scope.\n\n var wasAwaited = false;\n var thenable = {\n then: function (resolve, reject) {\n wasAwaited = true;\n thenableResult.then(function (returnValue) {\n popActScope(prevActScopeDepth);\n\n if (actScopeDepth === 0) {\n // We've exited the outermost act scope. Recursively flush the\n // queue until there's no remaining work.\n recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n } else {\n resolve(returnValue);\n }\n }, function (error) {\n // The callback threw an error.\n popActScope(prevActScopeDepth);\n reject(error);\n });\n }\n };\n\n {\n if (!didWarnNoAwaitAct && typeof Promise !== 'undefined') {\n // eslint-disable-next-line no-undef\n Promise.resolve().then(function () {}).then(function () {\n if (!wasAwaited) {\n didWarnNoAwaitAct = true;\n\n error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);');\n }\n });\n }\n }\n\n return thenable;\n } else {\n var returnValue = result; // The callback is not an async function. Exit the current scope\n // immediately, without awaiting.\n\n popActScope(prevActScopeDepth);\n\n if (actScopeDepth === 0) {\n // Exiting the outermost act scope. Flush the queue.\n var _queue = ReactCurrentActQueue.current;\n\n if (_queue !== null) {\n flushActQueue(_queue);\n ReactCurrentActQueue.current = null;\n } // Return a thenable. If the user awaits it, we'll flush again in\n // case additional work was scheduled by a microtask.\n\n\n var _thenable = {\n then: function (resolve, reject) {\n // Confirm we haven't re-entered another `act` scope, in case\n // the user does something weird like await the thenable\n // multiple times.\n if (ReactCurrentActQueue.current === null) {\n // Recursively flush the queue until there's no remaining work.\n ReactCurrentActQueue.current = [];\n recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n } else {\n resolve(returnValue);\n }\n }\n };\n return _thenable;\n } else {\n // Since we're inside a nested `act` scope, the returned thenable\n // immediately resolves. The outer scope will flush the queue.\n var _thenable2 = {\n then: function (resolve, reject) {\n resolve(returnValue);\n }\n };\n return _thenable2;\n }\n }\n }\n}\n\nfunction popActScope(prevActScopeDepth) {\n {\n if (prevActScopeDepth !== actScopeDepth - 1) {\n error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. ');\n }\n\n actScopeDepth = prevActScopeDepth;\n }\n}\n\nfunction recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n {\n var queue = ReactCurrentActQueue.current;\n\n if (queue !== null) {\n try {\n flushActQueue(queue);\n enqueueTask(function () {\n if (queue.length === 0) {\n // No additional work was scheduled. Finish.\n ReactCurrentActQueue.current = null;\n resolve(returnValue);\n } else {\n // Keep flushing work until there's none left.\n recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n }\n });\n } catch (error) {\n reject(error);\n }\n } else {\n resolve(returnValue);\n }\n }\n}\n\nvar isFlushing = false;\n\nfunction flushActQueue(queue) {\n {\n if (!isFlushing) {\n // Prevent re-entrance.\n isFlushing = true;\n var i = 0;\n\n try {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n\n do {\n callback = callback(true);\n } while (callback !== null);\n }\n\n queue.length = 0;\n } catch (error) {\n // If something throws, leave the remaining callbacks on the queue.\n queue = queue.slice(i + 1);\n throw error;\n } finally {\n isFlushing = false;\n }\n }\n }\n}\n\nvar createElement$1 = createElementWithValidation ;\nvar cloneElement$1 = cloneElementWithValidation ;\nvar createFactory = createFactoryWithValidation ;\nvar Children = {\n map: mapChildren,\n forEach: forEachChildren,\n count: countChildren,\n toArray: toArray,\n only: onlyChild\n};\n\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;\nexports.cloneElement = cloneElement$1;\nexports.createContext = createContext;\nexports.createElement = createElement$1;\nexports.createFactory = createFactory;\nexports.createRef = createRef;\nexports.forwardRef = forwardRef;\nexports.isValidElement = isValidElement;\nexports.lazy = lazy;\nexports.memo = memo;\nexports.startTransition = startTransition;\nexports.unstable_act = act;\nexports.useCallback = useCallback;\nexports.useContext = useContext;\nexports.useDebugValue = useDebugValue;\nexports.useDeferredValue = useDeferredValue;\nexports.useEffect = useEffect;\nexports.useId = useId;\nexports.useImperativeHandle = useImperativeHandle;\nexports.useInsertionEffect = useInsertionEffect;\nexports.useLayoutEffect = useLayoutEffect;\nexports.useMemo = useMemo;\nexports.useReducer = useReducer;\nexports.useRef = useRef;\nexports.useState = useState;\nexports.useSyncExternalStore = useSyncExternalStore;\nexports.useTransition = useTransition;\nexports.version = ReactVersion;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBLG9CQUFvQjs7QUFFcEI7QUFDQTtBQUNBLE1BQU07OztBQUdOOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsNEJBQTRCO0FBQzVCO0FBQ0EscUNBQXFDOztBQUVyQyxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkZBQTZGLGFBQWE7QUFDMUc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxlQUFlO0FBQ2hIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVIsa0RBQWtEO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhNQUE4TTs7QUFFOU07QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFlBQVk7QUFDekIsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCLGFBQWEsV0FBVztBQUN4QixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCLGFBQWEsUUFBUTtBQUNyQixhQUFhLFdBQVc7QUFDeEIsYUFBYSxTQUFTO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFlBQVk7QUFDekIsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsV0FBVztBQUN4QixhQUFhLFNBQVM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUIsMkJBQTJCO0FBQzNCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUJBQWlCO0FBQzVCO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEI7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEI7O0FBRTFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9EQUFvRDs7QUFFcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkLFdBQVcsZUFBZTtBQUMxQixXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRztBQUNSOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUVBQXFFOztBQUVyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBLG9CQUFvQixvQkFBb0I7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQjs7QUFFaEIsdUJBQXVCLGtCQUFrQjs7QUFFekM7QUFDQSx5QkFBeUI7O0FBRXpCLDRCQUE0QjtBQUM1QjtBQUNBOztBQUVBLGdDQUFnQzs7QUFFaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7O0FBR047O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUEsb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixZQUFZLFNBQVM7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLFFBQVE7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxRQUFRO0FBQ25CLFlBQVk7QUFDWjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCOztBQUVBO0FBQ0Esb0JBQW9CLHFCQUFxQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLHFJQUFxSSx5Q0FBeUM7QUFDOUs7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLElBQUk7QUFDZixXQUFXLGtCQUFrQjtBQUM3QixXQUFXLEdBQUc7QUFDZCxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxJQUFJO0FBQ2YsWUFBWSxRQUFRO0FBQ3BCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsSUFBSTtBQUNmLFdBQVcsa0JBQWtCO0FBQzdCLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFlBQVksY0FBYztBQUMxQjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1COztBQUVuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLElBQUk7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLElBQUk7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQzs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0EsU0FBUztBQUNULHVCQUF1QjtBQUN2QjtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQSxTQUFTO0FBQ1Qsd0JBQXdCO0FBQ3hCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCxpQ0FBaUM7QUFDakM7QUFDQSxTQUFTO0FBQ1QsMkJBQTJCO0FBQzNCO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkRBQTJEOztBQUUzRDtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEO0FBQzNEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQSxnRkFBZ0Y7QUFDaEY7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOzs7QUFHbEI7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwySEFBMkg7QUFDM0g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxvRUFBb0U7O0FBRXBFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCLFdBQVcsR0FBRztBQUNkOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwyREFBMkQ7QUFDM0Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsV0FBVztBQUN0QixXQUFXLEdBQUc7QUFDZDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6Qjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLDRDQUE0Qzs7QUFFNUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6Qjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNEQUFzRDtBQUN0RDs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLG9CQUFvQixzQkFBc0I7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQixzQkFBc0I7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQztBQUNBOztBQUVBLDBPQUEwTztBQUMxTztBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOLGdDQUFnQztBQUNoQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCO0FBQ2hCLGlCQUFpQjtBQUNqQixnQkFBZ0I7QUFDaEIsZ0JBQWdCO0FBQ2hCLHFCQUFxQjtBQUNyQixrQkFBa0I7QUFDbEIsZ0JBQWdCO0FBQ2hCLDBEQUEwRDtBQUMxRCxvQkFBb0I7QUFDcEIscUJBQXFCO0FBQ3JCLHFCQUFxQjtBQUNyQixxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLGtCQUFrQjtBQUNsQixzQkFBc0I7QUFDdEIsWUFBWTtBQUNaLFlBQVk7QUFDWix1QkFBdUI7QUFDdkIsb0JBQW9CO0FBQ3BCLG1CQUFtQjtBQUNuQixrQkFBa0I7QUFDbEIscUJBQXFCO0FBQ3JCLHdCQUF3QjtBQUN4QixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLDJCQUEyQjtBQUMzQiwwQkFBMEI7QUFDMUIsdUJBQXVCO0FBQ3ZCLGVBQWU7QUFDZixrQkFBa0I7QUFDbEIsY0FBYztBQUNkLGdCQUFnQjtBQUNoQiw0QkFBNEI7QUFDNUIscUJBQXFCO0FBQ3JCLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcz8xYjdlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcblxuICAgICAgICAgICd1c2Ugc3RyaWN0JztcblxuLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuaWYgKFxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJyAmJlxuICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydCA9PT1cbiAgICAnZnVuY3Rpb24nXG4pIHtcbiAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChuZXcgRXJyb3IoKSk7XG59XG4gICAgICAgICAgdmFyIFJlYWN0VmVyc2lvbiA9ICcxOC4yLjAnO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKTtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IGRpc3BhdGNoZXIuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgYmF0Y2gncyBjb25maWd1cmF0aW9uIHN1Y2ggYXMgaG93IGxvbmcgYW4gdXBkYXRlXG4gKiBzaG91bGQgc3VzcGVuZCBmb3IgaWYgaXQgbmVlZHMgdG8uXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IHtcbiAgdHJhbnNpdGlvbjogbnVsbFxufTtcblxudmFyIFJlYWN0Q3VycmVudEFjdFF1ZXVlID0ge1xuICBjdXJyZW50OiBudWxsLFxuICAvLyBVc2VkIHRvIHJlcHJvZHVjZSBiZWhhdmlvciBvZiBgYmF0Y2hlZFVwZGF0ZXNgIGluIGxlZ2FjeSBtb2RlLlxuICBpc0JhdGNoaW5nTGVnYWN5OiBmYWxzZSxcbiAgZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGU6IGZhbHNlXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAge1xuICAgICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICAgIH1cbiAgfTsgLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gaW5qZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIuXG5cblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuXG4gICAgaWYgKGltcGwpIHtcbiAgICAgIHN0YWNrICs9IGltcGwoKSB8fCAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG52YXIgZW5hYmxlQ2FjaGVFbGVtZW50ID0gZmFsc2U7XG52YXIgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgPSBmYWxzZTsgLy8gTm8ga25vd24gYnVncywgYnV0IG5lZWRzIHBlcmZvcm1hbmNlIHRlc3RpbmdcblxudmFyIGVuYWJsZUxlZ2FjeUhpZGRlbiA9IGZhbHNlOyAvLyBFbmFibGVzIHVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrIGZlYXR1cmUgaW4gRmliZXJcbi8vIHN0dWZmLiBJbnRlbmRlZCB0byBlbmFibGUgUmVhY3QgY29yZSBtZW1iZXJzIHRvIG1vcmUgZWFzaWx5IGRlYnVnIHNjaGVkdWxpbmdcbi8vIGlzc3VlcyBpbiBERVYgYnVpbGRzLlxuXG52YXIgZW5hYmxlRGVidWdUcmFjaW5nID0gZmFsc2U7IC8vIFRyYWNrIHdoaWNoIEZpYmVyKHMpIHNjaGVkdWxlIHJlbmRlciB3b3JrLlxuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXI6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxcbiAgUmVhY3RDdXJyZW50T3duZXI6IFJlYWN0Q3VycmVudE93bmVyXG59O1xuXG57XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRBY3RRdWV1ZSA9IFJlYWN0Q3VycmVudEFjdFF1ZXVlO1xufVxuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cblxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0ge307XG5cbmZ1bmN0aW9uIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gIHtcbiAgICB2YXIgX2NvbnN0cnVjdG9yID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3I7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBfY29uc3RydWN0b3IgJiYgKF9jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCBfY29uc3RydWN0b3IubmFtZSkgfHwgJ1JlYWN0Q2xhc3MnO1xuICAgIHZhciB3YXJuaW5nS2V5ID0gY29tcG9uZW50TmFtZSArIFwiLlwiICsgY2FsbGVyTmFtZTtcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlcnJvcihcIkNhbid0IGNhbGwgJXMgb24gYSBjb21wb25lbnQgdGhhdCBpcyBub3QgeWV0IG1vdW50ZWQuIFwiICsgJ1RoaXMgaXMgYSBuby1vcCwgYnV0IGl0IG1pZ2h0IGluZGljYXRlIGEgYnVnIGluIHlvdXIgYXBwbGljYXRpb24uICcgKyAnSW5zdGVhZCwgYXNzaWduIHRvIGB0aGlzLnN0YXRlYCBkaXJlY3RseSBvciBkZWZpbmUgYSBgc3RhdGUgPSB7fTtgICcgKyAnY2xhc3MgcHJvcGVydHkgd2l0aCB0aGUgZGVzaXJlZCBzdGF0ZSBpbiB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxlck5hbWUsIGNvbXBvbmVudE5hbWUpO1xuXG4gICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldID0gdHJ1ZTtcbiAgfVxufVxuLyoqXG4gKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBBUEkgZm9yIGFuIHVwZGF0ZSBxdWV1ZS5cbiAqL1xuXG5cbnZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IHtcbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2Ugd2Ugd2FudCB0byB0ZXN0LlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByb3RlY3RlZFxuICAgKiBAZmluYWxcbiAgICovXG4gIGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gICAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gICAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gICAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ2ZvcmNlVXBkYXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjb21wbGV0ZVN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAncmVwbGFjZVN0YXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgYSBzdWJzZXQgb2YgdGhlIHN0YXRlLiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2UgX3BlbmRpbmdTdGF0ZSBpc1xuICAgKiBpbnRlcm5hbC4gVGhpcyBwcm92aWRlcyBhIG1lcmdpbmcgc3RyYXRlZ3kgdGhhdCBpcyBub3QgYXZhaWxhYmxlIHRvIGRlZXBcbiAgICogcHJvcGVydGllcyB3aGljaCBpcyBjb25mdXNpbmcuIFRPRE86IEV4cG9zZSBwZW5kaW5nU3RhdGUgb3IgZG9uJ3QgdXNlIGl0XG4gICAqIGR1cmluZyB0aGUgbWVyZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFydGlhbFN0YXRlIE5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBzdGF0ZS5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBOYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuICB9XG59O1xuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgcGFydGlhbFN0YXRlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGFydGlhbFN0YXRlICE9PSAnZnVuY3Rpb24nICYmIHBhcnRpYWxTdGF0ZSAhPSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRTdGF0ZSguLi4pOiB0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhICcgKyAnZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLicpO1xuICB9XG5cbiAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbn07XG4vKipcbiAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICpcbiAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICpcbiAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gKlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLCBjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG59O1xuLyoqXG4gKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlXG4gKiB3ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpc1xuICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0J3MgYWNjZXNzZWQuXG4gKi9cblxuXG57XG4gIHZhciBkZXByZWNhdGVkQVBJcyA9IHtcbiAgICBpc01vdW50ZWQ6IFsnaXNNb3VudGVkJywgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgKyAnY29tcG9uZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuJ10sXG4gICAgcmVwbGFjZVN0YXRlOiBbJ3JlcGxhY2VTdGF0ZScsICdSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0YXRlIGluc3RlYWQgKHNlZSAnICsgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNikuJ11cbiAgfTtcblxuICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzJywgaW5mb1swXSwgaW5mb1sxXSk7XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBmb3IgKHZhciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHtcbiAgICBpZiAoZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSkge1xuICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIENvbXBvbmVudER1bW15KCkge31cblxuQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbi8qKlxuICogQ29udmVuaWVuY2UgY29tcG9uZW50IHdpdGggZGVmYXVsdCBzaGFsbG93IGVxdWFsaXR5IGNoZWNrIGZvciBzQ1UuXG4gKi9cblxuZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG52YXIgcHVyZUNvbXBvbmVudFByb3RvdHlwZSA9IFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7XG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHVyZUNvbXBvbmVudDsgLy8gQXZvaWQgYW4gZXh0cmEgcHJvdG90eXBlIGp1bXAgZm9yIHRoZXNlIG1ldGhvZHMuXG5cbmFzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXG4vLyBhbiBpbW11dGFibGUgb2JqZWN0IHdpdGggYSBzaW5nbGUgbXV0YWJsZSB2YWx1ZVxuZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuICB2YXIgcmVmT2JqZWN0ID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcblxuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmT2JqZWN0KTtcbiAgfVxuXG4gIHJldHVybiByZWZPYmplY3Q7XG59XG5cbnZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblxuZnVuY3Rpb24gaXNBcnJheShhKSB7XG4gIHJldHVybiBpc0FycmF5SW1wbChhKTtcbn1cblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWUgb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnO1xuICAgIHJldHVybiB0eXBlO1xuICB9XG59IC8vICRGbG93Rml4TWUgb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5cblxuZnVuY3Rpb24gd2lsbENvZXJjaW9uVGhyb3codmFsdWUpIHtcbiAge1xuICAgIHRyeSB7XG4gICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgLy8gSWYgeW91IGVuZGVkIHVwIGhlcmUgYnkgZm9sbG93aW5nIGFuIGV4Y2VwdGlvbiBjYWxsIHN0YWNrLCBoZXJlJ3Mgd2hhdCdzXG4gIC8vIGhhcHBlbmVkOiB5b3Ugc3VwcGxpZWQgYW4gb2JqZWN0IG9yIHN5bWJvbCB2YWx1ZSB0byBSZWFjdCAoYXMgYSBwcm9wLCBrZXksXG4gIC8vIERPTSBhdHRyaWJ1dGUsIENTUyBwcm9wZXJ0eSwgc3RyaW5nIHJlZiwgZXRjLikgYW5kIHdoZW4gUmVhY3QgdHJpZWQgdG9cbiAgLy8gY29lcmNlIGl0IHRvIGEgc3RyaW5nIHVzaW5nIGAnJyArIHZhbHVlYCwgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uXG4gIC8vXG4gIC8vIFRoZSBtb3N0IGNvbW1vbiB0eXBlcyB0aGF0IHdpbGwgY2F1c2UgdGhpcyBleGNlcHRpb24gYXJlIGBTeW1ib2xgIGluc3RhbmNlc1xuICAvLyBhbmQgVGVtcG9yYWwgb2JqZWN0cyBsaWtlIGBUZW1wb3JhbC5JbnN0YW50YC4gQnV0IGFueSBvYmplY3QgdGhhdCBoYXMgYVxuICAvLyBgdmFsdWVPZmAgb3IgYFtTeW1ib2wudG9QcmltaXRpdmVdYCBtZXRob2QgdGhhdCB0aHJvd3Mgd2lsbCBhbHNvIGNhdXNlIHRoaXNcbiAgLy8gZXhjZXB0aW9uLiAoTGlicmFyeSBhdXRob3JzIGRvIHRoaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIHVzaW5nIGJ1aWx0LWluXG4gIC8vIG51bWVyaWMgb3BlcmF0b3JzIGxpa2UgYCtgIG9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGxpa2UgYD49YCBiZWNhdXNlIGN1c3RvbVxuICAvLyBtZXRob2RzIGFyZSBuZWVkZWQgdG8gcGVyZm9ybSBhY2N1cmF0ZSBhcml0aG1ldGljIG9yIGNvbXBhcmlzb24uKVxuICAvL1xuICAvLyBUbyBmaXggdGhlIHByb2JsZW0sIGNvZXJjZSB0aGlzIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXG4gIC8vIHBhc3NpbmcgaXQgdG8gUmVhY3QuIFRoZSBtb3N0IHJlbGlhYmxlIHdheSBpcyB1c3VhbGx5IGBTdHJpbmcodmFsdWUpYC5cbiAgLy9cbiAgLy8gVG8gZmluZCB3aGljaCB2YWx1ZSBpcyB0aHJvd2luZywgY2hlY2sgdGhlIGJyb3dzZXIgb3IgZGVidWdnZXIgY29uc29sZS5cbiAgLy8gQmVmb3JlIHRoaXMgZXhjZXB0aW9uIHdhcyB0aHJvd24sIHRoZXJlIHNob3VsZCBiZSBgY29uc29sZS5lcnJvcmAgb3V0cHV0XG4gIC8vIHRoYXQgc2hvd3MgdGhlIHR5cGUgKFN5bWJvbCwgVGVtcG9yYWwuUGxhaW5EYXRlLCBldGMuKSB0aGF0IGNhdXNlZCB0aGVcbiAgLy8gcHJvYmxlbSBhbmQgaG93IHRoYXQgdHlwZSB3YXMgdXNlZDoga2V5LCBhdHJyaWJ1dGUsIGlucHV0IHZhbHVlIHByb3AsIGV0Yy5cbiAgLy8gSW4gbW9zdCBjYXNlcywgdGhpcyBjb25zb2xlIG91dHB1dCBhbHNvIHNob3dzIHRoZSBjb21wb25lbnQgYW5kIGl0c1xuICAvLyBhbmNlc3RvciBjb21wb25lbnRzIHdoZXJlIHRoZSBleGNlcHRpb24gaGFwcGVuZWQuXG4gIC8vXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAge1xuICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuJyArICcgVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGRpc3BsYXlOYW1lID0gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lO1xuXG4gIGlmIChkaXNwbGF5TmFtZSkge1xuICAgIHJldHVybiBkaXNwbGF5TmFtZTtcbiAgfVxuXG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWU7XG59IC8vIEtlZXAgaW4gc3luYyB3aXRoIHJlYWN0LXJlY29uY2lsZXIvZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlclxuXG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufSAvLyBOb3RlIHRoYXQgdGhlIHJlY29uY2lsZXIgcGFja2FnZSBzaG91bGQgZ2VuZXJhbGx5IHByZWZlciB0byB1c2UgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcigpIGluc3RlYWQuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcblxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgdmFyIHByb3ZpZGVyID0gdHlwZTtcbiAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRXcmFwcGVkTmFtZSh0eXBlLCB0eXBlLnJlbmRlciwgJ0ZvcndhcmRSZWYnKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIHZhciBvdXRlck5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGw7XG5cbiAgICAgICAgaWYgKG91dGVyTmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBvdXRlck5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ01lbW8nO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdDb21wb25lbnQgXCIlc1wiIGNvbnRhaW5zIHRoZSBzdHJpbmcgcmVmIFwiJXNcIi4gJyArICdTdXBwb3J0IGZvciBzdHJpbmcgcmVmcyB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gJyArICdUaGlzIGNhc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uLiAnICsgJ1dlIGFzayB5b3UgdG8gbWFudWFsbHkgZml4IHRoaXMgY2FzZSBieSB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIGNvbXBvbmVudE5hbWUsIGNvbmZpZy5yZWYpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUmVhY3QgZWxlbWVudC4gVGhpcyBubyBsb25nZXIgYWRoZXJlcyB0b1xuICogdGhlIGNsYXNzIHBhdHRlcm4sIHNvIGRvIG5vdCB1c2UgbmV3IHRvIGNhbGwgaXQuIEFsc28sIGluc3RhbmNlb2YgY2hlY2tcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQGludGVybmFsXG4gKi9cblxuXG52YXIgUmVhY3RFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvd3MgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc2VsZlxuICAgIH0pOyAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZFxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufTtcbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlLlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjcmVhdGVlbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIHZhciBwcm9wTmFtZTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG4gIHZhciBwcm9wcyA9IHt9O1xuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIHJlZiA9IG51bGw7XG4gIHZhciBzZWxmID0gbnVsbDtcbiAgdmFyIHNvdXJjZSA9IG51bGw7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG5cbiAgICAgIHtcbiAgICAgICAgd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIHtcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIHNlbGYgPSBjb25maWcuX19zZWxmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc2VsZjtcbiAgICBzb3VyY2UgPSBjb25maWcuX19zb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zb3VyY2U7IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIGNsb25lQW5kUmVwbGFjZUtleShvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG4vKipcbiAqIENsb25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5nIGVsZW1lbnQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjbG9uZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICBpZiAoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIik7XG4gIH1cblxuICB2YXIgcHJvcE5hbWU7IC8vIE9yaWdpbmFsIHByb3BzIGFyZSBjb3BpZWRcblxuICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7IC8vIFNlbGYgaXMgcHJlc2VydmVkIHNpbmNlIHRoZSBvd25lciBpcyBwcmVzZXJ2ZWQuXG5cbiAgdmFyIHNlbGYgPSBlbGVtZW50Ll9zZWxmOyAvLyBTb3VyY2UgaXMgcHJlc2VydmVkIHNpbmNlIGNsb25lRWxlbWVudCBpcyB1bmxpa2VseSB0byBiZSB0YXJnZXRlZCBieSBhXG4gIC8vIHRyYW5zcGlsZXIsIGFuZCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIHByb2JhYmx5IGEgYmV0dGVyIGluZGljYXRvciBvZiB0aGVcbiAgLy8gdHJ1ZSBvd25lci5cblxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlOyAvLyBPd25lciB3aWxsIGJlIHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuXG5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0ga2V5LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcblxuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgZWxlbWVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBlbGVtZW50IEEgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0JyAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICB7XG4gICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGVsZW1lbnQua2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXNjYXBlKCcnICsgZWxlbWVudC5rZXkpO1xuICB9IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG5cblxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBmYWxzZTtcblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgIHZhciBfY2hpbGQgPSBjaGlsZHJlbjtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPSBjYWxsYmFjayhfY2hpbGQpOyAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3M6XG5cbiAgICB2YXIgY2hpbGRLZXkgPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0RWxlbWVudEtleShfY2hpbGQsIDApIDogbmFtZVNvRmFyO1xuXG4gICAgaWYgKGlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgICB2YXIgZXNjYXBlZENoaWxkS2V5ID0gJyc7XG5cbiAgICAgIGlmIChjaGlsZEtleSAhPSBudWxsKSB7XG4gICAgICAgIGVzY2FwZWRDaGlsZEtleSA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShjaGlsZEtleSkgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIG1hcEludG9BcnJheShtYXBwZWRDaGlsZCwgYXJyYXksIGVzY2FwZWRDaGlsZEtleSwgJycsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBUaGUgYGlmYCBzdGF0ZW1lbnQgaGVyZSBwcmV2ZW50cyBhdXRvLWRpc2FibGluZyBvZiB0aGUgc2FmZVxuICAgICAgICAgIC8vIGNvZXJjaW9uIEVTTGludCBydWxlLCBzbyB3ZSBtdXN0IG1hbnVhbGx5IGRpc2FibGUgaXQgYmVsb3cuXG4gICAgICAgICAgLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgICAgaWYgKG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpKSB7XG4gICAgICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1hcHBlZENoaWxkLmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWFwcGVkQ2hpbGQgPSBjbG9uZUFuZFJlcGxhY2VLZXkobWFwcGVkQ2hpbGQsIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAgIC8vIHRyYXZlcnNlQWxsQ2hpbGRyZW4gdXNlZCB0byBkbyBmb3Igb2JqZWN0cyBhcyBjaGlsZHJlblxuICAgICAgICBlc2NhcGVkUHJlZml4ICsgKCAvLyAkRmxvd0ZpeE1lIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIFJlYWN0LlBvcnRhbCBkb2Vzbid0IGhhdmUgYSBrZXlcbiAgICAgICAgbWFwcGVkQ2hpbGQua2V5ICYmICghX2NoaWxkIHx8IF9jaGlsZC5rZXkgIT09IG1hcHBlZENoaWxkLmtleSkgPyAvLyAkRmxvd0ZpeE1lIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIGV4aXN0aW5nIGVsZW1lbnQncyBrZXkgY2FuIGJlIGEgbnVtYmVyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9zYWZlLXN0cmluZy1jb2VyY2lvblxuICAgICAgICBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoJycgKyBtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwO1xuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgICAgIHZhciBjaGlsZHJlblN0cmluZyA9IFN0cmluZyhjaGlsZHJlbik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIFwiICsgJ0lmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgJyArICdpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVubWFwXG4gKlxuICogVGhlIHByb3ZpZGVkIG1hcEZ1bmN0aW9uKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgY291bnQgPSAwO1xuICBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIHJlc3VsdCwgJycsICcnLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhc1xuICogYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5jb3VudFxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLlxuICovXG5cblxuZnVuY3Rpb24gY291bnRDaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgbiA9IDA7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgbisrOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmdcbiAgfSk7XG4gIHJldHVybiBuO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIHRocm91Z2ggY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmZvcmVhY2hcbiAqXG4gKiBUaGUgcHJvdmlkZWQgZm9yRWFjaEZ1bmMoY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZm9yRWFjaEZ1bmNcbiAqIEBwYXJhbSB7Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCBmb3IgZm9yRWFjaENvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yRWFjaEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gRG9uJ3QgcmV0dXJuIGFueXRoaW5nLlxuICB9LCBmb3JFYWNoQ29udGV4dCk7XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBjaGlsZHJlbiBvYmplY3QgKHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCkgYW5kXG4gKiByZXR1cm4gYW4gYXJyYXkgd2l0aCBhcHByb3ByaWF0ZWx5IHJlLWtleWVkIGNoaWxkcmVuLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbnRvYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvQXJyYXkoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pIHx8IFtdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikge1xuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuJyk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlKSB7XG4gIC8vIFRPRE86IFNlY29uZCBhcmd1bWVudCB1c2VkIHRvIGJlIGFuIG9wdGlvbmFsIGBjYWxjdWxhdGVDaGFuZ2VkQml0c2BcbiAgLy8gZnVuY3Rpb24uIFdhcm4gdG8gcmVzZXJ2ZSBmb3IgZnV0dXJlIHVzZT9cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAvLyBBcyBhIHdvcmthcm91bmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IHJlbmRlcmVycywgd2UgY2F0ZWdvcml6ZVxuICAgIC8vIHNvbWUgcmVuZGVyZXJzIGFzIHByaW1hcnkgYW5kIG90aGVycyBhcyBzZWNvbmRhcnkuIFdlIG9ubHkgZXhwZWN0XG4gICAgLy8gdGhlcmUgdG8gYmUgdHdvIGNvbmN1cnJlbnQgcmVuZGVyZXJzIGF0IG1vc3Q6IFJlYWN0IE5hdGl2ZSAocHJpbWFyeSkgYW5kXG4gICAgLy8gRmFicmljIChzZWNvbmRhcnkpOyBSZWFjdCBET00gKHByaW1hcnkpIGFuZCBSZWFjdCBBUlQgKHNlY29uZGFyeSkuXG4gICAgLy8gU2Vjb25kYXJ5IHJlbmRlcmVycyBzdG9yZSB0aGVpciBjb250ZXh0IHZhbHVlcyBvbiBzZXBhcmF0ZSBmaWVsZHMuXG4gICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIF9jdXJyZW50VmFsdWUyOiBkZWZhdWx0VmFsdWUsXG4gICAgLy8gVXNlZCB0byB0cmFjayBob3cgbWFueSBjb25jdXJyZW50IHJlbmRlcmVycyB0aGlzIGNvbnRleHQgY3VycmVudGx5XG4gICAgLy8gc3VwcG9ydHMgd2l0aGluIGluIGEgc2luZ2xlIHJlbmRlcmVyLiBTdWNoIGFzIHBhcmFsbGVsIHNlcnZlciByZW5kZXJpbmcuXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIC8vIFRoZXNlIGFyZSBjaXJjdWxhclxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsLFxuICAgIC8vIEFkZCB0aGVzZSB0byB1c2Ugc2FtZSBoaWRkZW4gY2xhc3MgaW4gVk0gYXMgU2VydmVyQ29udGV4dFxuICAgIF9kZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgX2dsb2JhbE5hbWU6IG51bGxcbiAgfTtcbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0XG4gICAgfTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbm90IHNldHRpbmcgYSB2YWx1ZSwgd2hpY2ggaXMgaW50ZW50aW9uYWwgaGVyZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ29uc3VtZXIsIHtcbiAgICAgIFByb3ZpZGVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Qcm92aWRlcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Qcm92aWRlcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Qcm92aWRlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX1Byb3ZpZGVyKSB7XG4gICAgICAgICAgY29udGV4dC5Qcm92aWRlciA9IF9Qcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA9IF9jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlMjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlMjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX2N1cnJlbnRWYWx1ZTIpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUyID0gX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfdGhyZWFkQ291bnQ6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX3RocmVhZENvdW50O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfdGhyZWFkQ291bnQpIHtcbiAgICAgICAgICBjb250ZXh0Ll90aHJlYWRDb3VudCA9IF90aHJlYWRDb3VudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIENvbnN1bWVyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMpIHtcbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gdHJ1ZTtcblxuICAgICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dC5Db25zdW1lci5Db25zdW1lcj4gaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Db25zdW1lcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dC5Db25zdW1lcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRpc3BsYXlOYW1lOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0LmRpc3BsYXlOYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkaXNwbGF5TmFtZSkge1xuICAgICAgICAgIGlmICghaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIpIHtcbiAgICAgICAgICAgIHdhcm4oJ1NldHRpbmcgYGRpc3BsYXlOYW1lYCBvbiBDb250ZXh0LkNvbnN1bWVyIGhhcyBubyBlZmZlY3QuICcgKyBcIllvdSBzaG91bGQgc2V0IGl0IGRpcmVjdGx5IG9uIHRoZSBjb250ZXh0IHdpdGggQ29udGV4dC5kaXNwbGF5TmFtZSA9ICclcycuXCIsIGRpc3BsYXlOYW1lKTtcblxuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pOyAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIHByb3BlcnRpZXMgYmVjYXVzZSBpdCBkb2Vzbid0IHVuZGVyc3RhbmQgZGVmaW5lUHJvcGVydHlcblxuICAgIGNvbnRleHQuQ29uc3VtZXIgPSBDb25zdW1lcjtcbiAgfVxuXG4gIHtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSBudWxsO1xuICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlcjIgPSBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbnZhciBVbmluaXRpYWxpemVkID0gLTE7XG52YXIgUGVuZGluZyA9IDA7XG52YXIgUmVzb2x2ZWQgPSAxO1xudmFyIFJlamVjdGVkID0gMjtcblxuZnVuY3Rpb24gbGF6eUluaXRpYWxpemVyKHBheWxvYWQpIHtcbiAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gVW5pbml0aWFsaXplZCkge1xuICAgIHZhciBjdG9yID0gcGF5bG9hZC5fcmVzdWx0O1xuICAgIHZhciB0aGVuYWJsZSA9IGN0b3IoKTsgLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cbiAgICAvLyBUaGlzIG1pZ2h0IHRocm93IGVpdGhlciBiZWNhdXNlIGl0J3MgbWlzc2luZyBvciB0aHJvd3MuIElmIHNvLCB3ZSB0cmVhdCBpdFxuICAgIC8vIGFzIHN0aWxsIHVuaW5pdGlhbGl6ZWQgYW5kIHRyeSBhZ2FpbiBuZXh0IHRpbWUuIFdoaWNoIGlzIHRoZSBzYW1lIGFzIHdoYXRcbiAgICAvLyBoYXBwZW5zIGlmIHRoZSBjdG9yIG9yIGFueSB3cmFwcGVycyBwcm9jZXNzaW5nIHRoZSBjdG9yIHRocm93cy4gVGhpcyBtaWdodFxuICAgIC8vIGVuZCB1cCBmaXhpbmcgaXQgaWYgdGhlIHJlc29sdXRpb24gd2FzIGEgY29uY3VycmVuY3kgYnVnLlxuXG4gICAgdGhlbmFibGUudGhlbihmdW5jdGlvbiAobW9kdWxlT2JqZWN0KSB7XG4gICAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBQZW5kaW5nIHx8IHBheWxvYWQuX3N0YXR1cyA9PT0gVW5pbml0aWFsaXplZCkge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZXNvbHZlZC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIHJlc29sdmVkLl9yZXN1bHQgPSBtb2R1bGVPYmplY3Q7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBQZW5kaW5nIHx8IHBheWxvYWQuX3N0YXR1cyA9PT0gVW5pbml0aWFsaXplZCkge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZWplY3RlZC5fc3RhdHVzID0gUmVqZWN0ZWQ7XG4gICAgICAgIHJlamVjdGVkLl9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIC8vIEluIGNhc2UsIHdlJ3JlIHN0aWxsIHVuaW5pdGlhbGl6ZWQsIHRoZW4gd2UncmUgd2FpdGluZyBmb3IgdGhlIHRoZW5hYmxlXG4gICAgICAvLyB0byByZXNvbHZlLiBTZXQgaXQgYXMgcGVuZGluZyBpbiB0aGUgbWVhbnRpbWUuXG4gICAgICB2YXIgcGVuZGluZyA9IHBheWxvYWQ7XG4gICAgICBwZW5kaW5nLl9zdGF0dXMgPSBQZW5kaW5nO1xuICAgICAgcGVuZGluZy5fcmVzdWx0ID0gdGhlbmFibGU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUmVzb2x2ZWQpIHtcbiAgICB2YXIgbW9kdWxlT2JqZWN0ID0gcGF5bG9hZC5fcmVzdWx0O1xuXG4gICAge1xuICAgICAgaWYgKG1vZHVsZU9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yKCdsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXAnICsgJ29ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2NvbnN0IE15Q29tcG9uZW50ID0gbGF6eSgoKSA9PiBpbXAnICsgXCJvcnQoJy4vTXlDb21wb25lbnQnKSlcXG5cXG5cIiArICdEaWQgeW91IGFjY2lkZW50YWxseSBwdXQgY3VybHkgYnJhY2VzIGFyb3VuZCB0aGUgaW1wb3J0PycsIG1vZHVsZU9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKCEoJ2RlZmF1bHQnIGluIG1vZHVsZU9iamVjdCkpIHtcbiAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcCcgKyAnb3J0KCkgY2FsbC4gJyArICdJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gICcgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcCcgKyBcIm9ydCgnLi9NeUNvbXBvbmVudCcpKVwiLCBtb2R1bGVPYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVPYmplY3QuZGVmYXVsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF6eShjdG9yKSB7XG4gIHZhciBwYXlsb2FkID0ge1xuICAgIC8vIFdlIHVzZSB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiBVbmluaXRpYWxpemVkLFxuICAgIF9yZXN1bHQ6IGN0b3JcbiAgfTtcbiAgdmFyIGxhenlUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9MQVpZX1RZUEUsXG4gICAgX3BheWxvYWQ6IHBheWxvYWQsXG4gICAgX2luaXQ6IGxhenlJbml0aWFsaXplclxuICB9O1xuXG4gIHtcbiAgICAvLyBJbiBwcm9kdWN0aW9uLCB0aGlzIHdvdWxkIGp1c3Qgc2V0IGl0IG9uIHRoZSBvYmplY3QuXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcbiAgICB2YXIgcHJvcFR5cGVzOyAvLyAkRmxvd0ZpeE1lXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsYXp5VHlwZSwge1xuICAgICAgZGVmYXVsdFByb3BzOiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRQcm9wcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3RGVmYXVsdFByb3BzKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYGRlZmF1bHRQcm9wc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcblxuICAgICAgICAgIGRlZmF1bHRQcm9wcyA9IG5ld0RlZmF1bHRQcm9wczsgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAnZGVmYXVsdFByb3BzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvcFR5cGVzOiB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BUeXBlcztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJvcFR5cGVzKSB7XG4gICAgICAgICAgZXJyb3IoJ1JlYWN0LmxhenkoLi4uKTogSXQgaXMgbm90IHN1cHBvcnRlZCB0byBhc3NpZ24gYHByb3BUeXBlc2AgdG8gJyArICdhIGxhenkgY29tcG9uZW50IGltcG9ydC4gRWl0aGVyIHNwZWNpZnkgdGhlbSB3aGVyZSB0aGUgY29tcG9uZW50ICcgKyAnaXMgZGVmaW5lZCwgb3IgY3JlYXRlIGEgd3JhcHBpbmcgY29tcG9uZW50IGFyb3VuZCBpdC4nKTtcblxuICAgICAgICAgIHByb3BUeXBlcyA9IG5ld1Byb3BUeXBlczsgLy8gTWF0Y2ggcHJvZHVjdGlvbiBiZWhhdmlvciBtb3JlIGNsb3NlbHk6XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGxhenlUeXBlLCAncHJvcFR5cGVzJywge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGF6eVR5cGU7XG59XG5cbmZ1bmN0aW9uIGZvcndhcmRSZWYocmVuZGVyKSB7XG4gIHtcbiAgICBpZiAocmVuZGVyICE9IG51bGwgJiYgcmVuZGVyLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCByZWNlaXZlZCBhIGBtZW1vYCAnICsgJ2NvbXBvbmVudC4gSW5zdGVhZCBvZiBmb3J3YXJkUmVmKG1lbW8oLi4uKSksIHVzZSAnICsgJ21lbW8oZm9yd2FyZFJlZiguLi4pKS4nKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByZW5kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuJywgcmVuZGVyID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJlbmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChyZW5kZXIubGVuZ3RoICE9PSAwICYmIHJlbmRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBhY2NlcHQgZXhhY3RseSB0d28gcGFyYW1ldGVyczogcHJvcHMgYW5kIHJlZi4gJXMnLCByZW5kZXIubGVuZ3RoID09PSAxID8gJ0RpZCB5b3UgZm9yZ2V0IHRvIHVzZSB0aGUgcmVmIHBhcmFtZXRlcj8nIDogJ0FueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVuZGVyICE9IG51bGwpIHtcbiAgICAgIGlmIChyZW5kZXIuZGVmYXVsdFByb3BzICE9IG51bGwgfHwgcmVuZGVyLnByb3BUeXBlcyAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgZG8gbm90IHN1cHBvcnQgcHJvcFR5cGVzIG9yIGRlZmF1bHRQcm9wcy4gJyArICdEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIGEgUmVhY3QgY29tcG9uZW50PycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBlbGVtZW50VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSxcbiAgICByZW5kZXI6IHJlbmRlclxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7IC8vIFRoZSBpbm5lciBjb21wb25lbnQgc2hvdWxkbid0IGluaGVyaXQgdGhpcyBkaXNwbGF5IG5hbWUgaW4gbW9zdCBjYXNlcyxcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgY29tcG9uZW50IG1heSBiZSB1c2VkIGVsc2V3aGVyZS5cbiAgICAgICAgLy8gQnV0IGl0J3MgbmljZSBmb3IgYW5vbnltb3VzIGZ1bmN0aW9ucyB0byBpbmhlcml0IHRoZSBuYW1lLFxuICAgICAgICAvLyBzbyB0aGF0IG91ciBjb21wb25lbnQtc3RhY2sgZ2VuZXJhdGlvbiBsb2dpYyB3aWxsIGRpc3BsYXkgdGhlaXIgZnJhbWVzLlxuICAgICAgICAvLyBBbiBhbm9ueW1vdXMgZnVuY3Rpb24gZ2VuZXJhbGx5IHN1Z2dlc3RzIGEgcGF0dGVybiBsaWtlOlxuICAgICAgICAvLyAgIFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHsuLi59KTtcbiAgICAgICAgLy8gVGhpcyBraW5kIG9mIGlubmVyIGZ1bmN0aW9uIGlzIG5vdCB1c2VkIGVsc2V3aGVyZSBzbyB0aGUgc2lkZSBlZmZlY3QgaXMgb2theS5cblxuICAgICAgICBpZiAoIXJlbmRlci5uYW1lICYmICFyZW5kZXIuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbnZhciBSRUFDVF9NT0RVTEVfUkVGRVJFTkNFO1xuXG57XG4gIFJFQUNUX01PRFVMRV9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKCdyZWFjdC5tb2R1bGUucmVmZXJlbmNlJyk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCBlbmFibGVEZWJ1Z1RyYWNpbmcgIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgZW5hYmxlTGVnYWN5SGlkZGVuICB8fCB0eXBlID09PSBSRUFDVF9PRkZTQ1JFRU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSAgfHwgZW5hYmxlQ2FjaGVFbGVtZW50ICB8fCBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01PRFVMRV9SRUZFUkVOQ0UgfHwgdHlwZS5nZXRNb2R1bGVJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1lbW8odHlwZSwgY29tcGFyZSkge1xuICB7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkpIHtcbiAgICAgIGVycm9yKCdtZW1vOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvbXBvbmVudC4gSW5zdGVhZCAnICsgJ3JlY2VpdmVkOiAlcycsIHR5cGUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb21wYXJlOiBjb21wYXJlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29tcGFyZVxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7IC8vIFRoZSBpbm5lciBjb21wb25lbnQgc2hvdWxkbid0IGluaGVyaXQgdGhpcyBkaXNwbGF5IG5hbWUgaW4gbW9zdCBjYXNlcyxcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgY29tcG9uZW50IG1heSBiZSB1c2VkIGVsc2V3aGVyZS5cbiAgICAgICAgLy8gQnV0IGl0J3MgbmljZSBmb3IgYW5vbnltb3VzIGZ1bmN0aW9ucyB0byBpbmhlcml0IHRoZSBuYW1lLFxuICAgICAgICAvLyBzbyB0aGF0IG91ciBjb21wb25lbnQtc3RhY2sgZ2VuZXJhdGlvbiBsb2dpYyB3aWxsIGRpc3BsYXkgdGhlaXIgZnJhbWVzLlxuICAgICAgICAvLyBBbiBhbm9ueW1vdXMgZnVuY3Rpb24gZ2VuZXJhbGx5IHN1Z2dlc3RzIGEgcGF0dGVybiBsaWtlOlxuICAgICAgICAvLyAgIFJlYWN0Lm1lbW8oKHByb3BzKSA9PiB7Li4ufSk7XG4gICAgICAgIC8vIFRoaXMga2luZCBvZiBpbm5lciBmdW5jdGlvbiBpcyBub3QgdXNlZCBlbHNld2hlcmUgc28gdGhlIHNpZGUgZWZmZWN0IGlzIG9rYXkuXG5cbiAgICAgICAgaWYgKCF0eXBlLm5hbWUgJiYgIXR5cGUuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICB0eXBlLmRpc3BsYXlOYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRUeXBlO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGlzcGF0Y2hlcigpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7XG5cbiAge1xuICAgIGlmIChkaXNwYXRjaGVyID09PSBudWxsKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvcicgKyAnIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuJyArICcxLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4nICsgJzIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4nICsgJzMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG4nICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLicpO1xuICAgIH1cbiAgfSAvLyBXaWxsIHJlc3VsdCBpbiBhIG51bGwgYWNjZXNzIGVycm9yIGlmIGFjY2Vzc2VkIG91dHNpZGUgcmVuZGVyIHBoYXNlLiBXZVxuICAvLyBpbnRlbnRpb25hbGx5IGRvbid0IHRocm93IG91ciBvd24gZXJyb3IgYmVjYXVzZSB0aGlzIGlzIGluIGEgaG90IHBhdGguXG4gIC8vIEFsc28gaGVscHMgZW5zdXJlIHRoaXMgaXMgaW5saW5lZC5cblxuXG4gIHJldHVybiBkaXNwYXRjaGVyO1xufVxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0KSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcblxuICB7XG4gICAgLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuICAgIGlmIChDb250ZXh0Ll9jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciByZWFsQ29udGV4dCA9IENvbnRleHQuX2NvbnRleHQ7IC8vIERvbid0IGRlZHVwbGljYXRlIGJlY2F1c2UgdGhpcyBsZWdpdGltYXRlbHkgY2F1c2VzIGJ1Z3NcbiAgICAgIC8vIGFuZCBub2JvZHkgc2hvdWxkIGJlIHVzaW5nIHRoaXMgaW4gZXhpc3RpbmcgY29kZS5cblxuICAgICAgaWYgKHJlYWxDb250ZXh0LkNvbnN1bWVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIGVycm9yKCdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Db25zdW1lcikgaXMgbm90IHN1cHBvcnRlZCwgbWF5IGNhdXNlIGJ1Z3MsIGFuZCB3aWxsIGJlICcgKyAncmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9IGVsc2UgaWYgKHJlYWxDb250ZXh0LlByb3ZpZGVyID09PSBDb250ZXh0KSB7XG4gICAgICAgIGVycm9yKCdDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Qcm92aWRlcikgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ29udGV4dChDb250ZXh0KTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUluc2VydGlvbkVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5mdW5jdGlvbiB1c2VUcmFuc2l0aW9uKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVRyYW5zaXRpb24oKTtcbn1cbmZ1bmN0aW9uIHVzZURlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIHVzZUlkKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUlkKCk7XG59XG5mdW5jdGlvbiB1c2VTeW5jRXh0ZXJuYWxTdG9yZShzdWJzY3JpYmUsIGdldFNuYXBzaG90LCBnZXRTZXJ2ZXJTbmFwc2hvdCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgZ2V0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KTtcbn1cblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCAhZm4gfHwgcmVlbnRyeSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHtcbiAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG5cbiAgICBpZiAoZnJhbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb250cm9sO1xuICByZWVudHJ5ID0gdHJ1ZTtcbiAgdmFyIHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTsgLy8gJEZsb3dGaXhNZSBJdCBkb2VzIGFjY2VwdCB1bmRlZmluZWQuXG5cbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XG4gIHZhciBwcmV2aW91c0Rpc3BhdGNoZXI7XG5cbiAge1xuICAgIHByZXZpb3VzRGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpOyAvLyBJZiBvdXIgY29tcG9uZW50IGZyYW1lIGlzIGxhYmVsZWQgXCI8YW5vbnltb3VzPlwiXG4gICAgICAgICAgICAgICAgLy8gYnV0IHdlIGhhdmUgYSB1c2VyLXByb3ZpZGVkIFwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgICAgICAgIC8vIHNwbGljZSBpdCBpbiB0byBtYWtlIHRoZSBzdGFjayBtb3JlIHJlYWRhYmxlLlxuXG5cbiAgICAgICAgICAgICAgICBpZiAoZm4uZGlzcGxheU5hbWUgJiYgX2ZyYW1lLmluY2x1ZGVzKCc8YW5vbnltb3VzPicpKSB7XG4gICAgICAgICAgICAgICAgICBfZnJhbWUgPSBfZnJhbWUucmVwbGFjZSgnPGFub255bW91cz4nLCBmbi5kaXNwbGF5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2aW91c0Rpc3BhdGNoZXI7XG4gICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICB9XG5cbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZpb3VzUHJlcGFyZVN0YWNrVHJhY2U7XG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxuXG5cbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcbiAgdmFyIHN5bnRoZXRpY0ZyYW1lID0gbmFtZSA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUpIDogJyc7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBzeW50aGV0aWNGcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xufVxuZnVuY3Rpb24gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZuLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICB2YXIgcHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBzb3VyY2UsIG93bmVyRm4pIHtcblxuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAge1xuICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUodHlwZSwgc2hvdWxkQ29uc3RydWN0KHR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyKTtcblxuICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgIC8vIE1lbW8gbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBzb3VyY2UsIG93bmVyRm4pO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChoYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC50eXBlKTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGZpbGVOYW1lID0gc291cmNlLmZpbGVOYW1lLnJlcGxhY2UoL14uKltcXFxcXFwvXS8sICcnKTtcbiAgICB2YXIgbGluZU51bWJlciA9IHNvdXJjZS5saW5lTnVtYmVyO1xuICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtRm9yUHJvcHMoZWxlbWVudFByb3BzKSB7XG4gIGlmIChlbGVtZW50UHJvcHMgIT09IG51bGwgJiYgZWxlbWVudFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZWxlbWVudFByb3BzLl9fc291cmNlKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cbi8qKlxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gKiB1cGRhdGVzLlxuICovXG5cblxudmFyIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAgdmFyIGluZm8gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcblxuICBpZiAoIWluZm8pIHtcbiAgICB2YXIgcGFyZW50TmFtZSA9IHR5cGVvZiBwYXJlbnRUeXBlID09PSAnc3RyaW5nJyA/IHBhcmVudFR5cGUgOiBwYXJlbnRUeXBlLmRpc3BsYXlOYW1lIHx8IHBhcmVudFR5cGUubmFtZTtcblxuICAgIGlmIChwYXJlbnROYW1lKSB7XG4gICAgICBpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudE5hbWUgKyBcIj4uXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGluZm87XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSA9IHRydWU7IC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcbiAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gIHZhciBjaGlsZE93bmVyID0gJyc7XG5cbiAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5fb3duZXIgJiYgZWxlbWVudC5fb3duZXIgIT09IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgfVxuXG4gIHtcbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG5vZGUpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuXG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cbiAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICB2YXIgc3RlcDtcblxuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wVHlwZXM7XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cbiAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wVHlwZXMpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcblxuICAgICAgZXJyb3IoJ0NvbXBvbmVudCAlcyBkZWNsYXJlZCBgUHJvcFR5cGVzYCBpbnN0ZWFkIG9mIGBwcm9wVHlwZXNgLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBwcm9wZXJ0eSBhc3NpZ25tZW50PycsIF9uYW1lIHx8ICdVbmtub3duJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlLmdldERlZmF1bHRQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiAhdHlwZS5nZXREZWZhdWx0UHJvcHMuaXNSZWFjdENsYXNzQXBwcm92ZWQpIHtcbiAgICAgIGVycm9yKCdnZXREZWZhdWx0UHJvcHMgaXMgb25seSB1c2VkIG9uIGNsYXNzaWMgUmVhY3QuY3JlYXRlQ2xhc3MgJyArICdkZWZpbml0aW9ucy4gVXNlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIGBkZWZhdWx0UHJvcHNgIGluc3RlYWQuJyk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGEgZnJhZ21lbnQsIHZhbGlkYXRlIHRoYXQgaXQgY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2l0aCBmcmFnbWVudCBwcm9wc1xuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGZyYWdtZW50XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZnJhZ21lbnQpIHtcbiAge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJhZ21lbnQucHJvcHMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKGtleSAhPT0gJ2NoaWxkcmVuJyAmJiBrZXkgIT09ICdrZXknKSB7XG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICAgIGVycm9yKCdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiAnICsgJ1JlYWN0LkZyYWdtZW50IGNhbiBvbmx5IGhhdmUgYGtleWAgYW5kIGBjaGlsZHJlbmAgcHJvcHMuJywga2V5KTtcblxuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIGByZWZgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuJyk7XG5cbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGNoaWxkcmVuKSB7XG4gIHZhciB2YWxpZFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSk7IC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG5cbiAgaWYgKCF2YWxpZFR5cGUpIHtcbiAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKHByb3BzKTtcblxuICAgIGlmIChzb3VyY2VJbmZvKSB7XG4gICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm8gKz0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG4gICAgfVxuXG4gICAgdmFyIHR5cGVTdHJpbmc7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodHlwZSkpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnYXJyYXknO1xuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgaW5mbyA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD8nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgfVxuXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0LmNyZWF0ZUVsZW1lbnQ6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLlxuICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gIC8vIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcblxuXG4gIGlmICh2YWxpZFR5cGUpIHtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxudmFyIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gZmFsc2U7XG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24odHlwZSkge1xuICB2YXIgdmFsaWRhdGVkRmFjdG9yeSA9IGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbi5iaW5kKG51bGwsIHR5cGUpO1xuICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5KSB7XG4gICAgICBkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1JlYWN0LmNyZWF0ZUZhY3RvcnkoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBDb25zaWRlciB1c2luZyBKU1ggJyArICdvciB1c2UgUmVhY3QuY3JlYXRlRWxlbWVudCgpIGRpcmVjdGx5IGluc3RlYWQuJyk7XG4gICAgfSAvLyBMZWdhY3kgaG9vazogcmVtb3ZlIGl0XG5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgKyAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7XG4gICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZEZhY3Rvcnk7XG59XG5mdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbihlbGVtZW50LCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBjbG9uZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTtcbiAgfVxuXG4gIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxuZnVuY3Rpb24gc3RhcnRUcmFuc2l0aW9uKHNjb3BlLCBvcHRpb25zKSB7XG4gIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb247XG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb24gPSB7fTtcbiAgdmFyIGN1cnJlbnRUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbjtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWcudHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgc2NvcGUoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG5cbiAgICB7XG4gICAgICBpZiAocHJldlRyYW5zaXRpb24gPT09IG51bGwgJiYgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMpIHtcbiAgICAgICAgdmFyIHVwZGF0ZWRGaWJlcnNDb3VudCA9IGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLnNpemU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZWRGaWJlcnNDb3VudCA+IDEwKSB7XG4gICAgICAgICAgd2FybignRGV0ZWN0ZWQgYSBsYXJnZSBudW1iZXIgb2YgdXBkYXRlcyBpbnNpZGUgc3RhcnRUcmFuc2l0aW9uLiAnICsgJ0lmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuICcgKyAnT3RoZXJ3aXNlIGNvbmN1cnJlbnQgbW9kZSBndWFyYW50ZWVzIGFyZSBvZmYgdGhlIHRhYmxlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gZmFsc2U7XG52YXIgZW5xdWV1ZVRhc2tJbXBsID0gbnVsbDtcbmZ1bmN0aW9uIGVucXVldWVUYXNrKHRhc2spIHtcbiAgaWYgKGVucXVldWVUYXNrSW1wbCA9PT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICAvLyByZWFkIHJlcXVpcmUgb2ZmIHRoZSBtb2R1bGUgb2JqZWN0IHRvIGdldCBhcm91bmQgdGhlIGJ1bmRsZXJzLlxuICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0aGVtIHRvIGRldGVjdCBhIHJlcXVpcmUgYW5kIGJ1bmRsZSBhIE5vZGUgcG9seWZpbGwuXG4gICAgICB2YXIgcmVxdWlyZVN0cmluZyA9ICgncmVxdWlyZScgKyBNYXRoLnJhbmRvbSgpKS5zbGljZSgwLCA3KTtcbiAgICAgIHZhciBub2RlUmVxdWlyZSA9IG1vZHVsZSAmJiBtb2R1bGVbcmVxdWlyZVN0cmluZ107IC8vIGFzc3VtaW5nIHdlJ3JlIGluIG5vZGUsIGxldCdzIHRyeSB0byBnZXQgbm9kZSdzXG4gICAgICAvLyB2ZXJzaW9uIG9mIHNldEltbWVkaWF0ZSwgYnlwYXNzaW5nIGZha2UgdGltZXJzIGlmIGFueS5cblxuICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gbm9kZVJlcXVpcmUuY2FsbChtb2R1bGUsICd0aW1lcnMnKS5zZXRJbW1lZGlhdGU7XG4gICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgLy8gd2UncmUgaW4gYSBicm93c2VyXG4gICAgICAvLyB3ZSBjYW4ndCB1c2UgcmVndWxhciB0aW1lcnMgYmVjYXVzZSB0aGV5IG1heSBzdGlsbCBiZSBmYWtlZFxuICAgICAgLy8gc28gd2UgdHJ5IE1lc3NhZ2VDaGFubmVsK3Bvc3RNZXNzYWdlIGluc3RlYWRcbiAgICAgIGVucXVldWVUYXNrSW1wbCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGlkV2FybkFib3V0TWVzc2FnZUNoYW5uZWwgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIE1lc3NhZ2VDaGFubmVsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBlcnJvcignVGhpcyBicm93c2VyIGRvZXMgbm90IGhhdmUgYSBNZXNzYWdlQ2hhbm5lbCBpbXBsZW1lbnRhdGlvbiwgJyArICdzbyBlbnF1ZXVpbmcgdGFza3MgdmlhIGF3YWl0IGFjdChhc3luYyAoKSA9PiAuLi4pIHdpbGwgZmFpbC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzICcgKyAnaWYgeW91IGVuY291bnRlciB0aGlzIHdhcm5pbmcuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBjYWxsYmFjaztcbiAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSh1bmRlZmluZWQpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZW5xdWV1ZVRhc2tJbXBsKHRhc2spO1xufVxuXG52YXIgYWN0U2NvcGVEZXB0aCA9IDA7XG52YXIgZGlkV2Fybk5vQXdhaXRBY3QgPSBmYWxzZTtcbmZ1bmN0aW9uIGFjdChjYWxsYmFjaykge1xuICB7XG4gICAgLy8gYGFjdGAgY2FsbHMgY2FuIGJlIG5lc3RlZCwgc28gd2UgdHJhY2sgdGhlIGRlcHRoLiBUaGlzIHJlcHJlc2VudHMgdGhlXG4gICAgLy8gbnVtYmVyIG9mIGBhY3RgIHNjb3BlcyBvbiB0aGUgc3RhY2suXG4gICAgdmFyIHByZXZBY3RTY29wZURlcHRoID0gYWN0U2NvcGVEZXB0aDtcbiAgICBhY3RTY29wZURlcHRoKys7XG5cbiAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgb3V0ZXJtb3N0IGBhY3RgIHNjb3BlLiBJbml0aWFsaXplIHRoZSBxdWV1ZS4gVGhlIHJlY29uY2lsZXJcbiAgICAgIC8vIHdpbGwgZGV0ZWN0IHRoZSBxdWV1ZSBhbmQgdXNlIGl0IGluc3RlYWQgb2YgU2NoZWR1bGVyLlxuICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9IFtdO1xuICAgIH1cblxuICAgIHZhciBwcmV2SXNCYXRjaGluZ0xlZ2FjeSA9IFJlYWN0Q3VycmVudEFjdFF1ZXVlLmlzQmF0Y2hpbmdMZWdhY3k7XG4gICAgdmFyIHJlc3VsdDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBVc2VkIHRvIHJlcHJvZHVjZSBiZWhhdmlvciBvZiBgYmF0Y2hlZFVwZGF0ZXNgIGluIGxlZ2FjeSBtb2RlLiBPbmx5XG4gICAgICAvLyBzZXQgdG8gYHRydWVgIHdoaWxlIHRoZSBnaXZlbiBjYWxsYmFjayBpcyBleGVjdXRlZCwgbm90IGZvciB1cGRhdGVzXG4gICAgICAvLyB0cmlnZ2VyZWQgZHVyaW5nIGFuIGFzeW5jIGV2ZW50LCBiZWNhdXNlIHRoaXMgaXMgaG93IHRoZSBsZWdhY3lcbiAgICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIGBhY3RgIGJlaGF2ZWQuXG4gICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5pc0JhdGNoaW5nTGVnYWN5ID0gdHJ1ZTtcbiAgICAgIHJlc3VsdCA9IGNhbGxiYWNrKCk7IC8vIFJlcGxpY2F0ZSBiZWhhdmlvciBvZiBvcmlnaW5hbCBgYWN0YCBpbXBsZW1lbnRhdGlvbiBpbiBsZWdhY3kgbW9kZSxcbiAgICAgIC8vIHdoaWNoIGZsdXNoZWQgdXBkYXRlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgc2NvcGUgZnVuY3Rpb24gZXhpdHMsIGV2ZW5cbiAgICAgIC8vIGlmIGl0J3MgYW4gYXN5bmMgZnVuY3Rpb24uXG5cbiAgICAgIGlmICghcHJldklzQmF0Y2hpbmdMZWdhY3kgJiYgUmVhY3RDdXJyZW50QWN0UXVldWUuZGlkU2NoZWR1bGVMZWdhY3lVcGRhdGUpIHtcbiAgICAgICAgdmFyIHF1ZXVlID0gUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudDtcblxuICAgICAgICBpZiAocXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5kaWRTY2hlZHVsZUxlZ2FjeVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAgIGZsdXNoQWN0UXVldWUocXVldWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5pc0JhdGNoaW5nTGVnYWN5ID0gcHJldklzQmF0Y2hpbmdMZWdhY3k7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0aGVuYWJsZVJlc3VsdCA9IHJlc3VsdDsgLy8gVGhlIGNhbGxiYWNrIGlzIGFuIGFzeW5jIGZ1bmN0aW9uIChpLmUuIHJldHVybmVkIGEgcHJvbWlzZSkuIFdhaXRcbiAgICAgIC8vIGZvciBpdCB0byByZXNvbHZlIGJlZm9yZSBleGl0aW5nIHRoZSBjdXJyZW50IHNjb3BlLlxuXG4gICAgICB2YXIgd2FzQXdhaXRlZCA9IGZhbHNlO1xuICAgICAgdmFyIHRoZW5hYmxlID0ge1xuICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgd2FzQXdhaXRlZCA9IHRydWU7XG4gICAgICAgICAgdGhlbmFibGVSZXN1bHQudGhlbihmdW5jdGlvbiAocmV0dXJuVmFsdWUpIHtcbiAgICAgICAgICAgIHBvcEFjdFNjb3BlKHByZXZBY3RTY29wZURlcHRoKTtcblxuICAgICAgICAgICAgaWYgKGFjdFNjb3BlRGVwdGggPT09IDApIHtcbiAgICAgICAgICAgICAgLy8gV2UndmUgZXhpdGVkIHRoZSBvdXRlcm1vc3QgYWN0IHNjb3BlLiBSZWN1cnNpdmVseSBmbHVzaCB0aGVcbiAgICAgICAgICAgICAgLy8gcXVldWUgdW50aWwgdGhlcmUncyBubyByZW1haW5pbmcgd29yay5cbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhyZXR1cm5WYWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgLy8gVGhlIGNhbGxiYWNrIHRocmV3IGFuIGVycm9yLlxuICAgICAgICAgICAgcG9wQWN0U2NvcGUocHJldkFjdFNjb3BlRGVwdGgpO1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAge1xuICAgICAgICBpZiAoIWRpZFdhcm5Ob0F3YWl0QWN0ICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge30pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF3YXNBd2FpdGVkKSB7XG4gICAgICAgICAgICAgIGRpZFdhcm5Ob0F3YWl0QWN0ID0gdHJ1ZTtcblxuICAgICAgICAgICAgICBlcnJvcignWW91IGNhbGxlZCBhY3QoYXN5bmMgKCkgPT4gLi4uKSB3aXRob3V0IGF3YWl0LiAnICsgJ1RoaXMgY291bGQgbGVhZCB0byB1bmV4cGVjdGVkIHRlc3RpbmcgYmVoYXZpb3VyLCAnICsgJ2ludGVybGVhdmluZyBtdWx0aXBsZSBhY3QgY2FsbHMgYW5kIG1peGluZyB0aGVpciAnICsgJ3Njb3Blcy4gJyArICdZb3Ugc2hvdWxkIC0gYXdhaXQgYWN0KGFzeW5jICgpID0+IC4uLik7Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmV0dXJuVmFsdWUgPSByZXN1bHQ7IC8vIFRoZSBjYWxsYmFjayBpcyBub3QgYW4gYXN5bmMgZnVuY3Rpb24uIEV4aXQgdGhlIGN1cnJlbnQgc2NvcGVcbiAgICAgIC8vIGltbWVkaWF0ZWx5LCB3aXRob3V0IGF3YWl0aW5nLlxuXG4gICAgICBwb3BBY3RTY29wZShwcmV2QWN0U2NvcGVEZXB0aCk7XG5cbiAgICAgIGlmIChhY3RTY29wZURlcHRoID09PSAwKSB7XG4gICAgICAgIC8vIEV4aXRpbmcgdGhlIG91dGVybW9zdCBhY3Qgc2NvcGUuIEZsdXNoIHRoZSBxdWV1ZS5cbiAgICAgICAgdmFyIF9xdWV1ZSA9IFJlYWN0Q3VycmVudEFjdFF1ZXVlLmN1cnJlbnQ7XG5cbiAgICAgICAgaWYgKF9xdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZsdXNoQWN0UXVldWUoX3F1ZXVlKTtcbiAgICAgICAgICBSZWFjdEN1cnJlbnRBY3RRdWV1ZS5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfSAvLyBSZXR1cm4gYSB0aGVuYWJsZS4gSWYgdGhlIHVzZXIgYXdhaXRzIGl0LCB3ZSdsbCBmbHVzaCBhZ2FpbiBpblxuICAgICAgICAvLyBjYXNlIGFkZGl0aW9uYWwgd29yayB3YXMgc2NoZWR1bGVkIGJ5IGEgbWljcm90YXNrLlxuXG5cbiAgICAgICAgdmFyIF90aGVuYWJsZSA9IHtcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAvLyBDb25maXJtIHdlIGhhdmVuJ3QgcmUtZW50ZXJlZCBhbm90aGVyIGBhY3RgIHNjb3BlLCBpbiBjYXNlXG4gICAgICAgICAgICAvLyB0aGUgdXNlciBkb2VzIHNvbWV0aGluZyB3ZWlyZCBsaWtlIGF3YWl0IHRoZSB0aGVuYWJsZVxuICAgICAgICAgICAgLy8gbXVsdGlwbGUgdGltZXMuXG4gICAgICAgICAgICBpZiAoUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBmbHVzaCB0aGUgcXVldWUgdW50aWwgdGhlcmUncyBubyByZW1haW5pbmcgd29yay5cbiAgICAgICAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9IFtdO1xuICAgICAgICAgICAgICByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3RoZW5hYmxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2luY2Ugd2UncmUgaW5zaWRlIGEgbmVzdGVkIGBhY3RgIHNjb3BlLCB0aGUgcmV0dXJuZWQgdGhlbmFibGVcbiAgICAgICAgLy8gaW1tZWRpYXRlbHkgcmVzb2x2ZXMuIFRoZSBvdXRlciBzY29wZSB3aWxsIGZsdXNoIHRoZSBxdWV1ZS5cbiAgICAgICAgdmFyIF90aGVuYWJsZTIgPSB7XG4gICAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3RoZW5hYmxlMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wQWN0U2NvcGUocHJldkFjdFNjb3BlRGVwdGgpIHtcbiAge1xuICAgIGlmIChwcmV2QWN0U2NvcGVEZXB0aCAhPT0gYWN0U2NvcGVEZXB0aCAtIDEpIHtcbiAgICAgIGVycm9yKCdZb3Ugc2VlbSB0byBoYXZlIG92ZXJsYXBwaW5nIGFjdCgpIGNhbGxzLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnQmUgc3VyZSB0byBhd2FpdCBwcmV2aW91cyBhY3QoKSBjYWxscyBiZWZvcmUgbWFraW5nIGEgbmV3IG9uZS4gJyk7XG4gICAgfVxuXG4gICAgYWN0U2NvcGVEZXB0aCA9IHByZXZBY3RTY29wZURlcHRoO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCkge1xuICB7XG4gICAgdmFyIHF1ZXVlID0gUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudDtcblxuICAgIGlmIChxdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmx1c2hBY3RRdWV1ZShxdWV1ZSk7XG4gICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBObyBhZGRpdGlvbmFsIHdvcmsgd2FzIHNjaGVkdWxlZC4gRmluaXNoLlxuICAgICAgICAgICAgUmVhY3RDdXJyZW50QWN0UXVldWUuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICByZXNvbHZlKHJldHVyblZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gS2VlcCBmbHVzaGluZyB3b3JrIHVudGlsIHRoZXJlJ3Mgbm9uZSBsZWZ0LlxuICAgICAgICAgICAgcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhyZXR1cm5WYWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZShyZXR1cm5WYWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBpc0ZsdXNoaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsdXNoQWN0UXVldWUocXVldWUpIHtcbiAge1xuICAgIGlmICghaXNGbHVzaGluZykge1xuICAgICAgLy8gUHJldmVudCByZS1lbnRyYW5jZS5cbiAgICAgIGlzRmx1c2hpbmcgPSB0cnVlO1xuICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICB0cnkge1xuICAgICAgICBmb3IgKDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG5cbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrKHRydWUpO1xuICAgICAgICAgIH0gd2hpbGUgKGNhbGxiYWNrICE9PSBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBzb21ldGhpbmcgdGhyb3dzLCBsZWF2ZSB0aGUgcmVtYWluaW5nIGNhbGxiYWNrcyBvbiB0aGUgcXVldWUuXG4gICAgICAgIHF1ZXVlID0gcXVldWUuc2xpY2UoaSArIDEpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRmx1c2hpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGNyZWF0ZUVsZW1lbnQkMSA9ICBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNsb25lRWxlbWVudCQxID0gIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjcmVhdGVGYWN0b3J5ID0gIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbiA7XG52YXIgQ2hpbGRyZW4gPSB7XG4gIG1hcDogbWFwQ2hpbGRyZW4sXG4gIGZvckVhY2g6IGZvckVhY2hDaGlsZHJlbixcbiAgY291bnQ6IGNvdW50Q2hpbGRyZW4sXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIG9ubHk6IG9ubHlDaGlsZFxufTtcblxuZXhwb3J0cy5DaGlsZHJlbiA9IENoaWxkcmVuO1xuZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG5leHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbmV4cG9ydHMuUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuZXhwb3J0cy5QdXJlQ29tcG9uZW50ID0gUHVyZUNvbXBvbmVudDtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG5leHBvcnRzLlN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbmV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSBSZWFjdFNoYXJlZEludGVybmFscztcbmV4cG9ydHMuY2xvbmVFbGVtZW50ID0gY2xvbmVFbGVtZW50JDE7XG5leHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0O1xuZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gY3JlYXRlRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVGYWN0b3J5ID0gY3JlYXRlRmFjdG9yeTtcbmV4cG9ydHMuY3JlYXRlUmVmID0gY3JlYXRlUmVmO1xuZXhwb3J0cy5mb3J3YXJkUmVmID0gZm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnQgPSBpc1ZhbGlkRWxlbWVudDtcbmV4cG9ydHMubGF6eSA9IGxhenk7XG5leHBvcnRzLm1lbW8gPSBtZW1vO1xuZXhwb3J0cy5zdGFydFRyYW5zaXRpb24gPSBzdGFydFRyYW5zaXRpb247XG5leHBvcnRzLnVuc3RhYmxlX2FjdCA9IGFjdDtcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlID0gdXNlRGVmZXJyZWRWYWx1ZTtcbmV4cG9ydHMudXNlRWZmZWN0ID0gdXNlRWZmZWN0O1xuZXhwb3J0cy51c2VJZCA9IHVzZUlkO1xuZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlID0gdXNlSW1wZXJhdGl2ZUhhbmRsZTtcbmV4cG9ydHMudXNlSW5zZXJ0aW9uRWZmZWN0ID0gdXNlSW5zZXJ0aW9uRWZmZWN0O1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlO1xuZXhwb3J0cy51c2VUcmFuc2l0aW9uID0gdXNlVHJhbnNpdGlvbjtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgICAgICAgICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgPT09XG4gICAgJ2Z1bmN0aW9uJ1xuKSB7XG4gIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChuZXcgRXJyb3IoKSk7XG59XG4gICAgICAgIFxuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/react/cjs/react.development.js\n")); + +/***/ }), + +/***/ "./node_modules/react/index.js": +/*!*************************************!*\ + !*** ./node_modules/react/index.js ***! + \*************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"./node_modules/react/cjs/react.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLHVIQUFzRDtBQUN4RCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvcmVhY3QvaW5kZXguanM/MWZiMiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/react/index.js\n")); + +/***/ }), + +/***/ "./node_modules/react/jsx-runtime.js": +/*!*******************************************!*\ + !*** ./node_modules/react/jsx-runtime.js ***! + \*******************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-runtime.development.js */ \"./node_modules/react/cjs/react-jsx-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvcmVhY3QvanN4LXJ1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLCtJQUFrRTtBQUNwRSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvcmVhY3QvanN4LXJ1bnRpbWUuanM/MzRkMCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/react/jsx-runtime.js\n")); + +/***/ }), + +/***/ "./node_modules/scheduler/cjs/scheduler.development.js": +/*!*************************************************************!*\ + !*** ./node_modules/scheduler/cjs/scheduler.development.js ***! + \*************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * scheduler.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var enableSchedulerDebugging = false;\nvar enableProfiling = false;\nvar frameYieldMs = 5;\n\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n siftUp(heap, node, index);\n}\nfunction peek(heap) {\n return heap.length === 0 ? null : heap[0];\n}\nfunction pop(heap) {\n if (heap.length === 0) {\n return null;\n }\n\n var first = heap[0];\n var last = heap.pop();\n\n if (last !== first) {\n heap[0] = last;\n siftDown(heap, last, 0);\n }\n\n return first;\n}\n\nfunction siftUp(heap, node, i) {\n var index = i;\n\n while (index > 0) {\n var parentIndex = index - 1 >>> 1;\n var parent = heap[parentIndex];\n\n if (compare(parent, node) > 0) {\n // The parent is larger. Swap positions.\n heap[parentIndex] = node;\n heap[index] = parent;\n index = parentIndex;\n } else {\n // The parent is smaller. Exit.\n return;\n }\n }\n}\n\nfunction siftDown(heap, node, i) {\n var index = i;\n var length = heap.length;\n var halfLength = length >>> 1;\n\n while (index < halfLength) {\n var leftIndex = (index + 1) * 2 - 1;\n var left = heap[leftIndex];\n var rightIndex = leftIndex + 1;\n var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.\n\n if (compare(left, node) < 0) {\n if (rightIndex < length && compare(right, left) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n heap[index] = left;\n heap[leftIndex] = node;\n index = leftIndex;\n }\n } else if (rightIndex < length && compare(right, node) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n // Neither child is smaller. Exit.\n return;\n }\n }\n}\n\nfunction compare(a, b) {\n // Compare sort index first, then task id.\n var diff = a.sortIndex - b.sortIndex;\n return diff !== 0 ? diff : a.id - b.id;\n}\n\n// TODO: Use symbols?\nvar ImmediatePriority = 1;\nvar UserBlockingPriority = 2;\nvar NormalPriority = 3;\nvar LowPriority = 4;\nvar IdlePriority = 5;\n\nfunction markTaskErrored(task, ms) {\n}\n\n/* eslint-disable no-var */\n\nvar hasPerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\n\nif (hasPerformanceNow) {\n var localPerformance = performance;\n\n exports.unstable_now = function () {\n return localPerformance.now();\n };\n} else {\n var localDate = Date;\n var initialTime = localDate.now();\n\n exports.unstable_now = function () {\n return localDate.now() - initialTime;\n };\n} // Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\n\n\nvar maxSigned31BitInt = 1073741823; // Times out immediately\n\nvar IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out\n\nvar USER_BLOCKING_PRIORITY_TIMEOUT = 250;\nvar NORMAL_PRIORITY_TIMEOUT = 5000;\nvar LOW_PRIORITY_TIMEOUT = 10000; // Never times out\n\nvar IDLE_PRIORITY_TIMEOUT = maxSigned31BitInt; // Tasks are stored on a min heap\n\nvar taskQueue = [];\nvar timerQueue = []; // Incrementing id counter. Used to maintain insertion order.\n\nvar taskIdCounter = 1; // Pausing the scheduler is useful for debugging.\nvar currentTask = null;\nvar currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrance.\n\nvar isPerformingWork = false;\nvar isHostCallbackScheduled = false;\nvar isHostTimeoutScheduled = false; // Capture local references to native APIs, in case a polyfill overrides them.\n\nvar localSetTimeout = typeof setTimeout === 'function' ? setTimeout : null;\nvar localClearTimeout = typeof clearTimeout === 'function' ? clearTimeout : null;\nvar localSetImmediate = typeof setImmediate !== 'undefined' ? setImmediate : null; // IE and Node.js + jsdom\n\nvar isInputPending = typeof navigator !== 'undefined' && navigator.scheduling !== undefined && navigator.scheduling.isInputPending !== undefined ? navigator.scheduling.isInputPending.bind(navigator.scheduling) : null;\n\nfunction advanceTimers(currentTime) {\n // Check for tasks that are no longer delayed and add them to the queue.\n var timer = peek(timerQueue);\n\n while (timer !== null) {\n if (timer.callback === null) {\n // Timer was cancelled.\n pop(timerQueue);\n } else if (timer.startTime <= currentTime) {\n // Timer fired. Transfer to the task queue.\n pop(timerQueue);\n timer.sortIndex = timer.expirationTime;\n push(taskQueue, timer);\n } else {\n // Remaining timers are pending.\n return;\n }\n\n timer = peek(timerQueue);\n }\n}\n\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = false;\n advanceTimers(currentTime);\n\n if (!isHostCallbackScheduled) {\n if (peek(taskQueue) !== null) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n }\n }\n}\n\nfunction flushWork(hasTimeRemaining, initialTime) {\n\n\n isHostCallbackScheduled = false;\n\n if (isHostTimeoutScheduled) {\n // We scheduled a timeout but it's no longer needed. Cancel it.\n isHostTimeoutScheduled = false;\n cancelHostTimeout();\n }\n\n isPerformingWork = true;\n var previousPriorityLevel = currentPriorityLevel;\n\n try {\n if (enableProfiling) {\n try {\n return workLoop(hasTimeRemaining, initialTime);\n } catch (error) {\n if (currentTask !== null) {\n var currentTime = exports.unstable_now();\n markTaskErrored(currentTask, currentTime);\n currentTask.isQueued = false;\n }\n\n throw error;\n }\n } else {\n // No catch in prod code path.\n return workLoop(hasTimeRemaining, initialTime);\n }\n } finally {\n currentTask = null;\n currentPriorityLevel = previousPriorityLevel;\n isPerformingWork = false;\n }\n}\n\nfunction workLoop(hasTimeRemaining, initialTime) {\n var currentTime = initialTime;\n advanceTimers(currentTime);\n currentTask = peek(taskQueue);\n\n while (currentTask !== null && !(enableSchedulerDebugging )) {\n if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n // This currentTask hasn't expired, and we've reached the deadline.\n break;\n }\n\n var callback = currentTask.callback;\n\n if (typeof callback === 'function') {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n\n var continuationCallback = callback(didUserCallbackTimeout);\n currentTime = exports.unstable_now();\n\n if (typeof continuationCallback === 'function') {\n currentTask.callback = continuationCallback;\n } else {\n\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue);\n }\n }\n\n advanceTimers(currentTime);\n } else {\n pop(taskQueue);\n }\n\n currentTask = peek(taskQueue);\n } // Return whether there's additional work\n\n\n if (currentTask !== null) {\n return true;\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n\n return false;\n }\n}\n\nfunction unstable_runWithPriority(priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n case LowPriority:\n case IdlePriority:\n break;\n\n default:\n priorityLevel = NormalPriority;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_next(eventHandler) {\n var priorityLevel;\n\n switch (currentPriorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n // Shift down to normal priority\n priorityLevel = NormalPriority;\n break;\n\n default:\n // Anything lower than normal priority should remain at the current level.\n priorityLevel = currentPriorityLevel;\n break;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_wrapCallback(callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n // This is a fork of runWithPriority, inlined for performance.\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n}\n\nfunction unstable_scheduleCallback(priorityLevel, callback, options) {\n var currentTime = exports.unstable_now();\n var startTime;\n\n if (typeof options === 'object' && options !== null) {\n var delay = options.delay;\n\n if (typeof delay === 'number' && delay > 0) {\n startTime = currentTime + delay;\n } else {\n startTime = currentTime;\n }\n } else {\n startTime = currentTime;\n }\n\n var timeout;\n\n switch (priorityLevel) {\n case ImmediatePriority:\n timeout = IMMEDIATE_PRIORITY_TIMEOUT;\n break;\n\n case UserBlockingPriority:\n timeout = USER_BLOCKING_PRIORITY_TIMEOUT;\n break;\n\n case IdlePriority:\n timeout = IDLE_PRIORITY_TIMEOUT;\n break;\n\n case LowPriority:\n timeout = LOW_PRIORITY_TIMEOUT;\n break;\n\n case NormalPriority:\n default:\n timeout = NORMAL_PRIORITY_TIMEOUT;\n break;\n }\n\n var expirationTime = startTime + timeout;\n var newTask = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: startTime,\n expirationTime: expirationTime,\n sortIndex: -1\n };\n\n if (startTime > currentTime) {\n // This is a delayed task.\n newTask.sortIndex = startTime;\n push(timerQueue, newTask);\n\n if (peek(taskQueue) === null && newTask === peek(timerQueue)) {\n // All tasks are delayed, and this is the task with the earliest delay.\n if (isHostTimeoutScheduled) {\n // Cancel an existing timeout.\n cancelHostTimeout();\n } else {\n isHostTimeoutScheduled = true;\n } // Schedule a timeout.\n\n\n requestHostTimeout(handleTimeout, startTime - currentTime);\n }\n } else {\n newTask.sortIndex = expirationTime;\n push(taskQueue, newTask);\n // wait until the next time we yield.\n\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n }\n }\n\n return newTask;\n}\n\nfunction unstable_pauseExecution() {\n}\n\nfunction unstable_continueExecution() {\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n }\n}\n\nfunction unstable_getFirstCallbackNode() {\n return peek(taskQueue);\n}\n\nfunction unstable_cancelCallback(task) {\n // remove from the queue because you can't remove arbitrary nodes from an\n // array based heap, only the first one.)\n\n\n task.callback = null;\n}\n\nfunction unstable_getCurrentPriorityLevel() {\n return currentPriorityLevel;\n}\n\nvar isMessageLoopRunning = false;\nvar scheduledHostCallback = null;\nvar taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main\n// thread, like user events. By default, it yields multiple times per frame.\n// It does not attempt to align with frame boundaries, since most tasks don't\n// need to be frame aligned; for those that do, use requestAnimationFrame.\n\nvar frameInterval = frameYieldMs;\nvar startTime = -1;\n\nfunction shouldYieldToHost() {\n var timeElapsed = exports.unstable_now() - startTime;\n\n if (timeElapsed < frameInterval) {\n // The main thread has only been blocked for a really short amount of time;\n // smaller than a single frame. Don't yield yet.\n return false;\n } // The main thread has been blocked for a non-negligible amount of time. We\n\n\n return true;\n}\n\nfunction requestPaint() {\n\n}\n\nfunction forceFrameRate(fps) {\n if (fps < 0 || fps > 125) {\n // Using console['error'] to evade Babel and ESLint\n console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing frame rates higher than 125 fps is not supported');\n return;\n }\n\n if (fps > 0) {\n frameInterval = Math.floor(1000 / fps);\n } else {\n // reset the framerate\n frameInterval = frameYieldMs;\n }\n}\n\nvar performWorkUntilDeadline = function () {\n if (scheduledHostCallback !== null) {\n var currentTime = exports.unstable_now(); // Keep track of the start time so we can measure how long the main thread\n // has been blocked.\n\n startTime = currentTime;\n var hasTimeRemaining = true; // If a scheduler task throws, exit the current browser task so the\n // error can be observed.\n //\n // Intentionally not using a try-catch, since that makes some debugging\n // techniques harder. Instead, if `scheduledHostCallback` errors, then\n // `hasMoreWork` will remain true, and we'll continue the work loop.\n\n var hasMoreWork = true;\n\n try {\n hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);\n } finally {\n if (hasMoreWork) {\n // If there's more work, schedule the next message event at the end\n // of the preceding one.\n schedulePerformWorkUntilDeadline();\n } else {\n isMessageLoopRunning = false;\n scheduledHostCallback = null;\n }\n }\n } else {\n isMessageLoopRunning = false;\n } // Yielding to the browser will give it a chance to paint, so we can\n};\n\nvar schedulePerformWorkUntilDeadline;\n\nif (typeof localSetImmediate === 'function') {\n // Node.js and old IE.\n // There's a few reasons for why we prefer setImmediate.\n //\n // Unlike MessageChannel, it doesn't prevent a Node.js process from exiting.\n // (Even though this is a DOM fork of the Scheduler, you could get here\n // with a mix of Node.js 15+, which has a MessageChannel, and jsdom.)\n // https://github.com/facebook/react/issues/20756\n //\n // But also, it runs earlier which is the semantic we want.\n // If other browsers ever implement it, it's better to use it.\n // Although both of these would be inferior to native scheduling.\n schedulePerformWorkUntilDeadline = function () {\n localSetImmediate(performWorkUntilDeadline);\n };\n} else if (typeof MessageChannel !== 'undefined') {\n // DOM and Worker environments.\n // We prefer MessageChannel because of the 4ms setTimeout clamping.\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n\n schedulePerformWorkUntilDeadline = function () {\n port.postMessage(null);\n };\n} else {\n // We should only fallback here in non-browser environments.\n schedulePerformWorkUntilDeadline = function () {\n localSetTimeout(performWorkUntilDeadline, 0);\n };\n}\n\nfunction requestHostCallback(callback) {\n scheduledHostCallback = callback;\n\n if (!isMessageLoopRunning) {\n isMessageLoopRunning = true;\n schedulePerformWorkUntilDeadline();\n }\n}\n\nfunction requestHostTimeout(callback, ms) {\n taskTimeoutID = localSetTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n}\n\nfunction cancelHostTimeout() {\n localClearTimeout(taskTimeoutID);\n taskTimeoutID = -1;\n}\n\nvar unstable_requestPaint = requestPaint;\nvar unstable_Profiling = null;\n\nexports.unstable_IdlePriority = IdlePriority;\nexports.unstable_ImmediatePriority = ImmediatePriority;\nexports.unstable_LowPriority = LowPriority;\nexports.unstable_NormalPriority = NormalPriority;\nexports.unstable_Profiling = unstable_Profiling;\nexports.unstable_UserBlockingPriority = UserBlockingPriority;\nexports.unstable_cancelCallback = unstable_cancelCallback;\nexports.unstable_continueExecution = unstable_continueExecution;\nexports.unstable_forceFrameRate = forceFrameRate;\nexports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;\nexports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;\nexports.unstable_next = unstable_next;\nexports.unstable_pauseExecution = unstable_pauseExecution;\nexports.unstable_requestPaint = unstable_requestPaint;\nexports.unstable_runWithPriority = unstable_runWithPriority;\nexports.unstable_scheduleCallback = unstable_scheduleCallback;\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = unstable_wrapCallback;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLElBQUksSUFBcUM7QUFDekM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRSxvQkFBb0I7QUFDdEI7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBLEVBQUUsb0JBQW9CO0FBQ3RCO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7O0FBR0Esb0NBQW9DOztBQUVwQyxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQSxrQ0FBa0M7O0FBRWxDLCtDQUErQzs7QUFFL0M7QUFDQSxxQkFBcUI7O0FBRXJCLHVCQUF1QjtBQUN2QjtBQUNBLDJDQUEyQzs7QUFFM0M7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBLG1GQUFtRjs7QUFFbkY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDZCQUE2QjtBQUM3QixrQ0FBa0M7QUFDbEMsNEJBQTRCO0FBQzVCLCtCQUErQjtBQUMvQiwwQkFBMEI7QUFDMUIscUNBQXFDO0FBQ3JDLCtCQUErQjtBQUMvQixrQ0FBa0M7QUFDbEMsK0JBQStCO0FBQy9CLHdDQUF3QztBQUN4QyxxQ0FBcUM7QUFDckMscUJBQXFCO0FBQ3JCLCtCQUErQjtBQUMvQiw2QkFBNkI7QUFDN0IsZ0NBQWdDO0FBQ2hDLGlDQUFpQztBQUNqQyw0QkFBNEI7QUFDNUIsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanM/YmNkMiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiBzY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgJ3VzZSBzdHJpY3QnO1xuXG4vKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ID09PVxuICAgICdmdW5jdGlvbidcbikge1xuICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KG5ldyBFcnJvcigpKTtcbn1cbiAgICAgICAgICB2YXIgZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nID0gZmFsc2U7XG52YXIgZW5hYmxlUHJvZmlsaW5nID0gZmFsc2U7XG52YXIgZnJhbWVZaWVsZE1zID0gNTtcblxuZnVuY3Rpb24gcHVzaChoZWFwLCBub2RlKSB7XG4gIHZhciBpbmRleCA9IGhlYXAubGVuZ3RoO1xuICBoZWFwLnB1c2gobm9kZSk7XG4gIHNpZnRVcChoZWFwLCBub2RlLCBpbmRleCk7XG59XG5mdW5jdGlvbiBwZWVrKGhlYXApIHtcbiAgcmV0dXJuIGhlYXAubGVuZ3RoID09PSAwID8gbnVsbCA6IGhlYXBbMF07XG59XG5mdW5jdGlvbiBwb3AoaGVhcCkge1xuICBpZiAoaGVhcC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG4gIHZhciBsYXN0ID0gaGVhcC5wb3AoKTtcblxuICBpZiAobGFzdCAhPT0gZmlyc3QpIHtcbiAgICBoZWFwWzBdID0gbGFzdDtcbiAgICBzaWZ0RG93bihoZWFwLCBsYXN0LCAwKTtcbiAgfVxuXG4gIHJldHVybiBmaXJzdDtcbn1cblxuZnVuY3Rpb24gc2lmdFVwKGhlYXAsIG5vZGUsIGkpIHtcbiAgdmFyIGluZGV4ID0gaTtcblxuICB3aGlsZSAoaW5kZXggPiAwKSB7XG4gICAgdmFyIHBhcmVudEluZGV4ID0gaW5kZXggLSAxID4+PiAxO1xuICAgIHZhciBwYXJlbnQgPSBoZWFwW3BhcmVudEluZGV4XTtcblxuICAgIGlmIChjb21wYXJlKHBhcmVudCwgbm9kZSkgPiAwKSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIGxhcmdlci4gU3dhcCBwb3NpdGlvbnMuXG4gICAgICBoZWFwW3BhcmVudEluZGV4XSA9IG5vZGU7XG4gICAgICBoZWFwW2luZGV4XSA9IHBhcmVudDtcbiAgICAgIGluZGV4ID0gcGFyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdERvd24oaGVhcCwgbm9kZSwgaSkge1xuICB2YXIgaW5kZXggPSBpO1xuICB2YXIgbGVuZ3RoID0gaGVhcC5sZW5ndGg7XG4gIHZhciBoYWxmTGVuZ3RoID0gbGVuZ3RoID4+PiAxO1xuXG4gIHdoaWxlIChpbmRleCA8IGhhbGZMZW5ndGgpIHtcbiAgICB2YXIgbGVmdEluZGV4ID0gKGluZGV4ICsgMSkgKiAyIC0gMTtcbiAgICB2YXIgbGVmdCA9IGhlYXBbbGVmdEluZGV4XTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IGxlZnRJbmRleCArIDE7XG4gICAgdmFyIHJpZ2h0ID0gaGVhcFtyaWdodEluZGV4XTsgLy8gSWYgdGhlIGxlZnQgb3IgcmlnaHQgbm9kZSBpcyBzbWFsbGVyLCBzd2FwIHdpdGggdGhlIHNtYWxsZXIgb2YgdGhvc2UuXG5cbiAgICBpZiAoY29tcGFyZShsZWZ0LCBub2RlKSA8IDApIHtcbiAgICAgIGlmIChyaWdodEluZGV4IDwgbGVuZ3RoICYmIGNvbXBhcmUocmlnaHQsIGxlZnQpIDwgMCkge1xuICAgICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSBsZWZ0O1xuICAgICAgICBoZWFwW2xlZnRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IGxlZnRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJpZ2h0SW5kZXggPCBsZW5ndGggJiYgY29tcGFyZShyaWdodCwgbm9kZSkgPCAwKSB7XG4gICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgY2hpbGQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIC8vIENvbXBhcmUgc29ydCBpbmRleCBmaXJzdCwgdGhlbiB0YXNrIGlkLlxuICB2YXIgZGlmZiA9IGEuc29ydEluZGV4IC0gYi5zb3J0SW5kZXg7XG4gIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGEuaWQgLSBiLmlkO1xufVxuXG4vLyBUT0RPOiBVc2Ugc3ltYm9scz9cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDE7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSAyO1xudmFyIE5vcm1hbFByaW9yaXR5ID0gMztcbnZhciBMb3dQcmlvcml0eSA9IDQ7XG52YXIgSWRsZVByaW9yaXR5ID0gNTtcblxuZnVuY3Rpb24gbWFya1Rhc2tFcnJvcmVkKHRhc2ssIG1zKSB7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuXG52YXIgaGFzUGVyZm9ybWFuY2VOb3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG5cbmlmIChoYXNQZXJmb3JtYW5jZU5vdykge1xuICB2YXIgbG9jYWxQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbFBlcmZvcm1hbmNlLm5vdygpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIGxvY2FsRGF0ZSA9IERhdGU7XG4gIHZhciBpbml0aWFsVGltZSA9IGxvY2FsRGF0ZS5ub3coKTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpIC0gaW5pdGlhbFRpbWU7XG4gIH07XG59IC8vIE1heCAzMSBiaXQgaW50ZWdlci4gVGhlIG1heCBpbnRlZ2VyIHNpemUgaW4gVjggZm9yIDMyLWJpdCBzeXN0ZW1zLlxuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcblxuXG52YXIgbWF4U2lnbmVkMzFCaXRJbnQgPSAxMDczNzQxODIzOyAvLyBUaW1lcyBvdXQgaW1tZWRpYXRlbHlcblxudmFyIElNTUVESUFURV9QUklPUklUWV9USU1FT1VUID0gLTE7IC8vIEV2ZW50dWFsbHkgdGltZXMgb3V0XG5cbnZhciBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQgPSAyNTA7XG52YXIgTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQgPSA1MDAwO1xudmFyIExPV19QUklPUklUWV9USU1FT1VUID0gMTAwMDA7IC8vIE5ldmVyIHRpbWVzIG91dFxuXG52YXIgSURMRV9QUklPUklUWV9USU1FT1VUID0gbWF4U2lnbmVkMzFCaXRJbnQ7IC8vIFRhc2tzIGFyZSBzdG9yZWQgb24gYSBtaW4gaGVhcFxuXG52YXIgdGFza1F1ZXVlID0gW107XG52YXIgdGltZXJRdWV1ZSA9IFtdOyAvLyBJbmNyZW1lbnRpbmcgaWQgY291bnRlci4gVXNlZCB0byBtYWludGFpbiBpbnNlcnRpb24gb3JkZXIuXG5cbnZhciB0YXNrSWRDb3VudGVyID0gMTsgLy8gUGF1c2luZyB0aGUgc2NoZWR1bGVyIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxudmFyIGN1cnJlbnRUYXNrID0gbnVsbDtcbnZhciBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5OyAvLyBUaGlzIGlzIHNldCB3aGlsZSBwZXJmb3JtaW5nIHdvcmssIHRvIHByZXZlbnQgcmUtZW50cmFuY2UuXG5cbnZhciBpc1BlcmZvcm1pbmdXb3JrID0gZmFsc2U7XG52YXIgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcbnZhciBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7IC8vIENhcHR1cmUgbG9jYWwgcmVmZXJlbmNlcyB0byBuYXRpdmUgQVBJcywgaW4gY2FzZSBhIHBvbHlmaWxsIG92ZXJyaWRlcyB0aGVtLlxuXG52YXIgbG9jYWxTZXRUaW1lb3V0ID0gdHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBzZXRUaW1lb3V0IDogbnVsbDtcbnZhciBsb2NhbENsZWFyVGltZW91dCA9IHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBjbGVhclRpbWVvdXQgOiBudWxsO1xudmFyIGxvY2FsU2V0SW1tZWRpYXRlID0gdHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcgPyBzZXRJbW1lZGlhdGUgOiBudWxsOyAvLyBJRSBhbmQgTm9kZS5qcyArIGpzZG9tXG5cbnZhciBpc0lucHV0UGVuZGluZyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5zY2hlZHVsaW5nICE9PSB1bmRlZmluZWQgJiYgbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcgIT09IHVuZGVmaW5lZCA/IG5hdmlnYXRvci5zY2hlZHVsaW5nLmlzSW5wdXRQZW5kaW5nLmJpbmQobmF2aWdhdG9yLnNjaGVkdWxpbmcpIDogbnVsbDtcblxuZnVuY3Rpb24gYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSkge1xuICAvLyBDaGVjayBmb3IgdGFza3MgdGhhdCBhcmUgbm8gbG9uZ2VyIGRlbGF5ZWQgYW5kIGFkZCB0aGVtIHRvIHRoZSBxdWV1ZS5cbiAgdmFyIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICB3aGlsZSAodGltZXIgIT09IG51bGwpIHtcbiAgICBpZiAodGltZXIuY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRpbWVyIHdhcyBjYW5jZWxsZWQuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGFydFRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgIC8vIFRpbWVyIGZpcmVkLiBUcmFuc2ZlciB0byB0aGUgdGFzayBxdWV1ZS5cbiAgICAgIHBvcCh0aW1lclF1ZXVlKTtcbiAgICAgIHRpbWVyLnNvcnRJbmRleCA9IHRpbWVyLmV4cGlyYXRpb25UaW1lO1xuICAgICAgcHVzaCh0YXNrUXVldWUsIHRpbWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtYWluaW5nIHRpbWVycyBhcmUgcGVuZGluZy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVGltZW91dChjdXJyZW50VGltZSkge1xuICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuXG4gIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQpIHtcbiAgICBpZiAocGVlayh0YXNrUXVldWUpICE9PSBudWxsKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICAgICAgaWYgKGZpcnN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFdvcmsoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpIHtcblxuXG4gIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgaWYgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQpIHtcbiAgICAvLyBXZSBzY2hlZHVsZWQgYSB0aW1lb3V0IGJ1dCBpdCdzIG5vIGxvbmdlciBuZWVkZWQuIENhbmNlbCBpdC5cbiAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG4gICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgfVxuXG4gIGlzUGVyZm9ybWluZ1dvcmsgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXNrICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgICBtYXJrVGFza0Vycm9yZWQoY3VycmVudFRhc2ssIGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICBjdXJyZW50VGFzay5pc1F1ZXVlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNhdGNoIGluIHByb2QgY29kZSBwYXRoLlxuICAgICAgcmV0dXJuIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFRhc2sgPSBudWxsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgIGlzUGVyZm9ybWluZ1dvcmsgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSkge1xuICB2YXIgY3VycmVudFRpbWUgPSBpbml0aWFsVGltZTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuXG4gIHdoaWxlIChjdXJyZW50VGFzayAhPT0gbnVsbCAmJiAhKGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyApKSB7XG4gICAgaWYgKGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lID4gY3VycmVudFRpbWUgJiYgKCFoYXNUaW1lUmVtYWluaW5nIHx8IHNob3VsZFlpZWxkVG9Ib3N0KCkpKSB7XG4gICAgICAvLyBUaGlzIGN1cnJlbnRUYXNrIGhhc24ndCBleHBpcmVkLCBhbmQgd2UndmUgcmVhY2hlZCB0aGUgZGVhZGxpbmUuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgY2FsbGJhY2sgPSBjdXJyZW50VGFzay5jYWxsYmFjaztcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gbnVsbDtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFRhc2sucHJpb3JpdHlMZXZlbDtcbiAgICAgIHZhciBkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0ID0gY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWU7XG5cbiAgICAgIHZhciBjb250aW51YXRpb25DYWxsYmFjayA9IGNhbGxiYWNrKGRpZFVzZXJDYWxsYmFja1RpbWVvdXQpO1xuICAgICAgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbnRpbnVhdGlvbkNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gY29udGludWF0aW9uQ2FsbGJhY2s7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChjdXJyZW50VGFzayA9PT0gcGVlayh0YXNrUXVldWUpKSB7XG4gICAgICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgIH1cblxuICAgIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuICB9IC8vIFJldHVybiB3aGV0aGVyIHRoZXJlJ3MgYWRkaXRpb25hbCB3b3JrXG5cblxuICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZmlyc3RUaW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG5cbiAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkocHJpb3JpdHlMZXZlbCwgZXZlbnRIYW5kbGVyKSB7XG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9uZXh0KGV2ZW50SGFuZGxlcikge1xuICB2YXIgcHJpb3JpdHlMZXZlbDtcblxuICBzd2l0Y2ggKGN1cnJlbnRQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgICAvLyBTaGlmdCBkb3duIHRvIG5vcm1hbCBwcmlvcml0eVxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gQW55dGhpbmcgbG93ZXIgdGhhbiBub3JtYWwgcHJpb3JpdHkgc2hvdWxkIHJlbWFpbiBhdCB0aGUgY3VycmVudCBsZXZlbC5cbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfd3JhcENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIHZhciBwYXJlbnRQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgcnVuV2l0aFByaW9yaXR5LCBpbmxpbmVkIGZvciBwZXJmb3JtYW5jZS5cbiAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwYXJlbnRQcmlvcml0eUxldmVsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgdmFyIHN0YXJ0VGltZTtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnICYmIG9wdGlvbnMgIT09IG51bGwpIHtcbiAgICB2YXIgZGVsYXkgPSBvcHRpb25zLmRlbGF5O1xuXG4gICAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZSArIGRlbGF5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gIH1cblxuICB2YXIgdGltZW91dDtcblxuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElNTUVESUFURV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gSURMRV9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IExPV19QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGRlZmF1bHQ6XG4gICAgICB0aW1lb3V0ID0gTk9STUFMX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBleHBpcmF0aW9uVGltZSA9IHN0YXJ0VGltZSArIHRpbWVvdXQ7XG4gIHZhciBuZXdUYXNrID0ge1xuICAgIGlkOiB0YXNrSWRDb3VudGVyKyssXG4gICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gICAgZXhwaXJhdGlvblRpbWU6IGV4cGlyYXRpb25UaW1lLFxuICAgIHNvcnRJbmRleDogLTFcbiAgfTtcblxuICBpZiAoc3RhcnRUaW1lID4gY3VycmVudFRpbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZGVsYXllZCB0YXNrLlxuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gc3RhcnRUaW1lO1xuICAgIHB1c2godGltZXJRdWV1ZSwgbmV3VGFzayk7XG5cbiAgICBpZiAocGVlayh0YXNrUXVldWUpID09PSBudWxsICYmIG5ld1Rhc2sgPT09IHBlZWsodGltZXJRdWV1ZSkpIHtcbiAgICAgIC8vIEFsbCB0YXNrcyBhcmUgZGVsYXllZCwgYW5kIHRoaXMgaXMgdGhlIHRhc2sgd2l0aCB0aGUgZWFybGllc3QgZGVsYXkuXG4gICAgICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgICAgICAvLyBDYW5jZWwgYW4gZXhpc3RpbmcgdGltZW91dC5cbiAgICAgICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgfSAvLyBTY2hlZHVsZSBhIHRpbWVvdXQuXG5cblxuICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIHN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBleHBpcmF0aW9uVGltZTtcbiAgICBwdXNoKHRhc2tRdWV1ZSwgbmV3VGFzayk7XG4gICAgLy8gd2FpdCB1bnRpbCB0aGUgbmV4dCB0aW1lIHdlIHlpZWxkLlxuXG5cbiAgICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1Rhc2s7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uKCkge1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbigpIHtcblxuICBpZiAoIWlzSG9zdENhbGxiYWNrU2NoZWR1bGVkICYmICFpc1BlcmZvcm1pbmdXb3JrKSB7XG4gICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSgpIHtcbiAgcmV0dXJuIHBlZWsodGFza1F1ZXVlKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2sodGFzaykge1xuICAvLyByZW1vdmUgZnJvbSB0aGUgcXVldWUgYmVjYXVzZSB5b3UgY2FuJ3QgcmVtb3ZlIGFyYml0cmFyeSBub2RlcyBmcm9tIGFuXG4gIC8vIGFycmF5IGJhc2VkIGhlYXAsIG9ubHkgdGhlIGZpcnN0IG9uZS4pXG5cblxuICB0YXNrLmNhbGxiYWNrID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHJldHVybiBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbn1cblxudmFyIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG52YXIgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbnZhciB0YXNrVGltZW91dElEID0gLTE7IC8vIFNjaGVkdWxlciBwZXJpb2RpY2FsbHkgeWllbGRzIGluIGNhc2UgdGhlcmUgaXMgb3RoZXIgd29yayBvbiB0aGUgbWFpblxuLy8gdGhyZWFkLCBsaWtlIHVzZXIgZXZlbnRzLiBCeSBkZWZhdWx0LCBpdCB5aWVsZHMgbXVsdGlwbGUgdGltZXMgcGVyIGZyYW1lLlxuLy8gSXQgZG9lcyBub3QgYXR0ZW1wdCB0byBhbGlnbiB3aXRoIGZyYW1lIGJvdW5kYXJpZXMsIHNpbmNlIG1vc3QgdGFza3MgZG9uJ3Rcbi8vIG5lZWQgdG8gYmUgZnJhbWUgYWxpZ25lZDsgZm9yIHRob3NlIHRoYXQgZG8sIHVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG5cbnZhciBmcmFtZUludGVydmFsID0gZnJhbWVZaWVsZE1zO1xudmFyIHN0YXJ0VGltZSA9IC0xO1xuXG5mdW5jdGlvbiBzaG91bGRZaWVsZFRvSG9zdCgpIHtcbiAgdmFyIHRpbWVFbGFwc2VkID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKSAtIHN0YXJ0VGltZTtcblxuICBpZiAodGltZUVsYXBzZWQgPCBmcmFtZUludGVydmFsKSB7XG4gICAgLy8gVGhlIG1haW4gdGhyZWFkIGhhcyBvbmx5IGJlZW4gYmxvY2tlZCBmb3IgYSByZWFsbHkgc2hvcnQgYW1vdW50IG9mIHRpbWU7XG4gICAgLy8gc21hbGxlciB0aGFuIGEgc2luZ2xlIGZyYW1lLiBEb24ndCB5aWVsZCB5ZXQuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFRoZSBtYWluIHRocmVhZCBoYXMgYmVlbiBibG9ja2VkIGZvciBhIG5vbi1uZWdsaWdpYmxlIGFtb3VudCBvZiB0aW1lLiBXZVxuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RQYWludCgpIHtcblxufVxuXG5mdW5jdGlvbiBmb3JjZUZyYW1lUmF0ZShmcHMpIHtcbiAgaWYgKGZwcyA8IDAgfHwgZnBzID4gMTI1KSB7XG4gICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgY29uc29sZVsnZXJyb3InXSgnZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsICcgKyAnZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZnBzID4gMCkge1xuICAgIGZyYW1lSW50ZXJ2YWwgPSBNYXRoLmZsb29yKDEwMDAgLyBmcHMpO1xuICB9IGVsc2Uge1xuICAgIC8vIHJlc2V0IHRoZSBmcmFtZXJhdGVcbiAgICBmcmFtZUludGVydmFsID0gZnJhbWVZaWVsZE1zO1xuICB9XG59XG5cbnZhciBwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpOyAvLyBLZWVwIHRyYWNrIG9mIHRoZSBzdGFydCB0aW1lIHNvIHdlIGNhbiBtZWFzdXJlIGhvdyBsb25nIHRoZSBtYWluIHRocmVhZFxuICAgIC8vIGhhcyBiZWVuIGJsb2NrZWQuXG5cbiAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICB2YXIgaGFzVGltZVJlbWFpbmluZyA9IHRydWU7IC8vIElmIGEgc2NoZWR1bGVyIHRhc2sgdGhyb3dzLCBleGl0IHRoZSBjdXJyZW50IGJyb3dzZXIgdGFzayBzbyB0aGVcbiAgICAvLyBlcnJvciBjYW4gYmUgb2JzZXJ2ZWQuXG4gICAgLy9cbiAgICAvLyBJbnRlbnRpb25hbGx5IG5vdCB1c2luZyBhIHRyeS1jYXRjaCwgc2luY2UgdGhhdCBtYWtlcyBzb21lIGRlYnVnZ2luZ1xuICAgIC8vIHRlY2huaXF1ZXMgaGFyZGVyLiBJbnN0ZWFkLCBpZiBgc2NoZWR1bGVkSG9zdENhbGxiYWNrYCBlcnJvcnMsIHRoZW5cbiAgICAvLyBgaGFzTW9yZVdvcmtgIHdpbGwgcmVtYWluIHRydWUsIGFuZCB3ZSdsbCBjb250aW51ZSB0aGUgd29yayBsb29wLlxuXG4gICAgdmFyIGhhc01vcmVXb3JrID0gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICBoYXNNb3JlV29yayA9IHNjaGVkdWxlZEhvc3RDYWxsYmFjayhoYXNUaW1lUmVtYWluaW5nLCBjdXJyZW50VGltZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChoYXNNb3JlV29yaykge1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgd29yaywgc2NoZWR1bGUgdGhlIG5leHQgbWVzc2FnZSBldmVudCBhdCB0aGUgZW5kXG4gICAgICAgIC8vIG9mIHRoZSBwcmVjZWRpbmcgb25lLlxuICAgICAgICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgfSAvLyBZaWVsZGluZyB0byB0aGUgYnJvd3NlciB3aWxsIGdpdmUgaXQgYSBjaGFuY2UgdG8gcGFpbnQsIHNvIHdlIGNhblxufTtcblxudmFyIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lO1xuXG5pZiAodHlwZW9mIGxvY2FsU2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIE5vZGUuanMgYW5kIG9sZCBJRS5cbiAgLy8gVGhlcmUncyBhIGZldyByZWFzb25zIGZvciB3aHkgd2UgcHJlZmVyIHNldEltbWVkaWF0ZS5cbiAgLy9cbiAgLy8gVW5saWtlIE1lc3NhZ2VDaGFubmVsLCBpdCBkb2Vzbid0IHByZXZlbnQgYSBOb2RlLmpzIHByb2Nlc3MgZnJvbSBleGl0aW5nLlxuICAvLyAoRXZlbiB0aG91Z2ggdGhpcyBpcyBhIERPTSBmb3JrIG9mIHRoZSBTY2hlZHVsZXIsIHlvdSBjb3VsZCBnZXQgaGVyZVxuICAvLyB3aXRoIGEgbWl4IG9mIE5vZGUuanMgMTUrLCB3aGljaCBoYXMgYSBNZXNzYWdlQ2hhbm5lbCwgYW5kIGpzZG9tLilcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yMDc1NlxuICAvL1xuICAvLyBCdXQgYWxzbywgaXQgcnVucyBlYXJsaWVyIHdoaWNoIGlzIHRoZSBzZW1hbnRpYyB3ZSB3YW50LlxuICAvLyBJZiBvdGhlciBicm93c2VycyBldmVyIGltcGxlbWVudCBpdCwgaXQncyBiZXR0ZXIgdG8gdXNlIGl0LlxuICAvLyBBbHRob3VnaCBib3RoIG9mIHRoZXNlIHdvdWxkIGJlIGluZmVyaW9yIHRvIG5hdGl2ZSBzY2hlZHVsaW5nLlxuICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBsb2NhbFNldEltbWVkaWF0ZShwZXJmb3JtV29ya1VudGlsRGVhZGxpbmUpO1xuICB9O1xufSBlbHNlIGlmICh0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIERPTSBhbmQgV29ya2VyIGVudmlyb25tZW50cy5cbiAgLy8gV2UgcHJlZmVyIE1lc3NhZ2VDaGFubmVsIGJlY2F1c2Ugb2YgdGhlIDRtcyBzZXRUaW1lb3V0IGNsYW1waW5nLlxuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICB2YXIgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lO1xuXG4gIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBXZSBzaG91bGQgb25seSBmYWxsYmFjayBoZXJlIGluIG5vbi1icm93c2VyIGVudmlyb25tZW50cy5cbiAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgbG9jYWxTZXRUaW1lb3V0KHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSwgMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RIb3N0Q2FsbGJhY2soY2FsbGJhY2spIHtcbiAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgaWYgKCFpc01lc3NhZ2VMb29wUnVubmluZykge1xuICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gdHJ1ZTtcbiAgICBzY2hlZHVsZVBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RIb3N0VGltZW91dChjYWxsYmFjaywgbXMpIHtcbiAgdGFza1RpbWVvdXRJRCA9IGxvY2FsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgY2FsbGJhY2soZXhwb3J0cy51bnN0YWJsZV9ub3coKSk7XG4gIH0sIG1zKTtcbn1cblxuZnVuY3Rpb24gY2FuY2VsSG9zdFRpbWVvdXQoKSB7XG4gIGxvY2FsQ2xlYXJUaW1lb3V0KHRhc2tUaW1lb3V0SUQpO1xuICB0YXNrVGltZW91dElEID0gLTE7XG59XG5cbnZhciB1bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSByZXF1ZXN0UGFpbnQ7XG52YXIgdW5zdGFibGVfUHJvZmlsaW5nID0gIG51bGw7XG5cbmV4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5ID0gSWRsZVByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSA9IEltbWVkaWF0ZVByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eSA9IExvd1ByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSA9IE5vcm1hbFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Qcm9maWxpbmcgPSB1bnN0YWJsZV9Qcm9maWxpbmc7XG5leHBvcnRzLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gVXNlckJsb2NraW5nUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrID0gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uID0gdW5zdGFibGVfY29udGludWVFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlID0gZm9yY2VGcmFtZVJhdGU7XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw7XG5leHBvcnRzLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlID0gdW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU7XG5leHBvcnRzLnVuc3RhYmxlX25leHQgPSB1bnN0YWJsZV9uZXh0O1xuZXhwb3J0cy51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbiA9IHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSB1bnN0YWJsZV9yZXF1ZXN0UGFpbnQ7XG5leHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSA9IHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayA9IHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX3Nob3VsZFlpZWxkID0gc2hvdWxkWWllbGRUb0hvc3Q7XG5leHBvcnRzLnVuc3RhYmxlX3dyYXBDYWxsYmFjayA9IHVuc3RhYmxlX3dyYXBDYWxsYmFjaztcbiAgICAgICAgICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG5pZiAoXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnICYmXG4gIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgPT09XG4gICAgJ2Z1bmN0aW9uJ1xuKSB7XG4gIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChuZXcgRXJyb3IoKSk7XG59XG4gICAgICAgIFxuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/scheduler/cjs/scheduler.development.js\n")); + +/***/ }), + +/***/ "./node_modules/scheduler/index.js": +/*!*****************************************!*\ + !*** ./node_modules/scheduler/index.js ***! + \*****************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ \"./node_modules/scheduler/cjs/scheduler.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSxtSUFBMEQ7QUFDNUQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3NjaGVkdWxlci9pbmRleC5qcz9jN2NjIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/scheduler/index.js\n")); + +/***/ }), + +/***/ "./node_modules/@swc/helpers/esm/_interop_require_default.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_interop_require_default.js ***! + \*******************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: function() { return /* binding */ _interop_require_default; },\n/* harmony export */ _interop_require_default: function() { return /* binding */ _interop_require_default; }\n/* harmony export */ });\nfunction _interop_require_default(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQLDJDQUEyQztBQUMzQztBQUN5QyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuanM/ZTQ2OSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9O1xufVxuZXhwb3J0IHsgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/esm/_interop_require_default.js\n")); + +/***/ }), + +/***/ "./node_modules/@swc/helpers/esm/_interop_require_wildcard.js": +/*!********************************************************************!*\ + !*** ./node_modules/@swc/helpers/esm/_interop_require_wildcard.js ***! + \********************************************************************/ +/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ _: function() { return /* binding */ _interop_require_wildcard; },\n/* harmony export */ _interop_require_wildcard: function() { return /* binding */ _interop_require_wildcard; }\n/* harmony export */ });\nfunction _getRequireWildcardCache(nodeInterop) {\n if (typeof WeakMap !== \"function\") return null;\n\n var cacheBabelInterop = new WeakMap();\n var cacheNodeInterop = new WeakMap();\n\n return (_getRequireWildcardCache = function(nodeInterop) {\n return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n if (!nodeInterop && obj && obj.__esModule) return obj;\n if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n var cache = _getRequireWildcardCache(nodeInterop);\n\n if (cache && cache.has(obj)) return cache.get(obj);\n\n var newObj = {};\n var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n for (var key in obj) {\n if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n else newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n\n if (cache) cache.set(obj, newObj);\n\n return newObj;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0EsdUZBQXVGOztBQUV2Rjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDMEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZC5qcz82MmVhIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkge1xuICAgIGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcblxuICAgIHZhciBjYWNoZUJhYmVsSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgdmFyIGNhY2hlTm9kZUludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbihub2RlSW50ZXJvcCkge1xuICAgICAgICByZXR1cm4gbm9kZUludGVyb3AgPyBjYWNoZU5vZGVJbnRlcm9wIDogY2FjaGVCYWJlbEludGVyb3A7XG4gICAgfSkobm9kZUludGVyb3ApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQob2JqLCBub2RlSW50ZXJvcCkge1xuICAgIGlmICghbm9kZUludGVyb3AgJiYgb2JqICYmIG9iai5fX2VzTW9kdWxlKSByZXR1cm4gb2JqO1xuICAgIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB7IGRlZmF1bHQ6IG9iaiB9O1xuXG4gICAgdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKG5vZGVJbnRlcm9wKTtcblxuICAgIGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgcmV0dXJuIGNhY2hlLmdldChvYmopO1xuXG4gICAgdmFyIG5ld09iaiA9IHt9O1xuICAgIHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKGtleSAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpO1xuICAgICAgICAgICAgZWxzZSBuZXdPYmpba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmV3T2JqLmRlZmF1bHQgPSBvYmo7XG5cbiAgICBpZiAoY2FjaGUpIGNhY2hlLnNldChvYmosIG5ld09iaik7XG5cbiAgICByZXR1cm4gbmV3T2JqO1xufVxuZXhwb3J0IHsgX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZCBhcyBfIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\n")); + +/***/ }) + +}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } +/******/ var __webpack_exports__ = (__webpack_exec__("./node_modules/next/dist/client/next-dev.js")); +/******/ _N_E = __webpack_exports__; +/******/ } +]); \ No newline at end of file diff --git a/frontend/.next/static/chunks/pages/_app.js b/frontend/.next/static/chunks/pages/_app.js new file mode 100644 index 000000000..5faf5cfe6 --- /dev/null +++ b/frontend/.next/static/chunks/pages/_app.js @@ -0,0 +1,28 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["pages/_app"],{ + +/***/ "./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!": +/*!********************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app! ***! + \********************************************************************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_app\",\n function () {\n return __webpack_require__(/*! next/dist/pages/_app */ \"./node_modules/next/dist/pages/_app.js\");\n }\n ]);\n if(true) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_app\"])\n });\n }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWNsaWVudC1wYWdlcy1sb2FkZXIuanM/YWJzb2x1dGVQYWdlUGF0aD1uZXh0JTJGZGlzdCUyRnBhZ2VzJTJGX2FwcCZwYWdlPSUyRl9hcHAhIiwibWFwcGluZ3MiOiI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFPLENBQUMsb0VBQXNCO0FBQzdDO0FBQ0E7QUFDQSxPQUFPLElBQVU7QUFDakIsTUFBTSxVQUFVO0FBQ2hCO0FBQ0EsT0FBTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLz85NDE3Il0sInNvdXJjZXNDb250ZW50IjpbIlxuICAgICh3aW5kb3cuX19ORVhUX1AgPSB3aW5kb3cuX19ORVhUX1AgfHwgW10pLnB1c2goW1xuICAgICAgXCIvX2FwcFwiLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZShcIm5leHQvZGlzdC9wYWdlcy9fYXBwXCIpO1xuICAgICAgfVxuICAgIF0pO1xuICAgIGlmKG1vZHVsZS5ob3QpIHtcbiAgICAgIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdpbmRvdy5fX05FWFRfUC5wdXNoKFtcIi9fYXBwXCJdKVxuICAgICAgfSk7XG4gICAgfVxuICAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!\n")); + +/***/ }) + +}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } +/******/ __webpack_require__.O(0, ["main"], function() { return __webpack_exec__("./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"), __webpack_exec__("./node_modules/next/dist/client/router.js"); }); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ _N_E = __webpack_exports__; +/******/ } +]); \ No newline at end of file diff --git a/frontend/.next/static/chunks/pages/_error.js b/frontend/.next/static/chunks/pages/_error.js new file mode 100644 index 000000000..8b12bd353 --- /dev/null +++ b/frontend/.next/static/chunks/pages/_error.js @@ -0,0 +1,28 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["pages/_error"],{ + +/***/ "./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!": +/*!************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error! ***! + \************************************************************************************************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/_error\",\n function () {\n return __webpack_require__(/*! next/dist/pages/_error */ \"./node_modules/next/dist/pages/_error.js\");\n }\n ]);\n if(true) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/_error\"])\n });\n }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL3dlYnBhY2svbG9hZGVycy9uZXh0LWNsaWVudC1wYWdlcy1sb2FkZXIuanM/YWJzb2x1dGVQYWdlUGF0aD1uZXh0JTJGZGlzdCUyRnBhZ2VzJTJGX2Vycm9yJnBhZ2U9JTJGX2Vycm9yISIsIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLHdFQUF3QjtBQUMvQztBQUNBO0FBQ0EsT0FBTyxJQUFVO0FBQ2pCLE1BQU0sVUFBVTtBQUNoQjtBQUNBLE9BQU87QUFDUDtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8/MDgwMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcbiAgICAod2luZG93Ll9fTkVYVF9QID0gd2luZG93Ll9fTkVYVF9QIHx8IFtdKS5wdXNoKFtcbiAgICAgIFwiL19lcnJvclwiLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZShcIm5leHQvZGlzdC9wYWdlcy9fZXJyb3JcIik7XG4gICAgICB9XG4gICAgXSk7XG4gICAgaWYobW9kdWxlLmhvdCkge1xuICAgICAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2luZG93Ll9fTkVYVF9QLnB1c2goW1wiL19lcnJvclwiXSlcbiAgICAgIH0pO1xuICAgIH1cbiAgIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!\n")); + +/***/ }) + +}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } +/******/ __webpack_require__.O(0, ["pages/_app","main"], function() { return __webpack_exec__("./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"); }); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ _N_E = __webpack_exports__; +/******/ } +]); \ No newline at end of file diff --git a/frontend/.next/static/chunks/polyfills.js b/frontend/.next/static/chunks/polyfills.js new file mode 100644 index 000000000..3858b79f1 --- /dev/null +++ b/frontend/.next/static/chunks/polyfills.js @@ -0,0 +1 @@ +!function(){var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function e(t){var e={exports:{}};return t(e,e.exports),e.exports}var r=function(t){return t&&t.Math==Math&&t},n=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof t&&t)||Function("return this")(),o=function(t){try{return!!t()}catch(t){return!0}},i=!o(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}),a={}.propertyIsEnumerable,u=Object.getOwnPropertyDescriptor,s=u&&!a.call({1:2},1)?function(t){var e=u(this,t);return!!e&&e.enumerable}:a,c={f:s},f=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},l={}.toString,h=function(t){return l.call(t).slice(8,-1)},p="".split,d=o(function(){return!Object("z").propertyIsEnumerable(0)})?function(t){return"String"==h(t)?p.call(t,""):Object(t)}:Object,v=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},g=function(t){return d(v(t))},y=function(t){return"object"==typeof t?null!==t:"function"==typeof t},m=function(t,e){if(!y(t))return t;var r,n;if(e&&"function"==typeof(r=t.toString)&&!y(n=r.call(t)))return n;if("function"==typeof(r=t.valueOf)&&!y(n=r.call(t)))return n;if(!e&&"function"==typeof(r=t.toString)&&!y(n=r.call(t)))return n;throw TypeError("Can't convert object to primitive value")},b={}.hasOwnProperty,w=function(t,e){return b.call(t,e)},S=n.document,E=y(S)&&y(S.createElement),x=function(t){return E?S.createElement(t):{}},A=!i&&!o(function(){return 7!=Object.defineProperty(x("div"),"a",{get:function(){return 7}}).a}),O=Object.getOwnPropertyDescriptor,R={f:i?O:function(t,e){if(t=g(t),e=m(e,!0),A)try{return O(t,e)}catch(t){}if(w(t,e))return f(!c.f.call(t,e),t[e])}},j=function(t){if(!y(t))throw TypeError(String(t)+" is not an object");return t},P=Object.defineProperty,I={f:i?P:function(t,e,r){if(j(t),e=m(e,!0),j(r),A)try{return P(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},T=i?function(t,e,r){return I.f(t,e,f(1,r))}:function(t,e,r){return t[e]=r,t},k=function(t,e){try{T(n,t,e)}catch(r){n[t]=e}return e},L="__core-js_shared__",U=n[L]||k(L,{}),M=Function.toString;"function"!=typeof U.inspectSource&&(U.inspectSource=function(t){return M.call(t)});var _,N,C,F=U.inspectSource,B=n.WeakMap,D="function"==typeof B&&/native code/.test(F(B)),q=!1,z=e(function(t){(t.exports=function(t,e){return U[t]||(U[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.6.5",mode:"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})}),W=0,K=Math.random(),G=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++W+K).toString(36)},$=z("keys"),V=function(t){return $[t]||($[t]=G(t))},H={};if(D){var X=new(0,n.WeakMap),Y=X.get,J=X.has,Q=X.set;_=function(t,e){return Q.call(X,t,e),e},N=function(t){return Y.call(X,t)||{}},C=function(t){return J.call(X,t)}}else{var Z=V("state");H[Z]=!0,_=function(t,e){return T(t,Z,e),e},N=function(t){return w(t,Z)?t[Z]:{}},C=function(t){return w(t,Z)}}var tt,et={set:_,get:N,has:C,enforce:function(t){return C(t)?N(t):_(t,{})},getterFor:function(t){return function(e){var r;if(!y(e)||(r=N(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return r}}},rt=e(function(t){var e=et.get,r=et.enforce,o=String(String).split("String");(t.exports=function(t,e,i,a){var u=!!a&&!!a.unsafe,s=!!a&&!!a.enumerable,c=!!a&&!!a.noTargetGet;"function"==typeof i&&("string"!=typeof e||w(i,"name")||T(i,"name",e),r(i).source=o.join("string"==typeof e?e:"")),t!==n?(u?!c&&t[e]&&(s=!0):delete t[e],s?t[e]=i:T(t,e,i)):s?t[e]=i:k(e,i)})(Function.prototype,"toString",function(){return"function"==typeof this&&e(this).source||F(this)})}),nt=n,ot=function(t){return"function"==typeof t?t:void 0},it=function(t,e){return arguments.length<2?ot(nt[t])||ot(n[t]):nt[t]&&nt[t][e]||n[t]&&n[t][e]},at=Math.ceil,ut=Math.floor,st=function(t){return isNaN(t=+t)?0:(t>0?ut:at)(t)},ct=Math.min,ft=function(t){return t>0?ct(st(t),9007199254740991):0},lt=Math.max,ht=Math.min,pt=function(t,e){var r=st(t);return r<0?lt(r+e,0):ht(r,e)},dt=function(t){return function(e,r,n){var o,i=g(e),a=ft(i.length),u=pt(n,a);if(t&&r!=r){for(;a>u;)if((o=i[u++])!=o)return!0}else for(;a>u;u++)if((t||u in i)&&i[u]===r)return t||u||0;return!t&&-1}},vt={includes:dt(!0),indexOf:dt(!1)},gt=vt.indexOf,yt=function(t,e){var r,n=g(t),o=0,i=[];for(r in n)!w(H,r)&&w(n,r)&&i.push(r);for(;e.length>o;)w(n,r=e[o++])&&(~gt(i,r)||i.push(r));return i},mt=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],bt=mt.concat("length","prototype"),wt={f:Object.getOwnPropertyNames||function(t){return yt(t,bt)}},St={f:Object.getOwnPropertySymbols},Et=it("Reflect","ownKeys")||function(t){var e=wt.f(j(t)),r=St.f;return r?e.concat(r(t)):e},xt=function(t,e){for(var r=Et(e),n=I.f,o=R.f,i=0;i<r.length;i++){var a=r[i];w(t,a)||n(t,a,o(e,a))}},At=/#|\.prototype\./,Ot=function(t,e){var r=jt[Rt(t)];return r==It||r!=Pt&&("function"==typeof e?o(e):!!e)},Rt=Ot.normalize=function(t){return String(t).replace(At,".").toLowerCase()},jt=Ot.data={},Pt=Ot.NATIVE="N",It=Ot.POLYFILL="P",Tt=Ot,kt=R.f,Lt=function(t,e){var r,o,i,a,u,s=t.target,c=t.global,f=t.stat;if(r=c?n:f?n[s]||k(s,{}):(n[s]||{}).prototype)for(o in e){if(a=e[o],i=t.noTargetGet?(u=kt(r,o))&&u.value:r[o],!Tt(c?o:s+(f?".":"#")+o,t.forced)&&void 0!==i){if(typeof a==typeof i)continue;xt(a,i)}(t.sham||i&&i.sham)&&T(a,"sham",!0),rt(r,o,a,t)}},Ut=function(t){return Object(v(t))},Mt=Math.min,_t=[].copyWithin||function(t,e){var r=Ut(this),n=ft(r.length),o=pt(t,n),i=pt(e,n),a=arguments.length>2?arguments[2]:void 0,u=Mt((void 0===a?n:pt(a,n))-i,n-o),s=1;for(i<o&&o<i+u&&(s=-1,i+=u-1,o+=u-1);u-- >0;)i in r?r[o]=r[i]:delete r[o],o+=s,i+=s;return r},Nt=!!Object.getOwnPropertySymbols&&!o(function(){return!String(Symbol())}),Ct=Nt&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,Ft=z("wks"),Bt=n.Symbol,Dt=Ct?Bt:Bt&&Bt.withoutSetter||G,qt=function(t){return w(Ft,t)||(Ft[t]=Nt&&w(Bt,t)?Bt[t]:Dt("Symbol."+t)),Ft[t]},zt=Object.keys||function(t){return yt(t,mt)},Wt=i?Object.defineProperties:function(t,e){j(t);for(var r,n=zt(e),o=n.length,i=0;o>i;)I.f(t,r=n[i++],e[r]);return t},Kt=it("document","documentElement"),Gt=V("IE_PROTO"),$t=function(){},Vt=function(t){return"<script>"+t+"<\/script>"},Ht=function(){try{tt=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;Ht=tt?function(t){t.write(Vt("")),t.close();var e=t.parentWindow.Object;return t=null,e}(tt):((e=x("iframe")).style.display="none",Kt.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(Vt("document.F=Object")),t.close(),t.F);for(var r=mt.length;r--;)delete Ht.prototype[mt[r]];return Ht()};H[Gt]=!0;var Xt=Object.create||function(t,e){var r;return null!==t?($t.prototype=j(t),r=new $t,$t.prototype=null,r[Gt]=t):r=Ht(),void 0===e?r:Wt(r,e)},Yt=qt("unscopables"),Jt=Array.prototype;null==Jt[Yt]&&I.f(Jt,Yt,{configurable:!0,value:Xt(null)});var Qt=function(t){Jt[Yt][t]=!0};Lt({target:"Array",proto:!0},{copyWithin:_t}),Qt("copyWithin");var Zt=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t},te=function(t,e,r){if(Zt(t),void 0===e)return t;switch(r){case 0:return function(){return t.call(e)};case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,o){return t.call(e,r,n,o)}}return function(){return t.apply(e,arguments)}},ee=Function.call,re=function(t,e,r){return te(ee,n[t].prototype[e],r)};re("Array","copyWithin"),Lt({target:"Array",proto:!0},{fill:function(t){for(var e=Ut(this),r=ft(e.length),n=arguments.length,o=pt(n>1?arguments[1]:void 0,r),i=n>2?arguments[2]:void 0,a=void 0===i?r:pt(i,r);a>o;)e[o++]=t;return e}}),Qt("fill"),re("Array","fill");var ne=Array.isArray||function(t){return"Array"==h(t)},oe=qt("species"),ie=function(t,e){var r;return ne(t)&&("function"!=typeof(r=t.constructor)||r!==Array&&!ne(r.prototype)?y(r)&&null===(r=r[oe])&&(r=void 0):r=void 0),new(void 0===r?Array:r)(0===e?0:e)},ae=[].push,ue=function(t){var e=1==t,r=2==t,n=3==t,o=4==t,i=6==t,a=5==t||i;return function(u,s,c,f){for(var l,h,p=Ut(u),v=d(p),g=te(s,c,3),y=ft(v.length),m=0,b=f||ie,w=e?b(u,y):r?b(u,0):void 0;y>m;m++)if((a||m in v)&&(h=g(l=v[m],m,p),t))if(e)w[m]=h;else if(h)switch(t){case 3:return!0;case 5:return l;case 6:return m;case 2:ae.call(w,l)}else if(o)return!1;return i?-1:n||o?o:w}},se={forEach:ue(0),map:ue(1),filter:ue(2),some:ue(3),every:ue(4),find:ue(5),findIndex:ue(6)},ce=Object.defineProperty,fe={},le=function(t){throw t},he=function(t,e){if(w(fe,t))return fe[t];e||(e={});var r=[][t],n=!!w(e,"ACCESSORS")&&e.ACCESSORS,a=w(e,0)?e[0]:le,u=w(e,1)?e[1]:void 0;return fe[t]=!!r&&!o(function(){if(n&&!i)return!0;var t={length:-1};n?ce(t,1,{enumerable:!0,get:le}):t[1]=1,r.call(t,a,u)})},pe=se.find,de="find",ve=!0,ge=he(de);de in[]&&Array(1).find(function(){ve=!1}),Lt({target:"Array",proto:!0,forced:ve||!ge},{find:function(t){return pe(this,t,arguments.length>1?arguments[1]:void 0)}}),Qt(de),re("Array","find");var ye=se.findIndex,me="findIndex",be=!0,we=he(me);me in[]&&Array(1).findIndex(function(){be=!1}),Lt({target:"Array",proto:!0,forced:be||!we},{findIndex:function(t){return ye(this,t,arguments.length>1?arguments[1]:void 0)}}),Qt(me),re("Array","findIndex");var Se=function(t,e,r,n,o,i,a,u){for(var s,c=o,f=0,l=!!a&&te(a,u,3);f<n;){if(f in r){if(s=l?l(r[f],f,e):r[f],i>0&&ne(s))c=Se(t,e,s,ft(s.length),c,i-1)-1;else{if(c>=9007199254740991)throw TypeError("Exceed the acceptable array length");t[c]=s}c++}f++}return c},Ee=Se;Lt({target:"Array",proto:!0},{flatMap:function(t){var e,r=Ut(this),n=ft(r.length);return Zt(t),(e=ie(r,0)).length=Ee(e,r,r,n,0,1,t,arguments.length>1?arguments[1]:void 0),e}}),Qt("flatMap"),re("Array","flatMap"),Lt({target:"Array",proto:!0},{flat:function(){var t=arguments.length?arguments[0]:void 0,e=Ut(this),r=ft(e.length),n=ie(e,0);return n.length=Ee(n,e,e,r,0,void 0===t?1:st(t)),n}}),Qt("flat"),re("Array","flat");var xe,Ae,Oe,Re=function(t){return function(e,r){var n,o,i=String(v(e)),a=st(r),u=i.length;return a<0||a>=u?t?"":void 0:(n=i.charCodeAt(a))<55296||n>56319||a+1===u||(o=i.charCodeAt(a+1))<56320||o>57343?t?i.charAt(a):n:t?i.slice(a,a+2):o-56320+(n-55296<<10)+65536}},je={codeAt:Re(!1),charAt:Re(!0)},Pe=!o(function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}),Ie=V("IE_PROTO"),Te=Object.prototype,ke=Pe?Object.getPrototypeOf:function(t){return t=Ut(t),w(t,Ie)?t[Ie]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?Te:null},Le=qt("iterator"),Ue=!1;[].keys&&("next"in(Oe=[].keys())?(Ae=ke(ke(Oe)))!==Object.prototype&&(xe=Ae):Ue=!0),null==xe&&(xe={}),w(xe,Le)||T(xe,Le,function(){return this});var Me={IteratorPrototype:xe,BUGGY_SAFARI_ITERATORS:Ue},_e=I.f,Ne=qt("toStringTag"),Ce=function(t,e,r){t&&!w(t=r?t:t.prototype,Ne)&&_e(t,Ne,{configurable:!0,value:e})},Fe={},Be=Me.IteratorPrototype,De=function(){return this},qe=function(t,e,r){var n=e+" Iterator";return t.prototype=Xt(Be,{next:f(1,r)}),Ce(t,n,!1),Fe[n]=De,t},ze=function(t){if(!y(t)&&null!==t)throw TypeError("Can't set "+String(t)+" as a prototype");return t},We=Object.setPrototypeOf||("__proto__"in{}?function(){var t,e=!1,r={};try{(t=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(r,[]),e=r instanceof Array}catch(t){}return function(r,n){return j(r),ze(n),e?t.call(r,n):r.__proto__=n,r}}():void 0),Ke=Me.IteratorPrototype,Ge=Me.BUGGY_SAFARI_ITERATORS,$e=qt("iterator"),Ve="keys",He="values",Xe="entries",Ye=function(){return this},Je=function(t,e,r,n,o,i,a){qe(r,e,n);var u,s,c,f=function(t){if(t===o&&v)return v;if(!Ge&&t in p)return p[t];switch(t){case Ve:case He:case Xe:return function(){return new r(this,t)}}return function(){return new r(this)}},l=e+" Iterator",h=!1,p=t.prototype,d=p[$e]||p["@@iterator"]||o&&p[o],v=!Ge&&d||f(o),g="Array"==e&&p.entries||d;if(g&&(u=ke(g.call(new t)),Ke!==Object.prototype&&u.next&&(ke(u)!==Ke&&(We?We(u,Ke):"function"!=typeof u[$e]&&T(u,$e,Ye)),Ce(u,l,!0))),o==He&&d&&d.name!==He&&(h=!0,v=function(){return d.call(this)}),p[$e]!==v&&T(p,$e,v),Fe[e]=v,o)if(s={values:f(He),keys:i?v:f(Ve),entries:f(Xe)},a)for(c in s)(Ge||h||!(c in p))&&rt(p,c,s[c]);else Lt({target:e,proto:!0,forced:Ge||h},s);return s},Qe=je.charAt,Ze="String Iterator",tr=et.set,er=et.getterFor(Ze);Je(String,"String",function(t){tr(this,{type:Ze,string:String(t),index:0})},function(){var t,e=er(this),r=e.string,n=e.index;return n>=r.length?{value:void 0,done:!0}:(t=Qe(r,n),e.index+=t.length,{value:t,done:!1})});var rr=function(t,e,r,n){try{return n?e(j(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&j(o.call(t)),e}},nr=qt("iterator"),or=Array.prototype,ir=function(t){return void 0!==t&&(Fe.Array===t||or[nr]===t)},ar=function(t,e,r){var n=m(e);n in t?I.f(t,n,f(0,r)):t[n]=r},ur={};ur[qt("toStringTag")]="z";var sr="[object z]"===String(ur),cr=qt("toStringTag"),fr="Arguments"==h(function(){return arguments}()),lr=sr?h:function(t){var e,r,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),cr))?r:fr?h(e):"Object"==(n=h(e))&&"function"==typeof e.callee?"Arguments":n},hr=qt("iterator"),pr=function(t){if(null!=t)return t[hr]||t["@@iterator"]||Fe[lr(t)]},dr=function(t){var e,r,n,o,i,a,u=Ut(t),s="function"==typeof this?this:Array,c=arguments.length,f=c>1?arguments[1]:void 0,l=void 0!==f,h=pr(u),p=0;if(l&&(f=te(f,c>2?arguments[2]:void 0,2)),null==h||s==Array&&ir(h))for(r=new s(e=ft(u.length));e>p;p++)a=l?f(u[p],p):u[p],ar(r,p,a);else for(i=(o=h.call(u)).next,r=new s;!(n=i.call(o)).done;p++)a=l?rr(o,f,[n.value,p],!0):n.value,ar(r,p,a);return r.length=p,r},vr=qt("iterator"),gr=!1;try{var yr=0,mr={next:function(){return{done:!!yr++}},return:function(){gr=!0}};mr[vr]=function(){return this},Array.from(mr,function(){throw 2})}catch(t){}var br=function(t,e){if(!e&&!gr)return!1;var r=!1;try{var n={};n[vr]=function(){return{next:function(){return{done:r=!0}}}},t(n)}catch(t){}return r},wr=!br(function(t){Array.from(t)});Lt({target:"Array",stat:!0,forced:wr},{from:dr});var Sr=vt.includes,Er=he("indexOf",{ACCESSORS:!0,1:0});Lt({target:"Array",proto:!0,forced:!Er},{includes:function(t){return Sr(this,t,arguments.length>1?arguments[1]:void 0)}}),Qt("includes"),re("Array","includes");var xr="Array Iterator",Ar=et.set,Or=et.getterFor(xr),Rr=Je(Array,"Array",function(t,e){Ar(this,{type:xr,target:g(t),index:0,kind:e})},function(){var t=Or(this),e=t.target,r=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,{value:void 0,done:!0}):"keys"==r?{value:n,done:!1}:"values"==r?{value:e[n],done:!1}:{value:[n,e[n]],done:!1}},"values");Fe.Arguments=Fe.Array,Qt("keys"),Qt("values"),Qt("entries"),re("Array","values");var jr=o(function(){function t(){}return!(Array.of.call(t)instanceof t)});Lt({target:"Array",stat:!0,forced:jr},{of:function(){for(var t=0,e=arguments.length,r=new("function"==typeof this?this:Array)(e);e>t;)ar(r,t,arguments[t++]);return r.length=e,r}});var Pr=qt("hasInstance"),Ir=Function.prototype;Pr in Ir||I.f(Ir,Pr,{value:function(t){if("function"!=typeof this||!y(t))return!1;if(!y(this.prototype))return t instanceof this;for(;t=ke(t);)if(this.prototype===t)return!0;return!1}}),qt("hasInstance");var Tr=Function.prototype,kr=Tr.toString,Lr=/^\s*function ([^ (]*)/,Ur="name";i&&!(Ur in Tr)&&(0,I.f)(Tr,Ur,{configurable:!0,get:function(){try{return kr.call(this).match(Lr)[1]}catch(t){return""}}});var Mr=!o(function(){return Object.isExtensible(Object.preventExtensions({}))}),_r=e(function(t){var e=I.f,r=G("meta"),n=0,o=Object.isExtensible||function(){return!0},i=function(t){e(t,r,{value:{objectID:"O"+ ++n,weakData:{}}})},a=t.exports={REQUIRED:!1,fastKey:function(t,e){if(!y(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!w(t,r)){if(!o(t))return"F";if(!e)return"E";i(t)}return t[r].objectID},getWeakData:function(t,e){if(!w(t,r)){if(!o(t))return!0;if(!e)return!1;i(t)}return t[r].weakData},onFreeze:function(t){return Mr&&a.REQUIRED&&o(t)&&!w(t,r)&&i(t),t}};H[r]=!0}),Nr=e(function(t){var e=function(t,e){this.stopped=t,this.result=e},r=t.exports=function(t,r,n,o,i){var a,u,s,c,f,l,h,p=te(r,n,o?2:1);if(i)a=t;else{if("function"!=typeof(u=pr(t)))throw TypeError("Target is not iterable");if(ir(u)){for(s=0,c=ft(t.length);c>s;s++)if((f=o?p(j(h=t[s])[0],h[1]):p(t[s]))&&f instanceof e)return f;return new e(!1)}a=u.call(t)}for(l=a.next;!(h=l.call(a)).done;)if("object"==typeof(f=rr(a,p,h.value,o))&&f&&f instanceof e)return f;return new e(!1)};r.stop=function(t){return new e(!0,t)}}),Cr=function(t,e,r){if(!(t instanceof e))throw TypeError("Incorrect "+(r?r+" ":"")+"invocation");return t},Fr=function(t,e,r){var n,o;return We&&"function"==typeof(n=e.constructor)&&n!==r&&y(o=n.prototype)&&o!==r.prototype&&We(t,o),t},Br=function(t,e,r){var i=-1!==t.indexOf("Map"),a=-1!==t.indexOf("Weak"),u=i?"set":"add",s=n[t],c=s&&s.prototype,f=s,l={},h=function(t){var e=c[t];rt(c,t,"add"==t?function(t){return e.call(this,0===t?0:t),this}:"delete"==t?function(t){return!(a&&!y(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return a&&!y(t)?void 0:e.call(this,0===t?0:t)}:"has"==t?function(t){return!(a&&!y(t))&&e.call(this,0===t?0:t)}:function(t,r){return e.call(this,0===t?0:t,r),this})};if(Tt(t,"function"!=typeof s||!(a||c.forEach&&!o(function(){(new s).entries().next()}))))f=r.getConstructor(e,t,i,u),_r.REQUIRED=!0;else if(Tt(t,!0)){var p=new f,d=p[u](a?{}:-0,1)!=p,v=o(function(){p.has(1)}),g=br(function(t){new s(t)}),m=!a&&o(function(){for(var t=new s,e=5;e--;)t[u](e,e);return!t.has(-0)});g||((f=e(function(e,r){Cr(e,f,t);var n=Fr(new s,e,f);return null!=r&&Nr(r,n[u],n,i),n})).prototype=c,c.constructor=f),(v||m)&&(h("delete"),h("has"),i&&h("get")),(m||d)&&h(u),a&&c.clear&&delete c.clear}return l[t]=f,Lt({global:!0,forced:f!=s},l),Ce(f,t),a||r.setStrong(f,t,i),f},Dr=function(t,e,r){for(var n in e)rt(t,n,e[n],r);return t},qr=qt("species"),zr=function(t){var e=it(t);i&&e&&!e[qr]&&(0,I.f)(e,qr,{configurable:!0,get:function(){return this}})},Wr=I.f,Kr=_r.fastKey,Gr=et.set,$r=et.getterFor,Vr={getConstructor:function(t,e,r,n){var o=t(function(t,a){Cr(t,o,e),Gr(t,{type:e,index:Xt(null),first:void 0,last:void 0,size:0}),i||(t.size=0),null!=a&&Nr(a,t[n],t,r)}),a=$r(e),u=function(t,e,r){var n,o,u=a(t),c=s(t,e);return c?c.value=r:(u.last=c={index:o=Kr(e,!0),key:e,value:r,previous:n=u.last,next:void 0,removed:!1},u.first||(u.first=c),n&&(n.next=c),i?u.size++:t.size++,"F"!==o&&(u.index[o]=c)),t},s=function(t,e){var r,n=a(t),o=Kr(e);if("F"!==o)return n.index[o];for(r=n.first;r;r=r.next)if(r.key==e)return r};return Dr(o.prototype,{clear:function(){for(var t=a(this),e=t.index,r=t.first;r;)r.removed=!0,r.previous&&(r.previous=r.previous.next=void 0),delete e[r.index],r=r.next;t.first=t.last=void 0,i?t.size=0:this.size=0},delete:function(t){var e=this,r=a(e),n=s(e,t);if(n){var o=n.next,u=n.previous;delete r.index[n.index],n.removed=!0,u&&(u.next=o),o&&(o.previous=u),r.first==n&&(r.first=o),r.last==n&&(r.last=u),i?r.size--:e.size--}return!!n},forEach:function(t){for(var e,r=a(this),n=te(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.next:r.first;)for(n(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!s(this,t)}}),Dr(o.prototype,r?{get:function(t){var e=s(this,t);return e&&e.value},set:function(t,e){return u(this,0===t?0:t,e)}}:{add:function(t){return u(this,t=0===t?0:t,t)}}),i&&Wr(o.prototype,"size",{get:function(){return a(this).size}}),o},setStrong:function(t,e,r){var n=e+" Iterator",o=$r(e),i=$r(n);Je(t,e,function(t,e){Gr(this,{type:n,target:t,state:o(t),kind:e,last:void 0})},function(){for(var t=i(this),e=t.kind,r=t.last;r&&r.removed;)r=r.previous;return t.target&&(t.last=r=r?r.next:t.state.first)?"keys"==e?{value:r.key,done:!1}:"values"==e?{value:r.value,done:!1}:{value:[r.key,r.value],done:!1}:(t.target=void 0,{value:void 0,done:!0})},r?"entries":"values",!r,!0),zr(e)}},Hr=Br("Map",function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},Vr);sr||rt(Object.prototype,"toString",sr?{}.toString:function(){return"[object "+lr(this)+"]"},{unsafe:!0});var Xr={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},Yr=qt("iterator"),Jr=qt("toStringTag"),Qr=Rr.values;for(var Zr in Xr){var tn=n[Zr],en=tn&&tn.prototype;if(en){if(en[Yr]!==Qr)try{T(en,Yr,Qr)}catch(t){en[Yr]=Qr}if(en[Jr]||T(en,Jr,Zr),Xr[Zr])for(var rn in Rr)if(en[rn]!==Rr[rn])try{T(en,rn,Rr[rn])}catch(t){en[rn]=Rr[rn]}}}var nn=function(t){var e,r,n,o,i=arguments.length,a=i>1?arguments[1]:void 0;return Zt(this),(e=void 0!==a)&&Zt(a),null==t?new this:(r=[],e?(n=0,o=te(a,i>2?arguments[2]:void 0,2),Nr(t,function(t){r.push(o(t,n++))})):Nr(t,r.push,r),new this(r))};Lt({target:"Map",stat:!0},{from:nn});var on=function(){for(var t=arguments.length,e=new Array(t);t--;)e[t]=arguments[t];return new this(e)};Lt({target:"Map",stat:!0},{of:on});var an=function(){for(var t,e=j(this),r=Zt(e.delete),n=!0,o=0,i=arguments.length;o<i;o++)t=r.call(e,arguments[o]),n=n&&t;return!!n};Lt({target:"Map",proto:!0,real:!0,forced:q},{deleteAll:function(){return an.apply(this,arguments)}});var un=function(t){var e=pr(t);if("function"!=typeof e)throw TypeError(String(t)+" is not iterable");return j(e.call(t))},sn=function(t){return Map.prototype.entries.call(t)};Lt({target:"Map",proto:!0,real:!0,forced:q},{every:function(t){var e=j(this),r=sn(e),n=te(t,arguments.length>1?arguments[1]:void 0,3);return!Nr(r,function(t,r){if(!n(r,t,e))return Nr.stop()},void 0,!0,!0).stopped}});var cn=qt("species"),fn=function(t,e){var r,n=j(t).constructor;return void 0===n||null==(r=j(n)[cn])?e:Zt(r)};Lt({target:"Map",proto:!0,real:!0,forced:q},{filter:function(t){var e=j(this),r=sn(e),n=te(t,arguments.length>1?arguments[1]:void 0,3),o=new(fn(e,it("Map"))),i=Zt(o.set);return Nr(r,function(t,r){n(r,t,e)&&i.call(o,t,r)},void 0,!0,!0),o}}),Lt({target:"Map",proto:!0,real:!0,forced:q},{find:function(t){var e=j(this),r=sn(e),n=te(t,arguments.length>1?arguments[1]:void 0,3);return Nr(r,function(t,r){if(n(r,t,e))return Nr.stop(r)},void 0,!0,!0).result}}),Lt({target:"Map",proto:!0,real:!0,forced:q},{findKey:function(t){var e=j(this),r=sn(e),n=te(t,arguments.length>1?arguments[1]:void 0,3);return Nr(r,function(t,r){if(n(r,t,e))return Nr.stop(t)},void 0,!0,!0).result}}),Lt({target:"Map",stat:!0},{groupBy:function(t,e){var r=new this;Zt(e);var n=Zt(r.has),o=Zt(r.get),i=Zt(r.set);return Nr(t,function(t){var a=e(t);n.call(r,a)?o.call(r,a).push(t):i.call(r,a,[t])}),r}}),Lt({target:"Map",proto:!0,real:!0,forced:q},{includes:function(t){return Nr(sn(j(this)),function(e,r){if((n=r)===(o=t)||n!=n&&o!=o)return Nr.stop();var n,o},void 0,!0,!0).stopped}}),Lt({target:"Map",stat:!0},{keyBy:function(t,e){var r=new this;Zt(e);var n=Zt(r.set);return Nr(t,function(t){n.call(r,e(t),t)}),r}}),Lt({target:"Map",proto:!0,real:!0,forced:q},{keyOf:function(t){return Nr(sn(j(this)),function(e,r){if(r===t)return Nr.stop(e)},void 0,!0,!0).result}}),Lt({target:"Map",proto:!0,real:!0,forced:q},{mapKeys:function(t){var e=j(this),r=sn(e),n=te(t,arguments.length>1?arguments[1]:void 0,3),o=new(fn(e,it("Map"))),i=Zt(o.set);return Nr(r,function(t,r){i.call(o,n(r,t,e),r)},void 0,!0,!0),o}}),Lt({target:"Map",proto:!0,real:!0,forced:q},{mapValues:function(t){var e=j(this),r=sn(e),n=te(t,arguments.length>1?arguments[1]:void 0,3),o=new(fn(e,it("Map"))),i=Zt(o.set);return Nr(r,function(t,r){i.call(o,t,n(r,t,e))},void 0,!0,!0),o}}),Lt({target:"Map",proto:!0,real:!0,forced:q},{merge:function(t){for(var e=j(this),r=Zt(e.set),n=0;n<arguments.length;)Nr(arguments[n++],r,e,!0);return e}}),Lt({target:"Map",proto:!0,real:!0,forced:q},{reduce:function(t){var e=j(this),r=sn(e),n=arguments.length<2,o=n?void 0:arguments[1];if(Zt(t),Nr(r,function(r,i){n?(n=!1,o=i):o=t(o,i,r,e)},void 0,!0,!0),n)throw TypeError("Reduce of empty map with no initial value");return o}}),Lt({target:"Map",proto:!0,real:!0,forced:q},{some:function(t){var e=j(this),r=sn(e),n=te(t,arguments.length>1?arguments[1]:void 0,3);return Nr(r,function(t,r){if(n(r,t,e))return Nr.stop()},void 0,!0,!0).stopped}}),Lt({target:"Map",proto:!0,real:!0,forced:q},{update:function(t,e){var r=j(this),n=arguments.length;Zt(e);var o=r.has(t);if(!o&&n<3)throw TypeError("Updating absent value");var i=o?r.get(t):Zt(n>2?arguments[2]:void 0)(t,r);return r.set(t,e(i,t,r)),r}});var ln=function(t,e){var r,n=j(this),o=arguments.length>2?arguments[2]:void 0;if("function"!=typeof e&&"function"!=typeof o)throw TypeError("At least one callback required");return n.has(t)?(r=n.get(t),"function"==typeof e&&(r=e(r),n.set(t,r))):"function"==typeof o&&(r=o(),n.set(t,r)),r};Lt({target:"Map",proto:!0,real:!0,forced:q},{upsert:ln}),Lt({target:"Map",proto:!0,real:!0,forced:q},{updateOrInsert:ln});var hn="\t\n\v\f\r                 \u2028\u2029\ufeff",pn="["+hn+"]",dn=RegExp("^"+pn+pn+"*"),vn=RegExp(pn+pn+"*$"),gn=function(t){return function(e){var r=String(v(e));return 1&t&&(r=r.replace(dn,"")),2&t&&(r=r.replace(vn,"")),r}},yn={start:gn(1),end:gn(2),trim:gn(3)},mn=wt.f,bn=R.f,wn=I.f,Sn=yn.trim,En="Number",xn=n.Number,An=xn.prototype,On=h(Xt(An))==En,Rn=function(t){var e,r,n,o,i,a,u,s,c=m(t,!1);if("string"==typeof c&&c.length>2)if(43===(e=(c=Sn(c)).charCodeAt(0))||45===e){if(88===(r=c.charCodeAt(2))||120===r)return NaN}else if(48===e){switch(c.charCodeAt(1)){case 66:case 98:n=2,o=49;break;case 79:case 111:n=8,o=55;break;default:return+c}for(a=(i=c.slice(2)).length,u=0;u<a;u++)if((s=i.charCodeAt(u))<48||s>o)return NaN;return parseInt(i,n)}return+c};if(Tt(En,!xn(" 0o1")||!xn("0b1")||xn("+0x1"))){for(var jn,Pn=function(t){var e=arguments.length<1?0:t,r=this;return r instanceof Pn&&(On?o(function(){An.valueOf.call(r)}):h(r)!=En)?Fr(new xn(Rn(e)),r,Pn):Rn(e)},In=i?mn(xn):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),Tn=0;In.length>Tn;Tn++)w(xn,jn=In[Tn])&&!w(Pn,jn)&&wn(Pn,jn,bn(xn,jn));Pn.prototype=An,An.constructor=Pn,rt(n,En,Pn)}Lt({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)});var kn=n.isFinite;Lt({target:"Number",stat:!0},{isFinite:Number.isFinite||function(t){return"number"==typeof t&&kn(t)}});var Ln=Math.floor,Un=function(t){return!y(t)&&isFinite(t)&&Ln(t)===t};Lt({target:"Number",stat:!0},{isInteger:Un}),Lt({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});var Mn=Math.abs;Lt({target:"Number",stat:!0},{isSafeInteger:function(t){return Un(t)&&Mn(t)<=9007199254740991}}),Lt({target:"Number",stat:!0},{MAX_SAFE_INTEGER:9007199254740991}),Lt({target:"Number",stat:!0},{MIN_SAFE_INTEGER:-9007199254740991});var _n=yn.trim,Nn=n.parseFloat,Cn=1/Nn(hn+"-0")!=-Infinity?function(t){var e=_n(String(t)),r=Nn(e);return 0===r&&"-"==e.charAt(0)?-0:r}:Nn;Lt({target:"Number",stat:!0,forced:Number.parseFloat!=Cn},{parseFloat:Cn});var Fn=yn.trim,Bn=n.parseInt,Dn=/^[+-]?0[Xx]/,qn=8!==Bn(hn+"08")||22!==Bn(hn+"0x16")?function(t,e){var r=Fn(String(t));return Bn(r,e>>>0||(Dn.test(r)?16:10))}:Bn;Lt({target:"Number",stat:!0,forced:Number.parseInt!=qn},{parseInt:qn});var zn=c.f,Wn=function(t){return function(e){for(var r,n=g(e),o=zt(n),a=o.length,u=0,s=[];a>u;)r=o[u++],i&&!zn.call(n,r)||s.push(t?[r,n[r]]:n[r]);return s}},Kn={entries:Wn(!0),values:Wn(!1)},Gn=Kn.entries;Lt({target:"Object",stat:!0},{entries:function(t){return Gn(t)}}),Lt({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(t){for(var e,r,n=g(t),o=R.f,i=Et(n),a={},u=0;i.length>u;)void 0!==(r=o(n,e=i[u++]))&&ar(a,e,r);return a}});var $n=o(function(){zt(1)});Lt({target:"Object",stat:!0,forced:$n},{keys:function(t){return zt(Ut(t))}});var Vn=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e};Lt({target:"Object",stat:!0},{is:Vn});var Hn=Kn.values;Lt({target:"Object",stat:!0},{values:function(t){return Hn(t)}});var Xn=it("Reflect","apply"),Yn=Function.apply,Jn=!o(function(){Xn(function(){})});Lt({target:"Reflect",stat:!0,forced:Jn},{apply:function(t,e,r){return Zt(t),j(r),Xn?Xn(t,e,r):Yn.call(t,e,r)}});var Qn=[].slice,Zn={},to=function(t,e,r){if(!(e in Zn)){for(var n=[],o=0;o<e;o++)n[o]="a["+o+"]";Zn[e]=Function("C,a","return new C("+n.join(",")+")")}return Zn[e](t,r)},eo=Function.bind||function(t){var e=Zt(this),r=Qn.call(arguments,1),n=function(){var o=r.concat(Qn.call(arguments));return this instanceof n?to(e,o.length,o):e.apply(t,o)};return y(e.prototype)&&(n.prototype=e.prototype),n},ro=it("Reflect","construct"),no=o(function(){function t(){}return!(ro(function(){},[],t)instanceof t)}),oo=!o(function(){ro(function(){})}),io=no||oo;Lt({target:"Reflect",stat:!0,forced:io,sham:io},{construct:function(t,e){Zt(t),j(e);var r=arguments.length<3?t:Zt(arguments[2]);if(oo&&!no)return ro(t,e,r);if(t==r){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var n=[null];return n.push.apply(n,e),new(eo.apply(t,n))}var o=r.prototype,i=Xt(y(o)?o:Object.prototype),a=Function.apply.call(t,i,e);return y(a)?a:i}});var ao=o(function(){Reflect.defineProperty(I.f({},1,{value:1}),1,{value:2})});Lt({target:"Reflect",stat:!0,forced:ao,sham:!i},{defineProperty:function(t,e,r){j(t);var n=m(e,!0);j(r);try{return I.f(t,n,r),!0}catch(t){return!1}}});var uo=R.f;Lt({target:"Reflect",stat:!0},{deleteProperty:function(t,e){var r=uo(j(t),e);return!(r&&!r.configurable)&&delete t[e]}}),Lt({target:"Reflect",stat:!0},{get:function t(e,r){var n,o,i=arguments.length<3?e:arguments[2];return j(e)===i?e[r]:(n=R.f(e,r))?w(n,"value")?n.value:void 0===n.get?void 0:n.get.call(i):y(o=ke(e))?t(o,r,i):void 0}}),Lt({target:"Reflect",stat:!0,sham:!i},{getOwnPropertyDescriptor:function(t,e){return R.f(j(t),e)}}),Lt({target:"Reflect",stat:!0,sham:!Pe},{getPrototypeOf:function(t){return ke(j(t))}}),Lt({target:"Reflect",stat:!0},{has:function(t,e){return e in t}});var so=Object.isExtensible;Lt({target:"Reflect",stat:!0},{isExtensible:function(t){return j(t),!so||so(t)}}),Lt({target:"Reflect",stat:!0},{ownKeys:Et}),Lt({target:"Reflect",stat:!0,sham:!Mr},{preventExtensions:function(t){j(t);try{var e=it("Object","preventExtensions");return e&&e(t),!0}catch(t){return!1}}});var co=o(function(){var t=I.f({},"a",{configurable:!0});return!1!==Reflect.set(ke(t),"a",1,t)});Lt({target:"Reflect",stat:!0,forced:co},{set:function t(e,r,n){var o,i,a=arguments.length<4?e:arguments[3],u=R.f(j(e),r);if(!u){if(y(i=ke(e)))return t(i,r,n,a);u=f(0)}if(w(u,"value")){if(!1===u.writable||!y(a))return!1;if(o=R.f(a,r)){if(o.get||o.set||!1===o.writable)return!1;o.value=n,I.f(a,r,o)}else I.f(a,r,f(0,n));return!0}return void 0!==u.set&&(u.set.call(a,n),!0)}}),We&&Lt({target:"Reflect",stat:!0},{setPrototypeOf:function(t,e){j(t),ze(e);try{return We(t,e),!0}catch(t){return!1}}});var fo=_r.getWeakData,lo=et.set,ho=et.getterFor,po=se.find,vo=se.findIndex,go=0,yo=function(t){return t.frozen||(t.frozen=new mo)},mo=function(){this.entries=[]},bo=function(t,e){return po(t.entries,function(t){return t[0]===e})};mo.prototype={get:function(t){var e=bo(this,t);if(e)return e[1]},has:function(t){return!!bo(this,t)},set:function(t,e){var r=bo(this,t);r?r[1]=e:this.entries.push([t,e])},delete:function(t){var e=vo(this.entries,function(e){return e[0]===t});return~e&&this.entries.splice(e,1),!!~e}};var wo={getConstructor:function(t,e,r,n){var o=t(function(t,i){Cr(t,o,e),lo(t,{type:e,id:go++,frozen:void 0}),null!=i&&Nr(i,t[n],t,r)}),i=ho(e),a=function(t,e,r){var n=i(t),o=fo(j(e),!0);return!0===o?yo(n).set(e,r):o[n.id]=r,t};return Dr(o.prototype,{delete:function(t){var e=i(this);if(!y(t))return!1;var r=fo(t);return!0===r?yo(e).delete(t):r&&w(r,e.id)&&delete r[e.id]},has:function(t){var e=i(this);if(!y(t))return!1;var r=fo(t);return!0===r?yo(e).has(t):r&&w(r,e.id)}}),Dr(o.prototype,r?{get:function(t){var e=i(this);if(y(t)){var r=fo(t);return!0===r?yo(e).get(t):r?r[e.id]:void 0}},set:function(t,e){return a(this,t,e)}}:{add:function(t){return a(this,t,!0)}}),o}},So=e(function(t){var e,r=et.enforce,o=!n.ActiveXObject&&"ActiveXObject"in n,i=Object.isExtensible,a=function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},u=t.exports=Br("WeakMap",a,wo);if(D&&o){e=wo.getConstructor(a,"WeakMap",!0),_r.REQUIRED=!0;var s=u.prototype,c=s.delete,f=s.has,l=s.get,h=s.set;Dr(s,{delete:function(t){if(y(t)&&!i(t)){var n=r(this);return n.frozen||(n.frozen=new e),c.call(this,t)||n.frozen.delete(t)}return c.call(this,t)},has:function(t){if(y(t)&&!i(t)){var n=r(this);return n.frozen||(n.frozen=new e),f.call(this,t)||n.frozen.has(t)}return f.call(this,t)},get:function(t){if(y(t)&&!i(t)){var n=r(this);return n.frozen||(n.frozen=new e),f.call(this,t)?l.call(this,t):n.frozen.get(t)}return l.call(this,t)},set:function(t,n){if(y(t)&&!i(t)){var o=r(this);o.frozen||(o.frozen=new e),f.call(this,t)?h.call(this,t,n):o.frozen.set(t,n)}else h.call(this,t,n);return this}})}}),Eo=z("metadata"),xo=Eo.store||(Eo.store=new So),Ao=function(t,e,r){var n=xo.get(t);if(!n){if(!r)return;xo.set(t,n=new Hr)}var o=n.get(e);if(!o){if(!r)return;n.set(e,o=new Hr)}return o},Oo={store:xo,getMap:Ao,has:function(t,e,r){var n=Ao(e,r,!1);return void 0!==n&&n.has(t)},get:function(t,e,r){var n=Ao(e,r,!1);return void 0===n?void 0:n.get(t)},set:function(t,e,r,n){Ao(r,n,!0).set(t,e)},keys:function(t,e){var r=Ao(t,e,!1),n=[];return r&&r.forEach(function(t,e){n.push(e)}),n},toKey:function(t){return void 0===t||"symbol"==typeof t?t:String(t)}},Ro=Oo.toKey,jo=Oo.set;Lt({target:"Reflect",stat:!0},{defineMetadata:function(t,e,r){var n=arguments.length<4?void 0:Ro(arguments[3]);jo(t,e,j(r),n)}});var Po=Oo.toKey,Io=Oo.getMap,To=Oo.store;Lt({target:"Reflect",stat:!0},{deleteMetadata:function(t,e){var r=arguments.length<3?void 0:Po(arguments[2]),n=Io(j(e),r,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var o=To.get(e);return o.delete(r),!!o.size||To.delete(e)}});var ko=Oo.has,Lo=Oo.get,Uo=Oo.toKey,Mo=function(t,e,r){if(ko(t,e,r))return Lo(t,e,r);var n=ke(e);return null!==n?Mo(t,n,r):void 0};Lt({target:"Reflect",stat:!0},{getMetadata:function(t,e){var r=arguments.length<3?void 0:Uo(arguments[2]);return Mo(t,j(e),r)}});var _o=Br("Set",function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},Vr),No=Oo.keys,Co=Oo.toKey,Fo=function(t,e){var r=No(t,e),n=ke(t);if(null===n)return r;var o,i,a=Fo(n,e);return a.length?r.length?(o=new _o(r.concat(a)),Nr(o,(i=[]).push,i),i):a:r};Lt({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var e=arguments.length<2?void 0:Co(arguments[1]);return Fo(j(t),e)}});var Bo=Oo.get,Do=Oo.toKey;Lt({target:"Reflect",stat:!0},{getOwnMetadata:function(t,e){var r=arguments.length<3?void 0:Do(arguments[2]);return Bo(t,j(e),r)}});var qo=Oo.keys,zo=Oo.toKey;Lt({target:"Reflect",stat:!0},{getOwnMetadataKeys:function(t){var e=arguments.length<2?void 0:zo(arguments[1]);return qo(j(t),e)}});var Wo=Oo.has,Ko=Oo.toKey,Go=function(t,e,r){if(Wo(t,e,r))return!0;var n=ke(e);return null!==n&&Go(t,n,r)};Lt({target:"Reflect",stat:!0},{hasMetadata:function(t,e){var r=arguments.length<3?void 0:Ko(arguments[2]);return Go(t,j(e),r)}});var $o=Oo.has,Vo=Oo.toKey;Lt({target:"Reflect",stat:!0},{hasOwnMetadata:function(t,e){var r=arguments.length<3?void 0:Vo(arguments[2]);return $o(t,j(e),r)}});var Ho=Oo.toKey,Xo=Oo.set;Lt({target:"Reflect",stat:!0},{metadata:function(t,e){return function(r,n){Xo(t,e,j(r),Ho(n))}}});var Yo=qt("match"),Jo=function(t){var e;return y(t)&&(void 0!==(e=t[Yo])?!!e:"RegExp"==h(t))},Qo=function(){var t=j(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e};function Zo(t,e){return RegExp(t,e)}var ti=o(function(){var t=Zo("a","y");return t.lastIndex=2,null!=t.exec("abcd")}),ei=o(function(){var t=Zo("^r","gy");return t.lastIndex=2,null!=t.exec("str")}),ri={UNSUPPORTED_Y:ti,BROKEN_CARET:ei},ni=I.f,oi=wt.f,ii=et.set,ai=qt("match"),ui=n.RegExp,si=ui.prototype,ci=/a/g,fi=/a/g,li=new ui(ci)!==ci,hi=ri.UNSUPPORTED_Y;if(i&&Tt("RegExp",!li||hi||o(function(){return fi[ai]=!1,ui(ci)!=ci||ui(fi)==fi||"/a/i"!=ui(ci,"i")}))){for(var pi=function(t,e){var r,n=this instanceof pi,o=Jo(t),i=void 0===e;if(!n&&o&&t.constructor===pi&&i)return t;li?o&&!i&&(t=t.source):t instanceof pi&&(i&&(e=Qo.call(t)),t=t.source),hi&&(r=!!e&&e.indexOf("y")>-1)&&(e=e.replace(/y/g,""));var a=Fr(li?new ui(t,e):ui(t,e),n?this:si,pi);return hi&&r&&ii(a,{sticky:r}),a},di=function(t){t in pi||ni(pi,t,{configurable:!0,get:function(){return ui[t]},set:function(e){ui[t]=e}})},vi=oi(ui),gi=0;vi.length>gi;)di(vi[gi++]);si.constructor=pi,pi.prototype=si,rt(n,"RegExp",pi)}zr("RegExp");var yi="toString",mi=RegExp.prototype,bi=mi.toString;(o(function(){return"/a/b"!=bi.call({source:"a",flags:"b"})})||bi.name!=yi)&&rt(RegExp.prototype,yi,function(){var t=j(this),e=String(t.source),r=t.flags;return"/"+e+"/"+String(void 0===r&&t instanceof RegExp&&!("flags"in mi)?Qo.call(t):r)},{unsafe:!0});var wi=RegExp.prototype.exec,Si=String.prototype.replace,Ei=wi,xi=function(){var t=/a/,e=/b*/g;return wi.call(t,"a"),wi.call(e,"a"),0!==t.lastIndex||0!==e.lastIndex}(),Ai=ri.UNSUPPORTED_Y||ri.BROKEN_CARET,Oi=void 0!==/()??/.exec("")[1];(xi||Oi||Ai)&&(Ei=function(t){var e,r,n,o,i=this,a=Ai&&i.sticky,u=Qo.call(i),s=i.source,c=0,f=t;return a&&(-1===(u=u.replace("y","")).indexOf("g")&&(u+="g"),f=String(t).slice(i.lastIndex),i.lastIndex>0&&(!i.multiline||i.multiline&&"\n"!==t[i.lastIndex-1])&&(s="(?: "+s+")",f=" "+f,c++),r=new RegExp("^(?:"+s+")",u)),Oi&&(r=new RegExp("^"+s+"$(?!\\s)",u)),xi&&(e=i.lastIndex),n=wi.call(a?r:i,f),a?n?(n.input=n.input.slice(c),n[0]=n[0].slice(c),n.index=i.lastIndex,i.lastIndex+=n[0].length):i.lastIndex=0:xi&&n&&(i.lastIndex=i.global?n.index+n[0].length:e),Oi&&n&&n.length>1&&Si.call(n[0],r,function(){for(o=1;o<arguments.length-2;o++)void 0===arguments[o]&&(n[o]=void 0)}),n});var Ri=Ei;Lt({target:"RegExp",proto:!0,forced:/./.exec!==Ri},{exec:Ri}),i&&("g"!=/./g.flags||ri.UNSUPPORTED_Y)&&I.f(RegExp.prototype,"flags",{configurable:!0,get:Qo});var ji=et.get,Pi=RegExp.prototype;i&&ri.UNSUPPORTED_Y&&(0,I.f)(RegExp.prototype,"sticky",{configurable:!0,get:function(){if(this!==Pi){if(this instanceof RegExp)return!!ji(this).sticky;throw TypeError("Incompatible receiver, RegExp required")}}});var Ii,Ti,ki=(Ii=!1,(Ti=/[ac]/).exec=function(){return Ii=!0,/./.exec.apply(this,arguments)},!0===Ti.test("abc")&&Ii),Li=/./.test;Lt({target:"RegExp",proto:!0,forced:!ki},{test:function(t){if("function"!=typeof this.exec)return Li.call(this,t);var e=this.exec(t);if(null!==e&&!y(e))throw new Error("RegExp exec method returned something other than an Object or null");return!!e}});var Ui=qt("species"),Mi=!o(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")}),_i="$0"==="a".replace(/./,"$0"),Ni=qt("replace"),Ci=!!/./[Ni]&&""===/./[Ni]("a","$0"),Fi=!o(function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2!==r.length||"a"!==r[0]||"b"!==r[1]}),Bi=function(t,e,r,n){var i=qt(t),a=!o(function(){var e={};return e[i]=function(){return 7},7!=""[t](e)}),u=a&&!o(function(){var e=!1,r=/a/;return"split"===t&&((r={}).constructor={},r.constructor[Ui]=function(){return r},r.flags="",r[i]=/./[i]),r.exec=function(){return e=!0,null},r[i](""),!e});if(!a||!u||"replace"===t&&(!Mi||!_i||Ci)||"split"===t&&!Fi){var s=/./[i],c=r(i,""[t],function(t,e,r,n,o){return e.exec===Ri?a&&!o?{done:!0,value:s.call(e,r,n)}:{done:!0,value:t.call(r,e,n)}:{done:!1}},{REPLACE_KEEPS_$0:_i,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:Ci}),f=c[1];rt(String.prototype,t,c[0]),rt(RegExp.prototype,i,2==e?function(t,e){return f.call(t,this,e)}:function(t){return f.call(t,this)})}n&&T(RegExp.prototype[i],"sham",!0)},Di=je.charAt,qi=function(t,e,r){return e+(r?Di(t,e).length:1)},zi=function(t,e){var r=t.exec;if("function"==typeof r){var n=r.call(t,e);if("object"!=typeof n)throw TypeError("RegExp exec method returned something other than an Object or null");return n}if("RegExp"!==h(t))throw TypeError("RegExp#exec called on incompatible receiver");return Ri.call(t,e)};Bi("match",1,function(t,e,r){return[function(e){var r=v(this),n=null==e?void 0:e[t];return void 0!==n?n.call(e,r):new RegExp(e)[t](String(r))},function(t){var n=r(e,t,this);if(n.done)return n.value;var o=j(t),i=String(this);if(!o.global)return zi(o,i);var a=o.unicode;o.lastIndex=0;for(var u,s=[],c=0;null!==(u=zi(o,i));){var f=String(u[0]);s[c]=f,""===f&&(o.lastIndex=qi(i,ft(o.lastIndex),a)),c++}return 0===c?null:s}]});var Wi=Math.max,Ki=Math.min,Gi=Math.floor,$i=/\$([$&'`]|\d\d?|<[^>]*>)/g,Vi=/\$([$&'`]|\d\d?)/g;Bi("replace",2,function(t,e,r,n){var o=n.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,i=n.REPLACE_KEEPS_$0,a=o?"$":"$0";return[function(r,n){var o=v(this),i=null==r?void 0:r[t];return void 0!==i?i.call(r,o,n):e.call(String(o),r,n)},function(t,n){if(!o&&i||"string"==typeof n&&-1===n.indexOf(a)){var s=r(e,t,this,n);if(s.done)return s.value}var c=j(t),f=String(this),l="function"==typeof n;l||(n=String(n));var h=c.global;if(h){var p=c.unicode;c.lastIndex=0}for(var d=[];;){var v=zi(c,f);if(null===v)break;if(d.push(v),!h)break;""===String(v[0])&&(c.lastIndex=qi(f,ft(c.lastIndex),p))}for(var g,y="",m=0,b=0;b<d.length;b++){v=d[b];for(var w=String(v[0]),S=Wi(Ki(st(v.index),f.length),0),E=[],x=1;x<v.length;x++)E.push(void 0===(g=v[x])?g:String(g));var A=v.groups;if(l){var O=[w].concat(E,S,f);void 0!==A&&O.push(A);var R=String(n.apply(void 0,O))}else R=u(w,f,S,E,A,n);S>=m&&(y+=f.slice(m,S)+R,m=S+w.length)}return y+f.slice(m)}];function u(t,r,n,o,i,a){var u=n+t.length,s=o.length,c=Vi;return void 0!==i&&(i=Ut(i),c=$i),e.call(a,c,function(e,a){var c;switch(a.charAt(0)){case"$":return"$";case"&":return t;case"`":return r.slice(0,n);case"'":return r.slice(u);case"<":c=i[a.slice(1,-1)];break;default:var f=+a;if(0===f)return e;if(f>s){var l=Gi(f/10);return 0===l?e:l<=s?void 0===o[l-1]?a.charAt(1):o[l-1]+a.charAt(1):e}c=o[f-1]}return void 0===c?"":c})}}),Bi("search",1,function(t,e,r){return[function(e){var r=v(this),n=null==e?void 0:e[t];return void 0!==n?n.call(e,r):new RegExp(e)[t](String(r))},function(t){var n=r(e,t,this);if(n.done)return n.value;var o=j(t),i=String(this),a=o.lastIndex;Vn(a,0)||(o.lastIndex=0);var u=zi(o,i);return Vn(o.lastIndex,a)||(o.lastIndex=a),null===u?-1:u.index}]});var Hi=[].push,Xi=Math.min,Yi=4294967295,Ji=!o(function(){return!RegExp(Yi,"y")});Bi("split",2,function(t,e,r){var n;return n="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,r){var n=String(v(this)),o=void 0===r?Yi:r>>>0;if(0===o)return[];if(void 0===t)return[n];if(!Jo(t))return e.call(n,t,o);for(var i,a,u,s=[],c=0,f=new RegExp(t.source,(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":"")+"g");(i=Ri.call(f,n))&&!((a=f.lastIndex)>c&&(s.push(n.slice(c,i.index)),i.length>1&&i.index<n.length&&Hi.apply(s,i.slice(1)),u=i[0].length,c=a,s.length>=o));)f.lastIndex===i.index&&f.lastIndex++;return c===n.length?!u&&f.test("")||s.push(""):s.push(n.slice(c)),s.length>o?s.slice(0,o):s}:"0".split(void 0,0).length?function(t,r){return void 0===t&&0===r?[]:e.call(this,t,r)}:e,[function(e,r){var o=v(this),i=null==e?void 0:e[t];return void 0!==i?i.call(e,o,r):n.call(String(o),e,r)},function(t,o){var i=r(n,t,this,o,n!==e);if(i.done)return i.value;var a=j(t),u=String(this),s=fn(a,RegExp),c=a.unicode,f=new s(Ji?a:"^(?:"+a.source+")",(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.unicode?"u":"")+(Ji?"y":"g")),l=void 0===o?Yi:o>>>0;if(0===l)return[];if(0===u.length)return null===zi(f,u)?[u]:[];for(var h=0,p=0,d=[];p<u.length;){f.lastIndex=Ji?p:0;var v,g=zi(f,Ji?u:u.slice(p));if(null===g||(v=Xi(ft(f.lastIndex+(Ji?0:p)),u.length))===h)p=qi(u,p,c);else{if(d.push(u.slice(h,p)),d.length===l)return d;for(var y=1;y<=g.length-1;y++)if(d.push(g[y]),d.length===l)return d;p=h=v}}return d.push(u.slice(h)),d}]},!Ji),Lt({target:"Set",stat:!0},{from:nn}),Lt({target:"Set",stat:!0},{of:on});var Qi=function(){for(var t=j(this),e=Zt(t.add),r=0,n=arguments.length;r<n;r++)e.call(t,arguments[r]);return t};Lt({target:"Set",proto:!0,real:!0,forced:q},{addAll:function(){return Qi.apply(this,arguments)}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{deleteAll:function(){return an.apply(this,arguments)}});var Zi=function(t){return Set.prototype.values.call(t)};Lt({target:"Set",proto:!0,real:!0,forced:q},{every:function(t){var e=j(this),r=Zi(e),n=te(t,arguments.length>1?arguments[1]:void 0,3);return!Nr(r,function(t){if(!n(t,t,e))return Nr.stop()},void 0,!1,!0).stopped}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{difference:function(t){var e=j(this),r=new(fn(e,it("Set")))(e),n=Zt(r.delete);return Nr(t,function(t){n.call(r,t)}),r}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{filter:function(t){var e=j(this),r=Zi(e),n=te(t,arguments.length>1?arguments[1]:void 0,3),o=new(fn(e,it("Set"))),i=Zt(o.add);return Nr(r,function(t){n(t,t,e)&&i.call(o,t)},void 0,!1,!0),o}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{find:function(t){var e=j(this),r=Zi(e),n=te(t,arguments.length>1?arguments[1]:void 0,3);return Nr(r,function(t){if(n(t,t,e))return Nr.stop(t)},void 0,!1,!0).result}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{intersection:function(t){var e=j(this),r=new(fn(e,it("Set"))),n=Zt(e.has),o=Zt(r.add);return Nr(t,function(t){n.call(e,t)&&o.call(r,t)}),r}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{isDisjointFrom:function(t){var e=j(this),r=Zt(e.has);return!Nr(t,function(t){if(!0===r.call(e,t))return Nr.stop()}).stopped}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{isSubsetOf:function(t){var e=un(this),r=j(t),n=r.has;return"function"!=typeof n&&(r=new(it("Set"))(t),n=Zt(r.has)),!Nr(e,function(t){if(!1===n.call(r,t))return Nr.stop()},void 0,!1,!0).stopped}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{isSupersetOf:function(t){var e=j(this),r=Zt(e.has);return!Nr(t,function(t){if(!1===r.call(e,t))return Nr.stop()}).stopped}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{join:function(t){var e=j(this),r=Zi(e),n=void 0===t?",":String(t),o=[];return Nr(r,o.push,o,!1,!0),o.join(n)}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{map:function(t){var e=j(this),r=Zi(e),n=te(t,arguments.length>1?arguments[1]:void 0,3),o=new(fn(e,it("Set"))),i=Zt(o.add);return Nr(r,function(t){i.call(o,n(t,t,e))},void 0,!1,!0),o}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{reduce:function(t){var e=j(this),r=Zi(e),n=arguments.length<2,o=n?void 0:arguments[1];if(Zt(t),Nr(r,function(r){n?(n=!1,o=r):o=t(o,r,r,e)},void 0,!1,!0),n)throw TypeError("Reduce of empty set with no initial value");return o}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{some:function(t){var e=j(this),r=Zi(e),n=te(t,arguments.length>1?arguments[1]:void 0,3);return Nr(r,function(t){if(n(t,t,e))return Nr.stop()},void 0,!1,!0).stopped}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{symmetricDifference:function(t){var e=j(this),r=new(fn(e,it("Set")))(e),n=Zt(r.delete),o=Zt(r.add);return Nr(t,function(t){n.call(r,t)||o.call(r,t)}),r}}),Lt({target:"Set",proto:!0,real:!0,forced:q},{union:function(t){var e=j(this),r=new(fn(e,it("Set")))(e);return Nr(t,Zt(r.add),r),r}});var ta,ea,ra=it("navigator","userAgent")||"",na=n.process,oa=na&&na.versions,ia=oa&&oa.v8;ia?ea=(ta=ia.split("."))[0]+ta[1]:ra&&(!(ta=ra.match(/Edge\/(\d+)/))||ta[1]>=74)&&(ta=ra.match(/Chrome\/(\d+)/))&&(ea=ta[1]);var aa=ea&&+ea,ua=qt("species"),sa=qt("isConcatSpreadable"),ca=9007199254740991,fa="Maximum allowed index exceeded",la=aa>=51||!o(function(){var t=[];return t[sa]=!1,t.concat()[0]!==t}),ha=aa>=51||!o(function(){var t=[];return(t.constructor={})[ua]=function(){return{foo:1}},1!==t.concat(Boolean).foo}),pa=function(t){if(!y(t))return!1;var e=t[sa];return void 0!==e?!!e:ne(t)};Lt({target:"Array",proto:!0,forced:!la||!ha},{concat:function(t){var e,r,n,o,i,a=Ut(this),u=ie(a,0),s=0;for(e=-1,n=arguments.length;e<n;e++)if(pa(i=-1===e?a:arguments[e])){if(s+(o=ft(i.length))>ca)throw TypeError(fa);for(r=0;r<o;r++,s++)r in i&&ar(u,s,i[r])}else{if(s>=ca)throw TypeError(fa);ar(u,s++,i)}return u.length=s,u}});var da=wt.f,va={}.toString,ga="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],ya={f:function(t){return ga&&"[object Window]"==va.call(t)?function(t){try{return da(t)}catch(t){return ga.slice()}}(t):da(g(t))}},ma={f:qt},ba=I.f,wa=function(t){var e=nt.Symbol||(nt.Symbol={});w(e,t)||ba(e,t,{value:ma.f(t)})},Sa=se.forEach,Ea=V("hidden"),xa="Symbol",Aa=qt("toPrimitive"),Oa=et.set,Ra=et.getterFor(xa),ja=Object.prototype,Pa=n.Symbol,Ia=it("JSON","stringify"),Ta=R.f,ka=I.f,La=ya.f,Ua=c.f,Ma=z("symbols"),_a=z("op-symbols"),Na=z("string-to-symbol-registry"),Ca=z("symbol-to-string-registry"),Fa=z("wks"),Ba=n.QObject,Da=!Ba||!Ba.prototype||!Ba.prototype.findChild,qa=i&&o(function(){return 7!=Xt(ka({},"a",{get:function(){return ka(this,"a",{value:7}).a}})).a})?function(t,e,r){var n=Ta(ja,e);n&&delete ja[e],ka(t,e,r),n&&t!==ja&&ka(ja,e,n)}:ka,za=function(t,e){var r=Ma[t]=Xt(Pa.prototype);return Oa(r,{type:xa,tag:t,description:e}),i||(r.description=e),r},Wa=Ct?function(t){return"symbol"==typeof t}:function(t){return Object(t)instanceof Pa},Ka=function(t,e,r){t===ja&&Ka(_a,e,r),j(t);var n=m(e,!0);return j(r),w(Ma,n)?(r.enumerable?(w(t,Ea)&&t[Ea][n]&&(t[Ea][n]=!1),r=Xt(r,{enumerable:f(0,!1)})):(w(t,Ea)||ka(t,Ea,f(1,{})),t[Ea][n]=!0),qa(t,n,r)):ka(t,n,r)},Ga=function(t,e){j(t);var r=g(e),n=zt(r).concat(Xa(r));return Sa(n,function(e){i&&!$a.call(r,e)||Ka(t,e,r[e])}),t},$a=function(t){var e=m(t,!0),r=Ua.call(this,e);return!(this===ja&&w(Ma,e)&&!w(_a,e))&&(!(r||!w(this,e)||!w(Ma,e)||w(this,Ea)&&this[Ea][e])||r)},Va=function(t,e){var r=g(t),n=m(e,!0);if(r!==ja||!w(Ma,n)||w(_a,n)){var o=Ta(r,n);return!o||!w(Ma,n)||w(r,Ea)&&r[Ea][n]||(o.enumerable=!0),o}},Ha=function(t){var e=La(g(t)),r=[];return Sa(e,function(t){w(Ma,t)||w(H,t)||r.push(t)}),r},Xa=function(t){var e=t===ja,r=La(e?_a:g(t)),n=[];return Sa(r,function(t){!w(Ma,t)||e&&!w(ja,t)||n.push(Ma[t])}),n};if(Nt||(Pa=function(){if(this instanceof Pa)throw TypeError("Symbol is not a constructor");var t=arguments.length&&void 0!==arguments[0]?String(arguments[0]):void 0,e=G(t),r=function(t){this===ja&&r.call(_a,t),w(this,Ea)&&w(this[Ea],e)&&(this[Ea][e]=!1),qa(this,e,f(1,t))};return i&&Da&&qa(ja,e,{configurable:!0,set:r}),za(e,t)},rt(Pa.prototype,"toString",function(){return Ra(this).tag}),rt(Pa,"withoutSetter",function(t){return za(G(t),t)}),c.f=$a,I.f=Ka,R.f=Va,wt.f=ya.f=Ha,St.f=Xa,ma.f=function(t){return za(qt(t),t)},i&&(ka(Pa.prototype,"description",{configurable:!0,get:function(){return Ra(this).description}}),rt(ja,"propertyIsEnumerable",$a,{unsafe:!0}))),Lt({global:!0,wrap:!0,forced:!Nt,sham:!Nt},{Symbol:Pa}),Sa(zt(Fa),function(t){wa(t)}),Lt({target:xa,stat:!0,forced:!Nt},{for:function(t){var e=String(t);if(w(Na,e))return Na[e];var r=Pa(e);return Na[e]=r,Ca[r]=e,r},keyFor:function(t){if(!Wa(t))throw TypeError(t+" is not a symbol");if(w(Ca,t))return Ca[t]},useSetter:function(){Da=!0},useSimple:function(){Da=!1}}),Lt({target:"Object",stat:!0,forced:!Nt,sham:!i},{create:function(t,e){return void 0===e?Xt(t):Ga(Xt(t),e)},defineProperty:Ka,defineProperties:Ga,getOwnPropertyDescriptor:Va}),Lt({target:"Object",stat:!0,forced:!Nt},{getOwnPropertyNames:Ha,getOwnPropertySymbols:Xa}),Lt({target:"Object",stat:!0,forced:o(function(){St.f(1)})},{getOwnPropertySymbols:function(t){return St.f(Ut(t))}}),Ia){var Ya=!Nt||o(function(){var t=Pa();return"[null]"!=Ia([t])||"{}"!=Ia({a:t})||"{}"!=Ia(Object(t))});Lt({target:"JSON",stat:!0,forced:Ya},{stringify:function(t,e,r){for(var n,o=[t],i=1;arguments.length>i;)o.push(arguments[i++]);if(n=e,(y(e)||void 0!==t)&&!Wa(t))return ne(e)||(e=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!Wa(e))return e}),o[1]=e,Ia.apply(null,o)}})}Pa.prototype[Aa]||T(Pa.prototype,Aa,Pa.prototype.valueOf),Ce(Pa,xa),H[Ea]=!0,wa("asyncIterator");var Ja=I.f,Qa=n.Symbol;if(i&&"function"==typeof Qa&&(!("description"in Qa.prototype)||void 0!==Qa().description)){var Za={},tu=function(){var t=arguments.length<1||void 0===arguments[0]?void 0:String(arguments[0]),e=this instanceof tu?new Qa(t):void 0===t?Qa():Qa(t);return""===t&&(Za[e]=!0),e};xt(tu,Qa);var eu=tu.prototype=Qa.prototype;eu.constructor=tu;var ru=eu.toString,nu="Symbol(test)"==String(Qa("test")),ou=/^Symbol\((.*)\)[^)]+$/;Ja(eu,"description",{configurable:!0,get:function(){var t=y(this)?this.valueOf():this,e=ru.call(t);if(w(Za,t))return"";var r=nu?e.slice(7,-1):e.replace(ou,"$1");return""===r?void 0:r}}),Lt({global:!0,forced:!0},{Symbol:tu})}wa("hasInstance"),wa("isConcatSpreadable"),wa("iterator"),wa("match"),wa("matchAll"),wa("replace"),wa("search"),wa("species"),wa("split"),wa("toPrimitive"),wa("toStringTag"),wa("unscopables"),Ce(Math,"Math",!0),Ce(n.JSON,"JSON",!0),wa("asyncDispose"),wa("dispose"),wa("observable"),wa("patternMatch"),wa("replaceAll"),ma.f("asyncIterator");var iu=je.codeAt;Lt({target:"String",proto:!0},{codePointAt:function(t){return iu(this,t)}}),re("String","codePointAt");var au,uu=function(t){if(Jo(t))throw TypeError("The method doesn't accept regular expressions");return t},su=qt("match"),cu=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[su]=!1,"/./"[t](e)}catch(t){}}return!1},fu=R.f,lu="".endsWith,hu=Math.min,pu=cu("endsWith"),du=!(pu||(au=fu(String.prototype,"endsWith"),!au||au.writable));Lt({target:"String",proto:!0,forced:!du&&!pu},{endsWith:function(t){var e=String(v(this));uu(t);var r=arguments.length>1?arguments[1]:void 0,n=ft(e.length),o=void 0===r?n:hu(ft(r),n),i=String(t);return lu?lu.call(e,i,o):e.slice(o-i.length,o)===i}}),re("String","endsWith");var vu=String.fromCharCode,gu=String.fromCodePoint;Lt({target:"String",stat:!0,forced:!!gu&&1!=gu.length},{fromCodePoint:function(t){for(var e,r=[],n=arguments.length,o=0;n>o;){if(e=+arguments[o++],pt(e,1114111)!==e)throw RangeError(e+" is not a valid code point");r.push(e<65536?vu(e):vu(55296+((e-=65536)>>10),e%1024+56320))}return r.join("")}}),Lt({target:"String",proto:!0,forced:!cu("includes")},{includes:function(t){return!!~String(v(this)).indexOf(uu(t),arguments.length>1?arguments[1]:void 0)}}),re("String","includes");var yu="".repeat||function(t){var e=String(v(this)),r="",n=st(t);if(n<0||Infinity==n)throw RangeError("Wrong number of repetitions");for(;n>0;(n>>>=1)&&(e+=e))1&n&&(r+=e);return r},mu=Math.ceil,bu=function(t){return function(e,r,n){var o,i,a=String(v(e)),u=a.length,s=void 0===n?" ":String(n),c=ft(r);return c<=u||""==s?a:((i=yu.call(s,mu((o=c-u)/s.length))).length>o&&(i=i.slice(0,o)),t?a+i:i+a)}},wu={start:bu(!1),end:bu(!0)},Su=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(ra),Eu=wu.start;Lt({target:"String",proto:!0,forced:Su},{padStart:function(t){return Eu(this,t,arguments.length>1?arguments[1]:void 0)}}),re("String","padStart");var xu=wu.end;Lt({target:"String",proto:!0,forced:Su},{padEnd:function(t){return xu(this,t,arguments.length>1?arguments[1]:void 0)}}),re("String","padEnd"),Lt({target:"String",stat:!0},{raw:function(t){for(var e=g(t.raw),r=ft(e.length),n=arguments.length,o=[],i=0;r>i;)o.push(String(e[i++])),i<n&&o.push(String(arguments[i]));return o.join("")}}),Lt({target:"String",proto:!0},{repeat:yu}),re("String","repeat");var Au=R.f,Ou="".startsWith,Ru=Math.min,ju=cu("startsWith"),Pu=!ju&&!!function(){var t=Au(String.prototype,"startsWith");return t&&!t.writable}();Lt({target:"String",proto:!0,forced:!Pu&&!ju},{startsWith:function(t){var e=String(v(this));uu(t);var r=ft(Ru(arguments.length>1?arguments[1]:void 0,e.length)),n=String(t);return Ou?Ou.call(e,n,r):e.slice(r,r+n.length)===n}}),re("String","startsWith");var Iu=function(t){return o(function(){return!!hn[t]()||"​…᠎"!="​…᠎"[t]()||hn[t].name!==t})},Tu=yn.start,ku=Iu("trimStart"),Lu=ku?function(){return Tu(this)}:"".trimStart;Lt({target:"String",proto:!0,forced:ku},{trimStart:Lu,trimLeft:Lu}),re("String","trimLeft");var Uu=yn.end,Mu=Iu("trimEnd"),_u=Mu?function(){return Uu(this)}:"".trimEnd;Lt({target:"String",proto:!0,forced:Mu},{trimEnd:_u,trimRight:_u}),re("String","trimRight");var Nu=qt("iterator"),Cu=!o(function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,r="";return t.pathname="c%20d",e.forEach(function(t,n){e.delete("b"),r+=n+t}),!e.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[Nu]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==r||"x"!==new URL("http://x",void 0).host}),Fu=Object.assign,Bu=Object.defineProperty,Du=!Fu||o(function(){if(i&&1!==Fu({b:1},Fu(Bu({},"a",{enumerable:!0,get:function(){Bu(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach(function(t){e[t]=t}),7!=Fu({},t)[r]||zt(Fu({},e)).join("")!=n})?function(t,e){for(var r=Ut(t),n=arguments.length,o=1,a=St.f,u=c.f;n>o;)for(var s,f=d(arguments[o++]),l=a?zt(f).concat(a(f)):zt(f),h=l.length,p=0;h>p;)s=l[p++],i&&!u.call(f,s)||(r[s]=f[s]);return r}:Fu,qu=2147483647,zu=/[^\0-\u007E]/,Wu=/[.\u3002\uFF0E\uFF61]/g,Ku="Overflow: input needs wider integers to process",Gu=Math.floor,$u=String.fromCharCode,Vu=function(t){return t+22+75*(t<26)},Hu=function(t,e,r){var n=0;for(t=r?Gu(t/700):t>>1,t+=Gu(t/e);t>455;n+=36)t=Gu(t/35);return Gu(n+36*t/(t+38))},Xu=function(t){var e=[];t=function(t){for(var e=[],r=0,n=t.length;r<n;){var o=t.charCodeAt(r++);if(o>=55296&&o<=56319&&r<n){var i=t.charCodeAt(r++);56320==(64512&i)?e.push(((1023&o)<<10)+(1023&i)+65536):(e.push(o),r--)}else e.push(o)}return e}(t);var r,n,o=t.length,i=128,a=0,u=72;for(r=0;r<t.length;r++)(n=t[r])<128&&e.push($u(n));var s=e.length,c=s;for(s&&e.push("-");c<o;){var f=qu;for(r=0;r<t.length;r++)(n=t[r])>=i&&n<f&&(f=n);var l=c+1;if(f-i>Gu((qu-a)/l))throw RangeError(Ku);for(a+=(f-i)*l,i=f,r=0;r<t.length;r++){if((n=t[r])<i&&++a>qu)throw RangeError(Ku);if(n==i){for(var h=a,p=36;;p+=36){var d=p<=u?1:p>=u+26?26:p-u;if(h<d)break;var v=h-d,g=36-d;e.push($u(Vu(d+v%g))),h=Gu(v/g)}e.push($u(Vu(h))),u=Hu(a,l,c==s),a=0,++c}}++a,++i}return e.join("")},Yu=it("fetch"),Ju=it("Headers"),Qu=qt("iterator"),Zu="URLSearchParams",ts="URLSearchParamsIterator",es=et.set,rs=et.getterFor(Zu),ns=et.getterFor(ts),os=/\+/g,is=Array(4),as=function(t){return is[t-1]||(is[t-1]=RegExp("((?:%[\\da-f]{2}){"+t+"})","gi"))},us=function(t){try{return decodeURIComponent(t)}catch(e){return t}},ss=function(t){var e=t.replace(os," "),r=4;try{return decodeURIComponent(e)}catch(t){for(;r;)e=e.replace(as(r--),us);return e}},cs=/[!'()~]|%20/g,fs={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},ls=function(t){return fs[t]},hs=function(t){return encodeURIComponent(t).replace(cs,ls)},ps=function(t,e){if(e)for(var r,n,o=e.split("&"),i=0;i<o.length;)(r=o[i++]).length&&(n=r.split("="),t.push({key:ss(n.shift()),value:ss(n.join("="))}))},ds=function(t){this.entries.length=0,ps(this.entries,t)},vs=function(t,e){if(t<e)throw TypeError("Not enough arguments")},gs=qe(function(t,e){es(this,{type:ts,iterator:un(rs(t).entries),kind:e})},"Iterator",function(){var t=ns(this),e=t.kind,r=t.iterator.next(),n=r.value;return r.done||(r.value="keys"===e?n.key:"values"===e?n.value:[n.key,n.value]),r}),ys=function(){Cr(this,ys,Zu);var t,e,r,n,o,i,a,u,s,c=arguments.length>0?arguments[0]:void 0,f=this,l=[];if(es(f,{type:Zu,entries:l,updateURL:function(){},updateSearchParams:ds}),void 0!==c)if(y(c))if("function"==typeof(t=pr(c)))for(r=(e=t.call(c)).next;!(n=r.call(e)).done;){if((a=(i=(o=un(j(n.value))).next).call(o)).done||(u=i.call(o)).done||!i.call(o).done)throw TypeError("Expected sequence with length 2");l.push({key:a.value+"",value:u.value+""})}else for(s in c)w(c,s)&&l.push({key:s,value:c[s]+""});else ps(l,"string"==typeof c?"?"===c.charAt(0)?c.slice(1):c:c+"")},ms=ys.prototype;Dr(ms,{append:function(t,e){vs(arguments.length,2);var r=rs(this);r.entries.push({key:t+"",value:e+""}),r.updateURL()},delete:function(t){vs(arguments.length,1);for(var e=rs(this),r=e.entries,n=t+"",o=0;o<r.length;)r[o].key===n?r.splice(o,1):o++;e.updateURL()},get:function(t){vs(arguments.length,1);for(var e=rs(this).entries,r=t+"",n=0;n<e.length;n++)if(e[n].key===r)return e[n].value;return null},getAll:function(t){vs(arguments.length,1);for(var e=rs(this).entries,r=t+"",n=[],o=0;o<e.length;o++)e[o].key===r&&n.push(e[o].value);return n},has:function(t){vs(arguments.length,1);for(var e=rs(this).entries,r=t+"",n=0;n<e.length;)if(e[n++].key===r)return!0;return!1},set:function(t,e){vs(arguments.length,1);for(var r,n=rs(this),o=n.entries,i=!1,a=t+"",u=e+"",s=0;s<o.length;s++)(r=o[s]).key===a&&(i?o.splice(s--,1):(i=!0,r.value=u));i||o.push({key:a,value:u}),n.updateURL()},sort:function(){var t,e,r,n=rs(this),o=n.entries,i=o.slice();for(o.length=0,r=0;r<i.length;r++){for(t=i[r],e=0;e<r;e++)if(o[e].key>t.key){o.splice(e,0,t);break}e===r&&o.push(t)}n.updateURL()},forEach:function(t){for(var e,r=rs(this).entries,n=te(t,arguments.length>1?arguments[1]:void 0,3),o=0;o<r.length;)n((e=r[o++]).value,e.key,this)},keys:function(){return new gs(this,"keys")},values:function(){return new gs(this,"values")},entries:function(){return new gs(this,"entries")}},{enumerable:!0}),rt(ms,Qu,ms.entries),rt(ms,"toString",function(){for(var t,e=rs(this).entries,r=[],n=0;n<e.length;)t=e[n++],r.push(hs(t.key)+"="+hs(t.value));return r.join("&")},{enumerable:!0}),Ce(ys,Zu),Lt({global:!0,forced:!Cu},{URLSearchParams:ys}),Cu||"function"!=typeof Yu||"function"!=typeof Ju||Lt({global:!0,enumerable:!0,forced:!0},{fetch:function(t){var e,r,n,o=[t];return arguments.length>1&&(y(e=arguments[1])&&lr(r=e.body)===Zu&&((n=e.headers?new Ju(e.headers):new Ju).has("content-type")||n.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),e=Xt(e,{body:f(0,String(r)),headers:f(0,n)})),o.push(e)),Yu.apply(this,o)}});var bs,ws={URLSearchParams:ys,getState:rs},Ss=je.codeAt,Es=n.URL,xs=ws.URLSearchParams,As=ws.getState,Os=et.set,Rs=et.getterFor("URL"),js=Math.floor,Ps=Math.pow,Is="Invalid scheme",Ts="Invalid host",ks="Invalid port",Ls=/[A-Za-z]/,Us=/[\d+-.A-Za-z]/,Ms=/\d/,_s=/^(0x|0X)/,Ns=/^[0-7]+$/,Cs=/^\d+$/,Fs=/^[\dA-Fa-f]+$/,Bs=/[\u0000\u0009\u000A\u000D #%/:?@[\\]]/,Ds=/[\u0000\u0009\u000A\u000D #/:?@[\\]]/,qs=/^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g,zs=/[\u0009\u000A\u000D]/g,Ws=function(t,e){var r,n,o;if("["==e.charAt(0)){if("]"!=e.charAt(e.length-1))return Ts;if(!(r=Gs(e.slice(1,-1))))return Ts;t.host=r}else if(Zs(t)){if(e=function(t){var e,r,n=[],o=t.toLowerCase().replace(Wu,".").split(".");for(e=0;e<o.length;e++)n.push(zu.test(r=o[e])?"xn--"+Xu(r):r);return n.join(".")}(e),Bs.test(e))return Ts;if(null===(r=Ks(e)))return Ts;t.host=r}else{if(Ds.test(e))return Ts;for(r="",n=dr(e),o=0;o<n.length;o++)r+=Js(n[o],Vs);t.host=r}},Ks=function(t){var e,r,n,o,i,a,u,s=t.split(".");if(s.length&&""==s[s.length-1]&&s.pop(),(e=s.length)>4)return t;for(r=[],n=0;n<e;n++){if(""==(o=s[n]))return t;if(i=10,o.length>1&&"0"==o.charAt(0)&&(i=_s.test(o)?16:8,o=o.slice(8==i?1:2)),""===o)a=0;else{if(!(10==i?Cs:8==i?Ns:Fs).test(o))return t;a=parseInt(o,i)}r.push(a)}for(n=0;n<e;n++)if(a=r[n],n==e-1){if(a>=Ps(256,5-e))return null}else if(a>255)return null;for(u=r.pop(),n=0;n<r.length;n++)u+=r[n]*Ps(256,3-n);return u},Gs=function(t){var e,r,n,o,i,a,u,s=[0,0,0,0,0,0,0,0],c=0,f=null,l=0,h=function(){return t.charAt(l)};if(":"==h()){if(":"!=t.charAt(1))return;l+=2,f=++c}for(;h();){if(8==c)return;if(":"!=h()){for(e=r=0;r<4&&Fs.test(h());)e=16*e+parseInt(h(),16),l++,r++;if("."==h()){if(0==r)return;if(l-=r,c>6)return;for(n=0;h();){if(o=null,n>0){if(!("."==h()&&n<4))return;l++}if(!Ms.test(h()))return;for(;Ms.test(h());){if(i=parseInt(h(),10),null===o)o=i;else{if(0==o)return;o=10*o+i}if(o>255)return;l++}s[c]=256*s[c]+o,2!=++n&&4!=n||c++}if(4!=n)return;break}if(":"==h()){if(l++,!h())return}else if(h())return;s[c++]=e}else{if(null!==f)return;l++,f=++c}}if(null!==f)for(a=c-f,c=7;0!=c&&a>0;)u=s[c],s[c--]=s[f+a-1],s[f+--a]=u;else if(8!=c)return;return s},$s=function(t){var e,r,n,o;if("number"==typeof t){for(e=[],r=0;r<4;r++)e.unshift(t%256),t=js(t/256);return e.join(".")}if("object"==typeof t){for(e="",n=function(t){for(var e=null,r=1,n=null,o=0,i=0;i<8;i++)0!==t[i]?(o>r&&(e=n,r=o),n=null,o=0):(null===n&&(n=i),++o);return o>r&&(e=n,r=o),e}(t),r=0;r<8;r++)o&&0===t[r]||(o&&(o=!1),n===r?(e+=r?":":"::",o=!0):(e+=t[r].toString(16),r<7&&(e+=":")));return"["+e+"]"}return t},Vs={},Hs=Du({},Vs,{" ":1,'"':1,"<":1,">":1,"`":1}),Xs=Du({},Hs,{"#":1,"?":1,"{":1,"}":1}),Ys=Du({},Xs,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),Js=function(t,e){var r=Ss(t,0);return r>32&&r<127&&!w(e,t)?t:encodeURIComponent(t)},Qs={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Zs=function(t){return w(Qs,t.scheme)},tc=function(t){return""!=t.username||""!=t.password},ec=function(t){return!t.host||t.cannotBeABaseURL||"file"==t.scheme},rc=function(t,e){var r;return 2==t.length&&Ls.test(t.charAt(0))&&(":"==(r=t.charAt(1))||!e&&"|"==r)},nc=function(t){var e;return t.length>1&&rc(t.slice(0,2))&&(2==t.length||"/"===(e=t.charAt(2))||"\\"===e||"?"===e||"#"===e)},oc=function(t){var e=t.path,r=e.length;!r||"file"==t.scheme&&1==r&&rc(e[0],!0)||e.pop()},ic=function(t){return"."===t||"%2e"===t.toLowerCase()},ac={},uc={},sc={},cc={},fc={},lc={},hc={},pc={},dc={},vc={},gc={},yc={},mc={},bc={},wc={},Sc={},Ec={},xc={},Ac={},Oc={},Rc={},jc=function(t,e,r,n){var o,i,a,u,s,c=r||ac,f=0,l="",h=!1,p=!1,d=!1;for(r||(t.scheme="",t.username="",t.password="",t.host=null,t.port=null,t.path=[],t.query=null,t.fragment=null,t.cannotBeABaseURL=!1,e=e.replace(qs,"")),e=e.replace(zs,""),o=dr(e);f<=o.length;){switch(i=o[f],c){case ac:if(!i||!Ls.test(i)){if(r)return Is;c=sc;continue}l+=i.toLowerCase(),c=uc;break;case uc:if(i&&(Us.test(i)||"+"==i||"-"==i||"."==i))l+=i.toLowerCase();else{if(":"!=i){if(r)return Is;l="",c=sc,f=0;continue}if(r&&(Zs(t)!=w(Qs,l)||"file"==l&&(tc(t)||null!==t.port)||"file"==t.scheme&&!t.host))return;if(t.scheme=l,r)return void(Zs(t)&&Qs[t.scheme]==t.port&&(t.port=null));l="","file"==t.scheme?c=bc:Zs(t)&&n&&n.scheme==t.scheme?c=cc:Zs(t)?c=pc:"/"==o[f+1]?(c=fc,f++):(t.cannotBeABaseURL=!0,t.path.push(""),c=Ac)}break;case sc:if(!n||n.cannotBeABaseURL&&"#"!=i)return Is;if(n.cannotBeABaseURL&&"#"==i){t.scheme=n.scheme,t.path=n.path.slice(),t.query=n.query,t.fragment="",t.cannotBeABaseURL=!0,c=Rc;break}c="file"==n.scheme?bc:lc;continue;case cc:if("/"!=i||"/"!=o[f+1]){c=lc;continue}c=dc,f++;break;case fc:if("/"==i){c=vc;break}c=xc;continue;case lc:if(t.scheme=n.scheme,i==bs)t.username=n.username,t.password=n.password,t.host=n.host,t.port=n.port,t.path=n.path.slice(),t.query=n.query;else if("/"==i||"\\"==i&&Zs(t))c=hc;else if("?"==i)t.username=n.username,t.password=n.password,t.host=n.host,t.port=n.port,t.path=n.path.slice(),t.query="",c=Oc;else{if("#"!=i){t.username=n.username,t.password=n.password,t.host=n.host,t.port=n.port,t.path=n.path.slice(),t.path.pop(),c=xc;continue}t.username=n.username,t.password=n.password,t.host=n.host,t.port=n.port,t.path=n.path.slice(),t.query=n.query,t.fragment="",c=Rc}break;case hc:if(!Zs(t)||"/"!=i&&"\\"!=i){if("/"!=i){t.username=n.username,t.password=n.password,t.host=n.host,t.port=n.port,c=xc;continue}c=vc}else c=dc;break;case pc:if(c=dc,"/"!=i||"/"!=l.charAt(f+1))continue;f++;break;case dc:if("/"!=i&&"\\"!=i){c=vc;continue}break;case vc:if("@"==i){h&&(l="%40"+l),h=!0,a=dr(l);for(var v=0;v<a.length;v++){var g=a[v];if(":"!=g||d){var y=Js(g,Ys);d?t.password+=y:t.username+=y}else d=!0}l=""}else if(i==bs||"/"==i||"?"==i||"#"==i||"\\"==i&&Zs(t)){if(h&&""==l)return"Invalid authority";f-=dr(l).length+1,l="",c=gc}else l+=i;break;case gc:case yc:if(r&&"file"==t.scheme){c=Sc;continue}if(":"!=i||p){if(i==bs||"/"==i||"?"==i||"#"==i||"\\"==i&&Zs(t)){if(Zs(t)&&""==l)return Ts;if(r&&""==l&&(tc(t)||null!==t.port))return;if(u=Ws(t,l))return u;if(l="",c=Ec,r)return;continue}"["==i?p=!0:"]"==i&&(p=!1),l+=i}else{if(""==l)return Ts;if(u=Ws(t,l))return u;if(l="",c=mc,r==yc)return}break;case mc:if(!Ms.test(i)){if(i==bs||"/"==i||"?"==i||"#"==i||"\\"==i&&Zs(t)||r){if(""!=l){var m=parseInt(l,10);if(m>65535)return ks;t.port=Zs(t)&&m===Qs[t.scheme]?null:m,l=""}if(r)return;c=Ec;continue}return ks}l+=i;break;case bc:if(t.scheme="file","/"==i||"\\"==i)c=wc;else{if(!n||"file"!=n.scheme){c=xc;continue}if(i==bs)t.host=n.host,t.path=n.path.slice(),t.query=n.query;else if("?"==i)t.host=n.host,t.path=n.path.slice(),t.query="",c=Oc;else{if("#"!=i){nc(o.slice(f).join(""))||(t.host=n.host,t.path=n.path.slice(),oc(t)),c=xc;continue}t.host=n.host,t.path=n.path.slice(),t.query=n.query,t.fragment="",c=Rc}}break;case wc:if("/"==i||"\\"==i){c=Sc;break}n&&"file"==n.scheme&&!nc(o.slice(f).join(""))&&(rc(n.path[0],!0)?t.path.push(n.path[0]):t.host=n.host),c=xc;continue;case Sc:if(i==bs||"/"==i||"\\"==i||"?"==i||"#"==i){if(!r&&rc(l))c=xc;else if(""==l){if(t.host="",r)return;c=Ec}else{if(u=Ws(t,l))return u;if("localhost"==t.host&&(t.host=""),r)return;l="",c=Ec}continue}l+=i;break;case Ec:if(Zs(t)){if(c=xc,"/"!=i&&"\\"!=i)continue}else if(r||"?"!=i)if(r||"#"!=i){if(i!=bs&&(c=xc,"/"!=i))continue}else t.fragment="",c=Rc;else t.query="",c=Oc;break;case xc:if(i==bs||"/"==i||"\\"==i&&Zs(t)||!r&&("?"==i||"#"==i)){if(".."===(s=(s=l).toLowerCase())||"%2e."===s||".%2e"===s||"%2e%2e"===s?(oc(t),"/"==i||"\\"==i&&Zs(t)||t.path.push("")):ic(l)?"/"==i||"\\"==i&&Zs(t)||t.path.push(""):("file"==t.scheme&&!t.path.length&&rc(l)&&(t.host&&(t.host=""),l=l.charAt(0)+":"),t.path.push(l)),l="","file"==t.scheme&&(i==bs||"?"==i||"#"==i))for(;t.path.length>1&&""===t.path[0];)t.path.shift();"?"==i?(t.query="",c=Oc):"#"==i&&(t.fragment="",c=Rc)}else l+=Js(i,Xs);break;case Ac:"?"==i?(t.query="",c=Oc):"#"==i?(t.fragment="",c=Rc):i!=bs&&(t.path[0]+=Js(i,Vs));break;case Oc:r||"#"!=i?i!=bs&&("'"==i&&Zs(t)?t.query+="%27":t.query+="#"==i?"%23":Js(i,Vs)):(t.fragment="",c=Rc);break;case Rc:i!=bs&&(t.fragment+=Js(i,Hs))}f++}},Pc=function(t){var e,r,n=Cr(this,Pc,"URL"),o=arguments.length>1?arguments[1]:void 0,a=String(t),u=Os(n,{type:"URL"});if(void 0!==o)if(o instanceof Pc)e=Rs(o);else if(r=jc(e={},String(o)))throw TypeError(r);if(r=jc(u,a,null,e))throw TypeError(r);var s=u.searchParams=new xs,c=As(s);c.updateSearchParams(u.query),c.updateURL=function(){u.query=String(s)||null},i||(n.href=Tc.call(n),n.origin=kc.call(n),n.protocol=Lc.call(n),n.username=Uc.call(n),n.password=Mc.call(n),n.host=_c.call(n),n.hostname=Nc.call(n),n.port=Cc.call(n),n.pathname=Fc.call(n),n.search=Bc.call(n),n.searchParams=Dc.call(n),n.hash=qc.call(n))},Ic=Pc.prototype,Tc=function(){var t=Rs(this),e=t.scheme,r=t.username,n=t.password,o=t.host,i=t.port,a=t.path,u=t.query,s=t.fragment,c=e+":";return null!==o?(c+="//",tc(t)&&(c+=r+(n?":"+n:"")+"@"),c+=$s(o),null!==i&&(c+=":"+i)):"file"==e&&(c+="//"),c+=t.cannotBeABaseURL?a[0]:a.length?"/"+a.join("/"):"",null!==u&&(c+="?"+u),null!==s&&(c+="#"+s),c},kc=function(){var t=Rs(this),e=t.scheme,r=t.port;if("blob"==e)try{return new URL(e.path[0]).origin}catch(t){return"null"}return"file"!=e&&Zs(t)?e+"://"+$s(t.host)+(null!==r?":"+r:""):"null"},Lc=function(){return Rs(this).scheme+":"},Uc=function(){return Rs(this).username},Mc=function(){return Rs(this).password},_c=function(){var t=Rs(this),e=t.host,r=t.port;return null===e?"":null===r?$s(e):$s(e)+":"+r},Nc=function(){var t=Rs(this).host;return null===t?"":$s(t)},Cc=function(){var t=Rs(this).port;return null===t?"":String(t)},Fc=function(){var t=Rs(this),e=t.path;return t.cannotBeABaseURL?e[0]:e.length?"/"+e.join("/"):""},Bc=function(){var t=Rs(this).query;return t?"?"+t:""},Dc=function(){return Rs(this).searchParams},qc=function(){var t=Rs(this).fragment;return t?"#"+t:""},zc=function(t,e){return{get:t,set:e,configurable:!0,enumerable:!0}};if(i&&Wt(Ic,{href:zc(Tc,function(t){var e=Rs(this),r=String(t),n=jc(e,r);if(n)throw TypeError(n);As(e.searchParams).updateSearchParams(e.query)}),origin:zc(kc),protocol:zc(Lc,function(t){var e=Rs(this);jc(e,String(t)+":",ac)}),username:zc(Uc,function(t){var e=Rs(this),r=dr(String(t));if(!ec(e)){e.username="";for(var n=0;n<r.length;n++)e.username+=Js(r[n],Ys)}}),password:zc(Mc,function(t){var e=Rs(this),r=dr(String(t));if(!ec(e)){e.password="";for(var n=0;n<r.length;n++)e.password+=Js(r[n],Ys)}}),host:zc(_c,function(t){var e=Rs(this);e.cannotBeABaseURL||jc(e,String(t),gc)}),hostname:zc(Nc,function(t){var e=Rs(this);e.cannotBeABaseURL||jc(e,String(t),yc)}),port:zc(Cc,function(t){var e=Rs(this);ec(e)||(""==(t=String(t))?e.port=null:jc(e,t,mc))}),pathname:zc(Fc,function(t){var e=Rs(this);e.cannotBeABaseURL||(e.path=[],jc(e,t+"",Ec))}),search:zc(Bc,function(t){var e=Rs(this);""==(t=String(t))?e.query=null:("?"==t.charAt(0)&&(t=t.slice(1)),e.query="",jc(e,t,Oc)),As(e.searchParams).updateSearchParams(e.query)}),searchParams:zc(Dc),hash:zc(qc,function(t){var e=Rs(this);""!=(t=String(t))?("#"==t.charAt(0)&&(t=t.slice(1)),e.fragment="",jc(e,t,Rc)):e.fragment=null})}),rt(Ic,"toJSON",function(){return Tc.call(this)},{enumerable:!0}),rt(Ic,"toString",function(){return Tc.call(this)},{enumerable:!0}),Es){var Wc=Es.createObjectURL,Kc=Es.revokeObjectURL;Wc&&rt(Pc,"createObjectURL",function(t){return Wc.apply(Es,arguments)}),Kc&&rt(Pc,"revokeObjectURL",function(t){return Kc.apply(Es,arguments)})}Ce(Pc,"URL"),Lt({global:!0,forced:!Cu,sham:!i},{URL:Pc}),Lt({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return URL.prototype.toString.call(this)}}),Lt({target:"WeakMap",stat:!0},{from:nn}),Lt({target:"WeakMap",stat:!0},{of:on}),Lt({target:"WeakMap",proto:!0,real:!0,forced:q},{deleteAll:function(){return an.apply(this,arguments)}}),Lt({target:"WeakMap",proto:!0,real:!0,forced:q},{upsert:ln}),Br("WeakSet",function(t){return function(){return t(this,arguments.length?arguments[0]:void 0)}},wo),Lt({target:"WeakSet",proto:!0,real:!0,forced:q},{addAll:function(){return Qi.apply(this,arguments)}}),Lt({target:"WeakSet",proto:!0,real:!0,forced:q},{deleteAll:function(){return an.apply(this,arguments)}}),Lt({target:"WeakSet",stat:!0},{from:nn}),Lt({target:"WeakSet",stat:!0},{of:on});var Gc,$c,Vc,Hc=n.Promise,Xc=/(iphone|ipod|ipad).*applewebkit/i.test(ra),Yc=n.location,Jc=n.setImmediate,Qc=n.clearImmediate,Zc=n.process,tf=n.MessageChannel,ef=n.Dispatch,rf=0,nf={},of=function(t){if(nf.hasOwnProperty(t)){var e=nf[t];delete nf[t],e()}},af=function(t){return function(){of(t)}},uf=function(t){of(t.data)},sf=function(t){n.postMessage(t+"",Yc.protocol+"//"+Yc.host)};Jc&&Qc||(Jc=function(t){for(var e=[],r=1;arguments.length>r;)e.push(arguments[r++]);return nf[++rf]=function(){("function"==typeof t?t:Function(t)).apply(void 0,e)},Gc(rf),rf},Qc=function(t){delete nf[t]},"process"==h(Zc)?Gc=function(t){Zc.nextTick(af(t))}:ef&&ef.now?Gc=function(t){ef.now(af(t))}:tf&&!Xc?(Vc=($c=new tf).port2,$c.port1.onmessage=uf,Gc=te(Vc.postMessage,Vc,1)):!n.addEventListener||"function"!=typeof postMessage||n.importScripts||o(sf)||"file:"===Yc.protocol?Gc="onreadystatechange"in x("script")?function(t){Kt.appendChild(x("script")).onreadystatechange=function(){Kt.removeChild(this),of(t)}}:function(t){setTimeout(af(t),0)}:(Gc=sf,n.addEventListener("message",uf,!1)));var cf,ff,lf,hf,pf,df,vf,gf,yf={set:Jc,clear:Qc},mf=R.f,bf=yf.set,wf=n.MutationObserver||n.WebKitMutationObserver,Sf=n.process,Ef=n.Promise,xf="process"==h(Sf),Af=mf(n,"queueMicrotask"),Of=Af&&Af.value;Of||(cf=function(){var t,e;for(xf&&(t=Sf.domain)&&t.exit();ff;){e=ff.fn,ff=ff.next;try{e()}catch(t){throw ff?hf():lf=void 0,t}}lf=void 0,t&&t.enter()},xf?hf=function(){Sf.nextTick(cf)}:wf&&!Xc?(pf=!0,df=document.createTextNode(""),new wf(cf).observe(df,{characterData:!0}),hf=function(){df.data=pf=!pf}):Ef&&Ef.resolve?(vf=Ef.resolve(void 0),gf=vf.then,hf=function(){gf.call(vf,cf)}):hf=function(){bf.call(n,cf)});var Rf,jf,Pf,If,Tf=Of||function(t){var e={fn:t,next:void 0};lf&&(lf.next=e),ff||(ff=e,hf()),lf=e},kf=function(t){var e,r;this.promise=new t(function(t,n){if(void 0!==e||void 0!==r)throw TypeError("Bad Promise constructor");e=t,r=n}),this.resolve=Zt(e),this.reject=Zt(r)},Lf={f:function(t){return new kf(t)}},Uf=function(t,e){if(j(t),y(e)&&e.constructor===t)return e;var r=Lf.f(t);return(0,r.resolve)(e),r.promise},Mf=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}},_f=yf.set,Nf=qt("species"),Cf="Promise",Ff=et.get,Bf=et.set,Df=et.getterFor(Cf),qf=Hc,zf=n.TypeError,Wf=n.document,Kf=n.process,Gf=it("fetch"),$f=Lf.f,Vf=$f,Hf="process"==h(Kf),Xf=!!(Wf&&Wf.createEvent&&n.dispatchEvent),Yf="unhandledrejection",Jf=Tt(Cf,function(){if(F(qf)===String(qf)){if(66===aa)return!0;if(!Hf&&"function"!=typeof PromiseRejectionEvent)return!0}if(aa>=51&&/native code/.test(qf))return!1;var t=qf.resolve(1),e=function(t){t(function(){},function(){})};return(t.constructor={})[Nf]=e,!(t.then(function(){})instanceof e)}),Qf=Jf||!br(function(t){qf.all(t).catch(function(){})}),Zf=function(t){var e;return!(!y(t)||"function"!=typeof(e=t.then))&&e},tl=function(t,e,r){if(!e.notified){e.notified=!0;var n=e.reactions;Tf(function(){for(var o=e.value,i=1==e.state,a=0;n.length>a;){var u,s,c,f=n[a++],l=i?f.ok:f.fail,h=f.resolve,p=f.reject,d=f.domain;try{l?(i||(2===e.rejection&&ol(t,e),e.rejection=1),!0===l?u=o:(d&&d.enter(),u=l(o),d&&(d.exit(),c=!0)),u===f.promise?p(zf("Promise-chain cycle")):(s=Zf(u))?s.call(u,h,p):h(u)):p(o)}catch(t){d&&!c&&d.exit(),p(t)}}e.reactions=[],e.notified=!1,r&&!e.rejection&&rl(t,e)})}},el=function(t,e,r){var o,i;Xf?((o=Wf.createEvent("Event")).promise=e,o.reason=r,o.initEvent(t,!1,!0),n.dispatchEvent(o)):o={promise:e,reason:r},(i=n["on"+t])?i(o):t===Yf&&function(t,e){var r=n.console;r&&r.error&&(1===arguments.length?r.error(t):r.error(t,e))}("Unhandled promise rejection",r)},rl=function(t,e){_f.call(n,function(){var r,n=e.value;if(nl(e)&&(r=Mf(function(){Hf?Kf.emit("unhandledRejection",n,t):el(Yf,t,n)}),e.rejection=Hf||nl(e)?2:1,r.error))throw r.value})},nl=function(t){return 1!==t.rejection&&!t.parent},ol=function(t,e){_f.call(n,function(){Hf?Kf.emit("rejectionHandled",t):el("rejectionhandled",t,e.value)})},il=function(t,e,r,n){return function(o){t(e,r,o,n)}},al=function(t,e,r,n){e.done||(e.done=!0,n&&(e=n),e.value=r,e.state=2,tl(t,e,!0))},ul=function(t,e,r,n){if(!e.done){e.done=!0,n&&(e=n);try{if(t===r)throw zf("Promise can't be resolved itself");var o=Zf(r);o?Tf(function(){var n={done:!1};try{o.call(r,il(ul,t,n,e),il(al,t,n,e))}catch(r){al(t,n,r,e)}}):(e.value=r,e.state=1,tl(t,e,!1))}catch(r){al(t,{done:!1},r,e)}}};Jf&&(qf=function(t){Cr(this,qf,Cf),Zt(t),Rf.call(this);var e=Ff(this);try{t(il(ul,this,e),il(al,this,e))}catch(t){al(this,e,t)}},(Rf=function(t){Bf(this,{type:Cf,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=Dr(qf.prototype,{then:function(t,e){var r=Df(this),n=$f(fn(this,qf));return n.ok="function"!=typeof t||t,n.fail="function"==typeof e&&e,n.domain=Hf?Kf.domain:void 0,r.parent=!0,r.reactions.push(n),0!=r.state&&tl(this,r,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),jf=function(){var t=new Rf,e=Ff(t);this.promise=t,this.resolve=il(ul,t,e),this.reject=il(al,t,e)},Lf.f=$f=function(t){return t===qf||t===Pf?new jf(t):Vf(t)},"function"==typeof Hc&&(If=Hc.prototype.then,rt(Hc.prototype,"then",function(t,e){var r=this;return new qf(function(t,e){If.call(r,t,e)}).then(t,e)},{unsafe:!0}),"function"==typeof Gf&&Lt({global:!0,enumerable:!0,forced:!0},{fetch:function(t){return Uf(qf,Gf.apply(n,arguments))}}))),Lt({global:!0,wrap:!0,forced:Jf},{Promise:qf}),Ce(qf,Cf,!1),zr(Cf),Pf=it(Cf),Lt({target:Cf,stat:!0,forced:Jf},{reject:function(t){var e=$f(this);return e.reject.call(void 0,t),e.promise}}),Lt({target:Cf,stat:!0,forced:Jf},{resolve:function(t){return Uf(this,t)}}),Lt({target:Cf,stat:!0,forced:Qf},{all:function(t){var e=this,r=$f(e),n=r.resolve,o=r.reject,i=Mf(function(){var r=Zt(e.resolve),i=[],a=0,u=1;Nr(t,function(t){var s=a++,c=!1;i.push(void 0),u++,r.call(e,t).then(function(t){c||(c=!0,i[s]=t,--u||n(i))},o)}),--u||n(i)});return i.error&&o(i.value),r.promise},race:function(t){var e=this,r=$f(e),n=r.reject,o=Mf(function(){var o=Zt(e.resolve);Nr(t,function(t){o.call(e,t).then(r.resolve,n)})});return o.error&&n(o.value),r.promise}}),Lt({target:"Promise",stat:!0},{allSettled:function(t){var e=this,r=Lf.f(e),n=r.resolve,o=r.reject,i=Mf(function(){var r=Zt(e.resolve),o=[],i=0,a=1;Nr(t,function(t){var u=i++,s=!1;o.push(void 0),a++,r.call(e,t).then(function(t){s||(s=!0,o[u]={status:"fulfilled",value:t},--a||n(o))},function(t){s||(s=!0,o[u]={status:"rejected",reason:t},--a||n(o))})}),--a||n(o)});return i.error&&o(i.value),r.promise}});var sl=!!Hc&&o(function(){Hc.prototype.finally.call({then:function(){}},function(){})});Lt({target:"Promise",proto:!0,real:!0,forced:sl},{finally:function(t){var e=fn(this,it("Promise")),r="function"==typeof t;return this.then(r?function(r){return Uf(e,t()).then(function(){return r})}:t,r?function(r){return Uf(e,t()).then(function(){throw r})}:t)}}),"function"!=typeof Hc||Hc.prototype.finally||rt(Hc.prototype,"finally",it("Promise").prototype.finally);var cl=et.set,fl=et.getterFor("AggregateError"),ll=function(t,e){var r=this;if(!(r instanceof ll))return new ll(t,e);We&&(r=We(new Error(e),ke(r)));var n=[];return Nr(t,n.push,n),i?cl(r,{errors:n,type:"AggregateError"}):r.errors=n,void 0!==e&&T(r,"message",String(e)),r};ll.prototype=Xt(Error.prototype,{constructor:f(5,ll),message:f(5,""),name:f(5,"AggregateError")}),i&&I.f(ll.prototype,"errors",{get:function(){return fl(this).errors},configurable:!0}),Lt({global:!0},{AggregateError:ll}),Lt({target:"Promise",stat:!0},{try:function(t){var e=Lf.f(this),r=Mf(t);return(r.error?e.reject:e.resolve)(r.value),e.promise}});var hl="No one promise resolved";Lt({target:"Promise",stat:!0},{any:function(t){var e=this,r=Lf.f(e),n=r.resolve,o=r.reject,i=Mf(function(){var r=Zt(e.resolve),i=[],a=0,u=1,s=!1;Nr(t,function(t){var c=a++,f=!1;i.push(void 0),u++,r.call(e,t).then(function(t){f||s||(s=!0,n(t))},function(t){f||s||(f=!0,i[c]=t,--u||o(new(it("AggregateError"))(i,hl)))})}),--u||o(new(it("AggregateError"))(i,hl))});return i.error&&o(i.value),r.promise}}),re("Promise","finally");var pl="URLSearchParams"in self,dl="Symbol"in self&&"iterator"in Symbol,vl="FileReader"in self&&"Blob"in self&&function(){try{return new Blob,!0}catch(t){return!1}}(),gl="FormData"in self,yl="ArrayBuffer"in self;if(yl)var ml=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],bl=ArrayBuffer.isView||function(t){return t&&ml.indexOf(Object.prototype.toString.call(t))>-1};function wl(t){if("string"!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(t))throw new TypeError("Invalid character in header field name");return t.toLowerCase()}function Sl(t){return"string"!=typeof t&&(t=String(t)),t}function El(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return dl&&(e[Symbol.iterator]=function(){return e}),e}function xl(t){this.map={},t instanceof xl?t.forEach(function(t,e){this.append(e,t)},this):Array.isArray(t)?t.forEach(function(t){this.append(t[0],t[1])},this):t&&Object.getOwnPropertyNames(t).forEach(function(e){this.append(e,t[e])},this)}function Al(t){if(t.bodyUsed)return Promise.reject(new TypeError("Already read"));t.bodyUsed=!0}function Ol(t){return new Promise(function(e,r){t.onload=function(){e(t.result)},t.onerror=function(){r(t.error)}})}function Rl(t){var e=new FileReader,r=Ol(e);return e.readAsArrayBuffer(t),r}function jl(t){if(t.slice)return t.slice(0);var e=new Uint8Array(t.byteLength);return e.set(new Uint8Array(t)),e.buffer}function Pl(){return this.bodyUsed=!1,this._initBody=function(t){var e;this._bodyInit=t,t?"string"==typeof t?this._bodyText=t:vl&&Blob.prototype.isPrototypeOf(t)?this._bodyBlob=t:gl&&FormData.prototype.isPrototypeOf(t)?this._bodyFormData=t:pl&&URLSearchParams.prototype.isPrototypeOf(t)?this._bodyText=t.toString():yl&&vl&&(e=t)&&DataView.prototype.isPrototypeOf(e)?(this._bodyArrayBuffer=jl(t.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):yl&&(ArrayBuffer.prototype.isPrototypeOf(t)||bl(t))?this._bodyArrayBuffer=jl(t):this._bodyText=t=Object.prototype.toString.call(t):this._bodyText="",this.headers.get("content-type")||("string"==typeof t?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):pl&&URLSearchParams.prototype.isPrototypeOf(t)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},vl&&(this.blob=function(){var t=Al(this);if(t)return t;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?Al(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(Rl)}),this.text=function(){var t=Al(this);if(t)return t;if(this._bodyBlob)return function(t){var e=new FileReader,r=Ol(e);return e.readAsText(t),r}(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(function(t){for(var e=new Uint8Array(t),r=new Array(e.length),n=0;n<e.length;n++)r[n]=String.fromCharCode(e[n]);return r.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},gl&&(this.formData=function(){return this.text().then(kl)}),this.json=function(){return this.text().then(JSON.parse)},this}xl.prototype.append=function(t,e){t=wl(t),e=Sl(e);var r=this.map[t];this.map[t]=r?r+", "+e:e},xl.prototype.delete=function(t){delete this.map[wl(t)]},xl.prototype.get=function(t){return t=wl(t),this.has(t)?this.map[t]:null},xl.prototype.has=function(t){return this.map.hasOwnProperty(wl(t))},xl.prototype.set=function(t,e){this.map[wl(t)]=Sl(e)},xl.prototype.forEach=function(t,e){for(var r in this.map)this.map.hasOwnProperty(r)&&t.call(e,this.map[r],r,this)},xl.prototype.keys=function(){var t=[];return this.forEach(function(e,r){t.push(r)}),El(t)},xl.prototype.values=function(){var t=[];return this.forEach(function(e){t.push(e)}),El(t)},xl.prototype.entries=function(){var t=[];return this.forEach(function(e,r){t.push([r,e])}),El(t)},dl&&(xl.prototype[Symbol.iterator]=xl.prototype.entries);var Il=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function Tl(t,e){var r,n,o=(e=e||{}).body;if(t instanceof Tl){if(t.bodyUsed)throw new TypeError("Already read");this.url=t.url,this.credentials=t.credentials,e.headers||(this.headers=new xl(t.headers)),this.method=t.method,this.mode=t.mode,this.signal=t.signal,o||null==t._bodyInit||(o=t._bodyInit,t.bodyUsed=!0)}else this.url=String(t);if(this.credentials=e.credentials||this.credentials||"same-origin",!e.headers&&this.headers||(this.headers=new xl(e.headers)),this.method=(n=(r=e.method||this.method||"GET").toUpperCase(),Il.indexOf(n)>-1?n:r),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&o)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(o)}function kl(t){var e=new FormData;return t.trim().split("&").forEach(function(t){if(t){var r=t.split("="),n=r.shift().replace(/\+/g," "),o=r.join("=").replace(/\+/g," ");e.append(decodeURIComponent(n),decodeURIComponent(o))}}),e}function Ll(t,e){e||(e={}),this.type="default",this.status=void 0===e.status?200:e.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in e?e.statusText:"OK",this.headers=new xl(e.headers),this.url=e.url||"",this._initBody(t)}Tl.prototype.clone=function(){return new Tl(this,{body:this._bodyInit})},Pl.call(Tl.prototype),Pl.call(Ll.prototype),Ll.prototype.clone=function(){return new Ll(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new xl(this.headers),url:this.url})},Ll.error=function(){var t=new Ll(null,{status:0,statusText:""});return t.type="error",t};var Ul=[301,302,303,307,308];Ll.redirect=function(t,e){if(-1===Ul.indexOf(e))throw new RangeError("Invalid status code");return new Ll(null,{status:e,headers:{location:t}})};var Ml=self.DOMException;try{new Ml}catch(t){(Ml=function(t,e){this.message=t,this.name=e;var r=Error(t);this.stack=r.stack}).prototype=Object.create(Error.prototype),Ml.prototype.constructor=Ml}function _l(t,e){return new Promise(function(r,n){var o=new Tl(t,e);if(o.signal&&o.signal.aborted)return n(new Ml("Aborted","AbortError"));var i=new XMLHttpRequest;function a(){i.abort()}i.onload=function(){var t,e,n={status:i.status,statusText:i.statusText,headers:(t=i.getAllResponseHeaders()||"",e=new xl,t.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach(function(t){var r=t.split(":"),n=r.shift().trim();if(n){var o=r.join(":").trim();e.append(n,o)}}),e)};n.url="responseURL"in i?i.responseURL:n.headers.get("X-Request-URL"),r(new Ll("response"in i?i.response:i.responseText,n))},i.onerror=function(){n(new TypeError("Network request failed"))},i.ontimeout=function(){n(new TypeError("Network request failed"))},i.onabort=function(){n(new Ml("Aborted","AbortError"))},i.open(o.method,o.url,!0),"include"===o.credentials?i.withCredentials=!0:"omit"===o.credentials&&(i.withCredentials=!1),"responseType"in i&&vl&&(i.responseType="blob"),o.headers.forEach(function(t,e){i.setRequestHeader(e,t)}),o.signal&&(o.signal.addEventListener("abort",a),i.onreadystatechange=function(){4===i.readyState&&o.signal.removeEventListener("abort",a)}),i.send(void 0===o._bodyInit?null:o._bodyInit)})}_l.polyfill=!0,self.fetch||(self.fetch=_l,self.Headers=xl,self.Request=Tl,self.Response=Ll);var Nl=Object.getOwnPropertySymbols,Cl=Object.prototype.hasOwnProperty,Fl=Object.prototype.propertyIsEnumerable;function Bl(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var Dl=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(t){n[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var r,n,o=Bl(t),i=1;i<arguments.length;i++){for(var a in r=Object(arguments[i]))Cl.call(r,a)&&(o[a]=r[a]);if(Nl){n=Nl(r);for(var u=0;u<n.length;u++)Fl.call(r,n[u])&&(o[n[u]]=r[n[u]])}}return o};Object.assign=Dl}(); diff --git a/frontend/.next/static/chunks/react-refresh.js b/frontend/.next/static/chunks/react-refresh.js new file mode 100644 index 000000000..8dbd42dd7 --- /dev/null +++ b/frontend/.next/static/chunks/react-refresh.js @@ -0,0 +1,62 @@ +// runtime can't be in strict mode because a global variable is assign and maybe created. +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["react-refresh"],{ + +/***/ "./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js ***! + \********************************************************************************************/ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n/**\n * MIT License\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n// This file is copied from the Metro JavaScript bundler, with minor tweaks for\n// webpack 4 compatibility.\n//\n// https://github.com/facebook/metro/blob/d6b9685c730d0d63577db40f41369157f28dfa3a/packages/metro/src/lib/polyfills/require.js\nconst runtime_1 = __importDefault(__webpack_require__(/*! next/dist/compiled/react-refresh/runtime */ \"./node_modules/next/dist/compiled/react-refresh/runtime.js\"));\nfunction isSafeExport(key) {\n return (key === '__esModule' ||\n key === '__N_SSG' ||\n key === '__N_SSP' ||\n // TODO: remove this key from page config instead of allow listing it\n key === 'config');\n}\nfunction registerExportsForReactRefresh(moduleExports, moduleID) {\n runtime_1.default.register(moduleExports, moduleID + ' %exports%');\n if (moduleExports == null || typeof moduleExports !== 'object') {\n // Exit if we can't iterate over exports.\n // (This is important for legacy environments.)\n return;\n }\n for (var key in moduleExports) {\n if (isSafeExport(key)) {\n continue;\n }\n try {\n var exportValue = moduleExports[key];\n }\n catch (_a) {\n // This might fail due to circular dependencies\n continue;\n }\n var typeID = moduleID + ' %exports% ' + key;\n runtime_1.default.register(exportValue, typeID);\n }\n}\nfunction getRefreshBoundarySignature(moduleExports) {\n var signature = [];\n signature.push(runtime_1.default.getFamilyByType(moduleExports));\n if (moduleExports == null || typeof moduleExports !== 'object') {\n // Exit if we can't iterate over exports.\n // (This is important for legacy environments.)\n return signature;\n }\n for (var key in moduleExports) {\n if (isSafeExport(key)) {\n continue;\n }\n try {\n var exportValue = moduleExports[key];\n }\n catch (_a) {\n // This might fail due to circular dependencies\n continue;\n }\n signature.push(key);\n signature.push(runtime_1.default.getFamilyByType(exportValue));\n }\n return signature;\n}\nfunction isReactRefreshBoundary(moduleExports) {\n if (runtime_1.default.isLikelyComponentType(moduleExports)) {\n return true;\n }\n if (moduleExports == null || typeof moduleExports !== 'object') {\n // Exit if we can't iterate over exports.\n return false;\n }\n var hasExports = false;\n var areAllExportsComponents = true;\n for (var key in moduleExports) {\n hasExports = true;\n if (isSafeExport(key)) {\n continue;\n }\n try {\n var exportValue = moduleExports[key];\n }\n catch (_a) {\n // This might fail due to circular dependencies\n return false;\n }\n if (!runtime_1.default.isLikelyComponentType(exportValue)) {\n areAllExportsComponents = false;\n }\n }\n return hasExports && areAllExportsComponents;\n}\nfunction shouldInvalidateReactRefreshBoundary(prevSignature, nextSignature) {\n if (prevSignature.length !== nextSignature.length) {\n return true;\n }\n for (var i = 0; i < nextSignature.length; i++) {\n if (prevSignature[i] !== nextSignature[i]) {\n return true;\n }\n }\n return false;\n}\nvar isUpdateScheduled = false;\n// This function aggregates updates from multiple modules into a single React Refresh call.\nfunction scheduleUpdate() {\n if (isUpdateScheduled) {\n return;\n }\n isUpdateScheduled = true;\n function canApplyUpdate(status) {\n return status === 'idle';\n }\n function applyUpdate() {\n isUpdateScheduled = false;\n try {\n runtime_1.default.performReactRefresh();\n }\n catch (err) {\n console.warn('Warning: Failed to re-render. We will retry on the next Fast Refresh event.\\n' +\n err);\n }\n }\n if (canApplyUpdate(module.hot.status())) {\n // Apply update on the next tick.\n Promise.resolve().then(() => {\n applyUpdate();\n });\n return;\n }\n const statusHandler = (status) => {\n if (canApplyUpdate(status)) {\n module.hot.removeStatusHandler(statusHandler);\n applyUpdate();\n }\n };\n // Apply update once the HMR runtime's status is idle.\n module.hot.addStatusHandler(statusHandler);\n}\n// Needs to be compatible with IE11\nexports[\"default\"] = {\n registerExportsForReactRefresh: registerExportsForReactRefresh,\n isReactRefreshBoundary: isReactRefreshBoundary,\n shouldInvalidateReactRefreshBoundary: shouldInvalidateReactRefreshBoundary,\n getRefreshBoundarySignature: getRefreshBoundarySignature,\n scheduleUpdate: scheduleUpdate,\n};\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL0BuZXh0L3JlYWN0LXJlZnJlc2gtdXRpbHMvZGlzdC9pbnRlcm5hbC9oZWxwZXJzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLG1CQUFPLENBQUMsNEdBQTBDO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDBCQUEwQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFVBQVU7QUFDakM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxVQUFVO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxVQUFVO0FBQ2Q7QUFDQTtBQUNBLGtCQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9AbmV4dC9yZWFjdC1yZWZyZXNoLXV0aWxzL2Rpc3QvaW50ZXJuYWwvaGVscGVycy5qcz80MDNjIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIFRoaXMgZmlsZSBpcyBjb3BpZWQgZnJvbSB0aGUgTWV0cm8gSmF2YVNjcmlwdCBidW5kbGVyLCB3aXRoIG1pbm9yIHR3ZWFrcyBmb3Jcbi8vIHdlYnBhY2sgNCBjb21wYXRpYmlsaXR5LlxuLy9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9tZXRyby9ibG9iL2Q2Yjk2ODVjNzMwZDBkNjM1NzdkYjQwZjQxMzY5MTU3ZjI4ZGZhM2EvcGFja2FnZXMvbWV0cm8vc3JjL2xpYi9wb2x5ZmlsbHMvcmVxdWlyZS5qc1xuY29uc3QgcnVudGltZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtcmVmcmVzaC9ydW50aW1lXCIpKTtcbmZ1bmN0aW9uIGlzU2FmZUV4cG9ydChrZXkpIHtcbiAgICByZXR1cm4gKGtleSA9PT0gJ19fZXNNb2R1bGUnIHx8XG4gICAgICAgIGtleSA9PT0gJ19fTl9TU0cnIHx8XG4gICAgICAgIGtleSA9PT0gJ19fTl9TU1AnIHx8XG4gICAgICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIGtleSBmcm9tIHBhZ2UgY29uZmlnIGluc3RlYWQgb2YgYWxsb3cgbGlzdGluZyBpdFxuICAgICAgICBrZXkgPT09ICdjb25maWcnKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRXhwb3J0c0ZvclJlYWN0UmVmcmVzaChtb2R1bGVFeHBvcnRzLCBtb2R1bGVJRCkge1xuICAgIHJ1bnRpbWVfMS5kZWZhdWx0LnJlZ2lzdGVyKG1vZHVsZUV4cG9ydHMsIG1vZHVsZUlEICsgJyAlZXhwb3J0cyUnKTtcbiAgICBpZiAobW9kdWxlRXhwb3J0cyA9PSBudWxsIHx8IHR5cGVvZiBtb2R1bGVFeHBvcnRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBFeGl0IGlmIHdlIGNhbid0IGl0ZXJhdGUgb3ZlciBleHBvcnRzLlxuICAgICAgICAvLyAoVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGxlZ2FjeSBlbnZpcm9ubWVudHMuKVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBtb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgIGlmIChpc1NhZmVFeHBvcnQoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBleHBvcnRWYWx1ZSA9IG1vZHVsZUV4cG9ydHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgZmFpbCBkdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZUlEID0gbW9kdWxlSUQgKyAnICVleHBvcnRzJSAnICsga2V5O1xuICAgICAgICBydW50aW1lXzEuZGVmYXVsdC5yZWdpc3RlcihleHBvcnRWYWx1ZSwgdHlwZUlEKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRSZWZyZXNoQm91bmRhcnlTaWduYXR1cmUobW9kdWxlRXhwb3J0cykge1xuICAgIHZhciBzaWduYXR1cmUgPSBbXTtcbiAgICBzaWduYXR1cmUucHVzaChydW50aW1lXzEuZGVmYXVsdC5nZXRGYW1pbHlCeVR5cGUobW9kdWxlRXhwb3J0cykpO1xuICAgIGlmIChtb2R1bGVFeHBvcnRzID09IG51bGwgfHwgdHlwZW9mIG1vZHVsZUV4cG9ydHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIEV4aXQgaWYgd2UgY2FuJ3QgaXRlcmF0ZSBvdmVyIGV4cG9ydHMuXG4gICAgICAgIC8vIChUaGlzIGlzIGltcG9ydGFudCBmb3IgbGVnYWN5IGVudmlyb25tZW50cy4pXG4gICAgICAgIHJldHVybiBzaWduYXR1cmU7XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBtb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgIGlmIChpc1NhZmVFeHBvcnQoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBleHBvcnRWYWx1ZSA9IG1vZHVsZUV4cG9ydHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgZmFpbCBkdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBzaWduYXR1cmUucHVzaChrZXkpO1xuICAgICAgICBzaWduYXR1cmUucHVzaChydW50aW1lXzEuZGVmYXVsdC5nZXRGYW1pbHlCeVR5cGUoZXhwb3J0VmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cbmZ1bmN0aW9uIGlzUmVhY3RSZWZyZXNoQm91bmRhcnkobW9kdWxlRXhwb3J0cykge1xuICAgIGlmIChydW50aW1lXzEuZGVmYXVsdC5pc0xpa2VseUNvbXBvbmVudFR5cGUobW9kdWxlRXhwb3J0cykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChtb2R1bGVFeHBvcnRzID09IG51bGwgfHwgdHlwZW9mIG1vZHVsZUV4cG9ydHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIEV4aXQgaWYgd2UgY2FuJ3QgaXRlcmF0ZSBvdmVyIGV4cG9ydHMuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGhhc0V4cG9ydHMgPSBmYWxzZTtcbiAgICB2YXIgYXJlQWxsRXhwb3J0c0NvbXBvbmVudHMgPSB0cnVlO1xuICAgIGZvciAodmFyIGtleSBpbiBtb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgIGhhc0V4cG9ydHMgPSB0cnVlO1xuICAgICAgICBpZiAoaXNTYWZlRXhwb3J0KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgZXhwb3J0VmFsdWUgPSBtb2R1bGVFeHBvcnRzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGZhaWwgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcnVudGltZV8xLmRlZmF1bHQuaXNMaWtlbHlDb21wb25lbnRUeXBlKGV4cG9ydFZhbHVlKSkge1xuICAgICAgICAgICAgYXJlQWxsRXhwb3J0c0NvbXBvbmVudHMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGFzRXhwb3J0cyAmJiBhcmVBbGxFeHBvcnRzQ29tcG9uZW50cztcbn1cbmZ1bmN0aW9uIHNob3VsZEludmFsaWRhdGVSZWFjdFJlZnJlc2hCb3VuZGFyeShwcmV2U2lnbmF0dXJlLCBuZXh0U2lnbmF0dXJlKSB7XG4gICAgaWYgKHByZXZTaWduYXR1cmUubGVuZ3RoICE9PSBuZXh0U2lnbmF0dXJlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0U2lnbmF0dXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwcmV2U2lnbmF0dXJlW2ldICE9PSBuZXh0U2lnbmF0dXJlW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG52YXIgaXNVcGRhdGVTY2hlZHVsZWQgPSBmYWxzZTtcbi8vIFRoaXMgZnVuY3Rpb24gYWdncmVnYXRlcyB1cGRhdGVzIGZyb20gbXVsdGlwbGUgbW9kdWxlcyBpbnRvIGEgc2luZ2xlIFJlYWN0IFJlZnJlc2ggY2FsbC5cbmZ1bmN0aW9uIHNjaGVkdWxlVXBkYXRlKCkge1xuICAgIGlmIChpc1VwZGF0ZVNjaGVkdWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzVXBkYXRlU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBjYW5BcHBseVVwZGF0ZShzdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gJ2lkbGUnO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBseVVwZGF0ZSgpIHtcbiAgICAgICAgaXNVcGRhdGVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJ1bnRpbWVfMS5kZWZhdWx0LnBlcmZvcm1SZWFjdFJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IEZhaWxlZCB0byByZS1yZW5kZXIuIFdlIHdpbGwgcmV0cnkgb24gdGhlIG5leHQgRmFzdCBSZWZyZXNoIGV2ZW50LlxcbicgK1xuICAgICAgICAgICAgICAgIGVycik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbkFwcGx5VXBkYXRlKG1vZHVsZS5ob3Quc3RhdHVzKCkpKSB7XG4gICAgICAgIC8vIEFwcGx5IHVwZGF0ZSBvbiB0aGUgbmV4dCB0aWNrLlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGFwcGx5VXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXR1c0hhbmRsZXIgPSAoc3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChjYW5BcHBseVVwZGF0ZShzdGF0dXMpKSB7XG4gICAgICAgICAgICBtb2R1bGUuaG90LnJlbW92ZVN0YXR1c0hhbmRsZXIoc3RhdHVzSGFuZGxlcik7XG4gICAgICAgICAgICBhcHBseVVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvLyBBcHBseSB1cGRhdGUgb25jZSB0aGUgSE1SIHJ1bnRpbWUncyBzdGF0dXMgaXMgaWRsZS5cbiAgICBtb2R1bGUuaG90LmFkZFN0YXR1c0hhbmRsZXIoc3RhdHVzSGFuZGxlcik7XG59XG4vLyBOZWVkcyB0byBiZSBjb21wYXRpYmxlIHdpdGggSUUxMVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHJlZ2lzdGVyRXhwb3J0c0ZvclJlYWN0UmVmcmVzaDogcmVnaXN0ZXJFeHBvcnRzRm9yUmVhY3RSZWZyZXNoLFxuICAgIGlzUmVhY3RSZWZyZXNoQm91bmRhcnk6IGlzUmVhY3RSZWZyZXNoQm91bmRhcnksXG4gICAgc2hvdWxkSW52YWxpZGF0ZVJlYWN0UmVmcmVzaEJvdW5kYXJ5OiBzaG91bGRJbnZhbGlkYXRlUmVhY3RSZWZyZXNoQm91bmRhcnksXG4gICAgZ2V0UmVmcmVzaEJvdW5kYXJ5U2lnbmF0dXJlOiBnZXRSZWZyZXNoQm91bmRhcnlTaWduYXR1cmUsXG4gICAgc2NoZWR1bGVVcGRhdGU6IHNjaGVkdWxlVXBkYXRlLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuanMubWFwIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js ***! + \***********************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst runtime_1 = __importDefault(__webpack_require__(/*! next/dist/compiled/react-refresh/runtime */ \"./node_modules/next/dist/compiled/react-refresh/runtime.js\"));\nconst helpers_1 = __importDefault(__webpack_require__(/*! ./internal/helpers */ \"./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js\"));\n// Hook into ReactDOM initialization\nruntime_1.default.injectIntoGlobalHook(self);\n// Register global helpers\nself.$RefreshHelpers$ = helpers_1.default;\n// Register a helper for module execution interception\nself.$RefreshInterceptModuleExecution$ = function (webpackModuleId) {\n var prevRefreshReg = self.$RefreshReg$;\n var prevRefreshSig = self.$RefreshSig$;\n self.$RefreshReg$ = function (type, id) {\n runtime_1.default.register(type, webpackModuleId + ' ' + id);\n };\n self.$RefreshSig$ = runtime_1.default.createSignatureFunctionForTransform;\n // Modeled after `useEffect` cleanup pattern:\n // https://react.dev/learn/synchronizing-with-effects#step-3-add-cleanup-if-needed\n return function () {\n self.$RefreshReg$ = prevRefreshReg;\n self.$RefreshSig$ = prevRefreshSig;\n };\n};\n//# sourceMappingURL=runtime.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL0BuZXh0L3JlYWN0LXJlZnJlc2gtdXRpbHMvZGlzdC9ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQSw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0Qsa0NBQWtDLG1CQUFPLENBQUMsNEdBQTBDO0FBQ3BGLGtDQUFrQyxtQkFBTyxDQUFDLGdIQUFvQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvQG5leHQvcmVhY3QtcmVmcmVzaC11dGlscy9kaXN0L3J1bnRpbWUuanM/OGFiNyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHJ1bnRpbWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LXJlZnJlc2gvcnVudGltZVwiKSk7XG5jb25zdCBoZWxwZXJzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vaW50ZXJuYWwvaGVscGVyc1wiKSk7XG4vLyBIb29rIGludG8gUmVhY3RET00gaW5pdGlhbGl6YXRpb25cbnJ1bnRpbWVfMS5kZWZhdWx0LmluamVjdEludG9HbG9iYWxIb29rKHNlbGYpO1xuLy8gUmVnaXN0ZXIgZ2xvYmFsIGhlbHBlcnNcbnNlbGYuJFJlZnJlc2hIZWxwZXJzJCA9IGhlbHBlcnNfMS5kZWZhdWx0O1xuLy8gUmVnaXN0ZXIgYSBoZWxwZXIgZm9yIG1vZHVsZSBleGVjdXRpb24gaW50ZXJjZXB0aW9uXG5zZWxmLiRSZWZyZXNoSW50ZXJjZXB0TW9kdWxlRXhlY3V0aW9uJCA9IGZ1bmN0aW9uICh3ZWJwYWNrTW9kdWxlSWQpIHtcbiAgICB2YXIgcHJldlJlZnJlc2hSZWcgPSBzZWxmLiRSZWZyZXNoUmVnJDtcbiAgICB2YXIgcHJldlJlZnJlc2hTaWcgPSBzZWxmLiRSZWZyZXNoU2lnJDtcbiAgICBzZWxmLiRSZWZyZXNoUmVnJCA9IGZ1bmN0aW9uICh0eXBlLCBpZCkge1xuICAgICAgICBydW50aW1lXzEuZGVmYXVsdC5yZWdpc3Rlcih0eXBlLCB3ZWJwYWNrTW9kdWxlSWQgKyAnICcgKyBpZCk7XG4gICAgfTtcbiAgICBzZWxmLiRSZWZyZXNoU2lnJCA9IHJ1bnRpbWVfMS5kZWZhdWx0LmNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtO1xuICAgIC8vIE1vZGVsZWQgYWZ0ZXIgYHVzZUVmZmVjdGAgY2xlYW51cCBwYXR0ZXJuOlxuICAgIC8vIGh0dHBzOi8vcmVhY3QuZGV2L2xlYXJuL3N5bmNocm9uaXppbmctd2l0aC1lZmZlY3RzI3N0ZXAtMy1hZGQtY2xlYW51cC1pZi1uZWVkZWRcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLiRSZWZyZXNoUmVnJCA9IHByZXZSZWZyZXNoUmVnO1xuICAgICAgICBzZWxmLiRSZWZyZXNoU2lnJCA9IHByZXZSZWZyZXNoU2lnO1xuICAgIH07XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnVudGltZS5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js ***! + \************************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * react-refresh-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\n// ATTENTION\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\n\nvar PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // We never remove these associations.\n// It's OK to reference families, but use WeakMap/Set for types.\n\nvar allFamiliesByID = new Map();\nvar allFamiliesByType = new PossiblyWeakMap();\nvar allSignaturesByType = new PossiblyWeakMap(); // This WeakMap is read by React, so we only put families\n// that have actually been edited here. This keeps checks fast.\n// $FlowIssue\n\nvar updatedFamiliesByType = new PossiblyWeakMap(); // This is cleared on every performReactRefresh() call.\n// It is an array of [Family, NextType] tuples.\n\nvar pendingUpdates = []; // This is injected by the renderer via DevTools global hook.\n\nvar helpersByRendererID = new Map();\nvar helpersByRoot = new Map(); // We keep track of mounted roots so we can schedule updates.\n\nvar mountedRoots = new Set(); // If a root captures an error, we remember it so we can retry on edit.\n\nvar failedRoots = new Set(); // In environments that support WeakMap, we also remember the last element for every root.\n// It needs to be weak because we do this even for roots that failed to mount.\n// If there is no WeakMap, we won't attempt to do retrying.\n// $FlowIssue\n\nvar rootElements = // $FlowIssue\ntypeof WeakMap === 'function' ? new WeakMap() : null;\nvar isPerformingRefresh = false;\n\nfunction computeFullKey(signature) {\n if (signature.fullKey !== null) {\n return signature.fullKey;\n }\n\n var fullKey = signature.ownKey;\n var hooks;\n\n try {\n hooks = signature.getCustomHooks();\n } catch (err) {\n // This can happen in an edge case, e.g. if expression like Foo.useSomething\n // depends on Foo which is lazily initialized during rendering.\n // In that case just assume we'll have to remount.\n signature.forceReset = true;\n signature.fullKey = fullKey;\n return fullKey;\n }\n\n for (var i = 0; i < hooks.length; i++) {\n var hook = hooks[i];\n\n if (typeof hook !== 'function') {\n // Something's wrong. Assume we need to remount.\n signature.forceReset = true;\n signature.fullKey = fullKey;\n return fullKey;\n }\n\n var nestedHookSignature = allSignaturesByType.get(hook);\n\n if (nestedHookSignature === undefined) {\n // No signature means Hook wasn't in the source code, e.g. in a library.\n // We'll skip it because we can assume it won't change during this session.\n continue;\n }\n\n var nestedHookKey = computeFullKey(nestedHookSignature);\n\n if (nestedHookSignature.forceReset) {\n signature.forceReset = true;\n }\n\n fullKey += '\\n---\\n' + nestedHookKey;\n }\n\n signature.fullKey = fullKey;\n return fullKey;\n}\n\nfunction haveEqualSignatures(prevType, nextType) {\n var prevSignature = allSignaturesByType.get(prevType);\n var nextSignature = allSignaturesByType.get(nextType);\n\n if (prevSignature === undefined && nextSignature === undefined) {\n return true;\n }\n\n if (prevSignature === undefined || nextSignature === undefined) {\n return false;\n }\n\n if (computeFullKey(prevSignature) !== computeFullKey(nextSignature)) {\n return false;\n }\n\n if (nextSignature.forceReset) {\n return false;\n }\n\n return true;\n}\n\nfunction isReactClass(type) {\n return type.prototype && type.prototype.isReactComponent;\n}\n\nfunction canPreserveStateBetween(prevType, nextType) {\n if (isReactClass(prevType) || isReactClass(nextType)) {\n return false;\n }\n\n if (haveEqualSignatures(prevType, nextType)) {\n return true;\n }\n\n return false;\n}\n\nfunction resolveFamily(type) {\n // Only check updated types to keep lookups fast.\n return updatedFamiliesByType.get(type);\n} // If we didn't care about IE11, we could use new Map/Set(iterable).\n\n\nfunction cloneMap(map) {\n var clone = new Map();\n map.forEach(function (value, key) {\n clone.set(key, value);\n });\n return clone;\n}\n\nfunction cloneSet(set) {\n var clone = new Set();\n set.forEach(function (value) {\n clone.add(value);\n });\n return clone;\n} // This is a safety mechanism to protect against rogue getters and Proxies.\n\n\nfunction getProperty(object, property) {\n try {\n return object[property];\n } catch (err) {\n // Intentionally ignore.\n return undefined;\n }\n}\n\nfunction performReactRefresh() {\n\n if (pendingUpdates.length === 0) {\n return null;\n }\n\n if (isPerformingRefresh) {\n return null;\n }\n\n isPerformingRefresh = true;\n\n try {\n var staleFamilies = new Set();\n var updatedFamilies = new Set();\n var updates = pendingUpdates;\n pendingUpdates = [];\n updates.forEach(function (_ref) {\n var family = _ref[0],\n nextType = _ref[1];\n // Now that we got a real edit, we can create associations\n // that will be read by the React reconciler.\n var prevType = family.current;\n updatedFamiliesByType.set(prevType, family);\n updatedFamiliesByType.set(nextType, family);\n family.current = nextType; // Determine whether this should be a re-render or a re-mount.\n\n if (canPreserveStateBetween(prevType, nextType)) {\n updatedFamilies.add(family);\n } else {\n staleFamilies.add(family);\n }\n }); // TODO: rename these fields to something more meaningful.\n\n var update = {\n updatedFamilies: updatedFamilies,\n // Families that will re-render preserving state\n staleFamilies: staleFamilies // Families that will be remounted\n\n };\n helpersByRendererID.forEach(function (helpers) {\n // Even if there are no roots, set the handler on first update.\n // This ensures that if *new* roots are mounted, they'll use the resolve handler.\n helpers.setRefreshHandler(resolveFamily);\n });\n var didError = false;\n var firstError = null; // We snapshot maps and sets that are mutated during commits.\n // If we don't do this, there is a risk they will be mutated while\n // we iterate over them. For example, trying to recover a failed root\n // may cause another root to be added to the failed list -- an infinite loop.\n\n var failedRootsSnapshot = cloneSet(failedRoots);\n var mountedRootsSnapshot = cloneSet(mountedRoots);\n var helpersByRootSnapshot = cloneMap(helpersByRoot);\n failedRootsSnapshot.forEach(function (root) {\n var helpers = helpersByRootSnapshot.get(root);\n\n if (helpers === undefined) {\n throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n }\n\n if (!failedRoots.has(root)) {// No longer failed.\n }\n\n if (rootElements === null) {\n return;\n }\n\n if (!rootElements.has(root)) {\n return;\n }\n\n var element = rootElements.get(root);\n\n try {\n helpers.scheduleRoot(root, element);\n } catch (err) {\n if (!didError) {\n didError = true;\n firstError = err;\n } // Keep trying other roots.\n\n }\n });\n mountedRootsSnapshot.forEach(function (root) {\n var helpers = helpersByRootSnapshot.get(root);\n\n if (helpers === undefined) {\n throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n }\n\n if (!mountedRoots.has(root)) {// No longer mounted.\n }\n\n try {\n helpers.scheduleRefresh(root, update);\n } catch (err) {\n if (!didError) {\n didError = true;\n firstError = err;\n } // Keep trying other roots.\n\n }\n });\n\n if (didError) {\n throw firstError;\n }\n\n return update;\n } finally {\n isPerformingRefresh = false;\n }\n}\nfunction register(type, id) {\n {\n if (type === null) {\n return;\n }\n\n if (typeof type !== 'function' && typeof type !== 'object') {\n return;\n } // This can happen in an edge case, e.g. if we register\n // return value of a HOC but it returns a cached component.\n // Ignore anything but the first registration for each type.\n\n\n if (allFamiliesByType.has(type)) {\n return;\n } // Create family or remember to update it.\n // None of this bookkeeping affects reconciliation\n // until the first performReactRefresh() call above.\n\n\n var family = allFamiliesByID.get(id);\n\n if (family === undefined) {\n family = {\n current: type\n };\n allFamiliesByID.set(id, family);\n } else {\n pendingUpdates.push([family, type]);\n }\n\n allFamiliesByType.set(type, family); // Visit inner types because we might not have registered them.\n\n if (typeof type === 'object' && type !== null) {\n switch (getProperty(type, '$$typeof')) {\n case REACT_FORWARD_REF_TYPE:\n register(type.render, id + '$render');\n break;\n\n case REACT_MEMO_TYPE:\n register(type.type, id + '$type');\n break;\n }\n }\n }\n}\nfunction setSignature(type, key) {\n var forceReset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var getCustomHooks = arguments.length > 3 ? arguments[3] : undefined;\n\n {\n if (!allSignaturesByType.has(type)) {\n allSignaturesByType.set(type, {\n forceReset: forceReset,\n ownKey: key,\n fullKey: null,\n getCustomHooks: getCustomHooks || function () {\n return [];\n }\n });\n } // Visit inner types because we might not have signed them.\n\n\n if (typeof type === 'object' && type !== null) {\n switch (getProperty(type, '$$typeof')) {\n case REACT_FORWARD_REF_TYPE:\n setSignature(type.render, key, forceReset, getCustomHooks);\n break;\n\n case REACT_MEMO_TYPE:\n setSignature(type.type, key, forceReset, getCustomHooks);\n break;\n }\n }\n }\n} // This is lazily called during first render for a type.\n// It captures Hook list at that time so inline requires don't break comparisons.\n\nfunction collectCustomHooksForSignature(type) {\n {\n var signature = allSignaturesByType.get(type);\n\n if (signature !== undefined) {\n computeFullKey(signature);\n }\n }\n}\nfunction getFamilyByID(id) {\n {\n return allFamiliesByID.get(id);\n }\n}\nfunction getFamilyByType(type) {\n {\n return allFamiliesByType.get(type);\n }\n}\nfunction findAffectedHostInstances(families) {\n {\n var affectedInstances = new Set();\n mountedRoots.forEach(function (root) {\n var helpers = helpersByRoot.get(root);\n\n if (helpers === undefined) {\n throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n }\n\n var instancesForRoot = helpers.findHostInstancesForRefresh(root, families);\n instancesForRoot.forEach(function (inst) {\n affectedInstances.add(inst);\n });\n });\n return affectedInstances;\n }\n}\nfunction injectIntoGlobalHook(globalObject) {\n {\n // For React Native, the global hook will be set up by require('react-devtools-core').\n // That code will run before us. So we need to monkeypatch functions on existing hook.\n // For React Web, the global hook will be set up by the extension.\n // This will also run before us.\n var hook = globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n if (hook === undefined) {\n // However, if there is no DevTools extension, we'll need to set up the global hook ourselves.\n // Note that in this case it's important that renderer code runs *after* this method call.\n // Otherwise, the renderer will think that there is no global hook, and won't do the injection.\n var nextID = 0;\n globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook = {\n renderers: new Map(),\n supportsFiber: true,\n inject: function (injected) {\n return nextID++;\n },\n onScheduleFiberRoot: function (id, root, children) {},\n onCommitFiberRoot: function (id, root, maybePriorityLevel, didError) {},\n onCommitFiberUnmount: function () {}\n };\n }\n\n if (hook.isDisabled) {\n // This isn't a real property on the hook, but it can be set to opt out\n // of DevTools integration and associated warnings and logs.\n // Using console['warn'] to evade Babel and ESLint\n console['warn']('Something has shimmed the React DevTools global hook (__REACT_DEVTOOLS_GLOBAL_HOOK__). ' + 'Fast Refresh is not compatible with this shim and will be disabled.');\n return;\n } // Here, we just want to get a reference to scheduleRefresh.\n\n\n var oldInject = hook.inject;\n\n hook.inject = function (injected) {\n var id = oldInject.apply(this, arguments);\n\n if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {\n // This version supports React Refresh.\n helpersByRendererID.set(id, injected);\n }\n\n return id;\n }; // Do the same for any already injected roots.\n // This is useful if ReactDOM has already been initialized.\n // https://github.com/facebook/react/issues/17626\n\n\n hook.renderers.forEach(function (injected, id) {\n if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {\n // This version supports React Refresh.\n helpersByRendererID.set(id, injected);\n }\n }); // We also want to track currently mounted roots.\n\n var oldOnCommitFiberRoot = hook.onCommitFiberRoot;\n\n var oldOnScheduleFiberRoot = hook.onScheduleFiberRoot || function () {};\n\n hook.onScheduleFiberRoot = function (id, root, children) {\n if (!isPerformingRefresh) {\n // If it was intentionally scheduled, don't attempt to restore.\n // This includes intentionally scheduled unmounts.\n failedRoots.delete(root);\n\n if (rootElements !== null) {\n rootElements.set(root, children);\n }\n }\n\n return oldOnScheduleFiberRoot.apply(this, arguments);\n };\n\n hook.onCommitFiberRoot = function (id, root, maybePriorityLevel, didError) {\n var helpers = helpersByRendererID.get(id);\n\n if (helpers !== undefined) {\n helpersByRoot.set(root, helpers);\n var current = root.current;\n var alternate = current.alternate; // We need to determine whether this root has just (un)mounted.\n // This logic is copy-pasted from similar logic in the DevTools backend.\n // If this breaks with some refactoring, you'll want to update DevTools too.\n\n if (alternate !== null) {\n var wasMounted = alternate.memoizedState != null && alternate.memoizedState.element != null && mountedRoots.has(root);\n var isMounted = current.memoizedState != null && current.memoizedState.element != null;\n\n if (!wasMounted && isMounted) {\n // Mount a new root.\n mountedRoots.add(root);\n failedRoots.delete(root);\n } else if (wasMounted && isMounted) ; else if (wasMounted && !isMounted) {\n // Unmount an existing root.\n mountedRoots.delete(root);\n\n if (didError) {\n // We'll remount it on future edits.\n failedRoots.add(root);\n } else {\n helpersByRoot.delete(root);\n }\n } else if (!wasMounted && !isMounted) {\n if (didError) {\n // We'll remount it on future edits.\n failedRoots.add(root);\n }\n }\n } else {\n // Mount a new root.\n mountedRoots.add(root);\n }\n } // Always call the decorated DevTools hook.\n\n\n return oldOnCommitFiberRoot.apply(this, arguments);\n };\n }\n}\nfunction hasUnrecoverableErrors() {\n // TODO: delete this after removing dependency in RN.\n return false;\n} // Exposed for testing.\n\nfunction _getMountedRootCount() {\n {\n return mountedRoots.size;\n }\n} // This is a wrapper over more primitive functions for setting signature.\n// Signatures let us decide whether the Hook order has changed on refresh.\n//\n// This function is intended to be used as a transform target, e.g.:\n// var _s = createSignatureFunctionForTransform()\n//\n// function Hello() {\n// const [foo, setFoo] = useState(0);\n// const value = useCustomHook();\n// _s(); /* Call without arguments triggers collecting the custom Hook list.\n// * This doesn't happen during the module evaluation because we\n// * don't want to change the module order with inline requires.\n// * Next calls are noops. */\n// return <h1>Hi</h1>;\n// }\n//\n// /* Call with arguments attaches the signature to the type: */\n// _s(\n// Hello,\n// 'useState{[foo, setFoo]}(0)',\n// () => [useCustomHook], /* Lazy to avoid triggering inline requires */\n// );\n\nfunction createSignatureFunctionForTransform() {\n {\n var savedType;\n var hasCustomHooks;\n var didCollectHooks = false;\n return function (type, key, forceReset, getCustomHooks) {\n if (typeof key === 'string') {\n // We're in the initial phase that associates signatures\n // with the functions. Note this may be called multiple times\n // in HOC chains like _s(hoc1(_s(hoc2(_s(actualFunction))))).\n if (!savedType) {\n // We're in the innermost call, so this is the actual type.\n savedType = type;\n hasCustomHooks = typeof getCustomHooks === 'function';\n } // Set the signature for all types (even wrappers!) in case\n // they have no signatures of their own. This is to prevent\n // problems like https://github.com/facebook/react/issues/20417.\n\n\n if (type != null && (typeof type === 'function' || typeof type === 'object')) {\n setSignature(type, key, forceReset, getCustomHooks);\n }\n\n return type;\n } else {\n // We're in the _s() call without arguments, which means\n // this is the time to collect custom Hook signatures.\n // Only do this once. This path is hot and runs *inside* every render!\n if (!didCollectHooks && hasCustomHooks) {\n didCollectHooks = true;\n collectCustomHooksForSignature(savedType);\n }\n }\n };\n }\n}\nfunction isLikelyComponentType(type) {\n {\n switch (typeof type) {\n case 'function':\n {\n // First, deal with classes.\n if (type.prototype != null) {\n if (type.prototype.isReactComponent) {\n // React class.\n return true;\n }\n\n var ownNames = Object.getOwnPropertyNames(type.prototype);\n\n if (ownNames.length > 1 || ownNames[0] !== 'constructor') {\n // This looks like a class.\n return false;\n } // eslint-disable-next-line no-proto\n\n\n if (type.prototype.__proto__ !== Object.prototype) {\n // It has a superclass.\n return false;\n } // Pass through.\n // This looks like a regular function with empty prototype.\n\n } // For plain functions and arrows, use name as a heuristic.\n\n\n var name = type.name || type.displayName;\n return typeof name === 'string' && /^[A-Z]/.test(name);\n }\n\n case 'object':\n {\n if (type != null) {\n switch (getProperty(type, '$$typeof')) {\n case REACT_FORWARD_REF_TYPE:\n case REACT_MEMO_TYPE:\n // Definitely React components.\n return true;\n\n default:\n return false;\n }\n }\n\n return false;\n }\n\n default:\n {\n return false;\n }\n }\n }\n}\n\nexports._getMountedRootCount = _getMountedRootCount;\nexports.collectCustomHooksForSignature = collectCustomHooksForSignature;\nexports.createSignatureFunctionForTransform = createSignatureFunctionForTransform;\nexports.findAffectedHostInstances = findAffectedHostInstances;\nexports.getFamilyByID = getFamilyByID;\nexports.getFamilyByType = getFamilyByType;\nexports.hasUnrecoverableErrors = hasUnrecoverableErrors;\nexports.injectIntoGlobalHook = injectIntoGlobalHook;\nexports.isLikelyComponentType = isLikelyComponentType;\nexports.performReactRefresh = performReactRefresh;\nexports.register = register;\nexports.setSignature = setSignature;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LXJlZnJlc2gvY2pzL3JlYWN0LXJlZnJlc2gtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxRUFBcUU7QUFDckU7O0FBRUE7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBOztBQUVBLG1EQUFtRDtBQUNuRDs7QUFFQSx5QkFBeUI7O0FBRXpCO0FBQ0EsK0JBQStCOztBQUUvQiw4QkFBOEI7O0FBRTlCLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isa0JBQWtCO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxVQUFVOztBQUVWO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsNkRBQTZEO0FBQzdELCtFQUErRTtBQUMvRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0NBQW9DO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxjQUFjOzs7QUFHZDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUEsWUFBWTs7O0FBR1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEI7QUFDNUIsc0NBQXNDO0FBQ3RDLDJDQUEyQztBQUMzQyxpQ0FBaUM7QUFDakMscUJBQXFCO0FBQ3JCLHVCQUF1QjtBQUN2Qiw4QkFBOEI7QUFDOUIsNEJBQTRCO0FBQzVCLDZCQUE2QjtBQUM3QiwyQkFBMkI7QUFDM0IsZ0JBQWdCO0FBQ2hCLG9CQUFvQjtBQUNwQixHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1yZWZyZXNoL2Nqcy9yZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanM/N2U4NCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG5cbnZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7IC8vIFdlIG5ldmVyIHJlbW92ZSB0aGVzZSBhc3NvY2lhdGlvbnMuXG4vLyBJdCdzIE9LIHRvIHJlZmVyZW5jZSBmYW1pbGllcywgYnV0IHVzZSBXZWFrTWFwL1NldCBmb3IgdHlwZXMuXG5cbnZhciBhbGxGYW1pbGllc0J5SUQgPSBuZXcgTWFwKCk7XG52YXIgYWxsRmFtaWxpZXNCeVR5cGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG52YXIgYWxsU2lnbmF0dXJlc0J5VHlwZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTsgLy8gVGhpcyBXZWFrTWFwIGlzIHJlYWQgYnkgUmVhY3QsIHNvIHdlIG9ubHkgcHV0IGZhbWlsaWVzXG4vLyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBlZGl0ZWQgaGVyZS4gVGhpcyBrZWVwcyBjaGVja3MgZmFzdC5cbi8vICRGbG93SXNzdWVcblxudmFyIHVwZGF0ZWRGYW1pbGllc0J5VHlwZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTsgLy8gVGhpcyBpcyBjbGVhcmVkIG9uIGV2ZXJ5IHBlcmZvcm1SZWFjdFJlZnJlc2goKSBjYWxsLlxuLy8gSXQgaXMgYW4gYXJyYXkgb2YgW0ZhbWlseSwgTmV4dFR5cGVdIHR1cGxlcy5cblxudmFyIHBlbmRpbmdVcGRhdGVzID0gW107IC8vIFRoaXMgaXMgaW5qZWN0ZWQgYnkgdGhlIHJlbmRlcmVyIHZpYSBEZXZUb29scyBnbG9iYWwgaG9vay5cblxudmFyIGhlbHBlcnNCeVJlbmRlcmVySUQgPSBuZXcgTWFwKCk7XG52YXIgaGVscGVyc0J5Um9vdCA9IG5ldyBNYXAoKTsgLy8gV2Uga2VlcCB0cmFjayBvZiBtb3VudGVkIHJvb3RzIHNvIHdlIGNhbiBzY2hlZHVsZSB1cGRhdGVzLlxuXG52YXIgbW91bnRlZFJvb3RzID0gbmV3IFNldCgpOyAvLyBJZiBhIHJvb3QgY2FwdHVyZXMgYW4gZXJyb3IsIHdlIHJlbWVtYmVyIGl0IHNvIHdlIGNhbiByZXRyeSBvbiBlZGl0LlxuXG52YXIgZmFpbGVkUm9vdHMgPSBuZXcgU2V0KCk7IC8vIEluIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgV2Vha01hcCwgd2UgYWxzbyByZW1lbWJlciB0aGUgbGFzdCBlbGVtZW50IGZvciBldmVyeSByb290LlxuLy8gSXQgbmVlZHMgdG8gYmUgd2VhayBiZWNhdXNlIHdlIGRvIHRoaXMgZXZlbiBmb3Igcm9vdHMgdGhhdCBmYWlsZWQgdG8gbW91bnQuXG4vLyBJZiB0aGVyZSBpcyBubyBXZWFrTWFwLCB3ZSB3b24ndCBhdHRlbXB0IHRvIGRvIHJldHJ5aW5nLlxuLy8gJEZsb3dJc3N1ZVxuXG52YXIgcm9vdEVsZW1lbnRzID0gLy8gJEZsb3dJc3N1ZVxudHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBuZXcgV2Vha01hcCgpIDogbnVsbDtcbnZhciBpc1BlcmZvcm1pbmdSZWZyZXNoID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGNvbXB1dGVGdWxsS2V5KHNpZ25hdHVyZSkge1xuICBpZiAoc2lnbmF0dXJlLmZ1bGxLZXkgIT09IG51bGwpIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlLmZ1bGxLZXk7XG4gIH1cblxuICB2YXIgZnVsbEtleSA9IHNpZ25hdHVyZS5vd25LZXk7XG4gIHZhciBob29rcztcblxuICB0cnkge1xuICAgIGhvb2tzID0gc2lnbmF0dXJlLmdldEN1c3RvbUhvb2tzKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpbiBhbiBlZGdlIGNhc2UsIGUuZy4gaWYgZXhwcmVzc2lvbiBsaWtlIEZvby51c2VTb21ldGhpbmdcbiAgICAvLyBkZXBlbmRzIG9uIEZvbyB3aGljaCBpcyBsYXppbHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHJlbmRlcmluZy5cbiAgICAvLyBJbiB0aGF0IGNhc2UganVzdCBhc3N1bWUgd2UnbGwgaGF2ZSB0byByZW1vdW50LlxuICAgIHNpZ25hdHVyZS5mb3JjZVJlc2V0ID0gdHJ1ZTtcbiAgICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gICAgcmV0dXJuIGZ1bGxLZXk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGhvb2sgPSBob29rc1tpXTtcblxuICAgIGlmICh0eXBlb2YgaG9vayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gU29tZXRoaW5nJ3Mgd3JvbmcuIEFzc3VtZSB3ZSBuZWVkIHRvIHJlbW91bnQuXG4gICAgICBzaWduYXR1cmUuZm9yY2VSZXNldCA9IHRydWU7XG4gICAgICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gICAgICByZXR1cm4gZnVsbEtleTtcbiAgICB9XG5cbiAgICB2YXIgbmVzdGVkSG9va1NpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KGhvb2spO1xuXG4gICAgaWYgKG5lc3RlZEhvb2tTaWduYXR1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gTm8gc2lnbmF0dXJlIG1lYW5zIEhvb2sgd2Fzbid0IGluIHRoZSBzb3VyY2UgY29kZSwgZS5nLiBpbiBhIGxpYnJhcnkuXG4gICAgICAvLyBXZSdsbCBza2lwIGl0IGJlY2F1c2Ugd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBjaGFuZ2UgZHVyaW5nIHRoaXMgc2Vzc2lvbi5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXN0ZWRIb29rS2V5ID0gY29tcHV0ZUZ1bGxLZXkobmVzdGVkSG9va1NpZ25hdHVyZSk7XG5cbiAgICBpZiAobmVzdGVkSG9va1NpZ25hdHVyZS5mb3JjZVJlc2V0KSB7XG4gICAgICBzaWduYXR1cmUuZm9yY2VSZXNldCA9IHRydWU7XG4gICAgfVxuXG4gICAgZnVsbEtleSArPSAnXFxuLS0tXFxuJyArIG5lc3RlZEhvb2tLZXk7XG4gIH1cblxuICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gIHJldHVybiBmdWxsS2V5O1xufVxuXG5mdW5jdGlvbiBoYXZlRXF1YWxTaWduYXR1cmVzKHByZXZUeXBlLCBuZXh0VHlwZSkge1xuICB2YXIgcHJldlNpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KHByZXZUeXBlKTtcbiAgdmFyIG5leHRTaWduYXR1cmUgPSBhbGxTaWduYXR1cmVzQnlUeXBlLmdldChuZXh0VHlwZSk7XG5cbiAgaWYgKHByZXZTaWduYXR1cmUgPT09IHVuZGVmaW5lZCAmJiBuZXh0U2lnbmF0dXJlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcmV2U2lnbmF0dXJlID09PSB1bmRlZmluZWQgfHwgbmV4dFNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbXB1dGVGdWxsS2V5KHByZXZTaWduYXR1cmUpICE9PSBjb21wdXRlRnVsbEtleShuZXh0U2lnbmF0dXJlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuZXh0U2lnbmF0dXJlLmZvcmNlUmVzZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNSZWFjdENsYXNzKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUucHJvdG90eXBlICYmIHR5cGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ7XG59XG5cbmZ1bmN0aW9uIGNhblByZXNlcnZlU3RhdGVCZXR3ZWVuKHByZXZUeXBlLCBuZXh0VHlwZSkge1xuICBpZiAoaXNSZWFjdENsYXNzKHByZXZUeXBlKSB8fCBpc1JlYWN0Q2xhc3MobmV4dFR5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGhhdmVFcXVhbFNpZ25hdHVyZXMocHJldlR5cGUsIG5leHRUeXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRmFtaWx5KHR5cGUpIHtcbiAgLy8gT25seSBjaGVjayB1cGRhdGVkIHR5cGVzIHRvIGtlZXAgbG9va3VwcyBmYXN0LlxuICByZXR1cm4gdXBkYXRlZEZhbWlsaWVzQnlUeXBlLmdldCh0eXBlKTtcbn0gLy8gSWYgd2UgZGlkbid0IGNhcmUgYWJvdXQgSUUxMSwgd2UgY291bGQgdXNlIG5ldyBNYXAvU2V0KGl0ZXJhYmxlKS5cblxuXG5mdW5jdGlvbiBjbG9uZU1hcChtYXApIHtcbiAgdmFyIGNsb25lID0gbmV3IE1hcCgpO1xuICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgIGNsb25lLnNldChrZXksIHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBjbG9uZTtcbn1cblxuZnVuY3Rpb24gY2xvbmVTZXQoc2V0KSB7XG4gIHZhciBjbG9uZSA9IG5ldyBTZXQoKTtcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgY2xvbmUuYWRkKHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBjbG9uZTtcbn0gLy8gVGhpcyBpcyBhIHNhZmV0eSBtZWNoYW5pc20gdG8gcHJvdGVjdCBhZ2FpbnN0IHJvZ3VlIGdldHRlcnMgYW5kIFByb3hpZXMuXG5cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSkge1xuICB0cnkge1xuICAgIHJldHVybiBvYmplY3RbcHJvcGVydHldO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBJbnRlbnRpb25hbGx5IGlnbm9yZS5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1SZWFjdFJlZnJlc2goKSB7XG5cbiAgaWYgKHBlbmRpbmdVcGRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGlzUGVyZm9ybWluZ1JlZnJlc2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlzUGVyZm9ybWluZ1JlZnJlc2ggPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgdmFyIHN0YWxlRmFtaWxpZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHVwZGF0ZWRGYW1pbGllcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdXBkYXRlcyA9IHBlbmRpbmdVcGRhdGVzO1xuICAgIHBlbmRpbmdVcGRhdGVzID0gW107XG4gICAgdXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgZmFtaWx5ID0gX3JlZlswXSxcbiAgICAgICAgICBuZXh0VHlwZSA9IF9yZWZbMV07XG4gICAgICAvLyBOb3cgdGhhdCB3ZSBnb3QgYSByZWFsIGVkaXQsIHdlIGNhbiBjcmVhdGUgYXNzb2NpYXRpb25zXG4gICAgICAvLyB0aGF0IHdpbGwgYmUgcmVhZCBieSB0aGUgUmVhY3QgcmVjb25jaWxlci5cbiAgICAgIHZhciBwcmV2VHlwZSA9IGZhbWlseS5jdXJyZW50O1xuICAgICAgdXBkYXRlZEZhbWlsaWVzQnlUeXBlLnNldChwcmV2VHlwZSwgZmFtaWx5KTtcbiAgICAgIHVwZGF0ZWRGYW1pbGllc0J5VHlwZS5zZXQobmV4dFR5cGUsIGZhbWlseSk7XG4gICAgICBmYW1pbHkuY3VycmVudCA9IG5leHRUeXBlOyAvLyBEZXRlcm1pbmUgd2hldGhlciB0aGlzIHNob3VsZCBiZSBhIHJlLXJlbmRlciBvciBhIHJlLW1vdW50LlxuXG4gICAgICBpZiAoY2FuUHJlc2VydmVTdGF0ZUJldHdlZW4ocHJldlR5cGUsIG5leHRUeXBlKSkge1xuICAgICAgICB1cGRhdGVkRmFtaWxpZXMuYWRkKGZhbWlseSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFsZUZhbWlsaWVzLmFkZChmYW1pbHkpO1xuICAgICAgfVxuICAgIH0pOyAvLyBUT0RPOiByZW5hbWUgdGhlc2UgZmllbGRzIHRvIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwuXG5cbiAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgdXBkYXRlZEZhbWlsaWVzOiB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICAvLyBGYW1pbGllcyB0aGF0IHdpbGwgcmUtcmVuZGVyIHByZXNlcnZpbmcgc3RhdGVcbiAgICAgIHN0YWxlRmFtaWxpZXM6IHN0YWxlRmFtaWxpZXMgLy8gRmFtaWxpZXMgdGhhdCB3aWxsIGJlIHJlbW91bnRlZFxuXG4gICAgfTtcbiAgICBoZWxwZXJzQnlSZW5kZXJlcklELmZvckVhY2goZnVuY3Rpb24gKGhlbHBlcnMpIHtcbiAgICAgIC8vIEV2ZW4gaWYgdGhlcmUgYXJlIG5vIHJvb3RzLCBzZXQgdGhlIGhhbmRsZXIgb24gZmlyc3QgdXBkYXRlLlxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgaWYgKm5ldyogcm9vdHMgYXJlIG1vdW50ZWQsIHRoZXknbGwgdXNlIHRoZSByZXNvbHZlIGhhbmRsZXIuXG4gICAgICBoZWxwZXJzLnNldFJlZnJlc2hIYW5kbGVyKHJlc29sdmVGYW1pbHkpO1xuICAgIH0pO1xuICAgIHZhciBkaWRFcnJvciA9IGZhbHNlO1xuICAgIHZhciBmaXJzdEVycm9yID0gbnVsbDsgLy8gV2Ugc25hcHNob3QgbWFwcyBhbmQgc2V0cyB0aGF0IGFyZSBtdXRhdGVkIGR1cmluZyBjb21taXRzLlxuICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZXJlIGlzIGEgcmlzayB0aGV5IHdpbGwgYmUgbXV0YXRlZCB3aGlsZVxuICAgIC8vIHdlIGl0ZXJhdGUgb3ZlciB0aGVtLiBGb3IgZXhhbXBsZSwgdHJ5aW5nIHRvIHJlY292ZXIgYSBmYWlsZWQgcm9vdFxuICAgIC8vIG1heSBjYXVzZSBhbm90aGVyIHJvb3QgdG8gYmUgYWRkZWQgdG8gdGhlIGZhaWxlZCBsaXN0IC0tIGFuIGluZmluaXRlIGxvb3AuXG5cbiAgICB2YXIgZmFpbGVkUm9vdHNTbmFwc2hvdCA9IGNsb25lU2V0KGZhaWxlZFJvb3RzKTtcbiAgICB2YXIgbW91bnRlZFJvb3RzU25hcHNob3QgPSBjbG9uZVNldChtb3VudGVkUm9vdHMpO1xuICAgIHZhciBoZWxwZXJzQnlSb290U25hcHNob3QgPSBjbG9uZU1hcChoZWxwZXJzQnlSb290KTtcbiAgICBmYWlsZWRSb290c1NuYXBzaG90LmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5Um9vdFNuYXBzaG90LmdldChyb290KTtcblxuICAgICAgaWYgKGhlbHBlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGhlbHBlcnMgZm9yIGEgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdCBSZWZyZXNoLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZhaWxlZFJvb3RzLmhhcyhyb290KSkgey8vIE5vIGxvbmdlciBmYWlsZWQuXG4gICAgICB9XG5cbiAgICAgIGlmIChyb290RWxlbWVudHMgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJvb3RFbGVtZW50cy5oYXMocm9vdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlbWVudCA9IHJvb3RFbGVtZW50cy5nZXQocm9vdCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGhlbHBlcnMuc2NoZWR1bGVSb290KHJvb3QsIGVsZW1lbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghZGlkRXJyb3IpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgZmlyc3RFcnJvciA9IGVycjtcbiAgICAgICAgfSAvLyBLZWVwIHRyeWluZyBvdGhlciByb290cy5cblxuICAgICAgfVxuICAgIH0pO1xuICAgIG1vdW50ZWRSb290c1NuYXBzaG90LmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5Um9vdFNuYXBzaG90LmdldChyb290KTtcblxuICAgICAgaWYgKGhlbHBlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGhlbHBlcnMgZm9yIGEgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdCBSZWZyZXNoLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW1vdW50ZWRSb290cy5oYXMocm9vdCkpIHsvLyBObyBsb25nZXIgbW91bnRlZC5cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaGVscGVycy5zY2hlZHVsZVJlZnJlc2gocm9vdCwgdXBkYXRlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWRpZEVycm9yKSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIGZpcnN0RXJyb3IgPSBlcnI7XG4gICAgICAgIH0gLy8gS2VlcCB0cnlpbmcgb3RoZXIgcm9vdHMuXG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgdGhyb3cgZmlyc3RFcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlO1xuICB9IGZpbmFsbHkge1xuICAgIGlzUGVyZm9ybWluZ1JlZnJlc2ggPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gcmVnaXN0ZXIodHlwZSwgaWQpIHtcbiAge1xuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIGluIGFuIGVkZ2UgY2FzZSwgZS5nLiBpZiB3ZSByZWdpc3RlclxuICAgIC8vIHJldHVybiB2YWx1ZSBvZiBhIEhPQyBidXQgaXQgcmV0dXJucyBhIGNhY2hlZCBjb21wb25lbnQuXG4gICAgLy8gSWdub3JlIGFueXRoaW5nIGJ1dCB0aGUgZmlyc3QgcmVnaXN0cmF0aW9uIGZvciBlYWNoIHR5cGUuXG5cblxuICAgIGlmIChhbGxGYW1pbGllc0J5VHlwZS5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIENyZWF0ZSBmYW1pbHkgb3IgcmVtZW1iZXIgdG8gdXBkYXRlIGl0LlxuICAgIC8vIE5vbmUgb2YgdGhpcyBib29ra2VlcGluZyBhZmZlY3RzIHJlY29uY2lsaWF0aW9uXG4gICAgLy8gdW50aWwgdGhlIGZpcnN0IHBlcmZvcm1SZWFjdFJlZnJlc2goKSBjYWxsIGFib3ZlLlxuXG5cbiAgICB2YXIgZmFtaWx5ID0gYWxsRmFtaWxpZXNCeUlELmdldChpZCk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZhbWlseSA9IHtcbiAgICAgICAgY3VycmVudDogdHlwZVxuICAgICAgfTtcbiAgICAgIGFsbEZhbWlsaWVzQnlJRC5zZXQoaWQsIGZhbWlseSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdVcGRhdGVzLnB1c2goW2ZhbWlseSwgdHlwZV0pO1xuICAgIH1cblxuICAgIGFsbEZhbWlsaWVzQnlUeXBlLnNldCh0eXBlLCBmYW1pbHkpOyAvLyBWaXNpdCBpbm5lciB0eXBlcyBiZWNhdXNlIHdlIG1pZ2h0IG5vdCBoYXZlIHJlZ2lzdGVyZWQgdGhlbS5cblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgcmVnaXN0ZXIodHlwZS5yZW5kZXIsIGlkICsgJyRyZW5kZXInKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICByZWdpc3Rlcih0eXBlLnR5cGUsIGlkICsgJyR0eXBlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRTaWduYXR1cmUodHlwZSwga2V5KSB7XG4gIHZhciBmb3JjZVJlc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIGdldEN1c3RvbUhvb2tzID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG5cbiAge1xuICAgIGlmICghYWxsU2lnbmF0dXJlc0J5VHlwZS5oYXModHlwZSkpIHtcbiAgICAgIGFsbFNpZ25hdHVyZXNCeVR5cGUuc2V0KHR5cGUsIHtcbiAgICAgICAgZm9yY2VSZXNldDogZm9yY2VSZXNldCxcbiAgICAgICAgb3duS2V5OiBrZXksXG4gICAgICAgIGZ1bGxLZXk6IG51bGwsXG4gICAgICAgIGdldEN1c3RvbUhvb2tzOiBnZXRDdXN0b21Ib29rcyB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIFZpc2l0IGlubmVyIHR5cGVzIGJlY2F1c2Ugd2UgbWlnaHQgbm90IGhhdmUgc2lnbmVkIHRoZW0uXG5cblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgc2V0U2lnbmF0dXJlKHR5cGUucmVuZGVyLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICBzZXRTaWduYXR1cmUodHlwZS50eXBlLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gVGhpcyBpcyBsYXppbHkgY2FsbGVkIGR1cmluZyBmaXJzdCByZW5kZXIgZm9yIGEgdHlwZS5cbi8vIEl0IGNhcHR1cmVzIEhvb2sgbGlzdCBhdCB0aGF0IHRpbWUgc28gaW5saW5lIHJlcXVpcmVzIGRvbid0IGJyZWFrIGNvbXBhcmlzb25zLlxuXG5mdW5jdGlvbiBjb2xsZWN0Q3VzdG9tSG9va3NGb3JTaWduYXR1cmUodHlwZSkge1xuICB7XG4gICAgdmFyIHNpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KHR5cGUpO1xuXG4gICAgaWYgKHNpZ25hdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb21wdXRlRnVsbEtleShzaWduYXR1cmUpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RmFtaWx5QnlJRChpZCkge1xuICB7XG4gICAgcmV0dXJuIGFsbEZhbWlsaWVzQnlJRC5nZXQoaWQpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGYW1pbHlCeVR5cGUodHlwZSkge1xuICB7XG4gICAgcmV0dXJuIGFsbEZhbWlsaWVzQnlUeXBlLmdldCh0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmluZEFmZmVjdGVkSG9zdEluc3RhbmNlcyhmYW1pbGllcykge1xuICB7XG4gICAgdmFyIGFmZmVjdGVkSW5zdGFuY2VzID0gbmV3IFNldCgpO1xuICAgIG1vdW50ZWRSb290cy5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICB2YXIgaGVscGVycyA9IGhlbHBlcnNCeVJvb3QuZ2V0KHJvb3QpO1xuXG4gICAgICBpZiAoaGVscGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgaGVscGVycyBmb3IgYSByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0IFJlZnJlc2guJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnN0YW5jZXNGb3JSb290ID0gaGVscGVycy5maW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2gocm9vdCwgZmFtaWxpZXMpO1xuICAgICAgaW5zdGFuY2VzRm9yUm9vdC5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIGFmZmVjdGVkSW5zdGFuY2VzLmFkZChpbnN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBhZmZlY3RlZEluc3RhbmNlcztcbiAgfVxufVxuZnVuY3Rpb24gaW5qZWN0SW50b0dsb2JhbEhvb2soZ2xvYmFsT2JqZWN0KSB7XG4gIHtcbiAgICAvLyBGb3IgUmVhY3QgTmF0aXZlLCB0aGUgZ2xvYmFsIGhvb2sgd2lsbCBiZSBzZXQgdXAgYnkgcmVxdWlyZSgncmVhY3QtZGV2dG9vbHMtY29yZScpLlxuICAgIC8vIFRoYXQgY29kZSB3aWxsIHJ1biBiZWZvcmUgdXMuIFNvIHdlIG5lZWQgdG8gbW9ua2V5cGF0Y2ggZnVuY3Rpb25zIG9uIGV4aXN0aW5nIGhvb2suXG4gICAgLy8gRm9yIFJlYWN0IFdlYiwgdGhlIGdsb2JhbCBob29rIHdpbGwgYmUgc2V0IHVwIGJ5IHRoZSBleHRlbnNpb24uXG4gICAgLy8gVGhpcyB3aWxsIGFsc28gcnVuIGJlZm9yZSB1cy5cbiAgICB2YXIgaG9vayA9IGdsb2JhbE9iamVjdC5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbiAgICBpZiAoaG9vayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBIb3dldmVyLCBpZiB0aGVyZSBpcyBubyBEZXZUb29scyBleHRlbnNpb24sIHdlJ2xsIG5lZWQgdG8gc2V0IHVwIHRoZSBnbG9iYWwgaG9vayBvdXJzZWx2ZXMuXG4gICAgICAvLyBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlIGl0J3MgaW1wb3J0YW50IHRoYXQgcmVuZGVyZXIgY29kZSBydW5zICphZnRlciogdGhpcyBtZXRob2QgY2FsbC5cbiAgICAgIC8vIE90aGVyd2lzZSwgdGhlIHJlbmRlcmVyIHdpbGwgdGhpbmsgdGhhdCB0aGVyZSBpcyBubyBnbG9iYWwgaG9vaywgYW5kIHdvbid0IGRvIHRoZSBpbmplY3Rpb24uXG4gICAgICB2YXIgbmV4dElEID0gMDtcbiAgICAgIGdsb2JhbE9iamVjdC5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPSBob29rID0ge1xuICAgICAgICByZW5kZXJlcnM6IG5ldyBNYXAoKSxcbiAgICAgICAgc3VwcG9ydHNGaWJlcjogdHJ1ZSxcbiAgICAgICAgaW5qZWN0OiBmdW5jdGlvbiAoaW5qZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dElEKys7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2NoZWR1bGVGaWJlclJvb3Q6IGZ1bmN0aW9uIChpZCwgcm9vdCwgY2hpbGRyZW4pIHt9LFxuICAgICAgICBvbkNvbW1pdEZpYmVyUm9vdDogZnVuY3Rpb24gKGlkLCByb290LCBtYXliZVByaW9yaXR5TGV2ZWwsIGRpZEVycm9yKSB7fSxcbiAgICAgICAgb25Db21taXRGaWJlclVubW91bnQ6IGZ1bmN0aW9uICgpIHt9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChob29rLmlzRGlzYWJsZWQpIHtcbiAgICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgICAvLyBvZiBEZXZUb29scyBpbnRlZ3JhdGlvbiBhbmQgYXNzb2NpYXRlZCB3YXJuaW5ncyBhbmQgbG9ncy5cbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1NvbWV0aGluZyBoYXMgc2hpbW1lZCB0aGUgUmVhY3QgRGV2VG9vbHMgZ2xvYmFsIGhvb2sgKF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXykuICcgKyAnRmFzdCBSZWZyZXNoIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhpcyBzaGltIGFuZCB3aWxsIGJlIGRpc2FibGVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSGVyZSwgd2UganVzdCB3YW50IHRvIGdldCBhIHJlZmVyZW5jZSB0byBzY2hlZHVsZVJlZnJlc2guXG5cblxuICAgIHZhciBvbGRJbmplY3QgPSBob29rLmluamVjdDtcblxuICAgIGhvb2suaW5qZWN0ID0gZnVuY3Rpb24gKGluamVjdGVkKSB7XG4gICAgICB2YXIgaWQgPSBvbGRJbmplY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgaWYgKHR5cGVvZiBpbmplY3RlZC5zY2hlZHVsZVJlZnJlc2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluamVjdGVkLnNldFJlZnJlc2hIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRoaXMgdmVyc2lvbiBzdXBwb3J0cyBSZWFjdCBSZWZyZXNoLlxuICAgICAgICBoZWxwZXJzQnlSZW5kZXJlcklELnNldChpZCwgaW5qZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaWQ7XG4gICAgfTsgLy8gRG8gdGhlIHNhbWUgZm9yIGFueSBhbHJlYWR5IGluamVjdGVkIHJvb3RzLlxuICAgIC8vIFRoaXMgaXMgdXNlZnVsIGlmIFJlYWN0RE9NIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNzYyNlxuXG5cbiAgICBob29rLnJlbmRlcmVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbmplY3RlZCwgaWQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5qZWN0ZWQuc2NoZWR1bGVSZWZyZXNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbmplY3RlZC5zZXRSZWZyZXNoSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUaGlzIHZlcnNpb24gc3VwcG9ydHMgUmVhY3QgUmVmcmVzaC5cbiAgICAgICAgaGVscGVyc0J5UmVuZGVyZXJJRC5zZXQoaWQsIGluamVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gV2UgYWxzbyB3YW50IHRvIHRyYWNrIGN1cnJlbnRseSBtb3VudGVkIHJvb3RzLlxuXG4gICAgdmFyIG9sZE9uQ29tbWl0RmliZXJSb290ID0gaG9vay5vbkNvbW1pdEZpYmVyUm9vdDtcblxuICAgIHZhciBvbGRPblNjaGVkdWxlRmliZXJSb290ID0gaG9vay5vblNjaGVkdWxlRmliZXJSb290IHx8IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgaG9vay5vblNjaGVkdWxlRmliZXJSb290ID0gZnVuY3Rpb24gKGlkLCByb290LCBjaGlsZHJlbikge1xuICAgICAgaWYgKCFpc1BlcmZvcm1pbmdSZWZyZXNoKSB7XG4gICAgICAgIC8vIElmIGl0IHdhcyBpbnRlbnRpb25hbGx5IHNjaGVkdWxlZCwgZG9uJ3QgYXR0ZW1wdCB0byByZXN0b3JlLlxuICAgICAgICAvLyBUaGlzIGluY2x1ZGVzIGludGVudGlvbmFsbHkgc2NoZWR1bGVkIHVubW91bnRzLlxuICAgICAgICBmYWlsZWRSb290cy5kZWxldGUocm9vdCk7XG5cbiAgICAgICAgaWYgKHJvb3RFbGVtZW50cyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJvb3RFbGVtZW50cy5zZXQocm9vdCwgY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvbGRPblNjaGVkdWxlRmliZXJSb290LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcblxuICAgIGhvb2sub25Db21taXRGaWJlclJvb3QgPSBmdW5jdGlvbiAoaWQsIHJvb3QsIG1heWJlUHJpb3JpdHlMZXZlbCwgZGlkRXJyb3IpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5UmVuZGVyZXJJRC5nZXQoaWQpO1xuXG4gICAgICBpZiAoaGVscGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlbHBlcnNCeVJvb3Quc2V0KHJvb3QsIGhlbHBlcnMpO1xuICAgICAgICB2YXIgY3VycmVudCA9IHJvb3QuY3VycmVudDtcbiAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGN1cnJlbnQuYWx0ZXJuYXRlOyAvLyBXZSBuZWVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgcm9vdCBoYXMganVzdCAodW4pbW91bnRlZC5cbiAgICAgICAgLy8gVGhpcyBsb2dpYyBpcyBjb3B5LXBhc3RlZCBmcm9tIHNpbWlsYXIgbG9naWMgaW4gdGhlIERldlRvb2xzIGJhY2tlbmQuXG4gICAgICAgIC8vIElmIHRoaXMgYnJlYWtzIHdpdGggc29tZSByZWZhY3RvcmluZywgeW91J2xsIHdhbnQgdG8gdXBkYXRlIERldlRvb2xzIHRvby5cblxuICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHdhc01vdW50ZWQgPSBhbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSAhPSBudWxsICYmIGFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmVsZW1lbnQgIT0gbnVsbCAmJiBtb3VudGVkUm9vdHMuaGFzKHJvb3QpO1xuICAgICAgICAgIHZhciBpc01vdW50ZWQgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUuZWxlbWVudCAhPSBudWxsO1xuXG4gICAgICAgICAgaWYgKCF3YXNNb3VudGVkICYmIGlzTW91bnRlZCkge1xuICAgICAgICAgICAgLy8gTW91bnQgYSBuZXcgcm9vdC5cbiAgICAgICAgICAgIG1vdW50ZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgICAgICBmYWlsZWRSb290cy5kZWxldGUocm9vdCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh3YXNNb3VudGVkICYmIGlzTW91bnRlZCkgOyBlbHNlIGlmICh3YXNNb3VudGVkICYmICFpc01vdW50ZWQpIHtcbiAgICAgICAgICAgIC8vIFVubW91bnQgYW4gZXhpc3Rpbmcgcm9vdC5cbiAgICAgICAgICAgIG1vdW50ZWRSb290cy5kZWxldGUocm9vdCk7XG5cbiAgICAgICAgICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgICAgICAgICAvLyBXZSdsbCByZW1vdW50IGl0IG9uIGZ1dHVyZSBlZGl0cy5cbiAgICAgICAgICAgICAgZmFpbGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaGVscGVyc0J5Um9vdC5kZWxldGUocm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICghd2FzTW91bnRlZCAmJiAhaXNNb3VudGVkKSB7XG4gICAgICAgICAgICBpZiAoZGlkRXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gV2UnbGwgcmVtb3VudCBpdCBvbiBmdXR1cmUgZWRpdHMuXG4gICAgICAgICAgICAgIGZhaWxlZFJvb3RzLmFkZChyb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTW91bnQgYSBuZXcgcm9vdC5cbiAgICAgICAgICBtb3VudGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICB9XG4gICAgICB9IC8vIEFsd2F5cyBjYWxsIHRoZSBkZWNvcmF0ZWQgRGV2VG9vbHMgaG9vay5cblxuXG4gICAgICByZXR1cm4gb2xkT25Db21taXRGaWJlclJvb3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBoYXNVbnJlY292ZXJhYmxlRXJyb3JzKCkge1xuICAvLyBUT0RPOiBkZWxldGUgdGhpcyBhZnRlciByZW1vdmluZyBkZXBlbmRlbmN5IGluIFJOLlxuICByZXR1cm4gZmFsc2U7XG59IC8vIEV4cG9zZWQgZm9yIHRlc3RpbmcuXG5cbmZ1bmN0aW9uIF9nZXRNb3VudGVkUm9vdENvdW50KCkge1xuICB7XG4gICAgcmV0dXJuIG1vdW50ZWRSb290cy5zaXplO1xuICB9XG59IC8vIFRoaXMgaXMgYSB3cmFwcGVyIG92ZXIgbW9yZSBwcmltaXRpdmUgZnVuY3Rpb25zIGZvciBzZXR0aW5nIHNpZ25hdHVyZS5cbi8vIFNpZ25hdHVyZXMgbGV0IHVzIGRlY2lkZSB3aGV0aGVyIHRoZSBIb29rIG9yZGVyIGhhcyBjaGFuZ2VkIG9uIHJlZnJlc2guXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgdHJhbnNmb3JtIHRhcmdldCwgZS5nLjpcbi8vIHZhciBfcyA9IGNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtKClcbi8vXG4vLyBmdW5jdGlvbiBIZWxsbygpIHtcbi8vICAgY29uc3QgW2Zvbywgc2V0Rm9vXSA9IHVzZVN0YXRlKDApO1xuLy8gICBjb25zdCB2YWx1ZSA9IHVzZUN1c3RvbUhvb2soKTtcbi8vICAgX3MoKTsgLyogQ2FsbCB3aXRob3V0IGFyZ3VtZW50cyB0cmlnZ2VycyBjb2xsZWN0aW5nIHRoZSBjdXN0b20gSG9vayBsaXN0LlxuLy8gICAgICAgICAgKiBUaGlzIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyB0aGUgbW9kdWxlIGV2YWx1YXRpb24gYmVjYXVzZSB3ZVxuLy8gICAgICAgICAgKiBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgbW9kdWxlIG9yZGVyIHdpdGggaW5saW5lIHJlcXVpcmVzLlxuLy8gICAgICAgICAgKiBOZXh0IGNhbGxzIGFyZSBub29wcy4gKi9cbi8vICAgcmV0dXJuIDxoMT5IaTwvaDE+O1xuLy8gfVxuLy9cbi8vIC8qIENhbGwgd2l0aCBhcmd1bWVudHMgYXR0YWNoZXMgdGhlIHNpZ25hdHVyZSB0byB0aGUgdHlwZTogKi9cbi8vIF9zKFxuLy8gICBIZWxsbyxcbi8vICAgJ3VzZVN0YXRle1tmb28sIHNldEZvb119KDApJyxcbi8vICAgKCkgPT4gW3VzZUN1c3RvbUhvb2tdLCAvKiBMYXp5IHRvIGF2b2lkIHRyaWdnZXJpbmcgaW5saW5lIHJlcXVpcmVzICovXG4vLyApO1xuXG5mdW5jdGlvbiBjcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybSgpIHtcbiAge1xuICAgIHZhciBzYXZlZFR5cGU7XG4gICAgdmFyIGhhc0N1c3RvbUhvb2tzO1xuICAgIHZhciBkaWRDb2xsZWN0SG9va3MgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHR5cGUsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBXZSdyZSBpbiB0aGUgaW5pdGlhbCBwaGFzZSB0aGF0IGFzc29jaWF0ZXMgc2lnbmF0dXJlc1xuICAgICAgICAvLyB3aXRoIHRoZSBmdW5jdGlvbnMuIE5vdGUgdGhpcyBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIC8vIGluIEhPQyBjaGFpbnMgbGlrZSBfcyhob2MxKF9zKGhvYzIoX3MoYWN0dWFsRnVuY3Rpb24pKSkpKS5cbiAgICAgICAgaWYgKCFzYXZlZFR5cGUpIHtcbiAgICAgICAgICAvLyBXZSdyZSBpbiB0aGUgaW5uZXJtb3N0IGNhbGwsIHNvIHRoaXMgaXMgdGhlIGFjdHVhbCB0eXBlLlxuICAgICAgICAgIHNhdmVkVHlwZSA9IHR5cGU7XG4gICAgICAgICAgaGFzQ3VzdG9tSG9va3MgPSB0eXBlb2YgZ2V0Q3VzdG9tSG9va3MgPT09ICdmdW5jdGlvbic7XG4gICAgICAgIH0gLy8gU2V0IHRoZSBzaWduYXR1cmUgZm9yIGFsbCB0eXBlcyAoZXZlbiB3cmFwcGVycyEpIGluIGNhc2VcbiAgICAgICAgLy8gdGhleSBoYXZlIG5vIHNpZ25hdHVyZXMgb2YgdGhlaXIgb3duLiBUaGlzIGlzIHRvIHByZXZlbnRcbiAgICAgICAgLy8gcHJvYmxlbXMgbGlrZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzIwNDE3LlxuXG5cbiAgICAgICAgaWYgKHR5cGUgIT0gbnVsbCAmJiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSkge1xuICAgICAgICAgIHNldFNpZ25hdHVyZSh0eXBlLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UncmUgaW4gdGhlIF9zKCkgY2FsbCB3aXRob3V0IGFyZ3VtZW50cywgd2hpY2ggbWVhbnNcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgdGltZSB0byBjb2xsZWN0IGN1c3RvbSBIb29rIHNpZ25hdHVyZXMuXG4gICAgICAgIC8vIE9ubHkgZG8gdGhpcyBvbmNlLiBUaGlzIHBhdGggaXMgaG90IGFuZCBydW5zICppbnNpZGUqIGV2ZXJ5IHJlbmRlciFcbiAgICAgICAgaWYgKCFkaWRDb2xsZWN0SG9va3MgJiYgaGFzQ3VzdG9tSG9va3MpIHtcbiAgICAgICAgICBkaWRDb2xsZWN0SG9va3MgPSB0cnVlO1xuICAgICAgICAgIGNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZShzYXZlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gaXNMaWtlbHlDb21wb25lbnRUeXBlKHR5cGUpIHtcbiAge1xuICAgIHN3aXRjaCAodHlwZW9mIHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIEZpcnN0LCBkZWFsIHdpdGggY2xhc3Nlcy5cbiAgICAgICAgICBpZiAodHlwZS5wcm90b3R5cGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgLy8gUmVhY3QgY2xhc3MuXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3duTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0eXBlLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChvd25OYW1lcy5sZW5ndGggPiAxIHx8IG93bk5hbWVzWzBdICE9PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIGNsYXNzLlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuXG5cbiAgICAgICAgICAgIGlmICh0eXBlLnByb3RvdHlwZS5fX3Byb3RvX18gIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgLy8gSXQgaGFzIGEgc3VwZXJjbGFzcy5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSAvLyBQYXNzIHRocm91Z2guXG4gICAgICAgICAgICAvLyBUaGlzIGxvb2tzIGxpa2UgYSByZWd1bGFyIGZ1bmN0aW9uIHdpdGggZW1wdHkgcHJvdG90eXBlLlxuXG4gICAgICAgICAgfSAvLyBGb3IgcGxhaW4gZnVuY3Rpb25zIGFuZCBhcnJvd3MsIHVzZSBuYW1lIGFzIGEgaGV1cmlzdGljLlxuXG5cbiAgICAgICAgICB2YXIgbmFtZSA9IHR5cGUubmFtZSB8fCB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgL15bQS1aXS8udGVzdChuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgIC8vIERlZmluaXRlbHkgUmVhY3QgY29tcG9uZW50cy5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLl9nZXRNb3VudGVkUm9vdENvdW50ID0gX2dldE1vdW50ZWRSb290Q291bnQ7XG5leHBvcnRzLmNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZSA9IGNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZTtcbmV4cG9ydHMuY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm0gPSBjcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybTtcbmV4cG9ydHMuZmluZEFmZmVjdGVkSG9zdEluc3RhbmNlcyA9IGZpbmRBZmZlY3RlZEhvc3RJbnN0YW5jZXM7XG5leHBvcnRzLmdldEZhbWlseUJ5SUQgPSBnZXRGYW1pbHlCeUlEO1xuZXhwb3J0cy5nZXRGYW1pbHlCeVR5cGUgPSBnZXRGYW1pbHlCeVR5cGU7XG5leHBvcnRzLmhhc1VucmVjb3ZlcmFibGVFcnJvcnMgPSBoYXNVbnJlY292ZXJhYmxlRXJyb3JzO1xuZXhwb3J0cy5pbmplY3RJbnRvR2xvYmFsSG9vayA9IGluamVjdEludG9HbG9iYWxIb29rO1xuZXhwb3J0cy5pc0xpa2VseUNvbXBvbmVudFR5cGUgPSBpc0xpa2VseUNvbXBvbmVudFR5cGU7XG5leHBvcnRzLnBlcmZvcm1SZWFjdFJlZnJlc2ggPSBwZXJmb3JtUmVhY3RSZWZyZXNoO1xuZXhwb3J0cy5yZWdpc3RlciA9IHJlZ2lzdGVyO1xuZXhwb3J0cy5zZXRTaWduYXR1cmUgPSBzZXRTaWduYXR1cmU7XG4gIH0pKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js\n")); + +/***/ }), + +/***/ "./node_modules/next/dist/compiled/react-refresh/runtime.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react-refresh/runtime.js ***! + \******************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-refresh-runtime.development.js */ \"./node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LXJlZnJlc2gvcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLEtBQXFDLEVBQUUsRUFFMUMsQ0FBQztBQUNGLEVBQUUsa0xBQXNFO0FBQ3hFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtcmVmcmVzaC9ydW50aW1lLmpzPzljNmUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LXJlZnJlc2gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/next/dist/compiled/react-refresh/runtime.js\n")); + +/***/ }) + +}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } +/******/ var __webpack_exports__ = (__webpack_exec__("./node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js")); +/******/ _N_E = __webpack_exports__; +/******/ } +]); \ No newline at end of file diff --git a/frontend/.next/static/chunks/webpack.js b/frontend/.next/static/chunks/webpack.js new file mode 100644 index 000000000..e2b3d4617 --- /dev/null +++ b/frontend/.next/static/chunks/webpack.js @@ -0,0 +1,1411 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +/******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({}); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ if (cachedModule.error !== undefined) throw cachedModule.error; +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ id: moduleId, +/******/ loaded: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ var threw = true; +/******/ try { +/******/ var execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ }; +/******/ __webpack_require__.i.forEach(function(handler) { handler(execOptions); }); +/******/ module = execOptions.module; +/******/ execOptions.factory.call(module.exports, module, module.exports, execOptions.require); +/******/ threw = false; +/******/ } finally { +/******/ if(threw) delete __webpack_module_cache__[moduleId]; +/******/ } +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = __webpack_module_cache__; +/******/ +/******/ // expose the module execution interceptor +/******/ __webpack_require__.i = []; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ !function() { +/******/ var deferred = []; +/******/ __webpack_require__.O = function(result, chunkIds, fn, priority) { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var chunkIds = deferred[i][0]; +/******/ var fn = deferred[i][1]; +/******/ var priority = deferred[i][2]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/compat get default export */ +/******/ !function() { +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function() { return module['default']; } : +/******/ function() { return module; }; +/******/ __webpack_require__.d(getter, { a: getter }); +/******/ return getter; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/create fake namespace object */ +/******/ !function() { +/******/ var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; }; +/******/ var leafPrototypes; +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 16: return value when it's Promise-like +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = this(value); +/******/ if(mode & 8) return value; +/******/ if(typeof value === 'object' && value) { +/******/ if((mode & 4) && value.__esModule) return value; +/******/ if((mode & 16) && typeof value.then === 'function') return value; +/******/ } +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ var def = {}; +/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)]; +/******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) { +/******/ Object.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; }); +/******/ } +/******/ def['default'] = function() { return value; }; +/******/ __webpack_require__.d(ns, def); +/******/ return ns; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/ensure chunk */ +/******/ !function() { +/******/ __webpack_require__.f = {}; +/******/ // This file contains only the entry chunk. +/******/ // The chunk loading function for additional chunks +/******/ __webpack_require__.e = function(chunkId) { +/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) { +/******/ __webpack_require__.f[key](chunkId, promises); +/******/ return promises; +/******/ }, [])); +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/get javascript chunk filename */ +/******/ !function() { +/******/ // This function allow to reference async chunks +/******/ __webpack_require__.u = function(chunkId) { +/******/ // return url for filenames based on template +/******/ return undefined; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/get javascript update chunk filename */ +/******/ !function() { +/******/ // This function allow to reference all chunks +/******/ __webpack_require__.hu = function(chunkId) { +/******/ // return url for filenames based on template +/******/ return "static/webpack/" + chunkId + "." + __webpack_require__.h() + ".hot-update.js"; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/get mini-css chunk filename */ +/******/ !function() { +/******/ // This function allow to reference all chunks +/******/ __webpack_require__.miniCssF = function(chunkId) { +/******/ // return url for filenames based on template +/******/ return "static/css/" + chunkId + ".css"; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/get update manifest filename */ +/******/ !function() { +/******/ __webpack_require__.hmrF = function() { return "static/webpack/" + __webpack_require__.h() + ".webpack.hot-update.json"; }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "c31bdf059575c145"; } +/******/ }(); +/******/ +/******/ /* webpack/runtime/global */ +/******/ !function() { +/******/ __webpack_require__.g = (function() { +/******/ if (typeof globalThis === 'object') return globalThis; +/******/ try { +/******/ return this || new Function('return this')(); +/******/ } catch (e) { +/******/ if (typeof window === 'object') return window; +/******/ } +/******/ })(); +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/******/ /* webpack/runtime/load script */ +/******/ !function() { +/******/ var inProgress = {}; +/******/ var dataWebpackPrefix = "_N_E:"; +/******/ // loadScript function to load a script via script tag +/******/ __webpack_require__.l = function(url, done, key, chunkId) { +/******/ if(inProgress[url]) { inProgress[url].push(done); return; } +/******/ var script, needAttach; +/******/ if(key !== undefined) { +/******/ var scripts = document.getElementsByTagName("script"); +/******/ for(var i = 0; i < scripts.length; i++) { +/******/ var s = scripts[i]; +/******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; } +/******/ } +/******/ } +/******/ if(!script) { +/******/ needAttach = true; +/******/ script = document.createElement('script'); +/******/ +/******/ script.charset = 'utf-8'; +/******/ script.timeout = 120; +/******/ if (__webpack_require__.nc) { +/******/ script.setAttribute("nonce", __webpack_require__.nc); +/******/ } +/******/ script.setAttribute("data-webpack", dataWebpackPrefix + key); +/******/ script.src = __webpack_require__.tu(url); +/******/ } +/******/ inProgress[url] = [done]; +/******/ var onScriptComplete = function(prev, event) { +/******/ // avoid mem leaks in IE. +/******/ script.onerror = script.onload = null; +/******/ clearTimeout(timeout); +/******/ var doneFns = inProgress[url]; +/******/ delete inProgress[url]; +/******/ script.parentNode && script.parentNode.removeChild(script); +/******/ doneFns && doneFns.forEach(function(fn) { return fn(event); }); +/******/ if(prev) return prev(event); +/******/ } +/******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000); +/******/ script.onerror = onScriptComplete.bind(null, script.onerror); +/******/ script.onload = onScriptComplete.bind(null, script.onload); +/******/ needAttach && document.head.appendChild(script); +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ !function() { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/node module decorator */ +/******/ !function() { +/******/ __webpack_require__.nmd = function(module) { +/******/ module.paths = []; +/******/ if (!module.children) module.children = []; +/******/ return module; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/trusted types policy */ +/******/ !function() { +/******/ var policy; +/******/ __webpack_require__.tt = function() { +/******/ // Create Trusted Type policy if Trusted Types are available and the policy doesn't exist yet. +/******/ if (policy === undefined) { +/******/ policy = { +/******/ createScript: function(script) { return script; }, +/******/ createScriptURL: function(url) { return url; } +/******/ }; +/******/ if (typeof trustedTypes !== "undefined" && trustedTypes.createPolicy) { +/******/ policy = trustedTypes.createPolicy("nextjs#bundler", policy); +/******/ } +/******/ } +/******/ return policy; +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/trusted types script */ +/******/ !function() { +/******/ __webpack_require__.ts = function(script) { return __webpack_require__.tt().createScript(script); }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/trusted types script url */ +/******/ !function() { +/******/ __webpack_require__.tu = function(url) { return __webpack_require__.tt().createScriptURL(url); }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hot module replacement */ +/******/ !function() { +/******/ var currentModuleData = {}; +/******/ var installedModules = __webpack_require__.c; +/******/ +/******/ // module and require creation +/******/ var currentChildModule; +/******/ var currentParents = []; +/******/ +/******/ // status +/******/ var registeredStatusHandlers = []; +/******/ var currentStatus = "idle"; +/******/ +/******/ // while downloading +/******/ var blockingPromises = 0; +/******/ var blockingPromisesWaiting = []; +/******/ +/******/ // The update info +/******/ var currentUpdateApplyHandlers; +/******/ var queuedInvalidatedModules; +/******/ +/******/ // eslint-disable-next-line no-unused-vars +/******/ __webpack_require__.hmrD = currentModuleData; +/******/ +/******/ __webpack_require__.i.push(function (options) { +/******/ var module = options.module; +/******/ var require = createRequire(options.require, options.id); +/******/ module.hot = createModuleHotObject(options.id, module); +/******/ module.parents = currentParents; +/******/ module.children = []; +/******/ currentParents = []; +/******/ options.require = require; +/******/ }); +/******/ +/******/ __webpack_require__.hmrC = {}; +/******/ __webpack_require__.hmrI = {}; +/******/ +/******/ function createRequire(require, moduleId) { +/******/ var me = installedModules[moduleId]; +/******/ if (!me) return require; +/******/ var fn = function (request) { +/******/ if (me.hot.active) { +/******/ if (installedModules[request]) { +/******/ var parents = installedModules[request].parents; +/******/ if (parents.indexOf(moduleId) === -1) { +/******/ parents.push(moduleId); +/******/ } +/******/ } else { +/******/ currentParents = [moduleId]; +/******/ currentChildModule = request; +/******/ } +/******/ if (me.children.indexOf(request) === -1) { +/******/ me.children.push(request); +/******/ } +/******/ } else { +/******/ console.warn( +/******/ "[HMR] unexpected require(" + +/******/ request + +/******/ ") from disposed module " + +/******/ moduleId +/******/ ); +/******/ currentParents = []; +/******/ } +/******/ return require(request); +/******/ }; +/******/ var createPropertyDescriptor = function (name) { +/******/ return { +/******/ configurable: true, +/******/ enumerable: true, +/******/ get: function () { +/******/ return require[name]; +/******/ }, +/******/ set: function (value) { +/******/ require[name] = value; +/******/ } +/******/ }; +/******/ }; +/******/ for (var name in require) { +/******/ if (Object.prototype.hasOwnProperty.call(require, name) && name !== "e") { +/******/ Object.defineProperty(fn, name, createPropertyDescriptor(name)); +/******/ } +/******/ } +/******/ fn.e = function (chunkId) { +/******/ return trackBlockingPromise(require.e(chunkId)); +/******/ }; +/******/ return fn; +/******/ } +/******/ +/******/ function createModuleHotObject(moduleId, me) { +/******/ var _main = currentChildModule !== moduleId; +/******/ var hot = { +/******/ // private stuff +/******/ _acceptedDependencies: {}, +/******/ _acceptedErrorHandlers: {}, +/******/ _declinedDependencies: {}, +/******/ _selfAccepted: false, +/******/ _selfDeclined: false, +/******/ _selfInvalidated: false, +/******/ _disposeHandlers: [], +/******/ _main: _main, +/******/ _requireSelf: function () { +/******/ currentParents = me.parents.slice(); +/******/ currentChildModule = _main ? undefined : moduleId; +/******/ __webpack_require__(moduleId); +/******/ }, +/******/ +/******/ // Module API +/******/ active: true, +/******/ accept: function (dep, callback, errorHandler) { +/******/ if (dep === undefined) hot._selfAccepted = true; +/******/ else if (typeof dep === "function") hot._selfAccepted = dep; +/******/ else if (typeof dep === "object" && dep !== null) { +/******/ for (var i = 0; i < dep.length; i++) { +/******/ hot._acceptedDependencies[dep[i]] = callback || function () {}; +/******/ hot._acceptedErrorHandlers[dep[i]] = errorHandler; +/******/ } +/******/ } else { +/******/ hot._acceptedDependencies[dep] = callback || function () {}; +/******/ hot._acceptedErrorHandlers[dep] = errorHandler; +/******/ } +/******/ }, +/******/ decline: function (dep) { +/******/ if (dep === undefined) hot._selfDeclined = true; +/******/ else if (typeof dep === "object" && dep !== null) +/******/ for (var i = 0; i < dep.length; i++) +/******/ hot._declinedDependencies[dep[i]] = true; +/******/ else hot._declinedDependencies[dep] = true; +/******/ }, +/******/ dispose: function (callback) { +/******/ hot._disposeHandlers.push(callback); +/******/ }, +/******/ addDisposeHandler: function (callback) { +/******/ hot._disposeHandlers.push(callback); +/******/ }, +/******/ removeDisposeHandler: function (callback) { +/******/ var idx = hot._disposeHandlers.indexOf(callback); +/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1); +/******/ }, +/******/ invalidate: function () { +/******/ this._selfInvalidated = true; +/******/ switch (currentStatus) { +/******/ case "idle": +/******/ currentUpdateApplyHandlers = []; +/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) { +/******/ __webpack_require__.hmrI[key]( +/******/ moduleId, +/******/ currentUpdateApplyHandlers +/******/ ); +/******/ }); +/******/ setStatus("ready"); +/******/ break; +/******/ case "ready": +/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) { +/******/ __webpack_require__.hmrI[key]( +/******/ moduleId, +/******/ currentUpdateApplyHandlers +/******/ ); +/******/ }); +/******/ break; +/******/ case "prepare": +/******/ case "check": +/******/ case "dispose": +/******/ case "apply": +/******/ (queuedInvalidatedModules = queuedInvalidatedModules || []).push( +/******/ moduleId +/******/ ); +/******/ break; +/******/ default: +/******/ // ignore requests in error states +/******/ break; +/******/ } +/******/ }, +/******/ +/******/ // Management API +/******/ check: hotCheck, +/******/ apply: hotApply, +/******/ status: function (l) { +/******/ if (!l) return currentStatus; +/******/ registeredStatusHandlers.push(l); +/******/ }, +/******/ addStatusHandler: function (l) { +/******/ registeredStatusHandlers.push(l); +/******/ }, +/******/ removeStatusHandler: function (l) { +/******/ var idx = registeredStatusHandlers.indexOf(l); +/******/ if (idx >= 0) registeredStatusHandlers.splice(idx, 1); +/******/ }, +/******/ +/******/ //inherit from previous dispose call +/******/ data: currentModuleData[moduleId] +/******/ }; +/******/ currentChildModule = undefined; +/******/ return hot; +/******/ } +/******/ +/******/ function setStatus(newStatus) { +/******/ currentStatus = newStatus; +/******/ var results = []; +/******/ +/******/ for (var i = 0; i < registeredStatusHandlers.length; i++) +/******/ results[i] = registeredStatusHandlers[i].call(null, newStatus); +/******/ +/******/ return Promise.all(results); +/******/ } +/******/ +/******/ function unblock() { +/******/ if (--blockingPromises === 0) { +/******/ setStatus("ready").then(function () { +/******/ if (blockingPromises === 0) { +/******/ var list = blockingPromisesWaiting; +/******/ blockingPromisesWaiting = []; +/******/ for (var i = 0; i < list.length; i++) { +/******/ list[i](); +/******/ } +/******/ } +/******/ }); +/******/ } +/******/ } +/******/ +/******/ function trackBlockingPromise(promise) { +/******/ switch (currentStatus) { +/******/ case "ready": +/******/ setStatus("prepare"); +/******/ /* fallthrough */ +/******/ case "prepare": +/******/ blockingPromises++; +/******/ promise.then(unblock, unblock); +/******/ return promise; +/******/ default: +/******/ return promise; +/******/ } +/******/ } +/******/ +/******/ function waitForBlockingPromises(fn) { +/******/ if (blockingPromises === 0) return fn(); +/******/ return new Promise(function (resolve) { +/******/ blockingPromisesWaiting.push(function () { +/******/ resolve(fn()); +/******/ }); +/******/ }); +/******/ } +/******/ +/******/ function hotCheck(applyOnUpdate) { +/******/ if (currentStatus !== "idle") { +/******/ throw new Error("check() is only allowed in idle status"); +/******/ } +/******/ return setStatus("check") +/******/ .then(__webpack_require__.hmrM) +/******/ .then(function (update) { +/******/ if (!update) { +/******/ return setStatus(applyInvalidatedModules() ? "ready" : "idle").then( +/******/ function () { +/******/ return null; +/******/ } +/******/ ); +/******/ } +/******/ +/******/ return setStatus("prepare").then(function () { +/******/ var updatedModules = []; +/******/ currentUpdateApplyHandlers = []; +/******/ +/******/ return Promise.all( +/******/ Object.keys(__webpack_require__.hmrC).reduce(function ( +/******/ promises, +/******/ key +/******/ ) { +/******/ __webpack_require__.hmrC[key]( +/******/ update.c, +/******/ update.r, +/******/ update.m, +/******/ promises, +/******/ currentUpdateApplyHandlers, +/******/ updatedModules +/******/ ); +/******/ return promises; +/******/ }, +/******/ []) +/******/ ).then(function () { +/******/ return waitForBlockingPromises(function () { +/******/ if (applyOnUpdate) { +/******/ return internalApply(applyOnUpdate); +/******/ } else { +/******/ return setStatus("ready").then(function () { +/******/ return updatedModules; +/******/ }); +/******/ } +/******/ }); +/******/ }); +/******/ }); +/******/ }); +/******/ } +/******/ +/******/ function hotApply(options) { +/******/ if (currentStatus !== "ready") { +/******/ return Promise.resolve().then(function () { +/******/ throw new Error( +/******/ "apply() is only allowed in ready status (state: " + +/******/ currentStatus + +/******/ ")" +/******/ ); +/******/ }); +/******/ } +/******/ return internalApply(options); +/******/ } +/******/ +/******/ function internalApply(options) { +/******/ options = options || {}; +/******/ +/******/ applyInvalidatedModules(); +/******/ +/******/ var results = currentUpdateApplyHandlers.map(function (handler) { +/******/ return handler(options); +/******/ }); +/******/ currentUpdateApplyHandlers = undefined; +/******/ +/******/ var errors = results +/******/ .map(function (r) { +/******/ return r.error; +/******/ }) +/******/ .filter(Boolean); +/******/ +/******/ if (errors.length > 0) { +/******/ return setStatus("abort").then(function () { +/******/ throw errors[0]; +/******/ }); +/******/ } +/******/ +/******/ // Now in "dispose" phase +/******/ var disposePromise = setStatus("dispose"); +/******/ +/******/ results.forEach(function (result) { +/******/ if (result.dispose) result.dispose(); +/******/ }); +/******/ +/******/ // Now in "apply" phase +/******/ var applyPromise = setStatus("apply"); +/******/ +/******/ var error; +/******/ var reportError = function (err) { +/******/ if (!error) error = err; +/******/ }; +/******/ +/******/ var outdatedModules = []; +/******/ results.forEach(function (result) { +/******/ if (result.apply) { +/******/ var modules = result.apply(reportError); +/******/ if (modules) { +/******/ for (var i = 0; i < modules.length; i++) { +/******/ outdatedModules.push(modules[i]); +/******/ } +/******/ } +/******/ } +/******/ }); +/******/ +/******/ return Promise.all([disposePromise, applyPromise]).then(function () { +/******/ // handle errors in accept handlers and self accepted module load +/******/ if (error) { +/******/ return setStatus("fail").then(function () { +/******/ throw error; +/******/ }); +/******/ } +/******/ +/******/ if (queuedInvalidatedModules) { +/******/ return internalApply(options).then(function (list) { +/******/ outdatedModules.forEach(function (moduleId) { +/******/ if (list.indexOf(moduleId) < 0) list.push(moduleId); +/******/ }); +/******/ return list; +/******/ }); +/******/ } +/******/ +/******/ return setStatus("idle").then(function () { +/******/ return outdatedModules; +/******/ }); +/******/ }); +/******/ } +/******/ +/******/ function applyInvalidatedModules() { +/******/ if (queuedInvalidatedModules) { +/******/ if (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = []; +/******/ Object.keys(__webpack_require__.hmrI).forEach(function (key) { +/******/ queuedInvalidatedModules.forEach(function (moduleId) { +/******/ __webpack_require__.hmrI[key]( +/******/ moduleId, +/******/ currentUpdateApplyHandlers +/******/ ); +/******/ }); +/******/ }); +/******/ queuedInvalidatedModules = undefined; +/******/ return true; +/******/ } +/******/ } +/******/ }(); +/******/ +/******/ /* webpack/runtime/publicPath */ +/******/ !function() { +/******/ __webpack_require__.p = "/_next/"; +/******/ }(); +/******/ +/******/ /* webpack/runtime/react refresh */ +/******/ !function() { +/******/ if (__webpack_require__.i) { +/******/ __webpack_require__.i.push(function(options) { +/******/ var originalFactory = options.factory; +/******/ options.factory = function(moduleObject, moduleExports, webpackRequire) { +/******/ var hasRefresh = typeof self !== "undefined" && !!self.$RefreshInterceptModuleExecution$; +/******/ var cleanup = hasRefresh ? self.$RefreshInterceptModuleExecution$(moduleObject.id) : function() {}; +/******/ try { +/******/ originalFactory.call(this, moduleObject, moduleExports, webpackRequire); +/******/ } finally { +/******/ cleanup(); +/******/ } +/******/ } +/******/ }) +/******/ } +/******/ }(); +/******/ +/******/ /* webpack/runtime/compat */ +/******/ +/******/ +/******/ // noop fns to prevent runtime errors during initialization +/******/ if (typeof self !== "undefined") { +/******/ self.$RefreshReg$ = function () {}; +/******/ self.$RefreshSig$ = function () { +/******/ return function (type) { +/******/ return type; +/******/ }; +/******/ }; +/******/ } +/******/ +/******/ /* webpack/runtime/css loading */ +/******/ !function() { +/******/ var createStylesheet = function(chunkId, fullhref, resolve, reject) { +/******/ var linkTag = document.createElement("link"); +/******/ +/******/ linkTag.rel = "stylesheet"; +/******/ linkTag.type = "text/css"; +/******/ var onLinkComplete = function(event) { +/******/ // avoid mem leaks. +/******/ linkTag.onerror = linkTag.onload = null; +/******/ if (event.type === 'load') { +/******/ resolve(); +/******/ } else { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realHref = event && event.target && event.target.href || fullhref; +/******/ var err = new Error("Loading CSS chunk " + chunkId + " failed.\n(" + realHref + ")"); +/******/ err.code = "CSS_CHUNK_LOAD_FAILED"; +/******/ err.type = errorType; +/******/ err.request = realHref; +/******/ linkTag.parentNode.removeChild(linkTag) +/******/ reject(err); +/******/ } +/******/ } +/******/ linkTag.onerror = linkTag.onload = onLinkComplete; +/******/ linkTag.href = fullhref; +/******/ +/******/ document.head.appendChild(linkTag); +/******/ return linkTag; +/******/ }; +/******/ var findStylesheet = function(href, fullhref) { +/******/ var existingLinkTags = document.getElementsByTagName("link"); +/******/ for(var i = 0; i < existingLinkTags.length; i++) { +/******/ var tag = existingLinkTags[i]; +/******/ var dataHref = tag.getAttribute("data-href") || tag.getAttribute("href"); +/******/ if(tag.rel === "stylesheet" && (dataHref === href || dataHref === fullhref)) return tag; +/******/ } +/******/ var existingStyleTags = document.getElementsByTagName("style"); +/******/ for(var i = 0; i < existingStyleTags.length; i++) { +/******/ var tag = existingStyleTags[i]; +/******/ var dataHref = tag.getAttribute("data-href"); +/******/ if(dataHref === href || dataHref === fullhref) return tag; +/******/ } +/******/ }; +/******/ var loadStylesheet = function(chunkId) { +/******/ return new Promise(function(resolve, reject) { +/******/ var href = __webpack_require__.miniCssF(chunkId); +/******/ var fullhref = __webpack_require__.p + href; +/******/ if(findStylesheet(href, fullhref)) return resolve(); +/******/ createStylesheet(chunkId, fullhref, resolve, reject); +/******/ }); +/******/ } +/******/ // no chunk loading +/******/ +/******/ var oldTags = []; +/******/ var newTags = []; +/******/ var applyHandler = function(options) { +/******/ return { dispose: function() { +/******/ for(var i = 0; i < oldTags.length; i++) { +/******/ var oldTag = oldTags[i]; +/******/ if(oldTag.parentNode) oldTag.parentNode.removeChild(oldTag); +/******/ } +/******/ oldTags.length = 0; +/******/ }, apply: function() { +/******/ for(var i = 0; i < newTags.length; i++) newTags[i].rel = "stylesheet"; +/******/ newTags.length = 0; +/******/ } }; +/******/ } +/******/ __webpack_require__.hmrC.miniCss = function(chunkIds, removedChunks, removedModules, promises, applyHandlers, updatedModulesList) { +/******/ applyHandlers.push(applyHandler); +/******/ chunkIds.forEach(function(chunkId) { +/******/ var href = __webpack_require__.miniCssF(chunkId); +/******/ var fullhref = __webpack_require__.p + href; +/******/ var oldTag = findStylesheet(href, fullhref); +/******/ if(!oldTag) return; +/******/ promises.push(new Promise(function(resolve, reject) { +/******/ var tag = createStylesheet(chunkId, fullhref, function() { +/******/ tag.as = "style"; +/******/ tag.rel = "preload"; +/******/ resolve(); +/******/ }, reject); +/******/ oldTags.push(oldTag); +/******/ newTags.push(tag); +/******/ })); +/******/ }); +/******/ } +/******/ }(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ !function() { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = __webpack_require__.hmrS_jsonp = __webpack_require__.hmrS_jsonp || { +/******/ "webpack": 0 +/******/ }; +/******/ +/******/ __webpack_require__.f.j = function(chunkId, promises) { +/******/ // JSONP chunk loading for javascript +/******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined; +/******/ if(installedChunkData !== 0) { // 0 means "already installed". +/******/ +/******/ // a Promise means "currently loading". +/******/ if(installedChunkData) { +/******/ promises.push(installedChunkData[2]); +/******/ } else { +/******/ if("webpack" != chunkId) { +/******/ // setup Promise in chunk cache +/******/ var promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; }); +/******/ promises.push(installedChunkData[2] = promise); +/******/ +/******/ // start chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = function(event) { +/******/ if(__webpack_require__.o(installedChunks, chunkId)) { +/******/ installedChunkData = installedChunks[chunkId]; +/******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined; +/******/ if(installedChunkData) { +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ installedChunkData[1](error); +/******/ } +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId); +/******/ } else installedChunks[chunkId] = 0; +/******/ } +/******/ } +/******/ }; +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ var currentUpdatedModulesList; +/******/ var waitingUpdateResolves = {}; +/******/ function loadUpdateChunk(chunkId, updatedModulesList) { +/******/ currentUpdatedModulesList = updatedModulesList; +/******/ return new Promise(function(resolve, reject) { +/******/ waitingUpdateResolves[chunkId] = resolve; +/******/ // start update chunk loading +/******/ var url = __webpack_require__.p + __webpack_require__.hu(chunkId); +/******/ // create error before stack unwound to get useful stacktrace later +/******/ var error = new Error(); +/******/ var loadingEnded = function(event) { +/******/ if(waitingUpdateResolves[chunkId]) { +/******/ waitingUpdateResolves[chunkId] = undefined +/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); +/******/ var realSrc = event && event.target && event.target.src; +/******/ error.message = 'Loading hot update chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; +/******/ error.name = 'ChunkLoadError'; +/******/ error.type = errorType; +/******/ error.request = realSrc; +/******/ reject(error); +/******/ } +/******/ }; +/******/ __webpack_require__.l(url, loadingEnded); +/******/ }); +/******/ } +/******/ +/******/ self["webpackHotUpdate_N_E"] = function(chunkId, moreModules, runtime) { +/******/ for(var moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ currentUpdate[moduleId] = moreModules[moduleId]; +/******/ if(currentUpdatedModulesList) currentUpdatedModulesList.push(moduleId); +/******/ } +/******/ } +/******/ if(runtime) currentUpdateRuntime.push(runtime); +/******/ if(waitingUpdateResolves[chunkId]) { +/******/ waitingUpdateResolves[chunkId](); +/******/ waitingUpdateResolves[chunkId] = undefined; +/******/ } +/******/ }; +/******/ +/******/ var currentUpdateChunks; +/******/ var currentUpdate; +/******/ var currentUpdateRemovedChunks; +/******/ var currentUpdateRuntime; +/******/ function applyHandler(options) { +/******/ if (__webpack_require__.f) delete __webpack_require__.f.jsonpHmr; +/******/ currentUpdateChunks = undefined; +/******/ function getAffectedModuleEffects(updateModuleId) { +/******/ var outdatedModules = [updateModuleId]; +/******/ var outdatedDependencies = {}; +/******/ +/******/ var queue = outdatedModules.map(function (id) { +/******/ return { +/******/ chain: [id], +/******/ id: id +/******/ }; +/******/ }); +/******/ while (queue.length > 0) { +/******/ var queueItem = queue.pop(); +/******/ var moduleId = queueItem.id; +/******/ var chain = queueItem.chain; +/******/ var module = __webpack_require__.c[moduleId]; +/******/ if ( +/******/ !module || +/******/ (module.hot._selfAccepted && !module.hot._selfInvalidated) +/******/ ) +/******/ continue; +/******/ if (module.hot._selfDeclined) { +/******/ return { +/******/ type: "self-declined", +/******/ chain: chain, +/******/ moduleId: moduleId +/******/ }; +/******/ } +/******/ if (module.hot._main) { +/******/ return { +/******/ type: "unaccepted", +/******/ chain: chain, +/******/ moduleId: moduleId +/******/ }; +/******/ } +/******/ for (var i = 0; i < module.parents.length; i++) { +/******/ var parentId = module.parents[i]; +/******/ var parent = __webpack_require__.c[parentId]; +/******/ if (!parent) continue; +/******/ if (parent.hot._declinedDependencies[moduleId]) { +/******/ return { +/******/ type: "declined", +/******/ chain: chain.concat([parentId]), +/******/ moduleId: moduleId, +/******/ parentId: parentId +/******/ }; +/******/ } +/******/ if (outdatedModules.indexOf(parentId) !== -1) continue; +/******/ if (parent.hot._acceptedDependencies[moduleId]) { +/******/ if (!outdatedDependencies[parentId]) +/******/ outdatedDependencies[parentId] = []; +/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]); +/******/ continue; +/******/ } +/******/ delete outdatedDependencies[parentId]; +/******/ outdatedModules.push(parentId); +/******/ queue.push({ +/******/ chain: chain.concat([parentId]), +/******/ id: parentId +/******/ }); +/******/ } +/******/ } +/******/ +/******/ return { +/******/ type: "accepted", +/******/ moduleId: updateModuleId, +/******/ outdatedModules: outdatedModules, +/******/ outdatedDependencies: outdatedDependencies +/******/ }; +/******/ } +/******/ +/******/ function addAllToSet(a, b) { +/******/ for (var i = 0; i < b.length; i++) { +/******/ var item = b[i]; +/******/ if (a.indexOf(item) === -1) a.push(item); +/******/ } +/******/ } +/******/ +/******/ // at begin all updates modules are outdated +/******/ // the "outdated" status can propagate to parents if they don't accept the children +/******/ var outdatedDependencies = {}; +/******/ var outdatedModules = []; +/******/ var appliedUpdate = {}; +/******/ +/******/ var warnUnexpectedRequire = function warnUnexpectedRequire(module) { +/******/ console.warn( +/******/ "[HMR] unexpected require(" + module.id + ") to disposed module" +/******/ ); +/******/ }; +/******/ +/******/ for (var moduleId in currentUpdate) { +/******/ if (__webpack_require__.o(currentUpdate, moduleId)) { +/******/ var newModuleFactory = currentUpdate[moduleId]; +/******/ /** @type {TODO} */ +/******/ var result; +/******/ if (newModuleFactory) { +/******/ result = getAffectedModuleEffects(moduleId); +/******/ } else { +/******/ result = { +/******/ type: "disposed", +/******/ moduleId: moduleId +/******/ }; +/******/ } +/******/ /** @type {Error|false} */ +/******/ var abortError = false; +/******/ var doApply = false; +/******/ var doDispose = false; +/******/ var chainInfo = ""; +/******/ if (result.chain) { +/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> "); +/******/ } +/******/ switch (result.type) { +/******/ case "self-declined": +/******/ if (options.onDeclined) options.onDeclined(result); +/******/ if (!options.ignoreDeclined) +/******/ abortError = new Error( +/******/ "Aborted because of self decline: " + +/******/ result.moduleId + +/******/ chainInfo +/******/ ); +/******/ break; +/******/ case "declined": +/******/ if (options.onDeclined) options.onDeclined(result); +/******/ if (!options.ignoreDeclined) +/******/ abortError = new Error( +/******/ "Aborted because of declined dependency: " + +/******/ result.moduleId + +/******/ " in " + +/******/ result.parentId + +/******/ chainInfo +/******/ ); +/******/ break; +/******/ case "unaccepted": +/******/ if (options.onUnaccepted) options.onUnaccepted(result); +/******/ if (!options.ignoreUnaccepted) +/******/ abortError = new Error( +/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo +/******/ ); +/******/ break; +/******/ case "accepted": +/******/ if (options.onAccepted) options.onAccepted(result); +/******/ doApply = true; +/******/ break; +/******/ case "disposed": +/******/ if (options.onDisposed) options.onDisposed(result); +/******/ doDispose = true; +/******/ break; +/******/ default: +/******/ throw new Error("Unexception type " + result.type); +/******/ } +/******/ if (abortError) { +/******/ return { +/******/ error: abortError +/******/ }; +/******/ } +/******/ if (doApply) { +/******/ appliedUpdate[moduleId] = newModuleFactory; +/******/ addAllToSet(outdatedModules, result.outdatedModules); +/******/ for (moduleId in result.outdatedDependencies) { +/******/ if (__webpack_require__.o(result.outdatedDependencies, moduleId)) { +/******/ if (!outdatedDependencies[moduleId]) +/******/ outdatedDependencies[moduleId] = []; +/******/ addAllToSet( +/******/ outdatedDependencies[moduleId], +/******/ result.outdatedDependencies[moduleId] +/******/ ); +/******/ } +/******/ } +/******/ } +/******/ if (doDispose) { +/******/ addAllToSet(outdatedModules, [result.moduleId]); +/******/ appliedUpdate[moduleId] = warnUnexpectedRequire; +/******/ } +/******/ } +/******/ } +/******/ currentUpdate = undefined; +/******/ +/******/ // Store self accepted outdated modules to require them later by the module system +/******/ var outdatedSelfAcceptedModules = []; +/******/ for (var j = 0; j < outdatedModules.length; j++) { +/******/ var outdatedModuleId = outdatedModules[j]; +/******/ var module = __webpack_require__.c[outdatedModuleId]; +/******/ if ( +/******/ module && +/******/ (module.hot._selfAccepted || module.hot._main) && +/******/ // removed self-accepted modules should not be required +/******/ appliedUpdate[outdatedModuleId] !== warnUnexpectedRequire && +/******/ // when called invalidate self-accepting is not possible +/******/ !module.hot._selfInvalidated +/******/ ) { +/******/ outdatedSelfAcceptedModules.push({ +/******/ module: outdatedModuleId, +/******/ require: module.hot._requireSelf, +/******/ errorHandler: module.hot._selfAccepted +/******/ }); +/******/ } +/******/ } +/******/ +/******/ var moduleOutdatedDependencies; +/******/ +/******/ return { +/******/ dispose: function () { +/******/ currentUpdateRemovedChunks.forEach(function (chunkId) { +/******/ delete installedChunks[chunkId]; +/******/ }); +/******/ currentUpdateRemovedChunks = undefined; +/******/ +/******/ var idx; +/******/ var queue = outdatedModules.slice(); +/******/ while (queue.length > 0) { +/******/ var moduleId = queue.pop(); +/******/ var module = __webpack_require__.c[moduleId]; +/******/ if (!module) continue; +/******/ +/******/ var data = {}; +/******/ +/******/ // Call dispose handlers +/******/ var disposeHandlers = module.hot._disposeHandlers; +/******/ for (j = 0; j < disposeHandlers.length; j++) { +/******/ disposeHandlers[j].call(null, data); +/******/ } +/******/ __webpack_require__.hmrD[moduleId] = data; +/******/ +/******/ // disable module (this disables requires from this module) +/******/ module.hot.active = false; +/******/ +/******/ // remove module from cache +/******/ delete __webpack_require__.c[moduleId]; +/******/ +/******/ // when disposing there is no need to call dispose handler +/******/ delete outdatedDependencies[moduleId]; +/******/ +/******/ // remove "parents" references from all children +/******/ for (j = 0; j < module.children.length; j++) { +/******/ var child = __webpack_require__.c[module.children[j]]; +/******/ if (!child) continue; +/******/ idx = child.parents.indexOf(moduleId); +/******/ if (idx >= 0) { +/******/ child.parents.splice(idx, 1); +/******/ } +/******/ } +/******/ } +/******/ +/******/ // remove outdated dependency from module children +/******/ var dependency; +/******/ for (var outdatedModuleId in outdatedDependencies) { +/******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { +/******/ module = __webpack_require__.c[outdatedModuleId]; +/******/ if (module) { +/******/ moduleOutdatedDependencies = +/******/ outdatedDependencies[outdatedModuleId]; +/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) { +/******/ dependency = moduleOutdatedDependencies[j]; +/******/ idx = module.children.indexOf(dependency); +/******/ if (idx >= 0) module.children.splice(idx, 1); +/******/ } +/******/ } +/******/ } +/******/ } +/******/ }, +/******/ apply: function (reportError) { +/******/ // insert new code +/******/ for (var updateModuleId in appliedUpdate) { +/******/ if (__webpack_require__.o(appliedUpdate, updateModuleId)) { +/******/ __webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId]; +/******/ } +/******/ } +/******/ +/******/ // run new runtime modules +/******/ for (var i = 0; i < currentUpdateRuntime.length; i++) { +/******/ currentUpdateRuntime[i](__webpack_require__); +/******/ } +/******/ +/******/ // call accept handlers +/******/ for (var outdatedModuleId in outdatedDependencies) { +/******/ if (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) { +/******/ var module = __webpack_require__.c[outdatedModuleId]; +/******/ if (module) { +/******/ moduleOutdatedDependencies = +/******/ outdatedDependencies[outdatedModuleId]; +/******/ var callbacks = []; +/******/ var errorHandlers = []; +/******/ var dependenciesForCallbacks = []; +/******/ for (var j = 0; j < moduleOutdatedDependencies.length; j++) { +/******/ var dependency = moduleOutdatedDependencies[j]; +/******/ var acceptCallback = +/******/ module.hot._acceptedDependencies[dependency]; +/******/ var errorHandler = +/******/ module.hot._acceptedErrorHandlers[dependency]; +/******/ if (acceptCallback) { +/******/ if (callbacks.indexOf(acceptCallback) !== -1) continue; +/******/ callbacks.push(acceptCallback); +/******/ errorHandlers.push(errorHandler); +/******/ dependenciesForCallbacks.push(dependency); +/******/ } +/******/ } +/******/ for (var k = 0; k < callbacks.length; k++) { +/******/ try { +/******/ callbacks[k].call(null, moduleOutdatedDependencies); +/******/ } catch (err) { +/******/ if (typeof errorHandlers[k] === "function") { +/******/ try { +/******/ errorHandlers[k](err, { +/******/ moduleId: outdatedModuleId, +/******/ dependencyId: dependenciesForCallbacks[k] +/******/ }); +/******/ } catch (err2) { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "accept-error-handler-errored", +/******/ moduleId: outdatedModuleId, +/******/ dependencyId: dependenciesForCallbacks[k], +/******/ error: err2, +/******/ originalError: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ reportError(err2); +/******/ reportError(err); +/******/ } +/******/ } +/******/ } else { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "accept-errored", +/******/ moduleId: outdatedModuleId, +/******/ dependencyId: dependenciesForCallbacks[k], +/******/ error: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ reportError(err); +/******/ } +/******/ } +/******/ } +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ // Load self accepted modules +/******/ for (var o = 0; o < outdatedSelfAcceptedModules.length; o++) { +/******/ var item = outdatedSelfAcceptedModules[o]; +/******/ var moduleId = item.module; +/******/ try { +/******/ item.require(moduleId); +/******/ } catch (err) { +/******/ if (typeof item.errorHandler === "function") { +/******/ try { +/******/ item.errorHandler(err, { +/******/ moduleId: moduleId, +/******/ module: __webpack_require__.c[moduleId] +/******/ }); +/******/ } catch (err2) { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "self-accept-error-handler-errored", +/******/ moduleId: moduleId, +/******/ error: err2, +/******/ originalError: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ reportError(err2); +/******/ reportError(err); +/******/ } +/******/ } +/******/ } else { +/******/ if (options.onErrored) { +/******/ options.onErrored({ +/******/ type: "self-accept-errored", +/******/ moduleId: moduleId, +/******/ error: err +/******/ }); +/******/ } +/******/ if (!options.ignoreErrored) { +/******/ reportError(err); +/******/ } +/******/ } +/******/ } +/******/ } +/******/ +/******/ return outdatedModules; +/******/ } +/******/ }; +/******/ } +/******/ __webpack_require__.hmrI.jsonp = function (moduleId, applyHandlers) { +/******/ if (!currentUpdate) { +/******/ currentUpdate = {}; +/******/ currentUpdateRuntime = []; +/******/ currentUpdateRemovedChunks = []; +/******/ applyHandlers.push(applyHandler); +/******/ } +/******/ if (!__webpack_require__.o(currentUpdate, moduleId)) { +/******/ currentUpdate[moduleId] = __webpack_require__.m[moduleId]; +/******/ } +/******/ }; +/******/ __webpack_require__.hmrC.jsonp = function ( +/******/ chunkIds, +/******/ removedChunks, +/******/ removedModules, +/******/ promises, +/******/ applyHandlers, +/******/ updatedModulesList +/******/ ) { +/******/ applyHandlers.push(applyHandler); +/******/ currentUpdateChunks = {}; +/******/ currentUpdateRemovedChunks = removedChunks; +/******/ currentUpdate = removedModules.reduce(function (obj, key) { +/******/ obj[key] = false; +/******/ return obj; +/******/ }, {}); +/******/ currentUpdateRuntime = []; +/******/ chunkIds.forEach(function (chunkId) { +/******/ if ( +/******/ __webpack_require__.o(installedChunks, chunkId) && +/******/ installedChunks[chunkId] !== undefined +/******/ ) { +/******/ promises.push(loadUpdateChunk(chunkId, updatedModulesList)); +/******/ currentUpdateChunks[chunkId] = true; +/******/ } else { +/******/ currentUpdateChunks[chunkId] = false; +/******/ } +/******/ }); +/******/ if (__webpack_require__.f) { +/******/ __webpack_require__.f.jsonpHmr = function (chunkId, promises) { +/******/ if ( +/******/ currentUpdateChunks && +/******/ __webpack_require__.o(currentUpdateChunks, chunkId) && +/******/ !currentUpdateChunks[chunkId] +/******/ ) { +/******/ promises.push(loadUpdateChunk(chunkId)); +/******/ currentUpdateChunks[chunkId] = true; +/******/ } +/******/ }; +/******/ } +/******/ }; +/******/ +/******/ __webpack_require__.hmrM = function() { +/******/ if (typeof fetch === "undefined") throw new Error("No browser support: need fetch API"); +/******/ return fetch(__webpack_require__.p + __webpack_require__.hmrF()).then(function(response) { +/******/ if(response.status === 404) return; // no update available +/******/ if(!response.ok) throw new Error("Failed to fetch update manifest " + response.statusText); +/******/ return response.json(); +/******/ }); +/******/ }; +/******/ +/******/ __webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; }; +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = function(parentChunkLoadingFunction, data) { +/******/ var chunkIds = data[0]; +/******/ var moreModules = data[1]; +/******/ var runtime = data[2]; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ }(); +/******/ +/************************************************************************/ +/******/ +/******/ // module cache are used so entry inlining is disabled +/******/ +/******/ })() +; \ No newline at end of file diff --git a/frontend/.next/static/css/app/layout.css b/frontend/.next/static/css/app/layout.css new file mode 100644 index 000000000..19b0bb830 --- /dev/null +++ b/frontend/.next/static/css/app/layout.css @@ -0,0 +1,1448 @@ +/*!****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[11].oneOf[12].use[3]!./styles/globals.css ***! + \****************************************************************************************************************************************************************************************************************************************************************/ +/* +! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com +*//* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; /* 1 */ + border-width: 0; /* 2 */ + border-style: solid; /* 2 */ + border-color: #e5e7eb; /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + -moz-tab-size: 4; /* 3 */ + -o-tab-size: 4; + tab-size: 4; /* 3 */ + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */ + font-feature-settings: normal; /* 5 */ + font-variation-settings: normal; /* 6 */ + -webkit-tap-highlight-color: transparent; /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; /* 1 */ + line-height: inherit; /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; /* 1 */ + color: inherit; /* 2 */ + border-top-width: 1px; /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */ + font-feature-settings: normal; /* 2 */ + font-variation-settings: normal; /* 3 */ + font-size: 1em; /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; /* 1 */ + border-color: inherit; /* 2 */ + border-collapse: collapse; /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-feature-settings: inherit; /* 1 */ + font-variation-settings: inherit; /* 1 */ + font-size: 100%; /* 1 */ + font-weight: inherit; /* 1 */ + line-height: inherit; /* 1 */ + color: inherit; /* 1 */ + margin: 0; /* 2 */ + padding: 0; /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; /* 1 */ + background-color: transparent; /* 2 */ + background-image: none; /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; /* 1 */ + color: #9ca3af; /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; /* 1 */ + color: #9ca3af; /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; /* 1 */ + vertical-align: middle; /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} +.container { + width: 100%; +} +@media (min-width: 640px) { + + .container { + max-width: 640px; + } +} +@media (min-width: 768px) { + + .container { + max-width: 768px; + } +} +@media (min-width: 1024px) { + + .container { + max-width: 1024px; + } +} +@media (min-width: 1280px) { + + .container { + max-width: 1280px; + } +} +@media (min-width: 1536px) { + + .container { + max-width: 1536px; + } +} +.btn { + border-radius: 0.375rem; + padding-left: 1rem; + padding-right: 1rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + font-weight: 500; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.btn-primary { + --tw-bg-opacity: 1; + background-color: rgb(0 112 243 / var(--tw-bg-opacity)); +} +.btn-primary:hover { + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity)); +} +.btn-secondary { + --tw-bg-opacity: 1; + background-color: rgb(30 41 59 / var(--tw-bg-opacity)); +} +.btn-secondary:hover { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity)); +} +.btn-accent { + --tw-bg-opacity: 1; + background-color: rgb(6 182 212 / var(--tw-bg-opacity)); +} +.btn-accent:hover { + --tw-bg-opacity: 1; + background-color: rgb(8 145 178 / var(--tw-bg-opacity)); +} +.form-input { + width: 100%; + border-radius: 0.375rem; + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity)); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 0.75rem; + padding-right: 0.75rem; +} +.form-input:focus { + border-color: transparent; + outline: 2px solid transparent; + outline-offset: 2px; + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); + --tw-ring-opacity: 1; + --tw-ring-color: rgb(0 112 243 / var(--tw-ring-opacity)); +} +.card { + border-radius: 0.5rem; + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); + padding: 1.5rem; + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} +.mx-2 { + margin-left: 0.5rem; + margin-right: 0.5rem; +} +.mx-auto { + margin-left: auto; + margin-right: auto; +} +.mb-1 { + margin-bottom: 0.25rem; +} +.mb-2 { + margin-bottom: 0.5rem; +} +.mb-3 { + margin-bottom: 0.75rem; +} +.mb-4 { + margin-bottom: 1rem; +} +.mb-6 { + margin-bottom: 1.5rem; +} +.mb-8 { + margin-bottom: 2rem; +} +.ml-2 { + margin-left: 0.5rem; +} +.ml-4 { + margin-left: 1rem; +} +.ml-auto { + margin-left: auto; +} +.mr-1 { + margin-right: 0.25rem; +} +.mr-2 { + margin-right: 0.5rem; +} +.mt-1 { + margin-top: 0.25rem; +} +.mt-2 { + margin-top: 0.5rem; +} +.mt-3 { + margin-top: 0.75rem; +} +.mt-4 { + margin-top: 1rem; +} +.mt-6 { + margin-top: 1.5rem; +} +.mt-8 { + margin-top: 2rem; +} +.block { + display: block; +} +.flex { + display: flex; +} +.table { + display: table; +} +.grid { + display: grid; +} +.hidden { + display: none; +} +.h-1 { + height: 0.25rem; +} +.h-10 { + height: 2.5rem; +} +.h-12 { + height: 3rem; +} +.h-2 { + height: 0.5rem; +} +.h-4 { + height: 1rem; +} +.h-5 { + height: 1.25rem; +} +.h-6 { + height: 1.5rem; +} +.h-8 { + height: 2rem; +} +.min-h-screen { + min-height: 100vh; +} +.w-0 { + width: 0px; +} +.w-1\/2 { + width: 50%; +} +.w-1\/4 { + width: 25%; +} +.w-10 { + width: 2.5rem; +} +.w-12 { + width: 3rem; +} +.w-16 { + width: 4rem; +} +.w-3\/4 { + width: 75%; +} +.w-4 { + width: 1rem; +} +.w-5 { + width: 1.25rem; +} +.w-6 { + width: 1.5rem; +} +.w-8 { + width: 2rem; +} +.w-full { + width: 100%; +} +.min-w-full { + min-width: 100%; +} +.max-w-prose { + max-width: 65ch; +} +.max-w-xl { + max-width: 36rem; +} +.flex-shrink-0 { + flex-shrink: 0; +} +.flex-grow { + flex-grow: 1; +} +.transform { + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} +@keyframes pulse { + + 50% { + opacity: .5; + } +} +.animate-pulse { + animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; +} +@keyframes spin { + + to { + transform: rotate(360deg); + } +} +.animate-spin { + animation: spin 1s linear infinite; +} +.cursor-pointer { + cursor: pointer; +} +.grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); +} +.flex-col { + flex-direction: column; +} +.items-center { + align-items: center; +} +.justify-start { + justify-content: flex-start; +} +.justify-end { + justify-content: flex-end; +} +.justify-center { + justify-content: center; +} +.justify-between { + justify-content: space-between; +} +.gap-2 { + gap: 0.5rem; +} +.gap-3 { + gap: 0.75rem; +} +.gap-4 { + gap: 1rem; +} +.gap-6 { + gap: 1.5rem; +} +.space-x-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.5rem * var(--tw-space-x-reverse)); + margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); +} +.space-x-3 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(0.75rem * var(--tw-space-x-reverse)); + margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); +} +.space-x-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1rem * var(--tw-space-x-reverse)); + margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); +} +.space-x-6 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1.5rem * var(--tw-space-x-reverse)); + margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse))); +} +.space-y-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1rem * var(--tw-space-y-reverse)); +} +.space-y-6 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); +} +.divide-y > :not([hidden]) ~ :not([hidden]) { + --tw-divide-y-reverse: 0; + border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); +} +.divide-gray-200 > :not([hidden]) ~ :not([hidden]) { + --tw-divide-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-divide-opacity)); +} +.overflow-hidden { + overflow: hidden; +} +.overflow-x-auto { + overflow-x: auto; +} +.whitespace-nowrap { + white-space: nowrap; +} +.rounded { + border-radius: 0.25rem; +} +.rounded-full { + border-radius: 9999px; +} +.rounded-lg { + border-radius: 0.5rem; +} +.rounded-md { + border-radius: 0.375rem; +} +.border { + border-width: 1px; +} +.border-2 { + border-width: 2px; +} +.border-dashed { + border-style: dashed; +} +.border-blue-200 { + --tw-border-opacity: 1; + border-color: rgb(191 219 254 / var(--tw-border-opacity)); +} +.border-blue-300 { + --tw-border-opacity: 1; + border-color: rgb(147 197 253 / var(--tw-border-opacity)); +} +.border-gray-200 { + --tw-border-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-border-opacity)); +} +.border-gray-300 { + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity)); +} +.border-green-200 { + --tw-border-opacity: 1; + border-color: rgb(187 247 208 / var(--tw-border-opacity)); +} +.border-red-200 { + --tw-border-opacity: 1; + border-color: rgb(254 202 202 / var(--tw-border-opacity)); +} +.border-red-500 { + --tw-border-opacity: 1; + border-color: rgb(239 68 68 / var(--tw-border-opacity)); +} +.border-yellow-200 { + --tw-border-opacity: 1; + border-color: rgb(254 240 138 / var(--tw-border-opacity)); +} +.border-green-400 { + --tw-border-opacity: 1; + border-color: rgb(74 222 128 / var(--tw-border-opacity)); +} +.border-primary { + --tw-border-opacity: 1; + border-color: rgb(0 112 243 / var(--tw-border-opacity)); +} +.border-red-300 { + --tw-border-opacity: 1; + border-color: rgb(252 165 165 / var(--tw-border-opacity)); +} +.bg-blue-200 { + --tw-bg-opacity: 1; + background-color: rgb(191 219 254 / var(--tw-bg-opacity)); +} +.bg-blue-300 { + --tw-bg-opacity: 1; + background-color: rgb(147 197 253 / var(--tw-bg-opacity)); +} +.bg-blue-400 { + --tw-bg-opacity: 1; + background-color: rgb(96 165 250 / var(--tw-bg-opacity)); +} +.bg-blue-50 { + --tw-bg-opacity: 1; + background-color: rgb(239 246 255 / var(--tw-bg-opacity)); +} +.bg-blue-500 { + --tw-bg-opacity: 1; + background-color: rgb(59 130 246 / var(--tw-bg-opacity)); +} +.bg-gray-100 { + --tw-bg-opacity: 1; + background-color: rgb(243 244 246 / var(--tw-bg-opacity)); +} +.bg-gray-200 { + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity)); +} +.bg-gray-300 { + --tw-bg-opacity: 1; + background-color: rgb(209 213 219 / var(--tw-bg-opacity)); +} +.bg-gray-50 { + --tw-bg-opacity: 1; + background-color: rgb(249 250 251 / var(--tw-bg-opacity)); +} +.bg-gray-500 { + --tw-bg-opacity: 1; + background-color: rgb(107 114 128 / var(--tw-bg-opacity)); +} +.bg-green-100 { + --tw-bg-opacity: 1; + background-color: rgb(220 252 231 / var(--tw-bg-opacity)); +} +.bg-green-200 { + --tw-bg-opacity: 1; + background-color: rgb(187 247 208 / var(--tw-bg-opacity)); +} +.bg-green-50 { + --tw-bg-opacity: 1; + background-color: rgb(240 253 244 / var(--tw-bg-opacity)); +} +.bg-green-500 { + --tw-bg-opacity: 1; + background-color: rgb(34 197 94 / var(--tw-bg-opacity)); +} +.bg-primary { + --tw-bg-opacity: 1; + background-color: rgb(0 112 243 / var(--tw-bg-opacity)); +} +.bg-red-100 { + --tw-bg-opacity: 1; + background-color: rgb(254 226 226 / var(--tw-bg-opacity)); +} +.bg-red-200 { + --tw-bg-opacity: 1; + background-color: rgb(254 202 202 / var(--tw-bg-opacity)); +} +.bg-red-50 { + --tw-bg-opacity: 1; + background-color: rgb(254 242 242 / var(--tw-bg-opacity)); +} +.bg-red-500 { + --tw-bg-opacity: 1; + background-color: rgb(239 68 68 / var(--tw-bg-opacity)); +} +.bg-secondary { + --tw-bg-opacity: 1; + background-color: rgb(30 41 59 / var(--tw-bg-opacity)); +} +.bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} +.bg-yellow-200 { + --tw-bg-opacity: 1; + background-color: rgb(254 240 138 / var(--tw-bg-opacity)); +} +.bg-yellow-50 { + --tw-bg-opacity: 1; + background-color: rgb(254 252 232 / var(--tw-bg-opacity)); +} +.bg-yellow-500 { + --tw-bg-opacity: 1; + background-color: rgb(234 179 8 / var(--tw-bg-opacity)); +} +.bg-gradient-to-r { + background-image: linear-gradient(to right, var(--tw-gradient-stops)); +} +.from-primary { + --tw-gradient-from: #0070f3 var(--tw-gradient-from-position); + --tw-gradient-to: rgb(0 112 243 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} +.to-accent { + --tw-gradient-to: #06b6d4 var(--tw-gradient-to-position); +} +.p-2 { + padding: 0.5rem; +} +.p-3 { + padding: 0.75rem; +} +.p-4 { + padding: 1rem; +} +.p-5 { + padding: 1.25rem; +} +.p-6 { + padding: 1.5rem; +} +.px-3 { + padding-left: 0.75rem; + padding-right: 0.75rem; +} +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} +.px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; +} +.py-1 { + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} +.py-2 { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} +.py-3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} +.py-8 { + padding-top: 2rem; + padding-bottom: 2rem; +} +.text-left { + text-align: left; +} +.text-center { + text-align: center; +} +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} +.text-base { + font-size: 1rem; + line-height: 1.5rem; +} +.text-lg { + font-size: 1.125rem; + line-height: 1.75rem; +} +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} +.text-xl { + font-size: 1.25rem; + line-height: 1.75rem; +} +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} +.font-bold { + font-weight: 700; +} +.font-medium { + font-weight: 500; +} +.font-semibold { + font-weight: 600; +} +.uppercase { + text-transform: uppercase; +} +.tracking-tight { + letter-spacing: -0.025em; +} +.tracking-wider { + letter-spacing: 0.05em; +} +.text-blue-100 { + --tw-text-opacity: 1; + color: rgb(219 234 254 / var(--tw-text-opacity)); +} +.text-blue-600 { + --tw-text-opacity: 1; + color: rgb(37 99 235 / var(--tw-text-opacity)); +} +.text-blue-700 { + --tw-text-opacity: 1; + color: rgb(29 78 216 / var(--tw-text-opacity)); +} +.text-gray-300 { + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity)); +} +.text-gray-400 { + --tw-text-opacity: 1; + color: rgb(156 163 175 / var(--tw-text-opacity)); +} +.text-gray-500 { + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity)); +} +.text-gray-600 { + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity)); +} +.text-gray-700 { + --tw-text-opacity: 1; + color: rgb(55 65 81 / var(--tw-text-opacity)); +} +.text-green-600 { + --tw-text-opacity: 1; + color: rgb(22 163 74 / var(--tw-text-opacity)); +} +.text-green-700 { + --tw-text-opacity: 1; + color: rgb(21 128 61 / var(--tw-text-opacity)); +} +.text-primary { + --tw-text-opacity: 1; + color: rgb(0 112 243 / var(--tw-text-opacity)); +} +.text-red-500 { + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity)); +} +.text-red-600 { + --tw-text-opacity: 1; + color: rgb(220 38 38 / var(--tw-text-opacity)); +} +.text-red-700 { + --tw-text-opacity: 1; + color: rgb(185 28 28 / var(--tw-text-opacity)); +} +.text-secondary { + --tw-text-opacity: 1; + color: rgb(30 41 59 / var(--tw-text-opacity)); +} +.text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} +.text-yellow-700 { + --tw-text-opacity: 1; + color: rgb(161 98 7 / var(--tw-text-opacity)); +} +.text-gray-900 { + --tw-text-opacity: 1; + color: rgb(17 24 39 / var(--tw-text-opacity)); +} +.text-green-500 { + --tw-text-opacity: 1; + color: rgb(34 197 94 / var(--tw-text-opacity)); +} +.text-red-400 { + --tw-text-opacity: 1; + color: rgb(248 113 113 / var(--tw-text-opacity)); +} +.opacity-25 { + opacity: 0.25; +} +.opacity-75 { + opacity: 0.75; +} +.opacity-90 { + opacity: 0.9; +} +.shadow-lg { + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} +.shadow-sm { + --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} +.ring-4 { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} +.ring-blue-100 { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(219 234 254 / var(--tw-ring-opacity)); +} +.filter { + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} +.transition-all { + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.transition-colors { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} +.duration-300 { + transition-duration: 300ms; +} +.duration-700 { + transition-duration: 700ms; +} +.ease-in-out { + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} + +:root { + --foreground-rgb: 0, 0, 0; + --background-rgb: 240, 240, 240; +} + +body { + color: rgb(var(--foreground-rgb)); + background: rgb(var(--background-rgb)); +} + +.hover\:scale-105:hover { + --tw-scale-x: 1.05; + --tw-scale-y: 1.05; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.hover\:border-gray-400:hover { + --tw-border-opacity: 1; + border-color: rgb(156 163 175 / var(--tw-border-opacity)); +} + +.hover\:bg-blue-50:hover { + --tw-bg-opacity: 1; + background-color: rgb(239 246 255 / var(--tw-bg-opacity)); +} + +.hover\:bg-gray-600:hover { + --tw-bg-opacity: 1; + background-color: rgb(75 85 99 / var(--tw-bg-opacity)); +} + +.hover\:text-blue-100:hover { + --tw-text-opacity: 1; + color: rgb(219 234 254 / var(--tw-text-opacity)); +} + +.hover\:text-blue-700:hover { + --tw-text-opacity: 1; + color: rgb(29 78 216 / var(--tw-text-opacity)); +} + +.hover\:opacity-80:hover { + opacity: 0.8; +} + +.hover\:shadow-md:hover { + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.hover\:shadow-xl:hover { + --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.focus\:border-primary:focus { + --tw-border-opacity: 1; + border-color: rgb(0 112 243 / var(--tw-border-opacity)); +} + +.focus\:outline-none:focus { + outline: 2px solid transparent; + outline-offset: 2px; +} + +.focus\:ring-2:focus { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} + +.focus\:ring-primary:focus { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(0 112 243 / var(--tw-ring-opacity)); +} + +.focus\:ring-red-500:focus { + --tw-ring-opacity: 1; + --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity)); +} + +@media (min-width: 640px) { + + .sm\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} + +@media (min-width: 768px) { + + .md\:mb-0 { + margin-bottom: 0px; + } + + .md\:mt-0 { + margin-top: 0px; + } + + .md\:flex { + display: flex; + } + + .md\:hidden { + display: none; + } + + .md\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .md\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .md\:flex-row { + flex-direction: row; + } +} + +@media (min-width: 1024px) { + + .lg\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } +} +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[11].oneOf[2].use[1]!./node_modules/next/dist/build/webpack/loaders/next-font-loader/index.js??ruleSet[1].rules[11].oneOf[2].use[2]!./node_modules/next/font/google/target.css?{"path":"app\\layout.tsx","import":"Inter","arguments":[{"subsets":["latin"]}],"variableName":"inter"} ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +/* cyrillic-ext */ +@font-face { + font-family: '__Inter_d65c78'; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url(/_next/static/media/55c55f0601d81cf3-s.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* cyrillic */ +@font-face { + font-family: '__Inter_d65c78'; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url(/_next/static/media/26a46d62cd723877-s.woff2) format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: '__Inter_d65c78'; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url(/_next/static/media/97e0cb1ae144a2a9-s.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: '__Inter_d65c78'; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url(/_next/static/media/581909926a08bbc8-s.woff2) format('woff2'); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* vietnamese */ +@font-face { + font-family: '__Inter_d65c78'; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url(/_next/static/media/df0a9ae256c0569c-s.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: '__Inter_d65c78'; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url(/_next/static/media/6d93bde91c0c2823-s.woff2) format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: '__Inter_d65c78'; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url(/_next/static/media/a34f9d1faa5f3315-s.p.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +}@font-face {font-family: '__Inter_Fallback_d65c78';src: local("Arial");ascent-override: 90.20%;descent-override: 22.48%;line-gap-override: 0.00%;size-adjust: 107.40% +}.__className_d65c78 {font-family: '__Inter_d65c78', '__Inter_Fallback_d65c78';font-style: normal +} + diff --git a/frontend/.next/static/development/_buildManifest.js b/frontend/.next/static/development/_buildManifest.js new file mode 100644 index 000000000..0a650737c --- /dev/null +++ b/frontend/.next/static/development/_buildManifest.js @@ -0,0 +1 @@ +self.__BUILD_MANIFEST = (function(a){return {__rewrites:{afterFiles:[{has:a,source:"\u002Fapi\u002F:path*",destination:a}],beforeFiles:[],fallback:[]},"/_error":["static\u002Fchunks\u002Fpages\u002F_error.js"],sortedPages:["\u002F_app","\u002F_error"]}}(void 0));self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/frontend/.next/static/development/_ssgManifest.js b/frontend/.next/static/development/_ssgManifest.js new file mode 100644 index 000000000..2260768dc --- /dev/null +++ b/frontend/.next/static/development/_ssgManifest.js @@ -0,0 +1 @@ +self.__SSG_MANIFEST=new Set;self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/frontend/.next/static/media/26a46d62cd723877-s.woff2 b/frontend/.next/static/media/26a46d62cd723877-s.woff2 new file mode 100644 index 000000000..3a27e632e Binary files /dev/null and b/frontend/.next/static/media/26a46d62cd723877-s.woff2 differ diff --git a/frontend/.next/static/media/55c55f0601d81cf3-s.woff2 b/frontend/.next/static/media/55c55f0601d81cf3-s.woff2 new file mode 100644 index 000000000..bcf38fd18 Binary files /dev/null and b/frontend/.next/static/media/55c55f0601d81cf3-s.woff2 differ diff --git a/frontend/.next/static/media/581909926a08bbc8-s.woff2 b/frontend/.next/static/media/581909926a08bbc8-s.woff2 new file mode 100644 index 000000000..b419d4302 Binary files /dev/null and b/frontend/.next/static/media/581909926a08bbc8-s.woff2 differ diff --git a/frontend/.next/static/media/6d93bde91c0c2823-s.woff2 b/frontend/.next/static/media/6d93bde91c0c2823-s.woff2 new file mode 100644 index 000000000..47b01cc0c Binary files /dev/null and b/frontend/.next/static/media/6d93bde91c0c2823-s.woff2 differ diff --git a/frontend/.next/static/media/97e0cb1ae144a2a9-s.woff2 b/frontend/.next/static/media/97e0cb1ae144a2a9-s.woff2 new file mode 100644 index 000000000..7fdf0b945 Binary files /dev/null and b/frontend/.next/static/media/97e0cb1ae144a2a9-s.woff2 differ diff --git a/frontend/.next/static/media/a34f9d1faa5f3315-s.p.woff2 b/frontend/.next/static/media/a34f9d1faa5f3315-s.p.woff2 new file mode 100644 index 000000000..0d91b7ab5 Binary files /dev/null and b/frontend/.next/static/media/a34f9d1faa5f3315-s.p.woff2 differ diff --git a/frontend/.next/static/media/df0a9ae256c0569c-s.woff2 b/frontend/.next/static/media/df0a9ae256c0569c-s.woff2 new file mode 100644 index 000000000..072229b87 Binary files /dev/null and b/frontend/.next/static/media/df0a9ae256c0569c-s.woff2 differ diff --git a/frontend/.next/static/webpack/08d7cd0b86521b79.webpack.hot-update.json b/frontend/.next/static/webpack/08d7cd0b86521b79.webpack.hot-update.json new file mode 100644 index 000000000..6e8670393 --- /dev/null +++ b/frontend/.next/static/webpack/08d7cd0b86521b79.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/page","app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/3e0d2b9137b01101.webpack.hot-update.json b/frontend/.next/static/webpack/3e0d2b9137b01101.webpack.hot-update.json new file mode 100644 index 000000000..5c8254659 --- /dev/null +++ b/frontend/.next/static/webpack/3e0d2b9137b01101.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/5fd35373980064d5.webpack.hot-update.json b/frontend/.next/static/webpack/5fd35373980064d5.webpack.hot-update.json new file mode 100644 index 000000000..5c8254659 --- /dev/null +++ b/frontend/.next/static/webpack/5fd35373980064d5.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/633457081244afec._.hot-update.json b/frontend/.next/static/webpack/633457081244afec._.hot-update.json new file mode 100644 index 000000000..5a523f249 --- /dev/null +++ b/frontend/.next/static/webpack/633457081244afec._.hot-update.json @@ -0,0 +1 @@ +{"c":[],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/64009a6223611bea.webpack.hot-update.json b/frontend/.next/static/webpack/64009a6223611bea.webpack.hot-update.json new file mode 100644 index 000000000..3823c4cee --- /dev/null +++ b/frontend/.next/static/webpack/64009a6223611bea.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/6d4aea1ecec90d38.webpack.hot-update.json b/frontend/.next/static/webpack/6d4aea1ecec90d38.webpack.hot-update.json new file mode 100644 index 000000000..5c8254659 --- /dev/null +++ b/frontend/.next/static/webpack/6d4aea1ecec90d38.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/74ae37cb74317a05.webpack.hot-update.json b/frontend/.next/static/webpack/74ae37cb74317a05.webpack.hot-update.json new file mode 100644 index 000000000..3823c4cee --- /dev/null +++ b/frontend/.next/static/webpack/74ae37cb74317a05.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/7b7071978d64cdf2.webpack.hot-update.json b/frontend/.next/static/webpack/7b7071978d64cdf2.webpack.hot-update.json new file mode 100644 index 000000000..5c8254659 --- /dev/null +++ b/frontend/.next/static/webpack/7b7071978d64cdf2.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/7fa58435b2b3c498.webpack.hot-update.json b/frontend/.next/static/webpack/7fa58435b2b3c498.webpack.hot-update.json new file mode 100644 index 000000000..eb5d06059 --- /dev/null +++ b/frontend/.next/static/webpack/7fa58435b2b3c498.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/page","app/layout","webpack"],"r":["app/not-found"],"m":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-error.js&page=%2Fnot-found!","(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js"]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/80f5edd8b588eb50.webpack.hot-update.json b/frontend/.next/static/webpack/80f5edd8b588eb50.webpack.hot-update.json new file mode 100644 index 000000000..96d0a3f14 --- /dev/null +++ b/frontend/.next/static/webpack/80f5edd8b588eb50.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":["/_error"],"m":["./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&page=%2F_error!"]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/88d345d11344dba1.webpack.hot-update.json b/frontend/.next/static/webpack/88d345d11344dba1.webpack.hot-update.json new file mode 100644 index 000000000..5c8254659 --- /dev/null +++ b/frontend/.next/static/webpack/88d345d11344dba1.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/8d1411f117a1282e.webpack.hot-update.json b/frontend/.next/static/webpack/8d1411f117a1282e.webpack.hot-update.json new file mode 100644 index 000000000..5c8254659 --- /dev/null +++ b/frontend/.next/static/webpack/8d1411f117a1282e.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/9ca2c87546693f2c.webpack.hot-update.json b/frontend/.next/static/webpack/9ca2c87546693f2c.webpack.hot-update.json new file mode 100644 index 000000000..5c8254659 --- /dev/null +++ b/frontend/.next/static/webpack/9ca2c87546693f2c.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.08d7cd0b86521b79.hot-update.js b/frontend/.next/static/webpack/app/layout.08d7cd0b86521b79.hot-update.js new file mode 100644 index 000000000..fc852ccb6 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.08d7cd0b86521b79.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"904cc7283387\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI5MDRjYzcyODMzODdcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.3e0d2b9137b01101.hot-update.js b/frontend/.next/static/webpack/app/layout.3e0d2b9137b01101.hot-update.js new file mode 100644 index 000000000..69248a03d --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.3e0d2b9137b01101.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"b2189ca59bad\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJiMjE4OWNhNTliYWRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.5fd35373980064d5.hot-update.js b/frontend/.next/static/webpack/app/layout.5fd35373980064d5.hot-update.js new file mode 100644 index 000000000..3fb3118f5 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.5fd35373980064d5.hot-update.js @@ -0,0 +1,32 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"0e244ce5621c\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIwZTI0NGNlNTYyMWNcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./app/layout.tsx": +/*!************************!*\ + !*** ./app/layout.tsx ***! + \************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ RootLayout; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/font/google/target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"} */ \"(app-pages-browser)/./node_modules/next/font/google/target.css?{\\\"path\\\":\\\"app\\\\\\\\layout.tsx\\\",\\\"import\\\":\\\"Inter\\\",\\\"arguments\\\":[{\\\"subsets\\\":[\\\"latin\\\"]}],\\\"variableName\\\":\\\"inter\\\"}\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _styles_globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../styles/globals.css */ \"(app-pages-browser)/./styles/globals.css\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n// Metadata needs to be exported from a server component, so this won't work in a client component\n// Moving this to a separate file or removing it for now\nconst metadata = {\n title: \"ZeoTap Data Ingestion Tool\",\n description: \"Bidirectional ClickHouse & Flat File Data Ingestion Tool\"\n};\nfunction RootLayout(param) {\n let { children } = param;\n _s();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n // Function to handle home button click - will navigate to the home page\n const handleHomeClick = ()=>{\n router.push(\"/\");\n router.refresh(); // Force a refresh to reset state\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"en\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"head\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"title\", {\n children: metadata.title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 34,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"meta\", {\n name: \"description\",\n content: metadata.description\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 35,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 33,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n className: (next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default().className),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"bg-gradient-to-r from-primary to-accent text-white shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between py-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-shrink-0 w-10 h-10 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-primary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 45,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 46,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 44,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 43,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-bold tracking-tight\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 50,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-medium text-blue-100\",\n children: \"Data Ingestion Tool\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 51,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 49,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 42,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex items-center space-x-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium text-blue-100\",\n children: \"Bidirectional ClickHouse & Flat File Data Ingestion\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 55,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"px-4 py-2 bg-white text-primary rounded-md text-sm font-medium hover:bg-blue-50 transition-colors flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 61,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 60,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 56,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 54,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"md:hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"text-white hover:text-blue-100 flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 72,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 71,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 41,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 40,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 39,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"container mx-auto py-8 px-4\",\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 80,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"footer\", {\n className: \"bg-secondary text-white p-4 mt-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col md:flex-row justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2 mb-4 md:mb-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 text-secondary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 87,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 88,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 86,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 85,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 91,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 84,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n children: [\n \"\\xa9 \",\n new Date().getFullYear(),\n \" ZeoTap | Data Ingestion Tool\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 93,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-4 mt-4 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"https://github.com/harshit1634\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 97,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 96,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 95,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 102,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 101,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 100,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 94,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 83,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 82,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 81,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 38,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 37,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 32,\n columnNumber: 5\n }, this);\n}\n_s(RootLayout, \"fN7XvhJ+p5oE6+Xlo0NJmXpxjC8=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter\n ];\n});\n_c = RootLayout;\nvar _c;\n$RefreshReg$(_c, \"RootLayout\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9sYXlvdXQudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBUU1BO0FBSnlCO0FBRWE7QUFJNUMsa0dBQWtHO0FBQ2xHLHdEQUF3RDtBQUN4RCxNQUFNRSxXQUFXO0lBQ2ZDLE9BQU87SUFDUEMsYUFBYTtBQUNmO0FBRWUsU0FBU0MsV0FBVyxLQUlqQztRQUppQyxFQUNqQ0MsUUFBUSxFQUdSLEdBSmlDOztJQUtqQyxNQUFNQyxTQUFTTiwwREFBU0E7SUFFeEIsd0VBQXdFO0lBQ3hFLE1BQU1PLGtCQUFrQjtRQUN0QkQsT0FBT0UsSUFBSSxDQUFDO1FBQ1pGLE9BQU9HLE9BQU8sSUFBSSxpQ0FBaUM7SUFDckQ7SUFFQSxxQkFDRSw4REFBQ0M7UUFBS0MsTUFBSzs7MEJBQ1QsOERBQUNDOztrQ0FDQyw4REFBQ1Y7a0NBQU9ELFNBQVNDLEtBQUs7Ozs7OztrQ0FDdEIsOERBQUNXO3dCQUFLQyxNQUFLO3dCQUFjQyxTQUFTZCxTQUFTRSxXQUFXOzs7Ozs7Ozs7Ozs7MEJBRXhELDhEQUFDYTtnQkFBS0MsV0FBV2xCLDJKQUFlOzBCQUM5Qiw0RUFBQ21CO29CQUFJRCxXQUFVOztzQ0FDYiw4REFBQ0U7NEJBQU9GLFdBQVU7c0NBQ2hCLDRFQUFDQztnQ0FBSUQsV0FBVTswQ0FDYiw0RUFBQ0M7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTs7OERBQ2IsOERBQUNDO29EQUFJRCxXQUFVOzhEQUNiLDRFQUFDRzt3REFBSUgsV0FBVTt3REFBdUJJLFNBQVE7d0RBQVlDLE1BQUs7d0RBQU9DLE9BQU07OzBFQUMxRSw4REFBQ0M7Z0VBQUtDLEdBQUU7Z0VBQXdCSCxNQUFLOzs7Ozs7MEVBQ3JDLDhEQUFDRTtnRUFBS0MsR0FBRTtnRUFBc0JILE1BQUs7Z0VBQWVJLFNBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7OzhEQUc5RCw4REFBQ1I7O3NFQUNDLDhEQUFDUzs0REFBR1YsV0FBVTtzRUFBb0M7Ozs7OztzRUFDbEQsOERBQUNXOzREQUFFWCxXQUFVO3NFQUFvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NEQUdyRCw4REFBQ0M7NENBQUlELFdBQVU7OzhEQUNiLDhEQUFDWTtvREFBS1osV0FBVTs4REFBb0M7Ozs7Ozs4REFDcEQsOERBQUNhO29EQUNDQyxTQUFTeEI7b0RBQ1RVLFdBQVU7O3NFQUVWLDhEQUFDRzs0REFBSUgsV0FBVTs0REFBZUssTUFBSzs0REFBT1UsUUFBTzs0REFBZVgsU0FBUTs0REFBWUUsT0FBTTtzRUFDeEYsNEVBQUNDO2dFQUFLUyxlQUFjO2dFQUFRQyxnQkFBZTtnRUFBUUMsYUFBWTtnRUFBSVYsR0FBRTs7Ozs7Ozs7Ozs7d0RBQ2pFOzs7Ozs7Ozs7Ozs7O3NEQUlWLDhEQUFDUDs0Q0FBSUQsV0FBVTtzREFDYiw0RUFBQ2E7Z0RBQ0NDLFNBQVN4QjtnREFDVFUsV0FBVTs7a0VBRVYsOERBQUNHO3dEQUFJSCxXQUFVO3dEQUFlSyxNQUFLO3dEQUFPVSxRQUFPO3dEQUFlWCxTQUFRO3dEQUFZRSxPQUFNO2tFQUN4Riw0RUFBQ0M7NERBQUtTLGVBQWM7NERBQVFDLGdCQUFlOzREQUFRQyxhQUFZOzREQUFJVixHQUFFOzs7Ozs7Ozs7OztvREFDakU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBT2hCLDhEQUFDVzs0QkFBS25CLFdBQVU7c0NBQStCWjs7Ozs7O3NDQUMvQyw4REFBQ2dDOzRCQUFPcEIsV0FBVTtzQ0FDaEIsNEVBQUNDO2dDQUFJRCxXQUFVOzBDQUNiLDRFQUFDQztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUNDOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ0M7b0RBQUlELFdBQVU7OERBQ2IsNEVBQUNHO3dEQUFJSCxXQUFVO3dEQUF5QkksU0FBUTt3REFBWUMsTUFBSzt3REFBT0MsT0FBTTs7MEVBQzVFLDhEQUFDQztnRUFBS0MsR0FBRTtnRUFBd0JILE1BQUs7Ozs7OzswRUFDckMsOERBQUNFO2dFQUFLQyxHQUFFO2dFQUFzQkgsTUFBSztnRUFBZUksU0FBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7OERBRzlELDhEQUFDRztvREFBS1osV0FBVTs4REFBYzs7Ozs7Ozs7Ozs7O3NEQUVoQyw4REFBQ1c7NENBQUVYLFdBQVU7O2dEQUFVO2dEQUFRLElBQUlxQixPQUFPQyxXQUFXO2dEQUFHOzs7Ozs7O3NEQUN4RCw4REFBQ3JCOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ3VCO29EQUFFQyxNQUFLO29EQUFpQ0MsUUFBTztvREFBU0MsS0FBSTtvREFBc0IxQixXQUFVOzhEQUMzRiw0RUFBQ0c7d0RBQUlILFdBQVU7d0RBQVVLLE1BQUs7d0RBQWVELFNBQVE7d0RBQVl1QixlQUFZO2tFQUMzRSw0RUFBQ3BCOzREQUFLcUIsVUFBUzs0REFBVXBCLEdBQUU7NERBQW10QnFCLFVBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7OERBRzN2Qiw4REFBQ047b0RBQUVDLE1BQUs7b0RBQUl4QixXQUFVOzhEQUNwQiw0RUFBQ0c7d0RBQUlILFdBQVU7d0RBQVVLLE1BQUs7d0RBQWVELFNBQVE7d0RBQVl1QixlQUFZO2tFQUMzRSw0RUFBQ3BCOzREQUFLQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVzlCO0dBL0Z3QnJCOztRQUtQSixzREFBU0E7OztLQUxGSSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvbGF5b3V0LnRzeD85OTg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcclxuXHJcbmltcG9ydCB0eXBlIHsgTWV0YWRhdGEgfSBmcm9tICduZXh0JztcclxuaW1wb3J0IHsgSW50ZXIgfSBmcm9tICduZXh0L2ZvbnQvZ29vZ2xlJztcclxuaW1wb3J0ICcuLi9zdHlsZXMvZ2xvYmFscy5jc3MnO1xyXG5pbXBvcnQgTGluayBmcm9tICduZXh0L2xpbmsnO1xyXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24nO1xyXG5cclxuY29uc3QgaW50ZXIgPSBJbnRlcih7IHN1YnNldHM6IFsnbGF0aW4nXSB9KTtcclxuXHJcbi8vIE1ldGFkYXRhIG5lZWRzIHRvIGJlIGV4cG9ydGVkIGZyb20gYSBzZXJ2ZXIgY29tcG9uZW50LCBzbyB0aGlzIHdvbid0IHdvcmsgaW4gYSBjbGllbnQgY29tcG9uZW50XHJcbi8vIE1vdmluZyB0aGlzIHRvIGEgc2VwYXJhdGUgZmlsZSBvciByZW1vdmluZyBpdCBmb3Igbm93XHJcbmNvbnN0IG1ldGFkYXRhID0ge1xyXG4gIHRpdGxlOiAnWmVvVGFwIERhdGEgSW5nZXN0aW9uIFRvb2wnLFxyXG4gIGRlc2NyaXB0aW9uOiAnQmlkaXJlY3Rpb25hbCBDbGlja0hvdXNlICYgRmxhdCBGaWxlIERhdGEgSW5nZXN0aW9uIFRvb2wnLFxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUm9vdExheW91dCh7XHJcbiAgY2hpbGRyZW4sXHJcbn06IFJlYWRvbmx5PHtcclxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xyXG59Pikge1xyXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xyXG5cclxuICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgaG9tZSBidXR0b24gY2xpY2sgLSB3aWxsIG5hdmlnYXRlIHRvIHRoZSBob21lIHBhZ2VcclxuICBjb25zdCBoYW5kbGVIb21lQ2xpY2sgPSAoKSA9PiB7XHJcbiAgICByb3V0ZXIucHVzaCgnLycpO1xyXG4gICAgcm91dGVyLnJlZnJlc2goKTsgLy8gRm9yY2UgYSByZWZyZXNoIHRvIHJlc2V0IHN0YXRlXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxodG1sIGxhbmc9XCJlblwiPlxyXG4gICAgICA8aGVhZD5cclxuICAgICAgICA8dGl0bGU+e21ldGFkYXRhLnRpdGxlfTwvdGl0bGU+XHJcbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD17bWV0YWRhdGEuZGVzY3JpcHRpb259IC8+XHJcbiAgICAgIDwvaGVhZD5cclxuICAgICAgPGJvZHkgY2xhc3NOYW1lPXtpbnRlci5jbGFzc05hbWV9PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWdyYXktNTBcIj5cclxuICAgICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwiYmctZ3JhZGllbnQtdG8tciBmcm9tLXByaW1hcnkgdG8tYWNjZW50IHRleHQtd2hpdGUgc2hhZG93LWxnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyIG14LWF1dG8gcHgtNFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB5LTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC1zaHJpbmstMCB3LTEwIGgtMTAgYmctd2hpdGUgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02IHRleHQtcHJpbWFyeVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgMTlMMjEgMTJMMTIgNVYxOVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAxOUwxMiAxMkwzIDVWMTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIG9wYWNpdHk9XCIwLjVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRyYWNraW5nLXRpZ2h0XCI+WmVvVGFwPC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS0xMDBcIj5EYXRhIEluZ2VzdGlvbiBUb29sPC9wPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6ZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTEwMFwiPkJpZGlyZWN0aW9uYWwgQ2xpY2tIb3VzZSAmIEZsYXQgRmlsZSBEYXRhIEluZ2VzdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVIb21lQ2xpY2t9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtNCBweS0yIGJnLXdoaXRlIHRleHQtcHJpbWFyeSByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gaG92ZXI6YmctYmx1ZS01MCB0cmFuc2l0aW9uLWNvbG9ycyBmbGV4IGl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTQgbXItMVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD1cIjJcIiBkPVwiTTMgMTJsMi0ybTAgMGw3LTcgNyA3bS03LTd2MTRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgSG9tZVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZDpoaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUhvbWVDbGlja31cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIGhvdmVyOnRleHQtYmx1ZS0xMDAgZmxleCBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01IG1yLTFcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9XCIyXCIgZD1cIk0zIDEybDItMm0wIDBsNy03IDcgN20tNy03djE0XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIEhvbWVcclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgIDxtYWluIGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvIHB5LTggcHgtNFwiPntjaGlsZHJlbn08L21haW4+XHJcbiAgICAgICAgICA8Zm9vdGVyIGNsYXNzTmFtZT1cImJnLXNlY29uZGFyeSB0ZXh0LXdoaXRlIHAtNCBtdC04XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyIG14LWF1dG9cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgbWItNCBtZDptYi0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy04IGgtOCBiZy13aGl0ZSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTQgdGV4dC1zZWNvbmRhcnlcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDE5TDIxIDEyTDEyIDVWMTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMTlMMTIgMTJMMyA1VjE5WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBvcGFjaXR5PVwiMC41XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+WmVvVGFwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+JmNvcHk7IHtuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCl9IFplb1RhcCB8IERhdGEgSW5nZXN0aW9uIFRvb2w8L3A+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggc3BhY2UteC00IG10LTQgbWQ6bXQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL2hhcnNoaXQxNjM0XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgaG92ZXI6dGV4dC1ibHVlLTEwMCB0cmFuc2l0aW9uLWNvbG9yc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsUnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDJDNi40NzcgMiAyIDYuNDg0IDIgMTIuMDE3YzAgNC40MjUgMi44NjUgOC4xOCA2LjgzOSA5LjUwNC41LjA5Mi42ODItLjIxNy42ODItLjQ4MyAwLS4yMzctLjAwOC0uODY4LS4wMTMtMS43MDMtMi43ODIuNjA1LTMuMzY5LTEuMzQzLTMuMzY5LTEuMzQzLS40NTQtMS4xNTgtMS4xMS0xLjQ2Ni0xLjExLTEuNDY2LS45MDgtLjYyLjA2OS0uNjA4LjA2OS0uNjA4IDEuMDAzLjA3IDEuNTMxIDEuMDMyIDEuNTMxIDEuMDMyLjg5MiAxLjUzIDIuMzQxIDEuMDg4IDIuOTEuODMyLjA5Mi0uNjQ3LjM1LTEuMDg4LjYzNi0xLjMzOC0yLjIyLS4yNTMtNC41NTUtMS4xMTMtNC41NTUtNC45NTEgMC0xLjA5My4zOS0xLjk4OCAxLjAyOS0yLjY4OC0uMTAzLS4yNTMtLjQ0Ni0xLjI3Mi4wOTgtMi42NSAwIDAgLjg0LS4yNyAyLjc1IDEuMDI2QTkuNTY0IDkuNTY0IDAgMDExMiA2Ljg0NGMuODUuMDA0IDEuNzA1LjExNSAyLjUwNC4zMzcgMS45MDktMS4yOTYgMi43NDctMS4wMjcgMi43NDctMS4wMjcuNTQ2IDEuMzc5LjIwMiAyLjM5OC4xIDIuNjUxLjY0LjcgMS4wMjggMS41OTUgMS4wMjggMi42ODggMCAzLjg0OC0yLjMzOSA0LjY5NS00LjU2NiA0Ljk0My4zNTkuMzA5LjY3OC45Mi42NzggMS44NTUgMCAxLjMzOC0uMDEyIDIuNDE5LS4wMTIgMi43NDcgMCAuMjY4LjE4LjU4LjY4OC40ODJBMTAuMDE5IDEwLjAxOSAwIDAwMjIgMTIuMDE3QzIyIDYuNDg0IDE3LjUyMiAyIDEyIDJ6XCIgY2xpcFJ1bGU9XCJldmVub2RkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgaG92ZXI6dGV4dC1ibHVlLTEwMCB0cmFuc2l0aW9uLWNvbG9yc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMjkgMjAuMjUxYzcuNTQ3IDAgMTEuNjc1LTYuMjUzIDExLjY3NS0xMS42NzUgMC0uMTc4IDAtLjM1NS0uMDEyLS41M0E4LjM0OCA4LjM0OCAwIDAwMjIgNS45MmE4LjE5IDguMTkgMCAwMS0yLjM1Ny42NDYgNC4xMTggNC4xMTggMCAwMDEuODA0LTIuMjcgOC4yMjQgOC4yMjQgMCAwMS0yLjYwNS45OTYgNC4xMDcgNC4xMDcgMCAwMC02Ljk5MyAzLjc0MyAxMS42NSAxMS42NSAwIDAxLTguNDU3LTQuMjg3IDQuMTA2IDQuMTA2IDAgMDAxLjI3IDUuNDc3QTQuMDcyIDQuMDcyIDAgMDEyLjggOS43MTN2LjA1MmE0LjEwNSA0LjEwNSAwIDAwMy4yOTIgNC4wMjIgNC4wOTUgNC4wOTUgMCAwMS0xLjg1My4wNyA0LjEwOCA0LjEwOCAwIDAwMy44MzQgMi44NUE4LjIzMyA4LjIzMyAwIDAxMiAxOC40MDdhMTEuNjE2IDExLjYxNiAwIDAwNi4yOSAxLjg0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb290ZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYm9keT5cclxuICAgIDwvaHRtbD5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJpbnRlciIsInVzZVJvdXRlciIsIm1ldGFkYXRhIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIlJvb3RMYXlvdXQiLCJjaGlsZHJlbiIsInJvdXRlciIsImhhbmRsZUhvbWVDbGljayIsInB1c2giLCJyZWZyZXNoIiwiaHRtbCIsImxhbmciLCJoZWFkIiwibWV0YSIsIm5hbWUiLCJjb250ZW50IiwiYm9keSIsImNsYXNzTmFtZSIsImRpdiIsImhlYWRlciIsInN2ZyIsInZpZXdCb3giLCJmaWxsIiwieG1sbnMiLCJwYXRoIiwiZCIsIm9wYWNpdHkiLCJoMSIsInAiLCJzcGFuIiwiYnV0dG9uIiwib25DbGljayIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwibWFpbiIsImZvb3RlciIsIkRhdGUiLCJnZXRGdWxsWWVhciIsImEiLCJocmVmIiwidGFyZ2V0IiwicmVsIiwiYXJpYS1oaWRkZW4iLCJmaWxsUnVsZSIsImNsaXBSdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/layout.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.6d4aea1ecec90d38.hot-update.js b/frontend/.next/static/webpack/app/layout.6d4aea1ecec90d38.hot-update.js new file mode 100644 index 000000000..4d2096550 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.6d4aea1ecec90d38.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"31e2b8df9a0d\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIzMWUyYjhkZjlhMGRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.7b7071978d64cdf2.hot-update.js b/frontend/.next/static/webpack/app/layout.7b7071978d64cdf2.hot-update.js new file mode 100644 index 000000000..7a557bd8d --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.7b7071978d64cdf2.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"7aa59370bf97\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI3YWE1OTM3MGJmOTdcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.7fa58435b2b3c498.hot-update.js b/frontend/.next/static/webpack/app/layout.7fa58435b2b3c498.hot-update.js new file mode 100644 index 000000000..06d68446d --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.7fa58435b2b3c498.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"faec9adb47fd\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJmYWVjOWFkYjQ3ZmRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.80f5edd8b588eb50.hot-update.js b/frontend/.next/static/webpack/app/layout.80f5edd8b588eb50.hot-update.js new file mode 100644 index 000000000..ba796797f --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.80f5edd8b588eb50.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"c13469b2246d\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJjMTM0NjliMjI0NmRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.88d345d11344dba1.hot-update.js b/frontend/.next/static/webpack/app/layout.88d345d11344dba1.hot-update.js new file mode 100644 index 000000000..8844e8000 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.88d345d11344dba1.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"15177b75c8ba\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIxNTE3N2I3NWM4YmFcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.8d1411f117a1282e.hot-update.js b/frontend/.next/static/webpack/app/layout.8d1411f117a1282e.hot-update.js new file mode 100644 index 000000000..57e04bf2f --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.8d1411f117a1282e.hot-update.js @@ -0,0 +1,32 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"724b1db6a34d\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCI3MjRiMWRiNmEzNGRcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./app/layout.tsx": +/*!************************!*\ + !*** ./app/layout.tsx ***! + \************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ RootLayout; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/font/google/target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"} */ \"(app-pages-browser)/./node_modules/next/font/google/target.css?{\\\"path\\\":\\\"app\\\\\\\\layout.tsx\\\",\\\"import\\\":\\\"Inter\\\",\\\"arguments\\\":[{\\\"subsets\\\":[\\\"latin\\\"]}],\\\"variableName\\\":\\\"inter\\\"}\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _styles_globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../styles/globals.css */ \"(app-pages-browser)/./styles/globals.css\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n// Metadata needs to be exported from a server component, so this won't work in a client component\n// Moving this to a separate file or removing it for now\nconst metadata = {\n title: \"ZeoTap Data Ingestion Tool\",\n description: \"Bidirectional ClickHouse & Flat File Data Ingestion Tool\"\n};\nfunction RootLayout(param) {\n let { children } = param;\n _s();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n // Function to handle home button click - will navigate to the home page\n const handleHomeClick = ()=>{\n router.push(\"/\");\n router.refresh(); // Force a refresh to reset state\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"en\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"head\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"title\", {\n children: metadata.title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 34,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"meta\", {\n name: \"description\",\n content: metadata.description\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 35,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 33,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n className: (next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default().className),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"bg-gradient-to-r from-primary to-accent text-white shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between py-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-shrink-0 w-10 h-10 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-primary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 45,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 46,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 44,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 43,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-bold tracking-tight\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 50,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-medium text-blue-100\",\n children: \"Data Ingestion Tool\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 51,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 49,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 42,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex items-center space-x-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium text-blue-100\",\n children: \"Bidirectional ClickHouse & Flat File Data Ingestion\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 55,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"px-4 py-2 bg-white text-primary rounded-md text-sm font-medium hover:bg-blue-50 transition-colors flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 61,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 60,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 56,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 54,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"md:hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"text-white hover:text-blue-100 flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 72,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 71,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 41,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 40,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 39,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"container mx-auto py-8 px-4\",\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 80,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"footer\", {\n className: \"bg-secondary text-white p-4 mt-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col md:flex-row justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2 mb-4 md:mb-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 text-secondary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 87,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 88,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 86,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 85,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 91,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 84,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n children: [\n \"\\xa9 \",\n new Date().getFullYear(),\n \" ZeoTap | Data Ingestion Tool\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 93,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-4 mt-4 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 97,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 96,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 95,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 102,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 101,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 100,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 94,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 83,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 82,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 81,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 38,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 37,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 32,\n columnNumber: 5\n }, this);\n}\n_s(RootLayout, \"fN7XvhJ+p5oE6+Xlo0NJmXpxjC8=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter\n ];\n});\n_c = RootLayout;\nvar _c;\n$RefreshReg$(_c, \"RootLayout\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9sYXlvdXQudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBUU1BO0FBSnlCO0FBRWE7QUFJNUMsa0dBQWtHO0FBQ2xHLHdEQUF3RDtBQUN4RCxNQUFNRSxXQUFXO0lBQ2ZDLE9BQU87SUFDUEMsYUFBYTtBQUNmO0FBRWUsU0FBU0MsV0FBVyxLQUlqQztRQUppQyxFQUNqQ0MsUUFBUSxFQUdSLEdBSmlDOztJQUtqQyxNQUFNQyxTQUFTTiwwREFBU0E7SUFFeEIsd0VBQXdFO0lBQ3hFLE1BQU1PLGtCQUFrQjtRQUN0QkQsT0FBT0UsSUFBSSxDQUFDO1FBQ1pGLE9BQU9HLE9BQU8sSUFBSSxpQ0FBaUM7SUFDckQ7SUFFQSxxQkFDRSw4REFBQ0M7UUFBS0MsTUFBSzs7MEJBQ1QsOERBQUNDOztrQ0FDQyw4REFBQ1Y7a0NBQU9ELFNBQVNDLEtBQUs7Ozs7OztrQ0FDdEIsOERBQUNXO3dCQUFLQyxNQUFLO3dCQUFjQyxTQUFTZCxTQUFTRSxXQUFXOzs7Ozs7Ozs7Ozs7MEJBRXhELDhEQUFDYTtnQkFBS0MsV0FBV2xCLDJKQUFlOzBCQUM5Qiw0RUFBQ21CO29CQUFJRCxXQUFVOztzQ0FDYiw4REFBQ0U7NEJBQU9GLFdBQVU7c0NBQ2hCLDRFQUFDQztnQ0FBSUQsV0FBVTswQ0FDYiw0RUFBQ0M7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTs7OERBQ2IsOERBQUNDO29EQUFJRCxXQUFVOzhEQUNiLDRFQUFDRzt3REFBSUgsV0FBVTt3REFBdUJJLFNBQVE7d0RBQVlDLE1BQUs7d0RBQU9DLE9BQU07OzBFQUMxRSw4REFBQ0M7Z0VBQUtDLEdBQUU7Z0VBQXdCSCxNQUFLOzs7Ozs7MEVBQ3JDLDhEQUFDRTtnRUFBS0MsR0FBRTtnRUFBc0JILE1BQUs7Z0VBQWVJLFNBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7OzhEQUc5RCw4REFBQ1I7O3NFQUNDLDhEQUFDUzs0REFBR1YsV0FBVTtzRUFBb0M7Ozs7OztzRUFDbEQsOERBQUNXOzREQUFFWCxXQUFVO3NFQUFvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NEQUdyRCw4REFBQ0M7NENBQUlELFdBQVU7OzhEQUNiLDhEQUFDWTtvREFBS1osV0FBVTs4REFBb0M7Ozs7Ozs4REFDcEQsOERBQUNhO29EQUNDQyxTQUFTeEI7b0RBQ1RVLFdBQVU7O3NFQUVWLDhEQUFDRzs0REFBSUgsV0FBVTs0REFBZUssTUFBSzs0REFBT1UsUUFBTzs0REFBZVgsU0FBUTs0REFBWUUsT0FBTTtzRUFDeEYsNEVBQUNDO2dFQUFLUyxlQUFjO2dFQUFRQyxnQkFBZTtnRUFBUUMsYUFBWTtnRUFBSVYsR0FBRTs7Ozs7Ozs7Ozs7d0RBQ2pFOzs7Ozs7Ozs7Ozs7O3NEQUlWLDhEQUFDUDs0Q0FBSUQsV0FBVTtzREFDYiw0RUFBQ2E7Z0RBQ0NDLFNBQVN4QjtnREFDVFUsV0FBVTs7a0VBRVYsOERBQUNHO3dEQUFJSCxXQUFVO3dEQUFlSyxNQUFLO3dEQUFPVSxRQUFPO3dEQUFlWCxTQUFRO3dEQUFZRSxPQUFNO2tFQUN4Riw0RUFBQ0M7NERBQUtTLGVBQWM7NERBQVFDLGdCQUFlOzREQUFRQyxhQUFZOzREQUFJVixHQUFFOzs7Ozs7Ozs7OztvREFDakU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBT2hCLDhEQUFDVzs0QkFBS25CLFdBQVU7c0NBQStCWjs7Ozs7O3NDQUMvQyw4REFBQ2dDOzRCQUFPcEIsV0FBVTtzQ0FDaEIsNEVBQUNDO2dDQUFJRCxXQUFVOzBDQUNiLDRFQUFDQztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUNDOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ0M7b0RBQUlELFdBQVU7OERBQ2IsNEVBQUNHO3dEQUFJSCxXQUFVO3dEQUF5QkksU0FBUTt3REFBWUMsTUFBSzt3REFBT0MsT0FBTTs7MEVBQzVFLDhEQUFDQztnRUFBS0MsR0FBRTtnRUFBd0JILE1BQUs7Ozs7OzswRUFDckMsOERBQUNFO2dFQUFLQyxHQUFFO2dFQUFzQkgsTUFBSztnRUFBZUksU0FBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7OERBRzlELDhEQUFDRztvREFBS1osV0FBVTs4REFBYzs7Ozs7Ozs7Ozs7O3NEQUVoQyw4REFBQ1c7NENBQUVYLFdBQVU7O2dEQUFVO2dEQUFRLElBQUlxQixPQUFPQyxXQUFXO2dEQUFHOzs7Ozs7O3NEQUN4RCw4REFBQ3JCOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ3VCO29EQUFFQyxNQUFLO29EQUFJeEIsV0FBVTs4REFDcEIsNEVBQUNHO3dEQUFJSCxXQUFVO3dEQUFVSyxNQUFLO3dEQUFlRCxTQUFRO3dEQUFZcUIsZUFBWTtrRUFDM0UsNEVBQUNsQjs0REFBS21CLFVBQVM7NERBQVVsQixHQUFFOzREQUFtdEJtQixVQUFTOzs7Ozs7Ozs7Ozs7Ozs7OzhEQUczdkIsOERBQUNKO29EQUFFQyxNQUFLO29EQUFJeEIsV0FBVTs4REFDcEIsNEVBQUNHO3dEQUFJSCxXQUFVO3dEQUFVSyxNQUFLO3dEQUFlRCxTQUFRO3dEQUFZcUIsZUFBWTtrRUFDM0UsNEVBQUNsQjs0REFBS0MsR0FBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVc5QjtHQS9Gd0JyQjs7UUFLUEosc0RBQVNBOzs7S0FMRkkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2xheW91dC50c3g/OTk4OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XHJcblxyXG5pbXBvcnQgdHlwZSB7IE1ldGFkYXRhIH0gZnJvbSAnbmV4dCc7XHJcbmltcG9ydCB7IEludGVyIH0gZnJvbSAnbmV4dC9mb250L2dvb2dsZSc7XHJcbmltcG9ydCAnLi4vc3R5bGVzL2dsb2JhbHMuY3NzJztcclxuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJztcclxuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJztcclxuXHJcbmNvbnN0IGludGVyID0gSW50ZXIoeyBzdWJzZXRzOiBbJ2xhdGluJ10gfSk7XHJcblxyXG4vLyBNZXRhZGF0YSBuZWVkcyB0byBiZSBleHBvcnRlZCBmcm9tIGEgc2VydmVyIGNvbXBvbmVudCwgc28gdGhpcyB3b24ndCB3b3JrIGluIGEgY2xpZW50IGNvbXBvbmVudFxyXG4vLyBNb3ZpbmcgdGhpcyB0byBhIHNlcGFyYXRlIGZpbGUgb3IgcmVtb3ZpbmcgaXQgZm9yIG5vd1xyXG5jb25zdCBtZXRhZGF0YSA9IHtcclxuICB0aXRsZTogJ1plb1RhcCBEYXRhIEluZ2VzdGlvbiBUb29sJyxcclxuICBkZXNjcmlwdGlvbjogJ0JpZGlyZWN0aW9uYWwgQ2xpY2tIb3VzZSAmIEZsYXQgRmlsZSBEYXRhIEluZ2VzdGlvbiBUb29sJyxcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJvb3RMYXlvdXQoe1xyXG4gIGNoaWxkcmVuLFxyXG59OiBSZWFkb25seTx7XHJcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcclxufT4pIHtcclxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIGhvbWUgYnV0dG9uIGNsaWNrIC0gd2lsbCBuYXZpZ2F0ZSB0byB0aGUgaG9tZSBwYWdlXHJcbiAgY29uc3QgaGFuZGxlSG9tZUNsaWNrID0gKCkgPT4ge1xyXG4gICAgcm91dGVyLnB1c2goJy8nKTtcclxuICAgIHJvdXRlci5yZWZyZXNoKCk7IC8vIEZvcmNlIGEgcmVmcmVzaCB0byByZXNldCBzdGF0ZVxyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8aHRtbCBsYW5nPVwiZW5cIj5cclxuICAgICAgPGhlYWQ+XHJcbiAgICAgICAgPHRpdGxlPnttZXRhZGF0YS50aXRsZX08L3RpdGxlPlxyXG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9e21ldGFkYXRhLmRlc2NyaXB0aW9ufSAvPlxyXG4gICAgICA8L2hlYWQ+XHJcbiAgICAgIDxib2R5IGNsYXNzTmFtZT17aW50ZXIuY2xhc3NOYW1lfT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ncmF5LTUwXCI+XHJcbiAgICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cImJnLWdyYWRpZW50LXRvLXIgZnJvbS1wcmltYXJ5IHRvLWFjY2VudCB0ZXh0LXdoaXRlIHNoYWRvdy1sZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvIHB4LTRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweS00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTAgdy0xMCBoLTEwIGJnLXdoaXRlIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNiB0ZXh0LXByaW1hcnlcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDE5TDIxIDEyTDEyIDVWMTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMTlMMTIgMTJMMyA1VjE5WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBvcGFjaXR5PVwiMC41XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtYm9sZCB0cmFja2luZy10aWdodFwiPlplb1RhcDwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWJsdWUtMTAwXCI+RGF0YSBJbmdlc3Rpb24gVG9vbDwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNlwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS0xMDBcIj5CaWRpcmVjdGlvbmFsIENsaWNrSG91c2UgJiBGbGF0IEZpbGUgRGF0YSBJbmdlc3Rpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlSG9tZUNsaWNrfVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTQgcHktMiBiZy13aGl0ZSB0ZXh0LXByaW1hcnkgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGhvdmVyOmJnLWJsdWUtNTAgdHJhbnNpdGlvbi1jb2xvcnMgZmxleCBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00IG1yLTFcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9XCIyXCIgZD1cIk0zIDEybDItMm0wIDBsNy03IDcgN20tNy03djE0XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIEhvbWVcclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWQ6aGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVIb21lQ2xpY2t9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSBob3Zlcjp0ZXh0LWJsdWUtMTAwIGZsZXggaXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNSBtci0xXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPVwiMlwiIGQ9XCJNMyAxMmwyLTJtMCAwbDctNyA3IDdtLTctN3YxNFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICBIb21lXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICA8bWFpbiBjbGFzc05hbWU9XCJjb250YWluZXIgbXgtYXV0byBweS04IHB4LTRcIj57Y2hpbGRyZW59PC9tYWluPlxyXG4gICAgICAgICAgPGZvb3RlciBjbGFzc05hbWU9XCJiZy1zZWNvbmRhcnkgdGV4dC13aGl0ZSBwLTQgbXQtOFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIG1kOmZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIG1iLTQgbWQ6bWItMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctOCBoLTggYmctd2hpdGUgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00IHRleHQtc2Vjb25kYXJ5XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiAxOUwyMSAxMkwxMiA1VjE5WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE5TDEyIDEyTDMgNVYxOVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgb3BhY2l0eT1cIjAuNVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPlplb1RhcDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbVwiPiZjb3B5OyB7bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpfSBaZW9UYXAgfCBEYXRhIEluZ2VzdGlvbiBUb29sPC9wPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNwYWNlLXgtNCBtdC00IG1kOm10LTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIGhvdmVyOnRleHQtYmx1ZS0xMDAgdHJhbnNpdGlvbi1jb2xvcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbFJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMiAyQzYuNDc3IDIgMiA2LjQ4NCAyIDEyLjAxN2MwIDQuNDI1IDIuODY1IDguMTggNi44MzkgOS41MDQuNS4wOTIuNjgyLS4yMTcuNjgyLS40ODMgMC0uMjM3LS4wMDgtLjg2OC0uMDEzLTEuNzAzLTIuNzgyLjYwNS0zLjM2OS0xLjM0My0zLjM2OS0xLjM0My0uNDU0LTEuMTU4LTEuMTEtMS40NjYtMS4xMS0xLjQ2Ni0uOTA4LS42Mi4wNjktLjYwOC4wNjktLjYwOCAxLjAwMy4wNyAxLjUzMSAxLjAzMiAxLjUzMSAxLjAzMi44OTIgMS41MyAyLjM0MSAxLjA4OCAyLjkxLjgzMi4wOTItLjY0Ny4zNS0xLjA4OC42MzYtMS4zMzgtMi4yMi0uMjUzLTQuNTU1LTEuMTEzLTQuNTU1LTQuOTUxIDAtMS4wOTMuMzktMS45ODggMS4wMjktMi42ODgtLjEwMy0uMjUzLS40NDYtMS4yNzIuMDk4LTIuNjUgMCAwIC44NC0uMjcgMi43NSAxLjAyNkE5LjU2NCA5LjU2NCAwIDAxMTIgNi44NDRjLjg1LjAwNCAxLjcwNS4xMTUgMi41MDQuMzM3IDEuOTA5LTEuMjk2IDIuNzQ3LTEuMDI3IDIuNzQ3LTEuMDI3LjU0NiAxLjM3OS4yMDIgMi4zOTguMSAyLjY1MS42NC43IDEuMDI4IDEuNTk1IDEuMDI4IDIuNjg4IDAgMy44NDgtMi4zMzkgNC42OTUtNC41NjYgNC45NDMuMzU5LjMwOS42NzguOTIuNjc4IDEuODU1IDAgMS4zMzgtLjAxMiAyLjQxOS0uMDEyIDIuNzQ3IDAgLjI2OC4xOC41OC42ODguNDgyQTEwLjAxOSAxMC4wMTkgMCAwMDIyIDEyLjAxN0MyMiA2LjQ4NCAxNy41MjIgMiAxMiAyelwiIGNsaXBSdWxlPVwiZXZlbm9kZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIGhvdmVyOnRleHQtYmx1ZS0xMDAgdHJhbnNpdGlvbi1jb2xvcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjI5IDIwLjI1MWM3LjU0NyAwIDExLjY3NS02LjI1MyAxMS42NzUtMTEuNjc1IDAtLjE3OCAwLS4zNTUtLjAxMi0uNTNBOC4zNDggOC4zNDggMCAwMDIyIDUuOTJhOC4xOSA4LjE5IDAgMDEtMi4zNTcuNjQ2IDQuMTE4IDQuMTE4IDAgMDAxLjgwNC0yLjI3IDguMjI0IDguMjI0IDAgMDEtMi42MDUuOTk2IDQuMTA3IDQuMTA3IDAgMDAtNi45OTMgMy43NDMgMTEuNjUgMTEuNjUgMCAwMS04LjQ1Ny00LjI4NyA0LjEwNiA0LjEwNiAwIDAwMS4yNyA1LjQ3N0E0LjA3MiA0LjA3MiAwIDAxMi44IDkuNzEzdi4wNTJhNC4xMDUgNC4xMDUgMCAwMDMuMjkyIDQuMDIyIDQuMDk1IDQuMDk1IDAgMDEtMS44NTMuMDcgNC4xMDggNC4xMDggMCAwMDMuODM0IDIuODVBOC4yMzMgOC4yMzMgMCAwMTIgMTguNDA3YTExLjYxNiAxMS42MTYgMCAwMDYuMjkgMS44NFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9vdGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2JvZHk+XHJcbiAgICA8L2h0bWw+XHJcbiAgKTtcclxufSAiXSwibmFtZXMiOlsiaW50ZXIiLCJ1c2VSb3V0ZXIiLCJtZXRhZGF0YSIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJSb290TGF5b3V0IiwiY2hpbGRyZW4iLCJyb3V0ZXIiLCJoYW5kbGVIb21lQ2xpY2siLCJwdXNoIiwicmVmcmVzaCIsImh0bWwiLCJsYW5nIiwiaGVhZCIsIm1ldGEiLCJuYW1lIiwiY29udGVudCIsImJvZHkiLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJzdmciLCJ2aWV3Qm94IiwiZmlsbCIsInhtbG5zIiwicGF0aCIsImQiLCJvcGFjaXR5IiwiaDEiLCJwIiwic3BhbiIsImJ1dHRvbiIsIm9uQ2xpY2siLCJzdHJva2UiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsIm1haW4iLCJmb290ZXIiLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJhIiwiaHJlZiIsImFyaWEtaGlkZGVuIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/layout.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.9ca2c87546693f2c.hot-update.js b/frontend/.next/static/webpack/app/layout.9ca2c87546693f2c.hot-update.js new file mode 100644 index 000000000..e7ced912a --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.9ca2c87546693f2c.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"0b64f0ff5252\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCIwYjY0ZjBmZjUyNTJcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.b64edb040b4f9041.hot-update.js b/frontend/.next/static/webpack/app/layout.b64edb040b4f9041.hot-update.js new file mode 100644 index 000000000..b57dccfb6 --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.b64edb040b4f9041.hot-update.js @@ -0,0 +1,32 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"a39f27cc01d5\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJhMzlmMjdjYzAxZDVcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./app/layout.tsx": +/*!************************!*\ + !*** ./app/layout.tsx ***! + \************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ RootLayout; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/font/google/target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"} */ \"(app-pages-browser)/./node_modules/next/font/google/target.css?{\\\"path\\\":\\\"app\\\\\\\\layout.tsx\\\",\\\"import\\\":\\\"Inter\\\",\\\"arguments\\\":[{\\\"subsets\\\":[\\\"latin\\\"]}],\\\"variableName\\\":\\\"inter\\\"}\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _styles_globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../styles/globals.css */ \"(app-pages-browser)/./styles/globals.css\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n// Metadata needs to be exported from a server component, so this won't work in a client component\n// Moving this to a separate file or removing it for now\nconst metadata = {\n title: \"ZeoTap Data Ingestion Tool\",\n description: \"Bidirectional ClickHouse & Flat File Data Ingestion Tool\"\n};\nfunction RootLayout(param) {\n let { children } = param;\n _s();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n // Function to handle home button click - will navigate to the home page\n const handleHomeClick = ()=>{\n router.push(\"/\");\n router.refresh(); // Force a refresh to reset state\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"en\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"head\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"title\", {\n children: metadata.title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 34,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"meta\", {\n name: \"description\",\n content: metadata.description\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 35,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 33,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n className: (next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default().className),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"bg-gradient-to-r from-primary to-accent text-white shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between py-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-shrink-0 w-10 h-10 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-primary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 45,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 46,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 44,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 43,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-bold tracking-tight\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 50,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-medium text-blue-100\",\n children: \"Data Ingestion Tool\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 51,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 49,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 42,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex items-center space-x-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium text-blue-100\",\n children: \"Bidirectional ClickHouse & Flat File Data Ingestion\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 55,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"px-4 py-2 bg-white text-primary rounded-md text-sm font-medium hover:bg-blue-50 transition-colors flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 61,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 60,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 56,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 54,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"md:hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"text-white hover:text-blue-100 flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 72,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 71,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 41,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 40,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 39,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"container mx-auto py-8 px-4\",\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 80,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"footer\", {\n className: \"bg-secondary text-white p-4 mt-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col md:flex-row justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2 mb-4 md:mb-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 text-secondary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 87,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 88,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 86,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 85,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 91,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 84,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n children: [\n \"\\xa9 \",\n new Date().getFullYear(),\n \" ZeoTap | Data Ingestion Tool\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 93,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-4 mt-4 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"https://github.com/HarshitBagga16\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 97,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 96,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 95,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 102,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 101,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 100,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 94,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 83,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 82,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 81,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 38,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 37,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 32,\n columnNumber: 5\n }, this);\n}\n_s(RootLayout, \"fN7XvhJ+p5oE6+Xlo0NJmXpxjC8=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter\n ];\n});\n_c = RootLayout;\nvar _c;\n$RefreshReg$(_c, \"RootLayout\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9sYXlvdXQudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBUU1BO0FBSnlCO0FBRWE7QUFJNUMsa0dBQWtHO0FBQ2xHLHdEQUF3RDtBQUN4RCxNQUFNRSxXQUFXO0lBQ2ZDLE9BQU87SUFDUEMsYUFBYTtBQUNmO0FBRWUsU0FBU0MsV0FBVyxLQUlqQztRQUppQyxFQUNqQ0MsUUFBUSxFQUdSLEdBSmlDOztJQUtqQyxNQUFNQyxTQUFTTiwwREFBU0E7SUFFeEIsd0VBQXdFO0lBQ3hFLE1BQU1PLGtCQUFrQjtRQUN0QkQsT0FBT0UsSUFBSSxDQUFDO1FBQ1pGLE9BQU9HLE9BQU8sSUFBSSxpQ0FBaUM7SUFDckQ7SUFFQSxxQkFDRSw4REFBQ0M7UUFBS0MsTUFBSzs7MEJBQ1QsOERBQUNDOztrQ0FDQyw4REFBQ1Y7a0NBQU9ELFNBQVNDLEtBQUs7Ozs7OztrQ0FDdEIsOERBQUNXO3dCQUFLQyxNQUFLO3dCQUFjQyxTQUFTZCxTQUFTRSxXQUFXOzs7Ozs7Ozs7Ozs7MEJBRXhELDhEQUFDYTtnQkFBS0MsV0FBV2xCLDJKQUFlOzBCQUM5Qiw0RUFBQ21CO29CQUFJRCxXQUFVOztzQ0FDYiw4REFBQ0U7NEJBQU9GLFdBQVU7c0NBQ2hCLDRFQUFDQztnQ0FBSUQsV0FBVTswQ0FDYiw0RUFBQ0M7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTs7OERBQ2IsOERBQUNDO29EQUFJRCxXQUFVOzhEQUNiLDRFQUFDRzt3REFBSUgsV0FBVTt3REFBdUJJLFNBQVE7d0RBQVlDLE1BQUs7d0RBQU9DLE9BQU07OzBFQUMxRSw4REFBQ0M7Z0VBQUtDLEdBQUU7Z0VBQXdCSCxNQUFLOzs7Ozs7MEVBQ3JDLDhEQUFDRTtnRUFBS0MsR0FBRTtnRUFBc0JILE1BQUs7Z0VBQWVJLFNBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7OzhEQUc5RCw4REFBQ1I7O3NFQUNDLDhEQUFDUzs0REFBR1YsV0FBVTtzRUFBb0M7Ozs7OztzRUFDbEQsOERBQUNXOzREQUFFWCxXQUFVO3NFQUFvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NEQUdyRCw4REFBQ0M7NENBQUlELFdBQVU7OzhEQUNiLDhEQUFDWTtvREFBS1osV0FBVTs4REFBb0M7Ozs7Ozs4REFDcEQsOERBQUNhO29EQUNDQyxTQUFTeEI7b0RBQ1RVLFdBQVU7O3NFQUVWLDhEQUFDRzs0REFBSUgsV0FBVTs0REFBZUssTUFBSzs0REFBT1UsUUFBTzs0REFBZVgsU0FBUTs0REFBWUUsT0FBTTtzRUFDeEYsNEVBQUNDO2dFQUFLUyxlQUFjO2dFQUFRQyxnQkFBZTtnRUFBUUMsYUFBWTtnRUFBSVYsR0FBRTs7Ozs7Ozs7Ozs7d0RBQ2pFOzs7Ozs7Ozs7Ozs7O3NEQUlWLDhEQUFDUDs0Q0FBSUQsV0FBVTtzREFDYiw0RUFBQ2E7Z0RBQ0NDLFNBQVN4QjtnREFDVFUsV0FBVTs7a0VBRVYsOERBQUNHO3dEQUFJSCxXQUFVO3dEQUFlSyxNQUFLO3dEQUFPVSxRQUFPO3dEQUFlWCxTQUFRO3dEQUFZRSxPQUFNO2tFQUN4Riw0RUFBQ0M7NERBQUtTLGVBQWM7NERBQVFDLGdCQUFlOzREQUFRQyxhQUFZOzREQUFJVixHQUFFOzs7Ozs7Ozs7OztvREFDakU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBT2hCLDhEQUFDVzs0QkFBS25CLFdBQVU7c0NBQStCWjs7Ozs7O3NDQUMvQyw4REFBQ2dDOzRCQUFPcEIsV0FBVTtzQ0FDaEIsNEVBQUNDO2dDQUFJRCxXQUFVOzBDQUNiLDRFQUFDQztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUNDOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ0M7b0RBQUlELFdBQVU7OERBQ2IsNEVBQUNHO3dEQUFJSCxXQUFVO3dEQUF5QkksU0FBUTt3REFBWUMsTUFBSzt3REFBT0MsT0FBTTs7MEVBQzVFLDhEQUFDQztnRUFBS0MsR0FBRTtnRUFBd0JILE1BQUs7Ozs7OzswRUFDckMsOERBQUNFO2dFQUFLQyxHQUFFO2dFQUFzQkgsTUFBSztnRUFBZUksU0FBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7OERBRzlELDhEQUFDRztvREFBS1osV0FBVTs4REFBYzs7Ozs7Ozs7Ozs7O3NEQUVoQyw4REFBQ1c7NENBQUVYLFdBQVU7O2dEQUFVO2dEQUFRLElBQUlxQixPQUFPQyxXQUFXO2dEQUFHOzs7Ozs7O3NEQUN4RCw4REFBQ3JCOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ3VCO29EQUFFQyxNQUFLO29EQUFvQ0MsUUFBTztvREFBU0MsS0FBSTtvREFBc0IxQixXQUFVOzhEQUM5Riw0RUFBQ0c7d0RBQUlILFdBQVU7d0RBQVVLLE1BQUs7d0RBQWVELFNBQVE7d0RBQVl1QixlQUFZO2tFQUMzRSw0RUFBQ3BCOzREQUFLcUIsVUFBUzs0REFBVXBCLEdBQUU7NERBQW10QnFCLFVBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7OERBRzN2Qiw4REFBQ047b0RBQUVDLE1BQUs7b0RBQUl4QixXQUFVOzhEQUNwQiw0RUFBQ0c7d0RBQUlILFdBQVU7d0RBQVVLLE1BQUs7d0RBQWVELFNBQVE7d0RBQVl1QixlQUFZO2tFQUMzRSw0RUFBQ3BCOzREQUFLQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVzlCO0dBL0Z3QnJCOztRQUtQSixzREFBU0E7OztLQUxGSSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9hcHAvbGF5b3V0LnRzeD85OTg4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcclxuXHJcbmltcG9ydCB0eXBlIHsgTWV0YWRhdGEgfSBmcm9tICduZXh0JztcclxuaW1wb3J0IHsgSW50ZXIgfSBmcm9tICduZXh0L2ZvbnQvZ29vZ2xlJztcclxuaW1wb3J0ICcuLi9zdHlsZXMvZ2xvYmFscy5jc3MnO1xyXG5pbXBvcnQgTGluayBmcm9tICduZXh0L2xpbmsnO1xyXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24nO1xyXG5cclxuY29uc3QgaW50ZXIgPSBJbnRlcih7IHN1YnNldHM6IFsnbGF0aW4nXSB9KTtcclxuXHJcbi8vIE1ldGFkYXRhIG5lZWRzIHRvIGJlIGV4cG9ydGVkIGZyb20gYSBzZXJ2ZXIgY29tcG9uZW50LCBzbyB0aGlzIHdvbid0IHdvcmsgaW4gYSBjbGllbnQgY29tcG9uZW50XHJcbi8vIE1vdmluZyB0aGlzIHRvIGEgc2VwYXJhdGUgZmlsZSBvciByZW1vdmluZyBpdCBmb3Igbm93XHJcbmNvbnN0IG1ldGFkYXRhID0ge1xyXG4gIHRpdGxlOiAnWmVvVGFwIERhdGEgSW5nZXN0aW9uIFRvb2wnLFxyXG4gIGRlc2NyaXB0aW9uOiAnQmlkaXJlY3Rpb25hbCBDbGlja0hvdXNlICYgRmxhdCBGaWxlIERhdGEgSW5nZXN0aW9uIFRvb2wnLFxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUm9vdExheW91dCh7XHJcbiAgY2hpbGRyZW4sXHJcbn06IFJlYWRvbmx5PHtcclxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xyXG59Pikge1xyXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xyXG5cclxuICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgaG9tZSBidXR0b24gY2xpY2sgLSB3aWxsIG5hdmlnYXRlIHRvIHRoZSBob21lIHBhZ2VcclxuICBjb25zdCBoYW5kbGVIb21lQ2xpY2sgPSAoKSA9PiB7XHJcbiAgICByb3V0ZXIucHVzaCgnLycpO1xyXG4gICAgcm91dGVyLnJlZnJlc2goKTsgLy8gRm9yY2UgYSByZWZyZXNoIHRvIHJlc2V0IHN0YXRlXHJcbiAgfTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIDxodG1sIGxhbmc9XCJlblwiPlxyXG4gICAgICA8aGVhZD5cclxuICAgICAgICA8dGl0bGU+e21ldGFkYXRhLnRpdGxlfTwvdGl0bGU+XHJcbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD17bWV0YWRhdGEuZGVzY3JpcHRpb259IC8+XHJcbiAgICAgIDwvaGVhZD5cclxuICAgICAgPGJvZHkgY2xhc3NOYW1lPXtpbnRlci5jbGFzc05hbWV9PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLWgtc2NyZWVuIGJnLWdyYXktNTBcIj5cclxuICAgICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwiYmctZ3JhZGllbnQtdG8tciBmcm9tLXByaW1hcnkgdG8tYWNjZW50IHRleHQtd2hpdGUgc2hhZG93LWxnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyIG14LWF1dG8gcHgtNFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB5LTRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC1zaHJpbmstMCB3LTEwIGgtMTAgYmctd2hpdGUgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTYgaC02IHRleHQtcHJpbWFyeVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgMTlMMjEgMTJMMTIgNVYxOVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAxOUwxMiAxMkwzIDVWMTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIG9wYWNpdHk9XCIwLjVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIHRyYWNraW5nLXRpZ2h0XCI+WmVvVGFwPC9oMT5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS0xMDBcIj5EYXRhIEluZ2VzdGlvbiBUb29sPC9wPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbWQ6ZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC02XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTEwMFwiPkJpZGlyZWN0aW9uYWwgQ2xpY2tIb3VzZSAmIEZsYXQgRmlsZSBEYXRhIEluZ2VzdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVIb21lQ2xpY2t9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtNCBweS0yIGJnLXdoaXRlIHRleHQtcHJpbWFyeSByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gaG92ZXI6YmctYmx1ZS01MCB0cmFuc2l0aW9uLWNvbG9ycyBmbGV4IGl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTQgbXItMVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD1cIjJcIiBkPVwiTTMgMTJsMi0ybTAgMGw3LTcgNyA3bS03LTd2MTRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgSG9tZVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZDpoaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUhvbWVDbGlja31cclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIGhvdmVyOnRleHQtYmx1ZS0xMDAgZmxleCBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTUgaC01IG1yLTFcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9XCIyXCIgZD1cIk0zIDEybDItMm0wIDBsNy03IDcgN20tNy03djE0XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIEhvbWVcclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgIDxtYWluIGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvIHB5LTggcHgtNFwiPntjaGlsZHJlbn08L21haW4+XHJcbiAgICAgICAgICA8Zm9vdGVyIGNsYXNzTmFtZT1cImJnLXNlY29uZGFyeSB0ZXh0LXdoaXRlIHAtNCBtdC04XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyIG14LWF1dG9cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgbWQ6ZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgbWItNCBtZDptYi0wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy04IGgtOCBiZy13aGl0ZSByb3VuZGVkLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNCBoLTQgdGV4dC1zZWNvbmRhcnlcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDE5TDIxIDEyTDEyIDVWMTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMTlMMTIgMTJMMyA1VjE5WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBvcGFjaXR5PVwiMC41XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+WmVvVGFwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+JmNvcHk7IHtuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCl9IFplb1RhcCB8IERhdGEgSW5nZXN0aW9uIFRvb2w8L3A+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggc3BhY2UteC00IG10LTQgbWQ6bXQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL0hhcnNoaXRCYWdnYTE2XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgaG92ZXI6dGV4dC1ibHVlLTEwMCB0cmFuc2l0aW9uLWNvbG9yc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsUnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDJDNi40NzcgMiAyIDYuNDg0IDIgMTIuMDE3YzAgNC40MjUgMi44NjUgOC4xOCA2LjgzOSA5LjUwNC41LjA5Mi42ODItLjIxNy42ODItLjQ4MyAwLS4yMzctLjAwOC0uODY4LS4wMTMtMS43MDMtMi43ODIuNjA1LTMuMzY5LTEuMzQzLTMuMzY5LTEuMzQzLS40NTQtMS4xNTgtMS4xMS0xLjQ2Ni0xLjExLTEuNDY2LS45MDgtLjYyLjA2OS0uNjA4LjA2OS0uNjA4IDEuMDAzLjA3IDEuNTMxIDEuMDMyIDEuNTMxIDEuMDMyLjg5MiAxLjUzIDIuMzQxIDEuMDg4IDIuOTEuODMyLjA5Mi0uNjQ3LjM1LTEuMDg4LjYzNi0xLjMzOC0yLjIyLS4yNTMtNC41NTUtMS4xMTMtNC41NTUtNC45NTEgMC0xLjA5My4zOS0xLjk4OCAxLjAyOS0yLjY4OC0uMTAzLS4yNTMtLjQ0Ni0xLjI3Mi4wOTgtMi42NSAwIDAgLjg0LS4yNyAyLjc1IDEuMDI2QTkuNTY0IDkuNTY0IDAgMDExMiA2Ljg0NGMuODUuMDA0IDEuNzA1LjExNSAyLjUwNC4zMzcgMS45MDktMS4yOTYgMi43NDctMS4wMjcgMi43NDctMS4wMjcuNTQ2IDEuMzc5LjIwMiAyLjM5OC4xIDIuNjUxLjY0LjcgMS4wMjggMS41OTUgMS4wMjggMi42ODggMCAzLjg0OC0yLjMzOSA0LjY5NS00LjU2NiA0Ljk0My4zNTkuMzA5LjY3OC45Mi42NzggMS44NTUgMCAxLjMzOC0uMDEyIDIuNDE5LS4wMTIgMi43NDcgMCAuMjY4LjE4LjU4LjY4OC40ODJBMTAuMDE5IDEwLjAxOSAwIDAwMjIgMTIuMDE3QzIyIDYuNDg0IDE3LjUyMiAyIDEyIDJ6XCIgY2xpcFJ1bGU9XCJldmVub2RkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzTmFtZT1cInRleHQtd2hpdGUgaG92ZXI6dGV4dC1ibHVlLTEwMCB0cmFuc2l0aW9uLWNvbG9yc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMjkgMjAuMjUxYzcuNTQ3IDAgMTEuNjc1LTYuMjUzIDExLjY3NS0xMS42NzUgMC0uMTc4IDAtLjM1NS0uMDEyLS41M0E4LjM0OCA4LjM0OCAwIDAwMjIgNS45MmE4LjE5IDguMTkgMCAwMS0yLjM1Ny42NDYgNC4xMTggNC4xMTggMCAwMDEuODA0LTIuMjcgOC4yMjQgOC4yMjQgMCAwMS0yLjYwNS45OTYgNC4xMDcgNC4xMDcgMCAwMC02Ljk5MyAzLjc0MyAxMS42NSAxMS42NSAwIDAxLTguNDU3LTQuMjg3IDQuMTA2IDQuMTA2IDAgMDAxLjI3IDUuNDc3QTQuMDcyIDQuMDcyIDAgMDEyLjggOS43MTN2LjA1MmE0LjEwNSA0LjEwNSAwIDAwMy4yOTIgNC4wMjIgNC4wOTUgNC4wOTUgMCAwMS0xLjg1My4wNyA0LjEwOCA0LjEwOCAwIDAwMy44MzQgMi44NUE4LjIzMyA4LjIzMyAwIDAxMiAxOC40MDdhMTEuNjE2IDExLjYxNiAwIDAwNi4yOSAxLjg0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb290ZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvYm9keT5cclxuICAgIDwvaHRtbD5cclxuICApO1xyXG59ICJdLCJuYW1lcyI6WyJpbnRlciIsInVzZVJvdXRlciIsIm1ldGFkYXRhIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIlJvb3RMYXlvdXQiLCJjaGlsZHJlbiIsInJvdXRlciIsImhhbmRsZUhvbWVDbGljayIsInB1c2giLCJyZWZyZXNoIiwiaHRtbCIsImxhbmciLCJoZWFkIiwibWV0YSIsIm5hbWUiLCJjb250ZW50IiwiYm9keSIsImNsYXNzTmFtZSIsImRpdiIsImhlYWRlciIsInN2ZyIsInZpZXdCb3giLCJmaWxsIiwieG1sbnMiLCJwYXRoIiwiZCIsIm9wYWNpdHkiLCJoMSIsInAiLCJzcGFuIiwiYnV0dG9uIiwib25DbGljayIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwibWFpbiIsImZvb3RlciIsIkRhdGUiLCJnZXRGdWxsWWVhciIsImEiLCJocmVmIiwidGFyZ2V0IiwicmVsIiwiYXJpYS1oaWRkZW4iLCJmaWxsUnVsZSIsImNsaXBSdWxlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/layout.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.b7a2417b787bfbd4.hot-update.js b/frontend/.next/static/webpack/app/layout.b7a2417b787bfbd4.hot-update.js new file mode 100644 index 000000000..bd8cda5ae --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.b7a2417b787bfbd4.hot-update.js @@ -0,0 +1,65 @@ +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!": +/*!**************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false! ***! + \**************************************************************************************************************************************************************************************************/ +/***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { + +eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/layout.tsx */ \"(app-pages-browser)/./app/layout.tsx\"))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz1DJTNBJTVDVXNlcnMlNUNIQVJTSElUJTIwQkFHR0ElNUNEZXNrdG9wJTVDWmVvVGFwMi4wJTVDZnJvbnRlbmQlNUNhcHAlNUNsYXlvdXQudHN4JnNlcnZlcj1mYWxzZSEiLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLz8xYjgxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcSEFSU0hJVCBCQUdHQVxcXFxEZXNrdG9wXFxcXFplb1RhcDIuMFxcXFxmcm9udGVuZFxcXFxhcHBcXFxcbGF5b3V0LnRzeFwiKSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/api/navigation.js": +/*!**************************************************!*\ + !*** ./node_modules/next/dist/api/navigation.js ***! + \**************************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdEOztBQUVoRCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2FwaS9uYXZpZ2F0aW9uLmpzP2I4MDIiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4uL2NsaWVudC9jb21wb25lbnRzL25hdmlnYXRpb25cIjtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmF2aWdhdGlvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/navigation.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./app/layout.tsx": +/*!************************!*\ + !*** ./app/layout.tsx ***! + \************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ RootLayout; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/font/google/target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"} */ \"(app-pages-browser)/./node_modules/next/font/google/target.css?{\\\"path\\\":\\\"app\\\\\\\\layout.tsx\\\",\\\"import\\\":\\\"Inter\\\",\\\"arguments\\\":[{\\\"subsets\\\":[\\\"latin\\\"]}],\\\"variableName\\\":\\\"inter\\\"}\");\n/* harmony import */ var next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _styles_globals_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../styles/globals.css */ \"(app-pages-browser)/./styles/globals.css\");\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n// Metadata needs to be exported from a server component, so this won't work in a client component\n// Moving this to a separate file or removing it for now\nconst metadata = {\n title: \"ZeoTap Data Ingestion Tool\",\n description: \"Bidirectional ClickHouse & Flat File Data Ingestion Tool\"\n};\nfunction RootLayout(param) {\n let { children } = param;\n _s();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n // Function to handle home button click - will navigate to the home page\n const handleHomeClick = ()=>{\n router.push(\"/\");\n router.refresh(); // Force a refresh to reset state\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"html\", {\n lang: \"en\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"head\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"title\", {\n children: metadata.title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 34,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"meta\", {\n name: \"description\",\n content: metadata.description\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 35,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 33,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"body\", {\n className: (next_font_google_target_css_path_app_layout_tsx_import_Inter_arguments_subsets_latin_variableName_inter___WEBPACK_IMPORTED_MODULE_3___default().className),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"min-h-screen bg-gray-50\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"bg-gradient-to-r from-primary to-accent text-white shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between py-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex-shrink-0 w-10 h-10 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-6 h-6 text-primary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 45,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 46,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 44,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 43,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-bold tracking-tight\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 50,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs font-medium text-blue-100\",\n children: \"Data Ingestion Tool\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 51,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 49,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 42,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"hidden md:flex items-center space-x-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-sm font-medium text-blue-100\",\n children: \"Bidirectional ClickHouse & Flat File Data Ingestion\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 55,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"px-4 py-2 bg-white text-primary rounded-md text-sm font-medium hover:bg-blue-50 transition-colors flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 61,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 60,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 56,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 54,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"md:hidden\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleHomeClick,\n className: \"text-white hover:text-blue-100 flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5 mr-1\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M3 12l2-2m0 0l7-7 7 7m-7-7v14\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 72,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 71,\n columnNumber: 21\n }, this),\n \"Home\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 67,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 66,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 41,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 40,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 39,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"main\", {\n className: \"container mx-auto py-8 px-4\",\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 80,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"footer\", {\n className: \"bg-secondary text-white p-4 mt-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col md:flex-row justify-between items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center space-x-2 mb-4 md:mb-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-8 h-8 bg-white rounded-full flex items-center justify-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-4 h-4 text-secondary\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M12 19L21 12L12 5V19Z\",\n fill: \"currentColor\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 87,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M3 19L12 12L3 5V19Z\",\n fill: \"currentColor\",\n opacity: \"0.5\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 88,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 86,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 85,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-medium\",\n children: \"ZeoTap\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 91,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 84,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm\",\n children: [\n \"\\xa9 \",\n new Date().getFullYear(),\n \" ZeoTap | Data Ingestion Tool\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 93,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex space-x-4 mt-4 md:mt-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 97,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 96,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 95,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"a\", {\n href: \"#\",\n className: \"text-white hover:text-blue-100 transition-colors\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"w-5 h-5\",\n fill: \"currentColor\",\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 102,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 101,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 100,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 94,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 83,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 82,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 81,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 38,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 37,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\layout.tsx\",\n lineNumber: 32,\n columnNumber: 5\n }, this);\n}\n_s(RootLayout, \"fN7XvhJ+p5oE6+Xlo0NJmXpxjC8=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter\n ];\n});\n_c = RootLayout;\nvar _c;\n$RefreshReg$(_c, \"RootLayout\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9sYXlvdXQudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBUU1BO0FBSnlCO0FBRWE7QUFJNUMsa0dBQWtHO0FBQ2xHLHdEQUF3RDtBQUN4RCxNQUFNRSxXQUFXO0lBQ2ZDLE9BQU87SUFDUEMsYUFBYTtBQUNmO0FBRWUsU0FBU0MsV0FBVyxLQUlqQztRQUppQyxFQUNqQ0MsUUFBUSxFQUdSLEdBSmlDOztJQUtqQyxNQUFNQyxTQUFTTiwwREFBU0E7SUFFeEIsd0VBQXdFO0lBQ3hFLE1BQU1PLGtCQUFrQjtRQUN0QkQsT0FBT0UsSUFBSSxDQUFDO1FBQ1pGLE9BQU9HLE9BQU8sSUFBSSxpQ0FBaUM7SUFDckQ7SUFFQSxxQkFDRSw4REFBQ0M7UUFBS0MsTUFBSzs7MEJBQ1QsOERBQUNDOztrQ0FDQyw4REFBQ1Y7a0NBQU9ELFNBQVNDLEtBQUs7Ozs7OztrQ0FDdEIsOERBQUNXO3dCQUFLQyxNQUFLO3dCQUFjQyxTQUFTZCxTQUFTRSxXQUFXOzs7Ozs7Ozs7Ozs7MEJBRXhELDhEQUFDYTtnQkFBS0MsV0FBV2xCLDJKQUFlOzBCQUM5Qiw0RUFBQ21CO29CQUFJRCxXQUFVOztzQ0FDYiw4REFBQ0U7NEJBQU9GLFdBQVU7c0NBQ2hCLDRFQUFDQztnQ0FBSUQsV0FBVTswQ0FDYiw0RUFBQ0M7b0NBQUlELFdBQVU7O3NEQUNiLDhEQUFDQzs0Q0FBSUQsV0FBVTs7OERBQ2IsOERBQUNDO29EQUFJRCxXQUFVOzhEQUNiLDRFQUFDRzt3REFBSUgsV0FBVTt3REFBdUJJLFNBQVE7d0RBQVlDLE1BQUs7d0RBQU9DLE9BQU07OzBFQUMxRSw4REFBQ0M7Z0VBQUtDLEdBQUU7Z0VBQXdCSCxNQUFLOzs7Ozs7MEVBQ3JDLDhEQUFDRTtnRUFBS0MsR0FBRTtnRUFBc0JILE1BQUs7Z0VBQWVJLFNBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7OzhEQUc5RCw4REFBQ1I7O3NFQUNDLDhEQUFDUzs0REFBR1YsV0FBVTtzRUFBb0M7Ozs7OztzRUFDbEQsOERBQUNXOzREQUFFWCxXQUFVO3NFQUFvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NEQUdyRCw4REFBQ0M7NENBQUlELFdBQVU7OzhEQUNiLDhEQUFDWTtvREFBS1osV0FBVTs4REFBb0M7Ozs7Ozs4REFDcEQsOERBQUNhO29EQUNDQyxTQUFTeEI7b0RBQ1RVLFdBQVU7O3NFQUVWLDhEQUFDRzs0REFBSUgsV0FBVTs0REFBZUssTUFBSzs0REFBT1UsUUFBTzs0REFBZVgsU0FBUTs0REFBWUUsT0FBTTtzRUFDeEYsNEVBQUNDO2dFQUFLUyxlQUFjO2dFQUFRQyxnQkFBZTtnRUFBUUMsYUFBWTtnRUFBSVYsR0FBRTs7Ozs7Ozs7Ozs7d0RBQ2pFOzs7Ozs7Ozs7Ozs7O3NEQUlWLDhEQUFDUDs0Q0FBSUQsV0FBVTtzREFDYiw0RUFBQ2E7Z0RBQ0NDLFNBQVN4QjtnREFDVFUsV0FBVTs7a0VBRVYsOERBQUNHO3dEQUFJSCxXQUFVO3dEQUFlSyxNQUFLO3dEQUFPVSxRQUFPO3dEQUFlWCxTQUFRO3dEQUFZRSxPQUFNO2tFQUN4Riw0RUFBQ0M7NERBQUtTLGVBQWM7NERBQVFDLGdCQUFlOzREQUFRQyxhQUFZOzREQUFJVixHQUFFOzs7Ozs7Ozs7OztvREFDakU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBT2hCLDhEQUFDVzs0QkFBS25CLFdBQVU7c0NBQStCWjs7Ozs7O3NDQUMvQyw4REFBQ2dDOzRCQUFPcEIsV0FBVTtzQ0FDaEIsNEVBQUNDO2dDQUFJRCxXQUFVOzBDQUNiLDRFQUFDQztvQ0FBSUQsV0FBVTs7c0RBQ2IsOERBQUNDOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ0M7b0RBQUlELFdBQVU7OERBQ2IsNEVBQUNHO3dEQUFJSCxXQUFVO3dEQUF5QkksU0FBUTt3REFBWUMsTUFBSzt3REFBT0MsT0FBTTs7MEVBQzVFLDhEQUFDQztnRUFBS0MsR0FBRTtnRUFBd0JILE1BQUs7Ozs7OzswRUFDckMsOERBQUNFO2dFQUFLQyxHQUFFO2dFQUFzQkgsTUFBSztnRUFBZUksU0FBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7OERBRzlELDhEQUFDRztvREFBS1osV0FBVTs4REFBYzs7Ozs7Ozs7Ozs7O3NEQUVoQyw4REFBQ1c7NENBQUVYLFdBQVU7O2dEQUFVO2dEQUFRLElBQUlxQixPQUFPQyxXQUFXO2dEQUFHOzs7Ozs7O3NEQUN4RCw4REFBQ3JCOzRDQUFJRCxXQUFVOzs4REFDYiw4REFBQ3VCO29EQUFFQyxNQUFLO29EQUFJeEIsV0FBVTs4REFDcEIsNEVBQUNHO3dEQUFJSCxXQUFVO3dEQUFVSyxNQUFLO3dEQUFlRCxTQUFRO3dEQUFZcUIsZUFBWTtrRUFDM0UsNEVBQUNsQjs0REFBS21CLFVBQVM7NERBQVVsQixHQUFFOzREQUFtdEJtQixVQUFTOzs7Ozs7Ozs7Ozs7Ozs7OzhEQUczdkIsOERBQUNKO29EQUFFQyxNQUFLO29EQUFJeEIsV0FBVTs4REFDcEIsNEVBQUNHO3dEQUFJSCxXQUFVO3dEQUFVSyxNQUFLO3dEQUFlRCxTQUFRO3dEQUFZcUIsZUFBWTtrRUFDM0UsNEVBQUNsQjs0REFBS0MsR0FBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVc5QjtHQS9Gd0JyQjs7UUFLUEosc0RBQVNBOzs7S0FMRkkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2xheW91dC50c3g/OTk4OCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XHJcblxyXG5pbXBvcnQgdHlwZSB7IE1ldGFkYXRhIH0gZnJvbSAnbmV4dCc7XHJcbmltcG9ydCB7IEludGVyIH0gZnJvbSAnbmV4dC9mb250L2dvb2dsZSc7XHJcbmltcG9ydCAnLi4vc3R5bGVzL2dsb2JhbHMuY3NzJztcclxuaW1wb3J0IExpbmsgZnJvbSAnbmV4dC9saW5rJztcclxuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJztcclxuXHJcbmNvbnN0IGludGVyID0gSW50ZXIoeyBzdWJzZXRzOiBbJ2xhdGluJ10gfSk7XHJcblxyXG4vLyBNZXRhZGF0YSBuZWVkcyB0byBiZSBleHBvcnRlZCBmcm9tIGEgc2VydmVyIGNvbXBvbmVudCwgc28gdGhpcyB3b24ndCB3b3JrIGluIGEgY2xpZW50IGNvbXBvbmVudFxyXG4vLyBNb3ZpbmcgdGhpcyB0byBhIHNlcGFyYXRlIGZpbGUgb3IgcmVtb3ZpbmcgaXQgZm9yIG5vd1xyXG5jb25zdCBtZXRhZGF0YSA9IHtcclxuICB0aXRsZTogJ1plb1RhcCBEYXRhIEluZ2VzdGlvbiBUb29sJyxcclxuICBkZXNjcmlwdGlvbjogJ0JpZGlyZWN0aW9uYWwgQ2xpY2tIb3VzZSAmIEZsYXQgRmlsZSBEYXRhIEluZ2VzdGlvbiBUb29sJyxcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJvb3RMYXlvdXQoe1xyXG4gIGNoaWxkcmVuLFxyXG59OiBSZWFkb25seTx7XHJcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcclxufT4pIHtcclxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gaGFuZGxlIGhvbWUgYnV0dG9uIGNsaWNrIC0gd2lsbCBuYXZpZ2F0ZSB0byB0aGUgaG9tZSBwYWdlXHJcbiAgY29uc3QgaGFuZGxlSG9tZUNsaWNrID0gKCkgPT4ge1xyXG4gICAgcm91dGVyLnB1c2goJy8nKTtcclxuICAgIHJvdXRlci5yZWZyZXNoKCk7IC8vIEZvcmNlIGEgcmVmcmVzaCB0byByZXNldCBzdGF0ZVxyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8aHRtbCBsYW5nPVwiZW5cIj5cclxuICAgICAgPGhlYWQ+XHJcbiAgICAgICAgPHRpdGxlPnttZXRhZGF0YS50aXRsZX08L3RpdGxlPlxyXG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9e21ldGFkYXRhLmRlc2NyaXB0aW9ufSAvPlxyXG4gICAgICA8L2hlYWQ+XHJcbiAgICAgIDxib2R5IGNsYXNzTmFtZT17aW50ZXIuY2xhc3NOYW1lfT5cclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi1oLXNjcmVlbiBiZy1ncmF5LTUwXCI+XHJcbiAgICAgICAgICA8aGVhZGVyIGNsYXNzTmFtZT1cImJnLWdyYWRpZW50LXRvLXIgZnJvbS1wcmltYXJ5IHRvLWFjY2VudCB0ZXh0LXdoaXRlIHNoYWRvdy1sZ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvIHB4LTRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweS00XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTAgdy0xMCBoLTEwIGJnLXdoaXRlIHJvdW5kZWQtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy02IGgtNiB0ZXh0LXByaW1hcnlcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDE5TDIxIDEyTDEyIDVWMTlaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMTlMMTIgMTJMMyA1VjE5WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBvcGFjaXR5PVwiMC41XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtYm9sZCB0cmFja2luZy10aWdodFwiPlplb1RhcDwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bSB0ZXh0LWJsdWUtMTAwXCI+RGF0YSBJbmdlc3Rpb24gVG9vbDwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGlkZGVuIG1kOmZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtNlwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS0xMDBcIj5CaWRpcmVjdGlvbmFsIENsaWNrSG91c2UgJiBGbGF0IEZpbGUgRGF0YSBJbmdlc3Rpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlSG9tZUNsaWNrfVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB4LTQgcHktMiBiZy13aGl0ZSB0ZXh0LXByaW1hcnkgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGhvdmVyOmJnLWJsdWUtNTAgdHJhbnNpdGlvbi1jb2xvcnMgZmxleCBpdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00IG1yLTFcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9XCIyXCIgZD1cIk0zIDEybDItMm0wIDBsNy03IDcgN20tNy03djE0XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIEhvbWVcclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWQ6aGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVIb21lQ2xpY2t9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC13aGl0ZSBob3Zlcjp0ZXh0LWJsdWUtMTAwIGZsZXggaXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwidy01IGgtNSBtci0xXCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPVwiMlwiIGQ9XCJNMyAxMmwyLTJtMCAwbDctNyA3IDdtLTctN3YxNFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICBIb21lXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICA8bWFpbiBjbGFzc05hbWU9XCJjb250YWluZXIgbXgtYXV0byBweS04IHB4LTRcIj57Y2hpbGRyZW59PC9tYWluPlxyXG4gICAgICAgICAgPGZvb3RlciBjbGFzc05hbWU9XCJiZy1zZWNvbmRhcnkgdGV4dC13aGl0ZSBwLTQgbXQtOFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIG1kOmZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yIG1iLTQgbWQ6bWItMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctOCBoLTggYmctd2hpdGUgcm91bmRlZC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9XCJ3LTQgaC00IHRleHQtc2Vjb25kYXJ5XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiAxOUwyMSAxMkwxMiA1VjE5WlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDE5TDEyIDEyTDMgNVYxOVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgb3BhY2l0eT1cIjAuNVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPlplb1RhcDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1zbVwiPiZjb3B5OyB7bmV3IERhdGUoKS5nZXRGdWxsWWVhcigpfSBaZW9UYXAgfCBEYXRhIEluZ2VzdGlvbiBUb29sPC9wPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNwYWNlLXgtNCBtdC00IG1kOm10LTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIGhvdmVyOnRleHQtYmx1ZS0xMDAgdHJhbnNpdGlvbi1jb2xvcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbFJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMiAyQzYuNDc3IDIgMiA2LjQ4NCAyIDEyLjAxN2MwIDQuNDI1IDIuODY1IDguMTggNi44MzkgOS41MDQuNS4wOTIuNjgyLS4yMTcuNjgyLS40ODMgMC0uMjM3LS4wMDgtLjg2OC0uMDEzLTEuNzAzLTIuNzgyLjYwNS0zLjM2OS0xLjM0My0zLjM2OS0xLjM0My0uNDU0LTEuMTU4LTEuMTEtMS40NjYtMS4xMS0xLjQ2Ni0uOTA4LS42Mi4wNjktLjYwOC4wNjktLjYwOCAxLjAwMy4wNyAxLjUzMSAxLjAzMiAxLjUzMSAxLjAzMi44OTIgMS41MyAyLjM0MSAxLjA4OCAyLjkxLjgzMi4wOTItLjY0Ny4zNS0xLjA4OC42MzYtMS4zMzgtMi4yMi0uMjUzLTQuNTU1LTEuMTEzLTQuNTU1LTQuOTUxIDAtMS4wOTMuMzktMS45ODggMS4wMjktMi42ODgtLjEwMy0uMjUzLS40NDYtMS4yNzIuMDk4LTIuNjUgMCAwIC44NC0uMjcgMi43NSAxLjAyNkE5LjU2NCA5LjU2NCAwIDAxMTIgNi44NDRjLjg1LjAwNCAxLjcwNS4xMTUgMi41MDQuMzM3IDEuOTA5LTEuMjk2IDIuNzQ3LTEuMDI3IDIuNzQ3LTEuMDI3LjU0NiAxLjM3OS4yMDIgMi4zOTguMSAyLjY1MS42NC43IDEuMDI4IDEuNTk1IDEuMDI4IDIuNjg4IDAgMy44NDgtMi4zMzkgNC42OTUtNC41NjYgNC45NDMuMzU5LjMwOS42NzguOTIuNjc4IDEuODU1IDAgMS4zMzgtLjAxMiAyLjQxOS0uMDEyIDIuNzQ3IDAgLjI2OC4xOC41OC42ODguNDgyQTEwLjAxOSAxMC4wMTkgMCAwMDIyIDEyLjAxN0MyMiA2LjQ4NCAxNy41MjIgMiAxMiAyelwiIGNsaXBSdWxlPVwiZXZlbm9kZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlIGhvdmVyOnRleHQtYmx1ZS0xMDAgdHJhbnNpdGlvbi1jb2xvcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cInctNSBoLTVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjI5IDIwLjI1MWM3LjU0NyAwIDExLjY3NS02LjI1MyAxMS42NzUtMTEuNjc1IDAtLjE3OCAwLS4zNTUtLjAxMi0uNTNBOC4zNDggOC4zNDggMCAwMDIyIDUuOTJhOC4xOSA4LjE5IDAgMDEtMi4zNTcuNjQ2IDQuMTE4IDQuMTE4IDAgMDAxLjgwNC0yLjI3IDguMjI0IDguMjI0IDAgMDEtMi42MDUuOTk2IDQuMTA3IDQuMTA3IDAgMDAtNi45OTMgMy43NDMgMTEuNjUgMTEuNjUgMCAwMS04LjQ1Ny00LjI4NyA0LjEwNiA0LjEwNiAwIDAwMS4yNyA1LjQ3N0E0LjA3MiA0LjA3MiAwIDAxMi44IDkuNzEzdi4wNTJhNC4xMDUgNC4xMDUgMCAwMDMuMjkyIDQuMDIyIDQuMDk1IDQuMDk1IDAgMDEtMS44NTMuMDcgNC4xMDggNC4xMDggMCAwMDMuODM0IDIuODVBOC4yMzMgOC4yMzMgMCAwMTIgMTguNDA3YTExLjYxNiAxMS42MTYgMCAwMDYuMjkgMS44NFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9vdGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2JvZHk+XHJcbiAgICA8L2h0bWw+XHJcbiAgKTtcclxufSAiXSwibmFtZXMiOlsiaW50ZXIiLCJ1c2VSb3V0ZXIiLCJtZXRhZGF0YSIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJSb290TGF5b3V0IiwiY2hpbGRyZW4iLCJyb3V0ZXIiLCJoYW5kbGVIb21lQ2xpY2siLCJwdXNoIiwicmVmcmVzaCIsImh0bWwiLCJsYW5nIiwiaGVhZCIsIm1ldGEiLCJuYW1lIiwiY29udGVudCIsImJvZHkiLCJjbGFzc05hbWUiLCJkaXYiLCJoZWFkZXIiLCJzdmciLCJ2aWV3Qm94IiwiZmlsbCIsInhtbG5zIiwicGF0aCIsImQiLCJvcGFjaXR5IiwiaDEiLCJwIiwic3BhbiIsImJ1dHRvbiIsIm9uQ2xpY2siLCJzdHJva2UiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJzdHJva2VXaWR0aCIsIm1haW4iLCJmb290ZXIiLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJhIiwiaHJlZiIsImFyaWEtaGlkZGVuIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/layout.tsx\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js ***! + \****************************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false;\n\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference');\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_CLIENT_REFERENCE$2 || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n}\n\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n if (typeof type === 'function') {\n if (type.$$typeof === REACT_CLIENT_REFERENCE$1) {\n // TODO: Create a convention for naming client references with debug info.\n return null;\n }\n\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n case REACT_CACHE_TYPE:\n {\n return 'Cache';\n }\n\n }\n\n if (typeof type === 'object') {\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n/**\n * Leverages native browser/VM stack frames to get proper details (e.g.\n * filename, line + col number) for a single component in a component stack. We\n * do this by:\n * (1) throwing and catching an error in the function - this will be our\n * control error.\n * (2) calling the component which will eventually throw an error that we'll\n * catch - this will be our sample error.\n * (3) diffing the control and sample error stacks to find the stack frame\n * which represents our component.\n */\n\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if (!fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n /**\n * Finding a common stack frame between sample and control errors can be\n * tricky given the different types and levels of stack trace truncation from\n * different JS VMs. So instead we'll attempt to control what that common\n * frame should be through this object method:\n * Having both the sample and control errors be in the function under the\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\n * `displayName` properties of the function ensures that a stack\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\n * it for both control and sample stacks.\n */\n\n\n var RunInRootFrame = {\n DetermineComponentFrameRoot: function () {\n var control;\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe[prop-missing]\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n } // $FlowFixMe[prop-missing] found when upgrading Flow\n\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n } // TODO(luna): This will currently only throw if the function component\n // tries to access React/ReactDOM/props. We should probably make this throw\n // in simple components too\n\n\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\n // component, which we don't yet support. Attach a noop catch handler to\n // silence the error.\n // TODO: Implement component stacks for async client components?\n\n if (maybePromise && typeof maybePromise.catch === 'function') {\n maybePromise.catch(function () {});\n }\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n return [sample.stack, control.stack];\n }\n }\n\n return [null, null];\n }\n }; // $FlowFixMe[prop-missing]\n\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\n\n if (namePropDescriptor && namePropDescriptor.configurable) {\n // V8 utilizes a function's `name` property when generating a stack trace.\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\n // is set to `false`.\n // $FlowFixMe[cannot-write]\n 'name', {\n value: 'DetermineComponentFrameRoot'\n });\n }\n\n try {\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n sampleStack = _RunInRootFrame$Deter[0],\n controlStack = _RunInRootFrame$Deter[1];\n\n if (sampleStack && controlStack) {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sampleStack.split('\\n');\n var controlLines = controlStack.split('\\n');\n var s = 0;\n var c = 0;\n\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\n s++;\n }\n\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\n c++;\n } // We couldn't find our intentionally injected common root frame, attempt\n // to find another common root frame by search from the bottom of the\n // control stack...\n\n\n if (s === sampleLines.length || c === controlLines.length) {\n s = sampleLines.length - 1;\n c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n if (true) {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\n// $FlowFixMe[method-unbinding]\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe[incompatible-use] This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement$1(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement$1(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement$1(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\n\n return type;\n }\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner$1.current && self && ReactCurrentOwner$1.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner$1.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nfunction ReactElement(type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n}\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV$1(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner$1.current, props);\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner.current) {\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = getComponentNameFromType(parentType);\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object' || !node) {\n return;\n }\n\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n if (type.$$typeof === REACT_CLIENT_REFERENCE) {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement(null);\n }\n }\n}\n\nvar didWarnAboutKeySpread = {};\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV$1(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (hasOwnProperty.call(props, 'key')) {\n var componentName = getComponentNameFromType(type);\n var keys = Object.keys(props).filter(function (k) {\n return k !== 'key';\n });\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\n\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\n\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\n\n didWarnAboutKeySpread[componentName + beforeExample] = true;\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n\nvar jsxDEV = jsxWithValidation ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsxDEV = jsxDEV;\n })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWIsSUFBSSxJQUFxQztBQUN6QztBQUNBOztBQUVBLFlBQVksbUJBQU8sQ0FBQyxzR0FBMEI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUcsZUFBZTtBQUNoSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0EsS0FBSyxHQUFHOztBQUVSLGtEQUFrRDtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw0QkFBNEI7QUFDNUI7QUFDQSxxQ0FBcUM7O0FBRXJDLGdDQUFnQztBQUNoQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUEscUVBQXFFOztBQUVyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBLFNBQVM7QUFDVCx1QkFBdUI7QUFDdkI7QUFDQSxTQUFTO0FBQ1QsdUJBQXVCO0FBQ3ZCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCx3QkFBd0I7QUFDeEI7QUFDQSxTQUFTO0FBQ1QsaUNBQWlDO0FBQ2pDO0FBQ0EsU0FBUztBQUNULDJCQUEyQjtBQUMzQjtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJEQUEyRDs7QUFFM0Q7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7O0FBR2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7OztBQUdkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBOzs7QUFHQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLGdIQUFnSDs7QUFFaEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBLGdGQUFnRjtBQUNoRjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLElBQUk7QUFDeEI7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCOzs7QUFHbEI7QUFDQTtBQUNBLGNBQWM7QUFDZDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJIQUEySDtBQUMzSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9FQUFvRTs7QUFFcEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHOztBQUVsRztBQUNBO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2QsV0FBVyxHQUFHO0FBQ2QsV0FBVyxlQUFlO0FBQzFCLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQiwyREFBMkQsVUFBVTtBQUNyRSx5QkFBeUIsVUFBVTtBQUNuQztBQUNBLGFBQWEsVUFBVTtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsV0FBVyxHQUFHO0FBQ2Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNkRBQTZEO0FBQzdEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsR0FBRztBQUNkOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9EQUFvRDtBQUNwRCxzQkFBc0IsaUJBQWlCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLDRDQUE0Qzs7QUFFNUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6Qjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw0REFBNEQ7QUFDNUQ7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIscUJBQXFCO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsOENBQThDLGdEQUFnRCxNQUFNLGFBQWE7O0FBRWpIO0FBQ0EsK0NBQStDLGtDQUFrQyxPQUFPOztBQUV4Rix1R0FBdUcsY0FBYyxVQUFVLGdHQUFnRyxrQkFBa0IsVUFBVSxVQUFVOztBQUVyUTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGOztBQUVBLGdCQUFnQjtBQUNoQixjQUFjO0FBQ2QsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcz8yMWY3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKTtcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKTtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKTtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKTtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0Jyk7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKTtcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5Jyk7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbnZhciBSRUFDVF9DQUNIRV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuY2FjaGUnKTtcbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXG5cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGl0ZW0pO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIGVuYWJsZVNjb3BlQVBJID0gZmFsc2U7IC8vIEV4cGVyaW1lbnRhbCBDcmVhdGUgRXZlbnQgSGFuZGxlIEFQSS5cbnZhciBlbmFibGVDYWNoZUVsZW1lbnQgPSBmYWxzZTtcbnZhciBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyA9IGZhbHNlOyAvLyBObyBrbm93biBidWdzLCBidXQgbmVlZHMgcGVyZm9ybWFuY2UgdGVzdGluZ1xuXG52YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7IC8vIEVuYWJsZXMgdW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgZmVhdHVyZSBpbiBGaWJlclxuLy8gc3R1ZmYuIEludGVuZGVkIHRvIGVuYWJsZSBSZWFjdCBjb3JlIG1lbWJlcnMgdG8gbW9yZSBlYXNpbHkgZGVidWcgc2NoZWR1bGluZ1xuLy8gaXNzdWVzIGluIERFViBidWlsZHMuXG5cbnZhciBlbmFibGVEZWJ1Z1RyYWNpbmcgPSBmYWxzZTtcblxudmFyIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMiA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTtcbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCBlbmFibGVEZWJ1Z1RyYWNpbmcgIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgZW5hYmxlTGVnYWN5SGlkZGVuICB8fCB0eXBlID09PSBSRUFDVF9PRkZTQ1JFRU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSAgfHwgZW5hYmxlQ2FjaGVFbGVtZW50ICB8fCBlbmFibGVUcmFuc2l0aW9uVHJhY2luZyApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxuICAgIC8vIHR5cGVzIHN1cHBvcnRlZCBieSBhbnkgRmxpZ2h0IGNvbmZpZ3VyYXRpb24gYW55d2hlcmUgc2luY2VcbiAgICAvLyB3ZSBkb24ndCBrbm93IHdoaWNoIEZsaWdodCBidWlsZCB0aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHVzZWRcbiAgICAvLyB3aXRoLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMiB8fCB0eXBlLmdldE1vZHVsZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcblxuICBpZiAoZGlzcGxheU5hbWUpIHtcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XG4gIH1cblxuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lO1xufSAvLyBLZWVwIGluIHN5bmMgd2l0aCByZWFjdC1yZWNvbmNpbGVyL2dldENvbXBvbmVudE5hbWVGcm9tRmliZXJcblxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxudmFyIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTsgLy8gTm90ZSB0aGF0IHRoZSByZWNvbmNpbGVyIHBhY2thZ2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgdG8gdXNlIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoKSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxKSB7XG4gICAgICAvLyBUT0RPOiBDcmVhdGUgYSBjb252ZW50aW9uIGZvciBuYW1pbmcgY2xpZW50IHJlZmVyZW5jZXMgd2l0aCBkZWJ1ZyBpbmZvLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgIHJldHVybiAnU3RyaWN0TW9kZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZUxpc3QnO1xuXG4gICAgY2FzZSBSRUFDVF9DQUNIRV9UWVBFOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJ0NhY2hlJztcbiAgICAgIH1cblxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0Jykge1xuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgdmFyIG91dGVyTmFtZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbDtcblxuICAgICAgICBpZiAob3V0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG91dGVyTmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCAnTWVtbyc7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShpbml0KHBheWxvYWQpKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cbi8qKlxuICogTGV2ZXJhZ2VzIG5hdGl2ZSBicm93c2VyL1ZNIHN0YWNrIGZyYW1lcyB0byBnZXQgcHJvcGVyIGRldGFpbHMgKGUuZy5cbiAqIGZpbGVuYW1lLCBsaW5lICsgY29sIG51bWJlcikgZm9yIGEgc2luZ2xlIGNvbXBvbmVudCBpbiBhIGNvbXBvbmVudCBzdGFjay4gV2VcbiAqIGRvIHRoaXMgYnk6XG4gKiAgICgxKSB0aHJvd2luZyBhbmQgY2F0Y2hpbmcgYW4gZXJyb3IgaW4gdGhlIGZ1bmN0aW9uIC0gdGhpcyB3aWxsIGJlIG91clxuICogICAgICAgY29udHJvbCBlcnJvci5cbiAqICAgKDIpIGNhbGxpbmcgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYW4gZXJyb3IgdGhhdCB3ZSdsbFxuICogICAgICAgY2F0Y2ggLSB0aGlzIHdpbGwgYmUgb3VyIHNhbXBsZSBlcnJvci5cbiAqICAgKDMpIGRpZmZpbmcgdGhlIGNvbnRyb2wgYW5kIHNhbXBsZSBlcnJvciBzdGFja3MgdG8gZmluZCB0aGUgc3RhY2sgZnJhbWVcbiAqICAgICAgIHdoaWNoIHJlcHJlc2VudHMgb3VyIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRpbmcgYSBjb21tb24gc3RhY2sgZnJhbWUgYmV0d2VlbiBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGNhbiBiZVxuICAgKiB0cmlja3kgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcyBhbmQgbGV2ZWxzIG9mIHN0YWNrIHRyYWNlIHRydW5jYXRpb24gZnJvbVxuICAgKiBkaWZmZXJlbnQgSlMgVk1zLiBTbyBpbnN0ZWFkIHdlJ2xsIGF0dGVtcHQgdG8gY29udHJvbCB3aGF0IHRoYXQgY29tbW9uXG4gICAqIGZyYW1lIHNob3VsZCBiZSB0aHJvdWdoIHRoaXMgb2JqZWN0IG1ldGhvZDpcbiAgICogSGF2aW5nIGJvdGggdGhlIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgYmUgaW4gdGhlIGZ1bmN0aW9uIHVuZGVyIHRoZVxuICAgKiBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIHByb3BlcnR5LCArIHNldHRpbmcgdGhlIGBuYW1lYCBhbmRcbiAgICogYGRpc3BsYXlOYW1lYCBwcm9wZXJ0aWVzIG9mIHRoZSBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgYSBzdGFja1xuICAgKiBmcmFtZSBleGlzdHMgdGhhdCBoYXMgdGhlIG1ldGhvZCBuYW1lIGBEZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lUm9vdGAgaW5cbiAgICogaXQgZm9yIGJvdGggY29udHJvbCBhbmQgc2FtcGxlIHN0YWNrcy5cbiAgICovXG5cblxuICB2YXIgUnVuSW5Sb290RnJhbWUgPSB7XG4gICAgRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290OiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgY29udHJvbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddIGZvdW5kIHdoZW4gdXBncmFkaW5nIEZsb3dcblxuXG4gICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgICAgfSAvLyBUT0RPKGx1bmEpOiBUaGlzIHdpbGwgY3VycmVudGx5IG9ubHkgdGhyb3cgaWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudFxuICAgICAgICAgIC8vIHRyaWVzIHRvIGFjY2VzcyBSZWFjdC9SZWFjdERPTS9wcm9wcy4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyB0aHJvd1xuICAgICAgICAgIC8vIGluIHNpbXBsZSBjb21wb25lbnRzIHRvb1xuXG5cbiAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gZm4oKTsgLy8gSWYgdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCByZXR1cm5zIGEgcHJvbWlzZSwgaXQncyBsaWtlbHkgYW4gYXN5bmNcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHdoaWNoIHdlIGRvbid0IHlldCBzdXBwb3J0LiBBdHRhY2ggYSBub29wIGNhdGNoIGhhbmRsZXIgdG9cbiAgICAgICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cbiAgICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgY29tcG9uZW50IHN0YWNrcyBmb3IgYXN5bmMgY2xpZW50IGNvbXBvbmVudHM/XG5cbiAgICAgICAgICBpZiAobWF5YmVQcm9taXNlICYmIHR5cGVvZiBtYXliZVByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgfVxuICB9OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPSAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JztcbiAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LCAnbmFtZScpOyAvLyBCZWZvcmUgRVM2LCB0aGUgYG5hbWVgIHByb3BlcnR5IHdhcyBub3QgY29uZmlndXJhYmxlLlxuXG4gIGlmIChuYW1lUHJvcERlc2NyaXB0b3IgJiYgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xuICAgIC8vIFY4IHV0aWxpemVzIGEgZnVuY3Rpb24ncyBgbmFtZWAgcHJvcGVydHkgd2hlbiBnZW5lcmF0aW5nIGEgc3RhY2sgdHJhY2UuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCwgLy8gQ29uZmlndXJhYmxlIHByb3BlcnRpZXMgY2FuIGJlIHVwZGF0ZWQgZXZlbiBpZiBpdHMgd3JpdGFibGUgZGVzY3JpcHRvclxuICAgIC8vIGlzIHNldCB0byBgZmFsc2VgLlxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuICAgICduYW1lJywge1xuICAgICAgdmFsdWU6ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnXG4gICAgfSk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxcbiAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcblxuICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgdmFyIGMgPSAwO1xuXG4gICAgICB3aGlsZSAocyA8IHNhbXBsZUxpbmVzLmxlbmd0aCAmJiAhc2FtcGxlTGluZXNbc10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIHMrKztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGMgPCBjb250cm9sTGluZXMubGVuZ3RoICYmICFjb250cm9sTGluZXNbY10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XG4gICAgICAgIGMrKztcbiAgICAgIH0gLy8gV2UgY291bGRuJ3QgZmluZCBvdXIgaW50ZW50aW9uYWxseSBpbmplY3RlZCBjb21tb24gcm9vdCBmcmFtZSwgYXR0ZW1wdFxuICAgICAgLy8gdG8gZmluZCBhbm90aGVyIGNvbW1vbiByb290IGZyYW1lIGJ5IHNlYXJjaCBmcm9tIHRoZSBib3R0b20gb2YgdGhlXG4gICAgICAvLyBjb250cm9sIHN0YWNrLi4uXG5cblxuICAgICAgaWYgKHMgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fCBjID09PSBjb250cm9sTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgICBjLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcbiAgICAgICAgICAgICAgICAvLyBidXQgd2UgaGF2ZSBhIHVzZXItcHJvdmlkZWQgXCJkaXNwbGF5TmFtZVwiXG4gICAgICAgICAgICAgICAgLy8gc3BsaWNlIGl0IGluIHRvIG1ha2UgdGhlIHN0YWNrIG1vcmUgcmVhZGFibGUuXG5cblxuICAgICAgICAgICAgICAgIGlmIChmbi5kaXNwbGF5TmFtZSAmJiBfZnJhbWUuaW5jbHVkZXMoJzxhbm9ueW1vdXM+JykpIHtcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IHR5cGU7XG4gICAgICAgICAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihpbml0KHBheWxvYWQpLCBzb3VyY2UsIG93bmVyRm4pO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbi8vICRGbG93Rml4TWVbbWV0aG9kLXVuYmluZGluZ11cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS11c2VdIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChoYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3Byb2QtZXJyb3ItY29kZXNcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblxuZnVuY3Rpb24gaXNBcnJheShhKSB7XG4gIHJldHVybiBpc0FycmF5SW1wbChhKTtcbn1cblxuLypcbiAqIFRoZSBgJycgKyB2YWx1ZWAgcGF0dGVybiAodXNlZCBpbiBwZXJmLXNlbnNpdGl2ZSBjb2RlKSB0aHJvd3MgZm9yIFN5bWJvbFxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cbiAqXG4gKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIHdpbGwgdGhyb3cgYW4gZWFzaWVyLXRvLXVuZGVyc3RhbmQsXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXG4gKiBwcm9ibGVtLiAoSW5zdGVhZCBvZiBhIGNvbmZ1c2luZyBleGNlcHRpb24gdGhyb3duIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb25cbiAqIG9mIHRoZSBgdmFsdWVgIG9iamVjdCkuXG4gKi9cbi8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXG5mdW5jdGlvbiB0eXBlTmFtZSh2YWx1ZSkge1xuICB7XG4gICAgLy8gdG9TdHJpbmdUYWcgaXMgbmVlZGVkIGZvciBuYW1lc3BhY2VkIHR5cGVzIGxpa2UgVGVtcG9yYWwuSW5zdGFudFxuICAgIHZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLnRvU3RyaW5nVGFnO1xuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dIG9ubHkgY2FsbGVkIGluIERFViwgc28gdm9pZCByZXR1cm4gaXMgbm90IHBvc3NpYmxlLlxuXG5cbmZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gIHtcbiAgICB0cnkge1xuICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIC8vIElmIHlvdSBlbmRlZCB1cCBoZXJlIGJ5IGZvbGxvd2luZyBhbiBleGNlcHRpb24gY2FsbCBzdGFjaywgaGVyZSdzIHdoYXQnc1xuICAvLyBoYXBwZW5lZDogeW91IHN1cHBsaWVkIGFuIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gUmVhY3QgKGFzIGEgcHJvcCwga2V5LFxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXG4gIC8vIGNvZXJjZSBpdCB0byBhIHN0cmluZyB1c2luZyBgJycgKyB2YWx1ZWAsIGFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duLlxuICAvL1xuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcbiAgLy8gYW5kIFRlbXBvcmFsIG9iamVjdHMgbGlrZSBgVGVtcG9yYWwuSW5zdGFudGAuIEJ1dCBhbnkgb2JqZWN0IHRoYXQgaGFzIGFcbiAgLy8gYHZhbHVlT2ZgIG9yIGBbU3ltYm9sLnRvUHJpbWl0aXZlXWAgbWV0aG9kIHRoYXQgdGhyb3dzIHdpbGwgYWxzbyBjYXVzZSB0aGlzXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxuICAvLyBudW1lcmljIG9wZXJhdG9ycyBsaWtlIGArYCBvciBjb21wYXJpc29uIG9wZXJhdG9ycyBsaWtlIGA+PWAgYmVjYXVzZSBjdXN0b21cbiAgLy8gbWV0aG9kcyBhcmUgbmVlZGVkIHRvIHBlcmZvcm0gYWNjdXJhdGUgYXJpdGhtZXRpYyBvciBjb21wYXJpc29uLilcbiAgLy9cbiAgLy8gVG8gZml4IHRoZSBwcm9ibGVtLCBjb2VyY2UgdGhpcyBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIGJlZm9yZVxuICAvLyBwYXNzaW5nIGl0IHRvIFJlYWN0LiBUaGUgbW9zdCByZWxpYWJsZSB3YXkgaXMgdXN1YWxseSBgU3RyaW5nKHZhbHVlKWAuXG4gIC8vXG4gIC8vIFRvIGZpbmQgd2hpY2ggdmFsdWUgaXMgdGhyb3dpbmcsIGNoZWNrIHRoZSBicm93c2VyIG9yIGRlYnVnZ2VyIGNvbnNvbGUuXG4gIC8vIEJlZm9yZSB0aGlzIGV4Y2VwdGlvbiB3YXMgdGhyb3duLCB0aGVyZSBzaG91bGQgYmUgYGNvbnNvbGUuZXJyb3JgIG91dHB1dFxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXG4gIC8vIHByb2JsZW0gYW5kIGhvdyB0aGF0IHR5cGUgd2FzIHVzZWQ6IGtleSwgYXRycmlidXRlLCBpbnB1dCB2YWx1ZSBwcm9wLCBldGMuXG4gIC8vIEluIG1vc3QgY2FzZXMsIHRoaXMgY29uc29sZSBvdXRwdXQgYWxzbyBzaG93cyB0aGUgY29tcG9uZW50IGFuZCBpdHNcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxuICAvL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvc2FmZS1zdHJpbmctY29lcmNpb25cbiAgcmV0dXJuICcnICsgdmFsdWU7XG59XG5mdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gIHtcbiAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKSB7XG4gICAgICBlcnJvcignVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLicgKyAnIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLicsIHR5cGVOYW1lKHZhbHVlKSk7XG5cbiAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpOyAvLyB0aHJvdyAodG8gaGVscCBjYWxsZXJzIGZpbmQgdHJvdWJsZXNob290aW5nIGNvbW1lbnRzKVxuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bjtcbnZhciBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bjtcbnZhciBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzO1xuXG57XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAncmVmJykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdrZXknKSkge1xuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0O1xuXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZywgc2VsZikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQuc3RhdGVOb2RlICE9PSBzZWxmKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50LnR5cGUpLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHtcbiAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxuZnVuY3Rpb24gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICB2YXIgZWxlbWVudCA9IHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvd3MgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IEVsZW1lbnRcbiAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcbiAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxuICAgIF9vd25lcjogb3duZXJcbiAgfTtcblxuICB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307IC8vIFRvIG1ha2UgY29tcGFyaW5nIFJlYWN0RWxlbWVudHMgZWFzaWVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB3ZSBtYWtlXG4gICAgLy8gdGhlIHZhbGlkYXRpb24gZmxhZyBub24tZW51bWVyYWJsZSAod2hlcmUgcG9zc2libGUsIHdoaWNoIHNob3VsZFxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXG4gICAgLy8gaWdub3JlcyBpdC5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfSk7IC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc2VsZlxuICAgIH0pOyAvLyBUd28gZWxlbWVudHMgY3JlYXRlZCBpbiB0d28gZGlmZmVyZW50IHBsYWNlcyBzaG91bGQgYmUgY29uc2lkZXJlZFxuICAgIC8vIGVxdWFsIGZvciB0ZXN0aW5nIHB1cnBvc2VzIGFuZCB0aGVyZWZvcmUgd2UgaGlkZSBpdCBmcm9tIGVudW1lcmF0aW9uLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc291cmNlJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNvdXJjZVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZmNzL3B1bGwvMTA3XG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5cbmZ1bmN0aW9uIGpzeERFViQxKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIHNvdXJjZSwgc2VsZikge1xuICB7XG4gICAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB2YXIga2V5ID0gbnVsbDtcbiAgICB2YXIgcmVmID0gbnVsbDsgLy8gQ3VycmVudGx5LCBrZXkgY2FuIGJlIHNwcmVhZCBpbiBhcyBhIHByb3AuIFRoaXMgY2F1c2VzIGEgcG90ZW50aWFsXG4gICAgLy8gaXNzdWUgaWYga2V5IGlzIGFsc28gZXhwbGljaXRseSBkZWNsYXJlZCAoaWUuIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+XG4gICAgLy8gb3IgPGRpdiBrZXk9XCJIaVwiIHsuLi5wcm9wc30gLz4gKS4gV2Ugd2FudCB0byBkZXByZWNhdGUga2V5IHNwcmVhZCxcbiAgICAvLyBidXQgYXMgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAsIHdlIHdpbGwgdXNlIGpzeERFViBmb3IgZXZlcnl0aGluZyBleGNlcHRcbiAgICAvLyA8ZGl2IHsuLi5wcm9wc30ga2V5PVwiSGlcIiAvPiwgYmVjYXVzZSB3ZSBhcmVuJ3QgY3VycmVudGx5IGFibGUgdG8gdGVsbCBpZlxuICAgIC8vIGtleSBpcyBleHBsaWNpdGx5IGRlY2xhcmVkIHRvIGJlIHVuZGVmaW5lZCBvciBub3QuXG5cbiAgICBpZiAobWF5YmVLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1heWJlS2V5KTtcbiAgICAgIH1cblxuICAgICAga2V5ID0gJycgKyBtYXliZUtleTtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAge1xuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpO1xuICAgICAgfVxuXG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcbiAgICB9IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSB8fCByZWYpIHtcbiAgICAgIHZhciBkaXNwbGF5TmFtZSA9IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgJ1Vua25vd24nIDogdHlwZTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVmKSB7XG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQsIHByb3BzKTtcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duO1xuXG57XG4gIHByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duID0gZmFsc2U7XG59XG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2lzdmFsaWRlbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIEBmaW5hbFxuICovXG5cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpIHtcbiAge1xuICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICB7XG4gICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgeW91ciBjb2RlIGF0ICcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnLic7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICB2YXIgcGFyZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShwYXJlbnRUeXBlKTtcblxuICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmZvO1xuICB9XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVFeHBsaWNpdEtleShlbGVtZW50LCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gICAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuXG4gICAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICAvLyBHaXZlIHRoZSBjb21wb25lbnQgdGhhdCBvcmlnaW5hbGx5IGNyZWF0ZWQgdGhpcyBjaGlsZC5cbiAgICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgfVxufVxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnIHx8ICFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIDsgZWxzZSBpZiAoaXNBcnJheShub2RlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFR5cGVzO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCAvLyBOb3RlOiBNZW1vIG9ubHkgY2hlY2tzIG91dGVyIHByb3BzIGhlcmUuXG4gICAgLy8gSW5uZXIgcHJvcHMgYXJlIGNoZWNrZWQgaW4gdGhlIHJlY29uY2lsZXIuXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSkge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocHJvcFR5cGVzKSB7XG4gICAgICAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5BYm91dEtleVNwcmVhZCA9IHt9O1xuZnVuY3Rpb24ganN4V2l0aFZhbGlkYXRpb24odHlwZSwgcHJvcHMsIGtleSwgaXNTdGF0aWNDaGlsZHJlbiwgc291cmNlLCBzZWxmKSB7XG4gIHtcbiAgICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXG5cbiAgICBpZiAoIXZhbGlkVHlwZSkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNvdXJjZUluZm8gPSBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShzb3VyY2UpO1xuXG4gICAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZVN0cmluZztcblxuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgICAgdHlwZVN0cmluZyA9ICdudWxsJztcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh0eXBlKSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkICYmIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICAgIH1cblxuICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudCA9IGpzeERFViQxKHR5cGUsIHByb3BzLCBrZXksIHNvdXJjZSwgc2VsZik7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gICAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cbiAgICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gICAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXG5cblxuICAgIGlmICh2YWxpZFR5cGUpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuXG4gICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaXNTdGF0aWNDaGlsZHJlbikge1xuICAgICAgICAgIGlmIChpc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpXSwgdHlwZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcignUmVhY3QuanN4OiBTdGF0aWMgY2hpbGRyZW4gc2hvdWxkIGFsd2F5cyBiZSBhbiBhcnJheS4gJyArICdZb3UgYXJlIGxpa2VseSBleHBsaWNpdGx5IGNhbGxpbmcgUmVhY3QuanN4cyBvciBSZWFjdC5qc3hERVYuICcgKyAnVXNlIHRoZSBCYWJlbCB0cmFuc2Zvcm0gaW5zdGVhZC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4sIHR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsICdrZXknKSkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHByb3BzKS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgcmV0dXJuIGsgIT09ICdrZXknO1xuICAgICAgfSk7XG4gICAgICB2YXIgYmVmb3JlRXhhbXBsZSA9IGtleXMubGVuZ3RoID4gMCA/ICd7a2V5OiBzb21lS2V5LCAnICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7a2V5OiBzb21lS2V5fSc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0S2V5U3ByZWFkW2NvbXBvbmVudE5hbWUgKyBiZWZvcmVFeGFtcGxlXSkge1xuICAgICAgICB2YXIgYWZ0ZXJFeGFtcGxlID0ga2V5cy5sZW5ndGggPiAwID8gJ3snICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7fSc7XG5cbiAgICAgICAgZXJyb3IoJ0EgcHJvcHMgb2JqZWN0IGNvbnRhaW5pbmcgYSBcImtleVwiIHByb3AgaXMgYmVpbmcgc3ByZWFkIGludG8gSlNYOlxcbicgKyAnICBsZXQgcHJvcHMgPSAlcztcXG4nICsgJyAgPCVzIHsuLi5wcm9wc30gLz5cXG4nICsgJ1JlYWN0IGtleXMgbXVzdCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gSlNYIHdpdGhvdXQgdXNpbmcgc3ByZWFkOlxcbicgKyAnICBsZXQgcHJvcHMgPSAlcztcXG4nICsgJyAgPCVzIGtleT17c29tZUtleX0gey4uLnByb3BzfSAvPicsIGJlZm9yZUV4YW1wbGUsIGNvbXBvbmVudE5hbWUsIGFmdGVyRXhhbXBsZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0S2V5U3ByZWFkW2NvbXBvbmVudE5hbWUgKyBiZWZvcmVFeGFtcGxlXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcbiAgICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn0gLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBleGlzdCB0byBzdGlsbCBnZXQgY2hpbGQgd2FybmluZ3MgaW4gZGV2XG5cbnZhciBqc3hERVYgPSBqc3hXaXRoVmFsaWRhdGlvbiA7XG5cbmV4cG9ydHMuRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuZXhwb3J0cy5qc3hERVYgPSBqc3hERVY7XG4gIH0pKCk7XG59XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\n")); + +/***/ }), + +/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js": +/*!******************************************************************!*\ + !*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***! + \******************************************************************/ +/***/ (function(module, __unused_webpack_exports, __webpack_require__) { + +"use strict"; +eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSw4TEFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtZGV2LXJ1bnRpbWUuanM/YjYxZCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.ca4ac15e37314a15.hot-update.js b/frontend/.next/static/webpack/app/layout.ca4ac15e37314a15.hot-update.js new file mode 100644 index 000000000..4f1fd46ce --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.ca4ac15e37314a15.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"ade2306f3b7b\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJhZGUyMzA2ZjNiN2JcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/layout.d81b743d440182de.hot-update.js b/frontend/.next/static/webpack/app/layout.d81b743d440182de.hot-update.js new file mode 100644 index 000000000..20ee7a20e --- /dev/null +++ b/frontend/.next/static/webpack/app/layout.d81b743d440182de.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/layout",{ + +/***/ "(app-pages-browser)/./styles/globals.css": +/*!****************************!*\ + !*** ./styles/globals.css ***! + \****************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"eeb3eb7da1ac\");\nif (true) { module.hot.accept() }\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3N0eWxlcy9nbG9iYWxzLmNzcyIsIm1hcHBpbmdzIjoiO0FBQUEsK0RBQWUsY0FBYztBQUM3QixJQUFJLElBQVUsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vc3R5bGVzL2dsb2JhbHMuY3NzPzYwYjMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgXCJlZWIzZWI3ZGExYWNcIlxuaWYgKG1vZHVsZS5ob3QpIHsgbW9kdWxlLmhvdC5hY2NlcHQoKSB9XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./styles/globals.css\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/page.08d7cd0b86521b79.hot-update.js b/frontend/.next/static/webpack/app/page.08d7cd0b86521b79.hot-update.js new file mode 100644 index 000000000..a2b81983a --- /dev/null +++ b/frontend/.next/static/webpack/app/page.08d7cd0b86521b79.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/page",{ + +/***/ "(app-pages-browser)/./components/FlatFileForm.tsx": +/*!*************************************!*\ + !*** ./components/FlatFileForm.tsx ***! + \*************************************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ FlatFileForm; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\nfunction FlatFileForm(param) {\n let { onSubmit, initialValues, requireFile, isLoading, title } = param;\n _s();\n const [config, setConfig] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(initialValues);\n const [file, setFile] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [validation, setValidation] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const [isDragActive, setIsDragActive] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const fileInputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const handleChange = (e)=>{\n const { name, value, type } = e.target;\n setConfig({\n ...config,\n [name]: type === \"checkbox\" ? e.target.checked : value\n });\n // Clear validation error when field is updated\n if (validation[name]) {\n setValidation((prev)=>({\n ...prev,\n [name]: \"\"\n }));\n }\n };\n const handleFileChange = (e)=>{\n if (e.target.files && e.target.files.length > 0) {\n setFile(e.target.files[0]);\n if (validation[\"file\"]) {\n setValidation((prev)=>({\n ...prev,\n \"file\": \"\"\n }));\n }\n }\n };\n const handleDragEnter = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n setIsDragActive(true);\n }, []);\n const handleDragLeave = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n setIsDragActive(false);\n }, []);\n const handleDragOver = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n }, []);\n const handleDrop = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e)=>{\n e.preventDefault();\n e.stopPropagation();\n setIsDragActive(false);\n if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n const droppedFile = e.dataTransfer.files[0];\n // Check if file is CSV or TXT\n if (droppedFile.name.endsWith(\".csv\") || droppedFile.name.endsWith(\".txt\")) {\n setFile(droppedFile);\n if (validation[\"file\"]) {\n setValidation((prev)=>({\n ...prev,\n \"file\": \"\"\n }));\n }\n } else {\n setValidation((prev)=>({\n ...prev,\n \"file\": \"Only CSV and TXT files are supported\"\n }));\n }\n }\n }, [\n validation\n ]);\n const openFileSelector = ()=>{\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n const validateForm = ()=>{\n const errors = {};\n if (requireFile && !file) {\n errors.file = \"Please select a file to upload\";\n }\n if (!requireFile && (!config.fileName || !config.fileName.trim())) {\n errors.fileName = \"File name is required for export\";\n }\n setValidation(errors);\n return Object.keys(errors).length === 0;\n };\n const handleSubmit = (e)=>{\n e.preventDefault();\n if (validateForm()) {\n onSubmit(config, file || undefined);\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"bg-white shadow-lg rounded-lg p-6 max-w-xl mx-auto transition-all duration-300 hover:shadow-xl\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-2xl font-semibold mb-6 text-primary\",\n children: title\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 119,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n className: \"space-y-6\",\n children: [\n requireFile && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n className: \"block text-sm font-medium \".concat(validation.file ? \"text-red-600\" : \"text-gray-700\", \" mb-2\"),\n children: \"Upload File\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 123,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"border-2 border-dashed rounded-lg p-6 transition-colors \".concat(isDragActive ? \"border-primary bg-blue-50\" : file ? \"border-green-400 bg-green-50\" : validation.file ? \"border-red-300 bg-red-50\" : \"border-gray-300 hover:border-gray-400\"),\n onDragEnter: handleDragEnter,\n onDragLeave: handleDragLeave,\n onDragOver: handleDragOver,\n onDrop: handleDrop,\n onClick: openFileSelector,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"file\",\n id: \"file\",\n name: \"file\",\n ref: fileInputRef,\n className: \"hidden\",\n accept: \".csv,.txt\",\n onChange: handleFileChange,\n required: requireFile\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 143,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: !file ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"mx-auto h-12 w-12 \".concat(validation.file ? \"text-red-400\" : \"text-gray-400\"),\n stroke: \"currentColor\",\n fill: \"none\",\n viewBox: \"0 0 48 48\",\n \"aria-hidden\": \"true\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n d: \"M28 8H12a4 4 0 00-4 4v20m32-12v8m0 0v8a4 4 0 01-4 4H12a4 4 0 01-4-4v-4m32-4l-3.172-3.172a4 4 0 00-5.656 0L28 28M8 32l9.172-9.172a4 4 0 015.656 0L28 28m0 0l4 4m4-24h8m-4-4v8m-12 4h.02\",\n strokeWidth: \"2\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 158,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 157,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-gray-600\",\n children: isDragActive ? \"Drop your file here\" : \"Drag and drop your file here, or click to browse\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 165,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-xs text-gray-500\",\n children: \"Supported formats: CSV, TXT\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 168,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center space-x-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"h-8 w-8 text-green-500\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\",\n clipRule: \"evenodd\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 175,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 174,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-left\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm font-medium text-gray-900\",\n children: file.name\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 178,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-gray-500\",\n children: [\n (file.size / 1024).toFixed(2),\n \" KB • Click to change\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 179,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 177,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 173,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 154,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 127,\n columnNumber: 13\n }, this),\n validation.file && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm text-red-600 font-medium\",\n children: validation.file\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 187,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 122,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"delimiter\",\n className: \"block text-sm font-medium text-gray-700 mb-1\",\n children: \"Delimiter\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 194,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"select\", {\n id: \"delimiter\",\n name: \"delimiter\",\n className: \"block w-full rounded-md border-gray-300 shadow-sm focus:border-primary focus:ring-primary\",\n value: config.delimiter,\n onChange: handleChange,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \",\",\n children: \"Comma (,)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 204,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \";\",\n children: \"Semicolon (;)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 205,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"\\\\t\",\n children: \"Tab (\\\\t)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 206,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"option\", {\n value: \"|\",\n children: \"Pipe (|)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 207,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 197,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 193,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"checkbox\",\n id: \"hasHeader\",\n name: \"hasHeader\",\n className: \"h-4 w-4 text-primary focus:ring-primary border-gray-300 rounded\",\n checked: config.hasHeader,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 212,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"hasHeader\",\n className: \"ml-2 block text-sm text-gray-700\",\n children: \"File has header row\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 220,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 211,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 192,\n columnNumber: 9\n }, this),\n !requireFile && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n htmlFor: \"fileName\",\n className: \"block text-sm font-medium \".concat(validation.fileName ? \"text-red-600\" : \"text-gray-700\", \" mb-1\"),\n children: \"Export File Name\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 228,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: \"text\",\n id: \"fileName\",\n name: \"fileName\",\n className: \"block w-full \".concat(validation.fileName ? \"border-red-500 bg-red-50\" : \"border-gray-300\", \" rounded-md shadow-sm focus:outline-none focus:ring-2 \").concat(validation.fileName ? \"focus:ring-red-500\" : \"focus:ring-primary\"),\n placeholder: \"export.csv\",\n value: config.fileName,\n onChange: handleChange\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 231,\n columnNumber: 13\n }, this),\n validation.fileName ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-sm text-red-600 font-medium\",\n children: validation.fileName\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 241,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-1 text-sm text-gray-500\",\n children: \"Leave empty to generate automatically.\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 243,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 227,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex justify-end\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"submit\",\n className: \"btn btn-primary px-6 py-2 rounded-md text-white font-medium transition-colors\",\n disabled: isLoading,\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"loading loading-spinner loading-sm mr-2\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 258,\n columnNumber: 17\n }, this),\n \"Processing...\"\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 257,\n columnNumber: 15\n }, this) : requireFile ? \"Upload & Process\" : \"Continue\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 251,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 250,\n columnNumber: 9\n }, this),\n Object.keys(validation).length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 p-3 bg-red-50 border border-red-200 rounded-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n className: \"h-5 w-5 text-red-500 mr-2\",\n fill: \"none\",\n stroke: \"currentColor\",\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: \"2\",\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 269,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 268,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-red-600 font-medium\",\n children: \"Please fix the errors before continuing\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 271,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 267,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 266,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 120,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\components\\\\FlatFileForm.tsx\",\n lineNumber: 118,\n columnNumber: 5\n }, this);\n}\n_s(FlatFileForm, \"76E+ppvm//CroZsZJ1C31aekw8c=\");\n_c = FlatFileForm;\nvar _c;\n$RefreshReg$(_c, \"FlatFileForm\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvRmxhdEZpbGVGb3JtLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFc0Q7QUFXdkMsU0FBU0csYUFBYSxLQU1qQjtRQU5pQixFQUNuQ0MsUUFBUSxFQUNSQyxhQUFhLEVBQ2JDLFdBQVcsRUFDWEMsU0FBUyxFQUNUQyxLQUFLLEVBQ2EsR0FOaUI7O0lBT25DLE1BQU0sQ0FBQ0MsUUFBUUMsVUFBVSxHQUFHViwrQ0FBUUEsQ0FBaUJLO0lBQ3JELE1BQU0sQ0FBQ00sTUFBTUMsUUFBUSxHQUFHWiwrQ0FBUUEsQ0FBYztJQUM5QyxNQUFNLENBQUNhLFlBQVlDLGNBQWMsR0FBR2QsK0NBQVFBLENBQXlCLENBQUM7SUFDdEUsTUFBTSxDQUFDZSxjQUFjQyxnQkFBZ0IsR0FBR2hCLCtDQUFRQSxDQUFVO0lBQzFELE1BQU1pQixlQUFlaEIsNkNBQU1BLENBQW1CO0lBRTlDLE1BQU1pQixlQUFlLENBQUNDO1FBQ3BCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRSxHQUFHSCxFQUFFSSxNQUFNO1FBRXRDYixVQUFVO1lBQ1IsR0FBR0QsTUFBTTtZQUNULENBQUNXLEtBQUssRUFBRUUsU0FBUyxhQUFhLEVBQUdDLE1BQU0sQ0FBc0JDLE9BQU8sR0FBR0g7UUFDekU7UUFFQSwrQ0FBK0M7UUFDL0MsSUFBSVIsVUFBVSxDQUFDTyxLQUFLLEVBQUU7WUFDcEJOLGNBQWNXLENBQUFBLE9BQVM7b0JBQUUsR0FBR0EsSUFBSTtvQkFBRSxDQUFDTCxLQUFLLEVBQUU7Z0JBQUc7UUFDL0M7SUFDRjtJQUVBLE1BQU1NLG1CQUFtQixDQUFDUDtRQUN4QixJQUFJQSxFQUFFSSxNQUFNLENBQUNJLEtBQUssSUFBSVIsRUFBRUksTUFBTSxDQUFDSSxLQUFLLENBQUNDLE1BQU0sR0FBRyxHQUFHO1lBQy9DaEIsUUFBUU8sRUFBRUksTUFBTSxDQUFDSSxLQUFLLENBQUMsRUFBRTtZQUN6QixJQUFJZCxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUN0QkMsY0FBY1csQ0FBQUEsT0FBUzt3QkFBRSxHQUFHQSxJQUFJO3dCQUFFLFFBQVE7b0JBQUc7WUFDL0M7UUFDRjtJQUNGO0lBRUEsTUFBTUksa0JBQWtCM0Isa0RBQVdBLENBQUMsQ0FBQ2lCO1FBQ25DQSxFQUFFVyxjQUFjO1FBQ2hCWCxFQUFFWSxlQUFlO1FBQ2pCZixnQkFBZ0I7SUFDbEIsR0FBRyxFQUFFO0lBRUwsTUFBTWdCLGtCQUFrQjlCLGtEQUFXQSxDQUFDLENBQUNpQjtRQUNuQ0EsRUFBRVcsY0FBYztRQUNoQlgsRUFBRVksZUFBZTtRQUNqQmYsZ0JBQWdCO0lBQ2xCLEdBQUcsRUFBRTtJQUVMLE1BQU1pQixpQkFBaUIvQixrREFBV0EsQ0FBQyxDQUFDaUI7UUFDbENBLEVBQUVXLGNBQWM7UUFDaEJYLEVBQUVZLGVBQWU7SUFDbkIsR0FBRyxFQUFFO0lBRUwsTUFBTUcsYUFBYWhDLGtEQUFXQSxDQUFDLENBQUNpQjtRQUM5QkEsRUFBRVcsY0FBYztRQUNoQlgsRUFBRVksZUFBZTtRQUNqQmYsZ0JBQWdCO1FBRWhCLElBQUlHLEVBQUVnQixZQUFZLENBQUNSLEtBQUssSUFBSVIsRUFBRWdCLFlBQVksQ0FBQ1IsS0FBSyxDQUFDQyxNQUFNLEdBQUcsR0FBRztZQUMzRCxNQUFNUSxjQUFjakIsRUFBRWdCLFlBQVksQ0FBQ1IsS0FBSyxDQUFDLEVBQUU7WUFDM0MsOEJBQThCO1lBQzlCLElBQUlTLFlBQVloQixJQUFJLENBQUNpQixRQUFRLENBQUMsV0FBV0QsWUFBWWhCLElBQUksQ0FBQ2lCLFFBQVEsQ0FBQyxTQUFTO2dCQUMxRXpCLFFBQVF3QjtnQkFDUixJQUFJdkIsVUFBVSxDQUFDLE9BQU8sRUFBRTtvQkFDdEJDLGNBQWNXLENBQUFBLE9BQVM7NEJBQUUsR0FBR0EsSUFBSTs0QkFBRSxRQUFRO3dCQUFHO2dCQUMvQztZQUNGLE9BQU87Z0JBQ0xYLGNBQWNXLENBQUFBLE9BQVM7d0JBQ3JCLEdBQUdBLElBQUk7d0JBQ1AsUUFBUTtvQkFDVjtZQUNGO1FBQ0Y7SUFDRixHQUFHO1FBQUNaO0tBQVc7SUFFZixNQUFNeUIsbUJBQW1CO1FBQ3ZCLElBQUlyQixhQUFhc0IsT0FBTyxFQUFFO1lBQ3hCdEIsYUFBYXNCLE9BQU8sQ0FBQ0MsS0FBSztRQUM1QjtJQUNGO0lBRUEsTUFBTUMsZUFBZTtRQUNuQixNQUFNQyxTQUFpQyxDQUFDO1FBRXhDLElBQUlwQyxlQUFlLENBQUNLLE1BQU07WUFDeEIrQixPQUFPL0IsSUFBSSxHQUFHO1FBQ2hCO1FBRUEsSUFBSSxDQUFDTCxlQUFnQixFQUFDRyxPQUFPa0MsUUFBUSxJQUFJLENBQUNsQyxPQUFPa0MsUUFBUSxDQUFDQyxJQUFJLEVBQUMsR0FBSTtZQUNqRUYsT0FBT0MsUUFBUSxHQUFHO1FBQ3BCO1FBRUE3QixjQUFjNEI7UUFDZCxPQUFPRyxPQUFPQyxJQUFJLENBQUNKLFFBQVFkLE1BQU0sS0FBSztJQUN4QztJQUVBLE1BQU1tQixlQUFlLENBQUM1QjtRQUNwQkEsRUFBRVcsY0FBYztRQUNoQixJQUFJVyxnQkFBZ0I7WUFDbEJyQyxTQUFTSyxRQUFRRSxRQUFRcUM7UUFDM0I7SUFDRjtJQUVBLHFCQUNFLDhEQUFDQztRQUFJQyxXQUFVOzswQkFDYiw4REFBQ0M7Z0JBQUdELFdBQVU7MEJBQTRDMUM7Ozs7OzswQkFDMUQsOERBQUM0QztnQkFBS2hELFVBQVUyQztnQkFBY0csV0FBVTs7b0JBQ3JDNUMsNkJBQ0MsOERBQUMyQzt3QkFBSUMsV0FBVTs7MENBQ2IsOERBQUNHO2dDQUFNSCxXQUFXLDZCQUFnRixPQUFuRHJDLFdBQVdGLElBQUksR0FBRyxpQkFBaUIsaUJBQWdCOzBDQUFROzs7Ozs7MENBSTFHLDhEQUFDc0M7Z0NBQ0NDLFdBQVcsMkRBUVYsT0FQQ25DLGVBQ0ksOEJBQ0FKLE9BQ0UsaUNBQ0FFLFdBQVdGLElBQUksR0FDYiw2QkFDQTtnQ0FFVjJDLGFBQWF6QjtnQ0FDYjBCLGFBQWF2QjtnQ0FDYndCLFlBQVl2QjtnQ0FDWndCLFFBQVF2QjtnQ0FDUndCLFNBQVNwQjs7a0RBRVQsOERBQUNxQjt3Q0FDQ3JDLE1BQUs7d0NBQ0xzQyxJQUFHO3dDQUNIeEMsTUFBSzt3Q0FDTHlDLEtBQUs1Qzt3Q0FDTGlDLFdBQVU7d0NBQ1ZZLFFBQU87d0NBQ1BDLFVBQVVyQzt3Q0FDVnNDLFVBQVUxRDs7Ozs7O2tEQUdaLDhEQUFDMkM7d0NBQUlDLFdBQVU7a0RBQ1osQ0FBQ3ZDLHFCQUNBOzs4REFDRSw4REFBQ3NEO29EQUFJZixXQUFXLHFCQUF3RSxPQUFuRHJDLFdBQVdGLElBQUksR0FBRyxpQkFBaUI7b0RBQW1CdUQsUUFBTztvREFBZUMsTUFBSztvREFBT0MsU0FBUTtvREFBWUMsZUFBWTs4REFDM0osNEVBQUNDO3dEQUNDQyxHQUFFO3dEQUNGQyxhQUFZO3dEQUNaQyxlQUFjO3dEQUNkQyxnQkFBZTs7Ozs7Ozs7Ozs7OERBR25CLDhEQUFDQztvREFBRXpCLFdBQVU7OERBQ1ZuQyxlQUFlLHdCQUF3Qjs7Ozs7OzhEQUUxQyw4REFBQzREO29EQUFFekIsV0FBVTs4REFBNkI7Ozs7Ozs7eUVBSzVDLDhEQUFDRDs0Q0FBSUMsV0FBVTs7OERBQ2IsOERBQUNlO29EQUFJZixXQUFVO29EQUF5QmtCLFNBQVE7b0RBQVlELE1BQUs7OERBQy9ELDRFQUFDRzt3REFBS00sVUFBUzt3REFBVUwsR0FBRTt3REFBd0lNLFVBQVM7Ozs7Ozs7Ozs7OzhEQUU5Syw4REFBQzVCO29EQUFJQyxXQUFVOztzRUFDYiw4REFBQ3lCOzREQUFFekIsV0FBVTtzRUFBcUN2QyxLQUFLUyxJQUFJOzs7Ozs7c0VBQzNELDhEQUFDdUQ7NERBQUV6QixXQUFVOztnRUFBMEJ2QyxDQUFBQSxLQUFLbUUsSUFBSSxHQUFHLElBQUcsRUFBR0MsT0FBTyxDQUFDO2dFQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NEJBTzdFbEUsV0FBV0YsSUFBSSxrQkFDZCw4REFBQ2dFO2dDQUFFekIsV0FBVTswQ0FBeUNyQyxXQUFXRixJQUFJOzs7Ozs7Ozs7Ozs7a0NBSzNFLDhEQUFDc0M7d0JBQUlDLFdBQVU7OzBDQUNiLDhEQUFDRDs7a0RBQ0MsOERBQUNJO3dDQUFNMkIsU0FBUTt3Q0FBWTlCLFdBQVU7a0RBQStDOzs7Ozs7a0RBR3BGLDhEQUFDK0I7d0NBQ0NyQixJQUFHO3dDQUNIeEMsTUFBSzt3Q0FDTDhCLFdBQVU7d0NBQ1Y3QixPQUFPWixPQUFPeUUsU0FBUzt3Q0FDdkJuQixVQUFVN0M7OzBEQUVWLDhEQUFDaUU7Z0RBQU85RCxPQUFNOzBEQUFJOzs7Ozs7MERBQ2xCLDhEQUFDOEQ7Z0RBQU85RCxPQUFNOzBEQUFJOzs7Ozs7MERBQ2xCLDhEQUFDOEQ7Z0RBQU85RCxPQUFNOzBEQUFLOzs7Ozs7MERBQ25CLDhEQUFDOEQ7Z0RBQU85RCxPQUFNOzBEQUFJOzs7Ozs7Ozs7Ozs7Ozs7Ozs7MENBSXRCLDhEQUFDNEI7Z0NBQUlDLFdBQVU7O2tEQUNiLDhEQUFDUzt3Q0FDQ3JDLE1BQUs7d0NBQ0xzQyxJQUFHO3dDQUNIeEMsTUFBSzt3Q0FDTDhCLFdBQVU7d0NBQ1YxQixTQUFTZixPQUFPMkUsU0FBUzt3Q0FDekJyQixVQUFVN0M7Ozs7OztrREFFWiw4REFBQ21DO3dDQUFNMkIsU0FBUTt3Q0FBWTlCLFdBQVU7a0RBQW1DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBTTNFLENBQUM1Qyw2QkFDQSw4REFBQzJDO3dCQUFJQyxXQUFVOzswQ0FDYiw4REFBQ0c7Z0NBQU0yQixTQUFRO2dDQUFXOUIsV0FBVyw2QkFBb0YsT0FBdkRyQyxXQUFXOEIsUUFBUSxHQUFHLGlCQUFpQixpQkFBZ0I7MENBQVE7Ozs7OzswQ0FHakksOERBQUNnQjtnQ0FDQ3JDLE1BQUs7Z0NBQ0xzQyxJQUFHO2dDQUNIeEMsTUFBSztnQ0FDTDhCLFdBQVcsZ0JBQTZJckMsT0FBN0hBLFdBQVc4QixRQUFRLEdBQUcsNkJBQTZCLG1CQUFrQiwwREFBMEgsT0FBbEU5QixXQUFXOEIsUUFBUSxHQUFHLHVCQUF1QjtnQ0FDck0wQyxhQUFZO2dDQUNaaEUsT0FBT1osT0FBT2tDLFFBQVE7Z0NBQ3RCb0IsVUFBVTdDOzs7Ozs7NEJBRVhMLFdBQVc4QixRQUFRLGlCQUNsQiw4REFBQ2dDO2dDQUFFekIsV0FBVTswQ0FBeUNyQyxXQUFXOEIsUUFBUTs7Ozs7cURBRXpFLDhEQUFDZ0M7Z0NBQUV6QixXQUFVOzBDQUE2Qjs7Ozs7Ozs7Ozs7O2tDQU9oRCw4REFBQ0Q7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNvQzs0QkFDQ2hFLE1BQUs7NEJBQ0w0QixXQUFVOzRCQUNWcUMsVUFBVWhGO3NDQUVUQSwwQkFDQyw4REFBQzBDO2dDQUFJQyxXQUFVOztrREFDYiw4REFBQ3NDO3dDQUFLdEMsV0FBVTs7Ozs7O29DQUFpRDs7Ozs7O3VDQUdqRTVDLGNBQWMscUJBQXFCOzs7Ozs7Ozs7OztvQkFJMUN1QyxPQUFPQyxJQUFJLENBQUNqQyxZQUFZZSxNQUFNLEdBQUcsbUJBQ2hDLDhEQUFDcUI7d0JBQUlDLFdBQVU7a0NBQ2IsNEVBQUNEOzRCQUFJQyxXQUFVOzs4Q0FDYiw4REFBQ2U7b0NBQUlmLFdBQVU7b0NBQTRCaUIsTUFBSztvQ0FBT0QsUUFBTztvQ0FBZUUsU0FBUTtvQ0FBWXFCLE9BQU07OENBQ3JHLDRFQUFDbkI7d0NBQUtHLGVBQWM7d0NBQVFDLGdCQUFlO3dDQUFRRixhQUFZO3dDQUFJRCxHQUFFOzs7Ozs7Ozs7Ozs4Q0FFdkUsOERBQUNpQjtvQ0FBS3RDLFdBQVU7OENBQTJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU96RDtHQXhRd0IvQztLQUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL0ZsYXRGaWxlRm9ybS50c3g/ODU2YiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XHJcblxyXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgRmxhdEZpbGVDb25maWcgfSBmcm9tICdAL2xpYi9hcGknO1xyXG5cclxuaW50ZXJmYWNlIEZsYXRGaWxlRm9ybVByb3BzIHtcclxuICBvblN1Ym1pdDogKGNvbmZpZzogRmxhdEZpbGVDb25maWcsIGZpbGU/OiBGaWxlKSA9PiB2b2lkO1xyXG4gIGluaXRpYWxWYWx1ZXM6IEZsYXRGaWxlQ29uZmlnO1xyXG4gIHJlcXVpcmVGaWxlOiBib29sZWFuO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbjtcclxuICB0aXRsZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGbGF0RmlsZUZvcm0oe1xyXG4gIG9uU3VibWl0LFxyXG4gIGluaXRpYWxWYWx1ZXMsXHJcbiAgcmVxdWlyZUZpbGUsXHJcbiAgaXNMb2FkaW5nLFxyXG4gIHRpdGxlXHJcbn06IEZsYXRGaWxlRm9ybVByb3BzKSB7XHJcbiAgY29uc3QgW2NvbmZpZywgc2V0Q29uZmlnXSA9IHVzZVN0YXRlPEZsYXRGaWxlQ29uZmlnPihpbml0aWFsVmFsdWVzKTtcclxuICBjb25zdCBbZmlsZSwgc2V0RmlsZV0gPSB1c2VTdGF0ZTxGaWxlIHwgbnVsbD4obnVsbCk7XHJcbiAgY29uc3QgW3ZhbGlkYXRpb24sIHNldFZhbGlkYXRpb25dID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xyXG4gIGNvbnN0IFtpc0RyYWdBY3RpdmUsIHNldElzRHJhZ0FjdGl2ZV0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XHJcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xyXG5cclxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxTZWxlY3RFbGVtZW50PikgPT4ge1xyXG4gICAgY29uc3QgeyBuYW1lLCB2YWx1ZSwgdHlwZSB9ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIFxyXG4gICAgc2V0Q29uZmlnKHtcclxuICAgICAgLi4uY29uZmlnLFxyXG4gICAgICBbbmFtZV06IHR5cGUgPT09ICdjaGVja2JveCcgPyAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCA6IHZhbHVlXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDbGVhciB2YWxpZGF0aW9uIGVycm9yIHdoZW4gZmllbGQgaXMgdXBkYXRlZFxyXG4gICAgaWYgKHZhbGlkYXRpb25bbmFtZV0pIHtcclxuICAgICAgc2V0VmFsaWRhdGlvbihwcmV2ID0+ICh7IC4uLnByZXYsIFtuYW1lXTogJycgfSkpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcclxuICAgIGlmIChlLnRhcmdldC5maWxlcyAmJiBlLnRhcmdldC5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHNldEZpbGUoZS50YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgICBpZiAodmFsaWRhdGlvblsnZmlsZSddKSB7XHJcbiAgICAgICAgc2V0VmFsaWRhdGlvbihwcmV2ID0+ICh7IC4uLnByZXYsICdmaWxlJzogJycgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlRHJhZ0VudGVyID0gdXNlQ2FsbGJhY2soKGU6IFJlYWN0LkRyYWdFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBzZXRJc0RyYWdBY3RpdmUodHJ1ZSk7XHJcbiAgfSwgW10pO1xyXG5cclxuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSB1c2VDYWxsYmFjaygoZTogUmVhY3QuRHJhZ0V2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHNldElzRHJhZ0FjdGl2ZShmYWxzZSk7XHJcbiAgfSwgW10pO1xyXG5cclxuICBjb25zdCBoYW5kbGVEcmFnT3ZlciA9IHVzZUNhbGxiYWNrKChlOiBSZWFjdC5EcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH0sIFtdKTtcclxuXHJcbiAgY29uc3QgaGFuZGxlRHJvcCA9IHVzZUNhbGxiYWNrKChlOiBSZWFjdC5EcmFnRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgc2V0SXNEcmFnQWN0aXZlKGZhbHNlKTtcclxuICAgIFxyXG4gICAgaWYgKGUuZGF0YVRyYW5zZmVyLmZpbGVzICYmIGUuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZHJvcHBlZEZpbGUgPSBlLmRhdGFUcmFuc2Zlci5maWxlc1swXTtcclxuICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBpcyBDU1Ygb3IgVFhUXHJcbiAgICAgIGlmIChkcm9wcGVkRmlsZS5uYW1lLmVuZHNXaXRoKCcuY3N2JykgfHwgZHJvcHBlZEZpbGUubmFtZS5lbmRzV2l0aCgnLnR4dCcpKSB7XHJcbiAgICAgICAgc2V0RmlsZShkcm9wcGVkRmlsZSk7XHJcbiAgICAgICAgaWYgKHZhbGlkYXRpb25bJ2ZpbGUnXSkge1xyXG4gICAgICAgICAgc2V0VmFsaWRhdGlvbihwcmV2ID0+ICh7IC4uLnByZXYsICdmaWxlJzogJycgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZXRWYWxpZGF0aW9uKHByZXYgPT4gKHsgXHJcbiAgICAgICAgICAuLi5wcmV2LCBcclxuICAgICAgICAgICdmaWxlJzogJ09ubHkgQ1NWIGFuZCBUWFQgZmlsZXMgYXJlIHN1cHBvcnRlZCcgXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSwgW3ZhbGlkYXRpb25dKTtcclxuXHJcbiAgY29uc3Qgb3BlbkZpbGVTZWxlY3RvciA9ICgpID0+IHtcclxuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xyXG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC5jbGljaygpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHZhbGlkYXRlRm9ybSA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGVycm9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgXHJcbiAgICBpZiAocmVxdWlyZUZpbGUgJiYgIWZpbGUpIHtcclxuICAgICAgZXJyb3JzLmZpbGUgPSAnUGxlYXNlIHNlbGVjdCBhIGZpbGUgdG8gdXBsb2FkJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXJlcXVpcmVGaWxlICYmICghY29uZmlnLmZpbGVOYW1lIHx8ICFjb25maWcuZmlsZU5hbWUudHJpbSgpKSkge1xyXG4gICAgICBlcnJvcnMuZmlsZU5hbWUgPSAnRmlsZSBuYW1lIGlzIHJlcXVpcmVkIGZvciBleHBvcnQnO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzZXRWYWxpZGF0aW9uKGVycm9ycyk7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGggPT09IDA7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKHZhbGlkYXRlRm9ybSgpKSB7XHJcbiAgICAgIG9uU3VibWl0KGNvbmZpZywgZmlsZSB8fCB1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLXdoaXRlIHNoYWRvdy1sZyByb3VuZGVkLWxnIHAtNiBtYXgtdy14bCBteC1hdXRvIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBob3ZlcjpzaGFkb3cteGxcIj5cclxuICAgICAgPGgyIGNsYXNzTmFtZT1cInRleHQtMnhsIGZvbnQtc2VtaWJvbGQgbWItNiB0ZXh0LXByaW1hcnlcIj57dGl0bGV9PC9oMj5cclxuICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gY2xhc3NOYW1lPVwic3BhY2UteS02XCI+XHJcbiAgICAgICAge3JlcXVpcmVGaWxlICYmIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWItNlwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtgYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSAke3ZhbGlkYXRpb24uZmlsZSA/ICd0ZXh0LXJlZC02MDAnIDogJ3RleHQtZ3JheS03MDAnfSBtYi0yYH0+XHJcbiAgICAgICAgICAgICAgVXBsb2FkIEZpbGVcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYm9yZGVyLTIgYm9yZGVyLWRhc2hlZCByb3VuZGVkLWxnIHAtNiB0cmFuc2l0aW9uLWNvbG9ycyAke1xyXG4gICAgICAgICAgICAgICAgaXNEcmFnQWN0aXZlIFxyXG4gICAgICAgICAgICAgICAgICA/ICdib3JkZXItcHJpbWFyeSBiZy1ibHVlLTUwJyBcclxuICAgICAgICAgICAgICAgICAgOiBmaWxlIFxyXG4gICAgICAgICAgICAgICAgICAgID8gJ2JvcmRlci1ncmVlbi00MDAgYmctZ3JlZW4tNTAnIFxyXG4gICAgICAgICAgICAgICAgICAgIDogdmFsaWRhdGlvbi5maWxlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXJlZC0zMDAgYmctcmVkLTUwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLWdyYXktMzAwIGhvdmVyOmJvcmRlci1ncmF5LTQwMCdcclxuICAgICAgICAgICAgICB9YH1cclxuICAgICAgICAgICAgICBvbkRyYWdFbnRlcj17aGFuZGxlRHJhZ0VudGVyfVxyXG4gICAgICAgICAgICAgIG9uRHJhZ0xlYXZlPXtoYW5kbGVEcmFnTGVhdmV9XHJcbiAgICAgICAgICAgICAgb25EcmFnT3Zlcj17aGFuZGxlRHJhZ092ZXJ9XHJcbiAgICAgICAgICAgICAgb25Ecm9wPXtoYW5kbGVEcm9wfVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e29wZW5GaWxlU2VsZWN0b3J9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgICAgICAgIGlkPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICBhY2NlcHQ9XCIuY3N2LC50eHRcIlxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVDaGFuZ2V9XHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD17cmVxdWlyZUZpbGV9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICB7IWZpbGUgPyAoXHJcbiAgICAgICAgICAgICAgICAgIDw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzc05hbWU9e2BteC1hdXRvIGgtMTIgdy0xMiAke3ZhbGlkYXRpb24uZmlsZSA/ICd0ZXh0LXJlZC00MDAnIDogJ3RleHQtZ3JheS00MDAnfWB9IHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCA0OCA0OFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjggOEgxMmE0IDQgMCAwMC00IDR2MjBtMzItMTJ2OG0wIDB2OGE0IDQgMCAwMS00IDRIMTJhNCA0IDAgMDEtNC00di00bTMyLTRsLTMuMTcyLTMuMTcyYTQgNCAwIDAwLTUuNjU2IDBMMjggMjhNOCAzMmw5LjE3Mi05LjE3MmE0IDQgMCAwMTUuNjU2IDBMMjggMjhtMCAwbDQgNG00LTI0aDhtLTQtNHY4bS0xMiA0aC4wMlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD1cIjJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtZ3JheS02MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHtpc0RyYWdBY3RpdmUgPyAnRHJvcCB5b3VyIGZpbGUgaGVyZScgOiAnRHJhZyBhbmQgZHJvcCB5b3VyIGZpbGUgaGVyZSwgb3IgY2xpY2sgdG8gYnJvd3NlJ31cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXhzIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRlZCBmb3JtYXRzOiBDU1YsIFRYVFxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3NOYW1lPVwiaC04IHctOCB0ZXh0LWdyZWVuLTUwMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsUnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuNzA3LTkuMjkzYTEgMSAwIDAwLTEuNDE0LTEuNDE0TDkgMTAuNTg2IDcuNzA3IDkuMjkzYTEgMSAwIDAwLTEuNDE0IDEuNDE0bDIgMmExIDEgMCAwMDEuNDE0IDBsNC00elwiIGNsaXBSdWxlPVwiZXZlbm9kZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTkwMFwiPntmaWxlLm5hbWV9PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LWdyYXktNTAwXCI+eyhmaWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQiDigKIgQ2xpY2sgdG8gY2hhbmdlPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAge3ZhbGlkYXRpb24uZmlsZSAmJiAoXHJcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIHRleHQtcmVkLTYwMCBmb250LW1lZGl1bVwiPnt2YWxpZGF0aW9uLmZpbGV9PC9wPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0xIG1kOmdyaWQtY29scy0yIGdhcC00IG1iLTZcIj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiZGVsaW1pdGVyXCIgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIG1iLTFcIj5cclxuICAgICAgICAgICAgICBEZWxpbWl0ZXJcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdFxyXG4gICAgICAgICAgICAgIGlkPVwiZGVsaW1pdGVyXCJcclxuICAgICAgICAgICAgICBuYW1lPVwiZGVsaW1pdGVyXCJcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJibG9jayB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXItZ3JheS0zMDAgc2hhZG93LXNtIGZvY3VzOmJvcmRlci1wcmltYXJ5IGZvY3VzOnJpbmctcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgdmFsdWU9e2NvbmZpZy5kZWxpbWl0ZXJ9XHJcbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIsXCI+Q29tbWEgKCwpPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjtcIj5TZW1pY29sb24gKDspPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlxcdFwiPlRhYiAoXFx0KTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ8XCI+UGlwZSAofCk8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJoYXNIZWFkZXJcIlxyXG4gICAgICAgICAgICAgIG5hbWU9XCJoYXNIZWFkZXJcIlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNCB3LTQgdGV4dC1wcmltYXJ5IGZvY3VzOnJpbmctcHJpbWFyeSBib3JkZXItZ3JheS0zMDAgcm91bmRlZFwiXHJcbiAgICAgICAgICAgICAgY2hlY2tlZD17Y29uZmlnLmhhc0hlYWRlcn1cclxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImhhc0hlYWRlclwiIGNsYXNzTmFtZT1cIm1sLTIgYmxvY2sgdGV4dC1zbSB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgICAgRmlsZSBoYXMgaGVhZGVyIHJvd1xyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIHshcmVxdWlyZUZpbGUgJiYgKFxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPVwiZmlsZU5hbWVcIiBjbGFzc05hbWU9e2BibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtICR7dmFsaWRhdGlvbi5maWxlTmFtZSA/ICd0ZXh0LXJlZC02MDAnIDogJ3RleHQtZ3JheS03MDAnfSBtYi0xYH0+XHJcbiAgICAgICAgICAgICAgRXhwb3J0IEZpbGUgTmFtZVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgaWQ9XCJmaWxlTmFtZVwiXHJcbiAgICAgICAgICAgICAgbmFtZT1cImZpbGVOYW1lXCJcclxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BibG9jayB3LWZ1bGwgJHt2YWxpZGF0aW9uLmZpbGVOYW1lID8gJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC01MCcgOiAnYm9yZGVyLWdyYXktMzAwJ30gcm91bmRlZC1tZCBzaGFkb3ctc20gZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnJpbmctMiAke3ZhbGlkYXRpb24uZmlsZU5hbWUgPyAnZm9jdXM6cmluZy1yZWQtNTAwJyA6ICdmb2N1czpyaW5nLXByaW1hcnknfWB9XHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJleHBvcnQuY3N2XCJcclxuICAgICAgICAgICAgICB2YWx1ZT17Y29uZmlnLmZpbGVOYW1lfVxyXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIHt2YWxpZGF0aW9uLmZpbGVOYW1lID8gKFxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTEgdGV4dC1zbSB0ZXh0LXJlZC02MDAgZm9udC1tZWRpdW1cIj57dmFsaWRhdGlvbi5maWxlTmFtZX08L3A+XHJcbiAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMSB0ZXh0LXNtIHRleHQtZ3JheS01MDBcIj5cclxuICAgICAgICAgICAgICAgIExlYXZlIGVtcHR5IHRvIGdlbmVyYXRlIGF1dG9tYXRpY2FsbHkuXHJcbiAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICApfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGp1c3RpZnktZW5kXCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgcHgtNiBweS0yIHJvdW5kZWQtbWQgdGV4dC13aGl0ZSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9yc1wiXHJcbiAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtpc0xvYWRpbmcgPyAoXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibG9hZGluZyBsb2FkaW5nLXNwaW5uZXIgbG9hZGluZy1zbSBtci0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgUHJvY2Vzc2luZy4uLlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApIDogcmVxdWlyZUZpbGUgPyAnVXBsb2FkICYgUHJvY2VzcycgOiAnQ29udGludWUnfVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIHtPYmplY3Qua2V5cyh2YWxpZGF0aW9uKS5sZW5ndGggPiAwICYmIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBwLTMgYmctcmVkLTUwIGJvcmRlciBib3JkZXItcmVkLTIwMCByb3VuZGVkLW1kXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzTmFtZT1cImgtNSB3LTUgdGV4dC1yZWQtNTAwIG1yLTJcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2VMaW5lY2FwPVwicm91bmRcIiBzdHJva2VMaW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlV2lkdGg9XCIyXCIgZD1cIk0xMiA4djRtMCA0aC4wMU0yMSAxMmE5IDkgMCAxMS0xOCAwIDkgOSAwIDAxMTggMHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1yZWQtNjAwIGZvbnQtbWVkaXVtXCI+UGxlYXNlIGZpeCB0aGUgZXJyb3JzIGJlZm9yZSBjb250aW51aW5nPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn0gIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlUmVmIiwidXNlQ2FsbGJhY2siLCJGbGF0RmlsZUZvcm0iLCJvblN1Ym1pdCIsImluaXRpYWxWYWx1ZXMiLCJyZXF1aXJlRmlsZSIsImlzTG9hZGluZyIsInRpdGxlIiwiY29uZmlnIiwic2V0Q29uZmlnIiwiZmlsZSIsInNldEZpbGUiLCJ2YWxpZGF0aW9uIiwic2V0VmFsaWRhdGlvbiIsImlzRHJhZ0FjdGl2ZSIsInNldElzRHJhZ0FjdGl2ZSIsImZpbGVJbnB1dFJlZiIsImhhbmRsZUNoYW5nZSIsImUiLCJuYW1lIiwidmFsdWUiLCJ0eXBlIiwidGFyZ2V0IiwiY2hlY2tlZCIsInByZXYiLCJoYW5kbGVGaWxlQ2hhbmdlIiwiZmlsZXMiLCJsZW5ndGgiLCJoYW5kbGVEcmFnRW50ZXIiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZURyYWdMZWF2ZSIsImhhbmRsZURyYWdPdmVyIiwiaGFuZGxlRHJvcCIsImRhdGFUcmFuc2ZlciIsImRyb3BwZWRGaWxlIiwiZW5kc1dpdGgiLCJvcGVuRmlsZVNlbGVjdG9yIiwiY3VycmVudCIsImNsaWNrIiwidmFsaWRhdGVGb3JtIiwiZXJyb3JzIiwiZmlsZU5hbWUiLCJ0cmltIiwiT2JqZWN0Iiwia2V5cyIsImhhbmRsZVN1Ym1pdCIsInVuZGVmaW5lZCIsImRpdiIsImNsYXNzTmFtZSIsImgyIiwiZm9ybSIsImxhYmVsIiwib25EcmFnRW50ZXIiLCJvbkRyYWdMZWF2ZSIsIm9uRHJhZ092ZXIiLCJvbkRyb3AiLCJvbkNsaWNrIiwiaW5wdXQiLCJpZCIsInJlZiIsImFjY2VwdCIsIm9uQ2hhbmdlIiwicmVxdWlyZWQiLCJzdmciLCJzdHJva2UiLCJmaWxsIiwidmlld0JveCIsImFyaWEtaGlkZGVuIiwicGF0aCIsImQiLCJzdHJva2VXaWR0aCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInAiLCJmaWxsUnVsZSIsImNsaXBSdWxlIiwic2l6ZSIsInRvRml4ZWQiLCJodG1sRm9yIiwic2VsZWN0IiwiZGVsaW1pdGVyIiwib3B0aW9uIiwiaGFzSGVhZGVyIiwicGxhY2Vob2xkZXIiLCJidXR0b24iLCJkaXNhYmxlZCIsInNwYW4iLCJ4bWxucyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/FlatFileForm.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/app/page.7fa58435b2b3c498.hot-update.js b/frontend/.next/static/webpack/app/page.7fa58435b2b3c498.hot-update.js new file mode 100644 index 000000000..ec1321163 --- /dev/null +++ b/frontend/.next/static/webpack/app/page.7fa58435b2b3c498.hot-update.js @@ -0,0 +1,22 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("app/page",{ + +/***/ "(app-pages-browser)/./app/page.tsx": +/*!**********************!*\ + !*** ./app/page.tsx ***! + \**********************/ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ Home; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components_ClickHouseForm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ClickHouseForm */ \"(app-pages-browser)/./components/ClickHouseForm.tsx\");\n/* harmony import */ var _components_FlatFileForm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/FlatFileForm */ \"(app-pages-browser)/./components/FlatFileForm.tsx\");\n/* harmony import */ var _components_TableSelection__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/TableSelection */ \"(app-pages-browser)/./components/TableSelection.tsx\");\n/* harmony import */ var _components_DataPreview__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/DataPreview */ \"(app-pages-browser)/./components/DataPreview.tsx\");\n/* harmony import */ var _components_IngestionResults__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/IngestionResults */ \"(app-pages-browser)/./components/IngestionResults.tsx\");\n/* harmony import */ var _components_StatusIndicator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/components/StatusIndicator */ \"(app-pages-browser)/./components/StatusIndicator.tsx\");\n/* harmony import */ var _lib_api__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/lib/api */ \"(app-pages-browser)/./lib/api.ts\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\n\n\nvar Step;\n// Step enum\n(function(Step) {\n Step[Step[\"SourceSelection\"] = 1] = \"SourceSelection\";\n Step[Step[\"SourceConfiguration\"] = 2] = \"SourceConfiguration\";\n Step[Step[\"TargetConfiguration\"] = 3] = \"TargetConfiguration\";\n Step[Step[\"SchemaSelection\"] = 4] = \"SchemaSelection\";\n Step[Step[\"Preview\"] = 5] = \"Preview\";\n Step[Step[\"Results\"] = 6] = \"Results\";\n})(Step || (Step = {}));\nfunction Home() {\n _s();\n // State\n const [currentStep, setCurrentStep] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(1);\n const [source, setSource] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [target, setTarget] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [clickHouseConfig, setClickHouseConfig] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n host: \"\",\n port: 8123,\n database: \"\",\n user: \"\",\n jwtToken: \"\",\n secure: false\n });\n const [flatFileConfig, setFlatFileConfig] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({\n delimiter: \",\",\n hasHeader: true,\n filePath: \"\",\n fileName: \"\"\n });\n const [tables, setTables] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [joinCondition, setJoinCondition] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [useJoin, setUseJoin] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [previewData, setPreviewData] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [isLoading, setIsLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [ingestionResults, setIngestionResults] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [status, setStatus] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"idle\");\n const [statusMessage, setStatusMessage] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n // Effect to track status changes\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(()=>{\n if (isLoading) {\n if (currentStep === 2 || currentStep === 3) {\n setStatus(\"connecting\");\n setStatusMessage(\"Connecting to the data source...\");\n } else if (currentStep === 4) {\n setStatus(\"fetching\");\n setStatusMessage(\"Fetching schema information...\");\n } else if (currentStep === 5) {\n setStatus(\"fetching\");\n setStatusMessage(\"Generating data preview...\");\n } else if (currentStep === 6) {\n setStatus(\"ingesting\");\n setStatusMessage(\"Ingesting data between sources...\");\n }\n } else if (error) {\n setStatus(\"error\");\n setStatusMessage(error);\n } else if (currentStep === 6 && ingestionResults) {\n setStatus(\"completed\");\n setStatusMessage(ingestionResults.message || \"Operation completed successfully\");\n } else {\n setStatus(\"idle\");\n setStatusMessage(\"\");\n }\n }, [\n isLoading,\n error,\n currentStep,\n ingestionResults\n ]);\n // Handlers\n const handleSourceSelection = (selectedSource)=>{\n setSource(selectedSource);\n setTarget(selectedSource === \"clickhouse\" ? \"flatfile\" : \"clickhouse\");\n setCurrentStep(2);\n };\n const handleClickHouseConfigSubmit = async (config)=>{\n try {\n setIsLoading(true);\n setError(\"\");\n // Test connection\n const testResult = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].testClickHouseConnection(config);\n if (!testResult.success) {\n throw new Error(testResult.message);\n }\n // Save config\n setClickHouseConfig(config);\n // If ClickHouse is the source, fetch tables\n if (source === \"clickhouse\") {\n const tables = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getClickHouseTables(config);\n setTables(tables);\n setCurrentStep(4);\n } else {\n // ClickHouse is the target\n setCurrentStep(3);\n }\n } catch (err) {\n setError(err.message || \"Failed to connect to ClickHouse\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleFlatFileConfigSubmit = async (config, file)=>{\n try {\n setIsLoading(true);\n setError(\"\");\n // If file upload is required (when flat file is the source)\n if (source === \"flatfile\" && file) {\n const uploadResult = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].uploadFile(file, config.delimiter, config.hasHeader);\n if (!uploadResult.success) {\n throw new Error(uploadResult.message);\n }\n // Set config with file path\n setFlatFileConfig({\n ...config,\n filePath: uploadResult.filePath\n });\n // Set schema information\n setTables([\n uploadResult.schema\n ]);\n setCurrentStep(4);\n } else {\n // Just store the config (flat file is the target)\n setFlatFileConfig(config);\n setCurrentStep(source === \"clickhouse\" ? 4 : 3);\n }\n } catch (err) {\n setError(err.message || \"Failed to process flat file\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleTableSelection = (selectedTables, useJoinOption, joinConditionText)=>{\n setTables(selectedTables);\n setUseJoin(useJoinOption);\n setJoinCondition(joinConditionText);\n setCurrentStep(5);\n // Generate a preview\n generatePreview(selectedTables, useJoinOption, joinConditionText);\n };\n const generatePreview = async (selectedTables, useJoinOption, joinConditionText)=>{\n try {\n setIsLoading(true);\n setError(\"\");\n const request = {\n source: source,\n target: target,\n clickHouseConfig: source === \"clickhouse\" ? clickHouseConfig : target === \"clickhouse\" ? clickHouseConfig : undefined,\n flatFileConfig: source === \"flatfile\" ? flatFileConfig : target === \"flatfile\" ? flatFileConfig : undefined,\n tables: selectedTables,\n joinCondition: joinConditionText,\n useJoin: useJoinOption\n };\n const previewResult = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].previewData(request);\n if (!previewResult.success) {\n throw new Error(previewResult.message);\n }\n setPreviewData(previewResult.data);\n } catch (err) {\n setError(err.message || \"Failed to generate preview\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleStartIngestion = async ()=>{\n try {\n setIsLoading(true);\n setError(\"\");\n const request = {\n source: source,\n target: target,\n clickHouseConfig: source === \"clickhouse\" ? clickHouseConfig : target === \"clickhouse\" ? clickHouseConfig : undefined,\n flatFileConfig: source === \"flatfile\" ? flatFileConfig : target === \"flatfile\" ? flatFileConfig : undefined,\n tables,\n joinCondition,\n useJoin\n };\n const response = await _lib_api__WEBPACK_IMPORTED_MODULE_8__[\"default\"].ingestData(request);\n setIngestionResults(response);\n setCurrentStep(6);\n } catch (err) {\n setError(err.message || \"Ingestion failed\");\n } finally{\n setIsLoading(false);\n }\n };\n const handleReset = ()=>{\n setCurrentStep(1);\n setSource(\"\");\n setTarget(\"\");\n setTables([]);\n setJoinCondition(\"\");\n setUseJoin(false);\n setPreviewData([]);\n setIngestionResults(null);\n setError(\"\");\n };\n // Helper functions for the UI\n const getStepName = (step)=>{\n switch(step){\n case 1:\n return \"Source Selection\";\n case 2:\n return \"Source Config\";\n case 3:\n return \"Target Config\";\n case 4:\n return \"Column Selection\";\n case 5:\n return \"Preview\";\n case 6:\n return \"Results\";\n default:\n return \"\";\n }\n };\n // Function to check if a step is accessible for navigation\n const canNavigateToStep = (step)=>{\n // Always allow going to initial step\n if (step === 1) return true;\n // Don't allow going back to completed steps after results\n if (currentStep === 6) return false;\n // Only allow going to steps that have been completed or are the current one\n if (step <= currentStep) return true;\n return false;\n };\n // Function to handle step navigation when clicking on the progress indicator\n const handleStepClick = (step)=>{\n if (!canNavigateToStep(step)) return;\n // If loading, don't allow navigation\n if (isLoading) return;\n setCurrentStep(step);\n };\n // Render different steps\n const renderStep = ()=>{\n switch(currentStep){\n case 1:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"card\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h2\", {\n className: \"text-xl font-semibold mb-6\",\n children: \"Select Data Source and Target\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 267,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col space-y-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-2 gap-6\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"btn \".concat(source === \"clickhouse\" ? \"btn-primary\" : \"btn-secondary\", \" p-6 text-center transition-all transform hover:scale-105\"),\n onClick: ()=>handleSourceSelection(\"clickhouse\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center mb-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-10 w-10\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 276,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 275,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 274,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium\",\n children: \"ClickHouse to Flat File\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 279,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm opacity-90\",\n children: \"Export data from ClickHouse database to a flat file (CSV)\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 280,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 270,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n className: \"btn \".concat(source === \"flatfile\" ? \"btn-primary\" : \"btn-secondary\", \" p-6 text-center transition-all transform hover:scale-105\"),\n onClick: ()=>handleSourceSelection(\"flatfile\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center mb-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n className: \"h-10 w-10\",\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 288,\n columnNumber: 23\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 287,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 286,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h3\", {\n className: \"text-lg font-medium\",\n children: \"Flat File to ClickHouse\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 291,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"mt-2 text-sm opacity-90\",\n children: \"Import data from a flat file (CSV) to ClickHouse database\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 292,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 282,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 269,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 268,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 266,\n columnNumber: 11\n }, this);\n case 2:\n return source === \"clickhouse\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ClickHouseForm__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onSubmit: handleClickHouseConfigSubmit,\n initialValues: clickHouseConfig,\n isLoading: isLoading,\n title: \"ClickHouse Source Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 301,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_FlatFileForm__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onSubmit: handleFlatFileConfigSubmit,\n initialValues: flatFileConfig,\n requireFile: true,\n isLoading: isLoading,\n title: \"Flat File Source Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 308,\n columnNumber: 11\n }, this);\n case 3:\n return target === \"clickhouse\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ClickHouseForm__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n onSubmit: handleClickHouseConfigSubmit,\n initialValues: clickHouseConfig,\n isLoading: isLoading,\n title: \"ClickHouse Target Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 319,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_FlatFileForm__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onSubmit: handleFlatFileConfigSubmit,\n initialValues: flatFileConfig,\n requireFile: false,\n isLoading: isLoading,\n title: \"Flat File Target Configuration\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 326,\n columnNumber: 11\n }, this);\n case 4:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_TableSelection__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n tables: tables,\n onSubmit: handleTableSelection,\n isMultiTableEnabled: source === \"clickhouse\",\n isLoading: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 337,\n columnNumber: 11\n }, this);\n case 5:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_DataPreview__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n data: previewData,\n onStartIngestion: handleStartIngestion,\n onBack: ()=>setCurrentStep(4),\n isLoading: isLoading\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 347,\n columnNumber: 11\n }, this);\n case 6:\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_IngestionResults__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n results: ingestionResults,\n onReset: handleReset\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 357,\n columnNumber: 11\n }, this);\n default:\n return null;\n }\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"ol\", {\n className: \"flex items-center justify-center w-full\",\n children: Object.values(Step).filter((step)=>typeof step === \"number\").map((step)=>{\n const isNavigable = canNavigateToStep(step);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"li\", {\n className: \"flex items-center \".concat(currentStep >= step ? \"text-primary\" : \"text-gray-400\"),\n onClick: ()=>handleStepClick(step),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col items-center \".concat(isNavigable ? \"cursor-pointer hover:opacity-80\" : \"\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"flex items-center justify-center w-10 h-10 rounded-full \".concat(currentStep > step ? \"bg-primary text-white\" : currentStep === step ? \"bg-primary text-white ring-4 ring-blue-100\" : \"bg-gray-200\"),\n children: step\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 382,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs mt-1\",\n children: getStepName(step)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 389,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 381,\n columnNumber: 17\n }, this),\n step < Object.keys(Step).length / 2 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-16 h-1 mx-2 \".concat(currentStep > step ? \"bg-primary\" : \"bg-gray-200\")\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 392,\n columnNumber: 19\n }, this)\n ]\n }, step, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 376,\n columnNumber: 15\n }, this);\n })\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 372,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 371,\n columnNumber: 7\n }, this),\n (status !== \"idle\" || error) && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_StatusIndicator__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n status: status,\n message: statusMessage\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 402,\n columnNumber: 9\n }, this),\n renderStep()\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\HARSHIT BAGGA\\\\Desktop\\\\ZeoTap2.0\\\\frontend\\\\app\\\\page.tsx\",\n lineNumber: 369,\n columnNumber: 5\n }, this);\n}\n_s(Home, \"1YAHeoQoOxxhtMLvb4mWoq9VlR0=\");\n_c = Home;\nvar _c;\n$RefreshReg$(_c, \"Home\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBRTRDO0FBQ2E7QUFDSjtBQUNJO0FBQ047QUFDVTtBQUNGO0FBQ3VEOztBQUVsSCxZQUFZO1VBQ1BTOzs7Ozs7O0dBQUFBLFNBQUFBO0FBU1UsU0FBU0M7O0lBQ3RCLFFBQVE7SUFDUixNQUFNLENBQUNDLGFBQWFDLGVBQWUsR0FBR1osK0NBQVFBO0lBQzlDLE1BQU0sQ0FBQ2EsUUFBUUMsVUFBVSxHQUFHZCwrQ0FBUUEsQ0FBaUM7SUFDckUsTUFBTSxDQUFDZSxRQUFRQyxVQUFVLEdBQUdoQiwrQ0FBUUEsQ0FBaUM7SUFDckUsTUFBTSxDQUFDaUIsa0JBQWtCQyxvQkFBb0IsR0FBR2xCLCtDQUFRQSxDQUFtQjtRQUN6RW1CLE1BQU07UUFDTkMsTUFBTTtRQUNOQyxVQUFVO1FBQ1ZDLE1BQU07UUFDTkMsVUFBVTtRQUNWQyxRQUFRO0lBQ1Y7SUFDQSxNQUFNLENBQUNDLGdCQUFnQkMsa0JBQWtCLEdBQUcxQiwrQ0FBUUEsQ0FBaUI7UUFDbkUyQixXQUFXO1FBQ1hDLFdBQVc7UUFDWEMsVUFBVTtRQUNWQyxVQUFVO0lBQ1o7SUFDQSxNQUFNLENBQUNDLFFBQVFDLFVBQVUsR0FBR2hDLCtDQUFRQSxDQUFjLEVBQUU7SUFDcEQsTUFBTSxDQUFDaUMsZUFBZUMsaUJBQWlCLEdBQUdsQywrQ0FBUUEsQ0FBUztJQUMzRCxNQUFNLENBQUNtQyxTQUFTQyxXQUFXLEdBQUdwQywrQ0FBUUEsQ0FBVTtJQUNoRCxNQUFNLENBQUNxQyxhQUFhQyxlQUFlLEdBQUd0QywrQ0FBUUEsQ0FBYSxFQUFFO0lBQzdELE1BQU0sQ0FBQ3VDLFdBQVdDLGFBQWEsR0FBR3hDLCtDQUFRQSxDQUFVO0lBQ3BELE1BQU0sQ0FBQ3lDLE9BQU9DLFNBQVMsR0FBRzFDLCtDQUFRQSxDQUFTO0lBQzNDLE1BQU0sQ0FBQzJDLGtCQUFrQkMsb0JBQW9CLEdBQUc1QywrQ0FBUUEsQ0FBMkI7SUFDbkYsTUFBTSxDQUFDNkMsUUFBUUMsVUFBVSxHQUFHOUMsK0NBQVFBLENBQTJFO0lBQy9HLE1BQU0sQ0FBQytDLGVBQWVDLGlCQUFpQixHQUFHaEQsK0NBQVFBLENBQVM7SUFFM0QsaUNBQWlDO0lBQ2pDQyxnREFBU0EsQ0FBQztRQUNSLElBQUlzQyxXQUFXO1lBQ2IsSUFBSTVCLHFCQUE0Q0EsbUJBQTBDO2dCQUN4Rm1DLFVBQVU7Z0JBQ1ZFLGlCQUFpQjtZQUNuQixPQUFPLElBQUlyQyxtQkFBc0M7Z0JBQy9DbUMsVUFBVTtnQkFDVkUsaUJBQWlCO1lBQ25CLE9BQU8sSUFBSXJDLG1CQUE4QjtnQkFDdkNtQyxVQUFVO2dCQUNWRSxpQkFBaUI7WUFDbkIsT0FBTyxJQUFJckMsbUJBQThCO2dCQUN2Q21DLFVBQVU7Z0JBQ1ZFLGlCQUFpQjtZQUNuQjtRQUNGLE9BQU8sSUFBSVAsT0FBTztZQUNoQkssVUFBVTtZQUNWRSxpQkFBaUJQO1FBQ25CLE9BQU8sSUFBSTlCLHFCQUFnQ2dDLGtCQUFrQjtZQUMzREcsVUFBVTtZQUNWRSxpQkFBaUJMLGlCQUFpQk0sT0FBTyxJQUFJO1FBQy9DLE9BQU87WUFDTEgsVUFBVTtZQUNWRSxpQkFBaUI7UUFDbkI7SUFDRixHQUFHO1FBQUNUO1FBQVdFO1FBQU85QjtRQUFhZ0M7S0FBaUI7SUFFcEQsV0FBVztJQUNYLE1BQU1PLHdCQUF3QixDQUFDQztRQUM3QnJDLFVBQVVxQztRQUNWbkMsVUFBVW1DLG1CQUFtQixlQUFlLGFBQWE7UUFDekR2QztJQUNGO0lBRUEsTUFBTXdDLCtCQUErQixPQUFPQztRQUMxQyxJQUFJO1lBQ0ZiLGFBQWE7WUFDYkUsU0FBUztZQUVULGtCQUFrQjtZQUNsQixNQUFNWSxhQUFhLE1BQU05QyxnREFBR0EsQ0FBQytDLHdCQUF3QixDQUFDRjtZQUN0RCxJQUFJLENBQUNDLFdBQVdFLE9BQU8sRUFBRTtnQkFDdkIsTUFBTSxJQUFJQyxNQUFNSCxXQUFXTCxPQUFPO1lBQ3BDO1lBRUEsY0FBYztZQUNkL0Isb0JBQW9CbUM7WUFFcEIsNENBQTRDO1lBQzVDLElBQUl4QyxXQUFXLGNBQWM7Z0JBQzNCLE1BQU1rQixTQUFTLE1BQU12QixnREFBR0EsQ0FBQ2tELG1CQUFtQixDQUFDTDtnQkFDN0NyQixVQUFVRDtnQkFDVm5CO1lBQ0YsT0FBTztnQkFDTCwyQkFBMkI7Z0JBQzNCQTtZQUNGO1FBQ0YsRUFBRSxPQUFPK0MsS0FBVTtZQUNqQmpCLFNBQVNpQixJQUFJVixPQUFPLElBQUk7UUFDMUIsU0FBVTtZQUNSVCxhQUFhO1FBQ2Y7SUFDRjtJQUVBLE1BQU1vQiw2QkFBNkIsT0FBT1AsUUFBd0JRO1FBQ2hFLElBQUk7WUFDRnJCLGFBQWE7WUFDYkUsU0FBUztZQUVULDREQUE0RDtZQUM1RCxJQUFJN0IsV0FBVyxjQUFjZ0QsTUFBTTtnQkFDakMsTUFBTUMsZUFBZSxNQUFNdEQsZ0RBQUdBLENBQUN1RCxVQUFVLENBQUNGLE1BQU1SLE9BQU8xQixTQUFTLEVBQUUwQixPQUFPekIsU0FBUztnQkFDbEYsSUFBSSxDQUFDa0MsYUFBYU4sT0FBTyxFQUFFO29CQUN6QixNQUFNLElBQUlDLE1BQU1LLGFBQWFiLE9BQU87Z0JBQ3RDO2dCQUVBLDRCQUE0QjtnQkFDNUJ2QixrQkFBa0I7b0JBQ2hCLEdBQUcyQixNQUFNO29CQUNUeEIsVUFBVWlDLGFBQWFqQyxRQUFRO2dCQUNqQztnQkFFQSx5QkFBeUI7Z0JBQ3pCRyxVQUFVO29CQUFDOEIsYUFBYUUsTUFBTTtpQkFBQztnQkFDL0JwRDtZQUNGLE9BQU87Z0JBQ0wsa0RBQWtEO2dCQUNsRGMsa0JBQWtCMkI7Z0JBQ2xCekMsZUFBZUMsV0FBVztZQUM1QjtRQUNGLEVBQUUsT0FBTzhDLEtBQVU7WUFDakJqQixTQUFTaUIsSUFBSVYsT0FBTyxJQUFJO1FBQzFCLFNBQVU7WUFDUlQsYUFBYTtRQUNmO0lBQ0Y7SUFFQSxNQUFNeUIsdUJBQXVCLENBQUNDLGdCQUE2QkMsZUFBd0JDO1FBQ2pGcEMsVUFBVWtDO1FBQ1Y5QixXQUFXK0I7UUFDWGpDLGlCQUFpQmtDO1FBQ2pCeEQ7UUFFQSxxQkFBcUI7UUFDckJ5RCxnQkFBZ0JILGdCQUFnQkMsZUFBZUM7SUFDakQ7SUFFQSxNQUFNQyxrQkFBa0IsT0FBT0gsZ0JBQTZCQyxlQUF3QkM7UUFDbEYsSUFBSTtZQUNGNUIsYUFBYTtZQUNiRSxTQUFTO1lBRVQsTUFBTTRCLFVBQTRCO2dCQUNoQ3pELFFBQVFBO2dCQUNSRSxRQUFRQTtnQkFDUkUsa0JBQWtCSixXQUFXLGVBQWVJLG1CQUFtQkYsV0FBVyxlQUFlRSxtQkFBbUJzRDtnQkFDNUc5QyxnQkFBZ0JaLFdBQVcsYUFBYVksaUJBQWlCVixXQUFXLGFBQWFVLGlCQUFpQjhDO2dCQUNsR3hDLFFBQVFtQztnQkFDUmpDLGVBQWVtQztnQkFDZmpDLFNBQVNnQztZQUNYO1lBRUEsTUFBTUssZ0JBQWdCLE1BQU1oRSxnREFBR0EsQ0FBQzZCLFdBQVcsQ0FBQ2lDO1lBQzVDLElBQUksQ0FBQ0UsY0FBY2hCLE9BQU8sRUFBRTtnQkFDMUIsTUFBTSxJQUFJQyxNQUFNZSxjQUFjdkIsT0FBTztZQUN2QztZQUVBWCxlQUFla0MsY0FBY0MsSUFBSTtRQUNuQyxFQUFFLE9BQU9kLEtBQVU7WUFDakJqQixTQUFTaUIsSUFBSVYsT0FBTyxJQUFJO1FBQzFCLFNBQVU7WUFDUlQsYUFBYTtRQUNmO0lBQ0Y7SUFFQSxNQUFNa0MsdUJBQXVCO1FBQzNCLElBQUk7WUFDRmxDLGFBQWE7WUFDYkUsU0FBUztZQUVULE1BQU00QixVQUE0QjtnQkFDaEN6RCxRQUFRQTtnQkFDUkUsUUFBUUE7Z0JBQ1JFLGtCQUFrQkosV0FBVyxlQUFlSSxtQkFBbUJGLFdBQVcsZUFBZUUsbUJBQW1Cc0Q7Z0JBQzVHOUMsZ0JBQWdCWixXQUFXLGFBQWFZLGlCQUFpQlYsV0FBVyxhQUFhVSxpQkFBaUI4QztnQkFDbEd4QztnQkFDQUU7Z0JBQ0FFO1lBQ0Y7WUFFQSxNQUFNd0MsV0FBVyxNQUFNbkUsZ0RBQUdBLENBQUNvRSxVQUFVLENBQUNOO1lBQ3RDMUIsb0JBQW9CK0I7WUFDcEIvRDtRQUNGLEVBQUUsT0FBTytDLEtBQVU7WUFDakJqQixTQUFTaUIsSUFBSVYsT0FBTyxJQUFJO1FBQzFCLFNBQVU7WUFDUlQsYUFBYTtRQUNmO0lBQ0Y7SUFFQSxNQUFNcUMsY0FBYztRQUNsQmpFO1FBQ0FFLFVBQVU7UUFDVkUsVUFBVTtRQUNWZ0IsVUFBVSxFQUFFO1FBQ1pFLGlCQUFpQjtRQUNqQkUsV0FBVztRQUNYRSxlQUFlLEVBQUU7UUFDakJNLG9CQUFvQjtRQUNwQkYsU0FBUztJQUNYO0lBRUEsOEJBQThCO0lBQzlCLE1BQU1vQyxjQUFjLENBQUNDO1FBQ25CLE9BQVFBO1lBQ047Z0JBQTJCLE9BQU87WUFDbEM7Z0JBQStCLE9BQU87WUFDdEM7Z0JBQStCLE9BQU87WUFDdEM7Z0JBQTJCLE9BQU87WUFDbEM7Z0JBQW1CLE9BQU87WUFDMUI7Z0JBQW1CLE9BQU87WUFDMUI7Z0JBQVMsT0FBTztRQUNsQjtJQUNGO0lBRUEsMkRBQTJEO0lBQzNELE1BQU1DLG9CQUFvQixDQUFDRDtRQUN6QixxQ0FBcUM7UUFDckMsSUFBSUEsWUFBK0IsT0FBTztRQUUxQywwREFBMEQ7UUFDMUQsSUFBSXBFLG1CQUE4QixPQUFPO1FBRXpDLDRFQUE0RTtRQUM1RSxJQUFJb0UsUUFBUXBFLGFBQWEsT0FBTztRQUVoQyxPQUFPO0lBQ1Q7SUFFQSw2RUFBNkU7SUFDN0UsTUFBTXNFLGtCQUFrQixDQUFDRjtRQUN2QixJQUFJLENBQUNDLGtCQUFrQkQsT0FBTztRQUU5QixxQ0FBcUM7UUFDckMsSUFBSXhDLFdBQVc7UUFFZjNCLGVBQWVtRTtJQUNqQjtJQUVBLHlCQUF5QjtJQUN6QixNQUFNRyxhQUFhO1FBQ2pCLE9BQVF2RTtZQUNOO2dCQUNFLHFCQUNFLDhEQUFDd0U7b0JBQUlDLFdBQVU7O3NDQUNiLDhEQUFDQzs0QkFBR0QsV0FBVTtzQ0FBNkI7Ozs7OztzQ0FDM0MsOERBQUNEOzRCQUFJQyxXQUFVO3NDQUNiLDRFQUFDRDtnQ0FBSUMsV0FBVTs7a0RBQ2IsOERBQUNFO3dDQUNDRixXQUFXLE9BQWlFLE9BQTFEdkUsV0FBVyxlQUFlLGdCQUFnQixpQkFBZ0I7d0NBQzVFMEUsU0FBUyxJQUFNckMsc0JBQXNCOzswREFFckMsOERBQUNpQztnREFBSUMsV0FBVTswREFDYiw0RUFBQ0k7b0RBQUlDLE9BQU07b0RBQTZCTCxXQUFVO29EQUFZTSxNQUFLO29EQUFPQyxTQUFRO29EQUFZQyxRQUFPOzhEQUNuRyw0RUFBQ0M7d0RBQUtDLGVBQWM7d0RBQVFDLGdCQUFlO3dEQUFRQyxhQUFhO3dEQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzBEQUd6RSw4REFBQ0M7Z0RBQUdkLFdBQVU7MERBQXNCOzs7Ozs7MERBQ3BDLDhEQUFDZTtnREFBRWYsV0FBVTswREFBMEI7Ozs7Ozs7Ozs7OztrREFFekMsOERBQUNFO3dDQUNDRixXQUFXLE9BQStELE9BQXhEdkUsV0FBVyxhQUFhLGdCQUFnQixpQkFBZ0I7d0NBQzFFMEUsU0FBUyxJQUFNckMsc0JBQXNCOzswREFFckMsOERBQUNpQztnREFBSUMsV0FBVTswREFDYiw0RUFBQ0k7b0RBQUlDLE9BQU07b0RBQTZCTCxXQUFVO29EQUFZTSxNQUFLO29EQUFPQyxTQUFRO29EQUFZQyxRQUFPOzhEQUNuRyw0RUFBQ0M7d0RBQUtDLGVBQWM7d0RBQVFDLGdCQUFlO3dEQUFRQyxhQUFhO3dEQUFHQyxHQUFFOzs7Ozs7Ozs7Ozs7Ozs7OzBEQUd6RSw4REFBQ0M7Z0RBQUdkLFdBQVU7MERBQXNCOzs7Ozs7MERBQ3BDLDhEQUFDZTtnREFBRWYsV0FBVTswREFBMEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBT25EO2dCQUNFLE9BQU92RSxXQUFXLDZCQUNoQiw4REFBQ1gsa0VBQWNBO29CQUNia0csVUFBVWhEO29CQUNWaUQsZUFBZXBGO29CQUNmc0IsV0FBV0E7b0JBQ1grRCxPQUFNOzs7Ozt5Q0FHUiw4REFBQ25HLGdFQUFZQTtvQkFDWGlHLFVBQVV4QztvQkFDVnlDLGVBQWU1RTtvQkFDZjhFLGFBQWE7b0JBQ2JoRSxXQUFXQTtvQkFDWCtELE9BQU07Ozs7OztZQUlaO2dCQUNFLE9BQU92RixXQUFXLDZCQUNoQiw4REFBQ2Isa0VBQWNBO29CQUNia0csVUFBVWhEO29CQUNWaUQsZUFBZXBGO29CQUNmc0IsV0FBV0E7b0JBQ1grRCxPQUFNOzs7Ozt5Q0FHUiw4REFBQ25HLGdFQUFZQTtvQkFDWGlHLFVBQVV4QztvQkFDVnlDLGVBQWU1RTtvQkFDZjhFLGFBQWE7b0JBQ2JoRSxXQUFXQTtvQkFDWCtELE9BQU07Ozs7OztZQUlaO2dCQUNFLHFCQUNFLDhEQUFDbEcsa0VBQWNBO29CQUNiMkIsUUFBUUE7b0JBQ1JxRSxVQUFVbkM7b0JBQ1Z1QyxxQkFBcUIzRixXQUFXO29CQUNoQzBCLFdBQVdBOzs7Ozs7WUFJakI7Z0JBQ0UscUJBQ0UsOERBQUNsQywrREFBV0E7b0JBQ1ZvRSxNQUFNcEM7b0JBQ05vRSxrQkFBa0IvQjtvQkFDbEJnQyxRQUFRLElBQU05RjtvQkFDZDJCLFdBQVdBOzs7Ozs7WUFJakI7Z0JBQ0UscUJBQ0UsOERBQUNqQyxvRUFBZ0JBO29CQUNmcUcsU0FBU2hFO29CQUNUaUUsU0FBUy9COzs7Ozs7WUFJZjtnQkFDRSxPQUFPO1FBQ1g7SUFDRjtJQUVBLHFCQUNFLDhEQUFDTTs7MEJBRUMsOERBQUNBO2dCQUFJQyxXQUFVOzBCQUNiLDRFQUFDeUI7b0JBQUd6QixXQUFVOzhCQUNYMEIsT0FBT0MsTUFBTSxDQUFDdEcsTUFBTXVHLE1BQU0sQ0FBQ2pDLENBQUFBLE9BQVEsT0FBT0EsU0FBUyxVQUFVa0MsR0FBRyxDQUFDLENBQUNsQzt3QkFDakUsTUFBTW1DLGNBQWNsQyxrQkFBa0JEO3dCQUN0QyxxQkFDRSw4REFBQ29DOzRCQUVDL0IsV0FBVyxxQkFBNEUsT0FBdkR6RSxlQUFlb0UsT0FBTyxpQkFBaUI7NEJBQ3ZFUSxTQUFTLElBQU1OLGdCQUFnQkY7OzhDQUUvQiw4REFBQ0k7b0NBQUlDLFdBQVcsOEJBQW1GLE9BQXJEOEIsY0FBYyxvQ0FBb0M7O3NEQUM5Riw4REFBQ0U7NENBQUtoQyxXQUFXLDJEQUloQixPQUhDekUsY0FBY29FLE9BQU8sMEJBQ3JCcEUsZ0JBQWdCb0UsT0FBTywrQ0FDdkI7c0RBRUNBOzs7Ozs7c0RBRUgsOERBQUNxQzs0Q0FBS2hDLFdBQVU7c0RBQWdCTixZQUFZQzs7Ozs7Ozs7Ozs7O2dDQUU3Q0EsT0FBTytCLE9BQU9PLElBQUksQ0FBQzVHLE1BQU02RyxNQUFNLEdBQUcsbUJBQ2pDLDhEQUFDbkM7b0NBQUlDLFdBQVcsaUJBQW1FLE9BQWxEekUsY0FBY29FLE9BQU8sZUFBZTs7Ozs7OzsyQkFmbEVBOzs7OztvQkFtQlg7Ozs7Ozs7Ozs7O1lBS0ZsQyxDQUFBQSxXQUFXLFVBQVVKLEtBQUksbUJBQ3pCLDhEQUFDbEMsbUVBQWVBO2dCQUFDc0MsUUFBUUE7Z0JBQVFJLFNBQVNGOzs7Ozs7WUFJM0NtQzs7Ozs7OztBQUdQO0dBbll3QnhFO0tBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9wYWdlLnRzeD83NjAzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcclxuXHJcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBDbGlja0hvdXNlRm9ybSBmcm9tICdAL2NvbXBvbmVudHMvQ2xpY2tIb3VzZUZvcm0nO1xyXG5pbXBvcnQgRmxhdEZpbGVGb3JtIGZyb20gJ0AvY29tcG9uZW50cy9GbGF0RmlsZUZvcm0nO1xyXG5pbXBvcnQgVGFibGVTZWxlY3Rpb24gZnJvbSAnQC9jb21wb25lbnRzL1RhYmxlU2VsZWN0aW9uJztcclxuaW1wb3J0IERhdGFQcmV2aWV3IGZyb20gJ0AvY29tcG9uZW50cy9EYXRhUHJldmlldyc7XHJcbmltcG9ydCBJbmdlc3Rpb25SZXN1bHRzIGZyb20gJ0AvY29tcG9uZW50cy9Jbmdlc3Rpb25SZXN1bHRzJztcclxuaW1wb3J0IFN0YXR1c0luZGljYXRvciBmcm9tICdAL2NvbXBvbmVudHMvU3RhdHVzSW5kaWNhdG9yJztcclxuaW1wb3J0IGFwaSwgeyBDbGlja0hvdXNlQ29uZmlnLCBGbGF0RmlsZUNvbmZpZywgSW5nZXN0aW9uUmVxdWVzdCwgVGFibGVJbmZvLCBJbmdlc3Rpb25SZXNwb25zZSB9IGZyb20gJ0AvbGliL2FwaSc7XHJcblxyXG4vLyBTdGVwIGVudW1cclxuZW51bSBTdGVwIHtcclxuICBTb3VyY2VTZWxlY3Rpb24gPSAxLFxyXG4gIFNvdXJjZUNvbmZpZ3VyYXRpb24sXHJcbiAgVGFyZ2V0Q29uZmlndXJhdGlvbixcclxuICBTY2hlbWFTZWxlY3Rpb24sXHJcbiAgUHJldmlldyxcclxuICBSZXN1bHRzXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEhvbWUoKSB7XHJcbiAgLy8gU3RhdGVcclxuICBjb25zdCBbY3VycmVudFN0ZXAsIHNldEN1cnJlbnRTdGVwXSA9IHVzZVN0YXRlPFN0ZXA+KFN0ZXAuU291cmNlU2VsZWN0aW9uKTtcclxuICBjb25zdCBbc291cmNlLCBzZXRTb3VyY2VdID0gdXNlU3RhdGU8J2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJyB8ICcnPignJyk7XHJcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0XSA9IHVzZVN0YXRlPCdjbGlja2hvdXNlJyB8ICdmbGF0ZmlsZScgfCAnJz4oJycpO1xyXG4gIGNvbnN0IFtjbGlja0hvdXNlQ29uZmlnLCBzZXRDbGlja0hvdXNlQ29uZmlnXSA9IHVzZVN0YXRlPENsaWNrSG91c2VDb25maWc+KHtcclxuICAgIGhvc3Q6ICcnLFxyXG4gICAgcG9ydDogODEyMyxcclxuICAgIGRhdGFiYXNlOiAnJyxcclxuICAgIHVzZXI6ICcnLFxyXG4gICAgand0VG9rZW46ICcnLFxyXG4gICAgc2VjdXJlOiBmYWxzZVxyXG4gIH0pO1xyXG4gIGNvbnN0IFtmbGF0RmlsZUNvbmZpZywgc2V0RmxhdEZpbGVDb25maWddID0gdXNlU3RhdGU8RmxhdEZpbGVDb25maWc+KHtcclxuICAgIGRlbGltaXRlcjogJywnLFxyXG4gICAgaGFzSGVhZGVyOiB0cnVlLFxyXG4gICAgZmlsZVBhdGg6ICcnLFxyXG4gICAgZmlsZU5hbWU6ICcnXHJcbiAgfSk7XHJcbiAgY29uc3QgW3RhYmxlcywgc2V0VGFibGVzXSA9IHVzZVN0YXRlPFRhYmxlSW5mb1tdPihbXSk7XHJcbiAgY29uc3QgW2pvaW5Db25kaXRpb24sIHNldEpvaW5Db25kaXRpb25dID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XHJcbiAgY29uc3QgW3VzZUpvaW4sIHNldFVzZUpvaW5dID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNvbnN0IFtwcmV2aWV3RGF0YSwgc2V0UHJldmlld0RhdGFdID0gdXNlU3RhdGU8c3RyaW5nW11bXT4oW10pO1xyXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XHJcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKTtcclxuICBjb25zdCBbaW5nZXN0aW9uUmVzdWx0cywgc2V0SW5nZXN0aW9uUmVzdWx0c10gPSB1c2VTdGF0ZTxJbmdlc3Rpb25SZXNwb25zZSB8IG51bGw+KG51bGwpO1xyXG4gIGNvbnN0IFtzdGF0dXMsIHNldFN0YXR1c10gPSB1c2VTdGF0ZTwnaWRsZScgfCAnY29ubmVjdGluZycgfCAnZmV0Y2hpbmcnIHwgJ2luZ2VzdGluZycgfCAnY29tcGxldGVkJyB8ICdlcnJvcic+KCdpZGxlJyk7XHJcbiAgY29uc3QgW3N0YXR1c01lc3NhZ2UsIHNldFN0YXR1c01lc3NhZ2VdID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XHJcblxyXG4gIC8vIEVmZmVjdCB0byB0cmFjayBzdGF0dXMgY2hhbmdlc1xyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICBpZiAoaXNMb2FkaW5nKSB7XHJcbiAgICAgIGlmIChjdXJyZW50U3RlcCA9PT0gU3RlcC5Tb3VyY2VDb25maWd1cmF0aW9uIHx8IGN1cnJlbnRTdGVwID09PSBTdGVwLlRhcmdldENvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBzZXRTdGF0dXMoJ2Nvbm5lY3RpbmcnKTtcclxuICAgICAgICBzZXRTdGF0dXNNZXNzYWdlKCdDb25uZWN0aW5nIHRvIHRoZSBkYXRhIHNvdXJjZS4uLicpO1xyXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTdGVwID09PSBTdGVwLlNjaGVtYVNlbGVjdGlvbikge1xyXG4gICAgICAgIHNldFN0YXR1cygnZmV0Y2hpbmcnKTtcclxuICAgICAgICBzZXRTdGF0dXNNZXNzYWdlKCdGZXRjaGluZyBzY2hlbWEgaW5mb3JtYXRpb24uLi4nKTtcclxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50U3RlcCA9PT0gU3RlcC5QcmV2aWV3KSB7XHJcbiAgICAgICAgc2V0U3RhdHVzKCdmZXRjaGluZycpO1xyXG4gICAgICAgIHNldFN0YXR1c01lc3NhZ2UoJ0dlbmVyYXRpbmcgZGF0YSBwcmV2aWV3Li4uJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFN0ZXAgPT09IFN0ZXAuUmVzdWx0cykge1xyXG4gICAgICAgIHNldFN0YXR1cygnaW5nZXN0aW5nJyk7XHJcbiAgICAgICAgc2V0U3RhdHVzTWVzc2FnZSgnSW5nZXN0aW5nIGRhdGEgYmV0d2VlbiBzb3VyY2VzLi4uJyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcclxuICAgICAgc2V0U3RhdHVzKCdlcnJvcicpO1xyXG4gICAgICBzZXRTdGF0dXNNZXNzYWdlKGVycm9yKTtcclxuICAgIH0gZWxzZSBpZiAoY3VycmVudFN0ZXAgPT09IFN0ZXAuUmVzdWx0cyAmJiBpbmdlc3Rpb25SZXN1bHRzKSB7XHJcbiAgICAgIHNldFN0YXR1cygnY29tcGxldGVkJyk7XHJcbiAgICAgIHNldFN0YXR1c01lc3NhZ2UoaW5nZXN0aW9uUmVzdWx0cy5tZXNzYWdlIHx8ICdPcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0U3RhdHVzKCdpZGxlJyk7XHJcbiAgICAgIHNldFN0YXR1c01lc3NhZ2UoJycpO1xyXG4gICAgfVxyXG4gIH0sIFtpc0xvYWRpbmcsIGVycm9yLCBjdXJyZW50U3RlcCwgaW5nZXN0aW9uUmVzdWx0c10pO1xyXG5cclxuICAvLyBIYW5kbGVyc1xyXG4gIGNvbnN0IGhhbmRsZVNvdXJjZVNlbGVjdGlvbiA9IChzZWxlY3RlZFNvdXJjZTogJ2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJykgPT4ge1xyXG4gICAgc2V0U291cmNlKHNlbGVjdGVkU291cmNlKTtcclxuICAgIHNldFRhcmdldChzZWxlY3RlZFNvdXJjZSA9PT0gJ2NsaWNraG91c2UnID8gJ2ZsYXRmaWxlJyA6ICdjbGlja2hvdXNlJyk7XHJcbiAgICBzZXRDdXJyZW50U3RlcChTdGVwLlNvdXJjZUNvbmZpZ3VyYXRpb24pO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZUNsaWNrSG91c2VDb25maWdTdWJtaXQgPSBhc3luYyAoY29uZmlnOiBDbGlja0hvdXNlQ29uZmlnKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XHJcbiAgICAgIHNldEVycm9yKCcnKTtcclxuICAgICAgXHJcbiAgICAgIC8vIFRlc3QgY29ubmVjdGlvblxyXG4gICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gYXdhaXQgYXBpLnRlc3RDbGlja0hvdXNlQ29ubmVjdGlvbihjb25maWcpO1xyXG4gICAgICBpZiAoIXRlc3RSZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0ZXN0UmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTYXZlIGNvbmZpZ1xyXG4gICAgICBzZXRDbGlja0hvdXNlQ29uZmlnKGNvbmZpZyk7XHJcblxyXG4gICAgICAvLyBJZiBDbGlja0hvdXNlIGlzIHRoZSBzb3VyY2UsIGZldGNoIHRhYmxlc1xyXG4gICAgICBpZiAoc291cmNlID09PSAnY2xpY2tob3VzZScpIHtcclxuICAgICAgICBjb25zdCB0YWJsZXMgPSBhd2FpdCBhcGkuZ2V0Q2xpY2tIb3VzZVRhYmxlcyhjb25maWcpO1xyXG4gICAgICAgIHNldFRhYmxlcyh0YWJsZXMpO1xyXG4gICAgICAgIHNldEN1cnJlbnRTdGVwKFN0ZXAuU2NoZW1hU2VsZWN0aW9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBDbGlja0hvdXNlIGlzIHRoZSB0YXJnZXRcclxuICAgICAgICBzZXRDdXJyZW50U3RlcChTdGVwLlRhcmdldENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGNvbm5lY3QgdG8gQ2xpY2tIb3VzZScpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjb25zdCBoYW5kbGVGbGF0RmlsZUNvbmZpZ1N1Ym1pdCA9IGFzeW5jIChjb25maWc6IEZsYXRGaWxlQ29uZmlnLCBmaWxlPzogRmlsZSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xyXG4gICAgICBzZXRFcnJvcignJyk7XHJcblxyXG4gICAgICAvLyBJZiBmaWxlIHVwbG9hZCBpcyByZXF1aXJlZCAod2hlbiBmbGF0IGZpbGUgaXMgdGhlIHNvdXJjZSlcclxuICAgICAgaWYgKHNvdXJjZSA9PT0gJ2ZsYXRmaWxlJyAmJiBmaWxlKSB7XHJcbiAgICAgICAgY29uc3QgdXBsb2FkUmVzdWx0ID0gYXdhaXQgYXBpLnVwbG9hZEZpbGUoZmlsZSwgY29uZmlnLmRlbGltaXRlciwgY29uZmlnLmhhc0hlYWRlcik7XHJcbiAgICAgICAgaWYgKCF1cGxvYWRSZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVwbG9hZFJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNldCBjb25maWcgd2l0aCBmaWxlIHBhdGhcclxuICAgICAgICBzZXRGbGF0RmlsZUNvbmZpZyh7XHJcbiAgICAgICAgICAuLi5jb25maWcsXHJcbiAgICAgICAgICBmaWxlUGF0aDogdXBsb2FkUmVzdWx0LmZpbGVQYXRoXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIFNldCBzY2hlbWEgaW5mb3JtYXRpb25cclxuICAgICAgICBzZXRUYWJsZXMoW3VwbG9hZFJlc3VsdC5zY2hlbWFdKTtcclxuICAgICAgICBzZXRDdXJyZW50U3RlcChTdGVwLlNjaGVtYVNlbGVjdGlvbik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gSnVzdCBzdG9yZSB0aGUgY29uZmlnIChmbGF0IGZpbGUgaXMgdGhlIHRhcmdldClcclxuICAgICAgICBzZXRGbGF0RmlsZUNvbmZpZyhjb25maWcpO1xyXG4gICAgICAgIHNldEN1cnJlbnRTdGVwKHNvdXJjZSA9PT0gJ2NsaWNraG91c2UnID8gU3RlcC5TY2hlbWFTZWxlY3Rpb24gOiBTdGVwLlRhcmdldENvbmZpZ3VyYXRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHByb2Nlc3MgZmxhdCBmaWxlJyk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZVRhYmxlU2VsZWN0aW9uID0gKHNlbGVjdGVkVGFibGVzOiBUYWJsZUluZm9bXSwgdXNlSm9pbk9wdGlvbjogYm9vbGVhbiwgam9pbkNvbmRpdGlvblRleHQ6IHN0cmluZykgPT4ge1xyXG4gICAgc2V0VGFibGVzKHNlbGVjdGVkVGFibGVzKTtcclxuICAgIHNldFVzZUpvaW4odXNlSm9pbk9wdGlvbik7XHJcbiAgICBzZXRKb2luQ29uZGl0aW9uKGpvaW5Db25kaXRpb25UZXh0KTtcclxuICAgIHNldEN1cnJlbnRTdGVwKFN0ZXAuUHJldmlldyk7XHJcblxyXG4gICAgLy8gR2VuZXJhdGUgYSBwcmV2aWV3XHJcbiAgICBnZW5lcmF0ZVByZXZpZXcoc2VsZWN0ZWRUYWJsZXMsIHVzZUpvaW5PcHRpb24sIGpvaW5Db25kaXRpb25UZXh0KTtcclxuICB9O1xyXG5cclxuICBjb25zdCBnZW5lcmF0ZVByZXZpZXcgPSBhc3luYyAoc2VsZWN0ZWRUYWJsZXM6IFRhYmxlSW5mb1tdLCB1c2VKb2luT3B0aW9uOiBib29sZWFuLCBqb2luQ29uZGl0aW9uVGV4dDogc3RyaW5nKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XHJcbiAgICAgIHNldEVycm9yKCcnKTtcclxuXHJcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IEluZ2VzdGlvblJlcXVlc3QgPSB7XHJcbiAgICAgICAgc291cmNlOiBzb3VyY2UgYXMgJ2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJyxcclxuICAgICAgICB0YXJnZXQ6IHRhcmdldCBhcyAnY2xpY2tob3VzZScgfCAnZmxhdGZpbGUnLFxyXG4gICAgICAgIGNsaWNrSG91c2VDb25maWc6IHNvdXJjZSA9PT0gJ2NsaWNraG91c2UnID8gY2xpY2tIb3VzZUNvbmZpZyA6IHRhcmdldCA9PT0gJ2NsaWNraG91c2UnID8gY2xpY2tIb3VzZUNvbmZpZyA6IHVuZGVmaW5lZCxcclxuICAgICAgICBmbGF0RmlsZUNvbmZpZzogc291cmNlID09PSAnZmxhdGZpbGUnID8gZmxhdEZpbGVDb25maWcgOiB0YXJnZXQgPT09ICdmbGF0ZmlsZScgPyBmbGF0RmlsZUNvbmZpZyA6IHVuZGVmaW5lZCxcclxuICAgICAgICB0YWJsZXM6IHNlbGVjdGVkVGFibGVzLFxyXG4gICAgICAgIGpvaW5Db25kaXRpb246IGpvaW5Db25kaXRpb25UZXh0LFxyXG4gICAgICAgIHVzZUpvaW46IHVzZUpvaW5PcHRpb25cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHByZXZpZXdSZXN1bHQgPSBhd2FpdCBhcGkucHJldmlld0RhdGEocmVxdWVzdCk7XHJcbiAgICAgIGlmICghcHJldmlld1Jlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByZXZpZXdSZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFByZXZpZXdEYXRhKHByZXZpZXdSZXN1bHQuZGF0YSk7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICBzZXRFcnJvcihlcnIubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGdlbmVyYXRlIHByZXZpZXcnKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaGFuZGxlU3RhcnRJbmdlc3Rpb24gPSBhc3luYyAoKSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XHJcbiAgICAgIHNldEVycm9yKCcnKTtcclxuXHJcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IEluZ2VzdGlvblJlcXVlc3QgPSB7XHJcbiAgICAgICAgc291cmNlOiBzb3VyY2UgYXMgJ2NsaWNraG91c2UnIHwgJ2ZsYXRmaWxlJyxcclxuICAgICAgICB0YXJnZXQ6IHRhcmdldCBhcyAnY2xpY2tob3VzZScgfCAnZmxhdGZpbGUnLFxyXG4gICAgICAgIGNsaWNrSG91c2VDb25maWc6IHNvdXJjZSA9PT0gJ2NsaWNraG91c2UnID8gY2xpY2tIb3VzZUNvbmZpZyA6IHRhcmdldCA9PT0gJ2NsaWNraG91c2UnID8gY2xpY2tIb3VzZUNvbmZpZyA6IHVuZGVmaW5lZCxcclxuICAgICAgICBmbGF0RmlsZUNvbmZpZzogc291cmNlID09PSAnZmxhdGZpbGUnID8gZmxhdEZpbGVDb25maWcgOiB0YXJnZXQgPT09ICdmbGF0ZmlsZScgPyBmbGF0RmlsZUNvbmZpZyA6IHVuZGVmaW5lZCxcclxuICAgICAgICB0YWJsZXMsXHJcbiAgICAgICAgam9pbkNvbmRpdGlvbixcclxuICAgICAgICB1c2VKb2luXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5pbmdlc3REYXRhKHJlcXVlc3QpO1xyXG4gICAgICBzZXRJbmdlc3Rpb25SZXN1bHRzKHJlc3BvbnNlKTtcclxuICAgICAgc2V0Q3VycmVudFN0ZXAoU3RlcC5SZXN1bHRzKTtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIHNldEVycm9yKGVyci5tZXNzYWdlIHx8ICdJbmdlc3Rpb24gZmFpbGVkJyk7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhhbmRsZVJlc2V0ID0gKCkgPT4ge1xyXG4gICAgc2V0Q3VycmVudFN0ZXAoU3RlcC5Tb3VyY2VTZWxlY3Rpb24pO1xyXG4gICAgc2V0U291cmNlKCcnKTtcclxuICAgIHNldFRhcmdldCgnJyk7XHJcbiAgICBzZXRUYWJsZXMoW10pO1xyXG4gICAgc2V0Sm9pbkNvbmRpdGlvbignJyk7XHJcbiAgICBzZXRVc2VKb2luKGZhbHNlKTtcclxuICAgIHNldFByZXZpZXdEYXRhKFtdKTtcclxuICAgIHNldEluZ2VzdGlvblJlc3VsdHMobnVsbCk7XHJcbiAgICBzZXRFcnJvcignJyk7XHJcbiAgfTtcclxuXHJcbiAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIFVJXHJcbiAgY29uc3QgZ2V0U3RlcE5hbWUgPSAoc3RlcDogU3RlcCkgPT4ge1xyXG4gICAgc3dpdGNoIChzdGVwKSB7XHJcbiAgICAgIGNhc2UgU3RlcC5Tb3VyY2VTZWxlY3Rpb246IHJldHVybiAnU291cmNlIFNlbGVjdGlvbic7XHJcbiAgICAgIGNhc2UgU3RlcC5Tb3VyY2VDb25maWd1cmF0aW9uOiByZXR1cm4gJ1NvdXJjZSBDb25maWcnO1xyXG4gICAgICBjYXNlIFN0ZXAuVGFyZ2V0Q29uZmlndXJhdGlvbjogcmV0dXJuICdUYXJnZXQgQ29uZmlnJztcclxuICAgICAgY2FzZSBTdGVwLlNjaGVtYVNlbGVjdGlvbjogcmV0dXJuICdDb2x1bW4gU2VsZWN0aW9uJztcclxuICAgICAgY2FzZSBTdGVwLlByZXZpZXc6IHJldHVybiAnUHJldmlldyc7XHJcbiAgICAgIGNhc2UgU3RlcC5SZXN1bHRzOiByZXR1cm4gJ1Jlc3VsdHMnO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gRnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBzdGVwIGlzIGFjY2Vzc2libGUgZm9yIG5hdmlnYXRpb25cclxuICBjb25zdCBjYW5OYXZpZ2F0ZVRvU3RlcCA9IChzdGVwOiBTdGVwKTogYm9vbGVhbiA9PiB7XHJcbiAgICAvLyBBbHdheXMgYWxsb3cgZ29pbmcgdG8gaW5pdGlhbCBzdGVwXHJcbiAgICBpZiAoc3RlcCA9PT0gU3RlcC5Tb3VyY2VTZWxlY3Rpb24pIHJldHVybiB0cnVlO1xyXG4gICAgXHJcbiAgICAvLyBEb24ndCBhbGxvdyBnb2luZyBiYWNrIHRvIGNvbXBsZXRlZCBzdGVwcyBhZnRlciByZXN1bHRzXHJcbiAgICBpZiAoY3VycmVudFN0ZXAgPT09IFN0ZXAuUmVzdWx0cykgcmV0dXJuIGZhbHNlO1xyXG4gICAgXHJcbiAgICAvLyBPbmx5IGFsbG93IGdvaW5nIHRvIHN0ZXBzIHRoYXQgaGF2ZSBiZWVuIGNvbXBsZXRlZCBvciBhcmUgdGhlIGN1cnJlbnQgb25lXHJcbiAgICBpZiAoc3RlcCA8PSBjdXJyZW50U3RlcCkgcmV0dXJuIHRydWU7XHJcbiAgICBcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9O1xyXG5cclxuICAvLyBGdW5jdGlvbiB0byBoYW5kbGUgc3RlcCBuYXZpZ2F0aW9uIHdoZW4gY2xpY2tpbmcgb24gdGhlIHByb2dyZXNzIGluZGljYXRvclxyXG4gIGNvbnN0IGhhbmRsZVN0ZXBDbGljayA9IChzdGVwOiBTdGVwKSA9PiB7XHJcbiAgICBpZiAoIWNhbk5hdmlnYXRlVG9TdGVwKHN0ZXApKSByZXR1cm47XHJcbiAgICBcclxuICAgIC8vIElmIGxvYWRpbmcsIGRvbid0IGFsbG93IG5hdmlnYXRpb25cclxuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybjtcclxuICAgIFxyXG4gICAgc2V0Q3VycmVudFN0ZXAoc3RlcCk7XHJcbiAgfTtcclxuXHJcbiAgLy8gUmVuZGVyIGRpZmZlcmVudCBzdGVwc1xyXG4gIGNvbnN0IHJlbmRlclN0ZXAgPSAoKSA9PiB7XHJcbiAgICBzd2l0Y2ggKGN1cnJlbnRTdGVwKSB7XHJcbiAgICAgIGNhc2UgU3RlcC5Tb3VyY2VTZWxlY3Rpb246XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwidGV4dC14bCBmb250LXNlbWlib2xkIG1iLTZcIj5TZWxlY3QgRGF0YSBTb3VyY2UgYW5kIFRhcmdldDwvaDI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBzcGFjZS15LTRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTEgbWQ6Z3JpZC1jb2xzLTIgZ2FwLTZcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYnRuICR7c291cmNlID09PSAnY2xpY2tob3VzZScgPyAnYnRuLXByaW1hcnknIDogJ2J0bi1zZWNvbmRhcnknfSBwLTYgdGV4dC1jZW50ZXIgdHJhbnNpdGlvbi1hbGwgdHJhbnNmb3JtIGhvdmVyOnNjYWxlLTEwNWB9XHJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNvdXJjZVNlbGVjdGlvbignY2xpY2tob3VzZScpfVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzc05hbWU9XCJoLTEwIHctMTBcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIiBzdHJva2VXaWR0aD17Mn0gZD1cIk01IDhoMTRNNSA4YTIgMiAwIDExMC00aDE0YTIgMiAwIDExMCA0TTUgOHYxMGEyIDIgMCAwMDIgMmgxMGEyIDIgMCAwMDItMlY4bS05IDRoNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bVwiPkNsaWNrSG91c2UgdG8gRmxhdCBGaWxlPC9oMz5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtMiB0ZXh0LXNtIG9wYWNpdHktOTBcIj5FeHBvcnQgZGF0YSBmcm9tIENsaWNrSG91c2UgZGF0YWJhc2UgdG8gYSBmbGF0IGZpbGUgKENTVik8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYnRuICR7c291cmNlID09PSAnZmxhdGZpbGUnID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tc2Vjb25kYXJ5J30gcC02IHRleHQtY2VudGVyIHRyYW5zaXRpb24tYWxsIHRyYW5zZm9ybSBob3ZlcjpzY2FsZS0xMDVgfVxyXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTb3VyY2VTZWxlY3Rpb24oJ2ZsYXRmaWxlJyl9XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzTmFtZT1cImgtMTAgdy0xMFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGggc3Ryb2tlTGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZVdpZHRoPXsyfSBkPVwiTTkgMTJoNm0tNiA0aDZtMiA1SDdhMiAyIDAgMDEtMi0yVjVhMiAyIDAgMDEyLTJoNS41ODZhMSAxIDAgMDEuNzA3LjI5M2w1LjQxNCA1LjQxNGExIDEgMCAwMS4yOTMuNzA3VjE5YTIgMiAwIDAxLTIgMnpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW1cIj5GbGF0IEZpbGUgdG8gQ2xpY2tIb3VzZTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgdGV4dC1zbSBvcGFjaXR5LTkwXCI+SW1wb3J0IGRhdGEgZnJvbSBhIGZsYXQgZmlsZSAoQ1NWKSB0byBDbGlja0hvdXNlIGRhdGFiYXNlPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgU3RlcC5Tb3VyY2VDb25maWd1cmF0aW9uOlxyXG4gICAgICAgIHJldHVybiBzb3VyY2UgPT09ICdjbGlja2hvdXNlJyA/IChcclxuICAgICAgICAgIDxDbGlja0hvdXNlRm9ybSBcclxuICAgICAgICAgICAgb25TdWJtaXQ9e2hhbmRsZUNsaWNrSG91c2VDb25maWdTdWJtaXR9IFxyXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzPXtjbGlja0hvdXNlQ29uZmlnfSBcclxuICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XHJcbiAgICAgICAgICAgIHRpdGxlPVwiQ2xpY2tIb3VzZSBTb3VyY2UgQ29uZmlndXJhdGlvblwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICkgOiAoXHJcbiAgICAgICAgICA8RmxhdEZpbGVGb3JtIFxyXG4gICAgICAgICAgICBvblN1Ym1pdD17aGFuZGxlRmxhdEZpbGVDb25maWdTdWJtaXR9IFxyXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzPXtmbGF0RmlsZUNvbmZpZ31cclxuICAgICAgICAgICAgcmVxdWlyZUZpbGU9e3RydWV9XHJcbiAgICAgICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgICB0aXRsZT1cIkZsYXQgRmlsZSBTb3VyY2UgQ29uZmlndXJhdGlvblwiIFxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApO1xyXG5cclxuICAgICAgY2FzZSBTdGVwLlRhcmdldENvbmZpZ3VyYXRpb246XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldCA9PT0gJ2NsaWNraG91c2UnID8gKFxyXG4gICAgICAgICAgPENsaWNrSG91c2VGb3JtIFxyXG4gICAgICAgICAgICBvblN1Ym1pdD17aGFuZGxlQ2xpY2tIb3VzZUNvbmZpZ1N1Ym1pdH0gXHJcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM9e2NsaWNrSG91c2VDb25maWd9IFxyXG4gICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cclxuICAgICAgICAgICAgdGl0bGU9XCJDbGlja0hvdXNlIFRhcmdldCBDb25maWd1cmF0aW9uXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKSA6IChcclxuICAgICAgICAgIDxGbGF0RmlsZUZvcm0gXHJcbiAgICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVGbGF0RmlsZUNvbmZpZ1N1Ym1pdH0gXHJcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM9e2ZsYXRGaWxlQ29uZmlnfVxyXG4gICAgICAgICAgICByZXF1aXJlRmlsZT17ZmFsc2V9XHJcbiAgICAgICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxyXG4gICAgICAgICAgICB0aXRsZT1cIkZsYXQgRmlsZSBUYXJnZXQgQ29uZmlndXJhdGlvblwiIFxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApO1xyXG5cclxuICAgICAgY2FzZSBTdGVwLlNjaGVtYVNlbGVjdGlvbjpcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgPFRhYmxlU2VsZWN0aW9uIFxyXG4gICAgICAgICAgICB0YWJsZXM9e3RhYmxlc30gXHJcbiAgICAgICAgICAgIG9uU3VibWl0PXtoYW5kbGVUYWJsZVNlbGVjdGlvbn1cclxuICAgICAgICAgICAgaXNNdWx0aVRhYmxlRW5hYmxlZD17c291cmNlID09PSAnY2xpY2tob3VzZSd9IFxyXG4gICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgU3RlcC5QcmV2aWV3OlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8RGF0YVByZXZpZXcgXHJcbiAgICAgICAgICAgIGRhdGE9e3ByZXZpZXdEYXRhfSBcclxuICAgICAgICAgICAgb25TdGFydEluZ2VzdGlvbj17aGFuZGxlU3RhcnRJbmdlc3Rpb259XHJcbiAgICAgICAgICAgIG9uQmFjaz17KCkgPT4gc2V0Q3VycmVudFN0ZXAoU3RlcC5TY2hlbWFTZWxlY3Rpb24pfVxyXG4gICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgIGNhc2UgU3RlcC5SZXN1bHRzOlxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8SW5nZXN0aW9uUmVzdWx0cyBcclxuICAgICAgICAgICAgcmVzdWx0cz17aW5nZXN0aW9uUmVzdWx0c30gXHJcbiAgICAgICAgICAgIG9uUmVzZXQ9e2hhbmRsZVJlc2V0fVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdj5cclxuICAgICAgey8qIFByb2dyZXNzIGluZGljYXRvciAqL31cclxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi04XCI+XHJcbiAgICAgICAgPG9sIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctZnVsbFwiPlxyXG4gICAgICAgICAge09iamVjdC52YWx1ZXMoU3RlcCkuZmlsdGVyKHN0ZXAgPT4gdHlwZW9mIHN0ZXAgPT09ICdudW1iZXInKS5tYXAoKHN0ZXApID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNOYXZpZ2FibGUgPSBjYW5OYXZpZ2F0ZVRvU3RlcChzdGVwIGFzIFN0ZXApO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDxsaSBcclxuICAgICAgICAgICAgICAgIGtleT17c3RlcH0gXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2BmbGV4IGl0ZW1zLWNlbnRlciAke2N1cnJlbnRTdGVwID49IHN0ZXAgPyAndGV4dC1wcmltYXJ5JyA6ICd0ZXh0LWdyYXktNDAwJ31gfVxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU3RlcENsaWNrKHN0ZXAgYXMgU3RlcCl9XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciAke2lzTmF2aWdhYmxlID8gJ2N1cnNvci1wb2ludGVyIGhvdmVyOm9wYWNpdHktODAnIDogJyd9YH0+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctMTAgaC0xMCByb3VuZGVkLWZ1bGwgJHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RlcCA+IHN0ZXAgPyAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlJyA6IFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGVwID09PSBzdGVwID8gJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSByaW5nLTQgcmluZy1ibHVlLTEwMCcgOiBcclxuICAgICAgICAgICAgICAgICAgICAnYmctZ3JheS0yMDAnXHJcbiAgICAgICAgICAgICAgICAgIH1gfT5cclxuICAgICAgICAgICAgICAgICAgICB7c3RlcH1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIG10LTFcIj57Z2V0U3RlcE5hbWUoc3RlcCBhcyBTdGVwKX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIHtzdGVwIDwgT2JqZWN0LmtleXMoU3RlcCkubGVuZ3RoIC8gMiAmJiAoXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgdy0xNiBoLTEgbXgtMiAke2N1cnJlbnRTdGVwID4gc3RlcCA/ICdiZy1wcmltYXJ5JyA6ICdiZy1ncmF5LTIwMCd9YH0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KX1cclxuICAgICAgICA8L29sPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIHsvKiBTdGF0dXMgaW5kaWNhdG9yICovfVxyXG4gICAgICB7KHN0YXR1cyAhPT0gJ2lkbGUnIHx8IGVycm9yKSAmJiAoXHJcbiAgICAgICAgPFN0YXR1c0luZGljYXRvciBzdGF0dXM9e3N0YXR1c30gbWVzc2FnZT17c3RhdHVzTWVzc2FnZX0gLz5cclxuICAgICAgKX1cclxuXHJcbiAgICAgIHsvKiBDdXJyZW50IHN0ZXAgY29udGVudCAqL31cclxuICAgICAge3JlbmRlclN0ZXAoKX1cclxuICAgIDwvZGl2PlxyXG4gICk7XHJcbn0gIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiQ2xpY2tIb3VzZUZvcm0iLCJGbGF0RmlsZUZvcm0iLCJUYWJsZVNlbGVjdGlvbiIsIkRhdGFQcmV2aWV3IiwiSW5nZXN0aW9uUmVzdWx0cyIsIlN0YXR1c0luZGljYXRvciIsImFwaSIsIlN0ZXAiLCJIb21lIiwiY3VycmVudFN0ZXAiLCJzZXRDdXJyZW50U3RlcCIsInNvdXJjZSIsInNldFNvdXJjZSIsInRhcmdldCIsInNldFRhcmdldCIsImNsaWNrSG91c2VDb25maWciLCJzZXRDbGlja0hvdXNlQ29uZmlnIiwiaG9zdCIsInBvcnQiLCJkYXRhYmFzZSIsInVzZXIiLCJqd3RUb2tlbiIsInNlY3VyZSIsImZsYXRGaWxlQ29uZmlnIiwic2V0RmxhdEZpbGVDb25maWciLCJkZWxpbWl0ZXIiLCJoYXNIZWFkZXIiLCJmaWxlUGF0aCIsImZpbGVOYW1lIiwidGFibGVzIiwic2V0VGFibGVzIiwiam9pbkNvbmRpdGlvbiIsInNldEpvaW5Db25kaXRpb24iLCJ1c2VKb2luIiwic2V0VXNlSm9pbiIsInByZXZpZXdEYXRhIiwic2V0UHJldmlld0RhdGEiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJlcnJvciIsInNldEVycm9yIiwiaW5nZXN0aW9uUmVzdWx0cyIsInNldEluZ2VzdGlvblJlc3VsdHMiLCJzdGF0dXMiLCJzZXRTdGF0dXMiLCJzdGF0dXNNZXNzYWdlIiwic2V0U3RhdHVzTWVzc2FnZSIsIm1lc3NhZ2UiLCJoYW5kbGVTb3VyY2VTZWxlY3Rpb24iLCJzZWxlY3RlZFNvdXJjZSIsImhhbmRsZUNsaWNrSG91c2VDb25maWdTdWJtaXQiLCJjb25maWciLCJ0ZXN0UmVzdWx0IiwidGVzdENsaWNrSG91c2VDb25uZWN0aW9uIiwic3VjY2VzcyIsIkVycm9yIiwiZ2V0Q2xpY2tIb3VzZVRhYmxlcyIsImVyciIsImhhbmRsZUZsYXRGaWxlQ29uZmlnU3VibWl0IiwiZmlsZSIsInVwbG9hZFJlc3VsdCIsInVwbG9hZEZpbGUiLCJzY2hlbWEiLCJoYW5kbGVUYWJsZVNlbGVjdGlvbiIsInNlbGVjdGVkVGFibGVzIiwidXNlSm9pbk9wdGlvbiIsImpvaW5Db25kaXRpb25UZXh0IiwiZ2VuZXJhdGVQcmV2aWV3IiwicmVxdWVzdCIsInVuZGVmaW5lZCIsInByZXZpZXdSZXN1bHQiLCJkYXRhIiwiaGFuZGxlU3RhcnRJbmdlc3Rpb24iLCJyZXNwb25zZSIsImluZ2VzdERhdGEiLCJoYW5kbGVSZXNldCIsImdldFN0ZXBOYW1lIiwic3RlcCIsImNhbk5hdmlnYXRlVG9TdGVwIiwiaGFuZGxlU3RlcENsaWNrIiwicmVuZGVyU3RlcCIsImRpdiIsImNsYXNzTmFtZSIsImgyIiwiYnV0dG9uIiwib25DbGljayIsInN2ZyIsInhtbG5zIiwiZmlsbCIsInZpZXdCb3giLCJzdHJva2UiLCJwYXRoIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwiaDMiLCJwIiwib25TdWJtaXQiLCJpbml0aWFsVmFsdWVzIiwidGl0bGUiLCJyZXF1aXJlRmlsZSIsImlzTXVsdGlUYWJsZUVuYWJsZWQiLCJvblN0YXJ0SW5nZXN0aW9uIiwib25CYWNrIiwicmVzdWx0cyIsIm9uUmVzZXQiLCJvbCIsIk9iamVjdCIsInZhbHVlcyIsImZpbHRlciIsIm1hcCIsImlzTmF2aWdhYmxlIiwibGkiLCJzcGFuIiwia2V5cyIsImxlbmd0aCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/page.tsx\n")); + +/***/ }) + +}); \ No newline at end of file diff --git a/frontend/.next/static/webpack/b64edb040b4f9041.webpack.hot-update.json b/frontend/.next/static/webpack/b64edb040b4f9041.webpack.hot-update.json new file mode 100644 index 000000000..5c8254659 --- /dev/null +++ b/frontend/.next/static/webpack/b64edb040b4f9041.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/b7a2417b787bfbd4.webpack.hot-update.json b/frontend/.next/static/webpack/b7a2417b787bfbd4.webpack.hot-update.json new file mode 100644 index 000000000..9b7ea1759 --- /dev/null +++ b/frontend/.next/static/webpack/b7a2417b787bfbd4.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cfont%5Cgoogle%5Ctarget.css%3F%7B%22path%22%3A%22app%5C%5Clayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cstyles%5Cglobals.css&server=false!"]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/ca4ac15e37314a15.webpack.hot-update.json b/frontend/.next/static/webpack/ca4ac15e37314a15.webpack.hot-update.json new file mode 100644 index 000000000..5c8254659 --- /dev/null +++ b/frontend/.next/static/webpack/ca4ac15e37314a15.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/d81b743d440182de.webpack.hot-update.json b/frontend/.next/static/webpack/d81b743d440182de.webpack.hot-update.json new file mode 100644 index 000000000..5c8254659 --- /dev/null +++ b/frontend/.next/static/webpack/d81b743d440182de.webpack.hot-update.json @@ -0,0 +1 @@ +{"c":["app/layout","webpack"],"r":[],"m":[]} \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.08d7cd0b86521b79.hot-update.js b/frontend/.next/static/webpack/webpack.08d7cd0b86521b79.hot-update.js new file mode 100644 index 000000000..49a2c9392 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.08d7cd0b86521b79.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "88d345d11344dba1"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.3e0d2b9137b01101.hot-update.js b/frontend/.next/static/webpack/webpack.3e0d2b9137b01101.hot-update.js new file mode 100644 index 000000000..c401ac6be --- /dev/null +++ b/frontend/.next/static/webpack/webpack.3e0d2b9137b01101.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "74ae37cb74317a05"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.5fd35373980064d5.hot-update.js b/frontend/.next/static/webpack/webpack.5fd35373980064d5.hot-update.js new file mode 100644 index 000000000..4aa82fc37 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.5fd35373980064d5.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "c31bdf059575c145"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.64009a6223611bea.hot-update.js b/frontend/.next/static/webpack/webpack.64009a6223611bea.hot-update.js new file mode 100644 index 000000000..f8c6f636c --- /dev/null +++ b/frontend/.next/static/webpack/webpack.64009a6223611bea.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "08d7cd0b86521b79"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.6d4aea1ecec90d38.hot-update.js b/frontend/.next/static/webpack/webpack.6d4aea1ecec90d38.hot-update.js new file mode 100644 index 000000000..615ed7c07 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.6d4aea1ecec90d38.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "64009a6223611bea"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.74ae37cb74317a05.hot-update.js b/frontend/.next/static/webpack/webpack.74ae37cb74317a05.hot-update.js new file mode 100644 index 000000000..6f72002b3 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.74ae37cb74317a05.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "7fa58435b2b3c498"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.7b7071978d64cdf2.hot-update.js b/frontend/.next/static/webpack/webpack.7b7071978d64cdf2.hot-update.js new file mode 100644 index 000000000..f6af4ece7 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.7b7071978d64cdf2.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "b7a2417b787bfbd4"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.7fa58435b2b3c498.hot-update.js b/frontend/.next/static/webpack/webpack.7fa58435b2b3c498.hot-update.js new file mode 100644 index 000000000..e530a08bb --- /dev/null +++ b/frontend/.next/static/webpack/webpack.7fa58435b2b3c498.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "6d4aea1ecec90d38"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.80f5edd8b588eb50.hot-update.js b/frontend/.next/static/webpack/webpack.80f5edd8b588eb50.hot-update.js new file mode 100644 index 000000000..7aaf7e508 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.80f5edd8b588eb50.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "9ca2c87546693f2c"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.88d345d11344dba1.hot-update.js b/frontend/.next/static/webpack/webpack.88d345d11344dba1.hot-update.js new file mode 100644 index 000000000..d76a0ad75 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.88d345d11344dba1.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "80f5edd8b588eb50"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.8d1411f117a1282e.hot-update.js b/frontend/.next/static/webpack/webpack.8d1411f117a1282e.hot-update.js new file mode 100644 index 000000000..5544c6299 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.8d1411f117a1282e.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "5fd35373980064d5"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.9ca2c87546693f2c.hot-update.js b/frontend/.next/static/webpack/webpack.9ca2c87546693f2c.hot-update.js new file mode 100644 index 000000000..87291ca43 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.9ca2c87546693f2c.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "ca4ac15e37314a15"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.b64edb040b4f9041.hot-update.js b/frontend/.next/static/webpack/webpack.b64edb040b4f9041.hot-update.js new file mode 100644 index 000000000..3d9949525 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.b64edb040b4f9041.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "8d1411f117a1282e"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.b7a2417b787bfbd4.hot-update.js b/frontend/.next/static/webpack/webpack.b7a2417b787bfbd4.hot-update.js new file mode 100644 index 000000000..c6533a370 --- /dev/null +++ b/frontend/.next/static/webpack/webpack.b7a2417b787bfbd4.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "3e0d2b9137b01101"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.ca4ac15e37314a15.hot-update.js b/frontend/.next/static/webpack/webpack.ca4ac15e37314a15.hot-update.js new file mode 100644 index 000000000..9b447a1cf --- /dev/null +++ b/frontend/.next/static/webpack/webpack.ca4ac15e37314a15.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "b64edb040b4f9041"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/static/webpack/webpack.d81b743d440182de.hot-update.js b/frontend/.next/static/webpack/webpack.d81b743d440182de.hot-update.js new file mode 100644 index 000000000..d9074b3fe --- /dev/null +++ b/frontend/.next/static/webpack/webpack.d81b743d440182de.hot-update.js @@ -0,0 +1,18 @@ +"use strict"; +/* + * ATTENTION: An "eval-source-map" devtool has been used. + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). + */ +self["webpackHotUpdate_N_E"]("webpack",{}, +/******/ function(__webpack_require__) { // webpackRuntimeModules +/******/ /* webpack/runtime/getFullHash */ +/******/ !function() { +/******/ __webpack_require__.h = function() { return "7b7071978d64cdf2"; } +/******/ }(); +/******/ +/******/ } +); \ No newline at end of file diff --git a/frontend/.next/trace b/frontend/.next/trace new file mode 100644 index 000000000..e7aeb7cc0 --- /dev/null +++ b/frontend/.next/trace @@ -0,0 +1,24 @@ +[{"name":"hot-reloader","duration":39,"timestamp":106059820957,"id":3,"tags":{"version":"14.1.3","isTurbopack":false},"startTime":1744820689782,"traceId":"cd18399fa4a84ab9"},{"name":"start","duration":1,"timestamp":106059821562,"id":4,"parentId":3,"tags":{},"startTime":1744820689783,"traceId":"cd18399fa4a84ab9"},{"name":"get-version-info","duration":1588608,"timestamp":106059821780,"id":5,"parentId":4,"tags":{},"startTime":1744820689783,"traceId":"cd18399fa4a84ab9"},{"name":"clean","duration":15238,"timestamp":106061410430,"id":6,"parentId":4,"tags":{},"startTime":1744820691372,"traceId":"cd18399fa4a84ab9"},{"name":"create-pages-mapping","duration":161,"timestamp":106061427522,"id":8,"parentId":7,"tags":{},"startTime":1744820691389,"traceId":"cd18399fa4a84ab9"},{"name":"create-entrypoints","duration":22148,"timestamp":106061427714,"id":9,"parentId":7,"tags":{},"startTime":1744820691389,"traceId":"cd18399fa4a84ab9"},{"name":"generate-webpack-config","duration":122370,"timestamp":106061449895,"id":10,"parentId":7,"tags":{},"startTime":1744820691411,"traceId":"cd18399fa4a84ab9"},{"name":"get-webpack-config","duration":144843,"timestamp":106061427440,"id":7,"parentId":4,"tags":{},"startTime":1744820691389,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":935,"timestamp":106061631034,"id":12,"parentId":11,"tags":{},"startTime":1744820691592,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":695,"timestamp":106061633914,"id":14,"parentId":13,"tags":{},"startTime":1744820691595,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":19,"timestamp":106061634735,"id":16,"parentId":13,"tags":{},"startTime":1744820691596,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":174,"timestamp":106061634822,"id":17,"parentId":13,"tags":{},"startTime":1744820691596,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":97,"timestamp":106061635056,"id":18,"parentId":13,"tags":{},"startTime":1744820691596,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":100,"timestamp":106061635289,"id":19,"parentId":13,"tags":{},"startTime":1744820691596,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":815,"timestamp":106061634691,"id":15,"parentId":13,"tags":{},"startTime":1744820691596,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":70,"timestamp":106061636212,"id":20,"parentId":13,"tags":{},"startTime":1744820691597,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":182,"timestamp":106061636304,"id":21,"parentId":13,"tags":{},"startTime":1744820691597,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":436,"timestamp":106061636683,"id":22,"parentId":13,"tags":{},"startTime":1744820691598,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":91,"timestamp":106061637119,"id":23,"parentId":13,"tags":{},"startTime":1744820691598,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":57,"timestamp":106061637191,"id":24,"parentId":13,"tags":{},"startTime":1744820691598,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":169,"timestamp":106061637256,"id":25,"parentId":13,"tags":{},"startTime":1744820691598,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":1058,"timestamp":106061729148,"id":27,"parentId":11,"tags":{},"startTime":1744820691690,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":1444,"timestamp":106061728785,"id":26,"parentId":11,"tags":{},"startTime":1744820691690,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":98060,"timestamp":106061633626,"id":13,"parentId":11,"tags":{},"startTime":1744820691595,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":105739,"timestamp":106061626296,"id":11,"parentId":3,"tags":{"name":"client"},"startTime":1744820691587,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":10159,"timestamp":106061732552,"id":28,"parentId":3,"tags":{},"startTime":1744820691694,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":1136,"timestamp":106061749579,"id":30,"parentId":29,"tags":{},"startTime":1744820691711,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":25,"timestamp":106061751404,"id":32,"parentId":31,"tags":{},"startTime":1744820691712,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":4,"timestamp":106061751456,"id":34,"parentId":31,"tags":{},"startTime":1744820691713,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":748,"timestamp":106061751514,"id":35,"parentId":31,"tags":{},"startTime":1744820691713,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":7,"timestamp":106061752310,"id":36,"parentId":31,"tags":{},"startTime":1744820691713,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":5,"timestamp":106061752371,"id":37,"parentId":31,"tags":{},"startTime":1744820691713,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":968,"timestamp":106061751451,"id":33,"parentId":31,"tags":{},"startTime":1744820691713,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":7,"timestamp":106061752517,"id":38,"parentId":31,"tags":{},"startTime":1744820691714,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":5,"timestamp":106061752533,"id":39,"parentId":31,"tags":{},"startTime":1744820691714,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":50,"timestamp":106061752578,"id":40,"parentId":31,"tags":{},"startTime":1744820691714,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":33,"timestamp":106061752628,"id":41,"parentId":31,"tags":{},"startTime":1744820691714,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":12,"timestamp":106061752654,"id":42,"parentId":31,"tags":{},"startTime":1744820691714,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":12,"timestamp":106061752673,"id":43,"parentId":31,"tags":{},"startTime":1744820691714,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":4264,"timestamp":106061751364,"id":31,"parentId":29,"tags":{},"startTime":1744820691712,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":6925,"timestamp":106061748834,"id":29,"parentId":3,"tags":{"name":"server"},"startTime":1744820691710,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":4598,"timestamp":106061755818,"id":44,"parentId":3,"tags":{},"startTime":1744820691717,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":160,"timestamp":106061763941,"id":46,"parentId":45,"tags":{},"startTime":1744820691725,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":19,"timestamp":106061764601,"id":48,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":3,"timestamp":106061764639,"id":50,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":7,"timestamp":106061764690,"id":51,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":4,"timestamp":106061764710,"id":52,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106061764729,"id":53,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":112,"timestamp":106061764634,"id":49,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":6,"timestamp":106061764819,"id":54,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":4,"timestamp":106061764832,"id":55,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":56,"timestamp":106061764870,"id":56,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":16,"timestamp":106061764925,"id":57,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":7,"timestamp":106061764937,"id":58,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":9,"timestamp":106061764948,"id":59,"parentId":47,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":825,"timestamp":106061764573,"id":47,"parentId":45,"tags":{},"startTime":1744820691726,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":2635,"timestamp":106061762797,"id":45,"parentId":3,"tags":{"name":"edge-server"},"startTime":1744820691724,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":2504,"timestamp":106061765480,"id":60,"parentId":3,"tags":{},"startTime":1744820691727,"traceId":"cd18399fa4a84ab9"}] +[{"name":"make","duration":196,"timestamp":106061994434,"id":65,"parentId":64,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":17,"timestamp":106061994849,"id":67,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":3,"timestamp":106061994881,"id":69,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":5,"timestamp":106061994896,"id":70,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":3,"timestamp":106061994911,"id":71,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":3,"timestamp":106061994926,"id":72,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":69,"timestamp":106061994877,"id":68,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":5,"timestamp":106061995006,"id":73,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":4,"timestamp":106061995018,"id":74,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":35,"timestamp":106061995041,"id":75,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":24,"timestamp":106061995077,"id":76,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":18,"timestamp":106061995085,"id":77,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":8,"timestamp":106061995107,"id":78,"parentId":66,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":181,"timestamp":106061995422,"id":80,"parentId":64,"tags":{},"startTime":1744820691957,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":224,"timestamp":106061995389,"id":79,"parentId":64,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":922,"timestamp":106061994827,"id":66,"parentId":64,"tags":{},"startTime":1744820691956,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":2116,"timestamp":106061993667,"id":64,"parentId":61,"tags":{"name":"client"},"startTime":1744820691955,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":9955,"timestamp":106061995805,"id":81,"parentId":61,"tags":{},"startTime":1744820691957,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":15280,"timestamp":106061991656,"id":61,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744820691953,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":320,"timestamp":106062009057,"id":83,"parentId":82,"tags":{},"startTime":1744820691970,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":39,"timestamp":106062009856,"id":85,"parentId":84,"tags":{},"startTime":1744820691971,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":4,"timestamp":106062009924,"id":87,"parentId":84,"tags":{},"startTime":1744820691971,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":39,"timestamp":106062010018,"id":88,"parentId":84,"tags":{},"startTime":1744820691971,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":5,"timestamp":106062010079,"id":89,"parentId":84,"tags":{},"startTime":1744820691971,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106062010123,"id":90,"parentId":84,"tags":{},"startTime":1744820691971,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":236,"timestamp":106062009918,"id":86,"parentId":84,"tags":{},"startTime":1744820691971,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":9,"timestamp":106062010287,"id":91,"parentId":84,"tags":{},"startTime":1744820691971,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":11,"timestamp":106062010306,"id":92,"parentId":84,"tags":{},"startTime":1744820691971,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":81,"timestamp":106062010347,"id":93,"parentId":84,"tags":{},"startTime":1744820691971,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":20,"timestamp":106062010428,"id":94,"parentId":84,"tags":{},"startTime":1744820691972,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":10,"timestamp":106062010442,"id":95,"parentId":84,"tags":{},"startTime":1744820691972,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":13,"timestamp":106062010457,"id":96,"parentId":84,"tags":{},"startTime":1744820691972,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":1133,"timestamp":106062009805,"id":84,"parentId":82,"tags":{},"startTime":1744820691971,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":2960,"timestamp":106062008156,"id":82,"parentId":62,"tags":{"name":"server"},"startTime":1744820691969,"traceId":"cd18399fa4a84ab9"},{"name":"setup-dev-bundler","duration":2467779,"timestamp":106059641796,"id":2,"parentId":1,"tags":{},"startTime":1744820689603,"traceId":"cd18399fa4a84ab9"},{"name":"run-instrumentation-hook","duration":65,"timestamp":106062148340,"id":98,"parentId":1,"tags":{},"startTime":1744820692109,"traceId":"cd18399fa4a84ab9"},{"name":"start-dev-server","duration":2846423,"timestamp":106059306027,"id":1,"tags":{"cpus":"20","platform":"win32","memory.freeMem":"3718152192","memory.totalMem":"16782422016","memory.heapSizeLimit":"8441036800","isTurbopack":false,"memory.rss":"162119680","memory.heapTotal":"108220416","memory.heapUsed":"85820904"},"startTime":1744820689267,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":144499,"timestamp":106062011205,"id":97,"parentId":62,"tags":{},"startTime":1744820691972,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":164468,"timestamp":106061991767,"id":62,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744820691953,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":188,"timestamp":106062158160,"id":100,"parentId":99,"tags":{},"startTime":1744820692119,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":24,"timestamp":106062158755,"id":102,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":5,"timestamp":106062158802,"id":104,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":8,"timestamp":106062158822,"id":105,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":5,"timestamp":106062158845,"id":106,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":12,"timestamp":106062158929,"id":107,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":165,"timestamp":106062158796,"id":103,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":8,"timestamp":106062159053,"id":108,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":6,"timestamp":106062159069,"id":109,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":48,"timestamp":106062159120,"id":110,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":16,"timestamp":106062159168,"id":111,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":7,"timestamp":106062159180,"id":112,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":135,"timestamp":106062159192,"id":113,"parentId":101,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":1023,"timestamp":106062158722,"id":101,"parentId":99,"tags":{},"startTime":1744820692120,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":2453,"timestamp":106062157333,"id":99,"parentId":63,"tags":{"name":"edge-server"},"startTime":1744820692118,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":17690,"timestamp":106062159813,"id":114,"parentId":63,"tags":{},"startTime":1744820692121,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-edge-server","duration":186599,"timestamp":106061991801,"id":63,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744820691953,"traceId":"cd18399fa4a84ab9"}] +[{"name":"next-swc-transform","duration":101325,"timestamp":106226745082,"id":123,"parentId":122,"tags":{},"startTime":1744820853584,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":102021,"timestamp":106226744416,"id":122,"parentId":121,"tags":{},"startTime":1744820853583,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":132615,"timestamp":106226736841,"id":121,"parentId":118,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"rsc"},"startTime":1744820853576,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":347124,"timestamp":106226525118,"id":120,"parentId":119,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744820853364,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":7310,"timestamp":106226907413,"id":133,"parentId":132,"tags":{},"startTime":1744820853746,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":7392,"timestamp":106226907348,"id":132,"parentId":129,"tags":{},"startTime":1744820853746,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":20014,"timestamp":106226905496,"id":129,"parentId":118,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\components\\FlatFileForm.tsx","layer":"ssr"},"startTime":1744820853744,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":18267,"timestamp":106226907342,"id":131,"parentId":130,"tags":{},"startTime":1744820853746,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":18525,"timestamp":106226907088,"id":130,"parentId":128,"tags":{},"startTime":1744820853746,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":27635,"timestamp":106226903768,"id":128,"parentId":118,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\components\\ClickHouseForm.tsx","layer":"ssr"},"startTime":1744820853743,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":460757,"timestamp":106226521394,"id":119,"parentId":118,"tags":{},"startTime":1744820853360,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":6151,"timestamp":106227007760,"id":135,"parentId":134,"tags":{},"startTime":1744820853847,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":15,"timestamp":106227014000,"id":137,"parentId":134,"tags":{},"startTime":1744820853853,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":8308,"timestamp":106227014070,"id":138,"parentId":134,"tags":{},"startTime":1744820853853,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":99,"timestamp":106227022453,"id":139,"parentId":134,"tags":{},"startTime":1744820853861,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":104,"timestamp":106227022619,"id":140,"parentId":134,"tags":{},"startTime":1744820853861,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":9841,"timestamp":106227013967,"id":136,"parentId":134,"tags":{},"startTime":1744820853853,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":15943,"timestamp":106227031065,"id":141,"parentId":134,"tags":{},"startTime":1744820853870,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":9513,"timestamp":106227047092,"id":142,"parentId":134,"tags":{},"startTime":1744820853886,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":6312,"timestamp":106227062417,"id":143,"parentId":134,"tags":{},"startTime":1744820853901,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":284,"timestamp":106227068727,"id":144,"parentId":134,"tags":{},"startTime":1744820853908,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":275,"timestamp":106227068961,"id":145,"parentId":134,"tags":{},"startTime":1744820853908,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":32441,"timestamp":106227069251,"id":146,"parentId":134,"tags":{},"startTime":1744820853908,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":100137,"timestamp":106227005603,"id":134,"parentId":118,"tags":{},"startTime":1744820853844,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":587302,"timestamp":106226520613,"id":118,"parentId":116,"tags":{"name":"server"},"startTime":1744820853359,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":37091,"timestamp":106227108238,"id":147,"parentId":116,"tags":{},"startTime":1744820853947,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":629258,"timestamp":106226517705,"id":116,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744820853357,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":164999,"timestamp":106227156998,"id":150,"parentId":149,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744820853996,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":23070,"timestamp":106227362070,"id":160,"parentId":159,"tags":{},"startTime":1744820854201,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":23174,"timestamp":106227361984,"id":159,"parentId":156,"tags":{},"startTime":1744820854201,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":30666,"timestamp":106227360939,"id":156,"parentId":148,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\components\\FlatFileForm.tsx","layer":"app-pages-browser"},"startTime":1744820854200,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":29729,"timestamp":106227361978,"id":158,"parentId":157,"tags":{},"startTime":1744820854201,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":29993,"timestamp":106227361718,"id":157,"parentId":155,"tags":{},"startTime":1744820854201,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":38324,"timestamp":106227357780,"id":155,"parentId":148,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\components\\ClickHouseForm.tsx","layer":"app-pages-browser"},"startTime":1744820854197,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":262716,"timestamp":106227157123,"id":154,"parentId":149,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744820853996,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":273289,"timestamp":106227157072,"id":151,"parentId":149,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744820853996,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":4757,"timestamp":106227429331,"id":163,"parentId":162,"tags":{},"startTime":1744820854268,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":242972,"timestamp":106227945426,"id":165,"parentId":164,"tags":{},"startTime":1744820854784,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":755673,"timestamp":106227434267,"id":164,"parentId":162,"tags":{},"startTime":1744820854273,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":42353,"timestamp":106228190153,"id":166,"parentId":162,"tags":{"astUsed":"true"},"startTime":1744820855029,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":811487,"timestamp":106227422542,"id":162,"parentId":161,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744820854261,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":1079103,"timestamp":106227157095,"id":152,"parentId":149,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744820853996,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":853279,"timestamp":106227406888,"id":161,"parentId":148,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744820854246,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":135,"timestamp":106228391244,"id":167,"parentId":161,"tags":{},"startTime":1744820855230,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":1234321,"timestamp":106227157109,"id":153,"parentId":149,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cfont%5Cgoogle%5Ctarget.css%3F%7B%22path%22%3A%22app%5C%5Clayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cstyles%5Cglobals.css&server=false!"},"startTime":1744820853996,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":1240663,"timestamp":106227150837,"id":149,"parentId":148,"tags":{},"startTime":1744820853990,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":5075,"timestamp":106228399510,"id":169,"parentId":168,"tags":{},"startTime":1744820855238,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":89,"timestamp":106228404648,"id":171,"parentId":168,"tags":{},"startTime":1744820855243,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":114,"timestamp":106228404845,"id":172,"parentId":168,"tags":{},"startTime":1744820855244,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":8,"timestamp":106228405017,"id":173,"parentId":168,"tags":{},"startTime":1744820855244,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":6,"timestamp":106228405070,"id":174,"parentId":168,"tags":{},"startTime":1744820855244,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":1726,"timestamp":106228404624,"id":170,"parentId":168,"tags":{},"startTime":1744820855243,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":5781,"timestamp":106228409956,"id":175,"parentId":168,"tags":{},"startTime":1744820855249,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":4719,"timestamp":106228415786,"id":176,"parentId":168,"tags":{},"startTime":1744820855255,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":11660,"timestamp":106228424056,"id":177,"parentId":168,"tags":{},"startTime":1744820855263,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":374,"timestamp":106228435715,"id":178,"parentId":168,"tags":{},"startTime":1744820855275,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":236,"timestamp":106228436069,"id":179,"parentId":168,"tags":{},"startTime":1744820855275,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":16644,"timestamp":106228436318,"id":180,"parentId":168,"tags":{},"startTime":1744820855275,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":771,"timestamp":106228455390,"id":182,"parentId":148,"tags":{},"startTime":1744820855294,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":1545,"timestamp":106228454633,"id":181,"parentId":148,"tags":{},"startTime":1744820855293,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":62456,"timestamp":106228397752,"id":168,"parentId":148,"tags":{},"startTime":1744820855237,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":1315441,"timestamp":106227149710,"id":148,"parentId":127,"tags":{"name":"client"},"startTime":1744820853989,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":19173,"timestamp":106228465295,"id":183,"parentId":127,"tags":{},"startTime":1744820855304,"traceId":"cd18399fa4a84ab9"},{"name":"compile-path","duration":1968371,"timestamp":106226517767,"id":117,"tags":{"trigger":"/","isTurbopack":false},"startTime":1744820853357,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":1603568,"timestamp":106226883462,"id":127,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744820853722,"traceId":"cd18399fa4a84ab9"}] +[{"name":"add-entry","duration":81018,"timestamp":106228583322,"id":187,"parentId":186,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744820855422,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":91196,"timestamp":106228583536,"id":191,"parentId":186,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744820855422,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":3359,"timestamp":106228671467,"id":194,"parentId":193,"tags":{},"startTime":1744820855510,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":66758,"timestamp":106228674944,"id":196,"parentId":195,"tags":{},"startTime":1744820855514,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":67336,"timestamp":106228674886,"id":195,"parentId":193,"tags":{},"startTime":1744820855514,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":17639,"timestamp":106228742287,"id":197,"parentId":193,"tags":{"astUsed":"true"},"startTime":1744820855581,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":91144,"timestamp":106228671154,"id":193,"parentId":192,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744820855510,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":187008,"timestamp":106228583425,"id":188,"parentId":186,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744820855422,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":118745,"timestamp":106228657255,"id":192,"parentId":185,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744820855496,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":99,"timestamp":106228778496,"id":198,"parentId":192,"tags":{},"startTime":1744820855617,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":195130,"timestamp":106228583493,"id":189,"parentId":186,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744820855422,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":196196,"timestamp":106228583513,"id":190,"parentId":186,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cfont%5Cgoogle%5Ctarget.css%3F%7B%22path%22%3A%22app%5C%5Clayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cstyles%5Cglobals.css&server=false!"},"startTime":1744820855422,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":197239,"timestamp":106228582512,"id":186,"parentId":185,"tags":{},"startTime":1744820855421,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1532,"timestamp":106228782639,"id":200,"parentId":199,"tags":{},"startTime":1744820855621,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":5,"timestamp":106228784211,"id":202,"parentId":199,"tags":{},"startTime":1744820855623,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":52,"timestamp":106228784295,"id":203,"parentId":199,"tags":{},"startTime":1744820855623,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":5,"timestamp":106228784382,"id":204,"parentId":199,"tags":{},"startTime":1744820855623,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106228784407,"id":205,"parentId":199,"tags":{},"startTime":1744820855623,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":780,"timestamp":106228784200,"id":201,"parentId":199,"tags":{},"startTime":1744820855623,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":418,"timestamp":106228786343,"id":206,"parentId":199,"tags":{},"startTime":1744820855625,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1175,"timestamp":106228786784,"id":207,"parentId":199,"tags":{},"startTime":1744820855626,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":3530,"timestamp":106228789169,"id":208,"parentId":199,"tags":{},"startTime":1744820855628,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":187,"timestamp":106228792698,"id":209,"parentId":199,"tags":{},"startTime":1744820855632,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":137,"timestamp":106228792872,"id":210,"parentId":199,"tags":{},"startTime":1744820855632,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":1758,"timestamp":106228793020,"id":211,"parentId":199,"tags":{},"startTime":1744820855632,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":67,"timestamp":106228796442,"id":213,"parentId":185,"tags":{},"startTime":1744820855635,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":148,"timestamp":106228796370,"id":212,"parentId":185,"tags":{},"startTime":1744820855635,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":16143,"timestamp":106228781584,"id":199,"parentId":185,"tags":{},"startTime":1744820855620,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":216063,"timestamp":106228581710,"id":185,"parentId":184,"tags":{"name":"client"},"startTime":1744820855421,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":12877,"timestamp":106228797805,"id":214,"parentId":184,"tags":{},"startTime":1744820855637,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":232980,"timestamp":106228579068,"id":184,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744820855418,"traceId":"cd18399fa4a84ab9"}] +[{"name":"add-entry","duration":10431,"timestamp":106294008481,"id":219,"parentId":218,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744820920848,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":16569,"timestamp":106294008743,"id":223,"parentId":218,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744820920848,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":3581,"timestamp":106294022156,"id":226,"parentId":225,"tags":{},"startTime":1744820920861,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":29400,"timestamp":106294008567,"id":220,"parentId":218,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744820920848,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":30262,"timestamp":106294008669,"id":221,"parentId":218,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744820920848,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":80771,"timestamp":106294025820,"id":228,"parentId":227,"tags":{},"startTime":1744820920865,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":81275,"timestamp":106294025782,"id":227,"parentId":225,"tags":{},"startTime":1744820920865,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":9327,"timestamp":106294107108,"id":229,"parentId":225,"tags":{"astUsed":"true"},"startTime":1744820920946,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":100139,"timestamp":106294021962,"id":225,"parentId":224,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744820920861,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":111762,"timestamp":106294015577,"id":224,"parentId":217,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744820920855,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":34,"timestamp":106294127476,"id":230,"parentId":224,"tags":{},"startTime":1744820920967,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":118847,"timestamp":106294008685,"id":222,"parentId":218,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cfont%5Cgoogle%5Ctarget.css%3F%7B%22path%22%3A%22app%5C%5Clayout.tsx%22%2C%22import%22%3A%22Inter%22%2C%22arguments%22%3A%5B%7B%22subsets%22%3A%5B%22latin%22%5D%7D%5D%2C%22variableName%22%3A%22inter%22%7D&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cstyles%5Cglobals.css&server=false!"},"startTime":1744820920848,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":120089,"timestamp":106294007471,"id":218,"parentId":217,"tags":{},"startTime":1744820920847,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1788,"timestamp":106294158770,"id":232,"parentId":231,"tags":{},"startTime":1744820920998,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":7,"timestamp":106294160604,"id":234,"parentId":231,"tags":{},"startTime":1744820921000,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":57,"timestamp":106294160629,"id":235,"parentId":231,"tags":{},"startTime":1744820921000,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":27,"timestamp":106294160712,"id":236,"parentId":231,"tags":{},"startTime":1744820921000,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":5,"timestamp":106294160761,"id":237,"parentId":231,"tags":{},"startTime":1744820921000,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":1135,"timestamp":106294160592,"id":233,"parentId":231,"tags":{},"startTime":1744820921000,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":610,"timestamp":106294163984,"id":238,"parentId":231,"tags":{},"startTime":1744820921003,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1664,"timestamp":106294164680,"id":239,"parentId":231,"tags":{},"startTime":1744820921004,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":4355,"timestamp":106294168513,"id":240,"parentId":231,"tags":{},"startTime":1744820921008,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":255,"timestamp":106294172863,"id":241,"parentId":231,"tags":{},"startTime":1744820921012,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":155,"timestamp":106294173103,"id":242,"parentId":231,"tags":{},"startTime":1744820921012,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":3049,"timestamp":106294173268,"id":243,"parentId":231,"tags":{},"startTime":1744820921012,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":204,"timestamp":106294177447,"id":245,"parentId":217,"tags":{},"startTime":1744820921017,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":283,"timestamp":106294177379,"id":244,"parentId":217,"tags":{},"startTime":1744820921017,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":22217,"timestamp":106294157234,"id":231,"parentId":217,"tags":{},"startTime":1744820920996,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":172763,"timestamp":106294006738,"id":217,"parentId":215,"tags":{"name":"client"},"startTime":1744820920846,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":15949,"timestamp":106294179530,"id":246,"parentId":215,"tags":{},"startTime":1744820921019,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":199218,"timestamp":106293997341,"id":215,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744820920837,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":1577,"timestamp":106294200268,"id":248,"parentId":247,"tags":{},"startTime":1744820921039,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":24,"timestamp":106294202411,"id":250,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":4,"timestamp":106294202456,"id":252,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":56,"timestamp":106294202523,"id":253,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":4,"timestamp":106294202596,"id":254,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106294202618,"id":255,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":191,"timestamp":106294202450,"id":251,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":11,"timestamp":106294202726,"id":256,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":8,"timestamp":106294202744,"id":257,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":58,"timestamp":106294202779,"id":258,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":18,"timestamp":106294202837,"id":259,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":10,"timestamp":106294202849,"id":260,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":13,"timestamp":106294202863,"id":261,"parentId":249,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":907,"timestamp":106294202376,"id":249,"parentId":247,"tags":{},"startTime":1744820921042,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":3847,"timestamp":106294199548,"id":247,"parentId":216,"tags":{"name":"server"},"startTime":1744820921039,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":5440,"timestamp":106294203432,"id":262,"parentId":216,"tags":{},"startTime":1744820921043,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":212351,"timestamp":106293997907,"id":216,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744820920837,"traceId":"cd18399fa4a84ab9"}] +[{"name":"handle-request","duration":67714757,"timestamp":106226502520,"id":115,"tags":{"url":"/","isTurbopack":false},"startTime":1744820853341,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":2,"timestamp":106294217351,"id":263,"parentId":115,"tags":{"url":"/","memory.rss":"331579392","memory.heapUsed":"159894496","memory.heapTotal":"180617216"},"startTime":1744820921057,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":1562,"timestamp":106294251763,"id":272,"parentId":271,"tags":{},"startTime":1744820921091,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2115,"timestamp":106294251223,"id":271,"parentId":270,"tags":{},"startTime":1744820921090,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":5362,"timestamp":106294250832,"id":270,"parentId":267,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"rsc"},"startTime":1744820921090,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":20326,"timestamp":106294236759,"id":269,"parentId":268,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744820921076,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx&server=true!","duration":5559,"timestamp":106294282772,"id":277,"parentId":267,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=true!","layer":"ssr"},"startTime":1744820921122,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2343,"timestamp":106294299129,"id":280,"parentId":279,"tags":{},"startTime":1744820921138,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2697,"timestamp":106294298840,"id":279,"parentId":278,"tags":{},"startTime":1744820921138,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":10507,"timestamp":106294298666,"id":278,"parentId":277,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"ssr"},"startTime":1744820921138,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":4893,"timestamp":106294312799,"id":282,"parentId":281,"tags":{},"startTime":1744820921152,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":5812,"timestamp":106294312674,"id":281,"parentId":278,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"ssr"},"startTime":1744820921152,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":1738,"timestamp":106294316939,"id":284,"parentId":283,"tags":{},"startTime":1744820921156,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":50819,"timestamp":106294317638,"id":286,"parentId":285,"tags":{},"startTime":1744820921157,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":83,"timestamp":106294368534,"id":289,"parentId":285,"tags":{},"startTime":1744820921208,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":52418,"timestamp":106294317083,"id":285,"parentId":278,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\api\\navigation.js","layer":"ssr"},"startTime":1744820921156,"traceId":"cd18399fa4a84ab9"},{"name":"font-loader","duration":522623,"timestamp":106294361708,"id":288,"parentId":287,"tags":{},"startTime":1744820921201,"traceId":"cd18399fa4a84ab9"},{"name":"postcss","duration":1545,"timestamp":106294884622,"id":290,"parentId":287,"tags":{},"startTime":1744820921724,"traceId":"cd18399fa4a84ab9"},{"name":"next-font-loader","duration":567406,"timestamp":106294318855,"id":287,"parentId":283,"tags":{},"startTime":1744820921158,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":8412,"timestamp":106294886212,"id":291,"parentId":283,"tags":{"astUsed":"true"},"startTime":1744820921725,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"}","duration":582112,"timestamp":106294313629,"id":283,"parentId":278,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\font\\google\\target.css?{\"path\":\"app\\\\layout.tsx\",\"import\":\"Inter\",\"arguments\":[{\"subsets\":[\"latin\"]}],\"variableName\":\"inter\"}","layer":"ssr"},"startTime":1744820921153,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":661205,"timestamp":106294234895,"id":268,"parentId":267,"tags":{},"startTime":1744820921074,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":3004,"timestamp":106294913811,"id":293,"parentId":292,"tags":{},"startTime":1744820921753,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":7,"timestamp":106294916874,"id":295,"parentId":292,"tags":{},"startTime":1744820921756,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":2228,"timestamp":106294916967,"id":296,"parentId":292,"tags":{},"startTime":1744820921756,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":9,"timestamp":106294919232,"id":297,"parentId":292,"tags":{},"startTime":1744820921758,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":6,"timestamp":106294919298,"id":298,"parentId":292,"tags":{},"startTime":1744820921758,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":3319,"timestamp":106294916861,"id":294,"parentId":292,"tags":{},"startTime":1744820921756,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":13160,"timestamp":106294921994,"id":299,"parentId":292,"tags":{},"startTime":1744820921761,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":4396,"timestamp":106294935194,"id":300,"parentId":292,"tags":{},"startTime":1744820921774,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":2101,"timestamp":106294942181,"id":301,"parentId":292,"tags":{},"startTime":1744820921781,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":148,"timestamp":106294944280,"id":302,"parentId":292,"tags":{},"startTime":1744820921783,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":99,"timestamp":106294944410,"id":303,"parentId":292,"tags":{},"startTime":1744820921784,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":4736,"timestamp":106294944517,"id":304,"parentId":292,"tags":{},"startTime":1744820921784,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":39495,"timestamp":106294912606,"id":292,"parentId":267,"tags":{},"startTime":1744820921752,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":718727,"timestamp":106294234543,"id":267,"parentId":265,"tags":{"name":"server"},"startTime":1744820921074,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":9904,"timestamp":106294953311,"id":305,"parentId":265,"tags":{},"startTime":1744820921792,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":730475,"timestamp":106294233330,"id":265,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744820921073,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx&server=false!","duration":1394,"timestamp":106294971881,"id":313,"parentId":311,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\next-flight-client-entry-loader.js?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!","layer":"app-pages-browser"},"startTime":1744820921811,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":6166,"timestamp":106294968710,"id":308,"parentId":307,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744820921808,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":9258,"timestamp":106294968800,"id":312,"parentId":307,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744820921808,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":9406,"timestamp":106294968769,"id":309,"parentId":307,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744820921808,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":9412,"timestamp":106294968789,"id":310,"parentId":307,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744820921808,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2507,"timestamp":106294977291,"id":316,"parentId":315,"tags":{},"startTime":1744820921816,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2623,"timestamp":106294977185,"id":315,"parentId":314,"tags":{},"startTime":1744820921816,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":12782,"timestamp":106294976884,"id":314,"parentId":313,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"app-pages-browser"},"startTime":1744820921816,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":13,"timestamp":106294992764,"id":318,"parentId":317,"tags":{},"startTime":1744820921832,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":54,"timestamp":106294992796,"id":319,"parentId":317,"tags":{},"startTime":1744820921832,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":1074,"timestamp":106294992153,"id":317,"parentId":314,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\api\\navigation.js","layer":"app-pages-browser"},"startTime":1744820921831,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":25852,"timestamp":106294968795,"id":311,"parentId":307,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744820921808,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":29011,"timestamp":106294965680,"id":307,"parentId":306,"tags":{},"startTime":1744820921805,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1220,"timestamp":106294996807,"id":321,"parentId":320,"tags":{},"startTime":1744820921836,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":5,"timestamp":106294998060,"id":323,"parentId":320,"tags":{},"startTime":1744820921837,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":38,"timestamp":106294998080,"id":324,"parentId":320,"tags":{},"startTime":1744820921837,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":5,"timestamp":106294998135,"id":325,"parentId":320,"tags":{},"startTime":1744820921837,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":3,"timestamp":106294998150,"id":326,"parentId":320,"tags":{},"startTime":1744820921837,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":848,"timestamp":106294998051,"id":322,"parentId":320,"tags":{},"startTime":1744820921837,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":316,"timestamp":106294999701,"id":327,"parentId":320,"tags":{},"startTime":1744820921839,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1605,"timestamp":106295000034,"id":328,"parentId":320,"tags":{},"startTime":1744820921839,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":3147,"timestamp":106295006164,"id":329,"parentId":320,"tags":{},"startTime":1744820921845,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":157,"timestamp":106295009309,"id":330,"parentId":320,"tags":{},"startTime":1744820921848,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":103,"timestamp":106295009455,"id":331,"parentId":320,"tags":{},"startTime":1744820921849,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":3079,"timestamp":106295009565,"id":332,"parentId":320,"tags":{},"startTime":1744820921849,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":93,"timestamp":106295013449,"id":334,"parentId":306,"tags":{},"startTime":1744820921853,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":163,"timestamp":106295013388,"id":333,"parentId":306,"tags":{},"startTime":1744820921853,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":18874,"timestamp":106294995913,"id":320,"parentId":306,"tags":{},"startTime":1744820921835,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":49486,"timestamp":106294965359,"id":306,"parentId":276,"tags":{"name":"client"},"startTime":1744820921805,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":11375,"timestamp":106295014880,"id":335,"parentId":276,"tags":{},"startTime":1744820921854,"traceId":"cd18399fa4a84ab9"},{"name":"compile-path","duration":793525,"timestamp":106294233445,"id":266,"tags":{"trigger":"/","isTurbopack":false},"startTime":1744820921073,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":769597,"timestamp":106294258184,"id":276,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744820921097,"traceId":"cd18399fa4a84ab9"}] +[{"name":"handle-request","duration":969087,"timestamp":106294230368,"id":264,"tags":{"url":"/","isTurbopack":false},"startTime":1744820921070,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106295199512,"id":336,"parentId":264,"tags":{"url":"/","memory.rss":"383422464","memory.heapUsed":"179358744","memory.heapTotal":"216231936"},"startTime":1744820922039,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":0,"timestamp":106295782849,"id":337,"parentId":3,"tags":{},"startTime":1744820922622,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":5382,"timestamp":106296692690,"id":342,"parentId":341,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744820923532,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2656,"timestamp":106296696892,"id":349,"parentId":348,"tags":{},"startTime":1744820923536,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2874,"timestamp":106296696684,"id":348,"parentId":347,"tags":{},"startTime":1744820923536,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":7458,"timestamp":106296696444,"id":347,"parentId":340,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"app-pages-browser"},"startTime":1744820923536,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13732,"timestamp":106296692772,"id":346,"parentId":341,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744820923532,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":15220,"timestamp":106296692756,"id":343,"parentId":341,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744820923532,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":16429,"timestamp":106296692763,"id":344,"parentId":341,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744820923532,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":1704,"timestamp":106296707551,"id":352,"parentId":351,"tags":{},"startTime":1744820923547,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":49969,"timestamp":106296709327,"id":354,"parentId":353,"tags":{},"startTime":1744820923549,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":50193,"timestamp":106296709295,"id":353,"parentId":351,"tags":{},"startTime":1744820923548,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":10935,"timestamp":106296759525,"id":355,"parentId":351,"tags":{"astUsed":"true"},"startTime":1744820923599,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":64931,"timestamp":106296707433,"id":351,"parentId":350,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744820923547,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":70209,"timestamp":106296706129,"id":350,"parentId":347,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744820923545,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":37,"timestamp":106296776466,"id":356,"parentId":350,"tags":{},"startTime":1744820923616,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":83754,"timestamp":106296692768,"id":345,"parentId":341,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744820923532,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":84321,"timestamp":106296692223,"id":341,"parentId":340,"tags":{},"startTime":1744820923531,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1223,"timestamp":106296779068,"id":358,"parentId":357,"tags":{},"startTime":1744820923618,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":6,"timestamp":106296780324,"id":360,"parentId":357,"tags":{},"startTime":1744820923620,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":48,"timestamp":106296780344,"id":361,"parentId":357,"tags":{},"startTime":1744820923620,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":5,"timestamp":106296780412,"id":362,"parentId":357,"tags":{},"startTime":1744820923620,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106296780434,"id":363,"parentId":357,"tags":{},"startTime":1744820923620,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":901,"timestamp":106296780315,"id":359,"parentId":357,"tags":{},"startTime":1744820923620,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":322,"timestamp":106296782030,"id":364,"parentId":357,"tags":{},"startTime":1744820923621,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1047,"timestamp":106296782368,"id":365,"parentId":357,"tags":{},"startTime":1744820923622,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":2778,"timestamp":106296784518,"id":366,"parentId":357,"tags":{},"startTime":1744820923624,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":123,"timestamp":106296787295,"id":367,"parentId":357,"tags":{},"startTime":1744820923626,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":97,"timestamp":106296787406,"id":368,"parentId":357,"tags":{},"startTime":1744820923627,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":1656,"timestamp":106296787510,"id":369,"parentId":357,"tags":{},"startTime":1744820923627,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":80,"timestamp":106296789881,"id":371,"parentId":340,"tags":{},"startTime":1744820923629,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":149,"timestamp":106296789820,"id":370,"parentId":340,"tags":{},"startTime":1744820923629,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":12995,"timestamp":106296778106,"id":357,"parentId":340,"tags":{},"startTime":1744820923617,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":99292,"timestamp":106296691849,"id":340,"parentId":338,"tags":{"name":"client"},"startTime":1744820923531,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":11284,"timestamp":106296791162,"id":372,"parentId":338,"tags":{},"startTime":1744820923630,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":122258,"timestamp":106296680921,"id":338,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744820923520,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":0,"timestamp":106296806460,"id":375,"parentId":3,"tags":{},"startTime":1744820923646,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":1752,"timestamp":106296816430,"id":379,"parentId":378,"tags":{},"startTime":1744820923656,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":1878,"timestamp":106296816317,"id":378,"parentId":377,"tags":{},"startTime":1744820923656,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":2922,"timestamp":106296816085,"id":377,"parentId":373,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"rsc"},"startTime":1744820923655,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":12436,"timestamp":106296808074,"id":376,"parentId":374,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744820923647,"traceId":"cd18399fa4a84ab9"},{"name":"client-hmr-latency","duration":141000,"timestamp":1744820923522000,"id":386,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./styles/globals.css"],"page":"/","isPageHidden":true},"startTime":1744820923664,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2886,"timestamp":106296822134,"id":385,"parentId":384,"tags":{},"startTime":1744820923661,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":3088,"timestamp":106296821941,"id":384,"parentId":383,"tags":{},"startTime":1744820923661,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":5574,"timestamp":106296821805,"id":383,"parentId":373,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"ssr"},"startTime":1744820923661,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":28250,"timestamp":106296805144,"id":374,"parentId":373,"tags":{},"startTime":1744820923644,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1762,"timestamp":106296842473,"id":388,"parentId":387,"tags":{},"startTime":1744820923682,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":5,"timestamp":106296844277,"id":390,"parentId":387,"tags":{},"startTime":1744820923683,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":1752,"timestamp":106296844300,"id":391,"parentId":387,"tags":{},"startTime":1744820923683,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":6,"timestamp":106296846086,"id":392,"parentId":387,"tags":{},"startTime":1744820923685,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106296846107,"id":393,"parentId":387,"tags":{},"startTime":1744820923685,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":2662,"timestamp":106296844266,"id":389,"parentId":387,"tags":{},"startTime":1744820923683,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":379,"timestamp":106296847886,"id":394,"parentId":387,"tags":{},"startTime":1744820923687,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1108,"timestamp":106296848283,"id":395,"parentId":387,"tags":{},"startTime":1744820923687,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":1464,"timestamp":106296850617,"id":396,"parentId":387,"tags":{},"startTime":1744820923690,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":774,"timestamp":106296852080,"id":397,"parentId":387,"tags":{},"startTime":1744820923691,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":201,"timestamp":106296852834,"id":398,"parentId":387,"tags":{},"startTime":1744820923692,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":4162,"timestamp":106296853045,"id":399,"parentId":387,"tags":{},"startTime":1744820923692,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":17285,"timestamp":106296841464,"id":387,"parentId":373,"tags":{},"startTime":1744820923681,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":55091,"timestamp":106296804846,"id":373,"parentId":339,"tags":{"name":"server"},"startTime":1744820923644,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":8112,"timestamp":106296859977,"id":400,"parentId":339,"tags":{},"startTime":1744820923699,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":187973,"timestamp":106296681205,"id":339,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744820923520,"traceId":"cd18399fa4a84ab9"}] +[{"name":"handle-request","duration":55183,"timestamp":106296877028,"id":401,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744820923716,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106296932267,"id":402,"parentId":401,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"388726784","memory.heapUsed":"194189560","memory.heapTotal":"225099776"},"startTime":1744820923771,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":23854,"timestamp":106304309784,"id":403,"tags":{"url":"/?_rsc=acgkz","isTurbopack":false},"startTime":1744820931149,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106304333713,"id":404,"parentId":403,"tags":{"url":"/?_rsc=acgkz","memory.rss":"328486912","memory.heapUsed":"163041880","memory.heapTotal":"172978176"},"startTime":1744820931173,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":25100,"timestamp":106304339527,"id":405,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744820931179,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106304364672,"id":406,"parentId":405,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"331206656","memory.heapUsed":"163907920","memory.heapTotal":"172978176"},"startTime":1744820931204,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":11775,"timestamp":106305479987,"id":407,"tags":{"url":"/?_rsc=acgkz","isTurbopack":false},"startTime":1744820932319,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106305491859,"id":408,"parentId":407,"tags":{"url":"/?_rsc=acgkz","memory.rss":"330391552","memory.heapUsed":"163034088","memory.heapTotal":"171143168"},"startTime":1744820932331,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":16772,"timestamp":106305498405,"id":409,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744820932338,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":2,"timestamp":106305515237,"id":410,"parentId":409,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"331304960","memory.heapUsed":"162996144","memory.heapTotal":"171143168"},"startTime":1744820932354,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":72857,"timestamp":106331767867,"id":417,"parentId":416,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744820958607,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":79578,"timestamp":106331767933,"id":420,"parentId":416,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744820958607,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":83868,"timestamp":106331767937,"id":421,"parentId":416,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744820958607,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":92803,"timestamp":106331767922,"id":418,"parentId":416,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744820958607,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":97630,"timestamp":106331767929,"id":419,"parentId":416,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744820958607,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":103807,"timestamp":106331767942,"id":422,"parentId":416,"tags":{"request":"next-client-pages-loader?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-error.js&page=%2Fnot-found!"},"startTime":1744820958607,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":105149,"timestamp":106331766691,"id":416,"parentId":415,"tags":{},"startTime":1744820958606,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":2983,"timestamp":106331877941,"id":424,"parentId":423,"tags":{},"startTime":1744820958717,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":14,"timestamp":106331881002,"id":426,"parentId":423,"tags":{},"startTime":1744820958720,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":249,"timestamp":106331881261,"id":427,"parentId":423,"tags":{},"startTime":1744820958720,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":14,"timestamp":106331881560,"id":428,"parentId":423,"tags":{},"startTime":1744820958721,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":17,"timestamp":106331881621,"id":429,"parentId":423,"tags":{},"startTime":1744820958721,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":6087,"timestamp":106331880978,"id":425,"parentId":423,"tags":{},"startTime":1744820958720,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":908,"timestamp":106331889416,"id":430,"parentId":423,"tags":{},"startTime":1744820958729,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":3246,"timestamp":106331890374,"id":431,"parentId":423,"tags":{},"startTime":1744820958730,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":9640,"timestamp":106331900891,"id":432,"parentId":423,"tags":{},"startTime":1744820958740,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":389,"timestamp":106331910529,"id":433,"parentId":423,"tags":{},"startTime":1744820958750,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":220,"timestamp":106331910891,"id":434,"parentId":423,"tags":{},"startTime":1744820958750,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":7792,"timestamp":106331911132,"id":435,"parentId":423,"tags":{},"startTime":1744820958750,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":338,"timestamp":106331923438,"id":437,"parentId":415,"tags":{},"startTime":1744820958763,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":495,"timestamp":106331923316,"id":436,"parentId":415,"tags":{},"startTime":1744820958763,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":51475,"timestamp":106331875517,"id":423,"parentId":415,"tags":{},"startTime":1744820958715,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":160795,"timestamp":106331766335,"id":415,"parentId":412,"tags":{"name":"client"},"startTime":1744820958606,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":31554,"timestamp":106331927207,"id":438,"parentId":412,"tags":{},"startTime":1744820958766,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":196337,"timestamp":106331764105,"id":412,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744820958603,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":64428,"timestamp":106331969665,"id":442,"parentId":440,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744820958809,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":68594,"timestamp":106331969573,"id":441,"parentId":440,"tags":{"request":"next-app-loader?name=app%2Fnot-found&page=%2Fnot-found&appPaths=&pagePath=node_modules%2Fnext%2Fdist%2Fclient%2Fcomponents%2Fnot-found-error.js&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744820958809,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":93600,"timestamp":106331964318,"id":440,"parentId":439,"tags":{},"startTime":1744820958804,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":2901,"timestamp":106332074424,"id":449,"parentId":448,"tags":{},"startTime":1744820958914,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":14,"timestamp":106332077422,"id":451,"parentId":448,"tags":{},"startTime":1744820958917,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":7967,"timestamp":106332077588,"id":452,"parentId":448,"tags":{},"startTime":1744820958917,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":13,"timestamp":106332085619,"id":453,"parentId":448,"tags":{},"startTime":1744820958925,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":13,"timestamp":106332085660,"id":454,"parentId":448,"tags":{},"startTime":1744820958925,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":9505,"timestamp":106332077404,"id":450,"parentId":448,"tags":{},"startTime":1744820958917,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":346,"timestamp":106332088610,"id":455,"parentId":448,"tags":{},"startTime":1744820958928,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":3787,"timestamp":106332088975,"id":456,"parentId":448,"tags":{},"startTime":1744820958928,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":5048,"timestamp":106332095225,"id":457,"parentId":448,"tags":{},"startTime":1744820958934,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":327,"timestamp":106332100271,"id":458,"parentId":448,"tags":{},"startTime":1744820958939,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":175,"timestamp":106332100563,"id":459,"parentId":448,"tags":{},"startTime":1744820958940,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":8008,"timestamp":106332100755,"id":460,"parentId":448,"tags":{},"startTime":1744820958940,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":41462,"timestamp":106332072771,"id":448,"parentId":439,"tags":{},"startTime":1744820958912,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":153475,"timestamp":106331963695,"id":439,"parentId":414,"tags":{"name":"server"},"startTime":1744820958803,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":22116,"timestamp":106332117284,"id":461,"parentId":414,"tags":{},"startTime":1744820958956,"traceId":"cd18399fa4a84ab9"},{"name":"compile-path","duration":377239,"timestamp":106331764138,"id":413,"tags":{"trigger":"/not-found","isTurbopack":false},"startTime":1744820958603,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":378732,"timestamp":106331764175,"id":414,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744820958603,"traceId":"cd18399fa4a84ab9"}] +[{"name":"handle-request","duration":661499,"timestamp":106331758949,"id":411,"tags":{"url":"/about","isTurbopack":false},"startTime":1744820958598,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":4,"timestamp":106332420584,"id":462,"parentId":411,"tags":{"url":"/about","memory.rss":"373522432","memory.heapUsed":"191443424","memory.heapTotal":"220061696"},"startTime":1744820959260,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":2,"timestamp":106332950546,"id":463,"parentId":3,"tags":{},"startTime":1744820959790,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":115990,"timestamp":106338569237,"id":464,"tags":{"url":"/","isTurbopack":false},"startTime":1744820965408,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":2,"timestamp":106338685284,"id":465,"parentId":464,"tags":{"url":"/","memory.rss":"383664128","memory.heapUsed":"189366384","memory.heapTotal":"224784384"},"startTime":1744820965524,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":1,"timestamp":106339184565,"id":466,"parentId":3,"tags":{},"startTime":1744820966024,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13944,"timestamp":106401453295,"id":471,"parentId":470,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821028293,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":8753,"timestamp":106401461615,"id":478,"parentId":477,"tags":{},"startTime":1744821028301,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":9379,"timestamp":106401461003,"id":477,"parentId":476,"tags":{},"startTime":1744821028300,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":30993,"timestamp":106401460570,"id":476,"parentId":469,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page.tsx","layer":"app-pages-browser"},"startTime":1744821028300,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":42364,"timestamp":106401453414,"id":475,"parentId":470,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744821028293,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":4024,"timestamp":106401493264,"id":481,"parentId":480,"tags":{},"startTime":1744821028333,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":59424,"timestamp":106401453396,"id":472,"parentId":470,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744821028293,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":115460,"timestamp":106401497462,"id":483,"parentId":482,"tags":{},"startTime":1744821028337,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":116480,"timestamp":106401497387,"id":482,"parentId":480,"tags":{},"startTime":1744821028337,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":16667,"timestamp":106401613957,"id":484,"parentId":480,"tags":{"astUsed":"true"},"startTime":1744821028453,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":139666,"timestamp":106401492867,"id":480,"parentId":479,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744821028332,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":177108,"timestamp":106401465246,"id":479,"parentId":469,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744821028305,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":112,"timestamp":106401644915,"id":485,"parentId":479,"tags":{},"startTime":1744821028484,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":191730,"timestamp":106401453410,"id":474,"parentId":470,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744821028293,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":290278,"timestamp":106401453405,"id":473,"parentId":470,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744821028293,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":291352,"timestamp":106401452432,"id":470,"parentId":469,"tags":{},"startTime":1744821028292,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1510,"timestamp":106401747504,"id":487,"parentId":486,"tags":{},"startTime":1744821028587,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":21,"timestamp":106401749129,"id":489,"parentId":486,"tags":{},"startTime":1744821028589,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":94,"timestamp":106401749222,"id":490,"parentId":486,"tags":{},"startTime":1744821028589,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":20,"timestamp":106401749374,"id":491,"parentId":486,"tags":{},"startTime":1744821028589,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":17,"timestamp":106401749445,"id":492,"parentId":486,"tags":{},"startTime":1744821028589,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":1316,"timestamp":106401749086,"id":488,"parentId":486,"tags":{},"startTime":1744821028589,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":533,"timestamp":106401751711,"id":493,"parentId":486,"tags":{},"startTime":1744821028591,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":2245,"timestamp":106401752306,"id":494,"parentId":486,"tags":{},"startTime":1744821028592,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":6211,"timestamp":106401756500,"id":495,"parentId":486,"tags":{},"startTime":1744821028596,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":270,"timestamp":106401762709,"id":496,"parentId":486,"tags":{},"startTime":1744821028602,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":161,"timestamp":106401762962,"id":497,"parentId":486,"tags":{},"startTime":1744821028602,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":6504,"timestamp":106401763133,"id":498,"parentId":486,"tags":{},"startTime":1744821028603,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":418,"timestamp":106401771758,"id":500,"parentId":469,"tags":{},"startTime":1744821028611,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":748,"timestamp":106401771441,"id":499,"parentId":469,"tags":{},"startTime":1744821028611,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":27606,"timestamp":106401746398,"id":486,"parentId":469,"tags":{},"startTime":1744821028586,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":323638,"timestamp":106401450443,"id":469,"parentId":467,"tags":{"name":"client"},"startTime":1744821028290,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":13230,"timestamp":106401774204,"id":501,"parentId":467,"tags":{},"startTime":1744821028614,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":361680,"timestamp":106401427421,"id":467,"parentId":3,"tags":{"trigger":"app/page.tsx"},"startTime":1744821028267,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":0,"timestamp":106401794572,"id":504,"parentId":3,"tags":{},"startTime":1744821028634,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2350,"timestamp":106401807871,"id":508,"parentId":507,"tags":{},"startTime":1744821028647,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2601,"timestamp":106401807642,"id":507,"parentId":506,"tags":{},"startTime":1744821028647,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":5434,"timestamp":106401807327,"id":506,"parentId":502,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page.tsx","layer":"rsc"},"startTime":1744821028647,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":18148,"timestamp":106401796403,"id":505,"parentId":503,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821028636,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":4329,"timestamp":106401818152,"id":514,"parentId":513,"tags":{},"startTime":1744821028658,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":4472,"timestamp":106401818024,"id":513,"parentId":512,"tags":{},"startTime":1744821028657,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":15158,"timestamp":106401817828,"id":512,"parentId":502,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page.tsx","layer":"ssr"},"startTime":1744821028657,"traceId":"cd18399fa4a84ab9"},{"name":"client-hmr-latency","duration":415000,"timestamp":1744821028269000,"id":515,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-error.js&page=%2Fnot-found!","(app-pages-browser)/./node_modules/next/dist/client/components/not-found-error.js","(app-pages-browser)/./styles/globals.css","(app-pages-browser)/./app/page.tsx"],"page":"/","isPageHidden":true},"startTime":1744821028700,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":135351,"timestamp":106401792697,"id":503,"parentId":502,"tags":{},"startTime":1744821028632,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1366,"timestamp":106401944997,"id":517,"parentId":516,"tags":{},"startTime":1744821028784,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":5,"timestamp":106401946407,"id":519,"parentId":516,"tags":{},"startTime":1744821028786,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":2107,"timestamp":106401946521,"id":520,"parentId":516,"tags":{},"startTime":1744821028786,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":10,"timestamp":106401948710,"id":521,"parentId":516,"tags":{},"startTime":1744821028788,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":7,"timestamp":106401948772,"id":522,"parentId":516,"tags":{},"startTime":1744821028788,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":3331,"timestamp":106401946396,"id":518,"parentId":516,"tags":{},"startTime":1744821028786,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":466,"timestamp":106401951067,"id":523,"parentId":516,"tags":{},"startTime":1744821028790,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":2344,"timestamp":106401951567,"id":524,"parentId":516,"tags":{},"startTime":1744821028791,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":2505,"timestamp":106401956060,"id":525,"parentId":516,"tags":{},"startTime":1744821028795,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":195,"timestamp":106401958563,"id":526,"parentId":516,"tags":{},"startTime":1744821028798,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":105,"timestamp":106401958737,"id":527,"parentId":516,"tags":{},"startTime":1744821028798,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":4831,"timestamp":106401958849,"id":528,"parentId":516,"tags":{},"startTime":1744821028798,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":21782,"timestamp":106401943837,"id":516,"parentId":502,"tags":{},"startTime":1744821028783,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":174863,"timestamp":106401791975,"id":502,"parentId":468,"tags":{"name":"server"},"startTime":1744821028631,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":11293,"timestamp":106401966921,"id":529,"parentId":468,"tags":{},"startTime":1744821028806,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":552284,"timestamp":106401428299,"id":468,"parentId":3,"tags":{"trigger":"app/page.tsx"},"startTime":1744821028268,"traceId":"cd18399fa4a84ab9"}] +[{"name":"handle-request","duration":83548,"timestamp":106401988096,"id":530,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744821028828,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":2,"timestamp":106402071704,"id":531,"parentId":530,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"483725312","memory.heapUsed":"205426456","memory.heapTotal":"240349184"},"startTime":1744821028911,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":5536,"timestamp":106404866933,"id":536,"parentId":535,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821031706,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":8178,"timestamp":106404867016,"id":540,"parentId":535,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744821031706,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":867,"timestamp":106404874601,"id":546,"parentId":545,"tags":{},"startTime":1744821031714,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":9818,"timestamp":106404870932,"id":543,"parentId":542,"tags":{},"startTime":1744821031710,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":10044,"timestamp":106404870720,"id":542,"parentId":541,"tags":{},"startTime":1744821031710,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":17701,"timestamp":106404870420,"id":541,"parentId":534,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page.tsx","layer":"app-pages-browser"},"startTime":1744821031710,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":21972,"timestamp":106404867000,"id":537,"parentId":535,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744821031706,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":65538,"timestamp":106404875582,"id":548,"parentId":547,"tags":{},"startTime":1744821031715,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":65958,"timestamp":106404875524,"id":547,"parentId":545,"tags":{},"startTime":1744821031715,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":11883,"timestamp":106404941530,"id":549,"parentId":545,"tags":{"astUsed":"true"},"startTime":1744821031781,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":80532,"timestamp":106404874394,"id":545,"parentId":544,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744821031714,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":87430,"timestamp":106404872004,"id":544,"parentId":534,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744821031711,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":33,"timestamp":106404959576,"id":550,"parentId":544,"tags":{},"startTime":1744821031799,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":92640,"timestamp":106404867012,"id":539,"parentId":535,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744821031706,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":93522,"timestamp":106404867008,"id":538,"parentId":535,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744821031706,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":94128,"timestamp":106404866428,"id":535,"parentId":534,"tags":{},"startTime":1744821031706,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":910,"timestamp":106404963055,"id":552,"parentId":551,"tags":{},"startTime":1744821031802,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":4,"timestamp":106404963996,"id":554,"parentId":551,"tags":{},"startTime":1744821031803,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":46,"timestamp":106404964083,"id":555,"parentId":551,"tags":{},"startTime":1744821031804,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":5,"timestamp":106404964149,"id":556,"parentId":551,"tags":{},"startTime":1744821031804,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106404964171,"id":557,"parentId":551,"tags":{},"startTime":1744821031804,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":1037,"timestamp":106404963989,"id":553,"parentId":551,"tags":{},"startTime":1744821031803,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":315,"timestamp":106404965784,"id":558,"parentId":551,"tags":{},"startTime":1744821031805,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1002,"timestamp":106404966115,"id":559,"parentId":551,"tags":{},"startTime":1744821031806,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":6486,"timestamp":106404968153,"id":560,"parentId":551,"tags":{},"startTime":1744821031808,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":153,"timestamp":106404974637,"id":561,"parentId":551,"tags":{},"startTime":1744821031814,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":144,"timestamp":106404974779,"id":562,"parentId":551,"tags":{},"startTime":1744821031814,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":1603,"timestamp":106404974932,"id":563,"parentId":551,"tags":{},"startTime":1744821031814,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":84,"timestamp":106404977488,"id":565,"parentId":534,"tags":{},"startTime":1744821031817,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":155,"timestamp":106404977424,"id":564,"parentId":534,"tags":{},"startTime":1744821031817,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":16215,"timestamp":106404962159,"id":551,"parentId":534,"tags":{},"startTime":1744821031802,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":112315,"timestamp":106404866093,"id":534,"parentId":532,"tags":{"name":"client"},"startTime":1744821031706,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":9613,"timestamp":106404978432,"id":566,"parentId":532,"tags":{},"startTime":1744821031818,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":143780,"timestamp":106404845153,"id":532,"parentId":3,"tags":{"trigger":"app/page.tsx"},"startTime":1744821031685,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":0,"timestamp":106404991735,"id":569,"parentId":3,"tags":{},"startTime":1744821031831,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2215,"timestamp":106405000035,"id":573,"parentId":572,"tags":{},"startTime":1744821031839,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2364,"timestamp":106404999908,"id":572,"parentId":571,"tags":{},"startTime":1744821031839,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":3716,"timestamp":106404999650,"id":571,"parentId":567,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page.tsx","layer":"rsc"},"startTime":1744821031839,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":11462,"timestamp":106404993038,"id":570,"parentId":568,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821031832,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":3650,"timestamp":106405006250,"id":579,"parentId":578,"tags":{},"startTime":1744821031846,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":3795,"timestamp":106405006123,"id":578,"parentId":577,"tags":{},"startTime":1744821031846,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":8392,"timestamp":106405005975,"id":577,"parentId":567,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\page.tsx","layer":"ssr"},"startTime":1744821031845,"traceId":"cd18399fa4a84ab9"},{"name":"client-hmr-latency","duration":165000,"timestamp":1744821031686000,"id":580,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./styles/globals.css"],"page":"/","isPageHidden":true},"startTime":1744821031855,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":33386,"timestamp":106404990627,"id":568,"parentId":567,"tags":{},"startTime":1744821031830,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":935,"timestamp":106405030388,"id":582,"parentId":581,"tags":{},"startTime":1744821031870,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":5,"timestamp":106405031361,"id":584,"parentId":581,"tags":{},"startTime":1744821031871,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":1686,"timestamp":106405031456,"id":585,"parentId":581,"tags":{},"startTime":1744821031871,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":8,"timestamp":106405033179,"id":586,"parentId":581,"tags":{},"startTime":1744821031873,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":5,"timestamp":106405033202,"id":587,"parentId":581,"tags":{},"startTime":1744821031873,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":2351,"timestamp":106405031352,"id":583,"parentId":581,"tags":{},"startTime":1744821031871,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":399,"timestamp":106405034552,"id":588,"parentId":581,"tags":{},"startTime":1744821031874,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1365,"timestamp":106405034969,"id":589,"parentId":581,"tags":{},"startTime":1744821031874,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":1279,"timestamp":106405039820,"id":590,"parentId":581,"tags":{},"startTime":1744821031879,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":106,"timestamp":106405041097,"id":591,"parentId":581,"tags":{},"startTime":1744821031881,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":89,"timestamp":106405041189,"id":592,"parentId":581,"tags":{},"startTime":1744821031881,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":425,"timestamp":106405041284,"id":593,"parentId":581,"tags":{},"startTime":1744821031881,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":13704,"timestamp":106405029341,"id":581,"parentId":567,"tags":{},"startTime":1744821031869,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":54007,"timestamp":106404990132,"id":567,"parentId":533,"tags":{"name":"server"},"startTime":1744821031830,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":6814,"timestamp":106405044179,"id":594,"parentId":533,"tags":{},"startTime":1744821031884,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":206582,"timestamp":106404845465,"id":533,"parentId":3,"tags":{"trigger":"app/page.tsx"},"startTime":1744821031685,"traceId":"cd18399fa4a84ab9"}] +[{"name":"handle-request","duration":72467,"timestamp":106405057185,"id":595,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744821031897,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106405129716,"id":596,"parentId":595,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"502558720","memory.heapUsed":"230768048","memory.heapTotal":"257617920"},"startTime":1744821031969,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":112050,"timestamp":106407228352,"id":597,"tags":{"url":"/","isTurbopack":false},"startTime":1744821034068,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106407340443,"id":598,"parentId":597,"tags":{"url":"/","memory.rss":"509489152","memory.heapUsed":"229500312","memory.heapTotal":"264847360"},"startTime":1744821034180,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":1,"timestamp":106407863812,"id":599,"parentId":3,"tags":{},"startTime":1744821034703,"traceId":"cd18399fa4a84ab9"},{"name":"next-client-pages-loader","duration":408,"timestamp":106463172340,"id":620,"parentId":619,"tags":{"absolutePagePath":"next/dist/pages/_app"},"startTime":1744821090012,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!","duration":10769,"timestamp":106463166567,"id":619,"parentId":610,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\next-client-pages-loader.js?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!","layer":null},"startTime":1744821090006,"traceId":"cd18399fa4a84ab9"},{"name":"next-client-pages-loader","duration":59,"timestamp":106463177542,"id":622,"parentId":621,"tags":{"absolutePagePath":"next/dist/pages/_error"},"startTime":1744821090017,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!","duration":997,"timestamp":106463177431,"id":621,"parentId":612,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\next-client-pages-loader.js?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!","layer":null},"startTime":1744821090017,"traceId":"cd18399fa4a84ab9"},{"name":"next-client-pages-loader","duration":93,"timestamp":106463178555,"id":624,"parentId":623,"tags":{"absolutePagePath":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\pages\\_error.js"},"startTime":1744821090018,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js&page=%2F_error!","duration":1119,"timestamp":106463178469,"id":623,"parentId":616,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&page=%2F_error!","layer":null},"startTime":1744821090018,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":41185,"timestamp":106463147881,"id":608,"parentId":605,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821089987,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":26659,"timestamp":106463166451,"id":618,"parentId":617,"tags":{},"startTime":1744821090006,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":32751,"timestamp":106463164354,"id":617,"parentId":606,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js","layer":null},"startTime":1744821090004,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":51403,"timestamp":106463148000,"id":614,"parentId":605,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744821089987,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":55782,"timestamp":106463148139,"id":615,"parentId":605,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744821089988,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":59731,"timestamp":106463147900,"id":609,"parentId":605,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744821089987,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":66260,"timestamp":106463147983,"id":613,"parentId":605,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744821089987,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":9315,"timestamp":106463214702,"id":630,"parentId":629,"tags":{},"startTime":1744821090054,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":9754,"timestamp":106463214288,"id":629,"parentId":625,"tags":{},"startTime":1744821090054,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":19897,"timestamp":106463213704,"id":625,"parentId":607,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\next-dev.js","layer":null},"startTime":1744821090053,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":18469,"timestamp":106463215415,"id":636,"parentId":635,"tags":{},"startTime":1744821090055,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":18755,"timestamp":106463215143,"id":635,"parentId":628,"tags":{},"startTime":1744821090055,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":29092,"timestamp":106463214132,"id":628,"parentId":619,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\pages\\_app.js","layer":null},"startTime":1744821090054,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":32037,"timestamp":106463214998,"id":634,"parentId":633,"tags":{},"startTime":1744821090054,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":32169,"timestamp":106463214888,"id":633,"parentId":627,"tags":{},"startTime":1744821090054,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":40345,"timestamp":106463214037,"id":627,"parentId":623,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\pages\\_error.js","layer":null},"startTime":1744821090053,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":39687,"timestamp":106463214870,"id":632,"parentId":631,"tags":{},"startTime":1744821090054,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":39851,"timestamp":106463214721,"id":631,"parentId":626,"tags":{},"startTime":1744821090054,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":52587,"timestamp":106463213933,"id":626,"parentId":611,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\router.js","layer":null},"startTime":1744821090053,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":4666,"timestamp":106463279385,"id":645,"parentId":644,"tags":{},"startTime":1744821090119,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":4995,"timestamp":106463279083,"id":644,"parentId":639,"tags":{},"startTime":1744821090118,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":13333,"timestamp":106463277884,"id":639,"parentId":625,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\setup-hydration-warning.js","layer":null},"startTime":1744821090117,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":12562,"timestamp":106463278813,"id":641,"parentId":640,"tags":{},"startTime":1744821090118,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":13334,"timestamp":106463278056,"id":640,"parentId":637,"tags":{},"startTime":1744821090117,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":19124,"timestamp":106463277531,"id":637,"parentId":625,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\webpack.js","layer":null},"startTime":1744821090117,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":18126,"timestamp":106463279056,"id":643,"parentId":642,"tags":{},"startTime":1744821090118,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":18325,"timestamp":106463278888,"id":642,"parentId":638,"tags":{},"startTime":1744821090118,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":29762,"timestamp":106463277770,"id":638,"parentId":625,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\page-bootstrap.js","layer":null},"startTime":1744821090117,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":30668,"timestamp":106463283499,"id":652,"parentId":651,"tags":{},"startTime":1744821090123,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":30874,"timestamp":106463283318,"id":651,"parentId":650,"tags":{},"startTime":1744821090123,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":58553,"timestamp":106463283045,"id":650,"parentId":625,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\index.js","layer":null},"startTime":1744821090122,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":44604,"timestamp":106463310066,"id":656,"parentId":655,"tags":{},"startTime":1744821090149,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":44774,"timestamp":106463309921,"id":655,"parentId":653,"tags":{},"startTime":1744821090149,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":48090,"timestamp":106463309199,"id":653,"parentId":626,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\with-router.js","layer":null},"startTime":1744821090149,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":47222,"timestamp":106463310165,"id":658,"parentId":657,"tags":{},"startTime":1744821090150,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":47312,"timestamp":106463310085,"id":657,"parentId":654,"tags":{},"startTime":1744821090149,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":50897,"timestamp":106463309401,"id":654,"parentId":625,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\dev\\hot-middleware-client.js","layer":null},"startTime":1744821090149,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":87027,"timestamp":106463282992,"id":649,"parentId":648,"tags":{},"startTime":1744821090122,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":90856,"timestamp":106463282937,"id":648,"parentId":617,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\internal\\helpers.js","layer":null},"startTime":1744821090122,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":90994,"timestamp":106463282873,"id":647,"parentId":646,"tags":{},"startTime":1744821090122,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":92092,"timestamp":106463282756,"id":646,"parentId":617,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\react-refresh\\runtime.js","layer":null},"startTime":1744821090122,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":14254,"timestamp":106463367701,"id":670,"parentId":669,"tags":{},"startTime":1744821090207,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":14361,"timestamp":106463367619,"id":669,"parentId":663,"tags":{},"startTime":1744821090207,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":17306,"timestamp":106463366745,"id":663,"parentId":626,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router-context.shared-runtime.js","layer":null},"startTime":1744821090206,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":19031,"timestamp":106463367511,"id":666,"parentId":665,"tags":{},"startTime":1744821090207,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":19214,"timestamp":106463367352,"id":665,"parentId":661,"tags":{},"startTime":1744821090207,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":26004,"timestamp":106463366407,"id":661,"parentId":627,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\head.js","layer":null},"startTime":1744821090206,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":25010,"timestamp":106463367603,"id":668,"parentId":667,"tags":{},"startTime":1744821090207,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":25108,"timestamp":106463367526,"id":667,"parentId":662,"tags":{},"startTime":1744821090207,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":32405,"timestamp":106463366601,"id":662,"parentId":628,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\utils.js","layer":null},"startTime":1744821090206,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":44391,"timestamp":106463367775,"id":672,"parentId":671,"tags":{},"startTime":1744821090207,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":44476,"timestamp":106463367716,"id":671,"parentId":664,"tags":{},"startTime":1744821090207,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":95797,"timestamp":106463366910,"id":664,"parentId":626,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\router.js","layer":null},"startTime":1744821090206,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":58814,"timestamp":106463407991,"id":675,"parentId":674,"tags":{},"startTime":1744821090247,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":58934,"timestamp":106463407895,"id":674,"parentId":673,"tags":{},"startTime":1744821090247,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":62682,"timestamp":106463407187,"id":673,"parentId":638,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\dev\\on-demand-entries-client.js","layer":null},"startTime":1744821090247,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":127466,"timestamp":106463366314,"id":660,"parentId":659,"tags":{},"startTime":1744821090206,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":128819,"timestamp":106463366200,"id":659,"parentId":626,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\lib\\is-error.js","layer":null},"startTime":1744821090206,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":19299,"timestamp":106463477056,"id":696,"parentId":695,"tags":{},"startTime":1744821090316,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":19375,"timestamp":106463477003,"id":695,"parentId":677,"tags":{},"startTime":1744821090316,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":24478,"timestamp":106463473853,"id":677,"parentId":638,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\dev\\fouc.js","layer":null},"startTime":1744821090313,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":21482,"timestamp":106463476988,"id":694,"parentId":693,"tags":{},"startTime":1744821090316,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":21608,"timestamp":106463476878,"id":693,"parentId":676,"tags":{},"startTime":1744821090316,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":27796,"timestamp":106463473646,"id":676,"parentId":638,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\dev\\dev-build-watcher.js","layer":null},"startTime":1744821090313,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":24442,"timestamp":106463477172,"id":700,"parentId":699,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":24500,"timestamp":106463477125,"id":699,"parentId":679,"tags":{},"startTime":1744821090316,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":32136,"timestamp":106463474000,"id":679,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\page-loader.js","layer":null},"startTime":1744821090313,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":29252,"timestamp":106463477115,"id":698,"parentId":697,"tags":{},"startTime":1744821090316,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":29317,"timestamp":106463477067,"id":697,"parentId":678,"tags":{},"startTime":1744821090316,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":38998,"timestamp":106463473932,"id":678,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\head-manager.js","layer":null},"startTime":1744821090313,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":35923,"timestamp":106463477225,"id":702,"parentId":701,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":35983,"timestamp":106463477182,"id":701,"parentId":680,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":45854,"timestamp":106463474065,"id":680,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\route-announcer.js","layer":null},"startTime":1744821090313,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":42721,"timestamp":106463477350,"id":706,"parentId":705,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":42799,"timestamp":106463477285,"id":705,"parentId":682,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":47850,"timestamp":106463474193,"id":682,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\remove-base-path.js","layer":null},"startTime":1744821090314,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":44887,"timestamp":106463477276,"id":704,"parentId":703,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":44937,"timestamp":106463477234,"id":703,"parentId":681,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":50991,"timestamp":106463474131,"id":681,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\performance-relayer.js","layer":null},"startTime":1744821090314,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":47833,"timestamp":106463477405,"id":708,"parentId":707,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":47888,"timestamp":106463477360,"id":707,"parentId":683,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":53126,"timestamp":106463474276,"id":683,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\has-base-path.js","layer":null},"startTime":1744821090314,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":50044,"timestamp":106463477455,"id":710,"parentId":709,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":50094,"timestamp":106463477415,"id":709,"parentId":684,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":55291,"timestamp":106463474340,"id":684,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\on-recoverable-error.js","layer":null},"startTime":1744821090314,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":52206,"timestamp":106463477556,"id":714,"parentId":713,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":52262,"timestamp":106463477515,"id":713,"parentId":686,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":56717,"timestamp":106463474464,"id":686,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\head-manager-context.shared-runtime.js","layer":null},"startTime":1744821090314,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":53684,"timestamp":106463477604,"id":716,"parentId":715,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":53733,"timestamp":106463477566,"id":715,"parentId":687,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"}] +[{"name":"build-module-js","duration":59459,"timestamp":106463474525,"id":687,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\mitt.js","layer":null},"startTime":1744821090314,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":56430,"timestamp":106463477653,"id":718,"parentId":717,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":56480,"timestamp":106463477613,"id":717,"parentId":688,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":60761,"timestamp":106463474658,"id":688,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\runtime-config.external.js","layer":null},"startTime":1744821090314,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":57848,"timestamp":106463477701,"id":720,"parentId":719,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":57910,"timestamp":106463477662,"id":719,"parentId":689,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":62591,"timestamp":106463474901,"id":689,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\image-config-context.shared-runtime.js","layer":null},"startTime":1744821090314,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":59755,"timestamp":106463477820,"id":724,"parentId":723,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":59809,"timestamp":106463477775,"id":723,"parentId":691,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":64420,"timestamp":106463475154,"id":691,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\hooks-client-context.shared-runtime.js","layer":null},"startTime":1744821090315,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":62452,"timestamp":106463477749,"id":722,"parentId":721,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":62517,"timestamp":106463477710,"id":721,"parentId":690,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":66854,"timestamp":106463475052,"id":690,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\app-router-context.shared-runtime.js","layer":null},"startTime":1744821090314,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":76395,"timestamp":106463477506,"id":712,"parentId":711,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":76463,"timestamp":106463477465,"id":711,"parentId":685,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":88913,"timestamp":106463474404,"id":685,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\script.js","layer":null},"startTime":1744821090314,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":87058,"timestamp":106463477869,"id":726,"parentId":725,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":87112,"timestamp":106463477829,"id":725,"parentId":692,"tags":{},"startTime":1744821090317,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":93585,"timestamp":106463475245,"id":692,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\adapters.js","layer":null},"startTime":1744821090315,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":26053,"timestamp":106463548279,"id":740,"parentId":739,"tags":{},"startTime":1744821090388,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":26175,"timestamp":106463548179,"id":739,"parentId":732,"tags":{},"startTime":1744821090388,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":28819,"timestamp":106463547357,"id":732,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\is-dynamic.js","layer":null},"startTime":1744821090387,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":28138,"timestamp":106463548142,"id":738,"parentId":737,"tags":{},"startTime":1744821090388,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":28259,"timestamp":106463548031,"id":737,"parentId":731,"tags":{},"startTime":1744821090387,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":30238,"timestamp":106463547286,"id":731,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\handle-smooth-scroll.js","layer":null},"startTime":1744821090387,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":29790,"timestamp":106463548021,"id":736,"parentId":735,"tags":{},"startTime":1744821090387,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":29852,"timestamp":106463547971,"id":735,"parentId":730,"tags":{},"startTime":1744821090387,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":33046,"timestamp":106463547207,"id":730,"parentId":638,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\querystring.js","layer":null},"startTime":1744821090387,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":32419,"timestamp":106463547959,"id":734,"parentId":733,"tags":{},"startTime":1744821090387,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":32525,"timestamp":106463547862,"id":733,"parentId":729,"tags":{},"startTime":1744821090387,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":36157,"timestamp":106463547074,"id":729,"parentId":638,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\dev\\error-overlay\\websocket.js","layer":null},"startTime":1744821090386,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":20115,"timestamp":106463607118,"id":760,"parentId":759,"tags":{},"startTime":1744821090446,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":20202,"timestamp":106463607066,"id":759,"parentId":750,"tags":{},"startTime":1744821090446,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":25205,"timestamp":106463605858,"id":750,"parentId":661,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\amp-context.shared-runtime.js","layer":null},"startTime":1744821090445,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":24132,"timestamp":106463607055,"id":758,"parentId":757,"tags":{},"startTime":1744821090446,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":24250,"timestamp":106463606955,"id":757,"parentId":745,"tags":{},"startTime":1744821090446,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":29945,"timestamp":106463605240,"id":745,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\tracing\\tracer.js","layer":null},"startTime":1744821090445,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":28360,"timestamp":106463606945,"id":756,"parentId":755,"tags":{},"startTime":1744821090446,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":28428,"timestamp":106463606890,"id":755,"parentId":744,"tags":{},"startTime":1744821090446,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":34821,"timestamp":106463604971,"id":744,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\tracing\\report-to-socket.js","layer":null},"startTime":1744821090444,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":33994,"timestamp":106463607171,"id":762,"parentId":761,"tags":{},"startTime":1744821090447,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":34059,"timestamp":106463607128,"id":761,"parentId":751,"tags":{},"startTime":1744821090446,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":39230,"timestamp":106463606076,"id":751,"parentId":661,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\side-effect.js","layer":null},"startTime":1744821090445,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":38221,"timestamp":106463607221,"id":764,"parentId":763,"tags":{},"startTime":1744821090447,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":38283,"timestamp":106463607180,"id":763,"parentId":752,"tags":{},"startTime":1744821090447,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":41655,"timestamp":106463606203,"id":752,"parentId":661,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\amp-mode.js","layer":null},"startTime":1744821090446,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":42516,"timestamp":106463606876,"id":754,"parentId":753,"tags":{},"startTime":1744821090446,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":42647,"timestamp":106463606771,"id":753,"parentId":741,"tags":{},"startTime":1744821090446,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":54508,"timestamp":106463604334,"id":741,"parentId":654,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\dev\\error-overlay\\hot-dev-client.js","layer":null},"startTime":1744821090444,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":112776,"timestamp":106463546998,"id":728,"parentId":727,"tags":{},"startTime":1744821090386,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":115778,"timestamp":106463546907,"id":727,"parentId":637,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\deployment-id.js","layer":null},"startTime":1744821090386,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":42982,"timestamp":106463622051,"id":783,"parentId":782,"tags":{},"startTime":1744821090461,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":43389,"timestamp":106463621666,"id":782,"parentId":767,"tags":{},"startTime":1744821090461,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":52365,"timestamp":106463618088,"id":767,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\detect-domain-locale.js","layer":null},"startTime":1744821090457,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":66296,"timestamp":106463622609,"id":789,"parentId":788,"tags":{},"startTime":1744821090462,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":66738,"timestamp":106463622382,"id":788,"parentId":770,"tags":{},"startTime":1744821090462,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":76232,"timestamp":106463619000,"id":770,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\remove-locale.js","layer":null},"startTime":1744821090458,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":72994,"timestamp":106463622364,"id":787,"parentId":786,"tags":{},"startTime":1744821090462,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":73117,"timestamp":106463622253,"id":786,"parentId":769,"tags":{},"startTime":1744821090462,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":81007,"timestamp":106463618736,"id":769,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\add-locale.js","layer":null},"startTime":1744821090458,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":77025,"timestamp":106463622837,"id":791,"parentId":790,"tags":{},"startTime":1744821090462,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":77144,"timestamp":106463622731,"id":790,"parentId":771,"tags":{},"startTime":1744821090462,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":84633,"timestamp":106463619406,"id":771,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\add-base-path.js","layer":null},"startTime":1744821090459,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":81321,"timestamp":106463622940,"id":793,"parentId":792,"tags":{},"startTime":1744821090462,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":81423,"timestamp":106463622855,"id":792,"parentId":772,"tags":{},"startTime":1744821090462,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":90474,"timestamp":106463619555,"id":772,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\resolve-href.js","layer":null},"startTime":1744821090459,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":88121,"timestamp":106463622187,"id":785,"parentId":784,"tags":{},"startTime":1744821090462,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":88243,"timestamp":106463622083,"id":784,"parentId":768,"tags":{},"startTime":1744821090461,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":105888,"timestamp":106463618489,"id":768,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\route-loader.js","layer":null},"startTime":1744821090458,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":101238,"timestamp":106463623263,"id":797,"parentId":796,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":101319,"timestamp":106463623192,"id":796,"parentId":776,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":106414,"timestamp":106463620166,"id":776,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\remove-trailing-slash.js","layer":null},"startTime":1744821090460,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":103541,"timestamp":106463623172,"id":795,"parentId":794,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":103770,"timestamp":106463622957,"id":794,"parentId":775,"tags":{},"startTime":1744821090462,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":121615,"timestamp":106463620027,"id":775,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\bloom-filter.js","layer":null},"startTime":1744821090459,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":118421,"timestamp":106463623343,"id":799,"parentId":798,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":118519,"timestamp":106463623278,"id":798,"parentId":777,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":123618,"timestamp":106463620285,"id":777,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\parse-relative-url.js","layer":null},"startTime":1744821090460,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":120389,"timestamp":106463623650,"id":803,"parentId":802,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":120471,"timestamp":106463623581,"id":802,"parentId":779,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":125898,"timestamp":106463620590,"id":779,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\route-matcher.js","layer":null},"startTime":1744821090460,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":123056,"timestamp":106463623976,"id":807,"parentId":806,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":123307,"timestamp":106463623746,"id":806,"parentId":781,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":130264,"timestamp":106463620757,"id":781,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\format-url.js","layer":null},"startTime":1744821090460,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":127597,"timestamp":106463623562,"id":801,"parentId":800,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":127811,"timestamp":106463623360,"id":800,"parentId":778,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":134168,"timestamp":106463620488,"id":778,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\resolve-rewrites.js","layer":null},"startTime":1744821090460,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":131238,"timestamp":106463623729,"id":805,"parentId":804,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":131322,"timestamp":106463623665,"id":804,"parentId":780,"tags":{},"startTime":1744821090463,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":140277,"timestamp":106463620675,"id":780,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\route-regex.js","layer":null},"startTime":1744821090460,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":86815,"timestamp":106463676240,"id":823,"parentId":822,"tags":{},"startTime":1744821090516,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":86969,"timestamp":106463676113,"id":822,"parentId":808,"tags":{},"startTime":1744821090515,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":93065,"timestamp":106463671865,"id":808,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\parse-path.js","layer":null},"startTime":1744821090511,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":87788,"timestamp":106463677238,"id":829,"parentId":828,"tags":{},"startTime":1744821090517,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":88195,"timestamp":106463676843,"id":828,"parentId":811,"tags":{},"startTime":1744821090516,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":93710,"timestamp":106463673368,"id":811,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\compare-states.js","layer":null},"startTime":1744821090513,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":90402,"timestamp":106463676786,"id":827,"parentId":826,"tags":{},"startTime":1744821090516,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":90615,"timestamp":106463676583,"id":826,"parentId":810,"tags":{},"startTime":1744821090516,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":96230,"timestamp":106463673181,"id":810,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\format-next-pathname-info.js","layer":null},"startTime":1744821090513,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":93182,"timestamp":106463676485,"id":825,"parentId":824,"tags":{},"startTime":1744821090516,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":93335,"timestamp":106463676348,"id":824,"parentId":809,"tags":{},"startTime":1744821090516,"traceId":"cd18399fa4a84ab9"}] +[{"name":"build-module-js","duration":100915,"timestamp":106463672233,"id":809,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\get-next-pathname-info.js","layer":null},"startTime":1744821090512,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":95188,"timestamp":106463678066,"id":833,"parentId":832,"tags":{},"startTime":1744821090517,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":95314,"timestamp":106463677952,"id":832,"parentId":813,"tags":{},"startTime":1744821090517,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":102097,"timestamp":106463673761,"id":813,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\is-bot.js","layer":null},"startTime":1744821090513,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":97703,"timestamp":106463678240,"id":835,"parentId":834,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":97818,"timestamp":106463678139,"id":834,"parentId":814,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":103516,"timestamp":106463673872,"id":814,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\omit.js","layer":null},"startTime":1744821090513,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":99167,"timestamp":106463678328,"id":837,"parentId":836,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":99256,"timestamp":106463678257,"id":836,"parentId":815,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":105844,"timestamp":106463673979,"id":815,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\interpolate-as.js","layer":null},"startTime":1744821090513,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":101459,"timestamp":106463678483,"id":839,"parentId":838,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":101546,"timestamp":106463678405,"id":838,"parentId":816,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":106930,"timestamp":106463674230,"id":816,"parentId":661,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\utils\\warn-once.js","layer":null},"startTime":1744821090514,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":103561,"timestamp":106463677665,"id":831,"parentId":830,"tags":{},"startTime":1744821090517,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":103969,"timestamp":106463677264,"id":830,"parentId":812,"tags":{},"startTime":1744821090517,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":109404,"timestamp":106463673616,"id":812,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\is-local-url.js","layer":null},"startTime":1744821090513,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":104557,"timestamp":106463678568,"id":841,"parentId":840,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":104638,"timestamp":106463678499,"id":840,"parentId":817,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":110065,"timestamp":106463674359,"id":817,"parentId":659,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\is-plain-object.js","layer":null},"startTime":1744821090514,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":105581,"timestamp":106463678913,"id":847,"parentId":846,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":105667,"timestamp":106463678835,"id":846,"parentId":820,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":111306,"timestamp":106463674892,"id":820,"parentId":679,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\get-asset-path-from-route.js","layer":null},"startTime":1744821090514,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":107208,"timestamp":106463679085,"id":849,"parentId":848,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":107366,"timestamp":106463678935,"id":848,"parentId":821,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":112462,"timestamp":106463675060,"id":821,"parentId":683,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\path-has-prefix.js","layer":null},"startTime":1744821090514,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":109114,"timestamp":106463678818,"id":845,"parentId":844,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":109216,"timestamp":106463678734,"id":844,"parentId":819,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":115275,"timestamp":106463674685,"id":819,"parentId":689,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\image-config.js","layer":null},"startTime":1744821090514,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":127546,"timestamp":106463678650,"id":843,"parentId":842,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":127637,"timestamp":106463678585,"id":842,"parentId":818,"tags":{},"startTime":1744821090518,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":137667,"timestamp":106463674455,"id":818,"parentId":679,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\constants.js","layer":null},"startTime":1744821090514,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":208504,"timestamp":106463604589,"id":743,"parentId":742,"tags":{},"startTime":1744821090444,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":210276,"timestamp":106463604532,"id":742,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\polyfills\\polyfill-module.js","layer":null},"startTime":1744821090444,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":209442,"timestamp":106463605566,"id":747,"parentId":746,"tags":{},"startTime":1744821090445,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":210507,"timestamp":106463605469,"id":746,"parentId":638,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\dev\\hot-reloader-types.js","layer":null},"startTime":1744821090445,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":210251,"timestamp":106463605787,"id":749,"parentId":748,"tags":{},"startTime":1744821090445,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":217268,"timestamp":106463605652,"id":748,"parentId":646,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\react-refresh\\cjs\\react-refresh-runtime.development.js","layer":null},"startTime":1744821090445,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":27918,"timestamp":106463795657,"id":856,"parentId":855,"tags":{},"startTime":1744821090635,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":28114,"timestamp":106463795479,"id":855,"parentId":852,"tags":{},"startTime":1744821090635,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":31290,"timestamp":106463794021,"id":852,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\page-path\\denormalize-page-path.js","layer":null},"startTime":1744821090633,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":29455,"timestamp":106463796008,"id":858,"parentId":857,"tags":{},"startTime":1744821090635,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":29795,"timestamp":106463795905,"id":857,"parentId":853,"tags":{},"startTime":1744821090635,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":33357,"timestamp":106463794334,"id":853,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\i18n\\normalize-locale-path.js","layer":null},"startTime":1744821090634,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":31728,"timestamp":106463796107,"id":860,"parentId":859,"tags":{},"startTime":1744821090635,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":31809,"timestamp":106463796040,"id":859,"parentId":854,"tags":{},"startTime":1744821090635,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":36730,"timestamp":106463794435,"id":854,"parentId":685,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\request-idle-callback.js","layer":null},"startTime":1744821090634,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":684479,"timestamp":106463147693,"id":606,"parentId":605,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821089987,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":217792,"timestamp":106463619944,"id":774,"parentId":773,"tags":{},"startTime":1744821090459,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":220743,"timestamp":106463619677,"id":773,"parentId":664,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\lib\\is-api-route.js","layer":null},"startTime":1744821090459,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":223273,"timestamp":106463617219,"id":766,"parentId":765,"tags":{},"startTime":1744821090457,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":335527,"timestamp":106463617024,"id":765,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-dev-overlay\\dist\\client.js","layer":null},"startTime":1744821090456,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":123636,"timestamp":106463833628,"id":866,"parentId":865,"tags":{},"startTime":1744821090673,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":123766,"timestamp":106463833521,"id":865,"parentId":861,"tags":{},"startTime":1744821090673,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":126427,"timestamp":106463832671,"id":861,"parentId":692,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\as-path-to-search-params.js","layer":null},"startTime":1744821090672,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":125469,"timestamp":106463833725,"id":868,"parentId":867,"tags":{},"startTime":1744821090673,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":125564,"timestamp":106463833645,"id":867,"parentId":864,"tags":{},"startTime":1744821090673,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":127633,"timestamp":106463833136,"id":864,"parentId":684,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\lazy-dynamic\\bailout-to-csr.js","layer":null},"startTime":1744821090673,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":184766,"timestamp":106463793942,"id":851,"parentId":850,"tags":{},"startTime":1744821090633,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":185705,"timestamp":106463793819,"id":850,"parentId":628,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\react\\jsx-runtime.js","layer":null},"startTime":1744821090633,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":154602,"timestamp":106463833006,"id":863,"parentId":862,"tags":{},"startTime":1744821090672,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":155683,"timestamp":106463832924,"id":862,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\react-dom\\client.js","layer":null},"startTime":1744821090672,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":17454,"timestamp":106463971646,"id":871,"parentId":870,"tags":{},"startTime":1744821090811,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":17844,"timestamp":106463971275,"id":870,"parentId":869,"tags":{},"startTime":1744821090811,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":23681,"timestamp":106463970803,"id":869,"parentId":741,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\dev\\error-overlay\\format-webpack-messages.js","layer":null},"startTime":1744821090810,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":11987,"timestamp":106463983393,"id":887,"parentId":886,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":12051,"timestamp":106463983348,"id":886,"parentId":874,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":14540,"timestamp":106463982319,"id":874,"parentId":771,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\add-path-prefix.js","layer":null},"startTime":1744821090822,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":13682,"timestamp":106463983261,"id":883,"parentId":882,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":13801,"timestamp":106463983151,"id":882,"parentId":872,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":17486,"timestamp":106463981469,"id":872,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\portal\\index.js","layer":null},"startTime":1744821090821,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":15703,"timestamp":106463983338,"id":885,"parentId":884,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":15778,"timestamp":106463983275,"id":884,"parentId":873,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":18572,"timestamp":106463982174,"id":873,"parentId":769,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\normalize-trailing-slash.js","layer":null},"startTime":1744821090822,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":22041,"timestamp":106463983450,"id":889,"parentId":888,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":22114,"timestamp":106463983403,"id":888,"parentId":875,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":24983,"timestamp":106463982410,"id":875,"parentId":768,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\trusted-types.js","layer":null},"startTime":1744821090822,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":23992,"timestamp":106463983504,"id":891,"parentId":890,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":24045,"timestamp":106463983461,"id":890,"parentId":876,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":26848,"timestamp":106463982489,"id":876,"parentId":780,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\escape-regexp.js","layer":null},"startTime":1744821090822,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":25872,"timestamp":106463983554,"id":893,"parentId":892,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":25922,"timestamp":106463983513,"id":892,"parentId":877,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":28306,"timestamp":106463982557,"id":877,"parentId":778,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\path-match.js","layer":null},"startTime":1744821090822,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":27274,"timestamp":106463983651,"id":897,"parentId":896,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":27322,"timestamp":106463983612,"id":896,"parentId":879,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":29630,"timestamp":106463982704,"id":879,"parentId":810,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\add-path-suffix.js","layer":null},"startTime":1744821090822,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":29175,"timestamp":106463983713,"id":899,"parentId":898,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":29250,"timestamp":106463983660,"id":898,"parentId":880,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":31372,"timestamp":106463982770,"id":880,"parentId":810,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\add-locale.js","layer":null},"startTime":1744821090822,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":30581,"timestamp":106463983764,"id":901,"parentId":900,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":30637,"timestamp":106463983722,"id":900,"parentId":881,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":32878,"timestamp":106463982832,"id":881,"parentId":809,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\remove-path-prefix.js","layer":null},"startTime":1744821090822,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":32232,"timestamp":106463983603,"id":895,"parentId":894,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":32283,"timestamp":106463983563,"id":894,"parentId":878,"tags":{},"startTime":1744821090823,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":38263,"timestamp":106463982620,"id":878,"parentId":778,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\prepare-destination.js","layer":null},"startTime":1744821090822,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":22754,"timestamp":106464004033,"id":911,"parentId":910,"tags":{},"startTime":1744821090843,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":22829,"timestamp":106464003980,"id":910,"parentId":907,"tags":{},"startTime":1744821090843,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":24342,"timestamp":106464003535,"id":907,"parentId":818,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\modern-browserslist-target.js","layer":null},"startTime":1744821090843,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":23974,"timestamp":106464003968,"id":909,"parentId":908,"tags":{},"startTime":1744821090843,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":24077,"timestamp":106464003874,"id":908,"parentId":906,"tags":{},"startTime":1744821090843,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":26026,"timestamp":106464003411,"id":906,"parentId":852,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\page-path\\normalize-path-sep.js","layer":null},"startTime":1744821090843,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":30674,"timestamp":106464003264,"id":903,"parentId":902,"tags":{},"startTime":1744821090843,"traceId":"cd18399fa4a84ab9"}] +[{"name":"build-module-js","duration":33602,"timestamp":106464001945,"id":902,"parentId":625,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\@swc\\helpers\\esm\\_interop_require_default.js","layer":null},"startTime":1744821090841,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":32353,"timestamp":106464003377,"id":905,"parentId":904,"tags":{},"startTime":1744821090843,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":33663,"timestamp":106464003333,"id":904,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\@swc\\helpers\\esm\\_interop_require_wildcard.js","layer":null},"startTime":1744821090843,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":13049,"timestamp":106464025905,"id":913,"parentId":912,"tags":{},"startTime":1744821090865,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":13791,"timestamp":106464025813,"id":912,"parentId":628,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\react\\index.js","layer":null},"startTime":1744821090865,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":7041,"timestamp":106464032991,"id":920,"parentId":919,"tags":{},"startTime":1744821090872,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":7152,"timestamp":106464032896,"id":919,"parentId":918,"tags":{},"startTime":1744821090872,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":8531,"timestamp":106464032702,"id":918,"parentId":692,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\index.js","layer":null},"startTime":1744821090872,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":15200,"timestamp":106464026074,"id":917,"parentId":916,"tags":{},"startTime":1744821090865,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":15707,"timestamp":106464026041,"id":916,"parentId":650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\react-is\\index.js","layer":null},"startTime":1744821090865,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":15814,"timestamp":106464026008,"id":915,"parentId":914,"tags":{},"startTime":1744821090865,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":18574,"timestamp":106464025965,"id":914,"parentId":732,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\future\\helpers\\interception-routes.js","layer":null},"startTime":1744821090865,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":4611,"timestamp":106464050920,"id":927,"parentId":926,"tags":{},"startTime":1744821090890,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":4734,"timestamp":106464050820,"id":926,"parentId":923,"tags":{},"startTime":1744821090890,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":6757,"timestamp":106464050453,"id":923,"parentId":878,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\parse-url.js","layer":null},"startTime":1744821090890,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":14968,"timestamp":106464045819,"id":922,"parentId":921,"tags":{},"startTime":1744821090885,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":33350,"timestamp":106464045722,"id":921,"parentId":850,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\react\\cjs\\react-jsx-runtime.development.js","layer":null},"startTime":1744821090885,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":25056,"timestamp":106464054153,"id":932,"parentId":931,"tags":{},"startTime":1744821090894,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":25167,"timestamp":106464054055,"id":931,"parentId":930,"tags":{},"startTime":1744821090893,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":27186,"timestamp":106464053853,"id":930,"parentId":878,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\components\\app-router-headers.js","layer":null},"startTime":1744821090893,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":33616,"timestamp":106464050680,"id":925,"parentId":924,"tags":{},"startTime":1744821090890,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":40775,"timestamp":106464050630,"id":924,"parentId":681,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\web-vitals\\web-vitals.js","layer":null},"startTime":1744821090890,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":10214,"timestamp":106464082805,"id":940,"parentId":939,"tags":{},"startTime":1744821090922,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":10344,"timestamp":106464082696,"id":939,"parentId":937,"tags":{},"startTime":1744821090922,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":12856,"timestamp":106464082140,"id":937,"parentId":914,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\app-paths.js","layer":null},"startTime":1744821090922,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":12259,"timestamp":106464082868,"id":942,"parentId":941,"tags":{},"startTime":1744821090922,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":12321,"timestamp":106464082818,"id":941,"parentId":938,"tags":{},"startTime":1744821090922,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":15503,"timestamp":106464082438,"id":938,"parentId":918,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\sorted-routes.js","layer":null},"startTime":1744821090922,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":44193,"timestamp":106464053801,"id":929,"parentId":928,"tags":{},"startTime":1744821090893,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":45542,"timestamp":106464053707,"id":928,"parentId":878,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\api-utils\\get-cookie-parser.js","layer":null},"startTime":1744821090893,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":9466,"timestamp":106464092416,"id":947,"parentId":946,"tags":{},"startTime":1744821090932,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":9694,"timestamp":106464092210,"id":946,"parentId":943,"tags":{},"startTime":1744821090932,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":11758,"timestamp":106464091755,"id":943,"parentId":741,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\strip-ansi\\index.js","layer":null},"startTime":1744821090931,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":44965,"timestamp":106464059437,"id":934,"parentId":933,"tags":{},"startTime":1744821090899,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":63041,"timestamp":106464059278,"id":933,"parentId":912,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\react\\cjs\\react.development.js","layer":null},"startTime":1744821090899,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":40352,"timestamp":106464082061,"id":936,"parentId":935,"tags":{},"startTime":1744821090921,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":41801,"timestamp":106464081838,"id":935,"parentId":862,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\react-dom\\index.js","layer":null},"startTime":1744821090921,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":976676,"timestamp":106463147925,"id":610,"parentId":605,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1744821089987,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":976390,"timestamp":106463148247,"id":616,"parentId":605,"tags":{"request":"next-client-pages-loader?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&page=%2F_error!"},"startTime":1744821089988,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":976679,"timestamp":106463147965,"id":612,"parentId":605,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1744821089987,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":33183,"timestamp":106464092133,"id":945,"parentId":944,"tags":{},"startTime":1744821090932,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":35492,"timestamp":106464092050,"id":944,"parentId":916,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\react-is\\cjs\\react-is.development.js","layer":null},"startTime":1744821090931,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":8632,"timestamp":106464124134,"id":949,"parentId":948,"tags":{},"startTime":1744821090964,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":10318,"timestamp":106464124042,"id":948,"parentId":765,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\css.escape\\css.escape.js","layer":null},"startTime":1744821090963,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":9875,"timestamp":106464124555,"id":955,"parentId":954,"tags":{},"startTime":1744821090964,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":27143,"timestamp":106464124507,"id":954,"parentId":765,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\platform\\platform.js","layer":null},"startTime":1744821090964,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":27487,"timestamp":106464124249,"id":951,"parentId":950,"tags":{},"startTime":1744821090964,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":33565,"timestamp":106464124194,"id":950,"parentId":765,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\anser\\index.js","layer":null},"startTime":1744821090964,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":33381,"timestamp":106464124454,"id":953,"parentId":952,"tags":{},"startTime":1744821090964,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":36307,"timestamp":106464124304,"id":952,"parentId":765,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\stacktrace-parser\\stack-trace-parser.cjs.js","layer":null},"startTime":1744821090964,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":30028,"timestamp":106464131432,"id":961,"parentId":960,"tags":{},"startTime":1744821090971,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":30120,"timestamp":106464131363,"id":960,"parentId":957,"tags":{},"startTime":1744821090971,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":31904,"timestamp":106464130984,"id":957,"parentId":937,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\page-path\\ensure-leading-slash.js","layer":null},"startTime":1744821090970,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":31651,"timestamp":106464131346,"id":959,"parentId":958,"tags":{},"startTime":1744821090971,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":31791,"timestamp":106464131218,"id":958,"parentId":956,"tags":{},"startTime":1744821090971,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":33631,"timestamp":106464130693,"id":956,"parentId":937,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\segment.js","layer":null},"startTime":1744821090970,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":33003,"timestamp":106464132656,"id":963,"parentId":962,"tags":{},"startTime":1744821090972,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":39052,"timestamp":106464132348,"id":962,"parentId":877,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\path-to-regexp\\index.js","layer":null},"startTime":1744821090972,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":7546,"timestamp":106464164755,"id":965,"parentId":964,"tags":{},"startTime":1744821091004,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":219304,"timestamp":106464164658,"id":964,"parentId":935,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\react-dom\\cjs\\react-dom.development.js","layer":null},"startTime":1744821091004,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":3780,"timestamp":106464388665,"id":967,"parentId":966,"tags":{},"startTime":1744821091228,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":5641,"timestamp":106464388463,"id":966,"parentId":928,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\cookie\\index.js","layer":null},"startTime":1744821091228,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":794,"timestamp":106464395385,"id":969,"parentId":968,"tags":{},"startTime":1744821091235,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":1445,"timestamp":106464395304,"id":968,"parentId":964,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\scheduler\\index.js","layer":null},"startTime":1744821091235,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":1160,"timestamp":106464398565,"id":971,"parentId":970,"tags":{},"startTime":1744821091238,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":4976,"timestamp":106464398474,"id":970,"parentId":968,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\scheduler\\cjs\\scheduler.development.js","layer":null},"startTime":1744821091238,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":1255685,"timestamp":106463147946,"id":611,"parentId":605,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\router.js"},"startTime":1744821089987,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":1255790,"timestamp":106463147856,"id":607,"parentId":605,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1744821089987,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":1258417,"timestamp":106463145263,"id":605,"parentId":604,"tags":{},"startTime":1744821089985,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":4400,"timestamp":106464414703,"id":973,"parentId":972,"tags":{},"startTime":1744821091254,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":11,"timestamp":106464419189,"id":975,"parentId":972,"tags":{},"startTime":1744821091259,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":102,"timestamp":106464419231,"id":976,"parentId":972,"tags":{},"startTime":1744821091259,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":16,"timestamp":106464419382,"id":977,"parentId":972,"tags":{},"startTime":1744821091259,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":9,"timestamp":106464419444,"id":978,"parentId":972,"tags":{},"startTime":1744821091259,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":2124,"timestamp":106464419165,"id":974,"parentId":972,"tags":{},"startTime":1744821091259,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":5230,"timestamp":106464424507,"id":979,"parentId":972,"tags":{},"startTime":1744821091264,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":15742,"timestamp":106464429796,"id":980,"parentId":972,"tags":{},"startTime":1744821091269,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":15436,"timestamp":106464449692,"id":981,"parentId":972,"tags":{},"startTime":1744821091289,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":578,"timestamp":106464465124,"id":982,"parentId":972,"tags":{},"startTime":1744821091304,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":344,"timestamp":106464465664,"id":983,"parentId":972,"tags":{},"startTime":1744821091305,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":176879,"timestamp":106464466040,"id":984,"parentId":972,"tags":{},"startTime":1744821091305,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":607,"timestamp":106464645243,"id":986,"parentId":604,"tags":{},"startTime":1744821091485,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":1323,"timestamp":106464644553,"id":985,"parentId":604,"tags":{},"startTime":1744821091484,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":235536,"timestamp":106464412789,"id":972,"parentId":604,"tags":{},"startTime":1744821091252,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":1503600,"timestamp":106463144809,"id":604,"parentId":601,"tags":{"name":"client"},"startTime":1744821089984,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":75793,"timestamp":106464648520,"id":987,"parentId":601,"tags":{},"startTime":1744821091488,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":1585127,"timestamp":106463142645,"id":601,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744821089982,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":1,"timestamp":106464743536,"id":990,"parentId":3,"tags":{},"startTime":1744821091583,"traceId":"cd18399fa4a84ab9"},{"name":"client-hmr-latency","duration":1645000,"timestamp":1744821089983000,"id":997,"parentId":3,"tags":{"updatedModules":[],"page":"/","isPageHidden":false},"startTime":1744821091630,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2186,"timestamp":106464793192,"id":1001,"parentId":1000,"tags":{},"startTime":1744821091633,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2419,"timestamp":106464792999,"id":1000,"parentId":998,"tags":{},"startTime":1744821091632,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":6428,"timestamp":106464791596,"id":998,"parentId":992,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\pages\\_app.js","layer":null},"startTime":1744821091631,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":21804,"timestamp":106464793304,"id":1003,"parentId":1002,"tags":{},"startTime":1744821091633,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":21921,"timestamp":106464793209,"id":1002,"parentId":999,"tags":{},"startTime":1744821091633,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":37138,"timestamp":106464792850,"id":999,"parentId":994,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\pages\\_document.js","layer":null},"startTime":1744821091632,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-react/jsx-runtime","duration":1422,"timestamp":106464831185,"id":1004,"parentId":998,"tags":{"name":"react/jsx-runtime","layer":null},"startTime":1744821091671,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-react","duration":54,"timestamp":106464832678,"id":1005,"parentId":998,"tags":{"name":"react","layer":null},"startTime":1744821091672,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":5304,"timestamp":106464833834,"id":1008,"parentId":1007,"tags":{},"startTime":1744821091673,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":5646,"timestamp":106464833520,"id":1007,"parentId":1006,"tags":{},"startTime":1744821091673,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":8784,"timestamp":106464832767,"id":1006,"parentId":998,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\utils.js","layer":null},"startTime":1744821091672,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":233,"timestamp":106464842067,"id":1010,"parentId":1009,"tags":{},"startTime":1744821091681,"traceId":"cd18399fa4a84ab9"}] +[{"name":"build-module-js","duration":1942,"timestamp":106464841891,"id":1009,"parentId":999,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\lib\\is-error.js","layer":null},"startTime":1744821091681,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":7056,"timestamp":106464843986,"id":1013,"parentId":1012,"tags":{},"startTime":1744821091683,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":7185,"timestamp":106464843881,"id":1012,"parentId":1011,"tags":{},"startTime":1744821091683,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":11588,"timestamp":106464842099,"id":1011,"parentId":999,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\constants.js","layer":null},"startTime":1744821091681,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":73935,"timestamp":106464779869,"id":996,"parentId":989,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821091619,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":6989,"timestamp":106464854303,"id":1019,"parentId":1018,"tags":{},"startTime":1744821091694,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":8261,"timestamp":106464854269,"id":1018,"parentId":999,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\htmlescape.js","layer":null},"startTime":1744821091694,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":8474,"timestamp":106464854139,"id":1015,"parentId":1014,"tags":{},"startTime":1744821091694,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":9148,"timestamp":106464854054,"id":1014,"parentId":999,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\get-page-files.js","layer":null},"startTime":1744821091693,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":10309,"timestamp":106464854382,"id":1021,"parentId":1020,"tags":{},"startTime":1744821091694,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":11792,"timestamp":106464854336,"id":1020,"parentId":999,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\utils.js","layer":null},"startTime":1744821091694,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":11945,"timestamp":106464854234,"id":1017,"parentId":1016,"tags":{},"startTime":1744821091694,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":12719,"timestamp":106464854193,"id":1016,"parentId":999,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\lib\\pretty-bytes.js","layer":null},"startTime":1744821091694,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":6932,"timestamp":106464860070,"id":1026,"parentId":1025,"tags":{},"startTime":1744821091699,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":7048,"timestamp":106464859962,"id":1025,"parentId":1022,"tags":{},"startTime":1744821091699,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":8618,"timestamp":106464859023,"id":1022,"parentId":1009,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\is-plain-object.js","layer":null},"startTime":1744821091698,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":7029,"timestamp":106464860667,"id":1029,"parentId":1028,"tags":{},"startTime":1744821091700,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":7112,"timestamp":106464860592,"id":1028,"parentId":1027,"tags":{},"startTime":1744821091700,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":7510,"timestamp":106464860470,"id":1027,"parentId":1011,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\modern-browserslist-target.js","layer":null},"startTime":1744821091700,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":9622,"timestamp":106464859821,"id":1024,"parentId":1023,"tags":{},"startTime":1744821091699,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-cjs","duration":11154,"timestamp":106464859263,"id":1023,"parentId":998,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\@swc\\helpers\\cjs\\_interop_require_default.cjs","layer":null},"startTime":1744821091699,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":90944,"timestamp":106464779689,"id":992,"parentId":989,"tags":{"request":"next/dist/pages/_app"},"startTime":1744821091619,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":3838,"timestamp":106464870921,"id":1032,"parentId":1031,"tags":{},"startTime":1744821091710,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":3956,"timestamp":106464870828,"id":1031,"parentId":1030,"tags":{},"startTime":1744821091710,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":5068,"timestamp":106464870665,"id":1030,"parentId":1014,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\page-path\\denormalize-page-path.js","layer":null},"startTime":1744821091710,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":3516,"timestamp":106464874538,"id":1037,"parentId":1036,"tags":{},"startTime":1744821091714,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":3689,"timestamp":106464874441,"id":1036,"parentId":1033,"tags":{},"startTime":1744821091714,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":6642,"timestamp":106464872689,"id":1033,"parentId":1014,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\page-path\\normalize-page-path.js","layer":null},"startTime":1744821091712,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!","duration":14260,"timestamp":106464874153,"id":1035,"parentId":995,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\next-route-loader\\index.js?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!","layer":null},"startTime":1744821091714,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!","duration":17149,"timestamp":106464872859,"id":1034,"parentId":993,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\next-route-loader\\index.js?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!","layer":null},"startTime":1744821091712,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":11342,"timestamp":106464884210,"id":1041,"parentId":1040,"tags":{},"startTime":1744821091724,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":11498,"timestamp":106464884078,"id":1040,"parentId":1038,"tags":{},"startTime":1744821091723,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":12435,"timestamp":106464883782,"id":1038,"parentId":1030,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\page-path\\normalize-path-sep.js","layer":null},"startTime":1744821091723,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":12000,"timestamp":106464884281,"id":1043,"parentId":1042,"tags":{},"startTime":1744821091724,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":12065,"timestamp":106464884223,"id":1042,"parentId":1039,"tags":{},"startTime":1744821091724,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":12942,"timestamp":106464883938,"id":1039,"parentId":1030,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\index.js","layer":null},"startTime":1744821091723,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":5102,"timestamp":106464892171,"id":1048,"parentId":1047,"tags":{},"startTime":1744821091732,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":5337,"timestamp":106464891949,"id":1047,"parentId":1044,"tags":{},"startTime":1744821091731,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":6691,"timestamp":106464891007,"id":1044,"parentId":1033,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\page-path\\ensure-leading-slash.js","layer":null},"startTime":1744821091730,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":10601,"timestamp":106464891205,"id":1046,"parentId":1045,"tags":{},"startTime":1744821091731,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":11096,"timestamp":106464891147,"id":1045,"parentId":999,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\future\\route-modules\\pages\\vendored\\contexts\\html-context.js","layer":null},"startTime":1744821091731,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":4440,"timestamp":106464900139,"id":1051,"parentId":1050,"tags":{},"startTime":1744821091740,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":4577,"timestamp":106464900021,"id":1050,"parentId":1049,"tags":{},"startTime":1744821091739,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":6816,"timestamp":106464899772,"id":1049,"parentId":1034,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\pages\\_error.js","layer":null},"startTime":1744821091739,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":5713,"timestamp":106464901604,"id":1057,"parentId":1056,"tags":{},"startTime":1744821091741,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":5811,"timestamp":106464901540,"id":1056,"parentId":1053,"tags":{},"startTime":1744821091741,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":7139,"timestamp":106464901161,"id":1053,"parentId":1039,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\is-dynamic.js","layer":null},"startTime":1744821091741,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":9027,"timestamp":106464901524,"id":1055,"parentId":1054,"tags":{},"startTime":1744821091741,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":9153,"timestamp":106464901419,"id":1054,"parentId":1052,"tags":{},"startTime":1744821091741,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":12679,"timestamp":106464901044,"id":1052,"parentId":1039,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\sorted-routes.js","layer":null},"startTime":1744821091740,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":28,"timestamp":106464915166,"id":1066,"parentId":1065,"tags":{},"startTime":1744821091755,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":1798,"timestamp":106464915083,"id":1065,"parentId":1053,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\future\\helpers\\interception-routes.js","layer":null},"startTime":1744821091754,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":14050,"timestamp":106464903241,"id":1061,"parentId":1060,"tags":{},"startTime":1744821091743,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":14590,"timestamp":106464903190,"id":1060,"parentId":1035,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\future\\route-modules\\pages\\module.compiled.js","layer":null},"startTime":1744821091743,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":14694,"timestamp":106464903131,"id":1059,"parentId":1058,"tags":{},"startTime":1744821091743,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":15242,"timestamp":106464903047,"id":1058,"parentId":1035,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\future\\route-kind.js","layer":null},"startTime":1744821091742,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":54,"timestamp":106464920060,"id":1069,"parentId":1060,"tags":{"name":"next/dist/compiled/next-server/pages.runtime.dev.js","layer":null},"startTime":1744821091759,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":4417,"timestamp":106464917050,"id":1068,"parentId":1067,"tags":{},"startTime":1744821091756,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":4545,"timestamp":106464916945,"id":1067,"parentId":1064,"tags":{},"startTime":1744821091756,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":9811,"timestamp":106464914778,"id":1064,"parentId":1049,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\head.js","layer":null},"startTime":1744821091754,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":10397,"timestamp":106464914279,"id":1063,"parentId":1062,"tags":{},"startTime":1744821091754,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":11525,"timestamp":106464914152,"id":1062,"parentId":1035,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\templates\\helpers.js","layer":null},"startTime":1744821091754,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":10939,"timestamp":106464920430,"id":1072,"parentId":1071,"tags":{},"startTime":1744821091760,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":11073,"timestamp":106464920325,"id":1071,"parentId":1070,"tags":{},"startTime":1744821091760,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":12767,"timestamp":106464920151,"id":1070,"parentId":1065,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\router\\utils\\app-paths.js","layer":null},"startTime":1744821091760,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2027,"timestamp":106464938361,"id":1079,"parentId":1078,"tags":{},"startTime":1744821091778,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2109,"timestamp":106464938300,"id":1078,"parentId":1074,"tags":{},"startTime":1744821091778,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":3198,"timestamp":106464937875,"id":1074,"parentId":1064,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\amp-mode.js","layer":null},"startTime":1744821091777,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2713,"timestamp":106464938428,"id":1081,"parentId":1080,"tags":{},"startTime":1744821091778,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2776,"timestamp":106464938373,"id":1080,"parentId":1075,"tags":{},"startTime":1744821091778,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":4019,"timestamp":106464937962,"id":1075,"parentId":1064,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\utils\\warn-once.js","layer":null},"startTime":1744821091777,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":4021,"timestamp":106464938287,"id":1077,"parentId":1076,"tags":{},"startTime":1744821091778,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":4143,"timestamp":106464938182,"id":1076,"parentId":1073,"tags":{},"startTime":1744821091778,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":5781,"timestamp":106464937704,"id":1073,"parentId":1064,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\side-effect.js","layer":null},"startTime":1744821091777,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":3646,"timestamp":106464939929,"id":1086,"parentId":1085,"tags":{},"startTime":1744821091779,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":3773,"timestamp":106464939812,"id":1085,"parentId":1082,"tags":{},"startTime":1744821091779,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":4757,"timestamp":106464939402,"id":1082,"parentId":1070,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\shared\\lib\\segment.js","layer":null},"startTime":1744821091779,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":164475,"timestamp":106464779844,"id":994,"parentId":989,"tags":{"request":"next/dist/pages/_document"},"startTime":1744821091619,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":5138,"timestamp":106464939619,"id":1084,"parentId":1083,"tags":{},"startTime":1744821091779,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-cjs","duration":6529,"timestamp":106464939551,"id":1083,"parentId":1064,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\@swc\\helpers\\cjs\\_interop_require_wildcard.cjs","layer":null},"startTime":1744821091779,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":5938,"timestamp":106464940206,"id":1088,"parentId":1087,"tags":{},"startTime":1744821091780,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":6326,"timestamp":106464940102,"id":1087,"parentId":1064,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\future\\route-modules\\pages\\vendored\\contexts\\amp-context.js","layer":null},"startTime":1744821091779,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":6525,"timestamp":106464940307,"id":1090,"parentId":1089,"tags":{},"startTime":1744821091780,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-js","duration":6955,"timestamp":106464940256,"id":1089,"parentId":1064,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\server\\future\\route-modules\\pages\\vendored\\contexts\\head-manager-context.js","layer":null},"startTime":1744821091780,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":167803,"timestamp":106464779827,"id":993,"parentId":989,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821091619,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":167792,"timestamp":106464779856,"id":995,"parentId":989,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821091619,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":233327,"timestamp":106464732885,"id":989,"parentId":988,"tags":{},"startTime":1744821091572,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":2506,"timestamp":106464980499,"id":1095,"parentId":1094,"tags":{},"startTime":1744821091820,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":12,"timestamp":106464983087,"id":1097,"parentId":1094,"tags":{},"startTime":1744821091822,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":8497,"timestamp":106464983152,"id":1098,"parentId":1094,"tags":{},"startTime":1744821091823,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":23,"timestamp":106464991728,"id":1099,"parentId":1094,"tags":{},"startTime":1744821091831,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":12,"timestamp":106464991798,"id":1100,"parentId":1094,"tags":{},"startTime":1744821091831,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":10131,"timestamp":106464983068,"id":1096,"parentId":1094,"tags":{},"startTime":1744821091822,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":1418,"timestamp":106464995835,"id":1101,"parentId":1094,"tags":{},"startTime":1744821091835,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":7634,"timestamp":106464997302,"id":1102,"parentId":1094,"tags":{},"startTime":1744821091837,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":4034,"timestamp":106465007094,"id":1103,"parentId":1094,"tags":{},"startTime":1744821091846,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":185,"timestamp":106465011125,"id":1104,"parentId":1094,"tags":{},"startTime":1744821091850,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":187,"timestamp":106465011285,"id":1105,"parentId":1094,"tags":{},"startTime":1744821091851,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":29085,"timestamp":106465011488,"id":1106,"parentId":1094,"tags":{},"startTime":1744821091851,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":64385,"timestamp":106464978766,"id":1094,"parentId":988,"tags":{},"startTime":1744821091818,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":317940,"timestamp":106464732043,"id":988,"parentId":603,"tags":{"name":"server"},"startTime":1744821091571,"traceId":"cd18399fa4a84ab9"}] +[{"name":"emit","duration":30710,"timestamp":106465050511,"id":1107,"parentId":603,"tags":{},"startTime":1744821091890,"traceId":"cd18399fa4a84ab9"},{"name":"compile-path","duration":1940291,"timestamp":106463142752,"id":602,"tags":{"trigger":"/_error","isTurbopack":false},"startTime":1744821089982,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":1102,"timestamp":106465082414,"id":1108,"parentId":3,"tags":{"trigger":"manual"},"startTime":1744821091922,"traceId":"cd18399fa4a84ab9"}] +[{"name":"add-entry","duration":12629,"timestamp":106465100087,"id":1113,"parentId":1110,"tags":{"request":"next/dist/pages/_document"},"startTime":1744821091939,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13025,"timestamp":106465099986,"id":1111,"parentId":1110,"tags":{"request":"next/dist/pages/_app"},"startTime":1744821091939,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":24701,"timestamp":106465100073,"id":1112,"parentId":1110,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821091939,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":24701,"timestamp":106465100099,"id":1114,"parentId":1110,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821091939,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":24730,"timestamp":106465100110,"id":1115,"parentId":1110,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821091939,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":53589,"timestamp":106465086244,"id":1110,"parentId":1109,"tags":{},"startTime":1744821091926,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1889,"timestamp":106465156374,"id":1120,"parentId":1119,"tags":{},"startTime":1744821091996,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":8,"timestamp":106465158330,"id":1122,"parentId":1119,"tags":{},"startTime":1744821091998,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":5115,"timestamp":106465158365,"id":1123,"parentId":1119,"tags":{},"startTime":1744821091998,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":26,"timestamp":106465163564,"id":1124,"parentId":1119,"tags":{},"startTime":1744821092003,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":10,"timestamp":106465163627,"id":1125,"parentId":1119,"tags":{},"startTime":1744821092003,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":6202,"timestamp":106465158314,"id":1121,"parentId":1119,"tags":{},"startTime":1744821091998,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":520,"timestamp":106465166865,"id":1126,"parentId":1119,"tags":{},"startTime":1744821092006,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":2444,"timestamp":106465167455,"id":1127,"parentId":1119,"tags":{},"startTime":1744821092007,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":3027,"timestamp":106465171772,"id":1128,"parentId":1119,"tags":{},"startTime":1744821092011,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":183,"timestamp":106465174796,"id":1129,"parentId":1119,"tags":{},"startTime":1744821092014,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":204,"timestamp":106465174938,"id":1130,"parentId":1119,"tags":{},"startTime":1744821092014,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":852,"timestamp":106465175167,"id":1131,"parentId":1119,"tags":{},"startTime":1744821092015,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":27485,"timestamp":106465154463,"id":1119,"parentId":1109,"tags":{},"startTime":1744821091994,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":103167,"timestamp":106465085764,"id":1109,"parentId":3,"tags":{"name":"server"},"startTime":1744821091925,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":20448,"timestamp":106465189051,"id":1132,"parentId":3,"tags":{},"startTime":1744821092028,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":2174388,"timestamp":106463135167,"id":600,"tags":{"url":"/api/upload","isTurbopack":false},"startTime":1744821089975,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":3,"timestamp":106465309602,"id":1133,"parentId":600,"tags":{"url":"/api/upload","memory.rss":"565182464","memory.heapUsed":"259663728","memory.heapTotal":"300126208"},"startTime":1744821092149,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":640844,"timestamp":106464759282,"id":991,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744821091599,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":2,"timestamp":106465400174,"id":1134,"parentId":991,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"566824960","memory.heapUsed":"265653608","memory.heapTotal":"301658112"},"startTime":1744821092240,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":14275,"timestamp":106465406803,"id":1135,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744821092246,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106465421119,"id":1136,"parentId":1135,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"566837248","memory.heapUsed":"266669536","memory.heapTotal":"301658112"},"startTime":1744821092260,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":11793,"timestamp":106467009006,"id":1137,"tags":{"url":"/?_rsc=acgkz","isTurbopack":false},"startTime":1744821093848,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106467020837,"id":1138,"parentId":1137,"tags":{"url":"/?_rsc=acgkz","memory.rss":"579510272","memory.heapUsed":"226430552","memory.heapTotal":"277463040"},"startTime":1744821093860,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":23821,"timestamp":106467026948,"id":1139,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744821093866,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106467050812,"id":1140,"parentId":1139,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"579510272","memory.heapUsed":"227507336","memory.heapTotal":"277463040"},"startTime":1744821093890,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":257614,"timestamp":106475874153,"id":1141,"tags":{"url":"/","isTurbopack":false},"startTime":1744821102714,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":3,"timestamp":106476131859,"id":1142,"parentId":1141,"tags":{"url":"/","memory.rss":"444256256","memory.heapUsed":"211770336","memory.heapTotal":"224772096"},"startTime":1744821102971,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":1,"timestamp":106477006563,"id":1143,"parentId":3,"tags":{},"startTime":1744821103846,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":10940,"timestamp":106500437491,"id":1150,"parentId":1147,"tags":{"request":"next/dist/pages/_document"},"startTime":1744821127277,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":11262,"timestamp":106500437397,"id":1148,"parentId":1147,"tags":{"request":"next/dist/pages/_app"},"startTime":1744821127277,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":19305,"timestamp":106500437503,"id":1152,"parentId":1147,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821127277,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":20160,"timestamp":106500437483,"id":1149,"parentId":1147,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821127277,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":20161,"timestamp":106500437496,"id":1151,"parentId":1147,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821127277,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":3472,"timestamp":106500459906,"id":1158,"parentId":1157,"tags":{},"startTime":1744821127299,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":3679,"timestamp":106500459714,"id":1157,"parentId":1156,"tags":{},"startTime":1744821127299,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":18675,"timestamp":106500459312,"id":1156,"parentId":1146,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\components\\FlatFileForm.tsx","layer":"ssr"},"startTime":1744821127299,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":50578,"timestamp":106500435196,"id":1147,"parentId":1146,"tags":{},"startTime":1744821127275,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":2388,"timestamp":106500499752,"id":1160,"parentId":1159,"tags":{},"startTime":1744821127339,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":16,"timestamp":106500502253,"id":1162,"parentId":1159,"tags":{},"startTime":1744821127342,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":3088,"timestamp":106500502329,"id":1163,"parentId":1159,"tags":{},"startTime":1744821127342,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":23,"timestamp":106500505509,"id":1164,"parentId":1159,"tags":{},"startTime":1744821127345,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":16,"timestamp":106500505584,"id":1165,"parentId":1159,"tags":{},"startTime":1744821127345,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":4286,"timestamp":106500502208,"id":1161,"parentId":1159,"tags":{},"startTime":1744821127342,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":544,"timestamp":106500508378,"id":1166,"parentId":1159,"tags":{},"startTime":1744821127348,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":3405,"timestamp":106500508969,"id":1167,"parentId":1159,"tags":{},"startTime":1744821127348,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":3092,"timestamp":106500514623,"id":1168,"parentId":1159,"tags":{},"startTime":1744821127354,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":171,"timestamp":106500517713,"id":1169,"parentId":1159,"tags":{},"startTime":1744821127357,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":111,"timestamp":106500517870,"id":1170,"parentId":1159,"tags":{},"startTime":1744821127357,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":3279,"timestamp":106500517988,"id":1171,"parentId":1159,"tags":{},"startTime":1744821127357,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":25966,"timestamp":106500497994,"id":1159,"parentId":1146,"tags":{},"startTime":1744821127337,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":96025,"timestamp":106500434303,"id":1146,"parentId":1144,"tags":{"name":"server"},"startTime":1744821127274,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":14150,"timestamp":106500530528,"id":1172,"parentId":1144,"tags":{},"startTime":1744821127370,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":128987,"timestamp":106500416789,"id":1144,"parentId":3,"tags":{"trigger":"components/FlatFileForm.tsx"},"startTime":1744821127256,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13856,"timestamp":106500560274,"id":1175,"parentId":1174,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821127400,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13808,"timestamp":106500560342,"id":1177,"parentId":1174,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821127400,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":15060,"timestamp":106500560355,"id":1179,"parentId":1174,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1744821127400,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":17018,"timestamp":106500560368,"id":1181,"parentId":1174,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1744821127400,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":16999,"timestamp":106500560402,"id":1185,"parentId":1174,"tags":{"request":"next-client-pages-loader?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&page=%2F_error!"},"startTime":1744821127400,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":18532,"timestamp":106500560395,"id":1184,"parentId":1174,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744821127400,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":5252,"timestamp":106500573830,"id":1189,"parentId":1188,"tags":{},"startTime":1744821127413,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":5395,"timestamp":106500573696,"id":1188,"parentId":1186,"tags":{},"startTime":1744821127413,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":15735,"timestamp":106500572130,"id":1186,"parentId":1173,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\components\\FlatFileForm.tsx","layer":"app-pages-browser"},"startTime":1744821127412,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":27934,"timestamp":106500560362,"id":1180,"parentId":1174,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\router.js"},"startTime":1744821127400,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":28434,"timestamp":106500560349,"id":1178,"parentId":1174,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744821127400,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":11517,"timestamp":106500577848,"id":1191,"parentId":1190,"tags":{},"startTime":1744821127417,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":76599,"timestamp":106500589490,"id":1193,"parentId":1192,"tags":{},"startTime":1744821127429,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":77404,"timestamp":106500589436,"id":1192,"parentId":1190,"tags":{},"startTime":1744821127429,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":13511,"timestamp":106500666928,"id":1194,"parentId":1190,"tags":{"astUsed":"true"},"startTime":1744821127506,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":104446,"timestamp":106500577596,"id":1190,"parentId":1187,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744821127417,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":127690,"timestamp":106500560333,"id":1176,"parentId":1174,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1744821127400,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":135053,"timestamp":106500572545,"id":1187,"parentId":1173,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744821127412,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":108,"timestamp":106500708675,"id":1195,"parentId":1187,"tags":{},"startTime":1744821127548,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":149862,"timestamp":106500560380,"id":1183,"parentId":1174,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744821127400,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":259097,"timestamp":106500560373,"id":1182,"parentId":1174,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744821127400,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":266652,"timestamp":106500552898,"id":1174,"parentId":1173,"tags":{},"startTime":1744821127392,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1750,"timestamp":106500823077,"id":1197,"parentId":1196,"tags":{},"startTime":1744821127663,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":4,"timestamp":106500824862,"id":1199,"parentId":1196,"tags":{},"startTime":1744821127664,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":70,"timestamp":106500824946,"id":1200,"parentId":1196,"tags":{},"startTime":1744821127664,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":6,"timestamp":106500825075,"id":1201,"parentId":1196,"tags":{},"startTime":1744821127665,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":5,"timestamp":106500825133,"id":1202,"parentId":1196,"tags":{},"startTime":1744821127665,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":1175,"timestamp":106500824853,"id":1198,"parentId":1196,"tags":{},"startTime":1744821127664,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":597,"timestamp":106500827069,"id":1203,"parentId":1196,"tags":{},"startTime":1744821127667,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":2330,"timestamp":106500827694,"id":1204,"parentId":1196,"tags":{},"startTime":1744821127667,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":5002,"timestamp":106500831835,"id":1205,"parentId":1196,"tags":{},"startTime":1744821127671,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":234,"timestamp":106500836835,"id":1206,"parentId":1196,"tags":{},"startTime":1744821127676,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":204,"timestamp":106500837046,"id":1207,"parentId":1196,"tags":{},"startTime":1744821127676,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":5647,"timestamp":106500837262,"id":1208,"parentId":1196,"tags":{},"startTime":1744821127677,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":671,"timestamp":106500844936,"id":1210,"parentId":1173,"tags":{},"startTime":1744821127684,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":983,"timestamp":106500844637,"id":1209,"parentId":1173,"tags":{},"startTime":1744821127684,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":25565,"timestamp":106500821850,"id":1196,"parentId":1173,"tags":{},"startTime":1744821127661,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":295952,"timestamp":106500551520,"id":1173,"parentId":1145,"tags":{"name":"client"},"startTime":1744821127391,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":14299,"timestamp":106500847525,"id":1211,"parentId":1145,"tags":{},"startTime":1744821127687,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":447273,"timestamp":106500417149,"id":1145,"parentId":3,"tags":{"trigger":"components/FlatFileForm.tsx"},"startTime":1744821127257,"traceId":"cd18399fa4a84ab9"}] +[{"name":"client-success","duration":1,"timestamp":106500867673,"id":1212,"parentId":3,"tags":{},"startTime":1744821127707,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":60997,"timestamp":106500871302,"id":1213,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744821127711,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":0,"timestamp":106500932328,"id":1214,"parentId":1213,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"594206720","memory.heapUsed":"240164176","memory.heapTotal":"278052864"},"startTime":1744821127772,"traceId":"cd18399fa4a84ab9"},{"name":"client-hmr-latency","duration":544000,"timestamp":1744821127257000,"id":1215,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./styles/globals.css","(app-pages-browser)/./components/FlatFileForm.tsx"],"page":"/","isPageHidden":true},"startTime":1744821127800,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":9819,"timestamp":106502086599,"id":1220,"parentId":1219,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821128926,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":9754,"timestamp":106502086683,"id":1222,"parentId":1219,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821128926,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":11062,"timestamp":106502086697,"id":1224,"parentId":1219,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1744821128926,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13229,"timestamp":106502086713,"id":1226,"parentId":1219,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1744821128926,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13218,"timestamp":106502086745,"id":1230,"parentId":1219,"tags":{"request":"next-client-pages-loader?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&page=%2F_error!"},"startTime":1744821128926,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":5016,"timestamp":106502096161,"id":1234,"parentId":1233,"tags":{},"startTime":1744821128936,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":5159,"timestamp":106502096036,"id":1233,"parentId":1231,"tags":{},"startTime":1744821128935,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":13712,"timestamp":106502095302,"id":1231,"parentId":1218,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\components\\FlatFileForm.tsx","layer":"app-pages-browser"},"startTime":1744821128935,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":22750,"timestamp":106502086738,"id":1229,"parentId":1219,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744821128926,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":22939,"timestamp":106502086704,"id":1225,"parentId":1219,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\router.js"},"startTime":1744821128926,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":23465,"timestamp":106502086691,"id":1223,"parentId":1219,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744821128926,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":9906,"timestamp":106502100422,"id":1236,"parentId":1235,"tags":{},"startTime":1744821128940,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":55050,"timestamp":106502110395,"id":1238,"parentId":1237,"tags":{},"startTime":1744821128950,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":55283,"timestamp":106502110365,"id":1237,"parentId":1235,"tags":{},"startTime":1744821128950,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":10635,"timestamp":106502165702,"id":1239,"parentId":1235,"tags":{"astUsed":"true"},"startTime":1744821129005,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":77486,"timestamp":106502100184,"id":1235,"parentId":1232,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744821128940,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":91438,"timestamp":106502086719,"id":1227,"parentId":1219,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744821128926,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":92224,"timestamp":106502086674,"id":1221,"parentId":1219,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1744821128926,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":91166,"timestamp":106502095674,"id":1232,"parentId":1218,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744821128935,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":53,"timestamp":106502187271,"id":1240,"parentId":1232,"tags":{},"startTime":1744821129027,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":100682,"timestamp":106502086725,"id":1228,"parentId":1219,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744821128926,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":102019,"timestamp":106502085415,"id":1219,"parentId":1218,"tags":{},"startTime":1744821128925,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":2274,"timestamp":106502192778,"id":1242,"parentId":1241,"tags":{},"startTime":1744821129032,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":5,"timestamp":106502195109,"id":1244,"parentId":1241,"tags":{},"startTime":1744821129035,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":139,"timestamp":106502195237,"id":1245,"parentId":1241,"tags":{},"startTime":1744821129035,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":6,"timestamp":106502195410,"id":1246,"parentId":1241,"tags":{},"startTime":1744821129035,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":5,"timestamp":106502195438,"id":1247,"parentId":1241,"tags":{},"startTime":1744821129035,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":985,"timestamp":106502195097,"id":1243,"parentId":1241,"tags":{},"startTime":1744821129035,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":923,"timestamp":106502197808,"id":1248,"parentId":1241,"tags":{},"startTime":1744821129037,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":2382,"timestamp":106502198775,"id":1249,"parentId":1241,"tags":{},"startTime":1744821129038,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":5482,"timestamp":106502203745,"id":1250,"parentId":1241,"tags":{},"startTime":1744821129043,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":247,"timestamp":106502209224,"id":1251,"parentId":1241,"tags":{},"startTime":1744821129049,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":352,"timestamp":106502209456,"id":1252,"parentId":1241,"tags":{},"startTime":1744821129049,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":14808,"timestamp":106502209825,"id":1253,"parentId":1241,"tags":{},"startTime":1744821129049,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":86,"timestamp":106502226370,"id":1255,"parentId":1218,"tags":{},"startTime":1744821129066,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":188,"timestamp":106502226280,"id":1254,"parentId":1218,"tags":{},"startTime":1744821129066,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":36951,"timestamp":106502191187,"id":1241,"parentId":1218,"tags":{},"startTime":1744821129031,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":143079,"timestamp":106502085105,"id":1218,"parentId":1216,"tags":{"name":"client"},"startTime":1744821128925,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":15640,"timestamp":106502228215,"id":1256,"parentId":1216,"tags":{},"startTime":1744821129068,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":176125,"timestamp":106502068633,"id":1216,"parentId":3,"tags":{"trigger":"components/FlatFileForm.tsx"},"startTime":1744821128908,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":1,"timestamp":106502250012,"id":1259,"parentId":3,"tags":{},"startTime":1744821129089,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":5618,"timestamp":106502252688,"id":1260,"parentId":1258,"tags":{"request":"next/dist/pages/_app"},"startTime":1744821129092,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":5840,"timestamp":106502252770,"id":1262,"parentId":1258,"tags":{"request":"next/dist/pages/_document"},"startTime":1744821129092,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":14468,"timestamp":106502252761,"id":1261,"parentId":1258,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821129092,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":14471,"timestamp":106502252775,"id":1263,"parentId":1258,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=.%2Fnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821129092,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":15180,"timestamp":106502252781,"id":1264,"parentId":1258,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821129092,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":3359,"timestamp":106502269845,"id":1270,"parentId":1269,"tags":{},"startTime":1744821129109,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":3511,"timestamp":106502269710,"id":1269,"parentId":1268,"tags":{},"startTime":1744821129109,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":7885,"timestamp":106502269265,"id":1268,"parentId":1257,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\components\\FlatFileForm.tsx","layer":"ssr"},"startTime":1744821129109,"traceId":"cd18399fa4a84ab9"},{"name":"client-hmr-latency","duration":204000,"timestamp":1744821128909000,"id":1271,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./styles/globals.css"],"page":"/","isPageHidden":true},"startTime":1744821129117,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":35313,"timestamp":106502246240,"id":1258,"parentId":1257,"tags":{},"startTime":1744821129086,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":744,"timestamp":106502290639,"id":1273,"parentId":1272,"tags":{},"startTime":1744821129130,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":4,"timestamp":106502291416,"id":1275,"parentId":1272,"tags":{},"startTime":1744821129131,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":1739,"timestamp":106502291511,"id":1276,"parentId":1272,"tags":{},"startTime":1744821129131,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":5,"timestamp":106502293283,"id":1277,"parentId":1272,"tags":{},"startTime":1744821129133,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106502293303,"id":1278,"parentId":1272,"tags":{},"startTime":1744821129133,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":2710,"timestamp":106502291409,"id":1274,"parentId":1272,"tags":{},"startTime":1744821129131,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":433,"timestamp":106502294918,"id":1279,"parentId":1272,"tags":{},"startTime":1744821129134,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1131,"timestamp":106502295368,"id":1280,"parentId":1272,"tags":{},"startTime":1744821129135,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":6551,"timestamp":106502297674,"id":1281,"parentId":1272,"tags":{},"startTime":1744821129137,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":97,"timestamp":106502304223,"id":1282,"parentId":1272,"tags":{},"startTime":1744821129144,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":98,"timestamp":106502304306,"id":1283,"parentId":1272,"tags":{},"startTime":1744821129144,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":402,"timestamp":106502304411,"id":1284,"parentId":1272,"tags":{},"startTime":1744821129144,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":16799,"timestamp":106502289707,"id":1272,"parentId":1257,"tags":{},"startTime":1744821129129,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":63885,"timestamp":106502245970,"id":1257,"parentId":1217,"tags":{"name":"server"},"startTime":1744821129085,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":7595,"timestamp":106502309915,"id":1285,"parentId":1217,"tags":{},"startTime":1744821129149,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":249591,"timestamp":106502068952,"id":1217,"parentId":3,"tags":{"trigger":"components/FlatFileForm.tsx"},"startTime":1744821128908,"traceId":"cd18399fa4a84ab9"}] +[{"name":"handle-request","duration":50887,"timestamp":106502324167,"id":1286,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744821129164,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106502375085,"id":1287,"parentId":1286,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"551424000","memory.heapUsed":"257347528","memory.heapTotal":"285032448"},"startTime":1744821129215,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":9540,"timestamp":106705082417,"id":1292,"parentId":1291,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821331922,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":9344,"timestamp":106705082651,"id":1294,"parentId":1291,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821331922,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":10687,"timestamp":106705082664,"id":1296,"parentId":1291,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1744821331922,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":3475,"timestamp":106705090040,"id":1304,"parentId":1303,"tags":{},"startTime":1744821331929,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":3703,"timestamp":106705089818,"id":1303,"parentId":1302,"tags":{},"startTime":1744821331929,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":13982,"timestamp":106705089514,"id":1302,"parentId":1290,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"app-pages-browser"},"startTime":1744821331929,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":23390,"timestamp":106705082674,"id":1298,"parentId":1291,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1744821331922,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":31532,"timestamp":106705082700,"id":1301,"parentId":1291,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744821331922,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":31750,"timestamp":106705082669,"id":1297,"parentId":1291,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\router.js"},"startTime":1744821331922,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":32923,"timestamp":106705082658,"id":1295,"parentId":1291,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744821331922,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":35182,"timestamp":106705082679,"id":1299,"parentId":1291,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744821331922,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":63739,"timestamp":106705082637,"id":1293,"parentId":1291,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1744821331922,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":493,"timestamp":106705298550,"id":1307,"parentId":1306,"tags":{},"startTime":1744821332138,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":64453,"timestamp":106705299156,"id":1309,"parentId":1308,"tags":{},"startTime":1744821332138,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":65106,"timestamp":106705299116,"id":1308,"parentId":1306,"tags":{},"startTime":1744821332138,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":11007,"timestamp":106705364333,"id":1310,"parentId":1306,"tags":{"astUsed":"true"},"startTime":1744821332204,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":78997,"timestamp":106705298213,"id":1306,"parentId":1305,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744821332137,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":89643,"timestamp":106705293732,"id":1305,"parentId":1302,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744821332133,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":76,"timestamp":106705383523,"id":1311,"parentId":1305,"tags":{},"startTime":1744821332223,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":300941,"timestamp":106705082685,"id":1300,"parentId":1291,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744821331922,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":302366,"timestamp":106705081301,"id":1291,"parentId":1290,"tags":{},"startTime":1744821331920,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1772,"timestamp":106705387513,"id":1313,"parentId":1312,"tags":{},"startTime":1744821332227,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":17,"timestamp":106705389375,"id":1315,"parentId":1312,"tags":{},"startTime":1744821332229,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":72,"timestamp":106705389443,"id":1316,"parentId":1312,"tags":{},"startTime":1744821332229,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":16,"timestamp":106705389562,"id":1317,"parentId":1312,"tags":{},"startTime":1744821332229,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":16,"timestamp":106705389624,"id":1318,"parentId":1312,"tags":{},"startTime":1744821332229,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":1343,"timestamp":106705389331,"id":1314,"parentId":1312,"tags":{},"startTime":1744821332229,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":406,"timestamp":106705392007,"id":1319,"parentId":1312,"tags":{},"startTime":1744821332231,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1958,"timestamp":106705392448,"id":1320,"parentId":1312,"tags":{},"startTime":1744821332232,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":5211,"timestamp":106705396493,"id":1321,"parentId":1312,"tags":{},"startTime":1744821332236,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":210,"timestamp":106705401702,"id":1322,"parentId":1312,"tags":{},"startTime":1744821332241,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":160,"timestamp":106705401899,"id":1323,"parentId":1312,"tags":{},"startTime":1744821332241,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":3115,"timestamp":106705402068,"id":1324,"parentId":1312,"tags":{},"startTime":1744821332241,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":393,"timestamp":106705407245,"id":1326,"parentId":1290,"tags":{},"startTime":1744821332246,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":744,"timestamp":106705406907,"id":1325,"parentId":1290,"tags":{},"startTime":1744821332246,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":23045,"timestamp":106705386327,"id":1312,"parentId":1290,"tags":{},"startTime":1744821332226,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":329403,"timestamp":106705080034,"id":1290,"parentId":1288,"tags":{"name":"client"},"startTime":1744821331919,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":10688,"timestamp":106705409548,"id":1327,"parentId":1288,"tags":{},"startTime":1744821332249,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":352520,"timestamp":106705069285,"id":1288,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821331908,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":0,"timestamp":106705426801,"id":1330,"parentId":3,"tags":{},"startTime":1744821332266,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":6693,"timestamp":106705428558,"id":1331,"parentId":1329,"tags":{"request":"next/dist/pages/_app"},"startTime":1744821332268,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":6882,"timestamp":106705428641,"id":1333,"parentId":1329,"tags":{"request":"next/dist/pages/_document"},"startTime":1744821332268,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":1405,"timestamp":106705440619,"id":1337,"parentId":1336,"tags":{},"startTime":1744821332280,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":1550,"timestamp":106705440488,"id":1336,"parentId":1335,"tags":{},"startTime":1744821332280,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":3612,"timestamp":106705440245,"id":1335,"parentId":1328,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"rsc"},"startTime":1744821332279,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":17312,"timestamp":106705428633,"id":1332,"parentId":1329,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821332268,"traceId":"cd18399fa4a84ab9"},{"name":"client-hmr-latency","duration":406000,"timestamp":1744821331910000,"id":1338,"parentId":3,"tags":{"updatedModules":["[project]/node_modules/next/dist/build/webpack/loaders/next-client-pages-loader.js?absolutePagePath=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cpages%5C_error.js&page=%2F_error!","(app-pages-browser)/./styles/globals.css"],"page":"/","isPageHidden":true},"startTime":1744821332316,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":99555,"timestamp":106705428647,"id":1334,"parentId":1329,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821332268,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2807,"timestamp":106705529860,"id":1344,"parentId":1343,"tags":{},"startTime":1744821332369,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2977,"timestamp":106705529702,"id":1343,"parentId":1342,"tags":{},"startTime":1744821332369,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":9739,"timestamp":106705529497,"id":1342,"parentId":1328,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"ssr"},"startTime":1744821332369,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":143868,"timestamp":106705424751,"id":1329,"parentId":1328,"tags":{},"startTime":1744821332264,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1706,"timestamp":106705586419,"id":1346,"parentId":1345,"tags":{},"startTime":1744821332426,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":6,"timestamp":106705588160,"id":1348,"parentId":1345,"tags":{},"startTime":1744821332427,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":2226,"timestamp":106705588251,"id":1349,"parentId":1345,"tags":{},"startTime":1744821332427,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":9,"timestamp":106705590553,"id":1350,"parentId":1345,"tags":{},"startTime":1744821332430,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":6,"timestamp":106705590614,"id":1351,"parentId":1345,"tags":{},"startTime":1744821332430,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":3535,"timestamp":106705588150,"id":1347,"parentId":1345,"tags":{},"startTime":1744821332427,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":576,"timestamp":106705592956,"id":1352,"parentId":1345,"tags":{},"startTime":1744821332432,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1793,"timestamp":106705593554,"id":1353,"parentId":1345,"tags":{},"startTime":1744821332433,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":2807,"timestamp":106705596874,"id":1354,"parentId":1345,"tags":{},"startTime":1744821332436,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":157,"timestamp":106705599679,"id":1355,"parentId":1345,"tags":{},"startTime":1744821332439,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":97,"timestamp":106705599819,"id":1356,"parentId":1345,"tags":{},"startTime":1744821332439,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":1010,"timestamp":106705599923,"id":1357,"parentId":1345,"tags":{},"startTime":1744821332439,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":25072,"timestamp":106705585373,"id":1345,"parentId":1328,"tags":{},"startTime":1744821332425,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":189263,"timestamp":106705424209,"id":1328,"parentId":1289,"tags":{"name":"server"},"startTime":1744821332263,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":10212,"timestamp":106705613612,"id":1358,"parentId":1289,"tags":{},"startTime":1744821332453,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":555785,"timestamp":106705070154,"id":1289,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821331909,"traceId":"cd18399fa4a84ab9"}] +[{"name":"handle-request","duration":58009,"timestamp":106705630320,"id":1359,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744821332469,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106705688362,"id":1360,"parentId":1359,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"536616960","memory.heapUsed":"246289760","memory.heapTotal":"280055808"},"startTime":1744821332528,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":6283,"timestamp":106717890118,"id":1367,"parentId":1364,"tags":{"request":"next/dist/pages/_document"},"startTime":1744821344729,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":6817,"timestamp":106717890013,"id":1365,"parentId":1364,"tags":{"request":"next/dist/pages/_app"},"startTime":1744821344729,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13723,"timestamp":106717890108,"id":1366,"parentId":1364,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821344729,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":1507,"timestamp":106717902383,"id":1371,"parentId":1370,"tags":{},"startTime":1744821344742,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":1617,"timestamp":106717902281,"id":1370,"parentId":1369,"tags":{},"startTime":1744821344742,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":4646,"timestamp":106717901845,"id":1369,"parentId":1363,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"rsc"},"startTime":1744821344741,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":17027,"timestamp":106717890124,"id":1368,"parentId":1364,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821344729,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2375,"timestamp":106717909915,"id":1377,"parentId":1376,"tags":{},"startTime":1744821344749,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2484,"timestamp":106717909822,"id":1376,"parentId":1375,"tags":{},"startTime":1744821344749,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":8662,"timestamp":106717909662,"id":1375,"parentId":1363,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"ssr"},"startTime":1744821344749,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":35987,"timestamp":106717888374,"id":1364,"parentId":1363,"tags":{},"startTime":1744821344728,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1435,"timestamp":106717932137,"id":1379,"parentId":1378,"tags":{},"startTime":1744821344771,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":4,"timestamp":106717933644,"id":1381,"parentId":1378,"tags":{},"startTime":1744821344773,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":10617,"timestamp":106717933766,"id":1382,"parentId":1378,"tags":{},"startTime":1744821344773,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":7,"timestamp":106717944437,"id":1383,"parentId":1378,"tags":{},"startTime":1744821344784,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106717944460,"id":1384,"parentId":1378,"tags":{},"startTime":1744821344784,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":11457,"timestamp":106717933606,"id":1380,"parentId":1378,"tags":{},"startTime":1744821344773,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":393,"timestamp":106717945965,"id":1385,"parentId":1378,"tags":{},"startTime":1744821344785,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1387,"timestamp":106717946377,"id":1386,"parentId":1378,"tags":{},"startTime":1744821344786,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":1411,"timestamp":106717948954,"id":1387,"parentId":1378,"tags":{},"startTime":1744821344788,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":102,"timestamp":106717950363,"id":1388,"parentId":1378,"tags":{},"startTime":1744821344790,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":104,"timestamp":106717950451,"id":1389,"parentId":1378,"tags":{},"startTime":1744821344790,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":423,"timestamp":106717950562,"id":1390,"parentId":1378,"tags":{},"startTime":1744821344790,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":21695,"timestamp":106717931029,"id":1378,"parentId":1363,"tags":{},"startTime":1744821344770,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":67494,"timestamp":106717888072,"id":1363,"parentId":1362,"tags":{"name":"server"},"startTime":1744821344727,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":10501,"timestamp":106717955632,"id":1391,"parentId":1362,"tags":{},"startTime":1744821344795,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":99391,"timestamp":106717867149,"id":1362,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821344706,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":14462,"timestamp":106717970981,"id":1394,"parentId":1393,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821344810,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":14417,"timestamp":106717971054,"id":1396,"parentId":1393,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821344810,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":15487,"timestamp":106717971066,"id":1398,"parentId":1393,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1744821344810,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":3026,"timestamp":106717983793,"id":1406,"parentId":1405,"tags":{},"startTime":1744821344823,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":3126,"timestamp":106717983700,"id":1405,"parentId":1404,"tags":{},"startTime":1744821344823,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":8866,"timestamp":106717983373,"id":1404,"parentId":1392,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"app-pages-browser"},"startTime":1744821344823,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":23476,"timestamp":106717971077,"id":1400,"parentId":1393,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1744821344810,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":25653,"timestamp":106717971109,"id":1403,"parentId":1393,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744821344810,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":25974,"timestamp":106717971072,"id":1399,"parentId":1393,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\router.js"},"startTime":1744821344810,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":26084,"timestamp":106717971060,"id":1397,"parentId":1393,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744821344810,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":26278,"timestamp":106717971082,"id":1401,"parentId":1393,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744821344810,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":726,"timestamp":106717996690,"id":1409,"parentId":1408,"tags":{},"startTime":1744821344836,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":31617,"timestamp":106717971046,"id":1395,"parentId":1393,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1744821344810,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":53242,"timestamp":106717997502,"id":1411,"parentId":1410,"tags":{},"startTime":1744821344837,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":53502,"timestamp":106717997467,"id":1410,"parentId":1408,"tags":{},"startTime":1744821344837,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":10412,"timestamp":106718051022,"id":1412,"parentId":1408,"tags":{"astUsed":"true"},"startTime":1744821344890,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":66689,"timestamp":106717996461,"id":1408,"parentId":1407,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744821344836,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":72572,"timestamp":106717994812,"id":1407,"parentId":1404,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744821344834,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":42,"timestamp":106718069395,"id":1413,"parentId":1407,"tags":{},"startTime":1744821344909,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":98423,"timestamp":106717971088,"id":1402,"parentId":1393,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744821344810,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":101529,"timestamp":106717968000,"id":1393,"parentId":1392,"tags":{},"startTime":1744821344807,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1194,"timestamp":106718072395,"id":1415,"parentId":1414,"tags":{},"startTime":1744821344912,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":4,"timestamp":106718073622,"id":1417,"parentId":1414,"tags":{},"startTime":1744821344913,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":59,"timestamp":106718073743,"id":1418,"parentId":1414,"tags":{},"startTime":1744821344913,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":4,"timestamp":106718073827,"id":1419,"parentId":1414,"tags":{},"startTime":1744821344913,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":3,"timestamp":106718073848,"id":1420,"parentId":1414,"tags":{},"startTime":1744821344913,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":1067,"timestamp":106718073615,"id":1416,"parentId":1414,"tags":{},"startTime":1744821344913,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":407,"timestamp":106718075655,"id":1421,"parentId":1414,"tags":{},"startTime":1744821344915,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1552,"timestamp":106718076139,"id":1422,"parentId":1414,"tags":{},"startTime":1744821344915,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":3243,"timestamp":106718079148,"id":1423,"parentId":1414,"tags":{},"startTime":1744821344918,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":149,"timestamp":106718082388,"id":1424,"parentId":1414,"tags":{},"startTime":1744821344922,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":184,"timestamp":106718082527,"id":1425,"parentId":1414,"tags":{},"startTime":1744821344922,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":4141,"timestamp":106718082721,"id":1426,"parentId":1414,"tags":{},"startTime":1744821344922,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":94,"timestamp":106718087969,"id":1428,"parentId":1392,"tags":{},"startTime":1744821344927,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":189,"timestamp":106718087884,"id":1427,"parentId":1392,"tags":{},"startTime":1744821344927,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":17835,"timestamp":106718071383,"id":1414,"parentId":1392,"tags":{},"startTime":1744821344911,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":121526,"timestamp":106717967730,"id":1392,"parentId":1361,"tags":{"name":"client"},"startTime":1744821344807,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":10092,"timestamp":106718089287,"id":1429,"parentId":1361,"tags":{},"startTime":1744821344929,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":235242,"timestamp":106717865743,"id":1361,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821344705,"traceId":"cd18399fa4a84ab9"}] +[{"name":"client-success","duration":0,"timestamp":106718102608,"id":1430,"parentId":3,"tags":{},"startTime":1744821344942,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":55050,"timestamp":106718110744,"id":1431,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744821344950,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106718165832,"id":1432,"parentId":1431,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"567009280","memory.heapUsed":"268550688","memory.heapTotal":"298520576"},"startTime":1744821345005,"traceId":"cd18399fa4a84ab9"},{"name":"client-hmr-latency","duration":320000,"timestamp":1744821344707000,"id":1433,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./styles/globals.css"],"page":"/","isPageHidden":true},"startTime":1744821345026,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":6402,"timestamp":106727340222,"id":1438,"parentId":1437,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821354179,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":6291,"timestamp":106727340353,"id":1440,"parentId":1437,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821354180,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":7181,"timestamp":106727340377,"id":1442,"parentId":1437,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1744821354180,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2450,"timestamp":106727345216,"id":1450,"parentId":1449,"tags":{},"startTime":1744821354184,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2536,"timestamp":106727345135,"id":1449,"parentId":1448,"tags":{},"startTime":1744821354184,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":6120,"timestamp":106727344931,"id":1448,"parentId":1436,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"app-pages-browser"},"startTime":1744821354184,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":17424,"timestamp":106727340397,"id":1444,"parentId":1437,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1744821354180,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":19107,"timestamp":106727340429,"id":1447,"parentId":1437,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744821354180,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":19211,"timestamp":106727340388,"id":1443,"parentId":1437,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\router.js"},"startTime":1744821354180,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":19685,"timestamp":106727340366,"id":1441,"parentId":1437,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744821354180,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":803,"timestamp":106727359774,"id":1453,"parentId":1452,"tags":{},"startTime":1744821354199,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":23570,"timestamp":106727340406,"id":1445,"parentId":1437,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744821354180,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":23692,"timestamp":106727340331,"id":1439,"parentId":1437,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1744821354180,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":37464,"timestamp":106727360639,"id":1455,"parentId":1454,"tags":{},"startTime":1744821354200,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":37650,"timestamp":106727360611,"id":1454,"parentId":1452,"tags":{},"startTime":1744821354200,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":12229,"timestamp":106727398306,"id":1456,"parentId":1452,"tags":{"astUsed":"true"},"startTime":1744821354238,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":51910,"timestamp":106727359673,"id":1452,"parentId":1451,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744821354199,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":57598,"timestamp":106727358804,"id":1451,"parentId":1448,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744821354198,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":35,"timestamp":106727416696,"id":1457,"parentId":1451,"tags":{},"startTime":1744821354256,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":76404,"timestamp":106727340416,"id":1446,"parentId":1437,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744821354180,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":77517,"timestamp":106727339323,"id":1437,"parentId":1436,"tags":{},"startTime":1744821354179,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1781,"timestamp":106727420904,"id":1459,"parentId":1458,"tags":{},"startTime":1744821354260,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":4,"timestamp":106727422719,"id":1461,"parentId":1458,"tags":{},"startTime":1744821354262,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":109,"timestamp":106727422736,"id":1462,"parentId":1458,"tags":{},"startTime":1744821354262,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":4,"timestamp":106727422866,"id":1463,"parentId":1458,"tags":{},"startTime":1744821354262,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106727422889,"id":1464,"parentId":1458,"tags":{},"startTime":1744821354262,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":684,"timestamp":106727422710,"id":1460,"parentId":1458,"tags":{},"startTime":1744821354262,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":571,"timestamp":106727424832,"id":1465,"parentId":1458,"tags":{},"startTime":1744821354264,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":2634,"timestamp":106727425423,"id":1466,"parentId":1458,"tags":{},"startTime":1744821354265,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":3775,"timestamp":106727429645,"id":1467,"parentId":1458,"tags":{},"startTime":1744821354269,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":261,"timestamp":106727433418,"id":1468,"parentId":1458,"tags":{},"startTime":1744821354273,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":129,"timestamp":106727433669,"id":1469,"parentId":1458,"tags":{},"startTime":1744821354273,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":4204,"timestamp":106727433805,"id":1470,"parentId":1458,"tags":{},"startTime":1744821354273,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":84,"timestamp":106727439172,"id":1472,"parentId":1436,"tags":{},"startTime":1744821354278,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":278,"timestamp":106727438987,"id":1471,"parentId":1436,"tags":{},"startTime":1744821354278,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":21225,"timestamp":106727419375,"id":1458,"parentId":1436,"tags":{},"startTime":1744821354259,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":101986,"timestamp":106727338646,"id":1436,"parentId":1434,"tags":{"name":"client"},"startTime":1744821354178,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":22523,"timestamp":106727440659,"id":1473,"parentId":1434,"tags":{},"startTime":1744821354280,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":137391,"timestamp":106727326864,"id":1434,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821354166,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":0,"timestamp":106727466966,"id":1476,"parentId":3,"tags":{},"startTime":1744821354306,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":4911,"timestamp":106727468436,"id":1477,"parentId":1475,"tags":{"request":"next/dist/pages/_app"},"startTime":1744821354308,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":5586,"timestamp":106727468494,"id":1479,"parentId":1475,"tags":{"request":"next/dist/pages/_document"},"startTime":1744821354308,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":11867,"timestamp":106727468488,"id":1478,"parentId":1475,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821354308,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":1461,"timestamp":106727479215,"id":1483,"parentId":1482,"tags":{},"startTime":1744821354318,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":1599,"timestamp":106727479088,"id":1482,"parentId":1481,"tags":{},"startTime":1744821354318,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":2724,"timestamp":106727478882,"id":1481,"parentId":1474,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"rsc"},"startTime":1744821354318,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13396,"timestamp":106727468499,"id":1480,"parentId":1475,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821354308,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2411,"timestamp":106727482758,"id":1489,"parentId":1488,"tags":{},"startTime":1744821354322,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2504,"timestamp":106727482677,"id":1488,"parentId":1487,"tags":{},"startTime":1744821354322,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":4765,"timestamp":106727482546,"id":1487,"parentId":1474,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"ssr"},"startTime":1744821354322,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":29369,"timestamp":106727465585,"id":1475,"parentId":1474,"tags":{},"startTime":1744821354305,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":794,"timestamp":106727502269,"id":1491,"parentId":1490,"tags":{},"startTime":1744821354342,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":4,"timestamp":106727503091,"id":1493,"parentId":1490,"tags":{},"startTime":1744821354342,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":1634,"timestamp":106727503108,"id":1494,"parentId":1490,"tags":{},"startTime":1744821354342,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":4,"timestamp":106727504772,"id":1495,"parentId":1490,"tags":{},"startTime":1744821354344,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":3,"timestamp":106727504792,"id":1496,"parentId":1490,"tags":{},"startTime":1744821354344,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":2504,"timestamp":106727503084,"id":1492,"parentId":1490,"tags":{},"startTime":1744821354342,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":315,"timestamp":106727506207,"id":1497,"parentId":1490,"tags":{},"startTime":1744821354345,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1187,"timestamp":106727506537,"id":1498,"parentId":1490,"tags":{},"startTime":1744821354346,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":1091,"timestamp":106727508565,"id":1499,"parentId":1490,"tags":{},"startTime":1744821354348,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":68,"timestamp":106727509656,"id":1500,"parentId":1490,"tags":{},"startTime":1744821354349,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":84,"timestamp":106727509714,"id":1501,"parentId":1490,"tags":{},"startTime":1744821354349,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":2903,"timestamp":106727509858,"id":1502,"parentId":1490,"tags":{},"startTime":1744821354349,"traceId":"cd18399fa4a84ab9"},{"name":"client-hmr-latency","duration":168000,"timestamp":1744821354167000,"id":1503,"parentId":3,"tags":{"updatedModules":["(app-pages-browser)/./styles/globals.css"],"page":"/","isPageHidden":true},"startTime":1744821354353,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":12736,"timestamp":106727501414,"id":1490,"parentId":1474,"tags":{},"startTime":1744821354341,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":51434,"timestamp":106727465323,"id":1474,"parentId":1435,"tags":{"name":"server"},"startTime":1744821354305,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":7764,"timestamp":106727516793,"id":1504,"parentId":1435,"tags":{},"startTime":1744821354356,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":198307,"timestamp":106727327193,"id":1435,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821354166,"traceId":"cd18399fa4a84ab9"}] +[{"name":"handle-request","duration":46184,"timestamp":106727529991,"id":1505,"tags":{"url":"/?_rsc=1xuj0","isTurbopack":false},"startTime":1744821354369,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":1,"timestamp":106727576208,"id":1506,"parentId":1505,"tags":{"url":"/?_rsc=1xuj0","memory.rss":"572518400","memory.heapUsed":"249778688","memory.heapTotal":"304435200"},"startTime":1744821354415,"traceId":"cd18399fa4a84ab9"},{"name":"handle-request","duration":127077,"timestamp":106745846742,"id":1507,"tags":{"url":"/","isTurbopack":false},"startTime":1744821372686,"traceId":"cd18399fa4a84ab9"},{"name":"memory-usage","duration":2,"timestamp":106745973874,"id":1508,"parentId":1507,"tags":{"url":"/","memory.rss":"503406592","memory.heapUsed":"225899688","memory.heapTotal":"235802624"},"startTime":1744821372813,"traceId":"cd18399fa4a84ab9"},{"name":"client-success","duration":1,"timestamp":106746372546,"id":1509,"parentId":3,"tags":{},"startTime":1744821373212,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":9475,"timestamp":106881896277,"id":1516,"parentId":1513,"tags":{"request":"next/dist/pages/_document"},"startTime":1744821508735,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":9935,"timestamp":106881896143,"id":1514,"parentId":1513,"tags":{"request":"next/dist/pages/_app"},"startTime":1744821508735,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":16950,"timestamp":106881896266,"id":1515,"parentId":1513,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821508735,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":1752,"timestamp":106881911759,"id":1520,"parentId":1519,"tags":{},"startTime":1744821508751,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":1916,"timestamp":106881911606,"id":1519,"parentId":1518,"tags":{},"startTime":1744821508750,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":5383,"timestamp":106881911278,"id":1518,"parentId":1512,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"rsc"},"startTime":1744821508750,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":20893,"timestamp":106881896283,"id":1517,"parentId":1513,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821508735,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2931,"timestamp":106881918997,"id":1526,"parentId":1525,"tags":{},"startTime":1744821508758,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":3080,"timestamp":106881918863,"id":1525,"parentId":1524,"tags":{},"startTime":1744821508758,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":11479,"timestamp":106881918682,"id":1524,"parentId":1512,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"ssr"},"startTime":1744821508757,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":45197,"timestamp":106881893508,"id":1513,"parentId":1512,"tags":{},"startTime":1744821508732,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":2176,"timestamp":106881999439,"id":1528,"parentId":1527,"tags":{},"startTime":1744821508838,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":17,"timestamp":106882001712,"id":1530,"parentId":1527,"tags":{},"startTime":1744821508840,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":4276,"timestamp":106882001790,"id":1531,"parentId":1527,"tags":{},"startTime":1744821508841,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":27,"timestamp":106882006194,"id":1532,"parentId":1527,"tags":{},"startTime":1744821508845,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":20,"timestamp":106882006290,"id":1533,"parentId":1527,"tags":{},"startTime":1744821508845,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":5625,"timestamp":106882001675,"id":1529,"parentId":1527,"tags":{},"startTime":1744821508840,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":1001,"timestamp":106882010706,"id":1534,"parentId":1527,"tags":{},"startTime":1744821508849,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":5089,"timestamp":106882011768,"id":1535,"parentId":1527,"tags":{},"startTime":1744821508851,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":3613,"timestamp":106882020384,"id":1536,"parentId":1527,"tags":{},"startTime":1744821508859,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":290,"timestamp":106882023994,"id":1537,"parentId":1527,"tags":{},"startTime":1744821508863,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":153,"timestamp":106882024231,"id":1538,"parentId":1527,"tags":{},"startTime":1744821508863,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":4732,"timestamp":106882024393,"id":1539,"parentId":1527,"tags":{},"startTime":1744821508863,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":40740,"timestamp":106881997802,"id":1527,"parentId":1512,"tags":{},"startTime":1744821508837,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":157653,"timestamp":106881892559,"id":1512,"parentId":1510,"tags":{"name":"server"},"startTime":1744821508731,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":9834,"timestamp":106882050427,"id":1540,"parentId":1510,"tags":{},"startTime":1744821508889,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":179859,"timestamp":106881881438,"id":1510,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821508720,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":8521,"timestamp":106882068597,"id":1543,"parentId":1542,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821508907,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":8436,"timestamp":106882068709,"id":1545,"parentId":1542,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821508907,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":9403,"timestamp":106882068722,"id":1547,"parentId":1542,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1744821508907,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":3967,"timestamp":106882074445,"id":1555,"parentId":1554,"tags":{},"startTime":1744821508913,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":4878,"timestamp":106882073541,"id":1554,"parentId":1553,"tags":{},"startTime":1744821508912,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":11637,"timestamp":106882073264,"id":1553,"parentId":1541,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"app-pages-browser"},"startTime":1744821508912,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":22453,"timestamp":106882068734,"id":1549,"parentId":1542,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1744821508908,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":27331,"timestamp":106882068757,"id":1552,"parentId":1542,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744821508908,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":27558,"timestamp":106882068728,"id":1548,"parentId":1542,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\router.js"},"startTime":1744821508908,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":27639,"timestamp":106882068716,"id":1546,"parentId":1542,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744821508907,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":27873,"timestamp":106882068740,"id":1550,"parentId":1542,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744821508908,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":688,"timestamp":106882096012,"id":1558,"parentId":1557,"tags":{},"startTime":1744821508935,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":36614,"timestamp":106882068686,"id":1544,"parentId":1542,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1744821508907,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":56904,"timestamp":106882096806,"id":1560,"parentId":1559,"tags":{},"startTime":1744821508936,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":57597,"timestamp":106882096771,"id":1559,"parentId":1557,"tags":{},"startTime":1744821508936,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":11122,"timestamp":106882154453,"id":1561,"parentId":1557,"tags":{"astUsed":"true"},"startTime":1744821508993,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":71337,"timestamp":106882095767,"id":1557,"parentId":1556,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744821508935,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":81355,"timestamp":106882091664,"id":1556,"parentId":1553,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744821508930,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":95,"timestamp":106882173161,"id":1562,"parentId":1556,"tags":{},"startTime":1744821509012,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":104541,"timestamp":106882068745,"id":1551,"parentId":1542,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744821508908,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":108472,"timestamp":106882064856,"id":1542,"parentId":1541,"tags":{},"startTime":1744821508904,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":2753,"timestamp":106882205316,"id":1564,"parentId":1563,"tags":{},"startTime":1744821509044,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":76,"timestamp":106882208113,"id":1566,"parentId":1563,"tags":{},"startTime":1744821509047,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":88,"timestamp":106882208284,"id":1567,"parentId":1563,"tags":{},"startTime":1744821509047,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":7,"timestamp":106882208427,"id":1568,"parentId":1563,"tags":{},"startTime":1744821509047,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106882208477,"id":1569,"parentId":1563,"tags":{},"startTime":1744821509047,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":4123,"timestamp":106882208102,"id":1565,"parentId":1563,"tags":{},"startTime":1744821509047,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":813,"timestamp":106882214547,"id":1570,"parentId":1563,"tags":{},"startTime":1744821509053,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":5137,"timestamp":106882215387,"id":1571,"parentId":1563,"tags":{},"startTime":1744821509054,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":9268,"timestamp":106882223909,"id":1572,"parentId":1563,"tags":{},"startTime":1744821509063,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":329,"timestamp":106882233174,"id":1573,"parentId":1563,"tags":{},"startTime":1744821509072,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":219,"timestamp":106882233487,"id":1574,"parentId":1563,"tags":{},"startTime":1744821509072,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":4643,"timestamp":106882233717,"id":1575,"parentId":1563,"tags":{},"startTime":1744821509072,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":498,"timestamp":106882240700,"id":1577,"parentId":1541,"tags":{},"startTime":1744821509079,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":869,"timestamp":106882240345,"id":1576,"parentId":1541,"tags":{},"startTime":1744821509079,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":41469,"timestamp":106882201981,"id":1563,"parentId":1541,"tags":{},"startTime":1744821509041,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":179672,"timestamp":106882063876,"id":1541,"parentId":1511,"tags":{"name":"client"},"startTime":1744821508903,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":19896,"timestamp":106882243616,"id":1578,"parentId":1511,"tags":{},"startTime":1744821509082,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":384132,"timestamp":106881881833,"id":1511,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821508721,"traceId":"cd18399fa4a84ab9"}] +[{"name":"add-entry","duration":6406,"timestamp":106909063328,"id":1583,"parentId":1582,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821535902,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":6292,"timestamp":106909063462,"id":1585,"parentId":1582,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821535902,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":7198,"timestamp":106909063475,"id":1587,"parentId":1582,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1744821535902,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2655,"timestamp":106909068154,"id":1595,"parentId":1594,"tags":{},"startTime":1744821535907,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2761,"timestamp":106909068054,"id":1594,"parentId":1593,"tags":{},"startTime":1744821535907,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":7917,"timestamp":106909067774,"id":1593,"parentId":1581,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"app-pages-browser"},"startTime":1744821535907,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":14294,"timestamp":106909063486,"id":1589,"parentId":1582,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1744821535902,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":16528,"timestamp":106909063510,"id":1592,"parentId":1582,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744821535902,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":16645,"timestamp":106909063481,"id":1588,"parentId":1582,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\router.js"},"startTime":1744821535902,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":17426,"timestamp":106909063469,"id":1586,"parentId":1582,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744821535902,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":1221,"timestamp":106909080386,"id":1598,"parentId":1597,"tags":{},"startTime":1744821535919,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":23418,"timestamp":106909063491,"id":1590,"parentId":1582,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744821535902,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":23528,"timestamp":106909063449,"id":1584,"parentId":1582,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1744821535902,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":56025,"timestamp":106909081681,"id":1600,"parentId":1599,"tags":{},"startTime":1744821535920,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":56300,"timestamp":106909081645,"id":1599,"parentId":1597,"tags":{},"startTime":1744821535920,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":9801,"timestamp":106909137995,"id":1601,"parentId":1597,"tags":{"astUsed":"true"},"startTime":1744821535977,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":68923,"timestamp":106909080189,"id":1597,"parentId":1596,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744821535919,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":74063,"timestamp":106909079135,"id":1596,"parentId":1593,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744821535918,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":32,"timestamp":106909153338,"id":1602,"parentId":1596,"tags":{},"startTime":1744821535992,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":89891,"timestamp":106909063497,"id":1591,"parentId":1582,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744821535902,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":90714,"timestamp":106909062698,"id":1582,"parentId":1581,"tags":{},"startTime":1744821535901,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1345,"timestamp":106909156456,"id":1604,"parentId":1603,"tags":{},"startTime":1744821535995,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":8,"timestamp":106909157829,"id":1606,"parentId":1603,"tags":{},"startTime":1744821535997,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":59,"timestamp":106909157918,"id":1607,"parentId":1603,"tags":{},"startTime":1744821535997,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":5,"timestamp":106909157996,"id":1608,"parentId":1603,"tags":{},"startTime":1744821535997,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":3,"timestamp":106909158017,"id":1609,"parentId":1603,"tags":{},"startTime":1744821535997,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":683,"timestamp":106909157821,"id":1605,"parentId":1603,"tags":{},"startTime":1744821535997,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":312,"timestamp":106909160268,"id":1610,"parentId":1603,"tags":{},"startTime":1744821535999,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":2038,"timestamp":106909160598,"id":1611,"parentId":1603,"tags":{},"startTime":1744821535999,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":2889,"timestamp":106909163779,"id":1612,"parentId":1603,"tags":{},"startTime":1744821536003,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":235,"timestamp":106909166666,"id":1613,"parentId":1603,"tags":{},"startTime":1744821536005,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":174,"timestamp":106909166890,"id":1614,"parentId":1603,"tags":{},"startTime":1744821536006,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":4554,"timestamp":106909167073,"id":1615,"parentId":1603,"tags":{},"startTime":1744821536006,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":106,"timestamp":106909172636,"id":1617,"parentId":1581,"tags":{},"startTime":1744821536011,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":196,"timestamp":106909172556,"id":1616,"parentId":1581,"tags":{},"startTime":1744821536011,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":18429,"timestamp":106909155318,"id":1603,"parentId":1581,"tags":{},"startTime":1744821535994,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":111590,"timestamp":106909062192,"id":1581,"parentId":1579,"tags":{"name":"client"},"startTime":1744821535901,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":9969,"timestamp":106909173808,"id":1618,"parentId":1579,"tags":{},"startTime":1744821536013,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":131459,"timestamp":106909052898,"id":1579,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821535892,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":5726,"timestamp":106909189690,"id":1621,"parentId":1620,"tags":{"request":"next/dist/pages/_app"},"startTime":1744821536028,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":5929,"timestamp":106909189761,"id":1623,"parentId":1620,"tags":{"request":"next/dist/pages/_document"},"startTime":1744821536029,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":11758,"timestamp":106909189753,"id":1622,"parentId":1620,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821536029,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":1476,"timestamp":106909200251,"id":1627,"parentId":1626,"tags":{},"startTime":1744821536039,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":1565,"timestamp":106909200171,"id":1626,"parentId":1625,"tags":{},"startTime":1744821536039,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":2655,"timestamp":106909199896,"id":1625,"parentId":1619,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"rsc"},"startTime":1744821536039,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13144,"timestamp":106909189767,"id":1624,"parentId":1620,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821536029,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2686,"timestamp":106909203721,"id":1633,"parentId":1632,"tags":{},"startTime":1744821536042,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2775,"timestamp":106909203642,"id":1632,"parentId":1631,"tags":{},"startTime":1744821536042,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":5224,"timestamp":106909203522,"id":1631,"parentId":1619,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"ssr"},"startTime":1744821536042,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":28931,"timestamp":106909185904,"id":1620,"parentId":1619,"tags":{},"startTime":1744821536025,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1228,"timestamp":106909225814,"id":1635,"parentId":1634,"tags":{},"startTime":1744821536065,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":3,"timestamp":106909227072,"id":1637,"parentId":1634,"tags":{},"startTime":1744821536066,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":2023,"timestamp":106909227167,"id":1638,"parentId":1634,"tags":{},"startTime":1744821536066,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":6,"timestamp":106909229226,"id":1639,"parentId":1634,"tags":{},"startTime":1744821536068,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":3,"timestamp":106909229248,"id":1640,"parentId":1634,"tags":{},"startTime":1744821536068,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":3042,"timestamp":106909227065,"id":1636,"parentId":1634,"tags":{},"startTime":1744821536066,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":448,"timestamp":106909230959,"id":1641,"parentId":1634,"tags":{},"startTime":1744821536070,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":2139,"timestamp":106909231423,"id":1642,"parentId":1634,"tags":{},"startTime":1744821536070,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":1315,"timestamp":106909234530,"id":1643,"parentId":1634,"tags":{},"startTime":1744821536073,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":113,"timestamp":106909235843,"id":1644,"parentId":1634,"tags":{},"startTime":1744821536075,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":83,"timestamp":106909235943,"id":1645,"parentId":1634,"tags":{},"startTime":1744821536075,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":1802,"timestamp":106909236032,"id":1646,"parentId":1634,"tags":{},"startTime":1744821536075,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":17682,"timestamp":106909224802,"id":1634,"parentId":1619,"tags":{},"startTime":1744821536064,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":60134,"timestamp":106909185517,"id":1619,"parentId":1580,"tags":{"name":"server"},"startTime":1744821536024,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":10459,"timestamp":106909245707,"id":1647,"parentId":1580,"tags":{},"startTime":1744821536084,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":204089,"timestamp":106909053000,"id":1580,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821535892,"traceId":"cd18399fa4a84ab9"}] +[{"name":"add-entry","duration":4449,"timestamp":106912279124,"id":1654,"parentId":1651,"tags":{"request":"next/dist/pages/_document"},"startTime":1744821539118,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":4732,"timestamp":106912279059,"id":1652,"parentId":1651,"tags":{"request":"next/dist/pages/_app"},"startTime":1744821539118,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2333,"timestamp":106912290027,"id":1658,"parentId":1657,"tags":{},"startTime":1744821539129,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2424,"timestamp":106912289958,"id":1657,"parentId":1656,"tags":{},"startTime":1744821539129,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":3704,"timestamp":106912289778,"id":1656,"parentId":1650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"rsc"},"startTime":1744821539129,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":15285,"timestamp":106912279109,"id":1653,"parentId":1651,"tags":{"request":"next-route-loader?kind=PAGES&page=%2F_error&preferredRegion=&absolutePagePath=next%2Fdist%2Fpages%2F_error&absoluteAppPath=next%2Fdist%2Fpages%2F_app&absoluteDocumentPath=next%2Fdist%2Fpages%2F_document&middlewareConfigBase64=e30%3D!"},"startTime":1744821539118,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":15903,"timestamp":106912279130,"id":1655,"parentId":1651,"tags":{"request":"next-app-loader?name=app%2Fpage&page=%2Fpage&appPaths=%2Fpage&pagePath=private-next-app-dir%2Fpage.tsx&appDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!"},"startTime":1744821539118,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":2848,"timestamp":106912296580,"id":1664,"parentId":1663,"tags":{},"startTime":1744821539135,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":2996,"timestamp":106912296450,"id":1663,"parentId":1662,"tags":{},"startTime":1744821539135,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":6632,"timestamp":106912296234,"id":1662,"parentId":1650,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"ssr"},"startTime":1744821539135,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":41856,"timestamp":106912277100,"id":1651,"parentId":1650,"tags":{},"startTime":1744821539116,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":1558,"timestamp":106912339770,"id":1666,"parentId":1665,"tags":{},"startTime":1744821539179,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":5,"timestamp":106912341397,"id":1668,"parentId":1665,"tags":{},"startTime":1744821539180,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":2477,"timestamp":106912341430,"id":1669,"parentId":1665,"tags":{},"startTime":1744821539180,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":7,"timestamp":106912343971,"id":1670,"parentId":1665,"tags":{},"startTime":1744821539183,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":4,"timestamp":106912343995,"id":1671,"parentId":1665,"tags":{},"startTime":1744821539183,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":3229,"timestamp":106912341383,"id":1667,"parentId":1665,"tags":{},"startTime":1744821539180,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":545,"timestamp":106912345637,"id":1672,"parentId":1665,"tags":{},"startTime":1744821539184,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":2390,"timestamp":106912346208,"id":1673,"parentId":1665,"tags":{},"startTime":1744821539185,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":1413,"timestamp":106912349624,"id":1674,"parentId":1665,"tags":{},"startTime":1744821539188,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":157,"timestamp":106912351035,"id":1675,"parentId":1665,"tags":{},"startTime":1744821539190,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":124,"timestamp":106912351149,"id":1676,"parentId":1665,"tags":{},"startTime":1744821539190,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":1970,"timestamp":106912351280,"id":1677,"parentId":1665,"tags":{},"startTime":1744821539190,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":27042,"timestamp":106912333380,"id":1665,"parentId":1650,"tags":{},"startTime":1744821539172,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":86688,"timestamp":106912276846,"id":1650,"parentId":1648,"tags":{"name":"server"},"startTime":1744821539116,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":8907,"timestamp":106912363599,"id":1678,"parentId":1648,"tags":{},"startTime":1744821539202,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-server","duration":112709,"timestamp":106912260616,"id":1648,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821539099,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":5261,"timestamp":106912378320,"id":1681,"parentId":1680,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821539217,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":5218,"timestamp":106912378388,"id":1683,"parentId":1680,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\compiled\\@next\\react-refresh-utils\\dist\\runtime.js"},"startTime":1744821539217,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":6098,"timestamp":106912378401,"id":1685,"parentId":1680,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_app&page=%2F_app!"},"startTime":1744821539217,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-transform","duration":3678,"timestamp":106912381852,"id":1693,"parentId":1692,"tags":{},"startTime":1744821539221,"traceId":"cd18399fa4a84ab9"},{"name":"next-swc-loader","duration":3764,"timestamp":106912381775,"id":1692,"parentId":1691,"tags":{},"startTime":1744821539221,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-tsx","duration":7848,"timestamp":106912381484,"id":1691,"parentId":1679,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\app\\layout.tsx","layer":"app-pages-browser"},"startTime":1744821539220,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":11649,"timestamp":106912378412,"id":1687,"parentId":1680,"tags":{"request":"next-client-pages-loader?absolutePagePath=next%2Fdist%2Fpages%2F_error&page=%2F_error!"},"startTime":1744821539217,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13736,"timestamp":106912378429,"id":1690,"parentId":1680,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Capp-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cerror-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Clayout-router.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cnot-found-boundary.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Crender-from-template-context.js&modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Cnode_modules%5Cnext%5Cdist%5Cclient%5Ccomponents%5Cstatic-generation-searchparams-bailout-provider.js&server=false!"},"startTime":1744821539217,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":13921,"timestamp":106912378406,"id":1686,"parentId":1680,"tags":{"request":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\client\\router.js"},"startTime":1744821539217,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":14148,"timestamp":106912378395,"id":1684,"parentId":1680,"tags":{"request":"./node_modules/next/dist/client/app-next-dev.js"},"startTime":1744821539217,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":14309,"timestamp":106912378417,"id":1688,"parentId":1680,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Cpage.tsx&server=false!"},"startTime":1744821539217,"traceId":"cd18399fa4a84ab9"},{"name":"read-resource","duration":783,"timestamp":106912392497,"id":1696,"parentId":1695,"tags":{},"startTime":1744821539231,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":19630,"timestamp":106912378380,"id":1682,"parentId":1680,"tags":{"request":"./node_modules/next/dist/client/next-dev.js"},"startTime":1744821539217,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-process","duration":45951,"timestamp":106912393368,"id":1698,"parentId":1697,"tags":{},"startTime":1744821539232,"traceId":"cd18399fa4a84ab9"},{"name":"postcss-loader","duration":46284,"timestamp":106912393335,"id":1697,"parentId":1695,"tags":{},"startTime":1744821539232,"traceId":"cd18399fa4a84ab9"},{"name":"css-loader","duration":8960,"timestamp":106912439673,"id":1699,"parentId":1695,"tags":{"astUsed":"true"},"startTime":1744821539278,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":57360,"timestamp":106912392400,"id":1695,"parentId":1694,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css.webpack[javascript/auto]!=!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\css-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[2]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\node_modules\\next\\dist\\build\\webpack\\loaders\\postcss-loader\\src\\index.js??ruleSet[1].rules[11].oneOf[12].use[3]!C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":null},"startTime":1744821539231,"traceId":"cd18399fa4a84ab9"},{"name":"build-module-css","duration":63706,"timestamp":106912391341,"id":1694,"parentId":1691,"tags":{"name":"C:\\Users\\HARSHIT BAGGA\\Desktop\\ZeoTap2.0\\frontend\\styles\\globals.css","layer":"app-pages-browser"},"startTime":1744821539230,"traceId":"cd18399fa4a84ab9"},{"name":"build-module","duration":36,"timestamp":106912455183,"id":1700,"parentId":1694,"tags":{},"startTime":1744821539294,"traceId":"cd18399fa4a84ab9"},{"name":"add-entry","duration":76816,"timestamp":106912378424,"id":1689,"parentId":1680,"tags":{"request":"next-flight-client-entry-loader?modules=C%3A%5CUsers%5CHARSHIT%20BAGGA%5CDesktop%5CZeoTap2.0%5Cfrontend%5Capp%5Clayout.tsx&server=false!"},"startTime":1744821539217,"traceId":"cd18399fa4a84ab9"},{"name":"make","duration":80439,"timestamp":106912374819,"id":1680,"parentId":1679,"tags":{},"startTime":1744821539214,"traceId":"cd18399fa4a84ab9"},{"name":"chunk-graph","duration":899,"timestamp":106912457777,"id":1702,"parentId":1701,"tags":{},"startTime":1744821539297,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-modules","duration":3,"timestamp":106912458701,"id":1704,"parentId":1701,"tags":{},"startTime":1744821539297,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunks","duration":44,"timestamp":106912458717,"id":1705,"parentId":1701,"tags":{},"startTime":1744821539297,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-tree","duration":4,"timestamp":106912458777,"id":1706,"parentId":1701,"tags":{},"startTime":1744821539298,"traceId":"cd18399fa4a84ab9"},{"name":"optimize-chunk-modules","duration":3,"timestamp":106912458797,"id":1707,"parentId":1701,"tags":{},"startTime":1744821539298,"traceId":"cd18399fa4a84ab9"},{"name":"optimize","duration":930,"timestamp":106912458695,"id":1703,"parentId":1701,"tags":{},"startTime":1744821539297,"traceId":"cd18399fa4a84ab9"},{"name":"module-hash","duration":292,"timestamp":106912460232,"id":1708,"parentId":1701,"tags":{},"startTime":1744821539299,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation","duration":1941,"timestamp":106912460538,"id":1709,"parentId":1701,"tags":{},"startTime":1744821539299,"traceId":"cd18399fa4a84ab9"},{"name":"hash","duration":2870,"timestamp":106912463525,"id":1710,"parentId":1701,"tags":{},"startTime":1744821539302,"traceId":"cd18399fa4a84ab9"},{"name":"code-generation-jobs","duration":123,"timestamp":106912466393,"id":1711,"parentId":1701,"tags":{},"startTime":1744821539305,"traceId":"cd18399fa4a84ab9"},{"name":"module-assets","duration":115,"timestamp":106912466507,"id":1712,"parentId":1701,"tags":{},"startTime":1744821539305,"traceId":"cd18399fa4a84ab9"},{"name":"create-chunk-assets","duration":2414,"timestamp":106912466628,"id":1713,"parentId":1701,"tags":{},"startTime":1744821539305,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-generateClientManifest","duration":108,"timestamp":106912469893,"id":1715,"parentId":1679,"tags":{},"startTime":1744821539309,"traceId":"cd18399fa4a84ab9"},{"name":"NextJsBuildManifest-createassets","duration":195,"timestamp":106912469814,"id":1714,"parentId":1679,"tags":{},"startTime":1744821539309,"traceId":"cd18399fa4a84ab9"},{"name":"seal","duration":14200,"timestamp":106912456818,"id":1701,"parentId":1679,"tags":{},"startTime":1744821539296,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-compilation","duration":96569,"timestamp":106912374482,"id":1679,"parentId":1649,"tags":{"name":"client"},"startTime":1744821539213,"traceId":"cd18399fa4a84ab9"},{"name":"emit","duration":10976,"timestamp":106912471077,"id":1716,"parentId":1649,"tags":{},"startTime":1744821539310,"traceId":"cd18399fa4a84ab9"},{"name":"webpack-invalidated-client","duration":222496,"timestamp":106912260700,"id":1649,"parentId":3,"tags":{"trigger":"app/layout.tsx"},"startTime":1744821539099,"traceId":"cd18399fa4a84ab9"}] diff --git a/frontend/.next/types/app/layout.ts b/frontend/.next/types/app/layout.ts new file mode 100644 index 000000000..e56307152 --- /dev/null +++ b/frontend/.next/types/app/layout.ts @@ -0,0 +1,79 @@ +// File: C:\Users\HARSHIT BAGGA\Desktop\ZeoTap2.0\frontend\app\layout.tsx +import * as entry from '../../../app/layout.js' +import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js' + +type TEntry = typeof import('../../../app/layout.js') + +// Check that the entry is a valid entry +checkFields<Diff<{ + default: Function + config?: {} + generateStaticParams?: Function + revalidate?: RevalidateRange<TEntry> | false + dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static' + dynamicParams?: boolean + fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache' + preferredRegion?: 'auto' | 'global' | 'home' | string | string[] + runtime?: 'nodejs' | 'experimental-edge' | 'edge' + maxDuration?: number + + metadata?: any + generateMetadata?: Function + viewport?: any + generateViewport?: Function + +}, TEntry, ''>>() + +// Check the prop type of the entry function +checkFields<Diff<LayoutProps, FirstArg<TEntry['default']>, 'default'>>() + +// Check the arguments and return type of the generateMetadata function +if ('generateMetadata' in entry) { + checkFields<Diff<LayoutProps, FirstArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>() + checkFields<Diff<ResolvingMetadata, SecondArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>() +} + +// Check the arguments and return type of the generateViewport function +if ('generateViewport' in entry) { + checkFields<Diff<LayoutProps, FirstArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>() + checkFields<Diff<ResolvingViewport, SecondArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>() +} + +// Check the arguments and return type of the generateStaticParams function +if ('generateStaticParams' in entry) { + checkFields<Diff<{ params: PageParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>() + checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>() +} + +type PageParams = any +export interface PageProps { + params?: any + searchParams?: any +} +export interface LayoutProps { + children?: React.ReactNode + + params?: any +} + +// ============= +// Utility types +type RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never + +// If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit<T, keyof Base>. +type OmitWithTag<T, K extends keyof any, _M> = Omit<T, K> +type Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message> + +type FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never +type SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never +type MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never + + + +function checkFields<_ extends { [k in keyof any]: never }>() {} + +// https://github.com/sindresorhus/type-fest +type Numeric = number | bigint +type Zero = 0 | 0n +type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never +type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__' diff --git a/frontend/.next/types/app/page.ts b/frontend/.next/types/app/page.ts new file mode 100644 index 000000000..62756a245 --- /dev/null +++ b/frontend/.next/types/app/page.ts @@ -0,0 +1,79 @@ +// File: C:\Users\HARSHIT BAGGA\Desktop\ZeoTap2.0\frontend\app\page.tsx +import * as entry from '../../../app/page.js' +import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js' + +type TEntry = typeof import('../../../app/page.js') + +// Check that the entry is a valid entry +checkFields<Diff<{ + default: Function + config?: {} + generateStaticParams?: Function + revalidate?: RevalidateRange<TEntry> | false + dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static' + dynamicParams?: boolean + fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache' + preferredRegion?: 'auto' | 'global' | 'home' | string | string[] + runtime?: 'nodejs' | 'experimental-edge' | 'edge' + maxDuration?: number + + metadata?: any + generateMetadata?: Function + viewport?: any + generateViewport?: Function + +}, TEntry, ''>>() + +// Check the prop type of the entry function +checkFields<Diff<PageProps, FirstArg<TEntry['default']>, 'default'>>() + +// Check the arguments and return type of the generateMetadata function +if ('generateMetadata' in entry) { + checkFields<Diff<PageProps, FirstArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>() + checkFields<Diff<ResolvingMetadata, SecondArg<MaybeField<TEntry, 'generateMetadata'>>, 'generateMetadata'>>() +} + +// Check the arguments and return type of the generateViewport function +if ('generateViewport' in entry) { + checkFields<Diff<PageProps, FirstArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>() + checkFields<Diff<ResolvingViewport, SecondArg<MaybeField<TEntry, 'generateViewport'>>, 'generateViewport'>>() +} + +// Check the arguments and return type of the generateStaticParams function +if ('generateStaticParams' in entry) { + checkFields<Diff<{ params: PageParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>() + checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>() +} + +type PageParams = any +export interface PageProps { + params?: any + searchParams?: any +} +export interface LayoutProps { + children?: React.ReactNode + + params?: any +} + +// ============= +// Utility types +type RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never + +// If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit<T, keyof Base>. +type OmitWithTag<T, K extends keyof any, _M> = Omit<T, K> +type Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message> + +type FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never +type SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never +type MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never + + + +function checkFields<_ extends { [k in keyof any]: never }>() {} + +// https://github.com/sindresorhus/type-fest +type Numeric = number | bigint +type Zero = 0 | 0n +type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never +type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__' diff --git a/frontend/.next/types/package.json b/frontend/.next/types/package.json new file mode 100644 index 000000000..1632c2c4d --- /dev/null +++ b/frontend/.next/types/package.json @@ -0,0 +1 @@ +{"type": "module"} \ No newline at end of file diff --git a/frontend/app/layout.tsx b/frontend/app/layout.tsx new file mode 100644 index 000000000..3587b33cc --- /dev/null +++ b/frontend/app/layout.tsx @@ -0,0 +1,113 @@ +'use client'; + +import type { Metadata } from 'next'; +import { Inter } from 'next/font/google'; +import '../styles/globals.css'; +import Link from 'next/link'; +import { useRouter } from 'next/navigation'; + +const inter = Inter({ subsets: ['latin'] }); + +// Metadata needs to be exported from a server component, so this won't work in a client component +// Moving this to a separate file or removing it for now +const metadata = { + title: 'ZeoTap Data Ingestion Tool', + description: 'Bidirectional ClickHouse & Flat File Data Ingestion Tool', +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + const router = useRouter(); + + // Function to handle home button click - will navigate to the home page + const handleHomeClick = () => { + router.push('/'); + router.refresh(); // Force a refresh to reset state + }; + + return ( + <html lang="en"> + <head> + <title>{metadata.title} + + + +
+
+
+
+
+
+ + + + +
+
+

ZeoTap

+

Data Ingestion Tool

+
+
+
+ Bidirectional ClickHouse & Flat File Data Ingestion + +
+
+ +
+
+
+
+
{children}
+
+
+
+
+
+ + + + +
+ ZeoTap +
+

© {new Date().getFullYear()} ZeoTap | Data Ingestion Tool

+ +
+
+
+
+ + + ); +} \ No newline at end of file diff --git a/frontend/app/page.tsx b/frontend/app/page.tsx new file mode 100644 index 000000000..651119e43 --- /dev/null +++ b/frontend/app/page.tsx @@ -0,0 +1,409 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import ClickHouseForm from '@/components/ClickHouseForm'; +import FlatFileForm from '@/components/FlatFileForm'; +import TableSelection from '@/components/TableSelection'; +import DataPreview from '@/components/DataPreview'; +import IngestionResults from '@/components/IngestionResults'; +import StatusIndicator from '@/components/StatusIndicator'; +import api, { ClickHouseConfig, FlatFileConfig, IngestionRequest, TableInfo, IngestionResponse } from '@/lib/api'; + +// Step enum +enum Step { + SourceSelection = 1, + SourceConfiguration, + TargetConfiguration, + SchemaSelection, + Preview, + Results +} + +export default function Home() { + // State + const [currentStep, setCurrentStep] = useState(Step.SourceSelection); + const [source, setSource] = useState<'clickhouse' | 'flatfile' | ''>(''); + const [target, setTarget] = useState<'clickhouse' | 'flatfile' | ''>(''); + const [clickHouseConfig, setClickHouseConfig] = useState({ + host: '', + port: 8123, + database: '', + user: '', + jwtToken: '', + secure: false + }); + const [flatFileConfig, setFlatFileConfig] = useState({ + delimiter: ',', + hasHeader: true, + filePath: '', + fileName: '' + }); + const [tables, setTables] = useState([]); + const [joinCondition, setJoinCondition] = useState(''); + const [useJoin, setUseJoin] = useState(false); + const [previewData, setPreviewData] = useState([]); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(''); + const [ingestionResults, setIngestionResults] = useState(null); + const [status, setStatus] = useState<'idle' | 'connecting' | 'fetching' | 'ingesting' | 'completed' | 'error'>('idle'); + const [statusMessage, setStatusMessage] = useState(''); + + // Effect to track status changes + useEffect(() => { + if (isLoading) { + if (currentStep === Step.SourceConfiguration || currentStep === Step.TargetConfiguration) { + setStatus('connecting'); + setStatusMessage('Connecting to the data source...'); + } else if (currentStep === Step.SchemaSelection) { + setStatus('fetching'); + setStatusMessage('Fetching schema information...'); + } else if (currentStep === Step.Preview) { + setStatus('fetching'); + setStatusMessage('Generating data preview...'); + } else if (currentStep === Step.Results) { + setStatus('ingesting'); + setStatusMessage('Ingesting data between sources...'); + } + } else if (error) { + setStatus('error'); + setStatusMessage(error); + } else if (currentStep === Step.Results && ingestionResults) { + setStatus('completed'); + setStatusMessage(ingestionResults.message || 'Operation completed successfully'); + } else { + setStatus('idle'); + setStatusMessage(''); + } + }, [isLoading, error, currentStep, ingestionResults]); + + // Handlers + const handleSourceSelection = (selectedSource: 'clickhouse' | 'flatfile') => { + setSource(selectedSource); + setTarget(selectedSource === 'clickhouse' ? 'flatfile' : 'clickhouse'); + setCurrentStep(Step.SourceConfiguration); + }; + + const handleClickHouseConfigSubmit = async (config: ClickHouseConfig) => { + try { + setIsLoading(true); + setError(''); + + // Test connection + const testResult = await api.testClickHouseConnection(config); + if (!testResult.success) { + throw new Error(testResult.message); + } + + // Save config + setClickHouseConfig(config); + + // If ClickHouse is the source, fetch tables + if (source === 'clickhouse') { + const tables = await api.getClickHouseTables(config); + setTables(tables); + setCurrentStep(Step.SchemaSelection); + } else { + // ClickHouse is the target + setCurrentStep(Step.TargetConfiguration); + } + } catch (err: any) { + setError(err.message || 'Failed to connect to ClickHouse'); + } finally { + setIsLoading(false); + } + }; + + const handleFlatFileConfigSubmit = async (config: FlatFileConfig, file?: File) => { + try { + setIsLoading(true); + setError(''); + + // If file upload is required (when flat file is the source) + if (source === 'flatfile' && file) { + const uploadResult = await api.uploadFile(file, config.delimiter, config.hasHeader); + if (!uploadResult.success) { + throw new Error(uploadResult.message); + } + + // Set config with file path + setFlatFileConfig({ + ...config, + filePath: uploadResult.filePath + }); + + // Set schema information + setTables([uploadResult.schema]); + setCurrentStep(Step.SchemaSelection); + } else { + // Just store the config (flat file is the target) + setFlatFileConfig(config); + setCurrentStep(source === 'clickhouse' ? Step.SchemaSelection : Step.TargetConfiguration); + } + } catch (err: any) { + setError(err.message || 'Failed to process flat file'); + } finally { + setIsLoading(false); + } + }; + + const handleTableSelection = (selectedTables: TableInfo[], useJoinOption: boolean, joinConditionText: string) => { + setTables(selectedTables); + setUseJoin(useJoinOption); + setJoinCondition(joinConditionText); + setCurrentStep(Step.Preview); + + // Generate a preview + generatePreview(selectedTables, useJoinOption, joinConditionText); + }; + + const generatePreview = async (selectedTables: TableInfo[], useJoinOption: boolean, joinConditionText: string) => { + try { + setIsLoading(true); + setError(''); + + const request: IngestionRequest = { + source: source as 'clickhouse' | 'flatfile', + target: target as 'clickhouse' | 'flatfile', + clickHouseConfig: source === 'clickhouse' ? clickHouseConfig : target === 'clickhouse' ? clickHouseConfig : undefined, + flatFileConfig: source === 'flatfile' ? flatFileConfig : target === 'flatfile' ? flatFileConfig : undefined, + tables: selectedTables, + joinCondition: joinConditionText, + useJoin: useJoinOption + }; + + const previewResult = await api.previewData(request); + if (!previewResult.success) { + throw new Error(previewResult.message); + } + + setPreviewData(previewResult.data); + } catch (err: any) { + setError(err.message || 'Failed to generate preview'); + } finally { + setIsLoading(false); + } + }; + + const handleStartIngestion = async () => { + try { + setIsLoading(true); + setError(''); + + const request: IngestionRequest = { + source: source as 'clickhouse' | 'flatfile', + target: target as 'clickhouse' | 'flatfile', + clickHouseConfig: source === 'clickhouse' ? clickHouseConfig : target === 'clickhouse' ? clickHouseConfig : undefined, + flatFileConfig: source === 'flatfile' ? flatFileConfig : target === 'flatfile' ? flatFileConfig : undefined, + tables, + joinCondition, + useJoin + }; + + const response = await api.ingestData(request); + setIngestionResults(response); + setCurrentStep(Step.Results); + } catch (err: any) { + setError(err.message || 'Ingestion failed'); + } finally { + setIsLoading(false); + } + }; + + const handleReset = () => { + setCurrentStep(Step.SourceSelection); + setSource(''); + setTarget(''); + setTables([]); + setJoinCondition(''); + setUseJoin(false); + setPreviewData([]); + setIngestionResults(null); + setError(''); + }; + + // Helper functions for the UI + const getStepName = (step: Step) => { + switch (step) { + case Step.SourceSelection: return 'Source Selection'; + case Step.SourceConfiguration: return 'Source Config'; + case Step.TargetConfiguration: return 'Target Config'; + case Step.SchemaSelection: return 'Column Selection'; + case Step.Preview: return 'Preview'; + case Step.Results: return 'Results'; + default: return ''; + } + }; + + // Function to check if a step is accessible for navigation + const canNavigateToStep = (step: Step): boolean => { + // Always allow going to initial step + if (step === Step.SourceSelection) return true; + + // Don't allow going back to completed steps after results + if (currentStep === Step.Results) return false; + + // Only allow going to steps that have been completed or are the current one + if (step <= currentStep) return true; + + return false; + }; + + // Function to handle step navigation when clicking on the progress indicator + const handleStepClick = (step: Step) => { + if (!canNavigateToStep(step)) return; + + // If loading, don't allow navigation + if (isLoading) return; + + setCurrentStep(step); + }; + + // Render different steps + const renderStep = () => { + switch (currentStep) { + case Step.SourceSelection: + return ( +
+

Select Data Source and Target

+
+
+ + +
+
+
+ ); + + case Step.SourceConfiguration: + return source === 'clickhouse' ? ( + + ) : ( + + ); + + case Step.TargetConfiguration: + return target === 'clickhouse' ? ( + + ) : ( + + ); + + case Step.SchemaSelection: + return ( + + ); + + case Step.Preview: + return ( + setCurrentStep(Step.SchemaSelection)} + isLoading={isLoading} + /> + ); + + case Step.Results: + return ( + + ); + + default: + return null; + } + }; + + return ( +
+ {/* Progress indicator */} +
+
    + {Object.values(Step).filter(step => typeof step === 'number').map((step) => { + const isNavigable = canNavigateToStep(step as Step); + return ( +
  1. = step ? 'text-primary' : 'text-gray-400'}`} + onClick={() => handleStepClick(step as Step)} + > +
    + step ? 'bg-primary text-white' : + currentStep === step ? 'bg-primary text-white ring-4 ring-blue-100' : + 'bg-gray-200' + }`}> + {step} + + {getStepName(step as Step)} +
    + {step < Object.keys(Step).length / 2 && ( +
    step ? 'bg-primary' : 'bg-gray-200'}`}>
    + )} +
  2. + ); + })} +
+
+ + {/* Status indicator */} + {(status !== 'idle' || error) && ( + + )} + + {/* Current step content */} + {renderStep()} +
+ ); +} \ No newline at end of file diff --git a/frontend/components/ClickHouseForm.tsx b/frontend/components/ClickHouseForm.tsx new file mode 100644 index 000000000..d62cfd870 --- /dev/null +++ b/frontend/components/ClickHouseForm.tsx @@ -0,0 +1,202 @@ +'use client'; + +import React, { useState } from 'react'; +import { ClickHouseConfig } from '@/lib/api'; + +interface ClickHouseFormProps { + onSubmit: (config: ClickHouseConfig) => void; + initialValues: ClickHouseConfig; + isLoading: boolean; + title: string; +} + +const ClickHouseForm: React.FC = ({ onSubmit, initialValues, isLoading, title }) => { + const [config, setConfig] = useState(initialValues); + const [validation, setValidation] = useState>({}); + + const handleChange = (e: React.ChangeEvent) => { + const { name, value, type, checked } = e.target; + const newValue = type === 'checkbox' ? checked : value; + const newConfig = { ...config, [name]: type === 'number' ? Number(value) : newValue }; + setConfig(newConfig); + + // Clear validation error when field is updated + if (validation[name]) { + setValidation(prev => ({ ...prev, [name]: '' })); + } + }; + + const validateForm = (): boolean => { + const errors: Record = {}; + + if (!config.host.trim()) { + errors.host = 'Host is required'; + } + + if (!config.port || config.port <= 0) { + errors.port = 'Port must be a positive number'; + } + + if (!config.database.trim()) { + errors.database = 'Database is required'; + } + + if (!config.user.trim()) { + errors.user = 'Username is required'; + } + + if (!config.jwtToken.trim()) { + errors.jwtToken = 'JWT token is required'; + } + + setValidation(errors); + return Object.keys(errors).length === 0; + }; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (validateForm()) { + onSubmit(config); + } + }; + + return ( +
+

{title}

+ +
+
+ {/* Host */} +
+ + + {validation.host &&

{validation.host}

} +
+ + {/* Port */} +
+ + + {validation.port &&

{validation.port}

} +
+
+ + {/* Database */} +
+ + + {validation.database &&

{validation.database}

} +
+ + {/* User */} +
+ + + {validation.user &&

{validation.user}

} +
+ + {/* JWT Token */} +
+ + + {validation.jwtToken &&

{validation.jwtToken}

} +
+ + {/* Secure */} +
+ +
+ +
+ +
+ + {Object.keys(validation).length > 0 && ( +
+
+ + + + Please fix the errors before continuing +
+
+ )} +
+
+ ); +}; + +export default ClickHouseForm; \ No newline at end of file diff --git a/frontend/components/DataPreview.tsx b/frontend/components/DataPreview.tsx new file mode 100644 index 000000000..d2c6d1f31 --- /dev/null +++ b/frontend/components/DataPreview.tsx @@ -0,0 +1,124 @@ +'use client'; + +import { useState } from 'react'; + +interface DataPreviewProps { + data: string[][]; + onStartIngestion: () => void; + onBack: () => void; + isLoading: boolean; +} + +export default function DataPreview({ + data, + onStartIngestion, + onBack, + isLoading +}: DataPreviewProps) { + const [page, setPage] = useState(1); + const rowsPerPage = 10; + + // Calculate total pages + const totalPages = Math.ceil((data.length - 1) / rowsPerPage); // Subtract header row + + // Get header row (first row) + const headerRow = data.length > 0 ? data[0] : []; + + // Get current page's data + const startIndex = 1 + (page - 1) * rowsPerPage; // Skip header row + const endIndex = Math.min(startIndex + rowsPerPage, data.length); + const currentPageData = data.slice(startIndex, endIndex); + + const goToPage = (newPage: number) => { + setPage(Math.max(1, Math.min(newPage, totalPages))); + }; + + return ( +
+

Data Preview

+ +
+ + Showing first 100 records (preview). Total records: {data.length > 1 ? data.length - 1 : 0} + +
+ + {data.length === 0 ? ( +
+ No data available for preview. +
+ ) : ( + <> +
+ + + + {headerRow.map((header, index) => ( + + ))} + + + + {currentPageData.map((row, rowIndex) => ( + + {row.map((cell, cellIndex) => ( + + ))} + + ))} + +
+ {header} +
+ {cell || null} +
+
+ + {totalPages > 1 && ( +
+ + + Page {page} of {totalPages} + + +
+ )} + + )} + +
+ + +
+
+ ); +} \ No newline at end of file diff --git a/frontend/components/FlatFileForm.tsx b/frontend/components/FlatFileForm.tsx new file mode 100644 index 000000000..a221532dd --- /dev/null +++ b/frontend/components/FlatFileForm.tsx @@ -0,0 +1,278 @@ +'use client'; + +import { useState, useRef, useCallback } from 'react'; +import { FlatFileConfig } from '@/lib/api'; + +interface FlatFileFormProps { + onSubmit: (config: FlatFileConfig, file?: File) => void; + initialValues: FlatFileConfig; + requireFile: boolean; + isLoading: boolean; + title: string; +} + +export default function FlatFileForm({ + onSubmit, + initialValues, + requireFile, + isLoading, + title +}: FlatFileFormProps) { + const [config, setConfig] = useState(initialValues); + const [file, setFile] = useState(null); + const [validation, setValidation] = useState>({}); + const [isDragActive, setIsDragActive] = useState(false); + const fileInputRef = useRef(null); + + const handleChange = (e: React.ChangeEvent) => { + const { name, value, type } = e.target as HTMLInputElement; + + setConfig({ + ...config, + [name]: type === 'checkbox' ? (e.target as HTMLInputElement).checked : value + }); + + // Clear validation error when field is updated + if (validation[name]) { + setValidation(prev => ({ ...prev, [name]: '' })); + } + }; + + const handleFileChange = (e: React.ChangeEvent) => { + if (e.target.files && e.target.files.length > 0) { + setFile(e.target.files[0]); + if (validation['file']) { + setValidation(prev => ({ ...prev, 'file': '' })); + } + } + }; + + const handleDragEnter = useCallback((e: React.DragEvent) => { + e.preventDefault(); + e.stopPropagation(); + setIsDragActive(true); + }, []); + + const handleDragLeave = useCallback((e: React.DragEvent) => { + e.preventDefault(); + e.stopPropagation(); + setIsDragActive(false); + }, []); + + const handleDragOver = useCallback((e: React.DragEvent) => { + e.preventDefault(); + e.stopPropagation(); + }, []); + + const handleDrop = useCallback((e: React.DragEvent) => { + e.preventDefault(); + e.stopPropagation(); + setIsDragActive(false); + + if (e.dataTransfer.files && e.dataTransfer.files.length > 0) { + const droppedFile = e.dataTransfer.files[0]; + // Check if file is CSV or TXT + if (droppedFile.name.endsWith('.csv') || droppedFile.name.endsWith('.txt')) { + setFile(droppedFile); + if (validation['file']) { + setValidation(prev => ({ ...prev, 'file': '' })); + } + } else { + setValidation(prev => ({ + ...prev, + 'file': 'Only CSV and TXT files are supported' + })); + } + } + }, [validation]); + + const openFileSelector = () => { + if (fileInputRef.current) { + fileInputRef.current.click(); + } + }; + + const validateForm = (): boolean => { + const errors: Record = {}; + + if (requireFile && !file) { + errors.file = 'Please select a file to upload'; + } + + if (!requireFile && (!config.fileName || !config.fileName.trim())) { + errors.fileName = 'File name is required for export'; + } + + setValidation(errors); + return Object.keys(errors).length === 0; + }; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (validateForm()) { + onSubmit(config, file || undefined); + } + }; + + return ( +
+

{title}

+
+ {requireFile && ( +
+ + +
+ + +
+ {!file ? ( + <> + +

+ {isDragActive ? 'Drop your file here' : 'Drag and drop your file here, or click to browse'} +

+

+ Supported formats: CSV, TXT +

+ + ) : ( +
+ + + +
+

{file.name}

+

{(file.size / 1024).toFixed(2)} KB • Click to change

+
+
+ )} +
+
+ + {validation.file && ( +

{validation.file}

+ )} +
+ )} + +
+
+ + +
+ +
+ + +
+
+ + {!requireFile && ( +
+ + + {validation.fileName ? ( +

{validation.fileName}

+ ) : ( +

+ Leave empty to generate automatically. +

+ )} +
+ )} + +
+ +
+ + {Object.keys(validation).length > 0 && ( +
+
+ + + + Please fix the errors before continuing +
+
+ )} +
+
+ ); +} \ No newline at end of file diff --git a/frontend/components/IngestionResults.tsx b/frontend/components/IngestionResults.tsx new file mode 100644 index 000000000..8e8b6e442 --- /dev/null +++ b/frontend/components/IngestionResults.tsx @@ -0,0 +1,100 @@ +'use client'; + +import { IngestionResponse } from '@/lib/api'; + +interface IngestionResultsProps { + results: IngestionResponse | null; + onReset: () => void; +} + +export default function IngestionResults({ + results, + onReset +}: IngestionResultsProps) { + if (!results) { + return ( +
+

No Results Yet

+

No ingestion results available.

+
+ +
+
+ ); + } + + return ( +
+
+
+ {results.success ? ( + + + + ) : ( + + + + )} +
+

+ {results.success ? 'Ingestion Completed Successfully' : 'Ingestion Failed'} +

+
+ +
+

{results.message}

+
+ + {results.success && ( +
+
+

Summary

+
+
+
+ Total Records Processed: + {results.totalRecords.toLocaleString()} +
+
+
+ )} + + {results.success && results.fileName && ( +
+
+

Download

+
+
+ File available for download: + + Download File + +
+
+ )} + +
+ +
+
+ ); +} \ No newline at end of file diff --git a/frontend/components/StatusIndicator.tsx b/frontend/components/StatusIndicator.tsx new file mode 100644 index 000000000..2be6cbecb --- /dev/null +++ b/frontend/components/StatusIndicator.tsx @@ -0,0 +1,153 @@ +'use client'; + +import React from 'react'; + +type StatusType = 'idle' | 'connecting' | 'fetching' | 'ingesting' | 'completed' | 'error'; + +interface StatusIndicatorProps { + status: StatusType; + message?: string; +} + +export default function StatusIndicator({ status, message }: StatusIndicatorProps) { + const getStatusColor = () => { + switch (status) { + case 'idle': return 'bg-gray-100 border-gray-200'; + case 'connecting': return 'bg-blue-50 border-blue-200'; + case 'fetching': return 'bg-blue-50 border-blue-300'; + case 'ingesting': return 'bg-yellow-50 border-yellow-200'; + case 'completed': return 'bg-green-50 border-green-200'; + case 'error': return 'bg-red-50 border-red-200'; + default: return 'bg-gray-100 border-gray-200'; + } + }; + + const getTextColor = () => { + switch (status) { + case 'idle': return 'text-gray-700'; + case 'connecting': return 'text-blue-700'; + case 'fetching': return 'text-blue-700'; + case 'ingesting': return 'text-yellow-700'; + case 'completed': return 'text-green-700'; + case 'error': return 'text-red-700'; + default: return 'text-gray-700'; + } + }; + + const getStatusText = () => { + switch (status) { + case 'idle': return 'Ready'; + case 'connecting': return 'Connecting...'; + case 'fetching': return 'Fetching Data...'; + case 'ingesting': return 'Processing Data...'; + case 'completed': return 'Completed'; + case 'error': return 'Error'; + default: return 'Ready'; + } + }; + + const getStatusIcon = () => { + switch (status) { + case 'idle': + return ( +
+ + + +
+ ); + case 'connecting': + return ( +
+ + + + +
+ ); + case 'fetching': + return ( +
+ + + + +
+ ); + case 'ingesting': + return ( +
+ + + +
+ ); + case 'completed': + return ( +
+ + + +
+ ); + case 'error': + return ( +
+ + + +
+ ); + default: + return null; + } + }; + + const getProgressBarWidth = () => { + switch (status) { + case 'idle': return 'w-0'; + case 'connecting': return 'w-1/4'; + case 'fetching': return 'w-1/2'; + case 'ingesting': return 'w-3/4'; + case 'completed': return 'w-full'; + case 'error': return 'w-full'; + default: return 'w-0'; + } + }; + + const getProgressBarColor = () => { + switch (status) { + case 'idle': return 'bg-gray-300'; + case 'connecting': return 'bg-blue-400'; + case 'fetching': return 'bg-blue-500'; + case 'ingesting': return 'bg-yellow-500'; + case 'completed': return 'bg-green-500'; + case 'error': return 'bg-red-500'; + default: return 'bg-gray-300'; + } + }; + + return ( +
+
+
+ {getStatusIcon()} +
+
+

{getStatusText()}

+ {message && ( +
+ {message} +
+ )} +
+
+ +
+
+
+
+ ); +} \ No newline at end of file diff --git a/frontend/components/TableSelection.tsx b/frontend/components/TableSelection.tsx new file mode 100644 index 000000000..294e167e4 --- /dev/null +++ b/frontend/components/TableSelection.tsx @@ -0,0 +1,163 @@ +'use client'; + +import { useState } from 'react'; +import { TableInfo } from '@/lib/api'; + +interface TableSelectionProps { + tables: TableInfo[]; + onSubmit: (tables: TableInfo[], useJoin: boolean, joinCondition: string) => void; + isMultiTableEnabled: boolean; + isLoading: boolean; +} + +export default function TableSelection({ + tables, + onSubmit, + isMultiTableEnabled, + isLoading +}: TableSelectionProps) { + const [selectedTables, setSelectedTables] = useState( + tables.map(table => ({ ...table, selected: table.selected || false })) + ); + const [useJoin, setUseJoin] = useState(false); + const [joinCondition, setJoinCondition] = useState(''); + + const handleTableSelectionChange = (tableIndex: number, selected: boolean) => { + const updatedTables = [...selectedTables]; + updatedTables[tableIndex].selected = selected; + setSelectedTables(updatedTables); + }; + + const handleColumnSelectionChange = (tableIndex: number, columnIndex: number, selected: boolean) => { + const updatedTables = [...selectedTables]; + updatedTables[tableIndex].columns[columnIndex].selected = selected; + setSelectedTables(updatedTables); + }; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + onSubmit(selectedTables, useJoin, joinCondition); + }; + + const toggleSelectAll = (tableIndex: number, selected: boolean) => { + const updatedTables = [...selectedTables]; + updatedTables[tableIndex].columns.forEach(col => { + col.selected = selected; + }); + setSelectedTables(updatedTables); + }; + + return ( +
+

Select Tables and Columns

+
+ {selectedTables.length === 0 ? ( +
+

No tables available.

+
+ ) : ( +
+ {selectedTables.map((table, tableIndex) => ( +
+
+ {isMultiTableEnabled && ( + handleTableSelectionChange(tableIndex, e.target.checked)} + /> + )} +

+ {table.name} +

+
+ + | + +
+
+ +
+ {table.columns.map((column, colIndex) => ( +
+ handleColumnSelectionChange(tableIndex, colIndex, e.target.checked)} + /> + +
+ ))} +
+
+ ))} + + {isMultiTableEnabled && selectedTables.filter(t => t.selected).length > 1 && ( +
+
+ setUseJoin(e.target.checked)} + /> + +
+ + {useJoin && ( +
+ + setJoinCondition(e.target.value)} + /> +

+ Specify the JOIN condition between tables. +

+
+ )} +
+ )} +
+ )} + +
+ +
+
+
+ ); +} \ No newline at end of file diff --git a/frontend/lib/api.ts b/frontend/lib/api.ts new file mode 100644 index 000000000..4c7fd9e8c --- /dev/null +++ b/frontend/lib/api.ts @@ -0,0 +1,95 @@ +import axios from 'axios'; + +// Types +export interface ClickHouseConfig { + host: string; + port: number; + database: string; + user: string; + jwtToken: string; + secure: boolean; +} + +export interface FlatFileConfig { + delimiter: string; + hasHeader: boolean; + filePath?: string; + fileName?: string; +} + +export interface TableColumn { + name: string; + type: string; + selected: boolean; +} + +export interface TableInfo { + name: string; + columns: TableColumn[]; + selected: boolean; +} + +export interface IngestionRequest { + source: 'clickhouse' | 'flatfile'; + target: 'clickhouse' | 'flatfile'; + clickHouseConfig?: ClickHouseConfig; + flatFileConfig?: FlatFileConfig; + tables: TableInfo[]; + joinCondition?: string; + useJoin: boolean; +} + +export interface IngestionResponse { + success: boolean; + message: string; + totalRecords: number; + fileName?: string; +} + +// API client +const api = { + // ClickHouse endpoints + testClickHouseConnection: async (config: ClickHouseConfig) => { + const response = await axios.post('/api/clickhouse/test-connection', config); + return response.data; + }, + + getClickHouseTables: async (config: ClickHouseConfig) => { + const response = await axios.post('/api/clickhouse/tables', config); + return response.data; + }, + + // File endpoints + uploadFile: async (file: File, delimiter: string, hasHeader: boolean) => { + const formData = new FormData(); + formData.append('file', file); + formData.append('delimiter', delimiter); + formData.append('hasHeader', hasHeader.toString()); + + const response = await axios.post('/api/upload', formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); + + return response.data; + }, + + // Ingestion endpoints + ingestData: async (request: IngestionRequest) => { + const response = await axios.post('/api/ingestion/ingest', request); + return response.data; + }, + + previewData: async (request: IngestionRequest) => { + const response = await axios.post('/api/ingestion/preview', request); + return response.data; + }, + + // Download endpoint + getDownloadUrl: (fileName: string) => { + return `/api/download/${fileName}`; + }, +}; + +export default api; \ No newline at end of file diff --git a/frontend/next-env.d.ts b/frontend/next-env.d.ts new file mode 100644 index 000000000..4f11a03dc --- /dev/null +++ b/frontend/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/frontend/next.config.js b/frontend/next.config.js new file mode 100644 index 000000000..cf872ec45 --- /dev/null +++ b/frontend/next.config.js @@ -0,0 +1,14 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + async rewrites() { + return [ + { + source: '/api/:path*', + destination: 'http://localhost:8080/api/:path*' + } + ]; + } +}; + +module.exports = nextConfig; \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 000000000..87fb8e44a --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,5265 @@ +{ + "name": "data-ingestion-tool-frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "data-ingestion-tool-frontend", + "version": "0.1.0", + "dependencies": { + "@types/node": "20.11.30", + "@types/react": "18.2.67", + "@types/react-dom": "18.2.22", + "autoprefixer": "10.4.18", + "axios": "^1.6.8", + "classnames": "^2.5.1", + "eslint": "8.57.0", + "eslint-config-next": "14.1.3", + "next": "14.1.3", + "postcss": "8.4.37", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-hook-form": "^7.51.1", + "tailwindcss": "3.4.1", + "typescript": "5.4.3" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emnapi/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz", + "integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.9.tgz", + "integrity": "sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.0", + "@emnapi/runtime": "^1.4.0", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@next/env": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.3.tgz", + "integrity": "sha512-VhgXTvrgeBRxNPjyfBsDIMvgsKDxjlpw4IAUsHCX8Gjl1vtHUYRT3+xfQ/wwvLPDd/6kqfLqk9Pt4+7gysuCKQ==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz", + "integrity": "sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww==", + "dependencies": { + "glob": "10.3.10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.3.tgz", + "integrity": "sha512-LALu0yIBPRiG9ANrD5ncB3pjpO0Gli9ZLhxdOu6ZUNf3x1r3ea1rd9Q+4xxUkGrUXLqKVK9/lDkpYIJaCJ6AHQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.3.tgz", + "integrity": "sha512-E/9WQeXxkqw2dfcn5UcjApFgUq73jqNKaE5bysDm58hEUdUGedVrnRhblhJM7HbCZNhtVl0j+6TXsK0PuzXTCg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.3.tgz", + "integrity": "sha512-USArX9B+3rZSXYLFvgy0NVWQgqh6LHWDmMt38O4lmiJNQcwazeI6xRvSsliDLKt+78KChVacNiwvOMbl6g6BBw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.3.tgz", + "integrity": "sha512-esk1RkRBLSIEp1qaQXv1+s6ZdYzuVCnDAZySpa62iFTMGTisCyNQmqyCTL9P+cLJ4N9FKCI3ojtSfsyPHJDQNw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.3.tgz", + "integrity": "sha512-8uOgRlYEYiKo0L8YGeS+3TudHVDWDjPVDUcST+z+dUzgBbTEwSSIaSgF/vkcC1T/iwl4QX9iuUyUdQEl0Kxalg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.3.tgz", + "integrity": "sha512-DX2zqz05ziElLoxskgHasaJBREC5Y9TJcbR2LYqu4r7naff25B4iXkfXWfcp69uD75/0URmmoSgT8JclJtrBoQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.3.tgz", + "integrity": "sha512-HjssFsCdsD4GHstXSQxsi2l70F/5FsRTRQp8xNgmQs15SxUfUJRvSI9qKny/jLkY3gLgiCR3+6A7wzzK0DBlfA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.3.tgz", + "integrity": "sha512-DRuxD5axfDM1/Ue4VahwSxl1O5rn61hX8/sF0HY8y0iCbpqdxw3rB3QasdHn/LJ6Wb2y5DoWzXcz3L1Cr+Thrw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.3.tgz", + "integrity": "sha512-uC2DaDoWH7h1P/aJ4Fok3Xiw6P0Lo4ez7NbowW2VGNXw/Xv6tOuLUcxhBYZxsSUJtpeknCi8/fvnSpyCFp4Rcg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", + "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==" + }, + "node_modules/@swc/helpers": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "node_modules/@types/node": { + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==" + }, + "node_modules/@types/react": { + "version": "18.2.67", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.67.tgz", + "integrity": "sha512-vkIE2vTIMHQ/xL0rgmuoECBCkZFZeHr49HeWSc24AptMbNRo7pwSBvj73rlJJs9fGKj0koS+V7kQB1jHS0uCgw==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.22", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz", + "integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA==" + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.5.0.tgz", + "integrity": "sha512-YmocNlEcX/AgJv8gI41bhjMOTcKcea4D2nRIbZj+MhRtSH5+vEU8r/pFuTuoF+JjVplLsBueU+CILfBPVISyGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.5.0.tgz", + "integrity": "sha512-qpUrXgH4e/0xu1LOhPEdfgSY3vIXOxDQv370NEL8npN8h40HcQDA+Pl2r4HBW6tTXezWIjxUFcP7tj529RZtDw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.5.0.tgz", + "integrity": "sha512-3tX8r8vgjvZzaJZB4jvxUaaFCDCb3aWDCpZN3EjhGnnwhztslI05KSG5NY/jNjlcZ5QWZ7dEZZ/rNBFsmTaSPw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.5.0.tgz", + "integrity": "sha512-FH+ixzBKaUU9fWOj3TYO+Yn/eO6kYvMLV9eNJlJlkU7OgrxkCmiMS6wUbyT0KA3FOZGxnEQ2z3/BHgYm2jqeLA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.5.0.tgz", + "integrity": "sha512-pxCgXMgwB/4PfqFQg73lMhmWwcC0j5L+dNXhZoz/0ek0iS/oAWl65fxZeT/OnU7fVs52MgdP2q02EipqJJXHSg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.5.0.tgz", + "integrity": "sha512-FX2FV7vpLE/+Z0NZX9/1pwWud5Wocm/2PgpUXbT5aSV3QEB10kBPJAzssOQylvdj8mOHoKl5pVkXpbCwww/T2g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.5.0.tgz", + "integrity": "sha512-+gF97xst1BZb28T3nwwzEtq2ewCoMDGKsenYsZuvpmNrW0019G1iUAunZN+FG55L21y+uP7zsGX06OXDQ/viKw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.5.0.tgz", + "integrity": "sha512-5bEmVcQw9js8JYM2LkUBw5SeELSIxX+qKf9bFrfFINKAp4noZ//hUxLpbF7u/3gTBN1GsER6xOzIZlw/VTdXtA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.5.0.tgz", + "integrity": "sha512-GGk/8TPUsf1Q99F+lzMdjE6sGL26uJCwQ9TlvBs8zR3cLQNw/MIumPN7zrs3GFGySjnwXc8gA6J3HKbejywmqA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.5.0.tgz", + "integrity": "sha512-5uRkFYYVNAeVaA4W/CwugjFN3iDOHCPqsBLCCOoJiMfFMMz4evBRsg+498OFa9w6VcTn2bD5aI+RRayaIgk2Sw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.5.0.tgz", + "integrity": "sha512-j905CZH3nehYy6NimNqC2B14pxn4Ltd7guKMyPTzKehbFXTUgihQS/ZfHQTdojkMzbSwBOSgq1dOrY+IpgxDsA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.5.0.tgz", + "integrity": "sha512-dmLevQTuzQRwu5A+mvj54R5aye5I4PVKiWqGxg8tTaYP2k2oTs/3Mo8mgnhPk28VoYCi0fdFYpgzCd4AJndQvQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.5.0.tgz", + "integrity": "sha512-LtJMhwu7avhoi+kKfAZOKN773RtzLBVVF90YJbB0wyMpUj9yQPeA+mteVUI9P70OG/opH47FeV5AWeaNWWgqJg==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.8" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.5.0.tgz", + "integrity": "sha512-FTZBxLL4SO1mgIM86KykzJmPeTPisBDHQV6xtfDXbTMrentuZ6SdQKJUV5BWaoUK3p8kIULlrCcucqdCnk8Npg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.5.0.tgz", + "integrity": "sha512-i5bB7vJ1waUsFciU/FKLd4Zw0VnAkvhiJ4//jYQXyDUuiLKodmtQZVTcOPU7pp97RrNgCFtXfC1gnvj/DHPJTw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.5.0.tgz", + "integrity": "sha512-wAvXp4k7jhioi4SebXW/yfzzYwsUCr9kIX4gCsUFKpCTUf8Mi7vScJXI3S+kupSUf0LbVHudR8qBbe2wFMSNUw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/autoprefixer": { + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001714", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001714.tgz", + "integrity": "sha512-mtgapdwDLSSBnCI3JokHM7oEQBLxiJKVRtg10AxM1AyeiKcM96f0Mkbqeq+1AbiCtvMcHRulAAEMu693JrSWqg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.137", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.137.tgz", + "integrity": "sha512-/QSJaU2JyIuTbbABAo/crOs+SuAZLS+fVVS10PVrIT9hrRkmZl8Hb0xPSkKRUUWHQtYzXHpQUW3Dy5hwMzGZkA==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.1.3.tgz", + "integrity": "sha512-sUCpWlGuHpEhI0pIT0UtdSLJk5Z8E2DYinPTwsBiWaSYQomchdl0i60pjynY48+oXvtyWMQ7oE+G3m49yrfacg==", + "dependencies": { + "@next/eslint-plugin-next": "14.1.3", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.0.tgz", + "integrity": "sha512-aV3/dVsT0/H9BtpNwbaqvl+0xGMRGzncLyhm793NFGvbwGGvzyAykqWZ8oZlZuGwuHkwJjhWJkG1cM3ynvd2pQ==", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.12", + "unrs-resolver": "^1.3.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0-canary-7118f5dd7-20230705", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz", + "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/next": { + "version": "14.1.3", + "resolved": "https://registry.npmjs.org/next/-/next-14.1.3.tgz", + "integrity": "sha512-oexgMV2MapI0UIWiXKkixF8J8ORxpy64OuJ/J9oVUmIthXOUCcuVEZX+dtpgq7wIfIqtBwQsKEDXejcjTsan9g==", + "dependencies": { + "@next/env": "14.1.3", + "@swc/helpers": "0.5.2", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.1.3", + "@next/swc-darwin-x64": "14.1.3", + "@next/swc-linux-arm64-gnu": "14.1.3", + "@next/swc-linux-arm64-musl": "14.1.3", + "@next/swc-linux-x64-gnu": "14.1.3", + "@next/swc-linux-x64-musl": "14.1.3", + "@next/swc-win32-arm64-msvc": "14.1.3", + "@next/swc-win32-ia32-msvc": "14.1.3", + "@next/swc-win32-x64-msvc": "14.1.3" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.37", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.37.tgz", + "integrity": "sha512-7iB/v/r7Woof0glKLH8b1SPHrsX7uhdO+Geb41QpF/+mWZHU3uxxSlN+UXGVit1PawOYDToO+AbZzhBzWRDwbQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.55.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.55.0.tgz", + "integrity": "sha512-XRnjsH3GVMQz1moZTW53MxfoWN7aDpUg/GpVNc4A3eXRVNdGXfbzJ4vM4aLQ8g6XCUh1nIbx70aaNCl7kxnjog==", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==" + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/tailwindcss/node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unrs-resolver": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.5.0.tgz", + "integrity": "sha512-6aia3Oy7SEe0MuUGQm2nsyob0L2+g57w178K5SE/3pvSGAIp28BB2O921fKx424Ahc/gQ6v0DXFbhcpyhGZdOA==", + "funding": { + "url": "https://github.com/sponsors/JounQin" + }, + "optionalDependencies": { + "@unrs/resolver-binding-darwin-arm64": "1.5.0", + "@unrs/resolver-binding-darwin-x64": "1.5.0", + "@unrs/resolver-binding-freebsd-x64": "1.5.0", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.5.0", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.5.0", + "@unrs/resolver-binding-linux-arm64-gnu": "1.5.0", + "@unrs/resolver-binding-linux-arm64-musl": "1.5.0", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.5.0", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.5.0", + "@unrs/resolver-binding-linux-s390x-gnu": "1.5.0", + "@unrs/resolver-binding-linux-x64-gnu": "1.5.0", + "@unrs/resolver-binding-linux-x64-musl": "1.5.0", + "@unrs/resolver-binding-wasm32-wasi": "1.5.0", + "@unrs/resolver-binding-win32-arm64-msvc": "1.5.0", + "@unrs/resolver-binding-win32-ia32-msvc": "1.5.0", + "@unrs/resolver-binding-win32-x64-msvc": "1.5.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yaml": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 000000000..6b79e861c --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,28 @@ +{ + "name": "data-ingestion-tool-frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@types/node": "20.11.30", + "@types/react": "18.2.67", + "@types/react-dom": "18.2.22", + "autoprefixer": "10.4.18", + "axios": "^1.6.8", + "classnames": "^2.5.1", + "eslint": "8.57.0", + "eslint-config-next": "14.1.3", + "next": "14.1.3", + "postcss": "8.4.37", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-hook-form": "^7.51.1", + "tailwindcss": "3.4.1", + "typescript": "5.4.3" + } +} \ No newline at end of file diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 000000000..0cc9a9ded --- /dev/null +++ b/frontend/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} \ No newline at end of file diff --git a/frontend/styles/globals.css b/frontend/styles/globals.css new file mode 100644 index 000000000..8b9278c3f --- /dev/null +++ b/frontend/styles/globals.css @@ -0,0 +1,43 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --foreground-rgb: 0, 0, 0; + --background-rgb: 240, 240, 240; +} + +body { + color: rgb(var(--foreground-rgb)); + background: rgb(var(--background-rgb)); +} + +@layer components { + .btn { + @apply px-4 py-2 rounded-md text-white font-medium transition-all; + } + + .btn-primary { + @apply bg-primary hover:bg-blue-600; + } + + .btn-secondary { + @apply bg-secondary hover:bg-gray-700; + } + + .btn-accent { + @apply bg-accent hover:bg-cyan-600; + } + + .btn-danger { + @apply bg-red-600 hover:bg-red-700; + } + + .form-input { + @apply w-full border border-gray-300 rounded-md py-2 px-3 focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent; + } + + .card { + @apply bg-white rounded-lg shadow-md p-6; + } +} \ No newline at end of file diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 000000000..186b350f8 --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,18 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './pages/**/*.{js,ts,jsx,tsx,mdx}', + './components/**/*.{js,ts,jsx,tsx,mdx}', + './app/**/*.{js,ts,jsx,tsx,mdx}', + ], + theme: { + extend: { + colors: { + primary: '#0070f3', + secondary: '#1e293b', + accent: '#06b6d4', + }, + }, + }, + plugins: [], +} \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 000000000..2f6598fed --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} \ No newline at end of file diff --git a/pom.xml b/pom.xml deleted file mode 100644 index a4ee67662..000000000 --- a/pom.xml +++ /dev/null @@ -1,564 +0,0 @@ - - - - 4.0.0 - - io.cdap.wrangler - wrangler - 4.12.0-SNAPSHOT - Wrangler - pom - An interactive tool for data cleansing and transformation. - http://github.com/hydrator/wrangler - - - wrangler-api - wrangler-core - wrangler-proto - wrangler-service - wrangler-storage - wrangler-test - wrangler-transform - - - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - A business-friendly OSS license - - - - - - CDAP - cdap-dev@googlegroups.com - CDAP - http://cdap.io - - - - - scm:git:https://github.com/data-integrations/wrangler.git - scm:git:git@github.com:data-integrations/wrangler.git - https://github.com/data-integrations/wrangler.git - HEAD - - - - - sonatype.release - https://oss.sonatype.org/service/local/staging/deploy/maven2 - - - sonatype.snapshots - https://oss.sonatype.org/content/repositories/snapshots - - - - - https://issues.cask.co/browse/CDAP - - - - UTF-8 - 4.7 - 4.7 - 1.8.1 - 1.11.133 - 0.10.2-hadoop2 - 1.56 - 6.11.0 - 1.1.5 - 1.6 - 2.5 - 1.4 - 3.0 - 2.6 - 3.5 - 3.6.1 - 1.1.97 - 1.110.1 - 1.93.4 - 2.0.1 - 1.22.0 - 1.106.0 - 2.6.2 - 2.0.0 - 31.0.1-jre - 2.4.0 - 2.2 - 2.2.4 - 4.5.3 - 3.0 - 2.9.7 - 2.2.0 - 4.12 - 1.0.3 - 0.10.2.1 - 0.13 - 1.3.0 - 4.1.75.Final - 2.0 - 3.16 - 3.11.3 - 0.9.9 - 4.1.1 - 1.11 - 1.7.15 - 0.4 - ${project.basedir}/src/test/java/ - - - - - sonatype - https://oss.sonatype.org/content/groups/public - - true - - - false - - - - sonatype-snapshots - https://oss.sonatype.org/content/repositories/snapshots - - false - - - true - - - - - - - - com.google.protobuf - protobuf-java - ${protobuf.version} - - - - - - - org.slf4j - log4j-over-slf4j - ${slf4j.version} - - - junit - junit - ${junit.version} - test - - - - - ${testSourceLocation} - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.13.0 - - 1.8 - 1.8 - - - - org.apache.felix - maven-bundle-plugin - 3.5.0 - true - - - *;inline=false;scope=compile - true - lib - - <_exportcontents>io.cdap.wrangler.* - - - - - package - - bundle - - - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.7 - - - org.apache.rat - apache-rat-plugin - 0.10 - - - rat-check - validate - - check - - - - cov-int/** - *.md - **/*.md - **/*.json - **/resources/** - wrangler-demos/** - **/com/example/** - /**/icons/** - - - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - 2.17 - - - validate - process-test-classes - - checkstyle.xml - suppressions.xml - UTF-8 - true - true - true - - ${project.build.sourceDirectory} - - - **/io/cdap/functions/**, - **/com/example/tutorial/**, - **/io/cdap/wrangler/parser/MigrateToV2.java - - - - check - - - - - - com.puppycrawl.tools - checkstyle - 6.19 - - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.13.0 - - - org.apache.maven.plugins - maven-surefire-plugin - 2.14.1 - - - org.apache.maven.plugins - maven-antrun-plugin - - - org.apache.rat - apache-rat-plugin - - - org.apache.maven.plugins - maven-checkstyle-plugin - - - - - - - - release - - - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - true - - - - attach-sources - package - - jar-no-fork - - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - -Xdoclint:none - false - - http://download.oracle.com/javase/${jee.version}/docs/api/ - - ${project.name} ${project.version} - - CDAP Licensed under the Apache License, Version 2.0.]]> - - - - - attach-javadoc - package - - jar - - - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.5 - - ${gpg.passphrase} - ${gpg.useagent} - - - - - sign - - - - - - - org.apache.maven.plugins - maven-release-plugin - 2.5.3 - - v${releaseVersion} - v@{project.version} - true - - releases - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.2 - true - - https://oss.sonatype.org - sonatype.release - - - - - - - cloudBuild - - cloudBuild - - - - - org.apache.maven.plugins - maven-surefire-plugin - - false - false - - - - - - - e2e-tests - - src/e2e-test/java - TestRunner.java - - - - - src/e2e-test/resources - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.18.1 - - true - - - - - org.apache.maven.plugins - maven-failsafe-plugin - 3.0.0 - - - org.apache.maven.surefire - surefire-junit47 - 3.0.0 - - - - - ${TEST_RUNNER} - - - classes - 2 - 2 - true - - - - ${GOOGLE_APPLICATION_CREDENTIALS} - - - ${SERVICE_ACCOUNT_TYPE} - - - ${SERVICE_ACCOUNT_FILE_PATH} - - - ${SERVICE_ACCOUNT_JSON} - - - - - - - integration-test - - - - - - - - net.masterthought - maven-cucumber-reporting - 5.5.0 - - - - execution - verify - - generate - - - Cucumber Reports - target/cucumber-reports/advanced-reports - 1 - false - ${project.build.directory}/cucumber-reports - - **/*.json - - ${project.build.directory}/cucumber-reports - true - - - - - - - - - - com.google.guava - guava - ${guava.version} - - - - - - - org.slf4j - slf4j-api - 1.7.15 - - - - io.cdap.tests.e2e - cdap-e2e-framework - 0.5.0-SNAPSHOT - test - - - - ch.qos.logback - logback-classic - 1.2.8 - runtime - - - - - - diff --git a/prompts.txt b/prompts.txt new file mode 100644 index 000000000..af2ac29e5 --- /dev/null +++ b/prompts.txt @@ -0,0 +1,35 @@ +# AI Prompts Used in Project Development + +The following prompts were used with AI coding assistance tools during the development of this project: + +1. Initial Project Setup: + "Help me build a bidirectional data ingestion tool between ClickHouse and flat files using Java Spring Boot for backend and Next.js for frontend. The tool should support JWT token-based authentication for ClickHouse as a source and allow users to select specific columns for ingestion." + +2. Backend Model Creation: + "Create model classes in Java for a data ingestion tool that will handle ClickHouse and flat file configurations, table information, and ingestion requests/responses." + +3. ClickHouse Integration: + "Write a utility class in Java that handles connection to ClickHouse using JWT token authentication and can fetch table schema information and execute queries." + +4. Flat File Processing: + "Create Java utility classes for handling CSV file operations including reading files, extracting schemas, and writing data to flat files." + +5. Service Layer Implementation: + "Develop service classes in Java Spring Boot that handle the core functionality of ingesting data bidirectionally between ClickHouse and flat files, including schema discovery and data transformation." + +6. API Endpoints: + "Design RESTful API endpoints for a Spring Boot application that allow users to test connections, upload files, fetch table schemas, preview data, and perform data ingestion." + +7. Frontend UI Components: + "Create React components for a data ingestion tool including forms for ClickHouse and flat file configuration, table and column selection interface, data preview, and ingestion results display." + +8. Frontend State Management: + "Implement state management in a Next.js application for a multi-step data ingestion process that includes source/target selection, configuration, schema selection, preview, and results." + +9. API Integration on Frontend: + "Create an API client in TypeScript for communicating with a Spring Boot backend that handles data ingestion operations between ClickHouse and flat files." + +10. Multi-Table JOIN Implementation: + "Implement functionality to join multiple ClickHouse tables based on user-specified JOIN conditions and include this in the data ingestion process." + +These prompts were iteratively refined based on the responses and additional requirements throughout the development process. \ No newline at end of file diff --git a/suppressions.xml b/suppressions.xml deleted file mode 100644 index 0e6631aa5..000000000 --- a/suppressions.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/wrangler-api/pom.xml b/wrangler-api/pom.xml deleted file mode 100644 index e97464a64..000000000 --- a/wrangler-api/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - wrangler - io.cdap.wrangler - 4.12.0-SNAPSHOT - - 4.0.0 - - wrangler-api - Wrangler API - Wrangler API Libaray. - - - - io.cdap.cdap - cdap-api - ${cdap.version} - provided - - - io.cdap.cdap - cdap-etl-api - ${cdap.version} - provided - - - - diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/Arguments.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/Arguments.java deleted file mode 100644 index ee98f944b..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/Arguments.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import com.google.gson.JsonElement; -import io.cdap.wrangler.api.parser.Token; -import io.cdap.wrangler.api.parser.TokenType; - -/** - * This class {@code Arguments} represents the wrapped tokens that - * are tokenized and parsed arguments provided to the {@code Executor}. - * - * This class Arguments includes methods for retrieving - * the value of the token provided the name for the token, number of - * tokens, support for checking if the named argument exists, type of - * token as specified by TokenType and helper method for - * constructing JsonElement object. - * - * @see io.cdap.wrangler.api.parser.UsageDefinition - */ -public interface Arguments { - /** - * This method returns the token {@code value} based on the {@code name} - * specified in the argument. This method will attempt to convert the token - * into the expected return type T. - * - *

If the name doesn't exist in this object, then this - * method is expected to return null

- * - * @param name of the token to be retrieved. - * @param type the token need to casted to. - * @return object that extends Token. - */ - T value(String name); - - /** - * Returns the number of tokens that are mapped to arguments. - * - *

The optional arguments specified during the UsageDefinition - * are not included in the size if they are not present in the tokens parsed.

- * - * @return number of tokens parsed, excluding optional tokens if not present. - */ - int size(); - - /** - * This method checks if there exists a token named name registered - * with this object. - * - * The name is expected to the same as specified in the UsageDefinition. - * There are two reason why the name might not exists in this object : - * - *
    - *
  • When an token is defined to be optional, the user might not have specified the - * token, hence the token would not exist in the argument.
  • - *
  • User has specified invalid name.
  • - *
- * - * @param name associated with the token. - * @return true if argument with name name exists, false otherwise. - */ - boolean contains(String name); - - /** - * Each token is defined as one of the types defined in the class {@link TokenType}. - * When the directive is parsed into token, the type of the token is passed through. - * - * @param name associated with the token. - * @return TokenType associated with argument name, else null. - */ - TokenType type(String name); - - /** - * Returns the source line number these arguments were parsed from. - * - * @return the source line number. - */ - int line(); - - /** - * Returns the source column number these arguments were parsed from. - *

It takes the start position of the directive as the column number.

- * - * @return the start of the column number for the start of the directive - * these arguments contain. - */ - int column(); - - /** - * This method returns the original source line of the directive as specified - * the user. It returns the String representation of the directive. - * - * @return String object representing the original directive - * as specified by the user. - */ - String source(); - - /** - * Returns JsonElement representation of this object. - * - * @return an instance of JsonElementobject representing all the - * named tokens held within this object. - */ - JsonElement toJson(); -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/CompileException.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/CompileException.java deleted file mode 100644 index 66b653322..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/CompileException.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.wrangler.api.annotations.Public; -import io.cdap.wrangler.api.parser.SyntaxError; - -import java.util.Iterator; - -/** - * This class CompileException is thrown when there is - * any issue with compiling the Recipe. It's content - * include the exact line where the error occured and guess of what - * the problem is. Often times, the guess is close enough to point - * the problem, but, it's fair attempt to detect the exact issue. - * - * The SyntaxError object embedded within this exception - * contains the line number, character position, the raw content and - * the formatted content of the line. - */ -@Public -public class CompileException extends Exception { - private Iterator errors; - - public CompileException(String message) { - super(message); - } - - public CompileException(String message, Iterator errors) { - super(message); - this.errors = errors; - } - - public CompileException(String message, Exception e) { - super(message, e); - } - - public Iterator iterator() { - return errors; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/CompileStatus.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/CompileStatus.java deleted file mode 100644 index e5b8c398f..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/CompileStatus.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.wrangler.api.parser.SyntaxError; - -import java.util.Collections; -import java.util.Iterator; - -/** - * This class CompileStatus contains the status of compilation. - * If there are errors - syntax or semnatic it records the details of the errors - * as iterator over SyntaxError. If the compilation is successfull, - * it contains the ExecutableObject. - */ -public final class CompileStatus { - private RecipeSymbol symbols = null; - private boolean hasError = false; - private Iterator errors = null; - - public CompileStatus(RecipeSymbol symbols) { - this.symbols = symbols; - } - - public CompileStatus(boolean hasError, Iterator errors) { - this.hasError = hasError; - this.errors = errors; - } - - public boolean isSuccess() { - return !hasError; - } - - public Iterator getErrors() { - if (!hasError) { - return Collections.emptyIterator(); - } - return errors; - } - - public RecipeSymbol getSymbols() { - return symbols; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/Compiler.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/Compiler.java deleted file mode 100644 index 0e2a2a3ab..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/Compiler.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.wrangler.api.annotations.PublicEvolving; -import org.apache.twill.filesystem.Location; - -import java.nio.file.Path; - -/** - * This Compiler interface provides a way to implement your - * own version of compiler for directive or recipe. - * - *

This interface contains methods that provides variants of the source - * from which the recipe are read. It support reading from string, HDFS location - * and Path.

- * - *

Each of the methods would return CompileStatus objects that - * contains the compiled directives in the form of Executor or - * iterator of SyntaxError in case of failure to compile.

- */ -@PublicEvolving -public interface Compiler { - /** - * Compiles the recipe that is supplied in a String format. - * - * @param recipe representing the String form of recipe. - * @return CompileStatus status of compilation. - */ - CompileStatus compile(String recipe) throws CompileException; - - /** - * Compiles the recipe that is supplied in a Location on HDFS. - * - * @param location Location to the recipe being compiled. - * @return CompileStatus status of compilation. - */ - CompileStatus compile(Location location) throws CompileException; - - /** - * Compiles the recipe that is supplied in a Path on Filesystem. - * - * @param path Path to the recipe being compiled. - * @return CompileStatus status of compilation. - */ - CompileStatus compile(Path path) throws CompileException; -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/Directive.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/Directive.java deleted file mode 100644 index 2a199263b..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/Directive.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; - -/** - * Directive is a user defined directive. DIE - Define, Initialize & Execute - Pattern - * - * Following is a simple example of how to use this interface. - * - * @Plugin(type = Directive.Type) - * @Name("text-reverse") - * @Description("Reverses a string value of a column.") - * public final class TextReverse implements Directive { - * private final ColumnName columnArgs; - * - * @Override - * public UsageDefinition define() { - * UsageDefinition.Builder builder = UsageDefinition.builder(); - * builder.define("col", TokenType.COLUMN_NAME) - * return builder.build(); - * } - * - * @Override - * public void initialize(Argument args) throws DirectiveParseException { - * this.columnArgs = args.value("col"); - * } - * - * @Override - * public List execute(List rows, ExecutorContext context) - * throws DirectiveExecutionException, ErrorRowException { - * ... - * } - * } - * - */ -public interface Directive extends Executor, List>, EntityMetrics { - /** - * This defines a interface variable that is static and final for specify - * the {@code type} of the plugin this interface would provide. - * - *

This constant should be used when defining a plugin. An example - * of such usage is as follow:

- * - * - * @Plugin(type = Directive.Type) - * @Name("text-reverse") - * @Description("Reverses the value of the column.) - * public final class TextReverse implements Directive { - * ... - * } - * - */ - String TYPE = "directive"; - - /** - * This method provides a way for the developer to provide information - * about the arguments expected by this directive. The definition of - * arguments would provide information to the framework about how each - * argument should be parsed and interpretted. - * - *

This method uses {@code UsageDefinition#Builder} to build the token - * definitions. Each token definition consists of {@code name}, {@code TokenType} - * and {@code optional} field that specifies whether the token specified is - * optionally present.

- * - *

The {@code UsageDefinition} provides different methods to {@code define}, - * and as well generate {@code usage} based on the definition.

- * - *

This method is invoked by the framework at the time of creating an executable - * directive that will be added to the {@link RecipePipeline}. It's generally during - * the configuration phase.

. - * - *

NOTE: As best practice, developer needs to make sure that this class doesn't - * throw an exception. Also, it should not include external libraries that can - * generate exception unknown to the developer.

- * - *

- * Following is an example of how {@code define} could be used. - * - * public UsageDefinition define() { - * UsageDefinition.Builder builder = UsageDefinition.builder(); - * builder.define("column", TokeType.COLUMN_NAME); // :column - * builder.define("number", TokenType.NUMERIC, Optional.TRUE); // 1.0 or 8 - * builder.define("text", TokenType.TEXT); // 'text' - * builder.define("boolean", TokenType.BOOL); // true / false - * builder.define("expression", TokenType.EXPRESSOION); // exp: { age < 10.0 } - * } - * - *

- * - * {@code TokenType} supports many different token types that can be used within the - * usage definition. - * - * @return A object of {@code UsageDefinition} containing definitions of each argument - * expected by this directive. - * - * @see io.cdap.wrangler.api.parser.TokenType - */ - UsageDefinition define(); - - /** - * This method provides a way to emit metrics from the Directive. Metadata about each metric to be emitted can be - * returned and used in the metrics emission logic elsewhere. - * @return List of metrics ({@link EntityCountMetric}s) emitted by this directive - */ - @Override - default List getCountMetrics() { - // no op - return null; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveAlias.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveAlias.java deleted file mode 100644 index 4996bcba4..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveAlias.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * This interface {@link DirectiveAlias} provides a way to check if a directive - * is aliased and if there it is aliased to what it is being aliased. - */ -public interface DirectiveAlias { - - /** - * Checks if the directive is aliased. - * - * @param directive to be checked for aliasing. - * @return true if the directive has an alias, false otherwise. - */ - boolean hasAlias(String directive); - - /** - * Returns the root directive aliasee - * @param directive - * @return - */ - String getAlias(String directive); -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveConfig.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveConfig.java deleted file mode 100644 index d139594cc..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveConfig.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * This class {@link DirectiveConfig} defines the configuration for the Wrangler. - * It specifies the directive exclusions -- meaning directives that should - * not be accessible to the users and as well as directive aliases. - * - * { - * "exclusions" : [ - * "parse-as-csv", - * "parse-as-excel", - * "set", - * "invoke-http" - * ], - * "aliases" : { - * "json-parser" : "parse-as-json", - * "js-parser" : "parse-as-json" - * } - * } - */ -@Deprecated -public final class DirectiveConfig { - public static final DirectiveConfig EMPTY = new DirectiveConfig(); - // RecipeParser to be excluded or made non-accessible. - private final Set exclusions = new HashSet<>(); - - // RecipeParser to be aliased. - private final Map aliases = new HashMap<>(); - - - /** - * Checks if a directive is aliased. - * - * @param directive to checked for alias. - * @return - */ - public boolean hasAlias(String directive) { - return aliases.containsKey(directive); - } - - /** - * Dereferences an alias if defined, else returns the directive itself. - * - * @param directive to be dereferenced. - * @return dereferenced directive or null. - */ - public String getAliasName(String directive) { - return aliases.get(directive); - } - - public Map> getReverseAlias() { - Map> reverse = new HashMap<>(); - for (Map.Entry alias : aliases.entrySet()) { - List list; - if (reverse.containsKey(alias.getValue())) { - list = reverse.get(alias.getValue()); - } else { - list = new ArrayList<>(); - } - list.add(alias.getKey()); - reverse.put(alias.getValue(), list); - } - return reverse; - } - - /** - * Checks if the directive should be excluded. - * - * @param directive to checked if it has to be excluded. - * @return true if directive is excluded, false otherwise. - */ - public boolean isExcluded(String directive) { - return exclusions.contains(directive); - } - - /** - * Converts this object into a {@link JsonElement}. - * - * @return {@link JsonElement} representation of this object. - */ - public JsonElement toJson() { - Gson gson = new Gson(); - JsonObject object = new JsonObject(); - object.add("exclusions", gson.toJsonTree(exclusions)); - object.add("aliases", gson.toJsonTree(aliases)); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveContext.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveContext.java deleted file mode 100644 index 78df981d6..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveContext.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * {@link DirectiveContext} provides the context object to the processing of - * directives. - */ -public interface DirectiveContext extends DirectiveEnforcer, DirectiveAlias { -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveEnforcer.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveEnforcer.java deleted file mode 100644 index 27d15cbc6..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveEnforcer.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * This class defines the interfaces that would provide the ability to - * check whether the user should be provided access to the directive being used. - */ -public interface DirectiveEnforcer { - - /** - * Checks if the directive is being excluded from being used. - * - * @param directive to be checked for exclusion. - * @return true if excluded, false otherwise. - */ - boolean isExcluded(String directive); -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveExecutionException.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveExecutionException.java deleted file mode 100644 index e8120154a..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveExecutionException.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright © 2016-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * A Executor specific exception used for communicating issues with execution of pipeline in that step. - */ -public class DirectiveExecutionException extends Exception { - public DirectiveExecutionException(Exception e) { - super(e); - } - - public DirectiveExecutionException(String message) { - super(message); - } - - public DirectiveExecutionException(String s, Throwable e) { - super(s, e); - } - - public DirectiveExecutionException(Throwable e) { - super(e); - } - - public DirectiveExecutionException(String directiveName, String errorMessage) { - this(String.format("Error encountered while executing '%s' : %s", directiveName, errorMessage)); - } - - public DirectiveExecutionException(String directiveName, String errorMessage, Throwable e) { - this(String.format("Error encountered while executing '%s' : %s", directiveName, errorMessage), e); - } -} - diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveLoadException.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveLoadException.java deleted file mode 100644 index 87078bd02..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveLoadException.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * Class description here. - */ -public class DirectiveLoadException extends Exception { - public DirectiveLoadException(String s) { - super(s); - } - - public DirectiveLoadException(String s, Exception e) { - super(s, e); - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveNotFoundException.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveNotFoundException.java deleted file mode 100644 index a2b629ab4..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveNotFoundException.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * Class description here. - */ -public class DirectiveNotFoundException extends Exception { - public DirectiveNotFoundException(String s) { - super(s); - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveParseException.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveParseException.java deleted file mode 100644 index d9bbd0c30..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/DirectiveParseException.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.wrangler.api.parser.SyntaxError; - -import java.util.Iterator; - -/** - * An exception thrown when there is error in parsing specification. - */ -public class DirectiveParseException extends Exception { - private Iterator errors; - - public DirectiveParseException(String message, Iterator errors) { - super(message); - this.errors = errors; - } - - public DirectiveParseException(String message, Iterator errors, Throwable cause) { - super(message, cause); - this.errors = errors; - } - - public DirectiveParseException(String message, Throwable e) { - super(message, e); - } - - public DirectiveParseException(Throwable e) { - super(e); - } - - public DirectiveParseException(String message) { - super(message); - } - - public DirectiveParseException(String directiveName, String errorMessage) { - this(String.format("Error encountered while parsing '%s' : %s", directiveName, errorMessage)); - } - - public DirectiveParseException(String directiveName, String errorMessage, Throwable e) { - this(String.format("Error encountered while parsing '%s' : %s", directiveName, errorMessage), e); - } - - public Iterator errors() { - return errors; - } -} - diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/EntityCountMetric.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/EntityCountMetric.java deleted file mode 100644 index 06e2e7e78..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/EntityCountMetric.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * Represents generic metadata information for a count metric that is emitted in Wrangler. The entity's type and name - * will be automatically mapped to corresponding metric tags. - */ -public class EntityCountMetric { - /** - * Metric name - */ - private final String name; - /** - * Value by which to increment the count - */ - private final long count; - /** - * System app entity type - */ - private final String appEntityType; - /** - * System app entity type name - */ - private final String appEntityTypeName; - - public EntityCountMetric(String name, String appEntityType, String appEntityTypeName, long count) { - this.name = name; - this.appEntityType = appEntityType; - this.appEntityTypeName = appEntityTypeName; - this.count = count; - } - - public String getName() { - return name; - } - - public String getAppEntityType() { - return appEntityType; - } - - public String getAppEntityTypeName() { - return appEntityTypeName; - } - - public long getCount() { - return count; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/EntityMetrics.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/EntityMetrics.java deleted file mode 100644 index 19af39d54..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/EntityMetrics.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import java.util.List; - -/** - * Metrics emitted by a Wrangler entity - */ -public interface EntityMetrics { - /** - * This method is used to return a list of count metrics to be emitted by a Wrangler entity (ex: {@link Directive}). - * Note that this method doesn't emit metrics, it only returns metadata to be used in metrics emission logic elsewhere - * @return list of {@link EntityCountMetric}s to be emitted - */ - List getCountMetrics(); -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/ErrorRecord.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/ErrorRecord.java deleted file mode 100644 index 3254b6625..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/ErrorRecord.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.wrangler.api.annotations.Public; -import java.util.Collections; -import java.util.List; - -/** - * Specifies the structure for Error records. - */ -@Public -public final class ErrorRecord extends ErrorRecordBase { - // Actual row that is errored. - private final Row row; - - public ErrorRecord(Row row, String message, int code, boolean showInWrangler) { - super(message, code, showInWrangler); - this.row = row; - } - - public ErrorRecord(Row row, String message, int code) { - this(row, message, code, false); - } - - /** - * @return original {@link Row} that errored. - */ - public Row getRow() { - return row; - } - -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/ErrorRecordBase.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/ErrorRecordBase.java deleted file mode 100644 index 5407d0395..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/ErrorRecordBase.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import java.util.List; - -/** - * Base class for error record that includes the critical fields. - */ -public class ErrorRecordBase { - - // Message as to why the row errored. - protected final String message; - // Code associated with the message. - protected final int code; - protected final boolean showInWrangler; - - public ErrorRecordBase(String message, int code, boolean showInWrangler) { - this.message = message; - this.code = code; - this.showInWrangler = showInWrangler; - } - - /** - * @return Message associated with the {@link Row}. - */ - public String getMessage() { - return message; - } - - /** - * @return Code associated with the error. - */ - public int getCode() { - return code; - } - - /** - * @return Flag indicating whether this record should prevent further wrangling. - */ - public boolean isShownInWrangler() { - return showInWrangler; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/ErrorRowException.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/ErrorRowException.java deleted file mode 100644 index 80f55cbd5..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/ErrorRowException.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * Exception throw when the record needs to emitted to error collector. - */ -public class ErrorRowException extends Exception { - // Message as to why the record errored. - private String message; - - // Code associated with the error message. - private int code; - - private boolean showInWrangler; - - public ErrorRowException(String message, int code, boolean showInWrangler) { - this(message, code, showInWrangler, null); - } - - public ErrorRowException(String message, int code, boolean showInWrangler, Throwable cause) { - super(message, cause); - this.message = message; - this.code = code; - this.showInWrangler = showInWrangler; - } - - public ErrorRowException(String message, int code) { - this(message, code, false); - } - - public ErrorRowException(String directiveName, String errorMessage, int code) { - this(directiveName, errorMessage, code, null); - } - - public ErrorRowException(String directiveName, String errorMessage, int code, Throwable cause) { - this(String.format("%s (ecode: %d, directive: %s)", errorMessage, code, directiveName), code, false, cause); - } - - /** - * @return Message as why the record errored. - */ - public String getMessage() { - return message; - } - - /** - * @return code related to the message. - */ - public int getCode() { - return code; - } - - /** - * @return Flag indicating whether this record should prevent further wrangling. - */ - public boolean isShownInWrangler() { - return showInWrangler; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/Executor.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/Executor.java deleted file mode 100644 index 8c85319e4..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/Executor.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright © 2016-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.io.Serializable; -import javax.annotation.Nullable; - -/** - * A interface defining the wrangle Executor in the wrangling {@link RecipePipeline}. - * - * @param type of input object - * @param type of output object - */ -@PublicEvolving -public interface Executor extends Serializable { - /** - * This method provides a way for the custom directive writer the ability to access - * the arguments passed by the users. - * - *

This method is invoked only once during the initialization phase of the {@code Executor} - * object. The arguments are constructed based on the definition as provided by the user in - * the method above {@code define}.

- * - *

- * Following is an example of how {@code initialize} could be used to accept the - * arguments that are tokenized and parsed by the framework. - * - * public void initialize(Arguments args) throws DirectiveParseException { - * ColumnName column = args.value("column"); - * if (args.contains("number") { - * Numeric number = args.value("number"); - * } - * Text text = args.value("text"); - * Bool bool = args.value("boolean"); - * Expression expression = args.value("expression"); - * } - * - *

- * - * @param args Tokenized and parsed arguments. - * @throws DirectiveParseException thrown by the user in case of any issues with validation or - * ensuring the argument values are as expected. - */ - void initialize(Arguments args) throws DirectiveParseException; - - /** - * Executes a wrangle step on single {@link Row} and return an array of wrangled {@link Row}. - * - * @param rows List of input {@link Row} to be wrangled by this step. - * @param context {@link ExecutorContext} passed to each step. - * @return Wrangled List of {@link Row}. - */ - O execute(I rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException, ReportErrorAndProceed; - - /** - * This method provides a way for the directive to de-initialize or destroy the - * resources that were acquired during the initialization phase. This method is - * called from the Transform#destroy() when the directive is invoked - * within a plugin or when during Service#destroy() when invoked in the - * service. - * - * This method is specifically designed not to thrown any exceptions. So, if the - * the user code is throws any exception, the system will be unable to react or - * correct at this phase of invocation. - */ - void destroy(); - - /** - * This method is used to get the updated schema of the data after the directive's transformation has been applied. - * - * @param schemaResolutionContext context containing necessary information for getting output schema - * @return output {@link Schema} of the transformed data - * @implNote By default, returns a null and the schema is inferred from the data when necessary. - *

For consistent handling, override for directives that perform column renames, - * column data type changes or column additions with specific schemas.

- */ - @Nullable - default Schema getOutputSchema(SchemaResolutionContext schemaResolutionContext) { - // no op - return null; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/ExecutorContext.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/ExecutorContext.java deleted file mode 100644 index 912fb269b..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/ExecutorContext.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.cdap.etl.api.LookupProvider; -import io.cdap.cdap.etl.api.StageMetrics; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.io.Serializable; -import java.net.URL; -import java.util.Map; - -/** - * Pipeline Context for passing contextual information to the pipeline being executed. - */ -@PublicEvolving -public interface ExecutorContext extends LookupProvider, Serializable { - /** - * Specifies the environment in which wrangler is running. - */ - enum Environment { - SERVICE, - TRANSFORM, - MICROSERVICE, - TESTING - }; - - /** - * @return Environment this context is prepared for. - */ - Environment getEnvironment(); - - /** - * @return namespace that the program is being executed in - */ - String getNamespace(); - - /** - * @return Measurements handler. - */ - StageMetrics getMetrics(); - - /** - * @return Context name. - */ - String getContextName(); - - /** - * @return Properties associated with run and pipeline. - */ - Map getProperties(); - - /** - * Returns a valid service url. - * - * @param applicationId id of the application to which a service url. - * @param serviceId id of the service within application. - * @return URL if service exists, else null. - */ - URL getService(String applicationId, String serviceId); - - /** - * @return A transient store. - */ - TransientStore getTransientStore(); - - default boolean isSchemaManagementEnabled() { - return false; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/GrammarMigrator.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/GrammarMigrator.java deleted file mode 100644 index f35430d6b..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/GrammarMigrator.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * This is a interface for migrating grammar from one version to other. - */ -public interface GrammarMigrator { - /** - * Migrates each directive from one version to other. - * - * @return directives transformed into a newer version. - */ - String migrate() throws DirectiveParseException; -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/LazyNumber.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/LazyNumber.java deleted file mode 100644 index 10fa212df..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/LazyNumber.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import java.math.BigDecimal; - -/** - * This class holds a number value that is lazily converted to a specific number type - */ -public final class LazyNumber extends Number { - private final String value; - - public LazyNumber(String value) { - this.value = value; - } - - /** - * Returns the value of the specified number as an int. - * This may involve rounding or truncation. - * - * @return the numeric value represented by this object after conversion - * to type int. - */ - @Override - public int intValue() { - try { - return Integer.parseInt(value); - } catch (NumberFormatException e) { - try { - return (int) Long.parseLong(value); - } catch (NumberFormatException nfe) { - return new BigDecimal(value).intValue(); - } - } - } - - /** - * Returns the value of the specified number as a long. - * This may involve rounding or truncation. - * - * @return the numeric value represented by this object after conversion - * to type long. - */ - @Override - public long longValue() { - try { - return Long.parseLong(value); - } catch (NumberFormatException e) { - return new BigDecimal(value).longValue(); - } - } - - /** - * Returns the value of the specified number as a float. - * This may involve rounding. - * - * @return the numeric value represented by this object after conversion - * to type float. - */ - @Override - public float floatValue() { - return Float.parseFloat(value); - } - - /** - * Returns the value of the specified number as a double. - * This may involve rounding. - * - * @return the numeric value represented by this object after conversion - * to type double. - */ - @Override - public double doubleValue() { - return Double.parseDouble(value); - } - - @Override - public String toString() { - return value; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/Optional.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/Optional.java deleted file mode 100644 index 2e292765a..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/Optional.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.wrangler.api.annotations.Public; - -/** - * This class Optional is a helper class used in specifying - * whether a argument for the directive is optional or not. - * - *

This class is used when you are defining the usage for a directive - * argument. Following is an example :

- * - * - * UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - * builder.define("regex", TokenType.TEXT, Optional.TRUE); - * return builder.build(); - * - * - *

By default, the option is FALSE

- */ -@Public -public final class Optional { - /** - * When an argument is optional, TRUE is specified. - */ - public static final boolean TRUE = true; - - /** - * When an argument is non optional, FALSE is specified. - * The default behavior is false. - */ - public static final boolean FALSE = false; -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/Pair.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/Pair.java deleted file mode 100644 index b05a19680..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/Pair.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * A pair consisting of two elements - first & second. - * - * This class provides immutable access to elements of the pair. - * - * @param type of the first element - * @param type of the second element - */ -public final class Pair { - private final F first; - private final S second; - - public Pair(F first, S second) { - this.first = first; - this.second = second; - } - - /** - * @return First element of the pair. - */ - public F getFirst() { - return first; - } - - /** - * @return Second element of the pair. - */ - public S getSecond() { - return second; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipeException.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipeException.java deleted file mode 100644 index e10e9b132..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipeException.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * A {@link io.cdap.wrangler.api.RecipePipeline} specific exception used for - * communicating issues with execution of pipeline. - */ -public class RecipeException extends Exception { - public static final int UNKNOWN_INDEX = -1; - - // Index of row in dataset and directive in recipe that caused the error - private final int rowIndex; - private final int directiveIndex; - - public RecipeException(String message, Throwable throwable, int rowIndex, int directiveIndex) { - super(message, throwable); - this.rowIndex = rowIndex; - this.directiveIndex = directiveIndex; - } - - public RecipeException(String message, Throwable throwable, int directiveIndex) { - this(message, throwable, UNKNOWN_INDEX, directiveIndex); - } - - public RecipeException(String message, Throwable throwable) { - this(message, throwable, UNKNOWN_INDEX, UNKNOWN_INDEX); - } - - public int getRowIndex() { - return rowIndex; - } - - public int getDirectiveIndex() { - return directiveIndex; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipeParser.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipeParser.java deleted file mode 100644 index c8bd7a6ec..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipeParser.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2016-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.util.List; - -/** - * A specification for how {@link RecipePipeline} will process. - */ -@PublicEvolving -public interface RecipeParser { - /** - * Generates a configured set of {@link Executor} to be executed. - * - * @return List of {@link Executor}. - */ - List parse() throws RecipeException; -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipePipeline.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipePipeline.java deleted file mode 100644 index 86cbe8871..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipePipeline.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright © 2016-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.io.Serializable; -import java.util.List; - -/** - * {@link RecipePipeline} executes array of {@link Executor} in the order they are specified. - * - * @param type of input object - * @param type of output object - * @param type of error object - */ -@PublicEvolving -public interface RecipePipeline extends Serializable, AutoCloseable { - - /** - * Executes the pipeline on the input. - * - * @param input List of Input record of type I. - * @param schema Schema to which the output should be mapped. - * @return Parsed output list of record of type O - */ - List execute(List input, Schema schema) throws RecipeException; - - /** - * Executes the pipeline on the input. - * - * @param input List of input record of type I. - * @return Parsed output list of record of type I - */ - List execute(List input) throws RecipeException; - - /** - * Returns records that are errored out. - * - * @return records that have errored out. - */ - List errors(); - - /** - * Destroys the pipeline. - */ - @Override - void close(); -} - - diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipeSymbol.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipeSymbol.java deleted file mode 100644 index 87176d914..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/RecipeSymbol.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.annotations.PublicEvolving; -import io.cdap.wrangler.api.parser.Token; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.TreeSet; - -/** - * This object RecipeSymbol stores information about all the - * TokenGroup ( TokenGroup represents a collection of tokens - * generated from parsing a single directive). The object also contains - * information about the directives (or plugins) that need to be loaded - * at the startup time. - * - *

This class provides some useful methods for accessing the list of - * directives or plugins that need to be loaded, the token groups for - * all the directives tokenized and parsed.

- * - *

This class exposes a builder pattern for constructing the object. - * in the RecipeVisitor. The RecipeVisitor - * constructs RecipeSymbol using the RecipeSymbol.Builder

- */ -@PublicEvolving -public final class RecipeSymbol { - /** - * Version if specified, else defaults to 1.0 - */ - private final String version; - - /** - * Set of directives or plugins that have to loaded - * during the configuration phase of RecipePipeline. - */ - private final Set loadableDirectives; - - /** - * This maintains a list of tokens for each directive parsed. - */ - private final List tokens; - - private RecipeSymbol(String version, Set loadableDirectives, List tokens) { - this.version = version; - this.loadableDirectives = loadableDirectives; - this.tokens = tokens; - } - - /** - * Returns a set of dynamically loaded directives as plugins. These are - * the set of plugins or directives that are in the recipe, but are provided - * as the user plugins. - * - *

If there are no directives specified in the recipe, then there would - * be no plugins to be loaded.

- * - * @return An empty set if there are not directives to be loaded dynamically, - * else the list of directives as specified in the recipe. - */ - public Set getLoadableDirectives() { - return loadableDirectives; - } - - /** - * Returns the version of the grammar as specified in the recipe. The - * version is the one extracted from Pragma. It's specified as follows - * #pragma version 2.0; - * - * @return version of the grammar used in the recipe. - */ - public String getVersion() { - return version; - } - - /** - * Returns number of groups tokenized and parsed. The number returned will - * less than or equal to the number of directives specified in the recipe. - * - *

Fewer than number of directives is because of the '#pragma' directives

- * @return - */ - public int size() { - return tokens.size(); - } - - /** - * Returns an iterator to the list of token groups maintained by this object. - * - * @return iterator to the list of tokens maintained. - */ - public Iterator iterator() { - return tokens.iterator(); - } - - /** - * Static method for creating an instance of the {@code RecipeSymbol.Builder}. - * - * @return a instance of builder. - */ - public static RecipeSymbol.Builder builder() { - return new RecipeSymbol.Builder(); - } - - /** - * This method toJson returns the JsonElement object - * representation of this object. - * - * @return An instance of JsonElement representing this object. - */ - public JsonElement toJson() { - JsonObject output = new JsonObject(); - output.addProperty("class", this.getClass().getSimpleName()); - output.addProperty("count", tokens.size()); - JsonArray array = new JsonArray(); - for (TokenGroup token : tokens) { - JsonArray darray = new JsonArray(); - Iterator it = token.iterator(); - while (it.hasNext()) { - Token tok = it.next(); - JsonObject object = new JsonObject(); - object.addProperty("token", tok.type().toString()); - object.addProperty("value", tok.value().toString()); - darray.add(object); - } - array.add(darray); - } - output.add("value", array); - return output; - } - - /** - * This inner class provides a builder pattern for building - * the RecipeSymbol object. In order to create the - * this builder, one has to use the static method defined in - * RecipeSymbol. - * - * Following is an example of how this can be done. - * - * - * RecipeSymbol.Builder builder = RecipeSymbol.builder(); - * builder.createTokenGroup(...); - * builder.addToken(...); - * builder.addVersion(...); - * builder.addLoadableDirective(...); - * RecipeSymbol compiled = builder.build(); - * - */ - public static final class Builder { - private final List groups = new ArrayList<>(); - private final Set loadableDirectives = new TreeSet<>(); - private TokenGroup group = null; - private String version = "1.0"; - - /** - * TokenGroup is created for each directive in - * the recipe. This method creates a new TokenGroup - * by passing the SourceInfo, which represents the - * information of the source parsed. - * - * @param info about the source directive being parsed. - */ - public void createTokenGroup(SourceInfo info) { - if (group != null) { - groups.add(group); - } - this.group = new TokenGroup(info); - } - - /** - * This method provides a way to add a Token to the TokenGroup. - * - * @param token to be added to the token group. - */ - public void addToken(Token token) { - group.add(token); - } - - /** - * Recipe can specify the version of the grammar. This method - * allows one to extract and add the version to the RecipeSymbol. - * - * @param version of the recipe grammar being used. - */ - public void addVersion(String version) { - this.version = version; - } - - /** - * A Recipe can specify the pragma instructions for loading the directives - * dynamically. This method allows adding the new directive to be loaded - * as it's parsing through the call graph. - * - * @param directive to be loaded dynamically. - */ - public void addLoadableDirective(String directive) { - loadableDirectives.add(directive); - } - - /** - * Returns a fully constructed and valid RecipeSymbol object. - * - * @return An instance of RecipeSymbol - */ - public RecipeSymbol build() { - groups.add(group); - return new RecipeSymbol(version, loadableDirectives, this.groups); - } - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/RemoteDirectiveResponse.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/RemoteDirectiveResponse.java deleted file mode 100644 index 0627c28f5..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/RemoteDirectiveResponse.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright © 2024 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.api; - -import io.cdap.cdap.api.data.schema.Schema; - -import java.io.Serializable; -import java.util.List; - -/** - * Response after executing directives remotely - * Please make sure all fields are registered with {@link io.cdap.wrangler.utils.KryoSerializer} - */ -public class RemoteDirectiveResponse implements Serializable { - private final List rows; - private final Schema outputSchema; - - /** - * Only used by {@link io.cdap.wrangler.utils.KryoSerializer} - **/ - private RemoteDirectiveResponse() { - this(null, null); - } - - public RemoteDirectiveResponse(List rows, Schema outputSchema) { - this.rows = rows; - this.outputSchema = outputSchema; - } - - public List getRows() { - return rows; - } - - public Schema getOutputSchema() { - return outputSchema; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/ReportErrorAndProceed.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/ReportErrorAndProceed.java deleted file mode 100644 index e4d277779..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/ReportErrorAndProceed.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * Exception throw when the record needs to emitted to error collector. - * This class is similar to {@link ErrorRowException}, but, with a difference - * that it reports error and continues processing. - */ -public class ReportErrorAndProceed extends Exception { - // Message as to why the record errored. - private String message; - - // Code associated with the error message. - private int code; - - public ReportErrorAndProceed(String message, int code) { - this.message = message; - this.code = code; - } - - /** - * @return Message as why the record errored. - */ - public String getMessage() { - return message; - } - - /** - * @return code related to the message. - */ - public int getCode() { - return code; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/Row.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/Row.java deleted file mode 100644 index a47226191..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/Row.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright © 2016-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -/** - * Row defines the schema and data on which the wrangler will operate upon. - */ -@PublicEvolving -public final class Row implements Serializable { - private static final long serialVersionUID = -7505703059736709602L; - - // Name of the columns held by the row. - private List columns = new ArrayList<>(); - - // Values held by the row. - private List values = new ArrayList<>(); - - public Row() { - } - - /** - * Makes a copy of the row. - * - * @param row to be copied to 'this' object. - */ - public Row(Row row) { - this.values = new ArrayList<>(row.values); - this.columns = new ArrayList<>(row.columns); - } - - /** - * Initializes a row with list of columns. - * - * @param columns to set in the row. - */ - public Row(List columns) { - this.columns = new ArrayList<>(columns); - this.values = new ArrayList<>(columns.size()); - } - - /** - * Initializes the row with column name and value. - * - * @param name of the column to be added to the row. - * @param value for the column defined above. - */ - public Row(String name, Object value) { - this.columns = new ArrayList<>(1); - this.values = new ArrayList<>(1); - this.columns.add(name); - this.values.add(value); - } - - /** - * Gets a column name by index. - * - * @param idx to retrieve the name of the column. - * @return name of the column. - */ - public String getColumn(int idx) { - return columns.get(idx); - } - - /** - * Sets the name of the column at a given index. - * - * @param idx at which the new name to be set. - * @param name of the column to be set at idx. - */ - public void setColumn(int idx, String name) { - columns.set(idx, name); - } - - /** - * Gets a value of row at specified index. - * - * @param idx from where the value should be retrieved. - * @return value at index (idx). - */ - public Object getValue(int idx) { - return values.get(idx); - } - - /** - * Gets value based on the column name. - * - * @param col name of the column for which the value is retrieved. - * @return value associated with column. - */ - public Object getValue(String col) { - if (col != null && !col.isEmpty()) { - int idx = find(col); - if (idx != -1) { - return values.get(idx); - } - } - return null; - } - - /** - * Updates the value of the row at index idx. - * - * @param idx index at which the value needs to be updated. - * @param value value to be updated at index (idx). - */ - public Row setValue(int idx, Object value) { - values.set(idx, value); - return this; - } - - /** - * Adds a value into row with name. - * - * @param name of the value to be added to row. - * @param value to be added to row. - */ - public Row add(String name, Object value) { - columns.add(name); - values.add(value); - return this; - } - - /** - * Removes the column and value at given index. - * - * @param idx for which the value and column are removed. - */ - public Row remove(int idx) { - columns.remove(idx); - values.remove(idx); - return this; - } - - /** - * Finds a column index based on the name of the column. The col name is case insensitive. - * - * @param col to be searched within the row. - * @return -1 if not present, else the index at which the column is found. - */ - public int find(String col) { - return find(col, 0); - } - - /** - * Finds a column index based on the name of the column. Starts the search from firstIdx index. - * The col name is case insensitive. - * - * @param col to be searched within the row. - * @param firstIdx first index to check - * @return -1 if not present, else the index at which the column is found. - */ - public int find(String col, int firstIdx) { - for (int i = firstIdx, columnsSize = columns.size(); i < columnsSize; i++) { - String name = columns.get(i); - if (col.equalsIgnoreCase(name)) { - return i; - } - } - return -1; - } - - /** - * @return width of the row. - */ - @Deprecated - public int length() { - return columns.size(); - } - - /** - * @return width of the row. - */ - public int width() { - return columns.size(); - } - - /** - * @return List of fields of record. - */ - public List> getFields() { - List> v = new ArrayList<>(); - int i = 0; - for (String column : columns) { - v.add(new Pair<>(column, values.get(i))); - ++i; - } - return v; - } - - /** - * Adds or sets the value. - * - * @param name of the field to be either set or added to record. - * @param value to be added. - */ - public void addOrSet(String name, Object value) { - int idx = find(name); - if (idx != -1) { - setValue(idx, value); - } else { - add(name, value); - } - } - - /** - * Adds or sets the value to the beginning. - * - * @param index at which the column need to be inserted. - * @param name of the field to be either set or added to record. - * @param value to be added. - */ - public void addOrSetAtIndex(int index, String name, Object value) { - int idx = find(name); - if (idx != -1) { - setValue(idx, value); - } else { - if (index < columns.size() && index < values.size()) { - columns.add(index, name); - values.add(index, value); - } - } - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - Row row = (Row) o; - return Objects.equals(columns, row.columns) && - Objects.equals(values, row.values); - } - - @Override - public int hashCode() { - return Objects.hash(columns, values); - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/SUID.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/SUID.java deleted file mode 100644 index 6e089fb25..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/SUID.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import java.security.SecureRandom; -import java.util.Random; - -/** - * This class SUID creates a unique 64-bit ID with capacity to - * generate around 64K unique ids within a millisecond. - */ -public final class SUID { - private static final int SHORT_MAX = 65536; - private static int counter = -1; - - private SUID() {} - - /** - * Creates a unique 64 bits ID by aggregating the current time in - * milliseconds since epoch (Jan. 1, 1970) and using a 16 bits counter. The - * counter is initialized at a random number. This generator can create up - * to 65536 different id per millisecond. - * - * @return a new id. - */ - public static synchronized long nextId() { - if (counter == -1) { - Random rnd = new SecureRandom(); - counter = rnd.nextInt(SHORT_MAX); - } - long now = System.currentTimeMillis(); - long id = (now << 16) | counter; - counter = (counter + 1) % SHORT_MAX; - return id; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/SchemaResolutionContext.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/SchemaResolutionContext.java deleted file mode 100644 index 015f8bdc6..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/SchemaResolutionContext.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.cdap.api.data.schema.Schema; - -/** - * Interface to pass contextual information related to getting or generating the output schema of a {@link Executor} - */ -public interface SchemaResolutionContext { - /** - * @return {@link Schema} of the input data before transformation - */ - Schema getInputSchema(); -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/SourceInfo.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/SourceInfo.java deleted file mode 100644 index ea199282a..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/SourceInfo.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -/** - * Class description here. - */ -public final class SourceInfo { - private final int lineno; - private final int colno; - private final String source; - - public SourceInfo(int lineno, int colno, String source) { - this.lineno = lineno; - this.colno = colno; - this.source = source; - } - - public int getLineNumber() { - return lineno; - } - - public int getColumnNumber() { - return colno; - } - - public String getSource() { - return source; - } - - @Override - public String toString() { - return String.format("%3d:%-3d - '%s'", lineno, colno, source); - } - - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("line", lineno); - object.addProperty("column", colno); - object.addProperty("source", source); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/TokenGroup.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/TokenGroup.java deleted file mode 100644 index c5a888e48..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/TokenGroup.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.wrangler.api.parser.Token; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -/** - * Class description here. - */ -public final class TokenGroup { - private final SourceInfo info; - private final List tokens; - - public TokenGroup() { - this.info = null; - this.tokens = new ArrayList<>(); - } - - public TokenGroup(SourceInfo info) { - this.info = info; - this.tokens = new ArrayList<>(); - } - - public void add(Token token) { - tokens.add(token); - } - - public int size() { - return tokens.size(); - } - - public Token get(int i) { - return tokens.get(i); - } - - public Iterator iterator() { - return tokens.iterator(); - } - - public SourceInfo getSourceInfo() { - return info; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/TransientStore.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/TransientStore.java deleted file mode 100644 index bf3fb8171..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/TransientStore.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import java.io.Serializable; -import java.util.Set; - -/** - * {@link TransientStore} is an interface that holds volatile information that's - * present across all the steps associated with the directives that are processing - * a single record. - */ -public interface TransientStore extends Serializable { - /** - * Resets the state of this store. - */ - void reset(TransientVariableScope scope); - - /** - * A value associated with the variable in the transient store. - * - * @param name of the variable to be retrieved. - * @param type of the value to be returned. - * @return instance of object of type T. - */ - T get(String name); - - /** - * Sets the value of the object for variable named 'name'. - * - * @param name of the variable for which the value needs to be set. - * @param value of the variable. - */ - void set(TransientVariableScope scope, String name, Object value); - - /** - * Increments a value of the variable. - * - * @param name of the variable. - * @param value associated with the variable. - */ - void increment(TransientVariableScope scope, String name, long value); - - /** - * Set of all the variables. - * - * @return list of all the variables. - */ - Set getVariables(); -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/TransientVariableScope.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/TransientVariableScope.java deleted file mode 100644 index e260cfd9e..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/TransientVariableScope.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -/** - * {@link TransientVariableScope} defines the scope of the transient variable. - * The variable can be either LOCAL or GLOBAL. - */ -public enum TransientVariableScope { - LOCAL, - GLOBAL -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/Triplet.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/Triplet.java deleted file mode 100644 index b0342f23d..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/Triplet.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api; - -import io.cdap.wrangler.api.annotations.Public; - -/** - * A triplet consisting of three elements - first, second & third. - * - * This class provides immutable access to elements of the triplet. - * - * @param type of the first element - * @param type of the second element - * @param type of the third element - */ -@Public -public final class Triplet { - private final F first; - private final S second; - private final T third; - - public Triplet(F first, S second, T third) { - this.first = first; - this.second = second; - this.third = third; - } - - /** - * @return First element of the triplet. - */ - public F getFirst() { - return first; - } - - /** - * @return Second element of the triplet. - */ - public S getSecond() { - return second; - } - - /** - * @return Third element of the triplet. - */ - public T getThird() { - return third; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/Categories.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/Categories.java deleted file mode 100644 index fb408ea2f..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/Categories.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.annotations; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * This annotation defines the category for a directive. - */ -@Documented -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -public @interface Categories { - String[] categories() default "default"; -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/Public.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/Public.java deleted file mode 100644 index 23277353d..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/Public.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.annotations; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Target; - -/** - * Annotation for marking classes as public, stable interfaces. - * - *

Classes, methods and fields with this annotation are stable across minor releases (1.0, 1.1, 1.2). In other words, - * applications using @Public annotated classes will compile against newer versions of the same major release. - * - *

Only major releases (1.0, 2.0, 3.0) can break interfaces with this annotation. - */ -@Documented -@Target(ElementType.TYPE) -@Public -public @interface Public { - -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/PublicEvolving.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/PublicEvolving.java deleted file mode 100644 index 68f049ecd..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/PublicEvolving.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.annotations; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Target; - -/** - * Annotation to mark classes and methods for public use, but with evolving interfaces. - * - *

Classes and methods with this annotation are intended for public use and have stable behavior. - * However, their interfaces and signatures are not considered to be stable and might be changed - * across versions. - * - *

This annotation also excludes methods and classes with evolving interfaces / signatures - * within classes annotated with {@link Public}. - * - */ -@Documented -@Target({ ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR }) -@Public -public @interface PublicEvolving { - -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/Usage.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/Usage.java deleted file mode 100644 index b2c061815..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/Usage.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.annotations; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * A interface defining the usage for the directive. - */ -@Documented -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -public @interface Usage { - String value() default ""; -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/package-info.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/package-info.java deleted file mode 100644 index ccc69d7c7..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/annotations/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * 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. - */ - -/** - * Collection of annotations used for annotaing {@code Directives} and classes - * of wrangler project. - */ -package io.cdap.wrangler.api.annotations; diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Lineage.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Lineage.java deleted file mode 100644 index e5558fb72..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Lineage.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.lineage; - -import io.cdap.cdap.api.annotation.Beta; - -/** - * This class Lineage defines a mutation defined by the directive that gets capture as lineage. - * - *

Directives have to implement this class to inject their mutations for lineage to be constructed.

- *

- * The method lineage is invoked separately in the prepareRun phase of the pipeline - * execution. Before the method lineage is invoked, the framework ensures that the receipe is - * parsed and initialize on each directive that is included is called. All the class variables of the directive - * are available to be used within the lineage method. - *

- * - *

- * {@link Mutation} captures all the changes the directive is going to be applying of the data. It has - * two major methods: - * - *

    - * - * readable - This method is defined to provide the post transformation description of the mutation - * the directive is applying on data. Care should be taken to use the right tense as the lineage would be consumed - * by users after the transformation has been applied on the data. As best practise, it's highly recommended to use - * past-tense for describing the transformations. Additionally, the language of the description is not trying - * to provide complete details and configuration, but actually focusing on operations that directive has - * performed on data. - * - *
  • - * relation - This methods defines the relations between various columns either being used - * as target or source for performing the data transformation.
  • - *
- *

- * - * Following are few examples of how the method can be implemented: - * - * - * @Override - * public Mutation lineage() { - * return Mutation.builder() - * .readable("Looking up catalog using value in column '%s' and results written into column '%s', src, dest) - * .relation(src, Many.of(src, dest)) - * .build(); - * } - * - * - * Another example: - * - * - * @Override - * public Mutation lineage() { - * return Mutation.builder() - * .readable("Dropped columns %s", columns") - * .drop(Many.of(columns)) - * .build(); - * } - * - * - * @see Mutation - * @see Relation - * @see Many - */ -@Beta -public interface Lineage { - /** - * Returns a Mutation that can be used to generate lineage. - * - * @return a instance of {@link Mutation} object used to generate lineage. - */ - Mutation lineage(); -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Many.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Many.java deleted file mode 100644 index 54b488187..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Many.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.lineage; - -import io.cdap.cdap.api.annotation.Beta; -import io.cdap.wrangler.api.parser.ColumnName; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; - -/** - * {@code Many} class is a helper to define many-to-one or one-to-many or many-to-many relations. - * - *

This class provides two main static methods {@code of} and {@code columns}. - *

- * - * - * Mutation.builder("Mapping expression") - * .readable("string") - * .relation(Many.of("col1", "col2")).build(); - * - * ... - * - * Mutation.builder("Mapping expression") - * .readable("string") - * .relation("source", Many.columns("col3", "col4", "col5").build(); - * - * - * @see Lineage - * @see Mutation - * @see Relation - */ -@Beta -public final class Many implements Serializable { - private static final long serialVersionUID = 4387496062863547599L; - private List columns = new ArrayList<>(); - - /** - * @return a instance of
List
that returns columns associated with source or target. - */ - public List columns() { - return columns; - } - - /** - * Method provides an easy way to translate ellipses parameters into a array of columns. - * - * @param columns list source or target columns of type {@link String}. - * @return a instance of {@link Many}. - */ - public static Many of(String ... columns) { - return new Many(columns); - } - - /** - * List of columns of type string as source or target. - * - * @param columns list source or target columns of type {@link List} of {@link String}. - * @return a instance of {@link Many}. - */ - public static Many of(Collection columns) { - return new Many(columns); - } - - /** - * List of {@link ColumnName} specified as source or target. The method will convert the {@link ColumnName} to - * string. - * - * @param columns list source or target columns of type {@link List} of {@link ColumnName}. - * @return a instance of {@link Many}. - */ - public static Many columns(Collection columns) { - return new Many(columns.stream().map(ColumnName::value).collect(Collectors.toList())); - } - - /** - * List of {@link ColumnName} specifying source or target. - * - * @param columns list source or target columns of type {@link ColumnName}. - * @return a instance of {@link Many}. - */ - public static Many columns(ColumnName ... columns) { - return new Many(Arrays.stream(columns).map(ColumnName::value).collect(Collectors.toList())); - } - - /** - * List of columns of type {@link String} specifying either source or target. - * - * @param columns list source or target columns of type {@link String}. - * @return a instance of {@link Many}. - */ - public static Many columns(String ... columns) { - return new Many(columns); - } - - private Many() { - // prevent anyone from creating this object. - } - - private Many(Collection columns) { - this.columns.addAll(columns); - } - - private Many(String ... columns) { - this.columns.addAll(Arrays.asList(columns)); - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Mutation.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Mutation.java deleted file mode 100644 index 9c5d9a6fa..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Mutation.java +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.lineage; - -import io.cdap.cdap.api.annotation.Beta; -import io.cdap.wrangler.api.parser.ColumnName; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.UUID; - -/** - * The Mutation class represents a collection of relations which can be used to generate lineage for - * a directive. It uses a UUID so that the name will be unique. - * - *

As this class is immutable, the constructor requires all the member variables to be presented - * for an instance of this object to be created.

- * - * The class has methods to retrieve the readable text describing the transformation, and - * relations to retrieve all the associations of source to targets - * - * @see Lineage - * @see Relation - * @see Many - */ -@Beta -public final class Mutation implements Serializable { - private static final long serialVersionUID = 1243542667080258334L; - private final String readable; - private final List relations; - - private Mutation() { - this("", Collections.emptyList()); - } - - private Mutation(String readable, List relations) { - this.readable = readable; - this.relations = Collections.unmodifiableList(new ArrayList<>(relations)); - } - - /** - * @return a readable {@link String} version of the transformation to be included in lineage. - */ - public String readable() { - return readable; - } - - /** - * @return a {@link List} of {@link Relation} associated with the transformation. - */ - public List relations() { - return relations; - } - - /** - * @return a instance of {@link Mutation.Builder} - */ - public static Mutation.Builder builder() { - return new Mutation.Builder(); - } - - /** - * Builder to create Mutation. - */ - public static class Builder { - private final List relations; - private String description; - - /** - * A builder constructor. - */ - public Builder() { - this.relations = new ArrayList<>(); - } - - /** - * An easy way to created a formatted string of transformation. - * - * @param format a format string. - * @param args Arguments referenced by the format specifiers in the format string. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder readable(String format, Object ... args) { - this.description = String.format(format, args); - return this; - } - - /** - * A variation to specify the readable string for transformation. - * - * @param format a format string. - * @param args Arguments referenced by the format specifiers in the format string. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder readable(String format, List args) { - readable(format, args.toArray()); - return this; - } - - /** - * Specifies a relation that need to be dropped. - * - * @param sources a list of sources to be dropped from lineage. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder drop(Many sources) { - relations.add(new Relation(uuid(), sources.columns(), - Collections.emptyList(), Relation.Type.DROP)); - return this; - } - - /** - * Specifies a relation that has no cause but effect. - * - * @param targets a list of targets. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder create(Many targets) { - relations.add(new Relation(uuid(), Collections.emptyList(), - targets.columns(), Relation.Type.CREATE)); - return this; - } - - /** - * A relation that has association with all the input fields. - * This method is used usually during set columns scenarios. - * - * @param targets a list of targets. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder generate(Many targets) { - relations.add(new Relation(uuid(), Collections.emptyList(), - targets.columns(), Relation.Type.GENERATE)); - return this; - } - - /** - * A relation that has association with all in the output field. - * This method is used usually during parse scenarios. - * - * @param sources list of sources to be associated with all output. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder all(Many sources) { - relations.add(new Relation(uuid(), sources.columns(), - Collections.emptyList(), Relation.Type.ALL)); - return this; - } - - /** - * A relation that has association with a set of targets + all in the output field. - * This method is used usually during parse scenarios, where the directive knows some part of the relation, - * but unclear about the overall outputs it will generate - * For example, csv parser will parse field body -> a,b,c, and still preserve body. - * - * @param sources list of sources to be associated with targets and all output fields. - * @param targets list of targets to be associated with the sources. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder all(Many sources, Many targets) { - relations.add(new Relation(sources.columns(), targets.columns(), Relation.Type.ALL)); - return this; - } - - /** - * A standard relation between source of {@link ColumnName} to target of {@link ColumnName}. - * - * @param source a instance of {@link ColumnName} source. - * @param target a instance of {@link ColumnName} target. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder relation(ColumnName source, ColumnName target) { - relation(source.value(), target.value()); - return this; - } - - /** - * A relation that's conditional, depending on whether source and target are same. - * - * @param source a instance of {@link String} source. - * @param target a instance of {@link String} target. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder conditional(String source, String target) { - relation(source, source.equals(target) ? Many.of(target) : Many.of(source, target)); - return this; - } - - /** - * A standard one-to-one relation. - * - * @param source a source column. - * @param target a target column. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder relation(String source, String target) { - relation(source, Many.of(target)); - return this; - } - - /** - * A standard one-to-one relation. - * - * @param source a source column of type {@link ColumnName}. - * @param targets a target column of type {@link ColumnName}. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder relation(ColumnName source, Many targets) { - relation(source.value(), targets); - return this; - } - - /** - * A relation specifying one-to-many. - * - * @param source a source column of type {@link String}. - * @param targets {@link Many} target columns to be associated with source. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder relation(String source, Many targets) { - relation(Many.of(source), targets); - return this; - } - - /** - * Specifies a relation that is many-to-one. - * - * @param sources {@link Many} source columns to be associated with target. - * @param target a target column of type {@link String}. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder relation(Many sources, String target) { - relation(sources, Many.of(target)); - return this; - } - - /** - * Specifies {@link Many} to {@link Many} relation. - * - * @param sources {@link Many} source columns to be associated with {@link Many} targets. - * @param targets {@link Many} target columns to be associated with {@link Many} sources. - * @return a instance of {@link Mutation.Builder} - */ - public Mutation.Builder relation(Many sources, Many targets) { - relations.add(new Relation(uuid(), sources.columns(), targets.columns())); - return this; - } - - /** - * Specifies a many-to-one relation. - * - * @param sources {@link Many} source columns to be associated with target. - * @param target a instance of {@link ColumnName} target. - * @return a instance of {@link Mutation.Builder}. - */ - public Mutation.Builder relation(Many sources, ColumnName target) { - relation(sources, target.value()); - return this; - } - - private String uuid() { - return UUID.randomUUID().toString(); - } - - public Mutation build() { - return new Mutation(description, relations); - } - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Relation.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Relation.java deleted file mode 100644 index a644413a6..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/lineage/Relation.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.lineage; - -import io.cdap.cdap.api.annotation.Beta; - -import java.io.Serializable; -import java.util.List; - -/** - * The Relation class represents a relation between a list of sources to a list of targets. - * The relation can have 4 different types and can be many-to-many, many-to-one, one-to-many or one-to-one. - * - *

A relation can be of four different types namely:

- *
    - *
  • - * DROP type - This type represents relation with a non-existential destination - one-to-none - * type. This type is used when the column wouldn't be present after the transformation is performed. - *
  • - *
  • - * ALL - This type represents a relation with many, one-to-many or many-to-many relation. This - * type is generally used when the transformation is unclear about what columns would be generated. - *
  • - *
  • - * CREATE - This type represents a relation in which a transformation creates a target without - * having any source. - *
  • - *
  • - * GENERATE - This type represents a relation with many, one-to-many or many-to-many relation. This - * type is generaly used when the transformation is unclear about the input columns - *
  • - *
  • - * STANDARD - This type represents all standard relations like many-to-many, many-to-one and - * one-to-many. - *
  • - *
- * - * @see Lineage - * @see Many - * @see Mutation - */ -@Beta -public final class Relation implements Serializable { - private static final long serialVersionUID = 789984476035584877L; - - /** - * Specifies the type of relations that can exist between source and target. - */ - public enum Type { - DROP, - ALL, - CREATE, - GENERATE, - STANDARD, - } - - private final String id; - private final List sources; - private final List targets; - private final Type type; - - /** - * A constructor to create a relation with a unique id and associated source and target columns. - * This method defaults the relation type to STANDARD - * - * @param id of the relation. - * @param sources a {@link List} of sources columns. - * @param targets a {@link List} of target columns. - * @deprecated id is no longer needed to construct the relation, wrangler itself will generate the id - */ - @Deprecated - Relation(String id, List sources, List targets) { - this(id, sources, targets, Type.STANDARD); - } - - /** - * A constructor to create a relation with a specified {@link Relation.Type} specified. - * - * @param id of the relation. - * @param sources a {@link List} of sources columns. - * @param targets a {@link List} of target columns. - * @param type of relation. - * @deprecated id is no longer needed to construct the relation, wrangler itself will generate the id - */ - @Deprecated - Relation(String id, List sources, List targets, Type type) { - this.id = id; - this.sources = sources; - this.targets = targets; - this.type = type; - } - - /** - * A constructor to create a relation with a unique id and associated source and target columns. - * This method defaults the relation type to STANDARD - * - * @param sources a {@link List} of sources columns. - * @param targets a {@link List} of target columns. - */ - Relation(List sources, List targets) { - this(null, sources, targets); - } - - /** - * A constructor to create a relation with a specified {@link Relation.Type} specified. - * - * @param sources a {@link List} of sources columns. - * @param targets a {@link List} of target columns. - * @param type of relation. - */ - Relation(List sources, List targets, Type type) { - this(null, sources, targets, type); - } - - /** - * @return a {@link String} representation of an id for uniquely identifying the relation. - * @deprecated this id is no longer needed to construct the relation, the wrangler transform will generate id for - * the relation - */ - @Deprecated - public String id() { - return id; - } - - /** - * @return a {@link List} of source columns. - */ - public List getSources() { - return sources; - } - - /** - * @return a {@link Relation.Type} this relation represents. - */ - public Type getType() { - return type; - } - - /** - * @return a {@link List} of target columns. - */ - public List getTargets() { - return targets; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/package-info.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/package-info.java deleted file mode 100644 index 0b42420a5..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * 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. - */ - -/** - * APIs for working with wrangler. - */ -package io.cdap.wrangler.api; diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Bool.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Bool.java deleted file mode 100644 index 4f10fad5c..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Bool.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -/** - * The Bool class wraps the primitive type {@code Boolean} in a object. - * An object of type {@code Bool} contains the value in primitive type - * as well as the type of the token this class represents. - * - *

In addition, this class provides two methods one to extract the - * value held by this wrapper object, and the second for extracting the - * type of the token.

- * - * @see BoolList - * @see ColumnName - * @see ColumnNameList - * @see DirectiveName - * @see Numeric - * @see NumericList - * @see Properties - * @see Ranges - * @see Expression - * @see Text - * @see TextList - * @see Identifier - */ -@PublicEvolving -public class Bool implements Token { - /** - * The {@code Boolean} object that represents the value held by the token. - */ - private Boolean value; - - /** - * Allocates a {@code Boolean} object representing the - * {@code value} argument. - * - * @param value the value of the {@code Boolean}. - */ - public Bool(Boolean value) { - this.value = value; - } - - /** - * Returns the value of this {@code Boolean} object as a boolean - * primitive. - * - * @return the primitive {@code boolean} value of this object. - */ - @Override - public Boolean value() { - return value; - } - - /** - * Returns the type of this {@code Bool} object as a {@code TokenType} - * enum. - * - * @return the enumerated {@code TokenType} of this object. - */ - @Override - public TokenType type() { - return TokenType.BOOLEAN; - } - - /** - * Returns the members of this {@code Bool} object as a {@code JsonElement}. - * - * @return Json representation of this {@code Bool} object as {@code JsonElement} - */ - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("type", TokenType.BOOLEAN.name()); - object.addProperty("value", value); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/BoolList.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/BoolList.java deleted file mode 100644 index 80e18b831..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/BoolList.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.util.List; - -/** - * The Bool List class wraps the list of primitive type {@code Boolean} in a object. - * An object of type {@code BoolList} contains the value as a {@code List} of primitive type - * {@code Boolean}. Along with the list of {@code Boolean} type, this object also contains - * the value that represents the type of this object as {@code TokenType}. - * - *

In addition, this class provides two methods one to extract the - * value held by this wrapper object, and the second for extracting the - * type of the token.

- * - * @see Bool - * @see ColumnName - * @see ColumnNameList - * @see DirectiveName - * @see Numeric - * @see NumericList - * @see Properties - * @see Ranges - * @see Expression - * @see Text - * @see TextList - */ -@PublicEvolving -public class BoolList implements Token { - /** - * The {@code List} object that represents the value held by the token. - */ - private List values; - - /** - * Allocates a {@code List} object representing the {@code value} argument. - * @param values - */ - public BoolList(List values) { - this.values = values; - } - - /** - * Returns the value of this {@code BoolList} object as a list of boolean - * primitive. - * - * @return the list of primitive {@code boolean} {@code values} of this object. - */ - @Override - public List value() { - return values; - } - - /** - * Returns the type of this {@code BoolList} object as a {@code TokenType} - * enum. - * - * @return the enumerated {@code TokenType} of this object. - */ - @Override - public TokenType type() { - return TokenType.BOOLEAN_LIST; - } - - /** - * Returns the members of this {@code BoolList} object as a {@code JsonElement}. - * - * @return Json representation of this {@code BoolList} object as {@code JsonElement} - */ - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("type", TokenType.BOOLEAN_LIST.name()); - JsonArray array = new JsonArray(); - for (Boolean value : values) { - array.add(new JsonPrimitive(value)); - } - object.add("value", array); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/ColumnName.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/ColumnName.java deleted file mode 100644 index 6d99e35e1..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/ColumnName.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -/** - * - */ -@PublicEvolving -public class ColumnName implements Token { - private String value; - - public ColumnName(String value) { - this.value = value; - } - - @Override - public String value() { - return value; - } - - @Override - public TokenType type() { - return TokenType.COLUMN_NAME; - } - - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("type", TokenType.COLUMN_NAME.name()); - object.addProperty("value", value); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/ColumnNameList.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/ColumnNameList.java deleted file mode 100644 index a52130bdb..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/ColumnNameList.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.util.ArrayList; -import java.util.List; - -/** - * Class description here. - */ -@PublicEvolving -public class ColumnNameList implements Token { - private List values = new ArrayList<>(); - - public ColumnNameList(List values) { - this.values = values; - } - - @Override - public List value() { - return values; - } - - @Override - public TokenType type() { - return TokenType.COLUMN_NAME_LIST; - } - - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("type", TokenType.COLUMN_NAME_LIST.name()); - JsonArray array = new JsonArray(); - for (String value : values) { - array.add(new JsonPrimitive(value)); - } - object.add("value", array); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/DirectiveName.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/DirectiveName.java deleted file mode 100644 index 24aa3b92b..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/DirectiveName.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -/** - * Class description here. - */ -@PublicEvolving -public class DirectiveName implements Token { - private String value; - - public DirectiveName(String value) { - this.value = value; - } - - @Override - public String value() { - return value; - } - - @Override - public TokenType type() { - return TokenType.DIRECTIVE_NAME; - } - - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("type", TokenType.DIRECTIVE_NAME.name()); - object.addProperty("value", value); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Expression.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Expression.java deleted file mode 100644 index 3c95a4561..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Expression.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -/** - * Class description here. - */ -@PublicEvolving -public class Expression implements Token { - private String value; - - public Expression(String value) { - this.value = value; - } - - @Override - public String value() { - return value; - } - - @Override - public TokenType type() { - return TokenType.EXPRESSION; - } - - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("type", TokenType.EXPRESSION.name()); - object.addProperty("value", value); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Identifier.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Identifier.java deleted file mode 100644 index a86c4752f..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Identifier.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -/** - * The Identifier class wraps the primitive type {@code String} in a object. - * An object of type {@code Identifier} contains the value in primitive type - * as well as the type of the token this class represents. - * - *

In addition, this class provides two methods one to extract the - * value held by this wrapper object, and the second for extracting the - * type of the token.

- * - * @see BoolList - * @see ColumnName - * @see ColumnNameList - * @see DirectiveName - * @see Numeric - * @see NumericList - * @see Properties - * @see Ranges - * @see Expression - * @see Text - * @see TextList - */ -@PublicEvolving -public class Identifier implements Token { - /** - * The {@code String} object that represents the value held by the token. - */ - private String value; - - /** - * Allocates a {@code String} object representing the - * {@code value} argument. - * - * @param value the value of the {@code String}. - */ - public Identifier(String value) { - this.value = value; - } - - /** - * Returns the value of this {@code String} object as a boolean - * primitive. - * - * @return the primitive {@code Identifier} value of this object. - */ - @Override - public String value() { - return value; - } - - /** - * Returns the type of this {@code Identifier} object as a {@code TokenType} - * enum. - * - * @return the enumerated {@code TokenType} of this object. - */ - @Override - public TokenType type() { - return TokenType.IDENTIFIER; - } - - /** - * Returns the members of this {@code Identifier} object as a {@code JsonElement}. - * - * @return Json representation of this {@code Identifier} object as {@code JsonElement} - */ - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("type", TokenType.IDENTIFIER.name()); - object.addProperty("value", value); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Numeric.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Numeric.java deleted file mode 100644 index 5929efc0b..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Numeric.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.LazyNumber; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -/** - * Class description here. - */ -@PublicEvolving -public class Numeric implements Token { - private final LazyNumber value; - - public Numeric(LazyNumber value) { - this.value = value; - } - - @Override - public LazyNumber value() { - return value; - } - - @Override - public TokenType type() { - return TokenType.NUMERIC; - } - - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("type", TokenType.NUMERIC.name()); - object.addProperty("value", value); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/NumericList.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/NumericList.java deleted file mode 100644 index 4bddfdc41..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/NumericList.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import io.cdap.wrangler.api.LazyNumber; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.util.List; - -/** - * Class description here. - */ -@PublicEvolving -public class NumericList implements Token { - private final List values; - - public NumericList(List values) { - this.values = values; - } - - @Override - public List value() { - return values; - } - - @Override - public TokenType type() { - return TokenType.NUMERIC_LIST; - } - - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("type", TokenType.NUMERIC_LIST.name()); - JsonArray array = new JsonArray(); - for (LazyNumber value : values) { - array.add(new JsonPrimitive(value)); - } - object.add("value", array); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Properties.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Properties.java deleted file mode 100644 index 2a8944525..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Properties.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.util.Map; - -/** - * Class description here. - */ -@PublicEvolving -public class Properties implements Token { - private Map values; - - public Properties(Map values) { - this.values = values; - } - - @Override - public Map value() { - return values; - } - - @Override - public TokenType type() { - return TokenType.PROPERTIES; - } - - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - for (Map.Entry entry : values.entrySet()) { - object.add(entry.getKey(), entry.getValue().toJson()); - } - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Ranges.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Ranges.java deleted file mode 100644 index d688167f6..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Ranges.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.Triplet; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.util.List; - -/** - * Class description here. - */ -@PublicEvolving -public class Ranges implements Token { - private final List> values; - - public Ranges(List> values) { - this.values = values; - } - - @Override - public List> value() { - return values; - } - - @Override - public TokenType type() { - return TokenType.RANGES; - } - - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/SyntaxError.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/SyntaxError.java deleted file mode 100644 index 1111b9ec6..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/SyntaxError.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import io.cdap.wrangler.api.annotations.PublicEvolving; - -/** - * The class SyntaxError contains information about the errors observed - * during parsing of the recipe. - * - *

It contains the line number, character position, the error message and the - * source line that has errors.

- */ -@PublicEvolving -public final class SyntaxError { - private final int lineNo; - private final int charPos; - private final String message; - private final String line; - - public SyntaxError(int lineNo, int charPos, String message, String line) { - this.lineNo = lineNo; - this.charPos = charPos; - this.message = message; - this.line = line; - } - - /** - * @return Returns the line number where the syntax error occured. - */ - public int getLineNumber() { - return lineNo; - } - - /** - * @return Returns the character position within the line where the error is suspected. - */ - public int getCharPosition() { - return charPos; - } - - /** - * @return The error message generated by the parser for the line. - */ - public String getMessage() { - return message; - } - - /** - * @return Original line that has the syntax error. - */ - public String getLine() { - return line; - } - - /** - * @return Represents the string representation of this object SyntaxError - */ - @Override - public String toString() { - return message; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Text.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Text.java deleted file mode 100644 index 5b86a6dca..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Text.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -/** - * Class description here. - */ -@PublicEvolving -public class Text implements Token { - private String value; - - public Text(String value) { - this.value = value; - } - - @Override - public String value() { - return value; - } - - @Override - public TokenType type() { - return TokenType.TEXT; - } - - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("type", TokenType.TEXT.name()); - object.addProperty("value", value); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/TextList.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/TextList.java deleted file mode 100644 index b2523f789..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/TextList.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.util.List; - -/** - * Class description here. - */ -@PublicEvolving -public class TextList implements Token { - private List values; - - public TextList(List values) { - this.values = values; - } - - @Override - public List value() { - return values; - } - - @Override - public TokenType type() { - return TokenType.TEXT_LIST; - } - - - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - object.addProperty("type", TokenType.TEXT_LIST.name()); - JsonArray array = new JsonArray(); - for (String value : values) { - array.add(new JsonPrimitive(value)); - } - object.add("value", array); - return object; - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Token.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Token.java deleted file mode 100644 index bc596f4df..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/Token.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import com.google.gson.JsonElement; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.io.Serializable; - -/** - * The Token class represents the object that contains the value and type of - * the token as parsed by the parser of the grammar defined for recipe. - * - *

This class provides methods for retrieving the wrapped value of token parsed - * as well the type of token the implementation of this interface represents.

- * - *

It also provides method for providing the {@code JsonElement} of implementation - * of this interface.

- */ -@PublicEvolving -public interface Token extends Serializable { - /** - * Returns the {@code value} of the object wrapped by the - * implementation of this interface. - * - * @return {@code value} wrapped by the implementation of this interface. - */ - Object value(); - - /** - * Returns the {@code TokenType} of the object represented by the - * implementation of this interface. - * - * @return {@code TokenType} of the implementation object. - */ - TokenType type(); - - /** - * The class implementing this interface will return the {@code JsonElement} - * instance including the values of the object. - * - * @return {@code JsonElement} object containing members of implementing class. - */ - JsonElement toJson(); -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/TokenDefinition.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/TokenDefinition.java deleted file mode 100644 index 25bf2d10b..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/TokenDefinition.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.io.Serializable; - -/** - * The TokenDefinition class represents a definition of token as specified - * by the user while defining a directive usage. All definitions of a token are represented - * by a instance of this class. - * - * The definition are constant (immutable) and they cannot be changed once defined. - * For example : - * - * TokenDefinition token = new TokenDefintion("column", TokenType.COLUMN_NAME, null, 0, Optional.FALSE); - * - * - *

The class TokenDefinition includes methods for retrieveing different members of - * like name of the token, type of the token, label associated with token, whether it's optional or not - * and the ordinal number of the token in the TokenGroup.

- * - *

As this class is immutable, the constructor requires all the member variables to be presnted - * for an instance of this object to be created.

- */ -@PublicEvolving -public final class TokenDefinition implements Serializable { - private final int ordinal; - private final boolean optional; - private final String name; - private final TokenType type; - private final String label; - - public TokenDefinition(String name, TokenType type, String label, int ordinal, boolean optional) { - this.name = name; - this.type = type; - this.label = label; - this.ordinal = ordinal; - this.optional = optional; - } - - /** - * @return Label associated with the token. Label provides a way to override the usage description - * for this TokenDefinition. If a label is not provided, then this return null. - */ - public String label() { - return label; - } - - /** - * @return Returns the oridinal number of this TokenDefinition within - * the TokenGroup, - */ - public int ordinal() { - return ordinal; - } - - /** - * @return true, if this TokenDefinition is optional, false otherwise. - */ - public boolean optional() { - return optional; - } - - /** - * @return Name of this TokenDefinition - */ - public String name() { - return name; - } - - /** - * @return Returns the type of this TokenDefinition. - */ - public TokenType type() { - return type; - } - -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/TokenType.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/TokenType.java deleted file mode 100644 index 8c93b0e6a..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/TokenType.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.io.Serializable; - -/** - * The TokenType class provides the enumerated types for different types of - * tokens that are supported by the grammar. - * - * Each of the enumerated types specified in this class also has associated - * object representing it. e.g. {@code DIRECTIVE_NAME} is represented by the - * object {@code DirectiveName}. - * - * @see Bool - * @see BoolList - * @see ColumnName - * @see ColumnNameList - * @see DirectiveName - * @see Numeric - * @see NumericList - * @see Properties - * @see Ranges - * @see Expression - * @see Text - * @see TextList - */ -@PublicEvolving -public enum TokenType implements Serializable { - /** - * Represents the enumerated type for the object {@code DirectiveName} type. - * This type is associated with the token that is recognized as a directive - * name within the recipe. - */ - DIRECTIVE_NAME, - - /** - * Represents the enumerated type for the object of {@code ColumnName} type. - * This type is associated with token that represents the column as defined - * by the grammar as :. - */ - COLUMN_NAME, - - /** - * Represents the enumerated type for the object of {@code Text} type. - * This type is associated with the token that is either enclosed within a single quote(') - * or a double quote (") as string. - */ - TEXT, - - /** - * Represents the enumerated type for the object of {@code Numeric} type. - * This type is associated with the token that is either a integer or real number. - */ - NUMERIC, - - /** - * Represents the enumerated type for the object of {@code Bool} type. - * This type is associated with the token that either represents string 'true' or 'false'. - */ - BOOLEAN, - - /** - * Represents the enumerated type for the object of type {@code BoolList} type. - * This type is associated with the rule that is a collection of {@code Boolean} values - * separated by comman(,). E.g. - * - * ColumnName[,ColumnName]* - * - */ - COLUMN_NAME_LIST, - - /** - * Represents the enumerated type for the object of type {@code TextList} type. - * This type is associated with the comma separated text represented were each text - * is enclosed within a single quote (') or double quote (") and each text is separated - * by comma (,). E.g. - * - * Text[,Text]* - * - */ - TEXT_LIST, - - /** - * Represents the enumerated type for the object of type {@code NumericList} type. - * This type is associated with the collection of {@code Numeric} values separated by - * comma(,). E.g. - * - * Numeric[,Numeric]* - * - * - */ - NUMERIC_LIST, - - /** - * Represents the enumerated type for the object of type {@code BoolList} type. - * This type is associated with the collection of {@code Bool} values separated by - * comma(,). E.g. - * - * Boolean[,Boolean]* - * - */ - BOOLEAN_LIST, - - /** - * Represents the enumerated type for the object of type {@code Expression} type. - * This type is associated with code block that either represents a condition or - * an expression. E.g. - * - * exp:{ } - * - */ - EXPRESSION, - - /** - * Represents the enumerated type for the object of type {@code Properties} type. - * This type is associated with a collection of key and value pairs all separated - * by a comma(,). E.g. - * - * prop:{ =[,=]*} - * - */ - PROPERTIES, - - /** - * Represents the enumerated type for the object of type {@code Ranges} types. - * This type is associated with a collection of range represented in the form shown - * below - * - * :=value[,:=value]* - * - */ - RANGES, - - /** - * Represents the enumerated type for the object of type {@code String} with restrictions - * on characters that can be present in a string. - */ - IDENTIFIER -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/UsageDefinition.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/UsageDefinition.java deleted file mode 100644 index 78800b7d1..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/UsageDefinition.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import io.cdap.wrangler.api.Optional; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - -/** - * This class {@link UsageDefinition} provides a way for users to registers the argument for UDDs. - * - * {@link UsageDefinition} is a collection of {@link TokenDefinition} and the name of the directive - * itself. Each token specification has an associated ordinal that can be used to position the argument - * within the directive. - * - * Following is a example of how this class can be used. - * - * UsageDefinition.Builder builder = UsageDefinition.builder(); - * builder.add("col1", TypeToken.COLUMN_NAME); // By default, this field is required. - * builder.add("col2", TypeToken.COLUMN_NAME, false); // This is a optional field. - * builder.add("expression", TypeToken.EXPRESSION); - * UsageDefinition definition = builder.build(); - * - * - * NOTE: No constraints checks are included in this implementation. - * - * @see TokenDefinition - */ -public final class UsageDefinition implements Serializable { - // transient so it doesn't show up when serialized using gson in service endpoint responses - private final transient int optionalCnt; - private final String directive; - private final List tokens; - - private UsageDefinition(String directive, int optionalCnt, List tokens) { - this.directive = directive; - this.tokens = tokens; - this.optionalCnt = optionalCnt; - } - - /** - * Returns the name of the directive for which the this UsageDefinition - * object is created. - * - * @return name of the directive. - */ - public String getDirectiveName() { - return directive; - } - - /** - * This method returns the list of TokenDefinition that should be - * used for parsing the directive into Arguments. - * - * @return List of TokenDefinition. - */ - public List getTokens() { - return tokens; - } - - /** - * Returns the count of TokenDefinition that have been specified - * as optional in the UsageDefinition. - * - * @return number of tokens in the usage that are optional. - */ - public int getOptionalTokensCount() { - return optionalCnt; - } - - /** - * This method converts the UsageDefinition into a usage string - * for this directive. It inspects all the tokens to generate a standard syntax - * for the usage of the directive. - * - * @return a usage representation of this object. - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(directive).append(" "); - - int count = tokens.size(); - for (TokenDefinition token : tokens) { - if (token.optional()) { - sb.append(" ["); - } - - if (token.label() != null) { - sb.append(token.label()); - } else { - if (token.type().equals(TokenType.DIRECTIVE_NAME)) { - sb.append(token.name()); - } else if (token.type().equals(TokenType.COLUMN_NAME)) { - sb.append(":").append(token.name()); - } else if (token.type().equals(TokenType.COLUMN_NAME_LIST)) { - sb.append(":").append(token.name()).append(" [,:").append(token.name()).append(" ]*"); - } else if (token.type().equals(TokenType.BOOLEAN)) { - sb.append(token.name()).append(" (true/false)"); - } else if (token.type().equals(TokenType.TEXT)) { - sb.append("'").append(token.name()).append("'"); - } else if (token.type().equals(TokenType.IDENTIFIER) || token.type().equals(TokenType.NUMERIC)) { - sb.append(token.name()); - } else if (token.type().equals(TokenType.BOOLEAN_LIST) || token.type().equals(TokenType.NUMERIC_LIST) - || token.type().equals(TokenType.TEXT_LIST)) { - sb.append(token.name()).append("[,").append(token.name()).append(" ...]*"); - } else if (token.type().equals(TokenType.EXPRESSION)) { - sb.append("exp:{<").append(token.name()).append(">}"); - } else if (token.type().equals(TokenType.PROPERTIES)) { - sb.append("prop:{key:value,[key:value]*"); - } else if (token.type().equals(TokenType.RANGES)) { - sb.append("start:end=[bool|text|numeric][,start:end=[bool|text|numeric]*"); - } - } - - count--; - - if (token.optional()) { - sb.append("]"); - } else { - if (count > 0) { - sb.append(" "); - } - } - } - return sb.toString(); - } - - /** - * This is a static method for creating a builder for the UsageDefinition - * object. In order to create a UsageDefinition, a builder has to created. - * - *

This builder is provided as user API for constructing the usage specification - * for a directive.

- * - * @param directive name of the directive for which the builder is created for. - * @return A UsageDefinition.Builder object that can be used to construct - * UsageDefinition object. - */ - public static UsageDefinition.Builder builder(String directive) { - return new UsageDefinition.Builder(directive); - } - - /** - * This inner builder class provides a way to create UsageDefinition - * object. It exposes different methods that allow users to configure the TokenDefinition - * for each token used within the usage of a directive. - */ - public static final class Builder { - private final String directive; - private final List tokens; - private int currentOrdinal; - private int optionalCnt; - - public Builder(String directive) { - this.directive = directive; - this.currentOrdinal = 0; - this.tokens = new ArrayList<>(); - this.optionalCnt = 0; - } - - /** - * This method provides a way to set the name and the type of token, while - * defaulting the label to 'null' and setting the optional to FALSE. - * - * @param name of the token in the definition of a directive. - * @param type of the token to be extracted. - */ - public void define(String name, TokenType type) { - TokenDefinition spec = new TokenDefinition(name, type, null, currentOrdinal, Optional.FALSE); - currentOrdinal++; - tokens.add(spec); - } - - /** - * Allows users to define a token with a name, type of the token and additional optional - * for the label that is used during creation of the usage for the directive. - * - * @param name of the token in the definition of a directive. - * @param type of the token to be extracted. - * @param label label that modifies the usage for this field. - */ - public void define(String name, TokenType type, String label) { - TokenDefinition spec = new TokenDefinition(name, type, label, currentOrdinal, Optional.FALSE); - currentOrdinal++; - tokens.add(spec); - } - - /** - * Method allows users to specify a field as optional in combination to the - * name of the token and the type of token. - * - * @param name of the token in the definition of a directive. - * @param type of the token to be extracted. - * @param optional Optional#TRUE if token is optional, else Optional#FALSE. - */ - public void define(String name, TokenType type, boolean optional) { - TokenDefinition spec = new TokenDefinition(name, type, null, currentOrdinal, optional); - optionalCnt = optional ? optionalCnt + 1 : optionalCnt; - currentOrdinal++; - tokens.add(spec); - } - - /** - * Method allows users to specify a field as optional in combination to the - * name of the token, the type of token and also the ability to specify a label - * for the usage. - * - * @param name of the token in the definition of a directive. - * @param type of the token to be extracted. - * @param label label that modifies the usage for this field. - * @param optional Optional#TRUE if token is optional, else Optional#FALSE. - */ - public void define(String name, TokenType type, String label, boolean optional) { - TokenDefinition spec = new TokenDefinition(name, type, label, currentOrdinal, optional); - optionalCnt = optional ? optionalCnt + 1 : optionalCnt; - currentOrdinal++; - tokens.add(spec); - } - - /** - * @return a instance of UsageDefinition object. - */ - public UsageDefinition build() { - return new UsageDefinition(directive, optionalCnt, tokens); - } - } -} diff --git a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/package-info.java b/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/package-info.java deleted file mode 100644 index 0ea40d6f3..000000000 --- a/wrangler-api/src/main/java/io/cdap/wrangler/api/parser/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * 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. - */ - -/** - * APIs for parsing directives. - */ -package io.cdap.wrangler.api.parser; diff --git a/wrangler-api/src/test/java/io/cdap/wrangler/api/parser/UsageDefinitionTest.java b/wrangler-api/src/test/java/io/cdap/wrangler/api/parser/UsageDefinitionTest.java deleted file mode 100644 index 8141d57bf..000000000 --- a/wrangler-api/src/test/java/io/cdap/wrangler/api/parser/UsageDefinitionTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.api.parser; - -import io.cdap.wrangler.api.Optional; -import org.junit.Assert; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; - -/** - * Tests {@link UsageDefinition} - */ -public class UsageDefinitionTest { - - @Test - public void testUsageDefinitionCreation() { - UsageDefinition.Builder builder = UsageDefinition.builder("test"); - builder.define("fname", TokenType.COLUMN_NAME); - builder.define("lname", TokenType.COLUMN_NAME, Optional.TRUE); - builder.define("condition", TokenType.EXPRESSION, Optional.TRUE); - UsageDefinition definition = builder.build(); - Assert.assertEquals("test", definition.getDirectiveName()); - } - - @Test - public void testUsageStringCreation() { - List usages = new ArrayList<>(); - - UsageDefinition.Builder builder = UsageDefinition.builder("rename"); - builder.define("source", TokenType.COLUMN_NAME); - builder.define("destination", TokenType.COLUMN_NAME); - String usage = builder.build().toString(); - Assert.assertEquals("rename :source :destination", usage); - usages.add(usage); - - builder = UsageDefinition.builder("parse-as-csv"); - builder.define("col", TokenType.COLUMN_NAME); - builder.define("delimiter", TokenType.TEXT, Optional.TRUE); - builder.define("header", TokenType.BOOLEAN, Optional.TRUE); - usage = builder.build().toString(); - Assert.assertEquals("parse-as-csv :col ['delimiter'] [header (true/false)]", usage); - usages.add(usage); - - builder = UsageDefinition.builder("send-to-error"); - builder.define("expr", TokenType.EXPRESSION); - builder.define("metric", TokenType.TEXT, Optional.TRUE); - usage = builder.build().toString(); - Assert.assertEquals("send-to-error exp:{} ['metric']", usage); - usages.add(usage); - - builder = UsageDefinition.builder("set-columns"); - builder.define("cols", TokenType.COLUMN_NAME_LIST); - usage = builder.build().toString(); - Assert.assertEquals("set-columns :cols [,:cols ]*", usage); - usages.add(usage); - - Assert.assertTrue(true); - } - -} diff --git a/wrangler-core/pom.xml b/wrangler-core/pom.xml deleted file mode 100644 index e2dcb3c2b..000000000 --- a/wrangler-core/pom.xml +++ /dev/null @@ -1,364 +0,0 @@ - - - - - wrangler - io.cdap.wrangler - 4.12.0-SNAPSHOT - - 4.0.0 - - wrangler-core - Wrangler Core - - - - jitpack.io - https://jitpack.io - - - - - - - - - com.google.guava - guava - ${guava.version} - - - io.cdap.wrangler - wrangler-api - ${project.version} - - - io.cdap.wrangler - wrangler-proto - ${project.version} - - - com.google.protobuf - protobuf-java - ${protobuf.version} - - - io.cdap.cdap - cdap-api - ${cdap.version} - provided - - - io.cdap.cdap - cdap-etl-api - ${cdap.version} - provided - - - - - - io.cdap.cdap - cdap-unit-test - ${cdap.version} - test - - - org.apache.hive - hive-exec - - - log4j - log4j - - - - - pl.pragmatists - JUnitParams - 1.1.1 - test - - - org.powermock - powermock-module-junit4 - 2.0.2 - test - - - org.powermock - powermock-api-mockito2 - 2.0.2 - test - - - - - - com.github.everit-org.json-schema - org.everit.json.schema - 1.11.1 - - - io.dataapps.chlorine - chlorine-finder - ${chlorine.version} - - - com.github.mpkorstanje - simmetrics-core - ${simmetrics.version} - - - commons-io - commons-io - ${commons-io.version} - - - com.github.filosganga - geogson-core - ${geogson.version} - - - commons-validator - commons-validator - ${commons.validator.version} - - - io.netty - netty-all - ${netty.version} - test - - - io.cdap.http - netty-http - ${netty-http.version} - test - - - com.joestelmach - natty - ${natty.version} - - - nl.basjes.parse.httpdlog - httpdlog-parser - ${httpdlog-parser.version} - - - joda-time - joda-time - ${joda-time.version} - - - com.github.rholder - guava-retrying - ${guava.retrying.version} - - - com.esotericsoftware - kryo - 4.0.2 - - - org.antlr - antlr4 - ${antlr4.version} - compile - - - org.json - json - 20180813 - - - org.unix4j - unix4j-command - ${unix4j.version} - - - com.jayway.jsonpath - json-path - ${json-path.version} - - - org.reflections - reflections - ${reflections.version} - - - - - - org.apache.poi - poi - ${poi.version} - - - org.apache.poi - poi-ooxml - ${poi.version} - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - org.apache.commons - commons-jexl3 - ${commons-jexl.version} - - - commons-logging - commons-logging - - - - - org.apache.httpcomponents - httpclient - ${httpclient.version} - - - org.apache.commons - commons-csv - ${commons-csv.version} - - - org.apache.avro - avro - ${avro.version} - - - org.bouncycastle - bcprov-jdk15on - ${bouncycastle.version} - - - org.apache.commons - commons-math3 - ${commons-math3.version} - - - - - - ca.uhn.hapi - hapi-base - ${hl7.version} - - - - ca.uhn.hapi - hapi-structures-v21 - ${hl7.version} - - - ca.uhn.hapi - hapi-structures-v22 - ${hl7.version} - - - ca.uhn.hapi - hapi-structures-v23 - ${hl7.version} - - - ca.uhn.hapi - hapi-structures-v231 - ${hl7.version} - - - ca.uhn.hapi - hapi-structures-v24 - ${hl7.version} - - - ca.uhn.hapi - hapi-structures-v25 - ${hl7.version} - - - ca.uhn.hapi - hapi-structures-v251 - ${hl7.version} - - - ca.uhn.hapi - hapi-structures-v26 - ${hl7.version} - - - io.cdap.cdap - cdap-system-app-api - ${cdap.version} - - - - - - - - src/main/resources - true - - - - - org.antlr - antlr4-maven-plugin - ${antlr4-maven-plugin.version} - - true - - - - - antlr4 - - - - - - org.codehaus.mojo - buildnumber-maven-plugin - 1.0 - - - generate-resources - - create - - - - - true - false - false - {0,date,yyyy-MM-dd-HH:mm:ss}_{1} - - timestamp - ${user.name} - - - - - - - diff --git a/wrangler-core/src/main/antlr4/io/cdap/wrangler/parser/Directives.g4 b/wrangler-core/src/main/antlr4/io/cdap/wrangler/parser/Directives.g4 deleted file mode 100644 index 7c517ed6a..000000000 --- a/wrangler-core/src/main/antlr4/io/cdap/wrangler/parser/Directives.g4 +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * 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. - */ - -grammar Directives; - -options { - language = Java; -} - -@lexer::header { -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * 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. - */ -} - -/** - * Parser Grammar for recognizing tokens and constructs of the directives language. - */ -recipe - : statements EOF - ; - -statements - : ( Comment | macro | directive ';' | pragma ';' | ifStatement)* - ; - -directive - : command - ( codeblock - | identifier - | macro - | text - | number - | bool - | column - | colList - | numberList - | boolList - | stringList - | numberRanges - | properties - )*? - ; - -ifStatement - : ifStat elseIfStat* elseStat? '}' - ; - -ifStat - : 'if' expression '{' statements - ; - -elseIfStat - : '}' 'else' 'if' expression '{' statements - ; - -elseStat - : '}' 'else' '{' statements - ; - -expression - : '(' (~'(' | expression)* ')' - ; - -forStatement - : 'for' '(' Identifier '=' expression ';' expression ';' expression ')' '{' statements '}' - ; - -macro - : Dollar OBrace (~OBrace | macro | Macro)*? CBrace - ; - -pragma - : '#pragma' (pragmaLoadDirective | pragmaVersion) - ; - -pragmaLoadDirective - : 'load-directives' identifierList - ; - -pragmaVersion - : 'version' Number - ; - -codeblock - : 'exp' Space* ':' condition - ; - -identifier - : Identifier - ; - -properties - : 'prop' ':' OBrace (propertyList)+ CBrace - | 'prop' ':' OBrace OBrace (propertyList)+ CBrace { notifyErrorListeners("Too many start paranthesis"); } - | 'prop' ':' OBrace (propertyList)+ CBrace CBrace { notifyErrorListeners("Too many start paranthesis"); } - | 'prop' ':' (propertyList)+ CBrace { notifyErrorListeners("Missing opening brace"); } - | 'prop' ':' OBrace (propertyList)+ { notifyErrorListeners("Missing closing brace"); } - ; - -propertyList - : property (',' property)* - ; - -property - : Identifier '=' ( text | number | bool ) - ; - -numberRanges - : numberRange ( ',' numberRange)* - ; - -numberRange - : Number ':' Number '=' value - ; - -value - : String | Number | Column | Bool - ; - -ecommand - : '!' Identifier - ; - -config - : Identifier - ; - -column - : Column - ; - -text - : String - ; - -number - : Number - ; - -bool - : Bool - ; - -condition - : OBrace (~CBrace | condition)* CBrace - ; - -command - : Identifier - ; - -colList - : Column (',' Column)+ - ; - -numberList - : Number (',' Number)+ - ; - -boolList - : Bool (',' Bool)+ - ; - -stringList - : String (',' String)+ - ; - -identifierList - : Identifier (',' Identifier)* - ; - - -/* - * Following are the Lexer Rules used for tokenizing the recipe. - */ -OBrace : '{'; -CBrace : '}'; -SColon : ';'; -Or : '||'; -And : '&&'; -Equals : '=='; -NEquals : '!='; -GTEquals : '>='; -LTEquals : '<='; -Match : '=~'; -NotMatch : '!~'; -QuestionColon : '?:'; -StartsWith : '=^'; -NotStartsWith : '!^'; -EndsWith : '=$'; -NotEndsWith : '!$'; -PlusEqual : '+='; -SubEqual : '-='; -MulEqual : '*='; -DivEqual : '/='; -PerEqual : '%='; -AndEqual : '&='; -OrEqual : '|='; -XOREqual : '^='; -Pow : '^'; -External : '!'; -GT : '>'; -LT : '<'; -Add : '+'; -Subtract : '-'; -Multiply : '*'; -Divide : '/'; -Modulus : '%'; -OBracket : '['; -CBracket : ']'; -OParen : '('; -CParen : ')'; -Assign : '='; -Comma : ','; -QMark : '?'; -Colon : ':'; -Dot : '.'; -At : '@'; -Pipe : '|'; -BackSlash: '\\'; -Dollar : '$'; -Tilde : '~'; - - -Bool - : 'true' - | 'false' - ; - -Number - : Int ('.' Digit*)? - ; - -Identifier - : [a-zA-Z_\-] [a-zA-Z_0-9\-]* - ; - -Macro - : [a-zA-Z_] [a-zA-Z_0-9]* - ; - -Column - : ':' [a-zA-Z_\-] [:a-zA-Z_0-9\-]* - ; - -String - : '\'' ( EscapeSequence | ~('\'') )* '\'' - | '"' ( EscapeSequence | ~('"') )* '"' - ; - -EscapeSequence - : '\\' ('b'|'t'|'n'|'f'|'r'|'"'|'\''|'\\') - | UnicodeEscape - | OctalEscape - ; - -fragment -OctalEscape - : '\\' ('0'..'3') ('0'..'7') ('0'..'7') - | '\\' ('0'..'7') ('0'..'7') - | '\\' ('0'..'7') - ; - -fragment -UnicodeEscape - : '\\' 'u' HexDigit HexDigit HexDigit HexDigit - ; - -fragment - HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ; - -Comment - : ('//' ~[\r\n]* | '/*' .*? '*/' | '--' ~[\r\n]* ) -> skip - ; - -Space - : [ \t\r\n\u000C]+ -> skip - ; - -fragment Int - : '-'? [1-9] Digit* [L]* - | '0' - ; - -fragment Digit - : [0-9] - ; diff --git a/wrangler-core/src/main/java/io/cdap/directives/aggregates/DefaultTransientStore.java b/wrangler-core/src/main/java/io/cdap/directives/aggregates/DefaultTransientStore.java deleted file mode 100644 index c515c868d..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/aggregates/DefaultTransientStore.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.aggregates; - -import io.cdap.wrangler.api.TransientStore; -import io.cdap.wrangler.api.TransientVariableScope; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * This class implements a transient store interface for storing variables - * that can be set within a step and are available across all the steps when - * the record is being processed. - * - * The life-time of variables set in this store is within a boundary of record - * being processed. - */ -public class DefaultTransientStore implements TransientStore { - private final Map global = new HashMap<>(); - private final Map local = new HashMap<>(); - - /** - * Increments a value of the variable. - * - * @param name of the variable. - * @param value associated with the variable. - */ - @Override - public void increment(TransientVariableScope scope, String name, long value) { - if (scope == TransientVariableScope.GLOBAL) { - increment(global, name, value); - } else if (scope == TransientVariableScope.LOCAL) { - increment(local, name, value); - } - } - - private void increment(Map variables, String name, long value) { - Long count = null; - if (variables.containsKey(name)) { - count = (Long) variables.get(name); - } - if (count == null) { - count = 0L; - } - variables.put(name, count + value); - } - - /** - * Set of all the variables. - * - * @return list of all the variables. - */ - @Override - public Set getVariables() { - Set vars = new HashSet<>(global.keySet()); - vars.addAll(local.keySet()); - return vars; - } - - /** - * Resets the state of this store. - */ - @Override - public void reset(TransientVariableScope scope) { - if (scope == TransientVariableScope.GLOBAL) { - global.clear(); - } else if (scope == TransientVariableScope.LOCAL) { - local.clear(); - } - } - - /** - * A value associated with the variable in the transient store. - * - * @param name of the variable to be retrieved. - * @return instance of object of type T. - */ - @Override - public T get(String name) { - if (global.containsKey(name)) { - return (T) global.get(name); - } - return (T) local.get(name); - } - - /** - * Sets the value of the object for variable named 'name'. - * - * @param name of the variable for which the value needs to be set. - * @param value of the variable. - */ - @Override - public void set(TransientVariableScope scope, String name, Object value) { - if (scope == TransientVariableScope.GLOBAL) { - global.put(name, value); - } else if (scope == TransientVariableScope.LOCAL) { - local.put(name, value); - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/aggregates/IncrementTransientVariable.java b/wrangler-core/src/main/java/io/cdap/directives/aggregates/IncrementTransientVariable.java deleted file mode 100644 index fbe89793d..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/aggregates/IncrementTransientVariable.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.aggregates; - -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.EntityCountMetric; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.TransientVariableScope; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.parser.Expression; -import io.cdap.wrangler.api.parser.Identifier; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.expression.EL; -import io.cdap.wrangler.expression.ELContext; -import io.cdap.wrangler.expression.ELException; -import io.cdap.wrangler.expression.ELResult; - -import java.util.List; - -import static io.cdap.wrangler.metrics.JexlCategoryMetricUtils.getJexlCategoryMetric; - -/** - * A directive for incrementing the a transient variable based on conditions. - */ -@Plugin(type = Directive.TYPE) -@Name(IncrementTransientVariable.NAME) -@Categories(categories = { "transient"}) -@Description("Wrangler - A interactive tool for data cleansing and transformation.") -public class IncrementTransientVariable implements Directive { - public static final String NAME = "increment-variable"; - private String variable; - private long incrementBy; - private EL el; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("variable", TokenType.IDENTIFIER); - builder.define("value", TokenType.NUMERIC); - builder.define("condition", TokenType.EXPRESSION); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.variable = ((Identifier) args.value("variable")).value(); - this.incrementBy = ((Numeric) args.value("value")).value().longValue(); - String expression = ((Expression) args.value("condition")).value(); - try { - el = EL.compile(expression); - } catch (ELException e) { - throw new DirectiveParseException(NAME, e.getMessage(), e); - } - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - // Move the fields from the row into the context. - ELContext ctx = new ELContext(); - ctx.set("this", row); - for (String var : el.variables()) { - ctx.set(var, row.getValue(var)); - } - - // Transient variables are added. - if (context != null) { - for (String variable : context.getTransientStore().getVariables()) { - ctx.set(variable, context.getTransientStore().get(variable)); - } - } - - // Execution of the script / expression based on the row data - // mapped into context. - try { - ELResult result = el.execute(ctx); - if (result.getBoolean()) { - context.getTransientStore().increment(TransientVariableScope.GLOBAL, variable, incrementBy); - } - } catch (ELException e) { - throw new DirectiveExecutionException(NAME, e.getMessage(), e); - } - } - return rows; - } - - public void destroy() { - // no-op - } - - public List getCountMetrics() { - EntityCountMetric jexlCategoryMetric = getJexlCategoryMetric(el.getScriptParsedText()); - return (jexlCategoryMetric == null) ? null : ImmutableList.of(jexlCategoryMetric); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/aggregates/SetTransientVariable.java b/wrangler-core/src/main/java/io/cdap/directives/aggregates/SetTransientVariable.java deleted file mode 100644 index becf12cc6..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/aggregates/SetTransientVariable.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.aggregates; - -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.EntityCountMetric; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.TransientVariableScope; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.parser.Expression; -import io.cdap.wrangler.api.parser.Identifier; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.expression.EL; -import io.cdap.wrangler.expression.ELContext; -import io.cdap.wrangler.expression.ELException; -import io.cdap.wrangler.expression.ELResult; - -import java.util.List; - -import static io.cdap.wrangler.metrics.JexlCategoryMetricUtils.getJexlCategoryMetric; - -/** - * A directive that defines a transient variable who's life-expectancy is only within the record. - * - * The value set as transient variable is available to all the directives after that. But, it's - * not available beyond the input record. - */ -@Plugin(type = Directive.TYPE) -@Name(SetTransientVariable.NAME) -@Categories(categories = { "transient"}) -@Description("Sets the value for a transient variable for the record being processed.") -public class SetTransientVariable implements Directive { - public static final String NAME = "set-variable"; - private EL el; - private String variable; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("variable", TokenType.IDENTIFIER); - builder.define("condition", TokenType.EXPRESSION); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.variable = ((Identifier) args.value("variable")).value(); - String expression = ((Expression) args.value("condition")).value(); - try { - el = EL.compile(expression); - } catch (ELException e) { - throw new DirectiveParseException(NAME, e.getMessage(), e); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - // Move the fields from the row into the context. - ELContext ctx = new ELContext(context, el, row); - - // Execution of the script / expression based on the row data - // mapped into context. - try { - ELResult result = el.execute(ctx); - if (context != null) { - context.getTransientStore().set(TransientVariableScope.GLOBAL, variable, result.getObject()); - } - } catch (ELException e) { - throw new DirectiveExecutionException(NAME, e.getMessage(), e); - } - } - return rows; - } - - @Override - public List getCountMetrics() { - EntityCountMetric jexlCategoryMetric = getJexlCategoryMetric(el.getScriptParsedText()); - return (jexlCategoryMetric == null) ? null : ImmutableList.of(jexlCategoryMetric); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/ChangeColCaseNames.java b/wrangler-core/src/main/java/io/cdap/directives/column/ChangeColCaseNames.java deleted file mode 100644 index 9c4f6c981..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/ChangeColCaseNames.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.SchemaResolutionContext; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.Identifier; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * This class ChangeColCaseNames converts the case of the columns - * to either lower-case or uppercase. - */ -@Plugin(type = Directive.TYPE) -@Name(ChangeColCaseNames.NAME) -@Categories(categories = { "column"}) -@Description("Changes the case of column names to either lowercase or uppercase.") -public class ChangeColCaseNames implements Directive, Lineage { - public static final String NAME = "change-column-case"; - private boolean toLower; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("case", TokenType.IDENTIFIER, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - toLower = true; - if (args.contains("case")) { - Identifier identifier = args.value("case"); - String casing = identifier.value(); - if (casing.equalsIgnoreCase("upper") || casing.equalsIgnoreCase("uppercase")) { - toLower = false; - } - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - for (int i = 0; i < row.width(); ++i) { - String name = row.getColumn(i); - if (toLower) { - row.setColumn(i, name.toLowerCase()); - } else { - row.setColumn(i, name.toUpperCase()); - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Changed all column names to ", toLower ? "'lowercase'" : "'uppercase'") - .all(Many.of()) - .build(); - } - - @Override - public Schema getOutputSchema(SchemaResolutionContext context) { - Schema inputSchema = context.getInputSchema(); - return Schema.recordOf( - "outputSchema", - inputSchema.getFields().stream() - .map( - field -> { - String fieldName = toLower ? field.getName().toLowerCase() : field.getName().toUpperCase(); - return Schema.Field.of(fieldName, field.getSchema()); - } - ) - .collect(Collectors.toList()) - ); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/CleanseColumnNames.java b/wrangler-core/src/main/java/io/cdap/directives/column/CleanseColumnNames.java deleted file mode 100644 index dbfff79c0..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/CleanseColumnNames.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.SchemaResolutionContext; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * A directive for cleanses columns names. - * - *

- *

    - *
  • Lowercases the column name
  • - *
  • Trims space
  • - *
  • Replace characters other than [A-Z][a-z][_] with empty string.
  • - *
- *

- */ -@Plugin(type = Directive.TYPE) -@Name(CleanseColumnNames.NAME) -@Categories(categories = { "column"}) -@Description("Sanatizes column names: trims, lowercases, and replaces all but [A-Z][a-z][0-9]_." + - "with an underscore '_'.") -public final class CleanseColumnNames implements Directive, Lineage { - public static final String NAME = "cleanse-column-names"; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - // no-op. - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - for (int i = 0; i < row.width(); ++i) { - String column = row.getColumn(i); - row.setColumn(i, cleanseColumnName(column)); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Sanitized all column names: trimmed sides, lower-cased, " + - "and replaced all but [A-Z][a-z][0-9]_ characters") - .all(Many.of()) - .build(); - } - - @Override - public Schema getOutputSchema(SchemaResolutionContext context) { - Schema inputSchema = context.getInputSchema(); - return Schema.recordOf( - "outputSchema", - inputSchema.getFields().stream() - .map( - field -> Schema.Field.of(cleanseColumnName(field.getName()), field.getSchema()) - ) - .collect(Collectors.toList()) - ); - } - - private String cleanseColumnName(String columnName) { - // Trims - columnName = columnName.trim(); - // Lower case columns - columnName = columnName.toLowerCase(); - // Filtering unwanted characters - columnName = columnName.replaceAll("[^a-zA-Z0-9_]", "_"); - return columnName; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/ColumnsReplace.java b/wrangler-core/src/main/java/io/cdap/directives/column/ColumnsReplace.java deleted file mode 100644 index 0ab05c179..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/ColumnsReplace.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.SchemaResolutionContext; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.unix4j.Unix4j; -import org.unix4j.builder.Unix4jCommandBuilder; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * Applies a sed expression on the column names. - * - * This directive helps clearing out the columns names to make it more readable. - */ -@Plugin(type = "directives") -@Name(ColumnsReplace.NAME) -@Categories(categories = { "column"}) -@Description("Modifies column names in bulk using a sed-format expression.") -public class ColumnsReplace implements Directive, Lineage { - public static final String NAME = "columns-replace"; - private String sed; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("sed-expression", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - sed = ((Text) args.value("sed-expression")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - for (int i = 0; i < row.width(); ++i) { - String name = row.getColumn(i); - try { - row.setColumn(i, getSedReplacedColumnName(name)); - } catch (IllegalArgumentException e) { - throw new DirectiveExecutionException(NAME, e.getMessage(), e); - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Reformatted all columns using expression '%s'", sed) - .all(Many.of()) - .build(); - } - - @Override - public Schema getOutputSchema(SchemaResolutionContext context) { - Schema inputSchema = context.getInputSchema(); - return Schema.recordOf( - "outputSchema", - inputSchema.getFields().stream() - .map( - field -> Schema.Field.of(getSedReplacedColumnName(field.getName()), field.getSchema()) - ) - .collect(Collectors.toList()) - ); - } - - private String getSedReplacedColumnName(String colName) { - Unix4jCommandBuilder builder = Unix4j.echo(colName).sed(sed); - return builder.toStringResult(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/Copy.java b/wrangler-core/src/main/java/io/cdap/directives/column/Copy.java deleted file mode 100644 index 80ec25a9e..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/Copy.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.SchemaResolutionContext; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.List; - -/** - * A directive for copying value of one column to another. - */ -@Plugin(type = Directive.TYPE) -@Name(Copy.NAME) -@Categories(categories = { "column"}) -@Description("Copies values from a source column into a destination column.") -public class Copy implements Directive, Lineage { - public static final String NAME = "copy"; - private ColumnName source; - private ColumnName destination; - private boolean force = false; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("source", TokenType.COLUMN_NAME); - builder.define("destination", TokenType.COLUMN_NAME); - builder.define("force", TokenType.BOOLEAN, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.source = args.value("source"); - this.destination = args.value("destination"); - if (args.contains("force")) { - force = (boolean) args.value("force").value(); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int sidx = row.find(source.value()); - if (sidx == -1) { - throw new DirectiveExecutionException(NAME, String.format("Column '%s' does not exist.", source.value())); - } - - int didx = row.find(destination.value()); - // If source and destination are same, then it's a nop. - if (didx == sidx) { - continue; - } - - if (didx == -1) { - // if destination column doesn't exist then add it. - row.add(destination.value(), row.getValue(sidx)); - } else { - // if destination column exists, and force is set to false, then throw exception, else - // overwrite it. - if (!force) { - throw new DirectiveExecutionException( - NAME, String.format("Destination column '%s' already exists in the row. Use 'force' " + - "option to overwrite the column.", destination.value())); - } - row.setValue(didx, row.getValue(sidx)); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Copied value from column '%s' to '%s'", source.value(), destination.value()) - .conditional(source.value(), destination.value()) - .build(); - } - - @Override - public Schema getOutputSchema(SchemaResolutionContext context) { - Schema inputSchema = context.getInputSchema(); - List outputFields = new ArrayList<>(); - Schema sourceSchema = inputSchema.getField(source.value()).getSchema(); - boolean destinationExists = inputSchema.getField(destination.value()) != null; - - for (Schema.Field field : inputSchema.getFields()) { - if (force && field.getName().equals(destination.value())) { - outputFields.add(Schema.Field.of(destination.value(), sourceSchema)); - } else { - outputFields.add(field); - } - } - if (!destinationExists) { - outputFields.add(Schema.Field.of(destination.value(), sourceSchema)); - } - return Schema.recordOf("outputSchema", outputFields); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/CreateRecord.java b/wrangler-core/src/main/java/io/cdap/directives/column/CreateRecord.java deleted file mode 100644 index 2654f8730..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/CreateRecord.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * A directive that creates a record from columns - */ -@Plugin(type = Directive.TYPE) -@Name(CreateRecord.NAME) -@Categories(categories = {"column"}) -@Description("Creates Column of type Record .") -public class CreateRecord implements Directive, Lineage { - public static final String NAME = "create-record"; - private String targetColumn; - private String[] columns; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("target_column", TokenType.COLUMN_NAME); - builder.define("columns", TokenType.COLUMN_NAME_LIST); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - List cols = ((ColumnNameList) args.value("columns")).value(); - targetColumn = args.value("target_column").value().toString(); - columns = cols.toArray(new String[0]); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - - // Iterate through the rows. - for (Row row : rows) { - - // We create a new Row with values from the columns specified. - Row newRecord = new Row(); - for (String columnName : columns) { - Object columnValue = row.getValue(columnName); - // Only set value if column is set. - if (columnValue != null) { - newRecord.addOrSet(columnName, columnValue); - } - } - // Add column to existing row - Row newRow = new Row(row); - newRow.addOrSet(targetColumn, newRecord); - results.add(newRow); - - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Created column based on values in columns '%s''", Arrays.asList(columns)) - .relation(Many.columns(columns), targetColumn) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/Drop.java b/wrangler-core/src/main/java/io/cdap/directives/column/Drop.java deleted file mode 100644 index 2114ec2cf..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/Drop.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; - -/** - * This class Drop implements a directive that will drop - * the list of columns specified. - */ -@Plugin(type = Directive.TYPE) -@Name(Drop.NAME) -@Categories(categories = { "column"}) -@Description("Drop one or more columns.") -public class Drop implements Directive, Lineage { - public static final String NAME = "drop"; - - // Columns to be dropped. - private List columns; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME_LIST); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - ColumnNameList cols = args.value("column"); - columns = cols.value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException { - for (Row row : rows) { - for (String column : columns) { - int idx = row.find(column.trim()); - if (idx != -1) { - row.remove(idx); - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Dropped columns %s", columns) - .drop(Many.of(columns)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/FlattenRecord.java b/wrangler-core/src/main/java/io/cdap/directives/column/FlattenRecord.java deleted file mode 100644 index d543c08a1..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/FlattenRecord.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * A directive for splitting a RowType ("Record") Column into multiple Columns. - * - * The directive takes multiple columns of type "Row" as brings all its elements up a level. - * Topmost elements will be set under new columns prefixed with the name of the parent column - * followed by an underscore. Existing columns with the same name will be replaced by the new values. - * - * E.G - * - * Input: - * | A | - * {B: 1, C: 2} - * - * Directive - * flatten-record :A - * - * Output: - * | A | A_B | A_C | - * {B: 1, C:2} | 1 | 2 | - * - */ -@Plugin(type = Directive.TYPE) -@Name(FlattenRecord.NAME) -@Categories(categories = { "column"}) -@Description("Flattens a record into individual columns.") -public class FlattenRecord implements Directive { - public static final String NAME = "flatten-record"; - // Column on which to apply mask. - private String[] columns; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("columns", TokenType.COLUMN_NAME_LIST); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - List cols = ((ColumnNameList) args.value("columns")).value(); - columns = new String[cols.size()]; - columns = cols.toArray(columns); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - - for (Row row : rows) { - for (String column: columns) { - int idx = row.find(column); - if (idx == -1) { - continue; - } - Object object = row.getValue(idx); - - if (object == null) { - continue; - } - - if (!(object instanceof Row)) { - throw new DirectiveExecutionException( - NAME, - String.format("Column '%s' has invalid type '%s'. It should be of type 'Record'.", - column, object.getClass().getSimpleName())); - } - - Row rowColumns = (Row) object; - - String columnName; - for (Pair field : rowColumns.getFields()) { - columnName = String.format("%s_%s", column, field.getFirst()); - row.addOrSet(columnName, field.getSecond()); - } - } - results.add(row); - } - return results; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/Keep.java b/wrangler-core/src/main/java/io/cdap/directives/column/Keep.java deleted file mode 100644 index fbeb067cd..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/Keep.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * This class Keep implements a directive that - * opposite of {@link Drop} columns. Instead of dropping the - * columns specified, it keeps only those columns that are - * specified. - */ -@Plugin(type = Directive.TYPE) -@Name("keep") -@Categories(categories = { "column"}) -@Description("Keeps the specified columns and drops all others.") -public class Keep implements Directive, Lineage { - public static final String NAME = "keep"; - private final Set keep = new HashSet<>(); - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME_LIST); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - ColumnNameList cols = args.value("column"); - for (String col : cols.value()) { - keep.add(col); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = 0; - for (Pair v : row.getFields()) { - if (!keep.contains(v.getFirst())) { - row.remove(idx); - } else { - ++idx; - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - Mutation.Builder builder = Mutation.builder() - .readable("Removed all columns except '%s'", keep); - keep.forEach(column -> builder.relation(column, column)); - return builder.build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/Merge.java b/wrangler-core/src/main/java/io/cdap/directives/column/Merge.java deleted file mode 100644 index 0bcd212e3..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/Merge.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.apache.commons.lang3.StringEscapeUtils; - -import java.util.ArrayList; -import java.util.List; - -/** - * A directive for merging two columns and creates a third column. - */ -@Plugin(type = Directive.TYPE) -@Name(Merge.NAME) -@Categories(categories = { "column"}) -@Description("Merges values from two columns using a separator into a new column.") -public class Merge implements Directive, Lineage { - public static final String NAME = "merge"; - // Scope column1 - private String col1; - - // Scope column2 - private String col2; - - // Destination column name to be created. - private String dest; - - // Delimiter to be used to merge column. - private String delimiter; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column1", TokenType.COLUMN_NAME); - builder.define("column2", TokenType.COLUMN_NAME); - builder.define("destination", TokenType.COLUMN_NAME); - builder.define("separator", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.col1 = ((ColumnName) args.value("column1")).value(); - this.col2 = ((ColumnName) args.value("column2")).value(); - this.dest = ((ColumnName) args.value("destination")).value(); - this.delimiter = ((Text) args.value("separator")).value(); - delimiter = StringEscapeUtils.unescapeJava(delimiter); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - for (Row row : rows) { - int idx1 = row.find(col1); - int idx2 = row.find(col2); - if (idx1 != -1 && idx2 != -1) { - StringBuilder builder = new StringBuilder(); - builder.append(row.getValue(idx1)); - builder.append(delimiter); - builder.append(row.getValue(idx2)); - row.add(dest, builder.toString()); - } - results.add(row); - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Merged column '%s' and '%s' using delimiter '%s' into column '%s'", col1, col2, delimiter, dest) - .relation(Many.columns(col1, col2), Many.of(col1, col2, dest)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/Rename.java b/wrangler-core/src/main/java/io/cdap/directives/column/Rename.java deleted file mode 100644 index 0522e6792..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/Rename.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.SchemaResolutionContext; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.utils.ColumnConverter; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * A directive for renaming columns. - */ -@Plugin(type = Directive.TYPE) -@Name(Rename.NAME) -@Categories(categories = { "column"}) -@Description("Renames a column 'source' to 'target'") -public final class Rename implements Directive, Lineage { - public static final String NAME = "rename"; - private ColumnName source; - private ColumnName target; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("source", TokenType.COLUMN_NAME); - builder.define("target", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) { - source = args.value("source"); - if (args.contains("target")) { - target = args.value("target"); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - ColumnConverter.rename(NAME, row, source.value(), target.value()); - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Renamed column '%s' to '%s'", source.value(), target.value()) - .relation(source, target) - .build(); - } - - @Override - public Schema getOutputSchema(SchemaResolutionContext context) { - Schema inputSchema = context.getInputSchema(); - return Schema.recordOf( - "outputSchema", - inputSchema.getFields().stream() - .map( - field -> field.getName().equals(source.value()) ? Schema.Field.of(target.value(), field.getSchema()) : field - ) - .collect(Collectors.toList()) - ); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/SetHeader.java b/wrangler-core/src/main/java/io/cdap/directives/column/SetHeader.java deleted file mode 100644 index ce427d0f7..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/SetHeader.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.SchemaResolutionContext; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.List; - -/** - * A directive for setting the columns obtained from wrangling. - * - * This step will create a copy of the input {@link Row} and clears - * all previous column names and add new column names. - */ -@Plugin(type = "directives") -@Name(SetHeader.NAME) -@Categories(categories = { "column"}) -@Description("Sets the header of columns, in the order they are specified.") -public class SetHeader implements Directive, Lineage { - public static final String NAME = "set-headers"; - // Name of the columns represented in a {@link Row} - private List columns = new ArrayList<>(); - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME_LIST); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - columns = ((ColumnNameList) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException { - for (Row row : rows) { - int idx = 0; - for (String name : columns) { - if (idx < row.width()) { - row.setColumn(idx, name.trim()); - } - idx++; - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Set the new header as columns '%s'", columns) - .generate(Many.of(columns)) - .build(); - } - - @Override - public Schema getOutputSchema(SchemaResolutionContext context) { - List inputFields = context.getInputSchema().getFields(); - List outputFields = new ArrayList<>(); - for (int i = 0; i < columns.size() && i < inputFields.size(); i++) { - outputFields.add(Schema.Field.of(columns.get(i).trim(), inputFields.get(i).getSchema())); - } - // Leftover columns (not renamed) - for (int i = columns.size(); i < inputFields.size(); i++) { - outputFields.add(inputFields.get(i)); - } - return Schema.recordOf("outputSchema", outputFields); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/SetType.java b/wrangler-core/src/main/java/io/cdap/directives/column/SetType.java deleted file mode 100644 index 985a6719a..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/SetType.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.data.schema.Schema.LogicalType; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.SchemaResolutionContext; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Identifier; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.utils.ColumnConverter; - -import java.math.RoundingMode; -import java.util.HashMap; -import java.util.List; -import java.util.stream.Collectors; - -/** - * A Wrangler step for converting data type of column - * Accepted types are: int, short, long, double, float, string, boolean and bytes - * When decimal type is selected, can also specify the scale, precision and rounding mode - */ -@Plugin(type = "directives") -@Name(SetType.NAME) -@Categories(categories = {"column"}) -@Description("Converting data type of a column. Optional arguments scale, precision and " - + "rounding-mode are used only when type is decimal.") -public final class SetType implements Directive, Lineage { - public static final String NAME = "set-type"; - - private String col; - private String type; - private Integer scale; - private RoundingMode roundingMode; - private Integer precision; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("type", TokenType.IDENTIFIER); - builder.define("scale", TokenType.NUMERIC, Optional.TRUE); - builder.define("rounding-mode", TokenType.TEXT, Optional.TRUE); - builder.define("precision", TokenType.PROPERTIES, "prop:{precision=}", Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - col = ((ColumnName) args.value("column")).value(); - type = ((Identifier) args.value("type")).value(); - if (type.equalsIgnoreCase("decimal")) { - precision = args.contains("precision") ? (Integer) ((HashMap) args. - value("precision").value()).get("precision").value().intValue() : null; - if (precision != null && precision < 1) { - throw new DirectiveParseException("precision cannot be less than 1"); - } - scale = args.contains("scale") ? ((Numeric) args.value("scale")).value().intValue() : null; - if (scale == null && precision == null && args.contains("rounding-mode")) { - throw new DirectiveParseException("'rounding-mode' can only be specified when a 'scale' or 'precision' is set"); - } - try { - roundingMode = args.contains("rounding-mode") ? - RoundingMode.valueOf(((Text) args.value("rounding-mode")).value()) : - (scale == null && precision == null ? RoundingMode.UNNECESSARY : RoundingMode.HALF_EVEN); - } catch (IllegalArgumentException e) { - throw new DirectiveParseException(String.format( - "Specified rounding-mode '%s' is not a valid Java rounding mode", args.value("rounding-mode").value()), e); - } - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - ColumnConverter.convertType(NAME, row, col, type, scale, precision, roundingMode); - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Changed the column '%s' to type '%s'", col, type) - .relation(col, col) - .build(); - } - - @Override - public Schema getOutputSchema(SchemaResolutionContext context) { - Schema inputSchema = context.getInputSchema(); - return Schema.recordOf( - "outputSchema", - inputSchema.getFields().stream() - .map( - field -> { - try { - if (field.getName().equals(col)) { - Integer outputScale = scale; - Integer outputPrecision = precision; - Schema fieldSchema = field.getSchema().getNonNullable(); - Pair scaleAndPrecision = getPrecisionAndScale(fieldSchema); - Integer inputSchemaScale = scaleAndPrecision.getSecond(); - Integer inputSchemaPrecision = scaleAndPrecision.getFirst(); - - if (scale == null && precision == null) { - outputScale = inputSchemaScale; - outputPrecision = inputSchemaPrecision; - } else if (scale == null && inputSchemaScale != null) { - if (precision - inputSchemaScale < 1) { - throw new DirectiveParseException(String.format( - "Cannot set scale as '%s' and precision as '%s' when " - + "given precision - scale is less than 1 ", inputSchemaScale, - precision)); - } - outputScale = inputSchemaScale; - outputPrecision = precision; - - } else if (precision == null && inputSchemaPrecision != null) { - if (inputSchemaPrecision - scale < 1) { - throw new DirectiveParseException(String.format( - "Cannot set scale as '%s' and precision as '%s' when " - + "given precision - scale is less than 1 ", scale, - inputSchemaPrecision)); - } - outputScale = scale; - outputPrecision = inputSchemaPrecision; - } - return Schema.Field.of(col, ColumnConverter.getSchemaForType(type, - outputScale, outputPrecision)); - } - return field; - } catch (DirectiveParseException e) { - throw new RuntimeException(e); - } - } - ) - .collect(Collectors.toList()) - ); - } - - /** - * extracts precision and scale from schema string - */ - public static Pair getPrecisionAndScale(Schema fieldSchema) { - Integer precision = null; - Integer scale = null; - if (fieldSchema.getLogicalType() == LogicalType.DECIMAL) { - precision = fieldSchema.getPrecision(); - scale = fieldSchema.getScale(); - } - return new Pair(precision, scale); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/SplitToColumns.java b/wrangler-core/src/main/java/io/cdap/directives/column/SplitToColumns.java deleted file mode 100644 index 6ade24fdb..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/SplitToColumns.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.List; - -/** - * A directive for splitting the columns into multiple columns. - */ -@Plugin(type = Directive.TYPE) -@Name(SplitToColumns.NAME) -@Categories(categories = { "column"}) -@Description("Splits a column into one or more columns around matches of the specified regular expression.") -public class SplitToColumns implements Directive, Lineage { - public static final String NAME = "split-to-columns"; - // Column on which to apply mask. - private String column; - - // Type of mask. - private String regex; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("regex", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - column = ((ColumnName) args.value("column")).value(); - regex = ((Text) args.value("regex")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String'.", column)); - } - - if (!(object instanceof String)) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String'.", - column, object.getClass().getSimpleName())); - } - - String[] lines = ((String) object).split(regex); - int i = 1; - for (String line : lines) { - row.add(String.format("%s_%d", column, i), line); - ++i; - } - results.add(row); - } - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Split the column '%s' with regex '%s'", column, regex) - .relation( - column, - Many.columns( - column, - String.format("%s_%d", column, 1), - String.format("%s_%d", column, 2), - String.format("%s_%d", column, 3), - String.format("%s_%d", column, 4), - String.format("%s_%d", column, 5), - String.format("%s_%d", column, 6), - String.format("%s_%d", column, 7), - String.format("%s_%d", column, 8), - String.format("%s_%d", column, 9), - String.format("%s_%d", column, 10))) - .build(); - } -} - diff --git a/wrangler-core/src/main/java/io/cdap/directives/column/Swap.java b/wrangler-core/src/main/java/io/cdap/directives/column/Swap.java deleted file mode 100644 index 7a94e0acc..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/column/Swap.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.SchemaResolutionContext; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * A directive for swapping the column names. - */ -@Plugin(type = Directive.TYPE) -@Name(Swap.NAME) -@Categories(categories = { "column"}) -@Description("Swaps the column names of two columns.") -public class Swap implements Directive, Lineage { - public static final String NAME = "swap"; - private String left; - private String right; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("left", TokenType.COLUMN_NAME); - builder.define("right", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - left = ((ColumnName) args.value("left")).value(); - right = ((ColumnName) args.value("right")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int sidx = row.find(left); - int didx = row.find(right); - - if (sidx == -1) { - throw new DirectiveExecutionException(NAME, String.format("Column '%s' does not exist.", left)); - } - - if (didx == -1) { - throw new DirectiveExecutionException(NAME, String.format("Column '%s' does not exist.", right)); - } - - row.setColumn(sidx, right); - row.setColumn(didx, left); - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Swapped columns '%s' and '%s'", left, right) - .relation(Many.of(left, right), Many.of(right, left)) - .build(); - } - - @Override - public Schema getOutputSchema(SchemaResolutionContext context) { - Schema inputSchema = context.getInputSchema(); - return Schema.recordOf( - "outputSchema", - inputSchema.getFields().stream() - .map( - field -> field.getName().equals(left) ? Schema.Field.of(right, field.getSchema()) : - (field.getName().equals(right) ? Schema.Field.of(left, field.getSchema()) : field) - ) - .collect(Collectors.toList()) - ); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/currency/FormatAsCurrency.java b/wrangler-core/src/main/java/io/cdap/directives/currency/FormatAsCurrency.java deleted file mode 100644 index 4df499557..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/currency/FormatAsCurrency.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.currency; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.apache.commons.lang3.LocaleUtils; - -import java.text.NumberFormat; -import java.util.List; -import java.util.Locale; - -/** - * A directive for taking difference in Dates. - */ -@Plugin(type = Directive.TYPE) -@Name(FormatAsCurrency.NAME) -@Categories(categories = {"currency"}) -@Description("Formats a number as currency using the locale specified. Default locale is en_US.") -public class FormatAsCurrency implements Directive, Lineage { - public static final String NAME = "format-as-currency"; - private String source; - private String destination; - private String locale; - private NumberFormat format; - private Locale lcl; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("source", TokenType.COLUMN_NAME); - builder.define("destination", TokenType.COLUMN_NAME); - builder.define("locale", TokenType.TEXT, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.source = ((ColumnName) args.value("source")).value(); - this.destination = ((ColumnName) args.value("destination")).value(); - - if (args.contains("locale")) { - this.locale = ((Text) args.value("locale")).value(); - } else { - this.locale = "en_US"; - } - - this.lcl = LocaleUtils.toLocale(locale); - this.format = NumberFormat.getCurrencyInstance(lcl); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - for (Row row : rows) { - int idx = row.find(source); - if (idx != -1) { - Object object = row.getValue(idx); - if (object == null || !(object instanceof Double)) { - continue; - } - Double value = (Double) object; - String format = this.format.format(value); - row.addOrSet(destination, format); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Formatted column '%s' to currency locale '%s' into '%s'", source, destination, locale) - .conditional(source, destination) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/currency/ParseAsCurrency.java b/wrangler-core/src/main/java/io/cdap/directives/currency/ParseAsCurrency.java deleted file mode 100644 index 1acf2f16e..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/currency/ParseAsCurrency.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.currency; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.apache.commons.lang3.LocaleUtils; - -import java.math.BigDecimal; -import java.text.DecimalFormat; -import java.text.NumberFormat; -import java.text.ParseException; -import java.util.List; -import java.util.Locale; - -/** - * A directive for taking difference in Dates. - */ -@Plugin(type = Directive.TYPE) -@Name(ParseAsCurrency.NAME) -@Categories(categories = {"currency"}) -@Description("Parses the string as a currency using specified locale. Default locale is en_US.") -public class ParseAsCurrency implements Directive, Lineage { - public static final String NAME = "parse-as-currency"; - private String source; - private String destination; - private String locale; - private NumberFormat fmt; - private Locale lcl; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("source", TokenType.COLUMN_NAME); - builder.define("destination", TokenType.COLUMN_NAME); - builder.define("locale", TokenType.TEXT, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.source = ((ColumnName) args.value("source")).value(); - this.destination = ((ColumnName) args.value("destination")).value(); - - if (args.contains("locale")) { - this.locale = ((Text) args.value("locale")).value(); - } else { - this.locale = "en_US"; - } - - this.lcl = LocaleUtils.toLocale(locale); - this.fmt = NumberFormat.getCurrencyInstance(lcl); - ((DecimalFormat) this.fmt).setParseBigDecimal(true); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - for (Row row : rows) { - int idx = row.find(source); - if (idx != -1) { - Object object = row.getValue(idx); - if (object == null || !(object instanceof String)) { - continue; - } - String value = (String) object; - if (value.trim().isEmpty()) { - continue; - } - try { - BigDecimal number = (BigDecimal) fmt.parse(value); - row.addOrSet(destination, number.doubleValue()); - } catch (ParseException e) { - throw new ErrorRowException(NAME, e.getMessage(), 1); - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as locale currency '%s' into column '%s'", source, locale, destination) - .conditional(source, destination) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/datamodel/DataModelMapColumn.java b/wrangler-core/src/main/java/io/cdap/directives/datamodel/DataModelMapColumn.java deleted file mode 100644 index 84b11b25d..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/datamodel/DataModelMapColumn.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.datamodel; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.datamodel.HTTPSchemaLoader; -import io.cdap.wrangler.utils.AvroSchemaGlossary; -import io.cdap.wrangler.utils.ColumnConverter; -import org.apache.avro.Schema; - -import java.math.RoundingMode; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * A directive for mapping a column to a field within a data model. Mapping entails - * changing the type of the column to match a target type and changing the name of - * the column to match a target field name. - */ -@Plugin(type = Directive.TYPE) -@Name(DataModelMapColumn.NAME) -@Categories(categories = {"data-quality"}) -@Description("Maps a column to target data model field so that matches the target name and type.") -public class DataModelMapColumn implements Directive, Lineage { - - public static final String NAME = "data-model-map-column"; - - private static final String DATA_MODEL = "data-model"; - private static final String DATA_MODEL_REVISION = "revision"; - private static final String MODEL = "model"; - private static final String TARGET_FIELD = "target-field"; - private static final String COLUMN = "column"; - private static final String DATA_MODEL_URL = "data-model-url"; - private static Map glossaryCache = new HashMap<>(); - - private String column; - private String targetFieldName; - private String targetFieldTypeName; - - // Used for testing purposes only. - static void setGlossary(String key, AvroSchemaGlossary glossary) { - glossaryCache.put(key, glossary); - } - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define(DATA_MODEL_URL, TokenType.TEXT); - builder.define(DATA_MODEL, TokenType.TEXT); - builder.define(DATA_MODEL_REVISION, TokenType.NUMERIC); - builder.define(MODEL, TokenType.TEXT); - builder.define(TARGET_FIELD, TokenType.TEXT); - builder.define(COLUMN, TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - String dataModelUrl = ((Text) args.value(DATA_MODEL_URL)).value(); - if (!glossaryCache.containsKey(dataModelUrl)) { - AvroSchemaGlossary glossary = new AvroSchemaGlossary(new HTTPSchemaLoader(dataModelUrl, "manifest.json")); - if (!glossary.configure()) { - throw new DirectiveParseException(NAME, String.format("Unable to load data models from %s.", dataModelUrl)); - } - glossaryCache.put(dataModelUrl, glossary); - } - - String dataModelName = ((Text) args.value(DATA_MODEL)).value(); - long revision = ((Numeric) args.value(DATA_MODEL_REVISION)).value().longValue(); - Schema dataModel = glossaryCache.get(dataModelUrl).get(dataModelName, revision); - if (dataModel == null) { - throw new DirectiveParseException(NAME, String - .format("Unable to find data model %s revision %d.", dataModelName, revision)); - } - - String modelName = ((Text) args.value(MODEL)).value(); - Schema.Field modelField = dataModel.getField(modelName); - if (modelField == null) { - throw new DirectiveParseException(NAME, String - .format("Model %s does not exist in data model %s.", modelName, dataModelName)); - } - Schema subSchema = modelField.schema(); - if (subSchema == null) { - throw new DirectiveParseException(NAME, String.format("Model %s has no schema.", modelField.name())); - } - - Schema model = subSchema.getTypes().stream() - .filter(s -> s.getType() == Schema.Type.RECORD) - .findFirst() - .orElse(null); - if (model == null) { - throw new DirectiveParseException(NAME, String.format("Model %s has no schema.", subSchema.getName())); - } - - String targetName = ((Text) args.value(TARGET_FIELD)).value(); - Schema.Field targetField = model.getField(targetName); - if (targetField == null) { - throw new DirectiveParseException(NAME, String - .format("Field %s does not exist in model %s.", targetName, model.getName())); - } - Schema type = targetField.schema().getTypes().stream() - .filter(s -> s.getType() != Schema.Type.NULL) - .findFirst() - .orElse(null); - if (type == null) { - throw new DirectiveParseException(NAME, - String - .format(" Field %s of model %s in data model %s is missing type information.", - targetField.name(), modelName, dataModelName)); - } - targetFieldName = targetField.name(); - targetFieldTypeName = type.getName(); - column = ((ColumnName) args.value(COLUMN)).value(); - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - ColumnConverter.convertType(NAME, row, column, targetFieldTypeName, null, null, RoundingMode.UNNECESSARY); - ColumnConverter.rename(NAME, row, column, targetFieldName); - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Mapped column '%s' to column name '%s' and type '%s'", column, targetFieldName, targetFieldTypeName) - .relation(column, targetFieldName) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/date/DiffDate.java b/wrangler-core/src/main/java/io/cdap/directives/date/DiffDate.java deleted file mode 100644 index 1361e8541..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/date/DiffDate.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.date; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.util.List; - -/** - * A directive for taking difference in Dates. - */ -@Plugin(type = Directive.TYPE) -@Name("diff-date") -@Categories(categories = {"date"}) -@Description("Calculates the difference in milliseconds between two Date objects." + - "Positive if earlier. Must use 'parse-as-date' or 'parse-as-simple-date' first.") -public class DiffDate implements Directive, Lineage { - public static final String NAME = "diff-date"; - private String column1; - private String column2; - private String destCol; - // Timestamp now UTC - private final ZonedDateTime date = ZonedDateTime.now(ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column1", TokenType.COLUMN_NAME); - builder.define("column2", TokenType.COLUMN_NAME); - builder.define("destination", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column1 = ((ColumnName) args.value("column1")).value(); - this.column2 = ((ColumnName) args.value("column2")).value(); - this.destCol = ((ColumnName) args.value("destination")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - ZonedDateTime date1 = getDate(row, column1); - ZonedDateTime date2 = getDate(row, column2); - if (date1 != null && date2 != null) { - row.addOrSet(destCol, date1.toInstant().toEpochMilli() - date2.toInstant().toEpochMilli()); - } else { - row.addOrSet(destCol, null); - } - } - return rows; - } - - private ZonedDateTime getDate(Row row, String colName) throws DirectiveExecutionException { - // If one of the column contains now, then we return - // the current date. - if (colName.equalsIgnoreCase("now")) { - return date; - } - - // Else attempt to find the column. - int idx = row.find(colName); - if (idx == -1) { - throw new DirectiveExecutionException(NAME, "Column '" + colName + "' does not exist."); - } - Object o = row.getValue(idx); - if (o == null || !(o instanceof ZonedDateTime)) { - return null; - } - return (ZonedDateTime) o; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Calculated difference between dates in column '%s' and '%s' and store in '%s'" - , column1, column2, destCol) - .relation(Many.columns(column1, column2), destCol) - .relation(column1, column1) - .relation(column2, column2) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/date/FormatDate.java b/wrangler-core/src/main/java/io/cdap/directives/date/FormatDate.java deleted file mode 100644 index f2f3bb0e9..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/date/FormatDate.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.date; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -/** - * A directive for managing date formats. - */ -@Plugin(type = Directive.TYPE) -@Name("format-date") -@Categories(categories = {"date", "format"}) -@Description("Formats a column using a date-time format. Use 'parse-as-date` beforehand.") -public class FormatDate implements Directive, Lineage { - public static final String NAME = "format-date"; - private String format; - private String column; - private DateTimeFormatter destinationFmt; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("format", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.format = ((Text) args.value("format")).value(); - this.destinationFmt = DateTimeFormatter.ofPattern(this.format); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - for (Row row : rows) { - Row dt = new Row(row); - int idx = dt.find(column); - - if (idx == -1) { - throw new DirectiveExecutionException(NAME, String.format("Column '%s' does not exist.", column)); - } - - Object object = row.getValue(idx); - - if (object != null) { - ZonedDateTime zonedDateTime; - if (object instanceof LocalDate) { - zonedDateTime = ((LocalDate) object).atStartOfDay(ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - } else if (object instanceof ZonedDateTime) { - zonedDateTime = (ZonedDateTime) object; - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. Apply 'parse-as-date' directive first.", - column, object.getClass().getSimpleName())); - } - - dt.setValue(idx, destinationFmt.format(zonedDateTime)); - } - - results.add(dt); - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Formatted date in column '%s' using format '%s'", column, format) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/datetime/CurrentDateTime.java b/wrangler-core/src/main/java/io/cdap/directives/datetime/CurrentDateTime.java deleted file mode 100644 index 7a2c32412..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/datetime/CurrentDateTime.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.directives.datetime; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.zone.ZoneRulesException; -import java.util.List; - -/** - * Directive for generating current datetime with the specified zone - */ -@Plugin(type = Directive.TYPE) -@Name("current-datetime") -@Categories(categories = {"datetime"}) -@Description("Generates current datetime using the given zone") -public class CurrentDateTime implements Directive, Lineage { - - public static final String NAME = "current-datetime"; - private static final String COLUMN = "column"; - private static final String ZONE = "timezone"; - private static final String UTC = "UTC"; - private String column; - private String zone; - private ZoneId zoneId; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define(COLUMN, TokenType.COLUMN_NAME); - builder.define(ZONE, TokenType.TEXT, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value(COLUMN)).value(); - if (args.value(ZONE) == null) { - this.zone = UTC; - this.zoneId = ZoneId.of(UTC); - return; - } - - this.zone = args.value(ZONE).value().toString(); - try { - this.zoneId = ZoneId.of(this.zone); - } catch (IllegalArgumentException | ZoneRulesException exception) { - throw new DirectiveParseException(NAME, String.format("Zone '%s' is invalid.", this.zone), exception); - } - } - - @Override - public List execute(List rows, ExecutorContext context) { - for (Row row : rows) { - row.addOrSet(column, LocalDateTime.now(zoneId)); - } - return rows; - } - - @Override - public void destroy() { - //no op - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Generated current datetime for column '%s' with zone '%s'", column, zone) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/datetime/DateTimeToTimeStamp.java b/wrangler-core/src/main/java/io/cdap/directives/datetime/DateTimeToTimeStamp.java deleted file mode 100644 index 7cc5954ea..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/datetime/DateTimeToTimeStamp.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.directives.datetime; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.time.zone.ZoneRulesException; -import java.util.List; - -/** - * Directive for converting a datetime column to timestamp with the specified zone - */ -@Plugin(type = Directive.TYPE) -@Name("datetime-to-timestamp") -@Categories(categories = {"datetime"}) -@Description("Converts a datetime column to timestamp") -public class DateTimeToTimeStamp implements Directive, Lineage { - - public static final String NAME = "datetime-to-timestamp"; - private static final String COLUMN = "column"; - private static final String ZONE = "timezone"; - private String column; - private String zone; - private ZoneId zoneId; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define(COLUMN, TokenType.COLUMN_NAME); - builder.define(ZONE, TokenType.TEXT, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value(COLUMN)).value(); - if (args.value(ZONE) == null) { - this.zoneId = ZoneId.of("UTC"); - this.zone = this.zoneId.toString(); - return; - } - this.zone = args.value(ZONE).value().toString(); - try { - this.zoneId = ZoneId.of(this.zone); - } catch (IllegalArgumentException | ZoneRulesException exception) { - throw new DirectiveParseException(NAME, String.format("Zone '%s' is invalid.", this.zone), exception); - } - } - - @Override - public List execute(List rows, ExecutorContext context) throws ErrorRowException { - for (Row row : rows) { - int idx = row.find(column); - if (idx == -1) { - continue; - } - Object value = row.getValue(idx); - // If the data in the cell is null, then skip this row. - if (value == null) { - continue; - } - - if (!(value instanceof LocalDateTime)) { - throw new ErrorRowException(NAME, String.format("Value %s for column %s expected to be datetime but found %s", - value.toString(), column, value.getClass().getSimpleName()), 2); - } - - ZonedDateTime zonedDateTime = ZonedDateTime.of((LocalDateTime) value, zoneId); - row.setValue(idx, zonedDateTime); - } - return rows; - } - - @Override - public void destroy() { - //no op - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Datetime column '%s' converted to timestamp with zone '%s'", column, zone) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/datetime/FormatDateTime.java b/wrangler-core/src/main/java/io/cdap/directives/datetime/FormatDateTime.java deleted file mode 100644 index 261ad3be1..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/datetime/FormatDateTime.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.directives.datetime; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.time.DateTimeException; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.List; - -/** - * Directive to format a datetime column as a string in the specified format - */ -@Plugin(type = Directive.TYPE) -@Name("format-datetime") -@Categories(categories = {"format", "datetime"}) -@Description("Formats a datetime value to a string using the given format") -public class FormatDateTime implements Directive, Lineage { - - public static final String NAME = "format-datetime"; - private static final String COLUMN = "column"; - private static final String FORMAT = "format"; - private String column; - private String format; - private DateTimeFormatter formatter; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define(COLUMN, TokenType.COLUMN_NAME); - builder.define(FORMAT, TokenType.TEXT, Optional.FALSE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value(COLUMN)).value(); - this.format = args.value(FORMAT).value().toString(); - try { - this.formatter = DateTimeFormatter.ofPattern(this.format); - } catch (IllegalArgumentException exception) { - throw new DirectiveParseException(NAME, String.format("Datetime format '%s' is invalid.", this.format), - exception); - } - } - - @Override - public List execute(List rows, ExecutorContext context) throws ErrorRowException { - for (Row row : rows) { - int idx = row.find(column); - if (idx == -1) { - continue; - } - Object value = row.getValue(idx); - // If the data in the cell is null, then skip this row. - if (value == null) { - continue; - } - - if (!(value instanceof LocalDateTime)) { - throw new ErrorRowException(NAME, String.format("Value %s for column %s expected to be datetime but found %s", - value.toString(), column, value.getClass().getSimpleName()), 2); - } - - try { - LocalDateTime localDateTime = (LocalDateTime) value; - row.setValue(idx, localDateTime.format(formatter)); - } catch (DateTimeException exception) { - throw new ErrorRowException(NAME, String.format("Error converting datetime %s to string with format %s", - value.toString(), format), 2, exception); - } - } - return rows; - } - - @Override - public void destroy() { - //no op - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Datetime column '%s' converted to string with format '%s'", column, format) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/datetime/TimestampToDateTime.java b/wrangler-core/src/main/java/io/cdap/directives/datetime/TimestampToDateTime.java deleted file mode 100644 index ac03f29b5..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/datetime/TimestampToDateTime.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.directives.datetime; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.time.LocalDateTime; -import java.time.ZonedDateTime; -import java.util.List; - -/** - * Directive for parsing a timestamp column as DateTime - */ -@Plugin(type = Directive.TYPE) -@Name("timestamp-to-datetime") -@Categories(categories = {"datetime"}) -@Description("Convert a timestamp column to datetime") -public class TimestampToDateTime implements Directive, Lineage { - - public static final String NAME = "timestamp-to-datetime"; - private static final String COLUMN = "column"; - private String column; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define(COLUMN, TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) { - this.column = ((ColumnName) args.value(COLUMN)).value(); - } - - @Override - public List execute(List rows, ExecutorContext context) throws ErrorRowException { - for (Row row : rows) { - int idx = row.find(column); - if (idx == -1) { - continue; - } - Object value = row.getValue(idx); - // If the data in the cell is null or is already Datetime , then skip this row. - if (value == null || value instanceof LocalDateTime) { - continue; - } - - if (!(value instanceof ZonedDateTime)) { - throw new ErrorRowException(NAME, String.format("Value %s for column %s expected to be timestamp but found %s", - value.toString(), column, value.getClass().getSimpleName()), 2); - } - - ZonedDateTime timestamp = (ZonedDateTime) value; - row.setValue(idx, timestamp.toLocalDateTime()); - } - return rows; - } - - @Override - public void destroy() { - //no op - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Converted column '%s' from timestamp to datetime", column) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/external/InvokeHttp.java b/wrangler-core/src/main/java/io/cdap/directives/external/InvokeHttp.java deleted file mode 100644 index 9df6d4b7d..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/external/InvokeHttp.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.external; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.StatusLine; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.HttpResponseException; -import org.apache.http.client.ResponseHandler; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.BasicHttpEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * A directives that invokes HTTP endpoint to merge the results back into dataset. - */ -@Plugin(type = Directive.TYPE) -@Name(InvokeHttp.NAME) -@Categories(categories = { "http"}) -@Description("Invokes an HTTP endpoint, passing columns as a JSON map (potentially slow).") -public class InvokeHttp implements Directive, Lineage { - public static final String NAME = "invoke-http"; - private String url; - private List columns; - private Gson gson; - private Map headers = new HashMap<>(); - - @Override - public UsageDefinition define() { - //invoke-http [,*]
[,
*] - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("url", TokenType.TEXT); - builder.define("column", TokenType.COLUMN_NAME_LIST); - builder.define("header", TokenType.TEXT, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - gson = new Gson(); - this.url = ((Text) args.value("url")).value(); - this.columns = ((ColumnNameList) args.value("column")).value(); - String hdrs = null; - if (args.contains("header")) { - hdrs = ((Text) args.value("header")).value(); - } - if (hdrs != null && !hdrs.isEmpty()) { - String[] parsedHeaders = hdrs.split(","); - for (String header : parsedHeaders) { - String[] components = header.split("="); - if (components.length != 2) { - throw new DirectiveParseException ( - NAME, String.format("Incorrect header '%s' specified. Header should be specified as 'key=value' " + - "pairs separated by a comma (,).", header)); - } - String key = components[0].trim(); - String value = components[1].trim(); - if (key.isEmpty()) { - throw new DirectiveParseException( - NAME, String.format("Key specified for header '%s' cannot be empty.", header)); - } - if (value.isEmpty()) { - throw new DirectiveParseException( - NAME, String.format("Value specified for header '%s' cannot be empty.", header)); - } - headers.put(key, value); - } - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - for (Row row : rows) { - Map parameters = new HashMap<>(); - for (String column : columns) { - int idx = row.find(column); - if (idx != -1) { - parameters.put(column, row.getValue(idx)); - } - } - try { - Map result = invokeHttp(url, parameters, headers); - for (Map.Entry entry : result.entrySet()) { - row.addOrSet(entry.getKey(), entry.getValue()); - } - } catch (Exception e) { - // If there are any issues, they will be pushed on the error port. - throw new ErrorRowException(NAME, e.getMessage(), 500); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Invoked external service '%s' to enrich row based on columns '%s'", url, columns) - .all(Many.of(columns), Many.of(columns)) - .build(); - } - - private class ServiceResponseHandler implements ResponseHandler> { - @Override - public Map handleResponse(HttpResponse response) throws IOException { - StatusLine statusLine = response.getStatusLine(); - HttpEntity entity = response.getEntity(); - if (statusLine.getStatusCode() >= 300) { - throw new HttpResponseException( - statusLine.getStatusCode(), - statusLine.getReasonPhrase()); - } - if (entity == null) { - throw new ClientProtocolException("Response contains no content"); - } - Gson gson = new GsonBuilder().create(); - Reader reader = new InputStreamReader(entity.getContent(), Charset.forName("UTF-8")); - return gson.fromJson(reader, new TypeToken>() { }.getType()); - } - } - - private Map invokeHttp(String url, Map parameters, - Map headers) throws IOException { - CloseableHttpClient client = null; - try { - String body = gson.toJson(parameters); - HttpPost post = new HttpPost(url); - post.addHeader("Content-type", "application/json; charset=UTF-8"); - for (Map.Entry entry : headers.entrySet()) { - post.addHeader(entry.getKey(), entry.getValue()); - } - BasicHttpEntity entity = new BasicHttpEntity(); - InputStream stream = new ByteArrayInputStream(body.getBytes(StandardCharsets.UTF_8)); - entity.setContent(stream); - post.setEntity(entity); - client = HttpClients.createDefault(); - return client.execute(post, new ServiceResponseHandler()); - } finally { - if (client != null) { - client.close(); - } - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/language/SetCharset.java b/wrangler-core/src/main/java/io/cdap/directives/language/SetCharset.java deleted file mode 100644 index ae25fbe4c..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/language/SetCharset.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.language; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.Charset; -import java.util.List; - -/** - * Sets the character set encoding on the column. - * - * This directive will convert the data from {@link Byte[]} or {@link ByteBuffer} - * to {@link String}. This conversion is through the character set encoding. - */ -@Plugin(type = Directive.TYPE) -@Name("set-charset") -@Categories(categories = {"language"}) -@Description("Sets the character set decoding to UTF-8.") -public class SetCharset implements Directive, Lineage { - public static final String NAME = "set-charset"; - private String column; - private String charset; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("charset", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.charset = ((Text) args.value("charset")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException, - ErrorRowException { - - // Iterate through all the rows. - for (Row row : rows) { - int idx = row.find(column); - if (idx == -1) { - continue; - } - - Object object = row.getValue(idx); - if (object == null) { - continue; - } - - // Convert from byte[] or ByteBuffer into right ByteBuffer. - ByteBuffer buffer; - if (object instanceof byte[]) { - buffer = ByteBuffer.wrap((byte[]) object); - } else if (object instanceof ByteBuffer) { - buffer = (ByteBuffer) object; - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' is of invalid type '%s'. It should be of type 'byte array' or " + - "'ByteBuffer'.", column, object.getClass().getSimpleName())); - } - - try { - CharBuffer result = Charset.forName(charset).decode(buffer); - row.setValue(idx, result.toString()); - } catch (Error e) { - throw new DirectiveExecutionException( - NAME, String.format("Can not convert to character set '%s', %s", charset, e.getMessage()), e); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Changed character set of column '%s' to '%s'", column, charset) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/lookup/CatalogLookup.java b/wrangler-core/src/main/java/io/cdap/directives/lookup/CatalogLookup.java deleted file mode 100644 index 46a0dcaed..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/lookup/CatalogLookup.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.lookup; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.executor.ICDCatalog; - -import java.util.List; - -/** - * A directive that looks up ICD Code from the catalog. - */ -@Plugin(type = Directive.TYPE) -@Name(CatalogLookup.NAME) -@Categories(categories = { "lookup"}) -@Description("Looks-up values from pre-loaded (static) catalogs.") -public class CatalogLookup implements Directive, Lineage { - public static final String NAME = "catalog-lookup"; - // StaticCatalog that holds the ICD code and their descriptions - private StaticCatalog catalog; - - // Catalog name -- normalized for column name - private String name; - - // Column from which the ICD code needs to be read. - private String column; - - // This is the generated column - private String generatedColumn; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("catalog", TokenType.TEXT); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - String type = ((Text) args.value("catalog")).value(); - if (!type.equalsIgnoreCase("ICD-9") && !type.equalsIgnoreCase("ICD-10-2016") && - !type.equalsIgnoreCase("ICD-10-2017")) { - throw new DirectiveParseException( - NAME, "Invalid ICD type - should be 9 (ICD-9) or 10 (ICD-10-2016 or ICD-10-2017)."); - } else { - catalog = new ICDCatalog(type.toLowerCase()); - if (!catalog.configure()) { - throw new DirectiveParseException(NAME, "Failed to configure ICD StaticCatalog. Check with your administrator"); - } - } - this.name = catalog.getCatalog().replaceAll("-", "_"); - this.generatedColumn = String.format("%s_%s_description", column, name); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object != null && object instanceof String) { - String code = (String) object; - StaticCatalog.Entry value = catalog.lookup(code); - if (value != null) { - row.add(generatedColumn, value.getDescription()); - } else { - row.add(generatedColumn, null); - } - } else { - row.add(generatedColumn, null); - } - } else { - row.add(generatedColumn, null); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Looked up catalog using value in column '%s' and wrote it to column '%s'", column, generatedColumn) - .relation(column, Many.of(column, generatedColumn)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/lookup/StaticCatalog.java b/wrangler-core/src/main/java/io/cdap/directives/lookup/StaticCatalog.java deleted file mode 100644 index 472bbdfb5..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/lookup/StaticCatalog.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.lookup; - -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.io.Serializable; - -/** - * Interface for defining different kinds of catalog. - */ -@PublicEvolving -public interface StaticCatalog extends Serializable { - /** - * Configures a catalog. - * - * @return true if success in configuring, false otherwise. - */ - boolean configure(); - - /** - * Looks up the code in the catalog. - * - * @param code to be looked up. - * @return StaticCatalog entry if found, else null. - */ - StaticCatalog.Entry lookup(String code); - - /** - * @return name of the catalog. - */ - String getCatalog(); - - /** - * An entry in the catalog. - */ - interface Entry { - String getDescription(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/lookup/TableLookup.java b/wrangler-core/src/main/java/io/cdap/directives/lookup/TableLookup.java deleted file mode 100644 index 3a62f3c7d..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/lookup/TableLookup.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.lookup; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.common.Bytes; -import io.cdap.cdap.api.data.DatasetInstantiationException; -import io.cdap.cdap.etl.api.Lookup; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -/** - * An directive that performs a lookup into a Table Dataset and adds the row values into the record. - */ -@Plugin(type = Directive.TYPE) -@Name(TableLookup.NAME) -@Categories(categories = { "lookup"}) -@Description("Uses the given column as a key to perform a lookup into the specified table.") -public class TableLookup implements Directive, Lineage { - public static final String NAME = "table-lookup"; - private String column; - private String table; - - private boolean initialized; - private io.cdap.cdap.etl.api.lookup.TableLookup tableLookup; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("table", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.table = ((Text) args.value("table")).value(); - this.initialized = false; - } - - @Override - public void destroy() { - // no-op - } - - private void ensureInitialized(ExecutorContext context) throws DirectiveExecutionException { - if (initialized) { - return; - } - Lookup lookup; - try { - lookup = context.provide(table, Collections.emptyMap()); - } catch (DatasetInstantiationException e) { - throw new DirectiveExecutionException( - NAME, String.format("Dataset '%s' could not be instantiated. Make sure that a dataset '%s' of " + - "type Table exists.", table, table), e); - } - if (!(lookup instanceof io.cdap.cdap.etl.api.lookup.TableLookup)) { - throw new DirectiveExecutionException( - NAME, "Lookup is not being performed on a table. Lookup can be performed only on tables."); - } - tableLookup = (io.cdap.cdap.etl.api.lookup.TableLookup) lookup; - initialized = true; - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - ensureInitialized(context); - for (Row row : rows) { - int idx = row.find(column); - if (idx == -1) { - continue; - } - Object object = row.getValue(idx); - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String'.", column) - ); - } - - if (!(object instanceof String)) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' is of invalid type '%s'. It should be of type 'String'.", - column, object.getClass().getSimpleName()) - ); - } - io.cdap.cdap.api.dataset.table.Row lookedUpRow = tableLookup.lookup((String) object); - for (Map.Entry entry : lookedUpRow.getColumns().entrySet()) { - row.add(column + "_" + Bytes.toString(entry.getKey()), Bytes.toString(entry.getValue())); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Looking up row in table '%s' based on column '%s'", table, column) - .all(Many.of(column)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/nlp/Stemming.java b/wrangler-core/src/main/java/io/cdap/directives/nlp/Stemming.java deleted file mode 100644 index 72e5b5f62..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/nlp/Stemming.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.nlp; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.directives.nlp.internal.PorterStemmer; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Executor for stemming the words provided using Porter Stemming. - */ -@Plugin(type = Directive.TYPE) -@Name("stemming") -@Categories(categories = { "nlp"}) -@Description("Apply Porter Stemming on the column value.") -public class Stemming implements Directive, Lineage { - public static final String NAME = "stemming"; - private String column; - private PorterStemmer stemmer; - private String porterCol; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.stemmer = new PorterStemmer(); - this.porterCol = String.format("%s_porter", column); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - List stemmed = new ArrayList<>(); - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String', " + - "'Array of String' or 'List of String'.", column)); - } - - if ((object instanceof List || object instanceof String[] || object instanceof String)) { - List words = null; - if (object instanceof String[]) { - words = Arrays.asList((String[]) object); - } else if (object instanceof List) { - words = (List) object; - } else { - String phrase = (String) object; - String[] w = phrase.split("\\W+"); - words = Arrays.asList(w); - } - try { - stemmed = stemmer.process(words); - row.add(porterCol, stemmed); - } catch (IOException e) { - throw new DirectiveExecutionException( - NAME, String.format("Unable to apply porter stemmer on column '%s'. %s", column, e.getMessage()), e); - } - } else { - throw new DirectiveExecutionException( - NAME, String.format("Invalid type '%s' of column '%s'. It should be of type 'String', " + - "Array of String' or 'List of String'.", column, object.getClass().getSimpleName())); - } - } else { - row.add(porterCol, stemmed); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Reduced derived words using Porter technique from column '%s'", column) - .relation(column, Many.of(column, porterCol)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/nlp/internal/PorterStemmer.java b/wrangler-core/src/main/java/io/cdap/directives/nlp/internal/PorterStemmer.java deleted file mode 100644 index 22ab779aa..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/nlp/internal/PorterStemmer.java +++ /dev/null @@ -1,661 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * 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. - */ - - -/** - * Porter stemmer in Java. The original paper is in - * - * Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14, - * no. 3, pp 130-137, - * - * See also http://www.tartarus.org/~martin/PorterStemmer - * - * History: - * - * Release 1 - * - * Bug 1 (reported by Gonzalo Parra 16/10/99) fixed as marked below. - * The words 'aed', 'eed', 'oed' leave k at 'a' for step 3, and b[k-1] - * is then out outside the bounds of b. - * - * Release 2 - * - * Similarly, - * - * Bug 2 (reported by Steve Dyrdahl 22/2/00) fixed as marked below. - * 'ion' by itself leaves j = -1 in the test for 'ion' in step 5, and - * b[j] is then outside the bounds of b. - * - * Release 3 - * - * Considerably revised 4/9/00 in the light of many helpful suggestions - * from Brian Goetz of Quiotix Corporation (brian@quiotix.com). - * - */ - -package io.cdap.directives.nlp.internal; - - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -/** - * PorterStemmer, implementing the Porter Stemming Algorithm - * - * The PorterStemmer class transforms a word into its root form. The input - * word can be provided a character at time (by calling add()), or at once - * by calling one of the various stem(something) methods. - */ -public final class PorterStemmer { - private char[] b; - private int i; /* offset into b */ - private int iEnd; /* offset to end of stemmed word */ - private int j, k; - private static final int INC = 50; - - /* unit of size whereby b is increased */ - public PorterStemmer() { - b = new char[INC]; - i = 0; - iEnd = 0; - } - - /** - * Add a character to the word being stemmed. When you are finished - * adding characters, you can call stem(void) to stem the word. - */ - public void add(char ch) { - if (i == b.length) { - char[] newB = new char[i + INC]; - for (int c = 0; c < i; c++) { - newB[c] = b[c]; - } - b = newB; - } - b[i++] = ch; - } - - - /** - * Adds wLen characters to the word being stemmed contained in a portion - * of a char[] array. This is like repeated calls of add(char ch), but - * faster. - */ - - public void add(char[] w, int wLen) { - if (i + wLen >= b.length) { - char[] newB = new char[i + wLen + INC]; - for (int c = 0; c < i; c++) { - newB[c] = b[c]; - } - b = newB; - } - for (int c = 0; c < wLen; c++) { - b[i++] = w[c]; - } - } - - /** - * After a word has been stemmed, it can be retrieved by toString(), - * or a reference to the internal buffer can be retrieved by getResultBuffer - * and getResultLength (which is generally more efficient.) - */ - public String toString() { - return new String(b, 0, iEnd); - } - - /** - * Returns the length of the word resulting from the stemming process. - */ - public int getResultLength() { - return iEnd; - } - - /** - * Returns a reference to a character buffer containing the results of - * the stemming process. You also need to consult getResultLength() - * to determine the length of the result. - */ - public char[] getResultBuffer() { - return b; - } - - /* cons(i) is true <=> b[i] is a consonant. */ - - private boolean cons(int i) { - switch (b[i]) { - case 'a': - case 'e': - case 'i': - case 'o': - case 'u': - return false; - case 'y': - return (i == 0) ? true : !cons(i - 1); - default: - return true; - } - } - - /* m() measures the number of consonant sequences between 0 and j. if c is - a consonant sequence and v a vowel sequence, and <..> indicates arbitrary - presence, - - gives 0 - vc gives 1 - vcvc gives 2 - vcvcvc gives 3 - .... - */ - private int m() { - int n = 0; - int i = 0; - while (true) { - if (i > j) { - return n; - } - if (!cons(i)) { - break; - } - i++; - } - i++; - while (true) { - while (true) { - if (i > j) { - return n; - } - if (cons(i)) { - break; - } - i++; - } - i++; - n++; - while (true) { - if (i > j) { - return n; - } - if (!cons(i)) { - break; - } - i++; - } - i++; - } - } - - /* vowelinstem() is true <=> 0,...j contains a vowel */ - private boolean vowelinstem() { - for (int i = 0; i <= j; i++) { - if (!cons(i)) { - return true; - } - } - return false; - } - - /* doublec(j) is true <=> j,(j-1) contain a double consonant. */ - private boolean doublec(int j) { - if (j < 1) { - return false; - } - if (b[j] != b[j - 1]) { - return false; - } - return cons(j); - } - - /* cvc(i) is true <=> i-2,i-1,i has the form consonant - vowel - consonant - and also if the second c is not w,x or y. this is used when trying to - restore an e at the end of a short word. e.g. - - cav(e), lov(e), hop(e), crim(e), but - snow, box, tray. - - */ - private boolean cvc(int i) { - if (i < 2 || !cons(i) || cons(i - 1) || !cons(i - 2)) { - return false; - } - int ch = b[i]; - if (ch == 'w' || ch == 'x' || ch == 'y') { - return false; - } - return true; - } - - private boolean ends(String s) { - int l = s.length(); - int o = k - l + 1; - if (o < 0) { - return false; - } - for (int i = 0; i < l; i++) { - if (b[o + i] != s.charAt(i)) { - return false; - } - } - j = k - l; - return true; - } - - /* setto(s) sets (j+1),...k to the characters in the string s, readjusting k. */ - private void setto(String s) { - int l = s.length(); - int o = j + 1; - for (int i = 0; i < l; i++) { - b[o + i] = s.charAt(i); - } - k = j + l; - } - - /* r(s) is used further down. */ - - private void r(String s) { - if (m() > 0) { - setto(s); - } - } - - /* step1() gets rid of plurals and -ed or -ing. e.g. - - caresses -> caress - ponies -> poni - ties -> ti - caress -> caress - cats -> cat - - feed -> feed - agreed -> agree - disabled -> disable - - matting -> mat - mating -> mate - meeting -> meet - milling -> mill - messing -> mess - - meetings -> meet - - */ - - private void step1() { - if (b[k] == 's') { - if (ends("sses")) { - k -= 2; - } else if (ends("ies")) { - setto("i"); - } else if (b[k - 1] != 's') { - k--; - } - } - if (ends("eed")) { - if (m() > 0) { - k--; - } - } else if ((ends("ed") || ends("ing")) && vowelinstem()) { - k = j; - if (ends("at")) { - setto("ate"); - } else if (ends("bl")) { - setto("ble"); - } else if (ends("iz")) { - setto("ize"); - } else if (doublec(k)) { - k--; - int ch = b[k]; - if (ch == 'l' || ch == 's' || ch == 'z') { - k++; - } - } else if (m() == 1 && cvc(k)) { - setto("e"); - } - } - } - - /* step2() turns terminal y to i when there is another vowel in the stem. */ - private void step2() { - if (ends("y") && vowelinstem()) { - b[k] = 'i'; - } - } - - /* step3() maps double suffices to single ones. so -ization ( = -ize plus - -ation) maps to -ize etc. note that the string before the suffix must give - m() > 0. */ - private void step3() { - if (k == 0) { - return; /* For Bug 1 */ - } - switch (b[k - 1]) { - case 'a': - if (ends("ational")) { - r("ate"); - break; - } - if (ends("tional")) { - r("tion"); - break; - } - break; - case 'c': - if (ends("enci")) { - r("ence"); - break; - } - if (ends("anci")) { - r("ance"); - break; - } - break; - case 'e': - if (ends("izer")) { - r("ize"); - break; - } - break; - case 'l': - if (ends("bli")) { - r("ble"); - break; - } - if (ends("alli")) { - r("al"); - break; - } - if (ends("entli")) { - r("ent"); - break; - } - if (ends("eli")) { - r("e"); - break; - } - if (ends("ousli")) { - r("ous"); - break; - } - break; - case 'o': - if (ends("ization")) { - r("ize"); - break; - } - if (ends("ation")) { - r("ate"); - break; - } - if (ends("ator")) { - r("ate"); - break; - } - break; - case 's': - if (ends("alism")) { - r("al"); - break; - } - if (ends("iveness")) { - r("ive"); - break; - } - if (ends("fulness")) { - r("ful"); - break; - } - if (ends("ousness")) { - r("ous"); - break; - } - break; - case 't': - if (ends("aliti")) { - r("al"); - break; - } - if (ends("iviti")) { - r("ive"); - break; - } - if (ends("biliti")) { - r("ble"); - break; - } - break; - case 'g': - if (ends("logi")) { - r("log"); - break; - } - } - } - - /* step4() deals with -ic-, -full, -ness etc. similar strategy to step3. */ - - private void step4() { - switch (b[k]) { - case 'e': - if (ends("icate")) { - r("ic"); - break; - } - if (ends("ative")) { - r(""); - break; - } - if (ends("alize")) { - r("al"); - break; - } - break; - case 'i': - if (ends("iciti")) { - r("ic"); - break; - } - break; - case 'l': - if (ends("ical")) { - r("ic"); - break; - } - if (ends("ful")) { - r(""); - break; - } - break; - case 's': - if (ends("ness")) { - r(""); - break; - } - break; - } - } - - /* step5() takes off -ant, -ence etc., in context vcvc. */ - - private void step5() { - if (k == 0) { - return; /* for Bug 1 */ - } - switch (b[k - 1]) { - case 'a': - if (ends("al")) { - break; - } - return; - case 'c': - if (ends("ance")) { - break; - } - if (ends("ence")) { - break; - } - return; - case 'e': - if (ends("er")) { - break; - } - return; - case 'i': - if (ends("ic")) { - break; - } - return; - case 'l': - if (ends("able")) { - break; - } - if (ends("ible")) { - break; - } - return; - case 'n': - if (ends("ant")) { - break; - } - if (ends("ement")) { - break; - } - if (ends("ment")) { - break; - } - /* element etc. not stripped before the m */ - if (ends("ent")) { - break; - } - return; - case 'o': - if (ends("ion") && j >= 0 && (b[j] == 's' || b[j] == 't')) { - break; - } - /* j >= 0 fixes Bug 2 */ - if (ends("ou")) { - break; - } - return; - /* takes care of -ous */ - case 's': - if (ends("ism")) { - break; - } - return; - case 't': - if (ends("ate")) { - break; - } - if (ends("iti")) { - break; - } - return; - case 'u': - if (ends("ous")) { - break; - } - return; - case 'v': - if (ends("ive")) { - break; - } - return; - case 'z': - if (ends("ize")) { - break; - } - return; - default: - return; - } - if (m() > 1) { - k = j; - } - } - - /* step6() removes a final -e if m() > 1. */ - private void step6() { - j = k; - if (b[k] == 'e') { - int a = m(); - if (a > 1 || a == 1 && !cvc(k - 1)) { - k--; - } - } - if (b[k] == 'l' && doublec(k) && m() > 1) { - k--; - } - } - - /** Stem the word placed into the PorterStemmer buffer through calls to add(). - * Returns true if the stemming process resulted in a word different - * from the input. You can retrieve the result with - * getResultLength()/getResultBuffer() or toString(). - */ - private void stem() { - k = i - 1; - if (k > 1) { - step1(); - step2(); - step3(); - step4(); - step5(); - step6(); - } - iEnd = k + 1; - i = 0; - } - - public List process(List input) throws IOException { - List stemmed = new ArrayList<>(); - int cnt = 0; - char[] w = new char[501]; - for (int i = 0; i < input.size(); i++) { - InputStream in = new ByteArrayInputStream(input.get(i).getBytes("UTF-8")); - while (true) { - int ch = in.read(); - if (Character.isLetter((char) ch)) { - int j = 0; - while (true) { - ch = Character.toLowerCase((char) ch); - w[j] = (char) ch; - if (j < 500) { - j++; - } - ch = in.read(); - if (!Character.isLetter((char) ch)) { - for (int c = 0; c < j; c++) { - add(w[c]); - } - stem(); - stemmed.add(toString()); - cnt = cnt + 1; - break; - } - } - } - if (ch < 0) { - break; - } - } - } - return stemmed; - } - -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/CsvParser.java b/wrangler-core/src/main/java/io/cdap/directives/parser/CsvParser.java deleted file mode 100644 index bd6fc181f..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/CsvParser.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.Bool; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.dq.DataType; -import io.cdap.wrangler.dq.TypeInference; -import org.apache.commons.csv.CSVFormat; -import org.apache.commons.csv.CSVParser; -import org.apache.commons.csv.CSVRecord; -import org.apache.commons.lang3.StringEscapeUtils; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * A CSV Parser Stage for parsing the {@link Row} provided based on configuration. - */ -@Plugin(type = Directive.TYPE) -@Name(CsvParser.NAME) -@Categories(categories = { "parser", "csv"}) -@Description("Parses a column as CSV (comma-separated values).") -public class CsvParser implements Directive, Lineage { - public static final String NAME = "parse-as-csv"; - private ColumnName columnArg; - private Text delimiterArg; - private Bool headerArg; - - // CSV format defines the configuration for CSV parser for parsing. - private CSVFormat format; - - // - private boolean hasHeader; - - // Set to true once header is checked. - private boolean checkedHeader = false; - - // Header names. - private List headers = new ArrayList<>(); - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder("parse-as-csv"); - builder.define("col", TokenType.COLUMN_NAME); - builder.define("delimiter", TokenType.TEXT, Optional.TRUE); - builder.define("header", TokenType.BOOLEAN, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - columnArg = args.value("col"); - - char delimiter = ','; - if (args.contains("delimiter")) { - delimiterArg = args.value("delimiter"); - delimiter = delimiterArg.value().charAt(0); - if (delimiterArg.value().startsWith("\\")) { - String unescapedStr = StringEscapeUtils.unescapeJava(delimiterArg.value()); - if (unescapedStr == null) { - throw new DirectiveParseException( - NAME, String.format("Invalid delimiter for CSV Parser '%s'", delimiterArg.value())); - } - delimiter = unescapedStr.charAt(0); - } - } - - - this.format = CSVFormat.DEFAULT.withDelimiter(delimiter); - this.format.withIgnoreEmptyLines(true) - .withAllowMissingColumnNames(true) - .withIgnoreSurroundingSpaces(true) - .withRecordSeparator('\n'); - - this.hasHeader = false; - if (args.contains("header")) { - headerArg = args.value("header"); - this.hasHeader = headerArg.value(); - } - } - - @Override - public void destroy() { - // no-op - } - - /** - * Parses a give column in a {@link Row} as a CSV Row. - * - * @param rows Input {@link Row} to be wrangled by this step. - * @param context Specifies the context of the pipeline. - * @return New Row containing multiple columns based on CSV parsing. - */ - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - - for (Row row : rows) { - int idx = row.find(columnArg.value()); - if (idx == -1) { - continue; - } - String line = (String) row.getValue(idx); - if (line == null || line.isEmpty()) { - continue; - } - CSVParser parser = null; - try { - parser = CSVParser.parse(line, format); - List csvRecords = parser.getRecords(); - for (CSVRecord csvRecord : csvRecords) { - if (!checkedHeader && hasHeader && isHeader(csvRecord)) { - for (int i = 0; i < csvRecord.size(); i++) { - headers.add(csvRecord.get(i).trim().replaceAll("\\s+", "_")); - } - if (rows.size() > 0) { - return new ArrayList<>(); - } - } else { - toRow(csvRecord, row); - } - } - } catch (IOException e) { - // When there is error parsing data, the data is written to error. - throw new ErrorRowException(NAME, e.getMessage(), 1); - } - } - return rows; - } - - /** - * Converts a {@link CSVRecord} to {@link Row}. - * - * @param record - * @return - */ - private void toRow(CSVRecord record, Row row) { - int size = headers.size(); - for (int i = 0; i < record.size(); i++) { - if (size > 0) { - row.add(headers.get(i), record.get(i)); - } else { - row.add(columnArg.value() + "_" + (i + 1), record.get(i)); - } - } - } - - private boolean isHeader(CSVRecord record) { - checkedHeader = true; - Set columns = new HashSet<>(); - for (int i = 0; i < record.size(); i++) { - String value = record.get(i); - if (value == null || value.trim().isEmpty()) { - return false; - } - DataType type = TypeInference.getDataType(value); - if (type != DataType.STRING) { - return false; - } - if (columns.contains(value)) { - return false; - } else { - columns.add(value); - } - } - return true; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as CSV with delimiter '%s'", columnArg.value(), delimiterArg.value()) - .all(Many.columns(columnArg), Many.columns(columnArg)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/FixedLengthParser.java b/wrangler-core/src/main/java/io/cdap/directives/parser/FixedLengthParser.java deleted file mode 100644 index 525f7ba7a..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/FixedLengthParser.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.LazyNumber; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.NumericList; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.List; - -/** - * A Fixed length Parser Stage for parsing the {@link Row} provided based on configuration. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-as-fixed-length") -@Categories(categories = { "parser"}) -@Description("Parses fixed-length records using the specified widths and padding-character.") -public final class FixedLengthParser implements Directive, Lineage { - public static final String NAME = "parse-as-fixed-length"; - private int[] widths; - private String col; - private String padding; - private int recordLength; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("width", TokenType.NUMERIC_LIST); - builder.define("padding", TokenType.TEXT, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.col = ((ColumnName) args.value("column")).value(); - List numbers = ((NumericList) args.value("width")).value(); - this.widths = new int[numbers.size()]; - int idx = 0; - int sum = 0; - while (idx < numbers.size()) { - this.widths[idx] = numbers.get(idx).intValue(); - sum += this.widths[idx]; - idx = idx + 1; - } - this.recordLength = sum; - if (args.contains("padding")) { - this.padding = ((Text) args.value("padding")).value(); - } else { - this.padding = null; - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - List results = new ArrayList<>(); - for (Row row : rows) { - int idx = row.find(col); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String'.", col)); - } - - if (object instanceof String) { - String data = (String) object; - int length = data.length(); - // If the recordLength length doesn't match the string length. - if (length < recordLength) { - throw new ErrorRowException( - NAME, String.format("Column '%s' contains a value with fewer characters than the specified length " + - "of row. Expected at least %d characters but found %s characters.", - col, recordLength, length), 2); - } - - int index = 1; - while ((index + recordLength - 1) <= length) { - Row newRow = new Row(row); - int recPosition = index; - int colid = 1; - for (int width : widths) { - String val = data.substring(recPosition - 1, recPosition + width - 1); - if (padding != null) { - val = val.replaceAll(padding, ""); - } - newRow.add(String.format("%s_%d", col, colid), val); - recPosition += width; - colid += 1; - } - results.add(newRow); - index = (index + recordLength); - } - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String'.", - col, object.getClass().getSimpleName())); - } - } - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' with fixed lengths for columns", col) - .all(Many.of(col), Many.of(col)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/HL7Parser.java b/wrangler-core/src/main/java/io/cdap/directives/parser/HL7Parser.java deleted file mode 100644 index 3157bfe66..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/HL7Parser.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import ca.uhn.hl7v2.DefaultHapiContext; -import ca.uhn.hl7v2.HL7Exception; -import ca.uhn.hl7v2.HapiContext; -import ca.uhn.hl7v2.Location; -import ca.uhn.hl7v2.model.Composite; -import ca.uhn.hl7v2.model.Field; -import ca.uhn.hl7v2.model.Group; -import ca.uhn.hl7v2.model.Message; -import ca.uhn.hl7v2.model.MessageVisitor; -import ca.uhn.hl7v2.model.MessageVisitors; -import ca.uhn.hl7v2.model.Primitive; -import ca.uhn.hl7v2.model.Segment; -import ca.uhn.hl7v2.parser.GenericModelClassFactory; -import ca.uhn.hl7v2.parser.ModelClassFactory; -import ca.uhn.hl7v2.parser.Parser; -import ca.uhn.hl7v2.parser.PipeParser; -import ca.uhn.hl7v2.validation.impl.NoValidation; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; - -/** - * A step for parsing the HL7 Message. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-as-hl7") -@Categories(categories = { "parser", "hl7"}) -@Description("Parses for Health Level 7 Version 2 (HL7 V2) messages; indicates at which point " + - "JSON object enumeration terminates.") -public class HL7Parser implements Directive, Lineage { - public static final String NAME = "parse-as-hl7"; - private String column; - private HapiContext context; - private Parser parser; - private int depth; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("depth", TokenType.NUMERIC, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - if (args.contains("depth")) { - this.depth = ((Numeric) args.value("depth")).value().intValue(); - } else { - this.depth = Integer.MAX_VALUE; - } - context = new DefaultHapiContext(); - context.setValidationContext(new NoValidation()); - ModelClassFactory modelClassFactory = new GenericModelClassFactory(); - parser = new PipeParser(modelClassFactory); - parser.getParserConfiguration().setAllowUnknownVersions(true); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as HL7 record", column) - .all(Many.columns(column), Many.columns(column)) - .build(); - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - try { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String'.", column) - ); - } - - // Handling the first parsing on HL7 message - if (object instanceof String) { - Message message = parser.parse((String) object); - HL7MessageVisitor visitor = new HL7MessageVisitor(row, column + "_hl7", depth); - MessageVisitors.visit(message, - MessageVisitors.visitPopulatedElements(visitor)).getDelegate(); - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String'.", - column, object.getClass().getSimpleName()) - ); - } - - } - } catch (HL7Exception e) { - throw new DirectiveExecutionException(NAME, e.getMessage(), e); - } - } - return rows; - } - - /** - * HL7 Message Visitor. - */ - private final class HL7MessageVisitor implements MessageVisitor { - private final Row row; - private final String column; - private final int depth; - private JsonObject segments = new JsonObject(); - private JsonObject segmentObject = new JsonObject(); - private JsonObject compositeObject = new JsonObject(); - private boolean inComposite = false; - - HL7MessageVisitor(Row row, String column, int depth) { - this.row = row; - this.column = column; - this.depth = depth; - } - - @Override - public boolean start(Message message) { - return true; - } - - @Override - public boolean end(Message message) { - JsParser.jsonFlatten(segments, column, 1, depth, row); - return true; - } - - @Override - public boolean start(Group group, Location location) { - return true; - } - - @Override - public boolean end(Group group, Location location) { - return true; - } - - @Override - public boolean start(Segment segment, Location location) { - segmentObject = new JsonObject(); - return true; - } - - @Override - public boolean end(Segment segment, Location location) { - if (!segments.has(segment.getName())) { - segments.add(segment.getName(), segmentObject); - } else { - Object object = segments.get(segment.getName()); - if (!(object instanceof JsonArray)) { - JsonObject o = (JsonObject) segments.get(segment.getName()); - JsonArray a = new JsonArray(); - a.add(o); - a.add(segmentObject); - segments.add(segment.getName(), a); - } - } - return true; - } - - @Override - public boolean start(Field field, Location location) { - return true; - } - - @Override - public boolean end(Field field, Location location) { - return true; - } - - @Override - public boolean start(Composite composite, Location location) { - inComposite = true; - compositeObject = new JsonObject(); - return true; - } - - @Override - public boolean end(Composite composite, Location location) { - segmentObject.add(Integer.toString(location.getField()), compositeObject); - inComposite = false; - return true; - } - - @Override - public boolean visit(Primitive primitive, Location location) { - if (inComposite) { - compositeObject.addProperty(Integer.toString(location.getComponent()), primitive.getValue()); - } else { - String fieldComponent = String.format("%d_%d", location.getField(), location.getComponent()); - if (location.getComponent() < 0) { - fieldComponent = String.format("%d", location.getField()); - } - segmentObject.addProperty(fieldComponent, primitive.getValue()); - } - return true; - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/JsParser.java b/wrangler-core/src/main/java/io/cdap/directives/parser/JsParser.java deleted file mode 100644 index c28c91412..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/JsParser.java +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.JsonPrimitive; -import com.google.gson.internal.LazilyParsedNumber; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.dq.TypeInference; -import org.json.JSONException; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -/** - * This class is a JSON Parser directive with optional argument specifying the depth - * to which the JSON needs to be parsed. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-as-json") -@Categories(categories = { "parser", "json"}) -@Description("Parses a column as JSON.") -public class JsParser implements Directive, Lineage { - public static final String NAME = "parse-as-json"; - // Column within the input row that needs to be parsed as Json - private String column; - - // Max depth to which the JSON needs to be parsed. - private int depth; - - // JSON parser. - private static final JsonParser parser = new JsonParser(); - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("depth", TokenType.NUMERIC, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - if (args.contains("depth")) { - this.depth = ((Numeric) args.value("depth")).value().intValue(); - } else { - this.depth = Integer.MAX_VALUE; - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - List results = new ArrayList<>(); - - // Iterate through all the rows. - for (Row row : rows) { - int idx = row.find(column); - // If the input column exists in the row, proceed further. - if (idx != -1) { - Object value = row.getValue(idx); - if (value == null) { - continue; - } - - try { - JsonElement element = null; - if (value instanceof String) { - String document = (String) value; - element = parser.parse(document.trim()); - } else if (value instanceof JsonObject || value instanceof JsonArray) { - element = (JsonElement) value; - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' is of invalid type '%s'. It should be of type 'String'" + - " or 'JsonObject' or 'JsonArray'.", column, value.getClass().getSimpleName())); - } - - row.remove(idx); - - if (element != null) { - if (element instanceof JsonObject) { - jsonFlatten(element.getAsJsonObject(), column, 1, depth, row); - results.add(row); - } else if (element instanceof JsonArray) { - JsonArray array = element.getAsJsonArray(); - if (array.size() > 0) { - for (int i = 0; i < array.size(); ++i) { - JsonElement object = array.get(i); - Row newRow = new Row(row); - newRow.add(column, getValue(object)); - results.add(newRow); - } - } else { - results.add(row); - } - } else if (element instanceof JsonPrimitive) { - row.add(column, getValue(element.getAsJsonPrimitive())); - } - } - } catch (JSONException e) { - throw new ErrorRowException(NAME, e.getMessage(), 1); - } - } - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as Json", column) - .all(Many.columns(column)) - .build(); - } - - /** - * Recursively flattens JSON until the 'depth' is reached. - * - * @param root of the JSONObject - * @param field name to be used to be stored in the row. - * @param depth current depth into JSON structure. - * @param maxDepth maximum depth to reach - * @param row to which the flatten fields need to be added. - */ - public static void jsonFlatten(JsonObject root, String field, int depth, int maxDepth, Row row) { - if (depth > maxDepth) { - row.addOrSet(String.format("%s", field), root); - return; - } - - Iterator> elements = root.entrySet().iterator(); - while (elements.hasNext()) { - Map.Entry next = elements.next(); - String key = next.getKey(); - JsonElement element = next.getValue(); - if (element instanceof JsonObject) { - jsonFlatten(element.getAsJsonObject(), - String.format("%s_%s", field, key), depth + 1, maxDepth, row); - } else { - row.add(String.format("%s_%s", field, key), getValue(element)); - } - } - } - - /** - * Gets a single value from the {@link JsonElement}. The value could be - * {@link JsonObject} or {@link JsonArray} or {@link JsonPrimitive}. - * - * @param element value to be extracted. - * @return the sub-element, else {@link com.google.gson.JsonNull}. - */ - public static Object getValue(JsonElement element) { - if (element.isJsonObject()) { - return element.getAsJsonObject(); - } else if (element.isJsonArray()) { - return element.getAsJsonArray(); - } else if (element.isJsonPrimitive()) { - return getValue(element.getAsJsonPrimitive()); - } - return element.getAsJsonNull(); - } - - /** - * Extracts a value from the {@link JsonPrimitive}. - * - * @param primitive object to extract real value. - * @return java type extracted from the {@link JsonPrimitive} - */ - public static Object getValue(JsonPrimitive primitive) { - if (primitive.isBoolean()) { - return primitive.getAsBoolean(); - } else if (primitive.isNumber()) { - Number number = primitive.getAsNumber(); - if (number instanceof Long) { - return number.longValue(); - } else if (number instanceof Double) { - return number.doubleValue(); - } else if (number instanceof Integer) { - return number.intValue(); - } else if (number instanceof Short) { - return number.shortValue(); - } else if (number instanceof Float) { - return number.floatValue(); - } else if (number instanceof BigInteger) { - return primitive.getAsBigInteger().longValue(); - } else if (number instanceof BigDecimal) { - return primitive.getAsBigDecimal().doubleValue(); - } else if (number instanceof LazilyParsedNumber) { - if (TypeInference.isInteger(primitive.getAsString())) { - return primitive.getAsBigInteger().longValue(); - } else { - return primitive.getAsBigDecimal().doubleValue(); - } - } - } else if (primitive.isString()) { - return primitive.getAsString(); - } else if (primitive.isJsonNull()) { - return primitive.getAsJsonNull(); - } - return null; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/JsPath.java b/wrangler-core/src/main/java/io/cdap/directives/parser/JsPath.java deleted file mode 100644 index 8a5e5d17b..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/JsPath.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.jayway.jsonpath.Configuration; -import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.ParseContext; -import com.jayway.jsonpath.spi.json.GsonJsonProvider; -import com.jayway.jsonpath.spi.mapper.GsonMappingProvider; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.List; - -/** - * A Json Path Extractor Stage for parsing the {@link Row} provided based on configuration. - */ -@Plugin(type = Directive.TYPE) -@Name("json-path") -@Categories(categories = { "parser", "json"}) -@Description("Parses JSON elements using a DSL (a JSON path expression).") -public class JsPath implements Directive, Lineage { - public static final String NAME = "json-path"; - private String src; - private String dest; - private String path; - private ParseContext parser; - - public static final Configuration GSON_CONFIGURATION = Configuration - .builder() - .mappingProvider(new GsonMappingProvider()) - .jsonProvider(new GsonJsonProvider()) - .build(); - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("source", TokenType.COLUMN_NAME); - builder.define("destination", TokenType.COLUMN_NAME); - builder.define("json-path", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.src = ((ColumnName) args.value("source")).value(); - this.dest = ((ColumnName) args.value("destination")).value(); - this.path = ((Text) args.value("json-path")).value(); - this.parser = JsonPath.using(GSON_CONFIGURATION); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - for (Row row : rows) { - Object value = row.getValue(src); - if (value == null) { - row.add(dest, null); - continue; - } - - if (!(value instanceof String || - value instanceof JsonObject || - value instanceof JsonArray)) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' is of invalid type '%s'. It should be of type 'String' " + - "or 'JsonObject' or 'JsonArray'.", src, value.getClass().getSimpleName()) - ); - } - - JsonElement element = parser.parse(value).read(path); - Object val = JsParser.getValue(element); - - // If destination is already present add it, else set the value. - int pos = row.find(dest); - if (pos == -1) { - row.add(dest, val); - } else { - row.setValue(pos, val); - } - results.add(row); - } - - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Extracted value from column '%s' represented as Json to destination column '%s' using path '%s'", - src, dest, path) - .conditional(src, dest) - .build(); - } -} - diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseAvro.java b/wrangler-core/src/main/java/io/cdap/directives/parser/ParseAvro.java deleted file mode 100644 index a73d732b2..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseAvro.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import com.github.rholder.retry.RetryException; -import com.github.rholder.retry.Retryer; -import com.github.rholder.retry.RetryerBuilder; -import com.github.rholder.retry.StopStrategies; -import com.github.rholder.retry.WaitStrategies; -import com.google.common.base.Charsets; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.common.Bytes; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Identifier; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.clients.RestClientException; -import io.cdap.wrangler.clients.SchemaRegistryClient; -import io.cdap.wrangler.codec.BinaryAvroDecoder; -import io.cdap.wrangler.codec.Decoder; -import io.cdap.wrangler.codec.DecoderException; -import io.cdap.wrangler.codec.JsonAvroDecoder; -import org.apache.avro.Schema; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; - -/** - * A step to parse AVRO json or binary format. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-as-avro") -@Categories(categories = { "parser", "avro"}) -@Description("Parses column as AVRO generic record.") -public class ParseAvro implements Directive, Lineage { - public static final String NAME = "parse-as-avro"; - private String column; - private String schemaId; - private String type; - private long version; - private Decoder decoder; - private boolean decoderInitialized = false; - private SchemaRegistryClient client; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("schema-id", TokenType.IDENTIFIER); - builder.define("encode-type", TokenType.IDENTIFIER); - builder.define("version", TokenType.NUMERIC, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.schemaId = ((Identifier) args.value("schema-id")).value(); - this.type = ((Identifier) args.value("encode-type")).value(); - if (!"json".equalsIgnoreCase(type) && !"binary".equalsIgnoreCase(type)) { - throw new DirectiveParseException( - NAME, String.format("Invalid encoding type '%s'. The type must be either 'json' or 'binary'.", type)); - } - if (args.contains("version")) { - this.version = ((Numeric) args.value("version")).value().intValue(); - } else { - this.version = -1; - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - List results = new ArrayList<>(); - - if (!decoderInitialized) { - // Retryer callable, that allows this step attempt to connect to schema registry service - // before giving up. - Callable> decoderCallable = () -> { - client = SchemaRegistryClient.getInstance(context); - byte[] bytes; - if (version != -1) { - bytes = client.getSchema(context.getNamespace(), schemaId, version); - } else { - bytes = client.getSchema(context.getNamespace(), schemaId); - } - Schema.Parser parser = new Schema.Parser(); - Schema schema = parser.parse(Bytes.toString(bytes)); - if ("json".equalsIgnoreCase(type)) { - return new JsonAvroDecoder(schema); - } else if ("binary".equalsIgnoreCase(type)) { - return new BinaryAvroDecoder(schema); - } - return null; - }; - - // Retryer that retries when there is connection issue or any request / response - // issue. It would exponentially back-off till wait time of 10 seconds is reached - // for 5 attempts. - Retryer> retryer = RetryerBuilder.>newBuilder() - .retryIfExceptionOfType(IOException.class) - .retryIfExceptionOfType(RestClientException.class) - .withWaitStrategy(WaitStrategies.exponentialWait(10, TimeUnit.SECONDS)) - .withStopStrategy(StopStrategies.stopAfterAttempt(5)) - .build(); - - try { - decoder = retryer.call(decoderCallable); - if (decoder == null) { - throw new DirectiveExecutionException(NAME, "Avro parsing is supported for 'json' and 'binary' types only."); - } - - decoderInitialized = true; - } catch (ExecutionException | RetryException e) { - throw new DirectiveExecutionException( - NAME, String.format("Unable to retrieve schema from schema registry. %s", e.getMessage()), e); - } - } - - try { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object instanceof byte[]) { - byte[] bytes = (byte[]) object; - results.addAll(decoder.decode(bytes)); - } else if (object instanceof String) { - String body = (String) object; - byte[] bytes = body.getBytes(Charsets.UTF_8); - results.addAll(decoder.decode(bytes)); - } else { - throw new ErrorRowException( - NAME, "Column " + column + " should be of type 'String' or 'byte array'.", 1); - } - } - } - } catch (DecoderException e) { - throw new ErrorRowException(NAME, "Issue decoding Avro record. Check schema version '" - + (version == -1 ? "latest" : version) + "'. " + e.getMessage(), 2); - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as a Avro record", column) - .all(Many.columns(column)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseAvroFile.java b/wrangler-core/src/main/java/io/cdap/directives/parser/ParseAvroFile.java deleted file mode 100644 index c59dfbb25..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseAvroFile.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import com.google.gson.Gson; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.apache.avro.Schema; -import org.apache.avro.file.DataFileReader; -import org.apache.avro.file.SeekableByteArrayInput; -import org.apache.avro.generic.GenericDatumReader; -import org.apache.avro.generic.GenericRecord; -import org.apache.avro.util.Utf8; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * A step to parse AVRO File. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-as-avro-file") -@Categories(categories = { "parser", "avro"}) -@Description("parse-as-avro-file .") -public class ParseAvroFile implements Directive, Lineage { - public static final String NAME = "parse-as-avro-file"; - private String column; - private Gson gson; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - gson = new Gson(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, final ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object instanceof byte[]) { - DataFileReader reader = null; - try { - reader = - new DataFileReader<>(new SeekableByteArrayInput((byte[]) object), new GenericDatumReader<>()); - while (reader.hasNext()) { - Row newRow = new Row(); - add(reader.next(), newRow, null); - results.add(newRow); - } - } catch (IOException e) { - throw new DirectiveExecutionException(NAME, "Failed to parse Avro data file. " + e.getMessage(), e); - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException e) { - // Nothing can be done. - } - } - } - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' is of invalid type. It should be of type 'byte array'.", column)); - } - } - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as a Avro file", column) - .all(Many.columns(column)) - .build(); - } - - /** - * Flattens the {@link GenericRecord}. - * - * @param genericRecord to be flattened. - * @param row to be flattened into - * @param name of the field to be flattened. - */ - private void add(GenericRecord genericRecord, Row row, String name) { - List fields = genericRecord.getSchema().getFields(); - String colname; - for (Schema.Field field : fields) { - Object v = genericRecord.get(field.name()); - if (name != null) { - colname = String.format("%s_%s", name, field.name()); - } else { - colname = field.name(); - } - if (v instanceof GenericRecord) { - add((GenericRecord) v, row, colname); - } else if (v instanceof Map || v instanceof List) { - row.add(colname, gson.toJson(v)); - } else if (v instanceof Utf8) { - row.add(colname, v.toString()); - } else { - row.add(colname, genericRecord.get(field.name())); - } - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseDate.java b/wrangler-core/src/main/java/io/cdap/directives/parser/ParseDate.java deleted file mode 100644 index e4cd77c17..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseDate.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import com.joestelmach.natty.DateGroup; -import com.joestelmach.natty.Parser; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.List; -import java.util.TimeZone; - -/** - * A Executor to parse date. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-as-date") -@Categories(categories = { "parser", "date"}) -@Description("Parses column values as dates using natural language processing and " + - "automatically identifying the format (expensive in terms of time consumed).") -public class ParseDate implements Directive, Lineage { - public static final String NAME = "parse-as-date"; - private String column; - private TimeZone timezone; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("timezone", TokenType.TEXT, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - if (args.contains("timezone")) { - this.timezone = TimeZone.getTimeZone(((Text) args.value("timezone")).value()); - } else { - this.timezone = TimeZone.getTimeZone("UTC"); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as date with timezone '%s'", column, timezone) - .all(Many.columns(column), Many.columns(column)) - .build(); - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - // If the data in the cell is null or is already of date format, then - // continue to next row. - if (object == null || object instanceof ZonedDateTime) { - continue; - } - if (object instanceof String) { - Parser parser = new Parser(timezone); - List groups = parser.parse((String) object); - int i = 1; - for (DateGroup group : groups) { - List dates = group.getDates(); - for (Date date : dates) { - row.add(String.format("%s_%d", column, i), date.toInstant().atZone(timezone.toZoneId())); - } - i++; - } - } else { - throw new ErrorRowException( - NAME, String.format("Column '%s' is of invalid type '%s'. It should be of type 'String'.", - column, object.getClass().getSimpleName()), 1); - } - } - } - return rows; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseDateTime.java b/wrangler-core/src/main/java/io/cdap/directives/parser/ParseDateTime.java deleted file mode 100644 index 55e1e2688..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseDateTime.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.directives.parser; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; -import java.util.List; - -/** - * Directive for parsing a string in the specified format to DateTime. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-as-datetime") -@Categories(categories = {"parser", "datetime"}) -@Description("Parse a column value as datetime using the given format") -public class ParseDateTime implements Directive, Lineage { - - public static final String NAME = "parse-as-datetime"; - private static final String COLUMN = "column"; - private static final String FORMAT = "format"; - private String column; - private String format; - private DateTimeFormatter formatter; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define(COLUMN, TokenType.COLUMN_NAME); - builder.define(FORMAT, TokenType.TEXT, Optional.FALSE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value(COLUMN)).value(); - this.format = args.value(FORMAT).value().toString(); - try { - this.formatter = DateTimeFormatter.ofPattern(this.format); - } catch (IllegalArgumentException exception) { - throw new DirectiveParseException(NAME, String.format("'%s' is an invalid datetime format.", this.format), - exception); - } - } - - @Override - public List execute(List rows, ExecutorContext context) throws ErrorRowException { - for (Row row : rows) { - int idx = row.find(column); - if (idx == -1) { - continue; - } - Object value = row.getValue(idx); - // If the data in the cell is null or is already Datetime , then skip this row. - if (value == null || value instanceof LocalDateTime) { - continue; - } - - try { - LocalDateTime localDateTime = LocalDateTime.parse(value.toString(), formatter); - row.setValue(idx, localDateTime); - } catch (DateTimeParseException exception) { - throw new ErrorRowException(NAME, String.format("Value %s for column %s is not in expected format %s", - value.toString(), column, format), 2, exception); - } - } - return rows; - } - - @Override - public void destroy() { - //no op - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' in format '%s' as datetime", column, format) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseExcel.java b/wrangler-core/src/main/java/io/cdap/directives/parser/ParseExcel.java deleted file mode 100644 index f3df25078..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseExcel.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import com.google.common.io.Closeables; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.functions.Types; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.apache.commons.lang3.StringUtils; -import org.apache.poi.hssf.usermodel.HSSFDateUtil; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellType; -import org.apache.poi.ss.usermodel.DataFormatter; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.ByteArrayInputStream; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -/** - * A step to parse Excel files. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-as-excel") -@Categories(categories = { "parser", "excel"}) -@Description("Parses column as Excel file.") -public class ParseExcel implements Directive, Lineage { - public static final String NAME = "parse-as-excel"; - private static final Logger LOG = LoggerFactory.getLogger(ParseExcel.class); - private String column; - private String sheet; - private boolean firstRowAsHeader = false; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("sheet", TokenType.TEXT, Optional.TRUE); - builder.define("first-row-as-header", TokenType.BOOLEAN, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - if (args.contains("sheet")) { - this.sheet = ((Text) args.value("sheet")).value(); - } else { - this.sheet = "0"; - } - if (args.contains("first-row-as-header")) { - this.firstRowAsHeader = ((Boolean) args.value("first-row-as-header").value()); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List records, final ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - List results = new ArrayList<>(); - ByteArrayInputStream input = null; - DataFormatter formatter = new DataFormatter(); - try { - for (Row record : records) { - int idx = record.find(column); - if (idx != -1) { - Object object = record.getValue(idx); - byte[] bytes = null; - if (object instanceof byte[]) { - bytes = (byte[]) object; - } else if (object instanceof ByteBuffer) { - ByteBuffer buffer = (ByteBuffer) object; - bytes = new byte[buffer.remaining()]; - buffer.get(bytes); - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' should be of type 'byte array' or 'ByteBuffer'.", column)); - } - - if (bytes != null) { - input = new ByteArrayInputStream(bytes); - XSSFWorkbook book = new XSSFWorkbook(input); - XSSFSheet excelsheet; - if (Types.isInteger(sheet)) { - excelsheet = book.getSheetAt(Integer.parseInt(sheet)); - } else { - excelsheet = book.getSheet(sheet); - } - - if (excelsheet == null) { - throw new DirectiveExecutionException( - NAME, String.format("Failed to extract sheet '%s' from the excel. " + - "Sheet '%s' does not exist.", sheet, sheet)); - } - - Map columnNames = new TreeMap<>(); - Iterator it = excelsheet.iterator(); - int rows = 0; - while (it.hasNext()) { - org.apache.poi.ss.usermodel.Row row = it.next(); - Iterator cellIterator = row.cellIterator(); - if (checkIfRowIsEmpty(row)) { - continue; - } - - Row newRow = new Row(); - newRow.add("fwd", rows); - - while (cellIterator.hasNext()) { - Cell cell = cellIterator.next(); - String name = columnName(cell.getAddress().getColumn()); - if (firstRowAsHeader && rows > 0) { - String value = columnNames.get(cell.getAddress().getColumn()); - if (value != null) { - name = value; - } - } - String value = ""; - switch (cell.getCellTypeEnum()) { - case STRING: - value = cell.getStringCellValue(); - break; - - case NUMERIC: - if (HSSFDateUtil.isCellDateFormatted(cell)) { - value = formatter.formatCellValue(cell); - } else { - value = String.valueOf(cell.getNumericCellValue()); - } - break; - - case BOOLEAN: - value = String.valueOf(cell.getBooleanCellValue()); - break; - } - newRow.add(name, value); - - if (rows == 0 && firstRowAsHeader) { - columnNames.put(cell.getAddress().getColumn(), value); - } - } - - if (firstRowAsHeader && rows == 0) { - rows++; - continue; - } - - // add old columns to the new row - for (Pair field : record.getFields()) { - String colName = field.getFirst(); - // if new row does not contain this column and this column is not the blob column that contains - // the excel data. - if (newRow.getValue(colName) == null && !colName.equals(column)) { - newRow.add(colName, field.getSecond()); - } - } - results.add(newRow); - rows++; - } - - if (firstRowAsHeader) { - rows = rows - 1; - } - - for (int i = rows - 1; i >= 0; --i) { - results.get(rows - i - 1).addOrSetAtIndex(1, "bkd", i); // fwd - 0, bkd - 1. - } - } - } - } - } catch (Exception e) { - throw new ErrorRowException(NAME, e.getMessage(), 1); - } finally { - if (input != null) { - Closeables.closeQuietly(input); - } - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as a Excel", column) - .all(Many.columns(column)) - .build(); - } - - private boolean checkIfRowIsEmpty(org.apache.poi.ss.usermodel.Row row) { - if (row == null) { - return true; - } - if (row.getLastCellNum() <= 0) { - return true; - } - for (int cellNum = row.getFirstCellNum(); cellNum < row.getLastCellNum(); cellNum++) { - Cell cell = row.getCell(cellNum); - if (cell != null && cell.getCellTypeEnum() != CellType.BLANK && StringUtils.isNotBlank(cell.toString())) { - return false; - } - } - return true; - } - - private String columnName(int number) { - final StringBuilder sb = new StringBuilder(); - - int num = number; - while (num >= 0) { - int numChar = (num % 26) + 65; - sb.append((char) numChar); - num = (num / 26) - 1; - } - return sb.reverse().toString(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseLog.java b/wrangler-core/src/main/java/io/cdap/directives/parser/ParseLog.java deleted file mode 100644 index 3d2ec2ea0..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseLog.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import nl.basjes.parse.core.Parser; -import nl.basjes.parse.httpdlog.ApacheHttpdLoglineParser; - -import java.util.List; - -/** - * A Executor for parsing Apache HTTPD and NGINX log files. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-as-log") -@Categories(categories = { "parser", "logs"}) -@Description("Parses Apache HTTPD and NGINX logs.") -public class ParseLog implements Directive, Lineage { - public static final String NAME = "parse-as-log"; - private String column; - private String format; - private LogLine line; - private Parser parser; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("format", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.format = ((Text) args.value("format")).value(); - this.parser = new ApacheHttpdLoglineParser<>(Object.class, format); - this.line = new LogLine(); - List paths = this.parser.getPossiblePaths(); - try { - parser.addParseTarget(LogLine.class.getMethod("setValue", String.class, String.class), paths); - } catch (NoSuchMethodException e) { - // This should never happen, as the class is defined within this class. - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - // Iterate through all the rows. - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String' or 'byte array'.", - column)); - } - - String log; - if (object instanceof String) { - log = (String) object; - } else if (object instanceof byte[]) { - log = new String((byte[]) object); - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' is of invalid type '%s'. It should be of type 'String' or 'byte array'.", - column, object.getClass().getSimpleName())); - } - line.set(row); - try { - parser.parse(line, log); - } catch (Exception e) { - row.addOrSet("log.parse.error", 1); - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as webserver log using format '%s'", column, format) - .all(Many.columns(column), Many.columns(column)) - .build(); - } - - /** - * A log line - */ - public final class LogLine { - private Row row; - - public void setValue(String name, String value) { - String key = name.toLowerCase(); - if (key.contains("original") || key.contains("bytesclf") || key.contains("cookie")) { - return; - } - key = key.replaceAll("[^a-zA-Z0-9_]", "_"); - row.addOrSet(key, value); - } - - public void set(Row row) { - this.row = row; - } - - public Row get() { - return row; - } - } - -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseProtobuf.java b/wrangler-core/src/main/java/io/cdap/directives/parser/ParseProtobuf.java deleted file mode 100644 index 1cfd0ac83..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseProtobuf.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import com.github.rholder.retry.RetryException; -import com.github.rholder.retry.Retryer; -import com.github.rholder.retry.RetryerBuilder; -import com.github.rholder.retry.StopStrategies; -import com.github.rholder.retry.WaitStrategies; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Identifier; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.clients.RestClientException; -import io.cdap.wrangler.clients.SchemaRegistryClient; -import io.cdap.wrangler.codec.Decoder; -import io.cdap.wrangler.codec.DecoderException; -import io.cdap.wrangler.codec.ProtobufDecoderUsingDescriptor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; - -/** - * A step to parse Protobuf encoded memory representations. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-as-protobuf") -@Categories(categories = { "parser", "protobuf"}) -@Description("Parses column as protobuf encoded memory representations.") -public class ParseProtobuf implements Directive, Lineage { - public static final String NAME = "parse-as-protobuf"; - private static final Logger LOG = LoggerFactory.getLogger(ParseProtobuf.class); - private String column; - private String schemaId; - private String recordName; - private long version; - private Decoder decoder; - private boolean decoderInitialized = false; - private SchemaRegistryClient client; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("schema-id", TokenType.IDENTIFIER); - builder.define("record-name", TokenType.TEXT); - builder.define("version", TokenType.NUMERIC, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.schemaId = ((Identifier) args.value("schema-id")).value(); - this.recordName = ((Text) args.value("record-name")).value(); - if (args.contains("version")) { - this.version = ((Numeric) args.value("version")).value().intValue(); - } else { - this.version = -1; - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, final ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - List results = new ArrayList<>(); - - if (!decoderInitialized) { - // Retryer callable, that allows this step attempt to connect to schema registry service - // before giving up. - Callable> decoderCallable = new Callable>() { - @Override - public Decoder call() throws Exception { - client = SchemaRegistryClient.getInstance(context); - byte[] bytes; - if (version != -1) { - bytes = client.getSchema(context.getNamespace(), schemaId, version); - } else { - bytes = client.getSchema(context.getNamespace(), schemaId); - } - - return new ProtobufDecoderUsingDescriptor(bytes, recordName); - } - }; - - // Retryer that retries when there is connection issue or any request / response - // issue. It would exponentially back-off till wait time of 10 seconds is reached - // for 5 attempts. - Retryer> retryer = RetryerBuilder.>newBuilder() - .retryIfExceptionOfType(IOException.class) - .retryIfExceptionOfType(RestClientException.class) - .withWaitStrategy(WaitStrategies.exponentialWait(10, TimeUnit.SECONDS)) - .withStopStrategy(StopStrategies.stopAfterAttempt(5)) - .build(); - - try { - decoder = retryer.call(decoderCallable); - if (decoder == null) { - throw new DirectiveExecutionException(NAME, "Unsupported protobuf decoder type."); - } - decoderInitialized = true; - } catch (ExecutionException | RetryException e) { - throw new DirectiveExecutionException( - NAME, String.format("Unable to retrieve protobuf descriptor from schema registry. %s", e.getMessage()), e); - } - } - - try { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object instanceof byte[]) { - byte[] bytes = (byte[]) object; - results.addAll(decoder.decode(bytes)); - } else { - throw new ErrorRowException(NAME, "Column " + column + " should be of type 'byte array'", 1); - } - } - } - } catch (DecoderException e) { - throw new ErrorRowException(NAME, "Issue decoding Protobuf record. Check schema version '" - + (version == -1 ? "latest" : version) + "'. " + e.getMessage(), 2); - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as a protobuf message", column) - .all(Many.columns(column)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseSimpleDate.java b/wrangler-core/src/main/java/io/cdap/directives/parser/ParseSimpleDate.java deleted file mode 100644 index 3f232ed6b..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseSimpleDate.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright © 2017-2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.List; -import java.util.TimeZone; - -/** - * A Executor to parse date into {@link ZonedDateTime} object. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-as-simple-date") -@Categories(categories = {"parser", "date"}) -@Description("Parses a column as date using format.") -public class ParseSimpleDate implements Directive, Lineage { - public static final String NAME = "parse-as-simple-date"; - private String column; - private SimpleDateFormat formatter; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("format", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - String format = ((Text) args.value("format")).value(); - this.formatter = new SimpleDateFormat(format); - // CDAP-19615 Use pure Gregorian Calendar to avoid Julian date precision loss - GregorianCalendar gc = new GregorianCalendar(TimeZone.getTimeZone("UTC")); - gc.setGregorianChange(new Date(Long.MIN_VALUE)); - formatter.setCalendar(gc); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - // If the data in the cell is null or is already of date format, then - // continue to next row. - if (object == null || object instanceof ZonedDateTime) { - continue; - } - if (object instanceof String) { - try { - // This implementation first creates Date object and then converts it into ZonedDateTime. This is because - // ZonedDateTime requires presence of Zone and Time components in the pattern and object to be parsed. - // For example if the pattern is yyyy-mm-dd, ZonedDateTime object can not be created and the call to - // ZonedDateTime.parse("2018-12-21", formatter) will throw DateTimeParseException - Date date = formatter.parse(object.toString()); - ZonedDateTime zonedDateTime = ZonedDateTime.from(date.toInstant() - .atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC))); - row.setValue(idx, zonedDateTime); - } catch (ParseException e) { - throw new ErrorRowException( - NAME, String.format("Failed to parse '%s' with pattern '%s'", object, formatter.toPattern()), 1); - } - } else { - throw new ErrorRowException( - NAME, String.format("Column '%s' is of invalid type '%s'. It should be of type 'String'.", - column, object.getClass().getSimpleName()), 2); - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as date using user specified format '%s'", column, formatter.toPattern()) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseTimestamp.java b/wrangler-core/src/main/java/io/cdap/directives/parser/ParseTimestamp.java deleted file mode 100644 index f3a9fd0f1..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/parser/ParseTimestamp.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.time.Instant; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.util.EnumSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -/** - * A Executor to parse timestamp as date. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-timestamp") -@Categories(categories = {"parser", "date"}) -@Description("Parses column values representing unix timestamp as date.") -public class ParseTimestamp implements Directive, Lineage { - public static final String NAME = "parse-timestamp"; - private static final Set SUPPORTED_TIME_UNITS = EnumSet.of(TimeUnit.SECONDS, TimeUnit.MILLISECONDS, - TimeUnit.MICROSECONDS); - private String column; - private TimeUnit timeUnit; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("timeunit", TokenType.TEXT, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.timeUnit = TimeUnit.MILLISECONDS; - - if (args.contains("timeunit")) { - String unitValue = ((Text) args.value("timeunit")).value(); - this.timeUnit = getTimeUnit(unitValue); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - // If the data in the cell is null or is already of date format, then - // continue to next row. - if (object == null || object instanceof ZonedDateTime) { - continue; - } - - long longValue = getLongValue(object); - ZonedDateTime zonedDateTime = getZonedDateTime(longValue, timeUnit, ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - row.setValue(idx, zonedDateTime); - } - } - return rows; - } - - private static TimeUnit getTimeUnit(String unitValue) throws DirectiveParseException { - TimeUnit unit; - - try { - unit = TimeUnit.valueOf(unitValue.toUpperCase()); - } catch (IllegalArgumentException e) { - throw new DirectiveParseException( - NAME, String.format("Time unit '%s' is not a supported time unit. Supported time units are %s", - unitValue, SUPPORTED_TIME_UNITS), e); - } - - if (!SUPPORTED_TIME_UNITS.contains(unit)) { - throw new DirectiveParseException( - NAME, String.format("Time unit '%s' is not a supported time unit. Supported time units are %s", - unitValue, SUPPORTED_TIME_UNITS)); - } - - return unit; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Parsed column '%s' as a timestamp using time unit as '%s'", column, timeUnit) - .relation(column, column) - .build(); - } - - private long getLongValue(Object object) throws ErrorRowException { - String errorMsg = String.format("Invalid type '%s' of column '%s'. Must be of type 'Long' or 'String'.", - object.getClass().getSimpleName(), column); - try { - if (object instanceof Long) { - return (long) object; - } else if (object instanceof String) { - return Long.parseLong((String) object); - } - } catch (Exception e) { - // Exception while casting the object, do not handle it here, so that ErrorRowException is thrown. - errorMsg = String.format("Invalid value for column '%s'. Must be of type 'Long' or 'String' " + - "representing long.", column); - } - - throw new ErrorRowException(NAME, errorMsg, 2); - } - - private ZonedDateTime getZonedDateTime(long ts, TimeUnit unit, ZoneId zoneId) { - long mod = unit.convert(1, TimeUnit.SECONDS); - int fraction = (int) (ts % mod); - long tsInSeconds = unit.toSeconds(ts); - // create an Instant with time in seconds and fraction which will be stored as nano seconds. - Instant instant = Instant.ofEpochSecond(tsInSeconds, unit.toNanos(fraction)); - return ZonedDateTime.ofInstant(instant, zoneId); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/row/Fail.java b/wrangler-core/src/main/java/io/cdap/directives/row/Fail.java deleted file mode 100644 index 880ffc63c..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/row/Fail.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.EntityCountMetric; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.Expression; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.expression.EL; -import io.cdap.wrangler.expression.ELContext; -import io.cdap.wrangler.expression.ELException; -import io.cdap.wrangler.expression.ELResult; - -import java.util.List; - -import static io.cdap.wrangler.metrics.JexlCategoryMetricUtils.getJexlCategoryMetric; - -/** - * A directive for erroring the processing if condition is set to true. - */ -@Plugin(type = Directive.TYPE) -@Name(Fail.NAME) -@Categories(categories = { "row", "data-quality"}) -@Description("Fails when the condition is evaluated to true.") -public class Fail implements Directive, Lineage { - public static final String NAME = "fail"; - private String condition; - private EL el; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("condition", TokenType.EXPRESSION); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - Expression expression = args.value("condition"); - if (expression.value().isEmpty()) { - throw new DirectiveParseException( - NAME, "No condition has been specified. Make sure condition is provided"); - } - condition = expression.value(); - try { - el = EL.compile(condition); - } catch (ELException e) { - throw new DirectiveParseException(NAME, e.getMessage(), e); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException { - for (Row row : rows) { - // Move the fields from the row into the context. - ELContext ctx = new ELContext(context, el, row); - - // Execution of the script / expression based on the row data - // mapped into context. - try { - ELResult result = el.execute(ctx); - if (result.getBoolean()) { - throw new DirectiveExecutionException( - NAME, String.format("Condition '%s' evaluated to true. Terminating processing.", condition)); - } - } catch (ELException e) { - throw new DirectiveExecutionException(NAME, e.getMessage(), e); - } - } - return rows; - } - - @Override - public Mutation lineage() { - Mutation.Builder builder = Mutation.builder() - .readable(String.format("Pipeline set to fail based on condition '%s'", condition)); - el.variables().forEach(col -> builder.relation(col, col)); - return builder.build(); - } - - @Override - public List getCountMetrics() { - EntityCountMetric jexlCategoryMetric = getJexlCategoryMetric(el.getScriptParsedText()); - return (jexlCategoryMetric == null) ? null : ImmutableList.of(jexlCategoryMetric); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/row/Flatten.java b/wrangler-core/src/main/java/io/cdap/directives/row/Flatten.java deleted file mode 100644 index 4a05dee49..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/row/Flatten.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.directives.parser.JsParser; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * A directive that Flattens a record - */ -@Plugin(type = Directive.TYPE) -@Name(Flatten.NAME) -@Categories(categories = { "row"}) -@Description("Separates array elements of one or more columns into individual records, copying the other columns.") -public class Flatten implements Directive, Lineage { - public static final String NAME = "flatten"; - // Column within the input row that needs to be parsed as Json - private String[] columns; - private int[] locations; - private int count = 0; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME_LIST); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - List cols = ((ColumnNameList) args.value("column")).value(); - columns = new String[cols.size()]; - columns = cols.toArray(columns); - locations = new int[columns.length]; - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - - // Iterate through the rows. - for (Row row : rows) { - count = 0; - // Only once find the location of the columns to be flatten within - // the row. It's assumed that all rows to passed to this - // instance are same. - for (String column : columns) { - locations[count] = row.find(column); - ++count; - } - // For each row we find the maximum number of - // values in each of the columns specified to be - // flattened. - int max = Integer.MIN_VALUE; - for (int i = 0; i < count; ++i) { - if (locations[i] != -1) { - Object value = row.getValue(locations[i]); - int m = -1; - if (value instanceof JsonArray) { - m = ((JsonArray) value).size(); - } else if (value instanceof List) { - m = ((List) value).size(); - } else { - m = 1; - } - if (m > max) { - max = m; - } - } - } - - if (max == 0) { - Row newRow = new Row(row); - for (int i = 0; i < count; ++i) { - if (locations[i] != -1) { - newRow.setValue(locations[i], null); - } - } - results.add(newRow); - continue; - } - - // We iterate through the arrays and populate all the columns. - for (int k = 0; k < max; ++k) { - Row r = new Row(row); - for (int i = 0; i < count; ++i) { - if (locations[i] != -1) { - Object value = row.getValue(locations[i]); - if (value == null) { - r.add(columns[i], null); - } else { - Object v = null; - if (value instanceof JsonArray) { - JsonArray array = (JsonArray) value; - if (k < array.size()) { - v = array.get(k); - } - } else if (value instanceof List) { - List array = (List) value; - if (k < array.size()) { - v = array.get(k); - } - } else { - v = value; - } - if (v == null) { - r.addOrSet(columns[i], null); - } else { - if (v instanceof JsonElement) { - r.setValue(locations[i], JsParser.getValue((JsonElement) v)); - } else { - r.setValue(locations[i], v); - } - } - } - } else { - r.addOrSet(columns[i], null); - } - } - results.add(r); - } - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Expanded to individual records based on values in columns '%s''", Arrays.asList(columns)) - .all(Many.columns(columns), Many.columns(columns)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/row/RecordConditionFilter.java b/wrangler-core/src/main/java/io/cdap/directives/row/RecordConditionFilter.java deleted file mode 100644 index b3eb4adb2..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/row/RecordConditionFilter.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.EntityCountMetric; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.Bool; -import io.cdap.wrangler.api.parser.Expression; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.expression.EL; -import io.cdap.wrangler.expression.ELContext; -import io.cdap.wrangler.expression.ELException; - -import java.util.ArrayList; -import java.util.List; - -import static io.cdap.wrangler.metrics.JexlCategoryMetricUtils.getJexlCategoryMetric; - -/** - * A Wrangle step for filtering rows based on the condition. - * - *

- * This step will evaluate the condition, if the condition evaluates to - * true, then the row will be skipped. If the condition evaluates to - * false, then the row will be accepted. - *

- */ -@Plugin(type = Directive.TYPE) -@Name(RecordConditionFilter.NAME) -@Categories(categories = { "row", "data-quality"}) -@Description("Filters rows based on condition type specified.") -public class RecordConditionFilter implements Directive, Lineage { - public static final String NAME = "filter-row"; - private EL el; - private boolean isTrue; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("condition", TokenType.EXPRESSION); - builder.define("type", TokenType.BOOLEAN, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - isTrue = true; - if (args.contains("type")) { - isTrue = ((Bool) args.value("type")).value(); - } - String condition = ((Expression) args.value("condition")).value(); - try { - el = EL.compile(condition); - } catch (ELException e) { - throw new DirectiveParseException(NAME, e.getMessage(), e); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - for (Row row : rows) { - // Move the fields from the row into the context. - ELContext ctx = new ELContext(context, el, row); - if (context != null) { - for (String variable : context.getTransientStore().getVariables()) { - ctx.set(variable, context.getTransientStore().get(variable)); - } - } - try { - Boolean result = el.execute(ctx).getBoolean(); - if (!isTrue) { - result = !result; - } - if (result) { - continue; - } - } catch (ELException e) { - throw new DirectiveExecutionException(NAME, e.getMessage(), e); - } - results.add(row); - } - return results; - } - - @Override - public Mutation lineage() { - Mutation.Builder builder = Mutation.builder() - .readable("Filtered records based on columns '%s'", el.variables()); - el.variables().forEach(column -> builder.relation(column, column)); - return builder.build(); - } - - @Override - public List getCountMetrics() { - EntityCountMetric jexlCategoryMetric = getJexlCategoryMetric(el.getScriptParsedText()); - return (jexlCategoryMetric == null) ? null : ImmutableList.of(jexlCategoryMetric); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/row/RecordMissingOrNullFilter.java b/wrangler-core/src/main/java/io/cdap/directives/row/RecordMissingOrNullFilter.java deleted file mode 100644 index e6a6c8d8d..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/row/RecordMissingOrNullFilter.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Filters records if they don't have all the columns specified or they have null values or combination. - */ -@Plugin(type = Directive.TYPE) -@Name(RecordMissingOrNullFilter.NAME) -@Categories(categories = { "row", "data-quality"}) -@Description("Filters row that have empty or null columns.") -public class RecordMissingOrNullFilter implements Directive, Lineage { - public static final String NAME = "filter-empty-or-null"; - private String[] columns; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME_LIST); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - List cols = ((ColumnNameList) args.value("column")).value(); - columns = new String[cols.size()]; - columns = cols.toArray(columns); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - for (Row row : rows) { - boolean missingOrNull = true; - for (String column : columns) { - int idx = row.find(column.trim()); - if (idx != -1) { - Object value = row.getValue(idx); - if (value != null) { - missingOrNull = false; - } - } else { - results.add(row); - } - } - if (!missingOrNull) { - results.add(row); - } - } - return results; - } - - @Override - public Mutation lineage() { - List cols = Arrays.asList(columns); - Mutation.Builder builder = Mutation.builder() - .readable("Filtered null or empty records based on check on columns '%s'", cols); - cols.forEach(column -> builder.relation(column, column)); - return builder.build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/row/RecordRegexFilter.java b/wrangler-core/src/main/java/io/cdap/directives/row/RecordRegexFilter.java deleted file mode 100644 index 5e7a6d7de..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/row/RecordRegexFilter.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Identifier; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; - -/** - * A Wrangle step for filtering rows that match the pattern specified on the column. - */ -@Plugin(type = Directive.TYPE) -@Name(RecordRegexFilter.NAME) -@Categories(categories = { "row", "data-quality"}) -@Description("Filters rows if the regex is matched or not matched.") -public class RecordRegexFilter implements Directive, Lineage { - public static final String NAME = "filter-by-regex"; - private String column; - private Pattern pattern; - private boolean matched = false; - - // filter-by-regex if-matched :column 'expression' - // filter-by-regex if-not-matched :column 'expression' - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("match-type", TokenType.IDENTIFIER); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("regex", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - String matchType = ((Identifier) args.value("match-type")).value(); - if (matchType.equalsIgnoreCase("if-matched")) { - matched = true; - } else if (matchType.equalsIgnoreCase("if-not-matched")) { - matched = false; - } else { - throw new DirectiveParseException( - NAME, "Match type specified is not 'if-matched' or 'if-not-matched'"); - } - column = ((ColumnName) args.value("column")).value(); - String regex = ((Text) args.value("regex")).value(); - if (!regex.equalsIgnoreCase("null") && !regex.isEmpty()) { - pattern = Pattern.compile(regex); - } else { - pattern = null; - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - if (pattern == null) { - return rows; - } - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String', " + - "'JSONObject' or 'Number'.", column)); - } - - if (object instanceof JSONObject) { - if (pattern == null && JSONObject.NULL.equals(object)) { - continue; - } - } else if (object instanceof String) { - if (matchPattern((String) row.getValue(idx))) { - continue; - } - } else if (object instanceof Number) { - if (matchPattern((row.getValue(idx)).toString())) { - continue; - } - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' is of invalid type '%s'. It should be of type " + - "'String', 'JSONObject' or 'Number'.", column, object.getClass().getSimpleName()) - ); - } - results.add(row); - } else { - results.add(row); - } - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Filtered column '%s' based on whether the expression '%s' %s ", - column, pattern, matched ? "matched" : "not matched") - .relation(column, column) - .build(); - } - - private boolean matchPattern(String value) { - boolean matches = pattern.matcher(value).matches(); // pattern.matcher(value).matches(); - if (!matched) { - matches = !matches; - } - return matches; - } -} - diff --git a/wrangler-core/src/main/java/io/cdap/directives/row/SendToError.java b/wrangler-core/src/main/java/io/cdap/directives/row/SendToError.java deleted file mode 100644 index 7cbd4bf82..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/row/SendToError.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.EntityCountMetric; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.Expression; -import io.cdap.wrangler.api.parser.Identifier; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.expression.EL; -import io.cdap.wrangler.expression.ELContext; -import io.cdap.wrangler.expression.ELException; -import io.cdap.wrangler.expression.ELResult; - -import java.util.ArrayList; -import java.util.List; - -import static io.cdap.wrangler.metrics.JexlCategoryMetricUtils.getJexlCategoryMetric; - -/** - * A directive for erroring the record if - * - *

- * This step will evaluate the condition, if the condition evaluates to - * true, then the row will be skipped. If the condition evaluates to - * false, then the row will be accepted. - *

- */ -@Plugin(type = Directive.TYPE) -@Name(SendToError.NAME) -@Categories(categories = { "row", "data-quality"}) -@Description("Send records that match condition to the error collector.") -public class SendToError implements Directive, Lineage { - public static final String NAME = "send-to-error"; - private EL el; - private String condition; - private String metric = null; - private String message = null; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("condition", TokenType.EXPRESSION); - builder.define("metric", TokenType.IDENTIFIER, Optional.TRUE); - builder.define("message", TokenType.TEXT, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - condition = ((Expression) args.value("condition")).value(); - try { - el = EL.compile(condition); - } catch (ELException e) { - throw new DirectiveParseException( - NAME, String.format(" Invalid condition '%s'.", condition) - ); - } - if (args.contains("metric")) { - metric = ((Identifier) args.value("metric")).value(); - } - if (args.contains("message")) { - message = ((Text) args.value("message")).value(); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - List results = new ArrayList<>(); - for (Row row : rows) { - // Move the fields from the row into the context. - ELContext ctx = new ELContext(context, el, row); - - // Transient variables are added. - if (context != null) { - for (String variable : context.getTransientStore().getVariables()) { - ctx.set(variable, context.getTransientStore().get(variable)); - } - } - - // Execution of the script / expression based on the row data - // mapped into context. - try { - ELResult result = el.execute(ctx); - if (result.getBoolean()) { - if (metric != null && context != null) { - context.getMetrics().count(metric, 1); - } - if (message == null) { - message = condition; - } - throw new ErrorRowException(NAME, message, 1); - } - } catch (ELException e) { - throw new DirectiveExecutionException(NAME, e.getMessage(), e); - } - results.add(row); - } - return results; - } - - @Override - public Mutation lineage() { - Mutation.Builder builder = Mutation.builder() - .readable("Redirecting records to error path based on expression '%s'", condition); - el.variables().forEach(column -> builder.relation(column, column)); - return builder.build(); - } - - @Override - public List getCountMetrics() { - EntityCountMetric jexlCategoryMetric = getJexlCategoryMetric(el.getScriptParsedText()); - return (jexlCategoryMetric == null) ? null : ImmutableList.of(jexlCategoryMetric); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/row/SendToErrorAndContinue.java b/wrangler-core/src/main/java/io/cdap/directives/row/SendToErrorAndContinue.java deleted file mode 100644 index 20922d1e8..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/row/SendToErrorAndContinue.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.EntityCountMetric; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.ReportErrorAndProceed; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.TransientVariableScope; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.Expression; -import io.cdap.wrangler.api.parser.Identifier; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.expression.EL; -import io.cdap.wrangler.expression.ELContext; -import io.cdap.wrangler.expression.ELException; -import io.cdap.wrangler.expression.ELResult; - -import java.util.ArrayList; -import java.util.List; - -import static io.cdap.wrangler.metrics.JexlCategoryMetricUtils.getJexlCategoryMetric; - -/** - * A directive for erroring the record if - * - *

- * This step will evaluate the condition, if the condition evaluates to - * true, then the row will be skipped. If the condition evaluates to - * false, then the row will be accepted. - *

- */ -@Plugin(type = Directive.TYPE) -@Name(SendToErrorAndContinue.NAME) -@Categories(categories = { "row", "data-quality"}) -@Description("Send records that match condition to the error collector and continues processing.") -public class SendToErrorAndContinue implements Directive, Lineage { - public static final String NAME = "send-to-error-and-continue"; - private EL el; - private String condition; - private String metric = null; - private String message = null; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("condition", TokenType.EXPRESSION); - builder.define("metric", TokenType.IDENTIFIER, Optional.TRUE); - builder.define("message", TokenType.TEXT, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - condition = ((Expression) args.value("condition")).value(); - try { - el = EL.compile(condition); - } catch (ELException e) { - throw new DirectiveParseException( - NAME, String.format("Invalid condition '%s'.", condition), e); - } - if (args.contains("metric")) { - metric = ((Identifier) args.value("metric")).value(); - } - if (args.contains("message")) { - message = ((Text) args.value("message")).value(); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ReportErrorAndProceed { - if (context != null) { - context.getTransientStore().increment(TransientVariableScope.LOCAL, "dq_total", 1); - } - List results = new ArrayList<>(); - for (Row row : rows) { - // Move the fields from the row into the context. - ELContext ctx = new ELContext(context, el, row); - - // Execution of the script / expression based on the row data - // mapped into context. - try { - ELResult result = el.execute(ctx); - if (result.getBoolean()) { - if (metric != null && context != null) { - context.getMetrics().count(metric, 1); - } - if (message == null) { - message = condition; - } - if (context != null) { - context.getTransientStore().increment(TransientVariableScope.LOCAL, "dq_failure", 1); - } - throw new ReportErrorAndProceed(message, 1); - } else if (context != null && !context.getTransientStore().getVariables().contains("dq_failure")) { - context.getTransientStore().set(TransientVariableScope.LOCAL, "dq_failure", 0L); - } - } catch (ELException e) { - throw new DirectiveExecutionException(NAME, e.getMessage(), e); - } - results.add(row); - } - return results; - } - - @Override - public Mutation lineage() { - Mutation.Builder builder = Mutation.builder() - .readable("Redirect records to error path based on expression'%s'", condition); - el.variables().forEach(column -> builder.relation(column, column)); - return builder.build(); - } - - @Override - public List getCountMetrics() { - EntityCountMetric jexlCategoryMetric = getJexlCategoryMetric(el.getScriptParsedText()); - return (jexlCategoryMetric == null) ? null : ImmutableList.of(jexlCategoryMetric); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/row/SetRecordDelimiter.java b/wrangler-core/src/main/java/io/cdap/directives/row/SetRecordDelimiter.java deleted file mode 100644 index 5b4f57f58..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/row/SetRecordDelimiter.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.List; - -/** - * A directive for parsing a string into record using the record delimiter. - */ -@Plugin(type = Directive.TYPE) -@Name(SetRecordDelimiter.NAME) -@Categories(categories = { "row" }) -@Description("Sets the record delimiter.") -public class SetRecordDelimiter implements Directive, Lineage { - public static final String NAME = "set-record-delim"; - private String column; - private String delimiter; - private int limit; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("delimiter", TokenType.TEXT); - builder.define("limit", TokenType.NUMERIC, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - column = ((ColumnName) args.value("column")).value(); - delimiter = ((Text) args.value("delimiter")).value(); - if (args.contains("limit")) { - Numeric numeric = args.value("limit"); - limit = numeric.value().intValue(); - } else { - limit = Integer.MAX_VALUE; - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException { - List results = new ArrayList<>(); - for (Row row : rows) { - int idx = row.find(column); - if (idx == -1) { - continue; - } - - Object object = row.getValue(idx); - if (object instanceof String) { - String body = (String) object; - String[] lines = body.split(delimiter); - int i = 0; - for (String line : lines) { - if (i > limit) { - break; - } - results.add(new Row(column, line)); - i++; - } - } - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Split value in column '%s' into multiple records using delimiter '%s'", column, delimiter) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/row/SplitToRows.java b/wrangler-core/src/main/java/io/cdap/directives/row/SplitToRows.java deleted file mode 100644 index 8848ed2a9..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/row/SplitToRows.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.List; - -/** - * A directive for splitting the string into multiple {@link Row}s. - */ -@Plugin(type = Directive.TYPE) -@Name(SplitToRows.NAME) -@Categories(categories = { "row"}) -@Description("Splits a column into multiple rows, copies the rest of the columns.") -public class SplitToRows implements Directive, Lineage { - public static final String NAME = "split-to-rows"; - // Column on which to apply mask. - private String column; - - // Regex to split on. - private String regex; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("regex", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - column = ((ColumnName) args.value("column")).value(); - regex = ((Text) args.value("regex")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String'.", column)); - } - - if (object instanceof String) { - String[] lines = ((String) object).split(regex); - for (String line : lines) { - Row r = new Row(row); - r.setValue(idx, line); - results.add(r); - } - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String'.", - column, object.getClass().getSimpleName())); - } - } - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Split column '%s' into multiple rows using expressions '%s'", column, regex) - .relation(Many.columns(column), Many.columns(column)) - .build(); - } -} - diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/CharacterCut.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/CharacterCut.java deleted file mode 100644 index 6910b9e22..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/CharacterCut.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.unix4j.Unix4j; - -import java.util.List; - -/** - * A directive implements unix cut directive. - */ -@Plugin(type = Directive.TYPE) -@Name(CharacterCut.NAME) -@Categories(categories = { "transform"}) -@Description("UNIX-like 'cut' directive for splitting text.") -public class CharacterCut implements Directive, Lineage { - public static final String NAME = "cut-character"; - private String source; - private String destination; - private String range; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("source", TokenType.COLUMN_NAME); - builder.define("destination", TokenType.COLUMN_NAME); - builder.define("ranges", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.source = ((ColumnName) args.value("source")).value(); - this.destination = ((ColumnName) args.value("destination")).value(); - this.range = ((Text) args.value("ranges")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(source); - if (idx != -1) { - Object value = row.getValue(idx); - - if (value == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String'.", source)); - } - - if (value instanceof String) { - String result = Unix4j.fromString((String) value).cut("-c", range).toStringResult(); - row.addOrSet(destination, result); - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String'.", - source, value.getClass().getSimpleName())); - } - } else { - throw new DirectiveExecutionException(NAME, "Scope column '" + source + "' does not exist."); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable(String.format("Character cut from column %s to destination %s using range %s", - source, destination, range)) - .conditional(source, destination) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/ColumnExpression.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/ColumnExpression.java deleted file mode 100644 index 25c9c895b..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/ColumnExpression.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.EntityCountMetric; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Expression; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.expression.EL; -import io.cdap.wrangler.expression.ELContext; -import io.cdap.wrangler.expression.ELException; -import io.cdap.wrangler.expression.ELResult; - -import java.util.List; - -import static io.cdap.wrangler.metrics.JexlCategoryMetricUtils.getJexlCategoryMetric; - -/** - * A directive for apply an expression to store the result in a column. - * - * The expressions are specified in JEXL format (http://commons.apache.org/proper/commons-jexl/reference/syntax.html) - * Executor is response for executing only one expression for each {@link Row} record that is - * being passed. The result of expression either adds a new column or replaces the value of - * the existing column. - * - *

- * Executor step = new ColumnExpression(lineno, directive, column, "if (age > 24 ) { 'adult' } else { 'teen' }"); - *

- */ -@Plugin(type = Directive.TYPE) -@Name(ColumnExpression.NAME) -@Categories(categories = { "transform"}) -@Description("Sets a column by evaluating a JEXL expression.") -public class ColumnExpression implements Directive, Lineage { - public static final String NAME = "set-column"; - // Column to which the result of experience is applied to. - private String column; - // The actual expression - private String expression; - private EL el; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("expression", TokenType.EXPRESSION); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.expression = ((Expression) args.value("expression")).value(); - try { - el = EL.compile(expression); - } catch (ELException e) { - throw new DirectiveParseException(NAME, e.getMessage(), e); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - // Move the fields from the row into the context. - ELContext ctx = new ELContext(context, el, row); - - // Execution of the script / expression based on the row data - // mapped into context. - try { - ELResult result = el.execute(ctx); - int idx = row.find(this.column); - if (idx == -1) { - row.add(this.column, result.getObject()); - } else { - row.setValue(idx, result.getObject()); - } - } catch (ELException e) { - throw new DirectiveExecutionException(NAME, e.getMessage(), e); - } - } - return rows; - } - - @Override - public Mutation lineage() { - Mutation.Builder builder = Mutation.builder() - .readable("Mapped result of expression '%s' to column '%s'", expression, column); - builder.relation(Many.of(el.variables()), column); - el.variables().forEach(col -> { - if (!col.equals(column)) { - builder.relation(col, col); - } - }); - return builder.build(); - } - - @Override - public List getCountMetrics() { - EntityCountMetric jexlCategoryMetric = getJexlCategoryMetric(el.getScriptParsedText()); - return (jexlCategoryMetric == null) ? null : ImmutableList.of(jexlCategoryMetric); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/Decode.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/Decode.java deleted file mode 100644 index c05e34e34..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/Decode.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.apache.commons.codec.DecoderException; -import org.apache.commons.codec.binary.Base32; -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.codec.binary.Hex; - -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.Locale; - -/** - * A directive that decodes a column that was encoded as base-32, base-64, or hex. - */ -@Plugin(type = Directive.TYPE) -@Name(Decode.NAME) -@Categories(categories = { "transform"}) -@Description("Decodes column values using one of base32, base64, or hex.") -public class Decode implements Directive, Lineage { - public static final String NAME = "decode"; - private final Base64 base64Encode = new Base64(); - private final Base32 base32Encode = new Base32(); - private final Hex hexEncode = new Hex(); - private Method method; - private String column; - - /** - * Defines encoding types supported. - */ - public enum Method { - BASE64("BASE64"), - BASE32("BASE32"), - HEX("HEX"); - - private String type; - - Method(String type) { - this.type = type; - } - - String getType() { - return type; - } - } - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("method", TokenType.TEXT); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - String type = ((Text) args.value("method")).value(); - type = type.toUpperCase(); - if (!type.equals("BASE64") && !type.equals("BASE32") && !type.equals("HEX")) { - throw new DirectiveParseException( - NAME, String.format("Decoding type '%s' is not supported. Supported types are base64, base32 & hex.", type)); - } - this.method = Method.valueOf(type); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx == -1) { - continue; - } - - Object object = row.getValue(idx); - if (object == null) { - continue; - } - - byte[] value = new byte[0]; - if (object instanceof String) { - value = ((String) object).getBytes(); - } else if (object instanceof byte[]) { - value = (byte[]) object; - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be a non-null 'String' or 'byte array'.", - column, object.getClass().getSimpleName())); - } - - byte[] out = new byte[0]; - if (method == Method.BASE32) { - out = base32Encode.decode(value); - } else if (method == Method.BASE64) { - out = base64Encode.decode(value); - } else if (method == Method.HEX) { - try { - out = hexEncode.decode(value); - } catch (DecoderException e) { - throw new DirectiveExecutionException( - NAME, String.format("Failed to decode hex value. %s", e.getMessage()), e); - } - } else { - throw new DirectiveExecutionException( - NAME, String.format("Specified decoding type '%s' is not supported. Supported types are base64, " + - "base32 & hex.", method.toString())); - } - - String obj = new String(out, StandardCharsets.UTF_8); - row.addOrSet(String.format("%s_decode_%s", column, method.toString().toLowerCase(Locale.ENGLISH)), obj); - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Decoded column '%s' using method '%s'", column, method.getType()) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/Encode.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/Encode.java deleted file mode 100644 index abd1378fe..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/Encode.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.apache.commons.codec.binary.Base32; -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.codec.binary.Hex; - -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.Locale; - -/** - * A directive that encodes a column as base-32, base-64, or hex. - */ -@Plugin(type = Directive.TYPE) -@Name(Encode.NAME) -@Categories(categories = { "transform"}) -@Description("Encodes column values using one of base32, base64, or hex.") -public class Encode implements Directive, Lineage { - public static final String NAME = "encode"; - private final Base64 base64Encode = new Base64(); - private final Base32 base32Encode = new Base32(); - private final Hex hexEncode = new Hex(); - private Method method; - private String column; - - /** - * Defines encoding types supported. - */ - public enum Method { - BASE64("BASE64"), - BASE32("BASE32"), - HEX("HEX"); - - private String type; - - Method(String type) { - this.type = type; - } - - String getType() { - return type; - } - } - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("method", TokenType.TEXT); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - String value = ((Text) args.value("method")).value(); - value = value.toUpperCase(); - if (!value.equals("BASE64") && !value.equals("BASE32") && !value.equals("HEX")) { - throw new DirectiveParseException( - NAME, String.format("Type of encoding specified '%s' is not supported. Supported types are " + - "base64, base32 & hex.", value)); - } - this.method = Method.valueOf(value); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx == -1) { - continue; - } - - Object object = row.getValue(idx); - if (object == null) { - continue; - } - - byte[] value = new byte[0]; - if (object instanceof String) { - value = ((String) object).getBytes(); - } else if (object instanceof byte[]) { - value = (byte[]) object; - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String' or 'byte array'.", - column, object.getClass().getSimpleName())); - } - - byte[] out = new byte[0]; - if (method == Method.BASE32) { - out = base32Encode.encode(value); - } else if (method == Method.BASE64) { - out = base64Encode.encode(value); - } else if (method == Method.HEX) { - out = hexEncode.encode(value); - } else { - throw new DirectiveExecutionException( - NAME, String.format("Specified encoding type '%s' is not supported. Supported types are base64, " + - "base32 & hex.", method.toString())); - } - - String obj = new String(out, StandardCharsets.UTF_8); - row.addOrSet(String.format("%s_encode_%s", column, method.toString().toLowerCase(Locale.ENGLISH)), obj); - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Encoded column '%s' using method '%s'", column, method.getType()) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/ExtractRegexGroups.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/ExtractRegexGroups.java deleted file mode 100644 index 1028915f5..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/ExtractRegexGroups.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * A directive extracts regex groups into separate columns. - */ -@Plugin(type = Directive.TYPE) -@Name(ExtractRegexGroups.NAME) -@Categories(categories = { "transform"}) -@Description("Extracts data from a regex group into its own column.") -public class ExtractRegexGroups implements Directive, Lineage { - public static final String NAME = "extract-regex-groups"; - private String column; - private String regex; - private Pattern pattern; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("regex", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.regex = ((Text) args.value("regex")).value(); - pattern = Pattern.compile(regex); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object value = row.getValue(idx); - if (value != null && value instanceof String) { - Matcher matcher = pattern.matcher((String) value); - int count = 1; - while (matcher.find()) { - for (int i = 1; i <= matcher.groupCount(); i++) { - row.add(String.format("%s_%d_%d", column, count, i), matcher.group(i)); - } - count++; - } - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Split column '%s' based on expression '%s' ", column, regex) - .all(Many.of(column), Many.of(column)) - .build(); - } -} - diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/FillNullOrEmpty.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/FillNullOrEmpty.java deleted file mode 100644 index 45542b254..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/FillNullOrEmpty.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.json.JSONObject; - -import java.util.List; - -/** - * A directive to fill null or empty column values with a fixed value. - */ -@Plugin(type = Directive.TYPE) -@Name(FillNullOrEmpty.NAME) -@Categories(categories = { "transform"}) -@Description("Fills a value of a column with a fixed value if it is either null or empty.") -public class FillNullOrEmpty implements Directive, Lineage { - public static final String NAME = "fill-null-or-empty"; - private String column; - private String value; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("value", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.value = ((Text) args.value("value")).value(); - if (value != null && value.isEmpty()) { - throw new DirectiveParseException(NAME, "Fixed value cannot be an empty string"); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx == -1) { - row.add(column, value); - continue; - } - Object object = row.getValue(idx); - if (object == null) { - row.setValue(idx, value); - } else { - if (object instanceof String) { - if (((String) object).isEmpty()) { - row.setValue(idx, value); - } - } else if (object instanceof JSONObject) { - if (JSONObject.NULL.equals(object)) { - row.setValue(idx, value); - } - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Filled column '%s' values that were null or empty with value %s", column, value) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/FindAndReplace.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/FindAndReplace.java deleted file mode 100644 index 775d1d2e8..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/FindAndReplace.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.unix4j.Unix4j; -import org.unix4j.builder.Unix4jCommandBuilder; - -import java.util.ArrayList; -import java.util.List; - -/** - * A directive for 'find-and-replace' transformations on the column. - */ -@Plugin(type = Directive.TYPE) -@Name(FindAndReplace.NAME) -@Categories(categories = { "transform"}) -@Description("Finds and replaces text in column values using a sed-format expression.") -public class FindAndReplace implements Directive, Lineage { - public static final String NAME = "find-and-replace"; - private String pattern; - private List columns; - - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME_LIST); - builder.define("pattern", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.columns = ((ColumnNameList) args.value("column")).value(); - this.pattern = ((Text) args.value("pattern")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - for (Row row : rows) { - for (String column : columns) { - int idx = row.find(column); - if (idx != -1) { - Object v = row.getValue(idx); - // Operates only on String types. - try { - if (v instanceof String) { - String value = (String) v; // Safely converts to String. - Unix4jCommandBuilder builder = Unix4j.echo(value).sed(pattern); - if (builder.toExitValue() == 0) { - row.setValue(idx, builder.toStringResult()); - } - } - } catch (Exception e) { - // If there is any issue, we pass it on without any transformation. - } - } - results.add(row); - } - } - return results; - } - - @Override - public Mutation lineage() { - Mutation.Builder builder = Mutation.builder() - .readable("Found and replaced '%s' using expression '%s'", columns, pattern); - columns.forEach(column -> builder.relation(column, column)); - return builder.build(); - } -} - diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/GenerateUUID.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/GenerateUUID.java deleted file mode 100644 index 46656f5a5..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/GenerateUUID.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; -import java.util.Random; -import java.util.UUID; - -/** - * A directive to generate a UUID. - */ -@Plugin(type = Directive.TYPE) -@Name(GenerateUUID.NAME) -@Categories(categories = { "transform", "uuid"}) -@Description("Populates a column with a universally unique identifier (UUID) of the record.") -public class GenerateUUID implements Directive, Lineage { - public static final String NAME = "generate-uuid"; - private String column; - private Random random; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.random = new Random(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - UUID uuid = UUID.randomUUID(); - if (idx != -1) { - row.setValue(idx, uuid.toString()); - } else { - row.add(column, uuid.toString()); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Generated unique identifier based on column '%s'", column) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/IndexSplit.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/IndexSplit.java deleted file mode 100644 index 6cde1e4d0..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/IndexSplit.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.List; - -/** - * A directive for splitting a col into two additional columns based on a start and end. - */ -@Plugin(type = Directive.TYPE) -@Name(IndexSplit.NAME) -@Categories(categories = { "transform"}) -@Description("[DEPRECATED] Use the 'split-to-columns' or 'parse-as-fixed-length' directives instead.") -@Deprecated -public class IndexSplit implements Directive { - public static final String NAME = "indexsplit"; - // Name of the column to be split - private String col; - - // Start and end index of the split - private int start, end; - - // Destination column - private String dest; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("source", TokenType.COLUMN_NAME); - builder.define("start", TokenType.NUMERIC); - builder.define("end", TokenType.NUMERIC); - builder.define("destination", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.col = ((ColumnName) args.value("source")).value(); - this.start = ((Numeric) args.value("start")).value().intValue(); - this.end = ((Numeric) args.value("end")).value().intValue(); - this.dest = ((ColumnName) args.value("destination")).value(); - this.start = this.start - 1; - this.end = this.end - 1; - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - for (Row row : rows) { - int idx = row.find(col); - - if (idx != -1) { - String val = (String) row.getValue(idx); - if (end > val.length() - 1) { - end = val.length() - 1; - } - if (start < 0) { - start = 0; - } - val = val.substring(start, end); - row.add(dest, val); - } else { - throw new DirectiveExecutionException( - col + " is not of type string in the row. Please check the wrangle configuration." - ); - } - results.add(row); - } - return results; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/LeftTrim.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/LeftTrim.java deleted file mode 100644 index f739d003e..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/LeftTrim.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; - -/** - * A directive for trimming whitespace from left side of a string - */ -@Plugin(type = Directive.TYPE) -@Name(LeftTrim.NAME) -@Categories(categories = { "transform"}) -@Description("Trimming whitespace from left side of a string.") -public class LeftTrim implements Directive, Lineage { - public static final String NAME = "ltrim"; - // Columns of the column to be upper-cased - private String col; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.col = ((ColumnName) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(col); - if (idx != -1) { - Object object = row.getValue(idx); - if (object instanceof String) { - if (object != null) { - String value = (String) object; - row.setValue(idx, Trimmer.ltrim(value)); - } - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Removed spaces on the left in values of column '%s'", col) - .relation(col, col) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/Lower.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/Lower.java deleted file mode 100644 index e96af4c27..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/Lower.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; - -/** - * A directive for lower casing the 'column' value of type String. - */ -@Plugin(type = Directive.TYPE) -@Name(Lower.NAME) -@Categories(categories = { "transform"}) -@Description("Changes the column values to lowercase.") -public class Lower implements Directive, Lineage { - public static final String NAME = "lowercase"; - // Columns of the column to be lower cased. - private String column; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object instanceof String) { - if (object != null) { - String value = (String) object; - row.setValue(idx, value.toLowerCase()); - } - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Lower cased the characters of values in column '%s'", column) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/MaskNumber.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/MaskNumber.java deleted file mode 100644 index 7f465dd8a..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/MaskNumber.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.utils.TypeConvertor; - -import java.util.List; - -/** - * A directive that applies substitution masking on the column. - * - *

- * Substitution masking is generally used for masking credit card or SSN numbers. - * This type of masking is fixed masking, where the pattern is applied on the - * fixed length string. - * - *

    - *
  • Use of # will include the digit from the position.
  • - *
  • Use x/X to mask the digit at that position (converted to lowercase x in the result)
  • - *
  • Any other characters will be inserted as-is.
  • - *
- * - *
- *
- *        Executor step = new MaskNumber(lineno, line, "ssn", "XXX-XX-####", 1);
- *        Executor step = new MaskNumber(lineno, line, "amex", "XXXX-XXXXXX-X####", 1);
- *    
- *
- *

- */ -@Plugin(type = Directive.TYPE) -@Name(MaskNumber.NAME) -@Categories(categories = { "transform"}) -@Description("Masks a column value using the specified masking pattern.") -public class MaskNumber implements Directive, Lineage { - public static final String NAME = "mask-number"; - // Specifies types of mask - public static final int MASK_NUMBER = 1; - public static final int MASK_SHUFFLE = 2; - - // Masking pattern - private String mask; - - // Column on which to apply mask. - private String column; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("mask", TokenType.TEXT); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.mask = ((Text) args.value("mask")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - String value = TypeConvertor.toString(row.getValue(idx)); - if (value == null) { - continue; - } - row.setValue(idx, maskNumber(value, mask)); - } else { - row.add(column, new String("")); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Masked numbers in the column '%s' using masking pattern '%s'", column, mask) - .relation(column, column) - .build(); - } - - private String maskNumber(String number, String mask) { - int index = 0; - StringBuilder masked = new StringBuilder(); - for (int i = 0; i < mask.length(); i++) { - char c = mask.charAt(i); - if (c == '#') { - // if we have print numbers and the mask index has exceed, we continue further. - if (index > number.length() - 1) { - continue; - } - masked.append(number.charAt(index)); - index++; - } else if (c == 'x' || c == 'X') { - masked.append(Character.toLowerCase(c)); - index++; - } else { - if (index < number.length()) { - char c1 = number.charAt(index); - if (c1 == c) { - index++; - } - } - masked.append(c); - } - } - return masked.toString(); - } -} - - diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/MaskShuffle.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/MaskShuffle.java deleted file mode 100644 index 591fd7daf..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/MaskShuffle.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -/** - * A Wrangler plugin that applies shuffling masking on the column. - * - *

- * Fixed length shuffle masking performs obfuscation by using random character - * substitution method. The data is randomly shuffled in the column. - * - *

- *
- *       Executor step = new MaskNumber(lineno, line, "150 Mars Avenue, Marcity, Mares", 2);
- *     
- *
- *

- */ -@Plugin(type = Directive.TYPE) -@Name(MaskShuffle.NAME) -@Categories(categories = { "transform"}) -@Description("Masks a column value by shuffling characters while maintaining the same length.") -public class MaskShuffle implements Directive, Lineage { - public static final String NAME = "mask-shuffle"; - // Column on which to apply mask. - private String column; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - for (Row row : rows) { - Row masked = new Row(row); - int idx = row.find(column); - if (idx != -1) { - masked.setValue(idx, maskShuffle((String) row.getValue(idx), 0)); - } else { - throw new DirectiveExecutionException(NAME, String.format("Column '%s' does not exist.", column)); - } - results.add(masked); - } - - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Masked column '%s' by shuffling the values", column) - .relation(column, column) - .build(); - } - - private String maskShuffle(String str, int seed) { - final String cons = "bcdfghjklmnpqrstvwxz"; - final String vowel = "aeiouy"; - final String digit = "0123456789"; - - Random r = new Random(seed); - char data[] = str.toCharArray(); - - for (int n = 0; n < data.length; ++n) { - char ln = Character.toLowerCase(data[n]); - if (cons.indexOf(ln) >= 0) { - data[n] = randomChar(r, cons, ln != data[n]); - } else if (vowel.indexOf(ln) >= 0) { - data[n] = randomChar(r, vowel, ln != data[n]); - } else if (digit.indexOf(ln) >= 0) { - data[n] = randomChar(r, digit, ln != data[n]); - } - } - return new String(data); - } - - private char randomChar(Random r, String cs, boolean uppercase) { - char c = cs.charAt(r.nextInt(cs.length())); - return uppercase ? Character.toUpperCase(c) : c; - } -} - diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/MessageHash.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/MessageHash.java deleted file mode 100644 index a0cfba694..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/MessageHash.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.EntityCountMetric; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.Bool; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.List; -import java.util.Set; - -/** - * A Executor to generate a message digest or hash of a column value. . - */ -@Plugin(type = Directive.TYPE) -@Name(MessageHash.NAME) -@Categories(categories = { "transform", "hash"}) -@Description("Creates a message digest for the column using algorithm, replacing the column value.") -public class MessageHash implements Directive, Lineage { - public static final String NAME = "hash"; - private static final Set algorithms = ImmutableSet.of( - "BLAKE2B-160", - "BLAKE2B-256", - "BLAKE2B-384", - "BLAKE2B-512", - "GOST3411-2012-256", - "GOST3411-2012-512", - "GOST3411", - "KECCAK-224", - "KECCAK-256", - "KECCAK-288", - "KECCAK-384", - "KECCAK-512", - "MD2", - "MD2", - "MD4", - "MD5", - "RIPEMD128", - "RIPEMD160", - "RIPEMD256", - "RIPEMD320", - "SHA-1", - "SHA-224", - "SHA-256", - "SHA-384", - "SHA-512", - "SHA-512/224", - "SHA-512/256", - "SHA", - "SHA3-224", - "SHA3-256", - "SHA3-384", - "SHA3-512", - "Skein-1024-1024", - "Skein-1024-384", - "Skein-1024-512", - "Skein-256-128", - "Skein-256-160", - "Skein-256-224", - "Skein-256-256", - "Skein-512-128", - "Skein-512-160", - "Skein-512-224", - "Skein-512-256", - "Skein-512-384", - "Skein-512-512", - "SM3", - "Tiger", - "TIGER", - "WHIRLPOOL" - ); - private static final String HASH_ALGORITHM_METRIC_NAME = "wrangler.hash-algo.count"; - private static final int HASH_ALGORITHM_COUNT = 1; - private static final String HASH_ALGORITHM_ENTITY_NAME = "directive-hash-algo"; - private String column; - private boolean encode; - private MessageDigest digest; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("algorithm", TokenType.TEXT); - builder.define("encode", TokenType.BOOLEAN, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - Text algorithm = args.value("algorithm"); - if (!MessageHash.isValid(algorithm.value())) { - throw new DirectiveParseException( - NAME, String.format("Algorithm '%s' specified at line %d is not supported.", algorithm, args.line())); - } - try { - this.digest = MessageDigest.getInstance(algorithm.value()); - } catch (NoSuchAlgorithmException e) { - throw new DirectiveParseException( - NAME, String.format("Unable to find algorithm '%s' specified at line %d.", algorithm, args.line())); - } - - this.encode = false; - if (args.contains("encode")) { - this.encode = ((Bool) args.value("encode")).value(); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Anonymized the column '%s'", column) - .relation(column, column) - .build(); - } - - public static boolean isValid(String algorithm) { - return (algorithm != null && algorithms.contains(algorithm)); - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String' or 'byte array'.", - column)); - } - - byte[] message; - if (object instanceof String) { - message = ((String) object).getBytes(StandardCharsets.UTF_8); - } else if (object instanceof byte[]) { - message = ((byte[]) object); - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String' or 'byte array'.", - column, object.getClass().getSimpleName())); - } - - digest.update(message); - byte[] hashed = digest.digest(); - - if (encode) { - // hex with left zero padding: - String hasedHex = String.format("%064x", new java.math.BigInteger(1, hashed)); - row.addOrSet(column, hasedHex); - } else { - row.addOrSet(column, hashed); - } - } else { - throw new DirectiveExecutionException(NAME, String.format("Column '%s' does not exist.", column)); - } - } - return rows; - } - - @Override - public List getCountMetrics() { - return ImmutableList.of( - new EntityCountMetric(HASH_ALGORITHM_METRIC_NAME, HASH_ALGORITHM_ENTITY_NAME, - digest.getAlgorithm(), HASH_ALGORITHM_COUNT)); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/Quantization.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/Quantization.java deleted file mode 100644 index 20e90f272..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/Quantization.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import com.google.common.collect.Range; -import com.google.common.collect.RangeMap; -import com.google.common.collect.TreeRangeMap; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.Triplet; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.Ranges; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.List; - -/** - * A Wrangler step for quantizing a column. - */ -@Plugin(type = Directive.TYPE) -@Name(Quantization.NAME) -@Categories(categories = { "transform"}) -@Description("Quanitize the range of numbers into label values.") -public class Quantization implements Directive, Lineage { - public static final String NAME = "quantize"; - private final RangeMap rangeMap = TreeRangeMap.create(); - private String col1; - private String col2; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("source", TokenType.COLUMN_NAME); - builder.define("destination", TokenType.COLUMN_NAME); - builder.define("ranges", TokenType.RANGES); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.col1 = ((ColumnName) args.value("source")).value(); - this.col2 = ((ColumnName) args.value("destination")).value(); - List> ranges = ((Ranges) args.value("ranges")).value(); - for (Triplet range : ranges) { - double lower = range.getFirst().value().doubleValue(); - double upper = range.getSecond().value().doubleValue(); - rangeMap.put(Range.closed(lower, upper), range.getThird()); - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - for (Row row : rows) { - int idx = row.find(col1); - - if (idx != -1) { - try { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String', " + - "'Float' or 'Double'.", col1)); - } - - Double d; - if (object instanceof String) { - d = Double.parseDouble((String) object); - } else if (object instanceof Double) { - d = (Double) object; - } else if (object instanceof Float) { - d = ((Float) object).doubleValue(); - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String', " + - "'Float' or 'Double'.", col1, object.getClass().getSimpleName())); - } - String value = rangeMap.get(d); - int destIdx = row.find(col2); - if (destIdx == -1) { - row.add(col2, value); - } else { - row.setValue(destIdx, value); - } - } catch (NumberFormatException e) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type. It should be of type 'String', " + - "'Float' or 'Double'.", col1), e); - } - } else { - throw new DirectiveExecutionException(NAME, "Column '" + col1 + "' does not exist."); - } - results.add(row); - } - return results; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Quanitized column '%s' into column '%s'", col1, col2) - .conditional(col1, col2) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/RightTrim.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/RightTrim.java deleted file mode 100644 index 3a000a631..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/RightTrim.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; - - -/** - * A directive for trimming whitespace from right side of a string - */ -@Plugin(type = Directive.TYPE) -@Name(RightTrim.NAME) -@Categories(categories = { "transform"}) -@Description("Trimming whitespace from right side of a string.") -public class RightTrim implements Directive, Lineage { - public static final String NAME = "rtrim"; - // Columns of the column to be upper-cased - private String column; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object instanceof String) { - if (object != null) { - String value = (String) object; - row.setValue(idx, Trimmer.rtrim(value)); - } - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Removed spaces on the right in values of column '%s'", column) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/Split.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/Split.java deleted file mode 100644 index c818eaf89..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/Split.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import com.google.common.base.Strings; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.List; - -/** - * A directive for splitting a col into two additional columns based on a delimiter. - */ -@Plugin(type = Directive.TYPE) -@Name(Split.NAME) -@Categories(categories = { "readable"}) -@Description("Use 'split-to-columns' or 'split-to-rows'.") -@Deprecated -public class Split implements Directive { - public static final String NAME = "split"; - // Name of the column to be split - private String col; - - private String delimiter; - - // Destination column names - private String firstColumnName, secondColumnName; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("source", TokenType.COLUMN_NAME); - builder.define("delimiter", TokenType.TEXT); - builder.define("column1", TokenType.COLUMN_NAME); - builder.define("column2", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.col = ((ColumnName) args.value("source")).value(); - this.delimiter = ((Text) args.value("delimiter")).value(); - this.firstColumnName = ((ColumnName) args.value("column1")).value(); - this.secondColumnName = ((ColumnName) args.value("column2")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - List results = new ArrayList<>(); - for (Row row : rows) { - int idx = row.find(col); - if (idx != -1) { - String val = (String) row.getValue(idx); - if (val != null) { - String[] parts = val.split(delimiter, 2); - if (Strings.isNullOrEmpty(parts[0])) { - row.add(firstColumnName, parts[1]); - row.add(secondColumnName, null); - } else { - row.add(firstColumnName, parts[0]); - row.add(secondColumnName, parts[1]); - } - } else { - row.add(firstColumnName, null); - row.add(secondColumnName, null); - } - } else { - throw new DirectiveExecutionException( - col + " is not of type string. Please check the wrangle configuration." - ); - } - results.add(row); - } - return results; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/SplitEmail.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/SplitEmail.java deleted file mode 100644 index 60a359f05..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/SplitEmail.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; - -/** - * A directive to split email address into account and domain. - */ -@Plugin(type = Directive.TYPE) -@Name(SplitEmail.NAME) -@Categories(categories = { "transform", "email"}) -@Description("Split a email into account and domain.") -public class SplitEmail implements Directive, Lineage { - public static final String NAME = "split-email"; - private String column; - private String generatedAccountCol; - private String generatedDomainCol; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.generatedAccountCol = column + "_account"; - this.generatedDomainCol = column + "_domain"; - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object == null) { - row.add(generatedAccountCol, null); - row.add(generatedDomainCol, null); - continue; - } - if (object instanceof String) { - String emailAddress = (String) object; - int nameIdx = emailAddress.lastIndexOf("<"); // Joltie, Root - if (nameIdx == -1) { - Pair components = extractDomainAndAccount(emailAddress); - row.add(generatedAccountCol, components.getFirst()); - row.add(generatedDomainCol, components.getSecond()); - } else { - String name = emailAddress.substring(0, nameIdx); - int endIdx = emailAddress.lastIndexOf(">"); - if (endIdx == -1) { - row.add(generatedAccountCol, null); - row.add(generatedDomainCol, null); - } else { - emailAddress = emailAddress.substring(nameIdx + 1, endIdx); - Pair components = extractDomainAndAccount(emailAddress); - row.add(generatedAccountCol, components.getFirst()); - row.add(generatedDomainCol, components.getSecond()); - } - } - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. " + - "It should be of type 'String'.", column, object.getClass().getSimpleName())); - } - } else { - throw new DirectiveExecutionException(NAME, String.format("Column '%s' does not exist.", column)); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Split column '%s' into columns '%s' and '%s'", - column, generatedAccountCol, generatedDomainCol) - .relation(column, Many.of(column, generatedAccountCol, generatedDomainCol)) - .build(); - } - - private Pair extractDomainAndAccount(String emailId) { - int lastidx = emailId.lastIndexOf("@"); - if (lastidx == -1) { - return new Pair<>(null, null); - } else { - return new Pair<>(emailId.substring(0, lastidx), emailId.substring(lastidx + 1)); - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/SplitURL.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/SplitURL.java deleted file mode 100644 index 42dec94a1..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/SplitURL.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.List; - -/** - * A directive to split a URL into it's components. - */ -@Plugin(type = Directive.TYPE) -@Name(SplitURL.NAME) -@Categories(categories = { "transform", "url"}) -@Description("Split a url into it's components host,protocol,port,etc.") -public class SplitURL implements Directive, Lineage { - public static final String NAME = "split-url"; - private String column; - private String protocolCol; - private String authCol; - private String hostCol; - private String portCol; - private String pathCol; - private String queryCol; - private String fileCol; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.protocolCol = column + "_protocol"; - this.authCol = column + "_authority"; - this.hostCol = column + "_host"; - this.portCol = column + "_port"; - this.pathCol = column + "_path"; - this.queryCol = column + "_query"; - this.fileCol = column + "_filename"; - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - row.add(protocolCol, null); - row.add(authCol, null); - row.add(hostCol, null); - row.add(portCol, null); - row.add(pathCol, null); - row.add(queryCol, null); - row.add(fileCol, null); - continue; - } - if (object instanceof String) { - try { - URL url = new URL((String) object); - row.add(protocolCol, url.getProtocol()); - row.add(authCol, url.getAuthority()); - row.add(hostCol, url.getHost()); - row.add(portCol, url.getPort()); - row.add(pathCol, url.getPath()); - row.add(fileCol, url.getFile()); - row.add(queryCol, url.getQuery()); - } catch (MalformedURLException e) { - throw new DirectiveExecutionException( - NAME, String.format("Malformed url '%s' found in column '%s'.", (String) object, column), e); - } - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String'.", - column, object.getClass().getSimpleName())); - } - } else { - throw new DirectiveExecutionException(NAME, String.format("Column '%s' does not exist.", column)); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Split column '%s' into url parts as columns '%s', '%s', '%s', '%s', '%s', '%s', '%s'", - column, protocolCol, authCol, hostCol, portCol, pathCol, queryCol, fileCol) - .relation(column, Many.of(column, protocolCol, authCol, hostCol, portCol, pathCol, queryCol, fileCol)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/TextDistanceMeasure.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/TextDistanceMeasure.java deleted file mode 100644 index 154f6ac5f..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/TextDistanceMeasure.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.simmetrics.StringDistance; -import org.simmetrics.metrics.StringDistances; - -import java.util.List; - -/** - * A directive for implementing the directive for measuring the difference between two sequence of characters. - */ -@Plugin(type = Directive.TYPE) -@Name(TextDistanceMeasure.NAME) -@Categories(categories = { "transform"}) -@Description("Calculates a text distance measure between two columns containing string.") -public class TextDistanceMeasure implements Directive, Lineage { - public static final String NAME = "text-distance"; - private String column1; - private String column2; - private String destination; - private StringDistance distance; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("method", TokenType.TEXT); - builder.define("column1", TokenType.COLUMN_NAME); - builder.define("column2", TokenType.COLUMN_NAME); - builder.define("destination", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - String method = ((Text) args.value("method")).value(); - this.column1 = ((ColumnName) args.value("column1")).value(); - this.column2 = ((ColumnName) args.value("column2")).value(); - this.destination = ((ColumnName) args.value("destination")).value(); - // defaults to : cosineSimilarity - switch(method.toLowerCase()) { - case "euclidean": - distance = StringDistances.euclideanDistance(); - break; - - case "block-distance": - distance = StringDistances.blockDistance(); - break; - - case "identity": - distance = StringDistances.identity(); - break; - - case "block": - distance = StringDistances.blockDistance(); - break; - - case "dice": - distance = StringDistances.dice(); - break; - - case "longest-common-subsequence": - distance = StringDistances.longestCommonSubsequence(); - break; - - case "longest-common-substring": - distance = StringDistances.longestCommonSubstring(); - break; - - case "overlap-cofficient": - distance = StringDistances.overlapCoefficient(); - break; - - case "jaccard": - distance = StringDistances.jaccard(); - break; - - case "damerau-levenshtein": - distance = StringDistances.damerauLevenshtein(); - break; - - case "generalized-jaccard": - distance = StringDistances.generalizedJaccard(); - break; - - case "jaro": - distance = StringDistances.jaro(); - break; - - case "simon-white": - distance = StringDistances.simonWhite(); - break; - - case "levenshtein": - distance = StringDistances.levenshtein(); - break; - - case "cosine": - default: - distance = StringDistances.cosineSimilarity(); - break; - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx1 = row.find(column1); - int idx2 = row.find(column2); - - if (idx1 == -1 || idx2 == -1) { - row.add(destination, 0.0f); - continue; - } - - Object object1 = row.getValue(idx1); - Object object2 = row.getValue(idx2); - - if (object1 == null || object2 == null) { - row.add(destination, 0.0f); - continue; - } - - if (!(object1 instanceof String) || !(object2 instanceof String)) { - row.add(destination, 0.0f); - continue; - } - - if (((String) object1).isEmpty() || ((String) object2).isEmpty()) { - row.add(destination, 0.0f); - continue; - } - - row.add(destination, distance.distance((String) object1, (String) object2)); - } - - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Compared text in columns '%s' and '%s' and saved it in column '%s'", - column1, column2, destination) - .relation(Many.columns(column1, column2), destination) - .relation(column1, column1) - .relation(column2, column2) - .build(); - } - -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/TextMetricMeasure.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/TextMetricMeasure.java deleted file mode 100644 index 7bd3d8fce..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/TextMetricMeasure.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.simmetrics.StringMetric; -import org.simmetrics.metrics.StringMetrics; - -import java.util.List; - -/** - * A directive for implementing the directive for measuring the metrics between two sequence of characters. - */ -@Plugin(type = Directive.TYPE) -@Name(TextMetricMeasure.NAME) -@Categories(categories = { "transform"}) -@Description("Calculates the metric for comparing two string values.") -public class TextMetricMeasure implements Directive, Lineage { - public static final String NAME = "text-metric"; - private String column1; - private String column2; - private String destination; - private StringMetric metric; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("method", TokenType.TEXT); - builder.define("column1", TokenType.COLUMN_NAME); - builder.define("column2", TokenType.COLUMN_NAME); - builder.define("destination", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - String method = ((Text) args.value("method")).value(); - this.column1 = ((ColumnName) args.value("column1")).value(); - this.column2 = ((ColumnName) args.value("column2")).value(); - this.destination = ((ColumnName) args.value("destination")).value(); - // defaults to : cosineSimilarity - switch(method.toLowerCase()) { - case "euclidean": - metric = StringMetrics.euclideanDistance(); - break; - - case "block-metric": - metric = StringMetrics.blockDistance(); - break; - - case "identity": - metric = StringMetrics.identity(); - break; - - case "block": - metric = StringMetrics.blockDistance(); - break; - - case "dice": - metric = StringMetrics.dice(); - break; - - case "longest-common-subsequence": - metric = StringMetrics.longestCommonSubsequence(); - break; - - case "longest-common-substring": - metric = StringMetrics.longestCommonSubstring(); - break; - - case "overlap-cofficient": - metric = StringMetrics.overlapCoefficient(); - break; - - case "jaccard": - metric = StringMetrics.jaccard(); - break; - - case "damerau-levenshtein": - metric = StringMetrics.damerauLevenshtein(); - break; - - case "generalized-jaccard": - metric = StringMetrics.generalizedJaccard(); - break; - - case "jaro": - metric = StringMetrics.jaro(); - break; - - case "simon-white": - metric = StringMetrics.simonWhite(); - break; - - case "levenshtein": - metric = StringMetrics.levenshtein(); - break; - - case "cosine": - default: - metric = StringMetrics.cosineSimilarity(); - break; - } - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx1 = row.find(column1); - int idx2 = row.find(column2); - - if (idx1 == -1 || idx2 == -1) { - row.add(destination, 0.0f); - continue; - } - - Object object1 = row.getValue(idx1); - Object object2 = row.getValue(idx2); - - if (object1 == null || object2 == null) { - row.add(destination, 0.0f); - continue; - } - - if (!(object1 instanceof String) || !(object2 instanceof String)) { - row.add(destination, 0.0f); - continue; - } - - if (((String) object1).isEmpty() || ((String) object2).isEmpty()) { - row.add(destination, 0.0f); - continue; - } - - row.add(destination, metric.compare((String) object1, (String) object2)); - } - - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Compared text in columns '%s' and '%s' and saved it in column '%s'", - column1, column2, destination) - .relation(Many.columns(column1, column2), destination) - .relation(column1, column1) - .relation(column2, column2) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/TitleCase.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/TitleCase.java deleted file mode 100644 index 0be5bf378..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/TitleCase.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.apache.commons.lang.WordUtils; - -import java.util.List; - -/** - * A directive for title casing the 'column' value of type String. - */ -@Plugin(type = Directive.TYPE) -@Name(TitleCase.NAME) -@Categories(categories = { "transform"}) -@Description("Changes the column values to title case.") -public class TitleCase implements Directive, Lineage { - public static final String NAME = "titlecase"; - private String column; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object instanceof String) { - if (object != null) { - String value = (String) object; - row.setValue(idx, WordUtils.capitalizeFully(value)); - } - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Capitalized first letter of the word in the title, heading or " + - "headline specified in column '%s'", column) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/Trim.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/Trim.java deleted file mode 100644 index 9f1e4aed1..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/Trim.java +++ /dev/null @@ -1,91 +0,0 @@ - -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; - -/** - * A directive for trimming whitespace from both sides of a string - */ -@Plugin(type = Directive.TYPE) -@Name(Trim.NAME) -@Categories(categories = { "transform"}) -@Description("Trimming whitespace from both sides of a string.") -public class Trim implements Directive, Lineage { - public static final String NAME = "trim"; - // Columns of the column to be upper-cased - private String column; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object instanceof String) { - if (object != null) { - String value = (String) object; - row.setValue(idx, Trimmer.trim(value)); - } - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Removed spaces on the right and left of values in column '%s'", column) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/Trimmer.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/Trimmer.java deleted file mode 100644 index 3a57177b5..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/Trimmer.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import org.apache.commons.lang3.StringUtils; - -/** - * This class {@link Trimmer} operates on string to trim spaces across all UTF-8 character set of spaces. - */ -public final class Trimmer { - - /** - * Defines all the white spaces for all the different UTF-8 Character set. - */ - public static final String[] WHITESPACE_CHARS = new String[] { - "\t" // CHARACTER TABULATION - , "\n" // LINE FEED (LF) - , '\u000B' + "" // LINE TABULATION - , "\f" // FORM FEED (FF) - , "\r" // CARRIAGE RETURN (CR) - , " " // SPACE - , '\u0085' + "" // NEXT LINE (NEL) - , '\u00A0' + "" // NO-BREAK SPACE - , '\u1680' + "" // OGHAM SPACE MARK - , '\u180E' + "" // MONGOLIAN VOWEL SEPARATOR - , '\u2000' + "" // EN QUAD - , '\u2001' + "" // EM QUAD - , '\u2002' + "" // EN SPACE - , '\u2003' + "" // EM SPACE - , '\u2004' + "" // THREE-PER-EM SPACE - , '\u2005' + "" // FOUR-PER-EM SPACE - , '\u2006' + "" // SIX-PER-EM SPACE - , '\u2007' + "" // FIGURE SPACE - , '\u2008' + "" // PUNCTUATION SPACE - , '\u2009' + "" // THIN SPACE - , '\u200A' + "" // HAIR SPACE - , '\u2028' + "" // LINE SEPARATOR - , '\u2029' + "" // PARAGRAPH SEPARATOR - , '\u202F' + "" // NARROW NO-BREAK SPACE - , '\u205F' + "" // MEDIUM MATHEMATICAL SPACE - , '\u3000' + "" // IDEOGRAPHIC SPACE - }; - - /** - * Remove trailing and leading characters which may be empty string, - * space string,\t,\n,\r,\f...any space, break related characters. - * - * @param input - the input text. - * @return String - */ - public static String trim(String input) { - if (StringUtils.isEmpty(input)) { - return input; - } - - String result = input; - while (StringUtils.startsWithAny(result, WHITESPACE_CHARS)) { - result = StringUtils.removeStart(result, result.substring(0, 1)); - } - - while (StringUtils.endsWithAny(result, WHITESPACE_CHARS)) { - result = StringUtils.removeEnd(result, result.substring(result.length() - 1, result.length())); - } - return result; - } - - /** - * Remove leading characters which may be empty string, - * space string,\t,\n,\r,\f...any space, break related characters. - * - * @param input - the input text. - * @return String - */ - public static String ltrim(String input) { - if (StringUtils.isEmpty(input)) { - return input; - } - - String result = input; - while (StringUtils.startsWithAny(result, WHITESPACE_CHARS)) { - result = StringUtils.removeStart(result, result.substring(0, 1)); - } - return result; - } - - /** - * Remove trailing characters which may be empty string, - * space string,\t,\n,\r,\f...any space, break related characters. - * - * @param input - the input text. - * @return String - */ - public static String rtrim(String input) { - if (StringUtils.isEmpty(input)) { - return input; - } - - String result = input; - while (StringUtils.endsWithAny(result, WHITESPACE_CHARS)) { - result = StringUtils.removeEnd(result, result.substring(result.length() - 1, result.length())); - } - return result; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/Upper.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/Upper.java deleted file mode 100644 index 0eb09dc94..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/Upper.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; - -/** - * A Wrangler step for upper casing the 'column' value of type String. - */ -@Plugin(type = Directive.TYPE) -@Name(Upper.NAME) -@Categories(categories = { "transform"}) -@Description("Changes the column values to uppercase.") -public class Upper implements Directive, Lineage { - public static final String NAME = "uppercase"; - // Columns of the column to be upper-cased - private String column; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object instanceof String) { - if (object != null) { - String value = (String) object; - row.setValue(idx, value.toUpperCase()); - } - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Upper cased the characters of values in column '%s'", column) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/UrlDecode.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/UrlDecode.java deleted file mode 100644 index 0ae4df352..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/UrlDecode.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.List; - -/** - * A Executor to decodes a column with url encoding. - */ -@Plugin(type = Directive.TYPE) -@Name(UrlDecode.NAME) -@Categories(categories = { "transform"}) -@Description("URL decode a column value.") -public class UrlDecode implements Directive, Lineage { - public static final String NAME = "url-decode"; - private String column; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String'.", column)); - } - - if (object instanceof String) { - try { - row.setValue(idx, URLDecoder.decode((String) object, "UTF-8")); - } catch (UnsupportedEncodingException e) { - // Doesn't affect the row and it doesn't stop processing. - } - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String'.", - column, object.getClass().getSimpleName())); - } - } else { - throw new DirectiveExecutionException(NAME, String.format("Column '%s' does not exist.", column)); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Decoded column '%s' as a url", column) - .relation(column, column) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/transformation/UrlEncode.java b/wrangler-core/src/main/java/io/cdap/directives/transformation/UrlEncode.java deleted file mode 100644 index 204e380c7..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/transformation/UrlEncode.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.List; - -/** - * A Executor to encode a column with url encoding. - */ -@Plugin(type = Directive.TYPE) -@Name(UrlEncode.NAME) -@Categories(categories = { "transform"}) -@Description("URL encode a column value.") -public class UrlEncode implements Directive, Lineage { - public static final String NAME = "url-encode"; - private String column; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Encoded column '%s' as url", column) - .relation(column, column) - .build(); - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has null value. It should be a non-null 'String'.", column)); - } - - if (object instanceof String) { - try { - row.setValue(idx, URLEncoder.encode((String) object, "UTF-8")); - } catch (UnsupportedEncodingException e) { - // Doesn't affect the row and it doesn't stop processing. - } - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String'.", - column, object.getClass().getSimpleName())); - } - } else { - throw new DirectiveExecutionException(NAME, String.format("Column '%s' does not exist.", column)); - } - } - return rows; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/validation/ConformanceIssue.java b/wrangler-core/src/main/java/io/cdap/directives/validation/ConformanceIssue.java deleted file mode 100644 index 0f7a1aadf..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/validation/ConformanceIssue.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.validation; - -import java.util.Objects; - -/** - * Contains information about an issue that occurred when trying to validate some data (against a schema). - */ -public class ConformanceIssue { - - /** - * Schema location refers to the part of the schema where this issue occurred. The exact format varies by schema - * implementation. For JSON Schema for example, it may look like #/definitions/Blue. - */ - private final String schemaLocation; - - /** - * Data location refers to the part of the input data where this issue occurred. The exact format varies by conformer - * implementation. This may be a dot/bracket notation style path or something similar. - */ - private final String dataLocation; - - - /** - * A human readable description of why the data didn't conform. - */ - private final String error; - - public ConformanceIssue(String schemaLocation, String dataLocation, String error) { - this.schemaLocation = schemaLocation; - this.dataLocation = dataLocation; - this.error = error; - } - - public String getSchemaLocation() { - return schemaLocation; - } - - public String getDataLocation() { - return dataLocation; - } - - public String getError() { - return error; - } - - @Override - public String toString() { - String error = getError(); - String dataLocation = getDataLocation(); - if (error.contains(dataLocation)) { - return String.format("error at schema %s: %s", getSchemaLocation(), error); - } - return String.format( - "error at schema %s, at data %s: %s", getSchemaLocation(), dataLocation, error); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ConformanceIssue that = (ConformanceIssue) o; - return Objects.equals(schemaLocation, that.schemaLocation) - && Objects.equals(dataLocation, that.dataLocation) - && Objects.equals(error, that.error); - } - - @Override - public int hashCode() { - return Objects.hash(schemaLocation, dataLocation, error); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/validation/ValidateStandard.java b/wrangler-core/src/main/java/io/cdap/directives/validation/ValidateStandard.java deleted file mode 100644 index fb303e1f4..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/validation/ValidateStandard.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.validation; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.directives.validation.conformers.Conformer; -import io.cdap.directives.validation.conformers.JsonConformer; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.ReportErrorAndProceed; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Identifier; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.utils.Manifest; -import io.cdap.wrangler.utils.Manifest.Standard; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - - -/** - * A directive for validating data against a number of built-in data models. - */ -@Plugin(type = Directive.TYPE) -@Name(ValidateStandard.NAME) -@Categories(categories = {"data-quality"}) -@Description("Checks a column against a standard schema") -public class ValidateStandard implements Directive { - - public static final String NAME = "validate-standard"; - static final String SCHEMAS_RESOURCE_PATH = "schemas/"; - static final String MANIFEST_PATH = SCHEMAS_RESOURCE_PATH + "manifest.json"; - static final Map> FORMAT_TO_FACTORY = new HashMap<>(); - private static final Logger LOG = LoggerFactory.getLogger(ValidateStandard.class); - private static final String STANDARD_SPEC = "standard-spec"; - private static final String COLUMN = "column"; - private static final Map> schemaToConformer = new HashMap<>(); - private static Manifest standardsManifest = null; - - static { - FORMAT_TO_FACTORY.put(JsonConformer.SCHEMA_FORMAT, new JsonConformer.Factory()); - - try { - standardsManifest = getManifest(); - } catch (IOException e) { - LOG.error("Unable to read standards manifest", e); - } - } - - private String column; - private String schema; - - private static Manifest getManifest() throws IOException { - InputStream resourceStream = - ValidateStandard.class.getClassLoader().getResourceAsStream(ValidateStandard.MANIFEST_PATH); - - if (resourceStream == null) { - throw new IOException( - String.format("Can't read/find resource %s", ValidateStandard.MANIFEST_PATH)); - } - - InputStream manifestStream = readResource(ValidateStandard.MANIFEST_PATH); - return new Gson().getAdapter(Manifest.class).fromJson(new InputStreamReader(manifestStream)); - } - - private static InputStream readResource(String name) { - InputStream resourceStream = ValidateStandard.class.getClassLoader().getResourceAsStream(name); - - if (resourceStream == null) { - throw new IllegalArgumentException("Can't read/find resource " + name); - } - - return resourceStream; - } - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define(COLUMN, TokenType.COLUMN_NAME); - builder.define( - STANDARD_SPEC, - TokenType.IDENTIFIER, - String.format( - "[one of: %s]", String.join(", ", standardsManifest.getStandards().keySet()))); - - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - column = ((ColumnName) args.value(COLUMN)).value(); - String spec = ((Identifier) args.value(STANDARD_SPEC)).value(); - - if (spec.equals("")) { - throw new DirectiveParseException("No standard specified to validate against"); - } - if (standardsManifest == null) { - throw new DirectiveParseException( - "Standards manifest was not loaded. Please check logs for information"); - } - - Map availableSpecs = standardsManifest.getStandards(); - if (!availableSpecs.containsKey(spec)) { - throw new DirectiveParseException( - String.format( - "Unknown standard %s. Known values are %s", - spec, String.join(", ", standardsManifest.getStandards().keySet()))); - } - - Standard standard = availableSpecs.get(spec); - schema = - Paths.get(SCHEMAS_RESOURCE_PATH, String.format("%s.%s", spec, standard.getFormat())) - .toString(); - - if (!schemaToConformer.containsKey(schema)) { - if (!FORMAT_TO_FACTORY.containsKey(standard.getFormat())) { - throw new DirectiveParseException(String.format("No validator for format %s", standard.getFormat())); - } - - try { - Conformer conformer = FORMAT_TO_FACTORY.get(standard.getFormat()) - .setSchemaStreamSupplier(() -> readResource(schema)) - .build(); - conformer.initialize(); - schemaToConformer.put(schema, conformer); - } catch (IOException e) { - throw new DirectiveParseException(String.format("Unable to read standard schema: %s", e.getMessage()), e); - } - } - } - - @Override - public List execute(List rows, ExecutorContext context) - throws DirectiveExecutionException, ErrorRowException, ReportErrorAndProceed { - for (Row row : rows) { - int idx = row.find(column); - - if (idx < 0) { - continue; - } - - Object object = row.getValue(idx); - if (object == null) { - continue; - } - - if (!(object instanceof JsonObject)) { - throw new DirectiveExecutionException( - String.format( - "Column %s is not a %s (it's %s)", - column, JsonObject.class.getName(), object.getClass().getName())); - } - - Conformer conformer = schemaToConformer.get(schema); - if (conformer == null) { - throw new DirectiveExecutionException("Directive was not initialized for schema " + schema); - } - - List conformanceIssues = - conformer.checkConformance((JsonObject) object); - if (conformanceIssues.size() > 0) { - throw new ErrorRowException( - conformanceIssues.stream() - .map(ConformanceIssue::toString) - .collect(Collectors.joining("; ")), - 1, true); - } - } - return rows; - } - - @Override - public void destroy() { - // no-op - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/validation/conformers/Conformer.java b/wrangler-core/src/main/java/io/cdap/directives/validation/conformers/Conformer.java deleted file mode 100644 index df85f7a4d..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/validation/conformers/Conformer.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.validation.conformers; - -import io.cdap.directives.validation.ConformanceIssue; - -import java.io.IOException; -import java.io.InputStream; -import java.util.List; -import java.util.function.Supplier; - -/** - * Conformer represents a type that can check whether some object instance of type T follows a set of restrictions (a - * schema) enforced by this conformer. For example, a Conformer<JsonObject> can check if a specific JSON object - * validates against a specific JSON Schema. - * - * @param The type of value this conformer checks. - */ -public interface Conformer { - - /** - * Initialize should setup this instance to check conformance against a specific set of requirements, for example it - * can load a specific JSON Schema into memory. - */ - void initialize() throws IOException; - - /** - * Validate the given value against the loaded schema. It is up to the implementation to decide whether to return the - * first occurring error or all at once. - * - * @param value the value to validate - * @return the deviations/failures (if any; otherwise an empty list) that the value ran into when validating - */ - List checkConformance(T value); - - /** - * Factory interface for Conformers. - * - * @param The type of value the conformer (that this factory produces) checks. - */ - interface Factory { - - /** - * Sets the stream containing schema data for the Conformer. - */ - Factory setSchemaStreamSupplier(Supplier schemaStream); - - /** - * Instantiates a new Conformer. - */ - Conformer build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/validation/conformers/JsonConformer.java b/wrangler-core/src/main/java/io/cdap/directives/validation/conformers/JsonConformer.java deleted file mode 100644 index be940e9df..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/validation/conformers/JsonConformer.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.validation.conformers; - -import com.google.gson.JsonObject; -import io.cdap.directives.validation.ConformanceIssue; -import org.everit.json.schema.Schema; -import org.everit.json.schema.ValidationException; -import org.everit.json.schema.Validator; -import org.everit.json.schema.loader.SchemaLoader; -import org.json.JSONObject; -import org.json.JSONTokener; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.function.Supplier; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -/** - * Validates using JSON Validator. - */ -public class JsonConformer implements Conformer { - - public static final String SCHEMA_FORMAT = "json"; - - private final Supplier schemaStream; - private Schema schema; - - private JsonConformer(Supplier stream) { - this.schemaStream = stream; - } - - static List convertValidationException(ValidationException e) { - ValidationException[] nonTrivialCauses = - e.getCausingExceptions().stream() - .filter(c -> !c.getPointerToViolation().equals("#")) - .toArray(ValidationException[]::new); - - if (nonTrivialCauses.length > 0) { - return Arrays.stream(nonTrivialCauses) - .flatMap(ntc -> getLeafExceptions(null, ntc)) - .distinct() - .collect(Collectors.toList()); - } - - return Collections.singletonList( - new ConformanceIssue( - e.getSchemaLocation(), e.getPointerToViolation(), e.toJSON().toString())); - } - - private static Stream getLeafExceptions(String schemaPath, ValidationException ve) { - String newSchemaPath = (schemaPath != null && !schemaPath.isEmpty() ? schemaPath + " -> " : "") - + ve.getSchemaLocation(); - - if (ve.getCausingExceptions().size() == 0) { - return Stream.of(new ConformanceIssue(newSchemaPath, ve.getPointerToViolation(), ve.getMessage())); - } - - return ve.getCausingExceptions().stream().flatMap(c -> getLeafExceptions(newSchemaPath, c)); - } - - @Override - public void initialize() throws IOException { - - try ( - InputStream stream = schemaStream.get(); - InputStreamReader reader = new InputStreamReader(stream) - ) { - JSONObject schemaJson = new JSONObject(new JSONTokener(reader)); - schema = SchemaLoader.builder().schemaJson(schemaJson).build().load().build(); - } - } - - @Override - public List checkConformance(JsonObject value) { - JSONObject orgJsonObject = new JSONObject(new JSONTokener(value.toString())); - - try { - Validator validator = Validator.builder().failEarly().build(); - validator.performValidation(schema, orgJsonObject); - } catch (ValidationException e) { - return convertValidationException(e); - } - - return Collections.emptyList(); - } - - /** - * Factory for JsonConformer. Requires only a schema. - */ - public static class Factory implements Conformer.Factory { - - private Supplier stream; - - public Factory setSchemaStreamSupplier(Supplier schemaStream) { - this.stream = schemaStream; - return this; - } - - public JsonConformer build() { - return new JsonConformer(stream); - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/writer/WriteAsCSV.java b/wrangler-core/src/main/java/io/cdap/directives/writer/WriteAsCSV.java deleted file mode 100644 index 8e51bf527..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/writer/WriteAsCSV.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.writer; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.apache.commons.csv.CSVFormat; -import org.apache.commons.csv.CSVPrinter; - -import java.io.BufferedWriter; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.util.List; - -/** - * A step to write the record fields as CSV. - */ -@Plugin(type = Directive.TYPE) -@Name("write-as-csv") -@Categories(categories = { "writer", "csv"}) -@Description("Writes the records files as well-formatted CSV") -public class WriteAsCSV implements Directive, Lineage { - public static final String NAME = "write-as-csv"; - private String column; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - try { - final ByteArrayOutputStream bOut = new ByteArrayOutputStream(); - try (Writer out = new BufferedWriter(new OutputStreamWriter(bOut))) { - CSVPrinter csvPrinter = new CSVPrinter(out, CSVFormat.DEFAULT); - - for (int i = 0; i < row.width(); ++i) { - csvPrinter.print(row.getValue(i)); - } - csvPrinter.flush(); - csvPrinter.close(); - } catch (Exception e) { - bOut.close(); - } - row.add(column, bOut.toString()); - } catch (IOException e) { - throw new DirectiveExecutionException(NAME, e.getMessage(), e); - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Wrote column '%s' in the common separated value (CSV) format", column) - .generate(Many.of(column)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/writer/WriteAsJsonMap.java b/wrangler-core/src/main/java/io/cdap/directives/writer/WriteAsJsonMap.java deleted file mode 100644 index 640843477..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/writer/WriteAsJsonMap.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.writer; - -import com.google.gson.Gson; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * A step to write the record fields as JSON. - */ -@Plugin(type = Directive.TYPE) -@Name("write-as-json-map") -@Categories(categories = { "writer", "json"}) -@Description("Writes all record columns as JSON map.") -public class WriteAsJsonMap implements Directive, Lineage { - public static final String NAME = "write-as-json-map"; - private String column; - private Gson gson; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.gson = new Gson(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - Map toJson = new HashMap<>(); - for (Pair entry : row.getFields()) { - toJson.put(entry.getFirst(), entry.getSecond()); - } - row.addOrSet(column, gson.toJson(toJson)); - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Wrote column '%s' as a json map", column) - .generate(Many.of(column)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/writer/WriteAsJsonObject.java b/wrangler-core/src/main/java/io/cdap/directives/writer/WriteAsJsonObject.java deleted file mode 100644 index b25cd8a65..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/writer/WriteAsJsonObject.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.writer; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonNull; -import com.google.gson.JsonObject; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.List; - -/** - * A directive for writing selected columns as Json Objects. - */ -@Plugin(type = Directive.TYPE) -@Name("write-as-json-object") -@Categories(categories = { "writer", "json"}) -@Description("Creates a JSON object based on source columns specified. JSON object is written into dest-column.") -public class WriteAsJsonObject implements Directive, Lineage { - public static final String NAME = "write-as-json-object"; - private String column; - private List columns; - private Gson gson; - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("col", TokenType.COLUMN_NAME_LIST, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column")).value(); - this.columns = ((ColumnNameList) args.value("col")).value(); - this.gson = new Gson(); - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - JsonObject object = new JsonObject(); - for (String col : columns) { - Object value = row.getValue(col); - if (value instanceof Integer) { - object.addProperty(col, (Integer) value); - } else if (value instanceof Long) { - object.addProperty(col, (Long) value); - } else if (value instanceof Number) { - object.addProperty(col, (Number) value); - } else if (value instanceof Float) { - object.addProperty(col, (Float) value); - } else if (value instanceof Double) { - object.addProperty(col, (Double) value); - } else if (value instanceof Short) { - object.addProperty(col, (Short) value); - } else if (value instanceof Character) { - object.addProperty(col, Character.toString((Character) value)); - } else if (value instanceof String) { - object.addProperty(col, (String) value); - } else if (value instanceof JsonElement) { - object.add(col, (JsonElement) value); - } else if (value instanceof JsonNull) { - object.add(col, (JsonNull) value); - } - } - row.addOrSet(column, object); - } - return rows; - } - - @Override - public Mutation lineage() { - Mutation.Builder builder = Mutation.builder() - .readable("Wrote columns '%s' as json object into column '%s'", columns, column); - builder.relation(Many.of(columns), column); - columns.forEach(column -> builder.relation(column, column)); - return builder.build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/directives/xml/XmlToJson.java b/wrangler-core/src/main/java/io/cdap/directives/xml/XmlToJson.java deleted file mode 100644 index 513a54d17..000000000 --- a/wrangler-core/src/main/java/io/cdap/directives/xml/XmlToJson.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.xml; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.directives.parser.JsParser; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Many; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.apache.commons.lang.StringUtils; -import org.json.JSONException; -import org.json.XML; - -import java.util.List; - -/** - * A XML to Json Parser Stage. - */ -@Plugin(type = Directive.TYPE) -@Name("parse-xml-to-json") -@Categories(categories = { "xml"}) -@Description("Parses a XML document to JSON representation.") -public class XmlToJson implements Directive, Lineage { - public static final String NAME = "parse-xml-to-json"; - public static final String ARG_KEEP_STRING = "keep-string"; - // Column within the input row that needs to be parsed as Json - private String col; - private int depth; - private boolean keepString; - private final Gson gson = new Gson(); - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - builder.define("depth", TokenType.NUMERIC, Optional.TRUE); - builder.define(ARG_KEEP_STRING, TokenType.BOOLEAN, Optional.TRUE); - return builder.build(); - } - - @Override - public void initialize(Arguments args) throws DirectiveParseException { - this.col = ((ColumnName) args.value("column")).value(); - if (args.contains("depth")) { - this.depth = ((Numeric) args.value("depth")).value().intValue(); - } else { - this.depth = Integer.MAX_VALUE; - } - - if (args.contains(ARG_KEEP_STRING) && - StringUtils.isNotEmpty(args.value(ARG_KEEP_STRING).value().toString())) { - this.keepString = Boolean.parseBoolean(args.value(ARG_KEEP_STRING).value().toString()); - } - - } - - @Override - public void destroy() { - // no-op - } - - @Override - public List execute(List rows, ExecutorContext context) throws DirectiveExecutionException { - for (Row row : rows) { - int idx = row.find(col); - if (idx != -1) { - Object object = row.getValue(idx); - - if (object == null) { - throw new DirectiveExecutionException(NAME, "' : Column '" + col + "' does not exist."); - } - - try { - if (object instanceof String) { - JsonObject element = gson.fromJson(XML.toJSONObject((String) object, this.keepString).toString(), - JsonElement.class).getAsJsonObject(); - JsParser.jsonFlatten(element, col, 1, depth, row); - row.remove(idx); - } else { - throw new DirectiveExecutionException( - NAME, String.format("Column '%s' has invalid type '%s'. It should be of type 'String'.", - col, object.getClass().getSimpleName())); - } - } catch (JSONException e) { - throw new DirectiveExecutionException(NAME, e.getMessage(), e); - } - } - } - return rows; - } - - @Override - public Mutation lineage() { - return Mutation.builder() - .readable("Converted xml in column '%s' to json", col) - .all(Many.of(col)) - .build(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/functions/DDL.java b/wrangler-core/src/main/java/io/cdap/functions/DDL.java deleted file mode 100644 index 13099a9f4..000000000 --- a/wrangler-core/src/main/java/io/cdap/functions/DDL.java +++ /dev/null @@ -1,418 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import com.google.common.base.Splitter; -import com.google.common.collect.Iterables; -import com.google.gson.JsonElement; -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.utils.StructuredRecordJsonConverter; - -import java.io.IOException; -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; - -/** - * Structured Row and Schema DDL. - */ -public final class DDL { - private DDL() { - } - - /** - * Given a JSON representation of schema, returns a {@link Schema} object. - * - * @param json string representation of schema. - * @return instance of {@link Schema} representing JSON string. - * @throws IOException thrown when there is issue parsing the data. - */ - public static Schema parse(String json) throws IOException { - return Schema.parseJson(json); - } - - /** - * Given a SQL DDL, returns the {@link Schema} representation of the SQL. - * - * @param sql to be converted to {@link Schema}. - * @return instance of {@link Schema}. - * @throws IOException throw when there is issue parsing the sql. - */ - public static Schema parsesql(String sql) throws IOException { - return Schema.parseSQL(sql); - } - - /** - * Identity parse method to extract {@link Schema}. - * - * This method is added if a user makes a mistake of parsing the schema again. - * - * @param schema to be returned. - * @return above schema object. - */ - public static Schema parse(Schema schema) { - return schema; - } - - /** - * Given a {@link StructuredRecord} returns the same {@link StructuredRecord}. - */ - public static StructuredRecord parse(StructuredRecord record) { - return record; - } - - /** - * Converts a {@link StructuredRecord} to JSON string. - * - * @param record to be converted to JSON - * @return JSON string representation of structured record. - * @throws IOException thrown if there are any issues with parsing. - */ - public static JsonElement toJson(StructuredRecord record) throws IOException { - return JsonFunctions.Parse(StructuredRecordJsonConverter.toJsonString(record)); - } - - /** - * Given a {@link StructuredRecord} and the name of the field, it checks, if the - * field exists in the {@link StructuredRecord}. - * - * @param record in which the field needs to be checked. - * @param name of the field to be checked. - * @return true if present and it's a record, else false. - */ - public static boolean hasField(StructuredRecord record, String name) { - Schema.Field field = record.getSchema().getField(name); - if (field == null) { - return false; - } - return true; - } - - /** - * Drops a path from the schema to generate a new {@link Schema}. - * - * @param schema to be modified. - * @param path to be removed from {@link Schema}. - * @return modified {@link Schema} - */ - public static Schema drop(Schema schema, String path) { - return drop(schema, path, path); - } - - public static Schema drop(Schema schema, String path, String ... paths) { - Schema mutatedSchema = drop(schema, path, path); - for (String otherPath : paths) { - mutatedSchema = drop(mutatedSchema, otherPath, otherPath); - } - return mutatedSchema; - } - - private static Schema drop(Schema schema, @Nullable String path, String fullPath) { - if (path == null) { - return schema; - } - - // TODO: Need to handle union type - if (schema.getType() != Schema.Type.RECORD) { - return schema; - } - - int dotIndex = path.indexOf('.'); - String recordField = dotIndex > 0 ? path.substring(0, dotIndex) : path; - String nextPath = dotIndex > 0 ? path.substring(dotIndex + 1) : null; - - int arrayIndex = -1; - int bracketIndex = recordField.indexOf('['); - if (bracketIndex > 0) { - if (!recordField.endsWith("]")) { - throw new IllegalArgumentException( - String.format("Invalid field '%s' in path '%s'. An array index start with '[' and must end with a ']'", - recordField, fullPath)); - } - String indexStr = recordField.substring(bracketIndex + 1, recordField.length() - 1); - try { - arrayIndex = Integer.parseInt(indexStr); - } catch (NumberFormatException e) { - throw new IllegalArgumentException( - String.format("Invalid array index '%s' for field '%s' in path '%s'. Must be a valid integer.", - indexStr, recordField, fullPath)); - } - recordField = recordField.substring(0, bracketIndex); - } - - List fields = new ArrayList<>(); - for (Schema.Field field : schema.getFields()) { - if (field.getName().equals(recordField)) { - if (nextPath == null) { - continue; - } - Schema fieldSchema = field.getSchema(); - boolean isNullable = fieldSchema.isNullable(); - Schema.Type fieldtype = isNullable ? fieldSchema.getNonNullable().getType() : fieldSchema.getType(); - if (arrayIndex >= 0) { - if (fieldtype != Schema.Type.ARRAY) { - throw new IllegalArgumentException( - String.format("Array syntax for nested field '%s' in path '%s' was specified, but '%s' is of type %s.", - recordField, fullPath, recordField, fieldtype)); - } - Schema componentSchema = - isNullable ? fieldSchema.getNonNullable().getComponentSchema() : fieldSchema.getComponentSchema(); - boolean componentNullable = componentSchema.isNullable(); - Schema.Type componentType = componentNullable ? - componentSchema.getNonNullable().getType() : componentSchema.getType(); - if (nextPath != null && componentType != Schema.Type.RECORD) { - throw new IllegalArgumentException( - String.format("Nested field '%s' in path '%s' must be of type '%s', but is '%s'.", - recordField, fullPath, Schema.Type.RECORD, componentType)); - } - - Schema componentSchemaWithout = - drop(componentNullable ? componentSchema.getNonNullable() : fieldSchema, nextPath, fullPath); - componentSchemaWithout = - componentNullable ? Schema.nullableOf(componentSchemaWithout) : componentSchemaWithout; - - Schema arraySchema = Schema.arrayOf(componentSchemaWithout); - arraySchema = isNullable ? Schema.nullableOf(arraySchema) : arraySchema; - fields.add(Schema.Field.of(field.getName(), arraySchema)); - continue; - } else if (nextPath != null && fieldtype != Schema.Type.RECORD) { - throw new IllegalArgumentException( - String.format("Nested field '%s' in path '%s' must be of type '%s', but is '%s'.", - recordField, fullPath, Schema.Type.RECORD, fieldtype)); - } - fields.add(Schema.Field.of(field.getName(), drop(field.getSchema(), nextPath, fullPath))); - } else { - fields.add(field); - } - } - return Schema.recordOf(schema.getRecordName(), fields); - } - - /** - * Selects the sub-record based on the path specified. - * - * @param schema to be used as source to apply the path to. - * @param path to be applied on the {@link Schema} to select. - * @return sub-selected {@link Schema} - */ - public static Schema select(Schema schema, String path) { - return select(schema, path, Splitter.on('.').split(path).iterator()); - } - - private static Schema select(Schema schema, String path, Iterator fields) { - String fieldName = fields.next(); - - String key = null; - int bracketIndex = fieldName.indexOf('['); - if (bracketIndex > 0) { - if (!fieldName.endsWith("]")) { - throw new IllegalArgumentException( - String.format("Invalid field '%s'. An index start '[' must end with a ']'", fieldName)); - } - key = fieldName.substring(bracketIndex + 1, fieldName.length() - 1); - fieldName = fieldName.substring(0, bracketIndex); - } - - Schema.Field field = schema.getField(fieldName); - - if (field == null) { - throw new IllegalArgumentException( - String.format("Nested field '%s' in path '%s' does not exist", fieldName, path)); - } - - Schema fieldSchema = field.getSchema(); - boolean isNullable = fieldSchema.isNullable(); - Schema.Type fieldType = isNullable ? fieldSchema.getNonNullable().getType() : fieldSchema.getType(); - - if (key != null) { - if (fieldType == Schema.Type.ARRAY) { - try { - int arrayIndex = Integer.parseInt(key); - if (arrayIndex < 0) { - throw new IllegalArgumentException( - String.format("Invalid array index '%d' for field '%s' in path '%s. Must be at least 0.", - arrayIndex, fieldName, path)); - } - } catch (NumberFormatException e) { - throw new IllegalArgumentException( - String.format("Invalid array index '%s' for field '%s' in path '%s'. Must be a valid int.", - key, fieldName, path)); - } - - fieldSchema = isNullable ? fieldSchema.getNonNullable().getComponentSchema() : fieldSchema.getComponentSchema(); - isNullable = fieldSchema.isNullable(); - fieldType = isNullable ? fieldSchema.getNonNullable().getType() : fieldSchema.getType(); - } else if (fieldType == Schema.Type.MAP) { - - Map.Entry mapSchema = fieldSchema.getMapSchema(); - Schema keySchema = mapSchema.getKey(); - Schema valSchema = mapSchema.getValue(); - - Schema.Type keyType = keySchema.isNullable() ? keySchema.getNonNullable().getType() : keySchema.getType(); - if (keyType != Schema.Type.STRING) { - throw new IllegalArgumentException( - String.format("Only map keys of type string are supported. Field '%s' in path '%s' has keys of type '%s'.", - fieldName, path, keyType)); - } - - fieldSchema = valSchema; - isNullable = fieldSchema.isNullable(); - fieldType = isNullable ? fieldSchema.getNonNullable().getType() : fieldSchema.getType(); - - } else { - throw new IllegalArgumentException( - String.format("Array syntax for nested field '%s' in path '%s' was specified, but '%s' is of type %s.", - fieldName, path, fieldName, fieldType)); - } - } - - if (fields.hasNext()) { - if (fieldType != Schema.Type.RECORD) { - throw new IllegalArgumentException( - String.format("Nested field '%s' in path '%s' must be of type '%s', but is '%s'.", - fieldName, path, Schema.Type.RECORD, fieldType)); - } - - return select(isNullable ? fieldSchema.getNonNullable() : fieldSchema, path, fields); - } - return fieldSchema; - } - - public static StructuredRecord drop(StructuredRecord record, String path) { - return drop(record, path, path); - } - - public static StructuredRecord drop(StructuredRecord record, String path, String ... paths) { - // No-op. This is just to mirror the drop method for Schema - return record; - } - - /** - * Select a sub-stucture of a {@link StructuredRecord}. - * - * @param record to be operated on - * @param path to applied to the {@link StructuredRecord} - * @param type of object returned. - * @return sub-structure of the {@link StructuredRecord} - */ - public static T select(StructuredRecord record, String path) { - return recursiveGet(record, path, Splitter.on('.').split(path).iterator()); - } - - private static T recursiveGet(StructuredRecord record, String path, Iterator fields) { - String fieldName = fields.next(); - - int bracketIndex = fieldName.indexOf('['); - String key = null; - if (bracketIndex > 0) { - if (!fieldName.endsWith("]")) { - throw new IllegalArgumentException( - String.format("Invalid field '%s'. An index start '[' must end with a ']'", fieldName)); - } - key = fieldName.substring(bracketIndex + 1, fieldName.length() - 1); - fieldName = fieldName.substring(0, bracketIndex); - } - - Schema.Field field = record.getSchema().getField(fieldName); - - if (field == null) { - throw new IllegalArgumentException( - String.format("Nested field '%s' in path '%s' does not exist", fieldName, path)); - } - - Schema fieldSchema = field.getSchema(); - boolean isNullable = fieldSchema.isNullable(); - Schema.Type fieldType = isNullable ? fieldSchema.getNonNullable().getType() : fieldSchema.getType(); - - Object val = record.get(fieldName); - - if (key != null) { - if (fieldType == Schema.Type.ARRAY) { - try { - int arrayIndex = Integer.parseInt(key); - if (arrayIndex < 0) { - throw new IllegalArgumentException( - String.format("Invalid array index '%d' for field '%s' in path '%s. Must be at least 0.", - arrayIndex, fieldName, path)); - } - - fieldSchema = isNullable ? - fieldSchema.getNonNullable().getComponentSchema() : fieldSchema.getComponentSchema(); - isNullable = fieldSchema.isNullable(); - fieldType = isNullable ? fieldSchema.getNonNullable().getType() : fieldSchema.getType(); - - try { - if (val instanceof Collection) { - val = Iterables.get((Collection) val, arrayIndex); - } else { - val = Array.get(val, arrayIndex); - } - } catch (IndexOutOfBoundsException e) { - throw new IllegalArgumentException( - String.format("Index '%d' for nested field '%s' in path '%s' is out of bounds.", - arrayIndex, fieldName, path)); - } - } catch (NumberFormatException e) { - throw new IllegalArgumentException( - String.format("Invalid array index '%s' for field '%s' in path '%s'. Must be a valid int.", - key, fieldName, path)); - } - } else if (fieldType == Schema.Type.MAP) { - - Map.Entry mapSchema = fieldSchema.getMapSchema(); - Schema keySchema = mapSchema.getKey(); - Schema valSchema = mapSchema.getValue(); - - Schema.Type keyType = keySchema.isNullable() ? keySchema.getNonNullable().getType() : keySchema.getType(); - if (keyType != Schema.Type.STRING) { - throw new IllegalArgumentException( - String.format("Only map keys of type string are supported. Field '%s' in path '%s' has keys of type '%s'.", - fieldName, path, keyType)); - } - - fieldSchema = valSchema; - isNullable = fieldSchema.isNullable(); - fieldType = isNullable ? fieldSchema.getNonNullable().getType() : fieldSchema.getType(); - - Map map = (Map) val; - val = map.get(key); - - } else { - throw new IllegalArgumentException( - String.format("Array syntax for nested field '%s' in path '%s' was specified, but '%s' is of type %s.", - fieldName, path, fieldName, fieldType)); - } - } - - if (fields.hasNext()) { - if (fieldType != Schema.Type.RECORD) { - throw new IllegalArgumentException( - String.format("Nested field '%s' in path '%s' must be of type '%s', but is '%s'.", - fieldName, path, Schema.Type.RECORD, fieldType)); - } - - return recursiveGet((StructuredRecord) val, path, fields); - } - return (T) val; - } - -} diff --git a/wrangler-core/src/main/java/io/cdap/functions/DataQuality.java b/wrangler-core/src/main/java/io/cdap/functions/DataQuality.java deleted file mode 100644 index c4e8c0cf0..000000000 --- a/wrangler-core/src/main/java/io/cdap/functions/DataQuality.java +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import com.google.common.collect.BoundType; -import com.google.common.collect.Range; -import io.cdap.wrangler.api.Row; -import org.apache.commons.validator.routines.CreditCardValidator; -import org.apache.commons.validator.routines.DateValidator; -import org.apache.commons.validator.routines.DomainValidator; -import org.apache.commons.validator.routines.EmailValidator; -import org.apache.commons.validator.routines.ISBNValidator; -import org.apache.commons.validator.routines.InetAddressValidator; -import org.apache.commons.validator.routines.UrlValidator; - -/** - * Data Quality Checks consolidated. - */ -public class DataQuality extends Types { - private DataQuality() { - } - - /** - * Given a row, finds the length of the row. - * - * @param row length needs to be determined. - * @return length of the row. - */ - public static int columns(Row row) { - return row.width(); - } - - /** - * Finds if the row has a column. - * - * @param row in which a column needs to be checked. - * @param column name of the column to be checked. - * @return true if column is not null and exists, false otherwise. - */ - public static boolean hascolumn(Row row, String column) { - if (column == null) { - return false; - } - return row.find(column) != -1 ? true : false; - } - - /** - * Checks if the value is within the range. - * - * @param value to be checked if it's in the range. - * @param lower end of the defined range. - * @param upper end of the defined range inclusive. - * @return true if in range, false otherwise. - */ - public static boolean inrange(double value, double lower, double upper) { - Range range = Range.range(lower, BoundType.CLOSED, upper, BoundType.CLOSED); - if (range.contains(value)) { - return true; - } - return false; - } - - /** - * Returns the length of the string. - * - * @param str for which we need to determine the length. - * @return length of string if not null, 0 otherwise. - */ - public static int strlen(String str) { - if (str != null) { - return str.length(); - } - return 0; - } - - /** - * Checks if the object is null. - * - * @param object to be checked for null. - * @return true if - */ - public static boolean isnull(Object object) { - return object == null ? true : false; - } - - /** - * Checks if the string is empty or not. - * - * @param str to be checked for empty. - * @return true if not null and empty, else false. - */ - public static boolean isempty(String str) { - if (str != null && str.isEmpty()) { - return true; - } - return false; - } - - /** - * Validate using the default Locale. - * - * @param date The value validation is being performed on. - * @return true if the value is valid. - */ - public static boolean isDate(String date) { - return DateValidator.getInstance().isValid(date); - } - - /** - * Validate using the specified pattern. - * - * @param date The value validation is being performed on. - * @param pattern The pattern used to validate the value against. - * @return true if the value is valid. - */ - public static boolean isDate(String date, String pattern) { - return DateValidator.getInstance().isValid(date, pattern); - } - - /** - * Validates if string ip is a valid IP address or - * not. Could be IPv4 or IPv6. - * - * @param ip to be validated. - * @return true if valid IPv4 or IPv6. - */ - public static boolean isIP(String ip) { - return InetAddressValidator.getInstance().isValid(ip); - } - - /** - * Validates if string ip is a valid IPv4 address or - * not. - * - * @param ip to be validated. - * @return true if valid IPv4. - */ - public static boolean isIPv4(String ip) { - return InetAddressValidator.getInstance().isValidInet4Address(ip); - } - - /** - * Validates if string ip is a valid IPv6 address or - * not. - * - * @param ip to be validated. - * @return true if valid IPv6. - */ - public static boolean isIPv6(String ip) { - return InetAddressValidator.getInstance().isValidInet6Address(ip); - } - - /** - * Validates if string ip is a valid email address or - * not. - * - * @param email to be validated. - * @return true if valid email. - */ - public static boolean isEmail(String email) { - return EmailValidator.getInstance().isValid(email); - } - - /** - * Validates if string ip is a valid url address or - * not. - * - * @param url to be validated. - * @return true if valid url. - */ - public static boolean isUrl(String url) { - return UrlValidator.getInstance().isValid(url); - } - - /** - * Validates if string ip is a valid url domain or - * not. - * - * @param domain to be validated. - * @return true if valid url. - */ - public static boolean isDomainName(String domain) { - return DomainValidator.getInstance().isValid(domain); - } - - /** - * Validates if string ip is a valid top-level domain or - * not. - * - * @param domain to be validated. - * @return true if valid top-level domain. - */ - public static boolean isDomainTld(String domain) { - return DomainValidator.getInstance().isValidTld(domain); - } - - /** - * Validates if string ip is a valid generic top-level domain or - * not. - * - * @param domain to be validated. - * @return true if valid generic top-level domain. - */ - public static boolean isGenericTld(String domain) { - return DomainValidator.getInstance().isValidGenericTld(domain); - } - - /** - * Validates if string ip is a valid country top-level domain or - * not. - * - * @param domain to be validated. - * @return true if valid country top-level domain. - */ - public static boolean isCountryTld(String domain) { - return DomainValidator.getInstance().isValidCountryCodeTld(domain); - } - - /** - * Validates if string ip is a valid ISBN-10 or ISBN-13 or - * not. - * - * @param isbn to be validated. - * @return true if valid ISBN-10 or ISBN-13. - */ - public static boolean isISBN(String isbn) { - return ISBNValidator.getInstance().isValid(isbn); - } - - /** - * Validates if string ip is a valid ISBN-10 or - * not. - * - * @param isbn to be validated. - * @return true if valid ISBN-10. - */ - public static boolean isISBN10(String isbn) { - return ISBNValidator.getInstance().isValidISBN10(isbn); - } - - /** - * Validates if string ip is a valid ISBN-13 or - * not. - * - * @param isbn to be validated. - * @return true if valid ISBN-13. - */ - public static boolean isISBN13(String isbn) { - return ISBNValidator.getInstance().isValidISBN13(isbn); - } - - /** - * Validates if string ip is a valid credit card number or - * not. - * - * @param cc to be validated. - * @return true if valid credit card number. - */ - public static boolean isCreditCard(String cc) { - return CreditCardValidator.genericCreditCardValidator().isValid(cc); - } - - /** - * Validates if string ip is a valid amex credit card number or - * not. - * - * @param cc to be validated. - * @return true if valid amex credit card number. - */ - public static boolean isAmex(String cc) { - return CreditCardValidator.AMEX_VALIDATOR.isValid(cc); - } - - /** - * Validates if string ip is a valid visa credit card number or - * not. - * - * @param cc to be validated. - * @return true if valid visa credit card number. - */ - public static boolean isVisa(String cc) { - return CreditCardValidator.VISA_VALIDATOR.isValid(cc); - } - - /** - * Validates if string ip is a valid master credit card number or - * not. - * - * @param cc to be validated. - * @return true if valid master credit card number. - */ - public static boolean isMaster(String cc) { - return CreditCardValidator.MASTERCARD_VALIDATOR.isValid(cc); - } - - /** - * Validates if string ip is a valid diner credit card number or - * not. - * - * @param cc to be validated. - * @return true if valid diner credit card number. - */ - public static boolean isDiner(String cc) { - return CreditCardValidator.DINERS_VALIDATOR.isValid(cc); - } - - /** - * Validates if string ip is a valid discover credit card number or - * not. - * - * @param cc to be validated. - * @return true if valid discover credit card number. - */ - public static boolean isDiscover(String cc) { - return CreditCardValidator.DISCOVER_VALIDATOR.isValid(cc); - } - - /** - * Validates if string ip is a valid VPay credit card number or - * not. - * - * @param cc to be validated. - * @return true if valid VPay credit card number. - */ - public static boolean isVPay(String cc) { - return CreditCardValidator.VPAY_VALIDATOR.isValid(cc); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/functions/DateAndTime.java b/wrangler-core/src/main/java/io/cdap/functions/DateAndTime.java deleted file mode 100644 index 3b5269f0f..000000000 --- a/wrangler-core/src/main/java/io/cdap/functions/DateAndTime.java +++ /dev/null @@ -1,681 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - - -import org.joda.time.DateTime; -import org.joda.time.DateTimeUtils; - -import java.time.DayOfWeek; -import java.time.Duration; -import java.time.Instant; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.Year; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeFormatterBuilder; -import java.time.format.SignStyle; -import java.time.temporal.ChronoField; -import java.time.temporal.ChronoUnit; -import java.time.temporal.TemporalAdjusters; -import java.time.temporal.WeekFields; - -/** - * Collection of useful expression functions made available in the context - * of an expression. - * - * set-column column datetime:CurrentDate() - * set-column :column exp:{ datetime:CurrrentDate() } - */ -public final class DateAndTime { - private static final DateTimeFormatter DATE_TIME_FORMAT = - new DateTimeFormatterBuilder() - .appendValue(ChronoField.YEAR, 4, 10, SignStyle.EXCEEDS_PAD) - .appendLiteral("-") - .appendValue(ChronoField.MONTH_OF_YEAR, 2) - .appendLiteral("-") - .appendValue(ChronoField.DAY_OF_MONTH, 2) - .optionalStart() - .appendLiteral(" ") - .appendValue(ChronoField.HOUR_OF_DAY, 2) - .appendLiteral(':') - .appendValue(ChronoField.MINUTE_OF_HOUR, 2) - .appendLiteral(':') - .appendValue(ChronoField.SECOND_OF_MINUTE, 2) - .appendOptional( - new DateTimeFormatterBuilder() - .appendLiteral('.') - .appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, false) - .toFormatter() - ) - .toFormatter(); - - private static final DateTimeFormatter TIME_FORMAT = - new DateTimeFormatterBuilder() - .appendValue(ChronoField.HOUR_OF_DAY, 2) - .appendLiteral(':') - .appendValue(ChronoField.MINUTE_OF_HOUR, 2) - .appendLiteral(':') - .appendValue(ChronoField.SECOND_OF_MINUTE, 2) - .appendOptional( - new DateTimeFormatterBuilder() - .appendLiteral('.') - .appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, false) - .toFormatter() - ).toFormatter(); - - private static final DateTimeFormatter OUTPUT_DATETIME_FORMAT - = DateTimeFormatter.ofPattern("HH:mm:ss dd MMM yyyy"); - - private static DayOfWeek getDayOfWeek(String textDay) { - DayOfWeek dayOfWeek = DayOfWeek.SUNDAY; - switch(textDay.toUpperCase()) { - case "MON": - case "MONDAY": - dayOfWeek = DayOfWeek.MONDAY; - break; - - case "TUE": - case "TUESDAY": - dayOfWeek = DayOfWeek.TUESDAY; - break; - - case "WED": - case "WEDNESDAY": - dayOfWeek = DayOfWeek.WEDNESDAY; - break; - - case "THU": - case "THURSDAY": - dayOfWeek = DayOfWeek.THURSDAY; - break; - - case "FRI": - case "FRIDAY": - dayOfWeek = DayOfWeek.FRIDAY; - break; - - case "SAT": - case "SATUDAY": - dayOfWeek = DayOfWeek.SATURDAY; - break; - - case "SUN": - case "SUNDAY": - dayOfWeek = DayOfWeek.SUNDAY; - break; - } - return dayOfWeek; - } - - /** - * Return the {@link LocalDate} the string represents. If the string is null, this method will return null. - */ - public static LocalDate GetDate(String date) { - return date == null ? null : LocalDate.parse(date, DATE_TIME_FORMAT); - } - - /** - * Return the {@link LocalTime} the string represents. If the string is null, this method will return null. - */ - public static LocalTime GetTime(String time) { - return time == null ? null : LocalTime.parse(time, TIME_FORMAT); - } - - /** - * Return the {@link LocalDateTime} the string represents. If the string is null, this method will return null. - */ - public static LocalDateTime GetDateTime(String date) { - return LocalDateTime.parse(date, DATE_TIME_FORMAT); - } - - /** - * @return returns current date with time. - */ - public static LocalDate CurrentDate() { - return LocalDate.now(); - } - - /** - * @return return current localtime. - */ - public static LocalTime CurrentTime() { - return LocalTime.now(); - } - - /** - * @return return current time in milliseconds. - */ - public static long CurrentTimeMS() { - return CurrentTime().getNano() / 1000000L; - } - - /** - * @return return current data & time. - */ - public static LocalDateTime CurrentDateTime() { - return LocalDateTime.now(); - } - - /** - * @return return current timestamp in default timezone. - */ - public static ZonedDateTime CurrentTimestamp() { - return ZonedDateTime.now(); - } - - /** - * @return return current epoch seconds. - */ - public static long EpochSeconds() { - return Instant.now().getEpochSecond(); - } - - /** - * @return return current data & time in milliseconds. - */ - public static long CurrentTimestampMS() { - return Instant.now().toEpochMilli(); - } - - /** - * @return return current data & time in Nanoseconds. - */ - public static long CurrentTimestampNano() { - return Instant.now().getNano(); - } - - /** - * Returns a date object by adding an integer to a current date. If this integer is null, current date will - * be returned. The integer can be negative to return a date that is earlier than the current date. - * - * @param days to be added to current date. - * @return returns a {@link LocalDate} by adding days to current date. - */ - public static LocalDate DateFromDaysSince(Integer days) { - return DateFromDaysSince(days, LocalDate.now()); - } - - /** - * Returns a date object by adding an integer to a baseline date. If this integer is null, baseline date will be - * returned. The integer can be negative to return a date that is earlier than the baseline date. - * If baseline is null, the current date will be used. If days is null, it will be treated as 0. - * - * @param days to be added to the baseline date. - * @param baseline date to which 'days' are added. - * @return days added positive or negative to the baseline date. - */ - public static LocalDate DateFromDaysSince(Integer days, LocalDate baseline) { - baseline = baseline == null ? LocalDate.now() : baseline; - return baseline.plusDays(days == null ? 0 : days); - } - - /** - * Creates a {@link LocalDate} from the components year, month, and day. If any input is null, null will be - * returned. - * - * @param year to used for date. - * @param month to be used for date. - * @param day to be used for date - * @return a instance of {@link LocalDate} - */ - public static LocalDate DateFromComponents(Integer year, Integer month, Integer day) { - return year == null || month == null || day == null ? null : LocalDate.of(year, month, day); - } - - /** - * Returns a date from the given Julian day number. The day number will be treated as 0 if it is null. - * - * @param julianDay Julian day number - * @return a instance of {@link LocalDate} that represents the Julian day. - */ - public static LocalDate DateFromJulianDay(Long julianDay) { - DateTime datetime = new DateTime(DateTimeUtils.fromJulianDay(julianDay == null ? 0d : julianDay.doubleValue())); - return LocalDate.of(datetime.getYear(), datetime.getMonthOfYear(), datetime.getDayOfMonth()); - } - - /** - * Returns the given date, with offsets applied from the given year offset, month offset, and day of month offset. - * offsets are given as three separate values. The offset values can each be positive, zero, or negative. - * If base line is null, null will be returned. If the offset is null, it will be treated as 0. - * - * @param baseline baseline date. - * @param yearOffset year offset to be applied. - * @param monthOffset month offset to be applied. - * @param daysOffset days offset to be applied. - * @return Modified date with offsets applied. - */ - public static LocalDate DateOffsetByComponents(LocalDate baseline, Integer yearOffset, - Integer monthOffset, Integer daysOffset) { - return baseline == null ? null : baseline.plusYears(yearOffset == null ? 0 : yearOffset.longValue()) - .plusMonths(monthOffset == null ? 0 : monthOffset.longValue()) - .plusDays(daysOffset == null ? 0 : daysOffset.longValue()); - } - - /** - * Returns the number of days from the source date to the given date. If any date is null, null will be returned. - * - * @param source date of {@link LocalDate} type. - * @param destination date of {@link LocalDate} type. - * @return Number of days between the dates. - */ - public static Long DaysSinceFromDate(LocalDate source, LocalDate destination) { - return source == null || destination == null ? null : ChronoUnit.DAYS.between(source, destination); - } - - /** - * Returns the number of days in the month in the given base date. If date is null, null will be returned. - * - * @param date date of {@link LocalDate} type. - * @return number of days in the month in the given base date. - */ - public static Integer DaysInMonth(LocalDate date) { - return date == null ? null : date.getMonth().maxLength(); - } - - /** - * Returns the number of days in the year in the given base date. If date is null, null will be returned. - * - * @param date date of {@link LocalDate} type. - * @return number of days in the year in the given base date. - */ - public static Integer DaysInYear(LocalDate date) { - return date == null ? null : Year.of(date.getYear()).length(); - } - - /** - * Returns the given date offset by the given number of days. The offset value can be positive, zero, or negative. - * If date is null, null will be returned. If offset is null, it will be treated as 0. - * - * @param date date of {@link LocalDate} type. - * @param daysOffset days to offset the baseline date. - * @return Date offset by days. - */ - public static LocalDate DateOffsetByDays(LocalDate date, Integer daysOffset) { - return date == null ? null : date.plusDays(daysOffset == null ? 0 : daysOffset); - } - - /** - * Returns the hours portion of a time. If time is null, null will be returned. - * - * @param time of {@link LocalTime} type. - * @return hour portion of time - */ - public static Integer HoursFromTime(LocalTime time) { - return time == null ? null : time.getHour(); - } - - /** - * Returns a Julian day number from the given date. If date is null, null will be returned. - * - * @param date of {@link LocalDate} type. - * @return Julian day number. - */ - public static Long JulianDayFromDate(LocalDate date){ - if (date == null) { - return null; - } - long l = date.atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli(); - return DateTimeUtils.toJulianDayNumber(l); - } - - /** - * Returns the Nanosecond portion of a time. If time is null, null will be returned. - * - * @param time of {@link LocalTime} type. - * @return nanosecond portion of time. - */ - public static Integer NanoSecondsFromTime(LocalTime time) { - return time == null ? null : time.getNano(); - } - - /** - * Returns the microsecond portion of a time. If time is null, null will be returned. - * - * @param time of {@link LocalTime} type. - * @return microsecond portion of time. - */ - public static Integer MicroSecondsFromTime(LocalTime time) { - return NanoSecondsFromTime(time) / 1000; - } - - /** - * Returns the millisecond portion of a time. If time is null, null will be returned. - * - * @param time of {@link LocalTime} type. - * @return millisecond portion of time. - */ - public static Integer MilliSecondsFromTime(LocalTime time) { - return MicroSecondsFromTime(time) / 1000; - } - - /** - * Returns the number of seconds from midnight to the given time. If time is null, null will be returned. - * - * @param time of {@link LocalTime} type. - * @return seconds from midnight - */ - public static Integer MidnightSecondsFromTime(LocalTime time) { - return time == null ? null : time.toSecondOfDay(); - } - - /** - * Returns the minutes portion of a time. If time is null, null will be returned. - * - * @param time of {@link LocalTime} type. - * @return minute of time. - */ - public static Integer MinutesFromTime(LocalTime time) { - return time == null ? null : time.getMinute(); - } - - /** - * Returns the day of the month from the given date. If date is null, null will be returned. - * - * @param date of {@link LocalDate} type. - * @return month of give date. - */ - public static Integer MonthDayFromDate(LocalDate date) { - return date == null ? null : date.getDayOfMonth(); - } - - /** - * Returns the month number from the given date. If date is null, null will be returned. - * - * @param date of {@link LocalDate} type. - * @return month value in date. - */ - public static Integer MonthFromDate(LocalDate date) { - return date == null ? null : date.getMonthValue(); - } - - /** - * Returns the date of the specified day of the week soonest after the source date. - * The day of the week is specified as the full name, for example, thursday, or a - * three-letter abbreviation, for example, thu. - * If source is null, null will be returned. If the day of the week is null, source will be returned. - * - * @param source of {@link LocalDate} type. - * @param textDayOfWeek text day of the week. - * @return earliest day from the date. - */ - public static LocalDate NextWeekdayFromDate(LocalDate source, String textDayOfWeek) { - return source == null ? null : (textDayOfWeek == null ? source : - source.with(TemporalAdjusters.next(getDayOfWeek(textDayOfWeek)))); - } - - /** - * Returns the date of the specified day of the week offset by the specified number of weeks from the source date. - * The day of the week is specified as the full name, for example, thursday, or a three-letter abbreviation, - * for example, thu. The offset values can be positive, negative, or zero. - * If source is null, null will be returned. If textDayOfWeek is null, source will be returned. - * If offset is null, it will be treated as 0. - * - * @param source of {@link LocalDate} type. - * @param textDayOfWeek Display week of day string - * @param offset offset week. - * @return date of the specified day of the week offset - */ - public static LocalDate NthWeekdayFromDate(LocalDate source, String textDayOfWeek, Number offset) { - if (source == null || textDayOfWeek == null) { - return source; - } - - LocalDate target = source; - int counter = offset == null ? 0 : Math.abs(offset.intValue()); - for (int i = 0; i < counter; i++) { - target = target.with(offset.intValue() > 0 ? TemporalAdjusters.next(getDayOfWeek(textDayOfWeek)) : - TemporalAdjusters.previous(getDayOfWeek(textDayOfWeek))); - } - return target; - } - - /** - * Returns the date of the specified day of the week that is the most recent day before the source date. - * The day of the week is specified as the full name, for example, thursday, or a three-letter abbreviation, - * for example, thu. - * If source is null, null will be returned. If the day of the week is null, source will be returned. - * - * @param source of {@link LocalDate} type. - * @param textDayOfWeek Display week of day string - * @return previous day of the week. - */ - public static LocalDate PreviousWeekdayFromDate(LocalDate source, String textDayOfWeek) { - return source == null ? null : (textDayOfWeek == null ? source : - source.with(TemporalAdjusters.previous(getDayOfWeek(textDayOfWeek)))); - } - - /** - * Returns the seconds portion of a time. If time is null, null will be returned. - * - * @param time of {@link LocalTime} type. - * @return second portion of time. - */ - public static Integer SecondsFromTime(LocalTime time) { - return time == null ? null : time.getSecond(); - } - - /** - * Returns the number of seconds between two datetime objects. If either datetime is null, null will be returned. - * - * @param source a {@link LocalDateTime} type - * @param destination a {@link LocalDateTime} type - * @return number of seconds between two datetimes. - */ - public static Long SecondsSinceFromDateTime(LocalDateTime source, LocalDateTime destination) { - return source == null || destination == null ? null : Duration.between(destination, source).getSeconds(); - } - - /** - * @return Returns the system time and date as a formatted string. - */ - public static String TimeDate() { - return LocalDateTime.now().format(OUTPUT_DATETIME_FORMAT); - } - - /** - * Returns a time from the given hours, minutes, seconds, and microseconds, given as four separate values. - * If any input is null, null will be returned. - * - * @param hours component of {@link LocalTime} - * @param mins component of {@link LocalTime} - * @param seconds component of {@link LocalTime} - * @param microseconds component of {@link LocalTime} - * @return a instance of {@link LocalTime} - */ - public static LocalTime TimeFromComponents(Integer hours, Integer mins, Integer seconds, Integer microseconds) { - return hours == null || mins == null || seconds == null || microseconds == null ? - null : LocalTime.of(hours, mins, seconds, microseconds * 1000); - } - - /** - * Returns the time given the number of seconds since midnight. If seconds is null, midnight will be returned. - * - * @param seconds since midnight. - * @return time since midnight. - */ - public static LocalTime TimeFromMidnightSeconds(Integer seconds) { - return LocalTime.of(0,0,0).plusSeconds(seconds == null ? 0 : seconds); - } - - /** - * Returns the time, with offsets applied from the base time. - * hour offset, minute offset, and second offset each given as separate values. - * The seconds offset can include partial seconds. - * If time is null, null will be returned. If the offset is null, it will be treated as 0. - * - * @param time baseline {@link LocalTime} - * @param hour offset to added to baseline. - * @param min offset to added to baseline. - * @param seconds offset to added to baseline. - * @return hour, min and second added to baseline. - */ - public static LocalTime TimeOffsetByComponents(LocalTime time, Integer hour, Integer min, Integer seconds) { - return time == null ? null : time.plusHours(hour == null ? 0 : hour) - .plusMinutes(min == null ? 0 : min) - .plusSeconds(seconds == null ? 0 : seconds); - } - - /** - * Returns a datetime from the given date and time. If any input is null, null will be returned. - * - * @param date a instance of {@link LocalDate} - * @param time a instance of {@link LocalTime} - * @return a instance of {@link LocalDateTime} - */ - public static LocalDateTime GetDateTime(LocalDate date, LocalTime time) { - return date == null || time == null ? null : LocalDateTime.of(date, time); - } - - /** - * Returns a datetime that is derived from the number of seconds from the base datetime object. - * If time is null, null will be returned. If seconds is null, time will be returned. - * - * @param seconds to be added to base datetime. - * @param time base datetime. - * @return datetime with seconds added to base time. - */ - public static LocalDateTime DateTimeFromSecondsSince(Integer seconds, LocalDateTime time) { - return time == null ? null : time.plusSeconds(seconds == null ? 0 : seconds); - } - - /** - * Returns a datetime from the given epoch time specified in seconds. This method assumes the timestamp is in UTC - * time. If timestamp is null, null will be returned. - * - * @param epochTimestamp specified in seconds. - * @return a instance {@link LocalDateTime} - */ - public static LocalDateTime DateTimeFromEpoch(Long epochTimestamp) { - return epochTimestamp == null ? null : - LocalDateTime.ofInstant(Instant.ofEpochMilli(epochTimestamp * 1000), ZoneId.of("UTC")); - } - - /** - * Returns a datetime from the given time and datetime objects. - * The value in the time object overwrites the time value in the datetime object - * so that only the date part is used from the datetime. - * If datetime is null, null will be returned. If time is null, datetime will be returned. - * - * @param time to replace in datetime - * @param datetime who's datetime has to replaced. - * @return modified datetime. - */ - public static LocalDateTime DateTimeFromTime(LocalTime time, LocalDateTime datetime) { - return datetime == null ? null : (time == null ? datetime : datetime - .withHour(time.getHour()) - .withMinute(time.getMinute()) - .withSecond(time.getSecond()) - .withNano(time.getNano())); - } - - /** - * Returns a datetime from the given time and the offsets. - * If datetime is null, null will be returned. If offset is null, it will be treated as 0. - * - * @return Returns the datetime, with offsets applied from the base datetime. - */ - public static LocalDateTime DateTimeOffsetByComponents(LocalDateTime datetime, Integer yearOffset, - Integer monthOffset, Integer dayOfMonthOffset, - Integer hourOffset, Integer minOffset, Integer secondOffset) { - return datetime == null ? null : datetime - .plusYears(yearOffset == null ? 0 : yearOffset) - .plusMonths(monthOffset == null ? 0 : monthOffset) - .plusDays(dayOfMonthOffset == null ? 0 : dayOfMonthOffset) - .plusHours(hourOffset == null ? 0 : hourOffset) - .plusMinutes(minOffset == null ? 0 : minOffset) - .plusSeconds(secondOffset == null ? 0 : secondOffset); - } - - /** - * @return Returns the datetime, with offsets applied from the base datetime with seconds offset. - * If datetime is null, null will be returned. If seconds is null, it will be treated as 0. - */ - public static LocalDateTime DateTimeOffsetBySeconds(LocalDateTime datetime, Integer secondsOffset) { - return datetime == null ? null : datetime.plusSeconds(secondsOffset == null ? 0 : secondsOffset); - } - - /** - * @return Returns a UNIX epoch time in seconds from the given datetime in UTC time. - * If datetime is null, null will be returned. - */ - public static Long EpochFromDateTime(LocalDateTime datetime) { - return datetime == null ? null : datetime.toEpochSecond(ZoneOffset.UTC); - } - - /** - * @return Returns a UNIX epoch time in seconds from the given timestamp in UTC time. - * If timestamp is null, null will be returned. - */ - public static Long EpochFromTimestamp(ZonedDateTime timestamp) { - return timestamp == null ? null : timestamp.toEpochSecond(); - } - - /** - * @return Returns the day number of the week from the given date with start of week provided. - * If date is null, null will be returned. If startOfWeek is null, the date's day number of the week will be returned. - */ - public static Integer WeekdayFromDate(LocalDate date, String startOfWeek) { - if (date == null) { - return null; - } - int daysInWeek = startOfWeek == null ? date.getDayOfWeek().getValue() - : date.with(TemporalAdjusters.previousOrSame( - DayOfWeek.valueOf(startOfWeek.toUpperCase()))).getDayOfWeek().getValue(); - return 7 - daysInWeek + 1; - } - - /** - * @return Returns the day number of the week from the given date. - * If date is null, null will be returned. - */ - public static Integer WeekdayFromDate(LocalDate date) { - return WeekdayFromDate(date, "Sunday"); - } - - - /** - * @return Returns the day number in the year from the given date. - * If date is null, null will be returned. - */ - public static Integer YeardayFromDate(LocalDate date) { - return date == null ? null : date.getDayOfYear(); - } - - - /** - * @return Returns the year from the given date. - * If date is null, null will be returned - */ - public static Integer YearFromDate(LocalDate date) { - return date == null ? null : date.getYear(); - } - - /** - * @return Returns the week number in the year from the given date. - * If date is null, null will be returned. - */ - public static Integer YearweekFromDate(LocalDate date) { - // Start of the week is MONDAY and it should have minimum 7 days of the week. - return date == null ? null : - date.get(WeekFields.of(DayOfWeek.MONDAY, 7).weekOfWeekBasedYear()); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/functions/Dates.java b/wrangler-core/src/main/java/io/cdap/functions/Dates.java deleted file mode 100644 index 478881aab..000000000 --- a/wrangler-core/src/main/java/io/cdap/functions/Dates.java +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import io.cdap.wrangler.dq.TypeInference; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.Period; -import org.joda.time.Seconds; - -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.util.TimeZone; - -import static java.time.temporal.ChronoField.ERA; -import static java.time.temporal.ChronoUnit.DAYS; - -/** - * Collection of useful expression functions made available in the context - * of an expression. - * - * set-column column - */ -@Deprecated -public final class Dates { - /** - * Converts a date to long -- unix timestamp in milli-seconds. - * - * @param date to be converted to unix timestamp. - * @return unixtimestamp of the date. - */ - public static long UNIXTIMESTAMP_MILLIS(ZonedDateTime date) { - validate(date, "UNIXTIMESTAMP_MILLIS"); - return date.toInstant().toEpochMilli(); - } - - /** - * Converts a date to long -- unix timestamp in seconds. - * - * @param date to be converted to unix timestamp. - * @return unixtimestamp of the date. - */ - public static long UNIXTIMESTAMP_SECONDS(ZonedDateTime date) { - validate(date, "UNIXTIMESTAMP_SECONDS"); - return date.toEpochSecond(); - } - - /** - * Converts a {@link ZonedDateTime} to Month in year. - *

- * January is 1, February is 2, and so on. - *

- * @param date to extract month. - * @return month. - */ - public static int MONTH(ZonedDateTime date) { - validate(date, "MONTH"); - return date.getMonthValue(); - } - - /** - * Extracts a short month description from Date. - * - * @param date to extract short month description. - * @return short month description. - */ - public static String MONTH_SHORT(ZonedDateTime date) { - validate(date, "MONTH_SHORT"); - DateTime dt = getDateTime(date); - DateTime.Property pMoY = dt.monthOfYear(); - return pMoY.getAsShortText(); - } - - /** - * Extracts a long month description from Date. - * - * @param date to extract long month description. - * @return long month description. - */ - public static String MONTH_LONG(ZonedDateTime date) { - validate(date, "MONTH_LONG"); - DateTime dt = getDateTime(date); - DateTime.Property pMoY = dt.monthOfYear(); - return pMoY.getAsText(); - } - - /** - * Extracts only year from Date. - * - * @param date to extract year from. - * @return year as integer. - */ - public static int YEAR(ZonedDateTime date) { - validate(date, "YEAR"); - return date.getYear(); - } - - /** - * Extracts day of the week from the date. - * - * @param date to extract date of the week. - * @return day of the week. - */ - public static int DAY_OF_WEEK(ZonedDateTime date) { - validate(date, "DAY_OF_WEEK"); - return date.getDayOfWeek().getValue(); - } - - /** - * Extracts day of the week from the date. - * - * @param date to extract date of the week. - * @return day of the week. - */ - public static String DAY_OF_WEEK_SHORT(ZonedDateTime date) { - validate(date, "DAY_OF_WEEK_SHORT"); - DateTime dt = getDateTime(date); - DateTime.Property value = dt.dayOfWeek(); - return value.getAsShortText(); - } - - /** - * Extracts day of the week from the date. - * - * @param date to extract date of the week. - * @return day of the week. - */ - public static String DAY_OF_WEEK_LONG(ZonedDateTime date) { - validate(date, "DAY_OF_WEEK_LONG"); - DateTime dt = getDateTime(date); - DateTime.Property value = dt.dayOfWeek(); - return value.getAsText(); - } - - /** - * Extracts Day of the year from the date. - * - * @param date to extract date of the year. - * @return date of the year. - */ - public static int DAY_OF_YEAR(ZonedDateTime date) { - validate(date, "DAY_OF_YEAR"); - return date.getDayOfYear(); - } - - /** - * Extracts Era from the date. - * - * @param date to extract era. - * @return era. - */ - public static int ERA(ZonedDateTime date) { - validate(date, "ERA"); - return date.get(ERA); - } - - /** - * Extracts Era from the date as short text. - * - * @param date to extract era. - * @return era. - */ - public static String ERA_SHORT(ZonedDateTime date) { - validate(date, "ERA_SHORT"); - DateTime dt = getDateTime(date); - DateTime.Property value = dt.era(); - return value.getAsShortText(); - } - - /** - * Extracts Era from the date as long text. - * - * @param date to extract era. - * @return era. - */ - public static String ERA_LONG(ZonedDateTime date) { - validate(date, "ERA_LONG"); - DateTime dt = getDateTime(date); - DateTime.Property value = dt.era(); - return value.getAsText(); - } - - /** - * Return number of dates between two days. - * - * @param date1 First date. - * @param date2 Second date. - * @return Number of days. - */ - public static int DAYS_BETWEEN(ZonedDateTime date1, ZonedDateTime date2) { - validate(date1, "ERA_LONG"); - validate(date2, "ERA_LONG"); - return (int) DAYS.between(date1, date2); - } - - /** - * Return number of dates between now and date days. - * - * @param date Now - this date. - * @return Number of days. - */ - public static int DAYS_BETWEEN_NOW(ZonedDateTime date) { - validate(date, "DAYS_BETWEEN_NOW"); - ZonedDateTime now = ZonedDateTime.now(ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - // returns number of days between date and now, date being lower. - return (int) DAYS.between(date, now); - } - - /** - * Converts seconds to days. - * - * @param seconds to be converted. - * @return days equivalent of seconds - */ - public static int SECONDS_TO_DAYS(int seconds) { - Period period = new Period(Seconds.seconds(seconds)); - return period.toStandardDays().getDays(); - } - - /** - * Converts seconds to hours. - * - * @param seconds to be converted. - * @return hours equivalent of seconds - */ - public static int SECONDS_TO_HOURS(int seconds) { - Period period = new Period(Seconds.seconds(seconds)); - return period.toStandardHours().getHours(); - } - - /** - * Converts seconds to mins. - * - * @param seconds to be converted. - * @return mins equivalent of seconds - */ - public static int SECONDS_TO_MINUTES(int seconds) { - Period period = new Period(Seconds.seconds(seconds)); - return period.toStandardMinutes().getMinutes(); - } - - /** - * Converts seconds to weeks. - * - * @param seconds to be converted. - * @return weeks equivalent of seconds - */ - public static int SECONDS_TO_WEEKS(int seconds) { - Period period = new Period(Seconds.seconds(seconds)); - return period.toStandardWeeks().getWeeks(); - } - - /** - * Checks if a column is a date column or not. - * - * @param value representing a date. - * @return true if it's date, false if not. - */ - public static boolean isDate(String value) { - return TypeInference.isDate(value); - } - - /** - * Checks if the value passed is a date time. - * - * @param value representing date time. - * @return true if it's datetime, false if not. - */ - public static boolean isTime(String value) { - return TypeInference.isTime(value); - } - - private static DateTime getDateTime(ZonedDateTime zonedDateTime) { - return new DateTime( - zonedDateTime.toInstant().toEpochMilli(), - DateTimeZone.forTimeZone(TimeZone.getTimeZone(zonedDateTime.getZone()))); - } - - private static void validate(ZonedDateTime date, String method) { - if (date == null) { - throw new IllegalArgumentException(String.format("Date can not be null for %s", method)); - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/functions/GeoFences.java b/wrangler-core/src/main/java/io/cdap/functions/GeoFences.java deleted file mode 100644 index 41e25304e..000000000 --- a/wrangler-core/src/main/java/io/cdap/functions/GeoFences.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import com.github.filosganga.geogson.gson.GeometryAdapterFactory; -import com.github.filosganga.geogson.model.Coordinates; -import com.github.filosganga.geogson.model.Feature; -import com.github.filosganga.geogson.model.FeatureCollection; -import com.github.filosganga.geogson.model.Polygon; -import com.github.filosganga.geogson.model.positions.SinglePosition; -import com.google.common.collect.Lists; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonSyntaxException; - -import java.util.List; - -/** - * GeoFencing check based on location and polygon - */ -public final class GeoFences { - private GeoFences() { - } - - private static final Gson GSON = new GsonBuilder() - .registerTypeAdapterFactory(new GeometryAdapterFactory()) - .create(); - - /** - * Static method to be used with jexl - * Checks if Point is inside any of the given polygonal geofences based on the winding number algorithm. - * @deprecated use {@link #InFence} instead - * - * @param latitude latitude of the location to verify - * @param longitude longitude of the location to verify - * @param geofences GeoJson representation of the fence area - * @return true if location is inside any of the given geofences, else false - */ - @Deprecated - public static Boolean inFence(double latitude, double longitude, String geofences) { - return InFence(latitude, longitude, geofences); - } - - /** - * Static method to be used with jexl - * Checks if the coordinate is inside any of the given polygonal geofences based on the winding number algorithm. - * If any of the inputs is null, this method will return false - * - * @param latitude latitude of the location to verify - * @param longitude longitude of the location to verify - * @param geofences GeoJson representation of the fence area - * @return true if location is inside any of the given geofences, else false - */ - public static Boolean InFence(Double latitude, Double longitude, String geofences) { - if (latitude == null || longitude == null || geofences == null) { - return false; - } - - Coordinates location = Coordinates.of(longitude, latitude); - boolean inzone = false; - FeatureCollection featureCollection; - try { - featureCollection = GSON.fromJson(geofences, FeatureCollection.class); - } catch (IllegalArgumentException e) { - throw new IllegalArgumentException(String.format("String %s is not a valid geoJson representation of fence", - geofences), e); - } catch (JsonSyntaxException e) { - throw new IllegalArgumentException(String.format("String %s is not a valid Json string", geofences), e); - } - for (Feature feature : featureCollection.features()) { - inzone = inzone || isPointInside(feature, location); - } - return inzone; - } - - private static Boolean isPointInside(Feature feature, Coordinates location) { - Polygon polygon = (Polygon) feature.geometry(); - List positions = Lists.newArrayList(polygon.perimeter().positions().children()); - - if ((positions == null) || (location == null)) { - return false; - } - - int wn = 0; - for (int i = 0; i < positions.size() - 1; i++) { - if (positions.get(i).coordinates().getLat() <= location.getLat()) { - if (positions.get(i + 1).coordinates().getLat() > location.getLat()) { - if (isLeft(positions.get(i).coordinates(), positions.get(i + 1).coordinates(), location) > 0.0) { - ++wn; - } - } - } else { - if (positions.get(i + 1).coordinates().getLat() <= location.getLat()) { - if (isLeft(positions.get(i).coordinates(), positions.get(i + 1).coordinates(), location) < 0.0) { - --wn; - } - } - } - } - return (wn != 0); - } - - private static double isLeft(Coordinates vertex0, Coordinates vertex1, Coordinates gpC) { - return (vertex1.getLon() - vertex0.getLon()) * (gpC.getLat() - vertex0.getLat()) - - (gpC.getLon() - vertex0.getLon()) * (vertex1.getLat() - vertex0.getLat()); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/functions/Global.java b/wrangler-core/src/main/java/io/cdap/functions/Global.java deleted file mode 100644 index 0ea5f194e..000000000 --- a/wrangler-core/src/main/java/io/cdap/functions/Global.java +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import com.google.common.base.Strings; - -/** - * Collection of useful expression functions made available in the context - * of an expression. - * - * set-column column - */ -public final class Global { - private Global() { - } - - /** - * Converts String value to double. - * - * @param value of type String to be converted to double. - * @return double value of the string passed. - */ - public static double toDouble(String value) { - return Double.parseDouble(value); - } - - /** - * Coverts a String value to float. - * - * @param value of type string to be converted to float. - * @return float value of the string passed. - */ - public static float toFloat(String value) { - return Float.parseFloat(value); - } - - /** - * Converts a String value to Long. - * - * @param value of type string to be converted to float. - * @return float value of the string passed. - */ - public static long toLong(String value) { - return Long.parseLong(value); - } - - /** - * Converts a String value to integer. - * - * @param value of type string to be converted to integer. - * @return integer value of the string passed. - */ - public static int toInteger(String value) { - return Integer.parseInt(value); - } - - /** - * Converts a String value to byte array. - * - * @param value of type string to be converted to byte array. - * @return byte array value of the string passed. - */ - public static byte[] toBytes(String value) { - return value.getBytes(); - } - - /** - * Concats two string without any separator in between. - * - * @param a First string - * @param b Second String - * @return concated Strings - */ - public static String concat(String a, String b) { - if (a == null) { - return b; - } - if (b == null) { - return a; - } - return a.concat(b); - } - - /** - * Concats two string with a delimiter. - * - * @param a first string. - * @param delim delimiter. - * @param b second string. - * @return concated string. - */ - public static String concat(String a, String delim, String b) { - if (a == null && b != null) { - return delim.concat(b); - } else if (b == null && a != null) { - return a.concat(delim); - } - return a.concat(delim).concat(b); - } - - /** - * Finds the first non-null object. - * - * @param objects to be check for null. - * @return first non-null object. - */ - public static Object coalesce(Object ... objects) { - for (Object object : objects) { - if (object != null) { - return object; - } - } - return objects.length > 0 ? objects[0] : null; - } - - /** - * Finds the last non-null object. - * - * @param objects to be check for null. - * @return first non-null object. - */ - public static Object rcoalesce(Object ... objects) { - int idx = objects.length - 1; - while (idx >= 0) { - if (objects[idx] != null) { - return objects[idx]; - } - idx = idx - 1; - } - return objects.length > 0 ? objects[objects.length - 1] : null; - } - - /** - * Formats the string in way similar to String format. - * - * @param str format of string. - * @param args arguments to included in the string. - * @return A formatted string. - */ - public static String format(String str, Object... args) { - return String.format(str, args); - } - - /** - * Returns a string, of length at least {@code minLength}, consisting of {@code string} prepended - * with as many copies of {@code padChar} as are necessary to reach that length. For example, - * - *
    - *
  • {@code padStart("7", 3, '0')} returns {@code "007"} - *
  • {@code padStart("2010", 3, '0')} returns {@code "2010"} - *
- * @return the padded string. - */ - public static String padAtStart(String string, int minLength, char padChar) { - return Strings.padStart(string, minLength, padChar); - } - - /** - * Returns a string, of length at least {@code minLength}, consisting of {@code string} appended - * with as many copies of {@code padChar} as are necessary to reach that length. For example, - * - *
    - *
  • {@code padEnd("4.", 5, '0')} returns {@code "4.000"} - *
  • {@code padEnd("2010", 3, '!')} returns {@code "2010"} - *
- * - * @return the padded string - */ - public static String padAtEnd(String string, int minLength, char padChar) { - return Strings.padEnd(string, minLength, padChar); - } - - /** - * Returns a string consisting of a specific number of concatenated copies of an input string. For - * example, {@code repeat("hey", 3)} returns the string {@code "heyheyhey"}. - * - * @param string any non-null string - * @param count the number of times to repeat it; a nonnegative integer - * @return a string containing {@code string} repeated {@code count} times (the empty string if - * {@code count} is zero) - * @throws IllegalArgumentException if {@code count} is negative - */ - public static String repeat(String string, int count) { - return Strings.repeat(string, count); - } - - /** - * This String util method removes single or double quotes - * from a string if its quoted. - * for input string = "mystr1" output will be = mystr1 - * for input string = 'mystr2' output will be = mystr2 - * - * @param string value to be unquoted. - * @return value unquoted, null if input is null. - * - */ - public static String unquote(String string) { - - if (string != null && ((string.startsWith("\"") && string.endsWith("\"")) - || (string.startsWith("'") && string.endsWith("'")))) { - string = string.substring(1, string.length() - 1); - } - return string; - } - - /** - * Returns true when an expression does not evaluate to the null value. - * - * @param value to be evaluated. - * @return true when not null, false otherwise. - */ - public static boolean IsNotNull(Object value) { - return value != null; - } - - /** - * Returns true when an expression evaluates to the null value. - * - * @param value to be evaluated. - * @return false when not null, true otherwise. - */ - public static boolean IsNull(Object value) { - return !IsNotNull(value); - } - - /** - * Returns an empty string if the input column is null, otherwise returns the input column value. - * - * @param value to be evaluated. - * @return Empty string if null, else 'value' - */ - public static Object NullToEmpty(Object value) { - if (IsNull(value)) { - return ""; - } - return value; - } - - /** - * Returns zero if the input column is null, otherwise returns the input column value. - * - * @param value to be evaluated. - * @return Empty string if null, else 'value' - */ - public static Object NullToZero(Object value) { - if (IsNull(value)) { - return 0; - } - return value; - } - - /** - * Returns the specified value if the input column is null, otherwise returns the input column value. - * - * @param value to evaluated. - * @param replace value to replace with. - * @return value if not null, else with replaced value. - */ - public static Object NullToValue(Object value, Object replace) { - if (IsNull(value)) { - return replace; - } - return value; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/functions/JsonFunctions.java b/wrangler-core/src/main/java/io/cdap/functions/JsonFunctions.java deleted file mode 100644 index d07f24cfb..000000000 --- a/wrangler-core/src/main/java/io/cdap/functions/JsonFunctions.java +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonNull; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSyntaxException; -import com.jayway.jsonpath.Configuration; -import com.jayway.jsonpath.DocumentContext; -import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.Option; -import com.jayway.jsonpath.spi.json.GsonJsonProvider; -import com.jayway.jsonpath.spi.mapper.GsonMappingProvider; - -import java.util.Iterator; -import java.util.Map; -import java.util.Set; -import javax.annotation.Nullable; - -/** - * Collection of useful expression functions made available in the context - * of an expression. - * - * set-column column - */ -public final class JsonFunctions { - public static final Configuration GSON_CONFIGURATION = Configuration - .builder() - .mappingProvider(new GsonMappingProvider()) - .jsonProvider(new GsonJsonProvider()) - .options(Option.SUPPRESS_EXCEPTIONS) - .build(); - - private static final JsonParser PARSER = new JsonParser(); - private static final Gson GSON = new GsonBuilder().serializeNulls().create(); - - private JsonFunctions() { - } - - @Deprecated - public static JsonElement select(String json, String path, String ...paths) { - JsonElement element = PARSER.parse(json); - return select(element, path, paths); - } - - @Deprecated - public static JsonElement select(String json, boolean toLower, String path, String ...paths) { - JsonElement element = PARSER.parse(json); - return select(element, toLower, path, paths); - } - - @Deprecated - public static JsonElement select(JsonElement element, String path, String ...paths) { - return select(element, true, path, paths); - } - - @Deprecated - public static JsonElement select(JsonElement element, boolean toLower, String path, String ...paths) { - if (toLower) { - element = keysToLower(element); - } - DocumentContext context = JsonPath.using(GSON_CONFIGURATION).parse(element); - if (paths.length == 0) { - return context.read(path); - } else { - JsonArray array = new JsonArray(); - array.add((JsonElement) context.read(path)); - for (String p : paths) { - array.add((JsonElement) context.read(p)); - } - return array; - } - } - - @Deprecated - public static JsonElement drop(String json, String field, String ... fields) { - JsonElement element = PARSER.parse(json); - return drop(element, field, fields); - } - - /** - * Removes fields from a JSON inline. - * - * This method recursively iterates through the Json to delete one or more fields specified. - * It requires the Json to be parsed. - * - * @param element Json element to be parsed. - * @param field first field to be deleted. - * @param fields list of fields to be deleted. - * @return - */ - @Deprecated - public static JsonElement drop(JsonElement element, String field, String ... fields) { - if(element.isJsonObject()) { - JsonObject object = element.getAsJsonObject(); - Set> entries = object.entrySet(); - Iterator> iterator = entries.iterator(); - while (iterator.hasNext()) { - Map.Entry next = iterator.next(); - drop(next.getValue(), field, fields); - } - object.remove(field); - for (String fld : fields) { - object.remove(fld); - } - } else if (element.isJsonArray()) { - JsonArray object = element.getAsJsonArray(); - for (int i = 0; i < object.size(); ++i) { - JsonElement arrayElement = object.get(i); - if (arrayElement.isJsonObject()) { - drop(arrayElement, field, fields); - } - } - } - return element; - } - - /** - * This function lowers the keys of the json. it applies this transformation recurively. - * - * @param element to be transformed. - * @return modified element. - */ - @Deprecated - public static JsonElement keysToLower(JsonElement element) { - if (element.isJsonObject()) { - JsonObject newObject = new JsonObject(); - JsonObject object = element.getAsJsonObject(); - Set> entries = object.entrySet(); - Iterator> iterator = entries.iterator(); - while (iterator.hasNext()) { - Map.Entry next = iterator.next(); - String name = next.getKey(); - JsonElement child = next.getValue(); - newObject.add(name.toLowerCase(), keysToLower(child)); - } - return newObject; - } else if (element.isJsonArray()) { - JsonArray newArray = new JsonArray(); - JsonArray array = element.getAsJsonArray(); - for (int i = 0; i < array.size(); ++i) { - newArray.add(keysToLower(array.get(i))); - } - return newArray; - } - return element; - } - - @Deprecated - public static String join(JsonElement element, String separator) { - StringBuilder sb = new StringBuilder(); - if (element instanceof JsonArray) { - JsonArray array = element.getAsJsonArray(); - for (int i = 0; i < array.size(); ++i) { - JsonElement value = array.get(i); - if (value == null) { - continue; - } - if (value instanceof JsonPrimitive) { - sb.append(value); - } - sb.append(separator); - } - } - return sb.toString(); - } - - /** - * This method converts a JavaScript value to a JSON string. - * - * @param element the value to convert to JSON string - * @return a JSON string. - */ - @Deprecated - public static String stringify(JsonElement element) { - if (element == null) { - return "null"; - } - return element.toString(); - } - - /** - * Parses a column or string to JSON. This is equivalent to JSON.parse() - * This function by default lowercases the keys. - * - * @param json string representation of json. - * @return parsed json else throws an exception. - */ - @Deprecated - public static JsonElement parse(String json) { - return parse(json, false); - } - - /** - * Parses a column or string to JSON. This is equivalent to JSON.parse() - * - * @param json string representation of json. - * @param toLower true to lower case keys, false to leave it as-is. - * @return parsed json else throws an exception. - */ - @Deprecated - public static JsonElement parse(String json, boolean toLower) { - JsonElement element = PARSER.parse(json); - if (toLower) { - element = keysToLower(element); - } - return element; - } - - /** - * Parses a column or string to JSON. If the json string is invalid, this method will return a JsonNull - * - * @param json string representation of json. - * @return parsed json - */ - public static JsonElement Parse(String json) { - try { - JsonElement element = PARSER.parse(json); - return element; - } catch (JsonSyntaxException e) { - return JsonNull.INSTANCE; - } - } - - /** - * Checks if a json is valid. - * - * @param json to checked for validity. - * @return true if valid, false otherwise. - */ - public static boolean IsValid(String json) { - try { - PARSER.parse(json); - return true; - } catch (JsonSyntaxException e) { - return false; - } - } - - /** - * Checks if a Json is {@code JsonNull}. - * - * @param element to be inspected for null. - * @return true if null, false otherwise. - */ - public static boolean IsNull(JsonElement element) { - return element == null || element.isJsonNull(); - } - - /** - * Checks if a Json is {@code JsonObject}. - * - * @param element to be inspected for object. - * @return true if object, false otherwise. - */ - public static boolean IsObject(JsonElement element) { - return element != null && element.isJsonObject(); - } - - /** - * Checks if a Json is {@code JsonArray}. - * - * @param element to be inspected for array. - * @return true if array, false otherwise. - */ - public static boolean IsArray(JsonElement element) { - return element != null && element.isJsonArray(); - } - - /** - * Selects part of JSON using JSON DSL specified as json path. - * - * @param element json to be inspected. - * @param path to be searched for in the element. - * @param paths other paths. - * @return A json array containing the results of all json paths. - */ - public static JsonElement Select(JsonElement element, String path, String... paths) { - DocumentContext context = JsonPath.using(GSON_CONFIGURATION).parse(element); - if (paths.length == 0) { - return context.read(path); - } - JsonArray array = new JsonArray(); - array.add((JsonElement) context.read(path)); - for (String p : paths) { - array.add((JsonElement) context.read(p)); - } - return array; - } - - /** - * This method stringyfies json object. - * - * @param element the value to convert to JSON string - * @return a JSON string. - */ - public static String Stringify(JsonElement element) { - if (element == null) { - return GSON.toJson(JsonNull.INSTANCE); - } - return GSON.toJson(element); - } - - /** - * @return Number of elements in the array. - */ - @Nullable - public static int ArrayLength(JsonArray array) { - if (array != null) { - return array.size(); - } - return 0; - } -} - diff --git a/wrangler-core/src/main/java/io/cdap/functions/Logical.java b/wrangler-core/src/main/java/io/cdap/functions/Logical.java deleted file mode 100644 index 05d8d7707..000000000 --- a/wrangler-core/src/main/java/io/cdap/functions/Logical.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -/** - * The collection of logical functions that operate on bit. - */ -public final class Logical { - - /** - * Don't let anyone instantiate this class. - */ - private Logical() {} - - /** - * Bitwise 'AND' operation of two numbers. The inputs must be non-null. - * - * @param num1 first number. - * @param num2 second number. - * @return a result of bitwise 'AND'. - */ - public static long BitAnd(long num1, long num2) { - return num1 & num2; - } - - /** - * Bitwise 'AND' operation of two numbers. The inputs must be non-null. - * - * @param num1 first number. - * @param num2 second number. - * @return a result of bitwise 'AND'. - */ - public static int BitAnd(int num1, int num2) { - return num1 & num2; - } - - /** - * Bitwise 'OR' operation of two numbers. The inputs must be non-null. - * - * @param num1 first number. - * @param num2 second number. - * @return a result of bitwise 'OR' - */ - public static long BitOr(long num1, long num2) { - return num1 | num2; - } - - /** - * Bitwise 'OR' operation of two numbers. The inputs must be non-null. - * - * @param num1 first number. - * @param num2 second number. - * @return a result of bitwise 'OR' - */ - public static int BitOr(int num1, int num2) { - return num1 | num2; - } - - /** - * Bitwise 'XOR' operation of two numbers. The inputs must be non-null. - * - * @param num1 first number. - * @param num2 second number. - * @return a result of bitwise 'XOR' - */ - public static long BitXor(long num1, long num2) { - return num1 ^ num2; - } - - /** - * Bitwise 'XOR' operation of two numbers. The inputs must be non-null. - * - * @param num1 first number. - * @param num2 second number. - * @return a result of bitwise 'XOR' - */ - public static int BitXor(int num1, int num2) { - return num1 ^ num2; - } - - /** - * Returns the complement of the logical value of an expression. - * A numeric expression that evaluates to 0 is a logical value of false. - * A numeric expression that evaluates to anything else is a logical true. - * If the value of expression is true, the Not function returns a value of false (0). - * If the value of expression is false, the Not function returns a value of true (1). - * - * @param val expression result. - * @return 1 or 0. - */ - public static int Not(double val) { - return val == 0d ? 1 : 0; - } - - /** - * Returns the complement of the logical value of the given string. - * An empty string is logically false. All other string expressions, including strings that include - * an empty string, spaces, or the number 0 and spaces, are logically true. - * If the logical value of the string is true, the Not function returns a value of false (0). - * If the logical value of the string is false, the Not function returns a value of true (1). - * - * @param val string value. - * @return 1 or 0. - */ - public static int Not(String val) { - return (val == null || val.isEmpty()) ? 1 : 0; - } - - /** - * Returns the complement of the logical value of an expression. - * A numeric expression that evaluates to 0 is a logical value of false. - * A numeric expression that evaluates to anything else is a logical true. - * If the value of expression is true, the Not function returns a value of false (0). - * If the value of expression is false, the Not function returns a value of true (1). - * - * @param val string value. - * @return 1 or 0. - */ - public static int Not(float val) { - return val == 0f ? 1 : 0; - } - - /** - * Returns the complement of the logical value of an expression. - * A numeric expression that evaluates to 0 is a logical value of false. - * A numeric expression that evaluates to anything else is a logical true. - * If the value of expression is true, the Not function returns a value of false (0). - * If the value of expression is false, the Not function returns a value of true (1). - * - * @param val string value. - * @return 1 or 0. - */ - public static int Not(int val) { - return val == 0 ? 1 : 0; - } - - /** - * Returns the complement of the logical value of an expression. - * A numeric expression that evaluates to 0 is a logical value of false. - * A numeric expression that evaluates to anything else is a logical true. - * If the value of expression is true, the Not function returns a value of false (0). - * If the value of expression is false, the Not function returns a value of true (1). - * - * @param val string value. - * @return 1 or 0. - */ - public static int Not(long val) { - return val == 0L ? 1 : 0; - } - - /** - * Returns the long made from the string argument, which contains a binary representation of "1"s and "0"s. - * - * @param value to be compressed. - * @return long value of compressed binary string. - */ - public static long BitCompress(String value) { - return Long.parseUnsignedLong(value, 2); - } - - /** - * Returns a string containing the binary representation in "1"s and "0"s of the given long. - * - * @param value to be expanded into '1' and '0' binary representation. - * @return a binary string representation of value. - */ - public static String BitExpand(long value) { - return Long.toBinaryString(value); - } - - /** - * Returns a long with specific bits set to a specific state. - * - * @param value to perform action on. - * @param positions array of positions. - * @param bit to be set. Either 1 or 0. - * @return a long represents the bit set based on positions specified. - */ - public static long SetBit(long value, int[] positions, int bit) { - long result = value; - for (int position : positions) { - position = position - 1; - if (bit > 0) { - result = result | (1 << position); - result |= 1 << position; - } else { - result = result & ~(1 << position); - result &= ~(1 << position); - } - } - return result; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/functions/NumberFunctions.java b/wrangler-core/src/main/java/io/cdap/functions/NumberFunctions.java deleted file mode 100644 index 1618ca70a..000000000 --- a/wrangler-core/src/main/java/io/cdap/functions/NumberFunctions.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import java.math.BigDecimal; -import javax.annotation.Nullable; - -public final class NumberFunctions { - - /** - * @return The number as double. - */ - @Nullable - public static Double AsDouble(@Nullable Number value) { - return value == null ? null : value.doubleValue(); - } - - /** - * @return The number as float. - */ - @Nullable - public static Float AsFloat(@Nullable Number value) { - return value == null ? null : value.floatValue(); - } - - /** - * @return The number as integer. - */ - @Nullable - public static Integer AsInteger(@Nullable Number value) { - return value == null ? null : value.intValue(); - } - - /** - * @return Returns the mantissa from the given number. Mantissa definition is used from - * https://mathworld.wolfram.com/Mantissa.html - */ - public static double Mantissa(int value) { - return 0d; - } - - /** - * @return Returns the mantissa from the given number. Mantissa definition is used from - * https://mathworld.wolfram.com/Mantissa.html - */ - public static double Mantissa(long value) { - return 0d; - } - - /** - * @return Returns the mantissa from the given number. Mantissa definition is used from - * https://mathworld.wolfram.com/Mantissa.html - */ - public static double Mantissa(float value) { - return Mantissa(new BigDecimal(String.valueOf(value))); - } - - /** - * @return Returns the mantissa from the given number. Mantissa definition is used from - * https://mathworld.wolfram.com/Mantissa.html - */ - public static double Mantissa(double value) { - return Mantissa(new BigDecimal(String.valueOf(value))); - } - - /** - * @return Returns the mantissa from the given number. Mantissa definition is used from - * https://mathworld.wolfram.com/Mantissa.html. If value is null, it will return 0. - */ - public static double Mantissa(BigDecimal value) { - return value == null ? 0d : value.subtract(new BigDecimal(value.intValue())).doubleValue(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/functions/Types.java b/wrangler-core/src/main/java/io/cdap/functions/Types.java deleted file mode 100644 index 830fa466b..000000000 --- a/wrangler-core/src/main/java/io/cdap/functions/Types.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import io.cdap.wrangler.dq.TypeInference; - -/** - * Static class that is included in the Jexl expression for detecting types of data. - */ -public class Types { - /** - * Checks if a value is a date or not. - * - * @param value representing date. - * @return true if date, else false. - */ - public static boolean isDate(String value) { - return TypeInference.isDate(value); - } - - /** - * Checks if a value is a datetime or not. - * - * @param value representing date time. - * @return true if datetime, else false. - */ - public static boolean isTime(String value) { - return TypeInference.isTime(value); - } - - /** - * Checks if a value is a number or not. - * - * @param value representing a number. - * @return true if number, else false. - */ - public static boolean isNumber(String value) { - return TypeInference.isNumber(value); - } - - - /** - * Checks if a value is a boolean or not. - * - * @param value representing a boolean. - * @return true if boolean, else false. - */ - public static boolean isBoolean(String value) { - return TypeInference.isBoolean(value); - } - - /** - * Checks if a value is a empty or not. - * - * @param value representing a empty. - * @return true if empty, else false. - */ - public static boolean isEmpty(String value) { - return TypeInference.isEmpty(value); - } - - /** - * Checks if a value is a double or not. - * - * @param value representing a double. - * @return true if double, else false. - */ - public static boolean isDouble(String value) { - return TypeInference.isDouble(value); - } - - /** - * Checks if a value is a integer or not. - * - * @param value representing a integer. - * @return true if integer, else false. - */ - public static boolean isInteger(String value) { - return TypeInference.isInteger(value); - } -} - diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/clients/Response.java b/wrangler-core/src/main/java/io/cdap/wrangler/clients/Response.java deleted file mode 100644 index b834dd311..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/clients/Response.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.clients; - -import java.util.List; - -/** - * This class defines the standard response from the Schema registry service. - * It's paramterized on the type of the response object returned from service within the list. - */ -class Response { - // Status of the backend processing of the request. - private int status; - - // Message associated with the status. - private String message; - - // Number of items in the list. - private int count; - - // Instance of object in the list. - private List values; - - Response(int status, String message) { - this.status = status; - this.message = message; - } - - /** - * @return status of the processing on the backend. - */ - public int getStatus() { - return status; - } - - /** - * @return Readable form of status of processing in the backend. - */ - public String getMessage() { - return message; - } - - /** - * @return Count of objects within the list. - */ - public int getCount() { - return count; - } - - /** - * @return List of the objects of type T. - */ - public List getValues() { - return values; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/clients/RestClientException.java b/wrangler-core/src/main/java/io/cdap/wrangler/clients/RestClientException.java deleted file mode 100644 index 893fad4b4..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/clients/RestClientException.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.clients; - -/** - * This is exception thrown when there is issue with request or response. - */ -public class RestClientException extends Exception { - // Status of the response. - private final int status; - - // Message associated with the code. - private final String message; - - public RestClientException(final int status, final String message) { - this.status = status; - this.message = message; - } - - /** - * @return status code. - */ - public int getStatus() { - return status; - } - - /** - * @return status message. - */ - public String getMessage() { - return message; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/clients/SchemaInfo.java b/wrangler-core/src/main/java/io/cdap/wrangler/clients/SchemaInfo.java deleted file mode 100644 index fd9e87601..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/clients/SchemaInfo.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.clients; - -import java.util.Set; - -/** - * This class is POJO that provides information about the schema being requested. - */ -final class SchemaInfo { - // Id of the schema being stored in the schema repository. - private String id; - - // Each id of the schema is associated with name. - private String name; - - // Each schema can have multiple versions, so this will show the version that is being retrieved. - private long version; - - // Schema description. - private String description; - - // Type of the schema. - private String type; - - // Current active version of schema. - private long current; - - // Specification of the schema. - private String specification; - - // List of available versions of schema. - private Set versions; - - /** - * @return id of the schema being requested. - */ - public String getId() { - return id; - } - - /** - * @return name of the schema. - */ - public String getName() { - return name; - } - - /** - * @return version of schema being requested. - */ - public long getVersion() { - return version; - } - - /** - * @return description of schema being requested. - */ - public String getDescription() { - return description; - } - - /** - * @return string representation of schema being requested. - */ - public String getType() { - return type; - } - - /** - * @return the current version of schema that is active. - */ - public long getCurrent() { - return current; - } - - /** - * @return schema definition being requested. - */ - public String getSpecification() { - return specification; - } - - /** - * @return List of available versions of schema. - */ - public Set getVersions() { - return versions; - } - -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/clients/SchemaRegistryClient.java b/wrangler-core/src/main/java/io/cdap/wrangler/clients/SchemaRegistryClient.java deleted file mode 100644 index 347fa9bc2..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/clients/SchemaRegistryClient.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.clients; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonIOException; -import com.google.gson.JsonSyntaxException; -import io.cdap.cdap.api.common.Bytes; -import io.cdap.cdap.internal.guava.reflect.TypeToken; -import io.cdap.wrangler.api.ExecutorContext; -import org.apache.commons.io.IOUtils; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.lang.reflect.Type; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * This class {@link SchemaRegistryClient} is a client API for the SchemaRegistry service. - * - * Client allows only read-only access to service. It doesn't support the ability to mutate - * the service. - * - * Example usage of the client. - * - * ... - * SchemaRegistryClient client = new SchemaRegistryClient(); - * ... - * client.setAcceptEncoding("application/json"); - * client.setConnectionTimeout(2000); // 2 seconds of connect timeout. - * client.setReadTimeout(1000); // 1 second of read timeout. - * try { - * Response info = client.getSchema("test", 2); - * } catch (IOException e) { - * ... - * } catch (URIException e) { - * ... - * } catch (RestClientException e) { - * ... - * } - * ... - * - */ -public final class SchemaRegistryClient { - private final Gson gson; - - // Defines the service base url. - private final String baseUrl; - - // Connections settings. - private int connectionTimeout; // Timeout to connect specified in milliseconds. - private int readTimeout; // Timeout to read from socket in milliseconds. - private String acceptEncoding; // Accepting content type. - - public SchemaRegistryClient(String baseUrl) { - this.baseUrl = baseUrl; - this.connectionTimeout = 2000; - this.readTimeout = 1000; - this.acceptEncoding = "application/json"; - this.gson = new GsonBuilder().create(); - } - - /** - * Returns a instance of {@link SchemaRegistryClient} initialized with service url. - * - * @param context of the pipeline in which this client is invoked. - * @return instance of this class. - */ - public static SchemaRegistryClient getInstance(ExecutorContext context) { - return new SchemaRegistryClient(context.getService("dataprep", "service").toString()); - } - - /** - * Retrieves schema provided a schema id and version of the schema. - * - * @param namespace the schema namespace - * @param id the schema id - * @param version the schema version - * @return {@link Response} of the schema. - * @throws URISyntaxException thrown if there are issue with construction of url. - * @throws IOException throw when there are issues connecting to the service. - * @throws RestClientException thrown when there are issues with request or response returned. - */ - public byte[] getSchema(String namespace, String id, long version) - throws URISyntaxException, IOException, RestClientException { - URL url = concat(new URI(baseUrl), - String.format("contexts/%s/schemas/%s/versions/%d", namespace, id, version)).toURL(); - Response response = request(url, "GET", new TypeToken>() { }.getType()); - if (response.getCount() == 1) { - return Bytes.fromHexString(response.getValues().get(0).getSpecification()); - } - return null; - } - - /** - * Retrieves schema provided a schema id. It provides the latest, current version of schema. - * - * @param namespace the schema namespace - * @param id the schema id - * @return {@link SchemaInfo} of the schema if ok, else null. - * @throws URISyntaxException thrown if there are issue with construction of url. - * @throws IOException throw when there are issues connecting to the service. - * @throws RestClientException thrown when there are issues with request or response returned. - */ - public byte[] getSchema(String namespace, String id) - throws URISyntaxException, IOException, RestClientException { - URL url = concat(new URI(baseUrl), String.format("contexts/%s/schemas/%s", namespace, id)).toURL(); - Response response = request(url, "GET", new TypeToken>() { }.getType()); - if (response.getCount() == 1) { - return Bytes.fromHexString(response.getValues().get(0).getSpecification()); - } - return null; - } - - /** - * Gets all the versions of schemas given a schema id. - * - * @param namespace the schema namespace - * @param id the schema id - * @return a list of schema versions. - * @throws URISyntaxException thrown if there are issue with construction of url. - * @throws IOException throw when there are issues connecting to the service. - * @throws RestClientException thrown when there are issues with request or response returned. - */ - public List getVersions(String namespace, String id) - throws URISyntaxException, IOException, RestClientException { - URL url = concat(new URI(baseUrl), - String.format("contexts/%s/schemas/%s/versions", namespace, id)).toURL(); - Response response = request(url, "GET", new TypeToken>() { }.getType()); - return response.getValues(); - } - - /** - * @return the base url set for this client. - */ - public String getBaseUrl() { - return baseUrl; - } - - /** - * @return Accept encoding currently setup for the client. - */ - public String getAcceptEncoding() { - return acceptEncoding; - } - - /** - * @param acceptEncoding sets the accept encoding for the client. - */ - public void setAcceptEncoding(String acceptEncoding) { - this.acceptEncoding = acceptEncoding; - } - - /** - * @return the timeout set for connection in milliseconds. - */ - public int getConnectionTimeout() { - return connectionTimeout; - } - - /** - * Sets the connection timeout in milliseconds. - * @param connectionTimeout specified in milliseconds. - */ - public void setConnectionTimeout(int connectionTimeout) { - this.connectionTimeout = connectionTimeout; - } - - /** - * @return the read timeout in milliseconds. - */ - public int getReadTimeout() { - return readTimeout; - } - - /** - * Sets the read timeout in milliseconds. - * @param readTimeout - */ - public void setReadTimeout(int readTimeout) { - this.readTimeout = readTimeout; - } - - private URI concat(URI uri, String extraPath) - throws URISyntaxException, MalformedURLException { - String newPath = uri.getPath() + '/' + extraPath; - URI newUri = uri.resolve(newPath); - return newUri; - } - - private T request(URL url, String method, Type classz) throws IOException, RestClientException { - return request(url, method, null, new HashMap(), classz); - } - - private T request(URL url, String method, byte[] body, - Map headers, Type classz) throws IOException, RestClientException { - HttpURLConnection connection = null; - try { - connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod(method); - - // connection.getResponseCode() implicitly calls getInputStream, so always set to true. - // On the other hand, leaving this out breaks nothing. - connection.setDoInput(true); - - // Include the headers in the request. - for (Map.Entry entry : headers.entrySet()) { - connection.setRequestProperty(entry.getKey(), entry.getValue()); - } - - // Set the connection settings. - connection.setConnectTimeout(connectionTimeout); - connection.setReadTimeout(readTimeout); - connection.setUseCaches(false); - connection.setRequestProperty("Accept", acceptEncoding); - - // set the body if available. - if (body != null) { - connection.setDoOutput(true); - OutputStream os = null; - try { - os = connection.getOutputStream(); - os.write(body); - os.flush(); - } catch (IOException e) { - throw e; - } finally { - if (os != null) { - os.close(); - } - } - } - - // Request, check status code and convert the response into object. - int responseCode = connection.getResponseCode(); - if (responseCode == HttpURLConnection.HTTP_OK) { - InputStream is = connection.getInputStream(); - T result = gson.fromJson(new InputStreamReader(is), classz); - is.close(); - return result; - } else if (responseCode == HttpURLConnection.HTTP_NO_CONTENT) { - return null; - } else if (responseCode == HttpURLConnection.HTTP_INTERNAL_ERROR) { - InputStream es = connection.getErrorStream(); - Response message; - try { - message = gson.fromJson(new InputStreamReader(es), Response.class); - } catch (JsonSyntaxException | JsonIOException e) { - throw new RestClientException(responseCode, e.getMessage()); - } finally { - es.close(); - } - throw new RestClientException(message.getStatus(), message.getMessage()); - } else { - InputStream es = connection.getErrorStream(); - String response = IOUtils.toString(es, StandardCharsets.UTF_8); - es.close(); - throw new RestClientException(responseCode, response); - } - } finally { - if (connection != null) { - connection.disconnect(); - } - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/codec/AbstractAvroDecoder.java b/wrangler-core/src/main/java/io/cdap/wrangler/codec/AbstractAvroDecoder.java deleted file mode 100644 index 681db3f25..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/codec/AbstractAvroDecoder.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.codec; - -import io.cdap.wrangler.api.Row; -import org.apache.avro.Schema; -import org.apache.avro.generic.GenericDatumReader; -import org.apache.avro.generic.GenericRecord; -import org.apache.avro.io.DatumReader; - -/** - * This class {@link AbstractAvroDecoder} is implementation of {@link Decoder} interface using type {@link Row}. - * All implementations of AVRO decoder should extend from this class. - */ -public abstract class AbstractAvroDecoder implements Decoder { - // Schema associated with record or data file being read. - private final Schema schema; - - // Reader for reading data based on the schema. - private final DatumReader reader; - - protected AbstractAvroDecoder(Schema schema) { - this.schema = schema; - this.reader = new GenericDatumReader<>(this.schema); - } - - protected Schema getSchema() { - return schema; - } - - protected DatumReader getReader() { - return reader; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/codec/BinaryAvroDecoder.java b/wrangler-core/src/main/java/io/cdap/wrangler/codec/BinaryAvroDecoder.java deleted file mode 100644 index a8dcb287d..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/codec/BinaryAvroDecoder.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.codec; - -import com.google.gson.Gson; -import io.cdap.wrangler.api.Row; -import org.apache.avro.AvroTypeException; -import org.apache.avro.Schema; -import org.apache.avro.generic.GenericRecord; -import org.apache.avro.io.BinaryDecoder; -import org.apache.avro.io.DecoderFactory; -import org.apache.avro.util.Utf8; - -import java.io.ByteArrayInputStream; -import java.io.EOFException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * This class {@link BinaryAvroDecoder} decodes a byte array of AVRO Json Records into the {@link Row} structure. - */ -public class BinaryAvroDecoder extends AbstractAvroDecoder { - private final Gson gson; - - public BinaryAvroDecoder(Schema schema) { - super(schema); - this.gson = new Gson(); - } - - /** - * Decodes byte array of binary encoded AVRO into list of {@link Row}. - * This method will iterate through each of the AVRO schema fields and translate - * them into columns within the {@link Row}. - * - * If the field is instance of {@link List} or {@link Map} it is converted into JSON - * representation. In order to flatten or expand such columns other directives need - * to be used. - * - * @param bytes array of bytes that contains binary encoded AVRO record. - * @return list of {@link Row} that are converted from AVRO encoded binary messages. - */ - @Override - public List decode(byte[] bytes) throws DecoderException { - List rows = new ArrayList<>(); - BinaryDecoder decoder = null; - ByteArrayInputStream in = new ByteArrayInputStream(bytes); - try { - decoder = DecoderFactory.get().binaryDecoder(in, null); - while (true) { - try { - GenericRecord gRecord = getReader().read(null, decoder); - List fields = getSchema().getFields(); - Row r = new Row(); - for (Schema.Field field : fields) { - Object object = gRecord.get(field.name()); - if (object instanceof Utf8) { - Utf8 o = (Utf8) object; - object = o.toString(); - } else if (object instanceof Map || object instanceof List) { - object = gson.toJson(object); - } - r.add(field.name(), object); - } - rows.add(r); - } catch (EOFException e) { - break; // Reached end of buffer. - } - } - } catch (AvroTypeException e) { - throw new DecoderException(e.getMessage()); - } catch (IOException e) { - throw new DecoderException("Issue creating AVRO binary decoder. Verify the schema."); - } finally { - try { - in.close(); - } catch (IOException e) { - // Can't do anything. - } - } - return rows; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/codec/Decoder.java b/wrangler-core/src/main/java/io/cdap/wrangler/codec/Decoder.java deleted file mode 100644 index cb107cb92..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/codec/Decoder.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.codec; - - -import java.util.List; - -/** - * Decoder interface for decoding the data. - * - * @param type of object to decode - */ -public interface Decoder { - List decode(byte[] bytes) throws DecoderException; -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/codec/DecoderException.java b/wrangler-core/src/main/java/io/cdap/wrangler/codec/DecoderException.java deleted file mode 100644 index c213abb7d..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/codec/DecoderException.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.codec; - -/** - * This exception is thrown when there are issues related decoder. - */ -public class DecoderException extends Exception { - public DecoderException(String message) { - super(message); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/codec/JsonAvroDecoder.java b/wrangler-core/src/main/java/io/cdap/wrangler/codec/JsonAvroDecoder.java deleted file mode 100644 index 2c008c0bf..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/codec/JsonAvroDecoder.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.codec; - -import com.google.gson.Gson; -import io.cdap.wrangler.api.Row; -import org.apache.avro.AvroTypeException; -import org.apache.avro.Schema; -import org.apache.avro.generic.GenericRecord; -import org.apache.avro.io.DecoderFactory; -import org.apache.avro.io.JsonDecoder; -import org.apache.avro.util.Utf8; - -import java.io.ByteArrayInputStream; -import java.io.EOFException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * This class {@link JsonAvroDecoder} decodes a byte array of AVRO Json Records into the {@link Row} structure. - */ -public class JsonAvroDecoder extends AbstractAvroDecoder { - private final Gson gson; - - public JsonAvroDecoder(Schema schema) { - super(schema); - this.gson = new Gson(); - } - - @Override - public List decode(byte[] bytes) throws DecoderException { - List rows = new ArrayList<>(); - JsonDecoder decoder = null; - ByteArrayInputStream in = new ByteArrayInputStream(bytes); - try { - decoder = DecoderFactory.get().jsonDecoder(getSchema(), in); - while (true) { - try { - GenericRecord gRecord = getReader().read(null, decoder); - List fields = getSchema().getFields(); - Row r = new Row(); - for (Schema.Field field : fields) { - Object object = gRecord.get(field.name()); - if (object instanceof Utf8) { - Utf8 o = (Utf8) object; - object = o.toString(); - } else if (object instanceof Map || object instanceof List) { - object = gson.toJson(object); - } - r.add(field.name(), object); - } - rows.add(r); - } catch (EOFException e) { - break; // Reached end of buffer. - } - } - } catch (AvroTypeException e) { - throw new DecoderException(e.getMessage()); - } catch (IOException e) { - throw new DecoderException("Issue create json decoder, verify the schema"); - } finally { - try { - in.close(); - } catch (IOException e) { - // Can't do anything. - } - } - return rows; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/codec/ProtobufDecoderUsingDescriptor.java b/wrangler-core/src/main/java/io/cdap/wrangler/codec/ProtobufDecoderUsingDescriptor.java deleted file mode 100644 index 5cb600676..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/codec/ProtobufDecoderUsingDescriptor.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.codec; - -import com.google.gson.Gson; -import com.google.protobuf.DescriptorProtos; -import com.google.protobuf.Descriptors; -import com.google.protobuf.DynamicMessage; -import com.google.protobuf.InvalidProtocolBufferException; -import com.google.protobuf.Message; -import io.cdap.wrangler.api.Row; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * This class {@link ProtobufDecoderUsingDescriptor} decodes a byte array of Protobuf - * Records into the {@link Row} structure. - */ -public class ProtobufDecoderUsingDescriptor implements Decoder { - private final Gson gson; - private final Descriptors.Descriptor descriptor; - - - public ProtobufDecoderUsingDescriptor(byte[] bytes, String name) - throws InvalidProtocolBufferException, Descriptors.DescriptorValidationException { - this.gson = new Gson(); - DescriptorProtos.FileDescriptorSet fileDescriptorSet = DescriptorProtos.FileDescriptorSet.parseFrom(bytes); - DescriptorProtos.FileDescriptorProto fileProto = fileDescriptorSet.getFile(0); - Descriptors.FileDescriptor fileDescriptor = - Descriptors.FileDescriptor.buildFrom(fileProto, new Descriptors.FileDescriptor[0]); - descriptor = fileDescriptor.findMessageTypeByName(name); - } - - @Override - public List decode(byte[] bytes) throws DecoderException { - List rows = new ArrayList<>(); - try { - DynamicMessage message = DynamicMessage.parseFrom(descriptor, bytes); - Row row = new Row(); - decodeMessage(message, row, null); - rows.add(row); - } catch (InvalidProtocolBufferException e) { - throw new DecoderException(e.getMessage()); - } - return rows; - } - - private void decodeMessage(Message message, Row row, String root) { - for (Map.Entry field : message.getAllFields().entrySet()) { - String name = field.getKey().getName(); - String fullName = String.format("%s", name); - if (root != null) { - fullName = String.format("%s_%s", root, name); - } - Descriptors.FieldDescriptor.Type type = field.getKey().getType(); - Object value = field.getValue(); - switch(type) { - case MESSAGE: - for (Message msg : (List) value) { - decodeMessage(msg, row, fullName); - } - break; - - case ENUM: - row.add(fullName, ((Descriptors.EnumValueDescriptor) value).getName()); - break; - - default: - row.add(fullName, value); - break; - } - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/datamodel/DataModelGlossary.java b/wrangler-core/src/main/java/io/cdap/wrangler/datamodel/DataModelGlossary.java deleted file mode 100644 index 04cf993d9..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/datamodel/DataModelGlossary.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.datamodel; - -import io.cdap.wrangler.utils.AvroSchemaGlossary; - -/** - * Singleton class for accessing an {@link AvroSchemaGlossary} - */ -public class DataModelGlossary { - - private static AvroSchemaGlossary glossary; - - /** - * Initializes the data model glossary with the data models located at the url. All available - * data models should be listed within a manifest.json file found at the root of the url. - * The manifest.json should have the schema of {@link io.cdap.wrangler.utils.Manifest}. If - * the loader is unable to download the manifest or referenced data models, the - * initialization will fail. Below is an example manifest file. - * e.g. - * { - * "standards": { - * "OMOP_6_0_0": { - * "format": "avsc" - * } - * } - * } - * @param dataModelUrl the url to download the data models from. - * @return true if successfully downloaded and store data models into glossary, otherwise - * false for all other errors. - */ - public static boolean initialize(String dataModelUrl) { - HTTPSchemaLoader schemaLoader = new HTTPSchemaLoader(dataModelUrl, "manifest.json"); - if (glossary == null) { - glossary = new AvroSchemaGlossary(schemaLoader); - } else { - glossary.setAvroSchemaLoader(schemaLoader); - } - return glossary.configure(); - } - - /** - * Accessor for the data model glossary. - * @return the {@link AvroSchemaGlossary} instance. - */ - public static AvroSchemaGlossary getGlossary() { - return glossary; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/datamodel/HTTPSchemaLoader.java b/wrangler-core/src/main/java/io/cdap/wrangler/datamodel/HTTPSchemaLoader.java deleted file mode 100644 index 456e25392..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/datamodel/HTTPSchemaLoader.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.datamodel; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import io.cdap.wrangler.clients.RestClientException; -import io.cdap.wrangler.utils.AvroSchemaLoader; -import io.cdap.wrangler.utils.Manifest; -import org.apache.avro.Schema; -import org.apache.commons.collections4.SetValuedMap; -import org.apache.commons.collections4.multimap.HashSetValuedHashMap; -import org.apache.commons.io.IOUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URI; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.util.Map; -import java.util.function.Function; - -/** - * The {@link HTTPSchemaLoader} object loads an AVRO data model schema at a given url. - */ -public final class HTTPSchemaLoader implements AvroSchemaLoader { - - private static final Logger LOG = LoggerFactory.getLogger(HTTPSchemaLoader.class); - private static final String FORMAT = "avsc"; - private static final String REQUEST_METHOD = "GET"; - - private final Gson gson; - private final String baseUrl; - private final String manifestName; - - // Connections settings. - private int connectionTimeout; - private int readTimeout; - private String acceptEncoding; - - public HTTPSchemaLoader(String baseUrl, String manifestName) { - this.gson = new GsonBuilder().create(); - this.baseUrl = baseUrl; - this.manifestName = manifestName; - this.connectionTimeout = 2000; - this.readTimeout = 1000; - this.acceptEncoding = "application/json"; - } - - /** - * Loads the data models located at the url. All available data models should be - * listed within a manifest.json file found at the root of the url. The - * manifest.json should have the schema of {@link io.cdap.wrangler.utils.Manifest}. - * If the loader is unable to download the manifest or referenced data models, - * the load will throw an exception. Below is an example manifest file. - * { - * "standards": { - * "OMOP_6_0_0": { - * "format": "avsc" - * } - * } - * } - * @return a map with keys representing the name of the schema. The value is a set of all of the revisions of the - * schema. - * @throws IOException when the manifest is missing or a parsing error. - */ - @Override - public SetValuedMap load() throws IOException { - Manifest manifest = downloadResource(baseUrl, manifestName, - is -> gson.fromJson(new InputStreamReader(is), Manifest.class)); - if (manifest == null) { - throw new IOException("unable to download the manifest resource."); - } - return downloadSchemas(manifest); - } - - private SetValuedMap downloadSchemas(Manifest manifest) throws IOException { - SetValuedMap avroSchemas = new HashSetValuedHashMap<>(); - if (manifest.getStandards() == null) { - return avroSchemas; - } - - // The AVRO parser treats meta data properties with a name that has an underscore prefix as invalid names while - // the AVRO 1.9.1 spec states that underscore prefixes are valid. Consequently disabling validation. - Schema.Parser parser = new Schema.Parser().setValidate(false); - for (Map.Entry spec : manifest.getStandards().entrySet()) { - if (spec.getValue().getFormat().equals(HTTPSchemaLoader.FORMAT)) { - String resource = String.format("%s.%s", spec.getKey(), HTTPSchemaLoader.FORMAT); - Schema schema = downloadResource(baseUrl, resource, is -> { - try { - return parser.parse(is); - } catch (Exception e) { - LOG.warn(String.format("Unable to parse resource %s due to error: %s", resource, e.getMessage())); - } - return null; - }); - if (schema != null) { - avroSchemas.put(schema.getFullName(), schema); - } - } - } - return avroSchemas; - } - - private R downloadResource(String baseUrl, String resourceName, Function callable) { - R resource = null; - try { - URL resourceURL = concat(new URI(baseUrl), resourceName).toURL(); - resource = getRequest(resourceURL, callable); - } catch (IOException e) { - LOG.warn(String.format("Unable to download resource %s at %s", resourceName, baseUrl)); - } catch (RestClientException r) { - LOG.warn(String.format("Failed to make request to due to error %s", r.getMessage())); - } catch (Exception e) { - LOG.warn(String.format("Unable to generate resource url for %s/%s", baseUrl, resourceName)); - return null; - } - return resource; - } - - private R getRequest(URL url, Function callable) throws IOException, RestClientException { - HttpURLConnection connection = null; - try { - connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod(REQUEST_METHOD); - connection.setConnectTimeout(connectionTimeout); - connection.setReadTimeout(readTimeout); - connection.setUseCaches(false); - connection.setRequestProperty("Accept", acceptEncoding); - - int responseCode = connection.getResponseCode(); - switch (responseCode) { - case HttpURLConnection.HTTP_OK: - InputStream is = connection.getInputStream(); - R result = callable.apply(is); - is.close(); - return result; - case HttpURLConnection.HTTP_NO_CONTENT: - return null; - default: - String response = ""; - InputStream es = connection.getErrorStream(); - if (es != null) { - response = IOUtils.toString(es, StandardCharsets.UTF_8); - es.close(); - } - throw new RestClientException(responseCode, response); - } - } finally { - if (connection != null) { - connection.disconnect(); - } - } - } - - private URI concat(URI uri, String extraPath) { - String separator = uri.getPath().endsWith("/") ? "" : "/"; - String newPath = String.format("%s%s%s", uri.getPath(), separator, extraPath); - return uri.resolve(newPath); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/dq/ConvertDistances.java b/wrangler-core/src/main/java/io/cdap/wrangler/dq/ConvertDistances.java deleted file mode 100644 index 1be87b116..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/dq/ConvertDistances.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dq; - -import java.math.BigDecimal; -import javax.annotation.Nullable; - -/** - * Class for converting distances from one to another. - */ -public final class ConvertDistances { - - /** - * Specifies different distances that can be converted. - */ - public enum Distance { - MILLIMETER("millimeter", "mm", 0.001, 1000), - CENTIMETER("centimeter", "cm", 0.01, 100), - DECIMETER("decimeter", "dm", 0.1, 10), - METER("meter", "m", 1.0, 1.0), - DEKAMETER("dekameter", "dam", 10.0, 0.1), - HECTOMETER("hectometer", "hm", 100.0, 0.01), - KILOMETER("kilometer", "km", 1000.0, 0.001), - INCH("inch", "in", 0.0254, 39.3700787401574803), - FOOT("foot", "ft", 0.3048, 3.28083989501312336), - YARD("yard", "yd", 0.9144, 1.09361329833770779), - MILE("mile", "mi", 1609.344, 0.00062137119223733397), - NAUTICAL_MILE("nautical mile", "nm", 1852.0, 0.000539956803455723542), - LIGHT_YEAR("light-year", "ly", 9460730472580800.0, 0.0000000000000001057000834024615463709); - - // Name of the distance -- display name. - private String name; - - // Measure name - private String measure; - - // Multiplier to the base. - private double toBase; - - // Multipler from the base - private double fromBase; - - Distance(String name, String measure, double toBase, double fromBase) { - this.name = name; - this.measure = measure; - this.toBase = toBase; - this.fromBase = fromBase; - } - - /** - * @return Display name of the distance. - */ - public String getName() { - return name; - } - - /** - * @return Meausre name of the distance. - */ - public String getMeasureName() { - return measure; - } - - /** - * @return Multiplier to be applied when converting to base. - */ - public double getToBase() { - return toBase; - } - - /** - * @return Multiplier to be applied when converting from base. - */ - public double getFromBase() { - return fromBase; - } - } - - // Distance to be converted from. - private Distance from; - - // Distance to be converted to. - private Distance to; - - // Multiplier for converting 'from' to 'to' - private BigDecimal multiplier; - - public ConvertDistances() { - this(Distance.MILE, Distance.KILOMETER); - } - - @Nullable - public ConvertDistances(Distance from, Distance to) { - this.from = (from == null ? Distance.MILE : from); - this.to = (to == null ? Distance.KILOMETER : to); - this.multiplier = new BigDecimal(String.valueOf(this.from.getToBase())) - .multiply(new BigDecimal(String.valueOf(this.to.getFromBase()))); - } - - /** - * Applies the distance conversion. - * - * @param value to be converted from 'from' distance to 'to' distance. - * @return converted value. - */ - public double convert(double value) { - if (Double.isNaN(value)) { - return value; - } - - if (from.equals(to)) { - return value; - } - - BigDecimal result = new BigDecimal(String.valueOf(value)).multiply(multiplier); - return result.doubleValue(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/dq/ConvertString.java b/wrangler-core/src/main/java/io/cdap/wrangler/dq/ConvertString.java deleted file mode 100644 index ed052c3d3..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/dq/ConvertString.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dq; - -import org.apache.commons.lang3.StringUtils; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Useful String conversion operations. - */ -public class ConvertString { - - public static final String[] WHITESPACE_CHARS = new String[] { "\t" // CHARACTER TABULATION - , "\n" // LINE FEED (LF) - , '\u000B' + "" // LINE TABULATION - , "\f" // FORM FEED (FF) - , "\r" // CARRIAGE RETURN (CR) - , " " // SPACE - , '\u0085' + "" // NEXT LINE (NEL) - , '\u00A0' + "" // NO-BREAK SPACE - , '\u1680' + "" // OGHAM SPACE MARK - , '\u180E' + "" // MONGOLIAN VOWEL SEPARATOR - , '\u2000' + "" // EN QUAD - , '\u2001' + "" // EM QUAD - , '\u2002' + "" // EN SPACE - , '\u2003' + "" // EM SPACE - , '\u2004' + "" // THREE-PER-EM SPACE - , '\u2005' + "" // FOUR-PER-EM SPACE - , '\u2006' + "" // SIX-PER-EM SPACE - , '\u2007' + "" // FIGURE SPACE - , '\u2008' + "" // PUNCTUATION SPACE - , '\u2009' + "" // THIN SPACE - , '\u200A' + "" // HAIR SPACE - , '\u2028' + "" // LINE SEPARATOR - , '\u2029' + "" // PARAGRAPH SEPARATOR - , '\u202F' + "" // NARROW NO-BREAK SPACE - , '\u205F' + "" // MEDIUM MATHEMATICAL SPACE - , '\u3000' + "" // IDEOGRAPHIC SPACE - }; - - private String repeatChar = null; - private Pattern removeRepeatCharPattern = null; - private Pattern removeWhiteSpacesPattern = null; - - /** - * This constructor is used to some cases but except removing a specify repeated String - * {@link #removeRepeatedChar(String)}. - */ - public ConvertString() { - this(null); - } - - /** - * - * This constructor is used to remove a specify repeated String {@link #removeRepeatedChar(String)} . - * - * @param repeatStr it is a repeat String - */ - public ConvertString(String repeatStr) { - this.repeatChar = repeatStr; - if (!StringUtils.isEmpty(repeatStr)) { - removeRepeatCharPattern = Pattern.compile("(" + repeatStr + ")+"); - } - removeWhiteSpacesPattern = Pattern.compile("([\\s\\u0085\\p{Z}])\\1+"); - } - - /** - * Remove trailing and leading characters which may be empty string, - * space string,\t,\n,\r,\f...any space, break related - * characters. - * - * @param input - the input text. - * @return String - */ - public String removeTrailingAndLeadingWhitespaces(String input) { - if (StringUtils.isEmpty(input)) { - return input; - } - - String result = input; - while (StringUtils.startsWithAny(result, WHITESPACE_CHARS)) { - result = StringUtils.removeStart(result, result.substring(0, 1)); - } - - while (StringUtils.endsWithAny(result, WHITESPACE_CHARS)) { - result = StringUtils.removeEnd(result, result.substring(result.length() - 1, result.length())); - } - return result; - } - - /** - * Remove trailing and leading characters and the remove Character is whitespace only.
- *
- * Note: this is not equals input.trim() for example:
- * when the input is ("\t" + "abc "), this method will return ("\t" + "abc"),
- * but for trim method will return "abc" - * - * @param input - the input text. - * @return String - */ - public String removeTrailingAndLeading(String input) { - return removeTrailingAndLeading(input, " "); //$NON-NLS-1$ - } - - /** - * Remove trailing and leading characters. - * - * @param input - the input text. - * @param character - the remove character. - * @return String. - */ - public String removeTrailingAndLeading(String input, String character) { - if (StringUtils.isEmpty(input) || StringUtils.isEmpty(character)) { - return input; - } - - String result = input; - - while (result.startsWith(character)) { - result = StringUtils.removeStart(result, character); - } - while (result.endsWith(character)) { - result = StringUtils.removeEnd(result, character); - } - return result; - } - - /** - * - * Remove consecutive repeated characters by a specified char. - * - * @param input the source String - * @return the string with the source string removed if found - */ - public String removeRepeatedChar(String input) { - if (StringUtils.isEmpty(input) || StringUtils.isEmpty(repeatChar) || removeRepeatCharPattern == null) { - return input; - } - Matcher matcher = removeRepeatCharPattern.matcher(input); - return matcher.replaceAll(repeatChar); - } - - /** - * - * Remove all repeated white spaces which include all strings in {@link #WHITESPACE_CHARS} - * like as " ","\n","\r","\t". - * - *
-   * removeRepeatedWhitespaces(null) = null
-   * removeRepeatedWhitespaces("")   = ""
-   * removeRepeatedWhitespaces("a  back\t\t\td") = "a back\td"
-   * 
- * - * @param input input the source String - * @return the string removed all whiteSpaces - */ - public String removeRepeatedWhitespaces(String input) { - if (StringUtils.isEmpty(input) || removeWhiteSpacesPattern == null) { - return input; - } - Matcher matcher = removeWhiteSpacesPattern.matcher(input); - return matcher.replaceAll("$1"); - } - -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/dq/DataType.java b/wrangler-core/src/main/java/io/cdap/wrangler/dq/DataType.java deleted file mode 100644 index 1e60eb626..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/dq/DataType.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dq; - -/** - * Class that specifies type of data. - */ -public enum DataType { - BOOLEAN, - INTEGER, - DOUBLE, - STRING, - DATE, - TIME, - EMPTY; - - /** - * Get the type of the data. - * - * @param name of type. - * @return {@link DataType}. - */ - public static DataType get(String name) { - try { - return DataType.valueOf(name.toUpperCase()); - } catch (Exception e) { - return DataType.STRING; - } - } - -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/dq/DateTimePattern.java b/wrangler-core/src/main/java/io/cdap/wrangler/dq/DateTimePattern.java deleted file mode 100644 index d9a1669c4..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/dq/DateTimePattern.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dq; - -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.regex.Pattern; - -/** - * Date time patterns - */ -public class DateTimePattern { - private static final List> DATE_PATTERN_GROUP_LIST = new ArrayList<>(); - private static final List> TIME_PATTERN_GROUP_LIST = new ArrayList<>(); - - static { - loadPatterns("DateRegexesGrouped.txt", DATE_PATTERN_GROUP_LIST); - // Load time patterns - loadPatterns("TimeRegexes.txt", TIME_PATTERN_GROUP_LIST); - } - - private static void loadPatterns(String patternFileName, List> patternParsers) { - InputStream stream = DateTimePattern.class.getClassLoader().getResourceAsStream(patternFileName); - try { - List lines = IOUtils.readLines(stream, "UTF-8"); - Map currentGroupMap = new LinkedHashMap<>(); - patternParsers.add(currentGroupMap); - for (String line : lines) { - if (!"".equals(line.trim())) { // Not empty - if (line.startsWith("--")) { // group separator - currentGroupMap = new LinkedHashMap<>(); - patternParsers.add(currentGroupMap); - } else { - String[] lineArray = StringUtils.splitByWholeSeparatorPreserveAllTokens(line, "\t"); - String format = lineArray[0]; - Pattern pattern = Pattern.compile(lineArray[1]); - currentGroupMap.put(pattern, format); - } - } - } - stream.close(); - } catch (IOException e) { - // Throw exception - } - } - - /** - * Whether the given string value is a date or not. - * - * @param value - * @return true if the value is a date. - */ - public static boolean isDate(String value) { - if (StringUtils.isEmpty(value)) { - return false; - } - // The length of date strings must not be less than 6, and must not exceed 64. - if (value.length() < 6 || value.length() > 64) { - return false; - } - return isDateTime(DATE_PATTERN_GROUP_LIST, value); - } - - /** - * Check if the value passed is a time or not. - * - * @param value - * @return true if the value is type "Time", false otherwise. - */ - public static boolean isTime(String value) { - if (StringUtils.isEmpty(value)) { - return false; - } - // The length of date strings must not be less than 4, and must not exceed 24. - if (value.length() < 4 || value.length() > 24) { - return false; - } - return isDateTime(TIME_PATTERN_GROUP_LIST, value); - } - - private static boolean isDateTime(List> patternGroupList, String value) { - if (StringUtils.isNotEmpty(value)) { - // at least 3 digit - boolean hasEnoughDigits = false; - int digitCount = 0; - for (int i = 0; i < value.length(); i++) { - char ch = value.charAt(i); - if (ch >= '0' && ch <= '9') { - digitCount++; - if (digitCount > 2) { - hasEnoughDigits = true; - break; - } - } - } - if (!hasEnoughDigits) { - return false; - } - - // Check the value with a list of regex patterns - for (Map patternMap : patternGroupList) { - for (Pattern parser : patternMap.keySet()) { - try { - if (parser.matcher(value).find()) { - return true; - } - } catch (Exception e) { - // ignore - } - } - } - } - return false; - } - - /** - * Replace the value with date pattern string. - * - * @param value - * @return date pattern string. - */ - public static Set datePatternReplace(String value) { - return dateTimePatternReplace(DATE_PATTERN_GROUP_LIST, value); - } - - /** - * Replace the value with time pattern string. - * - * @param value - * @return - */ - public static Set timePatternReplace(String value) { - return dateTimePatternReplace(TIME_PATTERN_GROUP_LIST, value); - } - - private static Set dateTimePatternReplace(List> patternGroupList, String value) { - if (StringUtils.isEmpty(value)) { - return Collections.singleton(StringUtils.EMPTY); - } - HashSet resultSet = new HashSet<>(); - for (Map patternMap : patternGroupList) { - for (Pattern parser : patternMap.keySet()) { - if (parser.matcher(value).find()) { - resultSet.add(patternMap.get(parser)); - } - } - if (!resultSet.isEmpty()) { - return resultSet; - } - } - return resultSet; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/dq/TypeInference.java b/wrangler-core/src/main/java/io/cdap/wrangler/dq/TypeInference.java deleted file mode 100644 index 001c96c39..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/dq/TypeInference.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dq; - -import java.math.BigInteger; -import java.util.regex.Pattern; - -/** - * Type Interface provides utility functions that allow you to detect the types of data. - */ -public class TypeInference { - private static final Pattern patternInteger = Pattern.compile("^(\\+|-)?\\d+$"); - - private static final Pattern patternDouble = Pattern.compile( - "^[-+]?"// Positive/Negative sign - + "("// BEGIN Decimal part - + "[0-9]+([,\\.][0-9]+)?|"// Alternative I (w/o grouped integer part) - + "(" // BEGIN Alternative II (with grouped integer part) - + "[0-9]{1,3}" // starting digits - + "(" // BEGIN grouped part - + "((,[0-9]{3})*"// US integer part - + "(\\.[0-9]+)?"// US float part - + "|" // OR - + "((\\.[0-9]{3})*|([ \u00A0\u2007\u202F][0-9]{3})*)"// EU integer part - + "(,[0-9]+)?)"// EU float part - + ")"// END grouped part - + ")" // END Alternative II - + ")" // END Decimal part - + "([ ]?[eE][-+]?[0-9]+)?$"); // scientific part - - /** - * Detect if the given value is a double type. - * - *

- * Note:
- * 1. This method support only English locale.
- * e.g. {@code TypeInference.isDouble("3.4")} returns {@code true}.
- * e.g. {@code TypeInference.isDouble("3,4")} returns {@code false}.
- * 2. Exponential notation can be detected as a valid double.
- * e.g. {@code TypeInference.isDouble("1.0E+4")} returns {@code true}.
- * e.g. {@code TypeInference.isDouble("1.0e-4")} returns {@code true}.
- * e.g. {@code TypeInference.isDouble("1.0e-04")} returns {@code true}.
- * 3. Numbers marked with a type is invalid.
- * e.g. {@code TypeInference.isDouble("3.4d")} returns {@code false}.
- * e.g. {@code TypeInference.isDouble("123L")} returns {@code false}.
- * 4. White space is invalid.
- * e.g. {@code TypeInference.isDouble(" 3.4")} returns {@code false}.
- * e.g. {@code TypeInference.isDouble("3.4 ")} returns {@code false}.
- * 5. "." is not obligatory.
- * e.g. {@code TypeInference.isDouble("100")} returns {@code true}. - *

- * - * @param value the value to be detected. - * @return true if the value is a double type, false otherwise. - */ - public static boolean isDouble(String value) { - if (!isEmpty(value) && patternDouble.matcher(value).matches()) { - return true; - } - return false; - } - - /** - * Detect if the given value is a integer type. - * - * @param value the value to be detected. - * @return true if the value is a integer type, false otherwise. - */ - public static boolean isInteger(String value) { - if (!isEmpty(value) && patternInteger.matcher(value).matches()) { - return true; - } - return false; - } - - public static boolean isNumber(String value) { - return isDouble(value) || isInteger(value); - - } - - /** - * Get big integer from a string. - * - * @param value - * @return big integer instance , or null if numer format exception occurrs. - */ - public static BigInteger getBigInteger(String value) { - BigInteger bint = null; - try { - bint = new BigInteger(value); - } catch (NumberFormatException e) { - return null; - } - return bint; - } - - /** - * Detect if the given value is a boolean type. - * - * @param value the value to be detected. - * @return true if the value is a boolean type, false otherwise. - */ - public static boolean isBoolean(String value) { - if (isEmpty(value)) { - return false; - } - if ((value.trim().length() == 4 || value.trim().length() == 5) - && ("true".equalsIgnoreCase(value) || "false".equalsIgnoreCase(value))) { //$NON-NLS-1$ //$NON-NLS-2$ - return true; - } - return false; - } - - /** - * Detect if the given value is a date type.
- * - * @param value the value to be detected. - * @return true if the value is a date type, false otherwise. - */ - public static boolean isDate(String value) { - return DateTimePattern.isDate(value); - } - - /** - * Detect if the given value is a time type. - * - * @param value - * @return - */ - public static boolean isTime(String value) { - return DateTimePattern.isTime(value); - } - - /** - * Detect if the given value is blank or null. - * - * @param value the value to be detected. - * @return true if the value is blank or null, false otherwise. - */ - public static boolean isEmpty(String value) { - return value == null || value.trim().length() == 0; - } - - /** - * - * @param type the expected type - * @param value the value to be detected - * @return true if the type of value is expected, false otherwise. - */ - public static boolean isValid(DataType type, String value) { - switch (type) { - case BOOLEAN: - return isBoolean(value); - case INTEGER: - return isInteger(value); - case DOUBLE: - return isDouble(value); - case DATE: - return isDate(value); - case STRING: - // Everything can be a string - return true; - default: - // Unsupported type - return false; - } - } - - public static DataType getDataType(String value) { - if (TypeInference.isEmpty(value)) { - // 1. detect empty - return DataType.EMPTY; - } else if (TypeInference.isBoolean(value)) { - // 2. detect boolean - return DataType.BOOLEAN; - } else if (TypeInference.isInteger(value)) { - // 3. detect integer - return DataType.INTEGER; - } else if (TypeInference.isDouble(value)) { - // 4. detect double - return DataType.DOUBLE; - } else if (isDate(value)) { - // 5. detect date - return DataType.DATE; - } else if (isTime(value)) { - // 6. detect date - return DataType.TIME; - } - // will return string when no matching - return DataType.STRING; - } - -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/executor/ErrorRecordCollector.java b/wrangler-core/src/main/java/io/cdap/wrangler/executor/ErrorRecordCollector.java deleted file mode 100644 index 58195a705..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/executor/ErrorRecordCollector.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.executor; - -import io.cdap.wrangler.api.ErrorRecord; -import io.cdap.wrangler.api.annotations.Public; - -import java.util.ArrayList; -import java.util.List; - -/** - * This is a error collector, a collection of all the records that are errored. - */ -@Public -public final class ErrorRecordCollector { - // Array of records that are erroed. - private final List errors; - - public ErrorRecordCollector() { - errors = new ArrayList<>(); - } - - /** - * @return Size of the errored list. - */ - public int size() { - return errors.size(); - } - - /** - * Resets the error list. - */ - public void reset() { - errors.clear(); - } - - /** - * Adds a {@link ErrorRecord} to the error collector. - * - * @param record - */ - public void add(ErrorRecord record) { - errors.add(record); - } - - /** - * @return List of errors. - */ - public List get() { - return errors; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/executor/ICDCatalog.java b/wrangler-core/src/main/java/io/cdap/wrangler/executor/ICDCatalog.java deleted file mode 100644 index f9d2ea935..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/executor/ICDCatalog.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.executor; - - -import io.cdap.directives.lookup.StaticCatalog; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.HashMap; -import java.util.Map; - -/** - * Class for loading and managing ICD codes. - * - *

- * icd10cm_code_2016.txt contains all ICD-10-CM (diagnosis) codes valid for FY2016. - * icd9cm_code_2015.txt contains ICD-9-CM (diagnosis) codes valid till FY2015 - *

- */ -public final class ICDCatalog implements StaticCatalog { - - // Type of ICD code 9 or 10 {2016,2017}. - private final String name; - - // Map to store mapping from code to description. - private Map lookupTable = new HashMap<>(); - - /** - * Single ICD entry - */ - public class ICDCode implements StaticCatalog.Entry { - // Description associated with the code. - String description; - - ICDCode(String description) { - this.description = description; - } - - /** - * @return description for the code. - */ - @Override - public String getDescription() { - return description; - } - } - - public ICDCatalog(String name) { - this.name = name; - } - - /** - * Configures the ICD StaticCatalog by loading the appropriate stream. - * - * @return true if successfully configured, else false. - */ - @Override - public boolean configure() { - String filename = String.format("%s_cm_codes.txt", name); - InputStream in = ICDCatalog.class.getClassLoader().getResourceAsStream(filename); - if (in == null) { - return false; - } - InputStreamReader isr = new InputStreamReader(in); - try (BufferedReader reader = new BufferedReader(isr)) { - String line; - while ((line = reader.readLine()) != null) { - String code = line.substring(0, 7).trim(); - String description = line.substring(8).trim(); - lookupTable.put(code, new ICDCode(description)); - } - } catch (IOException e) { - return false; - } - return true; - } - - /** - * Looks up a ICD Code in the catalog and the associated {@link ICDCode} value. - * - * @param code to be looked up. - * @return ICDCode if found, else null. - */ - @Override - public StaticCatalog.Entry lookup(String code) { - return lookupTable.get(code); - } - - /** - * @return name of the catalog. - */ - @Override - public String getCatalog() { - return name; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/executor/RecipePipelineExecutor.java b/wrangler-core/src/main/java/io/cdap/wrangler/executor/RecipePipelineExecutor.java deleted file mode 100644 index 159d6d512..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/executor/RecipePipelineExecutor.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright © 2016-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.executor; - -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.ErrorRecord; -import io.cdap.wrangler.api.ErrorRowException; -import io.cdap.wrangler.api.Executor; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.RecipeParser; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.api.ReportErrorAndProceed; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.TransientVariableScope; -import io.cdap.wrangler.schema.DirectiveOutputSchemaGenerator; -import io.cdap.wrangler.schema.DirectiveSchemaResolutionContext; -import io.cdap.wrangler.schema.TransientStoreKeys; -import io.cdap.wrangler.utils.RecordConvertor; -import io.cdap.wrangler.utils.RecordConvertorException; -import io.cdap.wrangler.utils.SchemaConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.List; -import javax.annotation.Nullable; - -/** - * The class RecipePipelineExecutor compiles the recipe and executes the directives. - */ -public final class RecipePipelineExecutor implements RecipePipeline { - - private static final Logger LOG = LoggerFactory.getLogger(RecipePipelineExecutor.class); - - private final ErrorRecordCollector collector = new ErrorRecordCollector(); - private final RecordConvertor convertor = new RecordConvertor(); - private final SchemaConverter generator = new SchemaConverter(); - private final RecipeParser recipeParser; - private final ExecutorContext context; - private List directives; - - public RecipePipelineExecutor(RecipeParser recipeParser, @Nullable ExecutorContext context) { - this.context = context; - this.recipeParser = recipeParser; - } - - /** - * Invokes each directives destroy method to perform any cleanup required by each individual directive. - */ - @Override - public void close() { - if (directives == null) { - return; - } - for (Directive directive : directives) { - try { - directive.destroy(); - } catch (Throwable t) { - LOG.warn(t.getMessage(), t); - } - } - } - - /** - * Executes the pipeline on the input. - * - * @param rows List of Input record of type I. - * @param schema Schema to which the output should be mapped. - * @return Parsed output list of record of type O - */ - @Override - public List execute(List rows, Schema schema) throws RecipeException { - try { - return convertor.toStructureRecord(execute(rows), schema); - } catch (RecordConvertorException e) { - throw new RecipeException("Problem converting into output record. Reason : " + e.getMessage(), e); - } - } - - /** - * Executes the pipeline on the input. - * - * @param rows List of input record of type I. - * @return Parsed output list of record of type I - */ - @Override - public List execute(List rows) throws RecipeException { - List directives = getDirectives(); - List messages = new ArrayList<>(); - List results = new ArrayList<>(); - int i = 0; - int directiveIndex = 0; - // Initialize schema with input schema from TransientStore if running in service env (design-time) / testing env - boolean schemaManagementEnabled = context != null && context.isSchemaManagementEnabled(); - Schema inputSchema = schemaManagementEnabled ? - context.getTransientStore().get(TransientStoreKeys.INPUT_SCHEMA) : null; - - List outputSchemaGenerators = new ArrayList<>(); - if (schemaManagementEnabled && inputSchema != null) { - for (Directive directive : directives) { - outputSchemaGenerators.add(new DirectiveOutputSchemaGenerator(directive, generator)); - } - } - - try { - collector.reset(); - while (i < rows.size()) { - messages.clear(); - // Resets the scope of local variable. - if (context != null) { - context.getTransientStore().reset(TransientVariableScope.LOCAL); - } - - List cumulativeRows = rows.subList(i, i + 1); - directiveIndex = 0; - try { - for (Executor, List> directive : directives) { - try { - directiveIndex++; - cumulativeRows = directive.execute(cumulativeRows, context); - if (cumulativeRows.size() < 1) { - break; - } - if (schemaManagementEnabled && inputSchema != null) { - outputSchemaGenerators.get(directiveIndex - 1).addNewOutputFields(cumulativeRows); - } - } catch (ReportErrorAndProceed e) { - messages.add(String.format("%s (ecode: %d)", e.getMessage(), e.getCode())); - collector - .add(new ErrorRecord(rows.subList(i, i + 1).get(0), String.join(",", messages), e.getCode(), true)); - cumulativeRows = new ArrayList<>(); - break; - } - } - results.addAll(cumulativeRows); - } catch (ErrorRowException e) { - messages.add(String.format("%s", e.getMessage())); - collector - .add(new ErrorRecord(rows.subList(i, i + 1).get(0), String.join(",", messages), e.getCode(), - e.isShownInWrangler())); - } - ++i; - } - } catch (DirectiveExecutionException e) { - throw new RecipeException(e.getMessage(), e, i, directiveIndex); - } - // Schema generation - if (schemaManagementEnabled && inputSchema != null) { - context.getTransientStore().set(TransientVariableScope.GLOBAL, TransientStoreKeys.OUTPUT_SCHEMA, - getOutputSchema(inputSchema, outputSchemaGenerators)); - } - return results; - } - - /** - * Returns records that are errored out. - * - * @return records that have errored out. - */ - @Override - public List errors() { - return collector.get(); - } - - private List getDirectives() throws RecipeException { - if (directives == null) { - this.directives = recipeParser.parse(); - } - return directives; - } - - private Schema getOutputSchema(Schema inputSchema, List outputSchemaGenerators) - throws RecipeException { - Schema schema = inputSchema; - for (DirectiveOutputSchemaGenerator outputSchemaGenerator : outputSchemaGenerators) { - try { - schema = outputSchemaGenerator.getDirectiveOutputSchema(new DirectiveSchemaResolutionContext(schema)); - } catch (RecordConvertorException e) { - throw new RecipeException("Error while generating output schema for a directive: " + e, e); - } - } - return schema; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/expression/EL.java b/wrangler-core/src/main/java/io/cdap/wrangler/expression/EL.java deleted file mode 100644 index 28baad940..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/expression/EL.java +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.expression; - -import com.google.common.base.Joiner; -import com.google.common.base.Strings; -import io.cdap.cdap.api.common.Bytes; -import io.cdap.functions.DDL; -import io.cdap.functions.DataQuality; -import io.cdap.functions.DateAndTime; -import io.cdap.functions.Dates; -import io.cdap.functions.GeoFences; -import io.cdap.functions.Global; -import io.cdap.functions.JsonFunctions; -import io.cdap.functions.Logical; -import io.cdap.functions.NumberFunctions; -import io.cdap.wrangler.utils.ArithmeticOperations; -import io.cdap.wrangler.utils.DecimalTransform; -import org.apache.commons.jexl3.JexlBuilder; -import org.apache.commons.jexl3.JexlEngine; -import org.apache.commons.jexl3.JexlException; -import org.apache.commons.jexl3.JexlInfo; -import org.apache.commons.jexl3.JexlScript; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang3.StringEscapeUtils; -import org.apache.commons.logging.Log; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * This class EL is a Expression Language Handler. - */ -public final class EL { - - private static volatile boolean used; - - private final Set variables; - private final JexlScript script; - - /** - * Returns {@code true} if this class has been used to execute JEXL script. - */ - public static boolean isUsed() { - return used; - } - - /** - * Same as calling {@link #compile(ELRegistration, String)} using {@link DefaultFunctions}. - */ - public static EL compile(String expression) throws ELException { - return compile(new DefaultFunctions(), expression); - } - - /** - * Compiles the given expressions and return an {@link EL} for script execution. - * - * @param registration extra objects available for the script to use - * @param expression the JEXL expresion - * @return an {@link EL} instance - * @throws ELException if failed to compile the expression - */ - public static EL compile(ELRegistration registration, String expression) throws ELException { - used = true; - JexlEngine engine = new JexlBuilder() - .namespaces(registration.functions()) - .silent(false) - .cache(1024) - .strict(true) - .logger(new NullLogger()) - .create(); - - try { - Set variables = new HashSet<>(); - JexlScript script = engine.createScript(expression); - Set> varSet = script.getVariables(); - for (List vars : varSet) { - variables.add(Joiner.on(".").join(vars)); - } - - return new EL(script, variables); - } catch (JexlException e) { - // JexlException.getMessage() uses 'io.cdap.wrangler.expression.EL' class name in the error message. - // So instead use info object to get information about error message and create custom error message. - JexlInfo info = e.getInfo(); - throw new ELException( - String.format("Error encountered while compiling '%s' at line '%d' and column '%d'. " + - "Make sure a valid jexl transformation is provided.", - // here the detail can be null since there are multiple subclasses which extends this - // JexlException, not all of them has this detail information - info.getDetail() == null ? expression : info.getDetail(), info.getLine(), info.getColumn()), e); - } catch (Exception e) { - throw new ELException(e); - } - - } - - private EL(JexlScript script, Set variables) { - this.script = script; - this.variables = Collections.unmodifiableSet(variables); - } - - public Set variables() { - return variables; - } - - public String getScriptParsedText() { - return script.getParsedText(); - } - - public ELResult execute(ELContext context) throws ELException { - try { - // Null the missing fields - for (String variable : variables) { - if (!context.has(variable)) { - context.add(variable, null); - } - } - Object value = script.execute(context); - return new ELResult(value); - } catch (JexlException e) { - // JexlException.getMessage() uses 'io.cdap.wrangler.expression.EL' class name in the error message. - // So instead use info object to get information about error message and create custom error message. - JexlInfo info = e.getInfo(); - throw new ELException( - String.format("Error encountered while executing '%s', at line '%d' and column '%d'. " + - "Make sure a valid jexl transformation is provided.", - // here the detail can be null since there are multiple subclasses which extends this - // JexlException, not all of them has this detail information - info.getDetail() == null ? script.getSourceText() : info.getDetail(), - info.getLine(), info.getColumn()), e); - } catch (NumberFormatException e) { - throw new ELException("Type mismatch. Change type of constant " + - "or convert to right data type using conversion functions available. Reason : " - + e.getMessage(), e); - } catch (Exception e) { - if (e.getCause() != null) { - throw new ELException(e.getCause().getMessage(), e); - } else { - throw new ELException(e); - } - } - } - - /** - * @return List of registered functions. - */ - public static final class DefaultFunctions implements ELRegistration { - @Override - public Map functions() { - Map functions = new HashMap<>(); - functions.put(null, Global.class); - functions.put("datetime", DateAndTime.class); - functions.put("date", Dates.class); - functions.put("json", JsonFunctions.class); - functions.put("math", Math.class); - functions.put("decimal", DecimalTransform.class); - functions.put("arithmetic", ArithmeticOperations.class); - functions.put("string", StringUtils.class); - functions.put("strings", Strings.class); - functions.put("escape", StringEscapeUtils.class); - functions.put("bytes", Bytes.class); - functions.put("arrays", Arrays.class); - functions.put("dq", DataQuality.class); - functions.put("ddl", DDL.class); - functions.put("geo", GeoFences.class); - functions.put("number", NumberFunctions.class); - functions.put("logical", Logical.class); - return functions; - } - - } - - private static final class NullLogger implements Log { - @Override - public void debug(Object o) { - - } - - @Override - public void debug(Object o, Throwable throwable) { - - } - - @Override - public void error(Object o) { - - } - - @Override - public void error(Object o, Throwable throwable) { - - } - - @Override - public void fatal(Object o) { - - } - - @Override - public void fatal(Object o, Throwable throwable) { - - } - - @Override - public void info(Object o) { - - } - - @Override - public void info(Object o, Throwable throwable) { - - } - - @Override - public boolean isDebugEnabled() { - return false; - } - - @Override - public boolean isErrorEnabled() { - return false; - } - - @Override - public boolean isFatalEnabled() { - return false; - } - - @Override - public boolean isInfoEnabled() { - return false; - } - - @Override - public boolean isTraceEnabled() { - return false; - } - - @Override - public boolean isWarnEnabled() { - return false; - } - - @Override - public void trace(Object o) { - - } - - @Override - public void trace(Object o, Throwable throwable) { - - } - - @Override - public void warn(Object o) { - - } - - @Override - public void warn(Object o, Throwable throwable) { - - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELContext.java b/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELContext.java deleted file mode 100644 index 04b0b884b..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELContext.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.expression; - -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import org.apache.commons.jexl3.JexlContext; - -import java.util.HashMap; -import java.util.Map; -import javax.annotation.Nullable; - -/** - * Manages variables which can be referenced in a JEXL expression. - * - *

JEXL variable names in their simplest form are 'java-like' identifiers. - * JEXL also considers 'ant' inspired variables expressions as valid. - * For instance, the expression 'x.y.z' is an 'antish' variable and will be resolved as a whole by the context, - * i.e. using the key "x.y.z". This proves to be useful to solve "fully qualified class names".

- * - *

Note that JEXL may use '$jexl' and '$ujexl' variables for internal purpose; setting or getting those - * variables may lead to unexpected results unless specified otherwise.

- */ -public class ELContext implements JexlContext { - private final Map values = new HashMap<>(); - - /** - * Context object passed to every expression evaluation. - * All properties of this class are public to ensure they can be accessed with dot(.) format. - */ - public static class Context { - public final String environment; - public final String name; - public final long nano; - public final long millis; - - public Context(String environment, String name) { - this.environment = environment; - this.name = name; - this.nano = System.nanoTime(); - this.millis = nano / 1000; - } - } - - /** - * No-op constructors that does nothing but create a instance of context. - */ - public ELContext() { - // no-op - } - - /** - * Constructor that extracts the {@link ExecutorContext} internals and turns them into variables. - * This method extracts the transient variables, runtime arguments, environment it's running in and - * the context in which it is running as identifiers that can be used within JEXL expression. - * - * @param context to be examined to be extracted into JEXL expression variables. - */ - public ELContext(ExecutorContext context) { - init(context); - } - - /** - * Sets the context for EL, includes the required variables in expression, 'this' and 'ctx'. - * - * @param context to be examined to be extracted into JEXL expression variables. - * @param el the expression. - * @param row the row for 'this'. - */ - public ELContext(ExecutorContext context, EL el, Row row) { - for (String var : el.variables()) { - set(var, row.getValue(var)); - } - // These two steps below has to always happen after el variables are loaded - // because, el variables might not be present in a row. - init(context); - set("this", row); - } - - @Nullable - private void init(ExecutorContext context) { - if (context != null) { - // Adds the transient store variables. - for (String variable : context.getTransientStore().getVariables()) { - set(variable, context.getTransientStore().get(variable)); - } - set("ctx", new Context(context.getEnvironment().name(), context.getContextName())); - } - } - - /** - * This constructor sets the expression context with a variable. - * - * @param name of the variable. - * @param object the object associated with the variable. - */ - public ELContext(String name, Object object) { - values.put(name, object); - } - - /** - * This constructor provides the pre-defined values for JEXL expression. - * - * @param values map of values. - */ - public ELContext(Map values) { - this.values.putAll(values); - } - - /** - * Returns the object associated with the name if found, else it's null. - * - * @param name of the variable. - * @return value if found, null otherwise. - */ - @Override - public Object get(String name) { - return values.get(name); - } - - /** - * Sets a variable with the value. - * - * @param name of the variable. - * @param value of the variable. - */ - @Override - public void set(String name, Object value) { - values.put(name, value); - } - - /**d - * Sets a variable with the value. - * - * @param name of the variable. - * @param value of the variable. - * @return 'this' context. - */ - public ELContext add(String name, Object value) { - values.put(name, value); - return this; - } - - /** - * Checks if a variable exists in the context. - * - * @param name of the variable to be checked. - * @return true if found, false otherwise. - */ - @Override - public boolean has(String name) { - return values.containsKey(name); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELException.java b/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELException.java deleted file mode 100644 index 2318798a5..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELException.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.expression; - -/** - * Class description here. - */ -public class ELException extends Exception { - - public ELException(Throwable cause) { - super(cause); - } - - public ELException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELRegistration.java b/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELRegistration.java deleted file mode 100644 index 6281e8742..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELRegistration.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.expression; - -import java.util.Map; - -/** - * Class description here. - */ -public interface ELRegistration { - Map functions(); -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELResult.java b/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELResult.java deleted file mode 100644 index 85716ca21..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/expression/ELResult.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.expression; - -/** - * Class description here. - */ -public final class ELResult { - private final Object value; - - public ELResult(Object value) { - this.value = value; - } - - public Object getObject() { - return value; - } - - public Boolean getBoolean() { - if (value instanceof Boolean) { - return (Boolean) value; - } else if (value instanceof String) { - return Boolean.parseBoolean((String) value); - } - return null; - } - - public Integer getInteger() { - if (value instanceof Integer) { - return (Integer) value; - } else if (value instanceof Long) { - return ((Long) value).intValue(); - } else if (value instanceof Short) { - return ((Short) value).intValue(); - } else if (value instanceof Double) { - return ((Double) value).intValue(); - } else if (value instanceof Float) { - return ((Float) value).intValue(); - } - return null; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/i18n/Messages.java b/wrangler-core/src/main/java/io/cdap/wrangler/i18n/Messages.java deleted file mode 100644 index d72781909..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/i18n/Messages.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.i18n; - -import io.cdap.wrangler.api.annotations.Public; - -import java.text.MessageFormat; -import java.util.Locale; -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -/** - * Messages is a i18n error or descriptive messages. - * - * - * private static final Messages MSG = MessageFactory.getMessages(); - * private static final Messages MSG = MessageFactory.getMessages(name, Locale.FRANCE); - * - */ -@Public -public final class Messages { - // Resource bundle. - private static ResourceBundle bundle; - - // Name of the resource. - private final String name; - - // Locale of the resource. - private final Locale locale; - - public Messages() { - this("user/messages", Locale.getDefault()); - } - - public Messages(String name) { - this(name, Locale.getDefault()); - } - - public Messages(String name, Locale locale) { - this.name = name; - this.locale = locale; - bundle = ResourceBundle.getBundle(name, locale, Messages.class.getClassLoader()); - } - - /** - * Return the message based on the key. - * - * @param key of the message. - * @return resolved string message. - */ - public String get(String key) { - if (bundle == null) { - return String.format("Key '%s' not found in bundle '%s' and locale '%s'", - key, name, locale.toString()); - } - - try { - return bundle.getString(key); - } catch (MissingResourceException e) { - return String.format("Key '%s' not found in bundle '%s' and locale '%s'", - key, name, locale.toString()); - } - } - - /** - * Returns a string message with resolved arguments. - * - * @param key name of the key. - * @param args list of arguments. - * @return resolved string representation. - */ - public String get(String key, Object ... args) { - return MessageFormat.format(get(key), args); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/i18n/MessagesFactory.java b/wrangler-core/src/main/java/io/cdap/wrangler/i18n/MessagesFactory.java deleted file mode 100644 index dbcefc6cb..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/i18n/MessagesFactory.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.i18n; - -import io.cdap.wrangler.api.annotations.Public; - -import java.util.Locale; - -/** - * i18n Messages Factory for creating different {@link Messages}. - */ -@Public -public final class MessagesFactory { - - /** - * @return Default {@link Messages} with resource bundle 'user' and default {@link Locale} - */ - public static Messages getMessages() { - return new Messages(); - } - - /** - * Creates a {@link Messages} with specified {@link java.util.ResourceBundle} name and default {@link Locale} - * @param name of the base bundle for creating {@link Messages} - * @return an instance of {@link Messages} - */ - public static Messages getMessages(String name) { - return new Messages(name); - } - - /** - * Creates a {@link Messages} with specified {@link java.util.ResourceBundle} name and {@link Locale} - * @param name of the base bundle for creating {@link Messages} - * @param locale to be used for creating the {@link Messages} - * @return an instance of {@link Messages} - */ - public static Messages getMessages(String name, Locale locale) { - return new Messages(name, locale); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/lineage/LineageOperations.java b/wrangler-core/src/main/java/io/cdap/wrangler/lineage/LineageOperations.java deleted file mode 100644 index 21ca5df21..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/lineage/LineageOperations.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.lineage; - -import com.google.common.collect.Sets; -import io.cdap.cdap.etl.api.lineage.field.FieldOperation; -import io.cdap.cdap.etl.api.lineage.field.FieldTransformOperation; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.lineage.Lineage; -import io.cdap.wrangler.api.lineage.Mutation; -import io.cdap.wrangler.api.lineage.Relation; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * This class {@link LineageOperations} generates transformation operations used to generate lineage. - */ -public final class LineageOperations { - private static final Logger LOG = LoggerFactory.getLogger(LineageOperations.class); - private static final String OPERATION_NAME_PREFIX = "operation_"; - private final Set input; - private final Set output; - private final List directives; - - /** - * A constructor for generating the transformation operations for lineage. - * - * @param input A input {@link Set} of columns. - * @param output A output {@link Set} of columns. - * @param directives A {@link List} of directives. - */ - public LineageOperations(Set input, Set output, List directives) { - this.input = Collections.unmodifiableSet(new HashSet<>(input)); - this.output = Collections.unmodifiableSet(new HashSet<>(output)); - this.directives = Collections.unmodifiableList(new ArrayList<>(directives));; - } - - /** - * Generates the list of {@link FieldOperation} required for generating lineage. - * - * @return a {@link List} of {@link FieldOperation} - */ - public List generate() { - List operations = new ArrayList<>(); - // this set contains all the fields that are used as the input fields in the transformation - Set definedSources = new HashSet<>(); - - // The following three fields are needed to track the guessed transformation. - // Due to the current limitation of some directive, the actual operated columns is unknown until the actual data - // comes. This happens mostly in the parse scenario and it will happen in ALL type relations. - // Therefore, we will guess these parse directive using the given input and output fields. - // However, this has a big drawback, since the following directives can use columns - // the parse directive actually generates, and they will generate something like [actual columns] -> [...]. In this - // case, the traceback logic will not be able to the read operations since actual columns are never in the any - // of the output fields in any transformation. To solve this issue, each time we see a input field that does not - // appear before, we will add it to the last all operation, since we can be sure that it is an actual field and - // it should be generated by one of the all operations. - - // this set contains all the available fields that can be used as inputs in a field transformation. If one of the - // fields from a relation are not in this set, that means, it is generated from a all operation, and we will, by - // guess, add it to the output fields of last all operations - Set availableSources = new HashSet<>(input); - // this int is the index of the last all operation generated field transformation in the operations, it will - // need to be update the transformation operation to contain the actual columns. - int lastAllOperationIndex = -1; - // this is the output fields that should be in last all operations, basically it contains the output fields that - // are not present in input schema + all actual fields used by the following directives. - Set lastAllOutput = new HashSet<>(); - - for (Directive directive : directives) { - if (directive instanceof Lineage) { - Mutation mutation = ((Lineage) directive).lineage(); - String readable = mutation.readable(); - for (Relation relation : mutation.relations()) { - // we won't use uuid in relation since in cdap we compute the checksum of the operations and we only - // write to the table if the operations are different - String name = OPERATION_NAME_PREFIX + operations.size(); - List sources = relation.getSources(); - List targets = relation.getTargets(); - switch (relation.getType()) { - case ALL: - sources = sources.isEmpty() ? new ArrayList<>(input) : sources; - checkAndSetActualFields(operations, availableSources, lastAllOperationIndex, lastAllOutput, sources); - // add the diff of all output and input fields as the output targets - Set outputs = new HashSet<>(Sets.difference(output, availableSources)); - // if the sources are in the output fields itself, add that to the targets - outputs.addAll(Sets.intersection(new HashSet<>(sources), output)); - // add all the targets that this relation provides to the outputs - outputs.addAll(targets); - targets = new ArrayList<>(outputs); - operations.add( - new FieldTransformOperation( - name, - readable, - sources, - targets) - ); - lastAllOperationIndex = operations.size() - 1; - lastAllOutput = new HashSet<>(targets); - break; - - case GENERATE: - sources = new ArrayList<>(input); - operations.add(new FieldTransformOperation( - name, - readable, - sources, - targets - )); - break; - - case DROP: - checkAndSetActualFields(operations, availableSources, lastAllOperationIndex, lastAllOutput, sources); - operations.add( - new FieldTransformOperation( - name, - readable, - sources - ) - ); - break; - - case CREATE: - checkAndSetActualFields(operations, availableSources, lastAllOperationIndex, lastAllOutput, sources); - operations.add( - new FieldTransformOperation( - name, - readable, - Collections.emptyList(), - targets - ) - ); - break; - - case STANDARD: - checkAndSetActualFields(operations, availableSources, lastAllOperationIndex, lastAllOutput, sources); - operations.add( - new FieldTransformOperation( - name, - readable, - sources, - targets - ) - ); - } - availableSources.addAll(targets); - definedSources.addAll(relation.getSources()); - } - } - } - - // We iterate through all the input fields in the schema, check if there is corresponding - // field in the output schema. If both exists, then a identity mapping transform is added - // to the {@code FieldTransformationOperation} is added. - Set difference = Sets.difference(input, definedSources); - for (String next : difference) { - if (output.contains(next)) { - FieldTransformOperation transformation = - new FieldTransformOperation( - OPERATION_NAME_PREFIX + operations.size(), - String.format("Mapping column '%s' to column '%s'", next, next), - Collections.singletonList(next), - next - ); - operations.add(transformation); - } - } - - return operations; - } - - // checks if the current input field contain any actual fields, if there are, modify the previous ALL operation to - // include that as output fields - private void checkAndSetActualFields(List operations, Set availableSources, - int lastAllIndex, Set lastAllOutputFields, - List inputFields) { - // if available sources has all the input fields, we are fine since the field lineage can be computed - if (availableSources.containsAll(inputFields)) { - return; - } - - // this condition should never happen, since actual fields can only be generated in an all operations, - if (lastAllIndex == -1) { - LOG.warn("The input fields {} contains fields that are neither in input schema nor generated by " + - "other field operations, field operations might not be recorded.", inputFields); - return; - } - - // the output fields of the last ALL operation should contain all these actual fields - Sets.SetView actualFields = Sets.difference(new HashSet<>(inputFields), availableSources); - lastAllOutputFields.addAll(actualFields); - availableSources.addAll(actualFields); - FieldTransformOperation operation = (FieldTransformOperation) operations.get(lastAllIndex); - operations.set(lastAllIndex, new FieldTransformOperation(operation.getName(), operation.getDescription(), - operation.getInputFields(), - new ArrayList<>(lastAllOutputFields))); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/metrics/Constants.java b/wrangler-core/src/main/java/io/cdap/wrangler/metrics/Constants.java deleted file mode 100644 index 38228d5cd..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/metrics/Constants.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.metrics; - -/** - * Constants for emitting CDAP metrics from Wrangler - */ -public class Constants { - /** - * Metric tags (same as those defined in CDAP) - */ - public static final class Tags { - public static final String APP_ENTITY_TYPE = "aet"; - public static final String APP_ENTITY_TYPE_NAME = "tpe"; - } - - private Constants() { - throw new AssertionError("Cannot instantiate a static utility class."); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/metrics/JexlCategoryMetricUtils.java b/wrangler-core/src/main/java/io/cdap/wrangler/metrics/JexlCategoryMetricUtils.java deleted file mode 100644 index ffc0225b2..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/metrics/JexlCategoryMetricUtils.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.metrics; - -import io.cdap.wrangler.api.EntityCountMetric; -import io.cdap.wrangler.expression.EL; -import org.apache.commons.jexl3.parser.ParserTokenManager; -import org.apache.commons.jexl3.parser.SimpleCharStream; - -import java.io.ByteArrayInputStream; -import java.util.Map; - -import javax.annotation.Nullable; - -/** - * Utility class for the 'JEXL category' metric. This metric counts the number of times a JEXL function category - * in {@link io.cdap.wrangler.expression.EL.DefaultFunctions} is used. - */ -public final class JexlCategoryMetricUtils { - private static final Map EL_DEFAULT_FUNCTIONS = new EL.DefaultFunctions().functions(); - - // JEXL Metric constants - public static final String JEXL_CATEGORY_METRIC_NAME = "wrangler.jexl-category.count"; - public static final int JEXL_CATEGORY_METRIC_COUNT = 1; - public static final String JEXL_CATEGORY_ENTITY_TYPE = "jexl-category"; - - /** - * This method parses the JEXL function category from the given JEXL script and returns the metric if the category is - * present in {@link io.cdap.wrangler.expression.EL.DefaultFunctions} - * - * @param jexlScript the JEXL script from which the JEXL function category will be parsed - * @return {@link EntityCountMetric} with the metric name and necessary tags representing a JEXL category metric - */ - @Nullable - public static EntityCountMetric getJexlCategoryMetric(String jexlScript) { - String category = parseJexlCategory(jexlScript); - if (EL_DEFAULT_FUNCTIONS.containsKey(category)) { - return new EntityCountMetric( - JEXL_CATEGORY_METRIC_NAME, JEXL_CATEGORY_ENTITY_TYPE, category, JEXL_CATEGORY_METRIC_COUNT); - } - return null; - } - - private static String parseJexlCategory(String script) { - ParserTokenManager manager = new ParserTokenManager( - new SimpleCharStream(new ByteArrayInputStream(script.getBytes()))); - return manager.getNextToken().toString(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/parser/ConfigDirectiveContext.java b/wrangler-core/src/main/java/io/cdap/wrangler/parser/ConfigDirectiveContext.java deleted file mode 100644 index 20d100077..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/parser/ConfigDirectiveContext.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.wrangler.api.DirectiveConfig; -import io.cdap.wrangler.api.DirectiveContext; - -/** - * This class {@link ConfigDirectiveContext} manages the context for directive - * by either retrieving the configuration from a service or from a provided - * instance of {@link DirectiveConfig}. - */ -public class ConfigDirectiveContext implements DirectiveContext { - private final DirectiveConfig config; - - public ConfigDirectiveContext(DirectiveConfig config) { - this.config = config; - } - - /** - * Checks if the directive is aliased. - * - * @param directive to be checked for aliasing. - * @return true if the directive has an alias, false otherwise. - */ - @Override - public boolean hasAlias(String directive) { - return config.hasAlias(directive); - } - - /** - * Returns the root directive aliasee - * @param directive - * @return - */ - @Override - public String getAlias(String directive) { - return config.getAliasName(directive); - } - - /** - * Checks if the directive is being excluded from being used. - * - * @param directive to be checked for exclusion. - * @return true if excluded, false otherwise. - */ - @Override - public boolean isExcluded(String directive) { - return config.isExcluded(directive); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/parser/DirectiveClass.java b/wrangler-core/src/main/java/io/cdap/wrangler/parser/DirectiveClass.java deleted file mode 100644 index 3d31632f1..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/parser/DirectiveClass.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.cdap.api.artifact.ArtifactId; -import io.cdap.wrangler.registry.DirectiveScope; - -import javax.annotation.Nullable; - -/** - * This class carries the class information about a directive. - */ -public class DirectiveClass { - - private final String name; - private final DirectiveScope scope; - private final ArtifactId artifactId; - private final String className; - - public DirectiveClass(String name, String className, DirectiveScope scope, @Nullable ArtifactId artifactId) { - this.name = name; - this.className = className; - this.scope = scope; - this.artifactId = artifactId; - } - - public String getName() { - return name; - } - - public String getClassName() { - return className; - } - - public DirectiveScope getScope() { - return scope; - } - - @Nullable - public ArtifactId getArtifactId() { - return artifactId; - } - - @Override - public String toString() { - return "DirectiveClass{" + - "name='" + name + '\'' + - ", scope=" + scope + - ", artifactId=" + artifactId + - ", className='" + className + '\'' + - '}'; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/parser/GrammarBasedParser.java b/wrangler-core/src/main/java/io/cdap/wrangler/parser/GrammarBasedParser.java deleted file mode 100644 index 21ac03ca1..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/parser/GrammarBasedParser.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import com.google.common.base.Joiner; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveContext; -import io.cdap.wrangler.api.DirectiveLoadException; -import io.cdap.wrangler.api.DirectiveNotFoundException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.RecipeParser; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.registry.DirectiveInfo; -import io.cdap.wrangler.registry.DirectiveRegistry; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * This class GrammarBasedParser is an implementation of RecipeParser. - * It's responsible for compiling the recipe and checking all the directives exist before concluding - * that the directives are ready for execution. - */ -public class GrammarBasedParser implements RecipeParser { - private static final char EOL = '\n'; - private final String namespace; - private final DirectiveRegistry registry; - private final String recipe; - private final DirectiveContext context; - - public GrammarBasedParser(String namespace, String recipe, DirectiveRegistry registry) { - this(namespace, recipe, registry, new NoOpDirectiveContext()); - } - - public GrammarBasedParser(String namespace, String[] directives, - DirectiveRegistry registry, DirectiveContext context) { - this(namespace, Joiner.on(EOL).join(directives), registry, context); - } - - public GrammarBasedParser(String namespace, String recipe, DirectiveRegistry registry, DirectiveContext context) { - this.namespace = namespace; - this.recipe = recipe; - this.registry = registry; - this.context = context; - } - - /** - * Parses the recipe provided to this class and instantiate a list of {@link Directive} from the recipe. - * - * @return List of {@link Directive}. - */ - @Override - public List parse() throws RecipeException { - AtomicInteger directiveIndex = new AtomicInteger(); - try { - List result = new ArrayList<>(); - - new GrammarWalker(new RecipeCompiler(), context).walk(recipe, (command, tokenGroup) -> { - directiveIndex.getAndIncrement(); - DirectiveInfo info = registry.get(namespace, command); - if (info == null) { - throw new DirectiveNotFoundException( - String.format("Directive '%s' not found in system and user scope. Check the name of directive.", command) - ); - } - - try { - Directive directive = info.instance(); - UsageDefinition definition = directive.define(); - Arguments arguments = new MapArguments(definition, tokenGroup); - directive.initialize(arguments); - result.add(directive); - - } catch (IllegalAccessException | InstantiationException e) { - throw new DirectiveLoadException(e.getMessage(), e); - } - }); - - return result; - } catch (DirectiveLoadException | DirectiveNotFoundException | DirectiveParseException e) { - throw new RecipeException(e.getMessage(), e, directiveIndex.get()); - } catch (Exception e) { - throw new RecipeException(e.getMessage(), e); - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/parser/GrammarWalker.java b/wrangler-core/src/main/java/io/cdap/wrangler/parser/GrammarWalker.java deleted file mode 100644 index 65c05acf7..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/parser/GrammarWalker.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.wrangler.api.CompileException; -import io.cdap.wrangler.api.CompileStatus; -import io.cdap.wrangler.api.Compiler; -import io.cdap.wrangler.api.DirectiveContext; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.TokenGroup; -import io.cdap.wrangler.api.parser.DirectiveName; -import io.cdap.wrangler.api.parser.SyntaxError; - -import java.util.Iterator; - -/** - * This class provides logic to walk a grammar tree by parsing a wrangler recipe. - */ -public class GrammarWalker { - - private final Compiler compiler; - private final DirectiveContext context; - - /** - * A visitor for the the recipe grammar. - * @param type of the exception thrown by the {@link #visit(String, TokenGroup)} method - */ - public interface Visitor { - void visit(String command, TokenGroup tokenGroup) throws E; - } - - public GrammarWalker(Compiler compiler, DirectiveContext context) { - this.compiler = compiler; - this.context = context; - } - - /** - * Walks the grammar tree generated by the recipe. - * - * @param recipe the recipe to parse - * @param visitor the visitor for walking the grammar tree - * @param type of exception that can be thrown by the visitor - * @throws CompileException if failed to compile the recipe - * @throws DirectiveParseException if a directive in the recipe is invalid - * @throws E if the visitor throws an exception - */ - public void walk(String recipe, - Visitor visitor) throws CompileException, DirectiveParseException, E { - CompileStatus status = compiler.compile(recipe); - if (!status.isSuccess()) { - Iterator errors = status.getErrors(); - String prefix = "Encountered syntax error, please ensure the directive is valid:\n"; - throw new DirectiveParseException(prefix + errors.next().getMessage(), errors); - } - - Iterator tokenGroups = status.getSymbols().iterator(); - while (tokenGroups.hasNext()) { - TokenGroup tokenGroup = tokenGroups.next(); - if (tokenGroup == null) { - continue; - } - String command = ((DirectiveName) tokenGroup.get(0)).value(); - String root = command; - if (context.hasAlias(root)) { - root = context.getAlias(command); - } - - // Checks if the directive has been excluded from being used. - if (!root.equals(command) && context.isExcluded(command)) { - throw new DirectiveParseException( - command, String.format("Aliased directive '%s' has been configured as restricted directive and " - + "is hence unavailable. Please contact your administrator", command) - ); - } - - if (context.isExcluded(root)) { - throw new DirectiveParseException( - command, String.format("Directive '%s' has been configured as restricted directive and is hence " + - "unavailable. Please contact your administrator", command)); - } - - visitor.visit(root, tokenGroup);; - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/parser/MapArguments.java b/wrangler-core/src/main/java/io/cdap/wrangler/parser/MapArguments.java deleted file mode 100644 index 8b8c429cf..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/parser/MapArguments.java +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.LazyNumber; -import io.cdap.wrangler.api.TokenGroup; -import io.cdap.wrangler.api.parser.Bool; -import io.cdap.wrangler.api.parser.BoolList; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.NumericList; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TextList; -import io.cdap.wrangler.api.parser.Token; -import io.cdap.wrangler.api.parser.TokenDefinition; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -/** - * Class description here. - */ -public class MapArguments implements Arguments { - private final Map tokens; - private final int lineno; - private final int columnno; - private final String source; - - public MapArguments(UsageDefinition definition, TokenGroup group) throws DirectiveParseException { - this.tokens = new HashMap<>(); - this.lineno = group.getSourceInfo().getLineNumber(); - this.columnno = group.getSourceInfo().getColumnNumber(); - this.source = group.getSourceInfo().getSource(); - int required = definition.getTokens().size() - definition.getOptionalTokensCount(); - if ((required > group.size() - 1) || ((group.size() - 1) > definition.getTokens().size())) { - throw new DirectiveParseException( - definition.getDirectiveName(), String.format("Improper usage of directive '%s', usage - '%s'", - definition.getDirectiveName(), definition.toString())); - } - - List specifications = definition.getTokens(); - Iterator it = group.iterator(); - int pos = 0; - it.next(); // skip directive name. - while (it.hasNext()) { - Token token = it.next(); - while (pos < specifications.size()) { - TokenDefinition specification = specifications.get(pos); - if (!specification.optional()) { - if (!specification.type().equals(token.type())) { - if (specification.type() == TokenType.COLUMN_NAME_LIST && token.type() == TokenType.COLUMN_NAME) { - List values = new ArrayList<>(); - values.add(((ColumnName) token).value()); - tokens.put(specification.name(), new ColumnNameList(values)); - pos = pos + 1; - break; - } else if (specification.type() == TokenType.NUMERIC_LIST && token.type() == TokenType.NUMERIC) { - List values = new ArrayList<>(); - values.add(((Numeric) token).value()); - tokens.put(specification.name(), new NumericList(values)); - pos = pos + 1; - break; - } else if (specification.type() == TokenType.BOOLEAN_LIST && token.type() == TokenType.BOOLEAN) { - List values = new ArrayList<>(); - values.add(((Bool) token).value()); - tokens.put(specification.name(), new BoolList(values)); - pos = pos + 1; - break; - } else if (specification.type() == TokenType.TEXT_LIST && token.type() == TokenType.TEXT) { - List values = new ArrayList<>(); - values.add(((Text) token).value()); - tokens.put(specification.name(), new TextList(values)); - pos = pos + 1; - break; - } else { - throw new DirectiveParseException( - String.format("Expected argument '%s' to be of type '%s', but it is of type '%s' - %s", - specification.name(), specification.type().name(), - token.type().name(), group.getSourceInfo().toString()) - ); - } - } else { - tokens.put(specification.name(), token); - pos = pos + 1; - break; - } - } else { - pos = pos + 1; - if (specification.type().equals(token.type())) { - tokens.put(specification.name(), token); - break; - } - } - } - } - } - - /** - * Returns the number of tokens that are mapped to arguments. - * - *

The optional arguments specified during the UsageDefinition - * are not included in the size if they are not present in the tokens parsed.

- * - * @return number of tokens parsed, excluding optional tokens if not present. - */ - @Override - public int size() { - return tokens.size(); - } - - /** - * This method checks if there exists a token named name registered - * with this object. - * - * The name is expected to the same as specified in the UsageDefinition. - * There are two reason why the name might not exists in this object : - * - *
    - *
  • When an token is defined to be optional, the user might not have specified the - * token, hence the token would not exist in the argument.
  • - *
  • User has specified invalid name.
  • - *
- * - * @param name associated with the token. - * @return true if argument with name name exists, false otherwise. - */ - @Override - public boolean contains(String name) { - return tokens.containsKey(name); - } - - /** - * This method returns the token {@code value} based on the {@code name} - * specified in the argument. This method will attempt to convert the token - * into the expected return type T. - *

- *

If the name doesn't exist in this object, then this - * method is expected to return null

- * - * @param name of the token to be retrieved. - * @return object that extends Token. - */ - @Override - public T value(String name) { - return (T) tokens.get(name); - } - - /** - * Each token is defined as one of the types defined in the class {@link TokenType}. - * When the directive is parsed into token, the type of the token is passed through. - * - * @param name associated with the token. - * @return TokenType associated with argument name, else null. - */ - @Override - public TokenType type(String name) { - return tokens.get(name).type(); - } - - /** - * Returns the source line number these arguments were parsed from. - * - * @return the source line number. - */ - @Override - public int line() { - return lineno; - } - - /** - * Returns the source column number these arguments were parsed from. - *

It takes the start position of the directive as the column number.

- * - * @return the start of the column number for the start of the directive - * these arguments contain. - */ - @Override - public int column() { - return columnno; - } - - /** - * This method returns the original source line of the directive as specified - * the user. It returns the String representation of the directive. - * - * @return String object representing the original directive - * as specified by the user. - */ - @Override - public String source() { - return source; - } - - /** - * Returns JsonElement representation of this object. - * - * @return an instance of JsonElementobject representing all the - * named tokens held within this object. - */ - @Override - public JsonElement toJson() { - JsonObject object = new JsonObject(); - JsonObject arguments = new JsonObject(); - for (Map.Entry entry : tokens.entrySet()) { - arguments.add(entry.getKey(), entry.getValue().toJson()); - } - object.addProperty("line", lineno); - object.addProperty("column", columnno); - object.addProperty("source", source); - object.add("arguments", arguments); - return object; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/parser/MigrateToV2.java b/wrangler-core/src/main/java/io/cdap/wrangler/parser/MigrateToV2.java deleted file mode 100644 index 6ef865232..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/parser/MigrateToV2.java +++ /dev/null @@ -1,833 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import com.google.common.base.Joiner; -import edu.emory.mathcs.backport.java.util.Arrays; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.GrammarMigrator; - -import java.util.ArrayList; -import java.util.List; -import java.util.StringTokenizer; -import javax.annotation.Nullable; - -import static org.apache.commons.lang3.StringUtils.trim; - -/** - * This class MigrateToV2 translates from older version - * of grammar of directives into newer version of recipe grammar. - * - *

Following are the conversions that are performed : - *

    - *
  • Convert column name from 'name' to ':name'.
  • - *
  • Text are quoted with with single or double quote.
  • - *
  • Expression or conditions are represented 'exp:{}'
  • - *
  • All directives are terminated by semicolo (;)
  • - *

- */ -public final class MigrateToV2 implements GrammarMigrator { - private final List recipe; - - public MigrateToV2(List recipe) { - this.recipe = recipe; - } - - public MigrateToV2(String[] recipe) { - this(Arrays.asList(recipe)); - } - - public MigrateToV2(@Nullable String recipe, String delimiter) { - this(recipe != null ? recipe.trim().split(delimiter) : new String[]{}); - } - - public MigrateToV2(String recipe) { - this(recipe, "\n"); - } - - /** - * Rewrites the directives in version 1.0 to version 2.0. - * - * @return directives converted to version 2.0. - */ - @Override - public String migrate() throws DirectiveParseException { - List transformed = new ArrayList<>(); - int lineno = 1; - for (String directive : recipe) { - directive = directive.trim(); - if (directive.isEmpty() || directive.startsWith("//") - || (directive.startsWith("#") && !directive.startsWith("#pragma"))) { - continue; - } - - if (directive.contains("exp:") || directive.contains("prop:")) { - if (directive.endsWith(";")) { - transformed.add(directive); - } else { - transformed.add(directive + ";"); - } - continue; - } - - if (directive.startsWith("#pragma")) { - transformed.add(directive); - continue; - } - - if (directive.endsWith(";")) { - directive = directive.substring(0, directive.length() - 1); - } - - StringTokenizer tokenizer = new StringTokenizer(directive, " "); - String command = tokenizer.nextToken(); - - switch (command) { - case "set": { - switch (tokenizer.nextToken()) { - // set column - case "column": { - String column = getNextToken(tokenizer, "set column", "column-name", lineno); - String expr = getNextToken(tokenizer, "\n", "set column", "jexl-expression", lineno); - transformed.add(String.format("set-column %s exp:{%s};", col(column), expr)); - } - break; - - // set columns - case "columns": { - String columns = getNextToken(tokenizer, "\n", "set columns", "name1, name2, ...", lineno); - String cols[] = columns.split(","); - transformed.add(String.format("set-headers %s;", toColumArray(cols))); - } - break; - } - } - break; - - // rename - case "rename": { - String oldcol = getNextToken(tokenizer, command, "old", lineno); - String newcol = getNextToken(tokenizer, command, "new", lineno); - transformed.add(String.format("rename %s %s;", col(oldcol), col(newcol))); - } - break; - - //set-type [ prop:{precision=}] - case "set-type": { - String col = getNextToken(tokenizer, command, "col", lineno); - String type = getNextToken(tokenizer, command, "type", lineno); - String scale = getNextToken(tokenizer, null, command, "scale", lineno, true); - String roundingMode = getNextToken(tokenizer, null, command, "rounding-mode", lineno, true); - String precision = getNextToken(tokenizer, null, command, "precision", lineno, true); - transformed.add(String.format("set-type %s %s %s %s %s;", col(col), type, scale, roundingMode, precision)); - } - break; - - // drop [,] - case "drop": { - String columns = getNextToken(tokenizer, command, "column", lineno); - String cols[] = columns.split(","); - transformed.add(String.format("drop %s;", toColumArray(cols))); - } - break; - - // merge - case "merge": { - String col1 = getNextToken(tokenizer, command, "first", lineno); - String col2 = getNextToken(tokenizer, command, "second", lineno); - String dest = getNextToken(tokenizer, command, "new-column", lineno); - String delimiter = getNextToken(tokenizer, "\n", command, "delimiter", lineno); - transformed.add(String.format("merge %s %s %s %s;", col(col1), col(col2), col(dest), quote(delimiter))); - } - break; - - // uppercase - case "uppercase": { - String col = getNextToken(tokenizer, command, "col", lineno); - transformed.add(String.format("uppercase %s;", col(col))); - } - break; - - // lowercase - case "lowercase": { - String col = getNextToken(tokenizer, command, "col", lineno); - transformed.add(String.format("lowercase %s;", col(col))); - } - break; - - // titlecase - case "titlecase": { - String col = getNextToken(tokenizer, command, "col", lineno); - transformed.add(String.format("titlecase %s;", col(col))); - } - break; - - // indexsplit - case "indexsplit": { - String source = getNextToken(tokenizer, command, "source", lineno); - String startStr = getNextToken(tokenizer, command, "start", lineno); - String endStr = getNextToken(tokenizer, command, "end", lineno); - String destination = getNextToken(tokenizer, command, "destination", lineno); - transformed.add(String.format("indexsplit %s %s %s %s;", col(source), startStr, endStr, col(destination))); - } - break; - - // split - case "split": { - String source = getNextToken(tokenizer, command, "source-column-name", lineno); - String delimiter = getNextToken(tokenizer, command, "delimiter", lineno); - String firstCol = getNextToken(tokenizer, command, "new-column-1", lineno); - String secondCol = getNextToken(tokenizer, command, "new-column-2", lineno); - transformed.add(String.format("split %s %s %s %s;", col(source), quote(delimiter), - col(firstCol), col(secondCol))); - } - break; - - // filter-row-if-matched - case "filter-row-if-matched": { - String column = getNextToken(tokenizer, command, "column", lineno); - String pattern = getNextToken(tokenizer, "\n", command, "regex", lineno); - transformed.add(String.format("filter-by-regex if-matched %s %s;", col(column), quote(pattern))); - } - break; - - // filter-row-if-not-matched - case "filter-row-if-not-matched": { - String column = getNextToken(tokenizer, command, "column", lineno); - String pattern = getNextToken(tokenizer, "\n", command, "regex", lineno); - transformed.add(String.format("filter-by-regex if-not-matched %s %s;", col(column), quote(pattern))); - } - break; - - // filter-row-if-true - case "filter-row-if-true": { - String condition = getNextToken(tokenizer, "\n", command, "condition", lineno); - transformed.add(String.format("filter-row exp:{%s} true;", condition)); - } - break; - - // filter-row-if-false - case "filter-row-if-false": { - String condition = getNextToken(tokenizer, "\n", command, "condition", lineno); - transformed.add(String.format("filter-row exp:{%s} false;", condition)); - } - break; - - // filter-rows-on condition-false - // filter-rows-on condition-true - // filter-rows-on empty-or-null-columns [,*] - // filter-rows-on regex-match - // filter-rows-on regex-not-match - case "filter-rows-on" : { - String cmd = getNextToken(tokenizer, command, "command", lineno); - if (cmd.equalsIgnoreCase("condition-false")) { - String condition = getNextToken(tokenizer, "\n", command, "condition", lineno); - transformed.add(String.format("filter-row exp:{%s} false;", condition)); - } else if (cmd.equalsIgnoreCase("condition-true")) { - String condition = getNextToken(tokenizer, "\n", command, "condition", lineno); - transformed.add(String.format("filter-row exp:{%s} true;", condition)); - } else if (cmd.equalsIgnoreCase("empty-or-null-columns")) { - String columns = getNextToken(tokenizer, "\n", command, "columns", lineno); - transformed.add(String.format("filter-empty-or-null %s;", toColumArray(columns.split(",")))); - } else if (cmd.equalsIgnoreCase("regex-match")) { - String column = getNextToken(tokenizer, command, "column", lineno); - String pattern = getNextToken(tokenizer, "\n", command, "regex", lineno); - transformed.add(String.format("filter-by-regex if-matched %s %s;", col(column), quote(pattern))); - } else if (cmd.equalsIgnoreCase("regex-not-match")) { - String column = getNextToken(tokenizer, command, "column", lineno); - String pattern = getNextToken(tokenizer, "\n", command, "regex", lineno); - transformed.add(String.format("filter-by-regex if-not-matched %s %s;", col(column), quote(pattern))); - } else { - throw new DirectiveParseException( - "filter-rows-on", String.format("Unknown option '%s' specified at line no %s", cmd, lineno) - ); - } - } - break; - - // set-variable - case "set-variable": { - String column = getNextToken(tokenizer, command, "column", lineno); - String expression = getNextToken(tokenizer, "\n", command, "expression", lineno); - transformed.add(String.format("set-variable %s exp:{%s};", column, expression)); - } - break; - - // increment-variable - case "increment-variable": { - String column = getNextToken(tokenizer, command, "column", lineno); - String value = getNextToken(tokenizer, command, "value", lineno); - String expression = getNextToken(tokenizer, "\n", command, "expression", lineno); - transformed.add(String.format("increment-variable %s %s exp:{%s};", column, value, expression)); - } - break; - - // mask-number - case "mask-number": { - String column = getNextToken(tokenizer, command, "column", lineno); - String mask = getNextToken(tokenizer, command, "pattern", lineno); - transformed.add(String.format("mask-number %s %s;", col(column), quote(mask))); - } - break; - - // mask-shuffle - case "mask-shuffle": { - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("mask-shuffle %s;", col(column))); - } - break; - - // format-date - case "format-date": { - String column = getNextToken(tokenizer, command, "column", 1); - String format = getNextToken(tokenizer, "\n", command, "format", lineno); - transformed.add(String.format("format-date %s %s;", col(column), quote(format))); - } - break; - - // format-unix-timestamp - case "format-unix-timestamp": { - String column = getNextToken(tokenizer, command, "column", lineno); - String dstDatePattern = getNextToken(tokenizer, "\n", command, "destination-format", lineno); - transformed.add(String.format("format-unix-timestamp %s %s;", col(column), quote(dstDatePattern))); - } - break; - - // quantize <[range1:range2)=value>,[]* - case "quantize": { - String column1 = getNextToken(tokenizer, command, "source-column", lineno); - String column2 = getNextToken(tokenizer, command, "destination-column", lineno); - String ranges = getNextToken(tokenizer, "\n", command, "destination-column", lineno); - transformed.add(String.format("quantize %s %s %s;", col(column1), col(column2), ranges)); - } - break; - - // find-and-replace - case "find-and-replace" : { - String columns = getNextToken(tokenizer, command, "columns", lineno); - String expression = getNextToken(tokenizer, "\n", command, "sed-script", lineno); - transformed.add(String.format("find-and-replace %s %s;", - toColumArray(columns.split(",")), quote(expression))); - } - break; - - // parse-as-csv [] - case "parse-as-csv" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String delimStr = getNextToken(tokenizer, command, "delimiter", lineno); - if (delimStr.endsWith(";")) { - delimStr = delimStr.substring(0, delimStr.length() - 1); - } - String hasHeaderLinesOpt = getNextToken(tokenizer, "\n", command, "true|false", lineno, true); - transformed.add(String.format("parse-as-csv %s %s %s;", col(column), quote(delimStr), - hasHeaderLinesOpt == null ? "" : hasHeaderLinesOpt)); - } - break; - - // parse-as-json [depth] - case "parse-as-json" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String depthOpt = getNextToken(tokenizer, "\n", command, "depth", lineno, true); - transformed.add(String.format("parse-as-json %s %s;", col(column), depthOpt)); - } - break; - - // parse-as-avro [version] - case "parse-as-avro" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String schemaId = getNextToken(tokenizer, command, "schema-id", lineno); - String type = getNextToken(tokenizer, command, "type", lineno); - String versionOpt = getNextToken(tokenizer, "\n", command, "depth", lineno, true); - transformed.add(String.format("parse-as-avro %s %s %s %s;", col(column), schemaId, type, versionOpt)); - } - break; - - // parse-as-protobuf [version] - case "parse-as-protobuf" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String schemaId = getNextToken(tokenizer, command, "schema-id", lineno); - String recordName = getNextToken(tokenizer, command, "record-name", lineno); - String versionOpt = getNextToken(tokenizer, "\n", command, "depth", lineno, true); - transformed.add(String.format("parse-as-protobuf %s %s %s %s;", - col(column), schemaId, quote(recordName), versionOpt)); - } - break; - - // json-path - case "json-path" : { - String src = getNextToken(tokenizer, command, "source", lineno); - String dest = getNextToken(tokenizer, command, "dest", lineno); - String path = getNextToken(tokenizer, "\n", command, "json-path", lineno); - transformed.add(String.format("json-path %s %s %s;", col(src), col(dest), quote(path))); - } - break; - - // set-charset - case "set-charset" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String charset = getNextToken(tokenizer, "\n", command, "charset", lineno, true); - transformed.add(String.format("set-charset %s %s;", col(column), charset)); - } - break; - - // invoke-http [,]
[,
] - case "invoke-http" : { - String url = getNextToken(tokenizer, command, "url", lineno); - String columnsOpt = getNextToken(tokenizer, command, "columns", lineno); - String headers = getNextToken(tokenizer, "\n", command, "headers", lineno, true); - transformed.add(String.format("invoke-http %s %s %s;", quote(url), - toColumArray(columnsOpt.split(",")), quote(headers))); - } - break; - - // set-record-delim [] - case "set-record-delim" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String delimiter = getNextToken(tokenizer, command, "delimiter", lineno); - String limitStr = getNextToken(tokenizer, "\n", column, "limit", lineno, true); - transformed.add(String.format("set-record-delim %s %s %s;", col(column), quote(delimiter), limitStr)); - } - break; - - // parse-as-fixed-length [] - case "parse-as-fixed-length" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String widthStr = getNextToken(tokenizer, command, "widths", lineno); - String padding = getNextToken(tokenizer, "\n", column, "padding", lineno, true); - transformed.add(String.format("parse-as-fixed-length %s %s %s;", col(column), widthStr, quote(padding))); - } - break; - - // split-to-rows - case "split-to-rows" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String regex = getNextToken(tokenizer, "\n", "separator", lineno); - transformed.add(String.format("split-to-rows %s %s;", col(column), quote(regex))); - } - break; - - // split-to-columns - case "split-to-columns" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String regex = getNextToken(tokenizer, "\n", "regex", lineno); - transformed.add(String.format("split-to-columns %s %s;", col(column), quote(regex))); - } - break; - - // parse-xml-to-json [] - case "parse-xml-to-json" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String depthOpt = getNextToken(tokenizer, "\n", command, "depth", lineno, true); - transformed.add(String.format("parse-xml-to-json %s %s;", col(column), depthOpt)); - } - break; - - // parse-as-xml - case "parse-as-xml" : { - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("parse-as-xml %s;", col(column))); - } - break; - - // xpath - case "xpath" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String destination = getNextToken(tokenizer, command, "destination", lineno); - String xpath = getNextToken(tokenizer, "\n", command, "xpath", lineno); - transformed.add(String.format("xpath %s %s %s;", col(column), col(destination), quote(xpath))); - } - break; - - // xpath-array - case "xpath-array" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String destination = getNextToken(tokenizer, command, "destination", lineno); - String xpath = getNextToken(tokenizer, "\n", command, "xpath", lineno); - transformed.add(String.format("xpath-array %s %s %s;", col(column), col(destination), quote(xpath))); - } - break; - - // flatten [,,,...] - case "flatten" : { - String cols = getNextToken(tokenizer, command, "columns", lineno); - transformed.add(String.format("flatten %s;", toColumArray(cols.split(",")))); - } - break; - - // copy [force] - case "copy" : { - String source = getNextToken(tokenizer, command, "source", lineno); - String destination = getNextToken(tokenizer, command, "destination", lineno); - String forceOpt = getNextToken(tokenizer, "\n", command, "force", lineno, true); - if (forceOpt == null || forceOpt.isEmpty()) { - transformed.add(String.format("copy %s %s;", col(source), col(destination))); - } else { - transformed.add(String.format("copy %s %s %s;", col(source), col(destination), forceOpt)); - } - } - break; - - // fill-null-or-empty - case "fill-null-or-empty" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String value = getNextToken(tokenizer, "\n", command, "fixed-value", lineno, false); - transformed.add(String.format("fill-null-or-empty %s %s;", col(column), quote(value))); - } - break; - - // cut-character - case "cut-character" : { - String source = getNextToken(tokenizer, command, "source", lineno); - String destination = getNextToken(tokenizer, command, "destination", lineno); - String range = getNextToken(tokenizer, command, "range", lineno); - transformed.add(String.format("cut-character %s %s %s;", col(source), col(destination), quote(range))); - } - break; - - // generate-uuid - case "generate-uuid" : { - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("generate-uuid %s;", col(column))); - } - break; - - // url-encode - case "url-encode" : { - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("url-encode %s;", col(column))); - } - break; - - // url-decode - case "url-decode" : { - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("url-decode %s;", col(column))); - } - break; - - // parse-as-log - case "parse-as-log" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String format = getNextToken(tokenizer, "\n", command, "format", lineno); - transformed.add(String.format("parse-as-log %s %s;", col(column), quote(format))); - } - break; - - // parse-as-date [] - case "parse-as-date" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String timezone = getNextToken(tokenizer, "\n", command, "timezone", lineno, true); - transformed.add(String.format("parse-as-date %s %s;", col(column), quote(timezone))); - } - break; - - // parse-as-simple-date - case "parse-as-simple-date" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String pattern = getNextToken(tokenizer, "\n", command, "format", lineno); - transformed.add(String.format("parse-as-simple-date %s %s;", col(column), quote(pattern))); - } - break; - - // diff-date - case "diff-date" : { - String column1 = getNextToken(tokenizer, command, "column1", lineno); - String column2 = getNextToken(tokenizer, command, "column2", lineno); - String destColumn = getNextToken(tokenizer, "\n", command, "destColumn", lineno); - transformed.add(String.format("diff-date %s %s %s;", col(column1), col(column2), col(destColumn))); - } - break; - - // keep [,]* - case "keep" : { - String columns = getNextToken(tokenizer, command, "columns", lineno); - transformed.add(String.format("keep %s;", toColumArray(columns.split(",")))); - } - break; - - // parse-as-hl7 [] - case "parse-as-hl7" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String depthOpt = getNextToken(tokenizer, "\n", command, "depth", lineno, true); - transformed.add(String.format("parse-as-hl7 %s %s;", col(column), depthOpt)); - } - break; - - // split-email - case "split-email" : { - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("split-email %s;", col(column))); - } - break; - - // swap - case "swap" : { - String column1 = getNextToken(tokenizer, command, "column1", lineno); - String column2 = getNextToken(tokenizer, command, "column2", lineno); - transformed.add(String.format("swap %s %s;", col(column1), col(column2))); - } - break; - - // hash [encode] - case "hash" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String algorithm = getNextToken(tokenizer, command, "algorithm", lineno); - String encodeOpt = getNextToken(tokenizer, "\n", command, "encode", lineno, true); - transformed.add(String.format("hash %s %s %s;", col(column), quote(algorithm), encodeOpt)); - } - break; - - // write-as-json-map - case "write-as-json-map" : { - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("write-as-json-map %s;", col(column))); - } - break; - - // write-as-json-object [[,] - case "write-as-json-object" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String columnsStr = getNextToken(tokenizer, "\n", command, "columns", lineno); - transformed.add(String.format("write-as-json-object %s %s;", col(column), - toColumArray(columnsStr.split(",")))); - } - break; - - // write-as-csv - case "write-as-csv" : { - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("write-as-csv %s;", col(column))); - } - break; - - // parse-as-avro-file - case "parse-as-avro-file": { - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("parse-as-avro-file %s;", col(column))); - } - break; - - // send-to-error - case "send-to-error": { - String condition = getNextToken(tokenizer, "\n", command, "condition", lineno); - transformed.add(String.format("send-to-error exp:{%s};", condition)); - } - break; - - // fail - case "fail": { - String condition = getNextToken(tokenizer, "\n", command, "condition", lineno); - transformed.add(String.format("fail exp:{%s};", condition)); - } - break; - - // text-distance - case "text-distance" : { - String method = getNextToken(tokenizer, command, "method", lineno); - String column1 = getNextToken(tokenizer, command, "column1", lineno); - String column2 = getNextToken(tokenizer, command, "column2", lineno); - String destination = getNextToken(tokenizer, command, "destination", lineno); - transformed.add(String.format("text-distance %s %s %s %s;", quote(method), col(column1), - col(column2), col(destination))); - } - break; - - // text-metric - case "text-metric" : { - String method = getNextToken(tokenizer, command, "method", lineno); - String column1 = getNextToken(tokenizer, command, "column1", lineno); - String column2 = getNextToken(tokenizer, command, "column2", lineno); - String destination = getNextToken(tokenizer, command, "destination", lineno); - transformed.add(String.format("text-metric %s %s %s %s;", quote(method), col(column1), - col(column2), col(destination))); - } - break; - - // catalog-lookup ICD-9|ICD-10 - case "catalog-lookup" : { - String type = getNextToken(tokenizer, command, "type", lineno); - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("catalog-lookup %s %s;", quote(type), col(column))); - } - break; - - // table-lookup - case "table-lookup" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String table = getNextToken(tokenizer, command, "table", lineno); - transformed.add(String.format("table-lookup %s %s;", col(column), quote(table))); - } - break; - - // stemming - case "stemming" : { - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("stemming %s;", col(column))); - } - break; - - // columns - case "columns-replace" : { - String sed = getNextToken(tokenizer, command, "sed-expression", lineno); - transformed.add(String.format("columns-replace %s;", quote(sed))); - } - break; - - // extract-regex-groups - case "extract-regex-groups" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String regex = getNextToken(tokenizer, command, "regex", lineno); - transformed.add(String.format("extract-regex-groups %s %s;", col(column), quote(regex))); - } - break; - - // split-url - case "split-url" : { - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("split-url %s;", col(column))); - } - break; - - // cleanse-column-names - case "cleanse-column-names" : { - transformed.add("cleanse-column-names;"); - } - break; - - // change-column-case - case "change-column-case" : { - String casing = getNextToken(tokenizer, command, "case", lineno); - transformed.add(String.format("change-column-case %s;", casing)); - } - break; - - // set-column - case "set-column" : { - String column = getNextToken(tokenizer, command, "column", lineno); - String expr = getNextToken(tokenizer, "\n", command, "expression", lineno); - transformed.add(String.format("set-column %s exp:{%s};", col(column), expr)); - } - break; - - // encode - case "encode" : { - String type = getNextToken(tokenizer, command, "type", lineno); - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("encode %s %s;", quote(type), col(column))); - } - break; - - // decode - case "decode" : { - String type = getNextToken(tokenizer, command, "type", lineno); - String column = getNextToken(tokenizer, command, "column", lineno); - transformed.add(String.format("decode %s %s;", quote(type), col(column))); - } - break; - - //trim - case "trim": { - String col = getNextToken(tokenizer, command, "col", lineno); - transformed.add(String.format("trim %s;", col(col))); - } - break; - - //ltrim - case "ltrim": { - String col = getNextToken(tokenizer, command, "col", lineno); - transformed.add(String.format("ltrim %s;", col(col))); - } - break; - - //rtrim - case "rtrim": { - String col = getNextToken(tokenizer, command, "col", lineno); - transformed.add(String.format("rtrim %s;", col(col))); - } - break; - - default: - if (!directive.endsWith(";") && !directive.startsWith("$")) { - transformed.add(directive + ";"); - } else { - transformed.add(directive); - } - break; - } - - lineno = lineno + 1; - } - return Joiner.on('\n').join(transformed); - } - - private static String quote(String value) { - if (value == null) { - return ""; - } - if ((value.startsWith("'") && value.endsWith("'")) || (value.startsWith("\"") && value.endsWith("\""))) { - return value; - } else if (value.contains("'")) { - return String.format("\"%s\"", value); - } - return String.format("'%s'", value); - } - - private static String col(String value) { - if (value.startsWith(":")) { - return value; - } - return String.format(":%s", value); - } - - private static String toColumArray(String[] columns) { - List array = new ArrayList<>(); - for (String column : columns) { - array.add(col(trim(column))); - } - return Joiner.on(",").join(array); - } - - // If there are more tokens, then it proceeds with parsing, else throws exception. - public static String getNextToken(StringTokenizer tokenizer, String directive, - String field, int lineno) throws DirectiveParseException { - return getNextToken(tokenizer, null, directive, field, lineno, false); - } - - public static String getNextToken(StringTokenizer tokenizer, String delimiter, - String directive, String field, int lineno) throws DirectiveParseException { - return getNextToken(tokenizer, delimiter, directive, field, lineno, false); - } - - public static String getNextToken(StringTokenizer tokenizer, String delimiter, - String directive, String field, int lineno, boolean optional) - throws DirectiveParseException { - String value = null; - if (tokenizer.hasMoreTokens()) { - if (delimiter == null) { - value = tokenizer.nextToken().trim(); - } else { - value = tokenizer.nextToken(delimiter).trim(); - } - } else { - if (!optional) { - throw new DirectiveParseException( - directive, String.format("Missing field '%s' at line number %d.", field, lineno)); - } - } - return value; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/parser/NoOpDirectiveContext.java b/wrangler-core/src/main/java/io/cdap/wrangler/parser/NoOpDirectiveContext.java deleted file mode 100644 index 2db9b0b3f..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/parser/NoOpDirectiveContext.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.wrangler.api.DirectiveContext; - -/** - * This class {@link NoOpDirectiveContext} is a pass through implementation of - * {@link DirectiveContext}. - */ -public class NoOpDirectiveContext implements DirectiveContext { - - /** - * Checks if the directive is aliased. - * - * @param directive to be checked for aliasing. - * @return true if the directive has an alias, false otherwise. - */ - @Override - public boolean hasAlias(String directive) { - return false; - } - - /** - * Returns the root directive aliasee - * @param directive - * @return - */ - @Override - public String getAlias(String directive) { - return directive; - } - - /** - * Checks if the directive is being excluded from being used. - * - * @param directive to be checked for exclusion. - * @return true if excluded, false otherwise. - */ - @Override - public boolean isExcluded(String directive) { - return false; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/parser/RecipeCompiler.java b/wrangler-core/src/main/java/io/cdap/wrangler/parser/RecipeCompiler.java deleted file mode 100644 index fa3811ea3..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/parser/RecipeCompiler.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.wrangler.api.CompileException; -import io.cdap.wrangler.api.CompileStatus; -import io.cdap.wrangler.api.Compiler; -import io.cdap.wrangler.api.RecipeSymbol; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.CharStreams; -import org.antlr.v4.runtime.CommonTokenStream; -import org.antlr.v4.runtime.tree.ParseTree; -import org.antlr.v4.tool.GrammarParserInterpreter; -import org.apache.twill.filesystem.Location; - -import java.io.InputStream; -import java.nio.file.Path; - -/** - * Class description here. - */ -public final class RecipeCompiler implements Compiler { - - @Override - public CompileStatus compile(String recipe) throws CompileException { - return compile(CharStreams.fromString(recipe)); - } - - @Override - public CompileStatus compile(Location location) throws CompileException { - try (InputStream is = location.getInputStream()) { - return compile(CharStreams.fromStream(is)); - } catch (Exception e) { - throw new CompileException(e.getMessage(), e); - } - } - - @Override - public CompileStatus compile(Path path) throws CompileException { - try { - return compile(CharStreams.fromPath(path)); - } catch (Exception e) { - throw new CompileException(e.getMessage(), e); - } - } - - private CompileStatus compile(CharStream stream) throws CompileException { - try { - SyntaxErrorListener errorListener = new SyntaxErrorListener(); - DirectivesLexer lexer = new DirectivesLexer(stream); - lexer.removeErrorListeners(); - lexer.addErrorListener(errorListener); - - DirectivesParser parser = new DirectivesParser(new CommonTokenStream(lexer)); - parser.removeErrorListeners(); - parser.addErrorListener(errorListener); - parser.setErrorHandler(new GrammarParserInterpreter.BailButConsumeErrorStrategy()); - parser.setBuildParseTree(true); - ParseTree tree = parser.statements(); - - if (errorListener.hasErrors()) { - return new CompileStatus(true, errorListener.iterator()); - } - - RecipeVisitor visitor = new RecipeVisitor(); - visitor.visit(tree); - RecipeSymbol symbol = visitor.getCompiledUnit(); - return new CompileStatus(symbol); - } catch (StringIndexOutOfBoundsException e) { - throw new CompileException("Issue in compiling directives"); - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/parser/RecipeVisitor.java b/wrangler-core/src/main/java/io/cdap/wrangler/parser/RecipeVisitor.java deleted file mode 100644 index ac35e7a5e..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/parser/RecipeVisitor.java +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.wrangler.api.LazyNumber; -import io.cdap.wrangler.api.RecipeSymbol; -import io.cdap.wrangler.api.SourceInfo; -import io.cdap.wrangler.api.Triplet; -import io.cdap.wrangler.api.parser.Bool; -import io.cdap.wrangler.api.parser.BoolList; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.ColumnNameList; -import io.cdap.wrangler.api.parser.DirectiveName; -import io.cdap.wrangler.api.parser.Expression; -import io.cdap.wrangler.api.parser.Identifier; -import io.cdap.wrangler.api.parser.Numeric; -import io.cdap.wrangler.api.parser.NumericList; -import io.cdap.wrangler.api.parser.Properties; -import io.cdap.wrangler.api.parser.Ranges; -import io.cdap.wrangler.api.parser.Text; -import io.cdap.wrangler.api.parser.TextList; -import io.cdap.wrangler.api.parser.Token; -import org.antlr.v4.runtime.ParserRuleContext; -import org.antlr.v4.runtime.misc.Interval; -import org.antlr.v4.runtime.tree.ParseTree; -import org.antlr.v4.runtime.tree.TerminalNode; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * This class RecipeVisitor implements the visitor pattern - * used during traversal of the AST tree. The ParserTree#Walker - * invokes appropriate methods as call backs with information about the node. - * - *

In order to understand what's being invoked, please look at the grammar file - * Directive.g4

. - * - *

This class exposes a getTokenGroups method for retrieving the - * RecipeSymbol after visiting. The RecipeSymbol represents - * all the TokenGroup for all directives in a recipe. Each directive - * will create a TokenGroup

- * - *

As the ParseTree is walking through the call graph, it generates - * one TokenGroup for each directive in the recipe. Each TokenGroup - * contains parsed Tokens for that directive along with more information like - * SourceInfo. A collection of TokenGroup consistutes a RecipeSymbol - * that is returned by this function.

- */ -public final class RecipeVisitor extends DirectivesBaseVisitor { - private RecipeSymbol.Builder builder = new RecipeSymbol.Builder(); - - /** - * Returns a RecipeSymbol for the recipe being parsed. This - * object has all the tokens that were successfully parsed along with source - * information for each directive in the recipe. - * - * @return An compiled object after parsing the recipe. - */ - public RecipeSymbol getCompiledUnit() { - return builder.build(); - } - - /** - * A Recipe is made up of Directives and Directives is made up of each individual - * Directive. This method is invoked on every visit to a new directive in the recipe. - */ - @Override - public RecipeSymbol.Builder visitDirective(DirectivesParser.DirectiveContext ctx) { - builder.createTokenGroup(getOriginalSource(ctx)); - return super.visitDirective(ctx); - } - - /** - * A Directive can include identifiers, this method extracts that token that is being - * identified as token of type Identifier. - */ - @Override - public RecipeSymbol.Builder visitIdentifier(DirectivesParser.IdentifierContext ctx) { - builder.addToken(new Identifier(ctx.Identifier().getText())); - return super.visitIdentifier(ctx); - } - - /** - * A Directive can include properties (which are a collection of key and value pairs), - * this method extracts that token that is being identified as token of type Properties. - */ - @Override - public RecipeSymbol.Builder visitPropertyList(DirectivesParser.PropertyListContext ctx) { - Map props = new HashMap<>(); - List properties = ctx.property(); - for (DirectivesParser.PropertyContext property : properties) { - String identifier = property.Identifier().getText(); - Token token; - if (property.number() != null) { - token = new Numeric(new LazyNumber(property.number().getText())); - } else if (property.bool() != null) { - token = new Bool(Boolean.valueOf(property.bool().getText())); - } else { - String text = property.text().getText(); - token = new Text(text.substring(1, text.length() - 1)); - } - props.put(identifier, token); - } - builder.addToken(new Properties(props)); - return builder; - } - - /** - * A Pragma is an instruction to the compiler to dynamically load the directives being specified - * from the DirectiveRegistry. These do not affect the data flow. - * - *

E.g. #pragma load-directives test1, test2, test3; will collect the tokens - * test1, test2 and test3 as dynamically loadable directives.

- */ - @Override - public RecipeSymbol.Builder visitPragmaLoadDirective(DirectivesParser.PragmaLoadDirectiveContext ctx) { - List identifiers = ctx.identifierList().Identifier(); - for (TerminalNode identifier : identifiers) { - builder.addLoadableDirective(identifier.getText()); - } - return builder; - } - - /** - * A Pragma version is a informational directive to notify compiler about the grammar that is should - * be using to parse the directives below. - */ - @Override - public RecipeSymbol.Builder visitPragmaVersion(DirectivesParser.PragmaVersionContext ctx) { - builder.addVersion(ctx.Number().getText()); - return builder; - } - - /** - * A Directive can include number ranges like start:end=value[,start:end=value]*. This - * visitor method allows you to collect all the number ranges and create a token type - * Ranges. - */ - @Override - public RecipeSymbol.Builder visitNumberRanges(DirectivesParser.NumberRangesContext ctx) { - List> output = new ArrayList<>(); - List ranges = ctx.numberRange(); - for (DirectivesParser.NumberRangeContext range : ranges) { - List numbers = range.Number(); - String text = range.value().getText(); - if (text.startsWith("'") && text.endsWith("'")) { - text = text.substring(1, text.length() - 1); - } - Triplet val = - new Triplet<>(new Numeric(new LazyNumber(numbers.get(0).getText())), - new Numeric(new LazyNumber(numbers.get(1).getText())), - text - ); - output.add(val); - } - builder.addToken(new Ranges(output)); - return builder; - } - - /** - * This visitor method extracts the custom directive name specified. The custom - * directives are specified with a bang (!) at the start. - */ - @Override - public RecipeSymbol.Builder visitEcommand(DirectivesParser.EcommandContext ctx) { - builder.addToken(new DirectiveName(ctx.Identifier().getText())); - return builder; - } - - /** - * A Directive can consist of column specifiers. These are columns that the directive - * would operate on. When a token of type column is visited, it would generate a token - * type of type ColumnName. - */ - @Override - public RecipeSymbol.Builder visitColumn(DirectivesParser.ColumnContext ctx) { - builder.addToken(new ColumnName(ctx.Column().getText().substring(1))); - return builder; - } - - /** - * A Directive can consist of text field. These type of fields are enclosed within - * a single-quote or a double-quote. This visitor method extracts the string value - * within the quotes and creates a token type Text. - */ - @Override - public RecipeSymbol.Builder visitText(DirectivesParser.TextContext ctx) { - String value = ctx.String().getText(); - builder.addToken(new Text(value.substring(1, value.length() - 1))); - return builder; - } - - /** - * A Directive can consist of numeric field. This visitor method extracts the - * numeric value Numeric. - */ - @Override - public RecipeSymbol.Builder visitNumber(DirectivesParser.NumberContext ctx) { - LazyNumber number = new LazyNumber(ctx.Number().getText()); - builder.addToken(new Numeric(number)); - return builder; - } - - /** - * A Directive can consist of Bool field. The Bool field is represented as - * either true or false. This visitor method extract the bool value into a - * token type Bool. - */ - @Override - public RecipeSymbol.Builder visitBool(DirectivesParser.BoolContext ctx) { - builder.addToken(new Bool(Boolean.valueOf(ctx.Bool().getText()))); - return builder; - } - - /** - * A Directive can include a expression or a condition to be evaluated. When - * such a token type is found, the visitor extracts the expression and generates - * a token type Expression to be added to the TokenGroup - */ - @Override - public RecipeSymbol.Builder visitCondition(DirectivesParser.ConditionContext ctx) { - int childCount = ctx.getChildCount(); - StringBuilder sb = new StringBuilder(); - for (int i = 1; i < childCount - 1; ++i) { - ParseTree child = ctx.getChild(i); - sb.append(child.getText()).append(" "); - } - builder.addToken(new Expression(sb.toString())); - return builder; - } - - /** - * A Directive has name and in the parsing context it's called a command. - * This visitor methods extracts the command and creates a toke type DirectiveName - */ - @Override - public RecipeSymbol.Builder visitCommand(DirectivesParser.CommandContext ctx) { - builder.addToken(new DirectiveName(ctx.Identifier().getText())); - return builder; - } - - /** - * This visitor methods extracts the list of columns specified. It creates a token - * type ColumnNameList to be added to TokenGroup. - */ - @Override - public RecipeSymbol.Builder visitColList(DirectivesParser.ColListContext ctx) { - List columns = ctx.Column(); - List names = new ArrayList<>(); - for (TerminalNode column : columns) { - names.add(column.getText().substring(1)); - } - builder.addToken(new ColumnNameList(names)); - return builder; - } - - /** - * This visitor methods extracts the list of numeric specified. It creates a token - * type NumericList to be added to TokenGroup. - */ - @Override - public RecipeSymbol.Builder visitNumberList(DirectivesParser.NumberListContext ctx) { - List numbers = ctx.Number(); - List numerics = new ArrayList<>(); - for (TerminalNode number : numbers) { - numerics.add(new LazyNumber(number.getText())); - } - builder.addToken(new NumericList(numerics)); - return builder; - } - - /** - * This visitor methods extracts the list of booleans specified. It creates a token - * type BoolList to be added to TokenGroup. - */ - @Override - public RecipeSymbol.Builder visitBoolList(DirectivesParser.BoolListContext ctx) { - List bools = ctx.Bool(); - List booleans = new ArrayList<>(); - for (TerminalNode bool : bools) { - booleans.add(Boolean.parseBoolean(bool.getText())); - } - builder.addToken(new BoolList(booleans)); - return builder; - } - - /** - * This visitor methods extracts the list of strings specified. It creates a token - * type StringList to be added to TokenGroup. - */ - @Override - public RecipeSymbol.Builder visitStringList(DirectivesParser.StringListContext ctx) { - List strings = ctx.String(); - List strs = new ArrayList<>(); - for (TerminalNode string : strings) { - String text = string.getText(); - strs.add(text.substring(1, text.length() - 1)); - } - builder.addToken(new TextList(strs)); - return builder; - } - - private SourceInfo getOriginalSource(ParserRuleContext ctx) { - int a = ctx.getStart().getStartIndex(); - int b = ctx.getStop().getStopIndex(); - Interval interval = new Interval(a, b); - String text = ctx.start.getInputStream().getText(interval); - int lineno = ctx.getStart().getLine(); - int column = ctx.getStart().getCharPositionInLine(); - return new SourceInfo(lineno, column, text); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/parser/SyntaxErrorListener.java b/wrangler-core/src/main/java/io/cdap/wrangler/parser/SyntaxErrorListener.java deleted file mode 100644 index 1f4e5bc46..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/parser/SyntaxErrorListener.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.wrangler.api.parser.SyntaxError; -import org.antlr.v4.runtime.BaseErrorListener; -import org.antlr.v4.runtime.NoViableAltException; -import org.antlr.v4.runtime.Parser; -import org.antlr.v4.runtime.RecognitionException; -import org.antlr.v4.runtime.Recognizer; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenStream; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -/** - * Class description here. - */ -public final class SyntaxErrorListener extends BaseErrorListener { - public int lastError = -1; - private List errors = new ArrayList<>(); - - @Override - public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, - String msg, RecognitionException e) { - - Parser parser = (Parser) recognizer; - String name = parser.getSourceName(); - TokenStream tokens = parser.getInputStream(); - - Token offSymbol = (Token) offendingSymbol; - int thisError = offSymbol.getTokenIndex(); - - String source = ""; - if (offSymbol != null) { - String charstream = offSymbol.getTokenSource().getInputStream().toString(); - String[] lines = charstream.split("\n"); - source = lines[line - 1]; - } - - if (offSymbol.getType() == -1 && thisError == tokens.size() - 1) { - if (e != null) { - if (e instanceof NoViableAltException) { - msg = "unexpected token found '" + ((NoViableAltException) e).getStartToken().getText() + "'"; - } - } - String message = "At line " + line + ":" + charPositionInLine + ": " + msg; - errors.add(new SyntaxError(line, charPositionInLine, message, source)); - return; - } - - String offSymName = DirectivesLexer.VOCABULARY.getDisplayName(offSymbol.getType()); - String message = "At line " + line + ":" + charPositionInLine + " at " + offSymName.toLowerCase() + ": " + msg; - -// StringBuilder sb = new StringBuilder(message); -// sb.append(", alternatives = {"); -// for (int idx = lastError + 1; idx <= thisError; idx++) { -// Token token = tokens.get(idx); -// if (token.getChannel() != Token.HIDDEN_CHANNEL) { -// sb.append(token.getText()).append(","); -// } -// } -// sb.append("}"); - lastError = thisError; - errors.add(new SyntaxError(line, charPositionInLine, message, source)); - } - - public boolean hasErrors() { - return errors.size() > 0; - } - - public Iterator iterator() { - return errors.iterator(); - } - -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/parser/UsageRegistry.java b/wrangler-core/src/main/java/io/cdap/wrangler/parser/UsageRegistry.java deleted file mode 100644 index cd9274af1..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/parser/UsageRegistry.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.wrangler.api.Executor; -import io.cdap.wrangler.api.annotations.Usage; -import org.reflections.Reflections; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * Registry of directive usages managed through this class. - */ -public final class UsageRegistry implements Serializable { - private static final Logger LOG = LoggerFactory.getLogger(UsageRegistry.class); - - /** - * A {@link UsageEntry} defines the information about the directives that are available. - */ - public class UsageEntry { - private final String directive; - private final String usage; - private final String description; - - public UsageEntry(String directive, String usage, String description) { - this.directive = directive; - this.usage = usage; - this.description = description; - } - - /** - * @return Name of the directive. - */ - public String getDirective() { - return directive; - } - - /** - * @return Usage of the directive. - */ - public String getUsage() { - return usage; - } - - /** - * @return Description for the directive. - */ - public String getDescription() { - return description; - } - } - - // Mapping of specification usages. - private final Map usages = new HashMap<>(); - - // Listing. - private final List usageList = new ArrayList<>(); - - public UsageRegistry() { - addDefaultDirectives(); - } - - /** - * Adds a class that extends from AbstractDirective to usage registry. - * - * @param classz representing an AbstractDirective implementation. - */ - public void addUsage(Class classz) { - Name name = classz.getAnnotation(Name.class); - Description description = classz.getAnnotation(Description.class); - Usage usage = classz.getAnnotation(Usage.class); - if (usage == null || name == null || description == null) { - return; - } - usages.put(name.value(), new UsageEntry(name.value(), usage.value(), description.value())); - usageList.add(new UsageEntry(name.value(), usage.value(), description.value())); - } - - /** - * Gets the usage of a directive. - * - * @param directive for which usage is returned. - * @return null if not found, else the usage. - */ - public String getUsage(String directive) { - if (usages.containsKey(directive)) { - return usages.get(directive).getUsage(); - } - return null; - } - - /** - * Gets the description of a directive. - * - * @param directive for which usage is returned. - * @return null if not found, else the description of usage. - */ - public String getDescription(String directive) { - if (usages.containsKey(directive)) { - return usages.get(directive).getDescription(); - } - return null; - } - - /** - * @return A map of directive to {@link UsageEntry}. - */ - public List getAll() { - return usageList; - } - - private void addUsage(String directive, String usage, String description) { - UsageEntry d = new UsageEntry(directive, usage, description); - usages.put(directive, d); - usageList.add(d); - } - - /** - * Loads all the default system directives that are available with the system. - */ - private void addDefaultDirectives() { - // Iterate through registry of steps to collect the - // directive and usage. - Reflections reflections = new Reflections("io.cdap.wrangler"); - Set> steps = reflections.getSubTypesOf(Executor.class); - for (Class step : steps) { - addUsage(step); - } - - // These are for directives that use other steps for executing. - // we add them exclusively - addUsage("set format", "set format csv ", - "[DEPRECATED] Parses the predefined column as CSV. Use 'parse-as-csv' instead."); - addUsage("format-unix-timestamp", "format-unix-timestamp ", - "Formats a UNIX timestamp using the specified format"); - addUsage("filter-row-if-not-matched", "filter-row-if-not-matched ", - "Filters rows if the regex does not match"); - addUsage("filter-row-if-false", "filter-row-if-false ", - "Filters rows if the condition evaluates to false"); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/registry/CompositeDirectiveRegistry.java b/wrangler-core/src/main/java/io/cdap/wrangler/registry/CompositeDirectiveRegistry.java deleted file mode 100644 index 5fbdd20a4..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/registry/CompositeDirectiveRegistry.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.registry; - -import com.google.common.collect.Iterables; -import io.cdap.cdap.api.artifact.ArtifactSummary; -import io.cdap.wrangler.api.DirectiveLoadException; -import io.cdap.wrangler.utils.ArtifactSummaryComparator; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import javax.annotation.Nullable; - -/** - * This class implements a Composition of multiple registries. - * - *

It implements the DirectiveRegistry interface. Search for a directives - * uses the order of the directives specified at the construction time.

- * - *

If the directive is not found in any of the registry, then a null - * is returned.

- */ -public final class CompositeDirectiveRegistry implements DirectiveRegistry { - private final DirectiveRegistry[] registries; - - public CompositeDirectiveRegistry(DirectiveRegistry ... registries) { - this.registries = registries; - } - - /** - * This method looks for the directive in all the registered registries. - * - *

The order of search is as specified by the collection order. Upon finding - * the first valid instance of directive, the DirectiveInfo is returned.

- * - * @param directive of the directive to be retrived from the registry. - * @return an instance of {@link DirectiveInfo} if found, else null. - */ - @Nullable - @Override - public DirectiveInfo get(String namespace, String directive) throws DirectiveLoadException { - for (DirectiveRegistry registry : registries) { - DirectiveInfo info = registry.get(namespace, directive); - if (info != null) { - return info; - } - } - return null; - } - - @Override - public void reload(String namespace) throws DirectiveLoadException { - for (DirectiveRegistry registry : registries) { - registry.reload(namespace); - } - } - - @Nullable - @Override - public ArtifactSummary getLatestWranglerArtifact() { - ArtifactSummary latestArtifact = null; - for (DirectiveRegistry registry : registries) { - ArtifactSummary artifact = registry.getLatestWranglerArtifact(); - if (artifact == null) { - continue; - } - if (latestArtifact == null) { - latestArtifact = artifact; - } else { - latestArtifact = ArtifactSummaryComparator.pickLatest(latestArtifact, artifact); - } - } - return latestArtifact; - } - - /** - * @return Returns an iterator to iterate through all the DirectiveInfo objects - * maintained within the registry. - */ - @Override - public Iterable list(String namespace) { - List> lists = new ArrayList<>(); - for (DirectiveRegistry registry : registries) { - lists.add(registry.list(namespace)); - } - return Iterables.concat(lists); - } - - /** - * Closes any resources acquired during initialization or otherwise. - */ - @Override - public void close() throws IOException { - for (DirectiveRegistry registry : registries) { - registry.close(); - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/registry/DirectiveInfo.java b/wrangler-core/src/main/java/io/cdap/wrangler/registry/DirectiveInfo.java deleted file mode 100644 index cf636beaf..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/registry/DirectiveInfo.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.registry; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.artifact.ArtifactId; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.annotations.Categories; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.parser.DirectiveClass; - -import javax.annotation.Nullable; - -/** - * This class DirectiveInfo contains information about each individual - * directive loaded. It also holds additional information like usage, description, - * scope,categories and the whether the directive is deprecated or not. - * - * Each instance of this class contains information for one directive. - * - * @see SystemDirectiveRegistry - * @see UserDirectiveRegistry - * @see CompositeDirectiveRegistry - * @since 3.0 - */ -public final class DirectiveInfo { - private final DirectiveClass directiveClass; - private final String description; - private final boolean deprecated; - private final String[] categories; - private final Class directive; - private volatile boolean definitionLoaded; - private UsageDefinition definition; - private volatile String usage; - - /** - * Creates a {@link DirectiveInfo} of the given class coming from the {@link DirectiveScope#SYSTEM} scope. - */ - public static DirectiveInfo fromSystem(Class cls) - throws InstantiationException, IllegalAccessException { - return new DirectiveInfo(DirectiveScope.SYSTEM, cls, null); - } - - /** - * Creates a {@link DirectiveInfo} of the given class coming from the {@link DirectiveScope#USER} scope. - */ - public static DirectiveInfo fromUser(Class cls, @Nullable ArtifactId artifactId) - throws InstantiationException, IllegalAccessException { - return new DirectiveInfo(DirectiveScope.USER, cls, artifactId); - } - - /** - * Initializes the class DirectiveInfo. - * - * @param scope of the directive. - * @param directive a class of type directive. - */ - private DirectiveInfo(DirectiveScope scope, Class directive, @Nullable ArtifactId artifactId) { - this.directive = directive; - this.directiveClass = new DirectiveClass(directive.getAnnotation(Name.class).value(), - directive.getName(), scope, artifactId); - - Description desc = directive.getAnnotation(Description.class); - if (desc == null) { - this.description = "No description specified for directive class '" + directive.getSimpleName() + "'"; - } else { - this.description = desc.value(); - } - - this.deprecated = directive.isAnnotationPresent(Deprecated.class); - - Categories category = directive.getAnnotation(Categories.class); - if (category == null) { - categories = new String[] { "default" }; - } else { - categories = category.categories(); - } - } - - /** - * @return a {@link DirectiveClass} which contains the class information of this directive. - */ - public DirectiveClass getDirectiveClass() { - return directiveClass; - } - - /** - * @return a Boolean type that indicates if Directive has been deprecated or not. - */ - public boolean deprecated() { - return deprecated; - } - - /** - * @return a Scope type specifying either USER or SYSTEM scope the directive is deployed in. - */ - public DirectiveScope scope() { - return directiveClass.getScope(); - } - - /** - * @return a String type specifying the name of the directive. - */ - public String name() { - return directiveClass.getName(); - } - - /** - * @return a String type containing the usage information of the directive. - */ - public String usage() { - if (usage != null) { - return usage; - } - UsageDefinition definition = definition(); - if (definition != null) { - usage = definition.toString(); - } else { - usage = "No definition available for directive '" + directive + "'"; - } - return usage; - } - - /** - * @return a String type providing the description for a directive. - */ - public String description() { - return description; - } - - /** - * @return a String type specifying the definition information of directive. - */ - public UsageDefinition definition() { - if (definitionLoaded) { - return definition; - } - - synchronized (this) { - if (definitionLoaded) { - return definition; - } - try { - definition = instance().define(); - } catch (IllegalAccessException | InstantiationException e) { - throw new IllegalStateException(e); - } - definitionLoaded = true; - } - return definition; - } - - /** - * @return a String array providing the categories the directive is associated with. - */ - public String[] categories() { - return categories; - } - - /** - * Creates a new instance of Directive. - * - * @return a Directive instance. - * @throws IllegalAccessException thrown when an application tries to reflectively create an instance - * @throws InstantiationException Thrown when an application tries to create an instance of a class - * using the {@code newInstance} method in class {@code Class} - */ - public Directive instance() throws IllegalAccessException, InstantiationException { - return directive.newInstance(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/registry/DirectiveRegistry.java b/wrangler-core/src/main/java/io/cdap/wrangler/registry/DirectiveRegistry.java deleted file mode 100644 index 6736cad3b..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/registry/DirectiveRegistry.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.registry; - -import io.cdap.cdap.api.artifact.ArtifactSummary; -import io.cdap.wrangler.api.DirectiveLoadException; - -import java.io.Closeable; -import javax.annotation.Nullable; - -/** - * A directive registry maintains a collection of directives either system provided or - * user provided. - * - *

The directive information is stored within the registry. The information - * includes name,class,usage and usage definition.

- * - * @see DirectiveInfo - */ -public interface DirectiveRegistry extends Closeable { - - /** - * List the directives in the specified namespace - * - * @param namespace the namespace to list from - * @return directives in the specified namespace - */ - Iterable list(String namespace); - - /** - * Given the name of the directive, returns the information related to the directive. - * - * @param namespace the namespace of the directive - * @param name of the directive to be retrieved from the registry. - * @return an instance of {@link DirectiveInfo} if found, else null. - */ - @Nullable - DirectiveInfo get(String namespace, String name) throws DirectiveLoadException; - - /** - * This method reloads the directives from the artifacts into the registry. - * Any implementation of this method should provide support for deletes, updates - * and additions. - * - * @param namespace the namespace to reload directives in - * @throws DirectiveLoadException thrown when there are any issues with loading - * directives into the registry. - */ - void reload(String namespace) throws DirectiveLoadException; - - /** - * Retrieve latest Wrangler transform artifact information - */ - @Nullable - ArtifactSummary getLatestWranglerArtifact(); -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/registry/DirectiveScope.java b/wrangler-core/src/main/java/io/cdap/wrangler/registry/DirectiveScope.java deleted file mode 100644 index e139b0d79..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/registry/DirectiveScope.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.registry; - -/** - * Enum to represent the scope of a directive - */ -public enum DirectiveScope { - SYSTEM, - USER -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/registry/SystemDirectiveRegistry.java b/wrangler-core/src/main/java/io/cdap/wrangler/registry/SystemDirectiveRegistry.java deleted file mode 100644 index d886e0017..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/registry/SystemDirectiveRegistry.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.registry; - -import com.google.common.annotations.VisibleForTesting; -import io.cdap.cdap.api.artifact.ArtifactSummary; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveLoadException; -import org.reflections.Reflections; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import javax.annotation.Nullable; - -/** - * This class is implementation of {@link DirectiveRegistry} for maintaining a registry - * of system provided directives. The directives maintained within this registry and - * present and loaded by the Classloader that is responsible for loading this - * class. - * - *

In order to load the directives, this class scans through all classes that - * implement the interface {@link Directive}. Instead of scanning entire JAR, it uses the - * package name a starting point for scanning the classes that implement the Directive - * interface.

- * - *

For every class found, this scan will create a instance of {@link DirectiveInfo} - * object and store it in the registry.

- * - * @see UserDirectiveRegistry - * @see CompositeDirectiveRegistry - * @see DirectiveInfo - */ -public final class SystemDirectiveRegistry implements DirectiveRegistry { - - public static final SystemDirectiveRegistry INSTANCE; - - static { - try { - INSTANCE = new SystemDirectiveRegistry(); - } catch (DirectiveLoadException e) { - // This shouldn't happen - throw new RuntimeException("Failed to load system directives", e); - } - } - - // This is the default package in which the directives are searched for. - private static final String PACKAGE = "io.cdap.directives"; - private final Map registry; - - @VisibleForTesting - SystemDirectiveRegistry() throws DirectiveLoadException { - this(new ArrayList<>()); - } - - /** - * This constructor uses the user provided namespace as starting pointing - * for scanning classes that implement the interface {@link Directive}. - * - * @param namespaces that is used as starting point for scanning classes. - * @throws DirectiveLoadException thrown if there are any issue loading the directive. - */ - public SystemDirectiveRegistry(List namespaces) throws DirectiveLoadException { - Map registry = new HashMap<>(); - namespaces.add(PACKAGE); - for (String namespace : namespaces) { - try { - Reflections reflections = new Reflections(namespace); - Set> system = reflections.getSubTypesOf(Directive.class); - for (Class directive : system) { - DirectiveInfo info = DirectiveInfo.fromSystem(directive); - registry.put(info.name(), info); - } - } catch (InstantiationException | IllegalAccessException e) { - throw new DirectiveLoadException(e.getMessage(), e); - } - } - this.registry = Collections.unmodifiableMap(registry); - } - - /** - * Given the name of the directive, returns the information related to the directive. - * - * @param name of the directive to be retrieved from the registry. - * @return an instance of {@link DirectiveInfo} if found, else null. - */ - @Override - public DirectiveInfo get(String namespace, String name) { - return get(name); - } - - /** - * Given the name of the directive, returns the information related to the directive. - * This method is specific to system registry as system registry does not need namespace - * parameter. - * - * @param name of the directive to be retrieved from the registry. - * @return an instance of {@link DirectiveInfo} if found, else null. - */ - public DirectiveInfo get(String name) { - return registry.get(name); - } - - @Override - public void reload(String namespace) { - // No-op. - } - - @Nullable - @Override - public ArtifactSummary getLatestWranglerArtifact() { - return null; - } - - /** - * @return Returns an iterator to iterate through all the DirectiveInfo objects - * maintained within the registry. - */ - @Override - public Iterable list(String namespace) { - return Collections.unmodifiableCollection(registry.values()); - } - - /** - * Closes any resources acquired during initialization or otherwise. - */ - @Override - public void close() { - // no-op - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/registry/UserDirectiveRegistry.java b/wrangler-core/src/main/java/io/cdap/wrangler/registry/UserDirectiveRegistry.java deleted file mode 100644 index 86cc271f0..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/registry/UserDirectiveRegistry.java +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.registry; - -import com.google.common.collect.MapDifference; -import com.google.common.collect.Maps; -import io.cdap.cdap.api.artifact.ArtifactId; -import io.cdap.cdap.api.artifact.ArtifactInfo; -import io.cdap.cdap.api.artifact.ArtifactManager; -import io.cdap.cdap.api.artifact.ArtifactSummary; -import io.cdap.cdap.api.artifact.ArtifactVersion; -import io.cdap.cdap.api.artifact.CloseableClassLoader; -import io.cdap.cdap.api.plugin.PluginClass; -import io.cdap.cdap.api.plugin.PluginConfigurer; -import io.cdap.cdap.api.plugin.PluginProperties; -import io.cdap.cdap.api.service.http.HttpServiceContext; -import io.cdap.cdap.api.service.worker.SystemAppTaskContext; -import io.cdap.cdap.etl.api.StageContext; -import io.cdap.cdap.etl.api.Transform; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveLoadException; -import io.cdap.wrangler.utils.ArtifactSummaryComparator; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.TreeMap; -import java.util.UUID; -import java.util.concurrent.ConcurrentSkipListMap; -import javax.annotation.Nullable; - -/** - * A User Executor Registry in a collection of user defined directives. The - * class UserDirectiveRegistry loads the directive either as an - * {@link ArtifactInfo} or through the use of the context in which it is running. - * - * This class provides two constructors for two different context in which the - * user defined directives are loaded. - * - *

One context is the service context in which construction of this object - * would result in investigating all the different artifacts that are of type - * {@link Directive#TYPE} and creating a classloader for the same. The classload is - * then used to create an instance of plugin, in this case it's a directive and - * extract all the DirectiveInfo from the instance of directive created.

- * - *

Second context is the Transform plugin, were the second constructor - * of this class in used to initialize. Initializing this class using StageContext - * provides a way to create an instance of the plugin. The name of the directive is - * used as the id for the plugin.

- * - * @see SystemDirectiveRegistry - * @see CompositeDirectiveRegistry - */ -public final class UserDirectiveRegistry implements DirectiveRegistry { - private static final String WRANGLER_TRANSFORM = "wrangler-transform"; - private static final String WRANGLER_PLUGIN = "Wrangler"; - private final Map> registry = new ConcurrentSkipListMap<>(); - private final List classLoaders = new ArrayList<>(); - private StageContext context; - private HttpServiceContext manager; - private ArtifactSummary wranglerArtifact; - private SystemAppTaskContext systemAppTaskContext; - - /** - * This constructor should be used when initializing the registry from Service. - * - *

Service context implements {@link ArtifactManager} interface so it should - * be readily assignable.

- * - *

Using the ArtifactManager, all the artifacts are inspected to check for - * the artifacts that contain plugins of type Directive#Type. For all those plugins, - * an instance of the plugin is created to extract the annotated and basic information.

- * - * @param manager an instance of {@link ArtifactManager}. - */ - public UserDirectiveRegistry(HttpServiceContext manager) { - this.manager = manager; - } - - /** - * This constructor is used when creating from remote task - * @param systemAppTaskContext {@link SystemAppTaskContext} - */ - public UserDirectiveRegistry(SystemAppTaskContext systemAppTaskContext) { - this.systemAppTaskContext = systemAppTaskContext; - } - - /** - * This constructor is used when constructing this object in the context of Transform. - * - * A instance of {@link StageContext} is passed to load plugin. Context allows - * loading the plugin from the repository. The directive name is used as the plugin id for - * loading the class. - * - * @param context of Stage in Transform. - */ - public UserDirectiveRegistry(StageContext context) { - this.context = context; - } - - /** - * This method provides information about the directive that is being requested. - * - *

First, the directive is checked for existence with the internal registry. - * If the directive does not exits in the registry and the context is not null, then - * it's attempted to be loaded as a user plugin. If it does not exist there a null is returned. - * But, if the plugin exists, then it's loaded and an entry is made into the registry.

- * - *

When invoked through a readable, each plugin is assigned a unique id. The unique - * id is generated during the configure phase of the plugin. Those ids are - * passed to initialize through the properties.

- * - * @param name of the directive to be retrived from the registry. - * @return an instance of {@link DirectiveInfo} if found, else null. - */ - @Override - public DirectiveInfo get(String namespace, String name) throws DirectiveLoadException { - DirectiveInfo directiveInfo = registry.getOrDefault(namespace, Collections.emptyMap()).get(name); - if (directiveInfo != null) { - return directiveInfo; - } - - Class directive; - try { - directive = getDirective(namespace, name); - if (directive == null) { - throw new DirectiveLoadException( - String.format("10-5 - Unable to load the user defined directive '%s'. " + - "Please check if the artifact containing UDD is still present.", name) - ); - } - // We don't know about the artifactId if the registry is empty, meaning the reload method was not called. - return DirectiveInfo.fromUser(directive, null); - } catch (IllegalArgumentException e) { - throw new DirectiveLoadException( - String.format("Directive '%s' not found. Check if the directive is spelled correctly or artifact " + - "containing the directive has been uploaded or you might be missing " + - "'#pragma load-directives %s;'", name, name), e - ); - } catch (Exception e) { - throw new DirectiveLoadException(e.getMessage(), e); - } - } - - @Nullable - private Class getDirective(String namespace, String name) throws IOException { - if (context != null) { - return context.loadPluginClass(name); - } - PluginConfigurer configurer = manager != null ? - manager.createPluginConfigurer(namespace) : systemAppTaskContext.createPluginConfigurer(namespace); - return configurer.usePluginClass(Directive.TYPE, name, UUID.randomUUID().toString(), - PluginProperties.builder().build()); - } - - @Override - public void reload(String namespace) throws DirectiveLoadException { - Map newRegistry = new TreeMap<>(); - Map currentRegistry = registry.computeIfAbsent(namespace, - k -> new ConcurrentSkipListMap<>()); - - ArtifactManager artifactManager = getArtifactManager(); - if (artifactManager != null) { - try { - List artifacts = artifactManager.listArtifacts(namespace); - ArtifactSummary latestWrangler = null; - for (ArtifactInfo artifact : artifacts) { - boolean isWranglerArtifact = artifact.getName().equalsIgnoreCase(WRANGLER_TRANSFORM); - Set plugins = artifact.getClasses().getPlugins(); - CloseableClassLoader artifactClassLoader = null; - - for (PluginClass plugin : plugins) { - if (Directive.TYPE.equalsIgnoreCase(plugin.getType())) { - if (artifactClassLoader == null) { - artifactClassLoader = artifactManager.createClassLoader(namespace, artifact, - getClass().getClassLoader()); - classLoaders.add(artifactClassLoader); - } - - Class cls = artifactClassLoader.loadClass(plugin.getClassName()); - if (!Directive.class.isAssignableFrom(cls)) { - throw new DirectiveLoadException("Plugin class " + plugin.getClassName() + " does not implement the " - + Directive.class.getName() + " interface"); - } - DirectiveInfo info = DirectiveInfo.fromUser((Class) cls, - new ArtifactId(artifact.getName(), - new ArtifactVersion(artifact.getVersion()), - artifact.getScope())); - newRegistry.put(info.name(), info); - } - - if (isWranglerArtifact && WRANGLER_PLUGIN.equals(plugin.getName()) - && Transform.PLUGIN_TYPE.equals(plugin.getType())) { - latestWrangler = Optional.ofNullable(latestWrangler) - .map(l -> ArtifactSummaryComparator.pickLatest(l, artifact)) - .orElse(artifact); - } - } - } - - if (latestWrangler != null) { - wranglerArtifact = latestWrangler; - } - - MapDifference difference = Maps.difference(currentRegistry, newRegistry); - - // Remove elements from the registry that are not present in newly loaded registry - for (String directive : difference.entriesOnlyOnLeft().keySet()) { - currentRegistry.remove(directive); - } - - // Update common directives - for (String directive : difference.entriesInCommon().keySet()) { - currentRegistry.put(directive, difference.entriesInCommon().get(directive)); - } - - // Update new directives - for (String directive : difference.entriesOnlyOnRight().keySet()) { - currentRegistry.put(directive, difference.entriesOnlyOnRight().get(directive)); - } - } catch (IllegalAccessException | InstantiationException | IOException | ClassNotFoundException e) { - throw new DirectiveLoadException(e.getMessage(), e); - } - } - } - - @Nullable - private ArtifactManager getArtifactManager() { - return manager != null ? manager : - systemAppTaskContext != null ? systemAppTaskContext.getArtifactManager() : null; - } - - @Nullable - @Override - public ArtifactSummary getLatestWranglerArtifact() { - return wranglerArtifact; - } - - /** - * @return Returns an iterator to iterate through all the DirectiveInfo objects - * maintained within the registry. - */ - @Override - public Iterable list(String namespace) { - Map namespaceDirectives = registry.getOrDefault(namespace, Collections.emptyMap()); - return namespaceDirectives.values(); - } - - /** - * Closes any resources acquired during initialization or otherwise. - */ - @Override - public void close() throws IOException { - for (CloseableClassLoader classLoader : classLoaders) { - classLoader.close(); - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Bernoulli.java b/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Bernoulli.java deleted file mode 100644 index 406f095d8..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Bernoulli.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.sampling; - -import com.google.common.base.Preconditions; - -import java.util.Iterator; -import java.util.Random; - -/** - * A sampler implementation built upon a Bernoulli trail. This sampler is used to sample with - * fraction and without replacement. Whether an element is sampled or not is determined by a - * Bernoulli experiment. - * - * @param The type of sample. - * @see - * Gap Sampling - */ -public class Bernoulli extends Sampler { - - private final double fraction; - private final Random random; - - // THRESHOLD is a tuning parameter for choosing sampling method according to the fraction. - private static final double THRESHOLD = 0.33; - - /** - * Create a Bernoulli sampler with sample fraction and default random number generator. - * - * @param fraction Sample fraction, aka the Bernoulli sampler possibility. - */ - public Bernoulli(double fraction) { - this(fraction, new XORShiftRNG()); - } - - /** - * Create a Bernoulli sampler with sample fraction and random number generator seed. - * - * @param fraction Sample fraction, aka the Bernoulli sampler possibility. - * @param seed Random number generator seed. - */ - public Bernoulli(double fraction, long seed) { - this(fraction, new XORShiftRNG(seed)); - } - - /** - * Create a Bernoulli sampler with sample fraction and random number generator. - * - * @param fraction Sample fraction, aka the Bernoulli sampler possibility. - * @param random The random number generator. - */ - public Bernoulli(double fraction, Random random) { - Preconditions.checkArgument(fraction >= 0 && fraction <= 1.0d, "Fraction must between [0, 1]."); - this.fraction = fraction; - this.random = random; - } - - /** - * Sample the input elements, for each input element, take a Bernoulli trail for sampling. - * - * @param input Elements to be sampled. - * @return The sampled result which is lazy computed upon input elements. - */ - @Override - public Iterator sample(final Iterator input) { - if (fraction == 0) { - return emptyIterable; - } - - return new SamplingIterator() { - T current = null; - - @Override - public boolean hasNext() { - if (current == null) { - current = getNextSampledElement(); - } - - return current != null; - } - - @Override - public T next() { - if (current == null) { - return getNextSampledElement(); - } else { - T result = current; - current = null; - - return result; - } - } - - private T getNextSampledElement() { - if (fraction <= THRESHOLD) { - double rand = random.nextDouble(); - double u = Math.max(rand, EPSILON); - int gap = (int) (Math.log(u) / Math.log(1 - fraction)); - int elementCount = 0; - if (input.hasNext()) { - T element = input.next(); - while (input.hasNext() && elementCount < gap) { - element = input.next(); - elementCount++; - } - if (elementCount < gap) { - return null; - } else { - return element; - } - } else { - return null; - } - } else { - while (input.hasNext()) { - T element = input.next(); - - if (random.nextDouble() <= fraction) { - return element; - } - } - return null; - } - } - }; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/MathUtils.java b/wrangler-core/src/main/java/io/cdap/wrangler/sampling/MathUtils.java deleted file mode 100644 index a1339ccec..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/MathUtils.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.sampling; - -/** - * Collection of simple mathematical routines. - */ -public final class MathUtils { - - /** - * This function hashes an integer value. - * - * It is crucial to use different hash functions to partition data and the internal partitioning of - * data structures. This hash function is intended for partitioning across machines. - * - * @param code The integer to be hashed. - * @return The non-negative hash code for the integer. - */ - public static int murmurHash(int code) { - code *= 0xcc9e2d51; - code = Integer.rotateLeft(code, 15); - code *= 0x1b873593; - - code = Integer.rotateLeft(code, 13); - code = code * 5 + 0xe6546b64; - - code ^= 4; - code = bitMix(code); - - if (code >= 0) { - return code; - } else if (code != Integer.MIN_VALUE) { - return -code; - } else { - return 0; - } - } - - /** - * Bit-mixing for pseudo-randomization of integers (e.g., to guard against bad hash functions). Implementation is - * from Murmur's 32 bit finalizer. - * - * @param in the input value - * @return the bit-mixed output value - */ - public static int bitMix(int in) { - in ^= in >>> 16; - in *= 0x85ebca6b; - in ^= in >>> 13; - in *= 0xc2b2ae35; - in ^= in >>> 16; - return in; - } - - /** - * Prevent Instantiation through private constructor. - */ - private MathUtils() {} -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Poisson.java b/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Poisson.java deleted file mode 100644 index 7d253b6a4..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Poisson.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.sampling; - -import com.google.common.base.Preconditions; -import org.apache.commons.math3.distribution.PoissonDistribution; - -import java.util.Iterator; -import java.util.Random; - -/** - * A sampler implementation based on the Poisson Distribution. While sampling elements with fraction - * and replacement, the selected number of each element follows a given poisson distribution. - * - * @param The type of sample. - * @see - * https://en.wikipedia.org/wiki/Poisson_distribution - * @see - * Gap Sampling - */ -public class Poisson extends Sampler { - - private PoissonDistribution poissonDistribution; - private final double fraction; - private final Random random; - - // THRESHOLD is a tuning parameter for choosing sampling method according to the fraction. - private static final double THRESHOLD = 0.4; - - /** - * Create a poisson sampler which can sample elements with replacement. - * - * @param fraction The expected count of each element. - * @param seed Random number generator seed for internal PoissonDistribution. - */ - public Poisson(double fraction, long seed) { - Preconditions.checkArgument(fraction >= 0, "fraction should be positive."); - this.fraction = fraction; - if (this.fraction > 0) { - this.poissonDistribution = new PoissonDistribution(fraction); - this.poissonDistribution.reseedRandomGenerator(seed); - } - this.random = new XORShiftRNG(seed); - } - - /** - * Create a poisson sampler which can sample elements with replacement. - * - * @param fraction The expected count of each element. - */ - public Poisson(double fraction) { - Preconditions.checkArgument(fraction >= 0, "fraction should be non-negative."); - this.fraction = fraction; - if (this.fraction > 0) { - this.poissonDistribution = new PoissonDistribution(fraction); - } - this.random = new XORShiftRNG(); - } - - /** - * Sample the input elements, for each input element, generate its count following a poisson - * distribution. - * - * @param input Elements to be sampled. - * @return The sampled result which is lazy computed upon input elements. - */ - @Override - public Iterator sample(final Iterator input) { - if (fraction == 0) { - return emptyIterable; - } - - return new SamplingIterator() { - T currentElement; - int currentCount = 0; - - @Override - public boolean hasNext() { - if (currentCount > 0) { - return true; - } else { - samplingProcess(); - if (currentCount > 0) { - return true; - } else { - return false; - } - } - } - - @Override - public T next() { - if (currentCount <= 0) { - samplingProcess(); - } - currentCount--; - return currentElement; - } - - public int poisson_ge1(double p) { - // sample 'k' from Poisson(p), conditioned to k >= 1. - double q = Math.pow(Math.E, -p); - // simulate a poisson trial such that k >= 1. - double t = q + (1 - q) * random.nextDouble(); - int k = 1; - // continue standard poisson generation trials. - t = t * random.nextDouble(); - while (t > q) { - k++; - t = t * random.nextDouble(); - } - return k; - } - - private void skipGapElements(int num) { - // skip the elements that occurrence number is zero. - int elementCount = 0; - while (input.hasNext() && elementCount < num) { - currentElement = input.next(); - elementCount++; - } - } - - private void samplingProcess() { - if (fraction <= THRESHOLD) { - double u = Math.max(random.nextDouble(), EPSILON); - int gap = (int) (Math.log(u) / -fraction); - skipGapElements(gap); - if (input.hasNext()) { - currentElement = input.next(); - currentCount = poisson_ge1(fraction); - } - } else { - while (input.hasNext()) { - currentElement = input.next(); - currentCount = poissonDistribution.sample(); - if (currentCount > 0) { - break; - } - } - } - } - }; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Reservoir.java b/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Reservoir.java deleted file mode 100644 index 7cba47caa..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Reservoir.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.sampling; - -import com.google.common.base.Preconditions; - -import java.util.Iterator; -import java.util.PriorityQueue; -import java.util.Random; - -/** - * A simple in memory implementation of Reservoir Sampling without replacement, and with only one - * pass through the input iteration whose size is unpredictable. The basic idea behind this sampler - * implementation is to generate a random number for each input element as its weight, select the - * top K elements with max weight. As the weights are generated randomly, so are the selected - * top K elements. In the first phase, we generate random numbers as the weights for each element and - * select top K elements as the output of each partitions. - * - * @param The type of the sampler. - */ -public class Reservoir extends Sampler { - private final int numSamples; - private final Random random; - - /** - * Create a new sampler with reservoir size and a supplied random number generator. - * - * @param numSamples Maximum number of samples to retain in reservoir, must be non-negative. - * @param random Instance of random number generator for sampling. - */ - public Reservoir(int numSamples, Random random) { - Preconditions.checkArgument(numSamples >= 0, "numSamples should be non-negative."); - this.numSamples = numSamples; - this.random = random; - } - - /** - * Create a new sampler with reservoir size and a default random number generator. - * - * @param numSamples Maximum number of samples to retain in reservoir, must be non-negative. - */ - public Reservoir(int numSamples) { - this(numSamples, new XORShiftRNG()); - } - - /** - * Create a new sampler with reservoir size and the seed for random number generator. - * - * @param numSamples Maximum number of samples to retain in reservoir, must be non-negative. - * @param seed Random number generator seed. - */ - public Reservoir(int numSamples, long seed) { - this(numSamples, new XORShiftRNG(seed)); - } - - @Override - public Iterator sample(Iterator input) { - if (numSamples == 0) { - return emptyIterable; - } - - // This queue holds fixed number elements with the top K weight for current partition. - PriorityQueue> queue = new PriorityQueue<>(numSamples); - int index = 0; - IntermediateSample smallest = null; - while (input.hasNext()) { - T element = input.next(); - if (index < numSamples) { - // Fill the queue with first K elements from input. - queue.add(new IntermediateSample(random.nextDouble(), element)); - smallest = queue.peek(); - } else { - double rand = random.nextDouble(); - // Remove the element with the smallest weight, and append current element into the queue. - if (rand > smallest.getWeight()) { - queue.remove(); - queue.add(new IntermediateSample(rand, element)); - smallest = queue.peek(); - } - } - index++; - } - - final Iterator> itr = queue.iterator(); - return new Iterator() { - @Override - public boolean hasNext() { - return itr.hasNext(); - } - - @Override - public T next() { - return itr.next().getElement(); - } - - @Override - public void remove() { - itr.remove(); - } - }; - } - - /** - * An intermediate sample - * - * @param the element type - */ - public static class IntermediateSample implements Comparable> { - private double weight; - private T element; - - public IntermediateSample(double weight, T element) { - this.weight = weight; - this.element = element; - } - - public double getWeight() { - return weight; - } - - public T getElement() { - return element; - } - - @Override - public int compareTo(IntermediateSample other) { - return this.weight >= other.getWeight() ? 1 : -1; - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Sampler.java b/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Sampler.java deleted file mode 100644 index 0228f0da1..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/Sampler.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.sampling; - -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.util.Iterator; - -/** - * This class is interface for implementing Sampler. It provides - * a set of data selected from a statistical population by the defined implementation. - * - * It helps create random samples of data easily. - * - * @param type of element to sample - */ -@PublicEvolving -public abstract class Sampler { - protected static final double EPSILON = 1e-5; - - protected final Iterator emptyIterable = new SamplingIterator() { - @Override - public boolean hasNext() { - return false; - } - - @Override - public T next() { - return null; - } - }; - - /** - * Randomly sample the elements from input in sequence, and return the result iterator. - * - * @param input Scope data - * @return The sample result. - */ - public abstract Iterator sample(Iterator input); -} - diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/SamplingIterator.java b/wrangler-core/src/main/java/io/cdap/wrangler/sampling/SamplingIterator.java deleted file mode 100644 index 7dc14a9f9..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/SamplingIterator.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.sampling; - -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.util.Iterator; - -/** - * A simple abstract iterator which implements the remove method as unsupported operation. - * - * @param The type of iterator data. - */ -@PublicEvolving -public abstract class SamplingIterator implements Iterator { - @Override - public void remove() { - throw new UnsupportedOperationException("This operation is not supported."); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/XORShiftRNG.java b/wrangler-core/src/main/java/io/cdap/wrangler/sampling/XORShiftRNG.java deleted file mode 100644 index 45ddea578..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/sampling/XORShiftRNG.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.sampling; - -import io.cdap.wrangler.api.annotations.Public; - -import java.util.Random; - -/** - * Implement a random number generator based on the XORShift algorithm discovered by George Marsaglia. - * This RNG is observed 4.5 times faster than {@link java.util.Random} in benchmark, with the cost - * that abandon thread-safety. So it's recommended to create a new {@link XORShiftRNG} for each - * thread. - * - * @see XORShift Algorithm Paper - */ -@Public -public class XORShiftRNG extends Random { - - private static final long serialVersionUID = -825722456120842841L; - private long seed; - - public XORShiftRNG() { - this(System.nanoTime()); - } - - public XORShiftRNG(long input) { - super(input); - this.seed = MathUtils.murmurHash((int) input) ^ MathUtils.murmurHash((int) (input >>> 32)); - } - - /** - * All other methods like nextInt()/nextDouble()... depends on this, so we just need to overwrite - * this. - * - * @param bits Random bits - * @return The next pseudorandom value from this random number - * generator's sequence - */ - @Override - public int next(int bits) { - long nextSeed = seed ^ (seed << 21); - nextSeed ^= (nextSeed >>> 35); - nextSeed ^= (nextSeed << 4); - seed = nextSeed; - return (int) (nextSeed & ((1L << bits) - 1)); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/schema/DirectiveOutputSchemaGenerator.java b/wrangler-core/src/main/java/io/cdap/wrangler/schema/DirectiveOutputSchemaGenerator.java deleted file mode 100644 index a5e3ddc6f..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/schema/DirectiveOutputSchemaGenerator.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.schema; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.SchemaResolutionContext; -import io.cdap.wrangler.utils.RecordConvertorException; -import io.cdap.wrangler.utils.SchemaConverter; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; - -/** - * This class can be used to generate the output schema for the output data of a directive. It maintains a map of - * output fields present across all output rows after applying a directive. This map is used to generate the schema - * if the directive does not return a custom output schema. - */ -public class DirectiveOutputSchemaGenerator { - private final SchemaConverter schemaGenerator; - private final Map outputFieldMap; - private final Directive directive; - - public DirectiveOutputSchemaGenerator(Directive directive, SchemaConverter schemaGenerator) { - this.directive = directive; - this.schemaGenerator = schemaGenerator; - outputFieldMap = new LinkedHashMap<>(); - } - - /** - * Method to add new fields from the given output to the map of fieldName --> value maintained for schema generation. - * A value is added to the map only if it is absent (or) if the existing value is null and given value is non-null - * @param output list of output {@link Row}s after applying directive. - */ - public void addNewOutputFields(List output) { - for (Row row : output) { - for (Pair field : row.getFields()) { - String fieldName = field.getFirst(); - Object fieldValue = field.getSecond(); - if (outputFieldMap.containsKey(fieldName)) { - // If existing value is null, override with this non-null value - if (fieldValue != null && outputFieldMap.get(fieldName) == null) { - outputFieldMap.put(fieldName, fieldValue); - } - } else { - outputFieldMap.put(fieldName, fieldValue); - } - } - } - } - - /** - * Method to get the output schema of the directive. Returns a generated schema based on maintained map of fields - * only if directive does not return a custom output schema. - * @param context input {@link Schema} of the data before applying the directive - * @return {@link Schema} corresponding to the output data - */ - public Schema getDirectiveOutputSchema(SchemaResolutionContext context) throws RecordConvertorException { - Schema directiveOutputSchema = directive.getOutputSchema(context); - return directiveOutputSchema != null ? directiveOutputSchema : - generateDirectiveOutputSchema(context.getInputSchema()); - } - - // Given the schema from previous step and output of current directive, generates the directive output schema. - private Schema generateDirectiveOutputSchema(Schema inputSchema) - throws RecordConvertorException { - List outputFields = new ArrayList<>(); - for (Map.Entry field : outputFieldMap.entrySet()) { - String fieldName = field.getKey(); - Object fieldValue = field.getValue(); - - Schema existing = inputSchema.getField(fieldName) != null ? inputSchema.getField(fieldName).getSchema() : null; - Schema generated = fieldValue != null && !isValidSchemaForValue(existing, fieldValue) ? - schemaGenerator.getSchema(fieldValue, fieldName) : null; - - if (generated != null) { - outputFields.add(Schema.Field.of(fieldName, generated)); - } else if (existing != null) { - if (!existing.getType().equals(Schema.Type.NULL) && !existing.isNullable()) { - existing = Schema.nullableOf(existing); - } - outputFields.add(Schema.Field.of(fieldName, existing)); - } else { - outputFields.add(Schema.Field.of(fieldName, Schema.of(Schema.Type.NULL))); - } - } - if (outputFields.isEmpty()) { - return null; - } - return Schema.recordOf("output", outputFields); - } - - // Checks whether the provided input schema is of valid type for given object - private boolean isValidSchemaForValue(@Nullable Schema schema, Object value) throws RecordConvertorException { - if (schema == null) { - return false; - } - Schema generated = schemaGenerator.getSchema(value, "temp_field_name"); - generated = generated.isNullable() ? generated.getNonNullable() : generated; - schema = schema.isNullable() ? schema.getNonNullable() : schema; - return generated.getLogicalType() == schema.getLogicalType() && generated.getType() == schema.getType(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/schema/DirectiveSchemaResolutionContext.java b/wrangler-core/src/main/java/io/cdap/wrangler/schema/DirectiveSchemaResolutionContext.java deleted file mode 100644 index 9c4c702fb..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/schema/DirectiveSchemaResolutionContext.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.schema; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.SchemaResolutionContext; - -/** - * Context to pass information related to getting or generating the output schema of a {@link Directive} - */ -public class DirectiveSchemaResolutionContext implements SchemaResolutionContext { - private final Schema inputSchema; - public DirectiveSchemaResolutionContext(Schema inputSchema) { - this.inputSchema = inputSchema; - } - - @Override - public Schema getInputSchema() { - return inputSchema; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/schema/TransientStoreKeys.java b/wrangler-core/src/main/java/io/cdap/wrangler/schema/TransientStoreKeys.java deleted file mode 100644 index da89fdb3c..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/schema/TransientStoreKeys.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.schema; - -/** - * TransientStoreKeys for storing Workspace schema in TransientStore - * NOTE: Please add any needed value in {@link io.cdap.wrangler.api.RemoteDirectiveResponse} - */ -public final class TransientStoreKeys { - public static final String INPUT_SCHEMA = "ws_input_schema"; - public static final String OUTPUT_SCHEMA = "ws_output_schema"; - - private TransientStoreKeys() { - throw new AssertionError("Cannot instantiate a static utility class."); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/statistics/BasicStatistics.java b/wrangler-core/src/main/java/io/cdap/wrangler/statistics/BasicStatistics.java deleted file mode 100644 index ef0482979..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/statistics/BasicStatistics.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.statistics; - -import io.cdap.wrangler.api.Row; -import io.dataapps.chlorine.finder.FinderEngine; - -import java.util.List; -import java.util.Map; - -/** - * Basic class to compute summary from a list of rows - */ -public class BasicStatistics implements Statistics { - // default time out be 10s - private static final long TIME_OUT_MILLIS = 10000; - private final FinderEngine engine; - - public BasicStatistics() throws Exception { - engine = new FinderEngine("wrangler-finder.xml", true, false); - } - - @Override - public Row aggregate(List rows) { - ColumnMetric types = new ColumnMetric(); - ColumnMetric stats = new ColumnMetric(); - - long startTime = System.currentTimeMillis(); - Double count = new Double(0); - for (Row row : rows) { - ++count; - for (int i = 0; i < row.width(); ++i) { - String column = row.getColumn(i); - Object object = row.getValue(i); - - if (object == null) { - stats.increment(column, "null"); - } else { - stats.increment(column, "non-null"); - } - - if (object instanceof String) { - String value = ((String) object); - if (value.isEmpty()) { - stats.increment(column, "empty"); - } else { - // this call is very expensive for string > 2000 characters, took seconds to return - Map> finds = engine.findWithType(value); - for (String find : finds.keySet()) { - types.increment(column, find); - } - // TODO: this is a workaround for CDAP-18262, to proper fix we should revisit this computation logic - if (System.currentTimeMillis() - startTime > TIME_OUT_MILLIS) { - break; - } - } - } - } - } - - Row rowTypes = new Row(); - for (String column : types.getColumns()) { - rowTypes.add(column, types.percentage(column, count)); - } - - Row rowStats = new Row(); - for (String column : stats.getColumns()) { - rowStats.add(column, stats.percentage(column, count)); - } - - Row row = new Row(); - row.add("types", rowTypes); - row.add("stats", rowStats); - row.add("total", count); - - return row; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/statistics/ColumnMetric.java b/wrangler-core/src/main/java/io/cdap/wrangler/statistics/ColumnMetric.java deleted file mode 100644 index 2fb81e885..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/statistics/ColumnMetric.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.statistics; - -import io.cdap.wrangler.api.Pair; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -/** - * This class stores and manages {@link Measurements} for each column. - */ -public final class ColumnMetric { - private final Map measures = new TreeMap<>(); - - /** - * Increments a measure counter for a column. - * - * @param column name of the column - * @param measure to be incremented for a column. - */ - public void increment(String column, String measure) { - Measurements metric; - if (measures.containsKey(column)) { - metric = measures.get(column); - } else { - metric = new Measurements(); - } - metric.increment(measure); - measures.put(column, metric); - } - - /** - * Sets the measure value for a column. - * - * @param column name of the column. - * @param measure name of the measure that needs to be set for the column. - * @param value to be set for the measure. - */ - public void set(String column, String measure, double value) { - Measurements metric; - if (measures.containsKey(column)) { - metric = measures.get(column); - } else { - metric = new Measurements(); - } - metric.set(measure, value); - measures.put(column, metric); - } - - /** - * @return Set of columns tracked. - */ - public Set getColumns() { - return measures.keySet(); - } - - /** - * Computes percentages for each measure for a given column. - * - * @param column name of the column. - * @param sum denonminator for calculating percentages. - * @return List of measures and their respective percentages. - */ - public List> percentage(String column, Double sum) { - if (measures.containsKey(column)) { - return measures.get(column).percentage(sum); - } - return new ArrayList<>(); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/statistics/Measurements.java b/wrangler-core/src/main/java/io/cdap/wrangler/statistics/Measurements.java deleted file mode 100644 index 1797646d7..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/statistics/Measurements.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.statistics; - -import io.cdap.wrangler.api.Pair; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -/** - * This class manages different measurements. - */ -public final class Measurements { - // Measurement name to it's value mapping. - private final Map metrics = new TreeMap<>(); - - /** - * Mutable Double for faster updates and checks. - */ - private class MutableDouble { - private double value = 0.0f; - - /** - * Constructor to initialize with starting value. - * @param value to be set. - */ - MutableDouble(double value) { - this.value = value; - } - - /** - * Increments the value associated with {@link MutableDouble} - */ - public void increment() { - ++value; - } - - /** - * @return value stored. - */ - public double get() { - return value; - } - } - - /** - * Increment the {@link MutableDouble} value. - * - * @param name name of the measure who's value need to be incremented. - */ - public void increment(String name) { - MutableDouble value = metrics.get(name); - if (value != null) { - value.increment(); - } else { - metrics.put(name, new MutableDouble(1)); - } - } - - /** - * Sets the measure value. - * - * @param name of the measure. - * @param value to set for the measure. - */ - public void set(String name, Double value) { - metrics.put(name, new MutableDouble(value)); - } - - /** - * Computes percentages for each of the measures managed by this instance. - * - * @param sum denominator for computing the percentages. - * @return List of measures and associated percentages. - */ - public List> percentage(Double sum) { - List> percentages = new ArrayList<>(); - for (Map.Entry entry : metrics.entrySet()) { - double percentage = entry.getValue().get() / sum; - if (percentage > 100.0) { - percentage = 100; - } - percentages.add(new Pair<>(entry.getKey(), percentage)); - } - return percentages; - } -} - - - diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/statistics/Statistics.java b/wrangler-core/src/main/java/io/cdap/wrangler/statistics/Statistics.java deleted file mode 100644 index 9559655a2..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/statistics/Statistics.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.statistics; - -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.util.List; - -/** - * Interface for calculating metrics over the records being processed. - */ -@PublicEvolving -public interface Statistics { - /** - * Aggregates statistics for all the rows. - * - * @param rows to be aggregated. - * @return Summary in the form of {@link Row} - */ - Row aggregate(List rows); -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ArithmeticOperations.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/ArithmeticOperations.java deleted file mode 100644 index 5251a21d9..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ArithmeticOperations.java +++ /dev/null @@ -1,552 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.utils; -import io.cdap.wrangler.api.DirectiveExecutionException; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.RoundingMode; - -/** - * Cross-column operations for arithmetic - */ -public class ArithmeticOperations { - // The Number types upon which arithmetic operations can be performed, in order of increasing generality - private enum NumberType { - SHORT(0), - INTEGER(1), - LONG(2), - FLOAT(3), - DOUBLE(4), - BIGDECIMAL(5); - - private final int priority; - - NumberType(int priority) { - this.priority = priority; - } - - public int getPriority() { - return priority; - } - } - - /** - * Return the "largest" (e.g. most general) type of the given numbers. - * Used for operations applied to columns of multiple types, in order to determine the type of the output column. - * The order of increasing generality is Short < Integer < Long < Float < Double < BigDecimal. - * Returns null if any input is null. - * Throws an error if any input of type Byte is given (this is not currently supported for arithmetic ops). - */ - private static NumberType getOutputType(Number... nums) throws DirectiveExecutionException { - NumberType outputType = NumberType.SHORT; - for (Number num : nums) { - if (num instanceof Byte) { - throw new DirectiveExecutionException("Input cannot be of type 'Byte'."); - } else if (num == null) { - return null; - } else if (num instanceof Integer && NumberType.INTEGER.getPriority() > outputType.getPriority()) { - outputType = NumberType.INTEGER; - } else if (num instanceof Long && NumberType.LONG.getPriority() > outputType.getPriority()) { - outputType = NumberType.LONG; - } else if (num instanceof Float && NumberType.FLOAT.getPriority() > outputType.getPriority()) { - outputType = NumberType.FLOAT; - } else if (num instanceof Double && NumberType.DOUBLE.getPriority() > outputType.getPriority()) { - outputType = NumberType.DOUBLE; - } else if (num instanceof BigDecimal) { - outputType = NumberType.BIGDECIMAL; - } - } - return outputType; - } - - /** - * Utility function to convert a number type to BigDecimal - */ - private static BigDecimal numberToBigDecimal(Number num) { - return num instanceof BigDecimal ? (BigDecimal) num : new BigDecimal(num.toString()); - } - - /** - * Arithmetic operation - Find the sum of any number of columns, of any valid types. - * Output type is most general of input types. - * Returns null if any input value is null. - */ - public static Number add(Number... nums) throws DirectiveExecutionException { - NumberType outputType = getOutputType(nums); - if (outputType == null) { - return null; - } - switch (outputType) { - case SHORT: - short shortSum = 0; - for (Number num : nums) { - shortSum += num.shortValue(); - } - return shortSum; - case INTEGER: - int intSum = 0; - for (Number num : nums) { - intSum += num.intValue(); - } - return intSum; - case LONG: - long longSum = 0; - for (Number num : nums) { - longSum += num.longValue(); - } - return longSum; - case FLOAT: - float floatSum = 0; - for (Number num : nums) { - floatSum += num.floatValue(); - } - return floatSum; - case DOUBLE: - double doubleSum = 0; - for (Number num : nums) { - doubleSum += num.doubleValue(); - } - return doubleSum; - default: - BigDecimal bdSum = BigDecimal.valueOf(0); - for (Number num : nums) { - bdSum = bdSum.add(numberToBigDecimal(num)); - } - return bdSum.stripTrailingZeros(); - } - } - - /** - * Arithmetic operation - subtract a column from another column. - * Output type is most general of input types. - * Returns null if any input value is null. - */ - public static Number minus(Number x, Number y) throws DirectiveExecutionException { - NumberType outputType = getOutputType(x, y); - if (outputType == null) { - return null; - } - switch (outputType) { - case SHORT: - return (short) (x.shortValue() - y.shortValue()); - case INTEGER: - return x.intValue() - y.intValue(); - case LONG: - return x.longValue() - y.longValue(); - case FLOAT: - return x.floatValue() - y.floatValue(); - case DOUBLE: - return x.doubleValue() - y.doubleValue(); - default: - BigDecimal bdX = numberToBigDecimal(x); - BigDecimal bdY = numberToBigDecimal(y); - return bdX.subtract(bdY).stripTrailingZeros(); - } - } - - /** - * Arithmetic operation - multiply any number of columns, of any types. - * Output type is most general of input types. - * Returns null if any input value is null. - */ - public static Number multiply(Number... nums) throws DirectiveExecutionException { - NumberType outputType = getOutputType(nums); - if (outputType == null) { - return null; - } - switch (outputType) { - case SHORT: - short shortProd = 1; - for (Number num : nums) { - shortProd *= num.shortValue(); - } - return shortProd; - case INTEGER: - int intProd = 1; - for (Number num : nums) { - intProd *= num.intValue(); - } - return intProd; - case LONG: - long longProd = 1; - for (Number num : nums) { - longProd *= num.longValue(); - } - return longProd; - case FLOAT: - float floatProd = 1; - for (Number num : nums) { - floatProd *= num.floatValue(); - } - return floatProd; - case DOUBLE: - double doubleProd = 1; - for (Number num : nums) { - doubleProd *= num.doubleValue(); - } - return doubleProd; - default: - BigDecimal bdProd = BigDecimal.valueOf(1); - for (Number num : nums) { - bdProd = bdProd.multiply(numberToBigDecimal(num)); - } - return bdProd; - } - } - - /** - * Arithmetic operation - divides one column by another. - * Output type is Double, except when there is an input of type BigDecimal, in which case the output is BigDecimal. - * Returns null if any input value is null, or if the divisor equals 0. - */ - public static Number divideq(Number x, Number y) throws DirectiveExecutionException { - NumberType outputType = getOutputType(x, y); - if (outputType == null || y.doubleValue() == 0) { - return null; - } - switch (outputType) { - case BIGDECIMAL: - BigDecimal bdX = numberToBigDecimal(x); - BigDecimal bdY = numberToBigDecimal(y); - return bdX.divide(bdY, BigDecimal.ROUND_HALF_EVEN).stripTrailingZeros(); - default: - return x.doubleValue() / y.doubleValue(); - } - } - - /** - * Arithmetic operation - divides one column by another and returns the remainder. - * Output type is most general of input types, except 2 Shorts should give an Integer. - * Returns null if any input value is null. - */ - public static Number divider(Number x, Number y) throws DirectiveExecutionException { - NumberType outputType = getOutputType(x, y); - if (outputType == null || y.doubleValue() == 0) { - return null; - } - switch (outputType) { - case SHORT: - return x.shortValue() % y.shortValue(); - case INTEGER: - return x.intValue() % y.intValue(); - case LONG: - return x.longValue() % y.longValue(); - case FLOAT: - return x.floatValue() % y.floatValue(); - case DOUBLE: - return x.doubleValue() % y.doubleValue(); - default: - BigDecimal bdX = numberToBigDecimal(x); - BigDecimal bdY = numberToBigDecimal(y); - return bdX.remainder(bdY); - } - } - - /** - * Arithmetic operation - calculates the LCM of two columns. - * Output type is most general of input types. - * Returns null if any input value is null. - */ - public static Number lcm(Number x, Number y) throws DirectiveExecutionException { - NumberType outputType = getOutputType(x, y); - if (outputType == null) { - return null; - } - BigDecimal bdX = numberToBigDecimal(x); - BigDecimal bdY = numberToBigDecimal(y); - switch (outputType) { - case SHORT: - return lcm(bdX, bdY).shortValue(); - case INTEGER: - return lcm(bdX, bdY).intValue(); - case LONG: - return lcm(bdX, bdY).longValue(); - case FLOAT: - return lcm(bdX, bdY).floatValue(); - case DOUBLE: - return lcm(bdX, bdY).doubleValue(); - default: - BigDecimal pow = BigDecimal.valueOf(Math.pow(10, Math.max(bdX.scale(), bdY.scale()))); - BigInteger val1 = bdX.multiply(pow).toBigInteger(); - BigInteger val2 = bdY.multiply(pow).toBigInteger(); - BigDecimal absProduct = new BigDecimal(val1.multiply(val2).abs()) - .setScale(Math.min(bdX.scale(), bdY.scale()), BigDecimal.ROUND_HALF_EVEN); - BigDecimal gcd = new BigDecimal(val1.gcd(val2)); - if (gcd.compareTo(BigDecimal.ZERO) == 0) { - return BigDecimal.ZERO; - } - return absProduct.divide(gcd.multiply(pow), BigDecimal.ROUND_HALF_EVEN); - } - } - - /** - Arithmetic operation - Check if all values are equal across any number of Short columns. - */ - public static Boolean equal(Short... nums) { - for (Short num : nums) { - if (num == null) { - return null; - } - if (!num.equals(nums[0])) { - return Boolean.FALSE; - } - } - return Boolean.TRUE; - } - - /** - Arithmetic operation - Check if all values are equal across any number of Integer columns. - */ - public static Boolean equal(Integer... nums) { - for (Integer num : nums) { - if (num == null) { - return null; - } - if (!num.equals(nums[0])) { - return Boolean.FALSE; - } - } - return Boolean.TRUE; - } - - /** - Arithmetic operation - Check if all values are equal across any number of Long columns. - */ - public static Boolean equal(Long... nums) { - for (Long num : nums) { - if (num == null) { - return null; - } - if (!num.equals(nums[0])) { - return Boolean.FALSE; - } - } - return Boolean.TRUE; - } - - /** - Arithmetic operation - Check if all values are equal across any number of Float columns. - */ - public static Boolean equal(Float... nums) { - for (Float num : nums) { - if (num == null) { - return null; - } - if (!num.equals(nums[0])) { - return Boolean.FALSE; - } - } - return Boolean.TRUE; - } - - /** - Arithmetic operation - Check if all values are equal across any number of Double columns. - */ - public static Boolean equal(Double... nums) { - for (Double num : nums) { - if (num == null) { - return null; - } - if (!num.equals(nums[0])) { - return Boolean.FALSE; - } - } - return Boolean.TRUE; - } - - /** - Arithmetic operation - Check if all values are equal across any number of BigDecimal columns. - */ - public static Boolean equal(BigDecimal... nums) { - for (BigDecimal num : nums) { - if (num == null) { - return null; - } - if (!num.equals(nums[0])) { - return Boolean.FALSE; - } - } - return Boolean.TRUE; - } - - /** - * Arithmetic operation - Find the maximum of any number of columns, of any valid types. - * Output type is most general of input types. - * Returns null if any input value is null. - */ - public static Number max(Number... nums) throws DirectiveExecutionException { - NumberType outputType = getOutputType(nums); - if (outputType == null) { - return null; - } - switch (outputType) { - case SHORT: - short shortMax = nums[0].shortValue(); - for (Number num : nums) { - if (num.shortValue() > shortMax) { - shortMax = num.shortValue(); - } - } - return shortMax; - case INTEGER: - int intMax = nums[0].intValue(); - for (Number num : nums) { - if (num.intValue() > intMax) { - intMax = num.intValue(); - } - } - return intMax; - case LONG: - long longMax = nums[0].longValue(); - for (Number num : nums) { - if (num.longValue() > longMax) { - longMax = num.longValue(); - } - } - return longMax; - case FLOAT: - float floatMax = nums[0].floatValue(); - for (Number num : nums) { - if (num.floatValue() > floatMax) { - floatMax = num.floatValue(); - } - } - return floatMax; - case DOUBLE: - double doubleMax = nums[0].doubleValue(); - for (Number num : nums) { - if (num.doubleValue() > doubleMax) { - doubleMax = num.doubleValue(); - } - } - return doubleMax; - default: - BigDecimal bdMax = new BigDecimal(nums[0].toString()); - for (Number num : nums) { - bdMax = bdMax.max(numberToBigDecimal(num)); - } - return bdMax; - } - } - - /** - * Arithmetic operation - Find the minimum of any number of columns, of any valid types. - * Output type is most general of input types. - * Returns null if any input value is null. - */ - public static Number min(Number... nums) throws DirectiveExecutionException { - NumberType outputType = getOutputType(nums); - if (outputType == null) { - return null; - } - switch (outputType) { - case SHORT: - short shortMin = nums[0].shortValue(); - for (Number num : nums) { - if (num.shortValue() < shortMin) { - shortMin = num.shortValue(); - } - } - return shortMin; - case INTEGER: - int intMin = nums[0].intValue(); - for (Number num : nums) { - if (num.intValue() < intMin) { - intMin = num.intValue(); - } - } - return intMin; - case LONG: - long longMin = nums[0].longValue(); - for (Number num : nums) { - if (num.longValue() < longMin) { - longMin = num.longValue(); - } - } - return longMin; - case FLOAT: - float floatMin = nums[0].floatValue(); - for (Number num : nums) { - if (num.floatValue() < floatMin) { - floatMin = num.floatValue(); - } - } - return floatMin; - case DOUBLE: - double doubleMin = nums[0].doubleValue(); - for (Number num : nums) { - if (num.doubleValue() < doubleMin) { - doubleMin = num.doubleValue(); - } - } - return doubleMin; - default: - BigDecimal bdMin = new BigDecimal(nums[0].toString()); - for (Number num : nums) { - bdMin = bdMin.min(numberToBigDecimal(num)); - } - return bdMin; - } - } - - /** - * Arithmetic operation - calculate average of any number of columns. - * Returns Number - BigDecimal if any column is of type BigDecimal, double otherwise. - * HALF_EVEN rounding mode chosen for high precision in the long run. - */ - public static Number average(Number... nums) throws DirectiveExecutionException { - // Note that this algorithm avoids overflow - Number avg = 0.0; - int t = 1; - boolean allNull = true; - boolean containsBigDecimal = false; - for (Number num : nums) { - // Check for null input - if (num == null) { - continue; - } else { - allNull = false; - } - // Check for invalid input - if (num instanceof Byte) { - throw new DirectiveExecutionException("Input cannot be of type 'Byte'."); - } - // Switch to BigDecimal computation if necessary - if (!containsBigDecimal && num instanceof BigDecimal) { - if (t > 1) { - avg = BigDecimal.valueOf((double) avg); - } else { - avg = BigDecimal.ZERO; - } - containsBigDecimal = true; - } - // Compute average - if (containsBigDecimal) { - BigDecimal numer = numberToBigDecimal(num).subtract((BigDecimal) avg); - BigDecimal denom = BigDecimal.valueOf(t); - avg = ((BigDecimal) avg).add(numer.divide(denom, RoundingMode.HALF_EVEN)); - } else { - avg = (double) avg + (num.doubleValue() - (double) avg) / t; - } - t++; - } - if (allNull) { - return null; - } - return avg; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ArtifactSummaryComparator.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/ArtifactSummaryComparator.java deleted file mode 100644 index 6097559d7..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ArtifactSummaryComparator.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.utils; - -import io.cdap.cdap.api.artifact.ArtifactScope; -import io.cdap.cdap.api.artifact.ArtifactSummary; -import io.cdap.cdap.api.artifact.ArtifactVersion; - -import java.util.Comparator; - -/** - * Comparator for artifact summary - */ -public class ArtifactSummaryComparator implements Comparator { - private static final ArtifactSummaryComparator COMPARATOR = new ArtifactSummaryComparator(); - - @Override - public int compare(ArtifactSummary summary1, ArtifactSummary summary2) { - if (summary1.equals(summary2)) { - return 0; - } - - // first compare the artifact - int cmp = new ArtifactVersion(summary1.getVersion()).compareTo(new ArtifactVersion(summary2.getVersion())); - if (cmp != 0) { - return cmp; - } - - // if scope is different, whoever has user scope is latest - return summary1.getScope().equals(ArtifactScope.USER) ? 1 : -1; - } - - /** - * Pick up the latest artifact, this method assumes the name of the artifact is same - */ - public static ArtifactSummary pickLatest(ArtifactSummary artifact1, ArtifactSummary artifact2) { - return COMPARATOR.compare(artifact1, artifact2) > 0 ? artifact1 : artifact2; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/AvroSchemaGlossary.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/AvroSchemaGlossary.java deleted file mode 100644 index 25235c0d8..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/AvroSchemaGlossary.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.utils; - -import org.apache.avro.Schema; -import org.apache.commons.collections4.SetValuedMap; -import org.apache.commons.collections4.multimap.HashSetValuedHashMap; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.Collection; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * The {@link AvroSchemaGlossary} class is used for management of AVRO data model schema definitions. - */ -public class AvroSchemaGlossary { - - private static final Logger LOG = LoggerFactory.getLogger(AvroSchemaGlossary.class); - private static final String REVISION_PROPERTY = "_revision"; - - private AvroSchemaLoader avroSchemaLoader; - private SetValuedMap glossary = new HashSetValuedHashMap<>(); - - public AvroSchemaGlossary(AvroSchemaLoader avroSchemaLoader) { - this.avroSchemaLoader = avroSchemaLoader; - } - - /** - * Setter for the {@link AvroSchemaLoader} to use when populating the glossary. - * - * @param avroSchemaLoader the loader used to populate the glossary. - */ - public void setAvroSchemaLoader(AvroSchemaLoader avroSchemaLoader) { - this.avroSchemaLoader = avroSchemaLoader; - } - /** - * Configures the {@link AvroSchemaGlossary} with the schemas accessible through the {@link AvroSchemaLoader}. - * - * @return true if successfully configure, otherwise false. - */ - public boolean configure() { - try { - glossary = avroSchemaLoader.load(); - } catch (IOException e) { - return false; - } - return true; - } - - /** - * Retrieves the {@link Schema} from the glossary. - * - * @param name the name of the schema to retrieve. - * @param revision the revision of the schema to retrieve. - * @return {@link Schema} if found, otherwise null. - */ - public Schema get(String name, long revision) { - Collection schemas = glossary.get(name); - Schema result = null; - for (Schema schema : schemas) { - try { - long rev = Long.parseLong(schema.getProp(AvroSchemaGlossary.REVISION_PROPERTY), 10); - if (rev == revision) { - result = schema; - break; - } - } catch (NumberFormatException e) { - LOG.error(String.format("unable to parse %s property within schema %s", AvroSchemaGlossary.REVISION_PROPERTY, - schema.getFullName())); - } - } - return result; - } - - /** - * Retrieves all of the {@link Schema} contained within the glossary. - * - * @return a collection of all {@link Schema} - */ - public Collection getAll() { - return glossary.entries().stream() - .map(Map.Entry::getValue) - .collect(Collectors.toList()); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/AvroSchemaLoader.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/AvroSchemaLoader.java deleted file mode 100644 index 48226915b..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/AvroSchemaLoader.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.utils; - -import org.apache.avro.Schema; -import org.apache.commons.collections4.SetValuedMap; - -import java.io.IOException; - - -/** - * The {@link AvroSchemaLoader} interface abstracts loading an AVRO data model schema definitions. - */ -public interface AvroSchemaLoader { - - /** - * Loads and parses an AVRO data model schema. - * - * @return a map with keys representing the name of the schema. The value is a set of all of the revisions of the - * {@link Schema}. - */ - SetValuedMap load() throws IOException; -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ColumnConverter.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/ColumnConverter.java deleted file mode 100644 index 24db532e7..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ColumnConverter.java +++ /dev/null @@ -1,396 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.utils; - -import io.cdap.cdap.api.common.Bytes; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.data.schema.Schema.LogicalType; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.Row; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.math.RoundingMode; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -/** - * Utility class that converts a {@link Row} column into another column. - */ -public final class ColumnConverter { - private static final Map SCHEMA_TYPE_MAP; - - private ColumnConverter() { - } - - /** - * Renames a column. The renamed column must not exist in the row. The comparision is case insensitive. - * - * @param row source record to be modified. - * @param column name of the column within source record. - * @param toName the target name of the column. - * @throws DirectiveExecutionException when a column matching the target name already exists - */ - public static void rename(String directiveName, Row row, String column, String toName) - throws DirectiveExecutionException { - int idx = row.find(column); - int existingColumn = row.find(toName); - if (idx == -1) { - return; - } - - // if the idx are the same, this means the renamed column is same with the original column except the casing - if (existingColumn == -1 || idx == existingColumn) { - row.setColumn(idx, toName); - } else { - throw new DirectiveExecutionException( - directiveName, String.format("Column '%s' already exists. Apply the 'drop %s' directive before " + - "renaming '%s' to '%s'.", - toName, toName, column, toName)); - } - } - - /** - * Converts the column type into another type. Only target types int, short, long, double, boolean, string, and bytes - * are supported. - * - * @param row source record to be modified. - * @param column name of the column within source record. - * @param toType the target type of the column. - * @throws DirectiveExecutionException when an unsupported type is specified or the column can not be converted. - */ - public static void convertType(String directiveName, Row row, String column, String toType, - Integer scale, Integer precision, RoundingMode roundingMode) - throws DirectiveExecutionException { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object == null || (object instanceof String && ((String) object).trim().isEmpty())) { - return; - } - try { - Object converted = ColumnConverter.convertType(column, toType, object); - if (toType.equalsIgnoreCase(ColumnTypeNames.DECIMAL)) { - row.setValue(idx, setDecimalScaleAndPrecision((BigDecimal) converted, scale, - precision, roundingMode)); - } else { - row.setValue(idx, converted); - } - } catch (DirectiveExecutionException e) { - throw e; - } catch (Exception e) { - throw new DirectiveExecutionException( - directiveName, String.format("Column '%s' cannot be converted to a '%s'.", column, toType), e); - } - } - } - - private static Object convertType(String col, String toType, Object object) - throws Exception { - toType = toType.toUpperCase(); - switch (toType) { - case ColumnTypeNames.INTEGER: - case ColumnTypeNames.I64: - case ColumnTypeNames.INT: { - if (object instanceof String) { - return Integer.parseInt((String) object); - } else if (object instanceof Short) { - return ((Short) object).intValue(); - } else if (object instanceof Float) { - return ((Float) object).intValue(); - } else if (object instanceof Double) { - return ((Double) object).intValue(); - } else if (object instanceof Integer) { - return object; - } else if (object instanceof Long) { - return ((Long) object).intValue(); - } else if (object instanceof BigDecimal) { - return ((BigDecimal) object).intValue(); - } else if (object instanceof byte[]) { - return Bytes.toInt((byte[]) object); - } else { - break; - } - } - - case ColumnTypeNames.I32: - case ColumnTypeNames.SHORT: { - if (object instanceof String) { - return Short.parseShort((String) object); - } else if (object instanceof Short) { - return object; - } else if (object instanceof Float) { - return ((Float) object).shortValue(); - } else if (object instanceof Double) { - return ((Double) object).shortValue(); - } else if (object instanceof Integer) { - return ((Integer) object).shortValue(); - } else if (object instanceof Long) { - return ((Long) object).shortValue(); - } else if (object instanceof BigDecimal) { - return ((BigDecimal) object).shortValue(); - } else if (object instanceof byte[]) { - return Bytes.toShort((byte[]) object); - } else { - break; - } - } - - case ColumnTypeNames.LONG: { - if (object instanceof String) { - return Long.parseLong((String) object); - } else if (object instanceof Short) { - return ((Short) object).longValue(); - } else if (object instanceof Float) { - return ((Float) object).longValue(); - } else if (object instanceof Double) { - return ((Double) object).longValue(); - } else if (object instanceof Integer) { - return ((Integer) object).longValue(); - } else if (object instanceof Long) { - return object; - } else if (object instanceof BigDecimal) { - return ((BigDecimal) object).longValue(); - } else if (object instanceof byte[]) { - return Bytes.toLong((byte[]) object); - } else { - break; - } - } - - case ColumnTypeNames.BOOL: - case ColumnTypeNames.BOOLEAN: { - if (object instanceof Boolean) { - return object; - } else if (object instanceof String) { - return Boolean.parseBoolean((String) object); - } else if (object instanceof Short) { - return ((Short) object) > 0 ? true : false; - } else if (object instanceof Float) { - return ((Float) object) > 0 ? true : false; - } else if (object instanceof Double) { - return ((Double) object) > 0 ? true : false; - } else if (object instanceof Integer) { - return ((Integer) object) > 0 ? true : false; - } else if (object instanceof Long) { - return ((Long) object) > 0 ? true : false; - } else if (object instanceof BigDecimal) { - return ((BigDecimal) object).compareTo(BigDecimal.ZERO) > 0; - } else if (object instanceof byte[]) { - return Bytes.toBoolean((byte[]) object); - } else { - break; - } - } - - case ColumnTypeNames.STRING: { - if (object instanceof byte[]) { - return Bytes.toString((byte[]) object); - } - return object.toString(); - } - case ColumnTypeNames.FLOAT: { - if (object instanceof String) { - return Float.parseFloat((String) object); - } else if (object instanceof Short) { - return ((Short) object).floatValue(); - } else if (object instanceof Float) { - return object; - } else if (object instanceof Double) { - return ((Double) object).floatValue(); - } else if (object instanceof Integer) { - return ((Integer) object).floatValue(); - } else if (object instanceof Long) { - return ((Long) object).floatValue(); - } else if (object instanceof BigDecimal) { - return ((BigDecimal) object).floatValue(); - } else if (object instanceof byte[]) { - return Bytes.toFloat((byte[]) object); - } else { - break; - } - } - - case ColumnTypeNames.DECIMAL: { - if (object instanceof BigDecimal) { - return object; - } else if (object instanceof String) { - return new BigDecimal((String) object); - } else if (object instanceof Integer) { - return BigDecimal.valueOf((Integer) object); - } else if (object instanceof Short) { - return BigDecimal.valueOf((Short) object); - } else if (object instanceof Long) { - return BigDecimal.valueOf((Long) object); - } else if (object instanceof Float) { - return BigDecimal.valueOf((Float) object); - } else if (object instanceof Double) { - return BigDecimal.valueOf((Double) object); - } else if (object instanceof byte[]) { - return Bytes.toBigDecimal((byte[]) object); - } else { - break; - } - } - - case ColumnTypeNames.DOUBLE: { - if (object instanceof String) { - return Double.parseDouble((String) object); - } else if (object instanceof Short) { - return ((Short) object).doubleValue(); - } else if (object instanceof Float) { - return ((Float) object).doubleValue(); - } else if (object instanceof Double) { - return object; - } else if (object instanceof Integer) { - return ((Integer) object).doubleValue(); - } else if (object instanceof Long) { - return ((Long) object).doubleValue(); - } else if (object instanceof byte[]) { - return Bytes.toDouble((byte[]) object); - } else if (object instanceof BigDecimal) { - return ((BigDecimal) object).doubleValue(); - } else { - break; - } - } - - case ColumnTypeNames.BYTES: { - if (object instanceof String) { - return Bytes.toBytes((String) object); - } else if (object instanceof Short) { - return Bytes.toBytes((Short) object); - } else if (object instanceof Float) { - return Bytes.toBytes((Float) object); - } else if (object instanceof Double) { - return Bytes.toBytes((Double) object); - } else if (object instanceof Integer) { - return Bytes.toBytes((Integer) object); - } else if (object instanceof Long) { - return Bytes.toBytes((Long) object); - } else if (object instanceof BigDecimal) { - return Bytes.toBytes((BigDecimal) object); - } else if (object instanceof byte[]) { - return object; - } else { - break; - } - } - - default: - throw new DirectiveExecutionException(String.format( - "Column '%s' is of unsupported type '%s'. Supported types are: " + - "int, short, long, double, decimal, boolean, string, bytes", col, toType)); - } - throw new DirectiveExecutionException( - String.format("Column '%s' has value of type '%s' and cannot be converted to a '%s'.", col, - object.getClass().getSimpleName(), toType)); - } - - private static BigDecimal setDecimalScaleAndPrecision(BigDecimal decimal, Integer scale, - Integer precision, RoundingMode roundingMode) - throws DirectiveExecutionException { - if (scale == null && precision == null) { - return decimal; - } - try { - if (precision == null) { - return decimal.setScale(scale, roundingMode); - } else if (scale == null) { - return decimal.round(new MathContext(precision, roundingMode)); - } else { - BigDecimal result; - if (validateScaleAndPrecision(scale, precision, decimal)) { - result = decimal.setScale(scale, roundingMode); - result = result.round(new MathContext(precision, roundingMode)); - } else { - throw new DirectiveExecutionException(String.format( - "Cannot set scale as '%s' and precision as '%s' for value '%s' when" - + "given precision - scale is less than number of digits" - + " before decimal point ", scale, precision, decimal)); - } - return result; - } - } catch (ArithmeticException e) { - throw new DirectiveExecutionException(String.format( - "Cannot set scale as '%s' and precision '%s' for value '%s' when rounding-mode " - + "is '%s'", scale, precision, decimal, roundingMode), e); - } - } - - private static Boolean validateScaleAndPrecision(Integer scale, Integer precision, BigDecimal decimal) { - int digitsBeforeDecimalPoint = decimal.signum() == 0 ? 1 : decimal.precision() - decimal.scale(); - return precision - scale >= digitsBeforeDecimalPoint; - } - - public static Schema getSchemaForType(String type, Integer scale, Integer precision) throws DirectiveParseException { - Schema typeSchema; - type = type.toUpperCase(); - if (type.equals(ColumnTypeNames.DECIMAL)) { - // TODO make set-type support setting decimal precision - precision = precision != null ? precision : 77; - scale = scale != null ? scale : 38; - typeSchema = Schema.nullableOf(Schema.decimalOf(precision, scale)); - } else { - if (!SCHEMA_TYPE_MAP.containsKey(type)) { - throw new DirectiveParseException(String.format("'%s' is an unsupported type. " + - "Supported types are: int, short, long, double, decimal, boolean, string, bytes", type)); - } - typeSchema = Schema.nullableOf(Schema.of(SCHEMA_TYPE_MAP.get(type))); - } - return typeSchema; - } - - static { - Map schemaTypeMap = new HashMap<>(); - schemaTypeMap.put(ColumnTypeNames.INTEGER, Schema.Type.INT); - schemaTypeMap.put(ColumnTypeNames.I64, Schema.Type.INT); - schemaTypeMap.put(ColumnTypeNames.INT, Schema.Type.INT); - // TODO currently CDAP does not have a SHORT datatype for I32 and SHORT arguments. - schemaTypeMap.put(ColumnTypeNames.SHORT, Schema.Type.INT); - schemaTypeMap.put(ColumnTypeNames.I32, Schema.Type.INT); - schemaTypeMap.put(ColumnTypeNames.LONG, Schema.Type.LONG); - schemaTypeMap.put(ColumnTypeNames.BOOL, Schema.Type.BOOLEAN); - schemaTypeMap.put(ColumnTypeNames.BOOLEAN, Schema.Type.BOOLEAN); - schemaTypeMap.put(ColumnTypeNames.STRING, Schema.Type.STRING); - schemaTypeMap.put(ColumnTypeNames.FLOAT, Schema.Type.FLOAT); - schemaTypeMap.put(ColumnTypeNames.DOUBLE, Schema.Type.DOUBLE); - schemaTypeMap.put(ColumnTypeNames.BYTES, Schema.Type.BYTES); - SCHEMA_TYPE_MAP = Collections.unmodifiableMap(schemaTypeMap); - } - - private static final class ColumnTypeNames { - private ColumnTypeNames() { - throw new AssertionError("Cannot instantiate a constants class"); - } - - public static final String INTEGER = "INTEGER"; - public static final String I64 = "I64"; - public static final String INT = "INT"; - public static final String SHORT = "SHORT"; - public static final String I32 = "I32"; - public static final String LONG = "LONG"; - public static final String BOOL = "BOOL"; - public static final String BOOLEAN = "BOOLEAN"; - public static final String STRING = "STRING"; - public static final String FLOAT = "FLOAT"; - public static final String DOUBLE = "DOUBLE"; - public static final String BYTES = "BYTES"; - public static final String DECIMAL = "DECIMAL"; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/DecimalTransform.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/DecimalTransform.java deleted file mode 100644 index 78f5a0836..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/DecimalTransform.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import java.math.BigDecimal; -import java.math.BigInteger; - -/** - * Transformations with Decimal - */ -public class DecimalTransform { - - /** - Add a value to a column - */ - public static BigDecimal add(BigDecimal bd1, Object o) { - BigDecimal bd2 = objectToBigDecimal(o); - if (bd1 == null) { - return bd2; - } - return bd1.add(bd2); - } - - /** - Subtract a value from a column - */ - public static BigDecimal subtract(BigDecimal bd1, Object o) { - BigDecimal bd2 = objectToBigDecimal(o); - if (bd1 == null) { - return bd2.negate(); - } - return bd1.subtract(bd2); - } - - /** - Multiply the column by a given value - */ - public static BigDecimal multiply(BigDecimal bd1, Object o) { - BigDecimal bd2 = objectToBigDecimal(o); - if (bd1 == null) { - return BigDecimal.ZERO; - } - return bd1.multiply(bd2); - } - - /** - Divide the column by a given value and return the quotient - */ - public static BigDecimal divideq(BigDecimal bd1, Object o) { - BigDecimal bd2 = objectToBigDecimal(o); - if (bd2.equals(BigDecimal.ZERO)) { - return null; - } - if (bd1 == null) { - return BigDecimal.ZERO; - } - return bd1.divide(bd2, BigDecimal.ROUND_HALF_EVEN); - } - - /** - Divide the column by a given value and return the remainder - */ - public static BigDecimal divider(BigDecimal bd1, Object o) { - BigDecimal bd2 = objectToBigDecimal(o); - if (bd2.equals(BigDecimal.ZERO)) { - return null; - } - if (bd1 == null) { - return BigDecimal.ZERO; - } - return bd1.remainder(bd2); - } - - /** - Get the absolute value - */ - public static BigDecimal abs(BigDecimal bd) { - return bd.abs(); - } - - /** - Get the precision of a decimal value - */ - public static int precision(BigDecimal bd) { - return bd.precision(); - } - - /** - Get the scale of a decimal value - */ - public static int scale(BigDecimal bd) { - return bd.scale(); - } - - /** - Get the unscaled value of a decimal value - */ - public static BigInteger unscaled(BigDecimal bd) { - return bd.unscaledValue(); - } - - /** - Move the decimal point n places to the left - */ - public static BigDecimal decimal_left(BigDecimal bd, int n) { - int newScale = bd.scale() + n; - bd = bd.setScale(newScale, BigDecimal.ROUND_UP); - bd = bd.divide(BigDecimal.valueOf(Math.pow(10, n)), BigDecimal.ROUND_HALF_EVEN); - return bd.stripTrailingZeros(); - } - - /** - Move the decimal point n places to the right - */ - public static BigDecimal decimal_right(BigDecimal bd, int n) { - int newScale = Math.max(bd.scale() - n, 0); - bd = bd.multiply(BigDecimal.valueOf(Math.pow(10, n))); - bd = bd.setScale(newScale, BigDecimal.ROUND_DOWN); - return bd; - } - - /** - Get the nth power of a decimal - */ - public static BigDecimal pow(BigDecimal bd, int pow) { - return bd.pow(pow); - } - - /** - Negate a decimal - */ - public static BigDecimal negate(BigDecimal bd) { - bd = bd.negate(); - if (bd.compareTo(BigDecimal.ZERO) == 0) { - return BigDecimal.ZERO; - } - return bd; - } - - /** - Strip trailing zeros in a decimal - */ - public static BigDecimal strip_zero(BigDecimal bd) { - return bd.stripTrailingZeros(); - } - - /** - Sign of a value - */ - public static int sign(BigDecimal bd) { - return Integer.compare(bd.compareTo(BigDecimal.ZERO), 0); - } - - private static BigDecimal objectToBigDecimal(Object o) { - if (o instanceof BigDecimal) { - return (BigDecimal) o; - } else if (o instanceof Integer) { - return BigDecimal.valueOf((Integer) o); - } else if (o instanceof Double) { - return BigDecimal.valueOf((Double) o); - } else { - return null; - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/JsonPathGenerator.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/JsonPathGenerator.java deleted file mode 100644 index 74b746f03..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/JsonPathGenerator.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * A class for generating json paths for a given json. It generates json path by recursively traversing - * through the json structure. - */ -public final class JsonPathGenerator { - // String representation of json - private final JsonParser parser; - - public JsonPathGenerator() { - this.parser = new JsonParser(); - } - - /** - * Generates all json paths for the json being passed as a string. - * - * @param json string for which json paths need to be extracted. - * @return list of json paths. - */ - public List get(String json) { - if (json == null || json.isEmpty()) { - return new ArrayList<>(); - } - JsonElement object = parser.parse(json); - return get(object); - } - - /** - * Generates all json paths for the json being passed as {@link JsonElement}. - * - * @param object {@link JsonElement} for the json - * @return list of json paths. - */ - public List get(JsonElement object) { - List paths = new ArrayList<>(); - String root = "$"; - if (object.isJsonObject()) { - paths.addAll(readObject(object.getAsJsonObject(), root)); - } else if (object.isJsonArray()) { - paths.addAll(readArray(object.getAsJsonArray(), root)); - } - return paths; - } - - /** - * Iterates through each key of the object, and depending on the type of the - * object -- either it being {@link JsonArray} or {@link JsonObject}, it processes - * them recursively. - */ - private List readObject(JsonObject object, String parent) { - List paths = new ArrayList<>(); - Set> entries = object.entrySet(); - Iterator> iterator = entries.iterator(); - paths.add(parent); - while (iterator.hasNext()) { - Map.Entry next = iterator.next(); - String base = parent + "." + next.getKey(); - JsonElement element = next.getValue(); - if (element.isJsonObject()) { - paths.addAll(readObject(element.getAsJsonObject(), base)); - } else if (element.isJsonArray()) { - paths.addAll(readArray(element.getAsJsonArray(), base)); - } else { - paths.add(base); - } - } - return paths; - } - - private List readArray(JsonArray array, String path) { - List paths = new ArrayList<>(); - paths.add(path); - String parent = path; - for (int i = 0; i < array.size(); ++i) { - JsonElement value = array.get(i); - path = parent + "[" + i + "]"; - if (value.isJsonArray()) { - paths.addAll(readArray(value.getAsJsonArray(), path)); - } else if (value.isJsonObject()) { - paths.addAll(readObject(value.getAsJsonObject(), path)); - } else { - paths.add(path); - } - } - return paths; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/KryoSerializer.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/KryoSerializer.java deleted file mode 100644 index 0d13a7b08..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/KryoSerializer.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright © 2024 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.utils; - -import com.esotericsoftware.kryo.Kryo; -import com.esotericsoftware.kryo.Serializer; -import com.esotericsoftware.kryo.io.Input; -import com.esotericsoftware.kryo.io.Output; -import com.esotericsoftware.kryo.serializers.JavaSerializer; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonNull; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.RemoteDirectiveResponse; -import io.cdap.wrangler.api.Row; -import java.sql.Time; -import java.sql.Timestamp; -import java.time.LocalDate; -import java.time.LocalTime; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Date; -import java.util.Map; - -/** - * A helper class with allows Serialization and Deserialization using Kryo - * We should register all schema classes present in {@link SchemaConverter} - * and {@link RemoteDirectiveResponse} - **/ -public class KryoSerializer { - - private final Kryo kryo; - private static final Gson GSON = new Gson(); - - public KryoSerializer() { - kryo = new Kryo(); - // Register all classes from RemoteDirectiveResponse - kryo.register(RemoteDirectiveResponse.class); - // Schema does not have no-arg constructor but implements Serializable - kryo.register(Schema.class, new JavaSerializer()); - // Register all classes from SchemaConverter - kryo.register(Row.class); - kryo.register(ArrayList.class); - kryo.register(LocalDate.class); - kryo.register(LocalTime.class); - kryo.register(ZonedDateTime.class); - kryo.register(Map.class); - kryo.register(JsonNull.class); - // JsonPrimitive does not have no-arg constructor hence we need a - // custom serializer as it is not serializable by JavaSerializer - kryo.register(JsonPrimitive.class, new JsonSerializer()); - kryo.register(JsonArray.class); - kryo.register(JsonObject.class); - // Support deprecated util.date classes - kryo.register(Date.class); - kryo.register(java.sql.Date.class); - kryo.register(Time.class); - kryo.register(Timestamp.class); - } - - public byte[] fromRemoteDirectiveResponse(RemoteDirectiveResponse response) { - Output output = new Output(1024, -1); - kryo.writeClassAndObject(output, response); - return output.getBuffer(); - } - - public RemoteDirectiveResponse toRemoteDirectiveResponse(byte[] bytes) { - Input input = new Input(bytes); - return (RemoteDirectiveResponse) kryo.readClassAndObject(input); - } - - static class JsonSerializer extends Serializer { - - @Override - public void write(Kryo kryo, Output output, JsonElement object) { - output.writeString(GSON.toJson(object)); - } - - @Override - public JsonElement read(Kryo kryo, Input input, Class type) { - return GSON.fromJson(input.readString(), type); - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/Manifest.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/Manifest.java deleted file mode 100644 index 9386af26f..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/Manifest.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import java.io.Serializable; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -/** - * Contains the Schemas Manifest for standard schemas. - */ -public final class Manifest implements Serializable { - - private final Map standards; - - public Manifest(Map standards) { - this.standards = Collections.unmodifiableMap(new HashMap<>(standards)); - } - - public Map getStandards() { - return standards; - } - - /** - * Contains manifest information for a single standard specification. - */ - public static final class Standard { - - private final String hash; - private final String format; - - public Standard(String hash, String format) { - this.hash = hash; - this.format = format; - } - - public String getHash() { - return hash; - } - - public String getFormat() { - return format; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - // This may cause issues if this class is loaded by custom CDF class loaders. - if (o == null || getClass() != o.getClass()) { - return false; - } - Standard standard = (Standard) o; - return Objects.equals(hash, standard.hash) && Objects.equals(format, standard.format); - } - - @Override - public int hashCode() { - return Objects.hash(hash, format); - } - - @Override - public String toString() { - return "Standard{" + "hash='" + hash + '\'' + ", format='" + format + '\'' + '}'; - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ObjectSerDe.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/ObjectSerDe.java deleted file mode 100644 index 4980ea0a7..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ObjectSerDe.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import io.cdap.wrangler.api.annotations.PublicEvolving; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutput; -import java.io.ObjectOutputStream; - -/** - * This class allows one to serialize the object of T into bytes. - * - * @param type of object to serialize - */ -@PublicEvolving -public final class ObjectSerDe { - - /** - * Converts an object of type T into bytes. - * - * @param object to be serialized into bytes. - * @return byte array of serialized object. - */ - public byte[] toByteArray(T object) throws IOException { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - try (ObjectOutput out = new ObjectOutputStream(bos)) { - out.writeObject(object); - } - return bos.toByteArray(); - } - - /** - * Converts a serialized object byte array back into object. - * - * @param bytes to be converted to object of type T. - * @return an instance of object deserialized from the byte array. - * @see ObjectSerDe#toByteArray(Object) - */ - public T toObject(byte[] bytes) throws IOException, ClassNotFoundException { - try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes))) { - return (T) in.readObject(); - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ProjectInfo.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/ProjectInfo.java deleted file mode 100644 index 224ded24d..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ProjectInfo.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.utils; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; - -/** - * Wrangler project info - */ -public class ProjectInfo { - - private static final Logger LOG = LoggerFactory.getLogger(ProjectInfo.class); - private static final String RESOURCE_NAME = "/.properties"; - private static final String PLUGIN_VERSION = "plugin.version"; - private static final Map PROPERTIES; - - // Initialize project properties from .properties file. - static { - Properties props = new Properties(); - try (InputStream resourceStream = ProjectInfo.class.getResourceAsStream(RESOURCE_NAME)) { - props.load(resourceStream); - } catch (Exception e) { - LOG.warn("Unable to load the project properties {} ", e.getMessage(), e); - } - - Map properties = new HashMap<>(); - for (String key : props.stringPropertyNames()) { - properties.put(key, props.getProperty(key)); - } - PROPERTIES = properties; - } - - /** - * @return the project properties. - */ - public static Map getProperties() { - return PROPERTIES; - } - - /** - * @return the project version. - */ - public static String getVersion() { - return PROPERTIES.get(PLUGIN_VERSION); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/RecordConvertor.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/RecordConvertor.java deleted file mode 100644 index 1b7e995a4..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/RecordConvertor.java +++ /dev/null @@ -1,458 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.gson.JsonArray; -import com.google.gson.JsonNull; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import io.cdap.cdap.api.common.Bytes; -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.format.UnexpectedFormatException; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.directives.parser.JsParser; -import io.cdap.wrangler.api.Row; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZonedDateTime; -import java.time.format.DateTimeParseException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; - -/** - * Converts {@link Row} to {@link StructuredRecord}. - */ -public final class RecordConvertor implements Serializable { - - /** - * Converts a list of {@link Row} into populated list of {@link StructuredRecord} - * - * @param rows Collection of rows. - * @param schema Schema associated with {@link StructuredRecord} - * @return Populated list of {@link StructuredRecord} - */ - public List toStructureRecord(List rows, Schema schema) throws RecordConvertorException { - List results = new ArrayList<>(); - for (Row row : rows) { - StructuredRecord r = decodeRecord(row, schema); - results.add(r); - } - return results; - } - - /** - * Converts a Wrangler {@link Row} into a {@link StructuredRecord}. - * - * @param row defines a single {@link Row} - * @param schema Schema associated with {@link StructuredRecord} - * @return Populated {@link StructuredRecord} - */ - @Nullable - public StructuredRecord decodeRecord(@Nullable Row row, Schema schema) throws RecordConvertorException { - if (row == null) { - return null; - } - // TODO: This is a hack to workaround StructuredRecord processing. NEED TO RETHINK. - if (row.getFields().size() == 1) { - Object cell = row.getValue(0); - if (cell instanceof StructuredRecord) { - return (StructuredRecord) cell; - } - } - StructuredRecord.Builder builder = StructuredRecord.builder(schema); - List fields = schema.getFields(); - // We optimize for use case where wrangler list of fields is equal to the output schema one - // This value would hold first row field index that we did not map to schema yet - int firstUnclaimedField = 0; - for (Schema.Field field : fields) { - Schema fSchema = field.getSchema(); - boolean isNullable = fSchema.isNullable(); - String name = field.getName(); - Object value = null; - int idx = -1; - if ((firstUnclaimedField < row.width()) && (name.equals(row.getColumn(firstUnclaimedField)))) { - idx = firstUnclaimedField; - firstUnclaimedField++; - } else { - idx = row.find(name, firstUnclaimedField); - if (idx == firstUnclaimedField) { - firstUnclaimedField++; - } - } - if (idx != -1) { - value = row.getValue(idx); - } - try { - Object decodedObj = decode(name, value, field.getSchema()); - if (decodedObj instanceof LocalDate) { - builder.setDate(name, (LocalDate) decodedObj); - } else if (decodedObj instanceof LocalTime) { - builder.setTime(name, (LocalTime) decodedObj); - } else if (decodedObj instanceof ZonedDateTime) { - builder.setTimestamp(name, (ZonedDateTime) decodedObj); - } else if (decodedObj instanceof BigDecimal) { - builder.setDecimal(name, (BigDecimal) decodedObj); - } else if (decodedObj instanceof LocalDateTime) { - builder.setDateTime(name, (LocalDateTime) decodedObj); - } else { - builder.set(name, decodedObj); - } - } catch (UnexpectedFormatException e) { - throw new RecordConvertorException( - String.format("Field '%s' of type '%s' cannot be set to '%s'. Make sure the value is " + - "being set is inline with the specified schema.", - name, - isNullable ? fSchema.getNonNullable().getDisplayName() : fSchema.getDisplayName(), - value == null ? "NULL" : value), e); - } - } - return builder.build(); - } - - private Object decode(String name, Object object, Schema schema) throws RecordConvertorException { - boolean isNullable = schema.isNullable(); - - if (object == null && isNullable) { - return null; - } - - // Extract the type of the field. - Schema.Type type = schema.getType(); - Schema.LogicalType logicalType = isNullable ? schema.getNonNullable().getLogicalType() : schema.getLogicalType(); - - if (logicalType != null) { - switch (logicalType) { - case DATETIME: - if (isNullable && object == null || object instanceof LocalDateTime) { - return object; - } - if (object == null) { - throw new UnexpectedFormatException( - String.format("Datetime field %s should have a non null value", name)); - } - try { - LocalDateTime.parse((String) object); - } catch (DateTimeParseException exception) { - throw new UnexpectedFormatException( - String.format("Datetime field '%s' with value '%s' is not in ISO-8601 format.", - name, object), exception); - } - return object; - case DATE: - case TIME_MILLIS: - case TIME_MICROS: - case TIMESTAMP_MILLIS: - case TIMESTAMP_MICROS: - case DECIMAL: - return object; - default: - throw new UnexpectedFormatException("field type " + logicalType + " is not supported."); - } - } - - // Now based on the type, do the necessary decoding. - switch (type) { - case NULL: - case BOOLEAN: - case INT: - case LONG: - case FLOAT: - case DOUBLE: - case BYTES: - case STRING: - return decodeSimpleTypes(name, object, schema); - case ENUM: - break; - case ARRAY: - return decodeArray(name, object, schema.getComponentSchema()); - case RECORD: - return decodeRecord(name, object, schema); - case MAP: - Schema key = schema.getMapSchema().getKey(); - Schema value = schema.getMapSchema().getValue(); - // Should be fine to cast since schema tells us what it is. - // noinspection unchecked - return decodeMap(name, (Map) object, key, value); - case UNION: - return decodeUnion(name, object, schema.getUnionSchemas()); - } - - throw new RecordConvertorException( - String.format("Unable decode object '%s' with schema type '%s'.", name, type.toString()) - ); - } - - @Nullable - private StructuredRecord decodeRecord(String name, - @Nullable Object object, Schema schema) throws RecordConvertorException { - if (object == null) { - return null; - } - - if (object instanceof StructuredRecord) { - return (StructuredRecord) object; - } else if (object instanceof Row) { - return decodeRecord((Row) object, schema); - } else if (object instanceof Map) { - return decodeRecord(name, (Map) object, schema); - } else if (object instanceof JsonObject) { - return decodeRecord(name, (JsonObject) object, schema); - } else if (object instanceof JsonArray) { - List values = decodeArray(name, object, schema.getComponentSchema()); - StructuredRecord.Builder builder = StructuredRecord.builder(schema); - builder.set(name, values); - return builder.build(); - } - throw new RecordConvertorException( - String.format("Unable decode object '%s' with schema type '%s'.", name, schema.getType().toString()) - ); - } - - private StructuredRecord decodeRecord(String name, - JsonObject nativeObject, Schema schema) throws RecordConvertorException { - StructuredRecord.Builder builder = StructuredRecord.builder(schema); - for (Schema.Field field : schema.getFields()) { - String fieldName = field.getName(); - Object fieldVal = nativeObject.get(fieldName); - builder.set(fieldName, decode(name, fieldVal, field.getSchema())); - } - return builder.build(); - } - - private StructuredRecord decodeRecord(String name, Map nativeObject, Schema schema) throws RecordConvertorException { - StructuredRecord.Builder builder = StructuredRecord.builder(schema); - for (Schema.Field field : schema.getFields()) { - String fieldName = field.getName(); - Object fieldVal = nativeObject.get(fieldName); - builder.set(fieldName, decode(name, fieldVal, field.getSchema())); - } - return builder.build(); - } - - @SuppressWarnings("RedundantCast") - private Object decodeSimpleTypes(String name, Object object, Schema schema) throws RecordConvertorException { - Schema.Type type = schema.getType(); - - if (object == null || JsonNull.INSTANCE.equals(object)) { - return null; - } else if (object instanceof JsonPrimitive) { - return JsParser.getValue((JsonPrimitive) object); - } else if (type != Schema.Type.STRING && object instanceof String) { - // Data prep can convert string to other primitive types. - // if the value is empty for non-string primitive return null - String val = (String) object; - if (val.trim().isEmpty()) { - return null; - } - } - - switch (type) { - case NULL: - return null; // nothing much to do here. - case INT: - if (object instanceof Integer || object instanceof Short) { - return (Integer) object; - } else if (object instanceof String) { - String value = (String) object; - try { - return Integer.parseInt(value); - } catch (NumberFormatException e) { - throw new RecordConvertorException( - String.format("Unable to convert '%s' to integer for field name '%s'", value, name), e); - } - } else { - throw new RecordConvertorException( - String.format("Schema specifies field '%s' is integer, but the value is not a integer or string. " + - "It is of type '%s'", name, object.getClass().getSimpleName()) - ); - } - case LONG: - if (object instanceof Long) { - return (Long) object; - } else if (object instanceof Integer) { - return ((Integer) object).longValue(); - } else if (object instanceof Short) { - return ((Short) object).longValue(); - } else if (object instanceof String) { - String value = (String) object; - try { - return Long.parseLong(value); - } catch (NumberFormatException e) { - throw new RecordConvertorException( - String.format("Unable to convert '%s' to long for field name '%s'", value, name), e); - } - } else { - throw new RecordConvertorException( - String.format("Schema specifies field '%s' is long, but the value is nor a string or long. " + - "It is of type '%s'", name, object.getClass().getSimpleName()) - ); - } - case FLOAT: - if (object instanceof Float) { - return (Float) object; - } else if (object instanceof Long) { - return ((Long) object).floatValue(); - } else if (object instanceof Integer) { - return ((Integer) object).floatValue(); - } else if (object instanceof Short) { - return ((Short) object).floatValue(); - } else if (object instanceof String) { - String value = (String) object; - try { - return Float.parseFloat(value); - } catch (NumberFormatException e) { - throw new RecordConvertorException( - String.format("Unable to convert '%s' to float for field name '%s'", value, name), e); - } - } else { - throw new RecordConvertorException( - String.format("Schema specifies field '%s' is float, but the value is nor a string or float. " + - "It is of type '%s'", name, object.getClass().getSimpleName()) - ); - } - case DOUBLE: - if (object instanceof Double) { - return (Double) object; - } else if (object instanceof BigDecimal) { - return ((BigDecimal) object).doubleValue(); - } else if (object instanceof Float) { - return ((Float) object).doubleValue(); - } else if (object instanceof Long) { - return ((Long) object).doubleValue(); - } else if (object instanceof Integer) { - return ((Integer) object).doubleValue(); - } else if (object instanceof Short) { - return ((Short) object).doubleValue(); - } else if (object instanceof String) { - String value = (String) object; - try { - return Double.parseDouble(value); - } catch (NumberFormatException e) { - throw new RecordConvertorException( - String.format("Unable to convert '%s' to double for field name '%s'", value, name), e); - } - } else { - throw new RecordConvertorException( - String.format("Schema specifies field '%s' is double, but the value is nor a string or double. " + - "It is of type '%s'", name, object.getClass().getSimpleName()) - ); - } - case BOOLEAN: - if (object instanceof Boolean) { - return (Boolean) object; - } else if (object instanceof String) { - String value = (String) object; - try { - return Boolean.parseBoolean(value); - } catch (NumberFormatException e) { - throw new RecordConvertorException( - String.format("Unable to convert '%s' to boolean for field name '%s'", value, name), e); - } - } else { - throw new RecordConvertorException( - String.format("Schema specifies field '%s' is double, but the value is nor a string or boolean. " + - "It is of type '%s'", name, object.getClass().getSimpleName()) - ); - } - - case STRING: - return object.toString(); - - case BYTES: - if (object instanceof byte[]) { - return (byte[]) object; - } else if (object instanceof Boolean) { - return Bytes.toBytes((Boolean) object); - } else if (object instanceof Double) { - return Bytes.toBytes((Double) object); - } else if (object instanceof Float) { - return Bytes.toBytes((Float) object); - } else if (object instanceof Long) { - return Bytes.toBytes((Long) object); - } else if (object instanceof Integer) { - return Bytes.toBytes((Integer) object); - } else if (object instanceof Short) { - return Bytes.toBytes((Short) object); - } else if (object instanceof String) { - return Bytes.toBytes((String) object); - } else if (object instanceof BigDecimal) { - return Bytes.toBytes((BigDecimal) object); - } else { - throw new RecordConvertorException( - String.format("Unable to convert '%s' to bytes for field name '%s'", object.toString(), name) - ); - } - } - throw new RecordConvertorException( - String.format("Unable decode object '%s' with schema type '%s'.", name, type.toString()) - ); - } - - private Map decodeMap(String name, - Map object, Schema key, Schema value) - throws RecordConvertorException { - Map output = Maps.newHashMap(); - for (Map.Entry entry : object.entrySet()) { - output.put(decode(name, entry.getKey(), key), decode(name, entry.getValue(), value)); - } - return output; - } - - private Object decodeUnion(String name, Object object, List schemas) throws RecordConvertorException { - for (Schema schema : schemas) { - return decode(name, object, schema); - } - throw new RecordConvertorException( - String.format("Unable decode object '%s'.", name) - ); - } - - private List decodeArray(String name, Object object, Schema schema) throws RecordConvertorException { - if (object instanceof List) { - return decodeArray(name, (List) object, schema); - } else if (object instanceof JsonArray) { - return decodeArray(name, (JsonArray) object, schema); - } - throw new RecordConvertorException( - String.format("Unable to decode array '%s'", name) - ); - } - - private List decodeArray(String name, JsonArray list, Schema schema) throws RecordConvertorException { - List array = Lists.newArrayListWithCapacity(list.size()); - for (int i = 0; i < list.size(); ++i) { - array.add(decode(name, list.get(i), schema)); - } - return array; - } - - private List decodeArray(String name, List list, Schema schema) throws RecordConvertorException { - List array = Lists.newArrayListWithCapacity(list.size()); - for (Object object : list) { - array.add(decode(name, object, schema)); - } - return array; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/RecordConvertorException.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/RecordConvertorException.java deleted file mode 100644 index 405075586..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/RecordConvertorException.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.wrangler.api.Row; - -/** - * Throw when there is issue with conversion of {@link Row} to {@link StructuredRecord} - */ -public class RecordConvertorException extends Exception { - public RecordConvertorException(String message) { - super(message); - } - - public RecordConvertorException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ReferenceNames.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/ReferenceNames.java deleted file mode 100644 index 38efe00c1..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/ReferenceNames.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import java.util.regex.Pattern; - -/** - * Utility methods for reference name - */ -public class ReferenceNames { - private static final Pattern DATASET_PATTERN = Pattern.compile("[$\\.a-zA-Z0-9_-]+"); - private static final String REGEX = "[^$\\.a-zA-Z0-9_-]+"; - - private ReferenceNames() { - } - - /** - * Check if a given reference name is valid - * - * @param referenceName reference name to check - */ - public static void validate(String referenceName) { - if (!DATASET_PATTERN.matcher(referenceName).matches()) { - throw new IllegalArgumentException( - String.format("Invalid reference name '%s'. Supported characters are: letters, " + - "numbers, and '_', '-', '.', or '$'.", referenceName)); - } - } - - /** - * Cleanse the given reference name. This method will remove all the disallowed characters in the given reference - * name. For example, 111-22-33(1).csv will get convert to 111-22-331.csv. If no valid characters, the method will - * return "sample". - * - * @param referenceName the old reference name - * @return the reference name with only allowed characters - */ - public static String cleanseReferenceName(String referenceName) { - String result = referenceName.replaceAll(REGEX, ""); - return result.isEmpty() ? "sample" : result; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/RowHelper.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/RowHelper.java deleted file mode 100644 index 062f2b8ef..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/RowHelper.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import io.cdap.wrangler.api.Row; - -import java.util.List; - -/** - * Utility methods for {@link Row} - */ -public class RowHelper { - private RowHelper() { - throw new AssertionError("Cannot instantiate a static utility class"); - } - - /** - * Creates a merged record after iterating through all rows. - * - * @param rows list of all rows. - * @return A single record will rows merged across all columns. - */ - public static Row createMergedRow(List rows) { - Row merged = new Row(); - for (Row row : rows) { - for (int i = 0; i < row.width(); ++i) { - Object o = row.getValue(i); - if (o != null) { - int idx = merged.find(row.getColumn(i)); - if (idx == -1) { - merged.add(row.getColumn(i), o); - } - } - } - } - return merged; - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/SchemaConverter.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/SchemaConverter.java deleted file mode 100644 index a658c8115..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/SchemaConverter.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.data.schema.Schema.Field; -import io.cdap.cdap.api.data.schema.Schema.LogicalType; -import io.cdap.cdap.api.data.schema.UnsupportedTypeException; -import io.cdap.cdap.internal.guava.reflect.TypeToken; -import io.cdap.cdap.internal.io.AbstractSchemaGenerator; -import io.cdap.directives.parser.JsParser; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import org.json.JSONException; - -import java.math.BigDecimal; -import java.nio.ByteBuffer; -import java.sql.Time; -import java.sql.Timestamp; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Set; -import javax.annotation.Nullable; - -/** - * This class provides functionality to retrieve {@link Schema} from a row or an object. - */ -public final class SchemaConverter { - - /** - * Generates a {@link Schema} given a row. - * - * @param id Schema id - * @return returns {@link Schema} - * @throws UnsupportedTypeException - * @throws JSONException - */ - public Schema toSchema(String id, Row row) throws RecordConvertorException { - List fields = new ArrayList<>(); - - // Iterate through each field in the row. - for (Pair column : row.getFields()) { - String name = column.getFirst(); - Object value = column.getSecond(); - - if (value instanceof Schema) { - fields.addAll(((Schema) value).getFields()); - } else { - Schema schema = getSchema(value, name); - if (schema != null) { - fields.add(Schema.Field.of(name, schema)); - } - } - } - return Schema.recordOf(id, fields); - } - - /** - * Generates the CDAP Schema for the given object - * - * @param value the value to retrieve schema - * @param name name of the field - * @return the schema of this object - */ - @Nullable - public Schema getSchema(Object value, String name) throws RecordConvertorException { - return getSchema(value, name, null); - } - - /** - * Generates the CDAP Schema for the given object - * - * @param value the value to retrieve schema - * @param name name of the field - * @param recordPrefix prefix to append at the beginning of a custom record - * @return the schema of this object - * NOTE: ANY NEWLY SUPPORTED DATATYPE SHOULD ALSO BE REGISTERED IN {@link KryoSerializer} - */ - @Nullable - public Schema getSchema(Object value, String name, @Nullable String recordPrefix) throws RecordConvertorException { - // First, we check if object is of simple type. - if (value instanceof String || value instanceof Integer || value instanceof Long || value instanceof Short || - value instanceof Double || value instanceof Float || value instanceof Boolean || value instanceof byte[] || - value instanceof ByteBuffer) { - try { - return Schema.nullableOf(new SimpleSchemaGenerator().generate(value.getClass())); - } catch (UnsupportedTypeException e) { - throw new RecordConvertorException( - String.format("Unable to convert field '%s' to basic type.", name), e); - } - } - - if (value instanceof BigDecimal) { - // TODO CDAP-15361 precision should be derived from the schema of the row. - return Schema.nullableOf(Schema.decimalOf(38, ((BigDecimal) value).scale())); - } - - if (value instanceof LocalDate) { - return Schema.nullableOf(Schema.of(Schema.LogicalType.DATE)); - } - - if (value instanceof LocalTime) { - return Schema.nullableOf(Schema.of(Schema.LogicalType.TIME_MICROS)); - } - - if (value instanceof ZonedDateTime) { - return Schema.nullableOf(Schema.of(Schema.LogicalType.TIMESTAMP_MICROS)); - } - - if (value instanceof LocalDateTime) { - return Schema.nullableOf(Schema.of(LogicalType.DATETIME)); - } - - // TODO - remove all the instaces of java.util.Date once all the directives support LogicalType. - if (value instanceof Date || value instanceof java.sql.Date || value instanceof Time - || value instanceof Timestamp) { - return Schema.nullableOf(Schema.of(Schema.Type.LONG)); - } - - if (value instanceof Map) { - return Schema.nullableOf(Schema.mapOf(Schema.of(Schema.Type.STRING), Schema.of(Schema.Type.STRING))); - } - - if (value instanceof JsonElement) { - return toSchema(name, (JsonElement) value); - } - - if (value instanceof Collection) { - Collection collection = (Collection) value; - for (Object listObject : collection) { - if (listObject == null) { - continue; - } - - Schema schema = getSchema(listObject, name, recordPrefix); - // this means schema is unknown and is not supported. - if (schema == null) { - return null; - } - return Schema.nullableOf(Schema.arrayOf(schema)); - } - } - - if (value instanceof Row) { - List fields = new ArrayList<>(); - String recordTypeName = ""; - if (recordPrefix != null) { - recordTypeName = recordPrefix + "."; - } - recordTypeName = recordTypeName + name; - for (Pair field: ((Row) value).getFields()) { - if (field.getSecond() != null) { - fields.add(Field.of(field.getFirst(), getSchema(field.getSecond(), field.getFirst(), recordTypeName))); - } - } - Schema namingSchema = Schema.recordOf(fields); - recordTypeName = recordTypeName + namingSchema.getRecordName(); - return Schema.nullableOf(Schema.recordOf(recordTypeName, fields)); - } - - return null; - } - - @Nullable - private Schema toSchema(String name, JsonElement element) throws RecordConvertorException { - Schema schema = null; - if (element == null) { - return null; - } - if (element.isJsonObject() || element.isJsonArray()) { - schema = toComplexSchema(name, element); - } else if (element.isJsonPrimitive()) { - schema = toSchema(name, element.getAsJsonPrimitive()); - } else if (element.isJsonNull()) { - schema = Schema.of(Schema.Type.NULL); - } - return schema; - } - - private Schema toSchema(String name, JsonArray array) throws RecordConvertorException { - return toSchema(name, array, null); - } - - private Schema toSchema(String name, JsonArray array, String recordPrefix) throws RecordConvertorException { - int[] types = new int[3]; - types[0] = types[1] = types[2] = 0; - for (int i = 0; i < array.size(); ++i) { - JsonElement item = array.get(i); - if (item.isJsonArray()) { - types[1]++; - } else if (item.isJsonPrimitive()) { - types[0]++; - } else if (item.isJsonObject()) { - types[2]++; - } - } - - int sum = types[0] + types[1] + types[2]; - if (sum > 0) { - JsonElement child = array.get(0); - if (types[2] > 0 || types[1] > 0) { - return Schema.nullableOf(Schema.arrayOf(toComplexSchema(name, child, recordPrefix))); - } else if (types[0] > 0) { - return Schema.nullableOf(Schema.arrayOf(toSchema(name, child.getAsJsonPrimitive()))); - } - } - return Schema.nullableOf(Schema.arrayOf(Schema.of(Schema.Type.NULL))); - } - - private Schema toSchema(String name, JsonPrimitive primitive) throws RecordConvertorException { - Object value = JsParser.getValue(primitive); - try { - return Schema.nullableOf(new SimpleSchemaGenerator().generate(value.getClass())); - } catch (UnsupportedTypeException e) { - throw new RecordConvertorException( - String.format("Unable to convert field '%s' to basic type.", name), e); - } - } - - private Schema toSchema(String name, JsonObject object) throws RecordConvertorException { - return toSchema(name, object, null); - } - - private Schema toSchema(String name, JsonObject object, @Nullable String recordPrefix) - throws RecordConvertorException { - List fields = new ArrayList<>(); - - String recordTypeName = ""; - if (recordPrefix != null) { - recordTypeName = recordPrefix + "."; - } - recordTypeName = recordTypeName + name; - - for (Map.Entry next : object.entrySet()) { - String key = next.getKey(); - JsonElement child = next.getValue(); - Schema schema = null; - if (child.isJsonObject() || child.isJsonArray()) { - schema = toComplexSchema(key, child, recordTypeName); - } else if (child.isJsonPrimitive()) { - schema = toSchema(key, child.getAsJsonPrimitive()); - } - if (schema != null) { - fields.add(Schema.Field.of(key, schema)); - } - } - if (fields.size() == 0) { - return Schema.nullableOf(Schema.arrayOf(Schema.of(Schema.Type.NULL))); - } - Schema namingSchema = Schema.recordOf(fields); - recordTypeName = recordTypeName + namingSchema.getRecordName(); - return Schema.recordOf(recordTypeName, fields); - } - - private Schema toComplexSchema(String name, JsonElement element) throws RecordConvertorException { - return toComplexSchema(name, element, null); - } - - private Schema toComplexSchema(String name, - JsonElement element, @Nullable String recordPrefix) throws RecordConvertorException { - if (element.isJsonObject()) { - return toSchema(name, element.getAsJsonObject(), recordPrefix); - } else if (element.isJsonArray()) { - return toSchema(name, element.getAsJsonArray(), recordPrefix); - } else if (element.isJsonPrimitive()) { - return toSchema(name, element.getAsJsonPrimitive()); - } - return null; - } - - - private static final class SimpleSchemaGenerator extends AbstractSchemaGenerator { - @Override - protected Schema generateRecord(TypeToken typeToken, Set set, - boolean b) throws UnsupportedTypeException { - // we don't actually leverage this method for types we support, so no need to implement it - throw new UnsupportedTypeException(String.format("Generating record of type %s is not supported.", - typeToken)); - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/StructuredRecordJsonConverter.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/StructuredRecordJsonConverter.java deleted file mode 100644 index 4362179b0..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/StructuredRecordJsonConverter.java +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import com.google.common.collect.ImmutableMap; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonToken; -import com.google.gson.stream.JsonWriter; -import io.cdap.cdap.api.common.Bytes; -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.schema.Schema; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.StringWriter; -import java.lang.reflect.Array; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; - -/** - * Utility class for converting {@link StructuredRecord} to and from json as the json - * specification : http://avro.apache.org/docs/current/spec.html#json_encoding - */ -public final class StructuredRecordJsonConverter { - - // Known Java type to schema type mapping - // Doesn't have map and array as those need to use instanceof to check - private static final Map, Schema.Type> TYPE_TO_SCHEMA = new IdentityHashMap<>( - ImmutableMap., Schema.Type>builder() - .put(Boolean.class, Schema.Type.BOOLEAN) - .put(Byte.class, Schema.Type.INT) - .put(Short.class, Schema.Type.INT) - .put(Integer.class, Schema.Type.INT) - .put(Long.class, Schema.Type.LONG) - .put(Float.class, Schema.Type.FLOAT) - .put(Double.class, Schema.Type.DOUBLE) - .put(String.class, Schema.Type.STRING) - .put(ByteBuffer.class, Schema.Type.BYTES) - .put(byte[].class, Schema.Type.BYTES) - .put(StructuredRecord.class, Schema.Type.RECORD) - .build() - ); - - /** - * Converts a {@link StructuredRecord} to a json string. - */ - public static String toJsonString(StructuredRecord record) throws IOException { - StringWriter strWriter = new StringWriter(); - JsonWriter writer = new JsonWriter(strWriter); - try { - writeJson(writer, record.getSchema(), record); - return strWriter.toString(); - } finally { - writer.close(); - } - } - - private static Object readJson(JsonReader reader, Schema schema) throws IOException { - switch (schema.getType()) { - case NULL: - reader.nextNull(); - return null; - case BOOLEAN: - return reader.nextBoolean(); - case INT: - return reader.nextInt(); - case LONG: - return reader.nextLong(); - case FLOAT: - // Force down cast - return (float) reader.nextDouble(); - case DOUBLE: - return reader.nextDouble(); - case BYTES: - return readBytes(reader); - case STRING: - return reader.nextString(); - case ENUM: - // Currently there is no standard container to represent enum type - return reader.nextString(); - case ARRAY: - return readArray(reader, schema.getComponentSchema()); - case MAP: - return readMap(reader, schema.getMapSchema()); - case RECORD: - return readRecord(reader, schema); - case UNION: - return readUnion(reader, schema); - } - - throw new IOException("Unsupported schema: " + schema); - } - - private static byte[] readBytes(JsonReader reader) throws IOException { - ByteArrayOutputStream os = new ByteArrayOutputStream(128); - reader.beginArray(); - while (reader.peek() != JsonToken.END_ARRAY) { - os.write(reader.nextInt()); - } - reader.endArray(); - return os.toByteArray(); - } - - private static List readArray(JsonReader reader, Schema elementSchema) throws IOException { - List result = new ArrayList<>(); - reader.beginArray(); - while (reader.peek() != JsonToken.END_ARRAY) { - result.add(readJson(reader, elementSchema)); - } - reader.endArray(); - return result; - } - - private static Map readMap(JsonReader reader, - Map.Entry mapSchema) throws IOException { - Schema keySchema = mapSchema.getKey(); - if (!keySchema.isCompatible(Schema.of(Schema.Type.STRING))) { - throw new IOException("Complex key type not supported: " + keySchema); - } - - Schema valueSchema = mapSchema.getValue(); - Map result = new HashMap<>(); - - reader.beginObject(); - while (reader.peek() != JsonToken.END_OBJECT) { - Object key = convertKey(reader.nextName(), keySchema.getType()); - result.put(key, readJson(reader, valueSchema)); - } - reader.endObject(); - - return result; - } - - private static Object convertKey(String key, Schema.Type type) throws IOException { - switch (type) { - case STRING: - return key; - case BOOLEAN: - return Boolean.valueOf(key); - case INT: - return Integer.valueOf(key); - case LONG: - return Long.valueOf(key); - case FLOAT: - return Float.valueOf(key); - case DOUBLE: - return Double.valueOf(key); - } - throw new IOException("Unable to convert string to type " + type); - } - - private static StructuredRecord readRecord(JsonReader reader, Schema schema) throws IOException { - StructuredRecord.Builder builder = StructuredRecord.builder(schema); - - reader.beginObject(); - while (reader.peek() != JsonToken.END_OBJECT) { - Schema.Field field = schema.getField(reader.nextName()); - if (field == null) { - // Ignore unrecognized fields - reader.skipValue(); - continue; - } - - builder.set(field.getName(), readJson(reader, field.getSchema())); - } - reader.endObject(); - - return builder.build(); - } - - private static Object readUnion(JsonReader reader, Schema unionSchema) throws IOException { - JsonToken token = reader.peek(); - if (token == JsonToken.NULL) { - reader.nextNull(); - return null; - } - - reader.beginObject(); - String type = reader.nextName(); - - Schema matchingSchema = null; - for (Schema schema : unionSchema.getUnionSchemas()) { - if (schema.getType().name().toLowerCase().equals(type) || - (schema.getType() == Schema.Type.RECORD && schema.getRecordName().equals(type))) { - matchingSchema = schema; - break; - } - } - if (matchingSchema == null) { - throw new IOException("No matching schema found for type " + type + " in union types: " + unionSchema); - } - Object object = readJson(reader, matchingSchema); - reader.endObject(); - return object; - } - - private static void writeJson(JsonWriter writer, Schema schema, Object value) throws IOException { - switch (schema.getType()) { - case NULL: - writer.nullValue(); - break; - case BOOLEAN: - writer.value((Boolean) value); - break; - case INT: - case LONG: - case FLOAT: - case DOUBLE: - writer.value((Number) value); - break; - case BYTES: - writeBytes(writer, value); - break; - case STRING: - writer.value((String) value); - break; - case ENUM: - writer.value(((Enum) value).name()); - break; - case ARRAY: - writeArray(writer, schema.getComponentSchema(), value); - break; - case MAP: - writeMap(writer, schema.getMapSchema(), value); - break; - case RECORD: - writeRecord(writer, schema, value); - break; - case UNION: - writeUnion(writer, schema, value); - break; - } - } - - private static void writeUnion(JsonWriter writer, Schema schema, Object value) throws IOException { - - Schema actualSchema = findUnionSchema(schema, value); - Schema.Type type = actualSchema.getType(); - if (type == Schema.Type.NULL) { - writer.nullValue(); - return; - } - - writer.beginObject(); - if (type == Schema.Type.RECORD) { - writer.name(actualSchema.getRecordName()); - } else { - writer.name(type.name().toLowerCase()); - } - writeJson(writer, actualSchema, value); - writer.endObject(); - } - - private static void writeBytes(JsonWriter writer, Object value) throws IOException { - if (value instanceof ByteBuffer) { - writeBytes(writer, (ByteBuffer) value); - } else if (value.getClass().isArray() && value.getClass().getComponentType().equals(byte.class)) { - byte[] bytes = (byte[]) value; - writeBytes(writer, bytes, 0, bytes.length); - } else { - throw new IOException("Expects either ByteBuffer or byte[]. Got " + value.getClass()); - } - } - - private static void writeBytes(JsonWriter writer, ByteBuffer buffer) throws IOException { - if (buffer.hasArray()) { - writeBytes(writer, buffer.array(), buffer.arrayOffset() + buffer.position(), buffer.remaining()); - } else { - byte[] buf = Bytes.getBytes(buffer); - buffer.mark(); - buffer.get(buf); - buffer.reset(); - writeBytes(writer, buf, 0, buf.length); - } - } - - private static void writeBytes(JsonWriter writer, byte[] bytes, int off, int len) throws IOException { - writer.beginArray(); - for (int i = off; i < off + len; i++) { - writer.value(bytes[i]); - } - writer.endArray(); - } - - private static void writeArray(JsonWriter writer, Schema elementSchema, Object value) throws IOException { - if (!(value instanceof Collection) && !value.getClass().isArray()) { - throw new IOException("Expects either Collection or array. Got: " + value.getClass()); - } - - writer.beginArray(); - if (value instanceof Collection) { - for (Object element : (Collection) value) { - writeJson(writer, elementSchema, element); - } - } else { - for (int i = 0; i < Array.getLength(value); i++) { - writeJson(writer, elementSchema, Array.get(value, i)); - } - } - writer.endArray(); - } - - private static void writeMap(JsonWriter writer, - Map.Entry entrySchema, Object value) throws IOException { - if (!(value instanceof Map)) { - throw new IOException("Expects a map, have " + value.getClass()); - } - - Schema keySchema = entrySchema.getKey(); - if (!keySchema.isCompatible(Schema.of(Schema.Type.STRING))) { - throw new IOException("Complex key type not supported: " + keySchema); - } - - Schema valueSchema = entrySchema.getValue(); - - writer.beginObject(); - for (Map.Entry entry : ((Map) value).entrySet()) { - writer.name(entry.getKey().toString()); - writeJson(writer, valueSchema, entry.getValue()); - } - writer.endObject(); - } - - private static void writeRecord(JsonWriter writer, Schema schema, Object value) throws IOException { - if (!(value instanceof StructuredRecord)) { - throw new IOException("Expects a record, but have " + value.getClass()); - } - - StructuredRecord record = (StructuredRecord) value; - writer.beginObject(); - for (Schema.Field field : schema.getFields()) { - Object fieldValue = record.get(field.getName()); - if (fieldValue != null) { - writer.name(field.getName()); - writeJson(writer, field.getSchema(), fieldValue); - } - } - writer.endObject(); - } - - private static Schema findUnionSchema(Schema unionSchema, @Nullable Object value) throws IOException { - Schema.Type type = getSchemaType(value); - - for (Schema schema : unionSchema.getUnionSchemas()) { - // Just match the type, not matching the detail schema as it'd be too expensive. - if (schema.getType() == type) { - return schema; - } - } - throw new IOException("Value type " + type + " not valid in union: " + unionSchema); - } - - private static Schema.Type getSchemaType(@Nullable Object value) throws IOException { - if (value == null) { - return Schema.Type.NULL; - } - - Class cls = value.getClass(); - Schema.Type type = TYPE_TO_SCHEMA.get(cls); - if (type != null) { - return type; - } - - if (Collection.class.isAssignableFrom(cls) || cls.isArray()) { - return Schema.Type.ARRAY; - } - - if (Map.class.isAssignableFrom(cls)) { - return Schema.Type.MAP; - } - - throw new IOException("Unsupported type found in the record: " + cls); - } - - private StructuredRecordJsonConverter() { - //inaccessible constructor for static class - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/StructuredToRowTransformer.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/StructuredToRowTransformer.java deleted file mode 100644 index d17f900ee..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/StructuredToRowTransformer.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.utils; - -import io.cdap.cdap.api.common.Bytes; -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.format.UnexpectedFormatException; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Row; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; -import javax.annotation.Nullable; - -/** - * Transformer to transform {@link StructuredRecord} to {@link Row} - */ -public class StructuredToRowTransformer { - private StructuredToRowTransformer() { - } - - /** - * Get the row from the given transform. - * - * @param record the record to transform - * @return the row corresponding to the record - */ - public static Row transform(StructuredRecord record) { - Row row = new Row(); - for (Schema.Field field : record.getSchema().getFields()) { - row.add(field.getName(), getValue(record, field.getName())); - } - return row; - } - - /** - * Get the field value from the given record - * - * @param input input record - * @param fieldName field name to get value from - * @return the value of the field in the row - */ - @Nullable - public static Object getValue(StructuredRecord input, String fieldName) { - Schema fieldSchema = input.getSchema().getField(fieldName).getSchema(); - fieldSchema = fieldSchema.isNullable() ? fieldSchema.getNonNullable() : fieldSchema; - Schema.LogicalType logicalType = fieldSchema.getLogicalType(); - - if (logicalType != null) { - switch (logicalType) { - case DATE: - return input.getDate(fieldName); - case TIME_MILLIS: - case TIME_MICROS: - return input.getTime(fieldName); - case TIMESTAMP_MILLIS: - case TIMESTAMP_MICROS: - return input.getTimestamp(fieldName); - case DECIMAL: - return input.getDecimal(fieldName); - case DATETIME: - return input.getDateTime(fieldName); - default: - throw new UnexpectedFormatException("Field type " + logicalType + " is not supported."); - } - } - - Object val = input.get(fieldName); - return processValue(val, fieldSchema, fieldName); - } - - @Nullable - private static Object processValue(@Nullable Object val, Schema schema, String fieldName) { - if (val == null) { - return null; - } - switch(schema.getType()) { - // if the type is bytes, need to make sure the value is byte array since byte buffer is not serializable - case BYTES: - return val instanceof ByteBuffer ? Bytes.toBytes((ByteBuffer) val) : val; - // Recursively process structured records. - case RECORD: - return transform((StructuredRecord) val); - case ARRAY: - if (val instanceof Iterable) { - List rowList = new ArrayList<>(); - for (Object item : (Iterable) val) { - if ((item != null) && (schema.getComponentSchema() != null)) { - rowList.add(processValue(item, schema.getComponentSchema(), fieldName)); - } else { - rowList.add(item); - } - } - return rowList; - } else { - throw new IllegalArgumentException("Field " + fieldName + " expected an array but received an invalid value"); - } - default: - // If the logical type is present in complex types, it will be retrieved as corresponding - // simple type (int/long). - return val; - } - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/utils/TypeConvertor.java b/wrangler-core/src/main/java/io/cdap/wrangler/utils/TypeConvertor.java deleted file mode 100644 index bc83381be..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/utils/TypeConvertor.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import io.cdap.cdap.api.common.Bytes; - -/** - * Provides various java type conversions. - */ -public final class TypeConvertor { - - /** - * Converts a java type to String. - * - * @param object of any type. - * @return object converted to type string. - */ - public static String toString(Object object) throws IllegalArgumentException { - if (object == null) { - return null; - } - if (object instanceof String) { - return (String) object; - } else if (object instanceof Integer) { - return Integer.toString((Integer) object); - } else if (object instanceof Short) { - return Short.toString((Short) object); - } else if (object instanceof Long) { - return Long.toString((Long) object); - } else if (object instanceof Float) { - return Float.toString((Float) object); - } else if (object instanceof Double) { - return Double.toString((Double) object); - } else if (object instanceof byte[]) { - return Bytes.toString((byte[]) object); - } else if (object instanceof Character) { - return Character.toString((Character) object); - } - - throw new IllegalArgumentException( - String.format("Cannot convert type '%s' to string", object.getClass().getSimpleName()) - ); - } -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/validator/ColumnNameValidator.java b/wrangler-core/src/main/java/io/cdap/wrangler/validator/ColumnNameValidator.java deleted file mode 100644 index dcf43b113..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/validator/ColumnNameValidator.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.validator; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.HashSet; -import java.util.Locale; -import java.util.Set; - -/** - * This class performs validation on the column names of the record. - * - *

- * Following are the checks that this validator performs on the column. - *

    - *
  • Column name is a an identifier that is a sequence of alphaNumeric and under_score - * characters or a sequence.
  • - *
  • Column name is a non-reserved word. Check reserved-column-names.txt for the list of names.
  • - *
  • Column name is less than 255 characters.
  • - *
- *

- */ -public class ColumnNameValidator implements Validator { - private static final String RESERVED_WORDS_FILE = "reserved-column-names.txt"; - private final Set reservedWords = new HashSet<>(); - - /** - * Initializes this validator. - * - * @throws Exception thrown when reserved words file is not accessible. - */ - public void initialize() throws Exception { - InputStream in = ColumnNameValidator.class.getClassLoader().getResourceAsStream(RESERVED_WORDS_FILE); - if (in == null) { - throw new Exception("Unable to load '" + RESERVED_WORDS_FILE + "' from the resources"); - } - InputStreamReader isr = new InputStreamReader(in); - try (BufferedReader reader = new BufferedReader(isr)) { - String word; - while ((word = reader.readLine()) != null) { - reservedWords.add(word.toLowerCase(Locale.ENGLISH)); - } - } - } - - /** - * Validates the T properties. - * - * @param name to be validated. - * @throws ValidatorException thrown when there are issues with validation. - */ - @Override - public void validate(String name) throws ValidatorException { - // Only alphanumeric and underscore (_) allowed. - if (!name.matches("^[a-zA-Z0-9_]*$")) { - throw new ValidatorException("Column '" + name + "' contains non-alphanumeric characters"); - } - // Reserved words not allowed - if (reservedWords.contains(name)) { - throw new ValidatorException("Column '" + name + "' is a reserved word."); - } - // Column name length. - if (name.length() > 255) { - throw new ValidatorException("Column '" + name + "' is greater than 255 characters."); - } - } -} - - diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/validator/Validator.java b/wrangler-core/src/main/java/io/cdap/wrangler/validator/Validator.java deleted file mode 100644 index 7f44dace4..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/validator/Validator.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.validator; - -import io.cdap.wrangler.api.annotations.PublicEvolving; - -/** - * Interface for Validating 'T' properties. - * - * @param type of object to validate - */ -@PublicEvolving -public interface Validator { - /** - * Initializes the validator. - * @throws Exception thrown when there are initialization error. - */ - void initialize() throws Exception; - - /** - * Validates the T properties. - * - * @param value to be validated. - * @throws ValidatorException thrown when there are issues with validation. - */ - void validate(T value) throws ValidatorException; -} diff --git a/wrangler-core/src/main/java/io/cdap/wrangler/validator/ValidatorException.java b/wrangler-core/src/main/java/io/cdap/wrangler/validator/ValidatorException.java deleted file mode 100644 index 2777e74c7..000000000 --- a/wrangler-core/src/main/java/io/cdap/wrangler/validator/ValidatorException.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.validator; - -/** - * Expection thrown when there are issues with validation. - */ -public class ValidatorException extends Exception { - public ValidatorException(String s) { - super(s); - } -} diff --git a/wrangler-core/src/main/resources/.properties b/wrangler-core/src/main/resources/.properties deleted file mode 100644 index 4315f6b1d..000000000 --- a/wrangler-core/src/main/resources/.properties +++ /dev/null @@ -1,6 +0,0 @@ -core.version=${project.version} -plugin.version=${project.version} -project.description=${project.description} -marshalling.method=POST -build.number=${buildNumber} -request.serialization.version=1.0 diff --git a/wrangler-core/src/main/resources/DateRegexesGrouped.txt b/wrangler-core/src/main/resources/DateRegexesGrouped.txt deleted file mode 100644 index c570f1df5..000000000 --- a/wrangler-core/src/main/resources/DateRegexesGrouped.txt +++ /dev/null @@ -1,231 +0,0 @@ ---------Group 1: [/?dM2y2]--------- -M/d/yy ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{2}$ -dd/MM/yy ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{2}$ -yy/MM/dd ^[0-9]{2}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])$ -d/MM/yy ^(0?[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{2}$ ---------Group 2: [.?dM2y2]--------- -dd.MM.yy ^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{2}$ -d.M.yy ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{2}$ -d.MM.yy ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{2}$ -yy. M. d ^[0-9]{2}\. (0?[1-9]|1[0-2])\. (0?[1-9]|[1-2][0-9]|3[0-1])$ -yy.M.d ^[0-9]{2}\.(0?[1-9]|1[0-2])\.(0?[1-9]|[1-2][0-9]|3[0-1])$ -yy.d.M ^[0-9]{2}\.(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])$ -d.M.yy. ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{2}\.$ ---------Group 3: [-?dM2y2]--------- -yy-MM-dd ^[0-9]{2}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1])$ -yy-M-d ^[0-9]{2}\-(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])$ -M-d-yy ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{2}$ -dd-MM-yy ^(0[1-9]|[1-2][0-9]|3[0-1])\-(0[1-9]|1[0-2])\-[0-9]{2}$ -d-M-yy ^(0?[1-9]|[1-2][0-9]|3[0-1])\-(0?[1-9]|1[0-2])\-[0-9]{2}$ ---------Group 4: [ ?dM4y4]--------- -MMM d, yyyy ^(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?)) (0?[1-9]|[1-2][0-9]|3[0-1]), [0-9]{4}$ -d MMM yyyy ^(0?[1-9]|[1-2][0-9]|3[0-1]) (([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?)) [0-9]{4}$ -MMMM d, yyyy ^(\p{L}{3,10}) (0?[1-9]|[1-2][0-9]|3[0-1]), [0-9]{4}$ -d MMMM yyyy ^(0?[1-9]|[1-2][0-9]|3[0-1]) (\p{L}{3,10}) [0-9]{4}$ -d. MMMM yyyy ^(0?[1-9]|[1-2][0-9]|3[0-1])\. (\p{L}{3,10}) [0-9]{4}$ -dd MMMM yyyy ^(0[1-9]|[1-2][0-9]|3[0-1]) (\p{L}{3,10}) [0-9]{4}$ -EEEE, MMMM d, yyyy ^(\p{L}{3,10}), (\p{L}{3,10}) (0?[1-9]|[1-2][0-9]|3[0-1]), [0-9]{4}$ -EEEE d MMMM yyyy ^(\p{L}{3,10}) (0?[1-9]|[1-2][0-9]|3[0-1]) (\p{L}{3,10}) [0-9]{4}$ -EEEE, d. MMMM yyyy ^(\p{L}{3,10}), (0?[1-9]|[1-2][0-9]|3[0-1])\. (\p{L}{3,10}) [0-9]{4}$ -EEEE, d MMMM yyyy ^(\p{L}{3,10}), (0?[1-9]|[1-2][0-9]|3[0-1]) (\p{L}{3,10}) [0-9]{4}$ -MMM d yyyy ^(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?)) (0?[1-9]|[1-2][0-9]|3[0-1]) [0-9]{4}$ -MMMM d yyyy ^(\p{L}{3,10}) (0?[1-9]|[1-2][0-9]|3[0-1]) [0-9]{4}$ ---------Group 5: [.?dM2y4]--------- -dd.MM.yyyy ^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{4}$ -d.M.yyyy ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{4}$ -yyyy.MM.dd ^[0-9]{4}\.(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1])$ -yyyy.MM.dd. ^[0-9]{4}\.(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1])\.$ -d.MM.yyyy ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{4}$ -yyyy. M. d ^[0-9]{4}\. (0?[1-9]|1[0-2])\. (0?[1-9]|[1-2][0-9]|3[0-1])$ -yyyy.d.M ^[0-9]{4}\.(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])$ -dd.MM.yyyy. ^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{4}\.$ ---------Group 6: [-?dM4y4]--------- -dd-MMM-yyyy ^(0[1-9]|[1-2][0-9]|3[0-1])\-(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?))\-[0-9]{4}$ -d-MMM-yyyy ^(0?[1-9]|[1-2][0-9]|3[0-1])\-(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?))\-[0-9]{4}$ ---------Group 7: [-?dM2y4]--------- -yyyy-MM-dd ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1])$ -yyyy-M-d ^[0-9]{4}\-(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])$ -M-d-yyyy ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{4}$ -yyyy-MM-ddXXX ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1])[+-](0[0-9]|1[0-2]):00$ -dd-MM-yyyy ^(0[1-9]|[1-2][0-9]|3[0-1])\-(0[1-9]|1[0-2])\-[0-9]{4}$ ---------Group 8: [/?dM2y4]--------- -yyyy/MM/dd ^[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])$ -dd/MM/yyyy ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4}$ -d/M/yyyy ^(0?[1-9]|[1-2][0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/[0-9]{4}$ -MM/dd/yyyy ^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4}$ -M/d/yyyy ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4}$ ---------Group 9: [??dM2y4]--------- -yyyy'年'M'月'd'日' ^[0-9]{4}年(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[0-1])日$ -yyyy'年'M'月'd'日' EEEE ^[0-9]{4}年(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[0-1])日 (\p{L}{3,10})$ -yyyyMMddZ ^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])[+-](0[0-9]|1[0-2])00$ -yyyyMMdd ^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ ---------Group 10: [/:dM2y2Hm]--------- -M/d/yy h:mm a ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{2} (0?[1-9]|1[0-2]):([0-5][0-9]) \p{L}{2}$ -dd/MM/yy HH:mm ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{2} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -dd/MM/yy h:mm a ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{2} (0?[1-9]|1[0-2]):([0-5][0-9]) \p{L}{2}$ -yy/MM/dd H:mm ^[0-9]{2}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1]) (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -M/d/yy HH:mm ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{2} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -M/d/yy H:mm ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{2} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -d/MM/yy H:mm ^(0?[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{2} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -yy/MM/dd HH:mm ^[0-9]{2}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -HH:mm dd/MM/yy ^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]) (0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{2}$ ---------Group 11: [.:dM2y2Hm]--------- -dd.MM.yy HH:mm ^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{2} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -d.M.yy H:mm ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{2} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -d.MM.yy H:mm ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{2} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -yy.d.M HH:mm ^[0-9]{2}\.(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -d.M.yy HH:mm ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{2} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -dd.MM.yy H:mm ^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{2} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ ---------Group 12: [/.dM2y2Hm]--------- -dd/MM/yy H.mm ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{2} (0?[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])$ ---------Group 13: [-:dM2y2Hm]--------- -yy-MM-dd HH:mm ^[0-9]{2}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -yy-M-d ah:mm ^[0-9]{2}\-(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1]) \p{L}{2}(0?[1-9]|1[0-2]):([0-5][0-9])$ -M-d-yy h:mm a ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{2} (0?[1-9]|1[0-2]):([0-5][0-9]) \p{L}{2}$ -M-d-yy HH:mm ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{2} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -M-d-yy H:mm ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{2} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -dd-MM-yy HH:mm ^(0[1-9]|[1-2][0-9]|3[0-1])\-(0[1-9]|1[0-2])\-[0-9]{2} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -d-M-yy H:mm ^(0?[1-9]|[1-2][0-9]|3[0-1])\-(0?[1-9]|1[0-2])\-[0-9]{2} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ ---------Group 14: [ :dM4y4Hms]--------- -MMM d, yyyy h:mm:ss a ^(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?)) (0?[1-9]|[1-2][0-9]|3[0-1]), [0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2}$ -d MMM yyyy HH:mm:ss ^(0?[1-9]|[1-2][0-9]|3[0-1]) (([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?)) [0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -MMMM d, yyyy h:mm:ss a z ^(\p{L}{3,10}) (0?[1-9]|[1-2][0-9]|3[0-1]), [0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2} [A-Z]{2,5}$ -d MMMM yyyy HH:mm:ss z ^(0?[1-9]|[1-2][0-9]|3[0-1]) (\p{L}{3,10}) [0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) [A-Z]{2,5}$ -d. MMMM yyyy HH:mm:ss z ^(0?[1-9]|[1-2][0-9]|3[0-1])\. (\p{L}{3,10}) [0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) [A-Z]{2,5}$ -dd MMMM yyyy HH:mm:ss z ^(0[1-9]|[1-2][0-9]|3[0-1]) (\p{L}{3,10}) [0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) [A-Z]{2,5}$ -MMMM d, yyyy h:mm:ss z a ^(\p{L}{3,10}) (0?[1-9]|[1-2][0-9]|3[0-1]), [0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) [A-Z]{2,5} \p{L}{2}$ -EEEE, MMMM d, yyyy h:mm:ss a z ^(\p{L}{3,10}), (\p{L}{3,10}) (0?[1-9]|[1-2][0-9]|3[0-1]), [0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2} [A-Z]{2,5}$ -EEEE, d MMMM yyyy HH:mm:ss 'o''clock' z ^(\p{L}{3,10}), (0?[1-9]|[1-2][0-9]|3[0-1]) (\p{L}{3,10}) [0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) o'clock [A-Z]{2,5}$ -EEEE, MMMM d, yyyy h:mm:ss 'o''clock' a z ^(\p{L}{3,10}), (\p{L}{3,10}) (0?[1-9]|[1-2][0-9]|3[0-1]), [0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) o'clock \p{L}{2} [A-Z]{2,5}$ -EEE MMM dd HH:mm:ss z yyyy ^(\p{L}{3,5}) (([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?)) (0[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) [A-Z]{2,5} [0-9]{4}$ -EEE, d MMM yyyy HH:mm:ss Z ^(\p{L}{3,5}), (0?[1-9]|[1-2][0-9]|3[0-1]) (([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?)) [0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) [+-](0[0-9]|1[0-2])00$ -d MMM yyyy HH:mm:ss Z ^(0?[1-9]|[1-2][0-9]|3[0-1]) (([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?)) [0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) [+-](0[0-9]|1[0-2])00$ ---------Group 15: [.:dM2y4Hms]--------- -dd.MM.yyyy HH:mm:ss ^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -d.M.yyyy H:mm:ss ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -d.MM.yyyy H:mm:ss ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -yyyy.MM.dd HH:mm:ss ^[0-9]{4}\.(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -yyyy.MM.dd. H:mm:ss ^[0-9]{4}\.(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1])\. (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -d.M.yyyy HH:mm:ss ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -yyyy.d.M HH:mm:ss ^[0-9]{4}\.(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -dd.MM.yyyy H:mm:ss ^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ ---------Group 16: [-:dM4y4Hms]--------- -dd-MMM-yyyy HH:mm:ss ^(0[1-9]|[1-2][0-9]|3[0-1])\-(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?))\-[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -d-MMM-yyyy h:mm:ss a ^(0?[1-9]|[1-2][0-9]|3[0-1])\-(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?))\-[0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2}$ ---------Group 17: [-.dM4y4Hms]--------- -d-MMM-yyyy H.mm.ss ^(0?[1-9]|[1-2][0-9]|3[0-1])\-(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?))\-[0-9]{4} (0?[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])\.([0-5][0-9])$ ---------Group 18: [-:dM2y4Hms]--------- -yyyy-MM-dd HH:mm:ss ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -yyyy-M-d H:mm:ss ^[0-9]{4}\-(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1]) (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -M-d-yyyy h:mm:ss a ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2}$ -M-d-yyyy HH:mm:ss ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -M-d-yyyy H:mm:ss ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -yyyy-M-d h:mm:ss a ^[0-9]{4}\-(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1]) (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2}$ -yyyy-M-d HH:mm:ss ^[0-9]{4}\-(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -yyyy-MM-dd HH:mm:ss.S ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])\.[0-9]$ -yyyy-MM-dd'T'HH:mm:ss.SSS'['VV']' ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1])T(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])\.([0-9]{3})\[\p{L}{4,10}\/\p{L}{4,15}\]$ -yyyy-MM-dd'T'HH:mm:ss.SSS ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1])T(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])\.([0-9]{3})$ -yyyy-MM-dd'T'HH:mm:ss ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1])T(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -yyyy-MM-dd'T'HH:mm:ss.SSS'Z' ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1])T(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])\.([0-9]{3})Z$ -yyyy-MM-dd'T'HH:mm:ss.SSSXXX ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1])T(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])\.([0-9]{3})[+-](0[0-9]|1[0-2]):00$ -yyyy-MM-dd'T'HH:mm:ssXXX ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1])T(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])[+-](0[0-9]|1[0-2]):00$ -yyyy-MM-dd'T'HH:mm:ss.SSSXXX'['VV']' ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1])T(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])\.([0-9]{3})[+-](0[0-9]|1[0-2]):00\[\p{L}{4,10}\/\p{L}{4,15}\]$ -yyyy-MM-dd'T'HH:mm:ssXXX'['VV']' ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1])T(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])[+-](0[0-9]|1[0-2]):00\[\p{L}{4,10}\/\p{L}{4,15}\]$ -dd-MM-yyyy HH:mm:ss ^(0[1-9]|[1-2][0-9]|3[0-1])\-(0[1-9]|1[0-2])\-[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -yyyy-MM-dd h:mm:ss.a ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1]) (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9])\.\p{L}{2}$ -HH:mm:ss dd-MM-yyyy ^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) (0[1-9]|[1-2][0-9]|3[0-1])\-(0[1-9]|1[0-2])\-[0-9]{4}$ ---------Group 19: [/:dM2y4Hms]--------- -yyyy/MM/dd H:mm:ss ^[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1]) (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -yyyy/MM/dd H:mm:ss z ^[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1]) (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) [A-Z]{2,5}$ -dd/MM/yyyy h:mm:ss a ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2}$ -dd/MM/yyyy HH:mm:ss ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -dd/MM/yyyy H:mm:ss ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -d/M/yyyy h:mm:ss a ^(0?[1-9]|[1-2][0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/[0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2}$ -d/M/yyyy HH:mm:ss ^(0?[1-9]|[1-2][0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -d/M/yyyy H:mm:ss ^(0?[1-9]|[1-2][0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -MM/dd/yyyy h:mm:ss a ^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2}$ -MM/dd/yyyy HH:mm:ss ^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -MM/dd/yyyy H:mm:ss ^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -M/d/yyyy h:mm:ss a ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2}$ -M/d/yyyy HH:mm:ss ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -M/d/yyyy H:mm:ss ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -HH:mm:ss dd/MM/yyyy ^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) (0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4}$ ---------Group 20: [ .dM4y4Hms]--------- -d MMMM yyyy H.mm.ss z ^(0?[1-9]|[1-2][0-9]|3[0-1]) (\p{L}{3,10}) [0-9]{4} (0?[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])\.([0-5][0-9]) [A-Z]{2,5}$ -EEEE d MMMM yyyy H.mm.ss z ^(\p{L}{3,10}) (0?[1-9]|[1-2][0-9]|3[0-1]) (\p{L}{3,10}) [0-9]{4} (0?[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])\.([0-5][0-9]) [A-Z]{2,5}$ ---------Group 21: [??dM2y4Hms]--------- -yyyy'年'M'月'd'日' ahh'时'mm'分'ss'秒' ^[0-9]{4}年(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[0-1])日 \p{L}{2}(0[1-9]|1[0-2])时([0-5][0-9])分([0-5][0-9])秒$ -yyyy'年'M'月'd'日' H'時'mm'分'ss'秒' z ^[0-9]{4}年(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[0-1])日 (0?[0-9]|1[0-9]|2[0-3])時([0-5][0-9])分([0-5][0-9])秒 [A-Z]{2,5}$ -yyyy'年'M'月'd'日' EEEE ahh'时'mm'分'ss'秒' z ^[0-9]{4}年(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[0-1])日 (\p{L}{3,10}) \p{L}{2}(0[1-9]|1[0-2])时([0-5][0-9])分([0-5][0-9])秒 [A-Z]{2,5}$ ---------Group 22: [ ?dM4y4Hm]--------- -EEEE d MMMM yyyy HH' h 'mm z ^(\p{L}{3,10}) (0?[1-9]|[1-2][0-9]|3[0-1]) (\p{L}{3,10}) [0-9]{4} (0[0-9]|1[0-9]|2[0-3]) h ([0-5][0-9]) [A-Z]{2,5}$ -EEEE d MMMM yyyy H' h 'mm z ^(\p{L}{3,10}) (0?[1-9]|[1-2][0-9]|3[0-1]) (\p{L}{3,10}) [0-9]{4} (0?[0-9]|1[0-9]|2[0-3]) h ([0-5][0-9]) [A-Z]{2,5}$ ---------Group 23: [ :dM4y4Hm]--------- -EEEE, d. MMMM yyyy HH:mm' Uhr 'z ^(\p{L}{3,10}), (0?[1-9]|[1-2][0-9]|3[0-1])\. (\p{L}{3,10}) [0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]) Uhr [A-Z]{2,5}$ ---------Group 24: [/:dM2y2Hms]--------- -dd/MM/yy HH:mm:ss ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{2} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -yy/MM/dd H:mm:ss ^[0-9]{2}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1]) (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -M/d/yy h:mm:ss a ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{2} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2}$ -M/d/yy HH:mm:ss ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{2} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -M/d/yy H:mm:ss ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{2} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ ---------Group 25: [.:dM2y2Hms]--------- -dd.MM.yy HH:mm:ss ^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{2} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ ---------Group 26: [.:dM2y4Hm]--------- -dd.MM.yyyy HH:mm ^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -d.M.yyyy H:mm ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -yyyy.MM.dd HH:mm ^[0-9]{4}\.(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -yyyy.MM.dd. H:mm ^[0-9]{4}\.(0[1-9]|1[0-2])\.(0[1-9]|[1-2][0-9]|3[0-1])\. (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -d.M.yyyy HH:mm ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -d.M.yyyy HH:mm: ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):$ ---------Group 27: [/:dM2y4Hm]--------- -yyyy/MM/dd H:mm ^[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1]) (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -dd/MM/yyyy h:mm a ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]) \p{L}{2}$ -dd/MM/yyyy HH:mm ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -dd/MM/yyyy H:mm ^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -d/M/yyyy h:mm a ^(0?[1-9]|[1-2][0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/[0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]) \p{L}{2}$ -d/M/yyyy HH:mm ^(0?[1-9]|[1-2][0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -d/M/yyyy H:mm ^(0?[1-9]|[1-2][0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -MM/dd/yyyy h:mm a ^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]) \p{L}{2}$ -MM/dd/yyyy HH:mm ^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -MM/dd/yyyy H:mm ^(0[1-9]|1[0-2])\/(0[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -M/d/yyyy h:mm a ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]) \p{L}{2}$ -M/d/yyyy HH:mm ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -M/d/yyyy H:mm ^(0?[1-9]|1[0-2])\/(0?[1-9]|[1-2][0-9]|3[0-1])\/[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -HH:mm dd/MM/yyyy ^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]) (0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4}$ ---------Group 28: [-:dM2y2Hms]--------- -M-d-yy h:mm:ss a ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{2} (0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2}$ -M-d-yy HH:mm:ss ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{2} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -M-d-yy H:mm:ss ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{2} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ ---------Group 29: [-:dM2y4Hm]--------- -M-d-yyyy h:mm a ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{4} (0?[1-9]|1[0-2]):([0-5][0-9]) \p{L}{2}$ -M-d-yyyy HH:mm ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -M-d-yyyy H:mm ^(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1])\-[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -yyyy-M-d h:mm a ^[0-9]{4}\-(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1]) (0?[1-9]|1[0-2]):([0-5][0-9]) \p{L}{2}$ -yyyy-M-d HH:mm ^[0-9]{4}\-(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -yyyy-M-d H:mm ^[0-9]{4}\-(0?[1-9]|1[0-2])\-(0?[1-9]|[1-2][0-9]|3[0-1]) (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -dd-MM-yyyy H:mm ^(0[1-9]|[1-2][0-9]|3[0-1])\-(0[1-9]|1[0-2])\-[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -yyyy-MM-dd HH:mm ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ ---------Group 30: [.?dM4y4]--------- -MMM.dd.yyyy ^(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?))\.(0[1-9]|[1-2][0-9]|3[0-1])\.[0-9]{4}$ ---------Group 31: [/:dM4y4Hms]--------- -d/MMM/yyyy H:mm:ss Z ^(0?[1-9]|[1-2][0-9]|3[0-1])\/(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?))\/[0-9]{4} (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) [+-](0[0-9]|1[0-2])00$ ---------Group 32: [-.dM4y2Hms]--------- -dd-MMM-yy hh.mm.ss.nnnnnnnnn a ^(0[1-9]|[1-2][0-9]|3[0-1])\-(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?))\-[0-9]{2} (0[1-9]|1[0-2])\.([0-5][0-9])\.([0-5][0-9])\.[0-9]{9} \p{L}{2}$ ---------Group 33: [/:dM4y2Hm]--------- -dd/MMM/yy h:mm a ^(0[1-9]|[1-2][0-9]|3[0-1])\/(([A-Z]\p{L}{2})|([a-z]\p{L}{2,3}\.?))\/[0-9]{2} (0?[1-9]|1[0-2]):([0-5][0-9]) \p{L}{2}$ ---------Group 34: [-?y4]--------- -yyyy-DDDXXX ^[0-9]{4}\-[0-9]{1,3}[+-](0[0-9]|1[0-2]):00$ -yyyy-'W'w-WXXX ^[0-9]{4}\-W([1-4]?[0-9]|5[0-2])\-[1-7][+-](0[0-9]|1[0-2]):00$ ---------Group 35: [..dM2y2Hm]--------- -d.M.yy H.mm ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{2} (0?[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])$ -yy.M.d HH.mm ^[0-9]{2}\.(0?[1-9]|1[0-2])\.(0?[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])$ -d.M.yy. HH.mm ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{2}\. (0[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])$ ---------Group 36: [-.dM2y2Hm]--------- -yy-MM-dd h.mm.a ^[0-9]{2}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1]) (0?[1-9]|1[0-2])\.([0-5][0-9])\.\p{L}{2}$ ---------Group 37: [..dM2y4Hms]--------- -d.M.yyyy H.mm.ss ^(0?[1-9]|[1-2][0-9]|3[0-1])\.(0?[1-9]|1[0-2])\.[0-9]{4} (0?[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])\.([0-5][0-9])$ -dd.MM.yyyy. HH.mm.ss ^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{4}\. (0[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])\.([0-5][0-9])$ -dd.MM.yyyy. HH.mm.ss z ^(0[1-9]|[1-2][0-9]|3[0-1])\.(0[1-9]|1[0-2])\.[0-9]{4}\. (0[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])\.([0-5][0-9]) [A-Z]{2,5}$ ---------Group 38: [-.dM2y4Hms]--------- -yyyy-MM-dd HH.mm.ss ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])\.([0-5][0-9])$ -yyyy-MM-dd h.mm.ss.a z ^[0-9]{4}\-(0[1-9]|1[0-2])\-(0[1-9]|[1-2][0-9]|3[0-1]) (0?[1-9]|1[0-2])\.([0-5][0-9])\.([0-5][0-9])\.\p{L}{2} [A-Z]{2,5}$ \ No newline at end of file diff --git a/wrangler-core/src/main/resources/TimeRegexes.txt b/wrangler-core/src/main/resources/TimeRegexes.txt deleted file mode 100644 index 76e7fd658..000000000 --- a/wrangler-core/src/main/resources/TimeRegexes.txt +++ /dev/null @@ -1,22 +0,0 @@ -h:mm a ^(0?[1-9]|1[0-2]):([0-5][0-9]) \p{L}{2}$ -HH:mm ^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -H.mm ^(0?[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])$ -H:mm ^(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])$ -ah:mm ^\p{L}{2}(0?[1-9]|1[0-2]):([0-5][0-9])$ -h:mm:ss a ^(0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2}$ -HH:mm:ss ^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -H.mm.ss ^(0?[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])\.([0-5][0-9])$ -H:mm:ss ^(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$ -h:mm:ss a z ^(0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) \p{L}{2} [A-Z]{2,5}$ -HH:mm:ss z ^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) [A-Z]{2,5}$ -H.mm.ss z ^(0?[0-9]|1[0-9]|2[0-3])\.([0-5][0-9])\.([0-5][0-9]) [A-Z]{2,5}$ -h:mm:ss z a ^(0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) [A-Z]{2,5} \p{L}{2}$ -H:mm:ss z ^(0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) [A-Z]{2,5}$ -ahh'时'mm'分'ss'秒' ^\p{L}{2}(0[1-9]|1[0-2])时([0-5][0-9])分([0-5][0-9])秒$ -HH' h 'mm z ^(0[0-9]|1[0-9]|2[0-3]) h ([0-5][0-9]) [A-Z]{2,5}$ -HH:mm' Uhr 'z ^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]) Uhr [A-Z]{2,5}$ -HH:mm:ss 'o''clock' z ^(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]) o'clock [A-Z]{2,5}$ -h:mm:ss 'o''clock' a z ^(0?[1-9]|1[0-2]):([0-5][0-9]):([0-5][0-9]) o'clock \p{L}{2} [A-Z]{2,5}$ -H' h 'mm z ^(0?[0-9]|1[0-9]|2[0-3]) h ([0-5][0-9]) [A-Z]{2,5}$ -H'時'mm'分'ss'秒' z ^(0?[0-9]|1[0-9]|2[0-3])時([0-5][0-9])分([0-5][0-9])秒 [A-Z]{2,5}$ -ahh'时'mm'分'ss'秒' z ^\p{L}{2}(0[1-9]|1[0-2])时([0-5][0-9])分([0-5][0-9])秒 [A-Z]{2,5}$ \ No newline at end of file diff --git a/wrangler-core/src/main/resources/icd-10-2016_cm_codes.txt b/wrangler-core/src/main/resources/icd-10-2016_cm_codes.txt deleted file mode 100755 index 0a8575222..000000000 --- a/wrangler-core/src/main/resources/icd-10-2016_cm_codes.txt +++ /dev/null @@ -1,69823 +0,0 @@ -A000 Cholera due to Vibrio cholerae 01, biovar cholerae -A001 Cholera due to Vibrio cholerae 01, biovar eltor -A009 Cholera, unspecified -A0100 Typhoid fever, unspecified -A0101 Typhoid meningitis -A0102 Typhoid fever with heart involvement -A0103 Typhoid pneumonia -A0104 Typhoid arthritis -A0105 Typhoid osteomyelitis -A0109 Typhoid fever with other complications -A011 Paratyphoid fever A -A012 Paratyphoid fever B -A013 Paratyphoid fever C -A014 Paratyphoid fever, unspecified -A020 Salmonella enteritis -A021 Salmonella sepsis -A0220 Localized salmonella infection, unspecified -A0221 Salmonella meningitis -A0222 Salmonella pneumonia -A0223 Salmonella arthritis -A0224 Salmonella osteomyelitis -A0225 Salmonella pyelonephritis -A0229 Salmonella with other localized infection -A028 Other specified salmonella infections -A029 Salmonella infection, unspecified -A030 Shigellosis due to Shigella dysenteriae -A031 Shigellosis due to Shigella flexneri -A032 Shigellosis due to Shigella boydii -A033 Shigellosis due to Shigella sonnei -A038 Other shigellosis -A039 Shigellosis, unspecified -A040 Enteropathogenic Escherichia coli infection -A041 Enterotoxigenic Escherichia coli infection -A042 Enteroinvasive Escherichia coli infection -A043 Enterohemorrhagic Escherichia coli infection -A044 Other intestinal Escherichia coli infections -A045 Campylobacter enteritis -A046 Enteritis due to Yersinia enterocolitica -A047 Enterocolitis due to Clostridium difficile -A048 Other specified bacterial intestinal infections -A049 Bacterial intestinal infection, unspecified -A050 Foodborne staphylococcal intoxication -A051 Botulism food poisoning -A052 Foodborne Clostridium perfringens [Clostridium welchii] intoxication -A053 Foodborne Vibrio parahaemolyticus intoxication -A054 Foodborne Bacillus cereus intoxication -A055 Foodborne Vibrio vulnificus intoxication -A058 Other specified bacterial foodborne intoxications -A059 Bacterial foodborne intoxication, unspecified -A060 Acute amebic dysentery -A061 Chronic intestinal amebiasis -A062 Amebic nondysenteric colitis -A063 Ameboma of intestine -A064 Amebic liver abscess -A065 Amebic lung abscess -A066 Amebic brain abscess -A067 Cutaneous amebiasis -A0681 Amebic cystitis -A0682 Other amebic genitourinary infections -A0689 Other amebic infections -A069 Amebiasis, unspecified -A070 Balantidiasis -A071 Giardiasis [lambliasis] -A072 Cryptosporidiosis -A073 Isosporiasis -A074 Cyclosporiasis -A078 Other specified protozoal intestinal diseases -A079 Protozoal intestinal disease, unspecified -A080 Rotaviral enteritis -A0811 Acute gastroenteropathy due to Norwalk agent -A0819 Acute gastroenteropathy due to other small round viruses -A082 Adenoviral enteritis -A0831 Calicivirus enteritis -A0832 Astrovirus enteritis -A0839 Other viral enteritis -A084 Viral intestinal infection, unspecified -A088 Other specified intestinal infections -A09 Infectious gastroenteritis and colitis, unspecified -A150 Tuberculosis of lung -A154 Tuberculosis of intrathoracic lymph nodes -A155 Tuberculosis of larynx, trachea and bronchus -A156 Tuberculous pleurisy -A157 Primary respiratory tuberculosis -A158 Other respiratory tuberculosis -A159 Respiratory tuberculosis unspecified -A170 Tuberculous meningitis -A171 Meningeal tuberculoma -A1781 Tuberculoma of brain and spinal cord -A1782 Tuberculous meningoencephalitis -A1783 Tuberculous neuritis -A1789 Other tuberculosis of nervous system -A179 Tuberculosis of nervous system, unspecified -A1801 Tuberculosis of spine -A1802 Tuberculous arthritis of other joints -A1803 Tuberculosis of other bones -A1809 Other musculoskeletal tuberculosis -A1810 Tuberculosis of genitourinary system, unspecified -A1811 Tuberculosis of kidney and ureter -A1812 Tuberculosis of bladder -A1813 Tuberculosis of other urinary organs -A1814 Tuberculosis of prostate -A1815 Tuberculosis of other male genital organs -A1816 Tuberculosis of cervix -A1817 Tuberculous female pelvic inflammatory disease -A1818 Tuberculosis of other female genital organs -A182 Tuberculous peripheral lymphadenopathy -A1831 Tuberculous peritonitis -A1832 Tuberculous enteritis -A1839 Retroperitoneal tuberculosis -A184 Tuberculosis of skin and subcutaneous tissue -A1850 Tuberculosis of eye, unspecified -A1851 Tuberculous episcleritis -A1852 Tuberculous keratitis -A1853 Tuberculous chorioretinitis -A1854 Tuberculous iridocyclitis -A1859 Other tuberculosis of eye -A186 Tuberculosis of (inner) (middle) ear -A187 Tuberculosis of adrenal glands -A1881 Tuberculosis of thyroid gland -A1882 Tuberculosis of other endocrine glands -A1883 Tuberculosis of digestive tract organs, not elsewhere classified -A1884 Tuberculosis of heart -A1885 Tuberculosis of spleen -A1889 Tuberculosis of other sites -A190 Acute miliary tuberculosis of a single specified site -A191 Acute miliary tuberculosis of multiple sites -A192 Acute miliary tuberculosis, unspecified -A198 Other miliary tuberculosis -A199 Miliary tuberculosis, unspecified -A200 Bubonic plague -A201 Cellulocutaneous plague -A202 Pneumonic plague -A203 Plague meningitis -A207 Septicemic plague -A208 Other forms of plague -A209 Plague, unspecified -A210 Ulceroglandular tularemia -A211 Oculoglandular tularemia -A212 Pulmonary tularemia -A213 Gastrointestinal tularemia -A217 Generalized tularemia -A218 Other forms of tularemia -A219 Tularemia, unspecified -A220 Cutaneous anthrax -A221 Pulmonary anthrax -A222 Gastrointestinal anthrax -A227 Anthrax sepsis -A228 Other forms of anthrax -A229 Anthrax, unspecified -A230 Brucellosis due to Brucella melitensis -A231 Brucellosis due to Brucella abortus -A232 Brucellosis due to Brucella suis -A233 Brucellosis due to Brucella canis -A238 Other brucellosis -A239 Brucellosis, unspecified -A240 Glanders -A241 Acute and fulminating melioidosis -A242 Subacute and chronic melioidosis -A243 Other melioidosis -A249 Melioidosis, unspecified -A250 Spirillosis -A251 Streptobacillosis -A259 Rat-bite fever, unspecified -A260 Cutaneous erysipeloid -A267 Erysipelothrix sepsis -A268 Other forms of erysipeloid -A269 Erysipeloid, unspecified -A270 Leptospirosis icterohemorrhagica -A2781 Aseptic meningitis in leptospirosis -A2789 Other forms of leptospirosis -A279 Leptospirosis, unspecified -A280 Pasteurellosis -A281 Cat-scratch disease -A282 Extraintestinal yersiniosis -A288 Other specified zoonotic bacterial diseases, not elsewhere classified -A289 Zoonotic bacterial disease, unspecified -A300 Indeterminate leprosy -A301 Tuberculoid leprosy -A302 Borderline tuberculoid leprosy -A303 Borderline leprosy -A304 Borderline lepromatous leprosy -A305 Lepromatous leprosy -A308 Other forms of leprosy -A309 Leprosy, unspecified -A310 Pulmonary mycobacterial infection -A311 Cutaneous mycobacterial infection -A312 Disseminated mycobacterium avium-intracellulare complex (DMAC) -A318 Other mycobacterial infections -A319 Mycobacterial infection, unspecified -A320 Cutaneous listeriosis -A3211 Listerial meningitis -A3212 Listerial meningoencephalitis -A327 Listerial sepsis -A3281 Oculoglandular listeriosis -A3282 Listerial endocarditis -A3289 Other forms of listeriosis -A329 Listeriosis, unspecified -A33 Tetanus neonatorum -A34 Obstetrical tetanus -A35 Other tetanus -A360 Pharyngeal diphtheria -A361 Nasopharyngeal diphtheria -A362 Laryngeal diphtheria -A363 Cutaneous diphtheria -A3681 Diphtheritic cardiomyopathy -A3682 Diphtheritic radiculomyelitis -A3683 Diphtheritic polyneuritis -A3684 Diphtheritic tubulo-interstitial nephropathy -A3685 Diphtheritic cystitis -A3686 Diphtheritic conjunctivitis -A3689 Other diphtheritic complications -A369 Diphtheria, unspecified -A3700 Whooping cough due to Bordetella pertussis without pneumonia -A3701 Whooping cough due to Bordetella pertussis with pneumonia -A3710 Whooping cough due to Bordetella parapertussis without pneumonia -A3711 Whooping cough due to Bordetella parapertussis with pneumonia -A3780 Whooping cough due to other Bordetella species without pneumonia -A3781 Whooping cough due to other Bordetella species with pneumonia -A3790 Whooping cough, unspecified species without pneumonia -A3791 Whooping cough, unspecified species with pneumonia -A380 Scarlet fever with otitis media -A381 Scarlet fever with myocarditis -A388 Scarlet fever with other complications -A389 Scarlet fever, uncomplicated -A390 Meningococcal meningitis -A391 Waterhouse-Friderichsen syndrome -A392 Acute meningococcemia -A393 Chronic meningococcemia -A394 Meningococcemia, unspecified -A3950 Meningococcal carditis, unspecified -A3951 Meningococcal endocarditis -A3952 Meningococcal myocarditis -A3953 Meningococcal pericarditis -A3981 Meningococcal encephalitis -A3982 Meningococcal retrobulbar neuritis -A3983 Meningococcal arthritis -A3984 Postmeningococcal arthritis -A3989 Other meningococcal infections -A399 Meningococcal infection, unspecified -A400 Sepsis due to streptococcus, group A -A401 Sepsis due to streptococcus, group B -A403 Sepsis due to Streptococcus pneumoniae -A408 Other streptococcal sepsis -A409 Streptococcal sepsis, unspecified -A4101 Sepsis due to Methicillin susceptible Staphylococcus aureus -A4102 Sepsis due to Methicillin resistant Staphylococcus aureus -A411 Sepsis due to other specified staphylococcus -A412 Sepsis due to unspecified staphylococcus -A413 Sepsis due to Hemophilus influenzae -A414 Sepsis due to anaerobes -A4150 Gram-negative sepsis, unspecified -A4151 Sepsis due to Escherichia coli [E. coli] -A4152 Sepsis due to Pseudomonas -A4153 Sepsis due to Serratia -A4159 Other Gram-negative sepsis -A4181 Sepsis due to Enterococcus -A4189 Other specified sepsis -A419 Sepsis, unspecified organism -A420 Pulmonary actinomycosis -A421 Abdominal actinomycosis -A422 Cervicofacial actinomycosis -A427 Actinomycotic sepsis -A4281 Actinomycotic meningitis -A4282 Actinomycotic encephalitis -A4289 Other forms of actinomycosis -A429 Actinomycosis, unspecified -A430 Pulmonary nocardiosis -A431 Cutaneous nocardiosis -A438 Other forms of nocardiosis -A439 Nocardiosis, unspecified -A440 Systemic bartonellosis -A441 Cutaneous and mucocutaneous bartonellosis -A448 Other forms of bartonellosis -A449 Bartonellosis, unspecified -A46 Erysipelas -A480 Gas gangrene -A481 Legionnaires' disease -A482 Nonpneumonic Legionnaires' disease [Pontiac fever] -A483 Toxic shock syndrome -A484 Brazilian purpuric fever -A4851 Infant botulism -A4852 Wound botulism -A488 Other specified bacterial diseases -A4901 Methicillin susceptible Staphylococcus aureus infection, unspecified site -A4902 Methicillin resistant Staphylococcus aureus infection, unspecified site -A491 Streptococcal infection, unspecified site -A492 Hemophilus influenzae infection, unspecified site -A493 Mycoplasma infection, unspecified site -A498 Other bacterial infections of unspecified site -A499 Bacterial infection, unspecified -A5001 Early congenital syphilitic oculopathy -A5002 Early congenital syphilitic osteochondropathy -A5003 Early congenital syphilitic pharyngitis -A5004 Early congenital syphilitic pneumonia -A5005 Early congenital syphilitic rhinitis -A5006 Early cutaneous congenital syphilis -A5007 Early mucocutaneous congenital syphilis -A5008 Early visceral congenital syphilis -A5009 Other early congenital syphilis, symptomatic -A501 Early congenital syphilis, latent -A502 Early congenital syphilis, unspecified -A5030 Late congenital syphilitic oculopathy, unspecified -A5031 Late congenital syphilitic interstitial keratitis -A5032 Late congenital syphilitic chorioretinitis -A5039 Other late congenital syphilitic oculopathy -A5040 Late congenital neurosyphilis, unspecified -A5041 Late congenital syphilitic meningitis -A5042 Late congenital syphilitic encephalitis -A5043 Late congenital syphilitic polyneuropathy -A5044 Late congenital syphilitic optic nerve atrophy -A5045 Juvenile general paresis -A5049 Other late congenital neurosyphilis -A5051 Clutton's joints -A5052 Hutchinson's teeth -A5053 Hutchinson's triad -A5054 Late congenital cardiovascular syphilis -A5055 Late congenital syphilitic arthropathy -A5056 Late congenital syphilitic osteochondropathy -A5057 Syphilitic saddle nose -A5059 Other late congenital syphilis, symptomatic -A506 Late congenital syphilis, latent -A507 Late congenital syphilis, unspecified -A509 Congenital syphilis, unspecified -A510 Primary genital syphilis -A511 Primary anal syphilis -A512 Primary syphilis of other sites -A5131 Condyloma latum -A5132 Syphilitic alopecia -A5139 Other secondary syphilis of skin -A5141 Secondary syphilitic meningitis -A5142 Secondary syphilitic female pelvic disease -A5143 Secondary syphilitic oculopathy -A5144 Secondary syphilitic nephritis -A5145 Secondary syphilitic hepatitis -A5146 Secondary syphilitic osteopathy -A5149 Other secondary syphilitic conditions -A515 Early syphilis, latent -A519 Early syphilis, unspecified -A5200 Cardiovascular syphilis, unspecified -A5201 Syphilitic aneurysm of aorta -A5202 Syphilitic aortitis -A5203 Syphilitic endocarditis -A5204 Syphilitic cerebral arteritis -A5205 Other cerebrovascular syphilis -A5206 Other syphilitic heart involvement -A5209 Other cardiovascular syphilis -A5210 Symptomatic neurosyphilis, unspecified -A5211 Tabes dorsalis -A5212 Other cerebrospinal syphilis -A5213 Late syphilitic meningitis -A5214 Late syphilitic encephalitis -A5215 Late syphilitic neuropathy -A5216 Charcot's arthropathy (tabetic) -A5217 General paresis -A5219 Other symptomatic neurosyphilis -A522 Asymptomatic neurosyphilis -A523 Neurosyphilis, unspecified -A5271 Late syphilitic oculopathy -A5272 Syphilis of lung and bronchus -A5273 Symptomatic late syphilis of other respiratory organs -A5274 Syphilis of liver and other viscera -A5275 Syphilis of kidney and ureter -A5276 Other genitourinary symptomatic late syphilis -A5277 Syphilis of bone and joint -A5278 Syphilis of other musculoskeletal tissue -A5279 Other symptomatic late syphilis -A528 Late syphilis, latent -A529 Late syphilis, unspecified -A530 Latent syphilis, unspecified as early or late -A539 Syphilis, unspecified -A5400 Gonococcal infection of lower genitourinary tract, unspecified -A5401 Gonococcal cystitis and urethritis, unspecified -A5402 Gonococcal vulvovaginitis, unspecified -A5403 Gonococcal cervicitis, unspecified -A5409 Other gonococcal infection of lower genitourinary tract -A541 Gonococcal infection of lower genitourinary tract with periurethral and accessory gland abscess -A5421 Gonococcal infection of kidney and ureter -A5422 Gonococcal prostatitis -A5423 Gonococcal infection of other male genital organs -A5424 Gonococcal female pelvic inflammatory disease -A5429 Other gonococcal genitourinary infections -A5430 Gonococcal infection of eye, unspecified -A5431 Gonococcal conjunctivitis -A5432 Gonococcal iridocyclitis -A5433 Gonococcal keratitis -A5439 Other gonococcal eye infection -A5440 Gonococcal infection of musculoskeletal system, unspecified -A5441 Gonococcal spondylopathy -A5442 Gonococcal arthritis -A5443 Gonococcal osteomyelitis -A5449 Gonococcal infection of other musculoskeletal tissue -A545 Gonococcal pharyngitis -A546 Gonococcal infection of anus and rectum -A5481 Gonococcal meningitis -A5482 Gonococcal brain abscess -A5483 Gonococcal heart infection -A5484 Gonococcal pneumonia -A5485 Gonococcal peritonitis -A5486 Gonococcal sepsis -A5489 Other gonococcal infections -A549 Gonococcal infection, unspecified -A55 Chlamydial lymphogranuloma (venereum) -A5600 Chlamydial infection of lower genitourinary tract, unspecified -A5601 Chlamydial cystitis and urethritis -A5602 Chlamydial vulvovaginitis -A5609 Other chlamydial infection of lower genitourinary tract -A5611 Chlamydial female pelvic inflammatory disease -A5619 Other chlamydial genitourinary infection -A562 Chlamydial infection of genitourinary tract, unspecified -A563 Chlamydial infection of anus and rectum -A564 Chlamydial infection of pharynx -A568 Sexually transmitted chlamydial infection of other sites -A57 Chancroid -A58 Granuloma inguinale -A5900 Urogenital trichomoniasis, unspecified -A5901 Trichomonal vulvovaginitis -A5902 Trichomonal prostatitis -A5903 Trichomonal cystitis and urethritis -A5909 Other urogenital trichomoniasis -A598 Trichomoniasis of other sites -A599 Trichomoniasis, unspecified -A6000 Herpesviral infection of urogenital system, unspecified -A6001 Herpesviral infection of penis -A6002 Herpesviral infection of other male genital organs -A6003 Herpesviral cervicitis -A6004 Herpesviral vulvovaginitis -A6009 Herpesviral infection of other urogenital tract -A601 Herpesviral infection of perianal skin and rectum -A609 Anogenital herpesviral infection, unspecified -A630 Anogenital (venereal) warts -A638 Other specified predominantly sexually transmitted diseases -A64 Unspecified sexually transmitted disease -A65 Nonvenereal syphilis -A660 Initial lesions of yaws -A661 Multiple papillomata and wet crab yaws -A662 Other early skin lesions of yaws -A663 Hyperkeratosis of yaws -A664 Gummata and ulcers of yaws -A665 Gangosa -A666 Bone and joint lesions of yaws -A667 Other manifestations of yaws -A668 Latent yaws -A669 Yaws, unspecified -A670 Primary lesions of pinta -A671 Intermediate lesions of pinta -A672 Late lesions of pinta -A673 Mixed lesions of pinta -A679 Pinta, unspecified -A680 Louse-borne relapsing fever -A681 Tick-borne relapsing fever -A689 Relapsing fever, unspecified -A690 Necrotizing ulcerative stomatitis -A691 Other Vincent's infections -A6920 Lyme disease, unspecified -A6921 Meningitis due to Lyme disease -A6922 Other neurologic disorders in Lyme disease -A6923 Arthritis due to Lyme disease -A6929 Other conditions associated with Lyme disease -A698 Other specified spirochetal infections -A699 Spirochetal infection, unspecified -A70 Chlamydia psittaci infections -A710 Initial stage of trachoma -A711 Active stage of trachoma -A719 Trachoma, unspecified -A740 Chlamydial conjunctivitis -A7481 Chlamydial peritonitis -A7489 Other chlamydial diseases -A749 Chlamydial infection, unspecified -A750 Epidemic louse-borne typhus fever due to Rickettsia prowazekii -A751 Recrudescent typhus [Brill's disease] -A752 Typhus fever due to Rickettsia typhi -A753 Typhus fever due to Rickettsia tsutsugamushi -A759 Typhus fever, unspecified -A770 Spotted fever due to Rickettsia rickettsii -A771 Spotted fever due to Rickettsia conorii -A772 Spotted fever due to Rickettsia siberica -A773 Spotted fever due to Rickettsia australis -A7740 Ehrlichiosis, unspecified -A7741 Ehrlichiosis chafeensis [E. chafeensis] -A7749 Other ehrlichiosis -A778 Other spotted fevers -A779 Spotted fever, unspecified -A78 Q fever -A790 Trench fever -A791 Rickettsialpox due to Rickettsia akari -A7981 Rickettsiosis due to Ehrlichia sennetsu -A7989 Other specified rickettsioses -A799 Rickettsiosis, unspecified -A800 Acute paralytic poliomyelitis, vaccine-associated -A801 Acute paralytic poliomyelitis, wild virus, imported -A802 Acute paralytic poliomyelitis, wild virus, indigenous -A8030 Acute paralytic poliomyelitis, unspecified -A8039 Other acute paralytic poliomyelitis -A804 Acute nonparalytic poliomyelitis -A809 Acute poliomyelitis, unspecified -A8100 Creutzfeldt-Jakob disease, unspecified -A8101 Variant Creutzfeldt-Jakob disease -A8109 Other Creutzfeldt-Jakob disease -A811 Subacute sclerosing panencephalitis -A812 Progressive multifocal leukoencephalopathy -A8181 Kuru -A8182 Gerstmann-Straussler-Scheinker syndrome -A8183 Fatal familial insomnia -A8189 Other atypical virus infections of central nervous system -A819 Atypical virus infection of central nervous system, unspecified -A820 Sylvatic rabies -A821 Urban rabies -A829 Rabies, unspecified -A830 Japanese encephalitis -A831 Western equine encephalitis -A832 Eastern equine encephalitis -A833 St Louis encephalitis -A834 Australian encephalitis -A835 California encephalitis -A836 Rocio virus disease -A838 Other mosquito-borne viral encephalitis -A839 Mosquito-borne viral encephalitis, unspecified -A840 Far Eastern tick-borne encephalitis [Russian spring-summer encephalitis] -A841 Central European tick-borne encephalitis -A848 Other tick-borne viral encephalitis -A849 Tick-borne viral encephalitis, unspecified -A850 Enteroviral encephalitis -A851 Adenoviral encephalitis -A852 Arthropod-borne viral encephalitis, unspecified -A858 Other specified viral encephalitis -A86 Unspecified viral encephalitis -A870 Enteroviral meningitis -A871 Adenoviral meningitis -A872 Lymphocytic choriomeningitis -A878 Other viral meningitis -A879 Viral meningitis, unspecified -A880 Enteroviral exanthematous fever [Boston exanthem] -A881 Epidemic vertigo -A888 Other specified viral infections of central nervous system -A89 Unspecified viral infection of central nervous system -A90 Dengue fever [classical dengue] -A91 Dengue hemorrhagic fever -A920 Chikungunya virus disease -A921 O'nyong-nyong fever -A922 Venezuelan equine fever -A9230 West Nile virus infection, unspecified -A9231 West Nile virus infection with encephalitis -A9232 West Nile virus infection with other neurologic manifestation -A9239 West Nile virus infection with other complications -A924 Rift Valley fever -A928 Other specified mosquito-borne viral fevers -A929 Mosquito-borne viral fever, unspecified -A930 Oropouche virus disease -A931 Sandfly fever -A932 Colorado tick fever -A938 Other specified arthropod-borne viral fevers -A94 Unspecified arthropod-borne viral fever -A950 Sylvatic yellow fever -A951 Urban yellow fever -A959 Yellow fever, unspecified -A960 Junin hemorrhagic fever -A961 Machupo hemorrhagic fever -A962 Lassa fever -A968 Other arenaviral hemorrhagic fevers -A969 Arenaviral hemorrhagic fever, unspecified -A980 Crimean-Congo hemorrhagic fever -A981 Omsk hemorrhagic fever -A982 Kyasanur Forest disease -A983 Marburg virus disease -A984 Ebola virus disease -A985 Hemorrhagic fever with renal syndrome -A988 Other specified viral hemorrhagic fevers -A99 Unspecified viral hemorrhagic fever -B000 Eczema herpeticum -B001 Herpesviral vesicular dermatitis -B002 Herpesviral gingivostomatitis and pharyngotonsillitis -B003 Herpesviral meningitis -B004 Herpesviral encephalitis -B0050 Herpesviral ocular disease, unspecified -B0051 Herpesviral iridocyclitis -B0052 Herpesviral keratitis -B0053 Herpesviral conjunctivitis -B0059 Other herpesviral disease of eye -B007 Disseminated herpesviral disease -B0081 Herpesviral hepatitis -B0082 Herpes simplex myelitis -B0089 Other herpesviral infection -B009 Herpesviral infection, unspecified -B010 Varicella meningitis -B0111 Varicella encephalitis and encephalomyelitis -B0112 Varicella myelitis -B012 Varicella pneumonia -B0181 Varicella keratitis -B0189 Other varicella complications -B019 Varicella without complication -B020 Zoster encephalitis -B021 Zoster meningitis -B0221 Postherpetic geniculate ganglionitis -B0222 Postherpetic trigeminal neuralgia -B0223 Postherpetic polyneuropathy -B0224 Postherpetic myelitis -B0229 Other postherpetic nervous system involvement -B0230 Zoster ocular disease, unspecified -B0231 Zoster conjunctivitis -B0232 Zoster iridocyclitis -B0233 Zoster keratitis -B0234 Zoster scleritis -B0239 Other herpes zoster eye disease -B027 Disseminated zoster -B028 Zoster with other complications -B029 Zoster without complications -B03 Smallpox -B04 Monkeypox -B050 Measles complicated by encephalitis -B051 Measles complicated by meningitis -B052 Measles complicated by pneumonia -B053 Measles complicated by otitis media -B054 Measles with intestinal complications -B0581 Measles keratitis and keratoconjunctivitis -B0589 Other measles complications -B059 Measles without complication -B0600 Rubella with neurological complication, unspecified -B0601 Rubella encephalitis -B0602 Rubella meningitis -B0609 Other neurological complications of rubella -B0681 Rubella pneumonia -B0682 Rubella arthritis -B0689 Other rubella complications -B069 Rubella without complication -B070 Plantar wart -B078 Other viral warts -B079 Viral wart, unspecified -B08010 Cowpox -B08011 Vaccinia not from vaccine -B0802 Orf virus disease -B0803 Pseudocowpox [milker's node] -B0804 Paravaccinia, unspecified -B0809 Other orthopoxvirus infections -B081 Molluscum contagiosum -B0820 Exanthema subitum [sixth disease], unspecified -B0821 Exanthema subitum [sixth disease] due to human herpesvirus 6 -B0822 Exanthema subitum [sixth disease] due to human herpesvirus 7 -B083 Erythema infectiosum [fifth disease] -B084 Enteroviral vesicular stomatitis with exanthem -B085 Enteroviral vesicular pharyngitis -B0860 Parapoxvirus infection, unspecified -B0861 Bovine stomatitis -B0862 Sealpox -B0869 Other parapoxvirus infections -B0870 Yatapoxvirus infection, unspecified -B0871 Tanapox virus disease -B0872 Yaba pox virus disease -B0879 Other yatapoxvirus infections -B088 Other specified viral infections characterized by skin and mucous membrane lesions -B09 Unspecified viral infection characterized by skin and mucous membrane lesions -B1001 Human herpesvirus 6 encephalitis -B1009 Other human herpesvirus encephalitis -B1081 Human herpesvirus 6 infection -B1082 Human herpesvirus 7 infection -B1089 Other human herpesvirus infection -B150 Hepatitis A with hepatic coma -B159 Hepatitis A without hepatic coma -B160 Acute hepatitis B with delta-agent with hepatic coma -B161 Acute hepatitis B with delta-agent without hepatic coma -B162 Acute hepatitis B without delta-agent with hepatic coma -B169 Acute hepatitis B without delta-agent and without hepatic coma -B170 Acute delta-(super) infection of hepatitis B carrier -B1710 Acute hepatitis C without hepatic coma -B1711 Acute hepatitis C with hepatic coma -B172 Acute hepatitis E -B178 Other specified acute viral hepatitis -B179 Acute viral hepatitis, unspecified -B180 Chronic viral hepatitis B with delta-agent -B181 Chronic viral hepatitis B without delta-agent -B182 Chronic viral hepatitis C -B188 Other chronic viral hepatitis -B189 Chronic viral hepatitis, unspecified -B190 Unspecified viral hepatitis with hepatic coma -B1910 Unspecified viral hepatitis B without hepatic coma -B1911 Unspecified viral hepatitis B with hepatic coma -B1920 Unspecified viral hepatitis C without hepatic coma -B1921 Unspecified viral hepatitis C with hepatic coma -B199 Unspecified viral hepatitis without hepatic coma -B20 Human immunodeficiency virus [HIV] disease -B250 Cytomegaloviral pneumonitis -B251 Cytomegaloviral hepatitis -B252 Cytomegaloviral pancreatitis -B258 Other cytomegaloviral diseases -B259 Cytomegaloviral disease, unspecified -B260 Mumps orchitis -B261 Mumps meningitis -B262 Mumps encephalitis -B263 Mumps pancreatitis -B2681 Mumps hepatitis -B2682 Mumps myocarditis -B2683 Mumps nephritis -B2684 Mumps polyneuropathy -B2685 Mumps arthritis -B2689 Other mumps complications -B269 Mumps without complication -B2700 Gammaherpesviral mononucleosis without complication -B2701 Gammaherpesviral mononucleosis with polyneuropathy -B2702 Gammaherpesviral mononucleosis with meningitis -B2709 Gammaherpesviral mononucleosis with other complications -B2710 Cytomegaloviral mononucleosis without complications -B2711 Cytomegaloviral mononucleosis with polyneuropathy -B2712 Cytomegaloviral mononucleosis with meningitis -B2719 Cytomegaloviral mononucleosis with other complication -B2780 Other infectious mononucleosis without complication -B2781 Other infectious mononucleosis with polyneuropathy -B2782 Other infectious mononucleosis with meningitis -B2789 Other infectious mononucleosis with other complication -B2790 Infectious mononucleosis, unspecified without complication -B2791 Infectious mononucleosis, unspecified with polyneuropathy -B2792 Infectious mononucleosis, unspecified with meningitis -B2799 Infectious mononucleosis, unspecified with other complication -B300 Keratoconjunctivitis due to adenovirus -B301 Conjunctivitis due to adenovirus -B302 Viral pharyngoconjunctivitis -B303 Acute epidemic hemorrhagic conjunctivitis (enteroviral) -B308 Other viral conjunctivitis -B309 Viral conjunctivitis, unspecified -B330 Epidemic myalgia -B331 Ross River disease -B3320 Viral carditis, unspecified -B3321 Viral endocarditis -B3322 Viral myocarditis -B3323 Viral pericarditis -B3324 Viral cardiomyopathy -B333 Retrovirus infections, not elsewhere classified -B334 Hantavirus (cardio)-pulmonary syndrome [HPS] [HCPS] -B338 Other specified viral diseases -B340 Adenovirus infection, unspecified -B341 Enterovirus infection, unspecified -B342 Coronavirus infection, unspecified -B343 Parvovirus infection, unspecified -B344 Papovavirus infection, unspecified -B348 Other viral infections of unspecified site -B349 Viral infection, unspecified -B350 Tinea barbae and tinea capitis -B351 Tinea unguium -B352 Tinea manuum -B353 Tinea pedis -B354 Tinea corporis -B355 Tinea imbricata -B356 Tinea cruris -B358 Other dermatophytoses -B359 Dermatophytosis, unspecified -B360 Pityriasis versicolor -B361 Tinea nigra -B362 White piedra -B363 Black piedra -B368 Other specified superficial mycoses -B369 Superficial mycosis, unspecified -B370 Candidal stomatitis -B371 Pulmonary candidiasis -B372 Candidiasis of skin and nail -B373 Candidiasis of vulva and vagina -B3741 Candidal cystitis and urethritis -B3742 Candidal balanitis -B3749 Other urogenital candidiasis -B375 Candidal meningitis -B376 Candidal endocarditis -B377 Candidal sepsis -B3781 Candidal esophagitis -B3782 Candidal enteritis -B3783 Candidal cheilitis -B3784 Candidal otitis externa -B3789 Other sites of candidiasis -B379 Candidiasis, unspecified -B380 Acute pulmonary coccidioidomycosis -B381 Chronic pulmonary coccidioidomycosis -B382 Pulmonary coccidioidomycosis, unspecified -B383 Cutaneous coccidioidomycosis -B384 Coccidioidomycosis meningitis -B387 Disseminated coccidioidomycosis -B3881 Prostatic coccidioidomycosis -B3889 Other forms of coccidioidomycosis -B389 Coccidioidomycosis, unspecified -B390 Acute pulmonary histoplasmosis capsulati -B391 Chronic pulmonary histoplasmosis capsulati -B392 Pulmonary histoplasmosis capsulati, unspecified -B393 Disseminated histoplasmosis capsulati -B394 Histoplasmosis capsulati, unspecified -B395 Histoplasmosis duboisii -B399 Histoplasmosis, unspecified -B400 Acute pulmonary blastomycosis -B401 Chronic pulmonary blastomycosis -B402 Pulmonary blastomycosis, unspecified -B403 Cutaneous blastomycosis -B407 Disseminated blastomycosis -B4081 Blastomycotic meningoencephalitis -B4089 Other forms of blastomycosis -B409 Blastomycosis, unspecified -B410 Pulmonary paracoccidioidomycosis -B417 Disseminated paracoccidioidomycosis -B418 Other forms of paracoccidioidomycosis -B419 Paracoccidioidomycosis, unspecified -B420 Pulmonary sporotrichosis -B421 Lymphocutaneous sporotrichosis -B427 Disseminated sporotrichosis -B4281 Cerebral sporotrichosis -B4282 Sporotrichosis arthritis -B4289 Other forms of sporotrichosis -B429 Sporotrichosis, unspecified -B430 Cutaneous chromomycosis -B431 Pheomycotic brain abscess -B432 Subcutaneous pheomycotic abscess and cyst -B438 Other forms of chromomycosis -B439 Chromomycosis, unspecified -B440 Invasive pulmonary aspergillosis -B441 Other pulmonary aspergillosis -B442 Tonsillar aspergillosis -B447 Disseminated aspergillosis -B4481 Allergic bronchopulmonary aspergillosis -B4489 Other forms of aspergillosis -B449 Aspergillosis, unspecified -B450 Pulmonary cryptococcosis -B451 Cerebral cryptococcosis -B452 Cutaneous cryptococcosis -B453 Osseous cryptococcosis -B457 Disseminated cryptococcosis -B458 Other forms of cryptococcosis -B459 Cryptococcosis, unspecified -B460 Pulmonary mucormycosis -B461 Rhinocerebral mucormycosis -B462 Gastrointestinal mucormycosis -B463 Cutaneous mucormycosis -B464 Disseminated mucormycosis -B465 Mucormycosis, unspecified -B468 Other zygomycoses -B469 Zygomycosis, unspecified -B470 Eumycetoma -B471 Actinomycetoma -B479 Mycetoma, unspecified -B480 Lobomycosis -B481 Rhinosporidiosis -B482 Allescheriasis -B483 Geotrichosis -B484 Penicillosis -B488 Other specified mycoses -B49 Unspecified mycosis -B500 Plasmodium falciparum malaria with cerebral complications -B508 Other severe and complicated Plasmodium falciparum malaria -B509 Plasmodium falciparum malaria, unspecified -B510 Plasmodium vivax malaria with rupture of spleen -B518 Plasmodium vivax malaria with other complications -B519 Plasmodium vivax malaria without complication -B520 Plasmodium malariae malaria with nephropathy -B528 Plasmodium malariae malaria with other complications -B529 Plasmodium malariae malaria without complication -B530 Plasmodium ovale malaria -B531 Malaria due to simian plasmodia -B538 Other malaria, not elsewhere classified -B54 Unspecified malaria -B550 Visceral leishmaniasis -B551 Cutaneous leishmaniasis -B552 Mucocutaneous leishmaniasis -B559 Leishmaniasis, unspecified -B560 Gambiense trypanosomiasis -B561 Rhodesiense trypanosomiasis -B569 African trypanosomiasis, unspecified -B570 Acute Chagas' disease with heart involvement -B571 Acute Chagas' disease without heart involvement -B572 Chagas' disease (chronic) with heart involvement -B5730 Chagas' disease with digestive system involvement, unspecified -B5731 Megaesophagus in Chagas' disease -B5732 Megacolon in Chagas' disease -B5739 Other digestive system involvement in Chagas' disease -B5740 Chagas' disease with nervous system involvement, unspecified -B5741 Meningitis in Chagas' disease -B5742 Meningoencephalitis in Chagas' disease -B5749 Other nervous system involvement in Chagas' disease -B575 Chagas' disease (chronic) with other organ involvement -B5800 Toxoplasma oculopathy, unspecified -B5801 Toxoplasma chorioretinitis -B5809 Other toxoplasma oculopathy -B581 Toxoplasma hepatitis -B582 Toxoplasma meningoencephalitis -B583 Pulmonary toxoplasmosis -B5881 Toxoplasma myocarditis -B5882 Toxoplasma myositis -B5883 Toxoplasma tubulo-interstitial nephropathy -B5889 Toxoplasmosis with other organ involvement -B589 Toxoplasmosis, unspecified -B59 Pneumocystosis -B600 Babesiosis -B6010 Acanthamebiasis, unspecified -B6011 Meningoencephalitis due to Acanthamoeba (culbertsoni) -B6012 Conjunctivitis due to Acanthamoeba -B6013 Keratoconjunctivitis due to Acanthamoeba -B6019 Other acanthamebic disease -B602 Naegleriasis -B608 Other specified protozoal diseases -B64 Unspecified protozoal disease -B650 Schistosomiasis due to Schistosoma haematobium [urinary schistosomiasis] -B651 Schistosomiasis due to Schistosoma mansoni [intestinal schistosomiasis] -B652 Schistosomiasis due to Schistosoma japonicum -B653 Cercarial dermatitis -B658 Other schistosomiasis -B659 Schistosomiasis, unspecified -B660 Opisthorchiasis -B661 Clonorchiasis -B662 Dicroceliasis -B663 Fascioliasis -B664 Paragonimiasis -B665 Fasciolopsiasis -B668 Other specified fluke infections -B669 Fluke infection, unspecified -B670 Echinococcus granulosus infection of liver -B671 Echinococcus granulosus infection of lung -B672 Echinococcus granulosus infection of bone -B6731 Echinococcus granulosus infection, thyroid gland -B6732 Echinococcus granulosus infection, multiple sites -B6739 Echinococcus granulosus infection, other sites -B674 Echinococcus granulosus infection, unspecified -B675 Echinococcus multilocularis infection of liver -B6761 Echinococcus multilocularis infection, multiple sites -B6769 Echinococcus multilocularis infection, other sites -B677 Echinococcus multilocularis infection, unspecified -B678 Echinococcosis, unspecified, of liver -B6790 Echinococcosis, unspecified -B6799 Other echinococcosis -B680 Taenia solium taeniasis -B681 Taenia saginata taeniasis -B689 Taeniasis, unspecified -B690 Cysticercosis of central nervous system -B691 Cysticercosis of eye -B6981 Myositis in cysticercosis -B6989 Cysticercosis of other sites -B699 Cysticercosis, unspecified -B700 Diphyllobothriasis -B701 Sparganosis -B710 Hymenolepiasis -B711 Dipylidiasis -B718 Other specified cestode infections -B719 Cestode infection, unspecified -B72 Dracunculiasis -B7300 Onchocerciasis with eye involvement, unspecified -B7301 Onchocerciasis with endophthalmitis -B7302 Onchocerciasis with glaucoma -B7309 Onchocerciasis with other eye involvement -B731 Onchocerciasis without eye disease -B740 Filariasis due to Wuchereria bancrofti -B741 Filariasis due to Brugia malayi -B742 Filariasis due to Brugia timori -B743 Loiasis -B744 Mansonelliasis -B748 Other filariases -B749 Filariasis, unspecified -B75 Trichinellosis -B760 Ancylostomiasis -B761 Necatoriasis -B768 Other hookworm diseases -B769 Hookworm disease, unspecified -B770 Ascariasis with intestinal complications -B7781 Ascariasis pneumonia -B7789 Ascariasis with other complications -B779 Ascariasis, unspecified -B780 Intestinal strongyloidiasis -B781 Cutaneous strongyloidiasis -B787 Disseminated strongyloidiasis -B789 Strongyloidiasis, unspecified -B79 Trichuriasis -B80 Enterobiasis -B810 Anisakiasis -B811 Intestinal capillariasis -B812 Trichostrongyliasis -B813 Intestinal angiostrongyliasis -B814 Mixed intestinal helminthiases -B818 Other specified intestinal helminthiases -B820 Intestinal helminthiasis, unspecified -B829 Intestinal parasitism, unspecified -B830 Visceral larva migrans -B831 Gnathostomiasis -B832 Angiostrongyliasis due to Parastrongylus cantonensis -B833 Syngamiasis -B834 Internal hirudiniasis -B838 Other specified helminthiases -B839 Helminthiasis, unspecified -B850 Pediculosis due to Pediculus humanus capitis -B851 Pediculosis due to Pediculus humanus corporis -B852 Pediculosis, unspecified -B853 Phthiriasis -B854 Mixed pediculosis and phthiriasis -B86 Scabies -B870 Cutaneous myiasis -B871 Wound myiasis -B872 Ocular myiasis -B873 Nasopharyngeal myiasis -B874 Aural myiasis -B8781 Genitourinary myiasis -B8782 Intestinal myiasis -B8789 Myiasis of other sites -B879 Myiasis, unspecified -B880 Other acariasis -B881 Tungiasis [sandflea infestation] -B882 Other arthropod infestations -B883 External hirudiniasis -B888 Other specified infestations -B889 Infestation, unspecified -B89 Unspecified parasitic disease -B900 Sequelae of central nervous system tuberculosis -B901 Sequelae of genitourinary tuberculosis -B902 Sequelae of tuberculosis of bones and joints -B908 Sequelae of tuberculosis of other organs -B909 Sequelae of respiratory and unspecified tuberculosis -B91 Sequelae of poliomyelitis -B92 Sequelae of leprosy -B940 Sequelae of trachoma -B941 Sequelae of viral encephalitis -B942 Sequelae of viral hepatitis -B948 Sequelae of other specified infectious and parasitic diseases -B949 Sequelae of unspecified infectious and parasitic disease -B950 Streptococcus, group A, as the cause of diseases classified elsewhere -B951 Streptococcus, group B, as the cause of diseases classified elsewhere -B952 Enterococcus as the cause of diseases classified elsewhere -B953 Streptococcus pneumoniae as the cause of diseases classified elsewhere -B954 Other streptococcus as the cause of diseases classified elsewhere -B955 Unspecified streptococcus as the cause of diseases classified elsewhere -B9561 Methicillin susceptible Staphylococcus aureus infection as the cause of diseases classified elsewhere -B9562 Methicillin resistant Staphylococcus aureus infection as the cause of diseases classified elsewhere -B957 Other staphylococcus as the cause of diseases classified elsewhere -B958 Unspecified staphylococcus as the cause of diseases classified elsewhere -B960 Mycoplasma pneumoniae [M. pneumoniae] as the cause of diseases classified elsewhere -B961 Klebsiella pneumoniae [K. pneumoniae] as the cause of diseases classified elsewhere -B9620 Unspecified Escherichia coli [E. coli] as the cause of diseases classified elsewhere -B9621 Shiga toxin-producing Escherichia coli [E. coli] (STEC) O157 as the cause of diseases classified elsewhere -B9622 Other specified Shiga toxin-producing Escherichia coli [E. coli] (STEC) as the cause of diseases classified elsewhere -B9623 Unspecified Shiga toxin-producing Escherichia coli [E. coli] (STEC) as the cause of diseases classified elsewhere -B9629 Other Escherichia coli [E. coli] as the cause of diseases classified elsewhere -B963 Hemophilus influenzae [H. influenzae] as the cause of diseases classified elsewhere -B964 Proteus (mirabilis) (morganii) as the cause of diseases classified elsewhere -B965 Pseudomonas (aeruginosa) (mallei) (pseudomallei) as the cause of diseases classified elsewhere -B966 Bacteroides fragilis [B. fragilis] as the cause of diseases classified elsewhere -B967 Clostridium perfringens [C. perfringens] as the cause of diseases classified elsewhere -B9681 Helicobacter pylori [H. pylori] as the cause of diseases classified elsewhere -B9682 Vibrio vulnificus as the cause of diseases classified elsewhere -B9689 Other specified bacterial agents as the cause of diseases classified elsewhere -B970 Adenovirus as the cause of diseases classified elsewhere -B9710 Unspecified enterovirus as the cause of diseases classified elsewhere -B9711 Coxsackievirus as the cause of diseases classified elsewhere -B9712 Echovirus as the cause of diseases classified elsewhere -B9719 Other enterovirus as the cause of diseases classified elsewhere -B9721 SARS-associated coronavirus as the cause of diseases classified elsewhere -B9729 Other coronavirus as the cause of diseases classified elsewhere -B9730 Unspecified retrovirus as the cause of diseases classified elsewhere -B9731 Lentivirus as the cause of diseases classified elsewhere -B9732 Oncovirus as the cause of diseases classified elsewhere -B9733 Human T-cell lymphotrophic virus, type I [HTLV-I] as the cause of diseases classified elsewhere -B9734 Human T-cell lymphotrophic virus, type II [HTLV-II] as the cause of diseases classified elsewhere -B9735 Human immunodeficiency virus, type 2 [HIV 2] as the cause of diseases classified elsewhere -B9739 Other retrovirus as the cause of diseases classified elsewhere -B974 Respiratory syncytial virus as the cause of diseases classified elsewhere -B975 Reovirus as the cause of diseases classified elsewhere -B976 Parvovirus as the cause of diseases classified elsewhere -B977 Papillomavirus as the cause of diseases classified elsewhere -B9781 Human metapneumovirus as the cause of diseases classified elsewhere -B9789 Other viral agents as the cause of diseases classified elsewhere -B998 Other infectious disease -B999 Unspecified infectious disease -C000 Malignant neoplasm of external upper lip -C001 Malignant neoplasm of external lower lip -C002 Malignant neoplasm of external lip, unspecified -C003 Malignant neoplasm of upper lip, inner aspect -C004 Malignant neoplasm of lower lip, inner aspect -C005 Malignant neoplasm of lip, unspecified, inner aspect -C006 Malignant neoplasm of commissure of lip, unspecified -C008 Malignant neoplasm of overlapping sites of lip -C009 Malignant neoplasm of lip, unspecified -C01 Malignant neoplasm of base of tongue -C020 Malignant neoplasm of dorsal surface of tongue -C021 Malignant neoplasm of border of tongue -C022 Malignant neoplasm of ventral surface of tongue -C023 Malignant neoplasm of anterior two-thirds of tongue, part unspecified -C024 Malignant neoplasm of lingual tonsil -C028 Malignant neoplasm of overlapping sites of tongue -C029 Malignant neoplasm of tongue, unspecified -C030 Malignant neoplasm of upper gum -C031 Malignant neoplasm of lower gum -C039 Malignant neoplasm of gum, unspecified -C040 Malignant neoplasm of anterior floor of mouth -C041 Malignant neoplasm of lateral floor of mouth -C048 Malignant neoplasm of overlapping sites of floor of mouth -C049 Malignant neoplasm of floor of mouth, unspecified -C050 Malignant neoplasm of hard palate -C051 Malignant neoplasm of soft palate -C052 Malignant neoplasm of uvula -C058 Malignant neoplasm of overlapping sites of palate -C059 Malignant neoplasm of palate, unspecified -C060 Malignant neoplasm of cheek mucosa -C061 Malignant neoplasm of vestibule of mouth -C062 Malignant neoplasm of retromolar area -C0680 Malignant neoplasm of overlapping sites of unspecified parts of mouth -C0689 Malignant neoplasm of overlapping sites of other parts of mouth -C069 Malignant neoplasm of mouth, unspecified -C07 Malignant neoplasm of parotid gland -C080 Malignant neoplasm of submandibular gland -C081 Malignant neoplasm of sublingual gland -C089 Malignant neoplasm of major salivary gland, unspecified -C090 Malignant neoplasm of tonsillar fossa -C091 Malignant neoplasm of tonsillar pillar (anterior) (posterior) -C098 Malignant neoplasm of overlapping sites of tonsil -C099 Malignant neoplasm of tonsil, unspecified -C100 Malignant neoplasm of vallecula -C101 Malignant neoplasm of anterior surface of epiglottis -C102 Malignant neoplasm of lateral wall of oropharynx -C103 Malignant neoplasm of posterior wall of oropharynx -C104 Malignant neoplasm of branchial cleft -C108 Malignant neoplasm of overlapping sites of oropharynx -C109 Malignant neoplasm of oropharynx, unspecified -C110 Malignant neoplasm of superior wall of nasopharynx -C111 Malignant neoplasm of posterior wall of nasopharynx -C112 Malignant neoplasm of lateral wall of nasopharynx -C113 Malignant neoplasm of anterior wall of nasopharynx -C118 Malignant neoplasm of overlapping sites of nasopharynx -C119 Malignant neoplasm of nasopharynx, unspecified -C12 Malignant neoplasm of pyriform sinus -C130 Malignant neoplasm of postcricoid region -C131 Malignant neoplasm of aryepiglottic fold, hypopharyngeal aspect -C132 Malignant neoplasm of posterior wall of hypopharynx -C138 Malignant neoplasm of overlapping sites of hypopharynx -C139 Malignant neoplasm of hypopharynx, unspecified -C140 Malignant neoplasm of pharynx, unspecified -C142 Malignant neoplasm of Waldeyer's ring -C148 Malignant neoplasm of overlapping sites of lip, oral cavity and pharynx -C153 Malignant neoplasm of upper third of esophagus -C154 Malignant neoplasm of middle third of esophagus -C155 Malignant neoplasm of lower third of esophagus -C158 Malignant neoplasm of overlapping sites of esophagus -C159 Malignant neoplasm of esophagus, unspecified -C160 Malignant neoplasm of cardia -C161 Malignant neoplasm of fundus of stomach -C162 Malignant neoplasm of body of stomach -C163 Malignant neoplasm of pyloric antrum -C164 Malignant neoplasm of pylorus -C165 Malignant neoplasm of lesser curvature of stomach, unspecified -C166 Malignant neoplasm of greater curvature of stomach, unspecified -C168 Malignant neoplasm of overlapping sites of stomach -C169 Malignant neoplasm of stomach, unspecified -C170 Malignant neoplasm of duodenum -C171 Malignant neoplasm of jejunum -C172 Malignant neoplasm of ileum -C173 Meckel's diverticulum, malignant -C178 Malignant neoplasm of overlapping sites of small intestine -C179 Malignant neoplasm of small intestine, unspecified -C180 Malignant neoplasm of cecum -C181 Malignant neoplasm of appendix -C182 Malignant neoplasm of ascending colon -C183 Malignant neoplasm of hepatic flexure -C184 Malignant neoplasm of transverse colon -C185 Malignant neoplasm of splenic flexure -C186 Malignant neoplasm of descending colon -C187 Malignant neoplasm of sigmoid colon -C188 Malignant neoplasm of overlapping sites of colon -C189 Malignant neoplasm of colon, unspecified -C19 Malignant neoplasm of rectosigmoid junction -C20 Malignant neoplasm of rectum -C210 Malignant neoplasm of anus, unspecified -C211 Malignant neoplasm of anal canal -C212 Malignant neoplasm of cloacogenic zone -C218 Malignant neoplasm of overlapping sites of rectum, anus and anal canal -C220 Liver cell carcinoma -C221 Intrahepatic bile duct carcinoma -C222 Hepatoblastoma -C223 Angiosarcoma of liver -C224 Other sarcomas of liver -C227 Other specified carcinomas of liver -C228 Malignant neoplasm of liver, primary, unspecified as to type -C229 Malignant neoplasm of liver, not specified as primary or secondary -C23 Malignant neoplasm of gallbladder -C240 Malignant neoplasm of extrahepatic bile duct -C241 Malignant neoplasm of ampulla of Vater -C248 Malignant neoplasm of overlapping sites of biliary tract -C249 Malignant neoplasm of biliary tract, unspecified -C250 Malignant neoplasm of head of pancreas -C251 Malignant neoplasm of body of pancreas -C252 Malignant neoplasm of tail of pancreas -C253 Malignant neoplasm of pancreatic duct -C254 Malignant neoplasm of endocrine pancreas -C257 Malignant neoplasm of other parts of pancreas -C258 Malignant neoplasm of overlapping sites of pancreas -C259 Malignant neoplasm of pancreas, unspecified -C260 Malignant neoplasm of intestinal tract, part unspecified -C261 Malignant neoplasm of spleen -C269 Malignant neoplasm of ill-defined sites within the digestive system -C300 Malignant neoplasm of nasal cavity -C301 Malignant neoplasm of middle ear -C310 Malignant neoplasm of maxillary sinus -C311 Malignant neoplasm of ethmoidal sinus -C312 Malignant neoplasm of frontal sinus -C313 Malignant neoplasm of sphenoid sinus -C318 Malignant neoplasm of overlapping sites of accessory sinuses -C319 Malignant neoplasm of accessory sinus, unspecified -C320 Malignant neoplasm of glottis -C321 Malignant neoplasm of supraglottis -C322 Malignant neoplasm of subglottis -C323 Malignant neoplasm of laryngeal cartilage -C328 Malignant neoplasm of overlapping sites of larynx -C329 Malignant neoplasm of larynx, unspecified -C33 Malignant neoplasm of trachea -C3400 Malignant neoplasm of unspecified main bronchus -C3401 Malignant neoplasm of right main bronchus -C3402 Malignant neoplasm of left main bronchus -C3410 Malignant neoplasm of upper lobe, unspecified bronchus or lung -C3411 Malignant neoplasm of upper lobe, right bronchus or lung -C3412 Malignant neoplasm of upper lobe, left bronchus or lung -C342 Malignant neoplasm of middle lobe, bronchus or lung -C3430 Malignant neoplasm of lower lobe, unspecified bronchus or lung -C3431 Malignant neoplasm of lower lobe, right bronchus or lung -C3432 Malignant neoplasm of lower lobe, left bronchus or lung -C3480 Malignant neoplasm of overlapping sites of unspecified bronchus and lung -C3481 Malignant neoplasm of overlapping sites of right bronchus and lung -C3482 Malignant neoplasm of overlapping sites of left bronchus and lung -C3490 Malignant neoplasm of unspecified part of unspecified bronchus or lung -C3491 Malignant neoplasm of unspecified part of right bronchus or lung -C3492 Malignant neoplasm of unspecified part of left bronchus or lung -C37 Malignant neoplasm of thymus -C380 Malignant neoplasm of heart -C381 Malignant neoplasm of anterior mediastinum -C382 Malignant neoplasm of posterior mediastinum -C383 Malignant neoplasm of mediastinum, part unspecified -C384 Malignant neoplasm of pleura -C388 Malignant neoplasm of overlapping sites of heart, mediastinum and pleura -C390 Malignant neoplasm of upper respiratory tract, part unspecified -C399 Malignant neoplasm of lower respiratory tract, part unspecified -C4000 Malignant neoplasm of scapula and long bones of unspecified upper limb -C4001 Malignant neoplasm of scapula and long bones of right upper limb -C4002 Malignant neoplasm of scapula and long bones of left upper limb -C4010 Malignant neoplasm of short bones of unspecified upper limb -C4011 Malignant neoplasm of short bones of right upper limb -C4012 Malignant neoplasm of short bones of left upper limb -C4020 Malignant neoplasm of long bones of unspecified lower limb -C4021 Malignant neoplasm of long bones of right lower limb -C4022 Malignant neoplasm of long bones of left lower limb -C4030 Malignant neoplasm of short bones of unspecified lower limb -C4031 Malignant neoplasm of short bones of right lower limb -C4032 Malignant neoplasm of short bones of left lower limb -C4080 Malignant neoplasm of overlapping sites of bone and articular cartilage of unspecified limb -C4081 Malignant neoplasm of overlapping sites of bone and articular cartilage of right limb -C4082 Malignant neoplasm of overlapping sites of bone and articular cartilage of left limb -C4090 Malignant neoplasm of unspecified bones and articular cartilage of unspecified limb -C4091 Malignant neoplasm of unspecified bones and articular cartilage of right limb -C4092 Malignant neoplasm of unspecified bones and articular cartilage of left limb -C410 Malignant neoplasm of bones of skull and face -C411 Malignant neoplasm of mandible -C412 Malignant neoplasm of vertebral column -C413 Malignant neoplasm of ribs, sternum and clavicle -C414 Malignant neoplasm of pelvic bones, sacrum and coccyx -C419 Malignant neoplasm of bone and articular cartilage, unspecified -C430 Malignant melanoma of lip -C4310 Malignant melanoma of unspecified eyelid, including canthus -C4311 Malignant melanoma of right eyelid, including canthus -C4312 Malignant melanoma of left eyelid, including canthus -C4320 Malignant melanoma of unspecified ear and external auricular canal -C4321 Malignant melanoma of right ear and external auricular canal -C4322 Malignant melanoma of left ear and external auricular canal -C4330 Malignant melanoma of unspecified part of face -C4331 Malignant melanoma of nose -C4339 Malignant melanoma of other parts of face -C434 Malignant melanoma of scalp and neck -C4351 Malignant melanoma of anal skin -C4352 Malignant melanoma of skin of breast -C4359 Malignant melanoma of other part of trunk -C4360 Malignant melanoma of unspecified upper limb, including shoulder -C4361 Malignant melanoma of right upper limb, including shoulder -C4362 Malignant melanoma of left upper limb, including shoulder -C4370 Malignant melanoma of unspecified lower limb, including hip -C4371 Malignant melanoma of right lower limb, including hip -C4372 Malignant melanoma of left lower limb, including hip -C438 Malignant melanoma of overlapping sites of skin -C439 Malignant melanoma of skin, unspecified -C4A0 Merkel cell carcinoma of lip -C4A10 Merkel cell carcinoma of unspecified eyelid, including canthus -C4A11 Merkel cell carcinoma of right eyelid, including canthus -C4A12 Merkel cell carcinoma of left eyelid, including canthus -C4A20 Merkel cell carcinoma of unspecified ear and external auricular canal -C4A21 Merkel cell carcinoma of right ear and external auricular canal -C4A22 Merkel cell carcinoma of left ear and external auricular canal -C4A30 Merkel cell carcinoma of unspecified part of face -C4A31 Merkel cell carcinoma of nose -C4A39 Merkel cell carcinoma of other parts of face -C4A4 Merkel cell carcinoma of scalp and neck -C4A51 Merkel cell carcinoma of anal skin -C4A52 Merkel cell carcinoma of skin of breast -C4A59 Merkel cell carcinoma of other part of trunk -C4A60 Merkel cell carcinoma of unspecified upper limb, including shoulder -C4A61 Merkel cell carcinoma of right upper limb, including shoulder -C4A62 Merkel cell carcinoma of left upper limb, including shoulder -C4A70 Merkel cell carcinoma of unspecified lower limb, including hip -C4A71 Merkel cell carcinoma of right lower limb, including hip -C4A72 Merkel cell carcinoma of left lower limb, including hip -C4A8 Merkel cell carcinoma of overlapping sites -C4A9 Merkel cell carcinoma, unspecified -C4400 Unspecified malignant neoplasm of skin of lip -C4401 Basal cell carcinoma of skin of lip -C4402 Squamous cell carcinoma of skin of lip -C4409 Other specified malignant neoplasm of skin of lip -C44101 Unspecified malignant neoplasm of skin of unspecified eyelid, including canthus -C44102 Unspecified malignant neoplasm of skin of right eyelid, including canthus -C44109 Unspecified malignant neoplasm of skin of left eyelid, including canthus -C44111 Basal cell carcinoma of skin of unspecified eyelid, including canthus -C44112 Basal cell carcinoma of skin of right eyelid, including canthus -C44119 Basal cell carcinoma of skin of left eyelid, including canthus -C44121 Squamous cell carcinoma of skin of unspecified eyelid, including canthus -C44122 Squamous cell carcinoma of skin of right eyelid, including canthus -C44129 Squamous cell carcinoma of skin of left eyelid, including canthus -C44191 Other specified malignant neoplasm of skin of unspecified eyelid, including canthus -C44192 Other specified malignant neoplasm of skin of right eyelid, including canthus -C44199 Other specified malignant neoplasm of skin of left eyelid, including canthus -C44201 Unspecified malignant neoplasm of skin of unspecified ear and external auricular canal -C44202 Unspecified malignant neoplasm of skin of right ear and external auricular canal -C44209 Unspecified malignant neoplasm of skin of left ear and external auricular canal -C44211 Basal cell carcinoma of skin of unspecified ear and external auricular canal -C44212 Basal cell carcinoma of skin of right ear and external auricular canal -C44219 Basal cell carcinoma of skin of left ear and external auricular canal -C44221 Squamous cell carcinoma of skin of unspecified ear and external auricular canal -C44222 Squamous cell carcinoma of skin of right ear and external auricular canal -C44229 Squamous cell carcinoma of skin of left ear and external auricular canal -C44291 Other specified malignant neoplasm of skin of unspecified ear and external auricular canal -C44292 Other specified malignant neoplasm of skin of right ear and external auricular canal -C44299 Other specified malignant neoplasm of skin of left ear and external auricular canal -C44300 Unspecified malignant neoplasm of skin of unspecified part of face -C44301 Unspecified malignant neoplasm of skin of nose -C44309 Unspecified malignant neoplasm of skin of other parts of face -C44310 Basal cell carcinoma of skin of unspecified parts of face -C44311 Basal cell carcinoma of skin of nose -C44319 Basal cell carcinoma of skin of other parts of face -C44320 Squamous cell carcinoma of skin of unspecified parts of face -C44321 Squamous cell carcinoma of skin of nose -C44329 Squamous cell carcinoma of skin of other parts of face -C44390 Other specified malignant neoplasm of skin of unspecified parts of face -C44391 Other specified malignant neoplasm of skin of nose -C44399 Other specified malignant neoplasm of skin of other parts of face -C4440 Unspecified malignant neoplasm of skin of scalp and neck -C4441 Basal cell carcinoma of skin of scalp and neck -C4442 Squamous cell carcinoma of skin of scalp and neck -C4449 Other specified malignant neoplasm of skin of scalp and neck -C44500 Unspecified malignant neoplasm of anal skin -C44501 Unspecified malignant neoplasm of skin of breast -C44509 Unspecified malignant neoplasm of skin of other part of trunk -C44510 Basal cell carcinoma of anal skin -C44511 Basal cell carcinoma of skin of breast -C44519 Basal cell carcinoma of skin of other part of trunk -C44520 Squamous cell carcinoma of anal skin -C44521 Squamous cell carcinoma of skin of breast -C44529 Squamous cell carcinoma of skin of other part of trunk -C44590 Other specified malignant neoplasm of anal skin -C44591 Other specified malignant neoplasm of skin of breast -C44599 Other specified malignant neoplasm of skin of other part of trunk -C44601 Unspecified malignant neoplasm of skin of unspecified upper limb, including shoulder -C44602 Unspecified malignant neoplasm of skin of right upper limb, including shoulder -C44609 Unspecified malignant neoplasm of skin of left upper limb, including shoulder -C44611 Basal cell carcinoma of skin of unspecified upper limb, including shoulder -C44612 Basal cell carcinoma of skin of right upper limb, including shoulder -C44619 Basal cell carcinoma of skin of left upper limb, including shoulder -C44621 Squamous cell carcinoma of skin of unspecified upper limb, including shoulder -C44622 Squamous cell carcinoma of skin of right upper limb, including shoulder -C44629 Squamous cell carcinoma of skin of left upper limb, including shoulder -C44691 Other specified malignant neoplasm of skin of unspecified upper limb, including shoulder -C44692 Other specified malignant neoplasm of skin of right upper limb, including shoulder -C44699 Other specified malignant neoplasm of skin of left upper limb, including shoulder -C44701 Unspecified malignant neoplasm of skin of unspecified lower limb, including hip -C44702 Unspecified malignant neoplasm of skin of right lower limb, including hip -C44709 Unspecified malignant neoplasm of skin of left lower limb, including hip -C44711 Basal cell carcinoma of skin of unspecified lower limb, including hip -C44712 Basal cell carcinoma of skin of right lower limb, including hip -C44719 Basal cell carcinoma of skin of left lower limb, including hip -C44721 Squamous cell carcinoma of skin of unspecified lower limb, including hip -C44722 Squamous cell carcinoma of skin of right lower limb, including hip -C44729 Squamous cell carcinoma of skin of left lower limb, including hip -C44791 Other specified malignant neoplasm of skin of unspecified lower limb, including hip -C44792 Other specified malignant neoplasm of skin of right lower limb, including hip -C44799 Other specified malignant neoplasm of skin of left lower limb, including hip -C4480 Unspecified malignant neoplasm of overlapping sites of skin -C4481 Basal cell carcinoma of overlapping sites of skin -C4482 Squamous cell carcinoma of overlapping sites of skin -C4489 Other specified malignant neoplasm of overlapping sites of skin -C4490 Unspecified malignant neoplasm of skin, unspecified -C4491 Basal cell carcinoma of skin, unspecified -C4492 Squamous cell carcinoma of skin, unspecified -C4499 Other specified malignant neoplasm of skin, unspecified -C450 Mesothelioma of pleura -C451 Mesothelioma of peritoneum -C452 Mesothelioma of pericardium -C457 Mesothelioma of other sites -C459 Mesothelioma, unspecified -C460 Kaposi's sarcoma of skin -C461 Kaposi's sarcoma of soft tissue -C462 Kaposi's sarcoma of palate -C463 Kaposi's sarcoma of lymph nodes -C464 Kaposi's sarcoma of gastrointestinal sites -C4650 Kaposi's sarcoma of unspecified lung -C4651 Kaposi's sarcoma of right lung -C4652 Kaposi's sarcoma of left lung -C467 Kaposi's sarcoma of other sites -C469 Kaposi's sarcoma, unspecified -C470 Malignant neoplasm of peripheral nerves of head, face and neck -C4710 Malignant neoplasm of peripheral nerves of unspecified upper limb, including shoulder -C4711 Malignant neoplasm of peripheral nerves of right upper limb, including shoulder -C4712 Malignant neoplasm of peripheral nerves of left upper limb, including shoulder -C4720 Malignant neoplasm of peripheral nerves of unspecified lower limb, including hip -C4721 Malignant neoplasm of peripheral nerves of right lower limb, including hip -C4722 Malignant neoplasm of peripheral nerves of left lower limb, including hip -C473 Malignant neoplasm of peripheral nerves of thorax -C474 Malignant neoplasm of peripheral nerves of abdomen -C475 Malignant neoplasm of peripheral nerves of pelvis -C476 Malignant neoplasm of peripheral nerves of trunk, unspecified -C478 Malignant neoplasm of overlapping sites of peripheral nerves and autonomic nervous system -C479 Malignant neoplasm of peripheral nerves and autonomic nervous system, unspecified -C480 Malignant neoplasm of retroperitoneum -C481 Malignant neoplasm of specified parts of peritoneum -C482 Malignant neoplasm of peritoneum, unspecified -C488 Malignant neoplasm of overlapping sites of retroperitoneum and peritoneum -C490 Malignant neoplasm of connective and soft tissue of head, face and neck -C4910 Malignant neoplasm of connective and soft tissue of unspecified upper limb, including shoulder -C4911 Malignant neoplasm of connective and soft tissue of right upper limb, including shoulder -C4912 Malignant neoplasm of connective and soft tissue of left upper limb, including shoulder -C4920 Malignant neoplasm of connective and soft tissue of unspecified lower limb, including hip -C4921 Malignant neoplasm of connective and soft tissue of right lower limb, including hip -C4922 Malignant neoplasm of connective and soft tissue of left lower limb, including hip -C493 Malignant neoplasm of connective and soft tissue of thorax -C494 Malignant neoplasm of connective and soft tissue of abdomen -C495 Malignant neoplasm of connective and soft tissue of pelvis -C496 Malignant neoplasm of connective and soft tissue of trunk, unspecified -C498 Malignant neoplasm of overlapping sites of connective and soft tissue -C499 Malignant neoplasm of connective and soft tissue, unspecified -C50011 Malignant neoplasm of nipple and areola, right female breast -C50012 Malignant neoplasm of nipple and areola, left female breast -C50019 Malignant neoplasm of nipple and areola, unspecified female breast -C50021 Malignant neoplasm of nipple and areola, right male breast -C50022 Malignant neoplasm of nipple and areola, left male breast -C50029 Malignant neoplasm of nipple and areola, unspecified male breast -C50111 Malignant neoplasm of central portion of right female breast -C50112 Malignant neoplasm of central portion of left female breast -C50119 Malignant neoplasm of central portion of unspecified female breast -C50121 Malignant neoplasm of central portion of right male breast -C50122 Malignant neoplasm of central portion of left male breast -C50129 Malignant neoplasm of central portion of unspecified male breast -C50211 Malignant neoplasm of upper-inner quadrant of right female breast -C50212 Malignant neoplasm of upper-inner quadrant of left female breast -C50219 Malignant neoplasm of upper-inner quadrant of unspecified female breast -C50221 Malignant neoplasm of upper-inner quadrant of right male breast -C50222 Malignant neoplasm of upper-inner quadrant of left male breast -C50229 Malignant neoplasm of upper-inner quadrant of unspecified male breast -C50311 Malignant neoplasm of lower-inner quadrant of right female breast -C50312 Malignant neoplasm of lower-inner quadrant of left female breast -C50319 Malignant neoplasm of lower-inner quadrant of unspecified female breast -C50321 Malignant neoplasm of lower-inner quadrant of right male breast -C50322 Malignant neoplasm of lower-inner quadrant of left male breast -C50329 Malignant neoplasm of lower-inner quadrant of unspecified male breast -C50411 Malignant neoplasm of upper-outer quadrant of right female breast -C50412 Malignant neoplasm of upper-outer quadrant of left female breast -C50419 Malignant neoplasm of upper-outer quadrant of unspecified female breast -C50421 Malignant neoplasm of upper-outer quadrant of right male breast -C50422 Malignant neoplasm of upper-outer quadrant of left male breast -C50429 Malignant neoplasm of upper-outer quadrant of unspecified male breast -C50511 Malignant neoplasm of lower-outer quadrant of right female breast -C50512 Malignant neoplasm of lower-outer quadrant of left female breast -C50519 Malignant neoplasm of lower-outer quadrant of unspecified female breast -C50521 Malignant neoplasm of lower-outer quadrant of right male breast -C50522 Malignant neoplasm of lower-outer quadrant of left male breast -C50529 Malignant neoplasm of lower-outer quadrant of unspecified male breast -C50611 Malignant neoplasm of axillary tail of right female breast -C50612 Malignant neoplasm of axillary tail of left female breast -C50619 Malignant neoplasm of axillary tail of unspecified female breast -C50621 Malignant neoplasm of axillary tail of right male breast -C50622 Malignant neoplasm of axillary tail of left male breast -C50629 Malignant neoplasm of axillary tail of unspecified male breast -C50811 Malignant neoplasm of overlapping sites of right female breast -C50812 Malignant neoplasm of overlapping sites of left female breast -C50819 Malignant neoplasm of overlapping sites of unspecified female breast -C50821 Malignant neoplasm of overlapping sites of right male breast -C50822 Malignant neoplasm of overlapping sites of left male breast -C50829 Malignant neoplasm of overlapping sites of unspecified male breast -C50911 Malignant neoplasm of unspecified site of right female breast -C50912 Malignant neoplasm of unspecified site of left female breast -C50919 Malignant neoplasm of unspecified site of unspecified female breast -C50921 Malignant neoplasm of unspecified site of right male breast -C50922 Malignant neoplasm of unspecified site of left male breast -C50929 Malignant neoplasm of unspecified site of unspecified male breast -C510 Malignant neoplasm of labium majus -C511 Malignant neoplasm of labium minus -C512 Malignant neoplasm of clitoris -C518 Malignant neoplasm of overlapping sites of vulva -C519 Malignant neoplasm of vulva, unspecified -C52 Malignant neoplasm of vagina -C530 Malignant neoplasm of endocervix -C531 Malignant neoplasm of exocervix -C538 Malignant neoplasm of overlapping sites of cervix uteri -C539 Malignant neoplasm of cervix uteri, unspecified -C540 Malignant neoplasm of isthmus uteri -C541 Malignant neoplasm of endometrium -C542 Malignant neoplasm of myometrium -C543 Malignant neoplasm of fundus uteri -C548 Malignant neoplasm of overlapping sites of corpus uteri -C549 Malignant neoplasm of corpus uteri, unspecified -C55 Malignant neoplasm of uterus, part unspecified -C561 Malignant neoplasm of right ovary -C562 Malignant neoplasm of left ovary -C569 Malignant neoplasm of unspecified ovary -C5700 Malignant neoplasm of unspecified fallopian tube -C5701 Malignant neoplasm of right fallopian tube -C5702 Malignant neoplasm of left fallopian tube -C5710 Malignant neoplasm of unspecified broad ligament -C5711 Malignant neoplasm of right broad ligament -C5712 Malignant neoplasm of left broad ligament -C5720 Malignant neoplasm of unspecified round ligament -C5721 Malignant neoplasm of right round ligament -C5722 Malignant neoplasm of left round ligament -C573 Malignant neoplasm of parametrium -C574 Malignant neoplasm of uterine adnexa, unspecified -C577 Malignant neoplasm of other specified female genital organs -C578 Malignant neoplasm of overlapping sites of female genital organs -C579 Malignant neoplasm of female genital organ, unspecified -C58 Malignant neoplasm of placenta -C600 Malignant neoplasm of prepuce -C601 Malignant neoplasm of glans penis -C602 Malignant neoplasm of body of penis -C608 Malignant neoplasm of overlapping sites of penis -C609 Malignant neoplasm of penis, unspecified -C61 Malignant neoplasm of prostate -C6200 Malignant neoplasm of unspecified undescended testis -C6201 Malignant neoplasm of undescended right testis -C6202 Malignant neoplasm of undescended left testis -C6210 Malignant neoplasm of unspecified descended testis -C6211 Malignant neoplasm of descended right testis -C6212 Malignant neoplasm of descended left testis -C6290 Malignant neoplasm of unspecified testis, unspecified whether descended or undescended -C6291 Malignant neoplasm of right testis, unspecified whether descended or undescended -C6292 Malignant neoplasm of left testis, unspecified whether descended or undescended -C6300 Malignant neoplasm of unspecified epididymis -C6301 Malignant neoplasm of right epididymis -C6302 Malignant neoplasm of left epididymis -C6310 Malignant neoplasm of unspecified spermatic cord -C6311 Malignant neoplasm of right spermatic cord -C6312 Malignant neoplasm of left spermatic cord -C632 Malignant neoplasm of scrotum -C637 Malignant neoplasm of other specified male genital organs -C638 Malignant neoplasm of overlapping sites of male genital organs -C639 Malignant neoplasm of male genital organ, unspecified -C641 Malignant neoplasm of right kidney, except renal pelvis -C642 Malignant neoplasm of left kidney, except renal pelvis -C649 Malignant neoplasm of unspecified kidney, except renal pelvis -C651 Malignant neoplasm of right renal pelvis -C652 Malignant neoplasm of left renal pelvis -C659 Malignant neoplasm of unspecified renal pelvis -C661 Malignant neoplasm of right ureter -C662 Malignant neoplasm of left ureter -C669 Malignant neoplasm of unspecified ureter -C670 Malignant neoplasm of trigone of bladder -C671 Malignant neoplasm of dome of bladder -C672 Malignant neoplasm of lateral wall of bladder -C673 Malignant neoplasm of anterior wall of bladder -C674 Malignant neoplasm of posterior wall of bladder -C675 Malignant neoplasm of bladder neck -C676 Malignant neoplasm of ureteric orifice -C677 Malignant neoplasm of urachus -C678 Malignant neoplasm of overlapping sites of bladder -C679 Malignant neoplasm of bladder, unspecified -C680 Malignant neoplasm of urethra -C681 Malignant neoplasm of paraurethral glands -C688 Malignant neoplasm of overlapping sites of urinary organs -C689 Malignant neoplasm of urinary organ, unspecified -C6900 Malignant neoplasm of unspecified conjunctiva -C6901 Malignant neoplasm of right conjunctiva -C6902 Malignant neoplasm of left conjunctiva -C6910 Malignant neoplasm of unspecified cornea -C6911 Malignant neoplasm of right cornea -C6912 Malignant neoplasm of left cornea -C6920 Malignant neoplasm of unspecified retina -C6921 Malignant neoplasm of right retina -C6922 Malignant neoplasm of left retina -C6930 Malignant neoplasm of unspecified choroid -C6931 Malignant neoplasm of right choroid -C6932 Malignant neoplasm of left choroid -C6940 Malignant neoplasm of unspecified ciliary body -C6941 Malignant neoplasm of right ciliary body -C6942 Malignant neoplasm of left ciliary body -C6950 Malignant neoplasm of unspecified lacrimal gland and duct -C6951 Malignant neoplasm of right lacrimal gland and duct -C6952 Malignant neoplasm of left lacrimal gland and duct -C6960 Malignant neoplasm of unspecified orbit -C6961 Malignant neoplasm of right orbit -C6962 Malignant neoplasm of left orbit -C6980 Malignant neoplasm of overlapping sites of unspecified eye and adnexa -C6981 Malignant neoplasm of overlapping sites of right eye and adnexa -C6982 Malignant neoplasm of overlapping sites of left eye and adnexa -C6990 Malignant neoplasm of unspecified site of unspecified eye -C6991 Malignant neoplasm of unspecified site of right eye -C6992 Malignant neoplasm of unspecified site of left eye -C700 Malignant neoplasm of cerebral meninges -C701 Malignant neoplasm of spinal meninges -C709 Malignant neoplasm of meninges, unspecified -C710 Malignant neoplasm of cerebrum, except lobes and ventricles -C711 Malignant neoplasm of frontal lobe -C712 Malignant neoplasm of temporal lobe -C713 Malignant neoplasm of parietal lobe -C714 Malignant neoplasm of occipital lobe -C715 Malignant neoplasm of cerebral ventricle -C716 Malignant neoplasm of cerebellum -C717 Malignant neoplasm of brain stem -C718 Malignant neoplasm of overlapping sites of brain -C719 Malignant neoplasm of brain, unspecified -C720 Malignant neoplasm of spinal cord -C721 Malignant neoplasm of cauda equina -C7220 Malignant neoplasm of unspecified olfactory nerve -C7221 Malignant neoplasm of right olfactory nerve -C7222 Malignant neoplasm of left olfactory nerve -C7230 Malignant neoplasm of unspecified optic nerve -C7231 Malignant neoplasm of right optic nerve -C7232 Malignant neoplasm of left optic nerve -C7240 Malignant neoplasm of unspecified acoustic nerve -C7241 Malignant neoplasm of right acoustic nerve -C7242 Malignant neoplasm of left acoustic nerve -C7250 Malignant neoplasm of unspecified cranial nerve -C7259 Malignant neoplasm of other cranial nerves -C729 Malignant neoplasm of central nervous system, unspecified -C73 Malignant neoplasm of thyroid gland -C7400 Malignant neoplasm of cortex of unspecified adrenal gland -C7401 Malignant neoplasm of cortex of right adrenal gland -C7402 Malignant neoplasm of cortex of left adrenal gland -C7410 Malignant neoplasm of medulla of unspecified adrenal gland -C7411 Malignant neoplasm of medulla of right adrenal gland -C7412 Malignant neoplasm of medulla of left adrenal gland -C7490 Malignant neoplasm of unspecified part of unspecified adrenal gland -C7491 Malignant neoplasm of unspecified part of right adrenal gland -C7492 Malignant neoplasm of unspecified part of left adrenal gland -C750 Malignant neoplasm of parathyroid gland -C751 Malignant neoplasm of pituitary gland -C752 Malignant neoplasm of craniopharyngeal duct -C753 Malignant neoplasm of pineal gland -C754 Malignant neoplasm of carotid body -C755 Malignant neoplasm of aortic body and other paraganglia -C758 Malignant neoplasm with pluriglandular involvement, unspecified -C759 Malignant neoplasm of endocrine gland, unspecified -C7A00 Malignant carcinoid tumor of unspecified site -C7A010 Malignant carcinoid tumor of the duodenum -C7A011 Malignant carcinoid tumor of the jejunum -C7A012 Malignant carcinoid tumor of the ileum -C7A019 Malignant carcinoid tumor of the small intestine, unspecified portion -C7A020 Malignant carcinoid tumor of the appendix -C7A021 Malignant carcinoid tumor of the cecum -C7A022 Malignant carcinoid tumor of the ascending colon -C7A023 Malignant carcinoid tumor of the transverse colon -C7A024 Malignant carcinoid tumor of the descending colon -C7A025 Malignant carcinoid tumor of the sigmoid colon -C7A026 Malignant carcinoid tumor of the rectum -C7A029 Malignant carcinoid tumor of the large intestine, unspecified portion -C7A090 Malignant carcinoid tumor of the bronchus and lung -C7A091 Malignant carcinoid tumor of the thymus -C7A092 Malignant carcinoid tumor of the stomach -C7A093 Malignant carcinoid tumor of the kidney -C7A094 Malignant carcinoid tumor of the foregut NOS -C7A095 Malignant carcinoid tumor of the midgut NOS -C7A096 Malignant carcinoid tumor of the hindgut NOS -C7A098 Malignant carcinoid tumors of other sites -C7A1 Malignant poorly differentiated neuroendocrine tumors -C7A8 Other malignant neuroendocrine tumors -C7B00 Secondary carcinoid tumors, unspecified site -C7B01 Secondary carcinoid tumors of distant lymph nodes -C7B02 Secondary carcinoid tumors of liver -C7B03 Secondary carcinoid tumors of bone -C7B04 Secondary carcinoid tumors of peritoneum -C7B09 Secondary carcinoid tumors of other sites -C7B1 Secondary Merkel cell carcinoma -C7B8 Other secondary neuroendocrine tumors -C760 Malignant neoplasm of head, face and neck -C761 Malignant neoplasm of thorax -C762 Malignant neoplasm of abdomen -C763 Malignant neoplasm of pelvis -C7640 Malignant neoplasm of unspecified upper limb -C7641 Malignant neoplasm of right upper limb -C7642 Malignant neoplasm of left upper limb -C7650 Malignant neoplasm of unspecified lower limb -C7651 Malignant neoplasm of right lower limb -C7652 Malignant neoplasm of left lower limb -C768 Malignant neoplasm of other specified ill-defined sites -C770 Secondary and unspecified malignant neoplasm of lymph nodes of head, face and neck -C771 Secondary and unspecified malignant neoplasm of intrathoracic lymph nodes -C772 Secondary and unspecified malignant neoplasm of intra-abdominal lymph nodes -C773 Secondary and unspecified malignant neoplasm of axilla and upper limb lymph nodes -C774 Secondary and unspecified malignant neoplasm of inguinal and lower limb lymph nodes -C775 Secondary and unspecified malignant neoplasm of intrapelvic lymph nodes -C778 Secondary and unspecified malignant neoplasm of lymph nodes of multiple regions -C779 Secondary and unspecified malignant neoplasm of lymph node, unspecified -C7800 Secondary malignant neoplasm of unspecified lung -C7801 Secondary malignant neoplasm of right lung -C7802 Secondary malignant neoplasm of left lung -C781 Secondary malignant neoplasm of mediastinum -C782 Secondary malignant neoplasm of pleura -C7830 Secondary malignant neoplasm of unspecified respiratory organ -C7839 Secondary malignant neoplasm of other respiratory organs -C784 Secondary malignant neoplasm of small intestine -C785 Secondary malignant neoplasm of large intestine and rectum -C786 Secondary malignant neoplasm of retroperitoneum and peritoneum -C787 Secondary malignant neoplasm of liver and intrahepatic bile duct -C7880 Secondary malignant neoplasm of unspecified digestive organ -C7889 Secondary malignant neoplasm of other digestive organs -C7900 Secondary malignant neoplasm of unspecified kidney and renal pelvis -C7901 Secondary malignant neoplasm of right kidney and renal pelvis -C7902 Secondary malignant neoplasm of left kidney and renal pelvis -C7910 Secondary malignant neoplasm of unspecified urinary organs -C7911 Secondary malignant neoplasm of bladder -C7919 Secondary malignant neoplasm of other urinary organs -C792 Secondary malignant neoplasm of skin -C7931 Secondary malignant neoplasm of brain -C7932 Secondary malignant neoplasm of cerebral meninges -C7940 Secondary malignant neoplasm of unspecified part of nervous system -C7949 Secondary malignant neoplasm of other parts of nervous system -C7951 Secondary malignant neoplasm of bone -C7952 Secondary malignant neoplasm of bone marrow -C7960 Secondary malignant neoplasm of unspecified ovary -C7961 Secondary malignant neoplasm of right ovary -C7962 Secondary malignant neoplasm of left ovary -C7970 Secondary malignant neoplasm of unspecified adrenal gland -C7971 Secondary malignant neoplasm of right adrenal gland -C7972 Secondary malignant neoplasm of left adrenal gland -C7981 Secondary malignant neoplasm of breast -C7982 Secondary malignant neoplasm of genital organs -C7989 Secondary malignant neoplasm of other specified sites -C799 Secondary malignant neoplasm of unspecified site -C800 Disseminated malignant neoplasm, unspecified -C801 Malignant (primary) neoplasm, unspecified -C802 Malignant neoplasm associated with transplanted organ -C8100 Nodular lymphocyte predominant Hodgkin lymphoma, unspecified site -C8101 Nodular lymphocyte predominant Hodgkin lymphoma, lymph nodes of head, face, and neck -C8102 Nodular lymphocyte predominant Hodgkin lymphoma, intrathoracic lymph nodes -C8103 Nodular lymphocyte predominant Hodgkin lymphoma, intra-abdominal lymph nodes -C8104 Nodular lymphocyte predominant Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8105 Nodular lymphocyte predominant Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8106 Nodular lymphocyte predominant Hodgkin lymphoma, intrapelvic lymph nodes -C8107 Nodular lymphocyte predominant Hodgkin lymphoma, spleen -C8108 Nodular lymphocyte predominant Hodgkin lymphoma, lymph nodes of multiple sites -C8109 Nodular lymphocyte predominant Hodgkin lymphoma, extranodal and solid organ sites -C8110 Nodular sclerosis classical Hodgkin lymphoma, unspecified site -C8111 Nodular sclerosis classical Hodgkin lymphoma, lymph nodes of head, face, and neck -C8112 Nodular sclerosis classical Hodgkin lymphoma, intrathoracic lymph nodes -C8113 Nodular sclerosis classical Hodgkin lymphoma, intra-abdominal lymph nodes -C8114 Nodular sclerosis classical Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8115 Nodular sclerosis classical Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8116 Nodular sclerosis classical Hodgkin lymphoma, intrapelvic lymph nodes -C8117 Nodular sclerosis classical Hodgkin lymphoma, spleen -C8118 Nodular sclerosis classical Hodgkin lymphoma, lymph nodes of multiple sites -C8119 Nodular sclerosis classical Hodgkin lymphoma, extranodal and solid organ sites -C8120 Mixed cellularity classical Hodgkin lymphoma, unspecified site -C8121 Mixed cellularity classical Hodgkin lymphoma, lymph nodes of head, face, and neck -C8122 Mixed cellularity classical Hodgkin lymphoma, intrathoracic lymph nodes -C8123 Mixed cellularity classical Hodgkin lymphoma, intra-abdominal lymph nodes -C8124 Mixed cellularity classical Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8125 Mixed cellularity classical Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8126 Mixed cellularity classical Hodgkin lymphoma, intrapelvic lymph nodes -C8127 Mixed cellularity classical Hodgkin lymphoma, spleen -C8128 Mixed cellularity classical Hodgkin lymphoma, lymph nodes of multiple sites -C8129 Mixed cellularity classical Hodgkin lymphoma, extranodal and solid organ sites -C8130 Lymphocyte depleted classical Hodgkin lymphoma, unspecified site -C8131 Lymphocyte depleted classical Hodgkin lymphoma, lymph nodes of head, face, and neck -C8132 Lymphocyte depleted classical Hodgkin lymphoma, intrathoracic lymph nodes -C8133 Lymphocyte depleted classical Hodgkin lymphoma, intra-abdominal lymph nodes -C8134 Lymphocyte depleted classical Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8135 Lymphocyte depleted classical Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8136 Lymphocyte depleted classical Hodgkin lymphoma, intrapelvic lymph nodes -C8137 Lymphocyte depleted classical Hodgkin lymphoma, spleen -C8138 Lymphocyte depleted classical Hodgkin lymphoma, lymph nodes of multiple sites -C8139 Lymphocyte depleted classical Hodgkin lymphoma, extranodal and solid organ sites -C8140 Lymphocyte-rich classical Hodgkin lymphoma, unspecified site -C8141 Lymphocyte-rich classical Hodgkin lymphoma, lymph nodes of head, face, and neck -C8142 Lymphocyte-rich classical Hodgkin lymphoma, intrathoracic lymph nodes -C8143 Lymphocyte-rich classical Hodgkin lymphoma, intra-abdominal lymph nodes -C8144 Lymphocyte-rich classical Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8145 Lymphocyte-rich classical Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8146 Lymphocyte-rich classical Hodgkin lymphoma, intrapelvic lymph nodes -C8147 Lymphocyte-rich classical Hodgkin lymphoma, spleen -C8148 Lymphocyte-rich classical Hodgkin lymphoma, lymph nodes of multiple sites -C8149 Lymphocyte-rich classical Hodgkin lymphoma, extranodal and solid organ sites -C8170 Other classical Hodgkin lymphoma, unspecified site -C8171 Other classical Hodgkin lymphoma, lymph nodes of head, face, and neck -C8172 Other classical Hodgkin lymphoma, intrathoracic lymph nodes -C8173 Other classical Hodgkin lymphoma, intra-abdominal lymph nodes -C8174 Other classical Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8175 Other classical Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8176 Other classical Hodgkin lymphoma, intrapelvic lymph nodes -C8177 Other classical Hodgkin lymphoma, spleen -C8178 Other classical Hodgkin lymphoma, lymph nodes of multiple sites -C8179 Other classical Hodgkin lymphoma, extranodal and solid organ sites -C8190 Hodgkin lymphoma, unspecified, unspecified site -C8191 Hodgkin lymphoma, unspecified, lymph nodes of head, face, and neck -C8192 Hodgkin lymphoma, unspecified, intrathoracic lymph nodes -C8193 Hodgkin lymphoma, unspecified, intra-abdominal lymph nodes -C8194 Hodgkin lymphoma, unspecified, lymph nodes of axilla and upper limb -C8195 Hodgkin lymphoma, unspecified, lymph nodes of inguinal region and lower limb -C8196 Hodgkin lymphoma, unspecified, intrapelvic lymph nodes -C8197 Hodgkin lymphoma, unspecified, spleen -C8198 Hodgkin lymphoma, unspecified, lymph nodes of multiple sites -C8199 Hodgkin lymphoma, unspecified, extranodal and solid organ sites -C8200 Follicular lymphoma grade I, unspecified site -C8201 Follicular lymphoma grade I, lymph nodes of head, face, and neck -C8202 Follicular lymphoma grade I, intrathoracic lymph nodes -C8203 Follicular lymphoma grade I, intra-abdominal lymph nodes -C8204 Follicular lymphoma grade I, lymph nodes of axilla and upper limb -C8205 Follicular lymphoma grade I, lymph nodes of inguinal region and lower limb -C8206 Follicular lymphoma grade I, intrapelvic lymph nodes -C8207 Follicular lymphoma grade I, spleen -C8208 Follicular lymphoma grade I, lymph nodes of multiple sites -C8209 Follicular lymphoma grade I, extranodal and solid organ sites -C8210 Follicular lymphoma grade II, unspecified site -C8211 Follicular lymphoma grade II, lymph nodes of head, face, and neck -C8212 Follicular lymphoma grade II, intrathoracic lymph nodes -C8213 Follicular lymphoma grade II, intra-abdominal lymph nodes -C8214 Follicular lymphoma grade II, lymph nodes of axilla and upper limb -C8215 Follicular lymphoma grade II, lymph nodes of inguinal region and lower limb -C8216 Follicular lymphoma grade II, intrapelvic lymph nodes -C8217 Follicular lymphoma grade II, spleen -C8218 Follicular lymphoma grade II, lymph nodes of multiple sites -C8219 Follicular lymphoma grade II, extranodal and solid organ sites -C8220 Follicular lymphoma grade III, unspecified, unspecified site -C8221 Follicular lymphoma grade III, unspecified, lymph nodes of head, face, and neck -C8222 Follicular lymphoma grade III, unspecified, intrathoracic lymph nodes -C8223 Follicular lymphoma grade III, unspecified, intra-abdominal lymph nodes -C8224 Follicular lymphoma grade III, unspecified, lymph nodes of axilla and upper limb -C8225 Follicular lymphoma grade III, unspecified, lymph nodes of inguinal region and lower limb -C8226 Follicular lymphoma grade III, unspecified, intrapelvic lymph nodes -C8227 Follicular lymphoma grade III, unspecified, spleen -C8228 Follicular lymphoma grade III, unspecified, lymph nodes of multiple sites -C8229 Follicular lymphoma grade III, unspecified, extranodal and solid organ sites -C8230 Follicular lymphoma grade IIIa, unspecified site -C8231 Follicular lymphoma grade IIIa, lymph nodes of head, face, and neck -C8232 Follicular lymphoma grade IIIa, intrathoracic lymph nodes -C8233 Follicular lymphoma grade IIIa, intra-abdominal lymph nodes -C8234 Follicular lymphoma grade IIIa, lymph nodes of axilla and upper limb -C8235 Follicular lymphoma grade IIIa, lymph nodes of inguinal region and lower limb -C8236 Follicular lymphoma grade IIIa, intrapelvic lymph nodes -C8237 Follicular lymphoma grade IIIa, spleen -C8238 Follicular lymphoma grade IIIa, lymph nodes of multiple sites -C8239 Follicular lymphoma grade IIIa, extranodal and solid organ sites -C8240 Follicular lymphoma grade IIIb, unspecified site -C8241 Follicular lymphoma grade IIIb, lymph nodes of head, face, and neck -C8242 Follicular lymphoma grade IIIb, intrathoracic lymph nodes -C8243 Follicular lymphoma grade IIIb, intra-abdominal lymph nodes -C8244 Follicular lymphoma grade IIIb, lymph nodes of axilla and upper limb -C8245 Follicular lymphoma grade IIIb, lymph nodes of inguinal region and lower limb -C8246 Follicular lymphoma grade IIIb, intrapelvic lymph nodes -C8247 Follicular lymphoma grade IIIb, spleen -C8248 Follicular lymphoma grade IIIb, lymph nodes of multiple sites -C8249 Follicular lymphoma grade IIIb, extranodal and solid organ sites -C8250 Diffuse follicle center lymphoma, unspecified site -C8251 Diffuse follicle center lymphoma, lymph nodes of head, face, and neck -C8252 Diffuse follicle center lymphoma, intrathoracic lymph nodes -C8253 Diffuse follicle center lymphoma, intra-abdominal lymph nodes -C8254 Diffuse follicle center lymphoma, lymph nodes of axilla and upper limb -C8255 Diffuse follicle center lymphoma, lymph nodes of inguinal region and lower limb -C8256 Diffuse follicle center lymphoma, intrapelvic lymph nodes -C8257 Diffuse follicle center lymphoma, spleen -C8258 Diffuse follicle center lymphoma, lymph nodes of multiple sites -C8259 Diffuse follicle center lymphoma, extranodal and solid organ sites -C8260 Cutaneous follicle center lymphoma, unspecified site -C8261 Cutaneous follicle center lymphoma, lymph nodes of head, face, and neck -C8262 Cutaneous follicle center lymphoma, intrathoracic lymph nodes -C8263 Cutaneous follicle center lymphoma, intra-abdominal lymph nodes -C8264 Cutaneous follicle center lymphoma, lymph nodes of axilla and upper limb -C8265 Cutaneous follicle center lymphoma, lymph nodes of inguinal region and lower limb -C8266 Cutaneous follicle center lymphoma, intrapelvic lymph nodes -C8267 Cutaneous follicle center lymphoma, spleen -C8268 Cutaneous follicle center lymphoma, lymph nodes of multiple sites -C8269 Cutaneous follicle center lymphoma, extranodal and solid organ sites -C8280 Other types of follicular lymphoma, unspecified site -C8281 Other types of follicular lymphoma, lymph nodes of head, face, and neck -C8282 Other types of follicular lymphoma, intrathoracic lymph nodes -C8283 Other types of follicular lymphoma, intra-abdominal lymph nodes -C8284 Other types of follicular lymphoma, lymph nodes of axilla and upper limb -C8285 Other types of follicular lymphoma, lymph nodes of inguinal region and lower limb -C8286 Other types of follicular lymphoma, intrapelvic lymph nodes -C8287 Other types of follicular lymphoma, spleen -C8288 Other types of follicular lymphoma, lymph nodes of multiple sites -C8289 Other types of follicular lymphoma, extranodal and solid organ sites -C8290 Follicular lymphoma, unspecified, unspecified site -C8291 Follicular lymphoma, unspecified, lymph nodes of head, face, and neck -C8292 Follicular lymphoma, unspecified, intrathoracic lymph nodes -C8293 Follicular lymphoma, unspecified, intra-abdominal lymph nodes -C8294 Follicular lymphoma, unspecified, lymph nodes of axilla and upper limb -C8295 Follicular lymphoma, unspecified, lymph nodes of inguinal region and lower limb -C8296 Follicular lymphoma, unspecified, intrapelvic lymph nodes -C8297 Follicular lymphoma, unspecified, spleen -C8298 Follicular lymphoma, unspecified, lymph nodes of multiple sites -C8299 Follicular lymphoma, unspecified, extranodal and solid organ sites -C8300 Small cell B-cell lymphoma, unspecified site -C8301 Small cell B-cell lymphoma, lymph nodes of head, face, and neck -C8302 Small cell B-cell lymphoma, intrathoracic lymph nodes -C8303 Small cell B-cell lymphoma, intra-abdominal lymph nodes -C8304 Small cell B-cell lymphoma, lymph nodes of axilla and upper limb -C8305 Small cell B-cell lymphoma, lymph nodes of inguinal region and lower limb -C8306 Small cell B-cell lymphoma, intrapelvic lymph nodes -C8307 Small cell B-cell lymphoma, spleen -C8308 Small cell B-cell lymphoma, lymph nodes of multiple sites -C8309 Small cell B-cell lymphoma, extranodal and solid organ sites -C8310 Mantle cell lymphoma, unspecified site -C8311 Mantle cell lymphoma, lymph nodes of head, face, and neck -C8312 Mantle cell lymphoma, intrathoracic lymph nodes -C8313 Mantle cell lymphoma, intra-abdominal lymph nodes -C8314 Mantle cell lymphoma, lymph nodes of axilla and upper limb -C8315 Mantle cell lymphoma, lymph nodes of inguinal region and lower limb -C8316 Mantle cell lymphoma, intrapelvic lymph nodes -C8317 Mantle cell lymphoma, spleen -C8318 Mantle cell lymphoma, lymph nodes of multiple sites -C8319 Mantle cell lymphoma, extranodal and solid organ sites -C8330 Diffuse large B-cell lymphoma, unspecified site -C8331 Diffuse large B-cell lymphoma, lymph nodes of head, face, and neck -C8332 Diffuse large B-cell lymphoma, intrathoracic lymph nodes -C8333 Diffuse large B-cell lymphoma, intra-abdominal lymph nodes -C8334 Diffuse large B-cell lymphoma, lymph nodes of axilla and upper limb -C8335 Diffuse large B-cell lymphoma, lymph nodes of inguinal region and lower limb -C8336 Diffuse large B-cell lymphoma, intrapelvic lymph nodes -C8337 Diffuse large B-cell lymphoma, spleen -C8338 Diffuse large B-cell lymphoma, lymph nodes of multiple sites -C8339 Diffuse large B-cell lymphoma, extranodal and solid organ sites -C8350 Lymphoblastic (diffuse) lymphoma, unspecified site -C8351 Lymphoblastic (diffuse) lymphoma, lymph nodes of head, face, and neck -C8352 Lymphoblastic (diffuse) lymphoma, intrathoracic lymph nodes -C8353 Lymphoblastic (diffuse) lymphoma, intra-abdominal lymph nodes -C8354 Lymphoblastic (diffuse) lymphoma, lymph nodes of axilla and upper limb -C8355 Lymphoblastic (diffuse) lymphoma, lymph nodes of inguinal region and lower limb -C8356 Lymphoblastic (diffuse) lymphoma, intrapelvic lymph nodes -C8357 Lymphoblastic (diffuse) lymphoma, spleen -C8358 Lymphoblastic (diffuse) lymphoma, lymph nodes of multiple sites -C8359 Lymphoblastic (diffuse) lymphoma, extranodal and solid organ sites -C8370 Burkitt lymphoma, unspecified site -C8371 Burkitt lymphoma, lymph nodes of head, face, and neck -C8372 Burkitt lymphoma, intrathoracic lymph nodes -C8373 Burkitt lymphoma, intra-abdominal lymph nodes -C8374 Burkitt lymphoma, lymph nodes of axilla and upper limb -C8375 Burkitt lymphoma, lymph nodes of inguinal region and lower limb -C8376 Burkitt lymphoma, intrapelvic lymph nodes -C8377 Burkitt lymphoma, spleen -C8378 Burkitt lymphoma, lymph nodes of multiple sites -C8379 Burkitt lymphoma, extranodal and solid organ sites -C8380 Other non-follicular lymphoma, unspecified site -C8381 Other non-follicular lymphoma, lymph nodes of head, face, and neck -C8382 Other non-follicular lymphoma, intrathoracic lymph nodes -C8383 Other non-follicular lymphoma, intra-abdominal lymph nodes -C8384 Other non-follicular lymphoma, lymph nodes of axilla and upper limb -C8385 Other non-follicular lymphoma, lymph nodes of inguinal region and lower limb -C8386 Other non-follicular lymphoma, intrapelvic lymph nodes -C8387 Other non-follicular lymphoma, spleen -C8388 Other non-follicular lymphoma, lymph nodes of multiple sites -C8389 Other non-follicular lymphoma, extranodal and solid organ sites -C8390 Non-follicular (diffuse) lymphoma, unspecified, unspecified site -C8391 Non-follicular (diffuse) lymphoma, unspecified, lymph nodes of head, face, and neck -C8392 Non-follicular (diffuse) lymphoma, unspecified, intrathoracic lymph nodes -C8393 Non-follicular (diffuse) lymphoma, unspecified, intra-abdominal lymph nodes -C8394 Non-follicular (diffuse) lymphoma, unspecified, lymph nodes of axilla and upper limb -C8395 Non-follicular (diffuse) lymphoma, unspecified, lymph nodes of inguinal region and lower limb -C8396 Non-follicular (diffuse) lymphoma, unspecified, intrapelvic lymph nodes -C8397 Non-follicular (diffuse) lymphoma, unspecified, spleen -C8398 Non-follicular (diffuse) lymphoma, unspecified, lymph nodes of multiple sites -C8399 Non-follicular (diffuse) lymphoma, unspecified, extranodal and solid organ sites -C8400 Mycosis fungoides, unspecified site -C8401 Mycosis fungoides, lymph nodes of head, face, and neck -C8402 Mycosis fungoides, intrathoracic lymph nodes -C8403 Mycosis fungoides, intra-abdominal lymph nodes -C8404 Mycosis fungoides, lymph nodes of axilla and upper limb -C8405 Mycosis fungoides, lymph nodes of inguinal region and lower limb -C8406 Mycosis fungoides, intrapelvic lymph nodes -C8407 Mycosis fungoides, spleen -C8408 Mycosis fungoides, lymph nodes of multiple sites -C8409 Mycosis fungoides, extranodal and solid organ sites -C8410 Sezary disease, unspecified site -C8411 Sezary disease, lymph nodes of head, face, and neck -C8412 Sezary disease, intrathoracic lymph nodes -C8413 Sezary disease, intra-abdominal lymph nodes -C8414 Sezary disease, lymph nodes of axilla and upper limb -C8415 Sezary disease, lymph nodes of inguinal region and lower limb -C8416 Sezary disease, intrapelvic lymph nodes -C8417 Sezary disease, spleen -C8418 Sezary disease, lymph nodes of multiple sites -C8419 Sezary disease, extranodal and solid organ sites -C8440 Peripheral T-cell lymphoma, not classified, unspecified site -C8441 Peripheral T-cell lymphoma, not classified, lymph nodes of head, face, and neck -C8442 Peripheral T-cell lymphoma, not classified, intrathoracic lymph nodes -C8443 Peripheral T-cell lymphoma, not classified, intra-abdominal lymph nodes -C8444 Peripheral T-cell lymphoma, not classified, lymph nodes of axilla and upper limb -C8445 Peripheral T-cell lymphoma, not classified, lymph nodes of inguinal region and lower limb -C8446 Peripheral T-cell lymphoma, not classified, intrapelvic lymph nodes -C8447 Peripheral T-cell lymphoma, not classified, spleen -C8448 Peripheral T-cell lymphoma, not classified, lymph nodes of multiple sites -C8449 Peripheral T-cell lymphoma, not classified, extranodal and solid organ sites -C8460 Anaplastic large cell lymphoma, ALK-positive, unspecified site -C8461 Anaplastic large cell lymphoma, ALK-positive, lymph nodes of head, face, and neck -C8462 Anaplastic large cell lymphoma, ALK-positive, intrathoracic lymph nodes -C8463 Anaplastic large cell lymphoma, ALK-positive, intra-abdominal lymph nodes -C8464 Anaplastic large cell lymphoma, ALK-positive, lymph nodes of axilla and upper limb -C8465 Anaplastic large cell lymphoma, ALK-positive, lymph nodes of inguinal region and lower limb -C8466 Anaplastic large cell lymphoma, ALK-positive, intrapelvic lymph nodes -C8467 Anaplastic large cell lymphoma, ALK-positive, spleen -C8468 Anaplastic large cell lymphoma, ALK-positive, lymph nodes of multiple sites -C8469 Anaplastic large cell lymphoma, ALK-positive, extranodal and solid organ sites -C8470 Anaplastic large cell lymphoma, ALK-negative, unspecified site -C8471 Anaplastic large cell lymphoma, ALK-negative, lymph nodes of head, face, and neck -C8472 Anaplastic large cell lymphoma, ALK-negative, intrathoracic lymph nodes -C8473 Anaplastic large cell lymphoma, ALK-negative, intra-abdominal lymph nodes -C8474 Anaplastic large cell lymphoma, ALK-negative, lymph nodes of axilla and upper limb -C8475 Anaplastic large cell lymphoma, ALK-negative, lymph nodes of inguinal region and lower limb -C8476 Anaplastic large cell lymphoma, ALK-negative, intrapelvic lymph nodes -C8477 Anaplastic large cell lymphoma, ALK-negative, spleen -C8478 Anaplastic large cell lymphoma, ALK-negative, lymph nodes of multiple sites -C8479 Anaplastic large cell lymphoma, ALK-negative, extranodal and solid organ sites -C84A0 Cutaneous T-cell lymphoma, unspecified, unspecified site -C84A1 Cutaneous T-cell lymphoma, unspecified lymph nodes of head, face, and neck -C84A2 Cutaneous T-cell lymphoma, unspecified, intrathoracic lymph nodes -C84A3 Cutaneous T-cell lymphoma, unspecified, intra-abdominal lymph nodes -C84A4 Cutaneous T-cell lymphoma, unspecified, lymph nodes of axilla and upper limb -C84A5 Cutaneous T-cell lymphoma, unspecified, lymph nodes of inguinal region and lower limb -C84A6 Cutaneous T-cell lymphoma, unspecified, intrapelvic lymph nodes -C84A7 Cutaneous T-cell lymphoma, unspecified, spleen -C84A8 Cutaneous T-cell lymphoma, unspecified, lymph nodes of multiple sites -C84A9 Cutaneous T-cell lymphoma, unspecified, extranodal and solid organ sites -C84Z0 Other mature T/NK-cell lymphomas, unspecified site -C84Z1 Other mature T/NK-cell lymphomas, lymph nodes of head, face, and neck -C84Z2 Other mature T/NK-cell lymphomas, intrathoracic lymph nodes -C84Z3 Other mature T/NK-cell lymphomas, intra-abdominal lymph nodes -C84Z4 Other mature T/NK-cell lymphomas, lymph nodes of axilla and upper limb -C84Z5 Other mature T/NK-cell lymphomas, lymph nodes of inguinal region and lower limb -C84Z6 Other mature T/NK-cell lymphomas, intrapelvic lymph nodes -C84Z7 Other mature T/NK-cell lymphomas, spleen -C84Z8 Other mature T/NK-cell lymphomas, lymph nodes of multiple sites -C84Z9 Other mature T/NK-cell lymphomas, extranodal and solid organ sites -C8490 Mature T/NK-cell lymphomas, unspecified, unspecified site -C8491 Mature T/NK-cell lymphomas, unspecified, lymph nodes of head, face, and neck -C8492 Mature T/NK-cell lymphomas, unspecified, intrathoracic lymph nodes -C8493 Mature T/NK-cell lymphomas, unspecified, intra-abdominal lymph nodes -C8494 Mature T/NK-cell lymphomas, unspecified, lymph nodes of axilla and upper limb -C8495 Mature T/NK-cell lymphomas, unspecified, lymph nodes of inguinal region and lower limb -C8496 Mature T/NK-cell lymphomas, unspecified, intrapelvic lymph nodes -C8497 Mature T/NK-cell lymphomas, unspecified, spleen -C8498 Mature T/NK-cell lymphomas, unspecified, lymph nodes of multiple sites -C8499 Mature T/NK-cell lymphomas, unspecified, extranodal and solid organ sites -C8510 Unspecified B-cell lymphoma, unspecified site -C8511 Unspecified B-cell lymphoma, lymph nodes of head, face, and neck -C8512 Unspecified B-cell lymphoma, intrathoracic lymph nodes -C8513 Unspecified B-cell lymphoma, intra-abdominal lymph nodes -C8514 Unspecified B-cell lymphoma, lymph nodes of axilla and upper limb -C8515 Unspecified B-cell lymphoma, lymph nodes of inguinal region and lower limb -C8516 Unspecified B-cell lymphoma, intrapelvic lymph nodes -C8517 Unspecified B-cell lymphoma, spleen -C8518 Unspecified B-cell lymphoma, lymph nodes of multiple sites -C8519 Unspecified B-cell lymphoma, extranodal and solid organ sites -C8520 Mediastinal (thymic) large B-cell lymphoma, unspecified site -C8521 Mediastinal (thymic) large B-cell lymphoma, lymph nodes of head, face, and neck -C8522 Mediastinal (thymic) large B-cell lymphoma, intrathoracic lymph nodes -C8523 Mediastinal (thymic) large B-cell lymphoma, intra-abdominal lymph nodes -C8524 Mediastinal (thymic) large B-cell lymphoma, lymph nodes of axilla and upper limb -C8525 Mediastinal (thymic) large B-cell lymphoma, lymph nodes of inguinal region and lower limb -C8526 Mediastinal (thymic) large B-cell lymphoma, intrapelvic lymph nodes -C8527 Mediastinal (thymic) large B-cell lymphoma, spleen -C8528 Mediastinal (thymic) large B-cell lymphoma, lymph nodes of multiple sites -C8529 Mediastinal (thymic) large B-cell lymphoma, extranodal and solid organ sites -C8580 Other specified types of non-Hodgkin lymphoma, unspecified site -C8581 Other specified types of non-Hodgkin lymphoma, lymph nodes of head, face, and neck -C8582 Other specified types of non-Hodgkin lymphoma, intrathoracic lymph nodes -C8583 Other specified types of non-Hodgkin lymphoma, intra-abdominal lymph nodes -C8584 Other specified types of non-Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8585 Other specified types of non-Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8586 Other specified types of non-Hodgkin lymphoma, intrapelvic lymph nodes -C8587 Other specified types of non-Hodgkin lymphoma, spleen -C8588 Other specified types of non-Hodgkin lymphoma, lymph nodes of multiple sites -C8589 Other specified types of non-Hodgkin lymphoma, extranodal and solid organ sites -C8590 Non-Hodgkin lymphoma, unspecified, unspecified site -C8591 Non-Hodgkin lymphoma, unspecified, lymph nodes of head, face, and neck -C8592 Non-Hodgkin lymphoma, unspecified, intrathoracic lymph nodes -C8593 Non-Hodgkin lymphoma, unspecified, intra-abdominal lymph nodes -C8594 Non-Hodgkin lymphoma, unspecified, lymph nodes of axilla and upper limb -C8595 Non-Hodgkin lymphoma, unspecified, lymph nodes of inguinal region and lower limb -C8596 Non-Hodgkin lymphoma, unspecified, intrapelvic lymph nodes -C8597 Non-Hodgkin lymphoma, unspecified, spleen -C8598 Non-Hodgkin lymphoma, unspecified, lymph nodes of multiple sites -C8599 Non-Hodgkin lymphoma, unspecified, extranodal and solid organ sites -C860 Extranodal NK/T-cell lymphoma, nasal type -C861 Hepatosplenic T-cell lymphoma -C862 Enteropathy-type (intestinal) T-cell lymphoma -C863 Subcutaneous panniculitis-like T-cell lymphoma -C864 Blastic NK-cell lymphoma -C865 Angioimmunoblastic T-cell lymphoma -C866 Primary cutaneous CD30-positive T-cell proliferations -C880 Waldenstrom macroglobulinemia -C882 Heavy chain disease -C883 Immunoproliferative small intestinal disease -C884 Extranodal marginal zone B-cell lymphoma of mucosa-associated lymphoid tissue [MALT-lymphoma] -C888 Other malignant immunoproliferative diseases -C889 Malignant immunoproliferative disease, unspecified -C9000 Multiple myeloma not having achieved remission -C9001 Multiple myeloma in remission -C9002 Multiple myeloma in relapse -C9010 Plasma cell leukemia not having achieved remission -C9011 Plasma cell leukemia in remission -C9012 Plasma cell leukemia in relapse -C9020 Extramedullary plasmacytoma not having achieved remission -C9021 Extramedullary plasmacytoma in remission -C9022 Extramedullary plasmacytoma in relapse -C9030 Solitary plasmacytoma not having achieved remission -C9031 Solitary plasmacytoma in remission -C9032 Solitary plasmacytoma in relapse -C9100 Acute lymphoblastic leukemia not having achieved remission -C9101 Acute lymphoblastic leukemia, in remission -C9102 Acute lymphoblastic leukemia, in relapse -C9110 Chronic lymphocytic leukemia of B-cell type not having achieved remission -C9111 Chronic lymphocytic leukemia of B-cell type in remission -C9112 Chronic lymphocytic leukemia of B-cell type in relapse -C9130 Prolymphocytic leukemia of B-cell type not having achieved remission -C9131 Prolymphocytic leukemia of B-cell type, in remission -C9132 Prolymphocytic leukemia of B-cell type, in relapse -C9140 Hairy cell leukemia not having achieved remission -C9141 Hairy cell leukemia, in remission -C9142 Hairy cell leukemia, in relapse -C9150 Adult T-cell lymphoma/leukemia (HTLV-1-associated) not having achieved remission -C9151 Adult T-cell lymphoma/leukemia (HTLV-1-associated), in remission -C9152 Adult T-cell lymphoma/leukemia (HTLV-1-associated), in relapse -C9160 Prolymphocytic leukemia of T-cell type not having achieved remission -C9161 Prolymphocytic leukemia of T-cell type, in remission -C9162 Prolymphocytic leukemia of T-cell type, in relapse -C91A0 Mature B-cell leukemia Burkitt-type not having achieved remission -C91A1 Mature B-cell leukemia Burkitt-type, in remission -C91A2 Mature B-cell leukemia Burkitt-type, in relapse -C91Z0 Other lymphoid leukemia not having achieved remission -C91Z1 Other lymphoid leukemia, in remission -C91Z2 Other lymphoid leukemia, in relapse -C9190 Lymphoid leukemia, unspecified not having achieved remission -C9191 Lymphoid leukemia, unspecified, in remission -C9192 Lymphoid leukemia, unspecified, in relapse -C9200 Acute myeloblastic leukemia, not having achieved remission -C9201 Acute myeloblastic leukemia, in remission -C9202 Acute myeloblastic leukemia, in relapse -C9210 Chronic myeloid leukemia, BCR/ABL-positive, not having achieved remission -C9211 Chronic myeloid leukemia, BCR/ABL-positive, in remission -C9212 Chronic myeloid leukemia, BCR/ABL-positive, in relapse -C9220 Atypical chronic myeloid leukemia, BCR/ABL-negative, not having achieved remission -C9221 Atypical chronic myeloid leukemia, BCR/ABL-negative, in remission -C9222 Atypical chronic myeloid leukemia, BCR/ABL-negative, in relapse -C9230 Myeloid sarcoma, not having achieved remission -C9231 Myeloid sarcoma, in remission -C9232 Myeloid sarcoma, in relapse -C9240 Acute promyelocytic leukemia, not having achieved remission -C9241 Acute promyelocytic leukemia, in remission -C9242 Acute promyelocytic leukemia, in relapse -C9250 Acute myelomonocytic leukemia, not having achieved remission -C9251 Acute myelomonocytic leukemia, in remission -C9252 Acute myelomonocytic leukemia, in relapse -C9260 Acute myeloid leukemia with 11q23-abnormality not having achieved remission -C9261 Acute myeloid leukemia with 11q23-abnormality in remission -C9262 Acute myeloid leukemia with 11q23-abnormality in relapse -C92A0 Acute myeloid leukemia with multilineage dysplasia, not having achieved remission -C92A1 Acute myeloid leukemia with multilineage dysplasia, in remission -C92A2 Acute myeloid leukemia with multilineage dysplasia, in relapse -C92Z0 Other myeloid leukemia not having achieved remission -C92Z1 Other myeloid leukemia, in remission -C92Z2 Other myeloid leukemia, in relapse -C9290 Myeloid leukemia, unspecified, not having achieved remission -C9291 Myeloid leukemia, unspecified in remission -C9292 Myeloid leukemia, unspecified in relapse -C9300 Acute monoblastic/monocytic leukemia, not having achieved remission -C9301 Acute monoblastic/monocytic leukemia, in remission -C9302 Acute monoblastic/monocytic leukemia, in relapse -C9310 Chronic myelomonocytic leukemia not having achieved remission -C9311 Chronic myelomonocytic leukemia, in remission -C9312 Chronic myelomonocytic leukemia, in relapse -C9330 Juvenile myelomonocytic leukemia, not having achieved remission -C9331 Juvenile myelomonocytic leukemia, in remission -C9332 Juvenile myelomonocytic leukemia, in relapse -C93Z0 Other monocytic leukemia, not having achieved remission -C93Z1 Other monocytic leukemia, in remission -C93Z2 Other monocytic leukemia, in relapse -C9390 Monocytic leukemia, unspecified, not having achieved remission -C9391 Monocytic leukemia, unspecified in remission -C9392 Monocytic leukemia, unspecified in relapse -C9400 Acute erythroid leukemia, not having achieved remission -C9401 Acute erythroid leukemia, in remission -C9402 Acute erythroid leukemia, in relapse -C9420 Acute megakaryoblastic leukemia not having achieved remission -C9421 Acute megakaryoblastic leukemia, in remission -C9422 Acute megakaryoblastic leukemia, in relapse -C9430 Mast cell leukemia not having achieved remission -C9431 Mast cell leukemia, in remission -C9432 Mast cell leukemia, in relapse -C9440 Acute panmyelosis with myelofibrosis not having achieved remission -C9441 Acute panmyelosis with myelofibrosis, in remission -C9442 Acute panmyelosis with myelofibrosis, in relapse -C946 Myelodysplastic disease, not classified -C9480 Other specified leukemias not having achieved remission -C9481 Other specified leukemias, in remission -C9482 Other specified leukemias, in relapse -C9500 Acute leukemia of unspecified cell type not having achieved remission -C9501 Acute leukemia of unspecified cell type, in remission -C9502 Acute leukemia of unspecified cell type, in relapse -C9510 Chronic leukemia of unspecified cell type not having achieved remission -C9511 Chronic leukemia of unspecified cell type, in remission -C9512 Chronic leukemia of unspecified cell type, in relapse -C9590 Leukemia, unspecified not having achieved remission -C9591 Leukemia, unspecified, in remission -C9592 Leukemia, unspecified, in relapse -C960 Multifocal and multisystemic (disseminated) Langerhans-cell histiocytosis -C962 Malignant mast cell tumor -C964 Sarcoma of dendritic cells (accessory cells) -C965 Multifocal and unisystemic Langerhans-cell histiocytosis -C966 Unifocal Langerhans-cell histiocytosis -C96A Histiocytic sarcoma -C96Z Other specified malignant neoplasms of lymphoid, hematopoietic and related tissue -C969 Malignant neoplasm of lymphoid, hematopoietic and related tissue, unspecified -D0000 Carcinoma in situ of oral cavity, unspecified site -D0001 Carcinoma in situ of labial mucosa and vermilion border -D0002 Carcinoma in situ of buccal mucosa -D0003 Carcinoma in situ of gingiva and edentulous alveolar ridge -D0004 Carcinoma in situ of soft palate -D0005 Carcinoma in situ of hard palate -D0006 Carcinoma in situ of floor of mouth -D0007 Carcinoma in situ of tongue -D0008 Carcinoma in situ of pharynx -D001 Carcinoma in situ of esophagus -D002 Carcinoma in situ of stomach -D010 Carcinoma in situ of colon -D011 Carcinoma in situ of rectosigmoid junction -D012 Carcinoma in situ of rectum -D013 Carcinoma in situ of anus and anal canal -D0140 Carcinoma in situ of unspecified part of intestine -D0149 Carcinoma in situ of other parts of intestine -D015 Carcinoma in situ of liver, gallbladder and bile ducts -D017 Carcinoma in situ of other specified digestive organs -D019 Carcinoma in situ of digestive organ, unspecified -D020 Carcinoma in situ of larynx -D021 Carcinoma in situ of trachea -D0220 Carcinoma in situ of unspecified bronchus and lung -D0221 Carcinoma in situ of right bronchus and lung -D0222 Carcinoma in situ of left bronchus and lung -D023 Carcinoma in situ of other parts of respiratory system -D024 Carcinoma in situ of respiratory system, unspecified -D030 Melanoma in situ of lip -D0310 Melanoma in situ of unspecified eyelid, including canthus -D0311 Melanoma in situ of right eyelid, including canthus -D0312 Melanoma in situ of left eyelid, including canthus -D0320 Melanoma in situ of unspecified ear and external auricular canal -D0321 Melanoma in situ of right ear and external auricular canal -D0322 Melanoma in situ of left ear and external auricular canal -D0330 Melanoma in situ of unspecified part of face -D0339 Melanoma in situ of other parts of face -D034 Melanoma in situ of scalp and neck -D0351 Melanoma in situ of anal skin -D0352 Melanoma in situ of breast (skin) (soft tissue) -D0359 Melanoma in situ of other part of trunk -D0360 Melanoma in situ of unspecified upper limb, including shoulder -D0361 Melanoma in situ of right upper limb, including shoulder -D0362 Melanoma in situ of left upper limb, including shoulder -D0370 Melanoma in situ of unspecified lower limb, including hip -D0371 Melanoma in situ of right lower limb, including hip -D0372 Melanoma in situ of left lower limb, including hip -D038 Melanoma in situ of other sites -D039 Melanoma in situ, unspecified -D040 Carcinoma in situ of skin of lip -D0410 Carcinoma in situ of skin of unspecified eyelid, including canthus -D0411 Carcinoma in situ of skin of right eyelid, including canthus -D0412 Carcinoma in situ of skin of left eyelid, including canthus -D0420 Carcinoma in situ of skin of unspecified ear and external auricular canal -D0421 Carcinoma in situ of skin of right ear and external auricular canal -D0422 Carcinoma in situ of skin of left ear and external auricular canal -D0430 Carcinoma in situ of skin of unspecified part of face -D0439 Carcinoma in situ of skin of other parts of face -D044 Carcinoma in situ of skin of scalp and neck -D045 Carcinoma in situ of skin of trunk -D0460 Carcinoma in situ of skin of unspecified upper limb, including shoulder -D0461 Carcinoma in situ of skin of right upper limb, including shoulder -D0462 Carcinoma in situ of skin of left upper limb, including shoulder -D0470 Carcinoma in situ of skin of unspecified lower limb, including hip -D0471 Carcinoma in situ of skin of right lower limb, including hip -D0472 Carcinoma in situ of skin of left lower limb, including hip -D048 Carcinoma in situ of skin of other sites -D049 Carcinoma in situ of skin, unspecified -D0500 Lobular carcinoma in situ of unspecified breast -D0501 Lobular carcinoma in situ of right breast -D0502 Lobular carcinoma in situ of left breast -D0510 Intraductal carcinoma in situ of unspecified breast -D0511 Intraductal carcinoma in situ of right breast -D0512 Intraductal carcinoma in situ of left breast -D0580 Other specified type of carcinoma in situ of unspecified breast -D0581 Other specified type of carcinoma in situ of right breast -D0582 Other specified type of carcinoma in situ of left breast -D0590 Unspecified type of carcinoma in situ of unspecified breast -D0591 Unspecified type of carcinoma in situ of right breast -D0592 Unspecified type of carcinoma in situ of left breast -D060 Carcinoma in situ of endocervix -D061 Carcinoma in situ of exocervix -D067 Carcinoma in situ of other parts of cervix -D069 Carcinoma in situ of cervix, unspecified -D070 Carcinoma in situ of endometrium -D071 Carcinoma in situ of vulva -D072 Carcinoma in situ of vagina -D0730 Carcinoma in situ of unspecified female genital organs -D0739 Carcinoma in situ of other female genital organs -D074 Carcinoma in situ of penis -D075 Carcinoma in situ of prostate -D0760 Carcinoma in situ of unspecified male genital organs -D0761 Carcinoma in situ of scrotum -D0769 Carcinoma in situ of other male genital organs -D090 Carcinoma in situ of bladder -D0910 Carcinoma in situ of unspecified urinary organ -D0919 Carcinoma in situ of other urinary organs -D0920 Carcinoma in situ of unspecified eye -D0921 Carcinoma in situ of right eye -D0922 Carcinoma in situ of left eye -D093 Carcinoma in situ of thyroid and other endocrine glands -D098 Carcinoma in situ of other specified sites -D099 Carcinoma in situ, unspecified -D100 Benign neoplasm of lip -D101 Benign neoplasm of tongue -D102 Benign neoplasm of floor of mouth -D1030 Benign neoplasm of unspecified part of mouth -D1039 Benign neoplasm of other parts of mouth -D104 Benign neoplasm of tonsil -D105 Benign neoplasm of other parts of oropharynx -D106 Benign neoplasm of nasopharynx -D107 Benign neoplasm of hypopharynx -D109 Benign neoplasm of pharynx, unspecified -D110 Benign neoplasm of parotid gland -D117 Benign neoplasm of other major salivary glands -D119 Benign neoplasm of major salivary gland, unspecified -D120 Benign neoplasm of cecum -D121 Benign neoplasm of appendix -D122 Benign neoplasm of ascending colon -D123 Benign neoplasm of transverse colon -D124 Benign neoplasm of descending colon -D125 Benign neoplasm of sigmoid colon -D126 Benign neoplasm of colon, unspecified -D127 Benign neoplasm of rectosigmoid junction -D128 Benign neoplasm of rectum -D129 Benign neoplasm of anus and anal canal -D130 Benign neoplasm of esophagus -D131 Benign neoplasm of stomach -D132 Benign neoplasm of duodenum -D1330 Benign neoplasm of unspecified part of small intestine -D1339 Benign neoplasm of other parts of small intestine -D134 Benign neoplasm of liver -D135 Benign neoplasm of extrahepatic bile ducts -D136 Benign neoplasm of pancreas -D137 Benign neoplasm of endocrine pancreas -D139 Benign neoplasm of ill-defined sites within the digestive system -D140 Benign neoplasm of middle ear, nasal cavity and accessory sinuses -D141 Benign neoplasm of larynx -D142 Benign neoplasm of trachea -D1430 Benign neoplasm of unspecified bronchus and lung -D1431 Benign neoplasm of right bronchus and lung -D1432 Benign neoplasm of left bronchus and lung -D144 Benign neoplasm of respiratory system, unspecified -D150 Benign neoplasm of thymus -D151 Benign neoplasm of heart -D152 Benign neoplasm of mediastinum -D157 Benign neoplasm of other specified intrathoracic organs -D159 Benign neoplasm of intrathoracic organ, unspecified -D1600 Benign neoplasm of scapula and long bones of unspecified upper limb -D1601 Benign neoplasm of scapula and long bones of right upper limb -D1602 Benign neoplasm of scapula and long bones of left upper limb -D1610 Benign neoplasm of short bones of unspecified upper limb -D1611 Benign neoplasm of short bones of right upper limb -D1612 Benign neoplasm of short bones of left upper limb -D1620 Benign neoplasm of long bones of unspecified lower limb -D1621 Benign neoplasm of long bones of right lower limb -D1622 Benign neoplasm of long bones of left lower limb -D1630 Benign neoplasm of short bones of unspecified lower limb -D1631 Benign neoplasm of short bones of right lower limb -D1632 Benign neoplasm of short bones of left lower limb -D164 Benign neoplasm of bones of skull and face -D165 Benign neoplasm of lower jaw bone -D166 Benign neoplasm of vertebral column -D167 Benign neoplasm of ribs, sternum and clavicle -D168 Benign neoplasm of pelvic bones, sacrum and coccyx -D169 Benign neoplasm of bone and articular cartilage, unspecified -D170 Benign lipomatous neoplasm of skin and subcutaneous tissue of head, face and neck -D171 Benign lipomatous neoplasm of skin and subcutaneous tissue of trunk -D1720 Benign lipomatous neoplasm of skin and subcutaneous tissue of unspecified limb -D1721 Benign lipomatous neoplasm of skin and subcutaneous tissue of right arm -D1722 Benign lipomatous neoplasm of skin and subcutaneous tissue of left arm -D1723 Benign lipomatous neoplasm of skin and subcutaneous tissue of right leg -D1724 Benign lipomatous neoplasm of skin and subcutaneous tissue of left leg -D1730 Benign lipomatous neoplasm of skin and subcutaneous tissue of unspecified sites -D1739 Benign lipomatous neoplasm of skin and subcutaneous tissue of other sites -D174 Benign lipomatous neoplasm of intrathoracic organs -D175 Benign lipomatous neoplasm of intra-abdominal organs -D176 Benign lipomatous neoplasm of spermatic cord -D1771 Benign lipomatous neoplasm of kidney -D1772 Benign lipomatous neoplasm of other genitourinary organ -D1779 Benign lipomatous neoplasm of other sites -D179 Benign lipomatous neoplasm, unspecified -D1800 Hemangioma unspecified site -D1801 Hemangioma of skin and subcutaneous tissue -D1802 Hemangioma of intracranial structures -D1803 Hemangioma of intra-abdominal structures -D1809 Hemangioma of other sites -D181 Lymphangioma, any site -D190 Benign neoplasm of mesothelial tissue of pleura -D191 Benign neoplasm of mesothelial tissue of peritoneum -D197 Benign neoplasm of mesothelial tissue of other sites -D199 Benign neoplasm of mesothelial tissue, unspecified -D200 Benign neoplasm of soft tissue of retroperitoneum -D201 Benign neoplasm of soft tissue of peritoneum -D210 Benign neoplasm of connective and other soft tissue of head, face and neck -D2110 Benign neoplasm of connective and other soft tissue of unspecified upper limb, including shoulder -D2111 Benign neoplasm of connective and other soft tissue of right upper limb, including shoulder -D2112 Benign neoplasm of connective and other soft tissue of left upper limb, including shoulder -D2120 Benign neoplasm of connective and other soft tissue of unspecified lower limb, including hip -D2121 Benign neoplasm of connective and other soft tissue of right lower limb, including hip -D2122 Benign neoplasm of connective and other soft tissue of left lower limb, including hip -D213 Benign neoplasm of connective and other soft tissue of thorax -D214 Benign neoplasm of connective and other soft tissue of abdomen -D215 Benign neoplasm of connective and other soft tissue of pelvis -D216 Benign neoplasm of connective and other soft tissue of trunk, unspecified -D219 Benign neoplasm of connective and other soft tissue, unspecified -D220 Melanocytic nevi of lip -D2210 Melanocytic nevi of unspecified eyelid, including canthus -D2211 Melanocytic nevi of right eyelid, including canthus -D2212 Melanocytic nevi of left eyelid, including canthus -D2220 Melanocytic nevi of unspecified ear and external auricular canal -D2221 Melanocytic nevi of right ear and external auricular canal -D2222 Melanocytic nevi of left ear and external auricular canal -D2230 Melanocytic nevi of unspecified part of face -D2239 Melanocytic nevi of other parts of face -D224 Melanocytic nevi of scalp and neck -D225 Melanocytic nevi of trunk -D2260 Melanocytic nevi of unspecified upper limb, including shoulder -D2261 Melanocytic nevi of right upper limb, including shoulder -D2262 Melanocytic nevi of left upper limb, including shoulder -D2270 Melanocytic nevi of unspecified lower limb, including hip -D2271 Melanocytic nevi of right lower limb, including hip -D2272 Melanocytic nevi of left lower limb, including hip -D229 Melanocytic nevi, unspecified -D230 Other benign neoplasm of skin of lip -D2310 Other benign neoplasm of skin of unspecified eyelid, including canthus -D2311 Other benign neoplasm of skin of right eyelid, including canthus -D2312 Other benign neoplasm of skin of left eyelid, including canthus -D2320 Other benign neoplasm of skin of unspecified ear and external auricular canal -D2321 Other benign neoplasm of skin of right ear and external auricular canal -D2322 Other benign neoplasm of skin of left ear and external auricular canal -D2330 Other benign neoplasm of skin of unspecified part of face -D2339 Other benign neoplasm of skin of other parts of face -D234 Other benign neoplasm of skin of scalp and neck -D235 Other benign neoplasm of skin of trunk -D2360 Other benign neoplasm of skin of unspecified upper limb, including shoulder -D2361 Other benign neoplasm of skin of right upper limb, including shoulder -D2362 Other benign neoplasm of skin of left upper limb, including shoulder -D2370 Other benign neoplasm of skin of unspecified lower limb, including hip -D2371 Other benign neoplasm of skin of right lower limb, including hip -D2372 Other benign neoplasm of skin of left lower limb, including hip -D239 Other benign neoplasm of skin, unspecified -D241 Benign neoplasm of right breast -D242 Benign neoplasm of left breast -D249 Benign neoplasm of unspecified breast -D250 Submucous leiomyoma of uterus -D251 Intramural leiomyoma of uterus -D252 Subserosal leiomyoma of uterus -D259 Leiomyoma of uterus, unspecified -D260 Other benign neoplasm of cervix uteri -D261 Other benign neoplasm of corpus uteri -D267 Other benign neoplasm of other parts of uterus -D269 Other benign neoplasm of uterus, unspecified -D270 Benign neoplasm of right ovary -D271 Benign neoplasm of left ovary -D279 Benign neoplasm of unspecified ovary -D280 Benign neoplasm of vulva -D281 Benign neoplasm of vagina -D282 Benign neoplasm of uterine tubes and ligaments -D287 Benign neoplasm of other specified female genital organs -D289 Benign neoplasm of female genital organ, unspecified -D290 Benign neoplasm of penis -D291 Benign neoplasm of prostate -D2920 Benign neoplasm of unspecified testis -D2921 Benign neoplasm of right testis -D2922 Benign neoplasm of left testis -D2930 Benign neoplasm of unspecified epididymis -D2931 Benign neoplasm of right epididymis -D2932 Benign neoplasm of left epididymis -D294 Benign neoplasm of scrotum -D298 Benign neoplasm of other specified male genital organs -D299 Benign neoplasm of male genital organ, unspecified -D3000 Benign neoplasm of unspecified kidney -D3001 Benign neoplasm of right kidney -D3002 Benign neoplasm of left kidney -D3010 Benign neoplasm of unspecified renal pelvis -D3011 Benign neoplasm of right renal pelvis -D3012 Benign neoplasm of left renal pelvis -D3020 Benign neoplasm of unspecified ureter -D3021 Benign neoplasm of right ureter -D3022 Benign neoplasm of left ureter -D303 Benign neoplasm of bladder -D304 Benign neoplasm of urethra -D308 Benign neoplasm of other specified urinary organs -D309 Benign neoplasm of urinary organ, unspecified -D3100 Benign neoplasm of unspecified conjunctiva -D3101 Benign neoplasm of right conjunctiva -D3102 Benign neoplasm of left conjunctiva -D3110 Benign neoplasm of unspecified cornea -D3111 Benign neoplasm of right cornea -D3112 Benign neoplasm of left cornea -D3120 Benign neoplasm of unspecified retina -D3121 Benign neoplasm of right retina -D3122 Benign neoplasm of left retina -D3130 Benign neoplasm of unspecified choroid -D3131 Benign neoplasm of right choroid -D3132 Benign neoplasm of left choroid -D3140 Benign neoplasm of unspecified ciliary body -D3141 Benign neoplasm of right ciliary body -D3142 Benign neoplasm of left ciliary body -D3150 Benign neoplasm of unspecified lacrimal gland and duct -D3151 Benign neoplasm of right lacrimal gland and duct -D3152 Benign neoplasm of left lacrimal gland and duct -D3160 Benign neoplasm of unspecified site of unspecified orbit -D3161 Benign neoplasm of unspecified site of right orbit -D3162 Benign neoplasm of unspecified site of left orbit -D3190 Benign neoplasm of unspecified part of unspecified eye -D3191 Benign neoplasm of unspecified part of right eye -D3192 Benign neoplasm of unspecified part of left eye -D320 Benign neoplasm of cerebral meninges -D321 Benign neoplasm of spinal meninges -D329 Benign neoplasm of meninges, unspecified -D330 Benign neoplasm of brain, supratentorial -D331 Benign neoplasm of brain, infratentorial -D332 Benign neoplasm of brain, unspecified -D333 Benign neoplasm of cranial nerves -D334 Benign neoplasm of spinal cord -D337 Benign neoplasm of other specified parts of central nervous system -D339 Benign neoplasm of central nervous system, unspecified -D34 Benign neoplasm of thyroid gland -D3500 Benign neoplasm of unspecified adrenal gland -D3501 Benign neoplasm of right adrenal gland -D3502 Benign neoplasm of left adrenal gland -D351 Benign neoplasm of parathyroid gland -D352 Benign neoplasm of pituitary gland -D353 Benign neoplasm of craniopharyngeal duct -D354 Benign neoplasm of pineal gland -D355 Benign neoplasm of carotid body -D356 Benign neoplasm of aortic body and other paraganglia -D357 Benign neoplasm of other specified endocrine glands -D359 Benign neoplasm of endocrine gland, unspecified -D360 Benign neoplasm of lymph nodes -D3610 Benign neoplasm of peripheral nerves and autonomic nervous system, unspecified -D3611 Benign neoplasm of peripheral nerves and autonomic nervous system of face, head, and neck -D3612 Benign neoplasm of peripheral nerves and autonomic nervous system, upper limb, including shoulder -D3613 Benign neoplasm of peripheral nerves and autonomic nervous system of lower limb, including hip -D3614 Benign neoplasm of peripheral nerves and autonomic nervous system of thorax -D3615 Benign neoplasm of peripheral nerves and autonomic nervous system of abdomen -D3616 Benign neoplasm of peripheral nerves and autonomic nervous system of pelvis -D3617 Benign neoplasm of peripheral nerves and autonomic nervous system of trunk, unspecified -D367 Benign neoplasm of other specified sites -D369 Benign neoplasm, unspecified site -D3A00 Benign carcinoid tumor of unspecified site -D3A010 Benign carcinoid tumor of the duodenum -D3A011 Benign carcinoid tumor of the jejunum -D3A012 Benign carcinoid tumor of the ileum -D3A019 Benign carcinoid tumor of the small intestine, unspecified portion -D3A020 Benign carcinoid tumor of the appendix -D3A021 Benign carcinoid tumor of the cecum -D3A022 Benign carcinoid tumor of the ascending colon -D3A023 Benign carcinoid tumor of the transverse colon -D3A024 Benign carcinoid tumor of the descending colon -D3A025 Benign carcinoid tumor of the sigmoid colon -D3A026 Benign carcinoid tumor of the rectum -D3A029 Benign carcinoid tumor of the large intestine, unspecified portion -D3A090 Benign carcinoid tumor of the bronchus and lung -D3A091 Benign carcinoid tumor of the thymus -D3A092 Benign carcinoid tumor of the stomach -D3A093 Benign carcinoid tumor of the kidney -D3A094 Benign carcinoid tumor of the foregut NOS -D3A095 Benign carcinoid tumor of the midgut NOS -D3A096 Benign carcinoid tumor of the hindgut NOS -D3A098 Benign carcinoid tumors of other sites -D3A8 Other benign neuroendocrine tumors -D3701 Neoplasm of uncertain behavior of lip -D3702 Neoplasm of uncertain behavior of tongue -D37030 Neoplasm of uncertain behavior of the parotid salivary glands -D37031 Neoplasm of uncertain behavior of the sublingual salivary glands -D37032 Neoplasm of uncertain behavior of the submandibular salivary glands -D37039 Neoplasm of uncertain behavior of the major salivary glands, unspecified -D3704 Neoplasm of uncertain behavior of the minor salivary glands -D3705 Neoplasm of uncertain behavior of pharynx -D3709 Neoplasm of uncertain behavior of other specified sites of the oral cavity -D371 Neoplasm of uncertain behavior of stomach -D372 Neoplasm of uncertain behavior of small intestine -D373 Neoplasm of uncertain behavior of appendix -D374 Neoplasm of uncertain behavior of colon -D375 Neoplasm of uncertain behavior of rectum -D376 Neoplasm of uncertain behavior of liver, gallbladder and bile ducts -D378 Neoplasm of uncertain behavior of other specified digestive organs -D379 Neoplasm of uncertain behavior of digestive organ, unspecified -D380 Neoplasm of uncertain behavior of larynx -D381 Neoplasm of uncertain behavior of trachea, bronchus and lung -D382 Neoplasm of uncertain behavior of pleura -D383 Neoplasm of uncertain behavior of mediastinum -D384 Neoplasm of uncertain behavior of thymus -D385 Neoplasm of uncertain behavior of other respiratory organs -D386 Neoplasm of uncertain behavior of respiratory organ, unspecified -D390 Neoplasm of uncertain behavior of uterus -D3910 Neoplasm of uncertain behavior of unspecified ovary -D3911 Neoplasm of uncertain behavior of right ovary -D3912 Neoplasm of uncertain behavior of left ovary -D392 Neoplasm of uncertain behavior of placenta -D398 Neoplasm of uncertain behavior of other specified female genital organs -D399 Neoplasm of uncertain behavior of female genital organ, unspecified -D400 Neoplasm of uncertain behavior of prostate -D4010 Neoplasm of uncertain behavior of unspecified testis -D4011 Neoplasm of uncertain behavior of right testis -D4012 Neoplasm of uncertain behavior of left testis -D408 Neoplasm of uncertain behavior of other specified male genital organs -D409 Neoplasm of uncertain behavior of male genital organ, unspecified -D4100 Neoplasm of uncertain behavior of unspecified kidney -D4101 Neoplasm of uncertain behavior of right kidney -D4102 Neoplasm of uncertain behavior of left kidney -D4110 Neoplasm of uncertain behavior of unspecified renal pelvis -D4111 Neoplasm of uncertain behavior of right renal pelvis -D4112 Neoplasm of uncertain behavior of left renal pelvis -D4120 Neoplasm of uncertain behavior of unspecified ureter -D4121 Neoplasm of uncertain behavior of right ureter -D4122 Neoplasm of uncertain behavior of left ureter -D413 Neoplasm of uncertain behavior of urethra -D414 Neoplasm of uncertain behavior of bladder -D418 Neoplasm of uncertain behavior of other specified urinary organs -D419 Neoplasm of uncertain behavior of unspecified urinary organ -D420 Neoplasm of uncertain behavior of cerebral meninges -D421 Neoplasm of uncertain behavior of spinal meninges -D429 Neoplasm of uncertain behavior of meninges, unspecified -D430 Neoplasm of uncertain behavior of brain, supratentorial -D431 Neoplasm of uncertain behavior of brain, infratentorial -D432 Neoplasm of uncertain behavior of brain, unspecified -D433 Neoplasm of uncertain behavior of cranial nerves -D434 Neoplasm of uncertain behavior of spinal cord -D438 Neoplasm of uncertain behavior of other specified parts of central nervous system -D439 Neoplasm of uncertain behavior of central nervous system, unspecified -D440 Neoplasm of uncertain behavior of thyroid gland -D4410 Neoplasm of uncertain behavior of unspecified adrenal gland -D4411 Neoplasm of uncertain behavior of right adrenal gland -D4412 Neoplasm of uncertain behavior of left adrenal gland -D442 Neoplasm of uncertain behavior of parathyroid gland -D443 Neoplasm of uncertain behavior of pituitary gland -D444 Neoplasm of uncertain behavior of craniopharyngeal duct -D445 Neoplasm of uncertain behavior of pineal gland -D446 Neoplasm of uncertain behavior of carotid body -D447 Neoplasm of uncertain behavior of aortic body and other paraganglia -D449 Neoplasm of uncertain behavior of unspecified endocrine gland -D45 Polycythemia vera -D460 Refractory anemia without ring sideroblasts, so stated -D461 Refractory anemia with ring sideroblasts -D4620 Refractory anemia with excess of blasts, unspecified -D4621 Refractory anemia with excess of blasts 1 -D4622 Refractory anemia with excess of blasts 2 -D46A Refractory cytopenia with multilineage dysplasia -D46B Refractory cytopenia with multilineage dysplasia and ring sideroblasts -D46C Myelodysplastic syndrome with isolated del(5q) chromosomal abnormality -D464 Refractory anemia, unspecified -D46Z Other myelodysplastic syndromes -D469 Myelodysplastic syndrome, unspecified -D470 Histiocytic and mast cell tumors of uncertain behavior -D471 Chronic myeloproliferative disease -D472 Monoclonal gammopathy -D473 Essential (hemorrhagic) thrombocythemia -D474 Osteomyelofibrosis -D47Z1 Post-transplant lymphoproliferative disorder (PTLD) -D47Z9 Other specified neoplasms of uncertain behavior of lymphoid, hematopoietic and related tissue -D479 Neoplasm of uncertain behavior of lymphoid, hematopoietic and related tissue, unspecified -D480 Neoplasm of uncertain behavior of bone and articular cartilage -D481 Neoplasm of uncertain behavior of connective and other soft tissue -D482 Neoplasm of uncertain behavior of peripheral nerves and autonomic nervous system -D483 Neoplasm of uncertain behavior of retroperitoneum -D484 Neoplasm of uncertain behavior of peritoneum -D485 Neoplasm of uncertain behavior of skin -D4860 Neoplasm of uncertain behavior of unspecified breast -D4861 Neoplasm of uncertain behavior of right breast -D4862 Neoplasm of uncertain behavior of left breast -D487 Neoplasm of uncertain behavior of other specified sites -D489 Neoplasm of uncertain behavior, unspecified -D490 Neoplasm of unspecified behavior of digestive system -D491 Neoplasm of unspecified behavior of respiratory system -D492 Neoplasm of unspecified behavior of bone, soft tissue, and skin -D493 Neoplasm of unspecified behavior of breast -D494 Neoplasm of unspecified behavior of bladder -D495 Neoplasm of unspecified behavior of other genitourinary organs -D496 Neoplasm of unspecified behavior of brain -D497 Neoplasm of unspecified behavior of endocrine glands and other parts of nervous system -D4981 Neoplasm of unspecified behavior of retina and choroid -D4989 Neoplasm of unspecified behavior of other specified sites -D499 Neoplasm of unspecified behavior of unspecified site -D500 Iron deficiency anemia secondary to blood loss (chronic) -D501 Sideropenic dysphagia -D508 Other iron deficiency anemias -D509 Iron deficiency anemia, unspecified -D510 Vitamin B12 deficiency anemia due to intrinsic factor deficiency -D511 Vitamin B12 deficiency anemia due to selective vitamin B12 malabsorption with proteinuria -D512 Transcobalamin II deficiency -D513 Other dietary vitamin B12 deficiency anemia -D518 Other vitamin B12 deficiency anemias -D519 Vitamin B12 deficiency anemia, unspecified -D520 Dietary folate deficiency anemia -D521 Drug-induced folate deficiency anemia -D528 Other folate deficiency anemias -D529 Folate deficiency anemia, unspecified -D530 Protein deficiency anemia -D531 Other megaloblastic anemias, not elsewhere classified -D532 Scorbutic anemia -D538 Other specified nutritional anemias -D539 Nutritional anemia, unspecified -D550 Anemia due to glucose-6-phosphate dehydrogenase [G6PD] deficiency -D551 Anemia due to other disorders of glutathione metabolism -D552 Anemia due to disorders of glycolytic enzymes -D553 Anemia due to disorders of nucleotide metabolism -D558 Other anemias due to enzyme disorders -D559 Anemia due to enzyme disorder, unspecified -D560 Alpha thalassemia -D561 Beta thalassemia -D562 Delta-beta thalassemia -D563 Thalassemia minor -D564 Hereditary persistence of fetal hemoglobin [HPFH] -D565 Hemoglobin E-beta thalassemia -D568 Other thalassemias -D569 Thalassemia, unspecified -D5700 Hb-SS disease with crisis, unspecified -D5701 Hb-SS disease with acute chest syndrome -D5702 Hb-SS disease with splenic sequestration -D571 Sickle-cell disease without crisis -D5720 Sickle-cell/Hb-C disease without crisis -D57211 Sickle-cell/Hb-C disease with acute chest syndrome -D57212 Sickle-cell/Hb-C disease with splenic sequestration -D57219 Sickle-cell/Hb-C disease with crisis, unspecified -D573 Sickle-cell trait -D5740 Sickle-cell thalassemia without crisis -D57411 Sickle-cell thalassemia with acute chest syndrome -D57412 Sickle-cell thalassemia with splenic sequestration -D57419 Sickle-cell thalassemia with crisis, unspecified -D5780 Other sickle-cell disorders without crisis -D57811 Other sickle-cell disorders with acute chest syndrome -D57812 Other sickle-cell disorders with splenic sequestration -D57819 Other sickle-cell disorders with crisis, unspecified -D580 Hereditary spherocytosis -D581 Hereditary elliptocytosis -D582 Other hemoglobinopathies -D588 Other specified hereditary hemolytic anemias -D589 Hereditary hemolytic anemia, unspecified -D590 Drug-induced autoimmune hemolytic anemia -D591 Other autoimmune hemolytic anemias -D592 Drug-induced nonautoimmune hemolytic anemia -D593 Hemolytic-uremic syndrome -D594 Other nonautoimmune hemolytic anemias -D595 Paroxysmal nocturnal hemoglobinuria [Marchiafava-Micheli] -D596 Hemoglobinuria due to hemolysis from other external causes -D598 Other acquired hemolytic anemias -D599 Acquired hemolytic anemia, unspecified -D600 Chronic acquired pure red cell aplasia -D601 Transient acquired pure red cell aplasia -D608 Other acquired pure red cell aplasias -D609 Acquired pure red cell aplasia, unspecified -D6101 Constitutional (pure) red blood cell aplasia -D6109 Other constitutional aplastic anemia -D611 Drug-induced aplastic anemia -D612 Aplastic anemia due to other external agents -D613 Idiopathic aplastic anemia -D61810 Antineoplastic chemotherapy induced pancytopenia -D61811 Other drug-induced pancytopenia -D61818 Other pancytopenia -D6182 Myelophthisis -D6189 Other specified aplastic anemias and other bone marrow failure syndromes -D619 Aplastic anemia, unspecified -D62 Acute posthemorrhagic anemia -D630 Anemia in neoplastic disease -D631 Anemia in chronic kidney disease -D638 Anemia in other chronic diseases classified elsewhere -D640 Hereditary sideroblastic anemia -D641 Secondary sideroblastic anemia due to disease -D642 Secondary sideroblastic anemia due to drugs and toxins -D643 Other sideroblastic anemias -D644 Congenital dyserythropoietic anemia -D6481 Anemia due to antineoplastic chemotherapy -D6489 Other specified anemias -D649 Anemia, unspecified -D65 Disseminated intravascular coagulation [defibrination syndrome] -D66 Hereditary factor VIII deficiency -D67 Hereditary factor IX deficiency -D680 Von Willebrand's disease -D681 Hereditary factor XI deficiency -D682 Hereditary deficiency of other clotting factors -D68311 Acquired hemophilia -D68312 Antiphospholipid antibody with hemorrhagic disorder -D68318 Other hemorrhagic disorder due to intrinsic circulating anticoagulants, antibodies, or inhibitors -D6832 Hemorrhagic disorder due to extrinsic circulating anticoagulants -D684 Acquired coagulation factor deficiency -D6851 Activated protein C resistance -D6852 Prothrombin gene mutation -D6859 Other primary thrombophilia -D6861 Antiphospholipid syndrome -D6862 Lupus anticoagulant syndrome -D6869 Other thrombophilia -D688 Other specified coagulation defects -D689 Coagulation defect, unspecified -D690 Allergic purpura -D691 Qualitative platelet defects -D692 Other nonthrombocytopenic purpura -D693 Immune thrombocytopenic purpura -D6941 Evans syndrome -D6942 Congenital and hereditary thrombocytopenia purpura -D6949 Other primary thrombocytopenia -D6951 Posttransfusion purpura -D6959 Other secondary thrombocytopenia -D696 Thrombocytopenia, unspecified -D698 Other specified hemorrhagic conditions -D699 Hemorrhagic condition, unspecified -D700 Congenital agranulocytosis -D701 Agranulocytosis secondary to cancer chemotherapy -D702 Other drug-induced agranulocytosis -D703 Neutropenia due to infection -D704 Cyclic neutropenia -D708 Other neutropenia -D709 Neutropenia, unspecified -D71 Functional disorders of polymorphonuclear neutrophils -D720 Genetic anomalies of leukocytes -D721 Eosinophilia -D72810 Lymphocytopenia -D72818 Other decreased white blood cell count -D72819 Decreased white blood cell count, unspecified -D72820 Lymphocytosis (symptomatic) -D72821 Monocytosis (symptomatic) -D72822 Plasmacytosis -D72823 Leukemoid reaction -D72824 Basophilia -D72825 Bandemia -D72828 Other elevated white blood cell count -D72829 Elevated white blood cell count, unspecified -D7289 Other specified disorders of white blood cells -D729 Disorder of white blood cells, unspecified -D730 Hyposplenism -D731 Hypersplenism -D732 Chronic congestive splenomegaly -D733 Abscess of spleen -D734 Cyst of spleen -D735 Infarction of spleen -D7381 Neutropenic splenomegaly -D7389 Other diseases of spleen -D739 Disease of spleen, unspecified -D740 Congenital methemoglobinemia -D748 Other methemoglobinemias -D749 Methemoglobinemia, unspecified -D750 Familial erythrocytosis -D751 Secondary polycythemia -D7581 Myelofibrosis -D7582 Heparin induced thrombocytopenia (HIT) -D7589 Other specified diseases of blood and blood-forming organs -D759 Disease of blood and blood-forming organs, unspecified -D761 Hemophagocytic lymphohistiocytosis -D762 Hemophagocytic syndrome, infection-associated -D763 Other histiocytosis syndromes -D77 Other disorders of blood and blood-forming organs in diseases classified elsewhere -D7801 Intraoperative hemorrhage and hematoma of the spleen complicating a procedure on the spleen -D7802 Intraoperative hemorrhage and hematoma of the spleen complicating other procedure -D7811 Accidental puncture and laceration of the spleen during a procedure on the spleen -D7812 Accidental puncture and laceration of the spleen during other procedure -D7821 Postprocedural hemorrhage and hematoma of the spleen following a procedure on the spleen -D7822 Postprocedural hemorrhage and hematoma of the spleen following other procedure -D7881 Other intraoperative complications of the spleen -D7889 Other postprocedural complications of the spleen -D800 Hereditary hypogammaglobulinemia -D801 Nonfamilial hypogammaglobulinemia -D802 Selective deficiency of immunoglobulin A [IgA] -D803 Selective deficiency of immunoglobulin G [IgG] subclasses -D804 Selective deficiency of immunoglobulin M [IgM] -D805 Immunodeficiency with increased immunoglobulin M [IgM] -D806 Antibody deficiency with near-normal immunoglobulins or with hyperimmunoglobulinemia -D807 Transient hypogammaglobulinemia of infancy -D808 Other immunodeficiencies with predominantly antibody defects -D809 Immunodeficiency with predominantly antibody defects, unspecified -D810 Severe combined immunodeficiency [SCID] with reticular dysgenesis -D811 Severe combined immunodeficiency [SCID] with low T- and B-cell numbers -D812 Severe combined immunodeficiency [SCID] with low or normal B-cell numbers -D813 Adenosine deaminase [ADA] deficiency -D814 Nezelof's syndrome -D815 Purine nucleoside phosphorylase [PNP] deficiency -D816 Major histocompatibility complex class I deficiency -D817 Major histocompatibility complex class II deficiency -D81810 Biotinidase deficiency -D81818 Other biotin-dependent carboxylase deficiency -D81819 Biotin-dependent carboxylase deficiency, unspecified -D8189 Other combined immunodeficiencies -D819 Combined immunodeficiency, unspecified -D820 Wiskott-Aldrich syndrome -D821 Di George's syndrome -D822 Immunodeficiency with short-limbed stature -D823 Immunodeficiency following hereditary defective response to Epstein-Barr virus -D824 Hyperimmunoglobulin E [IgE] syndrome -D828 Immunodeficiency associated with other specified major defects -D829 Immunodeficiency associated with major defect, unspecified -D830 Common variable immunodeficiency with predominant abnormalities of B-cell numbers and function -D831 Common variable immunodeficiency with predominant immunoregulatory T-cell disorders -D832 Common variable immunodeficiency with autoantibodies to B- or T-cells -D838 Other common variable immunodeficiencies -D839 Common variable immunodeficiency, unspecified -D840 Lymphocyte function antigen-1 [LFA-1] defect -D841 Defects in the complement system -D848 Other specified immunodeficiencies -D849 Immunodeficiency, unspecified -D860 Sarcoidosis of lung -D861 Sarcoidosis of lymph nodes -D862 Sarcoidosis of lung with sarcoidosis of lymph nodes -D863 Sarcoidosis of skin -D8681 Sarcoid meningitis -D8682 Multiple cranial nerve palsies in sarcoidosis -D8683 Sarcoid iridocyclitis -D8684 Sarcoid pyelonephritis -D8685 Sarcoid myocarditis -D8686 Sarcoid arthropathy -D8687 Sarcoid myositis -D8689 Sarcoidosis of other sites -D869 Sarcoidosis, unspecified -D890 Polyclonal hypergammaglobulinemia -D891 Cryoglobulinemia -D892 Hypergammaglobulinemia, unspecified -D893 Immune reconstitution syndrome -D89810 Acute graft-versus-host disease -D89811 Chronic graft-versus-host disease -D89812 Acute on chronic graft-versus-host disease -D89813 Graft-versus-host disease, unspecified -D8982 Autoimmune lymphoproliferative syndrome [ALPS] -D8989 Other specified disorders involving the immune mechanism, not elsewhere classified -D899 Disorder involving the immune mechanism, unspecified -E000 Congenital iodine-deficiency syndrome, neurological type -E001 Congenital iodine-deficiency syndrome, myxedematous type -E002 Congenital iodine-deficiency syndrome, mixed type -E009 Congenital iodine-deficiency syndrome, unspecified -E010 Iodine-deficiency related diffuse (endemic) goiter -E011 Iodine-deficiency related multinodular (endemic) goiter -E012 Iodine-deficiency related (endemic) goiter, unspecified -E018 Other iodine-deficiency related thyroid disorders and allied conditions -E02 Subclinical iodine-deficiency hypothyroidism -E030 Congenital hypothyroidism with diffuse goiter -E031 Congenital hypothyroidism without goiter -E032 Hypothyroidism due to medicaments and other exogenous substances -E033 Postinfectious hypothyroidism -E034 Atrophy of thyroid (acquired) -E035 Myxedema coma -E038 Other specified hypothyroidism -E039 Hypothyroidism, unspecified -E040 Nontoxic diffuse goiter -E041 Nontoxic single thyroid nodule -E042 Nontoxic multinodular goiter -E048 Other specified nontoxic goiter -E049 Nontoxic goiter, unspecified -E0500 Thyrotoxicosis with diffuse goiter without thyrotoxic crisis or storm -E0501 Thyrotoxicosis with diffuse goiter with thyrotoxic crisis or storm -E0510 Thyrotoxicosis with toxic single thyroid nodule without thyrotoxic crisis or storm -E0511 Thyrotoxicosis with toxic single thyroid nodule with thyrotoxic crisis or storm -E0520 Thyrotoxicosis with toxic multinodular goiter without thyrotoxic crisis or storm -E0521 Thyrotoxicosis with toxic multinodular goiter with thyrotoxic crisis or storm -E0530 Thyrotoxicosis from ectopic thyroid tissue without thyrotoxic crisis or storm -E0531 Thyrotoxicosis from ectopic thyroid tissue with thyrotoxic crisis or storm -E0540 Thyrotoxicosis factitia without thyrotoxic crisis or storm -E0541 Thyrotoxicosis factitia with thyrotoxic crisis or storm -E0580 Other thyrotoxicosis without thyrotoxic crisis or storm -E0581 Other thyrotoxicosis with thyrotoxic crisis or storm -E0590 Thyrotoxicosis, unspecified without thyrotoxic crisis or storm -E0591 Thyrotoxicosis, unspecified with thyrotoxic crisis or storm -E060 Acute thyroiditis -E061 Subacute thyroiditis -E062 Chronic thyroiditis with transient thyrotoxicosis -E063 Autoimmune thyroiditis -E064 Drug-induced thyroiditis -E065 Other chronic thyroiditis -E069 Thyroiditis, unspecified -E070 Hypersecretion of calcitonin -E071 Dyshormogenetic goiter -E0781 Sick-euthyroid syndrome -E0789 Other specified disorders of thyroid -E079 Disorder of thyroid, unspecified -E0800 Diabetes mellitus due to underlying condition with hyperosmolarity without nonketotic hyperglycemic-hyperosmolar coma (NKHHC) -E0801 Diabetes mellitus due to underlying condition with hyperosmolarity with coma -E0810 Diabetes mellitus due to underlying condition with ketoacidosis without coma -E0811 Diabetes mellitus due to underlying condition with ketoacidosis with coma -E0821 Diabetes mellitus due to underlying condition with diabetic nephropathy -E0822 Diabetes mellitus due to underlying condition with diabetic chronic kidney disease -E0829 Diabetes mellitus due to underlying condition with other diabetic kidney complication -E08311 Diabetes mellitus due to underlying condition with unspecified diabetic retinopathy with macular edema -E08319 Diabetes mellitus due to underlying condition with unspecified diabetic retinopathy without macular edema -E08321 Diabetes mellitus due to underlying condition with mild nonproliferative diabetic retinopathy with macular edema -E08329 Diabetes mellitus due to underlying condition with mild nonproliferative diabetic retinopathy without macular edema -E08331 Diabetes mellitus due to underlying condition with moderate nonproliferative diabetic retinopathy with macular edema -E08339 Diabetes mellitus due to underlying condition with moderate nonproliferative diabetic retinopathy without macular edema -E08341 Diabetes mellitus due to underlying condition with severe nonproliferative diabetic retinopathy with macular edema -E08349 Diabetes mellitus due to underlying condition with severe nonproliferative diabetic retinopathy without macular edema -E08351 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with macular edema -E08359 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy without macular edema -E0836 Diabetes mellitus due to underlying condition with diabetic cataract -E0839 Diabetes mellitus due to underlying condition with other diabetic ophthalmic complication -E0840 Diabetes mellitus due to underlying condition with diabetic neuropathy, unspecified -E0841 Diabetes mellitus due to underlying condition with diabetic mononeuropathy -E0842 Diabetes mellitus due to underlying condition with diabetic polyneuropathy -E0843 Diabetes mellitus due to underlying condition with diabetic autonomic (poly)neuropathy -E0844 Diabetes mellitus due to underlying condition with diabetic amyotrophy -E0849 Diabetes mellitus due to underlying condition with other diabetic neurological complication -E0851 Diabetes mellitus due to underlying condition with diabetic peripheral angiopathy without gangrene -E0852 Diabetes mellitus due to underlying condition with diabetic peripheral angiopathy with gangrene -E0859 Diabetes mellitus due to underlying condition with other circulatory complications -E08610 Diabetes mellitus due to underlying condition with diabetic neuropathic arthropathy -E08618 Diabetes mellitus due to underlying condition with other diabetic arthropathy -E08620 Diabetes mellitus due to underlying condition with diabetic dermatitis -E08621 Diabetes mellitus due to underlying condition with foot ulcer -E08622 Diabetes mellitus due to underlying condition with other skin ulcer -E08628 Diabetes mellitus due to underlying condition with other skin complications -E08630 Diabetes mellitus due to underlying condition with periodontal disease -E08638 Diabetes mellitus due to underlying condition with other oral complications -E08641 Diabetes mellitus due to underlying condition with hypoglycemia with coma -E08649 Diabetes mellitus due to underlying condition with hypoglycemia without coma -E0865 Diabetes mellitus due to underlying condition with hyperglycemia -E0869 Diabetes mellitus due to underlying condition with other specified complication -E088 Diabetes mellitus due to underlying condition with unspecified complications -E089 Diabetes mellitus due to underlying condition without complications -E0900 Drug or chemical induced diabetes mellitus with hyperosmolarity without nonketotic hyperglycemic-hyperosmolar coma (NKHHC) -E0901 Drug or chemical induced diabetes mellitus with hyperosmolarity with coma -E0910 Drug or chemical induced diabetes mellitus with ketoacidosis without coma -E0911 Drug or chemical induced diabetes mellitus with ketoacidosis with coma -E0921 Drug or chemical induced diabetes mellitus with diabetic nephropathy -E0922 Drug or chemical induced diabetes mellitus with diabetic chronic kidney disease -E0929 Drug or chemical induced diabetes mellitus with other diabetic kidney complication -E09311 Drug or chemical induced diabetes mellitus with unspecified diabetic retinopathy with macular edema -E09319 Drug or chemical induced diabetes mellitus with unspecified diabetic retinopathy without macular edema -E09321 Drug or chemical induced diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema -E09329 Drug or chemical induced diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema -E09331 Drug or chemical induced diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema -E09339 Drug or chemical induced diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema -E09341 Drug or chemical induced diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema -E09349 Drug or chemical induced diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema -E09351 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with macular edema -E09359 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy without macular edema -E0936 Drug or chemical induced diabetes mellitus with diabetic cataract -E0939 Drug or chemical induced diabetes mellitus with other diabetic ophthalmic complication -E0940 Drug or chemical induced diabetes mellitus with neurological complications with diabetic neuropathy, unspecified -E0941 Drug or chemical induced diabetes mellitus with neurological complications with diabetic mononeuropathy -E0942 Drug or chemical induced diabetes mellitus with neurological complications with diabetic polyneuropathy -E0943 Drug or chemical induced diabetes mellitus with neurological complications with diabetic autonomic (poly)neuropathy -E0944 Drug or chemical induced diabetes mellitus with neurological complications with diabetic amyotrophy -E0949 Drug or chemical induced diabetes mellitus with neurological complications with other diabetic neurological complication -E0951 Drug or chemical induced diabetes mellitus with diabetic peripheral angiopathy without gangrene -E0952 Drug or chemical induced diabetes mellitus with diabetic peripheral angiopathy with gangrene -E0959 Drug or chemical induced diabetes mellitus with other circulatory complications -E09610 Drug or chemical induced diabetes mellitus with diabetic neuropathic arthropathy -E09618 Drug or chemical induced diabetes mellitus with other diabetic arthropathy -E09620 Drug or chemical induced diabetes mellitus with diabetic dermatitis -E09621 Drug or chemical induced diabetes mellitus with foot ulcer -E09622 Drug or chemical induced diabetes mellitus with other skin ulcer -E09628 Drug or chemical induced diabetes mellitus with other skin complications -E09630 Drug or chemical induced diabetes mellitus with periodontal disease -E09638 Drug or chemical induced diabetes mellitus with other oral complications -E09641 Drug or chemical induced diabetes mellitus with hypoglycemia with coma -E09649 Drug or chemical induced diabetes mellitus with hypoglycemia without coma -E0965 Drug or chemical induced diabetes mellitus with hyperglycemia -E0969 Drug or chemical induced diabetes mellitus with other specified complication -E098 Drug or chemical induced diabetes mellitus with unspecified complications -E099 Drug or chemical induced diabetes mellitus without complications -E1010 Type 1 diabetes mellitus with ketoacidosis without coma -E1011 Type 1 diabetes mellitus with ketoacidosis with coma -E1021 Type 1 diabetes mellitus with diabetic nephropathy -E1022 Type 1 diabetes mellitus with diabetic chronic kidney disease -E1029 Type 1 diabetes mellitus with other diabetic kidney complication -E10311 Type 1 diabetes mellitus with unspecified diabetic retinopathy with macular edema -E10319 Type 1 diabetes mellitus with unspecified diabetic retinopathy without macular edema -E10321 Type 1 diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema -E10329 Type 1 diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema -E10331 Type 1 diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema -E10339 Type 1 diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema -E10341 Type 1 diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema -E10349 Type 1 diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema -E10351 Type 1 diabetes mellitus with proliferative diabetic retinopathy with macular edema -E10359 Type 1 diabetes mellitus with proliferative diabetic retinopathy without macular edema -E1036 Type 1 diabetes mellitus with diabetic cataract -E1039 Type 1 diabetes mellitus with other diabetic ophthalmic complication -E1040 Type 1 diabetes mellitus with diabetic neuropathy, unspecified -E1041 Type 1 diabetes mellitus with diabetic mononeuropathy -E1042 Type 1 diabetes mellitus with diabetic polyneuropathy -E1043 Type 1 diabetes mellitus with diabetic autonomic (poly)neuropathy -E1044 Type 1 diabetes mellitus with diabetic amyotrophy -E1049 Type 1 diabetes mellitus with other diabetic neurological complication -E1051 Type 1 diabetes mellitus with diabetic peripheral angiopathy without gangrene -E1052 Type 1 diabetes mellitus with diabetic peripheral angiopathy with gangrene -E1059 Type 1 diabetes mellitus with other circulatory complications -E10610 Type 1 diabetes mellitus with diabetic neuropathic arthropathy -E10618 Type 1 diabetes mellitus with other diabetic arthropathy -E10620 Type 1 diabetes mellitus with diabetic dermatitis -E10621 Type 1 diabetes mellitus with foot ulcer -E10622 Type 1 diabetes mellitus with other skin ulcer -E10628 Type 1 diabetes mellitus with other skin complications -E10630 Type 1 diabetes mellitus with periodontal disease -E10638 Type 1 diabetes mellitus with other oral complications -E10641 Type 1 diabetes mellitus with hypoglycemia with coma -E10649 Type 1 diabetes mellitus with hypoglycemia without coma -E1065 Type 1 diabetes mellitus with hyperglycemia -E1069 Type 1 diabetes mellitus with other specified complication -E108 Type 1 diabetes mellitus with unspecified complications -E109 Type 1 diabetes mellitus without complications -E1100 Type 2 diabetes mellitus with hyperosmolarity without nonketotic hyperglycemic-hyperosmolar coma (NKHHC) -E1101 Type 2 diabetes mellitus with hyperosmolarity with coma -E1121 Type 2 diabetes mellitus with diabetic nephropathy -E1122 Type 2 diabetes mellitus with diabetic chronic kidney disease -E1129 Type 2 diabetes mellitus with other diabetic kidney complication -E11311 Type 2 diabetes mellitus with unspecified diabetic retinopathy with macular edema -E11319 Type 2 diabetes mellitus with unspecified diabetic retinopathy without macular edema -E11321 Type 2 diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema -E11329 Type 2 diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema -E11331 Type 2 diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema -E11339 Type 2 diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema -E11341 Type 2 diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema -E11349 Type 2 diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema -E11351 Type 2 diabetes mellitus with proliferative diabetic retinopathy with macular edema -E11359 Type 2 diabetes mellitus with proliferative diabetic retinopathy without macular edema -E1136 Type 2 diabetes mellitus with diabetic cataract -E1139 Type 2 diabetes mellitus with other diabetic ophthalmic complication -E1140 Type 2 diabetes mellitus with diabetic neuropathy, unspecified -E1141 Type 2 diabetes mellitus with diabetic mononeuropathy -E1142 Type 2 diabetes mellitus with diabetic polyneuropathy -E1143 Type 2 diabetes mellitus with diabetic autonomic (poly)neuropathy -E1144 Type 2 diabetes mellitus with diabetic amyotrophy -E1149 Type 2 diabetes mellitus with other diabetic neurological complication -E1151 Type 2 diabetes mellitus with diabetic peripheral angiopathy without gangrene -E1152 Type 2 diabetes mellitus with diabetic peripheral angiopathy with gangrene -E1159 Type 2 diabetes mellitus with other circulatory complications -E11610 Type 2 diabetes mellitus with diabetic neuropathic arthropathy -E11618 Type 2 diabetes mellitus with other diabetic arthropathy -E11620 Type 2 diabetes mellitus with diabetic dermatitis -E11621 Type 2 diabetes mellitus with foot ulcer -E11622 Type 2 diabetes mellitus with other skin ulcer -E11628 Type 2 diabetes mellitus with other skin complications -E11630 Type 2 diabetes mellitus with periodontal disease -E11638 Type 2 diabetes mellitus with other oral complications -E11641 Type 2 diabetes mellitus with hypoglycemia with coma -E11649 Type 2 diabetes mellitus with hypoglycemia without coma -E1165 Type 2 diabetes mellitus with hyperglycemia -E1169 Type 2 diabetes mellitus with other specified complication -E118 Type 2 diabetes mellitus with unspecified complications -E119 Type 2 diabetes mellitus without complications -E1300 Other specified diabetes mellitus with hyperosmolarity without nonketotic hyperglycemic-hyperosmolar coma (NKHHC) -E1301 Other specified diabetes mellitus with hyperosmolarity with coma -E1310 Other specified diabetes mellitus with ketoacidosis without coma -E1311 Other specified diabetes mellitus with ketoacidosis with coma -E1321 Other specified diabetes mellitus with diabetic nephropathy -E1322 Other specified diabetes mellitus with diabetic chronic kidney disease -E1329 Other specified diabetes mellitus with other diabetic kidney complication -E13311 Other specified diabetes mellitus with unspecified diabetic retinopathy with macular edema -E13319 Other specified diabetes mellitus with unspecified diabetic retinopathy without macular edema -E13321 Other specified diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema -E13329 Other specified diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema -E13331 Other specified diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema -E13339 Other specified diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema -E13341 Other specified diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema -E13349 Other specified diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema -E13351 Other specified diabetes mellitus with proliferative diabetic retinopathy with macular edema -E13359 Other specified diabetes mellitus with proliferative diabetic retinopathy without macular edema -E1336 Other specified diabetes mellitus with diabetic cataract -E1339 Other specified diabetes mellitus with other diabetic ophthalmic complication -E1340 Other specified diabetes mellitus with diabetic neuropathy, unspecified -E1341 Other specified diabetes mellitus with diabetic mononeuropathy -E1342 Other specified diabetes mellitus with diabetic polyneuropathy -E1343 Other specified diabetes mellitus with diabetic autonomic (poly)neuropathy -E1344 Other specified diabetes mellitus with diabetic amyotrophy -E1349 Other specified diabetes mellitus with other diabetic neurological complication -E1351 Other specified diabetes mellitus with diabetic peripheral angiopathy without gangrene -E1352 Other specified diabetes mellitus with diabetic peripheral angiopathy with gangrene -E1359 Other specified diabetes mellitus with other circulatory complications -E13610 Other specified diabetes mellitus with diabetic neuropathic arthropathy -E13618 Other specified diabetes mellitus with other diabetic arthropathy -E13620 Other specified diabetes mellitus with diabetic dermatitis -E13621 Other specified diabetes mellitus with foot ulcer -E13622 Other specified diabetes mellitus with other skin ulcer -E13628 Other specified diabetes mellitus with other skin complications -E13630 Other specified diabetes mellitus with periodontal disease -E13638 Other specified diabetes mellitus with other oral complications -E13641 Other specified diabetes mellitus with hypoglycemia with coma -E13649 Other specified diabetes mellitus with hypoglycemia without coma -E1365 Other specified diabetes mellitus with hyperglycemia -E1369 Other specified diabetes mellitus with other specified complication -E138 Other specified diabetes mellitus with unspecified complications -E139 Other specified diabetes mellitus without complications -E15 Nondiabetic hypoglycemic coma -E160 Drug-induced hypoglycemia without coma -E161 Other hypoglycemia -E162 Hypoglycemia, unspecified -E163 Increased secretion of glucagon -E164 Increased secretion of gastrin -E168 Other specified disorders of pancreatic internal secretion -E169 Disorder of pancreatic internal secretion, unspecified -E200 Idiopathic hypoparathyroidism -E201 Pseudohypoparathyroidism -E208 Other hypoparathyroidism -E209 Hypoparathyroidism, unspecified -E210 Primary hyperparathyroidism -E211 Secondary hyperparathyroidism, not elsewhere classified -E212 Other hyperparathyroidism -E213 Hyperparathyroidism, unspecified -E214 Other specified disorders of parathyroid gland -E215 Disorder of parathyroid gland, unspecified -E220 Acromegaly and pituitary gigantism -E221 Hyperprolactinemia -E222 Syndrome of inappropriate secretion of antidiuretic hormone -E228 Other hyperfunction of pituitary gland -E229 Hyperfunction of pituitary gland, unspecified -E230 Hypopituitarism -E231 Drug-induced hypopituitarism -E232 Diabetes insipidus -E233 Hypothalamic dysfunction, not elsewhere classified -E236 Other disorders of pituitary gland -E237 Disorder of pituitary gland, unspecified -E240 Pituitary-dependent Cushing's disease -E241 Nelson's syndrome -E242 Drug-induced Cushing's syndrome -E243 Ectopic ACTH syndrome -E244 Alcohol-induced pseudo-Cushing's syndrome -E248 Other Cushing's syndrome -E249 Cushing's syndrome, unspecified -E250 Congenital adrenogenital disorders associated with enzyme deficiency -E258 Other adrenogenital disorders -E259 Adrenogenital disorder, unspecified -E2601 Conn's syndrome -E2602 Glucocorticoid-remediable aldosteronism -E2609 Other primary hyperaldosteronism -E261 Secondary hyperaldosteronism -E2681 Bartter's syndrome -E2689 Other hyperaldosteronism -E269 Hyperaldosteronism, unspecified -E270 Other adrenocortical overactivity -E271 Primary adrenocortical insufficiency -E272 Addisonian crisis -E273 Drug-induced adrenocortical insufficiency -E2740 Unspecified adrenocortical insufficiency -E2749 Other adrenocortical insufficiency -E275 Adrenomedullary hyperfunction -E278 Other specified disorders of adrenal gland -E279 Disorder of adrenal gland, unspecified -E280 Estrogen excess -E281 Androgen excess -E282 Polycystic ovarian syndrome -E28310 Symptomatic premature menopause -E28319 Asymptomatic premature menopause -E2839 Other primary ovarian failure -E288 Other ovarian dysfunction -E289 Ovarian dysfunction, unspecified -E290 Testicular hyperfunction -E291 Testicular hypofunction -E298 Other testicular dysfunction -E299 Testicular dysfunction, unspecified -E300 Delayed puberty -E301 Precocious puberty -E308 Other disorders of puberty -E309 Disorder of puberty, unspecified -E310 Autoimmune polyglandular failure -E311 Polyglandular hyperfunction -E3120 Multiple endocrine neoplasia [MEN] syndrome, unspecified -E3121 Multiple endocrine neoplasia [MEN] type I -E3122 Multiple endocrine neoplasia [MEN] type IIA -E3123 Multiple endocrine neoplasia [MEN] type IIB -E318 Other polyglandular dysfunction -E319 Polyglandular dysfunction, unspecified -E320 Persistent hyperplasia of thymus -E321 Abscess of thymus -E328 Other diseases of thymus -E329 Disease of thymus, unspecified -E340 Carcinoid syndrome -E341 Other hypersecretion of intestinal hormones -E342 Ectopic hormone secretion, not elsewhere classified -E343 Short stature due to endocrine disorder -E344 Constitutional tall stature -E3450 Androgen insensitivity syndrome, unspecified -E3451 Complete androgen insensitivity syndrome -E3452 Partial androgen insensitivity syndrome -E348 Other specified endocrine disorders -E349 Endocrine disorder, unspecified -E35 Disorders of endocrine glands in diseases classified elsewhere -E3601 Intraoperative hemorrhage and hematoma of an endocrine system organ or structure complicating an endocrine system procedure -E3602 Intraoperative hemorrhage and hematoma of an endocrine system organ or structure complicating other procedure -E3611 Accidental puncture and laceration of an endocrine system organ or structure during an endocrine system procedure -E3612 Accidental puncture and laceration of an endocrine system organ or structure during other procedure -E368 Other intraoperative complications of endocrine system -E40 Kwashiorkor -E41 Nutritional marasmus -E42 Marasmic kwashiorkor -E43 Unspecified severe protein-calorie malnutrition -E440 Moderate protein-calorie malnutrition -E441 Mild protein-calorie malnutrition -E45 Retarded development following protein-calorie malnutrition -E46 Unspecified protein-calorie malnutrition -E500 Vitamin A deficiency with conjunctival xerosis -E501 Vitamin A deficiency with Bitot's spot and conjunctival xerosis -E502 Vitamin A deficiency with corneal xerosis -E503 Vitamin A deficiency with corneal ulceration and xerosis -E504 Vitamin A deficiency with keratomalacia -E505 Vitamin A deficiency with night blindness -E506 Vitamin A deficiency with xerophthalmic scars of cornea -E507 Other ocular manifestations of vitamin A deficiency -E508 Other manifestations of vitamin A deficiency -E509 Vitamin A deficiency, unspecified -E5111 Dry beriberi -E5112 Wet beriberi -E512 Wernicke's encephalopathy -E518 Other manifestations of thiamine deficiency -E519 Thiamine deficiency, unspecified -E52 Niacin deficiency [pellagra] -E530 Riboflavin deficiency -E531 Pyridoxine deficiency -E538 Deficiency of other specified B group vitamins -E539 Vitamin B deficiency, unspecified -E54 Ascorbic acid deficiency -E550 Rickets, active -E559 Vitamin D deficiency, unspecified -E560 Deficiency of vitamin E -E561 Deficiency of vitamin K -E568 Deficiency of other vitamins -E569 Vitamin deficiency, unspecified -E58 Dietary calcium deficiency -E59 Dietary selenium deficiency -E60 Dietary zinc deficiency -E610 Copper deficiency -E611 Iron deficiency -E612 Magnesium deficiency -E613 Manganese deficiency -E614 Chromium deficiency -E615 Molybdenum deficiency -E616 Vanadium deficiency -E617 Deficiency of multiple nutrient elements -E618 Deficiency of other specified nutrient elements -E619 Deficiency of nutrient element, unspecified -E630 Essential fatty acid [EFA] deficiency -E631 Imbalance of constituents of food intake -E638 Other specified nutritional deficiencies -E639 Nutritional deficiency, unspecified -E640 Sequelae of protein-calorie malnutrition -E641 Sequelae of vitamin A deficiency -E642 Sequelae of vitamin C deficiency -E643 Sequelae of rickets -E648 Sequelae of other nutritional deficiencies -E649 Sequelae of unspecified nutritional deficiency -E65 Localized adiposity -E6601 Morbid (severe) obesity due to excess calories -E6609 Other obesity due to excess calories -E661 Drug-induced obesity -E662 Morbid (severe) obesity with alveolar hypoventilation -E663 Overweight -E668 Other obesity -E669 Obesity, unspecified -E670 Hypervitaminosis A -E671 Hypercarotinemia -E672 Megavitamin-B6 syndrome -E673 Hypervitaminosis D -E678 Other specified hyperalimentation -E68 Sequelae of hyperalimentation -E700 Classical phenylketonuria -E701 Other hyperphenylalaninemias -E7020 Disorder of tyrosine metabolism, unspecified -E7021 Tyrosinemia -E7029 Other disorders of tyrosine metabolism -E7030 Albinism, unspecified -E70310 X-linked ocular albinism -E70311 Autosomal recessive ocular albinism -E70318 Other ocular albinism -E70319 Ocular albinism, unspecified -E70320 Tyrosinase negative oculocutaneous albinism -E70321 Tyrosinase positive oculocutaneous albinism -E70328 Other oculocutaneous albinism -E70329 Oculocutaneous albinism, unspecified -E70330 Chediak-Higashi syndrome -E70331 Hermansky-Pudlak syndrome -E70338 Other albinism with hematologic abnormality -E70339 Albinism with hematologic abnormality, unspecified -E7039 Other specified albinism -E7040 Disorders of histidine metabolism, unspecified -E7041 Histidinemia -E7049 Other disorders of histidine metabolism -E705 Disorders of tryptophan metabolism -E708 Other disorders of aromatic amino-acid metabolism -E709 Disorder of aromatic amino-acid metabolism, unspecified -E710 Maple-syrup-urine disease -E71110 Isovaleric acidemia -E71111 3-methylglutaconic aciduria -E71118 Other branched-chain organic acidurias -E71120 Methylmalonic acidemia -E71121 Propionic acidemia -E71128 Other disorders of propionate metabolism -E7119 Other disorders of branched-chain amino-acid metabolism -E712 Disorder of branched-chain amino-acid metabolism, unspecified -E7130 Disorder of fatty-acid metabolism, unspecified -E71310 Long chain/very long chain acyl CoA dehydrogenase deficiency -E71311 Medium chain acyl CoA dehydrogenase deficiency -E71312 Short chain acyl CoA dehydrogenase deficiency -E71313 Glutaric aciduria type II -E71314 Muscle carnitine palmitoyltransferase deficiency -E71318 Other disorders of fatty-acid oxidation -E7132 Disorders of ketone metabolism -E7139 Other disorders of fatty-acid metabolism -E7140 Disorder of carnitine metabolism, unspecified -E7141 Primary carnitine deficiency -E7142 Carnitine deficiency due to inborn errors of metabolism -E7143 Iatrogenic carnitine deficiency -E71440 Ruvalcaba-Myhre-Smith syndrome -E71448 Other secondary carnitine deficiency -E7150 Peroxisomal disorder, unspecified -E71510 Zellweger syndrome -E71511 Neonatal adrenoleukodystrophy -E71518 Other disorders of peroxisome biogenesis -E71520 Childhood cerebral X-linked adrenoleukodystrophy -E71521 Adolescent X-linked adrenoleukodystrophy -E71522 Adrenomyeloneuropathy -E71528 Other X-linked adrenoleukodystrophy -E71529 X-linked adrenoleukodystrophy, unspecified type -E7153 Other group 2 peroxisomal disorders -E71540 Rhizomelic chondrodysplasia punctata -E71541 Zellweger-like syndrome -E71542 Other group 3 peroxisomal disorders -E71548 Other peroxisomal disorders -E7200 Disorders of amino-acid transport, unspecified -E7201 Cystinuria -E7202 Hartnup's disease -E7203 Lowe's syndrome -E7204 Cystinosis -E7209 Other disorders of amino-acid transport -E7210 Disorders of sulfur-bearing amino-acid metabolism, unspecified -E7211 Homocystinuria -E7212 Methylenetetrahydrofolate reductase deficiency -E7219 Other disorders of sulfur-bearing amino-acid metabolism -E7220 Disorder of urea cycle metabolism, unspecified -E7221 Argininemia -E7222 Arginosuccinic aciduria -E7223 Citrullinemia -E7229 Other disorders of urea cycle metabolism -E723 Disorders of lysine and hydroxylysine metabolism -E724 Disorders of ornithine metabolism -E7250 Disorder of glycine metabolism, unspecified -E7251 Non-ketotic hyperglycinemia -E7252 Trimethylaminuria -E7253 Hyperoxaluria -E7259 Other disorders of glycine metabolism -E728 Other specified disorders of amino-acid metabolism -E729 Disorder of amino-acid metabolism, unspecified -E730 Congenital lactase deficiency -E731 Secondary lactase deficiency -E738 Other lactose intolerance -E739 Lactose intolerance, unspecified -E7400 Glycogen storage disease, unspecified -E7401 von Gierke disease -E7402 Pompe disease -E7403 Cori disease -E7404 McArdle disease -E7409 Other glycogen storage disease -E7410 Disorder of fructose metabolism, unspecified -E7411 Essential fructosuria -E7412 Hereditary fructose intolerance -E7419 Other disorders of fructose metabolism -E7420 Disorders of galactose metabolism, unspecified -E7421 Galactosemia -E7429 Other disorders of galactose metabolism -E7431 Sucrase-isomaltase deficiency -E7439 Other disorders of intestinal carbohydrate absorption -E744 Disorders of pyruvate metabolism and gluconeogenesis -E748 Other specified disorders of carbohydrate metabolism -E749 Disorder of carbohydrate metabolism, unspecified -E7500 GM2 gangliosidosis, unspecified -E7501 Sandhoff disease -E7502 Tay-Sachs disease -E7509 Other GM2 gangliosidosis -E7510 Unspecified gangliosidosis -E7511 Mucolipidosis IV -E7519 Other gangliosidosis -E7521 Fabry (-Anderson) disease -E7522 Gaucher disease -E7523 Krabbe disease -E75240 Niemann-Pick disease type A -E75241 Niemann-Pick disease type B -E75242 Niemann-Pick disease type C -E75243 Niemann-Pick disease type D -E75248 Other Niemann-Pick disease -E75249 Niemann-Pick disease, unspecified -E7525 Metachromatic leukodystrophy -E7529 Other sphingolipidosis -E753 Sphingolipidosis, unspecified -E754 Neuronal ceroid lipofuscinosis -E755 Other lipid storage disorders -E756 Lipid storage disorder, unspecified -E7601 Hurler's syndrome -E7602 Hurler-Scheie syndrome -E7603 Scheie's syndrome -E761 Mucopolysaccharidosis, type II -E76210 Morquio A mucopolysaccharidoses -E76211 Morquio B mucopolysaccharidoses -E76219 Morquio mucopolysaccharidoses, unspecified -E7622 Sanfilippo mucopolysaccharidoses -E7629 Other mucopolysaccharidoses -E763 Mucopolysaccharidosis, unspecified -E768 Other disorders of glucosaminoglycan metabolism -E769 Glucosaminoglycan metabolism disorder, unspecified -E770 Defects in post-translational modification of lysosomal enzymes -E771 Defects in glycoprotein degradation -E778 Other disorders of glycoprotein metabolism -E779 Disorder of glycoprotein metabolism, unspecified -E780 Pure hypercholesterolemia -E781 Pure hyperglyceridemia -E782 Mixed hyperlipidemia -E783 Hyperchylomicronemia -E784 Other hyperlipidemia -E785 Hyperlipidemia, unspecified -E786 Lipoprotein deficiency -E7870 Disorder of bile acid and cholesterol metabolism, unspecified -E7871 Barth syndrome -E7872 Smith-Lemli-Opitz syndrome -E7879 Other disorders of bile acid and cholesterol metabolism -E7881 Lipoid dermatoarthritis -E7889 Other lipoprotein metabolism disorders -E789 Disorder of lipoprotein metabolism, unspecified -E790 Hyperuricemia without signs of inflammatory arthritis and tophaceous disease -E791 Lesch-Nyhan syndrome -E792 Myoadenylate deaminase deficiency -E798 Other disorders of purine and pyrimidine metabolism -E799 Disorder of purine and pyrimidine metabolism, unspecified -E800 Hereditary erythropoietic porphyria -E801 Porphyria cutanea tarda -E8020 Unspecified porphyria -E8021 Acute intermittent (hepatic) porphyria -E8029 Other porphyria -E803 Defects of catalase and peroxidase -E804 Gilbert syndrome -E805 Crigler-Najjar syndrome -E806 Other disorders of bilirubin metabolism -E807 Disorder of bilirubin metabolism, unspecified -E8300 Disorder of copper metabolism, unspecified -E8301 Wilson's disease -E8309 Other disorders of copper metabolism -E8310 Disorder of iron metabolism, unspecified -E83110 Hereditary hemochromatosis -E83111 Hemochromatosis due to repeated red blood cell transfusions -E83118 Other hemochromatosis -E83119 Hemochromatosis, unspecified -E8319 Other disorders of iron metabolism -E832 Disorders of zinc metabolism -E8330 Disorder of phosphorus metabolism, unspecified -E8331 Familial hypophosphatemia -E8332 Hereditary vitamin D-dependent rickets (type 1) (type 2) -E8339 Other disorders of phosphorus metabolism -E8340 Disorders of magnesium metabolism, unspecified -E8341 Hypermagnesemia -E8342 Hypomagnesemia -E8349 Other disorders of magnesium metabolism -E8350 Unspecified disorder of calcium metabolism -E8351 Hypocalcemia -E8352 Hypercalcemia -E8359 Other disorders of calcium metabolism -E8381 Hungry bone syndrome -E8389 Other disorders of mineral metabolism -E839 Disorder of mineral metabolism, unspecified -E840 Cystic fibrosis with pulmonary manifestations -E8411 Meconium ileus in cystic fibrosis -E8419 Cystic fibrosis with other intestinal manifestations -E848 Cystic fibrosis with other manifestations -E849 Cystic fibrosis, unspecified -E850 Non-neuropathic heredofamilial amyloidosis -E851 Neuropathic heredofamilial amyloidosis -E852 Heredofamilial amyloidosis, unspecified -E853 Secondary systemic amyloidosis -E854 Organ-limited amyloidosis -E858 Other amyloidosis -E859 Amyloidosis, unspecified -E860 Dehydration -E861 Hypovolemia -E869 Volume depletion, unspecified -E870 Hyperosmolality and hypernatremia -E871 Hypo-osmolality and hyponatremia -E872 Acidosis -E873 Alkalosis -E874 Mixed disorder of acid-base balance -E875 Hyperkalemia -E876 Hypokalemia -E8770 Fluid overload, unspecified -E8771 Transfusion associated circulatory overload -E8779 Other fluid overload -E878 Other disorders of electrolyte and fluid balance, not elsewhere classified -E8801 Alpha-1-antitrypsin deficiency -E8809 Other disorders of plasma-protein metabolism, not elsewhere classified -E881 Lipodystrophy, not elsewhere classified -E882 Lipomatosis, not elsewhere classified -E883 Tumor lysis syndrome -E8840 Mitochondrial metabolism disorder, unspecified -E8841 MELAS syndrome -E8842 MERRF syndrome -E8849 Other mitochondrial metabolism disorders -E8881 Metabolic syndrome -E8889 Other specified metabolic disorders -E889 Metabolic disorder, unspecified -E890 Postprocedural hypothyroidism -E891 Postprocedural hypoinsulinemia -E892 Postprocedural hypoparathyroidism -E893 Postprocedural hypopituitarism -E8940 Asymptomatic postprocedural ovarian failure -E8941 Symptomatic postprocedural ovarian failure -E895 Postprocedural testicular hypofunction -E896 Postprocedural adrenocortical (-medullary) hypofunction -E89810 Postprocedural hemorrhage and hematoma of an endocrine system organ or structure following an endocrine system procedure -E89811 Postprocedural hemorrhage and hematoma of an endocrine system organ or structure following other procedure -E8989 Other postprocedural endocrine and metabolic complications and disorders -F0150 Vascular dementia without behavioral disturbance -F0151 Vascular dementia with behavioral disturbance -F0280 Dementia in other diseases classified elsewhere without behavioral disturbance -F0281 Dementia in other diseases classified elsewhere with behavioral disturbance -F0390 Unspecified dementia without behavioral disturbance -F0391 Unspecified dementia with behavioral disturbance -F04 Amnestic disorder due to known physiological condition -F05 Delirium due to known physiological condition -F060 Psychotic disorder with hallucinations due to known physiological condition -F061 Catatonic disorder due to known physiological condition -F062 Psychotic disorder with delusions due to known physiological condition -F0630 Mood disorder due to known physiological condition, unspecified -F0631 Mood disorder due to known physiological condition with depressive features -F0632 Mood disorder due to known physiological condition with major depressive-like episode -F0633 Mood disorder due to known physiological condition with manic features -F0634 Mood disorder due to known physiological condition with mixed features -F064 Anxiety disorder due to known physiological condition -F068 Other specified mental disorders due to known physiological condition -F070 Personality change due to known physiological condition -F0781 Postconcussional syndrome -F0789 Other personality and behavioral disorders due to known physiological condition -F079 Unspecified personality and behavioral disorder due to known physiological condition -F09 Unspecified mental disorder due to known physiological condition -F1010 Alcohol abuse, uncomplicated -F10120 Alcohol abuse with intoxication, uncomplicated -F10121 Alcohol abuse with intoxication delirium -F10129 Alcohol abuse with intoxication, unspecified -F1014 Alcohol abuse with alcohol-induced mood disorder -F10150 Alcohol abuse with alcohol-induced psychotic disorder with delusions -F10151 Alcohol abuse with alcohol-induced psychotic disorder with hallucinations -F10159 Alcohol abuse with alcohol-induced psychotic disorder, unspecified -F10180 Alcohol abuse with alcohol-induced anxiety disorder -F10181 Alcohol abuse with alcohol-induced sexual dysfunction -F10182 Alcohol abuse with alcohol-induced sleep disorder -F10188 Alcohol abuse with other alcohol-induced disorder -F1019 Alcohol abuse with unspecified alcohol-induced disorder -F1020 Alcohol dependence, uncomplicated -F1021 Alcohol dependence, in remission -F10220 Alcohol dependence with intoxication, uncomplicated -F10221 Alcohol dependence with intoxication delirium -F10229 Alcohol dependence with intoxication, unspecified -F10230 Alcohol dependence with withdrawal, uncomplicated -F10231 Alcohol dependence with withdrawal delirium -F10232 Alcohol dependence with withdrawal with perceptual disturbance -F10239 Alcohol dependence with withdrawal, unspecified -F1024 Alcohol dependence with alcohol-induced mood disorder -F10250 Alcohol dependence with alcohol-induced psychotic disorder with delusions -F10251 Alcohol dependence with alcohol-induced psychotic disorder with hallucinations -F10259 Alcohol dependence with alcohol-induced psychotic disorder, unspecified -F1026 Alcohol dependence with alcohol-induced persisting amnestic disorder -F1027 Alcohol dependence with alcohol-induced persisting dementia -F10280 Alcohol dependence with alcohol-induced anxiety disorder -F10281 Alcohol dependence with alcohol-induced sexual dysfunction -F10282 Alcohol dependence with alcohol-induced sleep disorder -F10288 Alcohol dependence with other alcohol-induced disorder -F1029 Alcohol dependence with unspecified alcohol-induced disorder -F10920 Alcohol use, unspecified with intoxication, uncomplicated -F10921 Alcohol use, unspecified with intoxication delirium -F10929 Alcohol use, unspecified with intoxication, unspecified -F1094 Alcohol use, unspecified with alcohol-induced mood disorder -F10950 Alcohol use, unspecified with alcohol-induced psychotic disorder with delusions -F10951 Alcohol use, unspecified with alcohol-induced psychotic disorder with hallucinations -F10959 Alcohol use, unspecified with alcohol-induced psychotic disorder, unspecified -F1096 Alcohol use, unspecified with alcohol-induced persisting amnestic disorder -F1097 Alcohol use, unspecified with alcohol-induced persisting dementia -F10980 Alcohol use, unspecified with alcohol-induced anxiety disorder -F10981 Alcohol use, unspecified with alcohol-induced sexual dysfunction -F10982 Alcohol use, unspecified with alcohol-induced sleep disorder -F10988 Alcohol use, unspecified with other alcohol-induced disorder -F1099 Alcohol use, unspecified with unspecified alcohol-induced disorder -F1110 Opioid abuse, uncomplicated -F11120 Opioid abuse with intoxication, uncomplicated -F11121 Opioid abuse with intoxication delirium -F11122 Opioid abuse with intoxication with perceptual disturbance -F11129 Opioid abuse with intoxication, unspecified -F1114 Opioid abuse with opioid-induced mood disorder -F11150 Opioid abuse with opioid-induced psychotic disorder with delusions -F11151 Opioid abuse with opioid-induced psychotic disorder with hallucinations -F11159 Opioid abuse with opioid-induced psychotic disorder, unspecified -F11181 Opioid abuse with opioid-induced sexual dysfunction -F11182 Opioid abuse with opioid-induced sleep disorder -F11188 Opioid abuse with other opioid-induced disorder -F1119 Opioid abuse with unspecified opioid-induced disorder -F1120 Opioid dependence, uncomplicated -F1121 Opioid dependence, in remission -F11220 Opioid dependence with intoxication, uncomplicated -F11221 Opioid dependence with intoxication delirium -F11222 Opioid dependence with intoxication with perceptual disturbance -F11229 Opioid dependence with intoxication, unspecified -F1123 Opioid dependence with withdrawal -F1124 Opioid dependence with opioid-induced mood disorder -F11250 Opioid dependence with opioid-induced psychotic disorder with delusions -F11251 Opioid dependence with opioid-induced psychotic disorder with hallucinations -F11259 Opioid dependence with opioid-induced psychotic disorder, unspecified -F11281 Opioid dependence with opioid-induced sexual dysfunction -F11282 Opioid dependence with opioid-induced sleep disorder -F11288 Opioid dependence with other opioid-induced disorder -F1129 Opioid dependence with unspecified opioid-induced disorder -F1190 Opioid use, unspecified, uncomplicated -F11920 Opioid use, unspecified with intoxication, uncomplicated -F11921 Opioid use, unspecified with intoxication delirium -F11922 Opioid use, unspecified with intoxication with perceptual disturbance -F11929 Opioid use, unspecified with intoxication, unspecified -F1193 Opioid use, unspecified with withdrawal -F1194 Opioid use, unspecified with opioid-induced mood disorder -F11950 Opioid use, unspecified with opioid-induced psychotic disorder with delusions -F11951 Opioid use, unspecified with opioid-induced psychotic disorder with hallucinations -F11959 Opioid use, unspecified with opioid-induced psychotic disorder, unspecified -F11981 Opioid use, unspecified with opioid-induced sexual dysfunction -F11982 Opioid use, unspecified with opioid-induced sleep disorder -F11988 Opioid use, unspecified with other opioid-induced disorder -F1199 Opioid use, unspecified with unspecified opioid-induced disorder -F1210 Cannabis abuse, uncomplicated -F12120 Cannabis abuse with intoxication, uncomplicated -F12121 Cannabis abuse with intoxication delirium -F12122 Cannabis abuse with intoxication with perceptual disturbance -F12129 Cannabis abuse with intoxication, unspecified -F12150 Cannabis abuse with psychotic disorder with delusions -F12151 Cannabis abuse with psychotic disorder with hallucinations -F12159 Cannabis abuse with psychotic disorder, unspecified -F12180 Cannabis abuse with cannabis-induced anxiety disorder -F12188 Cannabis abuse with other cannabis-induced disorder -F1219 Cannabis abuse with unspecified cannabis-induced disorder -F1220 Cannabis dependence, uncomplicated -F1221 Cannabis dependence, in remission -F12220 Cannabis dependence with intoxication, uncomplicated -F12221 Cannabis dependence with intoxication delirium -F12222 Cannabis dependence with intoxication with perceptual disturbance -F12229 Cannabis dependence with intoxication, unspecified -F12250 Cannabis dependence with psychotic disorder with delusions -F12251 Cannabis dependence with psychotic disorder with hallucinations -F12259 Cannabis dependence with psychotic disorder, unspecified -F12280 Cannabis dependence with cannabis-induced anxiety disorder -F12288 Cannabis dependence with other cannabis-induced disorder -F1229 Cannabis dependence with unspecified cannabis-induced disorder -F1290 Cannabis use, unspecified, uncomplicated -F12920 Cannabis use, unspecified with intoxication, uncomplicated -F12921 Cannabis use, unspecified with intoxication delirium -F12922 Cannabis use, unspecified with intoxication with perceptual disturbance -F12929 Cannabis use, unspecified with intoxication, unspecified -F12950 Cannabis use, unspecified with psychotic disorder with delusions -F12951 Cannabis use, unspecified with psychotic disorder with hallucinations -F12959 Cannabis use, unspecified with psychotic disorder, unspecified -F12980 Cannabis use, unspecified with anxiety disorder -F12988 Cannabis use, unspecified with other cannabis-induced disorder -F1299 Cannabis use, unspecified with unspecified cannabis-induced disorder -F1310 Sedative, hypnotic or anxiolytic abuse, uncomplicated -F13120 Sedative, hypnotic or anxiolytic abuse with intoxication, uncomplicated -F13121 Sedative, hypnotic or anxiolytic abuse with intoxication delirium -F13129 Sedative, hypnotic or anxiolytic abuse with intoxication, unspecified -F1314 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced mood disorder -F13150 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced psychotic disorder with delusions -F13151 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced psychotic disorder with hallucinations -F13159 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced psychotic disorder, unspecified -F13180 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced anxiety disorder -F13181 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced sexual dysfunction -F13182 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced sleep disorder -F13188 Sedative, hypnotic or anxiolytic abuse with other sedative, hypnotic or anxiolytic-induced disorder -F1319 Sedative, hypnotic or anxiolytic abuse with unspecified sedative, hypnotic or anxiolytic-induced disorder -F1320 Sedative, hypnotic or anxiolytic dependence, uncomplicated -F1321 Sedative, hypnotic or anxiolytic dependence, in remission -F13220 Sedative, hypnotic or anxiolytic dependence with intoxication, uncomplicated -F13221 Sedative, hypnotic or anxiolytic dependence with intoxication delirium -F13229 Sedative, hypnotic or anxiolytic dependence with intoxication, unspecified -F13230 Sedative, hypnotic or anxiolytic dependence with withdrawal, uncomplicated -F13231 Sedative, hypnotic or anxiolytic dependence with withdrawal delirium -F13232 Sedative, hypnotic or anxiolytic dependence with withdrawal with perceptual disturbance -F13239 Sedative, hypnotic or anxiolytic dependence with withdrawal, unspecified -F1324 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced mood disorder -F13250 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced psychotic disorder with delusions -F13251 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced psychotic disorder with hallucinations -F13259 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced psychotic disorder, unspecified -F1326 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced persisting amnestic disorder -F1327 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced persisting dementia -F13280 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced anxiety disorder -F13281 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced sexual dysfunction -F13282 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced sleep disorder -F13288 Sedative, hypnotic or anxiolytic dependence with other sedative, hypnotic or anxiolytic-induced disorder -F1329 Sedative, hypnotic or anxiolytic dependence with unspecified sedative, hypnotic or anxiolytic-induced disorder -F1390 Sedative, hypnotic, or anxiolytic use, unspecified, uncomplicated -F13920 Sedative, hypnotic or anxiolytic use, unspecified with intoxication, uncomplicated -F13921 Sedative, hypnotic or anxiolytic use, unspecified with intoxication delirium -F13929 Sedative, hypnotic or anxiolytic use, unspecified with intoxication, unspecified -F13930 Sedative, hypnotic or anxiolytic use, unspecified with withdrawal, uncomplicated -F13931 Sedative, hypnotic or anxiolytic use, unspecified with withdrawal delirium -F13932 Sedative, hypnotic or anxiolytic use, unspecified with withdrawal with perceptual disturbances -F13939 Sedative, hypnotic or anxiolytic use, unspecified with withdrawal, unspecified -F1394 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced mood disorder -F13950 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced psychotic disorder with delusions -F13951 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced psychotic disorder with hallucinations -F13959 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced psychotic disorder, unspecified -F1396 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced persisting amnestic disorder -F1397 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced persisting dementia -F13980 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced anxiety disorder -F13981 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced sexual dysfunction -F13982 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced sleep disorder -F13988 Sedative, hypnotic or anxiolytic use, unspecified with other sedative, hypnotic or anxiolytic-induced disorder -F1399 Sedative, hypnotic or anxiolytic use, unspecified with unspecified sedative, hypnotic or anxiolytic-induced disorder -F1410 Cocaine abuse, uncomplicated -F14120 Cocaine abuse with intoxication, uncomplicated -F14121 Cocaine abuse with intoxication with delirium -F14122 Cocaine abuse with intoxication with perceptual disturbance -F14129 Cocaine abuse with intoxication, unspecified -F1414 Cocaine abuse with cocaine-induced mood disorder -F14150 Cocaine abuse with cocaine-induced psychotic disorder with delusions -F14151 Cocaine abuse with cocaine-induced psychotic disorder with hallucinations -F14159 Cocaine abuse with cocaine-induced psychotic disorder, unspecified -F14180 Cocaine abuse with cocaine-induced anxiety disorder -F14181 Cocaine abuse with cocaine-induced sexual dysfunction -F14182 Cocaine abuse with cocaine-induced sleep disorder -F14188 Cocaine abuse with other cocaine-induced disorder -F1419 Cocaine abuse with unspecified cocaine-induced disorder -F1420 Cocaine dependence, uncomplicated -F1421 Cocaine dependence, in remission -F14220 Cocaine dependence with intoxication, uncomplicated -F14221 Cocaine dependence with intoxication delirium -F14222 Cocaine dependence with intoxication with perceptual disturbance -F14229 Cocaine dependence with intoxication, unspecified -F1423 Cocaine dependence with withdrawal -F1424 Cocaine dependence with cocaine-induced mood disorder -F14250 Cocaine dependence with cocaine-induced psychotic disorder with delusions -F14251 Cocaine dependence with cocaine-induced psychotic disorder with hallucinations -F14259 Cocaine dependence with cocaine-induced psychotic disorder, unspecified -F14280 Cocaine dependence with cocaine-induced anxiety disorder -F14281 Cocaine dependence with cocaine-induced sexual dysfunction -F14282 Cocaine dependence with cocaine-induced sleep disorder -F14288 Cocaine dependence with other cocaine-induced disorder -F1429 Cocaine dependence with unspecified cocaine-induced disorder -F1490 Cocaine use, unspecified, uncomplicated -F14920 Cocaine use, unspecified with intoxication, uncomplicated -F14921 Cocaine use, unspecified with intoxication delirium -F14922 Cocaine use, unspecified with intoxication with perceptual disturbance -F14929 Cocaine use, unspecified with intoxication, unspecified -F1494 Cocaine use, unspecified with cocaine-induced mood disorder -F14950 Cocaine use, unspecified with cocaine-induced psychotic disorder with delusions -F14951 Cocaine use, unspecified with cocaine-induced psychotic disorder with hallucinations -F14959 Cocaine use, unspecified with cocaine-induced psychotic disorder, unspecified -F14980 Cocaine use, unspecified with cocaine-induced anxiety disorder -F14981 Cocaine use, unspecified with cocaine-induced sexual dysfunction -F14982 Cocaine use, unspecified with cocaine-induced sleep disorder -F14988 Cocaine use, unspecified with other cocaine-induced disorder -F1499 Cocaine use, unspecified with unspecified cocaine-induced disorder -F1510 Other stimulant abuse, uncomplicated -F15120 Other stimulant abuse with intoxication, uncomplicated -F15121 Other stimulant abuse with intoxication delirium -F15122 Other stimulant abuse with intoxication with perceptual disturbance -F15129 Other stimulant abuse with intoxication, unspecified -F1514 Other stimulant abuse with stimulant-induced mood disorder -F15150 Other stimulant abuse with stimulant-induced psychotic disorder with delusions -F15151 Other stimulant abuse with stimulant-induced psychotic disorder with hallucinations -F15159 Other stimulant abuse with stimulant-induced psychotic disorder, unspecified -F15180 Other stimulant abuse with stimulant-induced anxiety disorder -F15181 Other stimulant abuse with stimulant-induced sexual dysfunction -F15182 Other stimulant abuse with stimulant-induced sleep disorder -F15188 Other stimulant abuse with other stimulant-induced disorder -F1519 Other stimulant abuse with unspecified stimulant-induced disorder -F1520 Other stimulant dependence, uncomplicated -F1521 Other stimulant dependence, in remission -F15220 Other stimulant dependence with intoxication, uncomplicated -F15221 Other stimulant dependence with intoxication delirium -F15222 Other stimulant dependence with intoxication with perceptual disturbance -F15229 Other stimulant dependence with intoxication, unspecified -F1523 Other stimulant dependence with withdrawal -F1524 Other stimulant dependence with stimulant-induced mood disorder -F15250 Other stimulant dependence with stimulant-induced psychotic disorder with delusions -F15251 Other stimulant dependence with stimulant-induced psychotic disorder with hallucinations -F15259 Other stimulant dependence with stimulant-induced psychotic disorder, unspecified -F15280 Other stimulant dependence with stimulant-induced anxiety disorder -F15281 Other stimulant dependence with stimulant-induced sexual dysfunction -F15282 Other stimulant dependence with stimulant-induced sleep disorder -F15288 Other stimulant dependence with other stimulant-induced disorder -F1529 Other stimulant dependence with unspecified stimulant-induced disorder -F1590 Other stimulant use, unspecified, uncomplicated -F15920 Other stimulant use, unspecified with intoxication, uncomplicated -F15921 Other stimulant use, unspecified with intoxication delirium -F15922 Other stimulant use, unspecified with intoxication with perceptual disturbance -F15929 Other stimulant use, unspecified with intoxication, unspecified -F1593 Other stimulant use, unspecified with withdrawal -F1594 Other stimulant use, unspecified with stimulant-induced mood disorder -F15950 Other stimulant use, unspecified with stimulant-induced psychotic disorder with delusions -F15951 Other stimulant use, unspecified with stimulant-induced psychotic disorder with hallucinations -F15959 Other stimulant use, unspecified with stimulant-induced psychotic disorder, unspecified -F15980 Other stimulant use, unspecified with stimulant-induced anxiety disorder -F15981 Other stimulant use, unspecified with stimulant-induced sexual dysfunction -F15982 Other stimulant use, unspecified with stimulant-induced sleep disorder -F15988 Other stimulant use, unspecified with other stimulant-induced disorder -F1599 Other stimulant use, unspecified with unspecified stimulant-induced disorder -F1610 Hallucinogen abuse, uncomplicated -F16120 Hallucinogen abuse with intoxication, uncomplicated -F16121 Hallucinogen abuse with intoxication with delirium -F16122 Hallucinogen abuse with intoxication with perceptual disturbance -F16129 Hallucinogen abuse with intoxication, unspecified -F1614 Hallucinogen abuse with hallucinogen-induced mood disorder -F16150 Hallucinogen abuse with hallucinogen-induced psychotic disorder with delusions -F16151 Hallucinogen abuse with hallucinogen-induced psychotic disorder with hallucinations -F16159 Hallucinogen abuse with hallucinogen-induced psychotic disorder, unspecified -F16180 Hallucinogen abuse with hallucinogen-induced anxiety disorder -F16183 Hallucinogen abuse with hallucinogen persisting perception disorder (flashbacks) -F16188 Hallucinogen abuse with other hallucinogen-induced disorder -F1619 Hallucinogen abuse with unspecified hallucinogen-induced disorder -F1620 Hallucinogen dependence, uncomplicated -F1621 Hallucinogen dependence, in remission -F16220 Hallucinogen dependence with intoxication, uncomplicated -F16221 Hallucinogen dependence with intoxication with delirium -F16229 Hallucinogen dependence with intoxication, unspecified -F1624 Hallucinogen dependence with hallucinogen-induced mood disorder -F16250 Hallucinogen dependence with hallucinogen-induced psychotic disorder with delusions -F16251 Hallucinogen dependence with hallucinogen-induced psychotic disorder with hallucinations -F16259 Hallucinogen dependence with hallucinogen-induced psychotic disorder, unspecified -F16280 Hallucinogen dependence with hallucinogen-induced anxiety disorder -F16283 Hallucinogen dependence with hallucinogen persisting perception disorder (flashbacks) -F16288 Hallucinogen dependence with other hallucinogen-induced disorder -F1629 Hallucinogen dependence with unspecified hallucinogen-induced disorder -F1690 Hallucinogen use, unspecified, uncomplicated -F16920 Hallucinogen use, unspecified with intoxication, uncomplicated -F16921 Hallucinogen use, unspecified with intoxication with delirium -F16929 Hallucinogen use, unspecified with intoxication, unspecified -F1694 Hallucinogen use, unspecified with hallucinogen-induced mood disorder -F16950 Hallucinogen use, unspecified with hallucinogen-induced psychotic disorder with delusions -F16951 Hallucinogen use, unspecified with hallucinogen-induced psychotic disorder with hallucinations -F16959 Hallucinogen use, unspecified with hallucinogen-induced psychotic disorder, unspecified -F16980 Hallucinogen use, unspecified with hallucinogen-induced anxiety disorder -F16983 Hallucinogen use, unspecified with hallucinogen persisting perception disorder (flashbacks) -F16988 Hallucinogen use, unspecified with other hallucinogen-induced disorder -F1699 Hallucinogen use, unspecified with unspecified hallucinogen-induced disorder -F17200 Nicotine dependence, unspecified, uncomplicated -F17201 Nicotine dependence, unspecified, in remission -F17203 Nicotine dependence unspecified, with withdrawal -F17208 Nicotine dependence, unspecified, with other nicotine-induced disorders -F17209 Nicotine dependence, unspecified, with unspecified nicotine-induced disorders -F17210 Nicotine dependence, cigarettes, uncomplicated -F17211 Nicotine dependence, cigarettes, in remission -F17213 Nicotine dependence, cigarettes, with withdrawal -F17218 Nicotine dependence, cigarettes, with other nicotine-induced disorders -F17219 Nicotine dependence, cigarettes, with unspecified nicotine-induced disorders -F17220 Nicotine dependence, chewing tobacco, uncomplicated -F17221 Nicotine dependence, chewing tobacco, in remission -F17223 Nicotine dependence, chewing tobacco, with withdrawal -F17228 Nicotine dependence, chewing tobacco, with other nicotine-induced disorders -F17229 Nicotine dependence, chewing tobacco, with unspecified nicotine-induced disorders -F17290 Nicotine dependence, other tobacco product, uncomplicated -F17291 Nicotine dependence, other tobacco product, in remission -F17293 Nicotine dependence, other tobacco product, with withdrawal -F17298 Nicotine dependence, other tobacco product, with other nicotine-induced disorders -F17299 Nicotine dependence, other tobacco product, with unspecified nicotine-induced disorders -F1810 Inhalant abuse, uncomplicated -F18120 Inhalant abuse with intoxication, uncomplicated -F18121 Inhalant abuse with intoxication delirium -F18129 Inhalant abuse with intoxication, unspecified -F1814 Inhalant abuse with inhalant-induced mood disorder -F18150 Inhalant abuse with inhalant-induced psychotic disorder with delusions -F18151 Inhalant abuse with inhalant-induced psychotic disorder with hallucinations -F18159 Inhalant abuse with inhalant-induced psychotic disorder, unspecified -F1817 Inhalant abuse with inhalant-induced dementia -F18180 Inhalant abuse with inhalant-induced anxiety disorder -F18188 Inhalant abuse with other inhalant-induced disorder -F1819 Inhalant abuse with unspecified inhalant-induced disorder -F1820 Inhalant dependence, uncomplicated -F1821 Inhalant dependence, in remission -F18220 Inhalant dependence with intoxication, uncomplicated -F18221 Inhalant dependence with intoxication delirium -F18229 Inhalant dependence with intoxication, unspecified -F1824 Inhalant dependence with inhalant-induced mood disorder -F18250 Inhalant dependence with inhalant-induced psychotic disorder with delusions -F18251 Inhalant dependence with inhalant-induced psychotic disorder with hallucinations -F18259 Inhalant dependence with inhalant-induced psychotic disorder, unspecified -F1827 Inhalant dependence with inhalant-induced dementia -F18280 Inhalant dependence with inhalant-induced anxiety disorder -F18288 Inhalant dependence with other inhalant-induced disorder -F1829 Inhalant dependence with unspecified inhalant-induced disorder -F1890 Inhalant use, unspecified, uncomplicated -F18920 Inhalant use, unspecified with intoxication, uncomplicated -F18921 Inhalant use, unspecified with intoxication with delirium -F18929 Inhalant use, unspecified with intoxication, unspecified -F1894 Inhalant use, unspecified with inhalant-induced mood disorder -F18950 Inhalant use, unspecified with inhalant-induced psychotic disorder with delusions -F18951 Inhalant use, unspecified with inhalant-induced psychotic disorder with hallucinations -F18959 Inhalant use, unspecified with inhalant-induced psychotic disorder, unspecified -F1897 Inhalant use, unspecified with inhalant-induced persisting dementia -F18980 Inhalant use, unspecified with inhalant-induced anxiety disorder -F18988 Inhalant use, unspecified with other inhalant-induced disorder -F1899 Inhalant use, unspecified with unspecified inhalant-induced disorder -F1910 Other psychoactive substance abuse, uncomplicated -F19120 Other psychoactive substance abuse with intoxication, uncomplicated -F19121 Other psychoactive substance abuse with intoxication delirium -F19122 Other psychoactive substance abuse with intoxication with perceptual disturbances -F19129 Other psychoactive substance abuse with intoxication, unspecified -F1914 Other psychoactive substance abuse with psychoactive substance-induced mood disorder -F19150 Other psychoactive substance abuse with psychoactive substance-induced psychotic disorder with delusions -F19151 Other psychoactive substance abuse with psychoactive substance-induced psychotic disorder with hallucinations -F19159 Other psychoactive substance abuse with psychoactive substance-induced psychotic disorder, unspecified -F1916 Other psychoactive substance abuse with psychoactive substance-induced persisting amnestic disorder -F1917 Other psychoactive substance abuse with psychoactive substance-induced persisting dementia -F19180 Other psychoactive substance abuse with psychoactive substance-induced anxiety disorder -F19181 Other psychoactive substance abuse with psychoactive substance-induced sexual dysfunction -F19182 Other psychoactive substance abuse with psychoactive substance-induced sleep disorder -F19188 Other psychoactive substance abuse with other psychoactive substance-induced disorder -F1919 Other psychoactive substance abuse with unspecified psychoactive substance-induced disorder -F1920 Other psychoactive substance dependence, uncomplicated -F1921 Other psychoactive substance dependence, in remission -F19220 Other psychoactive substance dependence with intoxication, uncomplicated -F19221 Other psychoactive substance dependence with intoxication delirium -F19222 Other psychoactive substance dependence with intoxication with perceptual disturbance -F19229 Other psychoactive substance dependence with intoxication, unspecified -F19230 Other psychoactive substance dependence with withdrawal, uncomplicated -F19231 Other psychoactive substance dependence with withdrawal delirium -F19232 Other psychoactive substance dependence with withdrawal with perceptual disturbance -F19239 Other psychoactive substance dependence with withdrawal, unspecified -F1924 Other psychoactive substance dependence with psychoactive substance-induced mood disorder -F19250 Other psychoactive substance dependence with psychoactive substance-induced psychotic disorder with delusions -F19251 Other psychoactive substance dependence with psychoactive substance-induced psychotic disorder with hallucinations -F19259 Other psychoactive substance dependence with psychoactive substance-induced psychotic disorder, unspecified -F1926 Other psychoactive substance dependence with psychoactive substance-induced persisting amnestic disorder -F1927 Other psychoactive substance dependence with psychoactive substance-induced persisting dementia -F19280 Other psychoactive substance dependence with psychoactive substance-induced anxiety disorder -F19281 Other psychoactive substance dependence with psychoactive substance-induced sexual dysfunction -F19282 Other psychoactive substance dependence with psychoactive substance-induced sleep disorder -F19288 Other psychoactive substance dependence with other psychoactive substance-induced disorder -F1929 Other psychoactive substance dependence with unspecified psychoactive substance-induced disorder -F1990 Other psychoactive substance use, unspecified, uncomplicated -F19920 Other psychoactive substance use, unspecified with intoxication, uncomplicated -F19921 Other psychoactive substance use, unspecified with intoxication with delirium -F19922 Other psychoactive substance use, unspecified with intoxication with perceptual disturbance -F19929 Other psychoactive substance use, unspecified with intoxication, unspecified -F19930 Other psychoactive substance use, unspecified with withdrawal, uncomplicated -F19931 Other psychoactive substance use, unspecified with withdrawal delirium -F19932 Other psychoactive substance use, unspecified with withdrawal with perceptual disturbance -F19939 Other psychoactive substance use, unspecified with withdrawal, unspecified -F1994 Other psychoactive substance use, unspecified with psychoactive substance-induced mood disorder -F19950 Other psychoactive substance use, unspecified with psychoactive substance-induced psychotic disorder with delusions -F19951 Other psychoactive substance use, unspecified with psychoactive substance-induced psychotic disorder with hallucinations -F19959 Other psychoactive substance use, unspecified with psychoactive substance-induced psychotic disorder, unspecified -F1996 Other psychoactive substance use, unspecified with psychoactive substance-induced persisting amnestic disorder -F1997 Other psychoactive substance use, unspecified with psychoactive substance-induced persisting dementia -F19980 Other psychoactive substance use, unspecified with psychoactive substance-induced anxiety disorder -F19981 Other psychoactive substance use, unspecified with psychoactive substance-induced sexual dysfunction -F19982 Other psychoactive substance use, unspecified with psychoactive substance-induced sleep disorder -F19988 Other psychoactive substance use, unspecified with other psychoactive substance-induced disorder -F1999 Other psychoactive substance use, unspecified with unspecified psychoactive substance-induced disorder -F200 Paranoid schizophrenia -F201 Disorganized schizophrenia -F202 Catatonic schizophrenia -F203 Undifferentiated schizophrenia -F205 Residual schizophrenia -F2081 Schizophreniform disorder -F2089 Other schizophrenia -F209 Schizophrenia, unspecified -F21 Schizotypal disorder -F22 Delusional disorders -F23 Brief psychotic disorder -F24 Shared psychotic disorder -F250 Schizoaffective disorder, bipolar type -F251 Schizoaffective disorder, depressive type -F258 Other schizoaffective disorders -F259 Schizoaffective disorder, unspecified -F28 Other psychotic disorder not due to a substance or known physiological condition -F29 Unspecified psychosis not due to a substance or known physiological condition -F3010 Manic episode without psychotic symptoms, unspecified -F3011 Manic episode without psychotic symptoms, mild -F3012 Manic episode without psychotic symptoms, moderate -F3013 Manic episode, severe, without psychotic symptoms -F302 Manic episode, severe with psychotic symptoms -F303 Manic episode in partial remission -F304 Manic episode in full remission -F308 Other manic episodes -F309 Manic episode, unspecified -F310 Bipolar disorder, current episode hypomanic -F3110 Bipolar disorder, current episode manic without psychotic features, unspecified -F3111 Bipolar disorder, current episode manic without psychotic features, mild -F3112 Bipolar disorder, current episode manic without psychotic features, moderate -F3113 Bipolar disorder, current episode manic without psychotic features, severe -F312 Bipolar disorder, current episode manic severe with psychotic features -F3130 Bipolar disorder, current episode depressed, mild or moderate severity, unspecified -F3131 Bipolar disorder, current episode depressed, mild -F3132 Bipolar disorder, current episode depressed, moderate -F314 Bipolar disorder, current episode depressed, severe, without psychotic features -F315 Bipolar disorder, current episode depressed, severe, with psychotic features -F3160 Bipolar disorder, current episode mixed, unspecified -F3161 Bipolar disorder, current episode mixed, mild -F3162 Bipolar disorder, current episode mixed, moderate -F3163 Bipolar disorder, current episode mixed, severe, without psychotic features -F3164 Bipolar disorder, current episode mixed, severe, with psychotic features -F3170 Bipolar disorder, currently in remission, most recent episode unspecified -F3171 Bipolar disorder, in partial remission, most recent episode hypomanic -F3172 Bipolar disorder, in full remission, most recent episode hypomanic -F3173 Bipolar disorder, in partial remission, most recent episode manic -F3174 Bipolar disorder, in full remission, most recent episode manic -F3175 Bipolar disorder, in partial remission, most recent episode depressed -F3176 Bipolar disorder, in full remission, most recent episode depressed -F3177 Bipolar disorder, in partial remission, most recent episode mixed -F3178 Bipolar disorder, in full remission, most recent episode mixed -F3181 Bipolar II disorder -F3189 Other bipolar disorder -F319 Bipolar disorder, unspecified -F320 Major depressive disorder, single episode, mild -F321 Major depressive disorder, single episode, moderate -F322 Major depressive disorder, single episode, severe without psychotic features -F323 Major depressive disorder, single episode, severe with psychotic features -F324 Major depressive disorder, single episode, in partial remission -F325 Major depressive disorder, single episode, in full remission -F328 Other depressive episodes -F329 Major depressive disorder, single episode, unspecified -F330 Major depressive disorder, recurrent, mild -F331 Major depressive disorder, recurrent, moderate -F332 Major depressive disorder, recurrent severe without psychotic features -F333 Major depressive disorder, recurrent, severe with psychotic symptoms -F3340 Major depressive disorder, recurrent, in remission, unspecified -F3341 Major depressive disorder, recurrent, in partial remission -F3342 Major depressive disorder, recurrent, in full remission -F338 Other recurrent depressive disorders -F339 Major depressive disorder, recurrent, unspecified -F340 Cyclothymic disorder -F341 Dysthymic disorder -F348 Other persistent mood [affective] disorders -F349 Persistent mood [affective] disorder, unspecified -F39 Unspecified mood [affective] disorder -F4000 Agoraphobia, unspecified -F4001 Agoraphobia with panic disorder -F4002 Agoraphobia without panic disorder -F4010 Social phobia, unspecified -F4011 Social phobia, generalized -F40210 Arachnophobia -F40218 Other animal type phobia -F40220 Fear of thunderstorms -F40228 Other natural environment type phobia -F40230 Fear of blood -F40231 Fear of injections and transfusions -F40232 Fear of other medical care -F40233 Fear of injury -F40240 Claustrophobia -F40241 Acrophobia -F40242 Fear of bridges -F40243 Fear of flying -F40248 Other situational type phobia -F40290 Androphobia -F40291 Gynephobia -F40298 Other specified phobia -F408 Other phobic anxiety disorders -F409 Phobic anxiety disorder, unspecified -F410 Panic disorder [episodic paroxysmal anxiety] without agoraphobia -F411 Generalized anxiety disorder -F413 Other mixed anxiety disorders -F418 Other specified anxiety disorders -F419 Anxiety disorder, unspecified -F42 Obsessive-compulsive disorder -F430 Acute stress reaction -F4310 Post-traumatic stress disorder, unspecified -F4311 Post-traumatic stress disorder, acute -F4312 Post-traumatic stress disorder, chronic -F4320 Adjustment disorder, unspecified -F4321 Adjustment disorder with depressed mood -F4322 Adjustment disorder with anxiety -F4323 Adjustment disorder with mixed anxiety and depressed mood -F4324 Adjustment disorder with disturbance of conduct -F4325 Adjustment disorder with mixed disturbance of emotions and conduct -F4329 Adjustment disorder with other symptoms -F438 Other reactions to severe stress -F439 Reaction to severe stress, unspecified -F440 Dissociative amnesia -F441 Dissociative fugue -F442 Dissociative stupor -F444 Conversion disorder with motor symptom or deficit -F445 Conversion disorder with seizures or convulsions -F446 Conversion disorder with sensory symptom or deficit -F447 Conversion disorder with mixed symptom presentation -F4481 Dissociative identity disorder -F4489 Other dissociative and conversion disorders -F449 Dissociative and conversion disorder, unspecified -F450 Somatization disorder -F451 Undifferentiated somatoform disorder -F4520 Hypochondriacal disorder, unspecified -F4521 Hypochondriasis -F4522 Body dysmorphic disorder -F4529 Other hypochondriacal disorders -F4541 Pain disorder exclusively related to psychological factors -F4542 Pain disorder with related psychological factors -F458 Other somatoform disorders -F459 Somatoform disorder, unspecified -F481 Depersonalization-derealization syndrome -F482 Pseudobulbar affect -F488 Other specified nonpsychotic mental disorders -F489 Nonpsychotic mental disorder, unspecified -F5000 Anorexia nervosa, unspecified -F5001 Anorexia nervosa, restricting type -F5002 Anorexia nervosa, binge eating/purging type -F502 Bulimia nervosa -F508 Other eating disorders -F509 Eating disorder, unspecified -F5101 Primary insomnia -F5102 Adjustment insomnia -F5103 Paradoxical insomnia -F5104 Psychophysiologic insomnia -F5105 Insomnia due to other mental disorder -F5109 Other insomnia not due to a substance or known physiological condition -F5111 Primary hypersomnia -F5112 Insufficient sleep syndrome -F5113 Hypersomnia due to other mental disorder -F5119 Other hypersomnia not due to a substance or known physiological condition -F513 Sleepwalking [somnambulism] -F514 Sleep terrors [night terrors] -F515 Nightmare disorder -F518 Other sleep disorders not due to a substance or known physiological condition -F519 Sleep disorder not due to a substance or known physiological condition, unspecified -F520 Hypoactive sexual desire disorder -F521 Sexual aversion disorder -F5221 Male erectile disorder -F5222 Female sexual arousal disorder -F5231 Female orgasmic disorder -F5232 Male orgasmic disorder -F524 Premature ejaculation -F525 Vaginismus not due to a substance or known physiological condition -F526 Dyspareunia not due to a substance or known physiological condition -F528 Other sexual dysfunction not due to a substance or known physiological condition -F529 Unspecified sexual dysfunction not due to a substance or known physiological condition -F53 Puerperal psychosis -F54 Psychological and behavioral factors associated with disorders or diseases classified elsewhere -F550 Abuse of antacids -F551 Abuse of herbal or folk remedies -F552 Abuse of laxatives -F553 Abuse of steroids or hormones -F554 Abuse of vitamins -F558 Abuse of other non-psychoactive substances -F59 Unspecified behavioral syndromes associated with physiological disturbances and physical factors -F600 Paranoid personality disorder -F601 Schizoid personality disorder -F602 Antisocial personality disorder -F603 Borderline personality disorder -F604 Histrionic personality disorder -F605 Obsessive-compulsive personality disorder -F606 Avoidant personality disorder -F607 Dependent personality disorder -F6081 Narcissistic personality disorder -F6089 Other specific personality disorders -F609 Personality disorder, unspecified -F630 Pathological gambling -F631 Pyromania -F632 Kleptomania -F633 Trichotillomania -F6381 Intermittent explosive disorder -F6389 Other impulse disorders -F639 Impulse disorder, unspecified -F641 Gender identity disorder in adolescence and adulthood -F642 Gender identity disorder of childhood -F648 Other gender identity disorders -F649 Gender identity disorder, unspecified -F650 Fetishism -F651 Transvestic fetishism -F652 Exhibitionism -F653 Voyeurism -F654 Pedophilia -F6550 Sadomasochism, unspecified -F6551 Sexual masochism -F6552 Sexual sadism -F6581 Frotteurism -F6589 Other paraphilias -F659 Paraphilia, unspecified -F66 Other sexual disorders -F6810 Factitious disorder, unspecified -F6811 Factitious disorder with predominantly psychological signs and symptoms -F6812 Factitious disorder with predominantly physical signs and symptoms -F6813 Factitious disorder with combined psychological and physical signs and symptoms -F688 Other specified disorders of adult personality and behavior -F69 Unspecified disorder of adult personality and behavior -F70 Mild intellectual disabilities -F71 Moderate intellectual disabilities -F72 Severe intellectual disabilities -F73 Profound intellectual disabilities -F78 Other intellectual disabilities -F79 Unspecified intellectual disabilities -F800 Phonological disorder -F801 Expressive language disorder -F802 Mixed receptive-expressive language disorder -F804 Speech and language development delay due to hearing loss -F8081 Childhood onset fluency disorder -F8089 Other developmental disorders of speech and language -F809 Developmental disorder of speech and language, unspecified -F810 Specific reading disorder -F812 Mathematics disorder -F8181 Disorder of written expression -F8189 Other developmental disorders of scholastic skills -F819 Developmental disorder of scholastic skills, unspecified -F82 Specific developmental disorder of motor function -F840 Autistic disorder -F842 Rett's syndrome -F843 Other childhood disintegrative disorder -F845 Asperger's syndrome -F848 Other pervasive developmental disorders -F849 Pervasive developmental disorder, unspecified -F88 Other disorders of psychological development -F89 Unspecified disorder of psychological development -F900 Attention-deficit hyperactivity disorder, predominantly inattentive type -F901 Attention-deficit hyperactivity disorder, predominantly hyperactive type -F902 Attention-deficit hyperactivity disorder, combined type -F908 Attention-deficit hyperactivity disorder, other type -F909 Attention-deficit hyperactivity disorder, unspecified type -F910 Conduct disorder confined to family context -F911 Conduct disorder, childhood-onset type -F912 Conduct disorder, adolescent-onset type -F913 Oppositional defiant disorder -F918 Other conduct disorders -F919 Conduct disorder, unspecified -F930 Separation anxiety disorder of childhood -F938 Other childhood emotional disorders -F939 Childhood emotional disorder, unspecified -F940 Selective mutism -F941 Reactive attachment disorder of childhood -F942 Disinhibited attachment disorder of childhood -F948 Other childhood disorders of social functioning -F949 Childhood disorder of social functioning, unspecified -F950 Transient tic disorder -F951 Chronic motor or vocal tic disorder -F952 Tourette's disorder -F958 Other tic disorders -F959 Tic disorder, unspecified -F980 Enuresis not due to a substance or known physiological condition -F981 Encopresis not due to a substance or known physiological condition -F9821 Rumination disorder of infancy -F9829 Other feeding disorders of infancy and early childhood -F983 Pica of infancy and childhood -F984 Stereotyped movement disorders -F985 Adult onset fluency disorder -F988 Other specified behavioral and emotional disorders with onset usually occurring in childhood and adolescence -F989 Unspecified behavioral and emotional disorders with onset usually occurring in childhood and adolescence -F99 Mental disorder, not otherwise specified -G000 Hemophilus meningitis -G001 Pneumococcal meningitis -G002 Streptococcal meningitis -G003 Staphylococcal meningitis -G008 Other bacterial meningitis -G009 Bacterial meningitis, unspecified -G01 Meningitis in bacterial diseases classified elsewhere -G02 Meningitis in other infectious and parasitic diseases classified elsewhere -G030 Nonpyogenic meningitis -G031 Chronic meningitis -G032 Benign recurrent meningitis [Mollaret] -G038 Meningitis due to other specified causes -G039 Meningitis, unspecified -G0400 Acute disseminated encephalitis and encephalomyelitis, unspecified -G0401 Postinfectious acute disseminated encephalitis and encephalomyelitis (postinfectious ADEM) -G0402 Postimmunization acute disseminated encephalitis, myelitis and encephalomyelitis -G041 Tropical spastic paraplegia -G042 Bacterial meningoencephalitis and meningomyelitis, not elsewhere classified -G0430 Acute necrotizing hemorrhagic encephalopathy, unspecified -G0431 Postinfectious acute necrotizing hemorrhagic encephalopathy -G0432 Postimmunization acute necrotizing hemorrhagic encephalopathy -G0439 Other acute necrotizing hemorrhagic encephalopathy -G0481 Other encephalitis and encephalomyelitis -G0489 Other myelitis -G0490 Encephalitis and encephalomyelitis, unspecified -G0491 Myelitis, unspecified -G053 Encephalitis and encephalomyelitis in diseases classified elsewhere -G054 Myelitis in diseases classified elsewhere -G060 Intracranial abscess and granuloma -G061 Intraspinal abscess and granuloma -G062 Extradural and subdural abscess, unspecified -G07 Intracranial and intraspinal abscess and granuloma in diseases classified elsewhere -G08 Intracranial and intraspinal phlebitis and thrombophlebitis -G09 Sequelae of inflammatory diseases of central nervous system -G10 Huntington's disease -G110 Congenital nonprogressive ataxia -G111 Early-onset cerebellar ataxia -G112 Late-onset cerebellar ataxia -G113 Cerebellar ataxia with defective DNA repair -G114 Hereditary spastic paraplegia -G118 Other hereditary ataxias -G119 Hereditary ataxia, unspecified -G120 Infantile spinal muscular atrophy, type I [Werdnig-Hoffman] -G121 Other inherited spinal muscular atrophy -G1220 Motor neuron disease, unspecified -G1221 Amyotrophic lateral sclerosis -G1222 Progressive bulbar palsy -G1229 Other motor neuron disease -G128 Other spinal muscular atrophies and related syndromes -G129 Spinal muscular atrophy, unspecified -G130 Paraneoplastic neuromyopathy and neuropathy -G131 Other systemic atrophy primarily affecting central nervous system in neoplastic disease -G132 Systemic atrophy primarily affecting the central nervous system in myxedema -G138 Systemic atrophy primarily affecting central nervous system in other diseases classified elsewhere -G14 Postpolio syndrome -G20 Parkinson's disease -G210 Malignant neuroleptic syndrome -G2111 Neuroleptic induced parkinsonism -G2119 Other drug induced secondary parkinsonism -G212 Secondary parkinsonism due to other external agents -G213 Postencephalitic parkinsonism -G214 Vascular parkinsonism -G218 Other secondary parkinsonism -G219 Secondary parkinsonism, unspecified -G230 Hallervorden-Spatz disease -G231 Progressive supranuclear ophthalmoplegia [Steele-Richardson-Olszewski] -G232 Striatonigral degeneration -G238 Other specified degenerative diseases of basal ganglia -G239 Degenerative disease of basal ganglia, unspecified -G2401 Drug induced subacute dyskinesia -G2402 Drug induced acute dystonia -G2409 Other drug induced dystonia -G241 Genetic torsion dystonia -G242 Idiopathic nonfamilial dystonia -G243 Spasmodic torticollis -G244 Idiopathic orofacial dystonia -G245 Blepharospasm -G248 Other dystonia -G249 Dystonia, unspecified -G250 Essential tremor -G251 Drug-induced tremor -G252 Other specified forms of tremor -G253 Myoclonus -G254 Drug-induced chorea -G255 Other chorea -G2561 Drug induced tics -G2569 Other tics of organic origin -G2570 Drug induced movement disorder, unspecified -G2571 Drug induced akathisia -G2579 Other drug induced movement disorders -G2581 Restless legs syndrome -G2582 Stiff-man syndrome -G2583 Benign shuddering attacks -G2589 Other specified extrapyramidal and movement disorders -G259 Extrapyramidal and movement disorder, unspecified -G26 Extrapyramidal and movement disorders in diseases classified elsewhere -G300 Alzheimer's disease with early onset -G301 Alzheimer's disease with late onset -G308 Other Alzheimer's disease -G309 Alzheimer's disease, unspecified -G3101 Pick's disease -G3109 Other frontotemporal dementia -G311 Senile degeneration of brain, not elsewhere classified -G312 Degeneration of nervous system due to alcohol -G3181 Alpers disease -G3182 Leigh's disease -G3183 Dementia with Lewy bodies -G3184 Mild cognitive impairment, so stated -G3185 Corticobasal degeneration -G3189 Other specified degenerative diseases of nervous system -G319 Degenerative disease of nervous system, unspecified -G320 Subacute combined degeneration of spinal cord in diseases classified elsewhere -G3281 Cerebellar ataxia in diseases classified elsewhere -G3289 Other specified degenerative disorders of nervous system in diseases classified elsewhere -G35 Multiple sclerosis -G360 Neuromyelitis optica [Devic] -G361 Acute and subacute hemorrhagic leukoencephalitis [Hurst] -G368 Other specified acute disseminated demyelination -G369 Acute disseminated demyelination, unspecified -G370 Diffuse sclerosis of central nervous system -G371 Central demyelination of corpus callosum -G372 Central pontine myelinolysis -G373 Acute transverse myelitis in demyelinating disease of central nervous system -G374 Subacute necrotizing myelitis of central nervous system -G375 Concentric sclerosis [Balo] of central nervous system -G378 Other specified demyelinating diseases of central nervous system -G379 Demyelinating disease of central nervous system, unspecified -G40001 Localization-related (focal) (partial) idiopathic epilepsy and epileptic syndromes with seizures of localized onset, not intractable, with status epilepticus -G40009 Localization-related (focal) (partial) idiopathic epilepsy and epileptic syndromes with seizures of localized onset, not intractable, without status epilepticus -G40011 Localization-related (focal) (partial) idiopathic epilepsy and epileptic syndromes with seizures of localized onset, intractable, with status epilepticus -G40019 Localization-related (focal) (partial) idiopathic epilepsy and epileptic syndromes with seizures of localized onset, intractable, without status epilepticus -G40101 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with simple partial seizures, not intractable, with status epilepticus -G40109 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with simple partial seizures, not intractable, without status epilepticus -G40111 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with simple partial seizures, intractable, with status epilepticus -G40119 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with simple partial seizures, intractable, without status epilepticus -G40201 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with complex partial seizures, not intractable, with status epilepticus -G40209 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with complex partial seizures, not intractable, without status epilepticus -G40211 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with complex partial seizures, intractable, with status epilepticus -G40219 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with complex partial seizures, intractable, without status epilepticus -G40301 Generalized idiopathic epilepsy and epileptic syndromes, not intractable, with status epilepticus -G40309 Generalized idiopathic epilepsy and epileptic syndromes, not intractable, without status epilepticus -G40311 Generalized idiopathic epilepsy and epileptic syndromes, intractable, with status epilepticus -G40319 Generalized idiopathic epilepsy and epileptic syndromes, intractable, without status epilepticus -G40A01 Absence epileptic syndrome, not intractable, with status epilepticus -G40A09 Absence epileptic syndrome, not intractable, without status epilepticus -G40A11 Absence epileptic syndrome, intractable, with status epilepticus -G40A19 Absence epileptic syndrome, intractable, without status epilepticus -G40B01 Juvenile myoclonic epilepsy, not intractable, with status epilepticus -G40B09 Juvenile myoclonic epilepsy, not intractable, without status epilepticus -G40B11 Juvenile myoclonic epilepsy, intractable, with status epilepticus -G40B19 Juvenile myoclonic epilepsy, intractable, without status epilepticus -G40401 Other generalized epilepsy and epileptic syndromes, not intractable, with status epilepticus -G40409 Other generalized epilepsy and epileptic syndromes, not intractable, without status epilepticus -G40411 Other generalized epilepsy and epileptic syndromes, intractable, with status epilepticus -G40419 Other generalized epilepsy and epileptic syndromes, intractable, without status epilepticus -G40501 Epileptic seizures related to external causes, not intractable, with status epilepticus -G40509 Epileptic seizures related to external causes, not intractable, without status epilepticus -G40801 Other epilepsy, not intractable, with status epilepticus -G40802 Other epilepsy, not intractable, without status epilepticus -G40803 Other epilepsy, intractable, with status epilepticus -G40804 Other epilepsy, intractable, without status epilepticus -G40811 Lennox-Gastaut syndrome, not intractable, with status epilepticus -G40812 Lennox-Gastaut syndrome, not intractable, without status epilepticus -G40813 Lennox-Gastaut syndrome, intractable, with status epilepticus -G40814 Lennox-Gastaut syndrome, intractable, without status epilepticus -G40821 Epileptic spasms, not intractable, with status epilepticus -G40822 Epileptic spasms, not intractable, without status epilepticus -G40823 Epileptic spasms, intractable, with status epilepticus -G40824 Epileptic spasms, intractable, without status epilepticus -G4089 Other seizures -G40901 Epilepsy, unspecified, not intractable, with status epilepticus -G40909 Epilepsy, unspecified, not intractable, without status epilepticus -G40911 Epilepsy, unspecified, intractable, with status epilepticus -G40919 Epilepsy, unspecified, intractable, without status epilepticus -G43001 Migraine without aura, not intractable, with status migrainosus -G43009 Migraine without aura, not intractable, without status migrainosus -G43011 Migraine without aura, intractable, with status migrainosus -G43019 Migraine without aura, intractable, without status migrainosus -G43101 Migraine with aura, not intractable, with status migrainosus -G43109 Migraine with aura, not intractable, without status migrainosus -G43111 Migraine with aura, intractable, with status migrainosus -G43119 Migraine with aura, intractable, without status migrainosus -G43401 Hemiplegic migraine, not intractable, with status migrainosus -G43409 Hemiplegic migraine, not intractable, without status migrainosus -G43411 Hemiplegic migraine, intractable, with status migrainosus -G43419 Hemiplegic migraine, intractable, without status migrainosus -G43501 Persistent migraine aura without cerebral infarction, not intractable, with status migrainosus -G43509 Persistent migraine aura without cerebral infarction, not intractable, without status migrainosus -G43511 Persistent migraine aura without cerebral infarction, intractable, with status migrainosus -G43519 Persistent migraine aura without cerebral infarction, intractable, without status migrainosus -G43601 Persistent migraine aura with cerebral infarction, not intractable, with status migrainosus -G43609 Persistent migraine aura with cerebral infarction, not intractable, without status migrainosus -G43611 Persistent migraine aura with cerebral infarction, intractable, with status migrainosus -G43619 Persistent migraine aura with cerebral infarction, intractable, without status migrainosus -G43701 Chronic migraine without aura, not intractable, with status migrainosus -G43709 Chronic migraine without aura, not intractable, without status migrainosus -G43711 Chronic migraine without aura, intractable, with status migrainosus -G43719 Chronic migraine without aura, intractable, without status migrainosus -G43A0 Cyclical vomiting, not intractable -G43A1 Cyclical vomiting, intractable -G43B0 Ophthalmoplegic migraine, not intractable -G43B1 Ophthalmoplegic migraine, intractable -G43C0 Periodic headache syndromes in child or adult, not intractable -G43C1 Periodic headache syndromes in child or adult, intractable -G43D0 Abdominal migraine, not intractable -G43D1 Abdominal migraine, intractable -G43801 Other migraine, not intractable, with status migrainosus -G43809 Other migraine, not intractable, without status migrainosus -G43811 Other migraine, intractable, with status migrainosus -G43819 Other migraine, intractable, without status migrainosus -G43821 Menstrual migraine, not intractable, with status migrainosus -G43829 Menstrual migraine, not intractable, without status migrainosus -G43831 Menstrual migraine, intractable, with status migrainosus -G43839 Menstrual migraine, intractable, without status migrainosus -G43901 Migraine, unspecified, not intractable, with status migrainosus -G43909 Migraine, unspecified, not intractable, without status migrainosus -G43911 Migraine, unspecified, intractable, with status migrainosus -G43919 Migraine, unspecified, intractable, without status migrainosus -G44001 Cluster headache syndrome, unspecified, intractable -G44009 Cluster headache syndrome, unspecified, not intractable -G44011 Episodic cluster headache, intractable -G44019 Episodic cluster headache, not intractable -G44021 Chronic cluster headache, intractable -G44029 Chronic cluster headache, not intractable -G44031 Episodic paroxysmal hemicrania, intractable -G44039 Episodic paroxysmal hemicrania, not intractable -G44041 Chronic paroxysmal hemicrania, intractable -G44049 Chronic paroxysmal hemicrania, not intractable -G44051 Short lasting unilateral neuralgiform headache with conjunctival injection and tearing (SUNCT), intractable -G44059 Short lasting unilateral neuralgiform headache with conjunctival injection and tearing (SUNCT), not intractable -G44091 Other trigeminal autonomic cephalgias (TAC), intractable -G44099 Other trigeminal autonomic cephalgias (TAC), not intractable -G441 Vascular headache, not elsewhere classified -G44201 Tension-type headache, unspecified, intractable -G44209 Tension-type headache, unspecified, not intractable -G44211 Episodic tension-type headache, intractable -G44219 Episodic tension-type headache, not intractable -G44221 Chronic tension-type headache, intractable -G44229 Chronic tension-type headache, not intractable -G44301 Post-traumatic headache, unspecified, intractable -G44309 Post-traumatic headache, unspecified, not intractable -G44311 Acute post-traumatic headache, intractable -G44319 Acute post-traumatic headache, not intractable -G44321 Chronic post-traumatic headache, intractable -G44329 Chronic post-traumatic headache, not intractable -G4440 Drug-induced headache, not elsewhere classified, not intractable -G4441 Drug-induced headache, not elsewhere classified, intractable -G4451 Hemicrania continua -G4452 New daily persistent headache (NDPH) -G4453 Primary thunderclap headache -G4459 Other complicated headache syndrome -G4481 Hypnic headache -G4482 Headache associated with sexual activity -G4483 Primary cough headache -G4484 Primary exertional headache -G4485 Primary stabbing headache -G4489 Other headache syndrome -G450 Vertebro-basilar artery syndrome -G451 Carotid artery syndrome (hemispheric) -G452 Multiple and bilateral precerebral artery syndromes -G453 Amaurosis fugax -G454 Transient global amnesia -G458 Other transient cerebral ischemic attacks and related syndromes -G459 Transient cerebral ischemic attack, unspecified -G460 Middle cerebral artery syndrome -G461 Anterior cerebral artery syndrome -G462 Posterior cerebral artery syndrome -G463 Brain stem stroke syndrome -G464 Cerebellar stroke syndrome -G465 Pure motor lacunar syndrome -G466 Pure sensory lacunar syndrome -G467 Other lacunar syndromes -G468 Other vascular syndromes of brain in cerebrovascular diseases -G4700 Insomnia, unspecified -G4701 Insomnia due to medical condition -G4709 Other insomnia -G4710 Hypersomnia, unspecified -G4711 Idiopathic hypersomnia with long sleep time -G4712 Idiopathic hypersomnia without long sleep time -G4713 Recurrent hypersomnia -G4714 Hypersomnia due to medical condition -G4719 Other hypersomnia -G4720 Circadian rhythm sleep disorder, unspecified type -G4721 Circadian rhythm sleep disorder, delayed sleep phase type -G4722 Circadian rhythm sleep disorder, advanced sleep phase type -G4723 Circadian rhythm sleep disorder, irregular sleep wake type -G4724 Circadian rhythm sleep disorder, free running type -G4725 Circadian rhythm sleep disorder, jet lag type -G4726 Circadian rhythm sleep disorder, shift work type -G4727 Circadian rhythm sleep disorder in conditions classified elsewhere -G4729 Other circadian rhythm sleep disorder -G4730 Sleep apnea, unspecified -G4731 Primary central sleep apnea -G4732 High altitude periodic breathing -G4733 Obstructive sleep apnea (adult) (pediatric) -G4734 Idiopathic sleep related nonobstructive alveolar hypoventilation -G4735 Congenital central alveolar hypoventilation syndrome -G4736 Sleep related hypoventilation in conditions classified elsewhere -G4737 Central sleep apnea in conditions classified elsewhere -G4739 Other sleep apnea -G47411 Narcolepsy with cataplexy -G47419 Narcolepsy without cataplexy -G47421 Narcolepsy in conditions classified elsewhere with cataplexy -G47429 Narcolepsy in conditions classified elsewhere without cataplexy -G4750 Parasomnia, unspecified -G4751 Confusional arousals -G4752 REM sleep behavior disorder -G4753 Recurrent isolated sleep paralysis -G4754 Parasomnia in conditions classified elsewhere -G4759 Other parasomnia -G4761 Periodic limb movement disorder -G4762 Sleep related leg cramps -G4763 Sleep related bruxism -G4769 Other sleep related movement disorders -G478 Other sleep disorders -G479 Sleep disorder, unspecified -G500 Trigeminal neuralgia -G501 Atypical facial pain -G508 Other disorders of trigeminal nerve -G509 Disorder of trigeminal nerve, unspecified -G510 Bell's palsy -G511 Geniculate ganglionitis -G512 Melkersson's syndrome -G513 Clonic hemifacial spasm -G514 Facial myokymia -G518 Other disorders of facial nerve -G519 Disorder of facial nerve, unspecified -G520 Disorders of olfactory nerve -G521 Disorders of glossopharyngeal nerve -G522 Disorders of vagus nerve -G523 Disorders of hypoglossal nerve -G527 Disorders of multiple cranial nerves -G528 Disorders of other specified cranial nerves -G529 Cranial nerve disorder, unspecified -G53 Cranial nerve disorders in diseases classified elsewhere -G540 Brachial plexus disorders -G541 Lumbosacral plexus disorders -G542 Cervical root disorders, not elsewhere classified -G543 Thoracic root disorders, not elsewhere classified -G544 Lumbosacral root disorders, not elsewhere classified -G545 Neuralgic amyotrophy -G546 Phantom limb syndrome with pain -G547 Phantom limb syndrome without pain -G548 Other nerve root and plexus disorders -G549 Nerve root and plexus disorder, unspecified -G55 Nerve root and plexus compressions in diseases classified elsewhere -G5600 Carpal tunnel syndrome, unspecified upper limb -G5601 Carpal tunnel syndrome, right upper limb -G5602 Carpal tunnel syndrome, left upper limb -G5610 Other lesions of median nerve, unspecified upper limb -G5611 Other lesions of median nerve, right upper limb -G5612 Other lesions of median nerve, left upper limb -G5620 Lesion of ulnar nerve, unspecified upper limb -G5621 Lesion of ulnar nerve, right upper limb -G5622 Lesion of ulnar nerve, left upper limb -G5630 Lesion of radial nerve, unspecified upper limb -G5631 Lesion of radial nerve, right upper limb -G5632 Lesion of radial nerve, left upper limb -G5640 Causalgia of unspecified upper limb -G5641 Causalgia of right upper limb -G5642 Causalgia of left upper limb -G5680 Other specified mononeuropathies of unspecified upper limb -G5681 Other specified mononeuropathies of right upper limb -G5682 Other specified mononeuropathies of left upper limb -G5690 Unspecified mononeuropathy of unspecified upper limb -G5691 Unspecified mononeuropathy of right upper limb -G5692 Unspecified mononeuropathy of left upper limb -G5700 Lesion of sciatic nerve, unspecified lower limb -G5701 Lesion of sciatic nerve, right lower limb -G5702 Lesion of sciatic nerve, left lower limb -G5710 Meralgia paresthetica, unspecified lower limb -G5711 Meralgia paresthetica, right lower limb -G5712 Meralgia paresthetica, left lower limb -G5720 Lesion of femoral nerve, unspecified lower limb -G5721 Lesion of femoral nerve, right lower limb -G5722 Lesion of femoral nerve, left lower limb -G5730 Lesion of lateral popliteal nerve, unspecified lower limb -G5731 Lesion of lateral popliteal nerve, right lower limb -G5732 Lesion of lateral popliteal nerve, left lower limb -G5740 Lesion of medial popliteal nerve, unspecified lower limb -G5741 Lesion of medial popliteal nerve, right lower limb -G5742 Lesion of medial popliteal nerve, left lower limb -G5750 Tarsal tunnel syndrome, unspecified lower limb -G5751 Tarsal tunnel syndrome, right lower limb -G5752 Tarsal tunnel syndrome, left lower limb -G5760 Lesion of plantar nerve, unspecified lower limb -G5761 Lesion of plantar nerve, right lower limb -G5762 Lesion of plantar nerve, left lower limb -G5770 Causalgia of unspecified lower limb -G5771 Causalgia of right lower limb -G5772 Causalgia of left lower limb -G5780 Other specified mononeuropathies of unspecified lower limb -G5781 Other specified mononeuropathies of right lower limb -G5782 Other specified mononeuropathies of left lower limb -G5790 Unspecified mononeuropathy of unspecified lower limb -G5791 Unspecified mononeuropathy of right lower limb -G5792 Unspecified mononeuropathy of left lower limb -G580 Intercostal neuropathy -G587 Mononeuritis multiplex -G588 Other specified mononeuropathies -G589 Mononeuropathy, unspecified -G59 Mononeuropathy in diseases classified elsewhere -G600 Hereditary motor and sensory neuropathy -G601 Refsum's disease -G602 Neuropathy in association with hereditary ataxia -G603 Idiopathic progressive neuropathy -G608 Other hereditary and idiopathic neuropathies -G609 Hereditary and idiopathic neuropathy, unspecified -G610 Guillain-Barre syndrome -G611 Serum neuropathy -G6181 Chronic inflammatory demyelinating polyneuritis -G6189 Other inflammatory polyneuropathies -G619 Inflammatory polyneuropathy, unspecified -G620 Drug-induced polyneuropathy -G621 Alcoholic polyneuropathy -G622 Polyneuropathy due to other toxic agents -G6281 Critical illness polyneuropathy -G6282 Radiation-induced polyneuropathy -G6289 Other specified polyneuropathies -G629 Polyneuropathy, unspecified -G63 Polyneuropathy in diseases classified elsewhere -G64 Other disorders of peripheral nervous system -G650 Sequelae of Guillain-Barre syndrome -G651 Sequelae of other inflammatory polyneuropathy -G652 Sequelae of toxic polyneuropathy -G7000 Myasthenia gravis without (acute) exacerbation -G7001 Myasthenia gravis with (acute) exacerbation -G701 Toxic myoneural disorders -G702 Congenital and developmental myasthenia -G7080 Lambert-Eaton syndrome, unspecified -G7081 Lambert-Eaton syndrome in disease classified elsewhere -G7089 Other specified myoneural disorders -G709 Myoneural disorder, unspecified -G710 Muscular dystrophy -G7111 Myotonic muscular dystrophy -G7112 Myotonia congenita -G7113 Myotonic chondrodystrophy -G7114 Drug induced myotonia -G7119 Other specified myotonic disorders -G712 Congenital myopathies -G713 Mitochondrial myopathy, not elsewhere classified -G718 Other primary disorders of muscles -G719 Primary disorder of muscle, unspecified -G720 Drug-induced myopathy -G721 Alcoholic myopathy -G722 Myopathy due to other toxic agents -G723 Periodic paralysis -G7241 Inclusion body myositis [IBM] -G7249 Other inflammatory and immune myopathies, not elsewhere classified -G7281 Critical illness myopathy -G7289 Other specified myopathies -G729 Myopathy, unspecified -G731 Lambert-Eaton syndrome in neoplastic disease -G733 Myasthenic syndromes in other diseases classified elsewhere -G737 Myopathy in diseases classified elsewhere -G800 Spastic quadriplegic cerebral palsy -G801 Spastic diplegic cerebral palsy -G802 Spastic hemiplegic cerebral palsy -G803 Athetoid cerebral palsy -G804 Ataxic cerebral palsy -G808 Other cerebral palsy -G809 Cerebral palsy, unspecified -G8100 Flaccid hemiplegia affecting unspecified side -G8101 Flaccid hemiplegia affecting right dominant side -G8102 Flaccid hemiplegia affecting left dominant side -G8103 Flaccid hemiplegia affecting right nondominant side -G8104 Flaccid hemiplegia affecting left nondominant side -G8110 Spastic hemiplegia affecting unspecified side -G8111 Spastic hemiplegia affecting right dominant side -G8112 Spastic hemiplegia affecting left dominant side -G8113 Spastic hemiplegia affecting right nondominant side -G8114 Spastic hemiplegia affecting left nondominant side -G8190 Hemiplegia, unspecified affecting unspecified side -G8191 Hemiplegia, unspecified affecting right dominant side -G8192 Hemiplegia, unspecified affecting left dominant side -G8193 Hemiplegia, unspecified affecting right nondominant side -G8194 Hemiplegia, unspecified affecting left nondominant side -G8220 Paraplegia, unspecified -G8221 Paraplegia, complete -G8222 Paraplegia, incomplete -G8250 Quadriplegia, unspecified -G8251 Quadriplegia, C1-C4 complete -G8252 Quadriplegia, C1-C4 incomplete -G8253 Quadriplegia, C5-C7 complete -G8254 Quadriplegia, C5-C7 incomplete -G830 Diplegia of upper limbs -G8310 Monoplegia of lower limb affecting unspecified side -G8311 Monoplegia of lower limb affecting right dominant side -G8312 Monoplegia of lower limb affecting left dominant side -G8313 Monoplegia of lower limb affecting right nondominant side -G8314 Monoplegia of lower limb affecting left nondominant side -G8320 Monoplegia of upper limb affecting unspecified side -G8321 Monoplegia of upper limb affecting right dominant side -G8322 Monoplegia of upper limb affecting left dominant side -G8323 Monoplegia of upper limb affecting right nondominant side -G8324 Monoplegia of upper limb affecting left nondominant side -G8330 Monoplegia, unspecified affecting unspecified side -G8331 Monoplegia, unspecified affecting right dominant side -G8332 Monoplegia, unspecified affecting left dominant side -G8333 Monoplegia, unspecified affecting right nondominant side -G8334 Monoplegia, unspecified affecting left nondominant side -G834 Cauda equina syndrome -G835 Locked-in state -G8381 Brown-Sequard syndrome -G8382 Anterior cord syndrome -G8383 Posterior cord syndrome -G8384 Todd's paralysis (postepileptic) -G8389 Other specified paralytic syndromes -G839 Paralytic syndrome, unspecified -G890 Central pain syndrome -G8911 Acute pain due to trauma -G8912 Acute post-thoracotomy pain -G8918 Other acute postprocedural pain -G8921 Chronic pain due to trauma -G8922 Chronic post-thoracotomy pain -G8928 Other chronic postprocedural pain -G8929 Other chronic pain -G893 Neoplasm related pain (acute) (chronic) -G894 Chronic pain syndrome -G9001 Carotid sinus syncope -G9009 Other idiopathic peripheral autonomic neuropathy -G901 Familial dysautonomia [Riley-Day] -G902 Horner's syndrome -G903 Multi-system degeneration of the autonomic nervous system -G904 Autonomic dysreflexia -G9050 Complex regional pain syndrome I, unspecified -G90511 Complex regional pain syndrome I of right upper limb -G90512 Complex regional pain syndrome I of left upper limb -G90513 Complex regional pain syndrome I of upper limb, bilateral -G90519 Complex regional pain syndrome I of unspecified upper limb -G90521 Complex regional pain syndrome I of right lower limb -G90522 Complex regional pain syndrome I of left lower limb -G90523 Complex regional pain syndrome I of lower limb, bilateral -G90529 Complex regional pain syndrome I of unspecified lower limb -G9059 Complex regional pain syndrome I of other specified site -G908 Other disorders of autonomic nervous system -G909 Disorder of the autonomic nervous system, unspecified -G910 Communicating hydrocephalus -G911 Obstructive hydrocephalus -G912 (Idiopathic) normal pressure hydrocephalus -G913 Post-traumatic hydrocephalus, unspecified -G914 Hydrocephalus in diseases classified elsewhere -G918 Other hydrocephalus -G919 Hydrocephalus, unspecified -G92 Toxic encephalopathy -G930 Cerebral cysts -G931 Anoxic brain damage, not elsewhere classified -G932 Benign intracranial hypertension -G933 Postviral fatigue syndrome -G9340 Encephalopathy, unspecified -G9341 Metabolic encephalopathy -G9349 Other encephalopathy -G935 Compression of brain -G936 Cerebral edema -G937 Reye's syndrome -G9381 Temporal sclerosis -G9382 Brain death -G9389 Other specified disorders of brain -G939 Disorder of brain, unspecified -G94 Other disorders of brain in diseases classified elsewhere -G950 Syringomyelia and syringobulbia -G9511 Acute infarction of spinal cord (embolic) (nonembolic) -G9519 Other vascular myelopathies -G9520 Unspecified cord compression -G9529 Other cord compression -G9581 Conus medullaris syndrome -G9589 Other specified diseases of spinal cord -G959 Disease of spinal cord, unspecified -G960 Cerebrospinal fluid leak -G9611 Dural tear -G9612 Meningeal adhesions (cerebral) (spinal) -G9619 Other disorders of meninges, not elsewhere classified -G968 Other specified disorders of central nervous system -G969 Disorder of central nervous system, unspecified -G970 Cerebrospinal fluid leak from spinal puncture -G971 Other reaction to spinal and lumbar puncture -G972 Intracranial hypotension following ventricular shunting -G9731 Intraoperative hemorrhage and hematoma of a nervous system organ or structure complicating a nervous system procedure -G9732 Intraoperative hemorrhage and hematoma of a nervous system organ or structure complicating other procedure -G9741 Accidental puncture or laceration of dura during a procedure -G9748 Accidental puncture and laceration of other nervous system organ or structure during a nervous system procedure -G9749 Accidental puncture and laceration of other nervous system organ or structure during other procedure -G9751 Postprocedural hemorrhage and hematoma of a nervous system organ or structure following a nervous system procedure -G9752 Postprocedural hemorrhage and hematoma of a nervous system organ or structure following other procedure -G9781 Other intraoperative complications of nervous system -G9782 Other postprocedural complications and disorders of nervous system -G980 Neurogenic arthritis, not elsewhere classified -G988 Other disorders of nervous system -G990 Autonomic neuropathy in diseases classified elsewhere -G992 Myelopathy in diseases classified elsewhere -G998 Other specified disorders of nervous system in diseases classified elsewhere -H00011 Hordeolum externum right upper eyelid -H00012 Hordeolum externum right lower eyelid -H00013 Hordeolum externum right eye, unspecified eyelid -H00014 Hordeolum externum left upper eyelid -H00015 Hordeolum externum left lower eyelid -H00016 Hordeolum externum left eye, unspecified eyelid -H00019 Hordeolum externum unspecified eye, unspecified eyelid -H00021 Hordeolum internum right upper eyelid -H00022 Hordeolum internum right lower eyelid -H00023 Hordeolum internum right eye, unspecified eyelid -H00024 Hordeolum internum left upper eyelid -H00025 Hordeolum internum left lower eyelid -H00026 Hordeolum internum left eye, unspecified eyelid -H00029 Hordeolum internum unspecified eye, unspecified eyelid -H00031 Abscess of right upper eyelid -H00032 Abscess of right lower eyelid -H00033 Abscess of eyelid right eye, unspecified eyelid -H00034 Abscess of left upper eyelid -H00035 Abscess of left lower eyelid -H00036 Abscess of eyelid left eye, unspecified eyelid -H00039 Abscess of eyelid unspecified eye, unspecified eyelid -H0011 Chalazion right upper eyelid -H0012 Chalazion right lower eyelid -H0013 Chalazion right eye, unspecified eyelid -H0014 Chalazion left upper eyelid -H0015 Chalazion left lower eyelid -H0016 Chalazion left eye, unspecified eyelid -H0019 Chalazion unspecified eye, unspecified eyelid -H01001 Unspecified blepharitis right upper eyelid -H01002 Unspecified blepharitis right lower eyelid -H01003 Unspecified blepharitis right eye, unspecified eyelid -H01004 Unspecified blepharitis left upper eyelid -H01005 Unspecified blepharitis left lower eyelid -H01006 Unspecified blepharitis left eye, unspecified eyelid -H01009 Unspecified blepharitis unspecified eye, unspecified eyelid -H01011 Ulcerative blepharitis right upper eyelid -H01012 Ulcerative blepharitis right lower eyelid -H01013 Ulcerative blepharitis right eye, unspecified eyelid -H01014 Ulcerative blepharitis left upper eyelid -H01015 Ulcerative blepharitis left lower eyelid -H01016 Ulcerative blepharitis left eye, unspecified eyelid -H01019 Ulcerative blepharitis unspecified eye, unspecified eyelid -H01021 Squamous blepharitis right upper eyelid -H01022 Squamous blepharitis right lower eyelid -H01023 Squamous blepharitis right eye, unspecified eyelid -H01024 Squamous blepharitis left upper eyelid -H01025 Squamous blepharitis left lower eyelid -H01026 Squamous blepharitis left eye, unspecified eyelid -H01029 Squamous blepharitis unspecified eye, unspecified eyelid -H01111 Allergic dermatitis of right upper eyelid -H01112 Allergic dermatitis of right lower eyelid -H01113 Allergic dermatitis of right eye, unspecified eyelid -H01114 Allergic dermatitis of left upper eyelid -H01115 Allergic dermatitis of left lower eyelid -H01116 Allergic dermatitis of left eye, unspecified eyelid -H01119 Allergic dermatitis of unspecified eye, unspecified eyelid -H01121 Discoid lupus erythematosus of right upper eyelid -H01122 Discoid lupus erythematosus of right lower eyelid -H01123 Discoid lupus erythematosus of right eye, unspecified eyelid -H01124 Discoid lupus erythematosus of left upper eyelid -H01125 Discoid lupus erythematosus of left lower eyelid -H01126 Discoid lupus erythematosus of left eye, unspecified eyelid -H01129 Discoid lupus erythematosus of unspecified eye, unspecified eyelid -H01131 Eczematous dermatitis of right upper eyelid -H01132 Eczematous dermatitis of right lower eyelid -H01133 Eczematous dermatitis of right eye, unspecified eyelid -H01134 Eczematous dermatitis of left upper eyelid -H01135 Eczematous dermatitis of left lower eyelid -H01136 Eczematous dermatitis of left eye, unspecified eyelid -H01139 Eczematous dermatitis of unspecified eye, unspecified eyelid -H01141 Xeroderma of right upper eyelid -H01142 Xeroderma of right lower eyelid -H01143 Xeroderma of right eye, unspecified eyelid -H01144 Xeroderma of left upper eyelid -H01145 Xeroderma of left lower eyelid -H01146 Xeroderma of left eye, unspecified eyelid -H01149 Xeroderma of unspecified eye, unspecified eyelid -H018 Other specified inflammations of eyelid -H019 Unspecified inflammation of eyelid -H02001 Unspecified entropion of right upper eyelid -H02002 Unspecified entropion of right lower eyelid -H02003 Unspecified entropion of right eye, unspecified eyelid -H02004 Unspecified entropion of left upper eyelid -H02005 Unspecified entropion of left lower eyelid -H02006 Unspecified entropion of left eye, unspecified eyelid -H02009 Unspecified entropion of unspecified eye, unspecified eyelid -H02011 Cicatricial entropion of right upper eyelid -H02012 Cicatricial entropion of right lower eyelid -H02013 Cicatricial entropion of right eye, unspecified eyelid -H02014 Cicatricial entropion of left upper eyelid -H02015 Cicatricial entropion of left lower eyelid -H02016 Cicatricial entropion of left eye, unspecified eyelid -H02019 Cicatricial entropion of unspecified eye, unspecified eyelid -H02021 Mechanical entropion of right upper eyelid -H02022 Mechanical entropion of right lower eyelid -H02023 Mechanical entropion of right eye, unspecified eyelid -H02024 Mechanical entropion of left upper eyelid -H02025 Mechanical entropion of left lower eyelid -H02026 Mechanical entropion of left eye, unspecified eyelid -H02029 Mechanical entropion of unspecified eye, unspecified eyelid -H02031 Senile entropion of right upper eyelid -H02032 Senile entropion of right lower eyelid -H02033 Senile entropion of right eye, unspecified eyelid -H02034 Senile entropion of left upper eyelid -H02035 Senile entropion of left lower eyelid -H02036 Senile entropion of left eye, unspecified eyelid -H02039 Senile entropion of unspecified eye, unspecified eyelid -H02041 Spastic entropion of right upper eyelid -H02042 Spastic entropion of right lower eyelid -H02043 Spastic entropion of right eye, unspecified eyelid -H02044 Spastic entropion of left upper eyelid -H02045 Spastic entropion of left lower eyelid -H02046 Spastic entropion of left eye, unspecified eyelid -H02049 Spastic entropion of unspecified eye, unspecified eyelid -H02051 Trichiasis without entropian right upper eyelid -H02052 Trichiasis without entropian right lower eyelid -H02053 Trichiasis without entropian right eye, unspecified eyelid -H02054 Trichiasis without entropian left upper eyelid -H02055 Trichiasis without entropian left lower eyelid -H02056 Trichiasis without entropian left eye, unspecified eyelid -H02059 Trichiasis without entropian unspecified eye, unspecified eyelid -H02101 Unspecified ectropion of right upper eyelid -H02102 Unspecified ectropion of right lower eyelid -H02103 Unspecified ectropion of right eye, unspecified eyelid -H02104 Unspecified ectropion of left upper eyelid -H02105 Unspecified ectropion of left lower eyelid -H02106 Unspecified ectropion of left eye, unspecified eyelid -H02109 Unspecified ectropion of unspecified eye, unspecified eyelid -H02111 Cicatricial ectropion of right upper eyelid -H02112 Cicatricial ectropion of right lower eyelid -H02113 Cicatricial ectropion of right eye, unspecified eyelid -H02114 Cicatricial ectropion of left upper eyelid -H02115 Cicatricial ectropion of left lower eyelid -H02116 Cicatricial ectropion of left eye, unspecified eyelid -H02119 Cicatricial ectropion of unspecified eye, unspecified eyelid -H02121 Mechanical ectropion of right upper eyelid -H02122 Mechanical ectropion of right lower eyelid -H02123 Mechanical ectropion of right eye, unspecified eyelid -H02124 Mechanical ectropion of left upper eyelid -H02125 Mechanical ectropion of left lower eyelid -H02126 Mechanical ectropion of left eye, unspecified eyelid -H02129 Mechanical ectropion of unspecified eye, unspecified eyelid -H02131 Senile ectropion of right upper eyelid -H02132 Senile ectropion of right lower eyelid -H02133 Senile ectropion of right eye, unspecified eyelid -H02134 Senile ectropion of left upper eyelid -H02135 Senile ectropion of left lower eyelid -H02136 Senile ectropion of left eye, unspecified eyelid -H02139 Senile ectropion of unspecified eye, unspecified eyelid -H02141 Spastic ectropion of right upper eyelid -H02142 Spastic ectropion of right lower eyelid -H02143 Spastic ectropion of right eye, unspecified eyelid -H02144 Spastic ectropion of left upper eyelid -H02145 Spastic ectropion of left lower eyelid -H02146 Spastic ectropion of left eye, unspecified eyelid -H02149 Spastic ectropion of unspecified eye, unspecified eyelid -H02201 Unspecified lagophthalmos right upper eyelid -H02202 Unspecified lagophthalmos right lower eyelid -H02203 Unspecified lagophthalmos right eye, unspecified eyelid -H02204 Unspecified lagophthalmos left upper eyelid -H02205 Unspecified lagophthalmos left lower eyelid -H02206 Unspecified lagophthalmos left eye, unspecified eyelid -H02209 Unspecified lagophthalmos unspecified eye, unspecified eyelid -H02211 Cicatricial lagophthalmos right upper eyelid -H02212 Cicatricial lagophthalmos right lower eyelid -H02213 Cicatricial lagophthalmos right eye, unspecified eyelid -H02214 Cicatricial lagophthalmos left upper eyelid -H02215 Cicatricial lagophthalmos left lower eyelid -H02216 Cicatricial lagophthalmos left eye, unspecified eyelid -H02219 Cicatricial lagophthalmos unspecified eye, unspecified eyelid -H02221 Mechanical lagophthalmos right upper eyelid -H02222 Mechanical lagophthalmos right lower eyelid -H02223 Mechanical lagophthalmos right eye, unspecified eyelid -H02224 Mechanical lagophthalmos left upper eyelid -H02225 Mechanical lagophthalmos left lower eyelid -H02226 Mechanical lagophthalmos left eye, unspecified eyelid -H02229 Mechanical lagophthalmos unspecified eye, unspecified eyelid -H02231 Paralytic lagophthalmos right upper eyelid -H02232 Paralytic lagophthalmos right lower eyelid -H02233 Paralytic lagophthalmos right eye, unspecified eyelid -H02234 Paralytic lagophthalmos left upper eyelid -H02235 Paralytic lagophthalmos left lower eyelid -H02236 Paralytic lagophthalmos left eye, unspecified eyelid -H02239 Paralytic lagophthalmos unspecified eye, unspecified eyelid -H0230 Blepharochalasis unspecified eye, unspecified eyelid -H0231 Blepharochalasis right upper eyelid -H0232 Blepharochalasis right lower eyelid -H0233 Blepharochalasis right eye, unspecified eyelid -H0234 Blepharochalasis left upper eyelid -H0235 Blepharochalasis left lower eyelid -H0236 Blepharochalasis left eye, unspecified eyelid -H02401 Unspecified ptosis of right eyelid -H02402 Unspecified ptosis of left eyelid -H02403 Unspecified ptosis of bilateral eyelids -H02409 Unspecified ptosis of unspecified eyelid -H02411 Mechanical ptosis of right eyelid -H02412 Mechanical ptosis of left eyelid -H02413 Mechanical ptosis of bilateral eyelids -H02419 Mechanical ptosis of unspecified eyelid -H02421 Myogenic ptosis of right eyelid -H02422 Myogenic ptosis of left eyelid -H02423 Myogenic ptosis of bilateral eyelids -H02429 Myogenic ptosis of unspecified eyelid -H02431 Paralytic ptosis of right eyelid -H02432 Paralytic ptosis of left eyelid -H02433 Paralytic ptosis of bilateral eyelids -H02439 Paralytic ptosis unspecified eyelid -H02511 Abnormal innervation syndrome right upper eyelid -H02512 Abnormal innervation syndrome right lower eyelid -H02513 Abnormal innervation syndrome right eye, unspecified eyelid -H02514 Abnormal innervation syndrome left upper eyelid -H02515 Abnormal innervation syndrome left lower eyelid -H02516 Abnormal innervation syndrome left eye, unspecified eyelid -H02519 Abnormal innervation syndrome unspecified eye, unspecified eyelid -H02521 Blepharophimosis right upper eyelid -H02522 Blepharophimosis right lower eyelid -H02523 Blepharophimosis right eye, unspecified eyelid -H02524 Blepharophimosis left upper eyelid -H02525 Blepharophimosis left lower eyelid -H02526 Blepharophimosis left eye, unspecified eyelid -H02529 Blepharophimosis unspecified eye, unspecified lid -H02531 Eyelid retraction right upper eyelid -H02532 Eyelid retraction right lower eyelid -H02533 Eyelid retraction right eye, unspecified eyelid -H02534 Eyelid retraction left upper eyelid -H02535 Eyelid retraction left lower eyelid -H02536 Eyelid retraction left eye, unspecified eyelid -H02539 Eyelid retraction unspecified eye, unspecified lid -H0259 Other disorders affecting eyelid function -H0260 Xanthelasma of unspecified eye, unspecified eyelid -H0261 Xanthelasma of right upper eyelid -H0262 Xanthelasma of right lower eyelid -H0263 Xanthelasma of right eye, unspecified eyelid -H0264 Xanthelasma of left upper eyelid -H0265 Xanthelasma of left lower eyelid -H0266 Xanthelasma of left eye, unspecified eyelid -H0270 Unspecified degenerative disorders of eyelid and periocular area -H02711 Chloasma of right upper eyelid and periocular area -H02712 Chloasma of right lower eyelid and periocular area -H02713 Chloasma of right eye, unspecified eyelid and periocular area -H02714 Chloasma of left upper eyelid and periocular area -H02715 Chloasma of left lower eyelid and periocular area -H02716 Chloasma of left eye, unspecified eyelid and periocular area -H02719 Chloasma of unspecified eye, unspecified eyelid and periocular area -H02721 Madarosis of right upper eyelid and periocular area -H02722 Madarosis of right lower eyelid and periocular area -H02723 Madarosis of right eye, unspecified eyelid and periocular area -H02724 Madarosis of left upper eyelid and periocular area -H02725 Madarosis of left lower eyelid and periocular area -H02726 Madarosis of left eye, unspecified eyelid and periocular area -H02729 Madarosis of unspecified eye, unspecified eyelid and periocular area -H02731 Vitiligo of right upper eyelid and periocular area -H02732 Vitiligo of right lower eyelid and periocular area -H02733 Vitiligo of right eye, unspecified eyelid and periocular area -H02734 Vitiligo of left upper eyelid and periocular area -H02735 Vitiligo of left lower eyelid and periocular area -H02736 Vitiligo of left eye, unspecified eyelid and periocular area -H02739 Vitiligo of unspecified eye, unspecified eyelid and periocular area -H0279 Other degenerative disorders of eyelid and periocular area -H02811 Retained foreign body in right upper eyelid -H02812 Retained foreign body in right lower eyelid -H02813 Retained foreign body in right eye, unspecified eyelid -H02814 Retained foreign body in left upper eyelid -H02815 Retained foreign body in left lower eyelid -H02816 Retained foreign body in left eye, unspecified eyelid -H02819 Retained foreign body in unspecified eye, unspecified eyelid -H02821 Cysts of right upper eyelid -H02822 Cysts of right lower eyelid -H02823 Cysts of right eye, unspecified eyelid -H02824 Cysts of left upper eyelid -H02825 Cysts of left lower eyelid -H02826 Cysts of left eye, unspecified eyelid -H02829 Cysts of unspecified eye, unspecified eyelid -H02831 Dermatochalasis of right upper eyelid -H02832 Dermatochalasis of right lower eyelid -H02833 Dermatochalasis of right eye, unspecified eyelid -H02834 Dermatochalasis of left upper eyelid -H02835 Dermatochalasis of left lower eyelid -H02836 Dermatochalasis of left eye, unspecified eyelid -H02839 Dermatochalasis of unspecified eye, unspecified eyelid -H02841 Edema of right upper eyelid -H02842 Edema of right lower eyelid -H02843 Edema of right eye, unspecified eyelid -H02844 Edema of left upper eyelid -H02845 Edema of left lower eyelid -H02846 Edema of left eye, unspecified eyelid -H02849 Edema of unspecified eye, unspecified eyelid -H02851 Elephantiasis of right upper eyelid -H02852 Elephantiasis of right lower eyelid -H02853 Elephantiasis of right eye, unspecified eyelid -H02854 Elephantiasis of left upper eyelid -H02855 Elephantiasis of left lower eyelid -H02856 Elephantiasis of left eye, unspecified eyelid -H02859 Elephantiasis of unspecified eye, unspecified eyelid -H02861 Hypertrichosis of right upper eyelid -H02862 Hypertrichosis of right lower eyelid -H02863 Hypertrichosis of right eye, unspecified eyelid -H02864 Hypertrichosis of left upper eyelid -H02865 Hypertrichosis of left lower eyelid -H02866 Hypertrichosis of left eye, unspecified eyelid -H02869 Hypertrichosis of unspecified eye, unspecified eyelid -H02871 Vascular anomalies of right upper eyelid -H02872 Vascular anomalies of right lower eyelid -H02873 Vascular anomalies of right eye, unspecified eyelid -H02874 Vascular anomalies of left upper eyelid -H02875 Vascular anomalies of left lower eyelid -H02876 Vascular anomalies of left eye, unspecified eyelid -H02879 Vascular anomalies of unspecified eye, unspecified eyelid -H0289 Other specified disorders of eyelid -H029 Unspecified disorder of eyelid -H04001 Unspecified dacryoadenitis, right lacrimal gland -H04002 Unspecified dacryoadenitis, left lacrimal gland -H04003 Unspecified dacryoadenitis, bilateral lacrimal glands -H04009 Unspecified dacryoadenitis, unspecified lacrimal gland -H04011 Acute dacryoadenitis, right lacrimal gland -H04012 Acute dacryoadenitis, left lacrimal gland -H04013 Acute dacryoadenitis, bilateral lacrimal glands -H04019 Acute dacryoadenitis, unspecified lacrimal gland -H04021 Chronic dacryoadenitis, right lacrimal gland -H04022 Chronic dacryoadenitis, left lacrimal gland -H04023 Chronic dacryoadenitis, bilateral lacrimal gland -H04029 Chronic dacryoadenitis, unspecified lacrimal gland -H04031 Chronic enlargement of right lacrimal gland -H04032 Chronic enlargement of left lacrimal gland -H04033 Chronic enlargement of bilateral lacrimal glands -H04039 Chronic enlargement of unspecified lacrimal gland -H04111 Dacryops of right lacrimal gland -H04112 Dacryops of left lacrimal gland -H04113 Dacryops of bilateral lacrimal glands -H04119 Dacryops of unspecified lacrimal gland -H04121 Dry eye syndrome of right lacrimal gland -H04122 Dry eye syndrome of left lacrimal gland -H04123 Dry eye syndrome of bilateral lacrimal glands -H04129 Dry eye syndrome of unspecified lacrimal gland -H04131 Lacrimal cyst, right lacrimal gland -H04132 Lacrimal cyst, left lacrimal gland -H04133 Lacrimal cyst, bilateral lacrimal glands -H04139 Lacrimal cyst, unspecified lacrimal gland -H04141 Primary lacrimal gland atrophy, right lacrimal gland -H04142 Primary lacrimal gland atrophy, left lacrimal gland -H04143 Primary lacrimal gland atrophy, bilateral lacrimal glands -H04149 Primary lacrimal gland atrophy, unspecified lacrimal gland -H04151 Secondary lacrimal gland atrophy, right lacrimal gland -H04152 Secondary lacrimal gland atrophy, left lacrimal gland -H04153 Secondary lacrimal gland atrophy, bilateral lacrimal glands -H04159 Secondary lacrimal gland atrophy, unspecified lacrimal gland -H04161 Lacrimal gland dislocation, right lacrimal gland -H04162 Lacrimal gland dislocation, left lacrimal gland -H04163 Lacrimal gland dislocation, bilateral lacrimal glands -H04169 Lacrimal gland dislocation, unspecified lacrimal gland -H0419 Other specified disorders of lacrimal gland -H04201 Unspecified epiphora, right lacrimal gland -H04202 Unspecified epiphora, left lacrimal gland -H04203 Unspecified epiphora, bilateral lacrimal glands -H04209 Unspecified epiphora, unspecified lacrimal gland -H04211 Epiphora due to excess lacrimation, right lacrimal gland -H04212 Epiphora due to excess lacrimation, left lacrimal gland -H04213 Epiphora due to excess lacrimation, bilateral lacrimal glands -H04219 Epiphora due to excess lacrimation, unspecified lacrimal gland -H04221 Epiphora due to insufficient drainage, right lacrimal gland -H04222 Epiphora due to insufficient drainage, left lacrimal gland -H04223 Epiphora due to insufficient drainage, bilateral lacrimal glands -H04229 Epiphora due to insufficient drainage, unspecified lacrimal gland -H04301 Unspecified dacryocystitis of right lacrimal passage -H04302 Unspecified dacryocystitis of left lacrimal passage -H04303 Unspecified dacryocystitis of bilateral lacrimal passages -H04309 Unspecified dacryocystitis of unspecified lacrimal passage -H04311 Phlegmonous dacryocystitis of right lacrimal passage -H04312 Phlegmonous dacryocystitis of left lacrimal passage -H04313 Phlegmonous dacryocystitis of bilateral lacrimal passages -H04319 Phlegmonous dacryocystitis of unspecified lacrimal passage -H04321 Acute dacryocystitis of right lacrimal passage -H04322 Acute dacryocystitis of left lacrimal passage -H04323 Acute dacryocystitis of bilateral lacrimal passages -H04329 Acute dacryocystitis of unspecified lacrimal passage -H04331 Acute lacrimal canaliculitis of right lacrimal passage -H04332 Acute lacrimal canaliculitis of left lacrimal passage -H04333 Acute lacrimal canaliculitis of bilateral lacrimal passages -H04339 Acute lacrimal canaliculitis of unspecified lacrimal passage -H04411 Chronic dacryocystitis of right lacrimal passage -H04412 Chronic dacryocystitis of left lacrimal passage -H04413 Chronic dacryocystitis of bilateral lacrimal passages -H04419 Chronic dacryocystitis of unspecified lacrimal passage -H04421 Chronic lacrimal canaliculitis of right lacrimal passage -H04422 Chronic lacrimal canaliculitis of left lacrimal passage -H04423 Chronic lacrimal canaliculitis of bilateral lacrimal passages -H04429 Chronic lacrimal canaliculitis of unspecified lacrimal passage -H04431 Chronic lacrimal mucocele of right lacrimal passage -H04432 Chronic lacrimal mucocele of left lacrimal passage -H04433 Chronic lacrimal mucocele of bilateral lacrimal passages -H04439 Chronic lacrimal mucocele of unspecified lacrimal passage -H04511 Dacryolith of right lacrimal passage -H04512 Dacryolith of left lacrimal passage -H04513 Dacryolith of bilateral lacrimal passages -H04519 Dacryolith of unspecified lacrimal passage -H04521 Eversion of right lacrimal punctum -H04522 Eversion of left lacrimal punctum -H04523 Eversion of bilateral lacrimal punctum -H04529 Eversion of unspecified lacrimal punctum -H04531 Neonatal obstruction of right nasolacrimal duct -H04532 Neonatal obstruction of left nasolacrimal duct -H04533 Neonatal obstruction of bilateral nasolacrimal duct -H04539 Neonatal obstruction of unspecified nasolacrimal duct -H04541 Stenosis of right lacrimal canaliculi -H04542 Stenosis of left lacrimal canaliculi -H04543 Stenosis of bilateral lacrimal canaliculi -H04549 Stenosis of unspecified lacrimal canaliculi -H04551 Acquired stenosis of right nasolacrimal duct -H04552 Acquired stenosis of left nasolacrimal duct -H04553 Acquired stenosis of bilateral nasolacrimal duct -H04559 Acquired stenosis of unspecified nasolacrimal duct -H04561 Stenosis of right lacrimal punctum -H04562 Stenosis of left lacrimal punctum -H04563 Stenosis of bilateral lacrimal punctum -H04569 Stenosis of unspecified lacrimal punctum -H04571 Stenosis of right lacrimal sac -H04572 Stenosis of left lacrimal sac -H04573 Stenosis of bilateral lacrimal sac -H04579 Stenosis of unspecified lacrimal sac -H04611 Lacrimal fistula right lacrimal passage -H04612 Lacrimal fistula left lacrimal passage -H04613 Lacrimal fistula bilateral lacrimal passages -H04619 Lacrimal fistula unspecified lacrimal passage -H0469 Other changes of lacrimal passages -H04811 Granuloma of right lacrimal passage -H04812 Granuloma of left lacrimal passage -H04813 Granuloma of bilateral lacrimal passages -H04819 Granuloma of unspecified lacrimal passage -H0489 Other disorders of lacrimal system -H049 Disorder of lacrimal system, unspecified -H0500 Unspecified acute inflammation of orbit -H05011 Cellulitis of right orbit -H05012 Cellulitis of left orbit -H05013 Cellulitis of bilateral orbits -H05019 Cellulitis of unspecified orbit -H05021 Osteomyelitis of right orbit -H05022 Osteomyelitis of left orbit -H05023 Osteomyelitis of bilateral orbits -H05029 Osteomyelitis of unspecified orbit -H05031 Periostitis of right orbit -H05032 Periostitis of left orbit -H05033 Periostitis of bilateral orbits -H05039 Periostitis of unspecified orbit -H05041 Tenonitis of right orbit -H05042 Tenonitis of left orbit -H05043 Tenonitis of bilateral orbits -H05049 Tenonitis of unspecified orbit -H0510 Unspecified chronic inflammatory disorders of orbit -H05111 Granuloma of right orbit -H05112 Granuloma of left orbit -H05113 Granuloma of bilateral orbits -H05119 Granuloma of unspecified orbit -H05121 Orbital myositis, right orbit -H05122 Orbital myositis, left orbit -H05123 Orbital myositis, bilateral -H05129 Orbital myositis, unspecified orbit -H0520 Unspecified exophthalmos -H05211 Displacement (lateral) of globe, right eye -H05212 Displacement (lateral) of globe, left eye -H05213 Displacement (lateral) of globe, bilateral -H05219 Displacement (lateral) of globe, unspecified eye -H05221 Edema of right orbit -H05222 Edema of left orbit -H05223 Edema of bilateral orbit -H05229 Edema of unspecified orbit -H05231 Hemorrhage of right orbit -H05232 Hemorrhage of left orbit -H05233 Hemorrhage of bilateral orbit -H05239 Hemorrhage of unspecified orbit -H05241 Constant exophthalmos, right eye -H05242 Constant exophthalmos, left eye -H05243 Constant exophthalmos, bilateral -H05249 Constant exophthalmos, unspecified eye -H05251 Intermittent exophthalmos, right eye -H05252 Intermittent exophthalmos, left eye -H05253 Intermittent exophthalmos, bilateral -H05259 Intermittent exophthalmos, unspecified eye -H05261 Pulsating exophthalmos, right eye -H05262 Pulsating exophthalmos, left eye -H05263 Pulsating exophthalmos, bilateral -H05269 Pulsating exophthalmos, unspecified eye -H0530 Unspecified deformity of orbit -H05311 Atrophy of right orbit -H05312 Atrophy of left orbit -H05313 Atrophy of bilateral orbit -H05319 Atrophy of unspecified orbit -H05321 Deformity of right orbit due to bone disease -H05322 Deformity of left orbit due to bone disease -H05323 Deformity of bilateral orbits due to bone disease -H05329 Deformity of unspecified orbit due to bone disease -H05331 Deformity of right orbit due to trauma or surgery -H05332 Deformity of left orbit due to trauma or surgery -H05333 Deformity of bilateral orbits due to trauma or surgery -H05339 Deformity of unspecified orbit due to trauma or surgery -H05341 Enlargement of right orbit -H05342 Enlargement of left orbit -H05343 Enlargement of bilateral orbits -H05349 Enlargement of unspecified orbit -H05351 Exostosis of right orbit -H05352 Exostosis of left orbit -H05353 Exostosis of bilateral orbits -H05359 Exostosis of unspecified orbit -H05401 Unspecified enophthalmos, right eye -H05402 Unspecified enophthalmos, left eye -H05403 Unspecified enophthalmos, bilateral -H05409 Unspecified enophthalmos, unspecified eye -H05411 Enophthalmos due to atrophy of orbital tissue, right eye -H05412 Enophthalmos due to atrophy of orbital tissue, left eye -H05413 Enophthalmos due to atrophy of orbital tissue, bilateral -H05419 Enophthalmos due to atrophy of orbital tissue, unspecified eye -H05421 Enophthalmos due to trauma or surgery, right eye -H05422 Enophthalmos due to trauma or surgery, left eye -H05423 Enophthalmos due to trauma or surgery, bilateral -H05429 Enophthalmos due to trauma or surgery, unspecified eye -H0550 Retained (old) foreign body following penetrating wound of unspecified orbit -H0551 Retained (old) foreign body following penetrating wound of right orbit -H0552 Retained (old) foreign body following penetrating wound of left orbit -H0553 Retained (old) foreign body following penetrating wound of bilateral orbits -H05811 Cyst of right orbit -H05812 Cyst of left orbit -H05813 Cyst of bilateral orbits -H05819 Cyst of unspecified orbit -H05821 Myopathy of extraocular muscles, right orbit -H05822 Myopathy of extraocular muscles, left orbit -H05823 Myopathy of extraocular muscles, bilateral -H05829 Myopathy of extraocular muscles, unspecified orbit -H0589 Other disorders of orbit -H059 Unspecified disorder of orbit -H10011 Acute follicular conjunctivitis, right eye -H10012 Acute follicular conjunctivitis, left eye -H10013 Acute follicular conjunctivitis, bilateral -H10019 Acute follicular conjunctivitis, unspecified eye -H10021 Other mucopurulent conjunctivitis, right eye -H10022 Other mucopurulent conjunctivitis, left eye -H10023 Other mucopurulent conjunctivitis, bilateral -H10029 Other mucopurulent conjunctivitis, unspecified eye -H1010 Acute atopic conjunctivitis, unspecified eye -H1011 Acute atopic conjunctivitis, right eye -H1012 Acute atopic conjunctivitis, left eye -H1013 Acute atopic conjunctivitis, bilateral -H10211 Acute toxic conjunctivitis, right eye -H10212 Acute toxic conjunctivitis, left eye -H10213 Acute toxic conjunctivitis, bilateral -H10219 Acute toxic conjunctivitis, unspecified eye -H10221 Pseudomembranous conjunctivitis, right eye -H10222 Pseudomembranous conjunctivitis, left eye -H10223 Pseudomembranous conjunctivitis, bilateral -H10229 Pseudomembranous conjunctivitis, unspecified eye -H10231 Serous conjunctivitis, except viral, right eye -H10232 Serous conjunctivitis, except viral, left eye -H10233 Serous conjunctivitis, except viral, bilateral -H10239 Serous conjunctivitis, except viral, unspecified eye -H1030 Unspecified acute conjunctivitis, unspecified eye -H1031 Unspecified acute conjunctivitis, right eye -H1032 Unspecified acute conjunctivitis, left eye -H1033 Unspecified acute conjunctivitis, bilateral -H10401 Unspecified chronic conjunctivitis, right eye -H10402 Unspecified chronic conjunctivitis, left eye -H10403 Unspecified chronic conjunctivitis, bilateral -H10409 Unspecified chronic conjunctivitis, unspecified eye -H10411 Chronic giant papillary conjunctivitis, right eye -H10412 Chronic giant papillary conjunctivitis, left eye -H10413 Chronic giant papillary conjunctivitis, bilateral -H10419 Chronic giant papillary conjunctivitis, unspecified eye -H10421 Simple chronic conjunctivitis, right eye -H10422 Simple chronic conjunctivitis, left eye -H10423 Simple chronic conjunctivitis, bilateral -H10429 Simple chronic conjunctivitis, unspecified eye -H10431 Chronic follicular conjunctivitis, right eye -H10432 Chronic follicular conjunctivitis, left eye -H10433 Chronic follicular conjunctivitis, bilateral -H10439 Chronic follicular conjunctivitis, unspecified eye -H1044 Vernal conjunctivitis -H1045 Other chronic allergic conjunctivitis -H10501 Unspecified blepharoconjunctivitis, right eye -H10502 Unspecified blepharoconjunctivitis, left eye -H10503 Unspecified blepharoconjunctivitis, bilateral -H10509 Unspecified blepharoconjunctivitis, unspecified eye -H10511 Ligneous conjunctivitis, right eye -H10512 Ligneous conjunctivitis, left eye -H10513 Ligneous conjunctivitis, bilateral -H10519 Ligneous conjunctivitis, unspecified eye -H10521 Angular blepharoconjunctivitis, right eye -H10522 Angular blepharoconjunctivitis, left eye -H10523 Angular blepharoconjunctivitis, bilateral -H10529 Angular blepharoconjunctivitis, unspecified eye -H10531 Contact blepharoconjunctivitis, right eye -H10532 Contact blepharoconjunctivitis, left eye -H10533 Contact blepharoconjunctivitis, bilateral -H10539 Contact blepharoconjunctivitis, unspecified eye -H10811 Pingueculitis, right eye -H10812 Pingueculitis, left eye -H10813 Pingueculitis, bilateral -H10819 Pingueculitis, unspecified eye -H1089 Other conjunctivitis -H109 Unspecified conjunctivitis -H11001 Unspecified pterygium of right eye -H11002 Unspecified pterygium of left eye -H11003 Unspecified pterygium of eye, bilateral -H11009 Unspecified pterygium of unspecified eye -H11011 Amyloid pterygium of right eye -H11012 Amyloid pterygium of left eye -H11013 Amyloid pterygium of eye, bilateral -H11019 Amyloid pterygium of unspecified eye -H11021 Central pterygium of right eye -H11022 Central pterygium of left eye -H11023 Central pterygium of eye, bilateral -H11029 Central pterygium of unspecified eye -H11031 Double pterygium of right eye -H11032 Double pterygium of left eye -H11033 Double pterygium of eye, bilateral -H11039 Double pterygium of unspecified eye -H11041 Peripheral pterygium, stationary, right eye -H11042 Peripheral pterygium, stationary, left eye -H11043 Peripheral pterygium, stationary, bilateral -H11049 Peripheral pterygium, stationary, unspecified eye -H11051 Peripheral pterygium, progressive, right eye -H11052 Peripheral pterygium, progressive, left eye -H11053 Peripheral pterygium, progressive, bilateral -H11059 Peripheral pterygium, progressive, unspecified eye -H11061 Recurrent pterygium of right eye -H11062 Recurrent pterygium of left eye -H11063 Recurrent pterygium of eye, bilateral -H11069 Recurrent pterygium of unspecified eye -H1110 Unspecified conjunctival degenerations -H11111 Conjunctival deposits, right eye -H11112 Conjunctival deposits, left eye -H11113 Conjunctival deposits, bilateral -H11119 Conjunctival deposits, unspecified eye -H11121 Conjunctival concretions, right eye -H11122 Conjunctival concretions, left eye -H11123 Conjunctival concretions, bilateral -H11129 Conjunctival concretions, unspecified eye -H11131 Conjunctival pigmentations, right eye -H11132 Conjunctival pigmentations, left eye -H11133 Conjunctival pigmentations, bilateral -H11139 Conjunctival pigmentations, unspecified eye -H11141 Conjunctival xerosis, unspecified, right eye -H11142 Conjunctival xerosis, unspecified, left eye -H11143 Conjunctival xerosis, unspecified, bilateral -H11149 Conjunctival xerosis, unspecified, unspecified eye -H11151 Pinguecula, right eye -H11152 Pinguecula, left eye -H11153 Pinguecula, bilateral -H11159 Pinguecula, unspecified eye -H11211 Conjunctival adhesions and strands (localized), right eye -H11212 Conjunctival adhesions and strands (localized), left eye -H11213 Conjunctival adhesions and strands (localized), bilateral -H11219 Conjunctival adhesions and strands (localized), unspecified eye -H11221 Conjunctival granuloma, right eye -H11222 Conjunctival granuloma, left eye -H11223 Conjunctival granuloma, bilateral -H11229 Conjunctival granuloma, unspecified -H11231 Symblepharon, right eye -H11232 Symblepharon, left eye -H11233 Symblepharon, bilateral -H11239 Symblepharon, unspecified eye -H11241 Scarring of conjunctiva, right eye -H11242 Scarring of conjunctiva, left eye -H11243 Scarring of conjunctiva, bilateral -H11249 Scarring of conjunctiva, unspecified eye -H1130 Conjunctival hemorrhage, unspecified eye -H1131 Conjunctival hemorrhage, right eye -H1132 Conjunctival hemorrhage, left eye -H1133 Conjunctival hemorrhage, bilateral -H11411 Vascular abnormalities of conjunctiva, right eye -H11412 Vascular abnormalities of conjunctiva, left eye -H11413 Vascular abnormalities of conjunctiva, bilateral -H11419 Vascular abnormalities of conjunctiva, unspecified eye -H11421 Conjunctival edema, right eye -H11422 Conjunctival edema, left eye -H11423 Conjunctival edema, bilateral -H11429 Conjunctival edema, unspecified eye -H11431 Conjunctival hyperemia, right eye -H11432 Conjunctival hyperemia, left eye -H11433 Conjunctival hyperemia, bilateral -H11439 Conjunctival hyperemia, unspecified eye -H11441 Conjunctival cysts, right eye -H11442 Conjunctival cysts, left eye -H11443 Conjunctival cysts, bilateral -H11449 Conjunctival cysts, unspecified eye -H11811 Pseudopterygium of conjunctiva, right eye -H11812 Pseudopterygium of conjunctiva, left eye -H11813 Pseudopterygium of conjunctiva, bilateral -H11819 Pseudopterygium of conjunctiva, unspecified eye -H11821 Conjunctivochalasis, right eye -H11822 Conjunctivochalasis, left eye -H11823 Conjunctivochalasis, bilateral -H11829 Conjunctivochalasis, unspecified eye -H1189 Other specified disorders of conjunctiva -H119 Unspecified disorder of conjunctiva -H15001 Unspecified scleritis, right eye -H15002 Unspecified scleritis, left eye -H15003 Unspecified scleritis, bilateral -H15009 Unspecified scleritis, unspecified eye -H15011 Anterior scleritis, right eye -H15012 Anterior scleritis, left eye -H15013 Anterior scleritis, bilateral -H15019 Anterior scleritis, unspecified eye -H15021 Brawny scleritis, right eye -H15022 Brawny scleritis, left eye -H15023 Brawny scleritis, bilateral -H15029 Brawny scleritis, unspecified eye -H15031 Posterior scleritis, right eye -H15032 Posterior scleritis, left eye -H15033 Posterior scleritis, bilateral -H15039 Posterior scleritis, unspecified eye -H15041 Scleritis with corneal involvement, right eye -H15042 Scleritis with corneal involvement, left eye -H15043 Scleritis with corneal involvement, bilateral -H15049 Scleritis with corneal involvement, unspecified eye -H15051 Scleromalacia perforans, right eye -H15052 Scleromalacia perforans, left eye -H15053 Scleromalacia perforans, bilateral -H15059 Scleromalacia perforans, unspecified eye -H15091 Other scleritis, right eye -H15092 Other scleritis, left eye -H15093 Other scleritis, bilateral -H15099 Other scleritis, unspecified eye -H15101 Unspecified episcleritis, right eye -H15102 Unspecified episcleritis, left eye -H15103 Unspecified episcleritis, bilateral -H15109 Unspecified episcleritis, unspecified eye -H15111 Episcleritis periodica fugax, right eye -H15112 Episcleritis periodica fugax, left eye -H15113 Episcleritis periodica fugax, bilateral -H15119 Episcleritis periodica fugax, unspecified eye -H15121 Nodular episcleritis, right eye -H15122 Nodular episcleritis, left eye -H15123 Nodular episcleritis, bilateral -H15129 Nodular episcleritis, unspecified eye -H15811 Equatorial staphyloma, right eye -H15812 Equatorial staphyloma, left eye -H15813 Equatorial staphyloma, bilateral -H15819 Equatorial staphyloma, unspecified eye -H15821 Localized anterior staphyloma, right eye -H15822 Localized anterior staphyloma, left eye -H15823 Localized anterior staphyloma, bilateral -H15829 Localized anterior staphyloma, unspecified eye -H15831 Staphyloma posticum, right eye -H15832 Staphyloma posticum, left eye -H15833 Staphyloma posticum, bilateral -H15839 Staphyloma posticum, unspecified eye -H15841 Scleral ectasia, right eye -H15842 Scleral ectasia, left eye -H15843 Scleral ectasia, bilateral -H15849 Scleral ectasia, unspecified eye -H15851 Ring staphyloma, right eye -H15852 Ring staphyloma, left eye -H15853 Ring staphyloma, bilateral -H15859 Ring staphyloma, unspecified eye -H1589 Other disorders of sclera -H159 Unspecified disorder of sclera -H16001 Unspecified corneal ulcer, right eye -H16002 Unspecified corneal ulcer, left eye -H16003 Unspecified corneal ulcer, bilateral -H16009 Unspecified corneal ulcer, unspecified eye -H16011 Central corneal ulcer, right eye -H16012 Central corneal ulcer, left eye -H16013 Central corneal ulcer, bilateral -H16019 Central corneal ulcer, unspecified eye -H16021 Ring corneal ulcer, right eye -H16022 Ring corneal ulcer, left eye -H16023 Ring corneal ulcer, bilateral -H16029 Ring corneal ulcer, unspecified eye -H16031 Corneal ulcer with hypopyon, right eye -H16032 Corneal ulcer with hypopyon, left eye -H16033 Corneal ulcer with hypopyon, bilateral -H16039 Corneal ulcer with hypopyon, unspecified eye -H16041 Marginal corneal ulcer, right eye -H16042 Marginal corneal ulcer, left eye -H16043 Marginal corneal ulcer, bilateral -H16049 Marginal corneal ulcer, unspecified eye -H16051 Mooren's corneal ulcer, right eye -H16052 Mooren's corneal ulcer, left eye -H16053 Mooren's corneal ulcer, bilateral -H16059 Mooren's corneal ulcer, unspecified eye -H16061 Mycotic corneal ulcer, right eye -H16062 Mycotic corneal ulcer, left eye -H16063 Mycotic corneal ulcer, bilateral -H16069 Mycotic corneal ulcer, unspecified eye -H16071 Perforated corneal ulcer, right eye -H16072 Perforated corneal ulcer, left eye -H16073 Perforated corneal ulcer, bilateral -H16079 Perforated corneal ulcer, unspecified eye -H16101 Unspecified superficial keratitis, right eye -H16102 Unspecified superficial keratitis, left eye -H16103 Unspecified superficial keratitis, bilateral -H16109 Unspecified superficial keratitis, unspecified eye -H16111 Macular keratitis, right eye -H16112 Macular keratitis, left eye -H16113 Macular keratitis, bilateral -H16119 Macular keratitis, unspecified eye -H16121 Filamentary keratitis, right eye -H16122 Filamentary keratitis, left eye -H16123 Filamentary keratitis, bilateral -H16129 Filamentary keratitis, unspecified eye -H16131 Photokeratitis, right eye -H16132 Photokeratitis, left eye -H16133 Photokeratitis, bilateral -H16139 Photokeratitis, unspecified eye -H16141 Punctate keratitis, right eye -H16142 Punctate keratitis, left eye -H16143 Punctate keratitis, bilateral -H16149 Punctate keratitis, unspecified eye -H16201 Unspecified keratoconjunctivitis, right eye -H16202 Unspecified keratoconjunctivitis, left eye -H16203 Unspecified keratoconjunctivitis, bilateral -H16209 Unspecified keratoconjunctivitis, unspecified eye -H16211 Exposure keratoconjunctivitis, right eye -H16212 Exposure keratoconjunctivitis, left eye -H16213 Exposure keratoconjunctivitis, bilateral -H16219 Exposure keratoconjunctivitis, unspecified eye -H16221 Keratoconjunctivitis sicca, not specified as Sjogren's, right eye -H16222 Keratoconjunctivitis sicca, not specified as Sjogren's, left eye -H16223 Keratoconjunctivitis sicca, not specified as Sjogren's, bilateral -H16229 Keratoconjunctivitis sicca, not specified as Sjogren's, unspecified eye -H16231 Neurotrophic keratoconjunctivitis, right eye -H16232 Neurotrophic keratoconjunctivitis, left eye -H16233 Neurotrophic keratoconjunctivitis, bilateral -H16239 Neurotrophic keratoconjunctivitis, unspecified eye -H16241 Ophthalmia nodosa, right eye -H16242 Ophthalmia nodosa, left eye -H16243 Ophthalmia nodosa, bilateral -H16249 Ophthalmia nodosa, unspecified eye -H16251 Phlyctenular keratoconjunctivitis, right eye -H16252 Phlyctenular keratoconjunctivitis, left eye -H16253 Phlyctenular keratoconjunctivitis, bilateral -H16259 Phlyctenular keratoconjunctivitis, unspecified eye -H16261 Vernal keratoconjunctivitis, with limbar and corneal involvement, right eye -H16262 Vernal keratoconjunctivitis, with limbar and corneal involvement, left eye -H16263 Vernal keratoconjunctivitis, with limbar and corneal involvement, bilateral -H16269 Vernal keratoconjunctivitis, with limbar and corneal involvement, unspecified eye -H16291 Other keratoconjunctivitis, right eye -H16292 Other keratoconjunctivitis, left eye -H16293 Other keratoconjunctivitis, bilateral -H16299 Other keratoconjunctivitis, unspecified eye -H16301 Unspecified interstitial keratitis, right eye -H16302 Unspecified interstitial keratitis, left eye -H16303 Unspecified interstitial keratitis, bilateral -H16309 Unspecified interstitial keratitis, unspecified eye -H16311 Corneal abscess, right eye -H16312 Corneal abscess, left eye -H16313 Corneal abscess, bilateral -H16319 Corneal abscess, unspecified eye -H16321 Diffuse interstitial keratitis, right eye -H16322 Diffuse interstitial keratitis, left eye -H16323 Diffuse interstitial keratitis, bilateral -H16329 Diffuse interstitial keratitis, unspecified eye -H16331 Sclerosing keratitis, right eye -H16332 Sclerosing keratitis, left eye -H16333 Sclerosing keratitis, bilateral -H16339 Sclerosing keratitis, unspecified eye -H16391 Other interstitial and deep keratitis, right eye -H16392 Other interstitial and deep keratitis, left eye -H16393 Other interstitial and deep keratitis, bilateral -H16399 Other interstitial and deep keratitis, unspecified eye -H16401 Unspecified corneal neovascularization, right eye -H16402 Unspecified corneal neovascularization, left eye -H16403 Unspecified corneal neovascularization, bilateral -H16409 Unspecified corneal neovascularization, unspecified eye -H16411 Ghost vessels (corneal), right eye -H16412 Ghost vessels (corneal), left eye -H16413 Ghost vessels (corneal), bilateral -H16419 Ghost vessels (corneal), unspecified eye -H16421 Pannus (corneal), right eye -H16422 Pannus (corneal), left eye -H16423 Pannus (corneal), bilateral -H16429 Pannus (corneal), unspecified eye -H16431 Localized vascularization of cornea, right eye -H16432 Localized vascularization of cornea, left eye -H16433 Localized vascularization of cornea, bilateral -H16439 Localized vascularization of cornea, unspecified eye -H16441 Deep vascularization of cornea, right eye -H16442 Deep vascularization of cornea, left eye -H16443 Deep vascularization of cornea, bilateral -H16449 Deep vascularization of cornea, unspecified eye -H168 Other keratitis -H169 Unspecified keratitis -H1700 Adherent leukoma, unspecified eye -H1701 Adherent leukoma, right eye -H1702 Adherent leukoma, left eye -H1703 Adherent leukoma, bilateral -H1710 Central corneal opacity, unspecified eye -H1711 Central corneal opacity, right eye -H1712 Central corneal opacity, left eye -H1713 Central corneal opacity, bilateral -H17811 Minor opacity of cornea, right eye -H17812 Minor opacity of cornea, left eye -H17813 Minor opacity of cornea, bilateral -H17819 Minor opacity of cornea, unspecified eye -H17821 Peripheral opacity of cornea, right eye -H17822 Peripheral opacity of cornea, left eye -H17823 Peripheral opacity of cornea, bilateral -H17829 Peripheral opacity of cornea, unspecified eye -H1789 Other corneal scars and opacities -H179 Unspecified corneal scar and opacity -H18001 Unspecified corneal deposit, right eye -H18002 Unspecified corneal deposit, left eye -H18003 Unspecified corneal deposit, bilateral -H18009 Unspecified corneal deposit, unspecified eye -H18011 Anterior corneal pigmentations, right eye -H18012 Anterior corneal pigmentations, left eye -H18013 Anterior corneal pigmentations, bilateral -H18019 Anterior corneal pigmentations, unspecified eye -H18021 Argentous corneal deposits, right eye -H18022 Argentous corneal deposits, left eye -H18023 Argentous corneal deposits, bilateral -H18029 Argentous corneal deposits, unspecified eye -H18031 Corneal deposits in metabolic disorders, right eye -H18032 Corneal deposits in metabolic disorders, left eye -H18033 Corneal deposits in metabolic disorders, bilateral -H18039 Corneal deposits in metabolic disorders, unspecified eye -H18041 Kayser-Fleischer ring, right eye -H18042 Kayser-Fleischer ring, left eye -H18043 Kayser-Fleischer ring, bilateral -H18049 Kayser-Fleischer ring, unspecified eye -H18051 Posterior corneal pigmentations, right eye -H18052 Posterior corneal pigmentations, left eye -H18053 Posterior corneal pigmentations, bilateral -H18059 Posterior corneal pigmentations, unspecified eye -H18061 Stromal corneal pigmentations, right eye -H18062 Stromal corneal pigmentations, left eye -H18063 Stromal corneal pigmentations, bilateral -H18069 Stromal corneal pigmentations, unspecified eye -H1810 Bullous keratopathy, unspecified eye -H1811 Bullous keratopathy, right eye -H1812 Bullous keratopathy, left eye -H1813 Bullous keratopathy, bilateral -H1820 Unspecified corneal edema -H18211 Corneal edema secondary to contact lens, right eye -H18212 Corneal edema secondary to contact lens, left eye -H18213 Corneal edema secondary to contact lens, bilateral -H18219 Corneal edema secondary to contact lens, unspecified eye -H18221 Idiopathic corneal edema, right eye -H18222 Idiopathic corneal edema, left eye -H18223 Idiopathic corneal edema, bilateral -H18229 Idiopathic corneal edema, unspecified eye -H18231 Secondary corneal edema, right eye -H18232 Secondary corneal edema, left eye -H18233 Secondary corneal edema, bilateral -H18239 Secondary corneal edema, unspecified eye -H1830 Unspecified corneal membrane change -H18311 Folds and rupture in Bowman's membrane, right eye -H18312 Folds and rupture in Bowman's membrane, left eye -H18313 Folds and rupture in Bowman's membrane, bilateral -H18319 Folds and rupture in Bowman's membrane, unspecified eye -H18321 Folds in Descemet's membrane, right eye -H18322 Folds in Descemet's membrane, left eye -H18323 Folds in Descemet's membrane, bilateral -H18329 Folds in Descemet's membrane, unspecified eye -H18331 Rupture in Descemet's membrane, right eye -H18332 Rupture in Descemet's membrane, left eye -H18333 Rupture in Descemet's membrane, bilateral -H18339 Rupture in Descemet's membrane, unspecified eye -H1840 Unspecified corneal degeneration -H18411 Arcus senilis, right eye -H18412 Arcus senilis, left eye -H18413 Arcus senilis, bilateral -H18419 Arcus senilis, unspecified eye -H18421 Band keratopathy, right eye -H18422 Band keratopathy, left eye -H18423 Band keratopathy, bilateral -H18429 Band keratopathy, unspecified eye -H1843 Other calcerous corneal degeneration -H18441 Keratomalacia, right eye -H18442 Keratomalacia, left eye -H18443 Keratomalacia, bilateral -H18449 Keratomalacia, unspecified eye -H18451 Nodular corneal degeneration, right eye -H18452 Nodular corneal degeneration, left eye -H18453 Nodular corneal degeneration, bilateral -H18459 Nodular corneal degeneration, unspecified eye -H18461 Peripheral corneal degeneration, right eye -H18462 Peripheral corneal degeneration, left eye -H18463 Peripheral corneal degeneration, bilateral -H18469 Peripheral corneal degeneration, unspecified eye -H1849 Other corneal degeneration -H1850 Unspecified hereditary corneal dystrophies -H1851 Endothelial corneal dystrophy -H1852 Epithelial (juvenile) corneal dystrophy -H1853 Granular corneal dystrophy -H1854 Lattice corneal dystrophy -H1855 Macular corneal dystrophy -H1859 Other hereditary corneal dystrophies -H18601 Keratoconus, unspecified, right eye -H18602 Keratoconus, unspecified, left eye -H18603 Keratoconus, unspecified, bilateral -H18609 Keratoconus, unspecified, unspecified eye -H18611 Keratoconus, stable, right eye -H18612 Keratoconus, stable, left eye -H18613 Keratoconus, stable, bilateral -H18619 Keratoconus, stable, unspecified eye -H18621 Keratoconus, unstable, right eye -H18622 Keratoconus, unstable, left eye -H18623 Keratoconus, unstable, bilateral -H18629 Keratoconus, unstable, unspecified eye -H1870 Unspecified corneal deformity -H18711 Corneal ectasia, right eye -H18712 Corneal ectasia, left eye -H18713 Corneal ectasia, bilateral -H18719 Corneal ectasia, unspecified eye -H18721 Corneal staphyloma, right eye -H18722 Corneal staphyloma, left eye -H18723 Corneal staphyloma, bilateral -H18729 Corneal staphyloma, unspecified eye -H18731 Descemetocele, right eye -H18732 Descemetocele, left eye -H18733 Descemetocele, bilateral -H18739 Descemetocele, unspecified eye -H18791 Other corneal deformities, right eye -H18792 Other corneal deformities, left eye -H18793 Other corneal deformities, bilateral -H18799 Other corneal deformities, unspecified eye -H18811 Anesthesia and hypoesthesia of cornea, right eye -H18812 Anesthesia and hypoesthesia of cornea, left eye -H18813 Anesthesia and hypoesthesia of cornea, bilateral -H18819 Anesthesia and hypoesthesia of cornea, unspecified eye -H18821 Corneal disorder due to contact lens, right eye -H18822 Corneal disorder due to contact lens, left eye -H18823 Corneal disorder due to contact lens, bilateral -H18829 Corneal disorder due to contact lens, unspecified eye -H18831 Recurrent erosion of cornea, right eye -H18832 Recurrent erosion of cornea, left eye -H18833 Recurrent erosion of cornea, bilateral -H18839 Recurrent erosion of cornea, unspecified eye -H18891 Other specified disorders of cornea, right eye -H18892 Other specified disorders of cornea, left eye -H18893 Other specified disorders of cornea, bilateral -H18899 Other specified disorders of cornea, unspecified eye -H189 Unspecified disorder of cornea -H2000 Unspecified acute and subacute iridocyclitis -H20011 Primary iridocyclitis, right eye -H20012 Primary iridocyclitis, left eye -H20013 Primary iridocyclitis, bilateral -H20019 Primary iridocyclitis, unspecified eye -H20021 Recurrent acute iridocyclitis, right eye -H20022 Recurrent acute iridocyclitis, left eye -H20023 Recurrent acute iridocyclitis, bilateral -H20029 Recurrent acute iridocyclitis, unspecified eye -H20031 Secondary infectious iridocyclitis, right eye -H20032 Secondary infectious iridocyclitis, left eye -H20033 Secondary infectious iridocyclitis, bilateral -H20039 Secondary infectious iridocyclitis, unspecified eye -H20041 Secondary noninfectious iridocyclitis, right eye -H20042 Secondary noninfectious iridocyclitis, left eye -H20043 Secondary noninfectious iridocyclitis, bilateral -H20049 Secondary noninfectious iridocyclitis, unspecified eye -H20051 Hypopyon, right eye -H20052 Hypopyon, left eye -H20053 Hypopyon, bilateral -H20059 Hypopyon, unspecified eye -H2010 Chronic iridocyclitis, unspecified eye -H2011 Chronic iridocyclitis, right eye -H2012 Chronic iridocyclitis, left eye -H2013 Chronic iridocyclitis, bilateral -H2020 Lens-induced iridocyclitis, unspecified eye -H2021 Lens-induced iridocyclitis, right eye -H2022 Lens-induced iridocyclitis, left eye -H2023 Lens-induced iridocyclitis, bilateral -H20811 Fuchs' heterochromic cyclitis, right eye -H20812 Fuchs' heterochromic cyclitis, left eye -H20813 Fuchs' heterochromic cyclitis, bilateral -H20819 Fuchs' heterochromic cyclitis, unspecified eye -H20821 Vogt-Koyanagi syndrome, right eye -H20822 Vogt-Koyanagi syndrome, left eye -H20823 Vogt-Koyanagi syndrome, bilateral -H20829 Vogt-Koyanagi syndrome, unspecified eye -H209 Unspecified iridocyclitis -H2100 Hyphema, unspecified eye -H2101 Hyphema, right eye -H2102 Hyphema, left eye -H2103 Hyphema, bilateral -H211X1 Other vascular disorders of iris and ciliary body, right eye -H211X2 Other vascular disorders of iris and ciliary body, left eye -H211X3 Other vascular disorders of iris and ciliary body, bilateral -H211X9 Other vascular disorders of iris and ciliary body, unspecified eye -H21211 Degeneration of chamber angle, right eye -H21212 Degeneration of chamber angle, left eye -H21213 Degeneration of chamber angle, bilateral -H21219 Degeneration of chamber angle, unspecified eye -H21221 Degeneration of ciliary body, right eye -H21222 Degeneration of ciliary body, left eye -H21223 Degeneration of ciliary body, bilateral -H21229 Degeneration of ciliary body, unspecified eye -H21231 Degeneration of iris (pigmentary), right eye -H21232 Degeneration of iris (pigmentary), left eye -H21233 Degeneration of iris (pigmentary), bilateral -H21239 Degeneration of iris (pigmentary), unspecified eye -H21241 Degeneration of pupillary margin, right eye -H21242 Degeneration of pupillary margin, left eye -H21243 Degeneration of pupillary margin, bilateral -H21249 Degeneration of pupillary margin, unspecified eye -H21251 Iridoschisis, right eye -H21252 Iridoschisis, left eye -H21253 Iridoschisis, bilateral -H21259 Iridoschisis, unspecified eye -H21261 Iris atrophy (essential) (progressive), right eye -H21262 Iris atrophy (essential) (progressive), left eye -H21263 Iris atrophy (essential) (progressive), bilateral -H21269 Iris atrophy (essential) (progressive), unspecified eye -H21271 Miotic pupillary cyst, right eye -H21272 Miotic pupillary cyst, left eye -H21273 Miotic pupillary cyst, bilateral -H21279 Miotic pupillary cyst, unspecified eye -H2129 Other iris atrophy -H21301 Idiopathic cysts of iris, ciliary body or anterior chamber, right eye -H21302 Idiopathic cysts of iris, ciliary body or anterior chamber, left eye -H21303 Idiopathic cysts of iris, ciliary body or anterior chamber, bilateral -H21309 Idiopathic cysts of iris, ciliary body or anterior chamber, unspecified eye -H21311 Exudative cysts of iris or anterior chamber, right eye -H21312 Exudative cysts of iris or anterior chamber, left eye -H21313 Exudative cysts of iris or anterior chamber, bilateral -H21319 Exudative cysts of iris or anterior chamber, unspecified eye -H21321 Implantation cysts of iris, ciliary body or anterior chamber, right eye -H21322 Implantation cysts of iris, ciliary body or anterior chamber, left eye -H21323 Implantation cysts of iris, ciliary body or anterior chamber, bilateral -H21329 Implantation cysts of iris, ciliary body or anterior chamber, unspecified eye -H21331 Parasitic cyst of iris, ciliary body or anterior chamber, right eye -H21332 Parasitic cyst of iris, ciliary body or anterior chamber, left eye -H21333 Parasitic cyst of iris, ciliary body or anterior chamber, bilateral -H21339 Parasitic cyst of iris, ciliary body or anterior chamber, unspecified eye -H21341 Primary cyst of pars plana, right eye -H21342 Primary cyst of pars plana, left eye -H21343 Primary cyst of pars plana, bilateral -H21349 Primary cyst of pars plana, unspecified eye -H21351 Exudative cyst of pars plana, right eye -H21352 Exudative cyst of pars plana, left eye -H21353 Exudative cyst of pars plana, bilateral -H21359 Exudative cyst of pars plana, unspecified eye -H2140 Pupillary membranes, unspecified eye -H2141 Pupillary membranes, right eye -H2142 Pupillary membranes, left eye -H2143 Pupillary membranes, bilateral -H21501 Unspecified adhesions of iris, right eye -H21502 Unspecified adhesions of iris, left eye -H21503 Unspecified adhesions of iris, bilateral -H21509 Unspecified adhesions of iris and ciliary body, unspecified eye -H21511 Anterior synechiae (iris), right eye -H21512 Anterior synechiae (iris), left eye -H21513 Anterior synechiae (iris), bilateral -H21519 Anterior synechiae (iris), unspecified eye -H21521 Goniosynechiae, right eye -H21522 Goniosynechiae, left eye -H21523 Goniosynechiae, bilateral -H21529 Goniosynechiae, unspecified eye -H21531 Iridodialysis, right eye -H21532 Iridodialysis, left eye -H21533 Iridodialysis, bilateral -H21539 Iridodialysis, unspecified eye -H21541 Posterior synechiae (iris), right eye -H21542 Posterior synechiae (iris), left eye -H21543 Posterior synechiae (iris), bilateral -H21549 Posterior synechiae (iris), unspecified eye -H21551 Recession of chamber angle, right eye -H21552 Recession of chamber angle, left eye -H21553 Recession of chamber angle, bilateral -H21559 Recession of chamber angle, unspecified eye -H21561 Pupillary abnormality, right eye -H21562 Pupillary abnormality, left eye -H21563 Pupillary abnormality, bilateral -H21569 Pupillary abnormality, unspecified eye -H2181 Floppy iris syndrome -H2182 Plateau iris syndrome (post-iridectomy) (postprocedural) -H2189 Other specified disorders of iris and ciliary body -H219 Unspecified disorder of iris and ciliary body -H22 Disorders of iris and ciliary body in diseases classified elsewhere -H25011 Cortical age-related cataract, right eye -H25012 Cortical age-related cataract, left eye -H25013 Cortical age-related cataract, bilateral -H25019 Cortical age-related cataract, unspecified eye -H25031 Anterior subcapsular polar age-related cataract, right eye -H25032 Anterior subcapsular polar age-related cataract, left eye -H25033 Anterior subcapsular polar age-related cataract, bilateral -H25039 Anterior subcapsular polar age-related cataract, unspecified eye -H25041 Posterior subcapsular polar age-related cataract, right eye -H25042 Posterior subcapsular polar age-related cataract, left eye -H25043 Posterior subcapsular polar age-related cataract, bilateral -H25049 Posterior subcapsular polar age-related cataract, unspecified eye -H25091 Other age-related incipient cataract, right eye -H25092 Other age-related incipient cataract, left eye -H25093 Other age-related incipient cataract, bilateral -H25099 Other age-related incipient cataract, unspecified eye -H2510 Age-related nuclear cataract, unspecified eye -H2511 Age-related nuclear cataract, right eye -H2512 Age-related nuclear cataract, left eye -H2513 Age-related nuclear cataract, bilateral -H2520 Age-related cataract, morgagnian type, unspecified eye -H2521 Age-related cataract, morgagnian type, right eye -H2522 Age-related cataract, morgagnian type, left eye -H2523 Age-related cataract, morgagnian type, bilateral -H25811 Combined forms of age-related cataract, right eye -H25812 Combined forms of age-related cataract, left eye -H25813 Combined forms of age-related cataract, bilateral -H25819 Combined forms of age-related cataract, unspecified eye -H2589 Other age-related cataract -H259 Unspecified age-related cataract -H26001 Unspecified infantile and juvenile cataract, right eye -H26002 Unspecified infantile and juvenile cataract, left eye -H26003 Unspecified infantile and juvenile cataract, bilateral -H26009 Unspecified infantile and juvenile cataract, unspecified eye -H26011 Infantile and juvenile cortical, lamellar, or zonular cataract, right eye -H26012 Infantile and juvenile cortical, lamellar, or zonular cataract, left eye -H26013 Infantile and juvenile cortical, lamellar, or zonular cataract, bilateral -H26019 Infantile and juvenile cortical, lamellar, or zonular cataract, unspecified eye -H26031 Infantile and juvenile nuclear cataract, right eye -H26032 Infantile and juvenile nuclear cataract, left eye -H26033 Infantile and juvenile nuclear cataract, bilateral -H26039 Infantile and juvenile nuclear cataract, unspecified eye -H26041 Anterior subcapsular polar infantile and juvenile cataract, right eye -H26042 Anterior subcapsular polar infantile and juvenile cataract, left eye -H26043 Anterior subcapsular polar infantile and juvenile cataract, bilateral -H26049 Anterior subcapsular polar infantile and juvenile cataract, unspecified eye -H26051 Posterior subcapsular polar infantile and juvenile cataract, right eye -H26052 Posterior subcapsular polar infantile and juvenile cataract, left eye -H26053 Posterior subcapsular polar infantile and juvenile cataract, bilateral -H26059 Posterior subcapsular polar infantile and juvenile cataract, unspecified eye -H26061 Combined forms of infantile and juvenile cataract, right eye -H26062 Combined forms of infantile and juvenile cataract, left eye -H26063 Combined forms of infantile and juvenile cataract, bilateral -H26069 Combined forms of infantile and juvenile cataract, unspecified eye -H2609 Other infantile and juvenile cataract -H26101 Unspecified traumatic cataract, right eye -H26102 Unspecified traumatic cataract, left eye -H26103 Unspecified traumatic cataract, bilateral -H26109 Unspecified traumatic cataract, unspecified eye -H26111 Localized traumatic opacities, right eye -H26112 Localized traumatic opacities, left eye -H26113 Localized traumatic opacities, bilateral -H26119 Localized traumatic opacities, unspecified eye -H26121 Partially resolved traumatic cataract, right eye -H26122 Partially resolved traumatic cataract, left eye -H26123 Partially resolved traumatic cataract, bilateral -H26129 Partially resolved traumatic cataract, unspecified eye -H26131 Total traumatic cataract, right eye -H26132 Total traumatic cataract, left eye -H26133 Total traumatic cataract, bilateral -H26139 Total traumatic cataract, unspecified eye -H2620 Unspecified complicated cataract -H26211 Cataract with neovascularization, right eye -H26212 Cataract with neovascularization, left eye -H26213 Cataract with neovascularization, bilateral -H26219 Cataract with neovascularization, unspecified eye -H26221 Cataract secondary to ocular disorders (degenerative) (inflammatory), right eye -H26222 Cataract secondary to ocular disorders (degenerative) (inflammatory), left eye -H26223 Cataract secondary to ocular disorders (degenerative) (inflammatory), bilateral -H26229 Cataract secondary to ocular disorders (degenerative) (inflammatory), unspecified eye -H26231 Glaucomatous flecks (subcapsular), right eye -H26232 Glaucomatous flecks (subcapsular), left eye -H26233 Glaucomatous flecks (subcapsular), bilateral -H26239 Glaucomatous flecks (subcapsular), unspecified eye -H2630 Drug-induced cataract, unspecified eye -H2631 Drug-induced cataract, right eye -H2632 Drug-induced cataract, left eye -H2633 Drug-induced cataract, bilateral -H2640 Unspecified secondary cataract -H26411 Soemmering's ring, right eye -H26412 Soemmering's ring, left eye -H26413 Soemmering's ring, bilateral -H26419 Soemmering's ring, unspecified eye -H26491 Other secondary cataract, right eye -H26492 Other secondary cataract, left eye -H26493 Other secondary cataract, bilateral -H26499 Other secondary cataract, unspecified eye -H268 Other specified cataract -H269 Unspecified cataract -H2700 Aphakia, unspecified eye -H2701 Aphakia, right eye -H2702 Aphakia, left eye -H2703 Aphakia, bilateral -H2710 Unspecified dislocation of lens -H27111 Subluxation of lens, right eye -H27112 Subluxation of lens, left eye -H27113 Subluxation of lens, bilateral -H27119 Subluxation of lens, unspecified eye -H27121 Anterior dislocation of lens, right eye -H27122 Anterior dislocation of lens, left eye -H27123 Anterior dislocation of lens, bilateral -H27129 Anterior dislocation of lens, unspecified eye -H27131 Posterior dislocation of lens, right eye -H27132 Posterior dislocation of lens, left eye -H27133 Posterior dislocation of lens, bilateral -H27139 Posterior dislocation of lens, unspecified eye -H278 Other specified disorders of lens -H279 Unspecified disorder of lens -H28 Cataract in diseases classified elsewhere -H30001 Unspecified focal chorioretinal inflammation, right eye -H30002 Unspecified focal chorioretinal inflammation, left eye -H30003 Unspecified focal chorioretinal inflammation, bilateral -H30009 Unspecified focal chorioretinal inflammation, unspecified eye -H30011 Focal chorioretinal inflammation, juxtapapillary, right eye -H30012 Focal chorioretinal inflammation, juxtapapillary, left eye -H30013 Focal chorioretinal inflammation, juxtapapillary, bilateral -H30019 Focal chorioretinal inflammation, juxtapapillary, unspecified eye -H30021 Focal chorioretinal inflammation of posterior pole, right eye -H30022 Focal chorioretinal inflammation of posterior pole, left eye -H30023 Focal chorioretinal inflammation of posterior pole, bilateral -H30029 Focal chorioretinal inflammation of posterior pole, unspecified eye -H30031 Focal chorioretinal inflammation, peripheral, right eye -H30032 Focal chorioretinal inflammation, peripheral, left eye -H30033 Focal chorioretinal inflammation, peripheral, bilateral -H30039 Focal chorioretinal inflammation, peripheral, unspecified eye -H30041 Focal chorioretinal inflammation, macular or paramacular, right eye -H30042 Focal chorioretinal inflammation, macular or paramacular, left eye -H30043 Focal chorioretinal inflammation, macular or paramacular, bilateral -H30049 Focal chorioretinal inflammation, macular or paramacular, unspecified eye -H30101 Unspecified disseminated chorioretinal inflammation, right eye -H30102 Unspecified disseminated chorioretinal inflammation, left eye -H30103 Unspecified disseminated chorioretinal inflammation, bilateral -H30109 Unspecified disseminated chorioretinal inflammation, unspecified eye -H30111 Disseminated chorioretinal inflammation of posterior pole, right eye -H30112 Disseminated chorioretinal inflammation of posterior pole, left eye -H30113 Disseminated chorioretinal inflammation of posterior pole, bilateral -H30119 Disseminated chorioretinal inflammation of posterior pole, unspecified eye -H30121 Disseminated chorioretinal inflammation, peripheral right eye -H30122 Disseminated chorioretinal inflammation, peripheral, left eye -H30123 Disseminated chorioretinal inflammation, peripheral, bilateral -H30129 Disseminated chorioretinal inflammation, peripheral, unspecified eye -H30131 Disseminated chorioretinal inflammation, generalized, right eye -H30132 Disseminated chorioretinal inflammation, generalized, left eye -H30133 Disseminated chorioretinal inflammation, generalized, bilateral -H30139 Disseminated chorioretinal inflammation, generalized, unspecified eye -H30141 Acute posterior multifocal placoid pigment epitheliopathy, right eye -H30142 Acute posterior multifocal placoid pigment epitheliopathy, left eye -H30143 Acute posterior multifocal placoid pigment epitheliopathy, bilateral -H30149 Acute posterior multifocal placoid pigment epitheliopathy, unspecified eye -H3020 Posterior cyclitis, unspecified eye -H3021 Posterior cyclitis, right eye -H3022 Posterior cyclitis, left eye -H3023 Posterior cyclitis, bilateral -H30811 Harada's disease, right eye -H30812 Harada's disease, left eye -H30813 Harada's disease, bilateral -H30819 Harada's disease, unspecified eye -H30891 Other chorioretinal inflammations, right eye -H30892 Other chorioretinal inflammations, left eye -H30893 Other chorioretinal inflammations, bilateral -H30899 Other chorioretinal inflammations, unspecified eye -H3090 Unspecified chorioretinal inflammation, unspecified eye -H3091 Unspecified chorioretinal inflammation, right eye -H3092 Unspecified chorioretinal inflammation, left eye -H3093 Unspecified chorioretinal inflammation, bilateral -H31001 Unspecified chorioretinal scars, right eye -H31002 Unspecified chorioretinal scars, left eye -H31003 Unspecified chorioretinal scars, bilateral -H31009 Unspecified chorioretinal scars, unspecified eye -H31011 Macula scars of posterior pole (postinflammatory) (post-traumatic), right eye -H31012 Macula scars of posterior pole (postinflammatory) (post-traumatic), left eye -H31013 Macula scars of posterior pole (postinflammatory) (post-traumatic), bilateral -H31019 Macula scars of posterior pole (postinflammatory) (post-traumatic), unspecified eye -H31021 Solar retinopathy, right eye -H31022 Solar retinopathy, left eye -H31023 Solar retinopathy, bilateral -H31029 Solar retinopathy, unspecified eye -H31091 Other chorioretinal scars, right eye -H31092 Other chorioretinal scars, left eye -H31093 Other chorioretinal scars, bilateral -H31099 Other chorioretinal scars, unspecified eye -H31101 Choroidal degeneration, unspecified, right eye -H31102 Choroidal degeneration, unspecified, left eye -H31103 Choroidal degeneration, unspecified, bilateral -H31109 Choroidal degeneration, unspecified, unspecified eye -H31111 Age-related choroidal atrophy, right eye -H31112 Age-related choroidal atrophy, left eye -H31113 Age-related choroidal atrophy, bilateral -H31119 Age-related choroidal atrophy, unspecified eye -H31121 Diffuse secondary atrophy of choroid, right eye -H31122 Diffuse secondary atrophy of choroid, left eye -H31123 Diffuse secondary atrophy of choroid, bilateral -H31129 Diffuse secondary atrophy of choroid, unspecified eye -H3120 Hereditary choroidal dystrophy, unspecified -H3121 Choroideremia -H3122 Choroidal dystrophy (central areolar) (generalized) (peripapillary) -H3123 Gyrate atrophy, choroid -H3129 Other hereditary choroidal dystrophy -H31301 Unspecified choroidal hemorrhage, right eye -H31302 Unspecified choroidal hemorrhage, left eye -H31303 Unspecified choroidal hemorrhage, bilateral -H31309 Unspecified choroidal hemorrhage, unspecified eye -H31311 Expulsive choroidal hemorrhage, right eye -H31312 Expulsive choroidal hemorrhage, left eye -H31313 Expulsive choroidal hemorrhage, bilateral -H31319 Expulsive choroidal hemorrhage, unspecified eye -H31321 Choroidal rupture, right eye -H31322 Choroidal rupture, left eye -H31323 Choroidal rupture, bilateral -H31329 Choroidal rupture, unspecified eye -H31401 Unspecified choroidal detachment, right eye -H31402 Unspecified choroidal detachment, left eye -H31403 Unspecified choroidal detachment, bilateral -H31409 Unspecified choroidal detachment, unspecified eye -H31411 Hemorrhagic choroidal detachment, right eye -H31412 Hemorrhagic choroidal detachment, left eye -H31413 Hemorrhagic choroidal detachment, bilateral -H31419 Hemorrhagic choroidal detachment, unspecified eye -H31421 Serous choroidal detachment, right eye -H31422 Serous choroidal detachment, left eye -H31423 Serous choroidal detachment, bilateral -H31429 Serous choroidal detachment, unspecified eye -H318 Other specified disorders of choroid -H319 Unspecified disorder of choroid -H32 Chorioretinal disorders in diseases classified elsewhere -H33001 Unspecified retinal detachment with retinal break, right eye -H33002 Unspecified retinal detachment with retinal break, left eye -H33003 Unspecified retinal detachment with retinal break, bilateral -H33009 Unspecified retinal detachment with retinal break, unspecified eye -H33011 Retinal detachment with single break, right eye -H33012 Retinal detachment with single break, left eye -H33013 Retinal detachment with single break, bilateral -H33019 Retinal detachment with single break, unspecified eye -H33021 Retinal detachment with multiple breaks, right eye -H33022 Retinal detachment with multiple breaks, left eye -H33023 Retinal detachment with multiple breaks, bilateral -H33029 Retinal detachment with multiple breaks, unspecified eye -H33031 Retinal detachment with giant retinal tear, right eye -H33032 Retinal detachment with giant retinal tear, left eye -H33033 Retinal detachment with giant retinal tear, bilateral -H33039 Retinal detachment with giant retinal tear, unspecified eye -H33041 Retinal detachment with retinal dialysis, right eye -H33042 Retinal detachment with retinal dialysis, left eye -H33043 Retinal detachment with retinal dialysis, bilateral -H33049 Retinal detachment with retinal dialysis, unspecified eye -H33051 Total retinal detachment, right eye -H33052 Total retinal detachment, left eye -H33053 Total retinal detachment, bilateral -H33059 Total retinal detachment, unspecified eye -H33101 Unspecified retinoschisis, right eye -H33102 Unspecified retinoschisis, left eye -H33103 Unspecified retinoschisis, bilateral -H33109 Unspecified retinoschisis, unspecified eye -H33111 Cyst of ora serrata, right eye -H33112 Cyst of ora serrata, left eye -H33113 Cyst of ora serrata, bilateral -H33119 Cyst of ora serrata, unspecified eye -H33121 Parasitic cyst of retina, right eye -H33122 Parasitic cyst of retina, left eye -H33123 Parasitic cyst of retina, bilateral -H33129 Parasitic cyst of retina, unspecified eye -H33191 Other retinoschisis and retinal cysts, right eye -H33192 Other retinoschisis and retinal cysts, left eye -H33193 Other retinoschisis and retinal cysts, bilateral -H33199 Other retinoschisis and retinal cysts, unspecified eye -H3320 Serous retinal detachment, unspecified eye -H3321 Serous retinal detachment, right eye -H3322 Serous retinal detachment, left eye -H3323 Serous retinal detachment, bilateral -H33301 Unspecified retinal break, right eye -H33302 Unspecified retinal break, left eye -H33303 Unspecified retinal break, bilateral -H33309 Unspecified retinal break, unspecified eye -H33311 Horseshoe tear of retina without detachment, right eye -H33312 Horseshoe tear of retina without detachment, left eye -H33313 Horseshoe tear of retina without detachment, bilateral -H33319 Horseshoe tear of retina without detachment, unspecified eye -H33321 Round hole, right eye -H33322 Round hole, left eye -H33323 Round hole, bilateral -H33329 Round hole, unspecified eye -H33331 Multiple defects of retina without detachment, right eye -H33332 Multiple defects of retina without detachment, left eye -H33333 Multiple defects of retina without detachment, bilateral -H33339 Multiple defects of retina without detachment, unspecified eye -H3340 Traction detachment of retina, unspecified eye -H3341 Traction detachment of retina, right eye -H3342 Traction detachment of retina, left eye -H3343 Traction detachment of retina, bilateral -H338 Other retinal detachments -H3400 Transient retinal artery occlusion, unspecified eye -H3401 Transient retinal artery occlusion, right eye -H3402 Transient retinal artery occlusion, left eye -H3403 Transient retinal artery occlusion, bilateral -H3410 Central retinal artery occlusion, unspecified eye -H3411 Central retinal artery occlusion, right eye -H3412 Central retinal artery occlusion, left eye -H3413 Central retinal artery occlusion, bilateral -H34211 Partial retinal artery occlusion, right eye -H34212 Partial retinal artery occlusion, left eye -H34213 Partial retinal artery occlusion, bilateral -H34219 Partial retinal artery occlusion, unspecified eye -H34231 Retinal artery branch occlusion, right eye -H34232 Retinal artery branch occlusion, left eye -H34233 Retinal artery branch occlusion, bilateral -H34239 Retinal artery branch occlusion, unspecified eye -H34811 Central retinal vein occlusion, right eye -H34812 Central retinal vein occlusion, left eye -H34813 Central retinal vein occlusion, bilateral -H34819 Central retinal vein occlusion, unspecified eye -H34821 Venous engorgement, right eye -H34822 Venous engorgement, left eye -H34823 Venous engorgement, bilateral -H34829 Venous engorgement, unspecified eye -H34831 Tributary (branch) retinal vein occlusion, right eye -H34832 Tributary (branch) retinal vein occlusion, left eye -H34833 Tributary (branch) retinal vein occlusion, bilateral -H34839 Tributary (branch) retinal vein occlusion, unspecified eye -H349 Unspecified retinal vascular occlusion -H3500 Unspecified background retinopathy -H35011 Changes in retinal vascular appearance, right eye -H35012 Changes in retinal vascular appearance, left eye -H35013 Changes in retinal vascular appearance, bilateral -H35019 Changes in retinal vascular appearance, unspecified eye -H35021 Exudative retinopathy, right eye -H35022 Exudative retinopathy, left eye -H35023 Exudative retinopathy, bilateral -H35029 Exudative retinopathy, unspecified eye -H35031 Hypertensive retinopathy, right eye -H35032 Hypertensive retinopathy, left eye -H35033 Hypertensive retinopathy, bilateral -H35039 Hypertensive retinopathy, unspecified eye -H35041 Retinal micro-aneurysms, unspecified, right eye -H35042 Retinal micro-aneurysms, unspecified, left eye -H35043 Retinal micro-aneurysms, unspecified, bilateral -H35049 Retinal micro-aneurysms, unspecified, unspecified eye -H35051 Retinal neovascularization, unspecified, right eye -H35052 Retinal neovascularization, unspecified, left eye -H35053 Retinal neovascularization, unspecified, bilateral -H35059 Retinal neovascularization, unspecified, unspecified eye -H35061 Retinal vasculitis, right eye -H35062 Retinal vasculitis, left eye -H35063 Retinal vasculitis, bilateral -H35069 Retinal vasculitis, unspecified eye -H35071 Retinal telangiectasis, right eye -H35072 Retinal telangiectasis, left eye -H35073 Retinal telangiectasis, bilateral -H35079 Retinal telangiectasis, unspecified eye -H3509 Other intraretinal microvascular abnormalities -H35101 Retinopathy of prematurity, unspecified, right eye -H35102 Retinopathy of prematurity, unspecified, left eye -H35103 Retinopathy of prematurity, unspecified, bilateral -H35109 Retinopathy of prematurity, unspecified, unspecified eye -H35111 Retinopathy of prematurity, stage 0, right eye -H35112 Retinopathy of prematurity, stage 0, left eye -H35113 Retinopathy of prematurity, stage 0, bilateral -H35119 Retinopathy of prematurity, stage 0, unspecified eye -H35121 Retinopathy of prematurity, stage 1, right eye -H35122 Retinopathy of prematurity, stage 1, left eye -H35123 Retinopathy of prematurity, stage 1, bilateral -H35129 Retinopathy of prematurity, stage 1, unspecified eye -H35131 Retinopathy of prematurity, stage 2, right eye -H35132 Retinopathy of prematurity, stage 2, left eye -H35133 Retinopathy of prematurity, stage 2, bilateral -H35139 Retinopathy of prematurity, stage 2, unspecified eye -H35141 Retinopathy of prematurity, stage 3, right eye -H35142 Retinopathy of prematurity, stage 3, left eye -H35143 Retinopathy of prematurity, stage 3, bilateral -H35149 Retinopathy of prematurity, stage 3, unspecified eye -H35151 Retinopathy of prematurity, stage 4, right eye -H35152 Retinopathy of prematurity, stage 4, left eye -H35153 Retinopathy of prematurity, stage 4, bilateral -H35159 Retinopathy of prematurity, stage 4, unspecified eye -H35161 Retinopathy of prematurity, stage 5, right eye -H35162 Retinopathy of prematurity, stage 5, left eye -H35163 Retinopathy of prematurity, stage 5, bilateral -H35169 Retinopathy of prematurity, stage 5, unspecified eye -H35171 Retrolental fibroplasia, right eye -H35172 Retrolental fibroplasia, left eye -H35173 Retrolental fibroplasia, bilateral -H35179 Retrolental fibroplasia, unspecified eye -H3520 Other non-diabetic proliferative retinopathy, unspecified eye -H3521 Other non-diabetic proliferative retinopathy, right eye -H3522 Other non-diabetic proliferative retinopathy, left eye -H3523 Other non-diabetic proliferative retinopathy, bilateral -H3530 Unspecified macular degeneration -H3531 Nonexudative age-related macular degeneration -H3532 Exudative age-related macular degeneration -H3533 Angioid streaks of macula -H35341 Macular cyst, hole, or pseudohole, right eye -H35342 Macular cyst, hole, or pseudohole, left eye -H35343 Macular cyst, hole, or pseudohole, bilateral -H35349 Macular cyst, hole, or pseudohole, unspecified eye -H35351 Cystoid macular degeneration, right eye -H35352 Cystoid macular degeneration, left eye -H35353 Cystoid macular degeneration, bilateral -H35359 Cystoid macular degeneration, unspecified eye -H35361 Drusen (degenerative) of macula, right eye -H35362 Drusen (degenerative) of macula, left eye -H35363 Drusen (degenerative) of macula, bilateral -H35369 Drusen (degenerative) of macula, unspecified eye -H35371 Puckering of macula, right eye -H35372 Puckering of macula, left eye -H35373 Puckering of macula, bilateral -H35379 Puckering of macula, unspecified eye -H35381 Toxic maculopathy, right eye -H35382 Toxic maculopathy, left eye -H35383 Toxic maculopathy, bilateral -H35389 Toxic maculopathy, unspecified eye -H3540 Unspecified peripheral retinal degeneration -H35411 Lattice degeneration of retina, right eye -H35412 Lattice degeneration of retina, left eye -H35413 Lattice degeneration of retina, bilateral -H35419 Lattice degeneration of retina, unspecified eye -H35421 Microcystoid degeneration of retina, right eye -H35422 Microcystoid degeneration of retina, left eye -H35423 Microcystoid degeneration of retina, bilateral -H35429 Microcystoid degeneration of retina, unspecified eye -H35431 Paving stone degeneration of retina, right eye -H35432 Paving stone degeneration of retina, left eye -H35433 Paving stone degeneration of retina, bilateral -H35439 Paving stone degeneration of retina, unspecified eye -H35441 Age-related reticular degeneration of retina, right eye -H35442 Age-related reticular degeneration of retina, left eye -H35443 Age-related reticular degeneration of retina, bilateral -H35449 Age-related reticular degeneration of retina, unspecified eye -H35451 Secondary pigmentary degeneration, right eye -H35452 Secondary pigmentary degeneration, left eye -H35453 Secondary pigmentary degeneration, bilateral -H35459 Secondary pigmentary degeneration, unspecified eye -H35461 Secondary vitreoretinal degeneration, right eye -H35462 Secondary vitreoretinal degeneration, left eye -H35463 Secondary vitreoretinal degeneration, bilateral -H35469 Secondary vitreoretinal degeneration, unspecified eye -H3550 Unspecified hereditary retinal dystrophy -H3551 Vitreoretinal dystrophy -H3552 Pigmentary retinal dystrophy -H3553 Other dystrophies primarily involving the sensory retina -H3554 Dystrophies primarily involving the retinal pigment epithelium -H3560 Retinal hemorrhage, unspecified eye -H3561 Retinal hemorrhage, right eye -H3562 Retinal hemorrhage, left eye -H3563 Retinal hemorrhage, bilateral -H3570 Unspecified separation of retinal layers -H35711 Central serous chorioretinopathy, right eye -H35712 Central serous chorioretinopathy, left eye -H35713 Central serous chorioretinopathy, bilateral -H35719 Central serous chorioretinopathy, unspecified eye -H35721 Serous detachment of retinal pigment epithelium, right eye -H35722 Serous detachment of retinal pigment epithelium, left eye -H35723 Serous detachment of retinal pigment epithelium, bilateral -H35729 Serous detachment of retinal pigment epithelium, unspecified eye -H35731 Hemorrhagic detachment of retinal pigment epithelium, right eye -H35732 Hemorrhagic detachment of retinal pigment epithelium, left eye -H35733 Hemorrhagic detachment of retinal pigment epithelium, bilateral -H35739 Hemorrhagic detachment of retinal pigment epithelium, unspecified eye -H3581 Retinal edema -H3582 Retinal ischemia -H3589 Other specified retinal disorders -H359 Unspecified retinal disorder -H36 Retinal disorders in diseases classified elsewhere -H40001 Preglaucoma, unspecified, right eye -H40002 Preglaucoma, unspecified, left eye -H40003 Preglaucoma, unspecified, bilateral -H40009 Preglaucoma, unspecified, unspecified eye -H40011 Open angle with borderline findings, low risk, right eye -H40012 Open angle with borderline findings, low risk, left eye -H40013 Open angle with borderline findings, low risk, bilateral -H40019 Open angle with borderline findings, low risk, unspecified eye -H40021 Open angle with borderline findings, high risk, right eye -H40022 Open angle with borderline findings, high risk, left eye -H40023 Open angle with borderline findings, high risk, bilateral -H40029 Open angle with borderline findings, high risk, unspecified eye -H40031 Anatomical narrow angle, right eye -H40032 Anatomical narrow angle, left eye -H40033 Anatomical narrow angle, bilateral -H40039 Anatomical narrow angle, unspecified eye -H40041 Steroid responder, right eye -H40042 Steroid responder, left eye -H40043 Steroid responder, bilateral -H40049 Steroid responder, unspecified eye -H40051 Ocular hypertension, right eye -H40052 Ocular hypertension, left eye -H40053 Ocular hypertension, bilateral -H40059 Ocular hypertension, unspecified eye -H40061 Primary angle closure without glaucoma damage, right eye -H40062 Primary angle closure without glaucoma damage, left eye -H40063 Primary angle closure without glaucoma damage, bilateral -H40069 Primary angle closure without glaucoma damage, unspecified eye -H4010X0 Unspecified open-angle glaucoma, stage unspecified -H4010X1 Unspecified open-angle glaucoma, mild stage -H4010X2 Unspecified open-angle glaucoma, moderate stage -H4010X3 Unspecified open-angle glaucoma, severe stage -H4010X4 Unspecified open-angle glaucoma, indeterminate stage -H4011X0 Primary open-angle glaucoma, stage unspecified -H4011X1 Primary open-angle glaucoma, mild stage -H4011X2 Primary open-angle glaucoma, moderate stage -H4011X3 Primary open-angle glaucoma, severe stage -H4011X4 Primary open-angle glaucoma, indeterminate stage -H401210 Low-tension glaucoma, right eye, stage unspecified -H401211 Low-tension glaucoma, right eye, mild stage -H401212 Low-tension glaucoma, right eye, moderate stage -H401213 Low-tension glaucoma, right eye, severe stage -H401214 Low-tension glaucoma, right eye, indeterminate stage -H401220 Low-tension glaucoma, left eye, stage unspecified -H401221 Low-tension glaucoma, left eye, mild stage -H401222 Low-tension glaucoma, left eye, moderate stage -H401223 Low-tension glaucoma, left eye, severe stage -H401224 Low-tension glaucoma, left eye, indeterminate stage -H401230 Low-tension glaucoma, bilateral, stage unspecified -H401231 Low-tension glaucoma, bilateral, mild stage -H401232 Low-tension glaucoma, bilateral, moderate stage -H401233 Low-tension glaucoma, bilateral, severe stage -H401234 Low-tension glaucoma, bilateral, indeterminate stage -H401290 Low-tension glaucoma, unspecified eye, stage unspecified -H401291 Low-tension glaucoma, unspecified eye, mild stage -H401292 Low-tension glaucoma, unspecified eye, moderate stage -H401293 Low-tension glaucoma, unspecified eye, severe stage -H401294 Low-tension glaucoma, unspecified eye, indeterminate stage -H401310 Pigmentary glaucoma, right eye, stage unspecified -H401311 Pigmentary glaucoma, right eye, mild stage -H401312 Pigmentary glaucoma, right eye, moderate stage -H401313 Pigmentary glaucoma, right eye, severe stage -H401314 Pigmentary glaucoma, right eye, indeterminate stage -H401320 Pigmentary glaucoma, left eye, stage unspecified -H401321 Pigmentary glaucoma, left eye, mild stage -H401322 Pigmentary glaucoma, left eye, moderate stage -H401323 Pigmentary glaucoma, left eye, severe stage -H401324 Pigmentary glaucoma, left eye, indeterminate stage -H401330 Pigmentary glaucoma, bilateral, stage unspecified -H401331 Pigmentary glaucoma, bilateral, mild stage -H401332 Pigmentary glaucoma, bilateral, moderate stage -H401333 Pigmentary glaucoma, bilateral, severe stage -H401334 Pigmentary glaucoma, bilateral, indeterminate stage -H401390 Pigmentary glaucoma, unspecified eye, stage unspecified -H401391 Pigmentary glaucoma, unspecified eye, mild stage -H401392 Pigmentary glaucoma, unspecified eye, moderate stage -H401393 Pigmentary glaucoma, unspecified eye, severe stage -H401394 Pigmentary glaucoma, unspecified eye, indeterminate stage -H401410 Capsular glaucoma with pseudoexfoliation of lens, right eye, stage unspecified -H401411 Capsular glaucoma with pseudoexfoliation of lens, right eye, mild stage -H401412 Capsular glaucoma with pseudoexfoliation of lens, right eye, moderate stage -H401413 Capsular glaucoma with pseudoexfoliation of lens, right eye, severe stage -H401414 Capsular glaucoma with pseudoexfoliation of lens, right eye, indeterminate stage -H401420 Capsular glaucoma with pseudoexfoliation of lens, left eye, stage unspecified -H401421 Capsular glaucoma with pseudoexfoliation of lens, left eye, mild stage -H401422 Capsular glaucoma with pseudoexfoliation of lens, left eye, moderate stage -H401423 Capsular glaucoma with pseudoexfoliation of lens, left eye, severe stage -H401424 Capsular glaucoma with pseudoexfoliation of lens, left eye, indeterminate stage -H401430 Capsular glaucoma with pseudoexfoliation of lens, bilateral, stage unspecified -H401431 Capsular glaucoma with pseudoexfoliation of lens, bilateral, mild stage -H401432 Capsular glaucoma with pseudoexfoliation of lens, bilateral, moderate stage -H401433 Capsular glaucoma with pseudoexfoliation of lens, bilateral, severe stage -H401434 Capsular glaucoma with pseudoexfoliation of lens, bilateral, indeterminate stage -H401490 Capsular glaucoma with pseudoexfoliation of lens, unspecified eye, stage unspecified -H401491 Capsular glaucoma with pseudoexfoliation of lens, unspecified eye, mild stage -H401492 Capsular glaucoma with pseudoexfoliation of lens, unspecified eye, moderate stage -H401493 Capsular glaucoma with pseudoexfoliation of lens, unspecified eye, severe stage -H401494 Capsular glaucoma with pseudoexfoliation of lens, unspecified eye, indeterminate stage -H40151 Residual stage of open-angle glaucoma, right eye -H40152 Residual stage of open-angle glaucoma, left eye -H40153 Residual stage of open-angle glaucoma, bilateral -H40159 Residual stage of open-angle glaucoma, unspecified eye -H4020X0 Unspecified primary angle-closure glaucoma, stage unspecified -H4020X1 Unspecified primary angle-closure glaucoma, mild stage -H4020X2 Unspecified primary angle-closure glaucoma, moderate stage -H4020X3 Unspecified primary angle-closure glaucoma, severe stage -H4020X4 Unspecified primary angle-closure glaucoma, indeterminate stage -H40211 Acute angle-closure glaucoma, right eye -H40212 Acute angle-closure glaucoma, left eye -H40213 Acute angle-closure glaucoma, bilateral -H40219 Acute angle-closure glaucoma, unspecified eye -H402210 Chronic angle-closure glaucoma, right eye, stage unspecified -H402211 Chronic angle-closure glaucoma, right eye, mild stage -H402212 Chronic angle-closure glaucoma, right eye, moderate stage -H402213 Chronic angle-closure glaucoma, right eye, severe stage -H402214 Chronic angle-closure glaucoma, right eye, indeterminate stage -H402220 Chronic angle-closure glaucoma, left eye, stage unspecified -H402221 Chronic angle-closure glaucoma, left eye, mild stage -H402222 Chronic angle-closure glaucoma, left eye, moderate stage -H402223 Chronic angle-closure glaucoma, left eye, severe stage -H402224 Chronic angle-closure glaucoma, left eye, indeterminate stage -H402230 Chronic angle-closure glaucoma, bilateral, stage unspecified -H402231 Chronic angle-closure glaucoma, bilateral, mild stage -H402232 Chronic angle-closure glaucoma, bilateral, moderate stage -H402233 Chronic angle-closure glaucoma, bilateral, severe stage -H402234 Chronic angle-closure glaucoma, bilateral, indeterminate stage -H402290 Chronic angle-closure glaucoma, unspecified eye, stage unspecified -H402291 Chronic angle-closure glaucoma, unspecified eye, mild stage -H402292 Chronic angle-closure glaucoma, unspecified eye, moderate stage -H402293 Chronic angle-closure glaucoma, unspecified eye, severe stage -H402294 Chronic angle-closure glaucoma, unspecified eye, indeterminate stage -H40231 Intermittent angle-closure glaucoma, right eye -H40232 Intermittent angle-closure glaucoma, left eye -H40233 Intermittent angle-closure glaucoma, bilateral -H40239 Intermittent angle-closure glaucoma, unspecified eye -H40241 Residual stage of angle-closure glaucoma, right eye -H40242 Residual stage of angle-closure glaucoma, left eye -H40243 Residual stage of angle-closure glaucoma, bilateral -H40249 Residual stage of angle-closure glaucoma, unspecified eye -H4030X0 Glaucoma secondary to eye trauma, unspecified eye, stage unspecified -H4030X1 Glaucoma secondary to eye trauma, unspecified eye, mild stage -H4030X2 Glaucoma secondary to eye trauma, unspecified eye, moderate stage -H4030X3 Glaucoma secondary to eye trauma, unspecified eye, severe stage -H4030X4 Glaucoma secondary to eye trauma, unspecified eye, indeterminate stage -H4031X0 Glaucoma secondary to eye trauma, right eye, stage unspecified -H4031X1 Glaucoma secondary to eye trauma, right eye, mild stage -H4031X2 Glaucoma secondary to eye trauma, right eye, moderate stage -H4031X3 Glaucoma secondary to eye trauma, right eye, severe stage -H4031X4 Glaucoma secondary to eye trauma, right eye, indeterminate stage -H4032X0 Glaucoma secondary to eye trauma, left eye, stage unspecified -H4032X1 Glaucoma secondary to eye trauma, left eye, mild stage -H4032X2 Glaucoma secondary to eye trauma, left eye, moderate stage -H4032X3 Glaucoma secondary to eye trauma, left eye, severe stage -H4032X4 Glaucoma secondary to eye trauma, left eye, indeterminate stage -H4033X0 Glaucoma secondary to eye trauma, bilateral, stage unspecified -H4033X1 Glaucoma secondary to eye trauma, bilateral, mild stage -H4033X2 Glaucoma secondary to eye trauma, bilateral, moderate stage -H4033X3 Glaucoma secondary to eye trauma, bilateral, severe stage -H4033X4 Glaucoma secondary to eye trauma, bilateral, indeterminate stage -H4040X0 Glaucoma secondary to eye inflammation, unspecified eye, stage unspecified -H4040X1 Glaucoma secondary to eye inflammation, unspecified eye, mild stage -H4040X2 Glaucoma secondary to eye inflammation, unspecified eye, moderate stage -H4040X3 Glaucoma secondary to eye inflammation, unspecified eye, severe stage -H4040X4 Glaucoma secondary to eye inflammation, unspecified eye, indeterminate stage -H4041X0 Glaucoma secondary to eye inflammation, right eye, stage unspecified -H4041X1 Glaucoma secondary to eye inflammation, right eye, mild stage -H4041X2 Glaucoma secondary to eye inflammation, right eye, moderate stage -H4041X3 Glaucoma secondary to eye inflammation, right eye, severe stage -H4041X4 Glaucoma secondary to eye inflammation, right eye, indeterminate stage -H4042X0 Glaucoma secondary to eye inflammation, left eye, stage unspecified -H4042X1 Glaucoma secondary to eye inflammation, left eye, mild stage -H4042X2 Glaucoma secondary to eye inflammation, left eye, moderate stage -H4042X3 Glaucoma secondary to eye inflammation, left eye, severe stage -H4042X4 Glaucoma secondary to eye inflammation, left eye, indeterminate stage -H4043X0 Glaucoma secondary to eye inflammation, bilateral, stage unspecified -H4043X1 Glaucoma secondary to eye inflammation, bilateral, mild stage -H4043X2 Glaucoma secondary to eye inflammation, bilateral, moderate stage -H4043X3 Glaucoma secondary to eye inflammation, bilateral, severe stage -H4043X4 Glaucoma secondary to eye inflammation, bilateral, indeterminate stage -H4050X0 Glaucoma secondary to other eye disorders, unspecified eye, stage unspecified -H4050X1 Glaucoma secondary to other eye disorders, unspecified eye, mild stage -H4050X2 Glaucoma secondary to other eye disorders, unspecified eye, moderate stage -H4050X3 Glaucoma secondary to other eye disorders, unspecified eye, severe stage -H4050X4 Glaucoma secondary to other eye disorders, unspecified eye, indeterminate stage -H4051X0 Glaucoma secondary to other eye disorders, right eye, stage unspecified -H4051X1 Glaucoma secondary to other eye disorders, right eye, mild stage -H4051X2 Glaucoma secondary to other eye disorders, right eye, moderate stage -H4051X3 Glaucoma secondary to other eye disorders, right eye, severe stage -H4051X4 Glaucoma secondary to other eye disorders, right eye, indeterminate stage -H4052X0 Glaucoma secondary to other eye disorders, left eye, stage unspecified -H4052X1 Glaucoma secondary to other eye disorders, left eye, mild stage -H4052X2 Glaucoma secondary to other eye disorders, left eye, moderate stage -H4052X3 Glaucoma secondary to other eye disorders, left eye, severe stage -H4052X4 Glaucoma secondary to other eye disorders, left eye, indeterminate stage -H4053X0 Glaucoma secondary to other eye disorders, bilateral, stage unspecified -H4053X1 Glaucoma secondary to other eye disorders, bilateral, mild stage -H4053X2 Glaucoma secondary to other eye disorders, bilateral, moderate stage -H4053X3 Glaucoma secondary to other eye disorders, bilateral, severe stage -H4053X4 Glaucoma secondary to other eye disorders, bilateral, indeterminate stage -H4060X0 Glaucoma secondary to drugs, unspecified eye, stage unspecified -H4060X1 Glaucoma secondary to drugs, unspecified eye, mild stage -H4060X2 Glaucoma secondary to drugs, unspecified eye, moderate stage -H4060X3 Glaucoma secondary to drugs, unspecified eye, severe stage -H4060X4 Glaucoma secondary to drugs, unspecified eye, indeterminate stage -H4061X0 Glaucoma secondary to drugs, right eye, stage unspecified -H4061X1 Glaucoma secondary to drugs, right eye, mild stage -H4061X2 Glaucoma secondary to drugs, right eye, moderate stage -H4061X3 Glaucoma secondary to drugs, right eye, severe stage -H4061X4 Glaucoma secondary to drugs, right eye, indeterminate stage -H4062X0 Glaucoma secondary to drugs, left eye, stage unspecified -H4062X1 Glaucoma secondary to drugs, left eye, mild stage -H4062X2 Glaucoma secondary to drugs, left eye, moderate stage -H4062X3 Glaucoma secondary to drugs, left eye, severe stage -H4062X4 Glaucoma secondary to drugs, left eye, indeterminate stage -H4063X0 Glaucoma secondary to drugs, bilateral, stage unspecified -H4063X1 Glaucoma secondary to drugs, bilateral, mild stage -H4063X2 Glaucoma secondary to drugs, bilateral, moderate stage -H4063X3 Glaucoma secondary to drugs, bilateral, severe stage -H4063X4 Glaucoma secondary to drugs, bilateral, indeterminate stage -H40811 Glaucoma with increased episcleral venous pressure, right eye -H40812 Glaucoma with increased episcleral venous pressure, left eye -H40813 Glaucoma with increased episcleral venous pressure, bilateral -H40819 Glaucoma with increased episcleral venous pressure, unspecified eye -H40821 Hypersecretion glaucoma, right eye -H40822 Hypersecretion glaucoma, left eye -H40823 Hypersecretion glaucoma, bilateral -H40829 Hypersecretion glaucoma, unspecified eye -H40831 Aqueous misdirection, right eye -H40832 Aqueous misdirection, left eye -H40833 Aqueous misdirection, bilateral -H40839 Aqueous misdirection, unspecified eye -H4089 Other specified glaucoma -H409 Unspecified glaucoma -H42 Glaucoma in diseases classified elsewhere -H4300 Vitreous prolapse, unspecified eye -H4301 Vitreous prolapse, right eye -H4302 Vitreous prolapse, left eye -H4303 Vitreous prolapse, bilateral -H4310 Vitreous hemorrhage, unspecified eye -H4311 Vitreous hemorrhage, right eye -H4312 Vitreous hemorrhage, left eye -H4313 Vitreous hemorrhage, bilateral -H4320 Crystalline deposits in vitreous body, unspecified eye -H4321 Crystalline deposits in vitreous body, right eye -H4322 Crystalline deposits in vitreous body, left eye -H4323 Crystalline deposits in vitreous body, bilateral -H43311 Vitreous membranes and strands, right eye -H43312 Vitreous membranes and strands, left eye -H43313 Vitreous membranes and strands, bilateral -H43319 Vitreous membranes and strands, unspecified eye -H43391 Other vitreous opacities, right eye -H43392 Other vitreous opacities, left eye -H43393 Other vitreous opacities, bilateral -H43399 Other vitreous opacities, unspecified eye -H43811 Vitreous degeneration, right eye -H43812 Vitreous degeneration, left eye -H43813 Vitreous degeneration, bilateral -H43819 Vitreous degeneration, unspecified eye -H43821 Vitreomacular adhesion, right eye -H43822 Vitreomacular adhesion, left eye -H43823 Vitreomacular adhesion, bilateral -H43829 Vitreomacular adhesion, unspecified eye -H4389 Other disorders of vitreous body -H439 Unspecified disorder of vitreous body -H44001 Unspecified purulent endophthalmitis, right eye -H44002 Unspecified purulent endophthalmitis, left eye -H44003 Unspecified purulent endophthalmitis, bilateral -H44009 Unspecified purulent endophthalmitis, unspecified eye -H44011 Panophthalmitis (acute), right eye -H44012 Panophthalmitis (acute), left eye -H44013 Panophthalmitis (acute), bilateral -H44019 Panophthalmitis (acute), unspecified eye -H44021 Vitreous abscess (chronic), right eye -H44022 Vitreous abscess (chronic), left eye -H44023 Vitreous abscess (chronic), bilateral -H44029 Vitreous abscess (chronic), unspecified eye -H44111 Panuveitis, right eye -H44112 Panuveitis, left eye -H44113 Panuveitis, bilateral -H44119 Panuveitis, unspecified eye -H44121 Parasitic endophthalmitis, unspecified, right eye -H44122 Parasitic endophthalmitis, unspecified, left eye -H44123 Parasitic endophthalmitis, unspecified, bilateral -H44129 Parasitic endophthalmitis, unspecified, unspecified eye -H44131 Sympathetic uveitis, right eye -H44132 Sympathetic uveitis, left eye -H44133 Sympathetic uveitis, bilateral -H44139 Sympathetic uveitis, unspecified eye -H4419 Other endophthalmitis -H4420 Degenerative myopia, unspecified eye -H4421 Degenerative myopia, right eye -H4422 Degenerative myopia, left eye -H4423 Degenerative myopia, bilateral -H4430 Unspecified degenerative disorder of globe -H44311 Chalcosis, right eye -H44312 Chalcosis, left eye -H44313 Chalcosis, bilateral -H44319 Chalcosis, unspecified eye -H44321 Siderosis of eye, right eye -H44322 Siderosis of eye, left eye -H44323 Siderosis of eye, bilateral -H44329 Siderosis of eye, unspecified eye -H44391 Other degenerative disorders of globe, right eye -H44392 Other degenerative disorders of globe, left eye -H44393 Other degenerative disorders of globe, bilateral -H44399 Other degenerative disorders of globe, unspecified eye -H4440 Unspecified hypotony of eye -H44411 Flat anterior chamber hypotony of right eye -H44412 Flat anterior chamber hypotony of left eye -H44413 Flat anterior chamber hypotony of eye, bilateral -H44419 Flat anterior chamber hypotony of unspecified eye -H44421 Hypotony of right eye due to ocular fistula -H44422 Hypotony of left eye due to ocular fistula -H44423 Hypotony of eye due to ocular fistula, bilateral -H44429 Hypotony of unspecified eye due to ocular fistula -H44431 Hypotony of eye due to other ocular disorders, right eye -H44432 Hypotony of eye due to other ocular disorders, left eye -H44433 Hypotony of eye due to other ocular disorders, bilateral -H44439 Hypotony of eye due to other ocular disorders, unspecified eye -H44441 Primary hypotony of right eye -H44442 Primary hypotony of left eye -H44443 Primary hypotony of eye, bilateral -H44449 Primary hypotony of unspecified eye -H4450 Unspecified degenerated conditions of globe -H44511 Absolute glaucoma, right eye -H44512 Absolute glaucoma, left eye -H44513 Absolute glaucoma, bilateral -H44519 Absolute glaucoma, unspecified eye -H44521 Atrophy of globe, right eye -H44522 Atrophy of globe, left eye -H44523 Atrophy of globe, bilateral -H44529 Atrophy of globe, unspecified eye -H44531 Leucocoria, right eye -H44532 Leucocoria, left eye -H44533 Leucocoria, bilateral -H44539 Leucocoria, unspecified eye -H44601 Unspecified retained (old) intraocular foreign body, magnetic, right eye -H44602 Unspecified retained (old) intraocular foreign body, magnetic, left eye -H44603 Unspecified retained (old) intraocular foreign body, magnetic, bilateral -H44609 Unspecified retained (old) intraocular foreign body, magnetic, unspecified eye -H44611 Retained (old) magnetic foreign body in anterior chamber, right eye -H44612 Retained (old) magnetic foreign body in anterior chamber, left eye -H44613 Retained (old) magnetic foreign body in anterior chamber, bilateral -H44619 Retained (old) magnetic foreign body in anterior chamber, unspecified eye -H44621 Retained (old) magnetic foreign body in iris or ciliary body, right eye -H44622 Retained (old) magnetic foreign body in iris or ciliary body, left eye -H44623 Retained (old) magnetic foreign body in iris or ciliary body, bilateral -H44629 Retained (old) magnetic foreign body in iris or ciliary body, unspecified eye -H44631 Retained (old) magnetic foreign body in lens, right eye -H44632 Retained (old) magnetic foreign body in lens, left eye -H44633 Retained (old) magnetic foreign body in lens, bilateral -H44639 Retained (old) magnetic foreign body in lens, unspecified eye -H44641 Retained (old) magnetic foreign body in posterior wall of globe, right eye -H44642 Retained (old) magnetic foreign body in posterior wall of globe, left eye -H44643 Retained (old) magnetic foreign body in posterior wall of globe, bilateral -H44649 Retained (old) magnetic foreign body in posterior wall of globe, unspecified eye -H44651 Retained (old) magnetic foreign body in vitreous body, right eye -H44652 Retained (old) magnetic foreign body in vitreous body, left eye -H44653 Retained (old) magnetic foreign body in vitreous body, bilateral -H44659 Retained (old) magnetic foreign body in vitreous body, unspecified eye -H44691 Retained (old) intraocular foreign body, magnetic, in other or multiple sites, right eye -H44692 Retained (old) intraocular foreign body, magnetic, in other or multiple sites, left eye -H44693 Retained (old) intraocular foreign body, magnetic, in other or multiple sites, bilateral -H44699 Retained (old) intraocular foreign body, magnetic, in other or multiple sites, unspecified eye -H44701 Unspecified retained (old) intraocular foreign body, nonmagnetic, right eye -H44702 Unspecified retained (old) intraocular foreign body, nonmagnetic, left eye -H44703 Unspecified retained (old) intraocular foreign body, nonmagnetic, bilateral -H44709 Unspecified retained (old) intraocular foreign body, nonmagnetic, unspecified eye -H44711 Retained (nonmagnetic) (old) foreign body in anterior chamber, right eye -H44712 Retained (nonmagnetic) (old) foreign body in anterior chamber, left eye -H44713 Retained (nonmagnetic) (old) foreign body in anterior chamber, bilateral -H44719 Retained (nonmagnetic) (old) foreign body in anterior chamber, unspecified eye -H44721 Retained (nonmagnetic) (old) foreign body in iris or ciliary body, right eye -H44722 Retained (nonmagnetic) (old) foreign body in iris or ciliary body, left eye -H44723 Retained (nonmagnetic) (old) foreign body in iris or ciliary body, bilateral -H44729 Retained (nonmagnetic) (old) foreign body in iris or ciliary body, unspecified eye -H44731 Retained (nonmagnetic) (old) foreign body in lens, right eye -H44732 Retained (nonmagnetic) (old) foreign body in lens, left eye -H44733 Retained (nonmagnetic) (old) foreign body in lens, bilateral -H44739 Retained (nonmagnetic) (old) foreign body in lens, unspecified eye -H44741 Retained (nonmagnetic) (old) foreign body in posterior wall of globe, right eye -H44742 Retained (nonmagnetic) (old) foreign body in posterior wall of globe, left eye -H44743 Retained (nonmagnetic) (old) foreign body in posterior wall of globe, bilateral -H44749 Retained (nonmagnetic) (old) foreign body in posterior wall of globe, unspecified eye -H44751 Retained (nonmagnetic) (old) foreign body in vitreous body, right eye -H44752 Retained (nonmagnetic) (old) foreign body in vitreous body, left eye -H44753 Retained (nonmagnetic) (old) foreign body in vitreous body, bilateral -H44759 Retained (nonmagnetic) (old) foreign body in vitreous body, unspecified eye -H44791 Retained (old) intraocular foreign body, nonmagnetic, in other or multiple sites, right eye -H44792 Retained (old) intraocular foreign body, nonmagnetic, in other or multiple sites, left eye -H44793 Retained (old) intraocular foreign body, nonmagnetic, in other or multiple sites, bilateral -H44799 Retained (old) intraocular foreign body, nonmagnetic, in other or multiple sites, unspecified eye -H44811 Hemophthalmos, right eye -H44812 Hemophthalmos, left eye -H44813 Hemophthalmos, bilateral -H44819 Hemophthalmos, unspecified eye -H44821 Luxation of globe, right eye -H44822 Luxation of globe, left eye -H44823 Luxation of globe, bilateral -H44829 Luxation of globe, unspecified eye -H4489 Other disorders of globe -H449 Unspecified disorder of globe -H4600 Optic papillitis, unspecified eye -H4601 Optic papillitis, right eye -H4602 Optic papillitis, left eye -H4603 Optic papillitis, bilateral -H4610 Retrobulbar neuritis, unspecified eye -H4611 Retrobulbar neuritis, right eye -H4612 Retrobulbar neuritis, left eye -H4613 Retrobulbar neuritis, bilateral -H462 Nutritional optic neuropathy -H463 Toxic optic neuropathy -H468 Other optic neuritis -H469 Unspecified optic neuritis -H47011 Ischemic optic neuropathy, right eye -H47012 Ischemic optic neuropathy, left eye -H47013 Ischemic optic neuropathy, bilateral -H47019 Ischemic optic neuropathy, unspecified eye -H47021 Hemorrhage in optic nerve sheath, right eye -H47022 Hemorrhage in optic nerve sheath, left eye -H47023 Hemorrhage in optic nerve sheath, bilateral -H47029 Hemorrhage in optic nerve sheath, unspecified eye -H47031 Optic nerve hypoplasia, right eye -H47032 Optic nerve hypoplasia, left eye -H47033 Optic nerve hypoplasia, bilateral -H47039 Optic nerve hypoplasia, unspecified eye -H47091 Other disorders of optic nerve, not elsewhere classified, right eye -H47092 Other disorders of optic nerve, not elsewhere classified, left eye -H47093 Other disorders of optic nerve, not elsewhere classified, bilateral -H47099 Other disorders of optic nerve, not elsewhere classified, unspecified eye -H4710 Unspecified papilledema -H4711 Papilledema associated with increased intracranial pressure -H4712 Papilledema associated with decreased ocular pressure -H4713 Papilledema associated with retinal disorder -H47141 Foster-Kennedy syndrome, right eye -H47142 Foster-Kennedy syndrome, left eye -H47143 Foster-Kennedy syndrome, bilateral -H47149 Foster-Kennedy syndrome, unspecified eye -H4720 Unspecified optic atrophy -H47211 Primary optic atrophy, right eye -H47212 Primary optic atrophy, left eye -H47213 Primary optic atrophy, bilateral -H47219 Primary optic atrophy, unspecified eye -H4722 Hereditary optic atrophy -H47231 Glaucomatous optic atrophy, right eye -H47232 Glaucomatous optic atrophy, left eye -H47233 Glaucomatous optic atrophy, bilateral -H47239 Glaucomatous optic atrophy, unspecified eye -H47291 Other optic atrophy, right eye -H47292 Other optic atrophy, left eye -H47293 Other optic atrophy, bilateral -H47299 Other optic atrophy, unspecified eye -H47311 Coloboma of optic disc, right eye -H47312 Coloboma of optic disc, left eye -H47313 Coloboma of optic disc, bilateral -H47319 Coloboma of optic disc, unspecified eye -H47321 Drusen of optic disc, right eye -H47322 Drusen of optic disc, left eye -H47323 Drusen of optic disc, bilateral -H47329 Drusen of optic disc, unspecified eye -H47331 Pseudopapilledema of optic disc, right eye -H47332 Pseudopapilledema of optic disc, left eye -H47333 Pseudopapilledema of optic disc, bilateral -H47339 Pseudopapilledema of optic disc, unspecified eye -H47391 Other disorders of optic disc, right eye -H47392 Other disorders of optic disc, left eye -H47393 Other disorders of optic disc, bilateral -H47399 Other disorders of optic disc, unspecified eye -H4741 Disorders of optic chiasm in (due to) inflammatory disorders -H4742 Disorders of optic chiasm in (due to) neoplasm -H4743 Disorders of optic chiasm in (due to) vascular disorders -H4749 Disorders of optic chiasm in (due to) other disorders -H47511 Disorders of visual pathways in (due to) inflammatory disorders, right side -H47512 Disorders of visual pathways in (due to) inflammatory disorders, left side -H47519 Disorders of visual pathways in (due to) inflammatory disorders, unspecified side -H47521 Disorders of visual pathways in (due to) neoplasm, right side -H47522 Disorders of visual pathways in (due to) neoplasm, left side -H47529 Disorders of visual pathways in (due to) neoplasm, unspecified side -H47531 Disorders of visual pathways in (due to) vascular disorders, right side -H47532 Disorders of visual pathways in (due to) vascular disorders, left side -H47539 Disorders of visual pathways in (due to) vascular disorders, unspecified side -H47611 Cortical blindness, right side of brain -H47612 Cortical blindness, left side of brain -H47619 Cortical blindness, unspecified side of brain -H47621 Disorders of visual cortex in (due to) inflammatory disorders, right side of brain -H47622 Disorders of visual cortex in (due to) inflammatory disorders, left side of brain -H47629 Disorders of visual cortex in (due to) inflammatory disorders, unspecified side of brain -H47631 Disorders of visual cortex in (due to) neoplasm, right side of brain -H47632 Disorders of visual cortex in (due to) neoplasm, left side of brain -H47639 Disorders of visual cortex in (due to) neoplasm, unspecified side of brain -H47641 Disorders of visual cortex in (due to) vascular disorders, right side of brain -H47642 Disorders of visual cortex in (due to) vascular disorders, left side of brain -H47649 Disorders of visual cortex in (due to) vascular disorders, unspecified side of brain -H479 Unspecified disorder of visual pathways -H4900 Third [oculomotor] nerve palsy, unspecified eye -H4901 Third [oculomotor] nerve palsy, right eye -H4902 Third [oculomotor] nerve palsy, left eye -H4903 Third [oculomotor] nerve palsy, bilateral -H4910 Fourth [trochlear] nerve palsy, unspecified eye -H4911 Fourth [trochlear] nerve palsy, right eye -H4912 Fourth [trochlear] nerve palsy, left eye -H4913 Fourth [trochlear] nerve palsy, bilateral -H4920 Sixth [abducent] nerve palsy, unspecified eye -H4921 Sixth [abducent] nerve palsy, right eye -H4922 Sixth [abducent] nerve palsy, left eye -H4923 Sixth [abducent] nerve palsy, bilateral -H4930 Total (external) ophthalmoplegia, unspecified eye -H4931 Total (external) ophthalmoplegia, right eye -H4932 Total (external) ophthalmoplegia, left eye -H4933 Total (external) ophthalmoplegia, bilateral -H4940 Progressive external ophthalmoplegia, unspecified eye -H4941 Progressive external ophthalmoplegia, right eye -H4942 Progressive external ophthalmoplegia, left eye -H4943 Progressive external ophthalmoplegia, bilateral -H49811 Kearns-Sayre syndrome, right eye -H49812 Kearns-Sayre syndrome, left eye -H49813 Kearns-Sayre syndrome, bilateral -H49819 Kearns-Sayre syndrome, unspecified eye -H49881 Other paralytic strabismus, right eye -H49882 Other paralytic strabismus, left eye -H49883 Other paralytic strabismus, bilateral -H49889 Other paralytic strabismus, unspecified eye -H499 Unspecified paralytic strabismus -H5000 Unspecified esotropia -H50011 Monocular esotropia, right eye -H50012 Monocular esotropia, left eye -H50021 Monocular esotropia with A pattern, right eye -H50022 Monocular esotropia with A pattern, left eye -H50031 Monocular esotropia with V pattern, right eye -H50032 Monocular esotropia with V pattern, left eye -H50041 Monocular esotropia with other noncomitancies, right eye -H50042 Monocular esotropia with other noncomitancies, left eye -H5005 Alternating esotropia -H5006 Alternating esotropia with A pattern -H5007 Alternating esotropia with V pattern -H5008 Alternating esotropia with other noncomitancies -H5010 Unspecified exotropia -H50111 Monocular exotropia, right eye -H50112 Monocular exotropia, left eye -H50121 Monocular exotropia with A pattern, right eye -H50122 Monocular exotropia with A pattern, left eye -H50131 Monocular exotropia with V pattern, right eye -H50132 Monocular exotropia with V pattern, left eye -H50141 Monocular exotropia with other noncomitancies, right eye -H50142 Monocular exotropia with other noncomitancies, left eye -H5015 Alternating exotropia -H5016 Alternating exotropia with A pattern -H5017 Alternating exotropia with V pattern -H5018 Alternating exotropia with other noncomitancies -H5021 Vertical strabismus, right eye -H5022 Vertical strabismus, left eye -H5030 Unspecified intermittent heterotropia -H50311 Intermittent monocular esotropia, right eye -H50312 Intermittent monocular esotropia, left eye -H5032 Intermittent alternating esotropia -H50331 Intermittent monocular exotropia, right eye -H50332 Intermittent monocular exotropia, left eye -H5034 Intermittent alternating exotropia -H5040 Unspecified heterotropia -H50411 Cyclotropia, right eye -H50412 Cyclotropia, left eye -H5042 Monofixation syndrome -H5043 Accommodative component in esotropia -H5050 Unspecified heterophoria -H5051 Esophoria -H5052 Exophoria -H5053 Vertical heterophoria -H5054 Cyclophoria -H5055 Alternating heterophoria -H5060 Mechanical strabismus, unspecified -H50611 Brown's sheath syndrome, right eye -H50612 Brown's sheath syndrome, left eye -H5069 Other mechanical strabismus -H50811 Duane's syndrome, right eye -H50812 Duane's syndrome, left eye -H5089 Other specified strabismus -H509 Unspecified strabismus -H510 Palsy (spasm) of conjugate gaze -H5111 Convergence insufficiency -H5112 Convergence excess -H5120 Internuclear ophthalmoplegia, unspecified eye -H5121 Internuclear ophthalmoplegia, right eye -H5122 Internuclear ophthalmoplegia, left eye -H5123 Internuclear ophthalmoplegia, bilateral -H518 Other specified disorders of binocular movement -H519 Unspecified disorder of binocular movement -H5200 Hypermetropia, unspecified eye -H5201 Hypermetropia, right eye -H5202 Hypermetropia, left eye -H5203 Hypermetropia, bilateral -H5210 Myopia, unspecified eye -H5211 Myopia, right eye -H5212 Myopia, left eye -H5213 Myopia, bilateral -H52201 Unspecified astigmatism, right eye -H52202 Unspecified astigmatism, left eye -H52203 Unspecified astigmatism, bilateral -H52209 Unspecified astigmatism, unspecified eye -H52211 Irregular astigmatism, right eye -H52212 Irregular astigmatism, left eye -H52213 Irregular astigmatism, bilateral -H52219 Irregular astigmatism, unspecified eye -H52221 Regular astigmatism, right eye -H52222 Regular astigmatism, left eye -H52223 Regular astigmatism, bilateral -H52229 Regular astigmatism, unspecified eye -H5231 Anisometropia -H5232 Aniseikonia -H524 Presbyopia -H52511 Internal ophthalmoplegia (complete) (total), right eye -H52512 Internal ophthalmoplegia (complete) (total), left eye -H52513 Internal ophthalmoplegia (complete) (total), bilateral -H52519 Internal ophthalmoplegia (complete) (total), unspecified eye -H52521 Paresis of accommodation, right eye -H52522 Paresis of accommodation, left eye -H52523 Paresis of accommodation, bilateral -H52529 Paresis of accommodation, unspecified eye -H52531 Spasm of accommodation, right eye -H52532 Spasm of accommodation, left eye -H52533 Spasm of accommodation, bilateral -H52539 Spasm of accommodation, unspecified eye -H526 Other disorders of refraction -H527 Unspecified disorder of refraction -H53001 Unspecified amblyopia, right eye -H53002 Unspecified amblyopia, left eye -H53003 Unspecified amblyopia, bilateral -H53009 Unspecified amblyopia, unspecified eye -H53011 Deprivation amblyopia, right eye -H53012 Deprivation amblyopia, left eye -H53013 Deprivation amblyopia, bilateral -H53019 Deprivation amblyopia, unspecified eye -H53021 Refractive amblyopia, right eye -H53022 Refractive amblyopia, left eye -H53023 Refractive amblyopia, bilateral -H53029 Refractive amblyopia, unspecified eye -H53031 Strabismic amblyopia, right eye -H53032 Strabismic amblyopia, left eye -H53033 Strabismic amblyopia, bilateral -H53039 Strabismic amblyopia, unspecified eye -H5310 Unspecified subjective visual disturbances -H5311 Day blindness -H53121 Transient visual loss, right eye -H53122 Transient visual loss, left eye -H53123 Transient visual loss, bilateral -H53129 Transient visual loss, unspecified eye -H53131 Sudden visual loss, right eye -H53132 Sudden visual loss, left eye -H53133 Sudden visual loss, bilateral -H53139 Sudden visual loss, unspecified eye -H53141 Visual discomfort, right eye -H53142 Visual discomfort, left eye -H53143 Visual discomfort, bilateral -H53149 Visual discomfort, unspecified -H5315 Visual distortions of shape and size -H5316 Psychophysical visual disturbances -H5319 Other subjective visual disturbances -H532 Diplopia -H5330 Unspecified disorder of binocular vision -H5331 Abnormal retinal correspondence -H5332 Fusion with defective stereopsis -H5333 Simultaneous visual perception without fusion -H5334 Suppression of binocular vision -H5340 Unspecified visual field defects -H53411 Scotoma involving central area, right eye -H53412 Scotoma involving central area, left eye -H53413 Scotoma involving central area, bilateral -H53419 Scotoma involving central area, unspecified eye -H53421 Scotoma of blind spot area, right eye -H53422 Scotoma of blind spot area, left eye -H53423 Scotoma of blind spot area, bilateral -H53429 Scotoma of blind spot area, unspecified eye -H53431 Sector or arcuate defects, right eye -H53432 Sector or arcuate defects, left eye -H53433 Sector or arcuate defects, bilateral -H53439 Sector or arcuate defects, unspecified eye -H53451 Other localized visual field defect, right eye -H53452 Other localized visual field defect, left eye -H53453 Other localized visual field defect, bilateral -H53459 Other localized visual field defect, unspecified eye -H53461 Homonymous bilateral field defects, right side -H53462 Homonymous bilateral field defects, left side -H53469 Homonymous bilateral field defects, unspecified side -H5347 Heteronymous bilateral field defects -H53481 Generalized contraction of visual field, right eye -H53482 Generalized contraction of visual field, left eye -H53483 Generalized contraction of visual field, bilateral -H53489 Generalized contraction of visual field, unspecified eye -H5350 Unspecified color vision deficiencies -H5351 Achromatopsia -H5352 Acquired color vision deficiency -H5353 Deuteranomaly -H5354 Protanomaly -H5355 Tritanomaly -H5359 Other color vision deficiencies -H5360 Unspecified night blindness -H5361 Abnormal dark adaptation curve -H5362 Acquired night blindness -H5363 Congenital night blindness -H5369 Other night blindness -H5371 Glare sensitivity -H5372 Impaired contrast sensitivity -H538 Other visual disturbances -H539 Unspecified visual disturbance -H540 Blindness, both eyes -H5410 Blindness, one eye, low vision other eye, unspecified eyes -H5411 Blindness, right eye, low vision left eye -H5412 Blindness, left eye, low vision right eye -H542 Low vision, both eyes -H543 Unqualified visual loss, both eyes -H5440 Blindness, one eye, unspecified eye -H5441 Blindness, right eye, normal vision left eye -H5442 Blindness, left eye, normal vision right eye -H5450 Low vision, one eye, unspecified eye -H5451 Low vision, right eye, normal vision left eye -H5452 Low vision, left eye, normal vision right eye -H5460 Unqualified visual loss, one eye, unspecified -H5461 Unqualified visual loss, right eye, normal vision left eye -H5462 Unqualified visual loss, left eye, normal vision right eye -H547 Unspecified visual loss -H548 Legal blindness, as defined in USA -H5500 Unspecified nystagmus -H5501 Congenital nystagmus -H5502 Latent nystagmus -H5503 Visual deprivation nystagmus -H5504 Dissociated nystagmus -H5509 Other forms of nystagmus -H5581 Saccadic eye movements -H5589 Other irregular eye movements -H5700 Unspecified anomaly of pupillary function -H5701 Argyll Robertson pupil, atypical -H5702 Anisocoria -H5703 Miosis -H5704 Mydriasis -H57051 Tonic pupil, right eye -H57052 Tonic pupil, left eye -H57053 Tonic pupil, bilateral -H57059 Tonic pupil, unspecified eye -H5709 Other anomalies of pupillary function -H5710 Ocular pain, unspecified eye -H5711 Ocular pain, right eye -H5712 Ocular pain, left eye -H5713 Ocular pain, bilateral -H578 Other specified disorders of eye and adnexa -H579 Unspecified disorder of eye and adnexa -H59011 Keratopathy (bullous aphakic) following cataract surgery, right eye -H59012 Keratopathy (bullous aphakic) following cataract surgery, left eye -H59013 Keratopathy (bullous aphakic) following cataract surgery, bilateral -H59019 Keratopathy (bullous aphakic) following cataract surgery, unspecified eye -H59021 Cataract (lens) fragments in eye following cataract surgery, right eye -H59022 Cataract (lens) fragments in eye following cataract surgery, left eye -H59023 Cataract (lens) fragments in eye following cataract surgery, bilateral -H59029 Cataract (lens) fragments in eye following cataract surgery, unspecified eye -H59031 Cystoid macular edema following cataract surgery, right eye -H59032 Cystoid macular edema following cataract surgery, left eye -H59033 Cystoid macular edema following cataract surgery, bilateral -H59039 Cystoid macular edema following cataract surgery, unspecified eye -H59091 Other disorders of the right eye following cataract surgery -H59092 Other disorders of the left eye following cataract surgery -H59093 Other disorders of the eye following cataract surgery, bilateral -H59099 Other disorders of unspecified eye following cataract surgery -H59111 Intraoperative hemorrhage and hematoma of right eye and adnexa complicating an ophthalmic procedure -H59112 Intraoperative hemorrhage and hematoma of left eye and adnexa complicating an ophthalmic procedure -H59113 Intraoperative hemorrhage and hematoma of eye and adnexa complicating an ophthalmic procedure, bilateral -H59119 Intraoperative hemorrhage and hematoma of unspecified eye and adnexa complicating an ophthalmic procedure -H59121 Intraoperative hemorrhage and hematoma of right eye and adnexa complicating other procedure -H59122 Intraoperative hemorrhage and hematoma of left eye and adnexa complicating other procedure -H59123 Intraoperative hemorrhage and hematoma of eye and adnexa complicating other procedure, bilateral -H59129 Intraoperative hemorrhage and hematoma of unspecified eye and adnexa complicating other procedure -H59211 Accidental puncture and laceration of right eye and adnexa during an ophthalmic procedure -H59212 Accidental puncture and laceration of left eye and adnexa during an ophthalmic procedure -H59213 Accidental puncture and laceration of eye and adnexa during an ophthalmic procedure, bilateral -H59219 Accidental puncture and laceration of unspecified eye and adnexa during an ophthalmic procedure -H59221 Accidental puncture and laceration of right eye and adnexa during other procedure -H59222 Accidental puncture and laceration of left eye and adnexa during other procedure -H59223 Accidental puncture and laceration of eye and adnexa during other procedure, bilateral -H59229 Accidental puncture and laceration of unspecified eye and adnexa during other procedure -H59311 Postprocedural hemorrhage and hematoma of right eye and adnexa following an ophthalmic procedure -H59312 Postprocedural hemorrhage and hematoma of left eye and adnexa following an ophthalmic procedure -H59313 Postprocedural hemorrhage and hematoma of eye and adnexa following an ophthalmic procedure, bilateral -H59319 Postprocedural hemorrhage and hematoma of unspecified eye and adnexa following an ophthalmic procedure -H59321 Postprocedural hemorrhage and hematoma of right eye and adnexa following other procedure -H59322 Postprocedural hemorrhage and hematoma of left eye and adnexa following other procedure -H59323 Postprocedural hemorrhage and hematoma of eye and adnexa following other procedure, bilateral -H59329 Postprocedural hemorrhage and hematoma of unspecified eye and adnexa following other procedure -H5940 Inflammation (infection) of postprocedural bleb, unspecified -H5941 Inflammation (infection) of postprocedural bleb, stage 1 -H5942 Inflammation (infection) of postprocedural bleb, stage 2 -H5943 Inflammation (infection) of postprocedural bleb, stage 3 -H59811 Chorioretinal scars after surgery for detachment, right eye -H59812 Chorioretinal scars after surgery for detachment, left eye -H59813 Chorioretinal scars after surgery for detachment, bilateral -H59819 Chorioretinal scars after surgery for detachment, unspecified eye -H5988 Other intraoperative complications of eye and adnexa, not elsewhere classified -H5989 Other postprocedural complications and disorders of eye and adnexa, not elsewhere classified -H6000 Abscess of external ear, unspecified ear -H6001 Abscess of right external ear -H6002 Abscess of left external ear -H6003 Abscess of external ear, bilateral -H6010 Cellulitis of external ear, unspecified ear -H6011 Cellulitis of right external ear -H6012 Cellulitis of left external ear -H6013 Cellulitis of external ear, bilateral -H6020 Malignant otitis externa, unspecified ear -H6021 Malignant otitis externa, right ear -H6022 Malignant otitis externa, left ear -H6023 Malignant otitis externa, bilateral -H60311 Diffuse otitis externa, right ear -H60312 Diffuse otitis externa, left ear -H60313 Diffuse otitis externa, bilateral -H60319 Diffuse otitis externa, unspecified ear -H60321 Hemorrhagic otitis externa, right ear -H60322 Hemorrhagic otitis externa, left ear -H60323 Hemorrhagic otitis externa, bilateral -H60329 Hemorrhagic otitis externa, unspecified ear -H60331 Swimmer's ear, right ear -H60332 Swimmer's ear, left ear -H60333 Swimmer's ear, bilateral -H60339 Swimmer's ear, unspecified ear -H60391 Other infective otitis externa, right ear -H60392 Other infective otitis externa, left ear -H60393 Other infective otitis externa, bilateral -H60399 Other infective otitis externa, unspecified ear -H6040 Cholesteatoma of external ear, unspecified ear -H6041 Cholesteatoma of right external ear -H6042 Cholesteatoma of left external ear -H6043 Cholesteatoma of external ear, bilateral -H60501 Unspecified acute noninfective otitis externa, right ear -H60502 Unspecified acute noninfective otitis externa, left ear -H60503 Unspecified acute noninfective otitis externa, bilateral -H60509 Unspecified acute noninfective otitis externa, unspecified ear -H60511 Acute actinic otitis externa, right ear -H60512 Acute actinic otitis externa, left ear -H60513 Acute actinic otitis externa, bilateral -H60519 Acute actinic otitis externa, unspecified ear -H60521 Acute chemical otitis externa, right ear -H60522 Acute chemical otitis externa, left ear -H60523 Acute chemical otitis externa, bilateral -H60529 Acute chemical otitis externa, unspecified ear -H60531 Acute contact otitis externa, right ear -H60532 Acute contact otitis externa, left ear -H60533 Acute contact otitis externa, bilateral -H60539 Acute contact otitis externa, unspecified ear -H60541 Acute eczematoid otitis externa, right ear -H60542 Acute eczematoid otitis externa, left ear -H60543 Acute eczematoid otitis externa, bilateral -H60549 Acute eczematoid otitis externa, unspecified ear -H60551 Acute reactive otitis externa, right ear -H60552 Acute reactive otitis externa, left ear -H60553 Acute reactive otitis externa, bilateral -H60559 Acute reactive otitis externa, unspecified ear -H60591 Other noninfective acute otitis externa, right ear -H60592 Other noninfective acute otitis externa, left ear -H60593 Other noninfective acute otitis externa, bilateral -H60599 Other noninfective acute otitis externa, unspecified ear -H6060 Unspecified chronic otitis externa, unspecified ear -H6061 Unspecified chronic otitis externa, right ear -H6062 Unspecified chronic otitis externa, left ear -H6063 Unspecified chronic otitis externa, bilateral -H608X1 Other otitis externa, right ear -H608X2 Other otitis externa, left ear -H608X3 Other otitis externa, bilateral -H608X9 Other otitis externa, unspecified ear -H6090 Unspecified otitis externa, unspecified ear -H6091 Unspecified otitis externa, right ear -H6092 Unspecified otitis externa, left ear -H6093 Unspecified otitis externa, bilateral -H61001 Unspecified perichondritis of right external ear -H61002 Unspecified perichondritis of left external ear -H61003 Unspecified perichondritis of external ear, bilateral -H61009 Unspecified perichondritis of external ear, unspecified ear -H61011 Acute perichondritis of right external ear -H61012 Acute perichondritis of left external ear -H61013 Acute perichondritis of external ear, bilateral -H61019 Acute perichondritis of external ear, unspecified ear -H61021 Chronic perichondritis of right external ear -H61022 Chronic perichondritis of left external ear -H61023 Chronic perichondritis of external ear, bilateral -H61029 Chronic perichondritis of external ear, unspecified ear -H61031 Chondritis of right external ear -H61032 Chondritis of left external ear -H61033 Chondritis of external ear, bilateral -H61039 Chondritis of external ear, unspecified ear -H61101 Unspecified noninfective disorders of pinna, right ear -H61102 Unspecified noninfective disorders of pinna, left ear -H61103 Unspecified noninfective disorders of pinna, bilateral -H61109 Unspecified noninfective disorders of pinna, unspecified ear -H61111 Acquired deformity of pinna, right ear -H61112 Acquired deformity of pinna, left ear -H61113 Acquired deformity of pinna, bilateral -H61119 Acquired deformity of pinna, unspecified ear -H61121 Hematoma of pinna, right ear -H61122 Hematoma of pinna, left ear -H61123 Hematoma of pinna, bilateral -H61129 Hematoma of pinna, unspecified ear -H61191 Noninfective disorders of pinna, right ear -H61192 Noninfective disorders of pinna, left ear -H61193 Noninfective disorders of pinna, bilateral -H61199 Noninfective disorders of pinna, unspecified ear -H6120 Impacted cerumen, unspecified ear -H6121 Impacted cerumen, right ear -H6122 Impacted cerumen, left ear -H6123 Impacted cerumen, bilateral -H61301 Acquired stenosis of right external ear canal, unspecified -H61302 Acquired stenosis of left external ear canal, unspecified -H61303 Acquired stenosis of external ear canal, unspecified, bilateral -H61309 Acquired stenosis of external ear canal, unspecified, unspecified ear -H61311 Acquired stenosis of right external ear canal secondary to trauma -H61312 Acquired stenosis of left external ear canal secondary to trauma -H61313 Acquired stenosis of external ear canal secondary to trauma, bilateral -H61319 Acquired stenosis of external ear canal secondary to trauma, unspecified ear -H61321 Acquired stenosis of right external ear canal secondary to inflammation and infection -H61322 Acquired stenosis of left external ear canal secondary to inflammation and infection -H61323 Acquired stenosis of external ear canal secondary to inflammation and infection, bilateral -H61329 Acquired stenosis of external ear canal secondary to inflammation and infection, unspecified ear -H61391 Other acquired stenosis of right external ear canal -H61392 Other acquired stenosis of left external ear canal -H61393 Other acquired stenosis of external ear canal, bilateral -H61399 Other acquired stenosis of external ear canal, unspecified ear -H61811 Exostosis of right external canal -H61812 Exostosis of left external canal -H61813 Exostosis of external canal, bilateral -H61819 Exostosis of external canal, unspecified ear -H61891 Other specified disorders of right external ear -H61892 Other specified disorders of left external ear -H61893 Other specified disorders of external ear, bilateral -H61899 Other specified disorders of external ear, unspecified ear -H6190 Disorder of external ear, unspecified, unspecified ear -H6191 Disorder of right external ear, unspecified -H6192 Disorder of left external ear, unspecified -H6193 Disorder of external ear, unspecified, bilateral -H6240 Otitis externa in other diseases classified elsewhere, unspecified ear -H6241 Otitis externa in other diseases classified elsewhere, right ear -H6242 Otitis externa in other diseases classified elsewhere, left ear -H6243 Otitis externa in other diseases classified elsewhere, bilateral -H628X1 Other disorders of right external ear in diseases classified elsewhere -H628X2 Other disorders of left external ear in diseases classified elsewhere -H628X3 Other disorders of external ear in diseases classified elsewhere, bilateral -H628X9 Other disorders of external ear in diseases classified elsewhere, unspecified ear -H6500 Acute serous otitis media, unspecified ear -H6501 Acute serous otitis media, right ear -H6502 Acute serous otitis media, left ear -H6503 Acute serous otitis media, bilateral -H6504 Acute serous otitis media, recurrent, right ear -H6505 Acute serous otitis media, recurrent, left ear -H6506 Acute serous otitis media, recurrent, bilateral -H6507 Acute serous otitis media, recurrent, unspecified ear -H65111 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), right ear -H65112 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), left ear -H65113 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), bilateral -H65114 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), recurrent, right ear -H65115 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), recurrent, left ear -H65116 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), recurrent, bilateral -H65117 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), recurrent, unspecified ear -H65119 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), unspecified ear -H65191 Other acute nonsuppurative otitis media, right ear -H65192 Other acute nonsuppurative otitis media, left ear -H65193 Other acute nonsuppurative otitis media, bilateral -H65194 Other acute nonsuppurative otitis media, recurrent, right ear -H65195 Other acute nonsuppurative otitis media, recurrent, left ear -H65196 Other acute nonsuppurative otitis media, recurrent, bilateral -H65197 Other acute nonsuppurative otitis media recurrent, unspecified ear -H65199 Other acute nonsuppurative otitis media, unspecified ear -H6520 Chronic serous otitis media, unspecified ear -H6521 Chronic serous otitis media, right ear -H6522 Chronic serous otitis media, left ear -H6523 Chronic serous otitis media, bilateral -H6530 Chronic mucoid otitis media, unspecified ear -H6531 Chronic mucoid otitis media, right ear -H6532 Chronic mucoid otitis media, left ear -H6533 Chronic mucoid otitis media, bilateral -H65411 Chronic allergic otitis media, right ear -H65412 Chronic allergic otitis media, left ear -H65413 Chronic allergic otitis media, bilateral -H65419 Chronic allergic otitis media, unspecified ear -H65491 Other chronic nonsuppurative otitis media, right ear -H65492 Other chronic nonsuppurative otitis media, left ear -H65493 Other chronic nonsuppurative otitis media, bilateral -H65499 Other chronic nonsuppurative otitis media, unspecified ear -H6590 Unspecified nonsuppurative otitis media, unspecified ear -H6591 Unspecified nonsuppurative otitis media, right ear -H6592 Unspecified nonsuppurative otitis media, left ear -H6593 Unspecified nonsuppurative otitis media, bilateral -H66001 Acute suppurative otitis media without spontaneous rupture of ear drum, right ear -H66002 Acute suppurative otitis media without spontaneous rupture of ear drum, left ear -H66003 Acute suppurative otitis media without spontaneous rupture of ear drum, bilateral -H66004 Acute suppurative otitis media without spontaneous rupture of ear drum, recurrent, right ear -H66005 Acute suppurative otitis media without spontaneous rupture of ear drum, recurrent, left ear -H66006 Acute suppurative otitis media without spontaneous rupture of ear drum, recurrent, bilateral -H66007 Acute suppurative otitis media without spontaneous rupture of ear drum, recurrent, unspecified ear -H66009 Acute suppurative otitis media without spontaneous rupture of ear drum, unspecified ear -H66011 Acute suppurative otitis media with spontaneous rupture of ear drum, right ear -H66012 Acute suppurative otitis media with spontaneous rupture of ear drum, left ear -H66013 Acute suppurative otitis media with spontaneous rupture of ear drum, bilateral -H66014 Acute suppurative otitis media with spontaneous rupture of ear drum, recurrent, right ear -H66015 Acute suppurative otitis media with spontaneous rupture of ear drum, recurrent, left ear -H66016 Acute suppurative otitis media with spontaneous rupture of ear drum, recurrent, bilateral -H66017 Acute suppurative otitis media with spontaneous rupture of ear drum, recurrent, unspecified ear -H66019 Acute suppurative otitis media with spontaneous rupture of ear drum, unspecified ear -H6610 Chronic tubotympanic suppurative otitis media, unspecified -H6611 Chronic tubotympanic suppurative otitis media, right ear -H6612 Chronic tubotympanic suppurative otitis media, left ear -H6613 Chronic tubotympanic suppurative otitis media, bilateral -H6620 Chronic atticoantral suppurative otitis media, unspecified ear -H6621 Chronic atticoantral suppurative otitis media, right ear -H6622 Chronic atticoantral suppurative otitis media, left ear -H6623 Chronic atticoantral suppurative otitis media, bilateral -H663X1 Other chronic suppurative otitis media, right ear -H663X2 Other chronic suppurative otitis media, left ear -H663X3 Other chronic suppurative otitis media, bilateral -H663X9 Other chronic suppurative otitis media, unspecified ear -H6640 Suppurative otitis media, unspecified, unspecified ear -H6641 Suppurative otitis media, unspecified, right ear -H6642 Suppurative otitis media, unspecified, left ear -H6643 Suppurative otitis media, unspecified, bilateral -H6690 Otitis media, unspecified, unspecified ear -H6691 Otitis media, unspecified, right ear -H6692 Otitis media, unspecified, left ear -H6693 Otitis media, unspecified, bilateral -H671 Otitis media in diseases classified elsewhere, right ear -H672 Otitis media in diseases classified elsewhere, left ear -H673 Otitis media in diseases classified elsewhere, bilateral -H679 Otitis media in diseases classified elsewhere, unspecified ear -H68001 Unspecified Eustachian salpingitis, right ear -H68002 Unspecified Eustachian salpingitis, left ear -H68003 Unspecified Eustachian salpingitis, bilateral -H68009 Unspecified Eustachian salpingitis, unspecified ear -H68011 Acute Eustachian salpingitis, right ear -H68012 Acute Eustachian salpingitis, left ear -H68013 Acute Eustachian salpingitis, bilateral -H68019 Acute Eustachian salpingitis, unspecified ear -H68021 Chronic Eustachian salpingitis, right ear -H68022 Chronic Eustachian salpingitis, left ear -H68023 Chronic Eustachian salpingitis, bilateral -H68029 Chronic Eustachian salpingitis, unspecified ear -H68101 Unspecified obstruction of Eustachian tube, right ear -H68102 Unspecified obstruction of Eustachian tube, left ear -H68103 Unspecified obstruction of Eustachian tube, bilateral -H68109 Unspecified obstruction of Eustachian tube, unspecified ear -H68111 Osseous obstruction of Eustachian tube, right ear -H68112 Osseous obstruction of Eustachian tube, left ear -H68113 Osseous obstruction of Eustachian tube, bilateral -H68119 Osseous obstruction of Eustachian tube, unspecified ear -H68121 Intrinsic cartilagenous obstruction of Eustachian tube, right ear -H68122 Intrinsic cartilagenous obstruction of Eustachian tube, left ear -H68123 Intrinsic cartilagenous obstruction of Eustachian tube, bilateral -H68129 Intrinsic cartilagenous obstruction of Eustachian tube, unspecified ear -H68131 Extrinsic cartilagenous obstruction of Eustachian tube, right ear -H68132 Extrinsic cartilagenous obstruction of Eustachian tube, left ear -H68133 Extrinsic cartilagenous obstruction of Eustachian tube, bilateral -H68139 Extrinsic cartilagenous obstruction of Eustachian tube, unspecified ear -H6900 Patulous Eustachian tube, unspecified ear -H6901 Patulous Eustachian tube, right ear -H6902 Patulous Eustachian tube, left ear -H6903 Patulous Eustachian tube, bilateral -H6980 Other specified disorders of Eustachian tube, unspecified ear -H6981 Other specified disorders of Eustachian tube, right ear -H6982 Other specified disorders of Eustachian tube, left ear -H6983 Other specified disorders of Eustachian tube, bilateral -H6990 Unspecified Eustachian tube disorder, unspecified ear -H6991 Unspecified Eustachian tube disorder, right ear -H6992 Unspecified Eustachian tube disorder, left ear -H6993 Unspecified Eustachian tube disorder, bilateral -H70001 Acute mastoiditis without complications, right ear -H70002 Acute mastoiditis without complications, left ear -H70003 Acute mastoiditis without complications, bilateral -H70009 Acute mastoiditis without complications, unspecified ear -H70011 Subperiosteal abscess of mastoid, right ear -H70012 Subperiosteal abscess of mastoid, left ear -H70013 Subperiosteal abscess of mastoid, bilateral -H70019 Subperiosteal abscess of mastoid, unspecified ear -H70091 Acute mastoiditis with other complications, right ear -H70092 Acute mastoiditis with other complications, left ear -H70093 Acute mastoiditis with other complications, bilateral -H70099 Acute mastoiditis with other complications, unspecified ear -H7010 Chronic mastoiditis, unspecified ear -H7011 Chronic mastoiditis, right ear -H7012 Chronic mastoiditis, left ear -H7013 Chronic mastoiditis, bilateral -H70201 Unspecified petrositis, right ear -H70202 Unspecified petrositis, left ear -H70203 Unspecified petrositis, bilateral -H70209 Unspecified petrositis, unspecified ear -H70211 Acute petrositis, right ear -H70212 Acute petrositis, left ear -H70213 Acute petrositis, bilateral -H70219 Acute petrositis, unspecified ear -H70221 Chronic petrositis, right ear -H70222 Chronic petrositis, left ear -H70223 Chronic petrositis, bilateral -H70229 Chronic petrositis, unspecified ear -H70811 Postauricular fistula, right ear -H70812 Postauricular fistula, left ear -H70813 Postauricular fistula, bilateral -H70819 Postauricular fistula, unspecified ear -H70891 Other mastoiditis and related conditions, right ear -H70892 Other mastoiditis and related conditions, left ear -H70893 Other mastoiditis and related conditions, bilateral -H70899 Other mastoiditis and related conditions, unspecified ear -H7090 Unspecified mastoiditis, unspecified ear -H7091 Unspecified mastoiditis, right ear -H7092 Unspecified mastoiditis, left ear -H7093 Unspecified mastoiditis, bilateral -H7100 Cholesteatoma of attic, unspecified ear -H7101 Cholesteatoma of attic, right ear -H7102 Cholesteatoma of attic, left ear -H7103 Cholesteatoma of attic, bilateral -H7110 Cholesteatoma of tympanum, unspecified ear -H7111 Cholesteatoma of tympanum, right ear -H7112 Cholesteatoma of tympanum, left ear -H7113 Cholesteatoma of tympanum, bilateral -H7120 Cholesteatoma of mastoid, unspecified ear -H7121 Cholesteatoma of mastoid, right ear -H7122 Cholesteatoma of mastoid, left ear -H7123 Cholesteatoma of mastoid, bilateral -H7130 Diffuse cholesteatosis, unspecified ear -H7131 Diffuse cholesteatosis, right ear -H7132 Diffuse cholesteatosis, left ear -H7133 Diffuse cholesteatosis, bilateral -H7190 Unspecified cholesteatoma, unspecified ear -H7191 Unspecified cholesteatoma, right ear -H7192 Unspecified cholesteatoma, left ear -H7193 Unspecified cholesteatoma, bilateral -H7200 Central perforation of tympanic membrane, unspecified ear -H7201 Central perforation of tympanic membrane, right ear -H7202 Central perforation of tympanic membrane, left ear -H7203 Central perforation of tympanic membrane, bilateral -H7210 Attic perforation of tympanic membrane, unspecified ear -H7211 Attic perforation of tympanic membrane, right ear -H7212 Attic perforation of tympanic membrane, left ear -H7213 Attic perforation of tympanic membrane, bilateral -H722X1 Other marginal perforations of tympanic membrane, right ear -H722X2 Other marginal perforations of tympanic membrane, left ear -H722X3 Other marginal perforations of tympanic membrane, bilateral -H722X9 Other marginal perforations of tympanic membrane, unspecified ear -H72811 Multiple perforations of tympanic membrane, right ear -H72812 Multiple perforations of tympanic membrane, left ear -H72813 Multiple perforations of tympanic membrane, bilateral -H72819 Multiple perforations of tympanic membrane, unspecified ear -H72821 Total perforations of tympanic membrane, right ear -H72822 Total perforations of tympanic membrane, left ear -H72823 Total perforations of tympanic membrane, bilateral -H72829 Total perforations of tympanic membrane, unspecified ear -H7290 Unspecified perforation of tympanic membrane, unspecified ear -H7291 Unspecified perforation of tympanic membrane, right ear -H7292 Unspecified perforation of tympanic membrane, left ear -H7293 Unspecified perforation of tympanic membrane, bilateral -H73001 Acute myringitis, right ear -H73002 Acute myringitis, left ear -H73003 Acute myringitis, bilateral -H73009 Acute myringitis, unspecified ear -H73011 Bullous myringitis, right ear -H73012 Bullous myringitis, left ear -H73013 Bullous myringitis, bilateral -H73019 Bullous myringitis, unspecified ear -H73091 Other acute myringitis, right ear -H73092 Other acute myringitis, left ear -H73093 Other acute myringitis, bilateral -H73099 Other acute myringitis, unspecified ear -H7310 Chronic myringitis, unspecified ear -H7311 Chronic myringitis, right ear -H7312 Chronic myringitis, left ear -H7313 Chronic myringitis, bilateral -H7320 Unspecified myringitis, unspecified ear -H7321 Unspecified myringitis, right ear -H7322 Unspecified myringitis, left ear -H7323 Unspecified myringitis, bilateral -H73811 Atrophic flaccid tympanic membrane, right ear -H73812 Atrophic flaccid tympanic membrane, left ear -H73813 Atrophic flaccid tympanic membrane, bilateral -H73819 Atrophic flaccid tympanic membrane, unspecified ear -H73821 Atrophic nonflaccid tympanic membrane, right ear -H73822 Atrophic nonflaccid tympanic membrane, left ear -H73823 Atrophic nonflaccid tympanic membrane, bilateral -H73829 Atrophic nonflaccid tympanic membrane, unspecified ear -H73891 Other specified disorders of tympanic membrane, right ear -H73892 Other specified disorders of tympanic membrane, left ear -H73893 Other specified disorders of tympanic membrane, bilateral -H73899 Other specified disorders of tympanic membrane, unspecified ear -H7390 Unspecified disorder of tympanic membrane, unspecified ear -H7391 Unspecified disorder of tympanic membrane, right ear -H7392 Unspecified disorder of tympanic membrane, left ear -H7393 Unspecified disorder of tympanic membrane, bilateral -H7401 Tympanosclerosis, right ear -H7402 Tympanosclerosis, left ear -H7403 Tympanosclerosis, bilateral -H7409 Tympanosclerosis, unspecified ear -H7411 Adhesive right middle ear disease -H7412 Adhesive left middle ear disease -H7413 Adhesive middle ear disease, bilateral -H7419 Adhesive middle ear disease, unspecified ear -H7420 Discontinuity and dislocation of ear ossicles, unspecified ear -H7421 Discontinuity and dislocation of right ear ossicles -H7422 Discontinuity and dislocation of left ear ossicles -H7423 Discontinuity and dislocation of ear ossicles, bilateral -H74311 Ankylosis of ear ossicles, right ear -H74312 Ankylosis of ear ossicles, left ear -H74313 Ankylosis of ear ossicles, bilateral -H74319 Ankylosis of ear ossicles, unspecified ear -H74321 Partial loss of ear ossicles, right ear -H74322 Partial loss of ear ossicles, left ear -H74323 Partial loss of ear ossicles, bilateral -H74329 Partial loss of ear ossicles, unspecified ear -H74391 Other acquired abnormalities of right ear ossicles -H74392 Other acquired abnormalities of left ear ossicles -H74393 Other acquired abnormalities of ear ossicles, bilateral -H74399 Other acquired abnormalities of ear ossicles, unspecified ear -H7440 Polyp of middle ear, unspecified ear -H7441 Polyp of right middle ear -H7442 Polyp of left middle ear -H7443 Polyp of middle ear, bilateral -H748X1 Other specified disorders of right middle ear and mastoid -H748X2 Other specified disorders of left middle ear and mastoid -H748X3 Other specified disorders of middle ear and mastoid, bilateral -H748X9 Other specified disorders of middle ear and mastoid, unspecified ear -H7490 Unspecified disorder of middle ear and mastoid, unspecified ear -H7491 Unspecified disorder of right middle ear and mastoid -H7492 Unspecified disorder of left middle ear and mastoid -H7493 Unspecified disorder of middle ear and mastoid, bilateral -H7500 Mastoiditis in infectious and parasitic diseases classified elsewhere, unspecified ear -H7501 Mastoiditis in infectious and parasitic diseases classified elsewhere, right ear -H7502 Mastoiditis in infectious and parasitic diseases classified elsewhere, left ear -H7503 Mastoiditis in infectious and parasitic diseases classified elsewhere, bilateral -H7580 Other specified disorders of middle ear and mastoid in diseases classified elsewhere, unspecified ear -H7581 Other specified disorders of right middle ear and mastoid in diseases classified elsewhere -H7582 Other specified disorders of left middle ear and mastoid in diseases classified elsewhere -H7583 Other specified disorders of middle ear and mastoid in diseases classified elsewhere, bilateral -H8000 Otosclerosis involving oval window, nonobliterative, unspecified ear -H8001 Otosclerosis involving oval window, nonobliterative, right ear -H8002 Otosclerosis involving oval window, nonobliterative, left ear -H8003 Otosclerosis involving oval window, nonobliterative, bilateral -H8010 Otosclerosis involving oval window, obliterative, unspecified ear -H8011 Otosclerosis involving oval window, obliterative, right ear -H8012 Otosclerosis involving oval window, obliterative, left ear -H8013 Otosclerosis involving oval window, obliterative, bilateral -H8020 Cochlear otosclerosis, unspecified ear -H8021 Cochlear otosclerosis, right ear -H8022 Cochlear otosclerosis, left ear -H8023 Cochlear otosclerosis, bilateral -H8080 Other otosclerosis, unspecified ear -H8081 Other otosclerosis, right ear -H8082 Other otosclerosis, left ear -H8083 Other otosclerosis, bilateral -H8090 Unspecified otosclerosis, unspecified ear -H8091 Unspecified otosclerosis, right ear -H8092 Unspecified otosclerosis, left ear -H8093 Unspecified otosclerosis, bilateral -H8101 Meniere's disease, right ear -H8102 Meniere's disease, left ear -H8103 Meniere's disease, bilateral -H8109 Meniere's disease, unspecified ear -H8110 Benign paroxysmal vertigo, unspecified ear -H8111 Benign paroxysmal vertigo, right ear -H8112 Benign paroxysmal vertigo, left ear -H8113 Benign paroxysmal vertigo, bilateral -H8120 Vestibular neuronitis, unspecified ear -H8121 Vestibular neuronitis, right ear -H8122 Vestibular neuronitis, left ear -H8123 Vestibular neuronitis, bilateral -H81311 Aural vertigo, right ear -H81312 Aural vertigo, left ear -H81313 Aural vertigo, bilateral -H81319 Aural vertigo, unspecified ear -H81391 Other peripheral vertigo, right ear -H81392 Other peripheral vertigo, left ear -H81393 Other peripheral vertigo, bilateral -H81399 Other peripheral vertigo, unspecified ear -H8141 Vertigo of central origin, right ear -H8142 Vertigo of central origin, left ear -H8143 Vertigo of central origin, bilateral -H8149 Vertigo of central origin, unspecified ear -H818X1 Other disorders of vestibular function, right ear -H818X2 Other disorders of vestibular function, left ear -H818X3 Other disorders of vestibular function, bilateral -H818X9 Other disorders of vestibular function, unspecified ear -H8190 Unspecified disorder of vestibular function, unspecified ear -H8191 Unspecified disorder of vestibular function, right ear -H8192 Unspecified disorder of vestibular function, left ear -H8193 Unspecified disorder of vestibular function, bilateral -H821 Vertiginous syndromes in diseases classified elsewhere, right ear -H822 Vertiginous syndromes in diseases classified elsewhere, left ear -H823 Vertiginous syndromes in diseases classified elsewhere, bilateral -H829 Vertiginous syndromes in diseases classified elsewhere, unspecified ear -H8301 Labyrinthitis, right ear -H8302 Labyrinthitis, left ear -H8303 Labyrinthitis, bilateral -H8309 Labyrinthitis, unspecified ear -H8311 Labyrinthine fistula, right ear -H8312 Labyrinthine fistula, left ear -H8313 Labyrinthine fistula, bilateral -H8319 Labyrinthine fistula, unspecified ear -H832X1 Labyrinthine dysfunction, right ear -H832X2 Labyrinthine dysfunction, left ear -H832X3 Labyrinthine dysfunction, bilateral -H832X9 Labyrinthine dysfunction, unspecified ear -H833X1 Noise effects on right inner ear -H833X2 Noise effects on left inner ear -H833X3 Noise effects on inner ear, bilateral -H833X9 Noise effects on inner ear, unspecified ear -H838X1 Other specified diseases of right inner ear -H838X2 Other specified diseases of left inner ear -H838X3 Other specified diseases of inner ear, bilateral -H838X9 Other specified diseases of inner ear, unspecified ear -H8390 Unspecified disease of inner ear, unspecified ear -H8391 Unspecified disease of right inner ear -H8392 Unspecified disease of left inner ear -H8393 Unspecified disease of inner ear, bilateral -H900 Conductive hearing loss, bilateral -H9011 Conductive hearing loss, unilateral, right ear, with unrestricted hearing on the contralateral side -H9012 Conductive hearing loss, unilateral, left ear, with unrestricted hearing on the contralateral side -H902 Conductive hearing loss, unspecified -H903 Sensorineural hearing loss, bilateral -H9041 Sensorineural hearing loss, unilateral, right ear, with unrestricted hearing on the contralateral side -H9042 Sensorineural hearing loss, unilateral, left ear, with unrestricted hearing on the contralateral side -H905 Unspecified sensorineural hearing loss -H906 Mixed conductive and sensorineural hearing loss, bilateral -H9071 Mixed conductive and sensorineural hearing loss, unilateral, right ear, with unrestricted hearing on the contralateral side -H9072 Mixed conductive and sensorineural hearing loss, unilateral, left ear, with unrestricted hearing on the contralateral side -H908 Mixed conductive and sensorineural hearing loss, unspecified -H9101 Ototoxic hearing loss, right ear -H9102 Ototoxic hearing loss, left ear -H9103 Ototoxic hearing loss, bilateral -H9109 Ototoxic hearing loss, unspecified ear -H9110 Presbycusis, unspecified ear -H9111 Presbycusis, right ear -H9112 Presbycusis, left ear -H9113 Presbycusis, bilateral -H9120 Sudden idiopathic hearing loss, unspecified ear -H9121 Sudden idiopathic hearing loss, right ear -H9122 Sudden idiopathic hearing loss, left ear -H9123 Sudden idiopathic hearing loss, bilateral -H913 Deaf nonspeaking, not elsewhere classified -H918X1 Other specified hearing loss, right ear -H918X2 Other specified hearing loss, left ear -H918X3 Other specified hearing loss, bilateral -H918X9 Other specified hearing loss, unspecified ear -H9190 Unspecified hearing loss, unspecified ear -H9191 Unspecified hearing loss, right ear -H9192 Unspecified hearing loss, left ear -H9193 Unspecified hearing loss, bilateral -H9201 Otalgia, right ear -H9202 Otalgia, left ear -H9203 Otalgia, bilateral -H9209 Otalgia, unspecified ear -H9210 Otorrhea, unspecified ear -H9211 Otorrhea, right ear -H9212 Otorrhea, left ear -H9213 Otorrhea, bilateral -H9220 Otorrhagia, unspecified ear -H9221 Otorrhagia, right ear -H9222 Otorrhagia, left ear -H9223 Otorrhagia, bilateral -H93011 Transient ischemic deafness, right ear -H93012 Transient ischemic deafness, left ear -H93013 Transient ischemic deafness, bilateral -H93019 Transient ischemic deafness, unspecified ear -H93091 Unspecified degenerative and vascular disorders of right ear -H93092 Unspecified degenerative and vascular disorders of left ear -H93093 Unspecified degenerative and vascular disorders of ear, bilateral -H93099 Unspecified degenerative and vascular disorders of unspecified ear -H9311 Tinnitus, right ear -H9312 Tinnitus, left ear -H9313 Tinnitus, bilateral -H9319 Tinnitus, unspecified ear -H93211 Auditory recruitment, right ear -H93212 Auditory recruitment, left ear -H93213 Auditory recruitment, bilateral -H93219 Auditory recruitment, unspecified ear -H93221 Diplacusis, right ear -H93222 Diplacusis, left ear -H93223 Diplacusis, bilateral -H93229 Diplacusis, unspecified ear -H93231 Hyperacusis, right ear -H93232 Hyperacusis, left ear -H93233 Hyperacusis, bilateral -H93239 Hyperacusis, unspecified ear -H93241 Temporary auditory threshold shift, right ear -H93242 Temporary auditory threshold shift, left ear -H93243 Temporary auditory threshold shift, bilateral -H93249 Temporary auditory threshold shift, unspecified ear -H9325 Central auditory processing disorder -H93291 Other abnormal auditory perceptions, right ear -H93292 Other abnormal auditory perceptions, left ear -H93293 Other abnormal auditory perceptions, bilateral -H93299 Other abnormal auditory perceptions, unspecified ear -H933X1 Disorders of right acoustic nerve -H933X2 Disorders of left acoustic nerve -H933X3 Disorders of bilateral acoustic nerves -H933X9 Disorders of unspecified acoustic nerve -H938X1 Other specified disorders of right ear -H938X2 Other specified disorders of left ear -H938X3 Other specified disorders of ear, bilateral -H938X9 Other specified disorders of ear, unspecified ear -H9390 Unspecified disorder of ear, unspecified ear -H9391 Unspecified disorder of right ear -H9392 Unspecified disorder of left ear -H9393 Unspecified disorder of ear, bilateral -H9400 Acoustic neuritis in infectious and parasitic diseases classified elsewhere, unspecified ear -H9401 Acoustic neuritis in infectious and parasitic diseases classified elsewhere, right ear -H9402 Acoustic neuritis in infectious and parasitic diseases classified elsewhere, left ear -H9403 Acoustic neuritis in infectious and parasitic diseases classified elsewhere, bilateral -H9480 Other specified disorders of ear in diseases classified elsewhere, unspecified ear -H9481 Other specified disorders of right ear in diseases classified elsewhere -H9482 Other specified disorders of left ear in diseases classified elsewhere -H9483 Other specified disorders of ear in diseases classified elsewhere, bilateral -H9500 Recurrent cholesteatoma of postmastoidectomy cavity, unspecified ear -H9501 Recurrent cholesteatoma of postmastoidectomy cavity, right ear -H9502 Recurrent cholesteatoma of postmastoidectomy cavity, left ear -H9503 Recurrent cholesteatoma of postmastoidectomy cavity, bilateral ears -H95111 Chronic inflammation of postmastoidectomy cavity, right ear -H95112 Chronic inflammation of postmastoidectomy cavity, left ear -H95113 Chronic inflammation of postmastoidectomy cavity, bilateral ears -H95119 Chronic inflammation of postmastoidectomy cavity, unspecified ear -H95121 Granulation of postmastoidectomy cavity, right ear -H95122 Granulation of postmastoidectomy cavity, left ear -H95123 Granulation of postmastoidectomy cavity, bilateral ears -H95129 Granulation of postmastoidectomy cavity, unspecified ear -H95131 Mucosal cyst of postmastoidectomy cavity, right ear -H95132 Mucosal cyst of postmastoidectomy cavity, left ear -H95133 Mucosal cyst of postmastoidectomy cavity, bilateral ears -H95139 Mucosal cyst of postmastoidectomy cavity, unspecified ear -H95191 Other disorders following mastoidectomy, right ear -H95192 Other disorders following mastoidectomy, left ear -H95193 Other disorders following mastoidectomy, bilateral ears -H95199 Other disorders following mastoidectomy, unspecified ear -H9521 Intraoperative hemorrhage and hematoma of ear and mastoid process complicating a procedure on the ear and mastoid process -H9522 Intraoperative hemorrhage and hematoma of ear and mastoid process complicating other procedure -H9531 Accidental puncture and laceration of the ear and mastoid process during a procedure on the ear and mastoid process -H9532 Accidental puncture and laceration of the ear and mastoid process during other procedure -H9541 Postprocedural hemorrhage and hematoma of ear and mastoid process following a procedure on the ear and mastoid process -H9542 Postprocedural hemorrhage and hematoma of ear and mastoid process following other procedure -H95811 Postprocedural stenosis of right external ear canal -H95812 Postprocedural stenosis of left external ear canal -H95813 Postprocedural stenosis of external ear canal, bilateral -H95819 Postprocedural stenosis of unspecified external ear canal -H9588 Other intraoperative complications and disorders of the ear and mastoid process, not elsewhere classified -H9589 Other postprocedural complications and disorders of the ear and mastoid process, not elsewhere classified -I00 Rheumatic fever without heart involvement -I010 Acute rheumatic pericarditis -I011 Acute rheumatic endocarditis -I012 Acute rheumatic myocarditis -I018 Other acute rheumatic heart disease -I019 Acute rheumatic heart disease, unspecified -I020 Rheumatic chorea with heart involvement -I029 Rheumatic chorea without heart involvement -I050 Rheumatic mitral stenosis -I051 Rheumatic mitral insufficiency -I052 Rheumatic mitral stenosis with insufficiency -I058 Other rheumatic mitral valve diseases -I059 Rheumatic mitral valve disease, unspecified -I060 Rheumatic aortic stenosis -I061 Rheumatic aortic insufficiency -I062 Rheumatic aortic stenosis with insufficiency -I068 Other rheumatic aortic valve diseases -I069 Rheumatic aortic valve disease, unspecified -I070 Rheumatic tricuspid stenosis -I071 Rheumatic tricuspid insufficiency -I072 Rheumatic tricuspid stenosis and insufficiency -I078 Other rheumatic tricuspid valve diseases -I079 Rheumatic tricuspid valve disease, unspecified -I080 Rheumatic disorders of both mitral and aortic valves -I081 Rheumatic disorders of both mitral and tricuspid valves -I082 Rheumatic disorders of both aortic and tricuspid valves -I083 Combined rheumatic disorders of mitral, aortic and tricuspid valves -I088 Other rheumatic multiple valve diseases -I089 Rheumatic multiple valve disease, unspecified -I090 Rheumatic myocarditis -I091 Rheumatic diseases of endocardium, valve unspecified -I092 Chronic rheumatic pericarditis -I0981 Rheumatic heart failure -I0989 Other specified rheumatic heart diseases -I099 Rheumatic heart disease, unspecified -I10 Essential (primary) hypertension -I110 Hypertensive heart disease with heart failure -I119 Hypertensive heart disease without heart failure -I120 Hypertensive chronic kidney disease with stage 5 chronic kidney disease or end stage renal disease -I129 Hypertensive chronic kidney disease with stage 1 through stage 4 chronic kidney disease, or unspecified chronic kidney disease -I130 Hypertensive heart and chronic kidney disease with heart failure and stage 1 through stage 4 chronic kidney disease, or unspecified chronic kidney disease -I1310 Hypertensive heart and chronic kidney disease without heart failure, with stage 1 through stage 4 chronic kidney disease, or unspecified chronic kidney disease -I1311 Hypertensive heart and chronic kidney disease without heart failure, with stage 5 chronic kidney disease, or end stage renal disease -I132 Hypertensive heart and chronic kidney disease with heart failure and with stage 5 chronic kidney disease, or end stage renal disease -I150 Renovascular hypertension -I151 Hypertension secondary to other renal disorders -I152 Hypertension secondary to endocrine disorders -I158 Other secondary hypertension -I159 Secondary hypertension, unspecified -I200 Unstable angina -I201 Angina pectoris with documented spasm -I208 Other forms of angina pectoris -I209 Angina pectoris, unspecified -I2101 ST elevation (STEMI) myocardial infarction involving left main coronary artery -I2102 ST elevation (STEMI) myocardial infarction involving left anterior descending coronary artery -I2109 ST elevation (STEMI) myocardial infarction involving other coronary artery of anterior wall -I2111 ST elevation (STEMI) myocardial infarction involving right coronary artery -I2119 ST elevation (STEMI) myocardial infarction involving other coronary artery of inferior wall -I2121 ST elevation (STEMI) myocardial infarction involving left circumflex coronary artery -I2129 ST elevation (STEMI) myocardial infarction involving other sites -I213 ST elevation (STEMI) myocardial infarction of unspecified site -I214 Non-ST elevation (NSTEMI) myocardial infarction -I220 Subsequent ST elevation (STEMI) myocardial infarction of anterior wall -I221 Subsequent ST elevation (STEMI) myocardial infarction of inferior wall -I222 Subsequent non-ST elevation (NSTEMI) myocardial infarction -I228 Subsequent ST elevation (STEMI) myocardial infarction of other sites -I229 Subsequent ST elevation (STEMI) myocardial infarction of unspecified site -I230 Hemopericardium as current complication following acute myocardial infarction -I231 Atrial septal defect as current complication following acute myocardial infarction -I232 Ventricular septal defect as current complication following acute myocardial infarction -I233 Rupture of cardiac wall without hemopericardium as current complication following acute myocardial infarction -I234 Rupture of chordae tendineae as current complication following acute myocardial infarction -I235 Rupture of papillary muscle as current complication following acute myocardial infarction -I236 Thrombosis of atrium, auricular appendage, and ventricle as current complications following acute myocardial infarction -I237 Postinfarction angina -I238 Other current complications following acute myocardial infarction -I240 Acute coronary thrombosis not resulting in myocardial infarction -I241 Dressler's syndrome -I248 Other forms of acute ischemic heart disease -I249 Acute ischemic heart disease, unspecified -I2510 Atherosclerotic heart disease of native coronary artery without angina pectoris -I25110 Atherosclerotic heart disease of native coronary artery with unstable angina pectoris -I25111 Atherosclerotic heart disease of native coronary artery with angina pectoris with documented spasm -I25118 Atherosclerotic heart disease of native coronary artery with other forms of angina pectoris -I25119 Atherosclerotic heart disease of native coronary artery with unspecified angina pectoris -I252 Old myocardial infarction -I253 Aneurysm of heart -I2541 Coronary artery aneurysm -I2542 Coronary artery dissection -I255 Ischemic cardiomyopathy -I256 Silent myocardial ischemia -I25700 Atherosclerosis of coronary artery bypass graft(s), unspecified, with unstable angina pectoris -I25701 Atherosclerosis of coronary artery bypass graft(s), unspecified, with angina pectoris with documented spasm -I25708 Atherosclerosis of coronary artery bypass graft(s), unspecified, with other forms of angina pectoris -I25709 Atherosclerosis of coronary artery bypass graft(s), unspecified, with unspecified angina pectoris -I25710 Atherosclerosis of autologous vein coronary artery bypass graft(s) with unstable angina pectoris -I25711 Atherosclerosis of autologous vein coronary artery bypass graft(s) with angina pectoris with documented spasm -I25718 Atherosclerosis of autologous vein coronary artery bypass graft(s) with other forms of angina pectoris -I25719 Atherosclerosis of autologous vein coronary artery bypass graft(s) with unspecified angina pectoris -I25720 Atherosclerosis of autologous artery coronary artery bypass graft(s) with unstable angina pectoris -I25721 Atherosclerosis of autologous artery coronary artery bypass graft(s) with angina pectoris with documented spasm -I25728 Atherosclerosis of autologous artery coronary artery bypass graft(s) with other forms of angina pectoris -I25729 Atherosclerosis of autologous artery coronary artery bypass graft(s) with unspecified angina pectoris -I25730 Atherosclerosis of nonautologous biological coronary artery bypass graft(s) with unstable angina pectoris -I25731 Atherosclerosis of nonautologous biological coronary artery bypass graft(s) with angina pectoris with documented spasm -I25738 Atherosclerosis of nonautologous biological coronary artery bypass graft(s) with other forms of angina pectoris -I25739 Atherosclerosis of nonautologous biological coronary artery bypass graft(s) with unspecified angina pectoris -I25750 Atherosclerosis of native coronary artery of transplanted heart with unstable angina -I25751 Atherosclerosis of native coronary artery of transplanted heart with angina pectoris with documented spasm -I25758 Atherosclerosis of native coronary artery of transplanted heart with other forms of angina pectoris -I25759 Atherosclerosis of native coronary artery of transplanted heart with unspecified angina pectoris -I25760 Atherosclerosis of bypass graft of coronary artery of transplanted heart with unstable angina -I25761 Atherosclerosis of bypass graft of coronary artery of transplanted heart with angina pectoris with documented spasm -I25768 Atherosclerosis of bypass graft of coronary artery of transplanted heart with other forms of angina pectoris -I25769 Atherosclerosis of bypass graft of coronary artery of transplanted heart with unspecified angina pectoris -I25790 Atherosclerosis of other coronary artery bypass graft(s) with unstable angina pectoris -I25791 Atherosclerosis of other coronary artery bypass graft(s) with angina pectoris with documented spasm -I25798 Atherosclerosis of other coronary artery bypass graft(s) with other forms of angina pectoris -I25799 Atherosclerosis of other coronary artery bypass graft(s) with unspecified angina pectoris -I25810 Atherosclerosis of coronary artery bypass graft(s) without angina pectoris -I25811 Atherosclerosis of native coronary artery of transplanted heart without angina pectoris -I25812 Atherosclerosis of bypass graft of coronary artery of transplanted heart without angina pectoris -I2582 Chronic total occlusion of coronary artery -I2583 Coronary atherosclerosis due to lipid rich plaque -I2584 Coronary atherosclerosis due to calcified coronary lesion -I2589 Other forms of chronic ischemic heart disease -I259 Chronic ischemic heart disease, unspecified -I2601 Septic pulmonary embolism with acute cor pulmonale -I2602 Saddle embolus of pulmonary artery with acute cor pulmonale -I2609 Other pulmonary embolism with acute cor pulmonale -I2690 Septic pulmonary embolism without acute cor pulmonale -I2692 Saddle embolus of pulmonary artery without acute cor pulmonale -I2699 Other pulmonary embolism without acute cor pulmonale -I270 Primary pulmonary hypertension -I271 Kyphoscoliotic heart disease -I272 Other secondary pulmonary hypertension -I2781 Cor pulmonale (chronic) -I2782 Chronic pulmonary embolism -I2789 Other specified pulmonary heart diseases -I279 Pulmonary heart disease, unspecified -I280 Arteriovenous fistula of pulmonary vessels -I281 Aneurysm of pulmonary artery -I288 Other diseases of pulmonary vessels -I289 Disease of pulmonary vessels, unspecified -I300 Acute nonspecific idiopathic pericarditis -I301 Infective pericarditis -I308 Other forms of acute pericarditis -I309 Acute pericarditis, unspecified -I310 Chronic adhesive pericarditis -I311 Chronic constrictive pericarditis -I312 Hemopericardium, not elsewhere classified -I313 Pericardial effusion (noninflammatory) -I314 Cardiac tamponade -I318 Other specified diseases of pericardium -I319 Disease of pericardium, unspecified -I32 Pericarditis in diseases classified elsewhere -I330 Acute and subacute infective endocarditis -I339 Acute and subacute endocarditis, unspecified -I340 Nonrheumatic mitral (valve) insufficiency -I341 Nonrheumatic mitral (valve) prolapse -I342 Nonrheumatic mitral (valve) stenosis -I348 Other nonrheumatic mitral valve disorders -I349 Nonrheumatic mitral valve disorder, unspecified -I350 Nonrheumatic aortic (valve) stenosis -I351 Nonrheumatic aortic (valve) insufficiency -I352 Nonrheumatic aortic (valve) stenosis with insufficiency -I358 Other nonrheumatic aortic valve disorders -I359 Nonrheumatic aortic valve disorder, unspecified -I360 Nonrheumatic tricuspid (valve) stenosis -I361 Nonrheumatic tricuspid (valve) insufficiency -I362 Nonrheumatic tricuspid (valve) stenosis with insufficiency -I368 Other nonrheumatic tricuspid valve disorders -I369 Nonrheumatic tricuspid valve disorder, unspecified -I370 Nonrheumatic pulmonary valve stenosis -I371 Nonrheumatic pulmonary valve insufficiency -I372 Nonrheumatic pulmonary valve stenosis with insufficiency -I378 Other nonrheumatic pulmonary valve disorders -I379 Nonrheumatic pulmonary valve disorder, unspecified -I38 Endocarditis, valve unspecified -I39 Endocarditis and heart valve disorders in diseases classified elsewhere -I400 Infective myocarditis -I401 Isolated myocarditis -I408 Other acute myocarditis -I409 Acute myocarditis, unspecified -I41 Myocarditis in diseases classified elsewhere -I420 Dilated cardiomyopathy -I421 Obstructive hypertrophic cardiomyopathy -I422 Other hypertrophic cardiomyopathy -I423 Endomyocardial (eosinophilic) disease -I424 Endocardial fibroelastosis -I425 Other restrictive cardiomyopathy -I426 Alcoholic cardiomyopathy -I427 Cardiomyopathy due to drug and external agent -I428 Other cardiomyopathies -I429 Cardiomyopathy, unspecified -I43 Cardiomyopathy in diseases classified elsewhere -I440 Atrioventricular block, first degree -I441 Atrioventricular block, second degree -I442 Atrioventricular block, complete -I4430 Unspecified atrioventricular block -I4439 Other atrioventricular block -I444 Left anterior fascicular block -I445 Left posterior fascicular block -I4460 Unspecified fascicular block -I4469 Other fascicular block -I447 Left bundle-branch block, unspecified -I450 Right fascicular block -I4510 Unspecified right bundle-branch block -I4519 Other right bundle-branch block -I452 Bifascicular block -I453 Trifascicular block -I454 Nonspecific intraventricular block -I455 Other specified heart block -I456 Pre-excitation syndrome -I4581 Long QT syndrome -I4589 Other specified conduction disorders -I459 Conduction disorder, unspecified -I462 Cardiac arrest due to underlying cardiac condition -I468 Cardiac arrest due to other underlying condition -I469 Cardiac arrest, cause unspecified -I470 Re-entry ventricular arrhythmia -I471 Supraventricular tachycardia -I472 Ventricular tachycardia -I479 Paroxysmal tachycardia, unspecified -I480 Paroxysmal atrial fibrillation -I481 Persistent atrial fibrillation -I482 Chronic atrial fibrillation -I483 Typical atrial flutter -I484 Atypical atrial flutter -I4891 Unspecified atrial fibrillation -I4892 Unspecified atrial flutter -I4901 Ventricular fibrillation -I4902 Ventricular flutter -I491 Atrial premature depolarization -I492 Junctional premature depolarization -I493 Ventricular premature depolarization -I4940 Unspecified premature depolarization -I4949 Other premature depolarization -I495 Sick sinus syndrome -I498 Other specified cardiac arrhythmias -I499 Cardiac arrhythmia, unspecified -I501 Left ventricular failure -I5020 Unspecified systolic (congestive) heart failure -I5021 Acute systolic (congestive) heart failure -I5022 Chronic systolic (congestive) heart failure -I5023 Acute on chronic systolic (congestive) heart failure -I5030 Unspecified diastolic (congestive) heart failure -I5031 Acute diastolic (congestive) heart failure -I5032 Chronic diastolic (congestive) heart failure -I5033 Acute on chronic diastolic (congestive) heart failure -I5040 Unspecified combined systolic (congestive) and diastolic (congestive) heart failure -I5041 Acute combined systolic (congestive) and diastolic (congestive) heart failure -I5042 Chronic combined systolic (congestive) and diastolic (congestive) heart failure -I5043 Acute on chronic combined systolic (congestive) and diastolic (congestive) heart failure -I509 Heart failure, unspecified -I510 Cardiac septal defect, acquired -I511 Rupture of chordae tendineae, not elsewhere classified -I512 Rupture of papillary muscle, not elsewhere classified -I513 Intracardiac thrombosis, not elsewhere classified -I514 Myocarditis, unspecified -I515 Myocardial degeneration -I517 Cardiomegaly -I5181 Takotsubo syndrome -I5189 Other ill-defined heart diseases -I519 Heart disease, unspecified -I52 Other heart disorders in diseases classified elsewhere -I6000 Nontraumatic subarachnoid hemorrhage from unspecified carotid siphon and bifurcation -I6001 Nontraumatic subarachnoid hemorrhage from right carotid siphon and bifurcation -I6002 Nontraumatic subarachnoid hemorrhage from left carotid siphon and bifurcation -I6010 Nontraumatic subarachnoid hemorrhage from unspecified middle cerebral artery -I6011 Nontraumatic subarachnoid hemorrhage from right middle cerebral artery -I6012 Nontraumatic subarachnoid hemorrhage from left middle cerebral artery -I6020 Nontraumatic subarachnoid hemorrhage from unspecified anterior communicating artery -I6021 Nontraumatic subarachnoid hemorrhage from right anterior communicating artery -I6022 Nontraumatic subarachnoid hemorrhage from left anterior communicating artery -I6030 Nontraumatic subarachnoid hemorrhage from unspecified posterior communicating artery -I6031 Nontraumatic subarachnoid hemorrhage from right posterior communicating artery -I6032 Nontraumatic subarachnoid hemorrhage from left posterior communicating artery -I604 Nontraumatic subarachnoid hemorrhage from basilar artery -I6050 Nontraumatic subarachnoid hemorrhage from unspecified vertebral artery -I6051 Nontraumatic subarachnoid hemorrhage from right vertebral artery -I6052 Nontraumatic subarachnoid hemorrhage from left vertebral artery -I606 Nontraumatic subarachnoid hemorrhage from other intracranial arteries -I607 Nontraumatic subarachnoid hemorrhage from unspecified intracranial artery -I608 Other nontraumatic subarachnoid hemorrhage -I609 Nontraumatic subarachnoid hemorrhage, unspecified -I610 Nontraumatic intracerebral hemorrhage in hemisphere, subcortical -I611 Nontraumatic intracerebral hemorrhage in hemisphere, cortical -I612 Nontraumatic intracerebral hemorrhage in hemisphere, unspecified -I613 Nontraumatic intracerebral hemorrhage in brain stem -I614 Nontraumatic intracerebral hemorrhage in cerebellum -I615 Nontraumatic intracerebral hemorrhage, intraventricular -I616 Nontraumatic intracerebral hemorrhage, multiple localized -I618 Other nontraumatic intracerebral hemorrhage -I619 Nontraumatic intracerebral hemorrhage, unspecified -I6200 Nontraumatic subdural hemorrhage, unspecified -I6201 Nontraumatic acute subdural hemorrhage -I6202 Nontraumatic subacute subdural hemorrhage -I6203 Nontraumatic chronic subdural hemorrhage -I621 Nontraumatic extradural hemorrhage -I629 Nontraumatic intracranial hemorrhage, unspecified -I6300 Cerebral infarction due to thrombosis of unspecified precerebral artery -I63011 Cerebral infarction due to thrombosis of right vertebral artery -I63012 Cerebral infarction due to thrombosis of left vertebral artery -I63019 Cerebral infarction due to thrombosis of unspecified vertebral artery -I6302 Cerebral infarction due to thrombosis of basilar artery -I63031 Cerebral infarction due to thrombosis of right carotid artery -I63032 Cerebral infarction due to thrombosis of left carotid artery -I63039 Cerebral infarction due to thrombosis of unspecified carotid artery -I6309 Cerebral infarction due to thrombosis of other precerebral artery -I6310 Cerebral infarction due to embolism of unspecified precerebral artery -I63111 Cerebral infarction due to embolism of right vertebral artery -I63112 Cerebral infarction due to embolism of left vertebral artery -I63119 Cerebral infarction due to embolism of unspecified vertebral artery -I6312 Cerebral infarction due to embolism of basilar artery -I63131 Cerebral infarction due to embolism of right carotid artery -I63132 Cerebral infarction due to embolism of left carotid artery -I63139 Cerebral infarction due to embolism of unspecified carotid artery -I6319 Cerebral infarction due to embolism of other precerebral artery -I6320 Cerebral infarction due to unspecified occlusion or stenosis of unspecified precerebral arteries -I63211 Cerebral infarction due to unspecified occlusion or stenosis of right vertebral arteries -I63212 Cerebral infarction due to unspecified occlusion or stenosis of left vertebral arteries -I63219 Cerebral infarction due to unspecified occlusion or stenosis of unspecified vertebral arteries -I6322 Cerebral infarction due to unspecified occlusion or stenosis of basilar arteries -I63231 Cerebral infarction due to unspecified occlusion or stenosis of right carotid arteries -I63232 Cerebral infarction due to unspecified occlusion or stenosis of left carotid arteries -I63239 Cerebral infarction due to unspecified occlusion or stenosis of unspecified carotid arteries -I6329 Cerebral infarction due to unspecified occlusion or stenosis of other precerebral arteries -I6330 Cerebral infarction due to thrombosis of unspecified cerebral artery -I63311 Cerebral infarction due to thrombosis of right middle cerebral artery -I63312 Cerebral infarction due to thrombosis of left middle cerebral artery -I63319 Cerebral infarction due to thrombosis of unspecified middle cerebral artery -I63321 Cerebral infarction due to thrombosis of right anterior cerebral artery -I63322 Cerebral infarction due to thrombosis of left anterior cerebral artery -I63329 Cerebral infarction due to thrombosis of unspecified anterior cerebral artery -I63331 Cerebral infarction due to thrombosis of right posterior cerebral artery -I63332 Cerebral infarction due to thrombosis of left posterior cerebral artery -I63339 Cerebral infarction due to thrombosis of unspecified posterior cerebral artery -I63341 Cerebral infarction due to thrombosis of right cerebellar artery -I63342 Cerebral infarction due to thrombosis of left cerebellar artery -I63349 Cerebral infarction due to thrombosis of unspecified cerebellar artery -I6339 Cerebral infarction due to thrombosis of other cerebral artery -I6340 Cerebral infarction due to embolism of unspecified cerebral artery -I63411 Cerebral infarction due to embolism of right middle cerebral artery -I63412 Cerebral infarction due to embolism of left middle cerebral artery -I63419 Cerebral infarction due to embolism of unspecified middle cerebral artery -I63421 Cerebral infarction due to embolism of right anterior cerebral artery -I63422 Cerebral infarction due to embolism of left anterior cerebral artery -I63429 Cerebral infarction due to embolism of unspecified anterior cerebral artery -I63431 Cerebral infarction due to embolism of right posterior cerebral artery -I63432 Cerebral infarction due to embolism of left posterior cerebral artery -I63439 Cerebral infarction due to embolism of unspecified posterior cerebral artery -I63441 Cerebral infarction due to embolism of right cerebellar artery -I63442 Cerebral infarction due to embolism of left cerebellar artery -I63449 Cerebral infarction due to embolism of unspecified cerebellar artery -I6349 Cerebral infarction due to embolism of other cerebral artery -I6350 Cerebral infarction due to unspecified occlusion or stenosis of unspecified cerebral artery -I63511 Cerebral infarction due to unspecified occlusion or stenosis of right middle cerebral artery -I63512 Cerebral infarction due to unspecified occlusion or stenosis of left middle cerebral artery -I63519 Cerebral infarction due to unspecified occlusion or stenosis of unspecified middle cerebral artery -I63521 Cerebral infarction due to unspecified occlusion or stenosis of right anterior cerebral artery -I63522 Cerebral infarction due to unspecified occlusion or stenosis of left anterior cerebral artery -I63529 Cerebral infarction due to unspecified occlusion or stenosis of unspecified anterior cerebral artery -I63531 Cerebral infarction due to unspecified occlusion or stenosis of right posterior cerebral artery -I63532 Cerebral infarction due to unspecified occlusion or stenosis of left posterior cerebral artery -I63539 Cerebral infarction due to unspecified occlusion or stenosis of unspecified posterior cerebral artery -I63541 Cerebral infarction due to unspecified occlusion or stenosis of right cerebellar artery -I63542 Cerebral infarction due to unspecified occlusion or stenosis of left cerebellar artery -I63549 Cerebral infarction due to unspecified occlusion or stenosis of unspecified cerebellar artery -I6359 Cerebral infarction due to unspecified occlusion or stenosis of other cerebral artery -I636 Cerebral infarction due to cerebral venous thrombosis, nonpyogenic -I638 Other cerebral infarction -I639 Cerebral infarction, unspecified -I6501 Occlusion and stenosis of right vertebral artery -I6502 Occlusion and stenosis of left vertebral artery -I6503 Occlusion and stenosis of bilateral vertebral arteries -I6509 Occlusion and stenosis of unspecified vertebral artery -I651 Occlusion and stenosis of basilar artery -I6521 Occlusion and stenosis of right carotid artery -I6522 Occlusion and stenosis of left carotid artery -I6523 Occlusion and stenosis of bilateral carotid arteries -I6529 Occlusion and stenosis of unspecified carotid artery -I658 Occlusion and stenosis of other precerebral arteries -I659 Occlusion and stenosis of unspecified precerebral artery -I6601 Occlusion and stenosis of right middle cerebral artery -I6602 Occlusion and stenosis of left middle cerebral artery -I6603 Occlusion and stenosis of bilateral middle cerebral arteries -I6609 Occlusion and stenosis of unspecified middle cerebral artery -I6611 Occlusion and stenosis of right anterior cerebral artery -I6612 Occlusion and stenosis of left anterior cerebral artery -I6613 Occlusion and stenosis of bilateral anterior cerebral arteries -I6619 Occlusion and stenosis of unspecified anterior cerebral artery -I6621 Occlusion and stenosis of right posterior cerebral artery -I6622 Occlusion and stenosis of left posterior cerebral artery -I6623 Occlusion and stenosis of bilateral posterior cerebral arteries -I6629 Occlusion and stenosis of unspecified posterior cerebral artery -I663 Occlusion and stenosis of cerebellar arteries -I668 Occlusion and stenosis of other cerebral arteries -I669 Occlusion and stenosis of unspecified cerebral artery -I670 Dissection of cerebral arteries, nonruptured -I671 Cerebral aneurysm, nonruptured -I672 Cerebral atherosclerosis -I673 Progressive vascular leukoencephalopathy -I674 Hypertensive encephalopathy -I675 Moyamoya disease -I676 Nonpyogenic thrombosis of intracranial venous system -I677 Cerebral arteritis, not elsewhere classified -I6781 Acute cerebrovascular insufficiency -I6782 Cerebral ischemia -I6783 Posterior reversible encephalopathy syndrome -I67841 Reversible cerebrovascular vasoconstriction syndrome -I67848 Other cerebrovascular vasospasm and vasoconstriction -I6789 Other cerebrovascular disease -I679 Cerebrovascular disease, unspecified -I680 Cerebral amyloid angiopathy -I682 Cerebral arteritis in other diseases classified elsewhere -I688 Other cerebrovascular disorders in diseases classified elsewhere -I6900 Unspecified sequelae of nontraumatic subarachnoid hemorrhage -I6901 Cognitive deficits following nontraumatic subarachnoid hemorrhage -I69020 Aphasia following nontraumatic subarachnoid hemorrhage -I69021 Dysphasia following nontraumatic subarachnoid hemorrhage -I69022 Dysarthria following nontraumatic subarachnoid hemorrhage -I69023 Fluency disorder following nontraumatic subarachnoid hemorrhage -I69028 Other speech and language deficits following nontraumatic subarachnoid hemorrhage -I69031 Monoplegia of upper limb following nontraumatic subarachnoid hemorrhage affecting right dominant side -I69032 Monoplegia of upper limb following nontraumatic subarachnoid hemorrhage affecting left dominant side -I69033 Monoplegia of upper limb following nontraumatic subarachnoid hemorrhage affecting right non-dominant side -I69034 Monoplegia of upper limb following nontraumatic subarachnoid hemorrhage affecting left non-dominant side -I69039 Monoplegia of upper limb following nontraumatic subarachnoid hemorrhage affecting unspecified side -I69041 Monoplegia of lower limb following nontraumatic subarachnoid hemorrhage affecting right dominant side -I69042 Monoplegia of lower limb following nontraumatic subarachnoid hemorrhage affecting left dominant side -I69043 Monoplegia of lower limb following nontraumatic subarachnoid hemorrhage affecting right non-dominant side -I69044 Monoplegia of lower limb following nontraumatic subarachnoid hemorrhage affecting left non-dominant side -I69049 Monoplegia of lower limb following nontraumatic subarachnoid hemorrhage affecting unspecified side -I69051 Hemiplegia and hemiparesis following nontraumatic subarachnoid hemorrhage affecting right dominant side -I69052 Hemiplegia and hemiparesis following nontraumatic subarachnoid hemorrhage affecting left dominant side -I69053 Hemiplegia and hemiparesis following nontraumatic subarachnoid hemorrhage affecting right non-dominant side -I69054 Hemiplegia and hemiparesis following nontraumatic subarachnoid hemorrhage affecting left non-dominant side -I69059 Hemiplegia and hemiparesis following nontraumatic subarachnoid hemorrhage affecting unspecified side -I69061 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage affecting right dominant side -I69062 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage affecting left dominant side -I69063 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage affecting right non-dominant side -I69064 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage affecting left non-dominant side -I69065 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage, bilateral -I69069 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage affecting unspecified side -I69090 Apraxia following nontraumatic subarachnoid hemorrhage -I69091 Dysphagia following nontraumatic subarachnoid hemorrhage -I69092 Facial weakness following nontraumatic subarachnoid hemorrhage -I69093 Ataxia following nontraumatic subarachnoid hemorrhage -I69098 Other sequelae following nontraumatic subarachnoid hemorrhage -I6910 Unspecified sequelae of nontraumatic intracerebral hemorrhage -I6911 Cognitive deficits following nontraumatic intracerebral hemorrhage -I69120 Aphasia following nontraumatic intracerebral hemorrhage -I69121 Dysphasia following nontraumatic intracerebral hemorrhage -I69122 Dysarthria following nontraumatic intracerebral hemorrhage -I69123 Fluency disorder following nontraumatic intracerebral hemorrhage -I69128 Other speech and language deficits following nontraumatic intracerebral hemorrhage -I69131 Monoplegia of upper limb following nontraumatic intracerebral hemorrhage affecting right dominant side -I69132 Monoplegia of upper limb following nontraumatic intracerebral hemorrhage affecting left dominant side -I69133 Monoplegia of upper limb following nontraumatic intracerebral hemorrhage affecting right non-dominant side -I69134 Monoplegia of upper limb following nontraumatic intracerebral hemorrhage affecting left non-dominant side -I69139 Monoplegia of upper limb following nontraumatic intracerebral hemorrhage affecting unspecified side -I69141 Monoplegia of lower limb following nontraumatic intracerebral hemorrhage affecting right dominant side -I69142 Monoplegia of lower limb following nontraumatic intracerebral hemorrhage affecting left dominant side -I69143 Monoplegia of lower limb following nontraumatic intracerebral hemorrhage affecting right non-dominant side -I69144 Monoplegia of lower limb following nontraumatic intracerebral hemorrhage affecting left non-dominant side -I69149 Monoplegia of lower limb following nontraumatic intracerebral hemorrhage affecting unspecified side -I69151 Hemiplegia and hemiparesis following nontraumatic intracerebral hemorrhage affecting right dominant side -I69152 Hemiplegia and hemiparesis following nontraumatic intracerebral hemorrhage affecting left dominant side -I69153 Hemiplegia and hemiparesis following nontraumatic intracerebral hemorrhage affecting right non-dominant side -I69154 Hemiplegia and hemiparesis following nontraumatic intracerebral hemorrhage affecting left non-dominant side -I69159 Hemiplegia and hemiparesis following nontraumatic intracerebral hemorrhage affecting unspecified side -I69161 Other paralytic syndrome following nontraumatic intracerebral hemorrhage affecting right dominant side -I69162 Other paralytic syndrome following nontraumatic intracerebral hemorrhage affecting left dominant side -I69163 Other paralytic syndrome following nontraumatic intracerebral hemorrhage affecting right non-dominant side -I69164 Other paralytic syndrome following nontraumatic intracerebral hemorrhage affecting left non-dominant side -I69165 Other paralytic syndrome following nontraumatic intracerebral hemorrhage, bilateral -I69169 Other paralytic syndrome following nontraumatic intracerebral hemorrhage affecting unspecified side -I69190 Apraxia following nontraumatic intracerebral hemorrhage -I69191 Dysphagia following nontraumatic intracerebral hemorrhage -I69192 Facial weakness following nontraumatic intracerebral hemorrhage -I69193 Ataxia following nontraumatic intracerebral hemorrhage -I69198 Other sequelae of nontraumatic intracerebral hemorrhage -I6920 Unspecified sequelae of other nontraumatic intracranial hemorrhage -I6921 Cognitive deficits following other nontraumatic intracranial hemorrhage -I69220 Aphasia following other nontraumatic intracranial hemorrhage -I69221 Dysphasia following other nontraumatic intracranial hemorrhage -I69222 Dysarthria following other nontraumatic intracranial hemorrhage -I69223 Fluency disorder following other nontraumatic intracranial hemorrhage -I69228 Other speech and language deficits following other nontraumatic intracranial hemorrhage -I69231 Monoplegia of upper limb following other nontraumatic intracranial hemorrhage affecting right dominant side -I69232 Monoplegia of upper limb following other nontraumatic intracranial hemorrhage affecting left dominant side -I69233 Monoplegia of upper limb following other nontraumatic intracranial hemorrhage affecting right non-dominant side -I69234 Monoplegia of upper limb following other nontraumatic intracranial hemorrhage affecting left non-dominant side -I69239 Monoplegia of upper limb following other nontraumatic intracranial hemorrhage affecting unspecified side -I69241 Monoplegia of lower limb following other nontraumatic intracranial hemorrhage affecting right dominant side -I69242 Monoplegia of lower limb following other nontraumatic intracranial hemorrhage affecting left dominant side -I69243 Monoplegia of lower limb following other nontraumatic intracranial hemorrhage affecting right non-dominant side -I69244 Monoplegia of lower limb following other nontraumatic intracranial hemorrhage affecting left non-dominant side -I69249 Monoplegia of lower limb following other nontraumatic intracranial hemorrhage affecting unspecified side -I69251 Hemiplegia and hemiparesis following other nontraumatic intracranial hemorrhage affecting right dominant side -I69252 Hemiplegia and hemiparesis following other nontraumatic intracranial hemorrhage affecting left dominant side -I69253 Hemiplegia and hemiparesis following other nontraumatic intracranial hemorrhage affecting right non-dominant side -I69254 Hemiplegia and hemiparesis following other nontraumatic intracranial hemorrhage affecting left non-dominant side -I69259 Hemiplegia and hemiparesis following other nontraumatic intracranial hemorrhage affecting unspecified side -I69261 Other paralytic syndrome following other nontraumatic intracranial hemorrhage affecting right dominant side -I69262 Other paralytic syndrome following other nontraumatic intracranial hemorrhage affecting left dominant side -I69263 Other paralytic syndrome following other nontraumatic intracranial hemorrhage affecting right non-dominant side -I69264 Other paralytic syndrome following other nontraumatic intracranial hemorrhage affecting left non-dominant side -I69265 Other paralytic syndrome following other nontraumatic intracranial hemorrhage, bilateral -I69269 Other paralytic syndrome following other nontraumatic intracranial hemorrhage affecting unspecified side -I69290 Apraxia following other nontraumatic intracranial hemorrhage -I69291 Dysphagia following other nontraumatic intracranial hemorrhage -I69292 Facial weakness following other nontraumatic intracranial hemorrhage -I69293 Ataxia following other nontraumatic intracranial hemorrhage -I69298 Other sequelae of other nontraumatic intracranial hemorrhage -I6930 Unspecified sequelae of cerebral infarction -I6931 Cognitive deficits following cerebral infarction -I69320 Aphasia following cerebral infarction -I69321 Dysphasia following cerebral infarction -I69322 Dysarthria following cerebral infarction -I69323 Fluency disorder following cerebral infarction -I69328 Other speech and language deficits following cerebral infarction -I69331 Monoplegia of upper limb following cerebral infarction affecting right dominant side -I69332 Monoplegia of upper limb following cerebral infarction affecting left dominant side -I69333 Monoplegia of upper limb following cerebral infarction affecting right non-dominant side -I69334 Monoplegia of upper limb following cerebral infarction affecting left non-dominant side -I69339 Monoplegia of upper limb following cerebral infarction affecting unspecified side -I69341 Monoplegia of lower limb following cerebral infarction affecting right dominant side -I69342 Monoplegia of lower limb following cerebral infarction affecting left dominant side -I69343 Monoplegia of lower limb following cerebral infarction affecting right non-dominant side -I69344 Monoplegia of lower limb following cerebral infarction affecting left non-dominant side -I69349 Monoplegia of lower limb following cerebral infarction affecting unspecified side -I69351 Hemiplegia and hemiparesis following cerebral infarction affecting right dominant side -I69352 Hemiplegia and hemiparesis following cerebral infarction affecting left dominant side -I69353 Hemiplegia and hemiparesis following cerebral infarction affecting right non-dominant side -I69354 Hemiplegia and hemiparesis following cerebral infarction affecting left non-dominant side -I69359 Hemiplegia and hemiparesis following cerebral infarction affecting unspecified side -I69361 Other paralytic syndrome following cerebral infarction affecting right dominant side -I69362 Other paralytic syndrome following cerebral infarction affecting left dominant side -I69363 Other paralytic syndrome following cerebral infarction affecting right non-dominant side -I69364 Other paralytic syndrome following cerebral infarction affecting left non-dominant side -I69365 Other paralytic syndrome following cerebral infarction, bilateral -I69369 Other paralytic syndrome following cerebral infarction affecting unspecified side -I69390 Apraxia following cerebral infarction -I69391 Dysphagia following cerebral infarction -I69392 Facial weakness following cerebral infarction -I69393 Ataxia following cerebral infarction -I69398 Other sequelae of cerebral infarction -I6980 Unspecified sequelae of other cerebrovascular disease -I6981 Cognitive deficits following other cerebrovascular disease -I69820 Aphasia following other cerebrovascular disease -I69821 Dysphasia following other cerebrovascular disease -I69822 Dysarthria following other cerebrovascular disease -I69823 Fluency disorder following other cerebrovascular disease -I69828 Other speech and language deficits following other cerebrovascular disease -I69831 Monoplegia of upper limb following other cerebrovascular disease affecting right dominant side -I69832 Monoplegia of upper limb following other cerebrovascular disease affecting left dominant side -I69833 Monoplegia of upper limb following other cerebrovascular disease affecting right non-dominant side -I69834 Monoplegia of upper limb following other cerebrovascular disease affecting left non-dominant side -I69839 Monoplegia of upper limb following other cerebrovascular disease affecting unspecified side -I69841 Monoplegia of lower limb following other cerebrovascular disease affecting right dominant side -I69842 Monoplegia of lower limb following other cerebrovascular disease affecting left dominant side -I69843 Monoplegia of lower limb following other cerebrovascular disease affecting right non-dominant side -I69844 Monoplegia of lower limb following other cerebrovascular disease affecting left non-dominant side -I69849 Monoplegia of lower limb following other cerebrovascular disease affecting unspecified side -I69851 Hemiplegia and hemiparesis following other cerebrovascular disease affecting right dominant side -I69852 Hemiplegia and hemiparesis following other cerebrovascular disease affecting left dominant side -I69853 Hemiplegia and hemiparesis following other cerebrovascular disease affecting right non-dominant side -I69854 Hemiplegia and hemiparesis following other cerebrovascular disease affecting left non-dominant side -I69859 Hemiplegia and hemiparesis following other cerebrovascular disease affecting unspecified side -I69861 Other paralytic syndrome following other cerebrovascular disease affecting right dominant side -I69862 Other paralytic syndrome following other cerebrovascular disease affecting left dominant side -I69863 Other paralytic syndrome following other cerebrovascular disease affecting right non-dominant side -I69864 Other paralytic syndrome following other cerebrovascular disease affecting left non-dominant side -I69865 Other paralytic syndrome following other cerebrovascular disease, bilateral -I69869 Other paralytic syndrome following other cerebrovascular disease affecting unspecified side -I69890 Apraxia following other cerebrovascular disease -I69891 Dysphagia following other cerebrovascular disease -I69892 Facial weakness following other cerebrovascular disease -I69893 Ataxia following other cerebrovascular disease -I69898 Other sequelae of other cerebrovascular disease -I6990 Unspecified sequelae of unspecified cerebrovascular disease -I6991 Cognitive deficits following unspecified cerebrovascular disease -I69920 Aphasia following unspecified cerebrovascular disease -I69921 Dysphasia following unspecified cerebrovascular disease -I69922 Dysarthria following unspecified cerebrovascular disease -I69923 Fluency disorder following unspecified cerebrovascular disease -I69928 Other speech and language deficits following unspecified cerebrovascular disease -I69931 Monoplegia of upper limb following unspecified cerebrovascular disease affecting right dominant side -I69932 Monoplegia of upper limb following unspecified cerebrovascular disease affecting left dominant side -I69933 Monoplegia of upper limb following unspecified cerebrovascular disease affecting right non-dominant side -I69934 Monoplegia of upper limb following unspecified cerebrovascular disease affecting left non-dominant side -I69939 Monoplegia of upper limb following unspecified cerebrovascular disease affecting unspecified side -I69941 Monoplegia of lower limb following unspecified cerebrovascular disease affecting right dominant side -I69942 Monoplegia of lower limb following unspecified cerebrovascular disease affecting left dominant side -I69943 Monoplegia of lower limb following unspecified cerebrovascular disease affecting right non-dominant side -I69944 Monoplegia of lower limb following unspecified cerebrovascular disease affecting left non-dominant side -I69949 Monoplegia of lower limb following unspecified cerebrovascular disease affecting unspecified side -I69951 Hemiplegia and hemiparesis following unspecified cerebrovascular disease affecting right dominant side -I69952 Hemiplegia and hemiparesis following unspecified cerebrovascular disease affecting left dominant side -I69953 Hemiplegia and hemiparesis following unspecified cerebrovascular disease affecting right non-dominant side -I69954 Hemiplegia and hemiparesis following unspecified cerebrovascular disease affecting left non-dominant side -I69959 Hemiplegia and hemiparesis following unspecified cerebrovascular disease affecting unspecified side -I69961 Other paralytic syndrome following unspecified cerebrovascular disease affecting right dominant side -I69962 Other paralytic syndrome following unspecified cerebrovascular disease affecting left dominant side -I69963 Other paralytic syndrome following unspecified cerebrovascular disease affecting right non-dominant side -I69964 Other paralytic syndrome following unspecified cerebrovascular disease affecting left non-dominant side -I69965 Other paralytic syndrome following unspecified cerebrovascular disease, bilateral -I69969 Other paralytic syndrome following unspecified cerebrovascular disease affecting unspecified side -I69990 Apraxia following unspecified cerebrovascular disease -I69991 Dysphagia following unspecified cerebrovascular disease -I69992 Facial weakness following unspecified cerebrovascular disease -I69993 Ataxia following unspecified cerebrovascular disease -I69998 Other sequelae following unspecified cerebrovascular disease -I700 Atherosclerosis of aorta -I701 Atherosclerosis of renal artery -I70201 Unspecified atherosclerosis of native arteries of extremities, right leg -I70202 Unspecified atherosclerosis of native arteries of extremities, left leg -I70203 Unspecified atherosclerosis of native arteries of extremities, bilateral legs -I70208 Unspecified atherosclerosis of native arteries of extremities, other extremity -I70209 Unspecified atherosclerosis of native arteries of extremities, unspecified extremity -I70211 Atherosclerosis of native arteries of extremities with intermittent claudication, right leg -I70212 Atherosclerosis of native arteries of extremities with intermittent claudication, left leg -I70213 Atherosclerosis of native arteries of extremities with intermittent claudication, bilateral legs -I70218 Atherosclerosis of native arteries of extremities with intermittent claudication, other extremity -I70219 Atherosclerosis of native arteries of extremities with intermittent claudication, unspecified extremity -I70221 Atherosclerosis of native arteries of extremities with rest pain, right leg -I70222 Atherosclerosis of native arteries of extremities with rest pain, left leg -I70223 Atherosclerosis of native arteries of extremities with rest pain, bilateral legs -I70228 Atherosclerosis of native arteries of extremities with rest pain, other extremity -I70229 Atherosclerosis of native arteries of extremities with rest pain, unspecified extremity -I70231 Atherosclerosis of native arteries of right leg with ulceration of thigh -I70232 Atherosclerosis of native arteries of right leg with ulceration of calf -I70233 Atherosclerosis of native arteries of right leg with ulceration of ankle -I70234 Atherosclerosis of native arteries of right leg with ulceration of heel and midfoot -I70235 Atherosclerosis of native arteries of right leg with ulceration of other part of foot -I70238 Atherosclerosis of native arteries of right leg with ulceration of other part of lower right leg -I70239 Atherosclerosis of native arteries of right leg with ulceration of unspecified site -I70241 Atherosclerosis of native arteries of left leg with ulceration of thigh -I70242 Atherosclerosis of native arteries of left leg with ulceration of calf -I70243 Atherosclerosis of native arteries of left leg with ulceration of ankle -I70244 Atherosclerosis of native arteries of left leg with ulceration of heel and midfoot -I70245 Atherosclerosis of native arteries of left leg with ulceration of other part of foot -I70248 Atherosclerosis of native arteries of left leg with ulceration of other part of lower left leg -I70249 Atherosclerosis of native arteries of left leg with ulceration of unspecified site -I7025 Atherosclerosis of native arteries of other extremities with ulceration -I70261 Atherosclerosis of native arteries of extremities with gangrene, right leg -I70262 Atherosclerosis of native arteries of extremities with gangrene, left leg -I70263 Atherosclerosis of native arteries of extremities with gangrene, bilateral legs -I70268 Atherosclerosis of native arteries of extremities with gangrene, other extremity -I70269 Atherosclerosis of native arteries of extremities with gangrene, unspecified extremity -I70291 Other atherosclerosis of native arteries of extremities, right leg -I70292 Other atherosclerosis of native arteries of extremities, left leg -I70293 Other atherosclerosis of native arteries of extremities, bilateral legs -I70298 Other atherosclerosis of native arteries of extremities, other extremity -I70299 Other atherosclerosis of native arteries of extremities, unspecified extremity -I70301 Unspecified atherosclerosis of unspecified type of bypass graft(s) of the extremities, right leg -I70302 Unspecified atherosclerosis of unspecified type of bypass graft(s) of the extremities, left leg -I70303 Unspecified atherosclerosis of unspecified type of bypass graft(s) of the extremities, bilateral legs -I70308 Unspecified atherosclerosis of unspecified type of bypass graft(s) of the extremities, other extremity -I70309 Unspecified atherosclerosis of unspecified type of bypass graft(s) of the extremities, unspecified extremity -I70311 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with intermittent claudication, right leg -I70312 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with intermittent claudication, left leg -I70313 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with intermittent claudication, bilateral legs -I70318 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with intermittent claudication, other extremity -I70319 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with intermittent claudication, unspecified extremity -I70321 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with rest pain, right leg -I70322 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with rest pain, left leg -I70323 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with rest pain, bilateral legs -I70328 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with rest pain, other extremity -I70329 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with rest pain, unspecified extremity -I70331 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of thigh -I70332 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of calf -I70333 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of ankle -I70334 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of heel and midfoot -I70335 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of other part of foot -I70338 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of other part of lower leg -I70339 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of unspecified site -I70341 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of thigh -I70342 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of calf -I70343 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of ankle -I70344 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of heel and midfoot -I70345 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of other part of foot -I70348 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of other part of lower leg -I70349 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of unspecified site -I7035 Atherosclerosis of unspecified type of bypass graft(s) of other extremity with ulceration -I70361 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with gangrene, right leg -I70362 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with gangrene, left leg -I70363 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with gangrene, bilateral legs -I70368 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with gangrene, other extremity -I70369 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with gangrene, unspecified extremity -I70391 Other atherosclerosis of unspecified type of bypass graft(s) of the extremities, right leg -I70392 Other atherosclerosis of unspecified type of bypass graft(s) of the extremities, left leg -I70393 Other atherosclerosis of unspecified type of bypass graft(s) of the extremities, bilateral legs -I70398 Other atherosclerosis of unspecified type of bypass graft(s) of the extremities, other extremity -I70399 Other atherosclerosis of unspecified type of bypass graft(s) of the extremities, unspecified extremity -I70401 Unspecified atherosclerosis of autologous vein bypass graft(s) of the extremities, right leg -I70402 Unspecified atherosclerosis of autologous vein bypass graft(s) of the extremities, left leg -I70403 Unspecified atherosclerosis of autologous vein bypass graft(s) of the extremities, bilateral legs -I70408 Unspecified atherosclerosis of autologous vein bypass graft(s) of the extremities, other extremity -I70409 Unspecified atherosclerosis of autologous vein bypass graft(s) of the extremities, unspecified extremity -I70411 Atherosclerosis of autologous vein bypass graft(s) of the extremities with intermittent claudication, right leg -I70412 Atherosclerosis of autologous vein bypass graft(s) of the extremities with intermittent claudication, left leg -I70413 Atherosclerosis of autologous vein bypass graft(s) of the extremities with intermittent claudication, bilateral legs -I70418 Atherosclerosis of autologous vein bypass graft(s) of the extremities with intermittent claudication, other extremity -I70419 Atherosclerosis of autologous vein bypass graft(s) of the extremities with intermittent claudication, unspecified extremity -I70421 Atherosclerosis of autologous vein bypass graft(s) of the extremities with rest pain, right leg -I70422 Atherosclerosis of autologous vein bypass graft(s) of the extremities with rest pain, left leg -I70423 Atherosclerosis of autologous vein bypass graft(s) of the extremities with rest pain, bilateral legs -I70428 Atherosclerosis of autologous vein bypass graft(s) of the extremities with rest pain, other extremity -I70429 Atherosclerosis of autologous vein bypass graft(s) of the extremities with rest pain, unspecified extremity -I70431 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of thigh -I70432 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of calf -I70433 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of ankle -I70434 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of heel and midfoot -I70435 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of other part of foot -I70438 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of other part of lower leg -I70439 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of unspecified site -I70441 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of thigh -I70442 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of calf -I70443 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of ankle -I70444 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of heel and midfoot -I70445 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of other part of foot -I70448 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of other part of lower leg -I70449 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of unspecified site -I7045 Atherosclerosis of autologous vein bypass graft(s) of other extremity with ulceration -I70461 Atherosclerosis of autologous vein bypass graft(s) of the extremities with gangrene, right leg -I70462 Atherosclerosis of autologous vein bypass graft(s) of the extremities with gangrene, left leg -I70463 Atherosclerosis of autologous vein bypass graft(s) of the extremities with gangrene, bilateral legs -I70468 Atherosclerosis of autologous vein bypass graft(s) of the extremities with gangrene, other extremity -I70469 Atherosclerosis of autologous vein bypass graft(s) of the extremities with gangrene, unspecified extremity -I70491 Other atherosclerosis of autologous vein bypass graft(s) of the extremities, right leg -I70492 Other atherosclerosis of autologous vein bypass graft(s) of the extremities, left leg -I70493 Other atherosclerosis of autologous vein bypass graft(s) of the extremities, bilateral legs -I70498 Other atherosclerosis of autologous vein bypass graft(s) of the extremities, other extremity -I70499 Other atherosclerosis of autologous vein bypass graft(s) of the extremities, unspecified extremity -I70501 Unspecified atherosclerosis of nonautologous biological bypass graft(s) of the extremities, right leg -I70502 Unspecified atherosclerosis of nonautologous biological bypass graft(s) of the extremities, left leg -I70503 Unspecified atherosclerosis of nonautologous biological bypass graft(s) of the extremities, bilateral legs -I70508 Unspecified atherosclerosis of nonautologous biological bypass graft(s) of the extremities, other extremity -I70509 Unspecified atherosclerosis of nonautologous biological bypass graft(s) of the extremities, unspecified extremity -I70511 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with intermittent claudication, right leg -I70512 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with intermittent claudication, left leg -I70513 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with intermittent claudication, bilateral legs -I70518 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with intermittent claudication, other extremity -I70519 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with intermittent claudication, unspecified extremity -I70521 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with rest pain, right leg -I70522 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with rest pain, left leg -I70523 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with rest pain, bilateral legs -I70528 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with rest pain, other extremity -I70529 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with rest pain, unspecified extremity -I70531 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of thigh -I70532 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of calf -I70533 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of ankle -I70534 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of heel and midfoot -I70535 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of other part of foot -I70538 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of other part of lower leg -I70539 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of unspecified site -I70541 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of thigh -I70542 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of calf -I70543 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of ankle -I70544 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of heel and midfoot -I70545 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of other part of foot -I70548 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of other part of lower leg -I70549 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of unspecified site -I7055 Atherosclerosis of nonautologous biological bypass graft(s) of other extremity with ulceration -I70561 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with gangrene, right leg -I70562 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with gangrene, left leg -I70563 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with gangrene, bilateral legs -I70568 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with gangrene, other extremity -I70569 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with gangrene, unspecified extremity -I70591 Other atherosclerosis of nonautologous biological bypass graft(s) of the extremities, right leg -I70592 Other atherosclerosis of nonautologous biological bypass graft(s) of the extremities, left leg -I70593 Other atherosclerosis of nonautologous biological bypass graft(s) of the extremities, bilateral legs -I70598 Other atherosclerosis of nonautologous biological bypass graft(s) of the extremities, other extremity -I70599 Other atherosclerosis of nonautologous biological bypass graft(s) of the extremities, unspecified extremity -I70601 Unspecified atherosclerosis of nonbiological bypass graft(s) of the extremities, right leg -I70602 Unspecified atherosclerosis of nonbiological bypass graft(s) of the extremities, left leg -I70603 Unspecified atherosclerosis of nonbiological bypass graft(s) of the extremities, bilateral legs -I70608 Unspecified atherosclerosis of nonbiological bypass graft(s) of the extremities, other extremity -I70609 Unspecified atherosclerosis of nonbiological bypass graft(s) of the extremities, unspecified extremity -I70611 Atherosclerosis of nonbiological bypass graft(s) of the extremities with intermittent claudication, right leg -I70612 Atherosclerosis of nonbiological bypass graft(s) of the extremities with intermittent claudication, left leg -I70613 Atherosclerosis of nonbiological bypass graft(s) of the extremities with intermittent claudication, bilateral legs -I70618 Atherosclerosis of nonbiological bypass graft(s) of the extremities with intermittent claudication, other extremity -I70619 Atherosclerosis of nonbiological bypass graft(s) of the extremities with intermittent claudication, unspecified extremity -I70621 Atherosclerosis of nonbiological bypass graft(s) of the extremities with rest pain, right leg -I70622 Atherosclerosis of nonbiological bypass graft(s) of the extremities with rest pain, left leg -I70623 Atherosclerosis of nonbiological bypass graft(s) of the extremities with rest pain, bilateral legs -I70628 Atherosclerosis of nonbiological bypass graft(s) of the extremities with rest pain, other extremity -I70629 Atherosclerosis of nonbiological bypass graft(s) of the extremities with rest pain, unspecified extremity -I70631 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of thigh -I70632 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of calf -I70633 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of ankle -I70634 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of heel and midfoot -I70635 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of other part of foot -I70638 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of other part of lower leg -I70639 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of unspecified site -I70641 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of thigh -I70642 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of calf -I70643 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of ankle -I70644 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of heel and midfoot -I70645 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of other part of foot -I70648 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of other part of lower leg -I70649 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of unspecified site -I7065 Atherosclerosis of nonbiological bypass graft(s) of other extremity with ulceration -I70661 Atherosclerosis of nonbiological bypass graft(s) of the extremities with gangrene, right leg -I70662 Atherosclerosis of nonbiological bypass graft(s) of the extremities with gangrene, left leg -I70663 Atherosclerosis of nonbiological bypass graft(s) of the extremities with gangrene, bilateral legs -I70668 Atherosclerosis of nonbiological bypass graft(s) of the extremities with gangrene, other extremity -I70669 Atherosclerosis of nonbiological bypass graft(s) of the extremities with gangrene, unspecified extremity -I70691 Other atherosclerosis of nonbiological bypass graft(s) of the extremities, right leg -I70692 Other atherosclerosis of nonbiological bypass graft(s) of the extremities, left leg -I70693 Other atherosclerosis of nonbiological bypass graft(s) of the extremities, bilateral legs -I70698 Other atherosclerosis of nonbiological bypass graft(s) of the extremities, other extremity -I70699 Other atherosclerosis of nonbiological bypass graft(s) of the extremities, unspecified extremity -I70701 Unspecified atherosclerosis of other type of bypass graft(s) of the extremities, right leg -I70702 Unspecified atherosclerosis of other type of bypass graft(s) of the extremities, left leg -I70703 Unspecified atherosclerosis of other type of bypass graft(s) of the extremities, bilateral legs -I70708 Unspecified atherosclerosis of other type of bypass graft(s) of the extremities, other extremity -I70709 Unspecified atherosclerosis of other type of bypass graft(s) of the extremities, unspecified extremity -I70711 Atherosclerosis of other type of bypass graft(s) of the extremities with intermittent claudication, right leg -I70712 Atherosclerosis of other type of bypass graft(s) of the extremities with intermittent claudication, left leg -I70713 Atherosclerosis of other type of bypass graft(s) of the extremities with intermittent claudication, bilateral legs -I70718 Atherosclerosis of other type of bypass graft(s) of the extremities with intermittent claudication, other extremity -I70719 Atherosclerosis of other type of bypass graft(s) of the extremities with intermittent claudication, unspecified extremity -I70721 Atherosclerosis of other type of bypass graft(s) of the extremities with rest pain, right leg -I70722 Atherosclerosis of other type of bypass graft(s) of the extremities with rest pain, left leg -I70723 Atherosclerosis of other type of bypass graft(s) of the extremities with rest pain, bilateral legs -I70728 Atherosclerosis of other type of bypass graft(s) of the extremities with rest pain, other extremity -I70729 Atherosclerosis of other type of bypass graft(s) of the extremities with rest pain, unspecified extremity -I70731 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of thigh -I70732 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of calf -I70733 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of ankle -I70734 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of heel and midfoot -I70735 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of other part of foot -I70738 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of other part of lower leg -I70739 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of unspecified site -I70741 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of thigh -I70742 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of calf -I70743 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of ankle -I70744 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of heel and midfoot -I70745 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of other part of foot -I70748 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of other part of lower leg -I70749 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of unspecified site -I7075 Atherosclerosis of other type of bypass graft(s) of other extremity with ulceration -I70761 Atherosclerosis of other type of bypass graft(s) of the extremities with gangrene, right leg -I70762 Atherosclerosis of other type of bypass graft(s) of the extremities with gangrene, left leg -I70763 Atherosclerosis of other type of bypass graft(s) of the extremities with gangrene, bilateral legs -I70768 Atherosclerosis of other type of bypass graft(s) of the extremities with gangrene, other extremity -I70769 Atherosclerosis of other type of bypass graft(s) of the extremities with gangrene, unspecified extremity -I70791 Other atherosclerosis of other type of bypass graft(s) of the extremities, right leg -I70792 Other atherosclerosis of other type of bypass graft(s) of the extremities, left leg -I70793 Other atherosclerosis of other type of bypass graft(s) of the extremities, bilateral legs -I70798 Other atherosclerosis of other type of bypass graft(s) of the extremities, other extremity -I70799 Other atherosclerosis of other type of bypass graft(s) of the extremities, unspecified extremity -I708 Atherosclerosis of other arteries -I7090 Unspecified atherosclerosis -I7091 Generalized atherosclerosis -I7092 Chronic total occlusion of artery of the extremities -I7100 Dissection of unspecified site of aorta -I7101 Dissection of thoracic aorta -I7102 Dissection of abdominal aorta -I7103 Dissection of thoracoabdominal aorta -I711 Thoracic aortic aneurysm, ruptured -I712 Thoracic aortic aneurysm, without rupture -I713 Abdominal aortic aneurysm, ruptured -I714 Abdominal aortic aneurysm, without rupture -I715 Thoracoabdominal aortic aneurysm, ruptured -I716 Thoracoabdominal aortic aneurysm, without rupture -I718 Aortic aneurysm of unspecified site, ruptured -I719 Aortic aneurysm of unspecified site, without rupture -I720 Aneurysm of carotid artery -I721 Aneurysm of artery of upper extremity -I722 Aneurysm of renal artery -I723 Aneurysm of iliac artery -I724 Aneurysm of artery of lower extremity -I728 Aneurysm of other specified arteries -I729 Aneurysm of unspecified site -I7300 Raynaud's syndrome without gangrene -I7301 Raynaud's syndrome with gangrene -I731 Thromboangiitis obliterans [Buerger's disease] -I7381 Erythromelalgia -I7389 Other specified peripheral vascular diseases -I739 Peripheral vascular disease, unspecified -I7401 Saddle embolus of abdominal aorta -I7409 Other arterial embolism and thrombosis of abdominal aorta -I7410 Embolism and thrombosis of unspecified parts of aorta -I7411 Embolism and thrombosis of thoracic aorta -I7419 Embolism and thrombosis of other parts of aorta -I742 Embolism and thrombosis of arteries of the upper extremities -I743 Embolism and thrombosis of arteries of the lower extremities -I744 Embolism and thrombosis of arteries of extremities, unspecified -I745 Embolism and thrombosis of iliac artery -I748 Embolism and thrombosis of other arteries -I749 Embolism and thrombosis of unspecified artery -I75011 Atheroembolism of right upper extremity -I75012 Atheroembolism of left upper extremity -I75013 Atheroembolism of bilateral upper extremities -I75019 Atheroembolism of unspecified upper extremity -I75021 Atheroembolism of right lower extremity -I75022 Atheroembolism of left lower extremity -I75023 Atheroembolism of bilateral lower extremities -I75029 Atheroembolism of unspecified lower extremity -I7581 Atheroembolism of kidney -I7589 Atheroembolism of other site -I76 Septic arterial embolism -I770 Arteriovenous fistula, acquired -I771 Stricture of artery -I772 Rupture of artery -I773 Arterial fibromuscular dysplasia -I774 Celiac artery compression syndrome -I775 Necrosis of artery -I776 Arteritis, unspecified -I7771 Dissection of carotid artery -I7772 Dissection of iliac artery -I7773 Dissection of renal artery -I7774 Dissection of vertebral artery -I7779 Dissection of other artery -I77810 Thoracic aortic ectasia -I77811 Abdominal aortic ectasia -I77812 Thoracoabdominal aortic ectasia -I77819 Aortic ectasia, unspecified site -I7789 Other specified disorders of arteries and arterioles -I779 Disorder of arteries and arterioles, unspecified -I780 Hereditary hemorrhagic telangiectasia -I781 Nevus, non-neoplastic -I788 Other diseases of capillaries -I789 Disease of capillaries, unspecified -I790 Aneurysm of aorta in diseases classified elsewhere -I791 Aortitis in diseases classified elsewhere -I798 Other disorders of arteries, arterioles and capillaries in diseases classified elsewhere -I8000 Phlebitis and thrombophlebitis of superficial vessels of unspecified lower extremity -I8001 Phlebitis and thrombophlebitis of superficial vessels of right lower extremity -I8002 Phlebitis and thrombophlebitis of superficial vessels of left lower extremity -I8003 Phlebitis and thrombophlebitis of superficial vessels of lower extremities, bilateral -I8010 Phlebitis and thrombophlebitis of unspecified femoral vein -I8011 Phlebitis and thrombophlebitis of right femoral vein -I8012 Phlebitis and thrombophlebitis of left femoral vein -I8013 Phlebitis and thrombophlebitis of femoral vein, bilateral -I80201 Phlebitis and thrombophlebitis of unspecified deep vessels of right lower extremity -I80202 Phlebitis and thrombophlebitis of unspecified deep vessels of left lower extremity -I80203 Phlebitis and thrombophlebitis of unspecified deep vessels of lower extremities, bilateral -I80209 Phlebitis and thrombophlebitis of unspecified deep vessels of unspecified lower extremity -I80211 Phlebitis and thrombophlebitis of right iliac vein -I80212 Phlebitis and thrombophlebitis of left iliac vein -I80213 Phlebitis and thrombophlebitis of iliac vein, bilateral -I80219 Phlebitis and thrombophlebitis of unspecified iliac vein -I80221 Phlebitis and thrombophlebitis of right popliteal vein -I80222 Phlebitis and thrombophlebitis of left popliteal vein -I80223 Phlebitis and thrombophlebitis of popliteal vein, bilateral -I80229 Phlebitis and thrombophlebitis of unspecified popliteal vein -I80231 Phlebitis and thrombophlebitis of right tibial vein -I80232 Phlebitis and thrombophlebitis of left tibial vein -I80233 Phlebitis and thrombophlebitis of tibial vein, bilateral -I80239 Phlebitis and thrombophlebitis of unspecified tibial vein -I80291 Phlebitis and thrombophlebitis of other deep vessels of right lower extremity -I80292 Phlebitis and thrombophlebitis of other deep vessels of left lower extremity -I80293 Phlebitis and thrombophlebitis of other deep vessels of lower extremity, bilateral -I80299 Phlebitis and thrombophlebitis of other deep vessels of unspecified lower extremity -I803 Phlebitis and thrombophlebitis of lower extremities, unspecified -I808 Phlebitis and thrombophlebitis of other sites -I809 Phlebitis and thrombophlebitis of unspecified site -I81 Portal vein thrombosis -I820 Budd-Chiari syndrome -I821 Thrombophlebitis migrans -I82210 Acute embolism and thrombosis of superior vena cava -I82211 Chronic embolism and thrombosis of superior vena cava -I82220 Acute embolism and thrombosis of inferior vena cava -I82221 Chronic embolism and thrombosis of inferior vena cava -I82290 Acute embolism and thrombosis of other thoracic veins -I82291 Chronic embolism and thrombosis of other thoracic veins -I823 Embolism and thrombosis of renal vein -I82401 Acute embolism and thrombosis of unspecified deep veins of right lower extremity -I82402 Acute embolism and thrombosis of unspecified deep veins of left lower extremity -I82403 Acute embolism and thrombosis of unspecified deep veins of lower extremity, bilateral -I82409 Acute embolism and thrombosis of unspecified deep veins of unspecified lower extremity -I82411 Acute embolism and thrombosis of right femoral vein -I82412 Acute embolism and thrombosis of left femoral vein -I82413 Acute embolism and thrombosis of femoral vein, bilateral -I82419 Acute embolism and thrombosis of unspecified femoral vein -I82421 Acute embolism and thrombosis of right iliac vein -I82422 Acute embolism and thrombosis of left iliac vein -I82423 Acute embolism and thrombosis of iliac vein, bilateral -I82429 Acute embolism and thrombosis of unspecified iliac vein -I82431 Acute embolism and thrombosis of right popliteal vein -I82432 Acute embolism and thrombosis of left popliteal vein -I82433 Acute embolism and thrombosis of popliteal vein, bilateral -I82439 Acute embolism and thrombosis of unspecified popliteal vein -I82441 Acute embolism and thrombosis of right tibial vein -I82442 Acute embolism and thrombosis of left tibial vein -I82443 Acute embolism and thrombosis of tibial vein, bilateral -I82449 Acute embolism and thrombosis of unspecified tibial vein -I82491 Acute embolism and thrombosis of other specified deep vein of right lower extremity -I82492 Acute embolism and thrombosis of other specified deep vein of left lower extremity -I82493 Acute embolism and thrombosis of other specified deep vein of lower extremity, bilateral -I82499 Acute embolism and thrombosis of other specified deep vein of unspecified lower extremity -I824Y1 Acute embolism and thrombosis of unspecified deep veins of right proximal lower extremity -I824Y2 Acute embolism and thrombosis of unspecified deep veins of left proximal lower extremity -I824Y3 Acute embolism and thrombosis of unspecified deep veins of proximal lower extremity, bilateral -I824Y9 Acute embolism and thrombosis of unspecified deep veins of unspecified proximal lower extremity -I824Z1 Acute embolism and thrombosis of unspecified deep veins of right distal lower extremity -I824Z2 Acute embolism and thrombosis of unspecified deep veins of left distal lower extremity -I824Z3 Acute embolism and thrombosis of unspecified deep veins of distal lower extremity, bilateral -I824Z9 Acute embolism and thrombosis of unspecified deep veins of unspecified distal lower extremity -I82501 Chronic embolism and thrombosis of unspecified deep veins of right lower extremity -I82502 Chronic embolism and thrombosis of unspecified deep veins of left lower extremity -I82503 Chronic embolism and thrombosis of unspecified deep veins of lower extremity, bilateral -I82509 Chronic embolism and thrombosis of unspecified deep veins of unspecified lower extremity -I82511 Chronic embolism and thrombosis of right femoral vein -I82512 Chronic embolism and thrombosis of left femoral vein -I82513 Chronic embolism and thrombosis of femoral vein, bilateral -I82519 Chronic embolism and thrombosis of unspecified femoral vein -I82521 Chronic embolism and thrombosis of right iliac vein -I82522 Chronic embolism and thrombosis of left iliac vein -I82523 Chronic embolism and thrombosis of iliac vein, bilateral -I82529 Chronic embolism and thrombosis of unspecified iliac vein -I82531 Chronic embolism and thrombosis of right popliteal vein -I82532 Chronic embolism and thrombosis of left popliteal vein -I82533 Chronic embolism and thrombosis of popliteal vein, bilateral -I82539 Chronic embolism and thrombosis of unspecified popliteal vein -I82541 Chronic embolism and thrombosis of right tibial vein -I82542 Chronic embolism and thrombosis of left tibial vein -I82543 Chronic embolism and thrombosis of tibial vein, bilateral -I82549 Chronic embolism and thrombosis of unspecified tibial vein -I82591 Chronic embolism and thrombosis of other specified deep vein of right lower extremity -I82592 Chronic embolism and thrombosis of other specified deep vein of left lower extremity -I82593 Chronic embolism and thrombosis of other specified deep vein of lower extremity, bilateral -I82599 Chronic embolism and thrombosis of other specified deep vein of unspecified lower extremity -I825Y1 Chronic embolism and thrombosis of unspecified deep veins of right proximal lower extremity -I825Y2 Chronic embolism and thrombosis of unspecified deep veins of left proximal lower extremity -I825Y3 Chronic embolism and thrombosis of unspecified deep veins of proximal lower extremity, bilateral -I825Y9 Chronic embolism and thrombosis of unspecified deep veins of unspecified proximal lower extremity -I825Z1 Chronic embolism and thrombosis of unspecified deep veins of right distal lower extremity -I825Z2 Chronic embolism and thrombosis of unspecified deep veins of left distal lower extremity -I825Z3 Chronic embolism and thrombosis of unspecified deep veins of distal lower extremity, bilateral -I825Z9 Chronic embolism and thrombosis of unspecified deep veins of unspecified distal lower extremity -I82601 Acute embolism and thrombosis of unspecified veins of right upper extremity -I82602 Acute embolism and thrombosis of unspecified veins of left upper extremity -I82603 Acute embolism and thrombosis of unspecified veins of upper extremity, bilateral -I82609 Acute embolism and thrombosis of unspecified veins of unspecified upper extremity -I82611 Acute embolism and thrombosis of superficial veins of right upper extremity -I82612 Acute embolism and thrombosis of superficial veins of left upper extremity -I82613 Acute embolism and thrombosis of superficial veins of upper extremity, bilateral -I82619 Acute embolism and thrombosis of superficial veins of unspecified upper extremity -I82621 Acute embolism and thrombosis of deep veins of right upper extremity -I82622 Acute embolism and thrombosis of deep veins of left upper extremity -I82623 Acute embolism and thrombosis of deep veins of upper extremity, bilateral -I82629 Acute embolism and thrombosis of deep veins of unspecified upper extremity -I82701 Chronic embolism and thrombosis of unspecified veins of right upper extremity -I82702 Chronic embolism and thrombosis of unspecified veins of left upper extremity -I82703 Chronic embolism and thrombosis of unspecified veins of upper extremity, bilateral -I82709 Chronic embolism and thrombosis of unspecified veins of unspecified upper extremity -I82711 Chronic embolism and thrombosis of superficial veins of right upper extremity -I82712 Chronic embolism and thrombosis of superficial veins of left upper extremity -I82713 Chronic embolism and thrombosis of superficial veins of upper extremity, bilateral -I82719 Chronic embolism and thrombosis of superficial veins of unspecified upper extremity -I82721 Chronic embolism and thrombosis of deep veins of right upper extremity -I82722 Chronic embolism and thrombosis of deep veins of left upper extremity -I82723 Chronic embolism and thrombosis of deep veins of upper extremity, bilateral -I82729 Chronic embolism and thrombosis of deep veins of unspecified upper extremity -I82A11 Acute embolism and thrombosis of right axillary vein -I82A12 Acute embolism and thrombosis of left axillary vein -I82A13 Acute embolism and thrombosis of axillary vein, bilateral -I82A19 Acute embolism and thrombosis of unspecified axillary vein -I82A21 Chronic embolism and thrombosis of right axillary vein -I82A22 Chronic embolism and thrombosis of left axillary vein -I82A23 Chronic embolism and thrombosis of axillary vein, bilateral -I82A29 Chronic embolism and thrombosis of unspecified axillary vein -I82B11 Acute embolism and thrombosis of right subclavian vein -I82B12 Acute embolism and thrombosis of left subclavian vein -I82B13 Acute embolism and thrombosis of subclavian vein, bilateral -I82B19 Acute embolism and thrombosis of unspecified subclavian vein -I82B21 Chronic embolism and thrombosis of right subclavian vein -I82B22 Chronic embolism and thrombosis of left subclavian vein -I82B23 Chronic embolism and thrombosis of subclavian vein, bilateral -I82B29 Chronic embolism and thrombosis of unspecified subclavian vein -I82C11 Acute embolism and thrombosis of right internal jugular vein -I82C12 Acute embolism and thrombosis of left internal jugular vein -I82C13 Acute embolism and thrombosis of internal jugular vein, bilateral -I82C19 Acute embolism and thrombosis of unspecified internal jugular vein -I82C21 Chronic embolism and thrombosis of right internal jugular vein -I82C22 Chronic embolism and thrombosis of left internal jugular vein -I82C23 Chronic embolism and thrombosis of internal jugular vein, bilateral -I82C29 Chronic embolism and thrombosis of unspecified internal jugular vein -I82811 Embolism and thrombosis of superficial veins of right lower extremities -I82812 Embolism and thrombosis of superficial veins of left lower extremities -I82813 Embolism and thrombosis of superficial veins of lower extremities, bilateral -I82819 Embolism and thrombosis of superficial veins of unspecified lower extremities -I82890 Acute embolism and thrombosis of other specified veins -I82891 Chronic embolism and thrombosis of other specified veins -I8290 Acute embolism and thrombosis of unspecified vein -I8291 Chronic embolism and thrombosis of unspecified vein -I83001 Varicose veins of unspecified lower extremity with ulcer of thigh -I83002 Varicose veins of unspecified lower extremity with ulcer of calf -I83003 Varicose veins of unspecified lower extremity with ulcer of ankle -I83004 Varicose veins of unspecified lower extremity with ulcer of heel and midfoot -I83005 Varicose veins of unspecified lower extremity with ulcer other part of foot -I83008 Varicose veins of unspecified lower extremity with ulcer other part of lower leg -I83009 Varicose veins of unspecified lower extremity with ulcer of unspecified site -I83011 Varicose veins of right lower extremity with ulcer of thigh -I83012 Varicose veins of right lower extremity with ulcer of calf -I83013 Varicose veins of right lower extremity with ulcer of ankle -I83014 Varicose veins of right lower extremity with ulcer of heel and midfoot -I83015 Varicose veins of right lower extremity with ulcer other part of foot -I83018 Varicose veins of right lower extremity with ulcer other part of lower leg -I83019 Varicose veins of right lower extremity with ulcer of unspecified site -I83021 Varicose veins of left lower extremity with ulcer of thigh -I83022 Varicose veins of left lower extremity with ulcer of calf -I83023 Varicose veins of left lower extremity with ulcer of ankle -I83024 Varicose veins of left lower extremity with ulcer of heel and midfoot -I83025 Varicose veins of left lower extremity with ulcer other part of foot -I83028 Varicose veins of left lower extremity with ulcer other part of lower leg -I83029 Varicose veins of left lower extremity with ulcer of unspecified site -I8310 Varicose veins of unspecified lower extremity with inflammation -I8311 Varicose veins of right lower extremity with inflammation -I8312 Varicose veins of left lower extremity with inflammation -I83201 Varicose veins of unspecified lower extremity with both ulcer of thigh and inflammation -I83202 Varicose veins of unspecified lower extremity with both ulcer of calf and inflammation -I83203 Varicose veins of unspecified lower extremity with both ulcer of ankle and inflammation -I83204 Varicose veins of unspecified lower extremity with both ulcer of heel and midfoot and inflammation -I83205 Varicose veins of unspecified lower extremity with both ulcer other part of foot and inflammation -I83208 Varicose veins of unspecified lower extremity with both ulcer of other part of lower extremity and inflammation -I83209 Varicose veins of unspecified lower extremity with both ulcer of unspecified site and inflammation -I83211 Varicose veins of right lower extremity with both ulcer of thigh and inflammation -I83212 Varicose veins of right lower extremity with both ulcer of calf and inflammation -I83213 Varicose veins of right lower extremity with both ulcer of ankle and inflammation -I83214 Varicose veins of right lower extremity with both ulcer of heel and midfoot and inflammation -I83215 Varicose veins of right lower extremity with both ulcer other part of foot and inflammation -I83218 Varicose veins of right lower extremity with both ulcer of other part of lower extremity and inflammation -I83219 Varicose veins of right lower extremity with both ulcer of unspecified site and inflammation -I83221 Varicose veins of left lower extremity with both ulcer of thigh and inflammation -I83222 Varicose veins of left lower extremity with both ulcer of calf and inflammation -I83223 Varicose veins of left lower extremity with both ulcer of ankle and inflammation -I83224 Varicose veins of left lower extremity with both ulcer of heel and midfoot and inflammation -I83225 Varicose veins of left lower extremity with both ulcer other part of foot and inflammation -I83228 Varicose veins of left lower extremity with both ulcer of other part of lower extremity and inflammation -I83229 Varicose veins of left lower extremity with both ulcer of unspecified site and inflammation -I83811 Varicose veins of right lower extremities with pain -I83812 Varicose veins of left lower extremities with pain -I83813 Varicose veins of bilateral lower extremities with pain -I83819 Varicose veins of unspecified lower extremities with pain -I83891 Varicose veins of right lower extremities with other complications -I83892 Varicose veins of left lower extremities with other complications -I83893 Varicose veins of bilateral lower extremities with other complications -I83899 Varicose veins of unspecified lower extremities with other complications -I8390 Asymptomatic varicose veins of unspecified lower extremity -I8391 Asymptomatic varicose veins of right lower extremity -I8392 Asymptomatic varicose veins of left lower extremity -I8393 Asymptomatic varicose veins of bilateral lower extremities -I8500 Esophageal varices without bleeding -I8501 Esophageal varices with bleeding -I8510 Secondary esophageal varices without bleeding -I8511 Secondary esophageal varices with bleeding -I860 Sublingual varices -I861 Scrotal varices -I862 Pelvic varices -I863 Vulval varices -I864 Gastric varices -I868 Varicose veins of other specified sites -I87001 Postthrombotic syndrome without complications of right lower extremity -I87002 Postthrombotic syndrome without complications of left lower extremity -I87003 Postthrombotic syndrome without complications of bilateral lower extremity -I87009 Postthrombotic syndrome without complications of unspecified extremity -I87011 Postthrombotic syndrome with ulcer of right lower extremity -I87012 Postthrombotic syndrome with ulcer of left lower extremity -I87013 Postthrombotic syndrome with ulcer of bilateral lower extremity -I87019 Postthrombotic syndrome with ulcer of unspecified lower extremity -I87021 Postthrombotic syndrome with inflammation of right lower extremity -I87022 Postthrombotic syndrome with inflammation of left lower extremity -I87023 Postthrombotic syndrome with inflammation of bilateral lower extremity -I87029 Postthrombotic syndrome with inflammation of unspecified lower extremity -I87031 Postthrombotic syndrome with ulcer and inflammation of right lower extremity -I87032 Postthrombotic syndrome with ulcer and inflammation of left lower extremity -I87033 Postthrombotic syndrome with ulcer and inflammation of bilateral lower extremity -I87039 Postthrombotic syndrome with ulcer and inflammation of unspecified lower extremity -I87091 Postthrombotic syndrome with other complications of right lower extremity -I87092 Postthrombotic syndrome with other complications of left lower extremity -I87093 Postthrombotic syndrome with other complications of bilateral lower extremity -I87099 Postthrombotic syndrome with other complications of unspecified lower extremity -I871 Compression of vein -I872 Venous insufficiency (chronic) (peripheral) -I87301 Chronic venous hypertension (idiopathic) without complications of right lower extremity -I87302 Chronic venous hypertension (idiopathic) without complications of left lower extremity -I87303 Chronic venous hypertension (idiopathic) without complications of bilateral lower extremity -I87309 Chronic venous hypertension (idiopathic) without complications of unspecified lower extremity -I87311 Chronic venous hypertension (idiopathic) with ulcer of right lower extremity -I87312 Chronic venous hypertension (idiopathic) with ulcer of left lower extremity -I87313 Chronic venous hypertension (idiopathic) with ulcer of bilateral lower extremity -I87319 Chronic venous hypertension (idiopathic) with ulcer of unspecified lower extremity -I87321 Chronic venous hypertension (idiopathic) with inflammation of right lower extremity -I87322 Chronic venous hypertension (idiopathic) with inflammation of left lower extremity -I87323 Chronic venous hypertension (idiopathic) with inflammation of bilateral lower extremity -I87329 Chronic venous hypertension (idiopathic) with inflammation of unspecified lower extremity -I87331 Chronic venous hypertension (idiopathic) with ulcer and inflammation of right lower extremity -I87332 Chronic venous hypertension (idiopathic) with ulcer and inflammation of left lower extremity -I87333 Chronic venous hypertension (idiopathic) with ulcer and inflammation of bilateral lower extremity -I87339 Chronic venous hypertension (idiopathic) with ulcer and inflammation of unspecified lower extremity -I87391 Chronic venous hypertension (idiopathic) with other complications of right lower extremity -I87392 Chronic venous hypertension (idiopathic) with other complications of left lower extremity -I87393 Chronic venous hypertension (idiopathic) with other complications of bilateral lower extremity -I87399 Chronic venous hypertension (idiopathic) with other complications of unspecified lower extremity -I878 Other specified disorders of veins -I879 Disorder of vein, unspecified -I880 Nonspecific mesenteric lymphadenitis -I881 Chronic lymphadenitis, except mesenteric -I888 Other nonspecific lymphadenitis -I889 Nonspecific lymphadenitis, unspecified -I890 Lymphedema, not elsewhere classified -I891 Lymphangitis -I898 Other specified noninfective disorders of lymphatic vessels and lymph nodes -I899 Noninfective disorder of lymphatic vessels and lymph nodes, unspecified -I950 Idiopathic hypotension -I951 Orthostatic hypotension -I952 Hypotension due to drugs -I953 Hypotension of hemodialysis -I9581 Postprocedural hypotension -I9589 Other hypotension -I959 Hypotension, unspecified -I96 Gangrene, not elsewhere classified -I970 Postcardiotomy syndrome -I97110 Postprocedural cardiac insufficiency following cardiac surgery -I97111 Postprocedural cardiac insufficiency following other surgery -I97120 Postprocedural cardiac arrest following cardiac surgery -I97121 Postprocedural cardiac arrest following other surgery -I97130 Postprocedural heart failure following cardiac surgery -I97131 Postprocedural heart failure following other surgery -I97190 Other postprocedural cardiac functional disturbances following cardiac surgery -I97191 Other postprocedural cardiac functional disturbances following other surgery -I972 Postmastectomy lymphedema syndrome -I973 Postprocedural hypertension -I97410 Intraoperative hemorrhage and hematoma of a circulatory system organ or structure complicating a cardiac catheterization -I97411 Intraoperative hemorrhage and hematoma of a circulatory system organ or structure complicating a cardiac bypass -I97418 Intraoperative hemorrhage and hematoma of a circulatory system organ or structure complicating other circulatory system procedure -I9742 Intraoperative hemorrhage and hematoma of a circulatory system organ or structure complicating other procedure -I9751 Accidental puncture and laceration of a circulatory system organ or structure during a circulatory system procedure -I9752 Accidental puncture and laceration of a circulatory system organ or structure during other procedure -I97610 Postprocedural hemorrhage and hematoma of a circulatory system organ or structure following a cardiac catheterization -I97611 Postprocedural hemorrhage and hematoma of a circulatory system organ or structure following cardiac bypass -I97618 Postprocedural hemorrhage and hematoma of a circulatory system organ or structure following other circulatory system procedure -I9762 Postprocedural hemorrhage and hematoma of a circulatory system organ or structure following other procedure -I97710 Intraoperative cardiac arrest during cardiac surgery -I97711 Intraoperative cardiac arrest during other surgery -I97790 Other intraoperative cardiac functional disturbances during cardiac surgery -I97791 Other intraoperative cardiac functional disturbances during other surgery -I97810 Intraoperative cerebrovascular infarction during cardiac surgery -I97811 Intraoperative cerebrovascular infarction during other surgery -I97820 Postprocedural cerebrovascular infarction during cardiac surgery -I97821 Postprocedural cerebrovascular infarction during other surgery -I9788 Other intraoperative complications of the circulatory system, not elsewhere classified -I9789 Other postprocedural complications and disorders of the circulatory system, not elsewhere classified -I998 Other disorder of circulatory system -I999 Unspecified disorder of circulatory system -J00 Acute nasopharyngitis [common cold] -J0100 Acute maxillary sinusitis, unspecified -J0101 Acute recurrent maxillary sinusitis -J0110 Acute frontal sinusitis, unspecified -J0111 Acute recurrent frontal sinusitis -J0120 Acute ethmoidal sinusitis, unspecified -J0121 Acute recurrent ethmoidal sinusitis -J0130 Acute sphenoidal sinusitis, unspecified -J0131 Acute recurrent sphenoidal sinusitis -J0140 Acute pansinusitis, unspecified -J0141 Acute recurrent pansinusitis -J0180 Other acute sinusitis -J0181 Other acute recurrent sinusitis -J0190 Acute sinusitis, unspecified -J0191 Acute recurrent sinusitis, unspecified -J020 Streptococcal pharyngitis -J028 Acute pharyngitis due to other specified organisms -J029 Acute pharyngitis, unspecified -J0300 Acute streptococcal tonsillitis, unspecified -J0301 Acute recurrent streptococcal tonsillitis -J0380 Acute tonsillitis due to other specified organisms -J0381 Acute recurrent tonsillitis due to other specified organisms -J0390 Acute tonsillitis, unspecified -J0391 Acute recurrent tonsillitis, unspecified -J040 Acute laryngitis -J0410 Acute tracheitis without obstruction -J0411 Acute tracheitis with obstruction -J042 Acute laryngotracheitis -J0430 Supraglottitis, unspecified, without obstruction -J0431 Supraglottitis, unspecified, with obstruction -J050 Acute obstructive laryngitis [croup] -J0510 Acute epiglottitis without obstruction -J0511 Acute epiglottitis with obstruction -J060 Acute laryngopharyngitis -J069 Acute upper respiratory infection, unspecified -J09X1 Influenza due to identified novel influenza A virus with pneumonia -J09X2 Influenza due to identified novel influenza A virus with other respiratory manifestations -J09X3 Influenza due to identified novel influenza A virus with gastrointestinal manifestations -J09X9 Influenza due to identified novel influenza A virus with other manifestations -J1000 Influenza due to other identified influenza virus with unspecified type of pneumonia -J1001 Influenza due to other identified influenza virus with the same other identified influenza virus pneumonia -J1008 Influenza due to other identified influenza virus with other specified pneumonia -J101 Influenza due to other identified influenza virus with other respiratory manifestations -J102 Influenza due to other identified influenza virus with gastrointestinal manifestations -J1081 Influenza due to other identified influenza virus with encephalopathy -J1082 Influenza due to other identified influenza virus with myocarditis -J1083 Influenza due to other identified influenza virus with otitis media -J1089 Influenza due to other identified influenza virus with other manifestations -J1100 Influenza due to unidentified influenza virus with unspecified type of pneumonia -J1108 Influenza due to unidentified influenza virus with specified pneumonia -J111 Influenza due to unidentified influenza virus with other respiratory manifestations -J112 Influenza due to unidentified influenza virus with gastrointestinal manifestations -J1181 Influenza due to unidentified influenza virus with encephalopathy -J1182 Influenza due to unidentified influenza virus with myocarditis -J1183 Influenza due to unidentified influenza virus with otitis media -J1189 Influenza due to unidentified influenza virus with other manifestations -J120 Adenoviral pneumonia -J121 Respiratory syncytial virus pneumonia -J122 Parainfluenza virus pneumonia -J123 Human metapneumovirus pneumonia -J1281 Pneumonia due to SARS-associated coronavirus -J1289 Other viral pneumonia -J129 Viral pneumonia, unspecified -J13 Pneumonia due to Streptococcus pneumoniae -J14 Pneumonia due to Hemophilus influenzae -J150 Pneumonia due to Klebsiella pneumoniae -J151 Pneumonia due to Pseudomonas -J1520 Pneumonia due to staphylococcus, unspecified -J15211 Pneumonia due to Methicillin susceptible Staphylococcus aureus -J15212 Pneumonia due to Methicillin resistant Staphylococcus aureus -J1529 Pneumonia due to other staphylococcus -J153 Pneumonia due to streptococcus, group B -J154 Pneumonia due to other streptococci -J155 Pneumonia due to Escherichia coli -J156 Pneumonia due to other aerobic Gram-negative bacteria -J157 Pneumonia due to Mycoplasma pneumoniae -J158 Pneumonia due to other specified bacteria -J159 Unspecified bacterial pneumonia -J160 Chlamydial pneumonia -J168 Pneumonia due to other specified infectious organisms -J17 Pneumonia in diseases classified elsewhere -J180 Bronchopneumonia, unspecified organism -J181 Lobar pneumonia, unspecified organism -J182 Hypostatic pneumonia, unspecified organism -J188 Other pneumonia, unspecified organism -J189 Pneumonia, unspecified organism -J200 Acute bronchitis due to Mycoplasma pneumoniae -J201 Acute bronchitis due to Hemophilus influenzae -J202 Acute bronchitis due to streptococcus -J203 Acute bronchitis due to coxsackievirus -J204 Acute bronchitis due to parainfluenza virus -J205 Acute bronchitis due to respiratory syncytial virus -J206 Acute bronchitis due to rhinovirus -J207 Acute bronchitis due to echovirus -J208 Acute bronchitis due to other specified organisms -J209 Acute bronchitis, unspecified -J210 Acute bronchiolitis due to respiratory syncytial virus -J211 Acute bronchiolitis due to human metapneumovirus -J218 Acute bronchiolitis due to other specified organisms -J219 Acute bronchiolitis, unspecified -J22 Unspecified acute lower respiratory infection -J300 Vasomotor rhinitis -J301 Allergic rhinitis due to pollen -J302 Other seasonal allergic rhinitis -J305 Allergic rhinitis due to food -J3081 Allergic rhinitis due to animal (cat) (dog) hair and dander -J3089 Other allergic rhinitis -J309 Allergic rhinitis, unspecified -J310 Chronic rhinitis -J311 Chronic nasopharyngitis -J312 Chronic pharyngitis -J320 Chronic maxillary sinusitis -J321 Chronic frontal sinusitis -J322 Chronic ethmoidal sinusitis -J323 Chronic sphenoidal sinusitis -J324 Chronic pansinusitis -J328 Other chronic sinusitis -J329 Chronic sinusitis, unspecified -J330 Polyp of nasal cavity -J331 Polypoid sinus degeneration -J338 Other polyp of sinus -J339 Nasal polyp, unspecified -J340 Abscess, furuncle and carbuncle of nose -J341 Cyst and mucocele of nose and nasal sinus -J342 Deviated nasal septum -J343 Hypertrophy of nasal turbinates -J3481 Nasal mucositis (ulcerative) -J3489 Other specified disorders of nose and nasal sinuses -J349 Unspecified disorder of nose and nasal sinuses -J3501 Chronic tonsillitis -J3502 Chronic adenoiditis -J3503 Chronic tonsillitis and adenoiditis -J351 Hypertrophy of tonsils -J352 Hypertrophy of adenoids -J353 Hypertrophy of tonsils with hypertrophy of adenoids -J358 Other chronic diseases of tonsils and adenoids -J359 Chronic disease of tonsils and adenoids, unspecified -J36 Peritonsillar abscess -J370 Chronic laryngitis -J371 Chronic laryngotracheitis -J3800 Paralysis of vocal cords and larynx, unspecified -J3801 Paralysis of vocal cords and larynx, unilateral -J3802 Paralysis of vocal cords and larynx, bilateral -J381 Polyp of vocal cord and larynx -J382 Nodules of vocal cords -J383 Other diseases of vocal cords -J384 Edema of larynx -J385 Laryngeal spasm -J386 Stenosis of larynx -J387 Other diseases of larynx -J390 Retropharyngeal and parapharyngeal abscess -J391 Other abscess of pharynx -J392 Other diseases of pharynx -J393 Upper respiratory tract hypersensitivity reaction, site unspecified -J398 Other specified diseases of upper respiratory tract -J399 Disease of upper respiratory tract, unspecified -J40 Bronchitis, not specified as acute or chronic -J410 Simple chronic bronchitis -J411 Mucopurulent chronic bronchitis -J418 Mixed simple and mucopurulent chronic bronchitis -J42 Unspecified chronic bronchitis -J430 Unilateral pulmonary emphysema [MacLeod's syndrome] -J431 Panlobular emphysema -J432 Centrilobular emphysema -J438 Other emphysema -J439 Emphysema, unspecified -J440 Chronic obstructive pulmonary disease with acute lower respiratory infection -J441 Chronic obstructive pulmonary disease with (acute) exacerbation -J449 Chronic obstructive pulmonary disease, unspecified -J4520 Mild intermittent asthma, uncomplicated -J4521 Mild intermittent asthma with (acute) exacerbation -J4522 Mild intermittent asthma with status asthmaticus -J4530 Mild persistent asthma, uncomplicated -J4531 Mild persistent asthma with (acute) exacerbation -J4532 Mild persistent asthma with status asthmaticus -J4540 Moderate persistent asthma, uncomplicated -J4541 Moderate persistent asthma with (acute) exacerbation -J4542 Moderate persistent asthma with status asthmaticus -J4550 Severe persistent asthma, uncomplicated -J4551 Severe persistent asthma with (acute) exacerbation -J4552 Severe persistent asthma with status asthmaticus -J45901 Unspecified asthma with (acute) exacerbation -J45902 Unspecified asthma with status asthmaticus -J45909 Unspecified asthma, uncomplicated -J45990 Exercise induced bronchospasm -J45991 Cough variant asthma -J45998 Other asthma -J470 Bronchiectasis with acute lower respiratory infection -J471 Bronchiectasis with (acute) exacerbation -J479 Bronchiectasis, uncomplicated -J60 Coalworker's pneumoconiosis -J61 Pneumoconiosis due to asbestos and other mineral fibers -J620 Pneumoconiosis due to talc dust -J628 Pneumoconiosis due to other dust containing silica -J630 Aluminosis (of lung) -J631 Bauxite fibrosis (of lung) -J632 Berylliosis -J633 Graphite fibrosis (of lung) -J634 Siderosis -J635 Stannosis -J636 Pneumoconiosis due to other specified inorganic dusts -J64 Unspecified pneumoconiosis -J65 Pneumoconiosis associated with tuberculosis -J660 Byssinosis -J661 Flax-dressers' disease -J662 Cannabinosis -J668 Airway disease due to other specific organic dusts -J670 Farmer's lung -J671 Bagassosis -J672 Bird fancier's lung -J673 Suberosis -J674 Maltworker's lung -J675 Mushroom-worker's lung -J676 Maple-bark-stripper's lung -J677 Air conditioner and humidifier lung -J678 Hypersensitivity pneumonitis due to other organic dusts -J679 Hypersensitivity pneumonitis due to unspecified organic dust -J680 Bronchitis and pneumonitis due to chemicals, gases, fumes and vapors -J681 Pulmonary edema due to chemicals, gases, fumes and vapors -J682 Upper respiratory inflammation due to chemicals, gases, fumes and vapors, not elsewhere classified -J683 Other acute and subacute respiratory conditions due to chemicals, gases, fumes and vapors -J684 Chronic respiratory conditions due to chemicals, gases, fumes and vapors -J688 Other respiratory conditions due to chemicals, gases, fumes and vapors -J689 Unspecified respiratory condition due to chemicals, gases, fumes and vapors -J690 Pneumonitis due to inhalation of food and vomit -J691 Pneumonitis due to inhalation of oils and essences -J698 Pneumonitis due to inhalation of other solids and liquids -J700 Acute pulmonary manifestations due to radiation -J701 Chronic and other pulmonary manifestations due to radiation -J702 Acute drug-induced interstitial lung disorders -J703 Chronic drug-induced interstitial lung disorders -J704 Drug-induced interstitial lung disorders, unspecified -J705 Respiratory conditions due to smoke inhalation -J708 Respiratory conditions due to other specified external agents -J709 Respiratory conditions due to unspecified external agent -J80 Acute respiratory distress syndrome -J810 Acute pulmonary edema -J811 Chronic pulmonary edema -J82 Pulmonary eosinophilia, not elsewhere classified -J8401 Alveolar proteinosis -J8402 Pulmonary alveolar microlithiasis -J8403 Idiopathic pulmonary hemosiderosis -J8409 Other alveolar and parieto-alveolar conditions -J8410 Pulmonary fibrosis, unspecified -J84111 Idiopathic interstitial pneumonia, not otherwise specified -J84112 Idiopathic pulmonary fibrosis -J84113 Idiopathic non-specific interstitial pneumonitis -J84114 Acute interstitial pneumonitis -J84115 Respiratory bronchiolitis interstitial lung disease -J84116 Cryptogenic organizing pneumonia -J84117 Desquamative interstitial pneumonia -J8417 Other interstitial pulmonary diseases with fibrosis in diseases classified elsewhere -J842 Lymphoid interstitial pneumonia -J8481 Lymphangioleiomyomatosis -J8482 Adult pulmonary Langerhans cell histiocytosis -J8483 Surfactant mutations of the lung -J84841 Neuroendocrine cell hyperplasia of infancy -J84842 Pulmonary interstitial glycogenosis -J84843 Alveolar capillary dysplasia with vein misalignment -J84848 Other interstitial lung diseases of childhood -J8489 Other specified interstitial pulmonary diseases -J849 Interstitial pulmonary disease, unspecified -J850 Gangrene and necrosis of lung -J851 Abscess of lung with pneumonia -J852 Abscess of lung without pneumonia -J853 Abscess of mediastinum -J860 Pyothorax with fistula -J869 Pyothorax without fistula -J90 Pleural effusion, not elsewhere classified -J910 Malignant pleural effusion -J918 Pleural effusion in other conditions classified elsewhere -J920 Pleural plaque with presence of asbestos -J929 Pleural plaque without asbestos -J930 Spontaneous tension pneumothorax -J9311 Primary spontaneous pneumothorax -J9312 Secondary spontaneous pneumothorax -J9381 Chronic pneumothorax -J9382 Other air leak -J9383 Other pneumothorax -J939 Pneumothorax, unspecified -J940 Chylous effusion -J941 Fibrothorax -J942 Hemothorax -J948 Other specified pleural conditions -J949 Pleural condition, unspecified -J9500 Unspecified tracheostomy complication -J9501 Hemorrhage from tracheostomy stoma -J9502 Infection of tracheostomy stoma -J9503 Malfunction of tracheostomy stoma -J9504 Tracheo-esophageal fistula following tracheostomy -J9509 Other tracheostomy complication -J951 Acute pulmonary insufficiency following thoracic surgery -J952 Acute pulmonary insufficiency following nonthoracic surgery -J953 Chronic pulmonary insufficiency following surgery -J954 Chemical pneumonitis due to anesthesia -J955 Postprocedural subglottic stenosis -J9561 Intraoperative hemorrhage and hematoma of a respiratory system organ or structure complicating a respiratory system procedure -J9562 Intraoperative hemorrhage and hematoma of a respiratory system organ or structure complicating other procedure -J9571 Accidental puncture and laceration of a respiratory system organ or structure during a respiratory system procedure -J9572 Accidental puncture and laceration of a respiratory system organ or structure during other procedure -J95811 Postprocedural pneumothorax -J95812 Postprocedural air leak -J95821 Acute postprocedural respiratory failure -J95822 Acute and chronic postprocedural respiratory failure -J95830 Postprocedural hemorrhage and hematoma of a respiratory system organ or structure following a respiratory system procedure -J95831 Postprocedural hemorrhage and hematoma of a respiratory system organ or structure following other procedure -J9584 Transfusion-related acute lung injury (TRALI) -J95850 Mechanical complication of respirator -J95851 Ventilator associated pneumonia -J95859 Other complication of respirator [ventilator] -J9588 Other intraoperative complications of respiratory system, not elsewhere classified -J9589 Other postprocedural complications and disorders of respiratory system, not elsewhere classified -J9600 Acute respiratory failure, unspecified whether with hypoxia or hypercapnia -J9601 Acute respiratory failure with hypoxia -J9602 Acute respiratory failure with hypercapnia -J9610 Chronic respiratory failure, unspecified whether with hypoxia or hypercapnia -J9611 Chronic respiratory failure with hypoxia -J9612 Chronic respiratory failure with hypercapnia -J9620 Acute and chronic respiratory failure, unspecified whether with hypoxia or hypercapnia -J9621 Acute and chronic respiratory failure with hypoxia -J9622 Acute and chronic respiratory failure with hypercapnia -J9690 Respiratory failure, unspecified, unspecified whether with hypoxia or hypercapnia -J9691 Respiratory failure, unspecified with hypoxia -J9692 Respiratory failure, unspecified with hypercapnia -J9801 Acute bronchospasm -J9809 Other diseases of bronchus, not elsewhere classified -J9811 Atelectasis -J9819 Other pulmonary collapse -J982 Interstitial emphysema -J983 Compensatory emphysema -J984 Other disorders of lung -J985 Diseases of mediastinum, not elsewhere classified -J986 Disorders of diaphragm -J988 Other specified respiratory disorders -J989 Respiratory disorder, unspecified -J99 Respiratory disorders in diseases classified elsewhere -K000 Anodontia -K001 Supernumerary teeth -K002 Abnormalities of size and form of teeth -K003 Mottled teeth -K004 Disturbances in tooth formation -K005 Hereditary disturbances in tooth structure, not elsewhere classified -K006 Disturbances in tooth eruption -K007 Teething syndrome -K008 Other disorders of tooth development -K009 Disorder of tooth development, unspecified -K010 Embedded teeth -K011 Impacted teeth -K023 Arrested dental caries -K0251 Dental caries on pit and fissure surface limited to enamel -K0252 Dental caries on pit and fissure surface penetrating into dentin -K0253 Dental caries on pit and fissure surface penetrating into pulp -K0261 Dental caries on smooth surface limited to enamel -K0262 Dental caries on smooth surface penetrating into dentin -K0263 Dental caries on smooth surface penetrating into pulp -K027 Dental root caries -K029 Dental caries, unspecified -K030 Excessive attrition of teeth -K031 Abrasion of teeth -K032 Erosion of teeth -K033 Pathological resorption of teeth -K034 Hypercementosis -K035 Ankylosis of teeth -K036 Deposits [accretions] on teeth -K037 Posteruptive color changes of dental hard tissues -K0381 Cracked tooth -K0389 Other specified diseases of hard tissues of teeth -K039 Disease of hard tissues of teeth, unspecified -K040 Pulpitis -K041 Necrosis of pulp -K042 Pulp degeneration -K043 Abnormal hard tissue formation in pulp -K044 Acute apical periodontitis of pulpal origin -K045 Chronic apical periodontitis -K046 Periapical abscess with sinus -K047 Periapical abscess without sinus -K048 Radicular cyst -K0490 Unspecified diseases of pulp and periapical tissues -K0499 Other diseases of pulp and periapical tissues -K0500 Acute gingivitis, plaque induced -K0501 Acute gingivitis, non-plaque induced -K0510 Chronic gingivitis, plaque induced -K0511 Chronic gingivitis, non-plaque induced -K0520 Aggressive periodontitis, unspecified -K0521 Aggressive periodontitis, localized -K0522 Aggressive periodontitis, generalized -K0530 Chronic periodontitis, unspecified -K0531 Chronic periodontitis, localized -K0532 Chronic periodontitis, generalized -K054 Periodontosis -K055 Other periodontal diseases -K056 Periodontal disease, unspecified -K060 Gingival recession -K061 Gingival enlargement -K062 Gingival and edentulous alveolar ridge lesions associated with trauma -K068 Other specified disorders of gingiva and edentulous alveolar ridge -K069 Disorder of gingiva and edentulous alveolar ridge, unspecified -K080 Exfoliation of teeth due to systemic causes -K08101 Complete loss of teeth, unspecified cause, class I -K08102 Complete loss of teeth, unspecified cause, class II -K08103 Complete loss of teeth, unspecified cause, class III -K08104 Complete loss of teeth, unspecified cause, class IV -K08109 Complete loss of teeth, unspecified cause, unspecified class -K08111 Complete loss of teeth due to trauma, class I -K08112 Complete loss of teeth due to trauma, class II -K08113 Complete loss of teeth due to trauma, class III -K08114 Complete loss of teeth due to trauma, class IV -K08119 Complete loss of teeth due to trauma, unspecified class -K08121 Complete loss of teeth due to periodontal diseases, class I -K08122 Complete loss of teeth due to periodontal diseases, class II -K08123 Complete loss of teeth due to periodontal diseases, class III -K08124 Complete loss of teeth due to periodontal diseases, class IV -K08129 Complete loss of teeth due to periodontal diseases, unspecified class -K08131 Complete loss of teeth due to caries, class I -K08132 Complete loss of teeth due to caries, class II -K08133 Complete loss of teeth due to caries, class III -K08134 Complete loss of teeth due to caries, class IV -K08139 Complete loss of teeth due to caries, unspecified class -K08191 Complete loss of teeth due to other specified cause, class I -K08192 Complete loss of teeth due to other specified cause, class II -K08193 Complete loss of teeth due to other specified cause, class III -K08194 Complete loss of teeth due to other specified cause, class IV -K08199 Complete loss of teeth due to other specified cause, unspecified class -K0820 Unspecified atrophy of edentulous alveolar ridge -K0821 Minimal atrophy of the mandible -K0822 Moderate atrophy of the mandible -K0823 Severe atrophy of the mandible -K0824 Minimal atrophy of maxilla -K0825 Moderate atrophy of the maxilla -K0826 Severe atrophy of the maxilla -K083 Retained dental root -K08401 Partial loss of teeth, unspecified cause, class I -K08402 Partial loss of teeth, unspecified cause, class II -K08403 Partial loss of teeth, unspecified cause, class III -K08404 Partial loss of teeth, unspecified cause, class IV -K08409 Partial loss of teeth, unspecified cause, unspecified class -K08411 Partial loss of teeth due to trauma, class I -K08412 Partial loss of teeth due to trauma, class II -K08413 Partial loss of teeth due to trauma, class III -K08414 Partial loss of teeth due to trauma, class IV -K08419 Partial loss of teeth due to trauma, unspecified class -K08421 Partial loss of teeth due to periodontal diseases, class I -K08422 Partial loss of teeth due to periodontal diseases, class II -K08423 Partial loss of teeth due to periodontal diseases, class III -K08424 Partial loss of teeth due to periodontal diseases, class IV -K08429 Partial loss of teeth due to periodontal diseases, unspecified class -K08431 Partial loss of teeth due to caries, class I -K08432 Partial loss of teeth due to caries, class II -K08433 Partial loss of teeth due to caries, class III -K08434 Partial loss of teeth due to caries, class IV -K08439 Partial loss of teeth due to caries, unspecified class -K08491 Partial loss of teeth due to other specified cause, class I -K08492 Partial loss of teeth due to other specified cause, class II -K08493 Partial loss of teeth due to other specified cause, class III -K08494 Partial loss of teeth due to other specified cause, class IV -K08499 Partial loss of teeth due to other specified cause, unspecified class -K0850 Unsatisfactory restoration of tooth, unspecified -K0851 Open restoration margins of tooth -K0852 Unrepairable overhanging of dental restorative materials -K08530 Fractured dental restorative material without loss of material -K08531 Fractured dental restorative material with loss of material -K08539 Fractured dental restorative material, unspecified -K0854 Contour of existing restoration of tooth biologically incompatible with oral health -K0855 Allergy to existing dental restorative material -K0856 Poor aesthetic of existing restoration of tooth -K0859 Other unsatisfactory restoration of tooth -K088 Other specified disorders of teeth and supporting structures -K089 Disorder of teeth and supporting structures, unspecified -K090 Developmental odontogenic cysts -K091 Developmental (nonodontogenic) cysts of oral region -K098 Other cysts of oral region, not elsewhere classified -K099 Cyst of oral region, unspecified -K110 Atrophy of salivary gland -K111 Hypertrophy of salivary gland -K1120 Sialoadenitis, unspecified -K1121 Acute sialoadenitis -K1122 Acute recurrent sialoadenitis -K1123 Chronic sialoadenitis -K113 Abscess of salivary gland -K114 Fistula of salivary gland -K115 Sialolithiasis -K116 Mucocele of salivary gland -K117 Disturbances of salivary secretion -K118 Other diseases of salivary glands -K119 Disease of salivary gland, unspecified -K120 Recurrent oral aphthae -K121 Other forms of stomatitis -K122 Cellulitis and abscess of mouth -K1230 Oral mucositis (ulcerative), unspecified -K1231 Oral mucositis (ulcerative) due to antineoplastic therapy -K1232 Oral mucositis (ulcerative) due to other drugs -K1233 Oral mucositis (ulcerative) due to radiation -K1239 Other oral mucositis (ulcerative) -K130 Diseases of lips -K131 Cheek and lip biting -K1321 Leukoplakia of oral mucosa, including tongue -K1322 Minimal keratinized residual ridge mucosa -K1323 Excessive keratinized residual ridge mucosa -K1324 Leukokeratosis nicotina palati -K1329 Other disturbances of oral epithelium, including tongue -K133 Hairy leukoplakia -K134 Granuloma and granuloma-like lesions of oral mucosa -K135 Oral submucous fibrosis -K136 Irritative hyperplasia of oral mucosa -K1370 Unspecified lesions of oral mucosa -K1379 Other lesions of oral mucosa -K140 Glossitis -K141 Geographic tongue -K142 Median rhomboid glossitis -K143 Hypertrophy of tongue papillae -K144 Atrophy of tongue papillae -K145 Plicated tongue -K146 Glossodynia -K148 Other diseases of tongue -K149 Disease of tongue, unspecified -K200 Eosinophilic esophagitis -K208 Other esophagitis -K209 Esophagitis, unspecified -K210 Gastro-esophageal reflux disease with esophagitis -K219 Gastro-esophageal reflux disease without esophagitis -K220 Achalasia of cardia -K2210 Ulcer of esophagus without bleeding -K2211 Ulcer of esophagus with bleeding -K222 Esophageal obstruction -K223 Perforation of esophagus -K224 Dyskinesia of esophagus -K225 Diverticulum of esophagus, acquired -K226 Gastro-esophageal laceration-hemorrhage syndrome -K2270 Barrett's esophagus without dysplasia -K22710 Barrett's esophagus with low grade dysplasia -K22711 Barrett's esophagus with high grade dysplasia -K22719 Barrett's esophagus with dysplasia, unspecified -K228 Other specified diseases of esophagus -K229 Disease of esophagus, unspecified -K23 Disorders of esophagus in diseases classified elsewhere -K250 Acute gastric ulcer with hemorrhage -K251 Acute gastric ulcer with perforation -K252 Acute gastric ulcer with both hemorrhage and perforation -K253 Acute gastric ulcer without hemorrhage or perforation -K254 Chronic or unspecified gastric ulcer with hemorrhage -K255 Chronic or unspecified gastric ulcer with perforation -K256 Chronic or unspecified gastric ulcer with both hemorrhage and perforation -K257 Chronic gastric ulcer without hemorrhage or perforation -K259 Gastric ulcer, unspecified as acute or chronic, without hemorrhage or perforation -K260 Acute duodenal ulcer with hemorrhage -K261 Acute duodenal ulcer with perforation -K262 Acute duodenal ulcer with both hemorrhage and perforation -K263 Acute duodenal ulcer without hemorrhage or perforation -K264 Chronic or unspecified duodenal ulcer with hemorrhage -K265 Chronic or unspecified duodenal ulcer with perforation -K266 Chronic or unspecified duodenal ulcer with both hemorrhage and perforation -K267 Chronic duodenal ulcer without hemorrhage or perforation -K269 Duodenal ulcer, unspecified as acute or chronic, without hemorrhage or perforation -K270 Acute peptic ulcer, site unspecified, with hemorrhage -K271 Acute peptic ulcer, site unspecified, with perforation -K272 Acute peptic ulcer, site unspecified, with both hemorrhage and perforation -K273 Acute peptic ulcer, site unspecified, without hemorrhage or perforation -K274 Chronic or unspecified peptic ulcer, site unspecified, with hemorrhage -K275 Chronic or unspecified peptic ulcer, site unspecified, with perforation -K276 Chronic or unspecified peptic ulcer, site unspecified, with both hemorrhage and perforation -K277 Chronic peptic ulcer, site unspecified, without hemorrhage or perforation -K279 Peptic ulcer, site unspecified, unspecified as acute or chronic, without hemorrhage or perforation -K280 Acute gastrojejunal ulcer with hemorrhage -K281 Acute gastrojejunal ulcer with perforation -K282 Acute gastrojejunal ulcer with both hemorrhage and perforation -K283 Acute gastrojejunal ulcer without hemorrhage or perforation -K284 Chronic or unspecified gastrojejunal ulcer with hemorrhage -K285 Chronic or unspecified gastrojejunal ulcer with perforation -K286 Chronic or unspecified gastrojejunal ulcer with both hemorrhage and perforation -K287 Chronic gastrojejunal ulcer without hemorrhage or perforation -K289 Gastrojejunal ulcer, unspecified as acute or chronic, without hemorrhage or perforation -K2900 Acute gastritis without bleeding -K2901 Acute gastritis with bleeding -K2920 Alcoholic gastritis without bleeding -K2921 Alcoholic gastritis with bleeding -K2930 Chronic superficial gastritis without bleeding -K2931 Chronic superficial gastritis with bleeding -K2940 Chronic atrophic gastritis without bleeding -K2941 Chronic atrophic gastritis with bleeding -K2950 Unspecified chronic gastritis without bleeding -K2951 Unspecified chronic gastritis with bleeding -K2960 Other gastritis without bleeding -K2961 Other gastritis with bleeding -K2970 Gastritis, unspecified, without bleeding -K2971 Gastritis, unspecified, with bleeding -K2980 Duodenitis without bleeding -K2981 Duodenitis with bleeding -K2990 Gastroduodenitis, unspecified, without bleeding -K2991 Gastroduodenitis, unspecified, with bleeding -K30 Functional dyspepsia -K310 Acute dilatation of stomach -K311 Adult hypertrophic pyloric stenosis -K312 Hourglass stricture and stenosis of stomach -K313 Pylorospasm, not elsewhere classified -K314 Gastric diverticulum -K315 Obstruction of duodenum -K316 Fistula of stomach and duodenum -K317 Polyp of stomach and duodenum -K31811 Angiodysplasia of stomach and duodenum with bleeding -K31819 Angiodysplasia of stomach and duodenum without bleeding -K3182 Dieulafoy lesion (hemorrhagic) of stomach and duodenum -K3183 Achlorhydria -K3184 Gastroparesis -K3189 Other diseases of stomach and duodenum -K319 Disease of stomach and duodenum, unspecified -K352 Acute appendicitis with generalized peritonitis -K353 Acute appendicitis with localized peritonitis -K3580 Unspecified acute appendicitis -K3589 Other acute appendicitis -K36 Other appendicitis -K37 Unspecified appendicitis -K380 Hyperplasia of appendix -K381 Appendicular concretions -K382 Diverticulum of appendix -K383 Fistula of appendix -K388 Other specified diseases of appendix -K389 Disease of appendix, unspecified -K4000 Bilateral inguinal hernia, with obstruction, without gangrene, not specified as recurrent -K4001 Bilateral inguinal hernia, with obstruction, without gangrene, recurrent -K4010 Bilateral inguinal hernia, with gangrene, not specified as recurrent -K4011 Bilateral inguinal hernia, with gangrene, recurrent -K4020 Bilateral inguinal hernia, without obstruction or gangrene, not specified as recurrent -K4021 Bilateral inguinal hernia, without obstruction or gangrene, recurrent -K4030 Unilateral inguinal hernia, with obstruction, without gangrene, not specified as recurrent -K4031 Unilateral inguinal hernia, with obstruction, without gangrene, recurrent -K4040 Unilateral inguinal hernia, with gangrene, not specified as recurrent -K4041 Unilateral inguinal hernia, with gangrene, recurrent -K4090 Unilateral inguinal hernia, without obstruction or gangrene, not specified as recurrent -K4091 Unilateral inguinal hernia, without obstruction or gangrene, recurrent -K4100 Bilateral femoral hernia, with obstruction, without gangrene, not specified as recurrent -K4101 Bilateral femoral hernia, with obstruction, without gangrene, recurrent -K4110 Bilateral femoral hernia, with gangrene, not specified as recurrent -K4111 Bilateral femoral hernia, with gangrene, recurrent -K4120 Bilateral femoral hernia, without obstruction or gangrene, not specified as recurrent -K4121 Bilateral femoral hernia, without obstruction or gangrene, recurrent -K4130 Unilateral femoral hernia, with obstruction, without gangrene, not specified as recurrent -K4131 Unilateral femoral hernia, with obstruction, without gangrene, recurrent -K4140 Unilateral femoral hernia, with gangrene, not specified as recurrent -K4141 Unilateral femoral hernia, with gangrene, recurrent -K4190 Unilateral femoral hernia, without obstruction or gangrene, not specified as recurrent -K4191 Unilateral femoral hernia, without obstruction or gangrene, recurrent -K420 Umbilical hernia with obstruction, without gangrene -K421 Umbilical hernia with gangrene -K429 Umbilical hernia without obstruction or gangrene -K430 Incisional hernia with obstruction, without gangrene -K431 Incisional hernia with gangrene -K432 Incisional hernia without obstruction or gangrene -K433 Parastomal hernia with obstruction, without gangrene -K434 Parastomal hernia with gangrene -K435 Parastomal hernia without obstruction or gangrene -K436 Other and unspecified ventral hernia with obstruction, without gangrene -K437 Other and unspecified ventral hernia with gangrene -K439 Ventral hernia without obstruction or gangrene -K440 Diaphragmatic hernia with obstruction, without gangrene -K441 Diaphragmatic hernia with gangrene -K449 Diaphragmatic hernia without obstruction or gangrene -K450 Other specified abdominal hernia with obstruction, without gangrene -K451 Other specified abdominal hernia with gangrene -K458 Other specified abdominal hernia without obstruction or gangrene -K460 Unspecified abdominal hernia with obstruction, without gangrene -K461 Unspecified abdominal hernia with gangrene -K469 Unspecified abdominal hernia without obstruction or gangrene -K5000 Crohn's disease of small intestine without complications -K50011 Crohn's disease of small intestine with rectal bleeding -K50012 Crohn's disease of small intestine with intestinal obstruction -K50013 Crohn's disease of small intestine with fistula -K50014 Crohn's disease of small intestine with abscess -K50018 Crohn's disease of small intestine with other complication -K50019 Crohn's disease of small intestine with unspecified complications -K5010 Crohn's disease of large intestine without complications -K50111 Crohn's disease of large intestine with rectal bleeding -K50112 Crohn's disease of large intestine with intestinal obstruction -K50113 Crohn's disease of large intestine with fistula -K50114 Crohn's disease of large intestine with abscess -K50118 Crohn's disease of large intestine with other complication -K50119 Crohn's disease of large intestine with unspecified complications -K5080 Crohn's disease of both small and large intestine without complications -K50811 Crohn's disease of both small and large intestine with rectal bleeding -K50812 Crohn's disease of both small and large intestine with intestinal obstruction -K50813 Crohn's disease of both small and large intestine with fistula -K50814 Crohn's disease of both small and large intestine with abscess -K50818 Crohn's disease of both small and large intestine with other complication -K50819 Crohn's disease of both small and large intestine with unspecified complications -K5090 Crohn's disease, unspecified, without complications -K50911 Crohn's disease, unspecified, with rectal bleeding -K50912 Crohn's disease, unspecified, with intestinal obstruction -K50913 Crohn's disease, unspecified, with fistula -K50914 Crohn's disease, unspecified, with abscess -K50918 Crohn's disease, unspecified, with other complication -K50919 Crohn's disease, unspecified, with unspecified complications -K5100 Ulcerative (chronic) pancolitis without complications -K51011 Ulcerative (chronic) pancolitis with rectal bleeding -K51012 Ulcerative (chronic) pancolitis with intestinal obstruction -K51013 Ulcerative (chronic) pancolitis with fistula -K51014 Ulcerative (chronic) pancolitis with abscess -K51018 Ulcerative (chronic) pancolitis with other complication -K51019 Ulcerative (chronic) pancolitis with unspecified complications -K5120 Ulcerative (chronic) proctitis without complications -K51211 Ulcerative (chronic) proctitis with rectal bleeding -K51212 Ulcerative (chronic) proctitis with intestinal obstruction -K51213 Ulcerative (chronic) proctitis with fistula -K51214 Ulcerative (chronic) proctitis with abscess -K51218 Ulcerative (chronic) proctitis with other complication -K51219 Ulcerative (chronic) proctitis with unspecified complications -K5130 Ulcerative (chronic) rectosigmoiditis without complications -K51311 Ulcerative (chronic) rectosigmoiditis with rectal bleeding -K51312 Ulcerative (chronic) rectosigmoiditis with intestinal obstruction -K51313 Ulcerative (chronic) rectosigmoiditis with fistula -K51314 Ulcerative (chronic) rectosigmoiditis with abscess -K51318 Ulcerative (chronic) rectosigmoiditis with other complication -K51319 Ulcerative (chronic) rectosigmoiditis with unspecified complications -K5140 Inflammatory polyps of colon without complications -K51411 Inflammatory polyps of colon with rectal bleeding -K51412 Inflammatory polyps of colon with intestinal obstruction -K51413 Inflammatory polyps of colon with fistula -K51414 Inflammatory polyps of colon with abscess -K51418 Inflammatory polyps of colon with other complication -K51419 Inflammatory polyps of colon with unspecified complications -K5150 Left sided colitis without complications -K51511 Left sided colitis with rectal bleeding -K51512 Left sided colitis with intestinal obstruction -K51513 Left sided colitis with fistula -K51514 Left sided colitis with abscess -K51518 Left sided colitis with other complication -K51519 Left sided colitis with unspecified complications -K5180 Other ulcerative colitis without complications -K51811 Other ulcerative colitis with rectal bleeding -K51812 Other ulcerative colitis with intestinal obstruction -K51813 Other ulcerative colitis with fistula -K51814 Other ulcerative colitis with abscess -K51818 Other ulcerative colitis with other complication -K51819 Other ulcerative colitis with unspecified complications -K5190 Ulcerative colitis, unspecified, without complications -K51911 Ulcerative colitis, unspecified with rectal bleeding -K51912 Ulcerative colitis, unspecified with intestinal obstruction -K51913 Ulcerative colitis, unspecified with fistula -K51914 Ulcerative colitis, unspecified with abscess -K51918 Ulcerative colitis, unspecified with other complication -K51919 Ulcerative colitis, unspecified with unspecified complications -K520 Gastroenteritis and colitis due to radiation -K521 Toxic gastroenteritis and colitis -K522 Allergic and dietetic gastroenteritis and colitis -K5281 Eosinophilic gastritis or gastroenteritis -K5282 Eosinophilic colitis -K5289 Other specified noninfective gastroenteritis and colitis -K529 Noninfective gastroenteritis and colitis, unspecified -K550 Acute vascular disorders of intestine -K551 Chronic vascular disorders of intestine -K5520 Angiodysplasia of colon without hemorrhage -K5521 Angiodysplasia of colon with hemorrhage -K558 Other vascular disorders of intestine -K559 Vascular disorder of intestine, unspecified -K560 Paralytic ileus -K561 Intussusception -K562 Volvulus -K563 Gallstone ileus -K5641 Fecal impaction -K5649 Other impaction of intestine -K565 Intestinal adhesions [bands] with obstruction (postprocedural) (postinfection) -K5660 Unspecified intestinal obstruction -K5669 Other intestinal obstruction -K567 Ileus, unspecified -K5700 Diverticulitis of small intestine with perforation and abscess without bleeding -K5701 Diverticulitis of small intestine with perforation and abscess with bleeding -K5710 Diverticulosis of small intestine without perforation or abscess without bleeding -K5711 Diverticulosis of small intestine without perforation or abscess with bleeding -K5712 Diverticulitis of small intestine without perforation or abscess without bleeding -K5713 Diverticulitis of small intestine without perforation or abscess with bleeding -K5720 Diverticulitis of large intestine with perforation and abscess without bleeding -K5721 Diverticulitis of large intestine with perforation and abscess with bleeding -K5730 Diverticulosis of large intestine without perforation or abscess without bleeding -K5731 Diverticulosis of large intestine without perforation or abscess with bleeding -K5732 Diverticulitis of large intestine without perforation or abscess without bleeding -K5733 Diverticulitis of large intestine without perforation or abscess with bleeding -K5740 Diverticulitis of both small and large intestine with perforation and abscess without bleeding -K5741 Diverticulitis of both small and large intestine with perforation and abscess with bleeding -K5750 Diverticulosis of both small and large intestine without perforation or abscess without bleeding -K5751 Diverticulosis of both small and large intestine without perforation or abscess with bleeding -K5752 Diverticulitis of both small and large intestine without perforation or abscess without bleeding -K5753 Diverticulitis of both small and large intestine without perforation or abscess with bleeding -K5780 Diverticulitis of intestine, part unspecified, with perforation and abscess without bleeding -K5781 Diverticulitis of intestine, part unspecified, with perforation and abscess with bleeding -K5790 Diverticulosis of intestine, part unspecified, without perforation or abscess without bleeding -K5791 Diverticulosis of intestine, part unspecified, without perforation or abscess with bleeding -K5792 Diverticulitis of intestine, part unspecified, without perforation or abscess without bleeding -K5793 Diverticulitis of intestine, part unspecified, without perforation or abscess with bleeding -K580 Irritable bowel syndrome with diarrhea -K589 Irritable bowel syndrome without diarrhea -K5900 Constipation, unspecified -K5901 Slow transit constipation -K5902 Outlet dysfunction constipation -K5909 Other constipation -K591 Functional diarrhea -K592 Neurogenic bowel, not elsewhere classified -K593 Megacolon, not elsewhere classified -K594 Anal spasm -K598 Other specified functional intestinal disorders -K599 Functional intestinal disorder, unspecified -K600 Acute anal fissure -K601 Chronic anal fissure -K602 Anal fissure, unspecified -K603 Anal fistula -K604 Rectal fistula -K605 Anorectal fistula -K610 Anal abscess -K611 Rectal abscess -K612 Anorectal abscess -K613 Ischiorectal abscess -K614 Intrasphincteric abscess -K620 Anal polyp -K621 Rectal polyp -K622 Anal prolapse -K623 Rectal prolapse -K624 Stenosis of anus and rectum -K625 Hemorrhage of anus and rectum -K626 Ulcer of anus and rectum -K627 Radiation proctitis -K6281 Anal sphincter tear (healed) (nontraumatic) (old) -K6282 Dysplasia of anus -K6289 Other specified diseases of anus and rectum -K629 Disease of anus and rectum, unspecified -K630 Abscess of intestine -K631 Perforation of intestine (nontraumatic) -K632 Fistula of intestine -K633 Ulcer of intestine -K634 Enteroptosis -K635 Polyp of colon -K6381 Dieulafoy lesion of intestine -K6389 Other specified diseases of intestine -K639 Disease of intestine, unspecified -K640 First degree hemorrhoids -K641 Second degree hemorrhoids -K642 Third degree hemorrhoids -K643 Fourth degree hemorrhoids -K644 Residual hemorrhoidal skin tags -K645 Perianal venous thrombosis -K648 Other hemorrhoids -K649 Unspecified hemorrhoids -K650 Generalized (acute) peritonitis -K651 Peritoneal abscess -K652 Spontaneous bacterial peritonitis -K653 Choleperitonitis -K654 Sclerosing mesenteritis -K658 Other peritonitis -K659 Peritonitis, unspecified -K660 Peritoneal adhesions (postprocedural) (postinfection) -K661 Hemoperitoneum -K668 Other specified disorders of peritoneum -K669 Disorder of peritoneum, unspecified -K67 Disorders of peritoneum in infectious diseases classified elsewhere -K6811 Postprocedural retroperitoneal abscess -K6812 Psoas muscle abscess -K6819 Other retroperitoneal abscess -K689 Other disorders of retroperitoneum -K700 Alcoholic fatty liver -K7010 Alcoholic hepatitis without ascites -K7011 Alcoholic hepatitis with ascites -K702 Alcoholic fibrosis and sclerosis of liver -K7030 Alcoholic cirrhosis of liver without ascites -K7031 Alcoholic cirrhosis of liver with ascites -K7040 Alcoholic hepatic failure without coma -K7041 Alcoholic hepatic failure with coma -K709 Alcoholic liver disease, unspecified -K710 Toxic liver disease with cholestasis -K7110 Toxic liver disease with hepatic necrosis, without coma -K7111 Toxic liver disease with hepatic necrosis, with coma -K712 Toxic liver disease with acute hepatitis -K713 Toxic liver disease with chronic persistent hepatitis -K714 Toxic liver disease with chronic lobular hepatitis -K7150 Toxic liver disease with chronic active hepatitis without ascites -K7151 Toxic liver disease with chronic active hepatitis with ascites -K716 Toxic liver disease with hepatitis, not elsewhere classified -K717 Toxic liver disease with fibrosis and cirrhosis of liver -K718 Toxic liver disease with other disorders of liver -K719 Toxic liver disease, unspecified -K7200 Acute and subacute hepatic failure without coma -K7201 Acute and subacute hepatic failure with coma -K7210 Chronic hepatic failure without coma -K7211 Chronic hepatic failure with coma -K7290 Hepatic failure, unspecified without coma -K7291 Hepatic failure, unspecified with coma -K730 Chronic persistent hepatitis, not elsewhere classified -K731 Chronic lobular hepatitis, not elsewhere classified -K732 Chronic active hepatitis, not elsewhere classified -K738 Other chronic hepatitis, not elsewhere classified -K739 Chronic hepatitis, unspecified -K740 Hepatic fibrosis -K741 Hepatic sclerosis -K742 Hepatic fibrosis with hepatic sclerosis -K743 Primary biliary cirrhosis -K744 Secondary biliary cirrhosis -K745 Biliary cirrhosis, unspecified -K7460 Unspecified cirrhosis of liver -K7469 Other cirrhosis of liver -K750 Abscess of liver -K751 Phlebitis of portal vein -K752 Nonspecific reactive hepatitis -K753 Granulomatous hepatitis, not elsewhere classified -K754 Autoimmune hepatitis -K7581 Nonalcoholic steatohepatitis (NASH) -K7589 Other specified inflammatory liver diseases -K759 Inflammatory liver disease, unspecified -K760 Fatty (change of) liver, not elsewhere classified -K761 Chronic passive congestion of liver -K762 Central hemorrhagic necrosis of liver -K763 Infarction of liver -K764 Peliosis hepatis -K765 Hepatic veno-occlusive disease -K766 Portal hypertension -K767 Hepatorenal syndrome -K7681 Hepatopulmonary syndrome -K7689 Other specified diseases of liver -K769 Liver disease, unspecified -K77 Liver disorders in diseases classified elsewhere -K8000 Calculus of gallbladder with acute cholecystitis without obstruction -K8001 Calculus of gallbladder with acute cholecystitis with obstruction -K8010 Calculus of gallbladder with chronic cholecystitis without obstruction -K8011 Calculus of gallbladder with chronic cholecystitis with obstruction -K8012 Calculus of gallbladder with acute and chronic cholecystitis without obstruction -K8013 Calculus of gallbladder with acute and chronic cholecystitis with obstruction -K8018 Calculus of gallbladder with other cholecystitis without obstruction -K8019 Calculus of gallbladder with other cholecystitis with obstruction -K8020 Calculus of gallbladder without cholecystitis without obstruction -K8021 Calculus of gallbladder without cholecystitis with obstruction -K8030 Calculus of bile duct with cholangitis, unspecified, without obstruction -K8031 Calculus of bile duct with cholangitis, unspecified, with obstruction -K8032 Calculus of bile duct with acute cholangitis without obstruction -K8033 Calculus of bile duct with acute cholangitis with obstruction -K8034 Calculus of bile duct with chronic cholangitis without obstruction -K8035 Calculus of bile duct with chronic cholangitis with obstruction -K8036 Calculus of bile duct with acute and chronic cholangitis without obstruction -K8037 Calculus of bile duct with acute and chronic cholangitis with obstruction -K8040 Calculus of bile duct with cholecystitis, unspecified, without obstruction -K8041 Calculus of bile duct with cholecystitis, unspecified, with obstruction -K8042 Calculus of bile duct with acute cholecystitis without obstruction -K8043 Calculus of bile duct with acute cholecystitis with obstruction -K8044 Calculus of bile duct with chronic cholecystitis without obstruction -K8045 Calculus of bile duct with chronic cholecystitis with obstruction -K8046 Calculus of bile duct with acute and chronic cholecystitis without obstruction -K8047 Calculus of bile duct with acute and chronic cholecystitis with obstruction -K8050 Calculus of bile duct without cholangitis or cholecystitis without obstruction -K8051 Calculus of bile duct without cholangitis or cholecystitis with obstruction -K8060 Calculus of gallbladder and bile duct with cholecystitis, unspecified, without obstruction -K8061 Calculus of gallbladder and bile duct with cholecystitis, unspecified, with obstruction -K8062 Calculus of gallbladder and bile duct with acute cholecystitis without obstruction -K8063 Calculus of gallbladder and bile duct with acute cholecystitis with obstruction -K8064 Calculus of gallbladder and bile duct with chronic cholecystitis without obstruction -K8065 Calculus of gallbladder and bile duct with chronic cholecystitis with obstruction -K8066 Calculus of gallbladder and bile duct with acute and chronic cholecystitis without obstruction -K8067 Calculus of gallbladder and bile duct with acute and chronic cholecystitis with obstruction -K8070 Calculus of gallbladder and bile duct without cholecystitis without obstruction -K8071 Calculus of gallbladder and bile duct without cholecystitis with obstruction -K8080 Other cholelithiasis without obstruction -K8081 Other cholelithiasis with obstruction -K810 Acute cholecystitis -K811 Chronic cholecystitis -K812 Acute cholecystitis with chronic cholecystitis -K819 Cholecystitis, unspecified -K820 Obstruction of gallbladder -K821 Hydrops of gallbladder -K822 Perforation of gallbladder -K823 Fistula of gallbladder -K824 Cholesterolosis of gallbladder -K828 Other specified diseases of gallbladder -K829 Disease of gallbladder, unspecified -K830 Cholangitis -K831 Obstruction of bile duct -K832 Perforation of bile duct -K833 Fistula of bile duct -K834 Spasm of sphincter of Oddi -K835 Biliary cyst -K838 Other specified diseases of biliary tract -K839 Disease of biliary tract, unspecified -K850 Idiopathic acute pancreatitis -K851 Biliary acute pancreatitis -K852 Alcohol induced acute pancreatitis -K853 Drug induced acute pancreatitis -K858 Other acute pancreatitis -K859 Acute pancreatitis, unspecified -K860 Alcohol-induced chronic pancreatitis -K861 Other chronic pancreatitis -K862 Cyst of pancreas -K863 Pseudocyst of pancreas -K868 Other specified diseases of pancreas -K869 Disease of pancreas, unspecified -K87 Disorders of gallbladder, biliary tract and pancreas in diseases classified elsewhere -K900 Celiac disease -K901 Tropical sprue -K902 Blind loop syndrome, not elsewhere classified -K903 Pancreatic steatorrhea -K904 Malabsorption due to intolerance, not elsewhere classified -K9081 Whipple's disease -K9089 Other intestinal malabsorption -K909 Intestinal malabsorption, unspecified -K910 Vomiting following gastrointestinal surgery -K911 Postgastric surgery syndromes -K912 Postsurgical malabsorption, not elsewhere classified -K913 Postprocedural intestinal obstruction -K915 Postcholecystectomy syndrome -K9161 Intraoperative hemorrhage and hematoma of a digestive system organ or structure complicating a digestive sytem procedure -K9162 Intraoperative hemorrhage and hematoma of a digestive system organ or structure complicating other procedure -K9171 Accidental puncture and laceration of a digestive system organ or structure during a digestive system procedure -K9172 Accidental puncture and laceration of a digestive system organ or structure during other procedure -K9181 Other intraoperative complications of digestive system -K9182 Postprocedural hepatic failure -K9183 Postprocedural hepatorenal syndrome -K91840 Postprocedural hemorrhage and hematoma of a digestive system organ or structure following a digestive system procedure -K91841 Postprocedural hemorrhage and hematoma of a digestive system organ or structure following other procedure -K91850 Pouchitis -K91858 Other complications of intestinal pouch -K9186 Retained cholelithiasis following cholecystectomy -K9189 Other postprocedural complications and disorders of digestive system -K920 Hematemesis -K921 Melena -K922 Gastrointestinal hemorrhage, unspecified -K9281 Gastrointestinal mucositis (ulcerative) -K9289 Other specified diseases of the digestive system -K929 Disease of digestive system, unspecified -K9400 Colostomy complication, unspecified -K9401 Colostomy hemorrhage -K9402 Colostomy infection -K9403 Colostomy malfunction -K9409 Other complications of colostomy -K9410 Enterostomy complication, unspecified -K9411 Enterostomy hemorrhage -K9412 Enterostomy infection -K9413 Enterostomy malfunction -K9419 Other complications of enterostomy -K9420 Gastrostomy complication, unspecified -K9421 Gastrostomy hemorrhage -K9422 Gastrostomy infection -K9423 Gastrostomy malfunction -K9429 Other complications of gastrostomy -K9430 Esophagostomy complications, unspecified -K9431 Esophagostomy hemorrhage -K9432 Esophagostomy infection -K9433 Esophagostomy malfunction -K9439 Other complications of esophagostomy -K9501 Infection due to gastric band procedure -K9509 Other complications of gastric band procedure -K9581 Infection due to other bariatric procedure -K9589 Other complications of other bariatric procedure -L00 Staphylococcal scalded skin syndrome -L0100 Impetigo, unspecified -L0101 Non-bullous impetigo -L0102 Bockhart's impetigo -L0103 Bullous impetigo -L0109 Other impetigo -L011 Impetiginization of other dermatoses -L0201 Cutaneous abscess of face -L0202 Furuncle of face -L0203 Carbuncle of face -L0211 Cutaneous abscess of neck -L0212 Furuncle of neck -L0213 Carbuncle of neck -L02211 Cutaneous abscess of abdominal wall -L02212 Cutaneous abscess of back [any part, except buttock] -L02213 Cutaneous abscess of chest wall -L02214 Cutaneous abscess of groin -L02215 Cutaneous abscess of perineum -L02216 Cutaneous abscess of umbilicus -L02219 Cutaneous abscess of trunk, unspecified -L02221 Furuncle of abdominal wall -L02222 Furuncle of back [any part, except buttock] -L02223 Furuncle of chest wall -L02224 Furuncle of groin -L02225 Furuncle of perineum -L02226 Furuncle of umbilicus -L02229 Furuncle of trunk, unspecified -L02231 Carbuncle of abdominal wall -L02232 Carbuncle of back [any part, except buttock] -L02233 Carbuncle of chest wall -L02234 Carbuncle of groin -L02235 Carbuncle of perineum -L02236 Carbuncle of umbilicus -L02239 Carbuncle of trunk, unspecified -L0231 Cutaneous abscess of buttock -L0232 Furuncle of buttock -L0233 Carbuncle of buttock -L02411 Cutaneous abscess of right axilla -L02412 Cutaneous abscess of left axilla -L02413 Cutaneous abscess of right upper limb -L02414 Cutaneous abscess of left upper limb -L02415 Cutaneous abscess of right lower limb -L02416 Cutaneous abscess of left lower limb -L02419 Cutaneous abscess of limb, unspecified -L02421 Furuncle of right axilla -L02422 Furuncle of left axilla -L02423 Furuncle of right upper limb -L02424 Furuncle of left upper limb -L02425 Furuncle of right lower limb -L02426 Furuncle of left lower limb -L02429 Furuncle of limb, unspecified -L02431 Carbuncle of right axilla -L02432 Carbuncle of left axilla -L02433 Carbuncle of right upper limb -L02434 Carbuncle of left upper limb -L02435 Carbuncle of right lower limb -L02436 Carbuncle of left lower limb -L02439 Carbuncle of limb, unspecified -L02511 Cutaneous abscess of right hand -L02512 Cutaneous abscess of left hand -L02519 Cutaneous abscess of unspecified hand -L02521 Furuncle right hand -L02522 Furuncle left hand -L02529 Furuncle unspecified hand -L02531 Carbuncle of right hand -L02532 Carbuncle of left hand -L02539 Carbuncle of unspecified hand -L02611 Cutaneous abscess of right foot -L02612 Cutaneous abscess of left foot -L02619 Cutaneous abscess of unspecified foot -L02621 Furuncle of right foot -L02622 Furuncle of left foot -L02629 Furuncle of unspecified foot -L02631 Carbuncle of right foot -L02632 Carbuncle of left foot -L02639 Carbuncle of unspecified foot -L02811 Cutaneous abscess of head [any part, except face] -L02818 Cutaneous abscess of other sites -L02821 Furuncle of head [any part, except face] -L02828 Furuncle of other sites -L02831 Carbuncle of head [any part, except face] -L02838 Carbuncle of other sites -L0291 Cutaneous abscess, unspecified -L0292 Furuncle, unspecified -L0293 Carbuncle, unspecified -L03011 Cellulitis of right finger -L03012 Cellulitis of left finger -L03019 Cellulitis of unspecified finger -L03021 Acute lymphangitis of right finger -L03022 Acute lymphangitis of left finger -L03029 Acute lymphangitis of unspecified finger -L03031 Cellulitis of right toe -L03032 Cellulitis of left toe -L03039 Cellulitis of unspecified toe -L03041 Acute lymphangitis of right toe -L03042 Acute lymphangitis of left toe -L03049 Acute lymphangitis of unspecified toe -L03111 Cellulitis of right axilla -L03112 Cellulitis of left axilla -L03113 Cellulitis of right upper limb -L03114 Cellulitis of left upper limb -L03115 Cellulitis of right lower limb -L03116 Cellulitis of left lower limb -L03119 Cellulitis of unspecified part of limb -L03121 Acute lymphangitis of right axilla -L03122 Acute lymphangitis of left axilla -L03123 Acute lymphangitis of right upper limb -L03124 Acute lymphangitis of left upper limb -L03125 Acute lymphangitis of right lower limb -L03126 Acute lymphangitis of left lower limb -L03129 Acute lymphangitis of unspecified part of limb -L03211 Cellulitis of face -L03212 Acute lymphangitis of face -L03221 Cellulitis of neck -L03222 Acute lymphangitis of neck -L03311 Cellulitis of abdominal wall -L03312 Cellulitis of back [any part except buttock] -L03313 Cellulitis of chest wall -L03314 Cellulitis of groin -L03315 Cellulitis of perineum -L03316 Cellulitis of umbilicus -L03317 Cellulitis of buttock -L03319 Cellulitis of trunk, unspecified -L03321 Acute lymphangitis of abdominal wall -L03322 Acute lymphangitis of back [any part except buttock] -L03323 Acute lymphangitis of chest wall -L03324 Acute lymphangitis of groin -L03325 Acute lymphangitis of perineum -L03326 Acute lymphangitis of umbilicus -L03327 Acute lymphangitis of buttock -L03329 Acute lymphangitis of trunk, unspecified -L03811 Cellulitis of head [any part, except face] -L03818 Cellulitis of other sites -L03891 Acute lymphangitis of head [any part, except face] -L03898 Acute lymphangitis of other sites -L0390 Cellulitis, unspecified -L0391 Acute lymphangitis, unspecified -L040 Acute lymphadenitis of face, head and neck -L041 Acute lymphadenitis of trunk -L042 Acute lymphadenitis of upper limb -L043 Acute lymphadenitis of lower limb -L048 Acute lymphadenitis of other sites -L049 Acute lymphadenitis, unspecified -L0501 Pilonidal cyst with abscess -L0502 Pilonidal sinus with abscess -L0591 Pilonidal cyst without abscess -L0592 Pilonidal sinus without abscess -L080 Pyoderma -L081 Erythrasma -L0881 Pyoderma vegetans -L0882 Omphalitis not of newborn -L0889 Other specified local infections of the skin and subcutaneous tissue -L089 Local infection of the skin and subcutaneous tissue, unspecified -L100 Pemphigus vulgaris -L101 Pemphigus vegetans -L102 Pemphigus foliaceous -L103 Brazilian pemphigus [fogo selvagem] -L104 Pemphigus erythematosus -L105 Drug-induced pemphigus -L1081 Paraneoplastic pemphigus -L1089 Other pemphigus -L109 Pemphigus, unspecified -L110 Acquired keratosis follicularis -L111 Transient acantholytic dermatosis [Grover] -L118 Other specified acantholytic disorders -L119 Acantholytic disorder, unspecified -L120 Bullous pemphigoid -L121 Cicatricial pemphigoid -L122 Chronic bullous disease of childhood -L1230 Acquired epidermolysis bullosa, unspecified -L1231 Epidermolysis bullosa due to drug -L1235 Other acquired epidermolysis bullosa -L128 Other pemphigoid -L129 Pemphigoid, unspecified -L130 Dermatitis herpetiformis -L131 Subcorneal pustular dermatitis -L138 Other specified bullous disorders -L139 Bullous disorder, unspecified -L14 Bullous disorders in diseases classified elsewhere -L200 Besnier's prurigo -L2081 Atopic neurodermatitis -L2082 Flexural eczema -L2083 Infantile (acute) (chronic) eczema -L2084 Intrinsic (allergic) eczema -L2089 Other atopic dermatitis -L209 Atopic dermatitis, unspecified -L210 Seborrhea capitis -L211 Seborrheic infantile dermatitis -L218 Other seborrheic dermatitis -L219 Seborrheic dermatitis, unspecified -L22 Diaper dermatitis -L230 Allergic contact dermatitis due to metals -L231 Allergic contact dermatitis due to adhesives -L232 Allergic contact dermatitis due to cosmetics -L233 Allergic contact dermatitis due to drugs in contact with skin -L234 Allergic contact dermatitis due to dyes -L235 Allergic contact dermatitis due to other chemical products -L236 Allergic contact dermatitis due to food in contact with the skin -L237 Allergic contact dermatitis due to plants, except food -L2381 Allergic contact dermatitis due to animal (cat) (dog) dander -L2389 Allergic contact dermatitis due to other agents -L239 Allergic contact dermatitis, unspecified cause -L240 Irritant contact dermatitis due to detergents -L241 Irritant contact dermatitis due to oils and greases -L242 Irritant contact dermatitis due to solvents -L243 Irritant contact dermatitis due to cosmetics -L244 Irritant contact dermatitis due to drugs in contact with skin -L245 Irritant contact dermatitis due to other chemical products -L246 Irritant contact dermatitis due to food in contact with skin -L247 Irritant contact dermatitis due to plants, except food -L2481 Irritant contact dermatitis due to metals -L2489 Irritant contact dermatitis due to other agents -L249 Irritant contact dermatitis, unspecified cause -L250 Unspecified contact dermatitis due to cosmetics -L251 Unspecified contact dermatitis due to drugs in contact with skin -L252 Unspecified contact dermatitis due to dyes -L253 Unspecified contact dermatitis due to other chemical products -L254 Unspecified contact dermatitis due to food in contact with skin -L255 Unspecified contact dermatitis due to plants, except food -L258 Unspecified contact dermatitis due to other agents -L259 Unspecified contact dermatitis, unspecified cause -L26 Exfoliative dermatitis -L270 Generalized skin eruption due to drugs and medicaments taken internally -L271 Localized skin eruption due to drugs and medicaments taken internally -L272 Dermatitis due to ingested food -L278 Dermatitis due to other substances taken internally -L279 Dermatitis due to unspecified substance taken internally -L280 Lichen simplex chronicus -L281 Prurigo nodularis -L282 Other prurigo -L290 Pruritus ani -L291 Pruritus scroti -L292 Pruritus vulvae -L293 Anogenital pruritus, unspecified -L298 Other pruritus -L299 Pruritus, unspecified -L300 Nummular dermatitis -L301 Dyshidrosis [pompholyx] -L302 Cutaneous autosensitization -L303 Infective dermatitis -L304 Erythema intertrigo -L305 Pityriasis alba -L308 Other specified dermatitis -L309 Dermatitis, unspecified -L400 Psoriasis vulgaris -L401 Generalized pustular psoriasis -L402 Acrodermatitis continua -L403 Pustulosis palmaris et plantaris -L404 Guttate psoriasis -L4050 Arthropathic psoriasis, unspecified -L4051 Distal interphalangeal psoriatic arthropathy -L4052 Psoriatic arthritis mutilans -L4053 Psoriatic spondylitis -L4054 Psoriatic juvenile arthropathy -L4059 Other psoriatic arthropathy -L408 Other psoriasis -L409 Psoriasis, unspecified -L410 Pityriasis lichenoides et varioliformis acuta -L411 Pityriasis lichenoides chronica -L413 Small plaque parapsoriasis -L414 Large plaque parapsoriasis -L415 Retiform parapsoriasis -L418 Other parapsoriasis -L419 Parapsoriasis, unspecified -L42 Pityriasis rosea -L430 Hypertrophic lichen planus -L431 Bullous lichen planus -L432 Lichenoid drug reaction -L433 Subacute (active) lichen planus -L438 Other lichen planus -L439 Lichen planus, unspecified -L440 Pityriasis rubra pilaris -L441 Lichen nitidus -L442 Lichen striatus -L443 Lichen ruber moniliformis -L444 Infantile papular acrodermatitis [Gianotti-Crosti] -L448 Other specified papulosquamous disorders -L449 Papulosquamous disorder, unspecified -L45 Papulosquamous disorders in diseases classified elsewhere -L490 Exfoliation due to erythematous condition involving less than 10 percent of body surface -L491 Exfoliation due to erythematous condition involving 10-19 percent of body surface -L492 Exfoliation due to erythematous condition involving 20-29 percent of body surface -L493 Exfoliation due to erythematous condition involving 30-39 percent of body surface -L494 Exfoliation due to erythematous condition involving 40-49 percent of body surface -L495 Exfoliation due to erythematous condition involving 50-59 percent of body surface -L496 Exfoliation due to erythematous condition involving 60-69 percent of body surface -L497 Exfoliation due to erythematous condition involving 70-79 percent of body surface -L498 Exfoliation due to erythematous condition involving 80-89 percent of body surface -L499 Exfoliation due to erythematous condition involving 90 or more percent of body surface -L500 Allergic urticaria -L501 Idiopathic urticaria -L502 Urticaria due to cold and heat -L503 Dermatographic urticaria -L504 Vibratory urticaria -L505 Cholinergic urticaria -L506 Contact urticaria -L508 Other urticaria -L509 Urticaria, unspecified -L510 Nonbullous erythema multiforme -L511 Stevens-Johnson syndrome -L512 Toxic epidermal necrolysis [Lyell] -L513 Stevens-Johnson syndrome-toxic epidermal necrolysis overlap syndrome -L518 Other erythema multiforme -L519 Erythema multiforme, unspecified -L52 Erythema nodosum -L530 Toxic erythema -L531 Erythema annulare centrifugum -L532 Erythema marginatum -L533 Other chronic figurate erythema -L538 Other specified erythematous conditions -L539 Erythematous condition, unspecified -L54 Erythema in diseases classified elsewhere -L550 Sunburn of first degree -L551 Sunburn of second degree -L552 Sunburn of third degree -L559 Sunburn, unspecified -L560 Drug phototoxic response -L561 Drug photoallergic response -L562 Photocontact dermatitis [berloque dermatitis] -L563 Solar urticaria -L564 Polymorphous light eruption -L565 Disseminated superficial actinic porokeratosis (DSAP) -L568 Other specified acute skin changes due to ultraviolet radiation -L569 Acute skin change due to ultraviolet radiation, unspecified -L570 Actinic keratosis -L571 Actinic reticuloid -L572 Cutis rhomboidalis nuchae -L573 Poikiloderma of Civatte -L574 Cutis laxa senilis -L575 Actinic granuloma -L578 Other skin changes due to chronic exposure to nonionizing radiation -L579 Skin changes due to chronic exposure to nonionizing radiation, unspecified -L580 Acute radiodermatitis -L581 Chronic radiodermatitis -L589 Radiodermatitis, unspecified -L590 Erythema ab igne [dermatitis ab igne] -L598 Other specified disorders of the skin and subcutaneous tissue related to radiation -L599 Disorder of the skin and subcutaneous tissue related to radiation, unspecified -L600 Ingrowing nail -L601 Onycholysis -L602 Onychogryphosis -L603 Nail dystrophy -L604 Beau's lines -L605 Yellow nail syndrome -L608 Other nail disorders -L609 Nail disorder, unspecified -L62 Nail disorders in diseases classified elsewhere -L630 Alopecia (capitis) totalis -L631 Alopecia universalis -L632 Ophiasis -L638 Other alopecia areata -L639 Alopecia areata, unspecified -L640 Drug-induced androgenic alopecia -L648 Other androgenic alopecia -L649 Androgenic alopecia, unspecified -L650 Telogen effluvium -L651 Anagen effluvium -L652 Alopecia mucinosa -L658 Other specified nonscarring hair loss -L659 Nonscarring hair loss, unspecified -L660 Pseudopelade -L661 Lichen planopilaris -L662 Folliculitis decalvans -L663 Perifolliculitis capitis abscedens -L664 Folliculitis ulerythematosa reticulata -L668 Other cicatricial alopecia -L669 Cicatricial alopecia, unspecified -L670 Trichorrhexis nodosa -L671 Variations in hair color -L678 Other hair color and hair shaft abnormalities -L679 Hair color and hair shaft abnormality, unspecified -L680 Hirsutism -L681 Acquired hypertrichosis lanuginosa -L682 Localized hypertrichosis -L683 Polytrichia -L688 Other hypertrichosis -L689 Hypertrichosis, unspecified -L700 Acne vulgaris -L701 Acne conglobata -L702 Acne varioliformis -L703 Acne tropica -L704 Infantile acne -L705 Acne excoriee des jeunes filles -L708 Other acne -L709 Acne, unspecified -L710 Perioral dermatitis -L711 Rhinophyma -L718 Other rosacea -L719 Rosacea, unspecified -L720 Epidermal cyst -L7211 Pilar cyst -L7212 Trichodermal cyst -L722 Steatocystoma multiplex -L723 Sebaceous cyst -L728 Other follicular cysts of the skin and subcutaneous tissue -L729 Follicular cyst of the skin and subcutaneous tissue, unspecified -L730 Acne keloid -L731 Pseudofolliculitis barbae -L732 Hidradenitis suppurativa -L738 Other specified follicular disorders -L739 Follicular disorder, unspecified -L740 Miliaria rubra -L741 Miliaria crystallina -L742 Miliaria profunda -L743 Miliaria, unspecified -L744 Anhidrosis -L74510 Primary focal hyperhidrosis, axilla -L74511 Primary focal hyperhidrosis, face -L74512 Primary focal hyperhidrosis, palms -L74513 Primary focal hyperhidrosis, soles -L74519 Primary focal hyperhidrosis, unspecified -L7452 Secondary focal hyperhidrosis -L748 Other eccrine sweat disorders -L749 Eccrine sweat disorder, unspecified -L750 Bromhidrosis -L751 Chromhidrosis -L752 Apocrine miliaria -L758 Other apocrine sweat disorders -L759 Apocrine sweat disorder, unspecified -L7601 Intraoperative hemorrhage and hematoma of skin and subcutaneous tissue complicating a dermatologic procedure -L7602 Intraoperative hemorrhage and hematoma of skin and subcutaneous tissue complicating other procedure -L7611 Accidental puncture and laceration of skin and subcutaneous tissue during a dermatologic procedure -L7612 Accidental puncture and laceration of skin and subcutaneous tissue during other procedure -L7621 Postprocedural hemorrhage and hematoma of skin and subcutaneous tissue following a dermatologic procedure -L7622 Postprocedural hemorrhage and hematoma of skin and subcutaneous tissue following other procedure -L7681 Other intraoperative complications of skin and subcutaneous tissue -L7682 Other postprocedural complications of skin and subcutaneous tissue -L80 Vitiligo -L810 Postinflammatory hyperpigmentation -L811 Chloasma -L812 Freckles -L813 Cafe au lait spots -L814 Other melanin hyperpigmentation -L815 Leukoderma, not elsewhere classified -L816 Other disorders of diminished melanin formation -L817 Pigmented purpuric dermatosis -L818 Other specified disorders of pigmentation -L819 Disorder of pigmentation, unspecified -L820 Inflamed seborrheic keratosis -L821 Other seborrheic keratosis -L83 Acanthosis nigricans -L84 Corns and callosities -L850 Acquired ichthyosis -L851 Acquired keratosis [keratoderma] palmaris et plantaris -L852 Keratosis punctata (palmaris et plantaris) -L853 Xerosis cutis -L858 Other specified epidermal thickening -L859 Epidermal thickening, unspecified -L86 Keratoderma in diseases classified elsewhere -L870 Keratosis follicularis et parafollicularis in cutem penetrans -L871 Reactive perforating collagenosis -L872 Elastosis perforans serpiginosa -L878 Other transepidermal elimination disorders -L879 Transepidermal elimination disorder, unspecified -L88 Pyoderma gangrenosum -L89000 Pressure ulcer of unspecified elbow, unstageable -L89001 Pressure ulcer of unspecified elbow, stage 1 -L89002 Pressure ulcer of unspecified elbow, stage 2 -L89003 Pressure ulcer of unspecified elbow, stage 3 -L89004 Pressure ulcer of unspecified elbow, stage 4 -L89009 Pressure ulcer of unspecified elbow, unspecified stage -L89010 Pressure ulcer of right elbow, unstageable -L89011 Pressure ulcer of right elbow, stage 1 -L89012 Pressure ulcer of right elbow, stage 2 -L89013 Pressure ulcer of right elbow, stage 3 -L89014 Pressure ulcer of right elbow, stage 4 -L89019 Pressure ulcer of right elbow, unspecified stage -L89020 Pressure ulcer of left elbow, unstageable -L89021 Pressure ulcer of left elbow, stage 1 -L89022 Pressure ulcer of left elbow, stage 2 -L89023 Pressure ulcer of left elbow, stage 3 -L89024 Pressure ulcer of left elbow, stage 4 -L89029 Pressure ulcer of left elbow, unspecified stage -L89100 Pressure ulcer of unspecified part of back, unstageable -L89101 Pressure ulcer of unspecified part of back, stage 1 -L89102 Pressure ulcer of unspecified part of back, stage 2 -L89103 Pressure ulcer of unspecified part of back, stage 3 -L89104 Pressure ulcer of unspecified part of back, stage 4 -L89109 Pressure ulcer of unspecified part of back, unspecified stage -L89110 Pressure ulcer of right upper back, unstageable -L89111 Pressure ulcer of right upper back, stage 1 -L89112 Pressure ulcer of right upper back, stage 2 -L89113 Pressure ulcer of right upper back, stage 3 -L89114 Pressure ulcer of right upper back, stage 4 -L89119 Pressure ulcer of right upper back, unspecified stage -L89120 Pressure ulcer of left upper back, unstageable -L89121 Pressure ulcer of left upper back, stage 1 -L89122 Pressure ulcer of left upper back, stage 2 -L89123 Pressure ulcer of left upper back, stage 3 -L89124 Pressure ulcer of left upper back, stage 4 -L89129 Pressure ulcer of left upper back, unspecified stage -L89130 Pressure ulcer of right lower back, unstageable -L89131 Pressure ulcer of right lower back, stage 1 -L89132 Pressure ulcer of right lower back, stage 2 -L89133 Pressure ulcer of right lower back, stage 3 -L89134 Pressure ulcer of right lower back, stage 4 -L89139 Pressure ulcer of right lower back, unspecified stage -L89140 Pressure ulcer of left lower back, unstageable -L89141 Pressure ulcer of left lower back, stage 1 -L89142 Pressure ulcer of left lower back, stage 2 -L89143 Pressure ulcer of left lower back, stage 3 -L89144 Pressure ulcer of left lower back, stage 4 -L89149 Pressure ulcer of left lower back, unspecified stage -L89150 Pressure ulcer of sacral region, unstageable -L89151 Pressure ulcer of sacral region, stage 1 -L89152 Pressure ulcer of sacral region, stage 2 -L89153 Pressure ulcer of sacral region, stage 3 -L89154 Pressure ulcer of sacral region, stage 4 -L89159 Pressure ulcer of sacral region, unspecified stage -L89200 Pressure ulcer of unspecified hip, unstageable -L89201 Pressure ulcer of unspecified hip, stage 1 -L89202 Pressure ulcer of unspecified hip, stage 2 -L89203 Pressure ulcer of unspecified hip, stage 3 -L89204 Pressure ulcer of unspecified hip, stage 4 -L89209 Pressure ulcer of unspecified hip, unspecified stage -L89210 Pressure ulcer of right hip, unstageable -L89211 Pressure ulcer of right hip, stage 1 -L89212 Pressure ulcer of right hip, stage 2 -L89213 Pressure ulcer of right hip, stage 3 -L89214 Pressure ulcer of right hip, stage 4 -L89219 Pressure ulcer of right hip, unspecified stage -L89220 Pressure ulcer of left hip, unstageable -L89221 Pressure ulcer of left hip, stage 1 -L89222 Pressure ulcer of left hip, stage 2 -L89223 Pressure ulcer of left hip, stage 3 -L89224 Pressure ulcer of left hip, stage 4 -L89229 Pressure ulcer of left hip, unspecified stage -L89300 Pressure ulcer of unspecified buttock, unstageable -L89301 Pressure ulcer of unspecified buttock, stage 1 -L89302 Pressure ulcer of unspecified buttock, stage 2 -L89303 Pressure ulcer of unspecified buttock, stage 3 -L89304 Pressure ulcer of unspecified buttock, stage 4 -L89309 Pressure ulcer of unspecified buttock, unspecified stage -L89310 Pressure ulcer of right buttock, unstageable -L89311 Pressure ulcer of right buttock, stage 1 -L89312 Pressure ulcer of right buttock, stage 2 -L89313 Pressure ulcer of right buttock, stage 3 -L89314 Pressure ulcer of right buttock, stage 4 -L89319 Pressure ulcer of right buttock, unspecified stage -L89320 Pressure ulcer of left buttock, unstageable -L89321 Pressure ulcer of left buttock, stage 1 -L89322 Pressure ulcer of left buttock, stage 2 -L89323 Pressure ulcer of left buttock, stage 3 -L89324 Pressure ulcer of left buttock, stage 4 -L89329 Pressure ulcer of left buttock, unspecified stage -L8940 Pressure ulcer of contiguous site of back, buttock and hip, unspecified stage -L8941 Pressure ulcer of contiguous site of back, buttock and hip, stage 1 -L8942 Pressure ulcer of contiguous site of back, buttock and hip, stage 2 -L8943 Pressure ulcer of contiguous site of back, buttock and hip, stage 3 -L8944 Pressure ulcer of contiguous site of back, buttock and hip, stage 4 -L8945 Pressure ulcer of contiguous site of back, buttock and hip, unstageable -L89500 Pressure ulcer of unspecified ankle, unstageable -L89501 Pressure ulcer of unspecified ankle, stage 1 -L89502 Pressure ulcer of unspecified ankle, stage 2 -L89503 Pressure ulcer of unspecified ankle, stage 3 -L89504 Pressure ulcer of unspecified ankle, stage 4 -L89509 Pressure ulcer of unspecified ankle, unspecified stage -L89510 Pressure ulcer of right ankle, unstageable -L89511 Pressure ulcer of right ankle, stage 1 -L89512 Pressure ulcer of right ankle, stage 2 -L89513 Pressure ulcer of right ankle, stage 3 -L89514 Pressure ulcer of right ankle, stage 4 -L89519 Pressure ulcer of right ankle, unspecified stage -L89520 Pressure ulcer of left ankle, unstageable -L89521 Pressure ulcer of left ankle, stage 1 -L89522 Pressure ulcer of left ankle, stage 2 -L89523 Pressure ulcer of left ankle, stage 3 -L89524 Pressure ulcer of left ankle, stage 4 -L89529 Pressure ulcer of left ankle, unspecified stage -L89600 Pressure ulcer of unspecified heel, unstageable -L89601 Pressure ulcer of unspecified heel, stage 1 -L89602 Pressure ulcer of unspecified heel, stage 2 -L89603 Pressure ulcer of unspecified heel, stage 3 -L89604 Pressure ulcer of unspecified heel, stage 4 -L89609 Pressure ulcer of unspecified heel, unspecified stage -L89610 Pressure ulcer of right heel, unstageable -L89611 Pressure ulcer of right heel, stage 1 -L89612 Pressure ulcer of right heel, stage 2 -L89613 Pressure ulcer of right heel, stage 3 -L89614 Pressure ulcer of right heel, stage 4 -L89619 Pressure ulcer of right heel, unspecified stage -L89620 Pressure ulcer of left heel, unstageable -L89621 Pressure ulcer of left heel, stage 1 -L89622 Pressure ulcer of left heel, stage 2 -L89623 Pressure ulcer of left heel, stage 3 -L89624 Pressure ulcer of left heel, stage 4 -L89629 Pressure ulcer of left heel, unspecified stage -L89810 Pressure ulcer of head, unstageable -L89811 Pressure ulcer of head, stage 1 -L89812 Pressure ulcer of head, stage 2 -L89813 Pressure ulcer of head, stage 3 -L89814 Pressure ulcer of head, stage 4 -L89819 Pressure ulcer of head, unspecified stage -L89890 Pressure ulcer of other site, unstageable -L89891 Pressure ulcer of other site, stage 1 -L89892 Pressure ulcer of other site, stage 2 -L89893 Pressure ulcer of other site, stage 3 -L89894 Pressure ulcer of other site, stage 4 -L89899 Pressure ulcer of other site, unspecified stage -L8990 Pressure ulcer of unspecified site, unspecified stage -L8991 Pressure ulcer of unspecified site, stage 1 -L8992 Pressure ulcer of unspecified site, stage 2 -L8993 Pressure ulcer of unspecified site, stage 3 -L8994 Pressure ulcer of unspecified site, stage 4 -L8995 Pressure ulcer of unspecified site, unstageable -L900 Lichen sclerosus et atrophicus -L901 Anetoderma of Schweninger-Buzzi -L902 Anetoderma of Jadassohn-Pellizzari -L903 Atrophoderma of Pasini and Pierini -L904 Acrodermatitis chronica atrophicans -L905 Scar conditions and fibrosis of skin -L906 Striae atrophicae -L908 Other atrophic disorders of skin -L909 Atrophic disorder of skin, unspecified -L910 Hypertrophic scar -L918 Other hypertrophic disorders of the skin -L919 Hypertrophic disorder of the skin, unspecified -L920 Granuloma annulare -L921 Necrobiosis lipoidica, not elsewhere classified -L922 Granuloma faciale [eosinophilic granuloma of skin] -L923 Foreign body granuloma of the skin and subcutaneous tissue -L928 Other granulomatous disorders of the skin and subcutaneous tissue -L929 Granulomatous disorder of the skin and subcutaneous tissue, unspecified -L930 Discoid lupus erythematosus -L931 Subacute cutaneous lupus erythematosus -L932 Other local lupus erythematosus -L940 Localized scleroderma [morphea] -L941 Linear scleroderma -L942 Calcinosis cutis -L943 Sclerodactyly -L944 Gottron's papules -L945 Poikiloderma vasculare atrophicans -L946 Ainhum -L948 Other specified localized connective tissue disorders -L949 Localized connective tissue disorder, unspecified -L950 Livedoid vasculitis -L951 Erythema elevatum diutinum -L958 Other vasculitis limited to the skin -L959 Vasculitis limited to the skin, unspecified -L97101 Non-pressure chronic ulcer of unspecified thigh limited to breakdown of skin -L97102 Non-pressure chronic ulcer of unspecified thigh with fat layer exposed -L97103 Non-pressure chronic ulcer of unspecified thigh with necrosis of muscle -L97104 Non-pressure chronic ulcer of unspecified thigh with necrosis of bone -L97109 Non-pressure chronic ulcer of unspecified thigh with unspecified severity -L97111 Non-pressure chronic ulcer of right thigh limited to breakdown of skin -L97112 Non-pressure chronic ulcer of right thigh with fat layer exposed -L97113 Non-pressure chronic ulcer of right thigh with necrosis of muscle -L97114 Non-pressure chronic ulcer of right thigh with necrosis of bone -L97119 Non-pressure chronic ulcer of right thigh with unspecified severity -L97121 Non-pressure chronic ulcer of left thigh limited to breakdown of skin -L97122 Non-pressure chronic ulcer of left thigh with fat layer exposed -L97123 Non-pressure chronic ulcer of left thigh with necrosis of muscle -L97124 Non-pressure chronic ulcer of left thigh with necrosis of bone -L97129 Non-pressure chronic ulcer of left thigh with unspecified severity -L97201 Non-pressure chronic ulcer of unspecified calf limited to breakdown of skin -L97202 Non-pressure chronic ulcer of unspecified calf with fat layer exposed -L97203 Non-pressure chronic ulcer of unspecified calf with necrosis of muscle -L97204 Non-pressure chronic ulcer of unspecified calf with necrosis of bone -L97209 Non-pressure chronic ulcer of unspecified calf with unspecified severity -L97211 Non-pressure chronic ulcer of right calf limited to breakdown of skin -L97212 Non-pressure chronic ulcer of right calf with fat layer exposed -L97213 Non-pressure chronic ulcer of right calf with necrosis of muscle -L97214 Non-pressure chronic ulcer of right calf with necrosis of bone -L97219 Non-pressure chronic ulcer of right calf with unspecified severity -L97221 Non-pressure chronic ulcer of left calf limited to breakdown of skin -L97222 Non-pressure chronic ulcer of left calf with fat layer exposed -L97223 Non-pressure chronic ulcer of left calf with necrosis of muscle -L97224 Non-pressure chronic ulcer of left calf with necrosis of bone -L97229 Non-pressure chronic ulcer of left calf with unspecified severity -L97301 Non-pressure chronic ulcer of unspecified ankle limited to breakdown of skin -L97302 Non-pressure chronic ulcer of unspecified ankle with fat layer exposed -L97303 Non-pressure chronic ulcer of unspecified ankle with necrosis of muscle -L97304 Non-pressure chronic ulcer of unspecified ankle with necrosis of bone -L97309 Non-pressure chronic ulcer of unspecified ankle with unspecified severity -L97311 Non-pressure chronic ulcer of right ankle limited to breakdown of skin -L97312 Non-pressure chronic ulcer of right ankle with fat layer exposed -L97313 Non-pressure chronic ulcer of right ankle with necrosis of muscle -L97314 Non-pressure chronic ulcer of right ankle with necrosis of bone -L97319 Non-pressure chronic ulcer of right ankle with unspecified severity -L97321 Non-pressure chronic ulcer of left ankle limited to breakdown of skin -L97322 Non-pressure chronic ulcer of left ankle with fat layer exposed -L97323 Non-pressure chronic ulcer of left ankle with necrosis of muscle -L97324 Non-pressure chronic ulcer of left ankle with necrosis of bone -L97329 Non-pressure chronic ulcer of left ankle with unspecified severity -L97401 Non-pressure chronic ulcer of unspecified heel and midfoot limited to breakdown of skin -L97402 Non-pressure chronic ulcer of unspecified heel and midfoot with fat layer exposed -L97403 Non-pressure chronic ulcer of unspecified heel and midfoot with necrosis of muscle -L97404 Non-pressure chronic ulcer of unspecified heel and midfoot with necrosis of bone -L97409 Non-pressure chronic ulcer of unspecified heel and midfoot with unspecified severity -L97411 Non-pressure chronic ulcer of right heel and midfoot limited to breakdown of skin -L97412 Non-pressure chronic ulcer of right heel and midfoot with fat layer exposed -L97413 Non-pressure chronic ulcer of right heel and midfoot with necrosis of muscle -L97414 Non-pressure chronic ulcer of right heel and midfoot with necrosis of bone -L97419 Non-pressure chronic ulcer of right heel and midfoot with unspecified severity -L97421 Non-pressure chronic ulcer of left heel and midfoot limited to breakdown of skin -L97422 Non-pressure chronic ulcer of left heel and midfoot with fat layer exposed -L97423 Non-pressure chronic ulcer of left heel and midfoot with necrosis of muscle -L97424 Non-pressure chronic ulcer of left heel and midfoot with necrosis of bone -L97429 Non-pressure chronic ulcer of left heel and midfoot with unspecified severity -L97501 Non-pressure chronic ulcer of other part of unspecified foot limited to breakdown of skin -L97502 Non-pressure chronic ulcer of other part of unspecified foot with fat layer exposed -L97503 Non-pressure chronic ulcer of other part of unspecified foot with necrosis of muscle -L97504 Non-pressure chronic ulcer of other part of unspecified foot with necrosis of bone -L97509 Non-pressure chronic ulcer of other part of unspecified foot with unspecified severity -L97511 Non-pressure chronic ulcer of other part of right foot limited to breakdown of skin -L97512 Non-pressure chronic ulcer of other part of right foot with fat layer exposed -L97513 Non-pressure chronic ulcer of other part of right foot with necrosis of muscle -L97514 Non-pressure chronic ulcer of other part of right foot with necrosis of bone -L97519 Non-pressure chronic ulcer of other part of right foot with unspecified severity -L97521 Non-pressure chronic ulcer of other part of left foot limited to breakdown of skin -L97522 Non-pressure chronic ulcer of other part of left foot with fat layer exposed -L97523 Non-pressure chronic ulcer of other part of left foot with necrosis of muscle -L97524 Non-pressure chronic ulcer of other part of left foot with necrosis of bone -L97529 Non-pressure chronic ulcer of other part of left foot with unspecified severity -L97801 Non-pressure chronic ulcer of other part of unspecified lower leg limited to breakdown of skin -L97802 Non-pressure chronic ulcer of other part of unspecified lower leg with fat layer exposed -L97803 Non-pressure chronic ulcer of other part of unspecified lower leg with necrosis of muscle -L97804 Non-pressure chronic ulcer of other part of unspecified lower leg with necrosis of bone -L97809 Non-pressure chronic ulcer of other part of unspecified lower leg with unspecified severity -L97811 Non-pressure chronic ulcer of other part of right lower leg limited to breakdown of skin -L97812 Non-pressure chronic ulcer of other part of right lower leg with fat layer exposed -L97813 Non-pressure chronic ulcer of other part of right lower leg with necrosis of muscle -L97814 Non-pressure chronic ulcer of other part of right lower leg with necrosis of bone -L97819 Non-pressure chronic ulcer of other part of right lower leg with unspecified severity -L97821 Non-pressure chronic ulcer of other part of left lower leg limited to breakdown of skin -L97822 Non-pressure chronic ulcer of other part of left lower leg with fat layer exposed -L97823 Non-pressure chronic ulcer of other part of left lower leg with necrosis of muscle -L97824 Non-pressure chronic ulcer of other part of left lower leg with necrosis of bone -L97829 Non-pressure chronic ulcer of other part of left lower leg with unspecified severity -L97901 Non-pressure chronic ulcer of unspecified part of unspecified lower leg limited to breakdown of skin -L97902 Non-pressure chronic ulcer of unspecified part of unspecified lower leg with fat layer exposed -L97903 Non-pressure chronic ulcer of unspecified part of unspecified lower leg with necrosis of muscle -L97904 Non-pressure chronic ulcer of unspecified part of unspecified lower leg with necrosis of bone -L97909 Non-pressure chronic ulcer of unspecified part of unspecified lower leg with unspecified severity -L97911 Non-pressure chronic ulcer of unspecified part of right lower leg limited to breakdown of skin -L97912 Non-pressure chronic ulcer of unspecified part of right lower leg with fat layer exposed -L97913 Non-pressure chronic ulcer of unspecified part of right lower leg with necrosis of muscle -L97914 Non-pressure chronic ulcer of unspecified part of right lower leg with necrosis of bone -L97919 Non-pressure chronic ulcer of unspecified part of right lower leg with unspecified severity -L97921 Non-pressure chronic ulcer of unspecified part of left lower leg limited to breakdown of skin -L97922 Non-pressure chronic ulcer of unspecified part of left lower leg with fat layer exposed -L97923 Non-pressure chronic ulcer of unspecified part of left lower leg with necrosis of muscle -L97924 Non-pressure chronic ulcer of unspecified part of left lower leg with necrosis of bone -L97929 Non-pressure chronic ulcer of unspecified part of left lower leg with unspecified severity -L980 Pyogenic granuloma -L981 Factitial dermatitis -L982 Febrile neutrophilic dermatosis [Sweet] -L983 Eosinophilic cellulitis [Wells] -L98411 Non-pressure chronic ulcer of buttock limited to breakdown of skin -L98412 Non-pressure chronic ulcer of buttock with fat layer exposed -L98413 Non-pressure chronic ulcer of buttock with necrosis of muscle -L98414 Non-pressure chronic ulcer of buttock with necrosis of bone -L98419 Non-pressure chronic ulcer of buttock with unspecified severity -L98421 Non-pressure chronic ulcer of back limited to breakdown of skin -L98422 Non-pressure chronic ulcer of back with fat layer exposed -L98423 Non-pressure chronic ulcer of back with necrosis of muscle -L98424 Non-pressure chronic ulcer of back with necrosis of bone -L98429 Non-pressure chronic ulcer of back with unspecified severity -L98491 Non-pressure chronic ulcer of skin of other sites limited to breakdown of skin -L98492 Non-pressure chronic ulcer of skin of other sites with fat layer exposed -L98493 Non-pressure chronic ulcer of skin of other sites with necrosis of muscle -L98494 Non-pressure chronic ulcer of skin of other sites with necrosis of bone -L98499 Non-pressure chronic ulcer of skin of other sites with unspecified severity -L985 Mucinosis of the skin -L986 Other infiltrative disorders of the skin and subcutaneous tissue -L988 Other specified disorders of the skin and subcutaneous tissue -L989 Disorder of the skin and subcutaneous tissue, unspecified -L99 Other disorders of skin and subcutaneous tissue in diseases classified elsewhere -M0000 Staphylococcal arthritis, unspecified joint -M00011 Staphylococcal arthritis, right shoulder -M00012 Staphylococcal arthritis, left shoulder -M00019 Staphylococcal arthritis, unspecified shoulder -M00021 Staphylococcal arthritis, right elbow -M00022 Staphylococcal arthritis, left elbow -M00029 Staphylococcal arthritis, unspecified elbow -M00031 Staphylococcal arthritis, right wrist -M00032 Staphylococcal arthritis, left wrist -M00039 Staphylococcal arthritis, unspecified wrist -M00041 Staphylococcal arthritis, right hand -M00042 Staphylococcal arthritis, left hand -M00049 Staphylococcal arthritis, unspecified hand -M00051 Staphylococcal arthritis, right hip -M00052 Staphylococcal arthritis, left hip -M00059 Staphylococcal arthritis, unspecified hip -M00061 Staphylococcal arthritis, right knee -M00062 Staphylococcal arthritis, left knee -M00069 Staphylococcal arthritis, unspecified knee -M00071 Staphylococcal arthritis, right ankle and foot -M00072 Staphylococcal arthritis, left ankle and foot -M00079 Staphylococcal arthritis, unspecified ankle and foot -M0008 Staphylococcal arthritis, vertebrae -M0009 Staphylococcal polyarthritis -M0010 Pneumococcal arthritis, unspecified joint -M00111 Pneumococcal arthritis, right shoulder -M00112 Pneumococcal arthritis, left shoulder -M00119 Pneumococcal arthritis, unspecified shoulder -M00121 Pneumococcal arthritis, right elbow -M00122 Pneumococcal arthritis, left elbow -M00129 Pneumococcal arthritis, unspecified elbow -M00131 Pneumococcal arthritis, right wrist -M00132 Pneumococcal arthritis, left wrist -M00139 Pneumococcal arthritis, unspecified wrist -M00141 Pneumococcal arthritis, right hand -M00142 Pneumococcal arthritis, left hand -M00149 Pneumococcal arthritis, unspecified hand -M00151 Pneumococcal arthritis, right hip -M00152 Pneumococcal arthritis, left hip -M00159 Pneumococcal arthritis, unspecified hip -M00161 Pneumococcal arthritis, right knee -M00162 Pneumococcal arthritis, left knee -M00169 Pneumococcal arthritis, unspecified knee -M00171 Pneumococcal arthritis, right ankle and foot -M00172 Pneumococcal arthritis, left ankle and foot -M00179 Pneumococcal arthritis, unspecified ankle and foot -M0018 Pneumococcal arthritis, vertebrae -M0019 Pneumococcal polyarthritis -M0020 Other streptococcal arthritis, unspecified joint -M00211 Other streptococcal arthritis, right shoulder -M00212 Other streptococcal arthritis, left shoulder -M00219 Other streptococcal arthritis, unspecified shoulder -M00221 Other streptococcal arthritis, right elbow -M00222 Other streptococcal arthritis, left elbow -M00229 Other streptococcal arthritis, unspecified elbow -M00231 Other streptococcal arthritis, right wrist -M00232 Other streptococcal arthritis, left wrist -M00239 Other streptococcal arthritis, unspecified wrist -M00241 Other streptococcal arthritis, right hand -M00242 Other streptococcal arthritis, left hand -M00249 Other streptococcal arthritis, unspecified hand -M00251 Other streptococcal arthritis, right hip -M00252 Other streptococcal arthritis, left hip -M00259 Other streptococcal arthritis, unspecified hip -M00261 Other streptococcal arthritis, right knee -M00262 Other streptococcal arthritis, left knee -M00269 Other streptococcal arthritis, unspecified knee -M00271 Other streptococcal arthritis, right ankle and foot -M00272 Other streptococcal arthritis, left ankle and foot -M00279 Other streptococcal arthritis, unspecified ankle and foot -M0028 Other streptococcal arthritis, vertebrae -M0029 Other streptococcal polyarthritis -M0080 Arthritis due to other bacteria, unspecified joint -M00811 Arthritis due to other bacteria, right shoulder -M00812 Arthritis due to other bacteria, left shoulder -M00819 Arthritis due to other bacteria, unspecified shoulder -M00821 Arthritis due to other bacteria, right elbow -M00822 Arthritis due to other bacteria, left elbow -M00829 Arthritis due to other bacteria, unspecified elbow -M00831 Arthritis due to other bacteria, right wrist -M00832 Arthritis due to other bacteria, left wrist -M00839 Arthritis due to other bacteria, unspecified wrist -M00841 Arthritis due to other bacteria, right hand -M00842 Arthritis due to other bacteria, left hand -M00849 Arthritis due to other bacteria, unspecified hand -M00851 Arthritis due to other bacteria, right hip -M00852 Arthritis due to other bacteria, left hip -M00859 Arthritis due to other bacteria, unspecified hip -M00861 Arthritis due to other bacteria, right knee -M00862 Arthritis due to other bacteria, left knee -M00869 Arthritis due to other bacteria, unspecified knee -M00871 Arthritis due to other bacteria, right ankle and foot -M00872 Arthritis due to other bacteria, left ankle and foot -M00879 Arthritis due to other bacteria, unspecified ankle and foot -M0088 Arthritis due to other bacteria, vertebrae -M0089 Polyarthritis due to other bacteria -M009 Pyogenic arthritis, unspecified -M01X0 Direct infection of unspecified joint in infectious and parasitic diseases classified elsewhere -M01X11 Direct infection of right shoulder in infectious and parasitic diseases classified elsewhere -M01X12 Direct infection of left shoulder in infectious and parasitic diseases classified elsewhere -M01X19 Direct infection of unspecified shoulder in infectious and parasitic diseases classified elsewhere -M01X21 Direct infection of right elbow in infectious and parasitic diseases classified elsewhere -M01X22 Direct infection of left elbow in infectious and parasitic diseases classified elsewhere -M01X29 Direct infection of unspecified elbow in infectious and parasitic diseases classified elsewhere -M01X31 Direct infection of right wrist in infectious and parasitic diseases classified elsewhere -M01X32 Direct infection of left wrist in infectious and parasitic diseases classified elsewhere -M01X39 Direct infection of unspecified wrist in infectious and parasitic diseases classified elsewhere -M01X41 Direct infection of right hand in infectious and parasitic diseases classified elsewhere -M01X42 Direct infection of left hand in infectious and parasitic diseases classified elsewhere -M01X49 Direct infection of unspecified hand in infectious and parasitic diseases classified elsewhere -M01X51 Direct infection of right hip in infectious and parasitic diseases classified elsewhere -M01X52 Direct infection of left hip in infectious and parasitic diseases classified elsewhere -M01X59 Direct infection of unspecified hip in infectious and parasitic diseases classified elsewhere -M01X61 Direct infection of right knee in infectious and parasitic diseases classified elsewhere -M01X62 Direct infection of left knee in infectious and parasitic diseases classified elsewhere -M01X69 Direct infection of unspecified knee in infectious and parasitic diseases classified elsewhere -M01X71 Direct infection of right ankle and foot in infectious and parasitic diseases classified elsewhere -M01X72 Direct infection of left ankle and foot in infectious and parasitic diseases classified elsewhere -M01X79 Direct infection of unspecified ankle and foot in infectious and parasitic diseases classified elsewhere -M01X8 Direct infection of vertebrae in infectious and parasitic diseases classified elsewhere -M01X9 Direct infection of multiple joints in infectious and parasitic diseases classified elsewhere -M0200 Arthropathy following intestinal bypass, unspecified site -M02011 Arthropathy following intestinal bypass, right shoulder -M02012 Arthropathy following intestinal bypass, left shoulder -M02019 Arthropathy following intestinal bypass, unspecified shoulder -M02021 Arthropathy following intestinal bypass, right elbow -M02022 Arthropathy following intestinal bypass, left elbow -M02029 Arthropathy following intestinal bypass, unspecified elbow -M02031 Arthropathy following intestinal bypass, right wrist -M02032 Arthropathy following intestinal bypass, left wrist -M02039 Arthropathy following intestinal bypass, unspecified wrist -M02041 Arthropathy following intestinal bypass, right hand -M02042 Arthropathy following intestinal bypass, left hand -M02049 Arthropathy following intestinal bypass, unspecified hand -M02051 Arthropathy following intestinal bypass, right hip -M02052 Arthropathy following intestinal bypass, left hip -M02059 Arthropathy following intestinal bypass, unspecified hip -M02061 Arthropathy following intestinal bypass, right knee -M02062 Arthropathy following intestinal bypass, left knee -M02069 Arthropathy following intestinal bypass, unspecified knee -M02071 Arthropathy following intestinal bypass, right ankle and foot -M02072 Arthropathy following intestinal bypass, left ankle and foot -M02079 Arthropathy following intestinal bypass, unspecified ankle and foot -M0208 Arthropathy following intestinal bypass, vertebrae -M0209 Arthropathy following intestinal bypass, multiple sites -M0210 Postdysenteric arthropathy, unspecified site -M02111 Postdysenteric arthropathy, right shoulder -M02112 Postdysenteric arthropathy, left shoulder -M02119 Postdysenteric arthropathy, unspecified shoulder -M02121 Postdysenteric arthropathy, right elbow -M02122 Postdysenteric arthropathy, left elbow -M02129 Postdysenteric arthropathy, unspecified elbow -M02131 Postdysenteric arthropathy, right wrist -M02132 Postdysenteric arthropathy, left wrist -M02139 Postdysenteric arthropathy, unspecified wrist -M02141 Postdysenteric arthropathy, right hand -M02142 Postdysenteric arthropathy, left hand -M02149 Postdysenteric arthropathy, unspecified hand -M02151 Postdysenteric arthropathy, right hip -M02152 Postdysenteric arthropathy, left hip -M02159 Postdysenteric arthropathy, unspecified hip -M02161 Postdysenteric arthropathy, right knee -M02162 Postdysenteric arthropathy, left knee -M02169 Postdysenteric arthropathy, unspecified knee -M02171 Postdysenteric arthropathy, right ankle and foot -M02172 Postdysenteric arthropathy, left ankle and foot -M02179 Postdysenteric arthropathy, unspecified ankle and foot -M0218 Postdysenteric arthropathy, vertebrae -M0219 Postdysenteric arthropathy, multiple sites -M0220 Postimmunization arthropathy, unspecified site -M02211 Postimmunization arthropathy, right shoulder -M02212 Postimmunization arthropathy, left shoulder -M02219 Postimmunization arthropathy, unspecified shoulder -M02221 Postimmunization arthropathy, right elbow -M02222 Postimmunization arthropathy, left elbow -M02229 Postimmunization arthropathy, unspecified elbow -M02231 Postimmunization arthropathy, right wrist -M02232 Postimmunization arthropathy, left wrist -M02239 Postimmunization arthropathy, unspecified wrist -M02241 Postimmunization arthropathy, right hand -M02242 Postimmunization arthropathy, left hand -M02249 Postimmunization arthropathy, unspecified hand -M02251 Postimmunization arthropathy, right hip -M02252 Postimmunization arthropathy, left hip -M02259 Postimmunization arthropathy, unspecified hip -M02261 Postimmunization arthropathy, right knee -M02262 Postimmunization arthropathy, left knee -M02269 Postimmunization arthropathy, unspecified knee -M02271 Postimmunization arthropathy, right ankle and foot -M02272 Postimmunization arthropathy, left ankle and foot -M02279 Postimmunization arthropathy, unspecified ankle and foot -M0228 Postimmunization arthropathy, vertebrae -M0229 Postimmunization arthropathy, multiple sites -M0230 Reiter's disease, unspecified site -M02311 Reiter's disease, right shoulder -M02312 Reiter's disease, left shoulder -M02319 Reiter's disease, unspecified shoulder -M02321 Reiter's disease, right elbow -M02322 Reiter's disease, left elbow -M02329 Reiter's disease, unspecified elbow -M02331 Reiter's disease, right wrist -M02332 Reiter's disease, left wrist -M02339 Reiter's disease, unspecified wrist -M02341 Reiter's disease, right hand -M02342 Reiter's disease, left hand -M02349 Reiter's disease, unspecified hand -M02351 Reiter's disease, right hip -M02352 Reiter's disease, left hip -M02359 Reiter's disease, unspecified hip -M02361 Reiter's disease, right knee -M02362 Reiter's disease, left knee -M02369 Reiter's disease, unspecified knee -M02371 Reiter's disease, right ankle and foot -M02372 Reiter's disease, left ankle and foot -M02379 Reiter's disease, unspecified ankle and foot -M0238 Reiter's disease, vertebrae -M0239 Reiter's disease, multiple sites -M0280 Other reactive arthropathies, unspecified site -M02811 Other reactive arthropathies, right shoulder -M02812 Other reactive arthropathies, left shoulder -M02819 Other reactive arthropathies, unspecified shoulder -M02821 Other reactive arthropathies, right elbow -M02822 Other reactive arthropathies, left elbow -M02829 Other reactive arthropathies, unspecified elbow -M02831 Other reactive arthropathies, right wrist -M02832 Other reactive arthropathies, left wrist -M02839 Other reactive arthropathies, unspecified wrist -M02841 Other reactive arthropathies, right hand -M02842 Other reactive arthropathies, left hand -M02849 Other reactive arthropathies, unspecified hand -M02851 Other reactive arthropathies, right hip -M02852 Other reactive arthropathies, left hip -M02859 Other reactive arthropathies, unspecified hip -M02861 Other reactive arthropathies, right knee -M02862 Other reactive arthropathies, left knee -M02869 Other reactive arthropathies, unspecified knee -M02871 Other reactive arthropathies, right ankle and foot -M02872 Other reactive arthropathies, left ankle and foot -M02879 Other reactive arthropathies, unspecified ankle and foot -M0288 Other reactive arthropathies, vertebrae -M0289 Other reactive arthropathies, multiple sites -M029 Reactive arthropathy, unspecified -M0500 Felty's syndrome, unspecified site -M05011 Felty's syndrome, right shoulder -M05012 Felty's syndrome, left shoulder -M05019 Felty's syndrome, unspecified shoulder -M05021 Felty's syndrome, right elbow -M05022 Felty's syndrome, left elbow -M05029 Felty's syndrome, unspecified elbow -M05031 Felty's syndrome, right wrist -M05032 Felty's syndrome, left wrist -M05039 Felty's syndrome, unspecified wrist -M05041 Felty's syndrome, right hand -M05042 Felty's syndrome, left hand -M05049 Felty's syndrome, unspecified hand -M05051 Felty's syndrome, right hip -M05052 Felty's syndrome, left hip -M05059 Felty's syndrome, unspecified hip -M05061 Felty's syndrome, right knee -M05062 Felty's syndrome, left knee -M05069 Felty's syndrome, unspecified knee -M05071 Felty's syndrome, right ankle and foot -M05072 Felty's syndrome, left ankle and foot -M05079 Felty's syndrome, unspecified ankle and foot -M0509 Felty's syndrome, multiple sites -M0510 Rheumatoid lung disease with rheumatoid arthritis of unspecified site -M05111 Rheumatoid lung disease with rheumatoid arthritis of right shoulder -M05112 Rheumatoid lung disease with rheumatoid arthritis of left shoulder -M05119 Rheumatoid lung disease with rheumatoid arthritis of unspecified shoulder -M05121 Rheumatoid lung disease with rheumatoid arthritis of right elbow -M05122 Rheumatoid lung disease with rheumatoid arthritis of left elbow -M05129 Rheumatoid lung disease with rheumatoid arthritis of unspecified elbow -M05131 Rheumatoid lung disease with rheumatoid arthritis of right wrist -M05132 Rheumatoid lung disease with rheumatoid arthritis of left wrist -M05139 Rheumatoid lung disease with rheumatoid arthritis of unspecified wrist -M05141 Rheumatoid lung disease with rheumatoid arthritis of right hand -M05142 Rheumatoid lung disease with rheumatoid arthritis of left hand -M05149 Rheumatoid lung disease with rheumatoid arthritis of unspecified hand -M05151 Rheumatoid lung disease with rheumatoid arthritis of right hip -M05152 Rheumatoid lung disease with rheumatoid arthritis of left hip -M05159 Rheumatoid lung disease with rheumatoid arthritis of unspecified hip -M05161 Rheumatoid lung disease with rheumatoid arthritis of right knee -M05162 Rheumatoid lung disease with rheumatoid arthritis of left knee -M05169 Rheumatoid lung disease with rheumatoid arthritis of unspecified knee -M05171 Rheumatoid lung disease with rheumatoid arthritis of right ankle and foot -M05172 Rheumatoid lung disease with rheumatoid arthritis of left ankle and foot -M05179 Rheumatoid lung disease with rheumatoid arthritis of unspecified ankle and foot -M0519 Rheumatoid lung disease with rheumatoid arthritis of multiple sites -M0520 Rheumatoid vasculitis with rheumatoid arthritis of unspecified site -M05211 Rheumatoid vasculitis with rheumatoid arthritis of right shoulder -M05212 Rheumatoid vasculitis with rheumatoid arthritis of left shoulder -M05219 Rheumatoid vasculitis with rheumatoid arthritis of unspecified shoulder -M05221 Rheumatoid vasculitis with rheumatoid arthritis of right elbow -M05222 Rheumatoid vasculitis with rheumatoid arthritis of left elbow -M05229 Rheumatoid vasculitis with rheumatoid arthritis of unspecified elbow -M05231 Rheumatoid vasculitis with rheumatoid arthritis of right wrist -M05232 Rheumatoid vasculitis with rheumatoid arthritis of left wrist -M05239 Rheumatoid vasculitis with rheumatoid arthritis of unspecified wrist -M05241 Rheumatoid vasculitis with rheumatoid arthritis of right hand -M05242 Rheumatoid vasculitis with rheumatoid arthritis of left hand -M05249 Rheumatoid vasculitis with rheumatoid arthritis of unspecified hand -M05251 Rheumatoid vasculitis with rheumatoid arthritis of right hip -M05252 Rheumatoid vasculitis with rheumatoid arthritis of left hip -M05259 Rheumatoid vasculitis with rheumatoid arthritis of unspecified hip -M05261 Rheumatoid vasculitis with rheumatoid arthritis of right knee -M05262 Rheumatoid vasculitis with rheumatoid arthritis of left knee -M05269 Rheumatoid vasculitis with rheumatoid arthritis of unspecified knee -M05271 Rheumatoid vasculitis with rheumatoid arthritis of right ankle and foot -M05272 Rheumatoid vasculitis with rheumatoid arthritis of left ankle and foot -M05279 Rheumatoid vasculitis with rheumatoid arthritis of unspecified ankle and foot -M0529 Rheumatoid vasculitis with rheumatoid arthritis of multiple sites -M0530 Rheumatoid heart disease with rheumatoid arthritis of unspecified site -M05311 Rheumatoid heart disease with rheumatoid arthritis of right shoulder -M05312 Rheumatoid heart disease with rheumatoid arthritis of left shoulder -M05319 Rheumatoid heart disease with rheumatoid arthritis of unspecified shoulder -M05321 Rheumatoid heart disease with rheumatoid arthritis of right elbow -M05322 Rheumatoid heart disease with rheumatoid arthritis of left elbow -M05329 Rheumatoid heart disease with rheumatoid arthritis of unspecified elbow -M05331 Rheumatoid heart disease with rheumatoid arthritis of right wrist -M05332 Rheumatoid heart disease with rheumatoid arthritis of left wrist -M05339 Rheumatoid heart disease with rheumatoid arthritis of unspecified wrist -M05341 Rheumatoid heart disease with rheumatoid arthritis of right hand -M05342 Rheumatoid heart disease with rheumatoid arthritis of left hand -M05349 Rheumatoid heart disease with rheumatoid arthritis of unspecified hand -M05351 Rheumatoid heart disease with rheumatoid arthritis of right hip -M05352 Rheumatoid heart disease with rheumatoid arthritis of left hip -M05359 Rheumatoid heart disease with rheumatoid arthritis of unspecified hip -M05361 Rheumatoid heart disease with rheumatoid arthritis of right knee -M05362 Rheumatoid heart disease with rheumatoid arthritis of left knee -M05369 Rheumatoid heart disease with rheumatoid arthritis of unspecified knee -M05371 Rheumatoid heart disease with rheumatoid arthritis of right ankle and foot -M05372 Rheumatoid heart disease with rheumatoid arthritis of left ankle and foot -M05379 Rheumatoid heart disease with rheumatoid arthritis of unspecified ankle and foot -M0539 Rheumatoid heart disease with rheumatoid arthritis of multiple sites -M0540 Rheumatoid myopathy with rheumatoid arthritis of unspecified site -M05411 Rheumatoid myopathy with rheumatoid arthritis of right shoulder -M05412 Rheumatoid myopathy with rheumatoid arthritis of left shoulder -M05419 Rheumatoid myopathy with rheumatoid arthritis of unspecified shoulder -M05421 Rheumatoid myopathy with rheumatoid arthritis of right elbow -M05422 Rheumatoid myopathy with rheumatoid arthritis of left elbow -M05429 Rheumatoid myopathy with rheumatoid arthritis of unspecified elbow -M05431 Rheumatoid myopathy with rheumatoid arthritis of right wrist -M05432 Rheumatoid myopathy with rheumatoid arthritis of left wrist -M05439 Rheumatoid myopathy with rheumatoid arthritis of unspecified wrist -M05441 Rheumatoid myopathy with rheumatoid arthritis of right hand -M05442 Rheumatoid myopathy with rheumatoid arthritis of left hand -M05449 Rheumatoid myopathy with rheumatoid arthritis of unspecified hand -M05451 Rheumatoid myopathy with rheumatoid arthritis of right hip -M05452 Rheumatoid myopathy with rheumatoid arthritis of left hip -M05459 Rheumatoid myopathy with rheumatoid arthritis of unspecified hip -M05461 Rheumatoid myopathy with rheumatoid arthritis of right knee -M05462 Rheumatoid myopathy with rheumatoid arthritis of left knee -M05469 Rheumatoid myopathy with rheumatoid arthritis of unspecified knee -M05471 Rheumatoid myopathy with rheumatoid arthritis of right ankle and foot -M05472 Rheumatoid myopathy with rheumatoid arthritis of left ankle and foot -M05479 Rheumatoid myopathy with rheumatoid arthritis of unspecified ankle and foot -M0549 Rheumatoid myopathy with rheumatoid arthritis of multiple sites -M0550 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified site -M05511 Rheumatoid polyneuropathy with rheumatoid arthritis of right shoulder -M05512 Rheumatoid polyneuropathy with rheumatoid arthritis of left shoulder -M05519 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified shoulder -M05521 Rheumatoid polyneuropathy with rheumatoid arthritis of right elbow -M05522 Rheumatoid polyneuropathy with rheumatoid arthritis of left elbow -M05529 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified elbow -M05531 Rheumatoid polyneuropathy with rheumatoid arthritis of right wrist -M05532 Rheumatoid polyneuropathy with rheumatoid arthritis of left wrist -M05539 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified wrist -M05541 Rheumatoid polyneuropathy with rheumatoid arthritis of right hand -M05542 Rheumatoid polyneuropathy with rheumatoid arthritis of left hand -M05549 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified hand -M05551 Rheumatoid polyneuropathy with rheumatoid arthritis of right hip -M05552 Rheumatoid polyneuropathy with rheumatoid arthritis of left hip -M05559 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified hip -M05561 Rheumatoid polyneuropathy with rheumatoid arthritis of right knee -M05562 Rheumatoid polyneuropathy with rheumatoid arthritis of left knee -M05569 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified knee -M05571 Rheumatoid polyneuropathy with rheumatoid arthritis of right ankle and foot -M05572 Rheumatoid polyneuropathy with rheumatoid arthritis of left ankle and foot -M05579 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified ankle and foot -M0559 Rheumatoid polyneuropathy with rheumatoid arthritis of multiple sites -M0560 Rheumatoid arthritis of unspecified site with involvement of other organs and systems -M05611 Rheumatoid arthritis of right shoulder with involvement of other organs and systems -M05612 Rheumatoid arthritis of left shoulder with involvement of other organs and systems -M05619 Rheumatoid arthritis of unspecified shoulder with involvement of other organs and systems -M05621 Rheumatoid arthritis of right elbow with involvement of other organs and systems -M05622 Rheumatoid arthritis of left elbow with involvement of other organs and systems -M05629 Rheumatoid arthritis of unspecified elbow with involvement of other organs and systems -M05631 Rheumatoid arthritis of right wrist with involvement of other organs and systems -M05632 Rheumatoid arthritis of left wrist with involvement of other organs and systems -M05639 Rheumatoid arthritis of unspecified wrist with involvement of other organs and systems -M05641 Rheumatoid arthritis of right hand with involvement of other organs and systems -M05642 Rheumatoid arthritis of left hand with involvement of other organs and systems -M05649 Rheumatoid arthritis of unspecified hand with involvement of other organs and systems -M05651 Rheumatoid arthritis of right hip with involvement of other organs and systems -M05652 Rheumatoid arthritis of left hip with involvement of other organs and systems -M05659 Rheumatoid arthritis of unspecified hip with involvement of other organs and systems -M05661 Rheumatoid arthritis of right knee with involvement of other organs and systems -M05662 Rheumatoid arthritis of left knee with involvement of other organs and systems -M05669 Rheumatoid arthritis of unspecified knee with involvement of other organs and systems -M05671 Rheumatoid arthritis of right ankle and foot with involvement of other organs and systems -M05672 Rheumatoid arthritis of left ankle and foot with involvement of other organs and systems -M05679 Rheumatoid arthritis of unspecified ankle and foot with involvement of other organs and systems -M0569 Rheumatoid arthritis of multiple sites with involvement of other organs and systems -M0570 Rheumatoid arthritis with rheumatoid factor of unspecified site without organ or systems involvement -M05711 Rheumatoid arthritis with rheumatoid factor of right shoulder without organ or systems involvement -M05712 Rheumatoid arthritis with rheumatoid factor of left shoulder without organ or systems involvement -M05719 Rheumatoid arthritis with rheumatoid factor of unspecified shoulder without organ or systems involvement -M05721 Rheumatoid arthritis with rheumatoid factor of right elbow without organ or systems involvement -M05722 Rheumatoid arthritis with rheumatoid factor of left elbow without organ or systems involvement -M05729 Rheumatoid arthritis with rheumatoid factor of unspecified elbow without organ or systems involvement -M05731 Rheumatoid arthritis with rheumatoid factor of right wrist without organ or systems involvement -M05732 Rheumatoid arthritis with rheumatoid factor of left wrist without organ or systems involvement -M05739 Rheumatoid arthritis with rheumatoid factor of unspecified wrist without organ or systems involvement -M05741 Rheumatoid arthritis with rheumatoid factor of right hand without organ or systems involvement -M05742 Rheumatoid arthritis with rheumatoid factor of left hand without organ or systems involvement -M05749 Rheumatoid arthritis with rheumatoid factor of unspecified hand without organ or systems involvement -M05751 Rheumatoid arthritis with rheumatoid factor of right hip without organ or systems involvement -M05752 Rheumatoid arthritis with rheumatoid factor of left hip without organ or systems involvement -M05759 Rheumatoid arthritis with rheumatoid factor of unspecified hip without organ or systems involvement -M05761 Rheumatoid arthritis with rheumatoid factor of right knee without organ or systems involvement -M05762 Rheumatoid arthritis with rheumatoid factor of left knee without organ or systems involvement -M05769 Rheumatoid arthritis with rheumatoid factor of unspecified knee without organ or systems involvement -M05771 Rheumatoid arthritis with rheumatoid factor of right ankle and foot without organ or systems involvement -M05772 Rheumatoid arthritis with rheumatoid factor of left ankle and foot without organ or systems involvement -M05779 Rheumatoid arthritis with rheumatoid factor of unspecified ankle and foot without organ or systems involvement -M0579 Rheumatoid arthritis with rheumatoid factor of multiple sites without organ or systems involvement -M0580 Other rheumatoid arthritis with rheumatoid factor of unspecified site -M05811 Other rheumatoid arthritis with rheumatoid factor of right shoulder -M05812 Other rheumatoid arthritis with rheumatoid factor of left shoulder -M05819 Other rheumatoid arthritis with rheumatoid factor of unspecified shoulder -M05821 Other rheumatoid arthritis with rheumatoid factor of right elbow -M05822 Other rheumatoid arthritis with rheumatoid factor of left elbow -M05829 Other rheumatoid arthritis with rheumatoid factor of unspecified elbow -M05831 Other rheumatoid arthritis with rheumatoid factor of right wrist -M05832 Other rheumatoid arthritis with rheumatoid factor of left wrist -M05839 Other rheumatoid arthritis with rheumatoid factor of unspecified wrist -M05841 Other rheumatoid arthritis with rheumatoid factor of right hand -M05842 Other rheumatoid arthritis with rheumatoid factor of left hand -M05849 Other rheumatoid arthritis with rheumatoid factor of unspecified hand -M05851 Other rheumatoid arthritis with rheumatoid factor of right hip -M05852 Other rheumatoid arthritis with rheumatoid factor of left hip -M05859 Other rheumatoid arthritis with rheumatoid factor of unspecified hip -M05861 Other rheumatoid arthritis with rheumatoid factor of right knee -M05862 Other rheumatoid arthritis with rheumatoid factor of left knee -M05869 Other rheumatoid arthritis with rheumatoid factor of unspecified knee -M05871 Other rheumatoid arthritis with rheumatoid factor of right ankle and foot -M05872 Other rheumatoid arthritis with rheumatoid factor of left ankle and foot -M05879 Other rheumatoid arthritis with rheumatoid factor of unspecified ankle and foot -M0589 Other rheumatoid arthritis with rheumatoid factor of multiple sites -M059 Rheumatoid arthritis with rheumatoid factor, unspecified -M0600 Rheumatoid arthritis without rheumatoid factor, unspecified site -M06011 Rheumatoid arthritis without rheumatoid factor, right shoulder -M06012 Rheumatoid arthritis without rheumatoid factor, left shoulder -M06019 Rheumatoid arthritis without rheumatoid factor, unspecified shoulder -M06021 Rheumatoid arthritis without rheumatoid factor, right elbow -M06022 Rheumatoid arthritis without rheumatoid factor, left elbow -M06029 Rheumatoid arthritis without rheumatoid factor, unspecified elbow -M06031 Rheumatoid arthritis without rheumatoid factor, right wrist -M06032 Rheumatoid arthritis without rheumatoid factor, left wrist -M06039 Rheumatoid arthritis without rheumatoid factor, unspecified wrist -M06041 Rheumatoid arthritis without rheumatoid factor, right hand -M06042 Rheumatoid arthritis without rheumatoid factor, left hand -M06049 Rheumatoid arthritis without rheumatoid factor, unspecified hand -M06051 Rheumatoid arthritis without rheumatoid factor, right hip -M06052 Rheumatoid arthritis without rheumatoid factor, left hip -M06059 Rheumatoid arthritis without rheumatoid factor, unspecified hip -M06061 Rheumatoid arthritis without rheumatoid factor, right knee -M06062 Rheumatoid arthritis without rheumatoid factor, left knee -M06069 Rheumatoid arthritis without rheumatoid factor, unspecified knee -M06071 Rheumatoid arthritis without rheumatoid factor, right ankle and foot -M06072 Rheumatoid arthritis without rheumatoid factor, left ankle and foot -M06079 Rheumatoid arthritis without rheumatoid factor, unspecified ankle and foot -M0608 Rheumatoid arthritis without rheumatoid factor, vertebrae -M0609 Rheumatoid arthritis without rheumatoid factor, multiple sites -M061 Adult-onset Still's disease -M0620 Rheumatoid bursitis, unspecified site -M06211 Rheumatoid bursitis, right shoulder -M06212 Rheumatoid bursitis, left shoulder -M06219 Rheumatoid bursitis, unspecified shoulder -M06221 Rheumatoid bursitis, right elbow -M06222 Rheumatoid bursitis, left elbow -M06229 Rheumatoid bursitis, unspecified elbow -M06231 Rheumatoid bursitis, right wrist -M06232 Rheumatoid bursitis, left wrist -M06239 Rheumatoid bursitis, unspecified wrist -M06241 Rheumatoid bursitis, right hand -M06242 Rheumatoid bursitis, left hand -M06249 Rheumatoid bursitis, unspecified hand -M06251 Rheumatoid bursitis, right hip -M06252 Rheumatoid bursitis, left hip -M06259 Rheumatoid bursitis, unspecified hip -M06261 Rheumatoid bursitis, right knee -M06262 Rheumatoid bursitis, left knee -M06269 Rheumatoid bursitis, unspecified knee -M06271 Rheumatoid bursitis, right ankle and foot -M06272 Rheumatoid bursitis, left ankle and foot -M06279 Rheumatoid bursitis, unspecified ankle and foot -M0628 Rheumatoid bursitis, vertebrae -M0629 Rheumatoid bursitis, multiple sites -M0630 Rheumatoid nodule, unspecified site -M06311 Rheumatoid nodule, right shoulder -M06312 Rheumatoid nodule, left shoulder -M06319 Rheumatoid nodule, unspecified shoulder -M06321 Rheumatoid nodule, right elbow -M06322 Rheumatoid nodule, left elbow -M06329 Rheumatoid nodule, unspecified elbow -M06331 Rheumatoid nodule, right wrist -M06332 Rheumatoid nodule, left wrist -M06339 Rheumatoid nodule, unspecified wrist -M06341 Rheumatoid nodule, right hand -M06342 Rheumatoid nodule, left hand -M06349 Rheumatoid nodule, unspecified hand -M06351 Rheumatoid nodule, right hip -M06352 Rheumatoid nodule, left hip -M06359 Rheumatoid nodule, unspecified hip -M06361 Rheumatoid nodule, right knee -M06362 Rheumatoid nodule, left knee -M06369 Rheumatoid nodule, unspecified knee -M06371 Rheumatoid nodule, right ankle and foot -M06372 Rheumatoid nodule, left ankle and foot -M06379 Rheumatoid nodule, unspecified ankle and foot -M0638 Rheumatoid nodule, vertebrae -M0639 Rheumatoid nodule, multiple sites -M064 Inflammatory polyarthropathy -M0680 Other specified rheumatoid arthritis, unspecified site -M06811 Other specified rheumatoid arthritis, right shoulder -M06812 Other specified rheumatoid arthritis, left shoulder -M06819 Other specified rheumatoid arthritis, unspecified shoulder -M06821 Other specified rheumatoid arthritis, right elbow -M06822 Other specified rheumatoid arthritis, left elbow -M06829 Other specified rheumatoid arthritis, unspecified elbow -M06831 Other specified rheumatoid arthritis, right wrist -M06832 Other specified rheumatoid arthritis, left wrist -M06839 Other specified rheumatoid arthritis, unspecified wrist -M06841 Other specified rheumatoid arthritis, right hand -M06842 Other specified rheumatoid arthritis, left hand -M06849 Other specified rheumatoid arthritis, unspecified hand -M06851 Other specified rheumatoid arthritis, right hip -M06852 Other specified rheumatoid arthritis, left hip -M06859 Other specified rheumatoid arthritis, unspecified hip -M06861 Other specified rheumatoid arthritis, right knee -M06862 Other specified rheumatoid arthritis, left knee -M06869 Other specified rheumatoid arthritis, unspecified knee -M06871 Other specified rheumatoid arthritis, right ankle and foot -M06872 Other specified rheumatoid arthritis, left ankle and foot -M06879 Other specified rheumatoid arthritis, unspecified ankle and foot -M0688 Other specified rheumatoid arthritis, vertebrae -M0689 Other specified rheumatoid arthritis, multiple sites -M069 Rheumatoid arthritis, unspecified -M0760 Enteropathic arthropathies, unspecified site -M07611 Enteropathic arthropathies, right shoulder -M07612 Enteropathic arthropathies, left shoulder -M07619 Enteropathic arthropathies, unspecified shoulder -M07621 Enteropathic arthropathies, right elbow -M07622 Enteropathic arthropathies, left elbow -M07629 Enteropathic arthropathies, unspecified elbow -M07631 Enteropathic arthropathies, right wrist -M07632 Enteropathic arthropathies, left wrist -M07639 Enteropathic arthropathies, unspecified wrist -M07641 Enteropathic arthropathies, right hand -M07642 Enteropathic arthropathies, left hand -M07649 Enteropathic arthropathies, unspecified hand -M07651 Enteropathic arthropathies, right hip -M07652 Enteropathic arthropathies, left hip -M07659 Enteropathic arthropathies, unspecified hip -M07661 Enteropathic arthropathies, right knee -M07662 Enteropathic arthropathies, left knee -M07669 Enteropathic arthropathies, unspecified knee -M07671 Enteropathic arthropathies, right ankle and foot -M07672 Enteropathic arthropathies, left ankle and foot -M07679 Enteropathic arthropathies, unspecified ankle and foot -M0768 Enteropathic arthropathies, vertebrae -M0769 Enteropathic arthropathies, multiple sites -M0800 Unspecified juvenile rheumatoid arthritis of unspecified site -M08011 Unspecified juvenile rheumatoid arthritis, right shoulder -M08012 Unspecified juvenile rheumatoid arthritis, left shoulder -M08019 Unspecified juvenile rheumatoid arthritis, unspecified shoulder -M08021 Unspecified juvenile rheumatoid arthritis, right elbow -M08022 Unspecified juvenile rheumatoid arthritis, left elbow -M08029 Unspecified juvenile rheumatoid arthritis, unspecified elbow -M08031 Unspecified juvenile rheumatoid arthritis, right wrist -M08032 Unspecified juvenile rheumatoid arthritis, left wrist -M08039 Unspecified juvenile rheumatoid arthritis, unspecified wrist -M08041 Unspecified juvenile rheumatoid arthritis, right hand -M08042 Unspecified juvenile rheumatoid arthritis, left hand -M08049 Unspecified juvenile rheumatoid arthritis, unspecified hand -M08051 Unspecified juvenile rheumatoid arthritis, right hip -M08052 Unspecified juvenile rheumatoid arthritis, left hip -M08059 Unspecified juvenile rheumatoid arthritis, unspecified hip -M08061 Unspecified juvenile rheumatoid arthritis, right knee -M08062 Unspecified juvenile rheumatoid arthritis, left knee -M08069 Unspecified juvenile rheumatoid arthritis, unspecified knee -M08071 Unspecified juvenile rheumatoid arthritis, right ankle and foot -M08072 Unspecified juvenile rheumatoid arthritis, left ankle and foot -M08079 Unspecified juvenile rheumatoid arthritis, unspecified ankle and foot -M0808 Unspecified juvenile rheumatoid arthritis, vertebrae -M0809 Unspecified juvenile rheumatoid arthritis, multiple sites -M081 Juvenile ankylosing spondylitis -M0820 Juvenile rheumatoid arthritis with systemic onset, unspecified site -M08211 Juvenile rheumatoid arthritis with systemic onset, right shoulder -M08212 Juvenile rheumatoid arthritis with systemic onset, left shoulder -M08219 Juvenile rheumatoid arthritis with systemic onset, unspecified shoulder -M08221 Juvenile rheumatoid arthritis with systemic onset, right elbow -M08222 Juvenile rheumatoid arthritis with systemic onset, left elbow -M08229 Juvenile rheumatoid arthritis with systemic onset, unspecified elbow -M08231 Juvenile rheumatoid arthritis with systemic onset, right wrist -M08232 Juvenile rheumatoid arthritis with systemic onset, left wrist -M08239 Juvenile rheumatoid arthritis with systemic onset, unspecified wrist -M08241 Juvenile rheumatoid arthritis with systemic onset, right hand -M08242 Juvenile rheumatoid arthritis with systemic onset, left hand -M08249 Juvenile rheumatoid arthritis with systemic onset, unspecified hand -M08251 Juvenile rheumatoid arthritis with systemic onset, right hip -M08252 Juvenile rheumatoid arthritis with systemic onset, left hip -M08259 Juvenile rheumatoid arthritis with systemic onset, unspecified hip -M08261 Juvenile rheumatoid arthritis with systemic onset, right knee -M08262 Juvenile rheumatoid arthritis with systemic onset, left knee -M08269 Juvenile rheumatoid arthritis with systemic onset, unspecified knee -M08271 Juvenile rheumatoid arthritis with systemic onset, right ankle and foot -M08272 Juvenile rheumatoid arthritis with systemic onset, left ankle and foot -M08279 Juvenile rheumatoid arthritis with systemic onset, unspecified ankle and foot -M0828 Juvenile rheumatoid arthritis with systemic onset, vertebrae -M0829 Juvenile rheumatoid arthritis with systemic onset, multiple sites -M083 Juvenile rheumatoid polyarthritis (seronegative) -M0840 Pauciarticular juvenile rheumatoid arthritis, unspecified site -M08411 Pauciarticular juvenile rheumatoid arthritis, right shoulder -M08412 Pauciarticular juvenile rheumatoid arthritis, left shoulder -M08419 Pauciarticular juvenile rheumatoid arthritis, unspecified shoulder -M08421 Pauciarticular juvenile rheumatoid arthritis, right elbow -M08422 Pauciarticular juvenile rheumatoid arthritis, left elbow -M08429 Pauciarticular juvenile rheumatoid arthritis, unspecified elbow -M08431 Pauciarticular juvenile rheumatoid arthritis, right wrist -M08432 Pauciarticular juvenile rheumatoid arthritis, left wrist -M08439 Pauciarticular juvenile rheumatoid arthritis, unspecified wrist -M08441 Pauciarticular juvenile rheumatoid arthritis, right hand -M08442 Pauciarticular juvenile rheumatoid arthritis, left hand -M08449 Pauciarticular juvenile rheumatoid arthritis, unspecified hand -M08451 Pauciarticular juvenile rheumatoid arthritis, right hip -M08452 Pauciarticular juvenile rheumatoid arthritis, left hip -M08459 Pauciarticular juvenile rheumatoid arthritis, unspecified hip -M08461 Pauciarticular juvenile rheumatoid arthritis, right knee -M08462 Pauciarticular juvenile rheumatoid arthritis, left knee -M08469 Pauciarticular juvenile rheumatoid arthritis, unspecified knee -M08471 Pauciarticular juvenile rheumatoid arthritis, right ankle and foot -M08472 Pauciarticular juvenile rheumatoid arthritis, left ankle and foot -M08479 Pauciarticular juvenile rheumatoid arthritis, unspecified ankle and foot -M0848 Pauciarticular juvenile rheumatoid arthritis, vertebrae -M0880 Other juvenile arthritis, unspecified site -M08811 Other juvenile arthritis, right shoulder -M08812 Other juvenile arthritis, left shoulder -M08819 Other juvenile arthritis, unspecified shoulder -M08821 Other juvenile arthritis, right elbow -M08822 Other juvenile arthritis, left elbow -M08829 Other juvenile arthritis, unspecified elbow -M08831 Other juvenile arthritis, right wrist -M08832 Other juvenile arthritis, left wrist -M08839 Other juvenile arthritis, unspecified wrist -M08841 Other juvenile arthritis, right hand -M08842 Other juvenile arthritis, left hand -M08849 Other juvenile arthritis, unspecified hand -M08851 Other juvenile arthritis, right hip -M08852 Other juvenile arthritis, left hip -M08859 Other juvenile arthritis, unspecified hip -M08861 Other juvenile arthritis, right knee -M08862 Other juvenile arthritis, left knee -M08869 Other juvenile arthritis, unspecified knee -M08871 Other juvenile arthritis, right ankle and foot -M08872 Other juvenile arthritis, left ankle and foot -M08879 Other juvenile arthritis, unspecified ankle and foot -M0888 Other juvenile arthritis, other specified site -M0889 Other juvenile arthritis, multiple sites -M0890 Juvenile arthritis, unspecified, unspecified site -M08911 Juvenile arthritis, unspecified, right shoulder -M08912 Juvenile arthritis, unspecified, left shoulder -M08919 Juvenile arthritis, unspecified, unspecified shoulder -M08921 Juvenile arthritis, unspecified, right elbow -M08922 Juvenile arthritis, unspecified, left elbow -M08929 Juvenile arthritis, unspecified, unspecified elbow -M08931 Juvenile arthritis, unspecified, right wrist -M08932 Juvenile arthritis, unspecified, left wrist -M08939 Juvenile arthritis, unspecified, unspecified wrist -M08941 Juvenile arthritis, unspecified, right hand -M08942 Juvenile arthritis, unspecified, left hand -M08949 Juvenile arthritis, unspecified, unspecified hand -M08951 Juvenile arthritis, unspecified, right hip -M08952 Juvenile arthritis, unspecified, left hip -M08959 Juvenile arthritis, unspecified, unspecified hip -M08961 Juvenile arthritis, unspecified, right knee -M08962 Juvenile arthritis, unspecified, left knee -M08969 Juvenile arthritis, unspecified, unspecified knee -M08971 Juvenile arthritis, unspecified, right ankle and foot -M08972 Juvenile arthritis, unspecified, left ankle and foot -M08979 Juvenile arthritis, unspecified, unspecified ankle and foot -M0898 Juvenile arthritis, unspecified, vertebrae -M0899 Juvenile arthritis, unspecified, multiple sites -M1A00X0 Idiopathic chronic gout, unspecified site, without tophus (tophi) -M1A00X1 Idiopathic chronic gout, unspecified site, with tophus (tophi) -M1A0110 Idiopathic chronic gout, right shoulder, without tophus (tophi) -M1A0111 Idiopathic chronic gout, right shoulder, with tophus (tophi) -M1A0120 Idiopathic chronic gout, left shoulder, without tophus (tophi) -M1A0121 Idiopathic chronic gout, left shoulder, with tophus (tophi) -M1A0190 Idiopathic chronic gout, unspecified shoulder, without tophus (tophi) -M1A0191 Idiopathic chronic gout, unspecified shoulder, with tophus (tophi) -M1A0210 Idiopathic chronic gout, right elbow, without tophus (tophi) -M1A0211 Idiopathic chronic gout, right elbow, with tophus (tophi) -M1A0220 Idiopathic chronic gout, left elbow, without tophus (tophi) -M1A0221 Idiopathic chronic gout, left elbow, with tophus (tophi) -M1A0290 Idiopathic chronic gout, unspecified elbow, without tophus (tophi) -M1A0291 Idiopathic chronic gout, unspecified elbow, with tophus (tophi) -M1A0310 Idiopathic chronic gout, right wrist, without tophus (tophi) -M1A0311 Idiopathic chronic gout, right wrist, with tophus (tophi) -M1A0320 Idiopathic chronic gout, left wrist, without tophus (tophi) -M1A0321 Idiopathic chronic gout, left wrist, with tophus (tophi) -M1A0390 Idiopathic chronic gout, unspecified wrist, without tophus (tophi) -M1A0391 Idiopathic chronic gout, unspecified wrist, with tophus (tophi) -M1A0410 Idiopathic chronic gout, right hand, without tophus (tophi) -M1A0411 Idiopathic chronic gout, right hand, with tophus (tophi) -M1A0420 Idiopathic chronic gout, left hand, without tophus (tophi) -M1A0421 Idiopathic chronic gout, left hand, with tophus (tophi) -M1A0490 Idiopathic chronic gout, unspecified hand, without tophus (tophi) -M1A0491 Idiopathic chronic gout, unspecified hand, with tophus (tophi) -M1A0510 Idiopathic chronic gout, right hip, without tophus (tophi) -M1A0511 Idiopathic chronic gout, right hip, with tophus (tophi) -M1A0520 Idiopathic chronic gout, left hip, without tophus (tophi) -M1A0521 Idiopathic chronic gout, left hip, with tophus (tophi) -M1A0590 Idiopathic chronic gout, unspecified hip, without tophus (tophi) -M1A0591 Idiopathic chronic gout, unspecified hip, with tophus (tophi) -M1A0610 Idiopathic chronic gout, right knee, without tophus (tophi) -M1A0611 Idiopathic chronic gout, right knee, with tophus (tophi) -M1A0620 Idiopathic chronic gout, left knee, without tophus (tophi) -M1A0621 Idiopathic chronic gout, left knee, with tophus (tophi) -M1A0690 Idiopathic chronic gout, unspecified knee, without tophus (tophi) -M1A0691 Idiopathic chronic gout, unspecified knee, with tophus (tophi) -M1A0710 Idiopathic chronic gout, right ankle and foot, without tophus (tophi) -M1A0711 Idiopathic chronic gout, right ankle and foot, with tophus (tophi) -M1A0720 Idiopathic chronic gout, left ankle and foot, without tophus (tophi) -M1A0721 Idiopathic chronic gout, left ankle and foot, with tophus (tophi) -M1A0790 Idiopathic chronic gout, unspecified ankle and foot, without tophus (tophi) -M1A0791 Idiopathic chronic gout, unspecified ankle and foot, with tophus (tophi) -M1A08X0 Idiopathic chronic gout, vertebrae, without tophus (tophi) -M1A08X1 Idiopathic chronic gout, vertebrae, with tophus (tophi) -M1A09X0 Idiopathic chronic gout, multiple sites, without tophus (tophi) -M1A09X1 Idiopathic chronic gout, multiple sites, with tophus (tophi) -M1A10X0 Lead-induced chronic gout, unspecified site, without tophus (tophi) -M1A10X1 Lead-induced chronic gout, unspecified site, with tophus (tophi) -M1A1110 Lead-induced chronic gout, right shoulder, without tophus (tophi) -M1A1111 Lead-induced chronic gout, right shoulder, with tophus (tophi) -M1A1120 Lead-induced chronic gout, left shoulder, without tophus (tophi) -M1A1121 Lead-induced chronic gout, left shoulder, with tophus (tophi) -M1A1190 Lead-induced chronic gout, unspecified shoulder, without tophus (tophi) -M1A1191 Lead-induced chronic gout, unspecified shoulder, with tophus (tophi) -M1A1210 Lead-induced chronic gout, right elbow, without tophus (tophi) -M1A1211 Lead-induced chronic gout, right elbow, with tophus (tophi) -M1A1220 Lead-induced chronic gout, left elbow, without tophus (tophi) -M1A1221 Lead-induced chronic gout, left elbow, with tophus (tophi) -M1A1290 Lead-induced chronic gout, unspecified elbow, without tophus (tophi) -M1A1291 Lead-induced chronic gout, unspecified elbow, with tophus (tophi) -M1A1310 Lead-induced chronic gout, right wrist, without tophus (tophi) -M1A1311 Lead-induced chronic gout, right wrist, with tophus (tophi) -M1A1320 Lead-induced chronic gout, left wrist, without tophus (tophi) -M1A1321 Lead-induced chronic gout, left wrist, with tophus (tophi) -M1A1390 Lead-induced chronic gout, unspecified wrist, without tophus (tophi) -M1A1391 Lead-induced chronic gout, unspecified wrist, with tophus (tophi) -M1A1410 Lead-induced chronic gout, right hand, without tophus (tophi) -M1A1411 Lead-induced chronic gout, right hand, with tophus (tophi) -M1A1420 Lead-induced chronic gout, left hand, without tophus (tophi) -M1A1421 Lead-induced chronic gout, left hand, with tophus (tophi) -M1A1490 Lead-induced chronic gout, unspecified hand, without tophus (tophi) -M1A1491 Lead-induced chronic gout, unspecified hand, with tophus (tophi) -M1A1510 Lead-induced chronic gout, right hip, without tophus (tophi) -M1A1511 Lead-induced chronic gout, right hip, with tophus (tophi) -M1A1520 Lead-induced chronic gout, left hip, without tophus (tophi) -M1A1521 Lead-induced chronic gout, left hip, with tophus (tophi) -M1A1590 Lead-induced chronic gout, unspecified hip, without tophus (tophi) -M1A1591 Lead-induced chronic gout, unspecified hip, with tophus (tophi) -M1A1610 Lead-induced chronic gout, right knee, without tophus (tophi) -M1A1611 Lead-induced chronic gout, right knee, with tophus (tophi) -M1A1620 Lead-induced chronic gout, left knee, without tophus (tophi) -M1A1621 Lead-induced chronic gout, left knee, with tophus (tophi) -M1A1690 Lead-induced chronic gout, unspecified knee, without tophus (tophi) -M1A1691 Lead-induced chronic gout, unspecified knee, with tophus (tophi) -M1A1710 Lead-induced chronic gout, right ankle and foot, without tophus (tophi) -M1A1711 Lead-induced chronic gout, right ankle and foot, with tophus (tophi) -M1A1720 Lead-induced chronic gout, left ankle and foot, without tophus (tophi) -M1A1721 Lead-induced chronic gout, left ankle and foot, with tophus (tophi) -M1A1790 Lead-induced chronic gout, unspecified ankle and foot, without tophus (tophi) -M1A1791 Lead-induced chronic gout, unspecified ankle and foot, with tophus (tophi) -M1A18X0 Lead-induced chronic gout, vertebrae, without tophus (tophi) -M1A18X1 Lead-induced chronic gout, vertebrae, with tophus (tophi) -M1A19X0 Lead-induced chronic gout, multiple sites, without tophus (tophi) -M1A19X1 Lead-induced chronic gout, multiple sites, with tophus (tophi) -M1A20X0 Drug-induced chronic gout, unspecified site, without tophus (tophi) -M1A20X1 Drug-induced chronic gout, unspecified site, with tophus (tophi) -M1A2110 Drug-induced chronic gout, right shoulder, without tophus (tophi) -M1A2111 Drug-induced chronic gout, right shoulder, with tophus (tophi) -M1A2120 Drug-induced chronic gout, left shoulder, without tophus (tophi) -M1A2121 Drug-induced chronic gout, left shoulder, with tophus (tophi) -M1A2190 Drug-induced chronic gout, unspecified shoulder, without tophus (tophi) -M1A2191 Drug-induced chronic gout, unspecified shoulder, with tophus (tophi) -M1A2210 Drug-induced chronic gout, right elbow, without tophus (tophi) -M1A2211 Drug-induced chronic gout, right elbow, with tophus (tophi) -M1A2220 Drug-induced chronic gout, left elbow, without tophus (tophi) -M1A2221 Drug-induced chronic gout, left elbow, with tophus (tophi) -M1A2290 Drug-induced chronic gout, unspecified elbow, without tophus (tophi) -M1A2291 Drug-induced chronic gout, unspecified elbow, with tophus (tophi) -M1A2310 Drug-induced chronic gout, right wrist, without tophus (tophi) -M1A2311 Drug-induced chronic gout, right wrist, with tophus (tophi) -M1A2320 Drug-induced chronic gout, left wrist, without tophus (tophi) -M1A2321 Drug-induced chronic gout, left wrist, with tophus (tophi) -M1A2390 Drug-induced chronic gout, unspecified wrist, without tophus (tophi) -M1A2391 Drug-induced chronic gout, unspecified wrist, with tophus (tophi) -M1A2410 Drug-induced chronic gout, right hand, without tophus (tophi) -M1A2411 Drug-induced chronic gout, right hand, with tophus (tophi) -M1A2420 Drug-induced chronic gout, left hand, without tophus (tophi) -M1A2421 Drug-induced chronic gout, left hand, with tophus (tophi) -M1A2490 Drug-induced chronic gout, unspecified hand, without tophus (tophi) -M1A2491 Drug-induced chronic gout, unspecified hand, with tophus (tophi) -M1A2510 Drug-induced chronic gout, right hip, without tophus (tophi) -M1A2511 Drug-induced chronic gout, right hip, with tophus (tophi) -M1A2520 Drug-induced chronic gout, left hip, without tophus (tophi) -M1A2521 Drug-induced chronic gout, left hip, with tophus (tophi) -M1A2590 Drug-induced chronic gout, unspecified hip, without tophus (tophi) -M1A2591 Drug-induced chronic gout, unspecified hip, with tophus (tophi) -M1A2610 Drug-induced chronic gout, right knee, without tophus (tophi) -M1A2611 Drug-induced chronic gout, right knee, with tophus (tophi) -M1A2620 Drug-induced chronic gout, left knee, without tophus (tophi) -M1A2621 Drug-induced chronic gout, left knee, with tophus (tophi) -M1A2690 Drug-induced chronic gout, unspecified knee, without tophus (tophi) -M1A2691 Drug-induced chronic gout, unspecified knee, with tophus (tophi) -M1A2710 Drug-induced chronic gout, right ankle and foot, without tophus (tophi) -M1A2711 Drug-induced chronic gout, right ankle and foot, with tophus (tophi) -M1A2720 Drug-induced chronic gout, left ankle and foot, without tophus (tophi) -M1A2721 Drug-induced chronic gout, left ankle and foot, with tophus (tophi) -M1A2790 Drug-induced chronic gout, unspecified ankle and foot, without tophus (tophi) -M1A2791 Drug-induced chronic gout, unspecified ankle and foot, with tophus (tophi) -M1A28X0 Drug-induced chronic gout, vertebrae, without tophus (tophi) -M1A28X1 Drug-induced chronic gout, vertebrae, with tophus (tophi) -M1A29X0 Drug-induced chronic gout, multiple sites, without tophus (tophi) -M1A29X1 Drug-induced chronic gout, multiple sites, with tophus (tophi) -M1A30X0 Chronic gout due to renal impairment, unspecified site, without tophus (tophi) -M1A30X1 Chronic gout due to renal impairment, unspecified site, with tophus (tophi) -M1A3110 Chronic gout due to renal impairment, right shoulder, without tophus (tophi) -M1A3111 Chronic gout due to renal impairment, right shoulder, with tophus (tophi) -M1A3120 Chronic gout due to renal impairment, left shoulder, without tophus (tophi) -M1A3121 Chronic gout due to renal impairment, left shoulder, with tophus (tophi) -M1A3190 Chronic gout due to renal impairment, unspecified shoulder, without tophus (tophi) -M1A3191 Chronic gout due to renal impairment, unspecified shoulder, with tophus (tophi) -M1A3210 Chronic gout due to renal impairment, right elbow, without tophus (tophi) -M1A3211 Chronic gout due to renal impairment, right elbow, with tophus (tophi) -M1A3220 Chronic gout due to renal impairment, left elbow, without tophus (tophi) -M1A3221 Chronic gout due to renal impairment, left elbow, with tophus (tophi) -M1A3290 Chronic gout due to renal impairment, unspecified elbow, without tophus (tophi) -M1A3291 Chronic gout due to renal impairment, unspecified elbow, with tophus (tophi) -M1A3310 Chronic gout due to renal impairment, right wrist, without tophus (tophi) -M1A3311 Chronic gout due to renal impairment, right wrist, with tophus (tophi) -M1A3320 Chronic gout due to renal impairment, left wrist, without tophus (tophi) -M1A3321 Chronic gout due to renal impairment, left wrist, with tophus (tophi) -M1A3390 Chronic gout due to renal impairment, unspecified wrist, without tophus (tophi) -M1A3391 Chronic gout due to renal impairment, unspecified wrist, with tophus (tophi) -M1A3410 Chronic gout due to renal impairment, right hand, without tophus (tophi) -M1A3411 Chronic gout due to renal impairment, right hand, with tophus (tophi) -M1A3420 Chronic gout due to renal impairment, left hand, without tophus (tophi) -M1A3421 Chronic gout due to renal impairment, left hand, with tophus (tophi) -M1A3490 Chronic gout due to renal impairment, unspecified hand, without tophus (tophi) -M1A3491 Chronic gout due to renal impairment, unspecified hand, with tophus (tophi) -M1A3510 Chronic gout due to renal impairment, right hip, without tophus (tophi) -M1A3511 Chronic gout due to renal impairment, right hip, with tophus (tophi) -M1A3520 Chronic gout due to renal impairment, left hip, without tophus (tophi) -M1A3521 Chronic gout due to renal impairment, left hip, with tophus (tophi) -M1A3590 Chronic gout due to renal impairment, unspecified hip, without tophus (tophi) -M1A3591 Chronic gout due to renal impairment, unspecified hip, with tophus (tophi) -M1A3610 Chronic gout due to renal impairment, right knee, without tophus (tophi) -M1A3611 Chronic gout due to renal impairment, right knee, with tophus (tophi) -M1A3620 Chronic gout due to renal impairment, left knee, without tophus (tophi) -M1A3621 Chronic gout due to renal impairment, left knee, with tophus (tophi) -M1A3690 Chronic gout due to renal impairment, unspecified knee, without tophus (tophi) -M1A3691 Chronic gout due to renal impairment, unspecified knee, with tophus (tophi) -M1A3710 Chronic gout due to renal impairment, right ankle and foot, without tophus (tophi) -M1A3711 Chronic gout due to renal impairment, right ankle and foot, with tophus (tophi) -M1A3720 Chronic gout due to renal impairment, left ankle and foot, without tophus (tophi) -M1A3721 Chronic gout due to renal impairment, left ankle and foot, with tophus (tophi) -M1A3790 Chronic gout due to renal impairment, unspecified ankle and foot, without tophus (tophi) -M1A3791 Chronic gout due to renal impairment, unspecified ankle and foot, with tophus (tophi) -M1A38X0 Chronic gout due to renal impairment, vertebrae, without tophus (tophi) -M1A38X1 Chronic gout due to renal impairment, vertebrae, with tophus (tophi) -M1A39X0 Chronic gout due to renal impairment, multiple sites, without tophus (tophi) -M1A39X1 Chronic gout due to renal impairment, multiple sites, with tophus (tophi) -M1A40X0 Other secondary chronic gout, unspecified site, without tophus (tophi) -M1A40X1 Other secondary chronic gout, unspecified site, with tophus (tophi) -M1A4110 Other secondary chronic gout, right shoulder, without tophus (tophi) -M1A4111 Other secondary chronic gout, right shoulder, with tophus (tophi) -M1A4120 Other secondary chronic gout, left shoulder, without tophus (tophi) -M1A4121 Other secondary chronic gout, left shoulder, with tophus (tophi) -M1A4190 Other secondary chronic gout, unspecified shoulder, without tophus (tophi) -M1A4191 Other secondary chronic gout, unspecified shoulder, with tophus (tophi) -M1A4210 Other secondary chronic gout, right elbow, without tophus (tophi) -M1A4211 Other secondary chronic gout, right elbow, with tophus (tophi) -M1A4220 Other secondary chronic gout, left elbow, without tophus (tophi) -M1A4221 Other secondary chronic gout, left elbow, with tophus (tophi) -M1A4290 Other secondary chronic gout, unspecified elbow, without tophus (tophi) -M1A4291 Other secondary chronic gout, unspecified elbow, with tophus (tophi) -M1A4310 Other secondary chronic gout, right wrist, without tophus (tophi) -M1A4311 Other secondary chronic gout, right wrist, with tophus (tophi) -M1A4320 Other secondary chronic gout, left wrist, without tophus (tophi) -M1A4321 Other secondary chronic gout, left wrist, with tophus (tophi) -M1A4390 Other secondary chronic gout, unspecified wrist, without tophus (tophi) -M1A4391 Other secondary chronic gout, unspecified wrist, with tophus (tophi) -M1A4410 Other secondary chronic gout, right hand, without tophus (tophi) -M1A4411 Other secondary chronic gout, right hand, with tophus (tophi) -M1A4420 Other secondary chronic gout, left hand, without tophus (tophi) -M1A4421 Other secondary chronic gout, left hand, with tophus (tophi) -M1A4490 Other secondary chronic gout, unspecified hand, without tophus (tophi) -M1A4491 Other secondary chronic gout, unspecified hand, with tophus (tophi) -M1A4510 Other secondary chronic gout, right hip, without tophus (tophi) -M1A4511 Other secondary chronic gout, right hip, with tophus (tophi) -M1A4520 Other secondary chronic gout, left hip, without tophus (tophi) -M1A4521 Other secondary chronic gout, left hip, with tophus (tophi) -M1A4590 Other secondary chronic gout, unspecified hip, without tophus (tophi) -M1A4591 Other secondary chronic gout, unspecified hip, with tophus (tophi) -M1A4610 Other secondary chronic gout, right knee, without tophus (tophi) -M1A4611 Other secondary chronic gout, right knee, with tophus (tophi) -M1A4620 Other secondary chronic gout, left knee, without tophus (tophi) -M1A4621 Other secondary chronic gout, left knee, with tophus (tophi) -M1A4690 Other secondary chronic gout, unspecified knee, without tophus (tophi) -M1A4691 Other secondary chronic gout, unspecified knee, with tophus (tophi) -M1A4710 Other secondary chronic gout, right ankle and foot, without tophus (tophi) -M1A4711 Other secondary chronic gout, right ankle and foot, with tophus (tophi) -M1A4720 Other secondary chronic gout, left ankle and foot, without tophus (tophi) -M1A4721 Other secondary chronic gout, left ankle and foot, with tophus (tophi) -M1A4790 Other secondary chronic gout, unspecified ankle and foot, without tophus (tophi) -M1A4791 Other secondary chronic gout, unspecified ankle and foot, with tophus (tophi) -M1A48X0 Other secondary chronic gout, vertebrae, without tophus (tophi) -M1A48X1 Other secondary chronic gout, vertebrae, with tophus (tophi) -M1A49X0 Other secondary chronic gout, multiple sites, without tophus (tophi) -M1A49X1 Other secondary chronic gout, multiple sites, with tophus (tophi) -M1A9XX0 Chronic gout, unspecified, without tophus (tophi) -M1A9XX1 Chronic gout, unspecified, with tophus (tophi) -M1000 Idiopathic gout, unspecified site -M10011 Idiopathic gout, right shoulder -M10012 Idiopathic gout, left shoulder -M10019 Idiopathic gout, unspecified shoulder -M10021 Idiopathic gout, right elbow -M10022 Idiopathic gout, left elbow -M10029 Idiopathic gout, unspecified elbow -M10031 Idiopathic gout, right wrist -M10032 Idiopathic gout, left wrist -M10039 Idiopathic gout, unspecified wrist -M10041 Idiopathic gout, right hand -M10042 Idiopathic gout, left hand -M10049 Idiopathic gout, unspecified hand -M10051 Idiopathic gout, right hip -M10052 Idiopathic gout, left hip -M10059 Idiopathic gout, unspecified hip -M10061 Idiopathic gout, right knee -M10062 Idiopathic gout, left knee -M10069 Idiopathic gout, unspecified knee -M10071 Idiopathic gout, right ankle and foot -M10072 Idiopathic gout, left ankle and foot -M10079 Idiopathic gout, unspecified ankle and foot -M1008 Idiopathic gout, vertebrae -M1009 Idiopathic gout, multiple sites -M1010 Lead-induced gout, unspecified site -M10111 Lead-induced gout, right shoulder -M10112 Lead-induced gout, left shoulder -M10119 Lead-induced gout, unspecified shoulder -M10121 Lead-induced gout, right elbow -M10122 Lead-induced gout, left elbow -M10129 Lead-induced gout, unspecified elbow -M10131 Lead-induced gout, right wrist -M10132 Lead-induced gout, left wrist -M10139 Lead-induced gout, unspecified wrist -M10141 Lead-induced gout, right hand -M10142 Lead-induced gout, left hand -M10149 Lead-induced gout, unspecified hand -M10151 Lead-induced gout, right hip -M10152 Lead-induced gout, left hip -M10159 Lead-induced gout, unspecified hip -M10161 Lead-induced gout, right knee -M10162 Lead-induced gout, left knee -M10169 Lead-induced gout, unspecified knee -M10171 Lead-induced gout, right ankle and foot -M10172 Lead-induced gout, left ankle and foot -M10179 Lead-induced gout, unspecified ankle and foot -M1018 Lead-induced gout, vertebrae -M1019 Lead-induced gout, multiple sites -M1020 Drug-induced gout, unspecified site -M10211 Drug-induced gout, right shoulder -M10212 Drug-induced gout, left shoulder -M10219 Drug-induced gout, unspecified shoulder -M10221 Drug-induced gout, right elbow -M10222 Drug-induced gout, left elbow -M10229 Drug-induced gout, unspecified elbow -M10231 Drug-induced gout, right wrist -M10232 Drug-induced gout, left wrist -M10239 Drug-induced gout, unspecified wrist -M10241 Drug-induced gout, right hand -M10242 Drug-induced gout, left hand -M10249 Drug-induced gout, unspecified hand -M10251 Drug-induced gout, right hip -M10252 Drug-induced gout, left hip -M10259 Drug-induced gout, unspecified hip -M10261 Drug-induced gout, right knee -M10262 Drug-induced gout, left knee -M10269 Drug-induced gout, unspecified knee -M10271 Drug-induced gout, right ankle and foot -M10272 Drug-induced gout, left ankle and foot -M10279 Drug-induced gout, unspecified ankle and foot -M1028 Drug-induced gout, vertebrae -M1029 Drug-induced gout, multiple sites -M1030 Gout due to renal impairment, unspecified site -M10311 Gout due to renal impairment, right shoulder -M10312 Gout due to renal impairment, left shoulder -M10319 Gout due to renal impairment, unspecified shoulder -M10321 Gout due to renal impairment, right elbow -M10322 Gout due to renal impairment, left elbow -M10329 Gout due to renal impairment, unspecified elbow -M10331 Gout due to renal impairment, right wrist -M10332 Gout due to renal impairment, left wrist -M10339 Gout due to renal impairment, unspecified wrist -M10341 Gout due to renal impairment, right hand -M10342 Gout due to renal impairment, left hand -M10349 Gout due to renal impairment, unspecified hand -M10351 Gout due to renal impairment, right hip -M10352 Gout due to renal impairment, left hip -M10359 Gout due to renal impairment, unspecified hip -M10361 Gout due to renal impairment, right knee -M10362 Gout due to renal impairment, left knee -M10369 Gout due to renal impairment, unspecified knee -M10371 Gout due to renal impairment, right ankle and foot -M10372 Gout due to renal impairment, left ankle and foot -M10379 Gout due to renal impairment, unspecified ankle and foot -M1038 Gout due to renal impairment, vertebrae -M1039 Gout due to renal impairment, multiple sites -M1040 Other secondary gout, unspecified site -M10411 Other secondary gout, right shoulder -M10412 Other secondary gout, left shoulder -M10419 Other secondary gout, unspecified shoulder -M10421 Other secondary gout, right elbow -M10422 Other secondary gout, left elbow -M10429 Other secondary gout, unspecified elbow -M10431 Other secondary gout, right wrist -M10432 Other secondary gout, left wrist -M10439 Other secondary gout, unspecified wrist -M10441 Other secondary gout, right hand -M10442 Other secondary gout, left hand -M10449 Other secondary gout, unspecified hand -M10451 Other secondary gout, right hip -M10452 Other secondary gout, left hip -M10459 Other secondary gout, unspecified hip -M10461 Other secondary gout, right knee -M10462 Other secondary gout, left knee -M10469 Other secondary gout, unspecified knee -M10471 Other secondary gout, right ankle and foot -M10472 Other secondary gout, left ankle and foot -M10479 Other secondary gout, unspecified ankle and foot -M1048 Other secondary gout, vertebrae -M1049 Other secondary gout, multiple sites -M109 Gout, unspecified -M1100 Hydroxyapatite deposition disease, unspecified site -M11011 Hydroxyapatite deposition disease, right shoulder -M11012 Hydroxyapatite deposition disease, left shoulder -M11019 Hydroxyapatite deposition disease, unspecified shoulder -M11021 Hydroxyapatite deposition disease, right elbow -M11022 Hydroxyapatite deposition disease, left elbow -M11029 Hydroxyapatite deposition disease, unspecified elbow -M11031 Hydroxyapatite deposition disease, right wrist -M11032 Hydroxyapatite deposition disease, left wrist -M11039 Hydroxyapatite deposition disease, unspecified wrist -M11041 Hydroxyapatite deposition disease, right hand -M11042 Hydroxyapatite deposition disease, left hand -M11049 Hydroxyapatite deposition disease, unspecified hand -M11051 Hydroxyapatite deposition disease, right hip -M11052 Hydroxyapatite deposition disease, left hip -M11059 Hydroxyapatite deposition disease, unspecified hip -M11061 Hydroxyapatite deposition disease, right knee -M11062 Hydroxyapatite deposition disease, left knee -M11069 Hydroxyapatite deposition disease, unspecified knee -M11071 Hydroxyapatite deposition disease, right ankle and foot -M11072 Hydroxyapatite deposition disease, left ankle and foot -M11079 Hydroxyapatite deposition disease, unspecified ankle and foot -M1108 Hydroxyapatite deposition disease, vertebrae -M1109 Hydroxyapatite deposition disease, multiple sites -M1110 Familial chondrocalcinosis, unspecified site -M11111 Familial chondrocalcinosis, right shoulder -M11112 Familial chondrocalcinosis, left shoulder -M11119 Familial chondrocalcinosis, unspecified shoulder -M11121 Familial chondrocalcinosis, right elbow -M11122 Familial chondrocalcinosis, left elbow -M11129 Familial chondrocalcinosis, unspecified elbow -M11131 Familial chondrocalcinosis, right wrist -M11132 Familial chondrocalcinosis, left wrist -M11139 Familial chondrocalcinosis, unspecified wrist -M11141 Familial chondrocalcinosis, right hand -M11142 Familial chondrocalcinosis, left hand -M11149 Familial chondrocalcinosis, unspecified hand -M11151 Familial chondrocalcinosis, right hip -M11152 Familial chondrocalcinosis, left hip -M11159 Familial chondrocalcinosis, unspecified hip -M11161 Familial chondrocalcinosis, right knee -M11162 Familial chondrocalcinosis, left knee -M11169 Familial chondrocalcinosis, unspecified knee -M11171 Familial chondrocalcinosis, right ankle and foot -M11172 Familial chondrocalcinosis, left ankle and foot -M11179 Familial chondrocalcinosis, unspecified ankle and foot -M1118 Familial chondrocalcinosis, vertebrae -M1119 Familial chondrocalcinosis, multiple sites -M1120 Other chondrocalcinosis, unspecified site -M11211 Other chondrocalcinosis, right shoulder -M11212 Other chondrocalcinosis, left shoulder -M11219 Other chondrocalcinosis, unspecified shoulder -M11221 Other chondrocalcinosis, right elbow -M11222 Other chondrocalcinosis, left elbow -M11229 Other chondrocalcinosis, unspecified elbow -M11231 Other chondrocalcinosis, right wrist -M11232 Other chondrocalcinosis, left wrist -M11239 Other chondrocalcinosis, unspecified wrist -M11241 Other chondrocalcinosis, right hand -M11242 Other chondrocalcinosis, left hand -M11249 Other chondrocalcinosis, unspecified hand -M11251 Other chondrocalcinosis, right hip -M11252 Other chondrocalcinosis, left hip -M11259 Other chondrocalcinosis, unspecified hip -M11261 Other chondrocalcinosis, right knee -M11262 Other chondrocalcinosis, left knee -M11269 Other chondrocalcinosis, unspecified knee -M11271 Other chondrocalcinosis, right ankle and foot -M11272 Other chondrocalcinosis, left ankle and foot -M11279 Other chondrocalcinosis, unspecified ankle and foot -M1128 Other chondrocalcinosis, vertebrae -M1129 Other chondrocalcinosis, multiple sites -M1180 Other specified crystal arthropathies, unspecified site -M11811 Other specified crystal arthropathies, right shoulder -M11812 Other specified crystal arthropathies, left shoulder -M11819 Other specified crystal arthropathies, unspecified shoulder -M11821 Other specified crystal arthropathies, right elbow -M11822 Other specified crystal arthropathies, left elbow -M11829 Other specified crystal arthropathies, unspecified elbow -M11831 Other specified crystal arthropathies, right wrist -M11832 Other specified crystal arthropathies, left wrist -M11839 Other specified crystal arthropathies, unspecified wrist -M11841 Other specified crystal arthropathies, right hand -M11842 Other specified crystal arthropathies, left hand -M11849 Other specified crystal arthropathies, unspecified hand -M11851 Other specified crystal arthropathies, right hip -M11852 Other specified crystal arthropathies, left hip -M11859 Other specified crystal arthropathies, unspecified hip -M11861 Other specified crystal arthropathies, right knee -M11862 Other specified crystal arthropathies, left knee -M11869 Other specified crystal arthropathies, unspecified knee -M11871 Other specified crystal arthropathies, right ankle and foot -M11872 Other specified crystal arthropathies, left ankle and foot -M11879 Other specified crystal arthropathies, unspecified ankle and foot -M1188 Other specified crystal arthropathies, vertebrae -M1189 Other specified crystal arthropathies, multiple sites -M119 Crystal arthropathy, unspecified -M1200 Chronic postrheumatic arthropathy [Jaccoud], unspecified site -M12011 Chronic postrheumatic arthropathy [Jaccoud], right shoulder -M12012 Chronic postrheumatic arthropathy [Jaccoud], left shoulder -M12019 Chronic postrheumatic arthropathy [Jaccoud], unspecified shoulder -M12021 Chronic postrheumatic arthropathy [Jaccoud], right elbow -M12022 Chronic postrheumatic arthropathy [Jaccoud], left elbow -M12029 Chronic postrheumatic arthropathy [Jaccoud], unspecified elbow -M12031 Chronic postrheumatic arthropathy [Jaccoud], right wrist -M12032 Chronic postrheumatic arthropathy [Jaccoud], left wrist -M12039 Chronic postrheumatic arthropathy [Jaccoud], unspecified wrist -M12041 Chronic postrheumatic arthropathy [Jaccoud], right hand -M12042 Chronic postrheumatic arthropathy [Jaccoud], left hand -M12049 Chronic postrheumatic arthropathy [Jaccoud], unspecified hand -M12051 Chronic postrheumatic arthropathy [Jaccoud], right hip -M12052 Chronic postrheumatic arthropathy [Jaccoud], left hip -M12059 Chronic postrheumatic arthropathy [Jaccoud], unspecified hip -M12061 Chronic postrheumatic arthropathy [Jaccoud], right knee -M12062 Chronic postrheumatic arthropathy [Jaccoud], left knee -M12069 Chronic postrheumatic arthropathy [Jaccoud], unspecified knee -M12071 Chronic postrheumatic arthropathy [Jaccoud], right ankle and foot -M12072 Chronic postrheumatic arthropathy [Jaccoud], left ankle and foot -M12079 Chronic postrheumatic arthropathy [Jaccoud], unspecified ankle and foot -M1208 Chronic postrheumatic arthropathy [Jaccoud], other specified site -M1209 Chronic postrheumatic arthropathy [Jaccoud], multiple sites -M1210 Kaschin-Beck disease, unspecified site -M12111 Kaschin-Beck disease, right shoulder -M12112 Kaschin-Beck disease, left shoulder -M12119 Kaschin-Beck disease, unspecified shoulder -M12121 Kaschin-Beck disease, right elbow -M12122 Kaschin-Beck disease, left elbow -M12129 Kaschin-Beck disease, unspecified elbow -M12131 Kaschin-Beck disease, right wrist -M12132 Kaschin-Beck disease, left wrist -M12139 Kaschin-Beck disease, unspecified wrist -M12141 Kaschin-Beck disease, right hand -M12142 Kaschin-Beck disease, left hand -M12149 Kaschin-Beck disease, unspecified hand -M12151 Kaschin-Beck disease, right hip -M12152 Kaschin-Beck disease, left hip -M12159 Kaschin-Beck disease, unspecified hip -M12161 Kaschin-Beck disease, right knee -M12162 Kaschin-Beck disease, left knee -M12169 Kaschin-Beck disease, unspecified knee -M12171 Kaschin-Beck disease, right ankle and foot -M12172 Kaschin-Beck disease, left ankle and foot -M12179 Kaschin-Beck disease, unspecified ankle and foot -M1218 Kaschin-Beck disease, vertebrae -M1219 Kaschin-Beck disease, multiple sites -M1220 Villonodular synovitis (pigmented), unspecified site -M12211 Villonodular synovitis (pigmented), right shoulder -M12212 Villonodular synovitis (pigmented), left shoulder -M12219 Villonodular synovitis (pigmented), unspecified shoulder -M12221 Villonodular synovitis (pigmented), right elbow -M12222 Villonodular synovitis (pigmented), left elbow -M12229 Villonodular synovitis (pigmented), unspecified elbow -M12231 Villonodular synovitis (pigmented), right wrist -M12232 Villonodular synovitis (pigmented), left wrist -M12239 Villonodular synovitis (pigmented), unspecified wrist -M12241 Villonodular synovitis (pigmented), right hand -M12242 Villonodular synovitis (pigmented), left hand -M12249 Villonodular synovitis (pigmented), unspecified hand -M12251 Villonodular synovitis (pigmented), right hip -M12252 Villonodular synovitis (pigmented), left hip -M12259 Villonodular synovitis (pigmented), unspecified hip -M12261 Villonodular synovitis (pigmented), right knee -M12262 Villonodular synovitis (pigmented), left knee -M12269 Villonodular synovitis (pigmented), unspecified knee -M12271 Villonodular synovitis (pigmented), right ankle and foot -M12272 Villonodular synovitis (pigmented), left ankle and foot -M12279 Villonodular synovitis (pigmented), unspecified ankle and foot -M1228 Villonodular synovitis (pigmented), other specified site -M1229 Villonodular synovitis (pigmented), multiple sites -M1230 Palindromic rheumatism, unspecified site -M12311 Palindromic rheumatism, right shoulder -M12312 Palindromic rheumatism, left shoulder -M12319 Palindromic rheumatism, unspecified shoulder -M12321 Palindromic rheumatism, right elbow -M12322 Palindromic rheumatism, left elbow -M12329 Palindromic rheumatism, unspecified elbow -M12331 Palindromic rheumatism, right wrist -M12332 Palindromic rheumatism, left wrist -M12339 Palindromic rheumatism, unspecified wrist -M12341 Palindromic rheumatism, right hand -M12342 Palindromic rheumatism, left hand -M12349 Palindromic rheumatism, unspecified hand -M12351 Palindromic rheumatism, right hip -M12352 Palindromic rheumatism, left hip -M12359 Palindromic rheumatism, unspecified hip -M12361 Palindromic rheumatism, right knee -M12362 Palindromic rheumatism, left knee -M12369 Palindromic rheumatism, unspecified knee -M12371 Palindromic rheumatism, right ankle and foot -M12372 Palindromic rheumatism, left ankle and foot -M12379 Palindromic rheumatism, unspecified ankle and foot -M1238 Palindromic rheumatism, other specified site -M1239 Palindromic rheumatism, multiple sites -M1240 Intermittent hydrarthrosis, unspecified site -M12411 Intermittent hydrarthrosis, right shoulder -M12412 Intermittent hydrarthrosis, left shoulder -M12419 Intermittent hydrarthrosis, unspecified shoulder -M12421 Intermittent hydrarthrosis, right elbow -M12422 Intermittent hydrarthrosis, left elbow -M12429 Intermittent hydrarthrosis, unspecified elbow -M12431 Intermittent hydrarthrosis, right wrist -M12432 Intermittent hydrarthrosis, left wrist -M12439 Intermittent hydrarthrosis, unspecified wrist -M12441 Intermittent hydrarthrosis, right hand -M12442 Intermittent hydrarthrosis, left hand -M12449 Intermittent hydrarthrosis, unspecified hand -M12451 Intermittent hydrarthrosis, right hip -M12452 Intermittent hydrarthrosis, left hip -M12459 Intermittent hydrarthrosis, unspecified hip -M12461 Intermittent hydrarthrosis, right knee -M12462 Intermittent hydrarthrosis, left knee -M12469 Intermittent hydrarthrosis, unspecified knee -M12471 Intermittent hydrarthrosis, right ankle and foot -M12472 Intermittent hydrarthrosis, left ankle and foot -M12479 Intermittent hydrarthrosis, unspecified ankle and foot -M1248 Intermittent hydrarthrosis, other site -M1249 Intermittent hydrarthrosis, multiple sites -M1250 Traumatic arthropathy, unspecified site -M12511 Traumatic arthropathy, right shoulder -M12512 Traumatic arthropathy, left shoulder -M12519 Traumatic arthropathy, unspecified shoulder -M12521 Traumatic arthropathy, right elbow -M12522 Traumatic arthropathy, left elbow -M12529 Traumatic arthropathy, unspecified elbow -M12531 Traumatic arthropathy, right wrist -M12532 Traumatic arthropathy, left wrist -M12539 Traumatic arthropathy, unspecified wrist -M12541 Traumatic arthropathy, right hand -M12542 Traumatic arthropathy, left hand -M12549 Traumatic arthropathy, unspecified hand -M12551 Traumatic arthropathy, right hip -M12552 Traumatic arthropathy, left hip -M12559 Traumatic arthropathy, unspecified hip -M12561 Traumatic arthropathy, right knee -M12562 Traumatic arthropathy, left knee -M12569 Traumatic arthropathy, unspecified knee -M12571 Traumatic arthropathy, right ankle and foot -M12572 Traumatic arthropathy, left ankle and foot -M12579 Traumatic arthropathy, unspecified ankle and foot -M1258 Traumatic arthropathy, other specified site -M1259 Traumatic arthropathy, multiple sites -M1280 Other specific arthropathies, not elsewhere classified, unspecified site -M12811 Other specific arthropathies, not elsewhere classified, right shoulder -M12812 Other specific arthropathies, not elsewhere classified, left shoulder -M12819 Other specific arthropathies, not elsewhere classified, unspecified shoulder -M12821 Other specific arthropathies, not elsewhere classified, right elbow -M12822 Other specific arthropathies, not elsewhere classified, left elbow -M12829 Other specific arthropathies, not elsewhere classified, unspecified elbow -M12831 Other specific arthropathies, not elsewhere classified, right wrist -M12832 Other specific arthropathies, not elsewhere classified, left wrist -M12839 Other specific arthropathies, not elsewhere classified, unspecified wrist -M12841 Other specific arthropathies, not elsewhere classified, right hand -M12842 Other specific arthropathies, not elsewhere classified, left hand -M12849 Other specific arthropathies, not elsewhere classified, unspecified hand -M12851 Other specific arthropathies, not elsewhere classified, right hip -M12852 Other specific arthropathies, not elsewhere classified, left hip -M12859 Other specific arthropathies, not elsewhere classified, unspecified hip -M12861 Other specific arthropathies, not elsewhere classified, right knee -M12862 Other specific arthropathies, not elsewhere classified, left knee -M12869 Other specific arthropathies, not elsewhere classified, unspecified knee -M12871 Other specific arthropathies, not elsewhere classified, right ankle and foot -M12872 Other specific arthropathies, not elsewhere classified, left ankle and foot -M12879 Other specific arthropathies, not elsewhere classified, unspecified ankle and foot -M1288 Other specific arthropathies, not elsewhere classified, other specified site -M1289 Other specific arthropathies, not elsewhere classified, multiple sites -M129 Arthropathy, unspecified -M130 Polyarthritis, unspecified -M1310 Monoarthritis, not elsewhere classified, unspecified site -M13111 Monoarthritis, not elsewhere classified, right shoulder -M13112 Monoarthritis, not elsewhere classified, left shoulder -M13119 Monoarthritis, not elsewhere classified, unspecified shoulder -M13121 Monoarthritis, not elsewhere classified, right elbow -M13122 Monoarthritis, not elsewhere classified, left elbow -M13129 Monoarthritis, not elsewhere classified, unspecified elbow -M13131 Monoarthritis, not elsewhere classified, right wrist -M13132 Monoarthritis, not elsewhere classified, left wrist -M13139 Monoarthritis, not elsewhere classified, unspecified wrist -M13141 Monoarthritis, not elsewhere classified, right hand -M13142 Monoarthritis, not elsewhere classified, left hand -M13149 Monoarthritis, not elsewhere classified, unspecified hand -M13151 Monoarthritis, not elsewhere classified, right hip -M13152 Monoarthritis, not elsewhere classified, left hip -M13159 Monoarthritis, not elsewhere classified, unspecified hip -M13161 Monoarthritis, not elsewhere classified, right knee -M13162 Monoarthritis, not elsewhere classified, left knee -M13169 Monoarthritis, not elsewhere classified, unspecified knee -M13171 Monoarthritis, not elsewhere classified, right ankle and foot -M13172 Monoarthritis, not elsewhere classified, left ankle and foot -M13179 Monoarthritis, not elsewhere classified, unspecified ankle and foot -M1380 Other specified arthritis, unspecified site -M13811 Other specified arthritis, right shoulder -M13812 Other specified arthritis, left shoulder -M13819 Other specified arthritis, unspecified shoulder -M13821 Other specified arthritis, right elbow -M13822 Other specified arthritis, left elbow -M13829 Other specified arthritis, unspecified elbow -M13831 Other specified arthritis, right wrist -M13832 Other specified arthritis, left wrist -M13839 Other specified arthritis, unspecified wrist -M13841 Other specified arthritis, right hand -M13842 Other specified arthritis, left hand -M13849 Other specified arthritis, unspecified hand -M13851 Other specified arthritis, right hip -M13852 Other specified arthritis, left hip -M13859 Other specified arthritis, unspecified hip -M13861 Other specified arthritis, right knee -M13862 Other specified arthritis, left knee -M13869 Other specified arthritis, unspecified knee -M13871 Other specified arthritis, right ankle and foot -M13872 Other specified arthritis, left ankle and foot -M13879 Other specified arthritis, unspecified ankle and foot -M1388 Other specified arthritis, other site -M1389 Other specified arthritis, multiple sites -M1460 Charcot's joint, unspecified site -M14611 Charcot's joint, right shoulder -M14612 Charcot's joint, left shoulder -M14619 Charcot's joint, unspecified shoulder -M14621 Charcot's joint, right elbow -M14622 Charcot's joint, left elbow -M14629 Charcot's joint, unspecified elbow -M14631 Charcot's joint, right wrist -M14632 Charcot's joint, left wrist -M14639 Charcot's joint, unspecified wrist -M14641 Charcot's joint, right hand -M14642 Charcot's joint, left hand -M14649 Charcot's joint, unspecified hand -M14651 Charcot's joint, right hip -M14652 Charcot's joint, left hip -M14659 Charcot's joint, unspecified hip -M14661 Charcot's joint, right knee -M14662 Charcot's joint, left knee -M14669 Charcot's joint, unspecified knee -M14671 Charcot's joint, right ankle and foot -M14672 Charcot's joint, left ankle and foot -M14679 Charcot's joint, unspecified ankle and foot -M1468 Charcot's joint, vertebrae -M1469 Charcot's joint, multiple sites -M1480 Arthropathies in other specified diseases classified elsewhere, unspecified site -M14811 Arthropathies in other specified diseases classified elsewhere, right shoulder -M14812 Arthropathies in other specified diseases classified elsewhere, left shoulder -M14819 Arthropathies in other specified diseases classified elsewhere, unspecified shoulder -M14821 Arthropathies in other specified diseases classified elsewhere, right elbow -M14822 Arthropathies in other specified diseases classified elsewhere, left elbow -M14829 Arthropathies in other specified diseases classified elsewhere, unspecified elbow -M14831 Arthropathies in other specified diseases classified elsewhere, right wrist -M14832 Arthropathies in other specified diseases classified elsewhere, left wrist -M14839 Arthropathies in other specified diseases classified elsewhere, unspecified wrist -M14841 Arthropathies in other specified diseases classified elsewhere, right hand -M14842 Arthropathies in other specified diseases classified elsewhere, left hand -M14849 Arthropathies in other specified diseases classified elsewhere, unspecified hand -M14851 Arthropathies in other specified diseases classified elsewhere, right hip -M14852 Arthropathies in other specified diseases classified elsewhere, left hip -M14859 Arthropathies in other specified diseases classified elsewhere, unspecified hip -M14861 Arthropathies in other specified diseases classified elsewhere, right knee -M14862 Arthropathies in other specified diseases classified elsewhere, left knee -M14869 Arthropathies in other specified diseases classified elsewhere, unspecified knee -M14871 Arthropathies in other specified diseases classified elsewhere, right ankle and foot -M14872 Arthropathies in other specified diseases classified elsewhere, left ankle and foot -M14879 Arthropathies in other specified diseases classified elsewhere, unspecified ankle and foot -M1488 Arthropathies in other specified diseases classified elsewhere, vertebrae -M1489 Arthropathies in other specified diseases classified elsewhere, multiple sites -M150 Primary generalized (osteo)arthritis -M151 Heberden's nodes (with arthropathy) -M152 Bouchard's nodes (with arthropathy) -M153 Secondary multiple arthritis -M154 Erosive (osteo)arthritis -M158 Other polyosteoarthritis -M159 Polyosteoarthritis, unspecified -M160 Bilateral primary osteoarthritis of hip -M1610 Unilateral primary osteoarthritis, unspecified hip -M1611 Unilateral primary osteoarthritis, right hip -M1612 Unilateral primary osteoarthritis, left hip -M162 Bilateral osteoarthritis resulting from hip dysplasia -M1630 Unilateral osteoarthritis resulting from hip dysplasia, unspecified hip -M1631 Unilateral osteoarthritis resulting from hip dysplasia, right hip -M1632 Unilateral osteoarthritis resulting from hip dysplasia, left hip -M164 Bilateral post-traumatic osteoarthritis of hip -M1650 Unilateral post-traumatic osteoarthritis, unspecified hip -M1651 Unilateral post-traumatic osteoarthritis, right hip -M1652 Unilateral post-traumatic osteoarthritis, left hip -M166 Other bilateral secondary osteoarthritis of hip -M167 Other unilateral secondary osteoarthritis of hip -M169 Osteoarthritis of hip, unspecified -M170 Bilateral primary osteoarthritis of knee -M1710 Unilateral primary osteoarthritis, unspecified knee -M1711 Unilateral primary osteoarthritis, right knee -M1712 Unilateral primary osteoarthritis, left knee -M172 Bilateral post-traumatic osteoarthritis of knee -M1730 Unilateral post-traumatic osteoarthritis, unspecified knee -M1731 Unilateral post-traumatic osteoarthritis, right knee -M1732 Unilateral post-traumatic osteoarthritis, left knee -M174 Other bilateral secondary osteoarthritis of knee -M175 Other unilateral secondary osteoarthritis of knee -M179 Osteoarthritis of knee, unspecified -M180 Bilateral primary osteoarthritis of first carpometacarpal joints -M1810 Unilateral primary osteoarthritis of first carpometacarpal joint, unspecified hand -M1811 Unilateral primary osteoarthritis of first carpometacarpal joint, right hand -M1812 Unilateral primary osteoarthritis of first carpometacarpal joint, left hand -M182 Bilateral post-traumatic osteoarthritis of first carpometacarpal joints -M1830 Unilateral post-traumatic osteoarthritis of first carpometacarpal joint, unspecified hand -M1831 Unilateral post-traumatic osteoarthritis of first carpometacarpal joint, right hand -M1832 Unilateral post-traumatic osteoarthritis of first carpometacarpal joint, left hand -M184 Other bilateral secondary osteoarthritis of first carpometacarpal joints -M1850 Other unilateral secondary osteoarthritis of first carpometacarpal joint, unspecified hand -M1851 Other unilateral secondary osteoarthritis of first carpometacarpal joint, right hand -M1852 Other unilateral secondary osteoarthritis of first carpometacarpal joint, left hand -M189 Osteoarthritis of first carpometacarpal joint, unspecified -M19011 Primary osteoarthritis, right shoulder -M19012 Primary osteoarthritis, left shoulder -M19019 Primary osteoarthritis, unspecified shoulder -M19021 Primary osteoarthritis, right elbow -M19022 Primary osteoarthritis, left elbow -M19029 Primary osteoarthritis, unspecified elbow -M19031 Primary osteoarthritis, right wrist -M19032 Primary osteoarthritis, left wrist -M19039 Primary osteoarthritis, unspecified wrist -M19041 Primary osteoarthritis, right hand -M19042 Primary osteoarthritis, left hand -M19049 Primary osteoarthritis, unspecified hand -M19071 Primary osteoarthritis, right ankle and foot -M19072 Primary osteoarthritis, left ankle and foot -M19079 Primary osteoarthritis, unspecified ankle and foot -M19111 Post-traumatic osteoarthritis, right shoulder -M19112 Post-traumatic osteoarthritis, left shoulder -M19119 Post-traumatic osteoarthritis, unspecified shoulder -M19121 Post-traumatic osteoarthritis, right elbow -M19122 Post-traumatic osteoarthritis, left elbow -M19129 Post-traumatic osteoarthritis, unspecified elbow -M19131 Post-traumatic osteoarthritis, right wrist -M19132 Post-traumatic osteoarthritis, left wrist -M19139 Post-traumatic osteoarthritis, unspecified wrist -M19141 Post-traumatic osteoarthritis, right hand -M19142 Post-traumatic osteoarthritis, left hand -M19149 Post-traumatic osteoarthritis, unspecified hand -M19171 Post-traumatic osteoarthritis, right ankle and foot -M19172 Post-traumatic osteoarthritis, left ankle and foot -M19179 Post-traumatic osteoarthritis, unspecified ankle and foot -M19211 Secondary osteoarthritis, right shoulder -M19212 Secondary osteoarthritis, left shoulder -M19219 Secondary osteoarthritis, unspecified shoulder -M19221 Secondary osteoarthritis, right elbow -M19222 Secondary osteoarthritis, left elbow -M19229 Secondary osteoarthritis, unspecified elbow -M19231 Secondary osteoarthritis, right wrist -M19232 Secondary osteoarthritis, left wrist -M19239 Secondary osteoarthritis, unspecified wrist -M19241 Secondary osteoarthritis, right hand -M19242 Secondary osteoarthritis, left hand -M19249 Secondary osteoarthritis, unspecified hand -M19271 Secondary osteoarthritis, right ankle and foot -M19272 Secondary osteoarthritis, left ankle and foot -M19279 Secondary osteoarthritis, unspecified ankle and foot -M1990 Unspecified osteoarthritis, unspecified site -M1991 Primary osteoarthritis, unspecified site -M1992 Post-traumatic osteoarthritis, unspecified site -M1993 Secondary osteoarthritis, unspecified site -M20001 Unspecified deformity of right finger(s) -M20002 Unspecified deformity of left finger(s) -M20009 Unspecified deformity of unspecified finger(s) -M20011 Mallet finger of right finger(s) -M20012 Mallet finger of left finger(s) -M20019 Mallet finger of unspecified finger(s) -M20021 Boutonniere deformity of right finger(s) -M20022 Boutonniere deformity of left finger(s) -M20029 Boutonniere deformity of unspecified finger(s) -M20031 Swan-neck deformity of right finger(s) -M20032 Swan-neck deformity of left finger(s) -M20039 Swan-neck deformity of unspecified finger(s) -M20091 Other deformity of right finger(s) -M20092 Other deformity of left finger(s) -M20099 Other deformity of finger(s), unspecified finger(s) -M2010 Hallux valgus (acquired), unspecified foot -M2011 Hallux valgus (acquired), right foot -M2012 Hallux valgus (acquired), left foot -M2020 Hallux rigidus, unspecified foot -M2021 Hallux rigidus, right foot -M2022 Hallux rigidus, left foot -M2030 Hallux varus (acquired), unspecified foot -M2031 Hallux varus (acquired), right foot -M2032 Hallux varus (acquired), left foot -M2040 Other hammer toe(s) (acquired), unspecified foot -M2041 Other hammer toe(s) (acquired), right foot -M2042 Other hammer toe(s) (acquired), left foot -M205X1 Other deformities of toe(s) (acquired), right foot -M205X2 Other deformities of toe(s) (acquired), left foot -M205X9 Other deformities of toe(s) (acquired), unspecified foot -M2060 Acquired deformities of toe(s), unspecified, unspecified foot -M2061 Acquired deformities of toe(s), unspecified, right foot -M2062 Acquired deformities of toe(s), unspecified, left foot -M2100 Valgus deformity, not elsewhere classified, unspecified site -M21021 Valgus deformity, not elsewhere classified, right elbow -M21022 Valgus deformity, not elsewhere classified, left elbow -M21029 Valgus deformity, not elsewhere classified, unspecified elbow -M21051 Valgus deformity, not elsewhere classified, right hip -M21052 Valgus deformity, not elsewhere classified, left hip -M21059 Valgus deformity, not elsewhere classified, unspecified hip -M21061 Valgus deformity, not elsewhere classified, right knee -M21062 Valgus deformity, not elsewhere classified, left knee -M21069 Valgus deformity, not elsewhere classified, unspecified knee -M21071 Valgus deformity, not elsewhere classified, right ankle -M21072 Valgus deformity, not elsewhere classified, left ankle -M21079 Valgus deformity, not elsewhere classified, unspecified ankle -M2110 Varus deformity, not elsewhere classified, unspecified site -M21121 Varus deformity, not elsewhere classified, right elbow -M21122 Varus deformity, not elsewhere classified, left elbow -M21129 Varus deformity, not elsewhere classified, unspecified elbow -M21151 Varus deformity, not elsewhere classified, right hip -M21152 Varus deformity, not elsewhere classified, left hip -M21159 Varus deformity, not elsewhere classified, unspecified -M21161 Varus deformity, not elsewhere classified, right knee -M21162 Varus deformity, not elsewhere classified, left knee -M21169 Varus deformity, not elsewhere classified, unspecified knee -M21171 Varus deformity, not elsewhere classified, right ankle -M21172 Varus deformity, not elsewhere classified, left ankle -M21179 Varus deformity, not elsewhere classified, unspecified ankle -M2120 Flexion deformity, unspecified site -M21211 Flexion deformity, right shoulder -M21212 Flexion deformity, left shoulder -M21219 Flexion deformity, unspecified shoulder -M21221 Flexion deformity, right elbow -M21222 Flexion deformity, left elbow -M21229 Flexion deformity, unspecified elbow -M21231 Flexion deformity, right wrist -M21232 Flexion deformity, left wrist -M21239 Flexion deformity, unspecified wrist -M21241 Flexion deformity, right finger joints -M21242 Flexion deformity, left finger joints -M21249 Flexion deformity, unspecified finger joints -M21251 Flexion deformity, right hip -M21252 Flexion deformity, left hip -M21259 Flexion deformity, unspecified hip -M21261 Flexion deformity, right knee -M21262 Flexion deformity, left knee -M21269 Flexion deformity, unspecified knee -M21271 Flexion deformity, right ankle and toes -M21272 Flexion deformity, left ankle and toes -M21279 Flexion deformity, unspecified ankle and toes -M21331 Wrist drop, right wrist -M21332 Wrist drop, left wrist -M21339 Wrist drop, unspecified wrist -M21371 Foot drop, right foot -M21372 Foot drop, left foot -M21379 Foot drop, unspecified foot -M2140 Flat foot [pes planus] (acquired), unspecified foot -M2141 Flat foot [pes planus] (acquired), right foot -M2142 Flat foot [pes planus] (acquired), left foot -M21511 Acquired clawhand, right hand -M21512 Acquired clawhand, left hand -M21519 Acquired clawhand, unspecified hand -M21521 Acquired clubhand, right hand -M21522 Acquired clubhand, left hand -M21529 Acquired clubhand, unspecified hand -M21531 Acquired clawfoot, right foot -M21532 Acquired clawfoot, left foot -M21539 Acquired clawfoot, unspecified foot -M21541 Acquired clubfoot, right foot -M21542 Acquired clubfoot, left foot -M21549 Acquired clubfoot, unspecified foot -M216X1 Other acquired deformities of right foot -M216X2 Other acquired deformities of left foot -M216X9 Other acquired deformities of unspecified foot -M2170 Unequal limb length (acquired), unspecified site -M21721 Unequal limb length (acquired), right humerus -M21722 Unequal limb length (acquired), left humerus -M21729 Unequal limb length (acquired), unspecified humerus -M21731 Unequal limb length (acquired), right ulna -M21732 Unequal limb length (acquired), left ulna -M21733 Unequal limb length (acquired), right radius -M21734 Unequal limb length (acquired), left radius -M21739 Unequal limb length (acquired), unspecified ulna and radius -M21751 Unequal limb length (acquired), right femur -M21752 Unequal limb length (acquired), left femur -M21759 Unequal limb length (acquired), unspecified femur -M21761 Unequal limb length (acquired), right tibia -M21762 Unequal limb length (acquired), left tibia -M21763 Unequal limb length (acquired), right fibula -M21764 Unequal limb length (acquired), left fibula -M21769 Unequal limb length (acquired), unspecified tibia and fibula -M2180 Other specified acquired deformities of unspecified limb -M21821 Other specified acquired deformities of right upper arm -M21822 Other specified acquired deformities of left upper arm -M21829 Other specified acquired deformities of unspecified upper arm -M21831 Other specified acquired deformities of right forearm -M21832 Other specified acquired deformities of left forearm -M21839 Other specified acquired deformities of unspecified forearm -M21851 Other specified acquired deformities of right thigh -M21852 Other specified acquired deformities of left thigh -M21859 Other specified acquired deformities of unspecified thigh -M21861 Other specified acquired deformities of right lower leg -M21862 Other specified acquired deformities of left lower leg -M21869 Other specified acquired deformities of unspecified lower leg -M2190 Unspecified acquired deformity of unspecified limb -M21921 Unspecified acquired deformity of right upper arm -M21922 Unspecified acquired deformity of left upper arm -M21929 Unspecified acquired deformity of unspecified upper arm -M21931 Unspecified acquired deformity of right forearm -M21932 Unspecified acquired deformity of left forearm -M21939 Unspecified acquired deformity of unspecified forearm -M21941 Unspecified acquired deformity of hand, right hand -M21942 Unspecified acquired deformity of hand, left hand -M21949 Unspecified acquired deformity of hand, unspecified hand -M21951 Unspecified acquired deformity of right thigh -M21952 Unspecified acquired deformity of left thigh -M21959 Unspecified acquired deformity of unspecified thigh -M21961 Unspecified acquired deformity of right lower leg -M21962 Unspecified acquired deformity of left lower leg -M21969 Unspecified acquired deformity of unspecified lower leg -M2200 Recurrent dislocation of patella, unspecified knee -M2201 Recurrent dislocation of patella, right knee -M2202 Recurrent dislocation of patella, left knee -M2210 Recurrent subluxation of patella, unspecified knee -M2211 Recurrent subluxation of patella, right knee -M2212 Recurrent subluxation of patella, left knee -M222X1 Patellofemoral disorders, right knee -M222X2 Patellofemoral disorders, left knee -M222X9 Patellofemoral disorders, unspecified knee -M223X1 Other derangements of patella, right knee -M223X2 Other derangements of patella, left knee -M223X9 Other derangements of patella, unspecified knee -M2240 Chondromalacia patellae, unspecified knee -M2241 Chondromalacia patellae, right knee -M2242 Chondromalacia patellae, left knee -M228X1 Other disorders of patella, right knee -M228X2 Other disorders of patella, left knee -M228X9 Other disorders of patella, unspecified knee -M2290 Unspecified disorder of patella, unspecified knee -M2291 Unspecified disorder of patella, right knee -M2292 Unspecified disorder of patella, left knee -M23000 Cystic meniscus, unspecified lateral meniscus, right knee -M23001 Cystic meniscus, unspecified lateral meniscus, left knee -M23002 Cystic meniscus, unspecified lateral meniscus, unspecified knee -M23003 Cystic meniscus, unspecified medial meniscus, right knee -M23004 Cystic meniscus, unspecified medial meniscus, left knee -M23005 Cystic meniscus, unspecified medial meniscus, unspecified knee -M23006 Cystic meniscus, unspecified meniscus, right knee -M23007 Cystic meniscus, unspecified meniscus, left knee -M23009 Cystic meniscus, unspecified meniscus, unspecified knee -M23011 Cystic meniscus, anterior horn of medial meniscus, right knee -M23012 Cystic meniscus, anterior horn of medial meniscus, left knee -M23019 Cystic meniscus, anterior horn of medial meniscus, unspecified knee -M23021 Cystic meniscus, posterior horn of medial meniscus, right knee -M23022 Cystic meniscus, posterior horn of medial meniscus, left knee -M23029 Cystic meniscus, posterior horn of medial meniscus, unspecified knee -M23031 Cystic meniscus, other medial meniscus, right knee -M23032 Cystic meniscus, other medial meniscus, left knee -M23039 Cystic meniscus, other medial meniscus, unspecified knee -M23041 Cystic meniscus, anterior horn of lateral meniscus, right knee -M23042 Cystic meniscus, anterior horn of lateral meniscus, left knee -M23049 Cystic meniscus, anterior horn of lateral meniscus, unspecified knee -M23051 Cystic meniscus, posterior horn of lateral meniscus, right knee -M23052 Cystic meniscus, posterior horn of lateral meniscus, left knee -M23059 Cystic meniscus, posterior horn of lateral meniscus, unspecified knee -M23061 Cystic meniscus, other lateral meniscus, right knee -M23062 Cystic meniscus, other lateral meniscus, left knee -M23069 Cystic meniscus, other lateral meniscus, unspecified knee -M23200 Derangement of unspecified lateral meniscus due to old tear or injury, right knee -M23201 Derangement of unspecified lateral meniscus due to old tear or injury, left knee -M23202 Derangement of unspecified lateral meniscus due to old tear or injury, unspecified knee -M23203 Derangement of unspecified medial meniscus due to old tear or injury, right knee -M23204 Derangement of unspecified medial meniscus due to old tear or injury, left knee -M23205 Derangement of unspecified medial meniscus due to old tear or injury, unspecified knee -M23206 Derangement of unspecified meniscus due to old tear or injury, right knee -M23207 Derangement of unspecified meniscus due to old tear or injury, left knee -M23209 Derangement of unspecified meniscus due to old tear or injury, unspecified knee -M23211 Derangement of anterior horn of medial meniscus due to old tear or injury, right knee -M23212 Derangement of anterior horn of medial meniscus due to old tear or injury, left knee -M23219 Derangement of anterior horn of medial meniscus due to old tear or injury, unspecified knee -M23221 Derangement of posterior horn of medial meniscus due to old tear or injury, right knee -M23222 Derangement of posterior horn of medial meniscus due to old tear or injury, left knee -M23229 Derangement of posterior horn of medial meniscus due to old tear or injury, unspecified knee -M23231 Derangement of other medial meniscus due to old tear or injury, right knee -M23232 Derangement of other medial meniscus due to old tear or injury, left knee -M23239 Derangement of other medial meniscus due to old tear or injury, unspecified knee -M23241 Derangement of anterior horn of lateral meniscus due to old tear or injury, right knee -M23242 Derangement of anterior horn of lateral meniscus due to old tear or injury, left knee -M23249 Derangement of anterior horn of lateral meniscus due to old tear or injury, unspecified knee -M23251 Derangement of posterior horn of lateral meniscus due to old tear or injury, right knee -M23252 Derangement of posterior horn of lateral meniscus due to old tear or injury, left knee -M23259 Derangement of posterior horn of lateral meniscus due to old tear or injury, unspecified knee -M23261 Derangement of other lateral meniscus due to old tear or injury, right knee -M23262 Derangement of other lateral meniscus due to old tear or injury, left knee -M23269 Derangement of other lateral meniscus due to old tear or injury, unspecified knee -M23300 Other meniscus derangements, unspecified lateral meniscus, right knee -M23301 Other meniscus derangements, unspecified lateral meniscus, left knee -M23302 Other meniscus derangements, unspecified lateral meniscus, unspecified knee -M23303 Other meniscus derangements, unspecified medial meniscus, right knee -M23304 Other meniscus derangements, unspecified medial meniscus, left knee -M23305 Other meniscus derangements, unspecified medial meniscus, unspecified knee -M23306 Other meniscus derangements, unspecified meniscus, right knee -M23307 Other meniscus derangements, unspecified meniscus, left knee -M23309 Other meniscus derangements, unspecified meniscus, unspecified knee -M23311 Other meniscus derangements, anterior horn of medial meniscus, right knee -M23312 Other meniscus derangements, anterior horn of medial meniscus, left knee -M23319 Other meniscus derangements, anterior horn of medial meniscus, unspecified knee -M23321 Other meniscus derangements, posterior horn of medial meniscus, right knee -M23322 Other meniscus derangements, posterior horn of medial meniscus, left knee -M23329 Other meniscus derangements, posterior horn of medial meniscus, unspecified knee -M23331 Other meniscus derangements, other medial meniscus, right knee -M23332 Other meniscus derangements, other medial meniscus, left knee -M23339 Other meniscus derangements, other medial meniscus, unspecified knee -M23341 Other meniscus derangements, anterior horn of lateral meniscus, right knee -M23342 Other meniscus derangements, anterior horn of lateral meniscus, left knee -M23349 Other meniscus derangements, anterior horn of lateral meniscus, unspecified knee -M23351 Other meniscus derangements, posterior horn of lateral meniscus, right knee -M23352 Other meniscus derangements, posterior horn of lateral meniscus, left knee -M23359 Other meniscus derangements, posterior horn of lateral meniscus, unspecified knee -M23361 Other meniscus derangements, other lateral meniscus, right knee -M23362 Other meniscus derangements, other lateral meniscus, left knee -M23369 Other meniscus derangements, other lateral meniscus, unspecified knee -M2340 Loose body in knee, unspecified knee -M2341 Loose body in knee, right knee -M2342 Loose body in knee, left knee -M2350 Chronic instability of knee, unspecified knee -M2351 Chronic instability of knee, right knee -M2352 Chronic instability of knee, left knee -M23601 Other spontaneous disruption of unspecified ligament of right knee -M23602 Other spontaneous disruption of unspecified ligament of left knee -M23609 Other spontaneous disruption of unspecified ligament of unspecified knee -M23611 Other spontaneous disruption of anterior cruciate ligament of right knee -M23612 Other spontaneous disruption of anterior cruciate ligament of left knee -M23619 Other spontaneous disruption of anterior cruciate ligament of unspecified knee -M23621 Other spontaneous disruption of posterior cruciate ligament of right knee -M23622 Other spontaneous disruption of posterior cruciate ligament of left knee -M23629 Other spontaneous disruption of posterior cruciate ligament of unspecified knee -M23631 Other spontaneous disruption of medial collateral ligament of right knee -M23632 Other spontaneous disruption of medial collateral ligament of left knee -M23639 Other spontaneous disruption of medial collateral ligament of unspecified knee -M23641 Other spontaneous disruption of lateral collateral ligament of right knee -M23642 Other spontaneous disruption of lateral collateral ligament of left knee -M23649 Other spontaneous disruption of lateral collateral ligament of unspecified knee -M23671 Other spontaneous disruption of capsular ligament of right knee -M23672 Other spontaneous disruption of capsular ligament of left knee -M23679 Other spontaneous disruption of capsular ligament of unspecified knee -M238X1 Other internal derangements of right knee -M238X2 Other internal derangements of left knee -M238X9 Other internal derangements of unspecified knee -M2390 Unspecified internal derangement of unspecified knee -M2391 Unspecified internal derangement of right knee -M2392 Unspecified internal derangement of left knee -M2400 Loose body in unspecified joint -M24011 Loose body in right shoulder -M24012 Loose body in left shoulder -M24019 Loose body in unspecified shoulder -M24021 Loose body in right elbow -M24022 Loose body in left elbow -M24029 Loose body in unspecified elbow -M24031 Loose body in right wrist -M24032 Loose body in left wrist -M24039 Loose body in unspecified wrist -M24041 Loose body in right finger joint(s) -M24042 Loose body in left finger joint(s) -M24049 Loose body in unspecified finger joint(s) -M24051 Loose body in right hip -M24052 Loose body in left hip -M24059 Loose body in unspecified hip -M24071 Loose body in right ankle -M24072 Loose body in left ankle -M24073 Loose body in unspecified ankle -M24074 Loose body in right toe joint(s) -M24075 Loose body in left toe joint(s) -M24076 Loose body in unspecified toe joints -M2408 Loose body, other site -M2410 Other articular cartilage disorders, unspecified site -M24111 Other articular cartilage disorders, right shoulder -M24112 Other articular cartilage disorders, left shoulder -M24119 Other articular cartilage disorders, unspecified shoulder -M24121 Other articular cartilage disorders, right elbow -M24122 Other articular cartilage disorders, left elbow -M24129 Other articular cartilage disorders, unspecified elbow -M24131 Other articular cartilage disorders, right wrist -M24132 Other articular cartilage disorders, left wrist -M24139 Other articular cartilage disorders, unspecified wrist -M24141 Other articular cartilage disorders, right hand -M24142 Other articular cartilage disorders, left hand -M24149 Other articular cartilage disorders, unspecified hand -M24151 Other articular cartilage disorders, right hip -M24152 Other articular cartilage disorders, left hip -M24159 Other articular cartilage disorders, unspecified hip -M24171 Other articular cartilage disorders, right ankle -M24172 Other articular cartilage disorders, left ankle -M24173 Other articular cartilage disorders, unspecified ankle -M24174 Other articular cartilage disorders, right foot -M24175 Other articular cartilage disorders, left foot -M24176 Other articular cartilage disorders, unspecified foot -M2420 Disorder of ligament, unspecified site -M24211 Disorder of ligament, right shoulder -M24212 Disorder of ligament, left shoulder -M24219 Disorder of ligament, unspecified shoulder -M24221 Disorder of ligament, right elbow -M24222 Disorder of ligament, left elbow -M24229 Disorder of ligament, unspecified elbow -M24231 Disorder of ligament, right wrist -M24232 Disorder of ligament, left wrist -M24239 Disorder of ligament, unspecified wrist -M24241 Disorder of ligament, right hand -M24242 Disorder of ligament, left hand -M24249 Disorder of ligament, unspecified hand -M24251 Disorder of ligament, right hip -M24252 Disorder of ligament, left hip -M24259 Disorder of ligament, unspecified hip -M24271 Disorder of ligament, right ankle -M24272 Disorder of ligament, left ankle -M24273 Disorder of ligament, unspecified ankle -M24274 Disorder of ligament, right foot -M24275 Disorder of ligament, left foot -M24276 Disorder of ligament, unspecified foot -M2428 Disorder of ligament, vertebrae -M2430 Pathological dislocation of unspecified joint, not elsewhere classified -M24311 Pathological dislocation of right shoulder, not elsewhere classified -M24312 Pathological dislocation of left shoulder, not elsewhere classified -M24319 Pathological dislocation of unspecified shoulder, not elsewhere classified -M24321 Pathological dislocation of right elbow, not elsewhere classified -M24322 Pathological dislocation of left elbow, not elsewhere classified -M24329 Pathological dislocation of unspecified elbow, not elsewhere classified -M24331 Pathological dislocation of right wrist, not elsewhere classified -M24332 Pathological dislocation of left wrist, not elsewhere classified -M24339 Pathological dislocation of unspecified wrist, not elsewhere classified -M24341 Pathological dislocation of right hand, not elsewhere classified -M24342 Pathological dislocation of left hand, not elsewhere classified -M24349 Pathological dislocation of unspecified hand, not elsewhere classified -M24351 Pathological dislocation of right hip, not elsewhere classified -M24352 Pathological dislocation of left hip, not elsewhere classified -M24359 Pathological dislocation of unspecified hip, not elsewhere classified -M24361 Pathological dislocation of right knee, not elsewhere classified -M24362 Pathological dislocation of left knee, not elsewhere classified -M24369 Pathological dislocation of unspecified knee, not elsewhere classified -M24371 Pathological dislocation of right ankle, not elsewhere classified -M24372 Pathological dislocation of left ankle, not elsewhere classified -M24373 Pathological dislocation of unspecified ankle, not elsewhere classified -M24374 Pathological dislocation of right foot, not elsewhere classified -M24375 Pathological dislocation of left foot, not elsewhere classified -M24376 Pathological dislocation of unspecified foot, not elsewhere classified -M2440 Recurrent dislocation, unspecified joint -M24411 Recurrent dislocation, right shoulder -M24412 Recurrent dislocation, left shoulder -M24419 Recurrent dislocation, unspecified shoulder -M24421 Recurrent dislocation, right elbow -M24422 Recurrent dislocation, left elbow -M24429 Recurrent dislocation, unspecified elbow -M24431 Recurrent dislocation, right wrist -M24432 Recurrent dislocation, left wrist -M24439 Recurrent dislocation, unspecified wrist -M24441 Recurrent dislocation, right hand -M24442 Recurrent dislocation, left hand -M24443 Recurrent dislocation, unspecified hand -M24444 Recurrent dislocation, right finger -M24445 Recurrent dislocation, left finger -M24446 Recurrent dislocation, unspecified finger -M24451 Recurrent dislocation, right hip -M24452 Recurrent dislocation, left hip -M24459 Recurrent dislocation, unspecified hip -M24461 Recurrent dislocation, right knee -M24462 Recurrent dislocation, left knee -M24469 Recurrent dislocation, unspecified knee -M24471 Recurrent dislocation, right ankle -M24472 Recurrent dislocation, left ankle -M24473 Recurrent dislocation, unspecified ankle -M24474 Recurrent dislocation, right foot -M24475 Recurrent dislocation, left foot -M24476 Recurrent dislocation, unspecified foot -M24477 Recurrent dislocation, right toe(s) -M24478 Recurrent dislocation, left toe(s) -M24479 Recurrent dislocation, unspecified toe(s) -M2450 Contracture, unspecified joint -M24511 Contracture, right shoulder -M24512 Contracture, left shoulder -M24519 Contracture, unspecified shoulder -M24521 Contracture, right elbow -M24522 Contracture, left elbow -M24529 Contracture, unspecified elbow -M24531 Contracture, right wrist -M24532 Contracture, left wrist -M24539 Contracture, unspecified wrist -M24541 Contracture, right hand -M24542 Contracture, left hand -M24549 Contracture, unspecified hand -M24551 Contracture, right hip -M24552 Contracture, left hip -M24559 Contracture, unspecified hip -M24561 Contracture, right knee -M24562 Contracture, left knee -M24569 Contracture, unspecified knee -M24571 Contracture, right ankle -M24572 Contracture, left ankle -M24573 Contracture, unspecified ankle -M24574 Contracture, right foot -M24575 Contracture, left foot -M24576 Contracture, unspecified foot -M2460 Ankylosis, unspecified joint -M24611 Ankylosis, right shoulder -M24612 Ankylosis, left shoulder -M24619 Ankylosis, unspecified shoulder -M24621 Ankylosis, right elbow -M24622 Ankylosis, left elbow -M24629 Ankylosis, unspecified elbow -M24631 Ankylosis, right wrist -M24632 Ankylosis, left wrist -M24639 Ankylosis, unspecified wrist -M24641 Ankylosis, right hand -M24642 Ankylosis, left hand -M24649 Ankylosis, unspecified hand -M24651 Ankylosis, right hip -M24652 Ankylosis, left hip -M24659 Ankylosis, unspecified hip -M24661 Ankylosis, right knee -M24662 Ankylosis, left knee -M24669 Ankylosis, unspecified knee -M24671 Ankylosis, right ankle -M24672 Ankylosis, left ankle -M24673 Ankylosis, unspecified ankle -M24674 Ankylosis, right foot -M24675 Ankylosis, left foot -M24676 Ankylosis, unspecified foot -M247 Protrusio acetabuli -M2480 Other specific joint derangements of unspecified joint, not elsewhere classified -M24811 Other specific joint derangements of right shoulder, not elsewhere classified -M24812 Other specific joint derangements of left shoulder, not elsewhere classified -M24819 Other specific joint derangements of unspecified shoulder, not elsewhere classified -M24821 Other specific joint derangements of right elbow, not elsewhere classified -M24822 Other specific joint derangements of left elbow, not elsewhere classified -M24829 Other specific joint derangements of unspecified elbow, not elsewhere classified -M24831 Other specific joint derangements of right wrist, not elsewhere classified -M24832 Other specific joint derangements of left wrist, not elsewhere classified -M24839 Other specific joint derangements of unspecified wrist, not elsewhere classified -M24841 Other specific joint derangements of right hand, not elsewhere classified -M24842 Other specific joint derangements of left hand, not elsewhere classified -M24849 Other specific joint derangements of unspecified hand, not elsewhere classified -M24851 Other specific joint derangements of right hip, not elsewhere classified -M24852 Other specific joint derangements of left hip, not elsewhere classified -M24859 Other specific joint derangements of unspecified hip, not elsewhere classified -M24871 Other specific joint derangements of right ankle, not elsewhere classified -M24872 Other specific joint derangements of left ankle, not elsewhere classified -M24873 Other specific joint derangements of unspecified ankle, not elsewhere classified -M24874 Other specific joint derangements of right foot, not elsewhere classified -M24875 Other specific joint derangements left foot, not elsewhere classified -M24876 Other specific joint derangements of unspecified foot, not elsewhere classified -M249 Joint derangement, unspecified -M2500 Hemarthrosis, unspecified joint -M25011 Hemarthrosis, right shoulder -M25012 Hemarthrosis, left shoulder -M25019 Hemarthrosis, unspecified shoulder -M25021 Hemarthrosis, right elbow -M25022 Hemarthrosis, left elbow -M25029 Hemarthrosis, unspecified elbow -M25031 Hemarthrosis, right wrist -M25032 Hemarthrosis, left wrist -M25039 Hemarthrosis, unspecified wrist -M25041 Hemarthrosis, right hand -M25042 Hemarthrosis, left hand -M25049 Hemarthrosis, unspecified hand -M25051 Hemarthrosis, right hip -M25052 Hemarthrosis, left hip -M25059 Hemarthrosis, unspecified hip -M25061 Hemarthrosis, right knee -M25062 Hemarthrosis, left knee -M25069 Hemarthrosis, unspecified knee -M25071 Hemarthrosis, right ankle -M25072 Hemarthrosis, left ankle -M25073 Hemarthrosis, unspecified ankle -M25074 Hemarthrosis, right foot -M25075 Hemarthrosis, left foot -M25076 Hemarthrosis, unspecified foot -M2508 Hemarthrosis, other specified site -M2510 Fistula, unspecified joint -M25111 Fistula, right shoulder -M25112 Fistula, left shoulder -M25119 Fistula, unspecified shoulder -M25121 Fistula, right elbow -M25122 Fistula, left elbow -M25129 Fistula, unspecified elbow -M25131 Fistula, right wrist -M25132 Fistula, left wrist -M25139 Fistula, unspecified wrist -M25141 Fistula, right hand -M25142 Fistula, left hand -M25149 Fistula, unspecified hand -M25151 Fistula, right hip -M25152 Fistula, left hip -M25159 Fistula, unspecified hip -M25161 Fistula, right knee -M25162 Fistula, left knee -M25169 Fistula, unspecified knee -M25171 Fistula, right ankle -M25172 Fistula, left ankle -M25173 Fistula, unspecified ankle -M25174 Fistula, right foot -M25175 Fistula, left foot -M25176 Fistula, unspecified foot -M2518 Fistula, other specified site -M2520 Flail joint, unspecified joint -M25211 Flail joint, right shoulder -M25212 Flail joint, left shoulder -M25219 Flail joint, unspecified shoulder -M25221 Flail joint, right elbow -M25222 Flail joint, left elbow -M25229 Flail joint, unspecified elbow -M25231 Flail joint, right wrist -M25232 Flail joint, left wrist -M25239 Flail joint, unspecified wrist -M25241 Flail joint, right hand -M25242 Flail joint, left hand -M25249 Flail joint, unspecified hand -M25251 Flail joint, right hip -M25252 Flail joint, left hip -M25259 Flail joint, unspecified hip -M25261 Flail joint, right knee -M25262 Flail joint, left knee -M25269 Flail joint, unspecified knee -M25271 Flail joint, right ankle and foot -M25272 Flail joint, left ankle and foot -M25279 Flail joint, unspecified ankle and foot -M2528 Flail joint, other site -M2530 Other instability, unspecified joint -M25311 Other instability, right shoulder -M25312 Other instability, left shoulder -M25319 Other instability, unspecified shoulder -M25321 Other instability, right elbow -M25322 Other instability, left elbow -M25329 Other instability, unspecified elbow -M25331 Other instability, right wrist -M25332 Other instability, left wrist -M25339 Other instability, unspecified wrist -M25341 Other instability, right hand -M25342 Other instability, left hand -M25349 Other instability, unspecified hand -M25351 Other instability, right hip -M25352 Other instability, left hip -M25359 Other instability, unspecified hip -M25361 Other instability, right knee -M25362 Other instability, left knee -M25369 Other instability, unspecified knee -M25371 Other instability, right ankle -M25372 Other instability, left ankle -M25373 Other instability, unspecified ankle -M25374 Other instability, right foot -M25375 Other instability, left foot -M25376 Other instability, unspecified foot -M2540 Effusion, unspecified joint -M25411 Effusion, right shoulder -M25412 Effusion, left shoulder -M25419 Effusion, unspecified shoulder -M25421 Effusion, right elbow -M25422 Effusion, left elbow -M25429 Effusion, unspecified elbow -M25431 Effusion, right wrist -M25432 Effusion, left wrist -M25439 Effusion, unspecified wrist -M25441 Effusion, right hand -M25442 Effusion, left hand -M25449 Effusion, unspecified hand -M25451 Effusion, right hip -M25452 Effusion, left hip -M25459 Effusion, unspecified hip -M25461 Effusion, right knee -M25462 Effusion, left knee -M25469 Effusion, unspecified knee -M25471 Effusion, right ankle -M25472 Effusion, left ankle -M25473 Effusion, unspecified ankle -M25474 Effusion, right foot -M25475 Effusion, left foot -M25476 Effusion, unspecified foot -M2548 Effusion, other site -M2550 Pain in unspecified joint -M25511 Pain in right shoulder -M25512 Pain in left shoulder -M25519 Pain in unspecified shoulder -M25521 Pain in right elbow -M25522 Pain in left elbow -M25529 Pain in unspecified elbow -M25531 Pain in right wrist -M25532 Pain in left wrist -M25539 Pain in unspecified wrist -M25551 Pain in right hip -M25552 Pain in left hip -M25559 Pain in unspecified hip -M25561 Pain in right knee -M25562 Pain in left knee -M25569 Pain in unspecified knee -M25571 Pain in right ankle and joints of right foot -M25572 Pain in left ankle and joints of left foot -M25579 Pain in unspecified ankle and joints of unspecified foot -M2560 Stiffness of unspecified joint, not elsewhere classified -M25611 Stiffness of right shoulder, not elsewhere classified -M25612 Stiffness of left shoulder, not elsewhere classified -M25619 Stiffness of unspecified shoulder, not elsewhere classified -M25621 Stiffness of right elbow, not elsewhere classified -M25622 Stiffness of left elbow, not elsewhere classified -M25629 Stiffness of unspecified elbow, not elsewhere classified -M25631 Stiffness of right wrist, not elsewhere classified -M25632 Stiffness of left wrist, not elsewhere classified -M25639 Stiffness of unspecified wrist, not elsewhere classified -M25641 Stiffness of right hand, not elsewhere classified -M25642 Stiffness of left hand, not elsewhere classified -M25649 Stiffness of unspecified hand, not elsewhere classified -M25651 Stiffness of right hip, not elsewhere classified -M25652 Stiffness of left hip, not elsewhere classified -M25659 Stiffness of unspecified hip, not elsewhere classified -M25661 Stiffness of right knee, not elsewhere classified -M25662 Stiffness of left knee, not elsewhere classified -M25669 Stiffness of unspecified knee, not elsewhere classified -M25671 Stiffness of right ankle, not elsewhere classified -M25672 Stiffness of left ankle, not elsewhere classified -M25673 Stiffness of unspecified ankle, not elsewhere classified -M25674 Stiffness of right foot, not elsewhere classified -M25675 Stiffness of left foot, not elsewhere classified -M25676 Stiffness of unspecified foot, not elsewhere classified -M2570 Osteophyte, unspecified joint -M25711 Osteophyte, right shoulder -M25712 Osteophyte, left shoulder -M25719 Osteophyte, unspecified shoulder -M25721 Osteophyte, right elbow -M25722 Osteophyte, left elbow -M25729 Osteophyte, unspecified elbow -M25731 Osteophyte, right wrist -M25732 Osteophyte, left wrist -M25739 Osteophyte, unspecified wrist -M25741 Osteophyte, right hand -M25742 Osteophyte, left hand -M25749 Osteophyte, unspecified hand -M25751 Osteophyte, right hip -M25752 Osteophyte, left hip -M25759 Osteophyte, unspecified hip -M25761 Osteophyte, right knee -M25762 Osteophyte, left knee -M25769 Osteophyte, unspecified knee -M25771 Osteophyte, right ankle -M25772 Osteophyte, left ankle -M25773 Osteophyte, unspecified ankle -M25774 Osteophyte, right foot -M25775 Osteophyte, left foot -M25776 Osteophyte, unspecified foot -M2578 Osteophyte, vertebrae -M2580 Other specified joint disorders, unspecified joint -M25811 Other specified joint disorders, right shoulder -M25812 Other specified joint disorders, left shoulder -M25819 Other specified joint disorders, unspecified shoulder -M25821 Other specified joint disorders, right elbow -M25822 Other specified joint disorders, left elbow -M25829 Other specified joint disorders, unspecified elbow -M25831 Other specified joint disorders, right wrist -M25832 Other specified joint disorders, left wrist -M25839 Other specified joint disorders, unspecified wrist -M25841 Other specified joint disorders, right hand -M25842 Other specified joint disorders, left hand -M25849 Other specified joint disorders, unspecified hand -M25851 Other specified joint disorders, right hip -M25852 Other specified joint disorders, left hip -M25859 Other specified joint disorders, unspecified hip -M25861 Other specified joint disorders, right knee -M25862 Other specified joint disorders, left knee -M25869 Other specified joint disorders, unspecified knee -M25871 Other specified joint disorders, right ankle and foot -M25872 Other specified joint disorders, left ankle and foot -M25879 Other specified joint disorders, unspecified ankle and foot -M259 Joint disorder, unspecified -M2600 Unspecified anomaly of jaw size -M2601 Maxillary hyperplasia -M2602 Maxillary hypoplasia -M2603 Mandibular hyperplasia -M2604 Mandibular hypoplasia -M2605 Macrogenia -M2606 Microgenia -M2607 Excessive tuberosity of jaw -M2609 Other specified anomalies of jaw size -M2610 Unspecified anomaly of jaw-cranial base relationship -M2611 Maxillary asymmetry -M2612 Other jaw asymmetry -M2619 Other specified anomalies of jaw-cranial base relationship -M2620 Unspecified anomaly of dental arch relationship -M26211 Malocclusion, Angle's class I -M26212 Malocclusion, Angle's class II -M26213 Malocclusion, Angle's class III -M26219 Malocclusion, Angle's class, unspecified -M26220 Open anterior occlusal relationship -M26221 Open posterior occlusal relationship -M2623 Excessive horizontal overlap -M2624 Reverse articulation -M2625 Anomalies of interarch distance -M2629 Other anomalies of dental arch relationship -M2630 Unspecified anomaly of tooth position of fully erupted tooth or teeth -M2631 Crowding of fully erupted teeth -M2632 Excessive spacing of fully erupted teeth -M2633 Horizontal displacement of fully erupted tooth or teeth -M2634 Vertical displacement of fully erupted tooth or teeth -M2635 Rotation of fully erupted tooth or teeth -M2636 Insufficient interocclusal distance of fully erupted teeth (ridge) -M2637 Excessive interocclusal distance of fully erupted teeth -M2639 Other anomalies of tooth position of fully erupted tooth or teeth -M264 Malocclusion, unspecified -M2650 Dentofacial functional abnormalities, unspecified -M2651 Abnormal jaw closure -M2652 Limited mandibular range of motion -M2653 Deviation in opening and closing of the mandible -M2654 Insufficient anterior guidance -M2655 Centric occlusion maximum intercuspation discrepancy -M2656 Non-working side interference -M2657 Lack of posterior occlusal support -M2659 Other dentofacial functional abnormalities -M2660 Temporomandibular joint disorder, unspecified -M2661 Adhesions and ankylosis of temporomandibular joint -M2662 Arthralgia of temporomandibular joint -M2663 Articular disc disorder of temporomandibular joint -M2669 Other specified disorders of temporomandibular joint -M2670 Unspecified alveolar anomaly -M2671 Alveolar maxillary hyperplasia -M2672 Alveolar mandibular hyperplasia -M2673 Alveolar maxillary hypoplasia -M2674 Alveolar mandibular hypoplasia -M2679 Other specified alveolar anomalies -M2681 Anterior soft tissue impingement -M2682 Posterior soft tissue impingement -M2689 Other dentofacial anomalies -M269 Dentofacial anomaly, unspecified -M270 Developmental disorders of jaws -M271 Giant cell granuloma, central -M272 Inflammatory conditions of jaws -M273 Alveolitis of jaws -M2740 Unspecified cyst of jaw -M2749 Other cysts of jaw -M2751 Perforation of root canal space due to endodontic treatment -M2752 Endodontic overfill -M2753 Endodontic underfill -M2759 Other periradicular pathology associated with previous endodontic treatment -M2761 Osseointegration failure of dental implant -M2762 Post-osseointegration biological failure of dental implant -M2763 Post-osseointegration mechanical failure of dental implant -M2769 Other endosseous dental implant failure -M278 Other specified diseases of jaws -M279 Disease of jaws, unspecified -M300 Polyarteritis nodosa -M301 Polyarteritis with lung involvement [Churg-Strauss] -M302 Juvenile polyarteritis -M303 Mucocutaneous lymph node syndrome [Kawasaki] -M308 Other conditions related to polyarteritis nodosa -M310 Hypersensitivity angiitis -M311 Thrombotic microangiopathy -M312 Lethal midline granuloma -M3130 Wegener's granulomatosis without renal involvement -M3131 Wegener's granulomatosis with renal involvement -M314 Aortic arch syndrome [Takayasu] -M315 Giant cell arteritis with polymyalgia rheumatica -M316 Other giant cell arteritis -M317 Microscopic polyangiitis -M318 Other specified necrotizing vasculopathies -M319 Necrotizing vasculopathy, unspecified -M320 Drug-induced systemic lupus erythematosus -M3210 Systemic lupus erythematosus, organ or system involvement unspecified -M3211 Endocarditis in systemic lupus erythematosus -M3212 Pericarditis in systemic lupus erythematosus -M3213 Lung involvement in systemic lupus erythematosus -M3214 Glomerular disease in systemic lupus erythematosus -M3215 Tubulo-interstitial nephropathy in systemic lupus erythematosus -M3219 Other organ or system involvement in systemic lupus erythematosus -M328 Other forms of systemic lupus erythematosus -M329 Systemic lupus erythematosus, unspecified -M3300 Juvenile dermatopolymyositis, organ involvement unspecified -M3301 Juvenile dermatopolymyositis with respiratory involvement -M3302 Juvenile dermatopolymyositis with myopathy -M3309 Juvenile dermatopolymyositis with other organ involvement -M3310 Other dermatopolymyositis, organ involvement unspecified -M3311 Other dermatopolymyositis with respiratory involvement -M3312 Other dermatopolymyositis with myopathy -M3319 Other dermatopolymyositis with other organ involvement -M3320 Polymyositis, organ involvement unspecified -M3321 Polymyositis with respiratory involvement -M3322 Polymyositis with myopathy -M3329 Polymyositis with other organ involvement -M3390 Dermatopolymyositis, unspecified, organ involvement unspecified -M3391 Dermatopolymyositis, unspecified with respiratory involvement -M3392 Dermatopolymyositis, unspecified with myopathy -M3399 Dermatopolymyositis, unspecified with other organ involvement -M340 Progressive systemic sclerosis -M341 CR(E)ST syndrome -M342 Systemic sclerosis induced by drug and chemical -M3481 Systemic sclerosis with lung involvement -M3482 Systemic sclerosis with myopathy -M3483 Systemic sclerosis with polyneuropathy -M3489 Other systemic sclerosis -M349 Systemic sclerosis, unspecified -M3500 Sicca syndrome, unspecified -M3501 Sicca syndrome with keratoconjunctivitis -M3502 Sicca syndrome with lung involvement -M3503 Sicca syndrome with myopathy -M3504 Sicca syndrome with tubulo-interstitial nephropathy -M3509 Sicca syndrome with other organ involvement -M351 Other overlap syndromes -M352 Behcet's disease -M353 Polymyalgia rheumatica -M354 Diffuse (eosinophilic) fasciitis -M355 Multifocal fibrosclerosis -M356 Relapsing panniculitis [Weber-Christian] -M357 Hypermobility syndrome -M358 Other specified systemic involvement of connective tissue -M359 Systemic involvement of connective tissue, unspecified -M360 Dermato(poly)myositis in neoplastic disease -M361 Arthropathy in neoplastic disease -M362 Hemophilic arthropathy -M363 Arthropathy in other blood disorders -M364 Arthropathy in hypersensitivity reactions classified elsewhere -M368 Systemic disorders of connective tissue in other diseases classified elsewhere -M4000 Postural kyphosis, site unspecified -M4003 Postural kyphosis, cervicothoracic region -M4004 Postural kyphosis, thoracic region -M4005 Postural kyphosis, thoracolumbar region -M4010 Other secondary kyphosis, site unspecified -M4012 Other secondary kyphosis, cervical region -M4013 Other secondary kyphosis, cervicothoracic region -M4014 Other secondary kyphosis, thoracic region -M4015 Other secondary kyphosis, thoracolumbar region -M40202 Unspecified kyphosis, cervical region -M40203 Unspecified kyphosis, cervicothoracic region -M40204 Unspecified kyphosis, thoracic region -M40205 Unspecified kyphosis, thoracolumbar region -M40209 Unspecified kyphosis, site unspecified -M40292 Other kyphosis, cervical region -M40293 Other kyphosis, cervicothoracic region -M40294 Other kyphosis, thoracic region -M40295 Other kyphosis, thoracolumbar region -M40299 Other kyphosis, site unspecified -M4030 Flatback syndrome, site unspecified -M4035 Flatback syndrome, thoracolumbar region -M4036 Flatback syndrome, lumbar region -M4037 Flatback syndrome, lumbosacral region -M4040 Postural lordosis, site unspecified -M4045 Postural lordosis, thoracolumbar region -M4046 Postural lordosis, lumbar region -M4047 Postural lordosis, lumbosacral region -M4050 Lordosis, unspecified, site unspecified -M4055 Lordosis, unspecified, thoracolumbar region -M4056 Lordosis, unspecified, lumbar region -M4057 Lordosis, unspecified, lumbosacral region -M4100 Infantile idiopathic scoliosis, site unspecified -M4102 Infantile idiopathic scoliosis, cervical region -M4103 Infantile idiopathic scoliosis, cervicothoracic region -M4104 Infantile idiopathic scoliosis, thoracic region -M4105 Infantile idiopathic scoliosis, thoracolumbar region -M4106 Infantile idiopathic scoliosis, lumbar region -M4107 Infantile idiopathic scoliosis, lumbosacral region -M4108 Infantile idiopathic scoliosis, sacral and sacrococcygeal region -M41112 Juvenile idiopathic scoliosis, cervical region -M41113 Juvenile idiopathic scoliosis, cervicothoracic region -M41114 Juvenile idiopathic scoliosis, thoracic region -M41115 Juvenile idiopathic scoliosis, thoracolumbar region -M41116 Juvenile idiopathic scoliosis, lumbar region -M41117 Juvenile idiopathic scoliosis, lumbosacral region -M41119 Juvenile idiopathic scoliosis, site unspecified -M41122 Adolescent idiopathic scoliosis, cervical region -M41123 Adolescent idiopathic scoliosis, cervicothoracic region -M41124 Adolescent idiopathic scoliosis, thoracic region -M41125 Adolescent idiopathic scoliosis, thoracolumbar region -M41126 Adolescent idiopathic scoliosis, lumbar region -M41127 Adolescent idiopathic scoliosis, lumbosacral region -M41129 Adolescent idiopathic scoliosis, site unspecified -M4120 Other idiopathic scoliosis, site unspecified -M4122 Other idiopathic scoliosis, cervical region -M4123 Other idiopathic scoliosis, cervicothoracic region -M4124 Other idiopathic scoliosis, thoracic region -M4125 Other idiopathic scoliosis, thoracolumbar region -M4126 Other idiopathic scoliosis, lumbar region -M4127 Other idiopathic scoliosis, lumbosacral region -M4130 Thoracogenic scoliosis, site unspecified -M4134 Thoracogenic scoliosis, thoracic region -M4135 Thoracogenic scoliosis, thoracolumbar region -M4140 Neuromuscular scoliosis, site unspecified -M4141 Neuromuscular scoliosis, occipito-atlanto-axial region -M4142 Neuromuscular scoliosis, cervical region -M4143 Neuromuscular scoliosis, cervicothoracic region -M4144 Neuromuscular scoliosis, thoracic region -M4145 Neuromuscular scoliosis, thoracolumbar region -M4146 Neuromuscular scoliosis, lumbar region -M4147 Neuromuscular scoliosis, lumbosacral region -M4150 Other secondary scoliosis, site unspecified -M4152 Other secondary scoliosis, cervical region -M4153 Other secondary scoliosis, cervicothoracic region -M4154 Other secondary scoliosis, thoracic region -M4155 Other secondary scoliosis, thoracolumbar region -M4156 Other secondary scoliosis, lumbar region -M4157 Other secondary scoliosis, lumbosacral region -M4180 Other forms of scoliosis, site unspecified -M4182 Other forms of scoliosis, cervical region -M4183 Other forms of scoliosis, cervicothoracic region -M4184 Other forms of scoliosis, thoracic region -M4185 Other forms of scoliosis, thoracolumbar region -M4186 Other forms of scoliosis, lumbar region -M4187 Other forms of scoliosis, lumbosacral region -M419 Scoliosis, unspecified -M4200 Juvenile osteochondrosis of spine, site unspecified -M4201 Juvenile osteochondrosis of spine, occipito-atlanto-axial region -M4202 Juvenile osteochondrosis of spine, cervical region -M4203 Juvenile osteochondrosis of spine, cervicothoracic region -M4204 Juvenile osteochondrosis of spine, thoracic region -M4205 Juvenile osteochondrosis of spine, thoracolumbar region -M4206 Juvenile osteochondrosis of spine, lumbar region -M4207 Juvenile osteochondrosis of spine, lumbosacral region -M4208 Juvenile osteochondrosis of spine, sacral and sacrococcygeal region -M4209 Juvenile osteochondrosis of spine, multiple sites in spine -M4210 Adult osteochondrosis of spine, site unspecified -M4211 Adult osteochondrosis of spine, occipito-atlanto-axial region -M4212 Adult osteochondrosis of spine, cervical region -M4213 Adult osteochondrosis of spine, cervicothoracic region -M4214 Adult osteochondrosis of spine, thoracic region -M4215 Adult osteochondrosis of spine, thoracolumbar region -M4216 Adult osteochondrosis of spine, lumbar region -M4217 Adult osteochondrosis of spine, lumbosacral region -M4218 Adult osteochondrosis of spine, sacral and sacrococcygeal region -M4219 Adult osteochondrosis of spine, multiple sites in spine -M429 Spinal osteochondrosis, unspecified -M4300 Spondylolysis, site unspecified -M4301 Spondylolysis, occipito-atlanto-axial region -M4302 Spondylolysis, cervical region -M4303 Spondylolysis, cervicothoracic region -M4304 Spondylolysis, thoracic region -M4305 Spondylolysis, thoracolumbar region -M4306 Spondylolysis, lumbar region -M4307 Spondylolysis, lumbosacral region -M4308 Spondylolysis, sacral and sacrococcygeal region -M4309 Spondylolysis, multiple sites in spine -M4310 Spondylolisthesis, site unspecified -M4311 Spondylolisthesis, occipito-atlanto-axial region -M4312 Spondylolisthesis, cervical region -M4313 Spondylolisthesis, cervicothoracic region -M4314 Spondylolisthesis, thoracic region -M4315 Spondylolisthesis, thoracolumbar region -M4316 Spondylolisthesis, lumbar region -M4317 Spondylolisthesis, lumbosacral region -M4318 Spondylolisthesis, sacral and sacrococcygeal region -M4319 Spondylolisthesis, multiple sites in spine -M4320 Fusion of spine, site unspecified -M4321 Fusion of spine, occipito-atlanto-axial region -M4322 Fusion of spine, cervical region -M4323 Fusion of spine, cervicothoracic region -M4324 Fusion of spine, thoracic region -M4325 Fusion of spine, thoracolumbar region -M4326 Fusion of spine, lumbar region -M4327 Fusion of spine, lumbosacral region -M4328 Fusion of spine, sacral and sacrococcygeal region -M433 Recurrent atlantoaxial dislocation with myelopathy -M434 Other recurrent atlantoaxial dislocation -M435X2 Other recurrent vertebral dislocation, cervical region -M435X3 Other recurrent vertebral dislocation, cervicothoracic region -M435X4 Other recurrent vertebral dislocation, thoracic region -M435X5 Other recurrent vertebral dislocation, thoracolumbar region -M435X6 Other recurrent vertebral dislocation, lumbar region -M435X7 Other recurrent vertebral dislocation, lumbosacral region -M435X8 Other recurrent vertebral dislocation, sacral and sacrococcygeal region -M435X9 Other recurrent vertebral dislocation, site unspecified -M436 Torticollis -M438X1 Other specified deforming dorsopathies, occipito-atlanto-axial region -M438X2 Other specified deforming dorsopathies, cervical region -M438X3 Other specified deforming dorsopathies, cervicothoracic region -M438X4 Other specified deforming dorsopathies, thoracic region -M438X5 Other specified deforming dorsopathies, thoracolumbar region -M438X6 Other specified deforming dorsopathies, lumbar region -M438X7 Other specified deforming dorsopathies, lumbosacral region -M438X8 Other specified deforming dorsopathies, sacral and sacrococcygeal region -M438X9 Other specified deforming dorsopathies, site unspecified -M439 Deforming dorsopathy, unspecified -M450 Ankylosing spondylitis of multiple sites in spine -M451 Ankylosing spondylitis of occipito-atlanto-axial region -M452 Ankylosing spondylitis of cervical region -M453 Ankylosing spondylitis of cervicothoracic region -M454 Ankylosing spondylitis of thoracic region -M455 Ankylosing spondylitis of thoracolumbar region -M456 Ankylosing spondylitis lumbar region -M457 Ankylosing spondylitis of lumbosacral region -M458 Ankylosing spondylitis sacral and sacrococcygeal region -M459 Ankylosing spondylitis of unspecified sites in spine -M4600 Spinal enthesopathy, site unspecified -M4601 Spinal enthesopathy, occipito-atlanto-axial region -M4602 Spinal enthesopathy, cervical region -M4603 Spinal enthesopathy, cervicothoracic region -M4604 Spinal enthesopathy, thoracic region -M4605 Spinal enthesopathy, thoracolumbar region -M4606 Spinal enthesopathy, lumbar region -M4607 Spinal enthesopathy, lumbosacral region -M4608 Spinal enthesopathy, sacral and sacrococcygeal region -M4609 Spinal enthesopathy, multiple sites in spine -M461 Sacroiliitis, not elsewhere classified -M4620 Osteomyelitis of vertebra, site unspecified -M4621 Osteomyelitis of vertebra, occipito-atlanto-axial region -M4622 Osteomyelitis of vertebra, cervical region -M4623 Osteomyelitis of vertebra, cervicothoracic region -M4624 Osteomyelitis of vertebra, thoracic region -M4625 Osteomyelitis of vertebra, thoracolumbar region -M4626 Osteomyelitis of vertebra, lumbar region -M4627 Osteomyelitis of vertebra, lumbosacral region -M4628 Osteomyelitis of vertebra, sacral and sacrococcygeal region -M4630 Infection of intervertebral disc (pyogenic), site unspecified -M4631 Infection of intervertebral disc (pyogenic), occipito-atlanto-axial region -M4632 Infection of intervertebral disc (pyogenic), cervical region -M4633 Infection of intervertebral disc (pyogenic), cervicothoracic region -M4634 Infection of intervertebral disc (pyogenic), thoracic region -M4635 Infection of intervertebral disc (pyogenic), thoracolumbar region -M4636 Infection of intervertebral disc (pyogenic), lumbar region -M4637 Infection of intervertebral disc (pyogenic), lumbosacral region -M4638 Infection of intervertebral disc (pyogenic), sacral and sacrococcygeal region -M4639 Infection of intervertebral disc (pyogenic), multiple sites in spine -M4640 Discitis, unspecified, site unspecified -M4641 Discitis, unspecified, occipito-atlanto-axial region -M4642 Discitis, unspecified, cervical region -M4643 Discitis, unspecified, cervicothoracic region -M4644 Discitis, unspecified, thoracic region -M4645 Discitis, unspecified, thoracolumbar region -M4646 Discitis, unspecified, lumbar region -M4647 Discitis, unspecified, lumbosacral region -M4648 Discitis, unspecified, sacral and sacrococcygeal region -M4649 Discitis, unspecified, multiple sites in spine -M4650 Other infective spondylopathies, site unspecified -M4651 Other infective spondylopathies, occipito-atlanto-axial region -M4652 Other infective spondylopathies, cervical region -M4653 Other infective spondylopathies, cervicothoracic region -M4654 Other infective spondylopathies, thoracic region -M4655 Other infective spondylopathies, thoracolumbar region -M4656 Other infective spondylopathies, lumbar region -M4657 Other infective spondylopathies, lumbosacral region -M4658 Other infective spondylopathies, sacral and sacrococcygeal region -M4659 Other infective spondylopathies, multiple sites in spine -M4680 Other specified inflammatory spondylopathies, site unspecified -M4681 Other specified inflammatory spondylopathies, occipito-atlanto-axial region -M4682 Other specified inflammatory spondylopathies, cervical region -M4683 Other specified inflammatory spondylopathies, cervicothoracic region -M4684 Other specified inflammatory spondylopathies, thoracic region -M4685 Other specified inflammatory spondylopathies, thoracolumbar region -M4686 Other specified inflammatory spondylopathies, lumbar region -M4687 Other specified inflammatory spondylopathies, lumbosacral region -M4688 Other specified inflammatory spondylopathies, sacral and sacrococcygeal region -M4689 Other specified inflammatory spondylopathies, multiple sites in spine -M4690 Unspecified inflammatory spondylopathy, site unspecified -M4691 Unspecified inflammatory spondylopathy, occipito-atlanto-axial region -M4692 Unspecified inflammatory spondylopathy, cervical region -M4693 Unspecified inflammatory spondylopathy, cervicothoracic region -M4694 Unspecified inflammatory spondylopathy, thoracic region -M4695 Unspecified inflammatory spondylopathy, thoracolumbar region -M4696 Unspecified inflammatory spondylopathy, lumbar region -M4697 Unspecified inflammatory spondylopathy, lumbosacral region -M4698 Unspecified inflammatory spondylopathy, sacral and sacrococcygeal region -M4699 Unspecified inflammatory spondylopathy, multiple sites in spine -M47011 Anterior spinal artery compression syndromes, occipito-atlanto-axial region -M47012 Anterior spinal artery compression syndromes, cervical region -M47013 Anterior spinal artery compression syndromes, cervicothoracic region -M47014 Anterior spinal artery compression syndromes, thoracic region -M47015 Anterior spinal artery compression syndromes, thoracolumbar region -M47016 Anterior spinal artery compression syndromes, lumbar region -M47019 Anterior spinal artery compression syndromes, site unspecified -M47021 Vertebral artery compression syndromes, occipito-atlanto-axial region -M47022 Vertebral artery compression syndromes, cervical region -M47029 Vertebral artery compression syndromes, site unspecified -M4710 Other spondylosis with myelopathy, site unspecified -M4711 Other spondylosis with myelopathy, occipito-atlanto-axial region -M4712 Other spondylosis with myelopathy, cervical region -M4713 Other spondylosis with myelopathy, cervicothoracic region -M4714 Other spondylosis with myelopathy, thoracic region -M4715 Other spondylosis with myelopathy, thoracolumbar region -M4716 Other spondylosis with myelopathy, lumbar region -M4720 Other spondylosis with radiculopathy, site unspecified -M4721 Other spondylosis with radiculopathy, occipito-atlanto-axial region -M4722 Other spondylosis with radiculopathy, cervical region -M4723 Other spondylosis with radiculopathy, cervicothoracic region -M4724 Other spondylosis with radiculopathy, thoracic region -M4725 Other spondylosis with radiculopathy, thoracolumbar region -M4726 Other spondylosis with radiculopathy, lumbar region -M4727 Other spondylosis with radiculopathy, lumbosacral region -M4728 Other spondylosis with radiculopathy, sacral and sacrococcygeal region -M47811 Spondylosis without myelopathy or radiculopathy, occipito-atlanto-axial region -M47812 Spondylosis without myelopathy or radiculopathy, cervical region -M47813 Spondylosis without myelopathy or radiculopathy, cervicothoracic region -M47814 Spondylosis without myelopathy or radiculopathy, thoracic region -M47815 Spondylosis without myelopathy or radiculopathy, thoracolumbar region -M47816 Spondylosis without myelopathy or radiculopathy, lumbar region -M47817 Spondylosis without myelopathy or radiculopathy, lumbosacral region -M47818 Spondylosis without myelopathy or radiculopathy, sacral and sacrococcygeal region -M47819 Spondylosis without myelopathy or radiculopathy, site unspecified -M47891 Other spondylosis, occipito-atlanto-axial region -M47892 Other spondylosis, cervical region -M47893 Other spondylosis, cervicothoracic region -M47894 Other spondylosis, thoracic region -M47895 Other spondylosis, thoracolumbar region -M47896 Other spondylosis, lumbar region -M47897 Other spondylosis, lumbosacral region -M47898 Other spondylosis, sacral and sacrococcygeal region -M47899 Other spondylosis, site unspecified -M479 Spondylosis, unspecified -M4800 Spinal stenosis, site unspecified -M4801 Spinal stenosis, occipito-atlanto-axial region -M4802 Spinal stenosis, cervical region -M4803 Spinal stenosis, cervicothoracic region -M4804 Spinal stenosis, thoracic region -M4805 Spinal stenosis, thoracolumbar region -M4806 Spinal stenosis, lumbar region -M4807 Spinal stenosis, lumbosacral region -M4808 Spinal stenosis, sacral and sacrococcygeal region -M4810 Ankylosing hyperostosis [Forestier], site unspecified -M4811 Ankylosing hyperostosis [Forestier], occipito-atlanto-axial region -M4812 Ankylosing hyperostosis [Forestier], cervical region -M4813 Ankylosing hyperostosis [Forestier], cervicothoracic region -M4814 Ankylosing hyperostosis [Forestier], thoracic region -M4815 Ankylosing hyperostosis [Forestier], thoracolumbar region -M4816 Ankylosing hyperostosis [Forestier], lumbar region -M4817 Ankylosing hyperostosis [Forestier], lumbosacral region -M4818 Ankylosing hyperostosis [Forestier], sacral and sacrococcygeal region -M4819 Ankylosing hyperostosis [Forestier], multiple sites in spine -M4820 Kissing spine, site unspecified -M4821 Kissing spine, occipito-atlanto-axial region -M4822 Kissing spine, cervical region -M4823 Kissing spine, cervicothoracic region -M4824 Kissing spine, thoracic region -M4825 Kissing spine, thoracolumbar region -M4826 Kissing spine, lumbar region -M4827 Kissing spine, lumbosacral region -M4830 Traumatic spondylopathy, site unspecified -M4831 Traumatic spondylopathy, occipito-atlanto-axial region -M4832 Traumatic spondylopathy, cervical region -M4833 Traumatic spondylopathy, cervicothoracic region -M4834 Traumatic spondylopathy, thoracic region -M4835 Traumatic spondylopathy, thoracolumbar region -M4836 Traumatic spondylopathy, lumbar region -M4837 Traumatic spondylopathy, lumbosacral region -M4838 Traumatic spondylopathy, sacral and sacrococcygeal region -M4840XA Fatigue fracture of vertebra, site unspecified, initial encounter for fracture -M4840XD Fatigue fracture of vertebra, site unspecified, subsequent encounter for fracture with routine healing -M4840XG Fatigue fracture of vertebra, site unspecified, subsequent encounter for fracture with delayed healing -M4840XS Fatigue fracture of vertebra, site unspecified, sequela of fracture -M4841XA Fatigue fracture of vertebra, occipito-atlanto-axial region, initial encounter for fracture -M4841XD Fatigue fracture of vertebra, occipito-atlanto-axial region, subsequent encounter for fracture with routine healing -M4841XG Fatigue fracture of vertebra, occipito-atlanto-axial region, subsequent encounter for fracture with delayed healing -M4841XS Fatigue fracture of vertebra, occipito-atlanto-axial region, sequela of fracture -M4842XA Fatigue fracture of vertebra, cervical region, initial encounter for fracture -M4842XD Fatigue fracture of vertebra, cervical region, subsequent encounter for fracture with routine healing -M4842XG Fatigue fracture of vertebra, cervical region, subsequent encounter for fracture with delayed healing -M4842XS Fatigue fracture of vertebra, cervical region, sequela of fracture -M4843XA Fatigue fracture of vertebra, cervicothoracic region, initial encounter for fracture -M4843XD Fatigue fracture of vertebra, cervicothoracic region, subsequent encounter for fracture with routine healing -M4843XG Fatigue fracture of vertebra, cervicothoracic region, subsequent encounter for fracture with delayed healing -M4843XS Fatigue fracture of vertebra, cervicothoracic region, sequela of fracture -M4844XA Fatigue fracture of vertebra, thoracic region, initial encounter for fracture -M4844XD Fatigue fracture of vertebra, thoracic region, subsequent encounter for fracture with routine healing -M4844XG Fatigue fracture of vertebra, thoracic region, subsequent encounter for fracture with delayed healing -M4844XS Fatigue fracture of vertebra, thoracic region, sequela of fracture -M4845XA Fatigue fracture of vertebra, thoracolumbar region, initial encounter for fracture -M4845XD Fatigue fracture of vertebra, thoracolumbar region, subsequent encounter for fracture with routine healing -M4845XG Fatigue fracture of vertebra, thoracolumbar region, subsequent encounter for fracture with delayed healing -M4845XS Fatigue fracture of vertebra, thoracolumbar region, sequela of fracture -M4846XA Fatigue fracture of vertebra, lumbar region, initial encounter for fracture -M4846XD Fatigue fracture of vertebra, lumbar region, subsequent encounter for fracture with routine healing -M4846XG Fatigue fracture of vertebra, lumbar region, subsequent encounter for fracture with delayed healing -M4846XS Fatigue fracture of vertebra, lumbar region, sequela of fracture -M4847XA Fatigue fracture of vertebra, lumbosacral region, initial encounter for fracture -M4847XD Fatigue fracture of vertebra, lumbosacral region, subsequent encounter for fracture with routine healing -M4847XG Fatigue fracture of vertebra, lumbosacral region, subsequent encounter for fracture with delayed healing -M4847XS Fatigue fracture of vertebra, lumbosacral region, sequela of fracture -M4848XA Fatigue fracture of vertebra, sacral and sacrococcygeal region, initial encounter for fracture -M4848XD Fatigue fracture of vertebra, sacral and sacrococcygeal region, subsequent encounter for fracture with routine healing -M4848XG Fatigue fracture of vertebra, sacral and sacrococcygeal region, subsequent encounter for fracture with delayed healing -M4848XS Fatigue fracture of vertebra, sacral and sacrococcygeal region, sequela of fracture -M4850XA Collapsed vertebra, not elsewhere classified, site unspecified, initial encounter for fracture -M4850XD Collapsed vertebra, not elsewhere classified, site unspecified, subsequent encounter for fracture with routine healing -M4850XG Collapsed vertebra, not elsewhere classified, site unspecified, subsequent encounter for fracture with delayed healing -M4850XS Collapsed vertebra, not elsewhere classified, site unspecified, sequela of fracture -M4851XA Collapsed vertebra, not elsewhere classified, occipito-atlanto-axial region, initial encounter for fracture -M4851XD Collapsed vertebra, not elsewhere classified, occipito-atlanto-axial region, subsequent encounter for fracture with routine healing -M4851XG Collapsed vertebra, not elsewhere classified, occipito-atlanto-axial region, subsequent encounter for fracture with delayed healing -M4851XS Collapsed vertebra, not elsewhere classified, occipito-atlanto-axial region, sequela of fracture -M4852XA Collapsed vertebra, not elsewhere classified, cervical region, initial encounter for fracture -M4852XD Collapsed vertebra, not elsewhere classified, cervical region, subsequent encounter for fracture with routine healing -M4852XG Collapsed vertebra, not elsewhere classified, cervical region, subsequent encounter for fracture with delayed healing -M4852XS Collapsed vertebra, not elsewhere classified, cervical region, sequela of fracture -M4853XA Collapsed vertebra, not elsewhere classified, cervicothoracic region, initial encounter for fracture -M4853XD Collapsed vertebra, not elsewhere classified, cervicothoracic region, subsequent encounter for fracture with routine healing -M4853XG Collapsed vertebra, not elsewhere classified, cervicothoracic region, subsequent encounter for fracture with delayed healing -M4853XS Collapsed vertebra, not elsewhere classified, cervicothoracic region, sequela of fracture -M4854XA Collapsed vertebra, not elsewhere classified, thoracic region, initial encounter for fracture -M4854XD Collapsed vertebra, not elsewhere classified, thoracic region, subsequent encounter for fracture with routine healing -M4854XG Collapsed vertebra, not elsewhere classified, thoracic region, subsequent encounter for fracture with delayed healing -M4854XS Collapsed vertebra, not elsewhere classified, thoracic region, sequela of fracture -M4855XA Collapsed vertebra, not elsewhere classified, thoracolumbar region, initial encounter for fracture -M4855XD Collapsed vertebra, not elsewhere classified, thoracolumbar region, subsequent encounter for fracture with routine healing -M4855XG Collapsed vertebra, not elsewhere classified, thoracolumbar region, subsequent encounter for fracture with delayed healing -M4855XS Collapsed vertebra, not elsewhere classified, thoracolumbar region, sequela of fracture -M4856XA Collapsed vertebra, not elsewhere classified, lumbar region, initial encounter for fracture -M4856XD Collapsed vertebra, not elsewhere classified, lumbar region, subsequent encounter for fracture with routine healing -M4856XG Collapsed vertebra, not elsewhere classified, lumbar region, subsequent encounter for fracture with delayed healing -M4856XS Collapsed vertebra, not elsewhere classified, lumbar region, sequela of fracture -M4857XA Collapsed vertebra, not elsewhere classified, lumbosacral region, initial encounter for fracture -M4857XD Collapsed vertebra, not elsewhere classified, lumbosacral region, subsequent encounter for fracture with routine healing -M4857XG Collapsed vertebra, not elsewhere classified, lumbosacral region, subsequent encounter for fracture with delayed healing -M4857XS Collapsed vertebra, not elsewhere classified, lumbosacral region, sequela of fracture -M4858XA Collapsed vertebra, not elsewhere classified, sacral and sacrococcygeal region, initial encounter for fracture -M4858XD Collapsed vertebra, not elsewhere classified, sacral and sacrococcygeal region, subsequent encounter for fracture with routine healing -M4858XG Collapsed vertebra, not elsewhere classified, sacral and sacrococcygeal region, subsequent encounter for fracture with delayed healing -M4858XS Collapsed vertebra, not elsewhere classified, sacral and sacrococcygeal region, sequela of fracture -M488X1 Other specified spondylopathies, occipito-atlanto-axial region -M488X2 Other specified spondylopathies, cervical region -M488X3 Other specified spondylopathies, cervicothoracic region -M488X4 Other specified spondylopathies, thoracic region -M488X5 Other specified spondylopathies, thoracolumbar region -M488X6 Other specified spondylopathies, lumbar region -M488X7 Other specified spondylopathies, lumbosacral region -M488X8 Other specified spondylopathies, sacral and sacrococcygeal region -M488X9 Other specified spondylopathies, site unspecified -M489 Spondylopathy, unspecified -M4980 Spondylopathy in diseases classified elsewhere, site unspecified -M4981 Spondylopathy in diseases classified elsewhere, occipito-atlanto-axial region -M4982 Spondylopathy in diseases classified elsewhere, cervical region -M4983 Spondylopathy in diseases classified elsewhere, cervicothoracic region -M4984 Spondylopathy in diseases classified elsewhere, thoracic region -M4985 Spondylopathy in diseases classified elsewhere, thoracolumbar region -M4986 Spondylopathy in diseases classified elsewhere, lumbar region -M4987 Spondylopathy in diseases classified elsewhere, lumbosacral region -M4988 Spondylopathy in diseases classified elsewhere, sacral and sacrococcygeal region -M4989 Spondylopathy in diseases classified elsewhere, multiple sites in spine -M5000 Cervical disc disorder with myelopathy, unspecified cervical region -M5001 Cervical disc disorder with myelopathy, high cervical region -M5002 Cervical disc disorder with myelopathy, mid-cervical region -M5003 Cervical disc disorder with myelopathy, cervicothoracic region -M5010 Cervical disc disorder with radiculopathy, unspecified cervical region -M5011 Cervical disc disorder with radiculopathy, high cervical region -M5012 Cervical disc disorder with radiculopathy, mid-cervical region -M5013 Cervical disc disorder with radiculopathy, cervicothoracic region -M5020 Other cervical disc displacement, unspecified cervical region -M5021 Other cervical disc displacement, high cervical region -M5022 Other cervical disc displacement, mid-cervical region -M5023 Other cervical disc displacement, cervicothoracic region -M5030 Other cervical disc degeneration, unspecified cervical region -M5031 Other cervical disc degeneration, high cervical region -M5032 Other cervical disc degeneration, mid-cervical region -M5033 Other cervical disc degeneration, cervicothoracic region -M5080 Other cervical disc disorders, unspecified cervical region -M5081 Other cervical disc disorders, high cervical region -M5082 Other cervical disc disorders, mid-cervical region -M5083 Other cervical disc disorders, cervicothoracic region -M5090 Cervical disc disorder, unspecified, unspecified cervical region -M5091 Cervical disc disorder, unspecified, high cervical region -M5092 Cervical disc disorder, unspecified, mid-cervical region -M5093 Cervical disc disorder, unspecified, cervicothoracic region -M5104 Intervertebral disc disorders with myelopathy, thoracic region -M5105 Intervertebral disc disorders with myelopathy, thoracolumbar region -M5106 Intervertebral disc disorders with myelopathy, lumbar region -M5114 Intervertebral disc disorders with radiculopathy, thoracic region -M5115 Intervertebral disc disorders with radiculopathy, thoracolumbar region -M5116 Intervertebral disc disorders with radiculopathy, lumbar region -M5117 Intervertebral disc disorders with radiculopathy, lumbosacral region -M5124 Other intervertebral disc displacement, thoracic region -M5125 Other intervertebral disc displacement, thoracolumbar region -M5126 Other intervertebral disc displacement, lumbar region -M5127 Other intervertebral disc displacement, lumbosacral region -M5134 Other intervertebral disc degeneration, thoracic region -M5135 Other intervertebral disc degeneration, thoracolumbar region -M5136 Other intervertebral disc degeneration, lumbar region -M5137 Other intervertebral disc degeneration, lumbosacral region -M5144 Schmorl's nodes, thoracic region -M5145 Schmorl's nodes, thoracolumbar region -M5146 Schmorl's nodes, lumbar region -M5147 Schmorl's nodes, lumbosacral region -M5184 Other intervertebral disc disorders, thoracic region -M5185 Other intervertebral disc disorders, thoracolumbar region -M5186 Other intervertebral disc disorders, lumbar region -M5187 Other intervertebral disc disorders, lumbosacral region -M519 Unspecified thoracic, thoracolumbar and lumbosacral intervertebral disc disorder -M530 Cervicocranial syndrome -M531 Cervicobrachial syndrome -M532X1 Spinal instabilities, occipito-atlanto-axial region -M532X2 Spinal instabilities, cervical region -M532X3 Spinal instabilities, cervicothoracic region -M532X4 Spinal instabilities, thoracic region -M532X5 Spinal instabilities, thoracolumbar region -M532X6 Spinal instabilities, lumbar region -M532X7 Spinal instabilities, lumbosacral region -M532X8 Spinal instabilities, sacral and sacrococcygeal region -M532X9 Spinal instabilities, site unspecified -M533 Sacrococcygeal disorders, not elsewhere classified -M5380 Other specified dorsopathies, site unspecified -M5381 Other specified dorsopathies, occipito-atlanto-axial region -M5382 Other specified dorsopathies, cervical region -M5383 Other specified dorsopathies, cervicothoracic region -M5384 Other specified dorsopathies, thoracic region -M5385 Other specified dorsopathies, thoracolumbar region -M5386 Other specified dorsopathies, lumbar region -M5387 Other specified dorsopathies, lumbosacral region -M5388 Other specified dorsopathies, sacral and sacrococcygeal region -M539 Dorsopathy, unspecified -M5400 Panniculitis affecting regions of neck and back, site unspecified -M5401 Panniculitis affecting regions of neck and back, occipito-atlanto-axial region -M5402 Panniculitis affecting regions of neck and back, cervical region -M5403 Panniculitis affecting regions of neck and back, cervicothoracic region -M5404 Panniculitis affecting regions of neck and back, thoracic region -M5405 Panniculitis affecting regions of neck and back, thoracolumbar region -M5406 Panniculitis affecting regions of neck and back, lumbar region -M5407 Panniculitis affecting regions of neck and back, lumbosacral region -M5408 Panniculitis affecting regions of neck and back, sacral and sacrococcygeal region -M5409 Panniculitis affecting regions, neck and back, multiple sites in spine -M5410 Radiculopathy, site unspecified -M5411 Radiculopathy, occipito-atlanto-axial region -M5412 Radiculopathy, cervical region -M5413 Radiculopathy, cervicothoracic region -M5414 Radiculopathy, thoracic region -M5415 Radiculopathy, thoracolumbar region -M5416 Radiculopathy, lumbar region -M5417 Radiculopathy, lumbosacral region -M5418 Radiculopathy, sacral and sacrococcygeal region -M542 Cervicalgia -M5430 Sciatica, unspecified side -M5431 Sciatica, right side -M5432 Sciatica, left side -M5440 Lumbago with sciatica, unspecified side -M5441 Lumbago with sciatica, right side -M5442 Lumbago with sciatica, left side -M545 Low back pain -M546 Pain in thoracic spine -M5481 Occipital neuralgia -M5489 Other dorsalgia -M549 Dorsalgia, unspecified -M60000 Infective myositis, unspecified right arm -M60001 Infective myositis, unspecified left arm -M60002 Infective myositis, unspecified arm -M60003 Infective myositis, unspecified right leg -M60004 Infective myositis, unspecified left leg -M60005 Infective myositis, unspecified leg -M60009 Infective myositis, unspecified site -M60011 Infective myositis, right shoulder -M60012 Infective myositis, left shoulder -M60019 Infective myositis, unspecified shoulder -M60021 Infective myositis, right upper arm -M60022 Infective myositis, left upper arm -M60029 Infective myositis, unspecified upper arm -M60031 Infective myositis, right forearm -M60032 Infective myositis, left forearm -M60039 Infective myositis, unspecified forearm -M60041 Infective myositis, right hand -M60042 Infective myositis, left hand -M60043 Infective myositis, unspecified hand -M60044 Infective myositis, right finger(s) -M60045 Infective myositis, left finger(s) -M60046 Infective myositis, unspecified finger(s) -M60051 Infective myositis, right thigh -M60052 Infective myositis, left thigh -M60059 Infective myositis, unspecified thigh -M60061 Infective myositis, right lower leg -M60062 Infective myositis, left lower leg -M60069 Infective myositis, unspecified lower leg -M60070 Infective myositis, right ankle -M60071 Infective myositis, left ankle -M60072 Infective myositis, unspecified ankle -M60073 Infective myositis, right foot -M60074 Infective myositis, left foot -M60075 Infective myositis, unspecified foot -M60076 Infective myositis, right toe(s) -M60077 Infective myositis, left toe(s) -M60078 Infective myositis, unspecified toe(s) -M6008 Infective myositis, other site -M6009 Infective myositis, multiple sites -M6010 Interstitial myositis of unspecified site -M60111 Interstitial myositis, right shoulder -M60112 Interstitial myositis, left shoulder -M60119 Interstitial myositis, unspecified shoulder -M60121 Interstitial myositis, right upper arm -M60122 Interstitial myositis, left upper arm -M60129 Interstitial myositis, unspecified upper arm -M60131 Interstitial myositis, right forearm -M60132 Interstitial myositis, left forearm -M60139 Interstitial myositis, unspecified forearm -M60141 Interstitial myositis, right hand -M60142 Interstitial myositis, left hand -M60149 Interstitial myositis, unspecified hand -M60151 Interstitial myositis, right thigh -M60152 Interstitial myositis, left thigh -M60159 Interstitial myositis, unspecified thigh -M60161 Interstitial myositis, right lower leg -M60162 Interstitial myositis, left lower leg -M60169 Interstitial myositis, unspecified lower leg -M60171 Interstitial myositis, right ankle and foot -M60172 Interstitial myositis, left ankle and foot -M60179 Interstitial myositis, unspecified ankle and foot -M6018 Interstitial myositis, other site -M6019 Interstitial myositis, multiple sites -M6020 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified site -M60211 Foreign body granuloma of soft tissue, not elsewhere classified, right shoulder -M60212 Foreign body granuloma of soft tissue, not elsewhere classified, left shoulder -M60219 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified shoulder -M60221 Foreign body granuloma of soft tissue, not elsewhere classified, right upper arm -M60222 Foreign body granuloma of soft tissue, not elsewhere classified, left upper arm -M60229 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified upper arm -M60231 Foreign body granuloma of soft tissue, not elsewhere classified, right forearm -M60232 Foreign body granuloma of soft tissue, not elsewhere classified, left forearm -M60239 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified forearm -M60241 Foreign body granuloma of soft tissue, not elsewhere classified, right hand -M60242 Foreign body granuloma of soft tissue, not elsewhere classified, left hand -M60249 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified hand -M60251 Foreign body granuloma of soft tissue, not elsewhere classified, right thigh -M60252 Foreign body granuloma of soft tissue, not elsewhere classified, left thigh -M60259 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified thigh -M60261 Foreign body granuloma of soft tissue, not elsewhere classified, right lower leg -M60262 Foreign body granuloma of soft tissue, not elsewhere classified, left lower leg -M60269 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified lower leg -M60271 Foreign body granuloma of soft tissue, not elsewhere classified, right ankle and foot -M60272 Foreign body granuloma of soft tissue, not elsewhere classified, left ankle and foot -M60279 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified ankle and foot -M6028 Foreign body granuloma of soft tissue, not elsewhere classified, other site -M6080 Other myositis, unspecified site -M60811 Other myositis, right shoulder -M60812 Other myositis, left shoulder -M60819 Other myositis, unspecified shoulder -M60821 Other myositis, right upper arm -M60822 Other myositis, left upper arm -M60829 Other myositis, unspecified upper arm -M60831 Other myositis, right forearm -M60832 Other myositis, left forearm -M60839 Other myositis, unspecified forearm -M60841 Other myositis, right hand -M60842 Other myositis, left hand -M60849 Other myositis, unspecified hand -M60851 Other myositis, right thigh -M60852 Other myositis, left thigh -M60859 Other myositis, unspecified thigh -M60861 Other myositis, right lower leg -M60862 Other myositis, left lower leg -M60869 Other myositis, unspecified lower leg -M60871 Other myositis, right ankle and foot -M60872 Other myositis, left ankle and foot -M60879 Other myositis, unspecified ankle and foot -M6088 Other myositis, other site -M6089 Other myositis, multiple sites -M609 Myositis, unspecified -M6100 Myositis ossificans traumatica, unspecified site -M61011 Myositis ossificans traumatica, right shoulder -M61012 Myositis ossificans traumatica, left shoulder -M61019 Myositis ossificans traumatica, unspecified shoulder -M61021 Myositis ossificans traumatica, right upper arm -M61022 Myositis ossificans traumatica, left upper arm -M61029 Myositis ossificans traumatica, unspecified upper arm -M61031 Myositis ossificans traumatica, right forearm -M61032 Myositis ossificans traumatica, left forearm -M61039 Myositis ossificans traumatica, unspecified forearm -M61041 Myositis ossificans traumatica, right hand -M61042 Myositis ossificans traumatica, left hand -M61049 Myositis ossificans traumatica, unspecified hand -M61051 Myositis ossificans traumatica, right thigh -M61052 Myositis ossificans traumatica, left thigh -M61059 Myositis ossificans traumatica, unspecified thigh -M61061 Myositis ossificans traumatica, right lower leg -M61062 Myositis ossificans traumatica, left lower leg -M61069 Myositis ossificans traumatica, unspecified lower leg -M61071 Myositis ossificans traumatica, right ankle and foot -M61072 Myositis ossificans traumatica, left ankle and foot -M61079 Myositis ossificans traumatica, unspecified ankle and foot -M6108 Myositis ossificans traumatica, other site -M6109 Myositis ossificans traumatica, multiple sites -M6110 Myositis ossificans progressiva, unspecified site -M61111 Myositis ossificans progressiva, right shoulder -M61112 Myositis ossificans progressiva, left shoulder -M61119 Myositis ossificans progressiva, unspecified shoulder -M61121 Myositis ossificans progressiva, right upper arm -M61122 Myositis ossificans progressiva, left upper arm -M61129 Myositis ossificans progressiva, unspecified arm -M61131 Myositis ossificans progressiva, right forearm -M61132 Myositis ossificans progressiva, left forearm -M61139 Myositis ossificans progressiva, unspecified forearm -M61141 Myositis ossificans progressiva, right hand -M61142 Myositis ossificans progressiva, left hand -M61143 Myositis ossificans progressiva, unspecified hand -M61144 Myositis ossificans progressiva, right finger(s) -M61145 Myositis ossificans progressiva, left finger(s) -M61146 Myositis ossificans progressiva, unspecified finger(s) -M61151 Myositis ossificans progressiva, right thigh -M61152 Myositis ossificans progressiva, left thigh -M61159 Myositis ossificans progressiva, unspecified thigh -M61161 Myositis ossificans progressiva, right lower leg -M61162 Myositis ossificans progressiva, left lower leg -M61169 Myositis ossificans progressiva, unspecified lower leg -M61171 Myositis ossificans progressiva, right ankle -M61172 Myositis ossificans progressiva, left ankle -M61173 Myositis ossificans progressiva, unspecified ankle -M61174 Myositis ossificans progressiva, right foot -M61175 Myositis ossificans progressiva, left foot -M61176 Myositis ossificans progressiva, unspecified foot -M61177 Myositis ossificans progressiva, right toe(s) -M61178 Myositis ossificans progressiva, left toe(s) -M61179 Myositis ossificans progressiva, unspecified toe(s) -M6118 Myositis ossificans progressiva, other site -M6119 Myositis ossificans progressiva, multiple sites -M6120 Paralytic calcification and ossification of muscle, unspecified site -M61211 Paralytic calcification and ossification of muscle, right shoulder -M61212 Paralytic calcification and ossification of muscle, left shoulder -M61219 Paralytic calcification and ossification of muscle, unspecified shoulder -M61221 Paralytic calcification and ossification of muscle, right upper arm -M61222 Paralytic calcification and ossification of muscle, left upper arm -M61229 Paralytic calcification and ossification of muscle, unspecified upper arm -M61231 Paralytic calcification and ossification of muscle, right forearm -M61232 Paralytic calcification and ossification of muscle, left forearm -M61239 Paralytic calcification and ossification of muscle, unspecified forearm -M61241 Paralytic calcification and ossification of muscle, right hand -M61242 Paralytic calcification and ossification of muscle, left hand -M61249 Paralytic calcification and ossification of muscle, unspecified hand -M61251 Paralytic calcification and ossification of muscle, right thigh -M61252 Paralytic calcification and ossification of muscle, left thigh -M61259 Paralytic calcification and ossification of muscle, unspecified thigh -M61261 Paralytic calcification and ossification of muscle, right lower leg -M61262 Paralytic calcification and ossification of muscle, left lower leg -M61269 Paralytic calcification and ossification of muscle, unspecified lower leg -M61271 Paralytic calcification and ossification of muscle, right ankle and foot -M61272 Paralytic calcification and ossification of muscle, left ankle and foot -M61279 Paralytic calcification and ossification of muscle, unspecified ankle and foot -M6128 Paralytic calcification and ossification of muscle, other site -M6129 Paralytic calcification and ossification of muscle, multiple sites -M6130 Calcification and ossification of muscles associated with burns, unspecified site -M61311 Calcification and ossification of muscles associated with burns, right shoulder -M61312 Calcification and ossification of muscles associated with burns, left shoulder -M61319 Calcification and ossification of muscles associated with burns, unspecified shoulder -M61321 Calcification and ossification of muscles associated with burns, right upper arm -M61322 Calcification and ossification of muscles associated with burns, left upper arm -M61329 Calcification and ossification of muscles associated with burns, unspecified upper arm -M61331 Calcification and ossification of muscles associated with burns, right forearm -M61332 Calcification and ossification of muscles associated with burns, left forearm -M61339 Calcification and ossification of muscles associated with burns, unspecified forearm -M61341 Calcification and ossification of muscles associated with burns, right hand -M61342 Calcification and ossification of muscles associated with burns, left hand -M61349 Calcification and ossification of muscles associated with burns, unspecified hand -M61351 Calcification and ossification of muscles associated with burns, right thigh -M61352 Calcification and ossification of muscles associated with burns, left thigh -M61359 Calcification and ossification of muscles associated with burns, unspecified thigh -M61361 Calcification and ossification of muscles associated with burns, right lower leg -M61362 Calcification and ossification of muscles associated with burns, left lower leg -M61369 Calcification and ossification of muscles associated with burns, unspecified lower leg -M61371 Calcification and ossification of muscles associated with burns, right ankle and foot -M61372 Calcification and ossification of muscles associated with burns, left ankle and foot -M61379 Calcification and ossification of muscles associated with burns, unspecified ankle and foot -M6138 Calcification and ossification of muscles associated with burns, other site -M6139 Calcification and ossification of muscles associated with burns, multiple sites -M6140 Other calcification of muscle, unspecified site -M61411 Other calcification of muscle, right shoulder -M61412 Other calcification of muscle, left shoulder -M61419 Other calcification of muscle, unspecified shoulder -M61421 Other calcification of muscle, right upper arm -M61422 Other calcification of muscle, left upper arm -M61429 Other calcification of muscle, unspecified upper arm -M61431 Other calcification of muscle, right forearm -M61432 Other calcification of muscle, left forearm -M61439 Other calcification of muscle, unspecified forearm -M61441 Other calcification of muscle, right hand -M61442 Other calcification of muscle, left hand -M61449 Other calcification of muscle, unspecified hand -M61451 Other calcification of muscle, right thigh -M61452 Other calcification of muscle, left thigh -M61459 Other calcification of muscle, unspecified thigh -M61461 Other calcification of muscle, right lower leg -M61462 Other calcification of muscle, left lower leg -M61469 Other calcification of muscle, unspecified lower leg -M61471 Other calcification of muscle, right ankle and foot -M61472 Other calcification of muscle, left ankle and foot -M61479 Other calcification of muscle, unspecified ankle and foot -M6148 Other calcification of muscle, other site -M6149 Other calcification of muscle, multiple sites -M6150 Other ossification of muscle, unspecified site -M61511 Other ossification of muscle, right shoulder -M61512 Other ossification of muscle, left shoulder -M61519 Other ossification of muscle, unspecified shoulder -M61521 Other ossification of muscle, right upper arm -M61522 Other ossification of muscle, left upper arm -M61529 Other ossification of muscle, unspecified upper arm -M61531 Other ossification of muscle, right forearm -M61532 Other ossification of muscle, left forearm -M61539 Other ossification of muscle, unspecified forearm -M61541 Other ossification of muscle, right hand -M61542 Other ossification of muscle, left hand -M61549 Other ossification of muscle, unspecified hand -M61551 Other ossification of muscle, right thigh -M61552 Other ossification of muscle, left thigh -M61559 Other ossification of muscle, unspecified thigh -M61561 Other ossification of muscle, right lower leg -M61562 Other ossification of muscle, left lower leg -M61569 Other ossification of muscle, unspecified lower leg -M61571 Other ossification of muscle, right ankle and foot -M61572 Other ossification of muscle, left ankle and foot -M61579 Other ossification of muscle, unspecified ankle and foot -M6158 Other ossification of muscle, other site -M6159 Other ossification of muscle, multiple sites -M619 Calcification and ossification of muscle, unspecified -M6200 Separation of muscle (nontraumatic), unspecified site -M62011 Separation of muscle (nontraumatic), right shoulder -M62012 Separation of muscle (nontraumatic), left shoulder -M62019 Separation of muscle (nontraumatic), unspecified shoulder -M62021 Separation of muscle (nontraumatic), right upper arm -M62022 Separation of muscle (nontraumatic), left upper arm -M62029 Separation of muscle (nontraumatic), unspecified upper arm -M62031 Separation of muscle (nontraumatic), right forearm -M62032 Separation of muscle (nontraumatic), left forearm -M62039 Separation of muscle (nontraumatic), unspecified forearm -M62041 Separation of muscle (nontraumatic), right hand -M62042 Separation of muscle (nontraumatic), left hand -M62049 Separation of muscle (nontraumatic), unspecified hand -M62051 Separation of muscle (nontraumatic), right thigh -M62052 Separation of muscle (nontraumatic), left thigh -M62059 Separation of muscle (nontraumatic), unspecified thigh -M62061 Separation of muscle (nontraumatic), right lower leg -M62062 Separation of muscle (nontraumatic), left lower leg -M62069 Separation of muscle (nontraumatic), unspecified lower leg -M62071 Separation of muscle (nontraumatic), right ankle and foot -M62072 Separation of muscle (nontraumatic), left ankle and foot -M62079 Separation of muscle (nontraumatic), unspecified ankle and foot -M6208 Separation of muscle (nontraumatic), other site -M6210 Other rupture of muscle (nontraumatic), unspecified site -M62111 Other rupture of muscle (nontraumatic), right shoulder -M62112 Other rupture of muscle (nontraumatic), left shoulder -M62119 Other rupture of muscle (nontraumatic), unspecified shoulder -M62121 Other rupture of muscle (nontraumatic), right upper arm -M62122 Other rupture of muscle (nontraumatic), left upper arm -M62129 Other rupture of muscle (nontraumatic), unspecified upper arm -M62131 Other rupture of muscle (nontraumatic), right forearm -M62132 Other rupture of muscle (nontraumatic), left forearm -M62139 Other rupture of muscle (nontraumatic), unspecified forearm -M62141 Other rupture of muscle (nontraumatic), right hand -M62142 Other rupture of muscle (nontraumatic), left hand -M62149 Other rupture of muscle (nontraumatic), unspecified hand -M62151 Other rupture of muscle (nontraumatic), right thigh -M62152 Other rupture of muscle (nontraumatic), left thigh -M62159 Other rupture of muscle (nontraumatic), unspecified thigh -M62161 Other rupture of muscle (nontraumatic), right lower leg -M62162 Other rupture of muscle (nontraumatic), left lower leg -M62169 Other rupture of muscle (nontraumatic), unspecified lower leg -M62171 Other rupture of muscle (nontraumatic), right ankle and foot -M62172 Other rupture of muscle (nontraumatic), left ankle and foot -M62179 Other rupture of muscle (nontraumatic), unspecified ankle and foot -M6218 Other rupture of muscle (nontraumatic), other site -M6220 Nontraumatic ischemic infarction of muscle, unspecified site -M62211 Nontraumatic ischemic infarction of muscle, right shoulder -M62212 Nontraumatic ischemic infarction of muscle, left shoulder -M62219 Nontraumatic ischemic infarction of muscle, unspecified shoulder -M62221 Nontraumatic ischemic infarction of muscle, right upper arm -M62222 Nontraumatic ischemic infarction of muscle, left upper arm -M62229 Nontraumatic ischemic infarction of muscle, unspecified upper arm -M62231 Nontraumatic ischemic infarction of muscle, right forearm -M62232 Nontraumatic ischemic infarction of muscle, left forearm -M62239 Nontraumatic ischemic infarction of muscle, unspecified forearm -M62241 Nontraumatic ischemic infarction of muscle, right hand -M62242 Nontraumatic ischemic infarction of muscle, left hand -M62249 Nontraumatic ischemic infarction of muscle, unspecified hand -M62251 Nontraumatic ischemic infarction of muscle, right thigh -M62252 Nontraumatic ischemic infarction of muscle, left thigh -M62259 Nontraumatic ischemic infarction of muscle, unspecified thigh -M62261 Nontraumatic ischemic infarction of muscle, right lower leg -M62262 Nontraumatic ischemic infarction of muscle, left lower leg -M62269 Nontraumatic ischemic infarction of muscle, unspecified lower leg -M62271 Nontraumatic ischemic infarction of muscle, right ankle and foot -M62272 Nontraumatic ischemic infarction of muscle, left ankle and foot -M62279 Nontraumatic ischemic infarction of muscle, unspecified ankle and foot -M6228 Nontraumatic ischemic infarction of muscle, other site -M623 Immobility syndrome (paraplegic) -M6240 Contracture of muscle, unspecified site -M62411 Contracture of muscle, right shoulder -M62412 Contracture of muscle, left shoulder -M62419 Contracture of muscle, unspecified shoulder -M62421 Contracture of muscle, right upper arm -M62422 Contracture of muscle, left upper arm -M62429 Contracture of muscle, unspecified upper arm -M62431 Contracture of muscle, right forearm -M62432 Contracture of muscle, left forearm -M62439 Contracture of muscle, unspecified forearm -M62441 Contracture of muscle, right hand -M62442 Contracture of muscle, left hand -M62449 Contracture of muscle, unspecified hand -M62451 Contracture of muscle, right thigh -M62452 Contracture of muscle, left thigh -M62459 Contracture of muscle, unspecified thigh -M62461 Contracture of muscle, right lower leg -M62462 Contracture of muscle, left lower leg -M62469 Contracture of muscle, unspecified lower leg -M62471 Contracture of muscle, right ankle and foot -M62472 Contracture of muscle, left ankle and foot -M62479 Contracture of muscle, unspecified ankle and foot -M6248 Contracture of muscle, other site -M6249 Contracture of muscle, multiple sites -M6250 Muscle wasting and atrophy, not elsewhere classified, unspecified site -M62511 Muscle wasting and atrophy, not elsewhere classified, right shoulder -M62512 Muscle wasting and atrophy, not elsewhere classified, left shoulder -M62519 Muscle wasting and atrophy, not elsewhere classified, unspecified shoulder -M62521 Muscle wasting and atrophy, not elsewhere classified, right upper arm -M62522 Muscle wasting and atrophy, not elsewhere classified, left upper arm -M62529 Muscle wasting and atrophy, not elsewhere classified, unspecified upper arm -M62531 Muscle wasting and atrophy, not elsewhere classified, right forearm -M62532 Muscle wasting and atrophy, not elsewhere classified, left forearm -M62539 Muscle wasting and atrophy, not elsewhere classified, unspecified forearm -M62541 Muscle wasting and atrophy, not elsewhere classified, right hand -M62542 Muscle wasting and atrophy, not elsewhere classified, left hand -M62549 Muscle wasting and atrophy, not elsewhere classified, unspecified hand -M62551 Muscle wasting and atrophy, not elsewhere classified, right thigh -M62552 Muscle wasting and atrophy, not elsewhere classified, left thigh -M62559 Muscle wasting and atrophy, not elsewhere classified, unspecified thigh -M62561 Muscle wasting and atrophy, not elsewhere classified, right lower leg -M62562 Muscle wasting and atrophy, not elsewhere classified, left lower leg -M62569 Muscle wasting and atrophy, not elsewhere classified, unspecified lower leg -M62571 Muscle wasting and atrophy, not elsewhere classified, right ankle and foot -M62572 Muscle wasting and atrophy, not elsewhere classified, left ankle and foot -M62579 Muscle wasting and atrophy, not elsewhere classified, unspecified ankle and foot -M6258 Muscle wasting and atrophy, not elsewhere classified, other site -M6259 Muscle wasting and atrophy, not elsewhere classified, multiple sites -M6281 Muscle weakness (generalized) -M6282 Rhabdomyolysis -M62830 Muscle spasm of back -M62831 Muscle spasm of calf -M62838 Other muscle spasm -M6289 Other specified disorders of muscle -M629 Disorder of muscle, unspecified -M6380 Disorders of muscle in diseases classified elsewhere, unspecified site -M63811 Disorders of muscle in diseases classified elsewhere, right shoulder -M63812 Disorders of muscle in diseases classified elsewhere, left shoulder -M63819 Disorders of muscle in diseases classified elsewhere, unspecified shoulder -M63821 Disorders of muscle in diseases classified elsewhere, right upper arm -M63822 Disorders of muscle in diseases classified elsewhere, left upper arm -M63829 Disorders of muscle in diseases classified elsewhere, unspecified upper arm -M63831 Disorders of muscle in diseases classified elsewhere, right forearm -M63832 Disorders of muscle in diseases classified elsewhere, left forearm -M63839 Disorders of muscle in diseases classified elsewhere, unspecified forearm -M63841 Disorders of muscle in diseases classified elsewhere, right hand -M63842 Disorders of muscle in diseases classified elsewhere, left hand -M63849 Disorders of muscle in diseases classified elsewhere, unspecified hand -M63851 Disorders of muscle in diseases classified elsewhere, right thigh -M63852 Disorders of muscle in diseases classified elsewhere, left thigh -M63859 Disorders of muscle in diseases classified elsewhere, unspecified thigh -M63861 Disorders of muscle in diseases classified elsewhere, right lower leg -M63862 Disorders of muscle in diseases classified elsewhere, left lower leg -M63869 Disorders of muscle in diseases classified elsewhere, unspecified lower leg -M63871 Disorders of muscle in diseases classified elsewhere, right ankle and foot -M63872 Disorders of muscle in diseases classified elsewhere, left ankle and foot -M63879 Disorders of muscle in diseases classified elsewhere, unspecified ankle and foot -M6388 Disorders of muscle in diseases classified elsewhere, other site -M6389 Disorders of muscle in diseases classified elsewhere, multiple sites -M6500 Abscess of tendon sheath, unspecified site -M65011 Abscess of tendon sheath, right shoulder -M65012 Abscess of tendon sheath, left shoulder -M65019 Abscess of tendon sheath, unspecified shoulder -M65021 Abscess of tendon sheath, right upper arm -M65022 Abscess of tendon sheath, left upper arm -M65029 Abscess of tendon sheath, unspecified upper arm -M65031 Abscess of tendon sheath, right forearm -M65032 Abscess of tendon sheath, left forearm -M65039 Abscess of tendon sheath, unspecified forearm -M65041 Abscess of tendon sheath, right hand -M65042 Abscess of tendon sheath, left hand -M65049 Abscess of tendon sheath, unspecified hand -M65051 Abscess of tendon sheath, right thigh -M65052 Abscess of tendon sheath, left thigh -M65059 Abscess of tendon sheath, unspecified thigh -M65061 Abscess of tendon sheath, right lower leg -M65062 Abscess of tendon sheath, left lower leg -M65069 Abscess of tendon sheath, unspecified lower leg -M65071 Abscess of tendon sheath, right ankle and foot -M65072 Abscess of tendon sheath, left ankle and foot -M65079 Abscess of tendon sheath, unspecified ankle and foot -M6508 Abscess of tendon sheath, other site -M6510 Other infective (teno)synovitis, unspecified site -M65111 Other infective (teno)synovitis, right shoulder -M65112 Other infective (teno)synovitis, left shoulder -M65119 Other infective (teno)synovitis, unspecified shoulder -M65121 Other infective (teno)synovitis, right elbow -M65122 Other infective (teno)synovitis, left elbow -M65129 Other infective (teno)synovitis, unspecified elbow -M65131 Other infective (teno)synovitis, right wrist -M65132 Other infective (teno)synovitis, left wrist -M65139 Other infective (teno)synovitis, unspecified wrist -M65141 Other infective (teno)synovitis, right hand -M65142 Other infective (teno)synovitis, left hand -M65149 Other infective (teno)synovitis, unspecified hand -M65151 Other infective (teno)synovitis, right hip -M65152 Other infective (teno)synovitis, left hip -M65159 Other infective (teno)synovitis, unspecified hip -M65161 Other infective (teno)synovitis, right knee -M65162 Other infective (teno)synovitis, left knee -M65169 Other infective (teno)synovitis, unspecified knee -M65171 Other infective (teno)synovitis, right ankle and foot -M65172 Other infective (teno)synovitis, left ankle and foot -M65179 Other infective (teno)synovitis, unspecified ankle and foot -M6518 Other infective (teno)synovitis, other site -M6519 Other infective (teno)synovitis, multiple sites -M6520 Calcific tendinitis, unspecified site -M65221 Calcific tendinitis, right upper arm -M65222 Calcific tendinitis, left upper arm -M65229 Calcific tendinitis, unspecified upper arm -M65231 Calcific tendinitis, right forearm -M65232 Calcific tendinitis, left forearm -M65239 Calcific tendinitis, unspecified forearm -M65241 Calcific tendinitis, right hand -M65242 Calcific tendinitis, left hand -M65249 Calcific tendinitis, unspecified hand -M65251 Calcific tendinitis, right thigh -M65252 Calcific tendinitis, left thigh -M65259 Calcific tendinitis, unspecified thigh -M65261 Calcific tendinitis, right lower leg -M65262 Calcific tendinitis, left lower leg -M65269 Calcific tendinitis, unspecified lower leg -M65271 Calcific tendinitis, right ankle and foot -M65272 Calcific tendinitis, left ankle and foot -M65279 Calcific tendinitis, unspecified ankle and foot -M6528 Calcific tendinitis, other site -M6529 Calcific tendinitis, multiple sites -M6530 Trigger finger, unspecified finger -M65311 Trigger thumb, right thumb -M65312 Trigger thumb, left thumb -M65319 Trigger thumb, unspecified thumb -M65321 Trigger finger, right index finger -M65322 Trigger finger, left index finger -M65329 Trigger finger, unspecified index finger -M65331 Trigger finger, right middle finger -M65332 Trigger finger, left middle finger -M65339 Trigger finger, unspecified middle finger -M65341 Trigger finger, right ring finger -M65342 Trigger finger, left ring finger -M65349 Trigger finger, unspecified ring finger -M65351 Trigger finger, right little finger -M65352 Trigger finger, left little finger -M65359 Trigger finger, unspecified little finger -M654 Radial styloid tenosynovitis [de Quervain] -M6580 Other synovitis and tenosynovitis, unspecified site -M65811 Other synovitis and tenosynovitis, right shoulder -M65812 Other synovitis and tenosynovitis, left shoulder -M65819 Other synovitis and tenosynovitis, unspecified shoulder -M65821 Other synovitis and tenosynovitis, right upper arm -M65822 Other synovitis and tenosynovitis, left upper arm -M65829 Other synovitis and tenosynovitis, unspecified upper arm -M65831 Other synovitis and tenosynovitis, right forearm -M65832 Other synovitis and tenosynovitis, left forearm -M65839 Other synovitis and tenosynovitis, unspecified forearm -M65841 Other synovitis and tenosynovitis, right hand -M65842 Other synovitis and tenosynovitis, left hand -M65849 Other synovitis and tenosynovitis, unspecified hand -M65851 Other synovitis and tenosynovitis, right thigh -M65852 Other synovitis and tenosynovitis, left thigh -M65859 Other synovitis and tenosynovitis, unspecified thigh -M65861 Other synovitis and tenosynovitis, right lower leg -M65862 Other synovitis and tenosynovitis, left lower leg -M65869 Other synovitis and tenosynovitis, unspecified lower leg -M65871 Other synovitis and tenosynovitis, right ankle and foot -M65872 Other synovitis and tenosynovitis, left ankle and foot -M65879 Other synovitis and tenosynovitis, unspecified ankle and foot -M6588 Other synovitis and tenosynovitis, other site -M6589 Other synovitis and tenosynovitis, multiple sites -M659 Synovitis and tenosynovitis, unspecified -M660 Rupture of popliteal cyst -M6610 Rupture of synovium, unspecified joint -M66111 Rupture of synovium, right shoulder -M66112 Rupture of synovium, left shoulder -M66119 Rupture of synovium, unspecified shoulder -M66121 Rupture of synovium, right elbow -M66122 Rupture of synovium, left elbow -M66129 Rupture of synovium, unspecified elbow -M66131 Rupture of synovium, right wrist -M66132 Rupture of synovium, left wrist -M66139 Rupture of synovium, unspecified wrist -M66141 Rupture of synovium, right hand -M66142 Rupture of synovium, left hand -M66143 Rupture of synovium, unspecified hand -M66144 Rupture of synovium, right finger(s) -M66145 Rupture of synovium, left finger(s) -M66146 Rupture of synovium, unspecified finger(s) -M66151 Rupture of synovium, right hip -M66152 Rupture of synovium, left hip -M66159 Rupture of synovium, unspecified hip -M66171 Rupture of synovium, right ankle -M66172 Rupture of synovium, left ankle -M66173 Rupture of synovium, unspecified ankle -M66174 Rupture of synovium, right foot -M66175 Rupture of synovium, left foot -M66176 Rupture of synovium, unspecified foot -M66177 Rupture of synovium, right toe(s) -M66178 Rupture of synovium, left toe(s) -M66179 Rupture of synovium, unspecified toe(s) -M6618 Rupture of synovium, other site -M6620 Spontaneous rupture of extensor tendons, unspecified site -M66211 Spontaneous rupture of extensor tendons, right shoulder -M66212 Spontaneous rupture of extensor tendons, left shoulder -M66219 Spontaneous rupture of extensor tendons, unspecified shoulder -M66221 Spontaneous rupture of extensor tendons, right upper arm -M66222 Spontaneous rupture of extensor tendons, left upper arm -M66229 Spontaneous rupture of extensor tendons, unspecified upper arm -M66231 Spontaneous rupture of extensor tendons, right forearm -M66232 Spontaneous rupture of extensor tendons, left forearm -M66239 Spontaneous rupture of extensor tendons, unspecified forearm -M66241 Spontaneous rupture of extensor tendons, right hand -M66242 Spontaneous rupture of extensor tendons, left hand -M66249 Spontaneous rupture of extensor tendons, unspecified hand -M66251 Spontaneous rupture of extensor tendons, right thigh -M66252 Spontaneous rupture of extensor tendons, left thigh -M66259 Spontaneous rupture of extensor tendons, unspecified thigh -M66261 Spontaneous rupture of extensor tendons, right lower leg -M66262 Spontaneous rupture of extensor tendons, left lower leg -M66269 Spontaneous rupture of extensor tendons, unspecified lower leg -M66271 Spontaneous rupture of extensor tendons, right ankle and foot -M66272 Spontaneous rupture of extensor tendons, left ankle and foot -M66279 Spontaneous rupture of extensor tendons, unspecified ankle and foot -M6628 Spontaneous rupture of extensor tendons, other site -M6629 Spontaneous rupture of extensor tendons, multiple sites -M6630 Spontaneous rupture of flexor tendons, unspecified site -M66311 Spontaneous rupture of flexor tendons, right shoulder -M66312 Spontaneous rupture of flexor tendons, left shoulder -M66319 Spontaneous rupture of flexor tendons, unspecified shoulder -M66321 Spontaneous rupture of flexor tendons, right upper arm -M66322 Spontaneous rupture of flexor tendons, left upper arm -M66329 Spontaneous rupture of flexor tendons, unspecified upper arm -M66331 Spontaneous rupture of flexor tendons, right forearm -M66332 Spontaneous rupture of flexor tendons, left forearm -M66339 Spontaneous rupture of flexor tendons, unspecified forearm -M66341 Spontaneous rupture of flexor tendons, right hand -M66342 Spontaneous rupture of flexor tendons, left hand -M66349 Spontaneous rupture of flexor tendons, unspecified hand -M66351 Spontaneous rupture of flexor tendons, right thigh -M66352 Spontaneous rupture of flexor tendons, left thigh -M66359 Spontaneous rupture of flexor tendons, unspecified thigh -M66361 Spontaneous rupture of flexor tendons, right lower leg -M66362 Spontaneous rupture of flexor tendons, left lower leg -M66369 Spontaneous rupture of flexor tendons, unspecified lower leg -M66371 Spontaneous rupture of flexor tendons, right ankle and foot -M66372 Spontaneous rupture of flexor tendons, left ankle and foot -M66379 Spontaneous rupture of flexor tendons, unspecified ankle and foot -M6638 Spontaneous rupture of flexor tendons, other site -M6639 Spontaneous rupture of flexor tendons, multiple sites -M6680 Spontaneous rupture of other tendons, unspecified site -M66811 Spontaneous rupture of other tendons, right shoulder -M66812 Spontaneous rupture of other tendons, left shoulder -M66819 Spontaneous rupture of other tendons, unspecified shoulder -M66821 Spontaneous rupture of other tendons, right upper arm -M66822 Spontaneous rupture of other tendons, left upper arm -M66829 Spontaneous rupture of other tendons, unspecified upper arm -M66831 Spontaneous rupture of other tendons, right forearm -M66832 Spontaneous rupture of other tendons, left forearm -M66839 Spontaneous rupture of other tendons, unspecified forearm -M66841 Spontaneous rupture of other tendons, right hand -M66842 Spontaneous rupture of other tendons, left hand -M66849 Spontaneous rupture of other tendons, unspecified hand -M66851 Spontaneous rupture of other tendons, right thigh -M66852 Spontaneous rupture of other tendons, left thigh -M66859 Spontaneous rupture of other tendons, unspecified thigh -M66861 Spontaneous rupture of other tendons, right lower leg -M66862 Spontaneous rupture of other tendons, left lower leg -M66869 Spontaneous rupture of other tendons, unspecified lower leg -M66871 Spontaneous rupture of other tendons, right ankle and foot -M66872 Spontaneous rupture of other tendons, left ankle and foot -M66879 Spontaneous rupture of other tendons, unspecified ankle and foot -M6688 Spontaneous rupture of other tendons, other -M6689 Spontaneous rupture of other tendons, multiple sites -M669 Spontaneous rupture of unspecified tendon -M6700 Short Achilles tendon (acquired), unspecified ankle -M6701 Short Achilles tendon (acquired), right ankle -M6702 Short Achilles tendon (acquired), left ankle -M6720 Synovial hypertrophy, not elsewhere classified, unspecified site -M67211 Synovial hypertrophy, not elsewhere classified, right shoulder -M67212 Synovial hypertrophy, not elsewhere classified, left shoulder -M67219 Synovial hypertrophy, not elsewhere classified, unspecified shoulder -M67221 Synovial hypertrophy, not elsewhere classified, right upper arm -M67222 Synovial hypertrophy, not elsewhere classified, left upper arm -M67229 Synovial hypertrophy, not elsewhere classified, unspecified upper arm -M67231 Synovial hypertrophy, not elsewhere classified, right forearm -M67232 Synovial hypertrophy, not elsewhere classified, left forearm -M67239 Synovial hypertrophy, not elsewhere classified, unspecified forearm -M67241 Synovial hypertrophy, not elsewhere classified, right hand -M67242 Synovial hypertrophy, not elsewhere classified, left hand -M67249 Synovial hypertrophy, not elsewhere classified, unspecified hand -M67251 Synovial hypertrophy, not elsewhere classified, right thigh -M67252 Synovial hypertrophy, not elsewhere classified, left thigh -M67259 Synovial hypertrophy, not elsewhere classified, unspecified thigh -M67261 Synovial hypertrophy, not elsewhere classified, right lower leg -M67262 Synovial hypertrophy, not elsewhere classified, left lower leg -M67269 Synovial hypertrophy, not elsewhere classified, unspecified lower leg -M67271 Synovial hypertrophy, not elsewhere classified, right ankle and foot -M67272 Synovial hypertrophy, not elsewhere classified, left ankle and foot -M67279 Synovial hypertrophy, not elsewhere classified, unspecified ankle and foot -M6728 Synovial hypertrophy, not elsewhere classified, other site -M6729 Synovial hypertrophy, not elsewhere classified, multiple sites -M6730 Transient synovitis, unspecified site -M67311 Transient synovitis, right shoulder -M67312 Transient synovitis, left shoulder -M67319 Transient synovitis, unspecified shoulder -M67321 Transient synovitis, right elbow -M67322 Transient synovitis, left elbow -M67329 Transient synovitis, unspecified elbow -M67331 Transient synovitis, right wrist -M67332 Transient synovitis, left wrist -M67339 Transient synovitis, unspecified wrist -M67341 Transient synovitis, right hand -M67342 Transient synovitis, left hand -M67349 Transient synovitis, unspecified hand -M67351 Transient synovitis, right hip -M67352 Transient synovitis, left hip -M67359 Transient synovitis, unspecified hip -M67361 Transient synovitis, right knee -M67362 Transient synovitis, left knee -M67369 Transient synovitis, unspecified knee -M67371 Transient synovitis, right ankle and foot -M67372 Transient synovitis, left ankle and foot -M67379 Transient synovitis, unspecified ankle and foot -M6738 Transient synovitis, other site -M6739 Transient synovitis, multiple sites -M6740 Ganglion, unspecified site -M67411 Ganglion, right shoulder -M67412 Ganglion, left shoulder -M67419 Ganglion, unspecified shoulder -M67421 Ganglion, right elbow -M67422 Ganglion, left elbow -M67429 Ganglion, unspecified elbow -M67431 Ganglion, right wrist -M67432 Ganglion, left wrist -M67439 Ganglion, unspecified wrist -M67441 Ganglion, right hand -M67442 Ganglion, left hand -M67449 Ganglion, unspecified hand -M67451 Ganglion, right hip -M67452 Ganglion, left hip -M67459 Ganglion, unspecified hip -M67461 Ganglion, right knee -M67462 Ganglion, left knee -M67469 Ganglion, unspecified knee -M67471 Ganglion, right ankle and foot -M67472 Ganglion, left ankle and foot -M67479 Ganglion, unspecified ankle and foot -M6748 Ganglion, other site -M6749 Ganglion, multiple sites -M6750 Plica syndrome, unspecified knee -M6751 Plica syndrome, right knee -M6752 Plica syndrome, left knee -M6780 Other specified disorders of synovium and tendon, unspecified site -M67811 Other specified disorders of synovium, right shoulder -M67812 Other specified disorders of synovium, left shoulder -M67813 Other specified disorders of tendon, right shoulder -M67814 Other specified disorders of tendon, left shoulder -M67819 Other specified disorders of synovium and tendon, unspecified shoulder -M67821 Other specified disorders of synovium, right elbow -M67822 Other specified disorders of synovium, left elbow -M67823 Other specified disorders of tendon, right elbow -M67824 Other specified disorders of tendon, left elbow -M67829 Other specified disorders of synovium and tendon, unspecified elbow -M67831 Other specified disorders of synovium, right wrist -M67832 Other specified disorders of synovium, left wrist -M67833 Other specified disorders of tendon, right wrist -M67834 Other specified disorders of tendon, left wrist -M67839 Other specified disorders of synovium and tendon, unspecified forearm -M67841 Other specified disorders of synovium, right hand -M67842 Other specified disorders of synovium, left hand -M67843 Other specified disorders of tendon, right hand -M67844 Other specified disorders of tendon, left hand -M67849 Other specified disorders of synovium and tendon, unspecified hand -M67851 Other specified disorders of synovium, right hip -M67852 Other specified disorders of synovium, left hip -M67853 Other specified disorders of tendon, right hip -M67854 Other specified disorders of tendon, left hip -M67859 Other specified disorders of synovium and tendon, unspecified hip -M67861 Other specified disorders of synovium, right knee -M67862 Other specified disorders of synovium, left knee -M67863 Other specified disorders of tendon, right knee -M67864 Other specified disorders of tendon, left knee -M67869 Other specified disorders of synovium and tendon, unspecified knee -M67871 Other specified disorders of synovium, right ankle and foot -M67872 Other specified disorders of synovium, left ankle and foot -M67873 Other specified disorders of tendon, right ankle and foot -M67874 Other specified disorders of tendon, left ankle and foot -M67879 Other specified disorders of synovium and tendon, unspecified ankle and foot -M6788 Other specified disorders of synovium and tendon, other site -M6789 Other specified disorders of synovium and tendon, multiple sites -M6790 Unspecified disorder of synovium and tendon, unspecified site -M67911 Unspecified disorder of synovium and tendon, right shoulder -M67912 Unspecified disorder of synovium and tendon, left shoulder -M67919 Unspecified disorder of synovium and tendon, unspecified shoulder -M67921 Unspecified disorder of synovium and tendon, right upper arm -M67922 Unspecified disorder of synovium and tendon, left upper arm -M67929 Unspecified disorder of synovium and tendon, unspecified upper arm -M67931 Unspecified disorder of synovium and tendon, right forearm -M67932 Unspecified disorder of synovium and tendon, left forearm -M67939 Unspecified disorder of synovium and tendon, unspecified forearm -M67941 Unspecified disorder of synovium and tendon, right hand -M67942 Unspecified disorder of synovium and tendon, left hand -M67949 Unspecified disorder of synovium and tendon, unspecified hand -M67951 Unspecified disorder of synovium and tendon, right thigh -M67952 Unspecified disorder of synovium and tendon, left thigh -M67959 Unspecified disorder of synovium and tendon, unspecified thigh -M67961 Unspecified disorder of synovium and tendon, right lower leg -M67962 Unspecified disorder of synovium and tendon, left lower leg -M67969 Unspecified disorder of synovium and tendon, unspecified lower leg -M67971 Unspecified disorder of synovium and tendon, right ankle and foot -M67972 Unspecified disorder of synovium and tendon, left ankle and foot -M67979 Unspecified disorder of synovium and tendon, unspecified ankle and foot -M6798 Unspecified disorder of synovium and tendon, other site -M6799 Unspecified disorder of synovium and tendon, multiple sites -M70031 Crepitant synovitis (acute) (chronic), right wrist -M70032 Crepitant synovitis (acute) (chronic), left wrist -M70039 Crepitant synovitis (acute) (chronic), unspecified wrist -M70041 Crepitant synovitis (acute) (chronic), right hand -M70042 Crepitant synovitis (acute) (chronic), left hand -M70049 Crepitant synovitis (acute) (chronic), unspecified hand -M7010 Bursitis, unspecified hand -M7011 Bursitis, right hand -M7012 Bursitis, left hand -M7020 Olecranon bursitis, unspecified elbow -M7021 Olecranon bursitis, right elbow -M7022 Olecranon bursitis, left elbow -M7030 Other bursitis of elbow, unspecified elbow -M7031 Other bursitis of elbow, right elbow -M7032 Other bursitis of elbow, left elbow -M7040 Prepatellar bursitis, unspecified knee -M7041 Prepatellar bursitis, right knee -M7042 Prepatellar bursitis, left knee -M7050 Other bursitis of knee, unspecified knee -M7051 Other bursitis of knee, right knee -M7052 Other bursitis of knee, left knee -M7060 Trochanteric bursitis, unspecified hip -M7061 Trochanteric bursitis, right hip -M7062 Trochanteric bursitis, left hip -M7070 Other bursitis of hip, unspecified hip -M7071 Other bursitis of hip, right hip -M7072 Other bursitis of hip, left hip -M7080 Other soft tissue disorders related to use, overuse and pressure of unspecified site -M70811 Other soft tissue disorders related to use, overuse and pressure, right shoulder -M70812 Other soft tissue disorders related to use, overuse and pressure, left shoulder -M70819 Other soft tissue disorders related to use, overuse and pressure, unspecified shoulder -M70821 Other soft tissue disorders related to use, overuse and pressure, right upper arm -M70822 Other soft tissue disorders related to use, overuse and pressure, left upper arm -M70829 Other soft tissue disorders related to use, overuse and pressure, unspecified upper arms -M70831 Other soft tissue disorders related to use, overuse and pressure, right forearm -M70832 Other soft tissue disorders related to use, overuse and pressure, left forearm -M70839 Other soft tissue disorders related to use, overuse and pressure, unspecified forearm -M70841 Other soft tissue disorders related to use, overuse and pressure, right hand -M70842 Other soft tissue disorders related to use, overuse and pressure, left hand -M70849 Other soft tissue disorders related to use, overuse and pressure, unspecified hand -M70851 Other soft tissue disorders related to use, overuse and pressure, right thigh -M70852 Other soft tissue disorders related to use, overuse and pressure, left thigh -M70859 Other soft tissue disorders related to use, overuse and pressure, unspecified thigh -M70861 Other soft tissue disorders related to use, overuse and pressure, right lower leg -M70862 Other soft tissue disorders related to use, overuse and pressure, left lower leg -M70869 Other soft tissue disorders related to use, overuse and pressure, unspecified leg -M70871 Other soft tissue disorders related to use, overuse and pressure, right ankle and foot -M70872 Other soft tissue disorders related to use, overuse and pressure, left ankle and foot -M70879 Other soft tissue disorders related to use, overuse and pressure, unspecified ankle and foot -M7088 Other soft tissue disorders related to use, overuse and pressure other site -M7089 Other soft tissue disorders related to use, overuse and pressure multiple sites -M7090 Unspecified soft tissue disorder related to use, overuse and pressure of unspecified site -M70911 Unspecified soft tissue disorder related to use, overuse and pressure, right shoulder -M70912 Unspecified soft tissue disorder related to use, overuse and pressure, left shoulder -M70919 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified shoulder -M70921 Unspecified soft tissue disorder related to use, overuse and pressure, right upper arm -M70922 Unspecified soft tissue disorder related to use, overuse and pressure, left upper arm -M70929 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified upper arm -M70931 Unspecified soft tissue disorder related to use, overuse and pressure, right forearm -M70932 Unspecified soft tissue disorder related to use, overuse and pressure, left forearm -M70939 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified forearm -M70941 Unspecified soft tissue disorder related to use, overuse and pressure, right hand -M70942 Unspecified soft tissue disorder related to use, overuse and pressure, left hand -M70949 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified hand -M70951 Unspecified soft tissue disorder related to use, overuse and pressure, right thigh -M70952 Unspecified soft tissue disorder related to use, overuse and pressure, left thigh -M70959 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified thigh -M70961 Unspecified soft tissue disorder related to use, overuse and pressure, right lower leg -M70962 Unspecified soft tissue disorder related to use, overuse and pressure, left lower leg -M70969 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified lower leg -M70971 Unspecified soft tissue disorder related to use, overuse and pressure, right ankle and foot -M70972 Unspecified soft tissue disorder related to use, overuse and pressure, left ankle and foot -M70979 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified ankle and foot -M7098 Unspecified soft tissue disorder related to use, overuse and pressure other -M7099 Unspecified soft tissue disorder related to use, overuse and pressure multiple sites -M7100 Abscess of bursa, unspecified site -M71011 Abscess of bursa, right shoulder -M71012 Abscess of bursa, left shoulder -M71019 Abscess of bursa, unspecified shoulder -M71021 Abscess of bursa, right elbow -M71022 Abscess of bursa, left elbow -M71029 Abscess of bursa, unspecified elbow -M71031 Abscess of bursa, right wrist -M71032 Abscess of bursa, left wrist -M71039 Abscess of bursa, unspecified wrist -M71041 Abscess of bursa, right hand -M71042 Abscess of bursa, left hand -M71049 Abscess of bursa, unspecified hand -M71051 Abscess of bursa, right hip -M71052 Abscess of bursa, left hip -M71059 Abscess of bursa, unspecified hip -M71061 Abscess of bursa, right knee -M71062 Abscess of bursa, left knee -M71069 Abscess of bursa, unspecified knee -M71071 Abscess of bursa, right ankle and foot -M71072 Abscess of bursa, left ankle and foot -M71079 Abscess of bursa, unspecified ankle and foot -M7108 Abscess of bursa, other site -M7109 Abscess of bursa, multiple sites -M7110 Other infective bursitis, unspecified site -M71111 Other infective bursitis, right shoulder -M71112 Other infective bursitis, left shoulder -M71119 Other infective bursitis, unspecified shoulder -M71121 Other infective bursitis, right elbow -M71122 Other infective bursitis, left elbow -M71129 Other infective bursitis, unspecified elbow -M71131 Other infective bursitis, right wrist -M71132 Other infective bursitis, left wrist -M71139 Other infective bursitis, unspecified wrist -M71141 Other infective bursitis, right hand -M71142 Other infective bursitis, left hand -M71149 Other infective bursitis, unspecified hand -M71151 Other infective bursitis, right hip -M71152 Other infective bursitis, left hip -M71159 Other infective bursitis, unspecified hip -M71161 Other infective bursitis, right knee -M71162 Other infective bursitis, left knee -M71169 Other infective bursitis, unspecified knee -M71171 Other infective bursitis, right ankle and foot -M71172 Other infective bursitis, left ankle and foot -M71179 Other infective bursitis, unspecified ankle and foot -M7118 Other infective bursitis, other site -M7119 Other infective bursitis, multiple sites -M7120 Synovial cyst of popliteal space [Baker], unspecified knee -M7121 Synovial cyst of popliteal space [Baker], right knee -M7122 Synovial cyst of popliteal space [Baker], left knee -M7130 Other bursal cyst, unspecified site -M71311 Other bursal cyst, right shoulder -M71312 Other bursal cyst, left shoulder -M71319 Other bursal cyst, unspecified shoulder -M71321 Other bursal cyst, right elbow -M71322 Other bursal cyst, left elbow -M71329 Other bursal cyst, unspecified elbow -M71331 Other bursal cyst, right wrist -M71332 Other bursal cyst, left wrist -M71339 Other bursal cyst, unspecified wrist -M71341 Other bursal cyst, right hand -M71342 Other bursal cyst, left hand -M71349 Other bursal cyst, unspecified hand -M71351 Other bursal cyst, right hip -M71352 Other bursal cyst, left hip -M71359 Other bursal cyst, unspecified hip -M71371 Other bursal cyst, right ankle and foot -M71372 Other bursal cyst, left ankle and foot -M71379 Other bursal cyst, unspecified ankle and foot -M7138 Other bursal cyst, other site -M7139 Other bursal cyst, multiple sites -M7140 Calcium deposit in bursa, unspecified site -M71421 Calcium deposit in bursa, right elbow -M71422 Calcium deposit in bursa, left elbow -M71429 Calcium deposit in bursa, unspecified elbow -M71431 Calcium deposit in bursa, right wrist -M71432 Calcium deposit in bursa, left wrist -M71439 Calcium deposit in bursa, unspecified wrist -M71441 Calcium deposit in bursa, right hand -M71442 Calcium deposit in bursa, left hand -M71449 Calcium deposit in bursa, unspecified hand -M71451 Calcium deposit in bursa, right hip -M71452 Calcium deposit in bursa, left hip -M71459 Calcium deposit in bursa, unspecified hip -M71461 Calcium deposit in bursa, right knee -M71462 Calcium deposit in bursa, left knee -M71469 Calcium deposit in bursa, unspecified knee -M71471 Calcium deposit in bursa, right ankle and foot -M71472 Calcium deposit in bursa, left ankle and foot -M71479 Calcium deposit in bursa, unspecified ankle and foot -M7148 Calcium deposit in bursa, other site -M7149 Calcium deposit in bursa, multiple sites -M7150 Other bursitis, not elsewhere classified, unspecified site -M71521 Other bursitis, not elsewhere classified, right elbow -M71522 Other bursitis, not elsewhere classified, left elbow -M71529 Other bursitis, not elsewhere classified, unspecified elbow -M71531 Other bursitis, not elsewhere classified, right wrist -M71532 Other bursitis, not elsewhere classified, left wrist -M71539 Other bursitis, not elsewhere classified, unspecified wrist -M71541 Other bursitis, not elsewhere classified, right hand -M71542 Other bursitis, not elsewhere classified, left hand -M71549 Other bursitis, not elsewhere classified, unspecified hand -M71551 Other bursitis, not elsewhere classified, right hip -M71552 Other bursitis, not elsewhere classified, left hip -M71559 Other bursitis, not elsewhere classified, unspecified hip -M71561 Other bursitis, not elsewhere classified, right knee -M71562 Other bursitis, not elsewhere classified, left knee -M71569 Other bursitis, not elsewhere classified, unspecified knee -M71571 Other bursitis, not elsewhere classified, right ankle and foot -M71572 Other bursitis, not elsewhere classified, left ankle and foot -M71579 Other bursitis, not elsewhere classified, unspecified ankle and foot -M7158 Other bursitis, not elsewhere classified, other site -M7180 Other specified bursopathies, unspecified site -M71811 Other specified bursopathies, right shoulder -M71812 Other specified bursopathies, left shoulder -M71819 Other specified bursopathies, unspecified shoulder -M71821 Other specified bursopathies, right elbow -M71822 Other specified bursopathies, left elbow -M71829 Other specified bursopathies, unspecified elbow -M71831 Other specified bursopathies, right wrist -M71832 Other specified bursopathies, left wrist -M71839 Other specified bursopathies, unspecified wrist -M71841 Other specified bursopathies, right hand -M71842 Other specified bursopathies, left hand -M71849 Other specified bursopathies, unspecified hand -M71851 Other specified bursopathies, right hip -M71852 Other specified bursopathies, left hip -M71859 Other specified bursopathies, unspecified hip -M71861 Other specified bursopathies, right knee -M71862 Other specified bursopathies, left knee -M71869 Other specified bursopathies, unspecified knee -M71871 Other specified bursopathies, right ankle and foot -M71872 Other specified bursopathies, left ankle and foot -M71879 Other specified bursopathies, unspecified ankle and foot -M7188 Other specified bursopathies, other site -M7189 Other specified bursopathies, multiple sites -M719 Bursopathy, unspecified -M720 Palmar fascial fibromatosis [Dupuytren] -M721 Knuckle pads -M722 Plantar fascial fibromatosis -M724 Pseudosarcomatous fibromatosis -M726 Necrotizing fasciitis -M728 Other fibroblastic disorders -M729 Fibroblastic disorder, unspecified -M7500 Adhesive capsulitis of unspecified shoulder -M7501 Adhesive capsulitis of right shoulder -M7502 Adhesive capsulitis of left shoulder -M75100 Unspecified rotator cuff tear or rupture of unspecified shoulder, not specified as traumatic -M75101 Unspecified rotator cuff tear or rupture of right shoulder, not specified as traumatic -M75102 Unspecified rotator cuff tear or rupture of left shoulder, not specified as traumatic -M75110 Incomplete rotator cuff tear or rupture of unspecified shoulder, not specified as traumatic -M75111 Incomplete rotator cuff tear or rupture of right shoulder, not specified as traumatic -M75112 Incomplete rotator cuff tear or rupture of left shoulder, not specified as traumatic -M75120 Complete rotator cuff tear or rupture of unspecified shoulder, not specified as traumatic -M75121 Complete rotator cuff tear or rupture of right shoulder, not specified as traumatic -M75122 Complete rotator cuff tear or rupture of left shoulder, not specified as traumatic -M7520 Bicipital tendinitis, unspecified shoulder -M7521 Bicipital tendinitis, right shoulder -M7522 Bicipital tendinitis, left shoulder -M7530 Calcific tendinitis of unspecified shoulder -M7531 Calcific tendinitis of right shoulder -M7532 Calcific tendinitis of left shoulder -M7540 Impingement syndrome of unspecified shoulder -M7541 Impingement syndrome of right shoulder -M7542 Impingement syndrome of left shoulder -M7550 Bursitis of unspecified shoulder -M7551 Bursitis of right shoulder -M7552 Bursitis of left shoulder -M7580 Other shoulder lesions, unspecified shoulder -M7581 Other shoulder lesions, right shoulder -M7582 Other shoulder lesions, left shoulder -M7590 Shoulder lesion, unspecified, unspecified shoulder -M7591 Shoulder lesion, unspecified, right shoulder -M7592 Shoulder lesion, unspecified, left shoulder -M7600 Gluteal tendinitis, unspecified hip -M7601 Gluteal tendinitis, right hip -M7602 Gluteal tendinitis, left hip -M7610 Psoas tendinitis, unspecified hip -M7611 Psoas tendinitis, right hip -M7612 Psoas tendinitis, left hip -M7620 Iliac crest spur, unspecified hip -M7621 Iliac crest spur, right hip -M7622 Iliac crest spur, left hip -M7630 Iliotibial band syndrome, unspecified leg -M7631 Iliotibial band syndrome, right leg -M7632 Iliotibial band syndrome, left leg -M7640 Tibial collateral bursitis [Pellegrini-Stieda], unspecified leg -M7641 Tibial collateral bursitis [Pellegrini-Stieda], right leg -M7642 Tibial collateral bursitis [Pellegrini-Stieda], left leg -M7650 Patellar tendinitis, unspecified knee -M7651 Patellar tendinitis, right knee -M7652 Patellar tendinitis, left knee -M7660 Achilles tendinitis, unspecified leg -M7661 Achilles tendinitis, right leg -M7662 Achilles tendinitis, left leg -M7670 Peroneal tendinitis, unspecified leg -M7671 Peroneal tendinitis, right leg -M7672 Peroneal tendinitis, left leg -M76811 Anterior tibial syndrome, right leg -M76812 Anterior tibial syndrome, left leg -M76819 Anterior tibial syndrome, unspecified leg -M76821 Posterior tibial tendinitis, right leg -M76822 Posterior tibial tendinitis, left leg -M76829 Posterior tibial tendinitis, unspecified leg -M76891 Other specified enthesopathies of right lower limb, excluding foot -M76892 Other specified enthesopathies of left lower limb, excluding foot -M76899 Other specified enthesopathies of unspecified lower limb, excluding foot -M769 Unspecified enthesopathy, lower limb, excluding foot -M7700 Medial epicondylitis, unspecified elbow -M7701 Medial epicondylitis, right elbow -M7702 Medial epicondylitis, left elbow -M7710 Lateral epicondylitis, unspecified elbow -M7711 Lateral epicondylitis, right elbow -M7712 Lateral epicondylitis, left elbow -M7720 Periarthritis, unspecified wrist -M7721 Periarthritis, right wrist -M7722 Periarthritis, left wrist -M7730 Calcaneal spur, unspecified foot -M7731 Calcaneal spur, right foot -M7732 Calcaneal spur, left foot -M7740 Metatarsalgia, unspecified foot -M7741 Metatarsalgia, right foot -M7742 Metatarsalgia, left foot -M7750 Other enthesopathy of unspecified foot -M7751 Other enthesopathy of right foot -M7752 Other enthesopathy of left foot -M778 Other enthesopathies, not elsewhere classified -M779 Enthesopathy, unspecified -M790 Rheumatism, unspecified -M791 Myalgia -M792 Neuralgia and neuritis, unspecified -M793 Panniculitis, unspecified -M794 Hypertrophy of (infrapatellar) fat pad -M795 Residual foreign body in soft tissue -M79601 Pain in right arm -M79602 Pain in left arm -M79603 Pain in arm, unspecified -M79604 Pain in right leg -M79605 Pain in left leg -M79606 Pain in leg, unspecified -M79609 Pain in unspecified limb -M79621 Pain in right upper arm -M79622 Pain in left upper arm -M79629 Pain in unspecified upper arm -M79631 Pain in right forearm -M79632 Pain in left forearm -M79639 Pain in unspecified forearm -M79641 Pain in right hand -M79642 Pain in left hand -M79643 Pain in unspecified hand -M79644 Pain in right finger(s) -M79645 Pain in left finger(s) -M79646 Pain in unspecified finger(s) -M79651 Pain in right thigh -M79652 Pain in left thigh -M79659 Pain in unspecified thigh -M79661 Pain in right lower leg -M79662 Pain in left lower leg -M79669 Pain in unspecified lower leg -M79671 Pain in right foot -M79672 Pain in left foot -M79673 Pain in unspecified foot -M79674 Pain in right toe(s) -M79675 Pain in left toe(s) -M79676 Pain in unspecified toe(s) -M797 Fibromyalgia -M79A11 Nontraumatic compartment syndrome of right upper extremity -M79A12 Nontraumatic compartment syndrome of left upper extremity -M79A19 Nontraumatic compartment syndrome of unspecified upper extremity -M79A21 Nontraumatic compartment syndrome of right lower extremity -M79A22 Nontraumatic compartment syndrome of left lower extremity -M79A29 Nontraumatic compartment syndrome of unspecified lower extremity -M79A3 Nontraumatic compartment syndrome of abdomen -M79A9 Nontraumatic compartment syndrome of other sites -M7981 Nontraumatic hematoma of soft tissue -M7989 Other specified soft tissue disorders -M799 Soft tissue disorder, unspecified -M8000XA Age-related osteoporosis with current pathological fracture, unspecified site, initial encounter for fracture -M8000XD Age-related osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with routine healing -M8000XG Age-related osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with delayed healing -M8000XK Age-related osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with nonunion -M8000XP Age-related osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with malunion -M8000XS Age-related osteoporosis with current pathological fracture, unspecified site, sequela -M80011A Age-related osteoporosis with current pathological fracture, right shoulder, initial encounter for fracture -M80011D Age-related osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with routine healing -M80011G Age-related osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with delayed healing -M80011K Age-related osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with nonunion -M80011P Age-related osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with malunion -M80011S Age-related osteoporosis with current pathological fracture, right shoulder, sequela -M80012A Age-related osteoporosis with current pathological fracture, left shoulder, initial encounter for fracture -M80012D Age-related osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with routine healing -M80012G Age-related osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with delayed healing -M80012K Age-related osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with nonunion -M80012P Age-related osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with malunion -M80012S Age-related osteoporosis with current pathological fracture, left shoulder, sequela -M80019A Age-related osteoporosis with current pathological fracture, unspecified shoulder, initial encounter for fracture -M80019D Age-related osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with routine healing -M80019G Age-related osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with delayed healing -M80019K Age-related osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with nonunion -M80019P Age-related osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with malunion -M80019S Age-related osteoporosis with current pathological fracture, unspecified shoulder, sequela -M80021A Age-related osteoporosis with current pathological fracture, right humerus, initial encounter for fracture -M80021D Age-related osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with routine healing -M80021G Age-related osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with delayed healing -M80021K Age-related osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with nonunion -M80021P Age-related osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with malunion -M80021S Age-related osteoporosis with current pathological fracture, right humerus, sequela -M80022A Age-related osteoporosis with current pathological fracture, left humerus, initial encounter for fracture -M80022D Age-related osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with routine healing -M80022G Age-related osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with delayed healing -M80022K Age-related osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with nonunion -M80022P Age-related osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with malunion -M80022S Age-related osteoporosis with current pathological fracture, left humerus, sequela -M80029A Age-related osteoporosis with current pathological fracture, unspecified humerus, initial encounter for fracture -M80029D Age-related osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with routine healing -M80029G Age-related osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with delayed healing -M80029K Age-related osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with nonunion -M80029P Age-related osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with malunion -M80029S Age-related osteoporosis with current pathological fracture, unspecified humerus, sequela -M80031A Age-related osteoporosis with current pathological fracture, right forearm, initial encounter for fracture -M80031D Age-related osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with routine healing -M80031G Age-related osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with delayed healing -M80031K Age-related osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with nonunion -M80031P Age-related osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with malunion -M80031S Age-related osteoporosis with current pathological fracture, right forearm, sequela -M80032A Age-related osteoporosis with current pathological fracture, left forearm, initial encounter for fracture -M80032D Age-related osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with routine healing -M80032G Age-related osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with delayed healing -M80032K Age-related osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with nonunion -M80032P Age-related osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with malunion -M80032S Age-related osteoporosis with current pathological fracture, left forearm, sequela -M80039A Age-related osteoporosis with current pathological fracture, unspecified forearm, initial encounter for fracture -M80039D Age-related osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with routine healing -M80039G Age-related osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with delayed healing -M80039K Age-related osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with nonunion -M80039P Age-related osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with malunion -M80039S Age-related osteoporosis with current pathological fracture, unspecified forearm, sequela -M80041A Age-related osteoporosis with current pathological fracture, right hand, initial encounter for fracture -M80041D Age-related osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with routine healing -M80041G Age-related osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with delayed healing -M80041K Age-related osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with nonunion -M80041P Age-related osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with malunion -M80041S Age-related osteoporosis with current pathological fracture, right hand, sequela -M80042A Age-related osteoporosis with current pathological fracture, left hand, initial encounter for fracture -M80042D Age-related osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with routine healing -M80042G Age-related osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with delayed healing -M80042K Age-related osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with nonunion -M80042P Age-related osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with malunion -M80042S Age-related osteoporosis with current pathological fracture, left hand, sequela -M80049A Age-related osteoporosis with current pathological fracture, unspecified hand, initial encounter for fracture -M80049D Age-related osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with routine healing -M80049G Age-related osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with delayed healing -M80049K Age-related osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with nonunion -M80049P Age-related osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with malunion -M80049S Age-related osteoporosis with current pathological fracture, unspecified hand, sequela -M80051A Age-related osteoporosis with current pathological fracture, right femur, initial encounter for fracture -M80051D Age-related osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with routine healing -M80051G Age-related osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with delayed healing -M80051K Age-related osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with nonunion -M80051P Age-related osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with malunion -M80051S Age-related osteoporosis with current pathological fracture, right femur, sequela -M80052A Age-related osteoporosis with current pathological fracture, left femur, initial encounter for fracture -M80052D Age-related osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with routine healing -M80052G Age-related osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with delayed healing -M80052K Age-related osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with nonunion -M80052P Age-related osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with malunion -M80052S Age-related osteoporosis with current pathological fracture, left femur, sequela -M80059A Age-related osteoporosis with current pathological fracture, unspecified femur, initial encounter for fracture -M80059D Age-related osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with routine healing -M80059G Age-related osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with delayed healing -M80059K Age-related osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with nonunion -M80059P Age-related osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with malunion -M80059S Age-related osteoporosis with current pathological fracture, unspecified femur, sequela -M80061A Age-related osteoporosis with current pathological fracture, right lower leg, initial encounter for fracture -M80061D Age-related osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with routine healing -M80061G Age-related osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with delayed healing -M80061K Age-related osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with nonunion -M80061P Age-related osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with malunion -M80061S Age-related osteoporosis with current pathological fracture, right lower leg, sequela -M80062A Age-related osteoporosis with current pathological fracture, left lower leg, initial encounter for fracture -M80062D Age-related osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with routine healing -M80062G Age-related osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with delayed healing -M80062K Age-related osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with nonunion -M80062P Age-related osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with malunion -M80062S Age-related osteoporosis with current pathological fracture, left lower leg, sequela -M80069A Age-related osteoporosis with current pathological fracture, unspecified lower leg, initial encounter for fracture -M80069D Age-related osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with routine healing -M80069G Age-related osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with delayed healing -M80069K Age-related osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with nonunion -M80069P Age-related osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with malunion -M80069S Age-related osteoporosis with current pathological fracture, unspecified lower leg, sequela -M80071A Age-related osteoporosis with current pathological fracture, right ankle and foot, initial encounter for fracture -M80071D Age-related osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with routine healing -M80071G Age-related osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with delayed healing -M80071K Age-related osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with nonunion -M80071P Age-related osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with malunion -M80071S Age-related osteoporosis with current pathological fracture, right ankle and foot, sequela -M80072A Age-related osteoporosis with current pathological fracture, left ankle and foot, initial encounter for fracture -M80072D Age-related osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with routine healing -M80072G Age-related osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with delayed healing -M80072K Age-related osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with nonunion -M80072P Age-related osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with malunion -M80072S Age-related osteoporosis with current pathological fracture, left ankle and foot, sequela -M80079A Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, initial encounter for fracture -M80079D Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with routine healing -M80079G Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with delayed healing -M80079K Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with nonunion -M80079P Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with malunion -M80079S Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, sequela -M8008XA Age-related osteoporosis with current pathological fracture, vertebra(e), initial encounter for fracture -M8008XD Age-related osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with routine healing -M8008XG Age-related osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with delayed healing -M8008XK Age-related osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with nonunion -M8008XP Age-related osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with malunion -M8008XS Age-related osteoporosis with current pathological fracture, vertebra(e), sequela -M8080XA Other osteoporosis with current pathological fracture, unspecified site, initial encounter for fracture -M8080XD Other osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with routine healing -M8080XG Other osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with delayed healing -M8080XK Other osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with nonunion -M8080XP Other osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with malunion -M8080XS Other osteoporosis with current pathological fracture, unspecified site, sequela -M80811A Other osteoporosis with current pathological fracture, right shoulder, initial encounter for fracture -M80811D Other osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with routine healing -M80811G Other osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with delayed healing -M80811K Other osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with nonunion -M80811P Other osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with malunion -M80811S Other osteoporosis with current pathological fracture, right shoulder, sequela -M80812A Other osteoporosis with current pathological fracture, left shoulder, initial encounter for fracture -M80812D Other osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with routine healing -M80812G Other osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with delayed healing -M80812K Other osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with nonunion -M80812P Other osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with malunion -M80812S Other osteoporosis with current pathological fracture, left shoulder, sequela -M80819A Other osteoporosis with current pathological fracture, unspecified shoulder, initial encounter for fracture -M80819D Other osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with routine healing -M80819G Other osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with delayed healing -M80819K Other osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with nonunion -M80819P Other osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with malunion -M80819S Other osteoporosis with current pathological fracture, unspecified shoulder, sequela -M80821A Other osteoporosis with current pathological fracture, right humerus, initial encounter for fracture -M80821D Other osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with routine healing -M80821G Other osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with delayed healing -M80821K Other osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with nonunion -M80821P Other osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with malunion -M80821S Other osteoporosis with current pathological fracture, right humerus, sequela -M80822A Other osteoporosis with current pathological fracture, left humerus, initial encounter for fracture -M80822D Other osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with routine healing -M80822G Other osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with delayed healing -M80822K Other osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with nonunion -M80822P Other osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with malunion -M80822S Other osteoporosis with current pathological fracture, left humerus, sequela -M80829A Other osteoporosis with current pathological fracture, unspecified humerus, initial encounter for fracture -M80829D Other osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with routine healing -M80829G Other osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with delayed healing -M80829K Other osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with nonunion -M80829P Other osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with malunion -M80829S Other osteoporosis with current pathological fracture, unspecified humerus, sequela -M80831A Other osteoporosis with current pathological fracture, right forearm, initial encounter for fracture -M80831D Other osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with routine healing -M80831G Other osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with delayed healing -M80831K Other osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with nonunion -M80831P Other osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with malunion -M80831S Other osteoporosis with current pathological fracture, right forearm, sequela -M80832A Other osteoporosis with current pathological fracture, left forearm, initial encounter for fracture -M80832D Other osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with routine healing -M80832G Other osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with delayed healing -M80832K Other osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with nonunion -M80832P Other osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with malunion -M80832S Other osteoporosis with current pathological fracture, left forearm, sequela -M80839A Other osteoporosis with current pathological fracture, unspecified forearm, initial encounter for fracture -M80839D Other osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with routine healing -M80839G Other osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with delayed healing -M80839K Other osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with nonunion -M80839P Other osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with malunion -M80839S Other osteoporosis with current pathological fracture, unspecified forearm, sequela -M80841A Other osteoporosis with current pathological fracture, right hand, initial encounter for fracture -M80841D Other osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with routine healing -M80841G Other osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with delayed healing -M80841K Other osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with nonunion -M80841P Other osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with malunion -M80841S Other osteoporosis with current pathological fracture, right hand, sequela -M80842A Other osteoporosis with current pathological fracture, left hand, initial encounter for fracture -M80842D Other osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with routine healing -M80842G Other osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with delayed healing -M80842K Other osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with nonunion -M80842P Other osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with malunion -M80842S Other osteoporosis with current pathological fracture, left hand, sequela -M80849A Other osteoporosis with current pathological fracture, unspecified hand, initial encounter for fracture -M80849D Other osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with routine healing -M80849G Other osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with delayed healing -M80849K Other osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with nonunion -M80849P Other osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with malunion -M80849S Other osteoporosis with current pathological fracture, unspecified hand, sequela -M80851A Other osteoporosis with current pathological fracture, right femur, initial encounter for fracture -M80851D Other osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with routine healing -M80851G Other osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with delayed healing -M80851K Other osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with nonunion -M80851P Other osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with malunion -M80851S Other osteoporosis with current pathological fracture, right femur, sequela -M80852A Other osteoporosis with current pathological fracture, left femur, initial encounter for fracture -M80852D Other osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with routine healing -M80852G Other osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with delayed healing -M80852K Other osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with nonunion -M80852P Other osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with malunion -M80852S Other osteoporosis with current pathological fracture, left femur, sequela -M80859A Other osteoporosis with current pathological fracture, unspecified femur, initial encounter for fracture -M80859D Other osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with routine healing -M80859G Other osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with delayed healing -M80859K Other osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with nonunion -M80859P Other osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with malunion -M80859S Other osteoporosis with current pathological fracture, unspecified femur, sequela -M80861A Other osteoporosis with current pathological fracture, right lower leg, initial encounter for fracture -M80861D Other osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with routine healing -M80861G Other osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with delayed healing -M80861K Other osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with nonunion -M80861P Other osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with malunion -M80861S Other osteoporosis with current pathological fracture, right lower leg, sequela -M80862A Other osteoporosis with current pathological fracture, left lower leg, initial encounter for fracture -M80862D Other osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with routine healing -M80862G Other osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with delayed healing -M80862K Other osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with nonunion -M80862P Other osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with malunion -M80862S Other osteoporosis with current pathological fracture, left lower leg, sequela -M80869A Other osteoporosis with current pathological fracture, unspecified lower leg, initial encounter for fracture -M80869D Other osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with routine healing -M80869G Other osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with delayed healing -M80869K Other osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with nonunion -M80869P Other osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with malunion -M80869S Other osteoporosis with current pathological fracture, unspecified lower leg, sequela -M80871A Other osteoporosis with current pathological fracture, right ankle and foot, initial encounter for fracture -M80871D Other osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with routine healing -M80871G Other osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with delayed healing -M80871K Other osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with nonunion -M80871P Other osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with malunion -M80871S Other osteoporosis with current pathological fracture, right ankle and foot, sequela -M80872A Other osteoporosis with current pathological fracture, left ankle and foot, initial encounter for fracture -M80872D Other osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with routine healing -M80872G Other osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with delayed healing -M80872K Other osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with nonunion -M80872P Other osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with malunion -M80872S Other osteoporosis with current pathological fracture, left ankle and foot, sequela -M80879A Other osteoporosis with current pathological fracture, unspecified ankle and foot, initial encounter for fracture -M80879D Other osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with routine healing -M80879G Other osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with delayed healing -M80879K Other osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with nonunion -M80879P Other osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with malunion -M80879S Other osteoporosis with current pathological fracture, unspecified ankle and foot, sequela -M8088XA Other osteoporosis with current pathological fracture, vertebra(e), initial encounter for fracture -M8088XD Other osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with routine healing -M8088XG Other osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with delayed healing -M8088XK Other osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with nonunion -M8088XP Other osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with malunion -M8088XS Other osteoporosis with current pathological fracture, vertebra(e), sequela -M810 Age-related osteoporosis without current pathological fracture -M816 Localized osteoporosis [Lequesne] -M818 Other osteoporosis without current pathological fracture -M830 Puerperal osteomalacia -M831 Senile osteomalacia -M832 Adult osteomalacia due to malabsorption -M833 Adult osteomalacia due to malnutrition -M834 Aluminum bone disease -M835 Other drug-induced osteomalacia in adults -M838 Other adult osteomalacia -M839 Adult osteomalacia, unspecified -M8430XA Stress fracture, unspecified site, initial encounter for fracture -M8430XD Stress fracture, unspecified site, subsequent encounter for fracture with routine healing -M8430XG Stress fracture, unspecified site, subsequent encounter for fracture with delayed healing -M8430XK Stress fracture, unspecified site, subsequent encounter for fracture with nonunion -M8430XP Stress fracture, unspecified site, subsequent encounter for fracture with malunion -M8430XS Stress fracture, unspecified site, sequela -M84311A Stress fracture, right shoulder, initial encounter for fracture -M84311D Stress fracture, right shoulder, subsequent encounter for fracture with routine healing -M84311G Stress fracture, right shoulder, subsequent encounter for fracture with delayed healing -M84311K Stress fracture, right shoulder, subsequent encounter for fracture with nonunion -M84311P Stress fracture, right shoulder, subsequent encounter for fracture with malunion -M84311S Stress fracture, right shoulder, sequela -M84312A Stress fracture, left shoulder, initial encounter for fracture -M84312D Stress fracture, left shoulder, subsequent encounter for fracture with routine healing -M84312G Stress fracture, left shoulder, subsequent encounter for fracture with delayed healing -M84312K Stress fracture, left shoulder, subsequent encounter for fracture with nonunion -M84312P Stress fracture, left shoulder, subsequent encounter for fracture with malunion -M84312S Stress fracture, left shoulder, sequela -M84319A Stress fracture, unspecified shoulder, initial encounter for fracture -M84319D Stress fracture, unspecified shoulder, subsequent encounter for fracture with routine healing -M84319G Stress fracture, unspecified shoulder, subsequent encounter for fracture with delayed healing -M84319K Stress fracture, unspecified shoulder, subsequent encounter for fracture with nonunion -M84319P Stress fracture, unspecified shoulder, subsequent encounter for fracture with malunion -M84319S Stress fracture, unspecified shoulder, sequela -M84321A Stress fracture, right humerus, initial encounter for fracture -M84321D Stress fracture, right humerus, subsequent encounter for fracture with routine healing -M84321G Stress fracture, right humerus, subsequent encounter for fracture with delayed healing -M84321K Stress fracture, right humerus, subsequent encounter for fracture with nonunion -M84321P Stress fracture, right humerus, subsequent encounter for fracture with malunion -M84321S Stress fracture, right humerus, sequela -M84322A Stress fracture, left humerus, initial encounter for fracture -M84322D Stress fracture, left humerus, subsequent encounter for fracture with routine healing -M84322G Stress fracture, left humerus, subsequent encounter for fracture with delayed healing -M84322K Stress fracture, left humerus, subsequent encounter for fracture with nonunion -M84322P Stress fracture, left humerus, subsequent encounter for fracture with malunion -M84322S Stress fracture, left humerus, sequela -M84329A Stress fracture, unspecified humerus, initial encounter for fracture -M84329D Stress fracture, unspecified humerus, subsequent encounter for fracture with routine healing -M84329G Stress fracture, unspecified humerus, subsequent encounter for fracture with delayed healing -M84329K Stress fracture, unspecified humerus, subsequent encounter for fracture with nonunion -M84329P Stress fracture, unspecified humerus, subsequent encounter for fracture with malunion -M84329S Stress fracture, unspecified humerus, sequela -M84331A Stress fracture, right ulna, initial encounter for fracture -M84331D Stress fracture, right ulna, subsequent encounter for fracture with routine healing -M84331G Stress fracture, right ulna, subsequent encounter for fracture with delayed healing -M84331K Stress fracture, right ulna, subsequent encounter for fracture with nonunion -M84331P Stress fracture, right ulna, subsequent encounter for fracture with malunion -M84331S Stress fracture, right ulna, sequela -M84332A Stress fracture, left ulna, initial encounter for fracture -M84332D Stress fracture, left ulna, subsequent encounter for fracture with routine healing -M84332G Stress fracture, left ulna, subsequent encounter for fracture with delayed healing -M84332K Stress fracture, left ulna, subsequent encounter for fracture with nonunion -M84332P Stress fracture, left ulna, subsequent encounter for fracture with malunion -M84332S Stress fracture, left ulna, sequela -M84333A Stress fracture, right radius, initial encounter for fracture -M84333D Stress fracture, right radius, subsequent encounter for fracture with routine healing -M84333G Stress fracture, right radius, subsequent encounter for fracture with delayed healing -M84333K Stress fracture, right radius, subsequent encounter for fracture with nonunion -M84333P Stress fracture, right radius, subsequent encounter for fracture with malunion -M84333S Stress fracture, right radius, sequela -M84334A Stress fracture, left radius, initial encounter for fracture -M84334D Stress fracture, left radius, subsequent encounter for fracture with routine healing -M84334G Stress fracture, left radius, subsequent encounter for fracture with delayed healing -M84334K Stress fracture, left radius, subsequent encounter for fracture with nonunion -M84334P Stress fracture, left radius, subsequent encounter for fracture with malunion -M84334S Stress fracture, left radius, sequela -M84339A Stress fracture, unspecified ulna and radius, initial encounter for fracture -M84339D Stress fracture, unspecified ulna and radius, subsequent encounter for fracture with routine healing -M84339G Stress fracture, unspecified ulna and radius, subsequent encounter for fracture with delayed healing -M84339K Stress fracture, unspecified ulna and radius, subsequent encounter for fracture with nonunion -M84339P Stress fracture, unspecified ulna and radius, subsequent encounter for fracture with malunion -M84339S Stress fracture, unspecified ulna and radius, sequela -M84341A Stress fracture, right hand, initial encounter for fracture -M84341D Stress fracture, right hand, subsequent encounter for fracture with routine healing -M84341G Stress fracture, right hand, subsequent encounter for fracture with delayed healing -M84341K Stress fracture, right hand, subsequent encounter for fracture with nonunion -M84341P Stress fracture, right hand, subsequent encounter for fracture with malunion -M84341S Stress fracture, right hand, sequela -M84342A Stress fracture, left hand, initial encounter for fracture -M84342D Stress fracture, left hand, subsequent encounter for fracture with routine healing -M84342G Stress fracture, left hand, subsequent encounter for fracture with delayed healing -M84342K Stress fracture, left hand, subsequent encounter for fracture with nonunion -M84342P Stress fracture, left hand, subsequent encounter for fracture with malunion -M84342S Stress fracture, left hand, sequela -M84343A Stress fracture, unspecified hand, initial encounter for fracture -M84343D Stress fracture, unspecified hand, subsequent encounter for fracture with routine healing -M84343G Stress fracture, unspecified hand, subsequent encounter for fracture with delayed healing -M84343K Stress fracture, unspecified hand, subsequent encounter for fracture with nonunion -M84343P Stress fracture, unspecified hand, subsequent encounter for fracture with malunion -M84343S Stress fracture, unspecified hand, sequela -M84344A Stress fracture, right finger(s), initial encounter for fracture -M84344D Stress fracture, right finger(s), subsequent encounter for fracture with routine healing -M84344G Stress fracture, right finger(s), subsequent encounter for fracture with delayed healing -M84344K Stress fracture, right finger(s), subsequent encounter for fracture with nonunion -M84344P Stress fracture, right finger(s), subsequent encounter for fracture with malunion -M84344S Stress fracture, right finger(s), sequela -M84345A Stress fracture, left finger(s), initial encounter for fracture -M84345D Stress fracture, left finger(s), subsequent encounter for fracture with routine healing -M84345G Stress fracture, left finger(s), subsequent encounter for fracture with delayed healing -M84345K Stress fracture, left finger(s), subsequent encounter for fracture with nonunion -M84345P Stress fracture, left finger(s), subsequent encounter for fracture with malunion -M84345S Stress fracture, left finger(s), sequela -M84346A Stress fracture, unspecified finger(s), initial encounter for fracture -M84346D Stress fracture, unspecified finger(s), subsequent encounter for fracture with routine healing -M84346G Stress fracture, unspecified finger(s), subsequent encounter for fracture with delayed healing -M84346K Stress fracture, unspecified finger(s), subsequent encounter for fracture with nonunion -M84346P Stress fracture, unspecified finger(s), subsequent encounter for fracture with malunion -M84346S Stress fracture, unspecified finger(s), sequela -M84350A Stress fracture, pelvis, initial encounter for fracture -M84350D Stress fracture, pelvis, subsequent encounter for fracture with routine healing -M84350G Stress fracture, pelvis, subsequent encounter for fracture with delayed healing -M84350K Stress fracture, pelvis, subsequent encounter for fracture with nonunion -M84350P Stress fracture, pelvis, subsequent encounter for fracture with malunion -M84350S Stress fracture, pelvis, sequela -M84351A Stress fracture, right femur, initial encounter for fracture -M84351D Stress fracture, right femur, subsequent encounter for fracture with routine healing -M84351G Stress fracture, right femur, subsequent encounter for fracture with delayed healing -M84351K Stress fracture, right femur, subsequent encounter for fracture with nonunion -M84351P Stress fracture, right femur, subsequent encounter for fracture with malunion -M84351S Stress fracture, right femur, sequela -M84352A Stress fracture, left femur, initial encounter for fracture -M84352D Stress fracture, left femur, subsequent encounter for fracture with routine healing -M84352G Stress fracture, left femur, subsequent encounter for fracture with delayed healing -M84352K Stress fracture, left femur, subsequent encounter for fracture with nonunion -M84352P Stress fracture, left femur, subsequent encounter for fracture with malunion -M84352S Stress fracture, left femur, sequela -M84353A Stress fracture, unspecified femur, initial encounter for fracture -M84353D Stress fracture, unspecified femur, subsequent encounter for fracture with routine healing -M84353G Stress fracture, unspecified femur, subsequent encounter for fracture with delayed healing -M84353K Stress fracture, unspecified femur, subsequent encounter for fracture with nonunion -M84353P Stress fracture, unspecified femur, subsequent encounter for fracture with malunion -M84353S Stress fracture, unspecified femur, sequela -M84359A Stress fracture, hip, unspecified, initial encounter for fracture -M84359D Stress fracture, hip, unspecified, subsequent encounter for fracture with routine healing -M84359G Stress fracture, hip, unspecified, subsequent encounter for fracture with delayed healing -M84359K Stress fracture, hip, unspecified, subsequent encounter for fracture with nonunion -M84359P Stress fracture, hip, unspecified, subsequent encounter for fracture with malunion -M84359S Stress fracture, hip, unspecified, sequela -M84361A Stress fracture, right tibia, initial encounter for fracture -M84361D Stress fracture, right tibia, subsequent encounter for fracture with routine healing -M84361G Stress fracture, right tibia, subsequent encounter for fracture with delayed healing -M84361K Stress fracture, right tibia, subsequent encounter for fracture with nonunion -M84361P Stress fracture, right tibia, subsequent encounter for fracture with malunion -M84361S Stress fracture, right tibia, sequela -M84362A Stress fracture, left tibia, initial encounter for fracture -M84362D Stress fracture, left tibia, subsequent encounter for fracture with routine healing -M84362G Stress fracture, left tibia, subsequent encounter for fracture with delayed healing -M84362K Stress fracture, left tibia, subsequent encounter for fracture with nonunion -M84362P Stress fracture, left tibia, subsequent encounter for fracture with malunion -M84362S Stress fracture, left tibia, sequela -M84363A Stress fracture, right fibula, initial encounter for fracture -M84363D Stress fracture, right fibula, subsequent encounter for fracture with routine healing -M84363G Stress fracture, right fibula, subsequent encounter for fracture with delayed healing -M84363K Stress fracture, right fibula, subsequent encounter for fracture with nonunion -M84363P Stress fracture, right fibula, subsequent encounter for fracture with malunion -M84363S Stress fracture, right fibula, sequela -M84364A Stress fracture, left fibula, initial encounter for fracture -M84364D Stress fracture, left fibula, subsequent encounter for fracture with routine healing -M84364G Stress fracture, left fibula, subsequent encounter for fracture with delayed healing -M84364K Stress fracture, left fibula, subsequent encounter for fracture with nonunion -M84364P Stress fracture, left fibula, subsequent encounter for fracture with malunion -M84364S Stress fracture, left fibula, sequela -M84369A Stress fracture, unspecified tibia and fibula, initial encounter for fracture -M84369D Stress fracture, unspecified tibia and fibula, subsequent encounter for fracture with routine healing -M84369G Stress fracture, unspecified tibia and fibula, subsequent encounter for fracture with delayed healing -M84369K Stress fracture, unspecified tibia and fibula, subsequent encounter for fracture with nonunion -M84369P Stress fracture, unspecified tibia and fibula, subsequent encounter for fracture with malunion -M84369S Stress fracture, unspecified tibia and fibula, sequela -M84371A Stress fracture, right ankle, initial encounter for fracture -M84371D Stress fracture, right ankle, subsequent encounter for fracture with routine healing -M84371G Stress fracture, right ankle, subsequent encounter for fracture with delayed healing -M84371K Stress fracture, right ankle, subsequent encounter for fracture with nonunion -M84371P Stress fracture, right ankle, subsequent encounter for fracture with malunion -M84371S Stress fracture, right ankle, sequela -M84372A Stress fracture, left ankle, initial encounter for fracture -M84372D Stress fracture, left ankle, subsequent encounter for fracture with routine healing -M84372G Stress fracture, left ankle, subsequent encounter for fracture with delayed healing -M84372K Stress fracture, left ankle, subsequent encounter for fracture with nonunion -M84372P Stress fracture, left ankle, subsequent encounter for fracture with malunion -M84372S Stress fracture, left ankle, sequela -M84373A Stress fracture, unspecified ankle, initial encounter for fracture -M84373D Stress fracture, unspecified ankle, subsequent encounter for fracture with routine healing -M84373G Stress fracture, unspecified ankle, subsequent encounter for fracture with delayed healing -M84373K Stress fracture, unspecified ankle, subsequent encounter for fracture with nonunion -M84373P Stress fracture, unspecified ankle, subsequent encounter for fracture with malunion -M84373S Stress fracture, unspecified ankle, sequela -M84374A Stress fracture, right foot, initial encounter for fracture -M84374D Stress fracture, right foot, subsequent encounter for fracture with routine healing -M84374G Stress fracture, right foot, subsequent encounter for fracture with delayed healing -M84374K Stress fracture, right foot, subsequent encounter for fracture with nonunion -M84374P Stress fracture, right foot, subsequent encounter for fracture with malunion -M84374S Stress fracture, right foot, sequela -M84375A Stress fracture, left foot, initial encounter for fracture -M84375D Stress fracture, left foot, subsequent encounter for fracture with routine healing -M84375G Stress fracture, left foot, subsequent encounter for fracture with delayed healing -M84375K Stress fracture, left foot, subsequent encounter for fracture with nonunion -M84375P Stress fracture, left foot, subsequent encounter for fracture with malunion -M84375S Stress fracture, left foot, sequela -M84376A Stress fracture, unspecified foot, initial encounter for fracture -M84376D Stress fracture, unspecified foot, subsequent encounter for fracture with routine healing -M84376G Stress fracture, unspecified foot, subsequent encounter for fracture with delayed healing -M84376K Stress fracture, unspecified foot, subsequent encounter for fracture with nonunion -M84376P Stress fracture, unspecified foot, subsequent encounter for fracture with malunion -M84376S Stress fracture, unspecified foot, sequela -M84377A Stress fracture, right toe(s), initial encounter for fracture -M84377D Stress fracture, right toe(s), subsequent encounter for fracture with routine healing -M84377G Stress fracture, right toe(s), subsequent encounter for fracture with delayed healing -M84377K Stress fracture, right toe(s), subsequent encounter for fracture with nonunion -M84377P Stress fracture, right toe(s), subsequent encounter for fracture with malunion -M84377S Stress fracture, right toe(s), sequela -M84378A Stress fracture, left toe(s), initial encounter for fracture -M84378D Stress fracture, left toe(s), subsequent encounter for fracture with routine healing -M84378G Stress fracture, left toe(s), subsequent encounter for fracture with delayed healing -M84378K Stress fracture, left toe(s), subsequent encounter for fracture with nonunion -M84378P Stress fracture, left toe(s), subsequent encounter for fracture with malunion -M84378S Stress fracture, left toe(s), sequela -M84379A Stress fracture, unspecified toe(s), initial encounter for fracture -M84379D Stress fracture, unspecified toe(s), subsequent encounter for fracture with routine healing -M84379G Stress fracture, unspecified toe(s), subsequent encounter for fracture with delayed healing -M84379K Stress fracture, unspecified toe(s), subsequent encounter for fracture with nonunion -M84379P Stress fracture, unspecified toe(s), subsequent encounter for fracture with malunion -M84379S Stress fracture, unspecified toe(s), sequela -M8438XA Stress fracture, other site, initial encounter for fracture -M8438XD Stress fracture, other site, subsequent encounter for fracture with routine healing -M8438XG Stress fracture, other site, subsequent encounter for fracture with delayed healing -M8438XK Stress fracture, other site, subsequent encounter for fracture with nonunion -M8438XP Stress fracture, other site, subsequent encounter for fracture with malunion -M8438XS Stress fracture, other site, sequela -M8440XA Pathological fracture, unspecified site, initial encounter for fracture -M8440XD Pathological fracture, unspecified site, subsequent encounter for fracture with routine healing -M8440XG Pathological fracture, unspecified site, subsequent encounter for fracture with delayed healing -M8440XK Pathological fracture, unspecified site, subsequent encounter for fracture with nonunion -M8440XP Pathological fracture, unspecified site, subsequent encounter for fracture with malunion -M8440XS Pathological fracture, unspecified site, sequela -M84411A Pathological fracture, right shoulder, initial encounter for fracture -M84411D Pathological fracture, right shoulder, subsequent encounter for fracture with routine healing -M84411G Pathological fracture, right shoulder, subsequent encounter for fracture with delayed healing -M84411K Pathological fracture, right shoulder, subsequent encounter for fracture with nonunion -M84411P Pathological fracture, right shoulder, subsequent encounter for fracture with malunion -M84411S Pathological fracture, right shoulder, sequela -M84412A Pathological fracture, left shoulder, initial encounter for fracture -M84412D Pathological fracture, left shoulder, subsequent encounter for fracture with routine healing -M84412G Pathological fracture, left shoulder, subsequent encounter for fracture with delayed healing -M84412K Pathological fracture, left shoulder, subsequent encounter for fracture with nonunion -M84412P Pathological fracture, left shoulder, subsequent encounter for fracture with malunion -M84412S Pathological fracture, left shoulder, sequela -M84419A Pathological fracture, unspecified shoulder, initial encounter for fracture -M84419D Pathological fracture, unspecified shoulder, subsequent encounter for fracture with routine healing -M84419G Pathological fracture, unspecified shoulder, subsequent encounter for fracture with delayed healing -M84419K Pathological fracture, unspecified shoulder, subsequent encounter for fracture with nonunion -M84419P Pathological fracture, unspecified shoulder, subsequent encounter for fracture with malunion -M84419S Pathological fracture, unspecified shoulder, sequela -M84421A Pathological fracture, right humerus, initial encounter for fracture -M84421D Pathological fracture, right humerus, subsequent encounter for fracture with routine healing -M84421G Pathological fracture, right humerus, subsequent encounter for fracture with delayed healing -M84421K Pathological fracture, right humerus, subsequent encounter for fracture with nonunion -M84421P Pathological fracture, right humerus, subsequent encounter for fracture with malunion -M84421S Pathological fracture, right humerus, sequela -M84422A Pathological fracture, left humerus, initial encounter for fracture -M84422D Pathological fracture, left humerus, subsequent encounter for fracture with routine healing -M84422G Pathological fracture, left humerus, subsequent encounter for fracture with delayed healing -M84422K Pathological fracture, left humerus, subsequent encounter for fracture with nonunion -M84422P Pathological fracture, left humerus, subsequent encounter for fracture with malunion -M84422S Pathological fracture, left humerus, sequela -M84429A Pathological fracture, unspecified humerus, initial encounter for fracture -M84429D Pathological fracture, unspecified humerus, subsequent encounter for fracture with routine healing -M84429G Pathological fracture, unspecified humerus, subsequent encounter for fracture with delayed healing -M84429K Pathological fracture, unspecified humerus, subsequent encounter for fracture with nonunion -M84429P Pathological fracture, unspecified humerus, subsequent encounter for fracture with malunion -M84429S Pathological fracture, unspecified humerus, sequela -M84431A Pathological fracture, right ulna, initial encounter for fracture -M84431D Pathological fracture, right ulna, subsequent encounter for fracture with routine healing -M84431G Pathological fracture, right ulna, subsequent encounter for fracture with delayed healing -M84431K Pathological fracture, right ulna, subsequent encounter for fracture with nonunion -M84431P Pathological fracture, right ulna, subsequent encounter for fracture with malunion -M84431S Pathological fracture, right ulna, sequela -M84432A Pathological fracture, left ulna, initial encounter for fracture -M84432D Pathological fracture, left ulna, subsequent encounter for fracture with routine healing -M84432G Pathological fracture, left ulna, subsequent encounter for fracture with delayed healing -M84432K Pathological fracture, left ulna, subsequent encounter for fracture with nonunion -M84432P Pathological fracture, left ulna, subsequent encounter for fracture with malunion -M84432S Pathological fracture, left ulna, sequela -M84433A Pathological fracture, right radius, initial encounter for fracture -M84433D Pathological fracture, right radius, subsequent encounter for fracture with routine healing -M84433G Pathological fracture, right radius, subsequent encounter for fracture with delayed healing -M84433K Pathological fracture, right radius, subsequent encounter for fracture with nonunion -M84433P Pathological fracture, right radius, subsequent encounter for fracture with malunion -M84433S Pathological fracture, right radius, sequela -M84434A Pathological fracture, left radius, initial encounter for fracture -M84434D Pathological fracture, left radius, subsequent encounter for fracture with routine healing -M84434G Pathological fracture, left radius, subsequent encounter for fracture with delayed healing -M84434K Pathological fracture, left radius, subsequent encounter for fracture with nonunion -M84434P Pathological fracture, left radius, subsequent encounter for fracture with malunion -M84434S Pathological fracture, left radius, sequela -M84439A Pathological fracture, unspecified ulna and radius, initial encounter for fracture -M84439D Pathological fracture, unspecified ulna and radius, subsequent encounter for fracture with routine healing -M84439G Pathological fracture, unspecified ulna and radius, subsequent encounter for fracture with delayed healing -M84439K Pathological fracture, unspecified ulna and radius, subsequent encounter for fracture with nonunion -M84439P Pathological fracture, unspecified ulna and radius, subsequent encounter for fracture with malunion -M84439S Pathological fracture, unspecified ulna and radius, sequela -M84441A Pathological fracture, right hand, initial encounter for fracture -M84441D Pathological fracture, right hand, subsequent encounter for fracture with routine healing -M84441G Pathological fracture, right hand, subsequent encounter for fracture with delayed healing -M84441K Pathological fracture, right hand, subsequent encounter for fracture with nonunion -M84441P Pathological fracture, right hand, subsequent encounter for fracture with malunion -M84441S Pathological fracture, right hand, sequela -M84442A Pathological fracture, left hand, initial encounter for fracture -M84442D Pathological fracture, left hand, subsequent encounter for fracture with routine healing -M84442G Pathological fracture, left hand, subsequent encounter for fracture with delayed healing -M84442K Pathological fracture, left hand, subsequent encounter for fracture with nonunion -M84442P Pathological fracture, left hand, subsequent encounter for fracture with malunion -M84442S Pathological fracture, left hand, sequela -M84443A Pathological fracture, unspecified hand, initial encounter for fracture -M84443D Pathological fracture, unspecified hand, subsequent encounter for fracture with routine healing -M84443G Pathological fracture, unspecified hand, subsequent encounter for fracture with delayed healing -M84443K Pathological fracture, unspecified hand, subsequent encounter for fracture with nonunion -M84443P Pathological fracture, unspecified hand, subsequent encounter for fracture with malunion -M84443S Pathological fracture, unspecified hand, sequela -M84444A Pathological fracture, right finger(s), initial encounter for fracture -M84444D Pathological fracture, right finger(s), subsequent encounter for fracture with routine healing -M84444G Pathological fracture, right finger(s), subsequent encounter for fracture with delayed healing -M84444K Pathological fracture, right finger(s), subsequent encounter for fracture with nonunion -M84444P Pathological fracture, right finger(s), subsequent encounter for fracture with malunion -M84444S Pathological fracture, right finger(s), sequela -M84445A Pathological fracture, left finger(s), initial encounter for fracture -M84445D Pathological fracture, left finger(s), subsequent encounter for fracture with routine healing -M84445G Pathological fracture, left finger(s), subsequent encounter for fracture with delayed healing -M84445K Pathological fracture, left finger(s), subsequent encounter for fracture with nonunion -M84445P Pathological fracture, left finger(s), subsequent encounter for fracture with malunion -M84445S Pathological fracture, left finger(s), sequela -M84446A Pathological fracture, unspecified finger(s), initial encounter for fracture -M84446D Pathological fracture, unspecified finger(s), subsequent encounter for fracture with routine healing -M84446G Pathological fracture, unspecified finger(s), subsequent encounter for fracture with delayed healing -M84446K Pathological fracture, unspecified finger(s), subsequent encounter for fracture with nonunion -M84446P Pathological fracture, unspecified finger(s), subsequent encounter for fracture with malunion -M84446S Pathological fracture, unspecified finger(s), sequela -M84451A Pathological fracture, right femur, initial encounter for fracture -M84451D Pathological fracture, right femur, subsequent encounter for fracture with routine healing -M84451G Pathological fracture, right femur, subsequent encounter for fracture with delayed healing -M84451K Pathological fracture, right femur, subsequent encounter for fracture with nonunion -M84451P Pathological fracture, right femur, subsequent encounter for fracture with malunion -M84451S Pathological fracture, right femur, sequela -M84452A Pathological fracture, left femur, initial encounter for fracture -M84452D Pathological fracture, left femur, subsequent encounter for fracture with routine healing -M84452G Pathological fracture, left femur, subsequent encounter for fracture with delayed healing -M84452K Pathological fracture, left femur, subsequent encounter for fracture with nonunion -M84452P Pathological fracture, left femur, subsequent encounter for fracture with malunion -M84452S Pathological fracture, left femur, sequela -M84453A Pathological fracture, unspecified femur, initial encounter for fracture -M84453D Pathological fracture, unspecified femur, subsequent encounter for fracture with routine healing -M84453G Pathological fracture, unspecified femur, subsequent encounter for fracture with delayed healing -M84453K Pathological fracture, unspecified femur, subsequent encounter for fracture with nonunion -M84453P Pathological fracture, unspecified femur, subsequent encounter for fracture with malunion -M84453S Pathological fracture, unspecified femur, sequela -M84454A Pathological fracture, pelvis, initial encounter for fracture -M84454D Pathological fracture, pelvis, subsequent encounter for fracture with routine healing -M84454G Pathological fracture, pelvis, subsequent encounter for fracture with delayed healing -M84454K Pathological fracture, pelvis, subsequent encounter for fracture with nonunion -M84454P Pathological fracture, pelvis, subsequent encounter for fracture with malunion -M84454S Pathological fracture, pelvis, sequela -M84459A Pathological fracture, hip, unspecified, initial encounter for fracture -M84459D Pathological fracture, hip, unspecified, subsequent encounter for fracture with routine healing -M84459G Pathological fracture, hip, unspecified, subsequent encounter for fracture with delayed healing -M84459K Pathological fracture, hip, unspecified, subsequent encounter for fracture with nonunion -M84459P Pathological fracture, hip, unspecified, subsequent encounter for fracture with malunion -M84459S Pathological fracture, hip, unspecified, sequela -M84461A Pathological fracture, right tibia, initial encounter for fracture -M84461D Pathological fracture, right tibia, subsequent encounter for fracture with routine healing -M84461G Pathological fracture, right tibia, subsequent encounter for fracture with delayed healing -M84461K Pathological fracture, right tibia, subsequent encounter for fracture with nonunion -M84461P Pathological fracture, right tibia, subsequent encounter for fracture with malunion -M84461S Pathological fracture, right tibia, sequela -M84462A Pathological fracture, left tibia, initial encounter for fracture -M84462D Pathological fracture, left tibia, subsequent encounter for fracture with routine healing -M84462G Pathological fracture, left tibia, subsequent encounter for fracture with delayed healing -M84462K Pathological fracture, left tibia, subsequent encounter for fracture with nonunion -M84462P Pathological fracture, left tibia, subsequent encounter for fracture with malunion -M84462S Pathological fracture, left tibia, sequela -M84463A Pathological fracture, right fibula, initial encounter for fracture -M84463D Pathological fracture, right fibula, subsequent encounter for fracture with routine healing -M84463G Pathological fracture, right fibula, subsequent encounter for fracture with delayed healing -M84463K Pathological fracture, right fibula, subsequent encounter for fracture with nonunion -M84463P Pathological fracture, right fibula, subsequent encounter for fracture with malunion -M84463S Pathological fracture, right fibula, sequela -M84464A Pathological fracture, left fibula, initial encounter for fracture -M84464D Pathological fracture, left fibula, subsequent encounter for fracture with routine healing -M84464G Pathological fracture, left fibula, subsequent encounter for fracture with delayed healing -M84464K Pathological fracture, left fibula, subsequent encounter for fracture with nonunion -M84464P Pathological fracture, left fibula, subsequent encounter for fracture with malunion -M84464S Pathological fracture, left fibula, sequela -M84469A Pathological fracture, unspecified tibia and fibula, initial encounter for fracture -M84469D Pathological fracture, unspecified tibia and fibula, subsequent encounter for fracture with routine healing -M84469G Pathological fracture, unspecified tibia and fibula, subsequent encounter for fracture with delayed healing -M84469K Pathological fracture, unspecified tibia and fibula, subsequent encounter for fracture with nonunion -M84469P Pathological fracture, unspecified tibia and fibula, subsequent encounter for fracture with malunion -M84469S Pathological fracture, unspecified tibia and fibula, sequela -M84471A Pathological fracture, right ankle, initial encounter for fracture -M84471D Pathological fracture, right ankle, subsequent encounter for fracture with routine healing -M84471G Pathological fracture, right ankle, subsequent encounter for fracture with delayed healing -M84471K Pathological fracture, right ankle, subsequent encounter for fracture with nonunion -M84471P Pathological fracture, right ankle, subsequent encounter for fracture with malunion -M84471S Pathological fracture, right ankle, sequela -M84472A Pathological fracture, left ankle, initial encounter for fracture -M84472D Pathological fracture, left ankle, subsequent encounter for fracture with routine healing -M84472G Pathological fracture, left ankle, subsequent encounter for fracture with delayed healing -M84472K Pathological fracture, left ankle, subsequent encounter for fracture with nonunion -M84472P Pathological fracture, left ankle, subsequent encounter for fracture with malunion -M84472S Pathological fracture, left ankle, sequela -M84473A Pathological fracture, unspecified ankle, initial encounter for fracture -M84473D Pathological fracture, unspecified ankle, subsequent encounter for fracture with routine healing -M84473G Pathological fracture, unspecified ankle, subsequent encounter for fracture with delayed healing -M84473K Pathological fracture, unspecified ankle, subsequent encounter for fracture with nonunion -M84473P Pathological fracture, unspecified ankle, subsequent encounter for fracture with malunion -M84473S Pathological fracture, unspecified ankle, sequela -M84474A Pathological fracture, right foot, initial encounter for fracture -M84474D Pathological fracture, right foot, subsequent encounter for fracture with routine healing -M84474G Pathological fracture, right foot, subsequent encounter for fracture with delayed healing -M84474K Pathological fracture, right foot, subsequent encounter for fracture with nonunion -M84474P Pathological fracture, right foot, subsequent encounter for fracture with malunion -M84474S Pathological fracture, right foot, sequela -M84475A Pathological fracture, left foot, initial encounter for fracture -M84475D Pathological fracture, left foot, subsequent encounter for fracture with routine healing -M84475G Pathological fracture, left foot, subsequent encounter for fracture with delayed healing -M84475K Pathological fracture, left foot, subsequent encounter for fracture with nonunion -M84475P Pathological fracture, left foot, subsequent encounter for fracture with malunion -M84475S Pathological fracture, left foot, sequela -M84476A Pathological fracture, unspecified foot, initial encounter for fracture -M84476D Pathological fracture, unspecified foot, subsequent encounter for fracture with routine healing -M84476G Pathological fracture, unspecified foot, subsequent encounter for fracture with delayed healing -M84476K Pathological fracture, unspecified foot, subsequent encounter for fracture with nonunion -M84476P Pathological fracture, unspecified foot, subsequent encounter for fracture with malunion -M84476S Pathological fracture, unspecified foot, sequela -M84477A Pathological fracture, right toe(s), initial encounter for fracture -M84477D Pathological fracture, right toe(s), subsequent encounter for fracture with routine healing -M84477G Pathological fracture, right toe(s), subsequent encounter for fracture with delayed healing -M84477K Pathological fracture, right toe(s), subsequent encounter for fracture with nonunion -M84477P Pathological fracture, right toe(s), subsequent encounter for fracture with malunion -M84477S Pathological fracture, right toe(s), sequela -M84478A Pathological fracture, left toe(s), initial encounter for fracture -M84478D Pathological fracture, left toe(s), subsequent encounter for fracture with routine healing -M84478G Pathological fracture, left toe(s), subsequent encounter for fracture with delayed healing -M84478K Pathological fracture, left toe(s), subsequent encounter for fracture with nonunion -M84478P Pathological fracture, left toe(s), subsequent encounter for fracture with malunion -M84478S Pathological fracture, left toe(s), sequela -M84479A Pathological fracture, unspecified toe(s), initial encounter for fracture -M84479D Pathological fracture, unspecified toe(s), subsequent encounter for fracture with routine healing -M84479G Pathological fracture, unspecified toe(s), subsequent encounter for fracture with delayed healing -M84479K Pathological fracture, unspecified toe(s), subsequent encounter for fracture with nonunion -M84479P Pathological fracture, unspecified toe(s), subsequent encounter for fracture with malunion -M84479S Pathological fracture, unspecified toe(s), sequela -M8448XA Pathological fracture, other site, initial encounter for fracture -M8448XD Pathological fracture, other site, subsequent encounter for fracture with routine healing -M8448XG Pathological fracture, other site, subsequent encounter for fracture with delayed healing -M8448XK Pathological fracture, other site, subsequent encounter for fracture with nonunion -M8448XP Pathological fracture, other site, subsequent encounter for fracture with malunion -M8448XS Pathological fracture, other site, sequela -M8450XA Pathological fracture in neoplastic disease, unspecified site, initial encounter for fracture -M8450XD Pathological fracture in neoplastic disease, unspecified site, subsequent encounter for fracture with routine healing -M8450XG Pathological fracture in neoplastic disease, unspecified site, subsequent encounter for fracture with delayed healing -M8450XK Pathological fracture in neoplastic disease, unspecified site, subsequent encounter for fracture with nonunion -M8450XP Pathological fracture in neoplastic disease, unspecified site, subsequent encounter for fracture with malunion -M8450XS Pathological fracture in neoplastic disease, unspecified site, sequela -M84511A Pathological fracture in neoplastic disease, right shoulder, initial encounter for fracture -M84511D Pathological fracture in neoplastic disease, right shoulder, subsequent encounter for fracture with routine healing -M84511G Pathological fracture in neoplastic disease, right shoulder, subsequent encounter for fracture with delayed healing -M84511K Pathological fracture in neoplastic disease, right shoulder, subsequent encounter for fracture with nonunion -M84511P Pathological fracture in neoplastic disease, right shoulder, subsequent encounter for fracture with malunion -M84511S Pathological fracture in neoplastic disease, right shoulder, sequela -M84512A Pathological fracture in neoplastic disease, left shoulder, initial encounter for fracture -M84512D Pathological fracture in neoplastic disease, left shoulder, subsequent encounter for fracture with routine healing -M84512G Pathological fracture in neoplastic disease, left shoulder, subsequent encounter for fracture with delayed healing -M84512K Pathological fracture in neoplastic disease, left shoulder, subsequent encounter for fracture with nonunion -M84512P Pathological fracture in neoplastic disease, left shoulder, subsequent encounter for fracture with malunion -M84512S Pathological fracture in neoplastic disease, left shoulder, sequela -M84519A Pathological fracture in neoplastic disease, unspecified shoulder, initial encounter for fracture -M84519D Pathological fracture in neoplastic disease, unspecified shoulder, subsequent encounter for fracture with routine healing -M84519G Pathological fracture in neoplastic disease, unspecified shoulder, subsequent encounter for fracture with delayed healing -M84519K Pathological fracture in neoplastic disease, unspecified shoulder, subsequent encounter for fracture with nonunion -M84519P Pathological fracture in neoplastic disease, unspecified shoulder, subsequent encounter for fracture with malunion -M84519S Pathological fracture in neoplastic disease, unspecified shoulder, sequela -M84521A Pathological fracture in neoplastic disease, right humerus, initial encounter for fracture -M84521D Pathological fracture in neoplastic disease, right humerus, subsequent encounter for fracture with routine healing -M84521G Pathological fracture in neoplastic disease, right humerus, subsequent encounter for fracture with delayed healing -M84521K Pathological fracture in neoplastic disease, right humerus, subsequent encounter for fracture with nonunion -M84521P Pathological fracture in neoplastic disease, right humerus, subsequent encounter for fracture with malunion -M84521S Pathological fracture in neoplastic disease, right humerus, sequela -M84522A Pathological fracture in neoplastic disease, left humerus, initial encounter for fracture -M84522D Pathological fracture in neoplastic disease, left humerus, subsequent encounter for fracture with routine healing -M84522G Pathological fracture in neoplastic disease, left humerus, subsequent encounter for fracture with delayed healing -M84522K Pathological fracture in neoplastic disease, left humerus, subsequent encounter for fracture with nonunion -M84522P Pathological fracture in neoplastic disease, left humerus, subsequent encounter for fracture with malunion -M84522S Pathological fracture in neoplastic disease, left humerus, sequela -M84529A Pathological fracture in neoplastic disease, unspecified humerus, initial encounter for fracture -M84529D Pathological fracture in neoplastic disease, unspecified humerus, subsequent encounter for fracture with routine healing -M84529G Pathological fracture in neoplastic disease, unspecified humerus, subsequent encounter for fracture with delayed healing -M84529K Pathological fracture in neoplastic disease, unspecified humerus, subsequent encounter for fracture with nonunion -M84529P Pathological fracture in neoplastic disease, unspecified humerus, subsequent encounter for fracture with malunion -M84529S Pathological fracture in neoplastic disease, unspecified humerus, sequela -M84531A Pathological fracture in neoplastic disease, right ulna, initial encounter for fracture -M84531D Pathological fracture in neoplastic disease, right ulna, subsequent encounter for fracture with routine healing -M84531G Pathological fracture in neoplastic disease, right ulna, subsequent encounter for fracture with delayed healing -M84531K Pathological fracture in neoplastic disease, right ulna, subsequent encounter for fracture with nonunion -M84531P Pathological fracture in neoplastic disease, right ulna, subsequent encounter for fracture with malunion -M84531S Pathological fracture in neoplastic disease, right ulna, sequela -M84532A Pathological fracture in neoplastic disease, left ulna, initial encounter for fracture -M84532D Pathological fracture in neoplastic disease, left ulna, subsequent encounter for fracture with routine healing -M84532G Pathological fracture in neoplastic disease, left ulna, subsequent encounter for fracture with delayed healing -M84532K Pathological fracture in neoplastic disease, left ulna, subsequent encounter for fracture with nonunion -M84532P Pathological fracture in neoplastic disease, left ulna, subsequent encounter for fracture with malunion -M84532S Pathological fracture in neoplastic disease, left ulna, sequela -M84533A Pathological fracture in neoplastic disease, right radius, initial encounter for fracture -M84533D Pathological fracture in neoplastic disease, right radius, subsequent encounter for fracture with routine healing -M84533G Pathological fracture in neoplastic disease, right radius, subsequent encounter for fracture with delayed healing -M84533K Pathological fracture in neoplastic disease, right radius, subsequent encounter for fracture with nonunion -M84533P Pathological fracture in neoplastic disease, right radius, subsequent encounter for fracture with malunion -M84533S Pathological fracture in neoplastic disease, right radius, sequela -M84534A Pathological fracture in neoplastic disease, left radius, initial encounter for fracture -M84534D Pathological fracture in neoplastic disease, left radius, subsequent encounter for fracture with routine healing -M84534G Pathological fracture in neoplastic disease, left radius, subsequent encounter for fracture with delayed healing -M84534K Pathological fracture in neoplastic disease, left radius, subsequent encounter for fracture with nonunion -M84534P Pathological fracture in neoplastic disease, left radius, subsequent encounter for fracture with malunion -M84534S Pathological fracture in neoplastic disease, left radius, sequela -M84539A Pathological fracture in neoplastic disease, unspecified ulna and radius, initial encounter for fracture -M84539D Pathological fracture in neoplastic disease, unspecified ulna and radius, subsequent encounter for fracture with routine healing -M84539G Pathological fracture in neoplastic disease, unspecified ulna and radius, subsequent encounter for fracture with delayed healing -M84539K Pathological fracture in neoplastic disease, unspecified ulna and radius, subsequent encounter for fracture with nonunion -M84539P Pathological fracture in neoplastic disease, unspecified ulna and radius, subsequent encounter for fracture with malunion -M84539S Pathological fracture in neoplastic disease, unspecified ulna and radius, sequela -M84541A Pathological fracture in neoplastic disease, right hand, initial encounter for fracture -M84541D Pathological fracture in neoplastic disease, right hand, subsequent encounter for fracture with routine healing -M84541G Pathological fracture in neoplastic disease, right hand, subsequent encounter for fracture with delayed healing -M84541K Pathological fracture in neoplastic disease, right hand, subsequent encounter for fracture with nonunion -M84541P Pathological fracture in neoplastic disease, right hand, subsequent encounter for fracture with malunion -M84541S Pathological fracture in neoplastic disease, right hand, sequela -M84542A Pathological fracture in neoplastic disease, left hand, initial encounter for fracture -M84542D Pathological fracture in neoplastic disease, left hand, subsequent encounter for fracture with routine healing -M84542G Pathological fracture in neoplastic disease, left hand, subsequent encounter for fracture with delayed healing -M84542K Pathological fracture in neoplastic disease, left hand, subsequent encounter for fracture with nonunion -M84542P Pathological fracture in neoplastic disease, left hand, subsequent encounter for fracture with malunion -M84542S Pathological fracture in neoplastic disease, left hand, sequela -M84549A Pathological fracture in neoplastic disease, unspecified hand, initial encounter for fracture -M84549D Pathological fracture in neoplastic disease, unspecified hand, subsequent encounter for fracture with routine healing -M84549G Pathological fracture in neoplastic disease, unspecified hand, subsequent encounter for fracture with delayed healing -M84549K Pathological fracture in neoplastic disease, unspecified hand, subsequent encounter for fracture with nonunion -M84549P Pathological fracture in neoplastic disease, unspecified hand, subsequent encounter for fracture with malunion -M84549S Pathological fracture in neoplastic disease, unspecified hand, sequela -M84550A Pathological fracture in neoplastic disease, pelvis, initial encounter for fracture -M84550D Pathological fracture in neoplastic disease, pelvis, subsequent encounter for fracture with routine healing -M84550G Pathological fracture in neoplastic disease, pelvis, subsequent encounter for fracture with delayed healing -M84550K Pathological fracture in neoplastic disease, pelvis, subsequent encounter for fracture with nonunion -M84550P Pathological fracture in neoplastic disease, pelvis, subsequent encounter for fracture with malunion -M84550S Pathological fracture in neoplastic disease, pelvis, sequela -M84551A Pathological fracture in neoplastic disease, right femur, initial encounter for fracture -M84551D Pathological fracture in neoplastic disease, right femur, subsequent encounter for fracture with routine healing -M84551G Pathological fracture in neoplastic disease, right femur, subsequent encounter for fracture with delayed healing -M84551K Pathological fracture in neoplastic disease, right femur, subsequent encounter for fracture with nonunion -M84551P Pathological fracture in neoplastic disease, right femur, subsequent encounter for fracture with malunion -M84551S Pathological fracture in neoplastic disease, right femur, sequela -M84552A Pathological fracture in neoplastic disease, left femur, initial encounter for fracture -M84552D Pathological fracture in neoplastic disease, left femur, subsequent encounter for fracture with routine healing -M84552G Pathological fracture in neoplastic disease, left femur, subsequent encounter for fracture with delayed healing -M84552K Pathological fracture in neoplastic disease, left femur, subsequent encounter for fracture with nonunion -M84552P Pathological fracture in neoplastic disease, left femur, subsequent encounter for fracture with malunion -M84552S Pathological fracture in neoplastic disease, left femur, sequela -M84553A Pathological fracture in neoplastic disease, unspecified femur, initial encounter for fracture -M84553D Pathological fracture in neoplastic disease, unspecified femur, subsequent encounter for fracture with routine healing -M84553G Pathological fracture in neoplastic disease, unspecified femur, subsequent encounter for fracture with delayed healing -M84553K Pathological fracture in neoplastic disease, unspecified femur, subsequent encounter for fracture with nonunion -M84553P Pathological fracture in neoplastic disease, unspecified femur, subsequent encounter for fracture with malunion -M84553S Pathological fracture in neoplastic disease, unspecified femur, sequela -M84559A Pathological fracture in neoplastic disease, hip, unspecified, initial encounter for fracture -M84559D Pathological fracture in neoplastic disease, hip, unspecified, subsequent encounter for fracture with routine healing -M84559G Pathological fracture in neoplastic disease, hip, unspecified, subsequent encounter for fracture with delayed healing -M84559K Pathological fracture in neoplastic disease, hip, unspecified, subsequent encounter for fracture with nonunion -M84559P Pathological fracture in neoplastic disease, hip, unspecified, subsequent encounter for fracture with malunion -M84559S Pathological fracture in neoplastic disease, hip, unspecified, sequela -M84561A Pathological fracture in neoplastic disease, right tibia, initial encounter for fracture -M84561D Pathological fracture in neoplastic disease, right tibia, subsequent encounter for fracture with routine healing -M84561G Pathological fracture in neoplastic disease, right tibia, subsequent encounter for fracture with delayed healing -M84561K Pathological fracture in neoplastic disease, right tibia, subsequent encounter for fracture with nonunion -M84561P Pathological fracture in neoplastic disease, right tibia, subsequent encounter for fracture with malunion -M84561S Pathological fracture in neoplastic disease, right tibia, sequela -M84562A Pathological fracture in neoplastic disease, left tibia, initial encounter for fracture -M84562D Pathological fracture in neoplastic disease, left tibia, subsequent encounter for fracture with routine healing -M84562G Pathological fracture in neoplastic disease, left tibia, subsequent encounter for fracture with delayed healing -M84562K Pathological fracture in neoplastic disease, left tibia, subsequent encounter for fracture with nonunion -M84562P Pathological fracture in neoplastic disease, left tibia, subsequent encounter for fracture with malunion -M84562S Pathological fracture in neoplastic disease, left tibia, sequela -M84563A Pathological fracture in neoplastic disease, right fibula, initial encounter for fracture -M84563D Pathological fracture in neoplastic disease, right fibula, subsequent encounter for fracture with routine healing -M84563G Pathological fracture in neoplastic disease, right fibula, subsequent encounter for fracture with delayed healing -M84563K Pathological fracture in neoplastic disease, right fibula, subsequent encounter for fracture with nonunion -M84563P Pathological fracture in neoplastic disease, right fibula, subsequent encounter for fracture with malunion -M84563S Pathological fracture in neoplastic disease, right fibula, sequela -M84564A Pathological fracture in neoplastic disease, left fibula, initial encounter for fracture -M84564D Pathological fracture in neoplastic disease, left fibula, subsequent encounter for fracture with routine healing -M84564G Pathological fracture in neoplastic disease, left fibula, subsequent encounter for fracture with delayed healing -M84564K Pathological fracture in neoplastic disease, left fibula, subsequent encounter for fracture with nonunion -M84564P Pathological fracture in neoplastic disease, left fibula, subsequent encounter for fracture with malunion -M84564S Pathological fracture in neoplastic disease, left fibula, sequela -M84569A Pathological fracture in neoplastic disease, unspecified tibia and fibula, initial encounter for fracture -M84569D Pathological fracture in neoplastic disease, unspecified tibia and fibula, subsequent encounter for fracture with routine healing -M84569G Pathological fracture in neoplastic disease, unspecified tibia and fibula, subsequent encounter for fracture with delayed healing -M84569K Pathological fracture in neoplastic disease, unspecified tibia and fibula, subsequent encounter for fracture with nonunion -M84569P Pathological fracture in neoplastic disease, unspecified tibia and fibula, subsequent encounter for fracture with malunion -M84569S Pathological fracture in neoplastic disease, unspecified tibia and fibula, sequela -M84571A Pathological fracture in neoplastic disease, right ankle, initial encounter for fracture -M84571D Pathological fracture in neoplastic disease, right ankle, subsequent encounter for fracture with routine healing -M84571G Pathological fracture in neoplastic disease, right ankle, subsequent encounter for fracture with delayed healing -M84571K Pathological fracture in neoplastic disease, right ankle, subsequent encounter for fracture with nonunion -M84571P Pathological fracture in neoplastic disease, right ankle, subsequent encounter for fracture with malunion -M84571S Pathological fracture in neoplastic disease, right ankle, sequela -M84572A Pathological fracture in neoplastic disease, left ankle, initial encounter for fracture -M84572D Pathological fracture in neoplastic disease, left ankle, subsequent encounter for fracture with routine healing -M84572G Pathological fracture in neoplastic disease, left ankle, subsequent encounter for fracture with delayed healing -M84572K Pathological fracture in neoplastic disease, left ankle, subsequent encounter for fracture with nonunion -M84572P Pathological fracture in neoplastic disease, left ankle, subsequent encounter for fracture with malunion -M84572S Pathological fracture in neoplastic disease, left ankle, sequela -M84573A Pathological fracture in neoplastic disease, unspecified ankle, initial encounter for fracture -M84573D Pathological fracture in neoplastic disease, unspecified ankle, subsequent encounter for fracture with routine healing -M84573G Pathological fracture in neoplastic disease, unspecified ankle, subsequent encounter for fracture with delayed healing -M84573K Pathological fracture in neoplastic disease, unspecified ankle, subsequent encounter for fracture with nonunion -M84573P Pathological fracture in neoplastic disease, unspecified ankle, subsequent encounter for fracture with malunion -M84573S Pathological fracture in neoplastic disease, unspecified ankle, sequela -M84574A Pathological fracture in neoplastic disease, right foot, initial encounter for fracture -M84574D Pathological fracture in neoplastic disease, right foot, subsequent encounter for fracture with routine healing -M84574G Pathological fracture in neoplastic disease, right foot, subsequent encounter for fracture with delayed healing -M84574K Pathological fracture in neoplastic disease, right foot, subsequent encounter for fracture with nonunion -M84574P Pathological fracture in neoplastic disease, right foot, subsequent encounter for fracture with malunion -M84574S Pathological fracture in neoplastic disease, right foot, sequela -M84575A Pathological fracture in neoplastic disease, left foot, initial encounter for fracture -M84575D Pathological fracture in neoplastic disease, left foot, subsequent encounter for fracture with routine healing -M84575G Pathological fracture in neoplastic disease, left foot, subsequent encounter for fracture with delayed healing -M84575K Pathological fracture in neoplastic disease, left foot, subsequent encounter for fracture with nonunion -M84575P Pathological fracture in neoplastic disease, left foot, subsequent encounter for fracture with malunion -M84575S Pathological fracture in neoplastic disease, left foot, sequela -M84576A Pathological fracture in neoplastic disease, unspecified foot, initial encounter for fracture -M84576D Pathological fracture in neoplastic disease, unspecified foot, subsequent encounter for fracture with routine healing -M84576G Pathological fracture in neoplastic disease, unspecified foot, subsequent encounter for fracture with delayed healing -M84576K Pathological fracture in neoplastic disease, unspecified foot, subsequent encounter for fracture with nonunion -M84576P Pathological fracture in neoplastic disease, unspecified foot, subsequent encounter for fracture with malunion -M84576S Pathological fracture in neoplastic disease, unspecified foot, sequela -M8458XA Pathological fracture in neoplastic disease, other specified site, initial encounter for fracture -M8458XD Pathological fracture in neoplastic disease, other specified site, subsequent encounter for fracture with routine healing -M8458XG Pathological fracture in neoplastic disease, other specified site, subsequent encounter for fracture with delayed healing -M8458XK Pathological fracture in neoplastic disease, other specified site, subsequent encounter for fracture with nonunion -M8458XP Pathological fracture in neoplastic disease, other specified site, subsequent encounter for fracture with malunion -M8458XS Pathological fracture in neoplastic disease, other specified site, sequela -M8460XA Pathological fracture in other disease, unspecified site, initial encounter for fracture -M8460XD Pathological fracture in other disease, unspecified site, subsequent encounter for fracture with routine healing -M8460XG Pathological fracture in other disease, unspecified site, subsequent encounter for fracture with delayed healing -M8460XK Pathological fracture in other disease, unspecified site, subsequent encounter for fracture with nonunion -M8460XP Pathological fracture in other disease, unspecified site, subsequent encounter for fracture with malunion -M8460XS Pathological fracture in other disease, unspecified site, sequela -M84611A Pathological fracture in other disease, right shoulder, initial encounter for fracture -M84611D Pathological fracture in other disease, right shoulder, subsequent encounter for fracture with routine healing -M84611G Pathological fracture in other disease, right shoulder, subsequent encounter for fracture with delayed healing -M84611K Pathological fracture in other disease, right shoulder, subsequent encounter for fracture with nonunion -M84611P Pathological fracture in other disease, right shoulder, subsequent encounter for fracture with malunion -M84611S Pathological fracture in other disease, right shoulder, sequela -M84612A Pathological fracture in other disease, left shoulder, initial encounter for fracture -M84612D Pathological fracture in other disease, left shoulder, subsequent encounter for fracture with routine healing -M84612G Pathological fracture in other disease, left shoulder, subsequent encounter for fracture with delayed healing -M84612K Pathological fracture in other disease, left shoulder, subsequent encounter for fracture with nonunion -M84612P Pathological fracture in other disease, left shoulder, subsequent encounter for fracture with malunion -M84612S Pathological fracture in other disease, left shoulder, sequela -M84619A Pathological fracture in other disease, unspecified shoulder, initial encounter for fracture -M84619D Pathological fracture in other disease, unspecified shoulder, subsequent encounter for fracture with routine healing -M84619G Pathological fracture in other disease, unspecified shoulder, subsequent encounter for fracture with delayed healing -M84619K Pathological fracture in other disease, unspecified shoulder, subsequent encounter for fracture with nonunion -M84619P Pathological fracture in other disease, unspecified shoulder, subsequent encounter for fracture with malunion -M84619S Pathological fracture in other disease, unspecified shoulder, sequela -M84621A Pathological fracture in other disease, right humerus, initial encounter for fracture -M84621D Pathological fracture in other disease, right humerus, subsequent encounter for fracture with routine healing -M84621G Pathological fracture in other disease, right humerus, subsequent encounter for fracture with delayed healing -M84621K Pathological fracture in other disease, right humerus, subsequent encounter for fracture with nonunion -M84621P Pathological fracture in other disease, right humerus, subsequent encounter for fracture with malunion -M84621S Pathological fracture in other disease, right humerus, sequela -M84622A Pathological fracture in other disease, left humerus, initial encounter for fracture -M84622D Pathological fracture in other disease, left humerus, subsequent encounter for fracture with routine healing -M84622G Pathological fracture in other disease, left humerus, subsequent encounter for fracture with delayed healing -M84622K Pathological fracture in other disease, left humerus, subsequent encounter for fracture with nonunion -M84622P Pathological fracture in other disease, left humerus, subsequent encounter for fracture with malunion -M84622S Pathological fracture in other disease, left humerus, sequela -M84629A Pathological fracture in other disease, unspecified humerus, initial encounter for fracture -M84629D Pathological fracture in other disease, unspecified humerus, subsequent encounter for fracture with routine healing -M84629G Pathological fracture in other disease, unspecified humerus, subsequent encounter for fracture with delayed healing -M84629K Pathological fracture in other disease, unspecified humerus, subsequent encounter for fracture with nonunion -M84629P Pathological fracture in other disease, unspecified humerus, subsequent encounter for fracture with malunion -M84629S Pathological fracture in other disease, unspecified humerus, sequela -M84631A Pathological fracture in other disease, right ulna, initial encounter for fracture -M84631D Pathological fracture in other disease, right ulna, subsequent encounter for fracture with routine healing -M84631G Pathological fracture in other disease, right ulna, subsequent encounter for fracture with delayed healing -M84631K Pathological fracture in other disease, right ulna, subsequent encounter for fracture with nonunion -M84631P Pathological fracture in other disease, right ulna, subsequent encounter for fracture with malunion -M84631S Pathological fracture in other disease, right ulna, sequela -M84632A Pathological fracture in other disease, left ulna, initial encounter for fracture -M84632D Pathological fracture in other disease, left ulna, subsequent encounter for fracture with routine healing -M84632G Pathological fracture in other disease, left ulna, subsequent encounter for fracture with delayed healing -M84632K Pathological fracture in other disease, left ulna, subsequent encounter for fracture with nonunion -M84632P Pathological fracture in other disease, left ulna, subsequent encounter for fracture with malunion -M84632S Pathological fracture in other disease, left ulna, sequela -M84633A Pathological fracture in other disease, right radius, initial encounter for fracture -M84633D Pathological fracture in other disease, right radius, subsequent encounter for fracture with routine healing -M84633G Pathological fracture in other disease, right radius, subsequent encounter for fracture with delayed healing -M84633K Pathological fracture in other disease, right radius, subsequent encounter for fracture with nonunion -M84633P Pathological fracture in other disease, right radius, subsequent encounter for fracture with malunion -M84633S Pathological fracture in other disease, right radius, sequela -M84634A Pathological fracture in other disease, left radius, initial encounter for fracture -M84634D Pathological fracture in other disease, left radius, subsequent encounter for fracture with routine healing -M84634G Pathological fracture in other disease, left radius, subsequent encounter for fracture with delayed healing -M84634K Pathological fracture in other disease, left radius, subsequent encounter for fracture with nonunion -M84634P Pathological fracture in other disease, left radius, subsequent encounter for fracture with malunion -M84634S Pathological fracture in other disease, left radius, sequela -M84639A Pathological fracture in other disease, unspecified ulna and radius, initial encounter for fracture -M84639D Pathological fracture in other disease, unspecified ulna and radius, subsequent encounter for fracture with routine healing -M84639G Pathological fracture in other disease, unspecified ulna and radius, subsequent encounter for fracture with delayed healing -M84639K Pathological fracture in other disease, unspecified ulna and radius, subsequent encounter for fracture with nonunion -M84639P Pathological fracture in other disease, unspecified ulna and radius, subsequent encounter for fracture with malunion -M84639S Pathological fracture in other disease, unspecified ulna and radius, sequela -M84641A Pathological fracture in other disease, right hand, initial encounter for fracture -M84641D Pathological fracture in other disease, right hand, subsequent encounter for fracture with routine healing -M84641G Pathological fracture in other disease, right hand, subsequent encounter for fracture with delayed healing -M84641K Pathological fracture in other disease, right hand, subsequent encounter for fracture with nonunion -M84641P Pathological fracture in other disease, right hand, subsequent encounter for fracture with malunion -M84641S Pathological fracture in other disease, right hand, sequela -M84642A Pathological fracture in other disease, left hand, initial encounter for fracture -M84642D Pathological fracture in other disease, left hand, subsequent encounter for fracture with routine healing -M84642G Pathological fracture in other disease, left hand, subsequent encounter for fracture with delayed healing -M84642K Pathological fracture in other disease, left hand, subsequent encounter for fracture with nonunion -M84642P Pathological fracture in other disease, left hand, subsequent encounter for fracture with malunion -M84642S Pathological fracture in other disease, left hand, sequela -M84649A Pathological fracture in other disease, unspecified hand, initial encounter for fracture -M84649D Pathological fracture in other disease, unspecified hand, subsequent encounter for fracture with routine healing -M84649G Pathological fracture in other disease, unspecified hand, subsequent encounter for fracture with delayed healing -M84649K Pathological fracture in other disease, unspecified hand, subsequent encounter for fracture with nonunion -M84649P Pathological fracture in other disease, unspecified hand, subsequent encounter for fracture with malunion -M84649S Pathological fracture in other disease, unspecified hand, sequela -M84650A Pathological fracture in other disease, pelvis, initial encounter for fracture -M84650D Pathological fracture in other disease, pelvis, subsequent encounter for fracture with routine healing -M84650G Pathological fracture in other disease, pelvis, subsequent encounter for fracture with delayed healing -M84650K Pathological fracture in other disease, pelvis, subsequent encounter for fracture with nonunion -M84650P Pathological fracture in other disease, pelvis, subsequent encounter for fracture with malunion -M84650S Pathological fracture in other disease, pelvis, sequela -M84651A Pathological fracture in other disease, right femur, initial encounter for fracture -M84651D Pathological fracture in other disease, right femur, subsequent encounter for fracture with routine healing -M84651G Pathological fracture in other disease, right femur, subsequent encounter for fracture with delayed healing -M84651K Pathological fracture in other disease, right femur, subsequent encounter for fracture with nonunion -M84651P Pathological fracture in other disease, right femur, subsequent encounter for fracture with malunion -M84651S Pathological fracture in other disease, right femur, sequela -M84652A Pathological fracture in other disease, left femur, initial encounter for fracture -M84652D Pathological fracture in other disease, left femur, subsequent encounter for fracture with routine healing -M84652G Pathological fracture in other disease, left femur, subsequent encounter for fracture with delayed healing -M84652K Pathological fracture in other disease, left femur, subsequent encounter for fracture with nonunion -M84652P Pathological fracture in other disease, left femur, subsequent encounter for fracture with malunion -M84652S Pathological fracture in other disease, left femur, sequela -M84653A Pathological fracture in other disease, unspecified femur, initial encounter for fracture -M84653D Pathological fracture in other disease, unspecified femur, subsequent encounter for fracture with routine healing -M84653G Pathological fracture in other disease, unspecified femur, subsequent encounter for fracture with delayed healing -M84653K Pathological fracture in other disease, unspecified femur, subsequent encounter for fracture with nonunion -M84653P Pathological fracture in other disease, unspecified femur, subsequent encounter for fracture with malunion -M84653S Pathological fracture in other disease, unspecified femur, sequela -M84659A Pathological fracture in other disease, hip, unspecified, initial encounter for fracture -M84659D Pathological fracture in other disease, hip, unspecified, subsequent encounter for fracture with routine healing -M84659G Pathological fracture in other disease, hip, unspecified, subsequent encounter for fracture with delayed healing -M84659K Pathological fracture in other disease, hip, unspecified, subsequent encounter for fracture with nonunion -M84659P Pathological fracture in other disease, hip, unspecified, subsequent encounter for fracture with malunion -M84659S Pathological fracture in other disease, hip, unspecified, sequela -M84661A Pathological fracture in other disease, right tibia, initial encounter for fracture -M84661D Pathological fracture in other disease, right tibia, subsequent encounter for fracture with routine healing -M84661G Pathological fracture in other disease, right tibia, subsequent encounter for fracture with delayed healing -M84661K Pathological fracture in other disease, right tibia, subsequent encounter for fracture with nonunion -M84661P Pathological fracture in other disease, right tibia, subsequent encounter for fracture with malunion -M84661S Pathological fracture in other disease, right tibia, sequela -M84662A Pathological fracture in other disease, left tibia, initial encounter for fracture -M84662D Pathological fracture in other disease, left tibia, subsequent encounter for fracture with routine healing -M84662G Pathological fracture in other disease, left tibia, subsequent encounter for fracture with delayed healing -M84662K Pathological fracture in other disease, left tibia, subsequent encounter for fracture with nonunion -M84662P Pathological fracture in other disease, left tibia, subsequent encounter for fracture with malunion -M84662S Pathological fracture in other disease, left tibia, sequela -M84663A Pathological fracture in other disease, right fibula, initial encounter for fracture -M84663D Pathological fracture in other disease, right fibula, subsequent encounter for fracture with routine healing -M84663G Pathological fracture in other disease, right fibula, subsequent encounter for fracture with delayed healing -M84663K Pathological fracture in other disease, right fibula, subsequent encounter for fracture with nonunion -M84663P Pathological fracture in other disease, right fibula, subsequent encounter for fracture with malunion -M84663S Pathological fracture in other disease, right fibula, sequela -M84664A Pathological fracture in other disease, left fibula, initial encounter for fracture -M84664D Pathological fracture in other disease, left fibula, subsequent encounter for fracture with routine healing -M84664G Pathological fracture in other disease, left fibula, subsequent encounter for fracture with delayed healing -M84664K Pathological fracture in other disease, left fibula, subsequent encounter for fracture with nonunion -M84664P Pathological fracture in other disease, left fibula, subsequent encounter for fracture with malunion -M84664S Pathological fracture in other disease, left fibula, sequela -M84669A Pathological fracture in other disease, unspecified tibia and fibula, initial encounter for fracture -M84669D Pathological fracture in other disease, unspecified tibia and fibula, subsequent encounter for fracture with routine healing -M84669G Pathological fracture in other disease, unspecified tibia and fibula, subsequent encounter for fracture with delayed healing -M84669K Pathological fracture in other disease, unspecified tibia and fibula, subsequent encounter for fracture with nonunion -M84669P Pathological fracture in other disease, unspecified tibia and fibula, subsequent encounter for fracture with malunion -M84669S Pathological fracture in other disease, unspecified tibia and fibula, sequela -M84671A Pathological fracture in other disease, right ankle, initial encounter for fracture -M84671D Pathological fracture in other disease, right ankle, subsequent encounter for fracture with routine healing -M84671G Pathological fracture in other disease, right ankle, subsequent encounter for fracture with delayed healing -M84671K Pathological fracture in other disease, right ankle, subsequent encounter for fracture with nonunion -M84671P Pathological fracture in other disease, right ankle, subsequent encounter for fracture with malunion -M84671S Pathological fracture in other disease, right ankle, sequela -M84672A Pathological fracture in other disease, left ankle, initial encounter for fracture -M84672D Pathological fracture in other disease, left ankle, subsequent encounter for fracture with routine healing -M84672G Pathological fracture in other disease, left ankle, subsequent encounter for fracture with delayed healing -M84672K Pathological fracture in other disease, left ankle, subsequent encounter for fracture with nonunion -M84672P Pathological fracture in other disease, left ankle, subsequent encounter for fracture with malunion -M84672S Pathological fracture in other disease, left ankle, sequela -M84673A Pathological fracture in other disease, unspecified ankle, initial encounter for fracture -M84673D Pathological fracture in other disease, unspecified ankle, subsequent encounter for fracture with routine healing -M84673G Pathological fracture in other disease, unspecified ankle, subsequent encounter for fracture with delayed healing -M84673K Pathological fracture in other disease, unspecified ankle, subsequent encounter for fracture with nonunion -M84673P Pathological fracture in other disease, unspecified ankle, subsequent encounter for fracture with malunion -M84673S Pathological fracture in other disease, unspecified ankle, sequela -M84674A Pathological fracture in other disease, right foot, initial encounter for fracture -M84674D Pathological fracture in other disease, right foot, subsequent encounter for fracture with routine healing -M84674G Pathological fracture in other disease, right foot, subsequent encounter for fracture with delayed healing -M84674K Pathological fracture in other disease, right foot, subsequent encounter for fracture with nonunion -M84674P Pathological fracture in other disease, right foot, subsequent encounter for fracture with malunion -M84674S Pathological fracture in other disease, right foot, sequela -M84675A Pathological fracture in other disease, left foot, initial encounter for fracture -M84675D Pathological fracture in other disease, left foot, subsequent encounter for fracture with routine healing -M84675G Pathological fracture in other disease, left foot, subsequent encounter for fracture with delayed healing -M84675K Pathological fracture in other disease, left foot, subsequent encounter for fracture with nonunion -M84675P Pathological fracture in other disease, left foot, subsequent encounter for fracture with malunion -M84675S Pathological fracture in other disease, left foot, sequela -M84676A Pathological fracture in other disease, unspecified foot, initial encounter for fracture -M84676D Pathological fracture in other disease, unspecified foot, subsequent encounter for fracture with routine healing -M84676G Pathological fracture in other disease, unspecified foot, subsequent encounter for fracture with delayed healing -M84676K Pathological fracture in other disease, unspecified foot, subsequent encounter for fracture with nonunion -M84676P Pathological fracture in other disease, unspecified foot, subsequent encounter for fracture with malunion -M84676S Pathological fracture in other disease, unspecified foot, sequela -M8468XA Pathological fracture in other disease, other site, initial encounter for fracture -M8468XD Pathological fracture in other disease, other site, subsequent encounter for fracture with routine healing -M8468XG Pathological fracture in other disease, other site, subsequent encounter for fracture with delayed healing -M8468XK Pathological fracture in other disease, other site, subsequent encounter for fracture with nonunion -M8468XP Pathological fracture in other disease, other site, subsequent encounter for fracture with malunion -M8468XS Pathological fracture in other disease, other site, sequela -M8480 Other disorders of continuity of bone, unspecified site -M84811 Other disorders of continuity of bone, right shoulder -M84812 Other disorders of continuity of bone, left shoulder -M84819 Other disorders of continuity of bone, unspecified shoulder -M84821 Other disorders of continuity of bone, right humerus -M84822 Other disorders of continuity of bone, left humerus -M84829 Other disorders of continuity of bone, unspecified humerus -M84831 Other disorders of continuity of bone, right ulna -M84832 Other disorders of continuity of bone, left ulna -M84833 Other disorders of continuity of bone, right radius -M84834 Other disorders of continuity of bone, left radius -M84839 Other disorders of continuity of bone, unspecified ulna and radius -M84841 Other disorders of continuity of bone, right hand -M84842 Other disorders of continuity of bone, left hand -M84849 Other disorders of continuity of bone, unspecified hand -M84851 Other disorders of continuity of bone, right pelvic region and thigh -M84852 Other disorders of continuity of bone, left pelvic region and thigh -M84859 Other disorders of continuity of bone, unspecified pelvic region and thigh -M84861 Other disorders of continuity of bone, right tibia -M84862 Other disorders of continuity of bone, left tibia -M84863 Other disorders of continuity of bone, right fibula -M84864 Other disorders of continuity of bone, left fibula -M84869 Other disorders of continuity of bone, unspecified tibia and fibula -M84871 Other disorders of continuity of bone, right ankle and foot -M84872 Other disorders of continuity of bone, left ankle and foot -M84879 Other disorders of continuity of bone, unspecified ankle and foot -M8488 Other disorders of continuity of bone, other site -M849 Disorder of continuity of bone, unspecified -M8500 Fibrous dysplasia (monostotic), unspecified site -M85011 Fibrous dysplasia (monostotic), right shoulder -M85012 Fibrous dysplasia (monostotic), left shoulder -M85019 Fibrous dysplasia (monostotic), unspecified shoulder -M85021 Fibrous dysplasia (monostotic), right upper arm -M85022 Fibrous dysplasia (monostotic), left upper arm -M85029 Fibrous dysplasia (monostotic), unspecified upper arm -M85031 Fibrous dysplasia (monostotic), right forearm -M85032 Fibrous dysplasia (monostotic), left forearm -M85039 Fibrous dysplasia (monostotic), unspecified forearm -M85041 Fibrous dysplasia (monostotic), right hand -M85042 Fibrous dysplasia (monostotic), left hand -M85049 Fibrous dysplasia (monostotic), unspecified hand -M85051 Fibrous dysplasia (monostotic), right thigh -M85052 Fibrous dysplasia (monostotic), left thigh -M85059 Fibrous dysplasia (monostotic), unspecified thigh -M85061 Fibrous dysplasia (monostotic), right lower leg -M85062 Fibrous dysplasia (monostotic), left lower leg -M85069 Fibrous dysplasia (monostotic), unspecified lower leg -M85071 Fibrous dysplasia (monostotic), right ankle and foot -M85072 Fibrous dysplasia (monostotic), left ankle and foot -M85079 Fibrous dysplasia (monostotic), unspecified ankle and foot -M8508 Fibrous dysplasia (monostotic), other site -M8509 Fibrous dysplasia (monostotic), multiple sites -M8510 Skeletal fluorosis, unspecified site -M85111 Skeletal fluorosis, right shoulder -M85112 Skeletal fluorosis, left shoulder -M85119 Skeletal fluorosis, unspecified shoulder -M85121 Skeletal fluorosis, right upper arm -M85122 Skeletal fluorosis, left upper arm -M85129 Skeletal fluorosis, unspecified upper arm -M85131 Skeletal fluorosis, right forearm -M85132 Skeletal fluorosis, left forearm -M85139 Skeletal fluorosis, unspecified forearm -M85141 Skeletal fluorosis, right hand -M85142 Skeletal fluorosis, left hand -M85149 Skeletal fluorosis, unspecified hand -M85151 Skeletal fluorosis, right thigh -M85152 Skeletal fluorosis, left thigh -M85159 Skeletal fluorosis, unspecified thigh -M85161 Skeletal fluorosis, right lower leg -M85162 Skeletal fluorosis, left lower leg -M85169 Skeletal fluorosis, unspecified lower leg -M85171 Skeletal fluorosis, right ankle and foot -M85172 Skeletal fluorosis, left ankle and foot -M85179 Skeletal fluorosis, unspecified ankle and foot -M8518 Skeletal fluorosis, other site -M8519 Skeletal fluorosis, multiple sites -M852 Hyperostosis of skull -M8530 Osteitis condensans, unspecified site -M85311 Osteitis condensans, right shoulder -M85312 Osteitis condensans, left shoulder -M85319 Osteitis condensans, unspecified shoulder -M85321 Osteitis condensans, right upper arm -M85322 Osteitis condensans, left upper arm -M85329 Osteitis condensans, unspecified upper arm -M85331 Osteitis condensans, right forearm -M85332 Osteitis condensans, left forearm -M85339 Osteitis condensans, unspecified forearm -M85341 Osteitis condensans, right hand -M85342 Osteitis condensans, left hand -M85349 Osteitis condensans, unspecified hand -M85351 Osteitis condensans, right thigh -M85352 Osteitis condensans, left thigh -M85359 Osteitis condensans, unspecified thigh -M85361 Osteitis condensans, right lower leg -M85362 Osteitis condensans, left lower leg -M85369 Osteitis condensans, unspecified lower leg -M85371 Osteitis condensans, right ankle and foot -M85372 Osteitis condensans, left ankle and foot -M85379 Osteitis condensans, unspecified ankle and foot -M8538 Osteitis condensans, other site -M8539 Osteitis condensans, multiple sites -M8540 Solitary bone cyst, unspecified site -M85411 Solitary bone cyst, right shoulder -M85412 Solitary bone cyst, left shoulder -M85419 Solitary bone cyst, unspecified shoulder -M85421 Solitary bone cyst, right humerus -M85422 Solitary bone cyst, left humerus -M85429 Solitary bone cyst, unspecified humerus -M85431 Solitary bone cyst, right ulna and radius -M85432 Solitary bone cyst, left ulna and radius -M85439 Solitary bone cyst, unspecified ulna and radius -M85441 Solitary bone cyst, right hand -M85442 Solitary bone cyst, left hand -M85449 Solitary bone cyst, unspecified hand -M85451 Solitary bone cyst, right pelvis -M85452 Solitary bone cyst, left pelvis -M85459 Solitary bone cyst, unspecified pelvis -M85461 Solitary bone cyst, right tibia and fibula -M85462 Solitary bone cyst, left tibia and fibula -M85469 Solitary bone cyst, unspecified tibia and fibula -M85471 Solitary bone cyst, right ankle and foot -M85472 Solitary bone cyst, left ankle and foot -M85479 Solitary bone cyst, unspecified ankle and foot -M8548 Solitary bone cyst, other site -M8550 Aneurysmal bone cyst, unspecified site -M85511 Aneurysmal bone cyst, right shoulder -M85512 Aneurysmal bone cyst, left shoulder -M85519 Aneurysmal bone cyst, unspecified shoulder -M85521 Aneurysmal bone cyst, right upper arm -M85522 Aneurysmal bone cyst, left upper arm -M85529 Aneurysmal bone cyst, unspecified upper arm -M85531 Aneurysmal bone cyst, right forearm -M85532 Aneurysmal bone cyst, left forearm -M85539 Aneurysmal bone cyst, unspecified forearm -M85541 Aneurysmal bone cyst, right hand -M85542 Aneurysmal bone cyst, left hand -M85549 Aneurysmal bone cyst, unspecified hand -M85551 Aneurysmal bone cyst, right thigh -M85552 Aneurysmal bone cyst, left thigh -M85559 Aneurysmal bone cyst, unspecified thigh -M85561 Aneurysmal bone cyst, right lower leg -M85562 Aneurysmal bone cyst, left lower leg -M85569 Aneurysmal bone cyst, unspecified lower leg -M85571 Aneurysmal bone cyst, right ankle and foot -M85572 Aneurysmal bone cyst, left ankle and foot -M85579 Aneurysmal bone cyst, unspecified ankle and foot -M8558 Aneurysmal bone cyst, other site -M8559 Aneurysmal bone cyst, multiple sites -M8560 Other cyst of bone, unspecified site -M85611 Other cyst of bone, right shoulder -M85612 Other cyst of bone, left shoulder -M85619 Other cyst of bone, unspecified shoulder -M85621 Other cyst of bone, right upper arm -M85622 Other cyst of bone, left upper arm -M85629 Other cyst of bone, unspecified upper arm -M85631 Other cyst of bone, right forearm -M85632 Other cyst of bone, left forearm -M85639 Other cyst of bone, unspecified forearm -M85641 Other cyst of bone, right hand -M85642 Other cyst of bone, left hand -M85649 Other cyst of bone, unspecified hand -M85651 Other cyst of bone, right thigh -M85652 Other cyst of bone, left thigh -M85659 Other cyst of bone, unspecified thigh -M85661 Other cyst of bone, right lower leg -M85662 Other cyst of bone, left lower leg -M85669 Other cyst of bone, unspecified lower leg -M85671 Other cyst of bone, right ankle and foot -M85672 Other cyst of bone, left ankle and foot -M85679 Other cyst of bone, unspecified ankle and foot -M8568 Other cyst of bone, other site -M8569 Other cyst of bone, multiple sites -M8580 Other specified disorders of bone density and structure, unspecified site -M85811 Other specified disorders of bone density and structure, right shoulder -M85812 Other specified disorders of bone density and structure, left shoulder -M85819 Other specified disorders of bone density and structure, unspecified shoulder -M85821 Other specified disorders of bone density and structure, right upper arm -M85822 Other specified disorders of bone density and structure, left upper arm -M85829 Other specified disorders of bone density and structure, unspecified upper arm -M85831 Other specified disorders of bone density and structure, right forearm -M85832 Other specified disorders of bone density and structure, left forearm -M85839 Other specified disorders of bone density and structure, unspecified forearm -M85841 Other specified disorders of bone density and structure, right hand -M85842 Other specified disorders of bone density and structure, left hand -M85849 Other specified disorders of bone density and structure, unspecified hand -M85851 Other specified disorders of bone density and structure, right thigh -M85852 Other specified disorders of bone density and structure, left thigh -M85859 Other specified disorders of bone density and structure, unspecified thigh -M85861 Other specified disorders of bone density and structure, right lower leg -M85862 Other specified disorders of bone density and structure, left lower leg -M85869 Other specified disorders of bone density and structure, unspecified lower leg -M85871 Other specified disorders of bone density and structure, right ankle and foot -M85872 Other specified disorders of bone density and structure, left ankle and foot -M85879 Other specified disorders of bone density and structure, unspecified ankle and foot -M8588 Other specified disorders of bone density and structure, other site -M8589 Other specified disorders of bone density and structure, multiple sites -M859 Disorder of bone density and structure, unspecified -M8600 Acute hematogenous osteomyelitis, unspecified site -M86011 Acute hematogenous osteomyelitis, right shoulder -M86012 Acute hematogenous osteomyelitis, left shoulder -M86019 Acute hematogenous osteomyelitis, unspecified shoulder -M86021 Acute hematogenous osteomyelitis, right humerus -M86022 Acute hematogenous osteomyelitis, left humerus -M86029 Acute hematogenous osteomyelitis, unspecified humerus -M86031 Acute hematogenous osteomyelitis, right radius and ulna -M86032 Acute hematogenous osteomyelitis, left radius and ulna -M86039 Acute hematogenous osteomyelitis, unspecified radius and ulna -M86041 Acute hematogenous osteomyelitis, right hand -M86042 Acute hematogenous osteomyelitis, left hand -M86049 Acute hematogenous osteomyelitis, unspecified hand -M86051 Acute hematogenous osteomyelitis, right femur -M86052 Acute hematogenous osteomyelitis, left femur -M86059 Acute hematogenous osteomyelitis, unspecified femur -M86061 Acute hematogenous osteomyelitis, right tibia and fibula -M86062 Acute hematogenous osteomyelitis, left tibia and fibula -M86069 Acute hematogenous osteomyelitis, unspecified tibia and fibula -M86071 Acute hematogenous osteomyelitis, right ankle and foot -M86072 Acute hematogenous osteomyelitis, left ankle and foot -M86079 Acute hematogenous osteomyelitis, unspecified ankle and foot -M8608 Acute hematogenous osteomyelitis, other sites -M8609 Acute hematogenous osteomyelitis, multiple sites -M8610 Other acute osteomyelitis, unspecified site -M86111 Other acute osteomyelitis, right shoulder -M86112 Other acute osteomyelitis, left shoulder -M86119 Other acute osteomyelitis, unspecified shoulder -M86121 Other acute osteomyelitis, right humerus -M86122 Other acute osteomyelitis, left humerus -M86129 Other acute osteomyelitis, unspecified humerus -M86131 Other acute osteomyelitis, right radius and ulna -M86132 Other acute osteomyelitis, left radius and ulna -M86139 Other acute osteomyelitis, unspecified radius and ulna -M86141 Other acute osteomyelitis, right hand -M86142 Other acute osteomyelitis, left hand -M86149 Other acute osteomyelitis, unspecified hand -M86151 Other acute osteomyelitis, right femur -M86152 Other acute osteomyelitis, left femur -M86159 Other acute osteomyelitis, unspecified femur -M86161 Other acute osteomyelitis, right tibia and fibula -M86162 Other acute osteomyelitis, left tibia and fibula -M86169 Other acute osteomyelitis, unspecified tibia and fibula -M86171 Other acute osteomyelitis, right ankle and foot -M86172 Other acute osteomyelitis, left ankle and foot -M86179 Other acute osteomyelitis, unspecified ankle and foot -M8618 Other acute osteomyelitis, other site -M8619 Other acute osteomyelitis, multiple sites -M8620 Subacute osteomyelitis, unspecified site -M86211 Subacute osteomyelitis, right shoulder -M86212 Subacute osteomyelitis, left shoulder -M86219 Subacute osteomyelitis, unspecified shoulder -M86221 Subacute osteomyelitis, right humerus -M86222 Subacute osteomyelitis, left humerus -M86229 Subacute osteomyelitis, unspecified humerus -M86231 Subacute osteomyelitis, right radius and ulna -M86232 Subacute osteomyelitis, left radius and ulna -M86239 Subacute osteomyelitis, unspecified radius and ulna -M86241 Subacute osteomyelitis, right hand -M86242 Subacute osteomyelitis, left hand -M86249 Subacute osteomyelitis, unspecified hand -M86251 Subacute osteomyelitis, right femur -M86252 Subacute osteomyelitis, left femur -M86259 Subacute osteomyelitis, unspecified femur -M86261 Subacute osteomyelitis, right tibia and fibula -M86262 Subacute osteomyelitis, left tibia and fibula -M86269 Subacute osteomyelitis, unspecified tibia and fibula -M86271 Subacute osteomyelitis, right ankle and foot -M86272 Subacute osteomyelitis, left ankle and foot -M86279 Subacute osteomyelitis, unspecified ankle and foot -M8628 Subacute osteomyelitis, other site -M8629 Subacute osteomyelitis, multiple sites -M8630 Chronic multifocal osteomyelitis, unspecified site -M86311 Chronic multifocal osteomyelitis, right shoulder -M86312 Chronic multifocal osteomyelitis, left shoulder -M86319 Chronic multifocal osteomyelitis, unspecified shoulder -M86321 Chronic multifocal osteomyelitis, right humerus -M86322 Chronic multifocal osteomyelitis, left humerus -M86329 Chronic multifocal osteomyelitis, unspecified humerus -M86331 Chronic multifocal osteomyelitis, right radius and ulna -M86332 Chronic multifocal osteomyelitis, left radius and ulna -M86339 Chronic multifocal osteomyelitis, unspecified radius and ulna -M86341 Chronic multifocal osteomyelitis, right hand -M86342 Chronic multifocal osteomyelitis, left hand -M86349 Chronic multifocal osteomyelitis, unspecified hand -M86351 Chronic multifocal osteomyelitis, right femur -M86352 Chronic multifocal osteomyelitis, left femur -M86359 Chronic multifocal osteomyelitis, unspecified femur -M86361 Chronic multifocal osteomyelitis, right tibia and fibula -M86362 Chronic multifocal osteomyelitis, left tibia and fibula -M86369 Chronic multifocal osteomyelitis, unspecified tibia and fibula -M86371 Chronic multifocal osteomyelitis, right ankle and foot -M86372 Chronic multifocal osteomyelitis, left ankle and foot -M86379 Chronic multifocal osteomyelitis, unspecified ankle and foot -M8638 Chronic multifocal osteomyelitis, other site -M8639 Chronic multifocal osteomyelitis, multiple sites -M8640 Chronic osteomyelitis with draining sinus, unspecified site -M86411 Chronic osteomyelitis with draining sinus, right shoulder -M86412 Chronic osteomyelitis with draining sinus, left shoulder -M86419 Chronic osteomyelitis with draining sinus, unspecified shoulder -M86421 Chronic osteomyelitis with draining sinus, right humerus -M86422 Chronic osteomyelitis with draining sinus, left humerus -M86429 Chronic osteomyelitis with draining sinus, unspecified humerus -M86431 Chronic osteomyelitis with draining sinus, right radius and ulna -M86432 Chronic osteomyelitis with draining sinus, left radius and ulna -M86439 Chronic osteomyelitis with draining sinus, unspecified radius and ulna -M86441 Chronic osteomyelitis with draining sinus, right hand -M86442 Chronic osteomyelitis with draining sinus, left hand -M86449 Chronic osteomyelitis with draining sinus, unspecified hand -M86451 Chronic osteomyelitis with draining sinus, right femur -M86452 Chronic osteomyelitis with draining sinus, left femur -M86459 Chronic osteomyelitis with draining sinus, unspecified femur -M86461 Chronic osteomyelitis with draining sinus, right tibia and fibula -M86462 Chronic osteomyelitis with draining sinus, left tibia and fibula -M86469 Chronic osteomyelitis with draining sinus, unspecified tibia and fibula -M86471 Chronic osteomyelitis with draining sinus, right ankle and foot -M86472 Chronic osteomyelitis with draining sinus, left ankle and foot -M86479 Chronic osteomyelitis with draining sinus, unspecified ankle and foot -M8648 Chronic osteomyelitis with draining sinus, other site -M8649 Chronic osteomyelitis with draining sinus, multiple sites -M8650 Other chronic hematogenous osteomyelitis, unspecified site -M86511 Other chronic hematogenous osteomyelitis, right shoulder -M86512 Other chronic hematogenous osteomyelitis, left shoulder -M86519 Other chronic hematogenous osteomyelitis, unspecified shoulder -M86521 Other chronic hematogenous osteomyelitis, right humerus -M86522 Other chronic hematogenous osteomyelitis, left humerus -M86529 Other chronic hematogenous osteomyelitis, unspecified humerus -M86531 Other chronic hematogenous osteomyelitis, right radius and ulna -M86532 Other chronic hematogenous osteomyelitis, left radius and ulna -M86539 Other chronic hematogenous osteomyelitis, unspecified radius and ulna -M86541 Other chronic hematogenous osteomyelitis, right hand -M86542 Other chronic hematogenous osteomyelitis, left hand -M86549 Other chronic hematogenous osteomyelitis, unspecified hand -M86551 Other chronic hematogenous osteomyelitis, right femur -M86552 Other chronic hematogenous osteomyelitis, left femur -M86559 Other chronic hematogenous osteomyelitis, unspecified femur -M86561 Other chronic hematogenous osteomyelitis, right tibia and fibula -M86562 Other chronic hematogenous osteomyelitis, left tibia and fibula -M86569 Other chronic hematogenous osteomyelitis, unspecified tibia and fibula -M86571 Other chronic hematogenous osteomyelitis, right ankle and foot -M86572 Other chronic hematogenous osteomyelitis, left ankle and foot -M86579 Other chronic hematogenous osteomyelitis, unspecified ankle and foot -M8658 Other chronic hematogenous osteomyelitis, other site -M8659 Other chronic hematogenous osteomyelitis, multiple sites -M8660 Other chronic osteomyelitis, unspecified site -M86611 Other chronic osteomyelitis, right shoulder -M86612 Other chronic osteomyelitis, left shoulder -M86619 Other chronic osteomyelitis, unspecified shoulder -M86621 Other chronic osteomyelitis, right humerus -M86622 Other chronic osteomyelitis, left humerus -M86629 Other chronic osteomyelitis, unspecified humerus -M86631 Other chronic osteomyelitis, right radius and ulna -M86632 Other chronic osteomyelitis, left radius and ulna -M86639 Other chronic osteomyelitis, unspecified radius and ulna -M86641 Other chronic osteomyelitis, right hand -M86642 Other chronic osteomyelitis, left hand -M86649 Other chronic osteomyelitis, unspecified hand -M86651 Other chronic osteomyelitis, right thigh -M86652 Other chronic osteomyelitis, left thigh -M86659 Other chronic osteomyelitis, unspecified thigh -M86661 Other chronic osteomyelitis, right tibia and fibula -M86662 Other chronic osteomyelitis, left tibia and fibula -M86669 Other chronic osteomyelitis, unspecified tibia and fibula -M86671 Other chronic osteomyelitis, right ankle and foot -M86672 Other chronic osteomyelitis, left ankle and foot -M86679 Other chronic osteomyelitis, unspecified ankle and foot -M8668 Other chronic osteomyelitis, other site -M8669 Other chronic osteomyelitis, multiple sites -M868X0 Other osteomyelitis, multiple sites -M868X1 Other osteomyelitis, shoulder -M868X2 Other osteomyelitis, upper arm -M868X3 Other osteomyelitis, forearm -M868X4 Other osteomyelitis, hand -M868X5 Other osteomyelitis, thigh -M868X6 Other osteomyelitis, lower leg -M868X7 Other osteomyelitis, ankle and foot -M868X8 Other osteomyelitis, other site -M868X9 Other osteomyelitis, unspecified sites -M869 Osteomyelitis, unspecified -M8700 Idiopathic aseptic necrosis of unspecified bone -M87011 Idiopathic aseptic necrosis of right shoulder -M87012 Idiopathic aseptic necrosis of left shoulder -M87019 Idiopathic aseptic necrosis of unspecified shoulder -M87021 Idiopathic aseptic necrosis of right humerus -M87022 Idiopathic aseptic necrosis of left humerus -M87029 Idiopathic aseptic necrosis of unspecified humerus -M87031 Idiopathic aseptic necrosis of right radius -M87032 Idiopathic aseptic necrosis of left radius -M87033 Idiopathic aseptic necrosis of unspecified radius -M87034 Idiopathic aseptic necrosis of right ulna -M87035 Idiopathic aseptic necrosis of left ulna -M87036 Idiopathic aseptic necrosis of unspecified ulna -M87037 Idiopathic aseptic necrosis of right carpus -M87038 Idiopathic aseptic necrosis of left carpus -M87039 Idiopathic aseptic necrosis of unspecified carpus -M87041 Idiopathic aseptic necrosis of right hand -M87042 Idiopathic aseptic necrosis of left hand -M87043 Idiopathic aseptic necrosis of unspecified hand -M87044 Idiopathic aseptic necrosis of right finger(s) -M87045 Idiopathic aseptic necrosis of left finger(s) -M87046 Idiopathic aseptic necrosis of unspecified finger(s) -M87050 Idiopathic aseptic necrosis of pelvis -M87051 Idiopathic aseptic necrosis of right femur -M87052 Idiopathic aseptic necrosis of left femur -M87059 Idiopathic aseptic necrosis of unspecified femur -M87061 Idiopathic aseptic necrosis of right tibia -M87062 Idiopathic aseptic necrosis of left tibia -M87063 Idiopathic aseptic necrosis of unspecified tibia -M87064 Idiopathic aseptic necrosis of right fibula -M87065 Idiopathic aseptic necrosis of left fibula -M87066 Idiopathic aseptic necrosis of unspecified fibula -M87071 Idiopathic aseptic necrosis of right ankle -M87072 Idiopathic aseptic necrosis of left ankle -M87073 Idiopathic aseptic necrosis of unspecified ankle -M87074 Idiopathic aseptic necrosis of right foot -M87075 Idiopathic aseptic necrosis of left foot -M87076 Idiopathic aseptic necrosis of unspecified foot -M87077 Idiopathic aseptic necrosis of right toe(s) -M87078 Idiopathic aseptic necrosis of left toe(s) -M87079 Idiopathic aseptic necrosis of unspecified toe(s) -M8708 Idiopathic aseptic necrosis of bone, other site -M8709 Idiopathic aseptic necrosis of bone, multiple sites -M8710 Osteonecrosis due to drugs, unspecified bone -M87111 Osteonecrosis due to drugs, right shoulder -M87112 Osteonecrosis due to drugs, left shoulder -M87119 Osteonecrosis due to drugs, unspecified shoulder -M87121 Osteonecrosis due to drugs, right humerus -M87122 Osteonecrosis due to drugs, left humerus -M87129 Osteonecrosis due to drugs, unspecified humerus -M87131 Osteonecrosis due to drugs of right radius -M87132 Osteonecrosis due to drugs of left radius -M87133 Osteonecrosis due to drugs of unspecified radius -M87134 Osteonecrosis due to drugs of right ulna -M87135 Osteonecrosis due to drugs of left ulna -M87136 Osteonecrosis due to drugs of unspecified ulna -M87137 Osteonecrosis due to drugs of right carpus -M87138 Osteonecrosis due to drugs of left carpus -M87139 Osteonecrosis due to drugs of unspecified carpus -M87141 Osteonecrosis due to drugs, right hand -M87142 Osteonecrosis due to drugs, left hand -M87143 Osteonecrosis due to drugs, unspecified hand -M87144 Osteonecrosis due to drugs, right finger(s) -M87145 Osteonecrosis due to drugs, left finger(s) -M87146 Osteonecrosis due to drugs, unspecified finger(s) -M87150 Osteonecrosis due to drugs, pelvis -M87151 Osteonecrosis due to drugs, right femur -M87152 Osteonecrosis due to drugs, left femur -M87159 Osteonecrosis due to drugs, unspecified femur -M87161 Osteonecrosis due to drugs, right tibia -M87162 Osteonecrosis due to drugs, left tibia -M87163 Osteonecrosis due to drugs, unspecified tibia -M87164 Osteonecrosis due to drugs, right fibula -M87165 Osteonecrosis due to drugs, left fibula -M87166 Osteonecrosis due to drugs, unspecified fibula -M87171 Osteonecrosis due to drugs, right ankle -M87172 Osteonecrosis due to drugs, left ankle -M87173 Osteonecrosis due to drugs, unspecified ankle -M87174 Osteonecrosis due to drugs, right foot -M87175 Osteonecrosis due to drugs, left foot -M87176 Osteonecrosis due to drugs, unspecified foot -M87177 Osteonecrosis due to drugs, right toe(s) -M87178 Osteonecrosis due to drugs, left toe(s) -M87179 Osteonecrosis due to drugs, unspecified toe(s) -M87180 Osteonecrosis due to drugs, jaw -M87188 Osteonecrosis due to drugs, other site -M8719 Osteonecrosis due to drugs, multiple sites -M8720 Osteonecrosis due to previous trauma, unspecified bone -M87211 Osteonecrosis due to previous trauma, right shoulder -M87212 Osteonecrosis due to previous trauma, left shoulder -M87219 Osteonecrosis due to previous trauma, unspecified shoulder -M87221 Osteonecrosis due to previous trauma, right humerus -M87222 Osteonecrosis due to previous trauma, left humerus -M87229 Osteonecrosis due to previous trauma, unspecified humerus -M87231 Osteonecrosis due to previous trauma of right radius -M87232 Osteonecrosis due to previous trauma of left radius -M87233 Osteonecrosis due to previous trauma of unspecified radius -M87234 Osteonecrosis due to previous trauma of right ulna -M87235 Osteonecrosis due to previous trauma of left ulna -M87236 Osteonecrosis due to previous trauma of unspecified ulna -M87237 Osteonecrosis due to previous trauma of right carpus -M87238 Osteonecrosis due to previous trauma of left carpus -M87239 Osteonecrosis due to previous trauma of unspecified carpus -M87241 Osteonecrosis due to previous trauma, right hand -M87242 Osteonecrosis due to previous trauma, left hand -M87243 Osteonecrosis due to previous trauma, unspecified hand -M87244 Osteonecrosis due to previous trauma, right finger(s) -M87245 Osteonecrosis due to previous trauma, left finger(s) -M87246 Osteonecrosis due to previous trauma, unspecified finger(s) -M87250 Osteonecrosis due to previous trauma, pelvis -M87251 Osteonecrosis due to previous trauma, right femur -M87252 Osteonecrosis due to previous trauma, left femur -M87256 Osteonecrosis due to previous trauma, unspecified femur -M87261 Osteonecrosis due to previous trauma, right tibia -M87262 Osteonecrosis due to previous trauma, left tibia -M87263 Osteonecrosis due to previous trauma, unspecified tibia -M87264 Osteonecrosis due to previous trauma, right fibula -M87265 Osteonecrosis due to previous trauma, left fibula -M87266 Osteonecrosis due to previous trauma, unspecified fibula -M87271 Osteonecrosis due to previous trauma, right ankle -M87272 Osteonecrosis due to previous trauma, left ankle -M87273 Osteonecrosis due to previous trauma, unspecified ankle -M87274 Osteonecrosis due to previous trauma, right foot -M87275 Osteonecrosis due to previous trauma, left foot -M87276 Osteonecrosis due to previous trauma, unspecified foot -M87277 Osteonecrosis due to previous trauma, right toe(s) -M87278 Osteonecrosis due to previous trauma, left toe(s) -M87279 Osteonecrosis due to previous trauma, unspecified toe(s) -M8728 Osteonecrosis due to previous trauma, other site -M8729 Osteonecrosis due to previous trauma, multiple sites -M8730 Other secondary osteonecrosis, unspecified bone -M87311 Other secondary osteonecrosis, right shoulder -M87312 Other secondary osteonecrosis, left shoulder -M87319 Other secondary osteonecrosis, unspecified shoulder -M87321 Other secondary osteonecrosis, right humerus -M87322 Other secondary osteonecrosis, left humerus -M87329 Other secondary osteonecrosis, unspecified humerus -M87331 Other secondary osteonecrosis of right radius -M87332 Other secondary osteonecrosis of left radius -M87333 Other secondary osteonecrosis of unspecified radius -M87334 Other secondary osteonecrosis of right ulna -M87335 Other secondary osteonecrosis of left ulna -M87336 Other secondary osteonecrosis of unspecified ulna -M87337 Other secondary osteonecrosis of right carpus -M87338 Other secondary osteonecrosis of left carpus -M87339 Other secondary osteonecrosis of unspecified carpus -M87341 Other secondary osteonecrosis, right hand -M87342 Other secondary osteonecrosis, left hand -M87343 Other secondary osteonecrosis, unspecified hand -M87344 Other secondary osteonecrosis, right finger(s) -M87345 Other secondary osteonecrosis, left finger(s) -M87346 Other secondary osteonecrosis, unspecified finger(s) -M87350 Other secondary osteonecrosis, pelvis -M87351 Other secondary osteonecrosis, right femur -M87352 Other secondary osteonecrosis, left femur -M87353 Other secondary osteonecrosis, unspecified femur -M87361 Other secondary osteonecrosis, right tibia -M87362 Other secondary osteonecrosis, left tibia -M87363 Other secondary osteonecrosis, unspecified tibia -M87364 Other secondary osteonecrosis, right fibula -M87365 Other secondary osteonecrosis, left fibula -M87366 Other secondary osteonecrosis, unspecified fibula -M87371 Other secondary osteonecrosis, right ankle -M87372 Other secondary osteonecrosis, left ankle -M87373 Other secondary osteonecrosis, unspecified ankle -M87374 Other secondary osteonecrosis, right foot -M87375 Other secondary osteonecrosis, left foot -M87376 Other secondary osteonecrosis, unspecified foot -M87377 Other secondary osteonecrosis, right toe(s) -M87378 Other secondary osteonecrosis, left toe(s) -M87379 Other secondary osteonecrosis, unspecified toe(s) -M8738 Other secondary osteonecrosis, other site -M8739 Other secondary osteonecrosis, multiple sites -M8780 Other osteonecrosis, unspecified bone -M87811 Other osteonecrosis, right shoulder -M87812 Other osteonecrosis, left shoulder -M87819 Other osteonecrosis, unspecified shoulder -M87821 Other osteonecrosis, right humerus -M87822 Other osteonecrosis, left humerus -M87829 Other osteonecrosis, unspecified humerus -M87831 Other osteonecrosis of right radius -M87832 Other osteonecrosis of left radius -M87833 Other osteonecrosis of unspecified radius -M87834 Other osteonecrosis of right ulna -M87835 Other osteonecrosis of left ulna -M87836 Other osteonecrosis of unspecified ulna -M87837 Other osteonecrosis of right carpus -M87838 Other osteonecrosis of left carpus -M87839 Other osteonecrosis of unspecified carpus -M87841 Other osteonecrosis, right hand -M87842 Other osteonecrosis, left hand -M87843 Other osteonecrosis, unspecified hand -M87844 Other osteonecrosis, right finger(s) -M87845 Other osteonecrosis, left finger(s) -M87849 Other osteonecrosis, unspecified finger(s) -M87850 Other osteonecrosis, pelvis -M87851 Other osteonecrosis, right femur -M87852 Other osteonecrosis, left femur -M87859 Other osteonecrosis, unspecified femur -M87861 Other osteonecrosis, right tibia -M87862 Other osteonecrosis, left tibia -M87863 Other osteonecrosis, unspecified tibia -M87864 Other osteonecrosis, right fibula -M87865 Other osteonecrosis, left fibula -M87869 Other osteonecrosis, unspecified fibula -M87871 Other osteonecrosis, right ankle -M87872 Other osteonecrosis, left ankle -M87873 Other osteonecrosis, unspecified ankle -M87874 Other osteonecrosis, right foot -M87875 Other osteonecrosis, left foot -M87876 Other osteonecrosis, unspecified foot -M87877 Other osteonecrosis, right toe(s) -M87878 Other osteonecrosis, left toe(s) -M87879 Other osteonecrosis, unspecified toe(s) -M8788 Other osteonecrosis, other site -M8789 Other osteonecrosis, multiple sites -M879 Osteonecrosis, unspecified -M880 Osteitis deformans of skull -M881 Osteitis deformans of vertebrae -M88811 Osteitis deformans of right shoulder -M88812 Osteitis deformans of left shoulder -M88819 Osteitis deformans of unspecified shoulder -M88821 Osteitis deformans of right upper arm -M88822 Osteitis deformans of left upper arm -M88829 Osteitis deformans of unspecified upper arm -M88831 Osteitis deformans of right forearm -M88832 Osteitis deformans of left forearm -M88839 Osteitis deformans of unspecified forearm -M88841 Osteitis deformans of right hand -M88842 Osteitis deformans of left hand -M88849 Osteitis deformans of unspecified hand -M88851 Osteitis deformans of right thigh -M88852 Osteitis deformans of left thigh -M88859 Osteitis deformans of unspecified thigh -M88861 Osteitis deformans of right lower leg -M88862 Osteitis deformans of left lower leg -M88869 Osteitis deformans of unspecified lower leg -M88871 Osteitis deformans of right ankle and foot -M88872 Osteitis deformans of left ankle and foot -M88879 Osteitis deformans of unspecified ankle and foot -M8888 Osteitis deformans of other bones -M8889 Osteitis deformans of multiple sites -M889 Osteitis deformans of unspecified bone -M8900 Algoneurodystrophy, unspecified site -M89011 Algoneurodystrophy, right shoulder -M89012 Algoneurodystrophy, left shoulder -M89019 Algoneurodystrophy, unspecified shoulder -M89021 Algoneurodystrophy, right upper arm -M89022 Algoneurodystrophy, left upper arm -M89029 Algoneurodystrophy, unspecified upper arm -M89031 Algoneurodystrophy, right forearm -M89032 Algoneurodystrophy, left forearm -M89039 Algoneurodystrophy, unspecified forearm -M89041 Algoneurodystrophy, right hand -M89042 Algoneurodystrophy, left hand -M89049 Algoneurodystrophy, unspecified hand -M89051 Algoneurodystrophy, right thigh -M89052 Algoneurodystrophy, left thigh -M89059 Algoneurodystrophy, unspecified thigh -M89061 Algoneurodystrophy, right lower leg -M89062 Algoneurodystrophy, left lower leg -M89069 Algoneurodystrophy, unspecified lower leg -M89071 Algoneurodystrophy, right ankle and foot -M89072 Algoneurodystrophy, left ankle and foot -M89079 Algoneurodystrophy, unspecified ankle and foot -M8908 Algoneurodystrophy, other site -M8909 Algoneurodystrophy, multiple sites -M89121 Complete physeal arrest, right proximal humerus -M89122 Complete physeal arrest, left proximal humerus -M89123 Partial physeal arrest, right proximal humerus -M89124 Partial physeal arrest, left proximal humerus -M89125 Complete physeal arrest, right distal humerus -M89126 Complete physeal arrest, left distal humerus -M89127 Partial physeal arrest, right distal humerus -M89128 Partial physeal arrest, left distal humerus -M89129 Physeal arrest, humerus, unspecified -M89131 Complete physeal arrest, right distal radius -M89132 Complete physeal arrest, left distal radius -M89133 Partial physeal arrest, right distal radius -M89134 Partial physeal arrest, left distal radius -M89138 Other physeal arrest of forearm -M89139 Physeal arrest, forearm, unspecified -M89151 Complete physeal arrest, right proximal femur -M89152 Complete physeal arrest, left proximal femur -M89153 Partial physeal arrest, right proximal femur -M89154 Partial physeal arrest, left proximal femur -M89155 Complete physeal arrest, right distal femur -M89156 Complete physeal arrest, left distal femur -M89157 Partial physeal arrest, right distal femur -M89158 Partial physeal arrest, left distal femur -M89159 Physeal arrest, femur, unspecified -M89160 Complete physeal arrest, right proximal tibia -M89161 Complete physeal arrest, left proximal tibia -M89162 Partial physeal arrest, right proximal tibia -M89163 Partial physeal arrest, left proximal tibia -M89164 Complete physeal arrest, right distal tibia -M89165 Complete physeal arrest, left distal tibia -M89166 Partial physeal arrest, right distal tibia -M89167 Partial physeal arrest, left distal tibia -M89168 Other physeal arrest of lower leg -M89169 Physeal arrest, lower leg, unspecified -M8918 Physeal arrest, other site -M8920 Other disorders of bone development and growth, unspecified site -M89211 Other disorders of bone development and growth, right shoulder -M89212 Other disorders of bone development and growth, left shoulder -M89219 Other disorders of bone development and growth, unspecified shoulder -M89221 Other disorders of bone development and growth, right humerus -M89222 Other disorders of bone development and growth, left humerus -M89229 Other disorders of bone development and growth, unspecified humerus -M89231 Other disorders of bone development and growth, right ulna -M89232 Other disorders of bone development and growth, left ulna -M89233 Other disorders of bone development and growth, right radius -M89234 Other disorders of bone development and growth, left radius -M89239 Other disorders of bone development and growth, unspecified ulna and radius -M89241 Other disorders of bone development and growth, right hand -M89242 Other disorders of bone development and growth, left hand -M89249 Other disorders of bone development and growth, unspecified hand -M89251 Other disorders of bone development and growth, right femur -M89252 Other disorders of bone development and growth, left femur -M89259 Other disorders of bone development and growth, unspecified femur -M89261 Other disorders of bone development and growth, right tibia -M89262 Other disorders of bone development and growth, left tibia -M89263 Other disorders of bone development and growth, right fibula -M89264 Other disorders of bone development and growth, left fibula -M89269 Other disorders of bone development and growth, unspecified lower leg -M89271 Other disorders of bone development and growth, right ankle and foot -M89272 Other disorders of bone development and growth, left ankle and foot -M89279 Other disorders of bone development and growth, unspecified ankle and foot -M8928 Other disorders of bone development and growth, other site -M8929 Other disorders of bone development and growth, multiple sites -M8930 Hypertrophy of bone, unspecified site -M89311 Hypertrophy of bone, right shoulder -M89312 Hypertrophy of bone, left shoulder -M89319 Hypertrophy of bone, unspecified shoulder -M89321 Hypertrophy of bone, right humerus -M89322 Hypertrophy of bone, left humerus -M89329 Hypertrophy of bone, unspecified humerus -M89331 Hypertrophy of bone, right ulna -M89332 Hypertrophy of bone, left ulna -M89333 Hypertrophy of bone, right radius -M89334 Hypertrophy of bone, left radius -M89339 Hypertrophy of bone, unspecified ulna and radius -M89341 Hypertrophy of bone, right hand -M89342 Hypertrophy of bone, left hand -M89349 Hypertrophy of bone, unspecified hand -M89351 Hypertrophy of bone, right femur -M89352 Hypertrophy of bone, left femur -M89359 Hypertrophy of bone, unspecified femur -M89361 Hypertrophy of bone, right tibia -M89362 Hypertrophy of bone, left tibia -M89363 Hypertrophy of bone, right fibula -M89364 Hypertrophy of bone, left fibula -M89369 Hypertrophy of bone, unspecified tibia and fibula -M89371 Hypertrophy of bone, right ankle and foot -M89372 Hypertrophy of bone, left ankle and foot -M89379 Hypertrophy of bone, unspecified ankle and foot -M8938 Hypertrophy of bone, other site -M8939 Hypertrophy of bone, multiple sites -M8940 Other hypertrophic osteoarthropathy, unspecified site -M89411 Other hypertrophic osteoarthropathy, right shoulder -M89412 Other hypertrophic osteoarthropathy, left shoulder -M89419 Other hypertrophic osteoarthropathy, unspecified shoulder -M89421 Other hypertrophic osteoarthropathy, right upper arm -M89422 Other hypertrophic osteoarthropathy, left upper arm -M89429 Other hypertrophic osteoarthropathy, unspecified upper arm -M89431 Other hypertrophic osteoarthropathy, right forearm -M89432 Other hypertrophic osteoarthropathy, left forearm -M89439 Other hypertrophic osteoarthropathy, unspecified forearm -M89441 Other hypertrophic osteoarthropathy, right hand -M89442 Other hypertrophic osteoarthropathy, left hand -M89449 Other hypertrophic osteoarthropathy, unspecified hand -M89451 Other hypertrophic osteoarthropathy, right thigh -M89452 Other hypertrophic osteoarthropathy, left thigh -M89459 Other hypertrophic osteoarthropathy, unspecified thigh -M89461 Other hypertrophic osteoarthropathy, right lower leg -M89462 Other hypertrophic osteoarthropathy, left lower leg -M89469 Other hypertrophic osteoarthropathy, unspecified lower leg -M89471 Other hypertrophic osteoarthropathy, right ankle and foot -M89472 Other hypertrophic osteoarthropathy, left ankle and foot -M89479 Other hypertrophic osteoarthropathy, unspecified ankle and foot -M8948 Other hypertrophic osteoarthropathy, other site -M8949 Other hypertrophic osteoarthropathy, multiple sites -M8950 Osteolysis, unspecified site -M89511 Osteolysis, right shoulder -M89512 Osteolysis, left shoulder -M89519 Osteolysis, unspecified shoulder -M89521 Osteolysis, right upper arm -M89522 Osteolysis, left upper arm -M89529 Osteolysis, unspecified upper arm -M89531 Osteolysis, right forearm -M89532 Osteolysis, left forearm -M89539 Osteolysis, unspecified forearm -M89541 Osteolysis, right hand -M89542 Osteolysis, left hand -M89549 Osteolysis, unspecified hand -M89551 Osteolysis, right thigh -M89552 Osteolysis, left thigh -M89559 Osteolysis, unspecified thigh -M89561 Osteolysis, right lower leg -M89562 Osteolysis, left lower leg -M89569 Osteolysis, unspecified lower leg -M89571 Osteolysis, right ankle and foot -M89572 Osteolysis, left ankle and foot -M89579 Osteolysis, unspecified ankle and foot -M8958 Osteolysis, other site -M8959 Osteolysis, multiple sites -M8960 Osteopathy after poliomyelitis, unspecified site -M89611 Osteopathy after poliomyelitis, right shoulder -M89612 Osteopathy after poliomyelitis, left shoulder -M89619 Osteopathy after poliomyelitis, unspecified shoulder -M89621 Osteopathy after poliomyelitis, right upper arm -M89622 Osteopathy after poliomyelitis, left upper arm -M89629 Osteopathy after poliomyelitis, unspecified upper arm -M89631 Osteopathy after poliomyelitis, right forearm -M89632 Osteopathy after poliomyelitis, left forearm -M89639 Osteopathy after poliomyelitis, unspecified forearm -M89641 Osteopathy after poliomyelitis, right hand -M89642 Osteopathy after poliomyelitis, left hand -M89649 Osteopathy after poliomyelitis, unspecified hand -M89651 Osteopathy after poliomyelitis, right thigh -M89652 Osteopathy after poliomyelitis, left thigh -M89659 Osteopathy after poliomyelitis, unspecified thigh -M89661 Osteopathy after poliomyelitis, right lower leg -M89662 Osteopathy after poliomyelitis, left lower leg -M89669 Osteopathy after poliomyelitis, unspecified lower leg -M89671 Osteopathy after poliomyelitis, right ankle and foot -M89672 Osteopathy after poliomyelitis, left ankle and foot -M89679 Osteopathy after poliomyelitis, unspecified ankle and foot -M8968 Osteopathy after poliomyelitis, other site -M8969 Osteopathy after poliomyelitis, multiple sites -M8970 Major osseous defect, unspecified site -M89711 Major osseous defect, right shoulder region -M89712 Major osseous defect, left shoulder region -M89719 Major osseous defect, unspecified shoulder region -M89721 Major osseous defect, right humerus -M89722 Major osseous defect, left humerus -M89729 Major osseous defect, unspecified humerus -M89731 Major osseous defect, right forearm -M89732 Major osseous defect, left forearm -M89739 Major osseous defect, unspecified forearm -M89741 Major osseous defect, right hand -M89742 Major osseous defect, left hand -M89749 Major osseous defect, unspecified hand -M89751 Major osseous defect, right pelvic region and thigh -M89752 Major osseous defect, left pelvic region and thigh -M89759 Major osseous defect, unspecified pelvic region and thigh -M89761 Major osseous defect, right lower leg -M89762 Major osseous defect, left lower leg -M89769 Major osseous defect, unspecified lower leg -M89771 Major osseous defect, right ankle and foot -M89772 Major osseous defect, left ankle and foot -M89779 Major osseous defect, unspecified ankle and foot -M8978 Major osseous defect, other site -M8979 Major osseous defect, multiple sites -M898X0 Other specified disorders of bone, multiple sites -M898X1 Other specified disorders of bone, shoulder -M898X2 Other specified disorders of bone, upper arm -M898X3 Other specified disorders of bone, forearm -M898X4 Other specified disorders of bone, hand -M898X5 Other specified disorders of bone, thigh -M898X6 Other specified disorders of bone, lower leg -M898X7 Other specified disorders of bone, ankle and foot -M898X8 Other specified disorders of bone, other site -M898X9 Other specified disorders of bone, unspecified site -M899 Disorder of bone, unspecified -M9050 Osteonecrosis in diseases classified elsewhere, unspecified site -M90511 Osteonecrosis in diseases classified elsewhere, right shoulder -M90512 Osteonecrosis in diseases classified elsewhere, left shoulder -M90519 Osteonecrosis in diseases classified elsewhere, unspecified shoulder -M90521 Osteonecrosis in diseases classified elsewhere, right upper arm -M90522 Osteonecrosis in diseases classified elsewhere, left upper arm -M90529 Osteonecrosis in diseases classified elsewhere, unspecified upper arm -M90531 Osteonecrosis in diseases classified elsewhere, right forearm -M90532 Osteonecrosis in diseases classified elsewhere, left forearm -M90539 Osteonecrosis in diseases classified elsewhere, unspecified forearm -M90541 Osteonecrosis in diseases classified elsewhere, right hand -M90542 Osteonecrosis in diseases classified elsewhere, left hand -M90549 Osteonecrosis in diseases classified elsewhere, unspecified hand -M90551 Osteonecrosis in diseases classified elsewhere, right thigh -M90552 Osteonecrosis in diseases classified elsewhere, left thigh -M90559 Osteonecrosis in diseases classified elsewhere, unspecified thigh -M90561 Osteonecrosis in diseases classified elsewhere, right lower leg -M90562 Osteonecrosis in diseases classified elsewhere, left lower leg -M90569 Osteonecrosis in diseases classified elsewhere, unspecified lower leg -M90571 Osteonecrosis in diseases classified elsewhere, right ankle and foot -M90572 Osteonecrosis in diseases classified elsewhere, left ankle and foot -M90579 Osteonecrosis in diseases classified elsewhere, unspecified ankle and foot -M9058 Osteonecrosis in diseases classified elsewhere, other site -M9059 Osteonecrosis in diseases classified elsewhere, multiple sites -M9060 Osteitis deformans in neoplastic diseases, unspecified site -M90611 Osteitis deformans in neoplastic diseases, right shoulder -M90612 Osteitis deformans in neoplastic diseases, left shoulder -M90619 Osteitis deformans in neoplastic diseases, unspecified shoulder -M90621 Osteitis deformans in neoplastic diseases, right upper arm -M90622 Osteitis deformans in neoplastic diseases, left upper arm -M90629 Osteitis deformans in neoplastic diseases, unspecified upper arm -M90631 Osteitis deformans in neoplastic diseases, right forearm -M90632 Osteitis deformans in neoplastic diseases, left forearm -M90639 Osteitis deformans in neoplastic diseases, unspecified forearm -M90641 Osteitis deformans in neoplastic diseases, right hand -M90642 Osteitis deformans in neoplastic diseases, left hand -M90649 Osteitis deformans in neoplastic diseases, unspecified hand -M90651 Osteitis deformans in neoplastic diseases, right thigh -M90652 Osteitis deformans in neoplastic diseases, left thigh -M90659 Osteitis deformans in neoplastic diseases, unspecified thigh -M90661 Osteitis deformans in neoplastic diseases, right lower leg -M90662 Osteitis deformans in neoplastic diseases, left lower leg -M90669 Osteitis deformans in neoplastic diseases, unspecified lower leg -M90671 Osteitis deformans in neoplastic diseases, right ankle and foot -M90672 Osteitis deformans in neoplastic diseases, left ankle and foot -M90679 Osteitis deformans in neoplastic diseases, unspecified ankle and foot -M9068 Osteitis deformans in neoplastic diseases, other site -M9069 Osteitis deformans in neoplastic diseases, multiple sites -M9080 Osteopathy in diseases classified elsewhere, unspecified site -M90811 Osteopathy in diseases classified elsewhere, right shoulder -M90812 Osteopathy in diseases classified elsewhere, left shoulder -M90819 Osteopathy in diseases classified elsewhere, unspecified shoulder -M90821 Osteopathy in diseases classified elsewhere, right upper arm -M90822 Osteopathy in diseases classified elsewhere, left upper arm -M90829 Osteopathy in diseases classified elsewhere, unspecified upper arm -M90831 Osteopathy in diseases classified elsewhere, right forearm -M90832 Osteopathy in diseases classified elsewhere, left forearm -M90839 Osteopathy in diseases classified elsewhere, unspecified forearm -M90841 Osteopathy in diseases classified elsewhere, right hand -M90842 Osteopathy in diseases classified elsewhere, left hand -M90849 Osteopathy in diseases classified elsewhere, unspecified hand -M90851 Osteopathy in diseases classified elsewhere, right thigh -M90852 Osteopathy in diseases classified elsewhere, left thigh -M90859 Osteopathy in diseases classified elsewhere, unspecified thigh -M90861 Osteopathy in diseases classified elsewhere, right lower leg -M90862 Osteopathy in diseases classified elsewhere, left lower leg -M90869 Osteopathy in diseases classified elsewhere, unspecified lower leg -M90871 Osteopathy in diseases classified elsewhere, right ankle and foot -M90872 Osteopathy in diseases classified elsewhere, left ankle and foot -M90879 Osteopathy in diseases classified elsewhere, unspecified ankle and foot -M9088 Osteopathy in diseases classified elsewhere, other site -M9089 Osteopathy in diseases classified elsewhere, multiple sites -M910 Juvenile osteochondrosis of pelvis -M9110 Juvenile osteochondrosis of head of femur [Legg-Calve-Perthes], unspecified leg -M9111 Juvenile osteochondrosis of head of femur [Legg-Calve-Perthes], right leg -M9112 Juvenile osteochondrosis of head of femur [Legg-Calve-Perthes], left leg -M9120 Coxa plana, unspecified hip -M9121 Coxa plana, right hip -M9122 Coxa plana, left hip -M9130 Pseudocoxalgia, unspecified hip -M9131 Pseudocoxalgia, right hip -M9132 Pseudocoxalgia, left hip -M9140 Coxa magna, unspecified hip -M9141 Coxa magna, right hip -M9142 Coxa magna, left hip -M9180 Other juvenile osteochondrosis of hip and pelvis, unspecified leg -M9181 Other juvenile osteochondrosis of hip and pelvis, right leg -M9182 Other juvenile osteochondrosis of hip and pelvis, left leg -M9190 Juvenile osteochondrosis of hip and pelvis, unspecified, unspecified leg -M9191 Juvenile osteochondrosis of hip and pelvis, unspecified, right leg -M9192 Juvenile osteochondrosis of hip and pelvis, unspecified, left leg -M9200 Juvenile osteochondrosis of humerus, unspecified arm -M9201 Juvenile osteochondrosis of humerus, right arm -M9202 Juvenile osteochondrosis of humerus, left arm -M9210 Juvenile osteochondrosis of radius and ulna, unspecified arm -M9211 Juvenile osteochondrosis of radius and ulna, right arm -M9212 Juvenile osteochondrosis of radius and ulna, left arm -M92201 Unspecified juvenile osteochondrosis, right hand -M92202 Unspecified juvenile osteochondrosis, left hand -M92209 Unspecified juvenile osteochondrosis, unspecified hand -M92211 Osteochondrosis (juvenile) of carpal lunate [Kienbock], right hand -M92212 Osteochondrosis (juvenile) of carpal lunate [Kienbock], left hand -M92219 Osteochondrosis (juvenile) of carpal lunate [Kienbock], unspecified hand -M92221 Osteochondrosis (juvenile) of metacarpal heads [Mauclaire], right hand -M92222 Osteochondrosis (juvenile) of metacarpal heads [Mauclaire], left hand -M92229 Osteochondrosis (juvenile) of metacarpal heads [Mauclaire], unspecified hand -M92291 Other juvenile osteochondrosis, right hand -M92292 Other juvenile osteochondrosis, left hand -M92299 Other juvenile osteochondrosis, unspecified hand -M9230 Other juvenile osteochondrosis, unspecified upper limb -M9231 Other juvenile osteochondrosis, right upper limb -M9232 Other juvenile osteochondrosis, left upper limb -M9240 Juvenile osteochondrosis of patella, unspecified knee -M9241 Juvenile osteochondrosis of patella, right knee -M9242 Juvenile osteochondrosis of patella, left knee -M9250 Juvenile osteochondrosis of tibia and fibula, unspecified leg -M9251 Juvenile osteochondrosis of tibia and fibula, right leg -M9252 Juvenile osteochondrosis of tibia and fibula, left leg -M9260 Juvenile osteochondrosis of tarsus, unspecified ankle -M9261 Juvenile osteochondrosis of tarsus, right ankle -M9262 Juvenile osteochondrosis of tarsus, left ankle -M9270 Juvenile osteochondrosis of metatarsus, unspecified foot -M9271 Juvenile osteochondrosis of metatarsus, right foot -M9272 Juvenile osteochondrosis of metatarsus, left foot -M928 Other specified juvenile osteochondrosis -M929 Juvenile osteochondrosis, unspecified -M93001 Unspecified slipped upper femoral epiphysis (nontraumatic), right hip -M93002 Unspecified slipped upper femoral epiphysis (nontraumatic), left hip -M93003 Unspecified slipped upper femoral epiphysis (nontraumatic), unspecified hip -M93011 Acute slipped upper femoral epiphysis (nontraumatic), right hip -M93012 Acute slipped upper femoral epiphysis (nontraumatic), left hip -M93013 Acute slipped upper femoral epiphysis (nontraumatic), unspecified hip -M93021 Chronic slipped upper femoral epiphysis (nontraumatic), right hip -M93022 Chronic slipped upper femoral epiphysis (nontraumatic), left hip -M93023 Chronic slipped upper femoral epiphysis (nontraumatic), unspecified hip -M93031 Acute on chronic slipped upper femoral epiphysis (nontraumatic), right hip -M93032 Acute on chronic slipped upper femoral epiphysis (nontraumatic), left hip -M93033 Acute on chronic slipped upper femoral epiphysis (nontraumatic), unspecified hip -M931 Kienbock's disease of adults -M9320 Osteochondritis dissecans of unspecified site -M93211 Osteochondritis dissecans, right shoulder -M93212 Osteochondritis dissecans, left shoulder -M93219 Osteochondritis dissecans, unspecified shoulder -M93221 Osteochondritis dissecans, right elbow -M93222 Osteochondritis dissecans, left elbow -M93229 Osteochondritis dissecans, unspecified elbow -M93231 Osteochondritis dissecans, right wrist -M93232 Osteochondritis dissecans, left wrist -M93239 Osteochondritis dissecans, unspecified wrist -M93241 Osteochondritis dissecans, joints of right hand -M93242 Osteochondritis dissecans, joints of left hand -M93249 Osteochondritis dissecans, joints of unspecified hand -M93251 Osteochondritis dissecans, right hip -M93252 Osteochondritis dissecans, left hip -M93259 Osteochondritis dissecans, unspecified hip -M93261 Osteochondritis dissecans, right knee -M93262 Osteochondritis dissecans, left knee -M93269 Osteochondritis dissecans, unspecified knee -M93271 Osteochondritis dissecans, right ankle and joints of right foot -M93272 Osteochondritis dissecans, left ankle and joints of left foot -M93279 Osteochondritis dissecans, unspecified ankle and joints of foot -M9328 Osteochondritis dissecans other site -M9329 Osteochondritis dissecans multiple sites -M9380 Other specified osteochondropathies of unspecified site -M93811 Other specified osteochondropathies, right shoulder -M93812 Other specified osteochondropathies, left shoulder -M93819 Other specified osteochondropathies, unspecified shoulder -M93821 Other specified osteochondropathies, right upper arm -M93822 Other specified osteochondropathies, left upper arm -M93829 Other specified osteochondropathies, unspecified upper arm -M93831 Other specified osteochondropathies, right forearm -M93832 Other specified osteochondropathies, left forearm -M93839 Other specified osteochondropathies, unspecified forearm -M93841 Other specified osteochondropathies, right hand -M93842 Other specified osteochondropathies, left hand -M93849 Other specified osteochondropathies, unspecified hand -M93851 Other specified osteochondropathies, right thigh -M93852 Other specified osteochondropathies, left thigh -M93859 Other specified osteochondropathies, unspecified thigh -M93861 Other specified osteochondropathies, right lower leg -M93862 Other specified osteochondropathies, left lower leg -M93869 Other specified osteochondropathies, unspecified lower leg -M93871 Other specified osteochondropathies, right ankle and foot -M93872 Other specified osteochondropathies, left ankle and foot -M93879 Other specified osteochondropathies, unspecified ankle and foot -M9388 Other specified osteochondropathies other -M9389 Other specified osteochondropathies multiple sites -M9390 Osteochondropathy, unspecified of unspecified site -M93911 Osteochondropathy, unspecified, right shoulder -M93912 Osteochondropathy, unspecified, left shoulder -M93919 Osteochondropathy, unspecified, unspecified shoulder -M93921 Osteochondropathy, unspecified, right upper arm -M93922 Osteochondropathy, unspecified, left upper arm -M93929 Osteochondropathy, unspecified, unspecified upper arm -M93931 Osteochondropathy, unspecified, right forearm -M93932 Osteochondropathy, unspecified, left forearm -M93939 Osteochondropathy, unspecified, unspecified forearm -M93941 Osteochondropathy, unspecified, right hand -M93942 Osteochondropathy, unspecified, left hand -M93949 Osteochondropathy, unspecified, unspecified hand -M93951 Osteochondropathy, unspecified, right thigh -M93952 Osteochondropathy, unspecified, left thigh -M93959 Osteochondropathy, unspecified, unspecified thigh -M93961 Osteochondropathy, unspecified, right lower leg -M93962 Osteochondropathy, unspecified, left lower leg -M93969 Osteochondropathy, unspecified, unspecified lower leg -M93971 Osteochondropathy, unspecified, right ankle and foot -M93972 Osteochondropathy, unspecified, left ankle and foot -M93979 Osteochondropathy, unspecified, unspecified ankle and foot -M9398 Osteochondropathy, unspecified other -M9399 Osteochondropathy, unspecified multiple sites -M940 Chondrocostal junction syndrome [Tietze] -M941 Relapsing polychondritis -M9420 Chondromalacia, unspecified site -M94211 Chondromalacia, right shoulder -M94212 Chondromalacia, left shoulder -M94219 Chondromalacia, unspecified shoulder -M94221 Chondromalacia, right elbow -M94222 Chondromalacia, left elbow -M94229 Chondromalacia, unspecified elbow -M94231 Chondromalacia, right wrist -M94232 Chondromalacia, left wrist -M94239 Chondromalacia, unspecified wrist -M94241 Chondromalacia, joints of right hand -M94242 Chondromalacia, joints of left hand -M94249 Chondromalacia, joints of unspecified hand -M94251 Chondromalacia, right hip -M94252 Chondromalacia, left hip -M94259 Chondromalacia, unspecified hip -M94261 Chondromalacia, right knee -M94262 Chondromalacia, left knee -M94269 Chondromalacia, unspecified knee -M94271 Chondromalacia, right ankle and joints of right foot -M94272 Chondromalacia, left ankle and joints of left foot -M94279 Chondromalacia, unspecified ankle and joints of foot -M9428 Chondromalacia, other site -M9429 Chondromalacia, multiple sites -M94351 Chondrolysis, right hip -M94352 Chondrolysis, left hip -M94359 Chondrolysis, unspecified hip -M948X0 Other specified disorders of cartilage, multiple sites -M948X1 Other specified disorders of cartilage, shoulder -M948X2 Other specified disorders of cartilage, upper arm -M948X3 Other specified disorders of cartilage, forearm -M948X4 Other specified disorders of cartilage, hand -M948X5 Other specified disorders of cartilage, thigh -M948X6 Other specified disorders of cartilage, lower leg -M948X7 Other specified disorders of cartilage, ankle and foot -M948X8 Other specified disorders of cartilage, other site -M948X9 Other specified disorders of cartilage, unspecified sites -M949 Disorder of cartilage, unspecified -M950 Acquired deformity of nose -M9510 Cauliflower ear, unspecified ear -M9511 Cauliflower ear, right ear -M9512 Cauliflower ear, left ear -M952 Other acquired deformity of head -M953 Acquired deformity of neck -M954 Acquired deformity of chest and rib -M955 Acquired deformity of pelvis -M958 Other specified acquired deformities of musculoskeletal system -M959 Acquired deformity of musculoskeletal system, unspecified -M960 Pseudarthrosis after fusion or arthrodesis -M961 Postlaminectomy syndrome, not elsewhere classified -M962 Postradiation kyphosis -M963 Postlaminectomy kyphosis -M964 Postsurgical lordosis -M965 Postradiation scoliosis -M96621 Fracture of humerus following insertion of orthopedic implant, joint prosthesis, or bone plate, right arm -M96622 Fracture of humerus following insertion of orthopedic implant, joint prosthesis, or bone plate, left arm -M96629 Fracture of humerus following insertion of orthopedic implant, joint prosthesis, or bone plate, unspecified arm -M96631 Fracture of radius or ulna following insertion of orthopedic implant, joint prosthesis, or bone plate, right arm -M96632 Fracture of radius or ulna following insertion of orthopedic implant, joint prosthesis, or bone plate, left arm -M96639 Fracture of radius or ulna following insertion of orthopedic implant, joint prosthesis, or bone plate, unspecified arm -M9665 Fracture of pelvis following insertion of orthopedic implant, joint prosthesis, or bone plate -M96661 Fracture of femur following insertion of orthopedic implant, joint prosthesis, or bone plate, right leg -M96662 Fracture of femur following insertion of orthopedic implant, joint prosthesis, or bone plate, left leg -M96669 Fracture of femur following insertion of orthopedic implant, joint prosthesis, or bone plate, unspecified leg -M96671 Fracture of tibia or fibula following insertion of orthopedic implant, joint prosthesis, or bone plate, right leg -M96672 Fracture of tibia or fibula following insertion of orthopedic implant, joint prosthesis, or bone plate, left leg -M96679 Fracture of tibia or fibula following insertion of orthopedic implant, joint prosthesis, or bone plate, unspecified leg -M9669 Fracture of other bone following insertion of orthopedic implant, joint prosthesis, or bone plate -M96810 Intraoperative hemorrhage and hematoma of a musculoskeletal structure complicating a musculoskeletal system procedure -M96811 Intraoperative hemorrhage and hematoma of a musculoskeletal structure complicating other procedure -M96820 Accidental puncture and laceration of a musculoskeletal structure during a musculoskeletal system procedure -M96821 Accidental puncture and laceration of a musculoskeletal structure during other procedure -M96830 Postprocedural hemorrhage and hematoma of a musculoskeletal structure following a musculoskeletal system procedure -M96831 Postprocedural hemorrhage and hematoma of a musculoskeletal structure following other procedure -M9689 Other intraoperative and postprocedural complications and disorders of the musculoskeletal system -M9900 Segmental and somatic dysfunction of head region -M9901 Segmental and somatic dysfunction of cervical region -M9902 Segmental and somatic dysfunction of thoracic region -M9903 Segmental and somatic dysfunction of lumbar region -M9904 Segmental and somatic dysfunction of sacral region -M9905 Segmental and somatic dysfunction of pelvic region -M9906 Segmental and somatic dysfunction of lower extremity -M9907 Segmental and somatic dysfunction of upper extremity -M9908 Segmental and somatic dysfunction of rib cage -M9909 Segmental and somatic dysfunction of abdomen and other regions -M9910 Subluxation complex (vertebral) of head region -M9911 Subluxation complex (vertebral) of cervical region -M9912 Subluxation complex (vertebral) of thoracic region -M9913 Subluxation complex (vertebral) of lumbar region -M9914 Subluxation complex (vertebral) of sacral region -M9915 Subluxation complex (vertebral) of pelvic region -M9916 Subluxation complex (vertebral) of lower extremity -M9917 Subluxation complex (vertebral) of upper extremity -M9918 Subluxation complex (vertebral) of rib cage -M9919 Subluxation complex (vertebral) of abdomen and other regions -M9920 Subluxation stenosis of neural canal of head region -M9921 Subluxation stenosis of neural canal of cervical region -M9922 Subluxation stenosis of neural canal of thoracic region -M9923 Subluxation stenosis of neural canal of lumbar region -M9924 Subluxation stenosis of neural canal of sacral region -M9925 Subluxation stenosis of neural canal of pelvic region -M9926 Subluxation stenosis of neural canal of lower extremity -M9927 Subluxation stenosis of neural canal of upper extremity -M9928 Subluxation stenosis of neural canal of rib cage -M9929 Subluxation stenosis of neural canal of abdomen and other regions -M9930 Osseous stenosis of neural canal of head region -M9931 Osseous stenosis of neural canal of cervical region -M9932 Osseous stenosis of neural canal of thoracic region -M9933 Osseous stenosis of neural canal of lumbar region -M9934 Osseous stenosis of neural canal of sacral region -M9935 Osseous stenosis of neural canal of pelvic region -M9936 Osseous stenosis of neural canal of lower extremity -M9937 Osseous stenosis of neural canal of upper extremity -M9938 Osseous stenosis of neural canal of rib cage -M9939 Osseous stenosis of neural canal of abdomen and other regions -M9940 Connective tissue stenosis of neural canal of head region -M9941 Connective tissue stenosis of neural canal of cervical region -M9942 Connective tissue stenosis of neural canal of thoracic region -M9943 Connective tissue stenosis of neural canal of lumbar region -M9944 Connective tissue stenosis of neural canal of sacral region -M9945 Connective tissue stenosis of neural canal of pelvic region -M9946 Connective tissue stenosis of neural canal of lower extremity -M9947 Connective tissue stenosis of neural canal of upper extremity -M9948 Connective tissue stenosis of neural canal of rib cage -M9949 Connective tissue stenosis of neural canal of abdomen and other regions -M9950 Intervertebral disc stenosis of neural canal of head region -M9951 Intervertebral disc stenosis of neural canal of cervical region -M9952 Intervertebral disc stenosis of neural canal of thoracic region -M9953 Intervertebral disc stenosis of neural canal of lumbar region -M9954 Intervertebral disc stenosis of neural canal of sacral region -M9955 Intervertebral disc stenosis of neural canal of pelvic region -M9956 Intervertebral disc stenosis of neural canal of lower extremity -M9957 Intervertebral disc stenosis of neural canal of upper extremity -M9958 Intervertebral disc stenosis of neural canal of rib cage -M9959 Intervertebral disc stenosis of neural canal of abdomen and other regions -M9960 Osseous and subluxation stenosis of intervertebral foramina of head region -M9961 Osseous and subluxation stenosis of intervertebral foramina of cervical region -M9962 Osseous and subluxation stenosis of intervertebral foramina of thoracic region -M9963 Osseous and subluxation stenosis of intervertebral foramina of lumbar region -M9964 Osseous and subluxation stenosis of intervertebral foramina of sacral region -M9965 Osseous and subluxation stenosis of intervertebral foramina of pelvic region -M9966 Osseous and subluxation stenosis of intervertebral foramina of lower extremity -M9967 Osseous and subluxation stenosis of intervertebral foramina of upper extremity -M9968 Osseous and subluxation stenosis of intervertebral foramina of rib cage -M9969 Osseous and subluxation stenosis of intervertebral foramina of abdomen and other regions -M9970 Connective tissue and disc stenosis of intervertebral foramina of head region -M9971 Connective tissue and disc stenosis of intervertebral foramina of cervical region -M9972 Connective tissue and disc stenosis of intervertebral foramina of thoracic region -M9973 Connective tissue and disc stenosis of intervertebral foramina of lumbar region -M9974 Connective tissue and disc stenosis of intervertebral foramina of sacral region -M9975 Connective tissue and disc stenosis of intervertebral foramina of pelvic region -M9976 Connective tissue and disc stenosis of intervertebral foramina of lower extremity -M9977 Connective tissue and disc stenosis of intervertebral foramina of upper extremity -M9978 Connective tissue and disc stenosis of intervertebral foramina of rib cage -M9979 Connective tissue and disc stenosis of intervertebral foramina of abdomen and other regions -M9980 Other biomechanical lesions of head region -M9981 Other biomechanical lesions of cervical region -M9982 Other biomechanical lesions of thoracic region -M9983 Other biomechanical lesions of lumbar region -M9984 Other biomechanical lesions of sacral region -M9985 Other biomechanical lesions of pelvic region -M9986 Other biomechanical lesions of lower extremity -M9987 Other biomechanical lesions of upper extremity -M9988 Other biomechanical lesions of rib cage -M9989 Other biomechanical lesions of abdomen and other regions -M999 Biomechanical lesion, unspecified -N000 Acute nephritic syndrome with minor glomerular abnormality -N001 Acute nephritic syndrome with focal and segmental glomerular lesions -N002 Acute nephritic syndrome with diffuse membranous glomerulonephritis -N003 Acute nephritic syndrome with diffuse mesangial proliferative glomerulonephritis -N004 Acute nephritic syndrome with diffuse endocapillary proliferative glomerulonephritis -N005 Acute nephritic syndrome with diffuse mesangiocapillary glomerulonephritis -N006 Acute nephritic syndrome with dense deposit disease -N007 Acute nephritic syndrome with diffuse crescentic glomerulonephritis -N008 Acute nephritic syndrome with other morphologic changes -N009 Acute nephritic syndrome with unspecified morphologic changes -N010 Rapidly progressive nephritic syndrome with minor glomerular abnormality -N011 Rapidly progressive nephritic syndrome with focal and segmental glomerular lesions -N012 Rapidly progressive nephritic syndrome with diffuse membranous glomerulonephritis -N013 Rapidly progressive nephritic syndrome with diffuse mesangial proliferative glomerulonephritis -N014 Rapidly progressive nephritic syndrome with diffuse endocapillary proliferative glomerulonephritis -N015 Rapidly progressive nephritic syndrome with diffuse mesangiocapillary glomerulonephritis -N016 Rapidly progressive nephritic syndrome with dense deposit disease -N017 Rapidly progressive nephritic syndrome with diffuse crescentic glomerulonephritis -N018 Rapidly progressive nephritic syndrome with other morphologic changes -N019 Rapidly progressive nephritic syndrome with unspecified morphologic changes -N020 Recurrent and persistent hematuria with minor glomerular abnormality -N021 Recurrent and persistent hematuria with focal and segmental glomerular lesions -N022 Recurrent and persistent hematuria with diffuse membranous glomerulonephritis -N023 Recurrent and persistent hematuria with diffuse mesangial proliferative glomerulonephritis -N024 Recurrent and persistent hematuria with diffuse endocapillary proliferative glomerulonephritis -N025 Recurrent and persistent hematuria with diffuse mesangiocapillary glomerulonephritis -N026 Recurrent and persistent hematuria with dense deposit disease -N027 Recurrent and persistent hematuria with diffuse crescentic glomerulonephritis -N028 Recurrent and persistent hematuria with other morphologic changes -N029 Recurrent and persistent hematuria with unspecified morphologic changes -N030 Chronic nephritic syndrome with minor glomerular abnormality -N031 Chronic nephritic syndrome with focal and segmental glomerular lesions -N032 Chronic nephritic syndrome with diffuse membranous glomerulonephritis -N033 Chronic nephritic syndrome with diffuse mesangial proliferative glomerulonephritis -N034 Chronic nephritic syndrome with diffuse endocapillary proliferative glomerulonephritis -N035 Chronic nephritic syndrome with diffuse mesangiocapillary glomerulonephritis -N036 Chronic nephritic syndrome with dense deposit disease -N037 Chronic nephritic syndrome with diffuse crescentic glomerulonephritis -N038 Chronic nephritic syndrome with other morphologic changes -N039 Chronic nephritic syndrome with unspecified morphologic changes -N040 Nephrotic syndrome with minor glomerular abnormality -N041 Nephrotic syndrome with focal and segmental glomerular lesions -N042 Nephrotic syndrome with diffuse membranous glomerulonephritis -N043 Nephrotic syndrome with diffuse mesangial proliferative glomerulonephritis -N044 Nephrotic syndrome with diffuse endocapillary proliferative glomerulonephritis -N045 Nephrotic syndrome with diffuse mesangiocapillary glomerulonephritis -N046 Nephrotic syndrome with dense deposit disease -N047 Nephrotic syndrome with diffuse crescentic glomerulonephritis -N048 Nephrotic syndrome with other morphologic changes -N049 Nephrotic syndrome with unspecified morphologic changes -N050 Unspecified nephritic syndrome with minor glomerular abnormality -N051 Unspecified nephritic syndrome with focal and segmental glomerular lesions -N052 Unspecified nephritic syndrome with diffuse membranous glomerulonephritis -N053 Unspecified nephritic syndrome with diffuse mesangial proliferative glomerulonephritis -N054 Unspecified nephritic syndrome with diffuse endocapillary proliferative glomerulonephritis -N055 Unspecified nephritic syndrome with diffuse mesangiocapillary glomerulonephritis -N056 Unspecified nephritic syndrome with dense deposit disease -N057 Unspecified nephritic syndrome with diffuse crescentic glomerulonephritis -N058 Unspecified nephritic syndrome with other morphologic changes -N059 Unspecified nephritic syndrome with unspecified morphologic changes -N060 Isolated proteinuria with minor glomerular abnormality -N061 Isolated proteinuria with focal and segmental glomerular lesions -N062 Isolated proteinuria with diffuse membranous glomerulonephritis -N063 Isolated proteinuria with diffuse mesangial proliferative glomerulonephritis -N064 Isolated proteinuria with diffuse endocapillary proliferative glomerulonephritis -N065 Isolated proteinuria with diffuse mesangiocapillary glomerulonephritis -N066 Isolated proteinuria with dense deposit disease -N067 Isolated proteinuria with diffuse crescentic glomerulonephritis -N068 Isolated proteinuria with other morphologic lesion -N069 Isolated proteinuria with unspecified morphologic lesion -N070 Hereditary nephropathy, not elsewhere classified with minor glomerular abnormality -N071 Hereditary nephropathy, not elsewhere classified with focal and segmental glomerular lesions -N072 Hereditary nephropathy, not elsewhere classified with diffuse membranous glomerulonephritis -N073 Hereditary nephropathy, not elsewhere classified with diffuse mesangial proliferative glomerulonephritis -N074 Hereditary nephropathy, not elsewhere classified with diffuse endocapillary proliferative glomerulonephritis -N075 Hereditary nephropathy, not elsewhere classified with diffuse mesangiocapillary glomerulonephritis -N076 Hereditary nephropathy, not elsewhere classified with dense deposit disease -N077 Hereditary nephropathy, not elsewhere classified with diffuse crescentic glomerulonephritis -N078 Hereditary nephropathy, not elsewhere classified with other morphologic lesions -N079 Hereditary nephropathy, not elsewhere classified with unspecified morphologic lesions -N08 Glomerular disorders in diseases classified elsewhere -N10 Acute tubulo-interstitial nephritis -N110 Nonobstructive reflux-associated chronic pyelonephritis -N111 Chronic obstructive pyelonephritis -N118 Other chronic tubulo-interstitial nephritis -N119 Chronic tubulo-interstitial nephritis, unspecified -N12 Tubulo-interstitial nephritis, not specified as acute or chronic -N131 Hydronephrosis with ureteral stricture, not elsewhere classified -N132 Hydronephrosis with renal and ureteral calculous obstruction -N1330 Unspecified hydronephrosis -N1339 Other hydronephrosis -N134 Hydroureter -N135 Crossing vessel and stricture of ureter without hydronephrosis -N136 Pyonephrosis -N1370 Vesicoureteral-reflux, unspecified -N1371 Vesicoureteral-reflux without reflux nephropathy -N13721 Vesicoureteral-reflux with reflux nephropathy without hydroureter, unilateral -N13722 Vesicoureteral-reflux with reflux nephropathy without hydroureter, bilateral -N13729 Vesicoureteral-reflux with reflux nephropathy without hydroureter, unspecified -N13731 Vesicoureteral-reflux with reflux nephropathy with hydroureter, unilateral -N13732 Vesicoureteral-reflux with reflux nephropathy with hydroureter, bilateral -N13739 Vesicoureteral-reflux with reflux nephropathy with hydroureter, unspecified -N138 Other obstructive and reflux uropathy -N139 Obstructive and reflux uropathy, unspecified -N140 Analgesic nephropathy -N141 Nephropathy induced by other drugs, medicaments and biological substances -N142 Nephropathy induced by unspecified drug, medicament or biological substance -N143 Nephropathy induced by heavy metals -N144 Toxic nephropathy, not elsewhere classified -N150 Balkan nephropathy -N151 Renal and perinephric abscess -N158 Other specified renal tubulo-interstitial diseases -N159 Renal tubulo-interstitial disease, unspecified -N16 Renal tubulo-interstitial disorders in diseases classified elsewhere -N170 Acute kidney failure with tubular necrosis -N171 Acute kidney failure with acute cortical necrosis -N172 Acute kidney failure with medullary necrosis -N178 Other acute kidney failure -N179 Acute kidney failure, unspecified -N181 Chronic kidney disease, stage 1 -N182 Chronic kidney disease, stage 2 (mild) -N183 Chronic kidney disease, stage 3 (moderate) -N184 Chronic kidney disease, stage 4 (severe) -N185 Chronic kidney disease, stage 5 -N186 End stage renal disease -N189 Chronic kidney disease, unspecified -N19 Unspecified kidney failure -N200 Calculus of kidney -N201 Calculus of ureter -N202 Calculus of kidney with calculus of ureter -N209 Urinary calculus, unspecified -N210 Calculus in bladder -N211 Calculus in urethra -N218 Other lower urinary tract calculus -N219 Calculus of lower urinary tract, unspecified -N22 Calculus of urinary tract in diseases classified elsewhere -N23 Unspecified renal colic -N250 Renal osteodystrophy -N251 Nephrogenic diabetes insipidus -N2581 Secondary hyperparathyroidism of renal origin -N2589 Other disorders resulting from impaired renal tubular function -N259 Disorder resulting from impaired renal tubular function, unspecified -N261 Atrophy of kidney (terminal) -N262 Page kidney -N269 Renal sclerosis, unspecified -N270 Small kidney, unilateral -N271 Small kidney, bilateral -N279 Small kidney, unspecified -N280 Ischemia and infarction of kidney -N281 Cyst of kidney, acquired -N2881 Hypertrophy of kidney -N2882 Megaloureter -N2883 Nephroptosis -N2884 Pyelitis cystica -N2885 Pyeloureteritis cystica -N2886 Ureteritis cystica -N2889 Other specified disorders of kidney and ureter -N289 Disorder of kidney and ureter, unspecified -N29 Other disorders of kidney and ureter in diseases classified elsewhere -N3000 Acute cystitis without hematuria -N3001 Acute cystitis with hematuria -N3010 Interstitial cystitis (chronic) without hematuria -N3011 Interstitial cystitis (chronic) with hematuria -N3020 Other chronic cystitis without hematuria -N3021 Other chronic cystitis with hematuria -N3030 Trigonitis without hematuria -N3031 Trigonitis with hematuria -N3040 Irradiation cystitis without hematuria -N3041 Irradiation cystitis with hematuria -N3080 Other cystitis without hematuria -N3081 Other cystitis with hematuria -N3090 Cystitis, unspecified without hematuria -N3091 Cystitis, unspecified with hematuria -N310 Uninhibited neuropathic bladder, not elsewhere classified -N311 Reflex neuropathic bladder, not elsewhere classified -N312 Flaccid neuropathic bladder, not elsewhere classified -N318 Other neuromuscular dysfunction of bladder -N319 Neuromuscular dysfunction of bladder, unspecified -N320 Bladder-neck obstruction -N321 Vesicointestinal fistula -N322 Vesical fistula, not elsewhere classified -N323 Diverticulum of bladder -N3281 Overactive bladder -N3289 Other specified disorders of bladder -N329 Bladder disorder, unspecified -N33 Bladder disorders in diseases classified elsewhere -N340 Urethral abscess -N341 Nonspecific urethritis -N342 Other urethritis -N343 Urethral syndrome, unspecified -N35010 Post-traumatic urethral stricture, male, meatal -N35011 Post-traumatic bulbous urethral stricture -N35012 Post-traumatic membranous urethral stricture -N35013 Post-traumatic anterior urethral stricture -N35014 Post-traumatic urethral stricture, male, unspecified -N35021 Urethral stricture due to childbirth -N35028 Other post-traumatic urethral stricture, female -N35111 Postinfective urethral stricture, not elsewhere classified, male, meatal -N35112 Postinfective bulbous urethral stricture, not elsewhere classified -N35113 Postinfective membranous urethral stricture, not elsewhere classified -N35114 Postinfective anterior urethral stricture, not elsewhere classified -N35119 Postinfective urethral stricture, not elsewhere classified, male, unspecified -N3512 Postinfective urethral stricture, not elsewhere classified, female -N358 Other urethral stricture -N359 Urethral stricture, unspecified -N360 Urethral fistula -N361 Urethral diverticulum -N362 Urethral caruncle -N3641 Hypermobility of urethra -N3642 Intrinsic sphincter deficiency (ISD) -N3643 Combined hypermobility of urethra and intrinsic sphincter deficiency -N3644 Muscular disorders of urethra -N365 Urethral false passage -N368 Other specified disorders of urethra -N369 Urethral disorder, unspecified -N37 Urethral disorders in diseases classified elsewhere -N390 Urinary tract infection, site not specified -N393 Stress incontinence (female) (male) -N3941 Urge incontinence -N3942 Incontinence without sensory awareness -N3943 Post-void dribbling -N3944 Nocturnal enuresis -N3945 Continuous leakage -N3946 Mixed incontinence -N39490 Overflow incontinence -N39498 Other specified urinary incontinence -N398 Other specified disorders of urinary system -N399 Disorder of urinary system, unspecified -N400 Enlarged prostate without lower urinary tract symptoms -N401 Enlarged prostate with lower urinary tract symptoms -N402 Nodular prostate without lower urinary tract symptoms -N403 Nodular prostate with lower urinary tract symptoms -N410 Acute prostatitis -N411 Chronic prostatitis -N412 Abscess of prostate -N413 Prostatocystitis -N414 Granulomatous prostatitis -N418 Other inflammatory diseases of prostate -N419 Inflammatory disease of prostate, unspecified -N420 Calculus of prostate -N421 Congestion and hemorrhage of prostate -N423 Dysplasia of prostate -N4281 Prostatodynia syndrome -N4282 Prostatosis syndrome -N4283 Cyst of prostate -N4289 Other specified disorders of prostate -N429 Disorder of prostate, unspecified -N430 Encysted hydrocele -N431 Infected hydrocele -N432 Other hydrocele -N433 Hydrocele, unspecified -N4340 Spermatocele of epididymis, unspecified -N4341 Spermatocele of epididymis, single -N4342 Spermatocele of epididymis, multiple -N4400 Torsion of testis, unspecified -N4401 Extravaginal torsion of spermatic cord -N4402 Intravaginal torsion of spermatic cord -N4403 Torsion of appendix testis -N4404 Torsion of appendix epididymis -N441 Cyst of tunica albuginea testis -N442 Benign cyst of testis -N448 Other noninflammatory disorders of the testis -N451 Epididymitis -N452 Orchitis -N453 Epididymo-orchitis -N454 Abscess of epididymis or testis -N4601 Organic azoospermia -N46021 Azoospermia due to drug therapy -N46022 Azoospermia due to infection -N46023 Azoospermia due to obstruction of efferent ducts -N46024 Azoospermia due to radiation -N46025 Azoospermia due to systemic disease -N46029 Azoospermia due to other extratesticular causes -N4611 Organic oligospermia -N46121 Oligospermia due to drug therapy -N46122 Oligospermia due to infection -N46123 Oligospermia due to obstruction of efferent ducts -N46124 Oligospermia due to radiation -N46125 Oligospermia due to systemic disease -N46129 Oligospermia due to other extratesticular causes -N468 Other male infertility -N469 Male infertility, unspecified -N470 Adherent prepuce, newborn -N471 Phimosis -N472 Paraphimosis -N473 Deficient foreskin -N474 Benign cyst of prepuce -N475 Adhesions of prepuce and glans penis -N476 Balanoposthitis -N477 Other inflammatory diseases of prepuce -N478 Other disorders of prepuce -N480 Leukoplakia of penis -N481 Balanitis -N4821 Abscess of corpus cavernosum and penis -N4822 Cellulitis of corpus cavernosum and penis -N4829 Other inflammatory disorders of penis -N4830 Priapism, unspecified -N4831 Priapism due to trauma -N4832 Priapism due to disease classified elsewhere -N4833 Priapism, drug-induced -N4839 Other priapism -N485 Ulcer of penis -N486 Induration penis plastica -N4881 Thrombosis of superficial vein of penis -N4882 Acquired torsion of penis -N4883 Acquired buried penis -N4889 Other specified disorders of penis -N489 Disorder of penis, unspecified -N490 Inflammatory disorders of seminal vesicle -N491 Inflammatory disorders of spermatic cord, tunica vaginalis and vas deferens -N492 Inflammatory disorders of scrotum -N493 Fournier gangrene -N498 Inflammatory disorders of other specified male genital organs -N499 Inflammatory disorder of unspecified male genital organ -N500 Atrophy of testis -N501 Vascular disorders of male genital organs -N503 Cyst of epididymis -N508 Other specified disorders of male genital organs -N509 Disorder of male genital organs, unspecified -N51 Disorders of male genital organs in diseases classified elsewhere -N5201 Erectile dysfunction due to arterial insufficiency -N5202 Corporo-venous occlusive erectile dysfunction -N5203 Combined arterial insufficiency and corporo-venous occlusive erectile dysfunction -N521 Erectile dysfunction due to diseases classified elsewhere -N522 Drug-induced erectile dysfunction -N5231 Erectile dysfunction following radical prostatectomy -N5232 Erectile dysfunction following radical cystectomy -N5233 Erectile dysfunction following urethral surgery -N5234 Erectile dysfunction following simple prostatectomy -N5239 Other post-surgical erectile dysfunction -N528 Other male erectile dysfunction -N529 Male erectile dysfunction, unspecified -N5311 Retarded ejaculation -N5312 Painful ejaculation -N5313 Anejaculatory orgasm -N5314 Retrograde ejaculation -N5319 Other ejaculatory dysfunction -N538 Other male sexual dysfunction -N539 Unspecified male sexual dysfunction -N6001 Solitary cyst of right breast -N6002 Solitary cyst of left breast -N6009 Solitary cyst of unspecified breast -N6011 Diffuse cystic mastopathy of right breast -N6012 Diffuse cystic mastopathy of left breast -N6019 Diffuse cystic mastopathy of unspecified breast -N6021 Fibroadenosis of right breast -N6022 Fibroadenosis of left breast -N6029 Fibroadenosis of unspecified breast -N6031 Fibrosclerosis of right breast -N6032 Fibrosclerosis of left breast -N6039 Fibrosclerosis of unspecified breast -N6041 Mammary duct ectasia of right breast -N6042 Mammary duct ectasia of left breast -N6049 Mammary duct ectasia of unspecified breast -N6081 Other benign mammary dysplasias of right breast -N6082 Other benign mammary dysplasias of left breast -N6089 Other benign mammary dysplasias of unspecified breast -N6091 Unspecified benign mammary dysplasia of right breast -N6092 Unspecified benign mammary dysplasia of left breast -N6099 Unspecified benign mammary dysplasia of unspecified breast -N61 Inflammatory disorders of breast -N62 Hypertrophy of breast -N63 Unspecified lump in breast -N640 Fissure and fistula of nipple -N641 Fat necrosis of breast -N642 Atrophy of breast -N643 Galactorrhea not associated with childbirth -N644 Mastodynia -N6451 Induration of breast -N6452 Nipple discharge -N6453 Retraction of nipple -N6459 Other signs and symptoms in breast -N6481 Ptosis of breast -N6482 Hypoplasia of breast -N6489 Other specified disorders of breast -N649 Disorder of breast, unspecified -N650 Deformity of reconstructed breast -N651 Disproportion of reconstructed breast -N7001 Acute salpingitis -N7002 Acute oophoritis -N7003 Acute salpingitis and oophoritis -N7011 Chronic salpingitis -N7012 Chronic oophoritis -N7013 Chronic salpingitis and oophoritis -N7091 Salpingitis, unspecified -N7092 Oophoritis, unspecified -N7093 Salpingitis and oophoritis, unspecified -N710 Acute inflammatory disease of uterus -N711 Chronic inflammatory disease of uterus -N719 Inflammatory disease of uterus, unspecified -N72 Inflammatory disease of cervix uteri -N730 Acute parametritis and pelvic cellulitis -N731 Chronic parametritis and pelvic cellulitis -N732 Unspecified parametritis and pelvic cellulitis -N733 Female acute pelvic peritonitis -N734 Female chronic pelvic peritonitis -N735 Female pelvic peritonitis, unspecified -N736 Female pelvic peritoneal adhesions (postinfective) -N738 Other specified female pelvic inflammatory diseases -N739 Female pelvic inflammatory disease, unspecified -N74 Female pelvic inflammatory disorders in diseases classified elsewhere -N750 Cyst of Bartholin's gland -N751 Abscess of Bartholin's gland -N758 Other diseases of Bartholin's gland -N759 Disease of Bartholin's gland, unspecified -N760 Acute vaginitis -N761 Subacute and chronic vaginitis -N762 Acute vulvitis -N763 Subacute and chronic vulvitis -N764 Abscess of vulva -N765 Ulceration of vagina -N766 Ulceration of vulva -N7681 Mucositis (ulcerative) of vagina and vulva -N7689 Other specified inflammation of vagina and vulva -N770 Ulceration of vulva in diseases classified elsewhere -N771 Vaginitis, vulvitis and vulvovaginitis in diseases classified elsewhere -N800 Endometriosis of uterus -N801 Endometriosis of ovary -N802 Endometriosis of fallopian tube -N803 Endometriosis of pelvic peritoneum -N804 Endometriosis of rectovaginal septum and vagina -N805 Endometriosis of intestine -N806 Endometriosis in cutaneous scar -N808 Other endometriosis -N809 Endometriosis, unspecified -N810 Urethrocele -N8110 Cystocele, unspecified -N8111 Cystocele, midline -N8112 Cystocele, lateral -N812 Incomplete uterovaginal prolapse -N813 Complete uterovaginal prolapse -N814 Uterovaginal prolapse, unspecified -N815 Vaginal enterocele -N816 Rectocele -N8181 Perineocele -N8182 Incompetence or weakening of pubocervical tissue -N8183 Incompetence or weakening of rectovaginal tissue -N8184 Pelvic muscle wasting -N8185 Cervical stump prolapse -N8189 Other female genital prolapse -N819 Female genital prolapse, unspecified -N820 Vesicovaginal fistula -N821 Other female urinary-genital tract fistulae -N822 Fistula of vagina to small intestine -N823 Fistula of vagina to large intestine -N824 Other female intestinal-genital tract fistulae -N825 Female genital tract-skin fistulae -N828 Other female genital tract fistulae -N829 Female genital tract fistula, unspecified -N830 Follicular cyst of ovary -N831 Corpus luteum cyst -N8320 Unspecified ovarian cysts -N8329 Other ovarian cysts -N8331 Acquired atrophy of ovary -N8332 Acquired atrophy of fallopian tube -N8333 Acquired atrophy of ovary and fallopian tube -N834 Prolapse and hernia of ovary and fallopian tube -N8351 Torsion of ovary and ovarian pedicle -N8352 Torsion of fallopian tube -N8353 Torsion of ovary, ovarian pedicle and fallopian tube -N836 Hematosalpinx -N837 Hematoma of broad ligament -N838 Other noninflammatory disorders of ovary, fallopian tube and broad ligament -N839 Noninflammatory disorder of ovary, fallopian tube and broad ligament, unspecified -N840 Polyp of corpus uteri -N841 Polyp of cervix uteri -N842 Polyp of vagina -N843 Polyp of vulva -N848 Polyp of other parts of female genital tract -N849 Polyp of female genital tract, unspecified -N8500 Endometrial hyperplasia, unspecified -N8501 Benign endometrial hyperplasia -N8502 Endometrial intraepithelial neoplasia [EIN] -N852 Hypertrophy of uterus -N853 Subinvolution of uterus -N854 Malposition of uterus -N855 Inversion of uterus -N856 Intrauterine synechiae -N857 Hematometra -N858 Other specified noninflammatory disorders of uterus -N859 Noninflammatory disorder of uterus, unspecified -N86 Erosion and ectropion of cervix uteri -N870 Mild cervical dysplasia -N871 Moderate cervical dysplasia -N879 Dysplasia of cervix uteri, unspecified -N880 Leukoplakia of cervix uteri -N881 Old laceration of cervix uteri -N882 Stricture and stenosis of cervix uteri -N883 Incompetence of cervix uteri -N884 Hypertrophic elongation of cervix uteri -N888 Other specified noninflammatory disorders of cervix uteri -N889 Noninflammatory disorder of cervix uteri, unspecified -N890 Mild vaginal dysplasia -N891 Moderate vaginal dysplasia -N893 Dysplasia of vagina, unspecified -N894 Leukoplakia of vagina -N895 Stricture and atresia of vagina -N896 Tight hymenal ring -N897 Hematocolpos -N898 Other specified noninflammatory disorders of vagina -N899 Noninflammatory disorder of vagina, unspecified -N900 Mild vulvar dysplasia -N901 Moderate vulvar dysplasia -N903 Dysplasia of vulva, unspecified -N904 Leukoplakia of vulva -N905 Atrophy of vulva -N906 Hypertrophy of vulva -N907 Vulvar cyst -N90810 Female genital mutilation status, unspecified -N90811 Female genital mutilation Type I status -N90812 Female genital mutilation Type II status -N90813 Female genital mutilation Type III status -N90818 Other female genital mutilation status -N9089 Other specified noninflammatory disorders of vulva and perineum -N909 Noninflammatory disorder of vulva and perineum, unspecified -N910 Primary amenorrhea -N911 Secondary amenorrhea -N912 Amenorrhea, unspecified -N913 Primary oligomenorrhea -N914 Secondary oligomenorrhea -N915 Oligomenorrhea, unspecified -N920 Excessive and frequent menstruation with regular cycle -N921 Excessive and frequent menstruation with irregular cycle -N922 Excessive menstruation at puberty -N923 Ovulation bleeding -N924 Excessive bleeding in the premenopausal period -N925 Other specified irregular menstruation -N926 Irregular menstruation, unspecified -N930 Postcoital and contact bleeding -N938 Other specified abnormal uterine and vaginal bleeding -N939 Abnormal uterine and vaginal bleeding, unspecified -N940 Mittelschmerz -N941 Dyspareunia -N942 Vaginismus -N943 Premenstrual tension syndrome -N944 Primary dysmenorrhea -N945 Secondary dysmenorrhea -N946 Dysmenorrhea, unspecified -N94810 Vulvar vestibulitis -N94818 Other vulvodynia -N94819 Vulvodynia, unspecified -N9489 Other specified conditions associated with female genital organs and menstrual cycle -N949 Unspecified condition associated with female genital organs and menstrual cycle -N950 Postmenopausal bleeding -N951 Menopausal and female climacteric states -N952 Postmenopausal atrophic vaginitis -N958 Other specified menopausal and perimenopausal disorders -N959 Unspecified menopausal and perimenopausal disorder -N96 Recurrent pregnancy loss -N970 Female infertility associated with anovulation -N971 Female infertility of tubal origin -N972 Female infertility of uterine origin -N978 Female infertility of other origin -N979 Female infertility, unspecified -N980 Infection associated with artificial insemination -N981 Hyperstimulation of ovaries -N982 Complications of attempted introduction of fertilized ovum following in vitro fertilization -N983 Complications of attempted introduction of embryo in embryo transfer -N988 Other complications associated with artificial fertilization -N989 Complication associated with artificial fertilization, unspecified -N990 Postprocedural (acute) (chronic) kidney failure -N99110 Postprocedural urethral stricture, male, meatal -N99111 Postprocedural bulbous urethral stricture -N99112 Postprocedural membranous urethral stricture -N99113 Postprocedural anterior urethral stricture -N99114 Postprocedural urethral stricture, male, unspecified -N9912 Postprocedural urethral stricture, female -N992 Postprocedural adhesions of vagina -N993 Prolapse of vaginal vault after hysterectomy -N994 Postprocedural pelvic peritoneal adhesions -N99510 Cystostomy hemorrhage -N99511 Cystostomy infection -N99512 Cystostomy malfunction -N99518 Other cystostomy complication -N99520 Hemorrhage of other external stoma of urinary tract -N99521 Infection of other external stoma of urinary tract -N99522 Malfunction of other external stoma of urinary tract -N99528 Other complication of other external stoma of urinary tract -N99530 Hemorrhage of other stoma of urinary tract -N99531 Infection of other stoma of urinary tract -N99532 Malfunction of other stoma of urinary tract -N99538 Other complication of other stoma of urinary tract -N9961 Intraoperative hemorrhage and hematoma of a genitourinary system organ or structure complicating a genitourinary system procedure -N9962 Intraoperative hemorrhage and hematoma of a genitourinary system organ or structure complicating other procedure -N9971 Accidental puncture and laceration of a genitourinary system organ or structure during a genitourinary system procedure -N9972 Accidental puncture and laceration of a genitourinary system organ or structure during other procedure -N9981 Other intraoperative complications of genitourinary system -N99820 Postprocedural hemorrhage and hematoma of a genitourinary system organ or structure following a genitourinary system procedure -N99821 Postprocedural hemorrhage and hematoma of a genitourinary system organ or structure following other procedure -N9983 Residual ovary syndrome -N9989 Other postprocedural complications and disorders of genitourinary system -O000 Abdominal pregnancy -O001 Tubal pregnancy -O002 Ovarian pregnancy -O008 Other ectopic pregnancy -O009 Ectopic pregnancy, unspecified -O010 Classical hydatidiform mole -O011 Incomplete and partial hydatidiform mole -O019 Hydatidiform mole, unspecified -O020 Blighted ovum and nonhydatidiform mole -O021 Missed abortion -O0281 Inappropriate change in quantitative human chorionic gonadotropin (hCG) in early pregnancy -O0289 Other abnormal products of conception -O029 Abnormal product of conception, unspecified -O030 Genital tract and pelvic infection following incomplete spontaneous abortion -O031 Delayed or excessive hemorrhage following incomplete spontaneous abortion -O032 Embolism following incomplete spontaneous abortion -O0330 Unspecified complication following incomplete spontaneous abortion -O0331 Shock following incomplete spontaneous abortion -O0332 Renal failure following incomplete spontaneous abortion -O0333 Metabolic disorder following incomplete spontaneous abortion -O0334 Damage to pelvic organs following incomplete spontaneous abortion -O0335 Other venous complications following incomplete spontaneous abortion -O0336 Cardiac arrest following incomplete spontaneous abortion -O0337 Sepsis following incomplete spontaneous abortion -O0338 Urinary tract infection following incomplete spontaneous abortion -O0339 Incomplete spontaneous abortion with other complications -O034 Incomplete spontaneous abortion without complication -O035 Genital tract and pelvic infection following complete or unspecified spontaneous abortion -O036 Delayed or excessive hemorrhage following complete or unspecified spontaneous abortion -O037 Embolism following complete or unspecified spontaneous abortion -O0380 Unspecified complication following complete or unspecified spontaneous abortion -O0381 Shock following complete or unspecified spontaneous abortion -O0382 Renal failure following complete or unspecified spontaneous abortion -O0383 Metabolic disorder following complete or unspecified spontaneous abortion -O0384 Damage to pelvic organs following complete or unspecified spontaneous abortion -O0385 Other venous complications following complete or unspecified spontaneous abortion -O0386 Cardiac arrest following complete or unspecified spontaneous abortion -O0387 Sepsis following complete or unspecified spontaneous abortion -O0388 Urinary tract infection following complete or unspecified spontaneous abortion -O0389 Complete or unspecified spontaneous abortion with other complications -O039 Complete or unspecified spontaneous abortion without complication -O045 Genital tract and pelvic infection following (induced) termination of pregnancy -O046 Delayed or excessive hemorrhage following (induced) termination of pregnancy -O047 Embolism following (induced) termination of pregnancy -O0480 (Induced) termination of pregnancy with unspecified complications -O0481 Shock following (induced) termination of pregnancy -O0482 Renal failure following (induced) termination of pregnancy -O0483 Metabolic disorder following (induced) termination of pregnancy -O0484 Damage to pelvic organs following (induced) termination of pregnancy -O0485 Other venous complications following (induced) termination of pregnancy -O0486 Cardiac arrest following (induced) termination of pregnancy -O0487 Sepsis following (induced) termination of pregnancy -O0488 Urinary tract infection following (induced) termination of pregnancy -O0489 (Induced) termination of pregnancy with other complications -O070 Genital tract and pelvic infection following failed attempted termination of pregnancy -O071 Delayed or excessive hemorrhage following failed attempted termination of pregnancy -O072 Embolism following failed attempted termination of pregnancy -O0730 Failed attempted termination of pregnancy with unspecified complications -O0731 Shock following failed attempted termination of pregnancy -O0732 Renal failure following failed attempted termination of pregnancy -O0733 Metabolic disorder following failed attempted termination of pregnancy -O0734 Damage to pelvic organs following failed attempted termination of pregnancy -O0735 Other venous complications following failed attempted termination of pregnancy -O0736 Cardiac arrest following failed attempted termination of pregnancy -O0737 Sepsis following failed attempted termination of pregnancy -O0738 Urinary tract infection following failed attempted termination of pregnancy -O0739 Failed attempted termination of pregnancy with other complications -O074 Failed attempted termination of pregnancy without complication -O080 Genital tract and pelvic infection following ectopic and molar pregnancy -O081 Delayed or excessive hemorrhage following ectopic and molar pregnancy -O082 Embolism following ectopic and molar pregnancy -O083 Shock following ectopic and molar pregnancy -O084 Renal failure following ectopic and molar pregnancy -O085 Metabolic disorders following an ectopic and molar pregnancy -O086 Damage to pelvic organs and tissues following an ectopic and molar pregnancy -O087 Other venous complications following an ectopic and molar pregnancy -O0881 Cardiac arrest following an ectopic and molar pregnancy -O0882 Sepsis following ectopic and molar pregnancy -O0883 Urinary tract infection following an ectopic and molar pregnancy -O0889 Other complications following an ectopic and molar pregnancy -O089 Unspecified complication following an ectopic and molar pregnancy -O0900 Supervision of pregnancy with history of infertility, unspecified trimester -O0901 Supervision of pregnancy with history of infertility, first trimester -O0902 Supervision of pregnancy with history of infertility, second trimester -O0903 Supervision of pregnancy with history of infertility, third trimester -O0910 Supervision of pregnancy with history of ectopic or molar pregnancy, unspecified trimester -O0911 Supervision of pregnancy with history of ectopic or molar pregnancy, first trimester -O0912 Supervision of pregnancy with history of ectopic or molar pregnancy, second trimester -O0913 Supervision of pregnancy with history of ectopic or molar pregnancy, third trimester -O09211 Supervision of pregnancy with history of pre-term labor, first trimester -O09212 Supervision of pregnancy with history of pre-term labor, second trimester -O09213 Supervision of pregnancy with history of pre-term labor, third trimester -O09219 Supervision of pregnancy with history of pre-term labor, unspecified trimester -O09291 Supervision of pregnancy with other poor reproductive or obstetric history, first trimester -O09292 Supervision of pregnancy with other poor reproductive or obstetric history, second trimester -O09293 Supervision of pregnancy with other poor reproductive or obstetric history, third trimester -O09299 Supervision of pregnancy with other poor reproductive or obstetric history, unspecified trimester -O0930 Supervision of pregnancy with insufficient antenatal care, unspecified trimester -O0931 Supervision of pregnancy with insufficient antenatal care, first trimester -O0932 Supervision of pregnancy with insufficient antenatal care, second trimester -O0933 Supervision of pregnancy with insufficient antenatal care, third trimester -O0940 Supervision of pregnancy with grand multiparity, unspecified trimester -O0941 Supervision of pregnancy with grand multiparity, first trimester -O0942 Supervision of pregnancy with grand multiparity, second trimester -O0943 Supervision of pregnancy with grand multiparity, third trimester -O09511 Supervision of elderly primigravida, first trimester -O09512 Supervision of elderly primigravida, second trimester -O09513 Supervision of elderly primigravida, third trimester -O09519 Supervision of elderly primigravida, unspecified trimester -O09521 Supervision of elderly multigravida, first trimester -O09522 Supervision of elderly multigravida, second trimester -O09523 Supervision of elderly multigravida, third trimester -O09529 Supervision of elderly multigravida, unspecified trimester -O09611 Supervision of young primigravida, first trimester -O09612 Supervision of young primigravida, second trimester -O09613 Supervision of young primigravida, third trimester -O09619 Supervision of young primigravida, unspecified trimester -O09621 Supervision of young multigravida, first trimester -O09622 Supervision of young multigravida, second trimester -O09623 Supervision of young multigravida, third trimester -O09629 Supervision of young multigravida, unspecified trimester -O0970 Supervision of high risk pregnancy due to social problems, unspecified trimester -O0971 Supervision of high risk pregnancy due to social problems, first trimester -O0972 Supervision of high risk pregnancy due to social problems, second trimester -O0973 Supervision of high risk pregnancy due to social problems, third trimester -O09811 Supervision of pregnancy resulting from assisted reproductive technology, first trimester -O09812 Supervision of pregnancy resulting from assisted reproductive technology, second trimester -O09813 Supervision of pregnancy resulting from assisted reproductive technology, third trimester -O09819 Supervision of pregnancy resulting from assisted reproductive technology, unspecified trimester -O09821 Supervision of pregnancy with history of in utero procedure during previous pregnancy, first trimester -O09822 Supervision of pregnancy with history of in utero procedure during previous pregnancy, second trimester -O09823 Supervision of pregnancy with history of in utero procedure during previous pregnancy, third trimester -O09829 Supervision of pregnancy with history of in utero procedure during previous pregnancy, unspecified trimester -O09891 Supervision of other high risk pregnancies, first trimester -O09892 Supervision of other high risk pregnancies, second trimester -O09893 Supervision of other high risk pregnancies, third trimester -O09899 Supervision of other high risk pregnancies, unspecified trimester -O0990 Supervision of high risk pregnancy, unspecified, unspecified trimester -O0991 Supervision of high risk pregnancy, unspecified, first trimester -O0992 Supervision of high risk pregnancy, unspecified, second trimester -O0993 Supervision of high risk pregnancy, unspecified, third trimester -O10011 Pre-existing essential hypertension complicating pregnancy, first trimester -O10012 Pre-existing essential hypertension complicating pregnancy, second trimester -O10013 Pre-existing essential hypertension complicating pregnancy, third trimester -O10019 Pre-existing essential hypertension complicating pregnancy, unspecified trimester -O1002 Pre-existing essential hypertension complicating childbirth -O1003 Pre-existing essential hypertension complicating the puerperium -O10111 Pre-existing hypertensive heart disease complicating pregnancy, first trimester -O10112 Pre-existing hypertensive heart disease complicating pregnancy, second trimester -O10113 Pre-existing hypertensive heart disease complicating pregnancy, third trimester -O10119 Pre-existing hypertensive heart disease complicating pregnancy, unspecified trimester -O1012 Pre-existing hypertensive heart disease complicating childbirth -O1013 Pre-existing hypertensive heart disease complicating the puerperium -O10211 Pre-existing hypertensive chronic kidney disease complicating pregnancy, first trimester -O10212 Pre-existing hypertensive chronic kidney disease complicating pregnancy, second trimester -O10213 Pre-existing hypertensive chronic kidney disease complicating pregnancy, third trimester -O10219 Pre-existing hypertensive chronic kidney disease complicating pregnancy, unspecified trimester -O1022 Pre-existing hypertensive chronic kidney disease complicating childbirth -O1023 Pre-existing hypertensive chronic kidney disease complicating the puerperium -O10311 Pre-existing hypertensive heart and chronic kidney disease complicating pregnancy, first trimester -O10312 Pre-existing hypertensive heart and chronic kidney disease complicating pregnancy, second trimester -O10313 Pre-existing hypertensive heart and chronic kidney disease complicating pregnancy, third trimester -O10319 Pre-existing hypertensive heart and chronic kidney disease complicating pregnancy, unspecified trimester -O1032 Pre-existing hypertensive heart and chronic kidney disease complicating childbirth -O1033 Pre-existing hypertensive heart and chronic kidney disease complicating the puerperium -O10411 Pre-existing secondary hypertension complicating pregnancy, first trimester -O10412 Pre-existing secondary hypertension complicating pregnancy, second trimester -O10413 Pre-existing secondary hypertension complicating pregnancy, third trimester -O10419 Pre-existing secondary hypertension complicating pregnancy, unspecified trimester -O1042 Pre-existing secondary hypertension complicating childbirth -O1043 Pre-existing secondary hypertension complicating the puerperium -O10911 Unspecified pre-existing hypertension complicating pregnancy, first trimester -O10912 Unspecified pre-existing hypertension complicating pregnancy, second trimester -O10913 Unspecified pre-existing hypertension complicating pregnancy, third trimester -O10919 Unspecified pre-existing hypertension complicating pregnancy, unspecified trimester -O1092 Unspecified pre-existing hypertension complicating childbirth -O1093 Unspecified pre-existing hypertension complicating the puerperium -O111 Pre-existing hypertension with pre-eclampsia, first trimester -O112 Pre-existing hypertension with pre-eclampsia, second trimester -O113 Pre-existing hypertension with pre-eclampsia, third trimester -O119 Pre-existing hypertension with pre-eclampsia, unspecified trimester -O1200 Gestational edema, unspecified trimester -O1201 Gestational edema, first trimester -O1202 Gestational edema, second trimester -O1203 Gestational edema, third trimester -O1210 Gestational proteinuria, unspecified trimester -O1211 Gestational proteinuria, first trimester -O1212 Gestational proteinuria, second trimester -O1213 Gestational proteinuria, third trimester -O1220 Gestational edema with proteinuria, unspecified trimester -O1221 Gestational edema with proteinuria, first trimester -O1222 Gestational edema with proteinuria, second trimester -O1223 Gestational edema with proteinuria, third trimester -O131 Gestational [pregnancy-induced] hypertension without significant proteinuria, first trimester -O132 Gestational [pregnancy-induced] hypertension without significant proteinuria, second trimester -O133 Gestational [pregnancy-induced] hypertension without significant proteinuria, third trimester -O139 Gestational [pregnancy-induced] hypertension without significant proteinuria, unspecified trimester -O1400 Mild to moderate pre-eclampsia, unspecified trimester -O1402 Mild to moderate pre-eclampsia, second trimester -O1403 Mild to moderate pre-eclampsia, third trimester -O1410 Severe pre-eclampsia, unspecified trimester -O1412 Severe pre-eclampsia, second trimester -O1413 Severe pre-eclampsia, third trimester -O1420 HELLP syndrome (HELLP), unspecified trimester -O1422 HELLP syndrome (HELLP), second trimester -O1423 HELLP syndrome (HELLP), third trimester -O1490 Unspecified pre-eclampsia, unspecified trimester -O1492 Unspecified pre-eclampsia, second trimester -O1493 Unspecified pre-eclampsia, third trimester -O1500 Eclampsia in pregnancy, unspecified trimester -O1502 Eclampsia in pregnancy, second trimester -O1503 Eclampsia in pregnancy, third trimester -O151 Eclampsia in labor -O152 Eclampsia in the puerperium -O159 Eclampsia, unspecified as to time period -O161 Unspecified maternal hypertension, first trimester -O162 Unspecified maternal hypertension, second trimester -O163 Unspecified maternal hypertension, third trimester -O169 Unspecified maternal hypertension, unspecified trimester -O200 Threatened abortion -O208 Other hemorrhage in early pregnancy -O209 Hemorrhage in early pregnancy, unspecified -O210 Mild hyperemesis gravidarum -O211 Hyperemesis gravidarum with metabolic disturbance -O212 Late vomiting of pregnancy -O218 Other vomiting complicating pregnancy -O219 Vomiting of pregnancy, unspecified -O2200 Varicose veins of lower extremity in pregnancy, unspecified trimester -O2201 Varicose veins of lower extremity in pregnancy, first trimester -O2202 Varicose veins of lower extremity in pregnancy, second trimester -O2203 Varicose veins of lower extremity in pregnancy, third trimester -O2210 Genital varices in pregnancy, unspecified trimester -O2211 Genital varices in pregnancy, first trimester -O2212 Genital varices in pregnancy, second trimester -O2213 Genital varices in pregnancy, third trimester -O2220 Superficial thrombophlebitis in pregnancy, unspecified trimester -O2221 Superficial thrombophlebitis in pregnancy, first trimester -O2222 Superficial thrombophlebitis in pregnancy, second trimester -O2223 Superficial thrombophlebitis in pregnancy, third trimester -O2230 Deep phlebothrombosis in pregnancy, unspecified trimester -O2231 Deep phlebothrombosis in pregnancy, first trimester -O2232 Deep phlebothrombosis in pregnancy, second trimester -O2233 Deep phlebothrombosis in pregnancy, third trimester -O2240 Hemorrhoids in pregnancy, unspecified trimester -O2241 Hemorrhoids in pregnancy, first trimester -O2242 Hemorrhoids in pregnancy, second trimester -O2243 Hemorrhoids in pregnancy, third trimester -O2250 Cerebral venous thrombosis in pregnancy, unspecified trimester -O2251 Cerebral venous thrombosis in pregnancy, first trimester -O2252 Cerebral venous thrombosis in pregnancy, second trimester -O2253 Cerebral venous thrombosis in pregnancy, third trimester -O228X1 Other venous complications in pregnancy, first trimester -O228X2 Other venous complications in pregnancy, second trimester -O228X3 Other venous complications in pregnancy, third trimester -O228X9 Other venous complications in pregnancy, unspecified trimester -O2290 Venous complication in pregnancy, unspecified, unspecified trimester -O2291 Venous complication in pregnancy, unspecified, first trimester -O2292 Venous complication in pregnancy, unspecified, second trimester -O2293 Venous complication in pregnancy, unspecified, third trimester -O2300 Infections of kidney in pregnancy, unspecified trimester -O2301 Infections of kidney in pregnancy, first trimester -O2302 Infections of kidney in pregnancy, second trimester -O2303 Infections of kidney in pregnancy, third trimester -O2310 Infections of bladder in pregnancy, unspecified trimester -O2311 Infections of bladder in pregnancy, first trimester -O2312 Infections of bladder in pregnancy, second trimester -O2313 Infections of bladder in pregnancy, third trimester -O2320 Infections of urethra in pregnancy, unspecified trimester -O2321 Infections of urethra in pregnancy, first trimester -O2322 Infections of urethra in pregnancy, second trimester -O2323 Infections of urethra in pregnancy, third trimester -O2330 Infections of other parts of urinary tract in pregnancy, unspecified trimester -O2331 Infections of other parts of urinary tract in pregnancy, first trimester -O2332 Infections of other parts of urinary tract in pregnancy, second trimester -O2333 Infections of other parts of urinary tract in pregnancy, third trimester -O2340 Unspecified infection of urinary tract in pregnancy, unspecified trimester -O2341 Unspecified infection of urinary tract in pregnancy, first trimester -O2342 Unspecified infection of urinary tract in pregnancy, second trimester -O2343 Unspecified infection of urinary tract in pregnancy, third trimester -O23511 Infections of cervix in pregnancy, first trimester -O23512 Infections of cervix in pregnancy, second trimester -O23513 Infections of cervix in pregnancy, third trimester -O23519 Infections of cervix in pregnancy, unspecified trimester -O23521 Salpingo-oophoritis in pregnancy, first trimester -O23522 Salpingo-oophoritis in pregnancy, second trimester -O23523 Salpingo-oophoritis in pregnancy, third trimester -O23529 Salpingo-oophoritis in pregnancy, unspecified trimester -O23591 Infection of other part of genital tract in pregnancy, first trimester -O23592 Infection of other part of genital tract in pregnancy, second trimester -O23593 Infection of other part of genital tract in pregnancy, third trimester -O23599 Infection of other part of genital tract in pregnancy, unspecified trimester -O2390 Unspecified genitourinary tract infection in pregnancy, unspecified trimester -O2391 Unspecified genitourinary tract infection in pregnancy, first trimester -O2392 Unspecified genitourinary tract infection in pregnancy, second trimester -O2393 Unspecified genitourinary tract infection in pregnancy, third trimester -O24011 Pre-existing diabetes mellitus, type 1, in pregnancy, first trimester -O24012 Pre-existing diabetes mellitus, type 1, in pregnancy, second trimester -O24013 Pre-existing diabetes mellitus, type 1, in pregnancy, third trimester -O24019 Pre-existing diabetes mellitus, type 1, in pregnancy, unspecified trimester -O2402 Pre-existing diabetes mellitus, type 1, in childbirth -O2403 Pre-existing diabetes mellitus, type 1, in the puerperium -O24111 Pre-existing diabetes mellitus, type 2, in pregnancy, first trimester -O24112 Pre-existing diabetes mellitus, type 2, in pregnancy, second trimester -O24113 Pre-existing diabetes mellitus, type 2, in pregnancy, third trimester -O24119 Pre-existing diabetes mellitus, type 2, in pregnancy, unspecified trimester -O2412 Pre-existing diabetes mellitus, type 2, in childbirth -O2413 Pre-existing diabetes mellitus, type 2, in the puerperium -O24311 Unspecified pre-existing diabetes mellitus in pregnancy, first trimester -O24312 Unspecified pre-existing diabetes mellitus in pregnancy, second trimester -O24313 Unspecified pre-existing diabetes mellitus in pregnancy, third trimester -O24319 Unspecified pre-existing diabetes mellitus in pregnancy, unspecified trimester -O2432 Unspecified pre-existing diabetes mellitus in childbirth -O2433 Unspecified pre-existing diabetes mellitus in the puerperium -O24410 Gestational diabetes mellitus in pregnancy, diet controlled -O24414 Gestational diabetes mellitus in pregnancy, insulin controlled -O24419 Gestational diabetes mellitus in pregnancy, unspecified control -O24420 Gestational diabetes mellitus in childbirth, diet controlled -O24424 Gestational diabetes mellitus in childbirth, insulin controlled -O24429 Gestational diabetes mellitus in childbirth, unspecified control -O24430 Gestational diabetes mellitus in the puerperium, diet controlled -O24434 Gestational diabetes mellitus in the puerperium, insulin controlled -O24439 Gestational diabetes mellitus in the puerperium, unspecified control -O24811 Other pre-existing diabetes mellitus in pregnancy, first trimester -O24812 Other pre-existing diabetes mellitus in pregnancy, second trimester -O24813 Other pre-existing diabetes mellitus in pregnancy, third trimester -O24819 Other pre-existing diabetes mellitus in pregnancy, unspecified trimester -O2482 Other pre-existing diabetes mellitus in childbirth -O2483 Other pre-existing diabetes mellitus in the puerperium -O24911 Unspecified diabetes mellitus in pregnancy, first trimester -O24912 Unspecified diabetes mellitus in pregnancy, second trimester -O24913 Unspecified diabetes mellitus in pregnancy, third trimester -O24919 Unspecified diabetes mellitus in pregnancy, unspecified trimester -O2492 Unspecified diabetes mellitus in childbirth -O2493 Unspecified diabetes mellitus in the puerperium -O2510 Malnutrition in pregnancy, unspecified trimester -O2511 Malnutrition in pregnancy, first trimester -O2512 Malnutrition in pregnancy, second trimester -O2513 Malnutrition in pregnancy, third trimester -O252 Malnutrition in childbirth -O253 Malnutrition in the puerperium -O2600 Excessive weight gain in pregnancy, unspecified trimester -O2601 Excessive weight gain in pregnancy, first trimester -O2602 Excessive weight gain in pregnancy, second trimester -O2603 Excessive weight gain in pregnancy, third trimester -O2610 Low weight gain in pregnancy, unspecified trimester -O2611 Low weight gain in pregnancy, first trimester -O2612 Low weight gain in pregnancy, second trimester -O2613 Low weight gain in pregnancy, third trimester -O2620 Pregnancy care for patient with recurrent pregnancy loss, unspecified trimester -O2621 Pregnancy care for patient with recurrent pregnancy loss, first trimester -O2622 Pregnancy care for patient with recurrent pregnancy loss, second trimester -O2623 Pregnancy care for patient with recurrent pregnancy loss, third trimester -O2630 Retained intrauterine contraceptive device in pregnancy, unspecified trimester -O2631 Retained intrauterine contraceptive device in pregnancy, first trimester -O2632 Retained intrauterine contraceptive device in pregnancy, second trimester -O2633 Retained intrauterine contraceptive device in pregnancy, third trimester -O2640 Herpes gestationis, unspecified trimester -O2641 Herpes gestationis, first trimester -O2642 Herpes gestationis, second trimester -O2643 Herpes gestationis, third trimester -O2650 Maternal hypotension syndrome, unspecified trimester -O2651 Maternal hypotension syndrome, first trimester -O2652 Maternal hypotension syndrome, second trimester -O2653 Maternal hypotension syndrome, third trimester -O26611 Liver and biliary tract disorders in pregnancy, first trimester -O26612 Liver and biliary tract disorders in pregnancy, second trimester -O26613 Liver and biliary tract disorders in pregnancy, third trimester -O26619 Liver and biliary tract disorders in pregnancy, unspecified trimester -O2662 Liver and biliary tract disorders in childbirth -O2663 Liver and biliary tract disorders in the puerperium -O26711 Subluxation of symphysis (pubis) in pregnancy, first trimester -O26712 Subluxation of symphysis (pubis) in pregnancy, second trimester -O26713 Subluxation of symphysis (pubis) in pregnancy, third trimester -O26719 Subluxation of symphysis (pubis) in pregnancy, unspecified trimester -O2672 Subluxation of symphysis (pubis) in childbirth -O2673 Subluxation of symphysis (pubis) in the puerperium -O26811 Pregnancy related exhaustion and fatigue, first trimester -O26812 Pregnancy related exhaustion and fatigue, second trimester -O26813 Pregnancy related exhaustion and fatigue, third trimester -O26819 Pregnancy related exhaustion and fatigue, unspecified trimester -O26821 Pregnancy related peripheral neuritis, first trimester -O26822 Pregnancy related peripheral neuritis, second trimester -O26823 Pregnancy related peripheral neuritis, third trimester -O26829 Pregnancy related peripheral neuritis, unspecified trimester -O26831 Pregnancy related renal disease, first trimester -O26832 Pregnancy related renal disease, second trimester -O26833 Pregnancy related renal disease, third trimester -O26839 Pregnancy related renal disease, unspecified trimester -O26841 Uterine size-date discrepancy, first trimester -O26842 Uterine size-date discrepancy, second trimester -O26843 Uterine size-date discrepancy, third trimester -O26849 Uterine size-date discrepancy, unspecified trimester -O26851 Spotting complicating pregnancy, first trimester -O26852 Spotting complicating pregnancy, second trimester -O26853 Spotting complicating pregnancy, third trimester -O26859 Spotting complicating pregnancy, unspecified trimester -O2686 Pruritic urticarial papules and plaques of pregnancy (PUPPP) -O26872 Cervical shortening, second trimester -O26873 Cervical shortening, third trimester -O26879 Cervical shortening, unspecified trimester -O26891 Other specified pregnancy related conditions, first trimester -O26892 Other specified pregnancy related conditions, second trimester -O26893 Other specified pregnancy related conditions, third trimester -O26899 Other specified pregnancy related conditions, unspecified trimester -O2690 Pregnancy related conditions, unspecified, unspecified trimester -O2691 Pregnancy related conditions, unspecified, first trimester -O2692 Pregnancy related conditions, unspecified, second trimester -O2693 Pregnancy related conditions, unspecified, third trimester -O280 Abnormal hematological finding on antenatal screening of mother -O281 Abnormal biochemical finding on antenatal screening of mother -O282 Abnormal cytological finding on antenatal screening of mother -O283 Abnormal ultrasonic finding on antenatal screening of mother -O284 Abnormal radiological finding on antenatal screening of mother -O285 Abnormal chromosomal and genetic finding on antenatal screening of mother -O288 Other abnormal findings on antenatal screening of mother -O289 Unspecified abnormal findings on antenatal screening of mother -O29011 Aspiration pneumonitis due to anesthesia during pregnancy, first trimester -O29012 Aspiration pneumonitis due to anesthesia during pregnancy, second trimester -O29013 Aspiration pneumonitis due to anesthesia during pregnancy, third trimester -O29019 Aspiration pneumonitis due to anesthesia during pregnancy, unspecified trimester -O29021 Pressure collapse of lung due to anesthesia during pregnancy, first trimester -O29022 Pressure collapse of lung due to anesthesia during pregnancy, second trimester -O29023 Pressure collapse of lung due to anesthesia during pregnancy, third trimester -O29029 Pressure collapse of lung due to anesthesia during pregnancy, unspecified trimester -O29091 Other pulmonary complications of anesthesia during pregnancy, first trimester -O29092 Other pulmonary complications of anesthesia during pregnancy, second trimester -O29093 Other pulmonary complications of anesthesia during pregnancy, third trimester -O29099 Other pulmonary complications of anesthesia during pregnancy, unspecified trimester -O29111 Cardiac arrest due to anesthesia during pregnancy, first trimester -O29112 Cardiac arrest due to anesthesia during pregnancy, second trimester -O29113 Cardiac arrest due to anesthesia during pregnancy, third trimester -O29119 Cardiac arrest due to anesthesia during pregnancy, unspecified trimester -O29121 Cardiac failure due to anesthesia during pregnancy, first trimester -O29122 Cardiac failure due to anesthesia during pregnancy, second trimester -O29123 Cardiac failure due to anesthesia during pregnancy, third trimester -O29129 Cardiac failure due to anesthesia during pregnancy, unspecified trimester -O29191 Other cardiac complications of anesthesia during pregnancy, first trimester -O29192 Other cardiac complications of anesthesia during pregnancy, second trimester -O29193 Other cardiac complications of anesthesia during pregnancy, third trimester -O29199 Other cardiac complications of anesthesia during pregnancy, unspecified trimester -O29211 Cerebral anoxia due to anesthesia during pregnancy, first trimester -O29212 Cerebral anoxia due to anesthesia during pregnancy, second trimester -O29213 Cerebral anoxia due to anesthesia during pregnancy, third trimester -O29219 Cerebral anoxia due to anesthesia during pregnancy, unspecified trimester -O29291 Other central nervous system complications of anesthesia during pregnancy, first trimester -O29292 Other central nervous system complications of anesthesia during pregnancy, second trimester -O29293 Other central nervous system complications of anesthesia during pregnancy, third trimester -O29299 Other central nervous system complications of anesthesia during pregnancy, unspecified trimester -O293X1 Toxic reaction to local anesthesia during pregnancy, first trimester -O293X2 Toxic reaction to local anesthesia during pregnancy, second trimester -O293X3 Toxic reaction to local anesthesia during pregnancy, third trimester -O293X9 Toxic reaction to local anesthesia during pregnancy, unspecified trimester -O2940 Spinal and epidural anesthesia induced headache during pregnancy, unspecified trimester -O2941 Spinal and epidural anesthesia induced headache during pregnancy, first trimester -O2942 Spinal and epidural anesthesia induced headache during pregnancy, second trimester -O2943 Spinal and epidural anesthesia induced headache during pregnancy, third trimester -O295X1 Other complications of spinal and epidural anesthesia during pregnancy, first trimester -O295X2 Other complications of spinal and epidural anesthesia during pregnancy, second trimester -O295X3 Other complications of spinal and epidural anesthesia during pregnancy, third trimester -O295X9 Other complications of spinal and epidural anesthesia during pregnancy, unspecified trimester -O2960 Failed or difficult intubation for anesthesia during pregnancy, unspecified trimester -O2961 Failed or difficult intubation for anesthesia during pregnancy, first trimester -O2962 Failed or difficult intubation for anesthesia during pregnancy, second trimester -O2963 Failed or difficult intubation for anesthesia during pregnancy, third trimester -O298X1 Other complications of anesthesia during pregnancy, first trimester -O298X2 Other complications of anesthesia during pregnancy, second trimester -O298X3 Other complications of anesthesia during pregnancy, third trimester -O298X9 Other complications of anesthesia during pregnancy, unspecified trimester -O2990 Unspecified complication of anesthesia during pregnancy, unspecified trimester -O2991 Unspecified complication of anesthesia during pregnancy, first trimester -O2992 Unspecified complication of anesthesia during pregnancy, second trimester -O2993 Unspecified complication of anesthesia during pregnancy, third trimester -O30001 Twin pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, first trimester -O30002 Twin pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, second trimester -O30003 Twin pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, third trimester -O30009 Twin pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, unspecified trimester -O30011 Twin pregnancy, monochorionic/monoamniotic, first trimester -O30012 Twin pregnancy, monochorionic/monoamniotic, second trimester -O30013 Twin pregnancy, monochorionic/monoamniotic, third trimester -O30019 Twin pregnancy, monochorionic/monoamniotic, unspecified trimester -O30021 Conjoined twin pregnancy, first trimester -O30022 Conjoined twin pregnancy, second trimester -O30023 Conjoined twin pregnancy, third trimester -O30029 Conjoined twin pregnancy, unspecified trimester -O30031 Twin pregnancy, monochorionic/diamniotic, first trimester -O30032 Twin pregnancy, monochorionic/diamniotic, second trimester -O30033 Twin pregnancy, monochorionic/diamniotic, third trimester -O30039 Twin pregnancy, monochorionic/diamniotic, unspecified trimester -O30041 Twin pregnancy, dichorionic/diamniotic, first trimester -O30042 Twin pregnancy, dichorionic/diamniotic, second trimester -O30043 Twin pregnancy, dichorionic/diamniotic, third trimester -O30049 Twin pregnancy, dichorionic/diamniotic, unspecified trimester -O30091 Twin pregnancy, unable to determine number of placenta and number of amniotic sacs, first trimester -O30092 Twin pregnancy, unable to determine number of placenta and number of amniotic sacs, second trimester -O30093 Twin pregnancy, unable to determine number of placenta and number of amniotic sacs, third trimester -O30099 Twin pregnancy, unable to determine number of placenta and number of amniotic sacs, unspecified trimester -O30101 Triplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, first trimester -O30102 Triplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, second trimester -O30103 Triplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, third trimester -O30109 Triplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, unspecified trimester -O30111 Triplet pregnancy with two or more monochorionic fetuses, first trimester -O30112 Triplet pregnancy with two or more monochorionic fetuses, second trimester -O30113 Triplet pregnancy with two or more monochorionic fetuses, third trimester -O30119 Triplet pregnancy with two or more monochorionic fetuses, unspecified trimester -O30121 Triplet pregnancy with two or more monoamniotic fetuses, first trimester -O30122 Triplet pregnancy with two or more monoamniotic fetuses, second trimester -O30123 Triplet pregnancy with two or more monoamniotic fetuses, third trimester -O30129 Triplet pregnancy with two or more monoamniotic fetuses, unspecified trimester -O30191 Triplet pregnancy, unable to determine number of placenta and number of amniotic sacs, first trimester -O30192 Triplet pregnancy, unable to determine number of placenta and number of amniotic sacs, second trimester -O30193 Triplet pregnancy, unable to determine number of placenta and number of amniotic sacs, third trimester -O30199 Triplet pregnancy, unable to determine number of placenta and number of amniotic sacs, unspecified trimester -O30201 Quadruplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, first trimester -O30202 Quadruplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, second trimester -O30203 Quadruplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, third trimester -O30209 Quadruplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, unspecified trimester -O30211 Quadruplet pregnancy with two or more monochorionic fetuses, first trimester -O30212 Quadruplet pregnancy with two or more monochorionic fetuses, second trimester -O30213 Quadruplet pregnancy with two or more monochorionic fetuses, third trimester -O30219 Quadruplet pregnancy with two or more monochorionic fetuses, unspecified trimester -O30221 Quadruplet pregnancy with two or more monoamniotic fetuses, first trimester -O30222 Quadruplet pregnancy with two or more monoamniotic fetuses, second trimester -O30223 Quadruplet pregnancy with two or more monoamniotic fetuses, third trimester -O30229 Quadruplet pregnancy with two or more monoamniotic fetuses, unspecified trimester -O30291 Quadruplet pregnancy, unable to determine number of placenta and number of amniotic sacs, first trimester -O30292 Quadruplet pregnancy, unable to determine number of placenta and number of amniotic sacs, second trimester -O30293 Quadruplet pregnancy, unable to determine number of placenta and number of amniotic sacs, third trimester -O30299 Quadruplet pregnancy, unable to determine number of placenta and number of amniotic sacs, unspecified trimester -O30801 Other specified multiple gestation, unspecified number of placenta and unspecified number of amniotic sacs, first trimester -O30802 Other specified multiple gestation, unspecified number of placenta and unspecified number of amniotic sacs, second trimester -O30803 Other specified multiple gestation, unspecified number of placenta and unspecified number of amniotic sacs, third trimester -O30809 Other specified multiple gestation, unspecified number of placenta and unspecified number of amniotic sacs, unspecified trimester -O30811 Other specified multiple gestation with two or more monochorionic fetuses, first trimester -O30812 Other specified multiple gestation with two or more monochorionic fetuses, second trimester -O30813 Other specified multiple gestation with two or more monochorionic fetuses, third trimester -O30819 Other specified multiple gestation with two or more monochorionic fetuses, unspecified trimester -O30821 Other specified multiple gestation with two or more monoamniotic fetuses, first trimester -O30822 Other specified multiple gestation with two or more monoamniotic fetuses, second trimester -O30823 Other specified multiple gestation with two or more monoamniotic fetuses, third trimester -O30829 Other specified multiple gestation with two or more monoamniotic fetuses, unspecified trimester -O30891 Other specified multiple gestation, unable to determine number of placenta and number of amniotic sacs, first trimester -O30892 Other specified multiple gestation, unable to determine number of placenta and number of amniotic sacs, second trimester -O30893 Other specified multiple gestation, unable to determine number of placenta and number of amniotic sacs, third trimester -O30899 Other specified multiple gestation, unable to determine number of placenta and number of amniotic sacs, unspecified trimester -O3090 Multiple gestation, unspecified, unspecified trimester -O3091 Multiple gestation, unspecified, first trimester -O3092 Multiple gestation, unspecified, second trimester -O3093 Multiple gestation, unspecified, third trimester -O3100X0 Papyraceous fetus, unspecified trimester, not applicable or unspecified -O3100X1 Papyraceous fetus, unspecified trimester, fetus 1 -O3100X2 Papyraceous fetus, unspecified trimester, fetus 2 -O3100X3 Papyraceous fetus, unspecified trimester, fetus 3 -O3100X4 Papyraceous fetus, unspecified trimester, fetus 4 -O3100X5 Papyraceous fetus, unspecified trimester, fetus 5 -O3100X9 Papyraceous fetus, unspecified trimester, other fetus -O3101X0 Papyraceous fetus, first trimester, not applicable or unspecified -O3101X1 Papyraceous fetus, first trimester, fetus 1 -O3101X2 Papyraceous fetus, first trimester, fetus 2 -O3101X3 Papyraceous fetus, first trimester, fetus 3 -O3101X4 Papyraceous fetus, first trimester, fetus 4 -O3101X5 Papyraceous fetus, first trimester, fetus 5 -O3101X9 Papyraceous fetus, first trimester, other fetus -O3102X0 Papyraceous fetus, second trimester, not applicable or unspecified -O3102X1 Papyraceous fetus, second trimester, fetus 1 -O3102X2 Papyraceous fetus, second trimester, fetus 2 -O3102X3 Papyraceous fetus, second trimester, fetus 3 -O3102X4 Papyraceous fetus, second trimester, fetus 4 -O3102X5 Papyraceous fetus, second trimester, fetus 5 -O3102X9 Papyraceous fetus, second trimester, other fetus -O3103X0 Papyraceous fetus, third trimester, not applicable or unspecified -O3103X1 Papyraceous fetus, third trimester, fetus 1 -O3103X2 Papyraceous fetus, third trimester, fetus 2 -O3103X3 Papyraceous fetus, third trimester, fetus 3 -O3103X4 Papyraceous fetus, third trimester, fetus 4 -O3103X5 Papyraceous fetus, third trimester, fetus 5 -O3103X9 Papyraceous fetus, third trimester, other fetus -O3110X0 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, not applicable or unspecified -O3110X1 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, fetus 1 -O3110X2 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, fetus 2 -O3110X3 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, fetus 3 -O3110X4 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, fetus 4 -O3110X5 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, fetus 5 -O3110X9 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, other fetus -O3111X0 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, not applicable or unspecified -O3111X1 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, fetus 1 -O3111X2 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, fetus 2 -O3111X3 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, fetus 3 -O3111X4 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, fetus 4 -O3111X5 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, fetus 5 -O3111X9 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, other fetus -O3112X0 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, not applicable or unspecified -O3112X1 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, fetus 1 -O3112X2 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, fetus 2 -O3112X3 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, fetus 3 -O3112X4 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, fetus 4 -O3112X5 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, fetus 5 -O3112X9 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, other fetus -O3113X0 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, not applicable or unspecified -O3113X1 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, fetus 1 -O3113X2 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, fetus 2 -O3113X3 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, fetus 3 -O3113X4 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, fetus 4 -O3113X5 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, fetus 5 -O3113X9 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, other fetus -O3120X0 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, not applicable or unspecified -O3120X1 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, fetus 1 -O3120X2 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, fetus 2 -O3120X3 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, fetus 3 -O3120X4 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, fetus 4 -O3120X5 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, fetus 5 -O3120X9 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, other fetus -O3121X0 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, not applicable or unspecified -O3121X1 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, fetus 1 -O3121X2 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, fetus 2 -O3121X3 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, fetus 3 -O3121X4 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, fetus 4 -O3121X5 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, fetus 5 -O3121X9 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, other fetus -O3122X0 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, not applicable or unspecified -O3122X1 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, fetus 1 -O3122X2 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, fetus 2 -O3122X3 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, fetus 3 -O3122X4 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, fetus 4 -O3122X5 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, fetus 5 -O3122X9 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, other fetus -O3123X0 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, not applicable or unspecified -O3123X1 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, fetus 1 -O3123X2 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, fetus 2 -O3123X3 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, fetus 3 -O3123X4 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, fetus 4 -O3123X5 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, fetus 5 -O3123X9 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, other fetus -O3130X0 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, not applicable or unspecified -O3130X1 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, fetus 1 -O3130X2 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, fetus 2 -O3130X3 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, fetus 3 -O3130X4 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, fetus 4 -O3130X5 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, fetus 5 -O3130X9 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, other fetus -O3131X0 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, not applicable or unspecified -O3131X1 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, fetus 1 -O3131X2 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, fetus 2 -O3131X3 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, fetus 3 -O3131X4 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, fetus 4 -O3131X5 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, fetus 5 -O3131X9 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, other fetus -O3132X0 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, not applicable or unspecified -O3132X1 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, fetus 1 -O3132X2 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, fetus 2 -O3132X3 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, fetus 3 -O3132X4 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, fetus 4 -O3132X5 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, fetus 5 -O3132X9 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, other fetus -O3133X0 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, not applicable or unspecified -O3133X1 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, fetus 1 -O3133X2 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, fetus 2 -O3133X3 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, fetus 3 -O3133X4 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, fetus 4 -O3133X5 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, fetus 5 -O3133X9 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, other fetus -O318X10 Other complications specific to multiple gestation, first trimester, not applicable or unspecified -O318X11 Other complications specific to multiple gestation, first trimester, fetus 1 -O318X12 Other complications specific to multiple gestation, first trimester, fetus 2 -O318X13 Other complications specific to multiple gestation, first trimester, fetus 3 -O318X14 Other complications specific to multiple gestation, first trimester, fetus 4 -O318X15 Other complications specific to multiple gestation, first trimester, fetus 5 -O318X19 Other complications specific to multiple gestation, first trimester, other fetus -O318X20 Other complications specific to multiple gestation, second trimester, not applicable or unspecified -O318X21 Other complications specific to multiple gestation, second trimester, fetus 1 -O318X22 Other complications specific to multiple gestation, second trimester, fetus 2 -O318X23 Other complications specific to multiple gestation, second trimester, fetus 3 -O318X24 Other complications specific to multiple gestation, second trimester, fetus 4 -O318X25 Other complications specific to multiple gestation, second trimester, fetus 5 -O318X29 Other complications specific to multiple gestation, second trimester, other fetus -O318X30 Other complications specific to multiple gestation, third trimester, not applicable or unspecified -O318X31 Other complications specific to multiple gestation, third trimester, fetus 1 -O318X32 Other complications specific to multiple gestation, third trimester, fetus 2 -O318X33 Other complications specific to multiple gestation, third trimester, fetus 3 -O318X34 Other complications specific to multiple gestation, third trimester, fetus 4 -O318X35 Other complications specific to multiple gestation, third trimester, fetus 5 -O318X39 Other complications specific to multiple gestation, third trimester, other fetus -O318X90 Other complications specific to multiple gestation, unspecified trimester, not applicable or unspecified -O318X91 Other complications specific to multiple gestation, unspecified trimester, fetus 1 -O318X92 Other complications specific to multiple gestation, unspecified trimester, fetus 2 -O318X93 Other complications specific to multiple gestation, unspecified trimester, fetus 3 -O318X94 Other complications specific to multiple gestation, unspecified trimester, fetus 4 -O318X95 Other complications specific to multiple gestation, unspecified trimester, fetus 5 -O318X99 Other complications specific to multiple gestation, unspecified trimester, other fetus -O320XX0 Maternal care for unstable lie, not applicable or unspecified -O320XX1 Maternal care for unstable lie, fetus 1 -O320XX2 Maternal care for unstable lie, fetus 2 -O320XX3 Maternal care for unstable lie, fetus 3 -O320XX4 Maternal care for unstable lie, fetus 4 -O320XX5 Maternal care for unstable lie, fetus 5 -O320XX9 Maternal care for unstable lie, other fetus -O321XX0 Maternal care for breech presentation, not applicable or unspecified -O321XX1 Maternal care for breech presentation, fetus 1 -O321XX2 Maternal care for breech presentation, fetus 2 -O321XX3 Maternal care for breech presentation, fetus 3 -O321XX4 Maternal care for breech presentation, fetus 4 -O321XX5 Maternal care for breech presentation, fetus 5 -O321XX9 Maternal care for breech presentation, other fetus -O322XX0 Maternal care for transverse and oblique lie, not applicable or unspecified -O322XX1 Maternal care for transverse and oblique lie, fetus 1 -O322XX2 Maternal care for transverse and oblique lie, fetus 2 -O322XX3 Maternal care for transverse and oblique lie, fetus 3 -O322XX4 Maternal care for transverse and oblique lie, fetus 4 -O322XX5 Maternal care for transverse and oblique lie, fetus 5 -O322XX9 Maternal care for transverse and oblique lie, other fetus -O323XX0 Maternal care for face, brow and chin presentation, not applicable or unspecified -O323XX1 Maternal care for face, brow and chin presentation, fetus 1 -O323XX2 Maternal care for face, brow and chin presentation, fetus 2 -O323XX3 Maternal care for face, brow and chin presentation, fetus 3 -O323XX4 Maternal care for face, brow and chin presentation, fetus 4 -O323XX5 Maternal care for face, brow and chin presentation, fetus 5 -O323XX9 Maternal care for face, brow and chin presentation, other fetus -O324XX0 Maternal care for high head at term, not applicable or unspecified -O324XX1 Maternal care for high head at term, fetus 1 -O324XX2 Maternal care for high head at term, fetus 2 -O324XX3 Maternal care for high head at term, fetus 3 -O324XX4 Maternal care for high head at term, fetus 4 -O324XX5 Maternal care for high head at term, fetus 5 -O324XX9 Maternal care for high head at term, other fetus -O326XX0 Maternal care for compound presentation, not applicable or unspecified -O326XX1 Maternal care for compound presentation, fetus 1 -O326XX2 Maternal care for compound presentation, fetus 2 -O326XX3 Maternal care for compound presentation, fetus 3 -O326XX4 Maternal care for compound presentation, fetus 4 -O326XX5 Maternal care for compound presentation, fetus 5 -O326XX9 Maternal care for compound presentation, other fetus -O328XX0 Maternal care for other malpresentation of fetus, not applicable or unspecified -O328XX1 Maternal care for other malpresentation of fetus, fetus 1 -O328XX2 Maternal care for other malpresentation of fetus, fetus 2 -O328XX3 Maternal care for other malpresentation of fetus, fetus 3 -O328XX4 Maternal care for other malpresentation of fetus, fetus 4 -O328XX5 Maternal care for other malpresentation of fetus, fetus 5 -O328XX9 Maternal care for other malpresentation of fetus, other fetus -O329XX0 Maternal care for malpresentation of fetus, unspecified, not applicable or unspecified -O329XX1 Maternal care for malpresentation of fetus, unspecified, fetus 1 -O329XX2 Maternal care for malpresentation of fetus, unspecified, fetus 2 -O329XX3 Maternal care for malpresentation of fetus, unspecified, fetus 3 -O329XX4 Maternal care for malpresentation of fetus, unspecified, fetus 4 -O329XX5 Maternal care for malpresentation of fetus, unspecified, fetus 5 -O329XX9 Maternal care for malpresentation of fetus, unspecified, other fetus -O330 Maternal care for disproportion due to deformity of maternal pelvic bones -O331 Maternal care for disproportion due to generally contracted pelvis -O332 Maternal care for disproportion due to inlet contraction of pelvis -O333XX0 Maternal care for disproportion due to outlet contraction of pelvis, not applicable or unspecified -O333XX1 Maternal care for disproportion due to outlet contraction of pelvis, fetus 1 -O333XX2 Maternal care for disproportion due to outlet contraction of pelvis, fetus 2 -O333XX3 Maternal care for disproportion due to outlet contraction of pelvis, fetus 3 -O333XX4 Maternal care for disproportion due to outlet contraction of pelvis, fetus 4 -O333XX5 Maternal care for disproportion due to outlet contraction of pelvis, fetus 5 -O333XX9 Maternal care for disproportion due to outlet contraction of pelvis, other fetus -O334XX0 Maternal care for disproportion of mixed maternal and fetal origin, not applicable or unspecified -O334XX1 Maternal care for disproportion of mixed maternal and fetal origin, fetus 1 -O334XX2 Maternal care for disproportion of mixed maternal and fetal origin, fetus 2 -O334XX3 Maternal care for disproportion of mixed maternal and fetal origin, fetus 3 -O334XX4 Maternal care for disproportion of mixed maternal and fetal origin, fetus 4 -O334XX5 Maternal care for disproportion of mixed maternal and fetal origin, fetus 5 -O334XX9 Maternal care for disproportion of mixed maternal and fetal origin, other fetus -O335XX0 Maternal care for disproportion due to unusually large fetus, not applicable or unspecified -O335XX1 Maternal care for disproportion due to unusually large fetus, fetus 1 -O335XX2 Maternal care for disproportion due to unusually large fetus, fetus 2 -O335XX3 Maternal care for disproportion due to unusually large fetus, fetus 3 -O335XX4 Maternal care for disproportion due to unusually large fetus, fetus 4 -O335XX5 Maternal care for disproportion due to unusually large fetus, fetus 5 -O335XX9 Maternal care for disproportion due to unusually large fetus, other fetus -O336XX0 Maternal care for disproportion due to hydrocephalic fetus, not applicable or unspecified -O336XX1 Maternal care for disproportion due to hydrocephalic fetus, fetus 1 -O336XX2 Maternal care for disproportion due to hydrocephalic fetus, fetus 2 -O336XX3 Maternal care for disproportion due to hydrocephalic fetus, fetus 3 -O336XX4 Maternal care for disproportion due to hydrocephalic fetus, fetus 4 -O336XX5 Maternal care for disproportion due to hydrocephalic fetus, fetus 5 -O336XX9 Maternal care for disproportion due to hydrocephalic fetus, other fetus -O337 Maternal care for disproportion due to other fetal deformities -O338 Maternal care for disproportion of other origin -O339 Maternal care for disproportion, unspecified -O3400 Maternal care for unspecified congenital malformation of uterus, unspecified trimester -O3401 Maternal care for unspecified congenital malformation of uterus, first trimester -O3402 Maternal care for unspecified congenital malformation of uterus, second trimester -O3403 Maternal care for unspecified congenital malformation of uterus, third trimester -O3410 Maternal care for benign tumor of corpus uteri, unspecified trimester -O3411 Maternal care for benign tumor of corpus uteri, first trimester -O3412 Maternal care for benign tumor of corpus uteri, second trimester -O3413 Maternal care for benign tumor of corpus uteri, third trimester -O3421 Maternal care for scar from previous cesarean delivery -O3429 Maternal care due to uterine scar from other previous surgery -O3430 Maternal care for cervical incompetence, unspecified trimester -O3431 Maternal care for cervical incompetence, first trimester -O3432 Maternal care for cervical incompetence, second trimester -O3433 Maternal care for cervical incompetence, third trimester -O3440 Maternal care for other abnormalities of cervix, unspecified trimester -O3441 Maternal care for other abnormalities of cervix, first trimester -O3442 Maternal care for other abnormalities of cervix, second trimester -O3443 Maternal care for other abnormalities of cervix, third trimester -O34511 Maternal care for incarceration of gravid uterus, first trimester -O34512 Maternal care for incarceration of gravid uterus, second trimester -O34513 Maternal care for incarceration of gravid uterus, third trimester -O34519 Maternal care for incarceration of gravid uterus, unspecified trimester -O34521 Maternal care for prolapse of gravid uterus, first trimester -O34522 Maternal care for prolapse of gravid uterus, second trimester -O34523 Maternal care for prolapse of gravid uterus, third trimester -O34529 Maternal care for prolapse of gravid uterus, unspecified trimester -O34531 Maternal care for retroversion of gravid uterus, first trimester -O34532 Maternal care for retroversion of gravid uterus, second trimester -O34533 Maternal care for retroversion of gravid uterus, third trimester -O34539 Maternal care for retroversion of gravid uterus, unspecified trimester -O34591 Maternal care for other abnormalities of gravid uterus, first trimester -O34592 Maternal care for other abnormalities of gravid uterus, second trimester -O34593 Maternal care for other abnormalities of gravid uterus, third trimester -O34599 Maternal care for other abnormalities of gravid uterus, unspecified trimester -O3460 Maternal care for abnormality of vagina, unspecified trimester -O3461 Maternal care for abnormality of vagina, first trimester -O3462 Maternal care for abnormality of vagina, second trimester -O3463 Maternal care for abnormality of vagina, third trimester -O3470 Maternal care for abnormality of vulva and perineum, unspecified trimester -O3471 Maternal care for abnormality of vulva and perineum, first trimester -O3472 Maternal care for abnormality of vulva and perineum, second trimester -O3473 Maternal care for abnormality of vulva and perineum, third trimester -O3480 Maternal care for other abnormalities of pelvic organs, unspecified trimester -O3481 Maternal care for other abnormalities of pelvic organs, first trimester -O3482 Maternal care for other abnormalities of pelvic organs, second trimester -O3483 Maternal care for other abnormalities of pelvic organs, third trimester -O3490 Maternal care for abnormality of pelvic organ, unspecified, unspecified trimester -O3491 Maternal care for abnormality of pelvic organ, unspecified, first trimester -O3492 Maternal care for abnormality of pelvic organ, unspecified, second trimester -O3493 Maternal care for abnormality of pelvic organ, unspecified, third trimester -O350XX0 Maternal care for (suspected) central nervous system malformation in fetus, not applicable or unspecified -O350XX1 Maternal care for (suspected) central nervous system malformation in fetus, fetus 1 -O350XX2 Maternal care for (suspected) central nervous system malformation in fetus, fetus 2 -O350XX3 Maternal care for (suspected) central nervous system malformation in fetus, fetus 3 -O350XX4 Maternal care for (suspected) central nervous system malformation in fetus, fetus 4 -O350XX5 Maternal care for (suspected) central nervous system malformation in fetus, fetus 5 -O350XX9 Maternal care for (suspected) central nervous system malformation in fetus, other fetus -O351XX0 Maternal care for (suspected) chromosomal abnormality in fetus, not applicable or unspecified -O351XX1 Maternal care for (suspected) chromosomal abnormality in fetus, fetus 1 -O351XX2 Maternal care for (suspected) chromosomal abnormality in fetus, fetus 2 -O351XX3 Maternal care for (suspected) chromosomal abnormality in fetus, fetus 3 -O351XX4 Maternal care for (suspected) chromosomal abnormality in fetus, fetus 4 -O351XX5 Maternal care for (suspected) chromosomal abnormality in fetus, fetus 5 -O351XX9 Maternal care for (suspected) chromosomal abnormality in fetus, other fetus -O352XX0 Maternal care for (suspected) hereditary disease in fetus, not applicable or unspecified -O352XX1 Maternal care for (suspected) hereditary disease in fetus, fetus 1 -O352XX2 Maternal care for (suspected) hereditary disease in fetus, fetus 2 -O352XX3 Maternal care for (suspected) hereditary disease in fetus, fetus 3 -O352XX4 Maternal care for (suspected) hereditary disease in fetus, fetus 4 -O352XX5 Maternal care for (suspected) hereditary disease in fetus, fetus 5 -O352XX9 Maternal care for (suspected) hereditary disease in fetus, other fetus -O353XX0 Maternal care for (suspected) damage to fetus from viral disease in mother, not applicable or unspecified -O353XX1 Maternal care for (suspected) damage to fetus from viral disease in mother, fetus 1 -O353XX2 Maternal care for (suspected) damage to fetus from viral disease in mother, fetus 2 -O353XX3 Maternal care for (suspected) damage to fetus from viral disease in mother, fetus 3 -O353XX4 Maternal care for (suspected) damage to fetus from viral disease in mother, fetus 4 -O353XX5 Maternal care for (suspected) damage to fetus from viral disease in mother, fetus 5 -O353XX9 Maternal care for (suspected) damage to fetus from viral disease in mother, other fetus -O354XX0 Maternal care for (suspected) damage to fetus from alcohol, not applicable or unspecified -O354XX1 Maternal care for (suspected) damage to fetus from alcohol, fetus 1 -O354XX2 Maternal care for (suspected) damage to fetus from alcohol, fetus 2 -O354XX3 Maternal care for (suspected) damage to fetus from alcohol, fetus 3 -O354XX4 Maternal care for (suspected) damage to fetus from alcohol, fetus 4 -O354XX5 Maternal care for (suspected) damage to fetus from alcohol, fetus 5 -O354XX9 Maternal care for (suspected) damage to fetus from alcohol, other fetus -O355XX0 Maternal care for (suspected) damage to fetus by drugs, not applicable or unspecified -O355XX1 Maternal care for (suspected) damage to fetus by drugs, fetus 1 -O355XX2 Maternal care for (suspected) damage to fetus by drugs, fetus 2 -O355XX3 Maternal care for (suspected) damage to fetus by drugs, fetus 3 -O355XX4 Maternal care for (suspected) damage to fetus by drugs, fetus 4 -O355XX5 Maternal care for (suspected) damage to fetus by drugs, fetus 5 -O355XX9 Maternal care for (suspected) damage to fetus by drugs, other fetus -O356XX0 Maternal care for (suspected) damage to fetus by radiation, not applicable or unspecified -O356XX1 Maternal care for (suspected) damage to fetus by radiation, fetus 1 -O356XX2 Maternal care for (suspected) damage to fetus by radiation, fetus 2 -O356XX3 Maternal care for (suspected) damage to fetus by radiation, fetus 3 -O356XX4 Maternal care for (suspected) damage to fetus by radiation, fetus 4 -O356XX5 Maternal care for (suspected) damage to fetus by radiation, fetus 5 -O356XX9 Maternal care for (suspected) damage to fetus by radiation, other fetus -O357XX0 Maternal care for (suspected) damage to fetus by other medical procedures, not applicable or unspecified -O357XX1 Maternal care for (suspected) damage to fetus by other medical procedures, fetus 1 -O357XX2 Maternal care for (suspected) damage to fetus by other medical procedures, fetus 2 -O357XX3 Maternal care for (suspected) damage to fetus by other medical procedures, fetus 3 -O357XX4 Maternal care for (suspected) damage to fetus by other medical procedures, fetus 4 -O357XX5 Maternal care for (suspected) damage to fetus by other medical procedures, fetus 5 -O357XX9 Maternal care for (suspected) damage to fetus by other medical procedures, other fetus -O358XX0 Maternal care for other (suspected) fetal abnormality and damage, not applicable or unspecified -O358XX1 Maternal care for other (suspected) fetal abnormality and damage, fetus 1 -O358XX2 Maternal care for other (suspected) fetal abnormality and damage, fetus 2 -O358XX3 Maternal care for other (suspected) fetal abnormality and damage, fetus 3 -O358XX4 Maternal care for other (suspected) fetal abnormality and damage, fetus 4 -O358XX5 Maternal care for other (suspected) fetal abnormality and damage, fetus 5 -O358XX9 Maternal care for other (suspected) fetal abnormality and damage, other fetus -O359XX0 Maternal care for (suspected) fetal abnormality and damage, unspecified, not applicable or unspecified -O359XX1 Maternal care for (suspected) fetal abnormality and damage, unspecified, fetus 1 -O359XX2 Maternal care for (suspected) fetal abnormality and damage, unspecified, fetus 2 -O359XX3 Maternal care for (suspected) fetal abnormality and damage, unspecified, fetus 3 -O359XX4 Maternal care for (suspected) fetal abnormality and damage, unspecified, fetus 4 -O359XX5 Maternal care for (suspected) fetal abnormality and damage, unspecified, fetus 5 -O359XX9 Maternal care for (suspected) fetal abnormality and damage, unspecified, other fetus -O360110 Maternal care for anti-D [Rh] antibodies, first trimester, not applicable or unspecified -O360111 Maternal care for anti-D [Rh] antibodies, first trimester, fetus 1 -O360112 Maternal care for anti-D [Rh] antibodies, first trimester, fetus 2 -O360113 Maternal care for anti-D [Rh] antibodies, first trimester, fetus 3 -O360114 Maternal care for anti-D [Rh] antibodies, first trimester, fetus 4 -O360115 Maternal care for anti-D [Rh] antibodies, first trimester, fetus 5 -O360119 Maternal care for anti-D [Rh] antibodies, first trimester, other fetus -O360120 Maternal care for anti-D [Rh] antibodies, second trimester, not applicable or unspecified -O360121 Maternal care for anti-D [Rh] antibodies, second trimester, fetus 1 -O360122 Maternal care for anti-D [Rh] antibodies, second trimester, fetus 2 -O360123 Maternal care for anti-D [Rh] antibodies, second trimester, fetus 3 -O360124 Maternal care for anti-D [Rh] antibodies, second trimester, fetus 4 -O360125 Maternal care for anti-D [Rh] antibodies, second trimester, fetus 5 -O360129 Maternal care for anti-D [Rh] antibodies, second trimester, other fetus -O360130 Maternal care for anti-D [Rh] antibodies, third trimester, not applicable or unspecified -O360131 Maternal care for anti-D [Rh] antibodies, third trimester, fetus 1 -O360132 Maternal care for anti-D [Rh] antibodies, third trimester, fetus 2 -O360133 Maternal care for anti-D [Rh] antibodies, third trimester, fetus 3 -O360134 Maternal care for anti-D [Rh] antibodies, third trimester, fetus 4 -O360135 Maternal care for anti-D [Rh] antibodies, third trimester, fetus 5 -O360139 Maternal care for anti-D [Rh] antibodies, third trimester, other fetus -O360190 Maternal care for anti-D [Rh] antibodies, unspecified trimester, not applicable or unspecified -O360191 Maternal care for anti-D [Rh] antibodies, unspecified trimester, fetus 1 -O360192 Maternal care for anti-D [Rh] antibodies, unspecified trimester, fetus 2 -O360193 Maternal care for anti-D [Rh] antibodies, unspecified trimester, fetus 3 -O360194 Maternal care for anti-D [Rh] antibodies, unspecified trimester, fetus 4 -O360195 Maternal care for anti-D [Rh] antibodies, unspecified trimester, fetus 5 -O360199 Maternal care for anti-D [Rh] antibodies, unspecified trimester, other fetus -O360910 Maternal care for other rhesus isoimmunization, first trimester, not applicable or unspecified -O360911 Maternal care for other rhesus isoimmunization, first trimester, fetus 1 -O360912 Maternal care for other rhesus isoimmunization, first trimester, fetus 2 -O360913 Maternal care for other rhesus isoimmunization, first trimester, fetus 3 -O360914 Maternal care for other rhesus isoimmunization, first trimester, fetus 4 -O360915 Maternal care for other rhesus isoimmunization, first trimester, fetus 5 -O360919 Maternal care for other rhesus isoimmunization, first trimester, other fetus -O360920 Maternal care for other rhesus isoimmunization, second trimester, not applicable or unspecified -O360921 Maternal care for other rhesus isoimmunization, second trimester, fetus 1 -O360922 Maternal care for other rhesus isoimmunization, second trimester, fetus 2 -O360923 Maternal care for other rhesus isoimmunization, second trimester, fetus 3 -O360924 Maternal care for other rhesus isoimmunization, second trimester, fetus 4 -O360925 Maternal care for other rhesus isoimmunization, second trimester, fetus 5 -O360929 Maternal care for other rhesus isoimmunization, second trimester, other fetus -O360930 Maternal care for other rhesus isoimmunization, third trimester, not applicable or unspecified -O360931 Maternal care for other rhesus isoimmunization, third trimester, fetus 1 -O360932 Maternal care for other rhesus isoimmunization, third trimester, fetus 2 -O360933 Maternal care for other rhesus isoimmunization, third trimester, fetus 3 -O360934 Maternal care for other rhesus isoimmunization, third trimester, fetus 4 -O360935 Maternal care for other rhesus isoimmunization, third trimester, fetus 5 -O360939 Maternal care for other rhesus isoimmunization, third trimester, other fetus -O360990 Maternal care for other rhesus isoimmunization, unspecified trimester, not applicable or unspecified -O360991 Maternal care for other rhesus isoimmunization, unspecified trimester, fetus 1 -O360992 Maternal care for other rhesus isoimmunization, unspecified trimester, fetus 2 -O360993 Maternal care for other rhesus isoimmunization, unspecified trimester, fetus 3 -O360994 Maternal care for other rhesus isoimmunization, unspecified trimester, fetus 4 -O360995 Maternal care for other rhesus isoimmunization, unspecified trimester, fetus 5 -O360999 Maternal care for other rhesus isoimmunization, unspecified trimester, other fetus -O361110 Maternal care for Anti-A sensitization, first trimester, not applicable or unspecified -O361111 Maternal care for Anti-A sensitization, first trimester, fetus 1 -O361112 Maternal care for Anti-A sensitization, first trimester, fetus 2 -O361113 Maternal care for Anti-A sensitization, first trimester, fetus 3 -O361114 Maternal care for Anti-A sensitization, first trimester, fetus 4 -O361115 Maternal care for Anti-A sensitization, first trimester, fetus 5 -O361119 Maternal care for Anti-A sensitization, first trimester, other fetus -O361120 Maternal care for Anti-A sensitization, second trimester, not applicable or unspecified -O361121 Maternal care for Anti-A sensitization, second trimester, fetus 1 -O361122 Maternal care for Anti-A sensitization, second trimester, fetus 2 -O361123 Maternal care for Anti-A sensitization, second trimester, fetus 3 -O361124 Maternal care for Anti-A sensitization, second trimester, fetus 4 -O361125 Maternal care for Anti-A sensitization, second trimester, fetus 5 -O361129 Maternal care for Anti-A sensitization, second trimester, other fetus -O361130 Maternal care for Anti-A sensitization, third trimester, not applicable or unspecified -O361131 Maternal care for Anti-A sensitization, third trimester, fetus 1 -O361132 Maternal care for Anti-A sensitization, third trimester, fetus 2 -O361133 Maternal care for Anti-A sensitization, third trimester, fetus 3 -O361134 Maternal care for Anti-A sensitization, third trimester, fetus 4 -O361135 Maternal care for Anti-A sensitization, third trimester, fetus 5 -O361139 Maternal care for Anti-A sensitization, third trimester, other fetus -O361190 Maternal care for Anti-A sensitization, unspecified trimester, not applicable or unspecified -O361191 Maternal care for Anti-A sensitization, unspecified trimester, fetus 1 -O361192 Maternal care for Anti-A sensitization, unspecified trimester, fetus 2 -O361193 Maternal care for Anti-A sensitization, unspecified trimester, fetus 3 -O361194 Maternal care for Anti-A sensitization, unspecified trimester, fetus 4 -O361195 Maternal care for Anti-A sensitization, unspecified trimester, fetus 5 -O361199 Maternal care for Anti-A sensitization, unspecified trimester, other fetus -O361910 Maternal care for other isoimmunization, first trimester, not applicable or unspecified -O361911 Maternal care for other isoimmunization, first trimester, fetus 1 -O361912 Maternal care for other isoimmunization, first trimester, fetus 2 -O361913 Maternal care for other isoimmunization, first trimester, fetus 3 -O361914 Maternal care for other isoimmunization, first trimester, fetus 4 -O361915 Maternal care for other isoimmunization, first trimester, fetus 5 -O361919 Maternal care for other isoimmunization, first trimester, other fetus -O361920 Maternal care for other isoimmunization, second trimester, not applicable or unspecified -O361921 Maternal care for other isoimmunization, second trimester, fetus 1 -O361922 Maternal care for other isoimmunization, second trimester, fetus 2 -O361923 Maternal care for other isoimmunization, second trimester, fetus 3 -O361924 Maternal care for other isoimmunization, second trimester, fetus 4 -O361925 Maternal care for other isoimmunization, second trimester, fetus 5 -O361929 Maternal care for other isoimmunization, second trimester, other fetus -O361930 Maternal care for other isoimmunization, third trimester, not applicable or unspecified -O361931 Maternal care for other isoimmunization, third trimester, fetus 1 -O361932 Maternal care for other isoimmunization, third trimester, fetus 2 -O361933 Maternal care for other isoimmunization, third trimester, fetus 3 -O361934 Maternal care for other isoimmunization, third trimester, fetus 4 -O361935 Maternal care for other isoimmunization, third trimester, fetus 5 -O361939 Maternal care for other isoimmunization, third trimester, other fetus -O361990 Maternal care for other isoimmunization, unspecified trimester, not applicable or unspecified -O361991 Maternal care for other isoimmunization, unspecified trimester, fetus 1 -O361992 Maternal care for other isoimmunization, unspecified trimester, fetus 2 -O361993 Maternal care for other isoimmunization, unspecified trimester, fetus 3 -O361994 Maternal care for other isoimmunization, unspecified trimester, fetus 4 -O361995 Maternal care for other isoimmunization, unspecified trimester, fetus 5 -O361999 Maternal care for other isoimmunization, unspecified trimester, other fetus -O3620X0 Maternal care for hydrops fetalis, unspecified trimester, not applicable or unspecified -O3620X1 Maternal care for hydrops fetalis, unspecified trimester, fetus 1 -O3620X2 Maternal care for hydrops fetalis, unspecified trimester, fetus 2 -O3620X3 Maternal care for hydrops fetalis, unspecified trimester, fetus 3 -O3620X4 Maternal care for hydrops fetalis, unspecified trimester, fetus 4 -O3620X5 Maternal care for hydrops fetalis, unspecified trimester, fetus 5 -O3620X9 Maternal care for hydrops fetalis, unspecified trimester, other fetus -O3621X0 Maternal care for hydrops fetalis, first trimester, not applicable or unspecified -O3621X1 Maternal care for hydrops fetalis, first trimester, fetus 1 -O3621X2 Maternal care for hydrops fetalis, first trimester, fetus 2 -O3621X3 Maternal care for hydrops fetalis, first trimester, fetus 3 -O3621X4 Maternal care for hydrops fetalis, first trimester, fetus 4 -O3621X5 Maternal care for hydrops fetalis, first trimester, fetus 5 -O3621X9 Maternal care for hydrops fetalis, first trimester, other fetus -O3622X0 Maternal care for hydrops fetalis, second trimester, not applicable or unspecified -O3622X1 Maternal care for hydrops fetalis, second trimester, fetus 1 -O3622X2 Maternal care for hydrops fetalis, second trimester, fetus 2 -O3622X3 Maternal care for hydrops fetalis, second trimester, fetus 3 -O3622X4 Maternal care for hydrops fetalis, second trimester, fetus 4 -O3622X5 Maternal care for hydrops fetalis, second trimester, fetus 5 -O3622X9 Maternal care for hydrops fetalis, second trimester, other fetus -O3623X0 Maternal care for hydrops fetalis, third trimester, not applicable or unspecified -O3623X1 Maternal care for hydrops fetalis, third trimester, fetus 1 -O3623X2 Maternal care for hydrops fetalis, third trimester, fetus 2 -O3623X3 Maternal care for hydrops fetalis, third trimester, fetus 3 -O3623X4 Maternal care for hydrops fetalis, third trimester, fetus 4 -O3623X5 Maternal care for hydrops fetalis, third trimester, fetus 5 -O3623X9 Maternal care for hydrops fetalis, third trimester, other fetus -O364XX0 Maternal care for intrauterine death, not applicable or unspecified -O364XX1 Maternal care for intrauterine death, fetus 1 -O364XX2 Maternal care for intrauterine death, fetus 2 -O364XX3 Maternal care for intrauterine death, fetus 3 -O364XX4 Maternal care for intrauterine death, fetus 4 -O364XX5 Maternal care for intrauterine death, fetus 5 -O364XX9 Maternal care for intrauterine death, other fetus -O365110 Maternal care for known or suspected placental insufficiency, first trimester, not applicable or unspecified -O365111 Maternal care for known or suspected placental insufficiency, first trimester, fetus 1 -O365112 Maternal care for known or suspected placental insufficiency, first trimester, fetus 2 -O365113 Maternal care for known or suspected placental insufficiency, first trimester, fetus 3 -O365114 Maternal care for known or suspected placental insufficiency, first trimester, fetus 4 -O365115 Maternal care for known or suspected placental insufficiency, first trimester, fetus 5 -O365119 Maternal care for known or suspected placental insufficiency, first trimester, other fetus -O365120 Maternal care for known or suspected placental insufficiency, second trimester, not applicable or unspecified -O365121 Maternal care for known or suspected placental insufficiency, second trimester, fetus 1 -O365122 Maternal care for known or suspected placental insufficiency, second trimester, fetus 2 -O365123 Maternal care for known or suspected placental insufficiency, second trimester, fetus 3 -O365124 Maternal care for known or suspected placental insufficiency, second trimester, fetus 4 -O365125 Maternal care for known or suspected placental insufficiency, second trimester, fetus 5 -O365129 Maternal care for known or suspected placental insufficiency, second trimester, other fetus -O365130 Maternal care for known or suspected placental insufficiency, third trimester, not applicable or unspecified -O365131 Maternal care for known or suspected placental insufficiency, third trimester, fetus 1 -O365132 Maternal care for known or suspected placental insufficiency, third trimester, fetus 2 -O365133 Maternal care for known or suspected placental insufficiency, third trimester, fetus 3 -O365134 Maternal care for known or suspected placental insufficiency, third trimester, fetus 4 -O365135 Maternal care for known or suspected placental insufficiency, third trimester, fetus 5 -O365139 Maternal care for known or suspected placental insufficiency, third trimester, other fetus -O365190 Maternal care for known or suspected placental insufficiency, unspecified trimester, not applicable or unspecified -O365191 Maternal care for known or suspected placental insufficiency, unspecified trimester, fetus 1 -O365192 Maternal care for known or suspected placental insufficiency, unspecified trimester, fetus 2 -O365193 Maternal care for known or suspected placental insufficiency, unspecified trimester, fetus 3 -O365194 Maternal care for known or suspected placental insufficiency, unspecified trimester, fetus 4 -O365195 Maternal care for known or suspected placental insufficiency, unspecified trimester, fetus 5 -O365199 Maternal care for known or suspected placental insufficiency, unspecified trimester, other fetus -O365910 Maternal care for other known or suspected poor fetal growth, first trimester, not applicable or unspecified -O365911 Maternal care for other known or suspected poor fetal growth, first trimester, fetus 1 -O365912 Maternal care for other known or suspected poor fetal growth, first trimester, fetus 2 -O365913 Maternal care for other known or suspected poor fetal growth, first trimester, fetus 3 -O365914 Maternal care for other known or suspected poor fetal growth, first trimester, fetus 4 -O365915 Maternal care for other known or suspected poor fetal growth, first trimester, fetus 5 -O365919 Maternal care for other known or suspected poor fetal growth, first trimester, other fetus -O365920 Maternal care for other known or suspected poor fetal growth, second trimester, not applicable or unspecified -O365921 Maternal care for other known or suspected poor fetal growth, second trimester, fetus 1 -O365922 Maternal care for other known or suspected poor fetal growth, second trimester, fetus 2 -O365923 Maternal care for other known or suspected poor fetal growth, second trimester, fetus 3 -O365924 Maternal care for other known or suspected poor fetal growth, second trimester, fetus 4 -O365925 Maternal care for other known or suspected poor fetal growth, second trimester, fetus 5 -O365929 Maternal care for other known or suspected poor fetal growth, second trimester, other fetus -O365930 Maternal care for other known or suspected poor fetal growth, third trimester, not applicable or unspecified -O365931 Maternal care for other known or suspected poor fetal growth, third trimester, fetus 1 -O365932 Maternal care for other known or suspected poor fetal growth, third trimester, fetus 2 -O365933 Maternal care for other known or suspected poor fetal growth, third trimester, fetus 3 -O365934 Maternal care for other known or suspected poor fetal growth, third trimester, fetus 4 -O365935 Maternal care for other known or suspected poor fetal growth, third trimester, fetus 5 -O365939 Maternal care for other known or suspected poor fetal growth, third trimester, other fetus -O365990 Maternal care for other known or suspected poor fetal growth, unspecified trimester, not applicable or unspecified -O365991 Maternal care for other known or suspected poor fetal growth, unspecified trimester, fetus 1 -O365992 Maternal care for other known or suspected poor fetal growth, unspecified trimester, fetus 2 -O365993 Maternal care for other known or suspected poor fetal growth, unspecified trimester, fetus 3 -O365994 Maternal care for other known or suspected poor fetal growth, unspecified trimester, fetus 4 -O365995 Maternal care for other known or suspected poor fetal growth, unspecified trimester, fetus 5 -O365999 Maternal care for other known or suspected poor fetal growth, unspecified trimester, other fetus -O3660X0 Maternal care for excessive fetal growth, unspecified trimester, not applicable or unspecified -O3660X1 Maternal care for excessive fetal growth, unspecified trimester, fetus 1 -O3660X2 Maternal care for excessive fetal growth, unspecified trimester, fetus 2 -O3660X3 Maternal care for excessive fetal growth, unspecified trimester, fetus 3 -O3660X4 Maternal care for excessive fetal growth, unspecified trimester, fetus 4 -O3660X5 Maternal care for excessive fetal growth, unspecified trimester, fetus 5 -O3660X9 Maternal care for excessive fetal growth, unspecified trimester, other fetus -O3661X0 Maternal care for excessive fetal growth, first trimester, not applicable or unspecified -O3661X1 Maternal care for excessive fetal growth, first trimester, fetus 1 -O3661X2 Maternal care for excessive fetal growth, first trimester, fetus 2 -O3661X3 Maternal care for excessive fetal growth, first trimester, fetus 3 -O3661X4 Maternal care for excessive fetal growth, first trimester, fetus 4 -O3661X5 Maternal care for excessive fetal growth, first trimester, fetus 5 -O3661X9 Maternal care for excessive fetal growth, first trimester, other fetus -O3662X0 Maternal care for excessive fetal growth, second trimester, not applicable or unspecified -O3662X1 Maternal care for excessive fetal growth, second trimester, fetus 1 -O3662X2 Maternal care for excessive fetal growth, second trimester, fetus 2 -O3662X3 Maternal care for excessive fetal growth, second trimester, fetus 3 -O3662X4 Maternal care for excessive fetal growth, second trimester, fetus 4 -O3662X5 Maternal care for excessive fetal growth, second trimester, fetus 5 -O3662X9 Maternal care for excessive fetal growth, second trimester, other fetus -O3663X0 Maternal care for excessive fetal growth, third trimester, not applicable or unspecified -O3663X1 Maternal care for excessive fetal growth, third trimester, fetus 1 -O3663X2 Maternal care for excessive fetal growth, third trimester, fetus 2 -O3663X3 Maternal care for excessive fetal growth, third trimester, fetus 3 -O3663X4 Maternal care for excessive fetal growth, third trimester, fetus 4 -O3663X5 Maternal care for excessive fetal growth, third trimester, fetus 5 -O3663X9 Maternal care for excessive fetal growth, third trimester, other fetus -O3670X0 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, not applicable or unspecified -O3670X1 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, fetus 1 -O3670X2 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, fetus 2 -O3670X3 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, fetus 3 -O3670X4 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, fetus 4 -O3670X5 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, fetus 5 -O3670X9 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, other fetus -O3671X0 Maternal care for viable fetus in abdominal pregnancy, first trimester, not applicable or unspecified -O3671X1 Maternal care for viable fetus in abdominal pregnancy, first trimester, fetus 1 -O3671X2 Maternal care for viable fetus in abdominal pregnancy, first trimester, fetus 2 -O3671X3 Maternal care for viable fetus in abdominal pregnancy, first trimester, fetus 3 -O3671X4 Maternal care for viable fetus in abdominal pregnancy, first trimester, fetus 4 -O3671X5 Maternal care for viable fetus in abdominal pregnancy, first trimester, fetus 5 -O3671X9 Maternal care for viable fetus in abdominal pregnancy, first trimester, other fetus -O3672X0 Maternal care for viable fetus in abdominal pregnancy, second trimester, not applicable or unspecified -O3672X1 Maternal care for viable fetus in abdominal pregnancy, second trimester, fetus 1 -O3672X2 Maternal care for viable fetus in abdominal pregnancy, second trimester, fetus 2 -O3672X3 Maternal care for viable fetus in abdominal pregnancy, second trimester, fetus 3 -O3672X4 Maternal care for viable fetus in abdominal pregnancy, second trimester, fetus 4 -O3672X5 Maternal care for viable fetus in abdominal pregnancy, second trimester, fetus 5 -O3672X9 Maternal care for viable fetus in abdominal pregnancy, second trimester, other fetus -O3673X0 Maternal care for viable fetus in abdominal pregnancy, third trimester, not applicable or unspecified -O3673X1 Maternal care for viable fetus in abdominal pregnancy, third trimester, fetus 1 -O3673X2 Maternal care for viable fetus in abdominal pregnancy, third trimester, fetus 2 -O3673X3 Maternal care for viable fetus in abdominal pregnancy, third trimester, fetus 3 -O3673X4 Maternal care for viable fetus in abdominal pregnancy, third trimester, fetus 4 -O3673X5 Maternal care for viable fetus in abdominal pregnancy, third trimester, fetus 5 -O3673X9 Maternal care for viable fetus in abdominal pregnancy, third trimester, other fetus -O3680X0 Pregnancy with inconclusive fetal viability, not applicable or unspecified -O3680X1 Pregnancy with inconclusive fetal viability, fetus 1 -O3680X2 Pregnancy with inconclusive fetal viability, fetus 2 -O3680X3 Pregnancy with inconclusive fetal viability, fetus 3 -O3680X4 Pregnancy with inconclusive fetal viability, fetus 4 -O3680X5 Pregnancy with inconclusive fetal viability, fetus 5 -O3680X9 Pregnancy with inconclusive fetal viability, other fetus -O368120 Decreased fetal movements, second trimester, not applicable or unspecified -O368121 Decreased fetal movements, second trimester, fetus 1 -O368122 Decreased fetal movements, second trimester, fetus 2 -O368123 Decreased fetal movements, second trimester, fetus 3 -O368124 Decreased fetal movements, second trimester, fetus 4 -O368125 Decreased fetal movements, second trimester, fetus 5 -O368129 Decreased fetal movements, second trimester, other fetus -O368130 Decreased fetal movements, third trimester, not applicable or unspecified -O368131 Decreased fetal movements, third trimester, fetus 1 -O368132 Decreased fetal movements, third trimester, fetus 2 -O368133 Decreased fetal movements, third trimester, fetus 3 -O368134 Decreased fetal movements, third trimester, fetus 4 -O368135 Decreased fetal movements, third trimester, fetus 5 -O368139 Decreased fetal movements, third trimester, other fetus -O368190 Decreased fetal movements, unspecified trimester, not applicable or unspecified -O368191 Decreased fetal movements, unspecified trimester, fetus 1 -O368192 Decreased fetal movements, unspecified trimester, fetus 2 -O368193 Decreased fetal movements, unspecified trimester, fetus 3 -O368194 Decreased fetal movements, unspecified trimester, fetus 4 -O368195 Decreased fetal movements, unspecified trimester, fetus 5 -O368199 Decreased fetal movements, unspecified trimester, other fetus -O368210 Fetal anemia and thrombocytopenia, first trimester, not applicable or unspecified -O368211 Fetal anemia and thrombocytopenia, first trimester, fetus 1 -O368212 Fetal anemia and thrombocytopenia, first trimester, fetus 2 -O368213 Fetal anemia and thrombocytopenia, first trimester, fetus 3 -O368214 Fetal anemia and thrombocytopenia, first trimester, fetus 4 -O368215 Fetal anemia and thrombocytopenia, first trimester, fetus 5 -O368219 Fetal anemia and thrombocytopenia, first trimester, other fetus -O368220 Fetal anemia and thrombocytopenia, second trimester, not applicable or unspecified -O368221 Fetal anemia and thrombocytopenia, second trimester, fetus 1 -O368222 Fetal anemia and thrombocytopenia, second trimester, fetus 2 -O368223 Fetal anemia and thrombocytopenia, second trimester, fetus 3 -O368224 Fetal anemia and thrombocytopenia, second trimester, fetus 4 -O368225 Fetal anemia and thrombocytopenia, second trimester, fetus 5 -O368229 Fetal anemia and thrombocytopenia, second trimester, other fetus -O368230 Fetal anemia and thrombocytopenia, third trimester, not applicable or unspecified -O368231 Fetal anemia and thrombocytopenia, third trimester, fetus 1 -O368232 Fetal anemia and thrombocytopenia, third trimester, fetus 2 -O368233 Fetal anemia and thrombocytopenia, third trimester, fetus 3 -O368234 Fetal anemia and thrombocytopenia, third trimester, fetus 4 -O368235 Fetal anemia and thrombocytopenia, third trimester, fetus 5 -O368239 Fetal anemia and thrombocytopenia, third trimester, other fetus -O368290 Fetal anemia and thrombocytopenia, unspecified trimester, not applicable or unspecified -O368291 Fetal anemia and thrombocytopenia, unspecified trimester, fetus 1 -O368292 Fetal anemia and thrombocytopenia, unspecified trimester, fetus 2 -O368293 Fetal anemia and thrombocytopenia, unspecified trimester, fetus 3 -O368294 Fetal anemia and thrombocytopenia, unspecified trimester, fetus 4 -O368295 Fetal anemia and thrombocytopenia, unspecified trimester, fetus 5 -O368299 Fetal anemia and thrombocytopenia, unspecified trimester, other fetus -O368910 Maternal care for other specified fetal problems, first trimester, not applicable or unspecified -O368911 Maternal care for other specified fetal problems, first trimester, fetus 1 -O368912 Maternal care for other specified fetal problems, first trimester, fetus 2 -O368913 Maternal care for other specified fetal problems, first trimester, fetus 3 -O368914 Maternal care for other specified fetal problems, first trimester, fetus 4 -O368915 Maternal care for other specified fetal problems, first trimester, fetus 5 -O368919 Maternal care for other specified fetal problems, first trimester, other fetus -O368920 Maternal care for other specified fetal problems, second trimester, not applicable or unspecified -O368921 Maternal care for other specified fetal problems, second trimester, fetus 1 -O368922 Maternal care for other specified fetal problems, second trimester, fetus 2 -O368923 Maternal care for other specified fetal problems, second trimester, fetus 3 -O368924 Maternal care for other specified fetal problems, second trimester, fetus 4 -O368925 Maternal care for other specified fetal problems, second trimester, fetus 5 -O368929 Maternal care for other specified fetal problems, second trimester, other fetus -O368930 Maternal care for other specified fetal problems, third trimester, not applicable or unspecified -O368931 Maternal care for other specified fetal problems, third trimester, fetus 1 -O368932 Maternal care for other specified fetal problems, third trimester, fetus 2 -O368933 Maternal care for other specified fetal problems, third trimester, fetus 3 -O368934 Maternal care for other specified fetal problems, third trimester, fetus 4 -O368935 Maternal care for other specified fetal problems, third trimester, fetus 5 -O368939 Maternal care for other specified fetal problems, third trimester, other fetus -O368990 Maternal care for other specified fetal problems, unspecified trimester, not applicable or unspecified -O368991 Maternal care for other specified fetal problems, unspecified trimester, fetus 1 -O368992 Maternal care for other specified fetal problems, unspecified trimester, fetus 2 -O368993 Maternal care for other specified fetal problems, unspecified trimester, fetus 3 -O368994 Maternal care for other specified fetal problems, unspecified trimester, fetus 4 -O368995 Maternal care for other specified fetal problems, unspecified trimester, fetus 5 -O368999 Maternal care for other specified fetal problems, unspecified trimester, other fetus -O3690X0 Maternal care for fetal problem, unspecified, unspecified trimester, not applicable or unspecified -O3690X1 Maternal care for fetal problem, unspecified, unspecified trimester, fetus 1 -O3690X2 Maternal care for fetal problem, unspecified, unspecified trimester, fetus 2 -O3690X3 Maternal care for fetal problem, unspecified, unspecified trimester, fetus 3 -O3690X4 Maternal care for fetal problem, unspecified, unspecified trimester, fetus 4 -O3690X5 Maternal care for fetal problem, unspecified, unspecified trimester, fetus 5 -O3690X9 Maternal care for fetal problem, unspecified, unspecified trimester, other fetus -O3691X0 Maternal care for fetal problem, unspecified, first trimester, not applicable or unspecified -O3691X1 Maternal care for fetal problem, unspecified, first trimester, fetus 1 -O3691X2 Maternal care for fetal problem, unspecified, first trimester, fetus 2 -O3691X3 Maternal care for fetal problem, unspecified, first trimester, fetus 3 -O3691X4 Maternal care for fetal problem, unspecified, first trimester, fetus 4 -O3691X5 Maternal care for fetal problem, unspecified, first trimester, fetus 5 -O3691X9 Maternal care for fetal problem, unspecified, first trimester, other fetus -O3692X0 Maternal care for fetal problem, unspecified, second trimester, not applicable or unspecified -O3692X1 Maternal care for fetal problem, unspecified, second trimester, fetus 1 -O3692X2 Maternal care for fetal problem, unspecified, second trimester, fetus 2 -O3692X3 Maternal care for fetal problem, unspecified, second trimester, fetus 3 -O3692X4 Maternal care for fetal problem, unspecified, second trimester, fetus 4 -O3692X5 Maternal care for fetal problem, unspecified, second trimester, fetus 5 -O3692X9 Maternal care for fetal problem, unspecified, second trimester, other fetus -O3693X0 Maternal care for fetal problem, unspecified, third trimester, not applicable or unspecified -O3693X1 Maternal care for fetal problem, unspecified, third trimester, fetus 1 -O3693X2 Maternal care for fetal problem, unspecified, third trimester, fetus 2 -O3693X3 Maternal care for fetal problem, unspecified, third trimester, fetus 3 -O3693X4 Maternal care for fetal problem, unspecified, third trimester, fetus 4 -O3693X5 Maternal care for fetal problem, unspecified, third trimester, fetus 5 -O3693X9 Maternal care for fetal problem, unspecified, third trimester, other fetus -O401XX0 Polyhydramnios, first trimester, not applicable or unspecified -O401XX1 Polyhydramnios, first trimester, fetus 1 -O401XX2 Polyhydramnios, first trimester, fetus 2 -O401XX3 Polyhydramnios, first trimester, fetus 3 -O401XX4 Polyhydramnios, first trimester, fetus 4 -O401XX5 Polyhydramnios, first trimester, fetus 5 -O401XX9 Polyhydramnios, first trimester, other fetus -O402XX0 Polyhydramnios, second trimester, not applicable or unspecified -O402XX1 Polyhydramnios, second trimester, fetus 1 -O402XX2 Polyhydramnios, second trimester, fetus 2 -O402XX3 Polyhydramnios, second trimester, fetus 3 -O402XX4 Polyhydramnios, second trimester, fetus 4 -O402XX5 Polyhydramnios, second trimester, fetus 5 -O402XX9 Polyhydramnios, second trimester, other fetus -O403XX0 Polyhydramnios, third trimester, not applicable or unspecified -O403XX1 Polyhydramnios, third trimester, fetus 1 -O403XX2 Polyhydramnios, third trimester, fetus 2 -O403XX3 Polyhydramnios, third trimester, fetus 3 -O403XX4 Polyhydramnios, third trimester, fetus 4 -O403XX5 Polyhydramnios, third trimester, fetus 5 -O403XX9 Polyhydramnios, third trimester, other fetus -O409XX0 Polyhydramnios, unspecified trimester, not applicable or unspecified -O409XX1 Polyhydramnios, unspecified trimester, fetus 1 -O409XX2 Polyhydramnios, unspecified trimester, fetus 2 -O409XX3 Polyhydramnios, unspecified trimester, fetus 3 -O409XX4 Polyhydramnios, unspecified trimester, fetus 4 -O409XX5 Polyhydramnios, unspecified trimester, fetus 5 -O409XX9 Polyhydramnios, unspecified trimester, other fetus -O4100X0 Oligohydramnios, unspecified trimester, not applicable or unspecified -O4100X1 Oligohydramnios, unspecified trimester, fetus 1 -O4100X2 Oligohydramnios, unspecified trimester, fetus 2 -O4100X3 Oligohydramnios, unspecified trimester, fetus 3 -O4100X4 Oligohydramnios, unspecified trimester, fetus 4 -O4100X5 Oligohydramnios, unspecified trimester, fetus 5 -O4100X9 Oligohydramnios, unspecified trimester, other fetus -O4101X0 Oligohydramnios, first trimester, not applicable or unspecified -O4101X1 Oligohydramnios, first trimester, fetus 1 -O4101X2 Oligohydramnios, first trimester, fetus 2 -O4101X3 Oligohydramnios, first trimester, fetus 3 -O4101X4 Oligohydramnios, first trimester, fetus 4 -O4101X5 Oligohydramnios, first trimester, fetus 5 -O4101X9 Oligohydramnios, first trimester, other fetus -O4102X0 Oligohydramnios, second trimester, not applicable or unspecified -O4102X1 Oligohydramnios, second trimester, fetus 1 -O4102X2 Oligohydramnios, second trimester, fetus 2 -O4102X3 Oligohydramnios, second trimester, fetus 3 -O4102X4 Oligohydramnios, second trimester, fetus 4 -O4102X5 Oligohydramnios, second trimester, fetus 5 -O4102X9 Oligohydramnios, second trimester, other fetus -O4103X0 Oligohydramnios, third trimester, not applicable or unspecified -O4103X1 Oligohydramnios, third trimester, fetus 1 -O4103X2 Oligohydramnios, third trimester, fetus 2 -O4103X3 Oligohydramnios, third trimester, fetus 3 -O4103X4 Oligohydramnios, third trimester, fetus 4 -O4103X5 Oligohydramnios, third trimester, fetus 5 -O4103X9 Oligohydramnios, third trimester, other fetus -O411010 Infection of amniotic sac and membranes, unspecified, first trimester, not applicable or unspecified -O411011 Infection of amniotic sac and membranes, unspecified, first trimester, fetus 1 -O411012 Infection of amniotic sac and membranes, unspecified, first trimester, fetus 2 -O411013 Infection of amniotic sac and membranes, unspecified, first trimester, fetus 3 -O411014 Infection of amniotic sac and membranes, unspecified, first trimester, fetus 4 -O411015 Infection of amniotic sac and membranes, unspecified, first trimester, fetus 5 -O411019 Infection of amniotic sac and membranes, unspecified, first trimester, other fetus -O411020 Infection of amniotic sac and membranes, unspecified, second trimester, not applicable or unspecified -O411021 Infection of amniotic sac and membranes, unspecified, second trimester, fetus 1 -O411022 Infection of amniotic sac and membranes, unspecified, second trimester, fetus 2 -O411023 Infection of amniotic sac and membranes, unspecified, second trimester, fetus 3 -O411024 Infection of amniotic sac and membranes, unspecified, second trimester, fetus 4 -O411025 Infection of amniotic sac and membranes, unspecified, second trimester, fetus 5 -O411029 Infection of amniotic sac and membranes, unspecified, second trimester, other fetus -O411030 Infection of amniotic sac and membranes, unspecified, third trimester, not applicable or unspecified -O411031 Infection of amniotic sac and membranes, unspecified, third trimester, fetus 1 -O411032 Infection of amniotic sac and membranes, unspecified, third trimester, fetus 2 -O411033 Infection of amniotic sac and membranes, unspecified, third trimester, fetus 3 -O411034 Infection of amniotic sac and membranes, unspecified, third trimester, fetus 4 -O411035 Infection of amniotic sac and membranes, unspecified, third trimester, fetus 5 -O411039 Infection of amniotic sac and membranes, unspecified, third trimester, other fetus -O411090 Infection of amniotic sac and membranes, unspecified, unspecified trimester, not applicable or unspecified -O411091 Infection of amniotic sac and membranes, unspecified, unspecified trimester, fetus 1 -O411092 Infection of amniotic sac and membranes, unspecified, unspecified trimester, fetus 2 -O411093 Infection of amniotic sac and membranes, unspecified, unspecified trimester, fetus 3 -O411094 Infection of amniotic sac and membranes, unspecified, unspecified trimester, fetus 4 -O411095 Infection of amniotic sac and membranes, unspecified, unspecified trimester, fetus 5 -O411099 Infection of amniotic sac and membranes, unspecified, unspecified trimester, other fetus -O411210 Chorioamnionitis, first trimester, not applicable or unspecified -O411211 Chorioamnionitis, first trimester, fetus 1 -O411212 Chorioamnionitis, first trimester, fetus 2 -O411213 Chorioamnionitis, first trimester, fetus 3 -O411214 Chorioamnionitis, first trimester, fetus 4 -O411215 Chorioamnionitis, first trimester, fetus 5 -O411219 Chorioamnionitis, first trimester, other fetus -O411220 Chorioamnionitis, second trimester, not applicable or unspecified -O411221 Chorioamnionitis, second trimester, fetus 1 -O411222 Chorioamnionitis, second trimester, fetus 2 -O411223 Chorioamnionitis, second trimester, fetus 3 -O411224 Chorioamnionitis, second trimester, fetus 4 -O411225 Chorioamnionitis, second trimester, fetus 5 -O411229 Chorioamnionitis, second trimester, other fetus -O411230 Chorioamnionitis, third trimester, not applicable or unspecified -O411231 Chorioamnionitis, third trimester, fetus 1 -O411232 Chorioamnionitis, third trimester, fetus 2 -O411233 Chorioamnionitis, third trimester, fetus 3 -O411234 Chorioamnionitis, third trimester, fetus 4 -O411235 Chorioamnionitis, third trimester, fetus 5 -O411239 Chorioamnionitis, third trimester, other fetus -O411290 Chorioamnionitis, unspecified trimester, not applicable or unspecified -O411291 Chorioamnionitis, unspecified trimester, fetus 1 -O411292 Chorioamnionitis, unspecified trimester, fetus 2 -O411293 Chorioamnionitis, unspecified trimester, fetus 3 -O411294 Chorioamnionitis, unspecified trimester, fetus 4 -O411295 Chorioamnionitis, unspecified trimester, fetus 5 -O411299 Chorioamnionitis, unspecified trimester, other fetus -O411410 Placentitis, first trimester, not applicable or unspecified -O411411 Placentitis, first trimester, fetus 1 -O411412 Placentitis, first trimester, fetus 2 -O411413 Placentitis, first trimester, fetus 3 -O411414 Placentitis, first trimester, fetus 4 -O411415 Placentitis, first trimester, fetus 5 -O411419 Placentitis, first trimester, other fetus -O411420 Placentitis, second trimester, not applicable or unspecified -O411421 Placentitis, second trimester, fetus 1 -O411422 Placentitis, second trimester, fetus 2 -O411423 Placentitis, second trimester, fetus 3 -O411424 Placentitis, second trimester, fetus 4 -O411425 Placentitis, second trimester, fetus 5 -O411429 Placentitis, second trimester, other fetus -O411430 Placentitis, third trimester, not applicable or unspecified -O411431 Placentitis, third trimester, fetus 1 -O411432 Placentitis, third trimester, fetus 2 -O411433 Placentitis, third trimester, fetus 3 -O411434 Placentitis, third trimester, fetus 4 -O411435 Placentitis, third trimester, fetus 5 -O411439 Placentitis, third trimester, other fetus -O411490 Placentitis, unspecified trimester, not applicable or unspecified -O411491 Placentitis, unspecified trimester, fetus 1 -O411492 Placentitis, unspecified trimester, fetus 2 -O411493 Placentitis, unspecified trimester, fetus 3 -O411494 Placentitis, unspecified trimester, fetus 4 -O411495 Placentitis, unspecified trimester, fetus 5 -O411499 Placentitis, unspecified trimester, other fetus -O418X10 Other specified disorders of amniotic fluid and membranes, first trimester, not applicable or unspecified -O418X11 Other specified disorders of amniotic fluid and membranes, first trimester, fetus 1 -O418X12 Other specified disorders of amniotic fluid and membranes, first trimester, fetus 2 -O418X13 Other specified disorders of amniotic fluid and membranes, first trimester, fetus 3 -O418X14 Other specified disorders of amniotic fluid and membranes, first trimester, fetus 4 -O418X15 Other specified disorders of amniotic fluid and membranes, first trimester, fetus 5 -O418X19 Other specified disorders of amniotic fluid and membranes, first trimester, other fetus -O418X20 Other specified disorders of amniotic fluid and membranes, second trimester, not applicable or unspecified -O418X21 Other specified disorders of amniotic fluid and membranes, second trimester, fetus 1 -O418X22 Other specified disorders of amniotic fluid and membranes, second trimester, fetus 2 -O418X23 Other specified disorders of amniotic fluid and membranes, second trimester, fetus 3 -O418X24 Other specified disorders of amniotic fluid and membranes, second trimester, fetus 4 -O418X25 Other specified disorders of amniotic fluid and membranes, second trimester, fetus 5 -O418X29 Other specified disorders of amniotic fluid and membranes, second trimester, other fetus -O418X30 Other specified disorders of amniotic fluid and membranes, third trimester, not applicable or unspecified -O418X31 Other specified disorders of amniotic fluid and membranes, third trimester, fetus 1 -O418X32 Other specified disorders of amniotic fluid and membranes, third trimester, fetus 2 -O418X33 Other specified disorders of amniotic fluid and membranes, third trimester, fetus 3 -O418X34 Other specified disorders of amniotic fluid and membranes, third trimester, fetus 4 -O418X35 Other specified disorders of amniotic fluid and membranes, third trimester, fetus 5 -O418X39 Other specified disorders of amniotic fluid and membranes, third trimester, other fetus -O418X90 Other specified disorders of amniotic fluid and membranes, unspecified trimester, not applicable or unspecified -O418X91 Other specified disorders of amniotic fluid and membranes, unspecified trimester, fetus 1 -O418X92 Other specified disorders of amniotic fluid and membranes, unspecified trimester, fetus 2 -O418X93 Other specified disorders of amniotic fluid and membranes, unspecified trimester, fetus 3 -O418X94 Other specified disorders of amniotic fluid and membranes, unspecified trimester, fetus 4 -O418X95 Other specified disorders of amniotic fluid and membranes, unspecified trimester, fetus 5 -O418X99 Other specified disorders of amniotic fluid and membranes, unspecified trimester, other fetus -O4190X0 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, not applicable or unspecified -O4190X1 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, fetus 1 -O4190X2 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, fetus 2 -O4190X3 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, fetus 3 -O4190X4 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, fetus 4 -O4190X5 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, fetus 5 -O4190X9 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, other fetus -O4191X0 Disorder of amniotic fluid and membranes, unspecified, first trimester, not applicable or unspecified -O4191X1 Disorder of amniotic fluid and membranes, unspecified, first trimester, fetus 1 -O4191X2 Disorder of amniotic fluid and membranes, unspecified, first trimester, fetus 2 -O4191X3 Disorder of amniotic fluid and membranes, unspecified, first trimester, fetus 3 -O4191X4 Disorder of amniotic fluid and membranes, unspecified, first trimester, fetus 4 -O4191X5 Disorder of amniotic fluid and membranes, unspecified, first trimester, fetus 5 -O4191X9 Disorder of amniotic fluid and membranes, unspecified, first trimester, other fetus -O4192X0 Disorder of amniotic fluid and membranes, unspecified, second trimester, not applicable or unspecified -O4192X1 Disorder of amniotic fluid and membranes, unspecified, second trimester, fetus 1 -O4192X2 Disorder of amniotic fluid and membranes, unspecified, second trimester, fetus 2 -O4192X3 Disorder of amniotic fluid and membranes, unspecified, second trimester, fetus 3 -O4192X4 Disorder of amniotic fluid and membranes, unspecified, second trimester, fetus 4 -O4192X5 Disorder of amniotic fluid and membranes, unspecified, second trimester, fetus 5 -O4192X9 Disorder of amniotic fluid and membranes, unspecified, second trimester, other fetus -O4193X0 Disorder of amniotic fluid and membranes, unspecified, third trimester, not applicable or unspecified -O4193X1 Disorder of amniotic fluid and membranes, unspecified, third trimester, fetus 1 -O4193X2 Disorder of amniotic fluid and membranes, unspecified, third trimester, fetus 2 -O4193X3 Disorder of amniotic fluid and membranes, unspecified, third trimester, fetus 3 -O4193X4 Disorder of amniotic fluid and membranes, unspecified, third trimester, fetus 4 -O4193X5 Disorder of amniotic fluid and membranes, unspecified, third trimester, fetus 5 -O4193X9 Disorder of amniotic fluid and membranes, unspecified, third trimester, other fetus -O4200 Premature rupture of membranes, onset of labor within 24 hours of rupture, unspecified weeks of gestation -O42011 Preterm premature rupture of membranes, onset of labor within 24 hours of rupture, first trimester -O42012 Preterm premature rupture of membranes, onset of labor within 24 hours of rupture, second trimester -O42013 Preterm premature rupture of membranes, onset of labor within 24 hours of rupture, third trimester -O42019 Preterm premature rupture of membranes, onset of labor within 24 hours of rupture, unspecified trimester -O4202 Full-term premature rupture of membranes, onset of labor within 24 hours of rupture -O4210 Premature rupture of membranes, onset of labor more than 24 hours following rupture, unspecified weeks of gestation -O42111 Preterm premature rupture of membranes, onset of labor more than 24 hours following rupture, first trimester -O42112 Preterm premature rupture of membranes, onset of labor more than 24 hours following rupture, second trimester -O42113 Preterm premature rupture of membranes, onset of labor more than 24 hours following rupture, third trimester -O42119 Preterm premature rupture of membranes, onset of labor more than 24 hours following rupture, unspecified trimester -O4212 Full-term premature rupture of membranes, onset of labor more than 24 hours following rupture -O4290 Premature rupture of membranes, unspecified as to length of time between rupture and onset of labor, unspecified weeks of gestation -O42911 Preterm premature rupture of membranes, unspecified as to length of time between rupture and onset of labor, first trimester -O42912 Preterm premature rupture of membranes, unspecified as to length of time between rupture and onset of labor, second trimester -O42913 Preterm premature rupture of membranes, unspecified as to length of time between rupture and onset of labor, third trimester -O42919 Preterm premature rupture of membranes, unspecified as to length of time between rupture and onset of labor, unspecified trimester -O4292 Full-term premature rupture of membranes, unspecified as to length of time between rupture and onset of labor -O43011 Fetomaternal placental transfusion syndrome, first trimester -O43012 Fetomaternal placental transfusion syndrome, second trimester -O43013 Fetomaternal placental transfusion syndrome, third trimester -O43019 Fetomaternal placental transfusion syndrome, unspecified trimester -O43021 Fetus-to-fetus placental transfusion syndrome, first trimester -O43022 Fetus-to-fetus placental transfusion syndrome, second trimester -O43023 Fetus-to-fetus placental transfusion syndrome, third trimester -O43029 Fetus-to-fetus placental transfusion syndrome, unspecified trimester -O43101 Malformation of placenta, unspecified, first trimester -O43102 Malformation of placenta, unspecified, second trimester -O43103 Malformation of placenta, unspecified, third trimester -O43109 Malformation of placenta, unspecified, unspecified trimester -O43111 Circumvallate placenta, first trimester -O43112 Circumvallate placenta, second trimester -O43113 Circumvallate placenta, third trimester -O43119 Circumvallate placenta, unspecified trimester -O43121 Velamentous insertion of umbilical cord, first trimester -O43122 Velamentous insertion of umbilical cord, second trimester -O43123 Velamentous insertion of umbilical cord, third trimester -O43129 Velamentous insertion of umbilical cord, unspecified trimester -O43191 Other malformation of placenta, first trimester -O43192 Other malformation of placenta, second trimester -O43193 Other malformation of placenta, third trimester -O43199 Other malformation of placenta, unspecified trimester -O43211 Placenta accreta, first trimester -O43212 Placenta accreta, second trimester -O43213 Placenta accreta, third trimester -O43219 Placenta accreta, unspecified trimester -O43221 Placenta increta, first trimester -O43222 Placenta increta, second trimester -O43223 Placenta increta, third trimester -O43229 Placenta increta, unspecified trimester -O43231 Placenta percreta, first trimester -O43232 Placenta percreta, second trimester -O43233 Placenta percreta, third trimester -O43239 Placenta percreta, unspecified trimester -O43811 Placental infarction, first trimester -O43812 Placental infarction, second trimester -O43813 Placental infarction, third trimester -O43819 Placental infarction, unspecified trimester -O43891 Other placental disorders, first trimester -O43892 Other placental disorders, second trimester -O43893 Other placental disorders, third trimester -O43899 Other placental disorders, unspecified trimester -O4390 Unspecified placental disorder, unspecified trimester -O4391 Unspecified placental disorder, first trimester -O4392 Unspecified placental disorder, second trimester -O4393 Unspecified placental disorder, third trimester -O4400 Placenta previa specified as without hemorrhage, unspecified trimester -O4401 Placenta previa specified as without hemorrhage, first trimester -O4402 Placenta previa specified as without hemorrhage, second trimester -O4403 Placenta previa specified as without hemorrhage, third trimester -O4410 Placenta previa with hemorrhage, unspecified trimester -O4411 Placenta previa with hemorrhage, first trimester -O4412 Placenta previa with hemorrhage, second trimester -O4413 Placenta previa with hemorrhage, third trimester -O45001 Premature separation of placenta with coagulation defect, unspecified, first trimester -O45002 Premature separation of placenta with coagulation defect, unspecified, second trimester -O45003 Premature separation of placenta with coagulation defect, unspecified, third trimester -O45009 Premature separation of placenta with coagulation defect, unspecified, unspecified trimester -O45011 Premature separation of placenta with afibrinogenemia, first trimester -O45012 Premature separation of placenta with afibrinogenemia, second trimester -O45013 Premature separation of placenta with afibrinogenemia, third trimester -O45019 Premature separation of placenta with afibrinogenemia, unspecified trimester -O45021 Premature separation of placenta with disseminated intravascular coagulation, first trimester -O45022 Premature separation of placenta with disseminated intravascular coagulation, second trimester -O45023 Premature separation of placenta with disseminated intravascular coagulation, third trimester -O45029 Premature separation of placenta with disseminated intravascular coagulation, unspecified trimester -O45091 Premature separation of placenta with other coagulation defect, first trimester -O45092 Premature separation of placenta with other coagulation defect, second trimester -O45093 Premature separation of placenta with other coagulation defect, third trimester -O45099 Premature separation of placenta with other coagulation defect, unspecified trimester -O458X1 Other premature separation of placenta, first trimester -O458X2 Other premature separation of placenta, second trimester -O458X3 Other premature separation of placenta, third trimester -O458X9 Other premature separation of placenta, unspecified trimester -O4590 Premature separation of placenta, unspecified, unspecified trimester -O4591 Premature separation of placenta, unspecified, first trimester -O4592 Premature separation of placenta, unspecified, second trimester -O4593 Premature separation of placenta, unspecified, third trimester -O46001 Antepartum hemorrhage with coagulation defect, unspecified, first trimester -O46002 Antepartum hemorrhage with coagulation defect, unspecified, second trimester -O46003 Antepartum hemorrhage with coagulation defect, unspecified, third trimester -O46009 Antepartum hemorrhage with coagulation defect, unspecified, unspecified trimester -O46011 Antepartum hemorrhage with afibrinogenemia, first trimester -O46012 Antepartum hemorrhage with afibrinogenemia, second trimester -O46013 Antepartum hemorrhage with afibrinogenemia, third trimester -O46019 Antepartum hemorrhage with afibrinogenemia, unspecified trimester -O46021 Antepartum hemorrhage with disseminated intravascular coagulation, first trimester -O46022 Antepartum hemorrhage with disseminated intravascular coagulation, second trimester -O46023 Antepartum hemorrhage with disseminated intravascular coagulation, third trimester -O46029 Antepartum hemorrhage with disseminated intravascular coagulation, unspecified trimester -O46091 Antepartum hemorrhage with other coagulation defect, first trimester -O46092 Antepartum hemorrhage with other coagulation defect, second trimester -O46093 Antepartum hemorrhage with other coagulation defect, third trimester -O46099 Antepartum hemorrhage with other coagulation defect, unspecified trimester -O468X1 Other antepartum hemorrhage, first trimester -O468X2 Other antepartum hemorrhage, second trimester -O468X3 Other antepartum hemorrhage, third trimester -O468X9 Other antepartum hemorrhage, unspecified trimester -O4690 Antepartum hemorrhage, unspecified, unspecified trimester -O4691 Antepartum hemorrhage, unspecified, first trimester -O4692 Antepartum hemorrhage, unspecified, second trimester -O4693 Antepartum hemorrhage, unspecified, third trimester -O4700 False labor before 37 completed weeks of gestation, unspecified trimester -O4702 False labor before 37 completed weeks of gestation, second trimester -O4703 False labor before 37 completed weeks of gestation, third trimester -O471 False labor at or after 37 completed weeks of gestation -O479 False labor, unspecified -O480 Post-term pregnancy -O481 Prolonged pregnancy -O6000 Preterm labor without delivery, unspecified trimester -O6002 Preterm labor without delivery, second trimester -O6003 Preterm labor without delivery, third trimester -O6010X0 Preterm labor with preterm delivery, unspecified trimester, not applicable or unspecified -O6010X1 Preterm labor with preterm delivery, unspecified trimester, fetus 1 -O6010X2 Preterm labor with preterm delivery, unspecified trimester, fetus 2 -O6010X3 Preterm labor with preterm delivery, unspecified trimester, fetus 3 -O6010X4 Preterm labor with preterm delivery, unspecified trimester, fetus 4 -O6010X5 Preterm labor with preterm delivery, unspecified trimester, fetus 5 -O6010X9 Preterm labor with preterm delivery, unspecified trimester, other fetus -O6012X0 Preterm labor second trimester with preterm delivery second trimester, not applicable or unspecified -O6012X1 Preterm labor second trimester with preterm delivery second trimester, fetus 1 -O6012X2 Preterm labor second trimester with preterm delivery second trimester, fetus 2 -O6012X3 Preterm labor second trimester with preterm delivery second trimester, fetus 3 -O6012X4 Preterm labor second trimester with preterm delivery second trimester, fetus 4 -O6012X5 Preterm labor second trimester with preterm delivery second trimester, fetus 5 -O6012X9 Preterm labor second trimester with preterm delivery second trimester, other fetus -O6013X0 Preterm labor second trimester with preterm delivery third trimester, not applicable or unspecified -O6013X1 Preterm labor second trimester with preterm delivery third trimester, fetus 1 -O6013X2 Preterm labor second trimester with preterm delivery third trimester, fetus 2 -O6013X3 Preterm labor second trimester with preterm delivery third trimester, fetus 3 -O6013X4 Preterm labor second trimester with preterm delivery third trimester, fetus 4 -O6013X5 Preterm labor second trimester with preterm delivery third trimester, fetus 5 -O6013X9 Preterm labor second trimester with preterm delivery third trimester, other fetus -O6014X0 Preterm labor third trimester with preterm delivery third trimester, not applicable or unspecified -O6014X1 Preterm labor third trimester with preterm delivery third trimester, fetus 1 -O6014X2 Preterm labor third trimester with preterm delivery third trimester, fetus 2 -O6014X3 Preterm labor third trimester with preterm delivery third trimester, fetus 3 -O6014X4 Preterm labor third trimester with preterm delivery third trimester, fetus 4 -O6014X5 Preterm labor third trimester with preterm delivery third trimester, fetus 5 -O6014X9 Preterm labor third trimester with preterm delivery third trimester, other fetus -O6020X0 Term delivery with preterm labor, unspecified trimester, not applicable or unspecified -O6020X1 Term delivery with preterm labor, unspecified trimester, fetus 1 -O6020X2 Term delivery with preterm labor, unspecified trimester, fetus 2 -O6020X3 Term delivery with preterm labor, unspecified trimester, fetus 3 -O6020X4 Term delivery with preterm labor, unspecified trimester, fetus 4 -O6020X5 Term delivery with preterm labor, unspecified trimester, fetus 5 -O6020X9 Term delivery with preterm labor, unspecified trimester, other fetus -O6022X0 Term delivery with preterm labor, second trimester, not applicable or unspecified -O6022X1 Term delivery with preterm labor, second trimester, fetus 1 -O6022X2 Term delivery with preterm labor, second trimester, fetus 2 -O6022X3 Term delivery with preterm labor, second trimester, fetus 3 -O6022X4 Term delivery with preterm labor, second trimester, fetus 4 -O6022X5 Term delivery with preterm labor, second trimester, fetus 5 -O6022X9 Term delivery with preterm labor, second trimester, other fetus -O6023X0 Term delivery with preterm labor, third trimester, not applicable or unspecified -O6023X1 Term delivery with preterm labor, third trimester, fetus 1 -O6023X2 Term delivery with preterm labor, third trimester, fetus 2 -O6023X3 Term delivery with preterm labor, third trimester, fetus 3 -O6023X4 Term delivery with preterm labor, third trimester, fetus 4 -O6023X5 Term delivery with preterm labor, third trimester, fetus 5 -O6023X9 Term delivery with preterm labor, third trimester, other fetus -O610 Failed medical induction of labor -O611 Failed instrumental induction of labor -O618 Other failed induction of labor -O619 Failed induction of labor, unspecified -O620 Primary inadequate contractions -O621 Secondary uterine inertia -O622 Other uterine inertia -O623 Precipitate labor -O624 Hypertonic, incoordinate, and prolonged uterine contractions -O628 Other abnormalities of forces of labor -O629 Abnormality of forces of labor, unspecified -O630 Prolonged first stage (of labor) -O631 Prolonged second stage (of labor) -O632 Delayed delivery of second twin, triplet, etc. -O639 Long labor, unspecified -O640XX0 Obstructed labor due to incomplete rotation of fetal head, not applicable or unspecified -O640XX1 Obstructed labor due to incomplete rotation of fetal head, fetus 1 -O640XX2 Obstructed labor due to incomplete rotation of fetal head, fetus 2 -O640XX3 Obstructed labor due to incomplete rotation of fetal head, fetus 3 -O640XX4 Obstructed labor due to incomplete rotation of fetal head, fetus 4 -O640XX5 Obstructed labor due to incomplete rotation of fetal head, fetus 5 -O640XX9 Obstructed labor due to incomplete rotation of fetal head, other fetus -O641XX0 Obstructed labor due to breech presentation, not applicable or unspecified -O641XX1 Obstructed labor due to breech presentation, fetus 1 -O641XX2 Obstructed labor due to breech presentation, fetus 2 -O641XX3 Obstructed labor due to breech presentation, fetus 3 -O641XX4 Obstructed labor due to breech presentation, fetus 4 -O641XX5 Obstructed labor due to breech presentation, fetus 5 -O641XX9 Obstructed labor due to breech presentation, other fetus -O642XX0 Obstructed labor due to face presentation, not applicable or unspecified -O642XX1 Obstructed labor due to face presentation, fetus 1 -O642XX2 Obstructed labor due to face presentation, fetus 2 -O642XX3 Obstructed labor due to face presentation, fetus 3 -O642XX4 Obstructed labor due to face presentation, fetus 4 -O642XX5 Obstructed labor due to face presentation, fetus 5 -O642XX9 Obstructed labor due to face presentation, other fetus -O643XX0 Obstructed labor due to brow presentation, not applicable or unspecified -O643XX1 Obstructed labor due to brow presentation, fetus 1 -O643XX2 Obstructed labor due to brow presentation, fetus 2 -O643XX3 Obstructed labor due to brow presentation, fetus 3 -O643XX4 Obstructed labor due to brow presentation, fetus 4 -O643XX5 Obstructed labor due to brow presentation, fetus 5 -O643XX9 Obstructed labor due to brow presentation, other fetus -O644XX0 Obstructed labor due to shoulder presentation, not applicable or unspecified -O644XX1 Obstructed labor due to shoulder presentation, fetus 1 -O644XX2 Obstructed labor due to shoulder presentation, fetus 2 -O644XX3 Obstructed labor due to shoulder presentation, fetus 3 -O644XX4 Obstructed labor due to shoulder presentation, fetus 4 -O644XX5 Obstructed labor due to shoulder presentation, fetus 5 -O644XX9 Obstructed labor due to shoulder presentation, other fetus -O645XX0 Obstructed labor due to compound presentation, not applicable or unspecified -O645XX1 Obstructed labor due to compound presentation, fetus 1 -O645XX2 Obstructed labor due to compound presentation, fetus 2 -O645XX3 Obstructed labor due to compound presentation, fetus 3 -O645XX4 Obstructed labor due to compound presentation, fetus 4 -O645XX5 Obstructed labor due to compound presentation, fetus 5 -O645XX9 Obstructed labor due to compound presentation, other fetus -O648XX0 Obstructed labor due to other malposition and malpresentation, not applicable or unspecified -O648XX1 Obstructed labor due to other malposition and malpresentation, fetus 1 -O648XX2 Obstructed labor due to other malposition and malpresentation, fetus 2 -O648XX3 Obstructed labor due to other malposition and malpresentation, fetus 3 -O648XX4 Obstructed labor due to other malposition and malpresentation, fetus 4 -O648XX5 Obstructed labor due to other malposition and malpresentation, fetus 5 -O648XX9 Obstructed labor due to other malposition and malpresentation, other fetus -O649XX0 Obstructed labor due to malposition and malpresentation, unspecified, not applicable or unspecified -O649XX1 Obstructed labor due to malposition and malpresentation, unspecified, fetus 1 -O649XX2 Obstructed labor due to malposition and malpresentation, unspecified, fetus 2 -O649XX3 Obstructed labor due to malposition and malpresentation, unspecified, fetus 3 -O649XX4 Obstructed labor due to malposition and malpresentation, unspecified, fetus 4 -O649XX5 Obstructed labor due to malposition and malpresentation, unspecified, fetus 5 -O649XX9 Obstructed labor due to malposition and malpresentation, unspecified, other fetus -O650 Obstructed labor due to deformed pelvis -O651 Obstructed labor due to generally contracted pelvis -O652 Obstructed labor due to pelvic inlet contraction -O653 Obstructed labor due to pelvic outlet and mid-cavity contraction -O654 Obstructed labor due to fetopelvic disproportion, unspecified -O655 Obstructed labor due to abnormality of maternal pelvic organs -O658 Obstructed labor due to other maternal pelvic abnormalities -O659 Obstructed labor due to maternal pelvic abnormality, unspecified -O660 Obstructed labor due to shoulder dystocia -O661 Obstructed labor due to locked twins -O662 Obstructed labor due to unusually large fetus -O663 Obstructed labor due to other abnormalities of fetus -O6640 Failed trial of labor, unspecified -O6641 Failed attempted vaginal birth after previous cesarean delivery -O665 Attempted application of vacuum extractor and forceps -O666 Obstructed labor due to other multiple fetuses -O668 Other specified obstructed labor -O669 Obstructed labor, unspecified -O670 Intrapartum hemorrhage with coagulation defect -O678 Other intrapartum hemorrhage -O679 Intrapartum hemorrhage, unspecified -O68 Labor and delivery complicated by abnormality of fetal acid-base balance -O690XX0 Labor and delivery complicated by prolapse of cord, not applicable or unspecified -O690XX1 Labor and delivery complicated by prolapse of cord, fetus 1 -O690XX2 Labor and delivery complicated by prolapse of cord, fetus 2 -O690XX3 Labor and delivery complicated by prolapse of cord, fetus 3 -O690XX4 Labor and delivery complicated by prolapse of cord, fetus 4 -O690XX5 Labor and delivery complicated by prolapse of cord, fetus 5 -O690XX9 Labor and delivery complicated by prolapse of cord, other fetus -O691XX0 Labor and delivery complicated by cord around neck, with compression, not applicable or unspecified -O691XX1 Labor and delivery complicated by cord around neck, with compression, fetus 1 -O691XX2 Labor and delivery complicated by cord around neck, with compression, fetus 2 -O691XX3 Labor and delivery complicated by cord around neck, with compression, fetus 3 -O691XX4 Labor and delivery complicated by cord around neck, with compression, fetus 4 -O691XX5 Labor and delivery complicated by cord around neck, with compression, fetus 5 -O691XX9 Labor and delivery complicated by cord around neck, with compression, other fetus -O692XX0 Labor and delivery complicated by other cord entanglement, with compression, not applicable or unspecified -O692XX1 Labor and delivery complicated by other cord entanglement, with compression, fetus 1 -O692XX2 Labor and delivery complicated by other cord entanglement, with compression, fetus 2 -O692XX3 Labor and delivery complicated by other cord entanglement, with compression, fetus 3 -O692XX4 Labor and delivery complicated by other cord entanglement, with compression, fetus 4 -O692XX5 Labor and delivery complicated by other cord entanglement, with compression, fetus 5 -O692XX9 Labor and delivery complicated by other cord entanglement, with compression, other fetus -O693XX0 Labor and delivery complicated by short cord, not applicable or unspecified -O693XX1 Labor and delivery complicated by short cord, fetus 1 -O693XX2 Labor and delivery complicated by short cord, fetus 2 -O693XX3 Labor and delivery complicated by short cord, fetus 3 -O693XX4 Labor and delivery complicated by short cord, fetus 4 -O693XX5 Labor and delivery complicated by short cord, fetus 5 -O693XX9 Labor and delivery complicated by short cord, other fetus -O694XX0 Labor and delivery complicated by vasa previa, not applicable or unspecified -O694XX1 Labor and delivery complicated by vasa previa, fetus 1 -O694XX2 Labor and delivery complicated by vasa previa, fetus 2 -O694XX3 Labor and delivery complicated by vasa previa, fetus 3 -O694XX4 Labor and delivery complicated by vasa previa, fetus 4 -O694XX5 Labor and delivery complicated by vasa previa, fetus 5 -O694XX9 Labor and delivery complicated by vasa previa, other fetus -O695XX0 Labor and delivery complicated by vascular lesion of cord, not applicable or unspecified -O695XX1 Labor and delivery complicated by vascular lesion of cord, fetus 1 -O695XX2 Labor and delivery complicated by vascular lesion of cord, fetus 2 -O695XX3 Labor and delivery complicated by vascular lesion of cord, fetus 3 -O695XX4 Labor and delivery complicated by vascular lesion of cord, fetus 4 -O695XX5 Labor and delivery complicated by vascular lesion of cord, fetus 5 -O695XX9 Labor and delivery complicated by vascular lesion of cord, other fetus -O6981X0 Labor and delivery complicated by cord around neck, without compression, not applicable or unspecified -O6981X1 Labor and delivery complicated by cord around neck, without compression, fetus 1 -O6981X2 Labor and delivery complicated by cord around neck, without compression, fetus 2 -O6981X3 Labor and delivery complicated by cord around neck, without compression, fetus 3 -O6981X4 Labor and delivery complicated by cord around neck, without compression, fetus 4 -O6981X5 Labor and delivery complicated by cord around neck, without compression, fetus 5 -O6981X9 Labor and delivery complicated by cord around neck, without compression, other fetus -O6982X0 Labor and delivery complicated by other cord entanglement, without compression, not applicable or unspecified -O6982X1 Labor and delivery complicated by other cord entanglement, without compression, fetus 1 -O6982X2 Labor and delivery complicated by other cord entanglement, without compression, fetus 2 -O6982X3 Labor and delivery complicated by other cord entanglement, without compression, fetus 3 -O6982X4 Labor and delivery complicated by other cord entanglement, without compression, fetus 4 -O6982X5 Labor and delivery complicated by other cord entanglement, without compression, fetus 5 -O6982X9 Labor and delivery complicated by other cord entanglement, without compression, other fetus -O6989X0 Labor and delivery complicated by other cord complications, not applicable or unspecified -O6989X1 Labor and delivery complicated by other cord complications, fetus 1 -O6989X2 Labor and delivery complicated by other cord complications, fetus 2 -O6989X3 Labor and delivery complicated by other cord complications, fetus 3 -O6989X4 Labor and delivery complicated by other cord complications, fetus 4 -O6989X5 Labor and delivery complicated by other cord complications, fetus 5 -O6989X9 Labor and delivery complicated by other cord complications, other fetus -O699XX0 Labor and delivery complicated by cord complication, unspecified, not applicable or unspecified -O699XX1 Labor and delivery complicated by cord complication, unspecified, fetus 1 -O699XX2 Labor and delivery complicated by cord complication, unspecified, fetus 2 -O699XX3 Labor and delivery complicated by cord complication, unspecified, fetus 3 -O699XX4 Labor and delivery complicated by cord complication, unspecified, fetus 4 -O699XX5 Labor and delivery complicated by cord complication, unspecified, fetus 5 -O699XX9 Labor and delivery complicated by cord complication, unspecified, other fetus -O700 First degree perineal laceration during delivery -O701 Second degree perineal laceration during delivery -O702 Third degree perineal laceration during delivery -O703 Fourth degree perineal laceration during delivery -O704 Anal sphincter tear complicating delivery, not associated with third degree laceration -O709 Perineal laceration during delivery, unspecified -O7100 Rupture of uterus before onset of labor, unspecified trimester -O7102 Rupture of uterus before onset of labor, second trimester -O7103 Rupture of uterus before onset of labor, third trimester -O711 Rupture of uterus during labor -O712 Postpartum inversion of uterus -O713 Obstetric laceration of cervix -O714 Obstetric high vaginal laceration alone -O715 Other obstetric injury to pelvic organs -O716 Obstetric damage to pelvic joints and ligaments -O717 Obstetric hematoma of pelvis -O7181 Laceration of uterus, not elsewhere classified -O7182 Other specified trauma to perineum and vulva -O7189 Other specified obstetric trauma -O719 Obstetric trauma, unspecified -O720 Third-stage hemorrhage -O721 Other immediate postpartum hemorrhage -O722 Delayed and secondary postpartum hemorrhage -O723 Postpartum coagulation defects -O730 Retained placenta without hemorrhage -O731 Retained portions of placenta and membranes, without hemorrhage -O740 Aspiration pneumonitis due to anesthesia during labor and delivery -O741 Other pulmonary complications of anesthesia during labor and delivery -O742 Cardiac complications of anesthesia during labor and delivery -O743 Central nervous system complications of anesthesia during labor and delivery -O744 Toxic reaction to local anesthesia during labor and delivery -O745 Spinal and epidural anesthesia-induced headache during labor and delivery -O746 Other complications of spinal and epidural anesthesia during labor and delivery -O747 Failed or difficult intubation for anesthesia during labor and delivery -O748 Other complications of anesthesia during labor and delivery -O749 Complication of anesthesia during labor and delivery, unspecified -O750 Maternal distress during labor and delivery -O751 Shock during or following labor and delivery -O752 Pyrexia during labor, not elsewhere classified -O753 Other infection during labor -O754 Other complications of obstetric surgery and procedures -O755 Delayed delivery after artificial rupture of membranes -O7581 Maternal exhaustion complicating labor and delivery -O7582 Onset (spontaneous) of labor after 37 completed weeks of gestation but before 39 completed weeks gestation, with delivery by (planned) cesarean section -O7589 Other specified complications of labor and delivery -O759 Complication of labor and delivery, unspecified -O76 Abnormality in fetal heart rate and rhythm complicating labor and delivery -O770 Labor and delivery complicated by meconium in amniotic fluid -O771 Fetal stress in labor or delivery due to drug administration -O778 Labor and delivery complicated by other evidence of fetal stress -O779 Labor and delivery complicated by fetal stress, unspecified -O80 Encounter for full-term uncomplicated delivery -O82 Encounter for cesarean delivery without indication -O85 Puerperal sepsis -O860 Infection of obstetric surgical wound -O8611 Cervicitis following delivery -O8612 Endometritis following delivery -O8613 Vaginitis following delivery -O8619 Other infection of genital tract following delivery -O8620 Urinary tract infection following delivery, unspecified -O8621 Infection of kidney following delivery -O8622 Infection of bladder following delivery -O8629 Other urinary tract infection following delivery -O864 Pyrexia of unknown origin following delivery -O8681 Puerperal septic thrombophlebitis -O8689 Other specified puerperal infections -O870 Superficial thrombophlebitis in the puerperium -O871 Deep phlebothrombosis in the puerperium -O872 Hemorrhoids in the puerperium -O873 Cerebral venous thrombosis in the puerperium -O874 Varicose veins of lower extremity in the puerperium -O878 Other venous complications in the puerperium -O879 Venous complication in the puerperium, unspecified -O88011 Air embolism in pregnancy, first trimester -O88012 Air embolism in pregnancy, second trimester -O88013 Air embolism in pregnancy, third trimester -O88019 Air embolism in pregnancy, unspecified trimester -O8802 Air embolism in childbirth -O8803 Air embolism in the puerperium -O88111 Amniotic fluid embolism in pregnancy, first trimester -O88112 Amniotic fluid embolism in pregnancy, second trimester -O88113 Amniotic fluid embolism in pregnancy, third trimester -O88119 Amniotic fluid embolism in pregnancy, unspecified trimester -O8812 Amniotic fluid embolism in childbirth -O8813 Amniotic fluid embolism in the puerperium -O88211 Thromboembolism in pregnancy, first trimester -O88212 Thromboembolism in pregnancy, second trimester -O88213 Thromboembolism in pregnancy, third trimester -O88219 Thromboembolism in pregnancy, unspecified trimester -O8822 Thromboembolism in childbirth -O8823 Thromboembolism in the puerperium -O88311 Pyemic and septic embolism in pregnancy, first trimester -O88312 Pyemic and septic embolism in pregnancy, second trimester -O88313 Pyemic and septic embolism in pregnancy, third trimester -O88319 Pyemic and septic embolism in pregnancy, unspecified trimester -O8832 Pyemic and septic embolism in childbirth -O8833 Pyemic and septic embolism in the puerperium -O88811 Other embolism in pregnancy, first trimester -O88812 Other embolism in pregnancy, second trimester -O88813 Other embolism in pregnancy, third trimester -O88819 Other embolism in pregnancy, unspecified trimester -O8882 Other embolism in childbirth -O8883 Other embolism in the puerperium -O8901 Aspiration pneumonitis due to anesthesia during the puerperium -O8909 Other pulmonary complications of anesthesia during the puerperium -O891 Cardiac complications of anesthesia during the puerperium -O892 Central nervous system complications of anesthesia during the puerperium -O893 Toxic reaction to local anesthesia during the puerperium -O894 Spinal and epidural anesthesia-induced headache during the puerperium -O895 Other complications of spinal and epidural anesthesia during the puerperium -O896 Failed or difficult intubation for anesthesia during the puerperium -O898 Other complications of anesthesia during the puerperium -O899 Complication of anesthesia during the puerperium, unspecified -O900 Disruption of cesarean delivery wound -O901 Disruption of perineal obstetric wound -O902 Hematoma of obstetric wound -O903 Peripartum cardiomyopathy -O904 Postpartum acute kidney failure -O905 Postpartum thyroiditis -O906 Postpartum mood disturbance -O9081 Anemia of the puerperium -O9089 Other complications of the puerperium, not elsewhere classified -O909 Complication of the puerperium, unspecified -O91011 Infection of nipple associated with pregnancy, first trimester -O91012 Infection of nipple associated with pregnancy, second trimester -O91013 Infection of nipple associated with pregnancy, third trimester -O91019 Infection of nipple associated with pregnancy, unspecified trimester -O9102 Infection of nipple associated with the puerperium -O9103 Infection of nipple associated with lactation -O91111 Abscess of breast associated with pregnancy, first trimester -O91112 Abscess of breast associated with pregnancy, second trimester -O91113 Abscess of breast associated with pregnancy, third trimester -O91119 Abscess of breast associated with pregnancy, unspecified trimester -O9112 Abscess of breast associated with the puerperium -O9113 Abscess of breast associated with lactation -O91211 Nonpurulent mastitis associated with pregnancy, first trimester -O91212 Nonpurulent mastitis associated with pregnancy, second trimester -O91213 Nonpurulent mastitis associated with pregnancy, third trimester -O91219 Nonpurulent mastitis associated with pregnancy, unspecified trimester -O9122 Nonpurulent mastitis associated with the puerperium -O9123 Nonpurulent mastitis associated with lactation -O92011 Retracted nipple associated with pregnancy, first trimester -O92012 Retracted nipple associated with pregnancy, second trimester -O92013 Retracted nipple associated with pregnancy, third trimester -O92019 Retracted nipple associated with pregnancy, unspecified trimester -O9202 Retracted nipple associated with the puerperium -O9203 Retracted nipple associated with lactation -O92111 Cracked nipple associated with pregnancy, first trimester -O92112 Cracked nipple associated with pregnancy, second trimester -O92113 Cracked nipple associated with pregnancy, third trimester -O92119 Cracked nipple associated with pregnancy, unspecified trimester -O9212 Cracked nipple associated with the puerperium -O9213 Cracked nipple associated with lactation -O9220 Unspecified disorder of breast associated with pregnancy and the puerperium -O9229 Other disorders of breast associated with pregnancy and the puerperium -O923 Agalactia -O924 Hypogalactia -O925 Suppressed lactation -O926 Galactorrhea -O9270 Unspecified disorders of lactation -O9279 Other disorders of lactation -O94 Sequelae of complication of pregnancy, childbirth, and the puerperium -O98011 Tuberculosis complicating pregnancy, first trimester -O98012 Tuberculosis complicating pregnancy, second trimester -O98013 Tuberculosis complicating pregnancy, third trimester -O98019 Tuberculosis complicating pregnancy, unspecified trimester -O9802 Tuberculosis complicating childbirth -O9803 Tuberculosis complicating the puerperium -O98111 Syphilis complicating pregnancy, first trimester -O98112 Syphilis complicating pregnancy, second trimester -O98113 Syphilis complicating pregnancy, third trimester -O98119 Syphilis complicating pregnancy, unspecified trimester -O9812 Syphilis complicating childbirth -O9813 Syphilis complicating the puerperium -O98211 Gonorrhea complicating pregnancy, first trimester -O98212 Gonorrhea complicating pregnancy, second trimester -O98213 Gonorrhea complicating pregnancy, third trimester -O98219 Gonorrhea complicating pregnancy, unspecified trimester -O9822 Gonorrhea complicating childbirth -O9823 Gonorrhea complicating the puerperium -O98311 Other infections with a predominantly sexual mode of transmission complicating pregnancy, first trimester -O98312 Other infections with a predominantly sexual mode of transmission complicating pregnancy, second trimester -O98313 Other infections with a predominantly sexual mode of transmission complicating pregnancy, third trimester -O98319 Other infections with a predominantly sexual mode of transmission complicating pregnancy, unspecified trimester -O9832 Other infections with a predominantly sexual mode of transmission complicating childbirth -O9833 Other infections with a predominantly sexual mode of transmission complicating the puerperium -O98411 Viral hepatitis complicating pregnancy, first trimester -O98412 Viral hepatitis complicating pregnancy, second trimester -O98413 Viral hepatitis complicating pregnancy, third trimester -O98419 Viral hepatitis complicating pregnancy, unspecified trimester -O9842 Viral hepatitis complicating childbirth -O9843 Viral hepatitis complicating the puerperium -O98511 Other viral diseases complicating pregnancy, first trimester -O98512 Other viral diseases complicating pregnancy, second trimester -O98513 Other viral diseases complicating pregnancy, third trimester -O98519 Other viral diseases complicating pregnancy, unspecified trimester -O9852 Other viral diseases complicating childbirth -O9853 Other viral diseases complicating the puerperium -O98611 Protozoal diseases complicating pregnancy, first trimester -O98612 Protozoal diseases complicating pregnancy, second trimester -O98613 Protozoal diseases complicating pregnancy, third trimester -O98619 Protozoal diseases complicating pregnancy, unspecified trimester -O9862 Protozoal diseases complicating childbirth -O9863 Protozoal diseases complicating the puerperium -O98711 Human immunodeficiency virus [HIV] disease complicating pregnancy, first trimester -O98712 Human immunodeficiency virus [HIV] disease complicating pregnancy, second trimester -O98713 Human immunodeficiency virus [HIV] disease complicating pregnancy, third trimester -O98719 Human immunodeficiency virus [HIV] disease complicating pregnancy, unspecified trimester -O9872 Human immunodeficiency virus [HIV] disease complicating childbirth -O9873 Human immunodeficiency virus [HIV] disease complicating the puerperium -O98811 Other maternal infectious and parasitic diseases complicating pregnancy, first trimester -O98812 Other maternal infectious and parasitic diseases complicating pregnancy, second trimester -O98813 Other maternal infectious and parasitic diseases complicating pregnancy, third trimester -O98819 Other maternal infectious and parasitic diseases complicating pregnancy, unspecified trimester -O9882 Other maternal infectious and parasitic diseases complicating childbirth -O9883 Other maternal infectious and parasitic diseases complicating the puerperium -O98911 Unspecified maternal infectious and parasitic disease complicating pregnancy, first trimester -O98912 Unspecified maternal infectious and parasitic disease complicating pregnancy, second trimester -O98913 Unspecified maternal infectious and parasitic disease complicating pregnancy, third trimester -O98919 Unspecified maternal infectious and parasitic disease complicating pregnancy, unspecified trimester -O9892 Unspecified maternal infectious and parasitic disease complicating childbirth -O9893 Unspecified maternal infectious and parasitic disease complicating the puerperium -O99011 Anemia complicating pregnancy, first trimester -O99012 Anemia complicating pregnancy, second trimester -O99013 Anemia complicating pregnancy, third trimester -O99019 Anemia complicating pregnancy, unspecified trimester -O9902 Anemia complicating childbirth -O9903 Anemia complicating the puerperium -O99111 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating pregnancy, first trimester -O99112 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating pregnancy, second trimester -O99113 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating pregnancy, third trimester -O99119 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating pregnancy, unspecified trimester -O9912 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating childbirth -O9913 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating the puerperium -O99210 Obesity complicating pregnancy, unspecified trimester -O99211 Obesity complicating pregnancy, first trimester -O99212 Obesity complicating pregnancy, second trimester -O99213 Obesity complicating pregnancy, third trimester -O99214 Obesity complicating childbirth -O99215 Obesity complicating the puerperium -O99280 Endocrine, nutritional and metabolic diseases complicating pregnancy, unspecified trimester -O99281 Endocrine, nutritional and metabolic diseases complicating pregnancy, first trimester -O99282 Endocrine, nutritional and metabolic diseases complicating pregnancy, second trimester -O99283 Endocrine, nutritional and metabolic diseases complicating pregnancy, third trimester -O99284 Endocrine, nutritional and metabolic diseases complicating childbirth -O99285 Endocrine, nutritional and metabolic diseases complicating the puerperium -O99310 Alcohol use complicating pregnancy, unspecified trimester -O99311 Alcohol use complicating pregnancy, first trimester -O99312 Alcohol use complicating pregnancy, second trimester -O99313 Alcohol use complicating pregnancy, third trimester -O99314 Alcohol use complicating childbirth -O99315 Alcohol use complicating the puerperium -O99320 Drug use complicating pregnancy, unspecified trimester -O99321 Drug use complicating pregnancy, first trimester -O99322 Drug use complicating pregnancy, second trimester -O99323 Drug use complicating pregnancy, third trimester -O99324 Drug use complicating childbirth -O99325 Drug use complicating the puerperium -O99330 Smoking (tobacco) complicating pregnancy, unspecified trimester -O99331 Smoking (tobacco) complicating pregnancy, first trimester -O99332 Smoking (tobacco) complicating pregnancy, second trimester -O99333 Smoking (tobacco) complicating pregnancy, third trimester -O99334 Smoking (tobacco) complicating childbirth -O99335 Smoking (tobacco) complicating the puerperium -O99340 Other mental disorders complicating pregnancy, unspecified trimester -O99341 Other mental disorders complicating pregnancy, first trimester -O99342 Other mental disorders complicating pregnancy, second trimester -O99343 Other mental disorders complicating pregnancy, third trimester -O99344 Other mental disorders complicating childbirth -O99345 Other mental disorders complicating the puerperium -O99350 Diseases of the nervous system complicating pregnancy, unspecified trimester -O99351 Diseases of the nervous system complicating pregnancy, first trimester -O99352 Diseases of the nervous system complicating pregnancy, second trimester -O99353 Diseases of the nervous system complicating pregnancy, third trimester -O99354 Diseases of the nervous system complicating childbirth -O99355 Diseases of the nervous system complicating the puerperium -O99411 Diseases of the circulatory system complicating pregnancy, first trimester -O99412 Diseases of the circulatory system complicating pregnancy, second trimester -O99413 Diseases of the circulatory system complicating pregnancy, third trimester -O99419 Diseases of the circulatory system complicating pregnancy, unspecified trimester -O9942 Diseases of the circulatory system complicating childbirth -O9943 Diseases of the circulatory system complicating the puerperium -O99511 Diseases of the respiratory system complicating pregnancy, first trimester -O99512 Diseases of the respiratory system complicating pregnancy, second trimester -O99513 Diseases of the respiratory system complicating pregnancy, third trimester -O99519 Diseases of the respiratory system complicating pregnancy, unspecified trimester -O9952 Diseases of the respiratory system complicating childbirth -O9953 Diseases of the respiratory system complicating the puerperium -O99611 Diseases of the digestive system complicating pregnancy, first trimester -O99612 Diseases of the digestive system complicating pregnancy, second trimester -O99613 Diseases of the digestive system complicating pregnancy, third trimester -O99619 Diseases of the digestive system complicating pregnancy, unspecified trimester -O9962 Diseases of the digestive system complicating childbirth -O9963 Diseases of the digestive system complicating the puerperium -O99711 Diseases of the skin and subcutaneous tissue complicating pregnancy, first trimester -O99712 Diseases of the skin and subcutaneous tissue complicating pregnancy, second trimester -O99713 Diseases of the skin and subcutaneous tissue complicating pregnancy, third trimester -O99719 Diseases of the skin and subcutaneous tissue complicating pregnancy, unspecified trimester -O9972 Diseases of the skin and subcutaneous tissue complicating childbirth -O9973 Diseases of the skin and subcutaneous tissue complicating the puerperium -O99810 Abnormal glucose complicating pregnancy -O99814 Abnormal glucose complicating childbirth -O99815 Abnormal glucose complicating the puerperium -O99820 Streptococcus B carrier state complicating pregnancy -O99824 Streptococcus B carrier state complicating childbirth -O99825 Streptococcus B carrier state complicating the puerperium -O99830 Other infection carrier state complicating pregnancy -O99834 Other infection carrier state complicating childbirth -O99835 Other infection carrier state complicating the puerperium -O99840 Bariatric surgery status complicating pregnancy, unspecified trimester -O99841 Bariatric surgery status complicating pregnancy, first trimester -O99842 Bariatric surgery status complicating pregnancy, second trimester -O99843 Bariatric surgery status complicating pregnancy, third trimester -O99844 Bariatric surgery status complicating childbirth -O99845 Bariatric surgery status complicating the puerperium -O9989 Other specified diseases and conditions complicating pregnancy, childbirth and the puerperium -O9A111 Malignant neoplasm complicating pregnancy, first trimester -O9A112 Malignant neoplasm complicating pregnancy, second trimester -O9A113 Malignant neoplasm complicating pregnancy, third trimester -O9A119 Malignant neoplasm complicating pregnancy, unspecified trimester -O9A12 Malignant neoplasm complicating childbirth -O9A13 Malignant neoplasm complicating the puerperium -O9A211 Injury, poisoning and certain other consequences of external causes complicating pregnancy, first trimester -O9A212 Injury, poisoning and certain other consequences of external causes complicating pregnancy, second trimester -O9A213 Injury, poisoning and certain other consequences of external causes complicating pregnancy, third trimester -O9A219 Injury, poisoning and certain other consequences of external causes complicating pregnancy, unspecified trimester -O9A22 Injury, poisoning and certain other consequences of external causes complicating childbirth -O9A23 Injury, poisoning and certain other consequences of external causes complicating the puerperium -O9A311 Physical abuse complicating pregnancy, first trimester -O9A312 Physical abuse complicating pregnancy, second trimester -O9A313 Physical abuse complicating pregnancy, third trimester -O9A319 Physical abuse complicating pregnancy, unspecified trimester -O9A32 Physical abuse complicating childbirth -O9A33 Physical abuse complicating the puerperium -O9A411 Sexual abuse complicating pregnancy, first trimester -O9A412 Sexual abuse complicating pregnancy, second trimester -O9A413 Sexual abuse complicating pregnancy, third trimester -O9A419 Sexual abuse complicating pregnancy, unspecified trimester -O9A42 Sexual abuse complicating childbirth -O9A43 Sexual abuse complicating the puerperium -O9A511 Psychological abuse complicating pregnancy, first trimester -O9A512 Psychological abuse complicating pregnancy, second trimester -O9A513 Psychological abuse complicating pregnancy, third trimester -O9A519 Psychological abuse complicating pregnancy, unspecified trimester -O9A52 Psychological abuse complicating childbirth -O9A53 Psychological abuse complicating the puerperium -P000 Newborn (suspected to be) affected by maternal hypertensive disorders -P001 Newborn (suspected to be) affected by maternal renal and urinary tract diseases -P002 Newborn (suspected to be) affected by maternal infectious and parasitic diseases -P003 Newborn (suspected to be) affected by other maternal circulatory and respiratory diseases -P004 Newborn (suspected to be) affected by maternal nutritional disorders -P005 Newborn (suspected to be) affected by maternal injury -P006 Newborn (suspected to be) affected by surgical procedure on mother -P007 Newborn (suspected to be) affected by other medical procedures on mother, not elsewhere classified -P0081 Newborn (suspected to be) affected by periodontal disease in mother -P0089 Newborn (suspected to be) affected by other maternal conditions -P009 Newborn (suspected to be) affected by unspecified maternal condition -P010 Newborn (suspected to be) affected by incompetent cervix -P011 Newborn (suspected to be) affected by premature rupture of membranes -P012 Newborn (suspected to be) affected by oligohydramnios -P013 Newborn (suspected to be) affected by polyhydramnios -P014 Newborn (suspected to be) affected by ectopic pregnancy -P015 Newborn (suspected to be) affected by multiple pregnancy -P016 Newborn (suspected to be) affected by maternal death -P017 Newborn (suspected to be) affected by malpresentation before labor -P018 Newborn (suspected to be) affected by other maternal complications of pregnancy -P019 Newborn (suspected to be) affected by maternal complication of pregnancy, unspecified -P020 Newborn (suspected to be) affected by placenta previa -P021 Newborn (suspected to be) affected by other forms of placental separation and hemorrhage -P0220 Newborn (suspected to be) affected by unspecified morphological and functional abnormalities of placenta -P0229 Newborn (suspected to be) affected by other morphological and functional abnormalities of placenta -P023 Newborn (suspected to be) affected by placental transfusion syndromes -P024 Newborn (suspected to be) affected by prolapsed cord -P025 Newborn (suspected to be) affected by other compression of umbilical cord -P0260 Newborn (suspected to be) affected by unspecified conditions of umbilical cord -P0269 Newborn (suspected to be) affected by other conditions of umbilical cord -P027 Newborn (suspected to be) affected by chorioamnionitis -P028 Newborn (suspected to be) affected by other abnormalities of membranes -P029 Newborn (suspected to be) affected by abnormality of membranes, unspecified -P030 Newborn (suspected to be) affected by breech delivery and extraction -P031 Newborn (suspected to be) affected by other malpresentation, malposition and disproportion during labor and delivery -P032 Newborn (suspected to be) affected by forceps delivery -P033 Newborn (suspected to be) affected by delivery by vacuum extractor [ventouse] -P034 Newborn (suspected to be) affected by Cesarean delivery -P035 Newborn (suspected to be) affected by precipitate delivery -P036 Newborn (suspected to be) affected by abnormal uterine contractions -P03810 Newborn (suspected to be) affected by abnormality in fetal (intrauterine) heart rate or rhythm before the onset of labor -P03811 Newborn (suspected to be) affected by abnormality in fetal (intrauterine) heart rate or rhythm during labor -P03819 Newborn (suspected to be) affected by abnormality in fetal (intrauterine) heart rate or rhythm, unspecified as to time of onset -P0382 Meconium passage during delivery -P0389 Newborn (suspected to be) affected by other specified complications of labor and delivery -P039 Newborn (suspected to be) affected by complication of labor and delivery, unspecified -P040 Newborn (suspected to be) affected by maternal anesthesia and analgesia in pregnancy, labor and delivery -P041 Newborn (suspected to be) affected by other maternal medication -P042 Newborn (suspected to be) affected by maternal use of tobacco -P043 Newborn (suspected to be) affected by maternal use of alcohol -P0441 Newborn (suspected to be) affected by maternal use of cocaine -P0449 Newborn (suspected to be) affected by maternal use of other drugs of addiction -P045 Newborn (suspected to be) affected by maternal use of nutritional chemical substances -P046 Newborn (suspected to be) affected by maternal exposure to environmental chemical substances -P048 Newborn (suspected to be) affected by other maternal noxious substances -P049 Newborn (suspected to be) affected by maternal noxious substance, unspecified -P0500 Newborn light for gestational age, unspecified weight -P0501 Newborn light for gestational age, less than 500 grams -P0502 Newborn light for gestational age, 500-749 grams -P0503 Newborn light for gestational age, 750-999 grams -P0504 Newborn light for gestational age, 1000-1249 grams -P0505 Newborn light for gestational age, 1250-1499 grams -P0506 Newborn light for gestational age, 1500-1749 grams -P0507 Newborn light for gestational age, 1750-1999 grams -P0508 Newborn light for gestational age, 2000-2499 grams -P0510 Newborn small for gestational age, unspecified weight -P0511 Newborn small for gestational age, less than 500 grams -P0512 Newborn small for gestational age, 500-749 grams -P0513 Newborn small for gestational age, 750-999 grams -P0514 Newborn small for gestational age, 1000-1249 grams -P0515 Newborn small for gestational age, 1250-1499 grams -P0516 Newborn small for gestational age, 1500-1749 grams -P0517 Newborn small for gestational age, 1750-1999 grams -P0518 Newborn small for gestational age, 2000-2499 grams -P052 Newborn affected by fetal (intrauterine) malnutrition not light or small for gestational age -P059 Newborn affected by slow intrauterine growth, unspecified -P0700 Extremely low birth weight newborn, unspecified weight -P0701 Extremely low birth weight newborn, less than 500 grams -P0702 Extremely low birth weight newborn, 500-749 grams -P0703 Extremely low birth weight newborn, 750-999 grams -P0710 Other low birth weight newborn, unspecified weight -P0714 Other low birth weight newborn, 1000-1249 grams -P0715 Other low birth weight newborn, 1250-1499 grams -P0716 Other low birth weight newborn, 1500-1749 grams -P0717 Other low birth weight newborn, 1750-1999 grams -P0718 Other low birth weight newborn, 2000-2499 grams -P0720 Extreme immaturity of newborn, unspecified weeks of gestation -P0721 Extreme immaturity of newborn, gestational age less than 23 completed weeks -P0722 Extreme immaturity of newborn, gestational age 23 completed weeks -P0723 Extreme immaturity of newborn, gestational age 24 completed weeks -P0724 Extreme immaturity of newborn, gestational age 25 completed weeks -P0725 Extreme immaturity of newborn, gestational age 26 completed weeks -P0726 Extreme immaturity of newborn, gestational age 27 completed weeks -P0730 Preterm newborn, unspecified weeks of gestation -P0731 Preterm newborn, gestational age 28 completed weeks -P0732 Preterm newborn, gestational age 29 completed weeks -P0733 Preterm newborn, gestational age 30 completed weeks -P0734 Preterm newborn, gestational age 31 completed weeks -P0735 Preterm newborn, gestational age 32 completed weeks -P0736 Preterm newborn, gestational age 33 completed weeks -P0737 Preterm newborn, gestational age 34 completed weeks -P0738 Preterm newborn, gestational age 35 completed weeks -P0739 Preterm newborn, gestational age 36 completed weeks -P080 Exceptionally large newborn baby -P081 Other heavy for gestational age newborn -P0821 Post-term newborn -P0822 Prolonged gestation of newborn -P09 Abnormal findings on neonatal screening -P100 Subdural hemorrhage due to birth injury -P101 Cerebral hemorrhage due to birth injury -P102 Intraventricular hemorrhage due to birth injury -P103 Subarachnoid hemorrhage due to birth injury -P104 Tentorial tear due to birth injury -P108 Other intracranial lacerations and hemorrhages due to birth injury -P109 Unspecified intracranial laceration and hemorrhage due to birth injury -P110 Cerebral edema due to birth injury -P111 Other specified brain damage due to birth injury -P112 Unspecified brain damage due to birth injury -P113 Birth injury to facial nerve -P114 Birth injury to other cranial nerves -P115 Birth injury to spine and spinal cord -P119 Birth injury to central nervous system, unspecified -P120 Cephalhematoma due to birth injury -P121 Chignon (from vacuum extraction) due to birth injury -P122 Epicranial subaponeurotic hemorrhage due to birth injury -P123 Bruising of scalp due to birth injury -P124 Injury of scalp of newborn due to monitoring equipment -P1281 Caput succedaneum -P1289 Other birth injuries to scalp -P129 Birth injury to scalp, unspecified -P130 Fracture of skull due to birth injury -P131 Other birth injuries to skull -P132 Birth injury to femur -P133 Birth injury to other long bones -P134 Fracture of clavicle due to birth injury -P138 Birth injuries to other parts of skeleton -P139 Birth injury to skeleton, unspecified -P140 Erb's paralysis due to birth injury -P141 Klumpke's paralysis due to birth injury -P142 Phrenic nerve paralysis due to birth injury -P143 Other brachial plexus birth injuries -P148 Birth injuries to other parts of peripheral nervous system -P149 Birth injury to peripheral nervous system, unspecified -P150 Birth injury to liver -P151 Birth injury to spleen -P152 Sternomastoid injury due to birth injury -P153 Birth injury to eye -P154 Birth injury to face -P155 Birth injury to external genitalia -P156 Subcutaneous fat necrosis due to birth injury -P158 Other specified birth injuries -P159 Birth injury, unspecified -P190 Metabolic acidemia in newborn first noted before onset of labor -P191 Metabolic acidemia in newborn first noted during labor -P192 Metabolic acidemia noted at birth -P199 Metabolic acidemia, unspecified -P220 Respiratory distress syndrome of newborn -P221 Transient tachypnea of newborn -P228 Other respiratory distress of newborn -P229 Respiratory distress of newborn, unspecified -P230 Congenital pneumonia due to viral agent -P231 Congenital pneumonia due to Chlamydia -P232 Congenital pneumonia due to staphylococcus -P233 Congenital pneumonia due to streptococcus, group B -P234 Congenital pneumonia due to Escherichia coli -P235 Congenital pneumonia due to Pseudomonas -P236 Congenital pneumonia due to other bacterial agents -P238 Congenital pneumonia due to other organisms -P239 Congenital pneumonia, unspecified -P2400 Meconium aspiration without respiratory symptoms -P2401 Meconium aspiration with respiratory symptoms -P2410 Neonatal aspiration of (clear) amniotic fluid and mucus without respiratory symptoms -P2411 Neonatal aspiration of (clear) amniotic fluid and mucus with respiratory symptoms -P2420 Neonatal aspiration of blood without respiratory symptoms -P2421 Neonatal aspiration of blood with respiratory symptoms -P2430 Neonatal aspiration of milk and regurgitated food without respiratory symptoms -P2431 Neonatal aspiration of milk and regurgitated food with respiratory symptoms -P2480 Other neonatal aspiration without respiratory symptoms -P2481 Other neonatal aspiration with respiratory symptoms -P249 Neonatal aspiration, unspecified -P250 Interstitial emphysema originating in the perinatal period -P251 Pneumothorax originating in the perinatal period -P252 Pneumomediastinum originating in the perinatal period -P253 Pneumopericardium originating in the perinatal period -P258 Other conditions related to interstitial emphysema originating in the perinatal period -P260 Tracheobronchial hemorrhage originating in the perinatal period -P261 Massive pulmonary hemorrhage originating in the perinatal period -P268 Other pulmonary hemorrhages originating in the perinatal period -P269 Unspecified pulmonary hemorrhage originating in the perinatal period -P270 Wilson-Mikity syndrome -P271 Bronchopulmonary dysplasia originating in the perinatal period -P278 Other chronic respiratory diseases originating in the perinatal period -P279 Unspecified chronic respiratory disease originating in the perinatal period -P280 Primary atelectasis of newborn -P2810 Unspecified atelectasis of newborn -P2811 Resorption atelectasis without respiratory distress syndrome -P2819 Other atelectasis of newborn -P282 Cyanotic attacks of newborn -P283 Primary sleep apnea of newborn -P284 Other apnea of newborn -P285 Respiratory failure of newborn -P2881 Respiratory arrest of newborn -P2889 Other specified respiratory conditions of newborn -P289 Respiratory condition of newborn, unspecified -P290 Neonatal cardiac failure -P2911 Neonatal tachycardia -P2912 Neonatal bradycardia -P292 Neonatal hypertension -P293 Persistent fetal circulation -P294 Transient myocardial ischemia in newborn -P2981 Cardiac arrest of newborn -P2989 Other cardiovascular disorders originating in the perinatal period -P299 Cardiovascular disorder originating in the perinatal period, unspecified -P350 Congenital rubella syndrome -P351 Congenital cytomegalovirus infection -P352 Congenital herpesviral [herpes simplex] infection -P353 Congenital viral hepatitis -P358 Other congenital viral diseases -P359 Congenital viral disease, unspecified -P360 Sepsis of newborn due to streptococcus, group B -P3610 Sepsis of newborn due to unspecified streptococci -P3619 Sepsis of newborn due to other streptococci -P362 Sepsis of newborn due to Staphylococcus aureus -P3630 Sepsis of newborn due to unspecified staphylococci -P3639 Sepsis of newborn due to other staphylococci -P364 Sepsis of newborn due to Escherichia coli -P365 Sepsis of newborn due to anaerobes -P368 Other bacterial sepsis of newborn -P369 Bacterial sepsis of newborn, unspecified -P370 Congenital tuberculosis -P371 Congenital toxoplasmosis -P372 Neonatal (disseminated) listeriosis -P373 Congenital falciparum malaria -P374 Other congenital malaria -P375 Neonatal candidiasis -P378 Other specified congenital infectious and parasitic diseases -P379 Congenital infectious or parasitic disease, unspecified -P381 Omphalitis with mild hemorrhage -P389 Omphalitis without hemorrhage -P390 Neonatal infective mastitis -P391 Neonatal conjunctivitis and dacryocystitis -P392 Intra-amniotic infection affecting newborn, not elsewhere classified -P393 Neonatal urinary tract infection -P394 Neonatal skin infection -P398 Other specified infections specific to the perinatal period -P399 Infection specific to the perinatal period, unspecified -P500 Newborn affected by intrauterine (fetal) blood loss from vasa previa -P501 Newborn affected by intrauterine (fetal) blood loss from ruptured cord -P502 Newborn affected by intrauterine (fetal) blood loss from placenta -P503 Newborn affected by hemorrhage into co-twin -P504 Newborn affected by hemorrhage into maternal circulation -P505 Newborn affected by intrauterine (fetal) blood loss from cut end of co-twin's cord -P508 Newborn affected by other intrauterine (fetal) blood loss -P509 Newborn affected by intrauterine (fetal) blood loss, unspecified -P510 Massive umbilical hemorrhage of newborn -P518 Other umbilical hemorrhages of newborn -P519 Umbilical hemorrhage of newborn, unspecified -P520 Intraventricular (nontraumatic) hemorrhage, grade 1, of newborn -P521 Intraventricular (nontraumatic) hemorrhage, grade 2, of newborn -P5221 Intraventricular (nontraumatic) hemorrhage, grade 3, of newborn -P5222 Intraventricular (nontraumatic) hemorrhage, grade 4, of newborn -P523 Unspecified intraventricular (nontraumatic) hemorrhage of newborn -P524 Intracerebral (nontraumatic) hemorrhage of newborn -P525 Subarachnoid (nontraumatic) hemorrhage of newborn -P526 Cerebellar (nontraumatic) and posterior fossa hemorrhage of newborn -P528 Other intracranial (nontraumatic) hemorrhages of newborn -P529 Intracranial (nontraumatic) hemorrhage of newborn, unspecified -P53 Hemorrhagic disease of newborn -P540 Neonatal hematemesis -P541 Neonatal melena -P542 Neonatal rectal hemorrhage -P543 Other neonatal gastrointestinal hemorrhage -P544 Neonatal adrenal hemorrhage -P545 Neonatal cutaneous hemorrhage -P546 Neonatal vaginal hemorrhage -P548 Other specified neonatal hemorrhages -P549 Neonatal hemorrhage, unspecified -P550 Rh isoimmunization of newborn -P551 ABO isoimmunization of newborn -P558 Other hemolytic diseases of newborn -P559 Hemolytic disease of newborn, unspecified -P560 Hydrops fetalis due to isoimmunization -P5690 Hydrops fetalis due to unspecified hemolytic disease -P5699 Hydrops fetalis due to other hemolytic disease -P570 Kernicterus due to isoimmunization -P578 Other specified kernicterus -P579 Kernicterus, unspecified -P580 Neonatal jaundice due to bruising -P581 Neonatal jaundice due to bleeding -P582 Neonatal jaundice due to infection -P583 Neonatal jaundice due to polycythemia -P5841 Neonatal jaundice due to drugs or toxins transmitted from mother -P5842 Neonatal jaundice due to drugs or toxins given to newborn -P585 Neonatal jaundice due to swallowed maternal blood -P588 Neonatal jaundice due to other specified excessive hemolysis -P589 Neonatal jaundice due to excessive hemolysis, unspecified -P590 Neonatal jaundice associated with preterm delivery -P591 Inspissated bile syndrome -P5920 Neonatal jaundice from unspecified hepatocellular damage -P5929 Neonatal jaundice from other hepatocellular damage -P593 Neonatal jaundice from breast milk inhibitor -P598 Neonatal jaundice from other specified causes -P599 Neonatal jaundice, unspecified -P60 Disseminated intravascular coagulation of newborn -P610 Transient neonatal thrombocytopenia -P611 Polycythemia neonatorum -P612 Anemia of prematurity -P613 Congenital anemia from fetal blood loss -P614 Other congenital anemias, not elsewhere classified -P615 Transient neonatal neutropenia -P616 Other transient neonatal disorders of coagulation -P618 Other specified perinatal hematological disorders -P619 Perinatal hematological disorder, unspecified -P700 Syndrome of infant of mother with gestational diabetes -P701 Syndrome of infant of a diabetic mother -P702 Neonatal diabetes mellitus -P703 Iatrogenic neonatal hypoglycemia -P704 Other neonatal hypoglycemia -P708 Other transitory disorders of carbohydrate metabolism of newborn -P709 Transitory disorder of carbohydrate metabolism of newborn, unspecified -P710 Cow's milk hypocalcemia in newborn -P711 Other neonatal hypocalcemia -P712 Neonatal hypomagnesemia -P713 Neonatal tetany without calcium or magnesium deficiency -P714 Transitory neonatal hypoparathyroidism -P718 Other transitory neonatal disorders of calcium and magnesium metabolism -P719 Transitory neonatal disorder of calcium and magnesium metabolism, unspecified -P720 Neonatal goiter, not elsewhere classified -P721 Transitory neonatal hyperthyroidism -P722 Other transitory neonatal disorders of thyroid function, not elsewhere classified -P728 Other specified transitory neonatal endocrine disorders -P729 Transitory neonatal endocrine disorder, unspecified -P740 Late metabolic acidosis of newborn -P741 Dehydration of newborn -P742 Disturbances of sodium balance of newborn -P743 Disturbances of potassium balance of newborn -P744 Other transitory electrolyte disturbances of newborn -P745 Transitory tyrosinemia of newborn -P746 Transitory hyperammonemia of newborn -P748 Other transitory metabolic disturbances of newborn -P749 Transitory metabolic disturbance of newborn, unspecified -P760 Meconium plug syndrome -P761 Transitory ileus of newborn -P762 Intestinal obstruction due to inspissated milk -P768 Other specified intestinal obstruction of newborn -P769 Intestinal obstruction of newborn, unspecified -P771 Stage 1 necrotizing enterocolitis in newborn -P772 Stage 2 necrotizing enterocolitis in newborn -P773 Stage 3 necrotizing enterocolitis in newborn -P779 Necrotizing enterocolitis in newborn, unspecified -P780 Perinatal intestinal perforation -P781 Other neonatal peritonitis -P782 Neonatal hematemesis and melena due to swallowed maternal blood -P783 Noninfective neonatal diarrhea -P7881 Congenital cirrhosis (of liver) -P7882 Peptic ulcer of newborn -P7883 Newborn esophageal reflux -P7889 Other specified perinatal digestive system disorders -P789 Perinatal digestive system disorder, unspecified -P800 Cold injury syndrome -P808 Other hypothermia of newborn -P809 Hypothermia of newborn, unspecified -P810 Environmental hyperthermia of newborn -P818 Other specified disturbances of temperature regulation of newborn -P819 Disturbance of temperature regulation of newborn, unspecified -P830 Sclerema neonatorum -P831 Neonatal erythema toxicum -P832 Hydrops fetalis not due to hemolytic disease -P8330 Unspecified edema specific to newborn -P8339 Other edema specific to newborn -P834 Breast engorgement of newborn -P835 Congenital hydrocele -P836 Umbilical polyp of newborn -P838 Other specified conditions of integument specific to newborn -P839 Condition of the integument specific to newborn, unspecified -P84 Other problems with newborn -P90 Convulsions of newborn -P910 Neonatal cerebral ischemia -P911 Acquired periventricular cysts of newborn -P912 Neonatal cerebral leukomalacia -P913 Neonatal cerebral irritability -P914 Neonatal cerebral depression -P915 Neonatal coma -P9160 Hypoxic ischemic encephalopathy [HIE], unspecified -P9161 Mild hypoxic ischemic encephalopathy [HIE] -P9162 Moderate hypoxic ischemic encephalopathy [HIE] -P9163 Severe hypoxic ischemic encephalopathy [HIE] -P918 Other specified disturbances of cerebral status of newborn -P919 Disturbance of cerebral status of newborn, unspecified -P9201 Bilious vomiting of newborn -P9209 Other vomiting of newborn -P921 Regurgitation and rumination of newborn -P922 Slow feeding of newborn -P923 Underfeeding of newborn -P924 Overfeeding of newborn -P925 Neonatal difficulty in feeding at breast -P926 Failure to thrive in newborn -P928 Other feeding problems of newborn -P929 Feeding problem of newborn, unspecified -P930 Grey baby syndrome -P938 Other reactions and intoxications due to drugs administered to newborn -P940 Transient neonatal myasthenia gravis -P941 Congenital hypertonia -P942 Congenital hypotonia -P948 Other disorders of muscle tone of newborn -P949 Disorder of muscle tone of newborn, unspecified -P95 Stillbirth -P960 Congenital renal failure -P961 Neonatal withdrawal symptoms from maternal use of drugs of addiction -P962 Withdrawal symptoms from therapeutic use of drugs in newborn -P963 Wide cranial sutures of newborn -P965 Complication to newborn due to (fetal) intrauterine procedure -P9681 Exposure to (parental) (environmental) tobacco smoke in the perinatal period -P9682 Delayed separation of umbilical cord -P9683 Meconium staining -P9689 Other specified conditions originating in the perinatal period -P969 Condition originating in the perinatal period, unspecified -Q000 Anencephaly -Q001 Craniorachischisis -Q002 Iniencephaly -Q010 Frontal encephalocele -Q011 Nasofrontal encephalocele -Q012 Occipital encephalocele -Q018 Encephalocele of other sites -Q019 Encephalocele, unspecified -Q02 Microcephaly -Q030 Malformations of aqueduct of Sylvius -Q031 Atresia of foramina of Magendie and Luschka -Q038 Other congenital hydrocephalus -Q039 Congenital hydrocephalus, unspecified -Q040 Congenital malformations of corpus callosum -Q041 Arhinencephaly -Q042 Holoprosencephaly -Q043 Other reduction deformities of brain -Q044 Septo-optic dysplasia of brain -Q045 Megalencephaly -Q046 Congenital cerebral cysts -Q048 Other specified congenital malformations of brain -Q049 Congenital malformation of brain, unspecified -Q050 Cervical spina bifida with hydrocephalus -Q051 Thoracic spina bifida with hydrocephalus -Q052 Lumbar spina bifida with hydrocephalus -Q053 Sacral spina bifida with hydrocephalus -Q054 Unspecified spina bifida with hydrocephalus -Q055 Cervical spina bifida without hydrocephalus -Q056 Thoracic spina bifida without hydrocephalus -Q057 Lumbar spina bifida without hydrocephalus -Q058 Sacral spina bifida without hydrocephalus -Q059 Spina bifida, unspecified -Q060 Amyelia -Q061 Hypoplasia and dysplasia of spinal cord -Q062 Diastematomyelia -Q063 Other congenital cauda equina malformations -Q064 Hydromyelia -Q068 Other specified congenital malformations of spinal cord -Q069 Congenital malformation of spinal cord, unspecified -Q0700 Arnold-Chiari syndrome without spina bifida or hydrocephalus -Q0701 Arnold-Chiari syndrome with spina bifida -Q0702 Arnold-Chiari syndrome with hydrocephalus -Q0703 Arnold-Chiari syndrome with spina bifida and hydrocephalus -Q078 Other specified congenital malformations of nervous system -Q079 Congenital malformation of nervous system, unspecified -Q100 Congenital ptosis -Q101 Congenital ectropion -Q102 Congenital entropion -Q103 Other congenital malformations of eyelid -Q104 Absence and agenesis of lacrimal apparatus -Q105 Congenital stenosis and stricture of lacrimal duct -Q106 Other congenital malformations of lacrimal apparatus -Q107 Congenital malformation of orbit -Q110 Cystic eyeball -Q111 Other anophthalmos -Q112 Microphthalmos -Q113 Macrophthalmos -Q120 Congenital cataract -Q121 Congenital displaced lens -Q122 Coloboma of lens -Q123 Congenital aphakia -Q124 Spherophakia -Q128 Other congenital lens malformations -Q129 Congenital lens malformation, unspecified -Q130 Coloboma of iris -Q131 Absence of iris -Q132 Other congenital malformations of iris -Q133 Congenital corneal opacity -Q134 Other congenital corneal malformations -Q135 Blue sclera -Q1381 Rieger's anomaly -Q1389 Other congenital malformations of anterior segment of eye -Q139 Congenital malformation of anterior segment of eye, unspecified -Q140 Congenital malformation of vitreous humor -Q141 Congenital malformation of retina -Q142 Congenital malformation of optic disc -Q143 Congenital malformation of choroid -Q148 Other congenital malformations of posterior segment of eye -Q149 Congenital malformation of posterior segment of eye, unspecified -Q150 Congenital glaucoma -Q158 Other specified congenital malformations of eye -Q159 Congenital malformation of eye, unspecified -Q160 Congenital absence of (ear) auricle -Q161 Congenital absence, atresia and stricture of auditory canal (external) -Q162 Absence of eustachian tube -Q163 Congenital malformation of ear ossicles -Q164 Other congenital malformations of middle ear -Q165 Congenital malformation of inner ear -Q169 Congenital malformation of ear causing impairment of hearing, unspecified -Q170 Accessory auricle -Q171 Macrotia -Q172 Microtia -Q173 Other misshapen ear -Q174 Misplaced ear -Q175 Prominent ear -Q178 Other specified congenital malformations of ear -Q179 Congenital malformation of ear, unspecified -Q180 Sinus, fistula and cyst of branchial cleft -Q181 Preauricular sinus and cyst -Q182 Other branchial cleft malformations -Q183 Webbing of neck -Q184 Macrostomia -Q185 Microstomia -Q186 Macrocheilia -Q187 Microcheilia -Q188 Other specified congenital malformations of face and neck -Q189 Congenital malformation of face and neck, unspecified -Q200 Common arterial trunk -Q201 Double outlet right ventricle -Q202 Double outlet left ventricle -Q203 Discordant ventriculoarterial connection -Q204 Double inlet ventricle -Q205 Discordant atrioventricular connection -Q206 Isomerism of atrial appendages -Q208 Other congenital malformations of cardiac chambers and connections -Q209 Congenital malformation of cardiac chambers and connections, unspecified -Q210 Ventricular septal defect -Q211 Atrial septal defect -Q212 Atrioventricular septal defect -Q213 Tetralogy of Fallot -Q214 Aortopulmonary septal defect -Q218 Other congenital malformations of cardiac septa -Q219 Congenital malformation of cardiac septum, unspecified -Q220 Pulmonary valve atresia -Q221 Congenital pulmonary valve stenosis -Q222 Congenital pulmonary valve insufficiency -Q223 Other congenital malformations of pulmonary valve -Q224 Congenital tricuspid stenosis -Q225 Ebstein's anomaly -Q226 Hypoplastic right heart syndrome -Q228 Other congenital malformations of tricuspid valve -Q229 Congenital malformation of tricuspid valve, unspecified -Q230 Congenital stenosis of aortic valve -Q231 Congenital insufficiency of aortic valve -Q232 Congenital mitral stenosis -Q233 Congenital mitral insufficiency -Q234 Hypoplastic left heart syndrome -Q238 Other congenital malformations of aortic and mitral valves -Q239 Congenital malformation of aortic and mitral valves, unspecified -Q240 Dextrocardia -Q241 Levocardia -Q242 Cor triatriatum -Q243 Pulmonary infundibular stenosis -Q244 Congenital subaortic stenosis -Q245 Malformation of coronary vessels -Q246 Congenital heart block -Q248 Other specified congenital malformations of heart -Q249 Congenital malformation of heart, unspecified -Q250 Patent ductus arteriosus -Q251 Coarctation of aorta -Q252 Atresia of aorta -Q253 Supravalvular aortic stenosis -Q254 Other congenital malformations of aorta -Q255 Atresia of pulmonary artery -Q256 Stenosis of pulmonary artery -Q2571 Coarctation of pulmonary artery -Q2572 Congenital pulmonary arteriovenous malformation -Q2579 Other congenital malformations of pulmonary artery -Q258 Other congenital malformations of other great arteries -Q259 Congenital malformation of great arteries, unspecified -Q260 Congenital stenosis of vena cava -Q261 Persistent left superior vena cava -Q262 Total anomalous pulmonary venous connection -Q263 Partial anomalous pulmonary venous connection -Q264 Anomalous pulmonary venous connection, unspecified -Q265 Anomalous portal venous connection -Q266 Portal vein-hepatic artery fistula -Q268 Other congenital malformations of great veins -Q269 Congenital malformation of great vein, unspecified -Q270 Congenital absence and hypoplasia of umbilical artery -Q271 Congenital renal artery stenosis -Q272 Other congenital malformations of renal artery -Q2730 Arteriovenous malformation, site unspecified -Q2731 Arteriovenous malformation of vessel of upper limb -Q2732 Arteriovenous malformation of vessel of lower limb -Q2733 Arteriovenous malformation of digestive system vessel -Q2734 Arteriovenous malformation of renal vessel -Q2739 Arteriovenous malformation, other site -Q274 Congenital phlebectasia -Q278 Other specified congenital malformations of peripheral vascular system -Q279 Congenital malformation of peripheral vascular system, unspecified -Q280 Arteriovenous malformation of precerebral vessels -Q281 Other malformations of precerebral vessels -Q282 Arteriovenous malformation of cerebral vessels -Q283 Other malformations of cerebral vessels -Q288 Other specified congenital malformations of circulatory system -Q289 Congenital malformation of circulatory system, unspecified -Q300 Choanal atresia -Q301 Agenesis and underdevelopment of nose -Q302 Fissured, notched and cleft nose -Q303 Congenital perforated nasal septum -Q308 Other congenital malformations of nose -Q309 Congenital malformation of nose, unspecified -Q310 Web of larynx -Q311 Congenital subglottic stenosis -Q312 Laryngeal hypoplasia -Q313 Laryngocele -Q315 Congenital laryngomalacia -Q318 Other congenital malformations of larynx -Q319 Congenital malformation of larynx, unspecified -Q320 Congenital tracheomalacia -Q321 Other congenital malformations of trachea -Q322 Congenital bronchomalacia -Q323 Congenital stenosis of bronchus -Q324 Other congenital malformations of bronchus -Q330 Congenital cystic lung -Q331 Accessory lobe of lung -Q332 Sequestration of lung -Q333 Agenesis of lung -Q334 Congenital bronchiectasis -Q335 Ectopic tissue in lung -Q336 Congenital hypoplasia and dysplasia of lung -Q338 Other congenital malformations of lung -Q339 Congenital malformation of lung, unspecified -Q340 Anomaly of pleura -Q341 Congenital cyst of mediastinum -Q348 Other specified congenital malformations of respiratory system -Q349 Congenital malformation of respiratory system, unspecified -Q351 Cleft hard palate -Q353 Cleft soft palate -Q355 Cleft hard palate with cleft soft palate -Q357 Cleft uvula -Q359 Cleft palate, unspecified -Q360 Cleft lip, bilateral -Q361 Cleft lip, median -Q369 Cleft lip, unilateral -Q370 Cleft hard palate with bilateral cleft lip -Q371 Cleft hard palate with unilateral cleft lip -Q372 Cleft soft palate with bilateral cleft lip -Q373 Cleft soft palate with unilateral cleft lip -Q374 Cleft hard and soft palate with bilateral cleft lip -Q375 Cleft hard and soft palate with unilateral cleft lip -Q378 Unspecified cleft palate with bilateral cleft lip -Q379 Unspecified cleft palate with unilateral cleft lip -Q380 Congenital malformations of lips, not elsewhere classified -Q381 Ankyloglossia -Q382 Macroglossia -Q383 Other congenital malformations of tongue -Q384 Congenital malformations of salivary glands and ducts -Q385 Congenital malformations of palate, not elsewhere classified -Q386 Other congenital malformations of mouth -Q387 Congenital pharyngeal pouch -Q388 Other congenital malformations of pharynx -Q390 Atresia of esophagus without fistula -Q391 Atresia of esophagus with tracheo-esophageal fistula -Q392 Congenital tracheo-esophageal fistula without atresia -Q393 Congenital stenosis and stricture of esophagus -Q394 Esophageal web -Q395 Congenital dilatation of esophagus -Q396 Congenital diverticulum of esophagus -Q398 Other congenital malformations of esophagus -Q399 Congenital malformation of esophagus, unspecified -Q400 Congenital hypertrophic pyloric stenosis -Q401 Congenital hiatus hernia -Q402 Other specified congenital malformations of stomach -Q403 Congenital malformation of stomach, unspecified -Q408 Other specified congenital malformations of upper alimentary tract -Q409 Congenital malformation of upper alimentary tract, unspecified -Q410 Congenital absence, atresia and stenosis of duodenum -Q411 Congenital absence, atresia and stenosis of jejunum -Q412 Congenital absence, atresia and stenosis of ileum -Q418 Congenital absence, atresia and stenosis of other specified parts of small intestine -Q419 Congenital absence, atresia and stenosis of small intestine, part unspecified -Q420 Congenital absence, atresia and stenosis of rectum with fistula -Q421 Congenital absence, atresia and stenosis of rectum without fistula -Q422 Congenital absence, atresia and stenosis of anus with fistula -Q423 Congenital absence, atresia and stenosis of anus without fistula -Q428 Congenital absence, atresia and stenosis of other parts of large intestine -Q429 Congenital absence, atresia and stenosis of large intestine, part unspecified -Q430 Meckel's diverticulum (displaced) (hypertrophic) -Q431 Hirschsprung's disease -Q432 Other congenital functional disorders of colon -Q433 Congenital malformations of intestinal fixation -Q434 Duplication of intestine -Q435 Ectopic anus -Q436 Congenital fistula of rectum and anus -Q437 Persistent cloaca -Q438 Other specified congenital malformations of intestine -Q439 Congenital malformation of intestine, unspecified -Q440 Agenesis, aplasia and hypoplasia of gallbladder -Q441 Other congenital malformations of gallbladder -Q442 Atresia of bile ducts -Q443 Congenital stenosis and stricture of bile ducts -Q444 Choledochal cyst -Q445 Other congenital malformations of bile ducts -Q446 Cystic disease of liver -Q447 Other congenital malformations of liver -Q450 Agenesis, aplasia and hypoplasia of pancreas -Q451 Annular pancreas -Q452 Congenital pancreatic cyst -Q453 Other congenital malformations of pancreas and pancreatic duct -Q458 Other specified congenital malformations of digestive system -Q459 Congenital malformation of digestive system, unspecified -Q5001 Congenital absence of ovary, unilateral -Q5002 Congenital absence of ovary, bilateral -Q501 Developmental ovarian cyst -Q502 Congenital torsion of ovary -Q5031 Accessory ovary -Q5032 Ovarian streak -Q5039 Other congenital malformation of ovary -Q504 Embryonic cyst of fallopian tube -Q505 Embryonic cyst of broad ligament -Q506 Other congenital malformations of fallopian tube and broad ligament -Q510 Agenesis and aplasia of uterus -Q5110 Doubling of uterus with doubling of cervix and vagina without obstruction -Q5111 Doubling of uterus with doubling of cervix and vagina with obstruction -Q512 Other doubling of uterus -Q513 Bicornate uterus -Q514 Unicornate uterus -Q515 Agenesis and aplasia of cervix -Q516 Embryonic cyst of cervix -Q517 Congenital fistulae between uterus and digestive and urinary tracts -Q51810 Arcuate uterus -Q51811 Hypoplasia of uterus -Q51818 Other congenital malformations of uterus -Q51820 Cervical duplication -Q51821 Hypoplasia of cervix -Q51828 Other congenital malformations of cervix -Q519 Congenital malformation of uterus and cervix, unspecified -Q520 Congenital absence of vagina -Q5210 Doubling of vagina, unspecified -Q5211 Transverse vaginal septum -Q5212 Longitudinal vaginal septum -Q522 Congenital rectovaginal fistula -Q523 Imperforate hymen -Q524 Other congenital malformations of vagina -Q525 Fusion of labia -Q526 Congenital malformation of clitoris -Q5270 Unspecified congenital malformations of vulva -Q5271 Congenital absence of vulva -Q5279 Other congenital malformations of vulva -Q528 Other specified congenital malformations of female genitalia -Q529 Congenital malformation of female genitalia, unspecified -Q5300 Ectopic testis, unspecified -Q5301 Ectopic testis, unilateral -Q5302 Ectopic testes, bilateral -Q5310 Unspecified undescended testicle, unilateral -Q5311 Abdominal testis, unilateral -Q5312 Ectopic perineal testis, unilateral -Q5320 Undescended testicle, unspecified, bilateral -Q5321 Abdominal testis, bilateral -Q5322 Ectopic perineal testis, bilateral -Q539 Undescended testicle, unspecified -Q540 Hypospadias, balanic -Q541 Hypospadias, penile -Q542 Hypospadias, penoscrotal -Q543 Hypospadias, perineal -Q544 Congenital chordee -Q548 Other hypospadias -Q549 Hypospadias, unspecified -Q550 Absence and aplasia of testis -Q551 Hypoplasia of testis and scrotum -Q5520 Unspecified congenital malformations of testis and scrotum -Q5521 Polyorchism -Q5522 Retractile testis -Q5523 Scrotal transposition -Q5529 Other congenital malformations of testis and scrotum -Q553 Atresia of vas deferens -Q554 Other congenital malformations of vas deferens, epididymis, seminal vesicles and prostate -Q555 Congenital absence and aplasia of penis -Q5561 Curvature of penis (lateral) -Q5562 Hypoplasia of penis -Q5563 Congenital torsion of penis -Q5564 Hidden penis -Q5569 Other congenital malformation of penis -Q557 Congenital vasocutaneous fistula -Q558 Other specified congenital malformations of male genital organs -Q559 Congenital malformation of male genital organ, unspecified -Q560 Hermaphroditism, not elsewhere classified -Q561 Male pseudohermaphroditism, not elsewhere classified -Q562 Female pseudohermaphroditism, not elsewhere classified -Q563 Pseudohermaphroditism, unspecified -Q564 Indeterminate sex, unspecified -Q600 Renal agenesis, unilateral -Q601 Renal agenesis, bilateral -Q602 Renal agenesis, unspecified -Q603 Renal hypoplasia, unilateral -Q604 Renal hypoplasia, bilateral -Q605 Renal hypoplasia, unspecified -Q606 Potter's syndrome -Q6100 Congenital renal cyst, unspecified -Q6101 Congenital single renal cyst -Q6102 Congenital multiple renal cysts -Q6111 Cystic dilatation of collecting ducts -Q6119 Other polycystic kidney, infantile type -Q612 Polycystic kidney, adult type -Q613 Polycystic kidney, unspecified -Q614 Renal dysplasia -Q615 Medullary cystic kidney -Q618 Other cystic kidney diseases -Q619 Cystic kidney disease, unspecified -Q620 Congenital hydronephrosis -Q6210 Congenital occlusion of ureter, unspecified -Q6211 Congenital occlusion of ureteropelvic junction -Q6212 Congenital occlusion of ureterovesical orifice -Q622 Congenital megaureter -Q6231 Congenital ureterocele, orthotopic -Q6232 Cecoureterocele -Q6239 Other obstructive defects of renal pelvis and ureter -Q624 Agenesis of ureter -Q625 Duplication of ureter -Q6260 Malposition of ureter, unspecified -Q6261 Deviation of ureter -Q6262 Displacement of ureter -Q6263 Anomalous implantation of ureter -Q6269 Other malposition of ureter -Q627 Congenital vesico-uretero-renal reflux -Q628 Other congenital malformations of ureter -Q630 Accessory kidney -Q631 Lobulated, fused and horseshoe kidney -Q632 Ectopic kidney -Q633 Hyperplastic and giant kidney -Q638 Other specified congenital malformations of kidney -Q639 Congenital malformation of kidney, unspecified -Q640 Epispadias -Q6410 Exstrophy of urinary bladder, unspecified -Q6411 Supravesical fissure of urinary bladder -Q6412 Cloacal extrophy of urinary bladder -Q6419 Other exstrophy of urinary bladder -Q642 Congenital posterior urethral valves -Q6431 Congenital bladder neck obstruction -Q6432 Congenital stricture of urethra -Q6433 Congenital stricture of urinary meatus -Q6439 Other atresia and stenosis of urethra and bladder neck -Q644 Malformation of urachus -Q645 Congenital absence of bladder and urethra -Q646 Congenital diverticulum of bladder -Q6470 Unspecified congenital malformation of bladder and urethra -Q6471 Congenital prolapse of urethra -Q6472 Congenital prolapse of urinary meatus -Q6473 Congenital urethrorectal fistula -Q6474 Double urethra -Q6475 Double urinary meatus -Q6479 Other congenital malformations of bladder and urethra -Q648 Other specified congenital malformations of urinary system -Q649 Congenital malformation of urinary system, unspecified -Q6500 Congenital dislocation of unspecified hip, unilateral -Q6501 Congenital dislocation of right hip, unilateral -Q6502 Congenital dislocation of left hip, unilateral -Q651 Congenital dislocation of hip, bilateral -Q652 Congenital dislocation of hip, unspecified -Q6530 Congenital partial dislocation of unspecified hip, unilateral -Q6531 Congenital partial dislocation of right hip, unilateral -Q6532 Congenital partial dislocation of left hip, unilateral -Q654 Congenital partial dislocation of hip, bilateral -Q655 Congenital partial dislocation of hip, unspecified -Q656 Congenital unstable hip -Q6581 Congenital coxa valga -Q6582 Congenital coxa vara -Q6589 Other specified congenital deformities of hip -Q659 Congenital deformity of hip, unspecified -Q660 Congenital talipes equinovarus -Q661 Congenital talipes calcaneovarus -Q662 Congenital metatarsus (primus) varus -Q663 Other congenital varus deformities of feet -Q664 Congenital talipes calcaneovalgus -Q6650 Congenital pes planus, unspecified foot -Q6651 Congenital pes planus, right foot -Q6652 Congenital pes planus, left foot -Q666 Other congenital valgus deformities of feet -Q667 Congenital pes cavus -Q6680 Congenital vertical talus deformity, unspecified foot -Q6681 Congenital vertical talus deformity, right foot -Q6682 Congenital vertical talus deformity, left foot -Q6689 Other specified congenital deformities of feet -Q669 Congenital deformity of feet, unspecified -Q670 Congenital facial asymmetry -Q671 Congenital compression facies -Q672 Dolichocephaly -Q673 Plagiocephaly -Q674 Other congenital deformities of skull, face and jaw -Q675 Congenital deformity of spine -Q676 Pectus excavatum -Q677 Pectus carinatum -Q678 Other congenital deformities of chest -Q680 Congenital deformity of sternocleidomastoid muscle -Q681 Congenital deformity of finger(s) and hand -Q682 Congenital deformity of knee -Q683 Congenital bowing of femur -Q684 Congenital bowing of tibia and fibula -Q685 Congenital bowing of long bones of leg, unspecified -Q686 Discoid meniscus -Q688 Other specified congenital musculoskeletal deformities -Q690 Accessory finger(s) -Q691 Accessory thumb(s) -Q692 Accessory toe(s) -Q699 Polydactyly, unspecified -Q7000 Fused fingers, unspecified hand -Q7001 Fused fingers, right hand -Q7002 Fused fingers, left hand -Q7003 Fused fingers, bilateral -Q7010 Webbed fingers, unspecified hand -Q7011 Webbed fingers, right hand -Q7012 Webbed fingers, left hand -Q7013 Webbed fingers, bilateral -Q7020 Fused toes, unspecified foot -Q7021 Fused toes, right foot -Q7022 Fused toes, left foot -Q7023 Fused toes, bilateral -Q7030 Webbed toes, unspecified foot -Q7031 Webbed toes, right foot -Q7032 Webbed toes, left foot -Q7033 Webbed toes, bilateral -Q704 Polysyndactyly, unspecified -Q709 Syndactyly, unspecified -Q7100 Congenital complete absence of unspecified upper limb -Q7101 Congenital complete absence of right upper limb -Q7102 Congenital complete absence of left upper limb -Q7103 Congenital complete absence of upper limb, bilateral -Q7110 Congenital absence of unspecified upper arm and forearm with hand present -Q7111 Congenital absence of right upper arm and forearm with hand present -Q7112 Congenital absence of left upper arm and forearm with hand present -Q7113 Congenital absence of upper arm and forearm with hand present, bilateral -Q7120 Congenital absence of both forearm and hand, unspecified upper limb -Q7121 Congenital absence of both forearm and hand, right upper limb -Q7122 Congenital absence of both forearm and hand, left upper limb -Q7123 Congenital absence of both forearm and hand, bilateral -Q7130 Congenital absence of unspecified hand and finger -Q7131 Congenital absence of right hand and finger -Q7132 Congenital absence of left hand and finger -Q7133 Congenital absence of hand and finger, bilateral -Q7140 Longitudinal reduction defect of unspecified radius -Q7141 Longitudinal reduction defect of right radius -Q7142 Longitudinal reduction defect of left radius -Q7143 Longitudinal reduction defect of radius, bilateral -Q7150 Longitudinal reduction defect of unspecified ulna -Q7151 Longitudinal reduction defect of right ulna -Q7152 Longitudinal reduction defect of left ulna -Q7153 Longitudinal reduction defect of ulna, bilateral -Q7160 Lobster-claw hand, unspecified hand -Q7161 Lobster-claw right hand -Q7162 Lobster-claw left hand -Q7163 Lobster-claw hand, bilateral -Q71811 Congenital shortening of right upper limb -Q71812 Congenital shortening of left upper limb -Q71813 Congenital shortening of upper limb, bilateral -Q71819 Congenital shortening of unspecified upper limb -Q71891 Other reduction defects of right upper limb -Q71892 Other reduction defects of left upper limb -Q71893 Other reduction defects of upper limb, bilateral -Q71899 Other reduction defects of unspecified upper limb -Q7190 Unspecified reduction defect of unspecified upper limb -Q7191 Unspecified reduction defect of right upper limb -Q7192 Unspecified reduction defect of left upper limb -Q7193 Unspecified reduction defect of upper limb, bilateral -Q7200 Congenital complete absence of unspecified lower limb -Q7201 Congenital complete absence of right lower limb -Q7202 Congenital complete absence of left lower limb -Q7203 Congenital complete absence of lower limb, bilateral -Q7210 Congenital absence of unspecified thigh and lower leg with foot present -Q7211 Congenital absence of right thigh and lower leg with foot present -Q7212 Congenital absence of left thigh and lower leg with foot present -Q7213 Congenital absence of thigh and lower leg with foot present, bilateral -Q7220 Congenital absence of both lower leg and foot, unspecified lower limb -Q7221 Congenital absence of both lower leg and foot, right lower limb -Q7222 Congenital absence of both lower leg and foot, left lower limb -Q7223 Congenital absence of both lower leg and foot, bilateral -Q7230 Congenital absence of unspecified foot and toe(s) -Q7231 Congenital absence of right foot and toe(s) -Q7232 Congenital absence of left foot and toe(s) -Q7233 Congenital absence of foot and toe(s), bilateral -Q7240 Longitudinal reduction defect of unspecified femur -Q7241 Longitudinal reduction defect of right femur -Q7242 Longitudinal reduction defect of left femur -Q7243 Longitudinal reduction defect of femur, bilateral -Q7250 Longitudinal reduction defect of unspecified tibia -Q7251 Longitudinal reduction defect of right tibia -Q7252 Longitudinal reduction defect of left tibia -Q7253 Longitudinal reduction defect of tibia, bilateral -Q7260 Longitudinal reduction defect of unspecified fibula -Q7261 Longitudinal reduction defect of right fibula -Q7262 Longitudinal reduction defect of left fibula -Q7263 Longitudinal reduction defect of fibula, bilateral -Q7270 Split foot, unspecified lower limb -Q7271 Split foot, right lower limb -Q7272 Split foot, left lower limb -Q7273 Split foot, bilateral -Q72811 Congenital shortening of right lower limb -Q72812 Congenital shortening of left lower limb -Q72813 Congenital shortening of lower limb, bilateral -Q72819 Congenital shortening of unspecified lower limb -Q72891 Other reduction defects of right lower limb -Q72892 Other reduction defects of left lower limb -Q72893 Other reduction defects of lower limb, bilateral -Q72899 Other reduction defects of unspecified lower limb -Q7290 Unspecified reduction defect of unspecified lower limb -Q7291 Unspecified reduction defect of right lower limb -Q7292 Unspecified reduction defect of left lower limb -Q7293 Unspecified reduction defect of lower limb, bilateral -Q730 Congenital absence of unspecified limb(s) -Q731 Phocomelia, unspecified limb(s) -Q738 Other reduction defects of unspecified limb(s) -Q740 Other congenital malformations of upper limb(s), including shoulder girdle -Q741 Congenital malformation of knee -Q742 Other congenital malformations of lower limb(s), including pelvic girdle -Q743 Arthrogryposis multiplex congenita -Q748 Other specified congenital malformations of limb(s) -Q749 Unspecified congenital malformation of limb(s) -Q750 Craniosynostosis -Q751 Craniofacial dysostosis -Q752 Hypertelorism -Q753 Macrocephaly -Q754 Mandibulofacial dysostosis -Q755 Oculomandibular dysostosis -Q758 Other specified congenital malformations of skull and face bones -Q759 Congenital malformation of skull and face bones, unspecified -Q760 Spina bifida occulta -Q761 Klippel-Feil syndrome -Q762 Congenital spondylolisthesis -Q763 Congenital scoliosis due to congenital bony malformation -Q76411 Congenital kyphosis, occipito-atlanto-axial region -Q76412 Congenital kyphosis, cervical region -Q76413 Congenital kyphosis, cervicothoracic region -Q76414 Congenital kyphosis, thoracic region -Q76415 Congenital kyphosis, thoracolumbar region -Q76419 Congenital kyphosis, unspecified region -Q76425 Congenital lordosis, thoracolumbar region -Q76426 Congenital lordosis, lumbar region -Q76427 Congenital lordosis, lumbosacral region -Q76428 Congenital lordosis, sacral and sacrococcygeal region -Q76429 Congenital lordosis, unspecified region -Q7649 Other congenital malformations of spine, not associated with scoliosis -Q765 Cervical rib -Q766 Other congenital malformations of ribs -Q767 Congenital malformation of sternum -Q768 Other congenital malformations of bony thorax -Q769 Congenital malformation of bony thorax, unspecified -Q770 Achondrogenesis -Q771 Thanatophoric short stature -Q772 Short rib syndrome -Q773 Chondrodysplasia punctata -Q774 Achondroplasia -Q775 Diastrophic dysplasia -Q776 Chondroectodermal dysplasia -Q777 Spondyloepiphyseal dysplasia -Q778 Other osteochondrodysplasia with defects of growth of tubular bones and spine -Q779 Osteochondrodysplasia with defects of growth of tubular bones and spine, unspecified -Q780 Osteogenesis imperfecta -Q781 Polyostotic fibrous dysplasia -Q782 Osteopetrosis -Q783 Progressive diaphyseal dysplasia -Q784 Enchondromatosis -Q785 Metaphyseal dysplasia -Q786 Multiple congenital exostoses -Q788 Other specified osteochondrodysplasias -Q789 Osteochondrodysplasia, unspecified -Q790 Congenital diaphragmatic hernia -Q791 Other congenital malformations of diaphragm -Q792 Exomphalos -Q793 Gastroschisis -Q794 Prune belly syndrome -Q7951 Congenital hernia of bladder -Q7959 Other congenital malformations of abdominal wall -Q796 Ehlers-Danlos syndrome -Q798 Other congenital malformations of musculoskeletal system -Q799 Congenital malformation of musculoskeletal system, unspecified -Q800 Ichthyosis vulgaris -Q801 X-linked ichthyosis -Q802 Lamellar ichthyosis -Q803 Congenital bullous ichthyosiform erythroderma -Q804 Harlequin fetus -Q808 Other congenital ichthyosis -Q809 Congenital ichthyosis, unspecified -Q810 Epidermolysis bullosa simplex -Q811 Epidermolysis bullosa letalis -Q812 Epidermolysis bullosa dystrophica -Q818 Other epidermolysis bullosa -Q819 Epidermolysis bullosa, unspecified -Q820 Hereditary lymphedema -Q821 Xeroderma pigmentosum -Q822 Mastocytosis -Q823 Incontinentia pigmenti -Q824 Ectodermal dysplasia (anhidrotic) -Q825 Congenital non-neoplastic nevus -Q828 Other specified congenital malformations of skin -Q829 Congenital malformation of skin, unspecified -Q830 Congenital absence of breast with absent nipple -Q831 Accessory breast -Q832 Absent nipple -Q833 Accessory nipple -Q838 Other congenital malformations of breast -Q839 Congenital malformation of breast, unspecified -Q840 Congenital alopecia -Q841 Congenital morphological disturbances of hair, not elsewhere classified -Q842 Other congenital malformations of hair -Q843 Anonychia -Q844 Congenital leukonychia -Q845 Enlarged and hypertrophic nails -Q846 Other congenital malformations of nails -Q848 Other specified congenital malformations of integument -Q849 Congenital malformation of integument, unspecified -Q8500 Neurofibromatosis, unspecified -Q8501 Neurofibromatosis, type 1 -Q8502 Neurofibromatosis, type 2 -Q8503 Schwannomatosis -Q8509 Other neurofibromatosis -Q851 Tuberous sclerosis -Q858 Other phakomatoses, not elsewhere classified -Q859 Phakomatosis, unspecified -Q860 Fetal alcohol syndrome (dysmorphic) -Q861 Fetal hydantoin syndrome -Q862 Dysmorphism due to warfarin -Q868 Other congenital malformation syndromes due to known exogenous causes -Q870 Congenital malformation syndromes predominantly affecting facial appearance -Q871 Congenital malformation syndromes predominantly associated with short stature -Q872 Congenital malformation syndromes predominantly involving limbs -Q873 Congenital malformation syndromes involving early overgrowth -Q8740 Marfan's syndrome, unspecified -Q87410 Marfan's syndrome with aortic dilation -Q87418 Marfan's syndrome with other cardiovascular manifestations -Q8742 Marfan's syndrome with ocular manifestations -Q8743 Marfan's syndrome with skeletal manifestation -Q875 Other congenital malformation syndromes with other skeletal changes -Q8781 Alport syndrome -Q8789 Other specified congenital malformation syndromes, not elsewhere classified -Q8901 Asplenia (congenital) -Q8909 Congenital malformations of spleen -Q891 Congenital malformations of adrenal gland -Q892 Congenital malformations of other endocrine glands -Q893 Situs inversus -Q894 Conjoined twins -Q897 Multiple congenital malformations, not elsewhere classified -Q898 Other specified congenital malformations -Q899 Congenital malformation, unspecified -Q900 Trisomy 21, nonmosaicism (meiotic nondisjunction) -Q901 Trisomy 21, mosaicism (mitotic nondisjunction) -Q902 Trisomy 21, translocation -Q909 Down syndrome, unspecified -Q910 Trisomy 18, nonmosaicism (meiotic nondisjunction) -Q911 Trisomy 18, mosaicism (mitotic nondisjunction) -Q912 Trisomy 18, translocation -Q913 Trisomy 18, unspecified -Q914 Trisomy 13, nonmosaicism (meiotic nondisjunction) -Q915 Trisomy 13, mosaicism (mitotic nondisjunction) -Q916 Trisomy 13, translocation -Q917 Trisomy 13, unspecified -Q920 Whole chromosome trisomy, nonmosaicism (meiotic nondisjunction) -Q921 Whole chromosome trisomy, mosaicism (mitotic nondisjunction) -Q922 Partial trisomy -Q925 Duplications with other complex rearrangements -Q9261 Marker chromosomes in normal individual -Q9262 Marker chromosomes in abnormal individual -Q927 Triploidy and polyploidy -Q928 Other specified trisomies and partial trisomies of autosomes -Q929 Trisomy and partial trisomy of autosomes, unspecified -Q930 Whole chromosome monosomy, nonmosaicism (meiotic nondisjunction) -Q931 Whole chromosome monosomy, mosaicism (mitotic nondisjunction) -Q932 Chromosome replaced with ring, dicentric or isochromosome -Q933 Deletion of short arm of chromosome 4 -Q934 Deletion of short arm of chromosome 5 -Q935 Other deletions of part of a chromosome -Q937 Deletions with other complex rearrangements -Q9381 Velo-cardio-facial syndrome -Q9388 Other microdeletions -Q9389 Other deletions from the autosomes -Q939 Deletion from autosomes, unspecified -Q950 Balanced translocation and insertion in normal individual -Q951 Chromosome inversion in normal individual -Q952 Balanced autosomal rearrangement in abnormal individual -Q953 Balanced sex/autosomal rearrangement in abnormal individual -Q955 Individual with autosomal fragile site -Q958 Other balanced rearrangements and structural markers -Q959 Balanced rearrangement and structural marker, unspecified -Q960 Karyotype 45, X -Q961 Karyotype 46, X iso (Xq) -Q962 Karyotype 46, X with abnormal sex chromosome, except iso (Xq) -Q963 Mosaicism, 45, X/46, XX or XY -Q964 Mosaicism, 45, X/other cell line(s) with abnormal sex chromosome -Q968 Other variants of Turner's syndrome -Q969 Turner's syndrome, unspecified -Q970 Karyotype 47, XXX -Q971 Female with more than three X chromosomes -Q972 Mosaicism, lines with various numbers of X chromosomes -Q973 Female with 46, XY karyotype -Q978 Other specified sex chromosome abnormalities, female phenotype -Q979 Sex chromosome abnormality, female phenotype, unspecified -Q980 Klinefelter syndrome karyotype 47, XXY -Q981 Klinefelter syndrome, male with more than two X chromosomes -Q983 Other male with 46, XX karyotype -Q984 Klinefelter syndrome, unspecified -Q985 Karyotype 47, XYY -Q986 Male with structurally abnormal sex chromosome -Q987 Male with sex chromosome mosaicism -Q988 Other specified sex chromosome abnormalities, male phenotype -Q989 Sex chromosome abnormality, male phenotype, unspecified -Q990 Chimera 46, XX/46, XY -Q991 46, XX true hermaphrodite -Q992 Fragile X chromosome -Q998 Other specified chromosome abnormalities -Q999 Chromosomal abnormality, unspecified -R000 Tachycardia, unspecified -R001 Bradycardia, unspecified -R002 Palpitations -R008 Other abnormalities of heart beat -R009 Unspecified abnormalities of heart beat -R010 Benign and innocent cardiac murmurs -R011 Cardiac murmur, unspecified -R012 Other cardiac sounds -R030 Elevated blood-pressure reading, without diagnosis of hypertension -R031 Nonspecific low blood-pressure reading -R040 Epistaxis -R041 Hemorrhage from throat -R042 Hemoptysis -R0481 Acute idiopathic pulmonary hemorrhage in infants -R0489 Hemorrhage from other sites in respiratory passages -R049 Hemorrhage from respiratory passages, unspecified -R05 Cough -R0600 Dyspnea, unspecified -R0601 Orthopnea -R0602 Shortness of breath -R0609 Other forms of dyspnea -R061 Stridor -R062 Wheezing -R063 Periodic breathing -R064 Hyperventilation -R065 Mouth breathing -R066 Hiccough -R067 Sneezing -R0681 Apnea, not elsewhere classified -R0682 Tachypnea, not elsewhere classified -R0683 Snoring -R0689 Other abnormalities of breathing -R069 Unspecified abnormalities of breathing -R070 Pain in throat -R071 Chest pain on breathing -R072 Precordial pain -R0781 Pleurodynia -R0782 Intercostal pain -R0789 Other chest pain -R079 Chest pain, unspecified -R0901 Asphyxia -R0902 Hypoxemia -R091 Pleurisy -R092 Respiratory arrest -R093 Abnormal sputum -R0981 Nasal congestion -R0982 Postnasal drip -R0989 Other specified symptoms and signs involving the circulatory and respiratory systems -R100 Acute abdomen -R1010 Upper abdominal pain, unspecified -R1011 Right upper quadrant pain -R1012 Left upper quadrant pain -R1013 Epigastric pain -R102 Pelvic and perineal pain -R1030 Lower abdominal pain, unspecified -R1031 Right lower quadrant pain -R1032 Left lower quadrant pain -R1033 Periumbilical pain -R10811 Right upper quadrant abdominal tenderness -R10812 Left upper quadrant abdominal tenderness -R10813 Right lower quadrant abdominal tenderness -R10814 Left lower quadrant abdominal tenderness -R10815 Periumbilic abdominal tenderness -R10816 Epigastric abdominal tenderness -R10817 Generalized abdominal tenderness -R10819 Abdominal tenderness, unspecified site -R10821 Right upper quadrant rebound abdominal tenderness -R10822 Left upper quadrant rebound abdominal tenderness -R10823 Right lower quadrant rebound abdominal tenderness -R10824 Left lower quadrant rebound abdominal tenderness -R10825 Periumbilic rebound abdominal tenderness -R10826 Epigastric rebound abdominal tenderness -R10827 Generalized rebound abdominal tenderness -R10829 Rebound abdominal tenderness, unspecified site -R1083 Colic -R1084 Generalized abdominal pain -R109 Unspecified abdominal pain -R110 Nausea -R1110 Vomiting, unspecified -R1111 Vomiting without nausea -R1112 Projectile vomiting -R1113 Vomiting of fecal matter -R1114 Bilious vomiting -R112 Nausea with vomiting, unspecified -R12 Heartburn -R130 Aphagia -R1310 Dysphagia, unspecified -R1311 Dysphagia, oral phase -R1312 Dysphagia, oropharyngeal phase -R1313 Dysphagia, pharyngeal phase -R1314 Dysphagia, pharyngoesophageal phase -R1319 Other dysphagia -R140 Abdominal distension (gaseous) -R141 Gas pain -R142 Eructation -R143 Flatulence -R150 Incomplete defecation -R151 Fecal smearing -R152 Fecal urgency -R159 Full incontinence of feces -R160 Hepatomegaly, not elsewhere classified -R161 Splenomegaly, not elsewhere classified -R162 Hepatomegaly with splenomegaly, not elsewhere classified -R17 Unspecified jaundice -R180 Malignant ascites -R188 Other ascites -R1900 Intra-abdominal and pelvic swelling, mass and lump, unspecified site -R1901 Right upper quadrant abdominal swelling, mass and lump -R1902 Left upper quadrant abdominal swelling, mass and lump -R1903 Right lower quadrant abdominal swelling, mass and lump -R1904 Left lower quadrant abdominal swelling, mass and lump -R1905 Periumbilic swelling, mass or lump -R1906 Epigastric swelling, mass or lump -R1907 Generalized intra-abdominal and pelvic swelling, mass and lump -R1909 Other intra-abdominal and pelvic swelling, mass and lump -R1911 Absent bowel sounds -R1912 Hyperactive bowel sounds -R1915 Other abnormal bowel sounds -R192 Visible peristalsis -R1930 Abdominal rigidity, unspecified site -R1931 Right upper quadrant abdominal rigidity -R1932 Left upper quadrant abdominal rigidity -R1933 Right lower quadrant abdominal rigidity -R1934 Left lower quadrant abdominal rigidity -R1935 Periumbilic abdominal rigidity -R1936 Epigastric abdominal rigidity -R1937 Generalized abdominal rigidity -R194 Change in bowel habit -R195 Other fecal abnormalities -R196 Halitosis -R197 Diarrhea, unspecified -R198 Other specified symptoms and signs involving the digestive system and abdomen -R200 Anesthesia of skin -R201 Hypoesthesia of skin -R202 Paresthesia of skin -R203 Hyperesthesia -R208 Other disturbances of skin sensation -R209 Unspecified disturbances of skin sensation -R21 Rash and other nonspecific skin eruption -R220 Localized swelling, mass and lump, head -R221 Localized swelling, mass and lump, neck -R222 Localized swelling, mass and lump, trunk -R2230 Localized swelling, mass and lump, unspecified upper limb -R2231 Localized swelling, mass and lump, right upper limb -R2232 Localized swelling, mass and lump, left upper limb -R2233 Localized swelling, mass and lump, upper limb, bilateral -R2240 Localized swelling, mass and lump, unspecified lower limb -R2241 Localized swelling, mass and lump, right lower limb -R2242 Localized swelling, mass and lump, left lower limb -R2243 Localized swelling, mass and lump, lower limb, bilateral -R229 Localized swelling, mass and lump, unspecified -R230 Cyanosis -R231 Pallor -R232 Flushing -R233 Spontaneous ecchymoses -R234 Changes in skin texture -R238 Other skin changes -R239 Unspecified skin changes -R250 Abnormal head movements -R251 Tremor, unspecified -R252 Cramp and spasm -R253 Fasciculation -R258 Other abnormal involuntary movements -R259 Unspecified abnormal involuntary movements -R260 Ataxic gait -R261 Paralytic gait -R262 Difficulty in walking, not elsewhere classified -R2681 Unsteadiness on feet -R2689 Other abnormalities of gait and mobility -R269 Unspecified abnormalities of gait and mobility -R270 Ataxia, unspecified -R278 Other lack of coordination -R279 Unspecified lack of coordination -R290 Tetany -R291 Meningismus -R292 Abnormal reflex -R293 Abnormal posture -R294 Clicking hip -R295 Transient paralysis -R296 Repeated falls -R29810 Facial weakness -R29818 Other symptoms and signs involving the nervous system -R29890 Loss of height -R29891 Ocular torticollis -R29898 Other symptoms and signs involving the musculoskeletal system -R2990 Unspecified symptoms and signs involving the nervous system -R2991 Unspecified symptoms and signs involving the musculoskeletal system -R300 Dysuria -R301 Vesical tenesmus -R309 Painful micturition, unspecified -R310 Gross hematuria -R311 Benign essential microscopic hematuria -R312 Other microscopic hematuria -R319 Hematuria, unspecified -R32 Unspecified urinary incontinence -R330 Drug induced retention of urine -R338 Other retention of urine -R339 Retention of urine, unspecified -R34 Anuria and oliguria -R350 Frequency of micturition -R351 Nocturia -R358 Other polyuria -R360 Urethral discharge without blood -R361 Hematospermia -R369 Urethral discharge, unspecified -R37 Sexual dysfunction, unspecified -R390 Extravasation of urine -R3911 Hesitancy of micturition -R3912 Poor urinary stream -R3913 Splitting of urinary stream -R3914 Feeling of incomplete bladder emptying -R3915 Urgency of urination -R3916 Straining to void -R3919 Other difficulties with micturition -R392 Extrarenal uremia -R3981 Functional urinary incontinence -R3989 Other symptoms and signs involving the genitourinary system -R399 Unspecified symptoms and signs involving the genitourinary system -R400 Somnolence -R401 Stupor -R4020 Unspecified coma -R402110 Coma scale, eyes open, never, unspecified time -R402111 Coma scale, eyes open, never, in the field [EMT or ambulance] -R402112 Coma scale, eyes open, never, at arrival to emergency department -R402113 Coma scale, eyes open, never, at hospital admission -R402114 Coma scale, eyes open, never, 24 hours or more after hospital admission -R402120 Coma scale, eyes open, to pain, unspecified time -R402121 Coma scale, eyes open, to pain, in the field [EMT or ambulance] -R402122 Coma scale, eyes open, to pain, at arrival to emergency department -R402123 Coma scale, eyes open, to pain, at hospital admission -R402124 Coma scale, eyes open, to pain, 24 hours or more after hospital admission -R402130 Coma scale, eyes open, to sound, unspecified time -R402131 Coma scale, eyes open, to sound, in the field [EMT or ambulance] -R402132 Coma scale, eyes open, to sound, at arrival to emergency department -R402133 Coma scale, eyes open, to sound, at hospital admission -R402134 Coma scale, eyes open, to sound, 24 hours or more after hospital admission -R402140 Coma scale, eyes open, spontaneous, unspecified time -R402141 Coma scale, eyes open, spontaneous, in the field [EMT or ambulance] -R402142 Coma scale, eyes open, spontaneous, at arrival to emergency department -R402143 Coma scale, eyes open, spontaneous, at hospital admission -R402144 Coma scale, eyes open, spontaneous, 24 hours or more after hospital admission -R402210 Coma scale, best verbal response, none, unspecified time -R402211 Coma scale, best verbal response, none, in the field [EMT or ambulance] -R402212 Coma scale, best verbal response, none, at arrival to emergency department -R402213 Coma scale, best verbal response, none, at hospital admission -R402214 Coma scale, best verbal response, none, 24 hours or more after hospital admission -R402220 Coma scale, best verbal response, incomprehensible words, unspecified time -R402221 Coma scale, best verbal response, incomprehensible words, in the field [EMT or ambulance] -R402222 Coma scale, best verbal response, incomprehensible words, at arrival to emergency department -R402223 Coma scale, best verbal response, incomprehensible words, at hospital admission -R402224 Coma scale, best verbal response, incomprehensible words, 24 hours or more after hospital admission -R402230 Coma scale, best verbal response, inappropriate words, unspecified time -R402231 Coma scale, best verbal response, inappropriate words, in the field [EMT or ambulance] -R402232 Coma scale, best verbal response, inappropriate words, at arrival to emergency department -R402233 Coma scale, best verbal response, inappropriate words, at hospital admission -R402234 Coma scale, best verbal response, inappropriate words, 24 hours or more after hospital admission -R402240 Coma scale, best verbal response, confused conversation, unspecified time -R402241 Coma scale, best verbal response, confused conversation, in the field [EMT or ambulance] -R402242 Coma scale, best verbal response, confused conversation, at arrival to emergency department -R402243 Coma scale, best verbal response, confused conversation, at hospital admission -R402244 Coma scale, best verbal response, confused conversation, 24 hours or more after hospital admission -R402250 Coma scale, best verbal response, oriented, unspecified time -R402251 Coma scale, best verbal response, oriented, in the field [EMT or ambulance] -R402252 Coma scale, best verbal response, oriented, at arrival to emergency department -R402253 Coma scale, best verbal response, oriented, at hospital admission -R402254 Coma scale, best verbal response, oriented, 24 hours or more after hospital admission -R402310 Coma scale, best motor response, none, unspecified time -R402311 Coma scale, best motor response, none, in the field [EMT or ambulance] -R402312 Coma scale, best motor response, none, at arrival to emergency department -R402313 Coma scale, best motor response, none, at hospital admission -R402314 Coma scale, best motor response, none, 24 hours or more after hospital admission -R402320 Coma scale, best motor response, extension, unspecified time -R402321 Coma scale, best motor response, extension, in the field [EMT or ambulance] -R402322 Coma scale, best motor response, extension, at arrival to emergency department -R402323 Coma scale, best motor response, extension, at hospital admission -R402324 Coma scale, best motor response, extension, 24 hours or more after hospital admission -R402330 Coma scale, best motor response, abnormal, unspecified time -R402331 Coma scale, best motor response, abnormal, in the field [EMT or ambulance] -R402332 Coma scale, best motor response, abnormal, at arrival to emergency department -R402333 Coma scale, best motor response, abnormal, at hospital admission -R402334 Coma scale, best motor response, abnormal, 24 hours or more after hospital admission -R402340 Coma scale, best motor response, flexion withdrawal, unspecified time -R402341 Coma scale, best motor response, flexion withdrawal, in the field [EMT or ambulance] -R402342 Coma scale, best motor response, flexion withdrawal, at arrival to emergency department -R402343 Coma scale, best motor response, flexion withdrawal, at hospital admission -R402344 Coma scale, best motor response, flexion withdrawal, 24 hours or more after hospital admission -R402350 Coma scale, best motor response, localizes pain, unspecified time -R402351 Coma scale, best motor response, localizes pain, in the field [EMT or ambulance] -R402352 Coma scale, best motor response, localizes pain, at arrival to emergency department -R402353 Coma scale, best motor response, localizes pain, at hospital admission -R402354 Coma scale, best motor response, localizes pain, 24 hours or more after hospital admission -R402360 Coma scale, best motor response, obeys commands, unspecified time -R402361 Coma scale, best motor response, obeys commands, in the field [EMT or ambulance] -R402362 Coma scale, best motor response, obeys commands, at arrival to emergency department -R402363 Coma scale, best motor response, obeys commands, at hospital admission -R402364 Coma scale, best motor response, obeys commands, 24 hours or more after hospital admission -R40241 Glasgow coma scale score 13-15 -R40242 Glasgow coma scale score 9-12 -R40243 Glasgow coma scale score 3-8 -R40244 Other coma, without documented Glasgow coma scale score, or with partial score reported -R403 Persistent vegetative state -R404 Transient alteration of awareness -R410 Disorientation, unspecified -R411 Anterograde amnesia -R412 Retrograde amnesia -R413 Other amnesia -R414 Neurologic neglect syndrome -R4181 Age-related cognitive decline -R4182 Altered mental status, unspecified -R4183 Borderline intellectual functioning -R41840 Attention and concentration deficit -R41841 Cognitive communication deficit -R41842 Visuospatial deficit -R41843 Psychomotor deficit -R41844 Frontal lobe and executive function deficit -R4189 Other symptoms and signs involving cognitive functions and awareness -R419 Unspecified symptoms and signs involving cognitive functions and awareness -R42 Dizziness and giddiness -R430 Anosmia -R431 Parosmia -R432 Parageusia -R438 Other disturbances of smell and taste -R439 Unspecified disturbances of smell and taste -R440 Auditory hallucinations -R441 Visual hallucinations -R442 Other hallucinations -R443 Hallucinations, unspecified -R448 Other symptoms and signs involving general sensations and perceptions -R449 Unspecified symptoms and signs involving general sensations and perceptions -R450 Nervousness -R451 Restlessness and agitation -R452 Unhappiness -R453 Demoralization and apathy -R454 Irritability and anger -R455 Hostility -R456 Violent behavior -R457 State of emotional shock and stress, unspecified -R4581 Low self-esteem -R4582 Worries -R4583 Excessive crying of child, adolescent or adult -R4584 Anhedonia -R45850 Homicidal ideations -R45851 Suicidal ideations -R4586 Emotional lability -R4587 Impulsiveness -R4589 Other symptoms and signs involving emotional state -R460 Very low level of personal hygiene -R461 Bizarre personal appearance -R462 Strange and inexplicable behavior -R463 Overactivity -R464 Slowness and poor responsiveness -R465 Suspiciousness and marked evasiveness -R466 Undue concern and preoccupation with stressful events -R467 Verbosity and circumstantial detail obscuring reason for contact -R4681 Obsessive-compulsive behavior -R4689 Other symptoms and signs involving appearance and behavior -R4701 Aphasia -R4702 Dysphasia -R471 Dysarthria and anarthria -R4781 Slurred speech -R4782 Fluency disorder in conditions classified elsewhere -R4789 Other speech disturbances -R479 Unspecified speech disturbances -R480 Dyslexia and alexia -R481 Agnosia -R482 Apraxia -R483 Visual agnosia -R488 Other symbolic dysfunctions -R489 Unspecified symbolic dysfunctions -R490 Dysphonia -R491 Aphonia -R4921 Hypernasality -R4922 Hyponasality -R498 Other voice and resonance disorders -R499 Unspecified voice and resonance disorder -R502 Drug induced fever -R5081 Fever presenting with conditions classified elsewhere -R5082 Postprocedural fever -R5083 Postvaccination fever -R5084 Febrile nonhemolytic transfusion reaction -R509 Fever, unspecified -R51 Headache -R52 Pain, unspecified -R530 Neoplastic (malignant) related fatigue -R531 Weakness -R532 Functional quadriplegia -R5381 Other malaise -R5382 Chronic fatigue, unspecified -R5383 Other fatigue -R54 Age-related physical debility -R55 Syncope and collapse -R5600 Simple febrile convulsions -R5601 Complex febrile convulsions -R561 Post traumatic seizures -R569 Unspecified convulsions -R570 Cardiogenic shock -R571 Hypovolemic shock -R578 Other shock -R579 Shock, unspecified -R58 Hemorrhage, not elsewhere classified -R590 Localized enlarged lymph nodes -R591 Generalized enlarged lymph nodes -R599 Enlarged lymph nodes, unspecified -R600 Localized edema -R601 Generalized edema -R609 Edema, unspecified -R61 Generalized hyperhidrosis -R620 Delayed milestone in childhood -R6250 Unspecified lack of expected normal physiological development in childhood -R6251 Failure to thrive (child) -R6252 Short stature (child) -R6259 Other lack of expected normal physiological development in childhood -R627 Adult failure to thrive -R630 Anorexia -R631 Polydipsia -R632 Polyphagia -R633 Feeding difficulties -R634 Abnormal weight loss -R635 Abnormal weight gain -R636 Underweight -R638 Other symptoms and signs concerning food and fluid intake -R64 Cachexia -R6510 Systemic inflammatory response syndrome (SIRS) of non-infectious origin without acute organ dysfunction -R6511 Systemic inflammatory response syndrome (SIRS) of non-infectious origin with acute organ dysfunction -R6520 Severe sepsis without septic shock -R6521 Severe sepsis with septic shock -R680 Hypothermia, not associated with low environmental temperature -R6811 Excessive crying of infant (baby) -R6812 Fussy infant (baby) -R6813 Apparent life threatening event in infant (ALTE) -R6819 Other nonspecific symptoms peculiar to infancy -R682 Dry mouth, unspecified -R683 Clubbing of fingers -R6881 Early satiety -R6882 Decreased libido -R6883 Chills (without fever) -R6884 Jaw pain -R6889 Other general symptoms and signs -R69 Illness, unspecified -R700 Elevated erythrocyte sedimentation rate -R701 Abnormal plasma viscosity -R710 Precipitous drop in hematocrit -R718 Other abnormality of red blood cells -R7301 Impaired fasting glucose -R7302 Impaired glucose tolerance (oral) -R7309 Other abnormal glucose -R739 Hyperglycemia, unspecified -R740 Nonspecific elevation of levels of transaminase and lactic acid dehydrogenase [LDH] -R748 Abnormal levels of other serum enzymes -R749 Abnormal serum enzyme level, unspecified -R75 Inconclusive laboratory evidence of human immunodeficiency virus [HIV] -R760 Raised antibody titer -R7611 Nonspecific reaction to tuberculin skin test without active tuberculosis -R7612 Nonspecific reaction to cell mediated immunity measurement of gamma interferon antigen response without active tuberculosis -R768 Other specified abnormal immunological findings in serum -R769 Abnormal immunological finding in serum, unspecified -R770 Abnormality of albumin -R771 Abnormality of globulin -R772 Abnormality of alphafetoprotein -R778 Other specified abnormalities of plasma proteins -R779 Abnormality of plasma protein, unspecified -R780 Finding of alcohol in blood -R781 Finding of opiate drug in blood -R782 Finding of cocaine in blood -R783 Finding of hallucinogen in blood -R784 Finding of other drugs of addictive potential in blood -R785 Finding of other psychotropic drug in blood -R786 Finding of steroid agent in blood -R7871 Abnormal lead level in blood -R7879 Finding of abnormal level of heavy metals in blood -R7881 Bacteremia -R7889 Finding of other specified substances, not normally found in blood -R789 Finding of unspecified substance, not normally found in blood -R790 Abnormal level of blood mineral -R791 Abnormal coagulation profile -R7981 Abnormal blood-gas level -R7982 Elevated C-reactive protein (CRP) -R7989 Other specified abnormal findings of blood chemistry -R799 Abnormal finding of blood chemistry, unspecified -R800 Isolated proteinuria -R801 Persistent proteinuria, unspecified -R802 Orthostatic proteinuria, unspecified -R803 Bence Jones proteinuria -R808 Other proteinuria -R809 Proteinuria, unspecified -R81 Glycosuria -R820 Chyluria -R821 Myoglobinuria -R822 Biliuria -R823 Hemoglobinuria -R824 Acetonuria -R825 Elevated urine levels of drugs, medicaments and biological substances -R826 Abnormal urine levels of substances chiefly nonmedicinal as to source -R827 Abnormal findings on microbiological examination of urine -R828 Abnormal findings on cytological and histological examination of urine -R8290 Unspecified abnormal findings in urine -R8291 Other chromoabnormalities of urine -R8299 Other abnormal findings in urine -R830 Abnormal level of enzymes in cerebrospinal fluid -R831 Abnormal level of hormones in cerebrospinal fluid -R832 Abnormal level of other drugs, medicaments and biological substances in cerebrospinal fluid -R833 Abnormal level of substances chiefly nonmedicinal as to source in cerebrospinal fluid -R834 Abnormal immunological findings in cerebrospinal fluid -R835 Abnormal microbiological findings in cerebrospinal fluid -R836 Abnormal cytological findings in cerebrospinal fluid -R838 Other abnormal findings in cerebrospinal fluid -R839 Unspecified abnormal finding in cerebrospinal fluid -R840 Abnormal level of enzymes in specimens from respiratory organs and thorax -R841 Abnormal level of hormones in specimens from respiratory organs and thorax -R842 Abnormal level of other drugs, medicaments and biological substances in specimens from respiratory organs and thorax -R843 Abnormal level of substances chiefly nonmedicinal as to source in specimens from respiratory organs and thorax -R844 Abnormal immunological findings in specimens from respiratory organs and thorax -R845 Abnormal microbiological findings in specimens from respiratory organs and thorax -R846 Abnormal cytological findings in specimens from respiratory organs and thorax -R847 Abnormal histological findings in specimens from respiratory organs and thorax -R848 Other abnormal findings in specimens from respiratory organs and thorax -R849 Unspecified abnormal finding in specimens from respiratory organs and thorax -R850 Abnormal level of enzymes in specimens from digestive organs and abdominal cavity -R851 Abnormal level of hormones in specimens from digestive organs and abdominal cavity -R852 Abnormal level of other drugs, medicaments and biological substances in specimens from digestive organs and abdominal cavity -R853 Abnormal level of substances chiefly nonmedicinal as to source in specimens from digestive organs and abdominal cavity -R854 Abnormal immunological findings in specimens from digestive organs and abdominal cavity -R855 Abnormal microbiological findings in specimens from digestive organs and abdominal cavity -R85610 Atypical squamous cells of undetermined significance on cytologic smear of anus (ASC-US) -R85611 Atypical squamous cells cannot exclude high grade squamous intraepithelial lesion on cytologic smear of anus (ASC-H) -R85612 Low grade squamous intraepithelial lesion on cytologic smear of anus (LGSIL) -R85613 High grade squamous intraepithelial lesion on cytologic smear of anus (HGSIL) -R85614 Cytologic evidence of malignancy on smear of anus -R85615 Unsatisfactory cytologic smear of anus -R85616 Satisfactory anal smear but lacking transformation zone -R85618 Other abnormal cytological findings on specimens from anus -R85619 Unspecified abnormal cytological findings in specimens from anus -R8569 Abnormal cytological findings in specimens from other digestive organs and abdominal cavity -R857 Abnormal histological findings in specimens from digestive organs and abdominal cavity -R8581 Anal high risk human papillomavirus (HPV) DNA test positive -R8582 Anal low risk human papillomavirus (HPV) DNA test positive -R8589 Other abnormal findings in specimens from digestive organs and abdominal cavity -R859 Unspecified abnormal finding in specimens from digestive organs and abdominal cavity -R860 Abnormal level of enzymes in specimens from male genital organs -R861 Abnormal level of hormones in specimens from male genital organs -R862 Abnormal level of other drugs, medicaments and biological substances in specimens from male genital organs -R863 Abnormal level of substances chiefly nonmedicinal as to source in specimens from male genital organs -R864 Abnormal immunological findings in specimens from male genital organs -R865 Abnormal microbiological findings in specimens from male genital organs -R866 Abnormal cytological findings in specimens from male genital organs -R867 Abnormal histological findings in specimens from male genital organs -R868 Other abnormal findings in specimens from male genital organs -R869 Unspecified abnormal finding in specimens from male genital organs -R870 Abnormal level of enzymes in specimens from female genital organs -R871 Abnormal level of hormones in specimens from female genital organs -R872 Abnormal level of other drugs, medicaments and biological substances in specimens from female genital organs -R873 Abnormal level of substances chiefly nonmedicinal as to source in specimens from female genital organs -R874 Abnormal immunological findings in specimens from female genital organs -R875 Abnormal microbiological findings in specimens from female genital organs -R87610 Atypical squamous cells of undetermined significance on cytologic smear of cervix (ASC-US) -R87611 Atypical squamous cells cannot exclude high grade squamous intraepithelial lesion on cytologic smear of cervix (ASC-H) -R87612 Low grade squamous intraepithelial lesion on cytologic smear of cervix (LGSIL) -R87613 High grade squamous intraepithelial lesion on cytologic smear of cervix (HGSIL) -R87614 Cytologic evidence of malignancy on smear of cervix -R87615 Unsatisfactory cytologic smear of cervix -R87616 Satisfactory cervical smear but lacking transformation zone -R87618 Other abnormal cytological findings on specimens from cervix uteri -R87619 Unspecified abnormal cytological findings in specimens from cervix uteri -R87620 Atypical squamous cells of undetermined significance on cytologic smear of vagina (ASC-US) -R87621 Atypical squamous cells cannot exclude high grade squamous intraepithelial lesion on cytologic smear of vagina (ASC-H) -R87622 Low grade squamous intraepithelial lesion on cytologic smear of vagina (LGSIL) -R87623 High grade squamous intraepithelial lesion on cytologic smear of vagina (HGSIL) -R87624 Cytologic evidence of malignancy on smear of vagina -R87625 Unsatisfactory cytologic smear of vagina -R87628 Other abnormal cytological findings on specimens from vagina -R87629 Unspecified abnormal cytological findings in specimens from vagina -R8769 Abnormal cytological findings in specimens from other female genital organs -R877 Abnormal histological findings in specimens from female genital organs -R87810 Cervical high risk human papillomavirus (HPV) DNA test positive -R87811 Vaginal high risk human papillomavirus (HPV) DNA test positive -R87820 Cervical low risk human papillomavirus (HPV) DNA test positive -R87821 Vaginal low risk human papillomavirus (HPV) DNA test positive -R8789 Other abnormal findings in specimens from female genital organs -R879 Unspecified abnormal finding in specimens from female genital organs -R880 Cloudy (hemodialysis) (peritoneal) dialysis effluent -R888 Abnormal findings in other body fluids and substances -R890 Abnormal level of enzymes in specimens from other organs, systems and tissues -R891 Abnormal level of hormones in specimens from other organs, systems and tissues -R892 Abnormal level of other drugs, medicaments and biological substances in specimens from other organs, systems and tissues -R893 Abnormal level of substances chiefly nonmedicinal as to source in specimens from other organs, systems and tissues -R894 Abnormal immunological findings in specimens from other organs, systems and tissues -R895 Abnormal microbiological findings in specimens from other organs, systems and tissues -R896 Abnormal cytological findings in specimens from other organs, systems and tissues -R897 Abnormal histological findings in specimens from other organs, systems and tissues -R898 Other abnormal findings in specimens from other organs, systems and tissues -R899 Unspecified abnormal finding in specimens from other organs, systems and tissues -R900 Intracranial space-occupying lesion found on diagnostic imaging of central nervous system -R9081 Abnormal echoencephalogram -R9082 White matter disease, unspecified -R9089 Other abnormal findings on diagnostic imaging of central nervous system -R911 Solitary pulmonary nodule -R918 Other nonspecific abnormal finding of lung field -R920 Mammographic microcalcification found on diagnostic imaging of breast -R921 Mammographic calcification found on diagnostic imaging of breast -R922 Inconclusive mammogram -R928 Other abnormal and inconclusive findings on diagnostic imaging of breast -R930 Abnormal findings on diagnostic imaging of skull and head, not elsewhere classified -R931 Abnormal findings on diagnostic imaging of heart and coronary circulation -R932 Abnormal findings on diagnostic imaging of liver and biliary tract -R933 Abnormal findings on diagnostic imaging of other parts of digestive tract -R934 Abnormal findings on diagnostic imaging of urinary organs -R935 Abnormal findings on diagnostic imaging of other abdominal regions, including retroperitoneum -R936 Abnormal findings on diagnostic imaging of limbs -R937 Abnormal findings on diagnostic imaging of other parts of musculoskeletal system -R938 Abnormal findings on diagnostic imaging of other specified body structures -R939 Diagnostic imaging inconclusive due to excess body fat of patient -R9401 Abnormal electroencephalogram [EEG] -R9402 Abnormal brain scan -R9409 Abnormal results of other function studies of central nervous system -R94110 Abnormal electro-oculogram [EOG] -R94111 Abnormal electroretinogram [ERG] -R94112 Abnormal visually evoked potential [VEP] -R94113 Abnormal oculomotor study -R94118 Abnormal results of other function studies of eye -R94120 Abnormal auditory function study -R94121 Abnormal vestibular function study -R94128 Abnormal results of other function studies of ear and other special senses -R94130 Abnormal response to nerve stimulation, unspecified -R94131 Abnormal electromyogram [EMG] -R94138 Abnormal results of other function studies of peripheral nervous system -R942 Abnormal results of pulmonary function studies -R9430 Abnormal result of cardiovascular function study, unspecified -R9431 Abnormal electrocardiogram [ECG] [EKG] -R9439 Abnormal result of other cardiovascular function study -R944 Abnormal results of kidney function studies -R945 Abnormal results of liver function studies -R946 Abnormal results of thyroid function studies -R947 Abnormal results of other endocrine function studies -R948 Abnormal results of function studies of other organs and systems -R970 Elevated carcinoembryonic antigen [CEA] -R971 Elevated cancer antigen 125 [CA 125] -R972 Elevated prostate specific antigen [PSA] -R978 Other abnormal tumor markers -R99 Ill-defined and unknown cause of mortality -S0000XA Unspecified superficial injury of scalp, initial encounter -S0000XD Unspecified superficial injury of scalp, subsequent encounter -S0000XS Unspecified superficial injury of scalp, sequela -S0001XA Abrasion of scalp, initial encounter -S0001XD Abrasion of scalp, subsequent encounter -S0001XS Abrasion of scalp, sequela -S0002XA Blister (nonthermal) of scalp, initial encounter -S0002XD Blister (nonthermal) of scalp, subsequent encounter -S0002XS Blister (nonthermal) of scalp, sequela -S0003XA Contusion of scalp, initial encounter -S0003XD Contusion of scalp, subsequent encounter -S0003XS Contusion of scalp, sequela -S0004XA External constriction of part of scalp, initial encounter -S0004XD External constriction of part of scalp, subsequent encounter -S0004XS External constriction of part of scalp, sequela -S0005XA Superficial foreign body of scalp, initial encounter -S0005XD Superficial foreign body of scalp, subsequent encounter -S0005XS Superficial foreign body of scalp, sequela -S0006XA Insect bite (nonvenomous) of scalp, initial encounter -S0006XD Insect bite (nonvenomous) of scalp, subsequent encounter -S0006XS Insect bite (nonvenomous) of scalp, sequela -S0007XA Other superficial bite of scalp, initial encounter -S0007XD Other superficial bite of scalp, subsequent encounter -S0007XS Other superficial bite of scalp, sequela -S0010XA Contusion of unspecified eyelid and periocular area, initial encounter -S0010XD Contusion of unspecified eyelid and periocular area, subsequent encounter -S0010XS Contusion of unspecified eyelid and periocular area, sequela -S0011XA Contusion of right eyelid and periocular area, initial encounter -S0011XD Contusion of right eyelid and periocular area, subsequent encounter -S0011XS Contusion of right eyelid and periocular area, sequela -S0012XA Contusion of left eyelid and periocular area, initial encounter -S0012XD Contusion of left eyelid and periocular area, subsequent encounter -S0012XS Contusion of left eyelid and periocular area, sequela -S00201A Unspecified superficial injury of right eyelid and periocular area, initial encounter -S00201D Unspecified superficial injury of right eyelid and periocular area, subsequent encounter -S00201S Unspecified superficial injury of right eyelid and periocular area, sequela -S00202A Unspecified superficial injury of left eyelid and periocular area, initial encounter -S00202D Unspecified superficial injury of left eyelid and periocular area, subsequent encounter -S00202S Unspecified superficial injury of left eyelid and periocular area, sequela -S00209A Unspecified superficial injury of unspecified eyelid and periocular area, initial encounter -S00209D Unspecified superficial injury of unspecified eyelid and periocular area, subsequent encounter -S00209S Unspecified superficial injury of unspecified eyelid and periocular area, sequela -S00211A Abrasion of right eyelid and periocular area, initial encounter -S00211D Abrasion of right eyelid and periocular area, subsequent encounter -S00211S Abrasion of right eyelid and periocular area, sequela -S00212A Abrasion of left eyelid and periocular area, initial encounter -S00212D Abrasion of left eyelid and periocular area, subsequent encounter -S00212S Abrasion of left eyelid and periocular area, sequela -S00219A Abrasion of unspecified eyelid and periocular area, initial encounter -S00219D Abrasion of unspecified eyelid and periocular area, subsequent encounter -S00219S Abrasion of unspecified eyelid and periocular area, sequela -S00221A Blister (nonthermal) of right eyelid and periocular area, initial encounter -S00221D Blister (nonthermal) of right eyelid and periocular area, subsequent encounter -S00221S Blister (nonthermal) of right eyelid and periocular area, sequela -S00222A Blister (nonthermal) of left eyelid and periocular area, initial encounter -S00222D Blister (nonthermal) of left eyelid and periocular area, subsequent encounter -S00222S Blister (nonthermal) of left eyelid and periocular area, sequela -S00229A Blister (nonthermal) of unspecified eyelid and periocular area, initial encounter -S00229D Blister (nonthermal) of unspecified eyelid and periocular area, subsequent encounter -S00229S Blister (nonthermal) of unspecified eyelid and periocular area, sequela -S00241A External constriction of right eyelid and periocular area, initial encounter -S00241D External constriction of right eyelid and periocular area, subsequent encounter -S00241S External constriction of right eyelid and periocular area, sequela -S00242A External constriction of left eyelid and periocular area, initial encounter -S00242D External constriction of left eyelid and periocular area, subsequent encounter -S00242S External constriction of left eyelid and periocular area, sequela -S00249A External constriction of unspecified eyelid and periocular area, initial encounter -S00249D External constriction of unspecified eyelid and periocular area, subsequent encounter -S00249S External constriction of unspecified eyelid and periocular area, sequela -S00251A Superficial foreign body of right eyelid and periocular area, initial encounter -S00251D Superficial foreign body of right eyelid and periocular area, subsequent encounter -S00251S Superficial foreign body of right eyelid and periocular area, sequela -S00252A Superficial foreign body of left eyelid and periocular area, initial encounter -S00252D Superficial foreign body of left eyelid and periocular area, subsequent encounter -S00252S Superficial foreign body of left eyelid and periocular area, sequela -S00259A Superficial foreign body of unspecified eyelid and periocular area, initial encounter -S00259D Superficial foreign body of unspecified eyelid and periocular area, subsequent encounter -S00259S Superficial foreign body of unspecified eyelid and periocular area, sequela -S00261A Insect bite (nonvenomous) of right eyelid and periocular area, initial encounter -S00261D Insect bite (nonvenomous) of right eyelid and periocular area, subsequent encounter -S00261S Insect bite (nonvenomous) of right eyelid and periocular area, sequela -S00262A Insect bite (nonvenomous) of left eyelid and periocular area, initial encounter -S00262D Insect bite (nonvenomous) of left eyelid and periocular area, subsequent encounter -S00262S Insect bite (nonvenomous) of left eyelid and periocular area, sequela -S00269A Insect bite (nonvenomous) of unspecified eyelid and periocular area, initial encounter -S00269D Insect bite (nonvenomous) of unspecified eyelid and periocular area, subsequent encounter -S00269S Insect bite (nonvenomous) of unspecified eyelid and periocular area, sequela -S00271A Other superficial bite of right eyelid and periocular area, initial encounter -S00271D Other superficial bite of right eyelid and periocular area, subsequent encounter -S00271S Other superficial bite of right eyelid and periocular area, sequela -S00272A Other superficial bite of left eyelid and periocular area, initial encounter -S00272D Other superficial bite of left eyelid and periocular area, subsequent encounter -S00272S Other superficial bite of left eyelid and periocular area, sequela -S00279A Other superficial bite of unspecified eyelid and periocular area, initial encounter -S00279D Other superficial bite of unspecified eyelid and periocular area, subsequent encounter -S00279S Other superficial bite of unspecified eyelid and periocular area, sequela -S0030XA Unspecified superficial injury of nose, initial encounter -S0030XD Unspecified superficial injury of nose, subsequent encounter -S0030XS Unspecified superficial injury of nose, sequela -S0031XA Abrasion of nose, initial encounter -S0031XD Abrasion of nose, subsequent encounter -S0031XS Abrasion of nose, sequela -S0032XA Blister (nonthermal) of nose, initial encounter -S0032XD Blister (nonthermal) of nose, subsequent encounter -S0032XS Blister (nonthermal) of nose, sequela -S0033XA Contusion of nose, initial encounter -S0033XD Contusion of nose, subsequent encounter -S0033XS Contusion of nose, sequela -S0034XA External constriction of nose, initial encounter -S0034XD External constriction of nose, subsequent encounter -S0034XS External constriction of nose, sequela -S0035XA Superficial foreign body of nose, initial encounter -S0035XD Superficial foreign body of nose, subsequent encounter -S0035XS Superficial foreign body of nose, sequela -S0036XA Insect bite (nonvenomous) of nose, initial encounter -S0036XD Insect bite (nonvenomous) of nose, subsequent encounter -S0036XS Insect bite (nonvenomous) of nose, sequela -S0037XA Other superficial bite of nose, initial encounter -S0037XD Other superficial bite of nose, subsequent encounter -S0037XS Other superficial bite of nose, sequela -S00401A Unspecified superficial injury of right ear, initial encounter -S00401D Unspecified superficial injury of right ear, subsequent encounter -S00401S Unspecified superficial injury of right ear, sequela -S00402A Unspecified superficial injury of left ear, initial encounter -S00402D Unspecified superficial injury of left ear, subsequent encounter -S00402S Unspecified superficial injury of left ear, sequela -S00409A Unspecified superficial injury of unspecified ear, initial encounter -S00409D Unspecified superficial injury of unspecified ear, subsequent encounter -S00409S Unspecified superficial injury of unspecified ear, sequela -S00411A Abrasion of right ear, initial encounter -S00411D Abrasion of right ear, subsequent encounter -S00411S Abrasion of right ear, sequela -S00412A Abrasion of left ear, initial encounter -S00412D Abrasion of left ear, subsequent encounter -S00412S Abrasion of left ear, sequela -S00419A Abrasion of unspecified ear, initial encounter -S00419D Abrasion of unspecified ear, subsequent encounter -S00419S Abrasion of unspecified ear, sequela -S00421A Blister (nonthermal) of right ear, initial encounter -S00421D Blister (nonthermal) of right ear, subsequent encounter -S00421S Blister (nonthermal) of right ear, sequela -S00422A Blister (nonthermal) of left ear, initial encounter -S00422D Blister (nonthermal) of left ear, subsequent encounter -S00422S Blister (nonthermal) of left ear, sequela -S00429A Blister (nonthermal) of unspecified ear, initial encounter -S00429D Blister (nonthermal) of unspecified ear, subsequent encounter -S00429S Blister (nonthermal) of unspecified ear, sequela -S00431A Contusion of right ear, initial encounter -S00431D Contusion of right ear, subsequent encounter -S00431S Contusion of right ear, sequela -S00432A Contusion of left ear, initial encounter -S00432D Contusion of left ear, subsequent encounter -S00432S Contusion of left ear, sequela -S00439A Contusion of unspecified ear, initial encounter -S00439D Contusion of unspecified ear, subsequent encounter -S00439S Contusion of unspecified ear, sequela -S00441A External constriction of right ear, initial encounter -S00441D External constriction of right ear, subsequent encounter -S00441S External constriction of right ear, sequela -S00442A External constriction of left ear, initial encounter -S00442D External constriction of left ear, subsequent encounter -S00442S External constriction of left ear, sequela -S00449A External constriction of unspecified ear, initial encounter -S00449D External constriction of unspecified ear, subsequent encounter -S00449S External constriction of unspecified ear, sequela -S00451A Superficial foreign body of right ear, initial encounter -S00451D Superficial foreign body of right ear, subsequent encounter -S00451S Superficial foreign body of right ear, sequela -S00452A Superficial foreign body of left ear, initial encounter -S00452D Superficial foreign body of left ear, subsequent encounter -S00452S Superficial foreign body of left ear, sequela -S00459A Superficial foreign body of unspecified ear, initial encounter -S00459D Superficial foreign body of unspecified ear, subsequent encounter -S00459S Superficial foreign body of unspecified ear, sequela -S00461A Insect bite (nonvenomous) of right ear, initial encounter -S00461D Insect bite (nonvenomous) of right ear, subsequent encounter -S00461S Insect bite (nonvenomous) of right ear, sequela -S00462A Insect bite (nonvenomous) of left ear, initial encounter -S00462D Insect bite (nonvenomous) of left ear, subsequent encounter -S00462S Insect bite (nonvenomous) of left ear, sequela -S00469A Insect bite (nonvenomous) of unspecified ear, initial encounter -S00469D Insect bite (nonvenomous) of unspecified ear, subsequent encounter -S00469S Insect bite (nonvenomous) of unspecified ear, sequela -S00471A Other superficial bite of right ear, initial encounter -S00471D Other superficial bite of right ear, subsequent encounter -S00471S Other superficial bite of right ear, sequela -S00472A Other superficial bite of left ear, initial encounter -S00472D Other superficial bite of left ear, subsequent encounter -S00472S Other superficial bite of left ear, sequela -S00479A Other superficial bite of unspecified ear, initial encounter -S00479D Other superficial bite of unspecified ear, subsequent encounter -S00479S Other superficial bite of unspecified ear, sequela -S00501A Unspecified superficial injury of lip, initial encounter -S00501D Unspecified superficial injury of lip, subsequent encounter -S00501S Unspecified superficial injury of lip, sequela -S00502A Unspecified superficial injury of oral cavity, initial encounter -S00502D Unspecified superficial injury of oral cavity, subsequent encounter -S00502S Unspecified superficial injury of oral cavity, sequela -S00511A Abrasion of lip, initial encounter -S00511D Abrasion of lip, subsequent encounter -S00511S Abrasion of lip, sequela -S00512A Abrasion of oral cavity, initial encounter -S00512D Abrasion of oral cavity, subsequent encounter -S00512S Abrasion of oral cavity, sequela -S00521A Blister (nonthermal) of lip, initial encounter -S00521D Blister (nonthermal) of lip, subsequent encounter -S00521S Blister (nonthermal) of lip, sequela -S00522A Blister (nonthermal) of oral cavity, initial encounter -S00522D Blister (nonthermal) of oral cavity, subsequent encounter -S00522S Blister (nonthermal) of oral cavity, sequela -S00531A Contusion of lip, initial encounter -S00531D Contusion of lip, subsequent encounter -S00531S Contusion of lip, sequela -S00532A Contusion of oral cavity, initial encounter -S00532D Contusion of oral cavity, subsequent encounter -S00532S Contusion of oral cavity, sequela -S00541A External constriction of lip, initial encounter -S00541D External constriction of lip, subsequent encounter -S00541S External constriction of lip, sequela -S00542A External constriction of oral cavity, initial encounter -S00542D External constriction of oral cavity, subsequent encounter -S00542S External constriction of oral cavity, sequela -S00551A Superficial foreign body of lip, initial encounter -S00551D Superficial foreign body of lip, subsequent encounter -S00551S Superficial foreign body of lip, sequela -S00552A Superficial foreign body of oral cavity, initial encounter -S00552D Superficial foreign body of oral cavity, subsequent encounter -S00552S Superficial foreign body of oral cavity, sequela -S00561A Insect bite (nonvenomous) of lip, initial encounter -S00561D Insect bite (nonvenomous) of lip, subsequent encounter -S00561S Insect bite (nonvenomous) of lip, sequela -S00562A Insect bite (nonvenomous) of oral cavity, initial encounter -S00562D Insect bite (nonvenomous) of oral cavity, subsequent encounter -S00562S Insect bite (nonvenomous) of oral cavity, sequela -S00571A Other superficial bite of lip, initial encounter -S00571D Other superficial bite of lip, subsequent encounter -S00571S Other superficial bite of lip, sequela -S00572A Other superficial bite of oral cavity, initial encounter -S00572D Other superficial bite of oral cavity, subsequent encounter -S00572S Other superficial bite of oral cavity, sequela -S0080XA Unspecified superficial injury of other part of head, initial encounter -S0080XD Unspecified superficial injury of other part of head, subsequent encounter -S0080XS Unspecified superficial injury of other part of head, sequela -S0081XA Abrasion of other part of head, initial encounter -S0081XD Abrasion of other part of head, subsequent encounter -S0081XS Abrasion of other part of head, sequela -S0082XA Blister (nonthermal) of other part of head, initial encounter -S0082XD Blister (nonthermal) of other part of head, subsequent encounter -S0082XS Blister (nonthermal) of other part of head, sequela -S0083XA Contusion of other part of head, initial encounter -S0083XD Contusion of other part of head, subsequent encounter -S0083XS Contusion of other part of head, sequela -S0084XA External constriction of other part of head, initial encounter -S0084XD External constriction of other part of head, subsequent encounter -S0084XS External constriction of other part of head, sequela -S0085XA Superficial foreign body of other part of head, initial encounter -S0085XD Superficial foreign body of other part of head, subsequent encounter -S0085XS Superficial foreign body of other part of head, sequela -S0086XA Insect bite (nonvenomous) of other part of head, initial encounter -S0086XD Insect bite (nonvenomous) of other part of head, subsequent encounter -S0086XS Insect bite (nonvenomous) of other part of head, sequela -S0087XA Other superficial bite of other part of head, initial encounter -S0087XD Other superficial bite of other part of head, subsequent encounter -S0087XS Other superficial bite of other part of head, sequela -S0090XA Unspecified superficial injury of unspecified part of head, initial encounter -S0090XD Unspecified superficial injury of unspecified part of head, subsequent encounter -S0090XS Unspecified superficial injury of unspecified part of head, sequela -S0091XA Abrasion of unspecified part of head, initial encounter -S0091XD Abrasion of unspecified part of head, subsequent encounter -S0091XS Abrasion of unspecified part of head, sequela -S0092XA Blister (nonthermal) of unspecified part of head, initial encounter -S0092XD Blister (nonthermal) of unspecified part of head, subsequent encounter -S0092XS Blister (nonthermal) of unspecified part of head, sequela -S0093XA Contusion of unspecified part of head, initial encounter -S0093XD Contusion of unspecified part of head, subsequent encounter -S0093XS Contusion of unspecified part of head, sequela -S0094XA External constriction of unspecified part of head, initial encounter -S0094XD External constriction of unspecified part of head, subsequent encounter -S0094XS External constriction of unspecified part of head, sequela -S0095XA Superficial foreign body of unspecified part of head, initial encounter -S0095XD Superficial foreign body of unspecified part of head, subsequent encounter -S0095XS Superficial foreign body of unspecified part of head, sequela -S0096XA Insect bite (nonvenomous) of unspecified part of head, initial encounter -S0096XD Insect bite (nonvenomous) of unspecified part of head, subsequent encounter -S0096XS Insect bite (nonvenomous) of unspecified part of head, sequela -S0097XA Other superficial bite of unspecified part of head, initial encounter -S0097XD Other superficial bite of unspecified part of head, subsequent encounter -S0097XS Other superficial bite of unspecified part of head, sequela -S0100XA Unspecified open wound of scalp, initial encounter -S0100XD Unspecified open wound of scalp, subsequent encounter -S0100XS Unspecified open wound of scalp, sequela -S0101XA Laceration without foreign body of scalp, initial encounter -S0101XD Laceration without foreign body of scalp, subsequent encounter -S0101XS Laceration without foreign body of scalp, sequela -S0102XA Laceration with foreign body of scalp, initial encounter -S0102XD Laceration with foreign body of scalp, subsequent encounter -S0102XS Laceration with foreign body of scalp, sequela -S0103XA Puncture wound without foreign body of scalp, initial encounter -S0103XD Puncture wound without foreign body of scalp, subsequent encounter -S0103XS Puncture wound without foreign body of scalp, sequela -S0104XA Puncture wound with foreign body of scalp, initial encounter -S0104XD Puncture wound with foreign body of scalp, subsequent encounter -S0104XS Puncture wound with foreign body of scalp, sequela -S0105XA Open bite of scalp, initial encounter -S0105XD Open bite of scalp, subsequent encounter -S0105XS Open bite of scalp, sequela -S01101A Unspecified open wound of right eyelid and periocular area, initial encounter -S01101D Unspecified open wound of right eyelid and periocular area, subsequent encounter -S01101S Unspecified open wound of right eyelid and periocular area, sequela -S01102A Unspecified open wound of left eyelid and periocular area, initial encounter -S01102D Unspecified open wound of left eyelid and periocular area, subsequent encounter -S01102S Unspecified open wound of left eyelid and periocular area, sequela -S01109A Unspecified open wound of unspecified eyelid and periocular area, initial encounter -S01109D Unspecified open wound of unspecified eyelid and periocular area, subsequent encounter -S01109S Unspecified open wound of unspecified eyelid and periocular area, sequela -S01111A Laceration without foreign body of right eyelid and periocular area, initial encounter -S01111D Laceration without foreign body of right eyelid and periocular area, subsequent encounter -S01111S Laceration without foreign body of right eyelid and periocular area, sequela -S01112A Laceration without foreign body of left eyelid and periocular area, initial encounter -S01112D Laceration without foreign body of left eyelid and periocular area, subsequent encounter -S01112S Laceration without foreign body of left eyelid and periocular area, sequela -S01119A Laceration without foreign body of unspecified eyelid and periocular area, initial encounter -S01119D Laceration without foreign body of unspecified eyelid and periocular area, subsequent encounter -S01119S Laceration without foreign body of unspecified eyelid and periocular area, sequela -S01121A Laceration with foreign body of right eyelid and periocular area, initial encounter -S01121D Laceration with foreign body of right eyelid and periocular area, subsequent encounter -S01121S Laceration with foreign body of right eyelid and periocular area, sequela -S01122A Laceration with foreign body of left eyelid and periocular area, initial encounter -S01122D Laceration with foreign body of left eyelid and periocular area, subsequent encounter -S01122S Laceration with foreign body of left eyelid and periocular area, sequela -S01129A Laceration with foreign body of unspecified eyelid and periocular area, initial encounter -S01129D Laceration with foreign body of unspecified eyelid and periocular area, subsequent encounter -S01129S Laceration with foreign body of unspecified eyelid and periocular area, sequela -S01131A Puncture wound without foreign body of right eyelid and periocular area, initial encounter -S01131D Puncture wound without foreign body of right eyelid and periocular area, subsequent encounter -S01131S Puncture wound without foreign body of right eyelid and periocular area, sequela -S01132A Puncture wound without foreign body of left eyelid and periocular area, initial encounter -S01132D Puncture wound without foreign body of left eyelid and periocular area, subsequent encounter -S01132S Puncture wound without foreign body of left eyelid and periocular area, sequela -S01139A Puncture wound without foreign body of unspecified eyelid and periocular area, initial encounter -S01139D Puncture wound without foreign body of unspecified eyelid and periocular area, subsequent encounter -S01139S Puncture wound without foreign body of unspecified eyelid and periocular area, sequela -S01141A Puncture wound with foreign body of right eyelid and periocular area, initial encounter -S01141D Puncture wound with foreign body of right eyelid and periocular area, subsequent encounter -S01141S Puncture wound with foreign body of right eyelid and periocular area, sequela -S01142A Puncture wound with foreign body of left eyelid and periocular area, initial encounter -S01142D Puncture wound with foreign body of left eyelid and periocular area, subsequent encounter -S01142S Puncture wound with foreign body of left eyelid and periocular area, sequela -S01149A Puncture wound with foreign body of unspecified eyelid and periocular area, initial encounter -S01149D Puncture wound with foreign body of unspecified eyelid and periocular area, subsequent encounter -S01149S Puncture wound with foreign body of unspecified eyelid and periocular area, sequela -S01151A Open bite of right eyelid and periocular area, initial encounter -S01151D Open bite of right eyelid and periocular area, subsequent encounter -S01151S Open bite of right eyelid and periocular area, sequela -S01152A Open bite of left eyelid and periocular area, initial encounter -S01152D Open bite of left eyelid and periocular area, subsequent encounter -S01152S Open bite of left eyelid and periocular area, sequela -S01159A Open bite of unspecified eyelid and periocular area, initial encounter -S01159D Open bite of unspecified eyelid and periocular area, subsequent encounter -S01159S Open bite of unspecified eyelid and periocular area, sequela -S0120XA Unspecified open wound of nose, initial encounter -S0120XD Unspecified open wound of nose, subsequent encounter -S0120XS Unspecified open wound of nose, sequela -S0121XA Laceration without foreign body of nose, initial encounter -S0121XD Laceration without foreign body of nose, subsequent encounter -S0121XS Laceration without foreign body of nose, sequela -S0122XA Laceration with foreign body of nose, initial encounter -S0122XD Laceration with foreign body of nose, subsequent encounter -S0122XS Laceration with foreign body of nose, sequela -S0123XA Puncture wound without foreign body of nose, initial encounter -S0123XD Puncture wound without foreign body of nose, subsequent encounter -S0123XS Puncture wound without foreign body of nose, sequela -S0124XA Puncture wound with foreign body of nose, initial encounter -S0124XD Puncture wound with foreign body of nose, subsequent encounter -S0124XS Puncture wound with foreign body of nose, sequela -S0125XA Open bite of nose, initial encounter -S0125XD Open bite of nose, subsequent encounter -S0125XS Open bite of nose, sequela -S01301A Unspecified open wound of right ear, initial encounter -S01301D Unspecified open wound of right ear, subsequent encounter -S01301S Unspecified open wound of right ear, sequela -S01302A Unspecified open wound of left ear, initial encounter -S01302D Unspecified open wound of left ear, subsequent encounter -S01302S Unspecified open wound of left ear, sequela -S01309A Unspecified open wound of unspecified ear, initial encounter -S01309D Unspecified open wound of unspecified ear, subsequent encounter -S01309S Unspecified open wound of unspecified ear, sequela -S01311A Laceration without foreign body of right ear, initial encounter -S01311D Laceration without foreign body of right ear, subsequent encounter -S01311S Laceration without foreign body of right ear, sequela -S01312A Laceration without foreign body of left ear, initial encounter -S01312D Laceration without foreign body of left ear, subsequent encounter -S01312S Laceration without foreign body of left ear, sequela -S01319A Laceration without foreign body of unspecified ear, initial encounter -S01319D Laceration without foreign body of unspecified ear, subsequent encounter -S01319S Laceration without foreign body of unspecified ear, sequela -S01321A Laceration with foreign body of right ear, initial encounter -S01321D Laceration with foreign body of right ear, subsequent encounter -S01321S Laceration with foreign body of right ear, sequela -S01322A Laceration with foreign body of left ear, initial encounter -S01322D Laceration with foreign body of left ear, subsequent encounter -S01322S Laceration with foreign body of left ear, sequela -S01329A Laceration with foreign body of unspecified ear, initial encounter -S01329D Laceration with foreign body of unspecified ear, subsequent encounter -S01329S Laceration with foreign body of unspecified ear, sequela -S01331A Puncture wound without foreign body of right ear, initial encounter -S01331D Puncture wound without foreign body of right ear, subsequent encounter -S01331S Puncture wound without foreign body of right ear, sequela -S01332A Puncture wound without foreign body of left ear, initial encounter -S01332D Puncture wound without foreign body of left ear, subsequent encounter -S01332S Puncture wound without foreign body of left ear, sequela -S01339A Puncture wound without foreign body of unspecified ear, initial encounter -S01339D Puncture wound without foreign body of unspecified ear, subsequent encounter -S01339S Puncture wound without foreign body of unspecified ear, sequela -S01341A Puncture wound with foreign body of right ear, initial encounter -S01341D Puncture wound with foreign body of right ear, subsequent encounter -S01341S Puncture wound with foreign body of right ear, sequela -S01342A Puncture wound with foreign body of left ear, initial encounter -S01342D Puncture wound with foreign body of left ear, subsequent encounter -S01342S Puncture wound with foreign body of left ear, sequela -S01349A Puncture wound with foreign body of unspecified ear, initial encounter -S01349D Puncture wound with foreign body of unspecified ear, subsequent encounter -S01349S Puncture wound with foreign body of unspecified ear, sequela -S01351A Open bite of right ear, initial encounter -S01351D Open bite of right ear, subsequent encounter -S01351S Open bite of right ear, sequela -S01352A Open bite of left ear, initial encounter -S01352D Open bite of left ear, subsequent encounter -S01352S Open bite of left ear, sequela -S01359A Open bite of unspecified ear, initial encounter -S01359D Open bite of unspecified ear, subsequent encounter -S01359S Open bite of unspecified ear, sequela -S01401A Unspecified open wound of right cheek and temporomandibular area, initial encounter -S01401D Unspecified open wound of right cheek and temporomandibular area, subsequent encounter -S01401S Unspecified open wound of right cheek and temporomandibular area, sequela -S01402A Unspecified open wound of left cheek and temporomandibular area, initial encounter -S01402D Unspecified open wound of left cheek and temporomandibular area, subsequent encounter -S01402S Unspecified open wound of left cheek and temporomandibular area, sequela -S01409A Unspecified open wound of unspecified cheek and temporomandibular area, initial encounter -S01409D Unspecified open wound of unspecified cheek and temporomandibular area, subsequent encounter -S01409S Unspecified open wound of unspecified cheek and temporomandibular area, sequela -S01411A Laceration without foreign body of right cheek and temporomandibular area, initial encounter -S01411D Laceration without foreign body of right cheek and temporomandibular area, subsequent encounter -S01411S Laceration without foreign body of right cheek and temporomandibular area, sequela -S01412A Laceration without foreign body of left cheek and temporomandibular area, initial encounter -S01412D Laceration without foreign body of left cheek and temporomandibular area, subsequent encounter -S01412S Laceration without foreign body of left cheek and temporomandibular area, sequela -S01419A Laceration without foreign body of unspecified cheek and temporomandibular area, initial encounter -S01419D Laceration without foreign body of unspecified cheek and temporomandibular area, subsequent encounter -S01419S Laceration without foreign body of unspecified cheek and temporomandibular area, sequela -S01421A Laceration with foreign body of right cheek and temporomandibular area, initial encounter -S01421D Laceration with foreign body of right cheek and temporomandibular area, subsequent encounter -S01421S Laceration with foreign body of right cheek and temporomandibular area, sequela -S01422A Laceration with foreign body of left cheek and temporomandibular area, initial encounter -S01422D Laceration with foreign body of left cheek and temporomandibular area, subsequent encounter -S01422S Laceration with foreign body of left cheek and temporomandibular area, sequela -S01429A Laceration with foreign body of unspecified cheek and temporomandibular area, initial encounter -S01429D Laceration with foreign body of unspecified cheek and temporomandibular area, subsequent encounter -S01429S Laceration with foreign body of unspecified cheek and temporomandibular area, sequela -S01431A Puncture wound without foreign body of right cheek and temporomandibular area, initial encounter -S01431D Puncture wound without foreign body of right cheek and temporomandibular area, subsequent encounter -S01431S Puncture wound without foreign body of right cheek and temporomandibular area, sequela -S01432A Puncture wound without foreign body of left cheek and temporomandibular area, initial encounter -S01432D Puncture wound without foreign body of left cheek and temporomandibular area, subsequent encounter -S01432S Puncture wound without foreign body of left cheek and temporomandibular area, sequela -S01439A Puncture wound without foreign body of unspecified cheek and temporomandibular area, initial encounter -S01439D Puncture wound without foreign body of unspecified cheek and temporomandibular area, subsequent encounter -S01439S Puncture wound without foreign body of unspecified cheek and temporomandibular area, sequela -S01441A Puncture wound with foreign body of right cheek and temporomandibular area, initial encounter -S01441D Puncture wound with foreign body of right cheek and temporomandibular area, subsequent encounter -S01441S Puncture wound with foreign body of right cheek and temporomandibular area, sequela -S01442A Puncture wound with foreign body of left cheek and temporomandibular area, initial encounter -S01442D Puncture wound with foreign body of left cheek and temporomandibular area, subsequent encounter -S01442S Puncture wound with foreign body of left cheek and temporomandibular area, sequela -S01449A Puncture wound with foreign body of unspecified cheek and temporomandibular area, initial encounter -S01449D Puncture wound with foreign body of unspecified cheek and temporomandibular area, subsequent encounter -S01449S Puncture wound with foreign body of unspecified cheek and temporomandibular area, sequela -S01451A Open bite of right cheek and temporomandibular area, initial encounter -S01451D Open bite of right cheek and temporomandibular area, subsequent encounter -S01451S Open bite of right cheek and temporomandibular area, sequela -S01452A Open bite of left cheek and temporomandibular area, initial encounter -S01452D Open bite of left cheek and temporomandibular area, subsequent encounter -S01452S Open bite of left cheek and temporomandibular area, sequela -S01459A Open bite of unspecified cheek and temporomandibular area, initial encounter -S01459D Open bite of unspecified cheek and temporomandibular area, subsequent encounter -S01459S Open bite of unspecified cheek and temporomandibular area, sequela -S01501A Unspecified open wound of lip, initial encounter -S01501D Unspecified open wound of lip, subsequent encounter -S01501S Unspecified open wound of lip, sequela -S01502A Unspecified open wound of oral cavity, initial encounter -S01502D Unspecified open wound of oral cavity, subsequent encounter -S01502S Unspecified open wound of oral cavity, sequela -S01511A Laceration without foreign body of lip, initial encounter -S01511D Laceration without foreign body of lip, subsequent encounter -S01511S Laceration without foreign body of lip, sequela -S01512A Laceration without foreign body of oral cavity, initial encounter -S01512D Laceration without foreign body of oral cavity, subsequent encounter -S01512S Laceration without foreign body of oral cavity, sequela -S01521A Laceration with foreign body of lip, initial encounter -S01521D Laceration with foreign body of lip, subsequent encounter -S01521S Laceration with foreign body of lip, sequela -S01522A Laceration with foreign body of oral cavity, initial encounter -S01522D Laceration with foreign body of oral cavity, subsequent encounter -S01522S Laceration with foreign body of oral cavity, sequela -S01531A Puncture wound without foreign body of lip, initial encounter -S01531D Puncture wound without foreign body of lip, subsequent encounter -S01531S Puncture wound without foreign body of lip, sequela -S01532A Puncture wound without foreign body of oral cavity, initial encounter -S01532D Puncture wound without foreign body of oral cavity, subsequent encounter -S01532S Puncture wound without foreign body of oral cavity, sequela -S01541A Puncture wound with foreign body of lip, initial encounter -S01541D Puncture wound with foreign body of lip, subsequent encounter -S01541S Puncture wound with foreign body of lip, sequela -S01542A Puncture wound with foreign body of oral cavity, initial encounter -S01542D Puncture wound with foreign body of oral cavity, subsequent encounter -S01542S Puncture wound with foreign body of oral cavity, sequela -S01551A Open bite of lip, initial encounter -S01551D Open bite of lip, subsequent encounter -S01551S Open bite of lip, sequela -S01552A Open bite of oral cavity, initial encounter -S01552D Open bite of oral cavity, subsequent encounter -S01552S Open bite of oral cavity, sequela -S0180XA Unspecified open wound of other part of head, initial encounter -S0180XD Unspecified open wound of other part of head, subsequent encounter -S0180XS Unspecified open wound of other part of head, sequela -S0181XA Laceration without foreign body of other part of head, initial encounter -S0181XD Laceration without foreign body of other part of head, subsequent encounter -S0181XS Laceration without foreign body of other part of head, sequela -S0182XA Laceration with foreign body of other part of head, initial encounter -S0182XD Laceration with foreign body of other part of head, subsequent encounter -S0182XS Laceration with foreign body of other part of head, sequela -S0183XA Puncture wound without foreign body of other part of head, initial encounter -S0183XD Puncture wound without foreign body of other part of head, subsequent encounter -S0183XS Puncture wound without foreign body of other part of head, sequela -S0184XA Puncture wound with foreign body of other part of head, initial encounter -S0184XD Puncture wound with foreign body of other part of head, subsequent encounter -S0184XS Puncture wound with foreign body of other part of head, sequela -S0185XA Open bite of other part of head, initial encounter -S0185XD Open bite of other part of head, subsequent encounter -S0185XS Open bite of other part of head, sequela -S0190XA Unspecified open wound of unspecified part of head, initial encounter -S0190XD Unspecified open wound of unspecified part of head, subsequent encounter -S0190XS Unspecified open wound of unspecified part of head, sequela -S0191XA Laceration without foreign body of unspecified part of head, initial encounter -S0191XD Laceration without foreign body of unspecified part of head, subsequent encounter -S0191XS Laceration without foreign body of unspecified part of head, sequela -S0192XA Laceration with foreign body of unspecified part of head, initial encounter -S0192XD Laceration with foreign body of unspecified part of head, subsequent encounter -S0192XS Laceration with foreign body of unspecified part of head, sequela -S0193XA Puncture wound without foreign body of unspecified part of head, initial encounter -S0193XD Puncture wound without foreign body of unspecified part of head, subsequent encounter -S0193XS Puncture wound without foreign body of unspecified part of head, sequela -S0194XA Puncture wound with foreign body of unspecified part of head, initial encounter -S0194XD Puncture wound with foreign body of unspecified part of head, subsequent encounter -S0194XS Puncture wound with foreign body of unspecified part of head, sequela -S0195XA Open bite of unspecified part of head, initial encounter -S0195XD Open bite of unspecified part of head, subsequent encounter -S0195XS Open bite of unspecified part of head, sequela -S020XXA Fracture of vault of skull, initial encounter for closed fracture -S020XXB Fracture of vault of skull, initial encounter for open fracture -S020XXD Fracture of vault of skull, subsequent encounter for fracture with routine healing -S020XXG Fracture of vault of skull, subsequent encounter for fracture with delayed healing -S020XXK Fracture of vault of skull, subsequent encounter for fracture with nonunion -S020XXS Fracture of vault of skull, sequela -S0210XA Unspecified fracture of base of skull, initial encounter for closed fracture -S0210XB Unspecified fracture of base of skull, initial encounter for open fracture -S0210XD Unspecified fracture of base of skull, subsequent encounter for fracture with routine healing -S0210XG Unspecified fracture of base of skull, subsequent encounter for fracture with delayed healing -S0210XK Unspecified fracture of base of skull, subsequent encounter for fracture with nonunion -S0210XS Unspecified fracture of base of skull, sequela -S02110A Type I occipital condyle fracture, initial encounter for closed fracture -S02110B Type I occipital condyle fracture, initial encounter for open fracture -S02110D Type I occipital condyle fracture, subsequent encounter for fracture with routine healing -S02110G Type I occipital condyle fracture, subsequent encounter for fracture with delayed healing -S02110K Type I occipital condyle fracture, subsequent encounter for fracture with nonunion -S02110S Type I occipital condyle fracture, sequela -S02111A Type II occipital condyle fracture, initial encounter for closed fracture -S02111B Type II occipital condyle fracture, initial encounter for open fracture -S02111D Type II occipital condyle fracture, subsequent encounter for fracture with routine healing -S02111G Type II occipital condyle fracture, subsequent encounter for fracture with delayed healing -S02111K Type II occipital condyle fracture, subsequent encounter for fracture with nonunion -S02111S Type II occipital condyle fracture, sequela -S02112A Type III occipital condyle fracture, initial encounter for closed fracture -S02112B Type III occipital condyle fracture, initial encounter for open fracture -S02112D Type III occipital condyle fracture, subsequent encounter for fracture with routine healing -S02112G Type III occipital condyle fracture, subsequent encounter for fracture with delayed healing -S02112K Type III occipital condyle fracture, subsequent encounter for fracture with nonunion -S02112S Type III occipital condyle fracture, sequela -S02113A Unspecified occipital condyle fracture, initial encounter for closed fracture -S02113B Unspecified occipital condyle fracture, initial encounter for open fracture -S02113D Unspecified occipital condyle fracture, subsequent encounter for fracture with routine healing -S02113G Unspecified occipital condyle fracture, subsequent encounter for fracture with delayed healing -S02113K Unspecified occipital condyle fracture, subsequent encounter for fracture with nonunion -S02113S Unspecified occipital condyle fracture, sequela -S02118A Other fracture of occiput, initial encounter for closed fracture -S02118B Other fracture of occiput, initial encounter for open fracture -S02118D Other fracture of occiput, subsequent encounter for fracture with routine healing -S02118G Other fracture of occiput, subsequent encounter for fracture with delayed healing -S02118K Other fracture of occiput, subsequent encounter for fracture with nonunion -S02118S Other fracture of occiput, sequela -S02119A Unspecified fracture of occiput, initial encounter for closed fracture -S02119B Unspecified fracture of occiput, initial encounter for open fracture -S02119D Unspecified fracture of occiput, subsequent encounter for fracture with routine healing -S02119G Unspecified fracture of occiput, subsequent encounter for fracture with delayed healing -S02119K Unspecified fracture of occiput, subsequent encounter for fracture with nonunion -S02119S Unspecified fracture of occiput, sequela -S0219XA Other fracture of base of skull, initial encounter for closed fracture -S0219XB Other fracture of base of skull, initial encounter for open fracture -S0219XD Other fracture of base of skull, subsequent encounter for fracture with routine healing -S0219XG Other fracture of base of skull, subsequent encounter for fracture with delayed healing -S0219XK Other fracture of base of skull, subsequent encounter for fracture with nonunion -S0219XS Other fracture of base of skull, sequela -S022XXA Fracture of nasal bones, initial encounter for closed fracture -S022XXB Fracture of nasal bones, initial encounter for open fracture -S022XXD Fracture of nasal bones, subsequent encounter for fracture with routine healing -S022XXG Fracture of nasal bones, subsequent encounter for fracture with delayed healing -S022XXK Fracture of nasal bones, subsequent encounter for fracture with nonunion -S022XXS Fracture of nasal bones, sequela -S023XXA Fracture of orbital floor, initial encounter for closed fracture -S023XXB Fracture of orbital floor, initial encounter for open fracture -S023XXD Fracture of orbital floor, subsequent encounter for fracture with routine healing -S023XXG Fracture of orbital floor, subsequent encounter for fracture with delayed healing -S023XXK Fracture of orbital floor, subsequent encounter for fracture with nonunion -S023XXS Fracture of orbital floor, sequela -S02400A Malar fracture unspecified, initial encounter for closed fracture -S02400B Malar fracture unspecified, initial encounter for open fracture -S02400D Malar fracture unspecified, subsequent encounter for fracture with routine healing -S02400G Malar fracture unspecified, subsequent encounter for fracture with delayed healing -S02400K Malar fracture unspecified, subsequent encounter for fracture with nonunion -S02400S Malar fracture unspecified, sequela -S02401A Maxillary fracture, unspecified, initial encounter for closed fracture -S02401B Maxillary fracture, unspecified, initial encounter for open fracture -S02401D Maxillary fracture, unspecified, subsequent encounter for fracture with routine healing -S02401G Maxillary fracture, unspecified, subsequent encounter for fracture with delayed healing -S02401K Maxillary fracture, unspecified, subsequent encounter for fracture with nonunion -S02401S Maxillary fracture, unspecified, sequela -S02402A Zygomatic fracture, unspecified, initial encounter for closed fracture -S02402B Zygomatic fracture, unspecified, initial encounter for open fracture -S02402D Zygomatic fracture, unspecified, subsequent encounter for fracture with routine healing -S02402G Zygomatic fracture, unspecified, subsequent encounter for fracture with delayed healing -S02402K Zygomatic fracture, unspecified, subsequent encounter for fracture with nonunion -S02402S Zygomatic fracture, unspecified, sequela -S02411A LeFort I fracture, initial encounter for closed fracture -S02411B LeFort I fracture, initial encounter for open fracture -S02411D LeFort I fracture, subsequent encounter for fracture with routine healing -S02411G LeFort I fracture, subsequent encounter for fracture with delayed healing -S02411K LeFort I fracture, subsequent encounter for fracture with nonunion -S02411S LeFort I fracture, sequela -S02412A LeFort II fracture, initial encounter for closed fracture -S02412B LeFort II fracture, initial encounter for open fracture -S02412D LeFort II fracture, subsequent encounter for fracture with routine healing -S02412G LeFort II fracture, subsequent encounter for fracture with delayed healing -S02412K LeFort II fracture, subsequent encounter for fracture with nonunion -S02412S LeFort II fracture, sequela -S02413A LeFort III fracture, initial encounter for closed fracture -S02413B LeFort III fracture, initial encounter for open fracture -S02413D LeFort III fracture, subsequent encounter for fracture with routine healing -S02413G LeFort III fracture, subsequent encounter for fracture with delayed healing -S02413K LeFort III fracture, subsequent encounter for fracture with nonunion -S02413S LeFort III fracture, sequela -S0242XA Fracture of alveolus of maxilla, initial encounter for closed fracture -S0242XB Fracture of alveolus of maxilla, initial encounter for open fracture -S0242XD Fracture of alveolus of maxilla, subsequent encounter for fracture with routine healing -S0242XG Fracture of alveolus of maxilla, subsequent encounter for fracture with delayed healing -S0242XK Fracture of alveolus of maxilla, subsequent encounter for fracture with nonunion -S0242XS Fracture of alveolus of maxilla, sequela -S025XXA Fracture of tooth (traumatic), initial encounter for closed fracture -S025XXB Fracture of tooth (traumatic), initial encounter for open fracture -S025XXD Fracture of tooth (traumatic), subsequent encounter for fracture with routine healing -S025XXG Fracture of tooth (traumatic), subsequent encounter for fracture with delayed healing -S025XXK Fracture of tooth (traumatic), subsequent encounter for fracture with nonunion -S025XXS Fracture of tooth (traumatic), sequela -S02600A Fracture of unspecified part of body of mandible, initial encounter for closed fracture -S02600B Fracture of unspecified part of body of mandible, initial encounter for open fracture -S02600D Fracture of unspecified part of body of mandible, subsequent encounter for fracture with routine healing -S02600G Fracture of unspecified part of body of mandible, subsequent encounter for fracture with delayed healing -S02600K Fracture of unspecified part of body of mandible, subsequent encounter for fracture with nonunion -S02600S Fracture of unspecified part of body of mandible, sequela -S02609A Fracture of mandible, unspecified, initial encounter for closed fracture -S02609B Fracture of mandible, unspecified, initial encounter for open fracture -S02609D Fracture of mandible, unspecified, subsequent encounter for fracture with routine healing -S02609G Fracture of mandible, unspecified, subsequent encounter for fracture with delayed healing -S02609K Fracture of mandible, unspecified, subsequent encounter for fracture with nonunion -S02609S Fracture of mandible, unspecified, sequela -S0261XA Fracture of condylar process of mandible, initial encounter for closed fracture -S0261XB Fracture of condylar process of mandible, initial encounter for open fracture -S0261XD Fracture of condylar process of mandible, subsequent encounter for fracture with routine healing -S0261XG Fracture of condylar process of mandible, subsequent encounter for fracture with delayed healing -S0261XK Fracture of condylar process of mandible, subsequent encounter for fracture with nonunion -S0261XS Fracture of condylar process of mandible, sequela -S0262XA Fracture of subcondylar process of mandible, initial encounter for closed fracture -S0262XB Fracture of subcondylar process of mandible, initial encounter for open fracture -S0262XD Fracture of subcondylar process of mandible, subsequent encounter for fracture with routine healing -S0262XG Fracture of subcondylar process of mandible, subsequent encounter for fracture with delayed healing -S0262XK Fracture of subcondylar process of mandible, subsequent encounter for fracture with nonunion -S0262XS Fracture of subcondylar process of mandible, sequela -S0263XA Fracture of coronoid process of mandible, initial encounter for closed fracture -S0263XB Fracture of coronoid process of mandible, initial encounter for open fracture -S0263XD Fracture of coronoid process of mandible, subsequent encounter for fracture with routine healing -S0263XG Fracture of coronoid process of mandible, subsequent encounter for fracture with delayed healing -S0263XK Fracture of coronoid process of mandible, subsequent encounter for fracture with nonunion -S0263XS Fracture of coronoid process of mandible, sequela -S0264XA Fracture of ramus of mandible, initial encounter for closed fracture -S0264XB Fracture of ramus of mandible, initial encounter for open fracture -S0264XD Fracture of ramus of mandible, subsequent encounter for fracture with routine healing -S0264XG Fracture of ramus of mandible, subsequent encounter for fracture with delayed healing -S0264XK Fracture of ramus of mandible, subsequent encounter for fracture with nonunion -S0264XS Fracture of ramus of mandible, sequela -S0265XA Fracture of angle of mandible, initial encounter for closed fracture -S0265XB Fracture of angle of mandible, initial encounter for open fracture -S0265XD Fracture of angle of mandible, subsequent encounter for fracture with routine healing -S0265XG Fracture of angle of mandible, subsequent encounter for fracture with delayed healing -S0265XK Fracture of angle of mandible, subsequent encounter for fracture with nonunion -S0265XS Fracture of angle of mandible, sequela -S0266XA Fracture of symphysis of mandible, initial encounter for closed fracture -S0266XB Fracture of symphysis of mandible, initial encounter for open fracture -S0266XD Fracture of symphysis of mandible, subsequent encounter for fracture with routine healing -S0266XG Fracture of symphysis of mandible, subsequent encounter for fracture with delayed healing -S0266XK Fracture of symphysis of mandible, subsequent encounter for fracture with nonunion -S0266XS Fracture of symphysis of mandible, sequela -S0267XA Fracture of alveolus of mandible, initial encounter for closed fracture -S0267XB Fracture of alveolus of mandible, initial encounter for open fracture -S0267XD Fracture of alveolus of mandible, subsequent encounter for fracture with routine healing -S0267XG Fracture of alveolus of mandible, subsequent encounter for fracture with delayed healing -S0267XK Fracture of alveolus of mandible, subsequent encounter for fracture with nonunion -S0267XS Fracture of alveolus of mandible, sequela -S0269XA Fracture of mandible of other specified site, initial encounter for closed fracture -S0269XB Fracture of mandible of other specified site, initial encounter for open fracture -S0269XD Fracture of mandible of other specified site, subsequent encounter for fracture with routine healing -S0269XG Fracture of mandible of other specified site, subsequent encounter for fracture with delayed healing -S0269XK Fracture of mandible of other specified site, subsequent encounter for fracture with nonunion -S0269XS Fracture of mandible of other specified site, sequela -S028XXA Fractures of other specified skull and facial bones, initial encounter for closed fracture -S028XXB Fractures of other specified skull and facial bones, initial encounter for open fracture -S028XXD Fractures of other specified skull and facial bones, subsequent encounter for fracture with routine healing -S028XXG Fractures of other specified skull and facial bones, subsequent encounter for fracture with delayed healing -S028XXK Fractures of other specified skull and facial bones, subsequent encounter for fracture with nonunion -S028XXS Fractures of other specified skull and facial bones, sequela -S0291XA Unspecified fracture of skull, initial encounter for closed fracture -S0291XB Unspecified fracture of skull, initial encounter for open fracture -S0291XD Unspecified fracture of skull, subsequent encounter for fracture with routine healing -S0291XG Unspecified fracture of skull, subsequent encounter for fracture with delayed healing -S0291XK Unspecified fracture of skull, subsequent encounter for fracture with nonunion -S0291XS Unspecified fracture of skull, sequela -S0292XA Unspecified fracture of facial bones, initial encounter for closed fracture -S0292XB Unspecified fracture of facial bones, initial encounter for open fracture -S0292XD Unspecified fracture of facial bones, subsequent encounter for fracture with routine healing -S0292XG Unspecified fracture of facial bones, subsequent encounter for fracture with delayed healing -S0292XK Unspecified fracture of facial bones, subsequent encounter for fracture with nonunion -S0292XS Unspecified fracture of facial bones, sequela -S030XXA Dislocation of jaw, initial encounter -S030XXD Dislocation of jaw, subsequent encounter -S030XXS Dislocation of jaw, sequela -S031XXA Dislocation of septal cartilage of nose, initial encounter -S031XXD Dislocation of septal cartilage of nose, subsequent encounter -S031XXS Dislocation of septal cartilage of nose, sequela -S032XXA Dislocation of tooth, initial encounter -S032XXD Dislocation of tooth, subsequent encounter -S032XXS Dislocation of tooth, sequela -S034XXA Sprain of jaw, initial encounter -S034XXD Sprain of jaw, subsequent encounter -S034XXS Sprain of jaw, sequela -S038XXA Sprain of joints and ligaments of other parts of head, initial encounter -S038XXD Sprain of joints and ligaments of other parts of head, subsequent encounter -S038XXS Sprain of joints and ligaments of other parts of head, sequela -S039XXA Sprain of joints and ligaments of unspecified parts of head, initial encounter -S039XXD Sprain of joints and ligaments of unspecified parts of head, subsequent encounter -S039XXS Sprain of joints and ligaments of unspecified parts of head, sequela -S04011A Injury of optic nerve, right eye, initial encounter -S04011D Injury of optic nerve, right eye, subsequent encounter -S04011S Injury of optic nerve, right eye, sequela -S04012A Injury of optic nerve, left eye, initial encounter -S04012D Injury of optic nerve, left eye, subsequent encounter -S04012S Injury of optic nerve, left eye, sequela -S04019A Injury of optic nerve, unspecified eye, initial encounter -S04019D Injury of optic nerve, unspecified eye, subsequent encounter -S04019S Injury of optic nerve, unspecified eye, sequela -S0402XA Injury of optic chiasm, initial encounter -S0402XD Injury of optic chiasm, subsequent encounter -S0402XS Injury of optic chiasm, sequela -S04031A Injury of optic tract and pathways, right eye, initial encounter -S04031D Injury of optic tract and pathways, right eye, subsequent encounter -S04031S Injury of optic tract and pathways, right eye, sequela -S04032A Injury of optic tract and pathways, left eye, initial encounter -S04032D Injury of optic tract and pathways, left eye, subsequent encounter -S04032S Injury of optic tract and pathways, left eye, sequela -S04039A Injury of optic tract and pathways, unspecified eye, initial encounter -S04039D Injury of optic tract and pathways, unspecified eye, subsequent encounter -S04039S Injury of optic tract and pathways, unspecified eye, sequela -S04041A Injury of visual cortex, right eye, initial encounter -S04041D Injury of visual cortex, right eye, subsequent encounter -S04041S Injury of visual cortex, right eye, sequela -S04042A Injury of visual cortex, left eye, initial encounter -S04042D Injury of visual cortex, left eye, subsequent encounter -S04042S Injury of visual cortex, left eye, sequela -S04049A Injury of visual cortex, unspecified eye, initial encounter -S04049D Injury of visual cortex, unspecified eye, subsequent encounter -S04049S Injury of visual cortex, unspecified eye, sequela -S0410XA Injury of oculomotor nerve, unspecified side, initial encounter -S0410XD Injury of oculomotor nerve, unspecified side, subsequent encounter -S0410XS Injury of oculomotor nerve, unspecified side, sequela -S0411XA Injury of oculomotor nerve, right side, initial encounter -S0411XD Injury of oculomotor nerve, right side, subsequent encounter -S0411XS Injury of oculomotor nerve, right side, sequela -S0412XA Injury of oculomotor nerve, left side, initial encounter -S0412XD Injury of oculomotor nerve, left side, subsequent encounter -S0412XS Injury of oculomotor nerve, left side, sequela -S0420XA Injury of trochlear nerve, unspecified side, initial encounter -S0420XD Injury of trochlear nerve, unspecified side, subsequent encounter -S0420XS Injury of trochlear nerve, unspecified side, sequela -S0421XA Injury of trochlear nerve, right side, initial encounter -S0421XD Injury of trochlear nerve, right side, subsequent encounter -S0421XS Injury of trochlear nerve, right side, sequela -S0422XA Injury of trochlear nerve, left side, initial encounter -S0422XD Injury of trochlear nerve, left side, subsequent encounter -S0422XS Injury of trochlear nerve, left side, sequela -S0430XA Injury of trigeminal nerve, unspecified side, initial encounter -S0430XD Injury of trigeminal nerve, unspecified side, subsequent encounter -S0430XS Injury of trigeminal nerve, unspecified side, sequela -S0431XA Injury of trigeminal nerve, right side, initial encounter -S0431XD Injury of trigeminal nerve, right side, subsequent encounter -S0431XS Injury of trigeminal nerve, right side, sequela -S0432XA Injury of trigeminal nerve, left side, initial encounter -S0432XD Injury of trigeminal nerve, left side, subsequent encounter -S0432XS Injury of trigeminal nerve, left side, sequela -S0440XA Injury of abducent nerve, unspecified side, initial encounter -S0440XD Injury of abducent nerve, unspecified side, subsequent encounter -S0440XS Injury of abducent nerve, unspecified side, sequela -S0441XA Injury of abducent nerve, right side, initial encounter -S0441XD Injury of abducent nerve, right side, subsequent encounter -S0441XS Injury of abducent nerve, right side, sequela -S0442XA Injury of abducent nerve, left side, initial encounter -S0442XD Injury of abducent nerve, left side, subsequent encounter -S0442XS Injury of abducent nerve, left side, sequela -S0450XA Injury of facial nerve, unspecified side, initial encounter -S0450XD Injury of facial nerve, unspecified side, subsequent encounter -S0450XS Injury of facial nerve, unspecified side, sequela -S0451XA Injury of facial nerve, right side, initial encounter -S0451XD Injury of facial nerve, right side, subsequent encounter -S0451XS Injury of facial nerve, right side, sequela -S0452XA Injury of facial nerve, left side, initial encounter -S0452XD Injury of facial nerve, left side, subsequent encounter -S0452XS Injury of facial nerve, left side, sequela -S0460XA Injury of acoustic nerve, unspecified side, initial encounter -S0460XD Injury of acoustic nerve, unspecified side, subsequent encounter -S0460XS Injury of acoustic nerve, unspecified side, sequela -S0461XA Injury of acoustic nerve, right side, initial encounter -S0461XD Injury of acoustic nerve, right side, subsequent encounter -S0461XS Injury of acoustic nerve, right side, sequela -S0462XA Injury of acoustic nerve, left side, initial encounter -S0462XD Injury of acoustic nerve, left side, subsequent encounter -S0462XS Injury of acoustic nerve, left side, sequela -S0470XA Injury of accessory nerve, unspecified side, initial encounter -S0470XD Injury of accessory nerve, unspecified side, subsequent encounter -S0470XS Injury of accessory nerve, unspecified side, sequela -S0471XA Injury of accessory nerve, right side, initial encounter -S0471XD Injury of accessory nerve, right side, subsequent encounter -S0471XS Injury of accessory nerve, right side, sequela -S0472XA Injury of accessory nerve, left side, initial encounter -S0472XD Injury of accessory nerve, left side, subsequent encounter -S0472XS Injury of accessory nerve, left side, sequela -S04811A Injury of olfactory [1st ] nerve, right side, initial encounter -S04811D Injury of olfactory [1st ] nerve, right side, subsequent encounter -S04811S Injury of olfactory [1st ] nerve, right side, sequela -S04812A Injury of olfactory [1st ] nerve, left side, initial encounter -S04812D Injury of olfactory [1st ] nerve, left side, subsequent encounter -S04812S Injury of olfactory [1st ] nerve, left side, sequela -S04819A Injury of olfactory [1st ] nerve, unspecified side, initial encounter -S04819D Injury of olfactory [1st ] nerve, unspecified side, subsequent encounter -S04819S Injury of olfactory [1st ] nerve, unspecified side, sequela -S04891A Injury of other cranial nerves, right side, initial encounter -S04891D Injury of other cranial nerves, right side, subsequent encounter -S04891S Injury of other cranial nerves, right side, sequela -S04892A Injury of other cranial nerves, left side, initial encounter -S04892D Injury of other cranial nerves, left side, subsequent encounter -S04892S Injury of other cranial nerves, left side, sequela -S04899A Injury of other cranial nerves, unspecified side, initial encounter -S04899D Injury of other cranial nerves, unspecified side, subsequent encounter -S04899S Injury of other cranial nerves, unspecified side, sequela -S049XXA Injury of unspecified cranial nerve, initial encounter -S049XXD Injury of unspecified cranial nerve, subsequent encounter -S049XXS Injury of unspecified cranial nerve, sequela -S0500XA Injury of conjunctiva and corneal abrasion without foreign body, unspecified eye, initial encounter -S0500XD Injury of conjunctiva and corneal abrasion without foreign body, unspecified eye, subsequent encounter -S0500XS Injury of conjunctiva and corneal abrasion without foreign body, unspecified eye, sequela -S0501XA Injury of conjunctiva and corneal abrasion without foreign body, right eye, initial encounter -S0501XD Injury of conjunctiva and corneal abrasion without foreign body, right eye, subsequent encounter -S0501XS Injury of conjunctiva and corneal abrasion without foreign body, right eye, sequela -S0502XA Injury of conjunctiva and corneal abrasion without foreign body, left eye, initial encounter -S0502XD Injury of conjunctiva and corneal abrasion without foreign body, left eye, subsequent encounter -S0502XS Injury of conjunctiva and corneal abrasion without foreign body, left eye, sequela -S0510XA Contusion of eyeball and orbital tissues, unspecified eye, initial encounter -S0510XD Contusion of eyeball and orbital tissues, unspecified eye, subsequent encounter -S0510XS Contusion of eyeball and orbital tissues, unspecified eye, sequela -S0511XA Contusion of eyeball and orbital tissues, right eye, initial encounter -S0511XD Contusion of eyeball and orbital tissues, right eye, subsequent encounter -S0511XS Contusion of eyeball and orbital tissues, right eye, sequela -S0512XA Contusion of eyeball and orbital tissues, left eye, initial encounter -S0512XD Contusion of eyeball and orbital tissues, left eye, subsequent encounter -S0512XS Contusion of eyeball and orbital tissues, left eye, sequela -S0520XA Ocular laceration and rupture with prolapse or loss of intraocular tissue, unspecified eye, initial encounter -S0520XD Ocular laceration and rupture with prolapse or loss of intraocular tissue, unspecified eye, subsequent encounter -S0520XS Ocular laceration and rupture with prolapse or loss of intraocular tissue, unspecified eye, sequela -S0521XA Ocular laceration and rupture with prolapse or loss of intraocular tissue, right eye, initial encounter -S0521XD Ocular laceration and rupture with prolapse or loss of intraocular tissue, right eye, subsequent encounter -S0521XS Ocular laceration and rupture with prolapse or loss of intraocular tissue, right eye, sequela -S0522XA Ocular laceration and rupture with prolapse or loss of intraocular tissue, left eye, initial encounter -S0522XD Ocular laceration and rupture with prolapse or loss of intraocular tissue, left eye, subsequent encounter -S0522XS Ocular laceration and rupture with prolapse or loss of intraocular tissue, left eye, sequela -S0530XA Ocular laceration without prolapse or loss of intraocular tissue, unspecified eye, initial encounter -S0530XD Ocular laceration without prolapse or loss of intraocular tissue, unspecified eye, subsequent encounter -S0530XS Ocular laceration without prolapse or loss of intraocular tissue, unspecified eye, sequela -S0531XA Ocular laceration without prolapse or loss of intraocular tissue, right eye, initial encounter -S0531XD Ocular laceration without prolapse or loss of intraocular tissue, right eye, subsequent encounter -S0531XS Ocular laceration without prolapse or loss of intraocular tissue, right eye, sequela -S0532XA Ocular laceration without prolapse or loss of intraocular tissue, left eye, initial encounter -S0532XD Ocular laceration without prolapse or loss of intraocular tissue, left eye, subsequent encounter -S0532XS Ocular laceration without prolapse or loss of intraocular tissue, left eye, sequela -S0540XA Penetrating wound of orbit with or without foreign body, unspecified eye, initial encounter -S0540XD Penetrating wound of orbit with or without foreign body, unspecified eye, subsequent encounter -S0540XS Penetrating wound of orbit with or without foreign body, unspecified eye, sequela -S0541XA Penetrating wound of orbit with or without foreign body, right eye, initial encounter -S0541XD Penetrating wound of orbit with or without foreign body, right eye, subsequent encounter -S0541XS Penetrating wound of orbit with or without foreign body, right eye, sequela -S0542XA Penetrating wound of orbit with or without foreign body, left eye, initial encounter -S0542XD Penetrating wound of orbit with or without foreign body, left eye, subsequent encounter -S0542XS Penetrating wound of orbit with or without foreign body, left eye, sequela -S0550XA Penetrating wound with foreign body of unspecified eyeball, initial encounter -S0550XD Penetrating wound with foreign body of unspecified eyeball, subsequent encounter -S0550XS Penetrating wound with foreign body of unspecified eyeball, sequela -S0551XA Penetrating wound with foreign body of right eyeball, initial encounter -S0551XD Penetrating wound with foreign body of right eyeball, subsequent encounter -S0551XS Penetrating wound with foreign body of right eyeball, sequela -S0552XA Penetrating wound with foreign body of left eyeball, initial encounter -S0552XD Penetrating wound with foreign body of left eyeball, subsequent encounter -S0552XS Penetrating wound with foreign body of left eyeball, sequela -S0560XA Penetrating wound without foreign body of unspecified eyeball, initial encounter -S0560XD Penetrating wound without foreign body of unspecified eyeball, subsequent encounter -S0560XS Penetrating wound without foreign body of unspecified eyeball, sequela -S0561XA Penetrating wound without foreign body of right eyeball, initial encounter -S0561XD Penetrating wound without foreign body of right eyeball, subsequent encounter -S0561XS Penetrating wound without foreign body of right eyeball, sequela -S0562XA Penetrating wound without foreign body of left eyeball, initial encounter -S0562XD Penetrating wound without foreign body of left eyeball, subsequent encounter -S0562XS Penetrating wound without foreign body of left eyeball, sequela -S0570XA Avulsion of unspecified eye, initial encounter -S0570XD Avulsion of unspecified eye, subsequent encounter -S0570XS Avulsion of unspecified eye, sequela -S0571XA Avulsion of right eye, initial encounter -S0571XD Avulsion of right eye, subsequent encounter -S0571XS Avulsion of right eye, sequela -S0572XA Avulsion of left eye, initial encounter -S0572XD Avulsion of left eye, subsequent encounter -S0572XS Avulsion of left eye, sequela -S058X1A Other injuries of right eye and orbit, initial encounter -S058X1D Other injuries of right eye and orbit, subsequent encounter -S058X1S Other injuries of right eye and orbit, sequela -S058X2A Other injuries of left eye and orbit, initial encounter -S058X2D Other injuries of left eye and orbit, subsequent encounter -S058X2S Other injuries of left eye and orbit, sequela -S058X9A Other injuries of unspecified eye and orbit, initial encounter -S058X9D Other injuries of unspecified eye and orbit, subsequent encounter -S058X9S Other injuries of unspecified eye and orbit, sequela -S0590XA Unspecified injury of unspecified eye and orbit, initial encounter -S0590XD Unspecified injury of unspecified eye and orbit, subsequent encounter -S0590XS Unspecified injury of unspecified eye and orbit, sequela -S0591XA Unspecified injury of right eye and orbit, initial encounter -S0591XD Unspecified injury of right eye and orbit, subsequent encounter -S0591XS Unspecified injury of right eye and orbit, sequela -S0592XA Unspecified injury of left eye and orbit, initial encounter -S0592XD Unspecified injury of left eye and orbit, subsequent encounter -S0592XS Unspecified injury of left eye and orbit, sequela -S060X0A Concussion without loss of consciousness, initial encounter -S060X0D Concussion without loss of consciousness, subsequent encounter -S060X0S Concussion without loss of consciousness, sequela -S060X1A Concussion with loss of consciousness of 30 minutes or less, initial encounter -S060X1D Concussion with loss of consciousness of 30 minutes or less, subsequent encounter -S060X1S Concussion with loss of consciousness of 30 minutes or less, sequela -S060X2A Concussion with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S060X2D Concussion with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S060X2S Concussion with loss of consciousness of 31 minutes to 59 minutes, sequela -S060X3A Concussion with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S060X3D Concussion with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S060X3S Concussion with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S060X4A Concussion with loss of consciousness of 6 hours to 24 hours, initial encounter -S060X4D Concussion with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S060X4S Concussion with loss of consciousness of 6 hours to 24 hours, sequela -S060X5A Concussion with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S060X5D Concussion with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S060X5S Concussion with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S060X6A Concussion with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S060X6D Concussion with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S060X6S Concussion with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S060X7A Concussion with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S060X7D Concussion with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S060X7S Concussion with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S060X8A Concussion with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S060X8D Concussion with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S060X8S Concussion with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S060X9A Concussion with loss of consciousness of unspecified duration, initial encounter -S060X9D Concussion with loss of consciousness of unspecified duration, subsequent encounter -S060X9S Concussion with loss of consciousness of unspecified duration, sequela -S061X0A Traumatic cerebral edema without loss of consciousness, initial encounter -S061X0D Traumatic cerebral edema without loss of consciousness, subsequent encounter -S061X0S Traumatic cerebral edema without loss of consciousness, sequela -S061X1A Traumatic cerebral edema with loss of consciousness of 30 minutes or less, initial encounter -S061X1D Traumatic cerebral edema with loss of consciousness of 30 minutes or less, subsequent encounter -S061X1S Traumatic cerebral edema with loss of consciousness of 30 minutes or less, sequela -S061X2A Traumatic cerebral edema with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S061X2D Traumatic cerebral edema with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S061X2S Traumatic cerebral edema with loss of consciousness of 31 minutes to 59 minutes, sequela -S061X3A Traumatic cerebral edema with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S061X3D Traumatic cerebral edema with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S061X3S Traumatic cerebral edema with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S061X4A Traumatic cerebral edema with loss of consciousness of 6 hours to 24 hours, initial encounter -S061X4D Traumatic cerebral edema with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S061X4S Traumatic cerebral edema with loss of consciousness of 6 hours to 24 hours, sequela -S061X5A Traumatic cerebral edema with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S061X5D Traumatic cerebral edema with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S061X5S Traumatic cerebral edema with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S061X6A Traumatic cerebral edema with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S061X6D Traumatic cerebral edema with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S061X6S Traumatic cerebral edema with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S061X7A Traumatic cerebral edema with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S061X7D Traumatic cerebral edema with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S061X7S Traumatic cerebral edema with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S061X8A Traumatic cerebral edema with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S061X8D Traumatic cerebral edema with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S061X8S Traumatic cerebral edema with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S061X9A Traumatic cerebral edema with loss of consciousness of unspecified duration, initial encounter -S061X9D Traumatic cerebral edema with loss of consciousness of unspecified duration, subsequent encounter -S061X9S Traumatic cerebral edema with loss of consciousness of unspecified duration, sequela -S062X0A Diffuse traumatic brain injury without loss of consciousness, initial encounter -S062X0D Diffuse traumatic brain injury without loss of consciousness, subsequent encounter -S062X0S Diffuse traumatic brain injury without loss of consciousness, sequela -S062X1A Diffuse traumatic brain injury with loss of consciousness of 30 minutes or less, initial encounter -S062X1D Diffuse traumatic brain injury with loss of consciousness of 30 minutes or less, subsequent encounter -S062X1S Diffuse traumatic brain injury with loss of consciousness of 30 minutes or less, sequela -S062X2A Diffuse traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S062X2D Diffuse traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S062X2S Diffuse traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, sequela -S062X3A Diffuse traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S062X3D Diffuse traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S062X3S Diffuse traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S062X4A Diffuse traumatic brain injury with loss of consciousness of 6 hours to 24 hours, initial encounter -S062X4D Diffuse traumatic brain injury with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S062X4S Diffuse traumatic brain injury with loss of consciousness of 6 hours to 24 hours, sequela -S062X5A Diffuse traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious levels, initial encounter -S062X5D Diffuse traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious levels, subsequent encounter -S062X5S Diffuse traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious levels, sequela -S062X6A Diffuse traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S062X6D Diffuse traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S062X6S Diffuse traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S062X7A Diffuse traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S062X7D Diffuse traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S062X7S Diffuse traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S062X8A Diffuse traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S062X8D Diffuse traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S062X8S Diffuse traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S062X9A Diffuse traumatic brain injury with loss of consciousness of unspecified duration, initial encounter -S062X9D Diffuse traumatic brain injury with loss of consciousness of unspecified duration, subsequent encounter -S062X9S Diffuse traumatic brain injury with loss of consciousness of unspecified duration, sequela -S06300A Unspecified focal traumatic brain injury without loss of consciousness, initial encounter -S06300D Unspecified focal traumatic brain injury without loss of consciousness, subsequent encounter -S06300S Unspecified focal traumatic brain injury without loss of consciousness, sequela -S06301A Unspecified focal traumatic brain injury with loss of consciousness of 30 minutes or less, initial encounter -S06301D Unspecified focal traumatic brain injury with loss of consciousness of 30 minutes or less, subsequent encounter -S06301S Unspecified focal traumatic brain injury with loss of consciousness of 30 minutes or less, sequela -S06302A Unspecified focal traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06302D Unspecified focal traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06302S Unspecified focal traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, sequela -S06303A Unspecified focal traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06303D Unspecified focal traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06303S Unspecified focal traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06304A Unspecified focal traumatic brain injury with loss of consciousness of 6 hours to 24 hours, initial encounter -S06304D Unspecified focal traumatic brain injury with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06304S Unspecified focal traumatic brain injury with loss of consciousness of 6 hours to 24 hours, sequela -S06305A Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06305D Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06305S Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06306A Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06306D Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06306S Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06307A Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06307D Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06307S Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06308A Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06308D Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06308S Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06309A Unspecified focal traumatic brain injury with loss of consciousness of unspecified duration, initial encounter -S06309D Unspecified focal traumatic brain injury with loss of consciousness of unspecified duration, subsequent encounter -S06309S Unspecified focal traumatic brain injury with loss of consciousness of unspecified duration, sequela -S06310A Contusion and laceration of right cerebrum without loss of consciousness, initial encounter -S06310D Contusion and laceration of right cerebrum without loss of consciousness, subsequent encounter -S06310S Contusion and laceration of right cerebrum without loss of consciousness, sequela -S06311A Contusion and laceration of right cerebrum with loss of consciousness of 30 minutes or less, initial encounter -S06311D Contusion and laceration of right cerebrum with loss of consciousness of 30 minutes or less, subsequent encounter -S06311S Contusion and laceration of right cerebrum with loss of consciousness of 30 minutes or less, sequela -S06312A Contusion and laceration of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06312D Contusion and laceration of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06312S Contusion and laceration of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, sequela -S06313A Contusion and laceration of right cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06313D Contusion and laceration of right cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06313S Contusion and laceration of right cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06314A Contusion and laceration of right cerebrum with loss of consciousness of 6 hours to 24 hours, initial encounter -S06314D Contusion and laceration of right cerebrum with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06314S Contusion and laceration of right cerebrum with loss of consciousness of 6 hours to 24 hours, sequela -S06315A Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06315D Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06315S Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06316A Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06316D Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06316S Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06317A Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06317D Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06317S Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06318A Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06318D Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06318S Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06319A Contusion and laceration of right cerebrum with loss of consciousness of unspecified duration, initial encounter -S06319D Contusion and laceration of right cerebrum with loss of consciousness of unspecified duration, subsequent encounter -S06319S Contusion and laceration of right cerebrum with loss of consciousness of unspecified duration, sequela -S06320A Contusion and laceration of left cerebrum without loss of consciousness, initial encounter -S06320D Contusion and laceration of left cerebrum without loss of consciousness, subsequent encounter -S06320S Contusion and laceration of left cerebrum without loss of consciousness, sequela -S06321A Contusion and laceration of left cerebrum with loss of consciousness of 30 minutes or less, initial encounter -S06321D Contusion and laceration of left cerebrum with loss of consciousness of 30 minutes or less, subsequent encounter -S06321S Contusion and laceration of left cerebrum with loss of consciousness of 30 minutes or less, sequela -S06322A Contusion and laceration of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06322D Contusion and laceration of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06322S Contusion and laceration of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, sequela -S06323A Contusion and laceration of left cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06323D Contusion and laceration of left cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06323S Contusion and laceration of left cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06324A Contusion and laceration of left cerebrum with loss of consciousness of 6 hours to 24 hours, initial encounter -S06324D Contusion and laceration of left cerebrum with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06324S Contusion and laceration of left cerebrum with loss of consciousness of 6 hours to 24 hours, sequela -S06325A Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06325D Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06325S Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06326A Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06326D Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06326S Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06327A Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06327D Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06327S Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06328A Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06328D Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06328S Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06329A Contusion and laceration of left cerebrum with loss of consciousness of unspecified duration, initial encounter -S06329D Contusion and laceration of left cerebrum with loss of consciousness of unspecified duration, subsequent encounter -S06329S Contusion and laceration of left cerebrum with loss of consciousness of unspecified duration, sequela -S06330A Contusion and laceration of cerebrum, unspecified, without loss of consciousness, initial encounter -S06330D Contusion and laceration of cerebrum, unspecified, without loss of consciousness, subsequent encounter -S06330S Contusion and laceration of cerebrum, unspecified, without loss of consciousness, sequela -S06331A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, initial encounter -S06331D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, subsequent encounter -S06331S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, sequela -S06332A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06332D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06332S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, sequela -S06333A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06333D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06333S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06334A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, initial encounter -S06334D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06334S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, sequela -S06335A Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06335D Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06335S Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06336A Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06336D Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06336S Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06337A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06337D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06337S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06338A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06338D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06338S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06339A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of unspecified duration, initial encounter -S06339D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of unspecified duration, subsequent encounter -S06339S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of unspecified duration, sequela -S06340A Traumatic hemorrhage of right cerebrum without loss of consciousness, initial encounter -S06340D Traumatic hemorrhage of right cerebrum without loss of consciousness, subsequent encounter -S06340S Traumatic hemorrhage of right cerebrum without loss of consciousness, sequela -S06341A Traumatic hemorrhage of right cerebrum with loss of consciousness of 30 minutes or less, initial encounter -S06341D Traumatic hemorrhage of right cerebrum with loss of consciousness of 30 minutes or less, subsequent encounter -S06341S Traumatic hemorrhage of right cerebrum with loss of consciousness of 30 minutes or less, sequela -S06342A Traumatic hemorrhage of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06342D Traumatic hemorrhage of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06342S Traumatic hemorrhage of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, sequela -S06343A Traumatic hemorrhage of right cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, initial encounter -S06343D Traumatic hemorrhage of right cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, subsequent encounter -S06343S Traumatic hemorrhage of right cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, sequela -S06344A Traumatic hemorrhage of right cerebrum with loss of consciousness of 6 hours to 24 hours, initial encounter -S06344D Traumatic hemorrhage of right cerebrum with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06344S Traumatic hemorrhage of right cerebrum with loss of consciousness of 6 hours to 24 hours, sequela -S06345A Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06345D Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06345S Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06346A Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06346D Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06346S Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06347A Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06347D Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06347S Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06348A Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06348D Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06348S Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06349A Traumatic hemorrhage of right cerebrum with loss of consciousness of unspecified duration, initial encounter -S06349D Traumatic hemorrhage of right cerebrum with loss of consciousness of unspecified duration, subsequent encounter -S06349S Traumatic hemorrhage of right cerebrum with loss of consciousness of unspecified duration, sequela -S06350A Traumatic hemorrhage of left cerebrum without loss of consciousness, initial encounter -S06350D Traumatic hemorrhage of left cerebrum without loss of consciousness, subsequent encounter -S06350S Traumatic hemorrhage of left cerebrum without loss of consciousness, sequela -S06351A Traumatic hemorrhage of left cerebrum with loss of consciousness of 30 minutes or less, initial encounter -S06351D Traumatic hemorrhage of left cerebrum with loss of consciousness of 30 minutes or less, subsequent encounter -S06351S Traumatic hemorrhage of left cerebrum with loss of consciousness of 30 minutes or less, sequela -S06352A Traumatic hemorrhage of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06352D Traumatic hemorrhage of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06352S Traumatic hemorrhage of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, sequela -S06353A Traumatic hemorrhage of left cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, initial encounter -S06353D Traumatic hemorrhage of left cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, subsequent encounter -S06353S Traumatic hemorrhage of left cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, sequela -S06354A Traumatic hemorrhage of left cerebrum with loss of consciousness of 6 hours to 24 hours, initial encounter -S06354D Traumatic hemorrhage of left cerebrum with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06354S Traumatic hemorrhage of left cerebrum with loss of consciousness of 6 hours to 24 hours, sequela -S06355A Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06355D Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06355S Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06356A Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06356D Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06356S Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06357A Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06357D Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06357S Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06358A Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06358D Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06358S Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06359A Traumatic hemorrhage of left cerebrum with loss of consciousness of unspecified duration, initial encounter -S06359D Traumatic hemorrhage of left cerebrum with loss of consciousness of unspecified duration, subsequent encounter -S06359S Traumatic hemorrhage of left cerebrum with loss of consciousness of unspecified duration, sequela -S06360A Traumatic hemorrhage of cerebrum, unspecified, without loss of consciousness, initial encounter -S06360D Traumatic hemorrhage of cerebrum, unspecified, without loss of consciousness, subsequent encounter -S06360S Traumatic hemorrhage of cerebrum, unspecified, without loss of consciousness, sequela -S06361A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, initial encounter -S06361D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, subsequent encounter -S06361S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, sequela -S06362A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06362D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06362S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, sequela -S06363A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 1 hours to 5 hours 59 minutes, initial encounter -S06363D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 1 hours to 5 hours 59 minutes, subsequent encounter -S06363S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 1 hours to 5 hours 59 minutes, sequela -S06364A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, initial encounter -S06364D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06364S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, sequela -S06365A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06365D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06365S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06366A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06366D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06366S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06367A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06367D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06367S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06368A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06368D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06368S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06369A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of unspecified duration, initial encounter -S06369D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of unspecified duration, subsequent encounter -S06369S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of unspecified duration, sequela -S06370A Contusion, laceration, and hemorrhage of cerebellum without loss of consciousness, initial encounter -S06370D Contusion, laceration, and hemorrhage of cerebellum without loss of consciousness, subsequent encounter -S06370S Contusion, laceration, and hemorrhage of cerebellum without loss of consciousness, sequela -S06371A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 30 minutes or less, initial encounter -S06371D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 30 minutes or less, subsequent encounter -S06371S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 30 minutes or less, sequela -S06372A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06372D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06372S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 31 minutes to 59 minutes, sequela -S06373A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06373D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06373S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06374A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 6 hours to 24 hours, initial encounter -S06374D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06374S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 6 hours to 24 hours, sequela -S06375A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06375D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06375S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06376A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06376D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06376S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06377A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06377D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06377S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06378A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06378D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06378S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06379A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of unspecified duration, initial encounter -S06379D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of unspecified duration, subsequent encounter -S06379S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of unspecified duration, sequela -S06380A Contusion, laceration, and hemorrhage of brainstem without loss of consciousness, initial encounter -S06380D Contusion, laceration, and hemorrhage of brainstem without loss of consciousness, subsequent encounter -S06380S Contusion, laceration, and hemorrhage of brainstem without loss of consciousness, sequela -S06381A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 30 minutes or less, initial encounter -S06381D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 30 minutes or less, subsequent encounter -S06381S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 30 minutes or less, sequela -S06382A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06382D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06382S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 31 minutes to 59 minutes, sequela -S06383A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06383D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06383S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06384A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 6 hours to 24 hours, initial encounter -S06384D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06384S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 6 hours to 24 hours, sequela -S06385A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06385D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06385S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06386A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06386D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06386S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06387A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06387D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06387S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06388A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06388D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06388S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06389A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of unspecified duration, initial encounter -S06389D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of unspecified duration, subsequent encounter -S06389S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of unspecified duration, sequela -S064X0A Epidural hemorrhage without loss of consciousness, initial encounter -S064X0D Epidural hemorrhage without loss of consciousness, subsequent encounter -S064X0S Epidural hemorrhage without loss of consciousness, sequela -S064X1A Epidural hemorrhage with loss of consciousness of 30 minutes or less, initial encounter -S064X1D Epidural hemorrhage with loss of consciousness of 30 minutes or less, subsequent encounter -S064X1S Epidural hemorrhage with loss of consciousness of 30 minutes or less, sequela -S064X2A Epidural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S064X2D Epidural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S064X2S Epidural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, sequela -S064X3A Epidural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S064X3D Epidural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S064X3S Epidural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S064X4A Epidural hemorrhage with loss of consciousness of 6 hours to 24 hours, initial encounter -S064X4D Epidural hemorrhage with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S064X4S Epidural hemorrhage with loss of consciousness of 6 hours to 24 hours, sequela -S064X5A Epidural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S064X5D Epidural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S064X5S Epidural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S064X6A Epidural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S064X6D Epidural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S064X6S Epidural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S064X7A Epidural hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S064X7D Epidural hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S064X7S Epidural hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S064X8A Epidural hemorrhage with loss of consciousness of any duration with death due to other causes prior to regaining consciousness, initial encounter -S064X8D Epidural hemorrhage with loss of consciousness of any duration with death due to other causes prior to regaining consciousness, subsequent encounter -S064X8S Epidural hemorrhage with loss of consciousness of any duration with death due to other causes prior to regaining consciousness, sequela -S064X9A Epidural hemorrhage with loss of consciousness of unspecified duration, initial encounter -S064X9D Epidural hemorrhage with loss of consciousness of unspecified duration, subsequent encounter -S064X9S Epidural hemorrhage with loss of consciousness of unspecified duration, sequela -S065X0A Traumatic subdural hemorrhage without loss of consciousness, initial encounter -S065X0D Traumatic subdural hemorrhage without loss of consciousness, subsequent encounter -S065X0S Traumatic subdural hemorrhage without loss of consciousness, sequela -S065X1A Traumatic subdural hemorrhage with loss of consciousness of 30 minutes or less, initial encounter -S065X1D Traumatic subdural hemorrhage with loss of consciousness of 30 minutes or less, subsequent encounter -S065X1S Traumatic subdural hemorrhage with loss of consciousness of 30 minutes or less, sequela -S065X2A Traumatic subdural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S065X2D Traumatic subdural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S065X2S Traumatic subdural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, sequela -S065X3A Traumatic subdural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S065X3D Traumatic subdural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S065X3S Traumatic subdural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S065X4A Traumatic subdural hemorrhage with loss of consciousness of 6 hours to 24 hours, initial encounter -S065X4D Traumatic subdural hemorrhage with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S065X4S Traumatic subdural hemorrhage with loss of consciousness of 6 hours to 24 hours, sequela -S065X5A Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S065X5D Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S065X5S Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S065X6A Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S065X6D Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S065X6S Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S065X7A Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to brain injury before regaining consciousness, initial encounter -S065X7D Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to brain injury before regaining consciousness, subsequent encounter -S065X7S Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to brain injury before regaining consciousness, sequela -S065X8A Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to other cause before regaining consciousness, initial encounter -S065X8D Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to other cause before regaining consciousness, subsequent encounter -S065X8S Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to other cause before regaining consciousness, sequela -S065X9A Traumatic subdural hemorrhage with loss of consciousness of unspecified duration, initial encounter -S065X9D Traumatic subdural hemorrhage with loss of consciousness of unspecified duration, subsequent encounter -S065X9S Traumatic subdural hemorrhage with loss of consciousness of unspecified duration, sequela -S066X0A Traumatic subarachnoid hemorrhage without loss of consciousness, initial encounter -S066X0D Traumatic subarachnoid hemorrhage without loss of consciousness, subsequent encounter -S066X0S Traumatic subarachnoid hemorrhage without loss of consciousness, sequela -S066X1A Traumatic subarachnoid hemorrhage with loss of consciousness of 30 minutes or less, initial encounter -S066X1D Traumatic subarachnoid hemorrhage with loss of consciousness of 30 minutes or less, subsequent encounter -S066X1S Traumatic subarachnoid hemorrhage with loss of consciousness of 30 minutes or less, sequela -S066X2A Traumatic subarachnoid hemorrhage with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S066X2D Traumatic subarachnoid hemorrhage with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S066X2S Traumatic subarachnoid hemorrhage with loss of consciousness of 31 minutes to 59 minutes, sequela -S066X3A Traumatic subarachnoid hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S066X3D Traumatic subarachnoid hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S066X3S Traumatic subarachnoid hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S066X4A Traumatic subarachnoid hemorrhage with loss of consciousness of 6 hours to 24 hours, initial encounter -S066X4D Traumatic subarachnoid hemorrhage with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S066X4S Traumatic subarachnoid hemorrhage with loss of consciousness of 6 hours to 24 hours, sequela -S066X5A Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S066X5D Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S066X5S Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S066X6A Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S066X6D Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S066X6S Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S066X7A Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S066X7D Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S066X7S Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S066X8A Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S066X8D Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S066X8S Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S066X9A Traumatic subarachnoid hemorrhage with loss of consciousness of unspecified duration, initial encounter -S066X9D Traumatic subarachnoid hemorrhage with loss of consciousness of unspecified duration, subsequent encounter -S066X9S Traumatic subarachnoid hemorrhage with loss of consciousness of unspecified duration, sequela -S06810A Injury of right internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, initial encounter -S06810D Injury of right internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, subsequent encounter -S06810S Injury of right internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, sequela -S06811A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, initial encounter -S06811D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, subsequent encounter -S06811S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, sequela -S06812A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06812D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06812S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, sequela -S06813A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06813D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06813S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06814A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, initial encounter -S06814D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06814S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, sequela -S06815A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06815D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06815S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06816A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06816D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06816S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06817A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06817D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06817S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06818A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06818D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06818S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06819A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, initial encounter -S06819D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, subsequent encounter -S06819S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, sequela -S06820A Injury of left internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, initial encounter -S06820D Injury of left internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, subsequent encounter -S06820S Injury of left internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, sequela -S06821A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, initial encounter -S06821D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, subsequent encounter -S06821S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, sequela -S06822A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06822D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06822S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, sequela -S06823A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06823D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06823S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06824A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, initial encounter -S06824D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06824S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, sequela -S06825A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06825D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06825S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06826A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06826D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06826S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06827A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06827D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06827S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06828A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06828D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06828S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06829A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, initial encounter -S06829D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, subsequent encounter -S06829S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, sequela -S06890A Other specified intracranial injury without loss of consciousness, initial encounter -S06890D Other specified intracranial injury without loss of consciousness, subsequent encounter -S06890S Other specified intracranial injury without loss of consciousness, sequela -S06891A Other specified intracranial injury with loss of consciousness of 30 minutes or less, initial encounter -S06891D Other specified intracranial injury with loss of consciousness of 30 minutes or less, subsequent encounter -S06891S Other specified intracranial injury with loss of consciousness of 30 minutes or less, sequela -S06892A Other specified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06892D Other specified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06892S Other specified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, sequela -S06893A Other specified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06893D Other specified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06893S Other specified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06894A Other specified intracranial injury with loss of consciousness of 6 hours to 24 hours, initial encounter -S06894D Other specified intracranial injury with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06894S Other specified intracranial injury with loss of consciousness of 6 hours to 24 hours, sequela -S06895A Other specified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06895D Other specified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06895S Other specified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06896A Other specified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06896D Other specified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06896S Other specified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06897A Other specified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06897D Other specified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06897S Other specified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06898A Other specified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06898D Other specified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06898S Other specified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06899A Other specified intracranial injury with loss of consciousness of unspecified duration, initial encounter -S06899D Other specified intracranial injury with loss of consciousness of unspecified duration, subsequent encounter -S06899S Other specified intracranial injury with loss of consciousness of unspecified duration, sequela -S069X0A Unspecified intracranial injury without loss of consciousness, initial encounter -S069X0D Unspecified intracranial injury without loss of consciousness, subsequent encounter -S069X0S Unspecified intracranial injury without loss of consciousness, sequela -S069X1A Unspecified intracranial injury with loss of consciousness of 30 minutes or less, initial encounter -S069X1D Unspecified intracranial injury with loss of consciousness of 30 minutes or less, subsequent encounter -S069X1S Unspecified intracranial injury with loss of consciousness of 30 minutes or less, sequela -S069X2A Unspecified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S069X2D Unspecified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S069X2S Unspecified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, sequela -S069X3A Unspecified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S069X3D Unspecified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S069X3S Unspecified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S069X4A Unspecified intracranial injury with loss of consciousness of 6 hours to 24 hours, initial encounter -S069X4D Unspecified intracranial injury with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S069X4S Unspecified intracranial injury with loss of consciousness of 6 hours to 24 hours, sequela -S069X5A Unspecified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S069X5D Unspecified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S069X5S Unspecified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S069X6A Unspecified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S069X6D Unspecified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S069X6S Unspecified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S069X7A Unspecified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S069X7D Unspecified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S069X7S Unspecified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S069X8A Unspecified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S069X8D Unspecified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S069X8S Unspecified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S069X9A Unspecified intracranial injury with loss of consciousness of unspecified duration, initial encounter -S069X9D Unspecified intracranial injury with loss of consciousness of unspecified duration, subsequent encounter -S069X9S Unspecified intracranial injury with loss of consciousness of unspecified duration, sequela -S070XXA Crushing injury of face, initial encounter -S070XXD Crushing injury of face, subsequent encounter -S070XXS Crushing injury of face, sequela -S071XXA Crushing injury of skull, initial encounter -S071XXD Crushing injury of skull, subsequent encounter -S071XXS Crushing injury of skull, sequela -S078XXA Crushing injury of other parts of head, initial encounter -S078XXD Crushing injury of other parts of head, subsequent encounter -S078XXS Crushing injury of other parts of head, sequela -S079XXA Crushing injury of head, part unspecified, initial encounter -S079XXD Crushing injury of head, part unspecified, subsequent encounter -S079XXS Crushing injury of head, part unspecified, sequela -S080XXA Avulsion of scalp, initial encounter -S080XXD Avulsion of scalp, subsequent encounter -S080XXS Avulsion of scalp, sequela -S08111A Complete traumatic amputation of right ear, initial encounter -S08111D Complete traumatic amputation of right ear, subsequent encounter -S08111S Complete traumatic amputation of right ear, sequela -S08112A Complete traumatic amputation of left ear, initial encounter -S08112D Complete traumatic amputation of left ear, subsequent encounter -S08112S Complete traumatic amputation of left ear, sequela -S08119A Complete traumatic amputation of unspecified ear, initial encounter -S08119D Complete traumatic amputation of unspecified ear, subsequent encounter -S08119S Complete traumatic amputation of unspecified ear, sequela -S08121A Partial traumatic amputation of right ear, initial encounter -S08121D Partial traumatic amputation of right ear, subsequent encounter -S08121S Partial traumatic amputation of right ear, sequela -S08122A Partial traumatic amputation of left ear, initial encounter -S08122D Partial traumatic amputation of left ear, subsequent encounter -S08122S Partial traumatic amputation of left ear, sequela -S08129A Partial traumatic amputation of unspecified ear, initial encounter -S08129D Partial traumatic amputation of unspecified ear, subsequent encounter -S08129S Partial traumatic amputation of unspecified ear, sequela -S08811A Complete traumatic amputation of nose, initial encounter -S08811D Complete traumatic amputation of nose, subsequent encounter -S08811S Complete traumatic amputation of nose, sequela -S08812A Partial traumatic amputation of nose, initial encounter -S08812D Partial traumatic amputation of nose, subsequent encounter -S08812S Partial traumatic amputation of nose, sequela -S0889XA Traumatic amputation of other parts of head, initial encounter -S0889XD Traumatic amputation of other parts of head, subsequent encounter -S0889XS Traumatic amputation of other parts of head, sequela -S090XXA Injury of blood vessels of head, not elsewhere classified, initial encounter -S090XXD Injury of blood vessels of head, not elsewhere classified, subsequent encounter -S090XXS Injury of blood vessels of head, not elsewhere classified, sequela -S0910XA Unspecified injury of muscle and tendon of head, initial encounter -S0910XD Unspecified injury of muscle and tendon of head, subsequent encounter -S0910XS Unspecified injury of muscle and tendon of head, sequela -S0911XA Strain of muscle and tendon of head, initial encounter -S0911XD Strain of muscle and tendon of head, subsequent encounter -S0911XS Strain of muscle and tendon of head, sequela -S0912XA Laceration of muscle and tendon of head, initial encounter -S0912XD Laceration of muscle and tendon of head, subsequent encounter -S0912XS Laceration of muscle and tendon of head, sequela -S0919XA Other specified injury of muscle and tendon of head, initial encounter -S0919XD Other specified injury of muscle and tendon of head, subsequent encounter -S0919XS Other specified injury of muscle and tendon of head, sequela -S0920XA Traumatic rupture of unspecified ear drum, initial encounter -S0920XD Traumatic rupture of unspecified ear drum, subsequent encounter -S0920XS Traumatic rupture of unspecified ear drum, sequela -S0921XA Traumatic rupture of right ear drum, initial encounter -S0921XD Traumatic rupture of right ear drum, subsequent encounter -S0921XS Traumatic rupture of right ear drum, sequela -S0922XA Traumatic rupture of left ear drum, initial encounter -S0922XD Traumatic rupture of left ear drum, subsequent encounter -S0922XS Traumatic rupture of left ear drum, sequela -S09301A Unspecified injury of right middle and inner ear, initial encounter -S09301D Unspecified injury of right middle and inner ear, subsequent encounter -S09301S Unspecified injury of right middle and inner ear, sequela -S09302A Unspecified injury of left middle and inner ear, initial encounter -S09302D Unspecified injury of left middle and inner ear, subsequent encounter -S09302S Unspecified injury of left middle and inner ear, sequela -S09309A Unspecified injury of unspecified middle and inner ear, initial encounter -S09309D Unspecified injury of unspecified middle and inner ear, subsequent encounter -S09309S Unspecified injury of unspecified middle and inner ear, sequela -S09311A Primary blast injury of right ear, initial encounter -S09311D Primary blast injury of right ear, subsequent encounter -S09311S Primary blast injury of right ear, sequela -S09312A Primary blast injury of left ear, initial encounter -S09312D Primary blast injury of left ear, subsequent encounter -S09312S Primary blast injury of left ear, sequela -S09313A Primary blast injury of ear, bilateral, initial encounter -S09313D Primary blast injury of ear, bilateral, subsequent encounter -S09313S Primary blast injury of ear, bilateral, sequela -S09319A Primary blast injury of unspecified ear, initial encounter -S09319D Primary blast injury of unspecified ear, subsequent encounter -S09319S Primary blast injury of unspecified ear, sequela -S09391A Other specified injury of right middle and inner ear, initial encounter -S09391D Other specified injury of right middle and inner ear, subsequent encounter -S09391S Other specified injury of right middle and inner ear, sequela -S09392A Other specified injury of left middle and inner ear, initial encounter -S09392D Other specified injury of left middle and inner ear, subsequent encounter -S09392S Other specified injury of left middle and inner ear, sequela -S09399A Other specified injury of unspecified middle and inner ear, initial encounter -S09399D Other specified injury of unspecified middle and inner ear, subsequent encounter -S09399S Other specified injury of unspecified middle and inner ear, sequela -S098XXA Other specified injuries of head, initial encounter -S098XXD Other specified injuries of head, subsequent encounter -S098XXS Other specified injuries of head, sequela -S0990XA Unspecified injury of head, initial encounter -S0990XD Unspecified injury of head, subsequent encounter -S0990XS Unspecified injury of head, sequela -S0991XA Unspecified injury of ear, initial encounter -S0991XD Unspecified injury of ear, subsequent encounter -S0991XS Unspecified injury of ear, sequela -S0992XA Unspecified injury of nose, initial encounter -S0992XD Unspecified injury of nose, subsequent encounter -S0992XS Unspecified injury of nose, sequela -S0993XA Unspecified injury of face, initial encounter -S0993XD Unspecified injury of face, subsequent encounter -S0993XS Unspecified injury of face, sequela -S100XXA Contusion of throat, initial encounter -S100XXD Contusion of throat, subsequent encounter -S100XXS Contusion of throat, sequela -S1010XA Unspecified superficial injuries of throat, initial encounter -S1010XD Unspecified superficial injuries of throat, subsequent encounter -S1010XS Unspecified superficial injuries of throat, sequela -S1011XA Abrasion of throat, initial encounter -S1011XD Abrasion of throat, subsequent encounter -S1011XS Abrasion of throat, sequela -S1012XA Blister (nonthermal) of throat, initial encounter -S1012XD Blister (nonthermal) of throat, subsequent encounter -S1012XS Blister (nonthermal) of throat, sequela -S1014XA External constriction of part of throat, initial encounter -S1014XD External constriction of part of throat, subsequent encounter -S1014XS External constriction of part of throat, sequela -S1015XA Superficial foreign body of throat, initial encounter -S1015XD Superficial foreign body of throat, subsequent encounter -S1015XS Superficial foreign body of throat, sequela -S1016XA Insect bite (nonvenomous) of throat, initial encounter -S1016XD Insect bite (nonvenomous) of throat, subsequent encounter -S1016XS Insect bite (nonvenomous) of throat, sequela -S1017XA Other superficial bite of throat, initial encounter -S1017XD Other superficial bite of throat, subsequent encounter -S1017XS Other superficial bite of throat, sequela -S1080XA Unspecified superficial injury of other specified part of neck, initial encounter -S1080XD Unspecified superficial injury of other specified part of neck, subsequent encounter -S1080XS Unspecified superficial injury of other specified part of neck, sequela -S1081XA Abrasion of other specified part of neck, initial encounter -S1081XD Abrasion of other specified part of neck, subsequent encounter -S1081XS Abrasion of other specified part of neck, sequela -S1082XA Blister (nonthermal) of other specified part of neck, initial encounter -S1082XD Blister (nonthermal) of other specified part of neck, subsequent encounter -S1082XS Blister (nonthermal) of other specified part of neck, sequela -S1083XA Contusion of other specified part of neck, initial encounter -S1083XD Contusion of other specified part of neck, subsequent encounter -S1083XS Contusion of other specified part of neck, sequela -S1084XA External constriction of other specified part of neck, initial encounter -S1084XD External constriction of other specified part of neck, subsequent encounter -S1084XS External constriction of other specified part of neck, sequela -S1085XA Superficial foreign body of other specified part of neck, initial encounter -S1085XD Superficial foreign body of other specified part of neck, subsequent encounter -S1085XS Superficial foreign body of other specified part of neck, sequela -S1086XA Insect bite of other specified part of neck, initial encounter -S1086XD Insect bite of other specified part of neck, subsequent encounter -S1086XS Insect bite of other specified part of neck, sequela -S1087XA Other superficial bite of other specified part of neck, initial encounter -S1087XD Other superficial bite of other specified part of neck, subsequent encounter -S1087XS Other superficial bite of other specified part of neck, sequela -S1090XA Unspecified superficial injury of unspecified part of neck, initial encounter -S1090XD Unspecified superficial injury of unspecified part of neck, subsequent encounter -S1090XS Unspecified superficial injury of unspecified part of neck, sequela -S1091XA Abrasion of unspecified part of neck, initial encounter -S1091XD Abrasion of unspecified part of neck, subsequent encounter -S1091XS Abrasion of unspecified part of neck, sequela -S1092XA Blister (nonthermal) of unspecified part of neck, initial encounter -S1092XD Blister (nonthermal) of unspecified part of neck, subsequent encounter -S1092XS Blister (nonthermal) of unspecified part of neck, sequela -S1093XA Contusion of unspecified part of neck, initial encounter -S1093XD Contusion of unspecified part of neck, subsequent encounter -S1093XS Contusion of unspecified part of neck, sequela -S1094XA External constriction of unspecified part of neck, initial encounter -S1094XD External constriction of unspecified part of neck, subsequent encounter -S1094XS External constriction of unspecified part of neck, sequela -S1095XA Superficial foreign body of unspecified part of neck, initial encounter -S1095XD Superficial foreign body of unspecified part of neck, subsequent encounter -S1095XS Superficial foreign body of unspecified part of neck, sequela -S1096XA Insect bite of unspecified part of neck, initial encounter -S1096XD Insect bite of unspecified part of neck, subsequent encounter -S1096XS Insect bite of unspecified part of neck, sequela -S1097XA Other superficial bite of unspecified part of neck, initial encounter -S1097XD Other superficial bite of unspecified part of neck, subsequent encounter -S1097XS Other superficial bite of unspecified part of neck, sequela -S11011A Laceration without foreign body of larynx, initial encounter -S11011D Laceration without foreign body of larynx, subsequent encounter -S11011S Laceration without foreign body of larynx, sequela -S11012A Laceration with foreign body of larynx, initial encounter -S11012D Laceration with foreign body of larynx, subsequent encounter -S11012S Laceration with foreign body of larynx, sequela -S11013A Puncture wound without foreign body of larynx, initial encounter -S11013D Puncture wound without foreign body of larynx, subsequent encounter -S11013S Puncture wound without foreign body of larynx, sequela -S11014A Puncture wound with foreign body of larynx, initial encounter -S11014D Puncture wound with foreign body of larynx, subsequent encounter -S11014S Puncture wound with foreign body of larynx, sequela -S11015A Open bite of larynx, initial encounter -S11015D Open bite of larynx, subsequent encounter -S11015S Open bite of larynx, sequela -S11019A Unspecified open wound of larynx, initial encounter -S11019D Unspecified open wound of larynx, subsequent encounter -S11019S Unspecified open wound of larynx, sequela -S11021A Laceration without foreign body of trachea, initial encounter -S11021D Laceration without foreign body of trachea, subsequent encounter -S11021S Laceration without foreign body of trachea, sequela -S11022A Laceration with foreign body of trachea, initial encounter -S11022D Laceration with foreign body of trachea, subsequent encounter -S11022S Laceration with foreign body of trachea, sequela -S11023A Puncture wound without foreign body of trachea, initial encounter -S11023D Puncture wound without foreign body of trachea, subsequent encounter -S11023S Puncture wound without foreign body of trachea, sequela -S11024A Puncture wound with foreign body of trachea, initial encounter -S11024D Puncture wound with foreign body of trachea, subsequent encounter -S11024S Puncture wound with foreign body of trachea, sequela -S11025A Open bite of trachea, initial encounter -S11025D Open bite of trachea, subsequent encounter -S11025S Open bite of trachea, sequela -S11029A Unspecified open wound of trachea, initial encounter -S11029D Unspecified open wound of trachea, subsequent encounter -S11029S Unspecified open wound of trachea, sequela -S11031A Laceration without foreign body of vocal cord, initial encounter -S11031D Laceration without foreign body of vocal cord, subsequent encounter -S11031S Laceration without foreign body of vocal cord, sequela -S11032A Laceration with foreign body of vocal cord, initial encounter -S11032D Laceration with foreign body of vocal cord, subsequent encounter -S11032S Laceration with foreign body of vocal cord, sequela -S11033A Puncture wound without foreign body of vocal cord, initial encounter -S11033D Puncture wound without foreign body of vocal cord, subsequent encounter -S11033S Puncture wound without foreign body of vocal cord, sequela -S11034A Puncture wound with foreign body of vocal cord, initial encounter -S11034D Puncture wound with foreign body of vocal cord, subsequent encounter -S11034S Puncture wound with foreign body of vocal cord, sequela -S11035A Open bite of vocal cord, initial encounter -S11035D Open bite of vocal cord, subsequent encounter -S11035S Open bite of vocal cord, sequela -S11039A Unspecified open wound of vocal cord, initial encounter -S11039D Unspecified open wound of vocal cord, subsequent encounter -S11039S Unspecified open wound of vocal cord, sequela -S1110XA Unspecified open wound of thyroid gland, initial encounter -S1110XD Unspecified open wound of thyroid gland, subsequent encounter -S1110XS Unspecified open wound of thyroid gland, sequela -S1111XA Laceration without foreign body of thyroid gland, initial encounter -S1111XD Laceration without foreign body of thyroid gland, subsequent encounter -S1111XS Laceration without foreign body of thyroid gland, sequela -S1112XA Laceration with foreign body of thyroid gland, initial encounter -S1112XD Laceration with foreign body of thyroid gland, subsequent encounter -S1112XS Laceration with foreign body of thyroid gland, sequela -S1113XA Puncture wound without foreign body of thyroid gland, initial encounter -S1113XD Puncture wound without foreign body of thyroid gland, subsequent encounter -S1113XS Puncture wound without foreign body of thyroid gland, sequela -S1114XA Puncture wound with foreign body of thyroid gland, initial encounter -S1114XD Puncture wound with foreign body of thyroid gland, subsequent encounter -S1114XS Puncture wound with foreign body of thyroid gland, sequela -S1115XA Open bite of thyroid gland, initial encounter -S1115XD Open bite of thyroid gland, subsequent encounter -S1115XS Open bite of thyroid gland, sequela -S1120XA Unspecified open wound of pharynx and cervical esophagus, initial encounter -S1120XD Unspecified open wound of pharynx and cervical esophagus, subsequent encounter -S1120XS Unspecified open wound of pharynx and cervical esophagus, sequela -S1121XA Laceration without foreign body of pharynx and cervical esophagus, initial encounter -S1121XD Laceration without foreign body of pharynx and cervical esophagus, subsequent encounter -S1121XS Laceration without foreign body of pharynx and cervical esophagus, sequela -S1122XA Laceration with foreign body of pharynx and cervical esophagus, initial encounter -S1122XD Laceration with foreign body of pharynx and cervical esophagus, subsequent encounter -S1122XS Laceration with foreign body of pharynx and cervical esophagus, sequela -S1123XA Puncture wound without foreign body of pharynx and cervical esophagus, initial encounter -S1123XD Puncture wound without foreign body of pharynx and cervical esophagus, subsequent encounter -S1123XS Puncture wound without foreign body of pharynx and cervical esophagus, sequela -S1124XA Puncture wound with foreign body of pharynx and cervical esophagus, initial encounter -S1124XD Puncture wound with foreign body of pharynx and cervical esophagus, subsequent encounter -S1124XS Puncture wound with foreign body of pharynx and cervical esophagus, sequela -S1125XA Open bite of pharynx and cervical esophagus, initial encounter -S1125XD Open bite of pharynx and cervical esophagus, subsequent encounter -S1125XS Open bite of pharynx and cervical esophagus, sequela -S1180XA Unspecified open wound of other specified part of neck, initial encounter -S1180XD Unspecified open wound of other specified part of neck, subsequent encounter -S1180XS Unspecified open wound of other specified part of neck, sequela -S1181XA Laceration without foreign body of other specified part of neck, initial encounter -S1181XD Laceration without foreign body of other specified part of neck, subsequent encounter -S1181XS Laceration without foreign body of other specified part of neck, sequela -S1182XA Laceration with foreign body of other specified part of neck, initial encounter -S1182XD Laceration with foreign body of other specified part of neck, subsequent encounter -S1182XS Laceration with foreign body of other specified part of neck, sequela -S1183XA Puncture wound without foreign body of other specified part of neck, initial encounter -S1183XD Puncture wound without foreign body of other specified part of neck, subsequent encounter -S1183XS Puncture wound without foreign body of other specified part of neck, sequela -S1184XA Puncture wound with foreign body of other specified part of neck, initial encounter -S1184XD Puncture wound with foreign body of other specified part of neck, subsequent encounter -S1184XS Puncture wound with foreign body of other specified part of neck, sequela -S1185XA Open bite of other specified part of neck, initial encounter -S1185XD Open bite of other specified part of neck, subsequent encounter -S1185XS Open bite of other specified part of neck, sequela -S1189XA Other open wound of other specified part of neck, initial encounter -S1189XD Other open wound of other specified part of neck, subsequent encounter -S1189XS Other open wound of other specified part of neck, sequela -S1190XA Unspecified open wound of unspecified part of neck, initial encounter -S1190XD Unspecified open wound of unspecified part of neck, subsequent encounter -S1190XS Unspecified open wound of unspecified part of neck, sequela -S1191XA Laceration without foreign body of unspecified part of neck, initial encounter -S1191XD Laceration without foreign body of unspecified part of neck, subsequent encounter -S1191XS Laceration without foreign body of unspecified part of neck, sequela -S1192XA Laceration with foreign body of unspecified part of neck, initial encounter -S1192XD Laceration with foreign body of unspecified part of neck, subsequent encounter -S1192XS Laceration with foreign body of unspecified part of neck, sequela -S1193XA Puncture wound without foreign body of unspecified part of neck, initial encounter -S1193XD Puncture wound without foreign body of unspecified part of neck, subsequent encounter -S1193XS Puncture wound without foreign body of unspecified part of neck, sequela -S1194XA Puncture wound with foreign body of unspecified part of neck, initial encounter -S1194XD Puncture wound with foreign body of unspecified part of neck, subsequent encounter -S1194XS Puncture wound with foreign body of unspecified part of neck, sequela -S1195XA Open bite of unspecified part of neck, initial encounter -S1195XD Open bite of unspecified part of neck, subsequent encounter -S1195XS Open bite of unspecified part of neck, sequela -S12000A Unspecified displaced fracture of first cervical vertebra, initial encounter for closed fracture -S12000B Unspecified displaced fracture of first cervical vertebra, initial encounter for open fracture -S12000D Unspecified displaced fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12000G Unspecified displaced fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12000K Unspecified displaced fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12000S Unspecified displaced fracture of first cervical vertebra, sequela -S12001A Unspecified nondisplaced fracture of first cervical vertebra, initial encounter for closed fracture -S12001B Unspecified nondisplaced fracture of first cervical vertebra, initial encounter for open fracture -S12001D Unspecified nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12001G Unspecified nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12001K Unspecified nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12001S Unspecified nondisplaced fracture of first cervical vertebra, sequela -S1201XA Stable burst fracture of first cervical vertebra, initial encounter for closed fracture -S1201XB Stable burst fracture of first cervical vertebra, initial encounter for open fracture -S1201XD Stable burst fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S1201XG Stable burst fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S1201XK Stable burst fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S1201XS Stable burst fracture of first cervical vertebra, sequela -S1202XA Unstable burst fracture of first cervical vertebra, initial encounter for closed fracture -S1202XB Unstable burst fracture of first cervical vertebra, initial encounter for open fracture -S1202XD Unstable burst fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S1202XG Unstable burst fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S1202XK Unstable burst fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S1202XS Unstable burst fracture of first cervical vertebra, sequela -S12030A Displaced posterior arch fracture of first cervical vertebra, initial encounter for closed fracture -S12030B Displaced posterior arch fracture of first cervical vertebra, initial encounter for open fracture -S12030D Displaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12030G Displaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12030K Displaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12030S Displaced posterior arch fracture of first cervical vertebra, sequela -S12031A Nondisplaced posterior arch fracture of first cervical vertebra, initial encounter for closed fracture -S12031B Nondisplaced posterior arch fracture of first cervical vertebra, initial encounter for open fracture -S12031D Nondisplaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12031G Nondisplaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12031K Nondisplaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12031S Nondisplaced posterior arch fracture of first cervical vertebra, sequela -S12040A Displaced lateral mass fracture of first cervical vertebra, initial encounter for closed fracture -S12040B Displaced lateral mass fracture of first cervical vertebra, initial encounter for open fracture -S12040D Displaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12040G Displaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12040K Displaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12040S Displaced lateral mass fracture of first cervical vertebra, sequela -S12041A Nondisplaced lateral mass fracture of first cervical vertebra, initial encounter for closed fracture -S12041B Nondisplaced lateral mass fracture of first cervical vertebra, initial encounter for open fracture -S12041D Nondisplaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12041G Nondisplaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12041K Nondisplaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12041S Nondisplaced lateral mass fracture of first cervical vertebra, sequela -S12090A Other displaced fracture of first cervical vertebra, initial encounter for closed fracture -S12090B Other displaced fracture of first cervical vertebra, initial encounter for open fracture -S12090D Other displaced fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12090G Other displaced fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12090K Other displaced fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12090S Other displaced fracture of first cervical vertebra, sequela -S12091A Other nondisplaced fracture of first cervical vertebra, initial encounter for closed fracture -S12091B Other nondisplaced fracture of first cervical vertebra, initial encounter for open fracture -S12091D Other nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12091G Other nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12091K Other nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12091S Other nondisplaced fracture of first cervical vertebra, sequela -S12100A Unspecified displaced fracture of second cervical vertebra, initial encounter for closed fracture -S12100B Unspecified displaced fracture of second cervical vertebra, initial encounter for open fracture -S12100D Unspecified displaced fracture of second cervical vertebra, subsequent encounter for fracture with routine healing -S12100G Unspecified displaced fracture of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12100K Unspecified displaced fracture of second cervical vertebra, subsequent encounter for fracture with nonunion -S12100S Unspecified displaced fracture of second cervical vertebra, sequela -S12101A Unspecified nondisplaced fracture of second cervical vertebra, initial encounter for closed fracture -S12101B Unspecified nondisplaced fracture of second cervical vertebra, initial encounter for open fracture -S12101D Unspecified nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with routine healing -S12101G Unspecified nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12101K Unspecified nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with nonunion -S12101S Unspecified nondisplaced fracture of second cervical vertebra, sequela -S12110A Anterior displaced Type II dens fracture, initial encounter for closed fracture -S12110B Anterior displaced Type II dens fracture, initial encounter for open fracture -S12110D Anterior displaced Type II dens fracture, subsequent encounter for fracture with routine healing -S12110G Anterior displaced Type II dens fracture, subsequent encounter for fracture with delayed healing -S12110K Anterior displaced Type II dens fracture, subsequent encounter for fracture with nonunion -S12110S Anterior displaced Type II dens fracture, sequela -S12111A Posterior displaced Type II dens fracture, initial encounter for closed fracture -S12111B Posterior displaced Type II dens fracture, initial encounter for open fracture -S12111D Posterior displaced Type II dens fracture, subsequent encounter for fracture with routine healing -S12111G Posterior displaced Type II dens fracture, subsequent encounter for fracture with delayed healing -S12111K Posterior displaced Type II dens fracture, subsequent encounter for fracture with nonunion -S12111S Posterior displaced Type II dens fracture, sequela -S12112A Nondisplaced Type II dens fracture, initial encounter for closed fracture -S12112B Nondisplaced Type II dens fracture, initial encounter for open fracture -S12112D Nondisplaced Type II dens fracture, subsequent encounter for fracture with routine healing -S12112G Nondisplaced Type II dens fracture, subsequent encounter for fracture with delayed healing -S12112K Nondisplaced Type II dens fracture, subsequent encounter for fracture with nonunion -S12112S Nondisplaced Type II dens fracture, sequela -S12120A Other displaced dens fracture, initial encounter for closed fracture -S12120B Other displaced dens fracture, initial encounter for open fracture -S12120D Other displaced dens fracture, subsequent encounter for fracture with routine healing -S12120G Other displaced dens fracture, subsequent encounter for fracture with delayed healing -S12120K Other displaced dens fracture, subsequent encounter for fracture with nonunion -S12120S Other displaced dens fracture, sequela -S12121A Other nondisplaced dens fracture, initial encounter for closed fracture -S12121B Other nondisplaced dens fracture, initial encounter for open fracture -S12121D Other nondisplaced dens fracture, subsequent encounter for fracture with routine healing -S12121G Other nondisplaced dens fracture, subsequent encounter for fracture with delayed healing -S12121K Other nondisplaced dens fracture, subsequent encounter for fracture with nonunion -S12121S Other nondisplaced dens fracture, sequela -S12130A Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, initial encounter for closed fracture -S12130B Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, initial encounter for open fracture -S12130D Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with routine healing -S12130G Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12130K Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with nonunion -S12130S Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, sequela -S12131A Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, initial encounter for closed fracture -S12131B Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, initial encounter for open fracture -S12131D Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with routine healing -S12131G Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12131K Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with nonunion -S12131S Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, sequela -S1214XA Type III traumatic spondylolisthesis of second cervical vertebra, initial encounter for closed fracture -S1214XB Type III traumatic spondylolisthesis of second cervical vertebra, initial encounter for open fracture -S1214XD Type III traumatic spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with routine healing -S1214XG Type III traumatic spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with delayed healing -S1214XK Type III traumatic spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with nonunion -S1214XS Type III traumatic spondylolisthesis of second cervical vertebra, sequela -S12150A Other traumatic displaced spondylolisthesis of second cervical vertebra, initial encounter for closed fracture -S12150B Other traumatic displaced spondylolisthesis of second cervical vertebra, initial encounter for open fracture -S12150D Other traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with routine healing -S12150G Other traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12150K Other traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with nonunion -S12150S Other traumatic displaced spondylolisthesis of second cervical vertebra, sequela -S12151A Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, initial encounter for closed fracture -S12151B Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, initial encounter for open fracture -S12151D Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with routine healing -S12151G Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12151K Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with nonunion -S12151S Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, sequela -S12190A Other displaced fracture of second cervical vertebra, initial encounter for closed fracture -S12190B Other displaced fracture of second cervical vertebra, initial encounter for open fracture -S12190D Other displaced fracture of second cervical vertebra, subsequent encounter for fracture with routine healing -S12190G Other displaced fracture of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12190K Other displaced fracture of second cervical vertebra, subsequent encounter for fracture with nonunion -S12190S Other displaced fracture of second cervical vertebra, sequela -S12191A Other nondisplaced fracture of second cervical vertebra, initial encounter for closed fracture -S12191B Other nondisplaced fracture of second cervical vertebra, initial encounter for open fracture -S12191D Other nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with routine healing -S12191G Other nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12191K Other nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with nonunion -S12191S Other nondisplaced fracture of second cervical vertebra, sequela -S12200A Unspecified displaced fracture of third cervical vertebra, initial encounter for closed fracture -S12200B Unspecified displaced fracture of third cervical vertebra, initial encounter for open fracture -S12200D Unspecified displaced fracture of third cervical vertebra, subsequent encounter for fracture with routine healing -S12200G Unspecified displaced fracture of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12200K Unspecified displaced fracture of third cervical vertebra, subsequent encounter for fracture with nonunion -S12200S Unspecified displaced fracture of third cervical vertebra, sequela -S12201A Unspecified nondisplaced fracture of third cervical vertebra, initial encounter for closed fracture -S12201B Unspecified nondisplaced fracture of third cervical vertebra, initial encounter for open fracture -S12201D Unspecified nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with routine healing -S12201G Unspecified nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12201K Unspecified nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with nonunion -S12201S Unspecified nondisplaced fracture of third cervical vertebra, sequela -S12230A Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, initial encounter for closed fracture -S12230B Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, initial encounter for open fracture -S12230D Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with routine healing -S12230G Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12230K Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with nonunion -S12230S Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, sequela -S12231A Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, initial encounter for closed fracture -S12231B Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, initial encounter for open fracture -S12231D Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with routine healing -S12231G Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12231K Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with nonunion -S12231S Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, sequela -S1224XA Type III traumatic spondylolisthesis of third cervical vertebra, initial encounter for closed fracture -S1224XB Type III traumatic spondylolisthesis of third cervical vertebra, initial encounter for open fracture -S1224XD Type III traumatic spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with routine healing -S1224XG Type III traumatic spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with delayed healing -S1224XK Type III traumatic spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with nonunion -S1224XS Type III traumatic spondylolisthesis of third cervical vertebra, sequela -S12250A Other traumatic displaced spondylolisthesis of third cervical vertebra, initial encounter for closed fracture -S12250B Other traumatic displaced spondylolisthesis of third cervical vertebra, initial encounter for open fracture -S12250D Other traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with routine healing -S12250G Other traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12250K Other traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with nonunion -S12250S Other traumatic displaced spondylolisthesis of third cervical vertebra, sequela -S12251A Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, initial encounter for closed fracture -S12251B Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, initial encounter for open fracture -S12251D Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with routine healing -S12251G Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12251K Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with nonunion -S12251S Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, sequela -S12290A Other displaced fracture of third cervical vertebra, initial encounter for closed fracture -S12290B Other displaced fracture of third cervical vertebra, initial encounter for open fracture -S12290D Other displaced fracture of third cervical vertebra, subsequent encounter for fracture with routine healing -S12290G Other displaced fracture of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12290K Other displaced fracture of third cervical vertebra, subsequent encounter for fracture with nonunion -S12290S Other displaced fracture of third cervical vertebra, sequela -S12291A Other nondisplaced fracture of third cervical vertebra, initial encounter for closed fracture -S12291B Other nondisplaced fracture of third cervical vertebra, initial encounter for open fracture -S12291D Other nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with routine healing -S12291G Other nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12291K Other nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with nonunion -S12291S Other nondisplaced fracture of third cervical vertebra, sequela -S12300A Unspecified displaced fracture of fourth cervical vertebra, initial encounter for closed fracture -S12300B Unspecified displaced fracture of fourth cervical vertebra, initial encounter for open fracture -S12300D Unspecified displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12300G Unspecified displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12300K Unspecified displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12300S Unspecified displaced fracture of fourth cervical vertebra, sequela -S12301A Unspecified nondisplaced fracture of fourth cervical vertebra, initial encounter for closed fracture -S12301B Unspecified nondisplaced fracture of fourth cervical vertebra, initial encounter for open fracture -S12301D Unspecified nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12301G Unspecified nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12301K Unspecified nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12301S Unspecified nondisplaced fracture of fourth cervical vertebra, sequela -S12330A Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, initial encounter for closed fracture -S12330B Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, initial encounter for open fracture -S12330D Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12330G Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12330K Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12330S Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, sequela -S12331A Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, initial encounter for closed fracture -S12331B Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, initial encounter for open fracture -S12331D Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12331G Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12331K Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12331S Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, sequela -S1234XA Type III traumatic spondylolisthesis of fourth cervical vertebra, initial encounter for closed fracture -S1234XB Type III traumatic spondylolisthesis of fourth cervical vertebra, initial encounter for open fracture -S1234XD Type III traumatic spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S1234XG Type III traumatic spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S1234XK Type III traumatic spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S1234XS Type III traumatic spondylolisthesis of fourth cervical vertebra, sequela -S12350A Other traumatic displaced spondylolisthesis of fourth cervical vertebra, initial encounter for closed fracture -S12350B Other traumatic displaced spondylolisthesis of fourth cervical vertebra, initial encounter for open fracture -S12350D Other traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12350G Other traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12350K Other traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12350S Other traumatic displaced spondylolisthesis of fourth cervical vertebra, sequela -S12351A Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, initial encounter for closed fracture -S12351B Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, initial encounter for open fracture -S12351D Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12351G Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12351K Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12351S Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, sequela -S12390A Other displaced fracture of fourth cervical vertebra, initial encounter for closed fracture -S12390B Other displaced fracture of fourth cervical vertebra, initial encounter for open fracture -S12390D Other displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12390G Other displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12390K Other displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12390S Other displaced fracture of fourth cervical vertebra, sequela -S12391A Other nondisplaced fracture of fourth cervical vertebra, initial encounter for closed fracture -S12391B Other nondisplaced fracture of fourth cervical vertebra, initial encounter for open fracture -S12391D Other nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12391G Other nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12391K Other nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12391S Other nondisplaced fracture of fourth cervical vertebra, sequela -S12400A Unspecified displaced fracture of fifth cervical vertebra, initial encounter for closed fracture -S12400B Unspecified displaced fracture of fifth cervical vertebra, initial encounter for open fracture -S12400D Unspecified displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12400G Unspecified displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12400K Unspecified displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12400S Unspecified displaced fracture of fifth cervical vertebra, sequela -S12401A Unspecified nondisplaced fracture of fifth cervical vertebra, initial encounter for closed fracture -S12401B Unspecified nondisplaced fracture of fifth cervical vertebra, initial encounter for open fracture -S12401D Unspecified nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12401G Unspecified nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12401K Unspecified nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12401S Unspecified nondisplaced fracture of fifth cervical vertebra, sequela -S12430A Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, initial encounter for closed fracture -S12430B Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, initial encounter for open fracture -S12430D Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12430G Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12430K Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12430S Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, sequela -S12431A Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, initial encounter for closed fracture -S12431B Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, initial encounter for open fracture -S12431D Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12431G Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12431K Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12431S Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, sequela -S1244XA Type III traumatic spondylolisthesis of fifth cervical vertebra, initial encounter for closed fracture -S1244XB Type III traumatic spondylolisthesis of fifth cervical vertebra, initial encounter for open fracture -S1244XD Type III traumatic spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S1244XG Type III traumatic spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S1244XK Type III traumatic spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S1244XS Type III traumatic spondylolisthesis of fifth cervical vertebra, sequela -S12450A Other traumatic displaced spondylolisthesis of fifth cervical vertebra, initial encounter for closed fracture -S12450B Other traumatic displaced spondylolisthesis of fifth cervical vertebra, initial encounter for open fracture -S12450D Other traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12450G Other traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12450K Other traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12450S Other traumatic displaced spondylolisthesis of fifth cervical vertebra, sequela -S12451A Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, initial encounter for closed fracture -S12451B Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, initial encounter for open fracture -S12451D Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12451G Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12451K Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12451S Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, sequela -S12490A Other displaced fracture of fifth cervical vertebra, initial encounter for closed fracture -S12490B Other displaced fracture of fifth cervical vertebra, initial encounter for open fracture -S12490D Other displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12490G Other displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12490K Other displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12490S Other displaced fracture of fifth cervical vertebra, sequela -S12491A Other nondisplaced fracture of fifth cervical vertebra, initial encounter for closed fracture -S12491B Other nondisplaced fracture of fifth cervical vertebra, initial encounter for open fracture -S12491D Other nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12491G Other nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12491K Other nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12491S Other nondisplaced fracture of fifth cervical vertebra, sequela -S12500A Unspecified displaced fracture of sixth cervical vertebra, initial encounter for closed fracture -S12500B Unspecified displaced fracture of sixth cervical vertebra, initial encounter for open fracture -S12500D Unspecified displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12500G Unspecified displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12500K Unspecified displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12500S Unspecified displaced fracture of sixth cervical vertebra, sequela -S12501A Unspecified nondisplaced fracture of sixth cervical vertebra, initial encounter for closed fracture -S12501B Unspecified nondisplaced fracture of sixth cervical vertebra, initial encounter for open fracture -S12501D Unspecified nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12501G Unspecified nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12501K Unspecified nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12501S Unspecified nondisplaced fracture of sixth cervical vertebra, sequela -S12530A Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, initial encounter for closed fracture -S12530B Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, initial encounter for open fracture -S12530D Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12530G Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12530K Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12530S Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, sequela -S12531A Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, initial encounter for closed fracture -S12531B Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, initial encounter for open fracture -S12531D Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12531G Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12531K Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12531S Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, sequela -S1254XA Type III traumatic spondylolisthesis of sixth cervical vertebra, initial encounter for closed fracture -S1254XB Type III traumatic spondylolisthesis of sixth cervical vertebra, initial encounter for open fracture -S1254XD Type III traumatic spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S1254XG Type III traumatic spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S1254XK Type III traumatic spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S1254XS Type III traumatic spondylolisthesis of sixth cervical vertebra, sequela -S12550A Other traumatic displaced spondylolisthesis of sixth cervical vertebra, initial encounter for closed fracture -S12550B Other traumatic displaced spondylolisthesis of sixth cervical vertebra, initial encounter for open fracture -S12550D Other traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12550G Other traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12550K Other traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12550S Other traumatic displaced spondylolisthesis of sixth cervical vertebra, sequela -S12551A Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, initial encounter for closed fracture -S12551B Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, initial encounter for open fracture -S12551D Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12551G Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12551K Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12551S Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, sequela -S12590A Other displaced fracture of sixth cervical vertebra, initial encounter for closed fracture -S12590B Other displaced fracture of sixth cervical vertebra, initial encounter for open fracture -S12590D Other displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12590G Other displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12590K Other displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12590S Other displaced fracture of sixth cervical vertebra, sequela -S12591A Other nondisplaced fracture of sixth cervical vertebra, initial encounter for closed fracture -S12591B Other nondisplaced fracture of sixth cervical vertebra, initial encounter for open fracture -S12591D Other nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12591G Other nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12591K Other nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12591S Other nondisplaced fracture of sixth cervical vertebra, sequela -S12600A Unspecified displaced fracture of seventh cervical vertebra, initial encounter for closed fracture -S12600B Unspecified displaced fracture of seventh cervical vertebra, initial encounter for open fracture -S12600D Unspecified displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12600G Unspecified displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12600K Unspecified displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12600S Unspecified displaced fracture of seventh cervical vertebra, sequela -S12601A Unspecified nondisplaced fracture of seventh cervical vertebra, initial encounter for closed fracture -S12601B Unspecified nondisplaced fracture of seventh cervical vertebra, initial encounter for open fracture -S12601D Unspecified nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12601G Unspecified nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12601K Unspecified nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12601S Unspecified nondisplaced fracture of seventh cervical vertebra, sequela -S12630A Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, initial encounter for closed fracture -S12630B Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, initial encounter for open fracture -S12630D Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12630G Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12630K Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12630S Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, sequela -S12631A Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, initial encounter for closed fracture -S12631B Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, initial encounter for open fracture -S12631D Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12631G Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12631K Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12631S Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, sequela -S1264XA Type III traumatic spondylolisthesis of seventh cervical vertebra, initial encounter for closed fracture -S1264XB Type III traumatic spondylolisthesis of seventh cervical vertebra, initial encounter for open fracture -S1264XD Type III traumatic spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S1264XG Type III traumatic spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S1264XK Type III traumatic spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S1264XS Type III traumatic spondylolisthesis of seventh cervical vertebra, sequela -S12650A Other traumatic displaced spondylolisthesis of seventh cervical vertebra, initial encounter for closed fracture -S12650B Other traumatic displaced spondylolisthesis of seventh cervical vertebra, initial encounter for open fracture -S12650D Other traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12650G Other traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12650K Other traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12650S Other traumatic displaced spondylolisthesis of seventh cervical vertebra, sequela -S12651A Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, initial encounter for closed fracture -S12651B Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, initial encounter for open fracture -S12651D Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12651G Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12651K Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12651S Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, sequela -S12690A Other displaced fracture of seventh cervical vertebra, initial encounter for closed fracture -S12690B Other displaced fracture of seventh cervical vertebra, initial encounter for open fracture -S12690D Other displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12690G Other displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12690K Other displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12690S Other displaced fracture of seventh cervical vertebra, sequela -S12691A Other nondisplaced fracture of seventh cervical vertebra, initial encounter for closed fracture -S12691B Other nondisplaced fracture of seventh cervical vertebra, initial encounter for open fracture -S12691D Other nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12691G Other nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12691K Other nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12691S Other nondisplaced fracture of seventh cervical vertebra, sequela -S128XXA Fracture of other parts of neck, initial encounter -S128XXD Fracture of other parts of neck, subsequent encounter -S128XXS Fracture of other parts of neck, sequela -S129XXA Fracture of neck, unspecified, initial encounter -S129XXD Fracture of neck, unspecified, subsequent encounter -S129XXS Fracture of neck, unspecified, sequela -S130XXA Traumatic rupture of cervical intervertebral disc, initial encounter -S130XXD Traumatic rupture of cervical intervertebral disc, subsequent encounter -S130XXS Traumatic rupture of cervical intervertebral disc, sequela -S13100A Subluxation of unspecified cervical vertebrae, initial encounter -S13100D Subluxation of unspecified cervical vertebrae, subsequent encounter -S13100S Subluxation of unspecified cervical vertebrae, sequela -S13101A Dislocation of unspecified cervical vertebrae, initial encounter -S13101D Dislocation of unspecified cervical vertebrae, subsequent encounter -S13101S Dislocation of unspecified cervical vertebrae, sequela -S13110A Subluxation of C0/C1 cervical vertebrae, initial encounter -S13110D Subluxation of C0/C1 cervical vertebrae, subsequent encounter -S13110S Subluxation of C0/C1 cervical vertebrae, sequela -S13111A Dislocation of C0/C1 cervical vertebrae, initial encounter -S13111D Dislocation of C0/C1 cervical vertebrae, subsequent encounter -S13111S Dislocation of C0/C1 cervical vertebrae, sequela -S13120A Subluxation of C1/C2 cervical vertebrae, initial encounter -S13120D Subluxation of C1/C2 cervical vertebrae, subsequent encounter -S13120S Subluxation of C1/C2 cervical vertebrae, sequela -S13121A Dislocation of C1/C2 cervical vertebrae, initial encounter -S13121D Dislocation of C1/C2 cervical vertebrae, subsequent encounter -S13121S Dislocation of C1/C2 cervical vertebrae, sequela -S13130A Subluxation of C2/C3 cervical vertebrae, initial encounter -S13130D Subluxation of C2/C3 cervical vertebrae, subsequent encounter -S13130S Subluxation of C2/C3 cervical vertebrae, sequela -S13131A Dislocation of C2/C3 cervical vertebrae, initial encounter -S13131D Dislocation of C2/C3 cervical vertebrae, subsequent encounter -S13131S Dislocation of C2/C3 cervical vertebrae, sequela -S13140A Subluxation of C3/C4 cervical vertebrae, initial encounter -S13140D Subluxation of C3/C4 cervical vertebrae, subsequent encounter -S13140S Subluxation of C3/C4 cervical vertebrae, sequela -S13141A Dislocation of C3/C4 cervical vertebrae, initial encounter -S13141D Dislocation of C3/C4 cervical vertebrae, subsequent encounter -S13141S Dislocation of C3/C4 cervical vertebrae, sequela -S13150A Subluxation of C4/C5 cervical vertebrae, initial encounter -S13150D Subluxation of C4/C5 cervical vertebrae, subsequent encounter -S13150S Subluxation of C4/C5 cervical vertebrae, sequela -S13151A Dislocation of C4/C5 cervical vertebrae, initial encounter -S13151D Dislocation of C4/C5 cervical vertebrae, subsequent encounter -S13151S Dislocation of C4/C5 cervical vertebrae, sequela -S13160A Subluxation of C5/C6 cervical vertebrae, initial encounter -S13160D Subluxation of C5/C6 cervical vertebrae, subsequent encounter -S13160S Subluxation of C5/C6 cervical vertebrae, sequela -S13161A Dislocation of C5/C6 cervical vertebrae, initial encounter -S13161D Dislocation of C5/C6 cervical vertebrae, subsequent encounter -S13161S Dislocation of C5/C6 cervical vertebrae, sequela -S13170A Subluxation of C6/C7 cervical vertebrae, initial encounter -S13170D Subluxation of C6/C7 cervical vertebrae, subsequent encounter -S13170S Subluxation of C6/C7 cervical vertebrae, sequela -S13171A Dislocation of C6/C7 cervical vertebrae, initial encounter -S13171D Dislocation of C6/C7 cervical vertebrae, subsequent encounter -S13171S Dislocation of C6/C7 cervical vertebrae, sequela -S13180A Subluxation of C7/T1 cervical vertebrae, initial encounter -S13180D Subluxation of C7/T1 cervical vertebrae, subsequent encounter -S13180S Subluxation of C7/T1 cervical vertebrae, sequela -S13181A Dislocation of C7/T1 cervical vertebrae, initial encounter -S13181D Dislocation of C7/T1 cervical vertebrae, subsequent encounter -S13181S Dislocation of C7/T1 cervical vertebrae, sequela -S1320XA Dislocation of unspecified parts of neck, initial encounter -S1320XD Dislocation of unspecified parts of neck, subsequent encounter -S1320XS Dislocation of unspecified parts of neck, sequela -S1329XA Dislocation of other parts of neck, initial encounter -S1329XD Dislocation of other parts of neck, subsequent encounter -S1329XS Dislocation of other parts of neck, sequela -S134XXA Sprain of ligaments of cervical spine, initial encounter -S134XXD Sprain of ligaments of cervical spine, subsequent encounter -S134XXS Sprain of ligaments of cervical spine, sequela -S135XXA Sprain of thyroid region, initial encounter -S135XXD Sprain of thyroid region, subsequent encounter -S135XXS Sprain of thyroid region, sequela -S138XXA Sprain of joints and ligaments of other parts of neck, initial encounter -S138XXD Sprain of joints and ligaments of other parts of neck, subsequent encounter -S138XXS Sprain of joints and ligaments of other parts of neck, sequela -S139XXA Sprain of joints and ligaments of unspecified parts of neck, initial encounter -S139XXD Sprain of joints and ligaments of unspecified parts of neck, subsequent encounter -S139XXS Sprain of joints and ligaments of unspecified parts of neck, sequela -S140XXA Concussion and edema of cervical spinal cord, initial encounter -S140XXD Concussion and edema of cervical spinal cord, subsequent encounter -S140XXS Concussion and edema of cervical spinal cord, sequela -S14101A Unspecified injury at C1 level of cervical spinal cord, initial encounter -S14101D Unspecified injury at C1 level of cervical spinal cord, subsequent encounter -S14101S Unspecified injury at C1 level of cervical spinal cord, sequela -S14102A Unspecified injury at C2 level of cervical spinal cord, initial encounter -S14102D Unspecified injury at C2 level of cervical spinal cord, subsequent encounter -S14102S Unspecified injury at C2 level of cervical spinal cord, sequela -S14103A Unspecified injury at C3 level of cervical spinal cord, initial encounter -S14103D Unspecified injury at C3 level of cervical spinal cord, subsequent encounter -S14103S Unspecified injury at C3 level of cervical spinal cord, sequela -S14104A Unspecified injury at C4 level of cervical spinal cord, initial encounter -S14104D Unspecified injury at C4 level of cervical spinal cord, subsequent encounter -S14104S Unspecified injury at C4 level of cervical spinal cord, sequela -S14105A Unspecified injury at C5 level of cervical spinal cord, initial encounter -S14105D Unspecified injury at C5 level of cervical spinal cord, subsequent encounter -S14105S Unspecified injury at C5 level of cervical spinal cord, sequela -S14106A Unspecified injury at C6 level of cervical spinal cord, initial encounter -S14106D Unspecified injury at C6 level of cervical spinal cord, subsequent encounter -S14106S Unspecified injury at C6 level of cervical spinal cord, sequela -S14107A Unspecified injury at C7 level of cervical spinal cord, initial encounter -S14107D Unspecified injury at C7 level of cervical spinal cord, subsequent encounter -S14107S Unspecified injury at C7 level of cervical spinal cord, sequela -S14108A Unspecified injury at C8 level of cervical spinal cord, initial encounter -S14108D Unspecified injury at C8 level of cervical spinal cord, subsequent encounter -S14108S Unspecified injury at C8 level of cervical spinal cord, sequela -S14109A Unspecified injury at unspecified level of cervical spinal cord, initial encounter -S14109D Unspecified injury at unspecified level of cervical spinal cord, subsequent encounter -S14109S Unspecified injury at unspecified level of cervical spinal cord, sequela -S14111A Complete lesion at C1 level of cervical spinal cord, initial encounter -S14111D Complete lesion at C1 level of cervical spinal cord, subsequent encounter -S14111S Complete lesion at C1 level of cervical spinal cord, sequela -S14112A Complete lesion at C2 level of cervical spinal cord, initial encounter -S14112D Complete lesion at C2 level of cervical spinal cord, subsequent encounter -S14112S Complete lesion at C2 level of cervical spinal cord, sequela -S14113A Complete lesion at C3 level of cervical spinal cord, initial encounter -S14113D Complete lesion at C3 level of cervical spinal cord, subsequent encounter -S14113S Complete lesion at C3 level of cervical spinal cord, sequela -S14114A Complete lesion at C4 level of cervical spinal cord, initial encounter -S14114D Complete lesion at C4 level of cervical spinal cord, subsequent encounter -S14114S Complete lesion at C4 level of cervical spinal cord, sequela -S14115A Complete lesion at C5 level of cervical spinal cord, initial encounter -S14115D Complete lesion at C5 level of cervical spinal cord, subsequent encounter -S14115S Complete lesion at C5 level of cervical spinal cord, sequela -S14116A Complete lesion at C6 level of cervical spinal cord, initial encounter -S14116D Complete lesion at C6 level of cervical spinal cord, subsequent encounter -S14116S Complete lesion at C6 level of cervical spinal cord, sequela -S14117A Complete lesion at C7 level of cervical spinal cord, initial encounter -S14117D Complete lesion at C7 level of cervical spinal cord, subsequent encounter -S14117S Complete lesion at C7 level of cervical spinal cord, sequela -S14118A Complete lesion at C8 level of cervical spinal cord, initial encounter -S14118D Complete lesion at C8 level of cervical spinal cord, subsequent encounter -S14118S Complete lesion at C8 level of cervical spinal cord, sequela -S14119A Complete lesion at unspecified level of cervical spinal cord, initial encounter -S14119D Complete lesion at unspecified level of cervical spinal cord, subsequent encounter -S14119S Complete lesion at unspecified level of cervical spinal cord, sequela -S14121A Central cord syndrome at C1 level of cervical spinal cord, initial encounter -S14121D Central cord syndrome at C1 level of cervical spinal cord, subsequent encounter -S14121S Central cord syndrome at C1 level of cervical spinal cord, sequela -S14122A Central cord syndrome at C2 level of cervical spinal cord, initial encounter -S14122D Central cord syndrome at C2 level of cervical spinal cord, subsequent encounter -S14122S Central cord syndrome at C2 level of cervical spinal cord, sequela -S14123A Central cord syndrome at C3 level of cervical spinal cord, initial encounter -S14123D Central cord syndrome at C3 level of cervical spinal cord, subsequent encounter -S14123S Central cord syndrome at C3 level of cervical spinal cord, sequela -S14124A Central cord syndrome at C4 level of cervical spinal cord, initial encounter -S14124D Central cord syndrome at C4 level of cervical spinal cord, subsequent encounter -S14124S Central cord syndrome at C4 level of cervical spinal cord, sequela -S14125A Central cord syndrome at C5 level of cervical spinal cord, initial encounter -S14125D Central cord syndrome at C5 level of cervical spinal cord, subsequent encounter -S14125S Central cord syndrome at C5 level of cervical spinal cord, sequela -S14126A Central cord syndrome at C6 level of cervical spinal cord, initial encounter -S14126D Central cord syndrome at C6 level of cervical spinal cord, subsequent encounter -S14126S Central cord syndrome at C6 level of cervical spinal cord, sequela -S14127A Central cord syndrome at C7 level of cervical spinal cord, initial encounter -S14127D Central cord syndrome at C7 level of cervical spinal cord, subsequent encounter -S14127S Central cord syndrome at C7 level of cervical spinal cord, sequela -S14128A Central cord syndrome at C8 level of cervical spinal cord, initial encounter -S14128D Central cord syndrome at C8 level of cervical spinal cord, subsequent encounter -S14128S Central cord syndrome at C8 level of cervical spinal cord, sequela -S14129A Central cord syndrome at unspecified level of cervical spinal cord, initial encounter -S14129D Central cord syndrome at unspecified level of cervical spinal cord, subsequent encounter -S14129S Central cord syndrome at unspecified level of cervical spinal cord, sequela -S14131A Anterior cord syndrome at C1 level of cervical spinal cord, initial encounter -S14131D Anterior cord syndrome at C1 level of cervical spinal cord, subsequent encounter -S14131S Anterior cord syndrome at C1 level of cervical spinal cord, sequela -S14132A Anterior cord syndrome at C2 level of cervical spinal cord, initial encounter -S14132D Anterior cord syndrome at C2 level of cervical spinal cord, subsequent encounter -S14132S Anterior cord syndrome at C2 level of cervical spinal cord, sequela -S14133A Anterior cord syndrome at C3 level of cervical spinal cord, initial encounter -S14133D Anterior cord syndrome at C3 level of cervical spinal cord, subsequent encounter -S14133S Anterior cord syndrome at C3 level of cervical spinal cord, sequela -S14134A Anterior cord syndrome at C4 level of cervical spinal cord, initial encounter -S14134D Anterior cord syndrome at C4 level of cervical spinal cord, subsequent encounter -S14134S Anterior cord syndrome at C4 level of cervical spinal cord, sequela -S14135A Anterior cord syndrome at C5 level of cervical spinal cord, initial encounter -S14135D Anterior cord syndrome at C5 level of cervical spinal cord, subsequent encounter -S14135S Anterior cord syndrome at C5 level of cervical spinal cord, sequela -S14136A Anterior cord syndrome at C6 level of cervical spinal cord, initial encounter -S14136D Anterior cord syndrome at C6 level of cervical spinal cord, subsequent encounter -S14136S Anterior cord syndrome at C6 level of cervical spinal cord, sequela -S14137A Anterior cord syndrome at C7 level of cervical spinal cord, initial encounter -S14137D Anterior cord syndrome at C7 level of cervical spinal cord, subsequent encounter -S14137S Anterior cord syndrome at C7 level of cervical spinal cord, sequela -S14138A Anterior cord syndrome at C8 level of cervical spinal cord, initial encounter -S14138D Anterior cord syndrome at C8 level of cervical spinal cord, subsequent encounter -S14138S Anterior cord syndrome at C8 level of cervical spinal cord, sequela -S14139A Anterior cord syndrome at unspecified level of cervical spinal cord, initial encounter -S14139D Anterior cord syndrome at unspecified level of cervical spinal cord, subsequent encounter -S14139S Anterior cord syndrome at unspecified level of cervical spinal cord, sequela -S14141A Brown-Sequard syndrome at C1 level of cervical spinal cord, initial encounter -S14141D Brown-Sequard syndrome at C1 level of cervical spinal cord, subsequent encounter -S14141S Brown-Sequard syndrome at C1 level of cervical spinal cord, sequela -S14142A Brown-Sequard syndrome at C2 level of cervical spinal cord, initial encounter -S14142D Brown-Sequard syndrome at C2 level of cervical spinal cord, subsequent encounter -S14142S Brown-Sequard syndrome at C2 level of cervical spinal cord, sequela -S14143A Brown-Sequard syndrome at C3 level of cervical spinal cord, initial encounter -S14143D Brown-Sequard syndrome at C3 level of cervical spinal cord, subsequent encounter -S14143S Brown-Sequard syndrome at C3 level of cervical spinal cord, sequela -S14144A Brown-Sequard syndrome at C4 level of cervical spinal cord, initial encounter -S14144D Brown-Sequard syndrome at C4 level of cervical spinal cord, subsequent encounter -S14144S Brown-Sequard syndrome at C4 level of cervical spinal cord, sequela -S14145A Brown-Sequard syndrome at C5 level of cervical spinal cord, initial encounter -S14145D Brown-Sequard syndrome at C5 level of cervical spinal cord, subsequent encounter -S14145S Brown-Sequard syndrome at C5 level of cervical spinal cord, sequela -S14146A Brown-Sequard syndrome at C6 level of cervical spinal cord, initial encounter -S14146D Brown-Sequard syndrome at C6 level of cervical spinal cord, subsequent encounter -S14146S Brown-Sequard syndrome at C6 level of cervical spinal cord, sequela -S14147A Brown-Sequard syndrome at C7 level of cervical spinal cord, initial encounter -S14147D Brown-Sequard syndrome at C7 level of cervical spinal cord, subsequent encounter -S14147S Brown-Sequard syndrome at C7 level of cervical spinal cord, sequela -S14148A Brown-Sequard syndrome at C8 level of cervical spinal cord, initial encounter -S14148D Brown-Sequard syndrome at C8 level of cervical spinal cord, subsequent encounter -S14148S Brown-Sequard syndrome at C8 level of cervical spinal cord, sequela -S14149A Brown-Sequard syndrome at unspecified level of cervical spinal cord, initial encounter -S14149D Brown-Sequard syndrome at unspecified level of cervical spinal cord, subsequent encounter -S14149S Brown-Sequard syndrome at unspecified level of cervical spinal cord, sequela -S14151A Other incomplete lesion at C1 level of cervical spinal cord, initial encounter -S14151D Other incomplete lesion at C1 level of cervical spinal cord, subsequent encounter -S14151S Other incomplete lesion at C1 level of cervical spinal cord, sequela -S14152A Other incomplete lesion at C2 level of cervical spinal cord, initial encounter -S14152D Other incomplete lesion at C2 level of cervical spinal cord, subsequent encounter -S14152S Other incomplete lesion at C2 level of cervical spinal cord, sequela -S14153A Other incomplete lesion at C3 level of cervical spinal cord, initial encounter -S14153D Other incomplete lesion at C3 level of cervical spinal cord, subsequent encounter -S14153S Other incomplete lesion at C3 level of cervical spinal cord, sequela -S14154A Other incomplete lesion at C4 level of cervical spinal cord, initial encounter -S14154D Other incomplete lesion at C4 level of cervical spinal cord, subsequent encounter -S14154S Other incomplete lesion at C4 level of cervical spinal cord, sequela -S14155A Other incomplete lesion at C5 level of cervical spinal cord, initial encounter -S14155D Other incomplete lesion at C5 level of cervical spinal cord, subsequent encounter -S14155S Other incomplete lesion at C5 level of cervical spinal cord, sequela -S14156A Other incomplete lesion at C6 level of cervical spinal cord, initial encounter -S14156D Other incomplete lesion at C6 level of cervical spinal cord, subsequent encounter -S14156S Other incomplete lesion at C6 level of cervical spinal cord, sequela -S14157A Other incomplete lesion at C7 level of cervical spinal cord, initial encounter -S14157D Other incomplete lesion at C7 level of cervical spinal cord, subsequent encounter -S14157S Other incomplete lesion at C7 level of cervical spinal cord, sequela -S14158A Other incomplete lesion at C8 level of cervical spinal cord, initial encounter -S14158D Other incomplete lesion at C8 level of cervical spinal cord, subsequent encounter -S14158S Other incomplete lesion at C8 level of cervical spinal cord, sequela -S14159A Other incomplete lesion at unspecified level of cervical spinal cord, initial encounter -S14159D Other incomplete lesion at unspecified level of cervical spinal cord, subsequent encounter -S14159S Other incomplete lesion at unspecified level of cervical spinal cord, sequela -S142XXA Injury of nerve root of cervical spine, initial encounter -S142XXD Injury of nerve root of cervical spine, subsequent encounter -S142XXS Injury of nerve root of cervical spine, sequela -S143XXA Injury of brachial plexus, initial encounter -S143XXD Injury of brachial plexus, subsequent encounter -S143XXS Injury of brachial plexus, sequela -S144XXA Injury of peripheral nerves of neck, initial encounter -S144XXD Injury of peripheral nerves of neck, subsequent encounter -S144XXS Injury of peripheral nerves of neck, sequela -S145XXA Injury of cervical sympathetic nerves, initial encounter -S145XXD Injury of cervical sympathetic nerves, subsequent encounter -S145XXS Injury of cervical sympathetic nerves, sequela -S148XXA Injury of other specified nerves of neck, initial encounter -S148XXD Injury of other specified nerves of neck, subsequent encounter -S148XXS Injury of other specified nerves of neck, sequela -S149XXA Injury of unspecified nerves of neck, initial encounter -S149XXD Injury of unspecified nerves of neck, subsequent encounter -S149XXS Injury of unspecified nerves of neck, sequela -S15001A Unspecified injury of right carotid artery, initial encounter -S15001D Unspecified injury of right carotid artery, subsequent encounter -S15001S Unspecified injury of right carotid artery, sequela -S15002A Unspecified injury of left carotid artery, initial encounter -S15002D Unspecified injury of left carotid artery, subsequent encounter -S15002S Unspecified injury of left carotid artery, sequela -S15009A Unspecified injury of unspecified carotid artery, initial encounter -S15009D Unspecified injury of unspecified carotid artery, subsequent encounter -S15009S Unspecified injury of unspecified carotid artery, sequela -S15011A Minor laceration of right carotid artery, initial encounter -S15011D Minor laceration of right carotid artery, subsequent encounter -S15011S Minor laceration of right carotid artery, sequela -S15012A Minor laceration of left carotid artery, initial encounter -S15012D Minor laceration of left carotid artery, subsequent encounter -S15012S Minor laceration of left carotid artery, sequela -S15019A Minor laceration of unspecified carotid artery, initial encounter -S15019D Minor laceration of unspecified carotid artery, subsequent encounter -S15019S Minor laceration of unspecified carotid artery, sequela -S15021A Major laceration of right carotid artery, initial encounter -S15021D Major laceration of right carotid artery, subsequent encounter -S15021S Major laceration of right carotid artery, sequela -S15022A Major laceration of left carotid artery, initial encounter -S15022D Major laceration of left carotid artery, subsequent encounter -S15022S Major laceration of left carotid artery, sequela -S15029A Major laceration of unspecified carotid artery, initial encounter -S15029D Major laceration of unspecified carotid artery, subsequent encounter -S15029S Major laceration of unspecified carotid artery, sequela -S15091A Other specified injury of right carotid artery, initial encounter -S15091D Other specified injury of right carotid artery, subsequent encounter -S15091S Other specified injury of right carotid artery, sequela -S15092A Other specified injury of left carotid artery, initial encounter -S15092D Other specified injury of left carotid artery, subsequent encounter -S15092S Other specified injury of left carotid artery, sequela -S15099A Other specified injury of unspecified carotid artery, initial encounter -S15099D Other specified injury of unspecified carotid artery, subsequent encounter -S15099S Other specified injury of unspecified carotid artery, sequela -S15101A Unspecified injury of right vertebral artery, initial encounter -S15101D Unspecified injury of right vertebral artery, subsequent encounter -S15101S Unspecified injury of right vertebral artery, sequela -S15102A Unspecified injury of left vertebral artery, initial encounter -S15102D Unspecified injury of left vertebral artery, subsequent encounter -S15102S Unspecified injury of left vertebral artery, sequela -S15109A Unspecified injury of unspecified vertebral artery, initial encounter -S15109D Unspecified injury of unspecified vertebral artery, subsequent encounter -S15109S Unspecified injury of unspecified vertebral artery, sequela -S15111A Minor laceration of right vertebral artery, initial encounter -S15111D Minor laceration of right vertebral artery, subsequent encounter -S15111S Minor laceration of right vertebral artery, sequela -S15112A Minor laceration of left vertebral artery, initial encounter -S15112D Minor laceration of left vertebral artery, subsequent encounter -S15112S Minor laceration of left vertebral artery, sequela -S15119A Minor laceration of unspecified vertebral artery, initial encounter -S15119D Minor laceration of unspecified vertebral artery, subsequent encounter -S15119S Minor laceration of unspecified vertebral artery, sequela -S15121A Major laceration of right vertebral artery, initial encounter -S15121D Major laceration of right vertebral artery, subsequent encounter -S15121S Major laceration of right vertebral artery, sequela -S15122A Major laceration of left vertebral artery, initial encounter -S15122D Major laceration of left vertebral artery, subsequent encounter -S15122S Major laceration of left vertebral artery, sequela -S15129A Major laceration of unspecified vertebral artery, initial encounter -S15129D Major laceration of unspecified vertebral artery, subsequent encounter -S15129S Major laceration of unspecified vertebral artery, sequela -S15191A Other specified injury of right vertebral artery, initial encounter -S15191D Other specified injury of right vertebral artery, subsequent encounter -S15191S Other specified injury of right vertebral artery, sequela -S15192A Other specified injury of left vertebral artery, initial encounter -S15192D Other specified injury of left vertebral artery, subsequent encounter -S15192S Other specified injury of left vertebral artery, sequela -S15199A Other specified injury of unspecified vertebral artery, initial encounter -S15199D Other specified injury of unspecified vertebral artery, subsequent encounter -S15199S Other specified injury of unspecified vertebral artery, sequela -S15201A Unspecified injury of right external jugular vein, initial encounter -S15201D Unspecified injury of right external jugular vein, subsequent encounter -S15201S Unspecified injury of right external jugular vein, sequela -S15202A Unspecified injury of left external jugular vein, initial encounter -S15202D Unspecified injury of left external jugular vein, subsequent encounter -S15202S Unspecified injury of left external jugular vein, sequela -S15209A Unspecified injury of unspecified external jugular vein, initial encounter -S15209D Unspecified injury of unspecified external jugular vein, subsequent encounter -S15209S Unspecified injury of unspecified external jugular vein, sequela -S15211A Minor laceration of right external jugular vein, initial encounter -S15211D Minor laceration of right external jugular vein, subsequent encounter -S15211S Minor laceration of right external jugular vein, sequela -S15212A Minor laceration of left external jugular vein, initial encounter -S15212D Minor laceration of left external jugular vein, subsequent encounter -S15212S Minor laceration of left external jugular vein, sequela -S15219A Minor laceration of unspecified external jugular vein, initial encounter -S15219D Minor laceration of unspecified external jugular vein, subsequent encounter -S15219S Minor laceration of unspecified external jugular vein, sequela -S15221A Major laceration of right external jugular vein, initial encounter -S15221D Major laceration of right external jugular vein, subsequent encounter -S15221S Major laceration of right external jugular vein, sequela -S15222A Major laceration of left external jugular vein, initial encounter -S15222D Major laceration of left external jugular vein, subsequent encounter -S15222S Major laceration of left external jugular vein, sequela -S15229A Major laceration of unspecified external jugular vein, initial encounter -S15229D Major laceration of unspecified external jugular vein, subsequent encounter -S15229S Major laceration of unspecified external jugular vein, sequela -S15291A Other specified injury of right external jugular vein, initial encounter -S15291D Other specified injury of right external jugular vein, subsequent encounter -S15291S Other specified injury of right external jugular vein, sequela -S15292A Other specified injury of left external jugular vein, initial encounter -S15292D Other specified injury of left external jugular vein, subsequent encounter -S15292S Other specified injury of left external jugular vein, sequela -S15299A Other specified injury of unspecified external jugular vein, initial encounter -S15299D Other specified injury of unspecified external jugular vein, subsequent encounter -S15299S Other specified injury of unspecified external jugular vein, sequela -S15301A Unspecified injury of right internal jugular vein, initial encounter -S15301D Unspecified injury of right internal jugular vein, subsequent encounter -S15301S Unspecified injury of right internal jugular vein, sequela -S15302A Unspecified injury of left internal jugular vein, initial encounter -S15302D Unspecified injury of left internal jugular vein, subsequent encounter -S15302S Unspecified injury of left internal jugular vein, sequela -S15309A Unspecified injury of unspecified internal jugular vein, initial encounter -S15309D Unspecified injury of unspecified internal jugular vein, subsequent encounter -S15309S Unspecified injury of unspecified internal jugular vein, sequela -S15311A Minor laceration of right internal jugular vein, initial encounter -S15311D Minor laceration of right internal jugular vein, subsequent encounter -S15311S Minor laceration of right internal jugular vein, sequela -S15312A Minor laceration of left internal jugular vein, initial encounter -S15312D Minor laceration of left internal jugular vein, subsequent encounter -S15312S Minor laceration of left internal jugular vein, sequela -S15319A Minor laceration of unspecified internal jugular vein, initial encounter -S15319D Minor laceration of unspecified internal jugular vein, subsequent encounter -S15319S Minor laceration of unspecified internal jugular vein, sequela -S15321A Major laceration of right internal jugular vein, initial encounter -S15321D Major laceration of right internal jugular vein, subsequent encounter -S15321S Major laceration of right internal jugular vein, sequela -S15322A Major laceration of left internal jugular vein, initial encounter -S15322D Major laceration of left internal jugular vein, subsequent encounter -S15322S Major laceration of left internal jugular vein, sequela -S15329A Major laceration of unspecified internal jugular vein, initial encounter -S15329D Major laceration of unspecified internal jugular vein, subsequent encounter -S15329S Major laceration of unspecified internal jugular vein, sequela -S15391A Other specified injury of right internal jugular vein, initial encounter -S15391D Other specified injury of right internal jugular vein, subsequent encounter -S15391S Other specified injury of right internal jugular vein, sequela -S15392A Other specified injury of left internal jugular vein, initial encounter -S15392D Other specified injury of left internal jugular vein, subsequent encounter -S15392S Other specified injury of left internal jugular vein, sequela -S15399A Other specified injury of unspecified internal jugular vein, initial encounter -S15399D Other specified injury of unspecified internal jugular vein, subsequent encounter -S15399S Other specified injury of unspecified internal jugular vein, sequela -S158XXA Injury of other specified blood vessels at neck level, initial encounter -S158XXD Injury of other specified blood vessels at neck level, subsequent encounter -S158XXS Injury of other specified blood vessels at neck level, sequela -S159XXA Injury of unspecified blood vessel at neck level, initial encounter -S159XXD Injury of unspecified blood vessel at neck level, subsequent encounter -S159XXS Injury of unspecified blood vessel at neck level, sequela -S161XXA Strain of muscle, fascia and tendon at neck level, initial encounter -S161XXD Strain of muscle, fascia and tendon at neck level, subsequent encounter -S161XXS Strain of muscle, fascia and tendon at neck level, sequela -S162XXA Laceration of muscle, fascia and tendon at neck level, initial encounter -S162XXD Laceration of muscle, fascia and tendon at neck level, subsequent encounter -S162XXS Laceration of muscle, fascia and tendon at neck level, sequela -S168XXA Other specified injury of muscle, fascia and tendon at neck level, initial encounter -S168XXD Other specified injury of muscle, fascia and tendon at neck level, subsequent encounter -S168XXS Other specified injury of muscle, fascia and tendon at neck level, sequela -S169XXA Unspecified injury of muscle, fascia and tendon at neck level, initial encounter -S169XXD Unspecified injury of muscle, fascia and tendon at neck level, subsequent encounter -S169XXS Unspecified injury of muscle, fascia and tendon at neck level, sequela -S170XXA Crushing injury of larynx and trachea, initial encounter -S170XXD Crushing injury of larynx and trachea, subsequent encounter -S170XXS Crushing injury of larynx and trachea, sequela -S178XXA Crushing injury of other specified parts of neck, initial encounter -S178XXD Crushing injury of other specified parts of neck, subsequent encounter -S178XXS Crushing injury of other specified parts of neck, sequela -S179XXA Crushing injury of neck, part unspecified, initial encounter -S179XXD Crushing injury of neck, part unspecified, subsequent encounter -S179XXS Crushing injury of neck, part unspecified, sequela -S1980XA Other specified injuries of unspecified part of neck, initial encounter -S1980XD Other specified injuries of unspecified part of neck, subsequent encounter -S1980XS Other specified injuries of unspecified part of neck, sequela -S1981XA Other specified injuries of larynx, initial encounter -S1981XD Other specified injuries of larynx, subsequent encounter -S1981XS Other specified injuries of larynx, sequela -S1982XA Other specified injuries of cervical trachea, initial encounter -S1982XD Other specified injuries of cervical trachea, subsequent encounter -S1982XS Other specified injuries of cervical trachea, sequela -S1983XA Other specified injuries of vocal cord, initial encounter -S1983XD Other specified injuries of vocal cord, subsequent encounter -S1983XS Other specified injuries of vocal cord, sequela -S1984XA Other specified injuries of thyroid gland, initial encounter -S1984XD Other specified injuries of thyroid gland, subsequent encounter -S1984XS Other specified injuries of thyroid gland, sequela -S1985XA Other specified injuries of pharynx and cervical esophagus, initial encounter -S1985XD Other specified injuries of pharynx and cervical esophagus, subsequent encounter -S1985XS Other specified injuries of pharynx and cervical esophagus, sequela -S1989XA Other specified injuries of other specified part of neck, initial encounter -S1989XD Other specified injuries of other specified part of neck, subsequent encounter -S1989XS Other specified injuries of other specified part of neck, sequela -S199XXA Unspecified injury of neck, initial encounter -S199XXD Unspecified injury of neck, subsequent encounter -S199XXS Unspecified injury of neck, sequela -S2000XA Contusion of breast, unspecified breast, initial encounter -S2000XD Contusion of breast, unspecified breast, subsequent encounter -S2000XS Contusion of breast, unspecified breast, sequela -S2001XA Contusion of right breast, initial encounter -S2001XD Contusion of right breast, subsequent encounter -S2001XS Contusion of right breast, sequela -S2002XA Contusion of left breast, initial encounter -S2002XD Contusion of left breast, subsequent encounter -S2002XS Contusion of left breast, sequela -S20101A Unspecified superficial injuries of breast, right breast, initial encounter -S20101D Unspecified superficial injuries of breast, right breast, subsequent encounter -S20101S Unspecified superficial injuries of breast, right breast, sequela -S20102A Unspecified superficial injuries of breast, left breast, initial encounter -S20102D Unspecified superficial injuries of breast, left breast, subsequent encounter -S20102S Unspecified superficial injuries of breast, left breast, sequela -S20109A Unspecified superficial injuries of breast, unspecified breast, initial encounter -S20109D Unspecified superficial injuries of breast, unspecified breast, subsequent encounter -S20109S Unspecified superficial injuries of breast, unspecified breast, sequela -S20111A Abrasion of breast, right breast, initial encounter -S20111D Abrasion of breast, right breast, subsequent encounter -S20111S Abrasion of breast, right breast, sequela -S20112A Abrasion of breast, left breast, initial encounter -S20112D Abrasion of breast, left breast, subsequent encounter -S20112S Abrasion of breast, left breast, sequela -S20119A Abrasion of breast, unspecified breast, initial encounter -S20119D Abrasion of breast, unspecified breast, subsequent encounter -S20119S Abrasion of breast, unspecified breast, sequela -S20121A Blister (nonthermal) of breast, right breast, initial encounter -S20121D Blister (nonthermal) of breast, right breast, subsequent encounter -S20121S Blister (nonthermal) of breast, right breast, sequela -S20122A Blister (nonthermal) of breast, left breast, initial encounter -S20122D Blister (nonthermal) of breast, left breast, subsequent encounter -S20122S Blister (nonthermal) of breast, left breast, sequela -S20129A Blister (nonthermal) of breast, unspecified breast, initial encounter -S20129D Blister (nonthermal) of breast, unspecified breast, subsequent encounter -S20129S Blister (nonthermal) of breast, unspecified breast, sequela -S20141A External constriction of part of breast, right breast, initial encounter -S20141D External constriction of part of breast, right breast, subsequent encounter -S20141S External constriction of part of breast, right breast, sequela -S20142A External constriction of part of breast, left breast, initial encounter -S20142D External constriction of part of breast, left breast, subsequent encounter -S20142S External constriction of part of breast, left breast, sequela -S20149A External constriction of part of breast, unspecified breast, initial encounter -S20149D External constriction of part of breast, unspecified breast, subsequent encounter -S20149S External constriction of part of breast, unspecified breast, sequela -S20151A Superficial foreign body of breast, right breast, initial encounter -S20151D Superficial foreign body of breast, right breast, subsequent encounter -S20151S Superficial foreign body of breast, right breast, sequela -S20152A Superficial foreign body of breast, left breast, initial encounter -S20152D Superficial foreign body of breast, left breast, subsequent encounter -S20152S Superficial foreign body of breast, left breast, sequela -S20159A Superficial foreign body of breast, unspecified breast, initial encounter -S20159D Superficial foreign body of breast, unspecified breast, subsequent encounter -S20159S Superficial foreign body of breast, unspecified breast, sequela -S20161A Insect bite (nonvenomous) of breast, right breast, initial encounter -S20161D Insect bite (nonvenomous) of breast, right breast, subsequent encounter -S20161S Insect bite (nonvenomous) of breast, right breast, sequela -S20162A Insect bite (nonvenomous) of breast, left breast, initial encounter -S20162D Insect bite (nonvenomous) of breast, left breast, subsequent encounter -S20162S Insect bite (nonvenomous) of breast, left breast, sequela -S20169A Insect bite (nonvenomous) of breast, unspecified breast, initial encounter -S20169D Insect bite (nonvenomous) of breast, unspecified breast, subsequent encounter -S20169S Insect bite (nonvenomous) of breast, unspecified breast, sequela -S20171A Other superficial bite of breast, right breast, initial encounter -S20171D Other superficial bite of breast, right breast, subsequent encounter -S20171S Other superficial bite of breast, right breast, sequela -S20172A Other superficial bite of breast, left breast, initial encounter -S20172D Other superficial bite of breast, left breast, subsequent encounter -S20172S Other superficial bite of breast, left breast, sequela -S20179A Other superficial bite of breast, unspecified breast, initial encounter -S20179D Other superficial bite of breast, unspecified breast, subsequent encounter -S20179S Other superficial bite of breast, unspecified breast, sequela -S2020XA Contusion of thorax, unspecified, initial encounter -S2020XD Contusion of thorax, unspecified, subsequent encounter -S2020XS Contusion of thorax, unspecified, sequela -S20211A Contusion of right front wall of thorax, initial encounter -S20211D Contusion of right front wall of thorax, subsequent encounter -S20211S Contusion of right front wall of thorax, sequela -S20212A Contusion of left front wall of thorax, initial encounter -S20212D Contusion of left front wall of thorax, subsequent encounter -S20212S Contusion of left front wall of thorax, sequela -S20219A Contusion of unspecified front wall of thorax, initial encounter -S20219D Contusion of unspecified front wall of thorax, subsequent encounter -S20219S Contusion of unspecified front wall of thorax, sequela -S20221A Contusion of right back wall of thorax, initial encounter -S20221D Contusion of right back wall of thorax, subsequent encounter -S20221S Contusion of right back wall of thorax, sequela -S20222A Contusion of left back wall of thorax, initial encounter -S20222D Contusion of left back wall of thorax, subsequent encounter -S20222S Contusion of left back wall of thorax, sequela -S20229A Contusion of unspecified back wall of thorax, initial encounter -S20229D Contusion of unspecified back wall of thorax, subsequent encounter -S20229S Contusion of unspecified back wall of thorax, sequela -S20301A Unspecified superficial injuries of right front wall of thorax, initial encounter -S20301D Unspecified superficial injuries of right front wall of thorax, subsequent encounter -S20301S Unspecified superficial injuries of right front wall of thorax, sequela -S20302A Unspecified superficial injuries of left front wall of thorax, initial encounter -S20302D Unspecified superficial injuries of left front wall of thorax, subsequent encounter -S20302S Unspecified superficial injuries of left front wall of thorax, sequela -S20309A Unspecified superficial injuries of unspecified front wall of thorax, initial encounter -S20309D Unspecified superficial injuries of unspecified front wall of thorax, subsequent encounter -S20309S Unspecified superficial injuries of unspecified front wall of thorax, sequela -S20311A Abrasion of right front wall of thorax, initial encounter -S20311D Abrasion of right front wall of thorax, subsequent encounter -S20311S Abrasion of right front wall of thorax, sequela -S20312A Abrasion of left front wall of thorax, initial encounter -S20312D Abrasion of left front wall of thorax, subsequent encounter -S20312S Abrasion of left front wall of thorax, sequela -S20319A Abrasion of unspecified front wall of thorax, initial encounter -S20319D Abrasion of unspecified front wall of thorax, subsequent encounter -S20319S Abrasion of unspecified front wall of thorax, sequela -S20321A Blister (nonthermal) of right front wall of thorax, initial encounter -S20321D Blister (nonthermal) of right front wall of thorax, subsequent encounter -S20321S Blister (nonthermal) of right front wall of thorax, sequela -S20322A Blister (nonthermal) of left front wall of thorax, initial encounter -S20322D Blister (nonthermal) of left front wall of thorax, subsequent encounter -S20322S Blister (nonthermal) of left front wall of thorax, sequela -S20329A Blister (nonthermal) of unspecified front wall of thorax, initial encounter -S20329D Blister (nonthermal) of unspecified front wall of thorax, subsequent encounter -S20329S Blister (nonthermal) of unspecified front wall of thorax, sequela -S20341A External constriction of right front wall of thorax, initial encounter -S20341D External constriction of right front wall of thorax, subsequent encounter -S20341S External constriction of right front wall of thorax, sequela -S20342A External constriction of left front wall of thorax, initial encounter -S20342D External constriction of left front wall of thorax, subsequent encounter -S20342S External constriction of left front wall of thorax, sequela -S20349A External constriction of unspecified front wall of thorax, initial encounter -S20349D External constriction of unspecified front wall of thorax, subsequent encounter -S20349S External constriction of unspecified front wall of thorax, sequela -S20351A Superficial foreign body of right front wall of thorax, initial encounter -S20351D Superficial foreign body of right front wall of thorax, subsequent encounter -S20351S Superficial foreign body of right front wall of thorax, sequela -S20352A Superficial foreign body of left front wall of thorax, initial encounter -S20352D Superficial foreign body of left front wall of thorax, subsequent encounter -S20352S Superficial foreign body of left front wall of thorax, sequela -S20359A Superficial foreign body of unspecified front wall of thorax, initial encounter -S20359D Superficial foreign body of unspecified front wall of thorax, subsequent encounter -S20359S Superficial foreign body of unspecified front wall of thorax, sequela -S20361A Insect bite (nonvenomous) of right front wall of thorax, initial encounter -S20361D Insect bite (nonvenomous) of right front wall of thorax, subsequent encounter -S20361S Insect bite (nonvenomous) of right front wall of thorax, sequela -S20362A Insect bite (nonvenomous) of left front wall of thorax, initial encounter -S20362D Insect bite (nonvenomous) of left front wall of thorax, subsequent encounter -S20362S Insect bite (nonvenomous) of left front wall of thorax, sequela -S20369A Insect bite (nonvenomous) of unspecified front wall of thorax, initial encounter -S20369D Insect bite (nonvenomous) of unspecified front wall of thorax, subsequent encounter -S20369S Insect bite (nonvenomous) of unspecified front wall of thorax, sequela -S20371A Other superficial bite of right front wall of thorax, initial encounter -S20371D Other superficial bite of right front wall of thorax, subsequent encounter -S20371S Other superficial bite of right front wall of thorax, sequela -S20372A Other superficial bite of left front wall of thorax, initial encounter -S20372D Other superficial bite of left front wall of thorax, subsequent encounter -S20372S Other superficial bite of left front wall of thorax, sequela -S20379A Other superficial bite of unspecified front wall of thorax, initial encounter -S20379D Other superficial bite of unspecified front wall of thorax, subsequent encounter -S20379S Other superficial bite of unspecified front wall of thorax, sequela -S20401A Unspecified superficial injuries of right back wall of thorax, initial encounter -S20401D Unspecified superficial injuries of right back wall of thorax, subsequent encounter -S20401S Unspecified superficial injuries of right back wall of thorax, sequela -S20402A Unspecified superficial injuries of left back wall of thorax, initial encounter -S20402D Unspecified superficial injuries of left back wall of thorax, subsequent encounter -S20402S Unspecified superficial injuries of left back wall of thorax, sequela -S20409A Unspecified superficial injuries of unspecified back wall of thorax, initial encounter -S20409D Unspecified superficial injuries of unspecified back wall of thorax, subsequent encounter -S20409S Unspecified superficial injuries of unspecified back wall of thorax, sequela -S20411A Abrasion of right back wall of thorax, initial encounter -S20411D Abrasion of right back wall of thorax, subsequent encounter -S20411S Abrasion of right back wall of thorax, sequela -S20412A Abrasion of left back wall of thorax, initial encounter -S20412D Abrasion of left back wall of thorax, subsequent encounter -S20412S Abrasion of left back wall of thorax, sequela -S20419A Abrasion of unspecified back wall of thorax, initial encounter -S20419D Abrasion of unspecified back wall of thorax, subsequent encounter -S20419S Abrasion of unspecified back wall of thorax, sequela -S20421A Blister (nonthermal) of right back wall of thorax, initial encounter -S20421D Blister (nonthermal) of right back wall of thorax, subsequent encounter -S20421S Blister (nonthermal) of right back wall of thorax, sequela -S20422A Blister (nonthermal) of left back wall of thorax, initial encounter -S20422D Blister (nonthermal) of left back wall of thorax, subsequent encounter -S20422S Blister (nonthermal) of left back wall of thorax, sequela -S20429A Blister (nonthermal) of unspecified back wall of thorax, initial encounter -S20429D Blister (nonthermal) of unspecified back wall of thorax, subsequent encounter -S20429S Blister (nonthermal) of unspecified back wall of thorax, sequela -S20441A External constriction of right back wall of thorax, initial encounter -S20441D External constriction of right back wall of thorax, subsequent encounter -S20441S External constriction of right back wall of thorax, sequela -S20442A External constriction of left back wall of thorax, initial encounter -S20442D External constriction of left back wall of thorax, subsequent encounter -S20442S External constriction of left back wall of thorax, sequela -S20449A External constriction of unspecified back wall of thorax, initial encounter -S20449D External constriction of unspecified back wall of thorax, subsequent encounter -S20449S External constriction of unspecified back wall of thorax, sequela -S20451A Superficial foreign body of right back wall of thorax, initial encounter -S20451D Superficial foreign body of right back wall of thorax, subsequent encounter -S20451S Superficial foreign body of right back wall of thorax, sequela -S20452A Superficial foreign body of left back wall of thorax, initial encounter -S20452D Superficial foreign body of left back wall of thorax, subsequent encounter -S20452S Superficial foreign body of left back wall of thorax, sequela -S20459A Superficial foreign body of unspecified back wall of thorax, initial encounter -S20459D Superficial foreign body of unspecified back wall of thorax, subsequent encounter -S20459S Superficial foreign body of unspecified back wall of thorax, sequela -S20461A Insect bite (nonvenomous) of right back wall of thorax, initial encounter -S20461D Insect bite (nonvenomous) of right back wall of thorax, subsequent encounter -S20461S Insect bite (nonvenomous) of right back wall of thorax, sequela -S20462A Insect bite (nonvenomous) of left back wall of thorax, initial encounter -S20462D Insect bite (nonvenomous) of left back wall of thorax, subsequent encounter -S20462S Insect bite (nonvenomous) of left back wall of thorax, sequela -S20469A Insect bite (nonvenomous) of unspecified back wall of thorax, initial encounter -S20469D Insect bite (nonvenomous) of unspecified back wall of thorax, subsequent encounter -S20469S Insect bite (nonvenomous) of unspecified back wall of thorax, sequela -S20471A Other superficial bite of right back wall of thorax, initial encounter -S20471D Other superficial bite of right back wall of thorax, subsequent encounter -S20471S Other superficial bite of right back wall of thorax, sequela -S20472A Other superficial bite of left back wall of thorax, initial encounter -S20472D Other superficial bite of left back wall of thorax, subsequent encounter -S20472S Other superficial bite of left back wall of thorax, sequela -S20479A Other superficial bite of unspecified back wall of thorax, initial encounter -S20479D Other superficial bite of unspecified back wall of thorax, subsequent encounter -S20479S Other superficial bite of unspecified back wall of thorax, sequela -S2090XA Unspecified superficial injury of unspecified parts of thorax, initial encounter -S2090XD Unspecified superficial injury of unspecified parts of thorax, subsequent encounter -S2090XS Unspecified superficial injury of unspecified parts of thorax, sequela -S2091XA Abrasion of unspecified parts of thorax, initial encounter -S2091XD Abrasion of unspecified parts of thorax, subsequent encounter -S2091XS Abrasion of unspecified parts of thorax, sequela -S2092XA Blister (nonthermal) of unspecified parts of thorax, initial encounter -S2092XD Blister (nonthermal) of unspecified parts of thorax, subsequent encounter -S2092XS Blister (nonthermal) of unspecified parts of thorax, sequela -S2094XA External constriction of unspecified parts of thorax, initial encounter -S2094XD External constriction of unspecified parts of thorax, subsequent encounter -S2094XS External constriction of unspecified parts of thorax, sequela -S2095XA Superficial foreign body of unspecified parts of thorax, initial encounter -S2095XD Superficial foreign body of unspecified parts of thorax, subsequent encounter -S2095XS Superficial foreign body of unspecified parts of thorax, sequela -S2096XA Insect bite (nonvenomous) of unspecified parts of thorax, initial encounter -S2096XD Insect bite (nonvenomous) of unspecified parts of thorax, subsequent encounter -S2096XS Insect bite (nonvenomous) of unspecified parts of thorax, sequela -S2097XA Other superficial bite of unspecified parts of thorax, initial encounter -S2097XD Other superficial bite of unspecified parts of thorax, subsequent encounter -S2097XS Other superficial bite of unspecified parts of thorax, sequela -S21001A Unspecified open wound of right breast, initial encounter -S21001D Unspecified open wound of right breast, subsequent encounter -S21001S Unspecified open wound of right breast, sequela -S21002A Unspecified open wound of left breast, initial encounter -S21002D Unspecified open wound of left breast, subsequent encounter -S21002S Unspecified open wound of left breast, sequela -S21009A Unspecified open wound of unspecified breast, initial encounter -S21009D Unspecified open wound of unspecified breast, subsequent encounter -S21009S Unspecified open wound of unspecified breast, sequela -S21011A Laceration without foreign body of right breast, initial encounter -S21011D Laceration without foreign body of right breast, subsequent encounter -S21011S Laceration without foreign body of right breast, sequela -S21012A Laceration without foreign body of left breast, initial encounter -S21012D Laceration without foreign body of left breast, subsequent encounter -S21012S Laceration without foreign body of left breast, sequela -S21019A Laceration without foreign body of unspecified breast, initial encounter -S21019D Laceration without foreign body of unspecified breast, subsequent encounter -S21019S Laceration without foreign body of unspecified breast, sequela -S21021A Laceration with foreign body of right breast, initial encounter -S21021D Laceration with foreign body of right breast, subsequent encounter -S21021S Laceration with foreign body of right breast, sequela -S21022A Laceration with foreign body of left breast, initial encounter -S21022D Laceration with foreign body of left breast, subsequent encounter -S21022S Laceration with foreign body of left breast, sequela -S21029A Laceration with foreign body of unspecified breast, initial encounter -S21029D Laceration with foreign body of unspecified breast, subsequent encounter -S21029S Laceration with foreign body of unspecified breast, sequela -S21031A Puncture wound without foreign body of right breast, initial encounter -S21031D Puncture wound without foreign body of right breast, subsequent encounter -S21031S Puncture wound without foreign body of right breast, sequela -S21032A Puncture wound without foreign body of left breast, initial encounter -S21032D Puncture wound without foreign body of left breast, subsequent encounter -S21032S Puncture wound without foreign body of left breast, sequela -S21039A Puncture wound without foreign body of unspecified breast, initial encounter -S21039D Puncture wound without foreign body of unspecified breast, subsequent encounter -S21039S Puncture wound without foreign body of unspecified breast, sequela -S21041A Puncture wound with foreign body of right breast, initial encounter -S21041D Puncture wound with foreign body of right breast, subsequent encounter -S21041S Puncture wound with foreign body of right breast, sequela -S21042A Puncture wound with foreign body of left breast, initial encounter -S21042D Puncture wound with foreign body of left breast, subsequent encounter -S21042S Puncture wound with foreign body of left breast, sequela -S21049A Puncture wound with foreign body of unspecified breast, initial encounter -S21049D Puncture wound with foreign body of unspecified breast, subsequent encounter -S21049S Puncture wound with foreign body of unspecified breast, sequela -S21051A Open bite of right breast, initial encounter -S21051D Open bite of right breast, subsequent encounter -S21051S Open bite of right breast, sequela -S21052A Open bite of left breast, initial encounter -S21052D Open bite of left breast, subsequent encounter -S21052S Open bite of left breast, sequela -S21059A Open bite of unspecified breast, initial encounter -S21059D Open bite of unspecified breast, subsequent encounter -S21059S Open bite of unspecified breast, sequela -S21101A Unspecified open wound of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21101D Unspecified open wound of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21101S Unspecified open wound of right front wall of thorax without penetration into thoracic cavity, sequela -S21102A Unspecified open wound of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21102D Unspecified open wound of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21102S Unspecified open wound of left front wall of thorax without penetration into thoracic cavity, sequela -S21109A Unspecified open wound of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21109D Unspecified open wound of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21109S Unspecified open wound of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21111A Laceration without foreign body of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21111D Laceration without foreign body of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21111S Laceration without foreign body of right front wall of thorax without penetration into thoracic cavity, sequela -S21112A Laceration without foreign body of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21112D Laceration without foreign body of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21112S Laceration without foreign body of left front wall of thorax without penetration into thoracic cavity, sequela -S21119A Laceration without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21119D Laceration without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21119S Laceration without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21121A Laceration with foreign body of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21121D Laceration with foreign body of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21121S Laceration with foreign body of right front wall of thorax without penetration into thoracic cavity, sequela -S21122A Laceration with foreign body of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21122D Laceration with foreign body of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21122S Laceration with foreign body of left front wall of thorax without penetration into thoracic cavity, sequela -S21129A Laceration with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21129D Laceration with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21129S Laceration with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21131A Puncture wound without foreign body of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21131D Puncture wound without foreign body of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21131S Puncture wound without foreign body of right front wall of thorax without penetration into thoracic cavity, sequela -S21132A Puncture wound without foreign body of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21132D Puncture wound without foreign body of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21132S Puncture wound without foreign body of left front wall of thorax without penetration into thoracic cavity, sequela -S21139A Puncture wound without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21139D Puncture wound without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21139S Puncture wound without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21141A Puncture wound with foreign body of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21141D Puncture wound with foreign body of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21141S Puncture wound with foreign body of right front wall of thorax without penetration into thoracic cavity, sequela -S21142A Puncture wound with foreign body of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21142D Puncture wound with foreign body of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21142S Puncture wound with foreign body of left front wall of thorax without penetration into thoracic cavity, sequela -S21149A Puncture wound with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21149D Puncture wound with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21149S Puncture wound with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21151A Open bite of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21151D Open bite of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21151S Open bite of right front wall of thorax without penetration into thoracic cavity, sequela -S21152A Open bite of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21152D Open bite of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21152S Open bite of left front wall of thorax without penetration into thoracic cavity, sequela -S21159A Open bite of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21159D Open bite of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21159S Open bite of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21201A Unspecified open wound of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21201D Unspecified open wound of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21201S Unspecified open wound of right back wall of thorax without penetration into thoracic cavity, sequela -S21202A Unspecified open wound of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21202D Unspecified open wound of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21202S Unspecified open wound of left back wall of thorax without penetration into thoracic cavity, sequela -S21209A Unspecified open wound of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21209D Unspecified open wound of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21209S Unspecified open wound of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21211A Laceration without foreign body of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21211D Laceration without foreign body of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21211S Laceration without foreign body of right back wall of thorax without penetration into thoracic cavity, sequela -S21212A Laceration without foreign body of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21212D Laceration without foreign body of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21212S Laceration without foreign body of left back wall of thorax without penetration into thoracic cavity, sequela -S21219A Laceration without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21219D Laceration without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21219S Laceration without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21221A Laceration with foreign body of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21221D Laceration with foreign body of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21221S Laceration with foreign body of right back wall of thorax without penetration into thoracic cavity, sequela -S21222A Laceration with foreign body of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21222D Laceration with foreign body of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21222S Laceration with foreign body of left back wall of thorax without penetration into thoracic cavity, sequela -S21229A Laceration with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21229D Laceration with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21229S Laceration with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21231A Puncture wound without foreign body of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21231D Puncture wound without foreign body of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21231S Puncture wound without foreign body of right back wall of thorax without penetration into thoracic cavity, sequela -S21232A Puncture wound without foreign body of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21232D Puncture wound without foreign body of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21232S Puncture wound without foreign body of left back wall of thorax without penetration into thoracic cavity, sequela -S21239A Puncture wound without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21239D Puncture wound without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21239S Puncture wound without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21241A Puncture wound with foreign body of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21241D Puncture wound with foreign body of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21241S Puncture wound with foreign body of right back wall of thorax without penetration into thoracic cavity, sequela -S21242A Puncture wound with foreign body of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21242D Puncture wound with foreign body of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21242S Puncture wound with foreign body of left back wall of thorax without penetration into thoracic cavity, sequela -S21249A Puncture wound with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21249D Puncture wound with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21249S Puncture wound with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21251A Open bite of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21251D Open bite of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21251S Open bite of right back wall of thorax without penetration into thoracic cavity, sequela -S21252A Open bite of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21252D Open bite of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21252S Open bite of left back wall of thorax without penetration into thoracic cavity, sequela -S21259A Open bite of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21259D Open bite of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21259S Open bite of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21301A Unspecified open wound of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21301D Unspecified open wound of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21301S Unspecified open wound of right front wall of thorax with penetration into thoracic cavity, sequela -S21302A Unspecified open wound of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21302D Unspecified open wound of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21302S Unspecified open wound of left front wall of thorax with penetration into thoracic cavity, sequela -S21309A Unspecified open wound of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21309D Unspecified open wound of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21309S Unspecified open wound of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21311A Laceration without foreign body of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21311D Laceration without foreign body of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21311S Laceration without foreign body of right front wall of thorax with penetration into thoracic cavity, sequela -S21312A Laceration without foreign body of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21312D Laceration without foreign body of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21312S Laceration without foreign body of left front wall of thorax with penetration into thoracic cavity, sequela -S21319A Laceration without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21319D Laceration without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21319S Laceration without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21321A Laceration with foreign body of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21321D Laceration with foreign body of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21321S Laceration with foreign body of right front wall of thorax with penetration into thoracic cavity, sequela -S21322A Laceration with foreign body of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21322D Laceration with foreign body of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21322S Laceration with foreign body of left front wall of thorax with penetration into thoracic cavity, sequela -S21329A Laceration with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21329D Laceration with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21329S Laceration with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21331A Puncture wound without foreign body of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21331D Puncture wound without foreign body of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21331S Puncture wound without foreign body of right front wall of thorax with penetration into thoracic cavity, sequela -S21332A Puncture wound without foreign body of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21332D Puncture wound without foreign body of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21332S Puncture wound without foreign body of left front wall of thorax with penetration into thoracic cavity, sequela -S21339A Puncture wound without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21339D Puncture wound without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21339S Puncture wound without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21341A Puncture wound with foreign body of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21341D Puncture wound with foreign body of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21341S Puncture wound with foreign body of right front wall of thorax with penetration into thoracic cavity, sequela -S21342A Puncture wound with foreign body of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21342D Puncture wound with foreign body of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21342S Puncture wound with foreign body of left front wall of thorax with penetration into thoracic cavity, sequela -S21349A Puncture wound with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21349D Puncture wound with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21349S Puncture wound with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21351A Open bite of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21351D Open bite of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21351S Open bite of right front wall of thorax with penetration into thoracic cavity, sequela -S21352A Open bite of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21352D Open bite of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21352S Open bite of left front wall of thorax with penetration into thoracic cavity, sequela -S21359A Open bite of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21359D Open bite of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21359S Open bite of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21401A Unspecified open wound of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21401D Unspecified open wound of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21401S Unspecified open wound of right back wall of thorax with penetration into thoracic cavity, sequela -S21402A Unspecified open wound of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21402D Unspecified open wound of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21402S Unspecified open wound of left back wall of thorax with penetration into thoracic cavity, sequela -S21409A Unspecified open wound of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21409D Unspecified open wound of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21409S Unspecified open wound of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S21411A Laceration without foreign body of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21411D Laceration without foreign body of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21411S Laceration without foreign body of right back wall of thorax with penetration into thoracic cavity, sequela -S21412A Laceration without foreign body of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21412D Laceration without foreign body of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21412S Laceration without foreign body of left back wall of thorax with penetration into thoracic cavity, sequela -S21419A Laceration without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21419D Laceration without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21419S Laceration without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S21421A Laceration with foreign body of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21421D Laceration with foreign body of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21421S Laceration with foreign body of right back wall of thorax with penetration into thoracic cavity, sequela -S21422A Laceration with foreign body of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21422D Laceration with foreign body of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21422S Laceration with foreign body of left back wall of thorax with penetration into thoracic cavity, sequela -S21429A Laceration with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21429D Laceration with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21429S Laceration with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S21431A Puncture wound without foreign body of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21431D Puncture wound without foreign body of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21431S Puncture wound without foreign body of right back wall of thorax with penetration into thoracic cavity, sequela -S21432A Puncture wound without foreign body of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21432D Puncture wound without foreign body of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21432S Puncture wound without foreign body of left back wall of thorax with penetration into thoracic cavity, sequela -S21439A Puncture wound without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21439D Puncture wound without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21439S Puncture wound without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S21441A Puncture wound with foreign body of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21441D Puncture wound with foreign body of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21441S Puncture wound with foreign body of right back wall of thorax with penetration into thoracic cavity, sequela -S21442A Puncture wound with foreign body of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21442D Puncture wound with foreign body of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21442S Puncture wound with foreign body of left back wall of thorax with penetration into thoracic cavity, sequela -S21449A Puncture wound with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21449D Puncture wound with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21449S Puncture wound with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S21451A Open bite of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21451D Open bite of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21451S Open bite of right back wall of thorax with penetration into thoracic cavity, sequela -S21452A Open bite of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21452D Open bite of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21452S Open bite of left back wall of thorax with penetration into thoracic cavity, sequela -S21459A Open bite of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21459D Open bite of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21459S Open bite of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S2190XA Unspecified open wound of unspecified part of thorax, initial encounter -S2190XD Unspecified open wound of unspecified part of thorax, subsequent encounter -S2190XS Unspecified open wound of unspecified part of thorax, sequela -S2191XA Laceration without foreign body of unspecified part of thorax, initial encounter -S2191XD Laceration without foreign body of unspecified part of thorax, subsequent encounter -S2191XS Laceration without foreign body of unspecified part of thorax, sequela -S2192XA Laceration with foreign body of unspecified part of thorax, initial encounter -S2192XD Laceration with foreign body of unspecified part of thorax, subsequent encounter -S2192XS Laceration with foreign body of unspecified part of thorax, sequela -S2193XA Puncture wound without foreign body of unspecified part of thorax, initial encounter -S2193XD Puncture wound without foreign body of unspecified part of thorax, subsequent encounter -S2193XS Puncture wound without foreign body of unspecified part of thorax, sequela -S2194XA Puncture wound with foreign body of unspecified part of thorax, initial encounter -S2194XD Puncture wound with foreign body of unspecified part of thorax, subsequent encounter -S2194XS Puncture wound with foreign body of unspecified part of thorax, sequela -S2195XA Open bite of unspecified part of thorax, initial encounter -S2195XD Open bite of unspecified part of thorax, subsequent encounter -S2195XS Open bite of unspecified part of thorax, sequela -S22000A Wedge compression fracture of unspecified thoracic vertebra, initial encounter for closed fracture -S22000B Wedge compression fracture of unspecified thoracic vertebra, initial encounter for open fracture -S22000D Wedge compression fracture of unspecified thoracic vertebra, subsequent encounter for fracture with routine healing -S22000G Wedge compression fracture of unspecified thoracic vertebra, subsequent encounter for fracture with delayed healing -S22000K Wedge compression fracture of unspecified thoracic vertebra, subsequent encounter for fracture with nonunion -S22000S Wedge compression fracture of unspecified thoracic vertebra, sequela -S22001A Stable burst fracture of unspecified thoracic vertebra, initial encounter for closed fracture -S22001B Stable burst fracture of unspecified thoracic vertebra, initial encounter for open fracture -S22001D Stable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with routine healing -S22001G Stable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with delayed healing -S22001K Stable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with nonunion -S22001S Stable burst fracture of unspecified thoracic vertebra, sequela -S22002A Unstable burst fracture of unspecified thoracic vertebra, initial encounter for closed fracture -S22002B Unstable burst fracture of unspecified thoracic vertebra, initial encounter for open fracture -S22002D Unstable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with routine healing -S22002G Unstable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with delayed healing -S22002K Unstable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with nonunion -S22002S Unstable burst fracture of unspecified thoracic vertebra, sequela -S22008A Other fracture of unspecified thoracic vertebra, initial encounter for closed fracture -S22008B Other fracture of unspecified thoracic vertebra, initial encounter for open fracture -S22008D Other fracture of unspecified thoracic vertebra, subsequent encounter for fracture with routine healing -S22008G Other fracture of unspecified thoracic vertebra, subsequent encounter for fracture with delayed healing -S22008K Other fracture of unspecified thoracic vertebra, subsequent encounter for fracture with nonunion -S22008S Other fracture of unspecified thoracic vertebra, sequela -S22009A Unspecified fracture of unspecified thoracic vertebra, initial encounter for closed fracture -S22009B Unspecified fracture of unspecified thoracic vertebra, initial encounter for open fracture -S22009D Unspecified fracture of unspecified thoracic vertebra, subsequent encounter for fracture with routine healing -S22009G Unspecified fracture of unspecified thoracic vertebra, subsequent encounter for fracture with delayed healing -S22009K Unspecified fracture of unspecified thoracic vertebra, subsequent encounter for fracture with nonunion -S22009S Unspecified fracture of unspecified thoracic vertebra, sequela -S22010A Wedge compression fracture of first thoracic vertebra, initial encounter for closed fracture -S22010B Wedge compression fracture of first thoracic vertebra, initial encounter for open fracture -S22010D Wedge compression fracture of first thoracic vertebra, subsequent encounter for fracture with routine healing -S22010G Wedge compression fracture of first thoracic vertebra, subsequent encounter for fracture with delayed healing -S22010K Wedge compression fracture of first thoracic vertebra, subsequent encounter for fracture with nonunion -S22010S Wedge compression fracture of first thoracic vertebra, sequela -S22011A Stable burst fracture of first thoracic vertebra, initial encounter for closed fracture -S22011B Stable burst fracture of first thoracic vertebra, initial encounter for open fracture -S22011D Stable burst fracture of first thoracic vertebra, subsequent encounter for fracture with routine healing -S22011G Stable burst fracture of first thoracic vertebra, subsequent encounter for fracture with delayed healing -S22011K Stable burst fracture of first thoracic vertebra, subsequent encounter for fracture with nonunion -S22011S Stable burst fracture of first thoracic vertebra, sequela -S22012A Unstable burst fracture of first thoracic vertebra, initial encounter for closed fracture -S22012B Unstable burst fracture of first thoracic vertebra, initial encounter for open fracture -S22012D Unstable burst fracture of first thoracic vertebra, subsequent encounter for fracture with routine healing -S22012G Unstable burst fracture of first thoracic vertebra, subsequent encounter for fracture with delayed healing -S22012K Unstable burst fracture of first thoracic vertebra, subsequent encounter for fracture with nonunion -S22012S Unstable burst fracture of first thoracic vertebra, sequela -S22018A Other fracture of first thoracic vertebra, initial encounter for closed fracture -S22018B Other fracture of first thoracic vertebra, initial encounter for open fracture -S22018D Other fracture of first thoracic vertebra, subsequent encounter for fracture with routine healing -S22018G Other fracture of first thoracic vertebra, subsequent encounter for fracture with delayed healing -S22018K Other fracture of first thoracic vertebra, subsequent encounter for fracture with nonunion -S22018S Other fracture of first thoracic vertebra, sequela -S22019A Unspecified fracture of first thoracic vertebra, initial encounter for closed fracture -S22019B Unspecified fracture of first thoracic vertebra, initial encounter for open fracture -S22019D Unspecified fracture of first thoracic vertebra, subsequent encounter for fracture with routine healing -S22019G Unspecified fracture of first thoracic vertebra, subsequent encounter for fracture with delayed healing -S22019K Unspecified fracture of first thoracic vertebra, subsequent encounter for fracture with nonunion -S22019S Unspecified fracture of first thoracic vertebra, sequela -S22020A Wedge compression fracture of second thoracic vertebra, initial encounter for closed fracture -S22020B Wedge compression fracture of second thoracic vertebra, initial encounter for open fracture -S22020D Wedge compression fracture of second thoracic vertebra, subsequent encounter for fracture with routine healing -S22020G Wedge compression fracture of second thoracic vertebra, subsequent encounter for fracture with delayed healing -S22020K Wedge compression fracture of second thoracic vertebra, subsequent encounter for fracture with nonunion -S22020S Wedge compression fracture of second thoracic vertebra, sequela -S22021A Stable burst fracture of second thoracic vertebra, initial encounter for closed fracture -S22021B Stable burst fracture of second thoracic vertebra, initial encounter for open fracture -S22021D Stable burst fracture of second thoracic vertebra, subsequent encounter for fracture with routine healing -S22021G Stable burst fracture of second thoracic vertebra, subsequent encounter for fracture with delayed healing -S22021K Stable burst fracture of second thoracic vertebra, subsequent encounter for fracture with nonunion -S22021S Stable burst fracture of second thoracic vertebra, sequela -S22022A Unstable burst fracture of second thoracic vertebra, initial encounter for closed fracture -S22022B Unstable burst fracture of second thoracic vertebra, initial encounter for open fracture -S22022D Unstable burst fracture of second thoracic vertebra, subsequent encounter for fracture with routine healing -S22022G Unstable burst fracture of second thoracic vertebra, subsequent encounter for fracture with delayed healing -S22022K Unstable burst fracture of second thoracic vertebra, subsequent encounter for fracture with nonunion -S22022S Unstable burst fracture of second thoracic vertebra, sequela -S22028A Other fracture of second thoracic vertebra, initial encounter for closed fracture -S22028B Other fracture of second thoracic vertebra, initial encounter for open fracture -S22028D Other fracture of second thoracic vertebra, subsequent encounter for fracture with routine healing -S22028G Other fracture of second thoracic vertebra, subsequent encounter for fracture with delayed healing -S22028K Other fracture of second thoracic vertebra, subsequent encounter for fracture with nonunion -S22028S Other fracture of second thoracic vertebra, sequela -S22029A Unspecified fracture of second thoracic vertebra, initial encounter for closed fracture -S22029B Unspecified fracture of second thoracic vertebra, initial encounter for open fracture -S22029D Unspecified fracture of second thoracic vertebra, subsequent encounter for fracture with routine healing -S22029G Unspecified fracture of second thoracic vertebra, subsequent encounter for fracture with delayed healing -S22029K Unspecified fracture of second thoracic vertebra, subsequent encounter for fracture with nonunion -S22029S Unspecified fracture of second thoracic vertebra, sequela -S22030A Wedge compression fracture of third thoracic vertebra, initial encounter for closed fracture -S22030B Wedge compression fracture of third thoracic vertebra, initial encounter for open fracture -S22030D Wedge compression fracture of third thoracic vertebra, subsequent encounter for fracture with routine healing -S22030G Wedge compression fracture of third thoracic vertebra, subsequent encounter for fracture with delayed healing -S22030K Wedge compression fracture of third thoracic vertebra, subsequent encounter for fracture with nonunion -S22030S Wedge compression fracture of third thoracic vertebra, sequela -S22031A Stable burst fracture of third thoracic vertebra, initial encounter for closed fracture -S22031B Stable burst fracture of third thoracic vertebra, initial encounter for open fracture -S22031D Stable burst fracture of third thoracic vertebra, subsequent encounter for fracture with routine healing -S22031G Stable burst fracture of third thoracic vertebra, subsequent encounter for fracture with delayed healing -S22031K Stable burst fracture of third thoracic vertebra, subsequent encounter for fracture with nonunion -S22031S Stable burst fracture of third thoracic vertebra, sequela -S22032A Unstable burst fracture of third thoracic vertebra, initial encounter for closed fracture -S22032B Unstable burst fracture of third thoracic vertebra, initial encounter for open fracture -S22032D Unstable burst fracture of third thoracic vertebra, subsequent encounter for fracture with routine healing -S22032G Unstable burst fracture of third thoracic vertebra, subsequent encounter for fracture with delayed healing -S22032K Unstable burst fracture of third thoracic vertebra, subsequent encounter for fracture with nonunion -S22032S Unstable burst fracture of third thoracic vertebra, sequela -S22038A Other fracture of third thoracic vertebra, initial encounter for closed fracture -S22038B Other fracture of third thoracic vertebra, initial encounter for open fracture -S22038D Other fracture of third thoracic vertebra, subsequent encounter for fracture with routine healing -S22038G Other fracture of third thoracic vertebra, subsequent encounter for fracture with delayed healing -S22038K Other fracture of third thoracic vertebra, subsequent encounter for fracture with nonunion -S22038S Other fracture of third thoracic vertebra, sequela -S22039A Unspecified fracture of third thoracic vertebra, initial encounter for closed fracture -S22039B Unspecified fracture of third thoracic vertebra, initial encounter for open fracture -S22039D Unspecified fracture of third thoracic vertebra, subsequent encounter for fracture with routine healing -S22039G Unspecified fracture of third thoracic vertebra, subsequent encounter for fracture with delayed healing -S22039K Unspecified fracture of third thoracic vertebra, subsequent encounter for fracture with nonunion -S22039S Unspecified fracture of third thoracic vertebra, sequela -S22040A Wedge compression fracture of fourth thoracic vertebra, initial encounter for closed fracture -S22040B Wedge compression fracture of fourth thoracic vertebra, initial encounter for open fracture -S22040D Wedge compression fracture of fourth thoracic vertebra, subsequent encounter for fracture with routine healing -S22040G Wedge compression fracture of fourth thoracic vertebra, subsequent encounter for fracture with delayed healing -S22040K Wedge compression fracture of fourth thoracic vertebra, subsequent encounter for fracture with nonunion -S22040S Wedge compression fracture of fourth thoracic vertebra, sequela -S22041A Stable burst fracture of fourth thoracic vertebra, initial encounter for closed fracture -S22041B Stable burst fracture of fourth thoracic vertebra, initial encounter for open fracture -S22041D Stable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with routine healing -S22041G Stable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with delayed healing -S22041K Stable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with nonunion -S22041S Stable burst fracture of fourth thoracic vertebra, sequela -S22042A Unstable burst fracture of fourth thoracic vertebra, initial encounter for closed fracture -S22042B Unstable burst fracture of fourth thoracic vertebra, initial encounter for open fracture -S22042D Unstable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with routine healing -S22042G Unstable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with delayed healing -S22042K Unstable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with nonunion -S22042S Unstable burst fracture of fourth thoracic vertebra, sequela -S22048A Other fracture of fourth thoracic vertebra, initial encounter for closed fracture -S22048B Other fracture of fourth thoracic vertebra, initial encounter for open fracture -S22048D Other fracture of fourth thoracic vertebra, subsequent encounter for fracture with routine healing -S22048G Other fracture of fourth thoracic vertebra, subsequent encounter for fracture with delayed healing -S22048K Other fracture of fourth thoracic vertebra, subsequent encounter for fracture with nonunion -S22048S Other fracture of fourth thoracic vertebra, sequela -S22049A Unspecified fracture of fourth thoracic vertebra, initial encounter for closed fracture -S22049B Unspecified fracture of fourth thoracic vertebra, initial encounter for open fracture -S22049D Unspecified fracture of fourth thoracic vertebra, subsequent encounter for fracture with routine healing -S22049G Unspecified fracture of fourth thoracic vertebra, subsequent encounter for fracture with delayed healing -S22049K Unspecified fracture of fourth thoracic vertebra, subsequent encounter for fracture with nonunion -S22049S Unspecified fracture of fourth thoracic vertebra, sequela -S22050A Wedge compression fracture of T5-T6 vertebra, initial encounter for closed fracture -S22050B Wedge compression fracture of T5-T6 vertebra, initial encounter for open fracture -S22050D Wedge compression fracture of T5-T6 vertebra, subsequent encounter for fracture with routine healing -S22050G Wedge compression fracture of T5-T6 vertebra, subsequent encounter for fracture with delayed healing -S22050K Wedge compression fracture of T5-T6 vertebra, subsequent encounter for fracture with nonunion -S22050S Wedge compression fracture of T5-T6 vertebra, sequela -S22051A Stable burst fracture of T5-T6 vertebra, initial encounter for closed fracture -S22051B Stable burst fracture of T5-T6 vertebra, initial encounter for open fracture -S22051D Stable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with routine healing -S22051G Stable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with delayed healing -S22051K Stable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with nonunion -S22051S Stable burst fracture of T5-T6 vertebra, sequela -S22052A Unstable burst fracture of T5-T6 vertebra, initial encounter for closed fracture -S22052B Unstable burst fracture of T5-T6 vertebra, initial encounter for open fracture -S22052D Unstable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with routine healing -S22052G Unstable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with delayed healing -S22052K Unstable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with nonunion -S22052S Unstable burst fracture of T5-T6 vertebra, sequela -S22058A Other fracture of T5-T6 vertebra, initial encounter for closed fracture -S22058B Other fracture of T5-T6 vertebra, initial encounter for open fracture -S22058D Other fracture of T5-T6 vertebra, subsequent encounter for fracture with routine healing -S22058G Other fracture of T5-T6 vertebra, subsequent encounter for fracture with delayed healing -S22058K Other fracture of T5-T6 vertebra, subsequent encounter for fracture with nonunion -S22058S Other fracture of T5-T6 vertebra, sequela -S22059A Unspecified fracture of T5-T6 vertebra, initial encounter for closed fracture -S22059B Unspecified fracture of T5-T6 vertebra, initial encounter for open fracture -S22059D Unspecified fracture of T5-T6 vertebra, subsequent encounter for fracture with routine healing -S22059G Unspecified fracture of T5-T6 vertebra, subsequent encounter for fracture with delayed healing -S22059K Unspecified fracture of T5-T6 vertebra, subsequent encounter for fracture with nonunion -S22059S Unspecified fracture of T5-T6 vertebra, sequela -S22060A Wedge compression fracture of T7-T8 vertebra, initial encounter for closed fracture -S22060B Wedge compression fracture of T7-T8 vertebra, initial encounter for open fracture -S22060D Wedge compression fracture of T7-T8 vertebra, subsequent encounter for fracture with routine healing -S22060G Wedge compression fracture of T7-T8 vertebra, subsequent encounter for fracture with delayed healing -S22060K Wedge compression fracture of T7-T8 vertebra, subsequent encounter for fracture with nonunion -S22060S Wedge compression fracture of T7-T8 vertebra, sequela -S22061A Stable burst fracture of T7-T8 vertebra, initial encounter for closed fracture -S22061B Stable burst fracture of T7-T8 vertebra, initial encounter for open fracture -S22061D Stable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with routine healing -S22061G Stable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with delayed healing -S22061K Stable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with nonunion -S22061S Stable burst fracture of T7-T8 vertebra, sequela -S22062A Unstable burst fracture of T7-T8 vertebra, initial encounter for closed fracture -S22062B Unstable burst fracture of T7-T8 vertebra, initial encounter for open fracture -S22062D Unstable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with routine healing -S22062G Unstable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with delayed healing -S22062K Unstable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with nonunion -S22062S Unstable burst fracture of T7-T8 vertebra, sequela -S22068A Other fracture of T7-T8 thoracic vertebra, initial encounter for closed fracture -S22068B Other fracture of T7-T8 thoracic vertebra, initial encounter for open fracture -S22068D Other fracture of T7-T8 thoracic vertebra, subsequent encounter for fracture with routine healing -S22068G Other fracture of T7-T8 thoracic vertebra, subsequent encounter for fracture with delayed healing -S22068K Other fracture of T7-T8 thoracic vertebra, subsequent encounter for fracture with nonunion -S22068S Other fracture of T7-T8 thoracic vertebra, sequela -S22069A Unspecified fracture of T7-T8 vertebra, initial encounter for closed fracture -S22069B Unspecified fracture of T7-T8 vertebra, initial encounter for open fracture -S22069D Unspecified fracture of T7-T8 vertebra, subsequent encounter for fracture with routine healing -S22069G Unspecified fracture of T7-T8 vertebra, subsequent encounter for fracture with delayed healing -S22069K Unspecified fracture of T7-T8 vertebra, subsequent encounter for fracture with nonunion -S22069S Unspecified fracture of T7-T8 vertebra, sequela -S22070A Wedge compression fracture of T9-T10 vertebra, initial encounter for closed fracture -S22070B Wedge compression fracture of T9-T10 vertebra, initial encounter for open fracture -S22070D Wedge compression fracture of T9-T10 vertebra, subsequent encounter for fracture with routine healing -S22070G Wedge compression fracture of T9-T10 vertebra, subsequent encounter for fracture with delayed healing -S22070K Wedge compression fracture of T9-T10 vertebra, subsequent encounter for fracture with nonunion -S22070S Wedge compression fracture of T9-T10 vertebra, sequela -S22071A Stable burst fracture of T9-T10 vertebra, initial encounter for closed fracture -S22071B Stable burst fracture of T9-T10 vertebra, initial encounter for open fracture -S22071D Stable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with routine healing -S22071G Stable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with delayed healing -S22071K Stable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with nonunion -S22071S Stable burst fracture of T9-T10 vertebra, sequela -S22072A Unstable burst fracture of T9-T10 vertebra, initial encounter for closed fracture -S22072B Unstable burst fracture of T9-T10 vertebra, initial encounter for open fracture -S22072D Unstable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with routine healing -S22072G Unstable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with delayed healing -S22072K Unstable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with nonunion -S22072S Unstable burst fracture of T9-T10 vertebra, sequela -S22078A Other fracture of T9-T10 vertebra, initial encounter for closed fracture -S22078B Other fracture of T9-T10 vertebra, initial encounter for open fracture -S22078D Other fracture of T9-T10 vertebra, subsequent encounter for fracture with routine healing -S22078G Other fracture of T9-T10 vertebra, subsequent encounter for fracture with delayed healing -S22078K Other fracture of T9-T10 vertebra, subsequent encounter for fracture with nonunion -S22078S Other fracture of T9-T10 vertebra, sequela -S22079A Unspecified fracture of T9-T10 vertebra, initial encounter for closed fracture -S22079B Unspecified fracture of T9-T10 vertebra, initial encounter for open fracture -S22079D Unspecified fracture of T9-T10 vertebra, subsequent encounter for fracture with routine healing -S22079G Unspecified fracture of T9-T10 vertebra, subsequent encounter for fracture with delayed healing -S22079K Unspecified fracture of T9-T10 vertebra, subsequent encounter for fracture with nonunion -S22079S Unspecified fracture of T9-T10 vertebra, sequela -S22080A Wedge compression fracture of T11-T12 vertebra, initial encounter for closed fracture -S22080B Wedge compression fracture of T11-T12 vertebra, initial encounter for open fracture -S22080D Wedge compression fracture of T11-T12 vertebra, subsequent encounter for fracture with routine healing -S22080G Wedge compression fracture of T11-T12 vertebra, subsequent encounter for fracture with delayed healing -S22080K Wedge compression fracture of T11-T12 vertebra, subsequent encounter for fracture with nonunion -S22080S Wedge compression fracture of T11-T12 vertebra, sequela -S22081A Stable burst fracture of T11-T12 vertebra, initial encounter for closed fracture -S22081B Stable burst fracture of T11-T12 vertebra, initial encounter for open fracture -S22081D Stable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with routine healing -S22081G Stable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with delayed healing -S22081K Stable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with nonunion -S22081S Stable burst fracture of T11-T12 vertebra, sequela -S22082A Unstable burst fracture of T11-T12 vertebra, initial encounter for closed fracture -S22082B Unstable burst fracture of T11-T12 vertebra, initial encounter for open fracture -S22082D Unstable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with routine healing -S22082G Unstable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with delayed healing -S22082K Unstable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with nonunion -S22082S Unstable burst fracture of T11-T12 vertebra, sequela -S22088A Other fracture of T11-T12 vertebra, initial encounter for closed fracture -S22088B Other fracture of T11-T12 vertebra, initial encounter for open fracture -S22088D Other fracture of T11-T12 vertebra, subsequent encounter for fracture with routine healing -S22088G Other fracture of T11-T12 vertebra, subsequent encounter for fracture with delayed healing -S22088K Other fracture of T11-T12 vertebra, subsequent encounter for fracture with nonunion -S22088S Other fracture of T11-T12 vertebra, sequela -S22089A Unspecified fracture of T11-T12 vertebra, initial encounter for closed fracture -S22089B Unspecified fracture of T11-T12 vertebra, initial encounter for open fracture -S22089D Unspecified fracture of T11-T12 vertebra, subsequent encounter for fracture with routine healing -S22089G Unspecified fracture of T11-T12 vertebra, subsequent encounter for fracture with delayed healing -S22089K Unspecified fracture of T11-T12 vertebra, subsequent encounter for fracture with nonunion -S22089S Unspecified fracture of T11-T12 vertebra, sequela -S2220XA Unspecified fracture of sternum, initial encounter for closed fracture -S2220XB Unspecified fracture of sternum, initial encounter for open fracture -S2220XD Unspecified fracture of sternum, subsequent encounter for fracture with routine healing -S2220XG Unspecified fracture of sternum, subsequent encounter for fracture with delayed healing -S2220XK Unspecified fracture of sternum, subsequent encounter for fracture with nonunion -S2220XS Unspecified fracture of sternum, sequela -S2221XA Fracture of manubrium, initial encounter for closed fracture -S2221XB Fracture of manubrium, initial encounter for open fracture -S2221XD Fracture of manubrium, subsequent encounter for fracture with routine healing -S2221XG Fracture of manubrium, subsequent encounter for fracture with delayed healing -S2221XK Fracture of manubrium, subsequent encounter for fracture with nonunion -S2221XS Fracture of manubrium, sequela -S2222XA Fracture of body of sternum, initial encounter for closed fracture -S2222XB Fracture of body of sternum, initial encounter for open fracture -S2222XD Fracture of body of sternum, subsequent encounter for fracture with routine healing -S2222XG Fracture of body of sternum, subsequent encounter for fracture with delayed healing -S2222XK Fracture of body of sternum, subsequent encounter for fracture with nonunion -S2222XS Fracture of body of sternum, sequela -S2223XA Sternal manubrial dissociation, initial encounter for closed fracture -S2223XB Sternal manubrial dissociation, initial encounter for open fracture -S2223XD Sternal manubrial dissociation, subsequent encounter for fracture with routine healing -S2223XG Sternal manubrial dissociation, subsequent encounter for fracture with delayed healing -S2223XK Sternal manubrial dissociation, subsequent encounter for fracture with nonunion -S2223XS Sternal manubrial dissociation, sequela -S2224XA Fracture of xiphoid process, initial encounter for closed fracture -S2224XB Fracture of xiphoid process, initial encounter for open fracture -S2224XD Fracture of xiphoid process, subsequent encounter for fracture with routine healing -S2224XG Fracture of xiphoid process, subsequent encounter for fracture with delayed healing -S2224XK Fracture of xiphoid process, subsequent encounter for fracture with nonunion -S2224XS Fracture of xiphoid process, sequela -S2231XA Fracture of one rib, right side, initial encounter for closed fracture -S2231XB Fracture of one rib, right side, initial encounter for open fracture -S2231XD Fracture of one rib, right side, subsequent encounter for fracture with routine healing -S2231XG Fracture of one rib, right side, subsequent encounter for fracture with delayed healing -S2231XK Fracture of one rib, right side, subsequent encounter for fracture with nonunion -S2231XS Fracture of one rib, right side, sequela -S2232XA Fracture of one rib, left side, initial encounter for closed fracture -S2232XB Fracture of one rib, left side, initial encounter for open fracture -S2232XD Fracture of one rib, left side, subsequent encounter for fracture with routine healing -S2232XG Fracture of one rib, left side, subsequent encounter for fracture with delayed healing -S2232XK Fracture of one rib, left side, subsequent encounter for fracture with nonunion -S2232XS Fracture of one rib, left side, sequela -S2239XA Fracture of one rib, unspecified side, initial encounter for closed fracture -S2239XB Fracture of one rib, unspecified side, initial encounter for open fracture -S2239XD Fracture of one rib, unspecified side, subsequent encounter for fracture with routine healing -S2239XG Fracture of one rib, unspecified side, subsequent encounter for fracture with delayed healing -S2239XK Fracture of one rib, unspecified side, subsequent encounter for fracture with nonunion -S2239XS Fracture of one rib, unspecified side, sequela -S2241XA Multiple fractures of ribs, right side, initial encounter for closed fracture -S2241XB Multiple fractures of ribs, right side, initial encounter for open fracture -S2241XD Multiple fractures of ribs, right side, subsequent encounter for fracture with routine healing -S2241XG Multiple fractures of ribs, right side, subsequent encounter for fracture with delayed healing -S2241XK Multiple fractures of ribs, right side, subsequent encounter for fracture with nonunion -S2241XS Multiple fractures of ribs, right side, sequela -S2242XA Multiple fractures of ribs, left side, initial encounter for closed fracture -S2242XB Multiple fractures of ribs, left side, initial encounter for open fracture -S2242XD Multiple fractures of ribs, left side, subsequent encounter for fracture with routine healing -S2242XG Multiple fractures of ribs, left side, subsequent encounter for fracture with delayed healing -S2242XK Multiple fractures of ribs, left side, subsequent encounter for fracture with nonunion -S2242XS Multiple fractures of ribs, left side, sequela -S2243XA Multiple fractures of ribs, bilateral, initial encounter for closed fracture -S2243XB Multiple fractures of ribs, bilateral, initial encounter for open fracture -S2243XD Multiple fractures of ribs, bilateral, subsequent encounter for fracture with routine healing -S2243XG Multiple fractures of ribs, bilateral, subsequent encounter for fracture with delayed healing -S2243XK Multiple fractures of ribs, bilateral, subsequent encounter for fracture with nonunion -S2243XS Multiple fractures of ribs, bilateral, sequela -S2249XA Multiple fractures of ribs, unspecified side, initial encounter for closed fracture -S2249XB Multiple fractures of ribs, unspecified side, initial encounter for open fracture -S2249XD Multiple fractures of ribs, unspecified side, subsequent encounter for fracture with routine healing -S2249XG Multiple fractures of ribs, unspecified side, subsequent encounter for fracture with delayed healing -S2249XK Multiple fractures of ribs, unspecified side, subsequent encounter for fracture with nonunion -S2249XS Multiple fractures of ribs, unspecified side, sequela -S225XXA Flail chest, initial encounter for closed fracture -S225XXB Flail chest, initial encounter for open fracture -S225XXD Flail chest, subsequent encounter for fracture with routine healing -S225XXG Flail chest, subsequent encounter for fracture with delayed healing -S225XXK Flail chest, subsequent encounter for fracture with nonunion -S225XXS Flail chest, sequela -S229XXA Fracture of bony thorax, part unspecified, initial encounter for closed fracture -S229XXB Fracture of bony thorax, part unspecified, initial encounter for open fracture -S229XXD Fracture of bony thorax, part unspecified, subsequent encounter for fracture with routine healing -S229XXG Fracture of bony thorax, part unspecified, subsequent encounter for fracture with delayed healing -S229XXK Fracture of bony thorax, part unspecified, subsequent encounter for fracture with nonunion -S229XXS Fracture of bony thorax, part unspecified, sequela -S230XXA Traumatic rupture of thoracic intervertebral disc, initial encounter -S230XXD Traumatic rupture of thoracic intervertebral disc, subsequent encounter -S230XXS Traumatic rupture of thoracic intervertebral disc, sequela -S23100A Subluxation of unspecified thoracic vertebra, initial encounter -S23100D Subluxation of unspecified thoracic vertebra, subsequent encounter -S23100S Subluxation of unspecified thoracic vertebra, sequela -S23101A Dislocation of unspecified thoracic vertebra, initial encounter -S23101D Dislocation of unspecified thoracic vertebra, subsequent encounter -S23101S Dislocation of unspecified thoracic vertebra, sequela -S23110A Subluxation of T1/T2 thoracic vertebra, initial encounter -S23110D Subluxation of T1/T2 thoracic vertebra, subsequent encounter -S23110S Subluxation of T1/T2 thoracic vertebra, sequela -S23111A Dislocation of T1/T2 thoracic vertebra, initial encounter -S23111D Dislocation of T1/T2 thoracic vertebra, subsequent encounter -S23111S Dislocation of T1/T2 thoracic vertebra, sequela -S23120A Subluxation of T2/T3 thoracic vertebra, initial encounter -S23120D Subluxation of T2/T3 thoracic vertebra, subsequent encounter -S23120S Subluxation of T2/T3 thoracic vertebra, sequela -S23121A Dislocation of T2/T3 thoracic vertebra, initial encounter -S23121D Dislocation of T2/T3 thoracic vertebra, subsequent encounter -S23121S Dislocation of T2/T3 thoracic vertebra, sequela -S23122A Subluxation of T3/T4 thoracic vertebra, initial encounter -S23122D Subluxation of T3/T4 thoracic vertebra, subsequent encounter -S23122S Subluxation of T3/T4 thoracic vertebra, sequela -S23123A Dislocation of T3/T4 thoracic vertebra, initial encounter -S23123D Dislocation of T3/T4 thoracic vertebra, subsequent encounter -S23123S Dislocation of T3/T4 thoracic vertebra, sequela -S23130A Subluxation of T4/T5 thoracic vertebra, initial encounter -S23130D Subluxation of T4/T5 thoracic vertebra, subsequent encounter -S23130S Subluxation of T4/T5 thoracic vertebra, sequela -S23131A Dislocation of T4/T5 thoracic vertebra, initial encounter -S23131D Dislocation of T4/T5 thoracic vertebra, subsequent encounter -S23131S Dislocation of T4/T5 thoracic vertebra, sequela -S23132A Subluxation of T5/T6 thoracic vertebra, initial encounter -S23132D Subluxation of T5/T6 thoracic vertebra, subsequent encounter -S23132S Subluxation of T5/T6 thoracic vertebra, sequela -S23133A Dislocation of T5/T6 thoracic vertebra, initial encounter -S23133D Dislocation of T5/T6 thoracic vertebra, subsequent encounter -S23133S Dislocation of T5/T6 thoracic vertebra, sequela -S23140A Subluxation of T6/T7 thoracic vertebra, initial encounter -S23140D Subluxation of T6/T7 thoracic vertebra, subsequent encounter -S23140S Subluxation of T6/T7 thoracic vertebra, sequela -S23141A Dislocation of T6/T7 thoracic vertebra, initial encounter -S23141D Dislocation of T6/T7 thoracic vertebra, subsequent encounter -S23141S Dislocation of T6/T7 thoracic vertebra, sequela -S23142A Subluxation of T7/T8 thoracic vertebra, initial encounter -S23142D Subluxation of T7/T8 thoracic vertebra, subsequent encounter -S23142S Subluxation of T7/T8 thoracic vertebra, sequela -S23143A Dislocation of T7/T8 thoracic vertebra, initial encounter -S23143D Dislocation of T7/T8 thoracic vertebra, subsequent encounter -S23143S Dislocation of T7/T8 thoracic vertebra, sequela -S23150A Subluxation of T8/T9 thoracic vertebra, initial encounter -S23150D Subluxation of T8/T9 thoracic vertebra, subsequent encounter -S23150S Subluxation of T8/T9 thoracic vertebra, sequela -S23151A Dislocation of T8/T9 thoracic vertebra, initial encounter -S23151D Dislocation of T8/T9 thoracic vertebra, subsequent encounter -S23151S Dislocation of T8/T9 thoracic vertebra, sequela -S23152A Subluxation of T9/T10 thoracic vertebra, initial encounter -S23152D Subluxation of T9/T10 thoracic vertebra, subsequent encounter -S23152S Subluxation of T9/T10 thoracic vertebra, sequela -S23153A Dislocation of T9/T10 thoracic vertebra, initial encounter -S23153D Dislocation of T9/T10 thoracic vertebra, subsequent encounter -S23153S Dislocation of T9/T10 thoracic vertebra, sequela -S23160A Subluxation of T10/T11 thoracic vertebra, initial encounter -S23160D Subluxation of T10/T11 thoracic vertebra, subsequent encounter -S23160S Subluxation of T10/T11 thoracic vertebra, sequela -S23161A Dislocation of T10/T11 thoracic vertebra, initial encounter -S23161D Dislocation of T10/T11 thoracic vertebra, subsequent encounter -S23161S Dislocation of T10/T11 thoracic vertebra, sequela -S23162A Subluxation of T11/T12 thoracic vertebra, initial encounter -S23162D Subluxation of T11/T12 thoracic vertebra, subsequent encounter -S23162S Subluxation of T11/T12 thoracic vertebra, sequela -S23163A Dislocation of T11/T12 thoracic vertebra, initial encounter -S23163D Dislocation of T11/T12 thoracic vertebra, subsequent encounter -S23163S Dislocation of T11/T12 thoracic vertebra, sequela -S23170A Subluxation of T12/L1 thoracic vertebra, initial encounter -S23170D Subluxation of T12/L1 thoracic vertebra, subsequent encounter -S23170S Subluxation of T12/L1 thoracic vertebra, sequela -S23171A Dislocation of T12/L1 thoracic vertebra, initial encounter -S23171D Dislocation of T12/L1 thoracic vertebra, subsequent encounter -S23171S Dislocation of T12/L1 thoracic vertebra, sequela -S2320XA Dislocation of unspecified part of thorax, initial encounter -S2320XD Dislocation of unspecified part of thorax, subsequent encounter -S2320XS Dislocation of unspecified part of thorax, sequela -S2329XA Dislocation of other parts of thorax, initial encounter -S2329XD Dislocation of other parts of thorax, subsequent encounter -S2329XS Dislocation of other parts of thorax, sequela -S233XXA Sprain of ligaments of thoracic spine, initial encounter -S233XXD Sprain of ligaments of thoracic spine, subsequent encounter -S233XXS Sprain of ligaments of thoracic spine, sequela -S2341XA Sprain of ribs, initial encounter -S2341XD Sprain of ribs, subsequent encounter -S2341XS Sprain of ribs, sequela -S23420A Sprain of sternoclavicular (joint) (ligament), initial encounter -S23420D Sprain of sternoclavicular (joint) (ligament), subsequent encounter -S23420S Sprain of sternoclavicular (joint) (ligament), sequela -S23421A Sprain of chondrosternal joint, initial encounter -S23421D Sprain of chondrosternal joint, subsequent encounter -S23421S Sprain of chondrosternal joint, sequela -S23428A Other sprain of sternum, initial encounter -S23428D Other sprain of sternum, subsequent encounter -S23428S Other sprain of sternum, sequela -S23429A Unspecified sprain of sternum, initial encounter -S23429D Unspecified sprain of sternum, subsequent encounter -S23429S Unspecified sprain of sternum, sequela -S238XXA Sprain of other specified parts of thorax, initial encounter -S238XXD Sprain of other specified parts of thorax, subsequent encounter -S238XXS Sprain of other specified parts of thorax, sequela -S239XXA Sprain of unspecified parts of thorax, initial encounter -S239XXD Sprain of unspecified parts of thorax, subsequent encounter -S239XXS Sprain of unspecified parts of thorax, sequela -S240XXA Concussion and edema of thoracic spinal cord, initial encounter -S240XXD Concussion and edema of thoracic spinal cord, subsequent encounter -S240XXS Concussion and edema of thoracic spinal cord, sequela -S24101A Unspecified injury at T1 level of thoracic spinal cord, initial encounter -S24101D Unspecified injury at T1 level of thoracic spinal cord, subsequent encounter -S24101S Unspecified injury at T1 level of thoracic spinal cord, sequela -S24102A Unspecified injury at T2-T6 level of thoracic spinal cord, initial encounter -S24102D Unspecified injury at T2-T6 level of thoracic spinal cord, subsequent encounter -S24102S Unspecified injury at T2-T6 level of thoracic spinal cord, sequela -S24103A Unspecified injury at T7-T10 level of thoracic spinal cord, initial encounter -S24103D Unspecified injury at T7-T10 level of thoracic spinal cord, subsequent encounter -S24103S Unspecified injury at T7-T10 level of thoracic spinal cord, sequela -S24104A Unspecified injury at T11-T12 level of thoracic spinal cord, initial encounter -S24104D Unspecified injury at T11-T12 level of thoracic spinal cord, subsequent encounter -S24104S Unspecified injury at T11-T12 level of thoracic spinal cord, sequela -S24109A Unspecified injury at unspecified level of thoracic spinal cord, initial encounter -S24109D Unspecified injury at unspecified level of thoracic spinal cord, subsequent encounter -S24109S Unspecified injury at unspecified level of thoracic spinal cord, sequela -S24111A Complete lesion at T1 level of thoracic spinal cord, initial encounter -S24111D Complete lesion at T1 level of thoracic spinal cord, subsequent encounter -S24111S Complete lesion at T1 level of thoracic spinal cord, sequela -S24112A Complete lesion at T2-T6 level of thoracic spinal cord, initial encounter -S24112D Complete lesion at T2-T6 level of thoracic spinal cord, subsequent encounter -S24112S Complete lesion at T2-T6 level of thoracic spinal cord, sequela -S24113A Complete lesion at T7-T10 level of thoracic spinal cord, initial encounter -S24113D Complete lesion at T7-T10 level of thoracic spinal cord, subsequent encounter -S24113S Complete lesion at T7-T10 level of thoracic spinal cord, sequela -S24114A Complete lesion at T11-T12 level of thoracic spinal cord, initial encounter -S24114D Complete lesion at T11-T12 level of thoracic spinal cord, subsequent encounter -S24114S Complete lesion at T11-T12 level of thoracic spinal cord, sequela -S24119A Complete lesion at unspecified level of thoracic spinal cord, initial encounter -S24119D Complete lesion at unspecified level of thoracic spinal cord, subsequent encounter -S24119S Complete lesion at unspecified level of thoracic spinal cord, sequela -S24131A Anterior cord syndrome at T1 level of thoracic spinal cord, initial encounter -S24131D Anterior cord syndrome at T1 level of thoracic spinal cord, subsequent encounter -S24131S Anterior cord syndrome at T1 level of thoracic spinal cord, sequela -S24132A Anterior cord syndrome at T2-T6 level of thoracic spinal cord, initial encounter -S24132D Anterior cord syndrome at T2-T6 level of thoracic spinal cord, subsequent encounter -S24132S Anterior cord syndrome at T2-T6 level of thoracic spinal cord, sequela -S24133A Anterior cord syndrome at T7-T10 level of thoracic spinal cord, initial encounter -S24133D Anterior cord syndrome at T7-T10 level of thoracic spinal cord, subsequent encounter -S24133S Anterior cord syndrome at T7-T10 level of thoracic spinal cord, sequela -S24134A Anterior cord syndrome at T11-T12 level of thoracic spinal cord, initial encounter -S24134D Anterior cord syndrome at T11-T12 level of thoracic spinal cord, subsequent encounter -S24134S Anterior cord syndrome at T11-T12 level of thoracic spinal cord, sequela -S24139A Anterior cord syndrome at unspecified level of thoracic spinal cord, initial encounter -S24139D Anterior cord syndrome at unspecified level of thoracic spinal cord, subsequent encounter -S24139S Anterior cord syndrome at unspecified level of thoracic spinal cord, sequela -S24141A Brown-Sequard syndrome at T1 level of thoracic spinal cord, initial encounter -S24141D Brown-Sequard syndrome at T1 level of thoracic spinal cord, subsequent encounter -S24141S Brown-Sequard syndrome at T1 level of thoracic spinal cord, sequela -S24142A Brown-Sequard syndrome at T2-T6 level of thoracic spinal cord, initial encounter -S24142D Brown-Sequard syndrome at T2-T6 level of thoracic spinal cord, subsequent encounter -S24142S Brown-Sequard syndrome at T2-T6 level of thoracic spinal cord, sequela -S24143A Brown-Sequard syndrome at T7-T10 level of thoracic spinal cord, initial encounter -S24143D Brown-Sequard syndrome at T7-T10 level of thoracic spinal cord, subsequent encounter -S24143S Brown-Sequard syndrome at T7-T10 level of thoracic spinal cord, sequela -S24144A Brown-Sequard syndrome at T11-T12 level of thoracic spinal cord, initial encounter -S24144D Brown-Sequard syndrome at T11-T12 level of thoracic spinal cord, subsequent encounter -S24144S Brown-Sequard syndrome at T11-T12 level of thoracic spinal cord, sequela -S24149A Brown-Sequard syndrome at unspecified level of thoracic spinal cord, initial encounter -S24149D Brown-Sequard syndrome at unspecified level of thoracic spinal cord, subsequent encounter -S24149S Brown-Sequard syndrome at unspecified level of thoracic spinal cord, sequela -S24151A Other incomplete lesion at T1 level of thoracic spinal cord, initial encounter -S24151D Other incomplete lesion at T1 level of thoracic spinal cord, subsequent encounter -S24151S Other incomplete lesion at T1 level of thoracic spinal cord, sequela -S24152A Other incomplete lesion at T2-T6 level of thoracic spinal cord, initial encounter -S24152D Other incomplete lesion at T2-T6 level of thoracic spinal cord, subsequent encounter -S24152S Other incomplete lesion at T2-T6 level of thoracic spinal cord, sequela -S24153A Other incomplete lesion at T7-T10 level of thoracic spinal cord, initial encounter -S24153D Other incomplete lesion at T7-T10 level of thoracic spinal cord, subsequent encounter -S24153S Other incomplete lesion at T7-T10 level of thoracic spinal cord, sequela -S24154A Other incomplete lesion at T11-T12 level of thoracic spinal cord, initial encounter -S24154D Other incomplete lesion at T11-T12 level of thoracic spinal cord, subsequent encounter -S24154S Other incomplete lesion at T11-T12 level of thoracic spinal cord, sequela -S24159A Other incomplete lesion at unspecified level of thoracic spinal cord, initial encounter -S24159D Other incomplete lesion at unspecified level of thoracic spinal cord, subsequent encounter -S24159S Other incomplete lesion at unspecified level of thoracic spinal cord, sequela -S242XXA Injury of nerve root of thoracic spine, initial encounter -S242XXD Injury of nerve root of thoracic spine, subsequent encounter -S242XXS Injury of nerve root of thoracic spine, sequela -S243XXA Injury of peripheral nerves of thorax, initial encounter -S243XXD Injury of peripheral nerves of thorax, subsequent encounter -S243XXS Injury of peripheral nerves of thorax, sequela -S244XXA Injury of thoracic sympathetic nervous system, initial encounter -S244XXD Injury of thoracic sympathetic nervous system, subsequent encounter -S244XXS Injury of thoracic sympathetic nervous system, sequela -S248XXA Injury of other specified nerves of thorax, initial encounter -S248XXD Injury of other specified nerves of thorax, subsequent encounter -S248XXS Injury of other specified nerves of thorax, sequela -S249XXA Injury of unspecified nerve of thorax, initial encounter -S249XXD Injury of unspecified nerve of thorax, subsequent encounter -S249XXS Injury of unspecified nerve of thorax, sequela -S2500XA Unspecified injury of thoracic aorta, initial encounter -S2500XD Unspecified injury of thoracic aorta, subsequent encounter -S2500XS Unspecified injury of thoracic aorta, sequela -S2501XA Minor laceration of thoracic aorta, initial encounter -S2501XD Minor laceration of thoracic aorta, subsequent encounter -S2501XS Minor laceration of thoracic aorta, sequela -S2502XA Major laceration of thoracic aorta, initial encounter -S2502XD Major laceration of thoracic aorta, subsequent encounter -S2502XS Major laceration of thoracic aorta, sequela -S2509XA Other specified injury of thoracic aorta, initial encounter -S2509XD Other specified injury of thoracic aorta, subsequent encounter -S2509XS Other specified injury of thoracic aorta, sequela -S25101A Unspecified injury of right innominate or subclavian artery, initial encounter -S25101D Unspecified injury of right innominate or subclavian artery, subsequent encounter -S25101S Unspecified injury of right innominate or subclavian artery, sequela -S25102A Unspecified injury of left innominate or subclavian artery, initial encounter -S25102D Unspecified injury of left innominate or subclavian artery, subsequent encounter -S25102S Unspecified injury of left innominate or subclavian artery, sequela -S25109A Unspecified injury of unspecified innominate or subclavian artery, initial encounter -S25109D Unspecified injury of unspecified innominate or subclavian artery, subsequent encounter -S25109S Unspecified injury of unspecified innominate or subclavian artery, sequela -S25111A Minor laceration of right innominate or subclavian artery, initial encounter -S25111D Minor laceration of right innominate or subclavian artery, subsequent encounter -S25111S Minor laceration of right innominate or subclavian artery, sequela -S25112A Minor laceration of left innominate or subclavian artery, initial encounter -S25112D Minor laceration of left innominate or subclavian artery, subsequent encounter -S25112S Minor laceration of left innominate or subclavian artery, sequela -S25119A Minor laceration of unspecified innominate or subclavian artery, initial encounter -S25119D Minor laceration of unspecified innominate or subclavian artery, subsequent encounter -S25119S Minor laceration of unspecified innominate or subclavian artery, sequela -S25121A Major laceration of right innominate or subclavian artery, initial encounter -S25121D Major laceration of right innominate or subclavian artery, subsequent encounter -S25121S Major laceration of right innominate or subclavian artery, sequela -S25122A Major laceration of left innominate or subclavian artery, initial encounter -S25122D Major laceration of left innominate or subclavian artery, subsequent encounter -S25122S Major laceration of left innominate or subclavian artery, sequela -S25129A Major laceration of unspecified innominate or subclavian artery, initial encounter -S25129D Major laceration of unspecified innominate or subclavian artery, subsequent encounter -S25129S Major laceration of unspecified innominate or subclavian artery, sequela -S25191A Other specified injury of right innominate or subclavian artery, initial encounter -S25191D Other specified injury of right innominate or subclavian artery, subsequent encounter -S25191S Other specified injury of right innominate or subclavian artery, sequela -S25192A Other specified injury of left innominate or subclavian artery, initial encounter -S25192D Other specified injury of left innominate or subclavian artery, subsequent encounter -S25192S Other specified injury of left innominate or subclavian artery, sequela -S25199A Other specified injury of unspecified innominate or subclavian artery, initial encounter -S25199D Other specified injury of unspecified innominate or subclavian artery, subsequent encounter -S25199S Other specified injury of unspecified innominate or subclavian artery, sequela -S2520XA Unspecified injury of superior vena cava, initial encounter -S2520XD Unspecified injury of superior vena cava, subsequent encounter -S2520XS Unspecified injury of superior vena cava, sequela -S2521XA Minor laceration of superior vena cava, initial encounter -S2521XD Minor laceration of superior vena cava, subsequent encounter -S2521XS Minor laceration of superior vena cava, sequela -S2522XA Major laceration of superior vena cava, initial encounter -S2522XD Major laceration of superior vena cava, subsequent encounter -S2522XS Major laceration of superior vena cava, sequela -S2529XA Other specified injury of superior vena cava, initial encounter -S2529XD Other specified injury of superior vena cava, subsequent encounter -S2529XS Other specified injury of superior vena cava, sequela -S25301A Unspecified injury of right innominate or subclavian vein, initial encounter -S25301D Unspecified injury of right innominate or subclavian vein, subsequent encounter -S25301S Unspecified injury of right innominate or subclavian vein, sequela -S25302A Unspecified injury of left innominate or subclavian vein, initial encounter -S25302D Unspecified injury of left innominate or subclavian vein, subsequent encounter -S25302S Unspecified injury of left innominate or subclavian vein, sequela -S25309A Unspecified injury of unspecified innominate or subclavian vein, initial encounter -S25309D Unspecified injury of unspecified innominate or subclavian vein, subsequent encounter -S25309S Unspecified injury of unspecified innominate or subclavian vein, sequela -S25311A Minor laceration of right innominate or subclavian vein, initial encounter -S25311D Minor laceration of right innominate or subclavian vein, subsequent encounter -S25311S Minor laceration of right innominate or subclavian vein, sequela -S25312A Minor laceration of left innominate or subclavian vein, initial encounter -S25312D Minor laceration of left innominate or subclavian vein, subsequent encounter -S25312S Minor laceration of left innominate or subclavian vein, sequela -S25319A Minor laceration of unspecified innominate or subclavian vein, initial encounter -S25319D Minor laceration of unspecified innominate or subclavian vein, subsequent encounter -S25319S Minor laceration of unspecified innominate or subclavian vein, sequela -S25321A Major laceration of right innominate or subclavian vein, initial encounter -S25321D Major laceration of right innominate or subclavian vein, subsequent encounter -S25321S Major laceration of right innominate or subclavian vein, sequela -S25322A Major laceration of left innominate or subclavian vein, initial encounter -S25322D Major laceration of left innominate or subclavian vein, subsequent encounter -S25322S Major laceration of left innominate or subclavian vein, sequela -S25329A Major laceration of unspecified innominate or subclavian vein, initial encounter -S25329D Major laceration of unspecified innominate or subclavian vein, subsequent encounter -S25329S Major laceration of unspecified innominate or subclavian vein, sequela -S25391A Other specified injury of right innominate or subclavian vein, initial encounter -S25391D Other specified injury of right innominate or subclavian vein, subsequent encounter -S25391S Other specified injury of right innominate or subclavian vein, sequela -S25392A Other specified injury of left innominate or subclavian vein, initial encounter -S25392D Other specified injury of left innominate or subclavian vein, subsequent encounter -S25392S Other specified injury of left innominate or subclavian vein, sequela -S25399A Other specified injury of unspecified innominate or subclavian vein, initial encounter -S25399D Other specified injury of unspecified innominate or subclavian vein, subsequent encounter -S25399S Other specified injury of unspecified innominate or subclavian vein, sequela -S25401A Unspecified injury of right pulmonary blood vessels, initial encounter -S25401D Unspecified injury of right pulmonary blood vessels, subsequent encounter -S25401S Unspecified injury of right pulmonary blood vessels, sequela -S25402A Unspecified injury of left pulmonary blood vessels, initial encounter -S25402D Unspecified injury of left pulmonary blood vessels, subsequent encounter -S25402S Unspecified injury of left pulmonary blood vessels, sequela -S25409A Unspecified injury of unspecified pulmonary blood vessels, initial encounter -S25409D Unspecified injury of unspecified pulmonary blood vessels, subsequent encounter -S25409S Unspecified injury of unspecified pulmonary blood vessels, sequela -S25411A Minor laceration of right pulmonary blood vessels, initial encounter -S25411D Minor laceration of right pulmonary blood vessels, subsequent encounter -S25411S Minor laceration of right pulmonary blood vessels, sequela -S25412A Minor laceration of left pulmonary blood vessels, initial encounter -S25412D Minor laceration of left pulmonary blood vessels, subsequent encounter -S25412S Minor laceration of left pulmonary blood vessels, sequela -S25419A Minor laceration of unspecified pulmonary blood vessels, initial encounter -S25419D Minor laceration of unspecified pulmonary blood vessels, subsequent encounter -S25419S Minor laceration of unspecified pulmonary blood vessels, sequela -S25421A Major laceration of right pulmonary blood vessels, initial encounter -S25421D Major laceration of right pulmonary blood vessels, subsequent encounter -S25421S Major laceration of right pulmonary blood vessels, sequela -S25422A Major laceration of left pulmonary blood vessels, initial encounter -S25422D Major laceration of left pulmonary blood vessels, subsequent encounter -S25422S Major laceration of left pulmonary blood vessels, sequela -S25429A Major laceration of unspecified pulmonary blood vessels, initial encounter -S25429D Major laceration of unspecified pulmonary blood vessels, subsequent encounter -S25429S Major laceration of unspecified pulmonary blood vessels, sequela -S25491A Other specified injury of right pulmonary blood vessels, initial encounter -S25491D Other specified injury of right pulmonary blood vessels, subsequent encounter -S25491S Other specified injury of right pulmonary blood vessels, sequela -S25492A Other specified injury of left pulmonary blood vessels, initial encounter -S25492D Other specified injury of left pulmonary blood vessels, subsequent encounter -S25492S Other specified injury of left pulmonary blood vessels, sequela -S25499A Other specified injury of unspecified pulmonary blood vessels, initial encounter -S25499D Other specified injury of unspecified pulmonary blood vessels, subsequent encounter -S25499S Other specified injury of unspecified pulmonary blood vessels, sequela -S25501A Unspecified injury of intercostal blood vessels, right side, initial encounter -S25501D Unspecified injury of intercostal blood vessels, right side, subsequent encounter -S25501S Unspecified injury of intercostal blood vessels, right side, sequela -S25502A Unspecified injury of intercostal blood vessels, left side, initial encounter -S25502D Unspecified injury of intercostal blood vessels, left side, subsequent encounter -S25502S Unspecified injury of intercostal blood vessels, left side, sequela -S25509A Unspecified injury of intercostal blood vessels, unspecified side, initial encounter -S25509D Unspecified injury of intercostal blood vessels, unspecified side, subsequent encounter -S25509S Unspecified injury of intercostal blood vessels, unspecified side, sequela -S25511A Laceration of intercostal blood vessels, right side, initial encounter -S25511D Laceration of intercostal blood vessels, right side, subsequent encounter -S25511S Laceration of intercostal blood vessels, right side, sequela -S25512A Laceration of intercostal blood vessels, left side, initial encounter -S25512D Laceration of intercostal blood vessels, left side, subsequent encounter -S25512S Laceration of intercostal blood vessels, left side, sequela -S25519A Laceration of intercostal blood vessels, unspecified side, initial encounter -S25519D Laceration of intercostal blood vessels, unspecified side, subsequent encounter -S25519S Laceration of intercostal blood vessels, unspecified side, sequela -S25591A Other specified injury of intercostal blood vessels, right side, initial encounter -S25591D Other specified injury of intercostal blood vessels, right side, subsequent encounter -S25591S Other specified injury of intercostal blood vessels, right side, sequela -S25592A Other specified injury of intercostal blood vessels, left side, initial encounter -S25592D Other specified injury of intercostal blood vessels, left side, subsequent encounter -S25592S Other specified injury of intercostal blood vessels, left side, sequela -S25599A Other specified injury of intercostal blood vessels, unspecified side, initial encounter -S25599D Other specified injury of intercostal blood vessels, unspecified side, subsequent encounter -S25599S Other specified injury of intercostal blood vessels, unspecified side, sequela -S25801A Unspecified injury of other blood vessels of thorax, right side, initial encounter -S25801D Unspecified injury of other blood vessels of thorax, right side, subsequent encounter -S25801S Unspecified injury of other blood vessels of thorax, right side, sequela -S25802A Unspecified injury of other blood vessels of thorax, left side, initial encounter -S25802D Unspecified injury of other blood vessels of thorax, left side, subsequent encounter -S25802S Unspecified injury of other blood vessels of thorax, left side, sequela -S25809A Unspecified injury of other blood vessels of thorax, unspecified side, initial encounter -S25809D Unspecified injury of other blood vessels of thorax, unspecified side, subsequent encounter -S25809S Unspecified injury of other blood vessels of thorax, unspecified side, sequela -S25811A Laceration of other blood vessels of thorax, right side, initial encounter -S25811D Laceration of other blood vessels of thorax, right side, subsequent encounter -S25811S Laceration of other blood vessels of thorax, right side, sequela -S25812A Laceration of other blood vessels of thorax, left side, initial encounter -S25812D Laceration of other blood vessels of thorax, left side, subsequent encounter -S25812S Laceration of other blood vessels of thorax, left side, sequela -S25819A Laceration of other blood vessels of thorax, unspecified side, initial encounter -S25819D Laceration of other blood vessels of thorax, unspecified side, subsequent encounter -S25819S Laceration of other blood vessels of thorax, unspecified side, sequela -S25891A Other specified injury of other blood vessels of thorax, right side, initial encounter -S25891D Other specified injury of other blood vessels of thorax, right side, subsequent encounter -S25891S Other specified injury of other blood vessels of thorax, right side, sequela -S25892A Other specified injury of other blood vessels of thorax, left side, initial encounter -S25892D Other specified injury of other blood vessels of thorax, left side, subsequent encounter -S25892S Other specified injury of other blood vessels of thorax, left side, sequela -S25899A Other specified injury of other blood vessels of thorax, unspecified side, initial encounter -S25899D Other specified injury of other blood vessels of thorax, unspecified side, subsequent encounter -S25899S Other specified injury of other blood vessels of thorax, unspecified side, sequela -S2590XA Unspecified injury of unspecified blood vessel of thorax, initial encounter -S2590XD Unspecified injury of unspecified blood vessel of thorax, subsequent encounter -S2590XS Unspecified injury of unspecified blood vessel of thorax, sequela -S2591XA Laceration of unspecified blood vessel of thorax, initial encounter -S2591XD Laceration of unspecified blood vessel of thorax, subsequent encounter -S2591XS Laceration of unspecified blood vessel of thorax, sequela -S2599XA Other specified injury of unspecified blood vessel of thorax, initial encounter -S2599XD Other specified injury of unspecified blood vessel of thorax, subsequent encounter -S2599XS Other specified injury of unspecified blood vessel of thorax, sequela -S2600XA Unspecified injury of heart with hemopericardium, initial encounter -S2600XD Unspecified injury of heart with hemopericardium, subsequent encounter -S2600XS Unspecified injury of heart with hemopericardium, sequela -S2601XA Contusion of heart with hemopericardium, initial encounter -S2601XD Contusion of heart with hemopericardium, subsequent encounter -S2601XS Contusion of heart with hemopericardium, sequela -S26020A Mild laceration of heart with hemopericardium, initial encounter -S26020D Mild laceration of heart with hemopericardium, subsequent encounter -S26020S Mild laceration of heart with hemopericardium, sequela -S26021A Moderate laceration of heart with hemopericardium, initial encounter -S26021D Moderate laceration of heart with hemopericardium, subsequent encounter -S26021S Moderate laceration of heart with hemopericardium, sequela -S26022A Major laceration of heart with hemopericardium, initial encounter -S26022D Major laceration of heart with hemopericardium, subsequent encounter -S26022S Major laceration of heart with hemopericardium, sequela -S2609XA Other injury of heart with hemopericardium, initial encounter -S2609XD Other injury of heart with hemopericardium, subsequent encounter -S2609XS Other injury of heart with hemopericardium, sequela -S2610XA Unspecified injury of heart without hemopericardium, initial encounter -S2610XD Unspecified injury of heart without hemopericardium, subsequent encounter -S2610XS Unspecified injury of heart without hemopericardium, sequela -S2611XA Contusion of heart without hemopericardium, initial encounter -S2611XD Contusion of heart without hemopericardium, subsequent encounter -S2611XS Contusion of heart without hemopericardium, sequela -S2612XA Laceration of heart without hemopericardium, initial encounter -S2612XD Laceration of heart without hemopericardium, subsequent encounter -S2612XS Laceration of heart without hemopericardium, sequela -S2619XA Other injury of heart without hemopericardium, initial encounter -S2619XD Other injury of heart without hemopericardium, subsequent encounter -S2619XS Other injury of heart without hemopericardium, sequela -S2690XA Unspecified injury of heart, unspecified with or without hemopericardium, initial encounter -S2690XD Unspecified injury of heart, unspecified with or without hemopericardium, subsequent encounter -S2690XS Unspecified injury of heart, unspecified with or without hemopericardium, sequela -S2691XA Contusion of heart, unspecified with or without hemopericardium, initial encounter -S2691XD Contusion of heart, unspecified with or without hemopericardium, subsequent encounter -S2691XS Contusion of heart, unspecified with or without hemopericardium, sequela -S2692XA Laceration of heart, unspecified with or without hemopericardium, initial encounter -S2692XD Laceration of heart, unspecified with or without hemopericardium, subsequent encounter -S2692XS Laceration of heart, unspecified with or without hemopericardium, sequela -S2699XA Other injury of heart, unspecified with or without hemopericardium, initial encounter -S2699XD Other injury of heart, unspecified with or without hemopericardium, subsequent encounter -S2699XS Other injury of heart, unspecified with or without hemopericardium, sequela -S270XXA Traumatic pneumothorax, initial encounter -S270XXD Traumatic pneumothorax, subsequent encounter -S270XXS Traumatic pneumothorax, sequela -S271XXA Traumatic hemothorax, initial encounter -S271XXD Traumatic hemothorax, subsequent encounter -S271XXS Traumatic hemothorax, sequela -S272XXA Traumatic hemopneumothorax, initial encounter -S272XXD Traumatic hemopneumothorax, subsequent encounter -S272XXS Traumatic hemopneumothorax, sequela -S27301A Unspecified injury of lung, unilateral, initial encounter -S27301D Unspecified injury of lung, unilateral, subsequent encounter -S27301S Unspecified injury of lung, unilateral, sequela -S27302A Unspecified injury of lung, bilateral, initial encounter -S27302D Unspecified injury of lung, bilateral, subsequent encounter -S27302S Unspecified injury of lung, bilateral, sequela -S27309A Unspecified injury of lung, unspecified, initial encounter -S27309D Unspecified injury of lung, unspecified, subsequent encounter -S27309S Unspecified injury of lung, unspecified, sequela -S27311A Primary blast injury of lung, unilateral, initial encounter -S27311D Primary blast injury of lung, unilateral, subsequent encounter -S27311S Primary blast injury of lung, unilateral, sequela -S27312A Primary blast injury of lung, bilateral, initial encounter -S27312D Primary blast injury of lung, bilateral, subsequent encounter -S27312S Primary blast injury of lung, bilateral, sequela -S27319A Primary blast injury of lung, unspecified, initial encounter -S27319D Primary blast injury of lung, unspecified, subsequent encounter -S27319S Primary blast injury of lung, unspecified, sequela -S27321A Contusion of lung, unilateral, initial encounter -S27321D Contusion of lung, unilateral, subsequent encounter -S27321S Contusion of lung, unilateral, sequela -S27322A Contusion of lung, bilateral, initial encounter -S27322D Contusion of lung, bilateral, subsequent encounter -S27322S Contusion of lung, bilateral, sequela -S27329A Contusion of lung, unspecified, initial encounter -S27329D Contusion of lung, unspecified, subsequent encounter -S27329S Contusion of lung, unspecified, sequela -S27331A Laceration of lung, unilateral, initial encounter -S27331D Laceration of lung, unilateral, subsequent encounter -S27331S Laceration of lung, unilateral, sequela -S27332A Laceration of lung, bilateral, initial encounter -S27332D Laceration of lung, bilateral, subsequent encounter -S27332S Laceration of lung, bilateral, sequela -S27339A Laceration of lung, unspecified, initial encounter -S27339D Laceration of lung, unspecified, subsequent encounter -S27339S Laceration of lung, unspecified, sequela -S27391A Other injuries of lung, unilateral, initial encounter -S27391D Other injuries of lung, unilateral, subsequent encounter -S27391S Other injuries of lung, unilateral, sequela -S27392A Other injuries of lung, bilateral, initial encounter -S27392D Other injuries of lung, bilateral, subsequent encounter -S27392S Other injuries of lung, bilateral, sequela -S27399A Other injuries of lung, unspecified, initial encounter -S27399D Other injuries of lung, unspecified, subsequent encounter -S27399S Other injuries of lung, unspecified, sequela -S27401A Unspecified injury of bronchus, unilateral, initial encounter -S27401D Unspecified injury of bronchus, unilateral, subsequent encounter -S27401S Unspecified injury of bronchus, unilateral, sequela -S27402A Unspecified injury of bronchus, bilateral, initial encounter -S27402D Unspecified injury of bronchus, bilateral, subsequent encounter -S27402S Unspecified injury of bronchus, bilateral, sequela -S27409A Unspecified injury of bronchus, unspecified, initial encounter -S27409D Unspecified injury of bronchus, unspecified, subsequent encounter -S27409S Unspecified injury of bronchus, unspecified, sequela -S27411A Primary blast injury of bronchus, unilateral, initial encounter -S27411D Primary blast injury of bronchus, unilateral, subsequent encounter -S27411S Primary blast injury of bronchus, unilateral, sequela -S27412A Primary blast injury of bronchus, bilateral, initial encounter -S27412D Primary blast injury of bronchus, bilateral, subsequent encounter -S27412S Primary blast injury of bronchus, bilateral, sequela -S27419A Primary blast injury of bronchus, unspecified, initial encounter -S27419D Primary blast injury of bronchus, unspecified, subsequent encounter -S27419S Primary blast injury of bronchus, unspecified, sequela -S27421A Contusion of bronchus, unilateral, initial encounter -S27421D Contusion of bronchus, unilateral, subsequent encounter -S27421S Contusion of bronchus, unilateral, sequela -S27422A Contusion of bronchus, bilateral, initial encounter -S27422D Contusion of bronchus, bilateral, subsequent encounter -S27422S Contusion of bronchus, bilateral, sequela -S27429A Contusion of bronchus, unspecified, initial encounter -S27429D Contusion of bronchus, unspecified, subsequent encounter -S27429S Contusion of bronchus, unspecified, sequela -S27431A Laceration of bronchus, unilateral, initial encounter -S27431D Laceration of bronchus, unilateral, subsequent encounter -S27431S Laceration of bronchus, unilateral, sequela -S27432A Laceration of bronchus, bilateral, initial encounter -S27432D Laceration of bronchus, bilateral, subsequent encounter -S27432S Laceration of bronchus, bilateral, sequela -S27439A Laceration of bronchus, unspecified, initial encounter -S27439D Laceration of bronchus, unspecified, subsequent encounter -S27439S Laceration of bronchus, unspecified, sequela -S27491A Other injury of bronchus, unilateral, initial encounter -S27491D Other injury of bronchus, unilateral, subsequent encounter -S27491S Other injury of bronchus, unilateral, sequela -S27492A Other injury of bronchus, bilateral, initial encounter -S27492D Other injury of bronchus, bilateral, subsequent encounter -S27492S Other injury of bronchus, bilateral, sequela -S27499A Other injury of bronchus, unspecified, initial encounter -S27499D Other injury of bronchus, unspecified, subsequent encounter -S27499S Other injury of bronchus, unspecified, sequela -S2750XA Unspecified injury of thoracic trachea, initial encounter -S2750XD Unspecified injury of thoracic trachea, subsequent encounter -S2750XS Unspecified injury of thoracic trachea, sequela -S2751XA Primary blast injury of thoracic trachea, initial encounter -S2751XD Primary blast injury of thoracic trachea, subsequent encounter -S2751XS Primary blast injury of thoracic trachea, sequela -S2752XA Contusion of thoracic trachea, initial encounter -S2752XD Contusion of thoracic trachea, subsequent encounter -S2752XS Contusion of thoracic trachea, sequela -S2753XA Laceration of thoracic trachea, initial encounter -S2753XD Laceration of thoracic trachea, subsequent encounter -S2753XS Laceration of thoracic trachea, sequela -S2759XA Other injury of thoracic trachea, initial encounter -S2759XD Other injury of thoracic trachea, subsequent encounter -S2759XS Other injury of thoracic trachea, sequela -S2760XA Unspecified injury of pleura, initial encounter -S2760XD Unspecified injury of pleura, subsequent encounter -S2760XS Unspecified injury of pleura, sequela -S2763XA Laceration of pleura, initial encounter -S2763XD Laceration of pleura, subsequent encounter -S2763XS Laceration of pleura, sequela -S2769XA Other injury of pleura, initial encounter -S2769XD Other injury of pleura, subsequent encounter -S2769XS Other injury of pleura, sequela -S27802A Contusion of diaphragm, initial encounter -S27802D Contusion of diaphragm, subsequent encounter -S27802S Contusion of diaphragm, sequela -S27803A Laceration of diaphragm, initial encounter -S27803D Laceration of diaphragm, subsequent encounter -S27803S Laceration of diaphragm, sequela -S27808A Other injury of diaphragm, initial encounter -S27808D Other injury of diaphragm, subsequent encounter -S27808S Other injury of diaphragm, sequela -S27809A Unspecified injury of diaphragm, initial encounter -S27809D Unspecified injury of diaphragm, subsequent encounter -S27809S Unspecified injury of diaphragm, sequela -S27812A Contusion of esophagus (thoracic part), initial encounter -S27812D Contusion of esophagus (thoracic part), subsequent encounter -S27812S Contusion of esophagus (thoracic part), sequela -S27813A Laceration of esophagus (thoracic part), initial encounter -S27813D Laceration of esophagus (thoracic part), subsequent encounter -S27813S Laceration of esophagus (thoracic part), sequela -S27818A Other injury of esophagus (thoracic part), initial encounter -S27818D Other injury of esophagus (thoracic part), subsequent encounter -S27818S Other injury of esophagus (thoracic part), sequela -S27819A Unspecified injury of esophagus (thoracic part), initial encounter -S27819D Unspecified injury of esophagus (thoracic part), subsequent encounter -S27819S Unspecified injury of esophagus (thoracic part), sequela -S27892A Contusion of other specified intrathoracic organs, initial encounter -S27892D Contusion of other specified intrathoracic organs, subsequent encounter -S27892S Contusion of other specified intrathoracic organs, sequela -S27893A Laceration of other specified intrathoracic organs, initial encounter -S27893D Laceration of other specified intrathoracic organs, subsequent encounter -S27893S Laceration of other specified intrathoracic organs, sequela -S27898A Other injury of other specified intrathoracic organs, initial encounter -S27898D Other injury of other specified intrathoracic organs, subsequent encounter -S27898S Other injury of other specified intrathoracic organs, sequela -S27899A Unspecified injury of other specified intrathoracic organs, initial encounter -S27899D Unspecified injury of other specified intrathoracic organs, subsequent encounter -S27899S Unspecified injury of other specified intrathoracic organs, sequela -S279XXA Injury of unspecified intrathoracic organ, initial encounter -S279XXD Injury of unspecified intrathoracic organ, subsequent encounter -S279XXS Injury of unspecified intrathoracic organ, sequela -S280XXA Crushed chest, initial encounter -S280XXD Crushed chest, subsequent encounter -S280XXS Crushed chest, sequela -S281XXA Traumatic amputation (partial) of part of thorax, except breast, initial encounter -S281XXD Traumatic amputation (partial) of part of thorax, except breast, subsequent encounter -S281XXS Traumatic amputation (partial) of part of thorax, except breast, sequela -S28211A Complete traumatic amputation of right breast, initial encounter -S28211D Complete traumatic amputation of right breast, subsequent encounter -S28211S Complete traumatic amputation of right breast, sequela -S28212A Complete traumatic amputation of left breast, initial encounter -S28212D Complete traumatic amputation of left breast, subsequent encounter -S28212S Complete traumatic amputation of left breast, sequela -S28219A Complete traumatic amputation of unspecified breast, initial encounter -S28219D Complete traumatic amputation of unspecified breast, subsequent encounter -S28219S Complete traumatic amputation of unspecified breast, sequela -S28221A Partial traumatic amputation of right breast, initial encounter -S28221D Partial traumatic amputation of right breast, subsequent encounter -S28221S Partial traumatic amputation of right breast, sequela -S28222A Partial traumatic amputation of left breast, initial encounter -S28222D Partial traumatic amputation of left breast, subsequent encounter -S28222S Partial traumatic amputation of left breast, sequela -S28229A Partial traumatic amputation of unspecified breast, initial encounter -S28229D Partial traumatic amputation of unspecified breast, subsequent encounter -S28229S Partial traumatic amputation of unspecified breast, sequela -S29001A Unspecified injury of muscle and tendon of front wall of thorax, initial encounter -S29001D Unspecified injury of muscle and tendon of front wall of thorax, subsequent encounter -S29001S Unspecified injury of muscle and tendon of front wall of thorax, sequela -S29002A Unspecified injury of muscle and tendon of back wall of thorax, initial encounter -S29002D Unspecified injury of muscle and tendon of back wall of thorax, subsequent encounter -S29002S Unspecified injury of muscle and tendon of back wall of thorax, sequela -S29009A Unspecified injury of muscle and tendon of unspecified wall of thorax, initial encounter -S29009D Unspecified injury of muscle and tendon of unspecified wall of thorax, subsequent encounter -S29009S Unspecified injury of muscle and tendon of unspecified wall of thorax, sequela -S29011A Strain of muscle and tendon of front wall of thorax, initial encounter -S29011D Strain of muscle and tendon of front wall of thorax, subsequent encounter -S29011S Strain of muscle and tendon of front wall of thorax, sequela -S29012A Strain of muscle and tendon of back wall of thorax, initial encounter -S29012D Strain of muscle and tendon of back wall of thorax, subsequent encounter -S29012S Strain of muscle and tendon of back wall of thorax, sequela -S29019A Strain of muscle and tendon of unspecified wall of thorax, initial encounter -S29019D Strain of muscle and tendon of unspecified wall of thorax, subsequent encounter -S29019S Strain of muscle and tendon of unspecified wall of thorax, sequela -S29021A Laceration of muscle and tendon of front wall of thorax, initial encounter -S29021D Laceration of muscle and tendon of front wall of thorax, subsequent encounter -S29021S Laceration of muscle and tendon of front wall of thorax, sequela -S29022A Laceration of muscle and tendon of back wall of thorax, initial encounter -S29022D Laceration of muscle and tendon of back wall of thorax, subsequent encounter -S29022S Laceration of muscle and tendon of back wall of thorax, sequela -S29029A Laceration of muscle and tendon of unspecified wall of thorax, initial encounter -S29029D Laceration of muscle and tendon of unspecified wall of thorax, subsequent encounter -S29029S Laceration of muscle and tendon of unspecified wall of thorax, sequela -S29091A Other injury of muscle and tendon of front wall of thorax, initial encounter -S29091D Other injury of muscle and tendon of front wall of thorax, subsequent encounter -S29091S Other injury of muscle and tendon of front wall of thorax, sequela -S29092A Other injury of muscle and tendon of back wall of thorax, initial encounter -S29092D Other injury of muscle and tendon of back wall of thorax, subsequent encounter -S29092S Other injury of muscle and tendon of back wall of thorax, sequela -S29099A Other injury of muscle and tendon of unspecified wall of thorax, initial encounter -S29099D Other injury of muscle and tendon of unspecified wall of thorax, subsequent encounter -S29099S Other injury of muscle and tendon of unspecified wall of thorax, sequela -S298XXA Other specified injuries of thorax, initial encounter -S298XXD Other specified injuries of thorax, subsequent encounter -S298XXS Other specified injuries of thorax, sequela -S299XXA Unspecified injury of thorax, initial encounter -S299XXD Unspecified injury of thorax, subsequent encounter -S299XXS Unspecified injury of thorax, sequela -S300XXA Contusion of lower back and pelvis, initial encounter -S300XXD Contusion of lower back and pelvis, subsequent encounter -S300XXS Contusion of lower back and pelvis, sequela -S301XXA Contusion of abdominal wall, initial encounter -S301XXD Contusion of abdominal wall, subsequent encounter -S301XXS Contusion of abdominal wall, sequela -S30201A Contusion of unspecified external genital organ, male, initial encounter -S30201D Contusion of unspecified external genital organ, male, subsequent encounter -S30201S Contusion of unspecified external genital organ, male, sequela -S30202A Contusion of unspecified external genital organ, female, initial encounter -S30202D Contusion of unspecified external genital organ, female, subsequent encounter -S30202S Contusion of unspecified external genital organ, female, sequela -S3021XA Contusion of penis, initial encounter -S3021XD Contusion of penis, subsequent encounter -S3021XS Contusion of penis, sequela -S3022XA Contusion of scrotum and testes, initial encounter -S3022XD Contusion of scrotum and testes, subsequent encounter -S3022XS Contusion of scrotum and testes, sequela -S3023XA Contusion of vagina and vulva, initial encounter -S3023XD Contusion of vagina and vulva, subsequent encounter -S3023XS Contusion of vagina and vulva, sequela -S303XXA Contusion of anus, initial encounter -S303XXD Contusion of anus, subsequent encounter -S303XXS Contusion of anus, sequela -S30810A Abrasion of lower back and pelvis, initial encounter -S30810D Abrasion of lower back and pelvis, subsequent encounter -S30810S Abrasion of lower back and pelvis, sequela -S30811A Abrasion of abdominal wall, initial encounter -S30811D Abrasion of abdominal wall, subsequent encounter -S30811S Abrasion of abdominal wall, sequela -S30812A Abrasion of penis, initial encounter -S30812D Abrasion of penis, subsequent encounter -S30812S Abrasion of penis, sequela -S30813A Abrasion of scrotum and testes, initial encounter -S30813D Abrasion of scrotum and testes, subsequent encounter -S30813S Abrasion of scrotum and testes, sequela -S30814A Abrasion of vagina and vulva, initial encounter -S30814D Abrasion of vagina and vulva, subsequent encounter -S30814S Abrasion of vagina and vulva, sequela -S30815A Abrasion of unspecified external genital organs, male, initial encounter -S30815D Abrasion of unspecified external genital organs, male, subsequent encounter -S30815S Abrasion of unspecified external genital organs, male, sequela -S30816A Abrasion of unspecified external genital organs, female, initial encounter -S30816D Abrasion of unspecified external genital organs, female, subsequent encounter -S30816S Abrasion of unspecified external genital organs, female, sequela -S30817A Abrasion of anus, initial encounter -S30817D Abrasion of anus, subsequent encounter -S30817S Abrasion of anus, sequela -S30820A Blister (nonthermal) of lower back and pelvis, initial encounter -S30820D Blister (nonthermal) of lower back and pelvis, subsequent encounter -S30820S Blister (nonthermal) of lower back and pelvis, sequela -S30821A Blister (nonthermal) of abdominal wall, initial encounter -S30821D Blister (nonthermal) of abdominal wall, subsequent encounter -S30821S Blister (nonthermal) of abdominal wall, sequela -S30822A Blister (nonthermal) of penis, initial encounter -S30822D Blister (nonthermal) of penis, subsequent encounter -S30822S Blister (nonthermal) of penis, sequela -S30823A Blister (nonthermal) of scrotum and testes, initial encounter -S30823D Blister (nonthermal) of scrotum and testes, subsequent encounter -S30823S Blister (nonthermal) of scrotum and testes, sequela -S30824A Blister (nonthermal) of vagina and vulva, initial encounter -S30824D Blister (nonthermal) of vagina and vulva, subsequent encounter -S30824S Blister (nonthermal) of vagina and vulva, sequela -S30825A Blister (nonthermal) of unspecified external genital organs, male, initial encounter -S30825D Blister (nonthermal) of unspecified external genital organs, male, subsequent encounter -S30825S Blister (nonthermal) of unspecified external genital organs, male, sequela -S30826A Blister (nonthermal) of unspecified external genital organs, female, initial encounter -S30826D Blister (nonthermal) of unspecified external genital organs, female, subsequent encounter -S30826S Blister (nonthermal) of unspecified external genital organs, female, sequela -S30827A Blister (nonthermal) of anus, initial encounter -S30827D Blister (nonthermal) of anus, subsequent encounter -S30827S Blister (nonthermal) of anus, sequela -S30840A External constriction of lower back and pelvis, initial encounter -S30840D External constriction of lower back and pelvis, subsequent encounter -S30840S External constriction of lower back and pelvis, sequela -S30841A External constriction of abdominal wall, initial encounter -S30841D External constriction of abdominal wall, subsequent encounter -S30841S External constriction of abdominal wall, sequela -S30842A External constriction of penis, initial encounter -S30842D External constriction of penis, subsequent encounter -S30842S External constriction of penis, sequela -S30843A External constriction of scrotum and testes, initial encounter -S30843D External constriction of scrotum and testes, subsequent encounter -S30843S External constriction of scrotum and testes, sequela -S30844A External constriction of vagina and vulva, initial encounter -S30844D External constriction of vagina and vulva, subsequent encounter -S30844S External constriction of vagina and vulva, sequela -S30845A External constriction of unspecified external genital organs, male, initial encounter -S30845D External constriction of unspecified external genital organs, male, subsequent encounter -S30845S External constriction of unspecified external genital organs, male, sequela -S30846A External constriction of unspecified external genital organs, female, initial encounter -S30846D External constriction of unspecified external genital organs, female, subsequent encounter -S30846S External constriction of unspecified external genital organs, female, sequela -S30850A Superficial foreign body of lower back and pelvis, initial encounter -S30850D Superficial foreign body of lower back and pelvis, subsequent encounter -S30850S Superficial foreign body of lower back and pelvis, sequela -S30851A Superficial foreign body of abdominal wall, initial encounter -S30851D Superficial foreign body of abdominal wall, subsequent encounter -S30851S Superficial foreign body of abdominal wall, sequela -S30852A Superficial foreign body of penis, initial encounter -S30852D Superficial foreign body of penis, subsequent encounter -S30852S Superficial foreign body of penis, sequela -S30853A Superficial foreign body of scrotum and testes, initial encounter -S30853D Superficial foreign body of scrotum and testes, subsequent encounter -S30853S Superficial foreign body of scrotum and testes, sequela -S30854A Superficial foreign body of vagina and vulva, initial encounter -S30854D Superficial foreign body of vagina and vulva, subsequent encounter -S30854S Superficial foreign body of vagina and vulva, sequela -S30855A Superficial foreign body of unspecified external genital organs, male, initial encounter -S30855D Superficial foreign body of unspecified external genital organs, male, subsequent encounter -S30855S Superficial foreign body of unspecified external genital organs, male, sequela -S30856A Superficial foreign body of unspecified external genital organs, female, initial encounter -S30856D Superficial foreign body of unspecified external genital organs, female, subsequent encounter -S30856S Superficial foreign body of unspecified external genital organs, female, sequela -S30857A Superficial foreign body of anus, initial encounter -S30857D Superficial foreign body of anus, subsequent encounter -S30857S Superficial foreign body of anus, sequela -S30860A Insect bite (nonvenomous) of lower back and pelvis, initial encounter -S30860D Insect bite (nonvenomous) of lower back and pelvis, subsequent encounter -S30860S Insect bite (nonvenomous) of lower back and pelvis, sequela -S30861A Insect bite (nonvenomous) of abdominal wall, initial encounter -S30861D Insect bite (nonvenomous) of abdominal wall, subsequent encounter -S30861S Insect bite (nonvenomous) of abdominal wall, sequela -S30862A Insect bite (nonvenomous) of penis, initial encounter -S30862D Insect bite (nonvenomous) of penis, subsequent encounter -S30862S Insect bite (nonvenomous) of penis, sequela -S30863A Insect bite (nonvenomous) of scrotum and testes, initial encounter -S30863D Insect bite (nonvenomous) of scrotum and testes, subsequent encounter -S30863S Insect bite (nonvenomous) of scrotum and testes, sequela -S30864A Insect bite (nonvenomous) of vagina and vulva, initial encounter -S30864D Insect bite (nonvenomous) of vagina and vulva, subsequent encounter -S30864S Insect bite (nonvenomous) of vagina and vulva, sequela -S30865A Insect bite (nonvenomous) of unspecified external genital organs, male, initial encounter -S30865D Insect bite (nonvenomous) of unspecified external genital organs, male, subsequent encounter -S30865S Insect bite (nonvenomous) of unspecified external genital organs, male, sequela -S30866A Insect bite (nonvenomous) of unspecified external genital organs, female, initial encounter -S30866D Insect bite (nonvenomous) of unspecified external genital organs, female, subsequent encounter -S30866S Insect bite (nonvenomous) of unspecified external genital organs, female, sequela -S30867A Insect bite (nonvenomous) of anus, initial encounter -S30867D Insect bite (nonvenomous) of anus, subsequent encounter -S30867S Insect bite (nonvenomous) of anus, sequela -S30870A Other superficial bite of lower back and pelvis, initial encounter -S30870D Other superficial bite of lower back and pelvis, subsequent encounter -S30870S Other superficial bite of lower back and pelvis, sequela -S30871A Other superficial bite of abdominal wall, initial encounter -S30871D Other superficial bite of abdominal wall, subsequent encounter -S30871S Other superficial bite of abdominal wall, sequela -S30872A Other superficial bite of penis, initial encounter -S30872D Other superficial bite of penis, subsequent encounter -S30872S Other superficial bite of penis, sequela -S30873A Other superficial bite of scrotum and testes, initial encounter -S30873D Other superficial bite of scrotum and testes, subsequent encounter -S30873S Other superficial bite of scrotum and testes, sequela -S30874A Other superficial bite of vagina and vulva, initial encounter -S30874D Other superficial bite of vagina and vulva, subsequent encounter -S30874S Other superficial bite of vagina and vulva, sequela -S30875A Other superficial bite of unspecified external genital organs, male, initial encounter -S30875D Other superficial bite of unspecified external genital organs, male, subsequent encounter -S30875S Other superficial bite of unspecified external genital organs, male, sequela -S30876A Other superficial bite of unspecified external genital organs, female, initial encounter -S30876D Other superficial bite of unspecified external genital organs, female, subsequent encounter -S30876S Other superficial bite of unspecified external genital organs, female, sequela -S30877A Other superficial bite of anus, initial encounter -S30877D Other superficial bite of anus, subsequent encounter -S30877S Other superficial bite of anus, sequela -S3091XA Unspecified superficial injury of lower back and pelvis, initial encounter -S3091XD Unspecified superficial injury of lower back and pelvis, subsequent encounter -S3091XS Unspecified superficial injury of lower back and pelvis, sequela -S3092XA Unspecified superficial injury of abdominal wall, initial encounter -S3092XD Unspecified superficial injury of abdominal wall, subsequent encounter -S3092XS Unspecified superficial injury of abdominal wall, sequela -S3093XA Unspecified superficial injury of penis, initial encounter -S3093XD Unspecified superficial injury of penis, subsequent encounter -S3093XS Unspecified superficial injury of penis, sequela -S3094XA Unspecified superficial injury of scrotum and testes, initial encounter -S3094XD Unspecified superficial injury of scrotum and testes, subsequent encounter -S3094XS Unspecified superficial injury of scrotum and testes, sequela -S3095XA Unspecified superficial injury of vagina and vulva, initial encounter -S3095XD Unspecified superficial injury of vagina and vulva, subsequent encounter -S3095XS Unspecified superficial injury of vagina and vulva, sequela -S3096XA Unspecified superficial injury of unspecified external genital organs, male, initial encounter -S3096XD Unspecified superficial injury of unspecified external genital organs, male, subsequent encounter -S3096XS Unspecified superficial injury of unspecified external genital organs, male, sequela -S3097XA Unspecified superficial injury of unspecified external genital organs, female, initial encounter -S3097XD Unspecified superficial injury of unspecified external genital organs, female, subsequent encounter -S3097XS Unspecified superficial injury of unspecified external genital organs, female, sequela -S3098XA Unspecified superficial injury of anus, initial encounter -S3098XD Unspecified superficial injury of anus, subsequent encounter -S3098XS Unspecified superficial injury of anus, sequela -S31000A Unspecified open wound of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31000D Unspecified open wound of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31000S Unspecified open wound of lower back and pelvis without penetration into retroperitoneum, sequela -S31001A Unspecified open wound of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31001D Unspecified open wound of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31001S Unspecified open wound of lower back and pelvis with penetration into retroperitoneum, sequela -S31010A Laceration without foreign body of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31010D Laceration without foreign body of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31010S Laceration without foreign body of lower back and pelvis without penetration into retroperitoneum, sequela -S31011A Laceration without foreign body of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31011D Laceration without foreign body of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31011S Laceration without foreign body of lower back and pelvis with penetration into retroperitoneum, sequela -S31020A Laceration with foreign body of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31020D Laceration with foreign body of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31020S Laceration with foreign body of lower back and pelvis without penetration into retroperitoneum, sequela -S31021A Laceration with foreign body of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31021D Laceration with foreign body of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31021S Laceration with foreign body of lower back and pelvis with penetration into retroperitoneum, sequela -S31030A Puncture wound without foreign body of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31030D Puncture wound without foreign body of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31030S Puncture wound without foreign body of lower back and pelvis without penetration into retroperitoneum, sequela -S31031A Puncture wound without foreign body of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31031D Puncture wound without foreign body of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31031S Puncture wound without foreign body of lower back and pelvis with penetration into retroperitoneum, sequela -S31040A Puncture wound with foreign body of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31040D Puncture wound with foreign body of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31040S Puncture wound with foreign body of lower back and pelvis without penetration into retroperitoneum, sequela -S31041A Puncture wound with foreign body of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31041D Puncture wound with foreign body of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31041S Puncture wound with foreign body of lower back and pelvis with penetration into retroperitoneum, sequela -S31050A Open bite of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31050D Open bite of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31050S Open bite of lower back and pelvis without penetration into retroperitoneum, sequela -S31051A Open bite of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31051D Open bite of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31051S Open bite of lower back and pelvis with penetration into retroperitoneum, sequela -S31100A Unspecified open wound of abdominal wall, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31100D Unspecified open wound of abdominal wall, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31100S Unspecified open wound of abdominal wall, right upper quadrant without penetration into peritoneal cavity, sequela -S31101A Unspecified open wound of abdominal wall, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31101D Unspecified open wound of abdominal wall, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31101S Unspecified open wound of abdominal wall, left upper quadrant without penetration into peritoneal cavity, sequela -S31102A Unspecified open wound of abdominal wall, epigastric region without penetration into peritoneal cavity, initial encounter -S31102D Unspecified open wound of abdominal wall, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31102S Unspecified open wound of abdominal wall, epigastric region without penetration into peritoneal cavity, sequela -S31103A Unspecified open wound of abdominal wall, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31103D Unspecified open wound of abdominal wall, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31103S Unspecified open wound of abdominal wall, right lower quadrant without penetration into peritoneal cavity, sequela -S31104A Unspecified open wound of abdominal wall, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31104D Unspecified open wound of abdominal wall, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31104S Unspecified open wound of abdominal wall, left lower quadrant without penetration into peritoneal cavity, sequela -S31105A Unspecified open wound of abdominal wall, periumbilic region without penetration into peritoneal cavity, initial encounter -S31105D Unspecified open wound of abdominal wall, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31105S Unspecified open wound of abdominal wall, periumbilic region without penetration into peritoneal cavity, sequela -S31109A Unspecified open wound of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31109D Unspecified open wound of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31109S Unspecified open wound of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, sequela -S31110A Laceration without foreign body of abdominal wall, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31110D Laceration without foreign body of abdominal wall, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31110S Laceration without foreign body of abdominal wall, right upper quadrant without penetration into peritoneal cavity, sequela -S31111A Laceration without foreign body of abdominal wall, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31111D Laceration without foreign body of abdominal wall, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31111S Laceration without foreign body of abdominal wall, left upper quadrant without penetration into peritoneal cavity, sequela -S31112A Laceration without foreign body of abdominal wall, epigastric region without penetration into peritoneal cavity, initial encounter -S31112D Laceration without foreign body of abdominal wall, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31112S Laceration without foreign body of abdominal wall, epigastric region without penetration into peritoneal cavity, sequela -S31113A Laceration without foreign body of abdominal wall, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31113D Laceration without foreign body of abdominal wall, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31113S Laceration without foreign body of abdominal wall, right lower quadrant without penetration into peritoneal cavity, sequela -S31114A Laceration without foreign body of abdominal wall, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31114D Laceration without foreign body of abdominal wall, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31114S Laceration without foreign body of abdominal wall, left lower quadrant without penetration into peritoneal cavity, sequela -S31115A Laceration without foreign body of abdominal wall, periumbilic region without penetration into peritoneal cavity, initial encounter -S31115D Laceration without foreign body of abdominal wall, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31115S Laceration without foreign body of abdominal wall, periumbilic region without penetration into peritoneal cavity, sequela -S31119A Laceration without foreign body of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31119D Laceration without foreign body of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31119S Laceration without foreign body of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, sequela -S31120A Laceration of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31120D Laceration of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31120S Laceration of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, sequela -S31121A Laceration of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31121D Laceration of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31121S Laceration of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, sequela -S31122A Laceration of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, initial encounter -S31122D Laceration of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31122S Laceration of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, sequela -S31123A Laceration of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31123D Laceration of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31123S Laceration of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, sequela -S31124A Laceration of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31124D Laceration of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31124S Laceration of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, sequela -S31125A Laceration of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, initial encounter -S31125D Laceration of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31125S Laceration of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, sequela -S31129A Laceration of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31129D Laceration of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31129S Laceration of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, sequela -S31130A Puncture wound of abdominal wall without foreign body, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31130D Puncture wound of abdominal wall without foreign body, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31130S Puncture wound of abdominal wall without foreign body, right upper quadrant without penetration into peritoneal cavity, sequela -S31131A Puncture wound of abdominal wall without foreign body, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31131D Puncture wound of abdominal wall without foreign body, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31131S Puncture wound of abdominal wall without foreign body, left upper quadrant without penetration into peritoneal cavity, sequela -S31132A Puncture wound of abdominal wall without foreign body, epigastric region without penetration into peritoneal cavity, initial encounter -S31132D Puncture wound of abdominal wall without foreign body, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31132S Puncture wound of abdominal wall without foreign body, epigastric region without penetration into peritoneal cavity, sequela -S31133A Puncture wound of abdominal wall without foreign body, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31133D Puncture wound of abdominal wall without foreign body, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31133S Puncture wound of abdominal wall without foreign body, right lower quadrant without penetration into peritoneal cavity, sequela -S31134A Puncture wound of abdominal wall without foreign body, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31134D Puncture wound of abdominal wall without foreign body, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31134S Puncture wound of abdominal wall without foreign body, left lower quadrant without penetration into peritoneal cavity, sequela -S31135A Puncture wound of abdominal wall without foreign body, periumbilic region without penetration into peritoneal cavity, initial encounter -S31135D Puncture wound of abdominal wall without foreign body, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31135S Puncture wound of abdominal wall without foreign body, periumbilic region without penetration into peritoneal cavity, sequela -S31139A Puncture wound of abdominal wall without foreign body, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31139D Puncture wound of abdominal wall without foreign body, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31139S Puncture wound of abdominal wall without foreign body, unspecified quadrant without penetration into peritoneal cavity, sequela -S31140A Puncture wound of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31140D Puncture wound of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31140S Puncture wound of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, sequela -S31141A Puncture wound of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31141D Puncture wound of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31141S Puncture wound of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, sequela -S31142A Puncture wound of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, initial encounter -S31142D Puncture wound of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31142S Puncture wound of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, sequela -S31143A Puncture wound of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31143D Puncture wound of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31143S Puncture wound of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, sequela -S31144A Puncture wound of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31144D Puncture wound of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31144S Puncture wound of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, sequela -S31145A Puncture wound of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, initial encounter -S31145D Puncture wound of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31145S Puncture wound of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, sequela -S31149A Puncture wound of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31149D Puncture wound of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31149S Puncture wound of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, sequela -S31150A Open bite of abdominal wall, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31150D Open bite of abdominal wall, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31150S Open bite of abdominal wall, right upper quadrant without penetration into peritoneal cavity, sequela -S31151A Open bite of abdominal wall, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31151D Open bite of abdominal wall, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31151S Open bite of abdominal wall, left upper quadrant without penetration into peritoneal cavity, sequela -S31152A Open bite of abdominal wall, epigastric region without penetration into peritoneal cavity, initial encounter -S31152D Open bite of abdominal wall, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31152S Open bite of abdominal wall, epigastric region without penetration into peritoneal cavity, sequela -S31153A Open bite of abdominal wall, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31153D Open bite of abdominal wall, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31153S Open bite of abdominal wall, right lower quadrant without penetration into peritoneal cavity, sequela -S31154A Open bite of abdominal wall, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31154D Open bite of abdominal wall, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31154S Open bite of abdominal wall, left lower quadrant without penetration into peritoneal cavity, sequela -S31155A Open bite of abdominal wall, periumbilic region without penetration into peritoneal cavity, initial encounter -S31155D Open bite of abdominal wall, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31155S Open bite of abdominal wall, periumbilic region without penetration into peritoneal cavity, sequela -S31159A Open bite of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31159D Open bite of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31159S Open bite of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, sequela -S3120XA Unspecified open wound of penis, initial encounter -S3120XD Unspecified open wound of penis, subsequent encounter -S3120XS Unspecified open wound of penis, sequela -S3121XA Laceration without foreign body of penis, initial encounter -S3121XD Laceration without foreign body of penis, subsequent encounter -S3121XS Laceration without foreign body of penis, sequela -S3122XA Laceration with foreign body of penis, initial encounter -S3122XD Laceration with foreign body of penis, subsequent encounter -S3122XS Laceration with foreign body of penis, sequela -S3123XA Puncture wound without foreign body of penis, initial encounter -S3123XD Puncture wound without foreign body of penis, subsequent encounter -S3123XS Puncture wound without foreign body of penis, sequela -S3124XA Puncture wound with foreign body of penis, initial encounter -S3124XD Puncture wound with foreign body of penis, subsequent encounter -S3124XS Puncture wound with foreign body of penis, sequela -S3125XA Open bite of penis, initial encounter -S3125XD Open bite of penis, subsequent encounter -S3125XS Open bite of penis, sequela -S3130XA Unspecified open wound of scrotum and testes, initial encounter -S3130XD Unspecified open wound of scrotum and testes, subsequent encounter -S3130XS Unspecified open wound of scrotum and testes, sequela -S3131XA Laceration without foreign body of scrotum and testes, initial encounter -S3131XD Laceration without foreign body of scrotum and testes, subsequent encounter -S3131XS Laceration without foreign body of scrotum and testes, sequela -S3132XA Laceration with foreign body of scrotum and testes, initial encounter -S3132XD Laceration with foreign body of scrotum and testes, subsequent encounter -S3132XS Laceration with foreign body of scrotum and testes, sequela -S3133XA Puncture wound without foreign body of scrotum and testes, initial encounter -S3133XD Puncture wound without foreign body of scrotum and testes, subsequent encounter -S3133XS Puncture wound without foreign body of scrotum and testes, sequela -S3134XA Puncture wound with foreign body of scrotum and testes, initial encounter -S3134XD Puncture wound with foreign body of scrotum and testes, subsequent encounter -S3134XS Puncture wound with foreign body of scrotum and testes, sequela -S3135XA Open bite of scrotum and testes, initial encounter -S3135XD Open bite of scrotum and testes, subsequent encounter -S3135XS Open bite of scrotum and testes, sequela -S3140XA Unspecified open wound of vagina and vulva, initial encounter -S3140XD Unspecified open wound of vagina and vulva, subsequent encounter -S3140XS Unspecified open wound of vagina and vulva, sequela -S3141XA Laceration without foreign body of vagina and vulva, initial encounter -S3141XD Laceration without foreign body of vagina and vulva, subsequent encounter -S3141XS Laceration without foreign body of vagina and vulva, sequela -S3142XA Laceration with foreign body of vagina and vulva, initial encounter -S3142XD Laceration with foreign body of vagina and vulva, subsequent encounter -S3142XS Laceration with foreign body of vagina and vulva, sequela -S3143XA Puncture wound without foreign body of vagina and vulva, initial encounter -S3143XD Puncture wound without foreign body of vagina and vulva, subsequent encounter -S3143XS Puncture wound without foreign body of vagina and vulva, sequela -S3144XA Puncture wound with foreign body of vagina and vulva, initial encounter -S3144XD Puncture wound with foreign body of vagina and vulva, subsequent encounter -S3144XS Puncture wound with foreign body of vagina and vulva, sequela -S3145XA Open bite of vagina and vulva, initial encounter -S3145XD Open bite of vagina and vulva, subsequent encounter -S3145XS Open bite of vagina and vulva, sequela -S31501A Unspecified open wound of unspecified external genital organs, male, initial encounter -S31501D Unspecified open wound of unspecified external genital organs, male, subsequent encounter -S31501S Unspecified open wound of unspecified external genital organs, male, sequela -S31502A Unspecified open wound of unspecified external genital organs, female, initial encounter -S31502D Unspecified open wound of unspecified external genital organs, female, subsequent encounter -S31502S Unspecified open wound of unspecified external genital organs, female, sequela -S31511A Laceration without foreign body of unspecified external genital organs, male, initial encounter -S31511D Laceration without foreign body of unspecified external genital organs, male, subsequent encounter -S31511S Laceration without foreign body of unspecified external genital organs, male, sequela -S31512A Laceration without foreign body of unspecified external genital organs, female, initial encounter -S31512D Laceration without foreign body of unspecified external genital organs, female, subsequent encounter -S31512S Laceration without foreign body of unspecified external genital organs, female, sequela -S31521A Laceration with foreign body of unspecified external genital organs, male, initial encounter -S31521D Laceration with foreign body of unspecified external genital organs, male, subsequent encounter -S31521S Laceration with foreign body of unspecified external genital organs, male, sequela -S31522A Laceration with foreign body of unspecified external genital organs, female, initial encounter -S31522D Laceration with foreign body of unspecified external genital organs, female, subsequent encounter -S31522S Laceration with foreign body of unspecified external genital organs, female, sequela -S31531A Puncture wound without foreign body of unspecified external genital organs, male, initial encounter -S31531D Puncture wound without foreign body of unspecified external genital organs, male, subsequent encounter -S31531S Puncture wound without foreign body of unspecified external genital organs, male, sequela -S31532A Puncture wound without foreign body of unspecified external genital organs, female, initial encounter -S31532D Puncture wound without foreign body of unspecified external genital organs, female, subsequent encounter -S31532S Puncture wound without foreign body of unspecified external genital organs, female, sequela -S31541A Puncture wound with foreign body of unspecified external genital organs, male, initial encounter -S31541D Puncture wound with foreign body of unspecified external genital organs, male, subsequent encounter -S31541S Puncture wound with foreign body of unspecified external genital organs, male, sequela -S31542A Puncture wound with foreign body of unspecified external genital organs, female, initial encounter -S31542D Puncture wound with foreign body of unspecified external genital organs, female, subsequent encounter -S31542S Puncture wound with foreign body of unspecified external genital organs, female, sequela -S31551A Open bite of unspecified external genital organs, male, initial encounter -S31551D Open bite of unspecified external genital organs, male, subsequent encounter -S31551S Open bite of unspecified external genital organs, male, sequela -S31552A Open bite of unspecified external genital organs, female, initial encounter -S31552D Open bite of unspecified external genital organs, female, subsequent encounter -S31552S Open bite of unspecified external genital organs, female, sequela -S31600A Unspecified open wound of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31600D Unspecified open wound of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31600S Unspecified open wound of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31601A Unspecified open wound of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31601D Unspecified open wound of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31601S Unspecified open wound of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31602A Unspecified open wound of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31602D Unspecified open wound of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31602S Unspecified open wound of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31603A Unspecified open wound of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31603D Unspecified open wound of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31603S Unspecified open wound of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31604A Unspecified open wound of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31604D Unspecified open wound of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31604S Unspecified open wound of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31605A Unspecified open wound of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31605D Unspecified open wound of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31605S Unspecified open wound of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31609A Unspecified open wound of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31609D Unspecified open wound of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31609S Unspecified open wound of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31610A Laceration without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31610D Laceration without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31610S Laceration without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31611A Laceration without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31611D Laceration without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31611S Laceration without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31612A Laceration without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31612D Laceration without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31612S Laceration without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31613A Laceration without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31613D Laceration without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31613S Laceration without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31614A Laceration without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31614D Laceration without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31614S Laceration without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31615A Laceration without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31615D Laceration without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31615S Laceration without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31619A Laceration without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31619D Laceration without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31619S Laceration without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31620A Laceration with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31620D Laceration with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31620S Laceration with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31621A Laceration with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31621D Laceration with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31621S Laceration with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31622A Laceration with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31622D Laceration with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31622S Laceration with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31623A Laceration with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31623D Laceration with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31623S Laceration with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31624A Laceration with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31624D Laceration with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31624S Laceration with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31625A Laceration with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31625D Laceration with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31625S Laceration with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31629A Laceration with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31629D Laceration with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31629S Laceration with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31630A Puncture wound without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31630D Puncture wound without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31630S Puncture wound without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31631A Puncture wound without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31631D Puncture wound without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31631S Puncture wound without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31632A Puncture wound without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31632D Puncture wound without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31632S Puncture wound without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31633A Puncture wound without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31633D Puncture wound without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31633S Puncture wound without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31634A Puncture wound without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31634D Puncture wound without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31634S Puncture wound without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31635A Puncture wound without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31635D Puncture wound without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31635S Puncture wound without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31639A Puncture wound without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31639D Puncture wound without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31639S Puncture wound without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31640A Puncture wound with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31640D Puncture wound with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31640S Puncture wound with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31641A Puncture wound with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31641D Puncture wound with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31641S Puncture wound with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31642A Puncture wound with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31642D Puncture wound with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31642S Puncture wound with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31643A Puncture wound with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31643D Puncture wound with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31643S Puncture wound with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31644A Puncture wound with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31644D Puncture wound with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31644S Puncture wound with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31645A Puncture wound with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31645D Puncture wound with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31645S Puncture wound with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31649A Puncture wound with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31649D Puncture wound with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31649S Puncture wound with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31650A Open bite of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31650D Open bite of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31650S Open bite of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31651A Open bite of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31651D Open bite of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31651S Open bite of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31652A Open bite of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31652D Open bite of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31652S Open bite of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31653A Open bite of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31653D Open bite of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31653S Open bite of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31654A Open bite of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31654D Open bite of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31654S Open bite of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31655A Open bite of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31655D Open bite of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31655S Open bite of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31659A Open bite of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31659D Open bite of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31659S Open bite of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31801A Laceration without foreign body of unspecified buttock, initial encounter -S31801D Laceration without foreign body of unspecified buttock, subsequent encounter -S31801S Laceration without foreign body of unspecified buttock, sequela -S31802A Laceration with foreign body of unspecified buttock, initial encounter -S31802D Laceration with foreign body of unspecified buttock, subsequent encounter -S31802S Laceration with foreign body of unspecified buttock, sequela -S31803A Puncture wound without foreign body of unspecified buttock, initial encounter -S31803D Puncture wound without foreign body of unspecified buttock, subsequent encounter -S31803S Puncture wound without foreign body of unspecified buttock, sequela -S31804A Puncture wound with foreign body of unspecified buttock, initial encounter -S31804D Puncture wound with foreign body of unspecified buttock, subsequent encounter -S31804S Puncture wound with foreign body of unspecified buttock, sequela -S31805A Open bite of unspecified buttock, initial encounter -S31805D Open bite of unspecified buttock, subsequent encounter -S31805S Open bite of unspecified buttock, sequela -S31809A Unspecified open wound of unspecified buttock, initial encounter -S31809D Unspecified open wound of unspecified buttock, subsequent encounter -S31809S Unspecified open wound of unspecified buttock, sequela -S31811A Laceration without foreign body of right buttock, initial encounter -S31811D Laceration without foreign body of right buttock, subsequent encounter -S31811S Laceration without foreign body of right buttock, sequela -S31812A Laceration with foreign body of right buttock, initial encounter -S31812D Laceration with foreign body of right buttock, subsequent encounter -S31812S Laceration with foreign body of right buttock, sequela -S31813A Puncture wound without foreign body of right buttock, initial encounter -S31813D Puncture wound without foreign body of right buttock, subsequent encounter -S31813S Puncture wound without foreign body of right buttock, sequela -S31814A Puncture wound with foreign body of right buttock, initial encounter -S31814D Puncture wound with foreign body of right buttock, subsequent encounter -S31814S Puncture wound with foreign body of right buttock, sequela -S31815A Open bite of right buttock, initial encounter -S31815D Open bite of right buttock, subsequent encounter -S31815S Open bite of right buttock, sequela -S31819A Unspecified open wound of right buttock, initial encounter -S31819D Unspecified open wound of right buttock, subsequent encounter -S31819S Unspecified open wound of right buttock, sequela -S31821A Laceration without foreign body of left buttock, initial encounter -S31821D Laceration without foreign body of left buttock, subsequent encounter -S31821S Laceration without foreign body of left buttock, sequela -S31822A Laceration with foreign body of left buttock, initial encounter -S31822D Laceration with foreign body of left buttock, subsequent encounter -S31822S Laceration with foreign body of left buttock, sequela -S31823A Puncture wound without foreign body of left buttock, initial encounter -S31823D Puncture wound without foreign body of left buttock, subsequent encounter -S31823S Puncture wound without foreign body of left buttock, sequela -S31824A Puncture wound with foreign body of left buttock, initial encounter -S31824D Puncture wound with foreign body of left buttock, subsequent encounter -S31824S Puncture wound with foreign body of left buttock, sequela -S31825A Open bite of left buttock, initial encounter -S31825D Open bite of left buttock, subsequent encounter -S31825S Open bite of left buttock, sequela -S31829A Unspecified open wound of left buttock, initial encounter -S31829D Unspecified open wound of left buttock, subsequent encounter -S31829S Unspecified open wound of left buttock, sequela -S31831A Laceration without foreign body of anus, initial encounter -S31831D Laceration without foreign body of anus, subsequent encounter -S31831S Laceration without foreign body of anus, sequela -S31832A Laceration with foreign body of anus, initial encounter -S31832D Laceration with foreign body of anus, subsequent encounter -S31832S Laceration with foreign body of anus, sequela -S31833A Puncture wound without foreign body of anus, initial encounter -S31833D Puncture wound without foreign body of anus, subsequent encounter -S31833S Puncture wound without foreign body of anus, sequela -S31834A Puncture wound with foreign body of anus, initial encounter -S31834D Puncture wound with foreign body of anus, subsequent encounter -S31834S Puncture wound with foreign body of anus, sequela -S31835A Open bite of anus, initial encounter -S31835D Open bite of anus, subsequent encounter -S31835S Open bite of anus, sequela -S31839A Unspecified open wound of anus, initial encounter -S31839D Unspecified open wound of anus, subsequent encounter -S31839S Unspecified open wound of anus, sequela -S32000A Wedge compression fracture of unspecified lumbar vertebra, initial encounter for closed fracture -S32000B Wedge compression fracture of unspecified lumbar vertebra, initial encounter for open fracture -S32000D Wedge compression fracture of unspecified lumbar vertebra, subsequent encounter for fracture with routine healing -S32000G Wedge compression fracture of unspecified lumbar vertebra, subsequent encounter for fracture with delayed healing -S32000K Wedge compression fracture of unspecified lumbar vertebra, subsequent encounter for fracture with nonunion -S32000S Wedge compression fracture of unspecified lumbar vertebra, sequela -S32001A Stable burst fracture of unspecified lumbar vertebra, initial encounter for closed fracture -S32001B Stable burst fracture of unspecified lumbar vertebra, initial encounter for open fracture -S32001D Stable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with routine healing -S32001G Stable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with delayed healing -S32001K Stable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with nonunion -S32001S Stable burst fracture of unspecified lumbar vertebra, sequela -S32002A Unstable burst fracture of unspecified lumbar vertebra, initial encounter for closed fracture -S32002B Unstable burst fracture of unspecified lumbar vertebra, initial encounter for open fracture -S32002D Unstable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with routine healing -S32002G Unstable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with delayed healing -S32002K Unstable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with nonunion -S32002S Unstable burst fracture of unspecified lumbar vertebra, sequela -S32008A Other fracture of unspecified lumbar vertebra, initial encounter for closed fracture -S32008B Other fracture of unspecified lumbar vertebra, initial encounter for open fracture -S32008D Other fracture of unspecified lumbar vertebra, subsequent encounter for fracture with routine healing -S32008G Other fracture of unspecified lumbar vertebra, subsequent encounter for fracture with delayed healing -S32008K Other fracture of unspecified lumbar vertebra, subsequent encounter for fracture with nonunion -S32008S Other fracture of unspecified lumbar vertebra, sequela -S32009A Unspecified fracture of unspecified lumbar vertebra, initial encounter for closed fracture -S32009B Unspecified fracture of unspecified lumbar vertebra, initial encounter for open fracture -S32009D Unspecified fracture of unspecified lumbar vertebra, subsequent encounter for fracture with routine healing -S32009G Unspecified fracture of unspecified lumbar vertebra, subsequent encounter for fracture with delayed healing -S32009K Unspecified fracture of unspecified lumbar vertebra, subsequent encounter for fracture with nonunion -S32009S Unspecified fracture of unspecified lumbar vertebra, sequela -S32010A Wedge compression fracture of first lumbar vertebra, initial encounter for closed fracture -S32010B Wedge compression fracture of first lumbar vertebra, initial encounter for open fracture -S32010D Wedge compression fracture of first lumbar vertebra, subsequent encounter for fracture with routine healing -S32010G Wedge compression fracture of first lumbar vertebra, subsequent encounter for fracture with delayed healing -S32010K Wedge compression fracture of first lumbar vertebra, subsequent encounter for fracture with nonunion -S32010S Wedge compression fracture of first lumbar vertebra, sequela -S32011A Stable burst fracture of first lumbar vertebra, initial encounter for closed fracture -S32011B Stable burst fracture of first lumbar vertebra, initial encounter for open fracture -S32011D Stable burst fracture of first lumbar vertebra, subsequent encounter for fracture with routine healing -S32011G Stable burst fracture of first lumbar vertebra, subsequent encounter for fracture with delayed healing -S32011K Stable burst fracture of first lumbar vertebra, subsequent encounter for fracture with nonunion -S32011S Stable burst fracture of first lumbar vertebra, sequela -S32012A Unstable burst fracture of first lumbar vertebra, initial encounter for closed fracture -S32012B Unstable burst fracture of first lumbar vertebra, initial encounter for open fracture -S32012D Unstable burst fracture of first lumbar vertebra, subsequent encounter for fracture with routine healing -S32012G Unstable burst fracture of first lumbar vertebra, subsequent encounter for fracture with delayed healing -S32012K Unstable burst fracture of first lumbar vertebra, subsequent encounter for fracture with nonunion -S32012S Unstable burst fracture of first lumbar vertebra, sequela -S32018A Other fracture of first lumbar vertebra, initial encounter for closed fracture -S32018B Other fracture of first lumbar vertebra, initial encounter for open fracture -S32018D Other fracture of first lumbar vertebra, subsequent encounter for fracture with routine healing -S32018G Other fracture of first lumbar vertebra, subsequent encounter for fracture with delayed healing -S32018K Other fracture of first lumbar vertebra, subsequent encounter for fracture with nonunion -S32018S Other fracture of first lumbar vertebra, sequela -S32019A Unspecified fracture of first lumbar vertebra, initial encounter for closed fracture -S32019B Unspecified fracture of first lumbar vertebra, initial encounter for open fracture -S32019D Unspecified fracture of first lumbar vertebra, subsequent encounter for fracture with routine healing -S32019G Unspecified fracture of first lumbar vertebra, subsequent encounter for fracture with delayed healing -S32019K Unspecified fracture of first lumbar vertebra, subsequent encounter for fracture with nonunion -S32019S Unspecified fracture of first lumbar vertebra, sequela -S32020A Wedge compression fracture of second lumbar vertebra, initial encounter for closed fracture -S32020B Wedge compression fracture of second lumbar vertebra, initial encounter for open fracture -S32020D Wedge compression fracture of second lumbar vertebra, subsequent encounter for fracture with routine healing -S32020G Wedge compression fracture of second lumbar vertebra, subsequent encounter for fracture with delayed healing -S32020K Wedge compression fracture of second lumbar vertebra, subsequent encounter for fracture with nonunion -S32020S Wedge compression fracture of second lumbar vertebra, sequela -S32021A Stable burst fracture of second lumbar vertebra, initial encounter for closed fracture -S32021B Stable burst fracture of second lumbar vertebra, initial encounter for open fracture -S32021D Stable burst fracture of second lumbar vertebra, subsequent encounter for fracture with routine healing -S32021G Stable burst fracture of second lumbar vertebra, subsequent encounter for fracture with delayed healing -S32021K Stable burst fracture of second lumbar vertebra, subsequent encounter for fracture with nonunion -S32021S Stable burst fracture of second lumbar vertebra, sequela -S32022A Unstable burst fracture of second lumbar vertebra, initial encounter for closed fracture -S32022B Unstable burst fracture of second lumbar vertebra, initial encounter for open fracture -S32022D Unstable burst fracture of second lumbar vertebra, subsequent encounter for fracture with routine healing -S32022G Unstable burst fracture of second lumbar vertebra, subsequent encounter for fracture with delayed healing -S32022K Unstable burst fracture of second lumbar vertebra, subsequent encounter for fracture with nonunion -S32022S Unstable burst fracture of second lumbar vertebra, sequela -S32028A Other fracture of second lumbar vertebra, initial encounter for closed fracture -S32028B Other fracture of second lumbar vertebra, initial encounter for open fracture -S32028D Other fracture of second lumbar vertebra, subsequent encounter for fracture with routine healing -S32028G Other fracture of second lumbar vertebra, subsequent encounter for fracture with delayed healing -S32028K Other fracture of second lumbar vertebra, subsequent encounter for fracture with nonunion -S32028S Other fracture of second lumbar vertebra, sequela -S32029A Unspecified fracture of second lumbar vertebra, initial encounter for closed fracture -S32029B Unspecified fracture of second lumbar vertebra, initial encounter for open fracture -S32029D Unspecified fracture of second lumbar vertebra, subsequent encounter for fracture with routine healing -S32029G Unspecified fracture of second lumbar vertebra, subsequent encounter for fracture with delayed healing -S32029K Unspecified fracture of second lumbar vertebra, subsequent encounter for fracture with nonunion -S32029S Unspecified fracture of second lumbar vertebra, sequela -S32030A Wedge compression fracture of third lumbar vertebra, initial encounter for closed fracture -S32030B Wedge compression fracture of third lumbar vertebra, initial encounter for open fracture -S32030D Wedge compression fracture of third lumbar vertebra, subsequent encounter for fracture with routine healing -S32030G Wedge compression fracture of third lumbar vertebra, subsequent encounter for fracture with delayed healing -S32030K Wedge compression fracture of third lumbar vertebra, subsequent encounter for fracture with nonunion -S32030S Wedge compression fracture of third lumbar vertebra, sequela -S32031A Stable burst fracture of third lumbar vertebra, initial encounter for closed fracture -S32031B Stable burst fracture of third lumbar vertebra, initial encounter for open fracture -S32031D Stable burst fracture of third lumbar vertebra, subsequent encounter for fracture with routine healing -S32031G Stable burst fracture of third lumbar vertebra, subsequent encounter for fracture with delayed healing -S32031K Stable burst fracture of third lumbar vertebra, subsequent encounter for fracture with nonunion -S32031S Stable burst fracture of third lumbar vertebra, sequela -S32032A Unstable burst fracture of third lumbar vertebra, initial encounter for closed fracture -S32032B Unstable burst fracture of third lumbar vertebra, initial encounter for open fracture -S32032D Unstable burst fracture of third lumbar vertebra, subsequent encounter for fracture with routine healing -S32032G Unstable burst fracture of third lumbar vertebra, subsequent encounter for fracture with delayed healing -S32032K Unstable burst fracture of third lumbar vertebra, subsequent encounter for fracture with nonunion -S32032S Unstable burst fracture of third lumbar vertebra, sequela -S32038A Other fracture of third lumbar vertebra, initial encounter for closed fracture -S32038B Other fracture of third lumbar vertebra, initial encounter for open fracture -S32038D Other fracture of third lumbar vertebra, subsequent encounter for fracture with routine healing -S32038G Other fracture of third lumbar vertebra, subsequent encounter for fracture with delayed healing -S32038K Other fracture of third lumbar vertebra, subsequent encounter for fracture with nonunion -S32038S Other fracture of third lumbar vertebra, sequela -S32039A Unspecified fracture of third lumbar vertebra, initial encounter for closed fracture -S32039B Unspecified fracture of third lumbar vertebra, initial encounter for open fracture -S32039D Unspecified fracture of third lumbar vertebra, subsequent encounter for fracture with routine healing -S32039G Unspecified fracture of third lumbar vertebra, subsequent encounter for fracture with delayed healing -S32039K Unspecified fracture of third lumbar vertebra, subsequent encounter for fracture with nonunion -S32039S Unspecified fracture of third lumbar vertebra, sequela -S32040A Wedge compression fracture of fourth lumbar vertebra, initial encounter for closed fracture -S32040B Wedge compression fracture of fourth lumbar vertebra, initial encounter for open fracture -S32040D Wedge compression fracture of fourth lumbar vertebra, subsequent encounter for fracture with routine healing -S32040G Wedge compression fracture of fourth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32040K Wedge compression fracture of fourth lumbar vertebra, subsequent encounter for fracture with nonunion -S32040S Wedge compression fracture of fourth lumbar vertebra, sequela -S32041A Stable burst fracture of fourth lumbar vertebra, initial encounter for closed fracture -S32041B Stable burst fracture of fourth lumbar vertebra, initial encounter for open fracture -S32041D Stable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with routine healing -S32041G Stable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32041K Stable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with nonunion -S32041S Stable burst fracture of fourth lumbar vertebra, sequela -S32042A Unstable burst fracture of fourth lumbar vertebra, initial encounter for closed fracture -S32042B Unstable burst fracture of fourth lumbar vertebra, initial encounter for open fracture -S32042D Unstable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with routine healing -S32042G Unstable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32042K Unstable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with nonunion -S32042S Unstable burst fracture of fourth lumbar vertebra, sequela -S32048A Other fracture of fourth lumbar vertebra, initial encounter for closed fracture -S32048B Other fracture of fourth lumbar vertebra, initial encounter for open fracture -S32048D Other fracture of fourth lumbar vertebra, subsequent encounter for fracture with routine healing -S32048G Other fracture of fourth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32048K Other fracture of fourth lumbar vertebra, subsequent encounter for fracture with nonunion -S32048S Other fracture of fourth lumbar vertebra, sequela -S32049A Unspecified fracture of fourth lumbar vertebra, initial encounter for closed fracture -S32049B Unspecified fracture of fourth lumbar vertebra, initial encounter for open fracture -S32049D Unspecified fracture of fourth lumbar vertebra, subsequent encounter for fracture with routine healing -S32049G Unspecified fracture of fourth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32049K Unspecified fracture of fourth lumbar vertebra, subsequent encounter for fracture with nonunion -S32049S Unspecified fracture of fourth lumbar vertebra, sequela -S32050A Wedge compression fracture of fifth lumbar vertebra, initial encounter for closed fracture -S32050B Wedge compression fracture of fifth lumbar vertebra, initial encounter for open fracture -S32050D Wedge compression fracture of fifth lumbar vertebra, subsequent encounter for fracture with routine healing -S32050G Wedge compression fracture of fifth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32050K Wedge compression fracture of fifth lumbar vertebra, subsequent encounter for fracture with nonunion -S32050S Wedge compression fracture of fifth lumbar vertebra, sequela -S32051A Stable burst fracture of fifth lumbar vertebra, initial encounter for closed fracture -S32051B Stable burst fracture of fifth lumbar vertebra, initial encounter for open fracture -S32051D Stable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with routine healing -S32051G Stable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32051K Stable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with nonunion -S32051S Stable burst fracture of fifth lumbar vertebra, sequela -S32052A Unstable burst fracture of fifth lumbar vertebra, initial encounter for closed fracture -S32052B Unstable burst fracture of fifth lumbar vertebra, initial encounter for open fracture -S32052D Unstable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with routine healing -S32052G Unstable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32052K Unstable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with nonunion -S32052S Unstable burst fracture of fifth lumbar vertebra, sequela -S32058A Other fracture of fifth lumbar vertebra, initial encounter for closed fracture -S32058B Other fracture of fifth lumbar vertebra, initial encounter for open fracture -S32058D Other fracture of fifth lumbar vertebra, subsequent encounter for fracture with routine healing -S32058G Other fracture of fifth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32058K Other fracture of fifth lumbar vertebra, subsequent encounter for fracture with nonunion -S32058S Other fracture of fifth lumbar vertebra, sequela -S32059A Unspecified fracture of fifth lumbar vertebra, initial encounter for closed fracture -S32059B Unspecified fracture of fifth lumbar vertebra, initial encounter for open fracture -S32059D Unspecified fracture of fifth lumbar vertebra, subsequent encounter for fracture with routine healing -S32059G Unspecified fracture of fifth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32059K Unspecified fracture of fifth lumbar vertebra, subsequent encounter for fracture with nonunion -S32059S Unspecified fracture of fifth lumbar vertebra, sequela -S3210XA Unspecified fracture of sacrum, initial encounter for closed fracture -S3210XB Unspecified fracture of sacrum, initial encounter for open fracture -S3210XD Unspecified fracture of sacrum, subsequent encounter for fracture with routine healing -S3210XG Unspecified fracture of sacrum, subsequent encounter for fracture with delayed healing -S3210XK Unspecified fracture of sacrum, subsequent encounter for fracture with nonunion -S3210XS Unspecified fracture of sacrum, sequela -S32110A Nondisplaced Zone I fracture of sacrum, initial encounter for closed fracture -S32110B Nondisplaced Zone I fracture of sacrum, initial encounter for open fracture -S32110D Nondisplaced Zone I fracture of sacrum, subsequent encounter for fracture with routine healing -S32110G Nondisplaced Zone I fracture of sacrum, subsequent encounter for fracture with delayed healing -S32110K Nondisplaced Zone I fracture of sacrum, subsequent encounter for fracture with nonunion -S32110S Nondisplaced Zone I fracture of sacrum, sequela -S32111A Minimally displaced Zone I fracture of sacrum, initial encounter for closed fracture -S32111B Minimally displaced Zone I fracture of sacrum, initial encounter for open fracture -S32111D Minimally displaced Zone I fracture of sacrum, subsequent encounter for fracture with routine healing -S32111G Minimally displaced Zone I fracture of sacrum, subsequent encounter for fracture with delayed healing -S32111K Minimally displaced Zone I fracture of sacrum, subsequent encounter for fracture with nonunion -S32111S Minimally displaced Zone I fracture of sacrum, sequela -S32112A Severely displaced Zone I fracture of sacrum, initial encounter for closed fracture -S32112B Severely displaced Zone I fracture of sacrum, initial encounter for open fracture -S32112D Severely displaced Zone I fracture of sacrum, subsequent encounter for fracture with routine healing -S32112G Severely displaced Zone I fracture of sacrum, subsequent encounter for fracture with delayed healing -S32112K Severely displaced Zone I fracture of sacrum, subsequent encounter for fracture with nonunion -S32112S Severely displaced Zone I fracture of sacrum, sequela -S32119A Unspecified Zone I fracture of sacrum, initial encounter for closed fracture -S32119B Unspecified Zone I fracture of sacrum, initial encounter for open fracture -S32119D Unspecified Zone I fracture of sacrum, subsequent encounter for fracture with routine healing -S32119G Unspecified Zone I fracture of sacrum, subsequent encounter for fracture with delayed healing -S32119K Unspecified Zone I fracture of sacrum, subsequent encounter for fracture with nonunion -S32119S Unspecified Zone I fracture of sacrum, sequela -S32120A Nondisplaced Zone II fracture of sacrum, initial encounter for closed fracture -S32120B Nondisplaced Zone II fracture of sacrum, initial encounter for open fracture -S32120D Nondisplaced Zone II fracture of sacrum, subsequent encounter for fracture with routine healing -S32120G Nondisplaced Zone II fracture of sacrum, subsequent encounter for fracture with delayed healing -S32120K Nondisplaced Zone II fracture of sacrum, subsequent encounter for fracture with nonunion -S32120S Nondisplaced Zone II fracture of sacrum, sequela -S32121A Minimally displaced Zone II fracture of sacrum, initial encounter for closed fracture -S32121B Minimally displaced Zone II fracture of sacrum, initial encounter for open fracture -S32121D Minimally displaced Zone II fracture of sacrum, subsequent encounter for fracture with routine healing -S32121G Minimally displaced Zone II fracture of sacrum, subsequent encounter for fracture with delayed healing -S32121K Minimally displaced Zone II fracture of sacrum, subsequent encounter for fracture with nonunion -S32121S Minimally displaced Zone II fracture of sacrum, sequela -S32122A Severely displaced Zone II fracture of sacrum, initial encounter for closed fracture -S32122B Severely displaced Zone II fracture of sacrum, initial encounter for open fracture -S32122D Severely displaced Zone II fracture of sacrum, subsequent encounter for fracture with routine healing -S32122G Severely displaced Zone II fracture of sacrum, subsequent encounter for fracture with delayed healing -S32122K Severely displaced Zone II fracture of sacrum, subsequent encounter for fracture with nonunion -S32122S Severely displaced Zone II fracture of sacrum, sequela -S32129A Unspecified Zone II fracture of sacrum, initial encounter for closed fracture -S32129B Unspecified Zone II fracture of sacrum, initial encounter for open fracture -S32129D Unspecified Zone II fracture of sacrum, subsequent encounter for fracture with routine healing -S32129G Unspecified Zone II fracture of sacrum, subsequent encounter for fracture with delayed healing -S32129K Unspecified Zone II fracture of sacrum, subsequent encounter for fracture with nonunion -S32129S Unspecified Zone II fracture of sacrum, sequela -S32130A Nondisplaced Zone III fracture of sacrum, initial encounter for closed fracture -S32130B Nondisplaced Zone III fracture of sacrum, initial encounter for open fracture -S32130D Nondisplaced Zone III fracture of sacrum, subsequent encounter for fracture with routine healing -S32130G Nondisplaced Zone III fracture of sacrum, subsequent encounter for fracture with delayed healing -S32130K Nondisplaced Zone III fracture of sacrum, subsequent encounter for fracture with nonunion -S32130S Nondisplaced Zone III fracture of sacrum, sequela -S32131A Minimally displaced Zone III fracture of sacrum, initial encounter for closed fracture -S32131B Minimally displaced Zone III fracture of sacrum, initial encounter for open fracture -S32131D Minimally displaced Zone III fracture of sacrum, subsequent encounter for fracture with routine healing -S32131G Minimally displaced Zone III fracture of sacrum, subsequent encounter for fracture with delayed healing -S32131K Minimally displaced Zone III fracture of sacrum, subsequent encounter for fracture with nonunion -S32131S Minimally displaced Zone III fracture of sacrum, sequela -S32132A Severely displaced Zone III fracture of sacrum, initial encounter for closed fracture -S32132B Severely displaced Zone III fracture of sacrum, initial encounter for open fracture -S32132D Severely displaced Zone III fracture of sacrum, subsequent encounter for fracture with routine healing -S32132G Severely displaced Zone III fracture of sacrum, subsequent encounter for fracture with delayed healing -S32132K Severely displaced Zone III fracture of sacrum, subsequent encounter for fracture with nonunion -S32132S Severely displaced Zone III fracture of sacrum, sequela -S32139A Unspecified Zone III fracture of sacrum, initial encounter for closed fracture -S32139B Unspecified Zone III fracture of sacrum, initial encounter for open fracture -S32139D Unspecified Zone III fracture of sacrum, subsequent encounter for fracture with routine healing -S32139G Unspecified Zone III fracture of sacrum, subsequent encounter for fracture with delayed healing -S32139K Unspecified Zone III fracture of sacrum, subsequent encounter for fracture with nonunion -S32139S Unspecified Zone III fracture of sacrum, sequela -S3214XA Type 1 fracture of sacrum, initial encounter for closed fracture -S3214XB Type 1 fracture of sacrum, initial encounter for open fracture -S3214XD Type 1 fracture of sacrum, subsequent encounter for fracture with routine healing -S3214XG Type 1 fracture of sacrum, subsequent encounter for fracture with delayed healing -S3214XK Type 1 fracture of sacrum, subsequent encounter for fracture with nonunion -S3214XS Type 1 fracture of sacrum, sequela -S3215XA Type 2 fracture of sacrum, initial encounter for closed fracture -S3215XB Type 2 fracture of sacrum, initial encounter for open fracture -S3215XD Type 2 fracture of sacrum, subsequent encounter for fracture with routine healing -S3215XG Type 2 fracture of sacrum, subsequent encounter for fracture with delayed healing -S3215XK Type 2 fracture of sacrum, subsequent encounter for fracture with nonunion -S3215XS Type 2 fracture of sacrum, sequela -S3216XA Type 3 fracture of sacrum, initial encounter for closed fracture -S3216XB Type 3 fracture of sacrum, initial encounter for open fracture -S3216XD Type 3 fracture of sacrum, subsequent encounter for fracture with routine healing -S3216XG Type 3 fracture of sacrum, subsequent encounter for fracture with delayed healing -S3216XK Type 3 fracture of sacrum, subsequent encounter for fracture with nonunion -S3216XS Type 3 fracture of sacrum, sequela -S3217XA Type 4 fracture of sacrum, initial encounter for closed fracture -S3217XB Type 4 fracture of sacrum, initial encounter for open fracture -S3217XD Type 4 fracture of sacrum, subsequent encounter for fracture with routine healing -S3217XG Type 4 fracture of sacrum, subsequent encounter for fracture with delayed healing -S3217XK Type 4 fracture of sacrum, subsequent encounter for fracture with nonunion -S3217XS Type 4 fracture of sacrum, sequela -S3219XA Other fracture of sacrum, initial encounter for closed fracture -S3219XB Other fracture of sacrum, initial encounter for open fracture -S3219XD Other fracture of sacrum, subsequent encounter for fracture with routine healing -S3219XG Other fracture of sacrum, subsequent encounter for fracture with delayed healing -S3219XK Other fracture of sacrum, subsequent encounter for fracture with nonunion -S3219XS Other fracture of sacrum, sequela -S322XXA Fracture of coccyx, initial encounter for closed fracture -S322XXB Fracture of coccyx, initial encounter for open fracture -S322XXD Fracture of coccyx, subsequent encounter for fracture with routine healing -S322XXG Fracture of coccyx, subsequent encounter for fracture with delayed healing -S322XXK Fracture of coccyx, subsequent encounter for fracture with nonunion -S322XXS Fracture of coccyx, sequela -S32301A Unspecified fracture of right ilium, initial encounter for closed fracture -S32301B Unspecified fracture of right ilium, initial encounter for open fracture -S32301D Unspecified fracture of right ilium, subsequent encounter for fracture with routine healing -S32301G Unspecified fracture of right ilium, subsequent encounter for fracture with delayed healing -S32301K Unspecified fracture of right ilium, subsequent encounter for fracture with nonunion -S32301S Unspecified fracture of right ilium, sequela -S32302A Unspecified fracture of left ilium, initial encounter for closed fracture -S32302B Unspecified fracture of left ilium, initial encounter for open fracture -S32302D Unspecified fracture of left ilium, subsequent encounter for fracture with routine healing -S32302G Unspecified fracture of left ilium, subsequent encounter for fracture with delayed healing -S32302K Unspecified fracture of left ilium, subsequent encounter for fracture with nonunion -S32302S Unspecified fracture of left ilium, sequela -S32309A Unspecified fracture of unspecified ilium, initial encounter for closed fracture -S32309B Unspecified fracture of unspecified ilium, initial encounter for open fracture -S32309D Unspecified fracture of unspecified ilium, subsequent encounter for fracture with routine healing -S32309G Unspecified fracture of unspecified ilium, subsequent encounter for fracture with delayed healing -S32309K Unspecified fracture of unspecified ilium, subsequent encounter for fracture with nonunion -S32309S Unspecified fracture of unspecified ilium, sequela -S32311A Displaced avulsion fracture of right ilium, initial encounter for closed fracture -S32311B Displaced avulsion fracture of right ilium, initial encounter for open fracture -S32311D Displaced avulsion fracture of right ilium, subsequent encounter for fracture with routine healing -S32311G Displaced avulsion fracture of right ilium, subsequent encounter for fracture with delayed healing -S32311K Displaced avulsion fracture of right ilium, subsequent encounter for fracture with nonunion -S32311S Displaced avulsion fracture of right ilium, sequela -S32312A Displaced avulsion fracture of left ilium, initial encounter for closed fracture -S32312B Displaced avulsion fracture of left ilium, initial encounter for open fracture -S32312D Displaced avulsion fracture of left ilium, subsequent encounter for fracture with routine healing -S32312G Displaced avulsion fracture of left ilium, subsequent encounter for fracture with delayed healing -S32312K Displaced avulsion fracture of left ilium, subsequent encounter for fracture with nonunion -S32312S Displaced avulsion fracture of left ilium, sequela -S32313A Displaced avulsion fracture of unspecified ilium, initial encounter for closed fracture -S32313B Displaced avulsion fracture of unspecified ilium, initial encounter for open fracture -S32313D Displaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with routine healing -S32313G Displaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with delayed healing -S32313K Displaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with nonunion -S32313S Displaced avulsion fracture of unspecified ilium, sequela -S32314A Nondisplaced avulsion fracture of right ilium, initial encounter for closed fracture -S32314B Nondisplaced avulsion fracture of right ilium, initial encounter for open fracture -S32314D Nondisplaced avulsion fracture of right ilium, subsequent encounter for fracture with routine healing -S32314G Nondisplaced avulsion fracture of right ilium, subsequent encounter for fracture with delayed healing -S32314K Nondisplaced avulsion fracture of right ilium, subsequent encounter for fracture with nonunion -S32314S Nondisplaced avulsion fracture of right ilium, sequela -S32315A Nondisplaced avulsion fracture of left ilium, initial encounter for closed fracture -S32315B Nondisplaced avulsion fracture of left ilium, initial encounter for open fracture -S32315D Nondisplaced avulsion fracture of left ilium, subsequent encounter for fracture with routine healing -S32315G Nondisplaced avulsion fracture of left ilium, subsequent encounter for fracture with delayed healing -S32315K Nondisplaced avulsion fracture of left ilium, subsequent encounter for fracture with nonunion -S32315S Nondisplaced avulsion fracture of left ilium, sequela -S32316A Nondisplaced avulsion fracture of unspecified ilium, initial encounter for closed fracture -S32316B Nondisplaced avulsion fracture of unspecified ilium, initial encounter for open fracture -S32316D Nondisplaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with routine healing -S32316G Nondisplaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with delayed healing -S32316K Nondisplaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with nonunion -S32316S Nondisplaced avulsion fracture of unspecified ilium, sequela -S32391A Other fracture of right ilium, initial encounter for closed fracture -S32391B Other fracture of right ilium, initial encounter for open fracture -S32391D Other fracture of right ilium, subsequent encounter for fracture with routine healing -S32391G Other fracture of right ilium, subsequent encounter for fracture with delayed healing -S32391K Other fracture of right ilium, subsequent encounter for fracture with nonunion -S32391S Other fracture of right ilium, sequela -S32392A Other fracture of left ilium, initial encounter for closed fracture -S32392B Other fracture of left ilium, initial encounter for open fracture -S32392D Other fracture of left ilium, subsequent encounter for fracture with routine healing -S32392G Other fracture of left ilium, subsequent encounter for fracture with delayed healing -S32392K Other fracture of left ilium, subsequent encounter for fracture with nonunion -S32392S Other fracture of left ilium, sequela -S32399A Other fracture of unspecified ilium, initial encounter for closed fracture -S32399B Other fracture of unspecified ilium, initial encounter for open fracture -S32399D Other fracture of unspecified ilium, subsequent encounter for fracture with routine healing -S32399G Other fracture of unspecified ilium, subsequent encounter for fracture with delayed healing -S32399K Other fracture of unspecified ilium, subsequent encounter for fracture with nonunion -S32399S Other fracture of unspecified ilium, sequela -S32401A Unspecified fracture of right acetabulum, initial encounter for closed fracture -S32401B Unspecified fracture of right acetabulum, initial encounter for open fracture -S32401D Unspecified fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32401G Unspecified fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32401K Unspecified fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32401S Unspecified fracture of right acetabulum, sequela -S32402A Unspecified fracture of left acetabulum, initial encounter for closed fracture -S32402B Unspecified fracture of left acetabulum, initial encounter for open fracture -S32402D Unspecified fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32402G Unspecified fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32402K Unspecified fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32402S Unspecified fracture of left acetabulum, sequela -S32409A Unspecified fracture of unspecified acetabulum, initial encounter for closed fracture -S32409B Unspecified fracture of unspecified acetabulum, initial encounter for open fracture -S32409D Unspecified fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32409G Unspecified fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32409K Unspecified fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32409S Unspecified fracture of unspecified acetabulum, sequela -S32411A Displaced fracture of anterior wall of right acetabulum, initial encounter for closed fracture -S32411B Displaced fracture of anterior wall of right acetabulum, initial encounter for open fracture -S32411D Displaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with routine healing -S32411G Displaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32411K Displaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with nonunion -S32411S Displaced fracture of anterior wall of right acetabulum, sequela -S32412A Displaced fracture of anterior wall of left acetabulum, initial encounter for closed fracture -S32412B Displaced fracture of anterior wall of left acetabulum, initial encounter for open fracture -S32412D Displaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with routine healing -S32412G Displaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32412K Displaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with nonunion -S32412S Displaced fracture of anterior wall of left acetabulum, sequela -S32413A Displaced fracture of anterior wall of unspecified acetabulum, initial encounter for closed fracture -S32413B Displaced fracture of anterior wall of unspecified acetabulum, initial encounter for open fracture -S32413D Displaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32413G Displaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32413K Displaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32413S Displaced fracture of anterior wall of unspecified acetabulum, sequela -S32414A Nondisplaced fracture of anterior wall of right acetabulum, initial encounter for closed fracture -S32414B Nondisplaced fracture of anterior wall of right acetabulum, initial encounter for open fracture -S32414D Nondisplaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with routine healing -S32414G Nondisplaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32414K Nondisplaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with nonunion -S32414S Nondisplaced fracture of anterior wall of right acetabulum, sequela -S32415A Nondisplaced fracture of anterior wall of left acetabulum, initial encounter for closed fracture -S32415B Nondisplaced fracture of anterior wall of left acetabulum, initial encounter for open fracture -S32415D Nondisplaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with routine healing -S32415G Nondisplaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32415K Nondisplaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with nonunion -S32415S Nondisplaced fracture of anterior wall of left acetabulum, sequela -S32416A Nondisplaced fracture of anterior wall of unspecified acetabulum, initial encounter for closed fracture -S32416B Nondisplaced fracture of anterior wall of unspecified acetabulum, initial encounter for open fracture -S32416D Nondisplaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32416G Nondisplaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32416K Nondisplaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32416S Nondisplaced fracture of anterior wall of unspecified acetabulum, sequela -S32421A Displaced fracture of posterior wall of right acetabulum, initial encounter for closed fracture -S32421B Displaced fracture of posterior wall of right acetabulum, initial encounter for open fracture -S32421D Displaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with routine healing -S32421G Displaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32421K Displaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with nonunion -S32421S Displaced fracture of posterior wall of right acetabulum, sequela -S32422A Displaced fracture of posterior wall of left acetabulum, initial encounter for closed fracture -S32422B Displaced fracture of posterior wall of left acetabulum, initial encounter for open fracture -S32422D Displaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with routine healing -S32422G Displaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32422K Displaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with nonunion -S32422S Displaced fracture of posterior wall of left acetabulum, sequela -S32423A Displaced fracture of posterior wall of unspecified acetabulum, initial encounter for closed fracture -S32423B Displaced fracture of posterior wall of unspecified acetabulum, initial encounter for open fracture -S32423D Displaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32423G Displaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32423K Displaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32423S Displaced fracture of posterior wall of unspecified acetabulum, sequela -S32424A Nondisplaced fracture of posterior wall of right acetabulum, initial encounter for closed fracture -S32424B Nondisplaced fracture of posterior wall of right acetabulum, initial encounter for open fracture -S32424D Nondisplaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with routine healing -S32424G Nondisplaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32424K Nondisplaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with nonunion -S32424S Nondisplaced fracture of posterior wall of right acetabulum, sequela -S32425A Nondisplaced fracture of posterior wall of left acetabulum, initial encounter for closed fracture -S32425B Nondisplaced fracture of posterior wall of left acetabulum, initial encounter for open fracture -S32425D Nondisplaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with routine healing -S32425G Nondisplaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32425K Nondisplaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with nonunion -S32425S Nondisplaced fracture of posterior wall of left acetabulum, sequela -S32426A Nondisplaced fracture of posterior wall of unspecified acetabulum, initial encounter for closed fracture -S32426B Nondisplaced fracture of posterior wall of unspecified acetabulum, initial encounter for open fracture -S32426D Nondisplaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32426G Nondisplaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32426K Nondisplaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32426S Nondisplaced fracture of posterior wall of unspecified acetabulum, sequela -S32431A Displaced fracture of anterior column [iliopubic] of right acetabulum, initial encounter for closed fracture -S32431B Displaced fracture of anterior column [iliopubic] of right acetabulum, initial encounter for open fracture -S32431D Displaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with routine healing -S32431G Displaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with delayed healing -S32431K Displaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with nonunion -S32431S Displaced fracture of anterior column [iliopubic] of right acetabulum, sequela -S32432A Displaced fracture of anterior column [iliopubic] of left acetabulum, initial encounter for closed fracture -S32432B Displaced fracture of anterior column [iliopubic] of left acetabulum, initial encounter for open fracture -S32432D Displaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with routine healing -S32432G Displaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with delayed healing -S32432K Displaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with nonunion -S32432S Displaced fracture of anterior column [iliopubic] of left acetabulum, sequela -S32433A Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, initial encounter for closed fracture -S32433B Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, initial encounter for open fracture -S32433D Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32433G Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32433K Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32433S Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, sequela -S32434A Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, initial encounter for closed fracture -S32434B Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, initial encounter for open fracture -S32434D Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with routine healing -S32434G Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with delayed healing -S32434K Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with nonunion -S32434S Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, sequela -S32435A Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, initial encounter for closed fracture -S32435B Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, initial encounter for open fracture -S32435D Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with routine healing -S32435G Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with delayed healing -S32435K Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with nonunion -S32435S Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, sequela -S32436A Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, initial encounter for closed fracture -S32436B Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, initial encounter for open fracture -S32436D Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32436G Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32436K Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32436S Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, sequela -S32441A Displaced fracture of posterior column [ilioischial] of right acetabulum, initial encounter for closed fracture -S32441B Displaced fracture of posterior column [ilioischial] of right acetabulum, initial encounter for open fracture -S32441D Displaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with routine healing -S32441G Displaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with delayed healing -S32441K Displaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with nonunion -S32441S Displaced fracture of posterior column [ilioischial] of right acetabulum, sequela -S32442A Displaced fracture of posterior column [ilioischial] of left acetabulum, initial encounter for closed fracture -S32442B Displaced fracture of posterior column [ilioischial] of left acetabulum, initial encounter for open fracture -S32442D Displaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with routine healing -S32442G Displaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with delayed healing -S32442K Displaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with nonunion -S32442S Displaced fracture of posterior column [ilioischial] of left acetabulum, sequela -S32443A Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, initial encounter for closed fracture -S32443B Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, initial encounter for open fracture -S32443D Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32443G Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32443K Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32443S Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, sequela -S32444A Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, initial encounter for closed fracture -S32444B Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, initial encounter for open fracture -S32444D Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with routine healing -S32444G Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with delayed healing -S32444K Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with nonunion -S32444S Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, sequela -S32445A Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, initial encounter for closed fracture -S32445B Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, initial encounter for open fracture -S32445D Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with routine healing -S32445G Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with delayed healing -S32445K Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with nonunion -S32445S Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, sequela -S32446A Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, initial encounter for closed fracture -S32446B Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, initial encounter for open fracture -S32446D Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32446G Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32446K Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32446S Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, sequela -S32451A Displaced transverse fracture of right acetabulum, initial encounter for closed fracture -S32451B Displaced transverse fracture of right acetabulum, initial encounter for open fracture -S32451D Displaced transverse fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32451G Displaced transverse fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32451K Displaced transverse fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32451S Displaced transverse fracture of right acetabulum, sequela -S32452A Displaced transverse fracture of left acetabulum, initial encounter for closed fracture -S32452B Displaced transverse fracture of left acetabulum, initial encounter for open fracture -S32452D Displaced transverse fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32452G Displaced transverse fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32452K Displaced transverse fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32452S Displaced transverse fracture of left acetabulum, sequela -S32453A Displaced transverse fracture of unspecified acetabulum, initial encounter for closed fracture -S32453B Displaced transverse fracture of unspecified acetabulum, initial encounter for open fracture -S32453D Displaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32453G Displaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32453K Displaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32453S Displaced transverse fracture of unspecified acetabulum, sequela -S32454A Nondisplaced transverse fracture of right acetabulum, initial encounter for closed fracture -S32454B Nondisplaced transverse fracture of right acetabulum, initial encounter for open fracture -S32454D Nondisplaced transverse fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32454G Nondisplaced transverse fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32454K Nondisplaced transverse fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32454S Nondisplaced transverse fracture of right acetabulum, sequela -S32455A Nondisplaced transverse fracture of left acetabulum, initial encounter for closed fracture -S32455B Nondisplaced transverse fracture of left acetabulum, initial encounter for open fracture -S32455D Nondisplaced transverse fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32455G Nondisplaced transverse fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32455K Nondisplaced transverse fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32455S Nondisplaced transverse fracture of left acetabulum, sequela -S32456A Nondisplaced transverse fracture of unspecified acetabulum, initial encounter for closed fracture -S32456B Nondisplaced transverse fracture of unspecified acetabulum, initial encounter for open fracture -S32456D Nondisplaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32456G Nondisplaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32456K Nondisplaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32456S Nondisplaced transverse fracture of unspecified acetabulum, sequela -S32461A Displaced associated transverse-posterior fracture of right acetabulum, initial encounter for closed fracture -S32461B Displaced associated transverse-posterior fracture of right acetabulum, initial encounter for open fracture -S32461D Displaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32461G Displaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32461K Displaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32461S Displaced associated transverse-posterior fracture of right acetabulum, sequela -S32462A Displaced associated transverse-posterior fracture of left acetabulum, initial encounter for closed fracture -S32462B Displaced associated transverse-posterior fracture of left acetabulum, initial encounter for open fracture -S32462D Displaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32462G Displaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32462K Displaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32462S Displaced associated transverse-posterior fracture of left acetabulum, sequela -S32463A Displaced associated transverse-posterior fracture of unspecified acetabulum, initial encounter for closed fracture -S32463B Displaced associated transverse-posterior fracture of unspecified acetabulum, initial encounter for open fracture -S32463D Displaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32463G Displaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32463K Displaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32463S Displaced associated transverse-posterior fracture of unspecified acetabulum, sequela -S32464A Nondisplaced associated transverse-posterior fracture of right acetabulum, initial encounter for closed fracture -S32464B Nondisplaced associated transverse-posterior fracture of right acetabulum, initial encounter for open fracture -S32464D Nondisplaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32464G Nondisplaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32464K Nondisplaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32464S Nondisplaced associated transverse-posterior fracture of right acetabulum, sequela -S32465A Nondisplaced associated transverse-posterior fracture of left acetabulum, initial encounter for closed fracture -S32465B Nondisplaced associated transverse-posterior fracture of left acetabulum, initial encounter for open fracture -S32465D Nondisplaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32465G Nondisplaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32465K Nondisplaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32465S Nondisplaced associated transverse-posterior fracture of left acetabulum, sequela -S32466A Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, initial encounter for closed fracture -S32466B Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, initial encounter for open fracture -S32466D Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32466G Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32466K Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32466S Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, sequela -S32471A Displaced fracture of medial wall of right acetabulum, initial encounter for closed fracture -S32471B Displaced fracture of medial wall of right acetabulum, initial encounter for open fracture -S32471D Displaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with routine healing -S32471G Displaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32471K Displaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with nonunion -S32471S Displaced fracture of medial wall of right acetabulum, sequela -S32472A Displaced fracture of medial wall of left acetabulum, initial encounter for closed fracture -S32472B Displaced fracture of medial wall of left acetabulum, initial encounter for open fracture -S32472D Displaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with routine healing -S32472G Displaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32472K Displaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with nonunion -S32472S Displaced fracture of medial wall of left acetabulum, sequela -S32473A Displaced fracture of medial wall of unspecified acetabulum, initial encounter for closed fracture -S32473B Displaced fracture of medial wall of unspecified acetabulum, initial encounter for open fracture -S32473D Displaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32473G Displaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32473K Displaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32473S Displaced fracture of medial wall of unspecified acetabulum, sequela -S32474A Nondisplaced fracture of medial wall of right acetabulum, initial encounter for closed fracture -S32474B Nondisplaced fracture of medial wall of right acetabulum, initial encounter for open fracture -S32474D Nondisplaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with routine healing -S32474G Nondisplaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32474K Nondisplaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with nonunion -S32474S Nondisplaced fracture of medial wall of right acetabulum, sequela -S32475A Nondisplaced fracture of medial wall of left acetabulum, initial encounter for closed fracture -S32475B Nondisplaced fracture of medial wall of left acetabulum, initial encounter for open fracture -S32475D Nondisplaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with routine healing -S32475G Nondisplaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32475K Nondisplaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with nonunion -S32475S Nondisplaced fracture of medial wall of left acetabulum, sequela -S32476A Nondisplaced fracture of medial wall of unspecified acetabulum, initial encounter for closed fracture -S32476B Nondisplaced fracture of medial wall of unspecified acetabulum, initial encounter for open fracture -S32476D Nondisplaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32476G Nondisplaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32476K Nondisplaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32476S Nondisplaced fracture of medial wall of unspecified acetabulum, sequela -S32481A Displaced dome fracture of right acetabulum, initial encounter for closed fracture -S32481B Displaced dome fracture of right acetabulum, initial encounter for open fracture -S32481D Displaced dome fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32481G Displaced dome fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32481K Displaced dome fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32481S Displaced dome fracture of right acetabulum, sequela -S32482A Displaced dome fracture of left acetabulum, initial encounter for closed fracture -S32482B Displaced dome fracture of left acetabulum, initial encounter for open fracture -S32482D Displaced dome fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32482G Displaced dome fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32482K Displaced dome fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32482S Displaced dome fracture of left acetabulum, sequela -S32483A Displaced dome fracture of unspecified acetabulum, initial encounter for closed fracture -S32483B Displaced dome fracture of unspecified acetabulum, initial encounter for open fracture -S32483D Displaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32483G Displaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32483K Displaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32483S Displaced dome fracture of unspecified acetabulum, sequela -S32484A Nondisplaced dome fracture of right acetabulum, initial encounter for closed fracture -S32484B Nondisplaced dome fracture of right acetabulum, initial encounter for open fracture -S32484D Nondisplaced dome fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32484G Nondisplaced dome fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32484K Nondisplaced dome fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32484S Nondisplaced dome fracture of right acetabulum, sequela -S32485A Nondisplaced dome fracture of left acetabulum, initial encounter for closed fracture -S32485B Nondisplaced dome fracture of left acetabulum, initial encounter for open fracture -S32485D Nondisplaced dome fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32485G Nondisplaced dome fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32485K Nondisplaced dome fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32485S Nondisplaced dome fracture of left acetabulum, sequela -S32486A Nondisplaced dome fracture of unspecified acetabulum, initial encounter for closed fracture -S32486B Nondisplaced dome fracture of unspecified acetabulum, initial encounter for open fracture -S32486D Nondisplaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32486G Nondisplaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32486K Nondisplaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32486S Nondisplaced dome fracture of unspecified acetabulum, sequela -S32491A Other specified fracture of right acetabulum, initial encounter for closed fracture -S32491B Other specified fracture of right acetabulum, initial encounter for open fracture -S32491D Other specified fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32491G Other specified fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32491K Other specified fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32491S Other specified fracture of right acetabulum, sequela -S32492A Other specified fracture of left acetabulum, initial encounter for closed fracture -S32492B Other specified fracture of left acetabulum, initial encounter for open fracture -S32492D Other specified fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32492G Other specified fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32492K Other specified fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32492S Other specified fracture of left acetabulum, sequela -S32499A Other specified fracture of unspecified acetabulum, initial encounter for closed fracture -S32499B Other specified fracture of unspecified acetabulum, initial encounter for open fracture -S32499D Other specified fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32499G Other specified fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32499K Other specified fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32499S Other specified fracture of unspecified acetabulum, sequela -S32501A Unspecified fracture of right pubis, initial encounter for closed fracture -S32501B Unspecified fracture of right pubis, initial encounter for open fracture -S32501D Unspecified fracture of right pubis, subsequent encounter for fracture with routine healing -S32501G Unspecified fracture of right pubis, subsequent encounter for fracture with delayed healing -S32501K Unspecified fracture of right pubis, subsequent encounter for fracture with nonunion -S32501S Unspecified fracture of right pubis, sequela -S32502A Unspecified fracture of left pubis, initial encounter for closed fracture -S32502B Unspecified fracture of left pubis, initial encounter for open fracture -S32502D Unspecified fracture of left pubis, subsequent encounter for fracture with routine healing -S32502G Unspecified fracture of left pubis, subsequent encounter for fracture with delayed healing -S32502K Unspecified fracture of left pubis, subsequent encounter for fracture with nonunion -S32502S Unspecified fracture of left pubis, sequela -S32509A Unspecified fracture of unspecified pubis, initial encounter for closed fracture -S32509B Unspecified fracture of unspecified pubis, initial encounter for open fracture -S32509D Unspecified fracture of unspecified pubis, subsequent encounter for fracture with routine healing -S32509G Unspecified fracture of unspecified pubis, subsequent encounter for fracture with delayed healing -S32509K Unspecified fracture of unspecified pubis, subsequent encounter for fracture with nonunion -S32509S Unspecified fracture of unspecified pubis, sequela -S32511A Fracture of superior rim of right pubis, initial encounter for closed fracture -S32511B Fracture of superior rim of right pubis, initial encounter for open fracture -S32511D Fracture of superior rim of right pubis, subsequent encounter for fracture with routine healing -S32511G Fracture of superior rim of right pubis, subsequent encounter for fracture with delayed healing -S32511K Fracture of superior rim of right pubis, subsequent encounter for fracture with nonunion -S32511S Fracture of superior rim of right pubis, sequela -S32512A Fracture of superior rim of left pubis, initial encounter for closed fracture -S32512B Fracture of superior rim of left pubis, initial encounter for open fracture -S32512D Fracture of superior rim of left pubis, subsequent encounter for fracture with routine healing -S32512G Fracture of superior rim of left pubis, subsequent encounter for fracture with delayed healing -S32512K Fracture of superior rim of left pubis, subsequent encounter for fracture with nonunion -S32512S Fracture of superior rim of left pubis, sequela -S32519A Fracture of superior rim of unspecified pubis, initial encounter for closed fracture -S32519B Fracture of superior rim of unspecified pubis, initial encounter for open fracture -S32519D Fracture of superior rim of unspecified pubis, subsequent encounter for fracture with routine healing -S32519G Fracture of superior rim of unspecified pubis, subsequent encounter for fracture with delayed healing -S32519K Fracture of superior rim of unspecified pubis, subsequent encounter for fracture with nonunion -S32519S Fracture of superior rim of unspecified pubis, sequela -S32591A Other specified fracture of right pubis, initial encounter for closed fracture -S32591B Other specified fracture of right pubis, initial encounter for open fracture -S32591D Other specified fracture of right pubis, subsequent encounter for fracture with routine healing -S32591G Other specified fracture of right pubis, subsequent encounter for fracture with delayed healing -S32591K Other specified fracture of right pubis, subsequent encounter for fracture with nonunion -S32591S Other specified fracture of right pubis, sequela -S32592A Other specified fracture of left pubis, initial encounter for closed fracture -S32592B Other specified fracture of left pubis, initial encounter for open fracture -S32592D Other specified fracture of left pubis, subsequent encounter for fracture with routine healing -S32592G Other specified fracture of left pubis, subsequent encounter for fracture with delayed healing -S32592K Other specified fracture of left pubis, subsequent encounter for fracture with nonunion -S32592S Other specified fracture of left pubis, sequela -S32599A Other specified fracture of unspecified pubis, initial encounter for closed fracture -S32599B Other specified fracture of unspecified pubis, initial encounter for open fracture -S32599D Other specified fracture of unspecified pubis, subsequent encounter for fracture with routine healing -S32599G Other specified fracture of unspecified pubis, subsequent encounter for fracture with delayed healing -S32599K Other specified fracture of unspecified pubis, subsequent encounter for fracture with nonunion -S32599S Other specified fracture of unspecified pubis, sequela -S32601A Unspecified fracture of right ischium, initial encounter for closed fracture -S32601B Unspecified fracture of right ischium, initial encounter for open fracture -S32601D Unspecified fracture of right ischium, subsequent encounter for fracture with routine healing -S32601G Unspecified fracture of right ischium, subsequent encounter for fracture with delayed healing -S32601K Unspecified fracture of right ischium, subsequent encounter for fracture with nonunion -S32601S Unspecified fracture of right ischium, sequela -S32602A Unspecified fracture of left ischium, initial encounter for closed fracture -S32602B Unspecified fracture of left ischium, initial encounter for open fracture -S32602D Unspecified fracture of left ischium, subsequent encounter for fracture with routine healing -S32602G Unspecified fracture of left ischium, subsequent encounter for fracture with delayed healing -S32602K Unspecified fracture of left ischium, subsequent encounter for fracture with nonunion -S32602S Unspecified fracture of left ischium, sequela -S32609A Unspecified fracture of unspecified ischium, initial encounter for closed fracture -S32609B Unspecified fracture of unspecified ischium, initial encounter for open fracture -S32609D Unspecified fracture of unspecified ischium, subsequent encounter for fracture with routine healing -S32609G Unspecified fracture of unspecified ischium, subsequent encounter for fracture with delayed healing -S32609K Unspecified fracture of unspecified ischium, subsequent encounter for fracture with nonunion -S32609S Unspecified fracture of unspecified ischium, sequela -S32611A Displaced avulsion fracture of right ischium, initial encounter for closed fracture -S32611B Displaced avulsion fracture of right ischium, initial encounter for open fracture -S32611D Displaced avulsion fracture of right ischium, subsequent encounter for fracture with routine healing -S32611G Displaced avulsion fracture of right ischium, subsequent encounter for fracture with delayed healing -S32611K Displaced avulsion fracture of right ischium, subsequent encounter for fracture with nonunion -S32611S Displaced avulsion fracture of right ischium, sequela -S32612A Displaced avulsion fracture of left ischium, initial encounter for closed fracture -S32612B Displaced avulsion fracture of left ischium, initial encounter for open fracture -S32612D Displaced avulsion fracture of left ischium, subsequent encounter for fracture with routine healing -S32612G Displaced avulsion fracture of left ischium, subsequent encounter for fracture with delayed healing -S32612K Displaced avulsion fracture of left ischium, subsequent encounter for fracture with nonunion -S32612S Displaced avulsion fracture of left ischium, sequela -S32613A Displaced avulsion fracture of unspecified ischium, initial encounter for closed fracture -S32613B Displaced avulsion fracture of unspecified ischium, initial encounter for open fracture -S32613D Displaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with routine healing -S32613G Displaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with delayed healing -S32613K Displaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with nonunion -S32613S Displaced avulsion fracture of unspecified ischium, sequela -S32614A Nondisplaced avulsion fracture of right ischium, initial encounter for closed fracture -S32614B Nondisplaced avulsion fracture of right ischium, initial encounter for open fracture -S32614D Nondisplaced avulsion fracture of right ischium, subsequent encounter for fracture with routine healing -S32614G Nondisplaced avulsion fracture of right ischium, subsequent encounter for fracture with delayed healing -S32614K Nondisplaced avulsion fracture of right ischium, subsequent encounter for fracture with nonunion -S32614S Nondisplaced avulsion fracture of right ischium, sequela -S32615A Nondisplaced avulsion fracture of left ischium, initial encounter for closed fracture -S32615B Nondisplaced avulsion fracture of left ischium, initial encounter for open fracture -S32615D Nondisplaced avulsion fracture of left ischium, subsequent encounter for fracture with routine healing -S32615G Nondisplaced avulsion fracture of left ischium, subsequent encounter for fracture with delayed healing -S32615K Nondisplaced avulsion fracture of left ischium, subsequent encounter for fracture with nonunion -S32615S Nondisplaced avulsion fracture of left ischium, sequela -S32616A Nondisplaced avulsion fracture of unspecified ischium, initial encounter for closed fracture -S32616B Nondisplaced avulsion fracture of unspecified ischium, initial encounter for open fracture -S32616D Nondisplaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with routine healing -S32616G Nondisplaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with delayed healing -S32616K Nondisplaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with nonunion -S32616S Nondisplaced avulsion fracture of unspecified ischium, sequela -S32691A Other specified fracture of right ischium, initial encounter for closed fracture -S32691B Other specified fracture of right ischium, initial encounter for open fracture -S32691D Other specified fracture of right ischium, subsequent encounter for fracture with routine healing -S32691G Other specified fracture of right ischium, subsequent encounter for fracture with delayed healing -S32691K Other specified fracture of right ischium, subsequent encounter for fracture with nonunion -S32691S Other specified fracture of right ischium, sequela -S32692A Other specified fracture of left ischium, initial encounter for closed fracture -S32692B Other specified fracture of left ischium, initial encounter for open fracture -S32692D Other specified fracture of left ischium, subsequent encounter for fracture with routine healing -S32692G Other specified fracture of left ischium, subsequent encounter for fracture with delayed healing -S32692K Other specified fracture of left ischium, subsequent encounter for fracture with nonunion -S32692S Other specified fracture of left ischium, sequela -S32699A Other specified fracture of unspecified ischium, initial encounter for closed fracture -S32699B Other specified fracture of unspecified ischium, initial encounter for open fracture -S32699D Other specified fracture of unspecified ischium, subsequent encounter for fracture with routine healing -S32699G Other specified fracture of unspecified ischium, subsequent encounter for fracture with delayed healing -S32699K Other specified fracture of unspecified ischium, subsequent encounter for fracture with nonunion -S32699S Other specified fracture of unspecified ischium, sequela -S32810A Multiple fractures of pelvis with stable disruption of pelvic ring, initial encounter for closed fracture -S32810B Multiple fractures of pelvis with stable disruption of pelvic ring, initial encounter for open fracture -S32810D Multiple fractures of pelvis with stable disruption of pelvic ring, subsequent encounter for fracture with routine healing -S32810G Multiple fractures of pelvis with stable disruption of pelvic ring, subsequent encounter for fracture with delayed healing -S32810K Multiple fractures of pelvis with stable disruption of pelvic ring, subsequent encounter for fracture with nonunion -S32810S Multiple fractures of pelvis with stable disruption of pelvic ring, sequela -S32811A Multiple fractures of pelvis with unstable disruption of pelvic ring, initial encounter for closed fracture -S32811B Multiple fractures of pelvis with unstable disruption of pelvic ring, initial encounter for open fracture -S32811D Multiple fractures of pelvis with unstable disruption of pelvic ring, subsequent encounter for fracture with routine healing -S32811G Multiple fractures of pelvis with unstable disruption of pelvic ring, subsequent encounter for fracture with delayed healing -S32811K Multiple fractures of pelvis with unstable disruption of pelvic ring, subsequent encounter for fracture with nonunion -S32811S Multiple fractures of pelvis with unstable disruption of pelvic ring, sequela -S3282XA Multiple fractures of pelvis without disruption of pelvic ring, initial encounter for closed fracture -S3282XB Multiple fractures of pelvis without disruption of pelvic ring, initial encounter for open fracture -S3282XD Multiple fractures of pelvis without disruption of pelvic ring, subsequent encounter for fracture with routine healing -S3282XG Multiple fractures of pelvis without disruption of pelvic ring, subsequent encounter for fracture with delayed healing -S3282XK Multiple fractures of pelvis without disruption of pelvic ring, subsequent encounter for fracture with nonunion -S3282XS Multiple fractures of pelvis without disruption of pelvic ring, sequela -S3289XA Fracture of other parts of pelvis, initial encounter for closed fracture -S3289XB Fracture of other parts of pelvis, initial encounter for open fracture -S3289XD Fracture of other parts of pelvis, subsequent encounter for fracture with routine healing -S3289XG Fracture of other parts of pelvis, subsequent encounter for fracture with delayed healing -S3289XK Fracture of other parts of pelvis, subsequent encounter for fracture with nonunion -S3289XS Fracture of other parts of pelvis, sequela -S329XXA Fracture of unspecified parts of lumbosacral spine and pelvis, initial encounter for closed fracture -S329XXB Fracture of unspecified parts of lumbosacral spine and pelvis, initial encounter for open fracture -S329XXD Fracture of unspecified parts of lumbosacral spine and pelvis, subsequent encounter for fracture with routine healing -S329XXG Fracture of unspecified parts of lumbosacral spine and pelvis, subsequent encounter for fracture with delayed healing -S329XXK Fracture of unspecified parts of lumbosacral spine and pelvis, subsequent encounter for fracture with nonunion -S329XXS Fracture of unspecified parts of lumbosacral spine and pelvis, sequela -S330XXA Traumatic rupture of lumbar intervertebral disc, initial encounter -S330XXD Traumatic rupture of lumbar intervertebral disc, subsequent encounter -S330XXS Traumatic rupture of lumbar intervertebral disc, sequela -S33100A Subluxation of unspecified lumbar vertebra, initial encounter -S33100D Subluxation of unspecified lumbar vertebra, subsequent encounter -S33100S Subluxation of unspecified lumbar vertebra, sequela -S33101A Dislocation of unspecified lumbar vertebra, initial encounter -S33101D Dislocation of unspecified lumbar vertebra, subsequent encounter -S33101S Dislocation of unspecified lumbar vertebra, sequela -S33110A Subluxation of L1/L2 lumbar vertebra, initial encounter -S33110D Subluxation of L1/L2 lumbar vertebra, subsequent encounter -S33110S Subluxation of L1/L2 lumbar vertebra, sequela -S33111A Dislocation of L1/L2 lumbar vertebra, initial encounter -S33111D Dislocation of L1/L2 lumbar vertebra, subsequent encounter -S33111S Dislocation of L1/L2 lumbar vertebra, sequela -S33120A Subluxation of L2/L3 lumbar vertebra, initial encounter -S33120D Subluxation of L2/L3 lumbar vertebra, subsequent encounter -S33120S Subluxation of L2/L3 lumbar vertebra, sequela -S33121A Dislocation of L2/L3 lumbar vertebra, initial encounter -S33121D Dislocation of L2/L3 lumbar vertebra, subsequent encounter -S33121S Dislocation of L2/L3 lumbar vertebra, sequela -S33130A Subluxation of L3/L4 lumbar vertebra, initial encounter -S33130D Subluxation of L3/L4 lumbar vertebra, subsequent encounter -S33130S Subluxation of L3/L4 lumbar vertebra, sequela -S33131A Dislocation of L3/L4 lumbar vertebra, initial encounter -S33131D Dislocation of L3/L4 lumbar vertebra, subsequent encounter -S33131S Dislocation of L3/L4 lumbar vertebra, sequela -S33140A Subluxation of L4/L5 lumbar vertebra, initial encounter -S33140D Subluxation of L4/L5 lumbar vertebra, subsequent encounter -S33140S Subluxation of L4/L5 lumbar vertebra, sequela -S33141A Dislocation of L4/L5 lumbar vertebra, initial encounter -S33141D Dislocation of L4/L5 lumbar vertebra, subsequent encounter -S33141S Dislocation of L4/L5 lumbar vertebra, sequela -S332XXA Dislocation of sacroiliac and sacrococcygeal joint, initial encounter -S332XXD Dislocation of sacroiliac and sacrococcygeal joint, subsequent encounter -S332XXS Dislocation of sacroiliac and sacrococcygeal joint, sequela -S3330XA Dislocation of unspecified parts of lumbar spine and pelvis, initial encounter -S3330XD Dislocation of unspecified parts of lumbar spine and pelvis, subsequent encounter -S3330XS Dislocation of unspecified parts of lumbar spine and pelvis, sequela -S3339XA Dislocation of other parts of lumbar spine and pelvis, initial encounter -S3339XD Dislocation of other parts of lumbar spine and pelvis, subsequent encounter -S3339XS Dislocation of other parts of lumbar spine and pelvis, sequela -S334XXA Traumatic rupture of symphysis pubis, initial encounter -S334XXD Traumatic rupture of symphysis pubis, subsequent encounter -S334XXS Traumatic rupture of symphysis pubis, sequela -S335XXA Sprain of ligaments of lumbar spine, initial encounter -S335XXD Sprain of ligaments of lumbar spine, subsequent encounter -S335XXS Sprain of ligaments of lumbar spine, sequela -S336XXA Sprain of sacroiliac joint, initial encounter -S336XXD Sprain of sacroiliac joint, subsequent encounter -S336XXS Sprain of sacroiliac joint, sequela -S338XXA Sprain of other parts of lumbar spine and pelvis, initial encounter -S338XXD Sprain of other parts of lumbar spine and pelvis, subsequent encounter -S338XXS Sprain of other parts of lumbar spine and pelvis, sequela -S339XXA Sprain of unspecified parts of lumbar spine and pelvis, initial encounter -S339XXD Sprain of unspecified parts of lumbar spine and pelvis, subsequent encounter -S339XXS Sprain of unspecified parts of lumbar spine and pelvis, sequela -S3401XA Concussion and edema of lumbar spinal cord, initial encounter -S3401XD Concussion and edema of lumbar spinal cord, subsequent encounter -S3401XS Concussion and edema of lumbar spinal cord, sequela -S3402XA Concussion and edema of sacral spinal cord, initial encounter -S3402XD Concussion and edema of sacral spinal cord, subsequent encounter -S3402XS Concussion and edema of sacral spinal cord, sequela -S34101A Unspecified injury to L1 level of lumbar spinal cord, initial encounter -S34101D Unspecified injury to L1 level of lumbar spinal cord, subsequent encounter -S34101S Unspecified injury to L1 level of lumbar spinal cord, sequela -S34102A Unspecified injury to L2 level of lumbar spinal cord, initial encounter -S34102D Unspecified injury to L2 level of lumbar spinal cord, subsequent encounter -S34102S Unspecified injury to L2 level of lumbar spinal cord, sequela -S34103A Unspecified injury to L3 level of lumbar spinal cord, initial encounter -S34103D Unspecified injury to L3 level of lumbar spinal cord, subsequent encounter -S34103S Unspecified injury to L3 level of lumbar spinal cord, sequela -S34104A Unspecified injury to L4 level of lumbar spinal cord, initial encounter -S34104D Unspecified injury to L4 level of lumbar spinal cord, subsequent encounter -S34104S Unspecified injury to L4 level of lumbar spinal cord, sequela -S34105A Unspecified injury to L5 level of lumbar spinal cord, initial encounter -S34105D Unspecified injury to L5 level of lumbar spinal cord, subsequent encounter -S34105S Unspecified injury to L5 level of lumbar spinal cord, sequela -S34109A Unspecified injury to unspecified level of lumbar spinal cord, initial encounter -S34109D Unspecified injury to unspecified level of lumbar spinal cord, subsequent encounter -S34109S Unspecified injury to unspecified level of lumbar spinal cord, sequela -S34111A Complete lesion of L1 level of lumbar spinal cord, initial encounter -S34111D Complete lesion of L1 level of lumbar spinal cord, subsequent encounter -S34111S Complete lesion of L1 level of lumbar spinal cord, sequela -S34112A Complete lesion of L2 level of lumbar spinal cord, initial encounter -S34112D Complete lesion of L2 level of lumbar spinal cord, subsequent encounter -S34112S Complete lesion of L2 level of lumbar spinal cord, sequela -S34113A Complete lesion of L3 level of lumbar spinal cord, initial encounter -S34113D Complete lesion of L3 level of lumbar spinal cord, subsequent encounter -S34113S Complete lesion of L3 level of lumbar spinal cord, sequela -S34114A Complete lesion of L4 level of lumbar spinal cord, initial encounter -S34114D Complete lesion of L4 level of lumbar spinal cord, subsequent encounter -S34114S Complete lesion of L4 level of lumbar spinal cord, sequela -S34115A Complete lesion of L5 level of lumbar spinal cord, initial encounter -S34115D Complete lesion of L5 level of lumbar spinal cord, subsequent encounter -S34115S Complete lesion of L5 level of lumbar spinal cord, sequela -S34119A Complete lesion of unspecified level of lumbar spinal cord, initial encounter -S34119D Complete lesion of unspecified level of lumbar spinal cord, subsequent encounter -S34119S Complete lesion of unspecified level of lumbar spinal cord, sequela -S34121A Incomplete lesion of L1 level of lumbar spinal cord, initial encounter -S34121D Incomplete lesion of L1 level of lumbar spinal cord, subsequent encounter -S34121S Incomplete lesion of L1 level of lumbar spinal cord, sequela -S34122A Incomplete lesion of L2 level of lumbar spinal cord, initial encounter -S34122D Incomplete lesion of L2 level of lumbar spinal cord, subsequent encounter -S34122S Incomplete lesion of L2 level of lumbar spinal cord, sequela -S34123A Incomplete lesion of L3 level of lumbar spinal cord, initial encounter -S34123D Incomplete lesion of L3 level of lumbar spinal cord, subsequent encounter -S34123S Incomplete lesion of L3 level of lumbar spinal cord, sequela -S34124A Incomplete lesion of L4 level of lumbar spinal cord, initial encounter -S34124D Incomplete lesion of L4 level of lumbar spinal cord, subsequent encounter -S34124S Incomplete lesion of L4 level of lumbar spinal cord, sequela -S34125A Incomplete lesion of L5 level of lumbar spinal cord, initial encounter -S34125D Incomplete lesion of L5 level of lumbar spinal cord, subsequent encounter -S34125S Incomplete lesion of L5 level of lumbar spinal cord, sequela -S34129A Incomplete lesion of unspecified level of lumbar spinal cord, initial encounter -S34129D Incomplete lesion of unspecified level of lumbar spinal cord, subsequent encounter -S34129S Incomplete lesion of unspecified level of lumbar spinal cord, sequela -S34131A Complete lesion of sacral spinal cord, initial encounter -S34131D Complete lesion of sacral spinal cord, subsequent encounter -S34131S Complete lesion of sacral spinal cord, sequela -S34132A Incomplete lesion of sacral spinal cord, initial encounter -S34132D Incomplete lesion of sacral spinal cord, subsequent encounter -S34132S Incomplete lesion of sacral spinal cord, sequela -S34139A Unspecified injury to sacral spinal cord, initial encounter -S34139D Unspecified injury to sacral spinal cord, subsequent encounter -S34139S Unspecified injury to sacral spinal cord, sequela -S3421XA Injury of nerve root of lumbar spine, initial encounter -S3421XD Injury of nerve root of lumbar spine, subsequent encounter -S3421XS Injury of nerve root of lumbar spine, sequela -S3422XA Injury of nerve root of sacral spine, initial encounter -S3422XD Injury of nerve root of sacral spine, subsequent encounter -S3422XS Injury of nerve root of sacral spine, sequela -S343XXA Injury of cauda equina, initial encounter -S343XXD Injury of cauda equina, subsequent encounter -S343XXS Injury of cauda equina, sequela -S344XXA Injury of lumbosacral plexus, initial encounter -S344XXD Injury of lumbosacral plexus, subsequent encounter -S344XXS Injury of lumbosacral plexus, sequela -S345XXA Injury of lumbar, sacral and pelvic sympathetic nerves, initial encounter -S345XXD Injury of lumbar, sacral and pelvic sympathetic nerves, subsequent encounter -S345XXS Injury of lumbar, sacral and pelvic sympathetic nerves, sequela -S346XXA Injury of peripheral nerve(s) at abdomen, lower back and pelvis level, initial encounter -S346XXD Injury of peripheral nerve(s) at abdomen, lower back and pelvis level, subsequent encounter -S346XXS Injury of peripheral nerve(s) at abdomen, lower back and pelvis level, sequela -S348XXA Injury of other nerves at abdomen, lower back and pelvis level, initial encounter -S348XXD Injury of other nerves at abdomen, lower back and pelvis level, subsequent encounter -S348XXS Injury of other nerves at abdomen, lower back and pelvis level, sequela -S349XXA Injury of unspecified nerves at abdomen, lower back and pelvis level, initial encounter -S349XXD Injury of unspecified nerves at abdomen, lower back and pelvis level, subsequent encounter -S349XXS Injury of unspecified nerves at abdomen, lower back and pelvis level, sequela -S3500XA Unspecified injury of abdominal aorta, initial encounter -S3500XD Unspecified injury of abdominal aorta, subsequent encounter -S3500XS Unspecified injury of abdominal aorta, sequela -S3501XA Minor laceration of abdominal aorta, initial encounter -S3501XD Minor laceration of abdominal aorta, subsequent encounter -S3501XS Minor laceration of abdominal aorta, sequela -S3502XA Major laceration of abdominal aorta, initial encounter -S3502XD Major laceration of abdominal aorta, subsequent encounter -S3502XS Major laceration of abdominal aorta, sequela -S3509XA Other injury of abdominal aorta, initial encounter -S3509XD Other injury of abdominal aorta, subsequent encounter -S3509XS Other injury of abdominal aorta, sequela -S3510XA Unspecified injury of inferior vena cava, initial encounter -S3510XD Unspecified injury of inferior vena cava, subsequent encounter -S3510XS Unspecified injury of inferior vena cava, sequela -S3511XA Minor laceration of inferior vena cava, initial encounter -S3511XD Minor laceration of inferior vena cava, subsequent encounter -S3511XS Minor laceration of inferior vena cava, sequela -S3512XA Major laceration of inferior vena cava, initial encounter -S3512XD Major laceration of inferior vena cava, subsequent encounter -S3512XS Major laceration of inferior vena cava, sequela -S3519XA Other injury of inferior vena cava, initial encounter -S3519XD Other injury of inferior vena cava, subsequent encounter -S3519XS Other injury of inferior vena cava, sequela -S35211A Minor laceration of celiac artery, initial encounter -S35211D Minor laceration of celiac artery, subsequent encounter -S35211S Minor laceration of celiac artery, sequela -S35212A Major laceration of celiac artery, initial encounter -S35212D Major laceration of celiac artery, subsequent encounter -S35212S Major laceration of celiac artery, sequela -S35218A Other injury of celiac artery, initial encounter -S35218D Other injury of celiac artery, subsequent encounter -S35218S Other injury of celiac artery, sequela -S35219A Unspecified injury of celiac artery, initial encounter -S35219D Unspecified injury of celiac artery, subsequent encounter -S35219S Unspecified injury of celiac artery, sequela -S35221A Minor laceration of superior mesenteric artery, initial encounter -S35221D Minor laceration of superior mesenteric artery, subsequent encounter -S35221S Minor laceration of superior mesenteric artery, sequela -S35222A Major laceration of superior mesenteric artery, initial encounter -S35222D Major laceration of superior mesenteric artery, subsequent encounter -S35222S Major laceration of superior mesenteric artery, sequela -S35228A Other injury of superior mesenteric artery, initial encounter -S35228D Other injury of superior mesenteric artery, subsequent encounter -S35228S Other injury of superior mesenteric artery, sequela -S35229A Unspecified injury of superior mesenteric artery, initial encounter -S35229D Unspecified injury of superior mesenteric artery, subsequent encounter -S35229S Unspecified injury of superior mesenteric artery, sequela -S35231A Minor laceration of inferior mesenteric artery, initial encounter -S35231D Minor laceration of inferior mesenteric artery, subsequent encounter -S35231S Minor laceration of inferior mesenteric artery, sequela -S35232A Major laceration of inferior mesenteric artery, initial encounter -S35232D Major laceration of inferior mesenteric artery, subsequent encounter -S35232S Major laceration of inferior mesenteric artery, sequela -S35238A Other injury of inferior mesenteric artery, initial encounter -S35238D Other injury of inferior mesenteric artery, subsequent encounter -S35238S Other injury of inferior mesenteric artery, sequela -S35239A Unspecified injury of inferior mesenteric artery, initial encounter -S35239D Unspecified injury of inferior mesenteric artery, subsequent encounter -S35239S Unspecified injury of inferior mesenteric artery, sequela -S35291A Minor laceration of branches of celiac and mesenteric artery, initial encounter -S35291D Minor laceration of branches of celiac and mesenteric artery, subsequent encounter -S35291S Minor laceration of branches of celiac and mesenteric artery, sequela -S35292A Major laceration of branches of celiac and mesenteric artery, initial encounter -S35292D Major laceration of branches of celiac and mesenteric artery, subsequent encounter -S35292S Major laceration of branches of celiac and mesenteric artery, sequela -S35298A Other injury of branches of celiac and mesenteric artery, initial encounter -S35298D Other injury of branches of celiac and mesenteric artery, subsequent encounter -S35298S Other injury of branches of celiac and mesenteric artery, sequela -S35299A Unspecified injury of branches of celiac and mesenteric artery, initial encounter -S35299D Unspecified injury of branches of celiac and mesenteric artery, subsequent encounter -S35299S Unspecified injury of branches of celiac and mesenteric artery, sequela -S35311A Laceration of portal vein, initial encounter -S35311D Laceration of portal vein, subsequent encounter -S35311S Laceration of portal vein, sequela -S35318A Other specified injury of portal vein, initial encounter -S35318D Other specified injury of portal vein, subsequent encounter -S35318S Other specified injury of portal vein, sequela -S35319A Unspecified injury of portal vein, initial encounter -S35319D Unspecified injury of portal vein, subsequent encounter -S35319S Unspecified injury of portal vein, sequela -S35321A Laceration of splenic vein, initial encounter -S35321D Laceration of splenic vein, subsequent encounter -S35321S Laceration of splenic vein, sequela -S35328A Other specified injury of splenic vein, initial encounter -S35328D Other specified injury of splenic vein, subsequent encounter -S35328S Other specified injury of splenic vein, sequela -S35329A Unspecified injury of splenic vein, initial encounter -S35329D Unspecified injury of splenic vein, subsequent encounter -S35329S Unspecified injury of splenic vein, sequela -S35331A Laceration of superior mesenteric vein, initial encounter -S35331D Laceration of superior mesenteric vein, subsequent encounter -S35331S Laceration of superior mesenteric vein, sequela -S35338A Other specified injury of superior mesenteric vein, initial encounter -S35338D Other specified injury of superior mesenteric vein, subsequent encounter -S35338S Other specified injury of superior mesenteric vein, sequela -S35339A Unspecified injury of superior mesenteric vein, initial encounter -S35339D Unspecified injury of superior mesenteric vein, subsequent encounter -S35339S Unspecified injury of superior mesenteric vein, sequela -S35341A Laceration of inferior mesenteric vein, initial encounter -S35341D Laceration of inferior mesenteric vein, subsequent encounter -S35341S Laceration of inferior mesenteric vein, sequela -S35348A Other specified injury of inferior mesenteric vein, initial encounter -S35348D Other specified injury of inferior mesenteric vein, subsequent encounter -S35348S Other specified injury of inferior mesenteric vein, sequela -S35349A Unspecified injury of inferior mesenteric vein, initial encounter -S35349D Unspecified injury of inferior mesenteric vein, subsequent encounter -S35349S Unspecified injury of inferior mesenteric vein, sequela -S35401A Unspecified injury of right renal artery, initial encounter -S35401D Unspecified injury of right renal artery, subsequent encounter -S35401S Unspecified injury of right renal artery, sequela -S35402A Unspecified injury of left renal artery, initial encounter -S35402D Unspecified injury of left renal artery, subsequent encounter -S35402S Unspecified injury of left renal artery, sequela -S35403A Unspecified injury of unspecified renal artery, initial encounter -S35403D Unspecified injury of unspecified renal artery, subsequent encounter -S35403S Unspecified injury of unspecified renal artery, sequela -S35404A Unspecified injury of right renal vein, initial encounter -S35404D Unspecified injury of right renal vein, subsequent encounter -S35404S Unspecified injury of right renal vein, sequela -S35405A Unspecified injury of left renal vein, initial encounter -S35405D Unspecified injury of left renal vein, subsequent encounter -S35405S Unspecified injury of left renal vein, sequela -S35406A Unspecified injury of unspecified renal vein, initial encounter -S35406D Unspecified injury of unspecified renal vein, subsequent encounter -S35406S Unspecified injury of unspecified renal vein, sequela -S35411A Laceration of right renal artery, initial encounter -S35411D Laceration of right renal artery, subsequent encounter -S35411S Laceration of right renal artery, sequela -S35412A Laceration of left renal artery, initial encounter -S35412D Laceration of left renal artery, subsequent encounter -S35412S Laceration of left renal artery, sequela -S35413A Laceration of unspecified renal artery, initial encounter -S35413D Laceration of unspecified renal artery, subsequent encounter -S35413S Laceration of unspecified renal artery, sequela -S35414A Laceration of right renal vein, initial encounter -S35414D Laceration of right renal vein, subsequent encounter -S35414S Laceration of right renal vein, sequela -S35415A Laceration of left renal vein, initial encounter -S35415D Laceration of left renal vein, subsequent encounter -S35415S Laceration of left renal vein, sequela -S35416A Laceration of unspecified renal vein, initial encounter -S35416D Laceration of unspecified renal vein, subsequent encounter -S35416S Laceration of unspecified renal vein, sequela -S35491A Other specified injury of right renal artery, initial encounter -S35491D Other specified injury of right renal artery, subsequent encounter -S35491S Other specified injury of right renal artery, sequela -S35492A Other specified injury of left renal artery, initial encounter -S35492D Other specified injury of left renal artery, subsequent encounter -S35492S Other specified injury of left renal artery, sequela -S35493A Other specified injury of unspecified renal artery, initial encounter -S35493D Other specified injury of unspecified renal artery, subsequent encounter -S35493S Other specified injury of unspecified renal artery, sequela -S35494A Other specified injury of right renal vein, initial encounter -S35494D Other specified injury of right renal vein, subsequent encounter -S35494S Other specified injury of right renal vein, sequela -S35495A Other specified injury of left renal vein, initial encounter -S35495D Other specified injury of left renal vein, subsequent encounter -S35495S Other specified injury of left renal vein, sequela -S35496A Other specified injury of unspecified renal vein, initial encounter -S35496D Other specified injury of unspecified renal vein, subsequent encounter -S35496S Other specified injury of unspecified renal vein, sequela -S3550XA Injury of unspecified iliac blood vessel(s), initial encounter -S3550XD Injury of unspecified iliac blood vessel(s), subsequent encounter -S3550XS Injury of unspecified iliac blood vessel(s), sequela -S35511A Injury of right iliac artery, initial encounter -S35511D Injury of right iliac artery, subsequent encounter -S35511S Injury of right iliac artery, sequela -S35512A Injury of left iliac artery, initial encounter -S35512D Injury of left iliac artery, subsequent encounter -S35512S Injury of left iliac artery, sequela -S35513A Injury of unspecified iliac artery, initial encounter -S35513D Injury of unspecified iliac artery, subsequent encounter -S35513S Injury of unspecified iliac artery, sequela -S35514A Injury of right iliac vein, initial encounter -S35514D Injury of right iliac vein, subsequent encounter -S35514S Injury of right iliac vein, sequela -S35515A Injury of left iliac vein, initial encounter -S35515D Injury of left iliac vein, subsequent encounter -S35515S Injury of left iliac vein, sequela -S35516A Injury of unspecified iliac vein, initial encounter -S35516D Injury of unspecified iliac vein, subsequent encounter -S35516S Injury of unspecified iliac vein, sequela -S35531A Injury of right uterine artery, initial encounter -S35531D Injury of right uterine artery, subsequent encounter -S35531S Injury of right uterine artery, sequela -S35532A Injury of left uterine artery, initial encounter -S35532D Injury of left uterine artery, subsequent encounter -S35532S Injury of left uterine artery, sequela -S35533A Injury of unspecified uterine artery, initial encounter -S35533D Injury of unspecified uterine artery, subsequent encounter -S35533S Injury of unspecified uterine artery, sequela -S35534A Injury of right uterine vein, initial encounter -S35534D Injury of right uterine vein, subsequent encounter -S35534S Injury of right uterine vein, sequela -S35535A Injury of left uterine vein, initial encounter -S35535D Injury of left uterine vein, subsequent encounter -S35535S Injury of left uterine vein, sequela -S35536A Injury of unspecified uterine vein, initial encounter -S35536D Injury of unspecified uterine vein, subsequent encounter -S35536S Injury of unspecified uterine vein, sequela -S3559XA Injury of other iliac blood vessels, initial encounter -S3559XD Injury of other iliac blood vessels, subsequent encounter -S3559XS Injury of other iliac blood vessels, sequela -S358X1A Laceration of other blood vessels at abdomen, lower back and pelvis level, initial encounter -S358X1D Laceration of other blood vessels at abdomen, lower back and pelvis level, subsequent encounter -S358X1S Laceration of other blood vessels at abdomen, lower back and pelvis level, sequela -S358X8A Other specified injury of other blood vessels at abdomen, lower back and pelvis level, initial encounter -S358X8D Other specified injury of other blood vessels at abdomen, lower back and pelvis level, subsequent encounter -S358X8S Other specified injury of other blood vessels at abdomen, lower back and pelvis level, sequela -S358X9A Unspecified injury of other blood vessels at abdomen, lower back and pelvis level, initial encounter -S358X9D Unspecified injury of other blood vessels at abdomen, lower back and pelvis level, subsequent encounter -S358X9S Unspecified injury of other blood vessels at abdomen, lower back and pelvis level, sequela -S3590XA Unspecified injury of unspecified blood vessel at abdomen, lower back and pelvis level, initial encounter -S3590XD Unspecified injury of unspecified blood vessel at abdomen, lower back and pelvis level, subsequent encounter -S3590XS Unspecified injury of unspecified blood vessel at abdomen, lower back and pelvis level, sequela -S3591XA Laceration of unspecified blood vessel at abdomen, lower back and pelvis level, initial encounter -S3591XD Laceration of unspecified blood vessel at abdomen, lower back and pelvis level, subsequent encounter -S3591XS Laceration of unspecified blood vessel at abdomen, lower back and pelvis level, sequela -S3599XA Other specified injury of unspecified blood vessel at abdomen, lower back and pelvis level, initial encounter -S3599XD Other specified injury of unspecified blood vessel at abdomen, lower back and pelvis level, subsequent encounter -S3599XS Other specified injury of unspecified blood vessel at abdomen, lower back and pelvis level, sequela -S3600XA Unspecified injury of spleen, initial encounter -S3600XD Unspecified injury of spleen, subsequent encounter -S3600XS Unspecified injury of spleen, sequela -S36020A Minor contusion of spleen, initial encounter -S36020D Minor contusion of spleen, subsequent encounter -S36020S Minor contusion of spleen, sequela -S36021A Major contusion of spleen, initial encounter -S36021D Major contusion of spleen, subsequent encounter -S36021S Major contusion of spleen, sequela -S36029A Unspecified contusion of spleen, initial encounter -S36029D Unspecified contusion of spleen, subsequent encounter -S36029S Unspecified contusion of spleen, sequela -S36030A Superficial (capsular) laceration of spleen, initial encounter -S36030D Superficial (capsular) laceration of spleen, subsequent encounter -S36030S Superficial (capsular) laceration of spleen, sequela -S36031A Moderate laceration of spleen, initial encounter -S36031D Moderate laceration of spleen, subsequent encounter -S36031S Moderate laceration of spleen, sequela -S36032A Major laceration of spleen, initial encounter -S36032D Major laceration of spleen, subsequent encounter -S36032S Major laceration of spleen, sequela -S36039A Unspecified laceration of spleen, initial encounter -S36039D Unspecified laceration of spleen, subsequent encounter -S36039S Unspecified laceration of spleen, sequela -S3609XA Other injury of spleen, initial encounter -S3609XD Other injury of spleen, subsequent encounter -S3609XS Other injury of spleen, sequela -S36112A Contusion of liver, initial encounter -S36112D Contusion of liver, subsequent encounter -S36112S Contusion of liver, sequela -S36113A Laceration of liver, unspecified degree, initial encounter -S36113D Laceration of liver, unspecified degree, subsequent encounter -S36113S Laceration of liver, unspecified degree, sequela -S36114A Minor laceration of liver, initial encounter -S36114D Minor laceration of liver, subsequent encounter -S36114S Minor laceration of liver, sequela -S36115A Moderate laceration of liver, initial encounter -S36115D Moderate laceration of liver, subsequent encounter -S36115S Moderate laceration of liver, sequela -S36116A Major laceration of liver, initial encounter -S36116D Major laceration of liver, subsequent encounter -S36116S Major laceration of liver, sequela -S36118A Other injury of liver, initial encounter -S36118D Other injury of liver, subsequent encounter -S36118S Other injury of liver, sequela -S36119A Unspecified injury of liver, initial encounter -S36119D Unspecified injury of liver, subsequent encounter -S36119S Unspecified injury of liver, sequela -S36122A Contusion of gallbladder, initial encounter -S36122D Contusion of gallbladder, subsequent encounter -S36122S Contusion of gallbladder, sequela -S36123A Laceration of gallbladder, initial encounter -S36123D Laceration of gallbladder, subsequent encounter -S36123S Laceration of gallbladder, sequela -S36128A Other injury of gallbladder, initial encounter -S36128D Other injury of gallbladder, subsequent encounter -S36128S Other injury of gallbladder, sequela -S36129A Unspecified injury of gallbladder, initial encounter -S36129D Unspecified injury of gallbladder, subsequent encounter -S36129S Unspecified injury of gallbladder, sequela -S3613XA Injury of bile duct, initial encounter -S3613XD Injury of bile duct, subsequent encounter -S3613XS Injury of bile duct, sequela -S36200A Unspecified injury of head of pancreas, initial encounter -S36200D Unspecified injury of head of pancreas, subsequent encounter -S36200S Unspecified injury of head of pancreas, sequela -S36201A Unspecified injury of body of pancreas, initial encounter -S36201D Unspecified injury of body of pancreas, subsequent encounter -S36201S Unspecified injury of body of pancreas, sequela -S36202A Unspecified injury of tail of pancreas, initial encounter -S36202D Unspecified injury of tail of pancreas, subsequent encounter -S36202S Unspecified injury of tail of pancreas, sequela -S36209A Unspecified injury of unspecified part of pancreas, initial encounter -S36209D Unspecified injury of unspecified part of pancreas, subsequent encounter -S36209S Unspecified injury of unspecified part of pancreas, sequela -S36220A Contusion of head of pancreas, initial encounter -S36220D Contusion of head of pancreas, subsequent encounter -S36220S Contusion of head of pancreas, sequela -S36221A Contusion of body of pancreas, initial encounter -S36221D Contusion of body of pancreas, subsequent encounter -S36221S Contusion of body of pancreas, sequela -S36222A Contusion of tail of pancreas, initial encounter -S36222D Contusion of tail of pancreas, subsequent encounter -S36222S Contusion of tail of pancreas, sequela -S36229A Contusion of unspecified part of pancreas, initial encounter -S36229D Contusion of unspecified part of pancreas, subsequent encounter -S36229S Contusion of unspecified part of pancreas, sequela -S36230A Laceration of head of pancreas, unspecified degree, initial encounter -S36230D Laceration of head of pancreas, unspecified degree, subsequent encounter -S36230S Laceration of head of pancreas, unspecified degree, sequela -S36231A Laceration of body of pancreas, unspecified degree, initial encounter -S36231D Laceration of body of pancreas, unspecified degree, subsequent encounter -S36231S Laceration of body of pancreas, unspecified degree, sequela -S36232A Laceration of tail of pancreas, unspecified degree, initial encounter -S36232D Laceration of tail of pancreas, unspecified degree, subsequent encounter -S36232S Laceration of tail of pancreas, unspecified degree, sequela -S36239A Laceration of unspecified part of pancreas, unspecified degree, initial encounter -S36239D Laceration of unspecified part of pancreas, unspecified degree, subsequent encounter -S36239S Laceration of unspecified part of pancreas, unspecified degree, sequela -S36240A Minor laceration of head of pancreas, initial encounter -S36240D Minor laceration of head of pancreas, subsequent encounter -S36240S Minor laceration of head of pancreas, sequela -S36241A Minor laceration of body of pancreas, initial encounter -S36241D Minor laceration of body of pancreas, subsequent encounter -S36241S Minor laceration of body of pancreas, sequela -S36242A Minor laceration of tail of pancreas, initial encounter -S36242D Minor laceration of tail of pancreas, subsequent encounter -S36242S Minor laceration of tail of pancreas, sequela -S36249A Minor laceration of unspecified part of pancreas, initial encounter -S36249D Minor laceration of unspecified part of pancreas, subsequent encounter -S36249S Minor laceration of unspecified part of pancreas, sequela -S36250A Moderate laceration of head of pancreas, initial encounter -S36250D Moderate laceration of head of pancreas, subsequent encounter -S36250S Moderate laceration of head of pancreas, sequela -S36251A Moderate laceration of body of pancreas, initial encounter -S36251D Moderate laceration of body of pancreas, subsequent encounter -S36251S Moderate laceration of body of pancreas, sequela -S36252A Moderate laceration of tail of pancreas, initial encounter -S36252D Moderate laceration of tail of pancreas, subsequent encounter -S36252S Moderate laceration of tail of pancreas, sequela -S36259A Moderate laceration of unspecified part of pancreas, initial encounter -S36259D Moderate laceration of unspecified part of pancreas, subsequent encounter -S36259S Moderate laceration of unspecified part of pancreas, sequela -S36260A Major laceration of head of pancreas, initial encounter -S36260D Major laceration of head of pancreas, subsequent encounter -S36260S Major laceration of head of pancreas, sequela -S36261A Major laceration of body of pancreas, initial encounter -S36261D Major laceration of body of pancreas, subsequent encounter -S36261S Major laceration of body of pancreas, sequela -S36262A Major laceration of tail of pancreas, initial encounter -S36262D Major laceration of tail of pancreas, subsequent encounter -S36262S Major laceration of tail of pancreas, sequela -S36269A Major laceration of unspecified part of pancreas, initial encounter -S36269D Major laceration of unspecified part of pancreas, subsequent encounter -S36269S Major laceration of unspecified part of pancreas, sequela -S36290A Other injury of head of pancreas, initial encounter -S36290D Other injury of head of pancreas, subsequent encounter -S36290S Other injury of head of pancreas, sequela -S36291A Other injury of body of pancreas, initial encounter -S36291D Other injury of body of pancreas, subsequent encounter -S36291S Other injury of body of pancreas, sequela -S36292A Other injury of tail of pancreas, initial encounter -S36292D Other injury of tail of pancreas, subsequent encounter -S36292S Other injury of tail of pancreas, sequela -S36299A Other injury of unspecified part of pancreas, initial encounter -S36299D Other injury of unspecified part of pancreas, subsequent encounter -S36299S Other injury of unspecified part of pancreas, sequela -S3630XA Unspecified injury of stomach, initial encounter -S3630XD Unspecified injury of stomach, subsequent encounter -S3630XS Unspecified injury of stomach, sequela -S3632XA Contusion of stomach, initial encounter -S3632XD Contusion of stomach, subsequent encounter -S3632XS Contusion of stomach, sequela -S3633XA Laceration of stomach, initial encounter -S3633XD Laceration of stomach, subsequent encounter -S3633XS Laceration of stomach, sequela -S3639XA Other injury of stomach, initial encounter -S3639XD Other injury of stomach, subsequent encounter -S3639XS Other injury of stomach, sequela -S36400A Unspecified injury of duodenum, initial encounter -S36400D Unspecified injury of duodenum, subsequent encounter -S36400S Unspecified injury of duodenum, sequela -S36408A Unspecified injury of other part of small intestine, initial encounter -S36408D Unspecified injury of other part of small intestine, subsequent encounter -S36408S Unspecified injury of other part of small intestine, sequela -S36409A Unspecified injury of unspecified part of small intestine, initial encounter -S36409D Unspecified injury of unspecified part of small intestine, subsequent encounter -S36409S Unspecified injury of unspecified part of small intestine, sequela -S36410A Primary blast injury of duodenum, initial encounter -S36410D Primary blast injury of duodenum, subsequent encounter -S36410S Primary blast injury of duodenum, sequela -S36418A Primary blast injury of other part of small intestine, initial encounter -S36418D Primary blast injury of other part of small intestine, subsequent encounter -S36418S Primary blast injury of other part of small intestine, sequela -S36419A Primary blast injury of unspecified part of small intestine, initial encounter -S36419D Primary blast injury of unspecified part of small intestine, subsequent encounter -S36419S Primary blast injury of unspecified part of small intestine, sequela -S36420A Contusion of duodenum, initial encounter -S36420D Contusion of duodenum, subsequent encounter -S36420S Contusion of duodenum, sequela -S36428A Contusion of other part of small intestine, initial encounter -S36428D Contusion of other part of small intestine, subsequent encounter -S36428S Contusion of other part of small intestine, sequela -S36429A Contusion of unspecified part of small intestine, initial encounter -S36429D Contusion of unspecified part of small intestine, subsequent encounter -S36429S Contusion of unspecified part of small intestine, sequela -S36430A Laceration of duodenum, initial encounter -S36430D Laceration of duodenum, subsequent encounter -S36430S Laceration of duodenum, sequela -S36438A Laceration of other part of small intestine, initial encounter -S36438D Laceration of other part of small intestine, subsequent encounter -S36438S Laceration of other part of small intestine, sequela -S36439A Laceration of unspecified part of small intestine, initial encounter -S36439D Laceration of unspecified part of small intestine, subsequent encounter -S36439S Laceration of unspecified part of small intestine, sequela -S36490A Other injury of duodenum, initial encounter -S36490D Other injury of duodenum, subsequent encounter -S36490S Other injury of duodenum, sequela -S36498A Other injury of other part of small intestine, initial encounter -S36498D Other injury of other part of small intestine, subsequent encounter -S36498S Other injury of other part of small intestine, sequela -S36499A Other injury of unspecified part of small intestine, initial encounter -S36499D Other injury of unspecified part of small intestine, subsequent encounter -S36499S Other injury of unspecified part of small intestine, sequela -S36500A Unspecified injury of ascending [right] colon, initial encounter -S36500D Unspecified injury of ascending [right] colon, subsequent encounter -S36500S Unspecified injury of ascending [right] colon, sequela -S36501A Unspecified injury of transverse colon, initial encounter -S36501D Unspecified injury of transverse colon, subsequent encounter -S36501S Unspecified injury of transverse colon, sequela -S36502A Unspecified injury of descending [left] colon, initial encounter -S36502D Unspecified injury of descending [left] colon, subsequent encounter -S36502S Unspecified injury of descending [left] colon, sequela -S36503A Unspecified injury of sigmoid colon, initial encounter -S36503D Unspecified injury of sigmoid colon, subsequent encounter -S36503S Unspecified injury of sigmoid colon, sequela -S36508A Unspecified injury of other part of colon, initial encounter -S36508D Unspecified injury of other part of colon, subsequent encounter -S36508S Unspecified injury of other part of colon, sequela -S36509A Unspecified injury of unspecified part of colon, initial encounter -S36509D Unspecified injury of unspecified part of colon, subsequent encounter -S36509S Unspecified injury of unspecified part of colon, sequela -S36510A Primary blast injury of ascending [right] colon, initial encounter -S36510D Primary blast injury of ascending [right] colon, subsequent encounter -S36510S Primary blast injury of ascending [right] colon, sequela -S36511A Primary blast injury of transverse colon, initial encounter -S36511D Primary blast injury of transverse colon, subsequent encounter -S36511S Primary blast injury of transverse colon, sequela -S36512A Primary blast injury of descending [left] colon, initial encounter -S36512D Primary blast injury of descending [left] colon, subsequent encounter -S36512S Primary blast injury of descending [left] colon, sequela -S36513A Primary blast injury of sigmoid colon, initial encounter -S36513D Primary blast injury of sigmoid colon, subsequent encounter -S36513S Primary blast injury of sigmoid colon, sequela -S36518A Primary blast injury of other part of colon, initial encounter -S36518D Primary blast injury of other part of colon, subsequent encounter -S36518S Primary blast injury of other part of colon, sequela -S36519A Primary blast injury of unspecified part of colon, initial encounter -S36519D Primary blast injury of unspecified part of colon, subsequent encounter -S36519S Primary blast injury of unspecified part of colon, sequela -S36520A Contusion of ascending [right] colon, initial encounter -S36520D Contusion of ascending [right] colon, subsequent encounter -S36520S Contusion of ascending [right] colon, sequela -S36521A Contusion of transverse colon, initial encounter -S36521D Contusion of transverse colon, subsequent encounter -S36521S Contusion of transverse colon, sequela -S36522A Contusion of descending [left] colon, initial encounter -S36522D Contusion of descending [left] colon, subsequent encounter -S36522S Contusion of descending [left] colon, sequela -S36523A Contusion of sigmoid colon, initial encounter -S36523D Contusion of sigmoid colon, subsequent encounter -S36523S Contusion of sigmoid colon, sequela -S36528A Contusion of other part of colon, initial encounter -S36528D Contusion of other part of colon, subsequent encounter -S36528S Contusion of other part of colon, sequela -S36529A Contusion of unspecified part of colon, initial encounter -S36529D Contusion of unspecified part of colon, subsequent encounter -S36529S Contusion of unspecified part of colon, sequela -S36530A Laceration of ascending [right] colon, initial encounter -S36530D Laceration of ascending [right] colon, subsequent encounter -S36530S Laceration of ascending [right] colon, sequela -S36531A Laceration of transverse colon, initial encounter -S36531D Laceration of transverse colon, subsequent encounter -S36531S Laceration of transverse colon, sequela -S36532A Laceration of descending [left] colon, initial encounter -S36532D Laceration of descending [left] colon, subsequent encounter -S36532S Laceration of descending [left] colon, sequela -S36533A Laceration of sigmoid colon, initial encounter -S36533D Laceration of sigmoid colon, subsequent encounter -S36533S Laceration of sigmoid colon, sequela -S36538A Laceration of other part of colon, initial encounter -S36538D Laceration of other part of colon, subsequent encounter -S36538S Laceration of other part of colon, sequela -S36539A Laceration of unspecified part of colon, initial encounter -S36539D Laceration of unspecified part of colon, subsequent encounter -S36539S Laceration of unspecified part of colon, sequela -S36590A Other injury of ascending [right] colon, initial encounter -S36590D Other injury of ascending [right] colon, subsequent encounter -S36590S Other injury of ascending [right] colon, sequela -S36591A Other injury of transverse colon, initial encounter -S36591D Other injury of transverse colon, subsequent encounter -S36591S Other injury of transverse colon, sequela -S36592A Other injury of descending [left] colon, initial encounter -S36592D Other injury of descending [left] colon, subsequent encounter -S36592S Other injury of descending [left] colon, sequela -S36593A Other injury of sigmoid colon, initial encounter -S36593D Other injury of sigmoid colon, subsequent encounter -S36593S Other injury of sigmoid colon, sequela -S36598A Other injury of other part of colon, initial encounter -S36598D Other injury of other part of colon, subsequent encounter -S36598S Other injury of other part of colon, sequela -S36599A Other injury of unspecified part of colon, initial encounter -S36599D Other injury of unspecified part of colon, subsequent encounter -S36599S Other injury of unspecified part of colon, sequela -S3660XA Unspecified injury of rectum, initial encounter -S3660XD Unspecified injury of rectum, subsequent encounter -S3660XS Unspecified injury of rectum, sequela -S3661XA Primary blast injury of rectum, initial encounter -S3661XD Primary blast injury of rectum, subsequent encounter -S3661XS Primary blast injury of rectum, sequela -S3662XA Contusion of rectum, initial encounter -S3662XD Contusion of rectum, subsequent encounter -S3662XS Contusion of rectum, sequela -S3663XA Laceration of rectum, initial encounter -S3663XD Laceration of rectum, subsequent encounter -S3663XS Laceration of rectum, sequela -S3669XA Other injury of rectum, initial encounter -S3669XD Other injury of rectum, subsequent encounter -S3669XS Other injury of rectum, sequela -S3681XA Injury of peritoneum, initial encounter -S3681XD Injury of peritoneum, subsequent encounter -S3681XS Injury of peritoneum, sequela -S36892A Contusion of other intra-abdominal organs, initial encounter -S36892D Contusion of other intra-abdominal organs, subsequent encounter -S36892S Contusion of other intra-abdominal organs, sequela -S36893A Laceration of other intra-abdominal organs, initial encounter -S36893D Laceration of other intra-abdominal organs, subsequent encounter -S36893S Laceration of other intra-abdominal organs, sequela -S36898A Other injury of other intra-abdominal organs, initial encounter -S36898D Other injury of other intra-abdominal organs, subsequent encounter -S36898S Other injury of other intra-abdominal organs, sequela -S36899A Unspecified injury of other intra-abdominal organs, initial encounter -S36899D Unspecified injury of other intra-abdominal organs, subsequent encounter -S36899S Unspecified injury of other intra-abdominal organs, sequela -S3690XA Unspecified injury of unspecified intra-abdominal organ, initial encounter -S3690XD Unspecified injury of unspecified intra-abdominal organ, subsequent encounter -S3690XS Unspecified injury of unspecified intra-abdominal organ, sequela -S3692XA Contusion of unspecified intra-abdominal organ, initial encounter -S3692XD Contusion of unspecified intra-abdominal organ, subsequent encounter -S3692XS Contusion of unspecified intra-abdominal organ, sequela -S3693XA Laceration of unspecified intra-abdominal organ, initial encounter -S3693XD Laceration of unspecified intra-abdominal organ, subsequent encounter -S3693XS Laceration of unspecified intra-abdominal organ, sequela -S3699XA Other injury of unspecified intra-abdominal organ, initial encounter -S3699XD Other injury of unspecified intra-abdominal organ, subsequent encounter -S3699XS Other injury of unspecified intra-abdominal organ, sequela -S37001A Unspecified injury of right kidney, initial encounter -S37001D Unspecified injury of right kidney, subsequent encounter -S37001S Unspecified injury of right kidney, sequela -S37002A Unspecified injury of left kidney, initial encounter -S37002D Unspecified injury of left kidney, subsequent encounter -S37002S Unspecified injury of left kidney, sequela -S37009A Unspecified injury of unspecified kidney, initial encounter -S37009D Unspecified injury of unspecified kidney, subsequent encounter -S37009S Unspecified injury of unspecified kidney, sequela -S37011A Minor contusion of right kidney, initial encounter -S37011D Minor contusion of right kidney, subsequent encounter -S37011S Minor contusion of right kidney, sequela -S37012A Minor contusion of left kidney, initial encounter -S37012D Minor contusion of left kidney, subsequent encounter -S37012S Minor contusion of left kidney, sequela -S37019A Minor contusion of unspecified kidney, initial encounter -S37019D Minor contusion of unspecified kidney, subsequent encounter -S37019S Minor contusion of unspecified kidney, sequela -S37021A Major contusion of right kidney, initial encounter -S37021D Major contusion of right kidney, subsequent encounter -S37021S Major contusion of right kidney, sequela -S37022A Major contusion of left kidney, initial encounter -S37022D Major contusion of left kidney, subsequent encounter -S37022S Major contusion of left kidney, sequela -S37029A Major contusion of unspecified kidney, initial encounter -S37029D Major contusion of unspecified kidney, subsequent encounter -S37029S Major contusion of unspecified kidney, sequela -S37031A Laceration of right kidney, unspecified degree, initial encounter -S37031D Laceration of right kidney, unspecified degree, subsequent encounter -S37031S Laceration of right kidney, unspecified degree, sequela -S37032A Laceration of left kidney, unspecified degree, initial encounter -S37032D Laceration of left kidney, unspecified degree, subsequent encounter -S37032S Laceration of left kidney, unspecified degree, sequela -S37039A Laceration of unspecified kidney, unspecified degree, initial encounter -S37039D Laceration of unspecified kidney, unspecified degree, subsequent encounter -S37039S Laceration of unspecified kidney, unspecified degree, sequela -S37041A Minor laceration of right kidney, initial encounter -S37041D Minor laceration of right kidney, subsequent encounter -S37041S Minor laceration of right kidney, sequela -S37042A Minor laceration of left kidney, initial encounter -S37042D Minor laceration of left kidney, subsequent encounter -S37042S Minor laceration of left kidney, sequela -S37049A Minor laceration of unspecified kidney, initial encounter -S37049D Minor laceration of unspecified kidney, subsequent encounter -S37049S Minor laceration of unspecified kidney, sequela -S37051A Moderate laceration of right kidney, initial encounter -S37051D Moderate laceration of right kidney, subsequent encounter -S37051S Moderate laceration of right kidney, sequela -S37052A Moderate laceration of left kidney, initial encounter -S37052D Moderate laceration of left kidney, subsequent encounter -S37052S Moderate laceration of left kidney, sequela -S37059A Moderate laceration of unspecified kidney, initial encounter -S37059D Moderate laceration of unspecified kidney, subsequent encounter -S37059S Moderate laceration of unspecified kidney, sequela -S37061A Major laceration of right kidney, initial encounter -S37061D Major laceration of right kidney, subsequent encounter -S37061S Major laceration of right kidney, sequela -S37062A Major laceration of left kidney, initial encounter -S37062D Major laceration of left kidney, subsequent encounter -S37062S Major laceration of left kidney, sequela -S37069A Major laceration of unspecified kidney, initial encounter -S37069D Major laceration of unspecified kidney, subsequent encounter -S37069S Major laceration of unspecified kidney, sequela -S37091A Other injury of right kidney, initial encounter -S37091D Other injury of right kidney, subsequent encounter -S37091S Other injury of right kidney, sequela -S37092A Other injury of left kidney, initial encounter -S37092D Other injury of left kidney, subsequent encounter -S37092S Other injury of left kidney, sequela -S37099A Other injury of unspecified kidney, initial encounter -S37099D Other injury of unspecified kidney, subsequent encounter -S37099S Other injury of unspecified kidney, sequela -S3710XA Unspecified injury of ureter, initial encounter -S3710XD Unspecified injury of ureter, subsequent encounter -S3710XS Unspecified injury of ureter, sequela -S3712XA Contusion of ureter, initial encounter -S3712XD Contusion of ureter, subsequent encounter -S3712XS Contusion of ureter, sequela -S3713XA Laceration of ureter, initial encounter -S3713XD Laceration of ureter, subsequent encounter -S3713XS Laceration of ureter, sequela -S3719XA Other injury of ureter, initial encounter -S3719XD Other injury of ureter, subsequent encounter -S3719XS Other injury of ureter, sequela -S3720XA Unspecified injury of bladder, initial encounter -S3720XD Unspecified injury of bladder, subsequent encounter -S3720XS Unspecified injury of bladder, sequela -S3722XA Contusion of bladder, initial encounter -S3722XD Contusion of bladder, subsequent encounter -S3722XS Contusion of bladder, sequela -S3723XA Laceration of bladder, initial encounter -S3723XD Laceration of bladder, subsequent encounter -S3723XS Laceration of bladder, sequela -S3729XA Other injury of bladder, initial encounter -S3729XD Other injury of bladder, subsequent encounter -S3729XS Other injury of bladder, sequela -S3730XA Unspecified injury of urethra, initial encounter -S3730XD Unspecified injury of urethra, subsequent encounter -S3730XS Unspecified injury of urethra, sequela -S3732XA Contusion of urethra, initial encounter -S3732XD Contusion of urethra, subsequent encounter -S3732XS Contusion of urethra, sequela -S3733XA Laceration of urethra, initial encounter -S3733XD Laceration of urethra, subsequent encounter -S3733XS Laceration of urethra, sequela -S3739XA Other injury of urethra, initial encounter -S3739XD Other injury of urethra, subsequent encounter -S3739XS Other injury of urethra, sequela -S37401A Unspecified injury of ovary, unilateral, initial encounter -S37401D Unspecified injury of ovary, unilateral, subsequent encounter -S37401S Unspecified injury of ovary, unilateral, sequela -S37402A Unspecified injury of ovary, bilateral, initial encounter -S37402D Unspecified injury of ovary, bilateral, subsequent encounter -S37402S Unspecified injury of ovary, bilateral, sequela -S37409A Unspecified injury of ovary, unspecified, initial encounter -S37409D Unspecified injury of ovary, unspecified, subsequent encounter -S37409S Unspecified injury of ovary, unspecified, sequela -S37421A Contusion of ovary, unilateral, initial encounter -S37421D Contusion of ovary, unilateral, subsequent encounter -S37421S Contusion of ovary, unilateral, sequela -S37422A Contusion of ovary, bilateral, initial encounter -S37422D Contusion of ovary, bilateral, subsequent encounter -S37422S Contusion of ovary, bilateral, sequela -S37429A Contusion of ovary, unspecified, initial encounter -S37429D Contusion of ovary, unspecified, subsequent encounter -S37429S Contusion of ovary, unspecified, sequela -S37431A Laceration of ovary, unilateral, initial encounter -S37431D Laceration of ovary, unilateral, subsequent encounter -S37431S Laceration of ovary, unilateral, sequela -S37432A Laceration of ovary, bilateral, initial encounter -S37432D Laceration of ovary, bilateral, subsequent encounter -S37432S Laceration of ovary, bilateral, sequela -S37439A Laceration of ovary, unspecified, initial encounter -S37439D Laceration of ovary, unspecified, subsequent encounter -S37439S Laceration of ovary, unspecified, sequela -S37491A Other injury of ovary, unilateral, initial encounter -S37491D Other injury of ovary, unilateral, subsequent encounter -S37491S Other injury of ovary, unilateral, sequela -S37492A Other injury of ovary, bilateral, initial encounter -S37492D Other injury of ovary, bilateral, subsequent encounter -S37492S Other injury of ovary, bilateral, sequela -S37499A Other injury of ovary, unspecified, initial encounter -S37499D Other injury of ovary, unspecified, subsequent encounter -S37499S Other injury of ovary, unspecified, sequela -S37501A Unspecified injury of fallopian tube, unilateral, initial encounter -S37501D Unspecified injury of fallopian tube, unilateral, subsequent encounter -S37501S Unspecified injury of fallopian tube, unilateral, sequela -S37502A Unspecified injury of fallopian tube, bilateral, initial encounter -S37502D Unspecified injury of fallopian tube, bilateral, subsequent encounter -S37502S Unspecified injury of fallopian tube, bilateral, sequela -S37509A Unspecified injury of fallopian tube, unspecified, initial encounter -S37509D Unspecified injury of fallopian tube, unspecified, subsequent encounter -S37509S Unspecified injury of fallopian tube, unspecified, sequela -S37511A Primary blast injury of fallopian tube, unilateral, initial encounter -S37511D Primary blast injury of fallopian tube, unilateral, subsequent encounter -S37511S Primary blast injury of fallopian tube, unilateral, sequela -S37512A Primary blast injury of fallopian tube, bilateral, initial encounter -S37512D Primary blast injury of fallopian tube, bilateral, subsequent encounter -S37512S Primary blast injury of fallopian tube, bilateral, sequela -S37519A Primary blast injury of fallopian tube, unspecified, initial encounter -S37519D Primary blast injury of fallopian tube, unspecified, subsequent encounter -S37519S Primary blast injury of fallopian tube, unspecified, sequela -S37521A Contusion of fallopian tube, unilateral, initial encounter -S37521D Contusion of fallopian tube, unilateral, subsequent encounter -S37521S Contusion of fallopian tube, unilateral, sequela -S37522A Contusion of fallopian tube, bilateral, initial encounter -S37522D Contusion of fallopian tube, bilateral, subsequent encounter -S37522S Contusion of fallopian tube, bilateral, sequela -S37529A Contusion of fallopian tube, unspecified, initial encounter -S37529D Contusion of fallopian tube, unspecified, subsequent encounter -S37529S Contusion of fallopian tube, unspecified, sequela -S37531A Laceration of fallopian tube, unilateral, initial encounter -S37531D Laceration of fallopian tube, unilateral, subsequent encounter -S37531S Laceration of fallopian tube, unilateral, sequela -S37532A Laceration of fallopian tube, bilateral, initial encounter -S37532D Laceration of fallopian tube, bilateral, subsequent encounter -S37532S Laceration of fallopian tube, bilateral, sequela -S37539A Laceration of fallopian tube, unspecified, initial encounter -S37539D Laceration of fallopian tube, unspecified, subsequent encounter -S37539S Laceration of fallopian tube, unspecified, sequela -S37591A Other injury of fallopian tube, unilateral, initial encounter -S37591D Other injury of fallopian tube, unilateral, subsequent encounter -S37591S Other injury of fallopian tube, unilateral, sequela -S37592A Other injury of fallopian tube, bilateral, initial encounter -S37592D Other injury of fallopian tube, bilateral, subsequent encounter -S37592S Other injury of fallopian tube, bilateral, sequela -S37599A Other injury of fallopian tube, unspecified, initial encounter -S37599D Other injury of fallopian tube, unspecified, subsequent encounter -S37599S Other injury of fallopian tube, unspecified, sequela -S3760XA Unspecified injury of uterus, initial encounter -S3760XD Unspecified injury of uterus, subsequent encounter -S3760XS Unspecified injury of uterus, sequela -S3762XA Contusion of uterus, initial encounter -S3762XD Contusion of uterus, subsequent encounter -S3762XS Contusion of uterus, sequela -S3763XA Laceration of uterus, initial encounter -S3763XD Laceration of uterus, subsequent encounter -S3763XS Laceration of uterus, sequela -S3769XA Other injury of uterus, initial encounter -S3769XD Other injury of uterus, subsequent encounter -S3769XS Other injury of uterus, sequela -S37812A Contusion of adrenal gland, initial encounter -S37812D Contusion of adrenal gland, subsequent encounter -S37812S Contusion of adrenal gland, sequela -S37813A Laceration of adrenal gland, initial encounter -S37813D Laceration of adrenal gland, subsequent encounter -S37813S Laceration of adrenal gland, sequela -S37818A Other injury of adrenal gland, initial encounter -S37818D Other injury of adrenal gland, subsequent encounter -S37818S Other injury of adrenal gland, sequela -S37819A Unspecified injury of adrenal gland, initial encounter -S37819D Unspecified injury of adrenal gland, subsequent encounter -S37819S Unspecified injury of adrenal gland, sequela -S37822A Contusion of prostate, initial encounter -S37822D Contusion of prostate, subsequent encounter -S37822S Contusion of prostate, sequela -S37823A Laceration of prostate, initial encounter -S37823D Laceration of prostate, subsequent encounter -S37823S Laceration of prostate, sequela -S37828A Other injury of prostate, initial encounter -S37828D Other injury of prostate, subsequent encounter -S37828S Other injury of prostate, sequela -S37829A Unspecified injury of prostate, initial encounter -S37829D Unspecified injury of prostate, subsequent encounter -S37829S Unspecified injury of prostate, sequela -S37892A Contusion of other urinary and pelvic organ, initial encounter -S37892D Contusion of other urinary and pelvic organ, subsequent encounter -S37892S Contusion of other urinary and pelvic organ, sequela -S37893A Laceration of other urinary and pelvic organ, initial encounter -S37893D Laceration of other urinary and pelvic organ, subsequent encounter -S37893S Laceration of other urinary and pelvic organ, sequela -S37898A Other injury of other urinary and pelvic organ, initial encounter -S37898D Other injury of other urinary and pelvic organ, subsequent encounter -S37898S Other injury of other urinary and pelvic organ, sequela -S37899A Unspecified injury of other urinary and pelvic organ, initial encounter -S37899D Unspecified injury of other urinary and pelvic organ, subsequent encounter -S37899S Unspecified injury of other urinary and pelvic organ, sequela -S3790XA Unspecified injury of unspecified urinary and pelvic organ, initial encounter -S3790XD Unspecified injury of unspecified urinary and pelvic organ, subsequent encounter -S3790XS Unspecified injury of unspecified urinary and pelvic organ, sequela -S3792XA Contusion of unspecified urinary and pelvic organ, initial encounter -S3792XD Contusion of unspecified urinary and pelvic organ, subsequent encounter -S3792XS Contusion of unspecified urinary and pelvic organ, sequela -S3793XA Laceration of unspecified urinary and pelvic organ, initial encounter -S3793XD Laceration of unspecified urinary and pelvic organ, subsequent encounter -S3793XS Laceration of unspecified urinary and pelvic organ, sequela -S3799XA Other injury of unspecified urinary and pelvic organ, initial encounter -S3799XD Other injury of unspecified urinary and pelvic organ, subsequent encounter -S3799XS Other injury of unspecified urinary and pelvic organ, sequela -S38001A Crushing injury of unspecified external genital organs, male, initial encounter -S38001D Crushing injury of unspecified external genital organs, male, subsequent encounter -S38001S Crushing injury of unspecified external genital organs, male, sequela -S38002A Crushing injury of unspecified external genital organs, female, initial encounter -S38002D Crushing injury of unspecified external genital organs, female, subsequent encounter -S38002S Crushing injury of unspecified external genital organs, female, sequela -S3801XA Crushing injury of penis, initial encounter -S3801XD Crushing injury of penis, subsequent encounter -S3801XS Crushing injury of penis, sequela -S3802XA Crushing injury of scrotum and testis, initial encounter -S3802XD Crushing injury of scrotum and testis, subsequent encounter -S3802XS Crushing injury of scrotum and testis, sequela -S3803XA Crushing injury of vulva, initial encounter -S3803XD Crushing injury of vulva, subsequent encounter -S3803XS Crushing injury of vulva, sequela -S381XXA Crushing injury of abdomen, lower back, and pelvis, initial encounter -S381XXD Crushing injury of abdomen, lower back, and pelvis, subsequent encounter -S381XXS Crushing injury of abdomen, lower back, and pelvis, sequela -S38211A Complete traumatic amputation of female external genital organs, initial encounter -S38211D Complete traumatic amputation of female external genital organs, subsequent encounter -S38211S Complete traumatic amputation of female external genital organs, sequela -S38212A Partial traumatic amputation of female external genital organs, initial encounter -S38212D Partial traumatic amputation of female external genital organs, subsequent encounter -S38212S Partial traumatic amputation of female external genital organs, sequela -S38221A Complete traumatic amputation of penis, initial encounter -S38221D Complete traumatic amputation of penis, subsequent encounter -S38221S Complete traumatic amputation of penis, sequela -S38222A Partial traumatic amputation of penis, initial encounter -S38222D Partial traumatic amputation of penis, subsequent encounter -S38222S Partial traumatic amputation of penis, sequela -S38231A Complete traumatic amputation of scrotum and testis, initial encounter -S38231D Complete traumatic amputation of scrotum and testis, subsequent encounter -S38231S Complete traumatic amputation of scrotum and testis, sequela -S38232A Partial traumatic amputation of scrotum and testis, initial encounter -S38232D Partial traumatic amputation of scrotum and testis, subsequent encounter -S38232S Partial traumatic amputation of scrotum and testis, sequela -S383XXA Transection (partial) of abdomen, initial encounter -S383XXD Transection (partial) of abdomen, subsequent encounter -S383XXS Transection (partial) of abdomen, sequela -S39001A Unspecified injury of muscle, fascia and tendon of abdomen, initial encounter -S39001D Unspecified injury of muscle, fascia and tendon of abdomen, subsequent encounter -S39001S Unspecified injury of muscle, fascia and tendon of abdomen, sequela -S39002A Unspecified injury of muscle, fascia and tendon of lower back, initial encounter -S39002D Unspecified injury of muscle, fascia and tendon of lower back, subsequent encounter -S39002S Unspecified injury of muscle, fascia and tendon of lower back, sequela -S39003A Unspecified injury of muscle, fascia and tendon of pelvis, initial encounter -S39003D Unspecified injury of muscle, fascia and tendon of pelvis, subsequent encounter -S39003S Unspecified injury of muscle, fascia and tendon of pelvis, sequela -S39011A Strain of muscle, fascia and tendon of abdomen, initial encounter -S39011D Strain of muscle, fascia and tendon of abdomen, subsequent encounter -S39011S Strain of muscle, fascia and tendon of abdomen, sequela -S39012A Strain of muscle, fascia and tendon of lower back, initial encounter -S39012D Strain of muscle, fascia and tendon of lower back, subsequent encounter -S39012S Strain of muscle, fascia and tendon of lower back, sequela -S39013A Strain of muscle, fascia and tendon of pelvis, initial encounter -S39013D Strain of muscle, fascia and tendon of pelvis, subsequent encounter -S39013S Strain of muscle, fascia and tendon of pelvis, sequela -S39021A Laceration of muscle, fascia and tendon of abdomen, initial encounter -S39021D Laceration of muscle, fascia and tendon of abdomen, subsequent encounter -S39021S Laceration of muscle, fascia and tendon of abdomen, sequela -S39022A Laceration of muscle, fascia and tendon of lower back, initial encounter -S39022D Laceration of muscle, fascia and tendon of lower back, subsequent encounter -S39022S Laceration of muscle, fascia and tendon of lower back, sequela -S39023A Laceration of muscle, fascia and tendon of pelvis, initial encounter -S39023D Laceration of muscle, fascia and tendon of pelvis, subsequent encounter -S39023S Laceration of muscle, fascia and tendon of pelvis, sequela -S39091A Other injury of muscle, fascia and tendon of abdomen, initial encounter -S39091D Other injury of muscle, fascia and tendon of abdomen, subsequent encounter -S39091S Other injury of muscle, fascia and tendon of abdomen, sequela -S39092A Other injury of muscle, fascia and tendon of lower back, initial encounter -S39092D Other injury of muscle, fascia and tendon of lower back, subsequent encounter -S39092S Other injury of muscle, fascia and tendon of lower back, sequela -S39093A Other injury of muscle, fascia and tendon of pelvis, initial encounter -S39093D Other injury of muscle, fascia and tendon of pelvis, subsequent encounter -S39093S Other injury of muscle, fascia and tendon of pelvis, sequela -S3981XA Other specified injuries of abdomen, initial encounter -S3981XD Other specified injuries of abdomen, subsequent encounter -S3981XS Other specified injuries of abdomen, sequela -S3982XA Other specified injuries of lower back, initial encounter -S3982XD Other specified injuries of lower back, subsequent encounter -S3982XS Other specified injuries of lower back, sequela -S3983XA Other specified injuries of pelvis, initial encounter -S3983XD Other specified injuries of pelvis, subsequent encounter -S3983XS Other specified injuries of pelvis, sequela -S39840A Fracture of corpus cavernosum penis, initial encounter -S39840D Fracture of corpus cavernosum penis, subsequent encounter -S39840S Fracture of corpus cavernosum penis, sequela -S39848A Other specified injuries of external genitals, initial encounter -S39848D Other specified injuries of external genitals, subsequent encounter -S39848S Other specified injuries of external genitals, sequela -S3991XA Unspecified injury of abdomen, initial encounter -S3991XD Unspecified injury of abdomen, subsequent encounter -S3991XS Unspecified injury of abdomen, sequela -S3992XA Unspecified injury of lower back, initial encounter -S3992XD Unspecified injury of lower back, subsequent encounter -S3992XS Unspecified injury of lower back, sequela -S3993XA Unspecified injury of pelvis, initial encounter -S3993XD Unspecified injury of pelvis, subsequent encounter -S3993XS Unspecified injury of pelvis, sequela -S3994XA Unspecified injury of external genitals, initial encounter -S3994XD Unspecified injury of external genitals, subsequent encounter -S3994XS Unspecified injury of external genitals, sequela -S40011A Contusion of right shoulder, initial encounter -S40011D Contusion of right shoulder, subsequent encounter -S40011S Contusion of right shoulder, sequela -S40012A Contusion of left shoulder, initial encounter -S40012D Contusion of left shoulder, subsequent encounter -S40012S Contusion of left shoulder, sequela -S40019A Contusion of unspecified shoulder, initial encounter -S40019D Contusion of unspecified shoulder, subsequent encounter -S40019S Contusion of unspecified shoulder, sequela -S40021A Contusion of right upper arm, initial encounter -S40021D Contusion of right upper arm, subsequent encounter -S40021S Contusion of right upper arm, sequela -S40022A Contusion of left upper arm, initial encounter -S40022D Contusion of left upper arm, subsequent encounter -S40022S Contusion of left upper arm, sequela -S40029A Contusion of unspecified upper arm, initial encounter -S40029D Contusion of unspecified upper arm, subsequent encounter -S40029S Contusion of unspecified upper arm, sequela -S40211A Abrasion of right shoulder, initial encounter -S40211D Abrasion of right shoulder, subsequent encounter -S40211S Abrasion of right shoulder, sequela -S40212A Abrasion of left shoulder, initial encounter -S40212D Abrasion of left shoulder, subsequent encounter -S40212S Abrasion of left shoulder, sequela -S40219A Abrasion of unspecified shoulder, initial encounter -S40219D Abrasion of unspecified shoulder, subsequent encounter -S40219S Abrasion of unspecified shoulder, sequela -S40221A Blister (nonthermal) of right shoulder, initial encounter -S40221D Blister (nonthermal) of right shoulder, subsequent encounter -S40221S Blister (nonthermal) of right shoulder, sequela -S40222A Blister (nonthermal) of left shoulder, initial encounter -S40222D Blister (nonthermal) of left shoulder, subsequent encounter -S40222S Blister (nonthermal) of left shoulder, sequela -S40229A Blister (nonthermal) of unspecified shoulder, initial encounter -S40229D Blister (nonthermal) of unspecified shoulder, subsequent encounter -S40229S Blister (nonthermal) of unspecified shoulder, sequela -S40241A External constriction of right shoulder, initial encounter -S40241D External constriction of right shoulder, subsequent encounter -S40241S External constriction of right shoulder, sequela -S40242A External constriction of left shoulder, initial encounter -S40242D External constriction of left shoulder, subsequent encounter -S40242S External constriction of left shoulder, sequela -S40249A External constriction of unspecified shoulder, initial encounter -S40249D External constriction of unspecified shoulder, subsequent encounter -S40249S External constriction of unspecified shoulder, sequela -S40251A Superficial foreign body of right shoulder, initial encounter -S40251D Superficial foreign body of right shoulder, subsequent encounter -S40251S Superficial foreign body of right shoulder, sequela -S40252A Superficial foreign body of left shoulder, initial encounter -S40252D Superficial foreign body of left shoulder, subsequent encounter -S40252S Superficial foreign body of left shoulder, sequela -S40259A Superficial foreign body of unspecified shoulder, initial encounter -S40259D Superficial foreign body of unspecified shoulder, subsequent encounter -S40259S Superficial foreign body of unspecified shoulder, sequela -S40261A Insect bite (nonvenomous) of right shoulder, initial encounter -S40261D Insect bite (nonvenomous) of right shoulder, subsequent encounter -S40261S Insect bite (nonvenomous) of right shoulder, sequela -S40262A Insect bite (nonvenomous) of left shoulder, initial encounter -S40262D Insect bite (nonvenomous) of left shoulder, subsequent encounter -S40262S Insect bite (nonvenomous) of left shoulder, sequela -S40269A Insect bite (nonvenomous) of unspecified shoulder, initial encounter -S40269D Insect bite (nonvenomous) of unspecified shoulder, subsequent encounter -S40269S Insect bite (nonvenomous) of unspecified shoulder, sequela -S40271A Other superficial bite of right shoulder, initial encounter -S40271D Other superficial bite of right shoulder, subsequent encounter -S40271S Other superficial bite of right shoulder, sequela -S40272A Other superficial bite of left shoulder, initial encounter -S40272D Other superficial bite of left shoulder, subsequent encounter -S40272S Other superficial bite of left shoulder, sequela -S40279A Other superficial bite of unspecified shoulder, initial encounter -S40279D Other superficial bite of unspecified shoulder, subsequent encounter -S40279S Other superficial bite of unspecified shoulder, sequela -S40811A Abrasion of right upper arm, initial encounter -S40811D Abrasion of right upper arm, subsequent encounter -S40811S Abrasion of right upper arm, sequela -S40812A Abrasion of left upper arm, initial encounter -S40812D Abrasion of left upper arm, subsequent encounter -S40812S Abrasion of left upper arm, sequela -S40819A Abrasion of unspecified upper arm, initial encounter -S40819D Abrasion of unspecified upper arm, subsequent encounter -S40819S Abrasion of unspecified upper arm, sequela -S40821A Blister (nonthermal) of right upper arm, initial encounter -S40821D Blister (nonthermal) of right upper arm, subsequent encounter -S40821S Blister (nonthermal) of right upper arm, sequela -S40822A Blister (nonthermal) of left upper arm, initial encounter -S40822D Blister (nonthermal) of left upper arm, subsequent encounter -S40822S Blister (nonthermal) of left upper arm, sequela -S40829A Blister (nonthermal) of unspecified upper arm, initial encounter -S40829D Blister (nonthermal) of unspecified upper arm, subsequent encounter -S40829S Blister (nonthermal) of unspecified upper arm, sequela -S40841A External constriction of right upper arm, initial encounter -S40841D External constriction of right upper arm, subsequent encounter -S40841S External constriction of right upper arm, sequela -S40842A External constriction of left upper arm, initial encounter -S40842D External constriction of left upper arm, subsequent encounter -S40842S External constriction of left upper arm, sequela -S40849A External constriction of unspecified upper arm, initial encounter -S40849D External constriction of unspecified upper arm, subsequent encounter -S40849S External constriction of unspecified upper arm, sequela -S40851A Superficial foreign body of right upper arm, initial encounter -S40851D Superficial foreign body of right upper arm, subsequent encounter -S40851S Superficial foreign body of right upper arm, sequela -S40852A Superficial foreign body of left upper arm, initial encounter -S40852D Superficial foreign body of left upper arm, subsequent encounter -S40852S Superficial foreign body of left upper arm, sequela -S40859A Superficial foreign body of unspecified upper arm, initial encounter -S40859D Superficial foreign body of unspecified upper arm, subsequent encounter -S40859S Superficial foreign body of unspecified upper arm, sequela -S40861A Insect bite (nonvenomous) of right upper arm, initial encounter -S40861D Insect bite (nonvenomous) of right upper arm, subsequent encounter -S40861S Insect bite (nonvenomous) of right upper arm, sequela -S40862A Insect bite (nonvenomous) of left upper arm, initial encounter -S40862D Insect bite (nonvenomous) of left upper arm, subsequent encounter -S40862S Insect bite (nonvenomous) of left upper arm, sequela -S40869A Insect bite (nonvenomous) of unspecified upper arm, initial encounter -S40869D Insect bite (nonvenomous) of unspecified upper arm, subsequent encounter -S40869S Insect bite (nonvenomous) of unspecified upper arm, sequela -S40871A Other superficial bite of right upper arm, initial encounter -S40871D Other superficial bite of right upper arm, subsequent encounter -S40871S Other superficial bite of right upper arm, sequela -S40872A Other superficial bite of left upper arm, initial encounter -S40872D Other superficial bite of left upper arm, subsequent encounter -S40872S Other superficial bite of left upper arm, sequela -S40879A Other superficial bite of unspecified upper arm, initial encounter -S40879D Other superficial bite of unspecified upper arm, subsequent encounter -S40879S Other superficial bite of unspecified upper arm, sequela -S40911A Unspecified superficial injury of right shoulder, initial encounter -S40911D Unspecified superficial injury of right shoulder, subsequent encounter -S40911S Unspecified superficial injury of right shoulder, sequela -S40912A Unspecified superficial injury of left shoulder, initial encounter -S40912D Unspecified superficial injury of left shoulder, subsequent encounter -S40912S Unspecified superficial injury of left shoulder, sequela -S40919A Unspecified superficial injury of unspecified shoulder, initial encounter -S40919D Unspecified superficial injury of unspecified shoulder, subsequent encounter -S40919S Unspecified superficial injury of unspecified shoulder, sequela -S40921A Unspecified superficial injury of right upper arm, initial encounter -S40921D Unspecified superficial injury of right upper arm, subsequent encounter -S40921S Unspecified superficial injury of right upper arm, sequela -S40922A Unspecified superficial injury of left upper arm, initial encounter -S40922D Unspecified superficial injury of left upper arm, subsequent encounter -S40922S Unspecified superficial injury of left upper arm, sequela -S40929A Unspecified superficial injury of unspecified upper arm, initial encounter -S40929D Unspecified superficial injury of unspecified upper arm, subsequent encounter -S40929S Unspecified superficial injury of unspecified upper arm, sequela -S41001A Unspecified open wound of right shoulder, initial encounter -S41001D Unspecified open wound of right shoulder, subsequent encounter -S41001S Unspecified open wound of right shoulder, sequela -S41002A Unspecified open wound of left shoulder, initial encounter -S41002D Unspecified open wound of left shoulder, subsequent encounter -S41002S Unspecified open wound of left shoulder, sequela -S41009A Unspecified open wound of unspecified shoulder, initial encounter -S41009D Unspecified open wound of unspecified shoulder, subsequent encounter -S41009S Unspecified open wound of unspecified shoulder, sequela -S41011A Laceration without foreign body of right shoulder, initial encounter -S41011D Laceration without foreign body of right shoulder, subsequent encounter -S41011S Laceration without foreign body of right shoulder, sequela -S41012A Laceration without foreign body of left shoulder, initial encounter -S41012D Laceration without foreign body of left shoulder, subsequent encounter -S41012S Laceration without foreign body of left shoulder, sequela -S41019A Laceration without foreign body of unspecified shoulder, initial encounter -S41019D Laceration without foreign body of unspecified shoulder, subsequent encounter -S41019S Laceration without foreign body of unspecified shoulder, sequela -S41021A Laceration with foreign body of right shoulder, initial encounter -S41021D Laceration with foreign body of right shoulder, subsequent encounter -S41021S Laceration with foreign body of right shoulder, sequela -S41022A Laceration with foreign body of left shoulder, initial encounter -S41022D Laceration with foreign body of left shoulder, subsequent encounter -S41022S Laceration with foreign body of left shoulder, sequela -S41029A Laceration with foreign body of unspecified shoulder, initial encounter -S41029D Laceration with foreign body of unspecified shoulder, subsequent encounter -S41029S Laceration with foreign body of unspecified shoulder, sequela -S41031A Puncture wound without foreign body of right shoulder, initial encounter -S41031D Puncture wound without foreign body of right shoulder, subsequent encounter -S41031S Puncture wound without foreign body of right shoulder, sequela -S41032A Puncture wound without foreign body of left shoulder, initial encounter -S41032D Puncture wound without foreign body of left shoulder, subsequent encounter -S41032S Puncture wound without foreign body of left shoulder, sequela -S41039A Puncture wound without foreign body of unspecified shoulder, initial encounter -S41039D Puncture wound without foreign body of unspecified shoulder, subsequent encounter -S41039S Puncture wound without foreign body of unspecified shoulder, sequela -S41041A Puncture wound with foreign body of right shoulder, initial encounter -S41041D Puncture wound with foreign body of right shoulder, subsequent encounter -S41041S Puncture wound with foreign body of right shoulder, sequela -S41042A Puncture wound with foreign body of left shoulder, initial encounter -S41042D Puncture wound with foreign body of left shoulder, subsequent encounter -S41042S Puncture wound with foreign body of left shoulder, sequela -S41049A Puncture wound with foreign body of unspecified shoulder, initial encounter -S41049D Puncture wound with foreign body of unspecified shoulder, subsequent encounter -S41049S Puncture wound with foreign body of unspecified shoulder, sequela -S41051A Open bite of right shoulder, initial encounter -S41051D Open bite of right shoulder, subsequent encounter -S41051S Open bite of right shoulder, sequela -S41052A Open bite of left shoulder, initial encounter -S41052D Open bite of left shoulder, subsequent encounter -S41052S Open bite of left shoulder, sequela -S41059A Open bite of unspecified shoulder, initial encounter -S41059D Open bite of unspecified shoulder, subsequent encounter -S41059S Open bite of unspecified shoulder, sequela -S41101A Unspecified open wound of right upper arm, initial encounter -S41101D Unspecified open wound of right upper arm, subsequent encounter -S41101S Unspecified open wound of right upper arm, sequela -S41102A Unspecified open wound of left upper arm, initial encounter -S41102D Unspecified open wound of left upper arm, subsequent encounter -S41102S Unspecified open wound of left upper arm, sequela -S41109A Unspecified open wound of unspecified upper arm, initial encounter -S41109D Unspecified open wound of unspecified upper arm, subsequent encounter -S41109S Unspecified open wound of unspecified upper arm, sequela -S41111A Laceration without foreign body of right upper arm, initial encounter -S41111D Laceration without foreign body of right upper arm, subsequent encounter -S41111S Laceration without foreign body of right upper arm, sequela -S41112A Laceration without foreign body of left upper arm, initial encounter -S41112D Laceration without foreign body of left upper arm, subsequent encounter -S41112S Laceration without foreign body of left upper arm, sequela -S41119A Laceration without foreign body of unspecified upper arm, initial encounter -S41119D Laceration without foreign body of unspecified upper arm, subsequent encounter -S41119S Laceration without foreign body of unspecified upper arm, sequela -S41121A Laceration with foreign body of right upper arm, initial encounter -S41121D Laceration with foreign body of right upper arm, subsequent encounter -S41121S Laceration with foreign body of right upper arm, sequela -S41122A Laceration with foreign body of left upper arm, initial encounter -S41122D Laceration with foreign body of left upper arm, subsequent encounter -S41122S Laceration with foreign body of left upper arm, sequela -S41129A Laceration with foreign body of unspecified upper arm, initial encounter -S41129D Laceration with foreign body of unspecified upper arm, subsequent encounter -S41129S Laceration with foreign body of unspecified upper arm, sequela -S41131A Puncture wound without foreign body of right upper arm, initial encounter -S41131D Puncture wound without foreign body of right upper arm, subsequent encounter -S41131S Puncture wound without foreign body of right upper arm, sequela -S41132A Puncture wound without foreign body of left upper arm, initial encounter -S41132D Puncture wound without foreign body of left upper arm, subsequent encounter -S41132S Puncture wound without foreign body of left upper arm, sequela -S41139A Puncture wound without foreign body of unspecified upper arm, initial encounter -S41139D Puncture wound without foreign body of unspecified upper arm, subsequent encounter -S41139S Puncture wound without foreign body of unspecified upper arm, sequela -S41141A Puncture wound with foreign body of right upper arm, initial encounter -S41141D Puncture wound with foreign body of right upper arm, subsequent encounter -S41141S Puncture wound with foreign body of right upper arm, sequela -S41142A Puncture wound with foreign body of left upper arm, initial encounter -S41142D Puncture wound with foreign body of left upper arm, subsequent encounter -S41142S Puncture wound with foreign body of left upper arm, sequela -S41149A Puncture wound with foreign body of unspecified upper arm, initial encounter -S41149D Puncture wound with foreign body of unspecified upper arm, subsequent encounter -S41149S Puncture wound with foreign body of unspecified upper arm, sequela -S41151A Open bite of right upper arm, initial encounter -S41151D Open bite of right upper arm, subsequent encounter -S41151S Open bite of right upper arm, sequela -S41152A Open bite of left upper arm, initial encounter -S41152D Open bite of left upper arm, subsequent encounter -S41152S Open bite of left upper arm, sequela -S41159A Open bite of unspecified upper arm, initial encounter -S41159D Open bite of unspecified upper arm, subsequent encounter -S41159S Open bite of unspecified upper arm, sequela -S42001A Fracture of unspecified part of right clavicle, initial encounter for closed fracture -S42001B Fracture of unspecified part of right clavicle, initial encounter for open fracture -S42001D Fracture of unspecified part of right clavicle, subsequent encounter for fracture with routine healing -S42001G Fracture of unspecified part of right clavicle, subsequent encounter for fracture with delayed healing -S42001K Fracture of unspecified part of right clavicle, subsequent encounter for fracture with nonunion -S42001P Fracture of unspecified part of right clavicle, subsequent encounter for fracture with malunion -S42001S Fracture of unspecified part of right clavicle, sequela -S42002A Fracture of unspecified part of left clavicle, initial encounter for closed fracture -S42002B Fracture of unspecified part of left clavicle, initial encounter for open fracture -S42002D Fracture of unspecified part of left clavicle, subsequent encounter for fracture with routine healing -S42002G Fracture of unspecified part of left clavicle, subsequent encounter for fracture with delayed healing -S42002K Fracture of unspecified part of left clavicle, subsequent encounter for fracture with nonunion -S42002P Fracture of unspecified part of left clavicle, subsequent encounter for fracture with malunion -S42002S Fracture of unspecified part of left clavicle, sequela -S42009A Fracture of unspecified part of unspecified clavicle, initial encounter for closed fracture -S42009B Fracture of unspecified part of unspecified clavicle, initial encounter for open fracture -S42009D Fracture of unspecified part of unspecified clavicle, subsequent encounter for fracture with routine healing -S42009G Fracture of unspecified part of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42009K Fracture of unspecified part of unspecified clavicle, subsequent encounter for fracture with nonunion -S42009P Fracture of unspecified part of unspecified clavicle, subsequent encounter for fracture with malunion -S42009S Fracture of unspecified part of unspecified clavicle, sequela -S42011A Anterior displaced fracture of sternal end of right clavicle, initial encounter for closed fracture -S42011B Anterior displaced fracture of sternal end of right clavicle, initial encounter for open fracture -S42011D Anterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with routine healing -S42011G Anterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with delayed healing -S42011K Anterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with nonunion -S42011P Anterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with malunion -S42011S Anterior displaced fracture of sternal end of right clavicle, sequela -S42012A Anterior displaced fracture of sternal end of left clavicle, initial encounter for closed fracture -S42012B Anterior displaced fracture of sternal end of left clavicle, initial encounter for open fracture -S42012D Anterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with routine healing -S42012G Anterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with delayed healing -S42012K Anterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with nonunion -S42012P Anterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with malunion -S42012S Anterior displaced fracture of sternal end of left clavicle, sequela -S42013A Anterior displaced fracture of sternal end of unspecified clavicle, initial encounter for closed fracture -S42013B Anterior displaced fracture of sternal end of unspecified clavicle, initial encounter for open fracture -S42013D Anterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with routine healing -S42013G Anterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42013K Anterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with nonunion -S42013P Anterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with malunion -S42013S Anterior displaced fracture of sternal end of unspecified clavicle, sequela -S42014A Posterior displaced fracture of sternal end of right clavicle, initial encounter for closed fracture -S42014B Posterior displaced fracture of sternal end of right clavicle, initial encounter for open fracture -S42014D Posterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with routine healing -S42014G Posterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with delayed healing -S42014K Posterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with nonunion -S42014P Posterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with malunion -S42014S Posterior displaced fracture of sternal end of right clavicle, sequela -S42015A Posterior displaced fracture of sternal end of left clavicle, initial encounter for closed fracture -S42015B Posterior displaced fracture of sternal end of left clavicle, initial encounter for open fracture -S42015D Posterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with routine healing -S42015G Posterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with delayed healing -S42015K Posterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with nonunion -S42015P Posterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with malunion -S42015S Posterior displaced fracture of sternal end of left clavicle, sequela -S42016A Posterior displaced fracture of sternal end of unspecified clavicle, initial encounter for closed fracture -S42016B Posterior displaced fracture of sternal end of unspecified clavicle, initial encounter for open fracture -S42016D Posterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with routine healing -S42016G Posterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42016K Posterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with nonunion -S42016P Posterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with malunion -S42016S Posterior displaced fracture of sternal end of unspecified clavicle, sequela -S42017A Nondisplaced fracture of sternal end of right clavicle, initial encounter for closed fracture -S42017B Nondisplaced fracture of sternal end of right clavicle, initial encounter for open fracture -S42017D Nondisplaced fracture of sternal end of right clavicle, subsequent encounter for fracture with routine healing -S42017G Nondisplaced fracture of sternal end of right clavicle, subsequent encounter for fracture with delayed healing -S42017K Nondisplaced fracture of sternal end of right clavicle, subsequent encounter for fracture with nonunion -S42017P Nondisplaced fracture of sternal end of right clavicle, subsequent encounter for fracture with malunion -S42017S Nondisplaced fracture of sternal end of right clavicle, sequela -S42018A Nondisplaced fracture of sternal end of left clavicle, initial encounter for closed fracture -S42018B Nondisplaced fracture of sternal end of left clavicle, initial encounter for open fracture -S42018D Nondisplaced fracture of sternal end of left clavicle, subsequent encounter for fracture with routine healing -S42018G Nondisplaced fracture of sternal end of left clavicle, subsequent encounter for fracture with delayed healing -S42018K Nondisplaced fracture of sternal end of left clavicle, subsequent encounter for fracture with nonunion -S42018P Nondisplaced fracture of sternal end of left clavicle, subsequent encounter for fracture with malunion -S42018S Nondisplaced fracture of sternal end of left clavicle, sequela -S42019A Nondisplaced fracture of sternal end of unspecified clavicle, initial encounter for closed fracture -S42019B Nondisplaced fracture of sternal end of unspecified clavicle, initial encounter for open fracture -S42019D Nondisplaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with routine healing -S42019G Nondisplaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42019K Nondisplaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with nonunion -S42019P Nondisplaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with malunion -S42019S Nondisplaced fracture of sternal end of unspecified clavicle, sequela -S42021A Displaced fracture of shaft of right clavicle, initial encounter for closed fracture -S42021B Displaced fracture of shaft of right clavicle, initial encounter for open fracture -S42021D Displaced fracture of shaft of right clavicle, subsequent encounter for fracture with routine healing -S42021G Displaced fracture of shaft of right clavicle, subsequent encounter for fracture with delayed healing -S42021K Displaced fracture of shaft of right clavicle, subsequent encounter for fracture with nonunion -S42021P Displaced fracture of shaft of right clavicle, subsequent encounter for fracture with malunion -S42021S Displaced fracture of shaft of right clavicle, sequela -S42022A Displaced fracture of shaft of left clavicle, initial encounter for closed fracture -S42022B Displaced fracture of shaft of left clavicle, initial encounter for open fracture -S42022D Displaced fracture of shaft of left clavicle, subsequent encounter for fracture with routine healing -S42022G Displaced fracture of shaft of left clavicle, subsequent encounter for fracture with delayed healing -S42022K Displaced fracture of shaft of left clavicle, subsequent encounter for fracture with nonunion -S42022P Displaced fracture of shaft of left clavicle, subsequent encounter for fracture with malunion -S42022S Displaced fracture of shaft of left clavicle, sequela -S42023A Displaced fracture of shaft of unspecified clavicle, initial encounter for closed fracture -S42023B Displaced fracture of shaft of unspecified clavicle, initial encounter for open fracture -S42023D Displaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with routine healing -S42023G Displaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42023K Displaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with nonunion -S42023P Displaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with malunion -S42023S Displaced fracture of shaft of unspecified clavicle, sequela -S42024A Nondisplaced fracture of shaft of right clavicle, initial encounter for closed fracture -S42024B Nondisplaced fracture of shaft of right clavicle, initial encounter for open fracture -S42024D Nondisplaced fracture of shaft of right clavicle, subsequent encounter for fracture with routine healing -S42024G Nondisplaced fracture of shaft of right clavicle, subsequent encounter for fracture with delayed healing -S42024K Nondisplaced fracture of shaft of right clavicle, subsequent encounter for fracture with nonunion -S42024P Nondisplaced fracture of shaft of right clavicle, subsequent encounter for fracture with malunion -S42024S Nondisplaced fracture of shaft of right clavicle, sequela -S42025A Nondisplaced fracture of shaft of left clavicle, initial encounter for closed fracture -S42025B Nondisplaced fracture of shaft of left clavicle, initial encounter for open fracture -S42025D Nondisplaced fracture of shaft of left clavicle, subsequent encounter for fracture with routine healing -S42025G Nondisplaced fracture of shaft of left clavicle, subsequent encounter for fracture with delayed healing -S42025K Nondisplaced fracture of shaft of left clavicle, subsequent encounter for fracture with nonunion -S42025P Nondisplaced fracture of shaft of left clavicle, subsequent encounter for fracture with malunion -S42025S Nondisplaced fracture of shaft of left clavicle, sequela -S42026A Nondisplaced fracture of shaft of unspecified clavicle, initial encounter for closed fracture -S42026B Nondisplaced fracture of shaft of unspecified clavicle, initial encounter for open fracture -S42026D Nondisplaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with routine healing -S42026G Nondisplaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42026K Nondisplaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with nonunion -S42026P Nondisplaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with malunion -S42026S Nondisplaced fracture of shaft of unspecified clavicle, sequela -S42031A Displaced fracture of lateral end of right clavicle, initial encounter for closed fracture -S42031B Displaced fracture of lateral end of right clavicle, initial encounter for open fracture -S42031D Displaced fracture of lateral end of right clavicle, subsequent encounter for fracture with routine healing -S42031G Displaced fracture of lateral end of right clavicle, subsequent encounter for fracture with delayed healing -S42031K Displaced fracture of lateral end of right clavicle, subsequent encounter for fracture with nonunion -S42031P Displaced fracture of lateral end of right clavicle, subsequent encounter for fracture with malunion -S42031S Displaced fracture of lateral end of right clavicle, sequela -S42032A Displaced fracture of lateral end of left clavicle, initial encounter for closed fracture -S42032B Displaced fracture of lateral end of left clavicle, initial encounter for open fracture -S42032D Displaced fracture of lateral end of left clavicle, subsequent encounter for fracture with routine healing -S42032G Displaced fracture of lateral end of left clavicle, subsequent encounter for fracture with delayed healing -S42032K Displaced fracture of lateral end of left clavicle, subsequent encounter for fracture with nonunion -S42032P Displaced fracture of lateral end of left clavicle, subsequent encounter for fracture with malunion -S42032S Displaced fracture of lateral end of left clavicle, sequela -S42033A Displaced fracture of lateral end of unspecified clavicle, initial encounter for closed fracture -S42033B Displaced fracture of lateral end of unspecified clavicle, initial encounter for open fracture -S42033D Displaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with routine healing -S42033G Displaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42033K Displaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with nonunion -S42033P Displaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with malunion -S42033S Displaced fracture of lateral end of unspecified clavicle, sequela -S42034A Nondisplaced fracture of lateral end of right clavicle, initial encounter for closed fracture -S42034B Nondisplaced fracture of lateral end of right clavicle, initial encounter for open fracture -S42034D Nondisplaced fracture of lateral end of right clavicle, subsequent encounter for fracture with routine healing -S42034G Nondisplaced fracture of lateral end of right clavicle, subsequent encounter for fracture with delayed healing -S42034K Nondisplaced fracture of lateral end of right clavicle, subsequent encounter for fracture with nonunion -S42034P Nondisplaced fracture of lateral end of right clavicle, subsequent encounter for fracture with malunion -S42034S Nondisplaced fracture of lateral end of right clavicle, sequela -S42035A Nondisplaced fracture of lateral end of left clavicle, initial encounter for closed fracture -S42035B Nondisplaced fracture of lateral end of left clavicle, initial encounter for open fracture -S42035D Nondisplaced fracture of lateral end of left clavicle, subsequent encounter for fracture with routine healing -S42035G Nondisplaced fracture of lateral end of left clavicle, subsequent encounter for fracture with delayed healing -S42035K Nondisplaced fracture of lateral end of left clavicle, subsequent encounter for fracture with nonunion -S42035P Nondisplaced fracture of lateral end of left clavicle, subsequent encounter for fracture with malunion -S42035S Nondisplaced fracture of lateral end of left clavicle, sequela -S42036A Nondisplaced fracture of lateral end of unspecified clavicle, initial encounter for closed fracture -S42036B Nondisplaced fracture of lateral end of unspecified clavicle, initial encounter for open fracture -S42036D Nondisplaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with routine healing -S42036G Nondisplaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42036K Nondisplaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with nonunion -S42036P Nondisplaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with malunion -S42036S Nondisplaced fracture of lateral end of unspecified clavicle, sequela -S42101A Fracture of unspecified part of scapula, right shoulder, initial encounter for closed fracture -S42101B Fracture of unspecified part of scapula, right shoulder, initial encounter for open fracture -S42101D Fracture of unspecified part of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42101G Fracture of unspecified part of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42101K Fracture of unspecified part of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42101P Fracture of unspecified part of scapula, right shoulder, subsequent encounter for fracture with malunion -S42101S Fracture of unspecified part of scapula, right shoulder, sequela -S42102A Fracture of unspecified part of scapula, left shoulder, initial encounter for closed fracture -S42102B Fracture of unspecified part of scapula, left shoulder, initial encounter for open fracture -S42102D Fracture of unspecified part of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42102G Fracture of unspecified part of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42102K Fracture of unspecified part of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42102P Fracture of unspecified part of scapula, left shoulder, subsequent encounter for fracture with malunion -S42102S Fracture of unspecified part of scapula, left shoulder, sequela -S42109A Fracture of unspecified part of scapula, unspecified shoulder, initial encounter for closed fracture -S42109B Fracture of unspecified part of scapula, unspecified shoulder, initial encounter for open fracture -S42109D Fracture of unspecified part of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42109G Fracture of unspecified part of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42109K Fracture of unspecified part of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42109P Fracture of unspecified part of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42109S Fracture of unspecified part of scapula, unspecified shoulder, sequela -S42111A Displaced fracture of body of scapula, right shoulder, initial encounter for closed fracture -S42111B Displaced fracture of body of scapula, right shoulder, initial encounter for open fracture -S42111D Displaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42111G Displaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42111K Displaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42111P Displaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with malunion -S42111S Displaced fracture of body of scapula, right shoulder, sequela -S42112A Displaced fracture of body of scapula, left shoulder, initial encounter for closed fracture -S42112B Displaced fracture of body of scapula, left shoulder, initial encounter for open fracture -S42112D Displaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42112G Displaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42112K Displaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42112P Displaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with malunion -S42112S Displaced fracture of body of scapula, left shoulder, sequela -S42113A Displaced fracture of body of scapula, unspecified shoulder, initial encounter for closed fracture -S42113B Displaced fracture of body of scapula, unspecified shoulder, initial encounter for open fracture -S42113D Displaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42113G Displaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42113K Displaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42113P Displaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42113S Displaced fracture of body of scapula, unspecified shoulder, sequela -S42114A Nondisplaced fracture of body of scapula, right shoulder, initial encounter for closed fracture -S42114B Nondisplaced fracture of body of scapula, right shoulder, initial encounter for open fracture -S42114D Nondisplaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42114G Nondisplaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42114K Nondisplaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42114P Nondisplaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with malunion -S42114S Nondisplaced fracture of body of scapula, right shoulder, sequela -S42115A Nondisplaced fracture of body of scapula, left shoulder, initial encounter for closed fracture -S42115B Nondisplaced fracture of body of scapula, left shoulder, initial encounter for open fracture -S42115D Nondisplaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42115G Nondisplaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42115K Nondisplaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42115P Nondisplaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with malunion -S42115S Nondisplaced fracture of body of scapula, left shoulder, sequela -S42116A Nondisplaced fracture of body of scapula, unspecified shoulder, initial encounter for closed fracture -S42116B Nondisplaced fracture of body of scapula, unspecified shoulder, initial encounter for open fracture -S42116D Nondisplaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42116G Nondisplaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42116K Nondisplaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42116P Nondisplaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42116S Nondisplaced fracture of body of scapula, unspecified shoulder, sequela -S42121A Displaced fracture of acromial process, right shoulder, initial encounter for closed fracture -S42121B Displaced fracture of acromial process, right shoulder, initial encounter for open fracture -S42121D Displaced fracture of acromial process, right shoulder, subsequent encounter for fracture with routine healing -S42121G Displaced fracture of acromial process, right shoulder, subsequent encounter for fracture with delayed healing -S42121K Displaced fracture of acromial process, right shoulder, subsequent encounter for fracture with nonunion -S42121P Displaced fracture of acromial process, right shoulder, subsequent encounter for fracture with malunion -S42121S Displaced fracture of acromial process, right shoulder, sequela -S42122A Displaced fracture of acromial process, left shoulder, initial encounter for closed fracture -S42122B Displaced fracture of acromial process, left shoulder, initial encounter for open fracture -S42122D Displaced fracture of acromial process, left shoulder, subsequent encounter for fracture with routine healing -S42122G Displaced fracture of acromial process, left shoulder, subsequent encounter for fracture with delayed healing -S42122K Displaced fracture of acromial process, left shoulder, subsequent encounter for fracture with nonunion -S42122P Displaced fracture of acromial process, left shoulder, subsequent encounter for fracture with malunion -S42122S Displaced fracture of acromial process, left shoulder, sequela -S42123A Displaced fracture of acromial process, unspecified shoulder, initial encounter for closed fracture -S42123B Displaced fracture of acromial process, unspecified shoulder, initial encounter for open fracture -S42123D Displaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with routine healing -S42123G Displaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42123K Displaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with nonunion -S42123P Displaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with malunion -S42123S Displaced fracture of acromial process, unspecified shoulder, sequela -S42124A Nondisplaced fracture of acromial process, right shoulder, initial encounter for closed fracture -S42124B Nondisplaced fracture of acromial process, right shoulder, initial encounter for open fracture -S42124D Nondisplaced fracture of acromial process, right shoulder, subsequent encounter for fracture with routine healing -S42124G Nondisplaced fracture of acromial process, right shoulder, subsequent encounter for fracture with delayed healing -S42124K Nondisplaced fracture of acromial process, right shoulder, subsequent encounter for fracture with nonunion -S42124P Nondisplaced fracture of acromial process, right shoulder, subsequent encounter for fracture with malunion -S42124S Nondisplaced fracture of acromial process, right shoulder, sequela -S42125A Nondisplaced fracture of acromial process, left shoulder, initial encounter for closed fracture -S42125B Nondisplaced fracture of acromial process, left shoulder, initial encounter for open fracture -S42125D Nondisplaced fracture of acromial process, left shoulder, subsequent encounter for fracture with routine healing -S42125G Nondisplaced fracture of acromial process, left shoulder, subsequent encounter for fracture with delayed healing -S42125K Nondisplaced fracture of acromial process, left shoulder, subsequent encounter for fracture with nonunion -S42125P Nondisplaced fracture of acromial process, left shoulder, subsequent encounter for fracture with malunion -S42125S Nondisplaced fracture of acromial process, left shoulder, sequela -S42126A Nondisplaced fracture of acromial process, unspecified shoulder, initial encounter for closed fracture -S42126B Nondisplaced fracture of acromial process, unspecified shoulder, initial encounter for open fracture -S42126D Nondisplaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with routine healing -S42126G Nondisplaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42126K Nondisplaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with nonunion -S42126P Nondisplaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with malunion -S42126S Nondisplaced fracture of acromial process, unspecified shoulder, sequela -S42131A Displaced fracture of coracoid process, right shoulder, initial encounter for closed fracture -S42131B Displaced fracture of coracoid process, right shoulder, initial encounter for open fracture -S42131D Displaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with routine healing -S42131G Displaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with delayed healing -S42131K Displaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with nonunion -S42131P Displaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with malunion -S42131S Displaced fracture of coracoid process, right shoulder, sequela -S42132A Displaced fracture of coracoid process, left shoulder, initial encounter for closed fracture -S42132B Displaced fracture of coracoid process, left shoulder, initial encounter for open fracture -S42132D Displaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with routine healing -S42132G Displaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with delayed healing -S42132K Displaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with nonunion -S42132P Displaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with malunion -S42132S Displaced fracture of coracoid process, left shoulder, sequela -S42133A Displaced fracture of coracoid process, unspecified shoulder, initial encounter for closed fracture -S42133B Displaced fracture of coracoid process, unspecified shoulder, initial encounter for open fracture -S42133D Displaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with routine healing -S42133G Displaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42133K Displaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with nonunion -S42133P Displaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with malunion -S42133S Displaced fracture of coracoid process, unspecified shoulder, sequela -S42134A Nondisplaced fracture of coracoid process, right shoulder, initial encounter for closed fracture -S42134B Nondisplaced fracture of coracoid process, right shoulder, initial encounter for open fracture -S42134D Nondisplaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with routine healing -S42134G Nondisplaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with delayed healing -S42134K Nondisplaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with nonunion -S42134P Nondisplaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with malunion -S42134S Nondisplaced fracture of coracoid process, right shoulder, sequela -S42135A Nondisplaced fracture of coracoid process, left shoulder, initial encounter for closed fracture -S42135B Nondisplaced fracture of coracoid process, left shoulder, initial encounter for open fracture -S42135D Nondisplaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with routine healing -S42135G Nondisplaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with delayed healing -S42135K Nondisplaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with nonunion -S42135P Nondisplaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with malunion -S42135S Nondisplaced fracture of coracoid process, left shoulder, sequela -S42136A Nondisplaced fracture of coracoid process, unspecified shoulder, initial encounter for closed fracture -S42136B Nondisplaced fracture of coracoid process, unspecified shoulder, initial encounter for open fracture -S42136D Nondisplaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with routine healing -S42136G Nondisplaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42136K Nondisplaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with nonunion -S42136P Nondisplaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with malunion -S42136S Nondisplaced fracture of coracoid process, unspecified shoulder, sequela -S42141A Displaced fracture of glenoid cavity of scapula, right shoulder, initial encounter for closed fracture -S42141B Displaced fracture of glenoid cavity of scapula, right shoulder, initial encounter for open fracture -S42141D Displaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42141G Displaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42141K Displaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42141P Displaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with malunion -S42141S Displaced fracture of glenoid cavity of scapula, right shoulder, sequela -S42142A Displaced fracture of glenoid cavity of scapula, left shoulder, initial encounter for closed fracture -S42142B Displaced fracture of glenoid cavity of scapula, left shoulder, initial encounter for open fracture -S42142D Displaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42142G Displaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42142K Displaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42142P Displaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with malunion -S42142S Displaced fracture of glenoid cavity of scapula, left shoulder, sequela -S42143A Displaced fracture of glenoid cavity of scapula, unspecified shoulder, initial encounter for closed fracture -S42143B Displaced fracture of glenoid cavity of scapula, unspecified shoulder, initial encounter for open fracture -S42143D Displaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42143G Displaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42143K Displaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42143P Displaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42143S Displaced fracture of glenoid cavity of scapula, unspecified shoulder, sequela -S42144A Nondisplaced fracture of glenoid cavity of scapula, right shoulder, initial encounter for closed fracture -S42144B Nondisplaced fracture of glenoid cavity of scapula, right shoulder, initial encounter for open fracture -S42144D Nondisplaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42144G Nondisplaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42144K Nondisplaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42144P Nondisplaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with malunion -S42144S Nondisplaced fracture of glenoid cavity of scapula, right shoulder, sequela -S42145A Nondisplaced fracture of glenoid cavity of scapula, left shoulder, initial encounter for closed fracture -S42145B Nondisplaced fracture of glenoid cavity of scapula, left shoulder, initial encounter for open fracture -S42145D Nondisplaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42145G Nondisplaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42145K Nondisplaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42145P Nondisplaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with malunion -S42145S Nondisplaced fracture of glenoid cavity of scapula, left shoulder, sequela -S42146A Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, initial encounter for closed fracture -S42146B Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, initial encounter for open fracture -S42146D Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42146G Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42146K Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42146P Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42146S Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, sequela -S42151A Displaced fracture of neck of scapula, right shoulder, initial encounter for closed fracture -S42151B Displaced fracture of neck of scapula, right shoulder, initial encounter for open fracture -S42151D Displaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42151G Displaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42151K Displaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42151P Displaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with malunion -S42151S Displaced fracture of neck of scapula, right shoulder, sequela -S42152A Displaced fracture of neck of scapula, left shoulder, initial encounter for closed fracture -S42152B Displaced fracture of neck of scapula, left shoulder, initial encounter for open fracture -S42152D Displaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42152G Displaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42152K Displaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42152P Displaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with malunion -S42152S Displaced fracture of neck of scapula, left shoulder, sequela -S42153A Displaced fracture of neck of scapula, unspecified shoulder, initial encounter for closed fracture -S42153B Displaced fracture of neck of scapula, unspecified shoulder, initial encounter for open fracture -S42153D Displaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42153G Displaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42153K Displaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42153P Displaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42153S Displaced fracture of neck of scapula, unspecified shoulder, sequela -S42154A Nondisplaced fracture of neck of scapula, right shoulder, initial encounter for closed fracture -S42154B Nondisplaced fracture of neck of scapula, right shoulder, initial encounter for open fracture -S42154D Nondisplaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42154G Nondisplaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42154K Nondisplaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42154P Nondisplaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with malunion -S42154S Nondisplaced fracture of neck of scapula, right shoulder, sequela -S42155A Nondisplaced fracture of neck of scapula, left shoulder, initial encounter for closed fracture -S42155B Nondisplaced fracture of neck of scapula, left shoulder, initial encounter for open fracture -S42155D Nondisplaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42155G Nondisplaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42155K Nondisplaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42155P Nondisplaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with malunion -S42155S Nondisplaced fracture of neck of scapula, left shoulder, sequela -S42156A Nondisplaced fracture of neck of scapula, unspecified shoulder, initial encounter for closed fracture -S42156B Nondisplaced fracture of neck of scapula, unspecified shoulder, initial encounter for open fracture -S42156D Nondisplaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42156G Nondisplaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42156K Nondisplaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42156P Nondisplaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42156S Nondisplaced fracture of neck of scapula, unspecified shoulder, sequela -S42191A Fracture of other part of scapula, right shoulder, initial encounter for closed fracture -S42191B Fracture of other part of scapula, right shoulder, initial encounter for open fracture -S42191D Fracture of other part of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42191G Fracture of other part of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42191K Fracture of other part of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42191P Fracture of other part of scapula, right shoulder, subsequent encounter for fracture with malunion -S42191S Fracture of other part of scapula, right shoulder, sequela -S42192A Fracture of other part of scapula, left shoulder, initial encounter for closed fracture -S42192B Fracture of other part of scapula, left shoulder, initial encounter for open fracture -S42192D Fracture of other part of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42192G Fracture of other part of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42192K Fracture of other part of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42192P Fracture of other part of scapula, left shoulder, subsequent encounter for fracture with malunion -S42192S Fracture of other part of scapula, left shoulder, sequela -S42199A Fracture of other part of scapula, unspecified shoulder, initial encounter for closed fracture -S42199B Fracture of other part of scapula, unspecified shoulder, initial encounter for open fracture -S42199D Fracture of other part of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42199G Fracture of other part of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42199K Fracture of other part of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42199P Fracture of other part of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42199S Fracture of other part of scapula, unspecified shoulder, sequela -S42201A Unspecified fracture of upper end of right humerus, initial encounter for closed fracture -S42201B Unspecified fracture of upper end of right humerus, initial encounter for open fracture -S42201D Unspecified fracture of upper end of right humerus, subsequent encounter for fracture with routine healing -S42201G Unspecified fracture of upper end of right humerus, subsequent encounter for fracture with delayed healing -S42201K Unspecified fracture of upper end of right humerus, subsequent encounter for fracture with nonunion -S42201P Unspecified fracture of upper end of right humerus, subsequent encounter for fracture with malunion -S42201S Unspecified fracture of upper end of right humerus, sequela -S42202A Unspecified fracture of upper end of left humerus, initial encounter for closed fracture -S42202B Unspecified fracture of upper end of left humerus, initial encounter for open fracture -S42202D Unspecified fracture of upper end of left humerus, subsequent encounter for fracture with routine healing -S42202G Unspecified fracture of upper end of left humerus, subsequent encounter for fracture with delayed healing -S42202K Unspecified fracture of upper end of left humerus, subsequent encounter for fracture with nonunion -S42202P Unspecified fracture of upper end of left humerus, subsequent encounter for fracture with malunion -S42202S Unspecified fracture of upper end of left humerus, sequela -S42209A Unspecified fracture of upper end of unspecified humerus, initial encounter for closed fracture -S42209B Unspecified fracture of upper end of unspecified humerus, initial encounter for open fracture -S42209D Unspecified fracture of upper end of unspecified humerus, subsequent encounter for fracture with routine healing -S42209G Unspecified fracture of upper end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42209K Unspecified fracture of upper end of unspecified humerus, subsequent encounter for fracture with nonunion -S42209P Unspecified fracture of upper end of unspecified humerus, subsequent encounter for fracture with malunion -S42209S Unspecified fracture of upper end of unspecified humerus, sequela -S42211A Unspecified displaced fracture of surgical neck of right humerus, initial encounter for closed fracture -S42211B Unspecified displaced fracture of surgical neck of right humerus, initial encounter for open fracture -S42211D Unspecified displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42211G Unspecified displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42211K Unspecified displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42211P Unspecified displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42211S Unspecified displaced fracture of surgical neck of right humerus, sequela -S42212A Unspecified displaced fracture of surgical neck of left humerus, initial encounter for closed fracture -S42212B Unspecified displaced fracture of surgical neck of left humerus, initial encounter for open fracture -S42212D Unspecified displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42212G Unspecified displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42212K Unspecified displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42212P Unspecified displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42212S Unspecified displaced fracture of surgical neck of left humerus, sequela -S42213A Unspecified displaced fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42213B Unspecified displaced fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42213D Unspecified displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42213G Unspecified displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42213K Unspecified displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42213P Unspecified displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42213S Unspecified displaced fracture of surgical neck of unspecified humerus, sequela -S42214A Unspecified nondisplaced fracture of surgical neck of right humerus, initial encounter for closed fracture -S42214B Unspecified nondisplaced fracture of surgical neck of right humerus, initial encounter for open fracture -S42214D Unspecified nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42214G Unspecified nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42214K Unspecified nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42214P Unspecified nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42214S Unspecified nondisplaced fracture of surgical neck of right humerus, sequela -S42215A Unspecified nondisplaced fracture of surgical neck of left humerus, initial encounter for closed fracture -S42215B Unspecified nondisplaced fracture of surgical neck of left humerus, initial encounter for open fracture -S42215D Unspecified nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42215G Unspecified nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42215K Unspecified nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42215P Unspecified nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42215S Unspecified nondisplaced fracture of surgical neck of left humerus, sequela -S42216A Unspecified nondisplaced fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42216B Unspecified nondisplaced fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42216D Unspecified nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42216G Unspecified nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42216K Unspecified nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42216P Unspecified nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42216S Unspecified nondisplaced fracture of surgical neck of unspecified humerus, sequela -S42221A 2-part displaced fracture of surgical neck of right humerus, initial encounter for closed fracture -S42221B 2-part displaced fracture of surgical neck of right humerus, initial encounter for open fracture -S42221D 2-part displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42221G 2-part displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42221K 2-part displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42221P 2-part displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42221S 2-part displaced fracture of surgical neck of right humerus, sequela -S42222A 2-part displaced fracture of surgical neck of left humerus, initial encounter for closed fracture -S42222B 2-part displaced fracture of surgical neck of left humerus, initial encounter for open fracture -S42222D 2-part displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42222G 2-part displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42222K 2-part displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42222P 2-part displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42222S 2-part displaced fracture of surgical neck of left humerus, sequela -S42223A 2-part displaced fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42223B 2-part displaced fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42223D 2-part displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42223G 2-part displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42223K 2-part displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42223P 2-part displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42223S 2-part displaced fracture of surgical neck of unspecified humerus, sequela -S42224A 2-part nondisplaced fracture of surgical neck of right humerus, initial encounter for closed fracture -S42224B 2-part nondisplaced fracture of surgical neck of right humerus, initial encounter for open fracture -S42224D 2-part nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42224G 2-part nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42224K 2-part nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42224P 2-part nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42224S 2-part nondisplaced fracture of surgical neck of right humerus, sequela -S42225A 2-part nondisplaced fracture of surgical neck of left humerus, initial encounter for closed fracture -S42225B 2-part nondisplaced fracture of surgical neck of left humerus, initial encounter for open fracture -S42225D 2-part nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42225G 2-part nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42225K 2-part nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42225P 2-part nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42225S 2-part nondisplaced fracture of surgical neck of left humerus, sequela -S42226A 2-part nondisplaced fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42226B 2-part nondisplaced fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42226D 2-part nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42226G 2-part nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42226K 2-part nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42226P 2-part nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42226S 2-part nondisplaced fracture of surgical neck of unspecified humerus, sequela -S42231A 3-part fracture of surgical neck of right humerus, initial encounter for closed fracture -S42231B 3-part fracture of surgical neck of right humerus, initial encounter for open fracture -S42231D 3-part fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42231G 3-part fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42231K 3-part fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42231P 3-part fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42231S 3-part fracture of surgical neck of right humerus, sequela -S42232A 3-part fracture of surgical neck of left humerus, initial encounter for closed fracture -S42232B 3-part fracture of surgical neck of left humerus, initial encounter for open fracture -S42232D 3-part fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42232G 3-part fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42232K 3-part fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42232P 3-part fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42232S 3-part fracture of surgical neck of left humerus, sequela -S42239A 3-part fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42239B 3-part fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42239D 3-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42239G 3-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42239K 3-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42239P 3-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42239S 3-part fracture of surgical neck of unspecified humerus, sequela -S42241A 4-part fracture of surgical neck of right humerus, initial encounter for closed fracture -S42241B 4-part fracture of surgical neck of right humerus, initial encounter for open fracture -S42241D 4-part fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42241G 4-part fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42241K 4-part fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42241P 4-part fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42241S 4-part fracture of surgical neck of right humerus, sequela -S42242A 4-part fracture of surgical neck of left humerus, initial encounter for closed fracture -S42242B 4-part fracture of surgical neck of left humerus, initial encounter for open fracture -S42242D 4-part fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42242G 4-part fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42242K 4-part fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42242P 4-part fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42242S 4-part fracture of surgical neck of left humerus, sequela -S42249A 4-part fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42249B 4-part fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42249D 4-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42249G 4-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42249K 4-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42249P 4-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42249S 4-part fracture of surgical neck of unspecified humerus, sequela -S42251A Displaced fracture of greater tuberosity of right humerus, initial encounter for closed fracture -S42251B Displaced fracture of greater tuberosity of right humerus, initial encounter for open fracture -S42251D Displaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with routine healing -S42251G Displaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with delayed healing -S42251K Displaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with nonunion -S42251P Displaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with malunion -S42251S Displaced fracture of greater tuberosity of right humerus, sequela -S42252A Displaced fracture of greater tuberosity of left humerus, initial encounter for closed fracture -S42252B Displaced fracture of greater tuberosity of left humerus, initial encounter for open fracture -S42252D Displaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with routine healing -S42252G Displaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with delayed healing -S42252K Displaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with nonunion -S42252P Displaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with malunion -S42252S Displaced fracture of greater tuberosity of left humerus, sequela -S42253A Displaced fracture of greater tuberosity of unspecified humerus, initial encounter for closed fracture -S42253B Displaced fracture of greater tuberosity of unspecified humerus, initial encounter for open fracture -S42253D Displaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with routine healing -S42253G Displaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with delayed healing -S42253K Displaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with nonunion -S42253P Displaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with malunion -S42253S Displaced fracture of greater tuberosity of unspecified humerus, sequela -S42254A Nondisplaced fracture of greater tuberosity of right humerus, initial encounter for closed fracture -S42254B Nondisplaced fracture of greater tuberosity of right humerus, initial encounter for open fracture -S42254D Nondisplaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with routine healing -S42254G Nondisplaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with delayed healing -S42254K Nondisplaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with nonunion -S42254P Nondisplaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with malunion -S42254S Nondisplaced fracture of greater tuberosity of right humerus, sequela -S42255A Nondisplaced fracture of greater tuberosity of left humerus, initial encounter for closed fracture -S42255B Nondisplaced fracture of greater tuberosity of left humerus, initial encounter for open fracture -S42255D Nondisplaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with routine healing -S42255G Nondisplaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with delayed healing -S42255K Nondisplaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with nonunion -S42255P Nondisplaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with malunion -S42255S Nondisplaced fracture of greater tuberosity of left humerus, sequela -S42256A Nondisplaced fracture of greater tuberosity of unspecified humerus, initial encounter for closed fracture -S42256B Nondisplaced fracture of greater tuberosity of unspecified humerus, initial encounter for open fracture -S42256D Nondisplaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with routine healing -S42256G Nondisplaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with delayed healing -S42256K Nondisplaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with nonunion -S42256P Nondisplaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with malunion -S42256S Nondisplaced fracture of greater tuberosity of unspecified humerus, sequela -S42261A Displaced fracture of lesser tuberosity of right humerus, initial encounter for closed fracture -S42261B Displaced fracture of lesser tuberosity of right humerus, initial encounter for open fracture -S42261D Displaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with routine healing -S42261G Displaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with delayed healing -S42261K Displaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with nonunion -S42261P Displaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with malunion -S42261S Displaced fracture of lesser tuberosity of right humerus, sequela -S42262A Displaced fracture of lesser tuberosity of left humerus, initial encounter for closed fracture -S42262B Displaced fracture of lesser tuberosity of left humerus, initial encounter for open fracture -S42262D Displaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with routine healing -S42262G Displaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with delayed healing -S42262K Displaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with nonunion -S42262P Displaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with malunion -S42262S Displaced fracture of lesser tuberosity of left humerus, sequela -S42263A Displaced fracture of lesser tuberosity of unspecified humerus, initial encounter for closed fracture -S42263B Displaced fracture of lesser tuberosity of unspecified humerus, initial encounter for open fracture -S42263D Displaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with routine healing -S42263G Displaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with delayed healing -S42263K Displaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with nonunion -S42263P Displaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with malunion -S42263S Displaced fracture of lesser tuberosity of unspecified humerus, sequela -S42264A Nondisplaced fracture of lesser tuberosity of right humerus, initial encounter for closed fracture -S42264B Nondisplaced fracture of lesser tuberosity of right humerus, initial encounter for open fracture -S42264D Nondisplaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with routine healing -S42264G Nondisplaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with delayed healing -S42264K Nondisplaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with nonunion -S42264P Nondisplaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with malunion -S42264S Nondisplaced fracture of lesser tuberosity of right humerus, sequela -S42265A Nondisplaced fracture of lesser tuberosity of left humerus, initial encounter for closed fracture -S42265B Nondisplaced fracture of lesser tuberosity of left humerus, initial encounter for open fracture -S42265D Nondisplaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with routine healing -S42265G Nondisplaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with delayed healing -S42265K Nondisplaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with nonunion -S42265P Nondisplaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with malunion -S42265S Nondisplaced fracture of lesser tuberosity of left humerus, sequela -S42266A Nondisplaced fracture of lesser tuberosity of unspecified humerus, initial encounter for closed fracture -S42266B Nondisplaced fracture of lesser tuberosity of unspecified humerus, initial encounter for open fracture -S42266D Nondisplaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with routine healing -S42266G Nondisplaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with delayed healing -S42266K Nondisplaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with nonunion -S42266P Nondisplaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with malunion -S42266S Nondisplaced fracture of lesser tuberosity of unspecified humerus, sequela -S42271A Torus fracture of upper end of right humerus, initial encounter for closed fracture -S42271D Torus fracture of upper end of right humerus, subsequent encounter for fracture with routine healing -S42271G Torus fracture of upper end of right humerus, subsequent encounter for fracture with delayed healing -S42271K Torus fracture of upper end of right humerus, subsequent encounter for fracture with nonunion -S42271P Torus fracture of upper end of right humerus, subsequent encounter for fracture with malunion -S42271S Torus fracture of upper end of right humerus, sequela -S42272A Torus fracture of upper end of left humerus, initial encounter for closed fracture -S42272D Torus fracture of upper end of left humerus, subsequent encounter for fracture with routine healing -S42272G Torus fracture of upper end of left humerus, subsequent encounter for fracture with delayed healing -S42272K Torus fracture of upper end of left humerus, subsequent encounter for fracture with nonunion -S42272P Torus fracture of upper end of left humerus, subsequent encounter for fracture with malunion -S42272S Torus fracture of upper end of left humerus, sequela -S42279A Torus fracture of upper end of unspecified humerus, initial encounter for closed fracture -S42279D Torus fracture of upper end of unspecified humerus, subsequent encounter for fracture with routine healing -S42279G Torus fracture of upper end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42279K Torus fracture of upper end of unspecified humerus, subsequent encounter for fracture with nonunion -S42279P Torus fracture of upper end of unspecified humerus, subsequent encounter for fracture with malunion -S42279S Torus fracture of upper end of unspecified humerus, sequela -S42291A Other displaced fracture of upper end of right humerus, initial encounter for closed fracture -S42291B Other displaced fracture of upper end of right humerus, initial encounter for open fracture -S42291D Other displaced fracture of upper end of right humerus, subsequent encounter for fracture with routine healing -S42291G Other displaced fracture of upper end of right humerus, subsequent encounter for fracture with delayed healing -S42291K Other displaced fracture of upper end of right humerus, subsequent encounter for fracture with nonunion -S42291P Other displaced fracture of upper end of right humerus, subsequent encounter for fracture with malunion -S42291S Other displaced fracture of upper end of right humerus, sequela -S42292A Other displaced fracture of upper end of left humerus, initial encounter for closed fracture -S42292B Other displaced fracture of upper end of left humerus, initial encounter for open fracture -S42292D Other displaced fracture of upper end of left humerus, subsequent encounter for fracture with routine healing -S42292G Other displaced fracture of upper end of left humerus, subsequent encounter for fracture with delayed healing -S42292K Other displaced fracture of upper end of left humerus, subsequent encounter for fracture with nonunion -S42292P Other displaced fracture of upper end of left humerus, subsequent encounter for fracture with malunion -S42292S Other displaced fracture of upper end of left humerus, sequela -S42293A Other displaced fracture of upper end of unspecified humerus, initial encounter for closed fracture -S42293B Other displaced fracture of upper end of unspecified humerus, initial encounter for open fracture -S42293D Other displaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with routine healing -S42293G Other displaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42293K Other displaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with nonunion -S42293P Other displaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with malunion -S42293S Other displaced fracture of upper end of unspecified humerus, sequela -S42294A Other nondisplaced fracture of upper end of right humerus, initial encounter for closed fracture -S42294B Other nondisplaced fracture of upper end of right humerus, initial encounter for open fracture -S42294D Other nondisplaced fracture of upper end of right humerus, subsequent encounter for fracture with routine healing -S42294G Other nondisplaced fracture of upper end of right humerus, subsequent encounter for fracture with delayed healing -S42294K Other nondisplaced fracture of upper end of right humerus, subsequent encounter for fracture with nonunion -S42294P Other nondisplaced fracture of upper end of right humerus, subsequent encounter for fracture with malunion -S42294S Other nondisplaced fracture of upper end of right humerus, sequela -S42295A Other nondisplaced fracture of upper end of left humerus, initial encounter for closed fracture -S42295B Other nondisplaced fracture of upper end of left humerus, initial encounter for open fracture -S42295D Other nondisplaced fracture of upper end of left humerus, subsequent encounter for fracture with routine healing -S42295G Other nondisplaced fracture of upper end of left humerus, subsequent encounter for fracture with delayed healing -S42295K Other nondisplaced fracture of upper end of left humerus, subsequent encounter for fracture with nonunion -S42295P Other nondisplaced fracture of upper end of left humerus, subsequent encounter for fracture with malunion -S42295S Other nondisplaced fracture of upper end of left humerus, sequela -S42296A Other nondisplaced fracture of upper end of unspecified humerus, initial encounter for closed fracture -S42296B Other nondisplaced fracture of upper end of unspecified humerus, initial encounter for open fracture -S42296D Other nondisplaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with routine healing -S42296G Other nondisplaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42296K Other nondisplaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with nonunion -S42296P Other nondisplaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with malunion -S42296S Other nondisplaced fracture of upper end of unspecified humerus, sequela -S42301A Unspecified fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42301B Unspecified fracture of shaft of humerus, right arm, initial encounter for open fracture -S42301D Unspecified fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42301G Unspecified fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42301K Unspecified fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42301P Unspecified fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42301S Unspecified fracture of shaft of humerus, right arm, sequela -S42302A Unspecified fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42302B Unspecified fracture of shaft of humerus, left arm, initial encounter for open fracture -S42302D Unspecified fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42302G Unspecified fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42302K Unspecified fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42302P Unspecified fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42302S Unspecified fracture of shaft of humerus, left arm, sequela -S42309A Unspecified fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42309B Unspecified fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42309D Unspecified fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42309G Unspecified fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42309K Unspecified fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42309P Unspecified fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42309S Unspecified fracture of shaft of humerus, unspecified arm, sequela -S42311A Greenstick fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42311D Greenstick fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42311G Greenstick fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42311K Greenstick fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42311P Greenstick fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42311S Greenstick fracture of shaft of humerus, right arm, sequela -S42312A Greenstick fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42312D Greenstick fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42312G Greenstick fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42312K Greenstick fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42312P Greenstick fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42312S Greenstick fracture of shaft of humerus, left arm, sequela -S42319A Greenstick fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42319D Greenstick fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42319G Greenstick fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42319K Greenstick fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42319P Greenstick fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42319S Greenstick fracture of shaft of humerus, unspecified arm, sequela -S42321A Displaced transverse fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42321B Displaced transverse fracture of shaft of humerus, right arm, initial encounter for open fracture -S42321D Displaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42321G Displaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42321K Displaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42321P Displaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42321S Displaced transverse fracture of shaft of humerus, right arm, sequela -S42322A Displaced transverse fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42322B Displaced transverse fracture of shaft of humerus, left arm, initial encounter for open fracture -S42322D Displaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42322G Displaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42322K Displaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42322P Displaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42322S Displaced transverse fracture of shaft of humerus, left arm, sequela -S42323A Displaced transverse fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42323B Displaced transverse fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42323D Displaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42323G Displaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42323K Displaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42323P Displaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42323S Displaced transverse fracture of shaft of humerus, unspecified arm, sequela -S42324A Nondisplaced transverse fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42324B Nondisplaced transverse fracture of shaft of humerus, right arm, initial encounter for open fracture -S42324D Nondisplaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42324G Nondisplaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42324K Nondisplaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42324P Nondisplaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42324S Nondisplaced transverse fracture of shaft of humerus, right arm, sequela -S42325A Nondisplaced transverse fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42325B Nondisplaced transverse fracture of shaft of humerus, left arm, initial encounter for open fracture -S42325D Nondisplaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42325G Nondisplaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42325K Nondisplaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42325P Nondisplaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42325S Nondisplaced transverse fracture of shaft of humerus, left arm, sequela -S42326A Nondisplaced transverse fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42326B Nondisplaced transverse fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42326D Nondisplaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42326G Nondisplaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42326K Nondisplaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42326P Nondisplaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42326S Nondisplaced transverse fracture of shaft of humerus, unspecified arm, sequela -S42331A Displaced oblique fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42331B Displaced oblique fracture of shaft of humerus, right arm, initial encounter for open fracture -S42331D Displaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42331G Displaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42331K Displaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42331P Displaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42331S Displaced oblique fracture of shaft of humerus, right arm, sequela -S42332A Displaced oblique fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42332B Displaced oblique fracture of shaft of humerus, left arm, initial encounter for open fracture -S42332D Displaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42332G Displaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42332K Displaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42332P Displaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42332S Displaced oblique fracture of shaft of humerus, left arm, sequela -S42333A Displaced oblique fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42333B Displaced oblique fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42333D Displaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42333G Displaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42333K Displaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42333P Displaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42333S Displaced oblique fracture of shaft of humerus, unspecified arm, sequela -S42334A Nondisplaced oblique fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42334B Nondisplaced oblique fracture of shaft of humerus, right arm, initial encounter for open fracture -S42334D Nondisplaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42334G Nondisplaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42334K Nondisplaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42334P Nondisplaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42334S Nondisplaced oblique fracture of shaft of humerus, right arm, sequela -S42335A Nondisplaced oblique fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42335B Nondisplaced oblique fracture of shaft of humerus, left arm, initial encounter for open fracture -S42335D Nondisplaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42335G Nondisplaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42335K Nondisplaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42335P Nondisplaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42335S Nondisplaced oblique fracture of shaft of humerus, left arm, sequela -S42336A Nondisplaced oblique fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42336B Nondisplaced oblique fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42336D Nondisplaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42336G Nondisplaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42336K Nondisplaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42336P Nondisplaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42336S Nondisplaced oblique fracture of shaft of humerus, unspecified arm, sequela -S42341A Displaced spiral fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42341B Displaced spiral fracture of shaft of humerus, right arm, initial encounter for open fracture -S42341D Displaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42341G Displaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42341K Displaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42341P Displaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42341S Displaced spiral fracture of shaft of humerus, right arm, sequela -S42342A Displaced spiral fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42342B Displaced spiral fracture of shaft of humerus, left arm, initial encounter for open fracture -S42342D Displaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42342G Displaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42342K Displaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42342P Displaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42342S Displaced spiral fracture of shaft of humerus, left arm, sequela -S42343A Displaced spiral fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42343B Displaced spiral fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42343D Displaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42343G Displaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42343K Displaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42343P Displaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42343S Displaced spiral fracture of shaft of humerus, unspecified arm, sequela -S42344A Nondisplaced spiral fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42344B Nondisplaced spiral fracture of shaft of humerus, right arm, initial encounter for open fracture -S42344D Nondisplaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42344G Nondisplaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42344K Nondisplaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42344P Nondisplaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42344S Nondisplaced spiral fracture of shaft of humerus, right arm, sequela -S42345A Nondisplaced spiral fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42345B Nondisplaced spiral fracture of shaft of humerus, left arm, initial encounter for open fracture -S42345D Nondisplaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42345G Nondisplaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42345K Nondisplaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42345P Nondisplaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42345S Nondisplaced spiral fracture of shaft of humerus, left arm, sequela -S42346A Nondisplaced spiral fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42346B Nondisplaced spiral fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42346D Nondisplaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42346G Nondisplaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42346K Nondisplaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42346P Nondisplaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42346S Nondisplaced spiral fracture of shaft of humerus, unspecified arm, sequela -S42351A Displaced comminuted fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42351B Displaced comminuted fracture of shaft of humerus, right arm, initial encounter for open fracture -S42351D Displaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42351G Displaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42351K Displaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42351P Displaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42351S Displaced comminuted fracture of shaft of humerus, right arm, sequela -S42352A Displaced comminuted fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42352B Displaced comminuted fracture of shaft of humerus, left arm, initial encounter for open fracture -S42352D Displaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42352G Displaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42352K Displaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42352P Displaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42352S Displaced comminuted fracture of shaft of humerus, left arm, sequela -S42353A Displaced comminuted fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42353B Displaced comminuted fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42353D Displaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42353G Displaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42353K Displaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42353P Displaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42353S Displaced comminuted fracture of shaft of humerus, unspecified arm, sequela -S42354A Nondisplaced comminuted fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42354B Nondisplaced comminuted fracture of shaft of humerus, right arm, initial encounter for open fracture -S42354D Nondisplaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42354G Nondisplaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42354K Nondisplaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42354P Nondisplaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42354S Nondisplaced comminuted fracture of shaft of humerus, right arm, sequela -S42355A Nondisplaced comminuted fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42355B Nondisplaced comminuted fracture of shaft of humerus, left arm, initial encounter for open fracture -S42355D Nondisplaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42355G Nondisplaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42355K Nondisplaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42355P Nondisplaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42355S Nondisplaced comminuted fracture of shaft of humerus, left arm, sequela -S42356A Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42356B Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42356D Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42356G Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42356K Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42356P Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42356S Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, sequela -S42361A Displaced segmental fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42361B Displaced segmental fracture of shaft of humerus, right arm, initial encounter for open fracture -S42361D Displaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42361G Displaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42361K Displaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42361P Displaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42361S Displaced segmental fracture of shaft of humerus, right arm, sequela -S42362A Displaced segmental fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42362B Displaced segmental fracture of shaft of humerus, left arm, initial encounter for open fracture -S42362D Displaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42362G Displaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42362K Displaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42362P Displaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42362S Displaced segmental fracture of shaft of humerus, left arm, sequela -S42363A Displaced segmental fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42363B Displaced segmental fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42363D Displaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42363G Displaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42363K Displaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42363P Displaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42363S Displaced segmental fracture of shaft of humerus, unspecified arm, sequela -S42364A Nondisplaced segmental fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42364B Nondisplaced segmental fracture of shaft of humerus, right arm, initial encounter for open fracture -S42364D Nondisplaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42364G Nondisplaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42364K Nondisplaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42364P Nondisplaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42364S Nondisplaced segmental fracture of shaft of humerus, right arm, sequela -S42365A Nondisplaced segmental fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42365B Nondisplaced segmental fracture of shaft of humerus, left arm, initial encounter for open fracture -S42365D Nondisplaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42365G Nondisplaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42365K Nondisplaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42365P Nondisplaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42365S Nondisplaced segmental fracture of shaft of humerus, left arm, sequela -S42366A Nondisplaced segmental fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42366B Nondisplaced segmental fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42366D Nondisplaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42366G Nondisplaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42366K Nondisplaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42366P Nondisplaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42366S Nondisplaced segmental fracture of shaft of humerus, unspecified arm, sequela -S42391A Other fracture of shaft of right humerus, initial encounter for closed fracture -S42391B Other fracture of shaft of right humerus, initial encounter for open fracture -S42391D Other fracture of shaft of right humerus, subsequent encounter for fracture with routine healing -S42391G Other fracture of shaft of right humerus, subsequent encounter for fracture with delayed healing -S42391K Other fracture of shaft of right humerus, subsequent encounter for fracture with nonunion -S42391P Other fracture of shaft of right humerus, subsequent encounter for fracture with malunion -S42391S Other fracture of shaft of right humerus, sequela -S42392A Other fracture of shaft of left humerus, initial encounter for closed fracture -S42392B Other fracture of shaft of left humerus, initial encounter for open fracture -S42392D Other fracture of shaft of left humerus, subsequent encounter for fracture with routine healing -S42392G Other fracture of shaft of left humerus, subsequent encounter for fracture with delayed healing -S42392K Other fracture of shaft of left humerus, subsequent encounter for fracture with nonunion -S42392P Other fracture of shaft of left humerus, subsequent encounter for fracture with malunion -S42392S Other fracture of shaft of left humerus, sequela -S42399A Other fracture of shaft of unspecified humerus, initial encounter for closed fracture -S42399B Other fracture of shaft of unspecified humerus, initial encounter for open fracture -S42399D Other fracture of shaft of unspecified humerus, subsequent encounter for fracture with routine healing -S42399G Other fracture of shaft of unspecified humerus, subsequent encounter for fracture with delayed healing -S42399K Other fracture of shaft of unspecified humerus, subsequent encounter for fracture with nonunion -S42399P Other fracture of shaft of unspecified humerus, subsequent encounter for fracture with malunion -S42399S Other fracture of shaft of unspecified humerus, sequela -S42401A Unspecified fracture of lower end of right humerus, initial encounter for closed fracture -S42401B Unspecified fracture of lower end of right humerus, initial encounter for open fracture -S42401D Unspecified fracture of lower end of right humerus, subsequent encounter for fracture with routine healing -S42401G Unspecified fracture of lower end of right humerus, subsequent encounter for fracture with delayed healing -S42401K Unspecified fracture of lower end of right humerus, subsequent encounter for fracture with nonunion -S42401P Unspecified fracture of lower end of right humerus, subsequent encounter for fracture with malunion -S42401S Unspecified fracture of lower end of right humerus, sequela -S42402A Unspecified fracture of lower end of left humerus, initial encounter for closed fracture -S42402B Unspecified fracture of lower end of left humerus, initial encounter for open fracture -S42402D Unspecified fracture of lower end of left humerus, subsequent encounter for fracture with routine healing -S42402G Unspecified fracture of lower end of left humerus, subsequent encounter for fracture with delayed healing -S42402K Unspecified fracture of lower end of left humerus, subsequent encounter for fracture with nonunion -S42402P Unspecified fracture of lower end of left humerus, subsequent encounter for fracture with malunion -S42402S Unspecified fracture of lower end of left humerus, sequela -S42409A Unspecified fracture of lower end of unspecified humerus, initial encounter for closed fracture -S42409B Unspecified fracture of lower end of unspecified humerus, initial encounter for open fracture -S42409D Unspecified fracture of lower end of unspecified humerus, subsequent encounter for fracture with routine healing -S42409G Unspecified fracture of lower end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42409K Unspecified fracture of lower end of unspecified humerus, subsequent encounter for fracture with nonunion -S42409P Unspecified fracture of lower end of unspecified humerus, subsequent encounter for fracture with malunion -S42409S Unspecified fracture of lower end of unspecified humerus, sequela -S42411A Displaced simple supracondylar fracture without intercondylar fracture of right humerus, initial encounter for closed fracture -S42411B Displaced simple supracondylar fracture without intercondylar fracture of right humerus, initial encounter for open fracture -S42411D Displaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42411G Displaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42411K Displaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42411P Displaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42411S Displaced simple supracondylar fracture without intercondylar fracture of right humerus, sequela -S42412A Displaced simple supracondylar fracture without intercondylar fracture of left humerus, initial encounter for closed fracture -S42412B Displaced simple supracondylar fracture without intercondylar fracture of left humerus, initial encounter for open fracture -S42412D Displaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42412G Displaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42412K Displaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42412P Displaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42412S Displaced simple supracondylar fracture without intercondylar fracture of left humerus, sequela -S42413A Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for closed fracture -S42413B Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for open fracture -S42413D Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42413G Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42413K Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42413P Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42413S Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, sequela -S42414A Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, initial encounter for closed fracture -S42414B Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, initial encounter for open fracture -S42414D Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42414G Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42414K Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42414P Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42414S Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, sequela -S42415A Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, initial encounter for closed fracture -S42415B Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, initial encounter for open fracture -S42415D Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42415G Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42415K Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42415P Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42415S Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, sequela -S42416A Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for closed fracture -S42416B Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for open fracture -S42416D Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42416G Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42416K Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42416P Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42416S Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, sequela -S42421A Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, initial encounter for closed fracture -S42421B Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, initial encounter for open fracture -S42421D Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42421G Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42421K Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42421P Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42421S Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, sequela -S42422A Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, initial encounter for closed fracture -S42422B Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, initial encounter for open fracture -S42422D Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42422G Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42422K Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42422P Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42422S Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, sequela -S42423A Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for closed fracture -S42423B Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for open fracture -S42423D Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42423G Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42423K Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42423P Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42423S Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, sequela -S42424A Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, initial encounter for closed fracture -S42424B Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, initial encounter for open fracture -S42424D Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42424G Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42424K Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42424P Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42424S Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, sequela -S42425A Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, initial encounter for closed fracture -S42425B Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, initial encounter for open fracture -S42425D Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42425G Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42425K Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42425P Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42425S Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, sequela -S42426A Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for closed fracture -S42426B Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for open fracture -S42426D Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42426G Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42426K Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42426P Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42426S Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, sequela -S42431A Displaced fracture (avulsion) of lateral epicondyle of right humerus, initial encounter for closed fracture -S42431B Displaced fracture (avulsion) of lateral epicondyle of right humerus, initial encounter for open fracture -S42431D Displaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with routine healing -S42431G Displaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with delayed healing -S42431K Displaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with nonunion -S42431P Displaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with malunion -S42431S Displaced fracture (avulsion) of lateral epicondyle of right humerus, sequela -S42432A Displaced fracture (avulsion) of lateral epicondyle of left humerus, initial encounter for closed fracture -S42432B Displaced fracture (avulsion) of lateral epicondyle of left humerus, initial encounter for open fracture -S42432D Displaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with routine healing -S42432G Displaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with delayed healing -S42432K Displaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with nonunion -S42432P Displaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with malunion -S42432S Displaced fracture (avulsion) of lateral epicondyle of left humerus, sequela -S42433A Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, initial encounter for closed fracture -S42433B Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, initial encounter for open fracture -S42433D Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42433G Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42433K Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42433P Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with malunion -S42433S Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, sequela -S42434A Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, initial encounter for closed fracture -S42434B Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, initial encounter for open fracture -S42434D Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with routine healing -S42434G Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with delayed healing -S42434K Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with nonunion -S42434P Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with malunion -S42434S Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, sequela -S42435A Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, initial encounter for closed fracture -S42435B Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, initial encounter for open fracture -S42435D Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with routine healing -S42435G Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with delayed healing -S42435K Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with nonunion -S42435P Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with malunion -S42435S Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, sequela -S42436A Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, initial encounter for closed fracture -S42436B Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, initial encounter for open fracture -S42436D Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42436G Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42436K Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42436P Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with malunion -S42436S Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, sequela -S42441A Displaced fracture (avulsion) of medial epicondyle of right humerus, initial encounter for closed fracture -S42441B Displaced fracture (avulsion) of medial epicondyle of right humerus, initial encounter for open fracture -S42441D Displaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with routine healing -S42441G Displaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with delayed healing -S42441K Displaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with nonunion -S42441P Displaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with malunion -S42441S Displaced fracture (avulsion) of medial epicondyle of right humerus, sequela -S42442A Displaced fracture (avulsion) of medial epicondyle of left humerus, initial encounter for closed fracture -S42442B Displaced fracture (avulsion) of medial epicondyle of left humerus, initial encounter for open fracture -S42442D Displaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with routine healing -S42442G Displaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with delayed healing -S42442K Displaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with nonunion -S42442P Displaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with malunion -S42442S Displaced fracture (avulsion) of medial epicondyle of left humerus, sequela -S42443A Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for closed fracture -S42443B Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for open fracture -S42443D Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42443G Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42443K Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42443P Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with malunion -S42443S Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, sequela -S42444A Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, initial encounter for closed fracture -S42444B Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, initial encounter for open fracture -S42444D Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with routine healing -S42444G Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with delayed healing -S42444K Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with nonunion -S42444P Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with malunion -S42444S Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, sequela -S42445A Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, initial encounter for closed fracture -S42445B Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, initial encounter for open fracture -S42445D Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with routine healing -S42445G Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with delayed healing -S42445K Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with nonunion -S42445P Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with malunion -S42445S Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, sequela -S42446A Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for closed fracture -S42446B Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for open fracture -S42446D Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42446G Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42446K Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42446P Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with malunion -S42446S Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, sequela -S42447A Incarcerated fracture (avulsion) of medial epicondyle of right humerus, initial encounter for closed fracture -S42447B Incarcerated fracture (avulsion) of medial epicondyle of right humerus, initial encounter for open fracture -S42447D Incarcerated fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with routine healing -S42447G Incarcerated fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with delayed healing -S42447K Incarcerated fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with nonunion -S42447P Incarcerated fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with malunion -S42447S Incarcerated fracture (avulsion) of medial epicondyle of right humerus, sequela -S42448A Incarcerated fracture (avulsion) of medial epicondyle of left humerus, initial encounter for closed fracture -S42448B Incarcerated fracture (avulsion) of medial epicondyle of left humerus, initial encounter for open fracture -S42448D Incarcerated fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with routine healing -S42448G Incarcerated fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with delayed healing -S42448K Incarcerated fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with nonunion -S42448P Incarcerated fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with malunion -S42448S Incarcerated fracture (avulsion) of medial epicondyle of left humerus, sequela -S42449A Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for closed fracture -S42449B Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for open fracture -S42449D Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42449G Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42449K Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42449P Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with malunion -S42449S Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, sequela -S42451A Displaced fracture of lateral condyle of right humerus, initial encounter for closed fracture -S42451B Displaced fracture of lateral condyle of right humerus, initial encounter for open fracture -S42451D Displaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with routine healing -S42451G Displaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with delayed healing -S42451K Displaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with nonunion -S42451P Displaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with malunion -S42451S Displaced fracture of lateral condyle of right humerus, sequela -S42452A Displaced fracture of lateral condyle of left humerus, initial encounter for closed fracture -S42452B Displaced fracture of lateral condyle of left humerus, initial encounter for open fracture -S42452D Displaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with routine healing -S42452G Displaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with delayed healing -S42452K Displaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with nonunion -S42452P Displaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with malunion -S42452S Displaced fracture of lateral condyle of left humerus, sequela -S42453A Displaced fracture of lateral condyle of unspecified humerus, initial encounter for closed fracture -S42453B Displaced fracture of lateral condyle of unspecified humerus, initial encounter for open fracture -S42453D Displaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42453G Displaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42453K Displaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42453P Displaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with malunion -S42453S Displaced fracture of lateral condyle of unspecified humerus, sequela -S42454A Nondisplaced fracture of lateral condyle of right humerus, initial encounter for closed fracture -S42454B Nondisplaced fracture of lateral condyle of right humerus, initial encounter for open fracture -S42454D Nondisplaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with routine healing -S42454G Nondisplaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with delayed healing -S42454K Nondisplaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with nonunion -S42454P Nondisplaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with malunion -S42454S Nondisplaced fracture of lateral condyle of right humerus, sequela -S42455A Nondisplaced fracture of lateral condyle of left humerus, initial encounter for closed fracture -S42455B Nondisplaced fracture of lateral condyle of left humerus, initial encounter for open fracture -S42455D Nondisplaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with routine healing -S42455G Nondisplaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with delayed healing -S42455K Nondisplaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with nonunion -S42455P Nondisplaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with malunion -S42455S Nondisplaced fracture of lateral condyle of left humerus, sequela -S42456A Nondisplaced fracture of lateral condyle of unspecified humerus, initial encounter for closed fracture -S42456B Nondisplaced fracture of lateral condyle of unspecified humerus, initial encounter for open fracture -S42456D Nondisplaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42456G Nondisplaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42456K Nondisplaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42456P Nondisplaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with malunion -S42456S Nondisplaced fracture of lateral condyle of unspecified humerus, sequela -S42461A Displaced fracture of medial condyle of right humerus, initial encounter for closed fracture -S42461B Displaced fracture of medial condyle of right humerus, initial encounter for open fracture -S42461D Displaced fracture of medial condyle of right humerus, subsequent encounter for fracture with routine healing -S42461G Displaced fracture of medial condyle of right humerus, subsequent encounter for fracture with delayed healing -S42461K Displaced fracture of medial condyle of right humerus, subsequent encounter for fracture with nonunion -S42461P Displaced fracture of medial condyle of right humerus, subsequent encounter for fracture with malunion -S42461S Displaced fracture of medial condyle of right humerus, sequela -S42462A Displaced fracture of medial condyle of left humerus, initial encounter for closed fracture -S42462B Displaced fracture of medial condyle of left humerus, initial encounter for open fracture -S42462D Displaced fracture of medial condyle of left humerus, subsequent encounter for fracture with routine healing -S42462G Displaced fracture of medial condyle of left humerus, subsequent encounter for fracture with delayed healing -S42462K Displaced fracture of medial condyle of left humerus, subsequent encounter for fracture with nonunion -S42462P Displaced fracture of medial condyle of left humerus, subsequent encounter for fracture with malunion -S42462S Displaced fracture of medial condyle of left humerus, sequela -S42463A Displaced fracture of medial condyle of unspecified humerus, initial encounter for closed fracture -S42463B Displaced fracture of medial condyle of unspecified humerus, initial encounter for open fracture -S42463D Displaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42463G Displaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42463K Displaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42463P Displaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with malunion -S42463S Displaced fracture of medial condyle of unspecified humerus, sequela -S42464A Nondisplaced fracture of medial condyle of right humerus, initial encounter for closed fracture -S42464B Nondisplaced fracture of medial condyle of right humerus, initial encounter for open fracture -S42464D Nondisplaced fracture of medial condyle of right humerus, subsequent encounter for fracture with routine healing -S42464G Nondisplaced fracture of medial condyle of right humerus, subsequent encounter for fracture with delayed healing -S42464K Nondisplaced fracture of medial condyle of right humerus, subsequent encounter for fracture with nonunion -S42464P Nondisplaced fracture of medial condyle of right humerus, subsequent encounter for fracture with malunion -S42464S Nondisplaced fracture of medial condyle of right humerus, sequela -S42465A Nondisplaced fracture of medial condyle of left humerus, initial encounter for closed fracture -S42465B Nondisplaced fracture of medial condyle of left humerus, initial encounter for open fracture -S42465D Nondisplaced fracture of medial condyle of left humerus, subsequent encounter for fracture with routine healing -S42465G Nondisplaced fracture of medial condyle of left humerus, subsequent encounter for fracture with delayed healing -S42465K Nondisplaced fracture of medial condyle of left humerus, subsequent encounter for fracture with nonunion -S42465P Nondisplaced fracture of medial condyle of left humerus, subsequent encounter for fracture with malunion -S42465S Nondisplaced fracture of medial condyle of left humerus, sequela -S42466A Nondisplaced fracture of medial condyle of unspecified humerus, initial encounter for closed fracture -S42466B Nondisplaced fracture of medial condyle of unspecified humerus, initial encounter for open fracture -S42466D Nondisplaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42466G Nondisplaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42466K Nondisplaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42466P Nondisplaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with malunion -S42466S Nondisplaced fracture of medial condyle of unspecified humerus, sequela -S42471A Displaced transcondylar fracture of right humerus, initial encounter for closed fracture -S42471B Displaced transcondylar fracture of right humerus, initial encounter for open fracture -S42471D Displaced transcondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42471G Displaced transcondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42471K Displaced transcondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42471P Displaced transcondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42471S Displaced transcondylar fracture of right humerus, sequela -S42472A Displaced transcondylar fracture of left humerus, initial encounter for closed fracture -S42472B Displaced transcondylar fracture of left humerus, initial encounter for open fracture -S42472D Displaced transcondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42472G Displaced transcondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42472K Displaced transcondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42472P Displaced transcondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42472S Displaced transcondylar fracture of left humerus, sequela -S42473A Displaced transcondylar fracture of unspecified humerus, initial encounter for closed fracture -S42473B Displaced transcondylar fracture of unspecified humerus, initial encounter for open fracture -S42473D Displaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42473G Displaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42473K Displaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42473P Displaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42473S Displaced transcondylar fracture of unspecified humerus, sequela -S42474A Nondisplaced transcondylar fracture of right humerus, initial encounter for closed fracture -S42474B Nondisplaced transcondylar fracture of right humerus, initial encounter for open fracture -S42474D Nondisplaced transcondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42474G Nondisplaced transcondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42474K Nondisplaced transcondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42474P Nondisplaced transcondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42474S Nondisplaced transcondylar fracture of right humerus, sequela -S42475A Nondisplaced transcondylar fracture of left humerus, initial encounter for closed fracture -S42475B Nondisplaced transcondylar fracture of left humerus, initial encounter for open fracture -S42475D Nondisplaced transcondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42475G Nondisplaced transcondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42475K Nondisplaced transcondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42475P Nondisplaced transcondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42475S Nondisplaced transcondylar fracture of left humerus, sequela -S42476A Nondisplaced transcondylar fracture of unspecified humerus, initial encounter for closed fracture -S42476B Nondisplaced transcondylar fracture of unspecified humerus, initial encounter for open fracture -S42476D Nondisplaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42476G Nondisplaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42476K Nondisplaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42476P Nondisplaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42476S Nondisplaced transcondylar fracture of unspecified humerus, sequela -S42481A Torus fracture of lower end of right humerus, initial encounter for closed fracture -S42481D Torus fracture of lower end of right humerus, subsequent encounter for fracture with routine healing -S42481G Torus fracture of lower end of right humerus, subsequent encounter for fracture with delayed healing -S42481K Torus fracture of lower end of right humerus, subsequent encounter for fracture with nonunion -S42481P Torus fracture of lower end of right humerus, subsequent encounter for fracture with malunion -S42481S Torus fracture of lower end of right humerus, sequela -S42482A Torus fracture of lower end of left humerus, initial encounter for closed fracture -S42482D Torus fracture of lower end of left humerus, subsequent encounter for fracture with routine healing -S42482G Torus fracture of lower end of left humerus, subsequent encounter for fracture with delayed healing -S42482K Torus fracture of lower end of left humerus, subsequent encounter for fracture with nonunion -S42482P Torus fracture of lower end of left humerus, subsequent encounter for fracture with malunion -S42482S Torus fracture of lower end of left humerus, sequela -S42489A Torus fracture of lower end of unspecified humerus, initial encounter for closed fracture -S42489D Torus fracture of lower end of unspecified humerus, subsequent encounter for fracture with routine healing -S42489G Torus fracture of lower end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42489K Torus fracture of lower end of unspecified humerus, subsequent encounter for fracture with nonunion -S42489P Torus fracture of lower end of unspecified humerus, subsequent encounter for fracture with malunion -S42489S Torus fracture of lower end of unspecified humerus, sequela -S42491A Other displaced fracture of lower end of right humerus, initial encounter for closed fracture -S42491B Other displaced fracture of lower end of right humerus, initial encounter for open fracture -S42491D Other displaced fracture of lower end of right humerus, subsequent encounter for fracture with routine healing -S42491G Other displaced fracture of lower end of right humerus, subsequent encounter for fracture with delayed healing -S42491K Other displaced fracture of lower end of right humerus, subsequent encounter for fracture with nonunion -S42491P Other displaced fracture of lower end of right humerus, subsequent encounter for fracture with malunion -S42491S Other displaced fracture of lower end of right humerus, sequela -S42492A Other displaced fracture of lower end of left humerus, initial encounter for closed fracture -S42492B Other displaced fracture of lower end of left humerus, initial encounter for open fracture -S42492D Other displaced fracture of lower end of left humerus, subsequent encounter for fracture with routine healing -S42492G Other displaced fracture of lower end of left humerus, subsequent encounter for fracture with delayed healing -S42492K Other displaced fracture of lower end of left humerus, subsequent encounter for fracture with nonunion -S42492P Other displaced fracture of lower end of left humerus, subsequent encounter for fracture with malunion -S42492S Other displaced fracture of lower end of left humerus, sequela -S42493A Other displaced fracture of lower end of unspecified humerus, initial encounter for closed fracture -S42493B Other displaced fracture of lower end of unspecified humerus, initial encounter for open fracture -S42493D Other displaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with routine healing -S42493G Other displaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42493K Other displaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with nonunion -S42493P Other displaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with malunion -S42493S Other displaced fracture of lower end of unspecified humerus, sequela -S42494A Other nondisplaced fracture of lower end of right humerus, initial encounter for closed fracture -S42494B Other nondisplaced fracture of lower end of right humerus, initial encounter for open fracture -S42494D Other nondisplaced fracture of lower end of right humerus, subsequent encounter for fracture with routine healing -S42494G Other nondisplaced fracture of lower end of right humerus, subsequent encounter for fracture with delayed healing -S42494K Other nondisplaced fracture of lower end of right humerus, subsequent encounter for fracture with nonunion -S42494P Other nondisplaced fracture of lower end of right humerus, subsequent encounter for fracture with malunion -S42494S Other nondisplaced fracture of lower end of right humerus, sequela -S42495A Other nondisplaced fracture of lower end of left humerus, initial encounter for closed fracture -S42495B Other nondisplaced fracture of lower end of left humerus, initial encounter for open fracture -S42495D Other nondisplaced fracture of lower end of left humerus, subsequent encounter for fracture with routine healing -S42495G Other nondisplaced fracture of lower end of left humerus, subsequent encounter for fracture with delayed healing -S42495K Other nondisplaced fracture of lower end of left humerus, subsequent encounter for fracture with nonunion -S42495P Other nondisplaced fracture of lower end of left humerus, subsequent encounter for fracture with malunion -S42495S Other nondisplaced fracture of lower end of left humerus, sequela -S42496A Other nondisplaced fracture of lower end of unspecified humerus, initial encounter for closed fracture -S42496B Other nondisplaced fracture of lower end of unspecified humerus, initial encounter for open fracture -S42496D Other nondisplaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with routine healing -S42496G Other nondisplaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42496K Other nondisplaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with nonunion -S42496P Other nondisplaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with malunion -S42496S Other nondisplaced fracture of lower end of unspecified humerus, sequela -S4290XA Fracture of unspecified shoulder girdle, part unspecified, initial encounter for closed fracture -S4290XB Fracture of unspecified shoulder girdle, part unspecified, initial encounter for open fracture -S4290XD Fracture of unspecified shoulder girdle, part unspecified, subsequent encounter for fracture with routine healing -S4290XG Fracture of unspecified shoulder girdle, part unspecified, subsequent encounter for fracture with delayed healing -S4290XK Fracture of unspecified shoulder girdle, part unspecified, subsequent encounter for fracture with nonunion -S4290XP Fracture of unspecified shoulder girdle, part unspecified, subsequent encounter for fracture with malunion -S4290XS Fracture of unspecified shoulder girdle, part unspecified, sequela -S4291XA Fracture of right shoulder girdle, part unspecified, initial encounter for closed fracture -S4291XB Fracture of right shoulder girdle, part unspecified, initial encounter for open fracture -S4291XD Fracture of right shoulder girdle, part unspecified, subsequent encounter for fracture with routine healing -S4291XG Fracture of right shoulder girdle, part unspecified, subsequent encounter for fracture with delayed healing -S4291XK Fracture of right shoulder girdle, part unspecified, subsequent encounter for fracture with nonunion -S4291XP Fracture of right shoulder girdle, part unspecified, subsequent encounter for fracture with malunion -S4291XS Fracture of right shoulder girdle, part unspecified, sequela -S4292XA Fracture of left shoulder girdle, part unspecified, initial encounter for closed fracture -S4292XB Fracture of left shoulder girdle, part unspecified, initial encounter for open fracture -S4292XD Fracture of left shoulder girdle, part unspecified, subsequent encounter for fracture with routine healing -S4292XG Fracture of left shoulder girdle, part unspecified, subsequent encounter for fracture with delayed healing -S4292XK Fracture of left shoulder girdle, part unspecified, subsequent encounter for fracture with nonunion -S4292XP Fracture of left shoulder girdle, part unspecified, subsequent encounter for fracture with malunion -S4292XS Fracture of left shoulder girdle, part unspecified, sequela -S43001A Unspecified subluxation of right shoulder joint, initial encounter -S43001D Unspecified subluxation of right shoulder joint, subsequent encounter -S43001S Unspecified subluxation of right shoulder joint, sequela -S43002A Unspecified subluxation of left shoulder joint, initial encounter -S43002D Unspecified subluxation of left shoulder joint, subsequent encounter -S43002S Unspecified subluxation of left shoulder joint, sequela -S43003A Unspecified subluxation of unspecified shoulder joint, initial encounter -S43003D Unspecified subluxation of unspecified shoulder joint, subsequent encounter -S43003S Unspecified subluxation of unspecified shoulder joint, sequela -S43004A Unspecified dislocation of right shoulder joint, initial encounter -S43004D Unspecified dislocation of right shoulder joint, subsequent encounter -S43004S Unspecified dislocation of right shoulder joint, sequela -S43005A Unspecified dislocation of left shoulder joint, initial encounter -S43005D Unspecified dislocation of left shoulder joint, subsequent encounter -S43005S Unspecified dislocation of left shoulder joint, sequela -S43006A Unspecified dislocation of unspecified shoulder joint, initial encounter -S43006D Unspecified dislocation of unspecified shoulder joint, subsequent encounter -S43006S Unspecified dislocation of unspecified shoulder joint, sequela -S43011A Anterior subluxation of right humerus, initial encounter -S43011D Anterior subluxation of right humerus, subsequent encounter -S43011S Anterior subluxation of right humerus, sequela -S43012A Anterior subluxation of left humerus, initial encounter -S43012D Anterior subluxation of left humerus, subsequent encounter -S43012S Anterior subluxation of left humerus, sequela -S43013A Anterior subluxation of unspecified humerus, initial encounter -S43013D Anterior subluxation of unspecified humerus, subsequent encounter -S43013S Anterior subluxation of unspecified humerus, sequela -S43014A Anterior dislocation of right humerus, initial encounter -S43014D Anterior dislocation of right humerus, subsequent encounter -S43014S Anterior dislocation of right humerus, sequela -S43015A Anterior dislocation of left humerus, initial encounter -S43015D Anterior dislocation of left humerus, subsequent encounter -S43015S Anterior dislocation of left humerus, sequela -S43016A Anterior dislocation of unspecified humerus, initial encounter -S43016D Anterior dislocation of unspecified humerus, subsequent encounter -S43016S Anterior dislocation of unspecified humerus, sequela -S43021A Posterior subluxation of right humerus, initial encounter -S43021D Posterior subluxation of right humerus, subsequent encounter -S43021S Posterior subluxation of right humerus, sequela -S43022A Posterior subluxation of left humerus, initial encounter -S43022D Posterior subluxation of left humerus, subsequent encounter -S43022S Posterior subluxation of left humerus, sequela -S43023A Posterior subluxation of unspecified humerus, initial encounter -S43023D Posterior subluxation of unspecified humerus, subsequent encounter -S43023S Posterior subluxation of unspecified humerus, sequela -S43024A Posterior dislocation of right humerus, initial encounter -S43024D Posterior dislocation of right humerus, subsequent encounter -S43024S Posterior dislocation of right humerus, sequela -S43025A Posterior dislocation of left humerus, initial encounter -S43025D Posterior dislocation of left humerus, subsequent encounter -S43025S Posterior dislocation of left humerus, sequela -S43026A Posterior dislocation of unspecified humerus, initial encounter -S43026D Posterior dislocation of unspecified humerus, subsequent encounter -S43026S Posterior dislocation of unspecified humerus, sequela -S43031A Inferior subluxation of right humerus, initial encounter -S43031D Inferior subluxation of right humerus, subsequent encounter -S43031S Inferior subluxation of right humerus, sequela -S43032A Inferior subluxation of left humerus, initial encounter -S43032D Inferior subluxation of left humerus, subsequent encounter -S43032S Inferior subluxation of left humerus, sequela -S43033A Inferior subluxation of unspecified humerus, initial encounter -S43033D Inferior subluxation of unspecified humerus, subsequent encounter -S43033S Inferior subluxation of unspecified humerus, sequela -S43034A Inferior dislocation of right humerus, initial encounter -S43034D Inferior dislocation of right humerus, subsequent encounter -S43034S Inferior dislocation of right humerus, sequela -S43035A Inferior dislocation of left humerus, initial encounter -S43035D Inferior dislocation of left humerus, subsequent encounter -S43035S Inferior dislocation of left humerus, sequela -S43036A Inferior dislocation of unspecified humerus, initial encounter -S43036D Inferior dislocation of unspecified humerus, subsequent encounter -S43036S Inferior dislocation of unspecified humerus, sequela -S43081A Other subluxation of right shoulder joint, initial encounter -S43081D Other subluxation of right shoulder joint, subsequent encounter -S43081S Other subluxation of right shoulder joint, sequela -S43082A Other subluxation of left shoulder joint, initial encounter -S43082D Other subluxation of left shoulder joint, subsequent encounter -S43082S Other subluxation of left shoulder joint, sequela -S43083A Other subluxation of unspecified shoulder joint, initial encounter -S43083D Other subluxation of unspecified shoulder joint, subsequent encounter -S43083S Other subluxation of unspecified shoulder joint, sequela -S43084A Other dislocation of right shoulder joint, initial encounter -S43084D Other dislocation of right shoulder joint, subsequent encounter -S43084S Other dislocation of right shoulder joint, sequela -S43085A Other dislocation of left shoulder joint, initial encounter -S43085D Other dislocation of left shoulder joint, subsequent encounter -S43085S Other dislocation of left shoulder joint, sequela -S43086A Other dislocation of unspecified shoulder joint, initial encounter -S43086D Other dislocation of unspecified shoulder joint, subsequent encounter -S43086S Other dislocation of unspecified shoulder joint, sequela -S43101A Unspecified dislocation of right acromioclavicular joint, initial encounter -S43101D Unspecified dislocation of right acromioclavicular joint, subsequent encounter -S43101S Unspecified dislocation of right acromioclavicular joint, sequela -S43102A Unspecified dislocation of left acromioclavicular joint, initial encounter -S43102D Unspecified dislocation of left acromioclavicular joint, subsequent encounter -S43102S Unspecified dislocation of left acromioclavicular joint, sequela -S43109A Unspecified dislocation of unspecified acromioclavicular joint, initial encounter -S43109D Unspecified dislocation of unspecified acromioclavicular joint, subsequent encounter -S43109S Unspecified dislocation of unspecified acromioclavicular joint, sequela -S43111A Subluxation of right acromioclavicular joint, initial encounter -S43111D Subluxation of right acromioclavicular joint, subsequent encounter -S43111S Subluxation of right acromioclavicular joint, sequela -S43112A Subluxation of left acromioclavicular joint, initial encounter -S43112D Subluxation of left acromioclavicular joint, subsequent encounter -S43112S Subluxation of left acromioclavicular joint, sequela -S43119A Subluxation of unspecified acromioclavicular joint, initial encounter -S43119D Subluxation of unspecified acromioclavicular joint, subsequent encounter -S43119S Subluxation of unspecified acromioclavicular joint, sequela -S43121A Dislocation of right acromioclavicular joint, 100%-200% displacement, initial encounter -S43121D Dislocation of right acromioclavicular joint, 100%-200% displacement, subsequent encounter -S43121S Dislocation of right acromioclavicular joint, 100%-200% displacement, sequela -S43122A Dislocation of left acromioclavicular joint, 100%-200% displacement, initial encounter -S43122D Dislocation of left acromioclavicular joint, 100%-200% displacement, subsequent encounter -S43122S Dislocation of left acromioclavicular joint, 100%-200% displacement, sequela -S43129A Dislocation of unspecified acromioclavicular joint, 100%-200% displacement, initial encounter -S43129D Dislocation of unspecified acromioclavicular joint, 100%-200% displacement, subsequent encounter -S43129S Dislocation of unspecified acromioclavicular joint, 100%-200% displacement, sequela -S43131A Dislocation of right acromioclavicular joint, greater than 200% displacement, initial encounter -S43131D Dislocation of right acromioclavicular joint, greater than 200% displacement, subsequent encounter -S43131S Dislocation of right acromioclavicular joint, greater than 200% displacement, sequela -S43132A Dislocation of left acromioclavicular joint, greater than 200% displacement, initial encounter -S43132D Dislocation of left acromioclavicular joint, greater than 200% displacement, subsequent encounter -S43132S Dislocation of left acromioclavicular joint, greater than 200% displacement, sequela -S43139A Dislocation of unspecified acromioclavicular joint, greater than 200% displacement, initial encounter -S43139D Dislocation of unspecified acromioclavicular joint, greater than 200% displacement, subsequent encounter -S43139S Dislocation of unspecified acromioclavicular joint, greater than 200% displacement, sequela -S43141A Inferior dislocation of right acromioclavicular joint, initial encounter -S43141D Inferior dislocation of right acromioclavicular joint, subsequent encounter -S43141S Inferior dislocation of right acromioclavicular joint, sequela -S43142A Inferior dislocation of left acromioclavicular joint, initial encounter -S43142D Inferior dislocation of left acromioclavicular joint, subsequent encounter -S43142S Inferior dislocation of left acromioclavicular joint, sequela -S43149A Inferior dislocation of unspecified acromioclavicular joint, initial encounter -S43149D Inferior dislocation of unspecified acromioclavicular joint, subsequent encounter -S43149S Inferior dislocation of unspecified acromioclavicular joint, sequela -S43151A Posterior dislocation of right acromioclavicular joint, initial encounter -S43151D Posterior dislocation of right acromioclavicular joint, subsequent encounter -S43151S Posterior dislocation of right acromioclavicular joint, sequela -S43152A Posterior dislocation of left acromioclavicular joint, initial encounter -S43152D Posterior dislocation of left acromioclavicular joint, subsequent encounter -S43152S Posterior dislocation of left acromioclavicular joint, sequela -S43159A Posterior dislocation of unspecified acromioclavicular joint, initial encounter -S43159D Posterior dislocation of unspecified acromioclavicular joint, subsequent encounter -S43159S Posterior dislocation of unspecified acromioclavicular joint, sequela -S43201A Unspecified subluxation of right sternoclavicular joint, initial encounter -S43201D Unspecified subluxation of right sternoclavicular joint, subsequent encounter -S43201S Unspecified subluxation of right sternoclavicular joint, sequela -S43202A Unspecified subluxation of left sternoclavicular joint, initial encounter -S43202D Unspecified subluxation of left sternoclavicular joint, subsequent encounter -S43202S Unspecified subluxation of left sternoclavicular joint, sequela -S43203A Unspecified subluxation of unspecified sternoclavicular joint, initial encounter -S43203D Unspecified subluxation of unspecified sternoclavicular joint, subsequent encounter -S43203S Unspecified subluxation of unspecified sternoclavicular joint, sequela -S43204A Unspecified dislocation of right sternoclavicular joint, initial encounter -S43204D Unspecified dislocation of right sternoclavicular joint, subsequent encounter -S43204S Unspecified dislocation of right sternoclavicular joint, sequela -S43205A Unspecified dislocation of left sternoclavicular joint, initial encounter -S43205D Unspecified dislocation of left sternoclavicular joint, subsequent encounter -S43205S Unspecified dislocation of left sternoclavicular joint, sequela -S43206A Unspecified dislocation of unspecified sternoclavicular joint, initial encounter -S43206D Unspecified dislocation of unspecified sternoclavicular joint, subsequent encounter -S43206S Unspecified dislocation of unspecified sternoclavicular joint, sequela -S43211A Anterior subluxation of right sternoclavicular joint, initial encounter -S43211D Anterior subluxation of right sternoclavicular joint, subsequent encounter -S43211S Anterior subluxation of right sternoclavicular joint, sequela -S43212A Anterior subluxation of left sternoclavicular joint, initial encounter -S43212D Anterior subluxation of left sternoclavicular joint, subsequent encounter -S43212S Anterior subluxation of left sternoclavicular joint, sequela -S43213A Anterior subluxation of unspecified sternoclavicular joint, initial encounter -S43213D Anterior subluxation of unspecified sternoclavicular joint, subsequent encounter -S43213S Anterior subluxation of unspecified sternoclavicular joint, sequela -S43214A Anterior dislocation of right sternoclavicular joint, initial encounter -S43214D Anterior dislocation of right sternoclavicular joint, subsequent encounter -S43214S Anterior dislocation of right sternoclavicular joint, sequela -S43215A Anterior dislocation of left sternoclavicular joint, initial encounter -S43215D Anterior dislocation of left sternoclavicular joint, subsequent encounter -S43215S Anterior dislocation of left sternoclavicular joint, sequela -S43216A Anterior dislocation of unspecified sternoclavicular joint, initial encounter -S43216D Anterior dislocation of unspecified sternoclavicular joint, subsequent encounter -S43216S Anterior dislocation of unspecified sternoclavicular joint, sequela -S43221A Posterior subluxation of right sternoclavicular joint, initial encounter -S43221D Posterior subluxation of right sternoclavicular joint, subsequent encounter -S43221S Posterior subluxation of right sternoclavicular joint, sequela -S43222A Posterior subluxation of left sternoclavicular joint, initial encounter -S43222D Posterior subluxation of left sternoclavicular joint, subsequent encounter -S43222S Posterior subluxation of left sternoclavicular joint, sequela -S43223A Posterior subluxation of unspecified sternoclavicular joint, initial encounter -S43223D Posterior subluxation of unspecified sternoclavicular joint, subsequent encounter -S43223S Posterior subluxation of unspecified sternoclavicular joint, sequela -S43224A Posterior dislocation of right sternoclavicular joint, initial encounter -S43224D Posterior dislocation of right sternoclavicular joint, subsequent encounter -S43224S Posterior dislocation of right sternoclavicular joint, sequela -S43225A Posterior dislocation of left sternoclavicular joint, initial encounter -S43225D Posterior dislocation of left sternoclavicular joint, subsequent encounter -S43225S Posterior dislocation of left sternoclavicular joint, sequela -S43226A Posterior dislocation of unspecified sternoclavicular joint, initial encounter -S43226D Posterior dislocation of unspecified sternoclavicular joint, subsequent encounter -S43226S Posterior dislocation of unspecified sternoclavicular joint, sequela -S43301A Subluxation of unspecified parts of right shoulder girdle, initial encounter -S43301D Subluxation of unspecified parts of right shoulder girdle, subsequent encounter -S43301S Subluxation of unspecified parts of right shoulder girdle, sequela -S43302A Subluxation of unspecified parts of left shoulder girdle, initial encounter -S43302D Subluxation of unspecified parts of left shoulder girdle, subsequent encounter -S43302S Subluxation of unspecified parts of left shoulder girdle, sequela -S43303A Subluxation of unspecified parts of unspecified shoulder girdle, initial encounter -S43303D Subluxation of unspecified parts of unspecified shoulder girdle, subsequent encounter -S43303S Subluxation of unspecified parts of unspecified shoulder girdle, sequela -S43304A Dislocation of unspecified parts of right shoulder girdle, initial encounter -S43304D Dislocation of unspecified parts of right shoulder girdle, subsequent encounter -S43304S Dislocation of unspecified parts of right shoulder girdle, sequela -S43305A Dislocation of unspecified parts of left shoulder girdle, initial encounter -S43305D Dislocation of unspecified parts of left shoulder girdle, subsequent encounter -S43305S Dislocation of unspecified parts of left shoulder girdle, sequela -S43306A Dislocation of unspecified parts of unspecified shoulder girdle, initial encounter -S43306D Dislocation of unspecified parts of unspecified shoulder girdle, subsequent encounter -S43306S Dislocation of unspecified parts of unspecified shoulder girdle, sequela -S43311A Subluxation of right scapula, initial encounter -S43311D Subluxation of right scapula, subsequent encounter -S43311S Subluxation of right scapula, sequela -S43312A Subluxation of left scapula, initial encounter -S43312D Subluxation of left scapula, subsequent encounter -S43312S Subluxation of left scapula, sequela -S43313A Subluxation of unspecified scapula, initial encounter -S43313D Subluxation of unspecified scapula, subsequent encounter -S43313S Subluxation of unspecified scapula, sequela -S43314A Dislocation of right scapula, initial encounter -S43314D Dislocation of right scapula, subsequent encounter -S43314S Dislocation of right scapula, sequela -S43315A Dislocation of left scapula, initial encounter -S43315D Dislocation of left scapula, subsequent encounter -S43315S Dislocation of left scapula, sequela -S43316A Dislocation of unspecified scapula, initial encounter -S43316D Dislocation of unspecified scapula, subsequent encounter -S43316S Dislocation of unspecified scapula, sequela -S43391A Subluxation of other parts of right shoulder girdle, initial encounter -S43391D Subluxation of other parts of right shoulder girdle, subsequent encounter -S43391S Subluxation of other parts of right shoulder girdle, sequela -S43392A Subluxation of other parts of left shoulder girdle, initial encounter -S43392D Subluxation of other parts of left shoulder girdle, subsequent encounter -S43392S Subluxation of other parts of left shoulder girdle, sequela -S43393A Subluxation of other parts of unspecified shoulder girdle, initial encounter -S43393D Subluxation of other parts of unspecified shoulder girdle, subsequent encounter -S43393S Subluxation of other parts of unspecified shoulder girdle, sequela -S43394A Dislocation of other parts of right shoulder girdle, initial encounter -S43394D Dislocation of other parts of right shoulder girdle, subsequent encounter -S43394S Dislocation of other parts of right shoulder girdle, sequela -S43395A Dislocation of other parts of left shoulder girdle, initial encounter -S43395D Dislocation of other parts of left shoulder girdle, subsequent encounter -S43395S Dislocation of other parts of left shoulder girdle, sequela -S43396A Dislocation of other parts of unspecified shoulder girdle, initial encounter -S43396D Dislocation of other parts of unspecified shoulder girdle, subsequent encounter -S43396S Dislocation of other parts of unspecified shoulder girdle, sequela -S43401A Unspecified sprain of right shoulder joint, initial encounter -S43401D Unspecified sprain of right shoulder joint, subsequent encounter -S43401S Unspecified sprain of right shoulder joint, sequela -S43402A Unspecified sprain of left shoulder joint, initial encounter -S43402D Unspecified sprain of left shoulder joint, subsequent encounter -S43402S Unspecified sprain of left shoulder joint, sequela -S43409A Unspecified sprain of unspecified shoulder joint, initial encounter -S43409D Unspecified sprain of unspecified shoulder joint, subsequent encounter -S43409S Unspecified sprain of unspecified shoulder joint, sequela -S43411A Sprain of right coracohumeral (ligament), initial encounter -S43411D Sprain of right coracohumeral (ligament), subsequent encounter -S43411S Sprain of right coracohumeral (ligament), sequela -S43412A Sprain of left coracohumeral (ligament), initial encounter -S43412D Sprain of left coracohumeral (ligament), subsequent encounter -S43412S Sprain of left coracohumeral (ligament), sequela -S43419A Sprain of unspecified coracohumeral (ligament), initial encounter -S43419D Sprain of unspecified coracohumeral (ligament), subsequent encounter -S43419S Sprain of unspecified coracohumeral (ligament), sequela -S43421A Sprain of right rotator cuff capsule, initial encounter -S43421D Sprain of right rotator cuff capsule, subsequent encounter -S43421S Sprain of right rotator cuff capsule, sequela -S43422A Sprain of left rotator cuff capsule, initial encounter -S43422D Sprain of left rotator cuff capsule, subsequent encounter -S43422S Sprain of left rotator cuff capsule, sequela -S43429A Sprain of unspecified rotator cuff capsule, initial encounter -S43429D Sprain of unspecified rotator cuff capsule, subsequent encounter -S43429S Sprain of unspecified rotator cuff capsule, sequela -S43431A Superior glenoid labrum lesion of right shoulder, initial encounter -S43431D Superior glenoid labrum lesion of right shoulder, subsequent encounter -S43431S Superior glenoid labrum lesion of right shoulder, sequela -S43432A Superior glenoid labrum lesion of left shoulder, initial encounter -S43432D Superior glenoid labrum lesion of left shoulder, subsequent encounter -S43432S Superior glenoid labrum lesion of left shoulder, sequela -S43439A Superior glenoid labrum lesion of unspecified shoulder, initial encounter -S43439D Superior glenoid labrum lesion of unspecified shoulder, subsequent encounter -S43439S Superior glenoid labrum lesion of unspecified shoulder, sequela -S43491A Other sprain of right shoulder joint, initial encounter -S43491D Other sprain of right shoulder joint, subsequent encounter -S43491S Other sprain of right shoulder joint, sequela -S43492A Other sprain of left shoulder joint, initial encounter -S43492D Other sprain of left shoulder joint, subsequent encounter -S43492S Other sprain of left shoulder joint, sequela -S43499A Other sprain of unspecified shoulder joint, initial encounter -S43499D Other sprain of unspecified shoulder joint, subsequent encounter -S43499S Other sprain of unspecified shoulder joint, sequela -S4350XA Sprain of unspecified acromioclavicular joint, initial encounter -S4350XD Sprain of unspecified acromioclavicular joint, subsequent encounter -S4350XS Sprain of unspecified acromioclavicular joint, sequela -S4351XA Sprain of right acromioclavicular joint, initial encounter -S4351XD Sprain of right acromioclavicular joint, subsequent encounter -S4351XS Sprain of right acromioclavicular joint, sequela -S4352XA Sprain of left acromioclavicular joint, initial encounter -S4352XD Sprain of left acromioclavicular joint, subsequent encounter -S4352XS Sprain of left acromioclavicular joint, sequela -S4360XA Sprain of unspecified sternoclavicular joint, initial encounter -S4360XD Sprain of unspecified sternoclavicular joint, subsequent encounter -S4360XS Sprain of unspecified sternoclavicular joint, sequela -S4361XA Sprain of right sternoclavicular joint, initial encounter -S4361XD Sprain of right sternoclavicular joint, subsequent encounter -S4361XS Sprain of right sternoclavicular joint, sequela -S4362XA Sprain of left sternoclavicular joint, initial encounter -S4362XD Sprain of left sternoclavicular joint, subsequent encounter -S4362XS Sprain of left sternoclavicular joint, sequela -S4380XA Sprain of other specified parts of unspecified shoulder girdle, initial encounter -S4380XD Sprain of other specified parts of unspecified shoulder girdle, subsequent encounter -S4380XS Sprain of other specified parts of unspecified shoulder girdle, sequela -S4381XA Sprain of other specified parts of right shoulder girdle, initial encounter -S4381XD Sprain of other specified parts of right shoulder girdle, subsequent encounter -S4381XS Sprain of other specified parts of right shoulder girdle, sequela -S4382XA Sprain of other specified parts of left shoulder girdle, initial encounter -S4382XD Sprain of other specified parts of left shoulder girdle, subsequent encounter -S4382XS Sprain of other specified parts of left shoulder girdle, sequela -S4390XA Sprain of unspecified parts of unspecified shoulder girdle, initial encounter -S4390XD Sprain of unspecified parts of unspecified shoulder girdle, subsequent encounter -S4390XS Sprain of unspecified parts of unspecified shoulder girdle, sequela -S4391XA Sprain of unspecified parts of right shoulder girdle, initial encounter -S4391XD Sprain of unspecified parts of right shoulder girdle, subsequent encounter -S4391XS Sprain of unspecified parts of right shoulder girdle, sequela -S4392XA Sprain of unspecified parts of left shoulder girdle, initial encounter -S4392XD Sprain of unspecified parts of left shoulder girdle, subsequent encounter -S4392XS Sprain of unspecified parts of left shoulder girdle, sequela -S4400XA Injury of ulnar nerve at upper arm level, unspecified arm, initial encounter -S4400XD Injury of ulnar nerve at upper arm level, unspecified arm, subsequent encounter -S4400XS Injury of ulnar nerve at upper arm level, unspecified arm, sequela -S4401XA Injury of ulnar nerve at upper arm level, right arm, initial encounter -S4401XD Injury of ulnar nerve at upper arm level, right arm, subsequent encounter -S4401XS Injury of ulnar nerve at upper arm level, right arm, sequela -S4402XA Injury of ulnar nerve at upper arm level, left arm, initial encounter -S4402XD Injury of ulnar nerve at upper arm level, left arm, subsequent encounter -S4402XS Injury of ulnar nerve at upper arm level, left arm, sequela -S4410XA Injury of median nerve at upper arm level, unspecified arm, initial encounter -S4410XD Injury of median nerve at upper arm level, unspecified arm, subsequent encounter -S4410XS Injury of median nerve at upper arm level, unspecified arm, sequela -S4411XA Injury of median nerve at upper arm level, right arm, initial encounter -S4411XD Injury of median nerve at upper arm level, right arm, subsequent encounter -S4411XS Injury of median nerve at upper arm level, right arm, sequela -S4412XA Injury of median nerve at upper arm level, left arm, initial encounter -S4412XD Injury of median nerve at upper arm level, left arm, subsequent encounter -S4412XS Injury of median nerve at upper arm level, left arm, sequela -S4420XA Injury of radial nerve at upper arm level, unspecified arm, initial encounter -S4420XD Injury of radial nerve at upper arm level, unspecified arm, subsequent encounter -S4420XS Injury of radial nerve at upper arm level, unspecified arm, sequela -S4421XA Injury of radial nerve at upper arm level, right arm, initial encounter -S4421XD Injury of radial nerve at upper arm level, right arm, subsequent encounter -S4421XS Injury of radial nerve at upper arm level, right arm, sequela -S4422XA Injury of radial nerve at upper arm level, left arm, initial encounter -S4422XD Injury of radial nerve at upper arm level, left arm, subsequent encounter -S4422XS Injury of radial nerve at upper arm level, left arm, sequela -S4430XA Injury of axillary nerve, unspecified arm, initial encounter -S4430XD Injury of axillary nerve, unspecified arm, subsequent encounter -S4430XS Injury of axillary nerve, unspecified arm, sequela -S4431XA Injury of axillary nerve, right arm, initial encounter -S4431XD Injury of axillary nerve, right arm, subsequent encounter -S4431XS Injury of axillary nerve, right arm, sequela -S4432XA Injury of axillary nerve, left arm, initial encounter -S4432XD Injury of axillary nerve, left arm, subsequent encounter -S4432XS Injury of axillary nerve, left arm, sequela -S4440XA Injury of musculocutaneous nerve, unspecified arm, initial encounter -S4440XD Injury of musculocutaneous nerve, unspecified arm, subsequent encounter -S4440XS Injury of musculocutaneous nerve, unspecified arm, sequela -S4441XA Injury of musculocutaneous nerve, right arm, initial encounter -S4441XD Injury of musculocutaneous nerve, right arm, subsequent encounter -S4441XS Injury of musculocutaneous nerve, right arm, sequela -S4442XA Injury of musculocutaneous nerve, left arm, initial encounter -S4442XD Injury of musculocutaneous nerve, left arm, subsequent encounter -S4442XS Injury of musculocutaneous nerve, left arm, sequela -S4450XA Injury of cutaneous sensory nerve at shoulder and upper arm level, unspecified arm, initial encounter -S4450XD Injury of cutaneous sensory nerve at shoulder and upper arm level, unspecified arm, subsequent encounter -S4450XS Injury of cutaneous sensory nerve at shoulder and upper arm level, unspecified arm, sequela -S4451XA Injury of cutaneous sensory nerve at shoulder and upper arm level, right arm, initial encounter -S4451XD Injury of cutaneous sensory nerve at shoulder and upper arm level, right arm, subsequent encounter -S4451XS Injury of cutaneous sensory nerve at shoulder and upper arm level, right arm, sequela -S4452XA Injury of cutaneous sensory nerve at shoulder and upper arm level, left arm, initial encounter -S4452XD Injury of cutaneous sensory nerve at shoulder and upper arm level, left arm, subsequent encounter -S4452XS Injury of cutaneous sensory nerve at shoulder and upper arm level, left arm, sequela -S448X1A Injury of other nerves at shoulder and upper arm level, right arm, initial encounter -S448X1D Injury of other nerves at shoulder and upper arm level, right arm, subsequent encounter -S448X1S Injury of other nerves at shoulder and upper arm level, right arm, sequela -S448X2A Injury of other nerves at shoulder and upper arm level, left arm, initial encounter -S448X2D Injury of other nerves at shoulder and upper arm level, left arm, subsequent encounter -S448X2S Injury of other nerves at shoulder and upper arm level, left arm, sequela -S448X9A Injury of other nerves at shoulder and upper arm level, unspecified arm, initial encounter -S448X9D Injury of other nerves at shoulder and upper arm level, unspecified arm, subsequent encounter -S448X9S Injury of other nerves at shoulder and upper arm level, unspecified arm, sequela -S4490XA Injury of unspecified nerve at shoulder and upper arm level, unspecified arm, initial encounter -S4490XD Injury of unspecified nerve at shoulder and upper arm level, unspecified arm, subsequent encounter -S4490XS Injury of unspecified nerve at shoulder and upper arm level, unspecified arm, sequela -S4491XA Injury of unspecified nerve at shoulder and upper arm level, right arm, initial encounter -S4491XD Injury of unspecified nerve at shoulder and upper arm level, right arm, subsequent encounter -S4491XS Injury of unspecified nerve at shoulder and upper arm level, right arm, sequela -S4492XA Injury of unspecified nerve at shoulder and upper arm level, left arm, initial encounter -S4492XD Injury of unspecified nerve at shoulder and upper arm level, left arm, subsequent encounter -S4492XS Injury of unspecified nerve at shoulder and upper arm level, left arm, sequela -S45001A Unspecified injury of axillary artery, right side, initial encounter -S45001D Unspecified injury of axillary artery, right side, subsequent encounter -S45001S Unspecified injury of axillary artery, right side, sequela -S45002A Unspecified injury of axillary artery, left side, initial encounter -S45002D Unspecified injury of axillary artery, left side, subsequent encounter -S45002S Unspecified injury of axillary artery, left side, sequela -S45009A Unspecified injury of axillary artery, unspecified side, initial encounter -S45009D Unspecified injury of axillary artery, unspecified side, subsequent encounter -S45009S Unspecified injury of axillary artery, unspecified side, sequela -S45011A Laceration of axillary artery, right side, initial encounter -S45011D Laceration of axillary artery, right side, subsequent encounter -S45011S Laceration of axillary artery, right side, sequela -S45012A Laceration of axillary artery, left side, initial encounter -S45012D Laceration of axillary artery, left side, subsequent encounter -S45012S Laceration of axillary artery, left side, sequela -S45019A Laceration of axillary artery, unspecified side, initial encounter -S45019D Laceration of axillary artery, unspecified side, subsequent encounter -S45019S Laceration of axillary artery, unspecified side, sequela -S45091A Other specified injury of axillary artery, right side, initial encounter -S45091D Other specified injury of axillary artery, right side, subsequent encounter -S45091S Other specified injury of axillary artery, right side, sequela -S45092A Other specified injury of axillary artery, left side, initial encounter -S45092D Other specified injury of axillary artery, left side, subsequent encounter -S45092S Other specified injury of axillary artery, left side, sequela -S45099A Other specified injury of axillary artery, unspecified side, initial encounter -S45099D Other specified injury of axillary artery, unspecified side, subsequent encounter -S45099S Other specified injury of axillary artery, unspecified side, sequela -S45101A Unspecified injury of brachial artery, right side, initial encounter -S45101D Unspecified injury of brachial artery, right side, subsequent encounter -S45101S Unspecified injury of brachial artery, right side, sequela -S45102A Unspecified injury of brachial artery, left side, initial encounter -S45102D Unspecified injury of brachial artery, left side, subsequent encounter -S45102S Unspecified injury of brachial artery, left side, sequela -S45109A Unspecified injury of brachial artery, unspecified side, initial encounter -S45109D Unspecified injury of brachial artery, unspecified side, subsequent encounter -S45109S Unspecified injury of brachial artery, unspecified side, sequela -S45111A Laceration of brachial artery, right side, initial encounter -S45111D Laceration of brachial artery, right side, subsequent encounter -S45111S Laceration of brachial artery, right side, sequela -S45112A Laceration of brachial artery, left side, initial encounter -S45112D Laceration of brachial artery, left side, subsequent encounter -S45112S Laceration of brachial artery, left side, sequela -S45119A Laceration of brachial artery, unspecified side, initial encounter -S45119D Laceration of brachial artery, unspecified side, subsequent encounter -S45119S Laceration of brachial artery, unspecified side, sequela -S45191A Other specified injury of brachial artery, right side, initial encounter -S45191D Other specified injury of brachial artery, right side, subsequent encounter -S45191S Other specified injury of brachial artery, right side, sequela -S45192A Other specified injury of brachial artery, left side, initial encounter -S45192D Other specified injury of brachial artery, left side, subsequent encounter -S45192S Other specified injury of brachial artery, left side, sequela -S45199A Other specified injury of brachial artery, unspecified side, initial encounter -S45199D Other specified injury of brachial artery, unspecified side, subsequent encounter -S45199S Other specified injury of brachial artery, unspecified side, sequela -S45201A Unspecified injury of axillary or brachial vein, right side, initial encounter -S45201D Unspecified injury of axillary or brachial vein, right side, subsequent encounter -S45201S Unspecified injury of axillary or brachial vein, right side, sequela -S45202A Unspecified injury of axillary or brachial vein, left side, initial encounter -S45202D Unspecified injury of axillary or brachial vein, left side, subsequent encounter -S45202S Unspecified injury of axillary or brachial vein, left side, sequela -S45209A Unspecified injury of axillary or brachial vein, unspecified side, initial encounter -S45209D Unspecified injury of axillary or brachial vein, unspecified side, subsequent encounter -S45209S Unspecified injury of axillary or brachial vein, unspecified side, sequela -S45211A Laceration of axillary or brachial vein, right side, initial encounter -S45211D Laceration of axillary or brachial vein, right side, subsequent encounter -S45211S Laceration of axillary or brachial vein, right side, sequela -S45212A Laceration of axillary or brachial vein, left side, initial encounter -S45212D Laceration of axillary or brachial vein, left side, subsequent encounter -S45212S Laceration of axillary or brachial vein, left side, sequela -S45219A Laceration of axillary or brachial vein, unspecified side, initial encounter -S45219D Laceration of axillary or brachial vein, unspecified side, subsequent encounter -S45219S Laceration of axillary or brachial vein, unspecified side, sequela -S45291A Other specified injury of axillary or brachial vein, right side, initial encounter -S45291D Other specified injury of axillary or brachial vein, right side, subsequent encounter -S45291S Other specified injury of axillary or brachial vein, right side, sequela -S45292A Other specified injury of axillary or brachial vein, left side, initial encounter -S45292D Other specified injury of axillary or brachial vein, left side, subsequent encounter -S45292S Other specified injury of axillary or brachial vein, left side, sequela -S45299A Other specified injury of axillary or brachial vein, unspecified side, initial encounter -S45299D Other specified injury of axillary or brachial vein, unspecified side, subsequent encounter -S45299S Other specified injury of axillary or brachial vein, unspecified side, sequela -S45301A Unspecified injury of superficial vein at shoulder and upper arm level, right arm, initial encounter -S45301D Unspecified injury of superficial vein at shoulder and upper arm level, right arm, subsequent encounter -S45301S Unspecified injury of superficial vein at shoulder and upper arm level, right arm, sequela -S45302A Unspecified injury of superficial vein at shoulder and upper arm level, left arm, initial encounter -S45302D Unspecified injury of superficial vein at shoulder and upper arm level, left arm, subsequent encounter -S45302S Unspecified injury of superficial vein at shoulder and upper arm level, left arm, sequela -S45309A Unspecified injury of superficial vein at shoulder and upper arm level, unspecified arm, initial encounter -S45309D Unspecified injury of superficial vein at shoulder and upper arm level, unspecified arm, subsequent encounter -S45309S Unspecified injury of superficial vein at shoulder and upper arm level, unspecified arm, sequela -S45311A Laceration of superficial vein at shoulder and upper arm level, right arm, initial encounter -S45311D Laceration of superficial vein at shoulder and upper arm level, right arm, subsequent encounter -S45311S Laceration of superficial vein at shoulder and upper arm level, right arm, sequela -S45312A Laceration of superficial vein at shoulder and upper arm level, left arm, initial encounter -S45312D Laceration of superficial vein at shoulder and upper arm level, left arm, subsequent encounter -S45312S Laceration of superficial vein at shoulder and upper arm level, left arm, sequela -S45319A Laceration of superficial vein at shoulder and upper arm level, unspecified arm, initial encounter -S45319D Laceration of superficial vein at shoulder and upper arm level, unspecified arm, subsequent encounter -S45319S Laceration of superficial vein at shoulder and upper arm level, unspecified arm, sequela -S45391A Other specified injury of superficial vein at shoulder and upper arm level, right arm, initial encounter -S45391D Other specified injury of superficial vein at shoulder and upper arm level, right arm, subsequent encounter -S45391S Other specified injury of superficial vein at shoulder and upper arm level, right arm, sequela -S45392A Other specified injury of superficial vein at shoulder and upper arm level, left arm, initial encounter -S45392D Other specified injury of superficial vein at shoulder and upper arm level, left arm, subsequent encounter -S45392S Other specified injury of superficial vein at shoulder and upper arm level, left arm, sequela -S45399A Other specified injury of superficial vein at shoulder and upper arm level, unspecified arm, initial encounter -S45399D Other specified injury of superficial vein at shoulder and upper arm level, unspecified arm, subsequent encounter -S45399S Other specified injury of superficial vein at shoulder and upper arm level, unspecified arm, sequela -S45801A Unspecified injury of other specified blood vessels at shoulder and upper arm level, right arm, initial encounter -S45801D Unspecified injury of other specified blood vessels at shoulder and upper arm level, right arm, subsequent encounter -S45801S Unspecified injury of other specified blood vessels at shoulder and upper arm level, right arm, sequela -S45802A Unspecified injury of other specified blood vessels at shoulder and upper arm level, left arm, initial encounter -S45802D Unspecified injury of other specified blood vessels at shoulder and upper arm level, left arm, subsequent encounter -S45802S Unspecified injury of other specified blood vessels at shoulder and upper arm level, left arm, sequela -S45809A Unspecified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, initial encounter -S45809D Unspecified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, subsequent encounter -S45809S Unspecified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, sequela -S45811A Laceration of other specified blood vessels at shoulder and upper arm level, right arm, initial encounter -S45811D Laceration of other specified blood vessels at shoulder and upper arm level, right arm, subsequent encounter -S45811S Laceration of other specified blood vessels at shoulder and upper arm level, right arm, sequela -S45812A Laceration of other specified blood vessels at shoulder and upper arm level, left arm, initial encounter -S45812D Laceration of other specified blood vessels at shoulder and upper arm level, left arm, subsequent encounter -S45812S Laceration of other specified blood vessels at shoulder and upper arm level, left arm, sequela -S45819A Laceration of other specified blood vessels at shoulder and upper arm level, unspecified arm, initial encounter -S45819D Laceration of other specified blood vessels at shoulder and upper arm level, unspecified arm, subsequent encounter -S45819S Laceration of other specified blood vessels at shoulder and upper arm level, unspecified arm, sequela -S45891A Other specified injury of other specified blood vessels at shoulder and upper arm level, right arm, initial encounter -S45891D Other specified injury of other specified blood vessels at shoulder and upper arm level, right arm, subsequent encounter -S45891S Other specified injury of other specified blood vessels at shoulder and upper arm level, right arm, sequela -S45892A Other specified injury of other specified blood vessels at shoulder and upper arm level, left arm, initial encounter -S45892D Other specified injury of other specified blood vessels at shoulder and upper arm level, left arm, subsequent encounter -S45892S Other specified injury of other specified blood vessels at shoulder and upper arm level, left arm, sequela -S45899A Other specified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, initial encounter -S45899D Other specified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, subsequent encounter -S45899S Other specified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, sequela -S45901A Unspecified injury of unspecified blood vessel at shoulder and upper arm level, right arm, initial encounter -S45901D Unspecified injury of unspecified blood vessel at shoulder and upper arm level, right arm, subsequent encounter -S45901S Unspecified injury of unspecified blood vessel at shoulder and upper arm level, right arm, sequela -S45902A Unspecified injury of unspecified blood vessel at shoulder and upper arm level, left arm, initial encounter -S45902D Unspecified injury of unspecified blood vessel at shoulder and upper arm level, left arm, subsequent encounter -S45902S Unspecified injury of unspecified blood vessel at shoulder and upper arm level, left arm, sequela -S45909A Unspecified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, initial encounter -S45909D Unspecified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, subsequent encounter -S45909S Unspecified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, sequela -S45911A Laceration of unspecified blood vessel at shoulder and upper arm level, right arm, initial encounter -S45911D Laceration of unspecified blood vessel at shoulder and upper arm level, right arm, subsequent encounter -S45911S Laceration of unspecified blood vessel at shoulder and upper arm level, right arm, sequela -S45912A Laceration of unspecified blood vessel at shoulder and upper arm level, left arm, initial encounter -S45912D Laceration of unspecified blood vessel at shoulder and upper arm level, left arm, subsequent encounter -S45912S Laceration of unspecified blood vessel at shoulder and upper arm level, left arm, sequela -S45919A Laceration of unspecified blood vessel at shoulder and upper arm level, unspecified arm, initial encounter -S45919D Laceration of unspecified blood vessel at shoulder and upper arm level, unspecified arm, subsequent encounter -S45919S Laceration of unspecified blood vessel at shoulder and upper arm level, unspecified arm, sequela -S45991A Other specified injury of unspecified blood vessel at shoulder and upper arm level, right arm, initial encounter -S45991D Other specified injury of unspecified blood vessel at shoulder and upper arm level, right arm, subsequent encounter -S45991S Other specified injury of unspecified blood vessel at shoulder and upper arm level, right arm, sequela -S45992A Other specified injury of unspecified blood vessel at shoulder and upper arm level, left arm, initial encounter -S45992D Other specified injury of unspecified blood vessel at shoulder and upper arm level, left arm, subsequent encounter -S45992S Other specified injury of unspecified blood vessel at shoulder and upper arm level, left arm, sequela -S45999A Other specified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, initial encounter -S45999D Other specified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, subsequent encounter -S45999S Other specified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, sequela -S46001A Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, initial encounter -S46001D Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, subsequent encounter -S46001S Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, sequela -S46002A Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, initial encounter -S46002D Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, subsequent encounter -S46002S Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, sequela -S46009A Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, initial encounter -S46009D Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, subsequent encounter -S46009S Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, sequela -S46011A Strain of muscle(s) and tendon(s) of the rotator cuff of right shoulder, initial encounter -S46011D Strain of muscle(s) and tendon(s) of the rotator cuff of right shoulder, subsequent encounter -S46011S Strain of muscle(s) and tendon(s) of the rotator cuff of right shoulder, sequela -S46012A Strain of muscle(s) and tendon(s) of the rotator cuff of left shoulder, initial encounter -S46012D Strain of muscle(s) and tendon(s) of the rotator cuff of left shoulder, subsequent encounter -S46012S Strain of muscle(s) and tendon(s) of the rotator cuff of left shoulder, sequela -S46019A Strain of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, initial encounter -S46019D Strain of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, subsequent encounter -S46019S Strain of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, sequela -S46021A Laceration of muscle(s) and tendon(s) of the rotator cuff of right shoulder, initial encounter -S46021D Laceration of muscle(s) and tendon(s) of the rotator cuff of right shoulder, subsequent encounter -S46021S Laceration of muscle(s) and tendon(s) of the rotator cuff of right shoulder, sequela -S46022A Laceration of muscle(s) and tendon(s) of the rotator cuff of left shoulder, initial encounter -S46022D Laceration of muscle(s) and tendon(s) of the rotator cuff of left shoulder, subsequent encounter -S46022S Laceration of muscle(s) and tendon(s) of the rotator cuff of left shoulder, sequela -S46029A Laceration of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, initial encounter -S46029D Laceration of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, subsequent encounter -S46029S Laceration of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, sequela -S46091A Other injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, initial encounter -S46091D Other injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, subsequent encounter -S46091S Other injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, sequela -S46092A Other injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, initial encounter -S46092D Other injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, subsequent encounter -S46092S Other injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, sequela -S46099A Other injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, initial encounter -S46099D Other injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, subsequent encounter -S46099S Other injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, sequela -S46101A Unspecified injury of muscle, fascia and tendon of long head of biceps, right arm, initial encounter -S46101D Unspecified injury of muscle, fascia and tendon of long head of biceps, right arm, subsequent encounter -S46101S Unspecified injury of muscle, fascia and tendon of long head of biceps, right arm, sequela -S46102A Unspecified injury of muscle, fascia and tendon of long head of biceps, left arm, initial encounter -S46102D Unspecified injury of muscle, fascia and tendon of long head of biceps, left arm, subsequent encounter -S46102S Unspecified injury of muscle, fascia and tendon of long head of biceps, left arm, sequela -S46109A Unspecified injury of muscle, fascia and tendon of long head of biceps, unspecified arm, initial encounter -S46109D Unspecified injury of muscle, fascia and tendon of long head of biceps, unspecified arm, subsequent encounter -S46109S Unspecified injury of muscle, fascia and tendon of long head of biceps, unspecified arm, sequela -S46111A Strain of muscle, fascia and tendon of long head of biceps, right arm, initial encounter -S46111D Strain of muscle, fascia and tendon of long head of biceps, right arm, subsequent encounter -S46111S Strain of muscle, fascia and tendon of long head of biceps, right arm, sequela -S46112A Strain of muscle, fascia and tendon of long head of biceps, left arm, initial encounter -S46112D Strain of muscle, fascia and tendon of long head of biceps, left arm, subsequent encounter -S46112S Strain of muscle, fascia and tendon of long head of biceps, left arm, sequela -S46119A Strain of muscle, fascia and tendon of long head of biceps, unspecified arm, initial encounter -S46119D Strain of muscle, fascia and tendon of long head of biceps, unspecified arm, subsequent encounter -S46119S Strain of muscle, fascia and tendon of long head of biceps, unspecified arm, sequela -S46121A Laceration of muscle, fascia and tendon of long head of biceps, right arm, initial encounter -S46121D Laceration of muscle, fascia and tendon of long head of biceps, right arm, subsequent encounter -S46121S Laceration of muscle, fascia and tendon of long head of biceps, right arm, sequela -S46122A Laceration of muscle, fascia and tendon of long head of biceps, left arm, initial encounter -S46122D Laceration of muscle, fascia and tendon of long head of biceps, left arm, subsequent encounter -S46122S Laceration of muscle, fascia and tendon of long head of biceps, left arm, sequela -S46129A Laceration of muscle, fascia and tendon of long head of biceps, unspecified arm, initial encounter -S46129D Laceration of muscle, fascia and tendon of long head of biceps, unspecified arm, subsequent encounter -S46129S Laceration of muscle, fascia and tendon of long head of biceps, unspecified arm, sequela -S46191A Other injury of muscle, fascia and tendon of long head of biceps, right arm, initial encounter -S46191D Other injury of muscle, fascia and tendon of long head of biceps, right arm, subsequent encounter -S46191S Other injury of muscle, fascia and tendon of long head of biceps, right arm, sequela -S46192A Other injury of muscle, fascia and tendon of long head of biceps, left arm, initial encounter -S46192D Other injury of muscle, fascia and tendon of long head of biceps, left arm, subsequent encounter -S46192S Other injury of muscle, fascia and tendon of long head of biceps, left arm, sequela -S46199A Other injury of muscle, fascia and tendon of long head of biceps, unspecified arm, initial encounter -S46199D Other injury of muscle, fascia and tendon of long head of biceps, unspecified arm, subsequent encounter -S46199S Other injury of muscle, fascia and tendon of long head of biceps, unspecified arm, sequela -S46201A Unspecified injury of muscle, fascia and tendon of other parts of biceps, right arm, initial encounter -S46201D Unspecified injury of muscle, fascia and tendon of other parts of biceps, right arm, subsequent encounter -S46201S Unspecified injury of muscle, fascia and tendon of other parts of biceps, right arm, sequela -S46202A Unspecified injury of muscle, fascia and tendon of other parts of biceps, left arm, initial encounter -S46202D Unspecified injury of muscle, fascia and tendon of other parts of biceps, left arm, subsequent encounter -S46202S Unspecified injury of muscle, fascia and tendon of other parts of biceps, left arm, sequela -S46209A Unspecified injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, initial encounter -S46209D Unspecified injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, subsequent encounter -S46209S Unspecified injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, sequela -S46211A Strain of muscle, fascia and tendon of other parts of biceps, right arm, initial encounter -S46211D Strain of muscle, fascia and tendon of other parts of biceps, right arm, subsequent encounter -S46211S Strain of muscle, fascia and tendon of other parts of biceps, right arm, sequela -S46212A Strain of muscle, fascia and tendon of other parts of biceps, left arm, initial encounter -S46212D Strain of muscle, fascia and tendon of other parts of biceps, left arm, subsequent encounter -S46212S Strain of muscle, fascia and tendon of other parts of biceps, left arm, sequela -S46219A Strain of muscle, fascia and tendon of other parts of biceps, unspecified arm, initial encounter -S46219D Strain of muscle, fascia and tendon of other parts of biceps, unspecified arm, subsequent encounter -S46219S Strain of muscle, fascia and tendon of other parts of biceps, unspecified arm, sequela -S46221A Laceration of muscle, fascia and tendon of other parts of biceps, right arm, initial encounter -S46221D Laceration of muscle, fascia and tendon of other parts of biceps, right arm, subsequent encounter -S46221S Laceration of muscle, fascia and tendon of other parts of biceps, right arm, sequela -S46222A Laceration of muscle, fascia and tendon of other parts of biceps, left arm, initial encounter -S46222D Laceration of muscle, fascia and tendon of other parts of biceps, left arm, subsequent encounter -S46222S Laceration of muscle, fascia and tendon of other parts of biceps, left arm, sequela -S46229A Laceration of muscle, fascia and tendon of other parts of biceps, unspecified arm, initial encounter -S46229D Laceration of muscle, fascia and tendon of other parts of biceps, unspecified arm, subsequent encounter -S46229S Laceration of muscle, fascia and tendon of other parts of biceps, unspecified arm, sequela -S46291A Other injury of muscle, fascia and tendon of other parts of biceps, right arm, initial encounter -S46291D Other injury of muscle, fascia and tendon of other parts of biceps, right arm, subsequent encounter -S46291S Other injury of muscle, fascia and tendon of other parts of biceps, right arm, sequela -S46292A Other injury of muscle, fascia and tendon of other parts of biceps, left arm, initial encounter -S46292D Other injury of muscle, fascia and tendon of other parts of biceps, left arm, subsequent encounter -S46292S Other injury of muscle, fascia and tendon of other parts of biceps, left arm, sequela -S46299A Other injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, initial encounter -S46299D Other injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, subsequent encounter -S46299S Other injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, sequela -S46301A Unspecified injury of muscle, fascia and tendon of triceps, right arm, initial encounter -S46301D Unspecified injury of muscle, fascia and tendon of triceps, right arm, subsequent encounter -S46301S Unspecified injury of muscle, fascia and tendon of triceps, right arm, sequela -S46302A Unspecified injury of muscle, fascia and tendon of triceps, left arm, initial encounter -S46302D Unspecified injury of muscle, fascia and tendon of triceps, left arm, subsequent encounter -S46302S Unspecified injury of muscle, fascia and tendon of triceps, left arm, sequela -S46309A Unspecified injury of muscle, fascia and tendon of triceps, unspecified arm, initial encounter -S46309D Unspecified injury of muscle, fascia and tendon of triceps, unspecified arm, subsequent encounter -S46309S Unspecified injury of muscle, fascia and tendon of triceps, unspecified arm, sequela -S46311A Strain of muscle, fascia and tendon of triceps, right arm, initial encounter -S46311D Strain of muscle, fascia and tendon of triceps, right arm, subsequent encounter -S46311S Strain of muscle, fascia and tendon of triceps, right arm, sequela -S46312A Strain of muscle, fascia and tendon of triceps, left arm, initial encounter -S46312D Strain of muscle, fascia and tendon of triceps, left arm, subsequent encounter -S46312S Strain of muscle, fascia and tendon of triceps, left arm, sequela -S46319A Strain of muscle, fascia and tendon of triceps, unspecified arm, initial encounter -S46319D Strain of muscle, fascia and tendon of triceps, unspecified arm, subsequent encounter -S46319S Strain of muscle, fascia and tendon of triceps, unspecified arm, sequela -S46321A Laceration of muscle, fascia and tendon of triceps, right arm, initial encounter -S46321D Laceration of muscle, fascia and tendon of triceps, right arm, subsequent encounter -S46321S Laceration of muscle, fascia and tendon of triceps, right arm, sequela -S46322A Laceration of muscle, fascia and tendon of triceps, left arm, initial encounter -S46322D Laceration of muscle, fascia and tendon of triceps, left arm, subsequent encounter -S46322S Laceration of muscle, fascia and tendon of triceps, left arm, sequela -S46329A Laceration of muscle, fascia and tendon of triceps, unspecified arm, initial encounter -S46329D Laceration of muscle, fascia and tendon of triceps, unspecified arm, subsequent encounter -S46329S Laceration of muscle, fascia and tendon of triceps, unspecified arm, sequela -S46391A Other injury of muscle, fascia and tendon of triceps, right arm, initial encounter -S46391D Other injury of muscle, fascia and tendon of triceps, right arm, subsequent encounter -S46391S Other injury of muscle, fascia and tendon of triceps, right arm, sequela -S46392A Other injury of muscle, fascia and tendon of triceps, left arm, initial encounter -S46392D Other injury of muscle, fascia and tendon of triceps, left arm, subsequent encounter -S46392S Other injury of muscle, fascia and tendon of triceps, left arm, sequela -S46399A Other injury of muscle, fascia and tendon of triceps, unspecified arm, initial encounter -S46399D Other injury of muscle, fascia and tendon of triceps, unspecified arm, subsequent encounter -S46399S Other injury of muscle, fascia and tendon of triceps, unspecified arm, sequela -S46801A Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, initial encounter -S46801D Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, subsequent encounter -S46801S Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, sequela -S46802A Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, initial encounter -S46802D Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, subsequent encounter -S46802S Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, sequela -S46809A Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, initial encounter -S46809D Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, subsequent encounter -S46809S Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, sequela -S46811A Strain of other muscles, fascia and tendons at shoulder and upper arm level, right arm, initial encounter -S46811D Strain of other muscles, fascia and tendons at shoulder and upper arm level, right arm, subsequent encounter -S46811S Strain of other muscles, fascia and tendons at shoulder and upper arm level, right arm, sequela -S46812A Strain of other muscles, fascia and tendons at shoulder and upper arm level, left arm, initial encounter -S46812D Strain of other muscles, fascia and tendons at shoulder and upper arm level, left arm, subsequent encounter -S46812S Strain of other muscles, fascia and tendons at shoulder and upper arm level, left arm, sequela -S46819A Strain of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, initial encounter -S46819D Strain of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, subsequent encounter -S46819S Strain of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, sequela -S46821A Laceration of other muscles, fascia and tendons at shoulder and upper arm level, right arm, initial encounter -S46821D Laceration of other muscles, fascia and tendons at shoulder and upper arm level, right arm, subsequent encounter -S46821S Laceration of other muscles, fascia and tendons at shoulder and upper arm level, right arm, sequela -S46822A Laceration of other muscles, fascia and tendons at shoulder and upper arm level, left arm, initial encounter -S46822D Laceration of other muscles, fascia and tendons at shoulder and upper arm level, left arm, subsequent encounter -S46822S Laceration of other muscles, fascia and tendons at shoulder and upper arm level, left arm, sequela -S46829A Laceration of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, initial encounter -S46829D Laceration of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, subsequent encounter -S46829S Laceration of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, sequela -S46891A Other injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, initial encounter -S46891D Other injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, subsequent encounter -S46891S Other injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, sequela -S46892A Other injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, initial encounter -S46892D Other injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, subsequent encounter -S46892S Other injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, sequela -S46899A Other injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, initial encounter -S46899D Other injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, subsequent encounter -S46899S Other injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, sequela -S46901A Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, initial encounter -S46901D Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, subsequent encounter -S46901S Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, sequela -S46902A Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, initial encounter -S46902D Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, subsequent encounter -S46902S Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, sequela -S46909A Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, initial encounter -S46909D Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, subsequent encounter -S46909S Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, sequela -S46911A Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, initial encounter -S46911D Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, subsequent encounter -S46911S Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, sequela -S46912A Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, initial encounter -S46912D Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, subsequent encounter -S46912S Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, sequela -S46919A Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, initial encounter -S46919D Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, subsequent encounter -S46919S Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, sequela -S46921A Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, initial encounter -S46921D Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, subsequent encounter -S46921S Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, sequela -S46922A Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, initial encounter -S46922D Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, subsequent encounter -S46922S Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, sequela -S46929A Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, initial encounter -S46929D Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, subsequent encounter -S46929S Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, sequela -S46991A Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, initial encounter -S46991D Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, subsequent encounter -S46991S Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, sequela -S46992A Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, initial encounter -S46992D Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, subsequent encounter -S46992S Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, sequela -S46999A Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, initial encounter -S46999D Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, subsequent encounter -S46999S Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, sequela -S471XXA Crushing injury of right shoulder and upper arm, initial encounter -S471XXD Crushing injury of right shoulder and upper arm, subsequent encounter -S471XXS Crushing injury of right shoulder and upper arm, sequela -S472XXA Crushing injury of left shoulder and upper arm, initial encounter -S472XXD Crushing injury of left shoulder and upper arm, subsequent encounter -S472XXS Crushing injury of left shoulder and upper arm, sequela -S479XXA Crushing injury of shoulder and upper arm, unspecified arm, initial encounter -S479XXD Crushing injury of shoulder and upper arm, unspecified arm, subsequent encounter -S479XXS Crushing injury of shoulder and upper arm, unspecified arm, sequela -S48011A Complete traumatic amputation at right shoulder joint, initial encounter -S48011D Complete traumatic amputation at right shoulder joint, subsequent encounter -S48011S Complete traumatic amputation at right shoulder joint, sequela -S48012A Complete traumatic amputation at left shoulder joint, initial encounter -S48012D Complete traumatic amputation at left shoulder joint, subsequent encounter -S48012S Complete traumatic amputation at left shoulder joint, sequela -S48019A Complete traumatic amputation at unspecified shoulder joint, initial encounter -S48019D Complete traumatic amputation at unspecified shoulder joint, subsequent encounter -S48019S Complete traumatic amputation at unspecified shoulder joint, sequela -S48021A Partial traumatic amputation at right shoulder joint, initial encounter -S48021D Partial traumatic amputation at right shoulder joint, subsequent encounter -S48021S Partial traumatic amputation at right shoulder joint, sequela -S48022A Partial traumatic amputation at left shoulder joint, initial encounter -S48022D Partial traumatic amputation at left shoulder joint, subsequent encounter -S48022S Partial traumatic amputation at left shoulder joint, sequela -S48029A Partial traumatic amputation at unspecified shoulder joint, initial encounter -S48029D Partial traumatic amputation at unspecified shoulder joint, subsequent encounter -S48029S Partial traumatic amputation at unspecified shoulder joint, sequela -S48111A Complete traumatic amputation at level between right shoulder and elbow, initial encounter -S48111D Complete traumatic amputation at level between right shoulder and elbow, subsequent encounter -S48111S Complete traumatic amputation at level between right shoulder and elbow, sequela -S48112A Complete traumatic amputation at level between left shoulder and elbow, initial encounter -S48112D Complete traumatic amputation at level between left shoulder and elbow, subsequent encounter -S48112S Complete traumatic amputation at level between left shoulder and elbow, sequela -S48119A Complete traumatic amputation at level between unspecified shoulder and elbow, initial encounter -S48119D Complete traumatic amputation at level between unspecified shoulder and elbow, subsequent encounter -S48119S Complete traumatic amputation at level between unspecified shoulder and elbow, sequela -S48121A Partial traumatic amputation at level between right shoulder and elbow, initial encounter -S48121D Partial traumatic amputation at level between right shoulder and elbow, subsequent encounter -S48121S Partial traumatic amputation at level between right shoulder and elbow, sequela -S48122A Partial traumatic amputation at level between left shoulder and elbow, initial encounter -S48122D Partial traumatic amputation at level between left shoulder and elbow, subsequent encounter -S48122S Partial traumatic amputation at level between left shoulder and elbow, sequela -S48129A Partial traumatic amputation at level between unspecified shoulder and elbow, initial encounter -S48129D Partial traumatic amputation at level between unspecified shoulder and elbow, subsequent encounter -S48129S Partial traumatic amputation at level between unspecified shoulder and elbow, sequela -S48911A Complete traumatic amputation of right shoulder and upper arm, level unspecified, initial encounter -S48911D Complete traumatic amputation of right shoulder and upper arm, level unspecified, subsequent encounter -S48911S Complete traumatic amputation of right shoulder and upper arm, level unspecified, sequela -S48912A Complete traumatic amputation of left shoulder and upper arm, level unspecified, initial encounter -S48912D Complete traumatic amputation of left shoulder and upper arm, level unspecified, subsequent encounter -S48912S Complete traumatic amputation of left shoulder and upper arm, level unspecified, sequela -S48919A Complete traumatic amputation of unspecified shoulder and upper arm, level unspecified, initial encounter -S48919D Complete traumatic amputation of unspecified shoulder and upper arm, level unspecified, subsequent encounter -S48919S Complete traumatic amputation of unspecified shoulder and upper arm, level unspecified, sequela -S48921A Partial traumatic amputation of right shoulder and upper arm, level unspecified, initial encounter -S48921D Partial traumatic amputation of right shoulder and upper arm, level unspecified, subsequent encounter -S48921S Partial traumatic amputation of right shoulder and upper arm, level unspecified, sequela -S48922A Partial traumatic amputation of left shoulder and upper arm, level unspecified, initial encounter -S48922D Partial traumatic amputation of left shoulder and upper arm, level unspecified, subsequent encounter -S48922S Partial traumatic amputation of left shoulder and upper arm, level unspecified, sequela -S48929A Partial traumatic amputation of unspecified shoulder and upper arm, level unspecified, initial encounter -S48929D Partial traumatic amputation of unspecified shoulder and upper arm, level unspecified, subsequent encounter -S48929S Partial traumatic amputation of unspecified shoulder and upper arm, level unspecified, sequela -S49001A Unspecified physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49001D Unspecified physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49001G Unspecified physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49001K Unspecified physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49001P Unspecified physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49001S Unspecified physeal fracture of upper end of humerus, right arm, sequela -S49002A Unspecified physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49002D Unspecified physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49002G Unspecified physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49002K Unspecified physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49002P Unspecified physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49002S Unspecified physeal fracture of upper end of humerus, left arm, sequela -S49009A Unspecified physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49009D Unspecified physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49009G Unspecified physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49009K Unspecified physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49009P Unspecified physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49009S Unspecified physeal fracture of upper end of humerus, unspecified arm, sequela -S49011A Salter-Harris Type I physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49011D Salter-Harris Type I physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49011G Salter-Harris Type I physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49011K Salter-Harris Type I physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49011P Salter-Harris Type I physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49011S Salter-Harris Type I physeal fracture of upper end of humerus, right arm, sequela -S49012A Salter-Harris Type I physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49012D Salter-Harris Type I physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49012G Salter-Harris Type I physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49012K Salter-Harris Type I physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49012P Salter-Harris Type I physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49012S Salter-Harris Type I physeal fracture of upper end of humerus, left arm, sequela -S49019A Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49019D Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49019G Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49019K Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49019P Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49019S Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, sequela -S49021A Salter-Harris Type II physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49021D Salter-Harris Type II physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49021G Salter-Harris Type II physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49021K Salter-Harris Type II physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49021P Salter-Harris Type II physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49021S Salter-Harris Type II physeal fracture of upper end of humerus, right arm, sequela -S49022A Salter-Harris Type II physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49022D Salter-Harris Type II physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49022G Salter-Harris Type II physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49022K Salter-Harris Type II physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49022P Salter-Harris Type II physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49022S Salter-Harris Type II physeal fracture of upper end of humerus, left arm, sequela -S49029A Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49029D Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49029G Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49029K Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49029P Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49029S Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, sequela -S49031A Salter Harris Type III physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49031D Salter Harris Type III physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49031G Salter Harris Type III physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49031K Salter Harris Type III physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49031P Salter Harris Type III physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49031S Salter Harris Type III physeal fracture of upper end of humerus, right arm, sequela -S49032A Salter Harris Type III physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49032D Salter Harris Type III physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49032G Salter Harris Type III physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49032K Salter Harris Type III physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49032P Salter Harris Type III physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49032S Salter Harris Type III physeal fracture of upper end of humerus, left arm, sequela -S49039A Salter Harris Type III physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49039D Salter Harris Type III physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49039G Salter Harris Type III physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49039K Salter Harris Type III physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49039P Salter Harris Type III physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49039S Salter Harris Type III physeal fracture of upper end of humerus, unspecified arm, sequela -S49041A Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49041D Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49041G Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49041K Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49041P Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49041S Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, sequela -S49042A Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49042D Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49042G Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49042K Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49042P Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49042S Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, sequela -S49049A Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49049D Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49049G Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49049K Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49049P Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49049S Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, sequela -S49091A Other physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49091D Other physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49091G Other physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49091K Other physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49091P Other physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49091S Other physeal fracture of upper end of humerus, right arm, sequela -S49092A Other physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49092D Other physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49092G Other physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49092K Other physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49092P Other physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49092S Other physeal fracture of upper end of humerus, left arm, sequela -S49099A Other physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49099D Other physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49099G Other physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49099K Other physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49099P Other physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49099S Other physeal fracture of upper end of humerus, unspecified arm, sequela -S49101A Unspecified physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49101D Unspecified physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49101G Unspecified physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49101K Unspecified physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49101P Unspecified physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49101S Unspecified physeal fracture of lower end of humerus, right arm, sequela -S49102A Unspecified physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49102D Unspecified physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49102G Unspecified physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49102K Unspecified physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49102P Unspecified physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49102S Unspecified physeal fracture of lower end of humerus, left arm, sequela -S49109A Unspecified physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49109D Unspecified physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49109G Unspecified physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49109K Unspecified physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49109P Unspecified physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49109S Unspecified physeal fracture of lower end of humerus, unspecified arm, sequela -S49111A Salter-Harris Type I physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49111D Salter-Harris Type I physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49111G Salter-Harris Type I physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49111K Salter-Harris Type I physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49111P Salter-Harris Type I physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49111S Salter-Harris Type I physeal fracture of lower end of humerus, right arm, sequela -S49112A Salter-Harris Type I physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49112D Salter-Harris Type I physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49112G Salter-Harris Type I physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49112K Salter-Harris Type I physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49112P Salter-Harris Type I physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49112S Salter-Harris Type I physeal fracture of lower end of humerus, left arm, sequela -S49119A Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49119D Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49119G Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49119K Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49119P Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49119S Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, sequela -S49121A Salter-Harris Type II physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49121D Salter-Harris Type II physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49121G Salter-Harris Type II physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49121K Salter-Harris Type II physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49121P Salter-Harris Type II physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49121S Salter-Harris Type II physeal fracture of lower end of humerus, right arm, sequela -S49122A Salter-Harris Type II physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49122D Salter-Harris Type II physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49122G Salter-Harris Type II physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49122K Salter-Harris Type II physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49122P Salter-Harris Type II physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49122S Salter-Harris Type II physeal fracture of lower end of humerus, left arm, sequela -S49129A Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49129D Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49129G Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49129K Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49129P Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49129S Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, sequela -S49131A Salter Harris Type III physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49131D Salter Harris Type III physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49131G Salter Harris Type III physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49131K Salter Harris Type III physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49131P Salter Harris Type III physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49131S Salter Harris Type III physeal fracture of lower end of humerus, right arm, sequela -S49132A Salter Harris Type III physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49132D Salter Harris Type III physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49132G Salter Harris Type III physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49132K Salter Harris Type III physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49132P Salter Harris Type III physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49132S Salter Harris Type III physeal fracture of lower end of humerus, left arm, sequela -S49139A Salter Harris Type III physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49139D Salter Harris Type III physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49139G Salter Harris Type III physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49139K Salter Harris Type III physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49139P Salter Harris Type III physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49139S Salter Harris Type III physeal fracture of lower end of humerus, unspecified arm, sequela -S49141A Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49141D Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49141G Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49141K Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49141P Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49141S Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, sequela -S49142A Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49142D Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49142G Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49142K Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49142P Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49142S Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, sequela -S49149A Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49149D Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49149G Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49149K Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49149P Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49149S Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, sequela -S49191A Other physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49191D Other physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49191G Other physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49191K Other physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49191P Other physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49191S Other physeal fracture of lower end of humerus, right arm, sequela -S49192A Other physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49192D Other physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49192G Other physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49192K Other physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49192P Other physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49192S Other physeal fracture of lower end of humerus, left arm, sequela -S49199A Other physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49199D Other physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49199G Other physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49199K Other physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49199P Other physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49199S Other physeal fracture of lower end of humerus, unspecified arm, sequela -S4980XA Other specified injuries of shoulder and upper arm, unspecified arm, initial encounter -S4980XD Other specified injuries of shoulder and upper arm, unspecified arm, subsequent encounter -S4980XS Other specified injuries of shoulder and upper arm, unspecified arm, sequela -S4981XA Other specified injuries of right shoulder and upper arm, initial encounter -S4981XD Other specified injuries of right shoulder and upper arm, subsequent encounter -S4981XS Other specified injuries of right shoulder and upper arm, sequela -S4982XA Other specified injuries of left shoulder and upper arm, initial encounter -S4982XD Other specified injuries of left shoulder and upper arm, subsequent encounter -S4982XS Other specified injuries of left shoulder and upper arm, sequela -S4990XA Unspecified injury of shoulder and upper arm, unspecified arm, initial encounter -S4990XD Unspecified injury of shoulder and upper arm, unspecified arm, subsequent encounter -S4990XS Unspecified injury of shoulder and upper arm, unspecified arm, sequela -S4991XA Unspecified injury of right shoulder and upper arm, initial encounter -S4991XD Unspecified injury of right shoulder and upper arm, subsequent encounter -S4991XS Unspecified injury of right shoulder and upper arm, sequela -S4992XA Unspecified injury of left shoulder and upper arm, initial encounter -S4992XD Unspecified injury of left shoulder and upper arm, subsequent encounter -S4992XS Unspecified injury of left shoulder and upper arm, sequela -S5000XA Contusion of unspecified elbow, initial encounter -S5000XD Contusion of unspecified elbow, subsequent encounter -S5000XS Contusion of unspecified elbow, sequela -S5001XA Contusion of right elbow, initial encounter -S5001XD Contusion of right elbow, subsequent encounter -S5001XS Contusion of right elbow, sequela -S5002XA Contusion of left elbow, initial encounter -S5002XD Contusion of left elbow, subsequent encounter -S5002XS Contusion of left elbow, sequela -S5010XA Contusion of unspecified forearm, initial encounter -S5010XD Contusion of unspecified forearm, subsequent encounter -S5010XS Contusion of unspecified forearm, sequela -S5011XA Contusion of right forearm, initial encounter -S5011XD Contusion of right forearm, subsequent encounter -S5011XS Contusion of right forearm, sequela -S5012XA Contusion of left forearm, initial encounter -S5012XD Contusion of left forearm, subsequent encounter -S5012XS Contusion of left forearm, sequela -S50311A Abrasion of right elbow, initial encounter -S50311D Abrasion of right elbow, subsequent encounter -S50311S Abrasion of right elbow, sequela -S50312A Abrasion of left elbow, initial encounter -S50312D Abrasion of left elbow, subsequent encounter -S50312S Abrasion of left elbow, sequela -S50319A Abrasion of unspecified elbow, initial encounter -S50319D Abrasion of unspecified elbow, subsequent encounter -S50319S Abrasion of unspecified elbow, sequela -S50321A Blister (nonthermal) of right elbow, initial encounter -S50321D Blister (nonthermal) of right elbow, subsequent encounter -S50321S Blister (nonthermal) of right elbow, sequela -S50322A Blister (nonthermal) of left elbow, initial encounter -S50322D Blister (nonthermal) of left elbow, subsequent encounter -S50322S Blister (nonthermal) of left elbow, sequela -S50329A Blister (nonthermal) of unspecified elbow, initial encounter -S50329D Blister (nonthermal) of unspecified elbow, subsequent encounter -S50329S Blister (nonthermal) of unspecified elbow, sequela -S50341A External constriction of right elbow, initial encounter -S50341D External constriction of right elbow, subsequent encounter -S50341S External constriction of right elbow, sequela -S50342A External constriction of left elbow, initial encounter -S50342D External constriction of left elbow, subsequent encounter -S50342S External constriction of left elbow, sequela -S50349A External constriction of unspecified elbow, initial encounter -S50349D External constriction of unspecified elbow, subsequent encounter -S50349S External constriction of unspecified elbow, sequela -S50351A Superficial foreign body of right elbow, initial encounter -S50351D Superficial foreign body of right elbow, subsequent encounter -S50351S Superficial foreign body of right elbow, sequela -S50352A Superficial foreign body of left elbow, initial encounter -S50352D Superficial foreign body of left elbow, subsequent encounter -S50352S Superficial foreign body of left elbow, sequela -S50359A Superficial foreign body of unspecified elbow, initial encounter -S50359D Superficial foreign body of unspecified elbow, subsequent encounter -S50359S Superficial foreign body of unspecified elbow, sequela -S50361A Insect bite (nonvenomous) of right elbow, initial encounter -S50361D Insect bite (nonvenomous) of right elbow, subsequent encounter -S50361S Insect bite (nonvenomous) of right elbow, sequela -S50362A Insect bite (nonvenomous) of left elbow, initial encounter -S50362D Insect bite (nonvenomous) of left elbow, subsequent encounter -S50362S Insect bite (nonvenomous) of left elbow, sequela -S50369A Insect bite (nonvenomous) of unspecified elbow, initial encounter -S50369D Insect bite (nonvenomous) of unspecified elbow, subsequent encounter -S50369S Insect bite (nonvenomous) of unspecified elbow, sequela -S50371A Other superficial bite of right elbow, initial encounter -S50371D Other superficial bite of right elbow, subsequent encounter -S50371S Other superficial bite of right elbow, sequela -S50372A Other superficial bite of left elbow, initial encounter -S50372D Other superficial bite of left elbow, subsequent encounter -S50372S Other superficial bite of left elbow, sequela -S50379A Other superficial bite of unspecified elbow, initial encounter -S50379D Other superficial bite of unspecified elbow, subsequent encounter -S50379S Other superficial bite of unspecified elbow, sequela -S50811A Abrasion of right forearm, initial encounter -S50811D Abrasion of right forearm, subsequent encounter -S50811S Abrasion of right forearm, sequela -S50812A Abrasion of left forearm, initial encounter -S50812D Abrasion of left forearm, subsequent encounter -S50812S Abrasion of left forearm, sequela -S50819A Abrasion of unspecified forearm, initial encounter -S50819D Abrasion of unspecified forearm, subsequent encounter -S50819S Abrasion of unspecified forearm, sequela -S50821A Blister (nonthermal) of right forearm, initial encounter -S50821D Blister (nonthermal) of right forearm, subsequent encounter -S50821S Blister (nonthermal) of right forearm, sequela -S50822A Blister (nonthermal) of left forearm, initial encounter -S50822D Blister (nonthermal) of left forearm, subsequent encounter -S50822S Blister (nonthermal) of left forearm, sequela -S50829A Blister (nonthermal) of unspecified forearm, initial encounter -S50829D Blister (nonthermal) of unspecified forearm, subsequent encounter -S50829S Blister (nonthermal) of unspecified forearm, sequela -S50841A External constriction of right forearm, initial encounter -S50841D External constriction of right forearm, subsequent encounter -S50841S External constriction of right forearm, sequela -S50842A External constriction of left forearm, initial encounter -S50842D External constriction of left forearm, subsequent encounter -S50842S External constriction of left forearm, sequela -S50849A External constriction of unspecified forearm, initial encounter -S50849D External constriction of unspecified forearm, subsequent encounter -S50849S External constriction of unspecified forearm, sequela -S50851A Superficial foreign body of right forearm, initial encounter -S50851D Superficial foreign body of right forearm, subsequent encounter -S50851S Superficial foreign body of right forearm, sequela -S50852A Superficial foreign body of left forearm, initial encounter -S50852D Superficial foreign body of left forearm, subsequent encounter -S50852S Superficial foreign body of left forearm, sequela -S50859A Superficial foreign body of unspecified forearm, initial encounter -S50859D Superficial foreign body of unspecified forearm, subsequent encounter -S50859S Superficial foreign body of unspecified forearm, sequela -S50861A Insect bite (nonvenomous) of right forearm, initial encounter -S50861D Insect bite (nonvenomous) of right forearm, subsequent encounter -S50861S Insect bite (nonvenomous) of right forearm, sequela -S50862A Insect bite (nonvenomous) of left forearm, initial encounter -S50862D Insect bite (nonvenomous) of left forearm, subsequent encounter -S50862S Insect bite (nonvenomous) of left forearm, sequela -S50869A Insect bite (nonvenomous) of unspecified forearm, initial encounter -S50869D Insect bite (nonvenomous) of unspecified forearm, subsequent encounter -S50869S Insect bite (nonvenomous) of unspecified forearm, sequela -S50871A Other superficial bite of right forearm, initial encounter -S50871D Other superficial bite of right forearm, subsequent encounter -S50871S Other superficial bite of right forearm, sequela -S50872A Other superficial bite of left forearm, initial encounter -S50872D Other superficial bite of left forearm, subsequent encounter -S50872S Other superficial bite of left forearm, sequela -S50879A Other superficial bite of unspecified forearm, initial encounter -S50879D Other superficial bite of unspecified forearm, subsequent encounter -S50879S Other superficial bite of unspecified forearm, sequela -S50901A Unspecified superficial injury of right elbow, initial encounter -S50901D Unspecified superficial injury of right elbow, subsequent encounter -S50901S Unspecified superficial injury of right elbow, sequela -S50902A Unspecified superficial injury of left elbow, initial encounter -S50902D Unspecified superficial injury of left elbow, subsequent encounter -S50902S Unspecified superficial injury of left elbow, sequela -S50909A Unspecified superficial injury of unspecified elbow, initial encounter -S50909D Unspecified superficial injury of unspecified elbow, subsequent encounter -S50909S Unspecified superficial injury of unspecified elbow, sequela -S50911A Unspecified superficial injury of right forearm, initial encounter -S50911D Unspecified superficial injury of right forearm, subsequent encounter -S50911S Unspecified superficial injury of right forearm, sequela -S50912A Unspecified superficial injury of left forearm, initial encounter -S50912D Unspecified superficial injury of left forearm, subsequent encounter -S50912S Unspecified superficial injury of left forearm, sequela -S50919A Unspecified superficial injury of unspecified forearm, initial encounter -S50919D Unspecified superficial injury of unspecified forearm, subsequent encounter -S50919S Unspecified superficial injury of unspecified forearm, sequela -S51001A Unspecified open wound of right elbow, initial encounter -S51001D Unspecified open wound of right elbow, subsequent encounter -S51001S Unspecified open wound of right elbow, sequela -S51002A Unspecified open wound of left elbow, initial encounter -S51002D Unspecified open wound of left elbow, subsequent encounter -S51002S Unspecified open wound of left elbow, sequela -S51009A Unspecified open wound of unspecified elbow, initial encounter -S51009D Unspecified open wound of unspecified elbow, subsequent encounter -S51009S Unspecified open wound of unspecified elbow, sequela -S51011A Laceration without foreign body of right elbow, initial encounter -S51011D Laceration without foreign body of right elbow, subsequent encounter -S51011S Laceration without foreign body of right elbow, sequela -S51012A Laceration without foreign body of left elbow, initial encounter -S51012D Laceration without foreign body of left elbow, subsequent encounter -S51012S Laceration without foreign body of left elbow, sequela -S51019A Laceration without foreign body of unspecified elbow, initial encounter -S51019D Laceration without foreign body of unspecified elbow, subsequent encounter -S51019S Laceration without foreign body of unspecified elbow, sequela -S51021A Laceration with foreign body of right elbow, initial encounter -S51021D Laceration with foreign body of right elbow, subsequent encounter -S51021S Laceration with foreign body of right elbow, sequela -S51022A Laceration with foreign body of left elbow, initial encounter -S51022D Laceration with foreign body of left elbow, subsequent encounter -S51022S Laceration with foreign body of left elbow, sequela -S51029A Laceration with foreign body of unspecified elbow, initial encounter -S51029D Laceration with foreign body of unspecified elbow, subsequent encounter -S51029S Laceration with foreign body of unspecified elbow, sequela -S51031A Puncture wound without foreign body of right elbow, initial encounter -S51031D Puncture wound without foreign body of right elbow, subsequent encounter -S51031S Puncture wound without foreign body of right elbow, sequela -S51032A Puncture wound without foreign body of left elbow, initial encounter -S51032D Puncture wound without foreign body of left elbow, subsequent encounter -S51032S Puncture wound without foreign body of left elbow, sequela -S51039A Puncture wound without foreign body of unspecified elbow, initial encounter -S51039D Puncture wound without foreign body of unspecified elbow, subsequent encounter -S51039S Puncture wound without foreign body of unspecified elbow, sequela -S51041A Puncture wound with foreign body of right elbow, initial encounter -S51041D Puncture wound with foreign body of right elbow, subsequent encounter -S51041S Puncture wound with foreign body of right elbow, sequela -S51042A Puncture wound with foreign body of left elbow, initial encounter -S51042D Puncture wound with foreign body of left elbow, subsequent encounter -S51042S Puncture wound with foreign body of left elbow, sequela -S51049A Puncture wound with foreign body of unspecified elbow, initial encounter -S51049D Puncture wound with foreign body of unspecified elbow, subsequent encounter -S51049S Puncture wound with foreign body of unspecified elbow, sequela -S51051A Open bite, right elbow, initial encounter -S51051D Open bite, right elbow, subsequent encounter -S51051S Open bite, right elbow, sequela -S51052A Open bite, left elbow, initial encounter -S51052D Open bite, left elbow, subsequent encounter -S51052S Open bite, left elbow, sequela -S51059A Open bite, unspecified elbow, initial encounter -S51059D Open bite, unspecified elbow, subsequent encounter -S51059S Open bite, unspecified elbow, sequela -S51801A Unspecified open wound of right forearm, initial encounter -S51801D Unspecified open wound of right forearm, subsequent encounter -S51801S Unspecified open wound of right forearm, sequela -S51802A Unspecified open wound of left forearm, initial encounter -S51802D Unspecified open wound of left forearm, subsequent encounter -S51802S Unspecified open wound of left forearm, sequela -S51809A Unspecified open wound of unspecified forearm, initial encounter -S51809D Unspecified open wound of unspecified forearm, subsequent encounter -S51809S Unspecified open wound of unspecified forearm, sequela -S51811A Laceration without foreign body of right forearm, initial encounter -S51811D Laceration without foreign body of right forearm, subsequent encounter -S51811S Laceration without foreign body of right forearm, sequela -S51812A Laceration without foreign body of left forearm, initial encounter -S51812D Laceration without foreign body of left forearm, subsequent encounter -S51812S Laceration without foreign body of left forearm, sequela -S51819A Laceration without foreign body of unspecified forearm, initial encounter -S51819D Laceration without foreign body of unspecified forearm, subsequent encounter -S51819S Laceration without foreign body of unspecified forearm, sequela -S51821A Laceration with foreign body of right forearm, initial encounter -S51821D Laceration with foreign body of right forearm, subsequent encounter -S51821S Laceration with foreign body of right forearm, sequela -S51822A Laceration with foreign body of left forearm, initial encounter -S51822D Laceration with foreign body of left forearm, subsequent encounter -S51822S Laceration with foreign body of left forearm, sequela -S51829A Laceration with foreign body of unspecified forearm, initial encounter -S51829D Laceration with foreign body of unspecified forearm, subsequent encounter -S51829S Laceration with foreign body of unspecified forearm, sequela -S51831A Puncture wound without foreign body of right forearm, initial encounter -S51831D Puncture wound without foreign body of right forearm, subsequent encounter -S51831S Puncture wound without foreign body of right forearm, sequela -S51832A Puncture wound without foreign body of left forearm, initial encounter -S51832D Puncture wound without foreign body of left forearm, subsequent encounter -S51832S Puncture wound without foreign body of left forearm, sequela -S51839A Puncture wound without foreign body of unspecified forearm, initial encounter -S51839D Puncture wound without foreign body of unspecified forearm, subsequent encounter -S51839S Puncture wound without foreign body of unspecified forearm, sequela -S51841A Puncture wound with foreign body of right forearm, initial encounter -S51841D Puncture wound with foreign body of right forearm, subsequent encounter -S51841S Puncture wound with foreign body of right forearm, sequela -S51842A Puncture wound with foreign body of left forearm, initial encounter -S51842D Puncture wound with foreign body of left forearm, subsequent encounter -S51842S Puncture wound with foreign body of left forearm, sequela -S51849A Puncture wound with foreign body of unspecified forearm, initial encounter -S51849D Puncture wound with foreign body of unspecified forearm, subsequent encounter -S51849S Puncture wound with foreign body of unspecified forearm, sequela -S51851A Open bite of right forearm, initial encounter -S51851D Open bite of right forearm, subsequent encounter -S51851S Open bite of right forearm, sequela -S51852A Open bite of left forearm, initial encounter -S51852D Open bite of left forearm, subsequent encounter -S51852S Open bite of left forearm, sequela -S51859A Open bite of unspecified forearm, initial encounter -S51859D Open bite of unspecified forearm, subsequent encounter -S51859S Open bite of unspecified forearm, sequela -S52001A Unspecified fracture of upper end of right ulna, initial encounter for closed fracture -S52001B Unspecified fracture of upper end of right ulna, initial encounter for open fracture type I or II -S52001C Unspecified fracture of upper end of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52001D Unspecified fracture of upper end of right ulna, subsequent encounter for closed fracture with routine healing -S52001E Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52001F Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52001G Unspecified fracture of upper end of right ulna, subsequent encounter for closed fracture with delayed healing -S52001H Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52001J Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52001K Unspecified fracture of upper end of right ulna, subsequent encounter for closed fracture with nonunion -S52001M Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52001N Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52001P Unspecified fracture of upper end of right ulna, subsequent encounter for closed fracture with malunion -S52001Q Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with malunion -S52001R Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52001S Unspecified fracture of upper end of right ulna, sequela -S52002A Unspecified fracture of upper end of left ulna, initial encounter for closed fracture -S52002B Unspecified fracture of upper end of left ulna, initial encounter for open fracture type I or II -S52002C Unspecified fracture of upper end of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52002D Unspecified fracture of upper end of left ulna, subsequent encounter for closed fracture with routine healing -S52002E Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52002F Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52002G Unspecified fracture of upper end of left ulna, subsequent encounter for closed fracture with delayed healing -S52002H Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52002J Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52002K Unspecified fracture of upper end of left ulna, subsequent encounter for closed fracture with nonunion -S52002M Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52002N Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52002P Unspecified fracture of upper end of left ulna, subsequent encounter for closed fracture with malunion -S52002Q Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with malunion -S52002R Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52002S Unspecified fracture of upper end of left ulna, sequela -S52009A Unspecified fracture of upper end of unspecified ulna, initial encounter for closed fracture -S52009B Unspecified fracture of upper end of unspecified ulna, initial encounter for open fracture type I or II -S52009C Unspecified fracture of upper end of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52009D Unspecified fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52009E Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52009F Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52009G Unspecified fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52009H Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52009J Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52009K Unspecified fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52009M Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52009N Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52009P Unspecified fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with malunion -S52009Q Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52009R Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52009S Unspecified fracture of upper end of unspecified ulna, sequela -S52011A Torus fracture of upper end of right ulna, initial encounter for closed fracture -S52011D Torus fracture of upper end of right ulna, subsequent encounter for fracture with routine healing -S52011G Torus fracture of upper end of right ulna, subsequent encounter for fracture with delayed healing -S52011K Torus fracture of upper end of right ulna, subsequent encounter for fracture with nonunion -S52011P Torus fracture of upper end of right ulna, subsequent encounter for fracture with malunion -S52011S Torus fracture of upper end of right ulna, sequela -S52012A Torus fracture of upper end of left ulna, initial encounter for closed fracture -S52012D Torus fracture of upper end of left ulna, subsequent encounter for fracture with routine healing -S52012G Torus fracture of upper end of left ulna, subsequent encounter for fracture with delayed healing -S52012K Torus fracture of upper end of left ulna, subsequent encounter for fracture with nonunion -S52012P Torus fracture of upper end of left ulna, subsequent encounter for fracture with malunion -S52012S Torus fracture of upper end of left ulna, sequela -S52019A Torus fracture of upper end of unspecified ulna, initial encounter for closed fracture -S52019D Torus fracture of upper end of unspecified ulna, subsequent encounter for fracture with routine healing -S52019G Torus fracture of upper end of unspecified ulna, subsequent encounter for fracture with delayed healing -S52019K Torus fracture of upper end of unspecified ulna, subsequent encounter for fracture with nonunion -S52019P Torus fracture of upper end of unspecified ulna, subsequent encounter for fracture with malunion -S52019S Torus fracture of upper end of unspecified ulna, sequela -S52021A Displaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for closed fracture -S52021B Displaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for open fracture type I or II -S52021C Displaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52021D Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with routine healing -S52021E Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52021F Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52021G Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with delayed healing -S52021H Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52021J Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52021K Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with nonunion -S52021M Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52021N Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52021P Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with malunion -S52021Q Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with malunion -S52021R Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52021S Displaced fracture of olecranon process without intraarticular extension of right ulna, sequela -S52022A Displaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for closed fracture -S52022B Displaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for open fracture type I or II -S52022C Displaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52022D Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with routine healing -S52022E Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52022F Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52022G Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with delayed healing -S52022H Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52022J Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52022K Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with nonunion -S52022M Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52022N Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52022P Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with malunion -S52022Q Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with malunion -S52022R Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52022S Displaced fracture of olecranon process without intraarticular extension of left ulna, sequela -S52023A Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for closed fracture -S52023B Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for open fracture type I or II -S52023C Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52023D Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52023E Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52023F Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52023G Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52023H Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52023J Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52023K Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52023M Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52023N Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52023P Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with malunion -S52023Q Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52023R Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52023S Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, sequela -S52024A Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for closed fracture -S52024B Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for open fracture type I or II -S52024C Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52024D Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with routine healing -S52024E Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52024F Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52024G Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with delayed healing -S52024H Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52024J Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52024K Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with nonunion -S52024M Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52024N Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52024P Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with malunion -S52024Q Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with malunion -S52024R Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52024S Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, sequela -S52025A Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for closed fracture -S52025B Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for open fracture type I or II -S52025C Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52025D Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with routine healing -S52025E Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52025F Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52025G Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with delayed healing -S52025H Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52025J Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52025K Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with nonunion -S52025M Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52025N Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52025P Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with malunion -S52025Q Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with malunion -S52025R Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52025S Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, sequela -S52026A Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for closed fracture -S52026B Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for open fracture type I or II -S52026C Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52026D Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52026E Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52026F Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52026G Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52026H Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52026J Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52026K Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52026M Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52026N Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52026P Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with malunion -S52026Q Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52026R Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52026S Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, sequela -S52031A Displaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for closed fracture -S52031B Displaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for open fracture type I or II -S52031C Displaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52031D Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with routine healing -S52031E Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52031F Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52031G Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with delayed healing -S52031H Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52031J Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52031K Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with nonunion -S52031M Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52031N Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52031P Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with malunion -S52031Q Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with malunion -S52031R Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52031S Displaced fracture of olecranon process with intraarticular extension of right ulna, sequela -S52032A Displaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for closed fracture -S52032B Displaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for open fracture type I or II -S52032C Displaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52032D Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with routine healing -S52032E Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52032F Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52032G Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with delayed healing -S52032H Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52032J Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52032K Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with nonunion -S52032M Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52032N Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52032P Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with malunion -S52032Q Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with malunion -S52032R Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52032S Displaced fracture of olecranon process with intraarticular extension of left ulna, sequela -S52033A Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for closed fracture -S52033B Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for open fracture type I or II -S52033C Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52033D Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52033E Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52033F Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52033G Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52033H Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52033J Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52033K Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52033M Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52033N Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52033P Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with malunion -S52033Q Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52033R Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52033S Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, sequela -S52034A Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for closed fracture -S52034B Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for open fracture type I or II -S52034C Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52034D Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with routine healing -S52034E Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52034F Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52034G Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with delayed healing -S52034H Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52034J Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52034K Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with nonunion -S52034M Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52034N Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52034P Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with malunion -S52034Q Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with malunion -S52034R Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52034S Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, sequela -S52035A Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for closed fracture -S52035B Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for open fracture type I or II -S52035C Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52035D Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with routine healing -S52035E Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52035F Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52035G Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with delayed healing -S52035H Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52035J Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52035K Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with nonunion -S52035M Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52035N Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52035P Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with malunion -S52035Q Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with malunion -S52035R Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52035S Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, sequela -S52036A Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for closed fracture -S52036B Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for open fracture type I or II -S52036C Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52036D Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52036E Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52036F Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52036G Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52036H Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52036J Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52036K Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52036M Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52036N Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52036P Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with malunion -S52036Q Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52036R Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52036S Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, sequela -S52041A Displaced fracture of coronoid process of right ulna, initial encounter for closed fracture -S52041B Displaced fracture of coronoid process of right ulna, initial encounter for open fracture type I or II -S52041C Displaced fracture of coronoid process of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52041D Displaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with routine healing -S52041E Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52041F Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52041G Displaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with delayed healing -S52041H Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52041J Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52041K Displaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with nonunion -S52041M Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52041N Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52041P Displaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with malunion -S52041Q Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with malunion -S52041R Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52041S Displaced fracture of coronoid process of right ulna, sequela -S52042A Displaced fracture of coronoid process of left ulna, initial encounter for closed fracture -S52042B Displaced fracture of coronoid process of left ulna, initial encounter for open fracture type I or II -S52042C Displaced fracture of coronoid process of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52042D Displaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with routine healing -S52042E Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52042F Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52042G Displaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with delayed healing -S52042H Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52042J Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52042K Displaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with nonunion -S52042M Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52042N Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52042P Displaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with malunion -S52042Q Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with malunion -S52042R Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52042S Displaced fracture of coronoid process of left ulna, sequela -S52043A Displaced fracture of coronoid process of unspecified ulna, initial encounter for closed fracture -S52043B Displaced fracture of coronoid process of unspecified ulna, initial encounter for open fracture type I or II -S52043C Displaced fracture of coronoid process of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52043D Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52043E Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52043F Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52043G Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52043H Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52043J Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52043K Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52043M Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52043N Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52043P Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with malunion -S52043Q Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52043R Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52043S Displaced fracture of coronoid process of unspecified ulna, sequela -S52044A Nondisplaced fracture of coronoid process of right ulna, initial encounter for closed fracture -S52044B Nondisplaced fracture of coronoid process of right ulna, initial encounter for open fracture type I or II -S52044C Nondisplaced fracture of coronoid process of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52044D Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with routine healing -S52044E Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52044F Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52044G Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with delayed healing -S52044H Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52044J Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52044K Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with nonunion -S52044M Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52044N Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52044P Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with malunion -S52044Q Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with malunion -S52044R Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52044S Nondisplaced fracture of coronoid process of right ulna, sequela -S52045A Nondisplaced fracture of coronoid process of left ulna, initial encounter for closed fracture -S52045B Nondisplaced fracture of coronoid process of left ulna, initial encounter for open fracture type I or II -S52045C Nondisplaced fracture of coronoid process of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52045D Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with routine healing -S52045E Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52045F Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52045G Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with delayed healing -S52045H Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52045J Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52045K Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with nonunion -S52045M Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52045N Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52045P Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with malunion -S52045Q Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with malunion -S52045R Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52045S Nondisplaced fracture of coronoid process of left ulna, sequela -S52046A Nondisplaced fracture of coronoid process of unspecified ulna, initial encounter for closed fracture -S52046B Nondisplaced fracture of coronoid process of unspecified ulna, initial encounter for open fracture type I or II -S52046C Nondisplaced fracture of coronoid process of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52046D Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52046E Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52046F Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52046G Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52046H Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52046J Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52046K Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52046M Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52046N Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52046P Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with malunion -S52046Q Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52046R Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52046S Nondisplaced fracture of coronoid process of unspecified ulna, sequela -S52091A Other fracture of upper end of right ulna, initial encounter for closed fracture -S52091B Other fracture of upper end of right ulna, initial encounter for open fracture type I or II -S52091C Other fracture of upper end of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52091D Other fracture of upper end of right ulna, subsequent encounter for closed fracture with routine healing -S52091E Other fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52091F Other fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52091G Other fracture of upper end of right ulna, subsequent encounter for closed fracture with delayed healing -S52091H Other fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52091J Other fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52091K Other fracture of upper end of right ulna, subsequent encounter for closed fracture with nonunion -S52091M Other fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52091N Other fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52091P Other fracture of upper end of right ulna, subsequent encounter for closed fracture with malunion -S52091Q Other fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with malunion -S52091R Other fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52091S Other fracture of upper end of right ulna, sequela -S52092A Other fracture of upper end of left ulna, initial encounter for closed fracture -S52092B Other fracture of upper end of left ulna, initial encounter for open fracture type I or II -S52092C Other fracture of upper end of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52092D Other fracture of upper end of left ulna, subsequent encounter for closed fracture with routine healing -S52092E Other fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52092F Other fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52092G Other fracture of upper end of left ulna, subsequent encounter for closed fracture with delayed healing -S52092H Other fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52092J Other fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52092K Other fracture of upper end of left ulna, subsequent encounter for closed fracture with nonunion -S52092M Other fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52092N Other fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52092P Other fracture of upper end of left ulna, subsequent encounter for closed fracture with malunion -S52092Q Other fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with malunion -S52092R Other fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52092S Other fracture of upper end of left ulna, sequela -S52099A Other fracture of upper end of unspecified ulna, initial encounter for closed fracture -S52099B Other fracture of upper end of unspecified ulna, initial encounter for open fracture type I or II -S52099C Other fracture of upper end of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52099D Other fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52099E Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52099F Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52099G Other fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52099H Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52099J Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52099K Other fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52099M Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52099N Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52099P Other fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with malunion -S52099Q Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52099R Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52099S Other fracture of upper end of unspecified ulna, sequela -S52101A Unspecified fracture of upper end of right radius, initial encounter for closed fracture -S52101B Unspecified fracture of upper end of right radius, initial encounter for open fracture type I or II -S52101C Unspecified fracture of upper end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52101D Unspecified fracture of upper end of right radius, subsequent encounter for closed fracture with routine healing -S52101E Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52101F Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52101G Unspecified fracture of upper end of right radius, subsequent encounter for closed fracture with delayed healing -S52101H Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52101J Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52101K Unspecified fracture of upper end of right radius, subsequent encounter for closed fracture with nonunion -S52101M Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52101N Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52101P Unspecified fracture of upper end of right radius, subsequent encounter for closed fracture with malunion -S52101Q Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type I or II with malunion -S52101R Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52101S Unspecified fracture of upper end of right radius, sequela -S52102A Unspecified fracture of upper end of left radius, initial encounter for closed fracture -S52102B Unspecified fracture of upper end of left radius, initial encounter for open fracture type I or II -S52102C Unspecified fracture of upper end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52102D Unspecified fracture of upper end of left radius, subsequent encounter for closed fracture with routine healing -S52102E Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52102F Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52102G Unspecified fracture of upper end of left radius, subsequent encounter for closed fracture with delayed healing -S52102H Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52102J Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52102K Unspecified fracture of upper end of left radius, subsequent encounter for closed fracture with nonunion -S52102M Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52102N Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52102P Unspecified fracture of upper end of left radius, subsequent encounter for closed fracture with malunion -S52102Q Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type I or II with malunion -S52102R Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52102S Unspecified fracture of upper end of left radius, sequela -S52109A Unspecified fracture of upper end of unspecified radius, initial encounter for closed fracture -S52109B Unspecified fracture of upper end of unspecified radius, initial encounter for open fracture type I or II -S52109C Unspecified fracture of upper end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52109D Unspecified fracture of upper end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52109E Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52109F Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52109G Unspecified fracture of upper end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52109H Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52109J Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52109K Unspecified fracture of upper end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52109M Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52109N Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52109P Unspecified fracture of upper end of unspecified radius, subsequent encounter for closed fracture with malunion -S52109Q Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52109R Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52109S Unspecified fracture of upper end of unspecified radius, sequela -S52111A Torus fracture of upper end of right radius, initial encounter for closed fracture -S52111D Torus fracture of upper end of right radius, subsequent encounter for fracture with routine healing -S52111G Torus fracture of upper end of right radius, subsequent encounter for fracture with delayed healing -S52111K Torus fracture of upper end of right radius, subsequent encounter for fracture with nonunion -S52111P Torus fracture of upper end of right radius, subsequent encounter for fracture with malunion -S52111S Torus fracture of upper end of right radius, sequela -S52112A Torus fracture of upper end of left radius, initial encounter for closed fracture -S52112D Torus fracture of upper end of left radius, subsequent encounter for fracture with routine healing -S52112G Torus fracture of upper end of left radius, subsequent encounter for fracture with delayed healing -S52112K Torus fracture of upper end of left radius, subsequent encounter for fracture with nonunion -S52112P Torus fracture of upper end of left radius, subsequent encounter for fracture with malunion -S52112S Torus fracture of upper end of left radius, sequela -S52119A Torus fracture of upper end of unspecified radius, initial encounter for closed fracture -S52119D Torus fracture of upper end of unspecified radius, subsequent encounter for fracture with routine healing -S52119G Torus fracture of upper end of unspecified radius, subsequent encounter for fracture with delayed healing -S52119K Torus fracture of upper end of unspecified radius, subsequent encounter for fracture with nonunion -S52119P Torus fracture of upper end of unspecified radius, subsequent encounter for fracture with malunion -S52119S Torus fracture of upper end of unspecified radius, sequela -S52121A Displaced fracture of head of right radius, initial encounter for closed fracture -S52121B Displaced fracture of head of right radius, initial encounter for open fracture type I or II -S52121C Displaced fracture of head of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52121D Displaced fracture of head of right radius, subsequent encounter for closed fracture with routine healing -S52121E Displaced fracture of head of right radius, subsequent encounter for open fracture type I or II with routine healing -S52121F Displaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52121G Displaced fracture of head of right radius, subsequent encounter for closed fracture with delayed healing -S52121H Displaced fracture of head of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52121J Displaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52121K Displaced fracture of head of right radius, subsequent encounter for closed fracture with nonunion -S52121M Displaced fracture of head of right radius, subsequent encounter for open fracture type I or II with nonunion -S52121N Displaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52121P Displaced fracture of head of right radius, subsequent encounter for closed fracture with malunion -S52121Q Displaced fracture of head of right radius, subsequent encounter for open fracture type I or II with malunion -S52121R Displaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52121S Displaced fracture of head of right radius, sequela -S52122A Displaced fracture of head of left radius, initial encounter for closed fracture -S52122B Displaced fracture of head of left radius, initial encounter for open fracture type I or II -S52122C Displaced fracture of head of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52122D Displaced fracture of head of left radius, subsequent encounter for closed fracture with routine healing -S52122E Displaced fracture of head of left radius, subsequent encounter for open fracture type I or II with routine healing -S52122F Displaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52122G Displaced fracture of head of left radius, subsequent encounter for closed fracture with delayed healing -S52122H Displaced fracture of head of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52122J Displaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52122K Displaced fracture of head of left radius, subsequent encounter for closed fracture with nonunion -S52122M Displaced fracture of head of left radius, subsequent encounter for open fracture type I or II with nonunion -S52122N Displaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52122P Displaced fracture of head of left radius, subsequent encounter for closed fracture with malunion -S52122Q Displaced fracture of head of left radius, subsequent encounter for open fracture type I or II with malunion -S52122R Displaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52122S Displaced fracture of head of left radius, sequela -S52123A Displaced fracture of head of unspecified radius, initial encounter for closed fracture -S52123B Displaced fracture of head of unspecified radius, initial encounter for open fracture type I or II -S52123C Displaced fracture of head of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52123D Displaced fracture of head of unspecified radius, subsequent encounter for closed fracture with routine healing -S52123E Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52123F Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52123G Displaced fracture of head of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52123H Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52123J Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52123K Displaced fracture of head of unspecified radius, subsequent encounter for closed fracture with nonunion -S52123M Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52123N Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52123P Displaced fracture of head of unspecified radius, subsequent encounter for closed fracture with malunion -S52123Q Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52123R Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52123S Displaced fracture of head of unspecified radius, sequela -S52124A Nondisplaced fracture of head of right radius, initial encounter for closed fracture -S52124B Nondisplaced fracture of head of right radius, initial encounter for open fracture type I or II -S52124C Nondisplaced fracture of head of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52124D Nondisplaced fracture of head of right radius, subsequent encounter for closed fracture with routine healing -S52124E Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type I or II with routine healing -S52124F Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52124G Nondisplaced fracture of head of right radius, subsequent encounter for closed fracture with delayed healing -S52124H Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52124J Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52124K Nondisplaced fracture of head of right radius, subsequent encounter for closed fracture with nonunion -S52124M Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type I or II with nonunion -S52124N Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52124P Nondisplaced fracture of head of right radius, subsequent encounter for closed fracture with malunion -S52124Q Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type I or II with malunion -S52124R Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52124S Nondisplaced fracture of head of right radius, sequela -S52125A Nondisplaced fracture of head of left radius, initial encounter for closed fracture -S52125B Nondisplaced fracture of head of left radius, initial encounter for open fracture type I or II -S52125C Nondisplaced fracture of head of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52125D Nondisplaced fracture of head of left radius, subsequent encounter for closed fracture with routine healing -S52125E Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type I or II with routine healing -S52125F Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52125G Nondisplaced fracture of head of left radius, subsequent encounter for closed fracture with delayed healing -S52125H Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52125J Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52125K Nondisplaced fracture of head of left radius, subsequent encounter for closed fracture with nonunion -S52125M Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type I or II with nonunion -S52125N Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52125P Nondisplaced fracture of head of left radius, subsequent encounter for closed fracture with malunion -S52125Q Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type I or II with malunion -S52125R Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52125S Nondisplaced fracture of head of left radius, sequela -S52126A Nondisplaced fracture of head of unspecified radius, initial encounter for closed fracture -S52126B Nondisplaced fracture of head of unspecified radius, initial encounter for open fracture type I or II -S52126C Nondisplaced fracture of head of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52126D Nondisplaced fracture of head of unspecified radius, subsequent encounter for closed fracture with routine healing -S52126E Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52126F Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52126G Nondisplaced fracture of head of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52126H Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52126J Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52126K Nondisplaced fracture of head of unspecified radius, subsequent encounter for closed fracture with nonunion -S52126M Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52126N Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52126P Nondisplaced fracture of head of unspecified radius, subsequent encounter for closed fracture with malunion -S52126Q Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52126R Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52126S Nondisplaced fracture of head of unspecified radius, sequela -S52131A Displaced fracture of neck of right radius, initial encounter for closed fracture -S52131B Displaced fracture of neck of right radius, initial encounter for open fracture type I or II -S52131C Displaced fracture of neck of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52131D Displaced fracture of neck of right radius, subsequent encounter for closed fracture with routine healing -S52131E Displaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with routine healing -S52131F Displaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52131G Displaced fracture of neck of right radius, subsequent encounter for closed fracture with delayed healing -S52131H Displaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52131J Displaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52131K Displaced fracture of neck of right radius, subsequent encounter for closed fracture with nonunion -S52131M Displaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with nonunion -S52131N Displaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52131P Displaced fracture of neck of right radius, subsequent encounter for closed fracture with malunion -S52131Q Displaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with malunion -S52131R Displaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52131S Displaced fracture of neck of right radius, sequela -S52132A Displaced fracture of neck of left radius, initial encounter for closed fracture -S52132B Displaced fracture of neck of left radius, initial encounter for open fracture type I or II -S52132C Displaced fracture of neck of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52132D Displaced fracture of neck of left radius, subsequent encounter for closed fracture with routine healing -S52132E Displaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with routine healing -S52132F Displaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52132G Displaced fracture of neck of left radius, subsequent encounter for closed fracture with delayed healing -S52132H Displaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52132J Displaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52132K Displaced fracture of neck of left radius, subsequent encounter for closed fracture with nonunion -S52132M Displaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with nonunion -S52132N Displaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52132P Displaced fracture of neck of left radius, subsequent encounter for closed fracture with malunion -S52132Q Displaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with malunion -S52132R Displaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52132S Displaced fracture of neck of left radius, sequela -S52133A Displaced fracture of neck of unspecified radius, initial encounter for closed fracture -S52133B Displaced fracture of neck of unspecified radius, initial encounter for open fracture type I or II -S52133C Displaced fracture of neck of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52133D Displaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with routine healing -S52133E Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52133F Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52133G Displaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52133H Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52133J Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52133K Displaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with nonunion -S52133M Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52133N Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52133P Displaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with malunion -S52133Q Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52133R Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52133S Displaced fracture of neck of unspecified radius, sequela -S52134A Nondisplaced fracture of neck of right radius, initial encounter for closed fracture -S52134B Nondisplaced fracture of neck of right radius, initial encounter for open fracture type I or II -S52134C Nondisplaced fracture of neck of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52134D Nondisplaced fracture of neck of right radius, subsequent encounter for closed fracture with routine healing -S52134E Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with routine healing -S52134F Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52134G Nondisplaced fracture of neck of right radius, subsequent encounter for closed fracture with delayed healing -S52134H Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52134J Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52134K Nondisplaced fracture of neck of right radius, subsequent encounter for closed fracture with nonunion -S52134M Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with nonunion -S52134N Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52134P Nondisplaced fracture of neck of right radius, subsequent encounter for closed fracture with malunion -S52134Q Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with malunion -S52134R Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52134S Nondisplaced fracture of neck of right radius, sequela -S52135A Nondisplaced fracture of neck of left radius, initial encounter for closed fracture -S52135B Nondisplaced fracture of neck of left radius, initial encounter for open fracture type I or II -S52135C Nondisplaced fracture of neck of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52135D Nondisplaced fracture of neck of left radius, subsequent encounter for closed fracture with routine healing -S52135E Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with routine healing -S52135F Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52135G Nondisplaced fracture of neck of left radius, subsequent encounter for closed fracture with delayed healing -S52135H Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52135J Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52135K Nondisplaced fracture of neck of left radius, subsequent encounter for closed fracture with nonunion -S52135M Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with nonunion -S52135N Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52135P Nondisplaced fracture of neck of left radius, subsequent encounter for closed fracture with malunion -S52135Q Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with malunion -S52135R Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52135S Nondisplaced fracture of neck of left radius, sequela -S52136A Nondisplaced fracture of neck of unspecified radius, initial encounter for closed fracture -S52136B Nondisplaced fracture of neck of unspecified radius, initial encounter for open fracture type I or II -S52136C Nondisplaced fracture of neck of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52136D Nondisplaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with routine healing -S52136E Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52136F Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52136G Nondisplaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52136H Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52136J Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52136K Nondisplaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with nonunion -S52136M Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52136N Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52136P Nondisplaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with malunion -S52136Q Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52136R Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52136S Nondisplaced fracture of neck of unspecified radius, sequela -S52181A Other fracture of upper end of right radius, initial encounter for closed fracture -S52181B Other fracture of upper end of right radius, initial encounter for open fracture type I or II -S52181C Other fracture of upper end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52181D Other fracture of upper end of right radius, subsequent encounter for closed fracture with routine healing -S52181E Other fracture of upper end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52181F Other fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52181G Other fracture of upper end of right radius, subsequent encounter for closed fracture with delayed healing -S52181H Other fracture of upper end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52181J Other fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52181K Other fracture of upper end of right radius, subsequent encounter for closed fracture with nonunion -S52181M Other fracture of upper end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52181N Other fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52181P Other fracture of upper end of right radius, subsequent encounter for closed fracture with malunion -S52181Q Other fracture of upper end of right radius, subsequent encounter for open fracture type I or II with malunion -S52181R Other fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52181S Other fracture of upper end of right radius, sequela -S52182A Other fracture of upper end of left radius, initial encounter for closed fracture -S52182B Other fracture of upper end of left radius, initial encounter for open fracture type I or II -S52182C Other fracture of upper end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52182D Other fracture of upper end of left radius, subsequent encounter for closed fracture with routine healing -S52182E Other fracture of upper end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52182F Other fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52182G Other fracture of upper end of left radius, subsequent encounter for closed fracture with delayed healing -S52182H Other fracture of upper end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52182J Other fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52182K Other fracture of upper end of left radius, subsequent encounter for closed fracture with nonunion -S52182M Other fracture of upper end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52182N Other fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52182P Other fracture of upper end of left radius, subsequent encounter for closed fracture with malunion -S52182Q Other fracture of upper end of left radius, subsequent encounter for open fracture type I or II with malunion -S52182R Other fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52182S Other fracture of upper end of left radius, sequela -S52189A Other fracture of upper end of unspecified radius, initial encounter for closed fracture -S52189B Other fracture of upper end of unspecified radius, initial encounter for open fracture type I or II -S52189C Other fracture of upper end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52189D Other fracture of upper end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52189E Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52189F Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52189G Other fracture of upper end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52189H Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52189J Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52189K Other fracture of upper end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52189M Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52189N Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52189P Other fracture of upper end of unspecified radius, subsequent encounter for closed fracture with malunion -S52189Q Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52189R Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52189S Other fracture of upper end of unspecified radius, sequela -S52201A Unspecified fracture of shaft of right ulna, initial encounter for closed fracture -S52201B Unspecified fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52201C Unspecified fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52201D Unspecified fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52201E Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52201F Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52201G Unspecified fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52201H Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52201J Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52201K Unspecified fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52201M Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52201N Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52201P Unspecified fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52201Q Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52201R Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52201S Unspecified fracture of shaft of right ulna, sequela -S52202A Unspecified fracture of shaft of left ulna, initial encounter for closed fracture -S52202B Unspecified fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52202C Unspecified fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52202D Unspecified fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52202E Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52202F Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52202G Unspecified fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52202H Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52202J Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52202K Unspecified fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52202M Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52202N Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52202P Unspecified fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52202Q Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52202R Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52202S Unspecified fracture of shaft of left ulna, sequela -S52209A Unspecified fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52209B Unspecified fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52209C Unspecified fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52209D Unspecified fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52209E Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52209F Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52209G Unspecified fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52209H Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52209J Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52209K Unspecified fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52209M Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52209N Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52209P Unspecified fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52209Q Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52209R Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52209S Unspecified fracture of shaft of unspecified ulna, sequela -S52211A Greenstick fracture of shaft of right ulna, initial encounter for closed fracture -S52211D Greenstick fracture of shaft of right ulna, subsequent encounter for fracture with routine healing -S52211G Greenstick fracture of shaft of right ulna, subsequent encounter for fracture with delayed healing -S52211K Greenstick fracture of shaft of right ulna, subsequent encounter for fracture with nonunion -S52211P Greenstick fracture of shaft of right ulna, subsequent encounter for fracture with malunion -S52211S Greenstick fracture of shaft of right ulna, sequela -S52212A Greenstick fracture of shaft of left ulna, initial encounter for closed fracture -S52212D Greenstick fracture of shaft of left ulna, subsequent encounter for fracture with routine healing -S52212G Greenstick fracture of shaft of left ulna, subsequent encounter for fracture with delayed healing -S52212K Greenstick fracture of shaft of left ulna, subsequent encounter for fracture with nonunion -S52212P Greenstick fracture of shaft of left ulna, subsequent encounter for fracture with malunion -S52212S Greenstick fracture of shaft of left ulna, sequela -S52219A Greenstick fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52219D Greenstick fracture of shaft of unspecified ulna, subsequent encounter for fracture with routine healing -S52219G Greenstick fracture of shaft of unspecified ulna, subsequent encounter for fracture with delayed healing -S52219K Greenstick fracture of shaft of unspecified ulna, subsequent encounter for fracture with nonunion -S52219P Greenstick fracture of shaft of unspecified ulna, subsequent encounter for fracture with malunion -S52219S Greenstick fracture of shaft of unspecified ulna, sequela -S52221A Displaced transverse fracture of shaft of right ulna, initial encounter for closed fracture -S52221B Displaced transverse fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52221C Displaced transverse fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52221D Displaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52221E Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52221F Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52221G Displaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52221H Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52221J Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52221K Displaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52221M Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52221N Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52221P Displaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52221Q Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52221R Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52221S Displaced transverse fracture of shaft of right ulna, sequela -S52222A Displaced transverse fracture of shaft of left ulna, initial encounter for closed fracture -S52222B Displaced transverse fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52222C Displaced transverse fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52222D Displaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52222E Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52222F Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52222G Displaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52222H Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52222J Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52222K Displaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52222M Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52222N Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52222P Displaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52222Q Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52222R Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52222S Displaced transverse fracture of shaft of left ulna, sequela -S52223A Displaced transverse fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52223B Displaced transverse fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52223C Displaced transverse fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52223D Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52223E Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52223F Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52223G Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52223H Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52223J Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52223K Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52223M Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52223N Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52223P Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52223Q Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52223R Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52223S Displaced transverse fracture of shaft of unspecified ulna, sequela -S52224A Nondisplaced transverse fracture of shaft of right ulna, initial encounter for closed fracture -S52224B Nondisplaced transverse fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52224C Nondisplaced transverse fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52224D Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52224E Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52224F Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52224G Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52224H Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52224J Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52224K Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52224M Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52224N Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52224P Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52224Q Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52224R Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52224S Nondisplaced transverse fracture of shaft of right ulna, sequela -S52225A Nondisplaced transverse fracture of shaft of left ulna, initial encounter for closed fracture -S52225B Nondisplaced transverse fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52225C Nondisplaced transverse fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52225D Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52225E Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52225F Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52225G Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52225H Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52225J Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52225K Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52225M Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52225N Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52225P Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52225Q Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52225R Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52225S Nondisplaced transverse fracture of shaft of left ulna, sequela -S52226A Nondisplaced transverse fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52226B Nondisplaced transverse fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52226C Nondisplaced transverse fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52226D Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52226E Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52226F Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52226G Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52226H Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52226J Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52226K Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52226M Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52226N Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52226P Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52226Q Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52226R Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52226S Nondisplaced transverse fracture of shaft of unspecified ulna, sequela -S52231A Displaced oblique fracture of shaft of right ulna, initial encounter for closed fracture -S52231B Displaced oblique fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52231C Displaced oblique fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52231D Displaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52231E Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52231F Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52231G Displaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52231H Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52231J Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52231K Displaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52231M Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52231N Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52231P Displaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52231Q Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52231R Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52231S Displaced oblique fracture of shaft of right ulna, sequela -S52232A Displaced oblique fracture of shaft of left ulna, initial encounter for closed fracture -S52232B Displaced oblique fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52232C Displaced oblique fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52232D Displaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52232E Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52232F Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52232G Displaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52232H Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52232J Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52232K Displaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52232M Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52232N Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52232P Displaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52232Q Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52232R Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52232S Displaced oblique fracture of shaft of left ulna, sequela -S52233A Displaced oblique fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52233B Displaced oblique fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52233C Displaced oblique fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52233D Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52233E Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52233F Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52233G Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52233H Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52233J Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52233K Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52233M Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52233N Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52233P Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52233Q Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52233R Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52233S Displaced oblique fracture of shaft of unspecified ulna, sequela -S52234A Nondisplaced oblique fracture of shaft of right ulna, initial encounter for closed fracture -S52234B Nondisplaced oblique fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52234C Nondisplaced oblique fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52234D Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52234E Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52234F Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52234G Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52234H Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52234J Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52234K Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52234M Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52234N Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52234P Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52234Q Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52234R Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52234S Nondisplaced oblique fracture of shaft of right ulna, sequela -S52235A Nondisplaced oblique fracture of shaft of left ulna, initial encounter for closed fracture -S52235B Nondisplaced oblique fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52235C Nondisplaced oblique fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52235D Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52235E Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52235F Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52235G Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52235H Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52235J Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52235K Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52235M Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52235N Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52235P Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52235Q Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52235R Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52235S Nondisplaced oblique fracture of shaft of left ulna, sequela -S52236A Nondisplaced oblique fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52236B Nondisplaced oblique fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52236C Nondisplaced oblique fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52236D Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52236E Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52236F Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52236G Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52236H Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52236J Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52236K Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52236M Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52236N Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52236P Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52236Q Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52236R Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52236S Nondisplaced oblique fracture of shaft of unspecified ulna, sequela -S52241A Displaced spiral fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52241B Displaced spiral fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52241C Displaced spiral fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52241D Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52241E Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52241F Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52241G Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52241H Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52241J Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52241K Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52241M Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52241N Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52241P Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52241Q Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52241R Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52241S Displaced spiral fracture of shaft of ulna, right arm, sequela -S52242A Displaced spiral fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52242B Displaced spiral fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52242C Displaced spiral fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52242D Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52242E Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52242F Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52242G Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52242H Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52242J Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52242K Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52242M Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52242N Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52242P Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52242Q Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52242R Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52242S Displaced spiral fracture of shaft of ulna, left arm, sequela -S52243A Displaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52243B Displaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52243C Displaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52243D Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52243E Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52243F Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52243G Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52243H Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52243J Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52243K Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52243M Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52243N Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52243P Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52243Q Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52243R Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52243S Displaced spiral fracture of shaft of ulna, unspecified arm, sequela -S52244A Nondisplaced spiral fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52244B Nondisplaced spiral fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52244C Nondisplaced spiral fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52244D Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52244E Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52244F Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52244G Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52244H Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52244J Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52244K Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52244M Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52244N Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52244P Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52244Q Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52244R Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52244S Nondisplaced spiral fracture of shaft of ulna, right arm, sequela -S52245A Nondisplaced spiral fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52245B Nondisplaced spiral fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52245C Nondisplaced spiral fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52245D Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52245E Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52245F Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52245G Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52245H Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52245J Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52245K Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52245M Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52245N Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52245P Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52245Q Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52245R Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52245S Nondisplaced spiral fracture of shaft of ulna, left arm, sequela -S52246A Nondisplaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52246B Nondisplaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52246C Nondisplaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52246D Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52246E Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52246F Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52246G Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52246H Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52246J Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52246K Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52246M Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52246N Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52246P Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52246Q Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52246R Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52246S Nondisplaced spiral fracture of shaft of ulna, unspecified arm, sequela -S52251A Displaced comminuted fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52251B Displaced comminuted fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52251C Displaced comminuted fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52251D Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52251E Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52251F Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52251G Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52251H Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52251J Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52251K Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52251M Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52251N Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52251P Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52251Q Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52251R Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52251S Displaced comminuted fracture of shaft of ulna, right arm, sequela -S52252A Displaced comminuted fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52252B Displaced comminuted fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52252C Displaced comminuted fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52252D Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52252E Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52252F Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52252G Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52252H Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52252J Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52252K Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52252M Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52252N Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52252P Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52252Q Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52252R Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52252S Displaced comminuted fracture of shaft of ulna, left arm, sequela -S52253A Displaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52253B Displaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52253C Displaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52253D Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52253E Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52253F Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52253G Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52253H Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52253J Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52253K Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52253M Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52253N Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52253P Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52253Q Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52253R Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52253S Displaced comminuted fracture of shaft of ulna, unspecified arm, sequela -S52254A Nondisplaced comminuted fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52254B Nondisplaced comminuted fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52254C Nondisplaced comminuted fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52254D Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52254E Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52254F Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52254G Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52254H Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52254J Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52254K Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52254M Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52254N Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52254P Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52254Q Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52254R Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52254S Nondisplaced comminuted fracture of shaft of ulna, right arm, sequela -S52255A Nondisplaced comminuted fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52255B Nondisplaced comminuted fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52255C Nondisplaced comminuted fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52255D Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52255E Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52255F Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52255G Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52255H Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52255J Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52255K Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52255M Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52255N Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52255P Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52255Q Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52255R Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52255S Nondisplaced comminuted fracture of shaft of ulna, left arm, sequela -S52256A Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52256B Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52256C Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52256D Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52256E Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52256F Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52256G Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52256H Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52256J Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52256K Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52256M Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52256N Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52256P Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52256Q Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52256R Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52256S Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, sequela -S52261A Displaced segmental fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52261B Displaced segmental fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52261C Displaced segmental fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52261D Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52261E Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52261F Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52261G Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52261H Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52261J Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52261K Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52261M Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52261N Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52261P Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52261Q Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52261R Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52261S Displaced segmental fracture of shaft of ulna, right arm, sequela -S52262A Displaced segmental fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52262B Displaced segmental fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52262C Displaced segmental fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52262D Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52262E Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52262F Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52262G Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52262H Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52262J Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52262K Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52262M Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52262N Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52262P Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52262Q Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52262R Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52262S Displaced segmental fracture of shaft of ulna, left arm, sequela -S52263A Displaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52263B Displaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52263C Displaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52263D Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52263E Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52263F Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52263G Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52263H Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52263J Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52263K Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52263M Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52263N Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52263P Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52263Q Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52263R Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52263S Displaced segmental fracture of shaft of ulna, unspecified arm, sequela -S52264A Nondisplaced segmental fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52264B Nondisplaced segmental fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52264C Nondisplaced segmental fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52264D Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52264E Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52264F Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52264G Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52264H Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52264J Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52264K Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52264M Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52264N Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52264P Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52264Q Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52264R Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52264S Nondisplaced segmental fracture of shaft of ulna, right arm, sequela -S52265A Nondisplaced segmental fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52265B Nondisplaced segmental fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52265C Nondisplaced segmental fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52265D Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52265E Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52265F Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52265G Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52265H Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52265J Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52265K Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52265M Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52265N Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52265P Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52265Q Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52265R Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52265S Nondisplaced segmental fracture of shaft of ulna, left arm, sequela -S52266A Nondisplaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52266B Nondisplaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52266C Nondisplaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52266D Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52266E Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52266F Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52266G Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52266H Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52266J Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52266K Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52266M Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52266N Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52266P Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52266Q Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52266R Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52266S Nondisplaced segmental fracture of shaft of ulna, unspecified arm, sequela -S52271A Monteggia's fracture of right ulna, initial encounter for closed fracture -S52271B Monteggia's fracture of right ulna, initial encounter for open fracture type I or II -S52271C Monteggia's fracture of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52271D Monteggia's fracture of right ulna, subsequent encounter for closed fracture with routine healing -S52271E Monteggia's fracture of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52271F Monteggia's fracture of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52271G Monteggia's fracture of right ulna, subsequent encounter for closed fracture with delayed healing -S52271H Monteggia's fracture of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52271J Monteggia's fracture of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52271K Monteggia's fracture of right ulna, subsequent encounter for closed fracture with nonunion -S52271M Monteggia's fracture of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52271N Monteggia's fracture of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52271P Monteggia's fracture of right ulna, subsequent encounter for closed fracture with malunion -S52271Q Monteggia's fracture of right ulna, subsequent encounter for open fracture type I or II with malunion -S52271R Monteggia's fracture of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52271S Monteggia's fracture of right ulna, sequela -S52272A Monteggia's fracture of left ulna, initial encounter for closed fracture -S52272B Monteggia's fracture of left ulna, initial encounter for open fracture type I or II -S52272C Monteggia's fracture of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52272D Monteggia's fracture of left ulna, subsequent encounter for closed fracture with routine healing -S52272E Monteggia's fracture of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52272F Monteggia's fracture of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52272G Monteggia's fracture of left ulna, subsequent encounter for closed fracture with delayed healing -S52272H Monteggia's fracture of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52272J Monteggia's fracture of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52272K Monteggia's fracture of left ulna, subsequent encounter for closed fracture with nonunion -S52272M Monteggia's fracture of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52272N Monteggia's fracture of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52272P Monteggia's fracture of left ulna, subsequent encounter for closed fracture with malunion -S52272Q Monteggia's fracture of left ulna, subsequent encounter for open fracture type I or II with malunion -S52272R Monteggia's fracture of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52272S Monteggia's fracture of left ulna, sequela -S52279A Monteggia's fracture of unspecified ulna, initial encounter for closed fracture -S52279B Monteggia's fracture of unspecified ulna, initial encounter for open fracture type I or II -S52279C Monteggia's fracture of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52279D Monteggia's fracture of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52279E Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52279F Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52279G Monteggia's fracture of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52279H Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52279J Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52279K Monteggia's fracture of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52279M Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52279N Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52279P Monteggia's fracture of unspecified ulna, subsequent encounter for closed fracture with malunion -S52279Q Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52279R Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52279S Monteggia's fracture of unspecified ulna, sequela -S52281A Bent bone of right ulna, initial encounter for closed fracture -S52281B Bent bone of right ulna, initial encounter for open fracture type I or II -S52281C Bent bone of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52281D Bent bone of right ulna, subsequent encounter for closed fracture with routine healing -S52281E Bent bone of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52281F Bent bone of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52281G Bent bone of right ulna, subsequent encounter for closed fracture with delayed healing -S52281H Bent bone of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52281J Bent bone of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52281K Bent bone of right ulna, subsequent encounter for closed fracture with nonunion -S52281M Bent bone of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52281N Bent bone of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52281P Bent bone of right ulna, subsequent encounter for closed fracture with malunion -S52281Q Bent bone of right ulna, subsequent encounter for open fracture type I or II with malunion -S52281R Bent bone of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52281S Bent bone of right ulna, sequela -S52282A Bent bone of left ulna, initial encounter for closed fracture -S52282B Bent bone of left ulna, initial encounter for open fracture type I or II -S52282C Bent bone of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52282D Bent bone of left ulna, subsequent encounter for closed fracture with routine healing -S52282E Bent bone of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52282F Bent bone of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52282G Bent bone of left ulna, subsequent encounter for closed fracture with delayed healing -S52282H Bent bone of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52282J Bent bone of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52282K Bent bone of left ulna, subsequent encounter for closed fracture with nonunion -S52282M Bent bone of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52282N Bent bone of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52282P Bent bone of left ulna, subsequent encounter for closed fracture with malunion -S52282Q Bent bone of left ulna, subsequent encounter for open fracture type I or II with malunion -S52282R Bent bone of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52282S Bent bone of left ulna, sequela -S52283A Bent bone of unspecified ulna, initial encounter for closed fracture -S52283B Bent bone of unspecified ulna, initial encounter for open fracture type I or II -S52283C Bent bone of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52283D Bent bone of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52283E Bent bone of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52283F Bent bone of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52283G Bent bone of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52283H Bent bone of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52283J Bent bone of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52283K Bent bone of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52283M Bent bone of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52283N Bent bone of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52283P Bent bone of unspecified ulna, subsequent encounter for closed fracture with malunion -S52283Q Bent bone of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52283R Bent bone of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52283S Bent bone of unspecified ulna, sequela -S52291A Other fracture of shaft of right ulna, initial encounter for closed fracture -S52291B Other fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52291C Other fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52291D Other fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52291E Other fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52291F Other fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52291G Other fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52291H Other fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52291J Other fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52291K Other fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52291M Other fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52291N Other fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52291P Other fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52291Q Other fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52291R Other fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52291S Other fracture of shaft of right ulna, sequela -S52292A Other fracture of shaft of left ulna, initial encounter for closed fracture -S52292B Other fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52292C Other fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52292D Other fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52292E Other fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52292F Other fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52292G Other fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52292H Other fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52292J Other fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52292K Other fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52292M Other fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52292N Other fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52292P Other fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52292Q Other fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52292R Other fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52292S Other fracture of shaft of left ulna, sequela -S52299A Other fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52299B Other fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52299C Other fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52299D Other fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52299E Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52299F Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52299G Other fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52299H Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52299J Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52299K Other fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52299M Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52299N Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52299P Other fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52299Q Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52299R Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52299S Other fracture of shaft of unspecified ulna, sequela -S52301A Unspecified fracture of shaft of right radius, initial encounter for closed fracture -S52301B Unspecified fracture of shaft of right radius, initial encounter for open fracture type I or II -S52301C Unspecified fracture of shaft of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52301D Unspecified fracture of shaft of right radius, subsequent encounter for closed fracture with routine healing -S52301E Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type I or II with routine healing -S52301F Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52301G Unspecified fracture of shaft of right radius, subsequent encounter for closed fracture with delayed healing -S52301H Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52301J Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52301K Unspecified fracture of shaft of right radius, subsequent encounter for closed fracture with nonunion -S52301M Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type I or II with nonunion -S52301N Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52301P Unspecified fracture of shaft of right radius, subsequent encounter for closed fracture with malunion -S52301Q Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type I or II with malunion -S52301R Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52301S Unspecified fracture of shaft of right radius, sequela -S52302A Unspecified fracture of shaft of left radius, initial encounter for closed fracture -S52302B Unspecified fracture of shaft of left radius, initial encounter for open fracture type I or II -S52302C Unspecified fracture of shaft of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52302D Unspecified fracture of shaft of left radius, subsequent encounter for closed fracture with routine healing -S52302E Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type I or II with routine healing -S52302F Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52302G Unspecified fracture of shaft of left radius, subsequent encounter for closed fracture with delayed healing -S52302H Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52302J Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52302K Unspecified fracture of shaft of left radius, subsequent encounter for closed fracture with nonunion -S52302M Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type I or II with nonunion -S52302N Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52302P Unspecified fracture of shaft of left radius, subsequent encounter for closed fracture with malunion -S52302Q Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type I or II with malunion -S52302R Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52302S Unspecified fracture of shaft of left radius, sequela -S52309A Unspecified fracture of shaft of unspecified radius, initial encounter for closed fracture -S52309B Unspecified fracture of shaft of unspecified radius, initial encounter for open fracture type I or II -S52309C Unspecified fracture of shaft of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52309D Unspecified fracture of shaft of unspecified radius, subsequent encounter for closed fracture with routine healing -S52309E Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52309F Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52309G Unspecified fracture of shaft of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52309H Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52309J Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52309K Unspecified fracture of shaft of unspecified radius, subsequent encounter for closed fracture with nonunion -S52309M Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52309N Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52309P Unspecified fracture of shaft of unspecified radius, subsequent encounter for closed fracture with malunion -S52309Q Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52309R Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52309S Unspecified fracture of shaft of unspecified radius, sequela -S52311A Greenstick fracture of shaft of radius, right arm, initial encounter for closed fracture -S52311D Greenstick fracture of shaft of radius, right arm, subsequent encounter for fracture with routine healing -S52311G Greenstick fracture of shaft of radius, right arm, subsequent encounter for fracture with delayed healing -S52311K Greenstick fracture of shaft of radius, right arm, subsequent encounter for fracture with nonunion -S52311P Greenstick fracture of shaft of radius, right arm, subsequent encounter for fracture with malunion -S52311S Greenstick fracture of shaft of radius, right arm, sequela -S52312A Greenstick fracture of shaft of radius, left arm, initial encounter for closed fracture -S52312D Greenstick fracture of shaft of radius, left arm, subsequent encounter for fracture with routine healing -S52312G Greenstick fracture of shaft of radius, left arm, subsequent encounter for fracture with delayed healing -S52312K Greenstick fracture of shaft of radius, left arm, subsequent encounter for fracture with nonunion -S52312P Greenstick fracture of shaft of radius, left arm, subsequent encounter for fracture with malunion -S52312S Greenstick fracture of shaft of radius, left arm, sequela -S52319A Greenstick fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52319D Greenstick fracture of shaft of radius, unspecified arm, subsequent encounter for fracture with routine healing -S52319G Greenstick fracture of shaft of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S52319K Greenstick fracture of shaft of radius, unspecified arm, subsequent encounter for fracture with nonunion -S52319P Greenstick fracture of shaft of radius, unspecified arm, subsequent encounter for fracture with malunion -S52319S Greenstick fracture of shaft of radius, unspecified arm, sequela -S52321A Displaced transverse fracture of shaft of right radius, initial encounter for closed fracture -S52321B Displaced transverse fracture of shaft of right radius, initial encounter for open fracture type I or II -S52321C Displaced transverse fracture of shaft of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52321D Displaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with routine healing -S52321E Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with routine healing -S52321F Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52321G Displaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with delayed healing -S52321H Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52321J Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52321K Displaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with nonunion -S52321M Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with nonunion -S52321N Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52321P Displaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with malunion -S52321Q Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with malunion -S52321R Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52321S Displaced transverse fracture of shaft of right radius, sequela -S52322A Displaced transverse fracture of shaft of left radius, initial encounter for closed fracture -S52322B Displaced transverse fracture of shaft of left radius, initial encounter for open fracture type I or II -S52322C Displaced transverse fracture of shaft of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52322D Displaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with routine healing -S52322E Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with routine healing -S52322F Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52322G Displaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with delayed healing -S52322H Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52322J Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52322K Displaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with nonunion -S52322M Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with nonunion -S52322N Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52322P Displaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with malunion -S52322Q Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with malunion -S52322R Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52322S Displaced transverse fracture of shaft of left radius, sequela -S52323A Displaced transverse fracture of shaft of unspecified radius, initial encounter for closed fracture -S52323B Displaced transverse fracture of shaft of unspecified radius, initial encounter for open fracture type I or II -S52323C Displaced transverse fracture of shaft of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52323D Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with routine healing -S52323E Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52323F Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52323G Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52323H Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52323J Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52323K Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with nonunion -S52323M Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52323N Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52323P Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with malunion -S52323Q Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52323R Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52323S Displaced transverse fracture of shaft of unspecified radius, sequela -S52324A Nondisplaced transverse fracture of shaft of right radius, initial encounter for closed fracture -S52324B Nondisplaced transverse fracture of shaft of right radius, initial encounter for open fracture type I or II -S52324C Nondisplaced transverse fracture of shaft of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52324D Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with routine healing -S52324E Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with routine healing -S52324F Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52324G Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with delayed healing -S52324H Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52324J Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52324K Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with nonunion -S52324M Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with nonunion -S52324N Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52324P Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with malunion -S52324Q Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with malunion -S52324R Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52324S Nondisplaced transverse fracture of shaft of right radius, sequela -S52325A Nondisplaced transverse fracture of shaft of left radius, initial encounter for closed fracture -S52325B Nondisplaced transverse fracture of shaft of left radius, initial encounter for open fracture type I or II -S52325C Nondisplaced transverse fracture of shaft of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52325D Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with routine healing -S52325E Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with routine healing -S52325F Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52325G Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with delayed healing -S52325H Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52325J Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52325K Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with nonunion -S52325M Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with nonunion -S52325N Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52325P Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with malunion -S52325Q Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with malunion -S52325R Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52325S Nondisplaced transverse fracture of shaft of left radius, sequela -S52326A Nondisplaced transverse fracture of shaft of unspecified radius, initial encounter for closed fracture -S52326B Nondisplaced transverse fracture of shaft of unspecified radius, initial encounter for open fracture type I or II -S52326C Nondisplaced transverse fracture of shaft of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52326D Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with routine healing -S52326E Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52326F Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52326G Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52326H Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52326J Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52326K Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with nonunion -S52326M Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52326N Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52326P Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with malunion -S52326Q Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52326R Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52326S Nondisplaced transverse fracture of shaft of unspecified radius, sequela -S52331A Displaced oblique fracture of shaft of right radius, initial encounter for closed fracture -S52331B Displaced oblique fracture of shaft of right radius, initial encounter for open fracture type I or II -S52331C Displaced oblique fracture of shaft of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52331D Displaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with routine healing -S52331E Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with routine healing -S52331F Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52331G Displaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with delayed healing -S52331H Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52331J Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52331K Displaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with nonunion -S52331M Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with nonunion -S52331N Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52331P Displaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with malunion -S52331Q Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with malunion -S52331R Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52331S Displaced oblique fracture of shaft of right radius, sequela -S52332A Displaced oblique fracture of shaft of left radius, initial encounter for closed fracture -S52332B Displaced oblique fracture of shaft of left radius, initial encounter for open fracture type I or II -S52332C Displaced oblique fracture of shaft of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52332D Displaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with routine healing -S52332E Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with routine healing -S52332F Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52332G Displaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with delayed healing -S52332H Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52332J Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52332K Displaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with nonunion -S52332M Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with nonunion -S52332N Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52332P Displaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with malunion -S52332Q Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with malunion -S52332R Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52332S Displaced oblique fracture of shaft of left radius, sequela -S52333A Displaced oblique fracture of shaft of unspecified radius, initial encounter for closed fracture -S52333B Displaced oblique fracture of shaft of unspecified radius, initial encounter for open fracture type I or II -S52333C Displaced oblique fracture of shaft of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52333D Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with routine healing -S52333E Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52333F Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52333G Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52333H Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52333J Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52333K Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with nonunion -S52333M Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52333N Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52333P Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with malunion -S52333Q Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52333R Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52333S Displaced oblique fracture of shaft of unspecified radius, sequela -S52334A Nondisplaced oblique fracture of shaft of right radius, initial encounter for closed fracture -S52334B Nondisplaced oblique fracture of shaft of right radius, initial encounter for open fracture type I or II -S52334C Nondisplaced oblique fracture of shaft of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52334D Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with routine healing -S52334E Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with routine healing -S52334F Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52334G Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with delayed healing -S52334H Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52334J Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52334K Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with nonunion -S52334M Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with nonunion -S52334N Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52334P Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with malunion -S52334Q Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with malunion -S52334R Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52334S Nondisplaced oblique fracture of shaft of right radius, sequela -S52335A Nondisplaced oblique fracture of shaft of left radius, initial encounter for closed fracture -S52335B Nondisplaced oblique fracture of shaft of left radius, initial encounter for open fracture type I or II -S52335C Nondisplaced oblique fracture of shaft of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52335D Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with routine healing -S52335E Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with routine healing -S52335F Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52335G Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with delayed healing -S52335H Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52335J Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52335K Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with nonunion -S52335M Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with nonunion -S52335N Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52335P Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with malunion -S52335Q Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with malunion -S52335R Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52335S Nondisplaced oblique fracture of shaft of left radius, sequela -S52336A Nondisplaced oblique fracture of shaft of unspecified radius, initial encounter for closed fracture -S52336B Nondisplaced oblique fracture of shaft of unspecified radius, initial encounter for open fracture type I or II -S52336C Nondisplaced oblique fracture of shaft of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52336D Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with routine healing -S52336E Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52336F Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52336G Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52336H Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52336J Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52336K Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with nonunion -S52336M Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52336N Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52336P Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with malunion -S52336Q Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52336R Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52336S Nondisplaced oblique fracture of shaft of unspecified radius, sequela -S52341A Displaced spiral fracture of shaft of radius, right arm, initial encounter for closed fracture -S52341B Displaced spiral fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52341C Displaced spiral fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52341D Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52341E Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52341F Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52341G Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52341H Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52341J Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52341K Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52341M Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52341N Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52341P Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52341Q Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52341R Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52341S Displaced spiral fracture of shaft of radius, right arm, sequela -S52342A Displaced spiral fracture of shaft of radius, left arm, initial encounter for closed fracture -S52342B Displaced spiral fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52342C Displaced spiral fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52342D Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52342E Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52342F Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52342G Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52342H Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52342J Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52342K Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52342M Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52342N Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52342P Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52342Q Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52342R Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52342S Displaced spiral fracture of shaft of radius, left arm, sequela -S52343A Displaced spiral fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52343B Displaced spiral fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52343C Displaced spiral fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52343D Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52343E Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52343F Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52343G Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52343H Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52343J Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52343K Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52343M Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52343N Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52343P Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52343Q Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52343R Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52343S Displaced spiral fracture of shaft of radius, unspecified arm, sequela -S52344A Nondisplaced spiral fracture of shaft of radius, right arm, initial encounter for closed fracture -S52344B Nondisplaced spiral fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52344C Nondisplaced spiral fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52344D Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52344E Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52344F Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52344G Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52344H Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52344J Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52344K Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52344M Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52344N Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52344P Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52344Q Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52344R Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52344S Nondisplaced spiral fracture of shaft of radius, right arm, sequela -S52345A Nondisplaced spiral fracture of shaft of radius, left arm, initial encounter for closed fracture -S52345B Nondisplaced spiral fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52345C Nondisplaced spiral fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52345D Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52345E Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52345F Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52345G Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52345H Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52345J Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52345K Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52345M Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52345N Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52345P Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52345Q Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52345R Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52345S Nondisplaced spiral fracture of shaft of radius, left arm, sequela -S52346A Nondisplaced spiral fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52346B Nondisplaced spiral fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52346C Nondisplaced spiral fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52346D Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52346E Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52346F Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52346G Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52346H Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52346J Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52346K Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52346M Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52346N Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52346P Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52346Q Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52346R Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52346S Nondisplaced spiral fracture of shaft of radius, unspecified arm, sequela -S52351A Displaced comminuted fracture of shaft of radius, right arm, initial encounter for closed fracture -S52351B Displaced comminuted fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52351C Displaced comminuted fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52351D Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52351E Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52351F Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52351G Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52351H Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52351J Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52351K Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52351M Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52351N Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52351P Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52351Q Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52351R Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52351S Displaced comminuted fracture of shaft of radius, right arm, sequela -S52352A Displaced comminuted fracture of shaft of radius, left arm, initial encounter for closed fracture -S52352B Displaced comminuted fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52352C Displaced comminuted fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52352D Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52352E Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52352F Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52352G Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52352H Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52352J Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52352K Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52352M Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52352N Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52352P Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52352Q Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52352R Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52352S Displaced comminuted fracture of shaft of radius, left arm, sequela -S52353A Displaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52353B Displaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52353C Displaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52353D Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52353E Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52353F Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52353G Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52353H Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52353J Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52353K Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52353M Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52353N Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52353P Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52353Q Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52353R Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52353S Displaced comminuted fracture of shaft of radius, unspecified arm, sequela -S52354A Nondisplaced comminuted fracture of shaft of radius, right arm, initial encounter for closed fracture -S52354B Nondisplaced comminuted fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52354C Nondisplaced comminuted fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52354D Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52354E Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52354F Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52354G Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52354H Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52354J Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52354K Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52354M Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52354N Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52354P Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52354Q Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52354R Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52354S Nondisplaced comminuted fracture of shaft of radius, right arm, sequela -S52355A Nondisplaced comminuted fracture of shaft of radius, left arm, initial encounter for closed fracture -S52355B Nondisplaced comminuted fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52355C Nondisplaced comminuted fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52355D Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52355E Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52355F Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52355G Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52355H Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52355J Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52355K Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52355M Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52355N Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52355P Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52355Q Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52355R Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52355S Nondisplaced comminuted fracture of shaft of radius, left arm, sequela -S52356A Nondisplaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52356B Nondisplaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52356C Nondisplaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52356D Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52356E Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52356F Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52356G Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52356H Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52356J Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52356K Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52356M Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52356N Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52356P Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52356Q Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52356R Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52356S Nondisplaced comminuted fracture of shaft of radius, unspecified arm, sequela -S52361A Displaced segmental fracture of shaft of radius, right arm, initial encounter for closed fracture -S52361B Displaced segmental fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52361C Displaced segmental fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52361D Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52361E Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52361F Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52361G Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52361H Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52361J Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52361K Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52361M Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52361N Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52361P Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52361Q Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52361R Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52361S Displaced segmental fracture of shaft of radius, right arm, sequela -S52362A Displaced segmental fracture of shaft of radius, left arm, initial encounter for closed fracture -S52362B Displaced segmental fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52362C Displaced segmental fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52362D Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52362E Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52362F Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52362G Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52362H Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52362J Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52362K Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52362M Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52362N Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52362P Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52362Q Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52362R Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52362S Displaced segmental fracture of shaft of radius, left arm, sequela -S52363A Displaced segmental fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52363B Displaced segmental fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52363C Displaced segmental fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52363D Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52363E Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52363F Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52363G Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52363H Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52363J Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52363K Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52363M Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52363N Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52363P Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52363Q Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52363R Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52363S Displaced segmental fracture of shaft of radius, unspecified arm, sequela -S52364A Nondisplaced segmental fracture of shaft of radius, right arm, initial encounter for closed fracture -S52364B Nondisplaced segmental fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52364C Nondisplaced segmental fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52364D Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52364E Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52364F Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52364G Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52364H Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52364J Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52364K Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52364M Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52364N Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52364P Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52364Q Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52364R Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52364S Nondisplaced segmental fracture of shaft of radius, right arm, sequela -S52365A Nondisplaced segmental fracture of shaft of radius, left arm, initial encounter for closed fracture -S52365B Nondisplaced segmental fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52365C Nondisplaced segmental fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52365D Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52365E Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52365F Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52365G Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52365H Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52365J Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52365K Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52365M Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52365N Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52365P Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52365Q Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52365R Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52365S Nondisplaced segmental fracture of shaft of radius, left arm, sequela -S52366A Nondisplaced segmental fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52366B Nondisplaced segmental fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52366C Nondisplaced segmental fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52366D Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52366E Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52366F Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52366G Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52366H Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52366J Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52366K Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52366M Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52366N Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52366P Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52366Q Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52366R Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52366S Nondisplaced segmental fracture of shaft of radius, unspecified arm, sequela -S52371A Galeazzi's fracture of right radius, initial encounter for closed fracture -S52371B Galeazzi's fracture of right radius, initial encounter for open fracture type I or II -S52371C Galeazzi's fracture of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52371D Galeazzi's fracture of right radius, subsequent encounter for closed fracture with routine healing -S52371E Galeazzi's fracture of right radius, subsequent encounter for open fracture type I or II with routine healing -S52371F Galeazzi's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52371G Galeazzi's fracture of right radius, subsequent encounter for closed fracture with delayed healing -S52371H Galeazzi's fracture of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52371J Galeazzi's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52371K Galeazzi's fracture of right radius, subsequent encounter for closed fracture with nonunion -S52371M Galeazzi's fracture of right radius, subsequent encounter for open fracture type I or II with nonunion -S52371N Galeazzi's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52371P Galeazzi's fracture of right radius, subsequent encounter for closed fracture with malunion -S52371Q Galeazzi's fracture of right radius, subsequent encounter for open fracture type I or II with malunion -S52371R Galeazzi's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52371S Galeazzi's fracture of right radius, sequela -S52372A Galeazzi's fracture of left radius, initial encounter for closed fracture -S52372B Galeazzi's fracture of left radius, initial encounter for open fracture type I or II -S52372C Galeazzi's fracture of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52372D Galeazzi's fracture of left radius, subsequent encounter for closed fracture with routine healing -S52372E Galeazzi's fracture of left radius, subsequent encounter for open fracture type I or II with routine healing -S52372F Galeazzi's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52372G Galeazzi's fracture of left radius, subsequent encounter for closed fracture with delayed healing -S52372H Galeazzi's fracture of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52372J Galeazzi's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52372K Galeazzi's fracture of left radius, subsequent encounter for closed fracture with nonunion -S52372M Galeazzi's fracture of left radius, subsequent encounter for open fracture type I or II with nonunion -S52372N Galeazzi's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52372P Galeazzi's fracture of left radius, subsequent encounter for closed fracture with malunion -S52372Q Galeazzi's fracture of left radius, subsequent encounter for open fracture type I or II with malunion -S52372R Galeazzi's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52372S Galeazzi's fracture of left radius, sequela -S52379A Galeazzi's fracture of unspecified radius, initial encounter for closed fracture -S52379B Galeazzi's fracture of unspecified radius, initial encounter for open fracture type I or II -S52379C Galeazzi's fracture of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52379D Galeazzi's fracture of unspecified radius, subsequent encounter for closed fracture with routine healing -S52379E Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52379F Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52379G Galeazzi's fracture of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52379H Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52379J Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52379K Galeazzi's fracture of unspecified radius, subsequent encounter for closed fracture with nonunion -S52379M Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52379N Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52379P Galeazzi's fracture of unspecified radius, subsequent encounter for closed fracture with malunion -S52379Q Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52379R Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52379S Galeazzi's fracture of unspecified radius, sequela -S52381A Bent bone of right radius, initial encounter for closed fracture -S52381B Bent bone of right radius, initial encounter for open fracture type I or II -S52381C Bent bone of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52381D Bent bone of right radius, subsequent encounter for closed fracture with routine healing -S52381E Bent bone of right radius, subsequent encounter for open fracture type I or II with routine healing -S52381F Bent bone of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52381G Bent bone of right radius, subsequent encounter for closed fracture with delayed healing -S52381H Bent bone of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52381J Bent bone of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52381K Bent bone of right radius, subsequent encounter for closed fracture with nonunion -S52381M Bent bone of right radius, subsequent encounter for open fracture type I or II with nonunion -S52381N Bent bone of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52381P Bent bone of right radius, subsequent encounter for closed fracture with malunion -S52381Q Bent bone of right radius, subsequent encounter for open fracture type I or II with malunion -S52381R Bent bone of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52381S Bent bone of right radius, sequela -S52382A Bent bone of left radius, initial encounter for closed fracture -S52382B Bent bone of left radius, initial encounter for open fracture type I or II -S52382C Bent bone of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52382D Bent bone of left radius, subsequent encounter for closed fracture with routine healing -S52382E Bent bone of left radius, subsequent encounter for open fracture type I or II with routine healing -S52382F Bent bone of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52382G Bent bone of left radius, subsequent encounter for closed fracture with delayed healing -S52382H Bent bone of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52382J Bent bone of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52382K Bent bone of left radius, subsequent encounter for closed fracture with nonunion -S52382M Bent bone of left radius, subsequent encounter for open fracture type I or II with nonunion -S52382N Bent bone of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52382P Bent bone of left radius, subsequent encounter for closed fracture with malunion -S52382Q Bent bone of left radius, subsequent encounter for open fracture type I or II with malunion -S52382R Bent bone of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52382S Bent bone of left radius, sequela -S52389A Bent bone of unspecified radius, initial encounter for closed fracture -S52389B Bent bone of unspecified radius, initial encounter for open fracture type I or II -S52389C Bent bone of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52389D Bent bone of unspecified radius, subsequent encounter for closed fracture with routine healing -S52389E Bent bone of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52389F Bent bone of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52389G Bent bone of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52389H Bent bone of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52389J Bent bone of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52389K Bent bone of unspecified radius, subsequent encounter for closed fracture with nonunion -S52389M Bent bone of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52389N Bent bone of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52389P Bent bone of unspecified radius, subsequent encounter for closed fracture with malunion -S52389Q Bent bone of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52389R Bent bone of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52389S Bent bone of unspecified radius, sequela -S52391A Other fracture of shaft of radius, right arm, initial encounter for closed fracture -S52391B Other fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52391C Other fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52391D Other fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52391E Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52391F Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52391G Other fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52391H Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52391J Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52391K Other fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52391M Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52391N Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52391P Other fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52391Q Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52391R Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52391S Other fracture of shaft of radius, right arm, sequela -S52392A Other fracture of shaft of radius, left arm, initial encounter for closed fracture -S52392B Other fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52392C Other fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52392D Other fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52392E Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52392F Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52392G Other fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52392H Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52392J Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52392K Other fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52392M Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52392N Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52392P Other fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52392Q Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52392R Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52392S Other fracture of shaft of radius, left arm, sequela -S52399A Other fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52399B Other fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52399C Other fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52399D Other fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52399E Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52399F Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52399G Other fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52399H Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52399J Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52399K Other fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52399M Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52399N Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52399P Other fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52399Q Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52399R Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52399S Other fracture of shaft of radius, unspecified arm, sequela -S52501A Unspecified fracture of the lower end of right radius, initial encounter for closed fracture -S52501B Unspecified fracture of the lower end of right radius, initial encounter for open fracture type I or II -S52501C Unspecified fracture of the lower end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52501D Unspecified fracture of the lower end of right radius, subsequent encounter for closed fracture with routine healing -S52501E Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52501F Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52501G Unspecified fracture of the lower end of right radius, subsequent encounter for closed fracture with delayed healing -S52501H Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52501J Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52501K Unspecified fracture of the lower end of right radius, subsequent encounter for closed fracture with nonunion -S52501M Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52501N Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52501P Unspecified fracture of the lower end of right radius, subsequent encounter for closed fracture with malunion -S52501Q Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type I or II with malunion -S52501R Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52501S Unspecified fracture of the lower end of right radius, sequela -S52502A Unspecified fracture of the lower end of left radius, initial encounter for closed fracture -S52502B Unspecified fracture of the lower end of left radius, initial encounter for open fracture type I or II -S52502C Unspecified fracture of the lower end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52502D Unspecified fracture of the lower end of left radius, subsequent encounter for closed fracture with routine healing -S52502E Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52502F Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52502G Unspecified fracture of the lower end of left radius, subsequent encounter for closed fracture with delayed healing -S52502H Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52502J Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52502K Unspecified fracture of the lower end of left radius, subsequent encounter for closed fracture with nonunion -S52502M Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52502N Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52502P Unspecified fracture of the lower end of left radius, subsequent encounter for closed fracture with malunion -S52502Q Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type I or II with malunion -S52502R Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52502S Unspecified fracture of the lower end of left radius, sequela -S52509A Unspecified fracture of the lower end of unspecified radius, initial encounter for closed fracture -S52509B Unspecified fracture of the lower end of unspecified radius, initial encounter for open fracture type I or II -S52509C Unspecified fracture of the lower end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52509D Unspecified fracture of the lower end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52509E Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52509F Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52509G Unspecified fracture of the lower end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52509H Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52509J Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52509K Unspecified fracture of the lower end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52509M Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52509N Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52509P Unspecified fracture of the lower end of unspecified radius, subsequent encounter for closed fracture with malunion -S52509Q Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52509R Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52509S Unspecified fracture of the lower end of unspecified radius, sequela -S52511A Displaced fracture of right radial styloid process, initial encounter for closed fracture -S52511B Displaced fracture of right radial styloid process, initial encounter for open fracture type I or II -S52511C Displaced fracture of right radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52511D Displaced fracture of right radial styloid process, subsequent encounter for closed fracture with routine healing -S52511E Displaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52511F Displaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52511G Displaced fracture of right radial styloid process, subsequent encounter for closed fracture with delayed healing -S52511H Displaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52511J Displaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52511K Displaced fracture of right radial styloid process, subsequent encounter for closed fracture with nonunion -S52511M Displaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52511N Displaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52511P Displaced fracture of right radial styloid process, subsequent encounter for closed fracture with malunion -S52511Q Displaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52511R Displaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52511S Displaced fracture of right radial styloid process, sequela -S52512A Displaced fracture of left radial styloid process, initial encounter for closed fracture -S52512B Displaced fracture of left radial styloid process, initial encounter for open fracture type I or II -S52512C Displaced fracture of left radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52512D Displaced fracture of left radial styloid process, subsequent encounter for closed fracture with routine healing -S52512E Displaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52512F Displaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52512G Displaced fracture of left radial styloid process, subsequent encounter for closed fracture with delayed healing -S52512H Displaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52512J Displaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52512K Displaced fracture of left radial styloid process, subsequent encounter for closed fracture with nonunion -S52512M Displaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52512N Displaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52512P Displaced fracture of left radial styloid process, subsequent encounter for closed fracture with malunion -S52512Q Displaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52512R Displaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52512S Displaced fracture of left radial styloid process, sequela -S52513A Displaced fracture of unspecified radial styloid process, initial encounter for closed fracture -S52513B Displaced fracture of unspecified radial styloid process, initial encounter for open fracture type I or II -S52513C Displaced fracture of unspecified radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52513D Displaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with routine healing -S52513E Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52513F Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52513G Displaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with delayed healing -S52513H Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52513J Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52513K Displaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with nonunion -S52513M Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52513N Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52513P Displaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with malunion -S52513Q Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52513R Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52513S Displaced fracture of unspecified radial styloid process, sequela -S52514A Nondisplaced fracture of right radial styloid process, initial encounter for closed fracture -S52514B Nondisplaced fracture of right radial styloid process, initial encounter for open fracture type I or II -S52514C Nondisplaced fracture of right radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52514D Nondisplaced fracture of right radial styloid process, subsequent encounter for closed fracture with routine healing -S52514E Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52514F Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52514G Nondisplaced fracture of right radial styloid process, subsequent encounter for closed fracture with delayed healing -S52514H Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52514J Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52514K Nondisplaced fracture of right radial styloid process, subsequent encounter for closed fracture with nonunion -S52514M Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52514N Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52514P Nondisplaced fracture of right radial styloid process, subsequent encounter for closed fracture with malunion -S52514Q Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52514R Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52514S Nondisplaced fracture of right radial styloid process, sequela -S52515A Nondisplaced fracture of left radial styloid process, initial encounter for closed fracture -S52515B Nondisplaced fracture of left radial styloid process, initial encounter for open fracture type I or II -S52515C Nondisplaced fracture of left radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52515D Nondisplaced fracture of left radial styloid process, subsequent encounter for closed fracture with routine healing -S52515E Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52515F Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52515G Nondisplaced fracture of left radial styloid process, subsequent encounter for closed fracture with delayed healing -S52515H Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52515J Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52515K Nondisplaced fracture of left radial styloid process, subsequent encounter for closed fracture with nonunion -S52515M Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52515N Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52515P Nondisplaced fracture of left radial styloid process, subsequent encounter for closed fracture with malunion -S52515Q Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52515R Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52515S Nondisplaced fracture of left radial styloid process, sequela -S52516A Nondisplaced fracture of unspecified radial styloid process, initial encounter for closed fracture -S52516B Nondisplaced fracture of unspecified radial styloid process, initial encounter for open fracture type I or II -S52516C Nondisplaced fracture of unspecified radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52516D Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with routine healing -S52516E Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52516F Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52516G Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with delayed healing -S52516H Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52516J Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52516K Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with nonunion -S52516M Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52516N Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52516P Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with malunion -S52516Q Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52516R Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52516S Nondisplaced fracture of unspecified radial styloid process, sequela -S52521A Torus fracture of lower end of right radius, initial encounter for closed fracture -S52521D Torus fracture of lower end of right radius, subsequent encounter for fracture with routine healing -S52521G Torus fracture of lower end of right radius, subsequent encounter for fracture with delayed healing -S52521K Torus fracture of lower end of right radius, subsequent encounter for fracture with nonunion -S52521P Torus fracture of lower end of right radius, subsequent encounter for fracture with malunion -S52521S Torus fracture of lower end of right radius, sequela -S52522A Torus fracture of lower end of left radius, initial encounter for closed fracture -S52522D Torus fracture of lower end of left radius, subsequent encounter for fracture with routine healing -S52522G Torus fracture of lower end of left radius, subsequent encounter for fracture with delayed healing -S52522K Torus fracture of lower end of left radius, subsequent encounter for fracture with nonunion -S52522P Torus fracture of lower end of left radius, subsequent encounter for fracture with malunion -S52522S Torus fracture of lower end of left radius, sequela -S52529A Torus fracture of lower end of unspecified radius, initial encounter for closed fracture -S52529D Torus fracture of lower end of unspecified radius, subsequent encounter for fracture with routine healing -S52529G Torus fracture of lower end of unspecified radius, subsequent encounter for fracture with delayed healing -S52529K Torus fracture of lower end of unspecified radius, subsequent encounter for fracture with nonunion -S52529P Torus fracture of lower end of unspecified radius, subsequent encounter for fracture with malunion -S52529S Torus fracture of lower end of unspecified radius, sequela -S52531A Colles' fracture of right radius, initial encounter for closed fracture -S52531B Colles' fracture of right radius, initial encounter for open fracture type I or II -S52531C Colles' fracture of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52531D Colles' fracture of right radius, subsequent encounter for closed fracture with routine healing -S52531E Colles' fracture of right radius, subsequent encounter for open fracture type I or II with routine healing -S52531F Colles' fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52531G Colles' fracture of right radius, subsequent encounter for closed fracture with delayed healing -S52531H Colles' fracture of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52531J Colles' fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52531K Colles' fracture of right radius, subsequent encounter for closed fracture with nonunion -S52531M Colles' fracture of right radius, subsequent encounter for open fracture type I or II with nonunion -S52531N Colles' fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52531P Colles' fracture of right radius, subsequent encounter for closed fracture with malunion -S52531Q Colles' fracture of right radius, subsequent encounter for open fracture type I or II with malunion -S52531R Colles' fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52531S Colles' fracture of right radius, sequela -S52532A Colles' fracture of left radius, initial encounter for closed fracture -S52532B Colles' fracture of left radius, initial encounter for open fracture type I or II -S52532C Colles' fracture of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52532D Colles' fracture of left radius, subsequent encounter for closed fracture with routine healing -S52532E Colles' fracture of left radius, subsequent encounter for open fracture type I or II with routine healing -S52532F Colles' fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52532G Colles' fracture of left radius, subsequent encounter for closed fracture with delayed healing -S52532H Colles' fracture of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52532J Colles' fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52532K Colles' fracture of left radius, subsequent encounter for closed fracture with nonunion -S52532M Colles' fracture of left radius, subsequent encounter for open fracture type I or II with nonunion -S52532N Colles' fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52532P Colles' fracture of left radius, subsequent encounter for closed fracture with malunion -S52532Q Colles' fracture of left radius, subsequent encounter for open fracture type I or II with malunion -S52532R Colles' fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52532S Colles' fracture of left radius, sequela -S52539A Colles' fracture of unspecified radius, initial encounter for closed fracture -S52539B Colles' fracture of unspecified radius, initial encounter for open fracture type I or II -S52539C Colles' fracture of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52539D Colles' fracture of unspecified radius, subsequent encounter for closed fracture with routine healing -S52539E Colles' fracture of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52539F Colles' fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52539G Colles' fracture of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52539H Colles' fracture of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52539J Colles' fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52539K Colles' fracture of unspecified radius, subsequent encounter for closed fracture with nonunion -S52539M Colles' fracture of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52539N Colles' fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52539P Colles' fracture of unspecified radius, subsequent encounter for closed fracture with malunion -S52539Q Colles' fracture of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52539R Colles' fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52539S Colles' fracture of unspecified radius, sequela -S52541A Smith's fracture of right radius, initial encounter for closed fracture -S52541B Smith's fracture of right radius, initial encounter for open fracture type I or II -S52541C Smith's fracture of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52541D Smith's fracture of right radius, subsequent encounter for closed fracture with routine healing -S52541E Smith's fracture of right radius, subsequent encounter for open fracture type I or II with routine healing -S52541F Smith's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52541G Smith's fracture of right radius, subsequent encounter for closed fracture with delayed healing -S52541H Smith's fracture of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52541J Smith's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52541K Smith's fracture of right radius, subsequent encounter for closed fracture with nonunion -S52541M Smith's fracture of right radius, subsequent encounter for open fracture type I or II with nonunion -S52541N Smith's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52541P Smith's fracture of right radius, subsequent encounter for closed fracture with malunion -S52541Q Smith's fracture of right radius, subsequent encounter for open fracture type I or II with malunion -S52541R Smith's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52541S Smith's fracture of right radius, sequela -S52542A Smith's fracture of left radius, initial encounter for closed fracture -S52542B Smith's fracture of left radius, initial encounter for open fracture type I or II -S52542C Smith's fracture of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52542D Smith's fracture of left radius, subsequent encounter for closed fracture with routine healing -S52542E Smith's fracture of left radius, subsequent encounter for open fracture type I or II with routine healing -S52542F Smith's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52542G Smith's fracture of left radius, subsequent encounter for closed fracture with delayed healing -S52542H Smith's fracture of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52542J Smith's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52542K Smith's fracture of left radius, subsequent encounter for closed fracture with nonunion -S52542M Smith's fracture of left radius, subsequent encounter for open fracture type I or II with nonunion -S52542N Smith's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52542P Smith's fracture of left radius, subsequent encounter for closed fracture with malunion -S52542Q Smith's fracture of left radius, subsequent encounter for open fracture type I or II with malunion -S52542R Smith's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52542S Smith's fracture of left radius, sequela -S52549A Smith's fracture of unspecified radius, initial encounter for closed fracture -S52549B Smith's fracture of unspecified radius, initial encounter for open fracture type I or II -S52549C Smith's fracture of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52549D Smith's fracture of unspecified radius, subsequent encounter for closed fracture with routine healing -S52549E Smith's fracture of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52549F Smith's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52549G Smith's fracture of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52549H Smith's fracture of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52549J Smith's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52549K Smith's fracture of unspecified radius, subsequent encounter for closed fracture with nonunion -S52549M Smith's fracture of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52549N Smith's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52549P Smith's fracture of unspecified radius, subsequent encounter for closed fracture with malunion -S52549Q Smith's fracture of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52549R Smith's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52549S Smith's fracture of unspecified radius, sequela -S52551A Other extraarticular fracture of lower end of right radius, initial encounter for closed fracture -S52551B Other extraarticular fracture of lower end of right radius, initial encounter for open fracture type I or II -S52551C Other extraarticular fracture of lower end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52551D Other extraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with routine healing -S52551E Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52551F Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52551G Other extraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with delayed healing -S52551H Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52551J Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52551K Other extraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with nonunion -S52551M Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52551N Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52551P Other extraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with malunion -S52551Q Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with malunion -S52551R Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52551S Other extraarticular fracture of lower end of right radius, sequela -S52552A Other extraarticular fracture of lower end of left radius, initial encounter for closed fracture -S52552B Other extraarticular fracture of lower end of left radius, initial encounter for open fracture type I or II -S52552C Other extraarticular fracture of lower end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52552D Other extraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with routine healing -S52552E Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52552F Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52552G Other extraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with delayed healing -S52552H Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52552J Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52552K Other extraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with nonunion -S52552M Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52552N Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52552P Other extraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with malunion -S52552Q Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with malunion -S52552R Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52552S Other extraarticular fracture of lower end of left radius, sequela -S52559A Other extraarticular fracture of lower end of unspecified radius, initial encounter for closed fracture -S52559B Other extraarticular fracture of lower end of unspecified radius, initial encounter for open fracture type I or II -S52559C Other extraarticular fracture of lower end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52559D Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52559E Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52559F Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52559G Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52559H Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52559J Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52559K Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52559M Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52559N Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52559P Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with malunion -S52559Q Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52559R Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52559S Other extraarticular fracture of lower end of unspecified radius, sequela -S52561A Barton's fracture of right radius, initial encounter for closed fracture -S52561B Barton's fracture of right radius, initial encounter for open fracture type I or II -S52561C Barton's fracture of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52561D Barton's fracture of right radius, subsequent encounter for closed fracture with routine healing -S52561E Barton's fracture of right radius, subsequent encounter for open fracture type I or II with routine healing -S52561F Barton's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52561G Barton's fracture of right radius, subsequent encounter for closed fracture with delayed healing -S52561H Barton's fracture of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52561J Barton's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52561K Barton's fracture of right radius, subsequent encounter for closed fracture with nonunion -S52561M Barton's fracture of right radius, subsequent encounter for open fracture type I or II with nonunion -S52561N Barton's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52561P Barton's fracture of right radius, subsequent encounter for closed fracture with malunion -S52561Q Barton's fracture of right radius, subsequent encounter for open fracture type I or II with malunion -S52561R Barton's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52561S Barton's fracture of right radius, sequela -S52562A Barton's fracture of left radius, initial encounter for closed fracture -S52562B Barton's fracture of left radius, initial encounter for open fracture type I or II -S52562C Barton's fracture of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52562D Barton's fracture of left radius, subsequent encounter for closed fracture with routine healing -S52562E Barton's fracture of left radius, subsequent encounter for open fracture type I or II with routine healing -S52562F Barton's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52562G Barton's fracture of left radius, subsequent encounter for closed fracture with delayed healing -S52562H Barton's fracture of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52562J Barton's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52562K Barton's fracture of left radius, subsequent encounter for closed fracture with nonunion -S52562M Barton's fracture of left radius, subsequent encounter for open fracture type I or II with nonunion -S52562N Barton's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52562P Barton's fracture of left radius, subsequent encounter for closed fracture with malunion -S52562Q Barton's fracture of left radius, subsequent encounter for open fracture type I or II with malunion -S52562R Barton's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52562S Barton's fracture of left radius, sequela -S52569A Barton's fracture of unspecified radius, initial encounter for closed fracture -S52569B Barton's fracture of unspecified radius, initial encounter for open fracture type I or II -S52569C Barton's fracture of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52569D Barton's fracture of unspecified radius, subsequent encounter for closed fracture with routine healing -S52569E Barton's fracture of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52569F Barton's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52569G Barton's fracture of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52569H Barton's fracture of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52569J Barton's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52569K Barton's fracture of unspecified radius, subsequent encounter for closed fracture with nonunion -S52569M Barton's fracture of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52569N Barton's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52569P Barton's fracture of unspecified radius, subsequent encounter for closed fracture with malunion -S52569Q Barton's fracture of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52569R Barton's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52569S Barton's fracture of unspecified radius, sequela -S52571A Other intraarticular fracture of lower end of right radius, initial encounter for closed fracture -S52571B Other intraarticular fracture of lower end of right radius, initial encounter for open fracture type I or II -S52571C Other intraarticular fracture of lower end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52571D Other intraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with routine healing -S52571E Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52571F Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52571G Other intraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with delayed healing -S52571H Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52571J Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52571K Other intraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with nonunion -S52571M Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52571N Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52571P Other intraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with malunion -S52571Q Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with malunion -S52571R Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52571S Other intraarticular fracture of lower end of right radius, sequela -S52572A Other intraarticular fracture of lower end of left radius, initial encounter for closed fracture -S52572B Other intraarticular fracture of lower end of left radius, initial encounter for open fracture type I or II -S52572C Other intraarticular fracture of lower end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52572D Other intraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with routine healing -S52572E Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52572F Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52572G Other intraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with delayed healing -S52572H Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52572J Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52572K Other intraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with nonunion -S52572M Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52572N Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52572P Other intraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with malunion -S52572Q Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with malunion -S52572R Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52572S Other intraarticular fracture of lower end of left radius, sequela -S52579A Other intraarticular fracture of lower end of unspecified radius, initial encounter for closed fracture -S52579B Other intraarticular fracture of lower end of unspecified radius, initial encounter for open fracture type I or II -S52579C Other intraarticular fracture of lower end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52579D Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52579E Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52579F Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52579G Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52579H Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52579J Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52579K Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52579M Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52579N Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52579P Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with malunion -S52579Q Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52579R Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52579S Other intraarticular fracture of lower end of unspecified radius, sequela -S52591A Other fractures of lower end of right radius, initial encounter for closed fracture -S52591B Other fractures of lower end of right radius, initial encounter for open fracture type I or II -S52591C Other fractures of lower end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52591D Other fractures of lower end of right radius, subsequent encounter for closed fracture with routine healing -S52591E Other fractures of lower end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52591F Other fractures of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52591G Other fractures of lower end of right radius, subsequent encounter for closed fracture with delayed healing -S52591H Other fractures of lower end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52591J Other fractures of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52591K Other fractures of lower end of right radius, subsequent encounter for closed fracture with nonunion -S52591M Other fractures of lower end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52591N Other fractures of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52591P Other fractures of lower end of right radius, subsequent encounter for closed fracture with malunion -S52591Q Other fractures of lower end of right radius, subsequent encounter for open fracture type I or II with malunion -S52591R Other fractures of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52591S Other fractures of lower end of right radius, sequela -S52592A Other fractures of lower end of left radius, initial encounter for closed fracture -S52592B Other fractures of lower end of left radius, initial encounter for open fracture type I or II -S52592C Other fractures of lower end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52592D Other fractures of lower end of left radius, subsequent encounter for closed fracture with routine healing -S52592E Other fractures of lower end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52592F Other fractures of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52592G Other fractures of lower end of left radius, subsequent encounter for closed fracture with delayed healing -S52592H Other fractures of lower end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52592J Other fractures of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52592K Other fractures of lower end of left radius, subsequent encounter for closed fracture with nonunion -S52592M Other fractures of lower end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52592N Other fractures of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52592P Other fractures of lower end of left radius, subsequent encounter for closed fracture with malunion -S52592Q Other fractures of lower end of left radius, subsequent encounter for open fracture type I or II with malunion -S52592R Other fractures of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52592S Other fractures of lower end of left radius, sequela -S52599A Other fractures of lower end of unspecified radius, initial encounter for closed fracture -S52599B Other fractures of lower end of unspecified radius, initial encounter for open fracture type I or II -S52599C Other fractures of lower end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52599D Other fractures of lower end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52599E Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52599F Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52599G Other fractures of lower end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52599H Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52599J Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52599K Other fractures of lower end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52599M Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52599N Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52599P Other fractures of lower end of unspecified radius, subsequent encounter for closed fracture with malunion -S52599Q Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52599R Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52599S Other fractures of lower end of unspecified radius, sequela -S52601A Unspecified fracture of lower end of right ulna, initial encounter for closed fracture -S52601B Unspecified fracture of lower end of right ulna, initial encounter for open fracture type I or II -S52601C Unspecified fracture of lower end of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52601D Unspecified fracture of lower end of right ulna, subsequent encounter for closed fracture with routine healing -S52601E Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52601F Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52601G Unspecified fracture of lower end of right ulna, subsequent encounter for closed fracture with delayed healing -S52601H Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52601J Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52601K Unspecified fracture of lower end of right ulna, subsequent encounter for closed fracture with nonunion -S52601M Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52601N Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52601P Unspecified fracture of lower end of right ulna, subsequent encounter for closed fracture with malunion -S52601Q Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with malunion -S52601R Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52601S Unspecified fracture of lower end of right ulna, sequela -S52602A Unspecified fracture of lower end of left ulna, initial encounter for closed fracture -S52602B Unspecified fracture of lower end of left ulna, initial encounter for open fracture type I or II -S52602C Unspecified fracture of lower end of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52602D Unspecified fracture of lower end of left ulna, subsequent encounter for closed fracture with routine healing -S52602E Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52602F Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52602G Unspecified fracture of lower end of left ulna, subsequent encounter for closed fracture with delayed healing -S52602H Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52602J Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52602K Unspecified fracture of lower end of left ulna, subsequent encounter for closed fracture with nonunion -S52602M Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52602N Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52602P Unspecified fracture of lower end of left ulna, subsequent encounter for closed fracture with malunion -S52602Q Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with malunion -S52602R Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52602S Unspecified fracture of lower end of left ulna, sequela -S52609A Unspecified fracture of lower end of unspecified ulna, initial encounter for closed fracture -S52609B Unspecified fracture of lower end of unspecified ulna, initial encounter for open fracture type I or II -S52609C Unspecified fracture of lower end of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52609D Unspecified fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52609E Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52609F Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52609G Unspecified fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52609H Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52609J Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52609K Unspecified fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52609M Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52609N Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52609P Unspecified fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with malunion -S52609Q Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52609R Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52609S Unspecified fracture of lower end of unspecified ulna, sequela -S52611A Displaced fracture of right ulna styloid process, initial encounter for closed fracture -S52611B Displaced fracture of right ulna styloid process, initial encounter for open fracture type I or II -S52611C Displaced fracture of right ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52611D Displaced fracture of right ulna styloid process, subsequent encounter for closed fracture with routine healing -S52611E Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52611F Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52611G Displaced fracture of right ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52611H Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52611J Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52611K Displaced fracture of right ulna styloid process, subsequent encounter for closed fracture with nonunion -S52611M Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52611N Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52611P Displaced fracture of right ulna styloid process, subsequent encounter for closed fracture with malunion -S52611Q Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52611R Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52611S Displaced fracture of right ulna styloid process, sequela -S52612A Displaced fracture of left ulna styloid process, initial encounter for closed fracture -S52612B Displaced fracture of left ulna styloid process, initial encounter for open fracture type I or II -S52612C Displaced fracture of left ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52612D Displaced fracture of left ulna styloid process, subsequent encounter for closed fracture with routine healing -S52612E Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52612F Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52612G Displaced fracture of left ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52612H Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52612J Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52612K Displaced fracture of left ulna styloid process, subsequent encounter for closed fracture with nonunion -S52612M Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52612N Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52612P Displaced fracture of left ulna styloid process, subsequent encounter for closed fracture with malunion -S52612Q Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52612R Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52612S Displaced fracture of left ulna styloid process, sequela -S52613A Displaced fracture of unspecified ulna styloid process, initial encounter for closed fracture -S52613B Displaced fracture of unspecified ulna styloid process, initial encounter for open fracture type I or II -S52613C Displaced fracture of unspecified ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52613D Displaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with routine healing -S52613E Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52613F Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52613G Displaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52613H Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52613J Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52613K Displaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with nonunion -S52613M Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52613N Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52613P Displaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with malunion -S52613Q Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52613R Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52613S Displaced fracture of unspecified ulna styloid process, sequela -S52614A Nondisplaced fracture of right ulna styloid process, initial encounter for closed fracture -S52614B Nondisplaced fracture of right ulna styloid process, initial encounter for open fracture type I or II -S52614C Nondisplaced fracture of right ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52614D Nondisplaced fracture of right ulna styloid process, subsequent encounter for closed fracture with routine healing -S52614E Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52614F Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52614G Nondisplaced fracture of right ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52614H Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52614J Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52614K Nondisplaced fracture of right ulna styloid process, subsequent encounter for closed fracture with nonunion -S52614M Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52614N Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52614P Nondisplaced fracture of right ulna styloid process, subsequent encounter for closed fracture with malunion -S52614Q Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52614R Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52614S Nondisplaced fracture of right ulna styloid process, sequela -S52615A Nondisplaced fracture of left ulna styloid process, initial encounter for closed fracture -S52615B Nondisplaced fracture of left ulna styloid process, initial encounter for open fracture type I or II -S52615C Nondisplaced fracture of left ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52615D Nondisplaced fracture of left ulna styloid process, subsequent encounter for closed fracture with routine healing -S52615E Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52615F Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52615G Nondisplaced fracture of left ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52615H Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52615J Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52615K Nondisplaced fracture of left ulna styloid process, subsequent encounter for closed fracture with nonunion -S52615M Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52615N Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52615P Nondisplaced fracture of left ulna styloid process, subsequent encounter for closed fracture with malunion -S52615Q Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52615R Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52615S Nondisplaced fracture of left ulna styloid process, sequela -S52616A Nondisplaced fracture of unspecified ulna styloid process, initial encounter for closed fracture -S52616B Nondisplaced fracture of unspecified ulna styloid process, initial encounter for open fracture type I or II -S52616C Nondisplaced fracture of unspecified ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52616D Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with routine healing -S52616E Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52616F Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52616G Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52616H Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52616J Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52616K Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with nonunion -S52616M Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52616N Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52616P Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with malunion -S52616Q Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52616R Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52616S Nondisplaced fracture of unspecified ulna styloid process, sequela -S52621A Torus fracture of lower end of right ulna, initial encounter for closed fracture -S52621D Torus fracture of lower end of right ulna, subsequent encounter for fracture with routine healing -S52621G Torus fracture of lower end of right ulna, subsequent encounter for fracture with delayed healing -S52621K Torus fracture of lower end of right ulna, subsequent encounter for fracture with nonunion -S52621P Torus fracture of lower end of right ulna, subsequent encounter for fracture with malunion -S52621S Torus fracture of lower end of right ulna, sequela -S52622A Torus fracture of lower end of left ulna, initial encounter for closed fracture -S52622D Torus fracture of lower end of left ulna, subsequent encounter for fracture with routine healing -S52622G Torus fracture of lower end of left ulna, subsequent encounter for fracture with delayed healing -S52622K Torus fracture of lower end of left ulna, subsequent encounter for fracture with nonunion -S52622P Torus fracture of lower end of left ulna, subsequent encounter for fracture with malunion -S52622S Torus fracture of lower end of left ulna, sequela -S52629A Torus fracture of lower end of unspecified ulna, initial encounter for closed fracture -S52629D Torus fracture of lower end of unspecified ulna, subsequent encounter for fracture with routine healing -S52629G Torus fracture of lower end of unspecified ulna, subsequent encounter for fracture with delayed healing -S52629K Torus fracture of lower end of unspecified ulna, subsequent encounter for fracture with nonunion -S52629P Torus fracture of lower end of unspecified ulna, subsequent encounter for fracture with malunion -S52629S Torus fracture of lower end of unspecified ulna, sequela -S52691A Other fracture of lower end of right ulna, initial encounter for closed fracture -S52691B Other fracture of lower end of right ulna, initial encounter for open fracture type I or II -S52691C Other fracture of lower end of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52691D Other fracture of lower end of right ulna, subsequent encounter for closed fracture with routine healing -S52691E Other fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52691F Other fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52691G Other fracture of lower end of right ulna, subsequent encounter for closed fracture with delayed healing -S52691H Other fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52691J Other fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52691K Other fracture of lower end of right ulna, subsequent encounter for closed fracture with nonunion -S52691M Other fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52691N Other fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52691P Other fracture of lower end of right ulna, subsequent encounter for closed fracture with malunion -S52691Q Other fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with malunion -S52691R Other fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52691S Other fracture of lower end of right ulna, sequela -S52692A Other fracture of lower end of left ulna, initial encounter for closed fracture -S52692B Other fracture of lower end of left ulna, initial encounter for open fracture type I or II -S52692C Other fracture of lower end of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52692D Other fracture of lower end of left ulna, subsequent encounter for closed fracture with routine healing -S52692E Other fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52692F Other fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52692G Other fracture of lower end of left ulna, subsequent encounter for closed fracture with delayed healing -S52692H Other fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52692J Other fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52692K Other fracture of lower end of left ulna, subsequent encounter for closed fracture with nonunion -S52692M Other fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52692N Other fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52692P Other fracture of lower end of left ulna, subsequent encounter for closed fracture with malunion -S52692Q Other fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with malunion -S52692R Other fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52692S Other fracture of lower end of left ulna, sequela -S52699A Other fracture of lower end of unspecified ulna, initial encounter for closed fracture -S52699B Other fracture of lower end of unspecified ulna, initial encounter for open fracture type I or II -S52699C Other fracture of lower end of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52699D Other fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52699E Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52699F Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52699G Other fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52699H Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52699J Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52699K Other fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52699M Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52699N Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52699P Other fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with malunion -S52699Q Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52699R Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52699S Other fracture of lower end of unspecified ulna, sequela -S5290XA Unspecified fracture of unspecified forearm, initial encounter for closed fracture -S5290XB Unspecified fracture of unspecified forearm, initial encounter for open fracture type I or II -S5290XC Unspecified fracture of unspecified forearm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S5290XD Unspecified fracture of unspecified forearm, subsequent encounter for closed fracture with routine healing -S5290XE Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type I or II with routine healing -S5290XF Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S5290XG Unspecified fracture of unspecified forearm, subsequent encounter for closed fracture with delayed healing -S5290XH Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type I or II with delayed healing -S5290XJ Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S5290XK Unspecified fracture of unspecified forearm, subsequent encounter for closed fracture with nonunion -S5290XM Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type I or II with nonunion -S5290XN Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S5290XP Unspecified fracture of unspecified forearm, subsequent encounter for closed fracture with malunion -S5290XQ Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type I or II with malunion -S5290XR Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S5290XS Unspecified fracture of unspecified forearm, sequela -S5291XA Unspecified fracture of right forearm, initial encounter for closed fracture -S5291XB Unspecified fracture of right forearm, initial encounter for open fracture type I or II -S5291XC Unspecified fracture of right forearm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S5291XD Unspecified fracture of right forearm, subsequent encounter for closed fracture with routine healing -S5291XE Unspecified fracture of right forearm, subsequent encounter for open fracture type I or II with routine healing -S5291XF Unspecified fracture of right forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S5291XG Unspecified fracture of right forearm, subsequent encounter for closed fracture with delayed healing -S5291XH Unspecified fracture of right forearm, subsequent encounter for open fracture type I or II with delayed healing -S5291XJ Unspecified fracture of right forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S5291XK Unspecified fracture of right forearm, subsequent encounter for closed fracture with nonunion -S5291XM Unspecified fracture of right forearm, subsequent encounter for open fracture type I or II with nonunion -S5291XN Unspecified fracture of right forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S5291XP Unspecified fracture of right forearm, subsequent encounter for closed fracture with malunion -S5291XQ Unspecified fracture of right forearm, subsequent encounter for open fracture type I or II with malunion -S5291XR Unspecified fracture of right forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S5291XS Unspecified fracture of right forearm, sequela -S5292XA Unspecified fracture of left forearm, initial encounter for closed fracture -S5292XB Unspecified fracture of left forearm, initial encounter for open fracture type I or II -S5292XC Unspecified fracture of left forearm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S5292XD Unspecified fracture of left forearm, subsequent encounter for closed fracture with routine healing -S5292XE Unspecified fracture of left forearm, subsequent encounter for open fracture type I or II with routine healing -S5292XF Unspecified fracture of left forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S5292XG Unspecified fracture of left forearm, subsequent encounter for closed fracture with delayed healing -S5292XH Unspecified fracture of left forearm, subsequent encounter for open fracture type I or II with delayed healing -S5292XJ Unspecified fracture of left forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S5292XK Unspecified fracture of left forearm, subsequent encounter for closed fracture with nonunion -S5292XM Unspecified fracture of left forearm, subsequent encounter for open fracture type I or II with nonunion -S5292XN Unspecified fracture of left forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S5292XP Unspecified fracture of left forearm, subsequent encounter for closed fracture with malunion -S5292XQ Unspecified fracture of left forearm, subsequent encounter for open fracture type I or II with malunion -S5292XR Unspecified fracture of left forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S5292XS Unspecified fracture of left forearm, sequela -S53001A Unspecified subluxation of right radial head, initial encounter -S53001D Unspecified subluxation of right radial head, subsequent encounter -S53001S Unspecified subluxation of right radial head, sequela -S53002A Unspecified subluxation of left radial head, initial encounter -S53002D Unspecified subluxation of left radial head, subsequent encounter -S53002S Unspecified subluxation of left radial head, sequela -S53003A Unspecified subluxation of unspecified radial head, initial encounter -S53003D Unspecified subluxation of unspecified radial head, subsequent encounter -S53003S Unspecified subluxation of unspecified radial head, sequela -S53004A Unspecified dislocation of right radial head, initial encounter -S53004D Unspecified dislocation of right radial head, subsequent encounter -S53004S Unspecified dislocation of right radial head, sequela -S53005A Unspecified dislocation of left radial head, initial encounter -S53005D Unspecified dislocation of left radial head, subsequent encounter -S53005S Unspecified dislocation of left radial head, sequela -S53006A Unspecified dislocation of unspecified radial head, initial encounter -S53006D Unspecified dislocation of unspecified radial head, subsequent encounter -S53006S Unspecified dislocation of unspecified radial head, sequela -S53011A Anterior subluxation of right radial head, initial encounter -S53011D Anterior subluxation of right radial head, subsequent encounter -S53011S Anterior subluxation of right radial head, sequela -S53012A Anterior subluxation of left radial head, initial encounter -S53012D Anterior subluxation of left radial head, subsequent encounter -S53012S Anterior subluxation of left radial head, sequela -S53013A Anterior subluxation of unspecified radial head, initial encounter -S53013D Anterior subluxation of unspecified radial head, subsequent encounter -S53013S Anterior subluxation of unspecified radial head, sequela -S53014A Anterior dislocation of right radial head, initial encounter -S53014D Anterior dislocation of right radial head, subsequent encounter -S53014S Anterior dislocation of right radial head, sequela -S53015A Anterior dislocation of left radial head, initial encounter -S53015D Anterior dislocation of left radial head, subsequent encounter -S53015S Anterior dislocation of left radial head, sequela -S53016A Anterior dislocation of unspecified radial head, initial encounter -S53016D Anterior dislocation of unspecified radial head, subsequent encounter -S53016S Anterior dislocation of unspecified radial head, sequela -S53021A Posterior subluxation of right radial head, initial encounter -S53021D Posterior subluxation of right radial head, subsequent encounter -S53021S Posterior subluxation of right radial head, sequela -S53022A Posterior subluxation of left radial head, initial encounter -S53022D Posterior subluxation of left radial head, subsequent encounter -S53022S Posterior subluxation of left radial head, sequela -S53023A Posterior subluxation of unspecified radial head, initial encounter -S53023D Posterior subluxation of unspecified radial head, subsequent encounter -S53023S Posterior subluxation of unspecified radial head, sequela -S53024A Posterior dislocation of right radial head, initial encounter -S53024D Posterior dislocation of right radial head, subsequent encounter -S53024S Posterior dislocation of right radial head, sequela -S53025A Posterior dislocation of left radial head, initial encounter -S53025D Posterior dislocation of left radial head, subsequent encounter -S53025S Posterior dislocation of left radial head, sequela -S53026A Posterior dislocation of unspecified radial head, initial encounter -S53026D Posterior dislocation of unspecified radial head, subsequent encounter -S53026S Posterior dislocation of unspecified radial head, sequela -S53031A Nursemaid's elbow, right elbow, initial encounter -S53031D Nursemaid's elbow, right elbow, subsequent encounter -S53031S Nursemaid's elbow, right elbow, sequela -S53032A Nursemaid's elbow, left elbow, initial encounter -S53032D Nursemaid's elbow, left elbow, subsequent encounter -S53032S Nursemaid's elbow, left elbow, sequela -S53033A Nursemaid's elbow, unspecified elbow, initial encounter -S53033D Nursemaid's elbow, unspecified elbow, subsequent encounter -S53033S Nursemaid's elbow, unspecified elbow, sequela -S53091A Other subluxation of right radial head, initial encounter -S53091D Other subluxation of right radial head, subsequent encounter -S53091S Other subluxation of right radial head, sequela -S53092A Other subluxation of left radial head, initial encounter -S53092D Other subluxation of left radial head, subsequent encounter -S53092S Other subluxation of left radial head, sequela -S53093A Other subluxation of unspecified radial head, initial encounter -S53093D Other subluxation of unspecified radial head, subsequent encounter -S53093S Other subluxation of unspecified radial head, sequela -S53094A Other dislocation of right radial head, initial encounter -S53094D Other dislocation of right radial head, subsequent encounter -S53094S Other dislocation of right radial head, sequela -S53095A Other dislocation of left radial head, initial encounter -S53095D Other dislocation of left radial head, subsequent encounter -S53095S Other dislocation of left radial head, sequela -S53096A Other dislocation of unspecified radial head, initial encounter -S53096D Other dislocation of unspecified radial head, subsequent encounter -S53096S Other dislocation of unspecified radial head, sequela -S53101A Unspecified subluxation of right ulnohumeral joint, initial encounter -S53101D Unspecified subluxation of right ulnohumeral joint, subsequent encounter -S53101S Unspecified subluxation of right ulnohumeral joint, sequela -S53102A Unspecified subluxation of left ulnohumeral joint, initial encounter -S53102D Unspecified subluxation of left ulnohumeral joint, subsequent encounter -S53102S Unspecified subluxation of left ulnohumeral joint, sequela -S53103A Unspecified subluxation of unspecified ulnohumeral joint, initial encounter -S53103D Unspecified subluxation of unspecified ulnohumeral joint, subsequent encounter -S53103S Unspecified subluxation of unspecified ulnohumeral joint, sequela -S53104A Unspecified dislocation of right ulnohumeral joint, initial encounter -S53104D Unspecified dislocation of right ulnohumeral joint, subsequent encounter -S53104S Unspecified dislocation of right ulnohumeral joint, sequela -S53105A Unspecified dislocation of left ulnohumeral joint, initial encounter -S53105D Unspecified dislocation of left ulnohumeral joint, subsequent encounter -S53105S Unspecified dislocation of left ulnohumeral joint, sequela -S53106A Unspecified dislocation of unspecified ulnohumeral joint, initial encounter -S53106D Unspecified dislocation of unspecified ulnohumeral joint, subsequent encounter -S53106S Unspecified dislocation of unspecified ulnohumeral joint, sequela -S53111A Anterior subluxation of right ulnohumeral joint, initial encounter -S53111D Anterior subluxation of right ulnohumeral joint, subsequent encounter -S53111S Anterior subluxation of right ulnohumeral joint, sequela -S53112A Anterior subluxation of left ulnohumeral joint, initial encounter -S53112D Anterior subluxation of left ulnohumeral joint, subsequent encounter -S53112S Anterior subluxation of left ulnohumeral joint, sequela -S53113A Anterior subluxation of unspecified ulnohumeral joint, initial encounter -S53113D Anterior subluxation of unspecified ulnohumeral joint, subsequent encounter -S53113S Anterior subluxation of unspecified ulnohumeral joint, sequela -S53114A Anterior dislocation of right ulnohumeral joint, initial encounter -S53114D Anterior dislocation of right ulnohumeral joint, subsequent encounter -S53114S Anterior dislocation of right ulnohumeral joint, sequela -S53115A Anterior dislocation of left ulnohumeral joint, initial encounter -S53115D Anterior dislocation of left ulnohumeral joint, subsequent encounter -S53115S Anterior dislocation of left ulnohumeral joint, sequela -S53116A Anterior dislocation of unspecified ulnohumeral joint, initial encounter -S53116D Anterior dislocation of unspecified ulnohumeral joint, subsequent encounter -S53116S Anterior dislocation of unspecified ulnohumeral joint, sequela -S53121A Posterior subluxation of right ulnohumeral joint, initial encounter -S53121D Posterior subluxation of right ulnohumeral joint, subsequent encounter -S53121S Posterior subluxation of right ulnohumeral joint, sequela -S53122A Posterior subluxation of left ulnohumeral joint, initial encounter -S53122D Posterior subluxation of left ulnohumeral joint, subsequent encounter -S53122S Posterior subluxation of left ulnohumeral joint, sequela -S53123A Posterior subluxation of unspecified ulnohumeral joint, initial encounter -S53123D Posterior subluxation of unspecified ulnohumeral joint, subsequent encounter -S53123S Posterior subluxation of unspecified ulnohumeral joint, sequela -S53124A Posterior dislocation of right ulnohumeral joint, initial encounter -S53124D Posterior dislocation of right ulnohumeral joint, subsequent encounter -S53124S Posterior dislocation of right ulnohumeral joint, sequela -S53125A Posterior dislocation of left ulnohumeral joint, initial encounter -S53125D Posterior dislocation of left ulnohumeral joint, subsequent encounter -S53125S Posterior dislocation of left ulnohumeral joint, sequela -S53126A Posterior dislocation of unspecified ulnohumeral joint, initial encounter -S53126D Posterior dislocation of unspecified ulnohumeral joint, subsequent encounter -S53126S Posterior dislocation of unspecified ulnohumeral joint, sequela -S53131A Medial subluxation of right ulnohumeral joint, initial encounter -S53131D Medial subluxation of right ulnohumeral joint, subsequent encounter -S53131S Medial subluxation of right ulnohumeral joint, sequela -S53132A Medial subluxation of left ulnohumeral joint, initial encounter -S53132D Medial subluxation of left ulnohumeral joint, subsequent encounter -S53132S Medial subluxation of left ulnohumeral joint, sequela -S53133A Medial subluxation of unspecified ulnohumeral joint, initial encounter -S53133D Medial subluxation of unspecified ulnohumeral joint, subsequent encounter -S53133S Medial subluxation of unspecified ulnohumeral joint, sequela -S53134A Medial dislocation of right ulnohumeral joint, initial encounter -S53134D Medial dislocation of right ulnohumeral joint, subsequent encounter -S53134S Medial dislocation of right ulnohumeral joint, sequela -S53135A Medial dislocation of left ulnohumeral joint, initial encounter -S53135D Medial dislocation of left ulnohumeral joint, subsequent encounter -S53135S Medial dislocation of left ulnohumeral joint, sequela -S53136A Medial dislocation of unspecified ulnohumeral joint, initial encounter -S53136D Medial dislocation of unspecified ulnohumeral joint, subsequent encounter -S53136S Medial dislocation of unspecified ulnohumeral joint, sequela -S53141A Lateral subluxation of right ulnohumeral joint, initial encounter -S53141D Lateral subluxation of right ulnohumeral joint, subsequent encounter -S53141S Lateral subluxation of right ulnohumeral joint, sequela -S53142A Lateral subluxation of left ulnohumeral joint, initial encounter -S53142D Lateral subluxation of left ulnohumeral joint, subsequent encounter -S53142S Lateral subluxation of left ulnohumeral joint, sequela -S53143A Lateral subluxation of unspecified ulnohumeral joint, initial encounter -S53143D Lateral subluxation of unspecified ulnohumeral joint, subsequent encounter -S53143S Lateral subluxation of unspecified ulnohumeral joint, sequela -S53144A Lateral dislocation of right ulnohumeral joint, initial encounter -S53144D Lateral dislocation of right ulnohumeral joint, subsequent encounter -S53144S Lateral dislocation of right ulnohumeral joint, sequela -S53145A Lateral dislocation of left ulnohumeral joint, initial encounter -S53145D Lateral dislocation of left ulnohumeral joint, subsequent encounter -S53145S Lateral dislocation of left ulnohumeral joint, sequela -S53146A Lateral dislocation of unspecified ulnohumeral joint, initial encounter -S53146D Lateral dislocation of unspecified ulnohumeral joint, subsequent encounter -S53146S Lateral dislocation of unspecified ulnohumeral joint, sequela -S53191A Other subluxation of right ulnohumeral joint, initial encounter -S53191D Other subluxation of right ulnohumeral joint, subsequent encounter -S53191S Other subluxation of right ulnohumeral joint, sequela -S53192A Other subluxation of left ulnohumeral joint, initial encounter -S53192D Other subluxation of left ulnohumeral joint, subsequent encounter -S53192S Other subluxation of left ulnohumeral joint, sequela -S53193A Other subluxation of unspecified ulnohumeral joint, initial encounter -S53193D Other subluxation of unspecified ulnohumeral joint, subsequent encounter -S53193S Other subluxation of unspecified ulnohumeral joint, sequela -S53194A Other dislocation of right ulnohumeral joint, initial encounter -S53194D Other dislocation of right ulnohumeral joint, subsequent encounter -S53194S Other dislocation of right ulnohumeral joint, sequela -S53195A Other dislocation of left ulnohumeral joint, initial encounter -S53195D Other dislocation of left ulnohumeral joint, subsequent encounter -S53195S Other dislocation of left ulnohumeral joint, sequela -S53196A Other dislocation of unspecified ulnohumeral joint, initial encounter -S53196D Other dislocation of unspecified ulnohumeral joint, subsequent encounter -S53196S Other dislocation of unspecified ulnohumeral joint, sequela -S5320XA Traumatic rupture of unspecified radial collateral ligament, initial encounter -S5320XD Traumatic rupture of unspecified radial collateral ligament, subsequent encounter -S5320XS Traumatic rupture of unspecified radial collateral ligament, sequela -S5321XA Traumatic rupture of right radial collateral ligament, initial encounter -S5321XD Traumatic rupture of right radial collateral ligament, subsequent encounter -S5321XS Traumatic rupture of right radial collateral ligament, sequela -S5322XA Traumatic rupture of left radial collateral ligament, initial encounter -S5322XD Traumatic rupture of left radial collateral ligament, subsequent encounter -S5322XS Traumatic rupture of left radial collateral ligament, sequela -S5330XA Traumatic rupture of unspecified ulnar collateral ligament, initial encounter -S5330XD Traumatic rupture of unspecified ulnar collateral ligament, subsequent encounter -S5330XS Traumatic rupture of unspecified ulnar collateral ligament, sequela -S5331XA Traumatic rupture of right ulnar collateral ligament, initial encounter -S5331XD Traumatic rupture of right ulnar collateral ligament, subsequent encounter -S5331XS Traumatic rupture of right ulnar collateral ligament, sequela -S5332XA Traumatic rupture of left ulnar collateral ligament, initial encounter -S5332XD Traumatic rupture of left ulnar collateral ligament, subsequent encounter -S5332XS Traumatic rupture of left ulnar collateral ligament, sequela -S53401A Unspecified sprain of right elbow, initial encounter -S53401D Unspecified sprain of right elbow, subsequent encounter -S53401S Unspecified sprain of right elbow, sequela -S53402A Unspecified sprain of left elbow, initial encounter -S53402D Unspecified sprain of left elbow, subsequent encounter -S53402S Unspecified sprain of left elbow, sequela -S53409A Unspecified sprain of unspecified elbow, initial encounter -S53409D Unspecified sprain of unspecified elbow, subsequent encounter -S53409S Unspecified sprain of unspecified elbow, sequela -S53411A Radiohumeral (joint) sprain of right elbow, initial encounter -S53411D Radiohumeral (joint) sprain of right elbow, subsequent encounter -S53411S Radiohumeral (joint) sprain of right elbow, sequela -S53412A Radiohumeral (joint) sprain of left elbow, initial encounter -S53412D Radiohumeral (joint) sprain of left elbow, subsequent encounter -S53412S Radiohumeral (joint) sprain of left elbow, sequela -S53419A Radiohumeral (joint) sprain of unspecified elbow, initial encounter -S53419D Radiohumeral (joint) sprain of unspecified elbow, subsequent encounter -S53419S Radiohumeral (joint) sprain of unspecified elbow, sequela -S53421A Ulnohumeral (joint) sprain of right elbow, initial encounter -S53421D Ulnohumeral (joint) sprain of right elbow, subsequent encounter -S53421S Ulnohumeral (joint) sprain of right elbow, sequela -S53422A Ulnohumeral (joint) sprain of left elbow, initial encounter -S53422D Ulnohumeral (joint) sprain of left elbow, subsequent encounter -S53422S Ulnohumeral (joint) sprain of left elbow, sequela -S53429A Ulnohumeral (joint) sprain of unspecified elbow, initial encounter -S53429D Ulnohumeral (joint) sprain of unspecified elbow, subsequent encounter -S53429S Ulnohumeral (joint) sprain of unspecified elbow, sequela -S53431A Radial collateral ligament sprain of right elbow, initial encounter -S53431D Radial collateral ligament sprain of right elbow, subsequent encounter -S53431S Radial collateral ligament sprain of right elbow, sequela -S53432A Radial collateral ligament sprain of left elbow, initial encounter -S53432D Radial collateral ligament sprain of left elbow, subsequent encounter -S53432S Radial collateral ligament sprain of left elbow, sequela -S53439A Radial collateral ligament sprain of unspecified elbow, initial encounter -S53439D Radial collateral ligament sprain of unspecified elbow, subsequent encounter -S53439S Radial collateral ligament sprain of unspecified elbow, sequela -S53441A Ulnar collateral ligament sprain of right elbow, initial encounter -S53441D Ulnar collateral ligament sprain of right elbow, subsequent encounter -S53441S Ulnar collateral ligament sprain of right elbow, sequela -S53442A Ulnar collateral ligament sprain of left elbow, initial encounter -S53442D Ulnar collateral ligament sprain of left elbow, subsequent encounter -S53442S Ulnar collateral ligament sprain of left elbow, sequela -S53449A Ulnar collateral ligament sprain of unspecified elbow, initial encounter -S53449D Ulnar collateral ligament sprain of unspecified elbow, subsequent encounter -S53449S Ulnar collateral ligament sprain of unspecified elbow, sequela -S53491A Other sprain of right elbow, initial encounter -S53491D Other sprain of right elbow, subsequent encounter -S53491S Other sprain of right elbow, sequela -S53492A Other sprain of left elbow, initial encounter -S53492D Other sprain of left elbow, subsequent encounter -S53492S Other sprain of left elbow, sequela -S53499A Other sprain of unspecified elbow, initial encounter -S53499D Other sprain of unspecified elbow, subsequent encounter -S53499S Other sprain of unspecified elbow, sequela -S5400XA Injury of ulnar nerve at forearm level, unspecified arm, initial encounter -S5400XD Injury of ulnar nerve at forearm level, unspecified arm, subsequent encounter -S5400XS Injury of ulnar nerve at forearm level, unspecified arm, sequela -S5401XA Injury of ulnar nerve at forearm level, right arm, initial encounter -S5401XD Injury of ulnar nerve at forearm level, right arm, subsequent encounter -S5401XS Injury of ulnar nerve at forearm level, right arm, sequela -S5402XA Injury of ulnar nerve at forearm level, left arm, initial encounter -S5402XD Injury of ulnar nerve at forearm level, left arm, subsequent encounter -S5402XS Injury of ulnar nerve at forearm level, left arm, sequela -S5410XA Injury of median nerve at forearm level, unspecified arm, initial encounter -S5410XD Injury of median nerve at forearm level, unspecified arm, subsequent encounter -S5410XS Injury of median nerve at forearm level, unspecified arm, sequela -S5411XA Injury of median nerve at forearm level, right arm, initial encounter -S5411XD Injury of median nerve at forearm level, right arm, subsequent encounter -S5411XS Injury of median nerve at forearm level, right arm, sequela -S5412XA Injury of median nerve at forearm level, left arm, initial encounter -S5412XD Injury of median nerve at forearm level, left arm, subsequent encounter -S5412XS Injury of median nerve at forearm level, left arm, sequela -S5420XA Injury of radial nerve at forearm level, unspecified arm, initial encounter -S5420XD Injury of radial nerve at forearm level, unspecified arm, subsequent encounter -S5420XS Injury of radial nerve at forearm level, unspecified arm, sequela -S5421XA Injury of radial nerve at forearm level, right arm, initial encounter -S5421XD Injury of radial nerve at forearm level, right arm, subsequent encounter -S5421XS Injury of radial nerve at forearm level, right arm, sequela -S5422XA Injury of radial nerve at forearm level, left arm, initial encounter -S5422XD Injury of radial nerve at forearm level, left arm, subsequent encounter -S5422XS Injury of radial nerve at forearm level, left arm, sequela -S5430XA Injury of cutaneous sensory nerve at forearm level, unspecified arm, initial encounter -S5430XD Injury of cutaneous sensory nerve at forearm level, unspecified arm, subsequent encounter -S5430XS Injury of cutaneous sensory nerve at forearm level, unspecified arm, sequela -S5431XA Injury of cutaneous sensory nerve at forearm level, right arm, initial encounter -S5431XD Injury of cutaneous sensory nerve at forearm level, right arm, subsequent encounter -S5431XS Injury of cutaneous sensory nerve at forearm level, right arm, sequela -S5432XA Injury of cutaneous sensory nerve at forearm level, left arm, initial encounter -S5432XD Injury of cutaneous sensory nerve at forearm level, left arm, subsequent encounter -S5432XS Injury of cutaneous sensory nerve at forearm level, left arm, sequela -S548X1A Unspecified injury of other nerves at forearm level, right arm, initial encounter -S548X1D Unspecified injury of other nerves at forearm level, right arm, subsequent encounter -S548X1S Unspecified injury of other nerves at forearm level, right arm, sequela -S548X2A Unspecified injury of other nerves at forearm level, left arm, initial encounter -S548X2D Unspecified injury of other nerves at forearm level, left arm, subsequent encounter -S548X2S Unspecified injury of other nerves at forearm level, left arm, sequela -S548X9A Unspecified injury of other nerves at forearm level, unspecified arm, initial encounter -S548X9D Unspecified injury of other nerves at forearm level, unspecified arm, subsequent encounter -S548X9S Unspecified injury of other nerves at forearm level, unspecified arm, sequela -S5490XA Injury of unspecified nerve at forearm level, unspecified arm, initial encounter -S5490XD Injury of unspecified nerve at forearm level, unspecified arm, subsequent encounter -S5490XS Injury of unspecified nerve at forearm level, unspecified arm, sequela -S5491XA Injury of unspecified nerve at forearm level, right arm, initial encounter -S5491XD Injury of unspecified nerve at forearm level, right arm, subsequent encounter -S5491XS Injury of unspecified nerve at forearm level, right arm, sequela -S5492XA Injury of unspecified nerve at forearm level, left arm, initial encounter -S5492XD Injury of unspecified nerve at forearm level, left arm, subsequent encounter -S5492XS Injury of unspecified nerve at forearm level, left arm, sequela -S55001A Unspecified injury of ulnar artery at forearm level, right arm, initial encounter -S55001D Unspecified injury of ulnar artery at forearm level, right arm, subsequent encounter -S55001S Unspecified injury of ulnar artery at forearm level, right arm, sequela -S55002A Unspecified injury of ulnar artery at forearm level, left arm, initial encounter -S55002D Unspecified injury of ulnar artery at forearm level, left arm, subsequent encounter -S55002S Unspecified injury of ulnar artery at forearm level, left arm, sequela -S55009A Unspecified injury of ulnar artery at forearm level, unspecified arm, initial encounter -S55009D Unspecified injury of ulnar artery at forearm level, unspecified arm, subsequent encounter -S55009S Unspecified injury of ulnar artery at forearm level, unspecified arm, sequela -S55011A Laceration of ulnar artery at forearm level, right arm, initial encounter -S55011D Laceration of ulnar artery at forearm level, right arm, subsequent encounter -S55011S Laceration of ulnar artery at forearm level, right arm, sequela -S55012A Laceration of ulnar artery at forearm level, left arm, initial encounter -S55012D Laceration of ulnar artery at forearm level, left arm, subsequent encounter -S55012S Laceration of ulnar artery at forearm level, left arm, sequela -S55019A Laceration of ulnar artery at forearm level, unspecified arm, initial encounter -S55019D Laceration of ulnar artery at forearm level, unspecified arm, subsequent encounter -S55019S Laceration of ulnar artery at forearm level, unspecified arm, sequela -S55091A Other specified injury of ulnar artery at forearm level, right arm, initial encounter -S55091D Other specified injury of ulnar artery at forearm level, right arm, subsequent encounter -S55091S Other specified injury of ulnar artery at forearm level, right arm, sequela -S55092A Other specified injury of ulnar artery at forearm level, left arm, initial encounter -S55092D Other specified injury of ulnar artery at forearm level, left arm, subsequent encounter -S55092S Other specified injury of ulnar artery at forearm level, left arm, sequela -S55099A Other specified injury of ulnar artery at forearm level, unspecified arm, initial encounter -S55099D Other specified injury of ulnar artery at forearm level, unspecified arm, subsequent encounter -S55099S Other specified injury of ulnar artery at forearm level, unspecified arm, sequela -S55101A Unspecified injury of radial artery at forearm level, right arm, initial encounter -S55101D Unspecified injury of radial artery at forearm level, right arm, subsequent encounter -S55101S Unspecified injury of radial artery at forearm level, right arm, sequela -S55102A Unspecified injury of radial artery at forearm level, left arm, initial encounter -S55102D Unspecified injury of radial artery at forearm level, left arm, subsequent encounter -S55102S Unspecified injury of radial artery at forearm level, left arm, sequela -S55109A Unspecified injury of radial artery at forearm level, unspecified arm, initial encounter -S55109D Unspecified injury of radial artery at forearm level, unspecified arm, subsequent encounter -S55109S Unspecified injury of radial artery at forearm level, unspecified arm, sequela -S55111A Laceration of radial artery at forearm level, right arm, initial encounter -S55111D Laceration of radial artery at forearm level, right arm, subsequent encounter -S55111S Laceration of radial artery at forearm level, right arm, sequela -S55112A Laceration of radial artery at forearm level, left arm, initial encounter -S55112D Laceration of radial artery at forearm level, left arm, subsequent encounter -S55112S Laceration of radial artery at forearm level, left arm, sequela -S55119A Laceration of radial artery at forearm level, unspecified arm, initial encounter -S55119D Laceration of radial artery at forearm level, unspecified arm, subsequent encounter -S55119S Laceration of radial artery at forearm level, unspecified arm, sequela -S55191A Other specified injury of radial artery at forearm level, right arm, initial encounter -S55191D Other specified injury of radial artery at forearm level, right arm, subsequent encounter -S55191S Other specified injury of radial artery at forearm level, right arm, sequela -S55192A Other specified injury of radial artery at forearm level, left arm, initial encounter -S55192D Other specified injury of radial artery at forearm level, left arm, subsequent encounter -S55192S Other specified injury of radial artery at forearm level, left arm, sequela -S55199A Other specified injury of radial artery at forearm level, unspecified arm, initial encounter -S55199D Other specified injury of radial artery at forearm level, unspecified arm, subsequent encounter -S55199S Other specified injury of radial artery at forearm level, unspecified arm, sequela -S55201A Unspecified injury of vein at forearm level, right arm, initial encounter -S55201D Unspecified injury of vein at forearm level, right arm, subsequent encounter -S55201S Unspecified injury of vein at forearm level, right arm, sequela -S55202A Unspecified injury of vein at forearm level, left arm, initial encounter -S55202D Unspecified injury of vein at forearm level, left arm, subsequent encounter -S55202S Unspecified injury of vein at forearm level, left arm, sequela -S55209A Unspecified injury of vein at forearm level, unspecified arm, initial encounter -S55209D Unspecified injury of vein at forearm level, unspecified arm, subsequent encounter -S55209S Unspecified injury of vein at forearm level, unspecified arm, sequela -S55211A Laceration of vein at forearm level, right arm, initial encounter -S55211D Laceration of vein at forearm level, right arm, subsequent encounter -S55211S Laceration of vein at forearm level, right arm, sequela -S55212A Laceration of vein at forearm level, left arm, initial encounter -S55212D Laceration of vein at forearm level, left arm, subsequent encounter -S55212S Laceration of vein at forearm level, left arm, sequela -S55219A Laceration of vein at forearm level, unspecified arm, initial encounter -S55219D Laceration of vein at forearm level, unspecified arm, subsequent encounter -S55219S Laceration of vein at forearm level, unspecified arm, sequela -S55291A Other specified injury of vein at forearm level, right arm, initial encounter -S55291D Other specified injury of vein at forearm level, right arm, subsequent encounter -S55291S Other specified injury of vein at forearm level, right arm, sequela -S55292A Other specified injury of vein at forearm level, left arm, initial encounter -S55292D Other specified injury of vein at forearm level, left arm, subsequent encounter -S55292S Other specified injury of vein at forearm level, left arm, sequela -S55299A Other specified injury of vein at forearm level, unspecified arm, initial encounter -S55299D Other specified injury of vein at forearm level, unspecified arm, subsequent encounter -S55299S Other specified injury of vein at forearm level, unspecified arm, sequela -S55801A Unspecified injury of other blood vessels at forearm level, right arm, initial encounter -S55801D Unspecified injury of other blood vessels at forearm level, right arm, subsequent encounter -S55801S Unspecified injury of other blood vessels at forearm level, right arm, sequela -S55802A Unspecified injury of other blood vessels at forearm level, left arm, initial encounter -S55802D Unspecified injury of other blood vessels at forearm level, left arm, subsequent encounter -S55802S Unspecified injury of other blood vessels at forearm level, left arm, sequela -S55809A Unspecified injury of other blood vessels at forearm level, unspecified arm, initial encounter -S55809D Unspecified injury of other blood vessels at forearm level, unspecified arm, subsequent encounter -S55809S Unspecified injury of other blood vessels at forearm level, unspecified arm, sequela -S55811A Laceration of other blood vessels at forearm level, right arm, initial encounter -S55811D Laceration of other blood vessels at forearm level, right arm, subsequent encounter -S55811S Laceration of other blood vessels at forearm level, right arm, sequela -S55812A Laceration of other blood vessels at forearm level, left arm, initial encounter -S55812D Laceration of other blood vessels at forearm level, left arm, subsequent encounter -S55812S Laceration of other blood vessels at forearm level, left arm, sequela -S55819A Laceration of other blood vessels at forearm level, unspecified arm, initial encounter -S55819D Laceration of other blood vessels at forearm level, unspecified arm, subsequent encounter -S55819S Laceration of other blood vessels at forearm level, unspecified arm, sequela -S55891A Other specified injury of other blood vessels at forearm level, right arm, initial encounter -S55891D Other specified injury of other blood vessels at forearm level, right arm, subsequent encounter -S55891S Other specified injury of other blood vessels at forearm level, right arm, sequela -S55892A Other specified injury of other blood vessels at forearm level, left arm, initial encounter -S55892D Other specified injury of other blood vessels at forearm level, left arm, subsequent encounter -S55892S Other specified injury of other blood vessels at forearm level, left arm, sequela -S55899A Other specified injury of other blood vessels at forearm level, unspecified arm, initial encounter -S55899D Other specified injury of other blood vessels at forearm level, unspecified arm, subsequent encounter -S55899S Other specified injury of other blood vessels at forearm level, unspecified arm, sequela -S55901A Unspecified injury of unspecified blood vessel at forearm level, right arm, initial encounter -S55901D Unspecified injury of unspecified blood vessel at forearm level, right arm, subsequent encounter -S55901S Unspecified injury of unspecified blood vessel at forearm level, right arm, sequela -S55902A Unspecified injury of unspecified blood vessel at forearm level, left arm, initial encounter -S55902D Unspecified injury of unspecified blood vessel at forearm level, left arm, subsequent encounter -S55902S Unspecified injury of unspecified blood vessel at forearm level, left arm, sequela -S55909A Unspecified injury of unspecified blood vessel at forearm level, unspecified arm, initial encounter -S55909D Unspecified injury of unspecified blood vessel at forearm level, unspecified arm, subsequent encounter -S55909S Unspecified injury of unspecified blood vessel at forearm level, unspecified arm, sequela -S55911A Laceration of unspecified blood vessel at forearm level, right arm, initial encounter -S55911D Laceration of unspecified blood vessel at forearm level, right arm, subsequent encounter -S55911S Laceration of unspecified blood vessel at forearm level, right arm, sequela -S55912A Laceration of unspecified blood vessel at forearm level, left arm, initial encounter -S55912D Laceration of unspecified blood vessel at forearm level, left arm, subsequent encounter -S55912S Laceration of unspecified blood vessel at forearm level, left arm, sequela -S55919A Laceration of unspecified blood vessel at forearm level, unspecified arm, initial encounter -S55919D Laceration of unspecified blood vessel at forearm level, unspecified arm, subsequent encounter -S55919S Laceration of unspecified blood vessel at forearm level, unspecified arm, sequela -S55991A Other specified injury of unspecified blood vessel at forearm level, right arm, initial encounter -S55991D Other specified injury of unspecified blood vessel at forearm level, right arm, subsequent encounter -S55991S Other specified injury of unspecified blood vessel at forearm level, right arm, sequela -S55992A Other specified injury of unspecified blood vessel at forearm level, left arm, initial encounter -S55992D Other specified injury of unspecified blood vessel at forearm level, left arm, subsequent encounter -S55992S Other specified injury of unspecified blood vessel at forearm level, left arm, sequela -S55999A Other specified injury of unspecified blood vessel at forearm level, unspecified arm, initial encounter -S55999D Other specified injury of unspecified blood vessel at forearm level, unspecified arm, subsequent encounter -S55999S Other specified injury of unspecified blood vessel at forearm level, unspecified arm, sequela -S56001A Unspecified injury of flexor muscle, fascia and tendon of right thumb at forearm level, initial encounter -S56001D Unspecified injury of flexor muscle, fascia and tendon of right thumb at forearm level, subsequent encounter -S56001S Unspecified injury of flexor muscle, fascia and tendon of right thumb at forearm level, sequela -S56002A Unspecified injury of flexor muscle, fascia and tendon of left thumb at forearm level, initial encounter -S56002D Unspecified injury of flexor muscle, fascia and tendon of left thumb at forearm level, subsequent encounter -S56002S Unspecified injury of flexor muscle, fascia and tendon of left thumb at forearm level, sequela -S56009A Unspecified injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, initial encounter -S56009D Unspecified injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, subsequent encounter -S56009S Unspecified injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, sequela -S56011A Strain of flexor muscle, fascia and tendon of right thumb at forearm level, initial encounter -S56011D Strain of flexor muscle, fascia and tendon of right thumb at forearm level, subsequent encounter -S56011S Strain of flexor muscle, fascia and tendon of right thumb at forearm level, sequela -S56012A Strain of flexor muscle, fascia and tendon of left thumb at forearm level, initial encounter -S56012D Strain of flexor muscle, fascia and tendon of left thumb at forearm level, subsequent encounter -S56012S Strain of flexor muscle, fascia and tendon of left thumb at forearm level, sequela -S56019A Strain of flexor muscle, fascia and tendon of unspecified thumb at forearm level, initial encounter -S56019D Strain of flexor muscle, fascia and tendon of unspecified thumb at forearm level, subsequent encounter -S56019S Strain of flexor muscle, fascia and tendon of unspecified thumb at forearm level, sequela -S56021A Laceration of flexor muscle, fascia and tendon of right thumb at forearm level, initial encounter -S56021D Laceration of flexor muscle, fascia and tendon of right thumb at forearm level, subsequent encounter -S56021S Laceration of flexor muscle, fascia and tendon of right thumb at forearm level, sequela -S56022A Laceration of flexor muscle, fascia and tendon of left thumb at forearm level, initial encounter -S56022D Laceration of flexor muscle, fascia and tendon of left thumb at forearm level, subsequent encounter -S56022S Laceration of flexor muscle, fascia and tendon of left thumb at forearm level, sequela -S56029A Laceration of flexor muscle, fascia and tendon of unspecified thumb at forearm level, initial encounter -S56029D Laceration of flexor muscle, fascia and tendon of unspecified thumb at forearm level, subsequent encounter -S56029S Laceration of flexor muscle, fascia and tendon of unspecified thumb at forearm level, sequela -S56091A Other injury of flexor muscle, fascia and tendon of right thumb at forearm level, initial encounter -S56091D Other injury of flexor muscle, fascia and tendon of right thumb at forearm level, subsequent encounter -S56091S Other injury of flexor muscle, fascia and tendon of right thumb at forearm level, sequela -S56092A Other injury of flexor muscle, fascia and tendon of left thumb at forearm level, initial encounter -S56092D Other injury of flexor muscle, fascia and tendon of left thumb at forearm level, subsequent encounter -S56092S Other injury of flexor muscle, fascia and tendon of left thumb at forearm level, sequela -S56099A Other injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, initial encounter -S56099D Other injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, subsequent encounter -S56099S Other injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, sequela -S56101A Unspecified injury of flexor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56101D Unspecified injury of flexor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56101S Unspecified injury of flexor muscle, fascia and tendon of right index finger at forearm level, sequela -S56102A Unspecified injury of flexor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56102D Unspecified injury of flexor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56102S Unspecified injury of flexor muscle, fascia and tendon of left index finger at forearm level, sequela -S56103A Unspecified injury of flexor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56103D Unspecified injury of flexor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56103S Unspecified injury of flexor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56104A Unspecified injury of flexor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56104D Unspecified injury of flexor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56104S Unspecified injury of flexor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56105A Unspecified injury of flexor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56105D Unspecified injury of flexor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56105S Unspecified injury of flexor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56106A Unspecified injury of flexor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56106D Unspecified injury of flexor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56106S Unspecified injury of flexor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56107A Unspecified injury of flexor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56107D Unspecified injury of flexor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56107S Unspecified injury of flexor muscle, fascia and tendon of right little finger at forearm level, sequela -S56108A Unspecified injury of flexor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56108D Unspecified injury of flexor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56108S Unspecified injury of flexor muscle, fascia and tendon of left little finger at forearm level, sequela -S56109A Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56109D Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56109S Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56111A Strain of flexor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56111D Strain of flexor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56111S Strain of flexor muscle, fascia and tendon of right index finger at forearm level, sequela -S56112A Strain of flexor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56112D Strain of flexor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56112S Strain of flexor muscle, fascia and tendon of left index finger at forearm level, sequela -S56113A Strain of flexor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56113D Strain of flexor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56113S Strain of flexor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56114A Strain of flexor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56114D Strain of flexor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56114S Strain of flexor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56115A Strain of flexor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56115D Strain of flexor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56115S Strain of flexor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56116A Strain of flexor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56116D Strain of flexor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56116S Strain of flexor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56117A Strain of flexor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56117D Strain of flexor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56117S Strain of flexor muscle, fascia and tendon of right little finger at forearm level, sequela -S56118A Strain of flexor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56118D Strain of flexor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56118S Strain of flexor muscle, fascia and tendon of left little finger at forearm level, sequela -S56119A Strain of flexor muscle, fascia and tendon of finger of unspecified finger at forearm level, initial encounter -S56119D Strain of flexor muscle, fascia and tendon of finger of unspecified finger at forearm level, subsequent encounter -S56119S Strain of flexor muscle, fascia and tendon of finger of unspecified finger at forearm level, sequela -S56121A Laceration of flexor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56121D Laceration of flexor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56121S Laceration of flexor muscle, fascia and tendon of right index finger at forearm level, sequela -S56122A Laceration of flexor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56122D Laceration of flexor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56122S Laceration of flexor muscle, fascia and tendon of left index finger at forearm level, sequela -S56123A Laceration of flexor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56123D Laceration of flexor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56123S Laceration of flexor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56124A Laceration of flexor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56124D Laceration of flexor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56124S Laceration of flexor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56125A Laceration of flexor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56125D Laceration of flexor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56125S Laceration of flexor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56126A Laceration of flexor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56126D Laceration of flexor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56126S Laceration of flexor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56127A Laceration of flexor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56127D Laceration of flexor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56127S Laceration of flexor muscle, fascia and tendon of right little finger at forearm level, sequela -S56128A Laceration of flexor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56128D Laceration of flexor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56128S Laceration of flexor muscle, fascia and tendon of left little finger at forearm level, sequela -S56129A Laceration of flexor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56129D Laceration of flexor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56129S Laceration of flexor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56191A Other injury of flexor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56191D Other injury of flexor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56191S Other injury of flexor muscle, fascia and tendon of right index finger at forearm level, sequela -S56192A Other injury of flexor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56192D Other injury of flexor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56192S Other injury of flexor muscle, fascia and tendon of left index finger at forearm level, sequela -S56193A Other injury of flexor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56193D Other injury of flexor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56193S Other injury of flexor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56194A Other injury of flexor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56194D Other injury of flexor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56194S Other injury of flexor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56195A Other injury of flexor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56195D Other injury of flexor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56195S Other injury of flexor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56196A Other injury of flexor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56196D Other injury of flexor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56196S Other injury of flexor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56197A Other injury of flexor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56197D Other injury of flexor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56197S Other injury of flexor muscle, fascia and tendon of right little finger at forearm level, sequela -S56198A Other injury of flexor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56198D Other injury of flexor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56198S Other injury of flexor muscle, fascia and tendon of left little finger at forearm level, sequela -S56199A Other injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56199D Other injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56199S Other injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56201A Unspecified injury of other flexor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56201D Unspecified injury of other flexor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56201S Unspecified injury of other flexor muscle, fascia and tendon at forearm level, right arm, sequela -S56202A Unspecified injury of other flexor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56202D Unspecified injury of other flexor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56202S Unspecified injury of other flexor muscle, fascia and tendon at forearm level, left arm, sequela -S56209A Unspecified injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56209D Unspecified injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56209S Unspecified injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56211A Strain of other flexor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56211D Strain of other flexor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56211S Strain of other flexor muscle, fascia and tendon at forearm level, right arm, sequela -S56212A Strain of other flexor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56212D Strain of other flexor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56212S Strain of other flexor muscle, fascia and tendon at forearm level, left arm, sequela -S56219A Strain of other flexor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56219D Strain of other flexor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56219S Strain of other flexor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56221A Laceration of other flexor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56221D Laceration of other flexor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56221S Laceration of other flexor muscle, fascia and tendon at forearm level, right arm, sequela -S56222A Laceration of other flexor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56222D Laceration of other flexor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56222S Laceration of other flexor muscle, fascia and tendon at forearm level, left arm, sequela -S56229A Laceration of other flexor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56229D Laceration of other flexor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56229S Laceration of other flexor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56291A Other injury of other flexor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56291D Other injury of other flexor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56291S Other injury of other flexor muscle, fascia and tendon at forearm level, right arm, sequela -S56292A Other injury of other flexor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56292D Other injury of other flexor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56292S Other injury of other flexor muscle, fascia and tendon at forearm level, left arm, sequela -S56299A Other injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56299D Other injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56299S Other injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56301A Unspecified injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, initial encounter -S56301D Unspecified injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, subsequent encounter -S56301S Unspecified injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, sequela -S56302A Unspecified injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, initial encounter -S56302D Unspecified injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, subsequent encounter -S56302S Unspecified injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, sequela -S56309A Unspecified injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, initial encounter -S56309D Unspecified injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, subsequent encounter -S56309S Unspecified injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, sequela -S56311A Strain of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, initial encounter -S56311D Strain of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, subsequent encounter -S56311S Strain of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, sequela -S56312A Strain of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, initial encounter -S56312D Strain of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, subsequent encounter -S56312S Strain of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, sequela -S56319A Strain of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, initial encounter -S56319D Strain of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, subsequent encounter -S56319S Strain of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, sequela -S56321A Laceration of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, initial encounter -S56321D Laceration of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, subsequent encounter -S56321S Laceration of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, sequela -S56322A Laceration of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, initial encounter -S56322D Laceration of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, subsequent encounter -S56322S Laceration of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, sequela -S56329A Laceration of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, initial encounter -S56329D Laceration of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, subsequent encounter -S56329S Laceration of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, sequela -S56391A Other injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, initial encounter -S56391D Other injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, subsequent encounter -S56391S Other injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, sequela -S56392A Other injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, initial encounter -S56392D Other injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, subsequent encounter -S56392S Other injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, sequela -S56399A Other injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, initial encounter -S56399D Other injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, subsequent encounter -S56399S Other injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, sequela -S56401A Unspecified injury of extensor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56401D Unspecified injury of extensor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56401S Unspecified injury of extensor muscle, fascia and tendon of right index finger at forearm level, sequela -S56402A Unspecified injury of extensor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56402D Unspecified injury of extensor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56402S Unspecified injury of extensor muscle, fascia and tendon of left index finger at forearm level, sequela -S56403A Unspecified injury of extensor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56403D Unspecified injury of extensor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56403S Unspecified injury of extensor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56404A Unspecified injury of extensor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56404D Unspecified injury of extensor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56404S Unspecified injury of extensor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56405A Unspecified injury of extensor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56405D Unspecified injury of extensor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56405S Unspecified injury of extensor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56406A Unspecified injury of extensor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56406D Unspecified injury of extensor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56406S Unspecified injury of extensor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56407A Unspecified injury of extensor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56407D Unspecified injury of extensor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56407S Unspecified injury of extensor muscle, fascia and tendon of right little finger at forearm level, sequela -S56408A Unspecified injury of extensor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56408D Unspecified injury of extensor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56408S Unspecified injury of extensor muscle, fascia and tendon of left little finger at forearm level, sequela -S56409A Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56409D Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56409S Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56411A Strain of extensor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56411D Strain of extensor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56411S Strain of extensor muscle, fascia and tendon of right index finger at forearm level, sequela -S56412A Strain of extensor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56412D Strain of extensor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56412S Strain of extensor muscle, fascia and tendon of left index finger at forearm level, sequela -S56413A Strain of extensor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56413D Strain of extensor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56413S Strain of extensor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56414A Strain of extensor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56414D Strain of extensor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56414S Strain of extensor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56415A Strain of extensor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56415D Strain of extensor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56415S Strain of extensor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56416A Strain of extensor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56416D Strain of extensor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56416S Strain of extensor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56417A Strain of extensor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56417D Strain of extensor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56417S Strain of extensor muscle, fascia and tendon of right little finger at forearm level, sequela -S56418A Strain of extensor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56418D Strain of extensor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56418S Strain of extensor muscle, fascia and tendon of left little finger at forearm level, sequela -S56419A Strain of extensor muscle, fascia and tendon of finger, unspecified finger at forearm level, initial encounter -S56419D Strain of extensor muscle, fascia and tendon of finger, unspecified finger at forearm level, subsequent encounter -S56419S Strain of extensor muscle, fascia and tendon of finger, unspecified finger at forearm level, sequela -S56421A Laceration of extensor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56421D Laceration of extensor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56421S Laceration of extensor muscle, fascia and tendon of right index finger at forearm level, sequela -S56422A Laceration of extensor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56422D Laceration of extensor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56422S Laceration of extensor muscle, fascia and tendon of left index finger at forearm level, sequela -S56423A Laceration of extensor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56423D Laceration of extensor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56423S Laceration of extensor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56424A Laceration of extensor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56424D Laceration of extensor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56424S Laceration of extensor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56425A Laceration of extensor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56425D Laceration of extensor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56425S Laceration of extensor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56426A Laceration of extensor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56426D Laceration of extensor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56426S Laceration of extensor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56427A Laceration of extensor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56427D Laceration of extensor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56427S Laceration of extensor muscle, fascia and tendon of right little finger at forearm level, sequela -S56428A Laceration of extensor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56428D Laceration of extensor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56428S Laceration of extensor muscle, fascia and tendon of left little finger at forearm level, sequela -S56429A Laceration of extensor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56429D Laceration of extensor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56429S Laceration of extensor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56491A Other injury of extensor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56491D Other injury of extensor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56491S Other injury of extensor muscle, fascia and tendon of right index finger at forearm level, sequela -S56492A Other injury of extensor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56492D Other injury of extensor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56492S Other injury of extensor muscle, fascia and tendon of left index finger at forearm level, sequela -S56493A Other injury of extensor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56493D Other injury of extensor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56493S Other injury of extensor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56494A Other injury of extensor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56494D Other injury of extensor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56494S Other injury of extensor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56495A Other injury of extensor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56495D Other injury of extensor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56495S Other injury of extensor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56496A Other injury of extensor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56496D Other injury of extensor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56496S Other injury of extensor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56497A Other injury of extensor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56497D Other injury of extensor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56497S Other injury of extensor muscle, fascia and tendon of right little finger at forearm level, sequela -S56498A Other injury of extensor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56498D Other injury of extensor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56498S Other injury of extensor muscle, fascia and tendon of left little finger at forearm level, sequela -S56499A Other injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56499D Other injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56499S Other injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56501A Unspecified injury of other extensor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56501D Unspecified injury of other extensor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56501S Unspecified injury of other extensor muscle, fascia and tendon at forearm level, right arm, sequela -S56502A Unspecified injury of other extensor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56502D Unspecified injury of other extensor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56502S Unspecified injury of other extensor muscle, fascia and tendon at forearm level, left arm, sequela -S56509A Unspecified injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56509D Unspecified injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56509S Unspecified injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56511A Strain of other extensor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56511D Strain of other extensor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56511S Strain of other extensor muscle, fascia and tendon at forearm level, right arm, sequela -S56512A Strain of other extensor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56512D Strain of other extensor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56512S Strain of other extensor muscle, fascia and tendon at forearm level, left arm, sequela -S56519A Strain of other extensor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56519D Strain of other extensor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56519S Strain of other extensor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56521A Laceration of other extensor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56521D Laceration of other extensor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56521S Laceration of other extensor muscle, fascia and tendon at forearm level, right arm, sequela -S56522A Laceration of other extensor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56522D Laceration of other extensor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56522S Laceration of other extensor muscle, fascia and tendon at forearm level, left arm, sequela -S56529A Laceration of other extensor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56529D Laceration of other extensor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56529S Laceration of other extensor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56591A Other injury of other extensor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56591D Other injury of other extensor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56591S Other injury of other extensor muscle, fascia and tendon at forearm level, right arm, sequela -S56592A Other injury of other extensor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56592D Other injury of other extensor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56592S Other injury of other extensor muscle, fascia and tendon at forearm level, left arm, sequela -S56599A Other injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56599D Other injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56599S Other injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56801A Unspecified injury of other muscles, fascia and tendons at forearm level, right arm, initial encounter -S56801D Unspecified injury of other muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56801S Unspecified injury of other muscles, fascia and tendons at forearm level, right arm, sequela -S56802A Unspecified injury of other muscles, fascia and tendons at forearm level, left arm, initial encounter -S56802D Unspecified injury of other muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56802S Unspecified injury of other muscles, fascia and tendons at forearm level, left arm, sequela -S56809A Unspecified injury of other muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56809D Unspecified injury of other muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56809S Unspecified injury of other muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56811A Strain of other muscles, fascia and tendons at forearm level, right arm, initial encounter -S56811D Strain of other muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56811S Strain of other muscles, fascia and tendons at forearm level, right arm, sequela -S56812A Strain of other muscles, fascia and tendons at forearm level, left arm, initial encounter -S56812D Strain of other muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56812S Strain of other muscles, fascia and tendons at forearm level, left arm, sequela -S56819A Strain of other muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56819D Strain of other muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56819S Strain of other muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56821A Laceration of other muscles, fascia and tendons at forearm level, right arm, initial encounter -S56821D Laceration of other muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56821S Laceration of other muscles, fascia and tendons at forearm level, right arm, sequela -S56822A Laceration of other muscles, fascia and tendons at forearm level, left arm, initial encounter -S56822D Laceration of other muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56822S Laceration of other muscles, fascia and tendons at forearm level, left arm, sequela -S56829A Laceration of other muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56829D Laceration of other muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56829S Laceration of other muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56891A Other injury of other muscles, fascia and tendons at forearm level, right arm, initial encounter -S56891D Other injury of other muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56891S Other injury of other muscles, fascia and tendons at forearm level, right arm, sequela -S56892A Other injury of other muscles, fascia and tendons at forearm level, left arm, initial encounter -S56892D Other injury of other muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56892S Other injury of other muscles, fascia and tendons at forearm level, left arm, sequela -S56899A Other injury of other muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56899D Other injury of other muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56899S Other injury of other muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56901A Unspecified injury of unspecified muscles, fascia and tendons at forearm level, right arm, initial encounter -S56901D Unspecified injury of unspecified muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56901S Unspecified injury of unspecified muscles, fascia and tendons at forearm level, right arm, sequela -S56902A Unspecified injury of unspecified muscles, fascia and tendons at forearm level, left arm, initial encounter -S56902D Unspecified injury of unspecified muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56902S Unspecified injury of unspecified muscles, fascia and tendons at forearm level, left arm, sequela -S56909A Unspecified injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56909D Unspecified injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56909S Unspecified injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56911A Strain of unspecified muscles, fascia and tendons at forearm level, right arm, initial encounter -S56911D Strain of unspecified muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56911S Strain of unspecified muscles, fascia and tendons at forearm level, right arm, sequela -S56912A Strain of unspecified muscles, fascia and tendons at forearm level, left arm, initial encounter -S56912D Strain of unspecified muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56912S Strain of unspecified muscles, fascia and tendons at forearm level, left arm, sequela -S56919A Strain of unspecified muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56919D Strain of unspecified muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56919S Strain of unspecified muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56921A Laceration of unspecified muscles, fascia and tendons at forearm level, right arm, initial encounter -S56921D Laceration of unspecified muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56921S Laceration of unspecified muscles, fascia and tendons at forearm level, right arm, sequela -S56922A Laceration of unspecified muscles, fascia and tendons at forearm level, left arm, initial encounter -S56922D Laceration of unspecified muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56922S Laceration of unspecified muscles, fascia and tendons at forearm level, left arm, sequela -S56929A Laceration of unspecified muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56929D Laceration of unspecified muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56929S Laceration of unspecified muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56991A Other injury of unspecified muscles, fascia and tendons at forearm level, right arm, initial encounter -S56991D Other injury of unspecified muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56991S Other injury of unspecified muscles, fascia and tendons at forearm level, right arm, sequela -S56992A Other injury of unspecified muscles, fascia and tendons at forearm level, left arm, initial encounter -S56992D Other injury of unspecified muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56992S Other injury of unspecified muscles, fascia and tendons at forearm level, left arm, sequela -S56999A Other injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56999D Other injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56999S Other injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, sequela -S5700XA Crushing injury of unspecified elbow, initial encounter -S5700XD Crushing injury of unspecified elbow, subsequent encounter -S5700XS Crushing injury of unspecified elbow, sequela -S5701XA Crushing injury of right elbow, initial encounter -S5701XD Crushing injury of right elbow, subsequent encounter -S5701XS Crushing injury of right elbow, sequela -S5702XA Crushing injury of left elbow, initial encounter -S5702XD Crushing injury of left elbow, subsequent encounter -S5702XS Crushing injury of left elbow, sequela -S5780XA Crushing injury of unspecified forearm, initial encounter -S5780XD Crushing injury of unspecified forearm, subsequent encounter -S5780XS Crushing injury of unspecified forearm, sequela -S5781XA Crushing injury of right forearm, initial encounter -S5781XD Crushing injury of right forearm, subsequent encounter -S5781XS Crushing injury of right forearm, sequela -S5782XA Crushing injury of left forearm, initial encounter -S5782XD Crushing injury of left forearm, subsequent encounter -S5782XS Crushing injury of left forearm, sequela -S58011A Complete traumatic amputation at elbow level, right arm, initial encounter -S58011D Complete traumatic amputation at elbow level, right arm, subsequent encounter -S58011S Complete traumatic amputation at elbow level, right arm, sequela -S58012A Complete traumatic amputation at elbow level, left arm, initial encounter -S58012D Complete traumatic amputation at elbow level, left arm, subsequent encounter -S58012S Complete traumatic amputation at elbow level, left arm, sequela -S58019A Complete traumatic amputation at elbow level, unspecified arm, initial encounter -S58019D Complete traumatic amputation at elbow level, unspecified arm, subsequent encounter -S58019S Complete traumatic amputation at elbow level, unspecified arm, sequela -S58021A Partial traumatic amputation at elbow level, right arm, initial encounter -S58021D Partial traumatic amputation at elbow level, right arm, subsequent encounter -S58021S Partial traumatic amputation at elbow level, right arm, sequela -S58022A Partial traumatic amputation at elbow level, left arm, initial encounter -S58022D Partial traumatic amputation at elbow level, left arm, subsequent encounter -S58022S Partial traumatic amputation at elbow level, left arm, sequela -S58029A Partial traumatic amputation at elbow level, unspecified arm, initial encounter -S58029D Partial traumatic amputation at elbow level, unspecified arm, subsequent encounter -S58029S Partial traumatic amputation at elbow level, unspecified arm, sequela -S58111A Complete traumatic amputation at level between elbow and wrist, right arm, initial encounter -S58111D Complete traumatic amputation at level between elbow and wrist, right arm, subsequent encounter -S58111S Complete traumatic amputation at level between elbow and wrist, right arm, sequela -S58112A Complete traumatic amputation at level between elbow and wrist, left arm, initial encounter -S58112D Complete traumatic amputation at level between elbow and wrist, left arm, subsequent encounter -S58112S Complete traumatic amputation at level between elbow and wrist, left arm, sequela -S58119A Complete traumatic amputation at level between elbow and wrist, unspecified arm, initial encounter -S58119D Complete traumatic amputation at level between elbow and wrist, unspecified arm, subsequent encounter -S58119S Complete traumatic amputation at level between elbow and wrist, unspecified arm, sequela -S58121A Partial traumatic amputation at level between elbow and wrist, right arm, initial encounter -S58121D Partial traumatic amputation at level between elbow and wrist, right arm, subsequent encounter -S58121S Partial traumatic amputation at level between elbow and wrist, right arm, sequela -S58122A Partial traumatic amputation at level between elbow and wrist, left arm, initial encounter -S58122D Partial traumatic amputation at level between elbow and wrist, left arm, subsequent encounter -S58122S Partial traumatic amputation at level between elbow and wrist, left arm, sequela -S58129A Partial traumatic amputation at level between elbow and wrist, unspecified arm, initial encounter -S58129D Partial traumatic amputation at level between elbow and wrist, unspecified arm, subsequent encounter -S58129S Partial traumatic amputation at level between elbow and wrist, unspecified arm, sequela -S58911A Complete traumatic amputation of right forearm, level unspecified, initial encounter -S58911D Complete traumatic amputation of right forearm, level unspecified, subsequent encounter -S58911S Complete traumatic amputation of right forearm, level unspecified, sequela -S58912A Complete traumatic amputation of left forearm, level unspecified, initial encounter -S58912D Complete traumatic amputation of left forearm, level unspecified, subsequent encounter -S58912S Complete traumatic amputation of left forearm, level unspecified, sequela -S58919A Complete traumatic amputation of unspecified forearm, level unspecified, initial encounter -S58919D Complete traumatic amputation of unspecified forearm, level unspecified, subsequent encounter -S58919S Complete traumatic amputation of unspecified forearm, level unspecified, sequela -S58921A Partial traumatic amputation of right forearm, level unspecified, initial encounter -S58921D Partial traumatic amputation of right forearm, level unspecified, subsequent encounter -S58921S Partial traumatic amputation of right forearm, level unspecified, sequela -S58922A Partial traumatic amputation of left forearm, level unspecified, initial encounter -S58922D Partial traumatic amputation of left forearm, level unspecified, subsequent encounter -S58922S Partial traumatic amputation of left forearm, level unspecified, sequela -S58929A Partial traumatic amputation of unspecified forearm, level unspecified, initial encounter -S58929D Partial traumatic amputation of unspecified forearm, level unspecified, subsequent encounter -S58929S Partial traumatic amputation of unspecified forearm, level unspecified, sequela -S59001A Unspecified physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59001D Unspecified physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59001G Unspecified physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59001K Unspecified physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59001P Unspecified physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59001S Unspecified physeal fracture of lower end of ulna, right arm, sequela -S59002A Unspecified physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59002D Unspecified physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59002G Unspecified physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59002K Unspecified physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59002P Unspecified physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59002S Unspecified physeal fracture of lower end of ulna, left arm, sequela -S59009A Unspecified physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59009D Unspecified physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59009G Unspecified physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59009K Unspecified physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59009P Unspecified physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59009S Unspecified physeal fracture of lower end of ulna, unspecified arm, sequela -S59011A Salter-Harris Type I physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59011D Salter-Harris Type I physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59011G Salter-Harris Type I physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59011K Salter-Harris Type I physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59011P Salter-Harris Type I physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59011S Salter-Harris Type I physeal fracture of lower end of ulna, right arm, sequela -S59012A Salter-Harris Type I physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59012D Salter-Harris Type I physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59012G Salter-Harris Type I physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59012K Salter-Harris Type I physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59012P Salter-Harris Type I physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59012S Salter-Harris Type I physeal fracture of lower end of ulna, left arm, sequela -S59019A Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59019D Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59019G Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59019K Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59019P Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59019S Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, sequela -S59021A Salter-Harris Type II physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59021D Salter-Harris Type II physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59021G Salter-Harris Type II physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59021K Salter-Harris Type II physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59021P Salter-Harris Type II physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59021S Salter-Harris Type II physeal fracture of lower end of ulna, right arm, sequela -S59022A Salter-Harris Type II physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59022D Salter-Harris Type II physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59022G Salter-Harris Type II physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59022K Salter-Harris Type II physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59022P Salter-Harris Type II physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59022S Salter-Harris Type II physeal fracture of lower end of ulna, left arm, sequela -S59029A Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59029D Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59029G Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59029K Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59029P Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59029S Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, sequela -S59031A Salter-Harris Type III physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59031D Salter-Harris Type III physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59031G Salter-Harris Type III physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59031K Salter-Harris Type III physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59031P Salter-Harris Type III physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59031S Salter-Harris Type III physeal fracture of lower end of ulna, right arm, sequela -S59032A Salter-Harris Type III physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59032D Salter-Harris Type III physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59032G Salter-Harris Type III physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59032K Salter-Harris Type III physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59032P Salter-Harris Type III physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59032S Salter-Harris Type III physeal fracture of lower end of ulna, left arm, sequela -S59039A Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59039D Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59039G Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59039K Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59039P Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59039S Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, sequela -S59041A Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59041D Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59041G Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59041K Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59041P Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59041S Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, sequela -S59042A Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59042D Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59042G Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59042K Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59042P Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59042S Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, sequela -S59049A Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59049D Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59049G Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59049K Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59049P Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59049S Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, sequela -S59091A Other physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59091D Other physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59091G Other physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59091K Other physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59091P Other physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59091S Other physeal fracture of lower end of ulna, right arm, sequela -S59092A Other physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59092D Other physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59092G Other physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59092K Other physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59092P Other physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59092S Other physeal fracture of lower end of ulna, left arm, sequela -S59099A Other physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59099D Other physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59099G Other physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59099K Other physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59099P Other physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59099S Other physeal fracture of lower end of ulna, unspecified arm, sequela -S59101A Unspecified physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59101D Unspecified physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59101G Unspecified physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59101K Unspecified physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59101P Unspecified physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59101S Unspecified physeal fracture of upper end of radius, right arm, sequela -S59102A Unspecified physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59102D Unspecified physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59102G Unspecified physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59102K Unspecified physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59102P Unspecified physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59102S Unspecified physeal fracture of upper end of radius, left arm, sequela -S59109A Unspecified physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59109D Unspecified physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59109G Unspecified physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59109K Unspecified physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59109P Unspecified physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59109S Unspecified physeal fracture of upper end of radius, unspecified arm, sequela -S59111A Salter-Harris Type I physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59111D Salter-Harris Type I physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59111G Salter-Harris Type I physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59111K Salter-Harris Type I physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59111P Salter-Harris Type I physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59111S Salter-Harris Type I physeal fracture of upper end of radius, right arm, sequela -S59112A Salter-Harris Type I physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59112D Salter-Harris Type I physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59112G Salter-Harris Type I physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59112K Salter-Harris Type I physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59112P Salter-Harris Type I physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59112S Salter-Harris Type I physeal fracture of upper end of radius, left arm, sequela -S59119A Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59119D Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59119G Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59119K Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59119P Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59119S Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, sequela -S59121A Salter-Harris Type II physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59121D Salter-Harris Type II physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59121G Salter-Harris Type II physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59121K Salter-Harris Type II physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59121P Salter-Harris Type II physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59121S Salter-Harris Type II physeal fracture of upper end of radius, right arm, sequela -S59122A Salter-Harris Type II physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59122D Salter-Harris Type II physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59122G Salter-Harris Type II physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59122K Salter-Harris Type II physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59122P Salter-Harris Type II physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59122S Salter-Harris Type II physeal fracture of upper end of radius, left arm, sequela -S59129A Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59129D Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59129G Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59129K Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59129P Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59129S Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, sequela -S59131A Salter-Harris Type III physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59131D Salter-Harris Type III physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59131G Salter-Harris Type III physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59131K Salter-Harris Type III physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59131P Salter-Harris Type III physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59131S Salter-Harris Type III physeal fracture of upper end of radius, right arm, sequela -S59132A Salter-Harris Type III physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59132D Salter-Harris Type III physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59132G Salter-Harris Type III physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59132K Salter-Harris Type III physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59132P Salter-Harris Type III physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59132S Salter-Harris Type III physeal fracture of upper end of radius, left arm, sequela -S59139A Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59139D Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59139G Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59139K Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59139P Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59139S Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, sequela -S59141A Salter-Harris Type IV physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59141D Salter-Harris Type IV physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59141G Salter-Harris Type IV physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59141K Salter-Harris Type IV physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59141P Salter-Harris Type IV physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59141S Salter-Harris Type IV physeal fracture of upper end of radius, right arm, sequela -S59142A Salter-Harris Type IV physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59142D Salter-Harris Type IV physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59142G Salter-Harris Type IV physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59142K Salter-Harris Type IV physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59142P Salter-Harris Type IV physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59142S Salter-Harris Type IV physeal fracture of upper end of radius, left arm, sequela -S59149A Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59149D Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59149G Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59149K Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59149P Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59149S Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, sequela -S59191A Other physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59191D Other physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59191G Other physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59191K Other physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59191P Other physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59191S Other physeal fracture of upper end of radius, right arm, sequela -S59192A Other physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59192D Other physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59192G Other physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59192K Other physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59192P Other physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59192S Other physeal fracture of upper end of radius, left arm, sequela -S59199A Other physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59199D Other physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59199G Other physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59199K Other physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59199P Other physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59199S Other physeal fracture of upper end of radius, unspecified arm, sequela -S59201A Unspecified physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59201D Unspecified physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59201G Unspecified physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59201K Unspecified physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59201P Unspecified physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59201S Unspecified physeal fracture of lower end of radius, right arm, sequela -S59202A Unspecified physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59202D Unspecified physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59202G Unspecified physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59202K Unspecified physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59202P Unspecified physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59202S Unspecified physeal fracture of lower end of radius, left arm, sequela -S59209A Unspecified physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59209D Unspecified physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59209G Unspecified physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59209K Unspecified physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59209P Unspecified physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59209S Unspecified physeal fracture of lower end of radius, unspecified arm, sequela -S59211A Salter-Harris Type I physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59211D Salter-Harris Type I physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59211G Salter-Harris Type I physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59211K Salter-Harris Type I physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59211P Salter-Harris Type I physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59211S Salter-Harris Type I physeal fracture of lower end of radius, right arm, sequela -S59212A Salter-Harris Type I physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59212D Salter-Harris Type I physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59212G Salter-Harris Type I physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59212K Salter-Harris Type I physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59212P Salter-Harris Type I physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59212S Salter-Harris Type I physeal fracture of lower end of radius, left arm, sequela -S59219A Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59219D Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59219G Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59219K Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59219P Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59219S Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, sequela -S59221A Salter-Harris Type II physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59221D Salter-Harris Type II physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59221G Salter-Harris Type II physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59221K Salter-Harris Type II physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59221P Salter-Harris Type II physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59221S Salter-Harris Type II physeal fracture of lower end of radius, right arm, sequela -S59222A Salter-Harris Type II physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59222D Salter-Harris Type II physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59222G Salter-Harris Type II physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59222K Salter-Harris Type II physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59222P Salter-Harris Type II physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59222S Salter-Harris Type II physeal fracture of lower end of radius, left arm, sequela -S59229A Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59229D Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59229G Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59229K Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59229P Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59229S Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, sequela -S59231A Salter-Harris Type III physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59231D Salter-Harris Type III physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59231G Salter-Harris Type III physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59231K Salter-Harris Type III physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59231P Salter-Harris Type III physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59231S Salter-Harris Type III physeal fracture of lower end of radius, right arm, sequela -S59232A Salter-Harris Type III physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59232D Salter-Harris Type III physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59232G Salter-Harris Type III physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59232K Salter-Harris Type III physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59232P Salter-Harris Type III physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59232S Salter-Harris Type III physeal fracture of lower end of radius, left arm, sequela -S59239A Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59239D Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59239G Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59239K Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59239P Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59239S Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, sequela -S59241A Salter-Harris Type IV physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59241D Salter-Harris Type IV physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59241G Salter-Harris Type IV physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59241K Salter-Harris Type IV physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59241P Salter-Harris Type IV physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59241S Salter-Harris Type IV physeal fracture of lower end of radius, right arm, sequela -S59242A Salter-Harris Type IV physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59242D Salter-Harris Type IV physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59242G Salter-Harris Type IV physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59242K Salter-Harris Type IV physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59242P Salter-Harris Type IV physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59242S Salter-Harris Type IV physeal fracture of lower end of radius, left arm, sequela -S59249A Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59249D Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59249G Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59249K Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59249P Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59249S Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, sequela -S59291A Other physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59291D Other physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59291G Other physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59291K Other physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59291P Other physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59291S Other physeal fracture of lower end of radius, right arm, sequela -S59292A Other physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59292D Other physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59292G Other physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59292K Other physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59292P Other physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59292S Other physeal fracture of lower end of radius, left arm, sequela -S59299A Other physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59299D Other physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59299G Other physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59299K Other physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59299P Other physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59299S Other physeal fracture of lower end of radius, unspecified arm, sequela -S59801A Other specified injuries of right elbow, initial encounter -S59801D Other specified injuries of right elbow, subsequent encounter -S59801S Other specified injuries of right elbow, sequela -S59802A Other specified injuries of left elbow, initial encounter -S59802D Other specified injuries of left elbow, subsequent encounter -S59802S Other specified injuries of left elbow, sequela -S59809A Other specified injuries of unspecified elbow, initial encounter -S59809D Other specified injuries of unspecified elbow, subsequent encounter -S59809S Other specified injuries of unspecified elbow, sequela -S59811A Other specified injuries right forearm, initial encounter -S59811D Other specified injuries right forearm, subsequent encounter -S59811S Other specified injuries right forearm, sequela -S59812A Other specified injuries left forearm, initial encounter -S59812D Other specified injuries left forearm, subsequent encounter -S59812S Other specified injuries left forearm, sequela -S59819A Other specified injuries unspecified forearm, initial encounter -S59819D Other specified injuries unspecified forearm, subsequent encounter -S59819S Other specified injuries unspecified forearm, sequela -S59901A Unspecified injury of right elbow, initial encounter -S59901D Unspecified injury of right elbow, subsequent encounter -S59901S Unspecified injury of right elbow, sequela -S59902A Unspecified injury of left elbow, initial encounter -S59902D Unspecified injury of left elbow, subsequent encounter -S59902S Unspecified injury of left elbow, sequela -S59909A Unspecified injury of unspecified elbow, initial encounter -S59909D Unspecified injury of unspecified elbow, subsequent encounter -S59909S Unspecified injury of unspecified elbow, sequela -S59911A Unspecified injury of right forearm, initial encounter -S59911D Unspecified injury of right forearm, subsequent encounter -S59911S Unspecified injury of right forearm, sequela -S59912A Unspecified injury of left forearm, initial encounter -S59912D Unspecified injury of left forearm, subsequent encounter -S59912S Unspecified injury of left forearm, sequela -S59919A Unspecified injury of unspecified forearm, initial encounter -S59919D Unspecified injury of unspecified forearm, subsequent encounter -S59919S Unspecified injury of unspecified forearm, sequela -S6000XA Contusion of unspecified finger without damage to nail, initial encounter -S6000XD Contusion of unspecified finger without damage to nail, subsequent encounter -S6000XS Contusion of unspecified finger without damage to nail, sequela -S60011A Contusion of right thumb without damage to nail, initial encounter -S60011D Contusion of right thumb without damage to nail, subsequent encounter -S60011S Contusion of right thumb without damage to nail, sequela -S60012A Contusion of left thumb without damage to nail, initial encounter -S60012D Contusion of left thumb without damage to nail, subsequent encounter -S60012S Contusion of left thumb without damage to nail, sequela -S60019A Contusion of unspecified thumb without damage to nail, initial encounter -S60019D Contusion of unspecified thumb without damage to nail, subsequent encounter -S60019S Contusion of unspecified thumb without damage to nail, sequela -S60021A Contusion of right index finger without damage to nail, initial encounter -S60021D Contusion of right index finger without damage to nail, subsequent encounter -S60021S Contusion of right index finger without damage to nail, sequela -S60022A Contusion of left index finger without damage to nail, initial encounter -S60022D Contusion of left index finger without damage to nail, subsequent encounter -S60022S Contusion of left index finger without damage to nail, sequela -S60029A Contusion of unspecified index finger without damage to nail, initial encounter -S60029D Contusion of unspecified index finger without damage to nail, subsequent encounter -S60029S Contusion of unspecified index finger without damage to nail, sequela -S60031A Contusion of right middle finger without damage to nail, initial encounter -S60031D Contusion of right middle finger without damage to nail, subsequent encounter -S60031S Contusion of right middle finger without damage to nail, sequela -S60032A Contusion of left middle finger without damage to nail, initial encounter -S60032D Contusion of left middle finger without damage to nail, subsequent encounter -S60032S Contusion of left middle finger without damage to nail, sequela -S60039A Contusion of unspecified middle finger without damage to nail, initial encounter -S60039D Contusion of unspecified middle finger without damage to nail, subsequent encounter -S60039S Contusion of unspecified middle finger without damage to nail, sequela -S60041A Contusion of right ring finger without damage to nail, initial encounter -S60041D Contusion of right ring finger without damage to nail, subsequent encounter -S60041S Contusion of right ring finger without damage to nail, sequela -S60042A Contusion of left ring finger without damage to nail, initial encounter -S60042D Contusion of left ring finger without damage to nail, subsequent encounter -S60042S Contusion of left ring finger without damage to nail, sequela -S60049A Contusion of unspecified ring finger without damage to nail, initial encounter -S60049D Contusion of unspecified ring finger without damage to nail, subsequent encounter -S60049S Contusion of unspecified ring finger without damage to nail, sequela -S60051A Contusion of right little finger without damage to nail, initial encounter -S60051D Contusion of right little finger without damage to nail, subsequent encounter -S60051S Contusion of right little finger without damage to nail, sequela -S60052A Contusion of left little finger without damage to nail, initial encounter -S60052D Contusion of left little finger without damage to nail, subsequent encounter -S60052S Contusion of left little finger without damage to nail, sequela -S60059A Contusion of unspecified little finger without damage to nail, initial encounter -S60059D Contusion of unspecified little finger without damage to nail, subsequent encounter -S60059S Contusion of unspecified little finger without damage to nail, sequela -S6010XA Contusion of unspecified finger with damage to nail, initial encounter -S6010XD Contusion of unspecified finger with damage to nail, subsequent encounter -S6010XS Contusion of unspecified finger with damage to nail, sequela -S60111A Contusion of right thumb with damage to nail, initial encounter -S60111D Contusion of right thumb with damage to nail, subsequent encounter -S60111S Contusion of right thumb with damage to nail, sequela -S60112A Contusion of left thumb with damage to nail, initial encounter -S60112D Contusion of left thumb with damage to nail, subsequent encounter -S60112S Contusion of left thumb with damage to nail, sequela -S60119A Contusion of unspecified thumb with damage to nail, initial encounter -S60119D Contusion of unspecified thumb with damage to nail, subsequent encounter -S60119S Contusion of unspecified thumb with damage to nail, sequela -S60121A Contusion of right index finger with damage to nail, initial encounter -S60121D Contusion of right index finger with damage to nail, subsequent encounter -S60121S Contusion of right index finger with damage to nail, sequela -S60122A Contusion of left index finger with damage to nail, initial encounter -S60122D Contusion of left index finger with damage to nail, subsequent encounter -S60122S Contusion of left index finger with damage to nail, sequela -S60129A Contusion of unspecified index finger with damage to nail, initial encounter -S60129D Contusion of unspecified index finger with damage to nail, subsequent encounter -S60129S Contusion of unspecified index finger with damage to nail, sequela -S60131A Contusion of right middle finger with damage to nail, initial encounter -S60131D Contusion of right middle finger with damage to nail, subsequent encounter -S60131S Contusion of right middle finger with damage to nail, sequela -S60132A Contusion of left middle finger with damage to nail, initial encounter -S60132D Contusion of left middle finger with damage to nail, subsequent encounter -S60132S Contusion of left middle finger with damage to nail, sequela -S60139A Contusion of unspecified middle finger with damage to nail, initial encounter -S60139D Contusion of unspecified middle finger with damage to nail, subsequent encounter -S60139S Contusion of unspecified middle finger with damage to nail, sequela -S60141A Contusion of right ring finger with damage to nail, initial encounter -S60141D Contusion of right ring finger with damage to nail, subsequent encounter -S60141S Contusion of right ring finger with damage to nail, sequela -S60142A Contusion of left ring finger with damage to nail, initial encounter -S60142D Contusion of left ring finger with damage to nail, subsequent encounter -S60142S Contusion of left ring finger with damage to nail, sequela -S60149A Contusion of unspecified ring finger with damage to nail, initial encounter -S60149D Contusion of unspecified ring finger with damage to nail, subsequent encounter -S60149S Contusion of unspecified ring finger with damage to nail, sequela -S60151A Contusion of right little finger with damage to nail, initial encounter -S60151D Contusion of right little finger with damage to nail, subsequent encounter -S60151S Contusion of right little finger with damage to nail, sequela -S60152A Contusion of left little finger with damage to nail, initial encounter -S60152D Contusion of left little finger with damage to nail, subsequent encounter -S60152S Contusion of left little finger with damage to nail, sequela -S60159A Contusion of unspecified little finger with damage to nail, initial encounter -S60159D Contusion of unspecified little finger with damage to nail, subsequent encounter -S60159S Contusion of unspecified little finger with damage to nail, sequela -S60211A Contusion of right wrist, initial encounter -S60211D Contusion of right wrist, subsequent encounter -S60211S Contusion of right wrist, sequela -S60212A Contusion of left wrist, initial encounter -S60212D Contusion of left wrist, subsequent encounter -S60212S Contusion of left wrist, sequela -S60219A Contusion of unspecified wrist, initial encounter -S60219D Contusion of unspecified wrist, subsequent encounter -S60219S Contusion of unspecified wrist, sequela -S60221A Contusion of right hand, initial encounter -S60221D Contusion of right hand, subsequent encounter -S60221S Contusion of right hand, sequela -S60222A Contusion of left hand, initial encounter -S60222D Contusion of left hand, subsequent encounter -S60222S Contusion of left hand, sequela -S60229A Contusion of unspecified hand, initial encounter -S60229D Contusion of unspecified hand, subsequent encounter -S60229S Contusion of unspecified hand, sequela -S60311A Abrasion of right thumb, initial encounter -S60311D Abrasion of right thumb, subsequent encounter -S60311S Abrasion of right thumb, sequela -S60312A Abrasion of left thumb, initial encounter -S60312D Abrasion of left thumb, subsequent encounter -S60312S Abrasion of left thumb, sequela -S60319A Abrasion of unspecified thumb, initial encounter -S60319D Abrasion of unspecified thumb, subsequent encounter -S60319S Abrasion of unspecified thumb, sequela -S60321A Blister (nonthermal) of right thumb, initial encounter -S60321D Blister (nonthermal) of right thumb, subsequent encounter -S60321S Blister (nonthermal) of right thumb, sequela -S60322A Blister (nonthermal) of left thumb, initial encounter -S60322D Blister (nonthermal) of left thumb, subsequent encounter -S60322S Blister (nonthermal) of left thumb, sequela -S60329A Blister (nonthermal) of unspecified thumb, initial encounter -S60329D Blister (nonthermal) of unspecified thumb, subsequent encounter -S60329S Blister (nonthermal) of unspecified thumb, sequela -S60341A External constriction of right thumb, initial encounter -S60341D External constriction of right thumb, subsequent encounter -S60341S External constriction of right thumb, sequela -S60342A External constriction of left thumb, initial encounter -S60342D External constriction of left thumb, subsequent encounter -S60342S External constriction of left thumb, sequela -S60349A External constriction of unspecified thumb, initial encounter -S60349D External constriction of unspecified thumb, subsequent encounter -S60349S External constriction of unspecified thumb, sequela -S60351A Superficial foreign body of right thumb, initial encounter -S60351D Superficial foreign body of right thumb, subsequent encounter -S60351S Superficial foreign body of right thumb, sequela -S60352A Superficial foreign body of left thumb, initial encounter -S60352D Superficial foreign body of left thumb, subsequent encounter -S60352S Superficial foreign body of left thumb, sequela -S60359A Superficial foreign body of unspecified thumb, initial encounter -S60359D Superficial foreign body of unspecified thumb, subsequent encounter -S60359S Superficial foreign body of unspecified thumb, sequela -S60361A Insect bite (nonvenomous) of right thumb, initial encounter -S60361D Insect bite (nonvenomous) of right thumb, subsequent encounter -S60361S Insect bite (nonvenomous) of right thumb, sequela -S60362A Insect bite (nonvenomous) of left thumb, initial encounter -S60362D Insect bite (nonvenomous) of left thumb, subsequent encounter -S60362S Insect bite (nonvenomous) of left thumb, sequela -S60369A Insect bite (nonvenomous) of unspecified thumb, initial encounter -S60369D Insect bite (nonvenomous) of unspecified thumb, subsequent encounter -S60369S Insect bite (nonvenomous) of unspecified thumb, sequela -S60371A Other superficial bite of right thumb, initial encounter -S60371D Other superficial bite of right thumb, subsequent encounter -S60371S Other superficial bite of right thumb, sequela -S60372A Other superficial bite of left thumb, initial encounter -S60372D Other superficial bite of left thumb, subsequent encounter -S60372S Other superficial bite of left thumb, sequela -S60379A Other superficial bite of unspecified thumb, initial encounter -S60379D Other superficial bite of unspecified thumb, subsequent encounter -S60379S Other superficial bite of unspecified thumb, sequela -S60391A Other superficial injuries of right thumb, initial encounter -S60391D Other superficial injuries of right thumb, subsequent encounter -S60391S Other superficial injuries of right thumb, sequela -S60392A Other superficial injuries of left thumb, initial encounter -S60392D Other superficial injuries of left thumb, subsequent encounter -S60392S Other superficial injuries of left thumb, sequela -S60399A Other superficial injuries of unspecified thumb, initial encounter -S60399D Other superficial injuries of unspecified thumb, subsequent encounter -S60399S Other superficial injuries of unspecified thumb, sequela -S60410A Abrasion of right index finger, initial encounter -S60410D Abrasion of right index finger, subsequent encounter -S60410S Abrasion of right index finger, sequela -S60411A Abrasion of left index finger, initial encounter -S60411D Abrasion of left index finger, subsequent encounter -S60411S Abrasion of left index finger, sequela -S60412A Abrasion of right middle finger, initial encounter -S60412D Abrasion of right middle finger, subsequent encounter -S60412S Abrasion of right middle finger, sequela -S60413A Abrasion of left middle finger, initial encounter -S60413D Abrasion of left middle finger, subsequent encounter -S60413S Abrasion of left middle finger, sequela -S60414A Abrasion of right ring finger, initial encounter -S60414D Abrasion of right ring finger, subsequent encounter -S60414S Abrasion of right ring finger, sequela -S60415A Abrasion of left ring finger, initial encounter -S60415D Abrasion of left ring finger, subsequent encounter -S60415S Abrasion of left ring finger, sequela -S60416A Abrasion of right little finger, initial encounter -S60416D Abrasion of right little finger, subsequent encounter -S60416S Abrasion of right little finger, sequela -S60417A Abrasion of left little finger, initial encounter -S60417D Abrasion of left little finger, subsequent encounter -S60417S Abrasion of left little finger, sequela -S60418A Abrasion of other finger, initial encounter -S60418D Abrasion of other finger, subsequent encounter -S60418S Abrasion of other finger, sequela -S60419A Abrasion of unspecified finger, initial encounter -S60419D Abrasion of unspecified finger, subsequent encounter -S60419S Abrasion of unspecified finger, sequela -S60420A Blister (nonthermal) of right index finger, initial encounter -S60420D Blister (nonthermal) of right index finger, subsequent encounter -S60420S Blister (nonthermal) of right index finger, sequela -S60421A Blister (nonthermal) of left index finger, initial encounter -S60421D Blister (nonthermal) of left index finger, subsequent encounter -S60421S Blister (nonthermal) of left index finger, sequela -S60422A Blister (nonthermal) of right middle finger, initial encounter -S60422D Blister (nonthermal) of right middle finger, subsequent encounter -S60422S Blister (nonthermal) of right middle finger, sequela -S60423A Blister (nonthermal) of left middle finger, initial encounter -S60423D Blister (nonthermal) of left middle finger, subsequent encounter -S60423S Blister (nonthermal) of left middle finger, sequela -S60424A Blister (nonthermal) of right ring finger, initial encounter -S60424D Blister (nonthermal) of right ring finger, subsequent encounter -S60424S Blister (nonthermal) of right ring finger, sequela -S60425A Blister (nonthermal) of left ring finger, initial encounter -S60425D Blister (nonthermal) of left ring finger, subsequent encounter -S60425S Blister (nonthermal) of left ring finger, sequela -S60426A Blister (nonthermal) of right little finger, initial encounter -S60426D Blister (nonthermal) of right little finger, subsequent encounter -S60426S Blister (nonthermal) of right little finger, sequela -S60427A Blister (nonthermal) of left little finger, initial encounter -S60427D Blister (nonthermal) of left little finger, subsequent encounter -S60427S Blister (nonthermal) of left little finger, sequela -S60428A Blister (nonthermal) of other finger, initial encounter -S60428D Blister (nonthermal) of other finger, subsequent encounter -S60428S Blister (nonthermal) of other finger, sequela -S60429A Blister (nonthermal) of unspecified finger, initial encounter -S60429D Blister (nonthermal) of unspecified finger, subsequent encounter -S60429S Blister (nonthermal) of unspecified finger, sequela -S60440A External constriction of right index finger, initial encounter -S60440D External constriction of right index finger, subsequent encounter -S60440S External constriction of right index finger, sequela -S60441A External constriction of left index finger, initial encounter -S60441D External constriction of left index finger, subsequent encounter -S60441S External constriction of left index finger, sequela -S60442A External constriction of right middle finger, initial encounter -S60442D External constriction of right middle finger, subsequent encounter -S60442S External constriction of right middle finger, sequela -S60443A External constriction of left middle finger, initial encounter -S60443D External constriction of left middle finger, subsequent encounter -S60443S External constriction of left middle finger, sequela -S60444A External constriction of right ring finger, initial encounter -S60444D External constriction of right ring finger, subsequent encounter -S60444S External constriction of right ring finger, sequela -S60445A External constriction of left ring finger, initial encounter -S60445D External constriction of left ring finger, subsequent encounter -S60445S External constriction of left ring finger, sequela -S60446A External constriction of right little finger, initial encounter -S60446D External constriction of right little finger, subsequent encounter -S60446S External constriction of right little finger, sequela -S60447A External constriction of left little finger, initial encounter -S60447D External constriction of left little finger, subsequent encounter -S60447S External constriction of left little finger, sequela -S60448A External constriction of other finger, initial encounter -S60448D External constriction of other finger, subsequent encounter -S60448S External constriction of other finger, sequela -S60449A External constriction of unspecified finger, initial encounter -S60449D External constriction of unspecified finger, subsequent encounter -S60449S External constriction of unspecified finger, sequela -S60450A Superficial foreign body of right index finger, initial encounter -S60450D Superficial foreign body of right index finger, subsequent encounter -S60450S Superficial foreign body of right index finger, sequela -S60451A Superficial foreign body of left index finger, initial encounter -S60451D Superficial foreign body of left index finger, subsequent encounter -S60451S Superficial foreign body of left index finger, sequela -S60452A Superficial foreign body of right middle finger, initial encounter -S60452D Superficial foreign body of right middle finger, subsequent encounter -S60452S Superficial foreign body of right middle finger, sequela -S60453A Superficial foreign body of left middle finger, initial encounter -S60453D Superficial foreign body of left middle finger, subsequent encounter -S60453S Superficial foreign body of left middle finger, sequela -S60454A Superficial foreign body of right ring finger, initial encounter -S60454D Superficial foreign body of right ring finger, subsequent encounter -S60454S Superficial foreign body of right ring finger, sequela -S60455A Superficial foreign body of left ring finger, initial encounter -S60455D Superficial foreign body of left ring finger, subsequent encounter -S60455S Superficial foreign body of left ring finger, sequela -S60456A Superficial foreign body of right little finger, initial encounter -S60456D Superficial foreign body of right little finger, subsequent encounter -S60456S Superficial foreign body of right little finger, sequela -S60457A Superficial foreign body of left little finger, initial encounter -S60457D Superficial foreign body of left little finger, subsequent encounter -S60457S Superficial foreign body of left little finger, sequela -S60458A Superficial foreign body of other finger, initial encounter -S60458D Superficial foreign body of other finger, subsequent encounter -S60458S Superficial foreign body of other finger, sequela -S60459A Superficial foreign body of unspecified finger, initial encounter -S60459D Superficial foreign body of unspecified finger, subsequent encounter -S60459S Superficial foreign body of unspecified finger, sequela -S60460A Insect bite (nonvenomous) of right index finger, initial encounter -S60460D Insect bite (nonvenomous) of right index finger, subsequent encounter -S60460S Insect bite (nonvenomous) of right index finger, sequela -S60461A Insect bite (nonvenomous) of left index finger, initial encounter -S60461D Insect bite (nonvenomous) of left index finger, subsequent encounter -S60461S Insect bite (nonvenomous) of left index finger, sequela -S60462A Insect bite (nonvenomous) of right middle finger, initial encounter -S60462D Insect bite (nonvenomous) of right middle finger, subsequent encounter -S60462S Insect bite (nonvenomous) of right middle finger, sequela -S60463A Insect bite (nonvenomous) of left middle finger, initial encounter -S60463D Insect bite (nonvenomous) of left middle finger, subsequent encounter -S60463S Insect bite (nonvenomous) of left middle finger, sequela -S60464A Insect bite (nonvenomous) of right ring finger, initial encounter -S60464D Insect bite (nonvenomous) of right ring finger, subsequent encounter -S60464S Insect bite (nonvenomous) of right ring finger, sequela -S60465A Insect bite (nonvenomous) of left ring finger, initial encounter -S60465D Insect bite (nonvenomous) of left ring finger, subsequent encounter -S60465S Insect bite (nonvenomous) of left ring finger, sequela -S60466A Insect bite (nonvenomous) of right little finger, initial encounter -S60466D Insect bite (nonvenomous) of right little finger, subsequent encounter -S60466S Insect bite (nonvenomous) of right little finger, sequela -S60467A Insect bite (nonvenomous) of left little finger, initial encounter -S60467D Insect bite (nonvenomous) of left little finger, subsequent encounter -S60467S Insect bite (nonvenomous) of left little finger, sequela -S60468A Insect bite (nonvenomous) of other finger, initial encounter -S60468D Insect bite (nonvenomous) of other finger, subsequent encounter -S60468S Insect bite (nonvenomous) of other finger, sequela -S60469A Insect bite (nonvenomous) of unspecified finger, initial encounter -S60469D Insect bite (nonvenomous) of unspecified finger, subsequent encounter -S60469S Insect bite (nonvenomous) of unspecified finger, sequela -S60470A Other superficial bite of right index finger, initial encounter -S60470D Other superficial bite of right index finger, subsequent encounter -S60470S Other superficial bite of right index finger, sequela -S60471A Other superficial bite of left index finger, initial encounter -S60471D Other superficial bite of left index finger, subsequent encounter -S60471S Other superficial bite of left index finger, sequela -S60472A Other superficial bite of right middle finger, initial encounter -S60472D Other superficial bite of right middle finger, subsequent encounter -S60472S Other superficial bite of right middle finger, sequela -S60473A Other superficial bite of left middle finger, initial encounter -S60473D Other superficial bite of left middle finger, subsequent encounter -S60473S Other superficial bite of left middle finger, sequela -S60474A Other superficial bite of right ring finger, initial encounter -S60474D Other superficial bite of right ring finger, subsequent encounter -S60474S Other superficial bite of right ring finger, sequela -S60475A Other superficial bite of left ring finger, initial encounter -S60475D Other superficial bite of left ring finger, subsequent encounter -S60475S Other superficial bite of left ring finger, sequela -S60476A Other superficial bite of right little finger, initial encounter -S60476D Other superficial bite of right little finger, subsequent encounter -S60476S Other superficial bite of right little finger, sequela -S60477A Other superficial bite of left little finger, initial encounter -S60477D Other superficial bite of left little finger, subsequent encounter -S60477S Other superficial bite of left little finger, sequela -S60478A Other superficial bite of other finger, initial encounter -S60478D Other superficial bite of other finger, subsequent encounter -S60478S Other superficial bite of other finger, sequela -S60479A Other superficial bite of unspecified finger, initial encounter -S60479D Other superficial bite of unspecified finger, subsequent encounter -S60479S Other superficial bite of unspecified finger, sequela -S60511A Abrasion of right hand, initial encounter -S60511D Abrasion of right hand, subsequent encounter -S60511S Abrasion of right hand, sequela -S60512A Abrasion of left hand, initial encounter -S60512D Abrasion of left hand, subsequent encounter -S60512S Abrasion of left hand, sequela -S60519A Abrasion of unspecified hand, initial encounter -S60519D Abrasion of unspecified hand, subsequent encounter -S60519S Abrasion of unspecified hand, sequela -S60521A Blister (nonthermal) of right hand, initial encounter -S60521D Blister (nonthermal) of right hand, subsequent encounter -S60521S Blister (nonthermal) of right hand, sequela -S60522A Blister (nonthermal) of left hand, initial encounter -S60522D Blister (nonthermal) of left hand, subsequent encounter -S60522S Blister (nonthermal) of left hand, sequela -S60529A Blister (nonthermal) of unspecified hand, initial encounter -S60529D Blister (nonthermal) of unspecified hand, subsequent encounter -S60529S Blister (nonthermal) of unspecified hand, sequela -S60541A External constriction of right hand, initial encounter -S60541D External constriction of right hand, subsequent encounter -S60541S External constriction of right hand, sequela -S60542A External constriction of left hand, initial encounter -S60542D External constriction of left hand, subsequent encounter -S60542S External constriction of left hand, sequela -S60549A External constriction of unspecified hand, initial encounter -S60549D External constriction of unspecified hand, subsequent encounter -S60549S External constriction of unspecified hand, sequela -S60551A Superficial foreign body of right hand, initial encounter -S60551D Superficial foreign body of right hand, subsequent encounter -S60551S Superficial foreign body of right hand, sequela -S60552A Superficial foreign body of left hand, initial encounter -S60552D Superficial foreign body of left hand, subsequent encounter -S60552S Superficial foreign body of left hand, sequela -S60559A Superficial foreign body of unspecified hand, initial encounter -S60559D Superficial foreign body of unspecified hand, subsequent encounter -S60559S Superficial foreign body of unspecified hand, sequela -S60561A Insect bite (nonvenomous) of right hand, initial encounter -S60561D Insect bite (nonvenomous) of right hand, subsequent encounter -S60561S Insect bite (nonvenomous) of right hand, sequela -S60562A Insect bite (nonvenomous) of left hand, initial encounter -S60562D Insect bite (nonvenomous) of left hand, subsequent encounter -S60562S Insect bite (nonvenomous) of left hand, sequela -S60569A Insect bite (nonvenomous) of unspecified hand, initial encounter -S60569D Insect bite (nonvenomous) of unspecified hand, subsequent encounter -S60569S Insect bite (nonvenomous) of unspecified hand, sequela -S60571A Other superficial bite of hand of right hand, initial encounter -S60571D Other superficial bite of hand of right hand, subsequent encounter -S60571S Other superficial bite of hand of right hand, sequela -S60572A Other superficial bite of hand of left hand, initial encounter -S60572D Other superficial bite of hand of left hand, subsequent encounter -S60572S Other superficial bite of hand of left hand, sequela -S60579A Other superficial bite of hand of unspecified hand, initial encounter -S60579D Other superficial bite of hand of unspecified hand, subsequent encounter -S60579S Other superficial bite of hand of unspecified hand, sequela -S60811A Abrasion of right wrist, initial encounter -S60811D Abrasion of right wrist, subsequent encounter -S60811S Abrasion of right wrist, sequela -S60812A Abrasion of left wrist, initial encounter -S60812D Abrasion of left wrist, subsequent encounter -S60812S Abrasion of left wrist, sequela -S60819A Abrasion of unspecified wrist, initial encounter -S60819D Abrasion of unspecified wrist, subsequent encounter -S60819S Abrasion of unspecified wrist, sequela -S60821A Blister (nonthermal) of right wrist, initial encounter -S60821D Blister (nonthermal) of right wrist, subsequent encounter -S60821S Blister (nonthermal) of right wrist, sequela -S60822A Blister (nonthermal) of left wrist, initial encounter -S60822D Blister (nonthermal) of left wrist, subsequent encounter -S60822S Blister (nonthermal) of left wrist, sequela -S60829A Blister (nonthermal) of unspecified wrist, initial encounter -S60829D Blister (nonthermal) of unspecified wrist, subsequent encounter -S60829S Blister (nonthermal) of unspecified wrist, sequela -S60841A External constriction of right wrist, initial encounter -S60841D External constriction of right wrist, subsequent encounter -S60841S External constriction of right wrist, sequela -S60842A External constriction of left wrist, initial encounter -S60842D External constriction of left wrist, subsequent encounter -S60842S External constriction of left wrist, sequela -S60849A External constriction of unspecified wrist, initial encounter -S60849D External constriction of unspecified wrist, subsequent encounter -S60849S External constriction of unspecified wrist, sequela -S60851A Superficial foreign body of right wrist, initial encounter -S60851D Superficial foreign body of right wrist, subsequent encounter -S60851S Superficial foreign body of right wrist, sequela -S60852A Superficial foreign body of left wrist, initial encounter -S60852D Superficial foreign body of left wrist, subsequent encounter -S60852S Superficial foreign body of left wrist, sequela -S60859A Superficial foreign body of unspecified wrist, initial encounter -S60859D Superficial foreign body of unspecified wrist, subsequent encounter -S60859S Superficial foreign body of unspecified wrist, sequela -S60861A Insect bite (nonvenomous) of right wrist, initial encounter -S60861D Insect bite (nonvenomous) of right wrist, subsequent encounter -S60861S Insect bite (nonvenomous) of right wrist, sequela -S60862A Insect bite (nonvenomous) of left wrist, initial encounter -S60862D Insect bite (nonvenomous) of left wrist, subsequent encounter -S60862S Insect bite (nonvenomous) of left wrist, sequela -S60869A Insect bite (nonvenomous) of unspecified wrist, initial encounter -S60869D Insect bite (nonvenomous) of unspecified wrist, subsequent encounter -S60869S Insect bite (nonvenomous) of unspecified wrist, sequela -S60871A Other superficial bite of right wrist, initial encounter -S60871D Other superficial bite of right wrist, subsequent encounter -S60871S Other superficial bite of right wrist, sequela -S60872A Other superficial bite of left wrist, initial encounter -S60872D Other superficial bite of left wrist, subsequent encounter -S60872S Other superficial bite of left wrist, sequela -S60879A Other superficial bite of unspecified wrist, initial encounter -S60879D Other superficial bite of unspecified wrist, subsequent encounter -S60879S Other superficial bite of unspecified wrist, sequela -S60911A Unspecified superficial injury of right wrist, initial encounter -S60911D Unspecified superficial injury of right wrist, subsequent encounter -S60911S Unspecified superficial injury of right wrist, sequela -S60912A Unspecified superficial injury of left wrist, initial encounter -S60912D Unspecified superficial injury of left wrist, subsequent encounter -S60912S Unspecified superficial injury of left wrist, sequela -S60919A Unspecified superficial injury of unspecified wrist, initial encounter -S60919D Unspecified superficial injury of unspecified wrist, subsequent encounter -S60919S Unspecified superficial injury of unspecified wrist, sequela -S60921A Unspecified superficial injury of right hand, initial encounter -S60921D Unspecified superficial injury of right hand, subsequent encounter -S60921S Unspecified superficial injury of right hand, sequela -S60922A Unspecified superficial injury of left hand, initial encounter -S60922D Unspecified superficial injury of left hand, subsequent encounter -S60922S Unspecified superficial injury of left hand, sequela -S60929A Unspecified superficial injury of unspecified hand, initial encounter -S60929D Unspecified superficial injury of unspecified hand, subsequent encounter -S60929S Unspecified superficial injury of unspecified hand, sequela -S60931A Unspecified superficial injury of right thumb, initial encounter -S60931D Unspecified superficial injury of right thumb, subsequent encounter -S60931S Unspecified superficial injury of right thumb, sequela -S60932A Unspecified superficial injury of left thumb, initial encounter -S60932D Unspecified superficial injury of left thumb, subsequent encounter -S60932S Unspecified superficial injury of left thumb, sequela -S60939A Unspecified superficial injury of unspecified thumb, initial encounter -S60939D Unspecified superficial injury of unspecified thumb, subsequent encounter -S60939S Unspecified superficial injury of unspecified thumb, sequela -S60940A Unspecified superficial injury of right index finger, initial encounter -S60940D Unspecified superficial injury of right index finger, subsequent encounter -S60940S Unspecified superficial injury of right index finger, sequela -S60941A Unspecified superficial injury of left index finger, initial encounter -S60941D Unspecified superficial injury of left index finger, subsequent encounter -S60941S Unspecified superficial injury of left index finger, sequela -S60942A Unspecified superficial injury of right middle finger, initial encounter -S60942D Unspecified superficial injury of right middle finger, subsequent encounter -S60942S Unspecified superficial injury of right middle finger, sequela -S60943A Unspecified superficial injury of left middle finger, initial encounter -S60943D Unspecified superficial injury of left middle finger, subsequent encounter -S60943S Unspecified superficial injury of left middle finger, sequela -S60944A Unspecified superficial injury of right ring finger, initial encounter -S60944D Unspecified superficial injury of right ring finger, subsequent encounter -S60944S Unspecified superficial injury of right ring finger, sequela -S60945A Unspecified superficial injury of left ring finger, initial encounter -S60945D Unspecified superficial injury of left ring finger, subsequent encounter -S60945S Unspecified superficial injury of left ring finger, sequela -S60946A Unspecified superficial injury of right little finger, initial encounter -S60946D Unspecified superficial injury of right little finger, subsequent encounter -S60946S Unspecified superficial injury of right little finger, sequela -S60947A Unspecified superficial injury of left little finger, initial encounter -S60947D Unspecified superficial injury of left little finger, subsequent encounter -S60947S Unspecified superficial injury of left little finger, sequela -S60948A Unspecified superficial injury of other finger, initial encounter -S60948D Unspecified superficial injury of other finger, subsequent encounter -S60948S Unspecified superficial injury of other finger, sequela -S60949A Unspecified superficial injury of unspecified finger, initial encounter -S60949D Unspecified superficial injury of unspecified finger, subsequent encounter -S60949S Unspecified superficial injury of unspecified finger, sequela -S61001A Unspecified open wound of right thumb without damage to nail, initial encounter -S61001D Unspecified open wound of right thumb without damage to nail, subsequent encounter -S61001S Unspecified open wound of right thumb without damage to nail, sequela -S61002A Unspecified open wound of left thumb without damage to nail, initial encounter -S61002D Unspecified open wound of left thumb without damage to nail, subsequent encounter -S61002S Unspecified open wound of left thumb without damage to nail, sequela -S61009A Unspecified open wound of unspecified thumb without damage to nail, initial encounter -S61009D Unspecified open wound of unspecified thumb without damage to nail, subsequent encounter -S61009S Unspecified open wound of unspecified thumb without damage to nail, sequela -S61011A Laceration without foreign body of right thumb without damage to nail, initial encounter -S61011D Laceration without foreign body of right thumb without damage to nail, subsequent encounter -S61011S Laceration without foreign body of right thumb without damage to nail, sequela -S61012A Laceration without foreign body of left thumb without damage to nail, initial encounter -S61012D Laceration without foreign body of left thumb without damage to nail, subsequent encounter -S61012S Laceration without foreign body of left thumb without damage to nail, sequela -S61019A Laceration without foreign body of unspecified thumb without damage to nail, initial encounter -S61019D Laceration without foreign body of unspecified thumb without damage to nail, subsequent encounter -S61019S Laceration without foreign body of unspecified thumb without damage to nail, sequela -S61021A Laceration with foreign body of right thumb without damage to nail, initial encounter -S61021D Laceration with foreign body of right thumb without damage to nail, subsequent encounter -S61021S Laceration with foreign body of right thumb without damage to nail, sequela -S61022A Laceration with foreign body of left thumb without damage to nail, initial encounter -S61022D Laceration with foreign body of left thumb without damage to nail, subsequent encounter -S61022S Laceration with foreign body of left thumb without damage to nail, sequela -S61029A Laceration with foreign body of unspecified thumb without damage to nail, initial encounter -S61029D Laceration with foreign body of unspecified thumb without damage to nail, subsequent encounter -S61029S Laceration with foreign body of unspecified thumb without damage to nail, sequela -S61031A Puncture wound without foreign body of right thumb without damage to nail, initial encounter -S61031D Puncture wound without foreign body of right thumb without damage to nail, subsequent encounter -S61031S Puncture wound without foreign body of right thumb without damage to nail, sequela -S61032A Puncture wound without foreign body of left thumb without damage to nail, initial encounter -S61032D Puncture wound without foreign body of left thumb without damage to nail, subsequent encounter -S61032S Puncture wound without foreign body of left thumb without damage to nail, sequela -S61039A Puncture wound without foreign body of unspecified thumb without damage to nail, initial encounter -S61039D Puncture wound without foreign body of unspecified thumb without damage to nail, subsequent encounter -S61039S Puncture wound without foreign body of unspecified thumb without damage to nail, sequela -S61041A Puncture wound with foreign body of right thumb without damage to nail, initial encounter -S61041D Puncture wound with foreign body of right thumb without damage to nail, subsequent encounter -S61041S Puncture wound with foreign body of right thumb without damage to nail, sequela -S61042A Puncture wound with foreign body of left thumb without damage to nail, initial encounter -S61042D Puncture wound with foreign body of left thumb without damage to nail, subsequent encounter -S61042S Puncture wound with foreign body of left thumb without damage to nail, sequela -S61049A Puncture wound with foreign body of unspecified thumb without damage to nail, initial encounter -S61049D Puncture wound with foreign body of unspecified thumb without damage to nail, subsequent encounter -S61049S Puncture wound with foreign body of unspecified thumb without damage to nail, sequela -S61051A Open bite of right thumb without damage to nail, initial encounter -S61051D Open bite of right thumb without damage to nail, subsequent encounter -S61051S Open bite of right thumb without damage to nail, sequela -S61052A Open bite of left thumb without damage to nail, initial encounter -S61052D Open bite of left thumb without damage to nail, subsequent encounter -S61052S Open bite of left thumb without damage to nail, sequela -S61059A Open bite of unspecified thumb without damage to nail, initial encounter -S61059D Open bite of unspecified thumb without damage to nail, subsequent encounter -S61059S Open bite of unspecified thumb without damage to nail, sequela -S61101A Unspecified open wound of right thumb with damage to nail, initial encounter -S61101D Unspecified open wound of right thumb with damage to nail, subsequent encounter -S61101S Unspecified open wound of right thumb with damage to nail, sequela -S61102A Unspecified open wound of left thumb with damage to nail, initial encounter -S61102D Unspecified open wound of left thumb with damage to nail, subsequent encounter -S61102S Unspecified open wound of left thumb with damage to nail, sequela -S61109A Unspecified open wound of unspecified thumb with damage to nail, initial encounter -S61109D Unspecified open wound of unspecified thumb with damage to nail, subsequent encounter -S61109S Unspecified open wound of unspecified thumb with damage to nail, sequela -S61111A Laceration without foreign body of right thumb with damage to nail, initial encounter -S61111D Laceration without foreign body of right thumb with damage to nail, subsequent encounter -S61111S Laceration without foreign body of right thumb with damage to nail, sequela -S61112A Laceration without foreign body of left thumb with damage to nail, initial encounter -S61112D Laceration without foreign body of left thumb with damage to nail, subsequent encounter -S61112S Laceration without foreign body of left thumb with damage to nail, sequela -S61119A Laceration without foreign body of unspecified thumb with damage to nail, initial encounter -S61119D Laceration without foreign body of unspecified thumb with damage to nail, subsequent encounter -S61119S Laceration without foreign body of unspecified thumb with damage to nail, sequela -S61121A Laceration with foreign body of right thumb with damage to nail, initial encounter -S61121D Laceration with foreign body of right thumb with damage to nail, subsequent encounter -S61121S Laceration with foreign body of right thumb with damage to nail, sequela -S61122A Laceration with foreign body of left thumb with damage to nail, initial encounter -S61122D Laceration with foreign body of left thumb with damage to nail, subsequent encounter -S61122S Laceration with foreign body of left thumb with damage to nail, sequela -S61129A Laceration with foreign body of unspecified thumb with damage to nail, initial encounter -S61129D Laceration with foreign body of unspecified thumb with damage to nail, subsequent encounter -S61129S Laceration with foreign body of unspecified thumb with damage to nail, sequela -S61131A Puncture wound without foreign body of right thumb with damage to nail, initial encounter -S61131D Puncture wound without foreign body of right thumb with damage to nail, subsequent encounter -S61131S Puncture wound without foreign body of right thumb with damage to nail, sequela -S61132A Puncture wound without foreign body of left thumb with damage to nail, initial encounter -S61132D Puncture wound without foreign body of left thumb with damage to nail, subsequent encounter -S61132S Puncture wound without foreign body of left thumb with damage to nail, sequela -S61139A Puncture wound without foreign body of unspecified thumb with damage to nail, initial encounter -S61139D Puncture wound without foreign body of unspecified thumb with damage to nail, subsequent encounter -S61139S Puncture wound without foreign body of unspecified thumb with damage to nail, sequela -S61141A Puncture wound with foreign body of right thumb with damage to nail, initial encounter -S61141D Puncture wound with foreign body of right thumb with damage to nail, subsequent encounter -S61141S Puncture wound with foreign body of right thumb with damage to nail, sequela -S61142A Puncture wound with foreign body of left thumb with damage to nail, initial encounter -S61142D Puncture wound with foreign body of left thumb with damage to nail, subsequent encounter -S61142S Puncture wound with foreign body of left thumb with damage to nail, sequela -S61149A Puncture wound with foreign body of unspecified thumb with damage to nail, initial encounter -S61149D Puncture wound with foreign body of unspecified thumb with damage to nail, subsequent encounter -S61149S Puncture wound with foreign body of unspecified thumb with damage to nail, sequela -S61151A Open bite of right thumb with damage to nail, initial encounter -S61151D Open bite of right thumb with damage to nail, subsequent encounter -S61151S Open bite of right thumb with damage to nail, sequela -S61152A Open bite of left thumb with damage to nail, initial encounter -S61152D Open bite of left thumb with damage to nail, subsequent encounter -S61152S Open bite of left thumb with damage to nail, sequela -S61159A Open bite of unspecified thumb with damage to nail, initial encounter -S61159D Open bite of unspecified thumb with damage to nail, subsequent encounter -S61159S Open bite of unspecified thumb with damage to nail, sequela -S61200A Unspecified open wound of right index finger without damage to nail, initial encounter -S61200D Unspecified open wound of right index finger without damage to nail, subsequent encounter -S61200S Unspecified open wound of right index finger without damage to nail, sequela -S61201A Unspecified open wound of left index finger without damage to nail, initial encounter -S61201D Unspecified open wound of left index finger without damage to nail, subsequent encounter -S61201S Unspecified open wound of left index finger without damage to nail, sequela -S61202A Unspecified open wound of right middle finger without damage to nail, initial encounter -S61202D Unspecified open wound of right middle finger without damage to nail, subsequent encounter -S61202S Unspecified open wound of right middle finger without damage to nail, sequela -S61203A Unspecified open wound of left middle finger without damage to nail, initial encounter -S61203D Unspecified open wound of left middle finger without damage to nail, subsequent encounter -S61203S Unspecified open wound of left middle finger without damage to nail, sequela -S61204A Unspecified open wound of right ring finger without damage to nail, initial encounter -S61204D Unspecified open wound of right ring finger without damage to nail, subsequent encounter -S61204S Unspecified open wound of right ring finger without damage to nail, sequela -S61205A Unspecified open wound of left ring finger without damage to nail, initial encounter -S61205D Unspecified open wound of left ring finger without damage to nail, subsequent encounter -S61205S Unspecified open wound of left ring finger without damage to nail, sequela -S61206A Unspecified open wound of right little finger without damage to nail, initial encounter -S61206D Unspecified open wound of right little finger without damage to nail, subsequent encounter -S61206S Unspecified open wound of right little finger without damage to nail, sequela -S61207A Unspecified open wound of left little finger without damage to nail, initial encounter -S61207D Unspecified open wound of left little finger without damage to nail, subsequent encounter -S61207S Unspecified open wound of left little finger without damage to nail, sequela -S61208A Unspecified open wound of other finger without damage to nail, initial encounter -S61208D Unspecified open wound of other finger without damage to nail, subsequent encounter -S61208S Unspecified open wound of other finger without damage to nail, sequela -S61209A Unspecified open wound of unspecified finger without damage to nail, initial encounter -S61209D Unspecified open wound of unspecified finger without damage to nail, subsequent encounter -S61209S Unspecified open wound of unspecified finger without damage to nail, sequela -S61210A Laceration without foreign body of right index finger without damage to nail, initial encounter -S61210D Laceration without foreign body of right index finger without damage to nail, subsequent encounter -S61210S Laceration without foreign body of right index finger without damage to nail, sequela -S61211A Laceration without foreign body of left index finger without damage to nail, initial encounter -S61211D Laceration without foreign body of left index finger without damage to nail, subsequent encounter -S61211S Laceration without foreign body of left index finger without damage to nail, sequela -S61212A Laceration without foreign body of right middle finger without damage to nail, initial encounter -S61212D Laceration without foreign body of right middle finger without damage to nail, subsequent encounter -S61212S Laceration without foreign body of right middle finger without damage to nail, sequela -S61213A Laceration without foreign body of left middle finger without damage to nail, initial encounter -S61213D Laceration without foreign body of left middle finger without damage to nail, subsequent encounter -S61213S Laceration without foreign body of left middle finger without damage to nail, sequela -S61214A Laceration without foreign body of right ring finger without damage to nail, initial encounter -S61214D Laceration without foreign body of right ring finger without damage to nail, subsequent encounter -S61214S Laceration without foreign body of right ring finger without damage to nail, sequela -S61215A Laceration without foreign body of left ring finger without damage to nail, initial encounter -S61215D Laceration without foreign body of left ring finger without damage to nail, subsequent encounter -S61215S Laceration without foreign body of left ring finger without damage to nail, sequela -S61216A Laceration without foreign body of right little finger without damage to nail, initial encounter -S61216D Laceration without foreign body of right little finger without damage to nail, subsequent encounter -S61216S Laceration without foreign body of right little finger without damage to nail, sequela -S61217A Laceration without foreign body of left little finger without damage to nail, initial encounter -S61217D Laceration without foreign body of left little finger without damage to nail, subsequent encounter -S61217S Laceration without foreign body of left little finger without damage to nail, sequela -S61218A Laceration without foreign body of other finger without damage to nail, initial encounter -S61218D Laceration without foreign body of other finger without damage to nail, subsequent encounter -S61218S Laceration without foreign body of other finger without damage to nail, sequela -S61219A Laceration without foreign body of unspecified finger without damage to nail, initial encounter -S61219D Laceration without foreign body of unspecified finger without damage to nail, subsequent encounter -S61219S Laceration without foreign body of unspecified finger without damage to nail, sequela -S61220A Laceration with foreign body of right index finger without damage to nail, initial encounter -S61220D Laceration with foreign body of right index finger without damage to nail, subsequent encounter -S61220S Laceration with foreign body of right index finger without damage to nail, sequela -S61221A Laceration with foreign body of left index finger without damage to nail, initial encounter -S61221D Laceration with foreign body of left index finger without damage to nail, subsequent encounter -S61221S Laceration with foreign body of left index finger without damage to nail, sequela -S61222A Laceration with foreign body of right middle finger without damage to nail, initial encounter -S61222D Laceration with foreign body of right middle finger without damage to nail, subsequent encounter -S61222S Laceration with foreign body of right middle finger without damage to nail, sequela -S61223A Laceration with foreign body of left middle finger without damage to nail, initial encounter -S61223D Laceration with foreign body of left middle finger without damage to nail, subsequent encounter -S61223S Laceration with foreign body of left middle finger without damage to nail, sequela -S61224A Laceration with foreign body of right ring finger without damage to nail, initial encounter -S61224D Laceration with foreign body of right ring finger without damage to nail, subsequent encounter -S61224S Laceration with foreign body of right ring finger without damage to nail, sequela -S61225A Laceration with foreign body of left ring finger without damage to nail, initial encounter -S61225D Laceration with foreign body of left ring finger without damage to nail, subsequent encounter -S61225S Laceration with foreign body of left ring finger without damage to nail, sequela -S61226A Laceration with foreign body of right little finger without damage to nail, initial encounter -S61226D Laceration with foreign body of right little finger without damage to nail, subsequent encounter -S61226S Laceration with foreign body of right little finger without damage to nail, sequela -S61227A Laceration with foreign body of left little finger without damage to nail, initial encounter -S61227D Laceration with foreign body of left little finger without damage to nail, subsequent encounter -S61227S Laceration with foreign body of left little finger without damage to nail, sequela -S61228A Laceration with foreign body of other finger without damage to nail, initial encounter -S61228D Laceration with foreign body of other finger without damage to nail, subsequent encounter -S61228S Laceration with foreign body of other finger without damage to nail, sequela -S61229A Laceration with foreign body of unspecified finger without damage to nail, initial encounter -S61229D Laceration with foreign body of unspecified finger without damage to nail, subsequent encounter -S61229S Laceration with foreign body of unspecified finger without damage to nail, sequela -S61230A Puncture wound without foreign body of right index finger without damage to nail, initial encounter -S61230D Puncture wound without foreign body of right index finger without damage to nail, subsequent encounter -S61230S Puncture wound without foreign body of right index finger without damage to nail, sequela -S61231A Puncture wound without foreign body of left index finger without damage to nail, initial encounter -S61231D Puncture wound without foreign body of left index finger without damage to nail, subsequent encounter -S61231S Puncture wound without foreign body of left index finger without damage to nail, sequela -S61232A Puncture wound without foreign body of right middle finger without damage to nail, initial encounter -S61232D Puncture wound without foreign body of right middle finger without damage to nail, subsequent encounter -S61232S Puncture wound without foreign body of right middle finger without damage to nail, sequela -S61233A Puncture wound without foreign body of left middle finger without damage to nail, initial encounter -S61233D Puncture wound without foreign body of left middle finger without damage to nail, subsequent encounter -S61233S Puncture wound without foreign body of left middle finger without damage to nail, sequela -S61234A Puncture wound without foreign body of right ring finger without damage to nail, initial encounter -S61234D Puncture wound without foreign body of right ring finger without damage to nail, subsequent encounter -S61234S Puncture wound without foreign body of right ring finger without damage to nail, sequela -S61235A Puncture wound without foreign body of left ring finger without damage to nail, initial encounter -S61235D Puncture wound without foreign body of left ring finger without damage to nail, subsequent encounter -S61235S Puncture wound without foreign body of left ring finger without damage to nail, sequela -S61236A Puncture wound without foreign body of right little finger without damage to nail, initial encounter -S61236D Puncture wound without foreign body of right little finger without damage to nail, subsequent encounter -S61236S Puncture wound without foreign body of right little finger without damage to nail, sequela -S61237A Puncture wound without foreign body of left little finger without damage to nail, initial encounter -S61237D Puncture wound without foreign body of left little finger without damage to nail, subsequent encounter -S61237S Puncture wound without foreign body of left little finger without damage to nail, sequela -S61238A Puncture wound without foreign body of other finger without damage to nail, initial encounter -S61238D Puncture wound without foreign body of other finger without damage to nail, subsequent encounter -S61238S Puncture wound without foreign body of other finger without damage to nail, sequela -S61239A Puncture wound without foreign body of unspecified finger without damage to nail, initial encounter -S61239D Puncture wound without foreign body of unspecified finger without damage to nail, subsequent encounter -S61239S Puncture wound without foreign body of unspecified finger without damage to nail, sequela -S61240A Puncture wound with foreign body of right index finger without damage to nail, initial encounter -S61240D Puncture wound with foreign body of right index finger without damage to nail, subsequent encounter -S61240S Puncture wound with foreign body of right index finger without damage to nail, sequela -S61241A Puncture wound with foreign body of left index finger without damage to nail, initial encounter -S61241D Puncture wound with foreign body of left index finger without damage to nail, subsequent encounter -S61241S Puncture wound with foreign body of left index finger without damage to nail, sequela -S61242A Puncture wound with foreign body of right middle finger without damage to nail, initial encounter -S61242D Puncture wound with foreign body of right middle finger without damage to nail, subsequent encounter -S61242S Puncture wound with foreign body of right middle finger without damage to nail, sequela -S61243A Puncture wound with foreign body of left middle finger without damage to nail, initial encounter -S61243D Puncture wound with foreign body of left middle finger without damage to nail, subsequent encounter -S61243S Puncture wound with foreign body of left middle finger without damage to nail, sequela -S61244A Puncture wound with foreign body of right ring finger without damage to nail, initial encounter -S61244D Puncture wound with foreign body of right ring finger without damage to nail, subsequent encounter -S61244S Puncture wound with foreign body of right ring finger without damage to nail, sequela -S61245A Puncture wound with foreign body of left ring finger without damage to nail, initial encounter -S61245D Puncture wound with foreign body of left ring finger without damage to nail, subsequent encounter -S61245S Puncture wound with foreign body of left ring finger without damage to nail, sequela -S61246A Puncture wound with foreign body of right little finger without damage to nail, initial encounter -S61246D Puncture wound with foreign body of right little finger without damage to nail, subsequent encounter -S61246S Puncture wound with foreign body of right little finger without damage to nail, sequela -S61247A Puncture wound with foreign body of left little finger without damage to nail, initial encounter -S61247D Puncture wound with foreign body of left little finger without damage to nail, subsequent encounter -S61247S Puncture wound with foreign body of left little finger without damage to nail, sequela -S61248A Puncture wound with foreign body of other finger without damage to nail, initial encounter -S61248D Puncture wound with foreign body of other finger without damage to nail, subsequent encounter -S61248S Puncture wound with foreign body of other finger without damage to nail, sequela -S61249A Puncture wound with foreign body of unspecified finger without damage to nail, initial encounter -S61249D Puncture wound with foreign body of unspecified finger without damage to nail, subsequent encounter -S61249S Puncture wound with foreign body of unspecified finger without damage to nail, sequela -S61250A Open bite of right index finger without damage to nail, initial encounter -S61250D Open bite of right index finger without damage to nail, subsequent encounter -S61250S Open bite of right index finger without damage to nail, sequela -S61251A Open bite of left index finger without damage to nail, initial encounter -S61251D Open bite of left index finger without damage to nail, subsequent encounter -S61251S Open bite of left index finger without damage to nail, sequela -S61252A Open bite of right middle finger without damage to nail, initial encounter -S61252D Open bite of right middle finger without damage to nail, subsequent encounter -S61252S Open bite of right middle finger without damage to nail, sequela -S61253A Open bite of left middle finger without damage to nail, initial encounter -S61253D Open bite of left middle finger without damage to nail, subsequent encounter -S61253S Open bite of left middle finger without damage to nail, sequela -S61254A Open bite of right ring finger without damage to nail, initial encounter -S61254D Open bite of right ring finger without damage to nail, subsequent encounter -S61254S Open bite of right ring finger without damage to nail, sequela -S61255A Open bite of left ring finger without damage to nail, initial encounter -S61255D Open bite of left ring finger without damage to nail, subsequent encounter -S61255S Open bite of left ring finger without damage to nail, sequela -S61256A Open bite of right little finger without damage to nail, initial encounter -S61256D Open bite of right little finger without damage to nail, subsequent encounter -S61256S Open bite of right little finger without damage to nail, sequela -S61257A Open bite of left little finger without damage to nail, initial encounter -S61257D Open bite of left little finger without damage to nail, subsequent encounter -S61257S Open bite of left little finger without damage to nail, sequela -S61258A Open bite of other finger without damage to nail, initial encounter -S61258D Open bite of other finger without damage to nail, subsequent encounter -S61258S Open bite of other finger without damage to nail, sequela -S61259A Open bite of unspecified finger without damage to nail, initial encounter -S61259D Open bite of unspecified finger without damage to nail, subsequent encounter -S61259S Open bite of unspecified finger without damage to nail, sequela -S61300A Unspecified open wound of right index finger with damage to nail, initial encounter -S61300D Unspecified open wound of right index finger with damage to nail, subsequent encounter -S61300S Unspecified open wound of right index finger with damage to nail, sequela -S61301A Unspecified open wound of left index finger with damage to nail, initial encounter -S61301D Unspecified open wound of left index finger with damage to nail, subsequent encounter -S61301S Unspecified open wound of left index finger with damage to nail, sequela -S61302A Unspecified open wound of right middle finger with damage to nail, initial encounter -S61302D Unspecified open wound of right middle finger with damage to nail, subsequent encounter -S61302S Unspecified open wound of right middle finger with damage to nail, sequela -S61303A Unspecified open wound of left middle finger with damage to nail, initial encounter -S61303D Unspecified open wound of left middle finger with damage to nail, subsequent encounter -S61303S Unspecified open wound of left middle finger with damage to nail, sequela -S61304A Unspecified open wound of right ring finger with damage to nail, initial encounter -S61304D Unspecified open wound of right ring finger with damage to nail, subsequent encounter -S61304S Unspecified open wound of right ring finger with damage to nail, sequela -S61305A Unspecified open wound of left ring finger with damage to nail, initial encounter -S61305D Unspecified open wound of left ring finger with damage to nail, subsequent encounter -S61305S Unspecified open wound of left ring finger with damage to nail, sequela -S61306A Unspecified open wound of right little finger with damage to nail, initial encounter -S61306D Unspecified open wound of right little finger with damage to nail, subsequent encounter -S61306S Unspecified open wound of right little finger with damage to nail, sequela -S61307A Unspecified open wound of left little finger with damage to nail, initial encounter -S61307D Unspecified open wound of left little finger with damage to nail, subsequent encounter -S61307S Unspecified open wound of left little finger with damage to nail, sequela -S61308A Unspecified open wound of other finger with damage to nail, initial encounter -S61308D Unspecified open wound of other finger with damage to nail, subsequent encounter -S61308S Unspecified open wound of other finger with damage to nail, sequela -S61309A Unspecified open wound of unspecified finger with damage to nail, initial encounter -S61309D Unspecified open wound of unspecified finger with damage to nail, subsequent encounter -S61309S Unspecified open wound of unspecified finger with damage to nail, sequela -S61310A Laceration without foreign body of right index finger with damage to nail, initial encounter -S61310D Laceration without foreign body of right index finger with damage to nail, subsequent encounter -S61310S Laceration without foreign body of right index finger with damage to nail, sequela -S61311A Laceration without foreign body of left index finger with damage to nail, initial encounter -S61311D Laceration without foreign body of left index finger with damage to nail, subsequent encounter -S61311S Laceration without foreign body of left index finger with damage to nail, sequela -S61312A Laceration without foreign body of right middle finger with damage to nail, initial encounter -S61312D Laceration without foreign body of right middle finger with damage to nail, subsequent encounter -S61312S Laceration without foreign body of right middle finger with damage to nail, sequela -S61313A Laceration without foreign body of left middle finger with damage to nail, initial encounter -S61313D Laceration without foreign body of left middle finger with damage to nail, subsequent encounter -S61313S Laceration without foreign body of left middle finger with damage to nail, sequela -S61314A Laceration without foreign body of right ring finger with damage to nail, initial encounter -S61314D Laceration without foreign body of right ring finger with damage to nail, subsequent encounter -S61314S Laceration without foreign body of right ring finger with damage to nail, sequela -S61315A Laceration without foreign body of left ring finger with damage to nail, initial encounter -S61315D Laceration without foreign body of left ring finger with damage to nail, subsequent encounter -S61315S Laceration without foreign body of left ring finger with damage to nail, sequela -S61316A Laceration without foreign body of right little finger with damage to nail, initial encounter -S61316D Laceration without foreign body of right little finger with damage to nail, subsequent encounter -S61316S Laceration without foreign body of right little finger with damage to nail, sequela -S61317A Laceration without foreign body of left little finger with damage to nail, initial encounter -S61317D Laceration without foreign body of left little finger with damage to nail, subsequent encounter -S61317S Laceration without foreign body of left little finger with damage to nail, sequela -S61318A Laceration without foreign body of other finger with damage to nail, initial encounter -S61318D Laceration without foreign body of other finger with damage to nail, subsequent encounter -S61318S Laceration without foreign body of other finger with damage to nail, sequela -S61319A Laceration without foreign body of unspecified finger with damage to nail, initial encounter -S61319D Laceration without foreign body of unspecified finger with damage to nail, subsequent encounter -S61319S Laceration without foreign body of unspecified finger with damage to nail, sequela -S61320A Laceration with foreign body of right index finger with damage to nail, initial encounter -S61320D Laceration with foreign body of right index finger with damage to nail, subsequent encounter -S61320S Laceration with foreign body of right index finger with damage to nail, sequela -S61321A Laceration with foreign body of left index finger with damage to nail, initial encounter -S61321D Laceration with foreign body of left index finger with damage to nail, subsequent encounter -S61321S Laceration with foreign body of left index finger with damage to nail, sequela -S61322A Laceration with foreign body of right middle finger with damage to nail, initial encounter -S61322D Laceration with foreign body of right middle finger with damage to nail, subsequent encounter -S61322S Laceration with foreign body of right middle finger with damage to nail, sequela -S61323A Laceration with foreign body of left middle finger with damage to nail, initial encounter -S61323D Laceration with foreign body of left middle finger with damage to nail, subsequent encounter -S61323S Laceration with foreign body of left middle finger with damage to nail, sequela -S61324A Laceration with foreign body of right ring finger with damage to nail, initial encounter -S61324D Laceration with foreign body of right ring finger with damage to nail, subsequent encounter -S61324S Laceration with foreign body of right ring finger with damage to nail, sequela -S61325A Laceration with foreign body of left ring finger with damage to nail, initial encounter -S61325D Laceration with foreign body of left ring finger with damage to nail, subsequent encounter -S61325S Laceration with foreign body of left ring finger with damage to nail, sequela -S61326A Laceration with foreign body of right little finger with damage to nail, initial encounter -S61326D Laceration with foreign body of right little finger with damage to nail, subsequent encounter -S61326S Laceration with foreign body of right little finger with damage to nail, sequela -S61327A Laceration with foreign body of left little finger with damage to nail, initial encounter -S61327D Laceration with foreign body of left little finger with damage to nail, subsequent encounter -S61327S Laceration with foreign body of left little finger with damage to nail, sequela -S61328A Laceration with foreign body of other finger with damage to nail, initial encounter -S61328D Laceration with foreign body of other finger with damage to nail, subsequent encounter -S61328S Laceration with foreign body of other finger with damage to nail, sequela -S61329A Laceration with foreign body of unspecified finger with damage to nail, initial encounter -S61329D Laceration with foreign body of unspecified finger with damage to nail, subsequent encounter -S61329S Laceration with foreign body of unspecified finger with damage to nail, sequela -S61330A Puncture wound without foreign body of right index finger with damage to nail, initial encounter -S61330D Puncture wound without foreign body of right index finger with damage to nail, subsequent encounter -S61330S Puncture wound without foreign body of right index finger with damage to nail, sequela -S61331A Puncture wound without foreign body of left index finger with damage to nail, initial encounter -S61331D Puncture wound without foreign body of left index finger with damage to nail, subsequent encounter -S61331S Puncture wound without foreign body of left index finger with damage to nail, sequela -S61332A Puncture wound without foreign body of right middle finger with damage to nail, initial encounter -S61332D Puncture wound without foreign body of right middle finger with damage to nail, subsequent encounter -S61332S Puncture wound without foreign body of right middle finger with damage to nail, sequela -S61333A Puncture wound without foreign body of left middle finger with damage to nail, initial encounter -S61333D Puncture wound without foreign body of left middle finger with damage to nail, subsequent encounter -S61333S Puncture wound without foreign body of left middle finger with damage to nail, sequela -S61334A Puncture wound without foreign body of right ring finger with damage to nail, initial encounter -S61334D Puncture wound without foreign body of right ring finger with damage to nail, subsequent encounter -S61334S Puncture wound without foreign body of right ring finger with damage to nail, sequela -S61335A Puncture wound without foreign body of left ring finger with damage to nail, initial encounter -S61335D Puncture wound without foreign body of left ring finger with damage to nail, subsequent encounter -S61335S Puncture wound without foreign body of left ring finger with damage to nail, sequela -S61336A Puncture wound without foreign body of right little finger with damage to nail, initial encounter -S61336D Puncture wound without foreign body of right little finger with damage to nail, subsequent encounter -S61336S Puncture wound without foreign body of right little finger with damage to nail, sequela -S61337A Puncture wound without foreign body of left little finger with damage to nail, initial encounter -S61337D Puncture wound without foreign body of left little finger with damage to nail, subsequent encounter -S61337S Puncture wound without foreign body of left little finger with damage to nail, sequela -S61338A Puncture wound without foreign body of other finger with damage to nail, initial encounter -S61338D Puncture wound without foreign body of other finger with damage to nail, subsequent encounter -S61338S Puncture wound without foreign body of other finger with damage to nail, sequela -S61339A Puncture wound without foreign body of unspecified finger with damage to nail, initial encounter -S61339D Puncture wound without foreign body of unspecified finger with damage to nail, subsequent encounter -S61339S Puncture wound without foreign body of unspecified finger with damage to nail, sequela -S61340A Puncture wound with foreign body of right index finger with damage to nail, initial encounter -S61340D Puncture wound with foreign body of right index finger with damage to nail, subsequent encounter -S61340S Puncture wound with foreign body of right index finger with damage to nail, sequela -S61341A Puncture wound with foreign body of left index finger with damage to nail, initial encounter -S61341D Puncture wound with foreign body of left index finger with damage to nail, subsequent encounter -S61341S Puncture wound with foreign body of left index finger with damage to nail, sequela -S61342A Puncture wound with foreign body of right middle finger with damage to nail, initial encounter -S61342D Puncture wound with foreign body of right middle finger with damage to nail, subsequent encounter -S61342S Puncture wound with foreign body of right middle finger with damage to nail, sequela -S61343A Puncture wound with foreign body of left middle finger with damage to nail, initial encounter -S61343D Puncture wound with foreign body of left middle finger with damage to nail, subsequent encounter -S61343S Puncture wound with foreign body of left middle finger with damage to nail, sequela -S61344A Puncture wound with foreign body of right ring finger with damage to nail, initial encounter -S61344D Puncture wound with foreign body of right ring finger with damage to nail, subsequent encounter -S61344S Puncture wound with foreign body of right ring finger with damage to nail, sequela -S61345A Puncture wound with foreign body of left ring finger with damage to nail, initial encounter -S61345D Puncture wound with foreign body of left ring finger with damage to nail, subsequent encounter -S61345S Puncture wound with foreign body of left ring finger with damage to nail, sequela -S61346A Puncture wound with foreign body of right little finger with damage to nail, initial encounter -S61346D Puncture wound with foreign body of right little finger with damage to nail, subsequent encounter -S61346S Puncture wound with foreign body of right little finger with damage to nail, sequela -S61347A Puncture wound with foreign body of left little finger with damage to nail, initial encounter -S61347D Puncture wound with foreign body of left little finger with damage to nail, subsequent encounter -S61347S Puncture wound with foreign body of left little finger with damage to nail, sequela -S61348A Puncture wound with foreign body of other finger with damage to nail, initial encounter -S61348D Puncture wound with foreign body of other finger with damage to nail, subsequent encounter -S61348S Puncture wound with foreign body of other finger with damage to nail, sequela -S61349A Puncture wound with foreign body of unspecified finger with damage to nail, initial encounter -S61349D Puncture wound with foreign body of unspecified finger with damage to nail, subsequent encounter -S61349S Puncture wound with foreign body of unspecified finger with damage to nail, sequela -S61350A Open bite of right index finger with damage to nail, initial encounter -S61350D Open bite of right index finger with damage to nail, subsequent encounter -S61350S Open bite of right index finger with damage to nail, sequela -S61351A Open bite of left index finger with damage to nail, initial encounter -S61351D Open bite of left index finger with damage to nail, subsequent encounter -S61351S Open bite of left index finger with damage to nail, sequela -S61352A Open bite of right middle finger with damage to nail, initial encounter -S61352D Open bite of right middle finger with damage to nail, subsequent encounter -S61352S Open bite of right middle finger with damage to nail, sequela -S61353A Open bite of left middle finger with damage to nail, initial encounter -S61353D Open bite of left middle finger with damage to nail, subsequent encounter -S61353S Open bite of left middle finger with damage to nail, sequela -S61354A Open bite of right ring finger with damage to nail, initial encounter -S61354D Open bite of right ring finger with damage to nail, subsequent encounter -S61354S Open bite of right ring finger with damage to nail, sequela -S61355A Open bite of left ring finger with damage to nail, initial encounter -S61355D Open bite of left ring finger with damage to nail, subsequent encounter -S61355S Open bite of left ring finger with damage to nail, sequela -S61356A Open bite of right little finger with damage to nail, initial encounter -S61356D Open bite of right little finger with damage to nail, subsequent encounter -S61356S Open bite of right little finger with damage to nail, sequela -S61357A Open bite of left little finger with damage to nail, initial encounter -S61357D Open bite of left little finger with damage to nail, subsequent encounter -S61357S Open bite of left little finger with damage to nail, sequela -S61358A Open bite of other finger with damage to nail, initial encounter -S61358D Open bite of other finger with damage to nail, subsequent encounter -S61358S Open bite of other finger with damage to nail, sequela -S61359A Open bite of unspecified finger with damage to nail, initial encounter -S61359D Open bite of unspecified finger with damage to nail, subsequent encounter -S61359S Open bite of unspecified finger with damage to nail, sequela -S61401A Unspecified open wound of right hand, initial encounter -S61401D Unspecified open wound of right hand, subsequent encounter -S61401S Unspecified open wound of right hand, sequela -S61402A Unspecified open wound of left hand, initial encounter -S61402D Unspecified open wound of left hand, subsequent encounter -S61402S Unspecified open wound of left hand, sequela -S61409A Unspecified open wound of unspecified hand, initial encounter -S61409D Unspecified open wound of unspecified hand, subsequent encounter -S61409S Unspecified open wound of unspecified hand, sequela -S61411A Laceration without foreign body of right hand, initial encounter -S61411D Laceration without foreign body of right hand, subsequent encounter -S61411S Laceration without foreign body of right hand, sequela -S61412A Laceration without foreign body of left hand, initial encounter -S61412D Laceration without foreign body of left hand, subsequent encounter -S61412S Laceration without foreign body of left hand, sequela -S61419A Laceration without foreign body of unspecified hand, initial encounter -S61419D Laceration without foreign body of unspecified hand, subsequent encounter -S61419S Laceration without foreign body of unspecified hand, sequela -S61421A Laceration with foreign body of right hand, initial encounter -S61421D Laceration with foreign body of right hand, subsequent encounter -S61421S Laceration with foreign body of right hand, sequela -S61422A Laceration with foreign body of left hand, initial encounter -S61422D Laceration with foreign body of left hand, subsequent encounter -S61422S Laceration with foreign body of left hand, sequela -S61429A Laceration with foreign body of unspecified hand, initial encounter -S61429D Laceration with foreign body of unspecified hand, subsequent encounter -S61429S Laceration with foreign body of unspecified hand, sequela -S61431A Puncture wound without foreign body of right hand, initial encounter -S61431D Puncture wound without foreign body of right hand, subsequent encounter -S61431S Puncture wound without foreign body of right hand, sequela -S61432A Puncture wound without foreign body of left hand, initial encounter -S61432D Puncture wound without foreign body of left hand, subsequent encounter -S61432S Puncture wound without foreign body of left hand, sequela -S61439A Puncture wound without foreign body of unspecified hand, initial encounter -S61439D Puncture wound without foreign body of unspecified hand, subsequent encounter -S61439S Puncture wound without foreign body of unspecified hand, sequela -S61441A Puncture wound with foreign body of right hand, initial encounter -S61441D Puncture wound with foreign body of right hand, subsequent encounter -S61441S Puncture wound with foreign body of right hand, sequela -S61442A Puncture wound with foreign body of left hand, initial encounter -S61442D Puncture wound with foreign body of left hand, subsequent encounter -S61442S Puncture wound with foreign body of left hand, sequela -S61449A Puncture wound with foreign body of unspecified hand, initial encounter -S61449D Puncture wound with foreign body of unspecified hand, subsequent encounter -S61449S Puncture wound with foreign body of unspecified hand, sequela -S61451A Open bite of right hand, initial encounter -S61451D Open bite of right hand, subsequent encounter -S61451S Open bite of right hand, sequela -S61452A Open bite of left hand, initial encounter -S61452D Open bite of left hand, subsequent encounter -S61452S Open bite of left hand, sequela -S61459A Open bite of unspecified hand, initial encounter -S61459D Open bite of unspecified hand, subsequent encounter -S61459S Open bite of unspecified hand, sequela -S61501A Unspecified open wound of right wrist, initial encounter -S61501D Unspecified open wound of right wrist, subsequent encounter -S61501S Unspecified open wound of right wrist, sequela -S61502A Unspecified open wound of left wrist, initial encounter -S61502D Unspecified open wound of left wrist, subsequent encounter -S61502S Unspecified open wound of left wrist, sequela -S61509A Unspecified open wound of unspecified wrist, initial encounter -S61509D Unspecified open wound of unspecified wrist, subsequent encounter -S61509S Unspecified open wound of unspecified wrist, sequela -S61511A Laceration without foreign body of right wrist, initial encounter -S61511D Laceration without foreign body of right wrist, subsequent encounter -S61511S Laceration without foreign body of right wrist, sequela -S61512A Laceration without foreign body of left wrist, initial encounter -S61512D Laceration without foreign body of left wrist, subsequent encounter -S61512S Laceration without foreign body of left wrist, sequela -S61519A Laceration without foreign body of unspecified wrist, initial encounter -S61519D Laceration without foreign body of unspecified wrist, subsequent encounter -S61519S Laceration without foreign body of unspecified wrist, sequela -S61521A Laceration with foreign body of right wrist, initial encounter -S61521D Laceration with foreign body of right wrist, subsequent encounter -S61521S Laceration with foreign body of right wrist, sequela -S61522A Laceration with foreign body of left wrist, initial encounter -S61522D Laceration with foreign body of left wrist, subsequent encounter -S61522S Laceration with foreign body of left wrist, sequela -S61529A Laceration with foreign body of unspecified wrist, initial encounter -S61529D Laceration with foreign body of unspecified wrist, subsequent encounter -S61529S Laceration with foreign body of unspecified wrist, sequela -S61531A Puncture wound without foreign body of right wrist, initial encounter -S61531D Puncture wound without foreign body of right wrist, subsequent encounter -S61531S Puncture wound without foreign body of right wrist, sequela -S61532A Puncture wound without foreign body of left wrist, initial encounter -S61532D Puncture wound without foreign body of left wrist, subsequent encounter -S61532S Puncture wound without foreign body of left wrist, sequela -S61539A Puncture wound without foreign body of unspecified wrist, initial encounter -S61539D Puncture wound without foreign body of unspecified wrist, subsequent encounter -S61539S Puncture wound without foreign body of unspecified wrist, sequela -S61541A Puncture wound with foreign body of right wrist, initial encounter -S61541D Puncture wound with foreign body of right wrist, subsequent encounter -S61541S Puncture wound with foreign body of right wrist, sequela -S61542A Puncture wound with foreign body of left wrist, initial encounter -S61542D Puncture wound with foreign body of left wrist, subsequent encounter -S61542S Puncture wound with foreign body of left wrist, sequela -S61549A Puncture wound with foreign body of unspecified wrist, initial encounter -S61549D Puncture wound with foreign body of unspecified wrist, subsequent encounter -S61549S Puncture wound with foreign body of unspecified wrist, sequela -S61551A Open bite of right wrist, initial encounter -S61551D Open bite of right wrist, subsequent encounter -S61551S Open bite of right wrist, sequela -S61552A Open bite of left wrist, initial encounter -S61552D Open bite of left wrist, subsequent encounter -S61552S Open bite of left wrist, sequela -S61559A Open bite of unspecified wrist, initial encounter -S61559D Open bite of unspecified wrist, subsequent encounter -S61559S Open bite of unspecified wrist, sequela -S62001A Unspecified fracture of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62001B Unspecified fracture of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62001D Unspecified fracture of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62001G Unspecified fracture of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62001K Unspecified fracture of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62001P Unspecified fracture of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62001S Unspecified fracture of navicular [scaphoid] bone of right wrist, sequela -S62002A Unspecified fracture of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62002B Unspecified fracture of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62002D Unspecified fracture of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62002G Unspecified fracture of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62002K Unspecified fracture of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62002P Unspecified fracture of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62002S Unspecified fracture of navicular [scaphoid] bone of left wrist, sequela -S62009A Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62009B Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62009D Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62009G Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62009K Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62009P Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62009S Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, sequela -S62011A Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62011B Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62011D Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62011G Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62011K Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62011P Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62011S Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, sequela -S62012A Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62012B Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62012D Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62012G Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62012K Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62012P Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62012S Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, sequela -S62013A Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62013B Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62013D Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62013G Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62013K Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62013P Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62013S Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, sequela -S62014A Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62014B Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62014D Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62014G Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62014K Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62014P Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62014S Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, sequela -S62015A Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62015B Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62015D Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62015G Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62015K Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62015P Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62015S Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, sequela -S62016A Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62016B Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62016D Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62016G Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62016K Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62016P Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62016S Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, sequela -S62021A Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62021B Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62021D Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62021G Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62021K Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62021P Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62021S Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, sequela -S62022A Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62022B Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62022D Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62022G Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62022K Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62022P Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62022S Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, sequela -S62023A Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62023B Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62023D Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62023G Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62023K Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62023P Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62023S Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, sequela -S62024A Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62024B Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62024D Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62024G Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62024K Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62024P Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62024S Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, sequela -S62025A Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62025B Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62025D Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62025G Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62025K Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62025P Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62025S Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, sequela -S62026A Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62026B Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62026D Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62026G Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62026K Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62026P Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62026S Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, sequela -S62031A Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62031B Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62031D Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62031G Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62031K Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62031P Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62031S Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, sequela -S62032A Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62032B Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62032D Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62032G Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62032K Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62032P Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62032S Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, sequela -S62033A Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62033B Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62033D Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62033G Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62033K Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62033P Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62033S Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, sequela -S62034A Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62034B Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62034D Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62034G Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62034K Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62034P Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62034S Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, sequela -S62035A Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62035B Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62035D Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62035G Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62035K Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62035P Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62035S Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, sequela -S62036A Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62036B Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62036D Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62036G Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62036K Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62036P Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62036S Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, sequela -S62101A Fracture of unspecified carpal bone, right wrist, initial encounter for closed fracture -S62101B Fracture of unspecified carpal bone, right wrist, initial encounter for open fracture -S62101D Fracture of unspecified carpal bone, right wrist, subsequent encounter for fracture with routine healing -S62101G Fracture of unspecified carpal bone, right wrist, subsequent encounter for fracture with delayed healing -S62101K Fracture of unspecified carpal bone, right wrist, subsequent encounter for fracture with nonunion -S62101P Fracture of unspecified carpal bone, right wrist, subsequent encounter for fracture with malunion -S62101S Fracture of unspecified carpal bone, right wrist, sequela -S62102A Fracture of unspecified carpal bone, left wrist, initial encounter for closed fracture -S62102B Fracture of unspecified carpal bone, left wrist, initial encounter for open fracture -S62102D Fracture of unspecified carpal bone, left wrist, subsequent encounter for fracture with routine healing -S62102G Fracture of unspecified carpal bone, left wrist, subsequent encounter for fracture with delayed healing -S62102K Fracture of unspecified carpal bone, left wrist, subsequent encounter for fracture with nonunion -S62102P Fracture of unspecified carpal bone, left wrist, subsequent encounter for fracture with malunion -S62102S Fracture of unspecified carpal bone, left wrist, sequela -S62109A Fracture of unspecified carpal bone, unspecified wrist, initial encounter for closed fracture -S62109B Fracture of unspecified carpal bone, unspecified wrist, initial encounter for open fracture -S62109D Fracture of unspecified carpal bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62109G Fracture of unspecified carpal bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62109K Fracture of unspecified carpal bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62109P Fracture of unspecified carpal bone, unspecified wrist, subsequent encounter for fracture with malunion -S62109S Fracture of unspecified carpal bone, unspecified wrist, sequela -S62111A Displaced fracture of triquetrum [cuneiform] bone, right wrist, initial encounter for closed fracture -S62111B Displaced fracture of triquetrum [cuneiform] bone, right wrist, initial encounter for open fracture -S62111D Displaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with routine healing -S62111G Displaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62111K Displaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with nonunion -S62111P Displaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with malunion -S62111S Displaced fracture of triquetrum [cuneiform] bone, right wrist, sequela -S62112A Displaced fracture of triquetrum [cuneiform] bone, left wrist, initial encounter for closed fracture -S62112B Displaced fracture of triquetrum [cuneiform] bone, left wrist, initial encounter for open fracture -S62112D Displaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with routine healing -S62112G Displaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62112K Displaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with nonunion -S62112P Displaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with malunion -S62112S Displaced fracture of triquetrum [cuneiform] bone, left wrist, sequela -S62113A Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, initial encounter for closed fracture -S62113B Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, initial encounter for open fracture -S62113D Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62113G Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62113K Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62113P Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62113S Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, sequela -S62114A Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, initial encounter for closed fracture -S62114B Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, initial encounter for open fracture -S62114D Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with routine healing -S62114G Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62114K Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with nonunion -S62114P Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with malunion -S62114S Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, sequela -S62115A Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, initial encounter for closed fracture -S62115B Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, initial encounter for open fracture -S62115D Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with routine healing -S62115G Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62115K Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with nonunion -S62115P Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with malunion -S62115S Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, sequela -S62116A Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, initial encounter for closed fracture -S62116B Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, initial encounter for open fracture -S62116D Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62116G Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62116K Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62116P Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62116S Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, sequela -S62121A Displaced fracture of lunate [semilunar], right wrist, initial encounter for closed fracture -S62121B Displaced fracture of lunate [semilunar], right wrist, initial encounter for open fracture -S62121D Displaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with routine healing -S62121G Displaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with delayed healing -S62121K Displaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with nonunion -S62121P Displaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with malunion -S62121S Displaced fracture of lunate [semilunar], right wrist, sequela -S62122A Displaced fracture of lunate [semilunar], left wrist, initial encounter for closed fracture -S62122B Displaced fracture of lunate [semilunar], left wrist, initial encounter for open fracture -S62122D Displaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with routine healing -S62122G Displaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with delayed healing -S62122K Displaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with nonunion -S62122P Displaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with malunion -S62122S Displaced fracture of lunate [semilunar], left wrist, sequela -S62123A Displaced fracture of lunate [semilunar], unspecified wrist, initial encounter for closed fracture -S62123B Displaced fracture of lunate [semilunar], unspecified wrist, initial encounter for open fracture -S62123D Displaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with routine healing -S62123G Displaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with delayed healing -S62123K Displaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with nonunion -S62123P Displaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with malunion -S62123S Displaced fracture of lunate [semilunar], unspecified wrist, sequela -S62124A Nondisplaced fracture of lunate [semilunar], right wrist, initial encounter for closed fracture -S62124B Nondisplaced fracture of lunate [semilunar], right wrist, initial encounter for open fracture -S62124D Nondisplaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with routine healing -S62124G Nondisplaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with delayed healing -S62124K Nondisplaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with nonunion -S62124P Nondisplaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with malunion -S62124S Nondisplaced fracture of lunate [semilunar], right wrist, sequela -S62125A Nondisplaced fracture of lunate [semilunar], left wrist, initial encounter for closed fracture -S62125B Nondisplaced fracture of lunate [semilunar], left wrist, initial encounter for open fracture -S62125D Nondisplaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with routine healing -S62125G Nondisplaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with delayed healing -S62125K Nondisplaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with nonunion -S62125P Nondisplaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with malunion -S62125S Nondisplaced fracture of lunate [semilunar], left wrist, sequela -S62126A Nondisplaced fracture of lunate [semilunar], unspecified wrist, initial encounter for closed fracture -S62126B Nondisplaced fracture of lunate [semilunar], unspecified wrist, initial encounter for open fracture -S62126D Nondisplaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with routine healing -S62126G Nondisplaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with delayed healing -S62126K Nondisplaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with nonunion -S62126P Nondisplaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with malunion -S62126S Nondisplaced fracture of lunate [semilunar], unspecified wrist, sequela -S62131A Displaced fracture of capitate [os magnum] bone, right wrist, initial encounter for closed fracture -S62131B Displaced fracture of capitate [os magnum] bone, right wrist, initial encounter for open fracture -S62131D Displaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with routine healing -S62131G Displaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with delayed healing -S62131K Displaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with nonunion -S62131P Displaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with malunion -S62131S Displaced fracture of capitate [os magnum] bone, right wrist, sequela -S62132A Displaced fracture of capitate [os magnum] bone, left wrist, initial encounter for closed fracture -S62132B Displaced fracture of capitate [os magnum] bone, left wrist, initial encounter for open fracture -S62132D Displaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with routine healing -S62132G Displaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with delayed healing -S62132K Displaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with nonunion -S62132P Displaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with malunion -S62132S Displaced fracture of capitate [os magnum] bone, left wrist, sequela -S62133A Displaced fracture of capitate [os magnum] bone, unspecified wrist, initial encounter for closed fracture -S62133B Displaced fracture of capitate [os magnum] bone, unspecified wrist, initial encounter for open fracture -S62133D Displaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62133G Displaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62133K Displaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62133P Displaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62133S Displaced fracture of capitate [os magnum] bone, unspecified wrist, sequela -S62134A Nondisplaced fracture of capitate [os magnum] bone, right wrist, initial encounter for closed fracture -S62134B Nondisplaced fracture of capitate [os magnum] bone, right wrist, initial encounter for open fracture -S62134D Nondisplaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with routine healing -S62134G Nondisplaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with delayed healing -S62134K Nondisplaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with nonunion -S62134P Nondisplaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with malunion -S62134S Nondisplaced fracture of capitate [os magnum] bone, right wrist, sequela -S62135A Nondisplaced fracture of capitate [os magnum] bone, left wrist, initial encounter for closed fracture -S62135B Nondisplaced fracture of capitate [os magnum] bone, left wrist, initial encounter for open fracture -S62135D Nondisplaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with routine healing -S62135G Nondisplaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with delayed healing -S62135K Nondisplaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with nonunion -S62135P Nondisplaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with malunion -S62135S Nondisplaced fracture of capitate [os magnum] bone, left wrist, sequela -S62136A Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, initial encounter for closed fracture -S62136B Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, initial encounter for open fracture -S62136D Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62136G Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62136K Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62136P Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62136S Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, sequela -S62141A Displaced fracture of body of hamate [unciform] bone, right wrist, initial encounter for closed fracture -S62141B Displaced fracture of body of hamate [unciform] bone, right wrist, initial encounter for open fracture -S62141D Displaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with routine healing -S62141G Displaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62141K Displaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with nonunion -S62141P Displaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with malunion -S62141S Displaced fracture of body of hamate [unciform] bone, right wrist, sequela -S62142A Displaced fracture of body of hamate [unciform] bone, left wrist, initial encounter for closed fracture -S62142B Displaced fracture of body of hamate [unciform] bone, left wrist, initial encounter for open fracture -S62142D Displaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with routine healing -S62142G Displaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62142K Displaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with nonunion -S62142P Displaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with malunion -S62142S Displaced fracture of body of hamate [unciform] bone, left wrist, sequela -S62143A Displaced fracture of body of hamate [unciform] bone, unspecified wrist, initial encounter for closed fracture -S62143B Displaced fracture of body of hamate [unciform] bone, unspecified wrist, initial encounter for open fracture -S62143D Displaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62143G Displaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62143K Displaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62143P Displaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62143S Displaced fracture of body of hamate [unciform] bone, unspecified wrist, sequela -S62144A Nondisplaced fracture of body of hamate [unciform] bone, right wrist, initial encounter for closed fracture -S62144B Nondisplaced fracture of body of hamate [unciform] bone, right wrist, initial encounter for open fracture -S62144D Nondisplaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with routine healing -S62144G Nondisplaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62144K Nondisplaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with nonunion -S62144P Nondisplaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with malunion -S62144S Nondisplaced fracture of body of hamate [unciform] bone, right wrist, sequela -S62145A Nondisplaced fracture of body of hamate [unciform] bone, left wrist, initial encounter for closed fracture -S62145B Nondisplaced fracture of body of hamate [unciform] bone, left wrist, initial encounter for open fracture -S62145D Nondisplaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with routine healing -S62145G Nondisplaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62145K Nondisplaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with nonunion -S62145P Nondisplaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with malunion -S62145S Nondisplaced fracture of body of hamate [unciform] bone, left wrist, sequela -S62146A Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, initial encounter for closed fracture -S62146B Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, initial encounter for open fracture -S62146D Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62146G Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62146K Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62146P Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62146S Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, sequela -S62151A Displaced fracture of hook process of hamate [unciform] bone, right wrist, initial encounter for closed fracture -S62151B Displaced fracture of hook process of hamate [unciform] bone, right wrist, initial encounter for open fracture -S62151D Displaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with routine healing -S62151G Displaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62151K Displaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with nonunion -S62151P Displaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with malunion -S62151S Displaced fracture of hook process of hamate [unciform] bone, right wrist, sequela -S62152A Displaced fracture of hook process of hamate [unciform] bone, left wrist, initial encounter for closed fracture -S62152B Displaced fracture of hook process of hamate [unciform] bone, left wrist, initial encounter for open fracture -S62152D Displaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with routine healing -S62152G Displaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62152K Displaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with nonunion -S62152P Displaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with malunion -S62152S Displaced fracture of hook process of hamate [unciform] bone, left wrist, sequela -S62153A Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, initial encounter for closed fracture -S62153B Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, initial encounter for open fracture -S62153D Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62153G Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62153K Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62153P Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62153S Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, sequela -S62154A Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, initial encounter for closed fracture -S62154B Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, initial encounter for open fracture -S62154D Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with routine healing -S62154G Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62154K Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with nonunion -S62154P Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with malunion -S62154S Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, sequela -S62155A Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, initial encounter for closed fracture -S62155B Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, initial encounter for open fracture -S62155D Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with routine healing -S62155G Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62155K Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with nonunion -S62155P Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with malunion -S62155S Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, sequela -S62156A Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, initial encounter for closed fracture -S62156B Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, initial encounter for open fracture -S62156D Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62156G Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62156K Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62156P Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62156S Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, sequela -S62161A Displaced fracture of pisiform, right wrist, initial encounter for closed fracture -S62161B Displaced fracture of pisiform, right wrist, initial encounter for open fracture -S62161D Displaced fracture of pisiform, right wrist, subsequent encounter for fracture with routine healing -S62161G Displaced fracture of pisiform, right wrist, subsequent encounter for fracture with delayed healing -S62161K Displaced fracture of pisiform, right wrist, subsequent encounter for fracture with nonunion -S62161P Displaced fracture of pisiform, right wrist, subsequent encounter for fracture with malunion -S62161S Displaced fracture of pisiform, right wrist, sequela -S62162A Displaced fracture of pisiform, left wrist, initial encounter for closed fracture -S62162B Displaced fracture of pisiform, left wrist, initial encounter for open fracture -S62162D Displaced fracture of pisiform, left wrist, subsequent encounter for fracture with routine healing -S62162G Displaced fracture of pisiform, left wrist, subsequent encounter for fracture with delayed healing -S62162K Displaced fracture of pisiform, left wrist, subsequent encounter for fracture with nonunion -S62162P Displaced fracture of pisiform, left wrist, subsequent encounter for fracture with malunion -S62162S Displaced fracture of pisiform, left wrist, sequela -S62163A Displaced fracture of pisiform, unspecified wrist, initial encounter for closed fracture -S62163B Displaced fracture of pisiform, unspecified wrist, initial encounter for open fracture -S62163D Displaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with routine healing -S62163G Displaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with delayed healing -S62163K Displaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with nonunion -S62163P Displaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with malunion -S62163S Displaced fracture of pisiform, unspecified wrist, sequela -S62164A Nondisplaced fracture of pisiform, right wrist, initial encounter for closed fracture -S62164B Nondisplaced fracture of pisiform, right wrist, initial encounter for open fracture -S62164D Nondisplaced fracture of pisiform, right wrist, subsequent encounter for fracture with routine healing -S62164G Nondisplaced fracture of pisiform, right wrist, subsequent encounter for fracture with delayed healing -S62164K Nondisplaced fracture of pisiform, right wrist, subsequent encounter for fracture with nonunion -S62164P Nondisplaced fracture of pisiform, right wrist, subsequent encounter for fracture with malunion -S62164S Nondisplaced fracture of pisiform, right wrist, sequela -S62165A Nondisplaced fracture of pisiform, left wrist, initial encounter for closed fracture -S62165B Nondisplaced fracture of pisiform, left wrist, initial encounter for open fracture -S62165D Nondisplaced fracture of pisiform, left wrist, subsequent encounter for fracture with routine healing -S62165G Nondisplaced fracture of pisiform, left wrist, subsequent encounter for fracture with delayed healing -S62165K Nondisplaced fracture of pisiform, left wrist, subsequent encounter for fracture with nonunion -S62165P Nondisplaced fracture of pisiform, left wrist, subsequent encounter for fracture with malunion -S62165S Nondisplaced fracture of pisiform, left wrist, sequela -S62166A Nondisplaced fracture of pisiform, unspecified wrist, initial encounter for closed fracture -S62166B Nondisplaced fracture of pisiform, unspecified wrist, initial encounter for open fracture -S62166D Nondisplaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with routine healing -S62166G Nondisplaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with delayed healing -S62166K Nondisplaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with nonunion -S62166P Nondisplaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with malunion -S62166S Nondisplaced fracture of pisiform, unspecified wrist, sequela -S62171A Displaced fracture of trapezium [larger multangular], right wrist, initial encounter for closed fracture -S62171B Displaced fracture of trapezium [larger multangular], right wrist, initial encounter for open fracture -S62171D Displaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with routine healing -S62171G Displaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with delayed healing -S62171K Displaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with nonunion -S62171P Displaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with malunion -S62171S Displaced fracture of trapezium [larger multangular], right wrist, sequela -S62172A Displaced fracture of trapezium [larger multangular], left wrist, initial encounter for closed fracture -S62172B Displaced fracture of trapezium [larger multangular], left wrist, initial encounter for open fracture -S62172D Displaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with routine healing -S62172G Displaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with delayed healing -S62172K Displaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with nonunion -S62172P Displaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with malunion -S62172S Displaced fracture of trapezium [larger multangular], left wrist, sequela -S62173A Displaced fracture of trapezium [larger multangular], unspecified wrist, initial encounter for closed fracture -S62173B Displaced fracture of trapezium [larger multangular], unspecified wrist, initial encounter for open fracture -S62173D Displaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with routine healing -S62173G Displaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with delayed healing -S62173K Displaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with nonunion -S62173P Displaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with malunion -S62173S Displaced fracture of trapezium [larger multangular], unspecified wrist, sequela -S62174A Nondisplaced fracture of trapezium [larger multangular], right wrist, initial encounter for closed fracture -S62174B Nondisplaced fracture of trapezium [larger multangular], right wrist, initial encounter for open fracture -S62174D Nondisplaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with routine healing -S62174G Nondisplaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with delayed healing -S62174K Nondisplaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with nonunion -S62174P Nondisplaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with malunion -S62174S Nondisplaced fracture of trapezium [larger multangular], right wrist, sequela -S62175A Nondisplaced fracture of trapezium [larger multangular], left wrist, initial encounter for closed fracture -S62175B Nondisplaced fracture of trapezium [larger multangular], left wrist, initial encounter for open fracture -S62175D Nondisplaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with routine healing -S62175G Nondisplaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with delayed healing -S62175K Nondisplaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with nonunion -S62175P Nondisplaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with malunion -S62175S Nondisplaced fracture of trapezium [larger multangular], left wrist, sequela -S62176A Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, initial encounter for closed fracture -S62176B Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, initial encounter for open fracture -S62176D Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with routine healing -S62176G Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with delayed healing -S62176K Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with nonunion -S62176P Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with malunion -S62176S Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, sequela -S62181A Displaced fracture of trapezoid [smaller multangular], right wrist, initial encounter for closed fracture -S62181B Displaced fracture of trapezoid [smaller multangular], right wrist, initial encounter for open fracture -S62181D Displaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with routine healing -S62181G Displaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with delayed healing -S62181K Displaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with nonunion -S62181P Displaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with malunion -S62181S Displaced fracture of trapezoid [smaller multangular], right wrist, sequela -S62182A Displaced fracture of trapezoid [smaller multangular], left wrist, initial encounter for closed fracture -S62182B Displaced fracture of trapezoid [smaller multangular], left wrist, initial encounter for open fracture -S62182D Displaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with routine healing -S62182G Displaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with delayed healing -S62182K Displaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with nonunion -S62182P Displaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with malunion -S62182S Displaced fracture of trapezoid [smaller multangular], left wrist, sequela -S62183A Displaced fracture of trapezoid [smaller multangular], unspecified wrist, initial encounter for closed fracture -S62183B Displaced fracture of trapezoid [smaller multangular], unspecified wrist, initial encounter for open fracture -S62183D Displaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with routine healing -S62183G Displaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with delayed healing -S62183K Displaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with nonunion -S62183P Displaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with malunion -S62183S Displaced fracture of trapezoid [smaller multangular], unspecified wrist, sequela -S62184A Nondisplaced fracture of trapezoid [smaller multangular], right wrist, initial encounter for closed fracture -S62184B Nondisplaced fracture of trapezoid [smaller multangular], right wrist, initial encounter for open fracture -S62184D Nondisplaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with routine healing -S62184G Nondisplaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with delayed healing -S62184K Nondisplaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with nonunion -S62184P Nondisplaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with malunion -S62184S Nondisplaced fracture of trapezoid [smaller multangular], right wrist, sequela -S62185A Nondisplaced fracture of trapezoid [smaller multangular], left wrist, initial encounter for closed fracture -S62185B Nondisplaced fracture of trapezoid [smaller multangular], left wrist, initial encounter for open fracture -S62185D Nondisplaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with routine healing -S62185G Nondisplaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with delayed healing -S62185K Nondisplaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with nonunion -S62185P Nondisplaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with malunion -S62185S Nondisplaced fracture of trapezoid [smaller multangular], left wrist, sequela -S62186A Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, initial encounter for closed fracture -S62186B Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, initial encounter for open fracture -S62186D Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with routine healing -S62186G Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with delayed healing -S62186K Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with nonunion -S62186P Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with malunion -S62186S Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, sequela -S62201A Unspecified fracture of first metacarpal bone, right hand, initial encounter for closed fracture -S62201B Unspecified fracture of first metacarpal bone, right hand, initial encounter for open fracture -S62201D Unspecified fracture of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62201G Unspecified fracture of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62201K Unspecified fracture of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62201P Unspecified fracture of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62201S Unspecified fracture of first metacarpal bone, right hand, sequela -S62202A Unspecified fracture of first metacarpal bone, left hand, initial encounter for closed fracture -S62202B Unspecified fracture of first metacarpal bone, left hand, initial encounter for open fracture -S62202D Unspecified fracture of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62202G Unspecified fracture of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62202K Unspecified fracture of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62202P Unspecified fracture of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62202S Unspecified fracture of first metacarpal bone, left hand, sequela -S62209A Unspecified fracture of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62209B Unspecified fracture of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62209D Unspecified fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62209G Unspecified fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62209K Unspecified fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62209P Unspecified fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62209S Unspecified fracture of first metacarpal bone, unspecified hand, sequela -S62211A Bennett's fracture, right hand, initial encounter for closed fracture -S62211B Bennett's fracture, right hand, initial encounter for open fracture -S62211D Bennett's fracture, right hand, subsequent encounter for fracture with routine healing -S62211G Bennett's fracture, right hand, subsequent encounter for fracture with delayed healing -S62211K Bennett's fracture, right hand, subsequent encounter for fracture with nonunion -S62211P Bennett's fracture, right hand, subsequent encounter for fracture with malunion -S62211S Bennett's fracture, right hand, sequela -S62212A Bennett's fracture, left hand, initial encounter for closed fracture -S62212B Bennett's fracture, left hand, initial encounter for open fracture -S62212D Bennett's fracture, left hand, subsequent encounter for fracture with routine healing -S62212G Bennett's fracture, left hand, subsequent encounter for fracture with delayed healing -S62212K Bennett's fracture, left hand, subsequent encounter for fracture with nonunion -S62212P Bennett's fracture, left hand, subsequent encounter for fracture with malunion -S62212S Bennett's fracture, left hand, sequela -S62213A Bennett's fracture, unspecified hand, initial encounter for closed fracture -S62213B Bennett's fracture, unspecified hand, initial encounter for open fracture -S62213D Bennett's fracture, unspecified hand, subsequent encounter for fracture with routine healing -S62213G Bennett's fracture, unspecified hand, subsequent encounter for fracture with delayed healing -S62213K Bennett's fracture, unspecified hand, subsequent encounter for fracture with nonunion -S62213P Bennett's fracture, unspecified hand, subsequent encounter for fracture with malunion -S62213S Bennett's fracture, unspecified hand, sequela -S62221A Displaced Rolando's fracture, right hand, initial encounter for closed fracture -S62221B Displaced Rolando's fracture, right hand, initial encounter for open fracture -S62221D Displaced Rolando's fracture, right hand, subsequent encounter for fracture with routine healing -S62221G Displaced Rolando's fracture, right hand, subsequent encounter for fracture with delayed healing -S62221K Displaced Rolando's fracture, right hand, subsequent encounter for fracture with nonunion -S62221P Displaced Rolando's fracture, right hand, subsequent encounter for fracture with malunion -S62221S Displaced Rolando's fracture, right hand, sequela -S62222A Displaced Rolando's fracture, left hand, initial encounter for closed fracture -S62222B Displaced Rolando's fracture, left hand, initial encounter for open fracture -S62222D Displaced Rolando's fracture, left hand, subsequent encounter for fracture with routine healing -S62222G Displaced Rolando's fracture, left hand, subsequent encounter for fracture with delayed healing -S62222K Displaced Rolando's fracture, left hand, subsequent encounter for fracture with nonunion -S62222P Displaced Rolando's fracture, left hand, subsequent encounter for fracture with malunion -S62222S Displaced Rolando's fracture, left hand, sequela -S62223A Displaced Rolando's fracture, unspecified hand, initial encounter for closed fracture -S62223B Displaced Rolando's fracture, unspecified hand, initial encounter for open fracture -S62223D Displaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with routine healing -S62223G Displaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with delayed healing -S62223K Displaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with nonunion -S62223P Displaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with malunion -S62223S Displaced Rolando's fracture, unspecified hand, sequela -S62224A Nondisplaced Rolando's fracture, right hand, initial encounter for closed fracture -S62224B Nondisplaced Rolando's fracture, right hand, initial encounter for open fracture -S62224D Nondisplaced Rolando's fracture, right hand, subsequent encounter for fracture with routine healing -S62224G Nondisplaced Rolando's fracture, right hand, subsequent encounter for fracture with delayed healing -S62224K Nondisplaced Rolando's fracture, right hand, subsequent encounter for fracture with nonunion -S62224P Nondisplaced Rolando's fracture, right hand, subsequent encounter for fracture with malunion -S62224S Nondisplaced Rolando's fracture, right hand, sequela -S62225A Nondisplaced Rolando's fracture, left hand, initial encounter for closed fracture -S62225B Nondisplaced Rolando's fracture, left hand, initial encounter for open fracture -S62225D Nondisplaced Rolando's fracture, left hand, subsequent encounter for fracture with routine healing -S62225G Nondisplaced Rolando's fracture, left hand, subsequent encounter for fracture with delayed healing -S62225K Nondisplaced Rolando's fracture, left hand, subsequent encounter for fracture with nonunion -S62225P Nondisplaced Rolando's fracture, left hand, subsequent encounter for fracture with malunion -S62225S Nondisplaced Rolando's fracture, left hand, sequela -S62226A Nondisplaced Rolando's fracture, unspecified hand, initial encounter for closed fracture -S62226B Nondisplaced Rolando's fracture, unspecified hand, initial encounter for open fracture -S62226D Nondisplaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with routine healing -S62226G Nondisplaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with delayed healing -S62226K Nondisplaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with nonunion -S62226P Nondisplaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with malunion -S62226S Nondisplaced Rolando's fracture, unspecified hand, sequela -S62231A Other displaced fracture of base of first metacarpal bone, right hand, initial encounter for closed fracture -S62231B Other displaced fracture of base of first metacarpal bone, right hand, initial encounter for open fracture -S62231D Other displaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62231G Other displaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62231K Other displaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62231P Other displaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62231S Other displaced fracture of base of first metacarpal bone, right hand, sequela -S62232A Other displaced fracture of base of first metacarpal bone, left hand, initial encounter for closed fracture -S62232B Other displaced fracture of base of first metacarpal bone, left hand, initial encounter for open fracture -S62232D Other displaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62232G Other displaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62232K Other displaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62232P Other displaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62232S Other displaced fracture of base of first metacarpal bone, left hand, sequela -S62233A Other displaced fracture of base of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62233B Other displaced fracture of base of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62233D Other displaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62233G Other displaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62233K Other displaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62233P Other displaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62233S Other displaced fracture of base of first metacarpal bone, unspecified hand, sequela -S62234A Other nondisplaced fracture of base of first metacarpal bone, right hand, initial encounter for closed fracture -S62234B Other nondisplaced fracture of base of first metacarpal bone, right hand, initial encounter for open fracture -S62234D Other nondisplaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62234G Other nondisplaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62234K Other nondisplaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62234P Other nondisplaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62234S Other nondisplaced fracture of base of first metacarpal bone, right hand, sequela -S62235A Other nondisplaced fracture of base of first metacarpal bone, left hand, initial encounter for closed fracture -S62235B Other nondisplaced fracture of base of first metacarpal bone, left hand, initial encounter for open fracture -S62235D Other nondisplaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62235G Other nondisplaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62235K Other nondisplaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62235P Other nondisplaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62235S Other nondisplaced fracture of base of first metacarpal bone, left hand, sequela -S62236A Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62236B Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62236D Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62236G Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62236K Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62236P Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62236S Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, sequela -S62241A Displaced fracture of shaft of first metacarpal bone, right hand, initial encounter for closed fracture -S62241B Displaced fracture of shaft of first metacarpal bone, right hand, initial encounter for open fracture -S62241D Displaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62241G Displaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62241K Displaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62241P Displaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62241S Displaced fracture of shaft of first metacarpal bone, right hand, sequela -S62242A Displaced fracture of shaft of first metacarpal bone, left hand, initial encounter for closed fracture -S62242B Displaced fracture of shaft of first metacarpal bone, left hand, initial encounter for open fracture -S62242D Displaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62242G Displaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62242K Displaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62242P Displaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62242S Displaced fracture of shaft of first metacarpal bone, left hand, sequela -S62243A Displaced fracture of shaft of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62243B Displaced fracture of shaft of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62243D Displaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62243G Displaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62243K Displaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62243P Displaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62243S Displaced fracture of shaft of first metacarpal bone, unspecified hand, sequela -S62244A Nondisplaced fracture of shaft of first metacarpal bone, right hand, initial encounter for closed fracture -S62244B Nondisplaced fracture of shaft of first metacarpal bone, right hand, initial encounter for open fracture -S62244D Nondisplaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62244G Nondisplaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62244K Nondisplaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62244P Nondisplaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62244S Nondisplaced fracture of shaft of first metacarpal bone, right hand, sequela -S62245A Nondisplaced fracture of shaft of first metacarpal bone, left hand, initial encounter for closed fracture -S62245B Nondisplaced fracture of shaft of first metacarpal bone, left hand, initial encounter for open fracture -S62245D Nondisplaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62245G Nondisplaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62245K Nondisplaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62245P Nondisplaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62245S Nondisplaced fracture of shaft of first metacarpal bone, left hand, sequela -S62246A Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62246B Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62246D Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62246G Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62246K Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62246P Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62246S Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, sequela -S62251A Displaced fracture of neck of first metacarpal bone, right hand, initial encounter for closed fracture -S62251B Displaced fracture of neck of first metacarpal bone, right hand, initial encounter for open fracture -S62251D Displaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62251G Displaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62251K Displaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62251P Displaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62251S Displaced fracture of neck of first metacarpal bone, right hand, sequela -S62252A Displaced fracture of neck of first metacarpal bone, left hand, initial encounter for closed fracture -S62252B Displaced fracture of neck of first metacarpal bone, left hand, initial encounter for open fracture -S62252D Displaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62252G Displaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62252K Displaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62252P Displaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62252S Displaced fracture of neck of first metacarpal bone, left hand, sequela -S62253A Displaced fracture of neck of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62253B Displaced fracture of neck of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62253D Displaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62253G Displaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62253K Displaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62253P Displaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62253S Displaced fracture of neck of first metacarpal bone, unspecified hand, sequela -S62254A Nondisplaced fracture of neck of first metacarpal bone, right hand, initial encounter for closed fracture -S62254B Nondisplaced fracture of neck of first metacarpal bone, right hand, initial encounter for open fracture -S62254D Nondisplaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62254G Nondisplaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62254K Nondisplaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62254P Nondisplaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62254S Nondisplaced fracture of neck of first metacarpal bone, right hand, sequela -S62255A Nondisplaced fracture of neck of first metacarpal bone, left hand, initial encounter for closed fracture -S62255B Nondisplaced fracture of neck of first metacarpal bone, left hand, initial encounter for open fracture -S62255D Nondisplaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62255G Nondisplaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62255K Nondisplaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62255P Nondisplaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62255S Nondisplaced fracture of neck of first metacarpal bone, left hand, sequela -S62256A Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62256B Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62256D Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62256G Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62256K Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62256P Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62256S Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, sequela -S62291A Other fracture of first metacarpal bone, right hand, initial encounter for closed fracture -S62291B Other fracture of first metacarpal bone, right hand, initial encounter for open fracture -S62291D Other fracture of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62291G Other fracture of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62291K Other fracture of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62291P Other fracture of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62291S Other fracture of first metacarpal bone, right hand, sequela -S62292A Other fracture of first metacarpal bone, left hand, initial encounter for closed fracture -S62292B Other fracture of first metacarpal bone, left hand, initial encounter for open fracture -S62292D Other fracture of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62292G Other fracture of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62292K Other fracture of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62292P Other fracture of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62292S Other fracture of first metacarpal bone, left hand, sequela -S62299A Other fracture of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62299B Other fracture of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62299D Other fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62299G Other fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62299K Other fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62299P Other fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62299S Other fracture of first metacarpal bone, unspecified hand, sequela -S62300A Unspecified fracture of second metacarpal bone, right hand, initial encounter for closed fracture -S62300B Unspecified fracture of second metacarpal bone, right hand, initial encounter for open fracture -S62300D Unspecified fracture of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62300G Unspecified fracture of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62300K Unspecified fracture of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62300P Unspecified fracture of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62300S Unspecified fracture of second metacarpal bone, right hand, sequela -S62301A Unspecified fracture of second metacarpal bone, left hand, initial encounter for closed fracture -S62301B Unspecified fracture of second metacarpal bone, left hand, initial encounter for open fracture -S62301D Unspecified fracture of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62301G Unspecified fracture of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62301K Unspecified fracture of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62301P Unspecified fracture of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62301S Unspecified fracture of second metacarpal bone, left hand, sequela -S62302A Unspecified fracture of third metacarpal bone, right hand, initial encounter for closed fracture -S62302B Unspecified fracture of third metacarpal bone, right hand, initial encounter for open fracture -S62302D Unspecified fracture of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62302G Unspecified fracture of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62302K Unspecified fracture of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62302P Unspecified fracture of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62302S Unspecified fracture of third metacarpal bone, right hand, sequela -S62303A Unspecified fracture of third metacarpal bone, left hand, initial encounter for closed fracture -S62303B Unspecified fracture of third metacarpal bone, left hand, initial encounter for open fracture -S62303D Unspecified fracture of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62303G Unspecified fracture of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62303K Unspecified fracture of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62303P Unspecified fracture of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62303S Unspecified fracture of third metacarpal bone, left hand, sequela -S62304A Unspecified fracture of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62304B Unspecified fracture of fourth metacarpal bone, right hand, initial encounter for open fracture -S62304D Unspecified fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62304G Unspecified fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62304K Unspecified fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62304P Unspecified fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62304S Unspecified fracture of fourth metacarpal bone, right hand, sequela -S62305A Unspecified fracture of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62305B Unspecified fracture of fourth metacarpal bone, left hand, initial encounter for open fracture -S62305D Unspecified fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62305G Unspecified fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62305K Unspecified fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62305P Unspecified fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62305S Unspecified fracture of fourth metacarpal bone, left hand, sequela -S62306A Unspecified fracture of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62306B Unspecified fracture of fifth metacarpal bone, right hand, initial encounter for open fracture -S62306D Unspecified fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62306G Unspecified fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62306K Unspecified fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62306P Unspecified fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62306S Unspecified fracture of fifth metacarpal bone, right hand, sequela -S62307A Unspecified fracture of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62307B Unspecified fracture of fifth metacarpal bone, left hand, initial encounter for open fracture -S62307D Unspecified fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62307G Unspecified fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62307K Unspecified fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62307P Unspecified fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62307S Unspecified fracture of fifth metacarpal bone, left hand, sequela -S62308A Unspecified fracture of other metacarpal bone, initial encounter for closed fracture -S62308B Unspecified fracture of other metacarpal bone, initial encounter for open fracture -S62308D Unspecified fracture of other metacarpal bone, subsequent encounter for fracture with routine healing -S62308G Unspecified fracture of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62308K Unspecified fracture of other metacarpal bone, subsequent encounter for fracture with nonunion -S62308P Unspecified fracture of other metacarpal bone, subsequent encounter for fracture with malunion -S62308S Unspecified fracture of other metacarpal bone, sequela -S62309A Unspecified fracture of unspecified metacarpal bone, initial encounter for closed fracture -S62309B Unspecified fracture of unspecified metacarpal bone, initial encounter for open fracture -S62309D Unspecified fracture of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62309G Unspecified fracture of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62309K Unspecified fracture of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62309P Unspecified fracture of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62309S Unspecified fracture of unspecified metacarpal bone, sequela -S62310A Displaced fracture of base of second metacarpal bone, right hand, initial encounter for closed fracture -S62310B Displaced fracture of base of second metacarpal bone, right hand, initial encounter for open fracture -S62310D Displaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62310G Displaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62310K Displaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62310P Displaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62310S Displaced fracture of base of second metacarpal bone, right hand, sequela -S62311A Displaced fracture of base of second metacarpal bone. left hand, initial encounter for closed fracture -S62311B Displaced fracture of base of second metacarpal bone. left hand, initial encounter for open fracture -S62311D Displaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with routine healing -S62311G Displaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with delayed healing -S62311K Displaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with nonunion -S62311P Displaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with malunion -S62311S Displaced fracture of base of second metacarpal bone. left hand, sequela -S62312A Displaced fracture of base of third metacarpal bone, right hand, initial encounter for closed fracture -S62312B Displaced fracture of base of third metacarpal bone, right hand, initial encounter for open fracture -S62312D Displaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62312G Displaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62312K Displaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62312P Displaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62312S Displaced fracture of base of third metacarpal bone, right hand, sequela -S62313A Displaced fracture of base of third metacarpal bone, left hand, initial encounter for closed fracture -S62313B Displaced fracture of base of third metacarpal bone, left hand, initial encounter for open fracture -S62313D Displaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62313G Displaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62313K Displaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62313P Displaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62313S Displaced fracture of base of third metacarpal bone, left hand, sequela -S62314A Displaced fracture of base of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62314B Displaced fracture of base of fourth metacarpal bone, right hand, initial encounter for open fracture -S62314D Displaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62314G Displaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62314K Displaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62314P Displaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62314S Displaced fracture of base of fourth metacarpal bone, right hand, sequela -S62315A Displaced fracture of base of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62315B Displaced fracture of base of fourth metacarpal bone, left hand, initial encounter for open fracture -S62315D Displaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62315G Displaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62315K Displaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62315P Displaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62315S Displaced fracture of base of fourth metacarpal bone, left hand, sequela -S62316A Displaced fracture of base of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62316B Displaced fracture of base of fifth metacarpal bone, right hand, initial encounter for open fracture -S62316D Displaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62316G Displaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62316K Displaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62316P Displaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62316S Displaced fracture of base of fifth metacarpal bone, right hand, sequela -S62317A Displaced fracture of base of fifth metacarpal bone. left hand, initial encounter for closed fracture -S62317B Displaced fracture of base of fifth metacarpal bone. left hand, initial encounter for open fracture -S62317D Displaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with routine healing -S62317G Displaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with delayed healing -S62317K Displaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with nonunion -S62317P Displaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with malunion -S62317S Displaced fracture of base of fifth metacarpal bone. left hand, sequela -S62318A Displaced fracture of base of other metacarpal bone, initial encounter for closed fracture -S62318B Displaced fracture of base of other metacarpal bone, initial encounter for open fracture -S62318D Displaced fracture of base of other metacarpal bone, subsequent encounter for fracture with routine healing -S62318G Displaced fracture of base of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62318K Displaced fracture of base of other metacarpal bone, subsequent encounter for fracture with nonunion -S62318P Displaced fracture of base of other metacarpal bone, subsequent encounter for fracture with malunion -S62318S Displaced fracture of base of other metacarpal bone, sequela -S62319A Displaced fracture of base of unspecified metacarpal bone, initial encounter for closed fracture -S62319B Displaced fracture of base of unspecified metacarpal bone, initial encounter for open fracture -S62319D Displaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62319G Displaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62319K Displaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62319P Displaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62319S Displaced fracture of base of unspecified metacarpal bone, sequela -S62320A Displaced fracture of shaft of second metacarpal bone, right hand, initial encounter for closed fracture -S62320B Displaced fracture of shaft of second metacarpal bone, right hand, initial encounter for open fracture -S62320D Displaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62320G Displaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62320K Displaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62320P Displaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62320S Displaced fracture of shaft of second metacarpal bone, right hand, sequela -S62321A Displaced fracture of shaft of second metacarpal bone, left hand, initial encounter for closed fracture -S62321B Displaced fracture of shaft of second metacarpal bone, left hand, initial encounter for open fracture -S62321D Displaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62321G Displaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62321K Displaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62321P Displaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62321S Displaced fracture of shaft of second metacarpal bone, left hand, sequela -S62322A Displaced fracture of shaft of third metacarpal bone, right hand, initial encounter for closed fracture -S62322B Displaced fracture of shaft of third metacarpal bone, right hand, initial encounter for open fracture -S62322D Displaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62322G Displaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62322K Displaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62322P Displaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62322S Displaced fracture of shaft of third metacarpal bone, right hand, sequela -S62323A Displaced fracture of shaft of third metacarpal bone, left hand, initial encounter for closed fracture -S62323B Displaced fracture of shaft of third metacarpal bone, left hand, initial encounter for open fracture -S62323D Displaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62323G Displaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62323K Displaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62323P Displaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62323S Displaced fracture of shaft of third metacarpal bone, left hand, sequela -S62324A Displaced fracture of shaft of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62324B Displaced fracture of shaft of fourth metacarpal bone, right hand, initial encounter for open fracture -S62324D Displaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62324G Displaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62324K Displaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62324P Displaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62324S Displaced fracture of shaft of fourth metacarpal bone, right hand, sequela -S62325A Displaced fracture of shaft of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62325B Displaced fracture of shaft of fourth metacarpal bone, left hand, initial encounter for open fracture -S62325D Displaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62325G Displaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62325K Displaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62325P Displaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62325S Displaced fracture of shaft of fourth metacarpal bone, left hand, sequela -S62326A Displaced fracture of shaft of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62326B Displaced fracture of shaft of fifth metacarpal bone, right hand, initial encounter for open fracture -S62326D Displaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62326G Displaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62326K Displaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62326P Displaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62326S Displaced fracture of shaft of fifth metacarpal bone, right hand, sequela -S62327A Displaced fracture of shaft of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62327B Displaced fracture of shaft of fifth metacarpal bone, left hand, initial encounter for open fracture -S62327D Displaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62327G Displaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62327K Displaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62327P Displaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62327S Displaced fracture of shaft of fifth metacarpal bone, left hand, sequela -S62328A Displaced fracture of shaft of other metacarpal bone, initial encounter for closed fracture -S62328B Displaced fracture of shaft of other metacarpal bone, initial encounter for open fracture -S62328D Displaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with routine healing -S62328G Displaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62328K Displaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with nonunion -S62328P Displaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with malunion -S62328S Displaced fracture of shaft of other metacarpal bone, sequela -S62329A Displaced fracture of shaft of unspecified metacarpal bone, initial encounter for closed fracture -S62329B Displaced fracture of shaft of unspecified metacarpal bone, initial encounter for open fracture -S62329D Displaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62329G Displaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62329K Displaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62329P Displaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62329S Displaced fracture of shaft of unspecified metacarpal bone, sequela -S62330A Displaced fracture of neck of second metacarpal bone, right hand, initial encounter for closed fracture -S62330B Displaced fracture of neck of second metacarpal bone, right hand, initial encounter for open fracture -S62330D Displaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62330G Displaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62330K Displaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62330P Displaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62330S Displaced fracture of neck of second metacarpal bone, right hand, sequela -S62331A Displaced fracture of neck of second metacarpal bone, left hand, initial encounter for closed fracture -S62331B Displaced fracture of neck of second metacarpal bone, left hand, initial encounter for open fracture -S62331D Displaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62331G Displaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62331K Displaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62331P Displaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62331S Displaced fracture of neck of second metacarpal bone, left hand, sequela -S62332A Displaced fracture of neck of third metacarpal bone, right hand, initial encounter for closed fracture -S62332B Displaced fracture of neck of third metacarpal bone, right hand, initial encounter for open fracture -S62332D Displaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62332G Displaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62332K Displaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62332P Displaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62332S Displaced fracture of neck of third metacarpal bone, right hand, sequela -S62333A Displaced fracture of neck of third metacarpal bone, left hand, initial encounter for closed fracture -S62333B Displaced fracture of neck of third metacarpal bone, left hand, initial encounter for open fracture -S62333D Displaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62333G Displaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62333K Displaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62333P Displaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62333S Displaced fracture of neck of third metacarpal bone, left hand, sequela -S62334A Displaced fracture of neck of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62334B Displaced fracture of neck of fourth metacarpal bone, right hand, initial encounter for open fracture -S62334D Displaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62334G Displaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62334K Displaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62334P Displaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62334S Displaced fracture of neck of fourth metacarpal bone, right hand, sequela -S62335A Displaced fracture of neck of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62335B Displaced fracture of neck of fourth metacarpal bone, left hand, initial encounter for open fracture -S62335D Displaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62335G Displaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62335K Displaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62335P Displaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62335S Displaced fracture of neck of fourth metacarpal bone, left hand, sequela -S62336A Displaced fracture of neck of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62336B Displaced fracture of neck of fifth metacarpal bone, right hand, initial encounter for open fracture -S62336D Displaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62336G Displaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62336K Displaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62336P Displaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62336S Displaced fracture of neck of fifth metacarpal bone, right hand, sequela -S62337A Displaced fracture of neck of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62337B Displaced fracture of neck of fifth metacarpal bone, left hand, initial encounter for open fracture -S62337D Displaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62337G Displaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62337K Displaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62337P Displaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62337S Displaced fracture of neck of fifth metacarpal bone, left hand, sequela -S62338A Displaced fracture of neck of other metacarpal bone, initial encounter for closed fracture -S62338B Displaced fracture of neck of other metacarpal bone, initial encounter for open fracture -S62338D Displaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with routine healing -S62338G Displaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62338K Displaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with nonunion -S62338P Displaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with malunion -S62338S Displaced fracture of neck of other metacarpal bone, sequela -S62339A Displaced fracture of neck of unspecified metacarpal bone, initial encounter for closed fracture -S62339B Displaced fracture of neck of unspecified metacarpal bone, initial encounter for open fracture -S62339D Displaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62339G Displaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62339K Displaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62339P Displaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62339S Displaced fracture of neck of unspecified metacarpal bone, sequela -S62340A Nondisplaced fracture of base of second metacarpal bone, right hand, initial encounter for closed fracture -S62340B Nondisplaced fracture of base of second metacarpal bone, right hand, initial encounter for open fracture -S62340D Nondisplaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62340G Nondisplaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62340K Nondisplaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62340P Nondisplaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62340S Nondisplaced fracture of base of second metacarpal bone, right hand, sequela -S62341A Nondisplaced fracture of base of second metacarpal bone. left hand, initial encounter for closed fracture -S62341B Nondisplaced fracture of base of second metacarpal bone. left hand, initial encounter for open fracture -S62341D Nondisplaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with routine healing -S62341G Nondisplaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with delayed healing -S62341K Nondisplaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with nonunion -S62341P Nondisplaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with malunion -S62341S Nondisplaced fracture of base of second metacarpal bone. left hand, sequela -S62342A Nondisplaced fracture of base of third metacarpal bone, right hand, initial encounter for closed fracture -S62342B Nondisplaced fracture of base of third metacarpal bone, right hand, initial encounter for open fracture -S62342D Nondisplaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62342G Nondisplaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62342K Nondisplaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62342P Nondisplaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62342S Nondisplaced fracture of base of third metacarpal bone, right hand, sequela -S62343A Nondisplaced fracture of base of third metacarpal bone, left hand, initial encounter for closed fracture -S62343B Nondisplaced fracture of base of third metacarpal bone, left hand, initial encounter for open fracture -S62343D Nondisplaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62343G Nondisplaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62343K Nondisplaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62343P Nondisplaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62343S Nondisplaced fracture of base of third metacarpal bone, left hand, sequela -S62344A Nondisplaced fracture of base of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62344B Nondisplaced fracture of base of fourth metacarpal bone, right hand, initial encounter for open fracture -S62344D Nondisplaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62344G Nondisplaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62344K Nondisplaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62344P Nondisplaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62344S Nondisplaced fracture of base of fourth metacarpal bone, right hand, sequela -S62345A Nondisplaced fracture of base of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62345B Nondisplaced fracture of base of fourth metacarpal bone, left hand, initial encounter for open fracture -S62345D Nondisplaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62345G Nondisplaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62345K Nondisplaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62345P Nondisplaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62345S Nondisplaced fracture of base of fourth metacarpal bone, left hand, sequela -S62346A Nondisplaced fracture of base of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62346B Nondisplaced fracture of base of fifth metacarpal bone, right hand, initial encounter for open fracture -S62346D Nondisplaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62346G Nondisplaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62346K Nondisplaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62346P Nondisplaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62346S Nondisplaced fracture of base of fifth metacarpal bone, right hand, sequela -S62347A Nondisplaced fracture of base of fifth metacarpal bone. left hand, initial encounter for closed fracture -S62347B Nondisplaced fracture of base of fifth metacarpal bone. left hand, initial encounter for open fracture -S62347D Nondisplaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with routine healing -S62347G Nondisplaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with delayed healing -S62347K Nondisplaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with nonunion -S62347P Nondisplaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with malunion -S62347S Nondisplaced fracture of base of fifth metacarpal bone. left hand, sequela -S62348A Nondisplaced fracture of base of other metacarpal bone, initial encounter for closed fracture -S62348B Nondisplaced fracture of base of other metacarpal bone, initial encounter for open fracture -S62348D Nondisplaced fracture of base of other metacarpal bone, subsequent encounter for fracture with routine healing -S62348G Nondisplaced fracture of base of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62348K Nondisplaced fracture of base of other metacarpal bone, subsequent encounter for fracture with nonunion -S62348P Nondisplaced fracture of base of other metacarpal bone, subsequent encounter for fracture with malunion -S62348S Nondisplaced fracture of base of other metacarpal bone, sequela -S62349A Nondisplaced fracture of base of unspecified metacarpal bone, initial encounter for closed fracture -S62349B Nondisplaced fracture of base of unspecified metacarpal bone, initial encounter for open fracture -S62349D Nondisplaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62349G Nondisplaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62349K Nondisplaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62349P Nondisplaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62349S Nondisplaced fracture of base of unspecified metacarpal bone, sequela -S62350A Nondisplaced fracture of shaft of second metacarpal bone, right hand, initial encounter for closed fracture -S62350B Nondisplaced fracture of shaft of second metacarpal bone, right hand, initial encounter for open fracture -S62350D Nondisplaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62350G Nondisplaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62350K Nondisplaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62350P Nondisplaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62350S Nondisplaced fracture of shaft of second metacarpal bone, right hand, sequela -S62351A Nondisplaced fracture of shaft of second metacarpal bone, left hand, initial encounter for closed fracture -S62351B Nondisplaced fracture of shaft of second metacarpal bone, left hand, initial encounter for open fracture -S62351D Nondisplaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62351G Nondisplaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62351K Nondisplaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62351P Nondisplaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62351S Nondisplaced fracture of shaft of second metacarpal bone, left hand, sequela -S62352A Nondisplaced fracture of shaft of third metacarpal bone, right hand, initial encounter for closed fracture -S62352B Nondisplaced fracture of shaft of third metacarpal bone, right hand, initial encounter for open fracture -S62352D Nondisplaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62352G Nondisplaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62352K Nondisplaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62352P Nondisplaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62352S Nondisplaced fracture of shaft of third metacarpal bone, right hand, sequela -S62353A Nondisplaced fracture of shaft of third metacarpal bone, left hand, initial encounter for closed fracture -S62353B Nondisplaced fracture of shaft of third metacarpal bone, left hand, initial encounter for open fracture -S62353D Nondisplaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62353G Nondisplaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62353K Nondisplaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62353P Nondisplaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62353S Nondisplaced fracture of shaft of third metacarpal bone, left hand, sequela -S62354A Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62354B Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, initial encounter for open fracture -S62354D Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62354G Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62354K Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62354P Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62354S Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, sequela -S62355A Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62355B Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, initial encounter for open fracture -S62355D Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62355G Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62355K Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62355P Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62355S Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, sequela -S62356A Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62356B Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, initial encounter for open fracture -S62356D Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62356G Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62356K Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62356P Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62356S Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, sequela -S62357A Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62357B Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, initial encounter for open fracture -S62357D Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62357G Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62357K Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62357P Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62357S Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, sequela -S62358A Nondisplaced fracture of shaft of other metacarpal bone, initial encounter for closed fracture -S62358B Nondisplaced fracture of shaft of other metacarpal bone, initial encounter for open fracture -S62358D Nondisplaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with routine healing -S62358G Nondisplaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62358K Nondisplaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with nonunion -S62358P Nondisplaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with malunion -S62358S Nondisplaced fracture of shaft of other metacarpal bone, sequela -S62359A Nondisplaced fracture of shaft of unspecified metacarpal bone, initial encounter for closed fracture -S62359B Nondisplaced fracture of shaft of unspecified metacarpal bone, initial encounter for open fracture -S62359D Nondisplaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62359G Nondisplaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62359K Nondisplaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62359P Nondisplaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62359S Nondisplaced fracture of shaft of unspecified metacarpal bone, sequela -S62360A Nondisplaced fracture of neck of second metacarpal bone, right hand, initial encounter for closed fracture -S62360B Nondisplaced fracture of neck of second metacarpal bone, right hand, initial encounter for open fracture -S62360D Nondisplaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62360G Nondisplaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62360K Nondisplaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62360P Nondisplaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62360S Nondisplaced fracture of neck of second metacarpal bone, right hand, sequela -S62361A Nondisplaced fracture of neck of second metacarpal bone, left hand, initial encounter for closed fracture -S62361B Nondisplaced fracture of neck of second metacarpal bone, left hand, initial encounter for open fracture -S62361D Nondisplaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62361G Nondisplaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62361K Nondisplaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62361P Nondisplaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62361S Nondisplaced fracture of neck of second metacarpal bone, left hand, sequela -S62362A Nondisplaced fracture of neck of third metacarpal bone, right hand, initial encounter for closed fracture -S62362B Nondisplaced fracture of neck of third metacarpal bone, right hand, initial encounter for open fracture -S62362D Nondisplaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62362G Nondisplaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62362K Nondisplaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62362P Nondisplaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62362S Nondisplaced fracture of neck of third metacarpal bone, right hand, sequela -S62363A Nondisplaced fracture of neck of third metacarpal bone, left hand, initial encounter for closed fracture -S62363B Nondisplaced fracture of neck of third metacarpal bone, left hand, initial encounter for open fracture -S62363D Nondisplaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62363G Nondisplaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62363K Nondisplaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62363P Nondisplaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62363S Nondisplaced fracture of neck of third metacarpal bone, left hand, sequela -S62364A Nondisplaced fracture of neck of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62364B Nondisplaced fracture of neck of fourth metacarpal bone, right hand, initial encounter for open fracture -S62364D Nondisplaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62364G Nondisplaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62364K Nondisplaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62364P Nondisplaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62364S Nondisplaced fracture of neck of fourth metacarpal bone, right hand, sequela -S62365A Nondisplaced fracture of neck of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62365B Nondisplaced fracture of neck of fourth metacarpal bone, left hand, initial encounter for open fracture -S62365D Nondisplaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62365G Nondisplaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62365K Nondisplaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62365P Nondisplaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62365S Nondisplaced fracture of neck of fourth metacarpal bone, left hand, sequela -S62366A Nondisplaced fracture of neck of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62366B Nondisplaced fracture of neck of fifth metacarpal bone, right hand, initial encounter for open fracture -S62366D Nondisplaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62366G Nondisplaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62366K Nondisplaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62366P Nondisplaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62366S Nondisplaced fracture of neck of fifth metacarpal bone, right hand, sequela -S62367A Nondisplaced fracture of neck of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62367B Nondisplaced fracture of neck of fifth metacarpal bone, left hand, initial encounter for open fracture -S62367D Nondisplaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62367G Nondisplaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62367K Nondisplaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62367P Nondisplaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62367S Nondisplaced fracture of neck of fifth metacarpal bone, left hand, sequela -S62368A Nondisplaced fracture of neck of other metacarpal bone, initial encounter for closed fracture -S62368B Nondisplaced fracture of neck of other metacarpal bone, initial encounter for open fracture -S62368D Nondisplaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with routine healing -S62368G Nondisplaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62368K Nondisplaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with nonunion -S62368P Nondisplaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with malunion -S62368S Nondisplaced fracture of neck of other metacarpal bone, sequela -S62369A Nondisplaced fracture of neck of unspecified metacarpal bone, initial encounter for closed fracture -S62369B Nondisplaced fracture of neck of unspecified metacarpal bone, initial encounter for open fracture -S62369D Nondisplaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62369G Nondisplaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62369K Nondisplaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62369P Nondisplaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62369S Nondisplaced fracture of neck of unspecified metacarpal bone, sequela -S62390A Other fracture of second metacarpal bone, right hand, initial encounter for closed fracture -S62390B Other fracture of second metacarpal bone, right hand, initial encounter for open fracture -S62390D Other fracture of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62390G Other fracture of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62390K Other fracture of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62390P Other fracture of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62390S Other fracture of second metacarpal bone, right hand, sequela -S62391A Other fracture of second metacarpal bone, left hand, initial encounter for closed fracture -S62391B Other fracture of second metacarpal bone, left hand, initial encounter for open fracture -S62391D Other fracture of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62391G Other fracture of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62391K Other fracture of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62391P Other fracture of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62391S Other fracture of second metacarpal bone, left hand, sequela -S62392A Other fracture of third metacarpal bone, right hand, initial encounter for closed fracture -S62392B Other fracture of third metacarpal bone, right hand, initial encounter for open fracture -S62392D Other fracture of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62392G Other fracture of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62392K Other fracture of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62392P Other fracture of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62392S Other fracture of third metacarpal bone, right hand, sequela -S62393A Other fracture of third metacarpal bone, left hand, initial encounter for closed fracture -S62393B Other fracture of third metacarpal bone, left hand, initial encounter for open fracture -S62393D Other fracture of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62393G Other fracture of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62393K Other fracture of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62393P Other fracture of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62393S Other fracture of third metacarpal bone, left hand, sequela -S62394A Other fracture of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62394B Other fracture of fourth metacarpal bone, right hand, initial encounter for open fracture -S62394D Other fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62394G Other fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62394K Other fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62394P Other fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62394S Other fracture of fourth metacarpal bone, right hand, sequela -S62395A Other fracture of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62395B Other fracture of fourth metacarpal bone, left hand, initial encounter for open fracture -S62395D Other fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62395G Other fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62395K Other fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62395P Other fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62395S Other fracture of fourth metacarpal bone, left hand, sequela -S62396A Other fracture of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62396B Other fracture of fifth metacarpal bone, right hand, initial encounter for open fracture -S62396D Other fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62396G Other fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62396K Other fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62396P Other fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62396S Other fracture of fifth metacarpal bone, right hand, sequela -S62397A Other fracture of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62397B Other fracture of fifth metacarpal bone, left hand, initial encounter for open fracture -S62397D Other fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62397G Other fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62397K Other fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62397P Other fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62397S Other fracture of fifth metacarpal bone, left hand, sequela -S62398A Other fracture of other metacarpal bone, initial encounter for closed fracture -S62398B Other fracture of other metacarpal bone, initial encounter for open fracture -S62398D Other fracture of other metacarpal bone, subsequent encounter for fracture with routine healing -S62398G Other fracture of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62398K Other fracture of other metacarpal bone, subsequent encounter for fracture with nonunion -S62398P Other fracture of other metacarpal bone, subsequent encounter for fracture with malunion -S62398S Other fracture of other metacarpal bone, sequela -S62399A Other fracture of unspecified metacarpal bone, initial encounter for closed fracture -S62399B Other fracture of unspecified metacarpal bone, initial encounter for open fracture -S62399D Other fracture of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62399G Other fracture of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62399K Other fracture of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62399P Other fracture of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62399S Other fracture of unspecified metacarpal bone, sequela -S62501A Fracture of unspecified phalanx of right thumb, initial encounter for closed fracture -S62501B Fracture of unspecified phalanx of right thumb, initial encounter for open fracture -S62501D Fracture of unspecified phalanx of right thumb, subsequent encounter for fracture with routine healing -S62501G Fracture of unspecified phalanx of right thumb, subsequent encounter for fracture with delayed healing -S62501K Fracture of unspecified phalanx of right thumb, subsequent encounter for fracture with nonunion -S62501P Fracture of unspecified phalanx of right thumb, subsequent encounter for fracture with malunion -S62501S Fracture of unspecified phalanx of right thumb, sequela -S62502A Fracture of unspecified phalanx of left thumb, initial encounter for closed fracture -S62502B Fracture of unspecified phalanx of left thumb, initial encounter for open fracture -S62502D Fracture of unspecified phalanx of left thumb, subsequent encounter for fracture with routine healing -S62502G Fracture of unspecified phalanx of left thumb, subsequent encounter for fracture with delayed healing -S62502K Fracture of unspecified phalanx of left thumb, subsequent encounter for fracture with nonunion -S62502P Fracture of unspecified phalanx of left thumb, subsequent encounter for fracture with malunion -S62502S Fracture of unspecified phalanx of left thumb, sequela -S62509A Fracture of unspecified phalanx of unspecified thumb, initial encounter for closed fracture -S62509B Fracture of unspecified phalanx of unspecified thumb, initial encounter for open fracture -S62509D Fracture of unspecified phalanx of unspecified thumb, subsequent encounter for fracture with routine healing -S62509G Fracture of unspecified phalanx of unspecified thumb, subsequent encounter for fracture with delayed healing -S62509K Fracture of unspecified phalanx of unspecified thumb, subsequent encounter for fracture with nonunion -S62509P Fracture of unspecified phalanx of unspecified thumb, subsequent encounter for fracture with malunion -S62509S Fracture of unspecified phalanx of unspecified thumb, sequela -S62511A Displaced fracture of proximal phalanx of right thumb, initial encounter for closed fracture -S62511B Displaced fracture of proximal phalanx of right thumb, initial encounter for open fracture -S62511D Displaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with routine healing -S62511G Displaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with delayed healing -S62511K Displaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with nonunion -S62511P Displaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with malunion -S62511S Displaced fracture of proximal phalanx of right thumb, sequela -S62512A Displaced fracture of proximal phalanx of left thumb, initial encounter for closed fracture -S62512B Displaced fracture of proximal phalanx of left thumb, initial encounter for open fracture -S62512D Displaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with routine healing -S62512G Displaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with delayed healing -S62512K Displaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with nonunion -S62512P Displaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with malunion -S62512S Displaced fracture of proximal phalanx of left thumb, sequela -S62513A Displaced fracture of proximal phalanx of unspecified thumb, initial encounter for closed fracture -S62513B Displaced fracture of proximal phalanx of unspecified thumb, initial encounter for open fracture -S62513D Displaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with routine healing -S62513G Displaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with delayed healing -S62513K Displaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with nonunion -S62513P Displaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with malunion -S62513S Displaced fracture of proximal phalanx of unspecified thumb, sequela -S62514A Nondisplaced fracture of proximal phalanx of right thumb, initial encounter for closed fracture -S62514B Nondisplaced fracture of proximal phalanx of right thumb, initial encounter for open fracture -S62514D Nondisplaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with routine healing -S62514G Nondisplaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with delayed healing -S62514K Nondisplaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with nonunion -S62514P Nondisplaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with malunion -S62514S Nondisplaced fracture of proximal phalanx of right thumb, sequela -S62515A Nondisplaced fracture of proximal phalanx of left thumb, initial encounter for closed fracture -S62515B Nondisplaced fracture of proximal phalanx of left thumb, initial encounter for open fracture -S62515D Nondisplaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with routine healing -S62515G Nondisplaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with delayed healing -S62515K Nondisplaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with nonunion -S62515P Nondisplaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with malunion -S62515S Nondisplaced fracture of proximal phalanx of left thumb, sequela -S62516A Nondisplaced fracture of proximal phalanx of unspecified thumb, initial encounter for closed fracture -S62516B Nondisplaced fracture of proximal phalanx of unspecified thumb, initial encounter for open fracture -S62516D Nondisplaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with routine healing -S62516G Nondisplaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with delayed healing -S62516K Nondisplaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with nonunion -S62516P Nondisplaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with malunion -S62516S Nondisplaced fracture of proximal phalanx of unspecified thumb, sequela -S62521A Displaced fracture of distal phalanx of right thumb, initial encounter for closed fracture -S62521B Displaced fracture of distal phalanx of right thumb, initial encounter for open fracture -S62521D Displaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with routine healing -S62521G Displaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with delayed healing -S62521K Displaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with nonunion -S62521P Displaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with malunion -S62521S Displaced fracture of distal phalanx of right thumb, sequela -S62522A Displaced fracture of distal phalanx of left thumb, initial encounter for closed fracture -S62522B Displaced fracture of distal phalanx of left thumb, initial encounter for open fracture -S62522D Displaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with routine healing -S62522G Displaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with delayed healing -S62522K Displaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with nonunion -S62522P Displaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with malunion -S62522S Displaced fracture of distal phalanx of left thumb, sequela -S62523A Displaced fracture of distal phalanx of unspecified thumb, initial encounter for closed fracture -S62523B Displaced fracture of distal phalanx of unspecified thumb, initial encounter for open fracture -S62523D Displaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with routine healing -S62523G Displaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with delayed healing -S62523K Displaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with nonunion -S62523P Displaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with malunion -S62523S Displaced fracture of distal phalanx of unspecified thumb, sequela -S62524A Nondisplaced fracture of distal phalanx of right thumb, initial encounter for closed fracture -S62524B Nondisplaced fracture of distal phalanx of right thumb, initial encounter for open fracture -S62524D Nondisplaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with routine healing -S62524G Nondisplaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with delayed healing -S62524K Nondisplaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with nonunion -S62524P Nondisplaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with malunion -S62524S Nondisplaced fracture of distal phalanx of right thumb, sequela -S62525A Nondisplaced fracture of distal phalanx of left thumb, initial encounter for closed fracture -S62525B Nondisplaced fracture of distal phalanx of left thumb, initial encounter for open fracture -S62525D Nondisplaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with routine healing -S62525G Nondisplaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with delayed healing -S62525K Nondisplaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with nonunion -S62525P Nondisplaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with malunion -S62525S Nondisplaced fracture of distal phalanx of left thumb, sequela -S62526A Nondisplaced fracture of distal phalanx of unspecified thumb, initial encounter for closed fracture -S62526B Nondisplaced fracture of distal phalanx of unspecified thumb, initial encounter for open fracture -S62526D Nondisplaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with routine healing -S62526G Nondisplaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with delayed healing -S62526K Nondisplaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with nonunion -S62526P Nondisplaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with malunion -S62526S Nondisplaced fracture of distal phalanx of unspecified thumb, sequela -S62600A Fracture of unspecified phalanx of right index finger, initial encounter for closed fracture -S62600B Fracture of unspecified phalanx of right index finger, initial encounter for open fracture -S62600D Fracture of unspecified phalanx of right index finger, subsequent encounter for fracture with routine healing -S62600G Fracture of unspecified phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62600K Fracture of unspecified phalanx of right index finger, subsequent encounter for fracture with nonunion -S62600P Fracture of unspecified phalanx of right index finger, subsequent encounter for fracture with malunion -S62600S Fracture of unspecified phalanx of right index finger, sequela -S62601A Fracture of unspecified phalanx of left index finger, initial encounter for closed fracture -S62601B Fracture of unspecified phalanx of left index finger, initial encounter for open fracture -S62601D Fracture of unspecified phalanx of left index finger, subsequent encounter for fracture with routine healing -S62601G Fracture of unspecified phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62601K Fracture of unspecified phalanx of left index finger, subsequent encounter for fracture with nonunion -S62601P Fracture of unspecified phalanx of left index finger, subsequent encounter for fracture with malunion -S62601S Fracture of unspecified phalanx of left index finger, sequela -S62602A Fracture of unspecified phalanx of right middle finger, initial encounter for closed fracture -S62602B Fracture of unspecified phalanx of right middle finger, initial encounter for open fracture -S62602D Fracture of unspecified phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62602G Fracture of unspecified phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62602K Fracture of unspecified phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62602P Fracture of unspecified phalanx of right middle finger, subsequent encounter for fracture with malunion -S62602S Fracture of unspecified phalanx of right middle finger, sequela -S62603A Fracture of unspecified phalanx of left middle finger, initial encounter for closed fracture -S62603B Fracture of unspecified phalanx of left middle finger, initial encounter for open fracture -S62603D Fracture of unspecified phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62603G Fracture of unspecified phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62603K Fracture of unspecified phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62603P Fracture of unspecified phalanx of left middle finger, subsequent encounter for fracture with malunion -S62603S Fracture of unspecified phalanx of left middle finger, sequela -S62604A Fracture of unspecified phalanx of right ring finger, initial encounter for closed fracture -S62604B Fracture of unspecified phalanx of right ring finger, initial encounter for open fracture -S62604D Fracture of unspecified phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62604G Fracture of unspecified phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62604K Fracture of unspecified phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62604P Fracture of unspecified phalanx of right ring finger, subsequent encounter for fracture with malunion -S62604S Fracture of unspecified phalanx of right ring finger, sequela -S62605A Fracture of unspecified phalanx of left ring finger, initial encounter for closed fracture -S62605B Fracture of unspecified phalanx of left ring finger, initial encounter for open fracture -S62605D Fracture of unspecified phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62605G Fracture of unspecified phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62605K Fracture of unspecified phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62605P Fracture of unspecified phalanx of left ring finger, subsequent encounter for fracture with malunion -S62605S Fracture of unspecified phalanx of left ring finger, sequela -S62606A Fracture of unspecified phalanx of right little finger, initial encounter for closed fracture -S62606B Fracture of unspecified phalanx of right little finger, initial encounter for open fracture -S62606D Fracture of unspecified phalanx of right little finger, subsequent encounter for fracture with routine healing -S62606G Fracture of unspecified phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62606K Fracture of unspecified phalanx of right little finger, subsequent encounter for fracture with nonunion -S62606P Fracture of unspecified phalanx of right little finger, subsequent encounter for fracture with malunion -S62606S Fracture of unspecified phalanx of right little finger, sequela -S62607A Fracture of unspecified phalanx of left little finger, initial encounter for closed fracture -S62607B Fracture of unspecified phalanx of left little finger, initial encounter for open fracture -S62607D Fracture of unspecified phalanx of left little finger, subsequent encounter for fracture with routine healing -S62607G Fracture of unspecified phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62607K Fracture of unspecified phalanx of left little finger, subsequent encounter for fracture with nonunion -S62607P Fracture of unspecified phalanx of left little finger, subsequent encounter for fracture with malunion -S62607S Fracture of unspecified phalanx of left little finger, sequela -S62608A Fracture of unspecified phalanx of other finger, initial encounter for closed fracture -S62608B Fracture of unspecified phalanx of other finger, initial encounter for open fracture -S62608D Fracture of unspecified phalanx of other finger, subsequent encounter for fracture with routine healing -S62608G Fracture of unspecified phalanx of other finger, subsequent encounter for fracture with delayed healing -S62608K Fracture of unspecified phalanx of other finger, subsequent encounter for fracture with nonunion -S62608P Fracture of unspecified phalanx of other finger, subsequent encounter for fracture with malunion -S62608S Fracture of unspecified phalanx of other finger, sequela -S62609A Fracture of unspecified phalanx of unspecified finger, initial encounter for closed fracture -S62609B Fracture of unspecified phalanx of unspecified finger, initial encounter for open fracture -S62609D Fracture of unspecified phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62609G Fracture of unspecified phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62609K Fracture of unspecified phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62609P Fracture of unspecified phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62609S Fracture of unspecified phalanx of unspecified finger, sequela -S62610A Displaced fracture of proximal phalanx of right index finger, initial encounter for closed fracture -S62610B Displaced fracture of proximal phalanx of right index finger, initial encounter for open fracture -S62610D Displaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with routine healing -S62610G Displaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62610K Displaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with nonunion -S62610P Displaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with malunion -S62610S Displaced fracture of proximal phalanx of right index finger, sequela -S62611A Displaced fracture of proximal phalanx of left index finger, initial encounter for closed fracture -S62611B Displaced fracture of proximal phalanx of left index finger, initial encounter for open fracture -S62611D Displaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with routine healing -S62611G Displaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62611K Displaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with nonunion -S62611P Displaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with malunion -S62611S Displaced fracture of proximal phalanx of left index finger, sequela -S62612A Displaced fracture of proximal phalanx of right middle finger, initial encounter for closed fracture -S62612B Displaced fracture of proximal phalanx of right middle finger, initial encounter for open fracture -S62612D Displaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62612G Displaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62612K Displaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62612P Displaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with malunion -S62612S Displaced fracture of proximal phalanx of right middle finger, sequela -S62613A Displaced fracture of proximal phalanx of left middle finger, initial encounter for closed fracture -S62613B Displaced fracture of proximal phalanx of left middle finger, initial encounter for open fracture -S62613D Displaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62613G Displaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62613K Displaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62613P Displaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with malunion -S62613S Displaced fracture of proximal phalanx of left middle finger, sequela -S62614A Displaced fracture of proximal phalanx of right ring finger, initial encounter for closed fracture -S62614B Displaced fracture of proximal phalanx of right ring finger, initial encounter for open fracture -S62614D Displaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62614G Displaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62614K Displaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62614P Displaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with malunion -S62614S Displaced fracture of proximal phalanx of right ring finger, sequela -S62615A Displaced fracture of proximal phalanx of left ring finger, initial encounter for closed fracture -S62615B Displaced fracture of proximal phalanx of left ring finger, initial encounter for open fracture -S62615D Displaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62615G Displaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62615K Displaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62615P Displaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with malunion -S62615S Displaced fracture of proximal phalanx of left ring finger, sequela -S62616A Displaced fracture of proximal phalanx of right little finger, initial encounter for closed fracture -S62616B Displaced fracture of proximal phalanx of right little finger, initial encounter for open fracture -S62616D Displaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with routine healing -S62616G Displaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62616K Displaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with nonunion -S62616P Displaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with malunion -S62616S Displaced fracture of proximal phalanx of right little finger, sequela -S62617A Displaced fracture of proximal phalanx of left little finger, initial encounter for closed fracture -S62617B Displaced fracture of proximal phalanx of left little finger, initial encounter for open fracture -S62617D Displaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with routine healing -S62617G Displaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62617K Displaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with nonunion -S62617P Displaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with malunion -S62617S Displaced fracture of proximal phalanx of left little finger, sequela -S62618A Displaced fracture of proximal phalanx of other finger, initial encounter for closed fracture -S62618B Displaced fracture of proximal phalanx of other finger, initial encounter for open fracture -S62618D Displaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with routine healing -S62618G Displaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with delayed healing -S62618K Displaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with nonunion -S62618P Displaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with malunion -S62618S Displaced fracture of proximal phalanx of other finger, sequela -S62619A Displaced fracture of proximal phalanx of unspecified finger, initial encounter for closed fracture -S62619B Displaced fracture of proximal phalanx of unspecified finger, initial encounter for open fracture -S62619D Displaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62619G Displaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62619K Displaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62619P Displaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62619S Displaced fracture of proximal phalanx of unspecified finger, sequela -S62620A Displaced fracture of medial phalanx of right index finger, initial encounter for closed fracture -S62620B Displaced fracture of medial phalanx of right index finger, initial encounter for open fracture -S62620D Displaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with routine healing -S62620G Displaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62620K Displaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with nonunion -S62620P Displaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with malunion -S62620S Displaced fracture of medial phalanx of right index finger, sequela -S62621A Displaced fracture of medial phalanx of left index finger, initial encounter for closed fracture -S62621B Displaced fracture of medial phalanx of left index finger, initial encounter for open fracture -S62621D Displaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with routine healing -S62621G Displaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62621K Displaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with nonunion -S62621P Displaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with malunion -S62621S Displaced fracture of medial phalanx of left index finger, sequela -S62622A Displaced fracture of medial phalanx of right middle finger, initial encounter for closed fracture -S62622B Displaced fracture of medial phalanx of right middle finger, initial encounter for open fracture -S62622D Displaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62622G Displaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62622K Displaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62622P Displaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with malunion -S62622S Displaced fracture of medial phalanx of right middle finger, sequela -S62623A Displaced fracture of medial phalanx of left middle finger, initial encounter for closed fracture -S62623B Displaced fracture of medial phalanx of left middle finger, initial encounter for open fracture -S62623D Displaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62623G Displaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62623K Displaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62623P Displaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with malunion -S62623S Displaced fracture of medial phalanx of left middle finger, sequela -S62624A Displaced fracture of medial phalanx of right ring finger, initial encounter for closed fracture -S62624B Displaced fracture of medial phalanx of right ring finger, initial encounter for open fracture -S62624D Displaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62624G Displaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62624K Displaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62624P Displaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with malunion -S62624S Displaced fracture of medial phalanx of right ring finger, sequela -S62625A Displaced fracture of medial phalanx of left ring finger, initial encounter for closed fracture -S62625B Displaced fracture of medial phalanx of left ring finger, initial encounter for open fracture -S62625D Displaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62625G Displaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62625K Displaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62625P Displaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with malunion -S62625S Displaced fracture of medial phalanx of left ring finger, sequela -S62626A Displaced fracture of medial phalanx of right little finger, initial encounter for closed fracture -S62626B Displaced fracture of medial phalanx of right little finger, initial encounter for open fracture -S62626D Displaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with routine healing -S62626G Displaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62626K Displaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with nonunion -S62626P Displaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with malunion -S62626S Displaced fracture of medial phalanx of right little finger, sequela -S62627A Displaced fracture of medial phalanx of left little finger, initial encounter for closed fracture -S62627B Displaced fracture of medial phalanx of left little finger, initial encounter for open fracture -S62627D Displaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with routine healing -S62627G Displaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62627K Displaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with nonunion -S62627P Displaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with malunion -S62627S Displaced fracture of medial phalanx of left little finger, sequela -S62628A Displaced fracture of medial phalanx of other finger, initial encounter for closed fracture -S62628B Displaced fracture of medial phalanx of other finger, initial encounter for open fracture -S62628D Displaced fracture of medial phalanx of other finger, subsequent encounter for fracture with routine healing -S62628G Displaced fracture of medial phalanx of other finger, subsequent encounter for fracture with delayed healing -S62628K Displaced fracture of medial phalanx of other finger, subsequent encounter for fracture with nonunion -S62628P Displaced fracture of medial phalanx of other finger, subsequent encounter for fracture with malunion -S62628S Displaced fracture of medial phalanx of other finger, sequela -S62629A Displaced fracture of medial phalanx of unspecified finger, initial encounter for closed fracture -S62629B Displaced fracture of medial phalanx of unspecified finger, initial encounter for open fracture -S62629D Displaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62629G Displaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62629K Displaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62629P Displaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62629S Displaced fracture of medial phalanx of unspecified finger, sequela -S62630A Displaced fracture of distal phalanx of right index finger, initial encounter for closed fracture -S62630B Displaced fracture of distal phalanx of right index finger, initial encounter for open fracture -S62630D Displaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with routine healing -S62630G Displaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62630K Displaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with nonunion -S62630P Displaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with malunion -S62630S Displaced fracture of distal phalanx of right index finger, sequela -S62631A Displaced fracture of distal phalanx of left index finger, initial encounter for closed fracture -S62631B Displaced fracture of distal phalanx of left index finger, initial encounter for open fracture -S62631D Displaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with routine healing -S62631G Displaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62631K Displaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with nonunion -S62631P Displaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with malunion -S62631S Displaced fracture of distal phalanx of left index finger, sequela -S62632A Displaced fracture of distal phalanx of right middle finger, initial encounter for closed fracture -S62632B Displaced fracture of distal phalanx of right middle finger, initial encounter for open fracture -S62632D Displaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62632G Displaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62632K Displaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62632P Displaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with malunion -S62632S Displaced fracture of distal phalanx of right middle finger, sequela -S62633A Displaced fracture of distal phalanx of left middle finger, initial encounter for closed fracture -S62633B Displaced fracture of distal phalanx of left middle finger, initial encounter for open fracture -S62633D Displaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62633G Displaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62633K Displaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62633P Displaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with malunion -S62633S Displaced fracture of distal phalanx of left middle finger, sequela -S62634A Displaced fracture of distal phalanx of right ring finger, initial encounter for closed fracture -S62634B Displaced fracture of distal phalanx of right ring finger, initial encounter for open fracture -S62634D Displaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62634G Displaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62634K Displaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62634P Displaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with malunion -S62634S Displaced fracture of distal phalanx of right ring finger, sequela -S62635A Displaced fracture of distal phalanx of left ring finger, initial encounter for closed fracture -S62635B Displaced fracture of distal phalanx of left ring finger, initial encounter for open fracture -S62635D Displaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62635G Displaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62635K Displaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62635P Displaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with malunion -S62635S Displaced fracture of distal phalanx of left ring finger, sequela -S62636A Displaced fracture of distal phalanx of right little finger, initial encounter for closed fracture -S62636B Displaced fracture of distal phalanx of right little finger, initial encounter for open fracture -S62636D Displaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with routine healing -S62636G Displaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62636K Displaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with nonunion -S62636P Displaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with malunion -S62636S Displaced fracture of distal phalanx of right little finger, sequela -S62637A Displaced fracture of distal phalanx of left little finger, initial encounter for closed fracture -S62637B Displaced fracture of distal phalanx of left little finger, initial encounter for open fracture -S62637D Displaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with routine healing -S62637G Displaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62637K Displaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with nonunion -S62637P Displaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with malunion -S62637S Displaced fracture of distal phalanx of left little finger, sequela -S62638A Displaced fracture of distal phalanx of other finger, initial encounter for closed fracture -S62638B Displaced fracture of distal phalanx of other finger, initial encounter for open fracture -S62638D Displaced fracture of distal phalanx of other finger, subsequent encounter for fracture with routine healing -S62638G Displaced fracture of distal phalanx of other finger, subsequent encounter for fracture with delayed healing -S62638K Displaced fracture of distal phalanx of other finger, subsequent encounter for fracture with nonunion -S62638P Displaced fracture of distal phalanx of other finger, subsequent encounter for fracture with malunion -S62638S Displaced fracture of distal phalanx of other finger, sequela -S62639A Displaced fracture of distal phalanx of unspecified finger, initial encounter for closed fracture -S62639B Displaced fracture of distal phalanx of unspecified finger, initial encounter for open fracture -S62639D Displaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62639G Displaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62639K Displaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62639P Displaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62639S Displaced fracture of distal phalanx of unspecified finger, sequela -S62640A Nondisplaced fracture of proximal phalanx of right index finger, initial encounter for closed fracture -S62640B Nondisplaced fracture of proximal phalanx of right index finger, initial encounter for open fracture -S62640D Nondisplaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with routine healing -S62640G Nondisplaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62640K Nondisplaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with nonunion -S62640P Nondisplaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with malunion -S62640S Nondisplaced fracture of proximal phalanx of right index finger, sequela -S62641A Nondisplaced fracture of proximal phalanx of left index finger, initial encounter for closed fracture -S62641B Nondisplaced fracture of proximal phalanx of left index finger, initial encounter for open fracture -S62641D Nondisplaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with routine healing -S62641G Nondisplaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62641K Nondisplaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with nonunion -S62641P Nondisplaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with malunion -S62641S Nondisplaced fracture of proximal phalanx of left index finger, sequela -S62642A Nondisplaced fracture of proximal phalanx of right middle finger, initial encounter for closed fracture -S62642B Nondisplaced fracture of proximal phalanx of right middle finger, initial encounter for open fracture -S62642D Nondisplaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62642G Nondisplaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62642K Nondisplaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62642P Nondisplaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with malunion -S62642S Nondisplaced fracture of proximal phalanx of right middle finger, sequela -S62643A Nondisplaced fracture of proximal phalanx of left middle finger, initial encounter for closed fracture -S62643B Nondisplaced fracture of proximal phalanx of left middle finger, initial encounter for open fracture -S62643D Nondisplaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62643G Nondisplaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62643K Nondisplaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62643P Nondisplaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with malunion -S62643S Nondisplaced fracture of proximal phalanx of left middle finger, sequela -S62644A Nondisplaced fracture of proximal phalanx of right ring finger, initial encounter for closed fracture -S62644B Nondisplaced fracture of proximal phalanx of right ring finger, initial encounter for open fracture -S62644D Nondisplaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62644G Nondisplaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62644K Nondisplaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62644P Nondisplaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with malunion -S62644S Nondisplaced fracture of proximal phalanx of right ring finger, sequela -S62645A Nondisplaced fracture of proximal phalanx of left ring finger, initial encounter for closed fracture -S62645B Nondisplaced fracture of proximal phalanx of left ring finger, initial encounter for open fracture -S62645D Nondisplaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62645G Nondisplaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62645K Nondisplaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62645P Nondisplaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with malunion -S62645S Nondisplaced fracture of proximal phalanx of left ring finger, sequela -S62646A Nondisplaced fracture of proximal phalanx of right little finger, initial encounter for closed fracture -S62646B Nondisplaced fracture of proximal phalanx of right little finger, initial encounter for open fracture -S62646D Nondisplaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with routine healing -S62646G Nondisplaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62646K Nondisplaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with nonunion -S62646P Nondisplaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with malunion -S62646S Nondisplaced fracture of proximal phalanx of right little finger, sequela -S62647A Nondisplaced fracture of proximal phalanx of left little finger, initial encounter for closed fracture -S62647B Nondisplaced fracture of proximal phalanx of left little finger, initial encounter for open fracture -S62647D Nondisplaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with routine healing -S62647G Nondisplaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62647K Nondisplaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with nonunion -S62647P Nondisplaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with malunion -S62647S Nondisplaced fracture of proximal phalanx of left little finger, sequela -S62648A Nondisplaced fracture of proximal phalanx of other finger, initial encounter for closed fracture -S62648B Nondisplaced fracture of proximal phalanx of other finger, initial encounter for open fracture -S62648D Nondisplaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with routine healing -S62648G Nondisplaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with delayed healing -S62648K Nondisplaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with nonunion -S62648P Nondisplaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with malunion -S62648S Nondisplaced fracture of proximal phalanx of other finger, sequela -S62649A Nondisplaced fracture of proximal phalanx of unspecified finger, initial encounter for closed fracture -S62649B Nondisplaced fracture of proximal phalanx of unspecified finger, initial encounter for open fracture -S62649D Nondisplaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62649G Nondisplaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62649K Nondisplaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62649P Nondisplaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62649S Nondisplaced fracture of proximal phalanx of unspecified finger, sequela -S62650A Nondisplaced fracture of medial phalanx of right index finger, initial encounter for closed fracture -S62650B Nondisplaced fracture of medial phalanx of right index finger, initial encounter for open fracture -S62650D Nondisplaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with routine healing -S62650G Nondisplaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62650K Nondisplaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with nonunion -S62650P Nondisplaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with malunion -S62650S Nondisplaced fracture of medial phalanx of right index finger, sequela -S62651A Nondisplaced fracture of medial phalanx of left index finger, initial encounter for closed fracture -S62651B Nondisplaced fracture of medial phalanx of left index finger, initial encounter for open fracture -S62651D Nondisplaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with routine healing -S62651G Nondisplaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62651K Nondisplaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with nonunion -S62651P Nondisplaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with malunion -S62651S Nondisplaced fracture of medial phalanx of left index finger, sequela -S62652A Nondisplaced fracture of medial phalanx of right middle finger, initial encounter for closed fracture -S62652B Nondisplaced fracture of medial phalanx of right middle finger, initial encounter for open fracture -S62652D Nondisplaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62652G Nondisplaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62652K Nondisplaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62652P Nondisplaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with malunion -S62652S Nondisplaced fracture of medial phalanx of right middle finger, sequela -S62653A Nondisplaced fracture of medial phalanx of left middle finger, initial encounter for closed fracture -S62653B Nondisplaced fracture of medial phalanx of left middle finger, initial encounter for open fracture -S62653D Nondisplaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62653G Nondisplaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62653K Nondisplaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62653P Nondisplaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with malunion -S62653S Nondisplaced fracture of medial phalanx of left middle finger, sequela -S62654A Nondisplaced fracture of medial phalanx of right ring finger, initial encounter for closed fracture -S62654B Nondisplaced fracture of medial phalanx of right ring finger, initial encounter for open fracture -S62654D Nondisplaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62654G Nondisplaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62654K Nondisplaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62654P Nondisplaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with malunion -S62654S Nondisplaced fracture of medial phalanx of right ring finger, sequela -S62655A Nondisplaced fracture of medial phalanx of left ring finger, initial encounter for closed fracture -S62655B Nondisplaced fracture of medial phalanx of left ring finger, initial encounter for open fracture -S62655D Nondisplaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62655G Nondisplaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62655K Nondisplaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62655P Nondisplaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with malunion -S62655S Nondisplaced fracture of medial phalanx of left ring finger, sequela -S62656A Nondisplaced fracture of medial phalanx of right little finger, initial encounter for closed fracture -S62656B Nondisplaced fracture of medial phalanx of right little finger, initial encounter for open fracture -S62656D Nondisplaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with routine healing -S62656G Nondisplaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62656K Nondisplaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with nonunion -S62656P Nondisplaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with malunion -S62656S Nondisplaced fracture of medial phalanx of right little finger, sequela -S62657A Nondisplaced fracture of medial phalanx of left little finger, initial encounter for closed fracture -S62657B Nondisplaced fracture of medial phalanx of left little finger, initial encounter for open fracture -S62657D Nondisplaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with routine healing -S62657G Nondisplaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62657K Nondisplaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with nonunion -S62657P Nondisplaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with malunion -S62657S Nondisplaced fracture of medial phalanx of left little finger, sequela -S62658A Nondisplaced fracture of medial phalanx of other finger, initial encounter for closed fracture -S62658B Nondisplaced fracture of medial phalanx of other finger, initial encounter for open fracture -S62658D Nondisplaced fracture of medial phalanx of other finger, subsequent encounter for fracture with routine healing -S62658G Nondisplaced fracture of medial phalanx of other finger, subsequent encounter for fracture with delayed healing -S62658K Nondisplaced fracture of medial phalanx of other finger, subsequent encounter for fracture with nonunion -S62658P Nondisplaced fracture of medial phalanx of other finger, subsequent encounter for fracture with malunion -S62658S Nondisplaced fracture of medial phalanx of other finger, sequela -S62659A Nondisplaced fracture of medial phalanx of unspecified finger, initial encounter for closed fracture -S62659B Nondisplaced fracture of medial phalanx of unspecified finger, initial encounter for open fracture -S62659D Nondisplaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62659G Nondisplaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62659K Nondisplaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62659P Nondisplaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62659S Nondisplaced fracture of medial phalanx of unspecified finger, sequela -S62660A Nondisplaced fracture of distal phalanx of right index finger, initial encounter for closed fracture -S62660B Nondisplaced fracture of distal phalanx of right index finger, initial encounter for open fracture -S62660D Nondisplaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with routine healing -S62660G Nondisplaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62660K Nondisplaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with nonunion -S62660P Nondisplaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with malunion -S62660S Nondisplaced fracture of distal phalanx of right index finger, sequela -S62661A Nondisplaced fracture of distal phalanx of left index finger, initial encounter for closed fracture -S62661B Nondisplaced fracture of distal phalanx of left index finger, initial encounter for open fracture -S62661D Nondisplaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with routine healing -S62661G Nondisplaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62661K Nondisplaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with nonunion -S62661P Nondisplaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with malunion -S62661S Nondisplaced fracture of distal phalanx of left index finger, sequela -S62662A Nondisplaced fracture of distal phalanx of right middle finger, initial encounter for closed fracture -S62662B Nondisplaced fracture of distal phalanx of right middle finger, initial encounter for open fracture -S62662D Nondisplaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62662G Nondisplaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62662K Nondisplaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62662P Nondisplaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with malunion -S62662S Nondisplaced fracture of distal phalanx of right middle finger, sequela -S62663A Nondisplaced fracture of distal phalanx of left middle finger, initial encounter for closed fracture -S62663B Nondisplaced fracture of distal phalanx of left middle finger, initial encounter for open fracture -S62663D Nondisplaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62663G Nondisplaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62663K Nondisplaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62663P Nondisplaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with malunion -S62663S Nondisplaced fracture of distal phalanx of left middle finger, sequela -S62664A Nondisplaced fracture of distal phalanx of right ring finger, initial encounter for closed fracture -S62664B Nondisplaced fracture of distal phalanx of right ring finger, initial encounter for open fracture -S62664D Nondisplaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62664G Nondisplaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62664K Nondisplaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62664P Nondisplaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with malunion -S62664S Nondisplaced fracture of distal phalanx of right ring finger, sequela -S62665A Nondisplaced fracture of distal phalanx of left ring finger, initial encounter for closed fracture -S62665B Nondisplaced fracture of distal phalanx of left ring finger, initial encounter for open fracture -S62665D Nondisplaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62665G Nondisplaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62665K Nondisplaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62665P Nondisplaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with malunion -S62665S Nondisplaced fracture of distal phalanx of left ring finger, sequela -S62666A Nondisplaced fracture of distal phalanx of right little finger, initial encounter for closed fracture -S62666B Nondisplaced fracture of distal phalanx of right little finger, initial encounter for open fracture -S62666D Nondisplaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with routine healing -S62666G Nondisplaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62666K Nondisplaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with nonunion -S62666P Nondisplaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with malunion -S62666S Nondisplaced fracture of distal phalanx of right little finger, sequela -S62667A Nondisplaced fracture of distal phalanx of left little finger, initial encounter for closed fracture -S62667B Nondisplaced fracture of distal phalanx of left little finger, initial encounter for open fracture -S62667D Nondisplaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with routine healing -S62667G Nondisplaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62667K Nondisplaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with nonunion -S62667P Nondisplaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with malunion -S62667S Nondisplaced fracture of distal phalanx of left little finger, sequela -S62668A Nondisplaced fracture of distal phalanx of other finger, initial encounter for closed fracture -S62668B Nondisplaced fracture of distal phalanx of other finger, initial encounter for open fracture -S62668D Nondisplaced fracture of distal phalanx of other finger, subsequent encounter for fracture with routine healing -S62668G Nondisplaced fracture of distal phalanx of other finger, subsequent encounter for fracture with delayed healing -S62668K Nondisplaced fracture of distal phalanx of other finger, subsequent encounter for fracture with nonunion -S62668P Nondisplaced fracture of distal phalanx of other finger, subsequent encounter for fracture with malunion -S62668S Nondisplaced fracture of distal phalanx of other finger, sequela -S62669A Nondisplaced fracture of distal phalanx of unspecified finger, initial encounter for closed fracture -S62669B Nondisplaced fracture of distal phalanx of unspecified finger, initial encounter for open fracture -S62669D Nondisplaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62669G Nondisplaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62669K Nondisplaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62669P Nondisplaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62669S Nondisplaced fracture of distal phalanx of unspecified finger, sequela -S6290XA Unspecified fracture of unspecified wrist and hand, initial encounter for closed fracture -S6290XB Unspecified fracture of unspecified wrist and hand, initial encounter for open fracture -S6290XD Unspecified fracture of unspecified wrist and hand, subsequent encounter for fracture with routine healing -S6290XG Unspecified fracture of unspecified wrist and hand, subsequent encounter for fracture with delayed healing -S6290XK Unspecified fracture of unspecified wrist and hand, subsequent encounter for fracture with nonunion -S6290XP Unspecified fracture of unspecified wrist and hand, subsequent encounter for fracture with malunion -S6290XS Unspecified fracture of unspecified wrist and hand, sequela -S6291XA Unspecified fracture of right wrist and hand, initial encounter for closed fracture -S6291XB Unspecified fracture of right wrist and hand, initial encounter for open fracture -S6291XD Unspecified fracture of right wrist and hand, subsequent encounter for fracture with routine healing -S6291XG Unspecified fracture of right wrist and hand, subsequent encounter for fracture with delayed healing -S6291XK Unspecified fracture of right wrist and hand, subsequent encounter for fracture with nonunion -S6291XP Unspecified fracture of right wrist and hand, subsequent encounter for fracture with malunion -S6291XS Unspecified fracture of right wrist and hand, sequela -S6292XA Unspecified fracture of left wrist and hand, initial encounter for closed fracture -S6292XB Unspecified fracture of left wrist and hand, initial encounter for open fracture -S6292XD Unspecified fracture of left wrist and hand, subsequent encounter for fracture with routine healing -S6292XG Unspecified fracture of left wrist and hand, subsequent encounter for fracture with delayed healing -S6292XK Unspecified fracture of left wrist and hand, subsequent encounter for fracture with nonunion -S6292XP Unspecified fracture of left wrist and hand, subsequent encounter for fracture with malunion -S6292XS Unspecified fracture of left wrist and hand, sequela -S63001A Unspecified subluxation of right wrist and hand, initial encounter -S63001D Unspecified subluxation of right wrist and hand, subsequent encounter -S63001S Unspecified subluxation of right wrist and hand, sequela -S63002A Unspecified subluxation of left wrist and hand, initial encounter -S63002D Unspecified subluxation of left wrist and hand, subsequent encounter -S63002S Unspecified subluxation of left wrist and hand, sequela -S63003A Unspecified subluxation of unspecified wrist and hand, initial encounter -S63003D Unspecified subluxation of unspecified wrist and hand, subsequent encounter -S63003S Unspecified subluxation of unspecified wrist and hand, sequela -S63004A Unspecified dislocation of right wrist and hand, initial encounter -S63004D Unspecified dislocation of right wrist and hand, subsequent encounter -S63004S Unspecified dislocation of right wrist and hand, sequela -S63005A Unspecified dislocation of left wrist and hand, initial encounter -S63005D Unspecified dislocation of left wrist and hand, subsequent encounter -S63005S Unspecified dislocation of left wrist and hand, sequela -S63006A Unspecified dislocation of unspecified wrist and hand, initial encounter -S63006D Unspecified dislocation of unspecified wrist and hand, subsequent encounter -S63006S Unspecified dislocation of unspecified wrist and hand, sequela -S63011A Subluxation of distal radioulnar joint of right wrist, initial encounter -S63011D Subluxation of distal radioulnar joint of right wrist, subsequent encounter -S63011S Subluxation of distal radioulnar joint of right wrist, sequela -S63012A Subluxation of distal radioulnar joint of left wrist, initial encounter -S63012D Subluxation of distal radioulnar joint of left wrist, subsequent encounter -S63012S Subluxation of distal radioulnar joint of left wrist, sequela -S63013A Subluxation of distal radioulnar joint of unspecified wrist, initial encounter -S63013D Subluxation of distal radioulnar joint of unspecified wrist, subsequent encounter -S63013S Subluxation of distal radioulnar joint of unspecified wrist, sequela -S63014A Dislocation of distal radioulnar joint of right wrist, initial encounter -S63014D Dislocation of distal radioulnar joint of right wrist, subsequent encounter -S63014S Dislocation of distal radioulnar joint of right wrist, sequela -S63015A Dislocation of distal radioulnar joint of left wrist, initial encounter -S63015D Dislocation of distal radioulnar joint of left wrist, subsequent encounter -S63015S Dislocation of distal radioulnar joint of left wrist, sequela -S63016A Dislocation of distal radioulnar joint of unspecified wrist, initial encounter -S63016D Dislocation of distal radioulnar joint of unspecified wrist, subsequent encounter -S63016S Dislocation of distal radioulnar joint of unspecified wrist, sequela -S63021A Subluxation of radiocarpal joint of right wrist, initial encounter -S63021D Subluxation of radiocarpal joint of right wrist, subsequent encounter -S63021S Subluxation of radiocarpal joint of right wrist, sequela -S63022A Subluxation of radiocarpal joint of left wrist, initial encounter -S63022D Subluxation of radiocarpal joint of left wrist, subsequent encounter -S63022S Subluxation of radiocarpal joint of left wrist, sequela -S63023A Subluxation of radiocarpal joint of unspecified wrist, initial encounter -S63023D Subluxation of radiocarpal joint of unspecified wrist, subsequent encounter -S63023S Subluxation of radiocarpal joint of unspecified wrist, sequela -S63024A Dislocation of radiocarpal joint of right wrist, initial encounter -S63024D Dislocation of radiocarpal joint of right wrist, subsequent encounter -S63024S Dislocation of radiocarpal joint of right wrist, sequela -S63025A Dislocation of radiocarpal joint of left wrist, initial encounter -S63025D Dislocation of radiocarpal joint of left wrist, subsequent encounter -S63025S Dislocation of radiocarpal joint of left wrist, sequela -S63026A Dislocation of radiocarpal joint of unspecified wrist, initial encounter -S63026D Dislocation of radiocarpal joint of unspecified wrist, subsequent encounter -S63026S Dislocation of radiocarpal joint of unspecified wrist, sequela -S63031A Subluxation of midcarpal joint of right wrist, initial encounter -S63031D Subluxation of midcarpal joint of right wrist, subsequent encounter -S63031S Subluxation of midcarpal joint of right wrist, sequela -S63032A Subluxation of midcarpal joint of left wrist, initial encounter -S63032D Subluxation of midcarpal joint of left wrist, subsequent encounter -S63032S Subluxation of midcarpal joint of left wrist, sequela -S63033A Subluxation of midcarpal joint of unspecified wrist, initial encounter -S63033D Subluxation of midcarpal joint of unspecified wrist, subsequent encounter -S63033S Subluxation of midcarpal joint of unspecified wrist, sequela -S63034A Dislocation of midcarpal joint of right wrist, initial encounter -S63034D Dislocation of midcarpal joint of right wrist, subsequent encounter -S63034S Dislocation of midcarpal joint of right wrist, sequela -S63035A Dislocation of midcarpal joint of left wrist, initial encounter -S63035D Dislocation of midcarpal joint of left wrist, subsequent encounter -S63035S Dislocation of midcarpal joint of left wrist, sequela -S63036A Dislocation of midcarpal joint of unspecified wrist, initial encounter -S63036D Dislocation of midcarpal joint of unspecified wrist, subsequent encounter -S63036S Dislocation of midcarpal joint of unspecified wrist, sequela -S63041A Subluxation of carpometacarpal joint of right thumb, initial encounter -S63041D Subluxation of carpometacarpal joint of right thumb, subsequent encounter -S63041S Subluxation of carpometacarpal joint of right thumb, sequela -S63042A Subluxation of carpometacarpal joint of left thumb, initial encounter -S63042D Subluxation of carpometacarpal joint of left thumb, subsequent encounter -S63042S Subluxation of carpometacarpal joint of left thumb, sequela -S63043A Subluxation of carpometacarpal joint of unspecified thumb, initial encounter -S63043D Subluxation of carpometacarpal joint of unspecified thumb, subsequent encounter -S63043S Subluxation of carpometacarpal joint of unspecified thumb, sequela -S63044A Dislocation of carpometacarpal joint of right thumb, initial encounter -S63044D Dislocation of carpometacarpal joint of right thumb, subsequent encounter -S63044S Dislocation of carpometacarpal joint of right thumb, sequela -S63045A Dislocation of carpometacarpal joint of left thumb, initial encounter -S63045D Dislocation of carpometacarpal joint of left thumb, subsequent encounter -S63045S Dislocation of carpometacarpal joint of left thumb, sequela -S63046A Dislocation of carpometacarpal joint of unspecified thumb, initial encounter -S63046D Dislocation of carpometacarpal joint of unspecified thumb, subsequent encounter -S63046S Dislocation of carpometacarpal joint of unspecified thumb, sequela -S63051A Subluxation of other carpometacarpal joint of right hand, initial encounter -S63051D Subluxation of other carpometacarpal joint of right hand, subsequent encounter -S63051S Subluxation of other carpometacarpal joint of right hand, sequela -S63052A Subluxation of other carpometacarpal joint of left hand, initial encounter -S63052D Subluxation of other carpometacarpal joint of left hand, subsequent encounter -S63052S Subluxation of other carpometacarpal joint of left hand, sequela -S63053A Subluxation of other carpometacarpal joint of unspecified hand, initial encounter -S63053D Subluxation of other carpometacarpal joint of unspecified hand, subsequent encounter -S63053S Subluxation of other carpometacarpal joint of unspecified hand, sequela -S63054A Dislocation of other carpometacarpal joint of right hand, initial encounter -S63054D Dislocation of other carpometacarpal joint of right hand, subsequent encounter -S63054S Dislocation of other carpometacarpal joint of right hand, sequela -S63055A Dislocation of other carpometacarpal joint of left hand, initial encounter -S63055D Dislocation of other carpometacarpal joint of left hand, subsequent encounter -S63055S Dislocation of other carpometacarpal joint of left hand, sequela -S63056A Dislocation of other carpometacarpal joint of unspecified hand, initial encounter -S63056D Dislocation of other carpometacarpal joint of unspecified hand, subsequent encounter -S63056S Dislocation of other carpometacarpal joint of unspecified hand, sequela -S63061A Subluxation of metacarpal (bone), proximal end of right hand, initial encounter -S63061D Subluxation of metacarpal (bone), proximal end of right hand, subsequent encounter -S63061S Subluxation of metacarpal (bone), proximal end of right hand, sequela -S63062A Subluxation of metacarpal (bone), proximal end of left hand, initial encounter -S63062D Subluxation of metacarpal (bone), proximal end of left hand, subsequent encounter -S63062S Subluxation of metacarpal (bone), proximal end of left hand, sequela -S63063A Subluxation of metacarpal (bone), proximal end of unspecified hand, initial encounter -S63063D Subluxation of metacarpal (bone), proximal end of unspecified hand, subsequent encounter -S63063S Subluxation of metacarpal (bone), proximal end of unspecified hand, sequela -S63064A Dislocation of metacarpal (bone), proximal end of right hand, initial encounter -S63064D Dislocation of metacarpal (bone), proximal end of right hand, subsequent encounter -S63064S Dislocation of metacarpal (bone), proximal end of right hand, sequela -S63065A Dislocation of metacarpal (bone), proximal end of left hand, initial encounter -S63065D Dislocation of metacarpal (bone), proximal end of left hand, subsequent encounter -S63065S Dislocation of metacarpal (bone), proximal end of left hand, sequela -S63066A Dislocation of metacarpal (bone), proximal end of unspecified hand, initial encounter -S63066D Dislocation of metacarpal (bone), proximal end of unspecified hand, subsequent encounter -S63066S Dislocation of metacarpal (bone), proximal end of unspecified hand, sequela -S63071A Subluxation of distal end of right ulna, initial encounter -S63071D Subluxation of distal end of right ulna, subsequent encounter -S63071S Subluxation of distal end of right ulna, sequela -S63072A Subluxation of distal end of left ulna, initial encounter -S63072D Subluxation of distal end of left ulna, subsequent encounter -S63072S Subluxation of distal end of left ulna, sequela -S63073A Subluxation of distal end of unspecified ulna, initial encounter -S63073D Subluxation of distal end of unspecified ulna, subsequent encounter -S63073S Subluxation of distal end of unspecified ulna, sequela -S63074A Dislocation of distal end of right ulna, initial encounter -S63074D Dislocation of distal end of right ulna, subsequent encounter -S63074S Dislocation of distal end of right ulna, sequela -S63075A Dislocation of distal end of left ulna, initial encounter -S63075D Dislocation of distal end of left ulna, subsequent encounter -S63075S Dislocation of distal end of left ulna, sequela -S63076A Dislocation of distal end of unspecified ulna, initial encounter -S63076D Dislocation of distal end of unspecified ulna, subsequent encounter -S63076S Dislocation of distal end of unspecified ulna, sequela -S63091A Other subluxation of right wrist and hand, initial encounter -S63091D Other subluxation of right wrist and hand, subsequent encounter -S63091S Other subluxation of right wrist and hand, sequela -S63092A Other subluxation of left wrist and hand, initial encounter -S63092D Other subluxation of left wrist and hand, subsequent encounter -S63092S Other subluxation of left wrist and hand, sequela -S63093A Other subluxation of unspecified wrist and hand, initial encounter -S63093D Other subluxation of unspecified wrist and hand, subsequent encounter -S63093S Other subluxation of unspecified wrist and hand, sequela -S63094A Other dislocation of right wrist and hand, initial encounter -S63094D Other dislocation of right wrist and hand, subsequent encounter -S63094S Other dislocation of right wrist and hand, sequela -S63095A Other dislocation of left wrist and hand, initial encounter -S63095D Other dislocation of left wrist and hand, subsequent encounter -S63095S Other dislocation of left wrist and hand, sequela -S63096A Other dislocation of unspecified wrist and hand, initial encounter -S63096D Other dislocation of unspecified wrist and hand, subsequent encounter -S63096S Other dislocation of unspecified wrist and hand, sequela -S63101A Unspecified subluxation of right thumb, initial encounter -S63101D Unspecified subluxation of right thumb, subsequent encounter -S63101S Unspecified subluxation of right thumb, sequela -S63102A Unspecified subluxation of left thumb, initial encounter -S63102D Unspecified subluxation of left thumb, subsequent encounter -S63102S Unspecified subluxation of left thumb, sequela -S63103A Unspecified subluxation of unspecified thumb, initial encounter -S63103D Unspecified subluxation of unspecified thumb, subsequent encounter -S63103S Unspecified subluxation of unspecified thumb, sequela -S63104A Unspecified dislocation of right thumb, initial encounter -S63104D Unspecified dislocation of right thumb, subsequent encounter -S63104S Unspecified dislocation of right thumb, sequela -S63105A Unspecified dislocation of left thumb, initial encounter -S63105D Unspecified dislocation of left thumb, subsequent encounter -S63105S Unspecified dislocation of left thumb, sequela -S63106A Unspecified dislocation of unspecified thumb, initial encounter -S63106D Unspecified dislocation of unspecified thumb, subsequent encounter -S63106S Unspecified dislocation of unspecified thumb, sequela -S63111A Subluxation of metacarpophalangeal joint of right thumb, initial encounter -S63111D Subluxation of metacarpophalangeal joint of right thumb, subsequent encounter -S63111S Subluxation of metacarpophalangeal joint of right thumb, sequela -S63112A Subluxation of metacarpophalangeal joint of left thumb, initial encounter -S63112D Subluxation of metacarpophalangeal joint of left thumb, subsequent encounter -S63112S Subluxation of metacarpophalangeal joint of left thumb, sequela -S63113A Subluxation of metacarpophalangeal joint of unspecified thumb, initial encounter -S63113D Subluxation of metacarpophalangeal joint of unspecified thumb, subsequent encounter -S63113S Subluxation of metacarpophalangeal joint of unspecified thumb, sequela -S63114A Dislocation of metacarpophalangeal joint of right thumb, initial encounter -S63114D Dislocation of metacarpophalangeal joint of right thumb, subsequent encounter -S63114S Dislocation of metacarpophalangeal joint of right thumb, sequela -S63115A Dislocation of metacarpophalangeal joint of left thumb, initial encounter -S63115D Dislocation of metacarpophalangeal joint of left thumb, subsequent encounter -S63115S Dislocation of metacarpophalangeal joint of left thumb, sequela -S63116A Dislocation of metacarpophalangeal joint of unspecified thumb, initial encounter -S63116D Dislocation of metacarpophalangeal joint of unspecified thumb, subsequent encounter -S63116S Dislocation of metacarpophalangeal joint of unspecified thumb, sequela -S63121A Subluxation of unspecified interphalangeal joint of right thumb, initial encounter -S63121D Subluxation of unspecified interphalangeal joint of right thumb, subsequent encounter -S63121S Subluxation of unspecified interphalangeal joint of right thumb, sequela -S63122A Subluxation of unspecified interphalangeal joint of left thumb, initial encounter -S63122D Subluxation of unspecified interphalangeal joint of left thumb, subsequent encounter -S63122S Subluxation of unspecified interphalangeal joint of left thumb, sequela -S63123A Subluxation of unspecified interphalangeal joint of unspecified thumb, initial encounter -S63123D Subluxation of unspecified interphalangeal joint of unspecified thumb, subsequent encounter -S63123S Subluxation of unspecified interphalangeal joint of unspecified thumb, sequela -S63124A Dislocation of unspecified interphalangeal joint of right thumb, initial encounter -S63124D Dislocation of unspecified interphalangeal joint of right thumb, subsequent encounter -S63124S Dislocation of unspecified interphalangeal joint of right thumb, sequela -S63125A Dislocation of unspecified interphalangeal joint of left thumb, initial encounter -S63125D Dislocation of unspecified interphalangeal joint of left thumb, subsequent encounter -S63125S Dislocation of unspecified interphalangeal joint of left thumb, sequela -S63126A Dislocation of unspecified interphalangeal joint of unspecified thumb, initial encounter -S63126D Dislocation of unspecified interphalangeal joint of unspecified thumb, subsequent encounter -S63126S Dislocation of unspecified interphalangeal joint of unspecified thumb, sequela -S63131A Subluxation of proximal interphalangeal joint of right thumb, initial encounter -S63131D Subluxation of proximal interphalangeal joint of right thumb, subsequent encounter -S63131S Subluxation of proximal interphalangeal joint of right thumb, sequela -S63132A Subluxation of proximal interphalangeal joint of left thumb, initial encounter -S63132D Subluxation of proximal interphalangeal joint of left thumb, subsequent encounter -S63132S Subluxation of proximal interphalangeal joint of left thumb, sequela -S63133A Subluxation of proximal interphalangeal joint of unspecified thumb, initial encounter -S63133D Subluxation of proximal interphalangeal joint of unspecified thumb, subsequent encounter -S63133S Subluxation of proximal interphalangeal joint of unspecified thumb, sequela -S63134A Dislocation of proximal interphalangeal joint of right thumb, initial encounter -S63134D Dislocation of proximal interphalangeal joint of right thumb, subsequent encounter -S63134S Dislocation of proximal interphalangeal joint of right thumb, sequela -S63135A Dislocation of proximal interphalangeal joint of left thumb, initial encounter -S63135D Dislocation of proximal interphalangeal joint of left thumb, subsequent encounter -S63135S Dislocation of proximal interphalangeal joint of left thumb, sequela -S63136A Dislocation of proximal interphalangeal joint of unspecified thumb, initial encounter -S63136D Dislocation of proximal interphalangeal joint of unspecified thumb, subsequent encounter -S63136S Dislocation of proximal interphalangeal joint of unspecified thumb, sequela -S63141A Subluxation of distal interphalangeal joint of right thumb, initial encounter -S63141D Subluxation of distal interphalangeal joint of right thumb, subsequent encounter -S63141S Subluxation of distal interphalangeal joint of right thumb, sequela -S63142A Subluxation of distal interphalangeal joint of left thumb, initial encounter -S63142D Subluxation of distal interphalangeal joint of left thumb, subsequent encounter -S63142S Subluxation of distal interphalangeal joint of left thumb, sequela -S63143A Subluxation of distal interphalangeal joint of unspecified thumb, initial encounter -S63143D Subluxation of distal interphalangeal joint of unspecified thumb, subsequent encounter -S63143S Subluxation of distal interphalangeal joint of unspecified thumb, sequela -S63144A Dislocation of distal interphalangeal joint of right thumb, initial encounter -S63144D Dislocation of distal interphalangeal joint of right thumb, subsequent encounter -S63144S Dislocation of distal interphalangeal joint of right thumb, sequela -S63145A Dislocation of distal interphalangeal joint of left thumb, initial encounter -S63145D Dislocation of distal interphalangeal joint of left thumb, subsequent encounter -S63145S Dislocation of distal interphalangeal joint of left thumb, sequela -S63146A Dislocation of distal interphalangeal joint of unspecified thumb, initial encounter -S63146D Dislocation of distal interphalangeal joint of unspecified thumb, subsequent encounter -S63146S Dislocation of distal interphalangeal joint of unspecified thumb, sequela -S63200A Unspecified subluxation of right index finger, initial encounter -S63200D Unspecified subluxation of right index finger, subsequent encounter -S63200S Unspecified subluxation of right index finger, sequela -S63201A Unspecified subluxation of left index finger, initial encounter -S63201D Unspecified subluxation of left index finger, subsequent encounter -S63201S Unspecified subluxation of left index finger, sequela -S63202A Unspecified subluxation of right middle finger, initial encounter -S63202D Unspecified subluxation of right middle finger, subsequent encounter -S63202S Unspecified subluxation of right middle finger, sequela -S63203A Unspecified subluxation of left middle finger, initial encounter -S63203D Unspecified subluxation of left middle finger, subsequent encounter -S63203S Unspecified subluxation of left middle finger, sequela -S63204A Unspecified subluxation of right ring finger, initial encounter -S63204D Unspecified subluxation of right ring finger, subsequent encounter -S63204S Unspecified subluxation of right ring finger, sequela -S63205A Unspecified subluxation of left ring finger, initial encounter -S63205D Unspecified subluxation of left ring finger, subsequent encounter -S63205S Unspecified subluxation of left ring finger, sequela -S63206A Unspecified subluxation of right little finger, initial encounter -S63206D Unspecified subluxation of right little finger, subsequent encounter -S63206S Unspecified subluxation of right little finger, sequela -S63207A Unspecified subluxation of left little finger, initial encounter -S63207D Unspecified subluxation of left little finger, subsequent encounter -S63207S Unspecified subluxation of left little finger, sequela -S63208A Unspecified subluxation of other finger, initial encounter -S63208D Unspecified subluxation of other finger, subsequent encounter -S63208S Unspecified subluxation of other finger, sequela -S63209A Unspecified subluxation of unspecified finger, initial encounter -S63209D Unspecified subluxation of unspecified finger, subsequent encounter -S63209S Unspecified subluxation of unspecified finger, sequela -S63210A Subluxation of metacarpophalangeal joint of right index finger, initial encounter -S63210D Subluxation of metacarpophalangeal joint of right index finger, subsequent encounter -S63210S Subluxation of metacarpophalangeal joint of right index finger, sequela -S63211A Subluxation of metacarpophalangeal joint of left index finger, initial encounter -S63211D Subluxation of metacarpophalangeal joint of left index finger, subsequent encounter -S63211S Subluxation of metacarpophalangeal joint of left index finger, sequela -S63212A Subluxation of metacarpophalangeal joint of right middle finger, initial encounter -S63212D Subluxation of metacarpophalangeal joint of right middle finger, subsequent encounter -S63212S Subluxation of metacarpophalangeal joint of right middle finger, sequela -S63213A Subluxation of metacarpophalangeal joint of left middle finger, initial encounter -S63213D Subluxation of metacarpophalangeal joint of left middle finger, subsequent encounter -S63213S Subluxation of metacarpophalangeal joint of left middle finger, sequela -S63214A Subluxation of metacarpophalangeal joint of right ring finger, initial encounter -S63214D Subluxation of metacarpophalangeal joint of right ring finger, subsequent encounter -S63214S Subluxation of metacarpophalangeal joint of right ring finger, sequela -S63215A Subluxation of metacarpophalangeal joint of left ring finger, initial encounter -S63215D Subluxation of metacarpophalangeal joint of left ring finger, subsequent encounter -S63215S Subluxation of metacarpophalangeal joint of left ring finger, sequela -S63216A Subluxation of metacarpophalangeal joint of right little finger, initial encounter -S63216D Subluxation of metacarpophalangeal joint of right little finger, subsequent encounter -S63216S Subluxation of metacarpophalangeal joint of right little finger, sequela -S63217A Subluxation of metacarpophalangeal joint of left little finger, initial encounter -S63217D Subluxation of metacarpophalangeal joint of left little finger, subsequent encounter -S63217S Subluxation of metacarpophalangeal joint of left little finger, sequela -S63218A Subluxation of metacarpophalangeal joint of other finger, initial encounter -S63218D Subluxation of metacarpophalangeal joint of other finger, subsequent encounter -S63218S Subluxation of metacarpophalangeal joint of other finger, sequela -S63219A Subluxation of metacarpophalangeal joint of unspecified finger, initial encounter -S63219D Subluxation of metacarpophalangeal joint of unspecified finger, subsequent encounter -S63219S Subluxation of metacarpophalangeal joint of unspecified finger, sequela -S63220A Subluxation of unspecified interphalangeal joint of right index finger, initial encounter -S63220D Subluxation of unspecified interphalangeal joint of right index finger, subsequent encounter -S63220S Subluxation of unspecified interphalangeal joint of right index finger, sequela -S63221A Subluxation of unspecified interphalangeal joint of left index finger, initial encounter -S63221D Subluxation of unspecified interphalangeal joint of left index finger, subsequent encounter -S63221S Subluxation of unspecified interphalangeal joint of left index finger, sequela -S63222A Subluxation of unspecified interphalangeal joint of right middle finger, initial encounter -S63222D Subluxation of unspecified interphalangeal joint of right middle finger, subsequent encounter -S63222S Subluxation of unspecified interphalangeal joint of right middle finger, sequela -S63223A Subluxation of unspecified interphalangeal joint of left middle finger, initial encounter -S63223D Subluxation of unspecified interphalangeal joint of left middle finger, subsequent encounter -S63223S Subluxation of unspecified interphalangeal joint of left middle finger, sequela -S63224A Subluxation of unspecified interphalangeal joint of right ring finger, initial encounter -S63224D Subluxation of unspecified interphalangeal joint of right ring finger, subsequent encounter -S63224S Subluxation of unspecified interphalangeal joint of right ring finger, sequela -S63225A Subluxation of unspecified interphalangeal joint of left ring finger, initial encounter -S63225D Subluxation of unspecified interphalangeal joint of left ring finger, subsequent encounter -S63225S Subluxation of unspecified interphalangeal joint of left ring finger, sequela -S63226A Subluxation of unspecified interphalangeal joint of right little finger, initial encounter -S63226D Subluxation of unspecified interphalangeal joint of right little finger, subsequent encounter -S63226S Subluxation of unspecified interphalangeal joint of right little finger, sequela -S63227A Subluxation of unspecified interphalangeal joint of left little finger, initial encounter -S63227D Subluxation of unspecified interphalangeal joint of left little finger, subsequent encounter -S63227S Subluxation of unspecified interphalangeal joint of left little finger, sequela -S63228A Subluxation of unspecified interphalangeal joint of other finger, initial encounter -S63228D Subluxation of unspecified interphalangeal joint of other finger, subsequent encounter -S63228S Subluxation of unspecified interphalangeal joint of other finger, sequela -S63229A Subluxation of unspecified interphalangeal joint of unspecified finger, initial encounter -S63229D Subluxation of unspecified interphalangeal joint of unspecified finger, subsequent encounter -S63229S Subluxation of unspecified interphalangeal joint of unspecified finger, sequela -S63230A Subluxation of proximal interphalangeal joint of right index finger, initial encounter -S63230D Subluxation of proximal interphalangeal joint of right index finger, subsequent encounter -S63230S Subluxation of proximal interphalangeal joint of right index finger, sequela -S63231A Subluxation of proximal interphalangeal joint of left index finger, initial encounter -S63231D Subluxation of proximal interphalangeal joint of left index finger, subsequent encounter -S63231S Subluxation of proximal interphalangeal joint of left index finger, sequela -S63232A Subluxation of proximal interphalangeal joint of right middle finger, initial encounter -S63232D Subluxation of proximal interphalangeal joint of right middle finger, subsequent encounter -S63232S Subluxation of proximal interphalangeal joint of right middle finger, sequela -S63233A Subluxation of proximal interphalangeal joint of left middle finger, initial encounter -S63233D Subluxation of proximal interphalangeal joint of left middle finger, subsequent encounter -S63233S Subluxation of proximal interphalangeal joint of left middle finger, sequela -S63234A Subluxation of proximal interphalangeal joint of right ring finger, initial encounter -S63234D Subluxation of proximal interphalangeal joint of right ring finger, subsequent encounter -S63234S Subluxation of proximal interphalangeal joint of right ring finger, sequela -S63235A Subluxation of proximal interphalangeal joint of left ring finger, initial encounter -S63235D Subluxation of proximal interphalangeal joint of left ring finger, subsequent encounter -S63235S Subluxation of proximal interphalangeal joint of left ring finger, sequela -S63236A Subluxation of proximal interphalangeal joint of right little finger, initial encounter -S63236D Subluxation of proximal interphalangeal joint of right little finger, subsequent encounter -S63236S Subluxation of proximal interphalangeal joint of right little finger, sequela -S63237A Subluxation of proximal interphalangeal joint of left little finger, initial encounter -S63237D Subluxation of proximal interphalangeal joint of left little finger, subsequent encounter -S63237S Subluxation of proximal interphalangeal joint of left little finger, sequela -S63238A Subluxation of proximal interphalangeal joint of other finger, initial encounter -S63238D Subluxation of proximal interphalangeal joint of other finger, subsequent encounter -S63238S Subluxation of proximal interphalangeal joint of other finger, sequela -S63239A Subluxation of proximal interphalangeal joint of unspecified finger, initial encounter -S63239D Subluxation of proximal interphalangeal joint of unspecified finger, subsequent encounter -S63239S Subluxation of proximal interphalangeal joint of unspecified finger, sequela -S63240A Subluxation of distal interphalangeal joint of right index finger, initial encounter -S63240D Subluxation of distal interphalangeal joint of right index finger, subsequent encounter -S63240S Subluxation of distal interphalangeal joint of right index finger, sequela -S63241A Subluxation of distal interphalangeal joint of left index finger, initial encounter -S63241D Subluxation of distal interphalangeal joint of left index finger, subsequent encounter -S63241S Subluxation of distal interphalangeal joint of left index finger, sequela -S63242A Subluxation of distal interphalangeal joint of right middle finger, initial encounter -S63242D Subluxation of distal interphalangeal joint of right middle finger, subsequent encounter -S63242S Subluxation of distal interphalangeal joint of right middle finger, sequela -S63243A Subluxation of distal interphalangeal joint of left middle finger, initial encounter -S63243D Subluxation of distal interphalangeal joint of left middle finger, subsequent encounter -S63243S Subluxation of distal interphalangeal joint of left middle finger, sequela -S63244A Subluxation of distal interphalangeal joint of right ring finger, initial encounter -S63244D Subluxation of distal interphalangeal joint of right ring finger, subsequent encounter -S63244S Subluxation of distal interphalangeal joint of right ring finger, sequela -S63245A Subluxation of distal interphalangeal joint of left ring finger, initial encounter -S63245D Subluxation of distal interphalangeal joint of left ring finger, subsequent encounter -S63245S Subluxation of distal interphalangeal joint of left ring finger, sequela -S63246A Subluxation of distal interphalangeal joint of right little finger, initial encounter -S63246D Subluxation of distal interphalangeal joint of right little finger, subsequent encounter -S63246S Subluxation of distal interphalangeal joint of right little finger, sequela -S63247A Subluxation of distal interphalangeal joint of left little finger, initial encounter -S63247D Subluxation of distal interphalangeal joint of left little finger, subsequent encounter -S63247S Subluxation of distal interphalangeal joint of left little finger, sequela -S63248A Subluxation of distal interphalangeal joint of other finger, initial encounter -S63248D Subluxation of distal interphalangeal joint of other finger, subsequent encounter -S63248S Subluxation of distal interphalangeal joint of other finger, sequela -S63249A Subluxation of distal interphalangeal joint of unspecified finger, initial encounter -S63249D Subluxation of distal interphalangeal joint of unspecified finger, subsequent encounter -S63249S Subluxation of distal interphalangeal joint of unspecified finger, sequela -S63250A Unspecified dislocation of right index finger, initial encounter -S63250D Unspecified dislocation of right index finger, subsequent encounter -S63250S Unspecified dislocation of right index finger, sequela -S63251A Unspecified dislocation of left index finger, initial encounter -S63251D Unspecified dislocation of left index finger, subsequent encounter -S63251S Unspecified dislocation of left index finger, sequela -S63252A Unspecified dislocation of right middle finger, initial encounter -S63252D Unspecified dislocation of right middle finger, subsequent encounter -S63252S Unspecified dislocation of right middle finger, sequela -S63253A Unspecified dislocation of left middle finger, initial encounter -S63253D Unspecified dislocation of left middle finger, subsequent encounter -S63253S Unspecified dislocation of left middle finger, sequela -S63254A Unspecified dislocation of right ring finger, initial encounter -S63254D Unspecified dislocation of right ring finger, subsequent encounter -S63254S Unspecified dislocation of right ring finger, sequela -S63255A Unspecified dislocation of left ring finger, initial encounter -S63255D Unspecified dislocation of left ring finger, subsequent encounter -S63255S Unspecified dislocation of left ring finger, sequela -S63256A Unspecified dislocation of right little finger, initial encounter -S63256D Unspecified dislocation of right little finger, subsequent encounter -S63256S Unspecified dislocation of right little finger, sequela -S63257A Unspecified dislocation of left little finger, initial encounter -S63257D Unspecified dislocation of left little finger, subsequent encounter -S63257S Unspecified dislocation of left little finger, sequela -S63258A Unspecified dislocation of other finger, initial encounter -S63258D Unspecified dislocation of other finger, subsequent encounter -S63258S Unspecified dislocation of other finger, sequela -S63259A Unspecified dislocation of unspecified finger, initial encounter -S63259D Unspecified dislocation of unspecified finger, subsequent encounter -S63259S Unspecified dislocation of unspecified finger, sequela -S63260A Dislocation of metacarpophalangeal joint of right index finger, initial encounter -S63260D Dislocation of metacarpophalangeal joint of right index finger, subsequent encounter -S63260S Dislocation of metacarpophalangeal joint of right index finger, sequela -S63261A Dislocation of metacarpophalangeal joint of left index finger, initial encounter -S63261D Dislocation of metacarpophalangeal joint of left index finger, subsequent encounter -S63261S Dislocation of metacarpophalangeal joint of left index finger, sequela -S63262A Dislocation of metacarpophalangeal joint of right middle finger, initial encounter -S63262D Dislocation of metacarpophalangeal joint of right middle finger, subsequent encounter -S63262S Dislocation of metacarpophalangeal joint of right middle finger, sequela -S63263A Dislocation of metacarpophalangeal joint of left middle finger, initial encounter -S63263D Dislocation of metacarpophalangeal joint of left middle finger, subsequent encounter -S63263S Dislocation of metacarpophalangeal joint of left middle finger, sequela -S63264A Dislocation of metacarpophalangeal joint of right ring finger, initial encounter -S63264D Dislocation of metacarpophalangeal joint of right ring finger, subsequent encounter -S63264S Dislocation of metacarpophalangeal joint of right ring finger, sequela -S63265A Dislocation of metacarpophalangeal joint of left ring finger, initial encounter -S63265D Dislocation of metacarpophalangeal joint of left ring finger, subsequent encounter -S63265S Dislocation of metacarpophalangeal joint of left ring finger, sequela -S63266A Dislocation of metacarpophalangeal joint of right little finger, initial encounter -S63266D Dislocation of metacarpophalangeal joint of right little finger, subsequent encounter -S63266S Dislocation of metacarpophalangeal joint of right little finger, sequela -S63267A Dislocation of metacarpophalangeal joint of left little finger, initial encounter -S63267D Dislocation of metacarpophalangeal joint of left little finger, subsequent encounter -S63267S Dislocation of metacarpophalangeal joint of left little finger, sequela -S63268A Dislocation of metacarpophalangeal joint of other finger, initial encounter -S63268D Dislocation of metacarpophalangeal joint of other finger, subsequent encounter -S63268S Dislocation of metacarpophalangeal joint of other finger, sequela -S63269A Dislocation of metacarpophalangeal joint of unspecified finger, initial encounter -S63269D Dislocation of metacarpophalangeal joint of unspecified finger, subsequent encounter -S63269S Dislocation of metacarpophalangeal joint of unspecified finger, sequela -S63270A Dislocation of unspecified interphalangeal joint of right index finger, initial encounter -S63270D Dislocation of unspecified interphalangeal joint of right index finger, subsequent encounter -S63270S Dislocation of unspecified interphalangeal joint of right index finger, sequela -S63271A Dislocation of unspecified interphalangeal joint of left index finger, initial encounter -S63271D Dislocation of unspecified interphalangeal joint of left index finger, subsequent encounter -S63271S Dislocation of unspecified interphalangeal joint of left index finger, sequela -S63272A Dislocation of unspecified interphalangeal joint of right middle finger, initial encounter -S63272D Dislocation of unspecified interphalangeal joint of right middle finger, subsequent encounter -S63272S Dislocation of unspecified interphalangeal joint of right middle finger, sequela -S63273A Dislocation of unspecified interphalangeal joint of left middle finger, initial encounter -S63273D Dislocation of unspecified interphalangeal joint of left middle finger, subsequent encounter -S63273S Dislocation of unspecified interphalangeal joint of left middle finger, sequela -S63274A Dislocation of unspecified interphalangeal joint of right ring finger, initial encounter -S63274D Dislocation of unspecified interphalangeal joint of right ring finger, subsequent encounter -S63274S Dislocation of unspecified interphalangeal joint of right ring finger, sequela -S63275A Dislocation of unspecified interphalangeal joint of left ring finger, initial encounter -S63275D Dislocation of unspecified interphalangeal joint of left ring finger, subsequent encounter -S63275S Dislocation of unspecified interphalangeal joint of left ring finger, sequela -S63276A Dislocation of unspecified interphalangeal joint of right little finger, initial encounter -S63276D Dislocation of unspecified interphalangeal joint of right little finger, subsequent encounter -S63276S Dislocation of unspecified interphalangeal joint of right little finger, sequela -S63277A Dislocation of unspecified interphalangeal joint of left little finger, initial encounter -S63277D Dislocation of unspecified interphalangeal joint of left little finger, subsequent encounter -S63277S Dislocation of unspecified interphalangeal joint of left little finger, sequela -S63278A Dislocation of unspecified interphalangeal joint of other finger, initial encounter -S63278D Dislocation of unspecified interphalangeal joint of other finger, subsequent encounter -S63278S Dislocation of unspecified interphalangeal joint of other finger, sequela -S63279A Dislocation of unspecified interphalangeal joint of unspecified finger, initial encounter -S63279D Dislocation of unspecified interphalangeal joint of unspecified finger, subsequent encounter -S63279S Dislocation of unspecified interphalangeal joint of unspecified finger, sequela -S63280A Dislocation of proximal interphalangeal joint of right index finger, initial encounter -S63280D Dislocation of proximal interphalangeal joint of right index finger, subsequent encounter -S63280S Dislocation of proximal interphalangeal joint of right index finger, sequela -S63281A Dislocation of proximal interphalangeal joint of left index finger, initial encounter -S63281D Dislocation of proximal interphalangeal joint of left index finger, subsequent encounter -S63281S Dislocation of proximal interphalangeal joint of left index finger, sequela -S63282A Dislocation of proximal interphalangeal joint of right middle finger, initial encounter -S63282D Dislocation of proximal interphalangeal joint of right middle finger, subsequent encounter -S63282S Dislocation of proximal interphalangeal joint of right middle finger, sequela -S63283A Dislocation of proximal interphalangeal joint of left middle finger, initial encounter -S63283D Dislocation of proximal interphalangeal joint of left middle finger, subsequent encounter -S63283S Dislocation of proximal interphalangeal joint of left middle finger, sequela -S63284A Dislocation of proximal interphalangeal joint of right ring finger, initial encounter -S63284D Dislocation of proximal interphalangeal joint of right ring finger, subsequent encounter -S63284S Dislocation of proximal interphalangeal joint of right ring finger, sequela -S63285A Dislocation of proximal interphalangeal joint of left ring finger, initial encounter -S63285D Dislocation of proximal interphalangeal joint of left ring finger, subsequent encounter -S63285S Dislocation of proximal interphalangeal joint of left ring finger, sequela -S63286A Dislocation of proximal interphalangeal joint of right little finger, initial encounter -S63286D Dislocation of proximal interphalangeal joint of right little finger, subsequent encounter -S63286S Dislocation of proximal interphalangeal joint of right little finger, sequela -S63287A Dislocation of proximal interphalangeal joint of left little finger, initial encounter -S63287D Dislocation of proximal interphalangeal joint of left little finger, subsequent encounter -S63287S Dislocation of proximal interphalangeal joint of left little finger, sequela -S63288A Dislocation of proximal interphalangeal joint of other finger, initial encounter -S63288D Dislocation of proximal interphalangeal joint of other finger, subsequent encounter -S63288S Dislocation of proximal interphalangeal joint of other finger, sequela -S63289A Dislocation of proximal interphalangeal joint of unspecified finger, initial encounter -S63289D Dislocation of proximal interphalangeal joint of unspecified finger, subsequent encounter -S63289S Dislocation of proximal interphalangeal joint of unspecified finger, sequela -S63290A Dislocation of distal interphalangeal joint of right index finger, initial encounter -S63290D Dislocation of distal interphalangeal joint of right index finger, subsequent encounter -S63290S Dislocation of distal interphalangeal joint of right index finger, sequela -S63291A Dislocation of distal interphalangeal joint of left index finger, initial encounter -S63291D Dislocation of distal interphalangeal joint of left index finger, subsequent encounter -S63291S Dislocation of distal interphalangeal joint of left index finger, sequela -S63292A Dislocation of distal interphalangeal joint of right middle finger, initial encounter -S63292D Dislocation of distal interphalangeal joint of right middle finger, subsequent encounter -S63292S Dislocation of distal interphalangeal joint of right middle finger, sequela -S63293A Dislocation of distal interphalangeal joint of left middle finger, initial encounter -S63293D Dislocation of distal interphalangeal joint of left middle finger, subsequent encounter -S63293S Dislocation of distal interphalangeal joint of left middle finger, sequela -S63294A Dislocation of distal interphalangeal joint of right ring finger, initial encounter -S63294D Dislocation of distal interphalangeal joint of right ring finger, subsequent encounter -S63294S Dislocation of distal interphalangeal joint of right ring finger, sequela -S63295A Dislocation of distal interphalangeal joint of left ring finger, initial encounter -S63295D Dislocation of distal interphalangeal joint of left ring finger, subsequent encounter -S63295S Dislocation of distal interphalangeal joint of left ring finger, sequela -S63296A Dislocation of distal interphalangeal joint of right little finger, initial encounter -S63296D Dislocation of distal interphalangeal joint of right little finger, subsequent encounter -S63296S Dislocation of distal interphalangeal joint of right little finger, sequela -S63297A Dislocation of distal interphalangeal joint of left little finger, initial encounter -S63297D Dislocation of distal interphalangeal joint of left little finger, subsequent encounter -S63297S Dislocation of distal interphalangeal joint of left little finger, sequela -S63298A Dislocation of distal interphalangeal joint of other finger, initial encounter -S63298D Dislocation of distal interphalangeal joint of other finger, subsequent encounter -S63298S Dislocation of distal interphalangeal joint of other finger, sequela -S63299A Dislocation of distal interphalangeal joint of unspecified finger, initial encounter -S63299D Dislocation of distal interphalangeal joint of unspecified finger, subsequent encounter -S63299S Dislocation of distal interphalangeal joint of unspecified finger, sequela -S63301A Traumatic rupture of unspecified ligament of right wrist, initial encounter -S63301D Traumatic rupture of unspecified ligament of right wrist, subsequent encounter -S63301S Traumatic rupture of unspecified ligament of right wrist, sequela -S63302A Traumatic rupture of unspecified ligament of left wrist, initial encounter -S63302D Traumatic rupture of unspecified ligament of left wrist, subsequent encounter -S63302S Traumatic rupture of unspecified ligament of left wrist, sequela -S63309A Traumatic rupture of unspecified ligament of unspecified wrist, initial encounter -S63309D Traumatic rupture of unspecified ligament of unspecified wrist, subsequent encounter -S63309S Traumatic rupture of unspecified ligament of unspecified wrist, sequela -S63311A Traumatic rupture of collateral ligament of right wrist, initial encounter -S63311D Traumatic rupture of collateral ligament of right wrist, subsequent encounter -S63311S Traumatic rupture of collateral ligament of right wrist, sequela -S63312A Traumatic rupture of collateral ligament of left wrist, initial encounter -S63312D Traumatic rupture of collateral ligament of left wrist, subsequent encounter -S63312S Traumatic rupture of collateral ligament of left wrist, sequela -S63319A Traumatic rupture of collateral ligament of unspecified wrist, initial encounter -S63319D Traumatic rupture of collateral ligament of unspecified wrist, subsequent encounter -S63319S Traumatic rupture of collateral ligament of unspecified wrist, sequela -S63321A Traumatic rupture of right radiocarpal ligament, initial encounter -S63321D Traumatic rupture of right radiocarpal ligament, subsequent encounter -S63321S Traumatic rupture of right radiocarpal ligament, sequela -S63322A Traumatic rupture of left radiocarpal ligament, initial encounter -S63322D Traumatic rupture of left radiocarpal ligament, subsequent encounter -S63322S Traumatic rupture of left radiocarpal ligament, sequela -S63329A Traumatic rupture of unspecified radiocarpal ligament, initial encounter -S63329D Traumatic rupture of unspecified radiocarpal ligament, subsequent encounter -S63329S Traumatic rupture of unspecified radiocarpal ligament, sequela -S63331A Traumatic rupture of right ulnocarpal (palmar) ligament, initial encounter -S63331D Traumatic rupture of right ulnocarpal (palmar) ligament, subsequent encounter -S63331S Traumatic rupture of right ulnocarpal (palmar) ligament, sequela -S63332A Traumatic rupture of left ulnocarpal (palmar) ligament, initial encounter -S63332D Traumatic rupture of left ulnocarpal (palmar) ligament, subsequent encounter -S63332S Traumatic rupture of left ulnocarpal (palmar) ligament, sequela -S63339A Traumatic rupture of unspecified ulnocarpal (palmar) ligament, initial encounter -S63339D Traumatic rupture of unspecified ulnocarpal (palmar) ligament, subsequent encounter -S63339S Traumatic rupture of unspecified ulnocarpal (palmar) ligament, sequela -S63391A Traumatic rupture of other ligament of right wrist, initial encounter -S63391D Traumatic rupture of other ligament of right wrist, subsequent encounter -S63391S Traumatic rupture of other ligament of right wrist, sequela -S63392A Traumatic rupture of other ligament of left wrist, initial encounter -S63392D Traumatic rupture of other ligament of left wrist, subsequent encounter -S63392S Traumatic rupture of other ligament of left wrist, sequela -S63399A Traumatic rupture of other ligament of unspecified wrist, initial encounter -S63399D Traumatic rupture of other ligament of unspecified wrist, subsequent encounter -S63399S Traumatic rupture of other ligament of unspecified wrist, sequela -S63400A Traumatic rupture of unspecified ligament of right index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63400D Traumatic rupture of unspecified ligament of right index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63400S Traumatic rupture of unspecified ligament of right index finger at metacarpophalangeal and interphalangeal joint, sequela -S63401A Traumatic rupture of unspecified ligament of left index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63401D Traumatic rupture of unspecified ligament of left index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63401S Traumatic rupture of unspecified ligament of left index finger at metacarpophalangeal and interphalangeal joint, sequela -S63402A Traumatic rupture of unspecified ligament of right middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63402D Traumatic rupture of unspecified ligament of right middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63402S Traumatic rupture of unspecified ligament of right middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63403A Traumatic rupture of unspecified ligament of left middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63403D Traumatic rupture of unspecified ligament of left middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63403S Traumatic rupture of unspecified ligament of left middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63404A Traumatic rupture of unspecified ligament of right ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63404D Traumatic rupture of unspecified ligament of right ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63404S Traumatic rupture of unspecified ligament of right ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63405A Traumatic rupture of unspecified ligament of left ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63405D Traumatic rupture of unspecified ligament of left ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63405S Traumatic rupture of unspecified ligament of left ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63406A Traumatic rupture of unspecified ligament of right little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63406D Traumatic rupture of unspecified ligament of right little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63406S Traumatic rupture of unspecified ligament of right little finger at metacarpophalangeal and interphalangeal joint, sequela -S63407A Traumatic rupture of unspecified ligament of left little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63407D Traumatic rupture of unspecified ligament of left little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63407S Traumatic rupture of unspecified ligament of left little finger at metacarpophalangeal and interphalangeal joint, sequela -S63408A Traumatic rupture of unspecified ligament of other finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63408D Traumatic rupture of unspecified ligament of other finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63408S Traumatic rupture of unspecified ligament of other finger at metacarpophalangeal and interphalangeal joint, sequela -S63409A Traumatic rupture of unspecified ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63409D Traumatic rupture of unspecified ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63409S Traumatic rupture of unspecified ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, sequela -S63410A Traumatic rupture of collateral ligament of right index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63410D Traumatic rupture of collateral ligament of right index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63410S Traumatic rupture of collateral ligament of right index finger at metacarpophalangeal and interphalangeal joint, sequela -S63411A Traumatic rupture of collateral ligament of left index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63411D Traumatic rupture of collateral ligament of left index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63411S Traumatic rupture of collateral ligament of left index finger at metacarpophalangeal and interphalangeal joint, sequela -S63412A Traumatic rupture of collateral ligament of right middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63412D Traumatic rupture of collateral ligament of right middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63412S Traumatic rupture of collateral ligament of right middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63413A Traumatic rupture of collateral ligament of left middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63413D Traumatic rupture of collateral ligament of left middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63413S Traumatic rupture of collateral ligament of left middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63414A Traumatic rupture of collateral ligament of right ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63414D Traumatic rupture of collateral ligament of right ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63414S Traumatic rupture of collateral ligament of right ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63415A Traumatic rupture of collateral ligament of left ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63415D Traumatic rupture of collateral ligament of left ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63415S Traumatic rupture of collateral ligament of left ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63416A Traumatic rupture of collateral ligament of right little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63416D Traumatic rupture of collateral ligament of right little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63416S Traumatic rupture of collateral ligament of right little finger at metacarpophalangeal and interphalangeal joint, sequela -S63417A Traumatic rupture of collateral ligament of left little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63417D Traumatic rupture of collateral ligament of left little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63417S Traumatic rupture of collateral ligament of left little finger at metacarpophalangeal and interphalangeal joint, sequela -S63418A Traumatic rupture of collateral ligament of other finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63418D Traumatic rupture of collateral ligament of other finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63418S Traumatic rupture of collateral ligament of other finger at metacarpophalangeal and interphalangeal joint, sequela -S63419A Traumatic rupture of collateral ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63419D Traumatic rupture of collateral ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63419S Traumatic rupture of collateral ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, sequela -S63420A Traumatic rupture of palmar ligament of right index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63420D Traumatic rupture of palmar ligament of right index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63420S Traumatic rupture of palmar ligament of right index finger at metacarpophalangeal and interphalangeal joint, sequela -S63421A Traumatic rupture of palmar ligament of left index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63421D Traumatic rupture of palmar ligament of left index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63421S Traumatic rupture of palmar ligament of left index finger at metacarpophalangeal and interphalangeal joint, sequela -S63422A Traumatic rupture of palmar ligament of right middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63422D Traumatic rupture of palmar ligament of right middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63422S Traumatic rupture of palmar ligament of right middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63423A Traumatic rupture of palmar ligament of left middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63423D Traumatic rupture of palmar ligament of left middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63423S Traumatic rupture of palmar ligament of left middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63424A Traumatic rupture of palmar ligament of right ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63424D Traumatic rupture of palmar ligament of right ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63424S Traumatic rupture of palmar ligament of right ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63425A Traumatic rupture of palmar ligament of left ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63425D Traumatic rupture of palmar ligament of left ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63425S Traumatic rupture of palmar ligament of left ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63426A Traumatic rupture of palmar ligament of right little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63426D Traumatic rupture of palmar ligament of right little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63426S Traumatic rupture of palmar ligament of right little finger at metacarpophalangeal and interphalangeal joint, sequela -S63427A Traumatic rupture of palmar ligament of left little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63427D Traumatic rupture of palmar ligament of left little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63427S Traumatic rupture of palmar ligament of left little finger at metacarpophalangeal and interphalangeal joint, sequela -S63428A Traumatic rupture of palmar ligament of other finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63428D Traumatic rupture of palmar ligament of other finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63428S Traumatic rupture of palmar ligament of other finger at metacarpophalangeal and interphalangeal joint, sequela -S63429A Traumatic rupture of palmar ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63429D Traumatic rupture of palmar ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63429S Traumatic rupture of palmar ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, sequela -S63430A Traumatic rupture of volar plate of right index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63430D Traumatic rupture of volar plate of right index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63430S Traumatic rupture of volar plate of right index finger at metacarpophalangeal and interphalangeal joint, sequela -S63431A Traumatic rupture of volar plate of left index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63431D Traumatic rupture of volar plate of left index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63431S Traumatic rupture of volar plate of left index finger at metacarpophalangeal and interphalangeal joint, sequela -S63432A Traumatic rupture of volar plate of right middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63432D Traumatic rupture of volar plate of right middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63432S Traumatic rupture of volar plate of right middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63433A Traumatic rupture of volar plate of left middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63433D Traumatic rupture of volar plate of left middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63433S Traumatic rupture of volar plate of left middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63434A Traumatic rupture of volar plate of right ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63434D Traumatic rupture of volar plate of right ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63434S Traumatic rupture of volar plate of right ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63435A Traumatic rupture of volar plate of left ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63435D Traumatic rupture of volar plate of left ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63435S Traumatic rupture of volar plate of left ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63436A Traumatic rupture of volar plate of right little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63436D Traumatic rupture of volar plate of right little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63436S Traumatic rupture of volar plate of right little finger at metacarpophalangeal and interphalangeal joint, sequela -S63437A Traumatic rupture of volar plate of left little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63437D Traumatic rupture of volar plate of left little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63437S Traumatic rupture of volar plate of left little finger at metacarpophalangeal and interphalangeal joint, sequela -S63438A Traumatic rupture of volar plate of other finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63438D Traumatic rupture of volar plate of other finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63438S Traumatic rupture of volar plate of other finger at metacarpophalangeal and interphalangeal joint, sequela -S63439A Traumatic rupture of volar plate of unspecified finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63439D Traumatic rupture of volar plate of unspecified finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63439S Traumatic rupture of volar plate of unspecified finger at metacarpophalangeal and interphalangeal joint, sequela -S63490A Traumatic rupture of other ligament of right index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63490D Traumatic rupture of other ligament of right index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63490S Traumatic rupture of other ligament of right index finger at metacarpophalangeal and interphalangeal joint, sequela -S63491A Traumatic rupture of other ligament of left index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63491D Traumatic rupture of other ligament of left index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63491S Traumatic rupture of other ligament of left index finger at metacarpophalangeal and interphalangeal joint, sequela -S63492A Traumatic rupture of other ligament of right middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63492D Traumatic rupture of other ligament of right middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63492S Traumatic rupture of other ligament of right middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63493A Traumatic rupture of other ligament of left middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63493D Traumatic rupture of other ligament of left middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63493S Traumatic rupture of other ligament of left middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63494A Traumatic rupture of other ligament of right ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63494D Traumatic rupture of other ligament of right ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63494S Traumatic rupture of other ligament of right ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63495A Traumatic rupture of other ligament of left ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63495D Traumatic rupture of other ligament of left ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63495S Traumatic rupture of other ligament of left ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63496A Traumatic rupture of other ligament of right little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63496D Traumatic rupture of other ligament of right little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63496S Traumatic rupture of other ligament of right little finger at metacarpophalangeal and interphalangeal joint, sequela -S63497A Traumatic rupture of other ligament of left little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63497D Traumatic rupture of other ligament of left little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63497S Traumatic rupture of other ligament of left little finger at metacarpophalangeal and interphalangeal joint, sequela -S63498A Traumatic rupture of other ligament of other finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63498D Traumatic rupture of other ligament of other finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63498S Traumatic rupture of other ligament of other finger at metacarpophalangeal and interphalangeal joint, sequela -S63499A Traumatic rupture of other ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63499D Traumatic rupture of other ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63499S Traumatic rupture of other ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, sequela -S63501A Unspecified sprain of right wrist, initial encounter -S63501D Unspecified sprain of right wrist, subsequent encounter -S63501S Unspecified sprain of right wrist, sequela -S63502A Unspecified sprain of left wrist, initial encounter -S63502D Unspecified sprain of left wrist, subsequent encounter -S63502S Unspecified sprain of left wrist, sequela -S63509A Unspecified sprain of unspecified wrist, initial encounter -S63509D Unspecified sprain of unspecified wrist, subsequent encounter -S63509S Unspecified sprain of unspecified wrist, sequela -S63511A Sprain of carpal joint of right wrist, initial encounter -S63511D Sprain of carpal joint of right wrist, subsequent encounter -S63511S Sprain of carpal joint of right wrist, sequela -S63512A Sprain of carpal joint of left wrist, initial encounter -S63512D Sprain of carpal joint of left wrist, subsequent encounter -S63512S Sprain of carpal joint of left wrist, sequela -S63519A Sprain of carpal joint of unspecified wrist, initial encounter -S63519D Sprain of carpal joint of unspecified wrist, subsequent encounter -S63519S Sprain of carpal joint of unspecified wrist, sequela -S63521A Sprain of radiocarpal joint of right wrist, initial encounter -S63521D Sprain of radiocarpal joint of right wrist, subsequent encounter -S63521S Sprain of radiocarpal joint of right wrist, sequela -S63522A Sprain of radiocarpal joint of left wrist, initial encounter -S63522D Sprain of radiocarpal joint of left wrist, subsequent encounter -S63522S Sprain of radiocarpal joint of left wrist, sequela -S63529A Sprain of radiocarpal joint of unspecified wrist, initial encounter -S63529D Sprain of radiocarpal joint of unspecified wrist, subsequent encounter -S63529S Sprain of radiocarpal joint of unspecified wrist, sequela -S63591A Other specified sprain of right wrist, initial encounter -S63591D Other specified sprain of right wrist, subsequent encounter -S63591S Other specified sprain of right wrist, sequela -S63592A Other specified sprain of left wrist, initial encounter -S63592D Other specified sprain of left wrist, subsequent encounter -S63592S Other specified sprain of left wrist, sequela -S63599A Other specified sprain of unspecified wrist, initial encounter -S63599D Other specified sprain of unspecified wrist, subsequent encounter -S63599S Other specified sprain of unspecified wrist, sequela -S63601A Unspecified sprain of right thumb, initial encounter -S63601D Unspecified sprain of right thumb, subsequent encounter -S63601S Unspecified sprain of right thumb, sequela -S63602A Unspecified sprain of left thumb, initial encounter -S63602D Unspecified sprain of left thumb, subsequent encounter -S63602S Unspecified sprain of left thumb, sequela -S63609A Unspecified sprain of unspecified thumb, initial encounter -S63609D Unspecified sprain of unspecified thumb, subsequent encounter -S63609S Unspecified sprain of unspecified thumb, sequela -S63610A Unspecified sprain of right index finger, initial encounter -S63610D Unspecified sprain of right index finger, subsequent encounter -S63610S Unspecified sprain of right index finger, sequela -S63611A Unspecified sprain of left index finger, initial encounter -S63611D Unspecified sprain of left index finger, subsequent encounter -S63611S Unspecified sprain of left index finger, sequela -S63612A Unspecified sprain of right middle finger, initial encounter -S63612D Unspecified sprain of right middle finger, subsequent encounter -S63612S Unspecified sprain of right middle finger, sequela -S63613A Unspecified sprain of left middle finger, initial encounter -S63613D Unspecified sprain of left middle finger, subsequent encounter -S63613S Unspecified sprain of left middle finger, sequela -S63614A Unspecified sprain of right ring finger, initial encounter -S63614D Unspecified sprain of right ring finger, subsequent encounter -S63614S Unspecified sprain of right ring finger, sequela -S63615A Unspecified sprain of left ring finger, initial encounter -S63615D Unspecified sprain of left ring finger, subsequent encounter -S63615S Unspecified sprain of left ring finger, sequela -S63616A Unspecified sprain of right little finger, initial encounter -S63616D Unspecified sprain of right little finger, subsequent encounter -S63616S Unspecified sprain of right little finger, sequela -S63617A Unspecified sprain of left little finger, initial encounter -S63617D Unspecified sprain of left little finger, subsequent encounter -S63617S Unspecified sprain of left little finger, sequela -S63618A Unspecified sprain of other finger, initial encounter -S63618D Unspecified sprain of other finger, subsequent encounter -S63618S Unspecified sprain of other finger, sequela -S63619A Unspecified sprain of unspecified finger, initial encounter -S63619D Unspecified sprain of unspecified finger, subsequent encounter -S63619S Unspecified sprain of unspecified finger, sequela -S63621A Sprain of interphalangeal joint of right thumb, initial encounter -S63621D Sprain of interphalangeal joint of right thumb, subsequent encounter -S63621S Sprain of interphalangeal joint of right thumb, sequela -S63622A Sprain of interphalangeal joint of left thumb, initial encounter -S63622D Sprain of interphalangeal joint of left thumb, subsequent encounter -S63622S Sprain of interphalangeal joint of left thumb, sequela -S63629A Sprain of interphalangeal joint of unspecified thumb, initial encounter -S63629D Sprain of interphalangeal joint of unspecified thumb, subsequent encounter -S63629S Sprain of interphalangeal joint of unspecified thumb, sequela -S63630A Sprain of interphalangeal joint of right index finger, initial encounter -S63630D Sprain of interphalangeal joint of right index finger, subsequent encounter -S63630S Sprain of interphalangeal joint of right index finger, sequela -S63631A Sprain of interphalangeal joint of left index finger, initial encounter -S63631D Sprain of interphalangeal joint of left index finger, subsequent encounter -S63631S Sprain of interphalangeal joint of left index finger, sequela -S63632A Sprain of interphalangeal joint of right middle finger, initial encounter -S63632D Sprain of interphalangeal joint of right middle finger, subsequent encounter -S63632S Sprain of interphalangeal joint of right middle finger, sequela -S63633A Sprain of interphalangeal joint of left middle finger, initial encounter -S63633D Sprain of interphalangeal joint of left middle finger, subsequent encounter -S63633S Sprain of interphalangeal joint of left middle finger, sequela -S63634A Sprain of interphalangeal joint of right ring finger, initial encounter -S63634D Sprain of interphalangeal joint of right ring finger, subsequent encounter -S63634S Sprain of interphalangeal joint of right ring finger, sequela -S63635A Sprain of interphalangeal joint of left ring finger, initial encounter -S63635D Sprain of interphalangeal joint of left ring finger, subsequent encounter -S63635S Sprain of interphalangeal joint of left ring finger, sequela -S63636A Sprain of interphalangeal joint of right little finger, initial encounter -S63636D Sprain of interphalangeal joint of right little finger, subsequent encounter -S63636S Sprain of interphalangeal joint of right little finger, sequela -S63637A Sprain of interphalangeal joint of left little finger, initial encounter -S63637D Sprain of interphalangeal joint of left little finger, subsequent encounter -S63637S Sprain of interphalangeal joint of left little finger, sequela -S63638A Sprain of interphalangeal joint of other finger, initial encounter -S63638D Sprain of interphalangeal joint of other finger, subsequent encounter -S63638S Sprain of interphalangeal joint of other finger, sequela -S63639A Sprain of interphalangeal joint of unspecified finger, initial encounter -S63639D Sprain of interphalangeal joint of unspecified finger, subsequent encounter -S63639S Sprain of interphalangeal joint of unspecified finger, sequela -S63641A Sprain of metacarpophalangeal joint of right thumb, initial encounter -S63641D Sprain of metacarpophalangeal joint of right thumb, subsequent encounter -S63641S Sprain of metacarpophalangeal joint of right thumb, sequela -S63642A Sprain of metacarpophalangeal joint of left thumb, initial encounter -S63642D Sprain of metacarpophalangeal joint of left thumb, subsequent encounter -S63642S Sprain of metacarpophalangeal joint of left thumb, sequela -S63649A Sprain of metacarpophalangeal joint of unspecified thumb, initial encounter -S63649D Sprain of metacarpophalangeal joint of unspecified thumb, subsequent encounter -S63649S Sprain of metacarpophalangeal joint of unspecified thumb, sequela -S63650A Sprain of metacarpophalangeal joint of right index finger, initial encounter -S63650D Sprain of metacarpophalangeal joint of right index finger, subsequent encounter -S63650S Sprain of metacarpophalangeal joint of right index finger, sequela -S63651A Sprain of metacarpophalangeal joint of left index finger, initial encounter -S63651D Sprain of metacarpophalangeal joint of left index finger, subsequent encounter -S63651S Sprain of metacarpophalangeal joint of left index finger, sequela -S63652A Sprain of metacarpophalangeal joint of right middle finger, initial encounter -S63652D Sprain of metacarpophalangeal joint of right middle finger, subsequent encounter -S63652S Sprain of metacarpophalangeal joint of right middle finger, sequela -S63653A Sprain of metacarpophalangeal joint of left middle finger, initial encounter -S63653D Sprain of metacarpophalangeal joint of left middle finger, subsequent encounter -S63653S Sprain of metacarpophalangeal joint of left middle finger, sequela -S63654A Sprain of metacarpophalangeal joint of right ring finger, initial encounter -S63654D Sprain of metacarpophalangeal joint of right ring finger, subsequent encounter -S63654S Sprain of metacarpophalangeal joint of right ring finger, sequela -S63655A Sprain of metacarpophalangeal joint of left ring finger, initial encounter -S63655D Sprain of metacarpophalangeal joint of left ring finger, subsequent encounter -S63655S Sprain of metacarpophalangeal joint of left ring finger, sequela -S63656A Sprain of metacarpophalangeal joint of right little finger, initial encounter -S63656D Sprain of metacarpophalangeal joint of right little finger, subsequent encounter -S63656S Sprain of metacarpophalangeal joint of right little finger, sequela -S63657A Sprain of metacarpophalangeal joint of left little finger, initial encounter -S63657D Sprain of metacarpophalangeal joint of left little finger, subsequent encounter -S63657S Sprain of metacarpophalangeal joint of left little finger, sequela -S63658A Sprain of metacarpophalangeal joint of other finger, initial encounter -S63658D Sprain of metacarpophalangeal joint of other finger, subsequent encounter -S63658S Sprain of metacarpophalangeal joint of other finger, sequela -S63659A Sprain of metacarpophalangeal joint of unspecified finger, initial encounter -S63659D Sprain of metacarpophalangeal joint of unspecified finger, subsequent encounter -S63659S Sprain of metacarpophalangeal joint of unspecified finger, sequela -S63681A Other sprain of right thumb, initial encounter -S63681D Other sprain of right thumb, subsequent encounter -S63681S Other sprain of right thumb, sequela -S63682A Other sprain of left thumb, initial encounter -S63682D Other sprain of left thumb, subsequent encounter -S63682S Other sprain of left thumb, sequela -S63689A Other sprain of unspecified thumb, initial encounter -S63689D Other sprain of unspecified thumb, subsequent encounter -S63689S Other sprain of unspecified thumb, sequela -S63690A Other sprain of right index finger, initial encounter -S63690D Other sprain of right index finger, subsequent encounter -S63690S Other sprain of right index finger, sequela -S63691A Other sprain of left index finger, initial encounter -S63691D Other sprain of left index finger, subsequent encounter -S63691S Other sprain of left index finger, sequela -S63692A Other sprain of right middle finger, initial encounter -S63692D Other sprain of right middle finger, subsequent encounter -S63692S Other sprain of right middle finger, sequela -S63693A Other sprain of left middle finger, initial encounter -S63693D Other sprain of left middle finger, subsequent encounter -S63693S Other sprain of left middle finger, sequela -S63694A Other sprain of right ring finger, initial encounter -S63694D Other sprain of right ring finger, subsequent encounter -S63694S Other sprain of right ring finger, sequela -S63695A Other sprain of left ring finger, initial encounter -S63695D Other sprain of left ring finger, subsequent encounter -S63695S Other sprain of left ring finger, sequela -S63696A Other sprain of right little finger, initial encounter -S63696D Other sprain of right little finger, subsequent encounter -S63696S Other sprain of right little finger, sequela -S63697A Other sprain of left little finger, initial encounter -S63697D Other sprain of left little finger, subsequent encounter -S63697S Other sprain of left little finger, sequela -S63698A Other sprain of other finger, initial encounter -S63698D Other sprain of other finger, subsequent encounter -S63698S Other sprain of other finger, sequela -S63699A Other sprain of unspecified finger, initial encounter -S63699D Other sprain of unspecified finger, subsequent encounter -S63699S Other sprain of unspecified finger, sequela -S638X1A Sprain of other part of right wrist and hand, initial encounter -S638X1D Sprain of other part of right wrist and hand, subsequent encounter -S638X1S Sprain of other part of right wrist and hand, sequela -S638X2A Sprain of other part of left wrist and hand, initial encounter -S638X2D Sprain of other part of left wrist and hand, subsequent encounter -S638X2S Sprain of other part of left wrist and hand, sequela -S638X9A Sprain of other part of unspecified wrist and hand, initial encounter -S638X9D Sprain of other part of unspecified wrist and hand, subsequent encounter -S638X9S Sprain of other part of unspecified wrist and hand, sequela -S6390XA Sprain of unspecified part of unspecified wrist and hand, initial encounter -S6390XD Sprain of unspecified part of unspecified wrist and hand, subsequent encounter -S6390XS Sprain of unspecified part of unspecified wrist and hand, sequela -S6391XA Sprain of unspecified part of right wrist and hand, initial encounter -S6391XD Sprain of unspecified part of right wrist and hand, subsequent encounter -S6391XS Sprain of unspecified part of right wrist and hand, sequela -S6392XA Sprain of unspecified part of left wrist and hand, initial encounter -S6392XD Sprain of unspecified part of left wrist and hand, subsequent encounter -S6392XS Sprain of unspecified part of left wrist and hand, sequela -S6400XA Injury of ulnar nerve at wrist and hand level of unspecified arm, initial encounter -S6400XD Injury of ulnar nerve at wrist and hand level of unspecified arm, subsequent encounter -S6400XS Injury of ulnar nerve at wrist and hand level of unspecified arm, sequela -S6401XA Injury of ulnar nerve at wrist and hand level of right arm, initial encounter -S6401XD Injury of ulnar nerve at wrist and hand level of right arm, subsequent encounter -S6401XS Injury of ulnar nerve at wrist and hand level of right arm, sequela -S6402XA Injury of ulnar nerve at wrist and hand level of left arm, initial encounter -S6402XD Injury of ulnar nerve at wrist and hand level of left arm, subsequent encounter -S6402XS Injury of ulnar nerve at wrist and hand level of left arm, sequela -S6410XA Injury of median nerve at wrist and hand level of unspecified arm, initial encounter -S6410XD Injury of median nerve at wrist and hand level of unspecified arm, subsequent encounter -S6410XS Injury of median nerve at wrist and hand level of unspecified arm, sequela -S6411XA Injury of median nerve at wrist and hand level of right arm, initial encounter -S6411XD Injury of median nerve at wrist and hand level of right arm, subsequent encounter -S6411XS Injury of median nerve at wrist and hand level of right arm, sequela -S6412XA Injury of median nerve at wrist and hand level of left arm, initial encounter -S6412XD Injury of median nerve at wrist and hand level of left arm, subsequent encounter -S6412XS Injury of median nerve at wrist and hand level of left arm, sequela -S6420XA Injury of radial nerve at wrist and hand level of unspecified arm, initial encounter -S6420XD Injury of radial nerve at wrist and hand level of unspecified arm, subsequent encounter -S6420XS Injury of radial nerve at wrist and hand level of unspecified arm, sequela -S6421XA Injury of radial nerve at wrist and hand level of right arm, initial encounter -S6421XD Injury of radial nerve at wrist and hand level of right arm, subsequent encounter -S6421XS Injury of radial nerve at wrist and hand level of right arm, sequela -S6422XA Injury of radial nerve at wrist and hand level of left arm, initial encounter -S6422XD Injury of radial nerve at wrist and hand level of left arm, subsequent encounter -S6422XS Injury of radial nerve at wrist and hand level of left arm, sequela -S6430XA Injury of digital nerve of unspecified thumb, initial encounter -S6430XD Injury of digital nerve of unspecified thumb, subsequent encounter -S6430XS Injury of digital nerve of unspecified thumb, sequela -S6431XA Injury of digital nerve of right thumb, initial encounter -S6431XD Injury of digital nerve of right thumb, subsequent encounter -S6431XS Injury of digital nerve of right thumb, sequela -S6432XA Injury of digital nerve of left thumb, initial encounter -S6432XD Injury of digital nerve of left thumb, subsequent encounter -S6432XS Injury of digital nerve of left thumb, sequela -S6440XA Injury of digital nerve of unspecified finger, initial encounter -S6440XD Injury of digital nerve of unspecified finger, subsequent encounter -S6440XS Injury of digital nerve of unspecified finger, sequela -S64490A Injury of digital nerve of right index finger, initial encounter -S64490D Injury of digital nerve of right index finger, subsequent encounter -S64490S Injury of digital nerve of right index finger, sequela -S64491A Injury of digital nerve of left index finger, initial encounter -S64491D Injury of digital nerve of left index finger, subsequent encounter -S64491S Injury of digital nerve of left index finger, sequela -S64492A Injury of digital nerve of right middle finger, initial encounter -S64492D Injury of digital nerve of right middle finger, subsequent encounter -S64492S Injury of digital nerve of right middle finger, sequela -S64493A Injury of digital nerve of left middle finger, initial encounter -S64493D Injury of digital nerve of left middle finger, subsequent encounter -S64493S Injury of digital nerve of left middle finger, sequela -S64494A Injury of digital nerve of right ring finger, initial encounter -S64494D Injury of digital nerve of right ring finger, subsequent encounter -S64494S Injury of digital nerve of right ring finger, sequela -S64495A Injury of digital nerve of left ring finger, initial encounter -S64495D Injury of digital nerve of left ring finger, subsequent encounter -S64495S Injury of digital nerve of left ring finger, sequela -S64496A Injury of digital nerve of right little finger, initial encounter -S64496D Injury of digital nerve of right little finger, subsequent encounter -S64496S Injury of digital nerve of right little finger, sequela -S64497A Injury of digital nerve of left little finger, initial encounter -S64497D Injury of digital nerve of left little finger, subsequent encounter -S64497S Injury of digital nerve of left little finger, sequela -S64498A Injury of digital nerve of other finger, initial encounter -S64498D Injury of digital nerve of other finger, subsequent encounter -S64498S Injury of digital nerve of other finger, sequela -S648X1A Injury of other nerves at wrist and hand level of right arm, initial encounter -S648X1D Injury of other nerves at wrist and hand level of right arm, subsequent encounter -S648X1S Injury of other nerves at wrist and hand level of right arm, sequela -S648X2A Injury of other nerves at wrist and hand level of left arm, initial encounter -S648X2D Injury of other nerves at wrist and hand level of left arm, subsequent encounter -S648X2S Injury of other nerves at wrist and hand level of left arm, sequela -S648X9A Injury of other nerves at wrist and hand level of unspecified arm, initial encounter -S648X9D Injury of other nerves at wrist and hand level of unspecified arm, subsequent encounter -S648X9S Injury of other nerves at wrist and hand level of unspecified arm, sequela -S6490XA Injury of unspecified nerve at wrist and hand level of unspecified arm, initial encounter -S6490XD Injury of unspecified nerve at wrist and hand level of unspecified arm, subsequent encounter -S6490XS Injury of unspecified nerve at wrist and hand level of unspecified arm, sequela -S6491XA Injury of unspecified nerve at wrist and hand level of right arm, initial encounter -S6491XD Injury of unspecified nerve at wrist and hand level of right arm, subsequent encounter -S6491XS Injury of unspecified nerve at wrist and hand level of right arm, sequela -S6492XA Injury of unspecified nerve at wrist and hand level of left arm, initial encounter -S6492XD Injury of unspecified nerve at wrist and hand level of left arm, subsequent encounter -S6492XS Injury of unspecified nerve at wrist and hand level of left arm, sequela -S65001A Unspecified injury of ulnar artery at wrist and hand level of right arm, initial encounter -S65001D Unspecified injury of ulnar artery at wrist and hand level of right arm, subsequent encounter -S65001S Unspecified injury of ulnar artery at wrist and hand level of right arm, sequela -S65002A Unspecified injury of ulnar artery at wrist and hand level of left arm, initial encounter -S65002D Unspecified injury of ulnar artery at wrist and hand level of left arm, subsequent encounter -S65002S Unspecified injury of ulnar artery at wrist and hand level of left arm, sequela -S65009A Unspecified injury of ulnar artery at wrist and hand level of unspecified arm, initial encounter -S65009D Unspecified injury of ulnar artery at wrist and hand level of unspecified arm, subsequent encounter -S65009S Unspecified injury of ulnar artery at wrist and hand level of unspecified arm, sequela -S65011A Laceration of ulnar artery at wrist and hand level of right arm, initial encounter -S65011D Laceration of ulnar artery at wrist and hand level of right arm, subsequent encounter -S65011S Laceration of ulnar artery at wrist and hand level of right arm, sequela -S65012A Laceration of ulnar artery at wrist and hand level of left arm, initial encounter -S65012D Laceration of ulnar artery at wrist and hand level of left arm, subsequent encounter -S65012S Laceration of ulnar artery at wrist and hand level of left arm, sequela -S65019A Laceration of ulnar artery at wrist and hand level of unspecified arm, initial encounter -S65019D Laceration of ulnar artery at wrist and hand level of unspecified arm, subsequent encounter -S65019S Laceration of ulnar artery at wrist and hand level of unspecified arm, sequela -S65091A Other specified injury of ulnar artery at wrist and hand level of right arm, initial encounter -S65091D Other specified injury of ulnar artery at wrist and hand level of right arm, subsequent encounter -S65091S Other specified injury of ulnar artery at wrist and hand level of right arm, sequela -S65092A Other specified injury of ulnar artery at wrist and hand level of left arm, initial encounter -S65092D Other specified injury of ulnar artery at wrist and hand level of left arm, subsequent encounter -S65092S Other specified injury of ulnar artery at wrist and hand level of left arm, sequela -S65099A Other specified injury of ulnar artery at wrist and hand level of unspecified arm, initial encounter -S65099D Other specified injury of ulnar artery at wrist and hand level of unspecified arm, subsequent encounter -S65099S Other specified injury of ulnar artery at wrist and hand level of unspecified arm, sequela -S65101A Unspecified injury of radial artery at wrist and hand level of right arm, initial encounter -S65101D Unspecified injury of radial artery at wrist and hand level of right arm, subsequent encounter -S65101S Unspecified injury of radial artery at wrist and hand level of right arm, sequela -S65102A Unspecified injury of radial artery at wrist and hand level of left arm, initial encounter -S65102D Unspecified injury of radial artery at wrist and hand level of left arm, subsequent encounter -S65102S Unspecified injury of radial artery at wrist and hand level of left arm, sequela -S65109A Unspecified injury of radial artery at wrist and hand level of unspecified arm, initial encounter -S65109D Unspecified injury of radial artery at wrist and hand level of unspecified arm, subsequent encounter -S65109S Unspecified injury of radial artery at wrist and hand level of unspecified arm, sequela -S65111A Laceration of radial artery at wrist and hand level of right arm, initial encounter -S65111D Laceration of radial artery at wrist and hand level of right arm, subsequent encounter -S65111S Laceration of radial artery at wrist and hand level of right arm, sequela -S65112A Laceration of radial artery at wrist and hand level of left arm, initial encounter -S65112D Laceration of radial artery at wrist and hand level of left arm, subsequent encounter -S65112S Laceration of radial artery at wrist and hand level of left arm, sequela -S65119A Laceration of radial artery at wrist and hand level of unspecified arm, initial encounter -S65119D Laceration of radial artery at wrist and hand level of unspecified arm, subsequent encounter -S65119S Laceration of radial artery at wrist and hand level of unspecified arm, sequela -S65191A Other specified injury of radial artery at wrist and hand level of right arm, initial encounter -S65191D Other specified injury of radial artery at wrist and hand level of right arm, subsequent encounter -S65191S Other specified injury of radial artery at wrist and hand level of right arm, sequela -S65192A Other specified injury of radial artery at wrist and hand level of left arm, initial encounter -S65192D Other specified injury of radial artery at wrist and hand level of left arm, subsequent encounter -S65192S Other specified injury of radial artery at wrist and hand level of left arm, sequela -S65199A Other specified injury of radial artery at wrist and hand level of unspecified arm, initial encounter -S65199D Other specified injury of radial artery at wrist and hand level of unspecified arm, subsequent encounter -S65199S Other specified injury of radial artery at wrist and hand level of unspecified arm, sequela -S65201A Unspecified injury of superficial palmar arch of right hand, initial encounter -S65201D Unspecified injury of superficial palmar arch of right hand, subsequent encounter -S65201S Unspecified injury of superficial palmar arch of right hand, sequela -S65202A Unspecified injury of superficial palmar arch of left hand, initial encounter -S65202D Unspecified injury of superficial palmar arch of left hand, subsequent encounter -S65202S Unspecified injury of superficial palmar arch of left hand, sequela -S65209A Unspecified injury of superficial palmar arch of unspecified hand, initial encounter -S65209D Unspecified injury of superficial palmar arch of unspecified hand, subsequent encounter -S65209S Unspecified injury of superficial palmar arch of unspecified hand, sequela -S65211A Laceration of superficial palmar arch of right hand, initial encounter -S65211D Laceration of superficial palmar arch of right hand, subsequent encounter -S65211S Laceration of superficial palmar arch of right hand, sequela -S65212A Laceration of superficial palmar arch of left hand, initial encounter -S65212D Laceration of superficial palmar arch of left hand, subsequent encounter -S65212S Laceration of superficial palmar arch of left hand, sequela -S65219A Laceration of superficial palmar arch of unspecified hand, initial encounter -S65219D Laceration of superficial palmar arch of unspecified hand, subsequent encounter -S65219S Laceration of superficial palmar arch of unspecified hand, sequela -S65291A Other specified injury of superficial palmar arch of right hand, initial encounter -S65291D Other specified injury of superficial palmar arch of right hand, subsequent encounter -S65291S Other specified injury of superficial palmar arch of right hand, sequela -S65292A Other specified injury of superficial palmar arch of left hand, initial encounter -S65292D Other specified injury of superficial palmar arch of left hand, subsequent encounter -S65292S Other specified injury of superficial palmar arch of left hand, sequela -S65299A Other specified injury of superficial palmar arch of unspecified hand, initial encounter -S65299D Other specified injury of superficial palmar arch of unspecified hand, subsequent encounter -S65299S Other specified injury of superficial palmar arch of unspecified hand, sequela -S65301A Unspecified injury of deep palmar arch of right hand, initial encounter -S65301D Unspecified injury of deep palmar arch of right hand, subsequent encounter -S65301S Unspecified injury of deep palmar arch of right hand, sequela -S65302A Unspecified injury of deep palmar arch of left hand, initial encounter -S65302D Unspecified injury of deep palmar arch of left hand, subsequent encounter -S65302S Unspecified injury of deep palmar arch of left hand, sequela -S65309A Unspecified injury of deep palmar arch of unspecified hand, initial encounter -S65309D Unspecified injury of deep palmar arch of unspecified hand, subsequent encounter -S65309S Unspecified injury of deep palmar arch of unspecified hand, sequela -S65311A Laceration of deep palmar arch of right hand, initial encounter -S65311D Laceration of deep palmar arch of right hand, subsequent encounter -S65311S Laceration of deep palmar arch of right hand, sequela -S65312A Laceration of deep palmar arch of left hand, initial encounter -S65312D Laceration of deep palmar arch of left hand, subsequent encounter -S65312S Laceration of deep palmar arch of left hand, sequela -S65319A Laceration of deep palmar arch of unspecified hand, initial encounter -S65319D Laceration of deep palmar arch of unspecified hand, subsequent encounter -S65319S Laceration of deep palmar arch of unspecified hand, sequela -S65391A Other specified injury of deep palmar arch of right hand, initial encounter -S65391D Other specified injury of deep palmar arch of right hand, subsequent encounter -S65391S Other specified injury of deep palmar arch of right hand, sequela -S65392A Other specified injury of deep palmar arch of left hand, initial encounter -S65392D Other specified injury of deep palmar arch of left hand, subsequent encounter -S65392S Other specified injury of deep palmar arch of left hand, sequela -S65399A Other specified injury of deep palmar arch of unspecified hand, initial encounter -S65399D Other specified injury of deep palmar arch of unspecified hand, subsequent encounter -S65399S Other specified injury of deep palmar arch of unspecified hand, sequela -S65401A Unspecified injury of blood vessel of right thumb, initial encounter -S65401D Unspecified injury of blood vessel of right thumb, subsequent encounter -S65401S Unspecified injury of blood vessel of right thumb, sequela -S65402A Unspecified injury of blood vessel of left thumb, initial encounter -S65402D Unspecified injury of blood vessel of left thumb, subsequent encounter -S65402S Unspecified injury of blood vessel of left thumb, sequela -S65409A Unspecified injury of blood vessel of unspecified thumb, initial encounter -S65409D Unspecified injury of blood vessel of unspecified thumb, subsequent encounter -S65409S Unspecified injury of blood vessel of unspecified thumb, sequela -S65411A Laceration of blood vessel of right thumb, initial encounter -S65411D Laceration of blood vessel of right thumb, subsequent encounter -S65411S Laceration of blood vessel of right thumb, sequela -S65412A Laceration of blood vessel of left thumb, initial encounter -S65412D Laceration of blood vessel of left thumb, subsequent encounter -S65412S Laceration of blood vessel of left thumb, sequela -S65419A Laceration of blood vessel of unspecified thumb, initial encounter -S65419D Laceration of blood vessel of unspecified thumb, subsequent encounter -S65419S Laceration of blood vessel of unspecified thumb, sequela -S65491A Other specified injury of blood vessel of right thumb, initial encounter -S65491D Other specified injury of blood vessel of right thumb, subsequent encounter -S65491S Other specified injury of blood vessel of right thumb, sequela -S65492A Other specified injury of blood vessel of left thumb, initial encounter -S65492D Other specified injury of blood vessel of left thumb, subsequent encounter -S65492S Other specified injury of blood vessel of left thumb, sequela -S65499A Other specified injury of blood vessel of unspecified thumb, initial encounter -S65499D Other specified injury of blood vessel of unspecified thumb, subsequent encounter -S65499S Other specified injury of blood vessel of unspecified thumb, sequela -S65500A Unspecified injury of blood vessel of right index finger, initial encounter -S65500D Unspecified injury of blood vessel of right index finger, subsequent encounter -S65500S Unspecified injury of blood vessel of right index finger, sequela -S65501A Unspecified injury of blood vessel of left index finger, initial encounter -S65501D Unspecified injury of blood vessel of left index finger, subsequent encounter -S65501S Unspecified injury of blood vessel of left index finger, sequela -S65502A Unspecified injury of blood vessel of right middle finger, initial encounter -S65502D Unspecified injury of blood vessel of right middle finger, subsequent encounter -S65502S Unspecified injury of blood vessel of right middle finger, sequela -S65503A Unspecified injury of blood vessel of left middle finger, initial encounter -S65503D Unspecified injury of blood vessel of left middle finger, subsequent encounter -S65503S Unspecified injury of blood vessel of left middle finger, sequela -S65504A Unspecified injury of blood vessel of right ring finger, initial encounter -S65504D Unspecified injury of blood vessel of right ring finger, subsequent encounter -S65504S Unspecified injury of blood vessel of right ring finger, sequela -S65505A Unspecified injury of blood vessel of left ring finger, initial encounter -S65505D Unspecified injury of blood vessel of left ring finger, subsequent encounter -S65505S Unspecified injury of blood vessel of left ring finger, sequela -S65506A Unspecified injury of blood vessel of right little finger, initial encounter -S65506D Unspecified injury of blood vessel of right little finger, subsequent encounter -S65506S Unspecified injury of blood vessel of right little finger, sequela -S65507A Unspecified injury of blood vessel of left little finger, initial encounter -S65507D Unspecified injury of blood vessel of left little finger, subsequent encounter -S65507S Unspecified injury of blood vessel of left little finger, sequela -S65508A Unspecified injury of blood vessel of other finger, initial encounter -S65508D Unspecified injury of blood vessel of other finger, subsequent encounter -S65508S Unspecified injury of blood vessel of other finger, sequela -S65509A Unspecified injury of blood vessel of unspecified finger, initial encounter -S65509D Unspecified injury of blood vessel of unspecified finger, subsequent encounter -S65509S Unspecified injury of blood vessel of unspecified finger, sequela -S65510A Laceration of blood vessel of right index finger, initial encounter -S65510D Laceration of blood vessel of right index finger, subsequent encounter -S65510S Laceration of blood vessel of right index finger, sequela -S65511A Laceration of blood vessel of left index finger, initial encounter -S65511D Laceration of blood vessel of left index finger, subsequent encounter -S65511S Laceration of blood vessel of left index finger, sequela -S65512A Laceration of blood vessel of right middle finger, initial encounter -S65512D Laceration of blood vessel of right middle finger, subsequent encounter -S65512S Laceration of blood vessel of right middle finger, sequela -S65513A Laceration of blood vessel of left middle finger, initial encounter -S65513D Laceration of blood vessel of left middle finger, subsequent encounter -S65513S Laceration of blood vessel of left middle finger, sequela -S65514A Laceration of blood vessel of right ring finger, initial encounter -S65514D Laceration of blood vessel of right ring finger, subsequent encounter -S65514S Laceration of blood vessel of right ring finger, sequela -S65515A Laceration of blood vessel of left ring finger, initial encounter -S65515D Laceration of blood vessel of left ring finger, subsequent encounter -S65515S Laceration of blood vessel of left ring finger, sequela -S65516A Laceration of blood vessel of right little finger, initial encounter -S65516D Laceration of blood vessel of right little finger, subsequent encounter -S65516S Laceration of blood vessel of right little finger, sequela -S65517A Laceration of blood vessel of left little finger, initial encounter -S65517D Laceration of blood vessel of left little finger, subsequent encounter -S65517S Laceration of blood vessel of left little finger, sequela -S65518A Laceration of blood vessel of other finger, initial encounter -S65518D Laceration of blood vessel of other finger, subsequent encounter -S65518S Laceration of blood vessel of other finger, sequela -S65519A Laceration of blood vessel of unspecified finger, initial encounter -S65519D Laceration of blood vessel of unspecified finger, subsequent encounter -S65519S Laceration of blood vessel of unspecified finger, sequela -S65590A Other specified injury of blood vessel of right index finger, initial encounter -S65590D Other specified injury of blood vessel of right index finger, subsequent encounter -S65590S Other specified injury of blood vessel of right index finger, sequela -S65591A Other specified injury of blood vessel of left index finger, initial encounter -S65591D Other specified injury of blood vessel of left index finger, subsequent encounter -S65591S Other specified injury of blood vessel of left index finger, sequela -S65592A Other specified injury of blood vessel of right middle finger, initial encounter -S65592D Other specified injury of blood vessel of right middle finger, subsequent encounter -S65592S Other specified injury of blood vessel of right middle finger, sequela -S65593A Other specified injury of blood vessel of left middle finger, initial encounter -S65593D Other specified injury of blood vessel of left middle finger, subsequent encounter -S65593S Other specified injury of blood vessel of left middle finger, sequela -S65594A Other specified injury of blood vessel of right ring finger, initial encounter -S65594D Other specified injury of blood vessel of right ring finger, subsequent encounter -S65594S Other specified injury of blood vessel of right ring finger, sequela -S65595A Other specified injury of blood vessel of left ring finger, initial encounter -S65595D Other specified injury of blood vessel of left ring finger, subsequent encounter -S65595S Other specified injury of blood vessel of left ring finger, sequela -S65596A Other specified injury of blood vessel of right little finger, initial encounter -S65596D Other specified injury of blood vessel of right little finger, subsequent encounter -S65596S Other specified injury of blood vessel of right little finger, sequela -S65597A Other specified injury of blood vessel of left little finger, initial encounter -S65597D Other specified injury of blood vessel of left little finger, subsequent encounter -S65597S Other specified injury of blood vessel of left little finger, sequela -S65598A Other specified injury of blood vessel of other finger, initial encounter -S65598D Other specified injury of blood vessel of other finger, subsequent encounter -S65598S Other specified injury of blood vessel of other finger, sequela -S65599A Other specified injury of blood vessel of unspecified finger, initial encounter -S65599D Other specified injury of blood vessel of unspecified finger, subsequent encounter -S65599S Other specified injury of blood vessel of unspecified finger, sequela -S65801A Unspecified injury of other blood vessels at wrist and hand level of right arm, initial encounter -S65801D Unspecified injury of other blood vessels at wrist and hand level of right arm, subsequent encounter -S65801S Unspecified injury of other blood vessels at wrist and hand level of right arm, sequela -S65802A Unspecified injury of other blood vessels at wrist and hand level of left arm, initial encounter -S65802D Unspecified injury of other blood vessels at wrist and hand level of left arm, subsequent encounter -S65802S Unspecified injury of other blood vessels at wrist and hand level of left arm, sequela -S65809A Unspecified injury of other blood vessels at wrist and hand level of unspecified arm, initial encounter -S65809D Unspecified injury of other blood vessels at wrist and hand level of unspecified arm, subsequent encounter -S65809S Unspecified injury of other blood vessels at wrist and hand level of unspecified arm, sequela -S65811A Laceration of other blood vessels at wrist and hand level of right arm, initial encounter -S65811D Laceration of other blood vessels at wrist and hand level of right arm, subsequent encounter -S65811S Laceration of other blood vessels at wrist and hand level of right arm, sequela -S65812A Laceration of other blood vessels at wrist and hand level of left arm, initial encounter -S65812D Laceration of other blood vessels at wrist and hand level of left arm, subsequent encounter -S65812S Laceration of other blood vessels at wrist and hand level of left arm, sequela -S65819A Laceration of other blood vessels at wrist and hand level of unspecified arm, initial encounter -S65819D Laceration of other blood vessels at wrist and hand level of unspecified arm, subsequent encounter -S65819S Laceration of other blood vessels at wrist and hand level of unspecified arm, sequela -S65891A Other specified injury of other blood vessels at wrist and hand level of right arm, initial encounter -S65891D Other specified injury of other blood vessels at wrist and hand level of right arm, subsequent encounter -S65891S Other specified injury of other blood vessels at wrist and hand level of right arm, sequela -S65892A Other specified injury of other blood vessels at wrist and hand level of left arm, initial encounter -S65892D Other specified injury of other blood vessels at wrist and hand level of left arm, subsequent encounter -S65892S Other specified injury of other blood vessels at wrist and hand level of left arm, sequela -S65899A Other specified injury of other blood vessels at wrist and hand level of unspecified arm, initial encounter -S65899D Other specified injury of other blood vessels at wrist and hand level of unspecified arm, subsequent encounter -S65899S Other specified injury of other blood vessels at wrist and hand level of unspecified arm, sequela -S65901A Unspecified injury of unspecified blood vessel at wrist and hand level of right arm, initial encounter -S65901D Unspecified injury of unspecified blood vessel at wrist and hand level of right arm, subsequent encounter -S65901S Unspecified injury of unspecified blood vessel at wrist and hand level of right arm, sequela -S65902A Unspecified injury of unspecified blood vessel at wrist and hand level of left arm, initial encounter -S65902D Unspecified injury of unspecified blood vessel at wrist and hand level of left arm, subsequent encounter -S65902S Unspecified injury of unspecified blood vessel at wrist and hand level of left arm, sequela -S65909A Unspecified injury of unspecified blood vessel at wrist and hand level of unspecified arm, initial encounter -S65909D Unspecified injury of unspecified blood vessel at wrist and hand level of unspecified arm, subsequent encounter -S65909S Unspecified injury of unspecified blood vessel at wrist and hand level of unspecified arm, sequela -S65911A Laceration of unspecified blood vessel at wrist and hand level of right arm, initial encounter -S65911D Laceration of unspecified blood vessel at wrist and hand level of right arm, subsequent encounter -S65911S Laceration of unspecified blood vessel at wrist and hand level of right arm, sequela -S65912A Laceration of unspecified blood vessel at wrist and hand level of left arm, initial encounter -S65912D Laceration of unspecified blood vessel at wrist and hand level of left arm, subsequent encounter -S65912S Laceration of unspecified blood vessel at wrist and hand level of left arm, sequela -S65919A Laceration of unspecified blood vessel at wrist and hand level of unspecified arm, initial encounter -S65919D Laceration of unspecified blood vessel at wrist and hand level of unspecified arm, subsequent encounter -S65919S Laceration of unspecified blood vessel at wrist and hand level of unspecified arm, sequela -S65991A Other specified injury of unspecified blood vessel at wrist and hand of right arm, initial encounter -S65991D Other specified injury of unspecified blood vessel at wrist and hand of right arm, subsequent encounter -S65991S Other specified injury of unspecified blood vessel at wrist and hand of right arm, sequela -S65992A Other specified injury of unspecified blood vessel at wrist and hand of left arm, initial encounter -S65992D Other specified injury of unspecified blood vessel at wrist and hand of left arm, subsequent encounter -S65992S Other specified injury of unspecified blood vessel at wrist and hand of left arm, sequela -S65999A Other specified injury of unspecified blood vessel at wrist and hand of unspecified arm, initial encounter -S65999D Other specified injury of unspecified blood vessel at wrist and hand of unspecified arm, subsequent encounter -S65999S Other specified injury of unspecified blood vessel at wrist and hand of unspecified arm, sequela -S66001A Unspecified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66001D Unspecified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66001S Unspecified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66002A Unspecified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66002D Unspecified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66002S Unspecified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66009A Unspecified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66009D Unspecified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66009S Unspecified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66011A Strain of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66011D Strain of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66011S Strain of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66012A Strain of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66012D Strain of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66012S Strain of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66019A Strain of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66019D Strain of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66019S Strain of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66021A Laceration of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66021D Laceration of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66021S Laceration of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66022A Laceration of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66022D Laceration of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66022S Laceration of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66029A Laceration of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66029D Laceration of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66029S Laceration of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66091A Other specified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66091D Other specified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66091S Other specified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66092A Other specified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66092D Other specified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66092S Other specified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66099A Other specified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66099D Other specified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66099S Other specified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66100A Unspecified injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66100D Unspecified injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66100S Unspecified injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66101A Unspecified injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66101D Unspecified injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66101S Unspecified injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66102A Unspecified injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66102D Unspecified injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66102S Unspecified injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66103A Unspecified injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66103D Unspecified injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66103S Unspecified injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66104A Unspecified injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66104D Unspecified injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66104S Unspecified injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66105A Unspecified injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66105D Unspecified injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66105S Unspecified injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66106A Unspecified injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66106D Unspecified injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66106S Unspecified injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66107A Unspecified injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66107D Unspecified injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66107S Unspecified injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66108A Unspecified injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66108D Unspecified injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66108S Unspecified injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66109A Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66109D Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66109S Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66110A Strain of flexor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66110D Strain of flexor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66110S Strain of flexor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66111A Strain of flexor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66111D Strain of flexor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66111S Strain of flexor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66112A Strain of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66112D Strain of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66112S Strain of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66113A Strain of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66113D Strain of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66113S Strain of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66114A Strain of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66114D Strain of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66114S Strain of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66115A Strain of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66115D Strain of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66115S Strain of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66116A Strain of flexor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66116D Strain of flexor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66116S Strain of flexor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66117A Strain of flexor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66117D Strain of flexor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66117S Strain of flexor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66118A Strain of flexor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66118D Strain of flexor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66118S Strain of flexor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66119A Strain of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66119D Strain of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66119S Strain of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66120A Laceration of flexor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66120D Laceration of flexor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66120S Laceration of flexor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66121A Laceration of flexor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66121D Laceration of flexor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66121S Laceration of flexor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66122A Laceration of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66122D Laceration of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66122S Laceration of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66123A Laceration of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66123D Laceration of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66123S Laceration of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66124A Laceration of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66124D Laceration of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66124S Laceration of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66125A Laceration of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66125D Laceration of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66125S Laceration of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66126A Laceration of flexor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66126D Laceration of flexor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66126S Laceration of flexor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66127A Laceration of flexor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66127D Laceration of flexor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66127S Laceration of flexor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66128A Laceration of flexor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66128D Laceration of flexor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66128S Laceration of flexor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66129A Laceration of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66129D Laceration of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66129S Laceration of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66190A Other injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66190D Other injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66190S Other injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66191A Other injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66191D Other injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66191S Other injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66192A Other injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66192D Other injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66192S Other injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66193A Other injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66193D Other injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66193S Other injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66194A Other injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66194D Other injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66194S Other injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66195A Other injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66195D Other injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66195S Other injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66196A Other injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66196D Other injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66196S Other injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66197A Other injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66197D Other injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66197S Other injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66198A Other injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66198D Other injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66198S Other injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66199A Other injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66199D Other injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66199S Other injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66201A Unspecified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66201D Unspecified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66201S Unspecified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66202A Unspecified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66202D Unspecified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66202S Unspecified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66209A Unspecified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66209D Unspecified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66209S Unspecified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66211A Strain of extensor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66211D Strain of extensor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66211S Strain of extensor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66212A Strain of extensor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66212D Strain of extensor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66212S Strain of extensor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66219A Strain of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66219D Strain of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66219S Strain of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66221A Laceration of extensor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66221D Laceration of extensor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66221S Laceration of extensor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66222A Laceration of extensor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66222D Laceration of extensor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66222S Laceration of extensor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66229A Laceration of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66229D Laceration of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66229S Laceration of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66291A Other specified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66291D Other specified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66291S Other specified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66292A Other specified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66292D Other specified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66292S Other specified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66299A Other specified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66299D Other specified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66299S Other specified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66300A Unspecified injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66300D Unspecified injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66300S Unspecified injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66301A Unspecified injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66301D Unspecified injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66301S Unspecified injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66302A Unspecified injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66302D Unspecified injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66302S Unspecified injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66303A Unspecified injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66303D Unspecified injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66303S Unspecified injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66304A Unspecified injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66304D Unspecified injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66304S Unspecified injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66305A Unspecified injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66305D Unspecified injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66305S Unspecified injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66306A Unspecified injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66306D Unspecified injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66306S Unspecified injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66307A Unspecified injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66307D Unspecified injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66307S Unspecified injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66308A Unspecified injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66308D Unspecified injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66308S Unspecified injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66309A Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66309D Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66309S Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66310A Strain of extensor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66310D Strain of extensor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66310S Strain of extensor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66311A Strain of extensor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66311D Strain of extensor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66311S Strain of extensor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66312A Strain of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66312D Strain of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66312S Strain of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66313A Strain of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66313D Strain of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66313S Strain of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66314A Strain of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66314D Strain of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66314S Strain of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66315A Strain of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66315D Strain of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66315S Strain of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66316A Strain of extensor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66316D Strain of extensor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66316S Strain of extensor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66317A Strain of extensor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66317D Strain of extensor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66317S Strain of extensor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66318A Strain of extensor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66318D Strain of extensor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66318S Strain of extensor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66319A Strain of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66319D Strain of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66319S Strain of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66320A Laceration of extensor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66320D Laceration of extensor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66320S Laceration of extensor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66321A Laceration of extensor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66321D Laceration of extensor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66321S Laceration of extensor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66322A Laceration of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66322D Laceration of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66322S Laceration of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66323A Laceration of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66323D Laceration of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66323S Laceration of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66324A Laceration of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66324D Laceration of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66324S Laceration of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66325A Laceration of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66325D Laceration of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66325S Laceration of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66326A Laceration of extensor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66326D Laceration of extensor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66326S Laceration of extensor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66327A Laceration of extensor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66327D Laceration of extensor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66327S Laceration of extensor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66328A Laceration of extensor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66328D Laceration of extensor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66328S Laceration of extensor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66329A Laceration of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66329D Laceration of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66329S Laceration of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66390A Other injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66390D Other injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66390S Other injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66391A Other injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66391D Other injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66391S Other injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66392A Other injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66392D Other injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66392S Other injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66393A Other injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66393D Other injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66393S Other injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66394A Other injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66394D Other injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66394S Other injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66395A Other injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66395D Other injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66395S Other injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66396A Other injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66396D Other injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66396S Other injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66397A Other injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66397D Other injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66397S Other injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66398A Other injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66398D Other injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66398S Other injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66399A Other injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66399D Other injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66399S Other injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66401A Unspecified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66401D Unspecified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66401S Unspecified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66402A Unspecified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66402D Unspecified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66402S Unspecified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66409A Unspecified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66409D Unspecified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66409S Unspecified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66411A Strain of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66411D Strain of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66411S Strain of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66412A Strain of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66412D Strain of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66412S Strain of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66419A Strain of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66419D Strain of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66419S Strain of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66421A Laceration of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66421D Laceration of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66421S Laceration of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66422A Laceration of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66422D Laceration of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66422S Laceration of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66429A Laceration of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66429D Laceration of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66429S Laceration of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66491A Other specified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66491D Other specified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66491S Other specified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66492A Other specified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66492D Other specified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66492S Other specified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66499A Other specified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66499D Other specified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66499S Other specified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66500A Unspecified injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66500D Unspecified injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66500S Unspecified injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66501A Unspecified injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66501D Unspecified injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66501S Unspecified injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66502A Unspecified injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66502D Unspecified injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66502S Unspecified injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66503A Unspecified injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66503D Unspecified injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66503S Unspecified injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66504A Unspecified injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66504D Unspecified injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66504S Unspecified injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66505A Unspecified injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66505D Unspecified injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66505S Unspecified injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66506A Unspecified injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66506D Unspecified injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66506S Unspecified injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66507A Unspecified injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66507D Unspecified injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66507S Unspecified injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66508A Unspecified injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66508D Unspecified injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66508S Unspecified injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66509A Unspecified injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66509D Unspecified injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66509S Unspecified injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66510A Strain of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66510D Strain of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66510S Strain of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66511A Strain of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66511D Strain of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66511S Strain of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66512A Strain of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66512D Strain of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66512S Strain of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66513A Strain of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66513D Strain of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66513S Strain of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66514A Strain of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66514D Strain of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66514S Strain of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66515A Strain of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66515D Strain of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66515S Strain of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66516A Strain of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66516D Strain of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66516S Strain of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66517A Strain of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66517D Strain of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66517S Strain of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66518A Strain of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66518D Strain of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66518S Strain of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66519A Strain of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66519D Strain of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66519S Strain of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66520A Laceration of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66520D Laceration of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66520S Laceration of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66521A Laceration of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66521D Laceration of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66521S Laceration of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66522A Laceration of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66522D Laceration of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66522S Laceration of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66523A Laceration of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66523D Laceration of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66523S Laceration of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66524A Laceration of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66524D Laceration of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66524S Laceration of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66525A Laceration of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66525D Laceration of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66525S Laceration of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66526A Laceration of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66526D Laceration of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66526S Laceration of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66527A Laceration of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66527D Laceration of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66527S Laceration of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66528A Laceration of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66528D Laceration of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66528S Laceration of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66529A Laceration of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66529D Laceration of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66529S Laceration of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66590A Other injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66590D Other injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66590S Other injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66591A Other injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66591D Other injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66591S Other injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66592A Other injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66592D Other injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66592S Other injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66593A Other injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66593D Other injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66593S Other injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66594A Other injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66594D Other injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66594S Other injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66595A Other injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66595D Other injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66595S Other injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66596A Other injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66596D Other injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66596S Other injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66597A Other injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66597D Other injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66597S Other injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66598A Other injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66598D Other injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66598S Other injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66599A Other injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66599D Other injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66599S Other injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66801A Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, initial encounter -S66801D Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, subsequent encounter -S66801S Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, sequela -S66802A Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, initial encounter -S66802D Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, subsequent encounter -S66802S Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, sequela -S66809A Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, initial encounter -S66809D Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, subsequent encounter -S66809S Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, sequela -S66811A Strain of other specified muscles, fascia and tendons at wrist and hand level, right hand, initial encounter -S66811D Strain of other specified muscles, fascia and tendons at wrist and hand level, right hand, subsequent encounter -S66811S Strain of other specified muscles, fascia and tendons at wrist and hand level, right hand, sequela -S66812A Strain of other specified muscles, fascia and tendons at wrist and hand level, left hand, initial encounter -S66812D Strain of other specified muscles, fascia and tendons at wrist and hand level, left hand, subsequent encounter -S66812S Strain of other specified muscles, fascia and tendons at wrist and hand level, left hand, sequela -S66819A Strain of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, initial encounter -S66819D Strain of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, subsequent encounter -S66819S Strain of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, sequela -S66821A Laceration of other specified muscles, fascia and tendons at wrist and hand level, right hand, initial encounter -S66821D Laceration of other specified muscles, fascia and tendons at wrist and hand level, right hand, subsequent encounter -S66821S Laceration of other specified muscles, fascia and tendons at wrist and hand level, right hand, sequela -S66822A Laceration of other specified muscles, fascia and tendons at wrist and hand level, left hand, initial encounter -S66822D Laceration of other specified muscles, fascia and tendons at wrist and hand level, left hand, subsequent encounter -S66822S Laceration of other specified muscles, fascia and tendons at wrist and hand level, left hand, sequela -S66829A Laceration of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, initial encounter -S66829D Laceration of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, subsequent encounter -S66829S Laceration of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, sequela -S66891A Other injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, initial encounter -S66891D Other injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, subsequent encounter -S66891S Other injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, sequela -S66892A Other injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, initial encounter -S66892D Other injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, subsequent encounter -S66892S Other injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, sequela -S66899A Other injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, initial encounter -S66899D Other injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, subsequent encounter -S66899S Other injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, sequela -S66901A Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, initial encounter -S66901D Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, subsequent encounter -S66901S Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, sequela -S66902A Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, initial encounter -S66902D Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, subsequent encounter -S66902S Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, sequela -S66909A Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, initial encounter -S66909D Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, subsequent encounter -S66909S Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, sequela -S66911A Strain of unspecified muscle, fascia and tendon at wrist and hand level, right hand, initial encounter -S66911D Strain of unspecified muscle, fascia and tendon at wrist and hand level, right hand, subsequent encounter -S66911S Strain of unspecified muscle, fascia and tendon at wrist and hand level, right hand, sequela -S66912A Strain of unspecified muscle, fascia and tendon at wrist and hand level, left hand, initial encounter -S66912D Strain of unspecified muscle, fascia and tendon at wrist and hand level, left hand, subsequent encounter -S66912S Strain of unspecified muscle, fascia and tendon at wrist and hand level, left hand, sequela -S66919A Strain of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, initial encounter -S66919D Strain of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, subsequent encounter -S66919S Strain of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, sequela -S66921A Laceration of unspecified muscle, fascia and tendon at wrist and hand level, right hand, initial encounter -S66921D Laceration of unspecified muscle, fascia and tendon at wrist and hand level, right hand, subsequent encounter -S66921S Laceration of unspecified muscle, fascia and tendon at wrist and hand level, right hand, sequela -S66922A Laceration of unspecified muscle, fascia and tendon at wrist and hand level, left hand, initial encounter -S66922D Laceration of unspecified muscle, fascia and tendon at wrist and hand level, left hand, subsequent encounter -S66922S Laceration of unspecified muscle, fascia and tendon at wrist and hand level, left hand, sequela -S66929A Laceration of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, initial encounter -S66929D Laceration of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, subsequent encounter -S66929S Laceration of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, sequela -S66991A Other injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, initial encounter -S66991D Other injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, subsequent encounter -S66991S Other injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, sequela -S66992A Other injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, initial encounter -S66992D Other injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, subsequent encounter -S66992S Other injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, sequela -S66999A Other injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, initial encounter -S66999D Other injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, subsequent encounter -S66999S Other injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, sequela -S6700XA Crushing injury of unspecified thumb, initial encounter -S6700XD Crushing injury of unspecified thumb, subsequent encounter -S6700XS Crushing injury of unspecified thumb, sequela -S6701XA Crushing injury of right thumb, initial encounter -S6701XD Crushing injury of right thumb, subsequent encounter -S6701XS Crushing injury of right thumb, sequela -S6702XA Crushing injury of left thumb, initial encounter -S6702XD Crushing injury of left thumb, subsequent encounter -S6702XS Crushing injury of left thumb, sequela -S6710XA Crushing injury of unspecified finger(s), initial encounter -S6710XD Crushing injury of unspecified finger(s), subsequent encounter -S6710XS Crushing injury of unspecified finger(s), sequela -S67190A Crushing injury of right index finger, initial encounter -S67190D Crushing injury of right index finger, subsequent encounter -S67190S Crushing injury of right index finger, sequela -S67191A Crushing injury of left index finger, initial encounter -S67191D Crushing injury of left index finger, subsequent encounter -S67191S Crushing injury of left index finger, sequela -S67192A Crushing injury of right middle finger, initial encounter -S67192D Crushing injury of right middle finger, subsequent encounter -S67192S Crushing injury of right middle finger, sequela -S67193A Crushing injury of left middle finger, initial encounter -S67193D Crushing injury of left middle finger, subsequent encounter -S67193S Crushing injury of left middle finger, sequela -S67194A Crushing injury of right ring finger, initial encounter -S67194D Crushing injury of right ring finger, subsequent encounter -S67194S Crushing injury of right ring finger, sequela -S67195A Crushing injury of left ring finger, initial encounter -S67195D Crushing injury of left ring finger, subsequent encounter -S67195S Crushing injury of left ring finger, sequela -S67196A Crushing injury of right little finger, initial encounter -S67196D Crushing injury of right little finger, subsequent encounter -S67196S Crushing injury of right little finger, sequela -S67197A Crushing injury of left little finger, initial encounter -S67197D Crushing injury of left little finger, subsequent encounter -S67197S Crushing injury of left little finger, sequela -S67198A Crushing injury of other finger, initial encounter -S67198D Crushing injury of other finger, subsequent encounter -S67198S Crushing injury of other finger, sequela -S6720XA Crushing injury of unspecified hand, initial encounter -S6720XD Crushing injury of unspecified hand, subsequent encounter -S6720XS Crushing injury of unspecified hand, sequela -S6721XA Crushing injury of right hand, initial encounter -S6721XD Crushing injury of right hand, subsequent encounter -S6721XS Crushing injury of right hand, sequela -S6722XA Crushing injury of left hand, initial encounter -S6722XD Crushing injury of left hand, subsequent encounter -S6722XS Crushing injury of left hand, sequela -S6730XA Crushing injury of unspecified wrist, initial encounter -S6730XD Crushing injury of unspecified wrist, subsequent encounter -S6730XS Crushing injury of unspecified wrist, sequela -S6731XA Crushing injury of right wrist, initial encounter -S6731XD Crushing injury of right wrist, subsequent encounter -S6731XS Crushing injury of right wrist, sequela -S6732XA Crushing injury of left wrist, initial encounter -S6732XD Crushing injury of left wrist, subsequent encounter -S6732XS Crushing injury of left wrist, sequela -S6740XA Crushing injury of unspecified wrist and hand, initial encounter -S6740XD Crushing injury of unspecified wrist and hand, subsequent encounter -S6740XS Crushing injury of unspecified wrist and hand, sequela -S6741XA Crushing injury of right wrist and hand, initial encounter -S6741XD Crushing injury of right wrist and hand, subsequent encounter -S6741XS Crushing injury of right wrist and hand, sequela -S6742XA Crushing injury of left wrist and hand, initial encounter -S6742XD Crushing injury of left wrist and hand, subsequent encounter -S6742XS Crushing injury of left wrist and hand, sequela -S6790XA Crushing injury of unspecified part(s) of unspecified wrist, hand and fingers, initial encounter -S6790XD Crushing injury of unspecified part(s) of unspecified wrist, hand and fingers, subsequent encounter -S6790XS Crushing injury of unspecified part(s) of unspecified wrist, hand and fingers, sequela -S6791XA Crushing injury of unspecified part(s) of right wrist, hand and fingers, initial encounter -S6791XD Crushing injury of unspecified part(s) of right wrist, hand and fingers, subsequent encounter -S6791XS Crushing injury of unspecified part(s) of right wrist, hand and fingers, sequela -S6792XA Crushing injury of unspecified part(s) of left wrist, hand and fingers, initial encounter -S6792XD Crushing injury of unspecified part(s) of left wrist, hand and fingers, subsequent encounter -S6792XS Crushing injury of unspecified part(s) of left wrist, hand and fingers, sequela -S68011A Complete traumatic metacarpophalangeal amputation of right thumb, initial encounter -S68011D Complete traumatic metacarpophalangeal amputation of right thumb, subsequent encounter -S68011S Complete traumatic metacarpophalangeal amputation of right thumb, sequela -S68012A Complete traumatic metacarpophalangeal amputation of left thumb, initial encounter -S68012D Complete traumatic metacarpophalangeal amputation of left thumb, subsequent encounter -S68012S Complete traumatic metacarpophalangeal amputation of left thumb, sequela -S68019A Complete traumatic metacarpophalangeal amputation of unspecified thumb, initial encounter -S68019D Complete traumatic metacarpophalangeal amputation of unspecified thumb, subsequent encounter -S68019S Complete traumatic metacarpophalangeal amputation of unspecified thumb, sequela -S68021A Partial traumatic metacarpophalangeal amputation of right thumb, initial encounter -S68021D Partial traumatic metacarpophalangeal amputation of right thumb, subsequent encounter -S68021S Partial traumatic metacarpophalangeal amputation of right thumb, sequela -S68022A Partial traumatic metacarpophalangeal amputation of left thumb, initial encounter -S68022D Partial traumatic metacarpophalangeal amputation of left thumb, subsequent encounter -S68022S Partial traumatic metacarpophalangeal amputation of left thumb, sequela -S68029A Partial traumatic metacarpophalangeal amputation of unspecified thumb, initial encounter -S68029D Partial traumatic metacarpophalangeal amputation of unspecified thumb, subsequent encounter -S68029S Partial traumatic metacarpophalangeal amputation of unspecified thumb, sequela -S68110A Complete traumatic metacarpophalangeal amputation of right index finger, initial encounter -S68110D Complete traumatic metacarpophalangeal amputation of right index finger, subsequent encounter -S68110S Complete traumatic metacarpophalangeal amputation of right index finger, sequela -S68111A Complete traumatic metacarpophalangeal amputation of left index finger, initial encounter -S68111D Complete traumatic metacarpophalangeal amputation of left index finger, subsequent encounter -S68111S Complete traumatic metacarpophalangeal amputation of left index finger, sequela -S68112A Complete traumatic metacarpophalangeal amputation of right middle finger, initial encounter -S68112D Complete traumatic metacarpophalangeal amputation of right middle finger, subsequent encounter -S68112S Complete traumatic metacarpophalangeal amputation of right middle finger, sequela -S68113A Complete traumatic metacarpophalangeal amputation of left middle finger, initial encounter -S68113D Complete traumatic metacarpophalangeal amputation of left middle finger, subsequent encounter -S68113S Complete traumatic metacarpophalangeal amputation of left middle finger, sequela -S68114A Complete traumatic metacarpophalangeal amputation of right ring finger, initial encounter -S68114D Complete traumatic metacarpophalangeal amputation of right ring finger, subsequent encounter -S68114S Complete traumatic metacarpophalangeal amputation of right ring finger, sequela -S68115A Complete traumatic metacarpophalangeal amputation of left ring finger, initial encounter -S68115D Complete traumatic metacarpophalangeal amputation of left ring finger, subsequent encounter -S68115S Complete traumatic metacarpophalangeal amputation of left ring finger, sequela -S68116A Complete traumatic metacarpophalangeal amputation of right little finger, initial encounter -S68116D Complete traumatic metacarpophalangeal amputation of right little finger, subsequent encounter -S68116S Complete traumatic metacarpophalangeal amputation of right little finger, sequela -S68117A Complete traumatic metacarpophalangeal amputation of left little finger, initial encounter -S68117D Complete traumatic metacarpophalangeal amputation of left little finger, subsequent encounter -S68117S Complete traumatic metacarpophalangeal amputation of left little finger, sequela -S68118A Complete traumatic metacarpophalangeal amputation of other finger, initial encounter -S68118D Complete traumatic metacarpophalangeal amputation of other finger, subsequent encounter -S68118S Complete traumatic metacarpophalangeal amputation of other finger, sequela -S68119A Complete traumatic metacarpophalangeal amputation of unspecified finger, initial encounter -S68119D Complete traumatic metacarpophalangeal amputation of unspecified finger, subsequent encounter -S68119S Complete traumatic metacarpophalangeal amputation of unspecified finger, sequela -S68120A Partial traumatic metacarpophalangeal amputation of right index finger, initial encounter -S68120D Partial traumatic metacarpophalangeal amputation of right index finger, subsequent encounter -S68120S Partial traumatic metacarpophalangeal amputation of right index finger, sequela -S68121A Partial traumatic metacarpophalangeal amputation of left index finger, initial encounter -S68121D Partial traumatic metacarpophalangeal amputation of left index finger, subsequent encounter -S68121S Partial traumatic metacarpophalangeal amputation of left index finger, sequela -S68122A Partial traumatic metacarpophalangeal amputation of right middle finger, initial encounter -S68122D Partial traumatic metacarpophalangeal amputation of right middle finger, subsequent encounter -S68122S Partial traumatic metacarpophalangeal amputation of right middle finger, sequela -S68123A Partial traumatic metacarpophalangeal amputation of left middle finger, initial encounter -S68123D Partial traumatic metacarpophalangeal amputation of left middle finger, subsequent encounter -S68123S Partial traumatic metacarpophalangeal amputation of left middle finger, sequela -S68124A Partial traumatic metacarpophalangeal amputation of right ring finger, initial encounter -S68124D Partial traumatic metacarpophalangeal amputation of right ring finger, subsequent encounter -S68124S Partial traumatic metacarpophalangeal amputation of right ring finger, sequela -S68125A Partial traumatic metacarpophalangeal amputation of left ring finger, initial encounter -S68125D Partial traumatic metacarpophalangeal amputation of left ring finger, subsequent encounter -S68125S Partial traumatic metacarpophalangeal amputation of left ring finger, sequela -S68126A Partial traumatic metacarpophalangeal amputation of right little finger, initial encounter -S68126D Partial traumatic metacarpophalangeal amputation of right little finger, subsequent encounter -S68126S Partial traumatic metacarpophalangeal amputation of right little finger, sequela -S68127A Partial traumatic metacarpophalangeal amputation of left little finger, initial encounter -S68127D Partial traumatic metacarpophalangeal amputation of left little finger, subsequent encounter -S68127S Partial traumatic metacarpophalangeal amputation of left little finger, sequela -S68128A Partial traumatic metacarpophalangeal amputation of other finger, initial encounter -S68128D Partial traumatic metacarpophalangeal amputation of other finger, subsequent encounter -S68128S Partial traumatic metacarpophalangeal amputation of other finger, sequela -S68129A Partial traumatic metacarpophalangeal amputation of unspecified finger, initial encounter -S68129D Partial traumatic metacarpophalangeal amputation of unspecified finger, subsequent encounter -S68129S Partial traumatic metacarpophalangeal amputation of unspecified finger, sequela -S68411A Complete traumatic amputation of right hand at wrist level, initial encounter -S68411D Complete traumatic amputation of right hand at wrist level, subsequent encounter -S68411S Complete traumatic amputation of right hand at wrist level, sequela -S68412A Complete traumatic amputation of left hand at wrist level, initial encounter -S68412D Complete traumatic amputation of left hand at wrist level, subsequent encounter -S68412S Complete traumatic amputation of left hand at wrist level, sequela -S68419A Complete traumatic amputation of unspecified hand at wrist level, initial encounter -S68419D Complete traumatic amputation of unspecified hand at wrist level, subsequent encounter -S68419S Complete traumatic amputation of unspecified hand at wrist level, sequela -S68421A Partial traumatic amputation of right hand at wrist level, initial encounter -S68421D Partial traumatic amputation of right hand at wrist level, subsequent encounter -S68421S Partial traumatic amputation of right hand at wrist level, sequela -S68422A Partial traumatic amputation of left hand at wrist level, initial encounter -S68422D Partial traumatic amputation of left hand at wrist level, subsequent encounter -S68422S Partial traumatic amputation of left hand at wrist level, sequela -S68429A Partial traumatic amputation of unspecified hand at wrist level, initial encounter -S68429D Partial traumatic amputation of unspecified hand at wrist level, subsequent encounter -S68429S Partial traumatic amputation of unspecified hand at wrist level, sequela -S68511A Complete traumatic transphalangeal amputation of right thumb, initial encounter -S68511D Complete traumatic transphalangeal amputation of right thumb, subsequent encounter -S68511S Complete traumatic transphalangeal amputation of right thumb, sequela -S68512A Complete traumatic transphalangeal amputation of left thumb, initial encounter -S68512D Complete traumatic transphalangeal amputation of left thumb, subsequent encounter -S68512S Complete traumatic transphalangeal amputation of left thumb, sequela -S68519A Complete traumatic transphalangeal amputation of unspecified thumb, initial encounter -S68519D Complete traumatic transphalangeal amputation of unspecified thumb, subsequent encounter -S68519S Complete traumatic transphalangeal amputation of unspecified thumb, sequela -S68521A Partial traumatic transphalangeal amputation of right thumb, initial encounter -S68521D Partial traumatic transphalangeal amputation of right thumb, subsequent encounter -S68521S Partial traumatic transphalangeal amputation of right thumb, sequela -S68522A Partial traumatic transphalangeal amputation of left thumb, initial encounter -S68522D Partial traumatic transphalangeal amputation of left thumb, subsequent encounter -S68522S Partial traumatic transphalangeal amputation of left thumb, sequela -S68529A Partial traumatic transphalangeal amputation of unspecified thumb, initial encounter -S68529D Partial traumatic transphalangeal amputation of unspecified thumb, subsequent encounter -S68529S Partial traumatic transphalangeal amputation of unspecified thumb, sequela -S68610A Complete traumatic transphalangeal amputation of right index finger, initial encounter -S68610D Complete traumatic transphalangeal amputation of right index finger, subsequent encounter -S68610S Complete traumatic transphalangeal amputation of right index finger, sequela -S68611A Complete traumatic transphalangeal amputation of left index finger, initial encounter -S68611D Complete traumatic transphalangeal amputation of left index finger, subsequent encounter -S68611S Complete traumatic transphalangeal amputation of left index finger, sequela -S68612A Complete traumatic transphalangeal amputation of right middle finger, initial encounter -S68612D Complete traumatic transphalangeal amputation of right middle finger, subsequent encounter -S68612S Complete traumatic transphalangeal amputation of right middle finger, sequela -S68613A Complete traumatic transphalangeal amputation of left middle finger, initial encounter -S68613D Complete traumatic transphalangeal amputation of left middle finger, subsequent encounter -S68613S Complete traumatic transphalangeal amputation of left middle finger, sequela -S68614A Complete traumatic transphalangeal amputation of right ring finger, initial encounter -S68614D Complete traumatic transphalangeal amputation of right ring finger, subsequent encounter -S68614S Complete traumatic transphalangeal amputation of right ring finger, sequela -S68615A Complete traumatic transphalangeal amputation of left ring finger, initial encounter -S68615D Complete traumatic transphalangeal amputation of left ring finger, subsequent encounter -S68615S Complete traumatic transphalangeal amputation of left ring finger, sequela -S68616A Complete traumatic transphalangeal amputation of right little finger, initial encounter -S68616D Complete traumatic transphalangeal amputation of right little finger, subsequent encounter -S68616S Complete traumatic transphalangeal amputation of right little finger, sequela -S68617A Complete traumatic transphalangeal amputation of left little finger, initial encounter -S68617D Complete traumatic transphalangeal amputation of left little finger, subsequent encounter -S68617S Complete traumatic transphalangeal amputation of left little finger, sequela -S68618A Complete traumatic transphalangeal amputation of other finger, initial encounter -S68618D Complete traumatic transphalangeal amputation of other finger, subsequent encounter -S68618S Complete traumatic transphalangeal amputation of other finger, sequela -S68619A Complete traumatic transphalangeal amputation of unspecified finger, initial encounter -S68619D Complete traumatic transphalangeal amputation of unspecified finger, subsequent encounter -S68619S Complete traumatic transphalangeal amputation of unspecified finger, sequela -S68620A Partial traumatic transphalangeal amputation of right index finger, initial encounter -S68620D Partial traumatic transphalangeal amputation of right index finger, subsequent encounter -S68620S Partial traumatic transphalangeal amputation of right index finger, sequela -S68621A Partial traumatic transphalangeal amputation of left index finger, initial encounter -S68621D Partial traumatic transphalangeal amputation of left index finger, subsequent encounter -S68621S Partial traumatic transphalangeal amputation of left index finger, sequela -S68622A Partial traumatic transphalangeal amputation of right middle finger, initial encounter -S68622D Partial traumatic transphalangeal amputation of right middle finger, subsequent encounter -S68622S Partial traumatic transphalangeal amputation of right middle finger, sequela -S68623A Partial traumatic transphalangeal amputation of left middle finger, initial encounter -S68623D Partial traumatic transphalangeal amputation of left middle finger, subsequent encounter -S68623S Partial traumatic transphalangeal amputation of left middle finger, sequela -S68624A Partial traumatic transphalangeal amputation of right ring finger, initial encounter -S68624D Partial traumatic transphalangeal amputation of right ring finger, subsequent encounter -S68624S Partial traumatic transphalangeal amputation of right ring finger, sequela -S68625A Partial traumatic transphalangeal amputation of left ring finger, initial encounter -S68625D Partial traumatic transphalangeal amputation of left ring finger, subsequent encounter -S68625S Partial traumatic transphalangeal amputation of left ring finger, sequela -S68626A Partial traumatic transphalangeal amputation of right little finger, initial encounter -S68626D Partial traumatic transphalangeal amputation of right little finger, subsequent encounter -S68626S Partial traumatic transphalangeal amputation of right little finger, sequela -S68627A Partial traumatic transphalangeal amputation of left little finger, initial encounter -S68627D Partial traumatic transphalangeal amputation of left little finger, subsequent encounter -S68627S Partial traumatic transphalangeal amputation of left little finger, sequela -S68628A Partial traumatic transphalangeal amputation of other finger, initial encounter -S68628D Partial traumatic transphalangeal amputation of other finger, subsequent encounter -S68628S Partial traumatic transphalangeal amputation of other finger, sequela -S68629A Partial traumatic transphalangeal amputation of unspecified finger, initial encounter -S68629D Partial traumatic transphalangeal amputation of unspecified finger, subsequent encounter -S68629S Partial traumatic transphalangeal amputation of unspecified finger, sequela -S68711A Complete traumatic transmetacarpal amputation of right hand, initial encounter -S68711D Complete traumatic transmetacarpal amputation of right hand, subsequent encounter -S68711S Complete traumatic transmetacarpal amputation of right hand, sequela -S68712A Complete traumatic transmetacarpal amputation of left hand, initial encounter -S68712D Complete traumatic transmetacarpal amputation of left hand, subsequent encounter -S68712S Complete traumatic transmetacarpal amputation of left hand, sequela -S68719A Complete traumatic transmetacarpal amputation of unspecified hand, initial encounter -S68719D Complete traumatic transmetacarpal amputation of unspecified hand, subsequent encounter -S68719S Complete traumatic transmetacarpal amputation of unspecified hand, sequela -S68721A Partial traumatic transmetacarpal amputation of right hand, initial encounter -S68721D Partial traumatic transmetacarpal amputation of right hand, subsequent encounter -S68721S Partial traumatic transmetacarpal amputation of right hand, sequela -S68722A Partial traumatic transmetacarpal amputation of left hand, initial encounter -S68722D Partial traumatic transmetacarpal amputation of left hand, subsequent encounter -S68722S Partial traumatic transmetacarpal amputation of left hand, sequela -S68729A Partial traumatic transmetacarpal amputation of unspecified hand, initial encounter -S68729D Partial traumatic transmetacarpal amputation of unspecified hand, subsequent encounter -S68729S Partial traumatic transmetacarpal amputation of unspecified hand, sequela -S6980XA Other specified injuries of unspecified wrist, hand and finger(s), initial encounter -S6980XD Other specified injuries of unspecified wrist, hand and finger(s), subsequent encounter -S6980XS Other specified injuries of unspecified wrist, hand and finger(s), sequela -S6981XA Other specified injuries of right wrist, hand and finger(s), initial encounter -S6981XD Other specified injuries of right wrist, hand and finger(s), subsequent encounter -S6981XS Other specified injuries of right wrist, hand and finger(s), sequela -S6982XA Other specified injuries of left wrist, hand and finger(s), initial encounter -S6982XD Other specified injuries of left wrist, hand and finger(s), subsequent encounter -S6982XS Other specified injuries of left wrist, hand and finger(s), sequela -S6990XA Unspecified injury of unspecified wrist, hand and finger(s), initial encounter -S6990XD Unspecified injury of unspecified wrist, hand and finger(s), subsequent encounter -S6990XS Unspecified injury of unspecified wrist, hand and finger(s), sequela -S6991XA Unspecified injury of right wrist, hand and finger(s), initial encounter -S6991XD Unspecified injury of right wrist, hand and finger(s), subsequent encounter -S6991XS Unspecified injury of right wrist, hand and finger(s), sequela -S6992XA Unspecified injury of left wrist, hand and finger(s), initial encounter -S6992XD Unspecified injury of left wrist, hand and finger(s), subsequent encounter -S6992XS Unspecified injury of left wrist, hand and finger(s), sequela -S7000XA Contusion of unspecified hip, initial encounter -S7000XD Contusion of unspecified hip, subsequent encounter -S7000XS Contusion of unspecified hip, sequela -S7001XA Contusion of right hip, initial encounter -S7001XD Contusion of right hip, subsequent encounter -S7001XS Contusion of right hip, sequela -S7002XA Contusion of left hip, initial encounter -S7002XD Contusion of left hip, subsequent encounter -S7002XS Contusion of left hip, sequela -S7010XA Contusion of unspecified thigh, initial encounter -S7010XD Contusion of unspecified thigh, subsequent encounter -S7010XS Contusion of unspecified thigh, sequela -S7011XA Contusion of right thigh, initial encounter -S7011XD Contusion of right thigh, subsequent encounter -S7011XS Contusion of right thigh, sequela -S7012XA Contusion of left thigh, initial encounter -S7012XD Contusion of left thigh, subsequent encounter -S7012XS Contusion of left thigh, sequela -S70211A Abrasion, right hip, initial encounter -S70211D Abrasion, right hip, subsequent encounter -S70211S Abrasion, right hip, sequela -S70212A Abrasion, left hip, initial encounter -S70212D Abrasion, left hip, subsequent encounter -S70212S Abrasion, left hip, sequela -S70219A Abrasion, unspecified hip, initial encounter -S70219D Abrasion, unspecified hip, subsequent encounter -S70219S Abrasion, unspecified hip, sequela -S70221A Blister (nonthermal), right hip, initial encounter -S70221D Blister (nonthermal), right hip, subsequent encounter -S70221S Blister (nonthermal), right hip, sequela -S70222A Blister (nonthermal), left hip, initial encounter -S70222D Blister (nonthermal), left hip, subsequent encounter -S70222S Blister (nonthermal), left hip, sequela -S70229A Blister (nonthermal), unspecified hip, initial encounter -S70229D Blister (nonthermal), unspecified hip, subsequent encounter -S70229S Blister (nonthermal), unspecified hip, sequela -S70241A External constriction, right hip, initial encounter -S70241D External constriction, right hip, subsequent encounter -S70241S External constriction, right hip, sequela -S70242A External constriction, left hip, initial encounter -S70242D External constriction, left hip, subsequent encounter -S70242S External constriction, left hip, sequela -S70249A External constriction, unspecified hip, initial encounter -S70249D External constriction, unspecified hip, subsequent encounter -S70249S External constriction, unspecified hip, sequela -S70251A Superficial foreign body, right hip, initial encounter -S70251D Superficial foreign body, right hip, subsequent encounter -S70251S Superficial foreign body, right hip, sequela -S70252A Superficial foreign body, left hip, initial encounter -S70252D Superficial foreign body, left hip, subsequent encounter -S70252S Superficial foreign body, left hip, sequela -S70259A Superficial foreign body, unspecified hip, initial encounter -S70259D Superficial foreign body, unspecified hip, subsequent encounter -S70259S Superficial foreign body, unspecified hip, sequela -S70261A Insect bite (nonvenomous), right hip, initial encounter -S70261D Insect bite (nonvenomous), right hip, subsequent encounter -S70261S Insect bite (nonvenomous), right hip, sequela -S70262A Insect bite (nonvenomous), left hip, initial encounter -S70262D Insect bite (nonvenomous), left hip, subsequent encounter -S70262S Insect bite (nonvenomous), left hip, sequela -S70269A Insect bite (nonvenomous), unspecified hip, initial encounter -S70269D Insect bite (nonvenomous), unspecified hip, subsequent encounter -S70269S Insect bite (nonvenomous), unspecified hip, sequela -S70271A Other superficial bite of hip, right hip, initial encounter -S70271D Other superficial bite of hip, right hip, subsequent encounter -S70271S Other superficial bite of hip, right hip, sequela -S70272A Other superficial bite of hip, left hip, initial encounter -S70272D Other superficial bite of hip, left hip, subsequent encounter -S70272S Other superficial bite of hip, left hip, sequela -S70279A Other superficial bite of hip, unspecified hip, initial encounter -S70279D Other superficial bite of hip, unspecified hip, subsequent encounter -S70279S Other superficial bite of hip, unspecified hip, sequela -S70311A Abrasion, right thigh, initial encounter -S70311D Abrasion, right thigh, subsequent encounter -S70311S Abrasion, right thigh, sequela -S70312A Abrasion, left thigh, initial encounter -S70312D Abrasion, left thigh, subsequent encounter -S70312S Abrasion, left thigh, sequela -S70319A Abrasion, unspecified thigh, initial encounter -S70319D Abrasion, unspecified thigh, subsequent encounter -S70319S Abrasion, unspecified thigh, sequela -S70321A Blister (nonthermal), right thigh, initial encounter -S70321D Blister (nonthermal), right thigh, subsequent encounter -S70321S Blister (nonthermal), right thigh, sequela -S70322A Blister (nonthermal), left thigh, initial encounter -S70322D Blister (nonthermal), left thigh, subsequent encounter -S70322S Blister (nonthermal), left thigh, sequela -S70329A Blister (nonthermal), unspecified thigh, initial encounter -S70329D Blister (nonthermal), unspecified thigh, subsequent encounter -S70329S Blister (nonthermal), unspecified thigh, sequela -S70341A External constriction, right thigh, initial encounter -S70341D External constriction, right thigh, subsequent encounter -S70341S External constriction, right thigh, sequela -S70342A External constriction, left thigh, initial encounter -S70342D External constriction, left thigh, subsequent encounter -S70342S External constriction, left thigh, sequela -S70349A External constriction, unspecified thigh, initial encounter -S70349D External constriction, unspecified thigh, subsequent encounter -S70349S External constriction, unspecified thigh, sequela -S70351A Superficial foreign body, right thigh, initial encounter -S70351D Superficial foreign body, right thigh, subsequent encounter -S70351S Superficial foreign body, right thigh, sequela -S70352A Superficial foreign body, left thigh, initial encounter -S70352D Superficial foreign body, left thigh, subsequent encounter -S70352S Superficial foreign body, left thigh, sequela -S70359A Superficial foreign body, unspecified thigh, initial encounter -S70359D Superficial foreign body, unspecified thigh, subsequent encounter -S70359S Superficial foreign body, unspecified thigh, sequela -S70361A Insect bite (nonvenomous), right thigh, initial encounter -S70361D Insect bite (nonvenomous), right thigh, subsequent encounter -S70361S Insect bite (nonvenomous), right thigh, sequela -S70362A Insect bite (nonvenomous), left thigh, initial encounter -S70362D Insect bite (nonvenomous), left thigh, subsequent encounter -S70362S Insect bite (nonvenomous), left thigh, sequela -S70369A Insect bite (nonvenomous), unspecified thigh, initial encounter -S70369D Insect bite (nonvenomous), unspecified thigh, subsequent encounter -S70369S Insect bite (nonvenomous), unspecified thigh, sequela -S70371A Other superficial bite of right thigh, initial encounter -S70371D Other superficial bite of right thigh, subsequent encounter -S70371S Other superficial bite of right thigh, sequela -S70372A Other superficial bite of left thigh, initial encounter -S70372D Other superficial bite of left thigh, subsequent encounter -S70372S Other superficial bite of left thigh, sequela -S70379A Other superficial bite of unspecified thigh, initial encounter -S70379D Other superficial bite of unspecified thigh, subsequent encounter -S70379S Other superficial bite of unspecified thigh, sequela -S70911A Unspecified superficial injury of right hip, initial encounter -S70911D Unspecified superficial injury of right hip, subsequent encounter -S70911S Unspecified superficial injury of right hip, sequela -S70912A Unspecified superficial injury of left hip, initial encounter -S70912D Unspecified superficial injury of left hip, subsequent encounter -S70912S Unspecified superficial injury of left hip, sequela -S70919A Unspecified superficial injury of unspecified hip, initial encounter -S70919D Unspecified superficial injury of unspecified hip, subsequent encounter -S70919S Unspecified superficial injury of unspecified hip, sequela -S70921A Unspecified superficial injury of right thigh, initial encounter -S70921D Unspecified superficial injury of right thigh, subsequent encounter -S70921S Unspecified superficial injury of right thigh, sequela -S70922A Unspecified superficial injury of left thigh, initial encounter -S70922D Unspecified superficial injury of left thigh, subsequent encounter -S70922S Unspecified superficial injury of left thigh, sequela -S70929A Unspecified superficial injury of unspecified thigh, initial encounter -S70929D Unspecified superficial injury of unspecified thigh, subsequent encounter -S70929S Unspecified superficial injury of unspecified thigh, sequela -S71001A Unspecified open wound, right hip, initial encounter -S71001D Unspecified open wound, right hip, subsequent encounter -S71001S Unspecified open wound, right hip, sequela -S71002A Unspecified open wound, left hip, initial encounter -S71002D Unspecified open wound, left hip, subsequent encounter -S71002S Unspecified open wound, left hip, sequela -S71009A Unspecified open wound, unspecified hip, initial encounter -S71009D Unspecified open wound, unspecified hip, subsequent encounter -S71009S Unspecified open wound, unspecified hip, sequela -S71011A Laceration without foreign body, right hip, initial encounter -S71011D Laceration without foreign body, right hip, subsequent encounter -S71011S Laceration without foreign body, right hip, sequela -S71012A Laceration without foreign body, left hip, initial encounter -S71012D Laceration without foreign body, left hip, subsequent encounter -S71012S Laceration without foreign body, left hip, sequela -S71019A Laceration without foreign body, unspecified hip, initial encounter -S71019D Laceration without foreign body, unspecified hip, subsequent encounter -S71019S Laceration without foreign body, unspecified hip, sequela -S71021A Laceration with foreign body, right hip, initial encounter -S71021D Laceration with foreign body, right hip, subsequent encounter -S71021S Laceration with foreign body, right hip, sequela -S71022A Laceration with foreign body, left hip, initial encounter -S71022D Laceration with foreign body, left hip, subsequent encounter -S71022S Laceration with foreign body, left hip, sequela -S71029A Laceration with foreign body, unspecified hip, initial encounter -S71029D Laceration with foreign body, unspecified hip, subsequent encounter -S71029S Laceration with foreign body, unspecified hip, sequela -S71031A Puncture wound without foreign body, right hip, initial encounter -S71031D Puncture wound without foreign body, right hip, subsequent encounter -S71031S Puncture wound without foreign body, right hip, sequela -S71032A Puncture wound without foreign body, left hip, initial encounter -S71032D Puncture wound without foreign body, left hip, subsequent encounter -S71032S Puncture wound without foreign body, left hip, sequela -S71039A Puncture wound without foreign body, unspecified hip, initial encounter -S71039D Puncture wound without foreign body, unspecified hip, subsequent encounter -S71039S Puncture wound without foreign body, unspecified hip, sequela -S71041A Puncture wound with foreign body, right hip, initial encounter -S71041D Puncture wound with foreign body, right hip, subsequent encounter -S71041S Puncture wound with foreign body, right hip, sequela -S71042A Puncture wound with foreign body, left hip, initial encounter -S71042D Puncture wound with foreign body, left hip, subsequent encounter -S71042S Puncture wound with foreign body, left hip, sequela -S71049A Puncture wound with foreign body, unspecified hip, initial encounter -S71049D Puncture wound with foreign body, unspecified hip, subsequent encounter -S71049S Puncture wound with foreign body, unspecified hip, sequela -S71051A Open bite, right hip, initial encounter -S71051D Open bite, right hip, subsequent encounter -S71051S Open bite, right hip, sequela -S71052A Open bite, left hip, initial encounter -S71052D Open bite, left hip, subsequent encounter -S71052S Open bite, left hip, sequela -S71059A Open bite, unspecified hip, initial encounter -S71059D Open bite, unspecified hip, subsequent encounter -S71059S Open bite, unspecified hip, sequela -S71101A Unspecified open wound, right thigh, initial encounter -S71101D Unspecified open wound, right thigh, subsequent encounter -S71101S Unspecified open wound, right thigh, sequela -S71102A Unspecified open wound, left thigh, initial encounter -S71102D Unspecified open wound, left thigh, subsequent encounter -S71102S Unspecified open wound, left thigh, sequela -S71109A Unspecified open wound, unspecified thigh, initial encounter -S71109D Unspecified open wound, unspecified thigh, subsequent encounter -S71109S Unspecified open wound, unspecified thigh, sequela -S71111A Laceration without foreign body, right thigh, initial encounter -S71111D Laceration without foreign body, right thigh, subsequent encounter -S71111S Laceration without foreign body, right thigh, sequela -S71112A Laceration without foreign body, left thigh, initial encounter -S71112D Laceration without foreign body, left thigh, subsequent encounter -S71112S Laceration without foreign body, left thigh, sequela -S71119A Laceration without foreign body, unspecified thigh, initial encounter -S71119D Laceration without foreign body, unspecified thigh, subsequent encounter -S71119S Laceration without foreign body, unspecified thigh, sequela -S71121A Laceration with foreign body, right thigh, initial encounter -S71121D Laceration with foreign body, right thigh, subsequent encounter -S71121S Laceration with foreign body, right thigh, sequela -S71122A Laceration with foreign body, left thigh, initial encounter -S71122D Laceration with foreign body, left thigh, subsequent encounter -S71122S Laceration with foreign body, left thigh, sequela -S71129A Laceration with foreign body, unspecified thigh, initial encounter -S71129D Laceration with foreign body, unspecified thigh, subsequent encounter -S71129S Laceration with foreign body, unspecified thigh, sequela -S71131A Puncture wound without foreign body, right thigh, initial encounter -S71131D Puncture wound without foreign body, right thigh, subsequent encounter -S71131S Puncture wound without foreign body, right thigh, sequela -S71132A Puncture wound without foreign body, left thigh, initial encounter -S71132D Puncture wound without foreign body, left thigh, subsequent encounter -S71132S Puncture wound without foreign body, left thigh, sequela -S71139A Puncture wound without foreign body, unspecified thigh, initial encounter -S71139D Puncture wound without foreign body, unspecified thigh, subsequent encounter -S71139S Puncture wound without foreign body, unspecified thigh, sequela -S71141A Puncture wound with foreign body, right thigh, initial encounter -S71141D Puncture wound with foreign body, right thigh, subsequent encounter -S71141S Puncture wound with foreign body, right thigh, sequela -S71142A Puncture wound with foreign body, left thigh, initial encounter -S71142D Puncture wound with foreign body, left thigh, subsequent encounter -S71142S Puncture wound with foreign body, left thigh, sequela -S71149A Puncture wound with foreign body, unspecified thigh, initial encounter -S71149D Puncture wound with foreign body, unspecified thigh, subsequent encounter -S71149S Puncture wound with foreign body, unspecified thigh, sequela -S71151A Open bite, right thigh, initial encounter -S71151D Open bite, right thigh, subsequent encounter -S71151S Open bite, right thigh, sequela -S71152A Open bite, left thigh, initial encounter -S71152D Open bite, left thigh, subsequent encounter -S71152S Open bite, left thigh, sequela -S71159A Open bite, unspecified thigh, initial encounter -S71159D Open bite, unspecified thigh, subsequent encounter -S71159S Open bite, unspecified thigh, sequela -S72001A Fracture of unspecified part of neck of right femur, initial encounter for closed fracture -S72001B Fracture of unspecified part of neck of right femur, initial encounter for open fracture type I or II -S72001C Fracture of unspecified part of neck of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72001D Fracture of unspecified part of neck of right femur, subsequent encounter for closed fracture with routine healing -S72001E Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type I or II with routine healing -S72001F Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72001G Fracture of unspecified part of neck of right femur, subsequent encounter for closed fracture with delayed healing -S72001H Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72001J Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72001K Fracture of unspecified part of neck of right femur, subsequent encounter for closed fracture with nonunion -S72001M Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type I or II with nonunion -S72001N Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72001P Fracture of unspecified part of neck of right femur, subsequent encounter for closed fracture with malunion -S72001Q Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type I or II with malunion -S72001R Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72001S Fracture of unspecified part of neck of right femur, sequela -S72002A Fracture of unspecified part of neck of left femur, initial encounter for closed fracture -S72002B Fracture of unspecified part of neck of left femur, initial encounter for open fracture type I or II -S72002C Fracture of unspecified part of neck of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72002D Fracture of unspecified part of neck of left femur, subsequent encounter for closed fracture with routine healing -S72002E Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type I or II with routine healing -S72002F Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72002G Fracture of unspecified part of neck of left femur, subsequent encounter for closed fracture with delayed healing -S72002H Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72002J Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72002K Fracture of unspecified part of neck of left femur, subsequent encounter for closed fracture with nonunion -S72002M Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type I or II with nonunion -S72002N Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72002P Fracture of unspecified part of neck of left femur, subsequent encounter for closed fracture with malunion -S72002Q Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type I or II with malunion -S72002R Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72002S Fracture of unspecified part of neck of left femur, sequela -S72009A Fracture of unspecified part of neck of unspecified femur, initial encounter for closed fracture -S72009B Fracture of unspecified part of neck of unspecified femur, initial encounter for open fracture type I or II -S72009C Fracture of unspecified part of neck of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72009D Fracture of unspecified part of neck of unspecified femur, subsequent encounter for closed fracture with routine healing -S72009E Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72009F Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72009G Fracture of unspecified part of neck of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72009H Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72009J Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72009K Fracture of unspecified part of neck of unspecified femur, subsequent encounter for closed fracture with nonunion -S72009M Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72009N Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72009P Fracture of unspecified part of neck of unspecified femur, subsequent encounter for closed fracture with malunion -S72009Q Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72009R Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72009S Fracture of unspecified part of neck of unspecified femur, sequela -S72011A Unspecified intracapsular fracture of right femur, initial encounter for closed fracture -S72011B Unspecified intracapsular fracture of right femur, initial encounter for open fracture type I or II -S72011C Unspecified intracapsular fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72011D Unspecified intracapsular fracture of right femur, subsequent encounter for closed fracture with routine healing -S72011E Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72011F Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72011G Unspecified intracapsular fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72011H Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72011J Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72011K Unspecified intracapsular fracture of right femur, subsequent encounter for closed fracture with nonunion -S72011M Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72011N Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72011P Unspecified intracapsular fracture of right femur, subsequent encounter for closed fracture with malunion -S72011Q Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72011R Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72011S Unspecified intracapsular fracture of right femur, sequela -S72012A Unspecified intracapsular fracture of left femur, initial encounter for closed fracture -S72012B Unspecified intracapsular fracture of left femur, initial encounter for open fracture type I or II -S72012C Unspecified intracapsular fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72012D Unspecified intracapsular fracture of left femur, subsequent encounter for closed fracture with routine healing -S72012E Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72012F Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72012G Unspecified intracapsular fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72012H Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72012J Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72012K Unspecified intracapsular fracture of left femur, subsequent encounter for closed fracture with nonunion -S72012M Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72012N Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72012P Unspecified intracapsular fracture of left femur, subsequent encounter for closed fracture with malunion -S72012Q Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72012R Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72012S Unspecified intracapsular fracture of left femur, sequela -S72019A Unspecified intracapsular fracture of unspecified femur, initial encounter for closed fracture -S72019B Unspecified intracapsular fracture of unspecified femur, initial encounter for open fracture type I or II -S72019C Unspecified intracapsular fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72019D Unspecified intracapsular fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72019E Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72019F Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72019G Unspecified intracapsular fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72019H Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72019J Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72019K Unspecified intracapsular fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72019M Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72019N Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72019P Unspecified intracapsular fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72019Q Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72019R Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72019S Unspecified intracapsular fracture of unspecified femur, sequela -S72021A Displaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for closed fracture -S72021B Displaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for open fracture type I or II -S72021C Displaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72021D Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with routine healing -S72021E Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with routine healing -S72021F Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72021G Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with delayed healing -S72021H Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72021J Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72021K Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with nonunion -S72021M Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with nonunion -S72021N Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72021P Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with malunion -S72021Q Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with malunion -S72021R Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72021S Displaced fracture of epiphysis (separation) (upper) of right femur, sequela -S72022A Displaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for closed fracture -S72022B Displaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for open fracture type I or II -S72022C Displaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72022D Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with routine healing -S72022E Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with routine healing -S72022F Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72022G Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with delayed healing -S72022H Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72022J Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72022K Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with nonunion -S72022M Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with nonunion -S72022N Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72022P Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with malunion -S72022Q Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with malunion -S72022R Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72022S Displaced fracture of epiphysis (separation) (upper) of left femur, sequela -S72023A Displaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for closed fracture -S72023B Displaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for open fracture type I or II -S72023C Displaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72023D Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with routine healing -S72023E Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72023F Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72023G Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72023H Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72023J Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72023K Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with nonunion -S72023M Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72023N Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72023P Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with malunion -S72023Q Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72023R Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72023S Displaced fracture of epiphysis (separation) (upper) of unspecified femur, sequela -S72024A Nondisplaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for closed fracture -S72024B Nondisplaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for open fracture type I or II -S72024C Nondisplaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72024D Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with routine healing -S72024E Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with routine healing -S72024F Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72024G Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with delayed healing -S72024H Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72024J Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72024K Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with nonunion -S72024M Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with nonunion -S72024N Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72024P Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with malunion -S72024Q Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with malunion -S72024R Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72024S Nondisplaced fracture of epiphysis (separation) (upper) of right femur, sequela -S72025A Nondisplaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for closed fracture -S72025B Nondisplaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for open fracture type I or II -S72025C Nondisplaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72025D Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with routine healing -S72025E Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with routine healing -S72025F Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72025G Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with delayed healing -S72025H Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72025J Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72025K Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with nonunion -S72025M Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with nonunion -S72025N Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72025P Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with malunion -S72025Q Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with malunion -S72025R Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72025S Nondisplaced fracture of epiphysis (separation) (upper) of left femur, sequela -S72026A Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for closed fracture -S72026B Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for open fracture type I or II -S72026C Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72026D Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with routine healing -S72026E Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72026F Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72026G Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72026H Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72026J Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72026K Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with nonunion -S72026M Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72026N Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72026P Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with malunion -S72026Q Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72026R Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72026S Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, sequela -S72031A Displaced midcervical fracture of right femur, initial encounter for closed fracture -S72031B Displaced midcervical fracture of right femur, initial encounter for open fracture type I or II -S72031C Displaced midcervical fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72031D Displaced midcervical fracture of right femur, subsequent encounter for closed fracture with routine healing -S72031E Displaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72031F Displaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72031G Displaced midcervical fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72031H Displaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72031J Displaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72031K Displaced midcervical fracture of right femur, subsequent encounter for closed fracture with nonunion -S72031M Displaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72031N Displaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72031P Displaced midcervical fracture of right femur, subsequent encounter for closed fracture with malunion -S72031Q Displaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72031R Displaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72031S Displaced midcervical fracture of right femur, sequela -S72032A Displaced midcervical fracture of left femur, initial encounter for closed fracture -S72032B Displaced midcervical fracture of left femur, initial encounter for open fracture type I or II -S72032C Displaced midcervical fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72032D Displaced midcervical fracture of left femur, subsequent encounter for closed fracture with routine healing -S72032E Displaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72032F Displaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72032G Displaced midcervical fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72032H Displaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72032J Displaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72032K Displaced midcervical fracture of left femur, subsequent encounter for closed fracture with nonunion -S72032M Displaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72032N Displaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72032P Displaced midcervical fracture of left femur, subsequent encounter for closed fracture with malunion -S72032Q Displaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72032R Displaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72032S Displaced midcervical fracture of left femur, sequela -S72033A Displaced midcervical fracture of unspecified femur, initial encounter for closed fracture -S72033B Displaced midcervical fracture of unspecified femur, initial encounter for open fracture type I or II -S72033C Displaced midcervical fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72033D Displaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72033E Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72033F Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72033G Displaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72033H Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72033J Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72033K Displaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72033M Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72033N Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72033P Displaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72033Q Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72033R Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72033S Displaced midcervical fracture of unspecified femur, sequela -S72034A Nondisplaced midcervical fracture of right femur, initial encounter for closed fracture -S72034B Nondisplaced midcervical fracture of right femur, initial encounter for open fracture type I or II -S72034C Nondisplaced midcervical fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72034D Nondisplaced midcervical fracture of right femur, subsequent encounter for closed fracture with routine healing -S72034E Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72034F Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72034G Nondisplaced midcervical fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72034H Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72034J Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72034K Nondisplaced midcervical fracture of right femur, subsequent encounter for closed fracture with nonunion -S72034M Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72034N Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72034P Nondisplaced midcervical fracture of right femur, subsequent encounter for closed fracture with malunion -S72034Q Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72034R Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72034S Nondisplaced midcervical fracture of right femur, sequela -S72035A Nondisplaced midcervical fracture of left femur, initial encounter for closed fracture -S72035B Nondisplaced midcervical fracture of left femur, initial encounter for open fracture type I or II -S72035C Nondisplaced midcervical fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72035D Nondisplaced midcervical fracture of left femur, subsequent encounter for closed fracture with routine healing -S72035E Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72035F Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72035G Nondisplaced midcervical fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72035H Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72035J Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72035K Nondisplaced midcervical fracture of left femur, subsequent encounter for closed fracture with nonunion -S72035M Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72035N Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72035P Nondisplaced midcervical fracture of left femur, subsequent encounter for closed fracture with malunion -S72035Q Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72035R Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72035S Nondisplaced midcervical fracture of left femur, sequela -S72036A Nondisplaced midcervical fracture of unspecified femur, initial encounter for closed fracture -S72036B Nondisplaced midcervical fracture of unspecified femur, initial encounter for open fracture type I or II -S72036C Nondisplaced midcervical fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72036D Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72036E Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72036F Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72036G Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72036H Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72036J Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72036K Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72036M Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72036N Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72036P Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72036Q Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72036R Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72036S Nondisplaced midcervical fracture of unspecified femur, sequela -S72041A Displaced fracture of base of neck of right femur, initial encounter for closed fracture -S72041B Displaced fracture of base of neck of right femur, initial encounter for open fracture type I or II -S72041C Displaced fracture of base of neck of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72041D Displaced fracture of base of neck of right femur, subsequent encounter for closed fracture with routine healing -S72041E Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with routine healing -S72041F Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72041G Displaced fracture of base of neck of right femur, subsequent encounter for closed fracture with delayed healing -S72041H Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72041J Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72041K Displaced fracture of base of neck of right femur, subsequent encounter for closed fracture with nonunion -S72041M Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with nonunion -S72041N Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72041P Displaced fracture of base of neck of right femur, subsequent encounter for closed fracture with malunion -S72041Q Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with malunion -S72041R Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72041S Displaced fracture of base of neck of right femur, sequela -S72042A Displaced fracture of base of neck of left femur, initial encounter for closed fracture -S72042B Displaced fracture of base of neck of left femur, initial encounter for open fracture type I or II -S72042C Displaced fracture of base of neck of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72042D Displaced fracture of base of neck of left femur, subsequent encounter for closed fracture with routine healing -S72042E Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with routine healing -S72042F Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72042G Displaced fracture of base of neck of left femur, subsequent encounter for closed fracture with delayed healing -S72042H Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72042J Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72042K Displaced fracture of base of neck of left femur, subsequent encounter for closed fracture with nonunion -S72042M Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with nonunion -S72042N Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72042P Displaced fracture of base of neck of left femur, subsequent encounter for closed fracture with malunion -S72042Q Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with malunion -S72042R Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72042S Displaced fracture of base of neck of left femur, sequela -S72043A Displaced fracture of base of neck of unspecified femur, initial encounter for closed fracture -S72043B Displaced fracture of base of neck of unspecified femur, initial encounter for open fracture type I or II -S72043C Displaced fracture of base of neck of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72043D Displaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with routine healing -S72043E Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72043F Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72043G Displaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72043H Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72043J Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72043K Displaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with nonunion -S72043M Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72043N Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72043P Displaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with malunion -S72043Q Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72043R Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72043S Displaced fracture of base of neck of unspecified femur, sequela -S72044A Nondisplaced fracture of base of neck of right femur, initial encounter for closed fracture -S72044B Nondisplaced fracture of base of neck of right femur, initial encounter for open fracture type I or II -S72044C Nondisplaced fracture of base of neck of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72044D Nondisplaced fracture of base of neck of right femur, subsequent encounter for closed fracture with routine healing -S72044E Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with routine healing -S72044F Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72044G Nondisplaced fracture of base of neck of right femur, subsequent encounter for closed fracture with delayed healing -S72044H Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72044J Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72044K Nondisplaced fracture of base of neck of right femur, subsequent encounter for closed fracture with nonunion -S72044M Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with nonunion -S72044N Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72044P Nondisplaced fracture of base of neck of right femur, subsequent encounter for closed fracture with malunion -S72044Q Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with malunion -S72044R Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72044S Nondisplaced fracture of base of neck of right femur, sequela -S72045A Nondisplaced fracture of base of neck of left femur, initial encounter for closed fracture -S72045B Nondisplaced fracture of base of neck of left femur, initial encounter for open fracture type I or II -S72045C Nondisplaced fracture of base of neck of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72045D Nondisplaced fracture of base of neck of left femur, subsequent encounter for closed fracture with routine healing -S72045E Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with routine healing -S72045F Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72045G Nondisplaced fracture of base of neck of left femur, subsequent encounter for closed fracture with delayed healing -S72045H Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72045J Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72045K Nondisplaced fracture of base of neck of left femur, subsequent encounter for closed fracture with nonunion -S72045M Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with nonunion -S72045N Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72045P Nondisplaced fracture of base of neck of left femur, subsequent encounter for closed fracture with malunion -S72045Q Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with malunion -S72045R Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72045S Nondisplaced fracture of base of neck of left femur, sequela -S72046A Nondisplaced fracture of base of neck of unspecified femur, initial encounter for closed fracture -S72046B Nondisplaced fracture of base of neck of unspecified femur, initial encounter for open fracture type I or II -S72046C Nondisplaced fracture of base of neck of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72046D Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with routine healing -S72046E Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72046F Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72046G Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72046H Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72046J Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72046K Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with nonunion -S72046M Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72046N Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72046P Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with malunion -S72046Q Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72046R Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72046S Nondisplaced fracture of base of neck of unspecified femur, sequela -S72051A Unspecified fracture of head of right femur, initial encounter for closed fracture -S72051B Unspecified fracture of head of right femur, initial encounter for open fracture type I or II -S72051C Unspecified fracture of head of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72051D Unspecified fracture of head of right femur, subsequent encounter for closed fracture with routine healing -S72051E Unspecified fracture of head of right femur, subsequent encounter for open fracture type I or II with routine healing -S72051F Unspecified fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72051G Unspecified fracture of head of right femur, subsequent encounter for closed fracture with delayed healing -S72051H Unspecified fracture of head of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72051J Unspecified fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72051K Unspecified fracture of head of right femur, subsequent encounter for closed fracture with nonunion -S72051M Unspecified fracture of head of right femur, subsequent encounter for open fracture type I or II with nonunion -S72051N Unspecified fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72051P Unspecified fracture of head of right femur, subsequent encounter for closed fracture with malunion -S72051Q Unspecified fracture of head of right femur, subsequent encounter for open fracture type I or II with malunion -S72051R Unspecified fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72051S Unspecified fracture of head of right femur, sequela -S72052A Unspecified fracture of head of left femur, initial encounter for closed fracture -S72052B Unspecified fracture of head of left femur, initial encounter for open fracture type I or II -S72052C Unspecified fracture of head of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72052D Unspecified fracture of head of left femur, subsequent encounter for closed fracture with routine healing -S72052E Unspecified fracture of head of left femur, subsequent encounter for open fracture type I or II with routine healing -S72052F Unspecified fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72052G Unspecified fracture of head of left femur, subsequent encounter for closed fracture with delayed healing -S72052H Unspecified fracture of head of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72052J Unspecified fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72052K Unspecified fracture of head of left femur, subsequent encounter for closed fracture with nonunion -S72052M Unspecified fracture of head of left femur, subsequent encounter for open fracture type I or II with nonunion -S72052N Unspecified fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72052P Unspecified fracture of head of left femur, subsequent encounter for closed fracture with malunion -S72052Q Unspecified fracture of head of left femur, subsequent encounter for open fracture type I or II with malunion -S72052R Unspecified fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72052S Unspecified fracture of head of left femur, sequela -S72059A Unspecified fracture of head of unspecified femur, initial encounter for closed fracture -S72059B Unspecified fracture of head of unspecified femur, initial encounter for open fracture type I or II -S72059C Unspecified fracture of head of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72059D Unspecified fracture of head of unspecified femur, subsequent encounter for closed fracture with routine healing -S72059E Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72059F Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72059G Unspecified fracture of head of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72059H Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72059J Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72059K Unspecified fracture of head of unspecified femur, subsequent encounter for closed fracture with nonunion -S72059M Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72059N Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72059P Unspecified fracture of head of unspecified femur, subsequent encounter for closed fracture with malunion -S72059Q Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72059R Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72059S Unspecified fracture of head of unspecified femur, sequela -S72061A Displaced articular fracture of head of right femur, initial encounter for closed fracture -S72061B Displaced articular fracture of head of right femur, initial encounter for open fracture type I or II -S72061C Displaced articular fracture of head of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72061D Displaced articular fracture of head of right femur, subsequent encounter for closed fracture with routine healing -S72061E Displaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with routine healing -S72061F Displaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72061G Displaced articular fracture of head of right femur, subsequent encounter for closed fracture with delayed healing -S72061H Displaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72061J Displaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72061K Displaced articular fracture of head of right femur, subsequent encounter for closed fracture with nonunion -S72061M Displaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with nonunion -S72061N Displaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72061P Displaced articular fracture of head of right femur, subsequent encounter for closed fracture with malunion -S72061Q Displaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with malunion -S72061R Displaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72061S Displaced articular fracture of head of right femur, sequela -S72062A Displaced articular fracture of head of left femur, initial encounter for closed fracture -S72062B Displaced articular fracture of head of left femur, initial encounter for open fracture type I or II -S72062C Displaced articular fracture of head of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72062D Displaced articular fracture of head of left femur, subsequent encounter for closed fracture with routine healing -S72062E Displaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with routine healing -S72062F Displaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72062G Displaced articular fracture of head of left femur, subsequent encounter for closed fracture with delayed healing -S72062H Displaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72062J Displaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72062K Displaced articular fracture of head of left femur, subsequent encounter for closed fracture with nonunion -S72062M Displaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with nonunion -S72062N Displaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72062P Displaced articular fracture of head of left femur, subsequent encounter for closed fracture with malunion -S72062Q Displaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with malunion -S72062R Displaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72062S Displaced articular fracture of head of left femur, sequela -S72063A Displaced articular fracture of head of unspecified femur, initial encounter for closed fracture -S72063B Displaced articular fracture of head of unspecified femur, initial encounter for open fracture type I or II -S72063C Displaced articular fracture of head of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72063D Displaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with routine healing -S72063E Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72063F Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72063G Displaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72063H Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72063J Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72063K Displaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with nonunion -S72063M Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72063N Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72063P Displaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with malunion -S72063Q Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72063R Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72063S Displaced articular fracture of head of unspecified femur, sequela -S72064A Nondisplaced articular fracture of head of right femur, initial encounter for closed fracture -S72064B Nondisplaced articular fracture of head of right femur, initial encounter for open fracture type I or II -S72064C Nondisplaced articular fracture of head of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72064D Nondisplaced articular fracture of head of right femur, subsequent encounter for closed fracture with routine healing -S72064E Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with routine healing -S72064F Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72064G Nondisplaced articular fracture of head of right femur, subsequent encounter for closed fracture with delayed healing -S72064H Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72064J Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72064K Nondisplaced articular fracture of head of right femur, subsequent encounter for closed fracture with nonunion -S72064M Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with nonunion -S72064N Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72064P Nondisplaced articular fracture of head of right femur, subsequent encounter for closed fracture with malunion -S72064Q Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with malunion -S72064R Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72064S Nondisplaced articular fracture of head of right femur, sequela -S72065A Nondisplaced articular fracture of head of left femur, initial encounter for closed fracture -S72065B Nondisplaced articular fracture of head of left femur, initial encounter for open fracture type I or II -S72065C Nondisplaced articular fracture of head of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72065D Nondisplaced articular fracture of head of left femur, subsequent encounter for closed fracture with routine healing -S72065E Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with routine healing -S72065F Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72065G Nondisplaced articular fracture of head of left femur, subsequent encounter for closed fracture with delayed healing -S72065H Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72065J Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72065K Nondisplaced articular fracture of head of left femur, subsequent encounter for closed fracture with nonunion -S72065M Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with nonunion -S72065N Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72065P Nondisplaced articular fracture of head of left femur, subsequent encounter for closed fracture with malunion -S72065Q Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with malunion -S72065R Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72065S Nondisplaced articular fracture of head of left femur, sequela -S72066A Nondisplaced articular fracture of head of unspecified femur, initial encounter for closed fracture -S72066B Nondisplaced articular fracture of head of unspecified femur, initial encounter for open fracture type I or II -S72066C Nondisplaced articular fracture of head of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72066D Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with routine healing -S72066E Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72066F Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72066G Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72066H Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72066J Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72066K Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with nonunion -S72066M Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72066N Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72066P Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with malunion -S72066Q Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72066R Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72066S Nondisplaced articular fracture of head of unspecified femur, sequela -S72091A Other fracture of head and neck of right femur, initial encounter for closed fracture -S72091B Other fracture of head and neck of right femur, initial encounter for open fracture type I or II -S72091C Other fracture of head and neck of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72091D Other fracture of head and neck of right femur, subsequent encounter for closed fracture with routine healing -S72091E Other fracture of head and neck of right femur, subsequent encounter for open fracture type I or II with routine healing -S72091F Other fracture of head and neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72091G Other fracture of head and neck of right femur, subsequent encounter for closed fracture with delayed healing -S72091H Other fracture of head and neck of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72091J Other fracture of head and neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72091K Other fracture of head and neck of right femur, subsequent encounter for closed fracture with nonunion -S72091M Other fracture of head and neck of right femur, subsequent encounter for open fracture type I or II with nonunion -S72091N Other fracture of head and neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72091P Other fracture of head and neck of right femur, subsequent encounter for closed fracture with malunion -S72091Q Other fracture of head and neck of right femur, subsequent encounter for open fracture type I or II with malunion -S72091R Other fracture of head and neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72091S Other fracture of head and neck of right femur, sequela -S72092A Other fracture of head and neck of left femur, initial encounter for closed fracture -S72092B Other fracture of head and neck of left femur, initial encounter for open fracture type I or II -S72092C Other fracture of head and neck of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72092D Other fracture of head and neck of left femur, subsequent encounter for closed fracture with routine healing -S72092E Other fracture of head and neck of left femur, subsequent encounter for open fracture type I or II with routine healing -S72092F Other fracture of head and neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72092G Other fracture of head and neck of left femur, subsequent encounter for closed fracture with delayed healing -S72092H Other fracture of head and neck of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72092J Other fracture of head and neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72092K Other fracture of head and neck of left femur, subsequent encounter for closed fracture with nonunion -S72092M Other fracture of head and neck of left femur, subsequent encounter for open fracture type I or II with nonunion -S72092N Other fracture of head and neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72092P Other fracture of head and neck of left femur, subsequent encounter for closed fracture with malunion -S72092Q Other fracture of head and neck of left femur, subsequent encounter for open fracture type I or II with malunion -S72092R Other fracture of head and neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72092S Other fracture of head and neck of left femur, sequela -S72099A Other fracture of head and neck of unspecified femur, initial encounter for closed fracture -S72099B Other fracture of head and neck of unspecified femur, initial encounter for open fracture type I or II -S72099C Other fracture of head and neck of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72099D Other fracture of head and neck of unspecified femur, subsequent encounter for closed fracture with routine healing -S72099E Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72099F Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72099G Other fracture of head and neck of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72099H Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72099J Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72099K Other fracture of head and neck of unspecified femur, subsequent encounter for closed fracture with nonunion -S72099M Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72099N Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72099P Other fracture of head and neck of unspecified femur, subsequent encounter for closed fracture with malunion -S72099Q Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72099R Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72099S Other fracture of head and neck of unspecified femur, sequela -S72101A Unspecified trochanteric fracture of right femur, initial encounter for closed fracture -S72101B Unspecified trochanteric fracture of right femur, initial encounter for open fracture type I or II -S72101C Unspecified trochanteric fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72101D Unspecified trochanteric fracture of right femur, subsequent encounter for closed fracture with routine healing -S72101E Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72101F Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72101G Unspecified trochanteric fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72101H Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72101J Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72101K Unspecified trochanteric fracture of right femur, subsequent encounter for closed fracture with nonunion -S72101M Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72101N Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72101P Unspecified trochanteric fracture of right femur, subsequent encounter for closed fracture with malunion -S72101Q Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72101R Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72101S Unspecified trochanteric fracture of right femur, sequela -S72102A Unspecified trochanteric fracture of left femur, initial encounter for closed fracture -S72102B Unspecified trochanteric fracture of left femur, initial encounter for open fracture type I or II -S72102C Unspecified trochanteric fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72102D Unspecified trochanteric fracture of left femur, subsequent encounter for closed fracture with routine healing -S72102E Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72102F Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72102G Unspecified trochanteric fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72102H Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72102J Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72102K Unspecified trochanteric fracture of left femur, subsequent encounter for closed fracture with nonunion -S72102M Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72102N Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72102P Unspecified trochanteric fracture of left femur, subsequent encounter for closed fracture with malunion -S72102Q Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72102R Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72102S Unspecified trochanteric fracture of left femur, sequela -S72109A Unspecified trochanteric fracture of unspecified femur, initial encounter for closed fracture -S72109B Unspecified trochanteric fracture of unspecified femur, initial encounter for open fracture type I or II -S72109C Unspecified trochanteric fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72109D Unspecified trochanteric fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72109E Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72109F Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72109G Unspecified trochanteric fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72109H Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72109J Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72109K Unspecified trochanteric fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72109M Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72109N Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72109P Unspecified trochanteric fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72109Q Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72109R Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72109S Unspecified trochanteric fracture of unspecified femur, sequela -S72111A Displaced fracture of greater trochanter of right femur, initial encounter for closed fracture -S72111B Displaced fracture of greater trochanter of right femur, initial encounter for open fracture type I or II -S72111C Displaced fracture of greater trochanter of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72111D Displaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with routine healing -S72111E Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with routine healing -S72111F Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72111G Displaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with delayed healing -S72111H Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72111J Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72111K Displaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with nonunion -S72111M Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with nonunion -S72111N Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72111P Displaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with malunion -S72111Q Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with malunion -S72111R Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72111S Displaced fracture of greater trochanter of right femur, sequela -S72112A Displaced fracture of greater trochanter of left femur, initial encounter for closed fracture -S72112B Displaced fracture of greater trochanter of left femur, initial encounter for open fracture type I or II -S72112C Displaced fracture of greater trochanter of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72112D Displaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with routine healing -S72112E Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with routine healing -S72112F Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72112G Displaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with delayed healing -S72112H Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72112J Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72112K Displaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with nonunion -S72112M Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with nonunion -S72112N Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72112P Displaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with malunion -S72112Q Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with malunion -S72112R Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72112S Displaced fracture of greater trochanter of left femur, sequela -S72113A Displaced fracture of greater trochanter of unspecified femur, initial encounter for closed fracture -S72113B Displaced fracture of greater trochanter of unspecified femur, initial encounter for open fracture type I or II -S72113C Displaced fracture of greater trochanter of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72113D Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with routine healing -S72113E Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72113F Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72113G Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72113H Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72113J Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72113K Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with nonunion -S72113M Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72113N Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72113P Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with malunion -S72113Q Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72113R Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72113S Displaced fracture of greater trochanter of unspecified femur, sequela -S72114A Nondisplaced fracture of greater trochanter of right femur, initial encounter for closed fracture -S72114B Nondisplaced fracture of greater trochanter of right femur, initial encounter for open fracture type I or II -S72114C Nondisplaced fracture of greater trochanter of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72114D Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with routine healing -S72114E Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with routine healing -S72114F Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72114G Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with delayed healing -S72114H Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72114J Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72114K Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with nonunion -S72114M Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with nonunion -S72114N Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72114P Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with malunion -S72114Q Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with malunion -S72114R Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72114S Nondisplaced fracture of greater trochanter of right femur, sequela -S72115A Nondisplaced fracture of greater trochanter of left femur, initial encounter for closed fracture -S72115B Nondisplaced fracture of greater trochanter of left femur, initial encounter for open fracture type I or II -S72115C Nondisplaced fracture of greater trochanter of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72115D Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with routine healing -S72115E Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with routine healing -S72115F Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72115G Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with delayed healing -S72115H Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72115J Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72115K Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with nonunion -S72115M Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with nonunion -S72115N Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72115P Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with malunion -S72115Q Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with malunion -S72115R Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72115S Nondisplaced fracture of greater trochanter of left femur, sequela -S72116A Nondisplaced fracture of greater trochanter of unspecified femur, initial encounter for closed fracture -S72116B Nondisplaced fracture of greater trochanter of unspecified femur, initial encounter for open fracture type I or II -S72116C Nondisplaced fracture of greater trochanter of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72116D Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with routine healing -S72116E Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72116F Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72116G Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72116H Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72116J Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72116K Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with nonunion -S72116M Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72116N Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72116P Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with malunion -S72116Q Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72116R Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72116S Nondisplaced fracture of greater trochanter of unspecified femur, sequela -S72121A Displaced fracture of lesser trochanter of right femur, initial encounter for closed fracture -S72121B Displaced fracture of lesser trochanter of right femur, initial encounter for open fracture type I or II -S72121C Displaced fracture of lesser trochanter of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72121D Displaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with routine healing -S72121E Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with routine healing -S72121F Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72121G Displaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with delayed healing -S72121H Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72121J Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72121K Displaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with nonunion -S72121M Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with nonunion -S72121N Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72121P Displaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with malunion -S72121Q Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with malunion -S72121R Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72121S Displaced fracture of lesser trochanter of right femur, sequela -S72122A Displaced fracture of lesser trochanter of left femur, initial encounter for closed fracture -S72122B Displaced fracture of lesser trochanter of left femur, initial encounter for open fracture type I or II -S72122C Displaced fracture of lesser trochanter of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72122D Displaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with routine healing -S72122E Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with routine healing -S72122F Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72122G Displaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with delayed healing -S72122H Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72122J Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72122K Displaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with nonunion -S72122M Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with nonunion -S72122N Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72122P Displaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with malunion -S72122Q Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with malunion -S72122R Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72122S Displaced fracture of lesser trochanter of left femur, sequela -S72123A Displaced fracture of lesser trochanter of unspecified femur, initial encounter for closed fracture -S72123B Displaced fracture of lesser trochanter of unspecified femur, initial encounter for open fracture type I or II -S72123C Displaced fracture of lesser trochanter of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72123D Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with routine healing -S72123E Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72123F Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72123G Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72123H Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72123J Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72123K Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with nonunion -S72123M Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72123N Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72123P Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with malunion -S72123Q Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72123R Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72123S Displaced fracture of lesser trochanter of unspecified femur, sequela -S72124A Nondisplaced fracture of lesser trochanter of right femur, initial encounter for closed fracture -S72124B Nondisplaced fracture of lesser trochanter of right femur, initial encounter for open fracture type I or II -S72124C Nondisplaced fracture of lesser trochanter of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72124D Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with routine healing -S72124E Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with routine healing -S72124F Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72124G Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with delayed healing -S72124H Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72124J Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72124K Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with nonunion -S72124M Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with nonunion -S72124N Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72124P Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with malunion -S72124Q Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with malunion -S72124R Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72124S Nondisplaced fracture of lesser trochanter of right femur, sequela -S72125A Nondisplaced fracture of lesser trochanter of left femur, initial encounter for closed fracture -S72125B Nondisplaced fracture of lesser trochanter of left femur, initial encounter for open fracture type I or II -S72125C Nondisplaced fracture of lesser trochanter of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72125D Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with routine healing -S72125E Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with routine healing -S72125F Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72125G Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with delayed healing -S72125H Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72125J Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72125K Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with nonunion -S72125M Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with nonunion -S72125N Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72125P Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with malunion -S72125Q Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with malunion -S72125R Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72125S Nondisplaced fracture of lesser trochanter of left femur, sequela -S72126A Nondisplaced fracture of lesser trochanter of unspecified femur, initial encounter for closed fracture -S72126B Nondisplaced fracture of lesser trochanter of unspecified femur, initial encounter for open fracture type I or II -S72126C Nondisplaced fracture of lesser trochanter of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72126D Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with routine healing -S72126E Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72126F Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72126G Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72126H Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72126J Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72126K Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with nonunion -S72126M Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72126N Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72126P Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with malunion -S72126Q Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72126R Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72126S Nondisplaced fracture of lesser trochanter of unspecified femur, sequela -S72131A Displaced apophyseal fracture of right femur, initial encounter for closed fracture -S72131B Displaced apophyseal fracture of right femur, initial encounter for open fracture type I or II -S72131C Displaced apophyseal fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72131D Displaced apophyseal fracture of right femur, subsequent encounter for closed fracture with routine healing -S72131E Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72131F Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72131G Displaced apophyseal fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72131H Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72131J Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72131K Displaced apophyseal fracture of right femur, subsequent encounter for closed fracture with nonunion -S72131M Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72131N Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72131P Displaced apophyseal fracture of right femur, subsequent encounter for closed fracture with malunion -S72131Q Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72131R Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72131S Displaced apophyseal fracture of right femur, sequela -S72132A Displaced apophyseal fracture of left femur, initial encounter for closed fracture -S72132B Displaced apophyseal fracture of left femur, initial encounter for open fracture type I or II -S72132C Displaced apophyseal fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72132D Displaced apophyseal fracture of left femur, subsequent encounter for closed fracture with routine healing -S72132E Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72132F Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72132G Displaced apophyseal fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72132H Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72132J Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72132K Displaced apophyseal fracture of left femur, subsequent encounter for closed fracture with nonunion -S72132M Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72132N Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72132P Displaced apophyseal fracture of left femur, subsequent encounter for closed fracture with malunion -S72132Q Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72132R Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72132S Displaced apophyseal fracture of left femur, sequela -S72133A Displaced apophyseal fracture of unspecified femur, initial encounter for closed fracture -S72133B Displaced apophyseal fracture of unspecified femur, initial encounter for open fracture type I or II -S72133C Displaced apophyseal fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72133D Displaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72133E Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72133F Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72133G Displaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72133H Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72133J Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72133K Displaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72133M Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72133N Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72133P Displaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72133Q Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72133R Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72133S Displaced apophyseal fracture of unspecified femur, sequela -S72134A Nondisplaced apophyseal fracture of right femur, initial encounter for closed fracture -S72134B Nondisplaced apophyseal fracture of right femur, initial encounter for open fracture type I or II -S72134C Nondisplaced apophyseal fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72134D Nondisplaced apophyseal fracture of right femur, subsequent encounter for closed fracture with routine healing -S72134E Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72134F Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72134G Nondisplaced apophyseal fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72134H Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72134J Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72134K Nondisplaced apophyseal fracture of right femur, subsequent encounter for closed fracture with nonunion -S72134M Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72134N Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72134P Nondisplaced apophyseal fracture of right femur, subsequent encounter for closed fracture with malunion -S72134Q Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72134R Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72134S Nondisplaced apophyseal fracture of right femur, sequela -S72135A Nondisplaced apophyseal fracture of left femur, initial encounter for closed fracture -S72135B Nondisplaced apophyseal fracture of left femur, initial encounter for open fracture type I or II -S72135C Nondisplaced apophyseal fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72135D Nondisplaced apophyseal fracture of left femur, subsequent encounter for closed fracture with routine healing -S72135E Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72135F Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72135G Nondisplaced apophyseal fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72135H Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72135J Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72135K Nondisplaced apophyseal fracture of left femur, subsequent encounter for closed fracture with nonunion -S72135M Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72135N Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72135P Nondisplaced apophyseal fracture of left femur, subsequent encounter for closed fracture with malunion -S72135Q Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72135R Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72135S Nondisplaced apophyseal fracture of left femur, sequela -S72136A Nondisplaced apophyseal fracture of unspecified femur, initial encounter for closed fracture -S72136B Nondisplaced apophyseal fracture of unspecified femur, initial encounter for open fracture type I or II -S72136C Nondisplaced apophyseal fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72136D Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72136E Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72136F Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72136G Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72136H Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72136J Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72136K Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72136M Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72136N Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72136P Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72136Q Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72136R Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72136S Nondisplaced apophyseal fracture of unspecified femur, sequela -S72141A Displaced intertrochanteric fracture of right femur, initial encounter for closed fracture -S72141B Displaced intertrochanteric fracture of right femur, initial encounter for open fracture type I or II -S72141C Displaced intertrochanteric fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72141D Displaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with routine healing -S72141E Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72141F Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72141G Displaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72141H Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72141J Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72141K Displaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with nonunion -S72141M Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72141N Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72141P Displaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with malunion -S72141Q Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72141R Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72141S Displaced intertrochanteric fracture of right femur, sequela -S72142A Displaced intertrochanteric fracture of left femur, initial encounter for closed fracture -S72142B Displaced intertrochanteric fracture of left femur, initial encounter for open fracture type I or II -S72142C Displaced intertrochanteric fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72142D Displaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with routine healing -S72142E Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72142F Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72142G Displaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72142H Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72142J Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72142K Displaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with nonunion -S72142M Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72142N Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72142P Displaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with malunion -S72142Q Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72142R Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72142S Displaced intertrochanteric fracture of left femur, sequela -S72143A Displaced intertrochanteric fracture of unspecified femur, initial encounter for closed fracture -S72143B Displaced intertrochanteric fracture of unspecified femur, initial encounter for open fracture type I or II -S72143C Displaced intertrochanteric fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72143D Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72143E Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72143F Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72143G Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72143H Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72143J Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72143K Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72143M Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72143N Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72143P Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72143Q Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72143R Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72143S Displaced intertrochanteric fracture of unspecified femur, sequela -S72144A Nondisplaced intertrochanteric fracture of right femur, initial encounter for closed fracture -S72144B Nondisplaced intertrochanteric fracture of right femur, initial encounter for open fracture type I or II -S72144C Nondisplaced intertrochanteric fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72144D Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with routine healing -S72144E Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72144F Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72144G Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72144H Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72144J Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72144K Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with nonunion -S72144M Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72144N Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72144P Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with malunion -S72144Q Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72144R Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72144S Nondisplaced intertrochanteric fracture of right femur, sequela -S72145A Nondisplaced intertrochanteric fracture of left femur, initial encounter for closed fracture -S72145B Nondisplaced intertrochanteric fracture of left femur, initial encounter for open fracture type I or II -S72145C Nondisplaced intertrochanteric fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72145D Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with routine healing -S72145E Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72145F Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72145G Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72145H Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72145J Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72145K Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with nonunion -S72145M Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72145N Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72145P Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with malunion -S72145Q Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72145R Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72145S Nondisplaced intertrochanteric fracture of left femur, sequela -S72146A Nondisplaced intertrochanteric fracture of unspecified femur, initial encounter for closed fracture -S72146B Nondisplaced intertrochanteric fracture of unspecified femur, initial encounter for open fracture type I or II -S72146C Nondisplaced intertrochanteric fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72146D Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72146E Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72146F Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72146G Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72146H Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72146J Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72146K Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72146M Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72146N Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72146P Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72146Q Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72146R Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72146S Nondisplaced intertrochanteric fracture of unspecified femur, sequela -S7221XA Displaced subtrochanteric fracture of right femur, initial encounter for closed fracture -S7221XB Displaced subtrochanteric fracture of right femur, initial encounter for open fracture type I or II -S7221XC Displaced subtrochanteric fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7221XD Displaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with routine healing -S7221XE Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S7221XF Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7221XG Displaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with delayed healing -S7221XH Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S7221XJ Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7221XK Displaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with nonunion -S7221XM Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S7221XN Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7221XP Displaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with malunion -S7221XQ Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S7221XR Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7221XS Displaced subtrochanteric fracture of right femur, sequela -S7222XA Displaced subtrochanteric fracture of left femur, initial encounter for closed fracture -S7222XB Displaced subtrochanteric fracture of left femur, initial encounter for open fracture type I or II -S7222XC Displaced subtrochanteric fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7222XD Displaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with routine healing -S7222XE Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S7222XF Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7222XG Displaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with delayed healing -S7222XH Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S7222XJ Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7222XK Displaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with nonunion -S7222XM Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S7222XN Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7222XP Displaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with malunion -S7222XQ Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S7222XR Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7222XS Displaced subtrochanteric fracture of left femur, sequela -S7223XA Displaced subtrochanteric fracture of unspecified femur, initial encounter for closed fracture -S7223XB Displaced subtrochanteric fracture of unspecified femur, initial encounter for open fracture type I or II -S7223XC Displaced subtrochanteric fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7223XD Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S7223XE Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S7223XF Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7223XG Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S7223XH Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S7223XJ Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7223XK Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S7223XM Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S7223XN Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7223XP Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S7223XQ Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S7223XR Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7223XS Displaced subtrochanteric fracture of unspecified femur, sequela -S7224XA Nondisplaced subtrochanteric fracture of right femur, initial encounter for closed fracture -S7224XB Nondisplaced subtrochanteric fracture of right femur, initial encounter for open fracture type I or II -S7224XC Nondisplaced subtrochanteric fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7224XD Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with routine healing -S7224XE Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S7224XF Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7224XG Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with delayed healing -S7224XH Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S7224XJ Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7224XK Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with nonunion -S7224XM Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S7224XN Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7224XP Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with malunion -S7224XQ Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S7224XR Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7224XS Nondisplaced subtrochanteric fracture of right femur, sequela -S7225XA Nondisplaced subtrochanteric fracture of left femur, initial encounter for closed fracture -S7225XB Nondisplaced subtrochanteric fracture of left femur, initial encounter for open fracture type I or II -S7225XC Nondisplaced subtrochanteric fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7225XD Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with routine healing -S7225XE Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S7225XF Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7225XG Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with delayed healing -S7225XH Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S7225XJ Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7225XK Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with nonunion -S7225XM Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S7225XN Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7225XP Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with malunion -S7225XQ Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S7225XR Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7225XS Nondisplaced subtrochanteric fracture of left femur, sequela -S7226XA Nondisplaced subtrochanteric fracture of unspecified femur, initial encounter for closed fracture -S7226XB Nondisplaced subtrochanteric fracture of unspecified femur, initial encounter for open fracture type I or II -S7226XC Nondisplaced subtrochanteric fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7226XD Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S7226XE Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S7226XF Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7226XG Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S7226XH Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S7226XJ Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7226XK Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S7226XM Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S7226XN Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7226XP Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S7226XQ Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S7226XR Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7226XS Nondisplaced subtrochanteric fracture of unspecified femur, sequela -S72301A Unspecified fracture of shaft of right femur, initial encounter for closed fracture -S72301B Unspecified fracture of shaft of right femur, initial encounter for open fracture type I or II -S72301C Unspecified fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72301D Unspecified fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72301E Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72301F Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72301G Unspecified fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72301H Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72301J Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72301K Unspecified fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72301M Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72301N Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72301P Unspecified fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72301Q Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72301R Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72301S Unspecified fracture of shaft of right femur, sequela -S72302A Unspecified fracture of shaft of left femur, initial encounter for closed fracture -S72302B Unspecified fracture of shaft of left femur, initial encounter for open fracture type I or II -S72302C Unspecified fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72302D Unspecified fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72302E Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72302F Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72302G Unspecified fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72302H Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72302J Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72302K Unspecified fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72302M Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72302N Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72302P Unspecified fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72302Q Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72302R Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72302S Unspecified fracture of shaft of left femur, sequela -S72309A Unspecified fracture of shaft of unspecified femur, initial encounter for closed fracture -S72309B Unspecified fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72309C Unspecified fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72309D Unspecified fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72309E Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72309F Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72309G Unspecified fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72309H Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72309J Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72309K Unspecified fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72309M Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72309N Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72309P Unspecified fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72309Q Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72309R Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72309S Unspecified fracture of shaft of unspecified femur, sequela -S72321A Displaced transverse fracture of shaft of right femur, initial encounter for closed fracture -S72321B Displaced transverse fracture of shaft of right femur, initial encounter for open fracture type I or II -S72321C Displaced transverse fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72321D Displaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72321E Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72321F Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72321G Displaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72321H Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72321J Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72321K Displaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72321M Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72321N Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72321P Displaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72321Q Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72321R Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72321S Displaced transverse fracture of shaft of right femur, sequela -S72322A Displaced transverse fracture of shaft of left femur, initial encounter for closed fracture -S72322B Displaced transverse fracture of shaft of left femur, initial encounter for open fracture type I or II -S72322C Displaced transverse fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72322D Displaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72322E Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72322F Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72322G Displaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72322H Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72322J Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72322K Displaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72322M Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72322N Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72322P Displaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72322Q Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72322R Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72322S Displaced transverse fracture of shaft of left femur, sequela -S72323A Displaced transverse fracture of shaft of unspecified femur, initial encounter for closed fracture -S72323B Displaced transverse fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72323C Displaced transverse fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72323D Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72323E Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72323F Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72323G Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72323H Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72323J Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72323K Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72323M Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72323N Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72323P Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72323Q Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72323R Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72323S Displaced transverse fracture of shaft of unspecified femur, sequela -S72324A Nondisplaced transverse fracture of shaft of right femur, initial encounter for closed fracture -S72324B Nondisplaced transverse fracture of shaft of right femur, initial encounter for open fracture type I or II -S72324C Nondisplaced transverse fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72324D Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72324E Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72324F Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72324G Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72324H Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72324J Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72324K Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72324M Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72324N Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72324P Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72324Q Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72324R Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72324S Nondisplaced transverse fracture of shaft of right femur, sequela -S72325A Nondisplaced transverse fracture of shaft of left femur, initial encounter for closed fracture -S72325B Nondisplaced transverse fracture of shaft of left femur, initial encounter for open fracture type I or II -S72325C Nondisplaced transverse fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72325D Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72325E Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72325F Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72325G Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72325H Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72325J Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72325K Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72325M Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72325N Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72325P Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72325Q Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72325R Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72325S Nondisplaced transverse fracture of shaft of left femur, sequela -S72326A Nondisplaced transverse fracture of shaft of unspecified femur, initial encounter for closed fracture -S72326B Nondisplaced transverse fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72326C Nondisplaced transverse fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72326D Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72326E Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72326F Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72326G Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72326H Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72326J Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72326K Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72326M Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72326N Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72326P Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72326Q Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72326R Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72326S Nondisplaced transverse fracture of shaft of unspecified femur, sequela -S72331A Displaced oblique fracture of shaft of right femur, initial encounter for closed fracture -S72331B Displaced oblique fracture of shaft of right femur, initial encounter for open fracture type I or II -S72331C Displaced oblique fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72331D Displaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72331E Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72331F Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72331G Displaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72331H Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72331J Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72331K Displaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72331M Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72331N Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72331P Displaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72331Q Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72331R Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72331S Displaced oblique fracture of shaft of right femur, sequela -S72332A Displaced oblique fracture of shaft of left femur, initial encounter for closed fracture -S72332B Displaced oblique fracture of shaft of left femur, initial encounter for open fracture type I or II -S72332C Displaced oblique fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72332D Displaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72332E Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72332F Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72332G Displaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72332H Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72332J Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72332K Displaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72332M Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72332N Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72332P Displaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72332Q Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72332R Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72332S Displaced oblique fracture of shaft of left femur, sequela -S72333A Displaced oblique fracture of shaft of unspecified femur, initial encounter for closed fracture -S72333B Displaced oblique fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72333C Displaced oblique fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72333D Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72333E Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72333F Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72333G Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72333H Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72333J Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72333K Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72333M Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72333N Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72333P Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72333Q Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72333R Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72333S Displaced oblique fracture of shaft of unspecified femur, sequela -S72334A Nondisplaced oblique fracture of shaft of right femur, initial encounter for closed fracture -S72334B Nondisplaced oblique fracture of shaft of right femur, initial encounter for open fracture type I or II -S72334C Nondisplaced oblique fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72334D Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72334E Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72334F Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72334G Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72334H Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72334J Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72334K Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72334M Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72334N Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72334P Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72334Q Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72334R Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72334S Nondisplaced oblique fracture of shaft of right femur, sequela -S72335A Nondisplaced oblique fracture of shaft of left femur, initial encounter for closed fracture -S72335B Nondisplaced oblique fracture of shaft of left femur, initial encounter for open fracture type I or II -S72335C Nondisplaced oblique fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72335D Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72335E Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72335F Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72335G Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72335H Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72335J Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72335K Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72335M Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72335N Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72335P Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72335Q Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72335R Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72335S Nondisplaced oblique fracture of shaft of left femur, sequela -S72336A Nondisplaced oblique fracture of shaft of unspecified femur, initial encounter for closed fracture -S72336B Nondisplaced oblique fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72336C Nondisplaced oblique fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72336D Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72336E Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72336F Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72336G Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72336H Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72336J Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72336K Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72336M Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72336N Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72336P Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72336Q Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72336R Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72336S Nondisplaced oblique fracture of shaft of unspecified femur, sequela -S72341A Displaced spiral fracture of shaft of right femur, initial encounter for closed fracture -S72341B Displaced spiral fracture of shaft of right femur, initial encounter for open fracture type I or II -S72341C Displaced spiral fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72341D Displaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72341E Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72341F Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72341G Displaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72341H Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72341J Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72341K Displaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72341M Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72341N Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72341P Displaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72341Q Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72341R Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72341S Displaced spiral fracture of shaft of right femur, sequela -S72342A Displaced spiral fracture of shaft of left femur, initial encounter for closed fracture -S72342B Displaced spiral fracture of shaft of left femur, initial encounter for open fracture type I or II -S72342C Displaced spiral fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72342D Displaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72342E Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72342F Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72342G Displaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72342H Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72342J Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72342K Displaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72342M Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72342N Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72342P Displaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72342Q Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72342R Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72342S Displaced spiral fracture of shaft of left femur, sequela -S72343A Displaced spiral fracture of shaft of unspecified femur, initial encounter for closed fracture -S72343B Displaced spiral fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72343C Displaced spiral fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72343D Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72343E Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72343F Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72343G Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72343H Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72343J Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72343K Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72343M Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72343N Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72343P Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72343Q Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72343R Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72343S Displaced spiral fracture of shaft of unspecified femur, sequela -S72344A Nondisplaced spiral fracture of shaft of right femur, initial encounter for closed fracture -S72344B Nondisplaced spiral fracture of shaft of right femur, initial encounter for open fracture type I or II -S72344C Nondisplaced spiral fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72344D Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72344E Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72344F Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72344G Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72344H Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72344J Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72344K Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72344M Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72344N Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72344P Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72344Q Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72344R Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72344S Nondisplaced spiral fracture of shaft of right femur, sequela -S72345A Nondisplaced spiral fracture of shaft of left femur, initial encounter for closed fracture -S72345B Nondisplaced spiral fracture of shaft of left femur, initial encounter for open fracture type I or II -S72345C Nondisplaced spiral fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72345D Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72345E Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72345F Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72345G Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72345H Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72345J Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72345K Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72345M Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72345N Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72345P Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72345Q Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72345R Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72345S Nondisplaced spiral fracture of shaft of left femur, sequela -S72346A Nondisplaced spiral fracture of shaft of unspecified femur, initial encounter for closed fracture -S72346B Nondisplaced spiral fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72346C Nondisplaced spiral fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72346D Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72346E Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72346F Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72346G Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72346H Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72346J Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72346K Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72346M Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72346N Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72346P Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72346Q Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72346R Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72346S Nondisplaced spiral fracture of shaft of unspecified femur, sequela -S72351A Displaced comminuted fracture of shaft of right femur, initial encounter for closed fracture -S72351B Displaced comminuted fracture of shaft of right femur, initial encounter for open fracture type I or II -S72351C Displaced comminuted fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72351D Displaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72351E Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72351F Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72351G Displaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72351H Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72351J Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72351K Displaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72351M Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72351N Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72351P Displaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72351Q Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72351R Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72351S Displaced comminuted fracture of shaft of right femur, sequela -S72352A Displaced comminuted fracture of shaft of left femur, initial encounter for closed fracture -S72352B Displaced comminuted fracture of shaft of left femur, initial encounter for open fracture type I or II -S72352C Displaced comminuted fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72352D Displaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72352E Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72352F Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72352G Displaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72352H Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72352J Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72352K Displaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72352M Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72352N Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72352P Displaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72352Q Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72352R Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72352S Displaced comminuted fracture of shaft of left femur, sequela -S72353A Displaced comminuted fracture of shaft of unspecified femur, initial encounter for closed fracture -S72353B Displaced comminuted fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72353C Displaced comminuted fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72353D Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72353E Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72353F Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72353G Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72353H Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72353J Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72353K Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72353M Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72353N Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72353P Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72353Q Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72353R Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72353S Displaced comminuted fracture of shaft of unspecified femur, sequela -S72354A Nondisplaced comminuted fracture of shaft of right femur, initial encounter for closed fracture -S72354B Nondisplaced comminuted fracture of shaft of right femur, initial encounter for open fracture type I or II -S72354C Nondisplaced comminuted fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72354D Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72354E Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72354F Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72354G Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72354H Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72354J Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72354K Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72354M Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72354N Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72354P Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72354Q Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72354R Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72354S Nondisplaced comminuted fracture of shaft of right femur, sequela -S72355A Nondisplaced comminuted fracture of shaft of left femur, initial encounter for closed fracture -S72355B Nondisplaced comminuted fracture of shaft of left femur, initial encounter for open fracture type I or II -S72355C Nondisplaced comminuted fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72355D Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72355E Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72355F Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72355G Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72355H Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72355J Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72355K Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72355M Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72355N Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72355P Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72355Q Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72355R Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72355S Nondisplaced comminuted fracture of shaft of left femur, sequela -S72356A Nondisplaced comminuted fracture of shaft of unspecified femur, initial encounter for closed fracture -S72356B Nondisplaced comminuted fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72356C Nondisplaced comminuted fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72356D Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72356E Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72356F Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72356G Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72356H Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72356J Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72356K Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72356M Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72356N Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72356P Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72356Q Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72356R Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72356S Nondisplaced comminuted fracture of shaft of unspecified femur, sequela -S72361A Displaced segmental fracture of shaft of right femur, initial encounter for closed fracture -S72361B Displaced segmental fracture of shaft of right femur, initial encounter for open fracture type I or II -S72361C Displaced segmental fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72361D Displaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72361E Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72361F Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72361G Displaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72361H Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72361J Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72361K Displaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72361M Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72361N Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72361P Displaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72361Q Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72361R Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72361S Displaced segmental fracture of shaft of right femur, sequela -S72362A Displaced segmental fracture of shaft of left femur, initial encounter for closed fracture -S72362B Displaced segmental fracture of shaft of left femur, initial encounter for open fracture type I or II -S72362C Displaced segmental fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72362D Displaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72362E Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72362F Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72362G Displaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72362H Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72362J Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72362K Displaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72362M Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72362N Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72362P Displaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72362Q Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72362R Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72362S Displaced segmental fracture of shaft of left femur, sequela -S72363A Displaced segmental fracture of shaft of unspecified femur, initial encounter for closed fracture -S72363B Displaced segmental fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72363C Displaced segmental fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72363D Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72363E Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72363F Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72363G Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72363H Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72363J Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72363K Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72363M Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72363N Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72363P Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72363Q Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72363R Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72363S Displaced segmental fracture of shaft of unspecified femur, sequela -S72364A Nondisplaced segmental fracture of shaft of right femur, initial encounter for closed fracture -S72364B Nondisplaced segmental fracture of shaft of right femur, initial encounter for open fracture type I or II -S72364C Nondisplaced segmental fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72364D Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72364E Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72364F Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72364G Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72364H Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72364J Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72364K Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72364M Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72364N Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72364P Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72364Q Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72364R Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72364S Nondisplaced segmental fracture of shaft of right femur, sequela -S72365A Nondisplaced segmental fracture of shaft of left femur, initial encounter for closed fracture -S72365B Nondisplaced segmental fracture of shaft of left femur, initial encounter for open fracture type I or II -S72365C Nondisplaced segmental fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72365D Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72365E Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72365F Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72365G Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72365H Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72365J Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72365K Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72365M Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72365N Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72365P Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72365Q Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72365R Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72365S Nondisplaced segmental fracture of shaft of left femur, sequela -S72366A Nondisplaced segmental fracture of shaft of unspecified femur, initial encounter for closed fracture -S72366B Nondisplaced segmental fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72366C Nondisplaced segmental fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72366D Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72366E Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72366F Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72366G Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72366H Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72366J Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72366K Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72366M Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72366N Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72366P Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72366Q Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72366R Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72366S Nondisplaced segmental fracture of shaft of unspecified femur, sequela -S72391A Other fracture of shaft of right femur, initial encounter for closed fracture -S72391B Other fracture of shaft of right femur, initial encounter for open fracture type I or II -S72391C Other fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72391D Other fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72391E Other fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72391F Other fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72391G Other fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72391H Other fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72391J Other fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72391K Other fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72391M Other fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72391N Other fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72391P Other fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72391Q Other fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72391R Other fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72391S Other fracture of shaft of right femur, sequela -S72392A Other fracture of shaft of left femur, initial encounter for closed fracture -S72392B Other fracture of shaft of left femur, initial encounter for open fracture type I or II -S72392C Other fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72392D Other fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72392E Other fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72392F Other fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72392G Other fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72392H Other fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72392J Other fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72392K Other fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72392M Other fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72392N Other fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72392P Other fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72392Q Other fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72392R Other fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72392S Other fracture of shaft of left femur, sequela -S72399A Other fracture of shaft of unspecified femur, initial encounter for closed fracture -S72399B Other fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72399C Other fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72399D Other fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72399E Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72399F Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72399G Other fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72399H Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72399J Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72399K Other fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72399M Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72399N Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72399P Other fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72399Q Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72399R Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72399S Other fracture of shaft of unspecified femur, sequela -S72401A Unspecified fracture of lower end of right femur, initial encounter for closed fracture -S72401B Unspecified fracture of lower end of right femur, initial encounter for open fracture type I or II -S72401C Unspecified fracture of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72401D Unspecified fracture of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72401E Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72401F Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72401G Unspecified fracture of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72401H Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72401J Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72401K Unspecified fracture of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72401M Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72401N Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72401P Unspecified fracture of lower end of right femur, subsequent encounter for closed fracture with malunion -S72401Q Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72401R Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72401S Unspecified fracture of lower end of right femur, sequela -S72402A Unspecified fracture of lower end of left femur, initial encounter for closed fracture -S72402B Unspecified fracture of lower end of left femur, initial encounter for open fracture type I or II -S72402C Unspecified fracture of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72402D Unspecified fracture of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72402E Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72402F Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72402G Unspecified fracture of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72402H Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72402J Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72402K Unspecified fracture of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72402M Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72402N Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72402P Unspecified fracture of lower end of left femur, subsequent encounter for closed fracture with malunion -S72402Q Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72402R Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72402S Unspecified fracture of lower end of left femur, sequela -S72409A Unspecified fracture of lower end of unspecified femur, initial encounter for closed fracture -S72409B Unspecified fracture of lower end of unspecified femur, initial encounter for open fracture type I or II -S72409C Unspecified fracture of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72409D Unspecified fracture of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72409E Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72409F Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72409G Unspecified fracture of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72409H Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72409J Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72409K Unspecified fracture of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72409M Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72409N Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72409P Unspecified fracture of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72409Q Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72409R Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72409S Unspecified fracture of lower end of unspecified femur, sequela -S72411A Displaced unspecified condyle fracture of lower end of right femur, initial encounter for closed fracture -S72411B Displaced unspecified condyle fracture of lower end of right femur, initial encounter for open fracture type I or II -S72411C Displaced unspecified condyle fracture of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72411D Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72411E Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72411F Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72411G Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72411H Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72411J Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72411K Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72411M Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72411N Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72411P Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with malunion -S72411Q Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72411R Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72411S Displaced unspecified condyle fracture of lower end of right femur, sequela -S72412A Displaced unspecified condyle fracture of lower end of left femur, initial encounter for closed fracture -S72412B Displaced unspecified condyle fracture of lower end of left femur, initial encounter for open fracture type I or II -S72412C Displaced unspecified condyle fracture of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72412D Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72412E Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72412F Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72412G Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72412H Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72412J Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72412K Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72412M Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72412N Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72412P Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with malunion -S72412Q Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72412R Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72412S Displaced unspecified condyle fracture of lower end of left femur, sequela -S72413A Displaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for closed fracture -S72413B Displaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for open fracture type I or II -S72413C Displaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72413D Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72413E Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72413F Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72413G Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72413H Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72413J Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72413K Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72413M Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72413N Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72413P Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72413Q Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72413R Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72413S Displaced unspecified condyle fracture of lower end of unspecified femur, sequela -S72414A Nondisplaced unspecified condyle fracture of lower end of right femur, initial encounter for closed fracture -S72414B Nondisplaced unspecified condyle fracture of lower end of right femur, initial encounter for open fracture type I or II -S72414C Nondisplaced unspecified condyle fracture of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72414D Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72414E Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72414F Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72414G Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72414H Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72414J Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72414K Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72414M Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72414N Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72414P Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with malunion -S72414Q Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72414R Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72414S Nondisplaced unspecified condyle fracture of lower end of right femur, sequela -S72415A Nondisplaced unspecified condyle fracture of lower end of left femur, initial encounter for closed fracture -S72415B Nondisplaced unspecified condyle fracture of lower end of left femur, initial encounter for open fracture type I or II -S72415C Nondisplaced unspecified condyle fracture of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72415D Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72415E Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72415F Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72415G Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72415H Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72415J Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72415K Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72415M Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72415N Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72415P Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with malunion -S72415Q Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72415R Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72415S Nondisplaced unspecified condyle fracture of lower end of left femur, sequela -S72416A Nondisplaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for closed fracture -S72416B Nondisplaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for open fracture type I or II -S72416C Nondisplaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72416D Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72416E Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72416F Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72416G Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72416H Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72416J Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72416K Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72416M Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72416N Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72416P Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72416Q Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72416R Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72416S Nondisplaced unspecified condyle fracture of lower end of unspecified femur, sequela -S72421A Displaced fracture of lateral condyle of right femur, initial encounter for closed fracture -S72421B Displaced fracture of lateral condyle of right femur, initial encounter for open fracture type I or II -S72421C Displaced fracture of lateral condyle of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72421D Displaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with routine healing -S72421E Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with routine healing -S72421F Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72421G Displaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with delayed healing -S72421H Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72421J Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72421K Displaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with nonunion -S72421M Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with nonunion -S72421N Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72421P Displaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with malunion -S72421Q Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with malunion -S72421R Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72421S Displaced fracture of lateral condyle of right femur, sequela -S72422A Displaced fracture of lateral condyle of left femur, initial encounter for closed fracture -S72422B Displaced fracture of lateral condyle of left femur, initial encounter for open fracture type I or II -S72422C Displaced fracture of lateral condyle of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72422D Displaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with routine healing -S72422E Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with routine healing -S72422F Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72422G Displaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with delayed healing -S72422H Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72422J Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72422K Displaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with nonunion -S72422M Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with nonunion -S72422N Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72422P Displaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with malunion -S72422Q Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with malunion -S72422R Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72422S Displaced fracture of lateral condyle of left femur, sequela -S72423A Displaced fracture of lateral condyle of unspecified femur, initial encounter for closed fracture -S72423B Displaced fracture of lateral condyle of unspecified femur, initial encounter for open fracture type I or II -S72423C Displaced fracture of lateral condyle of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72423D Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with routine healing -S72423E Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72423F Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72423G Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72423H Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72423J Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72423K Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with nonunion -S72423M Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72423N Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72423P Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with malunion -S72423Q Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72423R Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72423S Displaced fracture of lateral condyle of unspecified femur, sequela -S72424A Nondisplaced fracture of lateral condyle of right femur, initial encounter for closed fracture -S72424B Nondisplaced fracture of lateral condyle of right femur, initial encounter for open fracture type I or II -S72424C Nondisplaced fracture of lateral condyle of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72424D Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with routine healing -S72424E Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with routine healing -S72424F Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72424G Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with delayed healing -S72424H Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72424J Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72424K Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with nonunion -S72424M Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with nonunion -S72424N Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72424P Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with malunion -S72424Q Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with malunion -S72424R Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72424S Nondisplaced fracture of lateral condyle of right femur, sequela -S72425A Nondisplaced fracture of lateral condyle of left femur, initial encounter for closed fracture -S72425B Nondisplaced fracture of lateral condyle of left femur, initial encounter for open fracture type I or II -S72425C Nondisplaced fracture of lateral condyle of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72425D Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with routine healing -S72425E Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with routine healing -S72425F Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72425G Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with delayed healing -S72425H Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72425J Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72425K Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with nonunion -S72425M Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with nonunion -S72425N Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72425P Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with malunion -S72425Q Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with malunion -S72425R Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72425S Nondisplaced fracture of lateral condyle of left femur, sequela -S72426A Nondisplaced fracture of lateral condyle of unspecified femur, initial encounter for closed fracture -S72426B Nondisplaced fracture of lateral condyle of unspecified femur, initial encounter for open fracture type I or II -S72426C Nondisplaced fracture of lateral condyle of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72426D Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with routine healing -S72426E Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72426F Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72426G Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72426H Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72426J Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72426K Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with nonunion -S72426M Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72426N Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72426P Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with malunion -S72426Q Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72426R Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72426S Nondisplaced fracture of lateral condyle of unspecified femur, sequela -S72431A Displaced fracture of medial condyle of right femur, initial encounter for closed fracture -S72431B Displaced fracture of medial condyle of right femur, initial encounter for open fracture type I or II -S72431C Displaced fracture of medial condyle of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72431D Displaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with routine healing -S72431E Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with routine healing -S72431F Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72431G Displaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with delayed healing -S72431H Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72431J Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72431K Displaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with nonunion -S72431M Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with nonunion -S72431N Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72431P Displaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with malunion -S72431Q Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with malunion -S72431R Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72431S Displaced fracture of medial condyle of right femur, sequela -S72432A Displaced fracture of medial condyle of left femur, initial encounter for closed fracture -S72432B Displaced fracture of medial condyle of left femur, initial encounter for open fracture type I or II -S72432C Displaced fracture of medial condyle of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72432D Displaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with routine healing -S72432E Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with routine healing -S72432F Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72432G Displaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with delayed healing -S72432H Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72432J Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72432K Displaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with nonunion -S72432M Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with nonunion -S72432N Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72432P Displaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with malunion -S72432Q Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with malunion -S72432R Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72432S Displaced fracture of medial condyle of left femur, sequela -S72433A Displaced fracture of medial condyle of unspecified femur, initial encounter for closed fracture -S72433B Displaced fracture of medial condyle of unspecified femur, initial encounter for open fracture type I or II -S72433C Displaced fracture of medial condyle of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72433D Displaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with routine healing -S72433E Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72433F Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72433G Displaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72433H Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72433J Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72433K Displaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with nonunion -S72433M Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72433N Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72433P Displaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with malunion -S72433Q Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72433R Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72433S Displaced fracture of medial condyle of unspecified femur, sequela -S72434A Nondisplaced fracture of medial condyle of right femur, initial encounter for closed fracture -S72434B Nondisplaced fracture of medial condyle of right femur, initial encounter for open fracture type I or II -S72434C Nondisplaced fracture of medial condyle of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72434D Nondisplaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with routine healing -S72434E Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with routine healing -S72434F Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72434G Nondisplaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with delayed healing -S72434H Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72434J Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72434K Nondisplaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with nonunion -S72434M Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with nonunion -S72434N Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72434P Nondisplaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with malunion -S72434Q Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with malunion -S72434R Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72434S Nondisplaced fracture of medial condyle of right femur, sequela -S72435A Nondisplaced fracture of medial condyle of left femur, initial encounter for closed fracture -S72435B Nondisplaced fracture of medial condyle of left femur, initial encounter for open fracture type I or II -S72435C Nondisplaced fracture of medial condyle of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72435D Nondisplaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with routine healing -S72435E Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with routine healing -S72435F Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72435G Nondisplaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with delayed healing -S72435H Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72435J Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72435K Nondisplaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with nonunion -S72435M Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with nonunion -S72435N Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72435P Nondisplaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with malunion -S72435Q Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with malunion -S72435R Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72435S Nondisplaced fracture of medial condyle of left femur, sequela -S72436A Nondisplaced fracture of medial condyle of unspecified femur, initial encounter for closed fracture -S72436B Nondisplaced fracture of medial condyle of unspecified femur, initial encounter for open fracture type I or II -S72436C Nondisplaced fracture of medial condyle of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72436D Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with routine healing -S72436E Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72436F Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72436G Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72436H Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72436J Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72436K Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with nonunion -S72436M Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72436N Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72436P Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with malunion -S72436Q Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72436R Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72436S Nondisplaced fracture of medial condyle of unspecified femur, sequela -S72441A Displaced fracture of lower epiphysis (separation) of right femur, initial encounter for closed fracture -S72441B Displaced fracture of lower epiphysis (separation) of right femur, initial encounter for open fracture type I or II -S72441C Displaced fracture of lower epiphysis (separation) of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72441D Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with routine healing -S72441E Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with routine healing -S72441F Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72441G Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with delayed healing -S72441H Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72441J Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72441K Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with nonunion -S72441M Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with nonunion -S72441N Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72441P Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with malunion -S72441Q Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with malunion -S72441R Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72441S Displaced fracture of lower epiphysis (separation) of right femur, sequela -S72442A Displaced fracture of lower epiphysis (separation) of left femur, initial encounter for closed fracture -S72442B Displaced fracture of lower epiphysis (separation) of left femur, initial encounter for open fracture type I or II -S72442C Displaced fracture of lower epiphysis (separation) of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72442D Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with routine healing -S72442E Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with routine healing -S72442F Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72442G Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with delayed healing -S72442H Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72442J Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72442K Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with nonunion -S72442M Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with nonunion -S72442N Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72442P Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with malunion -S72442Q Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with malunion -S72442R Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72442S Displaced fracture of lower epiphysis (separation) of left femur, sequela -S72443A Displaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for closed fracture -S72443B Displaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for open fracture type I or II -S72443C Displaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72443D Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with routine healing -S72443E Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72443F Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72443G Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72443H Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72443J Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72443K Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with nonunion -S72443M Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72443N Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72443P Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with malunion -S72443Q Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72443R Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72443S Displaced fracture of lower epiphysis (separation) of unspecified femur, sequela -S72444A Nondisplaced fracture of lower epiphysis (separation) of right femur, initial encounter for closed fracture -S72444B Nondisplaced fracture of lower epiphysis (separation) of right femur, initial encounter for open fracture type I or II -S72444C Nondisplaced fracture of lower epiphysis (separation) of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72444D Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with routine healing -S72444E Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with routine healing -S72444F Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72444G Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with delayed healing -S72444H Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72444J Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72444K Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with nonunion -S72444M Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with nonunion -S72444N Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72444P Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with malunion -S72444Q Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with malunion -S72444R Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72444S Nondisplaced fracture of lower epiphysis (separation) of right femur, sequela -S72445A Nondisplaced fracture of lower epiphysis (separation) of left femur, initial encounter for closed fracture -S72445B Nondisplaced fracture of lower epiphysis (separation) of left femur, initial encounter for open fracture type I or II -S72445C Nondisplaced fracture of lower epiphysis (separation) of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72445D Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with routine healing -S72445E Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with routine healing -S72445F Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72445G Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with delayed healing -S72445H Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72445J Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72445K Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with nonunion -S72445M Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with nonunion -S72445N Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72445P Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with malunion -S72445Q Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with malunion -S72445R Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72445S Nondisplaced fracture of lower epiphysis (separation) of left femur, sequela -S72446A Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for closed fracture -S72446B Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for open fracture type I or II -S72446C Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72446D Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with routine healing -S72446E Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72446F Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72446G Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72446H Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72446J Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72446K Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with nonunion -S72446M Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72446N Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72446P Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with malunion -S72446Q Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72446R Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72446S Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, sequela -S72451A Displaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for closed fracture -S72451B Displaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for open fracture type I or II -S72451C Displaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72451D Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72451E Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72451F Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72451G Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72451H Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72451J Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72451K Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72451M Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72451N Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72451P Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with malunion -S72451Q Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72451R Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72451S Displaced supracondylar fracture without intracondylar extension of lower end of right femur, sequela -S72452A Displaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for closed fracture -S72452B Displaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for open fracture type I or II -S72452C Displaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72452D Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72452E Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72452F Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72452G Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72452H Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72452J Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72452K Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72452M Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72452N Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72452P Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with malunion -S72452Q Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72452R Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72452S Displaced supracondylar fracture without intracondylar extension of lower end of left femur, sequela -S72453A Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for closed fracture -S72453B Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type I or II -S72453C Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72453D Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72453E Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72453F Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72453G Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72453H Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72453J Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72453K Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72453M Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72453N Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72453P Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72453Q Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72453R Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72453S Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, sequela -S72454A Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for closed fracture -S72454B Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for open fracture type I or II -S72454C Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72454D Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72454E Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72454F Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72454G Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72454H Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72454J Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72454K Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72454M Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72454N Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72454P Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with malunion -S72454Q Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72454R Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72454S Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, sequela -S72455A Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for closed fracture -S72455B Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for open fracture type I or II -S72455C Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72455D Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72455E Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72455F Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72455G Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72455H Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72455J Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72455K Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72455M Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72455N Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72455P Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with malunion -S72455Q Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72455R Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72455S Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, sequela -S72456A Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for closed fracture -S72456B Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type I or II -S72456C Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72456D Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72456E Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72456F Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72456G Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72456H Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72456J Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72456K Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72456M Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72456N Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72456P Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72456Q Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72456R Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72456S Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, sequela -S72461A Displaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for closed fracture -S72461B Displaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for open fracture type I or II -S72461C Displaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72461D Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72461E Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72461F Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72461G Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72461H Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72461J Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72461K Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72461M Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72461N Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72461P Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with malunion -S72461Q Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72461R Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72461S Displaced supracondylar fracture with intracondylar extension of lower end of right femur, sequela -S72462A Displaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for closed fracture -S72462B Displaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for open fracture type I or II -S72462C Displaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72462D Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72462E Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72462F Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72462G Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72462H Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72462J Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72462K Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72462M Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72462N Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72462P Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with malunion -S72462Q Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72462R Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72462S Displaced supracondylar fracture with intracondylar extension of lower end of left femur, sequela -S72463A Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for closed fracture -S72463B Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type I or II -S72463C Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72463D Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72463E Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72463F Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72463G Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72463H Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72463J Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72463K Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72463M Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72463N Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72463P Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72463Q Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72463R Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72463S Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, sequela -S72464A Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for closed fracture -S72464B Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for open fracture type I or II -S72464C Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72464D Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72464E Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72464F Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72464G Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72464H Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72464J Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72464K Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72464M Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72464N Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72464P Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with malunion -S72464Q Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72464R Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72464S Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, sequela -S72465A Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for closed fracture -S72465B Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for open fracture type I or II -S72465C Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72465D Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72465E Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72465F Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72465G Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72465H Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72465J Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72465K Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72465M Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72465N Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72465P Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with malunion -S72465Q Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72465R Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72465S Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, sequela -S72466A Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for closed fracture -S72466B Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type I or II -S72466C Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72466D Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72466E Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72466F Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72466G Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72466H Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72466J Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72466K Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72466M Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72466N Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72466P Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72466Q Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72466R Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72466S Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, sequela -S72471A Torus fracture of lower end of right femur, initial encounter for closed fracture -S72471D Torus fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S72471G Torus fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S72471K Torus fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S72471P Torus fracture of lower end of right femur, subsequent encounter for fracture with malunion -S72471S Torus fracture of lower end of right femur, sequela -S72472A Torus fracture of lower end of left femur, initial encounter for closed fracture -S72472D Torus fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S72472G Torus fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S72472K Torus fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S72472P Torus fracture of lower end of left femur, subsequent encounter for fracture with malunion -S72472S Torus fracture of lower end of left femur, sequela -S72479A Torus fracture of lower end of unspecified femur, initial encounter for closed fracture -S72479D Torus fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S72479G Torus fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S72479K Torus fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S72479P Torus fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S72479S Torus fracture of lower end of unspecified femur, sequela -S72491A Other fracture of lower end of right femur, initial encounter for closed fracture -S72491B Other fracture of lower end of right femur, initial encounter for open fracture type I or II -S72491C Other fracture of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72491D Other fracture of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72491E Other fracture of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72491F Other fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72491G Other fracture of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72491H Other fracture of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72491J Other fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72491K Other fracture of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72491M Other fracture of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72491N Other fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72491P Other fracture of lower end of right femur, subsequent encounter for closed fracture with malunion -S72491Q Other fracture of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72491R Other fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72491S Other fracture of lower end of right femur, sequela -S72492A Other fracture of lower end of left femur, initial encounter for closed fracture -S72492B Other fracture of lower end of left femur, initial encounter for open fracture type I or II -S72492C Other fracture of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72492D Other fracture of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72492E Other fracture of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72492F Other fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72492G Other fracture of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72492H Other fracture of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72492J Other fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72492K Other fracture of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72492M Other fracture of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72492N Other fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72492P Other fracture of lower end of left femur, subsequent encounter for closed fracture with malunion -S72492Q Other fracture of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72492R Other fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72492S Other fracture of lower end of left femur, sequela -S72499A Other fracture of lower end of unspecified femur, initial encounter for closed fracture -S72499B Other fracture of lower end of unspecified femur, initial encounter for open fracture type I or II -S72499C Other fracture of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72499D Other fracture of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72499E Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72499F Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72499G Other fracture of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72499H Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72499J Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72499K Other fracture of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72499M Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72499N Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72499P Other fracture of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72499Q Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72499R Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72499S Other fracture of lower end of unspecified femur, sequela -S728X1A Other fracture of right femur, initial encounter for closed fracture -S728X1B Other fracture of right femur, initial encounter for open fracture type I or II -S728X1C Other fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S728X1D Other fracture of right femur, subsequent encounter for closed fracture with routine healing -S728X1E Other fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S728X1F Other fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S728X1G Other fracture of right femur, subsequent encounter for closed fracture with delayed healing -S728X1H Other fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S728X1J Other fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S728X1K Other fracture of right femur, subsequent encounter for closed fracture with nonunion -S728X1M Other fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S728X1N Other fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S728X1P Other fracture of right femur, subsequent encounter for closed fracture with malunion -S728X1Q Other fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S728X1R Other fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S728X1S Other fracture of right femur, sequela -S728X2A Other fracture of left femur, initial encounter for closed fracture -S728X2B Other fracture of left femur, initial encounter for open fracture type I or II -S728X2C Other fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S728X2D Other fracture of left femur, subsequent encounter for closed fracture with routine healing -S728X2E Other fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S728X2F Other fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S728X2G Other fracture of left femur, subsequent encounter for closed fracture with delayed healing -S728X2H Other fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S728X2J Other fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S728X2K Other fracture of left femur, subsequent encounter for closed fracture with nonunion -S728X2M Other fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S728X2N Other fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S728X2P Other fracture of left femur, subsequent encounter for closed fracture with malunion -S728X2Q Other fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S728X2R Other fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S728X2S Other fracture of left femur, sequela -S728X9A Other fracture of unspecified femur, initial encounter for closed fracture -S728X9B Other fracture of unspecified femur, initial encounter for open fracture type I or II -S728X9C Other fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S728X9D Other fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S728X9E Other fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S728X9F Other fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S728X9G Other fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S728X9H Other fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S728X9J Other fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S728X9K Other fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S728X9M Other fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S728X9N Other fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S728X9P Other fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S728X9Q Other fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S728X9R Other fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S728X9S Other fracture of unspecified femur, sequela -S7290XA Unspecified fracture of unspecified femur, initial encounter for closed fracture -S7290XB Unspecified fracture of unspecified femur, initial encounter for open fracture type I or II -S7290XC Unspecified fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7290XD Unspecified fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S7290XE Unspecified fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S7290XF Unspecified fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7290XG Unspecified fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S7290XH Unspecified fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S7290XJ Unspecified fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7290XK Unspecified fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S7290XM Unspecified fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S7290XN Unspecified fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7290XP Unspecified fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S7290XQ Unspecified fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S7290XR Unspecified fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7290XS Unspecified fracture of unspecified femur, sequela -S7291XA Unspecified fracture of right femur, initial encounter for closed fracture -S7291XB Unspecified fracture of right femur, initial encounter for open fracture type I or II -S7291XC Unspecified fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7291XD Unspecified fracture of right femur, subsequent encounter for closed fracture with routine healing -S7291XE Unspecified fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S7291XF Unspecified fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7291XG Unspecified fracture of right femur, subsequent encounter for closed fracture with delayed healing -S7291XH Unspecified fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S7291XJ Unspecified fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7291XK Unspecified fracture of right femur, subsequent encounter for closed fracture with nonunion -S7291XM Unspecified fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S7291XN Unspecified fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7291XP Unspecified fracture of right femur, subsequent encounter for closed fracture with malunion -S7291XQ Unspecified fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S7291XR Unspecified fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7291XS Unspecified fracture of right femur, sequela -S7292XA Unspecified fracture of left femur, initial encounter for closed fracture -S7292XB Unspecified fracture of left femur, initial encounter for open fracture type I or II -S7292XC Unspecified fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7292XD Unspecified fracture of left femur, subsequent encounter for closed fracture with routine healing -S7292XE Unspecified fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S7292XF Unspecified fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7292XG Unspecified fracture of left femur, subsequent encounter for closed fracture with delayed healing -S7292XH Unspecified fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S7292XJ Unspecified fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7292XK Unspecified fracture of left femur, subsequent encounter for closed fracture with nonunion -S7292XM Unspecified fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S7292XN Unspecified fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7292XP Unspecified fracture of left femur, subsequent encounter for closed fracture with malunion -S7292XQ Unspecified fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S7292XR Unspecified fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7292XS Unspecified fracture of left femur, sequela -S73001A Unspecified subluxation of right hip, initial encounter -S73001D Unspecified subluxation of right hip, subsequent encounter -S73001S Unspecified subluxation of right hip, sequela -S73002A Unspecified subluxation of left hip, initial encounter -S73002D Unspecified subluxation of left hip, subsequent encounter -S73002S Unspecified subluxation of left hip, sequela -S73003A Unspecified subluxation of unspecified hip, initial encounter -S73003D Unspecified subluxation of unspecified hip, subsequent encounter -S73003S Unspecified subluxation of unspecified hip, sequela -S73004A Unspecified dislocation of right hip, initial encounter -S73004D Unspecified dislocation of right hip, subsequent encounter -S73004S Unspecified dislocation of right hip, sequela -S73005A Unspecified dislocation of left hip, initial encounter -S73005D Unspecified dislocation of left hip, subsequent encounter -S73005S Unspecified dislocation of left hip, sequela -S73006A Unspecified dislocation of unspecified hip, initial encounter -S73006D Unspecified dislocation of unspecified hip, subsequent encounter -S73006S Unspecified dislocation of unspecified hip, sequela -S73011A Posterior subluxation of right hip, initial encounter -S73011D Posterior subluxation of right hip, subsequent encounter -S73011S Posterior subluxation of right hip, sequela -S73012A Posterior subluxation of left hip, initial encounter -S73012D Posterior subluxation of left hip, subsequent encounter -S73012S Posterior subluxation of left hip, sequela -S73013A Posterior subluxation of unspecified hip, initial encounter -S73013D Posterior subluxation of unspecified hip, subsequent encounter -S73013S Posterior subluxation of unspecified hip, sequela -S73014A Posterior dislocation of right hip, initial encounter -S73014D Posterior dislocation of right hip, subsequent encounter -S73014S Posterior dislocation of right hip, sequela -S73015A Posterior dislocation of left hip, initial encounter -S73015D Posterior dislocation of left hip, subsequent encounter -S73015S Posterior dislocation of left hip, sequela -S73016A Posterior dislocation of unspecified hip, initial encounter -S73016D Posterior dislocation of unspecified hip, subsequent encounter -S73016S Posterior dislocation of unspecified hip, sequela -S73021A Obturator subluxation of right hip, initial encounter -S73021D Obturator subluxation of right hip, subsequent encounter -S73021S Obturator subluxation of right hip, sequela -S73022A Obturator subluxation of left hip, initial encounter -S73022D Obturator subluxation of left hip, subsequent encounter -S73022S Obturator subluxation of left hip, sequela -S73023A Obturator subluxation of unspecified hip, initial encounter -S73023D Obturator subluxation of unspecified hip, subsequent encounter -S73023S Obturator subluxation of unspecified hip, sequela -S73024A Obturator dislocation of right hip, initial encounter -S73024D Obturator dislocation of right hip, subsequent encounter -S73024S Obturator dislocation of right hip, sequela -S73025A Obturator dislocation of left hip, initial encounter -S73025D Obturator dislocation of left hip, subsequent encounter -S73025S Obturator dislocation of left hip, sequela -S73026A Obturator dislocation of unspecified hip, initial encounter -S73026D Obturator dislocation of unspecified hip, subsequent encounter -S73026S Obturator dislocation of unspecified hip, sequela -S73031A Other anterior subluxation of right hip, initial encounter -S73031D Other anterior subluxation of right hip, subsequent encounter -S73031S Other anterior subluxation of right hip, sequela -S73032A Other anterior subluxation of left hip, initial encounter -S73032D Other anterior subluxation of left hip, subsequent encounter -S73032S Other anterior subluxation of left hip, sequela -S73033A Other anterior subluxation of unspecified hip, initial encounter -S73033D Other anterior subluxation of unspecified hip, subsequent encounter -S73033S Other anterior subluxation of unspecified hip, sequela -S73034A Other anterior dislocation of right hip, initial encounter -S73034D Other anterior dislocation of right hip, subsequent encounter -S73034S Other anterior dislocation of right hip, sequela -S73035A Other anterior dislocation of left hip, initial encounter -S73035D Other anterior dislocation of left hip, subsequent encounter -S73035S Other anterior dislocation of left hip, sequela -S73036A Other anterior dislocation of unspecified hip, initial encounter -S73036D Other anterior dislocation of unspecified hip, subsequent encounter -S73036S Other anterior dislocation of unspecified hip, sequela -S73041A Central subluxation of right hip, initial encounter -S73041D Central subluxation of right hip, subsequent encounter -S73041S Central subluxation of right hip, sequela -S73042A Central subluxation of left hip, initial encounter -S73042D Central subluxation of left hip, subsequent encounter -S73042S Central subluxation of left hip, sequela -S73043A Central subluxation of unspecified hip, initial encounter -S73043D Central subluxation of unspecified hip, subsequent encounter -S73043S Central subluxation of unspecified hip, sequela -S73044A Central dislocation of right hip, initial encounter -S73044D Central dislocation of right hip, subsequent encounter -S73044S Central dislocation of right hip, sequela -S73045A Central dislocation of left hip, initial encounter -S73045D Central dislocation of left hip, subsequent encounter -S73045S Central dislocation of left hip, sequela -S73046A Central dislocation of unspecified hip, initial encounter -S73046D Central dislocation of unspecified hip, subsequent encounter -S73046S Central dislocation of unspecified hip, sequela -S73101A Unspecified sprain of right hip, initial encounter -S73101D Unspecified sprain of right hip, subsequent encounter -S73101S Unspecified sprain of right hip, sequela -S73102A Unspecified sprain of left hip, initial encounter -S73102D Unspecified sprain of left hip, subsequent encounter -S73102S Unspecified sprain of left hip, sequela -S73109A Unspecified sprain of unspecified hip, initial encounter -S73109D Unspecified sprain of unspecified hip, subsequent encounter -S73109S Unspecified sprain of unspecified hip, sequela -S73111A Iliofemoral ligament sprain of right hip, initial encounter -S73111D Iliofemoral ligament sprain of right hip, subsequent encounter -S73111S Iliofemoral ligament sprain of right hip, sequela -S73112A Iliofemoral ligament sprain of left hip, initial encounter -S73112D Iliofemoral ligament sprain of left hip, subsequent encounter -S73112S Iliofemoral ligament sprain of left hip, sequela -S73119A Iliofemoral ligament sprain of unspecified hip, initial encounter -S73119D Iliofemoral ligament sprain of unspecified hip, subsequent encounter -S73119S Iliofemoral ligament sprain of unspecified hip, sequela -S73121A Ischiocapsular ligament sprain of right hip, initial encounter -S73121D Ischiocapsular ligament sprain of right hip, subsequent encounter -S73121S Ischiocapsular ligament sprain of right hip, sequela -S73122A Ischiocapsular ligament sprain of left hip, initial encounter -S73122D Ischiocapsular ligament sprain of left hip, subsequent encounter -S73122S Ischiocapsular ligament sprain of left hip, sequela -S73129A Ischiocapsular ligament sprain of unspecified hip, initial encounter -S73129D Ischiocapsular ligament sprain of unspecified hip, subsequent encounter -S73129S Ischiocapsular ligament sprain of unspecified hip, sequela -S73191A Other sprain of right hip, initial encounter -S73191D Other sprain of right hip, subsequent encounter -S73191S Other sprain of right hip, sequela -S73192A Other sprain of left hip, initial encounter -S73192D Other sprain of left hip, subsequent encounter -S73192S Other sprain of left hip, sequela -S73199A Other sprain of unspecified hip, initial encounter -S73199D Other sprain of unspecified hip, subsequent encounter -S73199S Other sprain of unspecified hip, sequela -S7400XA Injury of sciatic nerve at hip and thigh level, unspecified leg, initial encounter -S7400XD Injury of sciatic nerve at hip and thigh level, unspecified leg, subsequent encounter -S7400XS Injury of sciatic nerve at hip and thigh level, unspecified leg, sequela -S7401XA Injury of sciatic nerve at hip and thigh level, right leg, initial encounter -S7401XD Injury of sciatic nerve at hip and thigh level, right leg, subsequent encounter -S7401XS Injury of sciatic nerve at hip and thigh level, right leg, sequela -S7402XA Injury of sciatic nerve at hip and thigh level, left leg, initial encounter -S7402XD Injury of sciatic nerve at hip and thigh level, left leg, subsequent encounter -S7402XS Injury of sciatic nerve at hip and thigh level, left leg, sequela -S7410XA Injury of femoral nerve at hip and thigh level, unspecified leg, initial encounter -S7410XD Injury of femoral nerve at hip and thigh level, unspecified leg, subsequent encounter -S7410XS Injury of femoral nerve at hip and thigh level, unspecified leg, sequela -S7411XA Injury of femoral nerve at hip and thigh level, right leg, initial encounter -S7411XD Injury of femoral nerve at hip and thigh level, right leg, subsequent encounter -S7411XS Injury of femoral nerve at hip and thigh level, right leg, sequela -S7412XA Injury of femoral nerve at hip and thigh level, left leg, initial encounter -S7412XD Injury of femoral nerve at hip and thigh level, left leg, subsequent encounter -S7412XS Injury of femoral nerve at hip and thigh level, left leg, sequela -S7420XA Injury of cutaneous sensory nerve at hip and thigh level, unspecified leg, initial encounter -S7420XD Injury of cutaneous sensory nerve at hip and thigh level, unspecified leg, subsequent encounter -S7420XS Injury of cutaneous sensory nerve at hip and thigh level, unspecified leg, sequela -S7421XA Injury of cutaneous sensory nerve at hip and high level, right leg, initial encounter -S7421XD Injury of cutaneous sensory nerve at hip and high level, right leg, subsequent encounter -S7421XS Injury of cutaneous sensory nerve at hip and high level, right leg, sequela -S7422XA Injury of cutaneous sensory nerve at hip and thigh level, left leg, initial encounter -S7422XD Injury of cutaneous sensory nerve at hip and thigh level, left leg, subsequent encounter -S7422XS Injury of cutaneous sensory nerve at hip and thigh level, left leg, sequela -S748X1A Injury of other nerves at hip and thigh level, right leg, initial encounter -S748X1D Injury of other nerves at hip and thigh level, right leg, subsequent encounter -S748X1S Injury of other nerves at hip and thigh level, right leg, sequela -S748X2A Injury of other nerves at hip and thigh level, left leg, initial encounter -S748X2D Injury of other nerves at hip and thigh level, left leg, subsequent encounter -S748X2S Injury of other nerves at hip and thigh level, left leg, sequela -S748X9A Injury of other nerves at hip and thigh level, unspecified leg, initial encounter -S748X9D Injury of other nerves at hip and thigh level, unspecified leg, subsequent encounter -S748X9S Injury of other nerves at hip and thigh level, unspecified leg, sequela -S7490XA Injury of unspecified nerve at hip and thigh level, unspecified leg, initial encounter -S7490XD Injury of unspecified nerve at hip and thigh level, unspecified leg, subsequent encounter -S7490XS Injury of unspecified nerve at hip and thigh level, unspecified leg, sequela -S7491XA Injury of unspecified nerve at hip and thigh level, right leg, initial encounter -S7491XD Injury of unspecified nerve at hip and thigh level, right leg, subsequent encounter -S7491XS Injury of unspecified nerve at hip and thigh level, right leg, sequela -S7492XA Injury of unspecified nerve at hip and thigh level, left leg, initial encounter -S7492XD Injury of unspecified nerve at hip and thigh level, left leg, subsequent encounter -S7492XS Injury of unspecified nerve at hip and thigh level, left leg, sequela -S75001A Unspecified injury of femoral artery, right leg, initial encounter -S75001D Unspecified injury of femoral artery, right leg, subsequent encounter -S75001S Unspecified injury of femoral artery, right leg, sequela -S75002A Unspecified injury of femoral artery, left leg, initial encounter -S75002D Unspecified injury of femoral artery, left leg, subsequent encounter -S75002S Unspecified injury of femoral artery, left leg, sequela -S75009A Unspecified injury of femoral artery, unspecified leg, initial encounter -S75009D Unspecified injury of femoral artery, unspecified leg, subsequent encounter -S75009S Unspecified injury of femoral artery, unspecified leg, sequela -S75011A Minor laceration of femoral artery, right leg, initial encounter -S75011D Minor laceration of femoral artery, right leg, subsequent encounter -S75011S Minor laceration of femoral artery, right leg, sequela -S75012A Minor laceration of femoral artery, left leg, initial encounter -S75012D Minor laceration of femoral artery, left leg, subsequent encounter -S75012S Minor laceration of femoral artery, left leg, sequela -S75019A Minor laceration of femoral artery, unspecified leg, initial encounter -S75019D Minor laceration of femoral artery, unspecified leg, subsequent encounter -S75019S Minor laceration of femoral artery, unspecified leg, sequela -S75021A Major laceration of femoral artery, right leg, initial encounter -S75021D Major laceration of femoral artery, right leg, subsequent encounter -S75021S Major laceration of femoral artery, right leg, sequela -S75022A Major laceration of femoral artery, left leg, initial encounter -S75022D Major laceration of femoral artery, left leg, subsequent encounter -S75022S Major laceration of femoral artery, left leg, sequela -S75029A Major laceration of femoral artery, unspecified leg, initial encounter -S75029D Major laceration of femoral artery, unspecified leg, subsequent encounter -S75029S Major laceration of femoral artery, unspecified leg, sequela -S75091A Other specified injury of femoral artery, right leg, initial encounter -S75091D Other specified injury of femoral artery, right leg, subsequent encounter -S75091S Other specified injury of femoral artery, right leg, sequela -S75092A Other specified injury of femoral artery, left leg, initial encounter -S75092D Other specified injury of femoral artery, left leg, subsequent encounter -S75092S Other specified injury of femoral artery, left leg, sequela -S75099A Other specified injury of femoral artery, unspecified leg, initial encounter -S75099D Other specified injury of femoral artery, unspecified leg, subsequent encounter -S75099S Other specified injury of femoral artery, unspecified leg, sequela -S75101A Unspecified injury of femoral vein at hip and thigh level, right leg, initial encounter -S75101D Unspecified injury of femoral vein at hip and thigh level, right leg, subsequent encounter -S75101S Unspecified injury of femoral vein at hip and thigh level, right leg, sequela -S75102A Unspecified injury of femoral vein at hip and thigh level, left leg, initial encounter -S75102D Unspecified injury of femoral vein at hip and thigh level, left leg, subsequent encounter -S75102S Unspecified injury of femoral vein at hip and thigh level, left leg, sequela -S75109A Unspecified injury of femoral vein at hip and thigh level, unspecified leg, initial encounter -S75109D Unspecified injury of femoral vein at hip and thigh level, unspecified leg, subsequent encounter -S75109S Unspecified injury of femoral vein at hip and thigh level, unspecified leg, sequela -S75111A Minor laceration of femoral vein at hip and thigh level, right leg, initial encounter -S75111D Minor laceration of femoral vein at hip and thigh level, right leg, subsequent encounter -S75111S Minor laceration of femoral vein at hip and thigh level, right leg, sequela -S75112A Minor laceration of femoral vein at hip and thigh level, left leg, initial encounter -S75112D Minor laceration of femoral vein at hip and thigh level, left leg, subsequent encounter -S75112S Minor laceration of femoral vein at hip and thigh level, left leg, sequela -S75119A Minor laceration of femoral vein at hip and thigh level, unspecified leg, initial encounter -S75119D Minor laceration of femoral vein at hip and thigh level, unspecified leg, subsequent encounter -S75119S Minor laceration of femoral vein at hip and thigh level, unspecified leg, sequela -S75121A Major laceration of femoral vein at hip and thigh level, right leg, initial encounter -S75121D Major laceration of femoral vein at hip and thigh level, right leg, subsequent encounter -S75121S Major laceration of femoral vein at hip and thigh level, right leg, sequela -S75122A Major laceration of femoral vein at hip and thigh level, left leg, initial encounter -S75122D Major laceration of femoral vein at hip and thigh level, left leg, subsequent encounter -S75122S Major laceration of femoral vein at hip and thigh level, left leg, sequela -S75129A Major laceration of femoral vein at hip and thigh level, unspecified leg, initial encounter -S75129D Major laceration of femoral vein at hip and thigh level, unspecified leg, subsequent encounter -S75129S Major laceration of femoral vein at hip and thigh level, unspecified leg, sequela -S75191A Other specified injury of femoral vein at hip and thigh level, right leg, initial encounter -S75191D Other specified injury of femoral vein at hip and thigh level, right leg, subsequent encounter -S75191S Other specified injury of femoral vein at hip and thigh level, right leg, sequela -S75192A Other specified injury of femoral vein at hip and thigh level, left leg, initial encounter -S75192D Other specified injury of femoral vein at hip and thigh level, left leg, subsequent encounter -S75192S Other specified injury of femoral vein at hip and thigh level, left leg, sequela -S75199A Other specified injury of femoral vein at hip and thigh level, unspecified leg, initial encounter -S75199D Other specified injury of femoral vein at hip and thigh level, unspecified leg, subsequent encounter -S75199S Other specified injury of femoral vein at hip and thigh level, unspecified leg, sequela -S75201A Unspecified injury of greater saphenous vein at hip and thigh level, right leg, initial encounter -S75201D Unspecified injury of greater saphenous vein at hip and thigh level, right leg, subsequent encounter -S75201S Unspecified injury of greater saphenous vein at hip and thigh level, right leg, sequela -S75202A Unspecified injury of greater saphenous vein at hip and thigh level, left leg, initial encounter -S75202D Unspecified injury of greater saphenous vein at hip and thigh level, left leg, subsequent encounter -S75202S Unspecified injury of greater saphenous vein at hip and thigh level, left leg, sequela -S75209A Unspecified injury of greater saphenous vein at hip and thigh level, unspecified leg, initial encounter -S75209D Unspecified injury of greater saphenous vein at hip and thigh level, unspecified leg, subsequent encounter -S75209S Unspecified injury of greater saphenous vein at hip and thigh level, unspecified leg, sequela -S75211A Minor laceration of greater saphenous vein at hip and thigh level, right leg, initial encounter -S75211D Minor laceration of greater saphenous vein at hip and thigh level, right leg, subsequent encounter -S75211S Minor laceration of greater saphenous vein at hip and thigh level, right leg, sequela -S75212A Minor laceration of greater saphenous vein at hip and thigh level, left leg, initial encounter -S75212D Minor laceration of greater saphenous vein at hip and thigh level, left leg, subsequent encounter -S75212S Minor laceration of greater saphenous vein at hip and thigh level, left leg, sequela -S75219A Minor laceration of greater saphenous vein at hip and thigh level, unspecified leg, initial encounter -S75219D Minor laceration of greater saphenous vein at hip and thigh level, unspecified leg, subsequent encounter -S75219S Minor laceration of greater saphenous vein at hip and thigh level, unspecified leg, sequela -S75221A Major laceration of greater saphenous vein at hip and thigh level, right leg, initial encounter -S75221D Major laceration of greater saphenous vein at hip and thigh level, right leg, subsequent encounter -S75221S Major laceration of greater saphenous vein at hip and thigh level, right leg, sequela -S75222A Major laceration of greater saphenous vein at hip and thigh level, left leg, initial encounter -S75222D Major laceration of greater saphenous vein at hip and thigh level, left leg, subsequent encounter -S75222S Major laceration of greater saphenous vein at hip and thigh level, left leg, sequela -S75229A Major laceration of greater saphenous vein at hip and thigh level, unspecified leg, initial encounter -S75229D Major laceration of greater saphenous vein at hip and thigh level, unspecified leg, subsequent encounter -S75229S Major laceration of greater saphenous vein at hip and thigh level, unspecified leg, sequela -S75291A Other specified injury of greater saphenous vein at hip and thigh level, right leg, initial encounter -S75291D Other specified injury of greater saphenous vein at hip and thigh level, right leg, subsequent encounter -S75291S Other specified injury of greater saphenous vein at hip and thigh level, right leg, sequela -S75292A Other specified injury of greater saphenous vein at hip and thigh level, left leg, initial encounter -S75292D Other specified injury of greater saphenous vein at hip and thigh level, left leg, subsequent encounter -S75292S Other specified injury of greater saphenous vein at hip and thigh level, left leg, sequela -S75299A Other specified injury of greater saphenous vein at hip and thigh level, unspecified leg, initial encounter -S75299D Other specified injury of greater saphenous vein at hip and thigh level, unspecified leg, subsequent encounter -S75299S Other specified injury of greater saphenous vein at hip and thigh level, unspecified leg, sequela -S75801A Unspecified injury of other blood vessels at hip and thigh level, right leg, initial encounter -S75801D Unspecified injury of other blood vessels at hip and thigh level, right leg, subsequent encounter -S75801S Unspecified injury of other blood vessels at hip and thigh level, right leg, sequela -S75802A Unspecified injury of other blood vessels at hip and thigh level, left leg, initial encounter -S75802D Unspecified injury of other blood vessels at hip and thigh level, left leg, subsequent encounter -S75802S Unspecified injury of other blood vessels at hip and thigh level, left leg, sequela -S75809A Unspecified injury of other blood vessels at hip and thigh level, unspecified leg, initial encounter -S75809D Unspecified injury of other blood vessels at hip and thigh level, unspecified leg, subsequent encounter -S75809S Unspecified injury of other blood vessels at hip and thigh level, unspecified leg, sequela -S75811A Laceration of other blood vessels at hip and thigh level, right leg, initial encounter -S75811D Laceration of other blood vessels at hip and thigh level, right leg, subsequent encounter -S75811S Laceration of other blood vessels at hip and thigh level, right leg, sequela -S75812A Laceration of other blood vessels at hip and thigh level, left leg, initial encounter -S75812D Laceration of other blood vessels at hip and thigh level, left leg, subsequent encounter -S75812S Laceration of other blood vessels at hip and thigh level, left leg, sequela -S75819A Laceration of other blood vessels at hip and thigh level, unspecified leg, initial encounter -S75819D Laceration of other blood vessels at hip and thigh level, unspecified leg, subsequent encounter -S75819S Laceration of other blood vessels at hip and thigh level, unspecified leg, sequela -S75891A Other specified injury of other blood vessels at hip and thigh level, right leg, initial encounter -S75891D Other specified injury of other blood vessels at hip and thigh level, right leg, subsequent encounter -S75891S Other specified injury of other blood vessels at hip and thigh level, right leg, sequela -S75892A Other specified injury of other blood vessels at hip and thigh level, left leg, initial encounter -S75892D Other specified injury of other blood vessels at hip and thigh level, left leg, subsequent encounter -S75892S Other specified injury of other blood vessels at hip and thigh level, left leg, sequela -S75899A Other specified injury of other blood vessels at hip and thigh level, unspecified leg, initial encounter -S75899D Other specified injury of other blood vessels at hip and thigh level, unspecified leg, subsequent encounter -S75899S Other specified injury of other blood vessels at hip and thigh level, unspecified leg, sequela -S75901A Unspecified injury of unspecified blood vessel at hip and thigh level, right leg, initial encounter -S75901D Unspecified injury of unspecified blood vessel at hip and thigh level, right leg, subsequent encounter -S75901S Unspecified injury of unspecified blood vessel at hip and thigh level, right leg, sequela -S75902A Unspecified injury of unspecified blood vessel at hip and thigh level, left leg, initial encounter -S75902D Unspecified injury of unspecified blood vessel at hip and thigh level, left leg, subsequent encounter -S75902S Unspecified injury of unspecified blood vessel at hip and thigh level, left leg, sequela -S75909A Unspecified injury of unspecified blood vessel at hip and thigh level, unspecified leg, initial encounter -S75909D Unspecified injury of unspecified blood vessel at hip and thigh level, unspecified leg, subsequent encounter -S75909S Unspecified injury of unspecified blood vessel at hip and thigh level, unspecified leg, sequela -S75911A Laceration of unspecified blood vessel at hip and thigh level, right leg, initial encounter -S75911D Laceration of unspecified blood vessel at hip and thigh level, right leg, subsequent encounter -S75911S Laceration of unspecified blood vessel at hip and thigh level, right leg, sequela -S75912A Laceration of unspecified blood vessel at hip and thigh level, left leg, initial encounter -S75912D Laceration of unspecified blood vessel at hip and thigh level, left leg, subsequent encounter -S75912S Laceration of unspecified blood vessel at hip and thigh level, left leg, sequela -S75919A Laceration of unspecified blood vessel at hip and thigh level, unspecified leg, initial encounter -S75919D Laceration of unspecified blood vessel at hip and thigh level, unspecified leg, subsequent encounter -S75919S Laceration of unspecified blood vessel at hip and thigh level, unspecified leg, sequela -S75991A Other specified injury of unspecified blood vessel at hip and thigh level, right leg, initial encounter -S75991D Other specified injury of unspecified blood vessel at hip and thigh level, right leg, subsequent encounter -S75991S Other specified injury of unspecified blood vessel at hip and thigh level, right leg, sequela -S75992A Other specified injury of unspecified blood vessel at hip and thigh level, left leg, initial encounter -S75992D Other specified injury of unspecified blood vessel at hip and thigh level, left leg, subsequent encounter -S75992S Other specified injury of unspecified blood vessel at hip and thigh level, left leg, sequela -S75999A Other specified injury of unspecified blood vessel at hip and thigh level, unspecified leg, initial encounter -S75999D Other specified injury of unspecified blood vessel at hip and thigh level, unspecified leg, subsequent encounter -S75999S Other specified injury of unspecified blood vessel at hip and thigh level, unspecified leg, sequela -S76001A Unspecified injury of muscle, fascia and tendon of right hip, initial encounter -S76001D Unspecified injury of muscle, fascia and tendon of right hip, subsequent encounter -S76001S Unspecified injury of muscle, fascia and tendon of right hip, sequela -S76002A Unspecified injury of muscle, fascia and tendon of left hip, initial encounter -S76002D Unspecified injury of muscle, fascia and tendon of left hip, subsequent encounter -S76002S Unspecified injury of muscle, fascia and tendon of left hip, sequela -S76009A Unspecified injury of muscle, fascia and tendon of unspecified hip, initial encounter -S76009D Unspecified injury of muscle, fascia and tendon of unspecified hip, subsequent encounter -S76009S Unspecified injury of muscle, fascia and tendon of unspecified hip, sequela -S76011A Strain of muscle, fascia and tendon of right hip, initial encounter -S76011D Strain of muscle, fascia and tendon of right hip, subsequent encounter -S76011S Strain of muscle, fascia and tendon of right hip, sequela -S76012A Strain of muscle, fascia and tendon of left hip, initial encounter -S76012D Strain of muscle, fascia and tendon of left hip, subsequent encounter -S76012S Strain of muscle, fascia and tendon of left hip, sequela -S76019A Strain of muscle, fascia and tendon of unspecified hip, initial encounter -S76019D Strain of muscle, fascia and tendon of unspecified hip, subsequent encounter -S76019S Strain of muscle, fascia and tendon of unspecified hip, sequela -S76021A Laceration of muscle, fascia and tendon of right hip, initial encounter -S76021D Laceration of muscle, fascia and tendon of right hip, subsequent encounter -S76021S Laceration of muscle, fascia and tendon of right hip, sequela -S76022A Laceration of muscle, fascia and tendon of left hip, initial encounter -S76022D Laceration of muscle, fascia and tendon of left hip, subsequent encounter -S76022S Laceration of muscle, fascia and tendon of left hip, sequela -S76029A Laceration of muscle, fascia and tendon of unspecified hip, initial encounter -S76029D Laceration of muscle, fascia and tendon of unspecified hip, subsequent encounter -S76029S Laceration of muscle, fascia and tendon of unspecified hip, sequela -S76091A Other specified injury of muscle, fascia and tendon of right hip, initial encounter -S76091D Other specified injury of muscle, fascia and tendon of right hip, subsequent encounter -S76091S Other specified injury of muscle, fascia and tendon of right hip, sequela -S76092A Other specified injury of muscle, fascia and tendon of left hip, initial encounter -S76092D Other specified injury of muscle, fascia and tendon of left hip, subsequent encounter -S76092S Other specified injury of muscle, fascia and tendon of left hip, sequela -S76099A Other specified injury of muscle, fascia and tendon of unspecified hip, initial encounter -S76099D Other specified injury of muscle, fascia and tendon of unspecified hip, subsequent encounter -S76099S Other specified injury of muscle, fascia and tendon of unspecified hip, sequela -S76101A Unspecified injury of right quadriceps muscle, fascia and tendon, initial encounter -S76101D Unspecified injury of right quadriceps muscle, fascia and tendon, subsequent encounter -S76101S Unspecified injury of right quadriceps muscle, fascia and tendon, sequela -S76102A Unspecified injury of left quadriceps muscle, fascia and tendon, initial encounter -S76102D Unspecified injury of left quadriceps muscle, fascia and tendon, subsequent encounter -S76102S Unspecified injury of left quadriceps muscle, fascia and tendon, sequela -S76109A Unspecified injury of unspecified quadriceps muscle, fascia and tendon, initial encounter -S76109D Unspecified injury of unspecified quadriceps muscle, fascia and tendon, subsequent encounter -S76109S Unspecified injury of unspecified quadriceps muscle, fascia and tendon, sequela -S76111A Strain of right quadriceps muscle, fascia and tendon, initial encounter -S76111D Strain of right quadriceps muscle, fascia and tendon, subsequent encounter -S76111S Strain of right quadriceps muscle, fascia and tendon, sequela -S76112A Strain of left quadriceps muscle, fascia and tendon, initial encounter -S76112D Strain of left quadriceps muscle, fascia and tendon, subsequent encounter -S76112S Strain of left quadriceps muscle, fascia and tendon, sequela -S76119A Strain of unspecified quadriceps muscle, fascia and tendon, initial encounter -S76119D Strain of unspecified quadriceps muscle, fascia and tendon, subsequent encounter -S76119S Strain of unspecified quadriceps muscle, fascia and tendon, sequela -S76121A Laceration of right quadriceps muscle, fascia and tendon, initial encounter -S76121D Laceration of right quadriceps muscle, fascia and tendon, subsequent encounter -S76121S Laceration of right quadriceps muscle, fascia and tendon, sequela -S76122A Laceration of left quadriceps muscle, fascia and tendon, initial encounter -S76122D Laceration of left quadriceps muscle, fascia and tendon, subsequent encounter -S76122S Laceration of left quadriceps muscle, fascia and tendon, sequela -S76129A Laceration of unspecified quadriceps muscle, fascia and tendon, initial encounter -S76129D Laceration of unspecified quadriceps muscle, fascia and tendon, subsequent encounter -S76129S Laceration of unspecified quadriceps muscle, fascia and tendon, sequela -S76191A Other specified injury of right quadriceps muscle, fascia and tendon, initial encounter -S76191D Other specified injury of right quadriceps muscle, fascia and tendon, subsequent encounter -S76191S Other specified injury of right quadriceps muscle, fascia and tendon, sequela -S76192A Other specified injury of left quadriceps muscle, fascia and tendon, initial encounter -S76192D Other specified injury of left quadriceps muscle, fascia and tendon, subsequent encounter -S76192S Other specified injury of left quadriceps muscle, fascia and tendon, sequela -S76199A Other specified injury of unspecified quadriceps muscle, fascia and tendon, initial encounter -S76199D Other specified injury of unspecified quadriceps muscle, fascia and tendon, subsequent encounter -S76199S Other specified injury of unspecified quadriceps muscle, fascia and tendon, sequela -S76201A Unspecified injury of adductor muscle, fascia and tendon of right thigh, initial encounter -S76201D Unspecified injury of adductor muscle, fascia and tendon of right thigh, subsequent encounter -S76201S Unspecified injury of adductor muscle, fascia and tendon of right thigh, sequela -S76202A Unspecified injury of adductor muscle, fascia and tendon of left thigh, initial encounter -S76202D Unspecified injury of adductor muscle, fascia and tendon of left thigh, subsequent encounter -S76202S Unspecified injury of adductor muscle, fascia and tendon of left thigh, sequela -S76209A Unspecified injury of adductor muscle, fascia and tendon of unspecified thigh, initial encounter -S76209D Unspecified injury of adductor muscle, fascia and tendon of unspecified thigh, subsequent encounter -S76209S Unspecified injury of adductor muscle, fascia and tendon of unspecified thigh, sequela -S76211A Strain of adductor muscle, fascia and tendon of right thigh, initial encounter -S76211D Strain of adductor muscle, fascia and tendon of right thigh, subsequent encounter -S76211S Strain of adductor muscle, fascia and tendon of right thigh, sequela -S76212A Strain of adductor muscle, fascia and tendon of left thigh, initial encounter -S76212D Strain of adductor muscle, fascia and tendon of left thigh, subsequent encounter -S76212S Strain of adductor muscle, fascia and tendon of left thigh, sequela -S76219A Strain of adductor muscle, fascia and tendon of unspecified thigh, initial encounter -S76219D Strain of adductor muscle, fascia and tendon of unspecified thigh, subsequent encounter -S76219S Strain of adductor muscle, fascia and tendon of unspecified thigh, sequela -S76221A Laceration of adductor muscle, fascia and tendon of right thigh, initial encounter -S76221D Laceration of adductor muscle, fascia and tendon of right thigh, subsequent encounter -S76221S Laceration of adductor muscle, fascia and tendon of right thigh, sequela -S76222A Laceration of adductor muscle, fascia and tendon of left thigh, initial encounter -S76222D Laceration of adductor muscle, fascia and tendon of left thigh, subsequent encounter -S76222S Laceration of adductor muscle, fascia and tendon of left thigh, sequela -S76229A Laceration of adductor muscle, fascia and tendon of unspecified thigh, initial encounter -S76229D Laceration of adductor muscle, fascia and tendon of unspecified thigh, subsequent encounter -S76229S Laceration of adductor muscle, fascia and tendon of unspecified thigh, sequela -S76291A Other injury of adductor muscle, fascia and tendon of right thigh, initial encounter -S76291D Other injury of adductor muscle, fascia and tendon of right thigh, subsequent encounter -S76291S Other injury of adductor muscle, fascia and tendon of right thigh, sequela -S76292A Other injury of adductor muscle, fascia and tendon of left thigh, initial encounter -S76292D Other injury of adductor muscle, fascia and tendon of left thigh, subsequent encounter -S76292S Other injury of adductor muscle, fascia and tendon of left thigh, sequela -S76299A Other injury of adductor muscle, fascia and tendon of unspecified thigh, initial encounter -S76299D Other injury of adductor muscle, fascia and tendon of unspecified thigh, subsequent encounter -S76299S Other injury of adductor muscle, fascia and tendon of unspecified thigh, sequela -S76301A Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, initial encounter -S76301D Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, subsequent encounter -S76301S Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, sequela -S76302A Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, initial encounter -S76302D Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, subsequent encounter -S76302S Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, sequela -S76309A Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, initial encounter -S76309D Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, subsequent encounter -S76309S Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, sequela -S76311A Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, initial encounter -S76311D Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, subsequent encounter -S76311S Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, sequela -S76312A Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, initial encounter -S76312D Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, subsequent encounter -S76312S Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, sequela -S76319A Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, initial encounter -S76319D Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, subsequent encounter -S76319S Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, sequela -S76321A Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, initial encounter -S76321D Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, subsequent encounter -S76321S Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, sequela -S76322A Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, initial encounter -S76322D Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, subsequent encounter -S76322S Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, sequela -S76329A Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, initial encounter -S76329D Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, subsequent encounter -S76329S Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, sequela -S76391A Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, initial encounter -S76391D Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, subsequent encounter -S76391S Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, sequela -S76392A Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, initial encounter -S76392D Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, subsequent encounter -S76392S Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, sequela -S76399A Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, initial encounter -S76399D Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, subsequent encounter -S76399S Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, sequela -S76801A Unspecified injury of other specified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76801D Unspecified injury of other specified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76801S Unspecified injury of other specified muscles, fascia and tendons at thigh level, right thigh, sequela -S76802A Unspecified injury of other specified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76802D Unspecified injury of other specified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76802S Unspecified injury of other specified muscles, fascia and tendons at thigh level, left thigh, sequela -S76809A Unspecified injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76809D Unspecified injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76809S Unspecified injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76811A Strain of other specified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76811D Strain of other specified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76811S Strain of other specified muscles, fascia and tendons at thigh level, right thigh, sequela -S76812A Strain of other specified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76812D Strain of other specified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76812S Strain of other specified muscles, fascia and tendons at thigh level, left thigh, sequela -S76819A Strain of other specified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76819D Strain of other specified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76819S Strain of other specified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76821A Laceration of other specified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76821D Laceration of other specified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76821S Laceration of other specified muscles, fascia and tendons at thigh level, right thigh, sequela -S76822A Laceration of other specified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76822D Laceration of other specified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76822S Laceration of other specified muscles, fascia and tendons at thigh level, left thigh, sequela -S76829A Laceration of other specified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76829D Laceration of other specified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76829S Laceration of other specified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76891A Other injury of other specified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76891D Other injury of other specified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76891S Other injury of other specified muscles, fascia and tendons at thigh level, right thigh, sequela -S76892A Other injury of other specified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76892D Other injury of other specified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76892S Other injury of other specified muscles, fascia and tendons at thigh level, left thigh, sequela -S76899A Other injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76899D Other injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76899S Other injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76901A Unspecified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76901D Unspecified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76901S Unspecified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, sequela -S76902A Unspecified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76902D Unspecified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76902S Unspecified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, sequela -S76909A Unspecified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76909D Unspecified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76909S Unspecified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76911A Strain of unspecified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76911D Strain of unspecified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76911S Strain of unspecified muscles, fascia and tendons at thigh level, right thigh, sequela -S76912A Strain of unspecified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76912D Strain of unspecified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76912S Strain of unspecified muscles, fascia and tendons at thigh level, left thigh, sequela -S76919A Strain of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76919D Strain of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76919S Strain of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76921A Laceration of unspecified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76921D Laceration of unspecified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76921S Laceration of unspecified muscles, fascia and tendons at thigh level, right thigh, sequela -S76922A Laceration of unspecified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76922D Laceration of unspecified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76922S Laceration of unspecified muscles, fascia and tendons at thigh level, left thigh, sequela -S76929A Laceration of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76929D Laceration of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76929S Laceration of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76991A Other specified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76991D Other specified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76991S Other specified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, sequela -S76992A Other specified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76992D Other specified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76992S Other specified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, sequela -S76999A Other specified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76999D Other specified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76999S Other specified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S7700XA Crushing injury of unspecified hip, initial encounter -S7700XD Crushing injury of unspecified hip, subsequent encounter -S7700XS Crushing injury of unspecified hip, sequela -S7701XA Crushing injury of right hip, initial encounter -S7701XD Crushing injury of right hip, subsequent encounter -S7701XS Crushing injury of right hip, sequela -S7702XA Crushing injury of left hip, initial encounter -S7702XD Crushing injury of left hip, subsequent encounter -S7702XS Crushing injury of left hip, sequela -S7710XA Crushing injury of unspecified thigh, initial encounter -S7710XD Crushing injury of unspecified thigh, subsequent encounter -S7710XS Crushing injury of unspecified thigh, sequela -S7711XA Crushing injury of right thigh, initial encounter -S7711XD Crushing injury of right thigh, subsequent encounter -S7711XS Crushing injury of right thigh, sequela -S7712XA Crushing injury of left thigh, initial encounter -S7712XD Crushing injury of left thigh, subsequent encounter -S7712XS Crushing injury of left thigh, sequela -S7720XA Crushing injury of unspecified hip with thigh, initial encounter -S7720XD Crushing injury of unspecified hip with thigh, subsequent encounter -S7720XS Crushing injury of unspecified hip with thigh, sequela -S7721XA Crushing injury of right hip with thigh, initial encounter -S7721XD Crushing injury of right hip with thigh, subsequent encounter -S7721XS Crushing injury of right hip with thigh, sequela -S7722XA Crushing injury of left hip with thigh, initial encounter -S7722XD Crushing injury of left hip with thigh, subsequent encounter -S7722XS Crushing injury of left hip with thigh, sequela -S78011A Complete traumatic amputation at right hip joint, initial encounter -S78011D Complete traumatic amputation at right hip joint, subsequent encounter -S78011S Complete traumatic amputation at right hip joint, sequela -S78012A Complete traumatic amputation at left hip joint, initial encounter -S78012D Complete traumatic amputation at left hip joint, subsequent encounter -S78012S Complete traumatic amputation at left hip joint, sequela -S78019A Complete traumatic amputation at unspecified hip joint, initial encounter -S78019D Complete traumatic amputation at unspecified hip joint, subsequent encounter -S78019S Complete traumatic amputation at unspecified hip joint, sequela -S78021A Partial traumatic amputation at right hip joint, initial encounter -S78021D Partial traumatic amputation at right hip joint, subsequent encounter -S78021S Partial traumatic amputation at right hip joint, sequela -S78022A Partial traumatic amputation at left hip joint, initial encounter -S78022D Partial traumatic amputation at left hip joint, subsequent encounter -S78022S Partial traumatic amputation at left hip joint, sequela -S78029A Partial traumatic amputation at unspecified hip joint, initial encounter -S78029D Partial traumatic amputation at unspecified hip joint, subsequent encounter -S78029S Partial traumatic amputation at unspecified hip joint, sequela -S78111A Complete traumatic amputation at level between right hip and knee, initial encounter -S78111D Complete traumatic amputation at level between right hip and knee, subsequent encounter -S78111S Complete traumatic amputation at level between right hip and knee, sequela -S78112A Complete traumatic amputation at level between left hip and knee, initial encounter -S78112D Complete traumatic amputation at level between left hip and knee, subsequent encounter -S78112S Complete traumatic amputation at level between left hip and knee, sequela -S78119A Complete traumatic amputation at level between unspecified hip and knee, initial encounter -S78119D Complete traumatic amputation at level between unspecified hip and knee, subsequent encounter -S78119S Complete traumatic amputation at level between unspecified hip and knee, sequela -S78121A Partial traumatic amputation at level between right hip and knee, initial encounter -S78121D Partial traumatic amputation at level between right hip and knee, subsequent encounter -S78121S Partial traumatic amputation at level between right hip and knee, sequela -S78122A Partial traumatic amputation at level between left hip and knee, initial encounter -S78122D Partial traumatic amputation at level between left hip and knee, subsequent encounter -S78122S Partial traumatic amputation at level between left hip and knee, sequela -S78129A Partial traumatic amputation at level between unspecified hip and knee, initial encounter -S78129D Partial traumatic amputation at level between unspecified hip and knee, subsequent encounter -S78129S Partial traumatic amputation at level between unspecified hip and knee, sequela -S78911A Complete traumatic amputation of right hip and thigh, level unspecified, initial encounter -S78911D Complete traumatic amputation of right hip and thigh, level unspecified, subsequent encounter -S78911S Complete traumatic amputation of right hip and thigh, level unspecified, sequela -S78912A Complete traumatic amputation of left hip and thigh, level unspecified, initial encounter -S78912D Complete traumatic amputation of left hip and thigh, level unspecified, subsequent encounter -S78912S Complete traumatic amputation of left hip and thigh, level unspecified, sequela -S78919A Complete traumatic amputation of unspecified hip and thigh, level unspecified, initial encounter -S78919D Complete traumatic amputation of unspecified hip and thigh, level unspecified, subsequent encounter -S78919S Complete traumatic amputation of unspecified hip and thigh, level unspecified, sequela -S78921A Partial traumatic amputation of right hip and thigh, level unspecified, initial encounter -S78921D Partial traumatic amputation of right hip and thigh, level unspecified, subsequent encounter -S78921S Partial traumatic amputation of right hip and thigh, level unspecified, sequela -S78922A Partial traumatic amputation of left hip and thigh, level unspecified, initial encounter -S78922D Partial traumatic amputation of left hip and thigh, level unspecified, subsequent encounter -S78922S Partial traumatic amputation of left hip and thigh, level unspecified, sequela -S78929A Partial traumatic amputation of unspecified hip and thigh, level unspecified, initial encounter -S78929D Partial traumatic amputation of unspecified hip and thigh, level unspecified, subsequent encounter -S78929S Partial traumatic amputation of unspecified hip and thigh, level unspecified, sequela -S79001A Unspecified physeal fracture of upper end of right femur, initial encounter for closed fracture -S79001D Unspecified physeal fracture of upper end of right femur, subsequent encounter for fracture with routine healing -S79001G Unspecified physeal fracture of upper end of right femur, subsequent encounter for fracture with delayed healing -S79001K Unspecified physeal fracture of upper end of right femur, subsequent encounter for fracture with nonunion -S79001P Unspecified physeal fracture of upper end of right femur, subsequent encounter for fracture with malunion -S79001S Unspecified physeal fracture of upper end of right femur, sequela -S79002A Unspecified physeal fracture of upper end of left femur, initial encounter for closed fracture -S79002D Unspecified physeal fracture of upper end of left femur, subsequent encounter for fracture with routine healing -S79002G Unspecified physeal fracture of upper end of left femur, subsequent encounter for fracture with delayed healing -S79002K Unspecified physeal fracture of upper end of left femur, subsequent encounter for fracture with nonunion -S79002P Unspecified physeal fracture of upper end of left femur, subsequent encounter for fracture with malunion -S79002S Unspecified physeal fracture of upper end of left femur, sequela -S79009A Unspecified physeal fracture of upper end of unspecified femur, initial encounter for closed fracture -S79009D Unspecified physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with routine healing -S79009G Unspecified physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with delayed healing -S79009K Unspecified physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with nonunion -S79009P Unspecified physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with malunion -S79009S Unspecified physeal fracture of upper end of unspecified femur, sequela -S79011A Salter-Harris Type I physeal fracture of upper end of right femur, initial encounter for closed fracture -S79011D Salter-Harris Type I physeal fracture of upper end of right femur, subsequent encounter for fracture with routine healing -S79011G Salter-Harris Type I physeal fracture of upper end of right femur, subsequent encounter for fracture with delayed healing -S79011K Salter-Harris Type I physeal fracture of upper end of right femur, subsequent encounter for fracture with nonunion -S79011P Salter-Harris Type I physeal fracture of upper end of right femur, subsequent encounter for fracture with malunion -S79011S Salter-Harris Type I physeal fracture of upper end of right femur, sequela -S79012A Salter-Harris Type I physeal fracture of upper end of left femur, initial encounter for closed fracture -S79012D Salter-Harris Type I physeal fracture of upper end of left femur, subsequent encounter for fracture with routine healing -S79012G Salter-Harris Type I physeal fracture of upper end of left femur, subsequent encounter for fracture with delayed healing -S79012K Salter-Harris Type I physeal fracture of upper end of left femur, subsequent encounter for fracture with nonunion -S79012P Salter-Harris Type I physeal fracture of upper end of left femur, subsequent encounter for fracture with malunion -S79012S Salter-Harris Type I physeal fracture of upper end of left femur, sequela -S79019A Salter-Harris Type I physeal fracture of upper end of unspecified femur, initial encounter for closed fracture -S79019D Salter-Harris Type I physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with routine healing -S79019G Salter-Harris Type I physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with delayed healing -S79019K Salter-Harris Type I physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with nonunion -S79019P Salter-Harris Type I physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with malunion -S79019S Salter-Harris Type I physeal fracture of upper end of unspecified femur, sequela -S79091A Other physeal fracture of upper end of right femur, initial encounter for closed fracture -S79091D Other physeal fracture of upper end of right femur, subsequent encounter for fracture with routine healing -S79091G Other physeal fracture of upper end of right femur, subsequent encounter for fracture with delayed healing -S79091K Other physeal fracture of upper end of right femur, subsequent encounter for fracture with nonunion -S79091P Other physeal fracture of upper end of right femur, subsequent encounter for fracture with malunion -S79091S Other physeal fracture of upper end of right femur, sequela -S79092A Other physeal fracture of upper end of left femur, initial encounter for closed fracture -S79092D Other physeal fracture of upper end of left femur, subsequent encounter for fracture with routine healing -S79092G Other physeal fracture of upper end of left femur, subsequent encounter for fracture with delayed healing -S79092K Other physeal fracture of upper end of left femur, subsequent encounter for fracture with nonunion -S79092P Other physeal fracture of upper end of left femur, subsequent encounter for fracture with malunion -S79092S Other physeal fracture of upper end of left femur, sequela -S79099A Other physeal fracture of upper end of unspecified femur, initial encounter for closed fracture -S79099D Other physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with routine healing -S79099G Other physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with delayed healing -S79099K Other physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with nonunion -S79099P Other physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with malunion -S79099S Other physeal fracture of upper end of unspecified femur, sequela -S79101A Unspecified physeal fracture of lower end of right femur, initial encounter for closed fracture -S79101D Unspecified physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79101G Unspecified physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79101K Unspecified physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79101P Unspecified physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79101S Unspecified physeal fracture of lower end of right femur, sequela -S79102A Unspecified physeal fracture of lower end of left femur, initial encounter for closed fracture -S79102D Unspecified physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79102G Unspecified physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79102K Unspecified physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79102P Unspecified physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79102S Unspecified physeal fracture of lower end of left femur, sequela -S79109A Unspecified physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79109D Unspecified physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79109G Unspecified physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79109K Unspecified physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79109P Unspecified physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79109S Unspecified physeal fracture of lower end of unspecified femur, sequela -S79111A Salter-Harris Type I physeal fracture of lower end of right femur, initial encounter for closed fracture -S79111D Salter-Harris Type I physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79111G Salter-Harris Type I physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79111K Salter-Harris Type I physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79111P Salter-Harris Type I physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79111S Salter-Harris Type I physeal fracture of lower end of right femur, sequela -S79112A Salter-Harris Type I physeal fracture of lower end of left femur, initial encounter for closed fracture -S79112D Salter-Harris Type I physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79112G Salter-Harris Type I physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79112K Salter-Harris Type I physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79112P Salter-Harris Type I physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79112S Salter-Harris Type I physeal fracture of lower end of left femur, sequela -S79119A Salter-Harris Type I physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79119D Salter-Harris Type I physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79119G Salter-Harris Type I physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79119K Salter-Harris Type I physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79119P Salter-Harris Type I physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79119S Salter-Harris Type I physeal fracture of lower end of unspecified femur, sequela -S79121A Salter-Harris Type II physeal fracture of lower end of right femur, initial encounter for closed fracture -S79121D Salter-Harris Type II physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79121G Salter-Harris Type II physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79121K Salter-Harris Type II physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79121P Salter-Harris Type II physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79121S Salter-Harris Type II physeal fracture of lower end of right femur, sequela -S79122A Salter-Harris Type II physeal fracture of lower end of left femur, initial encounter for closed fracture -S79122D Salter-Harris Type II physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79122G Salter-Harris Type II physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79122K Salter-Harris Type II physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79122P Salter-Harris Type II physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79122S Salter-Harris Type II physeal fracture of lower end of left femur, sequela -S79129A Salter-Harris Type II physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79129D Salter-Harris Type II physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79129G Salter-Harris Type II physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79129K Salter-Harris Type II physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79129P Salter-Harris Type II physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79129S Salter-Harris Type II physeal fracture of lower end of unspecified femur, sequela -S79131A Salter-Harris Type III physeal fracture of lower end of right femur, initial encounter for closed fracture -S79131D Salter-Harris Type III physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79131G Salter-Harris Type III physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79131K Salter-Harris Type III physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79131P Salter-Harris Type III physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79131S Salter-Harris Type III physeal fracture of lower end of right femur, sequela -S79132A Salter-Harris Type III physeal fracture of lower end of left femur, initial encounter for closed fracture -S79132D Salter-Harris Type III physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79132G Salter-Harris Type III physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79132K Salter-Harris Type III physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79132P Salter-Harris Type III physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79132S Salter-Harris Type III physeal fracture of lower end of left femur, sequela -S79139A Salter-Harris Type III physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79139D Salter-Harris Type III physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79139G Salter-Harris Type III physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79139K Salter-Harris Type III physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79139P Salter-Harris Type III physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79139S Salter-Harris Type III physeal fracture of lower end of unspecified femur, sequela -S79141A Salter-Harris Type IV physeal fracture of lower end of right femur, initial encounter for closed fracture -S79141D Salter-Harris Type IV physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79141G Salter-Harris Type IV physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79141K Salter-Harris Type IV physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79141P Salter-Harris Type IV physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79141S Salter-Harris Type IV physeal fracture of lower end of right femur, sequela -S79142A Salter-Harris Type IV physeal fracture of lower end of left femur, initial encounter for closed fracture -S79142D Salter-Harris Type IV physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79142G Salter-Harris Type IV physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79142K Salter-Harris Type IV physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79142P Salter-Harris Type IV physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79142S Salter-Harris Type IV physeal fracture of lower end of left femur, sequela -S79149A Salter-Harris Type IV physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79149D Salter-Harris Type IV physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79149G Salter-Harris Type IV physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79149K Salter-Harris Type IV physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79149P Salter-Harris Type IV physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79149S Salter-Harris Type IV physeal fracture of lower end of unspecified femur, sequela -S79191A Other physeal fracture of lower end of right femur, initial encounter for closed fracture -S79191D Other physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79191G Other physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79191K Other physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79191P Other physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79191S Other physeal fracture of lower end of right femur, sequela -S79192A Other physeal fracture of lower end of left femur, initial encounter for closed fracture -S79192D Other physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79192G Other physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79192K Other physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79192P Other physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79192S Other physeal fracture of lower end of left femur, sequela -S79199A Other physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79199D Other physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79199G Other physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79199K Other physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79199P Other physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79199S Other physeal fracture of lower end of unspecified femur, sequela -S79811A Other specified injuries of right hip, initial encounter -S79811D Other specified injuries of right hip, subsequent encounter -S79811S Other specified injuries of right hip, sequela -S79812A Other specified injuries of left hip, initial encounter -S79812D Other specified injuries of left hip, subsequent encounter -S79812S Other specified injuries of left hip, sequela -S79819A Other specified injuries of unspecified hip, initial encounter -S79819D Other specified injuries of unspecified hip, subsequent encounter -S79819S Other specified injuries of unspecified hip, sequela -S79821A Other specified injuries of right thigh, initial encounter -S79821D Other specified injuries of right thigh, subsequent encounter -S79821S Other specified injuries of right thigh, sequela -S79822A Other specified injuries of left thigh, initial encounter -S79822D Other specified injuries of left thigh, subsequent encounter -S79822S Other specified injuries of left thigh, sequela -S79829A Other specified injuries of unspecified thigh, initial encounter -S79829D Other specified injuries of unspecified thigh, subsequent encounter -S79829S Other specified injuries of unspecified thigh, sequela -S79911A Unspecified injury of right hip, initial encounter -S79911D Unspecified injury of right hip, subsequent encounter -S79911S Unspecified injury of right hip, sequela -S79912A Unspecified injury of left hip, initial encounter -S79912D Unspecified injury of left hip, subsequent encounter -S79912S Unspecified injury of left hip, sequela -S79919A Unspecified injury of unspecified hip, initial encounter -S79919D Unspecified injury of unspecified hip, subsequent encounter -S79919S Unspecified injury of unspecified hip, sequela -S79921A Unspecified injury of right thigh, initial encounter -S79921D Unspecified injury of right thigh, subsequent encounter -S79921S Unspecified injury of right thigh, sequela -S79922A Unspecified injury of left thigh, initial encounter -S79922D Unspecified injury of left thigh, subsequent encounter -S79922S Unspecified injury of left thigh, sequela -S79929A Unspecified injury of unspecified thigh, initial encounter -S79929D Unspecified injury of unspecified thigh, subsequent encounter -S79929S Unspecified injury of unspecified thigh, sequela -S8000XA Contusion of unspecified knee, initial encounter -S8000XD Contusion of unspecified knee, subsequent encounter -S8000XS Contusion of unspecified knee, sequela -S8001XA Contusion of right knee, initial encounter -S8001XD Contusion of right knee, subsequent encounter -S8001XS Contusion of right knee, sequela -S8002XA Contusion of left knee, initial encounter -S8002XD Contusion of left knee, subsequent encounter -S8002XS Contusion of left knee, sequela -S8010XA Contusion of unspecified lower leg, initial encounter -S8010XD Contusion of unspecified lower leg, subsequent encounter -S8010XS Contusion of unspecified lower leg, sequela -S8011XA Contusion of right lower leg, initial encounter -S8011XD Contusion of right lower leg, subsequent encounter -S8011XS Contusion of right lower leg, sequela -S8012XA Contusion of left lower leg, initial encounter -S8012XD Contusion of left lower leg, subsequent encounter -S8012XS Contusion of left lower leg, sequela -S80211A Abrasion, right knee, initial encounter -S80211D Abrasion, right knee, subsequent encounter -S80211S Abrasion, right knee, sequela -S80212A Abrasion, left knee, initial encounter -S80212D Abrasion, left knee, subsequent encounter -S80212S Abrasion, left knee, sequela -S80219A Abrasion, unspecified knee, initial encounter -S80219D Abrasion, unspecified knee, subsequent encounter -S80219S Abrasion, unspecified knee, sequela -S80221A Blister (nonthermal), right knee, initial encounter -S80221D Blister (nonthermal), right knee, subsequent encounter -S80221S Blister (nonthermal), right knee, sequela -S80222A Blister (nonthermal), left knee, initial encounter -S80222D Blister (nonthermal), left knee, subsequent encounter -S80222S Blister (nonthermal), left knee, sequela -S80229A Blister (nonthermal), unspecified knee, initial encounter -S80229D Blister (nonthermal), unspecified knee, subsequent encounter -S80229S Blister (nonthermal), unspecified knee, sequela -S80241A External constriction, right knee, initial encounter -S80241D External constriction, right knee, subsequent encounter -S80241S External constriction, right knee, sequela -S80242A External constriction, left knee, initial encounter -S80242D External constriction, left knee, subsequent encounter -S80242S External constriction, left knee, sequela -S80249A External constriction, unspecified knee, initial encounter -S80249D External constriction, unspecified knee, subsequent encounter -S80249S External constriction, unspecified knee, sequela -S80251A Superficial foreign body, right knee, initial encounter -S80251D Superficial foreign body, right knee, subsequent encounter -S80251S Superficial foreign body, right knee, sequela -S80252A Superficial foreign body, left knee, initial encounter -S80252D Superficial foreign body, left knee, subsequent encounter -S80252S Superficial foreign body, left knee, sequela -S80259A Superficial foreign body, unspecified knee, initial encounter -S80259D Superficial foreign body, unspecified knee, subsequent encounter -S80259S Superficial foreign body, unspecified knee, sequela -S80261A Insect bite (nonvenomous), right knee, initial encounter -S80261D Insect bite (nonvenomous), right knee, subsequent encounter -S80261S Insect bite (nonvenomous), right knee, sequela -S80262A Insect bite (nonvenomous), left knee, initial encounter -S80262D Insect bite (nonvenomous), left knee, subsequent encounter -S80262S Insect bite (nonvenomous), left knee, sequela -S80269A Insect bite (nonvenomous), unspecified knee, initial encounter -S80269D Insect bite (nonvenomous), unspecified knee, subsequent encounter -S80269S Insect bite (nonvenomous), unspecified knee, sequela -S80271A Other superficial bite of right knee, initial encounter -S80271D Other superficial bite of right knee, subsequent encounter -S80271S Other superficial bite of right knee, sequela -S80272A Other superficial bite of left knee, initial encounter -S80272D Other superficial bite of left knee, subsequent encounter -S80272S Other superficial bite of left knee, sequela -S80279A Other superficial bite of unspecified knee, initial encounter -S80279D Other superficial bite of unspecified knee, subsequent encounter -S80279S Other superficial bite of unspecified knee, sequela -S80811A Abrasion, right lower leg, initial encounter -S80811D Abrasion, right lower leg, subsequent encounter -S80811S Abrasion, right lower leg, sequela -S80812A Abrasion, left lower leg, initial encounter -S80812D Abrasion, left lower leg, subsequent encounter -S80812S Abrasion, left lower leg, sequela -S80819A Abrasion, unspecified lower leg, initial encounter -S80819D Abrasion, unspecified lower leg, subsequent encounter -S80819S Abrasion, unspecified lower leg, sequela -S80821A Blister (nonthermal), right lower leg, initial encounter -S80821D Blister (nonthermal), right lower leg, subsequent encounter -S80821S Blister (nonthermal), right lower leg, sequela -S80822A Blister (nonthermal), left lower leg, initial encounter -S80822D Blister (nonthermal), left lower leg, subsequent encounter -S80822S Blister (nonthermal), left lower leg, sequela -S80829A Blister (nonthermal), unspecified lower leg, initial encounter -S80829D Blister (nonthermal), unspecified lower leg, subsequent encounter -S80829S Blister (nonthermal), unspecified lower leg, sequela -S80841A External constriction, right lower leg, initial encounter -S80841D External constriction, right lower leg, subsequent encounter -S80841S External constriction, right lower leg, sequela -S80842A External constriction, left lower leg, initial encounter -S80842D External constriction, left lower leg, subsequent encounter -S80842S External constriction, left lower leg, sequela -S80849A External constriction, unspecified lower leg, initial encounter -S80849D External constriction, unspecified lower leg, subsequent encounter -S80849S External constriction, unspecified lower leg, sequela -S80851A Superficial foreign body, right lower leg, initial encounter -S80851D Superficial foreign body, right lower leg, subsequent encounter -S80851S Superficial foreign body, right lower leg, sequela -S80852A Superficial foreign body, left lower leg, initial encounter -S80852D Superficial foreign body, left lower leg, subsequent encounter -S80852S Superficial foreign body, left lower leg, sequela -S80859A Superficial foreign body, unspecified lower leg, initial encounter -S80859D Superficial foreign body, unspecified lower leg, subsequent encounter -S80859S Superficial foreign body, unspecified lower leg, sequela -S80861A Insect bite (nonvenomous), right lower leg, initial encounter -S80861D Insect bite (nonvenomous), right lower leg, subsequent encounter -S80861S Insect bite (nonvenomous), right lower leg, sequela -S80862A Insect bite (nonvenomous), left lower leg, initial encounter -S80862D Insect bite (nonvenomous), left lower leg, subsequent encounter -S80862S Insect bite (nonvenomous), left lower leg, sequela -S80869A Insect bite (nonvenomous), unspecified lower leg, initial encounter -S80869D Insect bite (nonvenomous), unspecified lower leg, subsequent encounter -S80869S Insect bite (nonvenomous), unspecified lower leg, sequela -S80871A Other superficial bite, right lower leg, initial encounter -S80871D Other superficial bite, right lower leg, subsequent encounter -S80871S Other superficial bite, right lower leg, sequela -S80872A Other superficial bite, left lower leg, initial encounter -S80872D Other superficial bite, left lower leg, subsequent encounter -S80872S Other superficial bite, left lower leg, sequela -S80879A Other superficial bite, unspecified lower leg, initial encounter -S80879D Other superficial bite, unspecified lower leg, subsequent encounter -S80879S Other superficial bite, unspecified lower leg, sequela -S80911A Unspecified superficial injury of right knee, initial encounter -S80911D Unspecified superficial injury of right knee, subsequent encounter -S80911S Unspecified superficial injury of right knee, sequela -S80912A Unspecified superficial injury of left knee, initial encounter -S80912D Unspecified superficial injury of left knee, subsequent encounter -S80912S Unspecified superficial injury of left knee, sequela -S80919A Unspecified superficial injury of unspecified knee, initial encounter -S80919D Unspecified superficial injury of unspecified knee, subsequent encounter -S80919S Unspecified superficial injury of unspecified knee, sequela -S80921A Unspecified superficial injury of right lower leg, initial encounter -S80921D Unspecified superficial injury of right lower leg, subsequent encounter -S80921S Unspecified superficial injury of right lower leg, sequela -S80922A Unspecified superficial injury of left lower leg, initial encounter -S80922D Unspecified superficial injury of left lower leg, subsequent encounter -S80922S Unspecified superficial injury of left lower leg, sequela -S80929A Unspecified superficial injury of unspecified lower leg, initial encounter -S80929D Unspecified superficial injury of unspecified lower leg, subsequent encounter -S80929S Unspecified superficial injury of unspecified lower leg, sequela -S81001A Unspecified open wound, right knee, initial encounter -S81001D Unspecified open wound, right knee, subsequent encounter -S81001S Unspecified open wound, right knee, sequela -S81002A Unspecified open wound, left knee, initial encounter -S81002D Unspecified open wound, left knee, subsequent encounter -S81002S Unspecified open wound, left knee, sequela -S81009A Unspecified open wound, unspecified knee, initial encounter -S81009D Unspecified open wound, unspecified knee, subsequent encounter -S81009S Unspecified open wound, unspecified knee, sequela -S81011A Laceration without foreign body, right knee, initial encounter -S81011D Laceration without foreign body, right knee, subsequent encounter -S81011S Laceration without foreign body, right knee, sequela -S81012A Laceration without foreign body, left knee, initial encounter -S81012D Laceration without foreign body, left knee, subsequent encounter -S81012S Laceration without foreign body, left knee, sequela -S81019A Laceration without foreign body, unspecified knee, initial encounter -S81019D Laceration without foreign body, unspecified knee, subsequent encounter -S81019S Laceration without foreign body, unspecified knee, sequela -S81021A Laceration with foreign body, right knee, initial encounter -S81021D Laceration with foreign body, right knee, subsequent encounter -S81021S Laceration with foreign body, right knee, sequela -S81022A Laceration with foreign body, left knee, initial encounter -S81022D Laceration with foreign body, left knee, subsequent encounter -S81022S Laceration with foreign body, left knee, sequela -S81029A Laceration with foreign body, unspecified knee, initial encounter -S81029D Laceration with foreign body, unspecified knee, subsequent encounter -S81029S Laceration with foreign body, unspecified knee, sequela -S81031A Puncture wound without foreign body, right knee, initial encounter -S81031D Puncture wound without foreign body, right knee, subsequent encounter -S81031S Puncture wound without foreign body, right knee, sequela -S81032A Puncture wound without foreign body, left knee, initial encounter -S81032D Puncture wound without foreign body, left knee, subsequent encounter -S81032S Puncture wound without foreign body, left knee, sequela -S81039A Puncture wound without foreign body, unspecified knee, initial encounter -S81039D Puncture wound without foreign body, unspecified knee, subsequent encounter -S81039S Puncture wound without foreign body, unspecified knee, sequela -S81041A Puncture wound with foreign body, right knee, initial encounter -S81041D Puncture wound with foreign body, right knee, subsequent encounter -S81041S Puncture wound with foreign body, right knee, sequela -S81042A Puncture wound with foreign body, left knee, initial encounter -S81042D Puncture wound with foreign body, left knee, subsequent encounter -S81042S Puncture wound with foreign body, left knee, sequela -S81049A Puncture wound with foreign body, unspecified knee, initial encounter -S81049D Puncture wound with foreign body, unspecified knee, subsequent encounter -S81049S Puncture wound with foreign body, unspecified knee, sequela -S81051A Open bite, right knee, initial encounter -S81051D Open bite, right knee, subsequent encounter -S81051S Open bite, right knee, sequela -S81052A Open bite, left knee, initial encounter -S81052D Open bite, left knee, subsequent encounter -S81052S Open bite, left knee, sequela -S81059A Open bite, unspecified knee, initial encounter -S81059D Open bite, unspecified knee, subsequent encounter -S81059S Open bite, unspecified knee, sequela -S81801A Unspecified open wound, right lower leg, initial encounter -S81801D Unspecified open wound, right lower leg, subsequent encounter -S81801S Unspecified open wound, right lower leg, sequela -S81802A Unspecified open wound, left lower leg, initial encounter -S81802D Unspecified open wound, left lower leg, subsequent encounter -S81802S Unspecified open wound, left lower leg, sequela -S81809A Unspecified open wound, unspecified lower leg, initial encounter -S81809D Unspecified open wound, unspecified lower leg, subsequent encounter -S81809S Unspecified open wound, unspecified lower leg, sequela -S81811A Laceration without foreign body, right lower leg, initial encounter -S81811D Laceration without foreign body, right lower leg, subsequent encounter -S81811S Laceration without foreign body, right lower leg, sequela -S81812A Laceration without foreign body, left lower leg, initial encounter -S81812D Laceration without foreign body, left lower leg, subsequent encounter -S81812S Laceration without foreign body, left lower leg, sequela -S81819A Laceration without foreign body, unspecified lower leg, initial encounter -S81819D Laceration without foreign body, unspecified lower leg, subsequent encounter -S81819S Laceration without foreign body, unspecified lower leg, sequela -S81821A Laceration with foreign body, right lower leg, initial encounter -S81821D Laceration with foreign body, right lower leg, subsequent encounter -S81821S Laceration with foreign body, right lower leg, sequela -S81822A Laceration with foreign body, left lower leg, initial encounter -S81822D Laceration with foreign body, left lower leg, subsequent encounter -S81822S Laceration with foreign body, left lower leg, sequela -S81829A Laceration with foreign body, unspecified lower leg, initial encounter -S81829D Laceration with foreign body, unspecified lower leg, subsequent encounter -S81829S Laceration with foreign body, unspecified lower leg, sequela -S81831A Puncture wound without foreign body, right lower leg, initial encounter -S81831D Puncture wound without foreign body, right lower leg, subsequent encounter -S81831S Puncture wound without foreign body, right lower leg, sequela -S81832A Puncture wound without foreign body, left lower leg, initial encounter -S81832D Puncture wound without foreign body, left lower leg, subsequent encounter -S81832S Puncture wound without foreign body, left lower leg, sequela -S81839A Puncture wound without foreign body, unspecified lower leg, initial encounter -S81839D Puncture wound without foreign body, unspecified lower leg, subsequent encounter -S81839S Puncture wound without foreign body, unspecified lower leg, sequela -S81841A Puncture wound with foreign body, right lower leg, initial encounter -S81841D Puncture wound with foreign body, right lower leg, subsequent encounter -S81841S Puncture wound with foreign body, right lower leg, sequela -S81842A Puncture wound with foreign body, left lower leg, initial encounter -S81842D Puncture wound with foreign body, left lower leg, subsequent encounter -S81842S Puncture wound with foreign body, left lower leg, sequela -S81849A Puncture wound with foreign body, unspecified lower leg, initial encounter -S81849D Puncture wound with foreign body, unspecified lower leg, subsequent encounter -S81849S Puncture wound with foreign body, unspecified lower leg, sequela -S81851A Open bite, right lower leg, initial encounter -S81851D Open bite, right lower leg, subsequent encounter -S81851S Open bite, right lower leg, sequela -S81852A Open bite, left lower leg, initial encounter -S81852D Open bite, left lower leg, subsequent encounter -S81852S Open bite, left lower leg, sequela -S81859A Open bite, unspecified lower leg, initial encounter -S81859D Open bite, unspecified lower leg, subsequent encounter -S81859S Open bite, unspecified lower leg, sequela -S82001A Unspecified fracture of right patella, initial encounter for closed fracture -S82001B Unspecified fracture of right patella, initial encounter for open fracture type I or II -S82001C Unspecified fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82001D Unspecified fracture of right patella, subsequent encounter for closed fracture with routine healing -S82001E Unspecified fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82001F Unspecified fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82001G Unspecified fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82001H Unspecified fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82001J Unspecified fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82001K Unspecified fracture of right patella, subsequent encounter for closed fracture with nonunion -S82001M Unspecified fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82001N Unspecified fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82001P Unspecified fracture of right patella, subsequent encounter for closed fracture with malunion -S82001Q Unspecified fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82001R Unspecified fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82001S Unspecified fracture of right patella, sequela -S82002A Unspecified fracture of left patella, initial encounter for closed fracture -S82002B Unspecified fracture of left patella, initial encounter for open fracture type I or II -S82002C Unspecified fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82002D Unspecified fracture of left patella, subsequent encounter for closed fracture with routine healing -S82002E Unspecified fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82002F Unspecified fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82002G Unspecified fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82002H Unspecified fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82002J Unspecified fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82002K Unspecified fracture of left patella, subsequent encounter for closed fracture with nonunion -S82002M Unspecified fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82002N Unspecified fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82002P Unspecified fracture of left patella, subsequent encounter for closed fracture with malunion -S82002Q Unspecified fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82002R Unspecified fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82002S Unspecified fracture of left patella, sequela -S82009A Unspecified fracture of unspecified patella, initial encounter for closed fracture -S82009B Unspecified fracture of unspecified patella, initial encounter for open fracture type I or II -S82009C Unspecified fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82009D Unspecified fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82009E Unspecified fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82009F Unspecified fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82009G Unspecified fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82009H Unspecified fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82009J Unspecified fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82009K Unspecified fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82009M Unspecified fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82009N Unspecified fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82009P Unspecified fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82009Q Unspecified fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82009R Unspecified fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82009S Unspecified fracture of unspecified patella, sequela -S82011A Displaced osteochondral fracture of right patella, initial encounter for closed fracture -S82011B Displaced osteochondral fracture of right patella, initial encounter for open fracture type I or II -S82011C Displaced osteochondral fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82011D Displaced osteochondral fracture of right patella, subsequent encounter for closed fracture with routine healing -S82011E Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82011F Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82011G Displaced osteochondral fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82011H Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82011J Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82011K Displaced osteochondral fracture of right patella, subsequent encounter for closed fracture with nonunion -S82011M Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82011N Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82011P Displaced osteochondral fracture of right patella, subsequent encounter for closed fracture with malunion -S82011Q Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82011R Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82011S Displaced osteochondral fracture of right patella, sequela -S82012A Displaced osteochondral fracture of left patella, initial encounter for closed fracture -S82012B Displaced osteochondral fracture of left patella, initial encounter for open fracture type I or II -S82012C Displaced osteochondral fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82012D Displaced osteochondral fracture of left patella, subsequent encounter for closed fracture with routine healing -S82012E Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82012F Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82012G Displaced osteochondral fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82012H Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82012J Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82012K Displaced osteochondral fracture of left patella, subsequent encounter for closed fracture with nonunion -S82012M Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82012N Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82012P Displaced osteochondral fracture of left patella, subsequent encounter for closed fracture with malunion -S82012Q Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82012R Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82012S Displaced osteochondral fracture of left patella, sequela -S82013A Displaced osteochondral fracture of unspecified patella, initial encounter for closed fracture -S82013B Displaced osteochondral fracture of unspecified patella, initial encounter for open fracture type I or II -S82013C Displaced osteochondral fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82013D Displaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82013E Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82013F Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82013G Displaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82013H Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82013J Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82013K Displaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82013M Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82013N Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82013P Displaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82013Q Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82013R Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82013S Displaced osteochondral fracture of unspecified patella, sequela -S82014A Nondisplaced osteochondral fracture of right patella, initial encounter for closed fracture -S82014B Nondisplaced osteochondral fracture of right patella, initial encounter for open fracture type I or II -S82014C Nondisplaced osteochondral fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82014D Nondisplaced osteochondral fracture of right patella, subsequent encounter for closed fracture with routine healing -S82014E Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82014F Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82014G Nondisplaced osteochondral fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82014H Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82014J Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82014K Nondisplaced osteochondral fracture of right patella, subsequent encounter for closed fracture with nonunion -S82014M Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82014N Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82014P Nondisplaced osteochondral fracture of right patella, subsequent encounter for closed fracture with malunion -S82014Q Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82014R Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82014S Nondisplaced osteochondral fracture of right patella, sequela -S82015A Nondisplaced osteochondral fracture of left patella, initial encounter for closed fracture -S82015B Nondisplaced osteochondral fracture of left patella, initial encounter for open fracture type I or II -S82015C Nondisplaced osteochondral fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82015D Nondisplaced osteochondral fracture of left patella, subsequent encounter for closed fracture with routine healing -S82015E Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82015F Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82015G Nondisplaced osteochondral fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82015H Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82015J Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82015K Nondisplaced osteochondral fracture of left patella, subsequent encounter for closed fracture with nonunion -S82015M Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82015N Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82015P Nondisplaced osteochondral fracture of left patella, subsequent encounter for closed fracture with malunion -S82015Q Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82015R Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82015S Nondisplaced osteochondral fracture of left patella, sequela -S82016A Nondisplaced osteochondral fracture of unspecified patella, initial encounter for closed fracture -S82016B Nondisplaced osteochondral fracture of unspecified patella, initial encounter for open fracture type I or II -S82016C Nondisplaced osteochondral fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82016D Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82016E Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82016F Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82016G Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82016H Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82016J Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82016K Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82016M Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82016N Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82016P Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82016Q Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82016R Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82016S Nondisplaced osteochondral fracture of unspecified patella, sequela -S82021A Displaced longitudinal fracture of right patella, initial encounter for closed fracture -S82021B Displaced longitudinal fracture of right patella, initial encounter for open fracture type I or II -S82021C Displaced longitudinal fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82021D Displaced longitudinal fracture of right patella, subsequent encounter for closed fracture with routine healing -S82021E Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82021F Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82021G Displaced longitudinal fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82021H Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82021J Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82021K Displaced longitudinal fracture of right patella, subsequent encounter for closed fracture with nonunion -S82021M Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82021N Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82021P Displaced longitudinal fracture of right patella, subsequent encounter for closed fracture with malunion -S82021Q Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82021R Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82021S Displaced longitudinal fracture of right patella, sequela -S82022A Displaced longitudinal fracture of left patella, initial encounter for closed fracture -S82022B Displaced longitudinal fracture of left patella, initial encounter for open fracture type I or II -S82022C Displaced longitudinal fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82022D Displaced longitudinal fracture of left patella, subsequent encounter for closed fracture with routine healing -S82022E Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82022F Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82022G Displaced longitudinal fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82022H Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82022J Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82022K Displaced longitudinal fracture of left patella, subsequent encounter for closed fracture with nonunion -S82022M Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82022N Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82022P Displaced longitudinal fracture of left patella, subsequent encounter for closed fracture with malunion -S82022Q Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82022R Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82022S Displaced longitudinal fracture of left patella, sequela -S82023A Displaced longitudinal fracture of unspecified patella, initial encounter for closed fracture -S82023B Displaced longitudinal fracture of unspecified patella, initial encounter for open fracture type I or II -S82023C Displaced longitudinal fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82023D Displaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82023E Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82023F Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82023G Displaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82023H Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82023J Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82023K Displaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82023M Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82023N Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82023P Displaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82023Q Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82023R Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82023S Displaced longitudinal fracture of unspecified patella, sequela -S82024A Nondisplaced longitudinal fracture of right patella, initial encounter for closed fracture -S82024B Nondisplaced longitudinal fracture of right patella, initial encounter for open fracture type I or II -S82024C Nondisplaced longitudinal fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82024D Nondisplaced longitudinal fracture of right patella, subsequent encounter for closed fracture with routine healing -S82024E Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82024F Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82024G Nondisplaced longitudinal fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82024H Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82024J Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82024K Nondisplaced longitudinal fracture of right patella, subsequent encounter for closed fracture with nonunion -S82024M Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82024N Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82024P Nondisplaced longitudinal fracture of right patella, subsequent encounter for closed fracture with malunion -S82024Q Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82024R Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82024S Nondisplaced longitudinal fracture of right patella, sequela -S82025A Nondisplaced longitudinal fracture of left patella, initial encounter for closed fracture -S82025B Nondisplaced longitudinal fracture of left patella, initial encounter for open fracture type I or II -S82025C Nondisplaced longitudinal fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82025D Nondisplaced longitudinal fracture of left patella, subsequent encounter for closed fracture with routine healing -S82025E Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82025F Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82025G Nondisplaced longitudinal fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82025H Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82025J Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82025K Nondisplaced longitudinal fracture of left patella, subsequent encounter for closed fracture with nonunion -S82025M Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82025N Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82025P Nondisplaced longitudinal fracture of left patella, subsequent encounter for closed fracture with malunion -S82025Q Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82025R Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82025S Nondisplaced longitudinal fracture of left patella, sequela -S82026A Nondisplaced longitudinal fracture of unspecified patella, initial encounter for closed fracture -S82026B Nondisplaced longitudinal fracture of unspecified patella, initial encounter for open fracture type I or II -S82026C Nondisplaced longitudinal fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82026D Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82026E Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82026F Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82026G Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82026H Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82026J Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82026K Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82026M Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82026N Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82026P Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82026Q Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82026R Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82026S Nondisplaced longitudinal fracture of unspecified patella, sequela -S82031A Displaced transverse fracture of right patella, initial encounter for closed fracture -S82031B Displaced transverse fracture of right patella, initial encounter for open fracture type I or II -S82031C Displaced transverse fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82031D Displaced transverse fracture of right patella, subsequent encounter for closed fracture with routine healing -S82031E Displaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82031F Displaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82031G Displaced transverse fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82031H Displaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82031J Displaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82031K Displaced transverse fracture of right patella, subsequent encounter for closed fracture with nonunion -S82031M Displaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82031N Displaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82031P Displaced transverse fracture of right patella, subsequent encounter for closed fracture with malunion -S82031Q Displaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82031R Displaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82031S Displaced transverse fracture of right patella, sequela -S82032A Displaced transverse fracture of left patella, initial encounter for closed fracture -S82032B Displaced transverse fracture of left patella, initial encounter for open fracture type I or II -S82032C Displaced transverse fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82032D Displaced transverse fracture of left patella, subsequent encounter for closed fracture with routine healing -S82032E Displaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82032F Displaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82032G Displaced transverse fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82032H Displaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82032J Displaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82032K Displaced transverse fracture of left patella, subsequent encounter for closed fracture with nonunion -S82032M Displaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82032N Displaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82032P Displaced transverse fracture of left patella, subsequent encounter for closed fracture with malunion -S82032Q Displaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82032R Displaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82032S Displaced transverse fracture of left patella, sequela -S82033A Displaced transverse fracture of unspecified patella, initial encounter for closed fracture -S82033B Displaced transverse fracture of unspecified patella, initial encounter for open fracture type I or II -S82033C Displaced transverse fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82033D Displaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82033E Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82033F Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82033G Displaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82033H Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82033J Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82033K Displaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82033M Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82033N Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82033P Displaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82033Q Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82033R Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82033S Displaced transverse fracture of unspecified patella, sequela -S82034A Nondisplaced transverse fracture of right patella, initial encounter for closed fracture -S82034B Nondisplaced transverse fracture of right patella, initial encounter for open fracture type I or II -S82034C Nondisplaced transverse fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82034D Nondisplaced transverse fracture of right patella, subsequent encounter for closed fracture with routine healing -S82034E Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82034F Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82034G Nondisplaced transverse fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82034H Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82034J Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82034K Nondisplaced transverse fracture of right patella, subsequent encounter for closed fracture with nonunion -S82034M Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82034N Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82034P Nondisplaced transverse fracture of right patella, subsequent encounter for closed fracture with malunion -S82034Q Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82034R Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82034S Nondisplaced transverse fracture of right patella, sequela -S82035A Nondisplaced transverse fracture of left patella, initial encounter for closed fracture -S82035B Nondisplaced transverse fracture of left patella, initial encounter for open fracture type I or II -S82035C Nondisplaced transverse fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82035D Nondisplaced transverse fracture of left patella, subsequent encounter for closed fracture with routine healing -S82035E Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82035F Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82035G Nondisplaced transverse fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82035H Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82035J Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82035K Nondisplaced transverse fracture of left patella, subsequent encounter for closed fracture with nonunion -S82035M Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82035N Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82035P Nondisplaced transverse fracture of left patella, subsequent encounter for closed fracture with malunion -S82035Q Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82035R Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82035S Nondisplaced transverse fracture of left patella, sequela -S82036A Nondisplaced transverse fracture of unspecified patella, initial encounter for closed fracture -S82036B Nondisplaced transverse fracture of unspecified patella, initial encounter for open fracture type I or II -S82036C Nondisplaced transverse fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82036D Nondisplaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82036E Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82036F Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82036G Nondisplaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82036H Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82036J Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82036K Nondisplaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82036M Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82036N Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82036P Nondisplaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82036Q Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82036R Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82036S Nondisplaced transverse fracture of unspecified patella, sequela -S82041A Displaced comminuted fracture of right patella, initial encounter for closed fracture -S82041B Displaced comminuted fracture of right patella, initial encounter for open fracture type I or II -S82041C Displaced comminuted fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82041D Displaced comminuted fracture of right patella, subsequent encounter for closed fracture with routine healing -S82041E Displaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82041F Displaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82041G Displaced comminuted fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82041H Displaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82041J Displaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82041K Displaced comminuted fracture of right patella, subsequent encounter for closed fracture with nonunion -S82041M Displaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82041N Displaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82041P Displaced comminuted fracture of right patella, subsequent encounter for closed fracture with malunion -S82041Q Displaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82041R Displaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82041S Displaced comminuted fracture of right patella, sequela -S82042A Displaced comminuted fracture of left patella, initial encounter for closed fracture -S82042B Displaced comminuted fracture of left patella, initial encounter for open fracture type I or II -S82042C Displaced comminuted fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82042D Displaced comminuted fracture of left patella, subsequent encounter for closed fracture with routine healing -S82042E Displaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82042F Displaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82042G Displaced comminuted fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82042H Displaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82042J Displaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82042K Displaced comminuted fracture of left patella, subsequent encounter for closed fracture with nonunion -S82042M Displaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82042N Displaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82042P Displaced comminuted fracture of left patella, subsequent encounter for closed fracture with malunion -S82042Q Displaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82042R Displaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82042S Displaced comminuted fracture of left patella, sequela -S82043A Displaced comminuted fracture of unspecified patella, initial encounter for closed fracture -S82043B Displaced comminuted fracture of unspecified patella, initial encounter for open fracture type I or II -S82043C Displaced comminuted fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82043D Displaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82043E Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82043F Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82043G Displaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82043H Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82043J Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82043K Displaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82043M Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82043N Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82043P Displaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82043Q Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82043R Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82043S Displaced comminuted fracture of unspecified patella, sequela -S82044A Nondisplaced comminuted fracture of right patella, initial encounter for closed fracture -S82044B Nondisplaced comminuted fracture of right patella, initial encounter for open fracture type I or II -S82044C Nondisplaced comminuted fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82044D Nondisplaced comminuted fracture of right patella, subsequent encounter for closed fracture with routine healing -S82044E Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82044F Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82044G Nondisplaced comminuted fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82044H Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82044J Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82044K Nondisplaced comminuted fracture of right patella, subsequent encounter for closed fracture with nonunion -S82044M Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82044N Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82044P Nondisplaced comminuted fracture of right patella, subsequent encounter for closed fracture with malunion -S82044Q Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82044R Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82044S Nondisplaced comminuted fracture of right patella, sequela -S82045A Nondisplaced comminuted fracture of left patella, initial encounter for closed fracture -S82045B Nondisplaced comminuted fracture of left patella, initial encounter for open fracture type I or II -S82045C Nondisplaced comminuted fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82045D Nondisplaced comminuted fracture of left patella, subsequent encounter for closed fracture with routine healing -S82045E Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82045F Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82045G Nondisplaced comminuted fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82045H Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82045J Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82045K Nondisplaced comminuted fracture of left patella, subsequent encounter for closed fracture with nonunion -S82045M Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82045N Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82045P Nondisplaced comminuted fracture of left patella, subsequent encounter for closed fracture with malunion -S82045Q Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82045R Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82045S Nondisplaced comminuted fracture of left patella, sequela -S82046A Nondisplaced comminuted fracture of unspecified patella, initial encounter for closed fracture -S82046B Nondisplaced comminuted fracture of unspecified patella, initial encounter for open fracture type I or II -S82046C Nondisplaced comminuted fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82046D Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82046E Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82046F Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82046G Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82046H Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82046J Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82046K Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82046M Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82046N Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82046P Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82046Q Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82046R Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82046S Nondisplaced comminuted fracture of unspecified patella, sequela -S82091A Other fracture of right patella, initial encounter for closed fracture -S82091B Other fracture of right patella, initial encounter for open fracture type I or II -S82091C Other fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82091D Other fracture of right patella, subsequent encounter for closed fracture with routine healing -S82091E Other fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82091F Other fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82091G Other fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82091H Other fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82091J Other fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82091K Other fracture of right patella, subsequent encounter for closed fracture with nonunion -S82091M Other fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82091N Other fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82091P Other fracture of right patella, subsequent encounter for closed fracture with malunion -S82091Q Other fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82091R Other fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82091S Other fracture of right patella, sequela -S82092A Other fracture of left patella, initial encounter for closed fracture -S82092B Other fracture of left patella, initial encounter for open fracture type I or II -S82092C Other fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82092D Other fracture of left patella, subsequent encounter for closed fracture with routine healing -S82092E Other fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82092F Other fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82092G Other fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82092H Other fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82092J Other fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82092K Other fracture of left patella, subsequent encounter for closed fracture with nonunion -S82092M Other fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82092N Other fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82092P Other fracture of left patella, subsequent encounter for closed fracture with malunion -S82092Q Other fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82092R Other fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82092S Other fracture of left patella, sequela -S82099A Other fracture of unspecified patella, initial encounter for closed fracture -S82099B Other fracture of unspecified patella, initial encounter for open fracture type I or II -S82099C Other fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82099D Other fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82099E Other fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82099F Other fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82099G Other fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82099H Other fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82099J Other fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82099K Other fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82099M Other fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82099N Other fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82099P Other fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82099Q Other fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82099R Other fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82099S Other fracture of unspecified patella, sequela -S82101A Unspecified fracture of upper end of right tibia, initial encounter for closed fracture -S82101B Unspecified fracture of upper end of right tibia, initial encounter for open fracture type I or II -S82101C Unspecified fracture of upper end of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82101D Unspecified fracture of upper end of right tibia, subsequent encounter for closed fracture with routine healing -S82101E Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82101F Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82101G Unspecified fracture of upper end of right tibia, subsequent encounter for closed fracture with delayed healing -S82101H Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82101J Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82101K Unspecified fracture of upper end of right tibia, subsequent encounter for closed fracture with nonunion -S82101M Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82101N Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82101P Unspecified fracture of upper end of right tibia, subsequent encounter for closed fracture with malunion -S82101Q Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with malunion -S82101R Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82101S Unspecified fracture of upper end of right tibia, sequela -S82102A Unspecified fracture of upper end of left tibia, initial encounter for closed fracture -S82102B Unspecified fracture of upper end of left tibia, initial encounter for open fracture type I or II -S82102C Unspecified fracture of upper end of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82102D Unspecified fracture of upper end of left tibia, subsequent encounter for closed fracture with routine healing -S82102E Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82102F Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82102G Unspecified fracture of upper end of left tibia, subsequent encounter for closed fracture with delayed healing -S82102H Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82102J Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82102K Unspecified fracture of upper end of left tibia, subsequent encounter for closed fracture with nonunion -S82102M Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82102N Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82102P Unspecified fracture of upper end of left tibia, subsequent encounter for closed fracture with malunion -S82102Q Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with malunion -S82102R Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82102S Unspecified fracture of upper end of left tibia, sequela -S82109A Unspecified fracture of upper end of unspecified tibia, initial encounter for closed fracture -S82109B Unspecified fracture of upper end of unspecified tibia, initial encounter for open fracture type I or II -S82109C Unspecified fracture of upper end of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82109D Unspecified fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82109E Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82109F Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82109G Unspecified fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82109H Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82109J Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82109K Unspecified fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82109M Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82109N Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82109P Unspecified fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with malunion -S82109Q Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82109R Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82109S Unspecified fracture of upper end of unspecified tibia, sequela -S82111A Displaced fracture of right tibial spine, initial encounter for closed fracture -S82111B Displaced fracture of right tibial spine, initial encounter for open fracture type I or II -S82111C Displaced fracture of right tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82111D Displaced fracture of right tibial spine, subsequent encounter for closed fracture with routine healing -S82111E Displaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82111F Displaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82111G Displaced fracture of right tibial spine, subsequent encounter for closed fracture with delayed healing -S82111H Displaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82111J Displaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82111K Displaced fracture of right tibial spine, subsequent encounter for closed fracture with nonunion -S82111M Displaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82111N Displaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82111P Displaced fracture of right tibial spine, subsequent encounter for closed fracture with malunion -S82111Q Displaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with malunion -S82111R Displaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82111S Displaced fracture of right tibial spine, sequela -S82112A Displaced fracture of left tibial spine, initial encounter for closed fracture -S82112B Displaced fracture of left tibial spine, initial encounter for open fracture type I or II -S82112C Displaced fracture of left tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82112D Displaced fracture of left tibial spine, subsequent encounter for closed fracture with routine healing -S82112E Displaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82112F Displaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82112G Displaced fracture of left tibial spine, subsequent encounter for closed fracture with delayed healing -S82112H Displaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82112J Displaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82112K Displaced fracture of left tibial spine, subsequent encounter for closed fracture with nonunion -S82112M Displaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82112N Displaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82112P Displaced fracture of left tibial spine, subsequent encounter for closed fracture with malunion -S82112Q Displaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with malunion -S82112R Displaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82112S Displaced fracture of left tibial spine, sequela -S82113A Displaced fracture of unspecified tibial spine, initial encounter for closed fracture -S82113B Displaced fracture of unspecified tibial spine, initial encounter for open fracture type I or II -S82113C Displaced fracture of unspecified tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82113D Displaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with routine healing -S82113E Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82113F Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82113G Displaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with delayed healing -S82113H Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82113J Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82113K Displaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with nonunion -S82113M Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82113N Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82113P Displaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with malunion -S82113Q Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with malunion -S82113R Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82113S Displaced fracture of unspecified tibial spine, sequela -S82114A Nondisplaced fracture of right tibial spine, initial encounter for closed fracture -S82114B Nondisplaced fracture of right tibial spine, initial encounter for open fracture type I or II -S82114C Nondisplaced fracture of right tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82114D Nondisplaced fracture of right tibial spine, subsequent encounter for closed fracture with routine healing -S82114E Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82114F Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82114G Nondisplaced fracture of right tibial spine, subsequent encounter for closed fracture with delayed healing -S82114H Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82114J Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82114K Nondisplaced fracture of right tibial spine, subsequent encounter for closed fracture with nonunion -S82114M Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82114N Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82114P Nondisplaced fracture of right tibial spine, subsequent encounter for closed fracture with malunion -S82114Q Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with malunion -S82114R Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82114S Nondisplaced fracture of right tibial spine, sequela -S82115A Nondisplaced fracture of left tibial spine, initial encounter for closed fracture -S82115B Nondisplaced fracture of left tibial spine, initial encounter for open fracture type I or II -S82115C Nondisplaced fracture of left tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82115D Nondisplaced fracture of left tibial spine, subsequent encounter for closed fracture with routine healing -S82115E Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82115F Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82115G Nondisplaced fracture of left tibial spine, subsequent encounter for closed fracture with delayed healing -S82115H Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82115J Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82115K Nondisplaced fracture of left tibial spine, subsequent encounter for closed fracture with nonunion -S82115M Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82115N Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82115P Nondisplaced fracture of left tibial spine, subsequent encounter for closed fracture with malunion -S82115Q Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with malunion -S82115R Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82115S Nondisplaced fracture of left tibial spine, sequela -S82116A Nondisplaced fracture of unspecified tibial spine, initial encounter for closed fracture -S82116B Nondisplaced fracture of unspecified tibial spine, initial encounter for open fracture type I or II -S82116C Nondisplaced fracture of unspecified tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82116D Nondisplaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with routine healing -S82116E Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82116F Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82116G Nondisplaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with delayed healing -S82116H Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82116J Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82116K Nondisplaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with nonunion -S82116M Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82116N Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82116P Nondisplaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with malunion -S82116Q Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with malunion -S82116R Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82116S Nondisplaced fracture of unspecified tibial spine, sequela -S82121A Displaced fracture of lateral condyle of right tibia, initial encounter for closed fracture -S82121B Displaced fracture of lateral condyle of right tibia, initial encounter for open fracture type I or II -S82121C Displaced fracture of lateral condyle of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82121D Displaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with routine healing -S82121E Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82121F Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82121G Displaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with delayed healing -S82121H Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82121J Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82121K Displaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with nonunion -S82121M Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82121N Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82121P Displaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with malunion -S82121Q Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with malunion -S82121R Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82121S Displaced fracture of lateral condyle of right tibia, sequela -S82122A Displaced fracture of lateral condyle of left tibia, initial encounter for closed fracture -S82122B Displaced fracture of lateral condyle of left tibia, initial encounter for open fracture type I or II -S82122C Displaced fracture of lateral condyle of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82122D Displaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with routine healing -S82122E Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82122F Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82122G Displaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with delayed healing -S82122H Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82122J Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82122K Displaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with nonunion -S82122M Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82122N Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82122P Displaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with malunion -S82122Q Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with malunion -S82122R Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82122S Displaced fracture of lateral condyle of left tibia, sequela -S82123A Displaced fracture of lateral condyle of unspecified tibia, initial encounter for closed fracture -S82123B Displaced fracture of lateral condyle of unspecified tibia, initial encounter for open fracture type I or II -S82123C Displaced fracture of lateral condyle of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82123D Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82123E Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82123F Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82123G Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82123H Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82123J Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82123K Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82123M Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82123N Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82123P Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with malunion -S82123Q Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82123R Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82123S Displaced fracture of lateral condyle of unspecified tibia, sequela -S82124A Nondisplaced fracture of lateral condyle of right tibia, initial encounter for closed fracture -S82124B Nondisplaced fracture of lateral condyle of right tibia, initial encounter for open fracture type I or II -S82124C Nondisplaced fracture of lateral condyle of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82124D Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with routine healing -S82124E Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82124F Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82124G Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with delayed healing -S82124H Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82124J Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82124K Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with nonunion -S82124M Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82124N Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82124P Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with malunion -S82124Q Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with malunion -S82124R Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82124S Nondisplaced fracture of lateral condyle of right tibia, sequela -S82125A Nondisplaced fracture of lateral condyle of left tibia, initial encounter for closed fracture -S82125B Nondisplaced fracture of lateral condyle of left tibia, initial encounter for open fracture type I or II -S82125C Nondisplaced fracture of lateral condyle of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82125D Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with routine healing -S82125E Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82125F Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82125G Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with delayed healing -S82125H Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82125J Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82125K Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with nonunion -S82125M Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82125N Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82125P Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with malunion -S82125Q Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with malunion -S82125R Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82125S Nondisplaced fracture of lateral condyle of left tibia, sequela -S82126A Nondisplaced fracture of lateral condyle of unspecified tibia, initial encounter for closed fracture -S82126B Nondisplaced fracture of lateral condyle of unspecified tibia, initial encounter for open fracture type I or II -S82126C Nondisplaced fracture of lateral condyle of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82126D Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82126E Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82126F Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82126G Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82126H Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82126J Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82126K Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82126M Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82126N Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82126P Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with malunion -S82126Q Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82126R Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82126S Nondisplaced fracture of lateral condyle of unspecified tibia, sequela -S82131A Displaced fracture of medial condyle of right tibia, initial encounter for closed fracture -S82131B Displaced fracture of medial condyle of right tibia, initial encounter for open fracture type I or II -S82131C Displaced fracture of medial condyle of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82131D Displaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with routine healing -S82131E Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82131F Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82131G Displaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with delayed healing -S82131H Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82131J Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82131K Displaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with nonunion -S82131M Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82131N Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82131P Displaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with malunion -S82131Q Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with malunion -S82131R Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82131S Displaced fracture of medial condyle of right tibia, sequela -S82132A Displaced fracture of medial condyle of left tibia, initial encounter for closed fracture -S82132B Displaced fracture of medial condyle of left tibia, initial encounter for open fracture type I or II -S82132C Displaced fracture of medial condyle of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82132D Displaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with routine healing -S82132E Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82132F Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82132G Displaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with delayed healing -S82132H Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82132J Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82132K Displaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with nonunion -S82132M Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82132N Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82132P Displaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with malunion -S82132Q Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with malunion -S82132R Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82132S Displaced fracture of medial condyle of left tibia, sequela -S82133A Displaced fracture of medial condyle of unspecified tibia, initial encounter for closed fracture -S82133B Displaced fracture of medial condyle of unspecified tibia, initial encounter for open fracture type I or II -S82133C Displaced fracture of medial condyle of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82133D Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82133E Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82133F Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82133G Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82133H Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82133J Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82133K Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82133M Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82133N Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82133P Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with malunion -S82133Q Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82133R Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82133S Displaced fracture of medial condyle of unspecified tibia, sequela -S82134A Nondisplaced fracture of medial condyle of right tibia, initial encounter for closed fracture -S82134B Nondisplaced fracture of medial condyle of right tibia, initial encounter for open fracture type I or II -S82134C Nondisplaced fracture of medial condyle of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82134D Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with routine healing -S82134E Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82134F Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82134G Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with delayed healing -S82134H Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82134J Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82134K Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with nonunion -S82134M Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82134N Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82134P Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with malunion -S82134Q Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with malunion -S82134R Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82134S Nondisplaced fracture of medial condyle of right tibia, sequela -S82135A Nondisplaced fracture of medial condyle of left tibia, initial encounter for closed fracture -S82135B Nondisplaced fracture of medial condyle of left tibia, initial encounter for open fracture type I or II -S82135C Nondisplaced fracture of medial condyle of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82135D Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with routine healing -S82135E Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82135F Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82135G Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with delayed healing -S82135H Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82135J Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82135K Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with nonunion -S82135M Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82135N Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82135P Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with malunion -S82135Q Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with malunion -S82135R Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82135S Nondisplaced fracture of medial condyle of left tibia, sequela -S82136A Nondisplaced fracture of medial condyle of unspecified tibia, initial encounter for closed fracture -S82136B Nondisplaced fracture of medial condyle of unspecified tibia, initial encounter for open fracture type I or II -S82136C Nondisplaced fracture of medial condyle of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82136D Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82136E Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82136F Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82136G Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82136H Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82136J Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82136K Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82136M Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82136N Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82136P Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with malunion -S82136Q Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82136R Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82136S Nondisplaced fracture of medial condyle of unspecified tibia, sequela -S82141A Displaced bicondylar fracture of right tibia, initial encounter for closed fracture -S82141B Displaced bicondylar fracture of right tibia, initial encounter for open fracture type I or II -S82141C Displaced bicondylar fracture of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82141D Displaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with routine healing -S82141E Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82141F Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82141G Displaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with delayed healing -S82141H Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82141J Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82141K Displaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with nonunion -S82141M Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82141N Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82141P Displaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with malunion -S82141Q Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with malunion -S82141R Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82141S Displaced bicondylar fracture of right tibia, sequela -S82142A Displaced bicondylar fracture of left tibia, initial encounter for closed fracture -S82142B Displaced bicondylar fracture of left tibia, initial encounter for open fracture type I or II -S82142C Displaced bicondylar fracture of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82142D Displaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with routine healing -S82142E Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82142F Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82142G Displaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with delayed healing -S82142H Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82142J Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82142K Displaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with nonunion -S82142M Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82142N Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82142P Displaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with malunion -S82142Q Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with malunion -S82142R Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82142S Displaced bicondylar fracture of left tibia, sequela -S82143A Displaced bicondylar fracture of unspecified tibia, initial encounter for closed fracture -S82143B Displaced bicondylar fracture of unspecified tibia, initial encounter for open fracture type I or II -S82143C Displaced bicondylar fracture of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82143D Displaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82143E Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82143F Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82143G Displaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82143H Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82143J Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82143K Displaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82143M Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82143N Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82143P Displaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with malunion -S82143Q Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82143R Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82143S Displaced bicondylar fracture of unspecified tibia, sequela -S82144A Nondisplaced bicondylar fracture of right tibia, initial encounter for closed fracture -S82144B Nondisplaced bicondylar fracture of right tibia, initial encounter for open fracture type I or II -S82144C Nondisplaced bicondylar fracture of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82144D Nondisplaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with routine healing -S82144E Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82144F Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82144G Nondisplaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with delayed healing -S82144H Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82144J Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82144K Nondisplaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with nonunion -S82144M Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82144N Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82144P Nondisplaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with malunion -S82144Q Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with malunion -S82144R Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82144S Nondisplaced bicondylar fracture of right tibia, sequela -S82145A Nondisplaced bicondylar fracture of left tibia, initial encounter for closed fracture -S82145B Nondisplaced bicondylar fracture of left tibia, initial encounter for open fracture type I or II -S82145C Nondisplaced bicondylar fracture of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82145D Nondisplaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with routine healing -S82145E Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82145F Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82145G Nondisplaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with delayed healing -S82145H Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82145J Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82145K Nondisplaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with nonunion -S82145M Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82145N Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82145P Nondisplaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with malunion -S82145Q Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with malunion -S82145R Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82145S Nondisplaced bicondylar fracture of left tibia, sequela -S82146A Nondisplaced bicondylar fracture of unspecified tibia, initial encounter for closed fracture -S82146B Nondisplaced bicondylar fracture of unspecified tibia, initial encounter for open fracture type I or II -S82146C Nondisplaced bicondylar fracture of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82146D Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82146E Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82146F Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82146G Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82146H Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82146J Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82146K Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82146M Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82146N Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82146P Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with malunion -S82146Q Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82146R Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82146S Nondisplaced bicondylar fracture of unspecified tibia, sequela -S82151A Displaced fracture of right tibial tuberosity, initial encounter for closed fracture -S82151B Displaced fracture of right tibial tuberosity, initial encounter for open fracture type I or II -S82151C Displaced fracture of right tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82151D Displaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82151E Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82151F Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82151G Displaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82151H Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82151J Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82151K Displaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82151M Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82151N Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82151P Displaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with malunion -S82151Q Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82151R Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82151S Displaced fracture of right tibial tuberosity, sequela -S82152A Displaced fracture of left tibial tuberosity, initial encounter for closed fracture -S82152B Displaced fracture of left tibial tuberosity, initial encounter for open fracture type I or II -S82152C Displaced fracture of left tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82152D Displaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82152E Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82152F Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82152G Displaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82152H Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82152J Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82152K Displaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82152M Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82152N Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82152P Displaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with malunion -S82152Q Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82152R Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82152S Displaced fracture of left tibial tuberosity, sequela -S82153A Displaced fracture of unspecified tibial tuberosity, initial encounter for closed fracture -S82153B Displaced fracture of unspecified tibial tuberosity, initial encounter for open fracture type I or II -S82153C Displaced fracture of unspecified tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82153D Displaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82153E Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82153F Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82153G Displaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82153H Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82153J Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82153K Displaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82153M Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82153N Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82153P Displaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with malunion -S82153Q Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82153R Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82153S Displaced fracture of unspecified tibial tuberosity, sequela -S82154A Nondisplaced fracture of right tibial tuberosity, initial encounter for closed fracture -S82154B Nondisplaced fracture of right tibial tuberosity, initial encounter for open fracture type I or II -S82154C Nondisplaced fracture of right tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82154D Nondisplaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82154E Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82154F Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82154G Nondisplaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82154H Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82154J Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82154K Nondisplaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82154M Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82154N Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82154P Nondisplaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with malunion -S82154Q Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82154R Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82154S Nondisplaced fracture of right tibial tuberosity, sequela -S82155A Nondisplaced fracture of left tibial tuberosity, initial encounter for closed fracture -S82155B Nondisplaced fracture of left tibial tuberosity, initial encounter for open fracture type I or II -S82155C Nondisplaced fracture of left tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82155D Nondisplaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82155E Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82155F Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82155G Nondisplaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82155H Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82155J Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82155K Nondisplaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82155M Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82155N Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82155P Nondisplaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with malunion -S82155Q Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82155R Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82155S Nondisplaced fracture of left tibial tuberosity, sequela -S82156A Nondisplaced fracture of unspecified tibial tuberosity, initial encounter for closed fracture -S82156B Nondisplaced fracture of unspecified tibial tuberosity, initial encounter for open fracture type I or II -S82156C Nondisplaced fracture of unspecified tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82156D Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82156E Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82156F Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82156G Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82156H Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82156J Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82156K Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82156M Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82156N Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82156P Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with malunion -S82156Q Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82156R Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82156S Nondisplaced fracture of unspecified tibial tuberosity, sequela -S82161A Torus fracture of upper end of right tibia, initial encounter for closed fracture -S82161D Torus fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S82161G Torus fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S82161K Torus fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S82161P Torus fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S82161S Torus fracture of upper end of right tibia, sequela -S82162A Torus fracture of upper end of left tibia, initial encounter for closed fracture -S82162D Torus fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S82162G Torus fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S82162K Torus fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S82162P Torus fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S82162S Torus fracture of upper end of left tibia, sequela -S82169A Torus fracture of upper end of unspecified tibia, initial encounter for closed fracture -S82169D Torus fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S82169G Torus fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S82169K Torus fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S82169P Torus fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S82169S Torus fracture of upper end of unspecified tibia, sequela -S82191A Other fracture of upper end of right tibia, initial encounter for closed fracture -S82191B Other fracture of upper end of right tibia, initial encounter for open fracture type I or II -S82191C Other fracture of upper end of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82191D Other fracture of upper end of right tibia, subsequent encounter for closed fracture with routine healing -S82191E Other fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82191F Other fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82191G Other fracture of upper end of right tibia, subsequent encounter for closed fracture with delayed healing -S82191H Other fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82191J Other fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82191K Other fracture of upper end of right tibia, subsequent encounter for closed fracture with nonunion -S82191M Other fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82191N Other fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82191P Other fracture of upper end of right tibia, subsequent encounter for closed fracture with malunion -S82191Q Other fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with malunion -S82191R Other fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82191S Other fracture of upper end of right tibia, sequela -S82192A Other fracture of upper end of left tibia, initial encounter for closed fracture -S82192B Other fracture of upper end of left tibia, initial encounter for open fracture type I or II -S82192C Other fracture of upper end of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82192D Other fracture of upper end of left tibia, subsequent encounter for closed fracture with routine healing -S82192E Other fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82192F Other fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82192G Other fracture of upper end of left tibia, subsequent encounter for closed fracture with delayed healing -S82192H Other fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82192J Other fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82192K Other fracture of upper end of left tibia, subsequent encounter for closed fracture with nonunion -S82192M Other fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82192N Other fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82192P Other fracture of upper end of left tibia, subsequent encounter for closed fracture with malunion -S82192Q Other fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with malunion -S82192R Other fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82192S Other fracture of upper end of left tibia, sequela -S82199A Other fracture of upper end of unspecified tibia, initial encounter for closed fracture -S82199B Other fracture of upper end of unspecified tibia, initial encounter for open fracture type I or II -S82199C Other fracture of upper end of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82199D Other fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82199E Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82199F Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82199G Other fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82199H Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82199J Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82199K Other fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82199M Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82199N Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82199P Other fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with malunion -S82199Q Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82199R Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82199S Other fracture of upper end of unspecified tibia, sequela -S82201A Unspecified fracture of shaft of right tibia, initial encounter for closed fracture -S82201B Unspecified fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82201C Unspecified fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82201D Unspecified fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82201E Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82201F Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82201G Unspecified fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82201H Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82201J Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82201K Unspecified fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82201M Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82201N Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82201P Unspecified fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82201Q Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82201R Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82201S Unspecified fracture of shaft of right tibia, sequela -S82202A Unspecified fracture of shaft of left tibia, initial encounter for closed fracture -S82202B Unspecified fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82202C Unspecified fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82202D Unspecified fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82202E Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82202F Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82202G Unspecified fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82202H Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82202J Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82202K Unspecified fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82202M Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82202N Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82202P Unspecified fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82202Q Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82202R Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82202S Unspecified fracture of shaft of left tibia, sequela -S82209A Unspecified fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82209B Unspecified fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82209C Unspecified fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82209D Unspecified fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82209E Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82209F Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82209G Unspecified fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82209H Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82209J Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82209K Unspecified fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82209M Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82209N Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82209P Unspecified fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82209Q Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82209R Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82209S Unspecified fracture of shaft of unspecified tibia, sequela -S82221A Displaced transverse fracture of shaft of right tibia, initial encounter for closed fracture -S82221B Displaced transverse fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82221C Displaced transverse fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82221D Displaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82221E Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82221F Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82221G Displaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82221H Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82221J Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82221K Displaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82221M Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82221N Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82221P Displaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82221Q Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82221R Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82221S Displaced transverse fracture of shaft of right tibia, sequela -S82222A Displaced transverse fracture of shaft of left tibia, initial encounter for closed fracture -S82222B Displaced transverse fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82222C Displaced transverse fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82222D Displaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82222E Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82222F Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82222G Displaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82222H Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82222J Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82222K Displaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82222M Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82222N Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82222P Displaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82222Q Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82222R Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82222S Displaced transverse fracture of shaft of left tibia, sequela -S82223A Displaced transverse fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82223B Displaced transverse fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82223C Displaced transverse fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82223D Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82223E Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82223F Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82223G Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82223H Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82223J Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82223K Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82223M Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82223N Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82223P Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82223Q Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82223R Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82223S Displaced transverse fracture of shaft of unspecified tibia, sequela -S82224A Nondisplaced transverse fracture of shaft of right tibia, initial encounter for closed fracture -S82224B Nondisplaced transverse fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82224C Nondisplaced transverse fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82224D Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82224E Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82224F Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82224G Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82224H Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82224J Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82224K Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82224M Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82224N Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82224P Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82224Q Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82224R Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82224S Nondisplaced transverse fracture of shaft of right tibia, sequela -S82225A Nondisplaced transverse fracture of shaft of left tibia, initial encounter for closed fracture -S82225B Nondisplaced transverse fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82225C Nondisplaced transverse fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82225D Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82225E Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82225F Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82225G Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82225H Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82225J Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82225K Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82225M Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82225N Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82225P Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82225Q Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82225R Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82225S Nondisplaced transverse fracture of shaft of left tibia, sequela -S82226A Nondisplaced transverse fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82226B Nondisplaced transverse fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82226C Nondisplaced transverse fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82226D Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82226E Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82226F Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82226G Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82226H Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82226J Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82226K Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82226M Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82226N Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82226P Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82226Q Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82226R Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82226S Nondisplaced transverse fracture of shaft of unspecified tibia, sequela -S82231A Displaced oblique fracture of shaft of right tibia, initial encounter for closed fracture -S82231B Displaced oblique fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82231C Displaced oblique fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82231D Displaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82231E Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82231F Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82231G Displaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82231H Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82231J Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82231K Displaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82231M Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82231N Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82231P Displaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82231Q Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82231R Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82231S Displaced oblique fracture of shaft of right tibia, sequela -S82232A Displaced oblique fracture of shaft of left tibia, initial encounter for closed fracture -S82232B Displaced oblique fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82232C Displaced oblique fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82232D Displaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82232E Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82232F Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82232G Displaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82232H Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82232J Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82232K Displaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82232M Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82232N Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82232P Displaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82232Q Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82232R Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82232S Displaced oblique fracture of shaft of left tibia, sequela -S82233A Displaced oblique fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82233B Displaced oblique fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82233C Displaced oblique fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82233D Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82233E Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82233F Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82233G Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82233H Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82233J Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82233K Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82233M Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82233N Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82233P Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82233Q Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82233R Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82233S Displaced oblique fracture of shaft of unspecified tibia, sequela -S82234A Nondisplaced oblique fracture of shaft of right tibia, initial encounter for closed fracture -S82234B Nondisplaced oblique fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82234C Nondisplaced oblique fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82234D Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82234E Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82234F Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82234G Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82234H Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82234J Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82234K Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82234M Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82234N Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82234P Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82234Q Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82234R Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82234S Nondisplaced oblique fracture of shaft of right tibia, sequela -S82235A Nondisplaced oblique fracture of shaft of left tibia, initial encounter for closed fracture -S82235B Nondisplaced oblique fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82235C Nondisplaced oblique fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82235D Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82235E Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82235F Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82235G Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82235H Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82235J Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82235K Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82235M Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82235N Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82235P Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82235Q Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82235R Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82235S Nondisplaced oblique fracture of shaft of left tibia, sequela -S82236A Nondisplaced oblique fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82236B Nondisplaced oblique fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82236C Nondisplaced oblique fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82236D Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82236E Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82236F Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82236G Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82236H Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82236J Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82236K Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82236M Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82236N Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82236P Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82236Q Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82236R Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82236S Nondisplaced oblique fracture of shaft of unspecified tibia, sequela -S82241A Displaced spiral fracture of shaft of right tibia, initial encounter for closed fracture -S82241B Displaced spiral fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82241C Displaced spiral fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82241D Displaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82241E Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82241F Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82241G Displaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82241H Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82241J Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82241K Displaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82241M Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82241N Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82241P Displaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82241Q Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82241R Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82241S Displaced spiral fracture of shaft of right tibia, sequela -S82242A Displaced spiral fracture of shaft of left tibia, initial encounter for closed fracture -S82242B Displaced spiral fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82242C Displaced spiral fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82242D Displaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82242E Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82242F Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82242G Displaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82242H Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82242J Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82242K Displaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82242M Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82242N Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82242P Displaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82242Q Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82242R Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82242S Displaced spiral fracture of shaft of left tibia, sequela -S82243A Displaced spiral fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82243B Displaced spiral fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82243C Displaced spiral fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82243D Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82243E Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82243F Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82243G Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82243H Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82243J Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82243K Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82243M Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82243N Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82243P Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82243Q Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82243R Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82243S Displaced spiral fracture of shaft of unspecified tibia, sequela -S82244A Nondisplaced spiral fracture of shaft of right tibia, initial encounter for closed fracture -S82244B Nondisplaced spiral fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82244C Nondisplaced spiral fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82244D Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82244E Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82244F Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82244G Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82244H Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82244J Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82244K Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82244M Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82244N Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82244P Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82244Q Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82244R Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82244S Nondisplaced spiral fracture of shaft of right tibia, sequela -S82245A Nondisplaced spiral fracture of shaft of left tibia, initial encounter for closed fracture -S82245B Nondisplaced spiral fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82245C Nondisplaced spiral fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82245D Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82245E Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82245F Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82245G Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82245H Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82245J Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82245K Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82245M Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82245N Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82245P Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82245Q Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82245R Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82245S Nondisplaced spiral fracture of shaft of left tibia, sequela -S82246A Nondisplaced spiral fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82246B Nondisplaced spiral fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82246C Nondisplaced spiral fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82246D Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82246E Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82246F Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82246G Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82246H Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82246J Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82246K Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82246M Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82246N Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82246P Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82246Q Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82246R Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82246S Nondisplaced spiral fracture of shaft of unspecified tibia, sequela -S82251A Displaced comminuted fracture of shaft of right tibia, initial encounter for closed fracture -S82251B Displaced comminuted fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82251C Displaced comminuted fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82251D Displaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82251E Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82251F Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82251G Displaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82251H Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82251J Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82251K Displaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82251M Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82251N Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82251P Displaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82251Q Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82251R Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82251S Displaced comminuted fracture of shaft of right tibia, sequela -S82252A Displaced comminuted fracture of shaft of left tibia, initial encounter for closed fracture -S82252B Displaced comminuted fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82252C Displaced comminuted fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82252D Displaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82252E Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82252F Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82252G Displaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82252H Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82252J Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82252K Displaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82252M Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82252N Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82252P Displaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82252Q Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82252R Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82252S Displaced comminuted fracture of shaft of left tibia, sequela -S82253A Displaced comminuted fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82253B Displaced comminuted fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82253C Displaced comminuted fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82253D Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82253E Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82253F Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82253G Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82253H Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82253J Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82253K Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82253M Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82253N Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82253P Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82253Q Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82253R Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82253S Displaced comminuted fracture of shaft of unspecified tibia, sequela -S82254A Nondisplaced comminuted fracture of shaft of right tibia, initial encounter for closed fracture -S82254B Nondisplaced comminuted fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82254C Nondisplaced comminuted fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82254D Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82254E Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82254F Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82254G Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82254H Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82254J Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82254K Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82254M Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82254N Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82254P Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82254Q Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82254R Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82254S Nondisplaced comminuted fracture of shaft of right tibia, sequela -S82255A Nondisplaced comminuted fracture of shaft of left tibia, initial encounter for closed fracture -S82255B Nondisplaced comminuted fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82255C Nondisplaced comminuted fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82255D Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82255E Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82255F Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82255G Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82255H Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82255J Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82255K Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82255M Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82255N Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82255P Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82255Q Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82255R Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82255S Nondisplaced comminuted fracture of shaft of left tibia, sequela -S82256A Nondisplaced comminuted fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82256B Nondisplaced comminuted fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82256C Nondisplaced comminuted fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82256D Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82256E Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82256F Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82256G Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82256H Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82256J Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82256K Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82256M Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82256N Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82256P Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82256Q Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82256R Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82256S Nondisplaced comminuted fracture of shaft of unspecified tibia, sequela -S82261A Displaced segmental fracture of shaft of right tibia, initial encounter for closed fracture -S82261B Displaced segmental fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82261C Displaced segmental fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82261D Displaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82261E Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82261F Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82261G Displaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82261H Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82261J Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82261K Displaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82261M Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82261N Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82261P Displaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82261Q Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82261R Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82261S Displaced segmental fracture of shaft of right tibia, sequela -S82262A Displaced segmental fracture of shaft of left tibia, initial encounter for closed fracture -S82262B Displaced segmental fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82262C Displaced segmental fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82262D Displaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82262E Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82262F Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82262G Displaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82262H Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82262J Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82262K Displaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82262M Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82262N Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82262P Displaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82262Q Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82262R Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82262S Displaced segmental fracture of shaft of left tibia, sequela -S82263A Displaced segmental fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82263B Displaced segmental fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82263C Displaced segmental fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82263D Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82263E Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82263F Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82263G Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82263H Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82263J Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82263K Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82263M Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82263N Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82263P Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82263Q Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82263R Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82263S Displaced segmental fracture of shaft of unspecified tibia, sequela -S82264A Nondisplaced segmental fracture of shaft of right tibia, initial encounter for closed fracture -S82264B Nondisplaced segmental fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82264C Nondisplaced segmental fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82264D Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82264E Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82264F Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82264G Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82264H Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82264J Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82264K Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82264M Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82264N Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82264P Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82264Q Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82264R Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82264S Nondisplaced segmental fracture of shaft of right tibia, sequela -S82265A Nondisplaced segmental fracture of shaft of left tibia, initial encounter for closed fracture -S82265B Nondisplaced segmental fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82265C Nondisplaced segmental fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82265D Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82265E Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82265F Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82265G Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82265H Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82265J Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82265K Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82265M Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82265N Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82265P Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82265Q Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82265R Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82265S Nondisplaced segmental fracture of shaft of left tibia, sequela -S82266A Nondisplaced segmental fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82266B Nondisplaced segmental fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82266C Nondisplaced segmental fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82266D Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82266E Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82266F Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82266G Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82266H Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82266J Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82266K Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82266M Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82266N Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82266P Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82266Q Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82266R Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82266S Nondisplaced segmental fracture of shaft of unspecified tibia, sequela -S82291A Other fracture of shaft of right tibia, initial encounter for closed fracture -S82291B Other fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82291C Other fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82291D Other fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82291E Other fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82291F Other fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82291G Other fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82291H Other fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82291J Other fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82291K Other fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82291M Other fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82291N Other fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82291P Other fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82291Q Other fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82291R Other fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82291S Other fracture of shaft of right tibia, sequela -S82292A Other fracture of shaft of left tibia, initial encounter for closed fracture -S82292B Other fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82292C Other fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82292D Other fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82292E Other fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82292F Other fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82292G Other fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82292H Other fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82292J Other fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82292K Other fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82292M Other fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82292N Other fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82292P Other fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82292Q Other fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82292R Other fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82292S Other fracture of shaft of left tibia, sequela -S82299A Other fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82299B Other fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82299C Other fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82299D Other fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82299E Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82299F Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82299G Other fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82299H Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82299J Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82299K Other fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82299M Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82299N Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82299P Other fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82299Q Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82299R Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82299S Other fracture of shaft of unspecified tibia, sequela -S82301A Unspecified fracture of lower end of right tibia, initial encounter for closed fracture -S82301B Unspecified fracture of lower end of right tibia, initial encounter for open fracture type I or II -S82301C Unspecified fracture of lower end of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82301D Unspecified fracture of lower end of right tibia, subsequent encounter for closed fracture with routine healing -S82301E Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82301F Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82301G Unspecified fracture of lower end of right tibia, subsequent encounter for closed fracture with delayed healing -S82301H Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82301J Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82301K Unspecified fracture of lower end of right tibia, subsequent encounter for closed fracture with nonunion -S82301M Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82301N Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82301P Unspecified fracture of lower end of right tibia, subsequent encounter for closed fracture with malunion -S82301Q Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with malunion -S82301R Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82301S Unspecified fracture of lower end of right tibia, sequela -S82302A Unspecified fracture of lower end of left tibia, initial encounter for closed fracture -S82302B Unspecified fracture of lower end of left tibia, initial encounter for open fracture type I or II -S82302C Unspecified fracture of lower end of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82302D Unspecified fracture of lower end of left tibia, subsequent encounter for closed fracture with routine healing -S82302E Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82302F Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82302G Unspecified fracture of lower end of left tibia, subsequent encounter for closed fracture with delayed healing -S82302H Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82302J Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82302K Unspecified fracture of lower end of left tibia, subsequent encounter for closed fracture with nonunion -S82302M Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82302N Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82302P Unspecified fracture of lower end of left tibia, subsequent encounter for closed fracture with malunion -S82302Q Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with malunion -S82302R Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82302S Unspecified fracture of lower end of left tibia, sequela -S82309A Unspecified fracture of lower end of unspecified tibia, initial encounter for closed fracture -S82309B Unspecified fracture of lower end of unspecified tibia, initial encounter for open fracture type I or II -S82309C Unspecified fracture of lower end of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82309D Unspecified fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82309E Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82309F Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82309G Unspecified fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82309H Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82309J Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82309K Unspecified fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82309M Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82309N Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82309P Unspecified fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with malunion -S82309Q Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82309R Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82309S Unspecified fracture of lower end of unspecified tibia, sequela -S82311A Torus fracture of lower end of right tibia, initial encounter for closed fracture -S82311D Torus fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S82311G Torus fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S82311K Torus fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S82311P Torus fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S82311S Torus fracture of lower end of right tibia, sequela -S82312A Torus fracture of lower end of left tibia, initial encounter for closed fracture -S82312D Torus fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S82312G Torus fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S82312K Torus fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S82312P Torus fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S82312S Torus fracture of lower end of left tibia, sequela -S82319A Torus fracture of lower end of unspecified tibia, initial encounter for closed fracture -S82319D Torus fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S82319G Torus fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S82319K Torus fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S82319P Torus fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S82319S Torus fracture of lower end of unspecified tibia, sequela -S82391A Other fracture of lower end of right tibia, initial encounter for closed fracture -S82391B Other fracture of lower end of right tibia, initial encounter for open fracture type I or II -S82391C Other fracture of lower end of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82391D Other fracture of lower end of right tibia, subsequent encounter for closed fracture with routine healing -S82391E Other fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82391F Other fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82391G Other fracture of lower end of right tibia, subsequent encounter for closed fracture with delayed healing -S82391H Other fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82391J Other fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82391K Other fracture of lower end of right tibia, subsequent encounter for closed fracture with nonunion -S82391M Other fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82391N Other fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82391P Other fracture of lower end of right tibia, subsequent encounter for closed fracture with malunion -S82391Q Other fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with malunion -S82391R Other fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82391S Other fracture of lower end of right tibia, sequela -S82392A Other fracture of lower end of left tibia, initial encounter for closed fracture -S82392B Other fracture of lower end of left tibia, initial encounter for open fracture type I or II -S82392C Other fracture of lower end of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82392D Other fracture of lower end of left tibia, subsequent encounter for closed fracture with routine healing -S82392E Other fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82392F Other fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82392G Other fracture of lower end of left tibia, subsequent encounter for closed fracture with delayed healing -S82392H Other fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82392J Other fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82392K Other fracture of lower end of left tibia, subsequent encounter for closed fracture with nonunion -S82392M Other fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82392N Other fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82392P Other fracture of lower end of left tibia, subsequent encounter for closed fracture with malunion -S82392Q Other fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with malunion -S82392R Other fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82392S Other fracture of lower end of left tibia, sequela -S82399A Other fracture of lower end of unspecified tibia, initial encounter for closed fracture -S82399B Other fracture of lower end of unspecified tibia, initial encounter for open fracture type I or II -S82399C Other fracture of lower end of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82399D Other fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82399E Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82399F Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82399G Other fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82399H Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82399J Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82399K Other fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82399M Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82399N Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82399P Other fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with malunion -S82399Q Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82399R Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82399S Other fracture of lower end of unspecified tibia, sequela -S82401A Unspecified fracture of shaft of right fibula, initial encounter for closed fracture -S82401B Unspecified fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82401C Unspecified fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82401D Unspecified fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82401E Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82401F Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82401G Unspecified fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82401H Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82401J Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82401K Unspecified fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82401M Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82401N Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82401P Unspecified fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82401Q Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82401R Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82401S Unspecified fracture of shaft of right fibula, sequela -S82402A Unspecified fracture of shaft of left fibula, initial encounter for closed fracture -S82402B Unspecified fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82402C Unspecified fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82402D Unspecified fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82402E Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82402F Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82402G Unspecified fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82402H Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82402J Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82402K Unspecified fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82402M Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82402N Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82402P Unspecified fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82402Q Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82402R Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82402S Unspecified fracture of shaft of left fibula, sequela -S82409A Unspecified fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82409B Unspecified fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82409C Unspecified fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82409D Unspecified fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82409E Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82409F Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82409G Unspecified fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82409H Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82409J Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82409K Unspecified fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82409M Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82409N Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82409P Unspecified fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82409Q Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82409R Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82409S Unspecified fracture of shaft of unspecified fibula, sequela -S82421A Displaced transverse fracture of shaft of right fibula, initial encounter for closed fracture -S82421B Displaced transverse fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82421C Displaced transverse fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82421D Displaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82421E Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82421F Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82421G Displaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82421H Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82421J Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82421K Displaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82421M Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82421N Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82421P Displaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82421Q Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82421R Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82421S Displaced transverse fracture of shaft of right fibula, sequela -S82422A Displaced transverse fracture of shaft of left fibula, initial encounter for closed fracture -S82422B Displaced transverse fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82422C Displaced transverse fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82422D Displaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82422E Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82422F Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82422G Displaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82422H Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82422J Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82422K Displaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82422M Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82422N Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82422P Displaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82422Q Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82422R Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82422S Displaced transverse fracture of shaft of left fibula, sequela -S82423A Displaced transverse fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82423B Displaced transverse fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82423C Displaced transverse fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82423D Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82423E Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82423F Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82423G Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82423H Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82423J Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82423K Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82423M Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82423N Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82423P Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82423Q Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82423R Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82423S Displaced transverse fracture of shaft of unspecified fibula, sequela -S82424A Nondisplaced transverse fracture of shaft of right fibula, initial encounter for closed fracture -S82424B Nondisplaced transverse fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82424C Nondisplaced transverse fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82424D Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82424E Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82424F Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82424G Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82424H Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82424J Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82424K Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82424M Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82424N Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82424P Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82424Q Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82424R Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82424S Nondisplaced transverse fracture of shaft of right fibula, sequela -S82425A Nondisplaced transverse fracture of shaft of left fibula, initial encounter for closed fracture -S82425B Nondisplaced transverse fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82425C Nondisplaced transverse fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82425D Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82425E Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82425F Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82425G Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82425H Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82425J Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82425K Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82425M Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82425N Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82425P Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82425Q Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82425R Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82425S Nondisplaced transverse fracture of shaft of left fibula, sequela -S82426A Nondisplaced transverse fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82426B Nondisplaced transverse fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82426C Nondisplaced transverse fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82426D Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82426E Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82426F Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82426G Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82426H Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82426J Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82426K Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82426M Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82426N Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82426P Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82426Q Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82426R Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82426S Nondisplaced transverse fracture of shaft of unspecified fibula, sequela -S82431A Displaced oblique fracture of shaft of right fibula, initial encounter for closed fracture -S82431B Displaced oblique fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82431C Displaced oblique fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82431D Displaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82431E Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82431F Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82431G Displaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82431H Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82431J Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82431K Displaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82431M Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82431N Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82431P Displaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82431Q Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82431R Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82431S Displaced oblique fracture of shaft of right fibula, sequela -S82432A Displaced oblique fracture of shaft of left fibula, initial encounter for closed fracture -S82432B Displaced oblique fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82432C Displaced oblique fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82432D Displaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82432E Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82432F Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82432G Displaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82432H Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82432J Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82432K Displaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82432M Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82432N Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82432P Displaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82432Q Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82432R Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82432S Displaced oblique fracture of shaft of left fibula, sequela -S82433A Displaced oblique fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82433B Displaced oblique fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82433C Displaced oblique fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82433D Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82433E Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82433F Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82433G Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82433H Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82433J Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82433K Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82433M Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82433N Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82433P Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82433Q Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82433R Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82433S Displaced oblique fracture of shaft of unspecified fibula, sequela -S82434A Nondisplaced oblique fracture of shaft of right fibula, initial encounter for closed fracture -S82434B Nondisplaced oblique fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82434C Nondisplaced oblique fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82434D Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82434E Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82434F Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82434G Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82434H Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82434J Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82434K Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82434M Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82434N Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82434P Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82434Q Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82434R Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82434S Nondisplaced oblique fracture of shaft of right fibula, sequela -S82435A Nondisplaced oblique fracture of shaft of left fibula, initial encounter for closed fracture -S82435B Nondisplaced oblique fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82435C Nondisplaced oblique fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82435D Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82435E Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82435F Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82435G Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82435H Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82435J Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82435K Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82435M Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82435N Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82435P Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82435Q Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82435R Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82435S Nondisplaced oblique fracture of shaft of left fibula, sequela -S82436A Nondisplaced oblique fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82436B Nondisplaced oblique fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82436C Nondisplaced oblique fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82436D Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82436E Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82436F Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82436G Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82436H Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82436J Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82436K Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82436M Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82436N Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82436P Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82436Q Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82436R Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82436S Nondisplaced oblique fracture of shaft of unspecified fibula, sequela -S82441A Displaced spiral fracture of shaft of right fibula, initial encounter for closed fracture -S82441B Displaced spiral fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82441C Displaced spiral fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82441D Displaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82441E Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82441F Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82441G Displaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82441H Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82441J Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82441K Displaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82441M Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82441N Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82441P Displaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82441Q Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82441R Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82441S Displaced spiral fracture of shaft of right fibula, sequela -S82442A Displaced spiral fracture of shaft of left fibula, initial encounter for closed fracture -S82442B Displaced spiral fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82442C Displaced spiral fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82442D Displaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82442E Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82442F Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82442G Displaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82442H Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82442J Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82442K Displaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82442M Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82442N Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82442P Displaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82442Q Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82442R Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82442S Displaced spiral fracture of shaft of left fibula, sequela -S82443A Displaced spiral fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82443B Displaced spiral fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82443C Displaced spiral fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82443D Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82443E Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82443F Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82443G Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82443H Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82443J Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82443K Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82443M Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82443N Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82443P Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82443Q Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82443R Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82443S Displaced spiral fracture of shaft of unspecified fibula, sequela -S82444A Nondisplaced spiral fracture of shaft of right fibula, initial encounter for closed fracture -S82444B Nondisplaced spiral fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82444C Nondisplaced spiral fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82444D Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82444E Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82444F Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82444G Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82444H Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82444J Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82444K Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82444M Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82444N Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82444P Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82444Q Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82444R Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82444S Nondisplaced spiral fracture of shaft of right fibula, sequela -S82445A Nondisplaced spiral fracture of shaft of left fibula, initial encounter for closed fracture -S82445B Nondisplaced spiral fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82445C Nondisplaced spiral fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82445D Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82445E Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82445F Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82445G Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82445H Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82445J Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82445K Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82445M Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82445N Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82445P Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82445Q Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82445R Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82445S Nondisplaced spiral fracture of shaft of left fibula, sequela -S82446A Nondisplaced spiral fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82446B Nondisplaced spiral fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82446C Nondisplaced spiral fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82446D Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82446E Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82446F Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82446G Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82446H Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82446J Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82446K Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82446M Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82446N Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82446P Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82446Q Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82446R Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82446S Nondisplaced spiral fracture of shaft of unspecified fibula, sequela -S82451A Displaced comminuted fracture of shaft of right fibula, initial encounter for closed fracture -S82451B Displaced comminuted fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82451C Displaced comminuted fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82451D Displaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82451E Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82451F Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82451G Displaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82451H Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82451J Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82451K Displaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82451M Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82451N Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82451P Displaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82451Q Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82451R Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82451S Displaced comminuted fracture of shaft of right fibula, sequela -S82452A Displaced comminuted fracture of shaft of left fibula, initial encounter for closed fracture -S82452B Displaced comminuted fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82452C Displaced comminuted fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82452D Displaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82452E Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82452F Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82452G Displaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82452H Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82452J Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82452K Displaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82452M Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82452N Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82452P Displaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82452Q Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82452R Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82452S Displaced comminuted fracture of shaft of left fibula, sequela -S82453A Displaced comminuted fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82453B Displaced comminuted fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82453C Displaced comminuted fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82453D Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82453E Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82453F Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82453G Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82453H Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82453J Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82453K Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82453M Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82453N Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82453P Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82453Q Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82453R Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82453S Displaced comminuted fracture of shaft of unspecified fibula, sequela -S82454A Nondisplaced comminuted fracture of shaft of right fibula, initial encounter for closed fracture -S82454B Nondisplaced comminuted fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82454C Nondisplaced comminuted fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82454D Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82454E Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82454F Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82454G Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82454H Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82454J Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82454K Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82454M Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82454N Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82454P Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82454Q Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82454R Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82454S Nondisplaced comminuted fracture of shaft of right fibula, sequela -S82455A Nondisplaced comminuted fracture of shaft of left fibula, initial encounter for closed fracture -S82455B Nondisplaced comminuted fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82455C Nondisplaced comminuted fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82455D Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82455E Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82455F Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82455G Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82455H Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82455J Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82455K Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82455M Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82455N Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82455P Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82455Q Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82455R Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82455S Nondisplaced comminuted fracture of shaft of left fibula, sequela -S82456A Nondisplaced comminuted fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82456B Nondisplaced comminuted fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82456C Nondisplaced comminuted fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82456D Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82456E Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82456F Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82456G Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82456H Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82456J Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82456K Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82456M Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82456N Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82456P Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82456Q Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82456R Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82456S Nondisplaced comminuted fracture of shaft of unspecified fibula, sequela -S82461A Displaced segmental fracture of shaft of right fibula, initial encounter for closed fracture -S82461B Displaced segmental fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82461C Displaced segmental fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82461D Displaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82461E Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82461F Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82461G Displaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82461H Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82461J Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82461K Displaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82461M Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82461N Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82461P Displaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82461Q Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82461R Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82461S Displaced segmental fracture of shaft of right fibula, sequela -S82462A Displaced segmental fracture of shaft of left fibula, initial encounter for closed fracture -S82462B Displaced segmental fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82462C Displaced segmental fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82462D Displaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82462E Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82462F Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82462G Displaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82462H Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82462J Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82462K Displaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82462M Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82462N Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82462P Displaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82462Q Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82462R Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82462S Displaced segmental fracture of shaft of left fibula, sequela -S82463A Displaced segmental fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82463B Displaced segmental fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82463C Displaced segmental fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82463D Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82463E Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82463F Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82463G Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82463H Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82463J Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82463K Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82463M Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82463N Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82463P Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82463Q Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82463R Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82463S Displaced segmental fracture of shaft of unspecified fibula, sequela -S82464A Nondisplaced segmental fracture of shaft of right fibula, initial encounter for closed fracture -S82464B Nondisplaced segmental fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82464C Nondisplaced segmental fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82464D Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82464E Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82464F Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82464G Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82464H Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82464J Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82464K Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82464M Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82464N Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82464P Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82464Q Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82464R Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82464S Nondisplaced segmental fracture of shaft of right fibula, sequela -S82465A Nondisplaced segmental fracture of shaft of left fibula, initial encounter for closed fracture -S82465B Nondisplaced segmental fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82465C Nondisplaced segmental fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82465D Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82465E Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82465F Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82465G Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82465H Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82465J Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82465K Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82465M Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82465N Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82465P Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82465Q Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82465R Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82465S Nondisplaced segmental fracture of shaft of left fibula, sequela -S82466A Nondisplaced segmental fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82466B Nondisplaced segmental fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82466C Nondisplaced segmental fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82466D Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82466E Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82466F Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82466G Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82466H Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82466J Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82466K Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82466M Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82466N Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82466P Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82466Q Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82466R Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82466S Nondisplaced segmental fracture of shaft of unspecified fibula, sequela -S82491A Other fracture of shaft of right fibula, initial encounter for closed fracture -S82491B Other fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82491C Other fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82491D Other fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82491E Other fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82491F Other fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82491G Other fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82491H Other fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82491J Other fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82491K Other fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82491M Other fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82491N Other fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82491P Other fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82491Q Other fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82491R Other fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82491S Other fracture of shaft of right fibula, sequela -S82492A Other fracture of shaft of left fibula, initial encounter for closed fracture -S82492B Other fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82492C Other fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82492D Other fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82492E Other fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82492F Other fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82492G Other fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82492H Other fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82492J Other fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82492K Other fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82492M Other fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82492N Other fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82492P Other fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82492Q Other fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82492R Other fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82492S Other fracture of shaft of left fibula, sequela -S82499A Other fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82499B Other fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82499C Other fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82499D Other fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82499E Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82499F Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82499G Other fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82499H Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82499J Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82499K Other fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82499M Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82499N Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82499P Other fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82499Q Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82499R Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82499S Other fracture of shaft of unspecified fibula, sequela -S8251XA Displaced fracture of medial malleolus of right tibia, initial encounter for closed fracture -S8251XB Displaced fracture of medial malleolus of right tibia, initial encounter for open fracture type I or II -S8251XC Displaced fracture of medial malleolus of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8251XD Displaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with routine healing -S8251XE Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with routine healing -S8251XF Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8251XG Displaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with delayed healing -S8251XH Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S8251XJ Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8251XK Displaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with nonunion -S8251XM Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with nonunion -S8251XN Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8251XP Displaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with malunion -S8251XQ Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with malunion -S8251XR Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8251XS Displaced fracture of medial malleolus of right tibia, sequela -S8252XA Displaced fracture of medial malleolus of left tibia, initial encounter for closed fracture -S8252XB Displaced fracture of medial malleolus of left tibia, initial encounter for open fracture type I or II -S8252XC Displaced fracture of medial malleolus of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8252XD Displaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with routine healing -S8252XE Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with routine healing -S8252XF Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8252XG Displaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with delayed healing -S8252XH Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S8252XJ Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8252XK Displaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with nonunion -S8252XM Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with nonunion -S8252XN Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8252XP Displaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with malunion -S8252XQ Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with malunion -S8252XR Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8252XS Displaced fracture of medial malleolus of left tibia, sequela -S8253XA Displaced fracture of medial malleolus of unspecified tibia, initial encounter for closed fracture -S8253XB Displaced fracture of medial malleolus of unspecified tibia, initial encounter for open fracture type I or II -S8253XC Displaced fracture of medial malleolus of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8253XD Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with routine healing -S8253XE Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S8253XF Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8253XG Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S8253XH Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S8253XJ Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8253XK Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with nonunion -S8253XM Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S8253XN Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8253XP Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with malunion -S8253XQ Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S8253XR Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8253XS Displaced fracture of medial malleolus of unspecified tibia, sequela -S8254XA Nondisplaced fracture of medial malleolus of right tibia, initial encounter for closed fracture -S8254XB Nondisplaced fracture of medial malleolus of right tibia, initial encounter for open fracture type I or II -S8254XC Nondisplaced fracture of medial malleolus of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8254XD Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with routine healing -S8254XE Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with routine healing -S8254XF Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8254XG Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with delayed healing -S8254XH Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S8254XJ Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8254XK Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with nonunion -S8254XM Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with nonunion -S8254XN Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8254XP Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with malunion -S8254XQ Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with malunion -S8254XR Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8254XS Nondisplaced fracture of medial malleolus of right tibia, sequela -S8255XA Nondisplaced fracture of medial malleolus of left tibia, initial encounter for closed fracture -S8255XB Nondisplaced fracture of medial malleolus of left tibia, initial encounter for open fracture type I or II -S8255XC Nondisplaced fracture of medial malleolus of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8255XD Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with routine healing -S8255XE Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with routine healing -S8255XF Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8255XG Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with delayed healing -S8255XH Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S8255XJ Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8255XK Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with nonunion -S8255XM Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with nonunion -S8255XN Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8255XP Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with malunion -S8255XQ Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with malunion -S8255XR Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8255XS Nondisplaced fracture of medial malleolus of left tibia, sequela -S8256XA Nondisplaced fracture of medial malleolus of unspecified tibia, initial encounter for closed fracture -S8256XB Nondisplaced fracture of medial malleolus of unspecified tibia, initial encounter for open fracture type I or II -S8256XC Nondisplaced fracture of medial malleolus of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8256XD Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with routine healing -S8256XE Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S8256XF Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8256XG Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S8256XH Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S8256XJ Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8256XK Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with nonunion -S8256XM Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S8256XN Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8256XP Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with malunion -S8256XQ Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S8256XR Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8256XS Nondisplaced fracture of medial malleolus of unspecified tibia, sequela -S8261XA Displaced fracture of lateral malleolus of right fibula, initial encounter for closed fracture -S8261XB Displaced fracture of lateral malleolus of right fibula, initial encounter for open fracture type I or II -S8261XC Displaced fracture of lateral malleolus of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8261XD Displaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with routine healing -S8261XE Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with routine healing -S8261XF Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8261XG Displaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with delayed healing -S8261XH Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S8261XJ Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8261XK Displaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with nonunion -S8261XM Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with nonunion -S8261XN Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8261XP Displaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with malunion -S8261XQ Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with malunion -S8261XR Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8261XS Displaced fracture of lateral malleolus of right fibula, sequela -S8262XA Displaced fracture of lateral malleolus of left fibula, initial encounter for closed fracture -S8262XB Displaced fracture of lateral malleolus of left fibula, initial encounter for open fracture type I or II -S8262XC Displaced fracture of lateral malleolus of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8262XD Displaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with routine healing -S8262XE Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with routine healing -S8262XF Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8262XG Displaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with delayed healing -S8262XH Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S8262XJ Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8262XK Displaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with nonunion -S8262XM Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with nonunion -S8262XN Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8262XP Displaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with malunion -S8262XQ Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with malunion -S8262XR Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8262XS Displaced fracture of lateral malleolus of left fibula, sequela -S8263XA Displaced fracture of lateral malleolus of unspecified fibula, initial encounter for closed fracture -S8263XB Displaced fracture of lateral malleolus of unspecified fibula, initial encounter for open fracture type I or II -S8263XC Displaced fracture of lateral malleolus of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8263XD Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with routine healing -S8263XE Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S8263XF Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8263XG Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S8263XH Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S8263XJ Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8263XK Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with nonunion -S8263XM Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S8263XN Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8263XP Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with malunion -S8263XQ Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S8263XR Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8263XS Displaced fracture of lateral malleolus of unspecified fibula, sequela -S8264XA Nondisplaced fracture of lateral malleolus of right fibula, initial encounter for closed fracture -S8264XB Nondisplaced fracture of lateral malleolus of right fibula, initial encounter for open fracture type I or II -S8264XC Nondisplaced fracture of lateral malleolus of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8264XD Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with routine healing -S8264XE Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with routine healing -S8264XF Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8264XG Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with delayed healing -S8264XH Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S8264XJ Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8264XK Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with nonunion -S8264XM Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with nonunion -S8264XN Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8264XP Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with malunion -S8264XQ Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with malunion -S8264XR Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8264XS Nondisplaced fracture of lateral malleolus of right fibula, sequela -S8265XA Nondisplaced fracture of lateral malleolus of left fibula, initial encounter for closed fracture -S8265XB Nondisplaced fracture of lateral malleolus of left fibula, initial encounter for open fracture type I or II -S8265XC Nondisplaced fracture of lateral malleolus of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8265XD Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with routine healing -S8265XE Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with routine healing -S8265XF Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8265XG Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with delayed healing -S8265XH Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S8265XJ Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8265XK Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with nonunion -S8265XM Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with nonunion -S8265XN Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8265XP Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with malunion -S8265XQ Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with malunion -S8265XR Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8265XS Nondisplaced fracture of lateral malleolus of left fibula, sequela -S8266XA Nondisplaced fracture of lateral malleolus of unspecified fibula, initial encounter for closed fracture -S8266XB Nondisplaced fracture of lateral malleolus of unspecified fibula, initial encounter for open fracture type I or II -S8266XC Nondisplaced fracture of lateral malleolus of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8266XD Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with routine healing -S8266XE Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S8266XF Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8266XG Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S8266XH Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S8266XJ Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8266XK Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with nonunion -S8266XM Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S8266XN Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8266XP Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with malunion -S8266XQ Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S8266XR Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8266XS Nondisplaced fracture of lateral malleolus of unspecified fibula, sequela -S82811A Torus fracture of upper end of right fibula, initial encounter for closed fracture -S82811D Torus fracture of upper end of right fibula, subsequent encounter for fracture with routine healing -S82811G Torus fracture of upper end of right fibula, subsequent encounter for fracture with delayed healing -S82811K Torus fracture of upper end of right fibula, subsequent encounter for fracture with nonunion -S82811P Torus fracture of upper end of right fibula, subsequent encounter for fracture with malunion -S82811S Torus fracture of upper end of right fibula, sequela -S82812A Torus fracture of upper end of left fibula, initial encounter for closed fracture -S82812D Torus fracture of upper end of left fibula, subsequent encounter for fracture with routine healing -S82812G Torus fracture of upper end of left fibula, subsequent encounter for fracture with delayed healing -S82812K Torus fracture of upper end of left fibula, subsequent encounter for fracture with nonunion -S82812P Torus fracture of upper end of left fibula, subsequent encounter for fracture with malunion -S82812S Torus fracture of upper end of left fibula, sequela -S82819A Torus fracture of upper end of unspecified fibula, initial encounter for closed fracture -S82819D Torus fracture of upper end of unspecified fibula, subsequent encounter for fracture with routine healing -S82819G Torus fracture of upper end of unspecified fibula, subsequent encounter for fracture with delayed healing -S82819K Torus fracture of upper end of unspecified fibula, subsequent encounter for fracture with nonunion -S82819P Torus fracture of upper end of unspecified fibula, subsequent encounter for fracture with malunion -S82819S Torus fracture of upper end of unspecified fibula, sequela -S82821A Torus fracture of lower end of right fibula, initial encounter for closed fracture -S82821D Torus fracture of lower end of right fibula, subsequent encounter for fracture with routine healing -S82821G Torus fracture of lower end of right fibula, subsequent encounter for fracture with delayed healing -S82821K Torus fracture of lower end of right fibula, subsequent encounter for fracture with nonunion -S82821P Torus fracture of lower end of right fibula, subsequent encounter for fracture with malunion -S82821S Torus fracture of lower end of right fibula, sequela -S82822A Torus fracture of lower end of left fibula, initial encounter for closed fracture -S82822D Torus fracture of lower end of left fibula, subsequent encounter for fracture with routine healing -S82822G Torus fracture of lower end of left fibula, subsequent encounter for fracture with delayed healing -S82822K Torus fracture of lower end of left fibula, subsequent encounter for fracture with nonunion -S82822P Torus fracture of lower end of left fibula, subsequent encounter for fracture with malunion -S82822S Torus fracture of lower end of left fibula, sequela -S82829A Torus fracture of lower end of unspecified fibula, initial encounter for closed fracture -S82829D Torus fracture of lower end of unspecified fibula, subsequent encounter for fracture with routine healing -S82829G Torus fracture of lower end of unspecified fibula, subsequent encounter for fracture with delayed healing -S82829K Torus fracture of lower end of unspecified fibula, subsequent encounter for fracture with nonunion -S82829P Torus fracture of lower end of unspecified fibula, subsequent encounter for fracture with malunion -S82829S Torus fracture of lower end of unspecified fibula, sequela -S82831A Other fracture of upper and lower end of right fibula, initial encounter for closed fracture -S82831B Other fracture of upper and lower end of right fibula, initial encounter for open fracture type I or II -S82831C Other fracture of upper and lower end of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82831D Other fracture of upper and lower end of right fibula, subsequent encounter for closed fracture with routine healing -S82831E Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82831F Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82831G Other fracture of upper and lower end of right fibula, subsequent encounter for closed fracture with delayed healing -S82831H Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82831J Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82831K Other fracture of upper and lower end of right fibula, subsequent encounter for closed fracture with nonunion -S82831M Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82831N Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82831P Other fracture of upper and lower end of right fibula, subsequent encounter for closed fracture with malunion -S82831Q Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type I or II with malunion -S82831R Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82831S Other fracture of upper and lower end of right fibula, sequela -S82832A Other fracture of upper and lower end of left fibula, initial encounter for closed fracture -S82832B Other fracture of upper and lower end of left fibula, initial encounter for open fracture type I or II -S82832C Other fracture of upper and lower end of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82832D Other fracture of upper and lower end of left fibula, subsequent encounter for closed fracture with routine healing -S82832E Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82832F Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82832G Other fracture of upper and lower end of left fibula, subsequent encounter for closed fracture with delayed healing -S82832H Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82832J Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82832K Other fracture of upper and lower end of left fibula, subsequent encounter for closed fracture with nonunion -S82832M Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82832N Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82832P Other fracture of upper and lower end of left fibula, subsequent encounter for closed fracture with malunion -S82832Q Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type I or II with malunion -S82832R Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82832S Other fracture of upper and lower end of left fibula, sequela -S82839A Other fracture of upper and lower end of unspecified fibula, initial encounter for closed fracture -S82839B Other fracture of upper and lower end of unspecified fibula, initial encounter for open fracture type I or II -S82839C Other fracture of upper and lower end of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82839D Other fracture of upper and lower end of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82839E Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82839F Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82839G Other fracture of upper and lower end of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82839H Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82839J Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82839K Other fracture of upper and lower end of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82839M Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82839N Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82839P Other fracture of upper and lower end of unspecified fibula, subsequent encounter for closed fracture with malunion -S82839Q Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82839R Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82839S Other fracture of upper and lower end of unspecified fibula, sequela -S82841A Displaced bimalleolar fracture of right lower leg, initial encounter for closed fracture -S82841B Displaced bimalleolar fracture of right lower leg, initial encounter for open fracture type I or II -S82841C Displaced bimalleolar fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82841D Displaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S82841E Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S82841F Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82841G Displaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S82841H Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82841J Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82841K Displaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S82841M Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S82841N Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82841P Displaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with malunion -S82841Q Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S82841R Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82841S Displaced bimalleolar fracture of right lower leg, sequela -S82842A Displaced bimalleolar fracture of left lower leg, initial encounter for closed fracture -S82842B Displaced bimalleolar fracture of left lower leg, initial encounter for open fracture type I or II -S82842C Displaced bimalleolar fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82842D Displaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S82842E Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S82842F Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82842G Displaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S82842H Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82842J Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82842K Displaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S82842M Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S82842N Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82842P Displaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with malunion -S82842Q Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S82842R Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82842S Displaced bimalleolar fracture of left lower leg, sequela -S82843A Displaced bimalleolar fracture of unspecified lower leg, initial encounter for closed fracture -S82843B Displaced bimalleolar fracture of unspecified lower leg, initial encounter for open fracture type I or II -S82843C Displaced bimalleolar fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82843D Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S82843E Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S82843F Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82843G Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S82843H Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82843J Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82843K Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S82843M Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S82843N Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82843P Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S82843Q Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S82843R Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82843S Displaced bimalleolar fracture of unspecified lower leg, sequela -S82844A Nondisplaced bimalleolar fracture of right lower leg, initial encounter for closed fracture -S82844B Nondisplaced bimalleolar fracture of right lower leg, initial encounter for open fracture type I or II -S82844C Nondisplaced bimalleolar fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82844D Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S82844E Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S82844F Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82844G Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S82844H Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82844J Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82844K Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S82844M Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S82844N Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82844P Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with malunion -S82844Q Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S82844R Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82844S Nondisplaced bimalleolar fracture of right lower leg, sequela -S82845A Nondisplaced bimalleolar fracture of left lower leg, initial encounter for closed fracture -S82845B Nondisplaced bimalleolar fracture of left lower leg, initial encounter for open fracture type I or II -S82845C Nondisplaced bimalleolar fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82845D Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S82845E Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S82845F Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82845G Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S82845H Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82845J Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82845K Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S82845M Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S82845N Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82845P Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with malunion -S82845Q Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S82845R Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82845S Nondisplaced bimalleolar fracture of left lower leg, sequela -S82846A Nondisplaced bimalleolar fracture of unspecified lower leg, initial encounter for closed fracture -S82846B Nondisplaced bimalleolar fracture of unspecified lower leg, initial encounter for open fracture type I or II -S82846C Nondisplaced bimalleolar fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82846D Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S82846E Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S82846F Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82846G Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S82846H Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82846J Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82846K Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S82846M Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S82846N Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82846P Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S82846Q Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S82846R Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82846S Nondisplaced bimalleolar fracture of unspecified lower leg, sequela -S82851A Displaced trimalleolar fracture of right lower leg, initial encounter for closed fracture -S82851B Displaced trimalleolar fracture of right lower leg, initial encounter for open fracture type I or II -S82851C Displaced trimalleolar fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82851D Displaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S82851E Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S82851F Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82851G Displaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S82851H Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82851J Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82851K Displaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S82851M Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S82851N Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82851P Displaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with malunion -S82851Q Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S82851R Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82851S Displaced trimalleolar fracture of right lower leg, sequela -S82852A Displaced trimalleolar fracture of left lower leg, initial encounter for closed fracture -S82852B Displaced trimalleolar fracture of left lower leg, initial encounter for open fracture type I or II -S82852C Displaced trimalleolar fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82852D Displaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S82852E Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S82852F Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82852G Displaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S82852H Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82852J Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82852K Displaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S82852M Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S82852N Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82852P Displaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with malunion -S82852Q Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S82852R Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82852S Displaced trimalleolar fracture of left lower leg, sequela -S82853A Displaced trimalleolar fracture of unspecified lower leg, initial encounter for closed fracture -S82853B Displaced trimalleolar fracture of unspecified lower leg, initial encounter for open fracture type I or II -S82853C Displaced trimalleolar fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82853D Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S82853E Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S82853F Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82853G Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S82853H Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82853J Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82853K Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S82853M Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S82853N Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82853P Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S82853Q Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S82853R Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82853S Displaced trimalleolar fracture of unspecified lower leg, sequela -S82854A Nondisplaced trimalleolar fracture of right lower leg, initial encounter for closed fracture -S82854B Nondisplaced trimalleolar fracture of right lower leg, initial encounter for open fracture type I or II -S82854C Nondisplaced trimalleolar fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82854D Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S82854E Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S82854F Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82854G Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S82854H Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82854J Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82854K Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S82854M Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S82854N Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82854P Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with malunion -S82854Q Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S82854R Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82854S Nondisplaced trimalleolar fracture of right lower leg, sequela -S82855A Nondisplaced trimalleolar fracture of left lower leg, initial encounter for closed fracture -S82855B Nondisplaced trimalleolar fracture of left lower leg, initial encounter for open fracture type I or II -S82855C Nondisplaced trimalleolar fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82855D Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S82855E Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S82855F Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82855G Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S82855H Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82855J Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82855K Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S82855M Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S82855N Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82855P Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with malunion -S82855Q Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S82855R Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82855S Nondisplaced trimalleolar fracture of left lower leg, sequela -S82856A Nondisplaced trimalleolar fracture of unspecified lower leg, initial encounter for closed fracture -S82856B Nondisplaced trimalleolar fracture of unspecified lower leg, initial encounter for open fracture type I or II -S82856C Nondisplaced trimalleolar fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82856D Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S82856E Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S82856F Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82856G Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S82856H Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82856J Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82856K Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S82856M Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S82856N Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82856P Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S82856Q Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S82856R Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82856S Nondisplaced trimalleolar fracture of unspecified lower leg, sequela -S82861A Displaced Maisonneuve's fracture of right leg, initial encounter for closed fracture -S82861B Displaced Maisonneuve's fracture of right leg, initial encounter for open fracture type I or II -S82861C Displaced Maisonneuve's fracture of right leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82861D Displaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with routine healing -S82861E Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with routine healing -S82861F Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82861G Displaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with delayed healing -S82861H Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with delayed healing -S82861J Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82861K Displaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with nonunion -S82861M Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with nonunion -S82861N Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82861P Displaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with malunion -S82861Q Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with malunion -S82861R Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82861S Displaced Maisonneuve's fracture of right leg, sequela -S82862A Displaced Maisonneuve's fracture of left leg, initial encounter for closed fracture -S82862B Displaced Maisonneuve's fracture of left leg, initial encounter for open fracture type I or II -S82862C Displaced Maisonneuve's fracture of left leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82862D Displaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with routine healing -S82862E Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with routine healing -S82862F Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82862G Displaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with delayed healing -S82862H Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with delayed healing -S82862J Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82862K Displaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with nonunion -S82862M Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with nonunion -S82862N Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82862P Displaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with malunion -S82862Q Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with malunion -S82862R Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82862S Displaced Maisonneuve's fracture of left leg, sequela -S82863A Displaced Maisonneuve's fracture of unspecified leg, initial encounter for closed fracture -S82863B Displaced Maisonneuve's fracture of unspecified leg, initial encounter for open fracture type I or II -S82863C Displaced Maisonneuve's fracture of unspecified leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82863D Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with routine healing -S82863E Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with routine healing -S82863F Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82863G Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with delayed healing -S82863H Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with delayed healing -S82863J Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82863K Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with nonunion -S82863M Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with nonunion -S82863N Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82863P Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with malunion -S82863Q Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with malunion -S82863R Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82863S Displaced Maisonneuve's fracture of unspecified leg, sequela -S82864A Nondisplaced Maisonneuve's fracture of right leg, initial encounter for closed fracture -S82864B Nondisplaced Maisonneuve's fracture of right leg, initial encounter for open fracture type I or II -S82864C Nondisplaced Maisonneuve's fracture of right leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82864D Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with routine healing -S82864E Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with routine healing -S82864F Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82864G Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with delayed healing -S82864H Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with delayed healing -S82864J Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82864K Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with nonunion -S82864M Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with nonunion -S82864N Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82864P Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with malunion -S82864Q Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with malunion -S82864R Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82864S Nondisplaced Maisonneuve's fracture of right leg, sequela -S82865A Nondisplaced Maisonneuve's fracture of left leg, initial encounter for closed fracture -S82865B Nondisplaced Maisonneuve's fracture of left leg, initial encounter for open fracture type I or II -S82865C Nondisplaced Maisonneuve's fracture of left leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82865D Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with routine healing -S82865E Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with routine healing -S82865F Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82865G Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with delayed healing -S82865H Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with delayed healing -S82865J Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82865K Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with nonunion -S82865M Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with nonunion -S82865N Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82865P Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with malunion -S82865Q Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with malunion -S82865R Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82865S Nondisplaced Maisonneuve's fracture of left leg, sequela -S82866A Nondisplaced Maisonneuve's fracture of unspecified leg, initial encounter for closed fracture -S82866B Nondisplaced Maisonneuve's fracture of unspecified leg, initial encounter for open fracture type I or II -S82866C Nondisplaced Maisonneuve's fracture of unspecified leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82866D Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with routine healing -S82866E Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with routine healing -S82866F Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82866G Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with delayed healing -S82866H Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with delayed healing -S82866J Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82866K Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with nonunion -S82866M Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with nonunion -S82866N Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82866P Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with malunion -S82866Q Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with malunion -S82866R Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82866S Nondisplaced Maisonneuve's fracture of unspecified leg, sequela -S82871A Displaced pilon fracture of right tibia, initial encounter for closed fracture -S82871B Displaced pilon fracture of right tibia, initial encounter for open fracture type I or II -S82871C Displaced pilon fracture of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82871D Displaced pilon fracture of right tibia, subsequent encounter for closed fracture with routine healing -S82871E Displaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82871F Displaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82871G Displaced pilon fracture of right tibia, subsequent encounter for closed fracture with delayed healing -S82871H Displaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82871J Displaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82871K Displaced pilon fracture of right tibia, subsequent encounter for closed fracture with nonunion -S82871M Displaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82871N Displaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82871P Displaced pilon fracture of right tibia, subsequent encounter for closed fracture with malunion -S82871Q Displaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with malunion -S82871R Displaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82871S Displaced pilon fracture of right tibia, sequela -S82872A Displaced pilon fracture of left tibia, initial encounter for closed fracture -S82872B Displaced pilon fracture of left tibia, initial encounter for open fracture type I or II -S82872C Displaced pilon fracture of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82872D Displaced pilon fracture of left tibia, subsequent encounter for closed fracture with routine healing -S82872E Displaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82872F Displaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82872G Displaced pilon fracture of left tibia, subsequent encounter for closed fracture with delayed healing -S82872H Displaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82872J Displaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82872K Displaced pilon fracture of left tibia, subsequent encounter for closed fracture with nonunion -S82872M Displaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82872N Displaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82872P Displaced pilon fracture of left tibia, subsequent encounter for closed fracture with malunion -S82872Q Displaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with malunion -S82872R Displaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82872S Displaced pilon fracture of left tibia, sequela -S82873A Displaced pilon fracture of unspecified tibia, initial encounter for closed fracture -S82873B Displaced pilon fracture of unspecified tibia, initial encounter for open fracture type I or II -S82873C Displaced pilon fracture of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82873D Displaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82873E Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82873F Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82873G Displaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82873H Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82873J Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82873K Displaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82873M Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82873N Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82873P Displaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with malunion -S82873Q Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82873R Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82873S Displaced pilon fracture of unspecified tibia, sequela -S82874A Nondisplaced pilon fracture of right tibia, initial encounter for closed fracture -S82874B Nondisplaced pilon fracture of right tibia, initial encounter for open fracture type I or II -S82874C Nondisplaced pilon fracture of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82874D Nondisplaced pilon fracture of right tibia, subsequent encounter for closed fracture with routine healing -S82874E Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82874F Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82874G Nondisplaced pilon fracture of right tibia, subsequent encounter for closed fracture with delayed healing -S82874H Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82874J Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82874K Nondisplaced pilon fracture of right tibia, subsequent encounter for closed fracture with nonunion -S82874M Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82874N Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82874P Nondisplaced pilon fracture of right tibia, subsequent encounter for closed fracture with malunion -S82874Q Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with malunion -S82874R Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82874S Nondisplaced pilon fracture of right tibia, sequela -S82875A Nondisplaced pilon fracture of left tibia, initial encounter for closed fracture -S82875B Nondisplaced pilon fracture of left tibia, initial encounter for open fracture type I or II -S82875C Nondisplaced pilon fracture of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82875D Nondisplaced pilon fracture of left tibia, subsequent encounter for closed fracture with routine healing -S82875E Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82875F Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82875G Nondisplaced pilon fracture of left tibia, subsequent encounter for closed fracture with delayed healing -S82875H Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82875J Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82875K Nondisplaced pilon fracture of left tibia, subsequent encounter for closed fracture with nonunion -S82875M Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82875N Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82875P Nondisplaced pilon fracture of left tibia, subsequent encounter for closed fracture with malunion -S82875Q Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with malunion -S82875R Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82875S Nondisplaced pilon fracture of left tibia, sequela -S82876A Nondisplaced pilon fracture of unspecified tibia, initial encounter for closed fracture -S82876B Nondisplaced pilon fracture of unspecified tibia, initial encounter for open fracture type I or II -S82876C Nondisplaced pilon fracture of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82876D Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82876E Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82876F Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82876G Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82876H Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82876J Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82876K Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82876M Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82876N Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82876P Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with malunion -S82876Q Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82876R Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82876S Nondisplaced pilon fracture of unspecified tibia, sequela -S82891A Other fracture of right lower leg, initial encounter for closed fracture -S82891B Other fracture of right lower leg, initial encounter for open fracture type I or II -S82891C Other fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82891D Other fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S82891E Other fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S82891F Other fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82891G Other fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S82891H Other fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82891J Other fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82891K Other fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S82891M Other fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S82891N Other fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82891P Other fracture of right lower leg, subsequent encounter for closed fracture with malunion -S82891Q Other fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S82891R Other fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82891S Other fracture of right lower leg, sequela -S82892A Other fracture of left lower leg, initial encounter for closed fracture -S82892B Other fracture of left lower leg, initial encounter for open fracture type I or II -S82892C Other fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82892D Other fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S82892E Other fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S82892F Other fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82892G Other fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S82892H Other fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82892J Other fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82892K Other fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S82892M Other fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S82892N Other fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82892P Other fracture of left lower leg, subsequent encounter for closed fracture with malunion -S82892Q Other fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S82892R Other fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82892S Other fracture of left lower leg, sequela -S82899A Other fracture of unspecified lower leg, initial encounter for closed fracture -S82899B Other fracture of unspecified lower leg, initial encounter for open fracture type I or II -S82899C Other fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82899D Other fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S82899E Other fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S82899F Other fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82899G Other fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S82899H Other fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82899J Other fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82899K Other fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S82899M Other fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S82899N Other fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82899P Other fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S82899Q Other fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S82899R Other fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82899S Other fracture of unspecified lower leg, sequela -S8290XA Unspecified fracture of unspecified lower leg, initial encounter for closed fracture -S8290XB Unspecified fracture of unspecified lower leg, initial encounter for open fracture type I or II -S8290XC Unspecified fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8290XD Unspecified fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S8290XE Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S8290XF Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8290XG Unspecified fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S8290XH Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S8290XJ Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8290XK Unspecified fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S8290XM Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S8290XN Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8290XP Unspecified fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S8290XQ Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S8290XR Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8290XS Unspecified fracture of unspecified lower leg, sequela -S8291XA Unspecified fracture of right lower leg, initial encounter for closed fracture -S8291XB Unspecified fracture of right lower leg, initial encounter for open fracture type I or II -S8291XC Unspecified fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8291XD Unspecified fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S8291XE Unspecified fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S8291XF Unspecified fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8291XG Unspecified fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S8291XH Unspecified fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S8291XJ Unspecified fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8291XK Unspecified fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S8291XM Unspecified fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S8291XN Unspecified fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8291XP Unspecified fracture of right lower leg, subsequent encounter for closed fracture with malunion -S8291XQ Unspecified fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S8291XR Unspecified fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8291XS Unspecified fracture of right lower leg, sequela -S8292XA Unspecified fracture of left lower leg, initial encounter for closed fracture -S8292XB Unspecified fracture of left lower leg, initial encounter for open fracture type I or II -S8292XC Unspecified fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8292XD Unspecified fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S8292XE Unspecified fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S8292XF Unspecified fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8292XG Unspecified fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S8292XH Unspecified fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S8292XJ Unspecified fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8292XK Unspecified fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S8292XM Unspecified fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S8292XN Unspecified fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8292XP Unspecified fracture of left lower leg, subsequent encounter for closed fracture with malunion -S8292XQ Unspecified fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S8292XR Unspecified fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8292XS Unspecified fracture of left lower leg, sequela -S83001A Unspecified subluxation of right patella, initial encounter -S83001D Unspecified subluxation of right patella, subsequent encounter -S83001S Unspecified subluxation of right patella, sequela -S83002A Unspecified subluxation of left patella, initial encounter -S83002D Unspecified subluxation of left patella, subsequent encounter -S83002S Unspecified subluxation of left patella, sequela -S83003A Unspecified subluxation of unspecified patella, initial encounter -S83003D Unspecified subluxation of unspecified patella, subsequent encounter -S83003S Unspecified subluxation of unspecified patella, sequela -S83004A Unspecified dislocation of right patella, initial encounter -S83004D Unspecified dislocation of right patella, subsequent encounter -S83004S Unspecified dislocation of right patella, sequela -S83005A Unspecified dislocation of left patella, initial encounter -S83005D Unspecified dislocation of left patella, subsequent encounter -S83005S Unspecified dislocation of left patella, sequela -S83006A Unspecified dislocation of unspecified patella, initial encounter -S83006D Unspecified dislocation of unspecified patella, subsequent encounter -S83006S Unspecified dislocation of unspecified patella, sequela -S83011A Lateral subluxation of right patella, initial encounter -S83011D Lateral subluxation of right patella, subsequent encounter -S83011S Lateral subluxation of right patella, sequela -S83012A Lateral subluxation of left patella, initial encounter -S83012D Lateral subluxation of left patella, subsequent encounter -S83012S Lateral subluxation of left patella, sequela -S83013A Lateral subluxation of unspecified patella, initial encounter -S83013D Lateral subluxation of unspecified patella, subsequent encounter -S83013S Lateral subluxation of unspecified patella, sequela -S83014A Lateral dislocation of right patella, initial encounter -S83014D Lateral dislocation of right patella, subsequent encounter -S83014S Lateral dislocation of right patella, sequela -S83015A Lateral dislocation of left patella, initial encounter -S83015D Lateral dislocation of left patella, subsequent encounter -S83015S Lateral dislocation of left patella, sequela -S83016A Lateral dislocation of unspecified patella, initial encounter -S83016D Lateral dislocation of unspecified patella, subsequent encounter -S83016S Lateral dislocation of unspecified patella, sequela -S83091A Other subluxation of right patella, initial encounter -S83091D Other subluxation of right patella, subsequent encounter -S83091S Other subluxation of right patella, sequela -S83092A Other subluxation of left patella, initial encounter -S83092D Other subluxation of left patella, subsequent encounter -S83092S Other subluxation of left patella, sequela -S83093A Other subluxation of unspecified patella, initial encounter -S83093D Other subluxation of unspecified patella, subsequent encounter -S83093S Other subluxation of unspecified patella, sequela -S83094A Other dislocation of right patella, initial encounter -S83094D Other dislocation of right patella, subsequent encounter -S83094S Other dislocation of right patella, sequela -S83095A Other dislocation of left patella, initial encounter -S83095D Other dislocation of left patella, subsequent encounter -S83095S Other dislocation of left patella, sequela -S83096A Other dislocation of unspecified patella, initial encounter -S83096D Other dislocation of unspecified patella, subsequent encounter -S83096S Other dislocation of unspecified patella, sequela -S83101A Unspecified subluxation of right knee, initial encounter -S83101D Unspecified subluxation of right knee, subsequent encounter -S83101S Unspecified subluxation of right knee, sequela -S83102A Unspecified subluxation of left knee, initial encounter -S83102D Unspecified subluxation of left knee, subsequent encounter -S83102S Unspecified subluxation of left knee, sequela -S83103A Unspecified subluxation of unspecified knee, initial encounter -S83103D Unspecified subluxation of unspecified knee, subsequent encounter -S83103S Unspecified subluxation of unspecified knee, sequela -S83104A Unspecified dislocation of right knee, initial encounter -S83104D Unspecified dislocation of right knee, subsequent encounter -S83104S Unspecified dislocation of right knee, sequela -S83105A Unspecified dislocation of left knee, initial encounter -S83105D Unspecified dislocation of left knee, subsequent encounter -S83105S Unspecified dislocation of left knee, sequela -S83106A Unspecified dislocation of unspecified knee, initial encounter -S83106D Unspecified dislocation of unspecified knee, subsequent encounter -S83106S Unspecified dislocation of unspecified knee, sequela -S83111A Anterior subluxation of proximal end of tibia, right knee, initial encounter -S83111D Anterior subluxation of proximal end of tibia, right knee, subsequent encounter -S83111S Anterior subluxation of proximal end of tibia, right knee, sequela -S83112A Anterior subluxation of proximal end of tibia, left knee, initial encounter -S83112D Anterior subluxation of proximal end of tibia, left knee, subsequent encounter -S83112S Anterior subluxation of proximal end of tibia, left knee, sequela -S83113A Anterior subluxation of proximal end of tibia, unspecified knee, initial encounter -S83113D Anterior subluxation of proximal end of tibia, unspecified knee, subsequent encounter -S83113S Anterior subluxation of proximal end of tibia, unspecified knee, sequela -S83114A Anterior dislocation of proximal end of tibia, right knee, initial encounter -S83114D Anterior dislocation of proximal end of tibia, right knee, subsequent encounter -S83114S Anterior dislocation of proximal end of tibia, right knee, sequela -S83115A Anterior dislocation of proximal end of tibia, left knee, initial encounter -S83115D Anterior dislocation of proximal end of tibia, left knee, subsequent encounter -S83115S Anterior dislocation of proximal end of tibia, left knee, sequela -S83116A Anterior dislocation of proximal end of tibia, unspecified knee, initial encounter -S83116D Anterior dislocation of proximal end of tibia, unspecified knee, subsequent encounter -S83116S Anterior dislocation of proximal end of tibia, unspecified knee, sequela -S83121A Posterior subluxation of proximal end of tibia, right knee, initial encounter -S83121D Posterior subluxation of proximal end of tibia, right knee, subsequent encounter -S83121S Posterior subluxation of proximal end of tibia, right knee, sequela -S83122A Posterior subluxation of proximal end of tibia, left knee, initial encounter -S83122D Posterior subluxation of proximal end of tibia, left knee, subsequent encounter -S83122S Posterior subluxation of proximal end of tibia, left knee, sequela -S83123A Posterior subluxation of proximal end of tibia, unspecified knee, initial encounter -S83123D Posterior subluxation of proximal end of tibia, unspecified knee, subsequent encounter -S83123S Posterior subluxation of proximal end of tibia, unspecified knee, sequela -S83124A Posterior dislocation of proximal end of tibia, right knee, initial encounter -S83124D Posterior dislocation of proximal end of tibia, right knee, subsequent encounter -S83124S Posterior dislocation of proximal end of tibia, right knee, sequela -S83125A Posterior dislocation of proximal end of tibia, left knee, initial encounter -S83125D Posterior dislocation of proximal end of tibia, left knee, subsequent encounter -S83125S Posterior dislocation of proximal end of tibia, left knee, sequela -S83126A Posterior dislocation of proximal end of tibia, unspecified knee, initial encounter -S83126D Posterior dislocation of proximal end of tibia, unspecified knee, subsequent encounter -S83126S Posterior dislocation of proximal end of tibia, unspecified knee, sequela -S83131A Medial subluxation of proximal end of tibia, right knee, initial encounter -S83131D Medial subluxation of proximal end of tibia, right knee, subsequent encounter -S83131S Medial subluxation of proximal end of tibia, right knee, sequela -S83132A Medial subluxation of proximal end of tibia, left knee, initial encounter -S83132D Medial subluxation of proximal end of tibia, left knee, subsequent encounter -S83132S Medial subluxation of proximal end of tibia, left knee, sequela -S83133A Medial subluxation of proximal end of tibia, unspecified knee, initial encounter -S83133D Medial subluxation of proximal end of tibia, unspecified knee, subsequent encounter -S83133S Medial subluxation of proximal end of tibia, unspecified knee, sequela -S83134A Medial dislocation of proximal end of tibia, right knee, initial encounter -S83134D Medial dislocation of proximal end of tibia, right knee, subsequent encounter -S83134S Medial dislocation of proximal end of tibia, right knee, sequela -S83135A Medial dislocation of proximal end of tibia, left knee, initial encounter -S83135D Medial dislocation of proximal end of tibia, left knee, subsequent encounter -S83135S Medial dislocation of proximal end of tibia, left knee, sequela -S83136A Medial dislocation of proximal end of tibia, unspecified knee, initial encounter -S83136D Medial dislocation of proximal end of tibia, unspecified knee, subsequent encounter -S83136S Medial dislocation of proximal end of tibia, unspecified knee, sequela -S83141A Lateral subluxation of proximal end of tibia, right knee, initial encounter -S83141D Lateral subluxation of proximal end of tibia, right knee, subsequent encounter -S83141S Lateral subluxation of proximal end of tibia, right knee, sequela -S83142A Lateral subluxation of proximal end of tibia, left knee, initial encounter -S83142D Lateral subluxation of proximal end of tibia, left knee, subsequent encounter -S83142S Lateral subluxation of proximal end of tibia, left knee, sequela -S83143A Lateral subluxation of proximal end of tibia, unspecified knee, initial encounter -S83143D Lateral subluxation of proximal end of tibia, unspecified knee, subsequent encounter -S83143S Lateral subluxation of proximal end of tibia, unspecified knee, sequela -S83144A Lateral dislocation of proximal end of tibia, right knee, initial encounter -S83144D Lateral dislocation of proximal end of tibia, right knee, subsequent encounter -S83144S Lateral dislocation of proximal end of tibia, right knee, sequela -S83145A Lateral dislocation of proximal end of tibia, left knee, initial encounter -S83145D Lateral dislocation of proximal end of tibia, left knee, subsequent encounter -S83145S Lateral dislocation of proximal end of tibia, left knee, sequela -S83146A Lateral dislocation of proximal end of tibia, unspecified knee, initial encounter -S83146D Lateral dislocation of proximal end of tibia, unspecified knee, subsequent encounter -S83146S Lateral dislocation of proximal end of tibia, unspecified knee, sequela -S83191A Other subluxation of right knee, initial encounter -S83191D Other subluxation of right knee, subsequent encounter -S83191S Other subluxation of right knee, sequela -S83192A Other subluxation of left knee, initial encounter -S83192D Other subluxation of left knee, subsequent encounter -S83192S Other subluxation of left knee, sequela -S83193A Other subluxation of unspecified knee, initial encounter -S83193D Other subluxation of unspecified knee, subsequent encounter -S83193S Other subluxation of unspecified knee, sequela -S83194A Other dislocation of right knee, initial encounter -S83194D Other dislocation of right knee, subsequent encounter -S83194S Other dislocation of right knee, sequela -S83195A Other dislocation of left knee, initial encounter -S83195D Other dislocation of left knee, subsequent encounter -S83195S Other dislocation of left knee, sequela -S83196A Other dislocation of unspecified knee, initial encounter -S83196D Other dislocation of unspecified knee, subsequent encounter -S83196S Other dislocation of unspecified knee, sequela -S83200A Bucket-handle tear of unspecified meniscus, current injury, right knee, initial encounter -S83200D Bucket-handle tear of unspecified meniscus, current injury, right knee, subsequent encounter -S83200S Bucket-handle tear of unspecified meniscus, current injury, right knee, sequela -S83201A Bucket-handle tear of unspecified meniscus, current injury, left knee, initial encounter -S83201D Bucket-handle tear of unspecified meniscus, current injury, left knee, subsequent encounter -S83201S Bucket-handle tear of unspecified meniscus, current injury, left knee, sequela -S83202A Bucket-handle tear of unspecified meniscus, current injury, unspecified knee, initial encounter -S83202D Bucket-handle tear of unspecified meniscus, current injury, unspecified knee, subsequent encounter -S83202S Bucket-handle tear of unspecified meniscus, current injury, unspecified knee, sequela -S83203A Other tear of unspecified meniscus, current injury, right knee, initial encounter -S83203D Other tear of unspecified meniscus, current injury, right knee, subsequent encounter -S83203S Other tear of unspecified meniscus, current injury, right knee, sequela -S83204A Other tear of unspecified meniscus, current injury, left knee, initial encounter -S83204D Other tear of unspecified meniscus, current injury, left knee, subsequent encounter -S83204S Other tear of unspecified meniscus, current injury, left knee, sequela -S83205A Other tear of unspecified meniscus, current injury, unspecified knee, initial encounter -S83205D Other tear of unspecified meniscus, current injury, unspecified knee, subsequent encounter -S83205S Other tear of unspecified meniscus, current injury, unspecified knee, sequela -S83206A Unspecified tear of unspecified meniscus, current injury, right knee, initial encounter -S83206D Unspecified tear of unspecified meniscus, current injury, right knee, subsequent encounter -S83206S Unspecified tear of unspecified meniscus, current injury, right knee, sequela -S83207A Unspecified tear of unspecified meniscus, current injury, left knee, initial encounter -S83207D Unspecified tear of unspecified meniscus, current injury, left knee, subsequent encounter -S83207S Unspecified tear of unspecified meniscus, current injury, left knee, sequela -S83209A Unspecified tear of unspecified meniscus, current injury, unspecified knee, initial encounter -S83209D Unspecified tear of unspecified meniscus, current injury, unspecified knee, subsequent encounter -S83209S Unspecified tear of unspecified meniscus, current injury, unspecified knee, sequela -S83211A Bucket-handle tear of medial meniscus, current injury, right knee, initial encounter -S83211D Bucket-handle tear of medial meniscus, current injury, right knee, subsequent encounter -S83211S Bucket-handle tear of medial meniscus, current injury, right knee, sequela -S83212A Bucket-handle tear of medial meniscus, current injury, left knee, initial encounter -S83212D Bucket-handle tear of medial meniscus, current injury, left knee, subsequent encounter -S83212S Bucket-handle tear of medial meniscus, current injury, left knee, sequela -S83219A Bucket-handle tear of medial meniscus, current injury, unspecified knee, initial encounter -S83219D Bucket-handle tear of medial meniscus, current injury, unspecified knee, subsequent encounter -S83219S Bucket-handle tear of medial meniscus, current injury, unspecified knee, sequela -S83221A Peripheral tear of medial meniscus, current injury, right knee, initial encounter -S83221D Peripheral tear of medial meniscus, current injury, right knee, subsequent encounter -S83221S Peripheral tear of medial meniscus, current injury, right knee, sequela -S83222A Peripheral tear of medial meniscus, current injury, left knee, initial encounter -S83222D Peripheral tear of medial meniscus, current injury, left knee, subsequent encounter -S83222S Peripheral tear of medial meniscus, current injury, left knee, sequela -S83229A Peripheral tear of medial meniscus, current injury, unspecified knee, initial encounter -S83229D Peripheral tear of medial meniscus, current injury, unspecified knee, subsequent encounter -S83229S Peripheral tear of medial meniscus, current injury, unspecified knee, sequela -S83231A Complex tear of medial meniscus, current injury, right knee, initial encounter -S83231D Complex tear of medial meniscus, current injury, right knee, subsequent encounter -S83231S Complex tear of medial meniscus, current injury, right knee, sequela -S83232A Complex tear of medial meniscus, current injury, left knee, initial encounter -S83232D Complex tear of medial meniscus, current injury, left knee, subsequent encounter -S83232S Complex tear of medial meniscus, current injury, left knee, sequela -S83239A Complex tear of medial meniscus, current injury, unspecified knee, initial encounter -S83239D Complex tear of medial meniscus, current injury, unspecified knee, subsequent encounter -S83239S Complex tear of medial meniscus, current injury, unspecified knee, sequela -S83241A Other tear of medial meniscus, current injury, right knee, initial encounter -S83241D Other tear of medial meniscus, current injury, right knee, subsequent encounter -S83241S Other tear of medial meniscus, current injury, right knee, sequela -S83242A Other tear of medial meniscus, current injury, left knee, initial encounter -S83242D Other tear of medial meniscus, current injury, left knee, subsequent encounter -S83242S Other tear of medial meniscus, current injury, left knee, sequela -S83249A Other tear of medial meniscus, current injury, unspecified knee, initial encounter -S83249D Other tear of medial meniscus, current injury, unspecified knee, subsequent encounter -S83249S Other tear of medial meniscus, current injury, unspecified knee, sequela -S83251A Bucket-handle tear of lateral meniscus, current injury, right knee, initial encounter -S83251D Bucket-handle tear of lateral meniscus, current injury, right knee, subsequent encounter -S83251S Bucket-handle tear of lateral meniscus, current injury, right knee, sequela -S83252A Bucket-handle tear of lateral meniscus, current injury, left knee, initial encounter -S83252D Bucket-handle tear of lateral meniscus, current injury, left knee, subsequent encounter -S83252S Bucket-handle tear of lateral meniscus, current injury, left knee, sequela -S83259A Bucket-handle tear of lateral meniscus, current injury, unspecified knee, initial encounter -S83259D Bucket-handle tear of lateral meniscus, current injury, unspecified knee, subsequent encounter -S83259S Bucket-handle tear of lateral meniscus, current injury, unspecified knee, sequela -S83261A Peripheral tear of lateral meniscus, current injury, right knee, initial encounter -S83261D Peripheral tear of lateral meniscus, current injury, right knee, subsequent encounter -S83261S Peripheral tear of lateral meniscus, current injury, right knee, sequela -S83262A Peripheral tear of lateral meniscus, current injury, left knee, initial encounter -S83262D Peripheral tear of lateral meniscus, current injury, left knee, subsequent encounter -S83262S Peripheral tear of lateral meniscus, current injury, left knee, sequela -S83269A Peripheral tear of lateral meniscus, current injury, unspecified knee, initial encounter -S83269D Peripheral tear of lateral meniscus, current injury, unspecified knee, subsequent encounter -S83269S Peripheral tear of lateral meniscus, current injury, unspecified knee, sequela -S83271A Complex tear of lateral meniscus, current injury, right knee, initial encounter -S83271D Complex tear of lateral meniscus, current injury, right knee, subsequent encounter -S83271S Complex tear of lateral meniscus, current injury, right knee, sequela -S83272A Complex tear of lateral meniscus, current injury, left knee, initial encounter -S83272D Complex tear of lateral meniscus, current injury, left knee, subsequent encounter -S83272S Complex tear of lateral meniscus, current injury, left knee, sequela -S83279A Complex tear of lateral meniscus, current injury, unspecified knee, initial encounter -S83279D Complex tear of lateral meniscus, current injury, unspecified knee, subsequent encounter -S83279S Complex tear of lateral meniscus, current injury, unspecified knee, sequela -S83281A Other tear of lateral meniscus, current injury, right knee, initial encounter -S83281D Other tear of lateral meniscus, current injury, right knee, subsequent encounter -S83281S Other tear of lateral meniscus, current injury, right knee, sequela -S83282A Other tear of lateral meniscus, current injury, left knee, initial encounter -S83282D Other tear of lateral meniscus, current injury, left knee, subsequent encounter -S83282S Other tear of lateral meniscus, current injury, left knee, sequela -S83289A Other tear of lateral meniscus, current injury, unspecified knee, initial encounter -S83289D Other tear of lateral meniscus, current injury, unspecified knee, subsequent encounter -S83289S Other tear of lateral meniscus, current injury, unspecified knee, sequela -S8330XA Tear of articular cartilage of unspecified knee, current, initial encounter -S8330XD Tear of articular cartilage of unspecified knee, current, subsequent encounter -S8330XS Tear of articular cartilage of unspecified knee, current, sequela -S8331XA Tear of articular cartilage of right knee, current, initial encounter -S8331XD Tear of articular cartilage of right knee, current, subsequent encounter -S8331XS Tear of articular cartilage of right knee, current, sequela -S8332XA Tear of articular cartilage of left knee, current, initial encounter -S8332XD Tear of articular cartilage of left knee, current, subsequent encounter -S8332XS Tear of articular cartilage of left knee, current, sequela -S83401A Sprain of unspecified collateral ligament of right knee, initial encounter -S83401D Sprain of unspecified collateral ligament of right knee, subsequent encounter -S83401S Sprain of unspecified collateral ligament of right knee, sequela -S83402A Sprain of unspecified collateral ligament of left knee, initial encounter -S83402D Sprain of unspecified collateral ligament of left knee, subsequent encounter -S83402S Sprain of unspecified collateral ligament of left knee, sequela -S83409A Sprain of unspecified collateral ligament of unspecified knee, initial encounter -S83409D Sprain of unspecified collateral ligament of unspecified knee, subsequent encounter -S83409S Sprain of unspecified collateral ligament of unspecified knee, sequela -S83411A Sprain of medial collateral ligament of right knee, initial encounter -S83411D Sprain of medial collateral ligament of right knee, subsequent encounter -S83411S Sprain of medial collateral ligament of right knee, sequela -S83412A Sprain of medial collateral ligament of left knee, initial encounter -S83412D Sprain of medial collateral ligament of left knee, subsequent encounter -S83412S Sprain of medial collateral ligament of left knee, sequela -S83419A Sprain of medial collateral ligament of unspecified knee, initial encounter -S83419D Sprain of medial collateral ligament of unspecified knee, subsequent encounter -S83419S Sprain of medial collateral ligament of unspecified knee, sequela -S83421A Sprain of lateral collateral ligament of right knee, initial encounter -S83421D Sprain of lateral collateral ligament of right knee, subsequent encounter -S83421S Sprain of lateral collateral ligament of right knee, sequela -S83422A Sprain of lateral collateral ligament of left knee, initial encounter -S83422D Sprain of lateral collateral ligament of left knee, subsequent encounter -S83422S Sprain of lateral collateral ligament of left knee, sequela -S83429A Sprain of lateral collateral ligament of unspecified knee, initial encounter -S83429D Sprain of lateral collateral ligament of unspecified knee, subsequent encounter -S83429S Sprain of lateral collateral ligament of unspecified knee, sequela -S83501A Sprain of unspecified cruciate ligament of right knee, initial encounter -S83501D Sprain of unspecified cruciate ligament of right knee, subsequent encounter -S83501S Sprain of unspecified cruciate ligament of right knee, sequela -S83502A Sprain of unspecified cruciate ligament of left knee, initial encounter -S83502D Sprain of unspecified cruciate ligament of left knee, subsequent encounter -S83502S Sprain of unspecified cruciate ligament of left knee, sequela -S83509A Sprain of unspecified cruciate ligament of unspecified knee, initial encounter -S83509D Sprain of unspecified cruciate ligament of unspecified knee, subsequent encounter -S83509S Sprain of unspecified cruciate ligament of unspecified knee, sequela -S83511A Sprain of anterior cruciate ligament of right knee, initial encounter -S83511D Sprain of anterior cruciate ligament of right knee, subsequent encounter -S83511S Sprain of anterior cruciate ligament of right knee, sequela -S83512A Sprain of anterior cruciate ligament of left knee, initial encounter -S83512D Sprain of anterior cruciate ligament of left knee, subsequent encounter -S83512S Sprain of anterior cruciate ligament of left knee, sequela -S83519A Sprain of anterior cruciate ligament of unspecified knee, initial encounter -S83519D Sprain of anterior cruciate ligament of unspecified knee, subsequent encounter -S83519S Sprain of anterior cruciate ligament of unspecified knee, sequela -S83521A Sprain of posterior cruciate ligament of right knee, initial encounter -S83521D Sprain of posterior cruciate ligament of right knee, subsequent encounter -S83521S Sprain of posterior cruciate ligament of right knee, sequela -S83522A Sprain of posterior cruciate ligament of left knee, initial encounter -S83522D Sprain of posterior cruciate ligament of left knee, subsequent encounter -S83522S Sprain of posterior cruciate ligament of left knee, sequela -S83529A Sprain of posterior cruciate ligament of unspecified knee, initial encounter -S83529D Sprain of posterior cruciate ligament of unspecified knee, subsequent encounter -S83529S Sprain of posterior cruciate ligament of unspecified knee, sequela -S8360XA Sprain of the superior tibiofibular joint and ligament, unspecified knee, initial encounter -S8360XD Sprain of the superior tibiofibular joint and ligament, unspecified knee, subsequent encounter -S8360XS Sprain of the superior tibiofibular joint and ligament, unspecified knee, sequela -S8361XA Sprain of the superior tibiofibular joint and ligament, right knee, initial encounter -S8361XD Sprain of the superior tibiofibular joint and ligament, right knee, subsequent encounter -S8361XS Sprain of the superior tibiofibular joint and ligament, right knee, sequela -S8362XA Sprain of the superior tibiofibular joint and ligament, left knee, initial encounter -S8362XD Sprain of the superior tibiofibular joint and ligament, left knee, subsequent encounter -S8362XS Sprain of the superior tibiofibular joint and ligament, left knee, sequela -S838X1A Sprain of other specified parts of right knee, initial encounter -S838X1D Sprain of other specified parts of right knee, subsequent encounter -S838X1S Sprain of other specified parts of right knee, sequela -S838X2A Sprain of other specified parts of left knee, initial encounter -S838X2D Sprain of other specified parts of left knee, subsequent encounter -S838X2S Sprain of other specified parts of left knee, sequela -S838X9A Sprain of other specified parts of unspecified knee, initial encounter -S838X9D Sprain of other specified parts of unspecified knee, subsequent encounter -S838X9S Sprain of other specified parts of unspecified knee, sequela -S8390XA Sprain of unspecified site of unspecified knee, initial encounter -S8390XD Sprain of unspecified site of unspecified knee, subsequent encounter -S8390XS Sprain of unspecified site of unspecified knee, sequela -S8391XA Sprain of unspecified site of right knee, initial encounter -S8391XD Sprain of unspecified site of right knee, subsequent encounter -S8391XS Sprain of unspecified site of right knee, sequela -S8392XA Sprain of unspecified site of left knee, initial encounter -S8392XD Sprain of unspecified site of left knee, subsequent encounter -S8392XS Sprain of unspecified site of left knee, sequela -S8400XA Injury of tibial nerve at lower leg level, unspecified leg, initial encounter -S8400XD Injury of tibial nerve at lower leg level, unspecified leg, subsequent encounter -S8400XS Injury of tibial nerve at lower leg level, unspecified leg, sequela -S8401XA Injury of tibial nerve at lower leg level, right leg, initial encounter -S8401XD Injury of tibial nerve at lower leg level, right leg, subsequent encounter -S8401XS Injury of tibial nerve at lower leg level, right leg, sequela -S8402XA Injury of tibial nerve at lower leg level, left leg, initial encounter -S8402XD Injury of tibial nerve at lower leg level, left leg, subsequent encounter -S8402XS Injury of tibial nerve at lower leg level, left leg, sequela -S8410XA Injury of peroneal nerve at lower leg level, unspecified leg, initial encounter -S8410XD Injury of peroneal nerve at lower leg level, unspecified leg, subsequent encounter -S8410XS Injury of peroneal nerve at lower leg level, unspecified leg, sequela -S8411XA Injury of peroneal nerve at lower leg level, right leg, initial encounter -S8411XD Injury of peroneal nerve at lower leg level, right leg, subsequent encounter -S8411XS Injury of peroneal nerve at lower leg level, right leg, sequela -S8412XA Injury of peroneal nerve at lower leg level, left leg, initial encounter -S8412XD Injury of peroneal nerve at lower leg level, left leg, subsequent encounter -S8412XS Injury of peroneal nerve at lower leg level, left leg, sequela -S8420XA Injury of cutaneous sensory nerve at lower leg level, unspecified leg, initial encounter -S8420XD Injury of cutaneous sensory nerve at lower leg level, unspecified leg, subsequent encounter -S8420XS Injury of cutaneous sensory nerve at lower leg level, unspecified leg, sequela -S8421XA Injury of cutaneous sensory nerve at lower leg level, right leg, initial encounter -S8421XD Injury of cutaneous sensory nerve at lower leg level, right leg, subsequent encounter -S8421XS Injury of cutaneous sensory nerve at lower leg level, right leg, sequela -S8422XA Injury of cutaneous sensory nerve at lower leg level, left leg, initial encounter -S8422XD Injury of cutaneous sensory nerve at lower leg level, left leg, subsequent encounter -S8422XS Injury of cutaneous sensory nerve at lower leg level, left leg, sequela -S84801A Injury of other nerves at lower leg level, right leg, initial encounter -S84801D Injury of other nerves at lower leg level, right leg, subsequent encounter -S84801S Injury of other nerves at lower leg level, right leg, sequela -S84802A Injury of other nerves at lower leg level, left leg, initial encounter -S84802D Injury of other nerves at lower leg level, left leg, subsequent encounter -S84802S Injury of other nerves at lower leg level, left leg, sequela -S84809A Injury of other nerves at lower leg level, unspecified leg, initial encounter -S84809D Injury of other nerves at lower leg level, unspecified leg, subsequent encounter -S84809S Injury of other nerves at lower leg level, unspecified leg, sequela -S8490XA Injury of unspecified nerve at lower leg level, unspecified leg, initial encounter -S8490XD Injury of unspecified nerve at lower leg level, unspecified leg, subsequent encounter -S8490XS Injury of unspecified nerve at lower leg level, unspecified leg, sequela -S8491XA Injury of unspecified nerve at lower leg level, right leg, initial encounter -S8491XD Injury of unspecified nerve at lower leg level, right leg, subsequent encounter -S8491XS Injury of unspecified nerve at lower leg level, right leg, sequela -S8492XA Injury of unspecified nerve at lower leg level, left leg, initial encounter -S8492XD Injury of unspecified nerve at lower leg level, left leg, subsequent encounter -S8492XS Injury of unspecified nerve at lower leg level, left leg, sequela -S85001A Unspecified injury of popliteal artery, right leg, initial encounter -S85001D Unspecified injury of popliteal artery, right leg, subsequent encounter -S85001S Unspecified injury of popliteal artery, right leg, sequela -S85002A Unspecified injury of popliteal artery, left leg, initial encounter -S85002D Unspecified injury of popliteal artery, left leg, subsequent encounter -S85002S Unspecified injury of popliteal artery, left leg, sequela -S85009A Unspecified injury of popliteal artery, unspecified leg, initial encounter -S85009D Unspecified injury of popliteal artery, unspecified leg, subsequent encounter -S85009S Unspecified injury of popliteal artery, unspecified leg, sequela -S85011A Laceration of popliteal artery, right leg, initial encounter -S85011D Laceration of popliteal artery, right leg, subsequent encounter -S85011S Laceration of popliteal artery, right leg, sequela -S85012A Laceration of popliteal artery, left leg, initial encounter -S85012D Laceration of popliteal artery, left leg, subsequent encounter -S85012S Laceration of popliteal artery, left leg, sequela -S85019A Laceration of popliteal artery, unspecified leg, initial encounter -S85019D Laceration of popliteal artery, unspecified leg, subsequent encounter -S85019S Laceration of popliteal artery, unspecified leg, sequela -S85091A Other specified injury of popliteal artery, right leg, initial encounter -S85091D Other specified injury of popliteal artery, right leg, subsequent encounter -S85091S Other specified injury of popliteal artery, right leg, sequela -S85092A Other specified injury of popliteal artery, left leg, initial encounter -S85092D Other specified injury of popliteal artery, left leg, subsequent encounter -S85092S Other specified injury of popliteal artery, left leg, sequela -S85099A Other specified injury of popliteal artery, unspecified leg, initial encounter -S85099D Other specified injury of popliteal artery, unspecified leg, subsequent encounter -S85099S Other specified injury of popliteal artery, unspecified leg, sequela -S85101A Unspecified injury of unspecified tibial artery, right leg, initial encounter -S85101D Unspecified injury of unspecified tibial artery, right leg, subsequent encounter -S85101S Unspecified injury of unspecified tibial artery, right leg, sequela -S85102A Unspecified injury of unspecified tibial artery, left leg, initial encounter -S85102D Unspecified injury of unspecified tibial artery, left leg, subsequent encounter -S85102S Unspecified injury of unspecified tibial artery, left leg, sequela -S85109A Unspecified injury of unspecified tibial artery, unspecified leg, initial encounter -S85109D Unspecified injury of unspecified tibial artery, unspecified leg, subsequent encounter -S85109S Unspecified injury of unspecified tibial artery, unspecified leg, sequela -S85111A Laceration of unspecified tibial artery, right leg, initial encounter -S85111D Laceration of unspecified tibial artery, right leg, subsequent encounter -S85111S Laceration of unspecified tibial artery, right leg, sequela -S85112A Laceration of unspecified tibial artery, left leg, initial encounter -S85112D Laceration of unspecified tibial artery, left leg, subsequent encounter -S85112S Laceration of unspecified tibial artery, left leg, sequela -S85119A Laceration of unspecified tibial artery, unspecified leg, initial encounter -S85119D Laceration of unspecified tibial artery, unspecified leg, subsequent encounter -S85119S Laceration of unspecified tibial artery, unspecified leg, sequela -S85121A Other specified injury of unspecified tibial artery, right leg, initial encounter -S85121D Other specified injury of unspecified tibial artery, right leg, subsequent encounter -S85121S Other specified injury of unspecified tibial artery, right leg, sequela -S85122A Other specified injury of unspecified tibial artery, left leg, initial encounter -S85122D Other specified injury of unspecified tibial artery, left leg, subsequent encounter -S85122S Other specified injury of unspecified tibial artery, left leg, sequela -S85129A Other specified injury of unspecified tibial artery, unspecified leg, initial encounter -S85129D Other specified injury of unspecified tibial artery, unspecified leg, subsequent encounter -S85129S Other specified injury of unspecified tibial artery, unspecified leg, sequela -S85131A Unspecified injury of anterior tibial artery, right leg, initial encounter -S85131D Unspecified injury of anterior tibial artery, right leg, subsequent encounter -S85131S Unspecified injury of anterior tibial artery, right leg, sequela -S85132A Unspecified injury of anterior tibial artery, left leg, initial encounter -S85132D Unspecified injury of anterior tibial artery, left leg, subsequent encounter -S85132S Unspecified injury of anterior tibial artery, left leg, sequela -S85139A Unspecified injury of anterior tibial artery, unspecified leg, initial encounter -S85139D Unspecified injury of anterior tibial artery, unspecified leg, subsequent encounter -S85139S Unspecified injury of anterior tibial artery, unspecified leg, sequela -S85141A Laceration of anterior tibial artery, right leg, initial encounter -S85141D Laceration of anterior tibial artery, right leg, subsequent encounter -S85141S Laceration of anterior tibial artery, right leg, sequela -S85142A Laceration of anterior tibial artery, left leg, initial encounter -S85142D Laceration of anterior tibial artery, left leg, subsequent encounter -S85142S Laceration of anterior tibial artery, left leg, sequela -S85149A Laceration of anterior tibial artery, unspecified leg, initial encounter -S85149D Laceration of anterior tibial artery, unspecified leg, subsequent encounter -S85149S Laceration of anterior tibial artery, unspecified leg, sequela -S85151A Other specified injury of anterior tibial artery, right leg, initial encounter -S85151D Other specified injury of anterior tibial artery, right leg, subsequent encounter -S85151S Other specified injury of anterior tibial artery, right leg, sequela -S85152A Other specified injury of anterior tibial artery, left leg, initial encounter -S85152D Other specified injury of anterior tibial artery, left leg, subsequent encounter -S85152S Other specified injury of anterior tibial artery, left leg, sequela -S85159A Other specified injury of anterior tibial artery, unspecified leg, initial encounter -S85159D Other specified injury of anterior tibial artery, unspecified leg, subsequent encounter -S85159S Other specified injury of anterior tibial artery, unspecified leg, sequela -S85161A Unspecified injury of posterior tibial artery, right leg, initial encounter -S85161D Unspecified injury of posterior tibial artery, right leg, subsequent encounter -S85161S Unspecified injury of posterior tibial artery, right leg, sequela -S85162A Unspecified injury of posterior tibial artery, left leg, initial encounter -S85162D Unspecified injury of posterior tibial artery, left leg, subsequent encounter -S85162S Unspecified injury of posterior tibial artery, left leg, sequela -S85169A Unspecified injury of posterior tibial artery, unspecified leg, initial encounter -S85169D Unspecified injury of posterior tibial artery, unspecified leg, subsequent encounter -S85169S Unspecified injury of posterior tibial artery, unspecified leg, sequela -S85171A Laceration of posterior tibial artery, right leg, initial encounter -S85171D Laceration of posterior tibial artery, right leg, subsequent encounter -S85171S Laceration of posterior tibial artery, right leg, sequela -S85172A Laceration of posterior tibial artery, left leg, initial encounter -S85172D Laceration of posterior tibial artery, left leg, subsequent encounter -S85172S Laceration of posterior tibial artery, left leg, sequela -S85179A Laceration of posterior tibial artery, unspecified leg, initial encounter -S85179D Laceration of posterior tibial artery, unspecified leg, subsequent encounter -S85179S Laceration of posterior tibial artery, unspecified leg, sequela -S85181A Other specified injury of posterior tibial artery, right leg, initial encounter -S85181D Other specified injury of posterior tibial artery, right leg, subsequent encounter -S85181S Other specified injury of posterior tibial artery, right leg, sequela -S85182A Other specified injury of posterior tibial artery, left leg, initial encounter -S85182D Other specified injury of posterior tibial artery, left leg, subsequent encounter -S85182S Other specified injury of posterior tibial artery, left leg, sequela -S85189A Other specified injury of posterior tibial artery, unspecified leg, initial encounter -S85189D Other specified injury of posterior tibial artery, unspecified leg, subsequent encounter -S85189S Other specified injury of posterior tibial artery, unspecified leg, sequela -S85201A Unspecified injury of peroneal artery, right leg, initial encounter -S85201D Unspecified injury of peroneal artery, right leg, subsequent encounter -S85201S Unspecified injury of peroneal artery, right leg, sequela -S85202A Unspecified injury of peroneal artery, left leg, initial encounter -S85202D Unspecified injury of peroneal artery, left leg, subsequent encounter -S85202S Unspecified injury of peroneal artery, left leg, sequela -S85209A Unspecified injury of peroneal artery, unspecified leg, initial encounter -S85209D Unspecified injury of peroneal artery, unspecified leg, subsequent encounter -S85209S Unspecified injury of peroneal artery, unspecified leg, sequela -S85211A Laceration of peroneal artery, right leg, initial encounter -S85211D Laceration of peroneal artery, right leg, subsequent encounter -S85211S Laceration of peroneal artery, right leg, sequela -S85212A Laceration of peroneal artery, left leg, initial encounter -S85212D Laceration of peroneal artery, left leg, subsequent encounter -S85212S Laceration of peroneal artery, left leg, sequela -S85219A Laceration of peroneal artery, unspecified leg, initial encounter -S85219D Laceration of peroneal artery, unspecified leg, subsequent encounter -S85219S Laceration of peroneal artery, unspecified leg, sequela -S85291A Other specified injury of peroneal artery, right leg, initial encounter -S85291D Other specified injury of peroneal artery, right leg, subsequent encounter -S85291S Other specified injury of peroneal artery, right leg, sequela -S85292A Other specified injury of peroneal artery, left leg, initial encounter -S85292D Other specified injury of peroneal artery, left leg, subsequent encounter -S85292S Other specified injury of peroneal artery, left leg, sequela -S85299A Other specified injury of peroneal artery, unspecified leg, initial encounter -S85299D Other specified injury of peroneal artery, unspecified leg, subsequent encounter -S85299S Other specified injury of peroneal artery, unspecified leg, sequela -S85301A Unspecified injury of greater saphenous vein at lower leg level, right leg, initial encounter -S85301D Unspecified injury of greater saphenous vein at lower leg level, right leg, subsequent encounter -S85301S Unspecified injury of greater saphenous vein at lower leg level, right leg, sequela -S85302A Unspecified injury of greater saphenous vein at lower leg level, left leg, initial encounter -S85302D Unspecified injury of greater saphenous vein at lower leg level, left leg, subsequent encounter -S85302S Unspecified injury of greater saphenous vein at lower leg level, left leg, sequela -S85309A Unspecified injury of greater saphenous vein at lower leg level, unspecified leg, initial encounter -S85309D Unspecified injury of greater saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85309S Unspecified injury of greater saphenous vein at lower leg level, unspecified leg, sequela -S85311A Laceration of greater saphenous vein at lower leg level, right leg, initial encounter -S85311D Laceration of greater saphenous vein at lower leg level, right leg, subsequent encounter -S85311S Laceration of greater saphenous vein at lower leg level, right leg, sequela -S85312A Laceration of greater saphenous vein at lower leg level, left leg, initial encounter -S85312D Laceration of greater saphenous vein at lower leg level, left leg, subsequent encounter -S85312S Laceration of greater saphenous vein at lower leg level, left leg, sequela -S85319A Laceration of greater saphenous vein at lower leg level, unspecified leg, initial encounter -S85319D Laceration of greater saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85319S Laceration of greater saphenous vein at lower leg level, unspecified leg, sequela -S85391A Other specified injury of greater saphenous vein at lower leg level, right leg, initial encounter -S85391D Other specified injury of greater saphenous vein at lower leg level, right leg, subsequent encounter -S85391S Other specified injury of greater saphenous vein at lower leg level, right leg, sequela -S85392A Other specified injury of greater saphenous vein at lower leg level, left leg, initial encounter -S85392D Other specified injury of greater saphenous vein at lower leg level, left leg, subsequent encounter -S85392S Other specified injury of greater saphenous vein at lower leg level, left leg, sequela -S85399A Other specified injury of greater saphenous vein at lower leg level, unspecified leg, initial encounter -S85399D Other specified injury of greater saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85399S Other specified injury of greater saphenous vein at lower leg level, unspecified leg, sequela -S85401A Unspecified injury of lesser saphenous vein at lower leg level, right leg, initial encounter -S85401D Unspecified injury of lesser saphenous vein at lower leg level, right leg, subsequent encounter -S85401S Unspecified injury of lesser saphenous vein at lower leg level, right leg, sequela -S85402A Unspecified injury of lesser saphenous vein at lower leg level, left leg, initial encounter -S85402D Unspecified injury of lesser saphenous vein at lower leg level, left leg, subsequent encounter -S85402S Unspecified injury of lesser saphenous vein at lower leg level, left leg, sequela -S85409A Unspecified injury of lesser saphenous vein at lower leg level, unspecified leg, initial encounter -S85409D Unspecified injury of lesser saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85409S Unspecified injury of lesser saphenous vein at lower leg level, unspecified leg, sequela -S85411A Laceration of lesser saphenous vein at lower leg level, right leg, initial encounter -S85411D Laceration of lesser saphenous vein at lower leg level, right leg, subsequent encounter -S85411S Laceration of lesser saphenous vein at lower leg level, right leg, sequela -S85412A Laceration of lesser saphenous vein at lower leg level, left leg, initial encounter -S85412D Laceration of lesser saphenous vein at lower leg level, left leg, subsequent encounter -S85412S Laceration of lesser saphenous vein at lower leg level, left leg, sequela -S85419A Laceration of lesser saphenous vein at lower leg level, unspecified leg, initial encounter -S85419D Laceration of lesser saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85419S Laceration of lesser saphenous vein at lower leg level, unspecified leg, sequela -S85491A Other specified injury of lesser saphenous vein at lower leg level, right leg, initial encounter -S85491D Other specified injury of lesser saphenous vein at lower leg level, right leg, subsequent encounter -S85491S Other specified injury of lesser saphenous vein at lower leg level, right leg, sequela -S85492A Other specified injury of lesser saphenous vein at lower leg level, left leg, initial encounter -S85492D Other specified injury of lesser saphenous vein at lower leg level, left leg, subsequent encounter -S85492S Other specified injury of lesser saphenous vein at lower leg level, left leg, sequela -S85499A Other specified injury of lesser saphenous vein at lower leg level, unspecified leg, initial encounter -S85499D Other specified injury of lesser saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85499S Other specified injury of lesser saphenous vein at lower leg level, unspecified leg, sequela -S85501A Unspecified injury of popliteal vein, right leg, initial encounter -S85501D Unspecified injury of popliteal vein, right leg, subsequent encounter -S85501S Unspecified injury of popliteal vein, right leg, sequela -S85502A Unspecified injury of popliteal vein, left leg, initial encounter -S85502D Unspecified injury of popliteal vein, left leg, subsequent encounter -S85502S Unspecified injury of popliteal vein, left leg, sequela -S85509A Unspecified injury of popliteal vein, unspecified leg, initial encounter -S85509D Unspecified injury of popliteal vein, unspecified leg, subsequent encounter -S85509S Unspecified injury of popliteal vein, unspecified leg, sequela -S85511A Laceration of popliteal vein, right leg, initial encounter -S85511D Laceration of popliteal vein, right leg, subsequent encounter -S85511S Laceration of popliteal vein, right leg, sequela -S85512A Laceration of popliteal vein, left leg, initial encounter -S85512D Laceration of popliteal vein, left leg, subsequent encounter -S85512S Laceration of popliteal vein, left leg, sequela -S85519A Laceration of popliteal vein, unspecified leg, initial encounter -S85519D Laceration of popliteal vein, unspecified leg, subsequent encounter -S85519S Laceration of popliteal vein, unspecified leg, sequela -S85591A Other specified injury of popliteal vein, right leg, initial encounter -S85591D Other specified injury of popliteal vein, right leg, subsequent encounter -S85591S Other specified injury of popliteal vein, right leg, sequela -S85592A Other specified injury of popliteal vein, left leg, initial encounter -S85592D Other specified injury of popliteal vein, left leg, subsequent encounter -S85592S Other specified injury of popliteal vein, left leg, sequela -S85599A Other specified injury of popliteal vein, unspecified leg, initial encounter -S85599D Other specified injury of popliteal vein, unspecified leg, subsequent encounter -S85599S Other specified injury of popliteal vein, unspecified leg, sequela -S85801A Unspecified injury of other blood vessels at lower leg level, right leg, initial encounter -S85801D Unspecified injury of other blood vessels at lower leg level, right leg, subsequent encounter -S85801S Unspecified injury of other blood vessels at lower leg level, right leg, sequela -S85802A Unspecified injury of other blood vessels at lower leg level, left leg, initial encounter -S85802D Unspecified injury of other blood vessels at lower leg level, left leg, subsequent encounter -S85802S Unspecified injury of other blood vessels at lower leg level, left leg, sequela -S85809A Unspecified injury of other blood vessels at lower leg level, unspecified leg, initial encounter -S85809D Unspecified injury of other blood vessels at lower leg level, unspecified leg, subsequent encounter -S85809S Unspecified injury of other blood vessels at lower leg level, unspecified leg, sequela -S85811A Laceration of other blood vessels at lower leg level, right leg, initial encounter -S85811D Laceration of other blood vessels at lower leg level, right leg, subsequent encounter -S85811S Laceration of other blood vessels at lower leg level, right leg, sequela -S85812A Laceration of other blood vessels at lower leg level, left leg, initial encounter -S85812D Laceration of other blood vessels at lower leg level, left leg, subsequent encounter -S85812S Laceration of other blood vessels at lower leg level, left leg, sequela -S85819A Laceration of other blood vessels at lower leg level, unspecified leg, initial encounter -S85819D Laceration of other blood vessels at lower leg level, unspecified leg, subsequent encounter -S85819S Laceration of other blood vessels at lower leg level, unspecified leg, sequela -S85891A Other specified injury of other blood vessels at lower leg level, right leg, initial encounter -S85891D Other specified injury of other blood vessels at lower leg level, right leg, subsequent encounter -S85891S Other specified injury of other blood vessels at lower leg level, right leg, sequela -S85892A Other specified injury of other blood vessels at lower leg level, left leg, initial encounter -S85892D Other specified injury of other blood vessels at lower leg level, left leg, subsequent encounter -S85892S Other specified injury of other blood vessels at lower leg level, left leg, sequela -S85899A Other specified injury of other blood vessels at lower leg level, unspecified leg, initial encounter -S85899D Other specified injury of other blood vessels at lower leg level, unspecified leg, subsequent encounter -S85899S Other specified injury of other blood vessels at lower leg level, unspecified leg, sequela -S85901A Unspecified injury of unspecified blood vessel at lower leg level, right leg, initial encounter -S85901D Unspecified injury of unspecified blood vessel at lower leg level, right leg, subsequent encounter -S85901S Unspecified injury of unspecified blood vessel at lower leg level, right leg, sequela -S85902A Unspecified injury of unspecified blood vessel at lower leg level, left leg, initial encounter -S85902D Unspecified injury of unspecified blood vessel at lower leg level, left leg, subsequent encounter -S85902S Unspecified injury of unspecified blood vessel at lower leg level, left leg, sequela -S85909A Unspecified injury of unspecified blood vessel at lower leg level, unspecified leg, initial encounter -S85909D Unspecified injury of unspecified blood vessel at lower leg level, unspecified leg, subsequent encounter -S85909S Unspecified injury of unspecified blood vessel at lower leg level, unspecified leg, sequela -S85911A Laceration of unspecified blood vessel at lower leg level, right leg, initial encounter -S85911D Laceration of unspecified blood vessel at lower leg level, right leg, subsequent encounter -S85911S Laceration of unspecified blood vessel at lower leg level, right leg, sequela -S85912A Laceration of unspecified blood vessel at lower leg level, left leg, initial encounter -S85912D Laceration of unspecified blood vessel at lower leg level, left leg, subsequent encounter -S85912S Laceration of unspecified blood vessel at lower leg level, left leg, sequela -S85919A Laceration of unspecified blood vessel at lower leg level, unspecified leg, initial encounter -S85919D Laceration of unspecified blood vessel at lower leg level, unspecified leg, subsequent encounter -S85919S Laceration of unspecified blood vessel at lower leg level, unspecified leg, sequela -S85991A Other specified injury of unspecified blood vessel at lower leg level, right leg, initial encounter -S85991D Other specified injury of unspecified blood vessel at lower leg level, right leg, subsequent encounter -S85991S Other specified injury of unspecified blood vessel at lower leg level, right leg, sequela -S85992A Other specified injury of unspecified blood vessel at lower leg level, left leg, initial encounter -S85992D Other specified injury of unspecified blood vessel at lower leg level, left leg, subsequent encounter -S85992S Other specified injury of unspecified blood vessel at lower leg level, left leg, sequela -S85999A Other specified injury of unspecified blood vessel at lower leg level, unspecified leg, initial encounter -S85999D Other specified injury of unspecified blood vessel at lower leg level, unspecified leg, subsequent encounter -S85999S Other specified injury of unspecified blood vessel at lower leg level, unspecified leg, sequela -S86001A Unspecified injury of right Achilles tendon, initial encounter -S86001D Unspecified injury of right Achilles tendon, subsequent encounter -S86001S Unspecified injury of right Achilles tendon, sequela -S86002A Unspecified injury of left Achilles tendon, initial encounter -S86002D Unspecified injury of left Achilles tendon, subsequent encounter -S86002S Unspecified injury of left Achilles tendon, sequela -S86009A Unspecified injury of unspecified Achilles tendon, initial encounter -S86009D Unspecified injury of unspecified Achilles tendon, subsequent encounter -S86009S Unspecified injury of unspecified Achilles tendon, sequela -S86011A Strain of right Achilles tendon, initial encounter -S86011D Strain of right Achilles tendon, subsequent encounter -S86011S Strain of right Achilles tendon, sequela -S86012A Strain of left Achilles tendon, initial encounter -S86012D Strain of left Achilles tendon, subsequent encounter -S86012S Strain of left Achilles tendon, sequela -S86019A Strain of unspecified Achilles tendon, initial encounter -S86019D Strain of unspecified Achilles tendon, subsequent encounter -S86019S Strain of unspecified Achilles tendon, sequela -S86021A Laceration of right Achilles tendon, initial encounter -S86021D Laceration of right Achilles tendon, subsequent encounter -S86021S Laceration of right Achilles tendon, sequela -S86022A Laceration of left Achilles tendon, initial encounter -S86022D Laceration of left Achilles tendon, subsequent encounter -S86022S Laceration of left Achilles tendon, sequela -S86029A Laceration of unspecified Achilles tendon, initial encounter -S86029D Laceration of unspecified Achilles tendon, subsequent encounter -S86029S Laceration of unspecified Achilles tendon, sequela -S86091A Other specified injury of right Achilles tendon, initial encounter -S86091D Other specified injury of right Achilles tendon, subsequent encounter -S86091S Other specified injury of right Achilles tendon, sequela -S86092A Other specified injury of left Achilles tendon, initial encounter -S86092D Other specified injury of left Achilles tendon, subsequent encounter -S86092S Other specified injury of left Achilles tendon, sequela -S86099A Other specified injury of unspecified Achilles tendon, initial encounter -S86099D Other specified injury of unspecified Achilles tendon, subsequent encounter -S86099S Other specified injury of unspecified Achilles tendon, sequela -S86101A Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, initial encounter -S86101D Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, subsequent encounter -S86101S Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, sequela -S86102A Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, initial encounter -S86102D Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, subsequent encounter -S86102S Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, sequela -S86109A Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, initial encounter -S86109D Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86109S Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, sequela -S86111A Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, initial encounter -S86111D Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, subsequent encounter -S86111S Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, sequela -S86112A Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, initial encounter -S86112D Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, subsequent encounter -S86112S Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, sequela -S86119A Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, initial encounter -S86119D Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86119S Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, sequela -S86121A Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, initial encounter -S86121D Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, subsequent encounter -S86121S Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, sequela -S86122A Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, initial encounter -S86122D Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, subsequent encounter -S86122S Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, sequela -S86129A Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, initial encounter -S86129D Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86129S Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, sequela -S86191A Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, initial encounter -S86191D Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, subsequent encounter -S86191S Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, sequela -S86192A Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, initial encounter -S86192D Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, subsequent encounter -S86192S Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, sequela -S86199A Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, initial encounter -S86199D Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86199S Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, sequela -S86201A Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, initial encounter -S86201D Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, subsequent encounter -S86201S Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, sequela -S86202A Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, initial encounter -S86202D Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, subsequent encounter -S86202S Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, sequela -S86209A Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, initial encounter -S86209D Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86209S Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, sequela -S86211A Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, initial encounter -S86211D Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, subsequent encounter -S86211S Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, sequela -S86212A Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, initial encounter -S86212D Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, subsequent encounter -S86212S Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, sequela -S86219A Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, initial encounter -S86219D Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86219S Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, sequela -S86221A Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, initial encounter -S86221D Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, subsequent encounter -S86221S Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, sequela -S86222A Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, initial encounter -S86222D Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, subsequent encounter -S86222S Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, sequela -S86229A Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, initial encounter -S86229D Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86229S Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, sequela -S86291A Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, initial encounter -S86291D Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, subsequent encounter -S86291S Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, sequela -S86292A Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, initial encounter -S86292D Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, subsequent encounter -S86292S Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, sequela -S86299A Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, initial encounter -S86299D Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86299S Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, sequela -S86301A Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, initial encounter -S86301D Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, subsequent encounter -S86301S Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, sequela -S86302A Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, initial encounter -S86302D Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, subsequent encounter -S86302S Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, sequela -S86309A Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, initial encounter -S86309D Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, subsequent encounter -S86309S Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, sequela -S86311A Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, initial encounter -S86311D Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, subsequent encounter -S86311S Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, sequela -S86312A Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, initial encounter -S86312D Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, subsequent encounter -S86312S Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, sequela -S86319A Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, initial encounter -S86319D Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, subsequent encounter -S86319S Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, sequela -S86321A Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, initial encounter -S86321D Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, subsequent encounter -S86321S Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, sequela -S86322A Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, initial encounter -S86322D Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, subsequent encounter -S86322S Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, sequela -S86329A Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, initial encounter -S86329D Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, subsequent encounter -S86329S Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, sequela -S86391A Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, initial encounter -S86391D Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, subsequent encounter -S86391S Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, sequela -S86392A Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, initial encounter -S86392D Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, subsequent encounter -S86392S Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, sequela -S86399A Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, initial encounter -S86399D Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, subsequent encounter -S86399S Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, sequela -S86801A Unspecified injury of other muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86801D Unspecified injury of other muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86801S Unspecified injury of other muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86802A Unspecified injury of other muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86802D Unspecified injury of other muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86802S Unspecified injury of other muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86809A Unspecified injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86809D Unspecified injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86809S Unspecified injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86811A Strain of other muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86811D Strain of other muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86811S Strain of other muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86812A Strain of other muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86812D Strain of other muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86812S Strain of other muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86819A Strain of other muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86819D Strain of other muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86819S Strain of other muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86821A Laceration of other muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86821D Laceration of other muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86821S Laceration of other muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86822A Laceration of other muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86822D Laceration of other muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86822S Laceration of other muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86829A Laceration of other muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86829D Laceration of other muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86829S Laceration of other muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86891A Other injury of other muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86891D Other injury of other muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86891S Other injury of other muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86892A Other injury of other muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86892D Other injury of other muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86892S Other injury of other muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86899A Other injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86899D Other injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86899S Other injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86901A Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86901D Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86901S Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86902A Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86902D Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86902S Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86909A Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86909D Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86909S Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86911A Strain of unspecified muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86911D Strain of unspecified muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86911S Strain of unspecified muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86912A Strain of unspecified muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86912D Strain of unspecified muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86912S Strain of unspecified muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86919A Strain of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86919D Strain of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86919S Strain of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86921A Laceration of unspecified muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86921D Laceration of unspecified muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86921S Laceration of unspecified muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86922A Laceration of unspecified muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86922D Laceration of unspecified muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86922S Laceration of unspecified muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86929A Laceration of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86929D Laceration of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86929S Laceration of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86991A Other injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86991D Other injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86991S Other injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86992A Other injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86992D Other injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86992S Other injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86999A Other injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86999D Other injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86999S Other injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S8700XA Crushing injury of unspecified knee, initial encounter -S8700XD Crushing injury of unspecified knee, subsequent encounter -S8700XS Crushing injury of unspecified knee, sequela -S8701XA Crushing injury of right knee, initial encounter -S8701XD Crushing injury of right knee, subsequent encounter -S8701XS Crushing injury of right knee, sequela -S8702XA Crushing injury of left knee, initial encounter -S8702XD Crushing injury of left knee, subsequent encounter -S8702XS Crushing injury of left knee, sequela -S8780XA Crushing injury of unspecified lower leg, initial encounter -S8780XD Crushing injury of unspecified lower leg, subsequent encounter -S8780XS Crushing injury of unspecified lower leg, sequela -S8781XA Crushing injury of right lower leg, initial encounter -S8781XD Crushing injury of right lower leg, subsequent encounter -S8781XS Crushing injury of right lower leg, sequela -S8782XA Crushing injury of left lower leg, initial encounter -S8782XD Crushing injury of left lower leg, subsequent encounter -S8782XS Crushing injury of left lower leg, sequela -S88011A Complete traumatic amputation at knee level, right lower leg, initial encounter -S88011D Complete traumatic amputation at knee level, right lower leg, subsequent encounter -S88011S Complete traumatic amputation at knee level, right lower leg, sequela -S88012A Complete traumatic amputation at knee level, left lower leg, initial encounter -S88012D Complete traumatic amputation at knee level, left lower leg, subsequent encounter -S88012S Complete traumatic amputation at knee level, left lower leg, sequela -S88019A Complete traumatic amputation at knee level, unspecified lower leg, initial encounter -S88019D Complete traumatic amputation at knee level, unspecified lower leg, subsequent encounter -S88019S Complete traumatic amputation at knee level, unspecified lower leg, sequela -S88021A Partial traumatic amputation at knee level, right lower leg, initial encounter -S88021D Partial traumatic amputation at knee level, right lower leg, subsequent encounter -S88021S Partial traumatic amputation at knee level, right lower leg, sequela -S88022A Partial traumatic amputation at knee level, left lower leg, initial encounter -S88022D Partial traumatic amputation at knee level, left lower leg, subsequent encounter -S88022S Partial traumatic amputation at knee level, left lower leg, sequela -S88029A Partial traumatic amputation at knee level, unspecified lower leg, initial encounter -S88029D Partial traumatic amputation at knee level, unspecified lower leg, subsequent encounter -S88029S Partial traumatic amputation at knee level, unspecified lower leg, sequela -S88111A Complete traumatic amputation at level between knee and ankle, right lower leg, initial encounter -S88111D Complete traumatic amputation at level between knee and ankle, right lower leg, subsequent encounter -S88111S Complete traumatic amputation at level between knee and ankle, right lower leg, sequela -S88112A Complete traumatic amputation at level between knee and ankle, left lower leg, initial encounter -S88112D Complete traumatic amputation at level between knee and ankle, left lower leg, subsequent encounter -S88112S Complete traumatic amputation at level between knee and ankle, left lower leg, sequela -S88119A Complete traumatic amputation at level between knee and ankle, unspecified lower leg, initial encounter -S88119D Complete traumatic amputation at level between knee and ankle, unspecified lower leg, subsequent encounter -S88119S Complete traumatic amputation at level between knee and ankle, unspecified lower leg, sequela -S88121A Partial traumatic amputation at level between knee and ankle, right lower leg, initial encounter -S88121D Partial traumatic amputation at level between knee and ankle, right lower leg, subsequent encounter -S88121S Partial traumatic amputation at level between knee and ankle, right lower leg, sequela -S88122A Partial traumatic amputation at level between knee and ankle, left lower leg, initial encounter -S88122D Partial traumatic amputation at level between knee and ankle, left lower leg, subsequent encounter -S88122S Partial traumatic amputation at level between knee and ankle, left lower leg, sequela -S88129A Partial traumatic amputation at level between knee and ankle, unspecified lower leg, initial encounter -S88129D Partial traumatic amputation at level between knee and ankle, unspecified lower leg, subsequent encounter -S88129S Partial traumatic amputation at level between knee and ankle, unspecified lower leg, sequela -S88911A Complete traumatic amputation of right lower leg, level unspecified, initial encounter -S88911D Complete traumatic amputation of right lower leg, level unspecified, subsequent encounter -S88911S Complete traumatic amputation of right lower leg, level unspecified, sequela -S88912A Complete traumatic amputation of left lower leg, level unspecified, initial encounter -S88912D Complete traumatic amputation of left lower leg, level unspecified, subsequent encounter -S88912S Complete traumatic amputation of left lower leg, level unspecified, sequela -S88919A Complete traumatic amputation of unspecified lower leg, level unspecified, initial encounter -S88919D Complete traumatic amputation of unspecified lower leg, level unspecified, subsequent encounter -S88919S Complete traumatic amputation of unspecified lower leg, level unspecified, sequela -S88921A Partial traumatic amputation of right lower leg, level unspecified, initial encounter -S88921D Partial traumatic amputation of right lower leg, level unspecified, subsequent encounter -S88921S Partial traumatic amputation of right lower leg, level unspecified, sequela -S88922A Partial traumatic amputation of left lower leg, level unspecified, initial encounter -S88922D Partial traumatic amputation of left lower leg, level unspecified, subsequent encounter -S88922S Partial traumatic amputation of left lower leg, level unspecified, sequela -S88929A Partial traumatic amputation of unspecified lower leg, level unspecified, initial encounter -S88929D Partial traumatic amputation of unspecified lower leg, level unspecified, subsequent encounter -S88929S Partial traumatic amputation of unspecified lower leg, level unspecified, sequela -S89001A Unspecified physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89001D Unspecified physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89001G Unspecified physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89001K Unspecified physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89001P Unspecified physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89001S Unspecified physeal fracture of upper end of right tibia, sequela -S89002A Unspecified physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89002D Unspecified physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89002G Unspecified physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89002K Unspecified physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89002P Unspecified physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89002S Unspecified physeal fracture of upper end of left tibia, sequela -S89009A Unspecified physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89009D Unspecified physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89009G Unspecified physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89009K Unspecified physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89009P Unspecified physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89009S Unspecified physeal fracture of upper end of unspecified tibia, sequela -S89011A Salter-Harris Type I physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89011D Salter-Harris Type I physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89011G Salter-Harris Type I physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89011K Salter-Harris Type I physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89011P Salter-Harris Type I physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89011S Salter-Harris Type I physeal fracture of upper end of right tibia, sequela -S89012A Salter-Harris Type I physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89012D Salter-Harris Type I physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89012G Salter-Harris Type I physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89012K Salter-Harris Type I physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89012P Salter-Harris Type I physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89012S Salter-Harris Type I physeal fracture of upper end of left tibia, sequela -S89019A Salter-Harris Type I physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89019D Salter-Harris Type I physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89019G Salter-Harris Type I physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89019K Salter-Harris Type I physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89019P Salter-Harris Type I physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89019S Salter-Harris Type I physeal fracture of upper end of unspecified tibia, sequela -S89021A Salter-Harris Type II physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89021D Salter-Harris Type II physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89021G Salter-Harris Type II physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89021K Salter-Harris Type II physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89021P Salter-Harris Type II physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89021S Salter-Harris Type II physeal fracture of upper end of right tibia, sequela -S89022A Salter-Harris Type II physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89022D Salter-Harris Type II physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89022G Salter-Harris Type II physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89022K Salter-Harris Type II physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89022P Salter-Harris Type II physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89022S Salter-Harris Type II physeal fracture of upper end of left tibia, sequela -S89029A Salter-Harris Type II physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89029D Salter-Harris Type II physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89029G Salter-Harris Type II physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89029K Salter-Harris Type II physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89029P Salter-Harris Type II physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89029S Salter-Harris Type II physeal fracture of upper end of unspecified tibia, sequela -S89031A Salter-Harris Type III physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89031D Salter-Harris Type III physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89031G Salter-Harris Type III physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89031K Salter-Harris Type III physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89031P Salter-Harris Type III physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89031S Salter-Harris Type III physeal fracture of upper end of right tibia, sequela -S89032A Salter-Harris Type III physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89032D Salter-Harris Type III physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89032G Salter-Harris Type III physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89032K Salter-Harris Type III physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89032P Salter-Harris Type III physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89032S Salter-Harris Type III physeal fracture of upper end of left tibia, sequela -S89039A Salter-Harris Type III physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89039D Salter-Harris Type III physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89039G Salter-Harris Type III physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89039K Salter-Harris Type III physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89039P Salter-Harris Type III physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89039S Salter-Harris Type III physeal fracture of upper end of unspecified tibia, sequela -S89041A Salter-Harris Type IV physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89041D Salter-Harris Type IV physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89041G Salter-Harris Type IV physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89041K Salter-Harris Type IV physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89041P Salter-Harris Type IV physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89041S Salter-Harris Type IV physeal fracture of upper end of right tibia, sequela -S89042A Salter-Harris Type IV physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89042D Salter-Harris Type IV physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89042G Salter-Harris Type IV physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89042K Salter-Harris Type IV physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89042P Salter-Harris Type IV physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89042S Salter-Harris Type IV physeal fracture of upper end of left tibia, sequela -S89049A Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89049D Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89049G Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89049K Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89049P Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89049S Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, sequela -S89091A Other physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89091D Other physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89091G Other physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89091K Other physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89091P Other physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89091S Other physeal fracture of upper end of right tibia, sequela -S89092A Other physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89092D Other physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89092G Other physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89092K Other physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89092P Other physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89092S Other physeal fracture of upper end of left tibia, sequela -S89099A Other physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89099D Other physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89099G Other physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89099K Other physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89099P Other physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89099S Other physeal fracture of upper end of unspecified tibia, sequela -S89101A Unspecified physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89101D Unspecified physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89101G Unspecified physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89101K Unspecified physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89101P Unspecified physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89101S Unspecified physeal fracture of lower end of right tibia, sequela -S89102A Unspecified physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89102D Unspecified physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89102G Unspecified physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89102K Unspecified physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89102P Unspecified physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89102S Unspecified physeal fracture of lower end of left tibia, sequela -S89109A Unspecified physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89109D Unspecified physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89109G Unspecified physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89109K Unspecified physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89109P Unspecified physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89109S Unspecified physeal fracture of lower end of unspecified tibia, sequela -S89111A Salter-Harris Type I physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89111D Salter-Harris Type I physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89111G Salter-Harris Type I physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89111K Salter-Harris Type I physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89111P Salter-Harris Type I physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89111S Salter-Harris Type I physeal fracture of lower end of right tibia, sequela -S89112A Salter-Harris Type I physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89112D Salter-Harris Type I physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89112G Salter-Harris Type I physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89112K Salter-Harris Type I physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89112P Salter-Harris Type I physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89112S Salter-Harris Type I physeal fracture of lower end of left tibia, sequela -S89119A Salter-Harris Type I physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89119D Salter-Harris Type I physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89119G Salter-Harris Type I physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89119K Salter-Harris Type I physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89119P Salter-Harris Type I physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89119S Salter-Harris Type I physeal fracture of lower end of unspecified tibia, sequela -S89121A Salter-Harris Type II physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89121D Salter-Harris Type II physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89121G Salter-Harris Type II physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89121K Salter-Harris Type II physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89121P Salter-Harris Type II physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89121S Salter-Harris Type II physeal fracture of lower end of right tibia, sequela -S89122A Salter-Harris Type II physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89122D Salter-Harris Type II physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89122G Salter-Harris Type II physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89122K Salter-Harris Type II physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89122P Salter-Harris Type II physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89122S Salter-Harris Type II physeal fracture of lower end of left tibia, sequela -S89129A Salter-Harris Type II physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89129D Salter-Harris Type II physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89129G Salter-Harris Type II physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89129K Salter-Harris Type II physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89129P Salter-Harris Type II physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89129S Salter-Harris Type II physeal fracture of lower end of unspecified tibia, sequela -S89131A Salter-Harris Type III physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89131D Salter-Harris Type III physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89131G Salter-Harris Type III physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89131K Salter-Harris Type III physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89131P Salter-Harris Type III physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89131S Salter-Harris Type III physeal fracture of lower end of right tibia, sequela -S89132A Salter-Harris Type III physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89132D Salter-Harris Type III physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89132G Salter-Harris Type III physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89132K Salter-Harris Type III physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89132P Salter-Harris Type III physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89132S Salter-Harris Type III physeal fracture of lower end of left tibia, sequela -S89139A Salter-Harris Type III physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89139D Salter-Harris Type III physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89139G Salter-Harris Type III physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89139K Salter-Harris Type III physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89139P Salter-Harris Type III physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89139S Salter-Harris Type III physeal fracture of lower end of unspecified tibia, sequela -S89141A Salter-Harris Type IV physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89141D Salter-Harris Type IV physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89141G Salter-Harris Type IV physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89141K Salter-Harris Type IV physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89141P Salter-Harris Type IV physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89141S Salter-Harris Type IV physeal fracture of lower end of right tibia, sequela -S89142A Salter-Harris Type IV physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89142D Salter-Harris Type IV physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89142G Salter-Harris Type IV physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89142K Salter-Harris Type IV physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89142P Salter-Harris Type IV physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89142S Salter-Harris Type IV physeal fracture of lower end of left tibia, sequela -S89149A Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89149D Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89149G Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89149K Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89149P Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89149S Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, sequela -S89191A Other physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89191D Other physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89191G Other physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89191K Other physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89191P Other physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89191S Other physeal fracture of lower end of right tibia, sequela -S89192A Other physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89192D Other physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89192G Other physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89192K Other physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89192P Other physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89192S Other physeal fracture of lower end of left tibia, sequela -S89199A Other physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89199D Other physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89199G Other physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89199K Other physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89199P Other physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89199S Other physeal fracture of lower end of unspecified tibia, sequela -S89201A Unspecified physeal fracture of upper end of right fibula, initial encounter for closed fracture -S89201D Unspecified physeal fracture of upper end of right fibula, subsequent encounter for fracture with routine healing -S89201G Unspecified physeal fracture of upper end of right fibula, subsequent encounter for fracture with delayed healing -S89201K Unspecified physeal fracture of upper end of right fibula, subsequent encounter for fracture with nonunion -S89201P Unspecified physeal fracture of upper end of right fibula, subsequent encounter for fracture with malunion -S89201S Unspecified physeal fracture of upper end of right fibula, sequela -S89202A Unspecified physeal fracture of upper end of left fibula, initial encounter for closed fracture -S89202D Unspecified physeal fracture of upper end of left fibula, subsequent encounter for fracture with routine healing -S89202G Unspecified physeal fracture of upper end of left fibula, subsequent encounter for fracture with delayed healing -S89202K Unspecified physeal fracture of upper end of left fibula, subsequent encounter for fracture with nonunion -S89202P Unspecified physeal fracture of upper end of left fibula, subsequent encounter for fracture with malunion -S89202S Unspecified physeal fracture of upper end of left fibula, sequela -S89209A Unspecified physeal fracture of upper end of unspecified fibula, initial encounter for closed fracture -S89209D Unspecified physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with routine healing -S89209G Unspecified physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89209K Unspecified physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with nonunion -S89209P Unspecified physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with malunion -S89209S Unspecified physeal fracture of upper end of unspecified fibula, sequela -S89211A Salter-Harris Type I physeal fracture of upper end of right fibula, initial encounter for closed fracture -S89211D Salter-Harris Type I physeal fracture of upper end of right fibula, subsequent encounter for fracture with routine healing -S89211G Salter-Harris Type I physeal fracture of upper end of right fibula, subsequent encounter for fracture with delayed healing -S89211K Salter-Harris Type I physeal fracture of upper end of right fibula, subsequent encounter for fracture with nonunion -S89211P Salter-Harris Type I physeal fracture of upper end of right fibula, subsequent encounter for fracture with malunion -S89211S Salter-Harris Type I physeal fracture of upper end of right fibula, sequela -S89212A Salter-Harris Type I physeal fracture of upper end of left fibula, initial encounter for closed fracture -S89212D Salter-Harris Type I physeal fracture of upper end of left fibula, subsequent encounter for fracture with routine healing -S89212G Salter-Harris Type I physeal fracture of upper end of left fibula, subsequent encounter for fracture with delayed healing -S89212K Salter-Harris Type I physeal fracture of upper end of left fibula, subsequent encounter for fracture with nonunion -S89212P Salter-Harris Type I physeal fracture of upper end of left fibula, subsequent encounter for fracture with malunion -S89212S Salter-Harris Type I physeal fracture of upper end of left fibula, sequela -S89219A Salter-Harris Type I physeal fracture of upper end of unspecified fibula, initial encounter for closed fracture -S89219D Salter-Harris Type I physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with routine healing -S89219G Salter-Harris Type I physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89219K Salter-Harris Type I physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with nonunion -S89219P Salter-Harris Type I physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with malunion -S89219S Salter-Harris Type I physeal fracture of upper end of unspecified fibula, sequela -S89221A Salter-Harris Type II physeal fracture of upper end of right fibula, initial encounter for closed fracture -S89221D Salter-Harris Type II physeal fracture of upper end of right fibula, subsequent encounter for fracture with routine healing -S89221G Salter-Harris Type II physeal fracture of upper end of right fibula, subsequent encounter for fracture with delayed healing -S89221K Salter-Harris Type II physeal fracture of upper end of right fibula, subsequent encounter for fracture with nonunion -S89221P Salter-Harris Type II physeal fracture of upper end of right fibula, subsequent encounter for fracture with malunion -S89221S Salter-Harris Type II physeal fracture of upper end of right fibula, sequela -S89222A Salter-Harris Type II physeal fracture of upper end of left fibula, initial encounter for closed fracture -S89222D Salter-Harris Type II physeal fracture of upper end of left fibula, subsequent encounter for fracture with routine healing -S89222G Salter-Harris Type II physeal fracture of upper end of left fibula, subsequent encounter for fracture with delayed healing -S89222K Salter-Harris Type II physeal fracture of upper end of left fibula, subsequent encounter for fracture with nonunion -S89222P Salter-Harris Type II physeal fracture of upper end of left fibula, subsequent encounter for fracture with malunion -S89222S Salter-Harris Type II physeal fracture of upper end of left fibula, sequela -S89229A Salter-Harris Type II physeal fracture of upper end of unspecified fibula, initial encounter for closed fracture -S89229D Salter-Harris Type II physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with routine healing -S89229G Salter-Harris Type II physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89229K Salter-Harris Type II physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with nonunion -S89229P Salter-Harris Type II physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with malunion -S89229S Salter-Harris Type II physeal fracture of upper end of unspecified fibula, sequela -S89291A Other physeal fracture of upper end of right fibula, initial encounter for closed fracture -S89291D Other physeal fracture of upper end of right fibula, subsequent encounter for fracture with routine healing -S89291G Other physeal fracture of upper end of right fibula, subsequent encounter for fracture with delayed healing -S89291K Other physeal fracture of upper end of right fibula, subsequent encounter for fracture with nonunion -S89291P Other physeal fracture of upper end of right fibula, subsequent encounter for fracture with malunion -S89291S Other physeal fracture of upper end of right fibula, sequela -S89292A Other physeal fracture of upper end of left fibula, initial encounter for closed fracture -S89292D Other physeal fracture of upper end of left fibula, subsequent encounter for fracture with routine healing -S89292G Other physeal fracture of upper end of left fibula, subsequent encounter for fracture with delayed healing -S89292K Other physeal fracture of upper end of left fibula, subsequent encounter for fracture with nonunion -S89292P Other physeal fracture of upper end of left fibula, subsequent encounter for fracture with malunion -S89292S Other physeal fracture of upper end of left fibula, sequela -S89299A Other physeal fracture of upper end of unspecified fibula, initial encounter for closed fracture -S89299D Other physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with routine healing -S89299G Other physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89299K Other physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with nonunion -S89299P Other physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with malunion -S89299S Other physeal fracture of upper end of unspecified fibula, sequela -S89301A Unspecified physeal fracture of lower end of right fibula, initial encounter for closed fracture -S89301D Unspecified physeal fracture of lower end of right fibula, subsequent encounter for fracture with routine healing -S89301G Unspecified physeal fracture of lower end of right fibula, subsequent encounter for fracture with delayed healing -S89301K Unspecified physeal fracture of lower end of right fibula, subsequent encounter for fracture with nonunion -S89301P Unspecified physeal fracture of lower end of right fibula, subsequent encounter for fracture with malunion -S89301S Unspecified physeal fracture of lower end of right fibula, sequela -S89302A Unspecified physeal fracture of lower end of left fibula, initial encounter for closed fracture -S89302D Unspecified physeal fracture of lower end of left fibula, subsequent encounter for fracture with routine healing -S89302G Unspecified physeal fracture of lower end of left fibula, subsequent encounter for fracture with delayed healing -S89302K Unspecified physeal fracture of lower end of left fibula, subsequent encounter for fracture with nonunion -S89302P Unspecified physeal fracture of lower end of left fibula, subsequent encounter for fracture with malunion -S89302S Unspecified physeal fracture of lower end of left fibula, sequela -S89309A Unspecified physeal fracture of lower end of unspecified fibula, initial encounter for closed fracture -S89309D Unspecified physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with routine healing -S89309G Unspecified physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89309K Unspecified physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with nonunion -S89309P Unspecified physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with malunion -S89309S Unspecified physeal fracture of lower end of unspecified fibula, sequela -S89311A Salter-Harris Type I physeal fracture of lower end of right fibula, initial encounter for closed fracture -S89311D Salter-Harris Type I physeal fracture of lower end of right fibula, subsequent encounter for fracture with routine healing -S89311G Salter-Harris Type I physeal fracture of lower end of right fibula, subsequent encounter for fracture with delayed healing -S89311K Salter-Harris Type I physeal fracture of lower end of right fibula, subsequent encounter for fracture with nonunion -S89311P Salter-Harris Type I physeal fracture of lower end of right fibula, subsequent encounter for fracture with malunion -S89311S Salter-Harris Type I physeal fracture of lower end of right fibula, sequela -S89312A Salter-Harris Type I physeal fracture of lower end of left fibula, initial encounter for closed fracture -S89312D Salter-Harris Type I physeal fracture of lower end of left fibula, subsequent encounter for fracture with routine healing -S89312G Salter-Harris Type I physeal fracture of lower end of left fibula, subsequent encounter for fracture with delayed healing -S89312K Salter-Harris Type I physeal fracture of lower end of left fibula, subsequent encounter for fracture with nonunion -S89312P Salter-Harris Type I physeal fracture of lower end of left fibula, subsequent encounter for fracture with malunion -S89312S Salter-Harris Type I physeal fracture of lower end of left fibula, sequela -S89319A Salter-Harris Type I physeal fracture of lower end of unspecified fibula, initial encounter for closed fracture -S89319D Salter-Harris Type I physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with routine healing -S89319G Salter-Harris Type I physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89319K Salter-Harris Type I physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with nonunion -S89319P Salter-Harris Type I physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with malunion -S89319S Salter-Harris Type I physeal fracture of lower end of unspecified fibula, sequela -S89321A Salter-Harris Type II physeal fracture of lower end of right fibula, initial encounter for closed fracture -S89321D Salter-Harris Type II physeal fracture of lower end of right fibula, subsequent encounter for fracture with routine healing -S89321G Salter-Harris Type II physeal fracture of lower end of right fibula, subsequent encounter for fracture with delayed healing -S89321K Salter-Harris Type II physeal fracture of lower end of right fibula, subsequent encounter for fracture with nonunion -S89321P Salter-Harris Type II physeal fracture of lower end of right fibula, subsequent encounter for fracture with malunion -S89321S Salter-Harris Type II physeal fracture of lower end of right fibula, sequela -S89322A Salter-Harris Type II physeal fracture of lower end of left fibula, initial encounter for closed fracture -S89322D Salter-Harris Type II physeal fracture of lower end of left fibula, subsequent encounter for fracture with routine healing -S89322G Salter-Harris Type II physeal fracture of lower end of left fibula, subsequent encounter for fracture with delayed healing -S89322K Salter-Harris Type II physeal fracture of lower end of left fibula, subsequent encounter for fracture with nonunion -S89322P Salter-Harris Type II physeal fracture of lower end of left fibula, subsequent encounter for fracture with malunion -S89322S Salter-Harris Type II physeal fracture of lower end of left fibula, sequela -S89329A Salter-Harris Type II physeal fracture of lower end of unspecified fibula, initial encounter for closed fracture -S89329D Salter-Harris Type II physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with routine healing -S89329G Salter-Harris Type II physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89329K Salter-Harris Type II physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with nonunion -S89329P Salter-Harris Type II physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with malunion -S89329S Salter-Harris Type II physeal fracture of lower end of unspecified fibula, sequela -S89391A Other physeal fracture of lower end of right fibula, initial encounter for closed fracture -S89391D Other physeal fracture of lower end of right fibula, subsequent encounter for fracture with routine healing -S89391G Other physeal fracture of lower end of right fibula, subsequent encounter for fracture with delayed healing -S89391K Other physeal fracture of lower end of right fibula, subsequent encounter for fracture with nonunion -S89391P Other physeal fracture of lower end of right fibula, subsequent encounter for fracture with malunion -S89391S Other physeal fracture of lower end of right fibula, sequela -S89392A Other physeal fracture of lower end of left fibula, initial encounter for closed fracture -S89392D Other physeal fracture of lower end of left fibula, subsequent encounter for fracture with routine healing -S89392G Other physeal fracture of lower end of left fibula, subsequent encounter for fracture with delayed healing -S89392K Other physeal fracture of lower end of left fibula, subsequent encounter for fracture with nonunion -S89392P Other physeal fracture of lower end of left fibula, subsequent encounter for fracture with malunion -S89392S Other physeal fracture of lower end of left fibula, sequela -S89399A Other physeal fracture of lower end of unspecified fibula, initial encounter for closed fracture -S89399D Other physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with routine healing -S89399G Other physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89399K Other physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with nonunion -S89399P Other physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with malunion -S89399S Other physeal fracture of lower end of unspecified fibula, sequela -S8980XA Other specified injuries of unspecified lower leg, initial encounter -S8980XD Other specified injuries of unspecified lower leg, subsequent encounter -S8980XS Other specified injuries of unspecified lower leg, sequela -S8981XA Other specified injuries of right lower leg, initial encounter -S8981XD Other specified injuries of right lower leg, subsequent encounter -S8981XS Other specified injuries of right lower leg, sequela -S8982XA Other specified injuries of left lower leg, initial encounter -S8982XD Other specified injuries of left lower leg, subsequent encounter -S8982XS Other specified injuries of left lower leg, sequela -S8990XA Unspecified injury of unspecified lower leg, initial encounter -S8990XD Unspecified injury of unspecified lower leg, subsequent encounter -S8990XS Unspecified injury of unspecified lower leg, sequela -S8991XA Unspecified injury of right lower leg, initial encounter -S8991XD Unspecified injury of right lower leg, subsequent encounter -S8991XS Unspecified injury of right lower leg, sequela -S8992XA Unspecified injury of left lower leg, initial encounter -S8992XD Unspecified injury of left lower leg, subsequent encounter -S8992XS Unspecified injury of left lower leg, sequela -S9000XA Contusion of unspecified ankle, initial encounter -S9000XD Contusion of unspecified ankle, subsequent encounter -S9000XS Contusion of unspecified ankle, sequela -S9001XA Contusion of right ankle, initial encounter -S9001XD Contusion of right ankle, subsequent encounter -S9001XS Contusion of right ankle, sequela -S9002XA Contusion of left ankle, initial encounter -S9002XD Contusion of left ankle, subsequent encounter -S9002XS Contusion of left ankle, sequela -S90111A Contusion of right great toe without damage to nail, initial encounter -S90111D Contusion of right great toe without damage to nail, subsequent encounter -S90111S Contusion of right great toe without damage to nail, sequela -S90112A Contusion of left great toe without damage to nail, initial encounter -S90112D Contusion of left great toe without damage to nail, subsequent encounter -S90112S Contusion of left great toe without damage to nail, sequela -S90119A Contusion of unspecified great toe without damage to nail, initial encounter -S90119D Contusion of unspecified great toe without damage to nail, subsequent encounter -S90119S Contusion of unspecified great toe without damage to nail, sequela -S90121A Contusion of right lesser toe(s) without damage to nail, initial encounter -S90121D Contusion of right lesser toe(s) without damage to nail, subsequent encounter -S90121S Contusion of right lesser toe(s) without damage to nail, sequela -S90122A Contusion of left lesser toe(s) without damage to nail, initial encounter -S90122D Contusion of left lesser toe(s) without damage to nail, subsequent encounter -S90122S Contusion of left lesser toe(s) without damage to nail, sequela -S90129A Contusion of unspecified lesser toe(s) without damage to nail, initial encounter -S90129D Contusion of unspecified lesser toe(s) without damage to nail, subsequent encounter -S90129S Contusion of unspecified lesser toe(s) without damage to nail, sequela -S90211A Contusion of right great toe with damage to nail, initial encounter -S90211D Contusion of right great toe with damage to nail, subsequent encounter -S90211S Contusion of right great toe with damage to nail, sequela -S90212A Contusion of left great toe with damage to nail, initial encounter -S90212D Contusion of left great toe with damage to nail, subsequent encounter -S90212S Contusion of left great toe with damage to nail, sequela -S90219A Contusion of unspecified great toe with damage to nail, initial encounter -S90219D Contusion of unspecified great toe with damage to nail, subsequent encounter -S90219S Contusion of unspecified great toe with damage to nail, sequela -S90221A Contusion of right lesser toe(s) with damage to nail, initial encounter -S90221D Contusion of right lesser toe(s) with damage to nail, subsequent encounter -S90221S Contusion of right lesser toe(s) with damage to nail, sequela -S90222A Contusion of left lesser toe(s) with damage to nail, initial encounter -S90222D Contusion of left lesser toe(s) with damage to nail, subsequent encounter -S90222S Contusion of left lesser toe(s) with damage to nail, sequela -S90229A Contusion of unspecified lesser toe(s) with damage to nail, initial encounter -S90229D Contusion of unspecified lesser toe(s) with damage to nail, subsequent encounter -S90229S Contusion of unspecified lesser toe(s) with damage to nail, sequela -S9030XA Contusion of unspecified foot, initial encounter -S9030XD Contusion of unspecified foot, subsequent encounter -S9030XS Contusion of unspecified foot, sequela -S9031XA Contusion of right foot, initial encounter -S9031XD Contusion of right foot, subsequent encounter -S9031XS Contusion of right foot, sequela -S9032XA Contusion of left foot, initial encounter -S9032XD Contusion of left foot, subsequent encounter -S9032XS Contusion of left foot, sequela -S90411A Abrasion, right great toe, initial encounter -S90411D Abrasion, right great toe, subsequent encounter -S90411S Abrasion, right great toe, sequela -S90412A Abrasion, left great toe, initial encounter -S90412D Abrasion, left great toe, subsequent encounter -S90412S Abrasion, left great toe, sequela -S90413A Abrasion, unspecified great toe, initial encounter -S90413D Abrasion, unspecified great toe, subsequent encounter -S90413S Abrasion, unspecified great toe, sequela -S90414A Abrasion, right lesser toe(s), initial encounter -S90414D Abrasion, right lesser toe(s), subsequent encounter -S90414S Abrasion, right lesser toe(s), sequela -S90415A Abrasion, left lesser toe(s), initial encounter -S90415D Abrasion, left lesser toe(s), subsequent encounter -S90415S Abrasion, left lesser toe(s), sequela -S90416A Abrasion, unspecified lesser toe(s), initial encounter -S90416D Abrasion, unspecified lesser toe(s), subsequent encounter -S90416S Abrasion, unspecified lesser toe(s), sequela -S90421A Blister (nonthermal), right great toe, initial encounter -S90421D Blister (nonthermal), right great toe, subsequent encounter -S90421S Blister (nonthermal), right great toe, sequela -S90422A Blister (nonthermal), left great toe, initial encounter -S90422D Blister (nonthermal), left great toe, subsequent encounter -S90422S Blister (nonthermal), left great toe, sequela -S90423A Blister (nonthermal), unspecified great toe, initial encounter -S90423D Blister (nonthermal), unspecified great toe, subsequent encounter -S90423S Blister (nonthermal), unspecified great toe, sequela -S90424A Blister (nonthermal), right lesser toe(s), initial encounter -S90424D Blister (nonthermal), right lesser toe(s), subsequent encounter -S90424S Blister (nonthermal), right lesser toe(s), sequela -S90425A Blister (nonthermal), left lesser toe(s), initial encounter -S90425D Blister (nonthermal), left lesser toe(s), subsequent encounter -S90425S Blister (nonthermal), left lesser toe(s), sequela -S90426A Blister (nonthermal), unspecified lesser toe(s), initial encounter -S90426D Blister (nonthermal), unspecified lesser toe(s), subsequent encounter -S90426S Blister (nonthermal), unspecified lesser toe(s), sequela -S90441A External constriction, right great toe, initial encounter -S90441D External constriction, right great toe, subsequent encounter -S90441S External constriction, right great toe, sequela -S90442A External constriction, left great toe, initial encounter -S90442D External constriction, left great toe, subsequent encounter -S90442S External constriction, left great toe, sequela -S90443A External constriction, unspecified great toe, initial encounter -S90443D External constriction, unspecified great toe, subsequent encounter -S90443S External constriction, unspecified great toe, sequela -S90444A External constriction, right lesser toe(s), initial encounter -S90444D External constriction, right lesser toe(s), subsequent encounter -S90444S External constriction, right lesser toe(s), sequela -S90445A External constriction, left lesser toe(s), initial encounter -S90445D External constriction, left lesser toe(s), subsequent encounter -S90445S External constriction, left lesser toe(s), sequela -S90446A External constriction, unspecified lesser toe(s), initial encounter -S90446D External constriction, unspecified lesser toe(s), subsequent encounter -S90446S External constriction, unspecified lesser toe(s), sequela -S90451A Superficial foreign body, right great toe, initial encounter -S90451D Superficial foreign body, right great toe, subsequent encounter -S90451S Superficial foreign body, right great toe, sequela -S90452A Superficial foreign body, left great toe, initial encounter -S90452D Superficial foreign body, left great toe, subsequent encounter -S90452S Superficial foreign body, left great toe, sequela -S90453A Superficial foreign body, unspecified great toe, initial encounter -S90453D Superficial foreign body, unspecified great toe, subsequent encounter -S90453S Superficial foreign body, unspecified great toe, sequela -S90454A Superficial foreign body, right lesser toe(s), initial encounter -S90454D Superficial foreign body, right lesser toe(s), subsequent encounter -S90454S Superficial foreign body, right lesser toe(s), sequela -S90455A Superficial foreign body, left lesser toe(s), initial encounter -S90455D Superficial foreign body, left lesser toe(s), subsequent encounter -S90455S Superficial foreign body, left lesser toe(s), sequela -S90456A Superficial foreign body, unspecified lesser toe(s), initial encounter -S90456D Superficial foreign body, unspecified lesser toe(s), subsequent encounter -S90456S Superficial foreign body, unspecified lesser toe(s), sequela -S90461A Insect bite (nonvenomous), right great toe, initial encounter -S90461D Insect bite (nonvenomous), right great toe, subsequent encounter -S90461S Insect bite (nonvenomous), right great toe, sequela -S90462A Insect bite (nonvenomous), left great toe, initial encounter -S90462D Insect bite (nonvenomous), left great toe, subsequent encounter -S90462S Insect bite (nonvenomous), left great toe, sequela -S90463A Insect bite (nonvenomous), unspecified great toe, initial encounter -S90463D Insect bite (nonvenomous), unspecified great toe, subsequent encounter -S90463S Insect bite (nonvenomous), unspecified great toe, sequela -S90464A Insect bite (nonvenomous), right lesser toe(s), initial encounter -S90464D Insect bite (nonvenomous), right lesser toe(s), subsequent encounter -S90464S Insect bite (nonvenomous), right lesser toe(s), sequela -S90465A Insect bite (nonvenomous), left lesser toe(s), initial encounter -S90465D Insect bite (nonvenomous), left lesser toe(s), subsequent encounter -S90465S Insect bite (nonvenomous), left lesser toe(s), sequela -S90466A Insect bite (nonvenomous), unspecified lesser toe(s), initial encounter -S90466D Insect bite (nonvenomous), unspecified lesser toe(s), subsequent encounter -S90466S Insect bite (nonvenomous), unspecified lesser toe(s), sequela -S90471A Other superficial bite of right great toe, initial encounter -S90471D Other superficial bite of right great toe, subsequent encounter -S90471S Other superficial bite of right great toe, sequela -S90472A Other superficial bite of left great toe, initial encounter -S90472D Other superficial bite of left great toe, subsequent encounter -S90472S Other superficial bite of left great toe, sequela -S90473A Other superficial bite of unspecified great toe, initial encounter -S90473D Other superficial bite of unspecified great toe, subsequent encounter -S90473S Other superficial bite of unspecified great toe, sequela -S90474A Other superficial bite of right lesser toe(s), initial encounter -S90474D Other superficial bite of right lesser toe(s), subsequent encounter -S90474S Other superficial bite of right lesser toe(s), sequela -S90475A Other superficial bite of left lesser toe(s), initial encounter -S90475D Other superficial bite of left lesser toe(s), subsequent encounter -S90475S Other superficial bite of left lesser toe(s), sequela -S90476A Other superficial bite of unspecified lesser toe(s), initial encounter -S90476D Other superficial bite of unspecified lesser toe(s), subsequent encounter -S90476S Other superficial bite of unspecified lesser toe(s), sequela -S90511A Abrasion, right ankle, initial encounter -S90511D Abrasion, right ankle, subsequent encounter -S90511S Abrasion, right ankle, sequela -S90512A Abrasion, left ankle, initial encounter -S90512D Abrasion, left ankle, subsequent encounter -S90512S Abrasion, left ankle, sequela -S90519A Abrasion, unspecified ankle, initial encounter -S90519D Abrasion, unspecified ankle, subsequent encounter -S90519S Abrasion, unspecified ankle, sequela -S90521A Blister (nonthermal), right ankle, initial encounter -S90521D Blister (nonthermal), right ankle, subsequent encounter -S90521S Blister (nonthermal), right ankle, sequela -S90522A Blister (nonthermal), left ankle, initial encounter -S90522D Blister (nonthermal), left ankle, subsequent encounter -S90522S Blister (nonthermal), left ankle, sequela -S90529A Blister (nonthermal), unspecified ankle, initial encounter -S90529D Blister (nonthermal), unspecified ankle, subsequent encounter -S90529S Blister (nonthermal), unspecified ankle, sequela -S90541A External constriction, right ankle, initial encounter -S90541D External constriction, right ankle, subsequent encounter -S90541S External constriction, right ankle, sequela -S90542A External constriction, left ankle, initial encounter -S90542D External constriction, left ankle, subsequent encounter -S90542S External constriction, left ankle, sequela -S90549A External constriction, unspecified ankle, initial encounter -S90549D External constriction, unspecified ankle, subsequent encounter -S90549S External constriction, unspecified ankle, sequela -S90551A Superficial foreign body, right ankle, initial encounter -S90551D Superficial foreign body, right ankle, subsequent encounter -S90551S Superficial foreign body, right ankle, sequela -S90552A Superficial foreign body, left ankle, initial encounter -S90552D Superficial foreign body, left ankle, subsequent encounter -S90552S Superficial foreign body, left ankle, sequela -S90559A Superficial foreign body, unspecified ankle, initial encounter -S90559D Superficial foreign body, unspecified ankle, subsequent encounter -S90559S Superficial foreign body, unspecified ankle, sequela -S90561A Insect bite (nonvenomous), right ankle, initial encounter -S90561D Insect bite (nonvenomous), right ankle, subsequent encounter -S90561S Insect bite (nonvenomous), right ankle, sequela -S90562A Insect bite (nonvenomous), left ankle, initial encounter -S90562D Insect bite (nonvenomous), left ankle, subsequent encounter -S90562S Insect bite (nonvenomous), left ankle, sequela -S90569A Insect bite (nonvenomous), unspecified ankle, initial encounter -S90569D Insect bite (nonvenomous), unspecified ankle, subsequent encounter -S90569S Insect bite (nonvenomous), unspecified ankle, sequela -S90571A Other superficial bite of ankle, right ankle, initial encounter -S90571D Other superficial bite of ankle, right ankle, subsequent encounter -S90571S Other superficial bite of ankle, right ankle, sequela -S90572A Other superficial bite of ankle, left ankle, initial encounter -S90572D Other superficial bite of ankle, left ankle, subsequent encounter -S90572S Other superficial bite of ankle, left ankle, sequela -S90579A Other superficial bite of ankle, unspecified ankle, initial encounter -S90579D Other superficial bite of ankle, unspecified ankle, subsequent encounter -S90579S Other superficial bite of ankle, unspecified ankle, sequela -S90811A Abrasion, right foot, initial encounter -S90811D Abrasion, right foot, subsequent encounter -S90811S Abrasion, right foot, sequela -S90812A Abrasion, left foot, initial encounter -S90812D Abrasion, left foot, subsequent encounter -S90812S Abrasion, left foot, sequela -S90819A Abrasion, unspecified foot, initial encounter -S90819D Abrasion, unspecified foot, subsequent encounter -S90819S Abrasion, unspecified foot, sequela -S90821A Blister (nonthermal), right foot, initial encounter -S90821D Blister (nonthermal), right foot, subsequent encounter -S90821S Blister (nonthermal), right foot, sequela -S90822A Blister (nonthermal), left foot, initial encounter -S90822D Blister (nonthermal), left foot, subsequent encounter -S90822S Blister (nonthermal), left foot, sequela -S90829A Blister (nonthermal), unspecified foot, initial encounter -S90829D Blister (nonthermal), unspecified foot, subsequent encounter -S90829S Blister (nonthermal), unspecified foot, sequela -S90841A External constriction, right foot, initial encounter -S90841D External constriction, right foot, subsequent encounter -S90841S External constriction, right foot, sequela -S90842A External constriction, left foot, initial encounter -S90842D External constriction, left foot, subsequent encounter -S90842S External constriction, left foot, sequela -S90849A External constriction, unspecified foot, initial encounter -S90849D External constriction, unspecified foot, subsequent encounter -S90849S External constriction, unspecified foot, sequela -S90851A Superficial foreign body, right foot, initial encounter -S90851D Superficial foreign body, right foot, subsequent encounter -S90851S Superficial foreign body, right foot, sequela -S90852A Superficial foreign body, left foot, initial encounter -S90852D Superficial foreign body, left foot, subsequent encounter -S90852S Superficial foreign body, left foot, sequela -S90859A Superficial foreign body, unspecified foot, initial encounter -S90859D Superficial foreign body, unspecified foot, subsequent encounter -S90859S Superficial foreign body, unspecified foot, sequela -S90861A Insect bite (nonvenomous), right foot, initial encounter -S90861D Insect bite (nonvenomous), right foot, subsequent encounter -S90861S Insect bite (nonvenomous), right foot, sequela -S90862A Insect bite (nonvenomous), left foot, initial encounter -S90862D Insect bite (nonvenomous), left foot, subsequent encounter -S90862S Insect bite (nonvenomous), left foot, sequela -S90869A Insect bite (nonvenomous), unspecified foot, initial encounter -S90869D Insect bite (nonvenomous), unspecified foot, subsequent encounter -S90869S Insect bite (nonvenomous), unspecified foot, sequela -S90871A Other superficial bite of right foot, initial encounter -S90871D Other superficial bite of right foot, subsequent encounter -S90871S Other superficial bite of right foot, sequela -S90872A Other superficial bite of left foot, initial encounter -S90872D Other superficial bite of left foot, subsequent encounter -S90872S Other superficial bite of left foot, sequela -S90879A Other superficial bite of unspecified foot, initial encounter -S90879D Other superficial bite of unspecified foot, subsequent encounter -S90879S Other superficial bite of unspecified foot, sequela -S90911A Unspecified superficial injury of right ankle, initial encounter -S90911D Unspecified superficial injury of right ankle, subsequent encounter -S90911S Unspecified superficial injury of right ankle, sequela -S90912A Unspecified superficial injury of left ankle, initial encounter -S90912D Unspecified superficial injury of left ankle, subsequent encounter -S90912S Unspecified superficial injury of left ankle, sequela -S90919A Unspecified superficial injury of unspecified ankle, initial encounter -S90919D Unspecified superficial injury of unspecified ankle, subsequent encounter -S90919S Unspecified superficial injury of unspecified ankle, sequela -S90921A Unspecified superficial injury of right foot, initial encounter -S90921D Unspecified superficial injury of right foot, subsequent encounter -S90921S Unspecified superficial injury of right foot, sequela -S90922A Unspecified superficial injury of left foot, initial encounter -S90922D Unspecified superficial injury of left foot, subsequent encounter -S90922S Unspecified superficial injury of left foot, sequela -S90929A Unspecified superficial injury of unspecified foot, initial encounter -S90929D Unspecified superficial injury of unspecified foot, subsequent encounter -S90929S Unspecified superficial injury of unspecified foot, sequela -S90931A Unspecified superficial injury of right great toe, initial encounter -S90931D Unspecified superficial injury of right great toe, subsequent encounter -S90931S Unspecified superficial injury of right great toe, sequela -S90932A Unspecified superficial injury of left great toe, initial encounter -S90932D Unspecified superficial injury of left great toe, subsequent encounter -S90932S Unspecified superficial injury of left great toe, sequela -S90933A Unspecified superficial injury of unspecified great toe, initial encounter -S90933D Unspecified superficial injury of unspecified great toe, subsequent encounter -S90933S Unspecified superficial injury of unspecified great toe, sequela -S90934A Unspecified superficial injury of right lesser toe(s), initial encounter -S90934D Unspecified superficial injury of right lesser toe(s), subsequent encounter -S90934S Unspecified superficial injury of right lesser toe(s), sequela -S90935A Unspecified superficial injury of left lesser toe(s), initial encounter -S90935D Unspecified superficial injury of left lesser toe(s), subsequent encounter -S90935S Unspecified superficial injury of left lesser toe(s), sequela -S90936A Unspecified superficial injury of unspecified lesser toe(s), initial encounter -S90936D Unspecified superficial injury of unspecified lesser toe(s), subsequent encounter -S90936S Unspecified superficial injury of unspecified lesser toe(s), sequela -S91001A Unspecified open wound, right ankle, initial encounter -S91001D Unspecified open wound, right ankle, subsequent encounter -S91001S Unspecified open wound, right ankle, sequela -S91002A Unspecified open wound, left ankle, initial encounter -S91002D Unspecified open wound, left ankle, subsequent encounter -S91002S Unspecified open wound, left ankle, sequela -S91009A Unspecified open wound, unspecified ankle, initial encounter -S91009D Unspecified open wound, unspecified ankle, subsequent encounter -S91009S Unspecified open wound, unspecified ankle, sequela -S91011A Laceration without foreign body, right ankle, initial encounter -S91011D Laceration without foreign body, right ankle, subsequent encounter -S91011S Laceration without foreign body, right ankle, sequela -S91012A Laceration without foreign body, left ankle, initial encounter -S91012D Laceration without foreign body, left ankle, subsequent encounter -S91012S Laceration without foreign body, left ankle, sequela -S91019A Laceration without foreign body, unspecified ankle, initial encounter -S91019D Laceration without foreign body, unspecified ankle, subsequent encounter -S91019S Laceration without foreign body, unspecified ankle, sequela -S91021A Laceration with foreign body, right ankle, initial encounter -S91021D Laceration with foreign body, right ankle, subsequent encounter -S91021S Laceration with foreign body, right ankle, sequela -S91022A Laceration with foreign body, left ankle, initial encounter -S91022D Laceration with foreign body, left ankle, subsequent encounter -S91022S Laceration with foreign body, left ankle, sequela -S91029A Laceration with foreign body, unspecified ankle, initial encounter -S91029D Laceration with foreign body, unspecified ankle, subsequent encounter -S91029S Laceration with foreign body, unspecified ankle, sequela -S91031A Puncture wound without foreign body, right ankle, initial encounter -S91031D Puncture wound without foreign body, right ankle, subsequent encounter -S91031S Puncture wound without foreign body, right ankle, sequela -S91032A Puncture wound without foreign body, left ankle, initial encounter -S91032D Puncture wound without foreign body, left ankle, subsequent encounter -S91032S Puncture wound without foreign body, left ankle, sequela -S91039A Puncture wound without foreign body, unspecified ankle, initial encounter -S91039D Puncture wound without foreign body, unspecified ankle, subsequent encounter -S91039S Puncture wound without foreign body, unspecified ankle, sequela -S91041A Puncture wound with foreign body, right ankle, initial encounter -S91041D Puncture wound with foreign body, right ankle, subsequent encounter -S91041S Puncture wound with foreign body, right ankle, sequela -S91042A Puncture wound with foreign body, left ankle, initial encounter -S91042D Puncture wound with foreign body, left ankle, subsequent encounter -S91042S Puncture wound with foreign body, left ankle, sequela -S91049A Puncture wound with foreign body, unspecified ankle, initial encounter -S91049D Puncture wound with foreign body, unspecified ankle, subsequent encounter -S91049S Puncture wound with foreign body, unspecified ankle, sequela -S91051A Open bite, right ankle, initial encounter -S91051D Open bite, right ankle, subsequent encounter -S91051S Open bite, right ankle, sequela -S91052A Open bite, left ankle, initial encounter -S91052D Open bite, left ankle, subsequent encounter -S91052S Open bite, left ankle, sequela -S91059A Open bite, unspecified ankle, initial encounter -S91059D Open bite, unspecified ankle, subsequent encounter -S91059S Open bite, unspecified ankle, sequela -S91101A Unspecified open wound of right great toe without damage to nail, initial encounter -S91101D Unspecified open wound of right great toe without damage to nail, subsequent encounter -S91101S Unspecified open wound of right great toe without damage to nail, sequela -S91102A Unspecified open wound of left great toe without damage to nail, initial encounter -S91102D Unspecified open wound of left great toe without damage to nail, subsequent encounter -S91102S Unspecified open wound of left great toe without damage to nail, sequela -S91103A Unspecified open wound of unspecified great toe without damage to nail, initial encounter -S91103D Unspecified open wound of unspecified great toe without damage to nail, subsequent encounter -S91103S Unspecified open wound of unspecified great toe without damage to nail, sequela -S91104A Unspecified open wound of right lesser toe(s) without damage to nail, initial encounter -S91104D Unspecified open wound of right lesser toe(s) without damage to nail, subsequent encounter -S91104S Unspecified open wound of right lesser toe(s) without damage to nail, sequela -S91105A Unspecified open wound of left lesser toe(s) without damage to nail, initial encounter -S91105D Unspecified open wound of left lesser toe(s) without damage to nail, subsequent encounter -S91105S Unspecified open wound of left lesser toe(s) without damage to nail, sequela -S91106A Unspecified open wound of unspecified lesser toe(s) without damage to nail, initial encounter -S91106D Unspecified open wound of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91106S Unspecified open wound of unspecified lesser toe(s) without damage to nail, sequela -S91109A Unspecified open wound of unspecified toe(s) without damage to nail, initial encounter -S91109D Unspecified open wound of unspecified toe(s) without damage to nail, subsequent encounter -S91109S Unspecified open wound of unspecified toe(s) without damage to nail, sequela -S91111A Laceration without foreign body of right great toe without damage to nail, initial encounter -S91111D Laceration without foreign body of right great toe without damage to nail, subsequent encounter -S91111S Laceration without foreign body of right great toe without damage to nail, sequela -S91112A Laceration without foreign body of left great toe without damage to nail, initial encounter -S91112D Laceration without foreign body of left great toe without damage to nail, subsequent encounter -S91112S Laceration without foreign body of left great toe without damage to nail, sequela -S91113A Laceration without foreign body of unspecified great toe without damage to nail, initial encounter -S91113D Laceration without foreign body of unspecified great toe without damage to nail, subsequent encounter -S91113S Laceration without foreign body of unspecified great toe without damage to nail, sequela -S91114A Laceration without foreign body of right lesser toe(s) without damage to nail, initial encounter -S91114D Laceration without foreign body of right lesser toe(s) without damage to nail, subsequent encounter -S91114S Laceration without foreign body of right lesser toe(s) without damage to nail, sequela -S91115A Laceration without foreign body of left lesser toe(s) without damage to nail, initial encounter -S91115D Laceration without foreign body of left lesser toe(s) without damage to nail, subsequent encounter -S91115S Laceration without foreign body of left lesser toe(s) without damage to nail, sequela -S91116A Laceration without foreign body of unspecified lesser toe(s) without damage to nail, initial encounter -S91116D Laceration without foreign body of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91116S Laceration without foreign body of unspecified lesser toe(s) without damage to nail, sequela -S91119A Laceration without foreign body of unspecified toe without damage to nail, initial encounter -S91119D Laceration without foreign body of unspecified toe without damage to nail, subsequent encounter -S91119S Laceration without foreign body of unspecified toe without damage to nail, sequela -S91121A Laceration with foreign body of right great toe without damage to nail, initial encounter -S91121D Laceration with foreign body of right great toe without damage to nail, subsequent encounter -S91121S Laceration with foreign body of right great toe without damage to nail, sequela -S91122A Laceration with foreign body of left great toe without damage to nail, initial encounter -S91122D Laceration with foreign body of left great toe without damage to nail, subsequent encounter -S91122S Laceration with foreign body of left great toe without damage to nail, sequela -S91123A Laceration with foreign body of unspecified great toe without damage to nail, initial encounter -S91123D Laceration with foreign body of unspecified great toe without damage to nail, subsequent encounter -S91123S Laceration with foreign body of unspecified great toe without damage to nail, sequela -S91124A Laceration with foreign body of right lesser toe(s) without damage to nail, initial encounter -S91124D Laceration with foreign body of right lesser toe(s) without damage to nail, subsequent encounter -S91124S Laceration with foreign body of right lesser toe(s) without damage to nail, sequela -S91125A Laceration with foreign body of left lesser toe(s) without damage to nail, initial encounter -S91125D Laceration with foreign body of left lesser toe(s) without damage to nail, subsequent encounter -S91125S Laceration with foreign body of left lesser toe(s) without damage to nail, sequela -S91126A Laceration with foreign body of unspecified lesser toe(s) without damage to nail, initial encounter -S91126D Laceration with foreign body of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91126S Laceration with foreign body of unspecified lesser toe(s) without damage to nail, sequela -S91129A Laceration with foreign body of unspecified toe(s) without damage to nail, initial encounter -S91129D Laceration with foreign body of unspecified toe(s) without damage to nail, subsequent encounter -S91129S Laceration with foreign body of unspecified toe(s) without damage to nail, sequela -S91131A Puncture wound without foreign body of right great toe without damage to nail, initial encounter -S91131D Puncture wound without foreign body of right great toe without damage to nail, subsequent encounter -S91131S Puncture wound without foreign body of right great toe without damage to nail, sequela -S91132A Puncture wound without foreign body of left great toe without damage to nail, initial encounter -S91132D Puncture wound without foreign body of left great toe without damage to nail, subsequent encounter -S91132S Puncture wound without foreign body of left great toe without damage to nail, sequela -S91133A Puncture wound without foreign body of unspecified great toe without damage to nail, initial encounter -S91133D Puncture wound without foreign body of unspecified great toe without damage to nail, subsequent encounter -S91133S Puncture wound without foreign body of unspecified great toe without damage to nail, sequela -S91134A Puncture wound without foreign body of right lesser toe(s) without damage to nail, initial encounter -S91134D Puncture wound without foreign body of right lesser toe(s) without damage to nail, subsequent encounter -S91134S Puncture wound without foreign body of right lesser toe(s) without damage to nail, sequela -S91135A Puncture wound without foreign body of left lesser toe(s) without damage to nail, initial encounter -S91135D Puncture wound without foreign body of left lesser toe(s) without damage to nail, subsequent encounter -S91135S Puncture wound without foreign body of left lesser toe(s) without damage to nail, sequela -S91136A Puncture wound without foreign body of unspecified lesser toe(s) without damage to nail, initial encounter -S91136D Puncture wound without foreign body of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91136S Puncture wound without foreign body of unspecified lesser toe(s) without damage to nail, sequela -S91139A Puncture wound without foreign body of unspecified toe(s) without damage to nail, initial encounter -S91139D Puncture wound without foreign body of unspecified toe(s) without damage to nail, subsequent encounter -S91139S Puncture wound without foreign body of unspecified toe(s) without damage to nail, sequela -S91141A Puncture wound with foreign body of right great toe without damage to nail, initial encounter -S91141D Puncture wound with foreign body of right great toe without damage to nail, subsequent encounter -S91141S Puncture wound with foreign body of right great toe without damage to nail, sequela -S91142A Puncture wound with foreign body of left great toe without damage to nail, initial encounter -S91142D Puncture wound with foreign body of left great toe without damage to nail, subsequent encounter -S91142S Puncture wound with foreign body of left great toe without damage to nail, sequela -S91143A Puncture wound with foreign body of unspecified great toe without damage to nail, initial encounter -S91143D Puncture wound with foreign body of unspecified great toe without damage to nail, subsequent encounter -S91143S Puncture wound with foreign body of unspecified great toe without damage to nail, sequela -S91144A Puncture wound with foreign body of right lesser toe(s) without damage to nail, initial encounter -S91144D Puncture wound with foreign body of right lesser toe(s) without damage to nail, subsequent encounter -S91144S Puncture wound with foreign body of right lesser toe(s) without damage to nail, sequela -S91145A Puncture wound with foreign body of left lesser toe(s) without damage to nail, initial encounter -S91145D Puncture wound with foreign body of left lesser toe(s) without damage to nail, subsequent encounter -S91145S Puncture wound with foreign body of left lesser toe(s) without damage to nail, sequela -S91146A Puncture wound with foreign body of unspecified lesser toe(s) without damage to nail, initial encounter -S91146D Puncture wound with foreign body of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91146S Puncture wound with foreign body of unspecified lesser toe(s) without damage to nail, sequela -S91149A Puncture wound with foreign body of unspecified toe(s) without damage to nail, initial encounter -S91149D Puncture wound with foreign body of unspecified toe(s) without damage to nail, subsequent encounter -S91149S Puncture wound with foreign body of unspecified toe(s) without damage to nail, sequela -S91151A Open bite of right great toe without damage to nail, initial encounter -S91151D Open bite of right great toe without damage to nail, subsequent encounter -S91151S Open bite of right great toe without damage to nail, sequela -S91152A Open bite of left great toe without damage to nail, initial encounter -S91152D Open bite of left great toe without damage to nail, subsequent encounter -S91152S Open bite of left great toe without damage to nail, sequela -S91153A Open bite of unspecified great toe without damage to nail, initial encounter -S91153D Open bite of unspecified great toe without damage to nail, subsequent encounter -S91153S Open bite of unspecified great toe without damage to nail, sequela -S91154A Open bite of right lesser toe(s) without damage to nail, initial encounter -S91154D Open bite of right lesser toe(s) without damage to nail, subsequent encounter -S91154S Open bite of right lesser toe(s) without damage to nail, sequela -S91155A Open bite of left lesser toe(s) without damage to nail, initial encounter -S91155D Open bite of left lesser toe(s) without damage to nail, subsequent encounter -S91155S Open bite of left lesser toe(s) without damage to nail, sequela -S91156A Open bite of unspecified lesser toe(s) without damage to nail, initial encounter -S91156D Open bite of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91156S Open bite of unspecified lesser toe(s) without damage to nail, sequela -S91159A Open bite of unspecified toe(s) without damage to nail, initial encounter -S91159D Open bite of unspecified toe(s) without damage to nail, subsequent encounter -S91159S Open bite of unspecified toe(s) without damage to nail, sequela -S91201A Unspecified open wound of right great toe with damage to nail, initial encounter -S91201D Unspecified open wound of right great toe with damage to nail, subsequent encounter -S91201S Unspecified open wound of right great toe with damage to nail, sequela -S91202A Unspecified open wound of left great toe with damage to nail, initial encounter -S91202D Unspecified open wound of left great toe with damage to nail, subsequent encounter -S91202S Unspecified open wound of left great toe with damage to nail, sequela -S91203A Unspecified open wound of unspecified great toe with damage to nail, initial encounter -S91203D Unspecified open wound of unspecified great toe with damage to nail, subsequent encounter -S91203S Unspecified open wound of unspecified great toe with damage to nail, sequela -S91204A Unspecified open wound of right lesser toe(s) with damage to nail, initial encounter -S91204D Unspecified open wound of right lesser toe(s) with damage to nail, subsequent encounter -S91204S Unspecified open wound of right lesser toe(s) with damage to nail, sequela -S91205A Unspecified open wound of left lesser toe(s) with damage to nail, initial encounter -S91205D Unspecified open wound of left lesser toe(s) with damage to nail, subsequent encounter -S91205S Unspecified open wound of left lesser toe(s) with damage to nail, sequela -S91206A Unspecified open wound of unspecified lesser toe(s) with damage to nail, initial encounter -S91206D Unspecified open wound of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91206S Unspecified open wound of unspecified lesser toe(s) with damage to nail, sequela -S91209A Unspecified open wound of unspecified toe(s) with damage to nail, initial encounter -S91209D Unspecified open wound of unspecified toe(s) with damage to nail, subsequent encounter -S91209S Unspecified open wound of unspecified toe(s) with damage to nail, sequela -S91211A Laceration without foreign body of right great toe with damage to nail, initial encounter -S91211D Laceration without foreign body of right great toe with damage to nail, subsequent encounter -S91211S Laceration without foreign body of right great toe with damage to nail, sequela -S91212A Laceration without foreign body of left great toe with damage to nail, initial encounter -S91212D Laceration without foreign body of left great toe with damage to nail, subsequent encounter -S91212S Laceration without foreign body of left great toe with damage to nail, sequela -S91213A Laceration without foreign body of unspecified great toe with damage to nail, initial encounter -S91213D Laceration without foreign body of unspecified great toe with damage to nail, subsequent encounter -S91213S Laceration without foreign body of unspecified great toe with damage to nail, sequela -S91214A Laceration without foreign body of right lesser toe(s) with damage to nail, initial encounter -S91214D Laceration without foreign body of right lesser toe(s) with damage to nail, subsequent encounter -S91214S Laceration without foreign body of right lesser toe(s) with damage to nail, sequela -S91215A Laceration without foreign body of left lesser toe(s) with damage to nail, initial encounter -S91215D Laceration without foreign body of left lesser toe(s) with damage to nail, subsequent encounter -S91215S Laceration without foreign body of left lesser toe(s) with damage to nail, sequela -S91216A Laceration without foreign body of unspecified lesser toe(s) with damage to nail, initial encounter -S91216D Laceration without foreign body of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91216S Laceration without foreign body of unspecified lesser toe(s) with damage to nail, sequela -S91219A Laceration without foreign body of unspecified toe(s) with damage to nail, initial encounter -S91219D Laceration without foreign body of unspecified toe(s) with damage to nail, subsequent encounter -S91219S Laceration without foreign body of unspecified toe(s) with damage to nail, sequela -S91221A Laceration with foreign body of right great toe with damage to nail, initial encounter -S91221D Laceration with foreign body of right great toe with damage to nail, subsequent encounter -S91221S Laceration with foreign body of right great toe with damage to nail, sequela -S91222A Laceration with foreign body of left great toe with damage to nail, initial encounter -S91222D Laceration with foreign body of left great toe with damage to nail, subsequent encounter -S91222S Laceration with foreign body of left great toe with damage to nail, sequela -S91223A Laceration with foreign body of unspecified great toe with damage to nail, initial encounter -S91223D Laceration with foreign body of unspecified great toe with damage to nail, subsequent encounter -S91223S Laceration with foreign body of unspecified great toe with damage to nail, sequela -S91224A Laceration with foreign body of right lesser toe(s) with damage to nail, initial encounter -S91224D Laceration with foreign body of right lesser toe(s) with damage to nail, subsequent encounter -S91224S Laceration with foreign body of right lesser toe(s) with damage to nail, sequela -S91225A Laceration with foreign body of left lesser toe(s) with damage to nail, initial encounter -S91225D Laceration with foreign body of left lesser toe(s) with damage to nail, subsequent encounter -S91225S Laceration with foreign body of left lesser toe(s) with damage to nail, sequela -S91226A Laceration with foreign body of unspecified lesser toe(s) with damage to nail, initial encounter -S91226D Laceration with foreign body of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91226S Laceration with foreign body of unspecified lesser toe(s) with damage to nail, sequela -S91229A Laceration with foreign body of unspecified toe(s) with damage to nail, initial encounter -S91229D Laceration with foreign body of unspecified toe(s) with damage to nail, subsequent encounter -S91229S Laceration with foreign body of unspecified toe(s) with damage to nail, sequela -S91231A Puncture wound without foreign body of right great toe with damage to nail, initial encounter -S91231D Puncture wound without foreign body of right great toe with damage to nail, subsequent encounter -S91231S Puncture wound without foreign body of right great toe with damage to nail, sequela -S91232A Puncture wound without foreign body of left great toe with damage to nail, initial encounter -S91232D Puncture wound without foreign body of left great toe with damage to nail, subsequent encounter -S91232S Puncture wound without foreign body of left great toe with damage to nail, sequela -S91233A Puncture wound without foreign body of unspecified great toe with damage to nail, initial encounter -S91233D Puncture wound without foreign body of unspecified great toe with damage to nail, subsequent encounter -S91233S Puncture wound without foreign body of unspecified great toe with damage to nail, sequela -S91234A Puncture wound without foreign body of right lesser toe(s) with damage to nail, initial encounter -S91234D Puncture wound without foreign body of right lesser toe(s) with damage to nail, subsequent encounter -S91234S Puncture wound without foreign body of right lesser toe(s) with damage to nail, sequela -S91235A Puncture wound without foreign body of left lesser toe(s) with damage to nail, initial encounter -S91235D Puncture wound without foreign body of left lesser toe(s) with damage to nail, subsequent encounter -S91235S Puncture wound without foreign body of left lesser toe(s) with damage to nail, sequela -S91236A Puncture wound without foreign body of unspecified lesser toe(s) with damage to nail, initial encounter -S91236D Puncture wound without foreign body of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91236S Puncture wound without foreign body of unspecified lesser toe(s) with damage to nail, sequela -S91239A Puncture wound without foreign body of unspecified toe(s) with damage to nail, initial encounter -S91239D Puncture wound without foreign body of unspecified toe(s) with damage to nail, subsequent encounter -S91239S Puncture wound without foreign body of unspecified toe(s) with damage to nail, sequela -S91241A Puncture wound with foreign body of right great toe with damage to nail, initial encounter -S91241D Puncture wound with foreign body of right great toe with damage to nail, subsequent encounter -S91241S Puncture wound with foreign body of right great toe with damage to nail, sequela -S91242A Puncture wound with foreign body of left great toe with damage to nail, initial encounter -S91242D Puncture wound with foreign body of left great toe with damage to nail, subsequent encounter -S91242S Puncture wound with foreign body of left great toe with damage to nail, sequela -S91243A Puncture wound with foreign body of unspecified great toe with damage to nail, initial encounter -S91243D Puncture wound with foreign body of unspecified great toe with damage to nail, subsequent encounter -S91243S Puncture wound with foreign body of unspecified great toe with damage to nail, sequela -S91244A Puncture wound with foreign body of right lesser toe(s) with damage to nail, initial encounter -S91244D Puncture wound with foreign body of right lesser toe(s) with damage to nail, subsequent encounter -S91244S Puncture wound with foreign body of right lesser toe(s) with damage to nail, sequela -S91245A Puncture wound with foreign body of left lesser toe(s) with damage to nail, initial encounter -S91245D Puncture wound with foreign body of left lesser toe(s) with damage to nail, subsequent encounter -S91245S Puncture wound with foreign body of left lesser toe(s) with damage to nail, sequela -S91246A Puncture wound with foreign body of unspecified lesser toe(s) with damage to nail, initial encounter -S91246D Puncture wound with foreign body of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91246S Puncture wound with foreign body of unspecified lesser toe(s) with damage to nail, sequela -S91249A Puncture wound with foreign body of unspecified toe(s) with damage to nail, initial encounter -S91249D Puncture wound with foreign body of unspecified toe(s) with damage to nail, subsequent encounter -S91249S Puncture wound with foreign body of unspecified toe(s) with damage to nail, sequela -S91251A Open bite of right great toe with damage to nail, initial encounter -S91251D Open bite of right great toe with damage to nail, subsequent encounter -S91251S Open bite of right great toe with damage to nail, sequela -S91252A Open bite of left great toe with damage to nail, initial encounter -S91252D Open bite of left great toe with damage to nail, subsequent encounter -S91252S Open bite of left great toe with damage to nail, sequela -S91253A Open bite of unspecified great toe with damage to nail, initial encounter -S91253D Open bite of unspecified great toe with damage to nail, subsequent encounter -S91253S Open bite of unspecified great toe with damage to nail, sequela -S91254A Open bite of right lesser toe(s) with damage to nail, initial encounter -S91254D Open bite of right lesser toe(s) with damage to nail, subsequent encounter -S91254S Open bite of right lesser toe(s) with damage to nail, sequela -S91255A Open bite of left lesser toe(s) with damage to nail, initial encounter -S91255D Open bite of left lesser toe(s) with damage to nail, subsequent encounter -S91255S Open bite of left lesser toe(s) with damage to nail, sequela -S91256A Open bite of unspecified lesser toe(s) with damage to nail, initial encounter -S91256D Open bite of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91256S Open bite of unspecified lesser toe(s) with damage to nail, sequela -S91259A Open bite of unspecified toe(s) with damage to nail, initial encounter -S91259D Open bite of unspecified toe(s) with damage to nail, subsequent encounter -S91259S Open bite of unspecified toe(s) with damage to nail, sequela -S91301A Unspecified open wound, right foot, initial encounter -S91301D Unspecified open wound, right foot, subsequent encounter -S91301S Unspecified open wound, right foot, sequela -S91302A Unspecified open wound, left foot, initial encounter -S91302D Unspecified open wound, left foot, subsequent encounter -S91302S Unspecified open wound, left foot, sequela -S91309A Unspecified open wound, unspecified foot, initial encounter -S91309D Unspecified open wound, unspecified foot, subsequent encounter -S91309S Unspecified open wound, unspecified foot, sequela -S91311A Laceration without foreign body, right foot, initial encounter -S91311D Laceration without foreign body, right foot, subsequent encounter -S91311S Laceration without foreign body, right foot, sequela -S91312A Laceration without foreign body, left foot, initial encounter -S91312D Laceration without foreign body, left foot, subsequent encounter -S91312S Laceration without foreign body, left foot, sequela -S91319A Laceration without foreign body, unspecified foot, initial encounter -S91319D Laceration without foreign body, unspecified foot, subsequent encounter -S91319S Laceration without foreign body, unspecified foot, sequela -S91321A Laceration with foreign body, right foot, initial encounter -S91321D Laceration with foreign body, right foot, subsequent encounter -S91321S Laceration with foreign body, right foot, sequela -S91322A Laceration with foreign body, left foot, initial encounter -S91322D Laceration with foreign body, left foot, subsequent encounter -S91322S Laceration with foreign body, left foot, sequela -S91329A Laceration with foreign body, unspecified foot, initial encounter -S91329D Laceration with foreign body, unspecified foot, subsequent encounter -S91329S Laceration with foreign body, unspecified foot, sequela -S91331A Puncture wound without foreign body, right foot, initial encounter -S91331D Puncture wound without foreign body, right foot, subsequent encounter -S91331S Puncture wound without foreign body, right foot, sequela -S91332A Puncture wound without foreign body, left foot, initial encounter -S91332D Puncture wound without foreign body, left foot, subsequent encounter -S91332S Puncture wound without foreign body, left foot, sequela -S91339A Puncture wound without foreign body, unspecified foot, initial encounter -S91339D Puncture wound without foreign body, unspecified foot, subsequent encounter -S91339S Puncture wound without foreign body, unspecified foot, sequela -S91341A Puncture wound with foreign body, right foot, initial encounter -S91341D Puncture wound with foreign body, right foot, subsequent encounter -S91341S Puncture wound with foreign body, right foot, sequela -S91342A Puncture wound with foreign body, left foot, initial encounter -S91342D Puncture wound with foreign body, left foot, subsequent encounter -S91342S Puncture wound with foreign body, left foot, sequela -S91349A Puncture wound with foreign body, unspecified foot, initial encounter -S91349D Puncture wound with foreign body, unspecified foot, subsequent encounter -S91349S Puncture wound with foreign body, unspecified foot, sequela -S91351A Open bite, right foot, initial encounter -S91351D Open bite, right foot, subsequent encounter -S91351S Open bite, right foot, sequela -S91352A Open bite, left foot, initial encounter -S91352D Open bite, left foot, subsequent encounter -S91352S Open bite, left foot, sequela -S91359A Open bite, unspecified foot, initial encounter -S91359D Open bite, unspecified foot, subsequent encounter -S91359S Open bite, unspecified foot, sequela -S92001A Unspecified fracture of right calcaneus, initial encounter for closed fracture -S92001B Unspecified fracture of right calcaneus, initial encounter for open fracture -S92001D Unspecified fracture of right calcaneus, subsequent encounter for fracture with routine healing -S92001G Unspecified fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S92001K Unspecified fracture of right calcaneus, subsequent encounter for fracture with nonunion -S92001P Unspecified fracture of right calcaneus, subsequent encounter for fracture with malunion -S92001S Unspecified fracture of right calcaneus, sequela -S92002A Unspecified fracture of left calcaneus, initial encounter for closed fracture -S92002B Unspecified fracture of left calcaneus, initial encounter for open fracture -S92002D Unspecified fracture of left calcaneus, subsequent encounter for fracture with routine healing -S92002G Unspecified fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S92002K Unspecified fracture of left calcaneus, subsequent encounter for fracture with nonunion -S92002P Unspecified fracture of left calcaneus, subsequent encounter for fracture with malunion -S92002S Unspecified fracture of left calcaneus, sequela -S92009A Unspecified fracture of unspecified calcaneus, initial encounter for closed fracture -S92009B Unspecified fracture of unspecified calcaneus, initial encounter for open fracture -S92009D Unspecified fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92009G Unspecified fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92009K Unspecified fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92009P Unspecified fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S92009S Unspecified fracture of unspecified calcaneus, sequela -S92011A Displaced fracture of body of right calcaneus, initial encounter for closed fracture -S92011B Displaced fracture of body of right calcaneus, initial encounter for open fracture -S92011D Displaced fracture of body of right calcaneus, subsequent encounter for fracture with routine healing -S92011G Displaced fracture of body of right calcaneus, subsequent encounter for fracture with delayed healing -S92011K Displaced fracture of body of right calcaneus, subsequent encounter for fracture with nonunion -S92011P Displaced fracture of body of right calcaneus, subsequent encounter for fracture with malunion -S92011S Displaced fracture of body of right calcaneus, sequela -S92012A Displaced fracture of body of left calcaneus, initial encounter for closed fracture -S92012B Displaced fracture of body of left calcaneus, initial encounter for open fracture -S92012D Displaced fracture of body of left calcaneus, subsequent encounter for fracture with routine healing -S92012G Displaced fracture of body of left calcaneus, subsequent encounter for fracture with delayed healing -S92012K Displaced fracture of body of left calcaneus, subsequent encounter for fracture with nonunion -S92012P Displaced fracture of body of left calcaneus, subsequent encounter for fracture with malunion -S92012S Displaced fracture of body of left calcaneus, sequela -S92013A Displaced fracture of body of unspecified calcaneus, initial encounter for closed fracture -S92013B Displaced fracture of body of unspecified calcaneus, initial encounter for open fracture -S92013D Displaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92013G Displaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92013K Displaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92013P Displaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with malunion -S92013S Displaced fracture of body of unspecified calcaneus, sequela -S92014A Nondisplaced fracture of body of right calcaneus, initial encounter for closed fracture -S92014B Nondisplaced fracture of body of right calcaneus, initial encounter for open fracture -S92014D Nondisplaced fracture of body of right calcaneus, subsequent encounter for fracture with routine healing -S92014G Nondisplaced fracture of body of right calcaneus, subsequent encounter for fracture with delayed healing -S92014K Nondisplaced fracture of body of right calcaneus, subsequent encounter for fracture with nonunion -S92014P Nondisplaced fracture of body of right calcaneus, subsequent encounter for fracture with malunion -S92014S Nondisplaced fracture of body of right calcaneus, sequela -S92015A Nondisplaced fracture of body of left calcaneus, initial encounter for closed fracture -S92015B Nondisplaced fracture of body of left calcaneus, initial encounter for open fracture -S92015D Nondisplaced fracture of body of left calcaneus, subsequent encounter for fracture with routine healing -S92015G Nondisplaced fracture of body of left calcaneus, subsequent encounter for fracture with delayed healing -S92015K Nondisplaced fracture of body of left calcaneus, subsequent encounter for fracture with nonunion -S92015P Nondisplaced fracture of body of left calcaneus, subsequent encounter for fracture with malunion -S92015S Nondisplaced fracture of body of left calcaneus, sequela -S92016A Nondisplaced fracture of body of unspecified calcaneus, initial encounter for closed fracture -S92016B Nondisplaced fracture of body of unspecified calcaneus, initial encounter for open fracture -S92016D Nondisplaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92016G Nondisplaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92016K Nondisplaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92016P Nondisplaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with malunion -S92016S Nondisplaced fracture of body of unspecified calcaneus, sequela -S92021A Displaced fracture of anterior process of right calcaneus, initial encounter for closed fracture -S92021B Displaced fracture of anterior process of right calcaneus, initial encounter for open fracture -S92021D Displaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with routine healing -S92021G Displaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with delayed healing -S92021K Displaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with nonunion -S92021P Displaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with malunion -S92021S Displaced fracture of anterior process of right calcaneus, sequela -S92022A Displaced fracture of anterior process of left calcaneus, initial encounter for closed fracture -S92022B Displaced fracture of anterior process of left calcaneus, initial encounter for open fracture -S92022D Displaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with routine healing -S92022G Displaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with delayed healing -S92022K Displaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with nonunion -S92022P Displaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with malunion -S92022S Displaced fracture of anterior process of left calcaneus, sequela -S92023A Displaced fracture of anterior process of unspecified calcaneus, initial encounter for closed fracture -S92023B Displaced fracture of anterior process of unspecified calcaneus, initial encounter for open fracture -S92023D Displaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92023G Displaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92023K Displaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92023P Displaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with malunion -S92023S Displaced fracture of anterior process of unspecified calcaneus, sequela -S92024A Nondisplaced fracture of anterior process of right calcaneus, initial encounter for closed fracture -S92024B Nondisplaced fracture of anterior process of right calcaneus, initial encounter for open fracture -S92024D Nondisplaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with routine healing -S92024G Nondisplaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with delayed healing -S92024K Nondisplaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with nonunion -S92024P Nondisplaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with malunion -S92024S Nondisplaced fracture of anterior process of right calcaneus, sequela -S92025A Nondisplaced fracture of anterior process of left calcaneus, initial encounter for closed fracture -S92025B Nondisplaced fracture of anterior process of left calcaneus, initial encounter for open fracture -S92025D Nondisplaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with routine healing -S92025G Nondisplaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with delayed healing -S92025K Nondisplaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with nonunion -S92025P Nondisplaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with malunion -S92025S Nondisplaced fracture of anterior process of left calcaneus, sequela -S92026A Nondisplaced fracture of anterior process of unspecified calcaneus, initial encounter for closed fracture -S92026B Nondisplaced fracture of anterior process of unspecified calcaneus, initial encounter for open fracture -S92026D Nondisplaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92026G Nondisplaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92026K Nondisplaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92026P Nondisplaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with malunion -S92026S Nondisplaced fracture of anterior process of unspecified calcaneus, sequela -S92031A Displaced avulsion fracture of tuberosity of right calcaneus, initial encounter for closed fracture -S92031B Displaced avulsion fracture of tuberosity of right calcaneus, initial encounter for open fracture -S92031D Displaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with routine healing -S92031G Displaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with delayed healing -S92031K Displaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with nonunion -S92031P Displaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with malunion -S92031S Displaced avulsion fracture of tuberosity of right calcaneus, sequela -S92032A Displaced avulsion fracture of tuberosity of left calcaneus, initial encounter for closed fracture -S92032B Displaced avulsion fracture of tuberosity of left calcaneus, initial encounter for open fracture -S92032D Displaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with routine healing -S92032G Displaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with delayed healing -S92032K Displaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with nonunion -S92032P Displaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with malunion -S92032S Displaced avulsion fracture of tuberosity of left calcaneus, sequela -S92033A Displaced avulsion fracture of tuberosity of unspecified calcaneus, initial encounter for closed fracture -S92033B Displaced avulsion fracture of tuberosity of unspecified calcaneus, initial encounter for open fracture -S92033D Displaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92033G Displaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92033K Displaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92033P Displaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with malunion -S92033S Displaced avulsion fracture of tuberosity of unspecified calcaneus, sequela -S92034A Nondisplaced avulsion fracture of tuberosity of right calcaneus, initial encounter for closed fracture -S92034B Nondisplaced avulsion fracture of tuberosity of right calcaneus, initial encounter for open fracture -S92034D Nondisplaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with routine healing -S92034G Nondisplaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with delayed healing -S92034K Nondisplaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with nonunion -S92034P Nondisplaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with malunion -S92034S Nondisplaced avulsion fracture of tuberosity of right calcaneus, sequela -S92035A Nondisplaced avulsion fracture of tuberosity of left calcaneus, initial encounter for closed fracture -S92035B Nondisplaced avulsion fracture of tuberosity of left calcaneus, initial encounter for open fracture -S92035D Nondisplaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with routine healing -S92035G Nondisplaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with delayed healing -S92035K Nondisplaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with nonunion -S92035P Nondisplaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with malunion -S92035S Nondisplaced avulsion fracture of tuberosity of left calcaneus, sequela -S92036A Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, initial encounter for closed fracture -S92036B Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, initial encounter for open fracture -S92036D Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92036G Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92036K Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92036P Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with malunion -S92036S Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, sequela -S92041A Displaced other fracture of tuberosity of right calcaneus, initial encounter for closed fracture -S92041B Displaced other fracture of tuberosity of right calcaneus, initial encounter for open fracture -S92041D Displaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with routine healing -S92041G Displaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with delayed healing -S92041K Displaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with nonunion -S92041P Displaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with malunion -S92041S Displaced other fracture of tuberosity of right calcaneus, sequela -S92042A Displaced other fracture of tuberosity of left calcaneus, initial encounter for closed fracture -S92042B Displaced other fracture of tuberosity of left calcaneus, initial encounter for open fracture -S92042D Displaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with routine healing -S92042G Displaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with delayed healing -S92042K Displaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with nonunion -S92042P Displaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with malunion -S92042S Displaced other fracture of tuberosity of left calcaneus, sequela -S92043A Displaced other fracture of tuberosity of unspecified calcaneus, initial encounter for closed fracture -S92043B Displaced other fracture of tuberosity of unspecified calcaneus, initial encounter for open fracture -S92043D Displaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92043G Displaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92043K Displaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92043P Displaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with malunion -S92043S Displaced other fracture of tuberosity of unspecified calcaneus, sequela -S92044A Nondisplaced other fracture of tuberosity of right calcaneus, initial encounter for closed fracture -S92044B Nondisplaced other fracture of tuberosity of right calcaneus, initial encounter for open fracture -S92044D Nondisplaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with routine healing -S92044G Nondisplaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with delayed healing -S92044K Nondisplaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with nonunion -S92044P Nondisplaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with malunion -S92044S Nondisplaced other fracture of tuberosity of right calcaneus, sequela -S92045A Nondisplaced other fracture of tuberosity of left calcaneus, initial encounter for closed fracture -S92045B Nondisplaced other fracture of tuberosity of left calcaneus, initial encounter for open fracture -S92045D Nondisplaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with routine healing -S92045G Nondisplaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with delayed healing -S92045K Nondisplaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with nonunion -S92045P Nondisplaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with malunion -S92045S Nondisplaced other fracture of tuberosity of left calcaneus, sequela -S92046A Nondisplaced other fracture of tuberosity of unspecified calcaneus, initial encounter for closed fracture -S92046B Nondisplaced other fracture of tuberosity of unspecified calcaneus, initial encounter for open fracture -S92046D Nondisplaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92046G Nondisplaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92046K Nondisplaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92046P Nondisplaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with malunion -S92046S Nondisplaced other fracture of tuberosity of unspecified calcaneus, sequela -S92051A Displaced other extraarticular fracture of right calcaneus, initial encounter for closed fracture -S92051B Displaced other extraarticular fracture of right calcaneus, initial encounter for open fracture -S92051D Displaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with routine healing -S92051G Displaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S92051K Displaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with nonunion -S92051P Displaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with malunion -S92051S Displaced other extraarticular fracture of right calcaneus, sequela -S92052A Displaced other extraarticular fracture of left calcaneus, initial encounter for closed fracture -S92052B Displaced other extraarticular fracture of left calcaneus, initial encounter for open fracture -S92052D Displaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with routine healing -S92052G Displaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S92052K Displaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with nonunion -S92052P Displaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with malunion -S92052S Displaced other extraarticular fracture of left calcaneus, sequela -S92053A Displaced other extraarticular fracture of unspecified calcaneus, initial encounter for closed fracture -S92053B Displaced other extraarticular fracture of unspecified calcaneus, initial encounter for open fracture -S92053D Displaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92053G Displaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92053K Displaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92053P Displaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S92053S Displaced other extraarticular fracture of unspecified calcaneus, sequela -S92054A Nondisplaced other extraarticular fracture of right calcaneus, initial encounter for closed fracture -S92054B Nondisplaced other extraarticular fracture of right calcaneus, initial encounter for open fracture -S92054D Nondisplaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with routine healing -S92054G Nondisplaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S92054K Nondisplaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with nonunion -S92054P Nondisplaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with malunion -S92054S Nondisplaced other extraarticular fracture of right calcaneus, sequela -S92055A Nondisplaced other extraarticular fracture of left calcaneus, initial encounter for closed fracture -S92055B Nondisplaced other extraarticular fracture of left calcaneus, initial encounter for open fracture -S92055D Nondisplaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with routine healing -S92055G Nondisplaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S92055K Nondisplaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with nonunion -S92055P Nondisplaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with malunion -S92055S Nondisplaced other extraarticular fracture of left calcaneus, sequela -S92056A Nondisplaced other extraarticular fracture of unspecified calcaneus, initial encounter for closed fracture -S92056B Nondisplaced other extraarticular fracture of unspecified calcaneus, initial encounter for open fracture -S92056D Nondisplaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92056G Nondisplaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92056K Nondisplaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92056P Nondisplaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S92056S Nondisplaced other extraarticular fracture of unspecified calcaneus, sequela -S92061A Displaced intraarticular fracture of right calcaneus, initial encounter for closed fracture -S92061B Displaced intraarticular fracture of right calcaneus, initial encounter for open fracture -S92061D Displaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with routine healing -S92061G Displaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S92061K Displaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with nonunion -S92061P Displaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with malunion -S92061S Displaced intraarticular fracture of right calcaneus, sequela -S92062A Displaced intraarticular fracture of left calcaneus, initial encounter for closed fracture -S92062B Displaced intraarticular fracture of left calcaneus, initial encounter for open fracture -S92062D Displaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with routine healing -S92062G Displaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S92062K Displaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with nonunion -S92062P Displaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with malunion -S92062S Displaced intraarticular fracture of left calcaneus, sequela -S92063A Displaced intraarticular fracture of unspecified calcaneus, initial encounter for closed fracture -S92063B Displaced intraarticular fracture of unspecified calcaneus, initial encounter for open fracture -S92063D Displaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92063G Displaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92063K Displaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92063P Displaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S92063S Displaced intraarticular fracture of unspecified calcaneus, sequela -S92064A Nondisplaced intraarticular fracture of right calcaneus, initial encounter for closed fracture -S92064B Nondisplaced intraarticular fracture of right calcaneus, initial encounter for open fracture -S92064D Nondisplaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with routine healing -S92064G Nondisplaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S92064K Nondisplaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with nonunion -S92064P Nondisplaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with malunion -S92064S Nondisplaced intraarticular fracture of right calcaneus, sequela -S92065A Nondisplaced intraarticular fracture of left calcaneus, initial encounter for closed fracture -S92065B Nondisplaced intraarticular fracture of left calcaneus, initial encounter for open fracture -S92065D Nondisplaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with routine healing -S92065G Nondisplaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S92065K Nondisplaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with nonunion -S92065P Nondisplaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with malunion -S92065S Nondisplaced intraarticular fracture of left calcaneus, sequela -S92066A Nondisplaced intraarticular fracture of unspecified calcaneus, initial encounter for closed fracture -S92066B Nondisplaced intraarticular fracture of unspecified calcaneus, initial encounter for open fracture -S92066D Nondisplaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92066G Nondisplaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92066K Nondisplaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92066P Nondisplaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S92066S Nondisplaced intraarticular fracture of unspecified calcaneus, sequela -S92101A Unspecified fracture of right talus, initial encounter for closed fracture -S92101B Unspecified fracture of right talus, initial encounter for open fracture -S92101D Unspecified fracture of right talus, subsequent encounter for fracture with routine healing -S92101G Unspecified fracture of right talus, subsequent encounter for fracture with delayed healing -S92101K Unspecified fracture of right talus, subsequent encounter for fracture with nonunion -S92101P Unspecified fracture of right talus, subsequent encounter for fracture with malunion -S92101S Unspecified fracture of right talus, sequela -S92102A Unspecified fracture of left talus, initial encounter for closed fracture -S92102B Unspecified fracture of left talus, initial encounter for open fracture -S92102D Unspecified fracture of left talus, subsequent encounter for fracture with routine healing -S92102G Unspecified fracture of left talus, subsequent encounter for fracture with delayed healing -S92102K Unspecified fracture of left talus, subsequent encounter for fracture with nonunion -S92102P Unspecified fracture of left talus, subsequent encounter for fracture with malunion -S92102S Unspecified fracture of left talus, sequela -S92109A Unspecified fracture of unspecified talus, initial encounter for closed fracture -S92109B Unspecified fracture of unspecified talus, initial encounter for open fracture -S92109D Unspecified fracture of unspecified talus, subsequent encounter for fracture with routine healing -S92109G Unspecified fracture of unspecified talus, subsequent encounter for fracture with delayed healing -S92109K Unspecified fracture of unspecified talus, subsequent encounter for fracture with nonunion -S92109P Unspecified fracture of unspecified talus, subsequent encounter for fracture with malunion -S92109S Unspecified fracture of unspecified talus, sequela -S92111A Displaced fracture of neck of right talus, initial encounter for closed fracture -S92111B Displaced fracture of neck of right talus, initial encounter for open fracture -S92111D Displaced fracture of neck of right talus, subsequent encounter for fracture with routine healing -S92111G Displaced fracture of neck of right talus, subsequent encounter for fracture with delayed healing -S92111K Displaced fracture of neck of right talus, subsequent encounter for fracture with nonunion -S92111P Displaced fracture of neck of right talus, subsequent encounter for fracture with malunion -S92111S Displaced fracture of neck of right talus, sequela -S92112A Displaced fracture of neck of left talus, initial encounter for closed fracture -S92112B Displaced fracture of neck of left talus, initial encounter for open fracture -S92112D Displaced fracture of neck of left talus, subsequent encounter for fracture with routine healing -S92112G Displaced fracture of neck of left talus, subsequent encounter for fracture with delayed healing -S92112K Displaced fracture of neck of left talus, subsequent encounter for fracture with nonunion -S92112P Displaced fracture of neck of left talus, subsequent encounter for fracture with malunion -S92112S Displaced fracture of neck of left talus, sequela -S92113A Displaced fracture of neck of unspecified talus, initial encounter for closed fracture -S92113B Displaced fracture of neck of unspecified talus, initial encounter for open fracture -S92113D Displaced fracture of neck of unspecified talus, subsequent encounter for fracture with routine healing -S92113G Displaced fracture of neck of unspecified talus, subsequent encounter for fracture with delayed healing -S92113K Displaced fracture of neck of unspecified talus, subsequent encounter for fracture with nonunion -S92113P Displaced fracture of neck of unspecified talus, subsequent encounter for fracture with malunion -S92113S Displaced fracture of neck of unspecified talus, sequela -S92114A Nondisplaced fracture of neck of right talus, initial encounter for closed fracture -S92114B Nondisplaced fracture of neck of right talus, initial encounter for open fracture -S92114D Nondisplaced fracture of neck of right talus, subsequent encounter for fracture with routine healing -S92114G Nondisplaced fracture of neck of right talus, subsequent encounter for fracture with delayed healing -S92114K Nondisplaced fracture of neck of right talus, subsequent encounter for fracture with nonunion -S92114P Nondisplaced fracture of neck of right talus, subsequent encounter for fracture with malunion -S92114S Nondisplaced fracture of neck of right talus, sequela -S92115A Nondisplaced fracture of neck of left talus, initial encounter for closed fracture -S92115B Nondisplaced fracture of neck of left talus, initial encounter for open fracture -S92115D Nondisplaced fracture of neck of left talus, subsequent encounter for fracture with routine healing -S92115G Nondisplaced fracture of neck of left talus, subsequent encounter for fracture with delayed healing -S92115K Nondisplaced fracture of neck of left talus, subsequent encounter for fracture with nonunion -S92115P Nondisplaced fracture of neck of left talus, subsequent encounter for fracture with malunion -S92115S Nondisplaced fracture of neck of left talus, sequela -S92116A Nondisplaced fracture of neck of unspecified talus, initial encounter for closed fracture -S92116B Nondisplaced fracture of neck of unspecified talus, initial encounter for open fracture -S92116D Nondisplaced fracture of neck of unspecified talus, subsequent encounter for fracture with routine healing -S92116G Nondisplaced fracture of neck of unspecified talus, subsequent encounter for fracture with delayed healing -S92116K Nondisplaced fracture of neck of unspecified talus, subsequent encounter for fracture with nonunion -S92116P Nondisplaced fracture of neck of unspecified talus, subsequent encounter for fracture with malunion -S92116S Nondisplaced fracture of neck of unspecified talus, sequela -S92121A Displaced fracture of body of right talus, initial encounter for closed fracture -S92121B Displaced fracture of body of right talus, initial encounter for open fracture -S92121D Displaced fracture of body of right talus, subsequent encounter for fracture with routine healing -S92121G Displaced fracture of body of right talus, subsequent encounter for fracture with delayed healing -S92121K Displaced fracture of body of right talus, subsequent encounter for fracture with nonunion -S92121P Displaced fracture of body of right talus, subsequent encounter for fracture with malunion -S92121S Displaced fracture of body of right talus, sequela -S92122A Displaced fracture of body of left talus, initial encounter for closed fracture -S92122B Displaced fracture of body of left talus, initial encounter for open fracture -S92122D Displaced fracture of body of left talus, subsequent encounter for fracture with routine healing -S92122G Displaced fracture of body of left talus, subsequent encounter for fracture with delayed healing -S92122K Displaced fracture of body of left talus, subsequent encounter for fracture with nonunion -S92122P Displaced fracture of body of left talus, subsequent encounter for fracture with malunion -S92122S Displaced fracture of body of left talus, sequela -S92123A Displaced fracture of body of unspecified talus, initial encounter for closed fracture -S92123B Displaced fracture of body of unspecified talus, initial encounter for open fracture -S92123D Displaced fracture of body of unspecified talus, subsequent encounter for fracture with routine healing -S92123G Displaced fracture of body of unspecified talus, subsequent encounter for fracture with delayed healing -S92123K Displaced fracture of body of unspecified talus, subsequent encounter for fracture with nonunion -S92123P Displaced fracture of body of unspecified talus, subsequent encounter for fracture with malunion -S92123S Displaced fracture of body of unspecified talus, sequela -S92124A Nondisplaced fracture of body of right talus, initial encounter for closed fracture -S92124B Nondisplaced fracture of body of right talus, initial encounter for open fracture -S92124D Nondisplaced fracture of body of right talus, subsequent encounter for fracture with routine healing -S92124G Nondisplaced fracture of body of right talus, subsequent encounter for fracture with delayed healing -S92124K Nondisplaced fracture of body of right talus, subsequent encounter for fracture with nonunion -S92124P Nondisplaced fracture of body of right talus, subsequent encounter for fracture with malunion -S92124S Nondisplaced fracture of body of right talus, sequela -S92125A Nondisplaced fracture of body of left talus, initial encounter for closed fracture -S92125B Nondisplaced fracture of body of left talus, initial encounter for open fracture -S92125D Nondisplaced fracture of body of left talus, subsequent encounter for fracture with routine healing -S92125G Nondisplaced fracture of body of left talus, subsequent encounter for fracture with delayed healing -S92125K Nondisplaced fracture of body of left talus, subsequent encounter for fracture with nonunion -S92125P Nondisplaced fracture of body of left talus, subsequent encounter for fracture with malunion -S92125S Nondisplaced fracture of body of left talus, sequela -S92126A Nondisplaced fracture of body of unspecified talus, initial encounter for closed fracture -S92126B Nondisplaced fracture of body of unspecified talus, initial encounter for open fracture -S92126D Nondisplaced fracture of body of unspecified talus, subsequent encounter for fracture with routine healing -S92126G Nondisplaced fracture of body of unspecified talus, subsequent encounter for fracture with delayed healing -S92126K Nondisplaced fracture of body of unspecified talus, subsequent encounter for fracture with nonunion -S92126P Nondisplaced fracture of body of unspecified talus, subsequent encounter for fracture with malunion -S92126S Nondisplaced fracture of body of unspecified talus, sequela -S92131A Displaced fracture of posterior process of right talus, initial encounter for closed fracture -S92131B Displaced fracture of posterior process of right talus, initial encounter for open fracture -S92131D Displaced fracture of posterior process of right talus, subsequent encounter for fracture with routine healing -S92131G Displaced fracture of posterior process of right talus, subsequent encounter for fracture with delayed healing -S92131K Displaced fracture of posterior process of right talus, subsequent encounter for fracture with nonunion -S92131P Displaced fracture of posterior process of right talus, subsequent encounter for fracture with malunion -S92131S Displaced fracture of posterior process of right talus, sequela -S92132A Displaced fracture of posterior process of left talus, initial encounter for closed fracture -S92132B Displaced fracture of posterior process of left talus, initial encounter for open fracture -S92132D Displaced fracture of posterior process of left talus, subsequent encounter for fracture with routine healing -S92132G Displaced fracture of posterior process of left talus, subsequent encounter for fracture with delayed healing -S92132K Displaced fracture of posterior process of left talus, subsequent encounter for fracture with nonunion -S92132P Displaced fracture of posterior process of left talus, subsequent encounter for fracture with malunion -S92132S Displaced fracture of posterior process of left talus, sequela -S92133A Displaced fracture of posterior process of unspecified talus, initial encounter for closed fracture -S92133B Displaced fracture of posterior process of unspecified talus, initial encounter for open fracture -S92133D Displaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with routine healing -S92133G Displaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with delayed healing -S92133K Displaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with nonunion -S92133P Displaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with malunion -S92133S Displaced fracture of posterior process of unspecified talus, sequela -S92134A Nondisplaced fracture of posterior process of right talus, initial encounter for closed fracture -S92134B Nondisplaced fracture of posterior process of right talus, initial encounter for open fracture -S92134D Nondisplaced fracture of posterior process of right talus, subsequent encounter for fracture with routine healing -S92134G Nondisplaced fracture of posterior process of right talus, subsequent encounter for fracture with delayed healing -S92134K Nondisplaced fracture of posterior process of right talus, subsequent encounter for fracture with nonunion -S92134P Nondisplaced fracture of posterior process of right talus, subsequent encounter for fracture with malunion -S92134S Nondisplaced fracture of posterior process of right talus, sequela -S92135A Nondisplaced fracture of posterior process of left talus, initial encounter for closed fracture -S92135B Nondisplaced fracture of posterior process of left talus, initial encounter for open fracture -S92135D Nondisplaced fracture of posterior process of left talus, subsequent encounter for fracture with routine healing -S92135G Nondisplaced fracture of posterior process of left talus, subsequent encounter for fracture with delayed healing -S92135K Nondisplaced fracture of posterior process of left talus, subsequent encounter for fracture with nonunion -S92135P Nondisplaced fracture of posterior process of left talus, subsequent encounter for fracture with malunion -S92135S Nondisplaced fracture of posterior process of left talus, sequela -S92136A Nondisplaced fracture of posterior process of unspecified talus, initial encounter for closed fracture -S92136B Nondisplaced fracture of posterior process of unspecified talus, initial encounter for open fracture -S92136D Nondisplaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with routine healing -S92136G Nondisplaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with delayed healing -S92136K Nondisplaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with nonunion -S92136P Nondisplaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with malunion -S92136S Nondisplaced fracture of posterior process of unspecified talus, sequela -S92141A Displaced dome fracture of right talus, initial encounter for closed fracture -S92141B Displaced dome fracture of right talus, initial encounter for open fracture -S92141D Displaced dome fracture of right talus, subsequent encounter for fracture with routine healing -S92141G Displaced dome fracture of right talus, subsequent encounter for fracture with delayed healing -S92141K Displaced dome fracture of right talus, subsequent encounter for fracture with nonunion -S92141P Displaced dome fracture of right talus, subsequent encounter for fracture with malunion -S92141S Displaced dome fracture of right talus, sequela -S92142A Displaced dome fracture of left talus, initial encounter for closed fracture -S92142B Displaced dome fracture of left talus, initial encounter for open fracture -S92142D Displaced dome fracture of left talus, subsequent encounter for fracture with routine healing -S92142G Displaced dome fracture of left talus, subsequent encounter for fracture with delayed healing -S92142K Displaced dome fracture of left talus, subsequent encounter for fracture with nonunion -S92142P Displaced dome fracture of left talus, subsequent encounter for fracture with malunion -S92142S Displaced dome fracture of left talus, sequela -S92143A Displaced dome fracture of unspecified talus, initial encounter for closed fracture -S92143B Displaced dome fracture of unspecified talus, initial encounter for open fracture -S92143D Displaced dome fracture of unspecified talus, subsequent encounter for fracture with routine healing -S92143G Displaced dome fracture of unspecified talus, subsequent encounter for fracture with delayed healing -S92143K Displaced dome fracture of unspecified talus, subsequent encounter for fracture with nonunion -S92143P Displaced dome fracture of unspecified talus, subsequent encounter for fracture with malunion -S92143S Displaced dome fracture of unspecified talus, sequela -S92144A Nondisplaced dome fracture of right talus, initial encounter for closed fracture -S92144B Nondisplaced dome fracture of right talus, initial encounter for open fracture -S92144D Nondisplaced dome fracture of right talus, subsequent encounter for fracture with routine healing -S92144G Nondisplaced dome fracture of right talus, subsequent encounter for fracture with delayed healing -S92144K Nondisplaced dome fracture of right talus, subsequent encounter for fracture with nonunion -S92144P Nondisplaced dome fracture of right talus, subsequent encounter for fracture with malunion -S92144S Nondisplaced dome fracture of right talus, sequela -S92145A Nondisplaced dome fracture of left talus, initial encounter for closed fracture -S92145B Nondisplaced dome fracture of left talus, initial encounter for open fracture -S92145D Nondisplaced dome fracture of left talus, subsequent encounter for fracture with routine healing -S92145G Nondisplaced dome fracture of left talus, subsequent encounter for fracture with delayed healing -S92145K Nondisplaced dome fracture of left talus, subsequent encounter for fracture with nonunion -S92145P Nondisplaced dome fracture of left talus, subsequent encounter for fracture with malunion -S92145S Nondisplaced dome fracture of left talus, sequela -S92146A Nondisplaced dome fracture of unspecified talus, initial encounter for closed fracture -S92146B Nondisplaced dome fracture of unspecified talus, initial encounter for open fracture -S92146D Nondisplaced dome fracture of unspecified talus, subsequent encounter for fracture with routine healing -S92146G Nondisplaced dome fracture of unspecified talus, subsequent encounter for fracture with delayed healing -S92146K Nondisplaced dome fracture of unspecified talus, subsequent encounter for fracture with nonunion -S92146P Nondisplaced dome fracture of unspecified talus, subsequent encounter for fracture with malunion -S92146S Nondisplaced dome fracture of unspecified talus, sequela -S92151A Displaced avulsion fracture (chip fracture) of right talus, initial encounter for closed fracture -S92151B Displaced avulsion fracture (chip fracture) of right talus, initial encounter for open fracture -S92151D Displaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with routine healing -S92151G Displaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with delayed healing -S92151K Displaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with nonunion -S92151P Displaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with malunion -S92151S Displaced avulsion fracture (chip fracture) of right talus, sequela -S92152A Displaced avulsion fracture (chip fracture) of left talus, initial encounter for closed fracture -S92152B Displaced avulsion fracture (chip fracture) of left talus, initial encounter for open fracture -S92152D Displaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with routine healing -S92152G Displaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with delayed healing -S92152K Displaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with nonunion -S92152P Displaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with malunion -S92152S Displaced avulsion fracture (chip fracture) of left talus, sequela -S92153A Displaced avulsion fracture (chip fracture) of unspecified talus, initial encounter for closed fracture -S92153B Displaced avulsion fracture (chip fracture) of unspecified talus, initial encounter for open fracture -S92153D Displaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with routine healing -S92153G Displaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with delayed healing -S92153K Displaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with nonunion -S92153P Displaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with malunion -S92153S Displaced avulsion fracture (chip fracture) of unspecified talus, sequela -S92154A Nondisplaced avulsion fracture (chip fracture) of right talus, initial encounter for closed fracture -S92154B Nondisplaced avulsion fracture (chip fracture) of right talus, initial encounter for open fracture -S92154D Nondisplaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with routine healing -S92154G Nondisplaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with delayed healing -S92154K Nondisplaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with nonunion -S92154P Nondisplaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with malunion -S92154S Nondisplaced avulsion fracture (chip fracture) of right talus, sequela -S92155A Nondisplaced avulsion fracture (chip fracture) of left talus, initial encounter for closed fracture -S92155B Nondisplaced avulsion fracture (chip fracture) of left talus, initial encounter for open fracture -S92155D Nondisplaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with routine healing -S92155G Nondisplaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with delayed healing -S92155K Nondisplaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with nonunion -S92155P Nondisplaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with malunion -S92155S Nondisplaced avulsion fracture (chip fracture) of left talus, sequela -S92156A Nondisplaced avulsion fracture (chip fracture) of unspecified talus, initial encounter for closed fracture -S92156B Nondisplaced avulsion fracture (chip fracture) of unspecified talus, initial encounter for open fracture -S92156D Nondisplaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with routine healing -S92156G Nondisplaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with delayed healing -S92156K Nondisplaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with nonunion -S92156P Nondisplaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with malunion -S92156S Nondisplaced avulsion fracture (chip fracture) of unspecified talus, sequela -S92191A Other fracture of right talus, initial encounter for closed fracture -S92191B Other fracture of right talus, initial encounter for open fracture -S92191D Other fracture of right talus, subsequent encounter for fracture with routine healing -S92191G Other fracture of right talus, subsequent encounter for fracture with delayed healing -S92191K Other fracture of right talus, subsequent encounter for fracture with nonunion -S92191P Other fracture of right talus, subsequent encounter for fracture with malunion -S92191S Other fracture of right talus, sequela -S92192A Other fracture of left talus, initial encounter for closed fracture -S92192B Other fracture of left talus, initial encounter for open fracture -S92192D Other fracture of left talus, subsequent encounter for fracture with routine healing -S92192G Other fracture of left talus, subsequent encounter for fracture with delayed healing -S92192K Other fracture of left talus, subsequent encounter for fracture with nonunion -S92192P Other fracture of left talus, subsequent encounter for fracture with malunion -S92192S Other fracture of left talus, sequela -S92199A Other fracture of unspecified talus, initial encounter for closed fracture -S92199B Other fracture of unspecified talus, initial encounter for open fracture -S92199D Other fracture of unspecified talus, subsequent encounter for fracture with routine healing -S92199G Other fracture of unspecified talus, subsequent encounter for fracture with delayed healing -S92199K Other fracture of unspecified talus, subsequent encounter for fracture with nonunion -S92199P Other fracture of unspecified talus, subsequent encounter for fracture with malunion -S92199S Other fracture of unspecified talus, sequela -S92201A Fracture of unspecified tarsal bone(s) of right foot, initial encounter for closed fracture -S92201B Fracture of unspecified tarsal bone(s) of right foot, initial encounter for open fracture -S92201D Fracture of unspecified tarsal bone(s) of right foot, subsequent encounter for fracture with routine healing -S92201G Fracture of unspecified tarsal bone(s) of right foot, subsequent encounter for fracture with delayed healing -S92201K Fracture of unspecified tarsal bone(s) of right foot, subsequent encounter for fracture with nonunion -S92201P Fracture of unspecified tarsal bone(s) of right foot, subsequent encounter for fracture with malunion -S92201S Fracture of unspecified tarsal bone(s) of right foot, sequela -S92202A Fracture of unspecified tarsal bone(s) of left foot, initial encounter for closed fracture -S92202B Fracture of unspecified tarsal bone(s) of left foot, initial encounter for open fracture -S92202D Fracture of unspecified tarsal bone(s) of left foot, subsequent encounter for fracture with routine healing -S92202G Fracture of unspecified tarsal bone(s) of left foot, subsequent encounter for fracture with delayed healing -S92202K Fracture of unspecified tarsal bone(s) of left foot, subsequent encounter for fracture with nonunion -S92202P Fracture of unspecified tarsal bone(s) of left foot, subsequent encounter for fracture with malunion -S92202S Fracture of unspecified tarsal bone(s) of left foot, sequela -S92209A Fracture of unspecified tarsal bone(s) of unspecified foot, initial encounter for closed fracture -S92209B Fracture of unspecified tarsal bone(s) of unspecified foot, initial encounter for open fracture -S92209D Fracture of unspecified tarsal bone(s) of unspecified foot, subsequent encounter for fracture with routine healing -S92209G Fracture of unspecified tarsal bone(s) of unspecified foot, subsequent encounter for fracture with delayed healing -S92209K Fracture of unspecified tarsal bone(s) of unspecified foot, subsequent encounter for fracture with nonunion -S92209P Fracture of unspecified tarsal bone(s) of unspecified foot, subsequent encounter for fracture with malunion -S92209S Fracture of unspecified tarsal bone(s) of unspecified foot, sequela -S92211A Displaced fracture of cuboid bone of right foot, initial encounter for closed fracture -S92211B Displaced fracture of cuboid bone of right foot, initial encounter for open fracture -S92211D Displaced fracture of cuboid bone of right foot, subsequent encounter for fracture with routine healing -S92211G Displaced fracture of cuboid bone of right foot, subsequent encounter for fracture with delayed healing -S92211K Displaced fracture of cuboid bone of right foot, subsequent encounter for fracture with nonunion -S92211P Displaced fracture of cuboid bone of right foot, subsequent encounter for fracture with malunion -S92211S Displaced fracture of cuboid bone of right foot, sequela -S92212A Displaced fracture of cuboid bone of left foot, initial encounter for closed fracture -S92212B Displaced fracture of cuboid bone of left foot, initial encounter for open fracture -S92212D Displaced fracture of cuboid bone of left foot, subsequent encounter for fracture with routine healing -S92212G Displaced fracture of cuboid bone of left foot, subsequent encounter for fracture with delayed healing -S92212K Displaced fracture of cuboid bone of left foot, subsequent encounter for fracture with nonunion -S92212P Displaced fracture of cuboid bone of left foot, subsequent encounter for fracture with malunion -S92212S Displaced fracture of cuboid bone of left foot, sequela -S92213A Displaced fracture of cuboid bone of unspecified foot, initial encounter for closed fracture -S92213B Displaced fracture of cuboid bone of unspecified foot, initial encounter for open fracture -S92213D Displaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with routine healing -S92213G Displaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with delayed healing -S92213K Displaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with nonunion -S92213P Displaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with malunion -S92213S Displaced fracture of cuboid bone of unspecified foot, sequela -S92214A Nondisplaced fracture of cuboid bone of right foot, initial encounter for closed fracture -S92214B Nondisplaced fracture of cuboid bone of right foot, initial encounter for open fracture -S92214D Nondisplaced fracture of cuboid bone of right foot, subsequent encounter for fracture with routine healing -S92214G Nondisplaced fracture of cuboid bone of right foot, subsequent encounter for fracture with delayed healing -S92214K Nondisplaced fracture of cuboid bone of right foot, subsequent encounter for fracture with nonunion -S92214P Nondisplaced fracture of cuboid bone of right foot, subsequent encounter for fracture with malunion -S92214S Nondisplaced fracture of cuboid bone of right foot, sequela -S92215A Nondisplaced fracture of cuboid bone of left foot, initial encounter for closed fracture -S92215B Nondisplaced fracture of cuboid bone of left foot, initial encounter for open fracture -S92215D Nondisplaced fracture of cuboid bone of left foot, subsequent encounter for fracture with routine healing -S92215G Nondisplaced fracture of cuboid bone of left foot, subsequent encounter for fracture with delayed healing -S92215K Nondisplaced fracture of cuboid bone of left foot, subsequent encounter for fracture with nonunion -S92215P Nondisplaced fracture of cuboid bone of left foot, subsequent encounter for fracture with malunion -S92215S Nondisplaced fracture of cuboid bone of left foot, sequela -S92216A Nondisplaced fracture of cuboid bone of unspecified foot, initial encounter for closed fracture -S92216B Nondisplaced fracture of cuboid bone of unspecified foot, initial encounter for open fracture -S92216D Nondisplaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with routine healing -S92216G Nondisplaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with delayed healing -S92216K Nondisplaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with nonunion -S92216P Nondisplaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with malunion -S92216S Nondisplaced fracture of cuboid bone of unspecified foot, sequela -S92221A Displaced fracture of lateral cuneiform of right foot, initial encounter for closed fracture -S92221B Displaced fracture of lateral cuneiform of right foot, initial encounter for open fracture -S92221D Displaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with routine healing -S92221G Displaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92221K Displaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with nonunion -S92221P Displaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with malunion -S92221S Displaced fracture of lateral cuneiform of right foot, sequela -S92222A Displaced fracture of lateral cuneiform of left foot, initial encounter for closed fracture -S92222B Displaced fracture of lateral cuneiform of left foot, initial encounter for open fracture -S92222D Displaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with routine healing -S92222G Displaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92222K Displaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with nonunion -S92222P Displaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with malunion -S92222S Displaced fracture of lateral cuneiform of left foot, sequela -S92223A Displaced fracture of lateral cuneiform of unspecified foot, initial encounter for closed fracture -S92223B Displaced fracture of lateral cuneiform of unspecified foot, initial encounter for open fracture -S92223D Displaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92223G Displaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92223K Displaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92223P Displaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92223S Displaced fracture of lateral cuneiform of unspecified foot, sequela -S92224A Nondisplaced fracture of lateral cuneiform of right foot, initial encounter for closed fracture -S92224B Nondisplaced fracture of lateral cuneiform of right foot, initial encounter for open fracture -S92224D Nondisplaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with routine healing -S92224G Nondisplaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92224K Nondisplaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with nonunion -S92224P Nondisplaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with malunion -S92224S Nondisplaced fracture of lateral cuneiform of right foot, sequela -S92225A Nondisplaced fracture of lateral cuneiform of left foot, initial encounter for closed fracture -S92225B Nondisplaced fracture of lateral cuneiform of left foot, initial encounter for open fracture -S92225D Nondisplaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with routine healing -S92225G Nondisplaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92225K Nondisplaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with nonunion -S92225P Nondisplaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with malunion -S92225S Nondisplaced fracture of lateral cuneiform of left foot, sequela -S92226A Nondisplaced fracture of lateral cuneiform of unspecified foot, initial encounter for closed fracture -S92226B Nondisplaced fracture of lateral cuneiform of unspecified foot, initial encounter for open fracture -S92226D Nondisplaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92226G Nondisplaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92226K Nondisplaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92226P Nondisplaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92226S Nondisplaced fracture of lateral cuneiform of unspecified foot, sequela -S92231A Displaced fracture of intermediate cuneiform of right foot, initial encounter for closed fracture -S92231B Displaced fracture of intermediate cuneiform of right foot, initial encounter for open fracture -S92231D Displaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with routine healing -S92231G Displaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92231K Displaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with nonunion -S92231P Displaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with malunion -S92231S Displaced fracture of intermediate cuneiform of right foot, sequela -S92232A Displaced fracture of intermediate cuneiform of left foot, initial encounter for closed fracture -S92232B Displaced fracture of intermediate cuneiform of left foot, initial encounter for open fracture -S92232D Displaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with routine healing -S92232G Displaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92232K Displaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with nonunion -S92232P Displaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with malunion -S92232S Displaced fracture of intermediate cuneiform of left foot, sequela -S92233A Displaced fracture of intermediate cuneiform of unspecified foot, initial encounter for closed fracture -S92233B Displaced fracture of intermediate cuneiform of unspecified foot, initial encounter for open fracture -S92233D Displaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92233G Displaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92233K Displaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92233P Displaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92233S Displaced fracture of intermediate cuneiform of unspecified foot, sequela -S92234A Nondisplaced fracture of intermediate cuneiform of right foot, initial encounter for closed fracture -S92234B Nondisplaced fracture of intermediate cuneiform of right foot, initial encounter for open fracture -S92234D Nondisplaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with routine healing -S92234G Nondisplaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92234K Nondisplaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with nonunion -S92234P Nondisplaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with malunion -S92234S Nondisplaced fracture of intermediate cuneiform of right foot, sequela -S92235A Nondisplaced fracture of intermediate cuneiform of left foot, initial encounter for closed fracture -S92235B Nondisplaced fracture of intermediate cuneiform of left foot, initial encounter for open fracture -S92235D Nondisplaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with routine healing -S92235G Nondisplaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92235K Nondisplaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with nonunion -S92235P Nondisplaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with malunion -S92235S Nondisplaced fracture of intermediate cuneiform of left foot, sequela -S92236A Nondisplaced fracture of intermediate cuneiform of unspecified foot, initial encounter for closed fracture -S92236B Nondisplaced fracture of intermediate cuneiform of unspecified foot, initial encounter for open fracture -S92236D Nondisplaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92236G Nondisplaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92236K Nondisplaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92236P Nondisplaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92236S Nondisplaced fracture of intermediate cuneiform of unspecified foot, sequela -S92241A Displaced fracture of medial cuneiform of right foot, initial encounter for closed fracture -S92241B Displaced fracture of medial cuneiform of right foot, initial encounter for open fracture -S92241D Displaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with routine healing -S92241G Displaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92241K Displaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with nonunion -S92241P Displaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with malunion -S92241S Displaced fracture of medial cuneiform of right foot, sequela -S92242A Displaced fracture of medial cuneiform of left foot, initial encounter for closed fracture -S92242B Displaced fracture of medial cuneiform of left foot, initial encounter for open fracture -S92242D Displaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with routine healing -S92242G Displaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92242K Displaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with nonunion -S92242P Displaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with malunion -S92242S Displaced fracture of medial cuneiform of left foot, sequela -S92243A Displaced fracture of medial cuneiform of unspecified foot, initial encounter for closed fracture -S92243B Displaced fracture of medial cuneiform of unspecified foot, initial encounter for open fracture -S92243D Displaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92243G Displaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92243K Displaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92243P Displaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92243S Displaced fracture of medial cuneiform of unspecified foot, sequela -S92244A Nondisplaced fracture of medial cuneiform of right foot, initial encounter for closed fracture -S92244B Nondisplaced fracture of medial cuneiform of right foot, initial encounter for open fracture -S92244D Nondisplaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with routine healing -S92244G Nondisplaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92244K Nondisplaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with nonunion -S92244P Nondisplaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with malunion -S92244S Nondisplaced fracture of medial cuneiform of right foot, sequela -S92245A Nondisplaced fracture of medial cuneiform of left foot, initial encounter for closed fracture -S92245B Nondisplaced fracture of medial cuneiform of left foot, initial encounter for open fracture -S92245D Nondisplaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with routine healing -S92245G Nondisplaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92245K Nondisplaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with nonunion -S92245P Nondisplaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with malunion -S92245S Nondisplaced fracture of medial cuneiform of left foot, sequela -S92246A Nondisplaced fracture of medial cuneiform of unspecified foot, initial encounter for closed fracture -S92246B Nondisplaced fracture of medial cuneiform of unspecified foot, initial encounter for open fracture -S92246D Nondisplaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92246G Nondisplaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92246K Nondisplaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92246P Nondisplaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92246S Nondisplaced fracture of medial cuneiform of unspecified foot, sequela -S92251A Displaced fracture of navicular [scaphoid] of right foot, initial encounter for closed fracture -S92251B Displaced fracture of navicular [scaphoid] of right foot, initial encounter for open fracture -S92251D Displaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with routine healing -S92251G Displaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with delayed healing -S92251K Displaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with nonunion -S92251P Displaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with malunion -S92251S Displaced fracture of navicular [scaphoid] of right foot, sequela -S92252A Displaced fracture of navicular [scaphoid] of left foot, initial encounter for closed fracture -S92252B Displaced fracture of navicular [scaphoid] of left foot, initial encounter for open fracture -S92252D Displaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with routine healing -S92252G Displaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with delayed healing -S92252K Displaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with nonunion -S92252P Displaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with malunion -S92252S Displaced fracture of navicular [scaphoid] of left foot, sequela -S92253A Displaced fracture of navicular [scaphoid] of unspecified foot, initial encounter for closed fracture -S92253B Displaced fracture of navicular [scaphoid] of unspecified foot, initial encounter for open fracture -S92253D Displaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with routine healing -S92253G Displaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with delayed healing -S92253K Displaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with nonunion -S92253P Displaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with malunion -S92253S Displaced fracture of navicular [scaphoid] of unspecified foot, sequela -S92254A Nondisplaced fracture of navicular [scaphoid] of right foot, initial encounter for closed fracture -S92254B Nondisplaced fracture of navicular [scaphoid] of right foot, initial encounter for open fracture -S92254D Nondisplaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with routine healing -S92254G Nondisplaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with delayed healing -S92254K Nondisplaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with nonunion -S92254P Nondisplaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with malunion -S92254S Nondisplaced fracture of navicular [scaphoid] of right foot, sequela -S92255A Nondisplaced fracture of navicular [scaphoid] of left foot, initial encounter for closed fracture -S92255B Nondisplaced fracture of navicular [scaphoid] of left foot, initial encounter for open fracture -S92255D Nondisplaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with routine healing -S92255G Nondisplaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with delayed healing -S92255K Nondisplaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with nonunion -S92255P Nondisplaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with malunion -S92255S Nondisplaced fracture of navicular [scaphoid] of left foot, sequela -S92256A Nondisplaced fracture of navicular [scaphoid] of unspecified foot, initial encounter for closed fracture -S92256B Nondisplaced fracture of navicular [scaphoid] of unspecified foot, initial encounter for open fracture -S92256D Nondisplaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with routine healing -S92256G Nondisplaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with delayed healing -S92256K Nondisplaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with nonunion -S92256P Nondisplaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with malunion -S92256S Nondisplaced fracture of navicular [scaphoid] of unspecified foot, sequela -S92301A Fracture of unspecified metatarsal bone(s), right foot, initial encounter for closed fracture -S92301B Fracture of unspecified metatarsal bone(s), right foot, initial encounter for open fracture -S92301D Fracture of unspecified metatarsal bone(s), right foot, subsequent encounter for fracture with routine healing -S92301G Fracture of unspecified metatarsal bone(s), right foot, subsequent encounter for fracture with delayed healing -S92301K Fracture of unspecified metatarsal bone(s), right foot, subsequent encounter for fracture with nonunion -S92301P Fracture of unspecified metatarsal bone(s), right foot, subsequent encounter for fracture with malunion -S92301S Fracture of unspecified metatarsal bone(s), right foot, sequela -S92302A Fracture of unspecified metatarsal bone(s), left foot, initial encounter for closed fracture -S92302B Fracture of unspecified metatarsal bone(s), left foot, initial encounter for open fracture -S92302D Fracture of unspecified metatarsal bone(s), left foot, subsequent encounter for fracture with routine healing -S92302G Fracture of unspecified metatarsal bone(s), left foot, subsequent encounter for fracture with delayed healing -S92302K Fracture of unspecified metatarsal bone(s), left foot, subsequent encounter for fracture with nonunion -S92302P Fracture of unspecified metatarsal bone(s), left foot, subsequent encounter for fracture with malunion -S92302S Fracture of unspecified metatarsal bone(s), left foot, sequela -S92309A Fracture of unspecified metatarsal bone(s), unspecified foot, initial encounter for closed fracture -S92309B Fracture of unspecified metatarsal bone(s), unspecified foot, initial encounter for open fracture -S92309D Fracture of unspecified metatarsal bone(s), unspecified foot, subsequent encounter for fracture with routine healing -S92309G Fracture of unspecified metatarsal bone(s), unspecified foot, subsequent encounter for fracture with delayed healing -S92309K Fracture of unspecified metatarsal bone(s), unspecified foot, subsequent encounter for fracture with nonunion -S92309P Fracture of unspecified metatarsal bone(s), unspecified foot, subsequent encounter for fracture with malunion -S92309S Fracture of unspecified metatarsal bone(s), unspecified foot, sequela -S92311A Displaced fracture of first metatarsal bone, right foot, initial encounter for closed fracture -S92311B Displaced fracture of first metatarsal bone, right foot, initial encounter for open fracture -S92311D Displaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92311G Displaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92311K Displaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92311P Displaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92311S Displaced fracture of first metatarsal bone, right foot, sequela -S92312A Displaced fracture of first metatarsal bone, left foot, initial encounter for closed fracture -S92312B Displaced fracture of first metatarsal bone, left foot, initial encounter for open fracture -S92312D Displaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92312G Displaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92312K Displaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92312P Displaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92312S Displaced fracture of first metatarsal bone, left foot, sequela -S92313A Displaced fracture of first metatarsal bone, unspecified foot, initial encounter for closed fracture -S92313B Displaced fracture of first metatarsal bone, unspecified foot, initial encounter for open fracture -S92313D Displaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92313G Displaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92313K Displaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92313P Displaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92313S Displaced fracture of first metatarsal bone, unspecified foot, sequela -S92314A Nondisplaced fracture of first metatarsal bone, right foot, initial encounter for closed fracture -S92314B Nondisplaced fracture of first metatarsal bone, right foot, initial encounter for open fracture -S92314D Nondisplaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92314G Nondisplaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92314K Nondisplaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92314P Nondisplaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92314S Nondisplaced fracture of first metatarsal bone, right foot, sequela -S92315A Nondisplaced fracture of first metatarsal bone, left foot, initial encounter for closed fracture -S92315B Nondisplaced fracture of first metatarsal bone, left foot, initial encounter for open fracture -S92315D Nondisplaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92315G Nondisplaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92315K Nondisplaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92315P Nondisplaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92315S Nondisplaced fracture of first metatarsal bone, left foot, sequela -S92316A Nondisplaced fracture of first metatarsal bone, unspecified foot, initial encounter for closed fracture -S92316B Nondisplaced fracture of first metatarsal bone, unspecified foot, initial encounter for open fracture -S92316D Nondisplaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92316G Nondisplaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92316K Nondisplaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92316P Nondisplaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92316S Nondisplaced fracture of first metatarsal bone, unspecified foot, sequela -S92321A Displaced fracture of second metatarsal bone, right foot, initial encounter for closed fracture -S92321B Displaced fracture of second metatarsal bone, right foot, initial encounter for open fracture -S92321D Displaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92321G Displaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92321K Displaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92321P Displaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92321S Displaced fracture of second metatarsal bone, right foot, sequela -S92322A Displaced fracture of second metatarsal bone, left foot, initial encounter for closed fracture -S92322B Displaced fracture of second metatarsal bone, left foot, initial encounter for open fracture -S92322D Displaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92322G Displaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92322K Displaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92322P Displaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92322S Displaced fracture of second metatarsal bone, left foot, sequela -S92323A Displaced fracture of second metatarsal bone, unspecified foot, initial encounter for closed fracture -S92323B Displaced fracture of second metatarsal bone, unspecified foot, initial encounter for open fracture -S92323D Displaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92323G Displaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92323K Displaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92323P Displaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92323S Displaced fracture of second metatarsal bone, unspecified foot, sequela -S92324A Nondisplaced fracture of second metatarsal bone, right foot, initial encounter for closed fracture -S92324B Nondisplaced fracture of second metatarsal bone, right foot, initial encounter for open fracture -S92324D Nondisplaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92324G Nondisplaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92324K Nondisplaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92324P Nondisplaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92324S Nondisplaced fracture of second metatarsal bone, right foot, sequela -S92325A Nondisplaced fracture of second metatarsal bone, left foot, initial encounter for closed fracture -S92325B Nondisplaced fracture of second metatarsal bone, left foot, initial encounter for open fracture -S92325D Nondisplaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92325G Nondisplaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92325K Nondisplaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92325P Nondisplaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92325S Nondisplaced fracture of second metatarsal bone, left foot, sequela -S92326A Nondisplaced fracture of second metatarsal bone, unspecified foot, initial encounter for closed fracture -S92326B Nondisplaced fracture of second metatarsal bone, unspecified foot, initial encounter for open fracture -S92326D Nondisplaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92326G Nondisplaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92326K Nondisplaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92326P Nondisplaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92326S Nondisplaced fracture of second metatarsal bone, unspecified foot, sequela -S92331A Displaced fracture of third metatarsal bone, right foot, initial encounter for closed fracture -S92331B Displaced fracture of third metatarsal bone, right foot, initial encounter for open fracture -S92331D Displaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92331G Displaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92331K Displaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92331P Displaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92331S Displaced fracture of third metatarsal bone, right foot, sequela -S92332A Displaced fracture of third metatarsal bone, left foot, initial encounter for closed fracture -S92332B Displaced fracture of third metatarsal bone, left foot, initial encounter for open fracture -S92332D Displaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92332G Displaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92332K Displaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92332P Displaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92332S Displaced fracture of third metatarsal bone, left foot, sequela -S92333A Displaced fracture of third metatarsal bone, unspecified foot, initial encounter for closed fracture -S92333B Displaced fracture of third metatarsal bone, unspecified foot, initial encounter for open fracture -S92333D Displaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92333G Displaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92333K Displaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92333P Displaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92333S Displaced fracture of third metatarsal bone, unspecified foot, sequela -S92334A Nondisplaced fracture of third metatarsal bone, right foot, initial encounter for closed fracture -S92334B Nondisplaced fracture of third metatarsal bone, right foot, initial encounter for open fracture -S92334D Nondisplaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92334G Nondisplaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92334K Nondisplaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92334P Nondisplaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92334S Nondisplaced fracture of third metatarsal bone, right foot, sequela -S92335A Nondisplaced fracture of third metatarsal bone, left foot, initial encounter for closed fracture -S92335B Nondisplaced fracture of third metatarsal bone, left foot, initial encounter for open fracture -S92335D Nondisplaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92335G Nondisplaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92335K Nondisplaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92335P Nondisplaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92335S Nondisplaced fracture of third metatarsal bone, left foot, sequela -S92336A Nondisplaced fracture of third metatarsal bone, unspecified foot, initial encounter for closed fracture -S92336B Nondisplaced fracture of third metatarsal bone, unspecified foot, initial encounter for open fracture -S92336D Nondisplaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92336G Nondisplaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92336K Nondisplaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92336P Nondisplaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92336S Nondisplaced fracture of third metatarsal bone, unspecified foot, sequela -S92341A Displaced fracture of fourth metatarsal bone, right foot, initial encounter for closed fracture -S92341B Displaced fracture of fourth metatarsal bone, right foot, initial encounter for open fracture -S92341D Displaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92341G Displaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92341K Displaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92341P Displaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92341S Displaced fracture of fourth metatarsal bone, right foot, sequela -S92342A Displaced fracture of fourth metatarsal bone, left foot, initial encounter for closed fracture -S92342B Displaced fracture of fourth metatarsal bone, left foot, initial encounter for open fracture -S92342D Displaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92342G Displaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92342K Displaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92342P Displaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92342S Displaced fracture of fourth metatarsal bone, left foot, sequela -S92343A Displaced fracture of fourth metatarsal bone, unspecified foot, initial encounter for closed fracture -S92343B Displaced fracture of fourth metatarsal bone, unspecified foot, initial encounter for open fracture -S92343D Displaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92343G Displaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92343K Displaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92343P Displaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92343S Displaced fracture of fourth metatarsal bone, unspecified foot, sequela -S92344A Nondisplaced fracture of fourth metatarsal bone, right foot, initial encounter for closed fracture -S92344B Nondisplaced fracture of fourth metatarsal bone, right foot, initial encounter for open fracture -S92344D Nondisplaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92344G Nondisplaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92344K Nondisplaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92344P Nondisplaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92344S Nondisplaced fracture of fourth metatarsal bone, right foot, sequela -S92345A Nondisplaced fracture of fourth metatarsal bone, left foot, initial encounter for closed fracture -S92345B Nondisplaced fracture of fourth metatarsal bone, left foot, initial encounter for open fracture -S92345D Nondisplaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92345G Nondisplaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92345K Nondisplaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92345P Nondisplaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92345S Nondisplaced fracture of fourth metatarsal bone, left foot, sequela -S92346A Nondisplaced fracture of fourth metatarsal bone, unspecified foot, initial encounter for closed fracture -S92346B Nondisplaced fracture of fourth metatarsal bone, unspecified foot, initial encounter for open fracture -S92346D Nondisplaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92346G Nondisplaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92346K Nondisplaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92346P Nondisplaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92346S Nondisplaced fracture of fourth metatarsal bone, unspecified foot, sequela -S92351A Displaced fracture of fifth metatarsal bone, right foot, initial encounter for closed fracture -S92351B Displaced fracture of fifth metatarsal bone, right foot, initial encounter for open fracture -S92351D Displaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92351G Displaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92351K Displaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92351P Displaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92351S Displaced fracture of fifth metatarsal bone, right foot, sequela -S92352A Displaced fracture of fifth metatarsal bone, left foot, initial encounter for closed fracture -S92352B Displaced fracture of fifth metatarsal bone, left foot, initial encounter for open fracture -S92352D Displaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92352G Displaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92352K Displaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92352P Displaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92352S Displaced fracture of fifth metatarsal bone, left foot, sequela -S92353A Displaced fracture of fifth metatarsal bone, unspecified foot, initial encounter for closed fracture -S92353B Displaced fracture of fifth metatarsal bone, unspecified foot, initial encounter for open fracture -S92353D Displaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92353G Displaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92353K Displaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92353P Displaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92353S Displaced fracture of fifth metatarsal bone, unspecified foot, sequela -S92354A Nondisplaced fracture of fifth metatarsal bone, right foot, initial encounter for closed fracture -S92354B Nondisplaced fracture of fifth metatarsal bone, right foot, initial encounter for open fracture -S92354D Nondisplaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92354G Nondisplaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92354K Nondisplaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92354P Nondisplaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92354S Nondisplaced fracture of fifth metatarsal bone, right foot, sequela -S92355A Nondisplaced fracture of fifth metatarsal bone, left foot, initial encounter for closed fracture -S92355B Nondisplaced fracture of fifth metatarsal bone, left foot, initial encounter for open fracture -S92355D Nondisplaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92355G Nondisplaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92355K Nondisplaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92355P Nondisplaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92355S Nondisplaced fracture of fifth metatarsal bone, left foot, sequela -S92356A Nondisplaced fracture of fifth metatarsal bone, unspecified foot, initial encounter for closed fracture -S92356B Nondisplaced fracture of fifth metatarsal bone, unspecified foot, initial encounter for open fracture -S92356D Nondisplaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92356G Nondisplaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92356K Nondisplaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92356P Nondisplaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92356S Nondisplaced fracture of fifth metatarsal bone, unspecified foot, sequela -S92401A Displaced unspecified fracture of right great toe, initial encounter for closed fracture -S92401B Displaced unspecified fracture of right great toe, initial encounter for open fracture -S92401D Displaced unspecified fracture of right great toe, subsequent encounter for fracture with routine healing -S92401G Displaced unspecified fracture of right great toe, subsequent encounter for fracture with delayed healing -S92401K Displaced unspecified fracture of right great toe, subsequent encounter for fracture with nonunion -S92401P Displaced unspecified fracture of right great toe, subsequent encounter for fracture with malunion -S92401S Displaced unspecified fracture of right great toe, sequela -S92402A Displaced unspecified fracture of left great toe, initial encounter for closed fracture -S92402B Displaced unspecified fracture of left great toe, initial encounter for open fracture -S92402D Displaced unspecified fracture of left great toe, subsequent encounter for fracture with routine healing -S92402G Displaced unspecified fracture of left great toe, subsequent encounter for fracture with delayed healing -S92402K Displaced unspecified fracture of left great toe, subsequent encounter for fracture with nonunion -S92402P Displaced unspecified fracture of left great toe, subsequent encounter for fracture with malunion -S92402S Displaced unspecified fracture of left great toe, sequela -S92403A Displaced unspecified fracture of unspecified great toe, initial encounter for closed fracture -S92403B Displaced unspecified fracture of unspecified great toe, initial encounter for open fracture -S92403D Displaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with routine healing -S92403G Displaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with delayed healing -S92403K Displaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with nonunion -S92403P Displaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with malunion -S92403S Displaced unspecified fracture of unspecified great toe, sequela -S92404A Nondisplaced unspecified fracture of right great toe, initial encounter for closed fracture -S92404B Nondisplaced unspecified fracture of right great toe, initial encounter for open fracture -S92404D Nondisplaced unspecified fracture of right great toe, subsequent encounter for fracture with routine healing -S92404G Nondisplaced unspecified fracture of right great toe, subsequent encounter for fracture with delayed healing -S92404K Nondisplaced unspecified fracture of right great toe, subsequent encounter for fracture with nonunion -S92404P Nondisplaced unspecified fracture of right great toe, subsequent encounter for fracture with malunion -S92404S Nondisplaced unspecified fracture of right great toe, sequela -S92405A Nondisplaced unspecified fracture of left great toe, initial encounter for closed fracture -S92405B Nondisplaced unspecified fracture of left great toe, initial encounter for open fracture -S92405D Nondisplaced unspecified fracture of left great toe, subsequent encounter for fracture with routine healing -S92405G Nondisplaced unspecified fracture of left great toe, subsequent encounter for fracture with delayed healing -S92405K Nondisplaced unspecified fracture of left great toe, subsequent encounter for fracture with nonunion -S92405P Nondisplaced unspecified fracture of left great toe, subsequent encounter for fracture with malunion -S92405S Nondisplaced unspecified fracture of left great toe, sequela -S92406A Nondisplaced unspecified fracture of unspecified great toe, initial encounter for closed fracture -S92406B Nondisplaced unspecified fracture of unspecified great toe, initial encounter for open fracture -S92406D Nondisplaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with routine healing -S92406G Nondisplaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with delayed healing -S92406K Nondisplaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with nonunion -S92406P Nondisplaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with malunion -S92406S Nondisplaced unspecified fracture of unspecified great toe, sequela -S92411A Displaced fracture of proximal phalanx of right great toe, initial encounter for closed fracture -S92411B Displaced fracture of proximal phalanx of right great toe, initial encounter for open fracture -S92411D Displaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with routine healing -S92411G Displaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with delayed healing -S92411K Displaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with nonunion -S92411P Displaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with malunion -S92411S Displaced fracture of proximal phalanx of right great toe, sequela -S92412A Displaced fracture of proximal phalanx of left great toe, initial encounter for closed fracture -S92412B Displaced fracture of proximal phalanx of left great toe, initial encounter for open fracture -S92412D Displaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with routine healing -S92412G Displaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with delayed healing -S92412K Displaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with nonunion -S92412P Displaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with malunion -S92412S Displaced fracture of proximal phalanx of left great toe, sequela -S92413A Displaced fracture of proximal phalanx of unspecified great toe, initial encounter for closed fracture -S92413B Displaced fracture of proximal phalanx of unspecified great toe, initial encounter for open fracture -S92413D Displaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with routine healing -S92413G Displaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with delayed healing -S92413K Displaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with nonunion -S92413P Displaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with malunion -S92413S Displaced fracture of proximal phalanx of unspecified great toe, sequela -S92414A Nondisplaced fracture of proximal phalanx of right great toe, initial encounter for closed fracture -S92414B Nondisplaced fracture of proximal phalanx of right great toe, initial encounter for open fracture -S92414D Nondisplaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with routine healing -S92414G Nondisplaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with delayed healing -S92414K Nondisplaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with nonunion -S92414P Nondisplaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with malunion -S92414S Nondisplaced fracture of proximal phalanx of right great toe, sequela -S92415A Nondisplaced fracture of proximal phalanx of left great toe, initial encounter for closed fracture -S92415B Nondisplaced fracture of proximal phalanx of left great toe, initial encounter for open fracture -S92415D Nondisplaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with routine healing -S92415G Nondisplaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with delayed healing -S92415K Nondisplaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with nonunion -S92415P Nondisplaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with malunion -S92415S Nondisplaced fracture of proximal phalanx of left great toe, sequela -S92416A Nondisplaced fracture of proximal phalanx of unspecified great toe, initial encounter for closed fracture -S92416B Nondisplaced fracture of proximal phalanx of unspecified great toe, initial encounter for open fracture -S92416D Nondisplaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with routine healing -S92416G Nondisplaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with delayed healing -S92416K Nondisplaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with nonunion -S92416P Nondisplaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with malunion -S92416S Nondisplaced fracture of proximal phalanx of unspecified great toe, sequela -S92421A Displaced fracture of distal phalanx of right great toe, initial encounter for closed fracture -S92421B Displaced fracture of distal phalanx of right great toe, initial encounter for open fracture -S92421D Displaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with routine healing -S92421G Displaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with delayed healing -S92421K Displaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with nonunion -S92421P Displaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with malunion -S92421S Displaced fracture of distal phalanx of right great toe, sequela -S92422A Displaced fracture of distal phalanx of left great toe, initial encounter for closed fracture -S92422B Displaced fracture of distal phalanx of left great toe, initial encounter for open fracture -S92422D Displaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with routine healing -S92422G Displaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with delayed healing -S92422K Displaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with nonunion -S92422P Displaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with malunion -S92422S Displaced fracture of distal phalanx of left great toe, sequela -S92423A Displaced fracture of distal phalanx of unspecified great toe, initial encounter for closed fracture -S92423B Displaced fracture of distal phalanx of unspecified great toe, initial encounter for open fracture -S92423D Displaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with routine healing -S92423G Displaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with delayed healing -S92423K Displaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with nonunion -S92423P Displaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with malunion -S92423S Displaced fracture of distal phalanx of unspecified great toe, sequela -S92424A Nondisplaced fracture of distal phalanx of right great toe, initial encounter for closed fracture -S92424B Nondisplaced fracture of distal phalanx of right great toe, initial encounter for open fracture -S92424D Nondisplaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with routine healing -S92424G Nondisplaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with delayed healing -S92424K Nondisplaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with nonunion -S92424P Nondisplaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with malunion -S92424S Nondisplaced fracture of distal phalanx of right great toe, sequela -S92425A Nondisplaced fracture of distal phalanx of left great toe, initial encounter for closed fracture -S92425B Nondisplaced fracture of distal phalanx of left great toe, initial encounter for open fracture -S92425D Nondisplaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with routine healing -S92425G Nondisplaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with delayed healing -S92425K Nondisplaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with nonunion -S92425P Nondisplaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with malunion -S92425S Nondisplaced fracture of distal phalanx of left great toe, sequela -S92426A Nondisplaced fracture of distal phalanx of unspecified great toe, initial encounter for closed fracture -S92426B Nondisplaced fracture of distal phalanx of unspecified great toe, initial encounter for open fracture -S92426D Nondisplaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with routine healing -S92426G Nondisplaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with delayed healing -S92426K Nondisplaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with nonunion -S92426P Nondisplaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with malunion -S92426S Nondisplaced fracture of distal phalanx of unspecified great toe, sequela -S92491A Other fracture of right great toe, initial encounter for closed fracture -S92491B Other fracture of right great toe, initial encounter for open fracture -S92491D Other fracture of right great toe, subsequent encounter for fracture with routine healing -S92491G Other fracture of right great toe, subsequent encounter for fracture with delayed healing -S92491K Other fracture of right great toe, subsequent encounter for fracture with nonunion -S92491P Other fracture of right great toe, subsequent encounter for fracture with malunion -S92491S Other fracture of right great toe, sequela -S92492A Other fracture of left great toe, initial encounter for closed fracture -S92492B Other fracture of left great toe, initial encounter for open fracture -S92492D Other fracture of left great toe, subsequent encounter for fracture with routine healing -S92492G Other fracture of left great toe, subsequent encounter for fracture with delayed healing -S92492K Other fracture of left great toe, subsequent encounter for fracture with nonunion -S92492P Other fracture of left great toe, subsequent encounter for fracture with malunion -S92492S Other fracture of left great toe, sequela -S92499A Other fracture of unspecified great toe, initial encounter for closed fracture -S92499B Other fracture of unspecified great toe, initial encounter for open fracture -S92499D Other fracture of unspecified great toe, subsequent encounter for fracture with routine healing -S92499G Other fracture of unspecified great toe, subsequent encounter for fracture with delayed healing -S92499K Other fracture of unspecified great toe, subsequent encounter for fracture with nonunion -S92499P Other fracture of unspecified great toe, subsequent encounter for fracture with malunion -S92499S Other fracture of unspecified great toe, sequela -S92501A Displaced unspecified fracture of right lesser toe(s), initial encounter for closed fracture -S92501B Displaced unspecified fracture of right lesser toe(s), initial encounter for open fracture -S92501D Displaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with routine healing -S92501G Displaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92501K Displaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with nonunion -S92501P Displaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with malunion -S92501S Displaced unspecified fracture of right lesser toe(s), sequela -S92502A Displaced unspecified fracture of left lesser toe(s), initial encounter for closed fracture -S92502B Displaced unspecified fracture of left lesser toe(s), initial encounter for open fracture -S92502D Displaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with routine healing -S92502G Displaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92502K Displaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with nonunion -S92502P Displaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with malunion -S92502S Displaced unspecified fracture of left lesser toe(s), sequela -S92503A Displaced unspecified fracture of unspecified lesser toe(s), initial encounter for closed fracture -S92503B Displaced unspecified fracture of unspecified lesser toe(s), initial encounter for open fracture -S92503D Displaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92503G Displaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92503K Displaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92503P Displaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92503S Displaced unspecified fracture of unspecified lesser toe(s), sequela -S92504A Nondisplaced unspecified fracture of right lesser toe(s), initial encounter for closed fracture -S92504B Nondisplaced unspecified fracture of right lesser toe(s), initial encounter for open fracture -S92504D Nondisplaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with routine healing -S92504G Nondisplaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92504K Nondisplaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with nonunion -S92504P Nondisplaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with malunion -S92504S Nondisplaced unspecified fracture of right lesser toe(s), sequela -S92505A Nondisplaced unspecified fracture of left lesser toe(s), initial encounter for closed fracture -S92505B Nondisplaced unspecified fracture of left lesser toe(s), initial encounter for open fracture -S92505D Nondisplaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with routine healing -S92505G Nondisplaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92505K Nondisplaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with nonunion -S92505P Nondisplaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with malunion -S92505S Nondisplaced unspecified fracture of left lesser toe(s), sequela -S92506A Nondisplaced unspecified fracture of unspecified lesser toe(s), initial encounter for closed fracture -S92506B Nondisplaced unspecified fracture of unspecified lesser toe(s), initial encounter for open fracture -S92506D Nondisplaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92506G Nondisplaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92506K Nondisplaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92506P Nondisplaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92506S Nondisplaced unspecified fracture of unspecified lesser toe(s), sequela -S92511A Displaced fracture of proximal phalanx of right lesser toe(s), initial encounter for closed fracture -S92511B Displaced fracture of proximal phalanx of right lesser toe(s), initial encounter for open fracture -S92511D Displaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92511G Displaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92511K Displaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92511P Displaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92511S Displaced fracture of proximal phalanx of right lesser toe(s), sequela -S92512A Displaced fracture of proximal phalanx of left lesser toe(s), initial encounter for closed fracture -S92512B Displaced fracture of proximal phalanx of left lesser toe(s), initial encounter for open fracture -S92512D Displaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92512G Displaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92512K Displaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92512P Displaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92512S Displaced fracture of proximal phalanx of left lesser toe(s), sequela -S92513A Displaced fracture of proximal phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92513B Displaced fracture of proximal phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92513D Displaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92513G Displaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92513K Displaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92513P Displaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92513S Displaced fracture of proximal phalanx of unspecified lesser toe(s), sequela -S92514A Nondisplaced fracture of proximal phalanx of right lesser toe(s), initial encounter for closed fracture -S92514B Nondisplaced fracture of proximal phalanx of right lesser toe(s), initial encounter for open fracture -S92514D Nondisplaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92514G Nondisplaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92514K Nondisplaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92514P Nondisplaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92514S Nondisplaced fracture of proximal phalanx of right lesser toe(s), sequela -S92515A Nondisplaced fracture of proximal phalanx of left lesser toe(s), initial encounter for closed fracture -S92515B Nondisplaced fracture of proximal phalanx of left lesser toe(s), initial encounter for open fracture -S92515D Nondisplaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92515G Nondisplaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92515K Nondisplaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92515P Nondisplaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92515S Nondisplaced fracture of proximal phalanx of left lesser toe(s), sequela -S92516A Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92516B Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92516D Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92516G Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92516K Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92516P Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92516S Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), sequela -S92521A Displaced fracture of medial phalanx of right lesser toe(s), initial encounter for closed fracture -S92521B Displaced fracture of medial phalanx of right lesser toe(s), initial encounter for open fracture -S92521D Displaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92521G Displaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92521K Displaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92521P Displaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92521S Displaced fracture of medial phalanx of right lesser toe(s), sequela -S92522A Displaced fracture of medial phalanx of left lesser toe(s), initial encounter for closed fracture -S92522B Displaced fracture of medial phalanx of left lesser toe(s), initial encounter for open fracture -S92522D Displaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92522G Displaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92522K Displaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92522P Displaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92522S Displaced fracture of medial phalanx of left lesser toe(s), sequela -S92523A Displaced fracture of medial phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92523B Displaced fracture of medial phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92523D Displaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92523G Displaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92523K Displaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92523P Displaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92523S Displaced fracture of medial phalanx of unspecified lesser toe(s), sequela -S92524A Nondisplaced fracture of medial phalanx of right lesser toe(s), initial encounter for closed fracture -S92524B Nondisplaced fracture of medial phalanx of right lesser toe(s), initial encounter for open fracture -S92524D Nondisplaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92524G Nondisplaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92524K Nondisplaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92524P Nondisplaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92524S Nondisplaced fracture of medial phalanx of right lesser toe(s), sequela -S92525A Nondisplaced fracture of medial phalanx of left lesser toe(s), initial encounter for closed fracture -S92525B Nondisplaced fracture of medial phalanx of left lesser toe(s), initial encounter for open fracture -S92525D Nondisplaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92525G Nondisplaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92525K Nondisplaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92525P Nondisplaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92525S Nondisplaced fracture of medial phalanx of left lesser toe(s), sequela -S92526A Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92526B Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92526D Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92526G Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92526K Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92526P Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92526S Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), sequela -S92531A Displaced fracture of distal phalanx of right lesser toe(s), initial encounter for closed fracture -S92531B Displaced fracture of distal phalanx of right lesser toe(s), initial encounter for open fracture -S92531D Displaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92531G Displaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92531K Displaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92531P Displaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92531S Displaced fracture of distal phalanx of right lesser toe(s), sequela -S92532A Displaced fracture of distal phalanx of left lesser toe(s), initial encounter for closed fracture -S92532B Displaced fracture of distal phalanx of left lesser toe(s), initial encounter for open fracture -S92532D Displaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92532G Displaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92532K Displaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92532P Displaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92532S Displaced fracture of distal phalanx of left lesser toe(s), sequela -S92533A Displaced fracture of distal phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92533B Displaced fracture of distal phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92533D Displaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92533G Displaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92533K Displaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92533P Displaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92533S Displaced fracture of distal phalanx of unspecified lesser toe(s), sequela -S92534A Nondisplaced fracture of distal phalanx of right lesser toe(s), initial encounter for closed fracture -S92534B Nondisplaced fracture of distal phalanx of right lesser toe(s), initial encounter for open fracture -S92534D Nondisplaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92534G Nondisplaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92534K Nondisplaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92534P Nondisplaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92534S Nondisplaced fracture of distal phalanx of right lesser toe(s), sequela -S92535A Nondisplaced fracture of distal phalanx of left lesser toe(s), initial encounter for closed fracture -S92535B Nondisplaced fracture of distal phalanx of left lesser toe(s), initial encounter for open fracture -S92535D Nondisplaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92535G Nondisplaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92535K Nondisplaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92535P Nondisplaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92535S Nondisplaced fracture of distal phalanx of left lesser toe(s), sequela -S92536A Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92536B Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92536D Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92536G Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92536K Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92536P Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92536S Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), sequela -S92591A Other fracture of right lesser toe(s), initial encounter for closed fracture -S92591B Other fracture of right lesser toe(s), initial encounter for open fracture -S92591D Other fracture of right lesser toe(s), subsequent encounter for fracture with routine healing -S92591G Other fracture of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92591K Other fracture of right lesser toe(s), subsequent encounter for fracture with nonunion -S92591P Other fracture of right lesser toe(s), subsequent encounter for fracture with malunion -S92591S Other fracture of right lesser toe(s), sequela -S92592A Other fracture of left lesser toe(s), initial encounter for closed fracture -S92592B Other fracture of left lesser toe(s), initial encounter for open fracture -S92592D Other fracture of left lesser toe(s), subsequent encounter for fracture with routine healing -S92592G Other fracture of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92592K Other fracture of left lesser toe(s), subsequent encounter for fracture with nonunion -S92592P Other fracture of left lesser toe(s), subsequent encounter for fracture with malunion -S92592S Other fracture of left lesser toe(s), sequela -S92599A Other fracture of unspecified lesser toe(s), initial encounter for closed fracture -S92599B Other fracture of unspecified lesser toe(s), initial encounter for open fracture -S92599D Other fracture of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92599G Other fracture of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92599K Other fracture of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92599P Other fracture of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92599S Other fracture of unspecified lesser toe(s), sequela -S92901A Unspecified fracture of right foot, initial encounter for closed fracture -S92901B Unspecified fracture of right foot, initial encounter for open fracture -S92901D Unspecified fracture of right foot, subsequent encounter for fracture with routine healing -S92901G Unspecified fracture of right foot, subsequent encounter for fracture with delayed healing -S92901K Unspecified fracture of right foot, subsequent encounter for fracture with nonunion -S92901P Unspecified fracture of right foot, subsequent encounter for fracture with malunion -S92901S Unspecified fracture of right foot, sequela -S92902A Unspecified fracture of left foot, initial encounter for closed fracture -S92902B Unspecified fracture of left foot, initial encounter for open fracture -S92902D Unspecified fracture of left foot, subsequent encounter for fracture with routine healing -S92902G Unspecified fracture of left foot, subsequent encounter for fracture with delayed healing -S92902K Unspecified fracture of left foot, subsequent encounter for fracture with nonunion -S92902P Unspecified fracture of left foot, subsequent encounter for fracture with malunion -S92902S Unspecified fracture of left foot, sequela -S92909A Unspecified fracture of unspecified foot, initial encounter for closed fracture -S92909B Unspecified fracture of unspecified foot, initial encounter for open fracture -S92909D Unspecified fracture of unspecified foot, subsequent encounter for fracture with routine healing -S92909G Unspecified fracture of unspecified foot, subsequent encounter for fracture with delayed healing -S92909K Unspecified fracture of unspecified foot, subsequent encounter for fracture with nonunion -S92909P Unspecified fracture of unspecified foot, subsequent encounter for fracture with malunion -S92909S Unspecified fracture of unspecified foot, sequela -S92911A Unspecified fracture of right toe(s), initial encounter for closed fracture -S92911B Unspecified fracture of right toe(s), initial encounter for open fracture -S92911D Unspecified fracture of right toe(s), subsequent encounter for fracture with routine healing -S92911G Unspecified fracture of right toe(s), subsequent encounter for fracture with delayed healing -S92911K Unspecified fracture of right toe(s), subsequent encounter for fracture with nonunion -S92911P Unspecified fracture of right toe(s), subsequent encounter for fracture with malunion -S92911S Unspecified fracture of right toe(s), sequela -S92912A Unspecified fracture of left toe(s), initial encounter for closed fracture -S92912B Unspecified fracture of left toe(s), initial encounter for open fracture -S92912D Unspecified fracture of left toe(s), subsequent encounter for fracture with routine healing -S92912G Unspecified fracture of left toe(s), subsequent encounter for fracture with delayed healing -S92912K Unspecified fracture of left toe(s), subsequent encounter for fracture with nonunion -S92912P Unspecified fracture of left toe(s), subsequent encounter for fracture with malunion -S92912S Unspecified fracture of left toe(s), sequela -S92919A Unspecified fracture of unspecified toe(s), initial encounter for closed fracture -S92919B Unspecified fracture of unspecified toe(s), initial encounter for open fracture -S92919D Unspecified fracture of unspecified toe(s), subsequent encounter for fracture with routine healing -S92919G Unspecified fracture of unspecified toe(s), subsequent encounter for fracture with delayed healing -S92919K Unspecified fracture of unspecified toe(s), subsequent encounter for fracture with nonunion -S92919P Unspecified fracture of unspecified toe(s), subsequent encounter for fracture with malunion -S92919S Unspecified fracture of unspecified toe(s), sequela -S9301XA Subluxation of right ankle joint, initial encounter -S9301XD Subluxation of right ankle joint, subsequent encounter -S9301XS Subluxation of right ankle joint, sequela -S9302XA Subluxation of left ankle joint, initial encounter -S9302XD Subluxation of left ankle joint, subsequent encounter -S9302XS Subluxation of left ankle joint, sequela -S9303XA Subluxation of unspecified ankle joint, initial encounter -S9303XD Subluxation of unspecified ankle joint, subsequent encounter -S9303XS Subluxation of unspecified ankle joint, sequela -S9304XA Dislocation of right ankle joint, initial encounter -S9304XD Dislocation of right ankle joint, subsequent encounter -S9304XS Dislocation of right ankle joint, sequela -S9305XA Dislocation of left ankle joint, initial encounter -S9305XD Dislocation of left ankle joint, subsequent encounter -S9305XS Dislocation of left ankle joint, sequela -S9306XA Dislocation of unspecified ankle joint, initial encounter -S9306XD Dislocation of unspecified ankle joint, subsequent encounter -S9306XS Dislocation of unspecified ankle joint, sequela -S93101A Unspecified subluxation of right toe(s), initial encounter -S93101D Unspecified subluxation of right toe(s), subsequent encounter -S93101S Unspecified subluxation of right toe(s), sequela -S93102A Unspecified subluxation of left toe(s), initial encounter -S93102D Unspecified subluxation of left toe(s), subsequent encounter -S93102S Unspecified subluxation of left toe(s), sequela -S93103A Unspecified subluxation of unspecified toe(s), initial encounter -S93103D Unspecified subluxation of unspecified toe(s), subsequent encounter -S93103S Unspecified subluxation of unspecified toe(s), sequela -S93104A Unspecified dislocation of right toe(s), initial encounter -S93104D Unspecified dislocation of right toe(s), subsequent encounter -S93104S Unspecified dislocation of right toe(s), sequela -S93105A Unspecified dislocation of left toe(s), initial encounter -S93105D Unspecified dislocation of left toe(s), subsequent encounter -S93105S Unspecified dislocation of left toe(s), sequela -S93106A Unspecified dislocation of unspecified toe(s), initial encounter -S93106D Unspecified dislocation of unspecified toe(s), subsequent encounter -S93106S Unspecified dislocation of unspecified toe(s), sequela -S93111A Dislocation of interphalangeal joint of right great toe, initial encounter -S93111D Dislocation of interphalangeal joint of right great toe, subsequent encounter -S93111S Dislocation of interphalangeal joint of right great toe, sequela -S93112A Dislocation of interphalangeal joint of left great toe, initial encounter -S93112D Dislocation of interphalangeal joint of left great toe, subsequent encounter -S93112S Dislocation of interphalangeal joint of left great toe, sequela -S93113A Dislocation of interphalangeal joint of unspecified great toe, initial encounter -S93113D Dislocation of interphalangeal joint of unspecified great toe, subsequent encounter -S93113S Dislocation of interphalangeal joint of unspecified great toe, sequela -S93114A Dislocation of interphalangeal joint of right lesser toe(s), initial encounter -S93114D Dislocation of interphalangeal joint of right lesser toe(s), subsequent encounter -S93114S Dislocation of interphalangeal joint of right lesser toe(s), sequela -S93115A Dislocation of interphalangeal joint of left lesser toe(s), initial encounter -S93115D Dislocation of interphalangeal joint of left lesser toe(s), subsequent encounter -S93115S Dislocation of interphalangeal joint of left lesser toe(s), sequela -S93116A Dislocation of interphalangeal joint of unspecified lesser toe(s), initial encounter -S93116D Dislocation of interphalangeal joint of unspecified lesser toe(s), subsequent encounter -S93116S Dislocation of interphalangeal joint of unspecified lesser toe(s), sequela -S93119A Dislocation of interphalangeal joint of unspecified toe(s), initial encounter -S93119D Dislocation of interphalangeal joint of unspecified toe(s), subsequent encounter -S93119S Dislocation of interphalangeal joint of unspecified toe(s), sequela -S93121A Dislocation of metatarsophalangeal joint of right great toe, initial encounter -S93121D Dislocation of metatarsophalangeal joint of right great toe, subsequent encounter -S93121S Dislocation of metatarsophalangeal joint of right great toe, sequela -S93122A Dislocation of metatarsophalangeal joint of left great toe, initial encounter -S93122D Dislocation of metatarsophalangeal joint of left great toe, subsequent encounter -S93122S Dislocation of metatarsophalangeal joint of left great toe, sequela -S93123A Dislocation of metatarsophalangeal joint of unspecified great toe, initial encounter -S93123D Dislocation of metatarsophalangeal joint of unspecified great toe, subsequent encounter -S93123S Dislocation of metatarsophalangeal joint of unspecified great toe, sequela -S93124A Dislocation of metatarsophalangeal joint of right lesser toe(s), initial encounter -S93124D Dislocation of metatarsophalangeal joint of right lesser toe(s), subsequent encounter -S93124S Dislocation of metatarsophalangeal joint of right lesser toe(s), sequela -S93125A Dislocation of metatarsophalangeal joint of left lesser toe(s), initial encounter -S93125D Dislocation of metatarsophalangeal joint of left lesser toe(s), subsequent encounter -S93125S Dislocation of metatarsophalangeal joint of left lesser toe(s), sequela -S93126A Dislocation of metatarsophalangeal joint of unspecified lesser toe(s), initial encounter -S93126D Dislocation of metatarsophalangeal joint of unspecified lesser toe(s), subsequent encounter -S93126S Dislocation of metatarsophalangeal joint of unspecified lesser toe(s), sequela -S93129A Dislocation of metatarsophalangeal joint of unspecified toe(s), initial encounter -S93129D Dislocation of metatarsophalangeal joint of unspecified toe(s), subsequent encounter -S93129S Dislocation of metatarsophalangeal joint of unspecified toe(s), sequela -S93131A Subluxation of interphalangeal joint of right great toe, initial encounter -S93131D Subluxation of interphalangeal joint of right great toe, subsequent encounter -S93131S Subluxation of interphalangeal joint of right great toe, sequela -S93132A Subluxation of interphalangeal joint of left great toe, initial encounter -S93132D Subluxation of interphalangeal joint of left great toe, subsequent encounter -S93132S Subluxation of interphalangeal joint of left great toe, sequela -S93133A Subluxation of interphalangeal joint of unspecified great toe, initial encounter -S93133D Subluxation of interphalangeal joint of unspecified great toe, subsequent encounter -S93133S Subluxation of interphalangeal joint of unspecified great toe, sequela -S93134A Subluxation of interphalangeal joint of right lesser toe(s), initial encounter -S93134D Subluxation of interphalangeal joint of right lesser toe(s), subsequent encounter -S93134S Subluxation of interphalangeal joint of right lesser toe(s), sequela -S93135A Subluxation of interphalangeal joint of left lesser toe(s), initial encounter -S93135D Subluxation of interphalangeal joint of left lesser toe(s), subsequent encounter -S93135S Subluxation of interphalangeal joint of left lesser toe(s), sequela -S93136A Subluxation of interphalangeal joint of unspecified lesser toe(s), initial encounter -S93136D Subluxation of interphalangeal joint of unspecified lesser toe(s), subsequent encounter -S93136S Subluxation of interphalangeal joint of unspecified lesser toe(s), sequela -S93139A Subluxation of interphalangeal joint of unspecified toe(s), initial encounter -S93139D Subluxation of interphalangeal joint of unspecified toe(s), subsequent encounter -S93139S Subluxation of interphalangeal joint of unspecified toe(s), sequela -S93141A Subluxation of metatarsophalangeal joint of right great toe, initial encounter -S93141D Subluxation of metatarsophalangeal joint of right great toe, subsequent encounter -S93141S Subluxation of metatarsophalangeal joint of right great toe, sequela -S93142A Subluxation of metatarsophalangeal joint of left great toe, initial encounter -S93142D Subluxation of metatarsophalangeal joint of left great toe, subsequent encounter -S93142S Subluxation of metatarsophalangeal joint of left great toe, sequela -S93143A Subluxation of metatarsophalangeal joint of unspecified great toe, initial encounter -S93143D Subluxation of metatarsophalangeal joint of unspecified great toe, subsequent encounter -S93143S Subluxation of metatarsophalangeal joint of unspecified great toe, sequela -S93144A Subluxation of metatarsophalangeal joint of right lesser toe(s), initial encounter -S93144D Subluxation of metatarsophalangeal joint of right lesser toe(s), subsequent encounter -S93144S Subluxation of metatarsophalangeal joint of right lesser toe(s), sequela -S93145A Subluxation of metatarsophalangeal joint of left lesser toe(s), initial encounter -S93145D Subluxation of metatarsophalangeal joint of left lesser toe(s), subsequent encounter -S93145S Subluxation of metatarsophalangeal joint of left lesser toe(s), sequela -S93146A Subluxation of metatarsophalangeal joint of unspecified lesser toe(s), initial encounter -S93146D Subluxation of metatarsophalangeal joint of unspecified lesser toe(s), subsequent encounter -S93146S Subluxation of metatarsophalangeal joint of unspecified lesser toe(s), sequela -S93149A Subluxation of metatarsophalangeal joint of unspecified toe(s), initial encounter -S93149D Subluxation of metatarsophalangeal joint of unspecified toe(s), subsequent encounter -S93149S Subluxation of metatarsophalangeal joint of unspecified toe(s), sequela -S93301A Unspecified subluxation of right foot, initial encounter -S93301D Unspecified subluxation of right foot, subsequent encounter -S93301S Unspecified subluxation of right foot, sequela -S93302A Unspecified subluxation of left foot, initial encounter -S93302D Unspecified subluxation of left foot, subsequent encounter -S93302S Unspecified subluxation of left foot, sequela -S93303A Unspecified subluxation of unspecified foot, initial encounter -S93303D Unspecified subluxation of unspecified foot, subsequent encounter -S93303S Unspecified subluxation of unspecified foot, sequela -S93304A Unspecified dislocation of right foot, initial encounter -S93304D Unspecified dislocation of right foot, subsequent encounter -S93304S Unspecified dislocation of right foot, sequela -S93305A Unspecified dislocation of left foot, initial encounter -S93305D Unspecified dislocation of left foot, subsequent encounter -S93305S Unspecified dislocation of left foot, sequela -S93306A Unspecified dislocation of unspecified foot, initial encounter -S93306D Unspecified dislocation of unspecified foot, subsequent encounter -S93306S Unspecified dislocation of unspecified foot, sequela -S93311A Subluxation of tarsal joint of right foot, initial encounter -S93311D Subluxation of tarsal joint of right foot, subsequent encounter -S93311S Subluxation of tarsal joint of right foot, sequela -S93312A Subluxation of tarsal joint of left foot, initial encounter -S93312D Subluxation of tarsal joint of left foot, subsequent encounter -S93312S Subluxation of tarsal joint of left foot, sequela -S93313A Subluxation of tarsal joint of unspecified foot, initial encounter -S93313D Subluxation of tarsal joint of unspecified foot, subsequent encounter -S93313S Subluxation of tarsal joint of unspecified foot, sequela -S93314A Dislocation of tarsal joint of right foot, initial encounter -S93314D Dislocation of tarsal joint of right foot, subsequent encounter -S93314S Dislocation of tarsal joint of right foot, sequela -S93315A Dislocation of tarsal joint of left foot, initial encounter -S93315D Dislocation of tarsal joint of left foot, subsequent encounter -S93315S Dislocation of tarsal joint of left foot, sequela -S93316A Dislocation of tarsal joint of unspecified foot, initial encounter -S93316D Dislocation of tarsal joint of unspecified foot, subsequent encounter -S93316S Dislocation of tarsal joint of unspecified foot, sequela -S93321A Subluxation of tarsometatarsal joint of right foot, initial encounter -S93321D Subluxation of tarsometatarsal joint of right foot, subsequent encounter -S93321S Subluxation of tarsometatarsal joint of right foot, sequela -S93322A Subluxation of tarsometatarsal joint of left foot, initial encounter -S93322D Subluxation of tarsometatarsal joint of left foot, subsequent encounter -S93322S Subluxation of tarsometatarsal joint of left foot, sequela -S93323A Subluxation of tarsometatarsal joint of unspecified foot, initial encounter -S93323D Subluxation of tarsometatarsal joint of unspecified foot, subsequent encounter -S93323S Subluxation of tarsometatarsal joint of unspecified foot, sequela -S93324A Dislocation of tarsometatarsal joint of right foot, initial encounter -S93324D Dislocation of tarsometatarsal joint of right foot, subsequent encounter -S93324S Dislocation of tarsometatarsal joint of right foot, sequela -S93325A Dislocation of tarsometatarsal joint of left foot, initial encounter -S93325D Dislocation of tarsometatarsal joint of left foot, subsequent encounter -S93325S Dislocation of tarsometatarsal joint of left foot, sequela -S93326A Dislocation of tarsometatarsal joint of unspecified foot, initial encounter -S93326D Dislocation of tarsometatarsal joint of unspecified foot, subsequent encounter -S93326S Dislocation of tarsometatarsal joint of unspecified foot, sequela -S93331A Other subluxation of right foot, initial encounter -S93331D Other subluxation of right foot, subsequent encounter -S93331S Other subluxation of right foot, sequela -S93332A Other subluxation of left foot, initial encounter -S93332D Other subluxation of left foot, subsequent encounter -S93332S Other subluxation of left foot, sequela -S93333A Other subluxation of unspecified foot, initial encounter -S93333D Other subluxation of unspecified foot, subsequent encounter -S93333S Other subluxation of unspecified foot, sequela -S93334A Other dislocation of right foot, initial encounter -S93334D Other dislocation of right foot, subsequent encounter -S93334S Other dislocation of right foot, sequela -S93335A Other dislocation of left foot, initial encounter -S93335D Other dislocation of left foot, subsequent encounter -S93335S Other dislocation of left foot, sequela -S93336A Other dislocation of unspecified foot, initial encounter -S93336D Other dislocation of unspecified foot, subsequent encounter -S93336S Other dislocation of unspecified foot, sequela -S93401A Sprain of unspecified ligament of right ankle, initial encounter -S93401D Sprain of unspecified ligament of right ankle, subsequent encounter -S93401S Sprain of unspecified ligament of right ankle, sequela -S93402A Sprain of unspecified ligament of left ankle, initial encounter -S93402D Sprain of unspecified ligament of left ankle, subsequent encounter -S93402S Sprain of unspecified ligament of left ankle, sequela -S93409A Sprain of unspecified ligament of unspecified ankle, initial encounter -S93409D Sprain of unspecified ligament of unspecified ankle, subsequent encounter -S93409S Sprain of unspecified ligament of unspecified ankle, sequela -S93411A Sprain of calcaneofibular ligament of right ankle, initial encounter -S93411D Sprain of calcaneofibular ligament of right ankle, subsequent encounter -S93411S Sprain of calcaneofibular ligament of right ankle, sequela -S93412A Sprain of calcaneofibular ligament of left ankle, initial encounter -S93412D Sprain of calcaneofibular ligament of left ankle, subsequent encounter -S93412S Sprain of calcaneofibular ligament of left ankle, sequela -S93419A Sprain of calcaneofibular ligament of unspecified ankle, initial encounter -S93419D Sprain of calcaneofibular ligament of unspecified ankle, subsequent encounter -S93419S Sprain of calcaneofibular ligament of unspecified ankle, sequela -S93421A Sprain of deltoid ligament of right ankle, initial encounter -S93421D Sprain of deltoid ligament of right ankle, subsequent encounter -S93421S Sprain of deltoid ligament of right ankle, sequela -S93422A Sprain of deltoid ligament of left ankle, initial encounter -S93422D Sprain of deltoid ligament of left ankle, subsequent encounter -S93422S Sprain of deltoid ligament of left ankle, sequela -S93429A Sprain of deltoid ligament of unspecified ankle, initial encounter -S93429D Sprain of deltoid ligament of unspecified ankle, subsequent encounter -S93429S Sprain of deltoid ligament of unspecified ankle, sequela -S93431A Sprain of tibiofibular ligament of right ankle, initial encounter -S93431D Sprain of tibiofibular ligament of right ankle, subsequent encounter -S93431S Sprain of tibiofibular ligament of right ankle, sequela -S93432A Sprain of tibiofibular ligament of left ankle, initial encounter -S93432D Sprain of tibiofibular ligament of left ankle, subsequent encounter -S93432S Sprain of tibiofibular ligament of left ankle, sequela -S93439A Sprain of tibiofibular ligament of unspecified ankle, initial encounter -S93439D Sprain of tibiofibular ligament of unspecified ankle, subsequent encounter -S93439S Sprain of tibiofibular ligament of unspecified ankle, sequela -S93491A Sprain of other ligament of right ankle, initial encounter -S93491D Sprain of other ligament of right ankle, subsequent encounter -S93491S Sprain of other ligament of right ankle, sequela -S93492A Sprain of other ligament of left ankle, initial encounter -S93492D Sprain of other ligament of left ankle, subsequent encounter -S93492S Sprain of other ligament of left ankle, sequela -S93499A Sprain of other ligament of unspecified ankle, initial encounter -S93499D Sprain of other ligament of unspecified ankle, subsequent encounter -S93499S Sprain of other ligament of unspecified ankle, sequela -S93501A Unspecified sprain of right great toe, initial encounter -S93501D Unspecified sprain of right great toe, subsequent encounter -S93501S Unspecified sprain of right great toe, sequela -S93502A Unspecified sprain of left great toe, initial encounter -S93502D Unspecified sprain of left great toe, subsequent encounter -S93502S Unspecified sprain of left great toe, sequela -S93503A Unspecified sprain of unspecified great toe, initial encounter -S93503D Unspecified sprain of unspecified great toe, subsequent encounter -S93503S Unspecified sprain of unspecified great toe, sequela -S93504A Unspecified sprain of right lesser toe(s), initial encounter -S93504D Unspecified sprain of right lesser toe(s), subsequent encounter -S93504S Unspecified sprain of right lesser toe(s), sequela -S93505A Unspecified sprain of left lesser toe(s), initial encounter -S93505D Unspecified sprain of left lesser toe(s), subsequent encounter -S93505S Unspecified sprain of left lesser toe(s), sequela -S93506A Unspecified sprain of unspecified lesser toe(s), initial encounter -S93506D Unspecified sprain of unspecified lesser toe(s), subsequent encounter -S93506S Unspecified sprain of unspecified lesser toe(s), sequela -S93509A Unspecified sprain of unspecified toe(s), initial encounter -S93509D Unspecified sprain of unspecified toe(s), subsequent encounter -S93509S Unspecified sprain of unspecified toe(s), sequela -S93511A Sprain of interphalangeal joint of right great toe, initial encounter -S93511D Sprain of interphalangeal joint of right great toe, subsequent encounter -S93511S Sprain of interphalangeal joint of right great toe, sequela -S93512A Sprain of interphalangeal joint of left great toe, initial encounter -S93512D Sprain of interphalangeal joint of left great toe, subsequent encounter -S93512S Sprain of interphalangeal joint of left great toe, sequela -S93513A Sprain of interphalangeal joint of unspecified great toe, initial encounter -S93513D Sprain of interphalangeal joint of unspecified great toe, subsequent encounter -S93513S Sprain of interphalangeal joint of unspecified great toe, sequela -S93514A Sprain of interphalangeal joint of right lesser toe(s), initial encounter -S93514D Sprain of interphalangeal joint of right lesser toe(s), subsequent encounter -S93514S Sprain of interphalangeal joint of right lesser toe(s), sequela -S93515A Sprain of interphalangeal joint of left lesser toe(s), initial encounter -S93515D Sprain of interphalangeal joint of left lesser toe(s), subsequent encounter -S93515S Sprain of interphalangeal joint of left lesser toe(s), sequela -S93516A Sprain of interphalangeal joint of unspecified lesser toe(s), initial encounter -S93516D Sprain of interphalangeal joint of unspecified lesser toe(s), subsequent encounter -S93516S Sprain of interphalangeal joint of unspecified lesser toe(s), sequela -S93519A Sprain of interphalangeal joint of unspecified toe(s), initial encounter -S93519D Sprain of interphalangeal joint of unspecified toe(s), subsequent encounter -S93519S Sprain of interphalangeal joint of unspecified toe(s), sequela -S93521A Sprain of metatarsophalangeal joint of right great toe, initial encounter -S93521D Sprain of metatarsophalangeal joint of right great toe, subsequent encounter -S93521S Sprain of metatarsophalangeal joint of right great toe, sequela -S93522A Sprain of metatarsophalangeal joint of left great toe, initial encounter -S93522D Sprain of metatarsophalangeal joint of left great toe, subsequent encounter -S93522S Sprain of metatarsophalangeal joint of left great toe, sequela -S93523A Sprain of metatarsophalangeal joint of unspecified great toe, initial encounter -S93523D Sprain of metatarsophalangeal joint of unspecified great toe, subsequent encounter -S93523S Sprain of metatarsophalangeal joint of unspecified great toe, sequela -S93524A Sprain of metatarsophalangeal joint of right lesser toe(s), initial encounter -S93524D Sprain of metatarsophalangeal joint of right lesser toe(s), subsequent encounter -S93524S Sprain of metatarsophalangeal joint of right lesser toe(s), sequela -S93525A Sprain of metatarsophalangeal joint of left lesser toe(s), initial encounter -S93525D Sprain of metatarsophalangeal joint of left lesser toe(s), subsequent encounter -S93525S Sprain of metatarsophalangeal joint of left lesser toe(s), sequela -S93526A Sprain of metatarsophalangeal joint of unspecified lesser toe(s), initial encounter -S93526D Sprain of metatarsophalangeal joint of unspecified lesser toe(s), subsequent encounter -S93526S Sprain of metatarsophalangeal joint of unspecified lesser toe(s), sequela -S93529A Sprain of metatarsophalangeal joint of unspecified toe(s), initial encounter -S93529D Sprain of metatarsophalangeal joint of unspecified toe(s), subsequent encounter -S93529S Sprain of metatarsophalangeal joint of unspecified toe(s), sequela -S93601A Unspecified sprain of right foot, initial encounter -S93601D Unspecified sprain of right foot, subsequent encounter -S93601S Unspecified sprain of right foot, sequela -S93602A Unspecified sprain of left foot, initial encounter -S93602D Unspecified sprain of left foot, subsequent encounter -S93602S Unspecified sprain of left foot, sequela -S93609A Unspecified sprain of unspecified foot, initial encounter -S93609D Unspecified sprain of unspecified foot, subsequent encounter -S93609S Unspecified sprain of unspecified foot, sequela -S93611A Sprain of tarsal ligament of right foot, initial encounter -S93611D Sprain of tarsal ligament of right foot, subsequent encounter -S93611S Sprain of tarsal ligament of right foot, sequela -S93612A Sprain of tarsal ligament of left foot, initial encounter -S93612D Sprain of tarsal ligament of left foot, subsequent encounter -S93612S Sprain of tarsal ligament of left foot, sequela -S93619A Sprain of tarsal ligament of unspecified foot, initial encounter -S93619D Sprain of tarsal ligament of unspecified foot, subsequent encounter -S93619S Sprain of tarsal ligament of unspecified foot, sequela -S93621A Sprain of tarsometatarsal ligament of right foot, initial encounter -S93621D Sprain of tarsometatarsal ligament of right foot, subsequent encounter -S93621S Sprain of tarsometatarsal ligament of right foot, sequela -S93622A Sprain of tarsometatarsal ligament of left foot, initial encounter -S93622D Sprain of tarsometatarsal ligament of left foot, subsequent encounter -S93622S Sprain of tarsometatarsal ligament of left foot, sequela -S93629A Sprain of tarsometatarsal ligament of unspecified foot, initial encounter -S93629D Sprain of tarsometatarsal ligament of unspecified foot, subsequent encounter -S93629S Sprain of tarsometatarsal ligament of unspecified foot, sequela -S93691A Other sprain of right foot, initial encounter -S93691D Other sprain of right foot, subsequent encounter -S93691S Other sprain of right foot, sequela -S93692A Other sprain of left foot, initial encounter -S93692D Other sprain of left foot, subsequent encounter -S93692S Other sprain of left foot, sequela -S93699A Other sprain of unspecified foot, initial encounter -S93699D Other sprain of unspecified foot, subsequent encounter -S93699S Other sprain of unspecified foot, sequela -S9400XA Injury of lateral plantar nerve, unspecified leg, initial encounter -S9400XD Injury of lateral plantar nerve, unspecified leg, subsequent encounter -S9400XS Injury of lateral plantar nerve, unspecified leg, sequela -S9401XA Injury of lateral plantar nerve, right leg, initial encounter -S9401XD Injury of lateral plantar nerve, right leg, subsequent encounter -S9401XS Injury of lateral plantar nerve, right leg, sequela -S9402XA Injury of lateral plantar nerve, left leg, initial encounter -S9402XD Injury of lateral plantar nerve, left leg, subsequent encounter -S9402XS Injury of lateral plantar nerve, left leg, sequela -S9410XA Injury of medial plantar nerve, unspecified leg, initial encounter -S9410XD Injury of medial plantar nerve, unspecified leg, subsequent encounter -S9410XS Injury of medial plantar nerve, unspecified leg, sequela -S9411XA Injury of medial plantar nerve, right leg, initial encounter -S9411XD Injury of medial plantar nerve, right leg, subsequent encounter -S9411XS Injury of medial plantar nerve, right leg, sequela -S9412XA Injury of medial plantar nerve, left leg, initial encounter -S9412XD Injury of medial plantar nerve, left leg, subsequent encounter -S9412XS Injury of medial plantar nerve, left leg, sequela -S9420XA Injury of deep peroneal nerve at ankle and foot level, unspecified leg, initial encounter -S9420XD Injury of deep peroneal nerve at ankle and foot level, unspecified leg, subsequent encounter -S9420XS Injury of deep peroneal nerve at ankle and foot level, unspecified leg, sequela -S9421XA Injury of deep peroneal nerve at ankle and foot level, right leg, initial encounter -S9421XD Injury of deep peroneal nerve at ankle and foot level, right leg, subsequent encounter -S9421XS Injury of deep peroneal nerve at ankle and foot level, right leg, sequela -S9422XA Injury of deep peroneal nerve at ankle and foot level, left leg, initial encounter -S9422XD Injury of deep peroneal nerve at ankle and foot level, left leg, subsequent encounter -S9422XS Injury of deep peroneal nerve at ankle and foot level, left leg, sequela -S9430XA Injury of cutaneous sensory nerve at ankle and foot level, unspecified leg, initial encounter -S9430XD Injury of cutaneous sensory nerve at ankle and foot level, unspecified leg, subsequent encounter -S9430XS Injury of cutaneous sensory nerve at ankle and foot level, unspecified leg, sequela -S9431XA Injury of cutaneous sensory nerve at ankle and foot level, right leg, initial encounter -S9431XD Injury of cutaneous sensory nerve at ankle and foot level, right leg, subsequent encounter -S9431XS Injury of cutaneous sensory nerve at ankle and foot level, right leg, sequela -S9432XA Injury of cutaneous sensory nerve at ankle and foot level, left leg, initial encounter -S9432XD Injury of cutaneous sensory nerve at ankle and foot level, left leg, subsequent encounter -S9432XS Injury of cutaneous sensory nerve at ankle and foot level, left leg, sequela -S948X1A Injury of other nerves at ankle and foot level, right leg, initial encounter -S948X1D Injury of other nerves at ankle and foot level, right leg, subsequent encounter -S948X1S Injury of other nerves at ankle and foot level, right leg, sequela -S948X2A Injury of other nerves at ankle and foot level, left leg, initial encounter -S948X2D Injury of other nerves at ankle and foot level, left leg, subsequent encounter -S948X2S Injury of other nerves at ankle and foot level, left leg, sequela -S948X9A Injury of other nerves at ankle and foot level, unspecified leg, initial encounter -S948X9D Injury of other nerves at ankle and foot level, unspecified leg, subsequent encounter -S948X9S Injury of other nerves at ankle and foot level, unspecified leg, sequela -S9490XA Injury of unspecified nerve at ankle and foot level, unspecified leg, initial encounter -S9490XD Injury of unspecified nerve at ankle and foot level, unspecified leg, subsequent encounter -S9490XS Injury of unspecified nerve at ankle and foot level, unspecified leg, sequela -S9491XA Injury of unspecified nerve at ankle and foot level, right leg, initial encounter -S9491XD Injury of unspecified nerve at ankle and foot level, right leg, subsequent encounter -S9491XS Injury of unspecified nerve at ankle and foot level, right leg, sequela -S9492XA Injury of unspecified nerve at ankle and foot level, left leg, initial encounter -S9492XD Injury of unspecified nerve at ankle and foot level, left leg, subsequent encounter -S9492XS Injury of unspecified nerve at ankle and foot level, left leg, sequela -S95001A Unspecified injury of dorsal artery of right foot, initial encounter -S95001D Unspecified injury of dorsal artery of right foot, subsequent encounter -S95001S Unspecified injury of dorsal artery of right foot, sequela -S95002A Unspecified injury of dorsal artery of left foot, initial encounter -S95002D Unspecified injury of dorsal artery of left foot, subsequent encounter -S95002S Unspecified injury of dorsal artery of left foot, sequela -S95009A Unspecified injury of dorsal artery of unspecified foot, initial encounter -S95009D Unspecified injury of dorsal artery of unspecified foot, subsequent encounter -S95009S Unspecified injury of dorsal artery of unspecified foot, sequela -S95011A Laceration of dorsal artery of right foot, initial encounter -S95011D Laceration of dorsal artery of right foot, subsequent encounter -S95011S Laceration of dorsal artery of right foot, sequela -S95012A Laceration of dorsal artery of left foot, initial encounter -S95012D Laceration of dorsal artery of left foot, subsequent encounter -S95012S Laceration of dorsal artery of left foot, sequela -S95019A Laceration of dorsal artery of unspecified foot, initial encounter -S95019D Laceration of dorsal artery of unspecified foot, subsequent encounter -S95019S Laceration of dorsal artery of unspecified foot, sequela -S95091A Other specified injury of dorsal artery of right foot, initial encounter -S95091D Other specified injury of dorsal artery of right foot, subsequent encounter -S95091S Other specified injury of dorsal artery of right foot, sequela -S95092A Other specified injury of dorsal artery of left foot, initial encounter -S95092D Other specified injury of dorsal artery of left foot, subsequent encounter -S95092S Other specified injury of dorsal artery of left foot, sequela -S95099A Other specified injury of dorsal artery of unspecified foot, initial encounter -S95099D Other specified injury of dorsal artery of unspecified foot, subsequent encounter -S95099S Other specified injury of dorsal artery of unspecified foot, sequela -S95101A Unspecified injury of plantar artery of right foot, initial encounter -S95101D Unspecified injury of plantar artery of right foot, subsequent encounter -S95101S Unspecified injury of plantar artery of right foot, sequela -S95102A Unspecified injury of plantar artery of left foot, initial encounter -S95102D Unspecified injury of plantar artery of left foot, subsequent encounter -S95102S Unspecified injury of plantar artery of left foot, sequela -S95109A Unspecified injury of plantar artery of unspecified foot, initial encounter -S95109D Unspecified injury of plantar artery of unspecified foot, subsequent encounter -S95109S Unspecified injury of plantar artery of unspecified foot, sequela -S95111A Laceration of plantar artery of right foot, initial encounter -S95111D Laceration of plantar artery of right foot, subsequent encounter -S95111S Laceration of plantar artery of right foot, sequela -S95112A Laceration of plantar artery of left foot, initial encounter -S95112D Laceration of plantar artery of left foot, subsequent encounter -S95112S Laceration of plantar artery of left foot, sequela -S95119A Laceration of plantar artery of unspecified foot, initial encounter -S95119D Laceration of plantar artery of unspecified foot, subsequent encounter -S95119S Laceration of plantar artery of unspecified foot, sequela -S95191A Other specified injury of plantar artery of right foot, initial encounter -S95191D Other specified injury of plantar artery of right foot, subsequent encounter -S95191S Other specified injury of plantar artery of right foot, sequela -S95192A Other specified injury of plantar artery of left foot, initial encounter -S95192D Other specified injury of plantar artery of left foot, subsequent encounter -S95192S Other specified injury of plantar artery of left foot, sequela -S95199A Other specified injury of plantar artery of unspecified foot, initial encounter -S95199D Other specified injury of plantar artery of unspecified foot, subsequent encounter -S95199S Other specified injury of plantar artery of unspecified foot, sequela -S95201A Unspecified injury of dorsal vein of right foot, initial encounter -S95201D Unspecified injury of dorsal vein of right foot, subsequent encounter -S95201S Unspecified injury of dorsal vein of right foot, sequela -S95202A Unspecified injury of dorsal vein of left foot, initial encounter -S95202D Unspecified injury of dorsal vein of left foot, subsequent encounter -S95202S Unspecified injury of dorsal vein of left foot, sequela -S95209A Unspecified injury of dorsal vein of unspecified foot, initial encounter -S95209D Unspecified injury of dorsal vein of unspecified foot, subsequent encounter -S95209S Unspecified injury of dorsal vein of unspecified foot, sequela -S95211A Laceration of dorsal vein of right foot, initial encounter -S95211D Laceration of dorsal vein of right foot, subsequent encounter -S95211S Laceration of dorsal vein of right foot, sequela -S95212A Laceration of dorsal vein of left foot, initial encounter -S95212D Laceration of dorsal vein of left foot, subsequent encounter -S95212S Laceration of dorsal vein of left foot, sequela -S95219A Laceration of dorsal vein of unspecified foot, initial encounter -S95219D Laceration of dorsal vein of unspecified foot, subsequent encounter -S95219S Laceration of dorsal vein of unspecified foot, sequela -S95291A Other specified injury of dorsal vein of right foot, initial encounter -S95291D Other specified injury of dorsal vein of right foot, subsequent encounter -S95291S Other specified injury of dorsal vein of right foot, sequela -S95292A Other specified injury of dorsal vein of left foot, initial encounter -S95292D Other specified injury of dorsal vein of left foot, subsequent encounter -S95292S Other specified injury of dorsal vein of left foot, sequela -S95299A Other specified injury of dorsal vein of unspecified foot, initial encounter -S95299D Other specified injury of dorsal vein of unspecified foot, subsequent encounter -S95299S Other specified injury of dorsal vein of unspecified foot, sequela -S95801A Unspecified injury of other blood vessels at ankle and foot level, right leg, initial encounter -S95801D Unspecified injury of other blood vessels at ankle and foot level, right leg, subsequent encounter -S95801S Unspecified injury of other blood vessels at ankle and foot level, right leg, sequela -S95802A Unspecified injury of other blood vessels at ankle and foot level, left leg, initial encounter -S95802D Unspecified injury of other blood vessels at ankle and foot level, left leg, subsequent encounter -S95802S Unspecified injury of other blood vessels at ankle and foot level, left leg, sequela -S95809A Unspecified injury of other blood vessels at ankle and foot level, unspecified leg, initial encounter -S95809D Unspecified injury of other blood vessels at ankle and foot level, unspecified leg, subsequent encounter -S95809S Unspecified injury of other blood vessels at ankle and foot level, unspecified leg, sequela -S95811A Laceration of other blood vessels at ankle and foot level, right leg, initial encounter -S95811D Laceration of other blood vessels at ankle and foot level, right leg, subsequent encounter -S95811S Laceration of other blood vessels at ankle and foot level, right leg, sequela -S95812A Laceration of other blood vessels at ankle and foot level, left leg, initial encounter -S95812D Laceration of other blood vessels at ankle and foot level, left leg, subsequent encounter -S95812S Laceration of other blood vessels at ankle and foot level, left leg, sequela -S95819A Laceration of other blood vessels at ankle and foot level, unspecified leg, initial encounter -S95819D Laceration of other blood vessels at ankle and foot level, unspecified leg, subsequent encounter -S95819S Laceration of other blood vessels at ankle and foot level, unspecified leg, sequela -S95891A Other specified injury of other blood vessels at ankle and foot level, right leg, initial encounter -S95891D Other specified injury of other blood vessels at ankle and foot level, right leg, subsequent encounter -S95891S Other specified injury of other blood vessels at ankle and foot level, right leg, sequela -S95892A Other specified injury of other blood vessels at ankle and foot level, left leg, initial encounter -S95892D Other specified injury of other blood vessels at ankle and foot level, left leg, subsequent encounter -S95892S Other specified injury of other blood vessels at ankle and foot level, left leg, sequela -S95899A Other specified injury of other blood vessels at ankle and foot level, unspecified leg, initial encounter -S95899D Other specified injury of other blood vessels at ankle and foot level, unspecified leg, subsequent encounter -S95899S Other specified injury of other blood vessels at ankle and foot level, unspecified leg, sequela -S95901A Unspecified injury of unspecified blood vessel at ankle and foot level, right leg, initial encounter -S95901D Unspecified injury of unspecified blood vessel at ankle and foot level, right leg, subsequent encounter -S95901S Unspecified injury of unspecified blood vessel at ankle and foot level, right leg, sequela -S95902A Unspecified injury of unspecified blood vessel at ankle and foot level, left leg, initial encounter -S95902D Unspecified injury of unspecified blood vessel at ankle and foot level, left leg, subsequent encounter -S95902S Unspecified injury of unspecified blood vessel at ankle and foot level, left leg, sequela -S95909A Unspecified injury of unspecified blood vessel at ankle and foot level, unspecified leg, initial encounter -S95909D Unspecified injury of unspecified blood vessel at ankle and foot level, unspecified leg, subsequent encounter -S95909S Unspecified injury of unspecified blood vessel at ankle and foot level, unspecified leg, sequela -S95911A Laceration of unspecified blood vessel at ankle and foot level, right leg, initial encounter -S95911D Laceration of unspecified blood vessel at ankle and foot level, right leg, subsequent encounter -S95911S Laceration of unspecified blood vessel at ankle and foot level, right leg, sequela -S95912A Laceration of unspecified blood vessel at ankle and foot level, left leg, initial encounter -S95912D Laceration of unspecified blood vessel at ankle and foot level, left leg, subsequent encounter -S95912S Laceration of unspecified blood vessel at ankle and foot level, left leg, sequela -S95919A Laceration of unspecified blood vessel at ankle and foot level, unspecified leg, initial encounter -S95919D Laceration of unspecified blood vessel at ankle and foot level, unspecified leg, subsequent encounter -S95919S Laceration of unspecified blood vessel at ankle and foot level, unspecified leg, sequela -S95991A Other specified injury of unspecified blood vessel at ankle and foot level, right leg, initial encounter -S95991D Other specified injury of unspecified blood vessel at ankle and foot level, right leg, subsequent encounter -S95991S Other specified injury of unspecified blood vessel at ankle and foot level, right leg, sequela -S95992A Other specified injury of unspecified blood vessel at ankle and foot level, left leg, initial encounter -S95992D Other specified injury of unspecified blood vessel at ankle and foot level, left leg, subsequent encounter -S95992S Other specified injury of unspecified blood vessel at ankle and foot level, left leg, sequela -S95999A Other specified injury of unspecified blood vessel at ankle and foot level, unspecified leg, initial encounter -S95999D Other specified injury of unspecified blood vessel at ankle and foot level, unspecified leg, subsequent encounter -S95999S Other specified injury of unspecified blood vessel at ankle and foot level, unspecified leg, sequela -S96001A Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, initial encounter -S96001D Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96001S Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, sequela -S96002A Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, initial encounter -S96002D Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96002S Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, sequela -S96009A Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96009D Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96009S Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, sequela -S96011A Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, initial encounter -S96011D Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96011S Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, sequela -S96012A Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, initial encounter -S96012D Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96012S Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, sequela -S96019A Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96019D Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96019S Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, sequela -S96021A Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, initial encounter -S96021D Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96021S Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, sequela -S96022A Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, initial encounter -S96022D Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96022S Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, sequela -S96029A Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96029D Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96029S Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, sequela -S96091A Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, initial encounter -S96091D Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96091S Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, sequela -S96092A Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, initial encounter -S96092D Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96092S Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, sequela -S96099A Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96099D Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96099S Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, sequela -S96101A Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, initial encounter -S96101D Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96101S Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, sequela -S96102A Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, initial encounter -S96102D Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96102S Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, sequela -S96109A Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96109D Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96109S Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, sequela -S96111A Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, initial encounter -S96111D Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96111S Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, sequela -S96112A Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, initial encounter -S96112D Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96112S Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, sequela -S96119A Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96119D Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96119S Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, sequela -S96121A Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, initial encounter -S96121D Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96121S Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, sequela -S96122A Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, initial encounter -S96122D Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96122S Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, sequela -S96129A Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96129D Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96129S Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, sequela -S96191A Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, initial encounter -S96191D Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96191S Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, sequela -S96192A Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, initial encounter -S96192D Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96192S Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, sequela -S96199A Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96199D Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96199S Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, sequela -S96201A Unspecified injury of intrinsic muscle and tendon at ankle and foot level, right foot, initial encounter -S96201D Unspecified injury of intrinsic muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96201S Unspecified injury of intrinsic muscle and tendon at ankle and foot level, right foot, sequela -S96202A Unspecified injury of intrinsic muscle and tendon at ankle and foot level, left foot, initial encounter -S96202D Unspecified injury of intrinsic muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96202S Unspecified injury of intrinsic muscle and tendon at ankle and foot level, left foot, sequela -S96209A Unspecified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96209D Unspecified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96209S Unspecified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, sequela -S96211A Strain of intrinsic muscle and tendon at ankle and foot level, right foot, initial encounter -S96211D Strain of intrinsic muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96211S Strain of intrinsic muscle and tendon at ankle and foot level, right foot, sequela -S96212A Strain of intrinsic muscle and tendon at ankle and foot level, left foot, initial encounter -S96212D Strain of intrinsic muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96212S Strain of intrinsic muscle and tendon at ankle and foot level, left foot, sequela -S96219A Strain of intrinsic muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96219D Strain of intrinsic muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96219S Strain of intrinsic muscle and tendon at ankle and foot level, unspecified foot, sequela -S96221A Laceration of intrinsic muscle and tendon at ankle and foot level, right foot, initial encounter -S96221D Laceration of intrinsic muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96221S Laceration of intrinsic muscle and tendon at ankle and foot level, right foot, sequela -S96222A Laceration of intrinsic muscle and tendon at ankle and foot level, left foot, initial encounter -S96222D Laceration of intrinsic muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96222S Laceration of intrinsic muscle and tendon at ankle and foot level, left foot, sequela -S96229A Laceration of intrinsic muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96229D Laceration of intrinsic muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96229S Laceration of intrinsic muscle and tendon at ankle and foot level, unspecified foot, sequela -S96291A Other specified injury of intrinsic muscle and tendon at ankle and foot level, right foot, initial encounter -S96291D Other specified injury of intrinsic muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96291S Other specified injury of intrinsic muscle and tendon at ankle and foot level, right foot, sequela -S96292A Other specified injury of intrinsic muscle and tendon at ankle and foot level, left foot, initial encounter -S96292D Other specified injury of intrinsic muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96292S Other specified injury of intrinsic muscle and tendon at ankle and foot level, left foot, sequela -S96299A Other specified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96299D Other specified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96299S Other specified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, sequela -S96801A Unspecified injury of other specified muscles and tendons at ankle and foot level, right foot, initial encounter -S96801D Unspecified injury of other specified muscles and tendons at ankle and foot level, right foot, subsequent encounter -S96801S Unspecified injury of other specified muscles and tendons at ankle and foot level, right foot, sequela -S96802A Unspecified injury of other specified muscles and tendons at ankle and foot level, left foot, initial encounter -S96802D Unspecified injury of other specified muscles and tendons at ankle and foot level, left foot, subsequent encounter -S96802S Unspecified injury of other specified muscles and tendons at ankle and foot level, left foot, sequela -S96809A Unspecified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, initial encounter -S96809D Unspecified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, subsequent encounter -S96809S Unspecified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, sequela -S96811A Strain of other specified muscles and tendons at ankle and foot level, right foot, initial encounter -S96811D Strain of other specified muscles and tendons at ankle and foot level, right foot, subsequent encounter -S96811S Strain of other specified muscles and tendons at ankle and foot level, right foot, sequela -S96812A Strain of other specified muscles and tendons at ankle and foot level, left foot, initial encounter -S96812D Strain of other specified muscles and tendons at ankle and foot level, left foot, subsequent encounter -S96812S Strain of other specified muscles and tendons at ankle and foot level, left foot, sequela -S96819A Strain of other specified muscles and tendons at ankle and foot level, unspecified foot, initial encounter -S96819D Strain of other specified muscles and tendons at ankle and foot level, unspecified foot, subsequent encounter -S96819S Strain of other specified muscles and tendons at ankle and foot level, unspecified foot, sequela -S96821A Laceration of other specified muscles and tendons at ankle and foot level, right foot, initial encounter -S96821D Laceration of other specified muscles and tendons at ankle and foot level, right foot, subsequent encounter -S96821S Laceration of other specified muscles and tendons at ankle and foot level, right foot, sequela -S96822A Laceration of other specified muscles and tendons at ankle and foot level, left foot, initial encounter -S96822D Laceration of other specified muscles and tendons at ankle and foot level, left foot, subsequent encounter -S96822S Laceration of other specified muscles and tendons at ankle and foot level, left foot, sequela -S96829A Laceration of other specified muscles and tendons at ankle and foot level, unspecified foot, initial encounter -S96829D Laceration of other specified muscles and tendons at ankle and foot level, unspecified foot, subsequent encounter -S96829S Laceration of other specified muscles and tendons at ankle and foot level, unspecified foot, sequela -S96891A Other specified injury of other specified muscles and tendons at ankle and foot level, right foot, initial encounter -S96891D Other specified injury of other specified muscles and tendons at ankle and foot level, right foot, subsequent encounter -S96891S Other specified injury of other specified muscles and tendons at ankle and foot level, right foot, sequela -S96892A Other specified injury of other specified muscles and tendons at ankle and foot level, left foot, initial encounter -S96892D Other specified injury of other specified muscles and tendons at ankle and foot level, left foot, subsequent encounter -S96892S Other specified injury of other specified muscles and tendons at ankle and foot level, left foot, sequela -S96899A Other specified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, initial encounter -S96899D Other specified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, subsequent encounter -S96899S Other specified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, sequela -S96901A Unspecified injury of unspecified muscle and tendon at ankle and foot level, right foot, initial encounter -S96901D Unspecified injury of unspecified muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96901S Unspecified injury of unspecified muscle and tendon at ankle and foot level, right foot, sequela -S96902A Unspecified injury of unspecified muscle and tendon at ankle and foot level, left foot, initial encounter -S96902D Unspecified injury of unspecified muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96902S Unspecified injury of unspecified muscle and tendon at ankle and foot level, left foot, sequela -S96909A Unspecified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96909D Unspecified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96909S Unspecified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, sequela -S96911A Strain of unspecified muscle and tendon at ankle and foot level, right foot, initial encounter -S96911D Strain of unspecified muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96911S Strain of unspecified muscle and tendon at ankle and foot level, right foot, sequela -S96912A Strain of unspecified muscle and tendon at ankle and foot level, left foot, initial encounter -S96912D Strain of unspecified muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96912S Strain of unspecified muscle and tendon at ankle and foot level, left foot, sequela -S96919A Strain of unspecified muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96919D Strain of unspecified muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96919S Strain of unspecified muscle and tendon at ankle and foot level, unspecified foot, sequela -S96921A Laceration of unspecified muscle and tendon at ankle and foot level, right foot, initial encounter -S96921D Laceration of unspecified muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96921S Laceration of unspecified muscle and tendon at ankle and foot level, right foot, sequela -S96922A Laceration of unspecified muscle and tendon at ankle and foot level, left foot, initial encounter -S96922D Laceration of unspecified muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96922S Laceration of unspecified muscle and tendon at ankle and foot level, left foot, sequela -S96929A Laceration of unspecified muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96929D Laceration of unspecified muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96929S Laceration of unspecified muscle and tendon at ankle and foot level, unspecified foot, sequela -S96991A Other specified injury of unspecified muscle and tendon at ankle and foot level, right foot, initial encounter -S96991D Other specified injury of unspecified muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96991S Other specified injury of unspecified muscle and tendon at ankle and foot level, right foot, sequela -S96992A Other specified injury of unspecified muscle and tendon at ankle and foot level, left foot, initial encounter -S96992D Other specified injury of unspecified muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96992S Other specified injury of unspecified muscle and tendon at ankle and foot level, left foot, sequela -S96999A Other specified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96999D Other specified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96999S Other specified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, sequela -S9700XA Crushing injury of unspecified ankle, initial encounter -S9700XD Crushing injury of unspecified ankle, subsequent encounter -S9700XS Crushing injury of unspecified ankle, sequela -S9701XA Crushing injury of right ankle, initial encounter -S9701XD Crushing injury of right ankle, subsequent encounter -S9701XS Crushing injury of right ankle, sequela -S9702XA Crushing injury of left ankle, initial encounter -S9702XD Crushing injury of left ankle, subsequent encounter -S9702XS Crushing injury of left ankle, sequela -S97101A Crushing injury of unspecified right toe(s), initial encounter -S97101D Crushing injury of unspecified right toe(s), subsequent encounter -S97101S Crushing injury of unspecified right toe(s), sequela -S97102A Crushing injury of unspecified left toe(s), initial encounter -S97102D Crushing injury of unspecified left toe(s), subsequent encounter -S97102S Crushing injury of unspecified left toe(s), sequela -S97109A Crushing injury of unspecified toe(s), initial encounter -S97109D Crushing injury of unspecified toe(s), subsequent encounter -S97109S Crushing injury of unspecified toe(s), sequela -S97111A Crushing injury of right great toe, initial encounter -S97111D Crushing injury of right great toe, subsequent encounter -S97111S Crushing injury of right great toe, sequela -S97112A Crushing injury of left great toe, initial encounter -S97112D Crushing injury of left great toe, subsequent encounter -S97112S Crushing injury of left great toe, sequela -S97119A Crushing injury of unspecified great toe, initial encounter -S97119D Crushing injury of unspecified great toe, subsequent encounter -S97119S Crushing injury of unspecified great toe, sequela -S97121A Crushing injury of right lesser toe(s), initial encounter -S97121D Crushing injury of right lesser toe(s), subsequent encounter -S97121S Crushing injury of right lesser toe(s), sequela -S97122A Crushing injury of left lesser toe(s), initial encounter -S97122D Crushing injury of left lesser toe(s), subsequent encounter -S97122S Crushing injury of left lesser toe(s), sequela -S97129A Crushing injury of unspecified lesser toe(s), initial encounter -S97129D Crushing injury of unspecified lesser toe(s), subsequent encounter -S97129S Crushing injury of unspecified lesser toe(s), sequela -S9780XA Crushing injury of unspecified foot, initial encounter -S9780XD Crushing injury of unspecified foot, subsequent encounter -S9780XS Crushing injury of unspecified foot, sequela -S9781XA Crushing injury of right foot, initial encounter -S9781XD Crushing injury of right foot, subsequent encounter -S9781XS Crushing injury of right foot, sequela -S9782XA Crushing injury of left foot, initial encounter -S9782XD Crushing injury of left foot, subsequent encounter -S9782XS Crushing injury of left foot, sequela -S98011A Complete traumatic amputation of right foot at ankle level, initial encounter -S98011D Complete traumatic amputation of right foot at ankle level, subsequent encounter -S98011S Complete traumatic amputation of right foot at ankle level, sequela -S98012A Complete traumatic amputation of left foot at ankle level, initial encounter -S98012D Complete traumatic amputation of left foot at ankle level, subsequent encounter -S98012S Complete traumatic amputation of left foot at ankle level, sequela -S98019A Complete traumatic amputation of unspecified foot at ankle level, initial encounter -S98019D Complete traumatic amputation of unspecified foot at ankle level, subsequent encounter -S98019S Complete traumatic amputation of unspecified foot at ankle level, sequela -S98021A Partial traumatic amputation of right foot at ankle level, initial encounter -S98021D Partial traumatic amputation of right foot at ankle level, subsequent encounter -S98021S Partial traumatic amputation of right foot at ankle level, sequela -S98022A Partial traumatic amputation of left foot at ankle level, initial encounter -S98022D Partial traumatic amputation of left foot at ankle level, subsequent encounter -S98022S Partial traumatic amputation of left foot at ankle level, sequela -S98029A Partial traumatic amputation of unspecified foot at ankle level, initial encounter -S98029D Partial traumatic amputation of unspecified foot at ankle level, subsequent encounter -S98029S Partial traumatic amputation of unspecified foot at ankle level, sequela -S98111A Complete traumatic amputation of right great toe, initial encounter -S98111D Complete traumatic amputation of right great toe, subsequent encounter -S98111S Complete traumatic amputation of right great toe, sequela -S98112A Complete traumatic amputation of left great toe, initial encounter -S98112D Complete traumatic amputation of left great toe, subsequent encounter -S98112S Complete traumatic amputation of left great toe, sequela -S98119A Complete traumatic amputation of unspecified great toe, initial encounter -S98119D Complete traumatic amputation of unspecified great toe, subsequent encounter -S98119S Complete traumatic amputation of unspecified great toe, sequela -S98121A Partial traumatic amputation of right great toe, initial encounter -S98121D Partial traumatic amputation of right great toe, subsequent encounter -S98121S Partial traumatic amputation of right great toe, sequela -S98122A Partial traumatic amputation of left great toe, initial encounter -S98122D Partial traumatic amputation of left great toe, subsequent encounter -S98122S Partial traumatic amputation of left great toe, sequela -S98129A Partial traumatic amputation of unspecified great toe, initial encounter -S98129D Partial traumatic amputation of unspecified great toe, subsequent encounter -S98129S Partial traumatic amputation of unspecified great toe, sequela -S98131A Complete traumatic amputation of one right lesser toe, initial encounter -S98131D Complete traumatic amputation of one right lesser toe, subsequent encounter -S98131S Complete traumatic amputation of one right lesser toe, sequela -S98132A Complete traumatic amputation of one left lesser toe, initial encounter -S98132D Complete traumatic amputation of one left lesser toe, subsequent encounter -S98132S Complete traumatic amputation of one left lesser toe, sequela -S98139A Complete traumatic amputation of one unspecified lesser toe, initial encounter -S98139D Complete traumatic amputation of one unspecified lesser toe, subsequent encounter -S98139S Complete traumatic amputation of one unspecified lesser toe, sequela -S98141A Partial traumatic amputation of one right lesser toe, initial encounter -S98141D Partial traumatic amputation of one right lesser toe, subsequent encounter -S98141S Partial traumatic amputation of one right lesser toe, sequela -S98142A Partial traumatic amputation of one left lesser toe, initial encounter -S98142D Partial traumatic amputation of one left lesser toe, subsequent encounter -S98142S Partial traumatic amputation of one left lesser toe, sequela -S98149A Partial traumatic amputation of one unspecified lesser toe, initial encounter -S98149D Partial traumatic amputation of one unspecified lesser toe, subsequent encounter -S98149S Partial traumatic amputation of one unspecified lesser toe, sequela -S98211A Complete traumatic amputation of two or more right lesser toes, initial encounter -S98211D Complete traumatic amputation of two or more right lesser toes, subsequent encounter -S98211S Complete traumatic amputation of two or more right lesser toes, sequela -S98212A Complete traumatic amputation of two or more left lesser toes, initial encounter -S98212D Complete traumatic amputation of two or more left lesser toes, subsequent encounter -S98212S Complete traumatic amputation of two or more left lesser toes, sequela -S98219A Complete traumatic amputation of two or more unspecified lesser toes, initial encounter -S98219D Complete traumatic amputation of two or more unspecified lesser toes, subsequent encounter -S98219S Complete traumatic amputation of two or more unspecified lesser toes, sequela -S98221A Partial traumatic amputation of two or more right lesser toes, initial encounter -S98221D Partial traumatic amputation of two or more right lesser toes, subsequent encounter -S98221S Partial traumatic amputation of two or more right lesser toes, sequela -S98222A Partial traumatic amputation of two or more left lesser toes, initial encounter -S98222D Partial traumatic amputation of two or more left lesser toes, subsequent encounter -S98222S Partial traumatic amputation of two or more left lesser toes, sequela -S98229A Partial traumatic amputation of two or more unspecified lesser toes, initial encounter -S98229D Partial traumatic amputation of two or more unspecified lesser toes, subsequent encounter -S98229S Partial traumatic amputation of two or more unspecified lesser toes, sequela -S98311A Complete traumatic amputation of right midfoot, initial encounter -S98311D Complete traumatic amputation of right midfoot, subsequent encounter -S98311S Complete traumatic amputation of right midfoot, sequela -S98312A Complete traumatic amputation of left midfoot, initial encounter -S98312D Complete traumatic amputation of left midfoot, subsequent encounter -S98312S Complete traumatic amputation of left midfoot, sequela -S98319A Complete traumatic amputation of unspecified midfoot, initial encounter -S98319D Complete traumatic amputation of unspecified midfoot, subsequent encounter -S98319S Complete traumatic amputation of unspecified midfoot, sequela -S98321A Partial traumatic amputation of right midfoot, initial encounter -S98321D Partial traumatic amputation of right midfoot, subsequent encounter -S98321S Partial traumatic amputation of right midfoot, sequela -S98322A Partial traumatic amputation of left midfoot, initial encounter -S98322D Partial traumatic amputation of left midfoot, subsequent encounter -S98322S Partial traumatic amputation of left midfoot, sequela -S98329A Partial traumatic amputation of unspecified midfoot, initial encounter -S98329D Partial traumatic amputation of unspecified midfoot, subsequent encounter -S98329S Partial traumatic amputation of unspecified midfoot, sequela -S98911A Complete traumatic amputation of right foot, level unspecified, initial encounter -S98911D Complete traumatic amputation of right foot, level unspecified, subsequent encounter -S98911S Complete traumatic amputation of right foot, level unspecified, sequela -S98912A Complete traumatic amputation of left foot, level unspecified, initial encounter -S98912D Complete traumatic amputation of left foot, level unspecified, subsequent encounter -S98912S Complete traumatic amputation of left foot, level unspecified, sequela -S98919A Complete traumatic amputation of unspecified foot, level unspecified, initial encounter -S98919D Complete traumatic amputation of unspecified foot, level unspecified, subsequent encounter -S98919S Complete traumatic amputation of unspecified foot, level unspecified, sequela -S98921A Partial traumatic amputation of right foot, level unspecified, initial encounter -S98921D Partial traumatic amputation of right foot, level unspecified, subsequent encounter -S98921S Partial traumatic amputation of right foot, level unspecified, sequela -S98922A Partial traumatic amputation of left foot, level unspecified, initial encounter -S98922D Partial traumatic amputation of left foot, level unspecified, subsequent encounter -S98922S Partial traumatic amputation of left foot, level unspecified, sequela -S98929A Partial traumatic amputation of unspecified foot, level unspecified, initial encounter -S98929D Partial traumatic amputation of unspecified foot, level unspecified, subsequent encounter -S98929S Partial traumatic amputation of unspecified foot, level unspecified, sequela -S99811A Other specified injuries of right ankle, initial encounter -S99811D Other specified injuries of right ankle, subsequent encounter -S99811S Other specified injuries of right ankle, sequela -S99812A Other specified injuries of left ankle, initial encounter -S99812D Other specified injuries of left ankle, subsequent encounter -S99812S Other specified injuries of left ankle, sequela -S99819A Other specified injuries of unspecified ankle, initial encounter -S99819D Other specified injuries of unspecified ankle, subsequent encounter -S99819S Other specified injuries of unspecified ankle, sequela -S99821A Other specified injuries of right foot, initial encounter -S99821D Other specified injuries of right foot, subsequent encounter -S99821S Other specified injuries of right foot, sequela -S99822A Other specified injuries of left foot, initial encounter -S99822D Other specified injuries of left foot, subsequent encounter -S99822S Other specified injuries of left foot, sequela -S99829A Other specified injuries of unspecified foot, initial encounter -S99829D Other specified injuries of unspecified foot, subsequent encounter -S99829S Other specified injuries of unspecified foot, sequela -S99911A Unspecified injury of right ankle, initial encounter -S99911D Unspecified injury of right ankle, subsequent encounter -S99911S Unspecified injury of right ankle, sequela -S99912A Unspecified injury of left ankle, initial encounter -S99912D Unspecified injury of left ankle, subsequent encounter -S99912S Unspecified injury of left ankle, sequela -S99919A Unspecified injury of unspecified ankle, initial encounter -S99919D Unspecified injury of unspecified ankle, subsequent encounter -S99919S Unspecified injury of unspecified ankle, sequela -S99921A Unspecified injury of right foot, initial encounter -S99921D Unspecified injury of right foot, subsequent encounter -S99921S Unspecified injury of right foot, sequela -S99922A Unspecified injury of left foot, initial encounter -S99922D Unspecified injury of left foot, subsequent encounter -S99922S Unspecified injury of left foot, sequela -S99929A Unspecified injury of unspecified foot, initial encounter -S99929D Unspecified injury of unspecified foot, subsequent encounter -S99929S Unspecified injury of unspecified foot, sequela -T07 Unspecified multiple injuries -T148 Other injury of unspecified body region -T1490 Injury, unspecified -T1491 Suicide attempt -T1500XA Foreign body in cornea, unspecified eye, initial encounter -T1500XD Foreign body in cornea, unspecified eye, subsequent encounter -T1500XS Foreign body in cornea, unspecified eye, sequela -T1501XA Foreign body in cornea, right eye, initial encounter -T1501XD Foreign body in cornea, right eye, subsequent encounter -T1501XS Foreign body in cornea, right eye, sequela -T1502XA Foreign body in cornea, left eye, initial encounter -T1502XD Foreign body in cornea, left eye, subsequent encounter -T1502XS Foreign body in cornea, left eye, sequela -T1510XA Foreign body in conjunctival sac, unspecified eye, initial encounter -T1510XD Foreign body in conjunctival sac, unspecified eye, subsequent encounter -T1510XS Foreign body in conjunctival sac, unspecified eye, sequela -T1511XA Foreign body in conjunctival sac, right eye, initial encounter -T1511XD Foreign body in conjunctival sac, right eye, subsequent encounter -T1511XS Foreign body in conjunctival sac, right eye, sequela -T1512XA Foreign body in conjunctival sac, left eye, initial encounter -T1512XD Foreign body in conjunctival sac, left eye, subsequent encounter -T1512XS Foreign body in conjunctival sac, left eye, sequela -T1580XA Foreign body in other and multiple parts of external eye, unspecified eye, initial encounter -T1580XD Foreign body in other and multiple parts of external eye, unspecified eye, subsequent encounter -T1580XS Foreign body in other and multiple parts of external eye, unspecified eye, sequela -T1581XA Foreign body in other and multiple parts of external eye, right eye, initial encounter -T1581XD Foreign body in other and multiple parts of external eye, right eye, subsequent encounter -T1581XS Foreign body in other and multiple parts of external eye, right eye, sequela -T1582XA Foreign body in other and multiple parts of external eye, left eye, initial encounter -T1582XD Foreign body in other and multiple parts of external eye, left eye, subsequent encounter -T1582XS Foreign body in other and multiple parts of external eye, left eye, sequela -T1590XA Foreign body on external eye, part unspecified, unspecified eye, initial encounter -T1590XD Foreign body on external eye, part unspecified, unspecified eye, subsequent encounter -T1590XS Foreign body on external eye, part unspecified, unspecified eye, sequela -T1591XA Foreign body on external eye, part unspecified, right eye, initial encounter -T1591XD Foreign body on external eye, part unspecified, right eye, subsequent encounter -T1591XS Foreign body on external eye, part unspecified, right eye, sequela -T1592XA Foreign body on external eye, part unspecified, left eye, initial encounter -T1592XD Foreign body on external eye, part unspecified, left eye, subsequent encounter -T1592XS Foreign body on external eye, part unspecified, left eye, sequela -T161XXA Foreign body in right ear, initial encounter -T161XXD Foreign body in right ear, subsequent encounter -T161XXS Foreign body in right ear, sequela -T162XXA Foreign body in left ear, initial encounter -T162XXD Foreign body in left ear, subsequent encounter -T162XXS Foreign body in left ear, sequela -T169XXA Foreign body in ear, unspecified ear, initial encounter -T169XXD Foreign body in ear, unspecified ear, subsequent encounter -T169XXS Foreign body in ear, unspecified ear, sequela -T170XXA Foreign body in nasal sinus, initial encounter -T170XXD Foreign body in nasal sinus, subsequent encounter -T170XXS Foreign body in nasal sinus, sequela -T171XXA Foreign body in nostril, initial encounter -T171XXD Foreign body in nostril, subsequent encounter -T171XXS Foreign body in nostril, sequela -T17200A Unspecified foreign body in pharynx causing asphyxiation, initial encounter -T17200D Unspecified foreign body in pharynx causing asphyxiation, subsequent encounter -T17200S Unspecified foreign body in pharynx causing asphyxiation, sequela -T17208A Unspecified foreign body in pharynx causing other injury, initial encounter -T17208D Unspecified foreign body in pharynx causing other injury, subsequent encounter -T17208S Unspecified foreign body in pharynx causing other injury, sequela -T17210A Gastric contents in pharynx causing asphyxiation, initial encounter -T17210D Gastric contents in pharynx causing asphyxiation, subsequent encounter -T17210S Gastric contents in pharynx causing asphyxiation, sequela -T17218A Gastric contents in pharynx causing other injury, initial encounter -T17218D Gastric contents in pharynx causing other injury, subsequent encounter -T17218S Gastric contents in pharynx causing other injury, sequela -T17220A Food in pharynx causing asphyxiation, initial encounter -T17220D Food in pharynx causing asphyxiation, subsequent encounter -T17220S Food in pharynx causing asphyxiation, sequela -T17228A Food in pharynx causing other injury, initial encounter -T17228D Food in pharynx causing other injury, subsequent encounter -T17228S Food in pharynx causing other injury, sequela -T17290A Other foreign object in pharynx causing asphyxiation, initial encounter -T17290D Other foreign object in pharynx causing asphyxiation, subsequent encounter -T17290S Other foreign object in pharynx causing asphyxiation, sequela -T17298A Other foreign object in pharynx causing other injury, initial encounter -T17298D Other foreign object in pharynx causing other injury, subsequent encounter -T17298S Other foreign object in pharynx causing other injury, sequela -T17300A Unspecified foreign body in larynx causing asphyxiation, initial encounter -T17300D Unspecified foreign body in larynx causing asphyxiation, subsequent encounter -T17300S Unspecified foreign body in larynx causing asphyxiation, sequela -T17308A Unspecified foreign body in larynx causing other injury, initial encounter -T17308D Unspecified foreign body in larynx causing other injury, subsequent encounter -T17308S Unspecified foreign body in larynx causing other injury, sequela -T17310A Gastric contents in larynx causing asphyxiation, initial encounter -T17310D Gastric contents in larynx causing asphyxiation, subsequent encounter -T17310S Gastric contents in larynx causing asphyxiation, sequela -T17318A Gastric contents in larynx causing other injury, initial encounter -T17318D Gastric contents in larynx causing other injury, subsequent encounter -T17318S Gastric contents in larynx causing other injury, sequela -T17320A Food in larynx causing asphyxiation, initial encounter -T17320D Food in larynx causing asphyxiation, subsequent encounter -T17320S Food in larynx causing asphyxiation, sequela -T17328A Food in larynx causing other injury, initial encounter -T17328D Food in larynx causing other injury, subsequent encounter -T17328S Food in larynx causing other injury, sequela -T17390A Other foreign object in larynx causing asphyxiation, initial encounter -T17390D Other foreign object in larynx causing asphyxiation, subsequent encounter -T17390S Other foreign object in larynx causing asphyxiation, sequela -T17398A Other foreign object in larynx causing other injury, initial encounter -T17398D Other foreign object in larynx causing other injury, subsequent encounter -T17398S Other foreign object in larynx causing other injury, sequela -T17400A Unspecified foreign body in trachea causing asphyxiation, initial encounter -T17400D Unspecified foreign body in trachea causing asphyxiation, subsequent encounter -T17400S Unspecified foreign body in trachea causing asphyxiation, sequela -T17408A Unspecified foreign body in trachea causing other injury, initial encounter -T17408D Unspecified foreign body in trachea causing other injury, subsequent encounter -T17408S Unspecified foreign body in trachea causing other injury, sequela -T17410A Gastric contents in trachea causing asphyxiation, initial encounter -T17410D Gastric contents in trachea causing asphyxiation, subsequent encounter -T17410S Gastric contents in trachea causing asphyxiation, sequela -T17418A Gastric contents in trachea causing other injury, initial encounter -T17418D Gastric contents in trachea causing other injury, subsequent encounter -T17418S Gastric contents in trachea causing other injury, sequela -T17420A Food in trachea causing asphyxiation, initial encounter -T17420D Food in trachea causing asphyxiation, subsequent encounter -T17420S Food in trachea causing asphyxiation, sequela -T17428A Food in trachea causing other injury, initial encounter -T17428D Food in trachea causing other injury, subsequent encounter -T17428S Food in trachea causing other injury, sequela -T17490A Other foreign object in trachea causing asphyxiation, initial encounter -T17490D Other foreign object in trachea causing asphyxiation, subsequent encounter -T17490S Other foreign object in trachea causing asphyxiation, sequela -T17498A Other foreign object in trachea causing other injury, initial encounter -T17498D Other foreign object in trachea causing other injury, subsequent encounter -T17498S Other foreign object in trachea causing other injury, sequela -T17500A Unspecified foreign body in bronchus causing asphyxiation, initial encounter -T17500D Unspecified foreign body in bronchus causing asphyxiation, subsequent encounter -T17500S Unspecified foreign body in bronchus causing asphyxiation, sequela -T17508A Unspecified foreign body in bronchus causing other injury, initial encounter -T17508D Unspecified foreign body in bronchus causing other injury, subsequent encounter -T17508S Unspecified foreign body in bronchus causing other injury, sequela -T17510A Gastric contents in bronchus causing asphyxiation, initial encounter -T17510D Gastric contents in bronchus causing asphyxiation, subsequent encounter -T17510S Gastric contents in bronchus causing asphyxiation, sequela -T17518A Gastric contents in bronchus causing other injury, initial encounter -T17518D Gastric contents in bronchus causing other injury, subsequent encounter -T17518S Gastric contents in bronchus causing other injury, sequela -T17520A Food in bronchus causing asphyxiation, initial encounter -T17520D Food in bronchus causing asphyxiation, subsequent encounter -T17520S Food in bronchus causing asphyxiation, sequela -T17528A Food in bronchus causing other injury, initial encounter -T17528D Food in bronchus causing other injury, subsequent encounter -T17528S Food in bronchus causing other injury, sequela -T17590A Other foreign object in bronchus causing asphyxiation, initial encounter -T17590D Other foreign object in bronchus causing asphyxiation, subsequent encounter -T17590S Other foreign object in bronchus causing asphyxiation, sequela -T17598A Other foreign object in bronchus causing other injury, initial encounter -T17598D Other foreign object in bronchus causing other injury, subsequent encounter -T17598S Other foreign object in bronchus causing other injury, sequela -T17800A Unspecified foreign body in other parts of respiratory tract causing asphyxiation, initial encounter -T17800D Unspecified foreign body in other parts of respiratory tract causing asphyxiation, subsequent encounter -T17800S Unspecified foreign body in other parts of respiratory tract causing asphyxiation, sequela -T17808A Unspecified foreign body in other parts of respiratory tract causing other injury, initial encounter -T17808D Unspecified foreign body in other parts of respiratory tract causing other injury, subsequent encounter -T17808S Unspecified foreign body in other parts of respiratory tract causing other injury, sequela -T17810A Gastric contents in other parts of respiratory tract causing asphyxiation, initial encounter -T17810D Gastric contents in other parts of respiratory tract causing asphyxiation, subsequent encounter -T17810S Gastric contents in other parts of respiratory tract causing asphyxiation, sequela -T17818A Gastric contents in other parts of respiratory tract causing other injury, initial encounter -T17818D Gastric contents in other parts of respiratory tract causing other injury, subsequent encounter -T17818S Gastric contents in other parts of respiratory tract causing other injury, sequela -T17820A Food in other parts of respiratory tract causing asphyxiation, initial encounter -T17820D Food in other parts of respiratory tract causing asphyxiation, subsequent encounter -T17820S Food in other parts of respiratory tract causing asphyxiation, sequela -T17828A Food in other parts of respiratory tract causing other injury, initial encounter -T17828D Food in other parts of respiratory tract causing other injury, subsequent encounter -T17828S Food in other parts of respiratory tract causing other injury, sequela -T17890A Other foreign object in other parts of respiratory tract causing asphyxiation, initial encounter -T17890D Other foreign object in other parts of respiratory tract causing asphyxiation, subsequent encounter -T17890S Other foreign object in other parts of respiratory tract causing asphyxiation, sequela -T17898A Other foreign object in other parts of respiratory tract causing other injury, initial encounter -T17898D Other foreign object in other parts of respiratory tract causing other injury, subsequent encounter -T17898S Other foreign object in other parts of respiratory tract causing other injury, sequela -T17900A Unspecified foreign body in respiratory tract, part unspecified causing asphyxiation, initial encounter -T17900D Unspecified foreign body in respiratory tract, part unspecified causing asphyxiation, subsequent encounter -T17900S Unspecified foreign body in respiratory tract, part unspecified causing asphyxiation, sequela -T17908A Unspecified foreign body in respiratory tract, part unspecified causing other injury, initial encounter -T17908D Unspecified foreign body in respiratory tract, part unspecified causing other injury, subsequent encounter -T17908S Unspecified foreign body in respiratory tract, part unspecified causing other injury, sequela -T17910A Gastric contents in respiratory tract, part unspecified causing asphyxiation, initial encounter -T17910D Gastric contents in respiratory tract, part unspecified causing asphyxiation, subsequent encounter -T17910S Gastric contents in respiratory tract, part unspecified causing asphyxiation, sequela -T17918A Gastric contents in respiratory tract, part unspecified causing other injury, initial encounter -T17918D Gastric contents in respiratory tract, part unspecified causing other injury, subsequent encounter -T17918S Gastric contents in respiratory tract, part unspecified causing other injury, sequela -T17920A Food in respiratory tract, part unspecified causing asphyxiation, initial encounter -T17920D Food in respiratory tract, part unspecified causing asphyxiation, subsequent encounter -T17920S Food in respiratory tract, part unspecified causing asphyxiation, sequela -T17928A Food in respiratory tract, part unspecified causing other injury, initial encounter -T17928D Food in respiratory tract, part unspecified causing other injury, subsequent encounter -T17928S Food in respiratory tract, part unspecified causing other injury, sequela -T17990A Other foreign object in respiratory tract, part unspecified in causing asphyxiation, initial encounter -T17990D Other foreign object in respiratory tract, part unspecified in causing asphyxiation, subsequent encounter -T17990S Other foreign object in respiratory tract, part unspecified in causing asphyxiation, sequela -T17998A Other foreign object in respiratory tract, part unspecified causing other injury, initial encounter -T17998D Other foreign object in respiratory tract, part unspecified causing other injury, subsequent encounter -T17998S Other foreign object in respiratory tract, part unspecified causing other injury, sequela -T180XXA Foreign body in mouth, initial encounter -T180XXD Foreign body in mouth, subsequent encounter -T180XXS Foreign body in mouth, sequela -T18100A Unspecified foreign body in esophagus causing compression of trachea, initial encounter -T18100D Unspecified foreign body in esophagus causing compression of trachea, subsequent encounter -T18100S Unspecified foreign body in esophagus causing compression of trachea, sequela -T18108A Unspecified foreign body in esophagus causing other injury, initial encounter -T18108D Unspecified foreign body in esophagus causing other injury, subsequent encounter -T18108S Unspecified foreign body in esophagus causing other injury, sequela -T18110A Gastric contents in esophagus causing compression of trachea, initial encounter -T18110D Gastric contents in esophagus causing compression of trachea, subsequent encounter -T18110S Gastric contents in esophagus causing compression of trachea, sequela -T18118A Gastric contents in esophagus causing other injury, initial encounter -T18118D Gastric contents in esophagus causing other injury, subsequent encounter -T18118S Gastric contents in esophagus causing other injury, sequela -T18120A Food in esophagus causing compression of trachea, initial encounter -T18120D Food in esophagus causing compression of trachea, subsequent encounter -T18120S Food in esophagus causing compression of trachea, sequela -T18128A Food in esophagus causing other injury, initial encounter -T18128D Food in esophagus causing other injury, subsequent encounter -T18128S Food in esophagus causing other injury, sequela -T18190A Other foreign object in esophagus causing compression of trachea, initial encounter -T18190D Other foreign object in esophagus causing compression of trachea, subsequent encounter -T18190S Other foreign object in esophagus causing compression of trachea, sequela -T18198A Other foreign object in esophagus causing other injury, initial encounter -T18198D Other foreign object in esophagus causing other injury, subsequent encounter -T18198S Other foreign object in esophagus causing other injury, sequela -T182XXA Foreign body in stomach, initial encounter -T182XXD Foreign body in stomach, subsequent encounter -T182XXS Foreign body in stomach, sequela -T183XXA Foreign body in small intestine, initial encounter -T183XXD Foreign body in small intestine, subsequent encounter -T183XXS Foreign body in small intestine, sequela -T184XXA Foreign body in colon, initial encounter -T184XXD Foreign body in colon, subsequent encounter -T184XXS Foreign body in colon, sequela -T185XXA Foreign body in anus and rectum, initial encounter -T185XXD Foreign body in anus and rectum, subsequent encounter -T185XXS Foreign body in anus and rectum, sequela -T188XXA Foreign body in other parts of alimentary tract, initial encounter -T188XXD Foreign body in other parts of alimentary tract, subsequent encounter -T188XXS Foreign body in other parts of alimentary tract, sequela -T189XXA Foreign body of alimentary tract, part unspecified, initial encounter -T189XXD Foreign body of alimentary tract, part unspecified, subsequent encounter -T189XXS Foreign body of alimentary tract, part unspecified, sequela -T190XXA Foreign body in urethra, initial encounter -T190XXD Foreign body in urethra, subsequent encounter -T190XXS Foreign body in urethra, sequela -T191XXA Foreign body in bladder, initial encounter -T191XXD Foreign body in bladder, subsequent encounter -T191XXS Foreign body in bladder, sequela -T192XXA Foreign body in vulva and vagina, initial encounter -T192XXD Foreign body in vulva and vagina, subsequent encounter -T192XXS Foreign body in vulva and vagina, sequela -T193XXA Foreign body in uterus, initial encounter -T193XXD Foreign body in uterus, subsequent encounter -T193XXS Foreign body in uterus, sequela -T194XXA Foreign body in penis, initial encounter -T194XXD Foreign body in penis, subsequent encounter -T194XXS Foreign body in penis, sequela -T198XXA Foreign body in other parts of genitourinary tract, initial encounter -T198XXD Foreign body in other parts of genitourinary tract, subsequent encounter -T198XXS Foreign body in other parts of genitourinary tract, sequela -T199XXA Foreign body in genitourinary tract, part unspecified, initial encounter -T199XXD Foreign body in genitourinary tract, part unspecified, subsequent encounter -T199XXS Foreign body in genitourinary tract, part unspecified, sequela -T2000XA Burn of unspecified degree of head, face, and neck, unspecified site, initial encounter -T2000XD Burn of unspecified degree of head, face, and neck, unspecified site, subsequent encounter -T2000XS Burn of unspecified degree of head, face, and neck, unspecified site, sequela -T20011A Burn of unspecified degree of right ear [any part, except ear drum], initial encounter -T20011D Burn of unspecified degree of right ear [any part, except ear drum], subsequent encounter -T20011S Burn of unspecified degree of right ear [any part, except ear drum], sequela -T20012A Burn of unspecified degree of left ear [any part, except ear drum], initial encounter -T20012D Burn of unspecified degree of left ear [any part, except ear drum], subsequent encounter -T20012S Burn of unspecified degree of left ear [any part, except ear drum], sequela -T20019A Burn of unspecified degree of unspecified ear [any part, except ear drum], initial encounter -T20019D Burn of unspecified degree of unspecified ear [any part, except ear drum], subsequent encounter -T20019S Burn of unspecified degree of unspecified ear [any part, except ear drum], sequela -T2002XA Burn of unspecified degree of lip(s), initial encounter -T2002XD Burn of unspecified degree of lip(s), subsequent encounter -T2002XS Burn of unspecified degree of lip(s), sequela -T2003XA Burn of unspecified degree of chin, initial encounter -T2003XD Burn of unspecified degree of chin, subsequent encounter -T2003XS Burn of unspecified degree of chin, sequela -T2004XA Burn of unspecified degree of nose (septum), initial encounter -T2004XD Burn of unspecified degree of nose (septum), subsequent encounter -T2004XS Burn of unspecified degree of nose (septum), sequela -T2005XA Burn of unspecified degree of scalp [any part], initial encounter -T2005XD Burn of unspecified degree of scalp [any part], subsequent encounter -T2005XS Burn of unspecified degree of scalp [any part], sequela -T2006XA Burn of unspecified degree of forehead and cheek, initial encounter -T2006XD Burn of unspecified degree of forehead and cheek, subsequent encounter -T2006XS Burn of unspecified degree of forehead and cheek, sequela -T2007XA Burn of unspecified degree of neck, initial encounter -T2007XD Burn of unspecified degree of neck, subsequent encounter -T2007XS Burn of unspecified degree of neck, sequela -T2009XA Burn of unspecified degree of multiple sites of head, face, and neck, initial encounter -T2009XD Burn of unspecified degree of multiple sites of head, face, and neck, subsequent encounter -T2009XS Burn of unspecified degree of multiple sites of head, face, and neck, sequela -T2010XA Burn of first degree of head, face, and neck, unspecified site, initial encounter -T2010XD Burn of first degree of head, face, and neck, unspecified site, subsequent encounter -T2010XS Burn of first degree of head, face, and neck, unspecified site, sequela -T20111A Burn of first degree of right ear [any part, except ear drum], initial encounter -T20111D Burn of first degree of right ear [any part, except ear drum], subsequent encounter -T20111S Burn of first degree of right ear [any part, except ear drum], sequela -T20112A Burn of first degree of left ear [any part, except ear drum], initial encounter -T20112D Burn of first degree of left ear [any part, except ear drum], subsequent encounter -T20112S Burn of first degree of left ear [any part, except ear drum], sequela -T20119A Burn of first degree of unspecified ear [any part, except ear drum], initial encounter -T20119D Burn of first degree of unspecified ear [any part, except ear drum], subsequent encounter -T20119S Burn of first degree of unspecified ear [any part, except ear drum], sequela -T2012XA Burn of first degree of lip(s), initial encounter -T2012XD Burn of first degree of lip(s), subsequent encounter -T2012XS Burn of first degree of lip(s), sequela -T2013XA Burn of first degree of chin, initial encounter -T2013XD Burn of first degree of chin, subsequent encounter -T2013XS Burn of first degree of chin, sequela -T2014XA Burn of first degree of nose (septum), initial encounter -T2014XD Burn of first degree of nose (septum), subsequent encounter -T2014XS Burn of first degree of nose (septum), sequela -T2015XA Burn of first degree of scalp [any part], initial encounter -T2015XD Burn of first degree of scalp [any part], subsequent encounter -T2015XS Burn of first degree of scalp [any part], sequela -T2016XA Burn of first degree of forehead and cheek, initial encounter -T2016XD Burn of first degree of forehead and cheek, subsequent encounter -T2016XS Burn of first degree of forehead and cheek, sequela -T2017XA Burn of first degree of neck, initial encounter -T2017XD Burn of first degree of neck, subsequent encounter -T2017XS Burn of first degree of neck, sequela -T2019XA Burn of first degree of multiple sites of head, face, and neck, initial encounter -T2019XD Burn of first degree of multiple sites of head, face, and neck, subsequent encounter -T2019XS Burn of first degree of multiple sites of head, face, and neck, sequela -T2020XA Burn of second degree of head, face, and neck, unspecified site, initial encounter -T2020XD Burn of second degree of head, face, and neck, unspecified site, subsequent encounter -T2020XS Burn of second degree of head, face, and neck, unspecified site, sequela -T20211A Burn of second degree of right ear [any part, except ear drum], initial encounter -T20211D Burn of second degree of right ear [any part, except ear drum], subsequent encounter -T20211S Burn of second degree of right ear [any part, except ear drum], sequela -T20212A Burn of second degree of left ear [any part, except ear drum], initial encounter -T20212D Burn of second degree of left ear [any part, except ear drum], subsequent encounter -T20212S Burn of second degree of left ear [any part, except ear drum], sequela -T20219A Burn of second degree of unspecified ear [any part, except ear drum], initial encounter -T20219D Burn of second degree of unspecified ear [any part, except ear drum], subsequent encounter -T20219S Burn of second degree of unspecified ear [any part, except ear drum], sequela -T2022XA Burn of second degree of lip(s), initial encounter -T2022XD Burn of second degree of lip(s), subsequent encounter -T2022XS Burn of second degree of lip(s), sequela -T2023XA Burn of second degree of chin, initial encounter -T2023XD Burn of second degree of chin, subsequent encounter -T2023XS Burn of second degree of chin, sequela -T2024XA Burn of second degree of nose (septum), initial encounter -T2024XD Burn of second degree of nose (septum), subsequent encounter -T2024XS Burn of second degree of nose (septum), sequela -T2025XA Burn of second degree of scalp [any part], initial encounter -T2025XD Burn of second degree of scalp [any part], subsequent encounter -T2025XS Burn of second degree of scalp [any part], sequela -T2026XA Burn of second degree of forehead and cheek, initial encounter -T2026XD Burn of second degree of forehead and cheek, subsequent encounter -T2026XS Burn of second degree of forehead and cheek, sequela -T2027XA Burn of second degree of neck, initial encounter -T2027XD Burn of second degree of neck, subsequent encounter -T2027XS Burn of second degree of neck, sequela -T2029XA Burn of second degree of multiple sites of head, face, and neck, initial encounter -T2029XD Burn of second degree of multiple sites of head, face, and neck, subsequent encounter -T2029XS Burn of second degree of multiple sites of head, face, and neck, sequela -T2030XA Burn of third degree of head, face, and neck, unspecified site, initial encounter -T2030XD Burn of third degree of head, face, and neck, unspecified site, subsequent encounter -T2030XS Burn of third degree of head, face, and neck, unspecified site, sequela -T20311A Burn of third degree of right ear [any part, except ear drum], initial encounter -T20311D Burn of third degree of right ear [any part, except ear drum], subsequent encounter -T20311S Burn of third degree of right ear [any part, except ear drum], sequela -T20312A Burn of third degree of left ear [any part, except ear drum], initial encounter -T20312D Burn of third degree of left ear [any part, except ear drum], subsequent encounter -T20312S Burn of third degree of left ear [any part, except ear drum], sequela -T20319A Burn of third degree of unspecified ear [any part, except ear drum], initial encounter -T20319D Burn of third degree of unspecified ear [any part, except ear drum], subsequent encounter -T20319S Burn of third degree of unspecified ear [any part, except ear drum], sequela -T2032XA Burn of third degree of lip(s), initial encounter -T2032XD Burn of third degree of lip(s), subsequent encounter -T2032XS Burn of third degree of lip(s), sequela -T2033XA Burn of third degree of chin, initial encounter -T2033XD Burn of third degree of chin, subsequent encounter -T2033XS Burn of third degree of chin, sequela -T2034XA Burn of third degree of nose (septum), initial encounter -T2034XD Burn of third degree of nose (septum), subsequent encounter -T2034XS Burn of third degree of nose (septum), sequela -T2035XA Burn of third degree of scalp [any part], initial encounter -T2035XD Burn of third degree of scalp [any part], subsequent encounter -T2035XS Burn of third degree of scalp [any part], sequela -T2036XA Burn of third degree of forehead and cheek, initial encounter -T2036XD Burn of third degree of forehead and cheek, subsequent encounter -T2036XS Burn of third degree of forehead and cheek, sequela -T2037XA Burn of third degree of neck, initial encounter -T2037XD Burn of third degree of neck, subsequent encounter -T2037XS Burn of third degree of neck, sequela -T2039XA Burn of third degree of multiple sites of head, face, and neck, initial encounter -T2039XD Burn of third degree of multiple sites of head, face, and neck, subsequent encounter -T2039XS Burn of third degree of multiple sites of head, face, and neck, sequela -T2040XA Corrosion of unspecified degree of head, face, and neck, unspecified site, initial encounter -T2040XD Corrosion of unspecified degree of head, face, and neck, unspecified site, subsequent encounter -T2040XS Corrosion of unspecified degree of head, face, and neck, unspecified site, sequela -T20411A Corrosion of unspecified degree of right ear [any part, except ear drum], initial encounter -T20411D Corrosion of unspecified degree of right ear [any part, except ear drum], subsequent encounter -T20411S Corrosion of unspecified degree of right ear [any part, except ear drum], sequela -T20412A Corrosion of unspecified degree of left ear [any part, except ear drum], initial encounter -T20412D Corrosion of unspecified degree of left ear [any part, except ear drum], subsequent encounter -T20412S Corrosion of unspecified degree of left ear [any part, except ear drum], sequela -T20419A Corrosion of unspecified degree of unspecified ear [any part, except ear drum], initial encounter -T20419D Corrosion of unspecified degree of unspecified ear [any part, except ear drum], subsequent encounter -T20419S Corrosion of unspecified degree of unspecified ear [any part, except ear drum], sequela -T2042XA Corrosion of unspecified degree of lip(s), initial encounter -T2042XD Corrosion of unspecified degree of lip(s), subsequent encounter -T2042XS Corrosion of unspecified degree of lip(s), sequela -T2043XA Corrosion of unspecified degree of chin, initial encounter -T2043XD Corrosion of unspecified degree of chin, subsequent encounter -T2043XS Corrosion of unspecified degree of chin, sequela -T2044XA Corrosion of unspecified degree of nose (septum), initial encounter -T2044XD Corrosion of unspecified degree of nose (septum), subsequent encounter -T2044XS Corrosion of unspecified degree of nose (septum), sequela -T2045XA Corrosion of unspecified degree of scalp [any part], initial encounter -T2045XD Corrosion of unspecified degree of scalp [any part], subsequent encounter -T2045XS Corrosion of unspecified degree of scalp [any part], sequela -T2046XA Corrosion of unspecified degree of forehead and cheek, initial encounter -T2046XD Corrosion of unspecified degree of forehead and cheek, subsequent encounter -T2046XS Corrosion of unspecified degree of forehead and cheek, sequela -T2047XA Corrosion of unspecified degree of neck, initial encounter -T2047XD Corrosion of unspecified degree of neck, subsequent encounter -T2047XS Corrosion of unspecified degree of neck, sequela -T2049XA Corrosion of unspecified degree of multiple sites of head, face, and neck, initial encounter -T2049XD Corrosion of unspecified degree of multiple sites of head, face, and neck, subsequent encounter -T2049XS Corrosion of unspecified degree of multiple sites of head, face, and neck, sequela -T2050XA Corrosion of first degree of head, face, and neck, unspecified site, initial encounter -T2050XD Corrosion of first degree of head, face, and neck, unspecified site, subsequent encounter -T2050XS Corrosion of first degree of head, face, and neck, unspecified site, sequela -T20511A Corrosion of first degree of right ear [any part, except ear drum], initial encounter -T20511D Corrosion of first degree of right ear [any part, except ear drum], subsequent encounter -T20511S Corrosion of first degree of right ear [any part, except ear drum], sequela -T20512A Corrosion of first degree of left ear [any part, except ear drum], initial encounter -T20512D Corrosion of first degree of left ear [any part, except ear drum], subsequent encounter -T20512S Corrosion of first degree of left ear [any part, except ear drum], sequela -T20519A Corrosion of first degree of unspecified ear [any part, except ear drum], initial encounter -T20519D Corrosion of first degree of unspecified ear [any part, except ear drum], subsequent encounter -T20519S Corrosion of first degree of unspecified ear [any part, except ear drum], sequela -T2052XA Corrosion of first degree of lip(s), initial encounter -T2052XD Corrosion of first degree of lip(s), subsequent encounter -T2052XS Corrosion of first degree of lip(s), sequela -T2053XA Corrosion of first degree of chin, initial encounter -T2053XD Corrosion of first degree of chin, subsequent encounter -T2053XS Corrosion of first degree of chin, sequela -T2054XA Corrosion of first degree of nose (septum), initial encounter -T2054XD Corrosion of first degree of nose (septum), subsequent encounter -T2054XS Corrosion of first degree of nose (septum), sequela -T2055XA Corrosion of first degree of scalp [any part], initial encounter -T2055XD Corrosion of first degree of scalp [any part], subsequent encounter -T2055XS Corrosion of first degree of scalp [any part], sequela -T2056XA Corrosion of first degree of forehead and cheek, initial encounter -T2056XD Corrosion of first degree of forehead and cheek, subsequent encounter -T2056XS Corrosion of first degree of forehead and cheek, sequela -T2057XA Corrosion of first degree of neck, initial encounter -T2057XD Corrosion of first degree of neck, subsequent encounter -T2057XS Corrosion of first degree of neck, sequela -T2059XA Corrosion of first degree of multiple sites of head, face, and neck, initial encounter -T2059XD Corrosion of first degree of multiple sites of head, face, and neck, subsequent encounter -T2059XS Corrosion of first degree of multiple sites of head, face, and neck, sequela -T2060XA Corrosion of second degree of head, face, and neck, unspecified site, initial encounter -T2060XD Corrosion of second degree of head, face, and neck, unspecified site, subsequent encounter -T2060XS Corrosion of second degree of head, face, and neck, unspecified site, sequela -T20611A Corrosion of second degree of right ear [any part, except ear drum], initial encounter -T20611D Corrosion of second degree of right ear [any part, except ear drum], subsequent encounter -T20611S Corrosion of second degree of right ear [any part, except ear drum], sequela -T20612A Corrosion of second degree of left ear [any part, except ear drum], initial encounter -T20612D Corrosion of second degree of left ear [any part, except ear drum], subsequent encounter -T20612S Corrosion of second degree of left ear [any part, except ear drum], sequela -T20619A Corrosion of second degree of unspecified ear [any part, except ear drum], initial encounter -T20619D Corrosion of second degree of unspecified ear [any part, except ear drum], subsequent encounter -T20619S Corrosion of second degree of unspecified ear [any part, except ear drum], sequela -T2062XA Corrosion of second degree of lip(s), initial encounter -T2062XD Corrosion of second degree of lip(s), subsequent encounter -T2062XS Corrosion of second degree of lip(s), sequela -T2063XA Corrosion of second degree of chin, initial encounter -T2063XD Corrosion of second degree of chin, subsequent encounter -T2063XS Corrosion of second degree of chin, sequela -T2064XA Corrosion of second degree of nose (septum), initial encounter -T2064XD Corrosion of second degree of nose (septum), subsequent encounter -T2064XS Corrosion of second degree of nose (septum), sequela -T2065XA Corrosion of second degree of scalp [any part], initial encounter -T2065XD Corrosion of second degree of scalp [any part], subsequent encounter -T2065XS Corrosion of second degree of scalp [any part], sequela -T2066XA Corrosion of second degree of forehead and cheek, initial encounter -T2066XD Corrosion of second degree of forehead and cheek, subsequent encounter -T2066XS Corrosion of second degree of forehead and cheek, sequela -T2067XA Corrosion of second degree of neck, initial encounter -T2067XD Corrosion of second degree of neck, subsequent encounter -T2067XS Corrosion of second degree of neck, sequela -T2069XA Corrosion of second degree of multiple sites of head, face, and neck, initial encounter -T2069XD Corrosion of second degree of multiple sites of head, face, and neck, subsequent encounter -T2069XS Corrosion of second degree of multiple sites of head, face, and neck, sequela -T2070XA Corrosion of third degree of head, face, and neck, unspecified site, initial encounter -T2070XD Corrosion of third degree of head, face, and neck, unspecified site, subsequent encounter -T2070XS Corrosion of third degree of head, face, and neck, unspecified site, sequela -T20711A Corrosion of third degree of right ear [any part, except ear drum], initial encounter -T20711D Corrosion of third degree of right ear [any part, except ear drum], subsequent encounter -T20711S Corrosion of third degree of right ear [any part, except ear drum], sequela -T20712A Corrosion of third degree of left ear [any part, except ear drum], initial encounter -T20712D Corrosion of third degree of left ear [any part, except ear drum], subsequent encounter -T20712S Corrosion of third degree of left ear [any part, except ear drum], sequela -T20719A Corrosion of third degree of unspecified ear [any part, except ear drum], initial encounter -T20719D Corrosion of third degree of unspecified ear [any part, except ear drum], subsequent encounter -T20719S Corrosion of third degree of unspecified ear [any part, except ear drum], sequela -T2072XA Corrosion of third degree of lip(s), initial encounter -T2072XD Corrosion of third degree of lip(s), subsequent encounter -T2072XS Corrosion of third degree of lip(s), sequela -T2073XA Corrosion of third degree of chin, initial encounter -T2073XD Corrosion of third degree of chin, subsequent encounter -T2073XS Corrosion of third degree of chin, sequela -T2074XA Corrosion of third degree of nose (septum), initial encounter -T2074XD Corrosion of third degree of nose (septum), subsequent encounter -T2074XS Corrosion of third degree of nose (septum), sequela -T2075XA Corrosion of third degree of scalp [any part], initial encounter -T2075XD Corrosion of third degree of scalp [any part], subsequent encounter -T2075XS Corrosion of third degree of scalp [any part], sequela -T2076XA Corrosion of third degree of forehead and cheek, initial encounter -T2076XD Corrosion of third degree of forehead and cheek, subsequent encounter -T2076XS Corrosion of third degree of forehead and cheek, sequela -T2077XA Corrosion of third degree of neck, initial encounter -T2077XD Corrosion of third degree of neck, subsequent encounter -T2077XS Corrosion of third degree of neck, sequela -T2079XA Corrosion of third degree of multiple sites of head, face, and neck, initial encounter -T2079XD Corrosion of third degree of multiple sites of head, face, and neck, subsequent encounter -T2079XS Corrosion of third degree of multiple sites of head, face, and neck, sequela -T2100XA Burn of unspecified degree of trunk, unspecified site, initial encounter -T2100XD Burn of unspecified degree of trunk, unspecified site, subsequent encounter -T2100XS Burn of unspecified degree of trunk, unspecified site, sequela -T2101XA Burn of unspecified degree of chest wall, initial encounter -T2101XD Burn of unspecified degree of chest wall, subsequent encounter -T2101XS Burn of unspecified degree of chest wall, sequela -T2102XA Burn of unspecified degree of abdominal wall, initial encounter -T2102XD Burn of unspecified degree of abdominal wall, subsequent encounter -T2102XS Burn of unspecified degree of abdominal wall, sequela -T2103XA Burn of unspecified degree of upper back, initial encounter -T2103XD Burn of unspecified degree of upper back, subsequent encounter -T2103XS Burn of unspecified degree of upper back, sequela -T2104XA Burn of unspecified degree of lower back, initial encounter -T2104XD Burn of unspecified degree of lower back, subsequent encounter -T2104XS Burn of unspecified degree of lower back, sequela -T2105XA Burn of unspecified degree of buttock, initial encounter -T2105XD Burn of unspecified degree of buttock, subsequent encounter -T2105XS Burn of unspecified degree of buttock, sequela -T2106XA Burn of unspecified degree of male genital region, initial encounter -T2106XD Burn of unspecified degree of male genital region, subsequent encounter -T2106XS Burn of unspecified degree of male genital region, sequela -T2107XA Burn of unspecified degree of female genital region, initial encounter -T2107XD Burn of unspecified degree of female genital region, subsequent encounter -T2107XS Burn of unspecified degree of female genital region, sequela -T2109XA Burn of unspecified degree of other site of trunk, initial encounter -T2109XD Burn of unspecified degree of other site of trunk, subsequent encounter -T2109XS Burn of unspecified degree of other site of trunk, sequela -T2110XA Burn of first degree of trunk, unspecified site, initial encounter -T2110XD Burn of first degree of trunk, unspecified site, subsequent encounter -T2110XS Burn of first degree of trunk, unspecified site, sequela -T2111XA Burn of first degree of chest wall, initial encounter -T2111XD Burn of first degree of chest wall, subsequent encounter -T2111XS Burn of first degree of chest wall, sequela -T2112XA Burn of first degree of abdominal wall, initial encounter -T2112XD Burn of first degree of abdominal wall, subsequent encounter -T2112XS Burn of first degree of abdominal wall, sequela -T2113XA Burn of first degree of upper back, initial encounter -T2113XD Burn of first degree of upper back, subsequent encounter -T2113XS Burn of first degree of upper back, sequela -T2114XA Burn of first degree of lower back, initial encounter -T2114XD Burn of first degree of lower back, subsequent encounter -T2114XS Burn of first degree of lower back, sequela -T2115XA Burn of first degree of buttock, initial encounter -T2115XD Burn of first degree of buttock, subsequent encounter -T2115XS Burn of first degree of buttock, sequela -T2116XA Burn of first degree of male genital region, initial encounter -T2116XD Burn of first degree of male genital region, subsequent encounter -T2116XS Burn of first degree of male genital region, sequela -T2117XA Burn of first degree of female genital region, initial encounter -T2117XD Burn of first degree of female genital region, subsequent encounter -T2117XS Burn of first degree of female genital region, sequela -T2119XA Burn of first degree of other site of trunk, initial encounter -T2119XD Burn of first degree of other site of trunk, subsequent encounter -T2119XS Burn of first degree of other site of trunk, sequela -T2120XA Burn of second degree of trunk, unspecified site, initial encounter -T2120XD Burn of second degree of trunk, unspecified site, subsequent encounter -T2120XS Burn of second degree of trunk, unspecified site, sequela -T2121XA Burn of second degree of chest wall, initial encounter -T2121XD Burn of second degree of chest wall, subsequent encounter -T2121XS Burn of second degree of chest wall, sequela -T2122XA Burn of second degree of abdominal wall, initial encounter -T2122XD Burn of second degree of abdominal wall, subsequent encounter -T2122XS Burn of second degree of abdominal wall, sequela -T2123XA Burn of second degree of upper back, initial encounter -T2123XD Burn of second degree of upper back, subsequent encounter -T2123XS Burn of second degree of upper back, sequela -T2124XA Burn of second degree of lower back, initial encounter -T2124XD Burn of second degree of lower back, subsequent encounter -T2124XS Burn of second degree of lower back, sequela -T2125XA Burn of second degree of buttock, initial encounter -T2125XD Burn of second degree of buttock, subsequent encounter -T2125XS Burn of second degree of buttock, sequela -T2126XA Burn of second degree of male genital region, initial encounter -T2126XD Burn of second degree of male genital region, subsequent encounter -T2126XS Burn of second degree of male genital region, sequela -T2127XA Burn of second degree of female genital region, initial encounter -T2127XD Burn of second degree of female genital region, subsequent encounter -T2127XS Burn of second degree of female genital region, sequela -T2129XA Burn of second degree of other site of trunk, initial encounter -T2129XD Burn of second degree of other site of trunk, subsequent encounter -T2129XS Burn of second degree of other site of trunk, sequela -T2130XA Burn of third degree of trunk, unspecified site, initial encounter -T2130XD Burn of third degree of trunk, unspecified site, subsequent encounter -T2130XS Burn of third degree of trunk, unspecified site, sequela -T2131XA Burn of third degree of chest wall, initial encounter -T2131XD Burn of third degree of chest wall, subsequent encounter -T2131XS Burn of third degree of chest wall, sequela -T2132XA Burn of third degree of abdominal wall, initial encounter -T2132XD Burn of third degree of abdominal wall, subsequent encounter -T2132XS Burn of third degree of abdominal wall, sequela -T2133XA Burn of third degree of upper back, initial encounter -T2133XD Burn of third degree of upper back, subsequent encounter -T2133XS Burn of third degree of upper back, sequela -T2134XA Burn of third degree of lower back, initial encounter -T2134XD Burn of third degree of lower back, subsequent encounter -T2134XS Burn of third degree of lower back, sequela -T2135XA Burn of third degree of buttock, initial encounter -T2135XD Burn of third degree of buttock, subsequent encounter -T2135XS Burn of third degree of buttock, sequela -T2136XA Burn of third degree of male genital region, initial encounter -T2136XD Burn of third degree of male genital region, subsequent encounter -T2136XS Burn of third degree of male genital region, sequela -T2137XA Burn of third degree of female genital region, initial encounter -T2137XD Burn of third degree of female genital region, subsequent encounter -T2137XS Burn of third degree of female genital region, sequela -T2139XA Burn of third degree of other site of trunk, initial encounter -T2139XD Burn of third degree of other site of trunk, subsequent encounter -T2139XS Burn of third degree of other site of trunk, sequela -T2140XA Corrosion of unspecified degree of trunk, unspecified site, initial encounter -T2140XD Corrosion of unspecified degree of trunk, unspecified site, subsequent encounter -T2140XS Corrosion of unspecified degree of trunk, unspecified site, sequela -T2141XA Corrosion of unspecified degree of chest wall, initial encounter -T2141XD Corrosion of unspecified degree of chest wall, subsequent encounter -T2141XS Corrosion of unspecified degree of chest wall, sequela -T2142XA Corrosion of unspecified degree of abdominal wall, initial encounter -T2142XD Corrosion of unspecified degree of abdominal wall, subsequent encounter -T2142XS Corrosion of unspecified degree of abdominal wall, sequela -T2143XA Corrosion of unspecified degree of upper back, initial encounter -T2143XD Corrosion of unspecified degree of upper back, subsequent encounter -T2143XS Corrosion of unspecified degree of upper back, sequela -T2144XA Corrosion of unspecified degree of lower back, initial encounter -T2144XD Corrosion of unspecified degree of lower back, subsequent encounter -T2144XS Corrosion of unspecified degree of lower back, sequela -T2145XA Corrosion of unspecified degree of buttock, initial encounter -T2145XD Corrosion of unspecified degree of buttock, subsequent encounter -T2145XS Corrosion of unspecified degree of buttock, sequela -T2146XA Corrosion of unspecified degree of male genital region, initial encounter -T2146XD Corrosion of unspecified degree of male genital region, subsequent encounter -T2146XS Corrosion of unspecified degree of male genital region, sequela -T2147XA Corrosion of unspecified degree of female genital region, initial encounter -T2147XD Corrosion of unspecified degree of female genital region, subsequent encounter -T2147XS Corrosion of unspecified degree of female genital region, sequela -T2149XA Corrosion of unspecified degree of other site of trunk, initial encounter -T2149XD Corrosion of unspecified degree of other site of trunk, subsequent encounter -T2149XS Corrosion of unspecified degree of other site of trunk, sequela -T2150XA Corrosion of first degree of trunk, unspecified site, initial encounter -T2150XD Corrosion of first degree of trunk, unspecified site, subsequent encounter -T2150XS Corrosion of first degree of trunk, unspecified site, sequela -T2151XA Corrosion of first degree of chest wall, initial encounter -T2151XD Corrosion of first degree of chest wall, subsequent encounter -T2151XS Corrosion of first degree of chest wall, sequela -T2152XA Corrosion of first degree of abdominal wall, initial encounter -T2152XD Corrosion of first degree of abdominal wall, subsequent encounter -T2152XS Corrosion of first degree of abdominal wall, sequela -T2153XA Corrosion of first degree of upper back, initial encounter -T2153XD Corrosion of first degree of upper back, subsequent encounter -T2153XS Corrosion of first degree of upper back, sequela -T2154XA Corrosion of first degree of lower back, initial encounter -T2154XD Corrosion of first degree of lower back, subsequent encounter -T2154XS Corrosion of first degree of lower back, sequela -T2155XA Corrosion of first degree of buttock, initial encounter -T2155XD Corrosion of first degree of buttock, subsequent encounter -T2155XS Corrosion of first degree of buttock, sequela -T2156XA Corrosion of first degree of male genital region, initial encounter -T2156XD Corrosion of first degree of male genital region, subsequent encounter -T2156XS Corrosion of first degree of male genital region, sequela -T2157XA Corrosion of first degree of female genital region, initial encounter -T2157XD Corrosion of first degree of female genital region, subsequent encounter -T2157XS Corrosion of first degree of female genital region, sequela -T2159XA Corrosion of first degree of other site of trunk, initial encounter -T2159XD Corrosion of first degree of other site of trunk, subsequent encounter -T2159XS Corrosion of first degree of other site of trunk, sequela -T2160XA Corrosion of second degree of trunk, unspecified site, initial encounter -T2160XD Corrosion of second degree of trunk, unspecified site, subsequent encounter -T2160XS Corrosion of second degree of trunk, unspecified site, sequela -T2161XA Corrosion of second degree of chest wall, initial encounter -T2161XD Corrosion of second degree of chest wall, subsequent encounter -T2161XS Corrosion of second degree of chest wall, sequela -T2162XA Corrosion of second degree of abdominal wall, initial encounter -T2162XD Corrosion of second degree of abdominal wall, subsequent encounter -T2162XS Corrosion of second degree of abdominal wall, sequela -T2163XA Corrosion of second degree of upper back, initial encounter -T2163XD Corrosion of second degree of upper back, subsequent encounter -T2163XS Corrosion of second degree of upper back, sequela -T2164XA Corrosion of second degree of lower back, initial encounter -T2164XD Corrosion of second degree of lower back, subsequent encounter -T2164XS Corrosion of second degree of lower back, sequela -T2165XA Corrosion of second degree of buttock, initial encounter -T2165XD Corrosion of second degree of buttock, subsequent encounter -T2165XS Corrosion of second degree of buttock, sequela -T2166XA Corrosion of second degree of male genital region, initial encounter -T2166XD Corrosion of second degree of male genital region, subsequent encounter -T2166XS Corrosion of second degree of male genital region, sequela -T2167XA Corrosion of second degree of female genital region, initial encounter -T2167XD Corrosion of second degree of female genital region, subsequent encounter -T2167XS Corrosion of second degree of female genital region, sequela -T2169XA Corrosion of second degree of other site of trunk, initial encounter -T2169XD Corrosion of second degree of other site of trunk, subsequent encounter -T2169XS Corrosion of second degree of other site of trunk, sequela -T2170XA Corrosion of third degree of trunk, unspecified site, initial encounter -T2170XD Corrosion of third degree of trunk, unspecified site, subsequent encounter -T2170XS Corrosion of third degree of trunk, unspecified site, sequela -T2171XA Corrosion of third degree of chest wall, initial encounter -T2171XD Corrosion of third degree of chest wall, subsequent encounter -T2171XS Corrosion of third degree of chest wall, sequela -T2172XA Corrosion of third degree of abdominal wall, initial encounter -T2172XD Corrosion of third degree of abdominal wall, subsequent encounter -T2172XS Corrosion of third degree of abdominal wall, sequela -T2173XA Corrosion of third degree of upper back, initial encounter -T2173XD Corrosion of third degree of upper back, subsequent encounter -T2173XS Corrosion of third degree of upper back, sequela -T2174XA Corrosion of third degree of lower back, initial encounter -T2174XD Corrosion of third degree of lower back, subsequent encounter -T2174XS Corrosion of third degree of lower back, sequela -T2175XA Corrosion of third degree of buttock, initial encounter -T2175XD Corrosion of third degree of buttock, subsequent encounter -T2175XS Corrosion of third degree of buttock, sequela -T2176XA Corrosion of third degree of male genital region, initial encounter -T2176XD Corrosion of third degree of male genital region, subsequent encounter -T2176XS Corrosion of third degree of male genital region, sequela -T2177XA Corrosion of third degree of female genital region, initial encounter -T2177XD Corrosion of third degree of female genital region, subsequent encounter -T2177XS Corrosion of third degree of female genital region, sequela -T2179XA Corrosion of third degree of other site of trunk, initial encounter -T2179XD Corrosion of third degree of other site of trunk, subsequent encounter -T2179XS Corrosion of third degree of other site of trunk, sequela -T2200XA Burn of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2200XD Burn of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2200XS Burn of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22011A Burn of unspecified degree of right forearm, initial encounter -T22011D Burn of unspecified degree of right forearm, subsequent encounter -T22011S Burn of unspecified degree of right forearm, sequela -T22012A Burn of unspecified degree of left forearm, initial encounter -T22012D Burn of unspecified degree of left forearm, subsequent encounter -T22012S Burn of unspecified degree of left forearm, sequela -T22019A Burn of unspecified degree of unspecified forearm, initial encounter -T22019D Burn of unspecified degree of unspecified forearm, subsequent encounter -T22019S Burn of unspecified degree of unspecified forearm, sequela -T22021A Burn of unspecified degree of right elbow, initial encounter -T22021D Burn of unspecified degree of right elbow, subsequent encounter -T22021S Burn of unspecified degree of right elbow, sequela -T22022A Burn of unspecified degree of left elbow, initial encounter -T22022D Burn of unspecified degree of left elbow, subsequent encounter -T22022S Burn of unspecified degree of left elbow, sequela -T22029A Burn of unspecified degree of unspecified elbow, initial encounter -T22029D Burn of unspecified degree of unspecified elbow, subsequent encounter -T22029S Burn of unspecified degree of unspecified elbow, sequela -T22031A Burn of unspecified degree of right upper arm, initial encounter -T22031D Burn of unspecified degree of right upper arm, subsequent encounter -T22031S Burn of unspecified degree of right upper arm, sequela -T22032A Burn of unspecified degree of left upper arm, initial encounter -T22032D Burn of unspecified degree of left upper arm, subsequent encounter -T22032S Burn of unspecified degree of left upper arm, sequela -T22039A Burn of unspecified degree of unspecified upper arm, initial encounter -T22039D Burn of unspecified degree of unspecified upper arm, subsequent encounter -T22039S Burn of unspecified degree of unspecified upper arm, sequela -T22041A Burn of unspecified degree of right axilla, initial encounter -T22041D Burn of unspecified degree of right axilla, subsequent encounter -T22041S Burn of unspecified degree of right axilla, sequela -T22042A Burn of unspecified degree of left axilla, initial encounter -T22042D Burn of unspecified degree of left axilla, subsequent encounter -T22042S Burn of unspecified degree of left axilla, sequela -T22049A Burn of unspecified degree of unspecified axilla, initial encounter -T22049D Burn of unspecified degree of unspecified axilla, subsequent encounter -T22049S Burn of unspecified degree of unspecified axilla, sequela -T22051A Burn of unspecified degree of right shoulder, initial encounter -T22051D Burn of unspecified degree of right shoulder, subsequent encounter -T22051S Burn of unspecified degree of right shoulder, sequela -T22052A Burn of unspecified degree of left shoulder, initial encounter -T22052D Burn of unspecified degree of left shoulder, subsequent encounter -T22052S Burn of unspecified degree of left shoulder, sequela -T22059A Burn of unspecified degree of unspecified shoulder, initial encounter -T22059D Burn of unspecified degree of unspecified shoulder, subsequent encounter -T22059S Burn of unspecified degree of unspecified shoulder, sequela -T22061A Burn of unspecified degree of right scapular region, initial encounter -T22061D Burn of unspecified degree of right scapular region, subsequent encounter -T22061S Burn of unspecified degree of right scapular region, sequela -T22062A Burn of unspecified degree of left scapular region, initial encounter -T22062D Burn of unspecified degree of left scapular region, subsequent encounter -T22062S Burn of unspecified degree of left scapular region, sequela -T22069A Burn of unspecified degree of unspecified scapular region, initial encounter -T22069D Burn of unspecified degree of unspecified scapular region, subsequent encounter -T22069S Burn of unspecified degree of unspecified scapular region, sequela -T22091A Burn of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22091D Burn of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22091S Burn of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22092A Burn of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22092D Burn of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22092S Burn of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22099A Burn of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22099D Burn of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22099S Burn of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2210XA Burn of first degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2210XD Burn of first degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2210XS Burn of first degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22111A Burn of first degree of right forearm, initial encounter -T22111D Burn of first degree of right forearm, subsequent encounter -T22111S Burn of first degree of right forearm, sequela -T22112A Burn of first degree of left forearm, initial encounter -T22112D Burn of first degree of left forearm, subsequent encounter -T22112S Burn of first degree of left forearm, sequela -T22119A Burn of first degree of unspecified forearm, initial encounter -T22119D Burn of first degree of unspecified forearm, subsequent encounter -T22119S Burn of first degree of unspecified forearm, sequela -T22121A Burn of first degree of right elbow, initial encounter -T22121D Burn of first degree of right elbow, subsequent encounter -T22121S Burn of first degree of right elbow, sequela -T22122A Burn of first degree of left elbow, initial encounter -T22122D Burn of first degree of left elbow, subsequent encounter -T22122S Burn of first degree of left elbow, sequela -T22129A Burn of first degree of unspecified elbow, initial encounter -T22129D Burn of first degree of unspecified elbow, subsequent encounter -T22129S Burn of first degree of unspecified elbow, sequela -T22131A Burn of first degree of right upper arm, initial encounter -T22131D Burn of first degree of right upper arm, subsequent encounter -T22131S Burn of first degree of right upper arm, sequela -T22132A Burn of first degree of left upper arm, initial encounter -T22132D Burn of first degree of left upper arm, subsequent encounter -T22132S Burn of first degree of left upper arm, sequela -T22139A Burn of first degree of unspecified upper arm, initial encounter -T22139D Burn of first degree of unspecified upper arm, subsequent encounter -T22139S Burn of first degree of unspecified upper arm, sequela -T22141A Burn of first degree of right axilla, initial encounter -T22141D Burn of first degree of right axilla, subsequent encounter -T22141S Burn of first degree of right axilla, sequela -T22142A Burn of first degree of left axilla, initial encounter -T22142D Burn of first degree of left axilla, subsequent encounter -T22142S Burn of first degree of left axilla, sequela -T22149A Burn of first degree of unspecified axilla, initial encounter -T22149D Burn of first degree of unspecified axilla, subsequent encounter -T22149S Burn of first degree of unspecified axilla, sequela -T22151A Burn of first degree of right shoulder, initial encounter -T22151D Burn of first degree of right shoulder, subsequent encounter -T22151S Burn of first degree of right shoulder, sequela -T22152A Burn of first degree of left shoulder, initial encounter -T22152D Burn of first degree of left shoulder, subsequent encounter -T22152S Burn of first degree of left shoulder, sequela -T22159A Burn of first degree of unspecified shoulder, initial encounter -T22159D Burn of first degree of unspecified shoulder, subsequent encounter -T22159S Burn of first degree of unspecified shoulder, sequela -T22161A Burn of first degree of right scapular region, initial encounter -T22161D Burn of first degree of right scapular region, subsequent encounter -T22161S Burn of first degree of right scapular region, sequela -T22162A Burn of first degree of left scapular region, initial encounter -T22162D Burn of first degree of left scapular region, subsequent encounter -T22162S Burn of first degree of left scapular region, sequela -T22169A Burn of first degree of unspecified scapular region, initial encounter -T22169D Burn of first degree of unspecified scapular region, subsequent encounter -T22169S Burn of first degree of unspecified scapular region, sequela -T22191A Burn of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22191D Burn of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22191S Burn of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22192A Burn of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22192D Burn of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22192S Burn of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22199A Burn of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22199D Burn of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22199S Burn of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2220XA Burn of second degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2220XD Burn of second degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2220XS Burn of second degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22211A Burn of second degree of right forearm, initial encounter -T22211D Burn of second degree of right forearm, subsequent encounter -T22211S Burn of second degree of right forearm, sequela -T22212A Burn of second degree of left forearm, initial encounter -T22212D Burn of second degree of left forearm, subsequent encounter -T22212S Burn of second degree of left forearm, sequela -T22219A Burn of second degree of unspecified forearm, initial encounter -T22219D Burn of second degree of unspecified forearm, subsequent encounter -T22219S Burn of second degree of unspecified forearm, sequela -T22221A Burn of second degree of right elbow, initial encounter -T22221D Burn of second degree of right elbow, subsequent encounter -T22221S Burn of second degree of right elbow, sequela -T22222A Burn of second degree of left elbow, initial encounter -T22222D Burn of second degree of left elbow, subsequent encounter -T22222S Burn of second degree of left elbow, sequela -T22229A Burn of second degree of unspecified elbow, initial encounter -T22229D Burn of second degree of unspecified elbow, subsequent encounter -T22229S Burn of second degree of unspecified elbow, sequela -T22231A Burn of second degree of right upper arm, initial encounter -T22231D Burn of second degree of right upper arm, subsequent encounter -T22231S Burn of second degree of right upper arm, sequela -T22232A Burn of second degree of left upper arm, initial encounter -T22232D Burn of second degree of left upper arm, subsequent encounter -T22232S Burn of second degree of left upper arm, sequela -T22239A Burn of second degree of unspecified upper arm, initial encounter -T22239D Burn of second degree of unspecified upper arm, subsequent encounter -T22239S Burn of second degree of unspecified upper arm, sequela -T22241A Burn of second degree of right axilla, initial encounter -T22241D Burn of second degree of right axilla, subsequent encounter -T22241S Burn of second degree of right axilla, sequela -T22242A Burn of second degree of left axilla, initial encounter -T22242D Burn of second degree of left axilla, subsequent encounter -T22242S Burn of second degree of left axilla, sequela -T22249A Burn of second degree of unspecified axilla, initial encounter -T22249D Burn of second degree of unspecified axilla, subsequent encounter -T22249S Burn of second degree of unspecified axilla, sequela -T22251A Burn of second degree of right shoulder, initial encounter -T22251D Burn of second degree of right shoulder, subsequent encounter -T22251S Burn of second degree of right shoulder, sequela -T22252A Burn of second degree of left shoulder, initial encounter -T22252D Burn of second degree of left shoulder, subsequent encounter -T22252S Burn of second degree of left shoulder, sequela -T22259A Burn of second degree of unspecified shoulder, initial encounter -T22259D Burn of second degree of unspecified shoulder, subsequent encounter -T22259S Burn of second degree of unspecified shoulder, sequela -T22261A Burn of second degree of right scapular region, initial encounter -T22261D Burn of second degree of right scapular region, subsequent encounter -T22261S Burn of second degree of right scapular region, sequela -T22262A Burn of second degree of left scapular region, initial encounter -T22262D Burn of second degree of left scapular region, subsequent encounter -T22262S Burn of second degree of left scapular region, sequela -T22269A Burn of second degree of unspecified scapular region, initial encounter -T22269D Burn of second degree of unspecified scapular region, subsequent encounter -T22269S Burn of second degree of unspecified scapular region, sequela -T22291A Burn of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22291D Burn of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22291S Burn of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22292A Burn of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22292D Burn of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22292S Burn of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22299A Burn of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22299D Burn of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22299S Burn of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2230XA Burn of third degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2230XD Burn of third degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2230XS Burn of third degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22311A Burn of third degree of right forearm, initial encounter -T22311D Burn of third degree of right forearm, subsequent encounter -T22311S Burn of third degree of right forearm, sequela -T22312A Burn of third degree of left forearm, initial encounter -T22312D Burn of third degree of left forearm, subsequent encounter -T22312S Burn of third degree of left forearm, sequela -T22319A Burn of third degree of unspecified forearm, initial encounter -T22319D Burn of third degree of unspecified forearm, subsequent encounter -T22319S Burn of third degree of unspecified forearm, sequela -T22321A Burn of third degree of right elbow, initial encounter -T22321D Burn of third degree of right elbow, subsequent encounter -T22321S Burn of third degree of right elbow, sequela -T22322A Burn of third degree of left elbow, initial encounter -T22322D Burn of third degree of left elbow, subsequent encounter -T22322S Burn of third degree of left elbow, sequela -T22329A Burn of third degree of unspecified elbow, initial encounter -T22329D Burn of third degree of unspecified elbow, subsequent encounter -T22329S Burn of third degree of unspecified elbow, sequela -T22331A Burn of third degree of right upper arm, initial encounter -T22331D Burn of third degree of right upper arm, subsequent encounter -T22331S Burn of third degree of right upper arm, sequela -T22332A Burn of third degree of left upper arm, initial encounter -T22332D Burn of third degree of left upper arm, subsequent encounter -T22332S Burn of third degree of left upper arm, sequela -T22339A Burn of third degree of unspecified upper arm, initial encounter -T22339D Burn of third degree of unspecified upper arm, subsequent encounter -T22339S Burn of third degree of unspecified upper arm, sequela -T22341A Burn of third degree of right axilla, initial encounter -T22341D Burn of third degree of right axilla, subsequent encounter -T22341S Burn of third degree of right axilla, sequela -T22342A Burn of third degree of left axilla, initial encounter -T22342D Burn of third degree of left axilla, subsequent encounter -T22342S Burn of third degree of left axilla, sequela -T22349A Burn of third degree of unspecified axilla, initial encounter -T22349D Burn of third degree of unspecified axilla, subsequent encounter -T22349S Burn of third degree of unspecified axilla, sequela -T22351A Burn of third degree of right shoulder, initial encounter -T22351D Burn of third degree of right shoulder, subsequent encounter -T22351S Burn of third degree of right shoulder, sequela -T22352A Burn of third degree of left shoulder, initial encounter -T22352D Burn of third degree of left shoulder, subsequent encounter -T22352S Burn of third degree of left shoulder, sequela -T22359A Burn of third degree of unspecified shoulder, initial encounter -T22359D Burn of third degree of unspecified shoulder, subsequent encounter -T22359S Burn of third degree of unspecified shoulder, sequela -T22361A Burn of third degree of right scapular region, initial encounter -T22361D Burn of third degree of right scapular region, subsequent encounter -T22361S Burn of third degree of right scapular region, sequela -T22362A Burn of third degree of left scapular region, initial encounter -T22362D Burn of third degree of left scapular region, subsequent encounter -T22362S Burn of third degree of left scapular region, sequela -T22369A Burn of third degree of unspecified scapular region, initial encounter -T22369D Burn of third degree of unspecified scapular region, subsequent encounter -T22369S Burn of third degree of unspecified scapular region, sequela -T22391A Burn of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22391D Burn of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22391S Burn of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22392A Burn of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22392D Burn of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22392S Burn of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22399A Burn of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22399D Burn of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22399S Burn of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2240XA Corrosion of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2240XD Corrosion of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2240XS Corrosion of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22411A Corrosion of unspecified degree of right forearm, initial encounter -T22411D Corrosion of unspecified degree of right forearm, subsequent encounter -T22411S Corrosion of unspecified degree of right forearm, sequela -T22412A Corrosion of unspecified degree of left forearm, initial encounter -T22412D Corrosion of unspecified degree of left forearm, subsequent encounter -T22412S Corrosion of unspecified degree of left forearm, sequela -T22419A Corrosion of unspecified degree of unspecified forearm, initial encounter -T22419D Corrosion of unspecified degree of unspecified forearm, subsequent encounter -T22419S Corrosion of unspecified degree of unspecified forearm, sequela -T22421A Corrosion of unspecified degree of right elbow, initial encounter -T22421D Corrosion of unspecified degree of right elbow, subsequent encounter -T22421S Corrosion of unspecified degree of right elbow, sequela -T22422A Corrosion of unspecified degree of left elbow, initial encounter -T22422D Corrosion of unspecified degree of left elbow, subsequent encounter -T22422S Corrosion of unspecified degree of left elbow, sequela -T22429A Corrosion of unspecified degree of unspecified elbow, initial encounter -T22429D Corrosion of unspecified degree of unspecified elbow, subsequent encounter -T22429S Corrosion of unspecified degree of unspecified elbow, sequela -T22431A Corrosion of unspecified degree of right upper arm, initial encounter -T22431D Corrosion of unspecified degree of right upper arm, subsequent encounter -T22431S Corrosion of unspecified degree of right upper arm, sequela -T22432A Corrosion of unspecified degree of left upper arm, initial encounter -T22432D Corrosion of unspecified degree of left upper arm, subsequent encounter -T22432S Corrosion of unspecified degree of left upper arm, sequela -T22439A Corrosion of unspecified degree of unspecified upper arm, initial encounter -T22439D Corrosion of unspecified degree of unspecified upper arm, subsequent encounter -T22439S Corrosion of unspecified degree of unspecified upper arm, sequela -T22441A Corrosion of unspecified degree of right axilla, initial encounter -T22441D Corrosion of unspecified degree of right axilla, subsequent encounter -T22441S Corrosion of unspecified degree of right axilla, sequela -T22442A Corrosion of unspecified degree of left axilla, initial encounter -T22442D Corrosion of unspecified degree of left axilla, subsequent encounter -T22442S Corrosion of unspecified degree of left axilla, sequela -T22449A Corrosion of unspecified degree of unspecified axilla, initial encounter -T22449D Corrosion of unspecified degree of unspecified axilla, subsequent encounter -T22449S Corrosion of unspecified degree of unspecified axilla, sequela -T22451A Corrosion of unspecified degree of right shoulder, initial encounter -T22451D Corrosion of unspecified degree of right shoulder, subsequent encounter -T22451S Corrosion of unspecified degree of right shoulder, sequela -T22452A Corrosion of unspecified degree of left shoulder, initial encounter -T22452D Corrosion of unspecified degree of left shoulder, subsequent encounter -T22452S Corrosion of unspecified degree of left shoulder, sequela -T22459A Corrosion of unspecified degree of unspecified shoulder, initial encounter -T22459D Corrosion of unspecified degree of unspecified shoulder, subsequent encounter -T22459S Corrosion of unspecified degree of unspecified shoulder, sequela -T22461A Corrosion of unspecified degree of right scapular region, initial encounter -T22461D Corrosion of unspecified degree of right scapular region, subsequent encounter -T22461S Corrosion of unspecified degree of right scapular region, sequela -T22462A Corrosion of unspecified degree of left scapular region, initial encounter -T22462D Corrosion of unspecified degree of left scapular region, subsequent encounter -T22462S Corrosion of unspecified degree of left scapular region, sequela -T22469A Corrosion of unspecified degree of unspecified scapular region, initial encounter -T22469D Corrosion of unspecified degree of unspecified scapular region, subsequent encounter -T22469S Corrosion of unspecified degree of unspecified scapular region, sequela -T22491A Corrosion of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22491D Corrosion of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22491S Corrosion of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22492A Corrosion of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22492D Corrosion of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22492S Corrosion of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22499A Corrosion of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22499D Corrosion of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22499S Corrosion of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2250XA Corrosion of first degree of shoulder and upper limb, except wrist and hand unspecified site, initial encounter -T2250XD Corrosion of first degree of shoulder and upper limb, except wrist and hand unspecified site, subsequent encounter -T2250XS Corrosion of first degree of shoulder and upper limb, except wrist and hand unspecified site, sequela -T22511A Corrosion of first degree of right forearm, initial encounter -T22511D Corrosion of first degree of right forearm, subsequent encounter -T22511S Corrosion of first degree of right forearm, sequela -T22512A Corrosion of first degree of left forearm, initial encounter -T22512D Corrosion of first degree of left forearm, subsequent encounter -T22512S Corrosion of first degree of left forearm, sequela -T22519A Corrosion of first degree of unspecified forearm, initial encounter -T22519D Corrosion of first degree of unspecified forearm, subsequent encounter -T22519S Corrosion of first degree of unspecified forearm, sequela -T22521A Corrosion of first degree of right elbow, initial encounter -T22521D Corrosion of first degree of right elbow, subsequent encounter -T22521S Corrosion of first degree of right elbow, sequela -T22522A Corrosion of first degree of left elbow, initial encounter -T22522D Corrosion of first degree of left elbow, subsequent encounter -T22522S Corrosion of first degree of left elbow, sequela -T22529A Corrosion of first degree of unspecified elbow, initial encounter -T22529D Corrosion of first degree of unspecified elbow, subsequent encounter -T22529S Corrosion of first degree of unspecified elbow, sequela -T22531A Corrosion of first degree of right upper arm, initial encounter -T22531D Corrosion of first degree of right upper arm, subsequent encounter -T22531S Corrosion of first degree of right upper arm, sequela -T22532A Corrosion of first degree of left upper arm, initial encounter -T22532D Corrosion of first degree of left upper arm, subsequent encounter -T22532S Corrosion of first degree of left upper arm, sequela -T22539A Corrosion of first degree of unspecified upper arm, initial encounter -T22539D Corrosion of first degree of unspecified upper arm, subsequent encounter -T22539S Corrosion of first degree of unspecified upper arm, sequela -T22541A Corrosion of first degree of right axilla, initial encounter -T22541D Corrosion of first degree of right axilla, subsequent encounter -T22541S Corrosion of first degree of right axilla, sequela -T22542A Corrosion of first degree of left axilla, initial encounter -T22542D Corrosion of first degree of left axilla, subsequent encounter -T22542S Corrosion of first degree of left axilla, sequela -T22549A Corrosion of first degree of unspecified axilla, initial encounter -T22549D Corrosion of first degree of unspecified axilla, subsequent encounter -T22549S Corrosion of first degree of unspecified axilla, sequela -T22551A Corrosion of first degree of right shoulder, initial encounter -T22551D Corrosion of first degree of right shoulder, subsequent encounter -T22551S Corrosion of first degree of right shoulder, sequela -T22552A Corrosion of first degree of left shoulder, initial encounter -T22552D Corrosion of first degree of left shoulder, subsequent encounter -T22552S Corrosion of first degree of left shoulder, sequela -T22559A Corrosion of first degree of unspecified shoulder, initial encounter -T22559D Corrosion of first degree of unspecified shoulder, subsequent encounter -T22559S Corrosion of first degree of unspecified shoulder, sequela -T22561A Corrosion of first degree of right scapular region, initial encounter -T22561D Corrosion of first degree of right scapular region, subsequent encounter -T22561S Corrosion of first degree of right scapular region, sequela -T22562A Corrosion of first degree of left scapular region, initial encounter -T22562D Corrosion of first degree of left scapular region, subsequent encounter -T22562S Corrosion of first degree of left scapular region, sequela -T22569A Corrosion of first degree of unspecified scapular region, initial encounter -T22569D Corrosion of first degree of unspecified scapular region, subsequent encounter -T22569S Corrosion of first degree of unspecified scapular region, sequela -T22591A Corrosion of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22591D Corrosion of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22591S Corrosion of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22592A Corrosion of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22592D Corrosion of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22592S Corrosion of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22599A Corrosion of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22599D Corrosion of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22599S Corrosion of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2260XA Corrosion of second degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2260XD Corrosion of second degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2260XS Corrosion of second degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22611A Corrosion of second degree of right forearm, initial encounter -T22611D Corrosion of second degree of right forearm, subsequent encounter -T22611S Corrosion of second degree of right forearm, sequela -T22612A Corrosion of second degree of left forearm, initial encounter -T22612D Corrosion of second degree of left forearm, subsequent encounter -T22612S Corrosion of second degree of left forearm, sequela -T22619A Corrosion of second degree of unspecified forearm, initial encounter -T22619D Corrosion of second degree of unspecified forearm, subsequent encounter -T22619S Corrosion of second degree of unspecified forearm, sequela -T22621A Corrosion of second degree of right elbow, initial encounter -T22621D Corrosion of second degree of right elbow, subsequent encounter -T22621S Corrosion of second degree of right elbow, sequela -T22622A Corrosion of second degree of left elbow, initial encounter -T22622D Corrosion of second degree of left elbow, subsequent encounter -T22622S Corrosion of second degree of left elbow, sequela -T22629A Corrosion of second degree of unspecified elbow, initial encounter -T22629D Corrosion of second degree of unspecified elbow, subsequent encounter -T22629S Corrosion of second degree of unspecified elbow, sequela -T22631A Corrosion of second degree of right upper arm, initial encounter -T22631D Corrosion of second degree of right upper arm, subsequent encounter -T22631S Corrosion of second degree of right upper arm, sequela -T22632A Corrosion of second degree of left upper arm, initial encounter -T22632D Corrosion of second degree of left upper arm, subsequent encounter -T22632S Corrosion of second degree of left upper arm, sequela -T22639A Corrosion of second degree of unspecified upper arm, initial encounter -T22639D Corrosion of second degree of unspecified upper arm, subsequent encounter -T22639S Corrosion of second degree of unspecified upper arm, sequela -T22641A Corrosion of second degree of right axilla, initial encounter -T22641D Corrosion of second degree of right axilla, subsequent encounter -T22641S Corrosion of second degree of right axilla, sequela -T22642A Corrosion of second degree of left axilla, initial encounter -T22642D Corrosion of second degree of left axilla, subsequent encounter -T22642S Corrosion of second degree of left axilla, sequela -T22649A Corrosion of second degree of unspecified axilla, initial encounter -T22649D Corrosion of second degree of unspecified axilla, subsequent encounter -T22649S Corrosion of second degree of unspecified axilla, sequela -T22651A Corrosion of second degree of right shoulder, initial encounter -T22651D Corrosion of second degree of right shoulder, subsequent encounter -T22651S Corrosion of second degree of right shoulder, sequela -T22652A Corrosion of second degree of left shoulder, initial encounter -T22652D Corrosion of second degree of left shoulder, subsequent encounter -T22652S Corrosion of second degree of left shoulder, sequela -T22659A Corrosion of second degree of unspecified shoulder, initial encounter -T22659D Corrosion of second degree of unspecified shoulder, subsequent encounter -T22659S Corrosion of second degree of unspecified shoulder, sequela -T22661A Corrosion of second degree of right scapular region, initial encounter -T22661D Corrosion of second degree of right scapular region, subsequent encounter -T22661S Corrosion of second degree of right scapular region, sequela -T22662A Corrosion of second degree of left scapular region, initial encounter -T22662D Corrosion of second degree of left scapular region, subsequent encounter -T22662S Corrosion of second degree of left scapular region, sequela -T22669A Corrosion of second degree of unspecified scapular region, initial encounter -T22669D Corrosion of second degree of unspecified scapular region, subsequent encounter -T22669S Corrosion of second degree of unspecified scapular region, sequela -T22691A Corrosion of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22691D Corrosion of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22691S Corrosion of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22692A Corrosion of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22692D Corrosion of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22692S Corrosion of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22699A Corrosion of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22699D Corrosion of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22699S Corrosion of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2270XA Corrosion of third degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2270XD Corrosion of third degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2270XS Corrosion of third degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22711A Corrosion of third degree of right forearm, initial encounter -T22711D Corrosion of third degree of right forearm, subsequent encounter -T22711S Corrosion of third degree of right forearm, sequela -T22712A Corrosion of third degree of left forearm, initial encounter -T22712D Corrosion of third degree of left forearm, subsequent encounter -T22712S Corrosion of third degree of left forearm, sequela -T22719A Corrosion of third degree of unspecified forearm, initial encounter -T22719D Corrosion of third degree of unspecified forearm, subsequent encounter -T22719S Corrosion of third degree of unspecified forearm, sequela -T22721A Corrosion of third degree of right elbow, initial encounter -T22721D Corrosion of third degree of right elbow, subsequent encounter -T22721S Corrosion of third degree of right elbow, sequela -T22722A Corrosion of third degree of left elbow, initial encounter -T22722D Corrosion of third degree of left elbow, subsequent encounter -T22722S Corrosion of third degree of left elbow, sequela -T22729A Corrosion of third degree of unspecified elbow, initial encounter -T22729D Corrosion of third degree of unspecified elbow, subsequent encounter -T22729S Corrosion of third degree of unspecified elbow, sequela -T22731A Corrosion of third degree of right upper arm, initial encounter -T22731D Corrosion of third degree of right upper arm, subsequent encounter -T22731S Corrosion of third degree of right upper arm, sequela -T22732A Corrosion of third degree of left upper arm, initial encounter -T22732D Corrosion of third degree of left upper arm, subsequent encounter -T22732S Corrosion of third degree of left upper arm, sequela -T22739A Corrosion of third degree of unspecified upper arm, initial encounter -T22739D Corrosion of third degree of unspecified upper arm, subsequent encounter -T22739S Corrosion of third degree of unspecified upper arm, sequela -T22741A Corrosion of third degree of right axilla, initial encounter -T22741D Corrosion of third degree of right axilla, subsequent encounter -T22741S Corrosion of third degree of right axilla, sequela -T22742A Corrosion of third degree of left axilla, initial encounter -T22742D Corrosion of third degree of left axilla, subsequent encounter -T22742S Corrosion of third degree of left axilla, sequela -T22749A Corrosion of third degree of unspecified axilla, initial encounter -T22749D Corrosion of third degree of unspecified axilla, subsequent encounter -T22749S Corrosion of third degree of unspecified axilla, sequela -T22751A Corrosion of third degree of right shoulder, initial encounter -T22751D Corrosion of third degree of right shoulder, subsequent encounter -T22751S Corrosion of third degree of right shoulder, sequela -T22752A Corrosion of third degree of left shoulder, initial encounter -T22752D Corrosion of third degree of left shoulder, subsequent encounter -T22752S Corrosion of third degree of left shoulder, sequela -T22759A Corrosion of third degree of unspecified shoulder, initial encounter -T22759D Corrosion of third degree of unspecified shoulder, subsequent encounter -T22759S Corrosion of third degree of unspecified shoulder, sequela -T22761A Corrosion of third degree of right scapular region, initial encounter -T22761D Corrosion of third degree of right scapular region, subsequent encounter -T22761S Corrosion of third degree of right scapular region, sequela -T22762A Corrosion of third degree of left scapular region, initial encounter -T22762D Corrosion of third degree of left scapular region, subsequent encounter -T22762S Corrosion of third degree of left scapular region, sequela -T22769A Corrosion of third degree of unspecified scapular region, initial encounter -T22769D Corrosion of third degree of unspecified scapular region, subsequent encounter -T22769S Corrosion of third degree of unspecified scapular region, sequela -T22791A Corrosion of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22791D Corrosion of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22791S Corrosion of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22792A Corrosion of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22792D Corrosion of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22792S Corrosion of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22799A Corrosion of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22799D Corrosion of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22799S Corrosion of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T23001A Burn of unspecified degree of right hand, unspecified site, initial encounter -T23001D Burn of unspecified degree of right hand, unspecified site, subsequent encounter -T23001S Burn of unspecified degree of right hand, unspecified site, sequela -T23002A Burn of unspecified degree of left hand, unspecified site, initial encounter -T23002D Burn of unspecified degree of left hand, unspecified site, subsequent encounter -T23002S Burn of unspecified degree of left hand, unspecified site, sequela -T23009A Burn of unspecified degree of unspecified hand, unspecified site, initial encounter -T23009D Burn of unspecified degree of unspecified hand, unspecified site, subsequent encounter -T23009S Burn of unspecified degree of unspecified hand, unspecified site, sequela -T23011A Burn of unspecified degree of right thumb (nail), initial encounter -T23011D Burn of unspecified degree of right thumb (nail), subsequent encounter -T23011S Burn of unspecified degree of right thumb (nail), sequela -T23012A Burn of unspecified degree of left thumb (nail), initial encounter -T23012D Burn of unspecified degree of left thumb (nail), subsequent encounter -T23012S Burn of unspecified degree of left thumb (nail), sequela -T23019A Burn of unspecified degree of unspecified thumb (nail), initial encounter -T23019D Burn of unspecified degree of unspecified thumb (nail), subsequent encounter -T23019S Burn of unspecified degree of unspecified thumb (nail), sequela -T23021A Burn of unspecified degree of single right finger (nail) except thumb, initial encounter -T23021D Burn of unspecified degree of single right finger (nail) except thumb, subsequent encounter -T23021S Burn of unspecified degree of single right finger (nail) except thumb, sequela -T23022A Burn of unspecified degree of single left finger (nail) except thumb, initial encounter -T23022D Burn of unspecified degree of single left finger (nail) except thumb, subsequent encounter -T23022S Burn of unspecified degree of single left finger (nail) except thumb, sequela -T23029A Burn of unspecified degree of unspecified single finger (nail) except thumb, initial encounter -T23029D Burn of unspecified degree of unspecified single finger (nail) except thumb, subsequent encounter -T23029S Burn of unspecified degree of unspecified single finger (nail) except thumb, sequela -T23031A Burn of unspecified degree of multiple right fingers (nail), not including thumb, initial encounter -T23031D Burn of unspecified degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23031S Burn of unspecified degree of multiple right fingers (nail), not including thumb, sequela -T23032A Burn of unspecified degree of multiple left fingers (nail), not including thumb, initial encounter -T23032D Burn of unspecified degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23032S Burn of unspecified degree of multiple left fingers (nail), not including thumb, sequela -T23039A Burn of unspecified degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23039D Burn of unspecified degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23039S Burn of unspecified degree of unspecified multiple fingers (nail), not including thumb, sequela -T23041A Burn of unspecified degree of multiple right fingers (nail), including thumb, initial encounter -T23041D Burn of unspecified degree of multiple right fingers (nail), including thumb, subsequent encounter -T23041S Burn of unspecified degree of multiple right fingers (nail), including thumb, sequela -T23042A Burn of unspecified degree of multiple left fingers (nail), including thumb, initial encounter -T23042D Burn of unspecified degree of multiple left fingers (nail), including thumb, subsequent encounter -T23042S Burn of unspecified degree of multiple left fingers (nail), including thumb, sequela -T23049A Burn of unspecified degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23049D Burn of unspecified degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23049S Burn of unspecified degree of unspecified multiple fingers (nail), including thumb, sequela -T23051A Burn of unspecified degree of right palm, initial encounter -T23051D Burn of unspecified degree of right palm, subsequent encounter -T23051S Burn of unspecified degree of right palm, sequela -T23052A Burn of unspecified degree of left palm, initial encounter -T23052D Burn of unspecified degree of left palm, subsequent encounter -T23052S Burn of unspecified degree of left palm, sequela -T23059A Burn of unspecified degree of unspecified palm, initial encounter -T23059D Burn of unspecified degree of unspecified palm, subsequent encounter -T23059S Burn of unspecified degree of unspecified palm, sequela -T23061A Burn of unspecified degree of back of right hand, initial encounter -T23061D Burn of unspecified degree of back of right hand, subsequent encounter -T23061S Burn of unspecified degree of back of right hand, sequela -T23062A Burn of unspecified degree of back of left hand, initial encounter -T23062D Burn of unspecified degree of back of left hand, subsequent encounter -T23062S Burn of unspecified degree of back of left hand, sequela -T23069A Burn of unspecified degree of back of unspecified hand, initial encounter -T23069D Burn of unspecified degree of back of unspecified hand, subsequent encounter -T23069S Burn of unspecified degree of back of unspecified hand, sequela -T23071A Burn of unspecified degree of right wrist, initial encounter -T23071D Burn of unspecified degree of right wrist, subsequent encounter -T23071S Burn of unspecified degree of right wrist, sequela -T23072A Burn of unspecified degree of left wrist, initial encounter -T23072D Burn of unspecified degree of left wrist, subsequent encounter -T23072S Burn of unspecified degree of left wrist, sequela -T23079A Burn of unspecified degree of unspecified wrist, initial encounter -T23079D Burn of unspecified degree of unspecified wrist, subsequent encounter -T23079S Burn of unspecified degree of unspecified wrist, sequela -T23091A Burn of unspecified degree of multiple sites of right wrist and hand, initial encounter -T23091D Burn of unspecified degree of multiple sites of right wrist and hand, subsequent encounter -T23091S Burn of unspecified degree of multiple sites of right wrist and hand, sequela -T23092A Burn of unspecified degree of multiple sites of left wrist and hand, initial encounter -T23092D Burn of unspecified degree of multiple sites of left wrist and hand, subsequent encounter -T23092S Burn of unspecified degree of multiple sites of left wrist and hand, sequela -T23099A Burn of unspecified degree of multiple sites of unspecified wrist and hand, initial encounter -T23099D Burn of unspecified degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23099S Burn of unspecified degree of multiple sites of unspecified wrist and hand, sequela -T23101A Burn of first degree of right hand, unspecified site, initial encounter -T23101D Burn of first degree of right hand, unspecified site, subsequent encounter -T23101S Burn of first degree of right hand, unspecified site, sequela -T23102A Burn of first degree of left hand, unspecified site, initial encounter -T23102D Burn of first degree of left hand, unspecified site, subsequent encounter -T23102S Burn of first degree of left hand, unspecified site, sequela -T23109A Burn of first degree of unspecified hand, unspecified site, initial encounter -T23109D Burn of first degree of unspecified hand, unspecified site, subsequent encounter -T23109S Burn of first degree of unspecified hand, unspecified site, sequela -T23111A Burn of first degree of right thumb (nail), initial encounter -T23111D Burn of first degree of right thumb (nail), subsequent encounter -T23111S Burn of first degree of right thumb (nail), sequela -T23112A Burn of first degree of left thumb (nail), initial encounter -T23112D Burn of first degree of left thumb (nail), subsequent encounter -T23112S Burn of first degree of left thumb (nail), sequela -T23119A Burn of first degree of unspecified thumb (nail), initial encounter -T23119D Burn of first degree of unspecified thumb (nail), subsequent encounter -T23119S Burn of first degree of unspecified thumb (nail), sequela -T23121A Burn of first degree of single right finger (nail) except thumb, initial encounter -T23121D Burn of first degree of single right finger (nail) except thumb, subsequent encounter -T23121S Burn of first degree of single right finger (nail) except thumb, sequela -T23122A Burn of first degree of single left finger (nail) except thumb, initial encounter -T23122D Burn of first degree of single left finger (nail) except thumb, subsequent encounter -T23122S Burn of first degree of single left finger (nail) except thumb, sequela -T23129A Burn of first degree of unspecified single finger (nail) except thumb, initial encounter -T23129D Burn of first degree of unspecified single finger (nail) except thumb, subsequent encounter -T23129S Burn of first degree of unspecified single finger (nail) except thumb, sequela -T23131A Burn of first degree of multiple right fingers (nail), not including thumb, initial encounter -T23131D Burn of first degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23131S Burn of first degree of multiple right fingers (nail), not including thumb, sequela -T23132A Burn of first degree of multiple left fingers (nail), not including thumb, initial encounter -T23132D Burn of first degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23132S Burn of first degree of multiple left fingers (nail), not including thumb, sequela -T23139A Burn of first degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23139D Burn of first degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23139S Burn of first degree of unspecified multiple fingers (nail), not including thumb, sequela -T23141A Burn of first degree of multiple right fingers (nail), including thumb, initial encounter -T23141D Burn of first degree of multiple right fingers (nail), including thumb, subsequent encounter -T23141S Burn of first degree of multiple right fingers (nail), including thumb, sequela -T23142A Burn of first degree of multiple left fingers (nail), including thumb, initial encounter -T23142D Burn of first degree of multiple left fingers (nail), including thumb, subsequent encounter -T23142S Burn of first degree of multiple left fingers (nail), including thumb, sequela -T23149A Burn of first degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23149D Burn of first degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23149S Burn of first degree of unspecified multiple fingers (nail), including thumb, sequela -T23151A Burn of first degree of right palm, initial encounter -T23151D Burn of first degree of right palm, subsequent encounter -T23151S Burn of first degree of right palm, sequela -T23152A Burn of first degree of left palm, initial encounter -T23152D Burn of first degree of left palm, subsequent encounter -T23152S Burn of first degree of left palm, sequela -T23159A Burn of first degree of unspecified palm, initial encounter -T23159D Burn of first degree of unspecified palm, subsequent encounter -T23159S Burn of first degree of unspecified palm, sequela -T23161A Burn of first degree of back of right hand, initial encounter -T23161D Burn of first degree of back of right hand, subsequent encounter -T23161S Burn of first degree of back of right hand, sequela -T23162A Burn of first degree of back of left hand, initial encounter -T23162D Burn of first degree of back of left hand, subsequent encounter -T23162S Burn of first degree of back of left hand, sequela -T23169A Burn of first degree of back of unspecified hand, initial encounter -T23169D Burn of first degree of back of unspecified hand, subsequent encounter -T23169S Burn of first degree of back of unspecified hand, sequela -T23171A Burn of first degree of right wrist, initial encounter -T23171D Burn of first degree of right wrist, subsequent encounter -T23171S Burn of first degree of right wrist, sequela -T23172A Burn of first degree of left wrist, initial encounter -T23172D Burn of first degree of left wrist, subsequent encounter -T23172S Burn of first degree of left wrist, sequela -T23179A Burn of first degree of unspecified wrist, initial encounter -T23179D Burn of first degree of unspecified wrist, subsequent encounter -T23179S Burn of first degree of unspecified wrist, sequela -T23191A Burn of first degree of multiple sites of right wrist and hand, initial encounter -T23191D Burn of first degree of multiple sites of right wrist and hand, subsequent encounter -T23191S Burn of first degree of multiple sites of right wrist and hand, sequela -T23192A Burn of first degree of multiple sites of left wrist and hand, initial encounter -T23192D Burn of first degree of multiple sites of left wrist and hand, subsequent encounter -T23192S Burn of first degree of multiple sites of left wrist and hand, sequela -T23199A Burn of first degree of multiple sites of unspecified wrist and hand, initial encounter -T23199D Burn of first degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23199S Burn of first degree of multiple sites of unspecified wrist and hand, sequela -T23201A Burn of second degree of right hand, unspecified site, initial encounter -T23201D Burn of second degree of right hand, unspecified site, subsequent encounter -T23201S Burn of second degree of right hand, unspecified site, sequela -T23202A Burn of second degree of left hand, unspecified site, initial encounter -T23202D Burn of second degree of left hand, unspecified site, subsequent encounter -T23202S Burn of second degree of left hand, unspecified site, sequela -T23209A Burn of second degree of unspecified hand, unspecified site, initial encounter -T23209D Burn of second degree of unspecified hand, unspecified site, subsequent encounter -T23209S Burn of second degree of unspecified hand, unspecified site, sequela -T23211A Burn of second degree of right thumb (nail), initial encounter -T23211D Burn of second degree of right thumb (nail), subsequent encounter -T23211S Burn of second degree of right thumb (nail), sequela -T23212A Burn of second degree of left thumb (nail), initial encounter -T23212D Burn of second degree of left thumb (nail), subsequent encounter -T23212S Burn of second degree of left thumb (nail), sequela -T23219A Burn of second degree of unspecified thumb (nail), initial encounter -T23219D Burn of second degree of unspecified thumb (nail), subsequent encounter -T23219S Burn of second degree of unspecified thumb (nail), sequela -T23221A Burn of second degree of single right finger (nail) except thumb, initial encounter -T23221D Burn of second degree of single right finger (nail) except thumb, subsequent encounter -T23221S Burn of second degree of single right finger (nail) except thumb, sequela -T23222A Burn of second degree of single left finger (nail) except thumb, initial encounter -T23222D Burn of second degree of single left finger (nail) except thumb, subsequent encounter -T23222S Burn of second degree of single left finger (nail) except thumb, sequela -T23229A Burn of second degree of unspecified single finger (nail) except thumb, initial encounter -T23229D Burn of second degree of unspecified single finger (nail) except thumb, subsequent encounter -T23229S Burn of second degree of unspecified single finger (nail) except thumb, sequela -T23231A Burn of second degree of multiple right fingers (nail), not including thumb, initial encounter -T23231D Burn of second degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23231S Burn of second degree of multiple right fingers (nail), not including thumb, sequela -T23232A Burn of second degree of multiple left fingers (nail), not including thumb, initial encounter -T23232D Burn of second degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23232S Burn of second degree of multiple left fingers (nail), not including thumb, sequela -T23239A Burn of second degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23239D Burn of second degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23239S Burn of second degree of unspecified multiple fingers (nail), not including thumb, sequela -T23241A Burn of second degree of multiple right fingers (nail), including thumb, initial encounter -T23241D Burn of second degree of multiple right fingers (nail), including thumb, subsequent encounter -T23241S Burn of second degree of multiple right fingers (nail), including thumb, sequela -T23242A Burn of second degree of multiple left fingers (nail), including thumb, initial encounter -T23242D Burn of second degree of multiple left fingers (nail), including thumb, subsequent encounter -T23242S Burn of second degree of multiple left fingers (nail), including thumb, sequela -T23249A Burn of second degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23249D Burn of second degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23249S Burn of second degree of unspecified multiple fingers (nail), including thumb, sequela -T23251A Burn of second degree of right palm, initial encounter -T23251D Burn of second degree of right palm, subsequent encounter -T23251S Burn of second degree of right palm, sequela -T23252A Burn of second degree of left palm, initial encounter -T23252D Burn of second degree of left palm, subsequent encounter -T23252S Burn of second degree of left palm, sequela -T23259A Burn of second degree of unspecified palm, initial encounter -T23259D Burn of second degree of unspecified palm, subsequent encounter -T23259S Burn of second degree of unspecified palm, sequela -T23261A Burn of second degree of back of right hand, initial encounter -T23261D Burn of second degree of back of right hand, subsequent encounter -T23261S Burn of second degree of back of right hand, sequela -T23262A Burn of second degree of back of left hand, initial encounter -T23262D Burn of second degree of back of left hand, subsequent encounter -T23262S Burn of second degree of back of left hand, sequela -T23269A Burn of second degree of back of unspecified hand, initial encounter -T23269D Burn of second degree of back of unspecified hand, subsequent encounter -T23269S Burn of second degree of back of unspecified hand, sequela -T23271A Burn of second degree of right wrist, initial encounter -T23271D Burn of second degree of right wrist, subsequent encounter -T23271S Burn of second degree of right wrist, sequela -T23272A Burn of second degree of left wrist, initial encounter -T23272D Burn of second degree of left wrist, subsequent encounter -T23272S Burn of second degree of left wrist, sequela -T23279A Burn of second degree of unspecified wrist, initial encounter -T23279D Burn of second degree of unspecified wrist, subsequent encounter -T23279S Burn of second degree of unspecified wrist, sequela -T23291A Burn of second degree of multiple sites of right wrist and hand, initial encounter -T23291D Burn of second degree of multiple sites of right wrist and hand, subsequent encounter -T23291S Burn of second degree of multiple sites of right wrist and hand, sequela -T23292A Burn of second degree of multiple sites of left wrist and hand, initial encounter -T23292D Burn of second degree of multiple sites of left wrist and hand, subsequent encounter -T23292S Burn of second degree of multiple sites of left wrist and hand, sequela -T23299A Burn of second degree of multiple sites of unspecified wrist and hand, initial encounter -T23299D Burn of second degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23299S Burn of second degree of multiple sites of unspecified wrist and hand, sequela -T23301A Burn of third degree of right hand, unspecified site, initial encounter -T23301D Burn of third degree of right hand, unspecified site, subsequent encounter -T23301S Burn of third degree of right hand, unspecified site, sequela -T23302A Burn of third degree of left hand, unspecified site, initial encounter -T23302D Burn of third degree of left hand, unspecified site, subsequent encounter -T23302S Burn of third degree of left hand, unspecified site, sequela -T23309A Burn of third degree of unspecified hand, unspecified site, initial encounter -T23309D Burn of third degree of unspecified hand, unspecified site, subsequent encounter -T23309S Burn of third degree of unspecified hand, unspecified site, sequela -T23311A Burn of third degree of right thumb (nail), initial encounter -T23311D Burn of third degree of right thumb (nail), subsequent encounter -T23311S Burn of third degree of right thumb (nail), sequela -T23312A Burn of third degree of left thumb (nail), initial encounter -T23312D Burn of third degree of left thumb (nail), subsequent encounter -T23312S Burn of third degree of left thumb (nail), sequela -T23319A Burn of third degree of unspecified thumb (nail), initial encounter -T23319D Burn of third degree of unspecified thumb (nail), subsequent encounter -T23319S Burn of third degree of unspecified thumb (nail), sequela -T23321A Burn of third degree of single right finger (nail) except thumb, initial encounter -T23321D Burn of third degree of single right finger (nail) except thumb, subsequent encounter -T23321S Burn of third degree of single right finger (nail) except thumb, sequela -T23322A Burn of third degree of single left finger (nail) except thumb, initial encounter -T23322D Burn of third degree of single left finger (nail) except thumb, subsequent encounter -T23322S Burn of third degree of single left finger (nail) except thumb, sequela -T23329A Burn of third degree of unspecified single finger (nail) except thumb, initial encounter -T23329D Burn of third degree of unspecified single finger (nail) except thumb, subsequent encounter -T23329S Burn of third degree of unspecified single finger (nail) except thumb, sequela -T23331A Burn of third degree of multiple right fingers (nail), not including thumb, initial encounter -T23331D Burn of third degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23331S Burn of third degree of multiple right fingers (nail), not including thumb, sequela -T23332A Burn of third degree of multiple left fingers (nail), not including thumb, initial encounter -T23332D Burn of third degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23332S Burn of third degree of multiple left fingers (nail), not including thumb, sequela -T23339A Burn of third degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23339D Burn of third degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23339S Burn of third degree of unspecified multiple fingers (nail), not including thumb, sequela -T23341A Burn of third degree of multiple right fingers (nail), including thumb, initial encounter -T23341D Burn of third degree of multiple right fingers (nail), including thumb, subsequent encounter -T23341S Burn of third degree of multiple right fingers (nail), including thumb, sequela -T23342A Burn of third degree of multiple left fingers (nail), including thumb, initial encounter -T23342D Burn of third degree of multiple left fingers (nail), including thumb, subsequent encounter -T23342S Burn of third degree of multiple left fingers (nail), including thumb, sequela -T23349A Burn of third degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23349D Burn of third degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23349S Burn of third degree of unspecified multiple fingers (nail), including thumb, sequela -T23351A Burn of third degree of right palm, initial encounter -T23351D Burn of third degree of right palm, subsequent encounter -T23351S Burn of third degree of right palm, sequela -T23352A Burn of third degree of left palm, initial encounter -T23352D Burn of third degree of left palm, subsequent encounter -T23352S Burn of third degree of left palm, sequela -T23359A Burn of third degree of unspecified palm, initial encounter -T23359D Burn of third degree of unspecified palm, subsequent encounter -T23359S Burn of third degree of unspecified palm, sequela -T23361A Burn of third degree of back of right hand, initial encounter -T23361D Burn of third degree of back of right hand, subsequent encounter -T23361S Burn of third degree of back of right hand, sequela -T23362A Burn of third degree of back of left hand, initial encounter -T23362D Burn of third degree of back of left hand, subsequent encounter -T23362S Burn of third degree of back of left hand, sequela -T23369A Burn of third degree of back of unspecified hand, initial encounter -T23369D Burn of third degree of back of unspecified hand, subsequent encounter -T23369S Burn of third degree of back of unspecified hand, sequela -T23371A Burn of third degree of right wrist, initial encounter -T23371D Burn of third degree of right wrist, subsequent encounter -T23371S Burn of third degree of right wrist, sequela -T23372A Burn of third degree of left wrist, initial encounter -T23372D Burn of third degree of left wrist, subsequent encounter -T23372S Burn of third degree of left wrist, sequela -T23379A Burn of third degree of unspecified wrist, initial encounter -T23379D Burn of third degree of unspecified wrist, subsequent encounter -T23379S Burn of third degree of unspecified wrist, sequela -T23391A Burn of third degree of multiple sites of right wrist and hand, initial encounter -T23391D Burn of third degree of multiple sites of right wrist and hand, subsequent encounter -T23391S Burn of third degree of multiple sites of right wrist and hand, sequela -T23392A Burn of third degree of multiple sites of left wrist and hand, initial encounter -T23392D Burn of third degree of multiple sites of left wrist and hand, subsequent encounter -T23392S Burn of third degree of multiple sites of left wrist and hand, sequela -T23399A Burn of third degree of multiple sites of unspecified wrist and hand, initial encounter -T23399D Burn of third degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23399S Burn of third degree of multiple sites of unspecified wrist and hand, sequela -T23401A Corrosion of unspecified degree of right hand, unspecified site, initial encounter -T23401D Corrosion of unspecified degree of right hand, unspecified site, subsequent encounter -T23401S Corrosion of unspecified degree of right hand, unspecified site, sequela -T23402A Corrosion of unspecified degree of left hand, unspecified site, initial encounter -T23402D Corrosion of unspecified degree of left hand, unspecified site, subsequent encounter -T23402S Corrosion of unspecified degree of left hand, unspecified site, sequela -T23409A Corrosion of unspecified degree of unspecified hand, unspecified site, initial encounter -T23409D Corrosion of unspecified degree of unspecified hand, unspecified site, subsequent encounter -T23409S Corrosion of unspecified degree of unspecified hand, unspecified site, sequela -T23411A Corrosion of unspecified degree of right thumb (nail), initial encounter -T23411D Corrosion of unspecified degree of right thumb (nail), subsequent encounter -T23411S Corrosion of unspecified degree of right thumb (nail), sequela -T23412A Corrosion of unspecified degree of left thumb (nail), initial encounter -T23412D Corrosion of unspecified degree of left thumb (nail), subsequent encounter -T23412S Corrosion of unspecified degree of left thumb (nail), sequela -T23419A Corrosion of unspecified degree of unspecified thumb (nail), initial encounter -T23419D Corrosion of unspecified degree of unspecified thumb (nail), subsequent encounter -T23419S Corrosion of unspecified degree of unspecified thumb (nail), sequela -T23421A Corrosion of unspecified degree of single right finger (nail) except thumb, initial encounter -T23421D Corrosion of unspecified degree of single right finger (nail) except thumb, subsequent encounter -T23421S Corrosion of unspecified degree of single right finger (nail) except thumb, sequela -T23422A Corrosion of unspecified degree of single left finger (nail) except thumb, initial encounter -T23422D Corrosion of unspecified degree of single left finger (nail) except thumb, subsequent encounter -T23422S Corrosion of unspecified degree of single left finger (nail) except thumb, sequela -T23429A Corrosion of unspecified degree of unspecified single finger (nail) except thumb, initial encounter -T23429D Corrosion of unspecified degree of unspecified single finger (nail) except thumb, subsequent encounter -T23429S Corrosion of unspecified degree of unspecified single finger (nail) except thumb, sequela -T23431A Corrosion of unspecified degree of multiple right fingers (nail), not including thumb, initial encounter -T23431D Corrosion of unspecified degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23431S Corrosion of unspecified degree of multiple right fingers (nail), not including thumb, sequela -T23432A Corrosion of unspecified degree of multiple left fingers (nail), not including thumb, initial encounter -T23432D Corrosion of unspecified degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23432S Corrosion of unspecified degree of multiple left fingers (nail), not including thumb, sequela -T23439A Corrosion of unspecified degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23439D Corrosion of unspecified degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23439S Corrosion of unspecified degree of unspecified multiple fingers (nail), not including thumb, sequela -T23441A Corrosion of unspecified degree of multiple right fingers (nail), including thumb, initial encounter -T23441D Corrosion of unspecified degree of multiple right fingers (nail), including thumb, subsequent encounter -T23441S Corrosion of unspecified degree of multiple right fingers (nail), including thumb, sequela -T23442A Corrosion of unspecified degree of multiple left fingers (nail), including thumb, initial encounter -T23442D Corrosion of unspecified degree of multiple left fingers (nail), including thumb, subsequent encounter -T23442S Corrosion of unspecified degree of multiple left fingers (nail), including thumb, sequela -T23449A Corrosion of unspecified degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23449D Corrosion of unspecified degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23449S Corrosion of unspecified degree of unspecified multiple fingers (nail), including thumb, sequela -T23451A Corrosion of unspecified degree of right palm, initial encounter -T23451D Corrosion of unspecified degree of right palm, subsequent encounter -T23451S Corrosion of unspecified degree of right palm, sequela -T23452A Corrosion of unspecified degree of left palm, initial encounter -T23452D Corrosion of unspecified degree of left palm, subsequent encounter -T23452S Corrosion of unspecified degree of left palm, sequela -T23459A Corrosion of unspecified degree of unspecified palm, initial encounter -T23459D Corrosion of unspecified degree of unspecified palm, subsequent encounter -T23459S Corrosion of unspecified degree of unspecified palm, sequela -T23461A Corrosion of unspecified degree of back of right hand, initial encounter -T23461D Corrosion of unspecified degree of back of right hand, subsequent encounter -T23461S Corrosion of unspecified degree of back of right hand, sequela -T23462A Corrosion of unspecified degree of back of left hand, initial encounter -T23462D Corrosion of unspecified degree of back of left hand, subsequent encounter -T23462S Corrosion of unspecified degree of back of left hand, sequela -T23469A Corrosion of unspecified degree of back of unspecified hand, initial encounter -T23469D Corrosion of unspecified degree of back of unspecified hand, subsequent encounter -T23469S Corrosion of unspecified degree of back of unspecified hand, sequela -T23471A Corrosion of unspecified degree of right wrist, initial encounter -T23471D Corrosion of unspecified degree of right wrist, subsequent encounter -T23471S Corrosion of unspecified degree of right wrist, sequela -T23472A Corrosion of unspecified degree of left wrist, initial encounter -T23472D Corrosion of unspecified degree of left wrist, subsequent encounter -T23472S Corrosion of unspecified degree of left wrist, sequela -T23479A Corrosion of unspecified degree of unspecified wrist, initial encounter -T23479D Corrosion of unspecified degree of unspecified wrist, subsequent encounter -T23479S Corrosion of unspecified degree of unspecified wrist, sequela -T23491A Corrosion of unspecified degree of multiple sites of right wrist and hand, initial encounter -T23491D Corrosion of unspecified degree of multiple sites of right wrist and hand, subsequent encounter -T23491S Corrosion of unspecified degree of multiple sites of right wrist and hand, sequela -T23492A Corrosion of unspecified degree of multiple sites of left wrist and hand, initial encounter -T23492D Corrosion of unspecified degree of multiple sites of left wrist and hand, subsequent encounter -T23492S Corrosion of unspecified degree of multiple sites of left wrist and hand, sequela -T23499A Corrosion of unspecified degree of multiple sites of unspecified wrist and hand, initial encounter -T23499D Corrosion of unspecified degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23499S Corrosion of unspecified degree of multiple sites of unspecified wrist and hand, sequela -T23501A Corrosion of first degree of right hand, unspecified site, initial encounter -T23501D Corrosion of first degree of right hand, unspecified site, subsequent encounter -T23501S Corrosion of first degree of right hand, unspecified site, sequela -T23502A Corrosion of first degree of left hand, unspecified site, initial encounter -T23502D Corrosion of first degree of left hand, unspecified site, subsequent encounter -T23502S Corrosion of first degree of left hand, unspecified site, sequela -T23509A Corrosion of first degree of unspecified hand, unspecified site, initial encounter -T23509D Corrosion of first degree of unspecified hand, unspecified site, subsequent encounter -T23509S Corrosion of first degree of unspecified hand, unspecified site, sequela -T23511A Corrosion of first degree of right thumb (nail), initial encounter -T23511D Corrosion of first degree of right thumb (nail), subsequent encounter -T23511S Corrosion of first degree of right thumb (nail), sequela -T23512A Corrosion of first degree of left thumb (nail), initial encounter -T23512D Corrosion of first degree of left thumb (nail), subsequent encounter -T23512S Corrosion of first degree of left thumb (nail), sequela -T23519A Corrosion of first degree of unspecified thumb (nail), initial encounter -T23519D Corrosion of first degree of unspecified thumb (nail), subsequent encounter -T23519S Corrosion of first degree of unspecified thumb (nail), sequela -T23521A Corrosion of first degree of single right finger (nail) except thumb, initial encounter -T23521D Corrosion of first degree of single right finger (nail) except thumb, subsequent encounter -T23521S Corrosion of first degree of single right finger (nail) except thumb, sequela -T23522A Corrosion of first degree of single left finger (nail) except thumb, initial encounter -T23522D Corrosion of first degree of single left finger (nail) except thumb, subsequent encounter -T23522S Corrosion of first degree of single left finger (nail) except thumb, sequela -T23529A Corrosion of first degree of unspecified single finger (nail) except thumb, initial encounter -T23529D Corrosion of first degree of unspecified single finger (nail) except thumb, subsequent encounter -T23529S Corrosion of first degree of unspecified single finger (nail) except thumb, sequela -T23531A Corrosion of first degree of multiple right fingers (nail), not including thumb, initial encounter -T23531D Corrosion of first degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23531S Corrosion of first degree of multiple right fingers (nail), not including thumb, sequela -T23532A Corrosion of first degree of multiple left fingers (nail), not including thumb, initial encounter -T23532D Corrosion of first degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23532S Corrosion of first degree of multiple left fingers (nail), not including thumb, sequela -T23539A Corrosion of first degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23539D Corrosion of first degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23539S Corrosion of first degree of unspecified multiple fingers (nail), not including thumb, sequela -T23541A Corrosion of first degree of multiple right fingers (nail), including thumb, initial encounter -T23541D Corrosion of first degree of multiple right fingers (nail), including thumb, subsequent encounter -T23541S Corrosion of first degree of multiple right fingers (nail), including thumb, sequela -T23542A Corrosion of first degree of multiple left fingers (nail), including thumb, initial encounter -T23542D Corrosion of first degree of multiple left fingers (nail), including thumb, subsequent encounter -T23542S Corrosion of first degree of multiple left fingers (nail), including thumb, sequela -T23549A Corrosion of first degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23549D Corrosion of first degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23549S Corrosion of first degree of unspecified multiple fingers (nail), including thumb, sequela -T23551A Corrosion of first degree of right palm, initial encounter -T23551D Corrosion of first degree of right palm, subsequent encounter -T23551S Corrosion of first degree of right palm, sequela -T23552A Corrosion of first degree of left palm, initial encounter -T23552D Corrosion of first degree of left palm, subsequent encounter -T23552S Corrosion of first degree of left palm, sequela -T23559A Corrosion of first degree of unspecified palm, initial encounter -T23559D Corrosion of first degree of unspecified palm, subsequent encounter -T23559S Corrosion of first degree of unspecified palm, sequela -T23561A Corrosion of first degree of back of right hand, initial encounter -T23561D Corrosion of first degree of back of right hand, subsequent encounter -T23561S Corrosion of first degree of back of right hand, sequela -T23562A Corrosion of first degree of back of left hand, initial encounter -T23562D Corrosion of first degree of back of left hand, subsequent encounter -T23562S Corrosion of first degree of back of left hand, sequela -T23569A Corrosion of first degree of back of unspecified hand, initial encounter -T23569D Corrosion of first degree of back of unspecified hand, subsequent encounter -T23569S Corrosion of first degree of back of unspecified hand, sequela -T23571A Corrosion of first degree of right wrist, initial encounter -T23571D Corrosion of first degree of right wrist, subsequent encounter -T23571S Corrosion of first degree of right wrist, sequela -T23572A Corrosion of first degree of left wrist, initial encounter -T23572D Corrosion of first degree of left wrist, subsequent encounter -T23572S Corrosion of first degree of left wrist, sequela -T23579A Corrosion of first degree of unspecified wrist, initial encounter -T23579D Corrosion of first degree of unspecified wrist, subsequent encounter -T23579S Corrosion of first degree of unspecified wrist, sequela -T23591A Corrosion of first degree of multiple sites of right wrist and hand, initial encounter -T23591D Corrosion of first degree of multiple sites of right wrist and hand, subsequent encounter -T23591S Corrosion of first degree of multiple sites of right wrist and hand, sequela -T23592A Corrosion of first degree of multiple sites of left wrist and hand, initial encounter -T23592D Corrosion of first degree of multiple sites of left wrist and hand, subsequent encounter -T23592S Corrosion of first degree of multiple sites of left wrist and hand, sequela -T23599A Corrosion of first degree of multiple sites of unspecified wrist and hand, initial encounter -T23599D Corrosion of first degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23599S Corrosion of first degree of multiple sites of unspecified wrist and hand, sequela -T23601A Corrosion of second degree of right hand, unspecified site, initial encounter -T23601D Corrosion of second degree of right hand, unspecified site, subsequent encounter -T23601S Corrosion of second degree of right hand, unspecified site, sequela -T23602A Corrosion of second degree of left hand, unspecified site, initial encounter -T23602D Corrosion of second degree of left hand, unspecified site, subsequent encounter -T23602S Corrosion of second degree of left hand, unspecified site, sequela -T23609A Corrosion of second degree of unspecified hand, unspecified site, initial encounter -T23609D Corrosion of second degree of unspecified hand, unspecified site, subsequent encounter -T23609S Corrosion of second degree of unspecified hand, unspecified site, sequela -T23611A Corrosion of second degree of right thumb (nail), initial encounter -T23611D Corrosion of second degree of right thumb (nail), subsequent encounter -T23611S Corrosion of second degree of right thumb (nail), sequela -T23612A Corrosion of second degree of left thumb (nail), initial encounter -T23612D Corrosion of second degree of left thumb (nail), subsequent encounter -T23612S Corrosion of second degree of left thumb (nail), sequela -T23619A Corrosion of second degree of unspecified thumb (nail), initial encounter -T23619D Corrosion of second degree of unspecified thumb (nail), subsequent encounter -T23619S Corrosion of second degree of unspecified thumb (nail), sequela -T23621A Corrosion of second degree of single right finger (nail) except thumb, initial encounter -T23621D Corrosion of second degree of single right finger (nail) except thumb, subsequent encounter -T23621S Corrosion of second degree of single right finger (nail) except thumb, sequela -T23622A Corrosion of second degree of single left finger (nail) except thumb, initial encounter -T23622D Corrosion of second degree of single left finger (nail) except thumb, subsequent encounter -T23622S Corrosion of second degree of single left finger (nail) except thumb, sequela -T23629A Corrosion of second degree of unspecified single finger (nail) except thumb, initial encounter -T23629D Corrosion of second degree of unspecified single finger (nail) except thumb, subsequent encounter -T23629S Corrosion of second degree of unspecified single finger (nail) except thumb, sequela -T23631A Corrosion of second degree of multiple right fingers (nail), not including thumb, initial encounter -T23631D Corrosion of second degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23631S Corrosion of second degree of multiple right fingers (nail), not including thumb, sequela -T23632A Corrosion of second degree of multiple left fingers (nail), not including thumb, initial encounter -T23632D Corrosion of second degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23632S Corrosion of second degree of multiple left fingers (nail), not including thumb, sequela -T23639A Corrosion of second degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23639D Corrosion of second degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23639S Corrosion of second degree of unspecified multiple fingers (nail), not including thumb, sequela -T23641A Corrosion of second degree of multiple right fingers (nail), including thumb, initial encounter -T23641D Corrosion of second degree of multiple right fingers (nail), including thumb, subsequent encounter -T23641S Corrosion of second degree of multiple right fingers (nail), including thumb, sequela -T23642A Corrosion of second degree of multiple left fingers (nail), including thumb, initial encounter -T23642D Corrosion of second degree of multiple left fingers (nail), including thumb, subsequent encounter -T23642S Corrosion of second degree of multiple left fingers (nail), including thumb, sequela -T23649A Corrosion of second degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23649D Corrosion of second degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23649S Corrosion of second degree of unspecified multiple fingers (nail), including thumb, sequela -T23651A Corrosion of second degree of right palm, initial encounter -T23651D Corrosion of second degree of right palm, subsequent encounter -T23651S Corrosion of second degree of right palm, sequela -T23652A Corrosion of second degree of left palm, initial encounter -T23652D Corrosion of second degree of left palm, subsequent encounter -T23652S Corrosion of second degree of left palm, sequela -T23659A Corrosion of second degree of unspecified palm, initial encounter -T23659D Corrosion of second degree of unspecified palm, subsequent encounter -T23659S Corrosion of second degree of unspecified palm, sequela -T23661A Corrosion of second degree back of right hand, initial encounter -T23661D Corrosion of second degree back of right hand, subsequent encounter -T23661S Corrosion of second degree back of right hand, sequela -T23662A Corrosion of second degree back of left hand, initial encounter -T23662D Corrosion of second degree back of left hand, subsequent encounter -T23662S Corrosion of second degree back of left hand, sequela -T23669A Corrosion of second degree back of unspecified hand, initial encounter -T23669D Corrosion of second degree back of unspecified hand, subsequent encounter -T23669S Corrosion of second degree back of unspecified hand, sequela -T23671A Corrosion of second degree of right wrist, initial encounter -T23671D Corrosion of second degree of right wrist, subsequent encounter -T23671S Corrosion of second degree of right wrist, sequela -T23672A Corrosion of second degree of left wrist, initial encounter -T23672D Corrosion of second degree of left wrist, subsequent encounter -T23672S Corrosion of second degree of left wrist, sequela -T23679A Corrosion of second degree of unspecified wrist, initial encounter -T23679D Corrosion of second degree of unspecified wrist, subsequent encounter -T23679S Corrosion of second degree of unspecified wrist, sequela -T23691A Corrosion of second degree of multiple sites of right wrist and hand, initial encounter -T23691D Corrosion of second degree of multiple sites of right wrist and hand, subsequent encounter -T23691S Corrosion of second degree of multiple sites of right wrist and hand, sequela -T23692A Corrosion of second degree of multiple sites of left wrist and hand, initial encounter -T23692D Corrosion of second degree of multiple sites of left wrist and hand, subsequent encounter -T23692S Corrosion of second degree of multiple sites of left wrist and hand, sequela -T23699A Corrosion of second degree of multiple sites of unspecified wrist and hand, initial encounter -T23699D Corrosion of second degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23699S Corrosion of second degree of multiple sites of unspecified wrist and hand, sequela -T23701A Corrosion of third degree of right hand, unspecified site, initial encounter -T23701D Corrosion of third degree of right hand, unspecified site, subsequent encounter -T23701S Corrosion of third degree of right hand, unspecified site, sequela -T23702A Corrosion of third degree of left hand, unspecified site, initial encounter -T23702D Corrosion of third degree of left hand, unspecified site, subsequent encounter -T23702S Corrosion of third degree of left hand, unspecified site, sequela -T23709A Corrosion of third degree of unspecified hand, unspecified site, initial encounter -T23709D Corrosion of third degree of unspecified hand, unspecified site, subsequent encounter -T23709S Corrosion of third degree of unspecified hand, unspecified site, sequela -T23711A Corrosion of third degree of right thumb (nail), initial encounter -T23711D Corrosion of third degree of right thumb (nail), subsequent encounter -T23711S Corrosion of third degree of right thumb (nail), sequela -T23712A Corrosion of third degree of left thumb (nail), initial encounter -T23712D Corrosion of third degree of left thumb (nail), subsequent encounter -T23712S Corrosion of third degree of left thumb (nail), sequela -T23719A Corrosion of third degree of unspecified thumb (nail), initial encounter -T23719D Corrosion of third degree of unspecified thumb (nail), subsequent encounter -T23719S Corrosion of third degree of unspecified thumb (nail), sequela -T23721A Corrosion of third degree of single right finger (nail) except thumb, initial encounter -T23721D Corrosion of third degree of single right finger (nail) except thumb, subsequent encounter -T23721S Corrosion of third degree of single right finger (nail) except thumb, sequela -T23722A Corrosion of third degree of single left finger (nail) except thumb, initial encounter -T23722D Corrosion of third degree of single left finger (nail) except thumb, subsequent encounter -T23722S Corrosion of third degree of single left finger (nail) except thumb, sequela -T23729A Corrosion of third degree of unspecified single finger (nail) except thumb, initial encounter -T23729D Corrosion of third degree of unspecified single finger (nail) except thumb, subsequent encounter -T23729S Corrosion of third degree of unspecified single finger (nail) except thumb, sequela -T23731A Corrosion of third degree of multiple right fingers (nail), not including thumb, initial encounter -T23731D Corrosion of third degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23731S Corrosion of third degree of multiple right fingers (nail), not including thumb, sequela -T23732A Corrosion of third degree of multiple left fingers (nail), not including thumb, initial encounter -T23732D Corrosion of third degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23732S Corrosion of third degree of multiple left fingers (nail), not including thumb, sequela -T23739A Corrosion of third degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23739D Corrosion of third degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23739S Corrosion of third degree of unspecified multiple fingers (nail), not including thumb, sequela -T23741A Corrosion of third degree of multiple right fingers (nail), including thumb, initial encounter -T23741D Corrosion of third degree of multiple right fingers (nail), including thumb, subsequent encounter -T23741S Corrosion of third degree of multiple right fingers (nail), including thumb, sequela -T23742A Corrosion of third degree of multiple left fingers (nail), including thumb, initial encounter -T23742D Corrosion of third degree of multiple left fingers (nail), including thumb, subsequent encounter -T23742S Corrosion of third degree of multiple left fingers (nail), including thumb, sequela -T23749A Corrosion of third degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23749D Corrosion of third degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23749S Corrosion of third degree of unspecified multiple fingers (nail), including thumb, sequela -T23751A Corrosion of third degree of right palm, initial encounter -T23751D Corrosion of third degree of right palm, subsequent encounter -T23751S Corrosion of third degree of right palm, sequela -T23752A Corrosion of third degree of left palm, initial encounter -T23752D Corrosion of third degree of left palm, subsequent encounter -T23752S Corrosion of third degree of left palm, sequela -T23759A Corrosion of third degree of unspecified palm, initial encounter -T23759D Corrosion of third degree of unspecified palm, subsequent encounter -T23759S Corrosion of third degree of unspecified palm, sequela -T23761A Corrosion of third degree of back of right hand, initial encounter -T23761D Corrosion of third degree of back of right hand, subsequent encounter -T23761S Corrosion of third degree of back of right hand, sequela -T23762A Corrosion of third degree of back of left hand, initial encounter -T23762D Corrosion of third degree of back of left hand, subsequent encounter -T23762S Corrosion of third degree of back of left hand, sequela -T23769A Corrosion of third degree back of unspecified hand, initial encounter -T23769D Corrosion of third degree back of unspecified hand, subsequent encounter -T23769S Corrosion of third degree back of unspecified hand, sequela -T23771A Corrosion of third degree of right wrist, initial encounter -T23771D Corrosion of third degree of right wrist, subsequent encounter -T23771S Corrosion of third degree of right wrist, sequela -T23772A Corrosion of third degree of left wrist, initial encounter -T23772D Corrosion of third degree of left wrist, subsequent encounter -T23772S Corrosion of third degree of left wrist, sequela -T23779A Corrosion of third degree of unspecified wrist, initial encounter -T23779D Corrosion of third degree of unspecified wrist, subsequent encounter -T23779S Corrosion of third degree of unspecified wrist, sequela -T23791A Corrosion of third degree of multiple sites of right wrist and hand, initial encounter -T23791D Corrosion of third degree of multiple sites of right wrist and hand, subsequent encounter -T23791S Corrosion of third degree of multiple sites of right wrist and hand, sequela -T23792A Corrosion of third degree of multiple sites of left wrist and hand, initial encounter -T23792D Corrosion of third degree of multiple sites of left wrist and hand, subsequent encounter -T23792S Corrosion of third degree of multiple sites of left wrist and hand, sequela -T23799A Corrosion of third degree of multiple sites of unspecified wrist and hand, initial encounter -T23799D Corrosion of third degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23799S Corrosion of third degree of multiple sites of unspecified wrist and hand, sequela -T24001A Burn of unspecified degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24001D Burn of unspecified degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24001S Burn of unspecified degree of unspecified site of right lower limb, except ankle and foot, sequela -T24002A Burn of unspecified degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24002D Burn of unspecified degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24002S Burn of unspecified degree of unspecified site of left lower limb, except ankle and foot, sequela -T24009A Burn of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24009D Burn of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24009S Burn of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24011A Burn of unspecified degree of right thigh, initial encounter -T24011D Burn of unspecified degree of right thigh, subsequent encounter -T24011S Burn of unspecified degree of right thigh, sequela -T24012A Burn of unspecified degree of left thigh, initial encounter -T24012D Burn of unspecified degree of left thigh, subsequent encounter -T24012S Burn of unspecified degree of left thigh, sequela -T24019A Burn of unspecified degree of unspecified thigh, initial encounter -T24019D Burn of unspecified degree of unspecified thigh, subsequent encounter -T24019S Burn of unspecified degree of unspecified thigh, sequela -T24021A Burn of unspecified degree of right knee, initial encounter -T24021D Burn of unspecified degree of right knee, subsequent encounter -T24021S Burn of unspecified degree of right knee, sequela -T24022A Burn of unspecified degree of left knee, initial encounter -T24022D Burn of unspecified degree of left knee, subsequent encounter -T24022S Burn of unspecified degree of left knee, sequela -T24029A Burn of unspecified degree of unspecified knee, initial encounter -T24029D Burn of unspecified degree of unspecified knee, subsequent encounter -T24029S Burn of unspecified degree of unspecified knee, sequela -T24031A Burn of unspecified degree of right lower leg, initial encounter -T24031D Burn of unspecified degree of right lower leg, subsequent encounter -T24031S Burn of unspecified degree of right lower leg, sequela -T24032A Burn of unspecified degree of left lower leg, initial encounter -T24032D Burn of unspecified degree of left lower leg, subsequent encounter -T24032S Burn of unspecified degree of left lower leg, sequela -T24039A Burn of unspecified degree of unspecified lower leg, initial encounter -T24039D Burn of unspecified degree of unspecified lower leg, subsequent encounter -T24039S Burn of unspecified degree of unspecified lower leg, sequela -T24091A Burn of unspecified degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24091D Burn of unspecified degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24091S Burn of unspecified degree of multiple sites of right lower limb, except ankle and foot, sequela -T24092A Burn of unspecified degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24092D Burn of unspecified degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24092S Burn of unspecified degree of multiple sites of left lower limb, except ankle and foot, sequela -T24099A Burn of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24099D Burn of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24099S Burn of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24101A Burn of first degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24101D Burn of first degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24101S Burn of first degree of unspecified site of right lower limb, except ankle and foot, sequela -T24102A Burn of first degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24102D Burn of first degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24102S Burn of first degree of unspecified site of left lower limb, except ankle and foot, sequela -T24109A Burn of first degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24109D Burn of first degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24109S Burn of first degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24111A Burn of first degree of right thigh, initial encounter -T24111D Burn of first degree of right thigh, subsequent encounter -T24111S Burn of first degree of right thigh, sequela -T24112A Burn of first degree of left thigh, initial encounter -T24112D Burn of first degree of left thigh, subsequent encounter -T24112S Burn of first degree of left thigh, sequela -T24119A Burn of first degree of unspecified thigh, initial encounter -T24119D Burn of first degree of unspecified thigh, subsequent encounter -T24119S Burn of first degree of unspecified thigh, sequela -T24121A Burn of first degree of right knee, initial encounter -T24121D Burn of first degree of right knee, subsequent encounter -T24121S Burn of first degree of right knee, sequela -T24122A Burn of first degree of left knee, initial encounter -T24122D Burn of first degree of left knee, subsequent encounter -T24122S Burn of first degree of left knee, sequela -T24129A Burn of first degree of unspecified knee, initial encounter -T24129D Burn of first degree of unspecified knee, subsequent encounter -T24129S Burn of first degree of unspecified knee, sequela -T24131A Burn of first degree of right lower leg, initial encounter -T24131D Burn of first degree of right lower leg, subsequent encounter -T24131S Burn of first degree of right lower leg, sequela -T24132A Burn of first degree of left lower leg, initial encounter -T24132D Burn of first degree of left lower leg, subsequent encounter -T24132S Burn of first degree of left lower leg, sequela -T24139A Burn of first degree of unspecified lower leg, initial encounter -T24139D Burn of first degree of unspecified lower leg, subsequent encounter -T24139S Burn of first degree of unspecified lower leg, sequela -T24191A Burn of first degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24191D Burn of first degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24191S Burn of first degree of multiple sites of right lower limb, except ankle and foot, sequela -T24192A Burn of first degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24192D Burn of first degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24192S Burn of first degree of multiple sites of left lower limb, except ankle and foot, sequela -T24199A Burn of first degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24199D Burn of first degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24199S Burn of first degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24201A Burn of second degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24201D Burn of second degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24201S Burn of second degree of unspecified site of right lower limb, except ankle and foot, sequela -T24202A Burn of second degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24202D Burn of second degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24202S Burn of second degree of unspecified site of left lower limb, except ankle and foot, sequela -T24209A Burn of second degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24209D Burn of second degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24209S Burn of second degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24211A Burn of second degree of right thigh, initial encounter -T24211D Burn of second degree of right thigh, subsequent encounter -T24211S Burn of second degree of right thigh, sequela -T24212A Burn of second degree of left thigh, initial encounter -T24212D Burn of second degree of left thigh, subsequent encounter -T24212S Burn of second degree of left thigh, sequela -T24219A Burn of second degree of unspecified thigh, initial encounter -T24219D Burn of second degree of unspecified thigh, subsequent encounter -T24219S Burn of second degree of unspecified thigh, sequela -T24221A Burn of second degree of right knee, initial encounter -T24221D Burn of second degree of right knee, subsequent encounter -T24221S Burn of second degree of right knee, sequela -T24222A Burn of second degree of left knee, initial encounter -T24222D Burn of second degree of left knee, subsequent encounter -T24222S Burn of second degree of left knee, sequela -T24229A Burn of second degree of unspecified knee, initial encounter -T24229D Burn of second degree of unspecified knee, subsequent encounter -T24229S Burn of second degree of unspecified knee, sequela -T24231A Burn of second degree of right lower leg, initial encounter -T24231D Burn of second degree of right lower leg, subsequent encounter -T24231S Burn of second degree of right lower leg, sequela -T24232A Burn of second degree of left lower leg, initial encounter -T24232D Burn of second degree of left lower leg, subsequent encounter -T24232S Burn of second degree of left lower leg, sequela -T24239A Burn of second degree of unspecified lower leg, initial encounter -T24239D Burn of second degree of unspecified lower leg, subsequent encounter -T24239S Burn of second degree of unspecified lower leg, sequela -T24291A Burn of second degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24291D Burn of second degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24291S Burn of second degree of multiple sites of right lower limb, except ankle and foot, sequela -T24292A Burn of second degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24292D Burn of second degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24292S Burn of second degree of multiple sites of left lower limb, except ankle and foot, sequela -T24299A Burn of second degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24299D Burn of second degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24299S Burn of second degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24301A Burn of third degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24301D Burn of third degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24301S Burn of third degree of unspecified site of right lower limb, except ankle and foot, sequela -T24302A Burn of third degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24302D Burn of third degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24302S Burn of third degree of unspecified site of left lower limb, except ankle and foot, sequela -T24309A Burn of third degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24309D Burn of third degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24309S Burn of third degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24311A Burn of third degree of right thigh, initial encounter -T24311D Burn of third degree of right thigh, subsequent encounter -T24311S Burn of third degree of right thigh, sequela -T24312A Burn of third degree of left thigh, initial encounter -T24312D Burn of third degree of left thigh, subsequent encounter -T24312S Burn of third degree of left thigh, sequela -T24319A Burn of third degree of unspecified thigh, initial encounter -T24319D Burn of third degree of unspecified thigh, subsequent encounter -T24319S Burn of third degree of unspecified thigh, sequela -T24321A Burn of third degree of right knee, initial encounter -T24321D Burn of third degree of right knee, subsequent encounter -T24321S Burn of third degree of right knee, sequela -T24322A Burn of third degree of left knee, initial encounter -T24322D Burn of third degree of left knee, subsequent encounter -T24322S Burn of third degree of left knee, sequela -T24329A Burn of third degree of unspecified knee, initial encounter -T24329D Burn of third degree of unspecified knee, subsequent encounter -T24329S Burn of third degree of unspecified knee, sequela -T24331A Burn of third degree of right lower leg, initial encounter -T24331D Burn of third degree of right lower leg, subsequent encounter -T24331S Burn of third degree of right lower leg, sequela -T24332A Burn of third degree of left lower leg, initial encounter -T24332D Burn of third degree of left lower leg, subsequent encounter -T24332S Burn of third degree of left lower leg, sequela -T24339A Burn of third degree of unspecified lower leg, initial encounter -T24339D Burn of third degree of unspecified lower leg, subsequent encounter -T24339S Burn of third degree of unspecified lower leg, sequela -T24391A Burn of third degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24391D Burn of third degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24391S Burn of third degree of multiple sites of right lower limb, except ankle and foot, sequela -T24392A Burn of third degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24392D Burn of third degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24392S Burn of third degree of multiple sites of left lower limb, except ankle and foot, sequela -T24399A Burn of third degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24399D Burn of third degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24399S Burn of third degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24401A Corrosion of unspecified degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24401D Corrosion of unspecified degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24401S Corrosion of unspecified degree of unspecified site of right lower limb, except ankle and foot, sequela -T24402A Corrosion of unspecified degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24402D Corrosion of unspecified degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24402S Corrosion of unspecified degree of unspecified site of left lower limb, except ankle and foot, sequela -T24409A Corrosion of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24409D Corrosion of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24409S Corrosion of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24411A Corrosion of unspecified degree of right thigh, initial encounter -T24411D Corrosion of unspecified degree of right thigh, subsequent encounter -T24411S Corrosion of unspecified degree of right thigh, sequela -T24412A Corrosion of unspecified degree of left thigh, initial encounter -T24412D Corrosion of unspecified degree of left thigh, subsequent encounter -T24412S Corrosion of unspecified degree of left thigh, sequela -T24419A Corrosion of unspecified degree of unspecified thigh, initial encounter -T24419D Corrosion of unspecified degree of unspecified thigh, subsequent encounter -T24419S Corrosion of unspecified degree of unspecified thigh, sequela -T24421A Corrosion of unspecified degree of right knee, initial encounter -T24421D Corrosion of unspecified degree of right knee, subsequent encounter -T24421S Corrosion of unspecified degree of right knee, sequela -T24422A Corrosion of unspecified degree of left knee, initial encounter -T24422D Corrosion of unspecified degree of left knee, subsequent encounter -T24422S Corrosion of unspecified degree of left knee, sequela -T24429A Corrosion of unspecified degree of unspecified knee, initial encounter -T24429D Corrosion of unspecified degree of unspecified knee, subsequent encounter -T24429S Corrosion of unspecified degree of unspecified knee, sequela -T24431A Corrosion of unspecified degree of right lower leg, initial encounter -T24431D Corrosion of unspecified degree of right lower leg, subsequent encounter -T24431S Corrosion of unspecified degree of right lower leg, sequela -T24432A Corrosion of unspecified degree of left lower leg, initial encounter -T24432D Corrosion of unspecified degree of left lower leg, subsequent encounter -T24432S Corrosion of unspecified degree of left lower leg, sequela -T24439A Corrosion of unspecified degree of unspecified lower leg, initial encounter -T24439D Corrosion of unspecified degree of unspecified lower leg, subsequent encounter -T24439S Corrosion of unspecified degree of unspecified lower leg, sequela -T24491A Corrosion of unspecified degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24491D Corrosion of unspecified degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24491S Corrosion of unspecified degree of multiple sites of right lower limb, except ankle and foot, sequela -T24492A Corrosion of unspecified degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24492D Corrosion of unspecified degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24492S Corrosion of unspecified degree of multiple sites of left lower limb, except ankle and foot, sequela -T24499A Corrosion of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24499D Corrosion of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24499S Corrosion of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24501A Corrosion of first degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24501D Corrosion of first degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24501S Corrosion of first degree of unspecified site of right lower limb, except ankle and foot, sequela -T24502A Corrosion of first degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24502D Corrosion of first degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24502S Corrosion of first degree of unspecified site of left lower limb, except ankle and foot, sequela -T24509A Corrosion of first degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24509D Corrosion of first degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24509S Corrosion of first degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24511A Corrosion of first degree of right thigh, initial encounter -T24511D Corrosion of first degree of right thigh, subsequent encounter -T24511S Corrosion of first degree of right thigh, sequela -T24512A Corrosion of first degree of left thigh, initial encounter -T24512D Corrosion of first degree of left thigh, subsequent encounter -T24512S Corrosion of first degree of left thigh, sequela -T24519A Corrosion of first degree of unspecified thigh, initial encounter -T24519D Corrosion of first degree of unspecified thigh, subsequent encounter -T24519S Corrosion of first degree of unspecified thigh, sequela -T24521A Corrosion of first degree of right knee, initial encounter -T24521D Corrosion of first degree of right knee, subsequent encounter -T24521S Corrosion of first degree of right knee, sequela -T24522A Corrosion of first degree of left knee, initial encounter -T24522D Corrosion of first degree of left knee, subsequent encounter -T24522S Corrosion of first degree of left knee, sequela -T24529A Corrosion of first degree of unspecified knee, initial encounter -T24529D Corrosion of first degree of unspecified knee, subsequent encounter -T24529S Corrosion of first degree of unspecified knee, sequela -T24531A Corrosion of first degree of right lower leg, initial encounter -T24531D Corrosion of first degree of right lower leg, subsequent encounter -T24531S Corrosion of first degree of right lower leg, sequela -T24532A Corrosion of first degree of left lower leg, initial encounter -T24532D Corrosion of first degree of left lower leg, subsequent encounter -T24532S Corrosion of first degree of left lower leg, sequela -T24539A Corrosion of first degree of unspecified lower leg, initial encounter -T24539D Corrosion of first degree of unspecified lower leg, subsequent encounter -T24539S Corrosion of first degree of unspecified lower leg, sequela -T24591A Corrosion of first degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24591D Corrosion of first degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24591S Corrosion of first degree of multiple sites of right lower limb, except ankle and foot, sequela -T24592A Corrosion of first degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24592D Corrosion of first degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24592S Corrosion of first degree of multiple sites of left lower limb, except ankle and foot, sequela -T24599A Corrosion of first degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24599D Corrosion of first degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24599S Corrosion of first degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24601A Corrosion of second degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24601D Corrosion of second degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24601S Corrosion of second degree of unspecified site of right lower limb, except ankle and foot, sequela -T24602A Corrosion of second degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24602D Corrosion of second degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24602S Corrosion of second degree of unspecified site of left lower limb, except ankle and foot, sequela -T24609A Corrosion of second degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24609D Corrosion of second degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24609S Corrosion of second degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24611A Corrosion of second degree of right thigh, initial encounter -T24611D Corrosion of second degree of right thigh, subsequent encounter -T24611S Corrosion of second degree of right thigh, sequela -T24612A Corrosion of second degree of left thigh, initial encounter -T24612D Corrosion of second degree of left thigh, subsequent encounter -T24612S Corrosion of second degree of left thigh, sequela -T24619A Corrosion of second degree of unspecified thigh, initial encounter -T24619D Corrosion of second degree of unspecified thigh, subsequent encounter -T24619S Corrosion of second degree of unspecified thigh, sequela -T24621A Corrosion of second degree of right knee, initial encounter -T24621D Corrosion of second degree of right knee, subsequent encounter -T24621S Corrosion of second degree of right knee, sequela -T24622A Corrosion of second degree of left knee, initial encounter -T24622D Corrosion of second degree of left knee, subsequent encounter -T24622S Corrosion of second degree of left knee, sequela -T24629A Corrosion of second degree of unspecified knee, initial encounter -T24629D Corrosion of second degree of unspecified knee, subsequent encounter -T24629S Corrosion of second degree of unspecified knee, sequela -T24631A Corrosion of second degree of right lower leg, initial encounter -T24631D Corrosion of second degree of right lower leg, subsequent encounter -T24631S Corrosion of second degree of right lower leg, sequela -T24632A Corrosion of second degree of left lower leg, initial encounter -T24632D Corrosion of second degree of left lower leg, subsequent encounter -T24632S Corrosion of second degree of left lower leg, sequela -T24639A Corrosion of second degree of unspecified lower leg, initial encounter -T24639D Corrosion of second degree of unspecified lower leg, subsequent encounter -T24639S Corrosion of second degree of unspecified lower leg, sequela -T24691A Corrosion of second degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24691D Corrosion of second degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24691S Corrosion of second degree of multiple sites of right lower limb, except ankle and foot, sequela -T24692A Corrosion of second degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24692D Corrosion of second degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24692S Corrosion of second degree of multiple sites of left lower limb, except ankle and foot, sequela -T24699A Corrosion of second degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24699D Corrosion of second degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24699S Corrosion of second degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24701A Corrosion of third degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24701D Corrosion of third degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24701S Corrosion of third degree of unspecified site of right lower limb, except ankle and foot, sequela -T24702A Corrosion of third degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24702D Corrosion of third degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24702S Corrosion of third degree of unspecified site of left lower limb, except ankle and foot, sequela -T24709A Corrosion of third degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24709D Corrosion of third degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24709S Corrosion of third degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24711A Corrosion of third degree of right thigh, initial encounter -T24711D Corrosion of third degree of right thigh, subsequent encounter -T24711S Corrosion of third degree of right thigh, sequela -T24712A Corrosion of third degree of left thigh, initial encounter -T24712D Corrosion of third degree of left thigh, subsequent encounter -T24712S Corrosion of third degree of left thigh, sequela -T24719A Corrosion of third degree of unspecified thigh, initial encounter -T24719D Corrosion of third degree of unspecified thigh, subsequent encounter -T24719S Corrosion of third degree of unspecified thigh, sequela -T24721A Corrosion of third degree of right knee, initial encounter -T24721D Corrosion of third degree of right knee, subsequent encounter -T24721S Corrosion of third degree of right knee, sequela -T24722A Corrosion of third degree of left knee, initial encounter -T24722D Corrosion of third degree of left knee, subsequent encounter -T24722S Corrosion of third degree of left knee, sequela -T24729A Corrosion of third degree of unspecified knee, initial encounter -T24729D Corrosion of third degree of unspecified knee, subsequent encounter -T24729S Corrosion of third degree of unspecified knee, sequela -T24731A Corrosion of third degree of right lower leg, initial encounter -T24731D Corrosion of third degree of right lower leg, subsequent encounter -T24731S Corrosion of third degree of right lower leg, sequela -T24732A Corrosion of third degree of left lower leg, initial encounter -T24732D Corrosion of third degree of left lower leg, subsequent encounter -T24732S Corrosion of third degree of left lower leg, sequela -T24739A Corrosion of third degree of unspecified lower leg, initial encounter -T24739D Corrosion of third degree of unspecified lower leg, subsequent encounter -T24739S Corrosion of third degree of unspecified lower leg, sequela -T24791A Corrosion of third degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24791D Corrosion of third degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24791S Corrosion of third degree of multiple sites of right lower limb, except ankle and foot, sequela -T24792A Corrosion of third degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24792D Corrosion of third degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24792S Corrosion of third degree of multiple sites of left lower limb, except ankle and foot, sequela -T24799A Corrosion of third degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24799D Corrosion of third degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24799S Corrosion of third degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T25011A Burn of unspecified degree of right ankle, initial encounter -T25011D Burn of unspecified degree of right ankle, subsequent encounter -T25011S Burn of unspecified degree of right ankle, sequela -T25012A Burn of unspecified degree of left ankle, initial encounter -T25012D Burn of unspecified degree of left ankle, subsequent encounter -T25012S Burn of unspecified degree of left ankle, sequela -T25019A Burn of unspecified degree of unspecified ankle, initial encounter -T25019D Burn of unspecified degree of unspecified ankle, subsequent encounter -T25019S Burn of unspecified degree of unspecified ankle, sequela -T25021A Burn of unspecified degree of right foot, initial encounter -T25021D Burn of unspecified degree of right foot, subsequent encounter -T25021S Burn of unspecified degree of right foot, sequela -T25022A Burn of unspecified degree of left foot, initial encounter -T25022D Burn of unspecified degree of left foot, subsequent encounter -T25022S Burn of unspecified degree of left foot, sequela -T25029A Burn of unspecified degree of unspecified foot, initial encounter -T25029D Burn of unspecified degree of unspecified foot, subsequent encounter -T25029S Burn of unspecified degree of unspecified foot, sequela -T25031A Burn of unspecified degree of right toe(s) (nail), initial encounter -T25031D Burn of unspecified degree of right toe(s) (nail), subsequent encounter -T25031S Burn of unspecified degree of right toe(s) (nail), sequela -T25032A Burn of unspecified degree of left toe(s) (nail), initial encounter -T25032D Burn of unspecified degree of left toe(s) (nail), subsequent encounter -T25032S Burn of unspecified degree of left toe(s) (nail), sequela -T25039A Burn of unspecified degree of unspecified toe(s) (nail), initial encounter -T25039D Burn of unspecified degree of unspecified toe(s) (nail), subsequent encounter -T25039S Burn of unspecified degree of unspecified toe(s) (nail), sequela -T25091A Burn of unspecified degree of multiple sites of right ankle and foot, initial encounter -T25091D Burn of unspecified degree of multiple sites of right ankle and foot, subsequent encounter -T25091S Burn of unspecified degree of multiple sites of right ankle and foot, sequela -T25092A Burn of unspecified degree of multiple sites of left ankle and foot, initial encounter -T25092D Burn of unspecified degree of multiple sites of left ankle and foot, subsequent encounter -T25092S Burn of unspecified degree of multiple sites of left ankle and foot, sequela -T25099A Burn of unspecified degree of multiple sites of unspecified ankle and foot, initial encounter -T25099D Burn of unspecified degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25099S Burn of unspecified degree of multiple sites of unspecified ankle and foot, sequela -T25111A Burn of first degree of right ankle, initial encounter -T25111D Burn of first degree of right ankle, subsequent encounter -T25111S Burn of first degree of right ankle, sequela -T25112A Burn of first degree of left ankle, initial encounter -T25112D Burn of first degree of left ankle, subsequent encounter -T25112S Burn of first degree of left ankle, sequela -T25119A Burn of first degree of unspecified ankle, initial encounter -T25119D Burn of first degree of unspecified ankle, subsequent encounter -T25119S Burn of first degree of unspecified ankle, sequela -T25121A Burn of first degree of right foot, initial encounter -T25121D Burn of first degree of right foot, subsequent encounter -T25121S Burn of first degree of right foot, sequela -T25122A Burn of first degree of left foot, initial encounter -T25122D Burn of first degree of left foot, subsequent encounter -T25122S Burn of first degree of left foot, sequela -T25129A Burn of first degree of unspecified foot, initial encounter -T25129D Burn of first degree of unspecified foot, subsequent encounter -T25129S Burn of first degree of unspecified foot, sequela -T25131A Burn of first degree of right toe(s) (nail), initial encounter -T25131D Burn of first degree of right toe(s) (nail), subsequent encounter -T25131S Burn of first degree of right toe(s) (nail), sequela -T25132A Burn of first degree of left toe(s) (nail), initial encounter -T25132D Burn of first degree of left toe(s) (nail), subsequent encounter -T25132S Burn of first degree of left toe(s) (nail), sequela -T25139A Burn of first degree of unspecified toe(s) (nail), initial encounter -T25139D Burn of first degree of unspecified toe(s) (nail), subsequent encounter -T25139S Burn of first degree of unspecified toe(s) (nail), sequela -T25191A Burn of first degree of multiple sites of right ankle and foot, initial encounter -T25191D Burn of first degree of multiple sites of right ankle and foot, subsequent encounter -T25191S Burn of first degree of multiple sites of right ankle and foot, sequela -T25192A Burn of first degree of multiple sites of left ankle and foot, initial encounter -T25192D Burn of first degree of multiple sites of left ankle and foot, subsequent encounter -T25192S Burn of first degree of multiple sites of left ankle and foot, sequela -T25199A Burn of first degree of multiple sites of unspecified ankle and foot, initial encounter -T25199D Burn of first degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25199S Burn of first degree of multiple sites of unspecified ankle and foot, sequela -T25211A Burn of second degree of right ankle, initial encounter -T25211D Burn of second degree of right ankle, subsequent encounter -T25211S Burn of second degree of right ankle, sequela -T25212A Burn of second degree of left ankle, initial encounter -T25212D Burn of second degree of left ankle, subsequent encounter -T25212S Burn of second degree of left ankle, sequela -T25219A Burn of second degree of unspecified ankle, initial encounter -T25219D Burn of second degree of unspecified ankle, subsequent encounter -T25219S Burn of second degree of unspecified ankle, sequela -T25221A Burn of second degree of right foot, initial encounter -T25221D Burn of second degree of right foot, subsequent encounter -T25221S Burn of second degree of right foot, sequela -T25222A Burn of second degree of left foot, initial encounter -T25222D Burn of second degree of left foot, subsequent encounter -T25222S Burn of second degree of left foot, sequela -T25229A Burn of second degree of unspecified foot, initial encounter -T25229D Burn of second degree of unspecified foot, subsequent encounter -T25229S Burn of second degree of unspecified foot, sequela -T25231A Burn of second degree of right toe(s) (nail), initial encounter -T25231D Burn of second degree of right toe(s) (nail), subsequent encounter -T25231S Burn of second degree of right toe(s) (nail), sequela -T25232A Burn of second degree of left toe(s) (nail), initial encounter -T25232D Burn of second degree of left toe(s) (nail), subsequent encounter -T25232S Burn of second degree of left toe(s) (nail), sequela -T25239A Burn of second degree of unspecified toe(s) (nail), initial encounter -T25239D Burn of second degree of unspecified toe(s) (nail), subsequent encounter -T25239S Burn of second degree of unspecified toe(s) (nail), sequela -T25291A Burn of second degree of multiple sites of right ankle and foot, initial encounter -T25291D Burn of second degree of multiple sites of right ankle and foot, subsequent encounter -T25291S Burn of second degree of multiple sites of right ankle and foot, sequela -T25292A Burn of second degree of multiple sites of left ankle and foot, initial encounter -T25292D Burn of second degree of multiple sites of left ankle and foot, subsequent encounter -T25292S Burn of second degree of multiple sites of left ankle and foot, sequela -T25299A Burn of second degree of multiple sites of unspecified ankle and foot, initial encounter -T25299D Burn of second degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25299S Burn of second degree of multiple sites of unspecified ankle and foot, sequela -T25311A Burn of third degree of right ankle, initial encounter -T25311D Burn of third degree of right ankle, subsequent encounter -T25311S Burn of third degree of right ankle, sequela -T25312A Burn of third degree of left ankle, initial encounter -T25312D Burn of third degree of left ankle, subsequent encounter -T25312S Burn of third degree of left ankle, sequela -T25319A Burn of third degree of unspecified ankle, initial encounter -T25319D Burn of third degree of unspecified ankle, subsequent encounter -T25319S Burn of third degree of unspecified ankle, sequela -T25321A Burn of third degree of right foot, initial encounter -T25321D Burn of third degree of right foot, subsequent encounter -T25321S Burn of third degree of right foot, sequela -T25322A Burn of third degree of left foot, initial encounter -T25322D Burn of third degree of left foot, subsequent encounter -T25322S Burn of third degree of left foot, sequela -T25329A Burn of third degree of unspecified foot, initial encounter -T25329D Burn of third degree of unspecified foot, subsequent encounter -T25329S Burn of third degree of unspecified foot, sequela -T25331A Burn of third degree of right toe(s) (nail), initial encounter -T25331D Burn of third degree of right toe(s) (nail), subsequent encounter -T25331S Burn of third degree of right toe(s) (nail), sequela -T25332A Burn of third degree of left toe(s) (nail), initial encounter -T25332D Burn of third degree of left toe(s) (nail), subsequent encounter -T25332S Burn of third degree of left toe(s) (nail), sequela -T25339A Burn of third degree of unspecified toe(s) (nail), initial encounter -T25339D Burn of third degree of unspecified toe(s) (nail), subsequent encounter -T25339S Burn of third degree of unspecified toe(s) (nail), sequela -T25391A Burn of third degree of multiple sites of right ankle and foot, initial encounter -T25391D Burn of third degree of multiple sites of right ankle and foot, subsequent encounter -T25391S Burn of third degree of multiple sites of right ankle and foot, sequela -T25392A Burn of third degree of multiple sites of left ankle and foot, initial encounter -T25392D Burn of third degree of multiple sites of left ankle and foot, subsequent encounter -T25392S Burn of third degree of multiple sites of left ankle and foot, sequela -T25399A Burn of third degree of multiple sites of unspecified ankle and foot, initial encounter -T25399D Burn of third degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25399S Burn of third degree of multiple sites of unspecified ankle and foot, sequela -T25411A Corrosion of unspecified degree of right ankle, initial encounter -T25411D Corrosion of unspecified degree of right ankle, subsequent encounter -T25411S Corrosion of unspecified degree of right ankle, sequela -T25412A Corrosion of unspecified degree of left ankle, initial encounter -T25412D Corrosion of unspecified degree of left ankle, subsequent encounter -T25412S Corrosion of unspecified degree of left ankle, sequela -T25419A Corrosion of unspecified degree of unspecified ankle, initial encounter -T25419D Corrosion of unspecified degree of unspecified ankle, subsequent encounter -T25419S Corrosion of unspecified degree of unspecified ankle, sequela -T25421A Corrosion of unspecified degree of right foot, initial encounter -T25421D Corrosion of unspecified degree of right foot, subsequent encounter -T25421S Corrosion of unspecified degree of right foot, sequela -T25422A Corrosion of unspecified degree of left foot, initial encounter -T25422D Corrosion of unspecified degree of left foot, subsequent encounter -T25422S Corrosion of unspecified degree of left foot, sequela -T25429A Corrosion of unspecified degree of unspecified foot, initial encounter -T25429D Corrosion of unspecified degree of unspecified foot, subsequent encounter -T25429S Corrosion of unspecified degree of unspecified foot, sequela -T25431A Corrosion of unspecified degree of right toe(s) (nail), initial encounter -T25431D Corrosion of unspecified degree of right toe(s) (nail), subsequent encounter -T25431S Corrosion of unspecified degree of right toe(s) (nail), sequela -T25432A Corrosion of unspecified degree of left toe(s) (nail), initial encounter -T25432D Corrosion of unspecified degree of left toe(s) (nail), subsequent encounter -T25432S Corrosion of unspecified degree of left toe(s) (nail), sequela -T25439A Corrosion of unspecified degree of unspecified toe(s) (nail), initial encounter -T25439D Corrosion of unspecified degree of unspecified toe(s) (nail), subsequent encounter -T25439S Corrosion of unspecified degree of unspecified toe(s) (nail), sequela -T25491A Corrosion of unspecified degree of multiple sites of right ankle and foot, initial encounter -T25491D Corrosion of unspecified degree of multiple sites of right ankle and foot, subsequent encounter -T25491S Corrosion of unspecified degree of multiple sites of right ankle and foot, sequela -T25492A Corrosion of unspecified degree of multiple sites of left ankle and foot, initial encounter -T25492D Corrosion of unspecified degree of multiple sites of left ankle and foot, subsequent encounter -T25492S Corrosion of unspecified degree of multiple sites of left ankle and foot, sequela -T25499A Corrosion of unspecified degree of multiple sites of unspecified ankle and foot, initial encounter -T25499D Corrosion of unspecified degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25499S Corrosion of unspecified degree of multiple sites of unspecified ankle and foot, sequela -T25511A Corrosion of first degree of right ankle, initial encounter -T25511D Corrosion of first degree of right ankle, subsequent encounter -T25511S Corrosion of first degree of right ankle, sequela -T25512A Corrosion of first degree of left ankle, initial encounter -T25512D Corrosion of first degree of left ankle, subsequent encounter -T25512S Corrosion of first degree of left ankle, sequela -T25519A Corrosion of first degree of unspecified ankle, initial encounter -T25519D Corrosion of first degree of unspecified ankle, subsequent encounter -T25519S Corrosion of first degree of unspecified ankle, sequela -T25521A Corrosion of first degree of right foot, initial encounter -T25521D Corrosion of first degree of right foot, subsequent encounter -T25521S Corrosion of first degree of right foot, sequela -T25522A Corrosion of first degree of left foot, initial encounter -T25522D Corrosion of first degree of left foot, subsequent encounter -T25522S Corrosion of first degree of left foot, sequela -T25529A Corrosion of first degree of unspecified foot, initial encounter -T25529D Corrosion of first degree of unspecified foot, subsequent encounter -T25529S Corrosion of first degree of unspecified foot, sequela -T25531A Corrosion of first degree of right toe(s) (nail), initial encounter -T25531D Corrosion of first degree of right toe(s) (nail), subsequent encounter -T25531S Corrosion of first degree of right toe(s) (nail), sequela -T25532A Corrosion of first degree of left toe(s) (nail), initial encounter -T25532D Corrosion of first degree of left toe(s) (nail), subsequent encounter -T25532S Corrosion of first degree of left toe(s) (nail), sequela -T25539A Corrosion of first degree of unspecified toe(s) (nail), initial encounter -T25539D Corrosion of first degree of unspecified toe(s) (nail), subsequent encounter -T25539S Corrosion of first degree of unspecified toe(s) (nail), sequela -T25591A Corrosion of first degree of multiple sites of right ankle and foot, initial encounter -T25591D Corrosion of first degree of multiple sites of right ankle and foot, subsequent encounter -T25591S Corrosion of first degree of multiple sites of right ankle and foot, sequela -T25592A Corrosion of first degree of multiple sites of left ankle and foot, initial encounter -T25592D Corrosion of first degree of multiple sites of left ankle and foot, subsequent encounter -T25592S Corrosion of first degree of multiple sites of left ankle and foot, sequela -T25599A Corrosion of first degree of multiple sites of unspecified ankle and foot, initial encounter -T25599D Corrosion of first degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25599S Corrosion of first degree of multiple sites of unspecified ankle and foot, sequela -T25611A Corrosion of second degree of right ankle, initial encounter -T25611D Corrosion of second degree of right ankle, subsequent encounter -T25611S Corrosion of second degree of right ankle, sequela -T25612A Corrosion of second degree of left ankle, initial encounter -T25612D Corrosion of second degree of left ankle, subsequent encounter -T25612S Corrosion of second degree of left ankle, sequela -T25619A Corrosion of second degree of unspecified ankle, initial encounter -T25619D Corrosion of second degree of unspecified ankle, subsequent encounter -T25619S Corrosion of second degree of unspecified ankle, sequela -T25621A Corrosion of second degree of right foot, initial encounter -T25621D Corrosion of second degree of right foot, subsequent encounter -T25621S Corrosion of second degree of right foot, sequela -T25622A Corrosion of second degree of left foot, initial encounter -T25622D Corrosion of second degree of left foot, subsequent encounter -T25622S Corrosion of second degree of left foot, sequela -T25629A Corrosion of second degree of unspecified foot, initial encounter -T25629D Corrosion of second degree of unspecified foot, subsequent encounter -T25629S Corrosion of second degree of unspecified foot, sequela -T25631A Corrosion of second degree of right toe(s) (nail), initial encounter -T25631D Corrosion of second degree of right toe(s) (nail), subsequent encounter -T25631S Corrosion of second degree of right toe(s) (nail), sequela -T25632A Corrosion of second degree of left toe(s) (nail), initial encounter -T25632D Corrosion of second degree of left toe(s) (nail), subsequent encounter -T25632S Corrosion of second degree of left toe(s) (nail), sequela -T25639A Corrosion of second degree of unspecified toe(s) (nail), initial encounter -T25639D Corrosion of second degree of unspecified toe(s) (nail), subsequent encounter -T25639S Corrosion of second degree of unspecified toe(s) (nail), sequela -T25691A Corrosion of second degree of right ankle and foot, initial encounter -T25691D Corrosion of second degree of right ankle and foot, subsequent encounter -T25691S Corrosion of second degree of right ankle and foot, sequela -T25692A Corrosion of second degree of left ankle and foot, initial encounter -T25692D Corrosion of second degree of left ankle and foot, subsequent encounter -T25692S Corrosion of second degree of left ankle and foot, sequela -T25699A Corrosion of second degree of unspecified ankle and foot, initial encounter -T25699D Corrosion of second degree of unspecified ankle and foot, subsequent encounter -T25699S Corrosion of second degree of unspecified ankle and foot, sequela -T25711A Corrosion of third degree of right ankle, initial encounter -T25711D Corrosion of third degree of right ankle, subsequent encounter -T25711S Corrosion of third degree of right ankle, sequela -T25712A Corrosion of third degree of left ankle, initial encounter -T25712D Corrosion of third degree of left ankle, subsequent encounter -T25712S Corrosion of third degree of left ankle, sequela -T25719A Corrosion of third degree of unspecified ankle, initial encounter -T25719D Corrosion of third degree of unspecified ankle, subsequent encounter -T25719S Corrosion of third degree of unspecified ankle, sequela -T25721A Corrosion of third degree of right foot, initial encounter -T25721D Corrosion of third degree of right foot, subsequent encounter -T25721S Corrosion of third degree of right foot, sequela -T25722A Corrosion of third degree of left foot, initial encounter -T25722D Corrosion of third degree of left foot, subsequent encounter -T25722S Corrosion of third degree of left foot, sequela -T25729A Corrosion of third degree of unspecified foot, initial encounter -T25729D Corrosion of third degree of unspecified foot, subsequent encounter -T25729S Corrosion of third degree of unspecified foot, sequela -T25731A Corrosion of third degree of right toe(s) (nail), initial encounter -T25731D Corrosion of third degree of right toe(s) (nail), subsequent encounter -T25731S Corrosion of third degree of right toe(s) (nail), sequela -T25732A Corrosion of third degree of left toe(s) (nail), initial encounter -T25732D Corrosion of third degree of left toe(s) (nail), subsequent encounter -T25732S Corrosion of third degree of left toe(s) (nail), sequela -T25739A Corrosion of third degree of unspecified toe(s) (nail), initial encounter -T25739D Corrosion of third degree of unspecified toe(s) (nail), subsequent encounter -T25739S Corrosion of third degree of unspecified toe(s) (nail), sequela -T25791A Corrosion of third degree of multiple sites of right ankle and foot, initial encounter -T25791D Corrosion of third degree of multiple sites of right ankle and foot, subsequent encounter -T25791S Corrosion of third degree of multiple sites of right ankle and foot, sequela -T25792A Corrosion of third degree of multiple sites of left ankle and foot, initial encounter -T25792D Corrosion of third degree of multiple sites of left ankle and foot, subsequent encounter -T25792S Corrosion of third degree of multiple sites of left ankle and foot, sequela -T25799A Corrosion of third degree of multiple sites of unspecified ankle and foot, initial encounter -T25799D Corrosion of third degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25799S Corrosion of third degree of multiple sites of unspecified ankle and foot, sequela -T2600XA Burn of unspecified eyelid and periocular area, initial encounter -T2600XD Burn of unspecified eyelid and periocular area, subsequent encounter -T2600XS Burn of unspecified eyelid and periocular area, sequela -T2601XA Burn of right eyelid and periocular area, initial encounter -T2601XD Burn of right eyelid and periocular area, subsequent encounter -T2601XS Burn of right eyelid and periocular area, sequela -T2602XA Burn of left eyelid and periocular area, initial encounter -T2602XD Burn of left eyelid and periocular area, subsequent encounter -T2602XS Burn of left eyelid and periocular area, sequela -T2610XA Burn of cornea and conjunctival sac, unspecified eye, initial encounter -T2610XD Burn of cornea and conjunctival sac, unspecified eye, subsequent encounter -T2610XS Burn of cornea and conjunctival sac, unspecified eye, sequela -T2611XA Burn of cornea and conjunctival sac, right eye, initial encounter -T2611XD Burn of cornea and conjunctival sac, right eye, subsequent encounter -T2611XS Burn of cornea and conjunctival sac, right eye, sequela -T2612XA Burn of cornea and conjunctival sac, left eye, initial encounter -T2612XD Burn of cornea and conjunctival sac, left eye, subsequent encounter -T2612XS Burn of cornea and conjunctival sac, left eye, sequela -T2620XA Burn with resulting rupture and destruction of unspecified eyeball, initial encounter -T2620XD Burn with resulting rupture and destruction of unspecified eyeball, subsequent encounter -T2620XS Burn with resulting rupture and destruction of unspecified eyeball, sequela -T2621XA Burn with resulting rupture and destruction of right eyeball, initial encounter -T2621XD Burn with resulting rupture and destruction of right eyeball, subsequent encounter -T2621XS Burn with resulting rupture and destruction of right eyeball, sequela -T2622XA Burn with resulting rupture and destruction of left eyeball, initial encounter -T2622XD Burn with resulting rupture and destruction of left eyeball, subsequent encounter -T2622XS Burn with resulting rupture and destruction of left eyeball, sequela -T2630XA Burns of other specified parts of unspecified eye and adnexa, initial encounter -T2630XD Burns of other specified parts of unspecified eye and adnexa, subsequent encounter -T2630XS Burns of other specified parts of unspecified eye and adnexa, sequela -T2631XA Burns of other specified parts of right eye and adnexa, initial encounter -T2631XD Burns of other specified parts of right eye and adnexa, subsequent encounter -T2631XS Burns of other specified parts of right eye and adnexa, sequela -T2632XA Burns of other specified parts of left eye and adnexa, initial encounter -T2632XD Burns of other specified parts of left eye and adnexa, subsequent encounter -T2632XS Burns of other specified parts of left eye and adnexa, sequela -T2640XA Burn of unspecified eye and adnexa, part unspecified, initial encounter -T2640XD Burn of unspecified eye and adnexa, part unspecified, subsequent encounter -T2640XS Burn of unspecified eye and adnexa, part unspecified, sequela -T2641XA Burn of right eye and adnexa, part unspecified, initial encounter -T2641XD Burn of right eye and adnexa, part unspecified, subsequent encounter -T2641XS Burn of right eye and adnexa, part unspecified, sequela -T2642XA Burn of left eye and adnexa, part unspecified, initial encounter -T2642XD Burn of left eye and adnexa, part unspecified, subsequent encounter -T2642XS Burn of left eye and adnexa, part unspecified, sequela -T2650XA Corrosion of unspecified eyelid and periocular area, initial encounter -T2650XD Corrosion of unspecified eyelid and periocular area, subsequent encounter -T2650XS Corrosion of unspecified eyelid and periocular area, sequela -T2651XA Corrosion of right eyelid and periocular area, initial encounter -T2651XD Corrosion of right eyelid and periocular area, subsequent encounter -T2651XS Corrosion of right eyelid and periocular area, sequela -T2652XA Corrosion of left eyelid and periocular area, initial encounter -T2652XD Corrosion of left eyelid and periocular area, subsequent encounter -T2652XS Corrosion of left eyelid and periocular area, sequela -T2660XA Corrosion of cornea and conjunctival sac, unspecified eye, initial encounter -T2660XD Corrosion of cornea and conjunctival sac, unspecified eye, subsequent encounter -T2660XS Corrosion of cornea and conjunctival sac, unspecified eye, sequela -T2661XA Corrosion of cornea and conjunctival sac, right eye, initial encounter -T2661XD Corrosion of cornea and conjunctival sac, right eye, subsequent encounter -T2661XS Corrosion of cornea and conjunctival sac, right eye, sequela -T2662XA Corrosion of cornea and conjunctival sac, left eye, initial encounter -T2662XD Corrosion of cornea and conjunctival sac, left eye, subsequent encounter -T2662XS Corrosion of cornea and conjunctival sac, left eye, sequela -T2670XA Corrosion with resulting rupture and destruction of unspecified eyeball, initial encounter -T2670XD Corrosion with resulting rupture and destruction of unspecified eyeball, subsequent encounter -T2670XS Corrosion with resulting rupture and destruction of unspecified eyeball, sequela -T2671XA Corrosion with resulting rupture and destruction of right eyeball, initial encounter -T2671XD Corrosion with resulting rupture and destruction of right eyeball, subsequent encounter -T2671XS Corrosion with resulting rupture and destruction of right eyeball, sequela -T2672XA Corrosion with resulting rupture and destruction of left eyeball, initial encounter -T2672XD Corrosion with resulting rupture and destruction of left eyeball, subsequent encounter -T2672XS Corrosion with resulting rupture and destruction of left eyeball, sequela -T2680XA Corrosions of other specified parts of unspecified eye and adnexa, initial encounter -T2680XD Corrosions of other specified parts of unspecified eye and adnexa, subsequent encounter -T2680XS Corrosions of other specified parts of unspecified eye and adnexa, sequela -T2681XA Corrosions of other specified parts of right eye and adnexa, initial encounter -T2681XD Corrosions of other specified parts of right eye and adnexa, subsequent encounter -T2681XS Corrosions of other specified parts of right eye and adnexa, sequela -T2682XA Corrosions of other specified parts of left eye and adnexa, initial encounter -T2682XD Corrosions of other specified parts of left eye and adnexa, subsequent encounter -T2682XS Corrosions of other specified parts of left eye and adnexa, sequela -T2690XA Corrosion of unspecified eye and adnexa, part unspecified, initial encounter -T2690XD Corrosion of unspecified eye and adnexa, part unspecified, subsequent encounter -T2690XS Corrosion of unspecified eye and adnexa, part unspecified, sequela -T2691XA Corrosion of right eye and adnexa, part unspecified, initial encounter -T2691XD Corrosion of right eye and adnexa, part unspecified, subsequent encounter -T2691XS Corrosion of right eye and adnexa, part unspecified, sequela -T2692XA Corrosion of left eye and adnexa, part unspecified, initial encounter -T2692XD Corrosion of left eye and adnexa, part unspecified, subsequent encounter -T2692XS Corrosion of left eye and adnexa, part unspecified, sequela -T270XXA Burn of larynx and trachea, initial encounter -T270XXD Burn of larynx and trachea, subsequent encounter -T270XXS Burn of larynx and trachea, sequela -T271XXA Burn involving larynx and trachea with lung, initial encounter -T271XXD Burn involving larynx and trachea with lung, subsequent encounter -T271XXS Burn involving larynx and trachea with lung, sequela -T272XXA Burn of other parts of respiratory tract, initial encounter -T272XXD Burn of other parts of respiratory tract, subsequent encounter -T272XXS Burn of other parts of respiratory tract, sequela -T273XXA Burn of respiratory tract, part unspecified, initial encounter -T273XXD Burn of respiratory tract, part unspecified, subsequent encounter -T273XXS Burn of respiratory tract, part unspecified, sequela -T274XXA Corrosion of larynx and trachea, initial encounter -T274XXD Corrosion of larynx and trachea, subsequent encounter -T274XXS Corrosion of larynx and trachea, sequela -T275XXA Corrosion involving larynx and trachea with lung, initial encounter -T275XXD Corrosion involving larynx and trachea with lung, subsequent encounter -T275XXS Corrosion involving larynx and trachea with lung, sequela -T276XXA Corrosion of other parts of respiratory tract, initial encounter -T276XXD Corrosion of other parts of respiratory tract, subsequent encounter -T276XXS Corrosion of other parts of respiratory tract, sequela -T277XXA Corrosion of respiratory tract, part unspecified, initial encounter -T277XXD Corrosion of respiratory tract, part unspecified, subsequent encounter -T277XXS Corrosion of respiratory tract, part unspecified, sequela -T280XXA Burn of mouth and pharynx, initial encounter -T280XXD Burn of mouth and pharynx, subsequent encounter -T280XXS Burn of mouth and pharynx, sequela -T281XXA Burn of esophagus, initial encounter -T281XXD Burn of esophagus, subsequent encounter -T281XXS Burn of esophagus, sequela -T282XXA Burn of other parts of alimentary tract, initial encounter -T282XXD Burn of other parts of alimentary tract, subsequent encounter -T282XXS Burn of other parts of alimentary tract, sequela -T283XXA Burn of internal genitourinary organs, initial encounter -T283XXD Burn of internal genitourinary organs, subsequent encounter -T283XXS Burn of internal genitourinary organs, sequela -T2840XA Burn of unspecified internal organ, initial encounter -T2840XD Burn of unspecified internal organ, subsequent encounter -T2840XS Burn of unspecified internal organ, sequela -T28411A Burn of right ear drum, initial encounter -T28411D Burn of right ear drum, subsequent encounter -T28411S Burn of right ear drum, sequela -T28412A Burn of left ear drum, initial encounter -T28412D Burn of left ear drum, subsequent encounter -T28412S Burn of left ear drum, sequela -T28419A Burn of unspecified ear drum, initial encounter -T28419D Burn of unspecified ear drum, subsequent encounter -T28419S Burn of unspecified ear drum, sequela -T2849XA Burn of other internal organ, initial encounter -T2849XD Burn of other internal organ, subsequent encounter -T2849XS Burn of other internal organ, sequela -T285XXA Corrosion of mouth and pharynx, initial encounter -T285XXD Corrosion of mouth and pharynx, subsequent encounter -T285XXS Corrosion of mouth and pharynx, sequela -T286XXA Corrosion of esophagus, initial encounter -T286XXD Corrosion of esophagus, subsequent encounter -T286XXS Corrosion of esophagus, sequela -T287XXA Corrosion of other parts of alimentary tract, initial encounter -T287XXD Corrosion of other parts of alimentary tract, subsequent encounter -T287XXS Corrosion of other parts of alimentary tract, sequela -T288XXA Corrosion of internal genitourinary organs, initial encounter -T288XXD Corrosion of internal genitourinary organs, subsequent encounter -T288XXS Corrosion of internal genitourinary organs, sequela -T2890XA Corrosions of unspecified internal organs, initial encounter -T2890XD Corrosions of unspecified internal organs, subsequent encounter -T2890XS Corrosions of unspecified internal organs, sequela -T28911A Corrosions of right ear drum, initial encounter -T28911D Corrosions of right ear drum, subsequent encounter -T28911S Corrosions of right ear drum, sequela -T28912A Corrosions of left ear drum, initial encounter -T28912D Corrosions of left ear drum, subsequent encounter -T28912S Corrosions of left ear drum, sequela -T28919A Corrosions of unspecified ear drum, initial encounter -T28919D Corrosions of unspecified ear drum, subsequent encounter -T28919S Corrosions of unspecified ear drum, sequela -T2899XA Corrosions of other internal organs, initial encounter -T2899XD Corrosions of other internal organs, subsequent encounter -T2899XS Corrosions of other internal organs, sequela -T300 Burn of unspecified body region, unspecified degree -T304 Corrosion of unspecified body region, unspecified degree -T310 Burns involving less than 10% of body surface -T3110 Burns involving 10-19% of body surface with 0% to 9% third degree burns -T3111 Burns involving 10-19% of body surface with 10-19% third degree burns -T3120 Burns involving 20-29% of body surface with 0% to 9% third degree burns -T3121 Burns involving 20-29% of body surface with 10-19% third degree burns -T3122 Burns involving 20-29% of body surface with 20-29% third degree burns -T3130 Burns involving 30-39% of body surface with 0% to 9% third degree burns -T3131 Burns involving 30-39% of body surface with 10-19% third degree burns -T3132 Burns involving 30-39% of body surface with 20-29% third degree burns -T3133 Burns involving 30-39% of body surface with 30-39% third degree burns -T3140 Burns involving 40-49% of body surface with 0% to 9% third degree burns -T3141 Burns involving 40-49% of body surface with 10-19% third degree burns -T3142 Burns involving 40-49% of body surface with 20-29% third degree burns -T3143 Burns involving 40-49% of body surface with 30-39% third degree burns -T3144 Burns involving 40-49% of body surface with 40-49% third degree burns -T3150 Burns involving 50-59% of body surface with 0% to 9% third degree burns -T3151 Burns involving 50-59% of body surface with 10-19% third degree burns -T3152 Burns involving 50-59% of body surface with 20-29% third degree burns -T3153 Burns involving 50-59% of body surface with 30-39% third degree burns -T3154 Burns involving 50-59% of body surface with 40-49% third degree burns -T3155 Burns involving 50-59% of body surface with 50-59% third degree burns -T3160 Burns involving 60-69% of body surface with 0% to 9% third degree burns -T3161 Burns involving 60-69% of body surface with 10-19% third degree burns -T3162 Burns involving 60-69% of body surface with 20-29% third degree burns -T3163 Burns involving 60-69% of body surface with 30-39% third degree burns -T3164 Burns involving 60-69% of body surface with 40-49% third degree burns -T3165 Burns involving 60-69% of body surface with 50-59% third degree burns -T3166 Burns involving 60-69% of body surface with 60-69% third degree burns -T3170 Burns involving 70-79% of body surface with 0% to 9% third degree burns -T3171 Burns involving 70-79% of body surface with 10-19% third degree burns -T3172 Burns involving 70-79% of body surface with 20-29% third degree burns -T3173 Burns involving 70-79% of body surface with 30-39% third degree burns -T3174 Burns involving 70-79% of body surface with 40-49% third degree burns -T3175 Burns involving 70-79% of body surface with 50-59% third degree burns -T3176 Burns involving 70-79% of body surface with 60-69% third degree burns -T3177 Burns involving 70-79% of body surface with 70-79% third degree burns -T3180 Burns involving 80-89% of body surface with 0% to 9% third degree burns -T3181 Burns involving 80-89% of body surface with 10-19% third degree burns -T3182 Burns involving 80-89% of body surface with 20-29% third degree burns -T3183 Burns involving 80-89% of body surface with 30-39% third degree burns -T3184 Burns involving 80-89% of body surface with 40-49% third degree burns -T3185 Burns involving 80-89% of body surface with 50-59% third degree burns -T3186 Burns involving 80-89% of body surface with 60-69% third degree burns -T3187 Burns involving 80-89% of body surface with 70-79% third degree burns -T3188 Burns involving 80-89% of body surface with 80-89% third degree burns -T3190 Burns involving 90% or more of body surface with 0% to 9% third degree burns -T3191 Burns involving 90% or more of body surface with 10-19% third degree burns -T3192 Burns involving 90% or more of body surface with 20-29% third degree burns -T3193 Burns involving 90% or more of body surface with 30-39% third degree burns -T3194 Burns involving 90% or more of body surface with 40-49% third degree burns -T3195 Burns involving 90% or more of body surface with 50-59% third degree burns -T3196 Burns involving 90% or more of body surface with 60-69% third degree burns -T3197 Burns involving 90% or more of body surface with 70-79% third degree burns -T3198 Burns involving 90% or more of body surface with 80-89% third degree burns -T3199 Burns involving 90% or more of body surface with 90% or more third degree burns -T320 Corrosions involving less than 10% of body surface -T3210 Corrosions involving 10-19% of body surface with 0% to 9% third degree corrosion -T3211 Corrosions involving 10-19% of body surface with 10-19% third degree corrosion -T3220 Corrosions involving 20-29% of body surface with 0% to 9% third degree corrosion -T3221 Corrosions involving 20-29% of body surface with 10-19% third degree corrosion -T3222 Corrosions involving 20-29% of body surface with 20-29% third degree corrosion -T3230 Corrosions involving 30-39% of body surface with 0% to 9% third degree corrosion -T3231 Corrosions involving 30-39% of body surface with 10-19% third degree corrosion -T3232 Corrosions involving 30-39% of body surface with 20-29% third degree corrosion -T3233 Corrosions involving 30-39% of body surface with 30-39% third degree corrosion -T3240 Corrosions involving 40-49% of body surface with 0% to 9% third degree corrosion -T3241 Corrosions involving 40-49% of body surface with 10-19% third degree corrosion -T3242 Corrosions involving 40-49% of body surface with 20-29% third degree corrosion -T3243 Corrosions involving 40-49% of body surface with 30-39% third degree corrosion -T3244 Corrosions involving 40-49% of body surface with 40-49% third degree corrosion -T3250 Corrosions involving 50-59% of body surface with 0% to 9% third degree corrosion -T3251 Corrosions involving 50-59% of body surface with 10-19% third degree corrosion -T3252 Corrosions involving 50-59% of body surface with 20-29% third degree corrosion -T3253 Corrosions involving 50-59% of body surface with 30-39% third degree corrosion -T3254 Corrosions involving 50-59% of body surface with 40-49% third degree corrosion -T3255 Corrosions involving 50-59% of body surface with 50-59% third degree corrosion -T3260 Corrosions involving 60-69% of body surface with 0% to 9% third degree corrosion -T3261 Corrosions involving 60-69% of body surface with 10-19% third degree corrosion -T3262 Corrosions involving 60-69% of body surface with 20-29% third degree corrosion -T3263 Corrosions involving 60-69% of body surface with 30-39% third degree corrosion -T3264 Corrosions involving 60-69% of body surface with 40-49% third degree corrosion -T3265 Corrosions involving 60-69% of body surface with 50-59% third degree corrosion -T3266 Corrosions involving 60-69% of body surface with 60-69% third degree corrosion -T3270 Corrosions involving 70-79% of body surface with 0% to 9% third degree corrosion -T3271 Corrosions involving 70-79% of body surface with 10-19% third degree corrosion -T3272 Corrosions involving 70-79% of body surface with 20-29% third degree corrosion -T3273 Corrosions involving 70-79% of body surface with 30-39% third degree corrosion -T3274 Corrosions involving 70-79% of body surface with 40-49% third degree corrosion -T3275 Corrosions involving 70-79% of body surface with 50-59% third degree corrosion -T3276 Corrosions involving 70-79% of body surface with 60-69% third degree corrosion -T3277 Corrosions involving 70-79% of body surface with 70-79% third degree corrosion -T3280 Corrosions involving 80-89% of body surface with 0% to 9% third degree corrosion -T3281 Corrosions involving 80-89% of body surface with 10-19% third degree corrosion -T3282 Corrosions involving 80-89% of body surface with 20-29% third degree corrosion -T3283 Corrosions involving 80-89% of body surface with 30-39% third degree corrosion -T3284 Corrosions involving 80-89% of body surface with 40-49% third degree corrosion -T3285 Corrosions involving 80-89% of body surface with 50-59% third degree corrosion -T3286 Corrosions involving 80-89% of body surface with 60-69% third degree corrosion -T3287 Corrosions involving 80-89% of body surface with 70-79% third degree corrosion -T3288 Corrosions involving 80-89% of body surface with 80-89% third degree corrosion -T3290 Corrosions involving 90% or more of body surface with 0% to 9% third degree corrosion -T3291 Corrosions involving 90% or more of body surface with 10-19% third degree corrosion -T3292 Corrosions involving 90% or more of body surface with 20-29% third degree corrosion -T3293 Corrosions involving 90% or more of body surface with 30-39% third degree corrosion -T3294 Corrosions involving 90% or more of body surface with 40-49% third degree corrosion -T3295 Corrosions involving 90% or more of body surface with 50-59% third degree corrosion -T3296 Corrosions involving 90% or more of body surface with 60-69% third degree corrosion -T3297 Corrosions involving 90% or more of body surface with 70-79% third degree corrosion -T3298 Corrosions involving 90% or more of body surface with 80-89% third degree corrosion -T3299 Corrosions involving 90% or more of body surface with 90% or more third degree corrosion -T33011A Superficial frostbite of right ear, initial encounter -T33011D Superficial frostbite of right ear, subsequent encounter -T33011S Superficial frostbite of right ear, sequela -T33012A Superficial frostbite of left ear, initial encounter -T33012D Superficial frostbite of left ear, subsequent encounter -T33012S Superficial frostbite of left ear, sequela -T33019A Superficial frostbite of unspecified ear, initial encounter -T33019D Superficial frostbite of unspecified ear, subsequent encounter -T33019S Superficial frostbite of unspecified ear, sequela -T3302XA Superficial frostbite of nose, initial encounter -T3302XD Superficial frostbite of nose, subsequent encounter -T3302XS Superficial frostbite of nose, sequela -T3309XA Superficial frostbite of other part of head, initial encounter -T3309XD Superficial frostbite of other part of head, subsequent encounter -T3309XS Superficial frostbite of other part of head, sequela -T331XXA Superficial frostbite of neck, initial encounter -T331XXD Superficial frostbite of neck, subsequent encounter -T331XXS Superficial frostbite of neck, sequela -T332XXA Superficial frostbite of thorax, initial encounter -T332XXD Superficial frostbite of thorax, subsequent encounter -T332XXS Superficial frostbite of thorax, sequela -T333XXA Superficial frostbite of abdominal wall, lower back and pelvis, initial encounter -T333XXD Superficial frostbite of abdominal wall, lower back and pelvis, subsequent encounter -T333XXS Superficial frostbite of abdominal wall, lower back and pelvis, sequela -T3340XA Superficial frostbite of unspecified arm, initial encounter -T3340XD Superficial frostbite of unspecified arm, subsequent encounter -T3340XS Superficial frostbite of unspecified arm, sequela -T3341XA Superficial frostbite of right arm, initial encounter -T3341XD Superficial frostbite of right arm, subsequent encounter -T3341XS Superficial frostbite of right arm, sequela -T3342XA Superficial frostbite of left arm, initial encounter -T3342XD Superficial frostbite of left arm, subsequent encounter -T3342XS Superficial frostbite of left arm, sequela -T33511A Superficial frostbite of right wrist, initial encounter -T33511D Superficial frostbite of right wrist, subsequent encounter -T33511S Superficial frostbite of right wrist, sequela -T33512A Superficial frostbite of left wrist, initial encounter -T33512D Superficial frostbite of left wrist, subsequent encounter -T33512S Superficial frostbite of left wrist, sequela -T33519A Superficial frostbite of unspecified wrist, initial encounter -T33519D Superficial frostbite of unspecified wrist, subsequent encounter -T33519S Superficial frostbite of unspecified wrist, sequela -T33521A Superficial frostbite of right hand, initial encounter -T33521D Superficial frostbite of right hand, subsequent encounter -T33521S Superficial frostbite of right hand, sequela -T33522A Superficial frostbite of left hand, initial encounter -T33522D Superficial frostbite of left hand, subsequent encounter -T33522S Superficial frostbite of left hand, sequela -T33529A Superficial frostbite of unspecified hand, initial encounter -T33529D Superficial frostbite of unspecified hand, subsequent encounter -T33529S Superficial frostbite of unspecified hand, sequela -T33531A Superficial frostbite of right finger(s), initial encounter -T33531D Superficial frostbite of right finger(s), subsequent encounter -T33531S Superficial frostbite of right finger(s), sequela -T33532A Superficial frostbite of left finger(s), initial encounter -T33532D Superficial frostbite of left finger(s), subsequent encounter -T33532S Superficial frostbite of left finger(s), sequela -T33539A Superficial frostbite of unspecified finger(s), initial encounter -T33539D Superficial frostbite of unspecified finger(s), subsequent encounter -T33539S Superficial frostbite of unspecified finger(s), sequela -T3360XA Superficial frostbite of unspecified hip and thigh, initial encounter -T3360XD Superficial frostbite of unspecified hip and thigh, subsequent encounter -T3360XS Superficial frostbite of unspecified hip and thigh, sequela -T3361XA Superficial frostbite of right hip and thigh, initial encounter -T3361XD Superficial frostbite of right hip and thigh, subsequent encounter -T3361XS Superficial frostbite of right hip and thigh, sequela -T3362XA Superficial frostbite of left hip and thigh, initial encounter -T3362XD Superficial frostbite of left hip and thigh, subsequent encounter -T3362XS Superficial frostbite of left hip and thigh, sequela -T3370XA Superficial frostbite of unspecified knee and lower leg, initial encounter -T3370XD Superficial frostbite of unspecified knee and lower leg, subsequent encounter -T3370XS Superficial frostbite of unspecified knee and lower leg, sequela -T3371XA Superficial frostbite of right knee and lower leg, initial encounter -T3371XD Superficial frostbite of right knee and lower leg, subsequent encounter -T3371XS Superficial frostbite of right knee and lower leg, sequela -T3372XA Superficial frostbite of left knee and lower leg, initial encounter -T3372XD Superficial frostbite of left knee and lower leg, subsequent encounter -T3372XS Superficial frostbite of left knee and lower leg, sequela -T33811A Superficial frostbite of right ankle, initial encounter -T33811D Superficial frostbite of right ankle, subsequent encounter -T33811S Superficial frostbite of right ankle, sequela -T33812A Superficial frostbite of left ankle, initial encounter -T33812D Superficial frostbite of left ankle, subsequent encounter -T33812S Superficial frostbite of left ankle, sequela -T33819A Superficial frostbite of unspecified ankle, initial encounter -T33819D Superficial frostbite of unspecified ankle, subsequent encounter -T33819S Superficial frostbite of unspecified ankle, sequela -T33821A Superficial frostbite of right foot, initial encounter -T33821D Superficial frostbite of right foot, subsequent encounter -T33821S Superficial frostbite of right foot, sequela -T33822A Superficial frostbite of left foot, initial encounter -T33822D Superficial frostbite of left foot, subsequent encounter -T33822S Superficial frostbite of left foot, sequela -T33829A Superficial frostbite of unspecified foot, initial encounter -T33829D Superficial frostbite of unspecified foot, subsequent encounter -T33829S Superficial frostbite of unspecified foot, sequela -T33831A Superficial frostbite of right toe(s), initial encounter -T33831D Superficial frostbite of right toe(s), subsequent encounter -T33831S Superficial frostbite of right toe(s), sequela -T33832A Superficial frostbite of left toe(s), initial encounter -T33832D Superficial frostbite of left toe(s), subsequent encounter -T33832S Superficial frostbite of left toe(s), sequela -T33839A Superficial frostbite of unspecified toe(s), initial encounter -T33839D Superficial frostbite of unspecified toe(s), subsequent encounter -T33839S Superficial frostbite of unspecified toe(s), sequela -T3390XA Superficial frostbite of unspecified sites, initial encounter -T3390XD Superficial frostbite of unspecified sites, subsequent encounter -T3390XS Superficial frostbite of unspecified sites, sequela -T3399XA Superficial frostbite of other sites, initial encounter -T3399XD Superficial frostbite of other sites, subsequent encounter -T3399XS Superficial frostbite of other sites, sequela -T34011A Frostbite with tissue necrosis of right ear, initial encounter -T34011D Frostbite with tissue necrosis of right ear, subsequent encounter -T34011S Frostbite with tissue necrosis of right ear, sequela -T34012A Frostbite with tissue necrosis of left ear, initial encounter -T34012D Frostbite with tissue necrosis of left ear, subsequent encounter -T34012S Frostbite with tissue necrosis of left ear, sequela -T34019A Frostbite with tissue necrosis of unspecified ear, initial encounter -T34019D Frostbite with tissue necrosis of unspecified ear, subsequent encounter -T34019S Frostbite with tissue necrosis of unspecified ear, sequela -T3402XA Frostbite with tissue necrosis of nose, initial encounter -T3402XD Frostbite with tissue necrosis of nose, subsequent encounter -T3402XS Frostbite with tissue necrosis of nose, sequela -T3409XA Frostbite with tissue necrosis of other part of head, initial encounter -T3409XD Frostbite with tissue necrosis of other part of head, subsequent encounter -T3409XS Frostbite with tissue necrosis of other part of head, sequela -T341XXA Frostbite with tissue necrosis of neck, initial encounter -T341XXD Frostbite with tissue necrosis of neck, subsequent encounter -T341XXS Frostbite with tissue necrosis of neck, sequela -T342XXA Frostbite with tissue necrosis of thorax, initial encounter -T342XXD Frostbite with tissue necrosis of thorax, subsequent encounter -T342XXS Frostbite with tissue necrosis of thorax, sequela -T343XXA Frostbite with tissue necrosis of abdominal wall, lower back and pelvis, initial encounter -T343XXD Frostbite with tissue necrosis of abdominal wall, lower back and pelvis, subsequent encounter -T343XXS Frostbite with tissue necrosis of abdominal wall, lower back and pelvis, sequela -T3440XA Frostbite with tissue necrosis of unspecified arm, initial encounter -T3440XD Frostbite with tissue necrosis of unspecified arm, subsequent encounter -T3440XS Frostbite with tissue necrosis of unspecified arm, sequela -T3441XA Frostbite with tissue necrosis of right arm, initial encounter -T3441XD Frostbite with tissue necrosis of right arm, subsequent encounter -T3441XS Frostbite with tissue necrosis of right arm, sequela -T3442XA Frostbite with tissue necrosis of left arm, initial encounter -T3442XD Frostbite with tissue necrosis of left arm, subsequent encounter -T3442XS Frostbite with tissue necrosis of left arm, sequela -T34511A Frostbite with tissue necrosis of right wrist, initial encounter -T34511D Frostbite with tissue necrosis of right wrist, subsequent encounter -T34511S Frostbite with tissue necrosis of right wrist, sequela -T34512A Frostbite with tissue necrosis of left wrist, initial encounter -T34512D Frostbite with tissue necrosis of left wrist, subsequent encounter -T34512S Frostbite with tissue necrosis of left wrist, sequela -T34519A Frostbite with tissue necrosis of unspecified wrist, initial encounter -T34519D Frostbite with tissue necrosis of unspecified wrist, subsequent encounter -T34519S Frostbite with tissue necrosis of unspecified wrist, sequela -T34521A Frostbite with tissue necrosis of right hand, initial encounter -T34521D Frostbite with tissue necrosis of right hand, subsequent encounter -T34521S Frostbite with tissue necrosis of right hand, sequela -T34522A Frostbite with tissue necrosis of left hand, initial encounter -T34522D Frostbite with tissue necrosis of left hand, subsequent encounter -T34522S Frostbite with tissue necrosis of left hand, sequela -T34529A Frostbite with tissue necrosis of unspecified hand, initial encounter -T34529D Frostbite with tissue necrosis of unspecified hand, subsequent encounter -T34529S Frostbite with tissue necrosis of unspecified hand, sequela -T34531A Frostbite with tissue necrosis of right finger(s), initial encounter -T34531D Frostbite with tissue necrosis of right finger(s), subsequent encounter -T34531S Frostbite with tissue necrosis of right finger(s), sequela -T34532A Frostbite with tissue necrosis of left finger(s), initial encounter -T34532D Frostbite with tissue necrosis of left finger(s), subsequent encounter -T34532S Frostbite with tissue necrosis of left finger(s), sequela -T34539A Frostbite with tissue necrosis of unspecified finger(s), initial encounter -T34539D Frostbite with tissue necrosis of unspecified finger(s), subsequent encounter -T34539S Frostbite with tissue necrosis of unspecified finger(s), sequela -T3460XA Frostbite with tissue necrosis of unspecified hip and thigh, initial encounter -T3460XD Frostbite with tissue necrosis of unspecified hip and thigh, subsequent encounter -T3460XS Frostbite with tissue necrosis of unspecified hip and thigh, sequela -T3461XA Frostbite with tissue necrosis of right hip and thigh, initial encounter -T3461XD Frostbite with tissue necrosis of right hip and thigh, subsequent encounter -T3461XS Frostbite with tissue necrosis of right hip and thigh, sequela -T3462XA Frostbite with tissue necrosis of left hip and thigh, initial encounter -T3462XD Frostbite with tissue necrosis of left hip and thigh, subsequent encounter -T3462XS Frostbite with tissue necrosis of left hip and thigh, sequela -T3470XA Frostbite with tissue necrosis of unspecified knee and lower leg, initial encounter -T3470XD Frostbite with tissue necrosis of unspecified knee and lower leg, subsequent encounter -T3470XS Frostbite with tissue necrosis of unspecified knee and lower leg, sequela -T3471XA Frostbite with tissue necrosis of right knee and lower leg, initial encounter -T3471XD Frostbite with tissue necrosis of right knee and lower leg, subsequent encounter -T3471XS Frostbite with tissue necrosis of right knee and lower leg, sequela -T3472XA Frostbite with tissue necrosis of left knee and lower leg, initial encounter -T3472XD Frostbite with tissue necrosis of left knee and lower leg, subsequent encounter -T3472XS Frostbite with tissue necrosis of left knee and lower leg, sequela -T34811A Frostbite with tissue necrosis of right ankle, initial encounter -T34811D Frostbite with tissue necrosis of right ankle, subsequent encounter -T34811S Frostbite with tissue necrosis of right ankle, sequela -T34812A Frostbite with tissue necrosis of left ankle, initial encounter -T34812D Frostbite with tissue necrosis of left ankle, subsequent encounter -T34812S Frostbite with tissue necrosis of left ankle, sequela -T34819A Frostbite with tissue necrosis of unspecified ankle, initial encounter -T34819D Frostbite with tissue necrosis of unspecified ankle, subsequent encounter -T34819S Frostbite with tissue necrosis of unspecified ankle, sequela -T34821A Frostbite with tissue necrosis of right foot, initial encounter -T34821D Frostbite with tissue necrosis of right foot, subsequent encounter -T34821S Frostbite with tissue necrosis of right foot, sequela -T34822A Frostbite with tissue necrosis of left foot, initial encounter -T34822D Frostbite with tissue necrosis of left foot, subsequent encounter -T34822S Frostbite with tissue necrosis of left foot, sequela -T34829A Frostbite with tissue necrosis of unspecified foot, initial encounter -T34829D Frostbite with tissue necrosis of unspecified foot, subsequent encounter -T34829S Frostbite with tissue necrosis of unspecified foot, sequela -T34831A Frostbite with tissue necrosis of right toe(s), initial encounter -T34831D Frostbite with tissue necrosis of right toe(s), subsequent encounter -T34831S Frostbite with tissue necrosis of right toe(s), sequela -T34832A Frostbite with tissue necrosis of left toe(s), initial encounter -T34832D Frostbite with tissue necrosis of left toe(s), subsequent encounter -T34832S Frostbite with tissue necrosis of left toe(s), sequela -T34839A Frostbite with tissue necrosis of unspecified toe(s), initial encounter -T34839D Frostbite with tissue necrosis of unspecified toe(s), subsequent encounter -T34839S Frostbite with tissue necrosis of unspecified toe(s), sequela -T3490XA Frostbite with tissue necrosis of unspecified sites, initial encounter -T3490XD Frostbite with tissue necrosis of unspecified sites, subsequent encounter -T3490XS Frostbite with tissue necrosis of unspecified sites, sequela -T3499XA Frostbite with tissue necrosis of other sites, initial encounter -T3499XD Frostbite with tissue necrosis of other sites, subsequent encounter -T3499XS Frostbite with tissue necrosis of other sites, sequela -T360X1A Poisoning by penicillins, accidental (unintentional), initial encounter -T360X1D Poisoning by penicillins, accidental (unintentional), subsequent encounter -T360X1S Poisoning by penicillins, accidental (unintentional), sequela -T360X2A Poisoning by penicillins, intentional self-harm, initial encounter -T360X2D Poisoning by penicillins, intentional self-harm, subsequent encounter -T360X2S Poisoning by penicillins, intentional self-harm, sequela -T360X3A Poisoning by penicillins, assault, initial encounter -T360X3D Poisoning by penicillins, assault, subsequent encounter -T360X3S Poisoning by penicillins, assault, sequela -T360X4A Poisoning by penicillins, undetermined, initial encounter -T360X4D Poisoning by penicillins, undetermined, subsequent encounter -T360X4S Poisoning by penicillins, undetermined, sequela -T360X5A Adverse effect of penicillins, initial encounter -T360X5D Adverse effect of penicillins, subsequent encounter -T360X5S Adverse effect of penicillins, sequela -T360X6A Underdosing of penicillins, initial encounter -T360X6D Underdosing of penicillins, subsequent encounter -T360X6S Underdosing of penicillins, sequela -T361X1A Poisoning by cephalosporins and other beta-lactam antibiotics, accidental (unintentional), initial encounter -T361X1D Poisoning by cephalosporins and other beta-lactam antibiotics, accidental (unintentional), subsequent encounter -T361X1S Poisoning by cephalosporins and other beta-lactam antibiotics, accidental (unintentional), sequela -T361X2A Poisoning by cephalosporins and other beta-lactam antibiotics, intentional self-harm, initial encounter -T361X2D Poisoning by cephalosporins and other beta-lactam antibiotics, intentional self-harm, subsequent encounter -T361X2S Poisoning by cephalosporins and other beta-lactam antibiotics, intentional self-harm, sequela -T361X3A Poisoning by cephalosporins and other beta-lactam antibiotics, assault, initial encounter -T361X3D Poisoning by cephalosporins and other beta-lactam antibiotics, assault, subsequent encounter -T361X3S Poisoning by cephalosporins and other beta-lactam antibiotics, assault, sequela -T361X4A Poisoning by cephalosporins and other beta-lactam antibiotics, undetermined, initial encounter -T361X4D Poisoning by cephalosporins and other beta-lactam antibiotics, undetermined, subsequent encounter -T361X4S Poisoning by cephalosporins and other beta-lactam antibiotics, undetermined, sequela -T361X5A Adverse effect of cephalosporins and other beta-lactam antibiotics, initial encounter -T361X5D Adverse effect of cephalosporins and other beta-lactam antibiotics, subsequent encounter -T361X5S Adverse effect of cephalosporins and other beta-lactam antibiotics, sequela -T361X6A Underdosing of cephalosporins and other beta-lactam antibiotics, initial encounter -T361X6D Underdosing of cephalosporins and other beta-lactam antibiotics, subsequent encounter -T361X6S Underdosing of cephalosporins and other beta-lactam antibiotics, sequela -T362X1A Poisoning by chloramphenicol group, accidental (unintentional), initial encounter -T362X1D Poisoning by chloramphenicol group, accidental (unintentional), subsequent encounter -T362X1S Poisoning by chloramphenicol group, accidental (unintentional), sequela -T362X2A Poisoning by chloramphenicol group, intentional self-harm, initial encounter -T362X2D Poisoning by chloramphenicol group, intentional self-harm, subsequent encounter -T362X2S Poisoning by chloramphenicol group, intentional self-harm, sequela -T362X3A Poisoning by chloramphenicol group, assault, initial encounter -T362X3D Poisoning by chloramphenicol group, assault, subsequent encounter -T362X3S Poisoning by chloramphenicol group, assault, sequela -T362X4A Poisoning by chloramphenicol group, undetermined, initial encounter -T362X4D Poisoning by chloramphenicol group, undetermined, subsequent encounter -T362X4S Poisoning by chloramphenicol group, undetermined, sequela -T362X5A Adverse effect of chloramphenicol group, initial encounter -T362X5D Adverse effect of chloramphenicol group, subsequent encounter -T362X5S Adverse effect of chloramphenicol group, sequela -T362X6A Underdosing of chloramphenicol group, initial encounter -T362X6D Underdosing of chloramphenicol group, subsequent encounter -T362X6S Underdosing of chloramphenicol group, sequela -T363X1A Poisoning by macrolides, accidental (unintentional), initial encounter -T363X1D Poisoning by macrolides, accidental (unintentional), subsequent encounter -T363X1S Poisoning by macrolides, accidental (unintentional), sequela -T363X2A Poisoning by macrolides, intentional self-harm, initial encounter -T363X2D Poisoning by macrolides, intentional self-harm, subsequent encounter -T363X2S Poisoning by macrolides, intentional self-harm, sequela -T363X3A Poisoning by macrolides, assault, initial encounter -T363X3D Poisoning by macrolides, assault, subsequent encounter -T363X3S Poisoning by macrolides, assault, sequela -T363X4A Poisoning by macrolides, undetermined, initial encounter -T363X4D Poisoning by macrolides, undetermined, subsequent encounter -T363X4S Poisoning by macrolides, undetermined, sequela -T363X5A Adverse effect of macrolides, initial encounter -T363X5D Adverse effect of macrolides, subsequent encounter -T363X5S Adverse effect of macrolides, sequela -T363X6A Underdosing of macrolides, initial encounter -T363X6D Underdosing of macrolides, subsequent encounter -T363X6S Underdosing of macrolides, sequela -T364X1A Poisoning by tetracyclines, accidental (unintentional), initial encounter -T364X1D Poisoning by tetracyclines, accidental (unintentional), subsequent encounter -T364X1S Poisoning by tetracyclines, accidental (unintentional), sequela -T364X2A Poisoning by tetracyclines, intentional self-harm, initial encounter -T364X2D Poisoning by tetracyclines, intentional self-harm, subsequent encounter -T364X2S Poisoning by tetracyclines, intentional self-harm, sequela -T364X3A Poisoning by tetracyclines, assault, initial encounter -T364X3D Poisoning by tetracyclines, assault, subsequent encounter -T364X3S Poisoning by tetracyclines, assault, sequela -T364X4A Poisoning by tetracyclines, undetermined, initial encounter -T364X4D Poisoning by tetracyclines, undetermined, subsequent encounter -T364X4S Poisoning by tetracyclines, undetermined, sequela -T364X5A Adverse effect of tetracyclines, initial encounter -T364X5D Adverse effect of tetracyclines, subsequent encounter -T364X5S Adverse effect of tetracyclines, sequela -T364X6A Underdosing of tetracyclines, initial encounter -T364X6D Underdosing of tetracyclines, subsequent encounter -T364X6S Underdosing of tetracyclines, sequela -T365X1A Poisoning by aminoglycosides, accidental (unintentional), initial encounter -T365X1D Poisoning by aminoglycosides, accidental (unintentional), subsequent encounter -T365X1S Poisoning by aminoglycosides, accidental (unintentional), sequela -T365X2A Poisoning by aminoglycosides, intentional self-harm, initial encounter -T365X2D Poisoning by aminoglycosides, intentional self-harm, subsequent encounter -T365X2S Poisoning by aminoglycosides, intentional self-harm, sequela -T365X3A Poisoning by aminoglycosides, assault, initial encounter -T365X3D Poisoning by aminoglycosides, assault, subsequent encounter -T365X3S Poisoning by aminoglycosides, assault, sequela -T365X4A Poisoning by aminoglycosides, undetermined, initial encounter -T365X4D Poisoning by aminoglycosides, undetermined, subsequent encounter -T365X4S Poisoning by aminoglycosides, undetermined, sequela -T365X5A Adverse effect of aminoglycosides, initial encounter -T365X5D Adverse effect of aminoglycosides, subsequent encounter -T365X5S Adverse effect of aminoglycosides, sequela -T365X6A Underdosing of aminoglycosides, initial encounter -T365X6D Underdosing of aminoglycosides, subsequent encounter -T365X6S Underdosing of aminoglycosides, sequela -T366X1A Poisoning by rifampicins, accidental (unintentional), initial encounter -T366X1D Poisoning by rifampicins, accidental (unintentional), subsequent encounter -T366X1S Poisoning by rifampicins, accidental (unintentional), sequela -T366X2A Poisoning by rifampicins, intentional self-harm, initial encounter -T366X2D Poisoning by rifampicins, intentional self-harm, subsequent encounter -T366X2S Poisoning by rifampicins, intentional self-harm, sequela -T366X3A Poisoning by rifampicins, assault, initial encounter -T366X3D Poisoning by rifampicins, assault, subsequent encounter -T366X3S Poisoning by rifampicins, assault, sequela -T366X4A Poisoning by rifampicins, undetermined, initial encounter -T366X4D Poisoning by rifampicins, undetermined, subsequent encounter -T366X4S Poisoning by rifampicins, undetermined, sequela -T366X5A Adverse effect of rifampicins, initial encounter -T366X5D Adverse effect of rifampicins, subsequent encounter -T366X5S Adverse effect of rifampicins, sequela -T366X6A Underdosing of rifampicins, initial encounter -T366X6D Underdosing of rifampicins, subsequent encounter -T366X6S Underdosing of rifampicins, sequela -T367X1A Poisoning by antifungal antibiotics, systemically used, accidental (unintentional), initial encounter -T367X1D Poisoning by antifungal antibiotics, systemically used, accidental (unintentional), subsequent encounter -T367X1S Poisoning by antifungal antibiotics, systemically used, accidental (unintentional), sequela -T367X2A Poisoning by antifungal antibiotics, systemically used, intentional self-harm, initial encounter -T367X2D Poisoning by antifungal antibiotics, systemically used, intentional self-harm, subsequent encounter -T367X2S Poisoning by antifungal antibiotics, systemically used, intentional self-harm, sequela -T367X3A Poisoning by antifungal antibiotics, systemically used, assault, initial encounter -T367X3D Poisoning by antifungal antibiotics, systemically used, assault, subsequent encounter -T367X3S Poisoning by antifungal antibiotics, systemically used, assault, sequela -T367X4A Poisoning by antifungal antibiotics, systemically used, undetermined, initial encounter -T367X4D Poisoning by antifungal antibiotics, systemically used, undetermined, subsequent encounter -T367X4S Poisoning by antifungal antibiotics, systemically used, undetermined, sequela -T367X5A Adverse effect of antifungal antibiotics, systemically used, initial encounter -T367X5D Adverse effect of antifungal antibiotics, systemically used, subsequent encounter -T367X5S Adverse effect of antifungal antibiotics, systemically used, sequela -T367X6A Underdosing of antifungal antibiotics, systemically used, initial encounter -T367X6D Underdosing of antifungal antibiotics, systemically used, subsequent encounter -T367X6S Underdosing of antifungal antibiotics, systemically used, sequela -T368X1A Poisoning by other systemic antibiotics, accidental (unintentional), initial encounter -T368X1D Poisoning by other systemic antibiotics, accidental (unintentional), subsequent encounter -T368X1S Poisoning by other systemic antibiotics, accidental (unintentional), sequela -T368X2A Poisoning by other systemic antibiotics, intentional self-harm, initial encounter -T368X2D Poisoning by other systemic antibiotics, intentional self-harm, subsequent encounter -T368X2S Poisoning by other systemic antibiotics, intentional self-harm, sequela -T368X3A Poisoning by other systemic antibiotics, assault, initial encounter -T368X3D Poisoning by other systemic antibiotics, assault, subsequent encounter -T368X3S Poisoning by other systemic antibiotics, assault, sequela -T368X4A Poisoning by other systemic antibiotics, undetermined, initial encounter -T368X4D Poisoning by other systemic antibiotics, undetermined, subsequent encounter -T368X4S Poisoning by other systemic antibiotics, undetermined, sequela -T368X5A Adverse effect of other systemic antibiotics, initial encounter -T368X5D Adverse effect of other systemic antibiotics, subsequent encounter -T368X5S Adverse effect of other systemic antibiotics, sequela -T368X6A Underdosing of other systemic antibiotics, initial encounter -T368X6D Underdosing of other systemic antibiotics, subsequent encounter -T368X6S Underdosing of other systemic antibiotics, sequela -T3691XA Poisoning by unspecified systemic antibiotic, accidental (unintentional), initial encounter -T3691XD Poisoning by unspecified systemic antibiotic, accidental (unintentional), subsequent encounter -T3691XS Poisoning by unspecified systemic antibiotic, accidental (unintentional), sequela -T3692XA Poisoning by unspecified systemic antibiotic, intentional self-harm, initial encounter -T3692XD Poisoning by unspecified systemic antibiotic, intentional self-harm, subsequent encounter -T3692XS Poisoning by unspecified systemic antibiotic, intentional self-harm, sequela -T3693XA Poisoning by unspecified systemic antibiotic, assault, initial encounter -T3693XD Poisoning by unspecified systemic antibiotic, assault, subsequent encounter -T3693XS Poisoning by unspecified systemic antibiotic, assault, sequela -T3694XA Poisoning by unspecified systemic antibiotic, undetermined, initial encounter -T3694XD Poisoning by unspecified systemic antibiotic, undetermined, subsequent encounter -T3694XS Poisoning by unspecified systemic antibiotic, undetermined, sequela -T3695XA Adverse effect of unspecified systemic antibiotic, initial encounter -T3695XD Adverse effect of unspecified systemic antibiotic, subsequent encounter -T3695XS Adverse effect of unspecified systemic antibiotic, sequela -T3696XA Underdosing of unspecified systemic antibiotic, initial encounter -T3696XD Underdosing of unspecified systemic antibiotic, subsequent encounter -T3696XS Underdosing of unspecified systemic antibiotic, sequela -T370X1A Poisoning by sulfonamides, accidental (unintentional), initial encounter -T370X1D Poisoning by sulfonamides, accidental (unintentional), subsequent encounter -T370X1S Poisoning by sulfonamides, accidental (unintentional), sequela -T370X2A Poisoning by sulfonamides, intentional self-harm, initial encounter -T370X2D Poisoning by sulfonamides, intentional self-harm, subsequent encounter -T370X2S Poisoning by sulfonamides, intentional self-harm, sequela -T370X3A Poisoning by sulfonamides, assault, initial encounter -T370X3D Poisoning by sulfonamides, assault, subsequent encounter -T370X3S Poisoning by sulfonamides, assault, sequela -T370X4A Poisoning by sulfonamides, undetermined, initial encounter -T370X4D Poisoning by sulfonamides, undetermined, subsequent encounter -T370X4S Poisoning by sulfonamides, undetermined, sequela -T370X5A Adverse effect of sulfonamides, initial encounter -T370X5D Adverse effect of sulfonamides, subsequent encounter -T370X5S Adverse effect of sulfonamides, sequela -T370X6A Underdosing of sulfonamides, initial encounter -T370X6D Underdosing of sulfonamides, subsequent encounter -T370X6S Underdosing of sulfonamides, sequela -T371X1A Poisoning by antimycobacterial drugs, accidental (unintentional), initial encounter -T371X1D Poisoning by antimycobacterial drugs, accidental (unintentional), subsequent encounter -T371X1S Poisoning by antimycobacterial drugs, accidental (unintentional), sequela -T371X2A Poisoning by antimycobacterial drugs, intentional self-harm, initial encounter -T371X2D Poisoning by antimycobacterial drugs, intentional self-harm, subsequent encounter -T371X2S Poisoning by antimycobacterial drugs, intentional self-harm, sequela -T371X3A Poisoning by antimycobacterial drugs, assault, initial encounter -T371X3D Poisoning by antimycobacterial drugs, assault, subsequent encounter -T371X3S Poisoning by antimycobacterial drugs, assault, sequela -T371X4A Poisoning by antimycobacterial drugs, undetermined, initial encounter -T371X4D Poisoning by antimycobacterial drugs, undetermined, subsequent encounter -T371X4S Poisoning by antimycobacterial drugs, undetermined, sequela -T371X5A Adverse effect of antimycobacterial drugs, initial encounter -T371X5D Adverse effect of antimycobacterial drugs, subsequent encounter -T371X5S Adverse effect of antimycobacterial drugs, sequela -T371X6A Underdosing of antimycobacterial drugs, initial encounter -T371X6D Underdosing of antimycobacterial drugs, subsequent encounter -T371X6S Underdosing of antimycobacterial drugs, sequela -T372X1A Poisoning by antimalarials and drugs acting on other blood protozoa, accidental (unintentional), initial encounter -T372X1D Poisoning by antimalarials and drugs acting on other blood protozoa, accidental (unintentional), subsequent encounter -T372X1S Poisoning by antimalarials and drugs acting on other blood protozoa, accidental (unintentional), sequela -T372X2A Poisoning by antimalarials and drugs acting on other blood protozoa, intentional self-harm, initial encounter -T372X2D Poisoning by antimalarials and drugs acting on other blood protozoa, intentional self-harm, subsequent encounter -T372X2S Poisoning by antimalarials and drugs acting on other blood protozoa, intentional self-harm, sequela -T372X3A Poisoning by antimalarials and drugs acting on other blood protozoa, assault, initial encounter -T372X3D Poisoning by antimalarials and drugs acting on other blood protozoa, assault, subsequent encounter -T372X3S Poisoning by antimalarials and drugs acting on other blood protozoa, assault, sequela -T372X4A Poisoning by antimalarials and drugs acting on other blood protozoa, undetermined, initial encounter -T372X4D Poisoning by antimalarials and drugs acting on other blood protozoa, undetermined, subsequent encounter -T372X4S Poisoning by antimalarials and drugs acting on other blood protozoa, undetermined, sequela -T372X5A Adverse effect of antimalarials and drugs acting on other blood protozoa, initial encounter -T372X5D Adverse effect of antimalarials and drugs acting on other blood protozoa, subsequent encounter -T372X5S Adverse effect of antimalarials and drugs acting on other blood protozoa, sequela -T372X6A Underdosing of antimalarials and drugs acting on other blood protozoa, initial encounter -T372X6D Underdosing of antimalarials and drugs acting on other blood protozoa, subsequent encounter -T372X6S Underdosing of antimalarials and drugs acting on other blood protozoa, sequela -T373X1A Poisoning by other antiprotozoal drugs, accidental (unintentional), initial encounter -T373X1D Poisoning by other antiprotozoal drugs, accidental (unintentional), subsequent encounter -T373X1S Poisoning by other antiprotozoal drugs, accidental (unintentional), sequela -T373X2A Poisoning by other antiprotozoal drugs, intentional self-harm, initial encounter -T373X2D Poisoning by other antiprotozoal drugs, intentional self-harm, subsequent encounter -T373X2S Poisoning by other antiprotozoal drugs, intentional self-harm, sequela -T373X3A Poisoning by other antiprotozoal drugs, assault, initial encounter -T373X3D Poisoning by other antiprotozoal drugs, assault, subsequent encounter -T373X3S Poisoning by other antiprotozoal drugs, assault, sequela -T373X4A Poisoning by other antiprotozoal drugs, undetermined, initial encounter -T373X4D Poisoning by other antiprotozoal drugs, undetermined, subsequent encounter -T373X4S Poisoning by other antiprotozoal drugs, undetermined, sequela -T373X5A Adverse effect of other antiprotozoal drugs, initial encounter -T373X5D Adverse effect of other antiprotozoal drugs, subsequent encounter -T373X5S Adverse effect of other antiprotozoal drugs, sequela -T373X6A Underdosing of other antiprotozoal drugs, initial encounter -T373X6D Underdosing of other antiprotozoal drugs, subsequent encounter -T373X6S Underdosing of other antiprotozoal drugs, sequela -T374X1A Poisoning by anthelminthics, accidental (unintentional), initial encounter -T374X1D Poisoning by anthelminthics, accidental (unintentional), subsequent encounter -T374X1S Poisoning by anthelminthics, accidental (unintentional), sequela -T374X2A Poisoning by anthelminthics, intentional self-harm, initial encounter -T374X2D Poisoning by anthelminthics, intentional self-harm, subsequent encounter -T374X2S Poisoning by anthelminthics, intentional self-harm, sequela -T374X3A Poisoning by anthelminthics, assault, initial encounter -T374X3D Poisoning by anthelminthics, assault, subsequent encounter -T374X3S Poisoning by anthelminthics, assault, sequela -T374X4A Poisoning by anthelminthics, undetermined, initial encounter -T374X4D Poisoning by anthelminthics, undetermined, subsequent encounter -T374X4S Poisoning by anthelminthics, undetermined, sequela -T374X5A Adverse effect of anthelminthics, initial encounter -T374X5D Adverse effect of anthelminthics, subsequent encounter -T374X5S Adverse effect of anthelminthics, sequela -T374X6A Underdosing of anthelminthics, initial encounter -T374X6D Underdosing of anthelminthics, subsequent encounter -T374X6S Underdosing of anthelminthics, sequela -T375X1A Poisoning by antiviral drugs, accidental (unintentional), initial encounter -T375X1D Poisoning by antiviral drugs, accidental (unintentional), subsequent encounter -T375X1S Poisoning by antiviral drugs, accidental (unintentional), sequela -T375X2A Poisoning by antiviral drugs, intentional self-harm, initial encounter -T375X2D Poisoning by antiviral drugs, intentional self-harm, subsequent encounter -T375X2S Poisoning by antiviral drugs, intentional self-harm, sequela -T375X3A Poisoning by antiviral drugs, assault, initial encounter -T375X3D Poisoning by antiviral drugs, assault, subsequent encounter -T375X3S Poisoning by antiviral drugs, assault, sequela -T375X4A Poisoning by antiviral drugs, undetermined, initial encounter -T375X4D Poisoning by antiviral drugs, undetermined, subsequent encounter -T375X4S Poisoning by antiviral drugs, undetermined, sequela -T375X5A Adverse effect of antiviral drugs, initial encounter -T375X5D Adverse effect of antiviral drugs, subsequent encounter -T375X5S Adverse effect of antiviral drugs, sequela -T375X6A Underdosing of antiviral drugs, initial encounter -T375X6D Underdosing of antiviral drugs, subsequent encounter -T375X6S Underdosing of antiviral drugs, sequela -T378X1A Poisoning by other specified systemic anti-infectives and antiparasitics, accidental (unintentional), initial encounter -T378X1D Poisoning by other specified systemic anti-infectives and antiparasitics, accidental (unintentional), subsequent encounter -T378X1S Poisoning by other specified systemic anti-infectives and antiparasitics, accidental (unintentional), sequela -T378X2A Poisoning by other specified systemic anti-infectives and antiparasitics, intentional self-harm, initial encounter -T378X2D Poisoning by other specified systemic anti-infectives and antiparasitics, intentional self-harm, subsequent encounter -T378X2S Poisoning by other specified systemic anti-infectives and antiparasitics, intentional self-harm, sequela -T378X3A Poisoning by other specified systemic anti-infectives and antiparasitics, assault, initial encounter -T378X3D Poisoning by other specified systemic anti-infectives and antiparasitics, assault, subsequent encounter -T378X3S Poisoning by other specified systemic anti-infectives and antiparasitics, assault, sequela -T378X4A Poisoning by other specified systemic anti-infectives and antiparasitics, undetermined, initial encounter -T378X4D Poisoning by other specified systemic anti-infectives and antiparasitics, undetermined, subsequent encounter -T378X4S Poisoning by other specified systemic anti-infectives and antiparasitics, undetermined, sequela -T378X5A Adverse effect of other specified systemic anti-infectives and antiparasitics, initial encounter -T378X5D Adverse effect of other specified systemic anti-infectives and antiparasitics, subsequent encounter -T378X5S Adverse effect of other specified systemic anti-infectives and antiparasitics, sequela -T378X6A Underdosing of other specified systemic anti-infectives and antiparasitics, initial encounter -T378X6D Underdosing of other specified systemic anti-infectives and antiparasitics, subsequent encounter -T378X6S Underdosing of other specified systemic anti-infectives and antiparasitics, sequela -T3791XA Poisoning by unspecified systemic anti-infective and antiparasitics, accidental (unintentional), initial encounter -T3791XD Poisoning by unspecified systemic anti-infective and antiparasitics, accidental (unintentional), subsequent encounter -T3791XS Poisoning by unspecified systemic anti-infective and antiparasitics, accidental (unintentional), sequela -T3792XA Poisoning by unspecified systemic anti-infective and antiparasitics, intentional self-harm, initial encounter -T3792XD Poisoning by unspecified systemic anti-infective and antiparasitics, intentional self-harm, subsequent encounter -T3792XS Poisoning by unspecified systemic anti-infective and antiparasitics, intentional self-harm, sequela -T3793XA Poisoning by unspecified systemic anti-infective and antiparasitics, assault, initial encounter -T3793XD Poisoning by unspecified systemic anti-infective and antiparasitics, assault, subsequent encounter -T3793XS Poisoning by unspecified systemic anti-infective and antiparasitics, assault, sequela -T3794XA Poisoning by unspecified systemic anti-infective and antiparasitics, undetermined, initial encounter -T3794XD Poisoning by unspecified systemic anti-infective and antiparasitics, undetermined, subsequent encounter -T3794XS Poisoning by unspecified systemic anti-infective and antiparasitics, undetermined, sequela -T3795XA Adverse effect of unspecified systemic anti-infective and antiparasitic, initial encounter -T3795XD Adverse effect of unspecified systemic anti-infective and antiparasitic, subsequent encounter -T3795XS Adverse effect of unspecified systemic anti-infective and antiparasitic, sequela -T3796XA Underdosing of unspecified systemic anti-infectives and antiparasitics, initial encounter -T3796XD Underdosing of unspecified systemic anti-infectives and antiparasitics, subsequent encounter -T3796XS Underdosing of unspecified systemic anti-infectives and antiparasitics, sequela -T380X1A Poisoning by glucocorticoids and synthetic analogues, accidental (unintentional), initial encounter -T380X1D Poisoning by glucocorticoids and synthetic analogues, accidental (unintentional), subsequent encounter -T380X1S Poisoning by glucocorticoids and synthetic analogues, accidental (unintentional), sequela -T380X2A Poisoning by glucocorticoids and synthetic analogues, intentional self-harm, initial encounter -T380X2D Poisoning by glucocorticoids and synthetic analogues, intentional self-harm, subsequent encounter -T380X2S Poisoning by glucocorticoids and synthetic analogues, intentional self-harm, sequela -T380X3A Poisoning by glucocorticoids and synthetic analogues, assault, initial encounter -T380X3D Poisoning by glucocorticoids and synthetic analogues, assault, subsequent encounter -T380X3S Poisoning by glucocorticoids and synthetic analogues, assault, sequela -T380X4A Poisoning by glucocorticoids and synthetic analogues, undetermined, initial encounter -T380X4D Poisoning by glucocorticoids and synthetic analogues, undetermined, subsequent encounter -T380X4S Poisoning by glucocorticoids and synthetic analogues, undetermined, sequela -T380X5A Adverse effect of glucocorticoids and synthetic analogues, initial encounter -T380X5D Adverse effect of glucocorticoids and synthetic analogues, subsequent encounter -T380X5S Adverse effect of glucocorticoids and synthetic analogues, sequela -T380X6A Underdosing of glucocorticoids and synthetic analogues, initial encounter -T380X6D Underdosing of glucocorticoids and synthetic analogues, subsequent encounter -T380X6S Underdosing of glucocorticoids and synthetic analogues, sequela -T381X1A Poisoning by thyroid hormones and substitutes, accidental (unintentional), initial encounter -T381X1D Poisoning by thyroid hormones and substitutes, accidental (unintentional), subsequent encounter -T381X1S Poisoning by thyroid hormones and substitutes, accidental (unintentional), sequela -T381X2A Poisoning by thyroid hormones and substitutes, intentional self-harm, initial encounter -T381X2D Poisoning by thyroid hormones and substitutes, intentional self-harm, subsequent encounter -T381X2S Poisoning by thyroid hormones and substitutes, intentional self-harm, sequela -T381X3A Poisoning by thyroid hormones and substitutes, assault, initial encounter -T381X3D Poisoning by thyroid hormones and substitutes, assault, subsequent encounter -T381X3S Poisoning by thyroid hormones and substitutes, assault, sequela -T381X4A Poisoning by thyroid hormones and substitutes, undetermined, initial encounter -T381X4D Poisoning by thyroid hormones and substitutes, undetermined, subsequent encounter -T381X4S Poisoning by thyroid hormones and substitutes, undetermined, sequela -T381X5A Adverse effect of thyroid hormones and substitutes, initial encounter -T381X5D Adverse effect of thyroid hormones and substitutes, subsequent encounter -T381X5S Adverse effect of thyroid hormones and substitutes, sequela -T381X6A Underdosing of thyroid hormones and substitutes, initial encounter -T381X6D Underdosing of thyroid hormones and substitutes, subsequent encounter -T381X6S Underdosing of thyroid hormones and substitutes, sequela -T382X1A Poisoning by antithyroid drugs, accidental (unintentional), initial encounter -T382X1D Poisoning by antithyroid drugs, accidental (unintentional), subsequent encounter -T382X1S Poisoning by antithyroid drugs, accidental (unintentional), sequela -T382X2A Poisoning by antithyroid drugs, intentional self-harm, initial encounter -T382X2D Poisoning by antithyroid drugs, intentional self-harm, subsequent encounter -T382X2S Poisoning by antithyroid drugs, intentional self-harm, sequela -T382X3A Poisoning by antithyroid drugs, assault, initial encounter -T382X3D Poisoning by antithyroid drugs, assault, subsequent encounter -T382X3S Poisoning by antithyroid drugs, assault, sequela -T382X4A Poisoning by antithyroid drugs, undetermined, initial encounter -T382X4D Poisoning by antithyroid drugs, undetermined, subsequent encounter -T382X4S Poisoning by antithyroid drugs, undetermined, sequela -T382X5A Adverse effect of antithyroid drugs, initial encounter -T382X5D Adverse effect of antithyroid drugs, subsequent encounter -T382X5S Adverse effect of antithyroid drugs, sequela -T382X6A Underdosing of antithyroid drugs, initial encounter -T382X6D Underdosing of antithyroid drugs, subsequent encounter -T382X6S Underdosing of antithyroid drugs, sequela -T383X1A Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, accidental (unintentional), initial encounter -T383X1D Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, accidental (unintentional), subsequent encounter -T383X1S Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, accidental (unintentional), sequela -T383X2A Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, intentional self-harm, initial encounter -T383X2D Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, intentional self-harm, subsequent encounter -T383X2S Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, intentional self-harm, sequela -T383X3A Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, assault, initial encounter -T383X3D Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, assault, subsequent encounter -T383X3S Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, assault, sequela -T383X4A Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, undetermined, initial encounter -T383X4D Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, undetermined, subsequent encounter -T383X4S Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, undetermined, sequela -T383X5A Adverse effect of insulin and oral hypoglycemic [antidiabetic] drugs, initial encounter -T383X5D Adverse effect of insulin and oral hypoglycemic [antidiabetic] drugs, subsequent encounter -T383X5S Adverse effect of insulin and oral hypoglycemic [antidiabetic] drugs, sequela -T383X6A Underdosing of insulin and oral hypoglycemic [antidiabetic] drugs, initial encounter -T383X6D Underdosing of insulin and oral hypoglycemic [antidiabetic] drugs, subsequent encounter -T383X6S Underdosing of insulin and oral hypoglycemic [antidiabetic] drugs, sequela -T384X1A Poisoning by oral contraceptives, accidental (unintentional), initial encounter -T384X1D Poisoning by oral contraceptives, accidental (unintentional), subsequent encounter -T384X1S Poisoning by oral contraceptives, accidental (unintentional), sequela -T384X2A Poisoning by oral contraceptives, intentional self-harm, initial encounter -T384X2D Poisoning by oral contraceptives, intentional self-harm, subsequent encounter -T384X2S Poisoning by oral contraceptives, intentional self-harm, sequela -T384X3A Poisoning by oral contraceptives, assault, initial encounter -T384X3D Poisoning by oral contraceptives, assault, subsequent encounter -T384X3S Poisoning by oral contraceptives, assault, sequela -T384X4A Poisoning by oral contraceptives, undetermined, initial encounter -T384X4D Poisoning by oral contraceptives, undetermined, subsequent encounter -T384X4S Poisoning by oral contraceptives, undetermined, sequela -T384X5A Adverse effect of oral contraceptives, initial encounter -T384X5D Adverse effect of oral contraceptives, subsequent encounter -T384X5S Adverse effect of oral contraceptives, sequela -T384X6A Underdosing of oral contraceptives, initial encounter -T384X6D Underdosing of oral contraceptives, subsequent encounter -T384X6S Underdosing of oral contraceptives, sequela -T385X1A Poisoning by other estrogens and progestogens, accidental (unintentional), initial encounter -T385X1D Poisoning by other estrogens and progestogens, accidental (unintentional), subsequent encounter -T385X1S Poisoning by other estrogens and progestogens, accidental (unintentional), sequela -T385X2A Poisoning by other estrogens and progestogens, intentional self-harm, initial encounter -T385X2D Poisoning by other estrogens and progestogens, intentional self-harm, subsequent encounter -T385X2S Poisoning by other estrogens and progestogens, intentional self-harm, sequela -T385X3A Poisoning by other estrogens and progestogens, assault, initial encounter -T385X3D Poisoning by other estrogens and progestogens, assault, subsequent encounter -T385X3S Poisoning by other estrogens and progestogens, assault, sequela -T385X4A Poisoning by other estrogens and progestogens, undetermined, initial encounter -T385X4D Poisoning by other estrogens and progestogens, undetermined, subsequent encounter -T385X4S Poisoning by other estrogens and progestogens, undetermined, sequela -T385X5A Adverse effect of other estrogens and progestogens, initial encounter -T385X5D Adverse effect of other estrogens and progestogens, subsequent encounter -T385X5S Adverse effect of other estrogens and progestogens, sequela -T385X6A Underdosing of other estrogens and progestogens, initial encounter -T385X6D Underdosing of other estrogens and progestogens, subsequent encounter -T385X6S Underdosing of other estrogens and progestogens, sequela -T386X1A Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, accidental (unintentional), initial encounter -T386X1D Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, accidental (unintentional), subsequent encounter -T386X1S Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, accidental (unintentional), sequela -T386X2A Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, intentional self-harm, initial encounter -T386X2D Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, intentional self-harm, subsequent encounter -T386X2S Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, intentional self-harm, sequela -T386X3A Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, assault, initial encounter -T386X3D Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, assault, subsequent encounter -T386X3S Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, assault, sequela -T386X4A Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, undetermined, initial encounter -T386X4D Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, undetermined, subsequent encounter -T386X4S Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, undetermined, sequela -T386X5A Adverse effect of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, initial encounter -T386X5D Adverse effect of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, subsequent encounter -T386X5S Adverse effect of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, sequela -T386X6A Underdosing of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, initial encounter -T386X6D Underdosing of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, subsequent encounter -T386X6S Underdosing of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, sequela -T387X1A Poisoning by androgens and anabolic congeners, accidental (unintentional), initial encounter -T387X1D Poisoning by androgens and anabolic congeners, accidental (unintentional), subsequent encounter -T387X1S Poisoning by androgens and anabolic congeners, accidental (unintentional), sequela -T387X2A Poisoning by androgens and anabolic congeners, intentional self-harm, initial encounter -T387X2D Poisoning by androgens and anabolic congeners, intentional self-harm, subsequent encounter -T387X2S Poisoning by androgens and anabolic congeners, intentional self-harm, sequela -T387X3A Poisoning by androgens and anabolic congeners, assault, initial encounter -T387X3D Poisoning by androgens and anabolic congeners, assault, subsequent encounter -T387X3S Poisoning by androgens and anabolic congeners, assault, sequela -T387X4A Poisoning by androgens and anabolic congeners, undetermined, initial encounter -T387X4D Poisoning by androgens and anabolic congeners, undetermined, subsequent encounter -T387X4S Poisoning by androgens and anabolic congeners, undetermined, sequela -T387X5A Adverse effect of androgens and anabolic congeners, initial encounter -T387X5D Adverse effect of androgens and anabolic congeners, subsequent encounter -T387X5S Adverse effect of androgens and anabolic congeners, sequela -T387X6A Underdosing of androgens and anabolic congeners, initial encounter -T387X6D Underdosing of androgens and anabolic congeners, subsequent encounter -T387X6S Underdosing of androgens and anabolic congeners, sequela -T38801A Poisoning by unspecified hormones and synthetic substitutes, accidental (unintentional), initial encounter -T38801D Poisoning by unspecified hormones and synthetic substitutes, accidental (unintentional), subsequent encounter -T38801S Poisoning by unspecified hormones and synthetic substitutes, accidental (unintentional), sequela -T38802A Poisoning by unspecified hormones and synthetic substitutes, intentional self-harm, initial encounter -T38802D Poisoning by unspecified hormones and synthetic substitutes, intentional self-harm, subsequent encounter -T38802S Poisoning by unspecified hormones and synthetic substitutes, intentional self-harm, sequela -T38803A Poisoning by unspecified hormones and synthetic substitutes, assault, initial encounter -T38803D Poisoning by unspecified hormones and synthetic substitutes, assault, subsequent encounter -T38803S Poisoning by unspecified hormones and synthetic substitutes, assault, sequela -T38804A Poisoning by unspecified hormones and synthetic substitutes, undetermined, initial encounter -T38804D Poisoning by unspecified hormones and synthetic substitutes, undetermined, subsequent encounter -T38804S Poisoning by unspecified hormones and synthetic substitutes, undetermined, sequela -T38805A Adverse effect of unspecified hormones and synthetic substitutes, initial encounter -T38805D Adverse effect of unspecified hormones and synthetic substitutes, subsequent encounter -T38805S Adverse effect of unspecified hormones and synthetic substitutes, sequela -T38806A Underdosing of unspecified hormones and synthetic substitutes, initial encounter -T38806D Underdosing of unspecified hormones and synthetic substitutes, subsequent encounter -T38806S Underdosing of unspecified hormones and synthetic substitutes, sequela -T38811A Poisoning by anterior pituitary [adenohypophyseal] hormones, accidental (unintentional), initial encounter -T38811D Poisoning by anterior pituitary [adenohypophyseal] hormones, accidental (unintentional), subsequent encounter -T38811S Poisoning by anterior pituitary [adenohypophyseal] hormones, accidental (unintentional), sequela -T38812A Poisoning by anterior pituitary [adenohypophyseal] hormones, intentional self-harm, initial encounter -T38812D Poisoning by anterior pituitary [adenohypophyseal] hormones, intentional self-harm, subsequent encounter -T38812S Poisoning by anterior pituitary [adenohypophyseal] hormones, intentional self-harm, sequela -T38813A Poisoning by anterior pituitary [adenohypophyseal] hormones, assault, initial encounter -T38813D Poisoning by anterior pituitary [adenohypophyseal] hormones, assault, subsequent encounter -T38813S Poisoning by anterior pituitary [adenohypophyseal] hormones, assault, sequela -T38814A Poisoning by anterior pituitary [adenohypophyseal] hormones, undetermined, initial encounter -T38814D Poisoning by anterior pituitary [adenohypophyseal] hormones, undetermined, subsequent encounter -T38814S Poisoning by anterior pituitary [adenohypophyseal] hormones, undetermined, sequela -T38815A Adverse effect of anterior pituitary [adenohypophyseal] hormones, initial encounter -T38815D Adverse effect of anterior pituitary [adenohypophyseal] hormones, subsequent encounter -T38815S Adverse effect of anterior pituitary [adenohypophyseal] hormones, sequela -T38816A Underdosing of anterior pituitary [adenohypophyseal] hormones, initial encounter -T38816D Underdosing of anterior pituitary [adenohypophyseal] hormones, subsequent encounter -T38816S Underdosing of anterior pituitary [adenohypophyseal] hormones, sequela -T38891A Poisoning by other hormones and synthetic substitutes, accidental (unintentional), initial encounter -T38891D Poisoning by other hormones and synthetic substitutes, accidental (unintentional), subsequent encounter -T38891S Poisoning by other hormones and synthetic substitutes, accidental (unintentional), sequela -T38892A Poisoning by other hormones and synthetic substitutes, intentional self-harm, initial encounter -T38892D Poisoning by other hormones and synthetic substitutes, intentional self-harm, subsequent encounter -T38892S Poisoning by other hormones and synthetic substitutes, intentional self-harm, sequela -T38893A Poisoning by other hormones and synthetic substitutes, assault, initial encounter -T38893D Poisoning by other hormones and synthetic substitutes, assault, subsequent encounter -T38893S Poisoning by other hormones and synthetic substitutes, assault, sequela -T38894A Poisoning by other hormones and synthetic substitutes, undetermined, initial encounter -T38894D Poisoning by other hormones and synthetic substitutes, undetermined, subsequent encounter -T38894S Poisoning by other hormones and synthetic substitutes, undetermined, sequela -T38895A Adverse effect of other hormones and synthetic substitutes, initial encounter -T38895D Adverse effect of other hormones and synthetic substitutes, subsequent encounter -T38895S Adverse effect of other hormones and synthetic substitutes, sequela -T38896A Underdosing of other hormones and synthetic substitutes, initial encounter -T38896D Underdosing of other hormones and synthetic substitutes, subsequent encounter -T38896S Underdosing of other hormones and synthetic substitutes, sequela -T38901A Poisoning by unspecified hormone antagonists, accidental (unintentional), initial encounter -T38901D Poisoning by unspecified hormone antagonists, accidental (unintentional), subsequent encounter -T38901S Poisoning by unspecified hormone antagonists, accidental (unintentional), sequela -T38902A Poisoning by unspecified hormone antagonists, intentional self-harm, initial encounter -T38902D Poisoning by unspecified hormone antagonists, intentional self-harm, subsequent encounter -T38902S Poisoning by unspecified hormone antagonists, intentional self-harm, sequela -T38903A Poisoning by unspecified hormone antagonists, assault, initial encounter -T38903D Poisoning by unspecified hormone antagonists, assault, subsequent encounter -T38903S Poisoning by unspecified hormone antagonists, assault, sequela -T38904A Poisoning by unspecified hormone antagonists, undetermined, initial encounter -T38904D Poisoning by unspecified hormone antagonists, undetermined, subsequent encounter -T38904S Poisoning by unspecified hormone antagonists, undetermined, sequela -T38905A Adverse effect of unspecified hormone antagonists, initial encounter -T38905D Adverse effect of unspecified hormone antagonists, subsequent encounter -T38905S Adverse effect of unspecified hormone antagonists, sequela -T38906A Underdosing of unspecified hormone antagonists, initial encounter -T38906D Underdosing of unspecified hormone antagonists, subsequent encounter -T38906S Underdosing of unspecified hormone antagonists, sequela -T38991A Poisoning by other hormone antagonists, accidental (unintentional), initial encounter -T38991D Poisoning by other hormone antagonists, accidental (unintentional), subsequent encounter -T38991S Poisoning by other hormone antagonists, accidental (unintentional), sequela -T38992A Poisoning by other hormone antagonists, intentional self-harm, initial encounter -T38992D Poisoning by other hormone antagonists, intentional self-harm, subsequent encounter -T38992S Poisoning by other hormone antagonists, intentional self-harm, sequela -T38993A Poisoning by other hormone antagonists, assault, initial encounter -T38993D Poisoning by other hormone antagonists, assault, subsequent encounter -T38993S Poisoning by other hormone antagonists, assault, sequela -T38994A Poisoning by other hormone antagonists, undetermined, initial encounter -T38994D Poisoning by other hormone antagonists, undetermined, subsequent encounter -T38994S Poisoning by other hormone antagonists, undetermined, sequela -T38995A Adverse effect of other hormone antagonists, initial encounter -T38995D Adverse effect of other hormone antagonists, subsequent encounter -T38995S Adverse effect of other hormone antagonists, sequela -T38996A Underdosing of other hormone antagonists, initial encounter -T38996D Underdosing of other hormone antagonists, subsequent encounter -T38996S Underdosing of other hormone antagonists, sequela -T39011A Poisoning by aspirin, accidental (unintentional), initial encounter -T39011D Poisoning by aspirin, accidental (unintentional), subsequent encounter -T39011S Poisoning by aspirin, accidental (unintentional), sequela -T39012A Poisoning by aspirin, intentional self-harm, initial encounter -T39012D Poisoning by aspirin, intentional self-harm, subsequent encounter -T39012S Poisoning by aspirin, intentional self-harm, sequela -T39013A Poisoning by aspirin, assault, initial encounter -T39013D Poisoning by aspirin, assault, subsequent encounter -T39013S Poisoning by aspirin, assault, sequela -T39014A Poisoning by aspirin, undetermined, initial encounter -T39014D Poisoning by aspirin, undetermined, subsequent encounter -T39014S Poisoning by aspirin, undetermined, sequela -T39015A Adverse effect of aspirin, initial encounter -T39015D Adverse effect of aspirin, subsequent encounter -T39015S Adverse effect of aspirin, sequela -T39016A Underdosing of aspirin, initial encounter -T39016D Underdosing of aspirin, subsequent encounter -T39016S Underdosing of aspirin, sequela -T39091A Poisoning by salicylates, accidental (unintentional), initial encounter -T39091D Poisoning by salicylates, accidental (unintentional), subsequent encounter -T39091S Poisoning by salicylates, accidental (unintentional), sequela -T39092A Poisoning by salicylates, intentional self-harm, initial encounter -T39092D Poisoning by salicylates, intentional self-harm, subsequent encounter -T39092S Poisoning by salicylates, intentional self-harm, sequela -T39093A Poisoning by salicylates, assault, initial encounter -T39093D Poisoning by salicylates, assault, subsequent encounter -T39093S Poisoning by salicylates, assault, sequela -T39094A Poisoning by salicylates, undetermined, initial encounter -T39094D Poisoning by salicylates, undetermined, subsequent encounter -T39094S Poisoning by salicylates, undetermined, sequela -T39095A Adverse effect of salicylates, initial encounter -T39095D Adverse effect of salicylates, subsequent encounter -T39095S Adverse effect of salicylates, sequela -T39096A Underdosing of salicylates, initial encounter -T39096D Underdosing of salicylates, subsequent encounter -T39096S Underdosing of salicylates, sequela -T391X1A Poisoning by 4-Aminophenol derivatives, accidental (unintentional), initial encounter -T391X1D Poisoning by 4-Aminophenol derivatives, accidental (unintentional), subsequent encounter -T391X1S Poisoning by 4-Aminophenol derivatives, accidental (unintentional), sequela -T391X2A Poisoning by 4-Aminophenol derivatives, intentional self-harm, initial encounter -T391X2D Poisoning by 4-Aminophenol derivatives, intentional self-harm, subsequent encounter -T391X2S Poisoning by 4-Aminophenol derivatives, intentional self-harm, sequela -T391X3A Poisoning by 4-Aminophenol derivatives, assault, initial encounter -T391X3D Poisoning by 4-Aminophenol derivatives, assault, subsequent encounter -T391X3S Poisoning by 4-Aminophenol derivatives, assault, sequela -T391X4A Poisoning by 4-Aminophenol derivatives, undetermined, initial encounter -T391X4D Poisoning by 4-Aminophenol derivatives, undetermined, subsequent encounter -T391X4S Poisoning by 4-Aminophenol derivatives, undetermined, sequela -T391X5A Adverse effect of 4-Aminophenol derivatives, initial encounter -T391X5D Adverse effect of 4-Aminophenol derivatives, subsequent encounter -T391X5S Adverse effect of 4-Aminophenol derivatives, sequela -T391X6A Underdosing of 4-Aminophenol derivatives, initial encounter -T391X6D Underdosing of 4-Aminophenol derivatives, subsequent encounter -T391X6S Underdosing of 4-Aminophenol derivatives, sequela -T392X1A Poisoning by pyrazolone derivatives, accidental (unintentional), initial encounter -T392X1D Poisoning by pyrazolone derivatives, accidental (unintentional), subsequent encounter -T392X1S Poisoning by pyrazolone derivatives, accidental (unintentional), sequela -T392X2A Poisoning by pyrazolone derivatives, intentional self-harm, initial encounter -T392X2D Poisoning by pyrazolone derivatives, intentional self-harm, subsequent encounter -T392X2S Poisoning by pyrazolone derivatives, intentional self-harm, sequela -T392X3A Poisoning by pyrazolone derivatives, assault, initial encounter -T392X3D Poisoning by pyrazolone derivatives, assault, subsequent encounter -T392X3S Poisoning by pyrazolone derivatives, assault, sequela -T392X4A Poisoning by pyrazolone derivatives, undetermined, initial encounter -T392X4D Poisoning by pyrazolone derivatives, undetermined, subsequent encounter -T392X4S Poisoning by pyrazolone derivatives, undetermined, sequela -T392X5A Adverse effect of pyrazolone derivatives, initial encounter -T392X5D Adverse effect of pyrazolone derivatives, subsequent encounter -T392X5S Adverse effect of pyrazolone derivatives, sequela -T392X6A Underdosing of pyrazolone derivatives, initial encounter -T392X6D Underdosing of pyrazolone derivatives, subsequent encounter -T392X6S Underdosing of pyrazolone derivatives, sequela -T39311A Poisoning by propionic acid derivatives, accidental (unintentional), initial encounter -T39311D Poisoning by propionic acid derivatives, accidental (unintentional), subsequent encounter -T39311S Poisoning by propionic acid derivatives, accidental (unintentional), sequela -T39312A Poisoning by propionic acid derivatives, intentional self-harm, initial encounter -T39312D Poisoning by propionic acid derivatives, intentional self-harm, subsequent encounter -T39312S Poisoning by propionic acid derivatives, intentional self-harm, sequela -T39313A Poisoning by propionic acid derivatives, assault, initial encounter -T39313D Poisoning by propionic acid derivatives, assault, subsequent encounter -T39313S Poisoning by propionic acid derivatives, assault, sequela -T39314A Poisoning by propionic acid derivatives, undetermined, initial encounter -T39314D Poisoning by propionic acid derivatives, undetermined, subsequent encounter -T39314S Poisoning by propionic acid derivatives, undetermined, sequela -T39315A Adverse effect of propionic acid derivatives, initial encounter -T39315D Adverse effect of propionic acid derivatives, subsequent encounter -T39315S Adverse effect of propionic acid derivatives, sequela -T39316A Underdosing of propionic acid derivatives, initial encounter -T39316D Underdosing of propionic acid derivatives, subsequent encounter -T39316S Underdosing of propionic acid derivatives, sequela -T39391A Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], accidental (unintentional), initial encounter -T39391D Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], accidental (unintentional), subsequent encounter -T39391S Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], accidental (unintentional), sequela -T39392A Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], intentional self-harm, initial encounter -T39392D Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], intentional self-harm, subsequent encounter -T39392S Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], intentional self-harm, sequela -T39393A Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], assault, initial encounter -T39393D Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], assault, subsequent encounter -T39393S Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], assault, sequela -T39394A Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], undetermined, initial encounter -T39394D Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], undetermined, subsequent encounter -T39394S Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], undetermined, sequela -T39395A Adverse effect of other nonsteroidal anti-inflammatory drugs [NSAID], initial encounter -T39395D Adverse effect of other nonsteroidal anti-inflammatory drugs [NSAID], subsequent encounter -T39395S Adverse effect of other nonsteroidal anti-inflammatory drugs [NSAID], sequela -T39396A Underdosing of other nonsteroidal anti-inflammatory drugs [NSAID], initial encounter -T39396D Underdosing of other nonsteroidal anti-inflammatory drugs [NSAID], subsequent encounter -T39396S Underdosing of other nonsteroidal anti-inflammatory drugs [NSAID], sequela -T394X1A Poisoning by antirheumatics, not elsewhere classified, accidental (unintentional), initial encounter -T394X1D Poisoning by antirheumatics, not elsewhere classified, accidental (unintentional), subsequent encounter -T394X1S Poisoning by antirheumatics, not elsewhere classified, accidental (unintentional), sequela -T394X2A Poisoning by antirheumatics, not elsewhere classified, intentional self-harm, initial encounter -T394X2D Poisoning by antirheumatics, not elsewhere classified, intentional self-harm, subsequent encounter -T394X2S Poisoning by antirheumatics, not elsewhere classified, intentional self-harm, sequela -T394X3A Poisoning by antirheumatics, not elsewhere classified, assault, initial encounter -T394X3D Poisoning by antirheumatics, not elsewhere classified, assault, subsequent encounter -T394X3S Poisoning by antirheumatics, not elsewhere classified, assault, sequela -T394X4A Poisoning by antirheumatics, not elsewhere classified, undetermined, initial encounter -T394X4D Poisoning by antirheumatics, not elsewhere classified, undetermined, subsequent encounter -T394X4S Poisoning by antirheumatics, not elsewhere classified, undetermined, sequela -T394X5A Adverse effect of antirheumatics, not elsewhere classified, initial encounter -T394X5D Adverse effect of antirheumatics, not elsewhere classified, subsequent encounter -T394X5S Adverse effect of antirheumatics, not elsewhere classified, sequela -T394X6A Underdosing of antirheumatics, not elsewhere classified, initial encounter -T394X6D Underdosing of antirheumatics, not elsewhere classified, subsequent encounter -T394X6S Underdosing of antirheumatics, not elsewhere classified, sequela -T398X1A Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, accidental (unintentional), initial encounter -T398X1D Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, accidental (unintentional), subsequent encounter -T398X1S Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, accidental (unintentional), sequela -T398X2A Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, intentional self-harm, initial encounter -T398X2D Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, intentional self-harm, subsequent encounter -T398X2S Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, intentional self-harm, sequela -T398X3A Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, assault, initial encounter -T398X3D Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, assault, subsequent encounter -T398X3S Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, assault, sequela -T398X4A Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, undetermined, initial encounter -T398X4D Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, undetermined, subsequent encounter -T398X4S Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, undetermined, sequela -T398X5A Adverse effect of other nonopioid analgesics and antipyretics, not elsewhere classified, initial encounter -T398X5D Adverse effect of other nonopioid analgesics and antipyretics, not elsewhere classified, subsequent encounter -T398X5S Adverse effect of other nonopioid analgesics and antipyretics, not elsewhere classified, sequela -T398X6A Underdosing of other nonopioid analgesics and antipyretics, not elsewhere classified, initial encounter -T398X6D Underdosing of other nonopioid analgesics and antipyretics, not elsewhere classified, subsequent encounter -T398X6S Underdosing of other nonopioid analgesics and antipyretics, not elsewhere classified, sequela -T3991XA Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, accidental (unintentional), initial encounter -T3991XD Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, accidental (unintentional), subsequent encounter -T3991XS Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, accidental (unintentional), sequela -T3992XA Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, intentional self-harm, initial encounter -T3992XD Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, intentional self-harm, subsequent encounter -T3992XS Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, intentional self-harm, sequela -T3993XA Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, assault, initial encounter -T3993XD Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, assault, subsequent encounter -T3993XS Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, assault, sequela -T3994XA Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, undetermined, initial encounter -T3994XD Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, undetermined, subsequent encounter -T3994XS Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, undetermined, sequela -T3995XA Adverse effect of unspecified nonopioid analgesic, antipyretic and antirheumatic, initial encounter -T3995XD Adverse effect of unspecified nonopioid analgesic, antipyretic and antirheumatic, subsequent encounter -T3995XS Adverse effect of unspecified nonopioid analgesic, antipyretic and antirheumatic, sequela -T3996XA Underdosing of unspecified nonopioid analgesic, antipyretic and antirheumatic, initial encounter -T3996XD Underdosing of unspecified nonopioid analgesic, antipyretic and antirheumatic, subsequent encounter -T3996XS Underdosing of unspecified nonopioid analgesic, antipyretic and antirheumatic, sequela -T400X1A Poisoning by opium, accidental (unintentional), initial encounter -T400X1D Poisoning by opium, accidental (unintentional), subsequent encounter -T400X1S Poisoning by opium, accidental (unintentional), sequela -T400X2A Poisoning by opium, intentional self-harm, initial encounter -T400X2D Poisoning by opium, intentional self-harm, subsequent encounter -T400X2S Poisoning by opium, intentional self-harm, sequela -T400X3A Poisoning by opium, assault, initial encounter -T400X3D Poisoning by opium, assault, subsequent encounter -T400X3S Poisoning by opium, assault, sequela -T400X4A Poisoning by opium, undetermined, initial encounter -T400X4D Poisoning by opium, undetermined, subsequent encounter -T400X4S Poisoning by opium, undetermined, sequela -T400X5A Adverse effect of opium, initial encounter -T400X5D Adverse effect of opium, subsequent encounter -T400X5S Adverse effect of opium, sequela -T400X6A Underdosing of opium, initial encounter -T400X6D Underdosing of opium, subsequent encounter -T400X6S Underdosing of opium, sequela -T401X1A Poisoning by heroin, accidental (unintentional), initial encounter -T401X1D Poisoning by heroin, accidental (unintentional), subsequent encounter -T401X1S Poisoning by heroin, accidental (unintentional), sequela -T401X2A Poisoning by heroin, intentional self-harm, initial encounter -T401X2D Poisoning by heroin, intentional self-harm, subsequent encounter -T401X2S Poisoning by heroin, intentional self-harm, sequela -T401X3A Poisoning by heroin, assault, initial encounter -T401X3D Poisoning by heroin, assault, subsequent encounter -T401X3S Poisoning by heroin, assault, sequela -T401X4A Poisoning by heroin, undetermined, initial encounter -T401X4D Poisoning by heroin, undetermined, subsequent encounter -T401X4S Poisoning by heroin, undetermined, sequela -T402X1A Poisoning by other opioids, accidental (unintentional), initial encounter -T402X1D Poisoning by other opioids, accidental (unintentional), subsequent encounter -T402X1S Poisoning by other opioids, accidental (unintentional), sequela -T402X2A Poisoning by other opioids, intentional self-harm, initial encounter -T402X2D Poisoning by other opioids, intentional self-harm, subsequent encounter -T402X2S Poisoning by other opioids, intentional self-harm, sequela -T402X3A Poisoning by other opioids, assault, initial encounter -T402X3D Poisoning by other opioids, assault, subsequent encounter -T402X3S Poisoning by other opioids, assault, sequela -T402X4A Poisoning by other opioids, undetermined, initial encounter -T402X4D Poisoning by other opioids, undetermined, subsequent encounter -T402X4S Poisoning by other opioids, undetermined, sequela -T402X5A Adverse effect of other opioids, initial encounter -T402X5D Adverse effect of other opioids, subsequent encounter -T402X5S Adverse effect of other opioids, sequela -T402X6A Underdosing of other opioids, initial encounter -T402X6D Underdosing of other opioids, subsequent encounter -T402X6S Underdosing of other opioids, sequela -T403X1A Poisoning by methadone, accidental (unintentional), initial encounter -T403X1D Poisoning by methadone, accidental (unintentional), subsequent encounter -T403X1S Poisoning by methadone, accidental (unintentional), sequela -T403X2A Poisoning by methadone, intentional self-harm, initial encounter -T403X2D Poisoning by methadone, intentional self-harm, subsequent encounter -T403X2S Poisoning by methadone, intentional self-harm, sequela -T403X3A Poisoning by methadone, assault, initial encounter -T403X3D Poisoning by methadone, assault, subsequent encounter -T403X3S Poisoning by methadone, assault, sequela -T403X4A Poisoning by methadone, undetermined, initial encounter -T403X4D Poisoning by methadone, undetermined, subsequent encounter -T403X4S Poisoning by methadone, undetermined, sequela -T403X5A Adverse effect of methadone, initial encounter -T403X5D Adverse effect of methadone, subsequent encounter -T403X5S Adverse effect of methadone, sequela -T403X6A Underdosing of methadone, initial encounter -T403X6D Underdosing of methadone, subsequent encounter -T403X6S Underdosing of methadone, sequela -T404X1A Poisoning by other synthetic narcotics, accidental (unintentional), initial encounter -T404X1D Poisoning by other synthetic narcotics, accidental (unintentional), subsequent encounter -T404X1S Poisoning by other synthetic narcotics, accidental (unintentional), sequela -T404X2A Poisoning by other synthetic narcotics, intentional self-harm, initial encounter -T404X2D Poisoning by other synthetic narcotics, intentional self-harm, subsequent encounter -T404X2S Poisoning by other synthetic narcotics, intentional self-harm, sequela -T404X3A Poisoning by other synthetic narcotics, assault, initial encounter -T404X3D Poisoning by other synthetic narcotics, assault, subsequent encounter -T404X3S Poisoning by other synthetic narcotics, assault, sequela -T404X4A Poisoning by other synthetic narcotics, undetermined, initial encounter -T404X4D Poisoning by other synthetic narcotics, undetermined, subsequent encounter -T404X4S Poisoning by other synthetic narcotics, undetermined, sequela -T404X5A Adverse effect of other synthetic narcotics, initial encounter -T404X5D Adverse effect of other synthetic narcotics, subsequent encounter -T404X5S Adverse effect of other synthetic narcotics, sequela -T404X6A Underdosing of other synthetic narcotics, initial encounter -T404X6D Underdosing of other synthetic narcotics, subsequent encounter -T404X6S Underdosing of other synthetic narcotics, sequela -T405X1A Poisoning by cocaine, accidental (unintentional), initial encounter -T405X1D Poisoning by cocaine, accidental (unintentional), subsequent encounter -T405X1S Poisoning by cocaine, accidental (unintentional), sequela -T405X2A Poisoning by cocaine, intentional self-harm, initial encounter -T405X2D Poisoning by cocaine, intentional self-harm, subsequent encounter -T405X2S Poisoning by cocaine, intentional self-harm, sequela -T405X3A Poisoning by cocaine, assault, initial encounter -T405X3D Poisoning by cocaine, assault, subsequent encounter -T405X3S Poisoning by cocaine, assault, sequela -T405X4A Poisoning by cocaine, undetermined, initial encounter -T405X4D Poisoning by cocaine, undetermined, subsequent encounter -T405X4S Poisoning by cocaine, undetermined, sequela -T405X5A Adverse effect of cocaine, initial encounter -T405X5D Adverse effect of cocaine, subsequent encounter -T405X5S Adverse effect of cocaine, sequela -T405X6A Underdosing of cocaine, initial encounter -T405X6D Underdosing of cocaine, subsequent encounter -T405X6S Underdosing of cocaine, sequela -T40601A Poisoning by unspecified narcotics, accidental (unintentional), initial encounter -T40601D Poisoning by unspecified narcotics, accidental (unintentional), subsequent encounter -T40601S Poisoning by unspecified narcotics, accidental (unintentional), sequela -T40602A Poisoning by unspecified narcotics, intentional self-harm, initial encounter -T40602D Poisoning by unspecified narcotics, intentional self-harm, subsequent encounter -T40602S Poisoning by unspecified narcotics, intentional self-harm, sequela -T40603A Poisoning by unspecified narcotics, assault, initial encounter -T40603D Poisoning by unspecified narcotics, assault, subsequent encounter -T40603S Poisoning by unspecified narcotics, assault, sequela -T40604A Poisoning by unspecified narcotics, undetermined, initial encounter -T40604D Poisoning by unspecified narcotics, undetermined, subsequent encounter -T40604S Poisoning by unspecified narcotics, undetermined, sequela -T40605A Adverse effect of unspecified narcotics, initial encounter -T40605D Adverse effect of unspecified narcotics, subsequent encounter -T40605S Adverse effect of unspecified narcotics, sequela -T40606A Underdosing of unspecified narcotics, initial encounter -T40606D Underdosing of unspecified narcotics, subsequent encounter -T40606S Underdosing of unspecified narcotics, sequela -T40691A Poisoning by other narcotics, accidental (unintentional), initial encounter -T40691D Poisoning by other narcotics, accidental (unintentional), subsequent encounter -T40691S Poisoning by other narcotics, accidental (unintentional), sequela -T40692A Poisoning by other narcotics, intentional self-harm, initial encounter -T40692D Poisoning by other narcotics, intentional self-harm, subsequent encounter -T40692S Poisoning by other narcotics, intentional self-harm, sequela -T40693A Poisoning by other narcotics, assault, initial encounter -T40693D Poisoning by other narcotics, assault, subsequent encounter -T40693S Poisoning by other narcotics, assault, sequela -T40694A Poisoning by other narcotics, undetermined, initial encounter -T40694D Poisoning by other narcotics, undetermined, subsequent encounter -T40694S Poisoning by other narcotics, undetermined, sequela -T40695A Adverse effect of other narcotics, initial encounter -T40695D Adverse effect of other narcotics, subsequent encounter -T40695S Adverse effect of other narcotics, sequela -T40696A Underdosing of other narcotics, initial encounter -T40696D Underdosing of other narcotics, subsequent encounter -T40696S Underdosing of other narcotics, sequela -T407X1A Poisoning by cannabis (derivatives), accidental (unintentional), initial encounter -T407X1D Poisoning by cannabis (derivatives), accidental (unintentional), subsequent encounter -T407X1S Poisoning by cannabis (derivatives), accidental (unintentional), sequela -T407X2A Poisoning by cannabis (derivatives), intentional self-harm, initial encounter -T407X2D Poisoning by cannabis (derivatives), intentional self-harm, subsequent encounter -T407X2S Poisoning by cannabis (derivatives), intentional self-harm, sequela -T407X3A Poisoning by cannabis (derivatives), assault, initial encounter -T407X3D Poisoning by cannabis (derivatives), assault, subsequent encounter -T407X3S Poisoning by cannabis (derivatives), assault, sequela -T407X4A Poisoning by cannabis (derivatives), undetermined, initial encounter -T407X4D Poisoning by cannabis (derivatives), undetermined, subsequent encounter -T407X4S Poisoning by cannabis (derivatives), undetermined, sequela -T407X5A Adverse effect of cannabis (derivatives), initial encounter -T407X5D Adverse effect of cannabis (derivatives), subsequent encounter -T407X5S Adverse effect of cannabis (derivatives), sequela -T407X6A Underdosing of cannabis (derivatives), initial encounter -T407X6D Underdosing of cannabis (derivatives), subsequent encounter -T407X6S Underdosing of cannabis (derivatives), sequela -T408X1A Poisoning by lysergide [LSD], accidental (unintentional), initial encounter -T408X1D Poisoning by lysergide [LSD], accidental (unintentional), subsequent encounter -T408X1S Poisoning by lysergide [LSD], accidental (unintentional), sequela -T408X2A Poisoning by lysergide [LSD], intentional self-harm, initial encounter -T408X2D Poisoning by lysergide [LSD], intentional self-harm, subsequent encounter -T408X2S Poisoning by lysergide [LSD], intentional self-harm, sequela -T408X3A Poisoning by lysergide [LSD], assault, initial encounter -T408X3D Poisoning by lysergide [LSD], assault, subsequent encounter -T408X3S Poisoning by lysergide [LSD], assault, sequela -T408X4A Poisoning by lysergide [LSD], undetermined, initial encounter -T408X4D Poisoning by lysergide [LSD], undetermined, subsequent encounter -T408X4S Poisoning by lysergide [LSD], undetermined, sequela -T40901A Poisoning by unspecified psychodysleptics [hallucinogens], accidental (unintentional), initial encounter -T40901D Poisoning by unspecified psychodysleptics [hallucinogens], accidental (unintentional), subsequent encounter -T40901S Poisoning by unspecified psychodysleptics [hallucinogens], accidental (unintentional), sequela -T40902A Poisoning by unspecified psychodysleptics [hallucinogens], intentional self-harm, initial encounter -T40902D Poisoning by unspecified psychodysleptics [hallucinogens], intentional self-harm, subsequent encounter -T40902S Poisoning by unspecified psychodysleptics [hallucinogens], intentional self-harm, sequela -T40903A Poisoning by unspecified psychodysleptics [hallucinogens], assault, initial encounter -T40903D Poisoning by unspecified psychodysleptics [hallucinogens], assault, subsequent encounter -T40903S Poisoning by unspecified psychodysleptics [hallucinogens], assault, sequela -T40904A Poisoning by unspecified psychodysleptics [hallucinogens], undetermined, initial encounter -T40904D Poisoning by unspecified psychodysleptics [hallucinogens], undetermined, subsequent encounter -T40904S Poisoning by unspecified psychodysleptics [hallucinogens], undetermined, sequela -T40905A Adverse effect of unspecified psychodysleptics [hallucinogens], initial encounter -T40905D Adverse effect of unspecified psychodysleptics [hallucinogens], subsequent encounter -T40905S Adverse effect of unspecified psychodysleptics [hallucinogens], sequela -T40906A Underdosing of unspecified psychodysleptics, initial encounter -T40906D Underdosing of unspecified psychodysleptics, subsequent encounter -T40906S Underdosing of unspecified psychodysleptics, sequela -T40991A Poisoning by other psychodysleptics [hallucinogens], accidental (unintentional), initial encounter -T40991D Poisoning by other psychodysleptics [hallucinogens], accidental (unintentional), subsequent encounter -T40991S Poisoning by other psychodysleptics [hallucinogens], accidental (unintentional), sequela -T40992A Poisoning by other psychodysleptics [hallucinogens], intentional self-harm, initial encounter -T40992D Poisoning by other psychodysleptics [hallucinogens], intentional self-harm, subsequent encounter -T40992S Poisoning by other psychodysleptics [hallucinogens], intentional self-harm, sequela -T40993A Poisoning by other psychodysleptics [hallucinogens], assault, initial encounter -T40993D Poisoning by other psychodysleptics [hallucinogens], assault, subsequent encounter -T40993S Poisoning by other psychodysleptics [hallucinogens], assault, sequela -T40994A Poisoning by other psychodysleptics [hallucinogens], undetermined, initial encounter -T40994D Poisoning by other psychodysleptics [hallucinogens], undetermined, subsequent encounter -T40994S Poisoning by other psychodysleptics [hallucinogens], undetermined, sequela -T40995A Adverse effect of other psychodysleptics [hallucinogens], initial encounter -T40995D Adverse effect of other psychodysleptics [hallucinogens], subsequent encounter -T40995S Adverse effect of other psychodysleptics [hallucinogens], sequela -T40996A Underdosing of other psychodysleptics, initial encounter -T40996D Underdosing of other psychodysleptics, subsequent encounter -T40996S Underdosing of other psychodysleptics, sequela -T410X1A Poisoning by inhaled anesthetics, accidental (unintentional), initial encounter -T410X1D Poisoning by inhaled anesthetics, accidental (unintentional), subsequent encounter -T410X1S Poisoning by inhaled anesthetics, accidental (unintentional), sequela -T410X2A Poisoning by inhaled anesthetics, intentional self-harm, initial encounter -T410X2D Poisoning by inhaled anesthetics, intentional self-harm, subsequent encounter -T410X2S Poisoning by inhaled anesthetics, intentional self-harm, sequela -T410X3A Poisoning by inhaled anesthetics, assault, initial encounter -T410X3D Poisoning by inhaled anesthetics, assault, subsequent encounter -T410X3S Poisoning by inhaled anesthetics, assault, sequela -T410X4A Poisoning by inhaled anesthetics, undetermined, initial encounter -T410X4D Poisoning by inhaled anesthetics, undetermined, subsequent encounter -T410X4S Poisoning by inhaled anesthetics, undetermined, sequela -T410X5A Adverse effect of inhaled anesthetics, initial encounter -T410X5D Adverse effect of inhaled anesthetics, subsequent encounter -T410X5S Adverse effect of inhaled anesthetics, sequela -T410X6A Underdosing of inhaled anesthetics, initial encounter -T410X6D Underdosing of inhaled anesthetics, subsequent encounter -T410X6S Underdosing of inhaled anesthetics, sequela -T411X1A Poisoning by intravenous anesthetics, accidental (unintentional), initial encounter -T411X1D Poisoning by intravenous anesthetics, accidental (unintentional), subsequent encounter -T411X1S Poisoning by intravenous anesthetics, accidental (unintentional), sequela -T411X2A Poisoning by intravenous anesthetics, intentional self-harm, initial encounter -T411X2D Poisoning by intravenous anesthetics, intentional self-harm, subsequent encounter -T411X2S Poisoning by intravenous anesthetics, intentional self-harm, sequela -T411X3A Poisoning by intravenous anesthetics, assault, initial encounter -T411X3D Poisoning by intravenous anesthetics, assault, subsequent encounter -T411X3S Poisoning by intravenous anesthetics, assault, sequela -T411X4A Poisoning by intravenous anesthetics, undetermined, initial encounter -T411X4D Poisoning by intravenous anesthetics, undetermined, subsequent encounter -T411X4S Poisoning by intravenous anesthetics, undetermined, sequela -T411X5A Adverse effect of intravenous anesthetics, initial encounter -T411X5D Adverse effect of intravenous anesthetics, subsequent encounter -T411X5S Adverse effect of intravenous anesthetics, sequela -T411X6A Underdosing of intravenous anesthetics, initial encounter -T411X6D Underdosing of intravenous anesthetics, subsequent encounter -T411X6S Underdosing of intravenous anesthetics, sequela -T41201A Poisoning by unspecified general anesthetics, accidental (unintentional), initial encounter -T41201D Poisoning by unspecified general anesthetics, accidental (unintentional), subsequent encounter -T41201S Poisoning by unspecified general anesthetics, accidental (unintentional), sequela -T41202A Poisoning by unspecified general anesthetics, intentional self-harm, initial encounter -T41202D Poisoning by unspecified general anesthetics, intentional self-harm, subsequent encounter -T41202S Poisoning by unspecified general anesthetics, intentional self-harm, sequela -T41203A Poisoning by unspecified general anesthetics, assault, initial encounter -T41203D Poisoning by unspecified general anesthetics, assault, subsequent encounter -T41203S Poisoning by unspecified general anesthetics, assault, sequela -T41204A Poisoning by unspecified general anesthetics, undetermined, initial encounter -T41204D Poisoning by unspecified general anesthetics, undetermined, subsequent encounter -T41204S Poisoning by unspecified general anesthetics, undetermined, sequela -T41205A Adverse effect of unspecified general anesthetics, initial encounter -T41205D Adverse effect of unspecified general anesthetics, subsequent encounter -T41205S Adverse effect of unspecified general anesthetics, sequela -T41206A Underdosing of unspecified general anesthetics, initial encounter -T41206D Underdosing of unspecified general anesthetics, subsequent encounter -T41206S Underdosing of unspecified general anesthetics, sequela -T41291A Poisoning by other general anesthetics, accidental (unintentional), initial encounter -T41291D Poisoning by other general anesthetics, accidental (unintentional), subsequent encounter -T41291S Poisoning by other general anesthetics, accidental (unintentional), sequela -T41292A Poisoning by other general anesthetics, intentional self-harm, initial encounter -T41292D Poisoning by other general anesthetics, intentional self-harm, subsequent encounter -T41292S Poisoning by other general anesthetics, intentional self-harm, sequela -T41293A Poisoning by other general anesthetics, assault, initial encounter -T41293D Poisoning by other general anesthetics, assault, subsequent encounter -T41293S Poisoning by other general anesthetics, assault, sequela -T41294A Poisoning by other general anesthetics, undetermined, initial encounter -T41294D Poisoning by other general anesthetics, undetermined, subsequent encounter -T41294S Poisoning by other general anesthetics, undetermined, sequela -T41295A Adverse effect of other general anesthetics, initial encounter -T41295D Adverse effect of other general anesthetics, subsequent encounter -T41295S Adverse effect of other general anesthetics, sequela -T41296A Underdosing of other general anesthetics, initial encounter -T41296D Underdosing of other general anesthetics, subsequent encounter -T41296S Underdosing of other general anesthetics, sequela -T413X1A Poisoning by local anesthetics, accidental (unintentional), initial encounter -T413X1D Poisoning by local anesthetics, accidental (unintentional), subsequent encounter -T413X1S Poisoning by local anesthetics, accidental (unintentional), sequela -T413X2A Poisoning by local anesthetics, intentional self-harm, initial encounter -T413X2D Poisoning by local anesthetics, intentional self-harm, subsequent encounter -T413X2S Poisoning by local anesthetics, intentional self-harm, sequela -T413X3A Poisoning by local anesthetics, assault, initial encounter -T413X3D Poisoning by local anesthetics, assault, subsequent encounter -T413X3S Poisoning by local anesthetics, assault, sequela -T413X4A Poisoning by local anesthetics, undetermined, initial encounter -T413X4D Poisoning by local anesthetics, undetermined, subsequent encounter -T413X4S Poisoning by local anesthetics, undetermined, sequela -T413X5A Adverse effect of local anesthetics, initial encounter -T413X5D Adverse effect of local anesthetics, subsequent encounter -T413X5S Adverse effect of local anesthetics, sequela -T413X6A Underdosing of local anesthetics, initial encounter -T413X6D Underdosing of local anesthetics, subsequent encounter -T413X6S Underdosing of local anesthetics, sequela -T4141XA Poisoning by unspecified anesthetic, accidental (unintentional), initial encounter -T4141XD Poisoning by unspecified anesthetic, accidental (unintentional), subsequent encounter -T4141XS Poisoning by unspecified anesthetic, accidental (unintentional), sequela -T4142XA Poisoning by unspecified anesthetic, intentional self-harm, initial encounter -T4142XD Poisoning by unspecified anesthetic, intentional self-harm, subsequent encounter -T4142XS Poisoning by unspecified anesthetic, intentional self-harm, sequela -T4143XA Poisoning by unspecified anesthetic, assault, initial encounter -T4143XD Poisoning by unspecified anesthetic, assault, subsequent encounter -T4143XS Poisoning by unspecified anesthetic, assault, sequela -T4144XA Poisoning by unspecified anesthetic, undetermined, initial encounter -T4144XD Poisoning by unspecified anesthetic, undetermined, subsequent encounter -T4144XS Poisoning by unspecified anesthetic, undetermined, sequela -T4145XA Adverse effect of unspecified anesthetic, initial encounter -T4145XD Adverse effect of unspecified anesthetic, subsequent encounter -T4145XS Adverse effect of unspecified anesthetic, sequela -T4146XA Underdosing of unspecified anesthetics, initial encounter -T4146XD Underdosing of unspecified anesthetics, subsequent encounter -T4146XS Underdosing of unspecified anesthetics, sequela -T415X1A Poisoning by therapeutic gases, accidental (unintentional), initial encounter -T415X1D Poisoning by therapeutic gases, accidental (unintentional), subsequent encounter -T415X1S Poisoning by therapeutic gases, accidental (unintentional), sequela -T415X2A Poisoning by therapeutic gases, intentional self-harm, initial encounter -T415X2D Poisoning by therapeutic gases, intentional self-harm, subsequent encounter -T415X2S Poisoning by therapeutic gases, intentional self-harm, sequela -T415X3A Poisoning by therapeutic gases, assault, initial encounter -T415X3D Poisoning by therapeutic gases, assault, subsequent encounter -T415X3S Poisoning by therapeutic gases, assault, sequela -T415X4A Poisoning by therapeutic gases, undetermined, initial encounter -T415X4D Poisoning by therapeutic gases, undetermined, subsequent encounter -T415X4S Poisoning by therapeutic gases, undetermined, sequela -T415X5A Adverse effect of therapeutic gases, initial encounter -T415X5D Adverse effect of therapeutic gases, subsequent encounter -T415X5S Adverse effect of therapeutic gases, sequela -T415X6A Underdosing of therapeutic gases, initial encounter -T415X6D Underdosing of therapeutic gases, subsequent encounter -T415X6S Underdosing of therapeutic gases, sequela -T420X1A Poisoning by hydantoin derivatives, accidental (unintentional), initial encounter -T420X1D Poisoning by hydantoin derivatives, accidental (unintentional), subsequent encounter -T420X1S Poisoning by hydantoin derivatives, accidental (unintentional), sequela -T420X2A Poisoning by hydantoin derivatives, intentional self-harm, initial encounter -T420X2D Poisoning by hydantoin derivatives, intentional self-harm, subsequent encounter -T420X2S Poisoning by hydantoin derivatives, intentional self-harm, sequela -T420X3A Poisoning by hydantoin derivatives, assault, initial encounter -T420X3D Poisoning by hydantoin derivatives, assault, subsequent encounter -T420X3S Poisoning by hydantoin derivatives, assault, sequela -T420X4A Poisoning by hydantoin derivatives, undetermined, initial encounter -T420X4D Poisoning by hydantoin derivatives, undetermined, subsequent encounter -T420X4S Poisoning by hydantoin derivatives, undetermined, sequela -T420X5A Adverse effect of hydantoin derivatives, initial encounter -T420X5D Adverse effect of hydantoin derivatives, subsequent encounter -T420X5S Adverse effect of hydantoin derivatives, sequela -T420X6A Underdosing of hydantoin derivatives, initial encounter -T420X6D Underdosing of hydantoin derivatives, subsequent encounter -T420X6S Underdosing of hydantoin derivatives, sequela -T421X1A Poisoning by iminostilbenes, accidental (unintentional), initial encounter -T421X1D Poisoning by iminostilbenes, accidental (unintentional), subsequent encounter -T421X1S Poisoning by iminostilbenes, accidental (unintentional), sequela -T421X2A Poisoning by iminostilbenes, intentional self-harm, initial encounter -T421X2D Poisoning by iminostilbenes, intentional self-harm, subsequent encounter -T421X2S Poisoning by iminostilbenes, intentional self-harm, sequela -T421X3A Poisoning by iminostilbenes, assault, initial encounter -T421X3D Poisoning by iminostilbenes, assault, subsequent encounter -T421X3S Poisoning by iminostilbenes, assault, sequela -T421X4A Poisoning by iminostilbenes, undetermined, initial encounter -T421X4D Poisoning by iminostilbenes, undetermined, subsequent encounter -T421X4S Poisoning by iminostilbenes, undetermined, sequela -T421X5A Adverse effect of iminostilbenes, initial encounter -T421X5D Adverse effect of iminostilbenes, subsequent encounter -T421X5S Adverse effect of iminostilbenes, sequela -T421X6A Underdosing of iminostilbenes, initial encounter -T421X6D Underdosing of iminostilbenes, subsequent encounter -T421X6S Underdosing of iminostilbenes, sequela -T422X1A Poisoning by succinimides and oxazolidinediones, accidental (unintentional), initial encounter -T422X1D Poisoning by succinimides and oxazolidinediones, accidental (unintentional), subsequent encounter -T422X1S Poisoning by succinimides and oxazolidinediones, accidental (unintentional), sequela -T422X2A Poisoning by succinimides and oxazolidinediones, intentional self-harm, initial encounter -T422X2D Poisoning by succinimides and oxazolidinediones, intentional self-harm, subsequent encounter -T422X2S Poisoning by succinimides and oxazolidinediones, intentional self-harm, sequela -T422X3A Poisoning by succinimides and oxazolidinediones, assault, initial encounter -T422X3D Poisoning by succinimides and oxazolidinediones, assault, subsequent encounter -T422X3S Poisoning by succinimides and oxazolidinediones, assault, sequela -T422X4A Poisoning by succinimides and oxazolidinediones, undetermined, initial encounter -T422X4D Poisoning by succinimides and oxazolidinediones, undetermined, subsequent encounter -T422X4S Poisoning by succinimides and oxazolidinediones, undetermined, sequela -T422X5A Adverse effect of succinimides and oxazolidinediones, initial encounter -T422X5D Adverse effect of succinimides and oxazolidinediones, subsequent encounter -T422X5S Adverse effect of succinimides and oxazolidinediones, sequela -T422X6A Underdosing of succinimides and oxazolidinediones, initial encounter -T422X6D Underdosing of succinimides and oxazolidinediones, subsequent encounter -T422X6S Underdosing of succinimides and oxazolidinediones, sequela -T423X1A Poisoning by barbiturates, accidental (unintentional), initial encounter -T423X1D Poisoning by barbiturates, accidental (unintentional), subsequent encounter -T423X1S Poisoning by barbiturates, accidental (unintentional), sequela -T423X2A Poisoning by barbiturates, intentional self-harm, initial encounter -T423X2D Poisoning by barbiturates, intentional self-harm, subsequent encounter -T423X2S Poisoning by barbiturates, intentional self-harm, sequela -T423X3A Poisoning by barbiturates, assault, initial encounter -T423X3D Poisoning by barbiturates, assault, subsequent encounter -T423X3S Poisoning by barbiturates, assault, sequela -T423X4A Poisoning by barbiturates, undetermined, initial encounter -T423X4D Poisoning by barbiturates, undetermined, subsequent encounter -T423X4S Poisoning by barbiturates, undetermined, sequela -T423X5A Adverse effect of barbiturates, initial encounter -T423X5D Adverse effect of barbiturates, subsequent encounter -T423X5S Adverse effect of barbiturates, sequela -T423X6A Underdosing of barbiturates, initial encounter -T423X6D Underdosing of barbiturates, subsequent encounter -T423X6S Underdosing of barbiturates, sequela -T424X1A Poisoning by benzodiazepines, accidental (unintentional), initial encounter -T424X1D Poisoning by benzodiazepines, accidental (unintentional), subsequent encounter -T424X1S Poisoning by benzodiazepines, accidental (unintentional), sequela -T424X2A Poisoning by benzodiazepines, intentional self-harm, initial encounter -T424X2D Poisoning by benzodiazepines, intentional self-harm, subsequent encounter -T424X2S Poisoning by benzodiazepines, intentional self-harm, sequela -T424X3A Poisoning by benzodiazepines, assault, initial encounter -T424X3D Poisoning by benzodiazepines, assault, subsequent encounter -T424X3S Poisoning by benzodiazepines, assault, sequela -T424X4A Poisoning by benzodiazepines, undetermined, initial encounter -T424X4D Poisoning by benzodiazepines, undetermined, subsequent encounter -T424X4S Poisoning by benzodiazepines, undetermined, sequela -T424X5A Adverse effect of benzodiazepines, initial encounter -T424X5D Adverse effect of benzodiazepines, subsequent encounter -T424X5S Adverse effect of benzodiazepines, sequela -T424X6A Underdosing of benzodiazepines, initial encounter -T424X6D Underdosing of benzodiazepines, subsequent encounter -T424X6S Underdosing of benzodiazepines, sequela -T425X1A Poisoning by mixed antiepileptics, accidental (unintentional), initial encounter -T425X1D Poisoning by mixed antiepileptics, accidental (unintentional), subsequent encounter -T425X1S Poisoning by mixed antiepileptics, accidental (unintentional), sequela -T425X2A Poisoning by mixed antiepileptics, intentional self-harm, initial encounter -T425X2D Poisoning by mixed antiepileptics, intentional self-harm, subsequent encounter -T425X2S Poisoning by mixed antiepileptics, intentional self-harm, sequela -T425X3A Poisoning by mixed antiepileptics, assault, initial encounter -T425X3D Poisoning by mixed antiepileptics, assault, subsequent encounter -T425X3S Poisoning by mixed antiepileptics, assault, sequela -T425X4A Poisoning by mixed antiepileptics, undetermined, initial encounter -T425X4D Poisoning by mixed antiepileptics, undetermined, subsequent encounter -T425X4S Poisoning by mixed antiepileptics, undetermined, sequela -T425X5A Adverse effect of mixed antiepileptics, initial encounter -T425X5D Adverse effect of mixed antiepileptics, subsequent encounter -T425X5S Adverse effect of mixed antiepileptics, sequela -T425X6A Underdosing of mixed antiepileptics, initial encounter -T425X6D Underdosing of mixed antiepileptics, subsequent encounter -T425X6S Underdosing of mixed antiepileptics, sequela -T426X1A Poisoning by other antiepileptic and sedative-hypnotic drugs, accidental (unintentional), initial encounter -T426X1D Poisoning by other antiepileptic and sedative-hypnotic drugs, accidental (unintentional), subsequent encounter -T426X1S Poisoning by other antiepileptic and sedative-hypnotic drugs, accidental (unintentional), sequela -T426X2A Poisoning by other antiepileptic and sedative-hypnotic drugs, intentional self-harm, initial encounter -T426X2D Poisoning by other antiepileptic and sedative-hypnotic drugs, intentional self-harm, subsequent encounter -T426X2S Poisoning by other antiepileptic and sedative-hypnotic drugs, intentional self-harm, sequela -T426X3A Poisoning by other antiepileptic and sedative-hypnotic drugs, assault, initial encounter -T426X3D Poisoning by other antiepileptic and sedative-hypnotic drugs, assault, subsequent encounter -T426X3S Poisoning by other antiepileptic and sedative-hypnotic drugs, assault, sequela -T426X4A Poisoning by other antiepileptic and sedative-hypnotic drugs, undetermined, initial encounter -T426X4D Poisoning by other antiepileptic and sedative-hypnotic drugs, undetermined, subsequent encounter -T426X4S Poisoning by other antiepileptic and sedative-hypnotic drugs, undetermined, sequela -T426X5A Adverse effect of other antiepileptic and sedative-hypnotic drugs, initial encounter -T426X5D Adverse effect of other antiepileptic and sedative-hypnotic drugs, subsequent encounter -T426X5S Adverse effect of other antiepileptic and sedative-hypnotic drugs, sequela -T426X6A Underdosing of other antiepileptic and sedative-hypnotic drugs, initial encounter -T426X6D Underdosing of other antiepileptic and sedative-hypnotic drugs, subsequent encounter -T426X6S Underdosing of other antiepileptic and sedative-hypnotic drugs, sequela -T4271XA Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, accidental (unintentional), initial encounter -T4271XD Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, accidental (unintentional), subsequent encounter -T4271XS Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, accidental (unintentional), sequela -T4272XA Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, intentional self-harm, initial encounter -T4272XD Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, intentional self-harm, subsequent encounter -T4272XS Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, intentional self-harm, sequela -T4273XA Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, assault, initial encounter -T4273XD Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, assault, subsequent encounter -T4273XS Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, assault, sequela -T4274XA Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, undetermined, initial encounter -T4274XD Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, undetermined, subsequent encounter -T4274XS Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, undetermined, sequela -T4275XA Adverse effect of unspecified antiepileptic and sedative-hypnotic drugs, initial encounter -T4275XD Adverse effect of unspecified antiepileptic and sedative-hypnotic drugs, subsequent encounter -T4275XS Adverse effect of unspecified antiepileptic and sedative-hypnotic drugs, sequela -T4276XA Underdosing of unspecified antiepileptic and sedative-hypnotic drugs, initial encounter -T4276XD Underdosing of unspecified antiepileptic and sedative-hypnotic drugs, subsequent encounter -T4276XS Underdosing of unspecified antiepileptic and sedative-hypnotic drugs, sequela -T428X1A Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, accidental (unintentional), initial encounter -T428X1D Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, accidental (unintentional), subsequent encounter -T428X1S Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, accidental (unintentional), sequela -T428X2A Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, intentional self-harm, initial encounter -T428X2D Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, intentional self-harm, subsequent encounter -T428X2S Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, intentional self-harm, sequela -T428X3A Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, assault, initial encounter -T428X3D Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, assault, subsequent encounter -T428X3S Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, assault, sequela -T428X4A Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, undetermined, initial encounter -T428X4D Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, undetermined, subsequent encounter -T428X4S Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, undetermined, sequela -T428X5A Adverse effect of antiparkinsonism drugs and other central muscle-tone depressants, initial encounter -T428X5D Adverse effect of antiparkinsonism drugs and other central muscle-tone depressants, subsequent encounter -T428X5S Adverse effect of antiparkinsonism drugs and other central muscle-tone depressants, sequela -T428X6A Underdosing of antiparkinsonism drugs and other central muscle-tone depressants, initial encounter -T428X6D Underdosing of antiparkinsonism drugs and other central muscle-tone depressants, subsequent encounter -T428X6S Underdosing of antiparkinsonism drugs and other central muscle-tone depressants, sequela -T43011A Poisoning by tricyclic antidepressants, accidental (unintentional), initial encounter -T43011D Poisoning by tricyclic antidepressants, accidental (unintentional), subsequent encounter -T43011S Poisoning by tricyclic antidepressants, accidental (unintentional), sequela -T43012A Poisoning by tricyclic antidepressants, intentional self-harm, initial encounter -T43012D Poisoning by tricyclic antidepressants, intentional self-harm, subsequent encounter -T43012S Poisoning by tricyclic antidepressants, intentional self-harm, sequela -T43013A Poisoning by tricyclic antidepressants, assault, initial encounter -T43013D Poisoning by tricyclic antidepressants, assault, subsequent encounter -T43013S Poisoning by tricyclic antidepressants, assault, sequela -T43014A Poisoning by tricyclic antidepressants, undetermined, initial encounter -T43014D Poisoning by tricyclic antidepressants, undetermined, subsequent encounter -T43014S Poisoning by tricyclic antidepressants, undetermined, sequela -T43015A Adverse effect of tricyclic antidepressants, initial encounter -T43015D Adverse effect of tricyclic antidepressants, subsequent encounter -T43015S Adverse effect of tricyclic antidepressants, sequela -T43016A Underdosing of tricyclic antidepressants, initial encounter -T43016D Underdosing of tricyclic antidepressants, subsequent encounter -T43016S Underdosing of tricyclic antidepressants, sequela -T43021A Poisoning by tetracyclic antidepressants, accidental (unintentional), initial encounter -T43021D Poisoning by tetracyclic antidepressants, accidental (unintentional), subsequent encounter -T43021S Poisoning by tetracyclic antidepressants, accidental (unintentional), sequela -T43022A Poisoning by tetracyclic antidepressants, intentional self-harm, initial encounter -T43022D Poisoning by tetracyclic antidepressants, intentional self-harm, subsequent encounter -T43022S Poisoning by tetracyclic antidepressants, intentional self-harm, sequela -T43023A Poisoning by tetracyclic antidepressants, assault, initial encounter -T43023D Poisoning by tetracyclic antidepressants, assault, subsequent encounter -T43023S Poisoning by tetracyclic antidepressants, assault, sequela -T43024A Poisoning by tetracyclic antidepressants, undetermined, initial encounter -T43024D Poisoning by tetracyclic antidepressants, undetermined, subsequent encounter -T43024S Poisoning by tetracyclic antidepressants, undetermined, sequela -T43025A Adverse effect of tetracyclic antidepressants, initial encounter -T43025D Adverse effect of tetracyclic antidepressants, subsequent encounter -T43025S Adverse effect of tetracyclic antidepressants, sequela -T43026A Underdosing of tetracyclic antidepressants, initial encounter -T43026D Underdosing of tetracyclic antidepressants, subsequent encounter -T43026S Underdosing of tetracyclic antidepressants, sequela -T431X1A Poisoning by monoamine-oxidase-inhibitor antidepressants, accidental (unintentional), initial encounter -T431X1D Poisoning by monoamine-oxidase-inhibitor antidepressants, accidental (unintentional), subsequent encounter -T431X1S Poisoning by monoamine-oxidase-inhibitor antidepressants, accidental (unintentional), sequela -T431X2A Poisoning by monoamine-oxidase-inhibitor antidepressants, intentional self-harm, initial encounter -T431X2D Poisoning by monoamine-oxidase-inhibitor antidepressants, intentional self-harm, subsequent encounter -T431X2S Poisoning by monoamine-oxidase-inhibitor antidepressants, intentional self-harm, sequela -T431X3A Poisoning by monoamine-oxidase-inhibitor antidepressants, assault, initial encounter -T431X3D Poisoning by monoamine-oxidase-inhibitor antidepressants, assault, subsequent encounter -T431X3S Poisoning by monoamine-oxidase-inhibitor antidepressants, assault, sequela -T431X4A Poisoning by monoamine-oxidase-inhibitor antidepressants, undetermined, initial encounter -T431X4D Poisoning by monoamine-oxidase-inhibitor antidepressants, undetermined, subsequent encounter -T431X4S Poisoning by monoamine-oxidase-inhibitor antidepressants, undetermined, sequela -T431X5A Adverse effect of monoamine-oxidase-inhibitor antidepressants, initial encounter -T431X5D Adverse effect of monoamine-oxidase-inhibitor antidepressants, subsequent encounter -T431X5S Adverse effect of monoamine-oxidase-inhibitor antidepressants, sequela -T431X6A Underdosing of monoamine-oxidase-inhibitor antidepressants, initial encounter -T431X6D Underdosing of monoamine-oxidase-inhibitor antidepressants, subsequent encounter -T431X6S Underdosing of monoamine-oxidase-inhibitor antidepressants, sequela -T43201A Poisoning by unspecified antidepressants, accidental (unintentional), initial encounter -T43201D Poisoning by unspecified antidepressants, accidental (unintentional), subsequent encounter -T43201S Poisoning by unspecified antidepressants, accidental (unintentional), sequela -T43202A Poisoning by unspecified antidepressants, intentional self-harm, initial encounter -T43202D Poisoning by unspecified antidepressants, intentional self-harm, subsequent encounter -T43202S Poisoning by unspecified antidepressants, intentional self-harm, sequela -T43203A Poisoning by unspecified antidepressants, assault, initial encounter -T43203D Poisoning by unspecified antidepressants, assault, subsequent encounter -T43203S Poisoning by unspecified antidepressants, assault, sequela -T43204A Poisoning by unspecified antidepressants, undetermined, initial encounter -T43204D Poisoning by unspecified antidepressants, undetermined, subsequent encounter -T43204S Poisoning by unspecified antidepressants, undetermined, sequela -T43205A Adverse effect of unspecified antidepressants, initial encounter -T43205D Adverse effect of unspecified antidepressants, subsequent encounter -T43205S Adverse effect of unspecified antidepressants, sequela -T43206A Underdosing of unspecified antidepressants, initial encounter -T43206D Underdosing of unspecified antidepressants, subsequent encounter -T43206S Underdosing of unspecified antidepressants, sequela -T43211A Poisoning by selective serotonin and norepinephrine reuptake inhibitors, accidental (unintentional), initial encounter -T43211D Poisoning by selective serotonin and norepinephrine reuptake inhibitors, accidental (unintentional), subsequent encounter -T43211S Poisoning by selective serotonin and norepinephrine reuptake inhibitors, accidental (unintentional), sequela -T43212A Poisoning by selective serotonin and norepinephrine reuptake inhibitors, intentional self-harm, initial encounter -T43212D Poisoning by selective serotonin and norepinephrine reuptake inhibitors, intentional self-harm, subsequent encounter -T43212S Poisoning by selective serotonin and norepinephrine reuptake inhibitors, intentional self-harm, sequela -T43213A Poisoning by selective serotonin and norepinephrine reuptake inhibitors, assault, initial encounter -T43213D Poisoning by selective serotonin and norepinephrine reuptake inhibitors, assault, subsequent encounter -T43213S Poisoning by selective serotonin and norepinephrine reuptake inhibitors, assault, sequela -T43214A Poisoning by selective serotonin and norepinephrine reuptake inhibitors, undetermined, initial encounter -T43214D Poisoning by selective serotonin and norepinephrine reuptake inhibitors, undetermined, subsequent encounter -T43214S Poisoning by selective serotonin and norepinephrine reuptake inhibitors, undetermined, sequela -T43215A Adverse effect of selective serotonin and norepinephrine reuptake inhibitors, initial encounter -T43215D Adverse effect of selective serotonin and norepinephrine reuptake inhibitors, subsequent encounter -T43215S Adverse effect of selective serotonin and norepinephrine reuptake inhibitors, sequela -T43216A Underdosing of selective serotonin and norepinephrine reuptake inhibitors, initial encounter -T43216D Underdosing of selective serotonin and norepinephrine reuptake inhibitors, subsequent encounter -T43216S Underdosing of selective serotonin and norepinephrine reuptake inhibitors, sequela -T43221A Poisoning by selective serotonin reuptake inhibitors, accidental (unintentional), initial encounter -T43221D Poisoning by selective serotonin reuptake inhibitors, accidental (unintentional), subsequent encounter -T43221S Poisoning by selective serotonin reuptake inhibitors, accidental (unintentional), sequela -T43222A Poisoning by selective serotonin reuptake inhibitors, intentional self-harm, initial encounter -T43222D Poisoning by selective serotonin reuptake inhibitors, intentional self-harm, subsequent encounter -T43222S Poisoning by selective serotonin reuptake inhibitors, intentional self-harm, sequela -T43223A Poisoning by selective serotonin reuptake inhibitors, assault, initial encounter -T43223D Poisoning by selective serotonin reuptake inhibitors, assault, subsequent encounter -T43223S Poisoning by selective serotonin reuptake inhibitors, assault, sequela -T43224A Poisoning by selective serotonin reuptake inhibitors, undetermined, initial encounter -T43224D Poisoning by selective serotonin reuptake inhibitors, undetermined, subsequent encounter -T43224S Poisoning by selective serotonin reuptake inhibitors, undetermined, sequela -T43225A Adverse effect of selective serotonin reuptake inhibitors, initial encounter -T43225D Adverse effect of selective serotonin reuptake inhibitors, subsequent encounter -T43225S Adverse effect of selective serotonin reuptake inhibitors, sequela -T43226A Underdosing of selective serotonin reuptake inhibitors, initial encounter -T43226D Underdosing of selective serotonin reuptake inhibitors, subsequent encounter -T43226S Underdosing of selective serotonin reuptake inhibitors, sequela -T43291A Poisoning by other antidepressants, accidental (unintentional), initial encounter -T43291D Poisoning by other antidepressants, accidental (unintentional), subsequent encounter -T43291S Poisoning by other antidepressants, accidental (unintentional), sequela -T43292A Poisoning by other antidepressants, intentional self-harm, initial encounter -T43292D Poisoning by other antidepressants, intentional self-harm, subsequent encounter -T43292S Poisoning by other antidepressants, intentional self-harm, sequela -T43293A Poisoning by other antidepressants, assault, initial encounter -T43293D Poisoning by other antidepressants, assault, subsequent encounter -T43293S Poisoning by other antidepressants, assault, sequela -T43294A Poisoning by other antidepressants, undetermined, initial encounter -T43294D Poisoning by other antidepressants, undetermined, subsequent encounter -T43294S Poisoning by other antidepressants, undetermined, sequela -T43295A Adverse effect of other antidepressants, initial encounter -T43295D Adverse effect of other antidepressants, subsequent encounter -T43295S Adverse effect of other antidepressants, sequela -T43296A Underdosing of other antidepressants, initial encounter -T43296D Underdosing of other antidepressants, subsequent encounter -T43296S Underdosing of other antidepressants, sequela -T433X1A Poisoning by phenothiazine antipsychotics and neuroleptics, accidental (unintentional), initial encounter -T433X1D Poisoning by phenothiazine antipsychotics and neuroleptics, accidental (unintentional), subsequent encounter -T433X1S Poisoning by phenothiazine antipsychotics and neuroleptics, accidental (unintentional), sequela -T433X2A Poisoning by phenothiazine antipsychotics and neuroleptics, intentional self-harm, initial encounter -T433X2D Poisoning by phenothiazine antipsychotics and neuroleptics, intentional self-harm, subsequent encounter -T433X2S Poisoning by phenothiazine antipsychotics and neuroleptics, intentional self-harm, sequela -T433X3A Poisoning by phenothiazine antipsychotics and neuroleptics, assault, initial encounter -T433X3D Poisoning by phenothiazine antipsychotics and neuroleptics, assault, subsequent encounter -T433X3S Poisoning by phenothiazine antipsychotics and neuroleptics, assault, sequela -T433X4A Poisoning by phenothiazine antipsychotics and neuroleptics, undetermined, initial encounter -T433X4D Poisoning by phenothiazine antipsychotics and neuroleptics, undetermined, subsequent encounter -T433X4S Poisoning by phenothiazine antipsychotics and neuroleptics, undetermined, sequela -T433X5A Adverse effect of phenothiazine antipsychotics and neuroleptics, initial encounter -T433X5D Adverse effect of phenothiazine antipsychotics and neuroleptics, subsequent encounter -T433X5S Adverse effect of phenothiazine antipsychotics and neuroleptics, sequela -T433X6A Underdosing of phenothiazine antipsychotics and neuroleptics, initial encounter -T433X6D Underdosing of phenothiazine antipsychotics and neuroleptics, subsequent encounter -T433X6S Underdosing of phenothiazine antipsychotics and neuroleptics, sequela -T434X1A Poisoning by butyrophenone and thiothixene neuroleptics, accidental (unintentional), initial encounter -T434X1D Poisoning by butyrophenone and thiothixene neuroleptics, accidental (unintentional), subsequent encounter -T434X1S Poisoning by butyrophenone and thiothixene neuroleptics, accidental (unintentional), sequela -T434X2A Poisoning by butyrophenone and thiothixene neuroleptics, intentional self-harm, initial encounter -T434X2D Poisoning by butyrophenone and thiothixene neuroleptics, intentional self-harm, subsequent encounter -T434X2S Poisoning by butyrophenone and thiothixene neuroleptics, intentional self-harm, sequela -T434X3A Poisoning by butyrophenone and thiothixene neuroleptics, assault, initial encounter -T434X3D Poisoning by butyrophenone and thiothixene neuroleptics, assault, subsequent encounter -T434X3S Poisoning by butyrophenone and thiothixene neuroleptics, assault, sequela -T434X4A Poisoning by butyrophenone and thiothixene neuroleptics, undetermined, initial encounter -T434X4D Poisoning by butyrophenone and thiothixene neuroleptics, undetermined, subsequent encounter -T434X4S Poisoning by butyrophenone and thiothixene neuroleptics, undetermined, sequela -T434X5A Adverse effect of butyrophenone and thiothixene neuroleptics, initial encounter -T434X5D Adverse effect of butyrophenone and thiothixene neuroleptics, subsequent encounter -T434X5S Adverse effect of butyrophenone and thiothixene neuroleptics, sequela -T434X6A Underdosing of butyrophenone and thiothixene neuroleptics, initial encounter -T434X6D Underdosing of butyrophenone and thiothixene neuroleptics, subsequent encounter -T434X6S Underdosing of butyrophenone and thiothixene neuroleptics, sequela -T43501A Poisoning by unspecified antipsychotics and neuroleptics, accidental (unintentional), initial encounter -T43501D Poisoning by unspecified antipsychotics and neuroleptics, accidental (unintentional), subsequent encounter -T43501S Poisoning by unspecified antipsychotics and neuroleptics, accidental (unintentional), sequela -T43502A Poisoning by unspecified antipsychotics and neuroleptics, intentional self-harm, initial encounter -T43502D Poisoning by unspecified antipsychotics and neuroleptics, intentional self-harm, subsequent encounter -T43502S Poisoning by unspecified antipsychotics and neuroleptics, intentional self-harm, sequela -T43503A Poisoning by unspecified antipsychotics and neuroleptics, assault, initial encounter -T43503D Poisoning by unspecified antipsychotics and neuroleptics, assault, subsequent encounter -T43503S Poisoning by unspecified antipsychotics and neuroleptics, assault, sequela -T43504A Poisoning by unspecified antipsychotics and neuroleptics, undetermined, initial encounter -T43504D Poisoning by unspecified antipsychotics and neuroleptics, undetermined, subsequent encounter -T43504S Poisoning by unspecified antipsychotics and neuroleptics, undetermined, sequela -T43505A Adverse effect of unspecified antipsychotics and neuroleptics, initial encounter -T43505D Adverse effect of unspecified antipsychotics and neuroleptics, subsequent encounter -T43505S Adverse effect of unspecified antipsychotics and neuroleptics, sequela -T43506A Underdosing of unspecified antipsychotics and neuroleptics, initial encounter -T43506D Underdosing of unspecified antipsychotics and neuroleptics, subsequent encounter -T43506S Underdosing of unspecified antipsychotics and neuroleptics, sequela -T43591A Poisoning by other antipsychotics and neuroleptics, accidental (unintentional), initial encounter -T43591D Poisoning by other antipsychotics and neuroleptics, accidental (unintentional), subsequent encounter -T43591S Poisoning by other antipsychotics and neuroleptics, accidental (unintentional), sequela -T43592A Poisoning by other antipsychotics and neuroleptics, intentional self-harm, initial encounter -T43592D Poisoning by other antipsychotics and neuroleptics, intentional self-harm, subsequent encounter -T43592S Poisoning by other antipsychotics and neuroleptics, intentional self-harm, sequela -T43593A Poisoning by other antipsychotics and neuroleptics, assault, initial encounter -T43593D Poisoning by other antipsychotics and neuroleptics, assault, subsequent encounter -T43593S Poisoning by other antipsychotics and neuroleptics, assault, sequela -T43594A Poisoning by other antipsychotics and neuroleptics, undetermined, initial encounter -T43594D Poisoning by other antipsychotics and neuroleptics, undetermined, subsequent encounter -T43594S Poisoning by other antipsychotics and neuroleptics, undetermined, sequela -T43595A Adverse effect of other antipsychotics and neuroleptics, initial encounter -T43595D Adverse effect of other antipsychotics and neuroleptics, subsequent encounter -T43595S Adverse effect of other antipsychotics and neuroleptics, sequela -T43596A Underdosing of other antipsychotics and neuroleptics, initial encounter -T43596D Underdosing of other antipsychotics and neuroleptics, subsequent encounter -T43596S Underdosing of other antipsychotics and neuroleptics, sequela -T43601A Poisoning by unspecified psychostimulants, accidental (unintentional), initial encounter -T43601D Poisoning by unspecified psychostimulants, accidental (unintentional), subsequent encounter -T43601S Poisoning by unspecified psychostimulants, accidental (unintentional), sequela -T43602A Poisoning by unspecified psychostimulants, intentional self-harm, initial encounter -T43602D Poisoning by unspecified psychostimulants, intentional self-harm, subsequent encounter -T43602S Poisoning by unspecified psychostimulants, intentional self-harm, sequela -T43603A Poisoning by unspecified psychostimulants, assault, initial encounter -T43603D Poisoning by unspecified psychostimulants, assault, subsequent encounter -T43603S Poisoning by unspecified psychostimulants, assault, sequela -T43604A Poisoning by unspecified psychostimulants, undetermined, initial encounter -T43604D Poisoning by unspecified psychostimulants, undetermined, subsequent encounter -T43604S Poisoning by unspecified psychostimulants, undetermined, sequela -T43605A Adverse effect of unspecified psychostimulants, initial encounter -T43605D Adverse effect of unspecified psychostimulants, subsequent encounter -T43605S Adverse effect of unspecified psychostimulants, sequela -T43606A Underdosing of unspecified psychostimulants, initial encounter -T43606D Underdosing of unspecified psychostimulants, subsequent encounter -T43606S Underdosing of unspecified psychostimulants, sequela -T43611A Poisoning by caffeine, accidental (unintentional), initial encounter -T43611D Poisoning by caffeine, accidental (unintentional), subsequent encounter -T43611S Poisoning by caffeine, accidental (unintentional), sequela -T43612A Poisoning by caffeine, intentional self-harm, initial encounter -T43612D Poisoning by caffeine, intentional self-harm, subsequent encounter -T43612S Poisoning by caffeine, intentional self-harm, sequela -T43613A Poisoning by caffeine, assault, initial encounter -T43613D Poisoning by caffeine, assault, subsequent encounter -T43613S Poisoning by caffeine, assault, sequela -T43614A Poisoning by caffeine, undetermined, initial encounter -T43614D Poisoning by caffeine, undetermined, subsequent encounter -T43614S Poisoning by caffeine, undetermined, sequela -T43615A Adverse effect of caffeine, initial encounter -T43615D Adverse effect of caffeine, subsequent encounter -T43615S Adverse effect of caffeine, sequela -T43616A Underdosing of caffeine, initial encounter -T43616D Underdosing of caffeine, subsequent encounter -T43616S Underdosing of caffeine, sequela -T43621A Poisoning by amphetamines, accidental (unintentional), initial encounter -T43621D Poisoning by amphetamines, accidental (unintentional), subsequent encounter -T43621S Poisoning by amphetamines, accidental (unintentional), sequela -T43622A Poisoning by amphetamines, intentional self-harm, initial encounter -T43622D Poisoning by amphetamines, intentional self-harm, subsequent encounter -T43622S Poisoning by amphetamines, intentional self-harm, sequela -T43623A Poisoning by amphetamines, assault, initial encounter -T43623D Poisoning by amphetamines, assault, subsequent encounter -T43623S Poisoning by amphetamines, assault, sequela -T43624A Poisoning by amphetamines, undetermined, initial encounter -T43624D Poisoning by amphetamines, undetermined, subsequent encounter -T43624S Poisoning by amphetamines, undetermined, sequela -T43625A Adverse effect of amphetamines, initial encounter -T43625D Adverse effect of amphetamines, subsequent encounter -T43625S Adverse effect of amphetamines, sequela -T43626A Underdosing of amphetamines, initial encounter -T43626D Underdosing of amphetamines, subsequent encounter -T43626S Underdosing of amphetamines, sequela -T43631A Poisoning by methylphenidate, accidental (unintentional), initial encounter -T43631D Poisoning by methylphenidate, accidental (unintentional), subsequent encounter -T43631S Poisoning by methylphenidate, accidental (unintentional), sequela -T43632A Poisoning by methylphenidate, intentional self-harm, initial encounter -T43632D Poisoning by methylphenidate, intentional self-harm, subsequent encounter -T43632S Poisoning by methylphenidate, intentional self-harm, sequela -T43633A Poisoning by methylphenidate, assault, initial encounter -T43633D Poisoning by methylphenidate, assault, subsequent encounter -T43633S Poisoning by methylphenidate, assault, sequela -T43634A Poisoning by methylphenidate, undetermined, initial encounter -T43634D Poisoning by methylphenidate, undetermined, subsequent encounter -T43634S Poisoning by methylphenidate, undetermined, sequela -T43635A Adverse effect of methylphenidate, initial encounter -T43635D Adverse effect of methylphenidate, subsequent encounter -T43635S Adverse effect of methylphenidate, sequela -T43636A Underdosing of methylphenidate, initial encounter -T43636D Underdosing of methylphenidate, subsequent encounter -T43636S Underdosing of methylphenidate, sequela -T43691A Poisoning by other psychostimulants, accidental (unintentional), initial encounter -T43691D Poisoning by other psychostimulants, accidental (unintentional), subsequent encounter -T43691S Poisoning by other psychostimulants, accidental (unintentional), sequela -T43692A Poisoning by other psychostimulants, intentional self-harm, initial encounter -T43692D Poisoning by other psychostimulants, intentional self-harm, subsequent encounter -T43692S Poisoning by other psychostimulants, intentional self-harm, sequela -T43693A Poisoning by other psychostimulants, assault, initial encounter -T43693D Poisoning by other psychostimulants, assault, subsequent encounter -T43693S Poisoning by other psychostimulants, assault, sequela -T43694A Poisoning by other psychostimulants, undetermined, initial encounter -T43694D Poisoning by other psychostimulants, undetermined, subsequent encounter -T43694S Poisoning by other psychostimulants, undetermined, sequela -T43695A Adverse effect of other psychostimulants, initial encounter -T43695D Adverse effect of other psychostimulants, subsequent encounter -T43695S Adverse effect of other psychostimulants, sequela -T43696A Underdosing of other psychostimulants, initial encounter -T43696D Underdosing of other psychostimulants, subsequent encounter -T43696S Underdosing of other psychostimulants, sequela -T438X1A Poisoning by other psychotropic drugs, accidental (unintentional), initial encounter -T438X1D Poisoning by other psychotropic drugs, accidental (unintentional), subsequent encounter -T438X1S Poisoning by other psychotropic drugs, accidental (unintentional), sequela -T438X2A Poisoning by other psychotropic drugs, intentional self-harm, initial encounter -T438X2D Poisoning by other psychotropic drugs, intentional self-harm, subsequent encounter -T438X2S Poisoning by other psychotropic drugs, intentional self-harm, sequela -T438X3A Poisoning by other psychotropic drugs, assault, initial encounter -T438X3D Poisoning by other psychotropic drugs, assault, subsequent encounter -T438X3S Poisoning by other psychotropic drugs, assault, sequela -T438X4A Poisoning by other psychotropic drugs, undetermined, initial encounter -T438X4D Poisoning by other psychotropic drugs, undetermined, subsequent encounter -T438X4S Poisoning by other psychotropic drugs, undetermined, sequela -T438X5A Adverse effect of other psychotropic drugs, initial encounter -T438X5D Adverse effect of other psychotropic drugs, subsequent encounter -T438X5S Adverse effect of other psychotropic drugs, sequela -T438X6A Underdosing of other psychotropic drugs, initial encounter -T438X6D Underdosing of other psychotropic drugs, subsequent encounter -T438X6S Underdosing of other psychotropic drugs, sequela -T4391XA Poisoning by unspecified psychotropic drug, accidental (unintentional), initial encounter -T4391XD Poisoning by unspecified psychotropic drug, accidental (unintentional), subsequent encounter -T4391XS Poisoning by unspecified psychotropic drug, accidental (unintentional), sequela -T4392XA Poisoning by unspecified psychotropic drug, intentional self-harm, initial encounter -T4392XD Poisoning by unspecified psychotropic drug, intentional self-harm, subsequent encounter -T4392XS Poisoning by unspecified psychotropic drug, intentional self-harm, sequela -T4393XA Poisoning by unspecified psychotropic drug, assault, initial encounter -T4393XD Poisoning by unspecified psychotropic drug, assault, subsequent encounter -T4393XS Poisoning by unspecified psychotropic drug, assault, sequela -T4394XA Poisoning by unspecified psychotropic drug, undetermined, initial encounter -T4394XD Poisoning by unspecified psychotropic drug, undetermined, subsequent encounter -T4394XS Poisoning by unspecified psychotropic drug, undetermined, sequela -T4395XA Adverse effect of unspecified psychotropic drug, initial encounter -T4395XD Adverse effect of unspecified psychotropic drug, subsequent encounter -T4395XS Adverse effect of unspecified psychotropic drug, sequela -T4396XA Underdosing of unspecified psychotropic drug, initial encounter -T4396XD Underdosing of unspecified psychotropic drug, subsequent encounter -T4396XS Underdosing of unspecified psychotropic drug, sequela -T440X1A Poisoning by anticholinesterase agents, accidental (unintentional), initial encounter -T440X1D Poisoning by anticholinesterase agents, accidental (unintentional), subsequent encounter -T440X1S Poisoning by anticholinesterase agents, accidental (unintentional), sequela -T440X2A Poisoning by anticholinesterase agents, intentional self-harm, initial encounter -T440X2D Poisoning by anticholinesterase agents, intentional self-harm, subsequent encounter -T440X2S Poisoning by anticholinesterase agents, intentional self-harm, sequela -T440X3A Poisoning by anticholinesterase agents, assault, initial encounter -T440X3D Poisoning by anticholinesterase agents, assault, subsequent encounter -T440X3S Poisoning by anticholinesterase agents, assault, sequela -T440X4A Poisoning by anticholinesterase agents, undetermined, initial encounter -T440X4D Poisoning by anticholinesterase agents, undetermined, subsequent encounter -T440X4S Poisoning by anticholinesterase agents, undetermined, sequela -T440X5A Adverse effect of anticholinesterase agents, initial encounter -T440X5D Adverse effect of anticholinesterase agents, subsequent encounter -T440X5S Adverse effect of anticholinesterase agents, sequela -T440X6A Underdosing of anticholinesterase agents, initial encounter -T440X6D Underdosing of anticholinesterase agents, subsequent encounter -T440X6S Underdosing of anticholinesterase agents, sequela -T441X1A Poisoning by other parasympathomimetics [cholinergics], accidental (unintentional), initial encounter -T441X1D Poisoning by other parasympathomimetics [cholinergics], accidental (unintentional), subsequent encounter -T441X1S Poisoning by other parasympathomimetics [cholinergics], accidental (unintentional), sequela -T441X2A Poisoning by other parasympathomimetics [cholinergics], intentional self-harm, initial encounter -T441X2D Poisoning by other parasympathomimetics [cholinergics], intentional self-harm, subsequent encounter -T441X2S Poisoning by other parasympathomimetics [cholinergics], intentional self-harm, sequela -T441X3A Poisoning by other parasympathomimetics [cholinergics], assault, initial encounter -T441X3D Poisoning by other parasympathomimetics [cholinergics], assault, subsequent encounter -T441X3S Poisoning by other parasympathomimetics [cholinergics], assault, sequela -T441X4A Poisoning by other parasympathomimetics [cholinergics], undetermined, initial encounter -T441X4D Poisoning by other parasympathomimetics [cholinergics], undetermined, subsequent encounter -T441X4S Poisoning by other parasympathomimetics [cholinergics], undetermined, sequela -T441X5A Adverse effect of other parasympathomimetics [cholinergics], initial encounter -T441X5D Adverse effect of other parasympathomimetics [cholinergics], subsequent encounter -T441X5S Adverse effect of other parasympathomimetics [cholinergics], sequela -T441X6A Underdosing of other parasympathomimetics, initial encounter -T441X6D Underdosing of other parasympathomimetics, subsequent encounter -T441X6S Underdosing of other parasympathomimetics, sequela -T442X1A Poisoning by ganglionic blocking drugs, accidental (unintentional), initial encounter -T442X1D Poisoning by ganglionic blocking drugs, accidental (unintentional), subsequent encounter -T442X1S Poisoning by ganglionic blocking drugs, accidental (unintentional), sequela -T442X2A Poisoning by ganglionic blocking drugs, intentional self-harm, initial encounter -T442X2D Poisoning by ganglionic blocking drugs, intentional self-harm, subsequent encounter -T442X2S Poisoning by ganglionic blocking drugs, intentional self-harm, sequela -T442X3A Poisoning by ganglionic blocking drugs, assault, initial encounter -T442X3D Poisoning by ganglionic blocking drugs, assault, subsequent encounter -T442X3S Poisoning by ganglionic blocking drugs, assault, sequela -T442X4A Poisoning by ganglionic blocking drugs, undetermined, initial encounter -T442X4D Poisoning by ganglionic blocking drugs, undetermined, subsequent encounter -T442X4S Poisoning by ganglionic blocking drugs, undetermined, sequela -T442X5A Adverse effect of ganglionic blocking drugs, initial encounter -T442X5D Adverse effect of ganglionic blocking drugs, subsequent encounter -T442X5S Adverse effect of ganglionic blocking drugs, sequela -T442X6A Underdosing of ganglionic blocking drugs, initial encounter -T442X6D Underdosing of ganglionic blocking drugs, subsequent encounter -T442X6S Underdosing of ganglionic blocking drugs, sequela -T443X1A Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, accidental (unintentional), initial encounter -T443X1D Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, accidental (unintentional), subsequent encounter -T443X1S Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, accidental (unintentional), sequela -T443X2A Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, intentional self-harm, initial encounter -T443X2D Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, intentional self-harm, subsequent encounter -T443X2S Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, intentional self-harm, sequela -T443X3A Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, assault, initial encounter -T443X3D Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, assault, subsequent encounter -T443X3S Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, assault, sequela -T443X4A Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, undetermined, initial encounter -T443X4D Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, undetermined, subsequent encounter -T443X4S Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, undetermined, sequela -T443X5A Adverse effect of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, initial encounter -T443X5D Adverse effect of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, subsequent encounter -T443X5S Adverse effect of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, sequela -T443X6A Underdosing of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, initial encounter -T443X6D Underdosing of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, subsequent encounter -T443X6S Underdosing of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, sequela -T444X1A Poisoning by predominantly alpha-adrenoreceptor agonists, accidental (unintentional), initial encounter -T444X1D Poisoning by predominantly alpha-adrenoreceptor agonists, accidental (unintentional), subsequent encounter -T444X1S Poisoning by predominantly alpha-adrenoreceptor agonists, accidental (unintentional), sequela -T444X2A Poisoning by predominantly alpha-adrenoreceptor agonists, intentional self-harm, initial encounter -T444X2D Poisoning by predominantly alpha-adrenoreceptor agonists, intentional self-harm, subsequent encounter -T444X2S Poisoning by predominantly alpha-adrenoreceptor agonists, intentional self-harm, sequela -T444X3A Poisoning by predominantly alpha-adrenoreceptor agonists, assault, initial encounter -T444X3D Poisoning by predominantly alpha-adrenoreceptor agonists, assault, subsequent encounter -T444X3S Poisoning by predominantly alpha-adrenoreceptor agonists, assault, sequela -T444X4A Poisoning by predominantly alpha-adrenoreceptor agonists, undetermined, initial encounter -T444X4D Poisoning by predominantly alpha-adrenoreceptor agonists, undetermined, subsequent encounter -T444X4S Poisoning by predominantly alpha-adrenoreceptor agonists, undetermined, sequela -T444X5A Adverse effect of predominantly alpha-adrenoreceptor agonists, initial encounter -T444X5D Adverse effect of predominantly alpha-adrenoreceptor agonists, subsequent encounter -T444X5S Adverse effect of predominantly alpha-adrenoreceptor agonists, sequela -T444X6A Underdosing of predominantly alpha-adrenoreceptor agonists, initial encounter -T444X6D Underdosing of predominantly alpha-adrenoreceptor agonists, subsequent encounter -T444X6S Underdosing of predominantly alpha-adrenoreceptor agonists, sequela -T445X1A Poisoning by predominantly beta-adrenoreceptor agonists, accidental (unintentional), initial encounter -T445X1D Poisoning by predominantly beta-adrenoreceptor agonists, accidental (unintentional), subsequent encounter -T445X1S Poisoning by predominantly beta-adrenoreceptor agonists, accidental (unintentional), sequela -T445X2A Poisoning by predominantly beta-adrenoreceptor agonists, intentional self-harm, initial encounter -T445X2D Poisoning by predominantly beta-adrenoreceptor agonists, intentional self-harm, subsequent encounter -T445X2S Poisoning by predominantly beta-adrenoreceptor agonists, intentional self-harm, sequela -T445X3A Poisoning by predominantly beta-adrenoreceptor agonists, assault, initial encounter -T445X3D Poisoning by predominantly beta-adrenoreceptor agonists, assault, subsequent encounter -T445X3S Poisoning by predominantly beta-adrenoreceptor agonists, assault, sequela -T445X4A Poisoning by predominantly beta-adrenoreceptor agonists, undetermined, initial encounter -T445X4D Poisoning by predominantly beta-adrenoreceptor agonists, undetermined, subsequent encounter -T445X4S Poisoning by predominantly beta-adrenoreceptor agonists, undetermined, sequela -T445X5A Adverse effect of predominantly beta-adrenoreceptor agonists, initial encounter -T445X5D Adverse effect of predominantly beta-adrenoreceptor agonists, subsequent encounter -T445X5S Adverse effect of predominantly beta-adrenoreceptor agonists, sequela -T445X6A Underdosing of predominantly beta-adrenoreceptor agonists, initial encounter -T445X6D Underdosing of predominantly beta-adrenoreceptor agonists, subsequent encounter -T445X6S Underdosing of predominantly beta-adrenoreceptor agonists, sequela -T446X1A Poisoning by alpha-adrenoreceptor antagonists, accidental (unintentional), initial encounter -T446X1D Poisoning by alpha-adrenoreceptor antagonists, accidental (unintentional), subsequent encounter -T446X1S Poisoning by alpha-adrenoreceptor antagonists, accidental (unintentional), sequela -T446X2A Poisoning by alpha-adrenoreceptor antagonists, intentional self-harm, initial encounter -T446X2D Poisoning by alpha-adrenoreceptor antagonists, intentional self-harm, subsequent encounter -T446X2S Poisoning by alpha-adrenoreceptor antagonists, intentional self-harm, sequela -T446X3A Poisoning by alpha-adrenoreceptor antagonists, assault, initial encounter -T446X3D Poisoning by alpha-adrenoreceptor antagonists, assault, subsequent encounter -T446X3S Poisoning by alpha-adrenoreceptor antagonists, assault, sequela -T446X4A Poisoning by alpha-adrenoreceptor antagonists, undetermined, initial encounter -T446X4D Poisoning by alpha-adrenoreceptor antagonists, undetermined, subsequent encounter -T446X4S Poisoning by alpha-adrenoreceptor antagonists, undetermined, sequela -T446X5A Adverse effect of alpha-adrenoreceptor antagonists, initial encounter -T446X5D Adverse effect of alpha-adrenoreceptor antagonists, subsequent encounter -T446X5S Adverse effect of alpha-adrenoreceptor antagonists, sequela -T446X6A Underdosing of alpha-adrenoreceptor antagonists, initial encounter -T446X6D Underdosing of alpha-adrenoreceptor antagonists, subsequent encounter -T446X6S Underdosing of alpha-adrenoreceptor antagonists, sequela -T447X1A Poisoning by beta-adrenoreceptor antagonists, accidental (unintentional), initial encounter -T447X1D Poisoning by beta-adrenoreceptor antagonists, accidental (unintentional), subsequent encounter -T447X1S Poisoning by beta-adrenoreceptor antagonists, accidental (unintentional), sequela -T447X2A Poisoning by beta-adrenoreceptor antagonists, intentional self-harm, initial encounter -T447X2D Poisoning by beta-adrenoreceptor antagonists, intentional self-harm, subsequent encounter -T447X2S Poisoning by beta-adrenoreceptor antagonists, intentional self-harm, sequela -T447X3A Poisoning by beta-adrenoreceptor antagonists, assault, initial encounter -T447X3D Poisoning by beta-adrenoreceptor antagonists, assault, subsequent encounter -T447X3S Poisoning by beta-adrenoreceptor antagonists, assault, sequela -T447X4A Poisoning by beta-adrenoreceptor antagonists, undetermined, initial encounter -T447X4D Poisoning by beta-adrenoreceptor antagonists, undetermined, subsequent encounter -T447X4S Poisoning by beta-adrenoreceptor antagonists, undetermined, sequela -T447X5A Adverse effect of beta-adrenoreceptor antagonists, initial encounter -T447X5D Adverse effect of beta-adrenoreceptor antagonists, subsequent encounter -T447X5S Adverse effect of beta-adrenoreceptor antagonists, sequela -T447X6A Underdosing of beta-adrenoreceptor antagonists, initial encounter -T447X6D Underdosing of beta-adrenoreceptor antagonists, subsequent encounter -T447X6S Underdosing of beta-adrenoreceptor antagonists, sequela -T448X1A Poisoning by centrally-acting and adrenergic-neuron-blocking agents, accidental (unintentional), initial encounter -T448X1D Poisoning by centrally-acting and adrenergic-neuron-blocking agents, accidental (unintentional), subsequent encounter -T448X1S Poisoning by centrally-acting and adrenergic-neuron-blocking agents, accidental (unintentional), sequela -T448X2A Poisoning by centrally-acting and adrenergic-neuron-blocking agents, intentional self-harm, initial encounter -T448X2D Poisoning by centrally-acting and adrenergic-neuron-blocking agents, intentional self-harm, subsequent encounter -T448X2S Poisoning by centrally-acting and adrenergic-neuron-blocking agents, intentional self-harm, sequela -T448X3A Poisoning by centrally-acting and adrenergic-neuron-blocking agents, assault, initial encounter -T448X3D Poisoning by centrally-acting and adrenergic-neuron-blocking agents, assault, subsequent encounter -T448X3S Poisoning by centrally-acting and adrenergic-neuron-blocking agents, assault, sequela -T448X4A Poisoning by centrally-acting and adrenergic-neuron-blocking agents, undetermined, initial encounter -T448X4D Poisoning by centrally-acting and adrenergic-neuron-blocking agents, undetermined, subsequent encounter -T448X4S Poisoning by centrally-acting and adrenergic-neuron-blocking agents, undetermined, sequela -T448X5A Adverse effect of centrally-acting and adrenergic-neuron-blocking agents, initial encounter -T448X5D Adverse effect of centrally-acting and adrenergic-neuron-blocking agents, subsequent encounter -T448X5S Adverse effect of centrally-acting and adrenergic-neuron-blocking agents, sequela -T448X6A Underdosing of centrally-acting and adrenergic-neuron-blocking agents, initial encounter -T448X6D Underdosing of centrally-acting and adrenergic-neuron-blocking agents, subsequent encounter -T448X6S Underdosing of centrally-acting and adrenergic-neuron-blocking agents, sequela -T44901A Poisoning by unspecified drugs primarily affecting the autonomic nervous system, accidental (unintentional), initial encounter -T44901D Poisoning by unspecified drugs primarily affecting the autonomic nervous system, accidental (unintentional), subsequent encounter -T44901S Poisoning by unspecified drugs primarily affecting the autonomic nervous system, accidental (unintentional), sequela -T44902A Poisoning by unspecified drugs primarily affecting the autonomic nervous system, intentional self-harm, initial encounter -T44902D Poisoning by unspecified drugs primarily affecting the autonomic nervous system, intentional self-harm, subsequent encounter -T44902S Poisoning by unspecified drugs primarily affecting the autonomic nervous system, intentional self-harm, sequela -T44903A Poisoning by unspecified drugs primarily affecting the autonomic nervous system, assault, initial encounter -T44903D Poisoning by unspecified drugs primarily affecting the autonomic nervous system, assault, subsequent encounter -T44903S Poisoning by unspecified drugs primarily affecting the autonomic nervous system, assault, sequela -T44904A Poisoning by unspecified drugs primarily affecting the autonomic nervous system, undetermined, initial encounter -T44904D Poisoning by unspecified drugs primarily affecting the autonomic nervous system, undetermined, subsequent encounter -T44904S Poisoning by unspecified drugs primarily affecting the autonomic nervous system, undetermined, sequela -T44905A Adverse effect of unspecified drugs primarily affecting the autonomic nervous system, initial encounter -T44905D Adverse effect of unspecified drugs primarily affecting the autonomic nervous system, subsequent encounter -T44905S Adverse effect of unspecified drugs primarily affecting the autonomic nervous system, sequela -T44906A Underdosing of unspecified drugs primarily affecting the autonomic nervous system, initial encounter -T44906D Underdosing of unspecified drugs primarily affecting the autonomic nervous system, subsequent encounter -T44906S Underdosing of unspecified drugs primarily affecting the autonomic nervous system, sequela -T44991A Poisoning by other drug primarily affecting the autonomic nervous system, accidental (unintentional), initial encounter -T44991D Poisoning by other drug primarily affecting the autonomic nervous system, accidental (unintentional), subsequent encounter -T44991S Poisoning by other drug primarily affecting the autonomic nervous system, accidental (unintentional), sequela -T44992A Poisoning by other drug primarily affecting the autonomic nervous system, intentional self-harm, initial encounter -T44992D Poisoning by other drug primarily affecting the autonomic nervous system, intentional self-harm, subsequent encounter -T44992S Poisoning by other drug primarily affecting the autonomic nervous system, intentional self-harm, sequela -T44993A Poisoning by other drug primarily affecting the autonomic nervous system, assault, initial encounter -T44993D Poisoning by other drug primarily affecting the autonomic nervous system, assault, subsequent encounter -T44993S Poisoning by other drug primarily affecting the autonomic nervous system, assault, sequela -T44994A Poisoning by other drug primarily affecting the autonomic nervous system, undetermined, initial encounter -T44994D Poisoning by other drug primarily affecting the autonomic nervous system, undetermined, subsequent encounter -T44994S Poisoning by other drug primarily affecting the autonomic nervous system, undetermined, sequela -T44995A Adverse effect of other drug primarily affecting the autonomic nervous system, initial encounter -T44995D Adverse effect of other drug primarily affecting the autonomic nervous system, subsequent encounter -T44995S Adverse effect of other drug primarily affecting the autonomic nervous system, sequela -T44996A Underdosing of other drug primarily affecting the autonomic nervous system, initial encounter -T44996D Underdosing of other drug primarily affecting the autonomic nervous system, subsequent encounter -T44996S Underdosing of other drug primarily affecting the autonomic nervous system, sequela -T450X1A Poisoning by antiallergic and antiemetic drugs, accidental (unintentional), initial encounter -T450X1D Poisoning by antiallergic and antiemetic drugs, accidental (unintentional), subsequent encounter -T450X1S Poisoning by antiallergic and antiemetic drugs, accidental (unintentional), sequela -T450X2A Poisoning by antiallergic and antiemetic drugs, intentional self-harm, initial encounter -T450X2D Poisoning by antiallergic and antiemetic drugs, intentional self-harm, subsequent encounter -T450X2S Poisoning by antiallergic and antiemetic drugs, intentional self-harm, sequela -T450X3A Poisoning by antiallergic and antiemetic drugs, assault, initial encounter -T450X3D Poisoning by antiallergic and antiemetic drugs, assault, subsequent encounter -T450X3S Poisoning by antiallergic and antiemetic drugs, assault, sequela -T450X4A Poisoning by antiallergic and antiemetic drugs, undetermined, initial encounter -T450X4D Poisoning by antiallergic and antiemetic drugs, undetermined, subsequent encounter -T450X4S Poisoning by antiallergic and antiemetic drugs, undetermined, sequela -T450X5A Adverse effect of antiallergic and antiemetic drugs, initial encounter -T450X5D Adverse effect of antiallergic and antiemetic drugs, subsequent encounter -T450X5S Adverse effect of antiallergic and antiemetic drugs, sequela -T450X6A Underdosing of antiallergic and antiemetic drugs, initial encounter -T450X6D Underdosing of antiallergic and antiemetic drugs, subsequent encounter -T450X6S Underdosing of antiallergic and antiemetic drugs, sequela -T451X1A Poisoning by antineoplastic and immunosuppressive drugs, accidental (unintentional), initial encounter -T451X1D Poisoning by antineoplastic and immunosuppressive drugs, accidental (unintentional), subsequent encounter -T451X1S Poisoning by antineoplastic and immunosuppressive drugs, accidental (unintentional), sequela -T451X2A Poisoning by antineoplastic and immunosuppressive drugs, intentional self-harm, initial encounter -T451X2D Poisoning by antineoplastic and immunosuppressive drugs, intentional self-harm, subsequent encounter -T451X2S Poisoning by antineoplastic and immunosuppressive drugs, intentional self-harm, sequela -T451X3A Poisoning by antineoplastic and immunosuppressive drugs, assault, initial encounter -T451X3D Poisoning by antineoplastic and immunosuppressive drugs, assault, subsequent encounter -T451X3S Poisoning by antineoplastic and immunosuppressive drugs, assault, sequela -T451X4A Poisoning by antineoplastic and immunosuppressive drugs, undetermined, initial encounter -T451X4D Poisoning by antineoplastic and immunosuppressive drugs, undetermined, subsequent encounter -T451X4S Poisoning by antineoplastic and immunosuppressive drugs, undetermined, sequela -T451X5A Adverse effect of antineoplastic and immunosuppressive drugs, initial encounter -T451X5D Adverse effect of antineoplastic and immunosuppressive drugs, subsequent encounter -T451X5S Adverse effect of antineoplastic and immunosuppressive drugs, sequela -T451X6A Underdosing of antineoplastic and immunosuppressive drugs, initial encounter -T451X6D Underdosing of antineoplastic and immunosuppressive drugs, subsequent encounter -T451X6S Underdosing of antineoplastic and immunosuppressive drugs, sequela -T452X1A Poisoning by vitamins, accidental (unintentional), initial encounter -T452X1D Poisoning by vitamins, accidental (unintentional), subsequent encounter -T452X1S Poisoning by vitamins, accidental (unintentional), sequela -T452X2A Poisoning by vitamins, intentional self-harm, initial encounter -T452X2D Poisoning by vitamins, intentional self-harm, subsequent encounter -T452X2S Poisoning by vitamins, intentional self-harm, sequela -T452X3A Poisoning by vitamins, assault, initial encounter -T452X3D Poisoning by vitamins, assault, subsequent encounter -T452X3S Poisoning by vitamins, assault, sequela -T452X4A Poisoning by vitamins, undetermined, initial encounter -T452X4D Poisoning by vitamins, undetermined, subsequent encounter -T452X4S Poisoning by vitamins, undetermined, sequela -T452X5A Adverse effect of vitamins, initial encounter -T452X5D Adverse effect of vitamins, subsequent encounter -T452X5S Adverse effect of vitamins, sequela -T452X6A Underdosing of vitamins, initial encounter -T452X6D Underdosing of vitamins, subsequent encounter -T452X6S Underdosing of vitamins, sequela -T453X1A Poisoning by enzymes, accidental (unintentional), initial encounter -T453X1D Poisoning by enzymes, accidental (unintentional), subsequent encounter -T453X1S Poisoning by enzymes, accidental (unintentional), sequela -T453X2A Poisoning by enzymes, intentional self-harm, initial encounter -T453X2D Poisoning by enzymes, intentional self-harm, subsequent encounter -T453X2S Poisoning by enzymes, intentional self-harm, sequela -T453X3A Poisoning by enzymes, assault, initial encounter -T453X3D Poisoning by enzymes, assault, subsequent encounter -T453X3S Poisoning by enzymes, assault, sequela -T453X4A Poisoning by enzymes, undetermined, initial encounter -T453X4D Poisoning by enzymes, undetermined, subsequent encounter -T453X4S Poisoning by enzymes, undetermined, sequela -T453X5A Adverse effect of enzymes, initial encounter -T453X5D Adverse effect of enzymes, subsequent encounter -T453X5S Adverse effect of enzymes, sequela -T453X6A Underdosing of enzymes, initial encounter -T453X6D Underdosing of enzymes, subsequent encounter -T453X6S Underdosing of enzymes, sequela -T454X1A Poisoning by iron and its compounds, accidental (unintentional), initial encounter -T454X1D Poisoning by iron and its compounds, accidental (unintentional), subsequent encounter -T454X1S Poisoning by iron and its compounds, accidental (unintentional), sequela -T454X2A Poisoning by iron and its compounds, intentional self-harm, initial encounter -T454X2D Poisoning by iron and its compounds, intentional self-harm, subsequent encounter -T454X2S Poisoning by iron and its compounds, intentional self-harm, sequela -T454X3A Poisoning by iron and its compounds, assault, initial encounter -T454X3D Poisoning by iron and its compounds, assault, subsequent encounter -T454X3S Poisoning by iron and its compounds, assault, sequela -T454X4A Poisoning by iron and its compounds, undetermined, initial encounter -T454X4D Poisoning by iron and its compounds, undetermined, subsequent encounter -T454X4S Poisoning by iron and its compounds, undetermined, sequela -T454X5A Adverse effect of iron and its compounds, initial encounter -T454X5D Adverse effect of iron and its compounds, subsequent encounter -T454X5S Adverse effect of iron and its compounds, sequela -T454X6A Underdosing of iron and its compounds, initial encounter -T454X6D Underdosing of iron and its compounds, subsequent encounter -T454X6S Underdosing of iron and its compounds, sequela -T45511A Poisoning by anticoagulants, accidental (unintentional), initial encounter -T45511D Poisoning by anticoagulants, accidental (unintentional), subsequent encounter -T45511S Poisoning by anticoagulants, accidental (unintentional), sequela -T45512A Poisoning by anticoagulants, intentional self-harm, initial encounter -T45512D Poisoning by anticoagulants, intentional self-harm, subsequent encounter -T45512S Poisoning by anticoagulants, intentional self-harm, sequela -T45513A Poisoning by anticoagulants, assault, initial encounter -T45513D Poisoning by anticoagulants, assault, subsequent encounter -T45513S Poisoning by anticoagulants, assault, sequela -T45514A Poisoning by anticoagulants, undetermined, initial encounter -T45514D Poisoning by anticoagulants, undetermined, subsequent encounter -T45514S Poisoning by anticoagulants, undetermined, sequela -T45515A Adverse effect of anticoagulants, initial encounter -T45515D Adverse effect of anticoagulants, subsequent encounter -T45515S Adverse effect of anticoagulants, sequela -T45516A Underdosing of anticoagulants, initial encounter -T45516D Underdosing of anticoagulants, subsequent encounter -T45516S Underdosing of anticoagulants, sequela -T45521A Poisoning by antithrombotic drugs, accidental (unintentional), initial encounter -T45521D Poisoning by antithrombotic drugs, accidental (unintentional), subsequent encounter -T45521S Poisoning by antithrombotic drugs, accidental (unintentional), sequela -T45522A Poisoning by antithrombotic drugs, intentional self-harm, initial encounter -T45522D Poisoning by antithrombotic drugs, intentional self-harm, subsequent encounter -T45522S Poisoning by antithrombotic drugs, intentional self-harm, sequela -T45523A Poisoning by antithrombotic drugs, assault, initial encounter -T45523D Poisoning by antithrombotic drugs, assault, subsequent encounter -T45523S Poisoning by antithrombotic drugs, assault, sequela -T45524A Poisoning by antithrombotic drugs, undetermined, initial encounter -T45524D Poisoning by antithrombotic drugs, undetermined, subsequent encounter -T45524S Poisoning by antithrombotic drugs, undetermined, sequela -T45525A Adverse effect of antithrombotic drugs, initial encounter -T45525D Adverse effect of antithrombotic drugs, subsequent encounter -T45525S Adverse effect of antithrombotic drugs, sequela -T45526A Underdosing of antithrombotic drugs, initial encounter -T45526D Underdosing of antithrombotic drugs, subsequent encounter -T45526S Underdosing of antithrombotic drugs, sequela -T45601A Poisoning by unspecified fibrinolysis-affecting drugs, accidental (unintentional), initial encounter -T45601D Poisoning by unspecified fibrinolysis-affecting drugs, accidental (unintentional), subsequent encounter -T45601S Poisoning by unspecified fibrinolysis-affecting drugs, accidental (unintentional), sequela -T45602A Poisoning by unspecified fibrinolysis-affecting drugs, intentional self-harm, initial encounter -T45602D Poisoning by unspecified fibrinolysis-affecting drugs, intentional self-harm, subsequent encounter -T45602S Poisoning by unspecified fibrinolysis-affecting drugs, intentional self-harm, sequela -T45603A Poisoning by unspecified fibrinolysis-affecting drugs, assault, initial encounter -T45603D Poisoning by unspecified fibrinolysis-affecting drugs, assault, subsequent encounter -T45603S Poisoning by unspecified fibrinolysis-affecting drugs, assault, sequela -T45604A Poisoning by unspecified fibrinolysis-affecting drugs, undetermined, initial encounter -T45604D Poisoning by unspecified fibrinolysis-affecting drugs, undetermined, subsequent encounter -T45604S Poisoning by unspecified fibrinolysis-affecting drugs, undetermined, sequela -T45605A Adverse effect of unspecified fibrinolysis-affecting drugs, initial encounter -T45605D Adverse effect of unspecified fibrinolysis-affecting drugs, subsequent encounter -T45605S Adverse effect of unspecified fibrinolysis-affecting drugs, sequela -T45606A Underdosing of unspecified fibrinolysis-affecting drugs, initial encounter -T45606D Underdosing of unspecified fibrinolysis-affecting drugs, subsequent encounter -T45606S Underdosing of unspecified fibrinolysis-affecting drugs, sequela -T45611A Poisoning by thrombolytic drug, accidental (unintentional), initial encounter -T45611D Poisoning by thrombolytic drug, accidental (unintentional), subsequent encounter -T45611S Poisoning by thrombolytic drug, accidental (unintentional), sequela -T45612A Poisoning by thrombolytic drug, intentional self-harm, initial encounter -T45612D Poisoning by thrombolytic drug, intentional self-harm, subsequent encounter -T45612S Poisoning by thrombolytic drug, intentional self-harm, sequela -T45613A Poisoning by thrombolytic drug, assault, initial encounter -T45613D Poisoning by thrombolytic drug, assault, subsequent encounter -T45613S Poisoning by thrombolytic drug, assault, sequela -T45614A Poisoning by thrombolytic drug, undetermined, initial encounter -T45614D Poisoning by thrombolytic drug, undetermined, subsequent encounter -T45614S Poisoning by thrombolytic drug, undetermined, sequela -T45615A Adverse effect of thrombolytic drugs, initial encounter -T45615D Adverse effect of thrombolytic drugs, subsequent encounter -T45615S Adverse effect of thrombolytic drugs, sequela -T45616A Underdosing of thrombolytic drugs, initial encounter -T45616D Underdosing of thrombolytic drugs, subsequent encounter -T45616S Underdosing of thrombolytic drugs, sequela -T45621A Poisoning by hemostatic drug, accidental (unintentional), initial encounter -T45621D Poisoning by hemostatic drug, accidental (unintentional), subsequent encounter -T45621S Poisoning by hemostatic drug, accidental (unintentional), sequela -T45622A Poisoning by hemostatic drug, intentional self-harm, initial encounter -T45622D Poisoning by hemostatic drug, intentional self-harm, subsequent encounter -T45622S Poisoning by hemostatic drug, intentional self-harm, sequela -T45623A Poisoning by hemostatic drug, assault, initial encounter -T45623D Poisoning by hemostatic drug, assault, subsequent encounter -T45623S Poisoning by hemostatic drug, assault, sequela -T45624A Poisoning by hemostatic drug, undetermined, initial encounter -T45624D Poisoning by hemostatic drug, undetermined, subsequent encounter -T45624S Poisoning by hemostatic drug, undetermined, sequela -T45625A Adverse effect of hemostatic drug, initial encounter -T45625D Adverse effect of hemostatic drug, subsequent encounter -T45625S Adverse effect of hemostatic drug, sequela -T45626A Underdosing of hemostatic drugs, initial encounter -T45626D Underdosing of hemostatic drugs, subsequent encounter -T45626S Underdosing of hemostatic drugs, sequela -T45691A Poisoning by other fibrinolysis-affecting drugs, accidental (unintentional), initial encounter -T45691D Poisoning by other fibrinolysis-affecting drugs, accidental (unintentional), subsequent encounter -T45691S Poisoning by other fibrinolysis-affecting drugs, accidental (unintentional), sequela -T45692A Poisoning by other fibrinolysis-affecting drugs, intentional self-harm, initial encounter -T45692D Poisoning by other fibrinolysis-affecting drugs, intentional self-harm, subsequent encounter -T45692S Poisoning by other fibrinolysis-affecting drugs, intentional self-harm, sequela -T45693A Poisoning by other fibrinolysis-affecting drugs, assault, initial encounter -T45693D Poisoning by other fibrinolysis-affecting drugs, assault, subsequent encounter -T45693S Poisoning by other fibrinolysis-affecting drugs, assault, sequela -T45694A Poisoning by other fibrinolysis-affecting drugs, undetermined, initial encounter -T45694D Poisoning by other fibrinolysis-affecting drugs, undetermined, subsequent encounter -T45694S Poisoning by other fibrinolysis-affecting drugs, undetermined, sequela -T45695A Adverse effect of other fibrinolysis-affecting drugs, initial encounter -T45695D Adverse effect of other fibrinolysis-affecting drugs, subsequent encounter -T45695S Adverse effect of other fibrinolysis-affecting drugs, sequela -T45696A Underdosing of other fibrinolysis-affecting drugs, initial encounter -T45696D Underdosing of other fibrinolysis-affecting drugs, subsequent encounter -T45696S Underdosing of other fibrinolysis-affecting drugs, sequela -T457X1A Poisoning by anticoagulant antagonists, vitamin K and other coagulants, accidental (unintentional), initial encounter -T457X1D Poisoning by anticoagulant antagonists, vitamin K and other coagulants, accidental (unintentional), subsequent encounter -T457X1S Poisoning by anticoagulant antagonists, vitamin K and other coagulants, accidental (unintentional), sequela -T457X2A Poisoning by anticoagulant antagonists, vitamin K and other coagulants, intentional self-harm, initial encounter -T457X2D Poisoning by anticoagulant antagonists, vitamin K and other coagulants, intentional self-harm, subsequent encounter -T457X2S Poisoning by anticoagulant antagonists, vitamin K and other coagulants, intentional self-harm, sequela -T457X3A Poisoning by anticoagulant antagonists, vitamin K and other coagulants, assault, initial encounter -T457X3D Poisoning by anticoagulant antagonists, vitamin K and other coagulants, assault, subsequent encounter -T457X3S Poisoning by anticoagulant antagonists, vitamin K and other coagulants, assault, sequela -T457X4A Poisoning by anticoagulant antagonists, vitamin K and other coagulants, undetermined, initial encounter -T457X4D Poisoning by anticoagulant antagonists, vitamin K and other coagulants, undetermined, subsequent encounter -T457X4S Poisoning by anticoagulant antagonists, vitamin K and other coagulants, undetermined, sequela -T457X5A Adverse effect of anticoagulant antagonists, vitamin K and other coagulants, initial encounter -T457X5D Adverse effect of anticoagulant antagonists, vitamin K and other coagulants, subsequent encounter -T457X5S Adverse effect of anticoagulant antagonists, vitamin K and other coagulants, sequela -T457X6A Underdosing of anticoagulant antagonist, vitamin K and other coagulants, initial encounter -T457X6D Underdosing of anticoagulant antagonist, vitamin K and other coagulants, subsequent encounter -T457X6S Underdosing of anticoagulant antagonist, vitamin K and other coagulants, sequela -T458X1A Poisoning by other primarily systemic and hematological agents, accidental (unintentional), initial encounter -T458X1D Poisoning by other primarily systemic and hematological agents, accidental (unintentional), subsequent encounter -T458X1S Poisoning by other primarily systemic and hematological agents, accidental (unintentional), sequela -T458X2A Poisoning by other primarily systemic and hematological agents, intentional self-harm, initial encounter -T458X2D Poisoning by other primarily systemic and hematological agents, intentional self-harm, subsequent encounter -T458X2S Poisoning by other primarily systemic and hematological agents, intentional self-harm, sequela -T458X3A Poisoning by other primarily systemic and hematological agents, assault, initial encounter -T458X3D Poisoning by other primarily systemic and hematological agents, assault, subsequent encounter -T458X3S Poisoning by other primarily systemic and hematological agents, assault, sequela -T458X4A Poisoning by other primarily systemic and hematological agents, undetermined, initial encounter -T458X4D Poisoning by other primarily systemic and hematological agents, undetermined, subsequent encounter -T458X4S Poisoning by other primarily systemic and hematological agents, undetermined, sequela -T458X5A Adverse effect of other primarily systemic and hematological agents, initial encounter -T458X5D Adverse effect of other primarily systemic and hematological agents, subsequent encounter -T458X5S Adverse effect of other primarily systemic and hematological agents, sequela -T458X6A Underdosing of other primarily systemic and hematological agents, initial encounter -T458X6D Underdosing of other primarily systemic and hematological agents, subsequent encounter -T458X6S Underdosing of other primarily systemic and hematological agents, sequela -T4591XA Poisoning by unspecified primarily systemic and hematological agent, accidental (unintentional), initial encounter -T4591XD Poisoning by unspecified primarily systemic and hematological agent, accidental (unintentional), subsequent encounter -T4591XS Poisoning by unspecified primarily systemic and hematological agent, accidental (unintentional), sequela -T4592XA Poisoning by unspecified primarily systemic and hematological agent, intentional self-harm, initial encounter -T4592XD Poisoning by unspecified primarily systemic and hematological agent, intentional self-harm, subsequent encounter -T4592XS Poisoning by unspecified primarily systemic and hematological agent, intentional self-harm, sequela -T4593XA Poisoning by unspecified primarily systemic and hematological agent, assault, initial encounter -T4593XD Poisoning by unspecified primarily systemic and hematological agent, assault, subsequent encounter -T4593XS Poisoning by unspecified primarily systemic and hematological agent, assault, sequela -T4594XA Poisoning by unspecified primarily systemic and hematological agent, undetermined, initial encounter -T4594XD Poisoning by unspecified primarily systemic and hematological agent, undetermined, subsequent encounter -T4594XS Poisoning by unspecified primarily systemic and hematological agent, undetermined, sequela -T4595XA Adverse effect of unspecified primarily systemic and hematological agent, initial encounter -T4595XD Adverse effect of unspecified primarily systemic and hematological agent, subsequent encounter -T4595XS Adverse effect of unspecified primarily systemic and hematological agent, sequela -T4596XA Underdosing of unspecified primarily systemic and hematological agent, initial encounter -T4596XD Underdosing of unspecified primarily systemic and hematological agent, subsequent encounter -T4596XS Underdosing of unspecified primarily systemic and hematological agent, sequela -T460X1A Poisoning by cardiac-stimulant glycosides and drugs of similar action, accidental (unintentional), initial encounter -T460X1D Poisoning by cardiac-stimulant glycosides and drugs of similar action, accidental (unintentional), subsequent encounter -T460X1S Poisoning by cardiac-stimulant glycosides and drugs of similar action, accidental (unintentional), sequela -T460X2A Poisoning by cardiac-stimulant glycosides and drugs of similar action, intentional self-harm, initial encounter -T460X2D Poisoning by cardiac-stimulant glycosides and drugs of similar action, intentional self-harm, subsequent encounter -T460X2S Poisoning by cardiac-stimulant glycosides and drugs of similar action, intentional self-harm, sequela -T460X3A Poisoning by cardiac-stimulant glycosides and drugs of similar action, assault, initial encounter -T460X3D Poisoning by cardiac-stimulant glycosides and drugs of similar action, assault, subsequent encounter -T460X3S Poisoning by cardiac-stimulant glycosides and drugs of similar action, assault, sequela -T460X4A Poisoning by cardiac-stimulant glycosides and drugs of similar action, undetermined, initial encounter -T460X4D Poisoning by cardiac-stimulant glycosides and drugs of similar action, undetermined, subsequent encounter -T460X4S Poisoning by cardiac-stimulant glycosides and drugs of similar action, undetermined, sequela -T460X5A Adverse effect of cardiac-stimulant glycosides and drugs of similar action, initial encounter -T460X5D Adverse effect of cardiac-stimulant glycosides and drugs of similar action, subsequent encounter -T460X5S Adverse effect of cardiac-stimulant glycosides and drugs of similar action, sequela -T460X6A Underdosing of cardiac-stimulant glycosides and drugs of similar action, initial encounter -T460X6D Underdosing of cardiac-stimulant glycosides and drugs of similar action, subsequent encounter -T460X6S Underdosing of cardiac-stimulant glycosides and drugs of similar action, sequela -T461X1A Poisoning by calcium-channel blockers, accidental (unintentional), initial encounter -T461X1D Poisoning by calcium-channel blockers, accidental (unintentional), subsequent encounter -T461X1S Poisoning by calcium-channel blockers, accidental (unintentional), sequela -T461X2A Poisoning by calcium-channel blockers, intentional self-harm, initial encounter -T461X2D Poisoning by calcium-channel blockers, intentional self-harm, subsequent encounter -T461X2S Poisoning by calcium-channel blockers, intentional self-harm, sequela -T461X3A Poisoning by calcium-channel blockers, assault, initial encounter -T461X3D Poisoning by calcium-channel blockers, assault, subsequent encounter -T461X3S Poisoning by calcium-channel blockers, assault, sequela -T461X4A Poisoning by calcium-channel blockers, undetermined, initial encounter -T461X4D Poisoning by calcium-channel blockers, undetermined, subsequent encounter -T461X4S Poisoning by calcium-channel blockers, undetermined, sequela -T461X5A Adverse effect of calcium-channel blockers, initial encounter -T461X5D Adverse effect of calcium-channel blockers, subsequent encounter -T461X5S Adverse effect of calcium-channel blockers, sequela -T461X6A Underdosing of calcium-channel blockers, initial encounter -T461X6D Underdosing of calcium-channel blockers, subsequent encounter -T461X6S Underdosing of calcium-channel blockers, sequela -T462X1A Poisoning by other antidysrhythmic drugs, accidental (unintentional), initial encounter -T462X1D Poisoning by other antidysrhythmic drugs, accidental (unintentional), subsequent encounter -T462X1S Poisoning by other antidysrhythmic drugs, accidental (unintentional), sequela -T462X2A Poisoning by other antidysrhythmic drugs, intentional self-harm, initial encounter -T462X2D Poisoning by other antidysrhythmic drugs, intentional self-harm, subsequent encounter -T462X2S Poisoning by other antidysrhythmic drugs, intentional self-harm, sequela -T462X3A Poisoning by other antidysrhythmic drugs, assault, initial encounter -T462X3D Poisoning by other antidysrhythmic drugs, assault, subsequent encounter -T462X3S Poisoning by other antidysrhythmic drugs, assault, sequela -T462X4A Poisoning by other antidysrhythmic drugs, undetermined, initial encounter -T462X4D Poisoning by other antidysrhythmic drugs, undetermined, subsequent encounter -T462X4S Poisoning by other antidysrhythmic drugs, undetermined, sequela -T462X5A Adverse effect of other antidysrhythmic drugs, initial encounter -T462X5D Adverse effect of other antidysrhythmic drugs, subsequent encounter -T462X5S Adverse effect of other antidysrhythmic drugs, sequela -T462X6A Underdosing of other antidysrhythmic drugs, initial encounter -T462X6D Underdosing of other antidysrhythmic drugs, subsequent encounter -T462X6S Underdosing of other antidysrhythmic drugs, sequela -T463X1A Poisoning by coronary vasodilators, accidental (unintentional), initial encounter -T463X1D Poisoning by coronary vasodilators, accidental (unintentional), subsequent encounter -T463X1S Poisoning by coronary vasodilators, accidental (unintentional), sequela -T463X2A Poisoning by coronary vasodilators, intentional self-harm, initial encounter -T463X2D Poisoning by coronary vasodilators, intentional self-harm, subsequent encounter -T463X2S Poisoning by coronary vasodilators, intentional self-harm, sequela -T463X3A Poisoning by coronary vasodilators, assault, initial encounter -T463X3D Poisoning by coronary vasodilators, assault, subsequent encounter -T463X3S Poisoning by coronary vasodilators, assault, sequela -T463X4A Poisoning by coronary vasodilators, undetermined, initial encounter -T463X4D Poisoning by coronary vasodilators, undetermined, subsequent encounter -T463X4S Poisoning by coronary vasodilators, undetermined, sequela -T463X5A Adverse effect of coronary vasodilators, initial encounter -T463X5D Adverse effect of coronary vasodilators, subsequent encounter -T463X5S Adverse effect of coronary vasodilators, sequela -T463X6A Underdosing of coronary vasodilators, initial encounter -T463X6D Underdosing of coronary vasodilators, subsequent encounter -T463X6S Underdosing of coronary vasodilators, sequela -T464X1A Poisoning by angiotensin-converting-enzyme inhibitors, accidental (unintentional), initial encounter -T464X1D Poisoning by angiotensin-converting-enzyme inhibitors, accidental (unintentional), subsequent encounter -T464X1S Poisoning by angiotensin-converting-enzyme inhibitors, accidental (unintentional), sequela -T464X2A Poisoning by angiotensin-converting-enzyme inhibitors, intentional self-harm, initial encounter -T464X2D Poisoning by angiotensin-converting-enzyme inhibitors, intentional self-harm, subsequent encounter -T464X2S Poisoning by angiotensin-converting-enzyme inhibitors, intentional self-harm, sequela -T464X3A Poisoning by angiotensin-converting-enzyme inhibitors, assault, initial encounter -T464X3D Poisoning by angiotensin-converting-enzyme inhibitors, assault, subsequent encounter -T464X3S Poisoning by angiotensin-converting-enzyme inhibitors, assault, sequela -T464X4A Poisoning by angiotensin-converting-enzyme inhibitors, undetermined, initial encounter -T464X4D Poisoning by angiotensin-converting-enzyme inhibitors, undetermined, subsequent encounter -T464X4S Poisoning by angiotensin-converting-enzyme inhibitors, undetermined, sequela -T464X5A Adverse effect of angiotensin-converting-enzyme inhibitors, initial encounter -T464X5D Adverse effect of angiotensin-converting-enzyme inhibitors, subsequent encounter -T464X5S Adverse effect of angiotensin-converting-enzyme inhibitors, sequela -T464X6A Underdosing of angiotensin-converting-enzyme inhibitors, initial encounter -T464X6D Underdosing of angiotensin-converting-enzyme inhibitors, subsequent encounter -T464X6S Underdosing of angiotensin-converting-enzyme inhibitors, sequela -T465X1A Poisoning by other antihypertensive drugs, accidental (unintentional), initial encounter -T465X1D Poisoning by other antihypertensive drugs, accidental (unintentional), subsequent encounter -T465X1S Poisoning by other antihypertensive drugs, accidental (unintentional), sequela -T465X2A Poisoning by other antihypertensive drugs, intentional self-harm, initial encounter -T465X2D Poisoning by other antihypertensive drugs, intentional self-harm, subsequent encounter -T465X2S Poisoning by other antihypertensive drugs, intentional self-harm, sequela -T465X3A Poisoning by other antihypertensive drugs, assault, initial encounter -T465X3D Poisoning by other antihypertensive drugs, assault, subsequent encounter -T465X3S Poisoning by other antihypertensive drugs, assault, sequela -T465X4A Poisoning by other antihypertensive drugs, undetermined, initial encounter -T465X4D Poisoning by other antihypertensive drugs, undetermined, subsequent encounter -T465X4S Poisoning by other antihypertensive drugs, undetermined, sequela -T465X5A Adverse effect of other antihypertensive drugs, initial encounter -T465X5D Adverse effect of other antihypertensive drugs, subsequent encounter -T465X5S Adverse effect of other antihypertensive drugs, sequela -T465X6A Underdosing of other antihypertensive drugs, initial encounter -T465X6D Underdosing of other antihypertensive drugs, subsequent encounter -T465X6S Underdosing of other antihypertensive drugs, sequela -T466X1A Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, accidental (unintentional), initial encounter -T466X1D Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, accidental (unintentional), subsequent encounter -T466X1S Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, accidental (unintentional), sequela -T466X2A Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, intentional self-harm, initial encounter -T466X2D Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, intentional self-harm, subsequent encounter -T466X2S Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, intentional self-harm, sequela -T466X3A Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, assault, initial encounter -T466X3D Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, assault, subsequent encounter -T466X3S Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, assault, sequela -T466X4A Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, undetermined, initial encounter -T466X4D Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, undetermined, subsequent encounter -T466X4S Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, undetermined, sequela -T466X5A Adverse effect of antihyperlipidemic and antiarteriosclerotic drugs, initial encounter -T466X5D Adverse effect of antihyperlipidemic and antiarteriosclerotic drugs, subsequent encounter -T466X5S Adverse effect of antihyperlipidemic and antiarteriosclerotic drugs, sequela -T466X6A Underdosing of antihyperlipidemic and antiarteriosclerotic drugs, initial encounter -T466X6D Underdosing of antihyperlipidemic and antiarteriosclerotic drugs, subsequent encounter -T466X6S Underdosing of antihyperlipidemic and antiarteriosclerotic drugs, sequela -T467X1A Poisoning by peripheral vasodilators, accidental (unintentional), initial encounter -T467X1D Poisoning by peripheral vasodilators, accidental (unintentional), subsequent encounter -T467X1S Poisoning by peripheral vasodilators, accidental (unintentional), sequela -T467X2A Poisoning by peripheral vasodilators, intentional self-harm, initial encounter -T467X2D Poisoning by peripheral vasodilators, intentional self-harm, subsequent encounter -T467X2S Poisoning by peripheral vasodilators, intentional self-harm, sequela -T467X3A Poisoning by peripheral vasodilators, assault, initial encounter -T467X3D Poisoning by peripheral vasodilators, assault, subsequent encounter -T467X3S Poisoning by peripheral vasodilators, assault, sequela -T467X4A Poisoning by peripheral vasodilators, undetermined, initial encounter -T467X4D Poisoning by peripheral vasodilators, undetermined, subsequent encounter -T467X4S Poisoning by peripheral vasodilators, undetermined, sequela -T467X5A Adverse effect of peripheral vasodilators, initial encounter -T467X5D Adverse effect of peripheral vasodilators, subsequent encounter -T467X5S Adverse effect of peripheral vasodilators, sequela -T467X6A Underdosing of peripheral vasodilators, initial encounter -T467X6D Underdosing of peripheral vasodilators, subsequent encounter -T467X6S Underdosing of peripheral vasodilators, sequela -T468X1A Poisoning by antivaricose drugs, including sclerosing agents, accidental (unintentional), initial encounter -T468X1D Poisoning by antivaricose drugs, including sclerosing agents, accidental (unintentional), subsequent encounter -T468X1S Poisoning by antivaricose drugs, including sclerosing agents, accidental (unintentional), sequela -T468X2A Poisoning by antivaricose drugs, including sclerosing agents, intentional self-harm, initial encounter -T468X2D Poisoning by antivaricose drugs, including sclerosing agents, intentional self-harm, subsequent encounter -T468X2S Poisoning by antivaricose drugs, including sclerosing agents, intentional self-harm, sequela -T468X3A Poisoning by antivaricose drugs, including sclerosing agents, assault, initial encounter -T468X3D Poisoning by antivaricose drugs, including sclerosing agents, assault, subsequent encounter -T468X3S Poisoning by antivaricose drugs, including sclerosing agents, assault, sequela -T468X4A Poisoning by antivaricose drugs, including sclerosing agents, undetermined, initial encounter -T468X4D Poisoning by antivaricose drugs, including sclerosing agents, undetermined, subsequent encounter -T468X4S Poisoning by antivaricose drugs, including sclerosing agents, undetermined, sequela -T468X5A Adverse effect of antivaricose drugs, including sclerosing agents, initial encounter -T468X5D Adverse effect of antivaricose drugs, including sclerosing agents, subsequent encounter -T468X5S Adverse effect of antivaricose drugs, including sclerosing agents, sequela -T468X6A Underdosing of antivaricose drugs, including sclerosing agents, initial encounter -T468X6D Underdosing of antivaricose drugs, including sclerosing agents, subsequent encounter -T468X6S Underdosing of antivaricose drugs, including sclerosing agents, sequela -T46901A Poisoning by unspecified agents primarily affecting the cardiovascular system, accidental (unintentional), initial encounter -T46901D Poisoning by unspecified agents primarily affecting the cardiovascular system, accidental (unintentional), subsequent encounter -T46901S Poisoning by unspecified agents primarily affecting the cardiovascular system, accidental (unintentional), sequela -T46902A Poisoning by unspecified agents primarily affecting the cardiovascular system, intentional self-harm, initial encounter -T46902D Poisoning by unspecified agents primarily affecting the cardiovascular system, intentional self-harm, subsequent encounter -T46902S Poisoning by unspecified agents primarily affecting the cardiovascular system, intentional self-harm, sequela -T46903A Poisoning by unspecified agents primarily affecting the cardiovascular system, assault, initial encounter -T46903D Poisoning by unspecified agents primarily affecting the cardiovascular system, assault, subsequent encounter -T46903S Poisoning by unspecified agents primarily affecting the cardiovascular system, assault, sequela -T46904A Poisoning by unspecified agents primarily affecting the cardiovascular system, undetermined, initial encounter -T46904D Poisoning by unspecified agents primarily affecting the cardiovascular system, undetermined, subsequent encounter -T46904S Poisoning by unspecified agents primarily affecting the cardiovascular system, undetermined, sequela -T46905A Adverse effect of unspecified agents primarily affecting the cardiovascular system, initial encounter -T46905D Adverse effect of unspecified agents primarily affecting the cardiovascular system, subsequent encounter -T46905S Adverse effect of unspecified agents primarily affecting the cardiovascular system, sequela -T46906A Underdosing of unspecified agents primarily affecting the cardiovascular system, initial encounter -T46906D Underdosing of unspecified agents primarily affecting the cardiovascular system, subsequent encounter -T46906S Underdosing of unspecified agents primarily affecting the cardiovascular system, sequela -T46991A Poisoning by other agents primarily affecting the cardiovascular system, accidental (unintentional), initial encounter -T46991D Poisoning by other agents primarily affecting the cardiovascular system, accidental (unintentional), subsequent encounter -T46991S Poisoning by other agents primarily affecting the cardiovascular system, accidental (unintentional), sequela -T46992A Poisoning by other agents primarily affecting the cardiovascular system, intentional self-harm, initial encounter -T46992D Poisoning by other agents primarily affecting the cardiovascular system, intentional self-harm, subsequent encounter -T46992S Poisoning by other agents primarily affecting the cardiovascular system, intentional self-harm, sequela -T46993A Poisoning by other agents primarily affecting the cardiovascular system, assault, initial encounter -T46993D Poisoning by other agents primarily affecting the cardiovascular system, assault, subsequent encounter -T46993S Poisoning by other agents primarily affecting the cardiovascular system, assault, sequela -T46994A Poisoning by other agents primarily affecting the cardiovascular system, undetermined, initial encounter -T46994D Poisoning by other agents primarily affecting the cardiovascular system, undetermined, subsequent encounter -T46994S Poisoning by other agents primarily affecting the cardiovascular system, undetermined, sequela -T46995A Adverse effect of other agents primarily affecting the cardiovascular system, initial encounter -T46995D Adverse effect of other agents primarily affecting the cardiovascular system, subsequent encounter -T46995S Adverse effect of other agents primarily affecting the cardiovascular system, sequela -T46996A Underdosing of other agents primarily affecting the cardiovascular system, initial encounter -T46996D Underdosing of other agents primarily affecting the cardiovascular system, subsequent encounter -T46996S Underdosing of other agents primarily affecting the cardiovascular system, sequela -T470X1A Poisoning by histamine H2-receptor blockers, accidental (unintentional), initial encounter -T470X1D Poisoning by histamine H2-receptor blockers, accidental (unintentional), subsequent encounter -T470X1S Poisoning by histamine H2-receptor blockers, accidental (unintentional), sequela -T470X2A Poisoning by histamine H2-receptor blockers, intentional self-harm, initial encounter -T470X2D Poisoning by histamine H2-receptor blockers, intentional self-harm, subsequent encounter -T470X2S Poisoning by histamine H2-receptor blockers, intentional self-harm, sequela -T470X3A Poisoning by histamine H2-receptor blockers, assault, initial encounter -T470X3D Poisoning by histamine H2-receptor blockers, assault, subsequent encounter -T470X3S Poisoning by histamine H2-receptor blockers, assault, sequela -T470X4A Poisoning by histamine H2-receptor blockers, undetermined, initial encounter -T470X4D Poisoning by histamine H2-receptor blockers, undetermined, subsequent encounter -T470X4S Poisoning by histamine H2-receptor blockers, undetermined, sequela -T470X5A Adverse effect of histamine H2-receptor blockers, initial encounter -T470X5D Adverse effect of histamine H2-receptor blockers, subsequent encounter -T470X5S Adverse effect of histamine H2-receptor blockers, sequela -T470X6A Underdosing of histamine H2-receptor blockers, initial encounter -T470X6D Underdosing of histamine H2-receptor blockers, subsequent encounter -T470X6S Underdosing of histamine H2-receptor blockers, sequela -T471X1A Poisoning by other antacids and anti-gastric-secretion drugs, accidental (unintentional), initial encounter -T471X1D Poisoning by other antacids and anti-gastric-secretion drugs, accidental (unintentional), subsequent encounter -T471X1S Poisoning by other antacids and anti-gastric-secretion drugs, accidental (unintentional), sequela -T471X2A Poisoning by other antacids and anti-gastric-secretion drugs, intentional self-harm, initial encounter -T471X2D Poisoning by other antacids and anti-gastric-secretion drugs, intentional self-harm, subsequent encounter -T471X2S Poisoning by other antacids and anti-gastric-secretion drugs, intentional self-harm, sequela -T471X3A Poisoning by other antacids and anti-gastric-secretion drugs, assault, initial encounter -T471X3D Poisoning by other antacids and anti-gastric-secretion drugs, assault, subsequent encounter -T471X3S Poisoning by other antacids and anti-gastric-secretion drugs, assault, sequela -T471X4A Poisoning by other antacids and anti-gastric-secretion drugs, undetermined, initial encounter -T471X4D Poisoning by other antacids and anti-gastric-secretion drugs, undetermined, subsequent encounter -T471X4S Poisoning by other antacids and anti-gastric-secretion drugs, undetermined, sequela -T471X5A Adverse effect of other antacids and anti-gastric-secretion drugs, initial encounter -T471X5D Adverse effect of other antacids and anti-gastric-secretion drugs, subsequent encounter -T471X5S Adverse effect of other antacids and anti-gastric-secretion drugs, sequela -T471X6A Underdosing of other antacids and anti-gastric-secretion drugs, initial encounter -T471X6D Underdosing of other antacids and anti-gastric-secretion drugs, subsequent encounter -T471X6S Underdosing of other antacids and anti-gastric-secretion drugs, sequela -T472X1A Poisoning by stimulant laxatives, accidental (unintentional), initial encounter -T472X1D Poisoning by stimulant laxatives, accidental (unintentional), subsequent encounter -T472X1S Poisoning by stimulant laxatives, accidental (unintentional), sequela -T472X2A Poisoning by stimulant laxatives, intentional self-harm, initial encounter -T472X2D Poisoning by stimulant laxatives, intentional self-harm, subsequent encounter -T472X2S Poisoning by stimulant laxatives, intentional self-harm, sequela -T472X3A Poisoning by stimulant laxatives, assault, initial encounter -T472X3D Poisoning by stimulant laxatives, assault, subsequent encounter -T472X3S Poisoning by stimulant laxatives, assault, sequela -T472X4A Poisoning by stimulant laxatives, undetermined, initial encounter -T472X4D Poisoning by stimulant laxatives, undetermined, subsequent encounter -T472X4S Poisoning by stimulant laxatives, undetermined, sequela -T472X5A Adverse effect of stimulant laxatives, initial encounter -T472X5D Adverse effect of stimulant laxatives, subsequent encounter -T472X5S Adverse effect of stimulant laxatives, sequela -T472X6A Underdosing of stimulant laxatives, initial encounter -T472X6D Underdosing of stimulant laxatives, subsequent encounter -T472X6S Underdosing of stimulant laxatives, sequela -T473X1A Poisoning by saline and osmotic laxatives, accidental (unintentional), initial encounter -T473X1D Poisoning by saline and osmotic laxatives, accidental (unintentional), subsequent encounter -T473X1S Poisoning by saline and osmotic laxatives, accidental (unintentional), sequela -T473X2A Poisoning by saline and osmotic laxatives, intentional self-harm, initial encounter -T473X2D Poisoning by saline and osmotic laxatives, intentional self-harm, subsequent encounter -T473X2S Poisoning by saline and osmotic laxatives, intentional self-harm, sequela -T473X3A Poisoning by saline and osmotic laxatives, assault, initial encounter -T473X3D Poisoning by saline and osmotic laxatives, assault, subsequent encounter -T473X3S Poisoning by saline and osmotic laxatives, assault, sequela -T473X4A Poisoning by saline and osmotic laxatives, undetermined, initial encounter -T473X4D Poisoning by saline and osmotic laxatives, undetermined, subsequent encounter -T473X4S Poisoning by saline and osmotic laxatives, undetermined, sequela -T473X5A Adverse effect of saline and osmotic laxatives, initial encounter -T473X5D Adverse effect of saline and osmotic laxatives, subsequent encounter -T473X5S Adverse effect of saline and osmotic laxatives, sequela -T473X6A Underdosing of saline and osmotic laxatives, initial encounter -T473X6D Underdosing of saline and osmotic laxatives, subsequent encounter -T473X6S Underdosing of saline and osmotic laxatives, sequela -T474X1A Poisoning by other laxatives, accidental (unintentional), initial encounter -T474X1D Poisoning by other laxatives, accidental (unintentional), subsequent encounter -T474X1S Poisoning by other laxatives, accidental (unintentional), sequela -T474X2A Poisoning by other laxatives, intentional self-harm, initial encounter -T474X2D Poisoning by other laxatives, intentional self-harm, subsequent encounter -T474X2S Poisoning by other laxatives, intentional self-harm, sequela -T474X3A Poisoning by other laxatives, assault, initial encounter -T474X3D Poisoning by other laxatives, assault, subsequent encounter -T474X3S Poisoning by other laxatives, assault, sequela -T474X4A Poisoning by other laxatives, undetermined, initial encounter -T474X4D Poisoning by other laxatives, undetermined, subsequent encounter -T474X4S Poisoning by other laxatives, undetermined, sequela -T474X5A Adverse effect of other laxatives, initial encounter -T474X5D Adverse effect of other laxatives, subsequent encounter -T474X5S Adverse effect of other laxatives, sequela -T474X6A Underdosing of other laxatives, initial encounter -T474X6D Underdosing of other laxatives, subsequent encounter -T474X6S Underdosing of other laxatives, sequela -T475X1A Poisoning by digestants, accidental (unintentional), initial encounter -T475X1D Poisoning by digestants, accidental (unintentional), subsequent encounter -T475X1S Poisoning by digestants, accidental (unintentional), sequela -T475X2A Poisoning by digestants, intentional self-harm, initial encounter -T475X2D Poisoning by digestants, intentional self-harm, subsequent encounter -T475X2S Poisoning by digestants, intentional self-harm, sequela -T475X3A Poisoning by digestants, assault, initial encounter -T475X3D Poisoning by digestants, assault, subsequent encounter -T475X3S Poisoning by digestants, assault, sequela -T475X4A Poisoning by digestants, undetermined, initial encounter -T475X4D Poisoning by digestants, undetermined, subsequent encounter -T475X4S Poisoning by digestants, undetermined, sequela -T475X5A Adverse effect of digestants, initial encounter -T475X5D Adverse effect of digestants, subsequent encounter -T475X5S Adverse effect of digestants, sequela -T475X6A Underdosing of digestants, initial encounter -T475X6D Underdosing of digestants, subsequent encounter -T475X6S Underdosing of digestants, sequela -T476X1A Poisoning by antidiarrheal drugs, accidental (unintentional), initial encounter -T476X1D Poisoning by antidiarrheal drugs, accidental (unintentional), subsequent encounter -T476X1S Poisoning by antidiarrheal drugs, accidental (unintentional), sequela -T476X2A Poisoning by antidiarrheal drugs, intentional self-harm, initial encounter -T476X2D Poisoning by antidiarrheal drugs, intentional self-harm, subsequent encounter -T476X2S Poisoning by antidiarrheal drugs, intentional self-harm, sequela -T476X3A Poisoning by antidiarrheal drugs, assault, initial encounter -T476X3D Poisoning by antidiarrheal drugs, assault, subsequent encounter -T476X3S Poisoning by antidiarrheal drugs, assault, sequela -T476X4A Poisoning by antidiarrheal drugs, undetermined, initial encounter -T476X4D Poisoning by antidiarrheal drugs, undetermined, subsequent encounter -T476X4S Poisoning by antidiarrheal drugs, undetermined, sequela -T476X5A Adverse effect of antidiarrheal drugs, initial encounter -T476X5D Adverse effect of antidiarrheal drugs, subsequent encounter -T476X5S Adverse effect of antidiarrheal drugs, sequela -T476X6A Underdosing of antidiarrheal drugs, initial encounter -T476X6D Underdosing of antidiarrheal drugs, subsequent encounter -T476X6S Underdosing of antidiarrheal drugs, sequela -T477X1A Poisoning by emetics, accidental (unintentional), initial encounter -T477X1D Poisoning by emetics, accidental (unintentional), subsequent encounter -T477X1S Poisoning by emetics, accidental (unintentional), sequela -T477X2A Poisoning by emetics, intentional self-harm, initial encounter -T477X2D Poisoning by emetics, intentional self-harm, subsequent encounter -T477X2S Poisoning by emetics, intentional self-harm, sequela -T477X3A Poisoning by emetics, assault, initial encounter -T477X3D Poisoning by emetics, assault, subsequent encounter -T477X3S Poisoning by emetics, assault, sequela -T477X4A Poisoning by emetics, undetermined, initial encounter -T477X4D Poisoning by emetics, undetermined, subsequent encounter -T477X4S Poisoning by emetics, undetermined, sequela -T477X5A Adverse effect of emetics, initial encounter -T477X5D Adverse effect of emetics, subsequent encounter -T477X5S Adverse effect of emetics, sequela -T477X6A Underdosing of emetics, initial encounter -T477X6D Underdosing of emetics, subsequent encounter -T477X6S Underdosing of emetics, sequela -T478X1A Poisoning by other agents primarily affecting gastrointestinal system, accidental (unintentional), initial encounter -T478X1D Poisoning by other agents primarily affecting gastrointestinal system, accidental (unintentional), subsequent encounter -T478X1S Poisoning by other agents primarily affecting gastrointestinal system, accidental (unintentional), sequela -T478X2A Poisoning by other agents primarily affecting gastrointestinal system, intentional self-harm, initial encounter -T478X2D Poisoning by other agents primarily affecting gastrointestinal system, intentional self-harm, subsequent encounter -T478X2S Poisoning by other agents primarily affecting gastrointestinal system, intentional self-harm, sequela -T478X3A Poisoning by other agents primarily affecting gastrointestinal system, assault, initial encounter -T478X3D Poisoning by other agents primarily affecting gastrointestinal system, assault, subsequent encounter -T478X3S Poisoning by other agents primarily affecting gastrointestinal system, assault, sequela -T478X4A Poisoning by other agents primarily affecting gastrointestinal system, undetermined, initial encounter -T478X4D Poisoning by other agents primarily affecting gastrointestinal system, undetermined, subsequent encounter -T478X4S Poisoning by other agents primarily affecting gastrointestinal system, undetermined, sequela -T478X5A Adverse effect of other agents primarily affecting gastrointestinal system, initial encounter -T478X5D Adverse effect of other agents primarily affecting gastrointestinal system, subsequent encounter -T478X5S Adverse effect of other agents primarily affecting gastrointestinal system, sequela -T478X6A Underdosing of other agents primarily affecting gastrointestinal system, initial encounter -T478X6D Underdosing of other agents primarily affecting gastrointestinal system, subsequent encounter -T478X6S Underdosing of other agents primarily affecting gastrointestinal system, sequela -T4791XA Poisoning by unspecified agents primarily affecting the gastrointestinal system, accidental (unintentional), initial encounter -T4791XD Poisoning by unspecified agents primarily affecting the gastrointestinal system, accidental (unintentional), subsequent encounter -T4791XS Poisoning by unspecified agents primarily affecting the gastrointestinal system, accidental (unintentional), sequela -T4792XA Poisoning by unspecified agents primarily affecting the gastrointestinal system, intentional self-harm, initial encounter -T4792XD Poisoning by unspecified agents primarily affecting the gastrointestinal system, intentional self-harm, subsequent encounter -T4792XS Poisoning by unspecified agents primarily affecting the gastrointestinal system, intentional self-harm, sequela -T4793XA Poisoning by unspecified agents primarily affecting the gastrointestinal system, assault, initial encounter -T4793XD Poisoning by unspecified agents primarily affecting the gastrointestinal system, assault, subsequent encounter -T4793XS Poisoning by unspecified agents primarily affecting the gastrointestinal system, assault, sequela -T4794XA Poisoning by unspecified agents primarily affecting the gastrointestinal system, undetermined, initial encounter -T4794XD Poisoning by unspecified agents primarily affecting the gastrointestinal system, undetermined, subsequent encounter -T4794XS Poisoning by unspecified agents primarily affecting the gastrointestinal system, undetermined, sequela -T4795XA Adverse effect of unspecified agents primarily affecting the gastrointestinal system, initial encounter -T4795XD Adverse effect of unspecified agents primarily affecting the gastrointestinal system, subsequent encounter -T4795XS Adverse effect of unspecified agents primarily affecting the gastrointestinal system, sequela -T4796XA Underdosing of unspecified agents primarily affecting the gastrointestinal system, initial encounter -T4796XD Underdosing of unspecified agents primarily affecting the gastrointestinal system, subsequent encounter -T4796XS Underdosing of unspecified agents primarily affecting the gastrointestinal system, sequela -T480X1A Poisoning by oxytocic drugs, accidental (unintentional), initial encounter -T480X1D Poisoning by oxytocic drugs, accidental (unintentional), subsequent encounter -T480X1S Poisoning by oxytocic drugs, accidental (unintentional), sequela -T480X2A Poisoning by oxytocic drugs, intentional self-harm, initial encounter -T480X2D Poisoning by oxytocic drugs, intentional self-harm, subsequent encounter -T480X2S Poisoning by oxytocic drugs, intentional self-harm, sequela -T480X3A Poisoning by oxytocic drugs, assault, initial encounter -T480X3D Poisoning by oxytocic drugs, assault, subsequent encounter -T480X3S Poisoning by oxytocic drugs, assault, sequela -T480X4A Poisoning by oxytocic drugs, undetermined, initial encounter -T480X4D Poisoning by oxytocic drugs, undetermined, subsequent encounter -T480X4S Poisoning by oxytocic drugs, undetermined, sequela -T480X5A Adverse effect of oxytocic drugs, initial encounter -T480X5D Adverse effect of oxytocic drugs, subsequent encounter -T480X5S Adverse effect of oxytocic drugs, sequela -T480X6A Underdosing of oxytocic drugs, initial encounter -T480X6D Underdosing of oxytocic drugs, subsequent encounter -T480X6S Underdosing of oxytocic drugs, sequela -T481X1A Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], accidental (unintentional), initial encounter -T481X1D Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], accidental (unintentional), subsequent encounter -T481X1S Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], accidental (unintentional), sequela -T481X2A Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], intentional self-harm, initial encounter -T481X2D Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], intentional self-harm, subsequent encounter -T481X2S Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], intentional self-harm, sequela -T481X3A Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], assault, initial encounter -T481X3D Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], assault, subsequent encounter -T481X3S Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], assault, sequela -T481X4A Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], undetermined, initial encounter -T481X4D Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], undetermined, subsequent encounter -T481X4S Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], undetermined, sequela -T481X5A Adverse effect of skeletal muscle relaxants [neuromuscular blocking agents], initial encounter -T481X5D Adverse effect of skeletal muscle relaxants [neuromuscular blocking agents], subsequent encounter -T481X5S Adverse effect of skeletal muscle relaxants [neuromuscular blocking agents], sequela -T481X6A Underdosing of skeletal muscle relaxants [neuromuscular blocking agents], initial encounter -T481X6D Underdosing of skeletal muscle relaxants [neuromuscular blocking agents], subsequent encounter -T481X6S Underdosing of skeletal muscle relaxants [neuromuscular blocking agents], sequela -T48201A Poisoning by unspecified drugs acting on muscles, accidental (unintentional), initial encounter -T48201D Poisoning by unspecified drugs acting on muscles, accidental (unintentional), subsequent encounter -T48201S Poisoning by unspecified drugs acting on muscles, accidental (unintentional), sequela -T48202A Poisoning by unspecified drugs acting on muscles, intentional self-harm, initial encounter -T48202D Poisoning by unspecified drugs acting on muscles, intentional self-harm, subsequent encounter -T48202S Poisoning by unspecified drugs acting on muscles, intentional self-harm, sequela -T48203A Poisoning by unspecified drugs acting on muscles, assault, initial encounter -T48203D Poisoning by unspecified drugs acting on muscles, assault, subsequent encounter -T48203S Poisoning by unspecified drugs acting on muscles, assault, sequela -T48204A Poisoning by unspecified drugs acting on muscles, undetermined, initial encounter -T48204D Poisoning by unspecified drugs acting on muscles, undetermined, subsequent encounter -T48204S Poisoning by unspecified drugs acting on muscles, undetermined, sequela -T48205A Adverse effect of unspecified drugs acting on muscles, initial encounter -T48205D Adverse effect of unspecified drugs acting on muscles, subsequent encounter -T48205S Adverse effect of unspecified drugs acting on muscles, sequela -T48206A Underdosing of unspecified drugs acting on muscles, initial encounter -T48206D Underdosing of unspecified drugs acting on muscles, subsequent encounter -T48206S Underdosing of unspecified drugs acting on muscles, sequela -T48291A Poisoning by other drugs acting on muscles, accidental (unintentional), initial encounter -T48291D Poisoning by other drugs acting on muscles, accidental (unintentional), subsequent encounter -T48291S Poisoning by other drugs acting on muscles, accidental (unintentional), sequela -T48292A Poisoning by other drugs acting on muscles, intentional self-harm, initial encounter -T48292D Poisoning by other drugs acting on muscles, intentional self-harm, subsequent encounter -T48292S Poisoning by other drugs acting on muscles, intentional self-harm, sequela -T48293A Poisoning by other drugs acting on muscles, assault, initial encounter -T48293D Poisoning by other drugs acting on muscles, assault, subsequent encounter -T48293S Poisoning by other drugs acting on muscles, assault, sequela -T48294A Poisoning by other drugs acting on muscles, undetermined, initial encounter -T48294D Poisoning by other drugs acting on muscles, undetermined, subsequent encounter -T48294S Poisoning by other drugs acting on muscles, undetermined, sequela -T48295A Adverse effect of other drugs acting on muscles, initial encounter -T48295D Adverse effect of other drugs acting on muscles, subsequent encounter -T48295S Adverse effect of other drugs acting on muscles, sequela -T48296A Underdosing of other drugs acting on muscles, initial encounter -T48296D Underdosing of other drugs acting on muscles, subsequent encounter -T48296S Underdosing of other drugs acting on muscles, sequela -T483X1A Poisoning by antitussives, accidental (unintentional), initial encounter -T483X1D Poisoning by antitussives, accidental (unintentional), subsequent encounter -T483X1S Poisoning by antitussives, accidental (unintentional), sequela -T483X2A Poisoning by antitussives, intentional self-harm, initial encounter -T483X2D Poisoning by antitussives, intentional self-harm, subsequent encounter -T483X2S Poisoning by antitussives, intentional self-harm, sequela -T483X3A Poisoning by antitussives, assault, initial encounter -T483X3D Poisoning by antitussives, assault, subsequent encounter -T483X3S Poisoning by antitussives, assault, sequela -T483X4A Poisoning by antitussives, undetermined, initial encounter -T483X4D Poisoning by antitussives, undetermined, subsequent encounter -T483X4S Poisoning by antitussives, undetermined, sequela -T483X5A Adverse effect of antitussives, initial encounter -T483X5D Adverse effect of antitussives, subsequent encounter -T483X5S Adverse effect of antitussives, sequela -T483X6A Underdosing of antitussives, initial encounter -T483X6D Underdosing of antitussives, subsequent encounter -T483X6S Underdosing of antitussives, sequela -T484X1A Poisoning by expectorants, accidental (unintentional), initial encounter -T484X1D Poisoning by expectorants, accidental (unintentional), subsequent encounter -T484X1S Poisoning by expectorants, accidental (unintentional), sequela -T484X2A Poisoning by expectorants, intentional self-harm, initial encounter -T484X2D Poisoning by expectorants, intentional self-harm, subsequent encounter -T484X2S Poisoning by expectorants, intentional self-harm, sequela -T484X3A Poisoning by expectorants, assault, initial encounter -T484X3D Poisoning by expectorants, assault, subsequent encounter -T484X3S Poisoning by expectorants, assault, sequela -T484X4A Poisoning by expectorants, undetermined, initial encounter -T484X4D Poisoning by expectorants, undetermined, subsequent encounter -T484X4S Poisoning by expectorants, undetermined, sequela -T484X5A Adverse effect of expectorants, initial encounter -T484X5D Adverse effect of expectorants, subsequent encounter -T484X5S Adverse effect of expectorants, sequela -T484X6A Underdosing of expectorants, initial encounter -T484X6D Underdosing of expectorants, subsequent encounter -T484X6S Underdosing of expectorants, sequela -T485X1A Poisoning by other anti-common-cold drugs, accidental (unintentional), initial encounter -T485X1D Poisoning by other anti-common-cold drugs, accidental (unintentional), subsequent encounter -T485X1S Poisoning by other anti-common-cold drugs, accidental (unintentional), sequela -T485X2A Poisoning by other anti-common-cold drugs, intentional self-harm, initial encounter -T485X2D Poisoning by other anti-common-cold drugs, intentional self-harm, subsequent encounter -T485X2S Poisoning by other anti-common-cold drugs, intentional self-harm, sequela -T485X3A Poisoning by other anti-common-cold drugs, assault, initial encounter -T485X3D Poisoning by other anti-common-cold drugs, assault, subsequent encounter -T485X3S Poisoning by other anti-common-cold drugs, assault, sequela -T485X4A Poisoning by other anti-common-cold drugs, undetermined, initial encounter -T485X4D Poisoning by other anti-common-cold drugs, undetermined, subsequent encounter -T485X4S Poisoning by other anti-common-cold drugs, undetermined, sequela -T485X5A Adverse effect of other anti-common-cold drugs, initial encounter -T485X5D Adverse effect of other anti-common-cold drugs, subsequent encounter -T485X5S Adverse effect of other anti-common-cold drugs, sequela -T485X6A Underdosing of other anti-common-cold drugs, initial encounter -T485X6D Underdosing of other anti-common-cold drugs, subsequent encounter -T485X6S Underdosing of other anti-common-cold drugs, sequela -T486X1A Poisoning by antiasthmatics, accidental (unintentional), initial encounter -T486X1D Poisoning by antiasthmatics, accidental (unintentional), subsequent encounter -T486X1S Poisoning by antiasthmatics, accidental (unintentional), sequela -T486X2A Poisoning by antiasthmatics, intentional self-harm, initial encounter -T486X2D Poisoning by antiasthmatics, intentional self-harm, subsequent encounter -T486X2S Poisoning by antiasthmatics, intentional self-harm, sequela -T486X3A Poisoning by antiasthmatics, assault, initial encounter -T486X3D Poisoning by antiasthmatics, assault, subsequent encounter -T486X3S Poisoning by antiasthmatics, assault, sequela -T486X4A Poisoning by antiasthmatics, undetermined, initial encounter -T486X4D Poisoning by antiasthmatics, undetermined, subsequent encounter -T486X4S Poisoning by antiasthmatics, undetermined, sequela -T486X5A Adverse effect of antiasthmatics, initial encounter -T486X5D Adverse effect of antiasthmatics, subsequent encounter -T486X5S Adverse effect of antiasthmatics, sequela -T486X6A Underdosing of antiasthmatics, initial encounter -T486X6D Underdosing of antiasthmatics, subsequent encounter -T486X6S Underdosing of antiasthmatics, sequela -T48901A Poisoning by unspecified agents primarily acting on the respiratory system, accidental (unintentional), initial encounter -T48901D Poisoning by unspecified agents primarily acting on the respiratory system, accidental (unintentional), subsequent encounter -T48901S Poisoning by unspecified agents primarily acting on the respiratory system, accidental (unintentional), sequela -T48902A Poisoning by unspecified agents primarily acting on the respiratory system, intentional self-harm, initial encounter -T48902D Poisoning by unspecified agents primarily acting on the respiratory system, intentional self-harm, subsequent encounter -T48902S Poisoning by unspecified agents primarily acting on the respiratory system, intentional self-harm, sequela -T48903A Poisoning by unspecified agents primarily acting on the respiratory system, assault, initial encounter -T48903D Poisoning by unspecified agents primarily acting on the respiratory system, assault, subsequent encounter -T48903S Poisoning by unspecified agents primarily acting on the respiratory system, assault, sequela -T48904A Poisoning by unspecified agents primarily acting on the respiratory system, undetermined, initial encounter -T48904D Poisoning by unspecified agents primarily acting on the respiratory system, undetermined, subsequent encounter -T48904S Poisoning by unspecified agents primarily acting on the respiratory system, undetermined, sequela -T48905A Adverse effect of unspecified agents primarily acting on the respiratory system, initial encounter -T48905D Adverse effect of unspecified agents primarily acting on the respiratory system, subsequent encounter -T48905S Adverse effect of unspecified agents primarily acting on the respiratory system, sequela -T48906A Underdosing of unspecified agents primarily acting on the respiratory system, initial encounter -T48906D Underdosing of unspecified agents primarily acting on the respiratory system, subsequent encounter -T48906S Underdosing of unspecified agents primarily acting on the respiratory system, sequela -T48991A Poisoning by other agents primarily acting on the respiratory system, accidental (unintentional), initial encounter -T48991D Poisoning by other agents primarily acting on the respiratory system, accidental (unintentional), subsequent encounter -T48991S Poisoning by other agents primarily acting on the respiratory system, accidental (unintentional), sequela -T48992A Poisoning by other agents primarily acting on the respiratory system, intentional self-harm, initial encounter -T48992D Poisoning by other agents primarily acting on the respiratory system, intentional self-harm, subsequent encounter -T48992S Poisoning by other agents primarily acting on the respiratory system, intentional self-harm, sequela -T48993A Poisoning by other agents primarily acting on the respiratory system, assault, initial encounter -T48993D Poisoning by other agents primarily acting on the respiratory system, assault, subsequent encounter -T48993S Poisoning by other agents primarily acting on the respiratory system, assault, sequela -T48994A Poisoning by other agents primarily acting on the respiratory system, undetermined, initial encounter -T48994D Poisoning by other agents primarily acting on the respiratory system, undetermined, subsequent encounter -T48994S Poisoning by other agents primarily acting on the respiratory system, undetermined, sequela -T48995A Adverse effect of other agents primarily acting on the respiratory system, initial encounter -T48995D Adverse effect of other agents primarily acting on the respiratory system, subsequent encounter -T48995S Adverse effect of other agents primarily acting on the respiratory system, sequela -T48996A Underdosing of other agents primarily acting on the respiratory system, initial encounter -T48996D Underdosing of other agents primarily acting on the respiratory system, subsequent encounter -T48996S Underdosing of other agents primarily acting on the respiratory system, sequela -T490X1A Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, accidental (unintentional), initial encounter -T490X1D Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, accidental (unintentional), subsequent encounter -T490X1S Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, accidental (unintentional), sequela -T490X2A Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, intentional self-harm, initial encounter -T490X2D Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, intentional self-harm, subsequent encounter -T490X2S Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, intentional self-harm, sequela -T490X3A Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, assault, initial encounter -T490X3D Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, assault, subsequent encounter -T490X3S Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, assault, sequela -T490X4A Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, undetermined, initial encounter -T490X4D Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, undetermined, subsequent encounter -T490X4S Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, undetermined, sequela -T490X5A Adverse effect of local antifungal, anti-infective and anti-inflammatory drugs, initial encounter -T490X5D Adverse effect of local antifungal, anti-infective and anti-inflammatory drugs, subsequent encounter -T490X5S Adverse effect of local antifungal, anti-infective and anti-inflammatory drugs, sequela -T490X6A Underdosing of local antifungal, anti-infective and anti-inflammatory drugs, initial encounter -T490X6D Underdosing of local antifungal, anti-infective and anti-inflammatory drugs, subsequent encounter -T490X6S Underdosing of local antifungal, anti-infective and anti-inflammatory drugs, sequela -T491X1A Poisoning by antipruritics, accidental (unintentional), initial encounter -T491X1D Poisoning by antipruritics, accidental (unintentional), subsequent encounter -T491X1S Poisoning by antipruritics, accidental (unintentional), sequela -T491X2A Poisoning by antipruritics, intentional self-harm, initial encounter -T491X2D Poisoning by antipruritics, intentional self-harm, subsequent encounter -T491X2S Poisoning by antipruritics, intentional self-harm, sequela -T491X3A Poisoning by antipruritics, assault, initial encounter -T491X3D Poisoning by antipruritics, assault, subsequent encounter -T491X3S Poisoning by antipruritics, assault, sequela -T491X4A Poisoning by antipruritics, undetermined, initial encounter -T491X4D Poisoning by antipruritics, undetermined, subsequent encounter -T491X4S Poisoning by antipruritics, undetermined, sequela -T491X5A Adverse effect of antipruritics, initial encounter -T491X5D Adverse effect of antipruritics, subsequent encounter -T491X5S Adverse effect of antipruritics, sequela -T491X6A Underdosing of antipruritics, initial encounter -T491X6D Underdosing of antipruritics, subsequent encounter -T491X6S Underdosing of antipruritics, sequela -T492X1A Poisoning by local astringents and local detergents, accidental (unintentional), initial encounter -T492X1D Poisoning by local astringents and local detergents, accidental (unintentional), subsequent encounter -T492X1S Poisoning by local astringents and local detergents, accidental (unintentional), sequela -T492X2A Poisoning by local astringents and local detergents, intentional self-harm, initial encounter -T492X2D Poisoning by local astringents and local detergents, intentional self-harm, subsequent encounter -T492X2S Poisoning by local astringents and local detergents, intentional self-harm, sequela -T492X3A Poisoning by local astringents and local detergents, assault, initial encounter -T492X3D Poisoning by local astringents and local detergents, assault, subsequent encounter -T492X3S Poisoning by local astringents and local detergents, assault, sequela -T492X4A Poisoning by local astringents and local detergents, undetermined, initial encounter -T492X4D Poisoning by local astringents and local detergents, undetermined, subsequent encounter -T492X4S Poisoning by local astringents and local detergents, undetermined, sequela -T492X5A Adverse effect of local astringents and local detergents, initial encounter -T492X5D Adverse effect of local astringents and local detergents, subsequent encounter -T492X5S Adverse effect of local astringents and local detergents, sequela -T492X6A Underdosing of local astringents and local detergents, initial encounter -T492X6D Underdosing of local astringents and local detergents, subsequent encounter -T492X6S Underdosing of local astringents and local detergents, sequela -T493X1A Poisoning by emollients, demulcents and protectants, accidental (unintentional), initial encounter -T493X1D Poisoning by emollients, demulcents and protectants, accidental (unintentional), subsequent encounter -T493X1S Poisoning by emollients, demulcents and protectants, accidental (unintentional), sequela -T493X2A Poisoning by emollients, demulcents and protectants, intentional self-harm, initial encounter -T493X2D Poisoning by emollients, demulcents and protectants, intentional self-harm, subsequent encounter -T493X2S Poisoning by emollients, demulcents and protectants, intentional self-harm, sequela -T493X3A Poisoning by emollients, demulcents and protectants, assault, initial encounter -T493X3D Poisoning by emollients, demulcents and protectants, assault, subsequent encounter -T493X3S Poisoning by emollients, demulcents and protectants, assault, sequela -T493X4A Poisoning by emollients, demulcents and protectants, undetermined, initial encounter -T493X4D Poisoning by emollients, demulcents and protectants, undetermined, subsequent encounter -T493X4S Poisoning by emollients, demulcents and protectants, undetermined, sequela -T493X5A Adverse effect of emollients, demulcents and protectants, initial encounter -T493X5D Adverse effect of emollients, demulcents and protectants, subsequent encounter -T493X5S Adverse effect of emollients, demulcents and protectants, sequela -T493X6A Underdosing of emollients, demulcents and protectants, initial encounter -T493X6D Underdosing of emollients, demulcents and protectants, subsequent encounter -T493X6S Underdosing of emollients, demulcents and protectants, sequela -T494X1A Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, accidental (unintentional), initial encounter -T494X1D Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, accidental (unintentional), subsequent encounter -T494X1S Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, accidental (unintentional), sequela -T494X2A Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, intentional self-harm, initial encounter -T494X2D Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, intentional self-harm, subsequent encounter -T494X2S Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, intentional self-harm, sequela -T494X3A Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, assault, initial encounter -T494X3D Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, assault, subsequent encounter -T494X3S Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, assault, sequela -T494X4A Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, undetermined, initial encounter -T494X4D Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, undetermined, subsequent encounter -T494X4S Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, undetermined, sequela -T494X5A Adverse effect of keratolytics, keratoplastics, and other hair treatment drugs and preparations, initial encounter -T494X5D Adverse effect of keratolytics, keratoplastics, and other hair treatment drugs and preparations, subsequent encounter -T494X5S Adverse effect of keratolytics, keratoplastics, and other hair treatment drugs and preparations, sequela -T494X6A Underdosing of keratolytics, keratoplastics, and other hair treatment drugs and preparations, initial encounter -T494X6D Underdosing of keratolytics, keratoplastics, and other hair treatment drugs and preparations, subsequent encounter -T494X6S Underdosing of keratolytics, keratoplastics, and other hair treatment drugs and preparations, sequela -T495X1A Poisoning by ophthalmological drugs and preparations, accidental (unintentional), initial encounter -T495X1D Poisoning by ophthalmological drugs and preparations, accidental (unintentional), subsequent encounter -T495X1S Poisoning by ophthalmological drugs and preparations, accidental (unintentional), sequela -T495X2A Poisoning by ophthalmological drugs and preparations, intentional self-harm, initial encounter -T495X2D Poisoning by ophthalmological drugs and preparations, intentional self-harm, subsequent encounter -T495X2S Poisoning by ophthalmological drugs and preparations, intentional self-harm, sequela -T495X3A Poisoning by ophthalmological drugs and preparations, assault, initial encounter -T495X3D Poisoning by ophthalmological drugs and preparations, assault, subsequent encounter -T495X3S Poisoning by ophthalmological drugs and preparations, assault, sequela -T495X4A Poisoning by ophthalmological drugs and preparations, undetermined, initial encounter -T495X4D Poisoning by ophthalmological drugs and preparations, undetermined, subsequent encounter -T495X4S Poisoning by ophthalmological drugs and preparations, undetermined, sequela -T495X5A Adverse effect of ophthalmological drugs and preparations, initial encounter -T495X5D Adverse effect of ophthalmological drugs and preparations, subsequent encounter -T495X5S Adverse effect of ophthalmological drugs and preparations, sequela -T495X6A Underdosing of ophthalmological drugs and preparations, initial encounter -T495X6D Underdosing of ophthalmological drugs and preparations, subsequent encounter -T495X6S Underdosing of ophthalmological drugs and preparations, sequela -T496X1A Poisoning by otorhinolaryngological drugs and preparations, accidental (unintentional), initial encounter -T496X1D Poisoning by otorhinolaryngological drugs and preparations, accidental (unintentional), subsequent encounter -T496X1S Poisoning by otorhinolaryngological drugs and preparations, accidental (unintentional), sequela -T496X2A Poisoning by otorhinolaryngological drugs and preparations, intentional self-harm, initial encounter -T496X2D Poisoning by otorhinolaryngological drugs and preparations, intentional self-harm, subsequent encounter -T496X2S Poisoning by otorhinolaryngological drugs and preparations, intentional self-harm, sequela -T496X3A Poisoning by otorhinolaryngological drugs and preparations, assault, initial encounter -T496X3D Poisoning by otorhinolaryngological drugs and preparations, assault, subsequent encounter -T496X3S Poisoning by otorhinolaryngological drugs and preparations, assault, sequela -T496X4A Poisoning by otorhinolaryngological drugs and preparations, undetermined, initial encounter -T496X4D Poisoning by otorhinolaryngological drugs and preparations, undetermined, subsequent encounter -T496X4S Poisoning by otorhinolaryngological drugs and preparations, undetermined, sequela -T496X5A Adverse effect of otorhinolaryngological drugs and preparations, initial encounter -T496X5D Adverse effect of otorhinolaryngological drugs and preparations, subsequent encounter -T496X5S Adverse effect of otorhinolaryngological drugs and preparations, sequela -T496X6A Underdosing of otorhinolaryngological drugs and preparations, initial encounter -T496X6D Underdosing of otorhinolaryngological drugs and preparations, subsequent encounter -T496X6S Underdosing of otorhinolaryngological drugs and preparations, sequela -T497X1A Poisoning by dental drugs, topically applied, accidental (unintentional), initial encounter -T497X1D Poisoning by dental drugs, topically applied, accidental (unintentional), subsequent encounter -T497X1S Poisoning by dental drugs, topically applied, accidental (unintentional), sequela -T497X2A Poisoning by dental drugs, topically applied, intentional self-harm, initial encounter -T497X2D Poisoning by dental drugs, topically applied, intentional self-harm, subsequent encounter -T497X2S Poisoning by dental drugs, topically applied, intentional self-harm, sequela -T497X3A Poisoning by dental drugs, topically applied, assault, initial encounter -T497X3D Poisoning by dental drugs, topically applied, assault, subsequent encounter -T497X3S Poisoning by dental drugs, topically applied, assault, sequela -T497X4A Poisoning by dental drugs, topically applied, undetermined, initial encounter -T497X4D Poisoning by dental drugs, topically applied, undetermined, subsequent encounter -T497X4S Poisoning by dental drugs, topically applied, undetermined, sequela -T497X5A Adverse effect of dental drugs, topically applied, initial encounter -T497X5D Adverse effect of dental drugs, topically applied, subsequent encounter -T497X5S Adverse effect of dental drugs, topically applied, sequela -T497X6A Underdosing of dental drugs, topically applied, initial encounter -T497X6D Underdosing of dental drugs, topically applied, subsequent encounter -T497X6S Underdosing of dental drugs, topically applied, sequela -T498X1A Poisoning by other topical agents, accidental (unintentional), initial encounter -T498X1D Poisoning by other topical agents, accidental (unintentional), subsequent encounter -T498X1S Poisoning by other topical agents, accidental (unintentional), sequela -T498X2A Poisoning by other topical agents, intentional self-harm, initial encounter -T498X2D Poisoning by other topical agents, intentional self-harm, subsequent encounter -T498X2S Poisoning by other topical agents, intentional self-harm, sequela -T498X3A Poisoning by other topical agents, assault, initial encounter -T498X3D Poisoning by other topical agents, assault, subsequent encounter -T498X3S Poisoning by other topical agents, assault, sequela -T498X4A Poisoning by other topical agents, undetermined, initial encounter -T498X4D Poisoning by other topical agents, undetermined, subsequent encounter -T498X4S Poisoning by other topical agents, undetermined, sequela -T498X5A Adverse effect of other topical agents, initial encounter -T498X5D Adverse effect of other topical agents, subsequent encounter -T498X5S Adverse effect of other topical agents, sequela -T498X6A Underdosing of other topical agents, initial encounter -T498X6D Underdosing of other topical agents, subsequent encounter -T498X6S Underdosing of other topical agents, sequela -T4991XA Poisoning by unspecified topical agent, accidental (unintentional), initial encounter -T4991XD Poisoning by unspecified topical agent, accidental (unintentional), subsequent encounter -T4991XS Poisoning by unspecified topical agent, accidental (unintentional), sequela -T4992XA Poisoning by unspecified topical agent, intentional self-harm, initial encounter -T4992XD Poisoning by unspecified topical agent, intentional self-harm, subsequent encounter -T4992XS Poisoning by unspecified topical agent, intentional self-harm, sequela -T4993XA Poisoning by unspecified topical agent, assault, initial encounter -T4993XD Poisoning by unspecified topical agent, assault, subsequent encounter -T4993XS Poisoning by unspecified topical agent, assault, sequela -T4994XA Poisoning by unspecified topical agent, undetermined, initial encounter -T4994XD Poisoning by unspecified topical agent, undetermined, subsequent encounter -T4994XS Poisoning by unspecified topical agent, undetermined, sequela -T4995XA Adverse effect of unspecified topical agent, initial encounter -T4995XD Adverse effect of unspecified topical agent, subsequent encounter -T4995XS Adverse effect of unspecified topical agent, sequela -T4996XA Underdosing of unspecified topical agent, initial encounter -T4996XD Underdosing of unspecified topical agent, subsequent encounter -T4996XS Underdosing of unspecified topical agent, sequela -T500X1A Poisoning by mineralocorticoids and their antagonists, accidental (unintentional), initial encounter -T500X1D Poisoning by mineralocorticoids and their antagonists, accidental (unintentional), subsequent encounter -T500X1S Poisoning by mineralocorticoids and their antagonists, accidental (unintentional), sequela -T500X2A Poisoning by mineralocorticoids and their antagonists, intentional self-harm, initial encounter -T500X2D Poisoning by mineralocorticoids and their antagonists, intentional self-harm, subsequent encounter -T500X2S Poisoning by mineralocorticoids and their antagonists, intentional self-harm, sequela -T500X3A Poisoning by mineralocorticoids and their antagonists, assault, initial encounter -T500X3D Poisoning by mineralocorticoids and their antagonists, assault, subsequent encounter -T500X3S Poisoning by mineralocorticoids and their antagonists, assault, sequela -T500X4A Poisoning by mineralocorticoids and their antagonists, undetermined, initial encounter -T500X4D Poisoning by mineralocorticoids and their antagonists, undetermined, subsequent encounter -T500X4S Poisoning by mineralocorticoids and their antagonists, undetermined, sequela -T500X5A Adverse effect of mineralocorticoids and their antagonists, initial encounter -T500X5D Adverse effect of mineralocorticoids and their antagonists, subsequent encounter -T500X5S Adverse effect of mineralocorticoids and their antagonists, sequela -T500X6A Underdosing of mineralocorticoids and their antagonists, initial encounter -T500X6D Underdosing of mineralocorticoids and their antagonists, subsequent encounter -T500X6S Underdosing of mineralocorticoids and their antagonists, sequela -T501X1A Poisoning by loop [high-ceiling] diuretics, accidental (unintentional), initial encounter -T501X1D Poisoning by loop [high-ceiling] diuretics, accidental (unintentional), subsequent encounter -T501X1S Poisoning by loop [high-ceiling] diuretics, accidental (unintentional), sequela -T501X2A Poisoning by loop [high-ceiling] diuretics, intentional self-harm, initial encounter -T501X2D Poisoning by loop [high-ceiling] diuretics, intentional self-harm, subsequent encounter -T501X2S Poisoning by loop [high-ceiling] diuretics, intentional self-harm, sequela -T501X3A Poisoning by loop [high-ceiling] diuretics, assault, initial encounter -T501X3D Poisoning by loop [high-ceiling] diuretics, assault, subsequent encounter -T501X3S Poisoning by loop [high-ceiling] diuretics, assault, sequela -T501X4A Poisoning by loop [high-ceiling] diuretics, undetermined, initial encounter -T501X4D Poisoning by loop [high-ceiling] diuretics, undetermined, subsequent encounter -T501X4S Poisoning by loop [high-ceiling] diuretics, undetermined, sequela -T501X5A Adverse effect of loop [high-ceiling] diuretics, initial encounter -T501X5D Adverse effect of loop [high-ceiling] diuretics, subsequent encounter -T501X5S Adverse effect of loop [high-ceiling] diuretics, sequela -T501X6A Underdosing of loop [high-ceiling] diuretics, initial encounter -T501X6D Underdosing of loop [high-ceiling] diuretics, subsequent encounter -T501X6S Underdosing of loop [high-ceiling] diuretics, sequela -T502X1A Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, accidental (unintentional), initial encounter -T502X1D Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, accidental (unintentional), subsequent encounter -T502X1S Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, accidental (unintentional), sequela -T502X2A Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, intentional self-harm, initial encounter -T502X2D Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, intentional self-harm, subsequent encounter -T502X2S Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, intentional self-harm, sequela -T502X3A Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, assault, initial encounter -T502X3D Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, assault, subsequent encounter -T502X3S Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, assault, sequela -T502X4A Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, undetermined, initial encounter -T502X4D Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, undetermined, subsequent encounter -T502X4S Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, undetermined, sequela -T502X5A Adverse effect of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, initial encounter -T502X5D Adverse effect of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, subsequent encounter -T502X5S Adverse effect of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, sequela -T502X6A Underdosing of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, initial encounter -T502X6D Underdosing of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, subsequent encounter -T502X6S Underdosing of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, sequela -T503X1A Poisoning by electrolytic, caloric and water-balance agents, accidental (unintentional), initial encounter -T503X1D Poisoning by electrolytic, caloric and water-balance agents, accidental (unintentional), subsequent encounter -T503X1S Poisoning by electrolytic, caloric and water-balance agents, accidental (unintentional), sequela -T503X2A Poisoning by electrolytic, caloric and water-balance agents, intentional self-harm, initial encounter -T503X2D Poisoning by electrolytic, caloric and water-balance agents, intentional self-harm, subsequent encounter -T503X2S Poisoning by electrolytic, caloric and water-balance agents, intentional self-harm, sequela -T503X3A Poisoning by electrolytic, caloric and water-balance agents, assault, initial encounter -T503X3D Poisoning by electrolytic, caloric and water-balance agents, assault, subsequent encounter -T503X3S Poisoning by electrolytic, caloric and water-balance agents, assault, sequela -T503X4A Poisoning by electrolytic, caloric and water-balance agents, undetermined, initial encounter -T503X4D Poisoning by electrolytic, caloric and water-balance agents, undetermined, subsequent encounter -T503X4S Poisoning by electrolytic, caloric and water-balance agents, undetermined, sequela -T503X5A Adverse effect of electrolytic, caloric and water-balance agents, initial encounter -T503X5D Adverse effect of electrolytic, caloric and water-balance agents, subsequent encounter -T503X5S Adverse effect of electrolytic, caloric and water-balance agents, sequela -T503X6A Underdosing of electrolytic, caloric and water-balance agents, initial encounter -T503X6D Underdosing of electrolytic, caloric and water-balance agents, subsequent encounter -T503X6S Underdosing of electrolytic, caloric and water-balance agents, sequela -T504X1A Poisoning by drugs affecting uric acid metabolism, accidental (unintentional), initial encounter -T504X1D Poisoning by drugs affecting uric acid metabolism, accidental (unintentional), subsequent encounter -T504X1S Poisoning by drugs affecting uric acid metabolism, accidental (unintentional), sequela -T504X2A Poisoning by drugs affecting uric acid metabolism, intentional self-harm, initial encounter -T504X2D Poisoning by drugs affecting uric acid metabolism, intentional self-harm, subsequent encounter -T504X2S Poisoning by drugs affecting uric acid metabolism, intentional self-harm, sequela -T504X3A Poisoning by drugs affecting uric acid metabolism, assault, initial encounter -T504X3D Poisoning by drugs affecting uric acid metabolism, assault, subsequent encounter -T504X3S Poisoning by drugs affecting uric acid metabolism, assault, sequela -T504X4A Poisoning by drugs affecting uric acid metabolism, undetermined, initial encounter -T504X4D Poisoning by drugs affecting uric acid metabolism, undetermined, subsequent encounter -T504X4S Poisoning by drugs affecting uric acid metabolism, undetermined, sequela -T504X5A Adverse effect of drugs affecting uric acid metabolism, initial encounter -T504X5D Adverse effect of drugs affecting uric acid metabolism, subsequent encounter -T504X5S Adverse effect of drugs affecting uric acid metabolism, sequela -T504X6A Underdosing of drugs affecting uric acid metabolism, initial encounter -T504X6D Underdosing of drugs affecting uric acid metabolism, subsequent encounter -T504X6S Underdosing of drugs affecting uric acid metabolism, sequela -T505X1A Poisoning by appetite depressants, accidental (unintentional), initial encounter -T505X1D Poisoning by appetite depressants, accidental (unintentional), subsequent encounter -T505X1S Poisoning by appetite depressants, accidental (unintentional), sequela -T505X2A Poisoning by appetite depressants, intentional self-harm, initial encounter -T505X2D Poisoning by appetite depressants, intentional self-harm, subsequent encounter -T505X2S Poisoning by appetite depressants, intentional self-harm, sequela -T505X3A Poisoning by appetite depressants, assault, initial encounter -T505X3D Poisoning by appetite depressants, assault, subsequent encounter -T505X3S Poisoning by appetite depressants, assault, sequela -T505X4A Poisoning by appetite depressants, undetermined, initial encounter -T505X4D Poisoning by appetite depressants, undetermined, subsequent encounter -T505X4S Poisoning by appetite depressants, undetermined, sequela -T505X5A Adverse effect of appetite depressants, initial encounter -T505X5D Adverse effect of appetite depressants, subsequent encounter -T505X5S Adverse effect of appetite depressants, sequela -T505X6A Underdosing of appetite depressants, initial encounter -T505X6D Underdosing of appetite depressants, subsequent encounter -T505X6S Underdosing of appetite depressants, sequela -T506X1A Poisoning by antidotes and chelating agents, accidental (unintentional), initial encounter -T506X1D Poisoning by antidotes and chelating agents, accidental (unintentional), subsequent encounter -T506X1S Poisoning by antidotes and chelating agents, accidental (unintentional), sequela -T506X2A Poisoning by antidotes and chelating agents, intentional self-harm, initial encounter -T506X2D Poisoning by antidotes and chelating agents, intentional self-harm, subsequent encounter -T506X2S Poisoning by antidotes and chelating agents, intentional self-harm, sequela -T506X3A Poisoning by antidotes and chelating agents, assault, initial encounter -T506X3D Poisoning by antidotes and chelating agents, assault, subsequent encounter -T506X3S Poisoning by antidotes and chelating agents, assault, sequela -T506X4A Poisoning by antidotes and chelating agents, undetermined, initial encounter -T506X4D Poisoning by antidotes and chelating agents, undetermined, subsequent encounter -T506X4S Poisoning by antidotes and chelating agents, undetermined, sequela -T506X5A Adverse effect of antidotes and chelating agents, initial encounter -T506X5D Adverse effect of antidotes and chelating agents, subsequent encounter -T506X5S Adverse effect of antidotes and chelating agents, sequela -T506X6A Underdosing of antidotes and chelating agents, initial encounter -T506X6D Underdosing of antidotes and chelating agents, subsequent encounter -T506X6S Underdosing of antidotes and chelating agents, sequela -T507X1A Poisoning by analeptics and opioid receptor antagonists, accidental (unintentional), initial encounter -T507X1D Poisoning by analeptics and opioid receptor antagonists, accidental (unintentional), subsequent encounter -T507X1S Poisoning by analeptics and opioid receptor antagonists, accidental (unintentional), sequela -T507X2A Poisoning by analeptics and opioid receptor antagonists, intentional self-harm, initial encounter -T507X2D Poisoning by analeptics and opioid receptor antagonists, intentional self-harm, subsequent encounter -T507X2S Poisoning by analeptics and opioid receptor antagonists, intentional self-harm, sequela -T507X3A Poisoning by analeptics and opioid receptor antagonists, assault, initial encounter -T507X3D Poisoning by analeptics and opioid receptor antagonists, assault, subsequent encounter -T507X3S Poisoning by analeptics and opioid receptor antagonists, assault, sequela -T507X4A Poisoning by analeptics and opioid receptor antagonists, undetermined, initial encounter -T507X4D Poisoning by analeptics and opioid receptor antagonists, undetermined, subsequent encounter -T507X4S Poisoning by analeptics and opioid receptor antagonists, undetermined, sequela -T507X5A Adverse effect of analeptics and opioid receptor antagonists, initial encounter -T507X5D Adverse effect of analeptics and opioid receptor antagonists, subsequent encounter -T507X5S Adverse effect of analeptics and opioid receptor antagonists, sequela -T507X6A Underdosing of analeptics and opioid receptor antagonists, initial encounter -T507X6D Underdosing of analeptics and opioid receptor antagonists, subsequent encounter -T507X6S Underdosing of analeptics and opioid receptor antagonists, sequela -T508X1A Poisoning by diagnostic agents, accidental (unintentional), initial encounter -T508X1D Poisoning by diagnostic agents, accidental (unintentional), subsequent encounter -T508X1S Poisoning by diagnostic agents, accidental (unintentional), sequela -T508X2A Poisoning by diagnostic agents, intentional self-harm, initial encounter -T508X2D Poisoning by diagnostic agents, intentional self-harm, subsequent encounter -T508X2S Poisoning by diagnostic agents, intentional self-harm, sequela -T508X3A Poisoning by diagnostic agents, assault, initial encounter -T508X3D Poisoning by diagnostic agents, assault, subsequent encounter -T508X3S Poisoning by diagnostic agents, assault, sequela -T508X4A Poisoning by diagnostic agents, undetermined, initial encounter -T508X4D Poisoning by diagnostic agents, undetermined, subsequent encounter -T508X4S Poisoning by diagnostic agents, undetermined, sequela -T508X5A Adverse effect of diagnostic agents, initial encounter -T508X5D Adverse effect of diagnostic agents, subsequent encounter -T508X5S Adverse effect of diagnostic agents, sequela -T508X6A Underdosing of diagnostic agents, initial encounter -T508X6D Underdosing of diagnostic agents, subsequent encounter -T508X6S Underdosing of diagnostic agents, sequela -T50A11A Poisoning by pertussis vaccine, including combinations with a pertussis component, accidental (unintentional), initial encounter -T50A11D Poisoning by pertussis vaccine, including combinations with a pertussis component, accidental (unintentional), subsequent encounter -T50A11S Poisoning by pertussis vaccine, including combinations with a pertussis component, accidental (unintentional), sequela -T50A12A Poisoning by pertussis vaccine, including combinations with a pertussis component, intentional self-harm, initial encounter -T50A12D Poisoning by pertussis vaccine, including combinations with a pertussis component, intentional self-harm, subsequent encounter -T50A12S Poisoning by pertussis vaccine, including combinations with a pertussis component, intentional self-harm, sequela -T50A13A Poisoning by pertussis vaccine, including combinations with a pertussis component, assault, initial encounter -T50A13D Poisoning by pertussis vaccine, including combinations with a pertussis component, assault, subsequent encounter -T50A13S Poisoning by pertussis vaccine, including combinations with a pertussis component, assault, sequela -T50A14A Poisoning by pertussis vaccine, including combinations with a pertussis component, undetermined, initial encounter -T50A14D Poisoning by pertussis vaccine, including combinations with a pertussis component, undetermined, subsequent encounter -T50A14S Poisoning by pertussis vaccine, including combinations with a pertussis component, undetermined, sequela -T50A15A Adverse effect of pertussis vaccine, including combinations with a pertussis component, initial encounter -T50A15D Adverse effect of pertussis vaccine, including combinations with a pertussis component, subsequent encounter -T50A15S Adverse effect of pertussis vaccine, including combinations with a pertussis component, sequela -T50A16A Underdosing of pertussis vaccine, including combinations with a pertussis component, initial encounter -T50A16D Underdosing of pertussis vaccine, including combinations with a pertussis component, subsequent encounter -T50A16S Underdosing of pertussis vaccine, including combinations with a pertussis component, sequela -T50A21A Poisoning by mixed bacterial vaccines without a pertussis component, accidental (unintentional), initial encounter -T50A21D Poisoning by mixed bacterial vaccines without a pertussis component, accidental (unintentional), subsequent encounter -T50A21S Poisoning by mixed bacterial vaccines without a pertussis component, accidental (unintentional), sequela -T50A22A Poisoning by mixed bacterial vaccines without a pertussis component, intentional self-harm, initial encounter -T50A22D Poisoning by mixed bacterial vaccines without a pertussis component, intentional self-harm, subsequent encounter -T50A22S Poisoning by mixed bacterial vaccines without a pertussis component, intentional self-harm, sequela -T50A23A Poisoning by mixed bacterial vaccines without a pertussis component, assault, initial encounter -T50A23D Poisoning by mixed bacterial vaccines without a pertussis component, assault, subsequent encounter -T50A23S Poisoning by mixed bacterial vaccines without a pertussis component, assault, sequela -T50A24A Poisoning by mixed bacterial vaccines without a pertussis component, undetermined, initial encounter -T50A24D Poisoning by mixed bacterial vaccines without a pertussis component, undetermined, subsequent encounter -T50A24S Poisoning by mixed bacterial vaccines without a pertussis component, undetermined, sequela -T50A25A Adverse effect of mixed bacterial vaccines without a pertussis component, initial encounter -T50A25D Adverse effect of mixed bacterial vaccines without a pertussis component, subsequent encounter -T50A25S Adverse effect of mixed bacterial vaccines without a pertussis component, sequela -T50A26A Underdosing of mixed bacterial vaccines without a pertussis component, initial encounter -T50A26D Underdosing of mixed bacterial vaccines without a pertussis component, subsequent encounter -T50A26S Underdosing of mixed bacterial vaccines without a pertussis component, sequela -T50A91A Poisoning by other bacterial vaccines, accidental (unintentional), initial encounter -T50A91D Poisoning by other bacterial vaccines, accidental (unintentional), subsequent encounter -T50A91S Poisoning by other bacterial vaccines, accidental (unintentional), sequela -T50A92A Poisoning by other bacterial vaccines, intentional self-harm, initial encounter -T50A92D Poisoning by other bacterial vaccines, intentional self-harm, subsequent encounter -T50A92S Poisoning by other bacterial vaccines, intentional self-harm, sequela -T50A93A Poisoning by other bacterial vaccines, assault, initial encounter -T50A93D Poisoning by other bacterial vaccines, assault, subsequent encounter -T50A93S Poisoning by other bacterial vaccines, assault, sequela -T50A94A Poisoning by other bacterial vaccines, undetermined, initial encounter -T50A94D Poisoning by other bacterial vaccines, undetermined, subsequent encounter -T50A94S Poisoning by other bacterial vaccines, undetermined, sequela -T50A95A Adverse effect of other bacterial vaccines, initial encounter -T50A95D Adverse effect of other bacterial vaccines, subsequent encounter -T50A95S Adverse effect of other bacterial vaccines, sequela -T50A96A Underdosing of other bacterial vaccines, initial encounter -T50A96D Underdosing of other bacterial vaccines, subsequent encounter -T50A96S Underdosing of other bacterial vaccines, sequela -T50B11A Poisoning by smallpox vaccines, accidental (unintentional), initial encounter -T50B11D Poisoning by smallpox vaccines, accidental (unintentional), subsequent encounter -T50B11S Poisoning by smallpox vaccines, accidental (unintentional), sequela -T50B12A Poisoning by smallpox vaccines, intentional self-harm, initial encounter -T50B12D Poisoning by smallpox vaccines, intentional self-harm, subsequent encounter -T50B12S Poisoning by smallpox vaccines, intentional self-harm, sequela -T50B13A Poisoning by smallpox vaccines, assault, initial encounter -T50B13D Poisoning by smallpox vaccines, assault, subsequent encounter -T50B13S Poisoning by smallpox vaccines, assault, sequela -T50B14A Poisoning by smallpox vaccines, undetermined, initial encounter -T50B14D Poisoning by smallpox vaccines, undetermined, subsequent encounter -T50B14S Poisoning by smallpox vaccines, undetermined, sequela -T50B15A Adverse effect of smallpox vaccines, initial encounter -T50B15D Adverse effect of smallpox vaccines, subsequent encounter -T50B15S Adverse effect of smallpox vaccines, sequela -T50B16A Underdosing of smallpox vaccines, initial encounter -T50B16D Underdosing of smallpox vaccines, subsequent encounter -T50B16S Underdosing of smallpox vaccines, sequela -T50B91A Poisoning by other viral vaccines, accidental (unintentional), initial encounter -T50B91D Poisoning by other viral vaccines, accidental (unintentional), subsequent encounter -T50B91S Poisoning by other viral vaccines, accidental (unintentional), sequela -T50B92A Poisoning by other viral vaccines, intentional self-harm, initial encounter -T50B92D Poisoning by other viral vaccines, intentional self-harm, subsequent encounter -T50B92S Poisoning by other viral vaccines, intentional self-harm, sequela -T50B93A Poisoning by other viral vaccines, assault, initial encounter -T50B93D Poisoning by other viral vaccines, assault, subsequent encounter -T50B93S Poisoning by other viral vaccines, assault, sequela -T50B94A Poisoning by other viral vaccines, undetermined, initial encounter -T50B94D Poisoning by other viral vaccines, undetermined, subsequent encounter -T50B94S Poisoning by other viral vaccines, undetermined, sequela -T50B95A Adverse effect of other viral vaccines, initial encounter -T50B95D Adverse effect of other viral vaccines, subsequent encounter -T50B95S Adverse effect of other viral vaccines, sequela -T50B96A Underdosing of other viral vaccines, initial encounter -T50B96D Underdosing of other viral vaccines, subsequent encounter -T50B96S Underdosing of other viral vaccines, sequela -T50Z11A Poisoning by immunoglobulin, accidental (unintentional), initial encounter -T50Z11D Poisoning by immunoglobulin, accidental (unintentional), subsequent encounter -T50Z11S Poisoning by immunoglobulin, accidental (unintentional), sequela -T50Z12A Poisoning by immunoglobulin, intentional self-harm, initial encounter -T50Z12D Poisoning by immunoglobulin, intentional self-harm, subsequent encounter -T50Z12S Poisoning by immunoglobulin, intentional self-harm, sequela -T50Z13A Poisoning by immunoglobulin, assault, initial encounter -T50Z13D Poisoning by immunoglobulin, assault, subsequent encounter -T50Z13S Poisoning by immunoglobulin, assault, sequela -T50Z14A Poisoning by immunoglobulin, undetermined, initial encounter -T50Z14D Poisoning by immunoglobulin, undetermined, subsequent encounter -T50Z14S Poisoning by immunoglobulin, undetermined, sequela -T50Z15A Adverse effect of immunoglobulin, initial encounter -T50Z15D Adverse effect of immunoglobulin, subsequent encounter -T50Z15S Adverse effect of immunoglobulin, sequela -T50Z16A Underdosing of immunoglobulin, initial encounter -T50Z16D Underdosing of immunoglobulin, subsequent encounter -T50Z16S Underdosing of immunoglobulin, sequela -T50Z91A Poisoning by other vaccines and biological substances, accidental (unintentional), initial encounter -T50Z91D Poisoning by other vaccines and biological substances, accidental (unintentional), subsequent encounter -T50Z91S Poisoning by other vaccines and biological substances, accidental (unintentional), sequela -T50Z92A Poisoning by other vaccines and biological substances, intentional self-harm, initial encounter -T50Z92D Poisoning by other vaccines and biological substances, intentional self-harm, subsequent encounter -T50Z92S Poisoning by other vaccines and biological substances, intentional self-harm, sequela -T50Z93A Poisoning by other vaccines and biological substances, assault, initial encounter -T50Z93D Poisoning by other vaccines and biological substances, assault, subsequent encounter -T50Z93S Poisoning by other vaccines and biological substances, assault, sequela -T50Z94A Poisoning by other vaccines and biological substances, undetermined, initial encounter -T50Z94D Poisoning by other vaccines and biological substances, undetermined, subsequent encounter -T50Z94S Poisoning by other vaccines and biological substances, undetermined, sequela -T50Z95A Adverse effect of other vaccines and biological substances, initial encounter -T50Z95D Adverse effect of other vaccines and biological substances, subsequent encounter -T50Z95S Adverse effect of other vaccines and biological substances, sequela -T50Z96A Underdosing of other vaccines and biological substances, initial encounter -T50Z96D Underdosing of other vaccines and biological substances, subsequent encounter -T50Z96S Underdosing of other vaccines and biological substances, sequela -T50901A Poisoning by unspecified drugs, medicaments and biological substances, accidental (unintentional), initial encounter -T50901D Poisoning by unspecified drugs, medicaments and biological substances, accidental (unintentional), subsequent encounter -T50901S Poisoning by unspecified drugs, medicaments and biological substances, accidental (unintentional), sequela -T50902A Poisoning by unspecified drugs, medicaments and biological substances, intentional self-harm, initial encounter -T50902D Poisoning by unspecified drugs, medicaments and biological substances, intentional self-harm, subsequent encounter -T50902S Poisoning by unspecified drugs, medicaments and biological substances, intentional self-harm, sequela -T50903A Poisoning by unspecified drugs, medicaments and biological substances, assault, initial encounter -T50903D Poisoning by unspecified drugs, medicaments and biological substances, assault, subsequent encounter -T50903S Poisoning by unspecified drugs, medicaments and biological substances, assault, sequela -T50904A Poisoning by unspecified drugs, medicaments and biological substances, undetermined, initial encounter -T50904D Poisoning by unspecified drugs, medicaments and biological substances, undetermined, subsequent encounter -T50904S Poisoning by unspecified drugs, medicaments and biological substances, undetermined, sequela -T50905A Adverse effect of unspecified drugs, medicaments and biological substances, initial encounter -T50905D Adverse effect of unspecified drugs, medicaments and biological substances, subsequent encounter -T50905S Adverse effect of unspecified drugs, medicaments and biological substances, sequela -T50906A Underdosing of unspecified drugs, medicaments and biological substances, initial encounter -T50906D Underdosing of unspecified drugs, medicaments and biological substances, subsequent encounter -T50906S Underdosing of unspecified drugs, medicaments and biological substances, sequela -T50991A Poisoning by other drugs, medicaments and biological substances, accidental (unintentional), initial encounter -T50991D Poisoning by other drugs, medicaments and biological substances, accidental (unintentional), subsequent encounter -T50991S Poisoning by other drugs, medicaments and biological substances, accidental (unintentional), sequela -T50992A Poisoning by other drugs, medicaments and biological substances, intentional self-harm, initial encounter -T50992D Poisoning by other drugs, medicaments and biological substances, intentional self-harm, subsequent encounter -T50992S Poisoning by other drugs, medicaments and biological substances, intentional self-harm, sequela -T50993A Poisoning by other drugs, medicaments and biological substances, assault, initial encounter -T50993D Poisoning by other drugs, medicaments and biological substances, assault, subsequent encounter -T50993S Poisoning by other drugs, medicaments and biological substances, assault, sequela -T50994A Poisoning by other drugs, medicaments and biological substances, undetermined, initial encounter -T50994D Poisoning by other drugs, medicaments and biological substances, undetermined, subsequent encounter -T50994S Poisoning by other drugs, medicaments and biological substances, undetermined, sequela -T50995A Adverse effect of other drugs, medicaments and biological substances, initial encounter -T50995D Adverse effect of other drugs, medicaments and biological substances, subsequent encounter -T50995S Adverse effect of other drugs, medicaments and biological substances, sequela -T50996A Underdosing of other drugs, medicaments and biological substances, initial encounter -T50996D Underdosing of other drugs, medicaments and biological substances, subsequent encounter -T50996S Underdosing of other drugs, medicaments and biological substances, sequela -T510X1A Toxic effect of ethanol, accidental (unintentional), initial encounter -T510X1D Toxic effect of ethanol, accidental (unintentional), subsequent encounter -T510X1S Toxic effect of ethanol, accidental (unintentional), sequela -T510X2A Toxic effect of ethanol, intentional self-harm, initial encounter -T510X2D Toxic effect of ethanol, intentional self-harm, subsequent encounter -T510X2S Toxic effect of ethanol, intentional self-harm, sequela -T510X3A Toxic effect of ethanol, assault, initial encounter -T510X3D Toxic effect of ethanol, assault, subsequent encounter -T510X3S Toxic effect of ethanol, assault, sequela -T510X4A Toxic effect of ethanol, undetermined, initial encounter -T510X4D Toxic effect of ethanol, undetermined, subsequent encounter -T510X4S Toxic effect of ethanol, undetermined, sequela -T511X1A Toxic effect of methanol, accidental (unintentional), initial encounter -T511X1D Toxic effect of methanol, accidental (unintentional), subsequent encounter -T511X1S Toxic effect of methanol, accidental (unintentional), sequela -T511X2A Toxic effect of methanol, intentional self-harm, initial encounter -T511X2D Toxic effect of methanol, intentional self-harm, subsequent encounter -T511X2S Toxic effect of methanol, intentional self-harm, sequela -T511X3A Toxic effect of methanol, assault, initial encounter -T511X3D Toxic effect of methanol, assault, subsequent encounter -T511X3S Toxic effect of methanol, assault, sequela -T511X4A Toxic effect of methanol, undetermined, initial encounter -T511X4D Toxic effect of methanol, undetermined, subsequent encounter -T511X4S Toxic effect of methanol, undetermined, sequela -T512X1A Toxic effect of 2-Propanol, accidental (unintentional), initial encounter -T512X1D Toxic effect of 2-Propanol, accidental (unintentional), subsequent encounter -T512X1S Toxic effect of 2-Propanol, accidental (unintentional), sequela -T512X2A Toxic effect of 2-Propanol, intentional self-harm, initial encounter -T512X2D Toxic effect of 2-Propanol, intentional self-harm, subsequent encounter -T512X2S Toxic effect of 2-Propanol, intentional self-harm, sequela -T512X3A Toxic effect of 2-Propanol, assault, initial encounter -T512X3D Toxic effect of 2-Propanol, assault, subsequent encounter -T512X3S Toxic effect of 2-Propanol, assault, sequela -T512X4A Toxic effect of 2-Propanol, undetermined, initial encounter -T512X4D Toxic effect of 2-Propanol, undetermined, subsequent encounter -T512X4S Toxic effect of 2-Propanol, undetermined, sequela -T513X1A Toxic effect of fusel oil, accidental (unintentional), initial encounter -T513X1D Toxic effect of fusel oil, accidental (unintentional), subsequent encounter -T513X1S Toxic effect of fusel oil, accidental (unintentional), sequela -T513X2A Toxic effect of fusel oil, intentional self-harm, initial encounter -T513X2D Toxic effect of fusel oil, intentional self-harm, subsequent encounter -T513X2S Toxic effect of fusel oil, intentional self-harm, sequela -T513X3A Toxic effect of fusel oil, assault, initial encounter -T513X3D Toxic effect of fusel oil, assault, subsequent encounter -T513X3S Toxic effect of fusel oil, assault, sequela -T513X4A Toxic effect of fusel oil, undetermined, initial encounter -T513X4D Toxic effect of fusel oil, undetermined, subsequent encounter -T513X4S Toxic effect of fusel oil, undetermined, sequela -T518X1A Toxic effect of other alcohols, accidental (unintentional), initial encounter -T518X1D Toxic effect of other alcohols, accidental (unintentional), subsequent encounter -T518X1S Toxic effect of other alcohols, accidental (unintentional), sequela -T518X2A Toxic effect of other alcohols, intentional self-harm, initial encounter -T518X2D Toxic effect of other alcohols, intentional self-harm, subsequent encounter -T518X2S Toxic effect of other alcohols, intentional self-harm, sequela -T518X3A Toxic effect of other alcohols, assault, initial encounter -T518X3D Toxic effect of other alcohols, assault, subsequent encounter -T518X3S Toxic effect of other alcohols, assault, sequela -T518X4A Toxic effect of other alcohols, undetermined, initial encounter -T518X4D Toxic effect of other alcohols, undetermined, subsequent encounter -T518X4S Toxic effect of other alcohols, undetermined, sequela -T5191XA Toxic effect of unspecified alcohol, accidental (unintentional), initial encounter -T5191XD Toxic effect of unspecified alcohol, accidental (unintentional), subsequent encounter -T5191XS Toxic effect of unspecified alcohol, accidental (unintentional), sequela -T5192XA Toxic effect of unspecified alcohol, intentional self-harm, initial encounter -T5192XD Toxic effect of unspecified alcohol, intentional self-harm, subsequent encounter -T5192XS Toxic effect of unspecified alcohol, intentional self-harm, sequela -T5193XA Toxic effect of unspecified alcohol, assault, initial encounter -T5193XD Toxic effect of unspecified alcohol, assault, subsequent encounter -T5193XS Toxic effect of unspecified alcohol, assault, sequela -T5194XA Toxic effect of unspecified alcohol, undetermined, initial encounter -T5194XD Toxic effect of unspecified alcohol, undetermined, subsequent encounter -T5194XS Toxic effect of unspecified alcohol, undetermined, sequela -T520X1A Toxic effect of petroleum products, accidental (unintentional), initial encounter -T520X1D Toxic effect of petroleum products, accidental (unintentional), subsequent encounter -T520X1S Toxic effect of petroleum products, accidental (unintentional), sequela -T520X2A Toxic effect of petroleum products, intentional self-harm, initial encounter -T520X2D Toxic effect of petroleum products, intentional self-harm, subsequent encounter -T520X2S Toxic effect of petroleum products, intentional self-harm, sequela -T520X3A Toxic effect of petroleum products, assault, initial encounter -T520X3D Toxic effect of petroleum products, assault, subsequent encounter -T520X3S Toxic effect of petroleum products, assault, sequela -T520X4A Toxic effect of petroleum products, undetermined, initial encounter -T520X4D Toxic effect of petroleum products, undetermined, subsequent encounter -T520X4S Toxic effect of petroleum products, undetermined, sequela -T521X1A Toxic effect of benzene, accidental (unintentional), initial encounter -T521X1D Toxic effect of benzene, accidental (unintentional), subsequent encounter -T521X1S Toxic effect of benzene, accidental (unintentional), sequela -T521X2A Toxic effect of benzene, intentional self-harm, initial encounter -T521X2D Toxic effect of benzene, intentional self-harm, subsequent encounter -T521X2S Toxic effect of benzene, intentional self-harm, sequela -T521X3A Toxic effect of benzene, assault, initial encounter -T521X3D Toxic effect of benzene, assault, subsequent encounter -T521X3S Toxic effect of benzene, assault, sequela -T521X4A Toxic effect of benzene, undetermined, initial encounter -T521X4D Toxic effect of benzene, undetermined, subsequent encounter -T521X4S Toxic effect of benzene, undetermined, sequela -T522X1A Toxic effect of homologues of benzene, accidental (unintentional), initial encounter -T522X1D Toxic effect of homologues of benzene, accidental (unintentional), subsequent encounter -T522X1S Toxic effect of homologues of benzene, accidental (unintentional), sequela -T522X2A Toxic effect of homologues of benzene, intentional self-harm, initial encounter -T522X2D Toxic effect of homologues of benzene, intentional self-harm, subsequent encounter -T522X2S Toxic effect of homologues of benzene, intentional self-harm, sequela -T522X3A Toxic effect of homologues of benzene, assault, initial encounter -T522X3D Toxic effect of homologues of benzene, assault, subsequent encounter -T522X3S Toxic effect of homologues of benzene, assault, sequela -T522X4A Toxic effect of homologues of benzene, undetermined, initial encounter -T522X4D Toxic effect of homologues of benzene, undetermined, subsequent encounter -T522X4S Toxic effect of homologues of benzene, undetermined, sequela -T523X1A Toxic effect of glycols, accidental (unintentional), initial encounter -T523X1D Toxic effect of glycols, accidental (unintentional), subsequent encounter -T523X1S Toxic effect of glycols, accidental (unintentional), sequela -T523X2A Toxic effect of glycols, intentional self-harm, initial encounter -T523X2D Toxic effect of glycols, intentional self-harm, subsequent encounter -T523X2S Toxic effect of glycols, intentional self-harm, sequela -T523X3A Toxic effect of glycols, assault, initial encounter -T523X3D Toxic effect of glycols, assault, subsequent encounter -T523X3S Toxic effect of glycols, assault, sequela -T523X4A Toxic effect of glycols, undetermined, initial encounter -T523X4D Toxic effect of glycols, undetermined, subsequent encounter -T523X4S Toxic effect of glycols, undetermined, sequela -T524X1A Toxic effect of ketones, accidental (unintentional), initial encounter -T524X1D Toxic effect of ketones, accidental (unintentional), subsequent encounter -T524X1S Toxic effect of ketones, accidental (unintentional), sequela -T524X2A Toxic effect of ketones, intentional self-harm, initial encounter -T524X2D Toxic effect of ketones, intentional self-harm, subsequent encounter -T524X2S Toxic effect of ketones, intentional self-harm, sequela -T524X3A Toxic effect of ketones, assault, initial encounter -T524X3D Toxic effect of ketones, assault, subsequent encounter -T524X3S Toxic effect of ketones, assault, sequela -T524X4A Toxic effect of ketones, undetermined, initial encounter -T524X4D Toxic effect of ketones, undetermined, subsequent encounter -T524X4S Toxic effect of ketones, undetermined, sequela -T528X1A Toxic effect of other organic solvents, accidental (unintentional), initial encounter -T528X1D Toxic effect of other organic solvents, accidental (unintentional), subsequent encounter -T528X1S Toxic effect of other organic solvents, accidental (unintentional), sequela -T528X2A Toxic effect of other organic solvents, intentional self-harm, initial encounter -T528X2D Toxic effect of other organic solvents, intentional self-harm, subsequent encounter -T528X2S Toxic effect of other organic solvents, intentional self-harm, sequela -T528X3A Toxic effect of other organic solvents, assault, initial encounter -T528X3D Toxic effect of other organic solvents, assault, subsequent encounter -T528X3S Toxic effect of other organic solvents, assault, sequela -T528X4A Toxic effect of other organic solvents, undetermined, initial encounter -T528X4D Toxic effect of other organic solvents, undetermined, subsequent encounter -T528X4S Toxic effect of other organic solvents, undetermined, sequela -T5291XA Toxic effect of unspecified organic solvent, accidental (unintentional), initial encounter -T5291XD Toxic effect of unspecified organic solvent, accidental (unintentional), subsequent encounter -T5291XS Toxic effect of unspecified organic solvent, accidental (unintentional), sequela -T5292XA Toxic effect of unspecified organic solvent, intentional self-harm, initial encounter -T5292XD Toxic effect of unspecified organic solvent, intentional self-harm, subsequent encounter -T5292XS Toxic effect of unspecified organic solvent, intentional self-harm, sequela -T5293XA Toxic effect of unspecified organic solvent, assault, initial encounter -T5293XD Toxic effect of unspecified organic solvent, assault, subsequent encounter -T5293XS Toxic effect of unspecified organic solvent, assault, sequela -T5294XA Toxic effect of unspecified organic solvent, undetermined, initial encounter -T5294XD Toxic effect of unspecified organic solvent, undetermined, subsequent encounter -T5294XS Toxic effect of unspecified organic solvent, undetermined, sequela -T530X1A Toxic effect of carbon tetrachloride, accidental (unintentional), initial encounter -T530X1D Toxic effect of carbon tetrachloride, accidental (unintentional), subsequent encounter -T530X1S Toxic effect of carbon tetrachloride, accidental (unintentional), sequela -T530X2A Toxic effect of carbon tetrachloride, intentional self-harm, initial encounter -T530X2D Toxic effect of carbon tetrachloride, intentional self-harm, subsequent encounter -T530X2S Toxic effect of carbon tetrachloride, intentional self-harm, sequela -T530X3A Toxic effect of carbon tetrachloride, assault, initial encounter -T530X3D Toxic effect of carbon tetrachloride, assault, subsequent encounter -T530X3S Toxic effect of carbon tetrachloride, assault, sequela -T530X4A Toxic effect of carbon tetrachloride, undetermined, initial encounter -T530X4D Toxic effect of carbon tetrachloride, undetermined, subsequent encounter -T530X4S Toxic effect of carbon tetrachloride, undetermined, sequela -T531X1A Toxic effect of chloroform, accidental (unintentional), initial encounter -T531X1D Toxic effect of chloroform, accidental (unintentional), subsequent encounter -T531X1S Toxic effect of chloroform, accidental (unintentional), sequela -T531X2A Toxic effect of chloroform, intentional self-harm, initial encounter -T531X2D Toxic effect of chloroform, intentional self-harm, subsequent encounter -T531X2S Toxic effect of chloroform, intentional self-harm, sequela -T531X3A Toxic effect of chloroform, assault, initial encounter -T531X3D Toxic effect of chloroform, assault, subsequent encounter -T531X3S Toxic effect of chloroform, assault, sequela -T531X4A Toxic effect of chloroform, undetermined, initial encounter -T531X4D Toxic effect of chloroform, undetermined, subsequent encounter -T531X4S Toxic effect of chloroform, undetermined, sequela -T532X1A Toxic effect of trichloroethylene, accidental (unintentional), initial encounter -T532X1D Toxic effect of trichloroethylene, accidental (unintentional), subsequent encounter -T532X1S Toxic effect of trichloroethylene, accidental (unintentional), sequela -T532X2A Toxic effect of trichloroethylene, intentional self-harm, initial encounter -T532X2D Toxic effect of trichloroethylene, intentional self-harm, subsequent encounter -T532X2S Toxic effect of trichloroethylene, intentional self-harm, sequela -T532X3A Toxic effect of trichloroethylene, assault, initial encounter -T532X3D Toxic effect of trichloroethylene, assault, subsequent encounter -T532X3S Toxic effect of trichloroethylene, assault, sequela -T532X4A Toxic effect of trichloroethylene, undetermined, initial encounter -T532X4D Toxic effect of trichloroethylene, undetermined, subsequent encounter -T532X4S Toxic effect of trichloroethylene, undetermined, sequela -T533X1A Toxic effect of tetrachloroethylene, accidental (unintentional), initial encounter -T533X1D Toxic effect of tetrachloroethylene, accidental (unintentional), subsequent encounter -T533X1S Toxic effect of tetrachloroethylene, accidental (unintentional), sequela -T533X2A Toxic effect of tetrachloroethylene, intentional self-harm, initial encounter -T533X2D Toxic effect of tetrachloroethylene, intentional self-harm, subsequent encounter -T533X2S Toxic effect of tetrachloroethylene, intentional self-harm, sequela -T533X3A Toxic effect of tetrachloroethylene, assault, initial encounter -T533X3D Toxic effect of tetrachloroethylene, assault, subsequent encounter -T533X3S Toxic effect of tetrachloroethylene, assault, sequela -T533X4A Toxic effect of tetrachloroethylene, undetermined, initial encounter -T533X4D Toxic effect of tetrachloroethylene, undetermined, subsequent encounter -T533X4S Toxic effect of tetrachloroethylene, undetermined, sequela -T534X1A Toxic effect of dichloromethane, accidental (unintentional), initial encounter -T534X1D Toxic effect of dichloromethane, accidental (unintentional), subsequent encounter -T534X1S Toxic effect of dichloromethane, accidental (unintentional), sequela -T534X2A Toxic effect of dichloromethane, intentional self-harm, initial encounter -T534X2D Toxic effect of dichloromethane, intentional self-harm, subsequent encounter -T534X2S Toxic effect of dichloromethane, intentional self-harm, sequela -T534X3A Toxic effect of dichloromethane, assault, initial encounter -T534X3D Toxic effect of dichloromethane, assault, subsequent encounter -T534X3S Toxic effect of dichloromethane, assault, sequela -T534X4A Toxic effect of dichloromethane, undetermined, initial encounter -T534X4D Toxic effect of dichloromethane, undetermined, subsequent encounter -T534X4S Toxic effect of dichloromethane, undetermined, sequela -T535X1A Toxic effect of chlorofluorocarbons, accidental (unintentional), initial encounter -T535X1D Toxic effect of chlorofluorocarbons, accidental (unintentional), subsequent encounter -T535X1S Toxic effect of chlorofluorocarbons, accidental (unintentional), sequela -T535X2A Toxic effect of chlorofluorocarbons, intentional self-harm, initial encounter -T535X2D Toxic effect of chlorofluorocarbons, intentional self-harm, subsequent encounter -T535X2S Toxic effect of chlorofluorocarbons, intentional self-harm, sequela -T535X3A Toxic effect of chlorofluorocarbons, assault, initial encounter -T535X3D Toxic effect of chlorofluorocarbons, assault, subsequent encounter -T535X3S Toxic effect of chlorofluorocarbons, assault, sequela -T535X4A Toxic effect of chlorofluorocarbons, undetermined, initial encounter -T535X4D Toxic effect of chlorofluorocarbons, undetermined, subsequent encounter -T535X4S Toxic effect of chlorofluorocarbons, undetermined, sequela -T536X1A Toxic effect of other halogen derivatives of aliphatic hydrocarbons, accidental (unintentional), initial encounter -T536X1D Toxic effect of other halogen derivatives of aliphatic hydrocarbons, accidental (unintentional), subsequent encounter -T536X1S Toxic effect of other halogen derivatives of aliphatic hydrocarbons, accidental (unintentional), sequela -T536X2A Toxic effect of other halogen derivatives of aliphatic hydrocarbons, intentional self-harm, initial encounter -T536X2D Toxic effect of other halogen derivatives of aliphatic hydrocarbons, intentional self-harm, subsequent encounter -T536X2S Toxic effect of other halogen derivatives of aliphatic hydrocarbons, intentional self-harm, sequela -T536X3A Toxic effect of other halogen derivatives of aliphatic hydrocarbons, assault, initial encounter -T536X3D Toxic effect of other halogen derivatives of aliphatic hydrocarbons, assault, subsequent encounter -T536X3S Toxic effect of other halogen derivatives of aliphatic hydrocarbons, assault, sequela -T536X4A Toxic effect of other halogen derivatives of aliphatic hydrocarbons, undetermined, initial encounter -T536X4D Toxic effect of other halogen derivatives of aliphatic hydrocarbons, undetermined, subsequent encounter -T536X4S Toxic effect of other halogen derivatives of aliphatic hydrocarbons, undetermined, sequela -T537X1A Toxic effect of other halogen derivatives of aromatic hydrocarbons, accidental (unintentional), initial encounter -T537X1D Toxic effect of other halogen derivatives of aromatic hydrocarbons, accidental (unintentional), subsequent encounter -T537X1S Toxic effect of other halogen derivatives of aromatic hydrocarbons, accidental (unintentional), sequela -T537X2A Toxic effect of other halogen derivatives of aromatic hydrocarbons, intentional self-harm, initial encounter -T537X2D Toxic effect of other halogen derivatives of aromatic hydrocarbons, intentional self-harm, subsequent encounter -T537X2S Toxic effect of other halogen derivatives of aromatic hydrocarbons, intentional self-harm, sequela -T537X3A Toxic effect of other halogen derivatives of aromatic hydrocarbons, assault, initial encounter -T537X3D Toxic effect of other halogen derivatives of aromatic hydrocarbons, assault, subsequent encounter -T537X3S Toxic effect of other halogen derivatives of aromatic hydrocarbons, assault, sequela -T537X4A Toxic effect of other halogen derivatives of aromatic hydrocarbons, undetermined, initial encounter -T537X4D Toxic effect of other halogen derivatives of aromatic hydrocarbons, undetermined, subsequent encounter -T537X4S Toxic effect of other halogen derivatives of aromatic hydrocarbons, undetermined, sequela -T5391XA Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, accidental (unintentional), initial encounter -T5391XD Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, accidental (unintentional), subsequent encounter -T5391XS Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, accidental (unintentional), sequela -T5392XA Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, intentional self-harm, initial encounter -T5392XD Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, intentional self-harm, subsequent encounter -T5392XS Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, intentional self-harm, sequela -T5393XA Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, assault, initial encounter -T5393XD Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, assault, subsequent encounter -T5393XS Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, assault, sequela -T5394XA Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, undetermined, initial encounter -T5394XD Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, undetermined, subsequent encounter -T5394XS Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, undetermined, sequela -T540X1A Toxic effect of phenol and phenol homologues, accidental (unintentional), initial encounter -T540X1D Toxic effect of phenol and phenol homologues, accidental (unintentional), subsequent encounter -T540X1S Toxic effect of phenol and phenol homologues, accidental (unintentional), sequela -T540X2A Toxic effect of phenol and phenol homologues, intentional self-harm, initial encounter -T540X2D Toxic effect of phenol and phenol homologues, intentional self-harm, subsequent encounter -T540X2S Toxic effect of phenol and phenol homologues, intentional self-harm, sequela -T540X3A Toxic effect of phenol and phenol homologues, assault, initial encounter -T540X3D Toxic effect of phenol and phenol homologues, assault, subsequent encounter -T540X3S Toxic effect of phenol and phenol homologues, assault, sequela -T540X4A Toxic effect of phenol and phenol homologues, undetermined, initial encounter -T540X4D Toxic effect of phenol and phenol homologues, undetermined, subsequent encounter -T540X4S Toxic effect of phenol and phenol homologues, undetermined, sequela -T541X1A Toxic effect of other corrosive organic compounds, accidental (unintentional), initial encounter -T541X1D Toxic effect of other corrosive organic compounds, accidental (unintentional), subsequent encounter -T541X1S Toxic effect of other corrosive organic compounds, accidental (unintentional), sequela -T541X2A Toxic effect of other corrosive organic compounds, intentional self-harm, initial encounter -T541X2D Toxic effect of other corrosive organic compounds, intentional self-harm, subsequent encounter -T541X2S Toxic effect of other corrosive organic compounds, intentional self-harm, sequela -T541X3A Toxic effect of other corrosive organic compounds, assault, initial encounter -T541X3D Toxic effect of other corrosive organic compounds, assault, subsequent encounter -T541X3S Toxic effect of other corrosive organic compounds, assault, sequela -T541X4A Toxic effect of other corrosive organic compounds, undetermined, initial encounter -T541X4D Toxic effect of other corrosive organic compounds, undetermined, subsequent encounter -T541X4S Toxic effect of other corrosive organic compounds, undetermined, sequela -T542X1A Toxic effect of corrosive acids and acid-like substances, accidental (unintentional), initial encounter -T542X1D Toxic effect of corrosive acids and acid-like substances, accidental (unintentional), subsequent encounter -T542X1S Toxic effect of corrosive acids and acid-like substances, accidental (unintentional), sequela -T542X2A Toxic effect of corrosive acids and acid-like substances, intentional self-harm, initial encounter -T542X2D Toxic effect of corrosive acids and acid-like substances, intentional self-harm, subsequent encounter -T542X2S Toxic effect of corrosive acids and acid-like substances, intentional self-harm, sequela -T542X3A Toxic effect of corrosive acids and acid-like substances, assault, initial encounter -T542X3D Toxic effect of corrosive acids and acid-like substances, assault, subsequent encounter -T542X3S Toxic effect of corrosive acids and acid-like substances, assault, sequela -T542X4A Toxic effect of corrosive acids and acid-like substances, undetermined, initial encounter -T542X4D Toxic effect of corrosive acids and acid-like substances, undetermined, subsequent encounter -T542X4S Toxic effect of corrosive acids and acid-like substances, undetermined, sequela -T543X1A Toxic effect of corrosive alkalis and alkali-like substances, accidental (unintentional), initial encounter -T543X1D Toxic effect of corrosive alkalis and alkali-like substances, accidental (unintentional), subsequent encounter -T543X1S Toxic effect of corrosive alkalis and alkali-like substances, accidental (unintentional), sequela -T543X2A Toxic effect of corrosive alkalis and alkali-like substances, intentional self-harm, initial encounter -T543X2D Toxic effect of corrosive alkalis and alkali-like substances, intentional self-harm, subsequent encounter -T543X2S Toxic effect of corrosive alkalis and alkali-like substances, intentional self-harm, sequela -T543X3A Toxic effect of corrosive alkalis and alkali-like substances, assault, initial encounter -T543X3D Toxic effect of corrosive alkalis and alkali-like substances, assault, subsequent encounter -T543X3S Toxic effect of corrosive alkalis and alkali-like substances, assault, sequela -T543X4A Toxic effect of corrosive alkalis and alkali-like substances, undetermined, initial encounter -T543X4D Toxic effect of corrosive alkalis and alkali-like substances, undetermined, subsequent encounter -T543X4S Toxic effect of corrosive alkalis and alkali-like substances, undetermined, sequela -T5491XA Toxic effect of unspecified corrosive substance, accidental (unintentional), initial encounter -T5491XD Toxic effect of unspecified corrosive substance, accidental (unintentional), subsequent encounter -T5491XS Toxic effect of unspecified corrosive substance, accidental (unintentional), sequela -T5492XA Toxic effect of unspecified corrosive substance, intentional self-harm, initial encounter -T5492XD Toxic effect of unspecified corrosive substance, intentional self-harm, subsequent encounter -T5492XS Toxic effect of unspecified corrosive substance, intentional self-harm, sequela -T5493XA Toxic effect of unspecified corrosive substance, assault, initial encounter -T5493XD Toxic effect of unspecified corrosive substance, assault, subsequent encounter -T5493XS Toxic effect of unspecified corrosive substance, assault, sequela -T5494XA Toxic effect of unspecified corrosive substance, undetermined, initial encounter -T5494XD Toxic effect of unspecified corrosive substance, undetermined, subsequent encounter -T5494XS Toxic effect of unspecified corrosive substance, undetermined, sequela -T550X1A Toxic effect of soaps, accidental (unintentional), initial encounter -T550X1D Toxic effect of soaps, accidental (unintentional), subsequent encounter -T550X1S Toxic effect of soaps, accidental (unintentional), sequela -T550X2A Toxic effect of soaps, intentional self-harm, initial encounter -T550X2D Toxic effect of soaps, intentional self-harm, subsequent encounter -T550X2S Toxic effect of soaps, intentional self-harm, sequela -T550X3A Toxic effect of soaps, assault, initial encounter -T550X3D Toxic effect of soaps, assault, subsequent encounter -T550X3S Toxic effect of soaps, assault, sequela -T550X4A Toxic effect of soaps, undetermined, initial encounter -T550X4D Toxic effect of soaps, undetermined, subsequent encounter -T550X4S Toxic effect of soaps, undetermined, sequela -T551X1A Toxic effect of detergents, accidental (unintentional), initial encounter -T551X1D Toxic effect of detergents, accidental (unintentional), subsequent encounter -T551X1S Toxic effect of detergents, accidental (unintentional), sequela -T551X2A Toxic effect of detergents, intentional self-harm, initial encounter -T551X2D Toxic effect of detergents, intentional self-harm, subsequent encounter -T551X2S Toxic effect of detergents, intentional self-harm, sequela -T551X3A Toxic effect of detergents, assault, initial encounter -T551X3D Toxic effect of detergents, assault, subsequent encounter -T551X3S Toxic effect of detergents, assault, sequela -T551X4A Toxic effect of detergents, undetermined, initial encounter -T551X4D Toxic effect of detergents, undetermined, subsequent encounter -T551X4S Toxic effect of detergents, undetermined, sequela -T560X1A Toxic effect of lead and its compounds, accidental (unintentional), initial encounter -T560X1D Toxic effect of lead and its compounds, accidental (unintentional), subsequent encounter -T560X1S Toxic effect of lead and its compounds, accidental (unintentional), sequela -T560X2A Toxic effect of lead and its compounds, intentional self-harm, initial encounter -T560X2D Toxic effect of lead and its compounds, intentional self-harm, subsequent encounter -T560X2S Toxic effect of lead and its compounds, intentional self-harm, sequela -T560X3A Toxic effect of lead and its compounds, assault, initial encounter -T560X3D Toxic effect of lead and its compounds, assault, subsequent encounter -T560X3S Toxic effect of lead and its compounds, assault, sequela -T560X4A Toxic effect of lead and its compounds, undetermined, initial encounter -T560X4D Toxic effect of lead and its compounds, undetermined, subsequent encounter -T560X4S Toxic effect of lead and its compounds, undetermined, sequela -T561X1A Toxic effect of mercury and its compounds, accidental (unintentional), initial encounter -T561X1D Toxic effect of mercury and its compounds, accidental (unintentional), subsequent encounter -T561X1S Toxic effect of mercury and its compounds, accidental (unintentional), sequela -T561X2A Toxic effect of mercury and its compounds, intentional self-harm, initial encounter -T561X2D Toxic effect of mercury and its compounds, intentional self-harm, subsequent encounter -T561X2S Toxic effect of mercury and its compounds, intentional self-harm, sequela -T561X3A Toxic effect of mercury and its compounds, assault, initial encounter -T561X3D Toxic effect of mercury and its compounds, assault, subsequent encounter -T561X3S Toxic effect of mercury and its compounds, assault, sequela -T561X4A Toxic effect of mercury and its compounds, undetermined, initial encounter -T561X4D Toxic effect of mercury and its compounds, undetermined, subsequent encounter -T561X4S Toxic effect of mercury and its compounds, undetermined, sequela -T562X1A Toxic effect of chromium and its compounds, accidental (unintentional), initial encounter -T562X1D Toxic effect of chromium and its compounds, accidental (unintentional), subsequent encounter -T562X1S Toxic effect of chromium and its compounds, accidental (unintentional), sequela -T562X2A Toxic effect of chromium and its compounds, intentional self-harm, initial encounter -T562X2D Toxic effect of chromium and its compounds, intentional self-harm, subsequent encounter -T562X2S Toxic effect of chromium and its compounds, intentional self-harm, sequela -T562X3A Toxic effect of chromium and its compounds, assault, initial encounter -T562X3D Toxic effect of chromium and its compounds, assault, subsequent encounter -T562X3S Toxic effect of chromium and its compounds, assault, sequela -T562X4A Toxic effect of chromium and its compounds, undetermined, initial encounter -T562X4D Toxic effect of chromium and its compounds, undetermined, subsequent encounter -T562X4S Toxic effect of chromium and its compounds, undetermined, sequela -T563X1A Toxic effect of cadmium and its compounds, accidental (unintentional), initial encounter -T563X1D Toxic effect of cadmium and its compounds, accidental (unintentional), subsequent encounter -T563X1S Toxic effect of cadmium and its compounds, accidental (unintentional), sequela -T563X2A Toxic effect of cadmium and its compounds, intentional self-harm, initial encounter -T563X2D Toxic effect of cadmium and its compounds, intentional self-harm, subsequent encounter -T563X2S Toxic effect of cadmium and its compounds, intentional self-harm, sequela -T563X3A Toxic effect of cadmium and its compounds, assault, initial encounter -T563X3D Toxic effect of cadmium and its compounds, assault, subsequent encounter -T563X3S Toxic effect of cadmium and its compounds, assault, sequela -T563X4A Toxic effect of cadmium and its compounds, undetermined, initial encounter -T563X4D Toxic effect of cadmium and its compounds, undetermined, subsequent encounter -T563X4S Toxic effect of cadmium and its compounds, undetermined, sequela -T564X1A Toxic effect of copper and its compounds, accidental (unintentional), initial encounter -T564X1D Toxic effect of copper and its compounds, accidental (unintentional), subsequent encounter -T564X1S Toxic effect of copper and its compounds, accidental (unintentional), sequela -T564X2A Toxic effect of copper and its compounds, intentional self-harm, initial encounter -T564X2D Toxic effect of copper and its compounds, intentional self-harm, subsequent encounter -T564X2S Toxic effect of copper and its compounds, intentional self-harm, sequela -T564X3A Toxic effect of copper and its compounds, assault, initial encounter -T564X3D Toxic effect of copper and its compounds, assault, subsequent encounter -T564X3S Toxic effect of copper and its compounds, assault, sequela -T564X4A Toxic effect of copper and its compounds, undetermined, initial encounter -T564X4D Toxic effect of copper and its compounds, undetermined, subsequent encounter -T564X4S Toxic effect of copper and its compounds, undetermined, sequela -T565X1A Toxic effect of zinc and its compounds, accidental (unintentional), initial encounter -T565X1D Toxic effect of zinc and its compounds, accidental (unintentional), subsequent encounter -T565X1S Toxic effect of zinc and its compounds, accidental (unintentional), sequela -T565X2A Toxic effect of zinc and its compounds, intentional self-harm, initial encounter -T565X2D Toxic effect of zinc and its compounds, intentional self-harm, subsequent encounter -T565X2S Toxic effect of zinc and its compounds, intentional self-harm, sequela -T565X3A Toxic effect of zinc and its compounds, assault, initial encounter -T565X3D Toxic effect of zinc and its compounds, assault, subsequent encounter -T565X3S Toxic effect of zinc and its compounds, assault, sequela -T565X4A Toxic effect of zinc and its compounds, undetermined, initial encounter -T565X4D Toxic effect of zinc and its compounds, undetermined, subsequent encounter -T565X4S Toxic effect of zinc and its compounds, undetermined, sequela -T566X1A Toxic effect of tin and its compounds, accidental (unintentional), initial encounter -T566X1D Toxic effect of tin and its compounds, accidental (unintentional), subsequent encounter -T566X1S Toxic effect of tin and its compounds, accidental (unintentional), sequela -T566X2A Toxic effect of tin and its compounds, intentional self-harm, initial encounter -T566X2D Toxic effect of tin and its compounds, intentional self-harm, subsequent encounter -T566X2S Toxic effect of tin and its compounds, intentional self-harm, sequela -T566X3A Toxic effect of tin and its compounds, assault, initial encounter -T566X3D Toxic effect of tin and its compounds, assault, subsequent encounter -T566X3S Toxic effect of tin and its compounds, assault, sequela -T566X4A Toxic effect of tin and its compounds, undetermined, initial encounter -T566X4D Toxic effect of tin and its compounds, undetermined, subsequent encounter -T566X4S Toxic effect of tin and its compounds, undetermined, sequela -T567X1A Toxic effect of beryllium and its compounds, accidental (unintentional), initial encounter -T567X1D Toxic effect of beryllium and its compounds, accidental (unintentional), subsequent encounter -T567X1S Toxic effect of beryllium and its compounds, accidental (unintentional), sequela -T567X2A Toxic effect of beryllium and its compounds, intentional self-harm, initial encounter -T567X2D Toxic effect of beryllium and its compounds, intentional self-harm, subsequent encounter -T567X2S Toxic effect of beryllium and its compounds, intentional self-harm, sequela -T567X3A Toxic effect of beryllium and its compounds, assault, initial encounter -T567X3D Toxic effect of beryllium and its compounds, assault, subsequent encounter -T567X3S Toxic effect of beryllium and its compounds, assault, sequela -T567X4A Toxic effect of beryllium and its compounds, undetermined, initial encounter -T567X4D Toxic effect of beryllium and its compounds, undetermined, subsequent encounter -T567X4S Toxic effect of beryllium and its compounds, undetermined, sequela -T56811A Toxic effect of thallium, accidental (unintentional), initial encounter -T56811D Toxic effect of thallium, accidental (unintentional), subsequent encounter -T56811S Toxic effect of thallium, accidental (unintentional), sequela -T56812A Toxic effect of thallium, intentional self-harm, initial encounter -T56812D Toxic effect of thallium, intentional self-harm, subsequent encounter -T56812S Toxic effect of thallium, intentional self-harm, sequela -T56813A Toxic effect of thallium, assault, initial encounter -T56813D Toxic effect of thallium, assault, subsequent encounter -T56813S Toxic effect of thallium, assault, sequela -T56814A Toxic effect of thallium, undetermined, initial encounter -T56814D Toxic effect of thallium, undetermined, subsequent encounter -T56814S Toxic effect of thallium, undetermined, sequela -T56891A Toxic effect of other metals, accidental (unintentional), initial encounter -T56891D Toxic effect of other metals, accidental (unintentional), subsequent encounter -T56891S Toxic effect of other metals, accidental (unintentional), sequela -T56892A Toxic effect of other metals, intentional self-harm, initial encounter -T56892D Toxic effect of other metals, intentional self-harm, subsequent encounter -T56892S Toxic effect of other metals, intentional self-harm, sequela -T56893A Toxic effect of other metals, assault, initial encounter -T56893D Toxic effect of other metals, assault, subsequent encounter -T56893S Toxic effect of other metals, assault, sequela -T56894A Toxic effect of other metals, undetermined, initial encounter -T56894D Toxic effect of other metals, undetermined, subsequent encounter -T56894S Toxic effect of other metals, undetermined, sequela -T5691XA Toxic effect of unspecified metal, accidental (unintentional), initial encounter -T5691XD Toxic effect of unspecified metal, accidental (unintentional), subsequent encounter -T5691XS Toxic effect of unspecified metal, accidental (unintentional), sequela -T5692XA Toxic effect of unspecified metal, intentional self-harm, initial encounter -T5692XD Toxic effect of unspecified metal, intentional self-harm, subsequent encounter -T5692XS Toxic effect of unspecified metal, intentional self-harm, sequela -T5693XA Toxic effect of unspecified metal, assault, initial encounter -T5693XD Toxic effect of unspecified metal, assault, subsequent encounter -T5693XS Toxic effect of unspecified metal, assault, sequela -T5694XA Toxic effect of unspecified metal, undetermined, initial encounter -T5694XD Toxic effect of unspecified metal, undetermined, subsequent encounter -T5694XS Toxic effect of unspecified metal, undetermined, sequela -T570X1A Toxic effect of arsenic and its compounds, accidental (unintentional), initial encounter -T570X1D Toxic effect of arsenic and its compounds, accidental (unintentional), subsequent encounter -T570X1S Toxic effect of arsenic and its compounds, accidental (unintentional), sequela -T570X2A Toxic effect of arsenic and its compounds, intentional self-harm, initial encounter -T570X2D Toxic effect of arsenic and its compounds, intentional self-harm, subsequent encounter -T570X2S Toxic effect of arsenic and its compounds, intentional self-harm, sequela -T570X3A Toxic effect of arsenic and its compounds, assault, initial encounter -T570X3D Toxic effect of arsenic and its compounds, assault, subsequent encounter -T570X3S Toxic effect of arsenic and its compounds, assault, sequela -T570X4A Toxic effect of arsenic and its compounds, undetermined, initial encounter -T570X4D Toxic effect of arsenic and its compounds, undetermined, subsequent encounter -T570X4S Toxic effect of arsenic and its compounds, undetermined, sequela -T571X1A Toxic effect of phosphorus and its compounds, accidental (unintentional), initial encounter -T571X1D Toxic effect of phosphorus and its compounds, accidental (unintentional), subsequent encounter -T571X1S Toxic effect of phosphorus and its compounds, accidental (unintentional), sequela -T571X2A Toxic effect of phosphorus and its compounds, intentional self-harm, initial encounter -T571X2D Toxic effect of phosphorus and its compounds, intentional self-harm, subsequent encounter -T571X2S Toxic effect of phosphorus and its compounds, intentional self-harm, sequela -T571X3A Toxic effect of phosphorus and its compounds, assault, initial encounter -T571X3D Toxic effect of phosphorus and its compounds, assault, subsequent encounter -T571X3S Toxic effect of phosphorus and its compounds, assault, sequela -T571X4A Toxic effect of phosphorus and its compounds, undetermined, initial encounter -T571X4D Toxic effect of phosphorus and its compounds, undetermined, subsequent encounter -T571X4S Toxic effect of phosphorus and its compounds, undetermined, sequela -T572X1A Toxic effect of manganese and its compounds, accidental (unintentional), initial encounter -T572X1D Toxic effect of manganese and its compounds, accidental (unintentional), subsequent encounter -T572X1S Toxic effect of manganese and its compounds, accidental (unintentional), sequela -T572X2A Toxic effect of manganese and its compounds, intentional self-harm, initial encounter -T572X2D Toxic effect of manganese and its compounds, intentional self-harm, subsequent encounter -T572X2S Toxic effect of manganese and its compounds, intentional self-harm, sequela -T572X3A Toxic effect of manganese and its compounds, assault, initial encounter -T572X3D Toxic effect of manganese and its compounds, assault, subsequent encounter -T572X3S Toxic effect of manganese and its compounds, assault, sequela -T572X4A Toxic effect of manganese and its compounds, undetermined, initial encounter -T572X4D Toxic effect of manganese and its compounds, undetermined, subsequent encounter -T572X4S Toxic effect of manganese and its compounds, undetermined, sequela -T573X1A Toxic effect of hydrogen cyanide, accidental (unintentional), initial encounter -T573X1D Toxic effect of hydrogen cyanide, accidental (unintentional), subsequent encounter -T573X1S Toxic effect of hydrogen cyanide, accidental (unintentional), sequela -T573X2A Toxic effect of hydrogen cyanide, intentional self-harm, initial encounter -T573X2D Toxic effect of hydrogen cyanide, intentional self-harm, subsequent encounter -T573X2S Toxic effect of hydrogen cyanide, intentional self-harm, sequela -T573X3A Toxic effect of hydrogen cyanide, assault, initial encounter -T573X3D Toxic effect of hydrogen cyanide, assault, subsequent encounter -T573X3S Toxic effect of hydrogen cyanide, assault, sequela -T573X4A Toxic effect of hydrogen cyanide, undetermined, initial encounter -T573X4D Toxic effect of hydrogen cyanide, undetermined, subsequent encounter -T573X4S Toxic effect of hydrogen cyanide, undetermined, sequela -T578X1A Toxic effect of other specified inorganic substances, accidental (unintentional), initial encounter -T578X1D Toxic effect of other specified inorganic substances, accidental (unintentional), subsequent encounter -T578X1S Toxic effect of other specified inorganic substances, accidental (unintentional), sequela -T578X2A Toxic effect of other specified inorganic substances, intentional self-harm, initial encounter -T578X2D Toxic effect of other specified inorganic substances, intentional self-harm, subsequent encounter -T578X2S Toxic effect of other specified inorganic substances, intentional self-harm, sequela -T578X3A Toxic effect of other specified inorganic substances, assault, initial encounter -T578X3D Toxic effect of other specified inorganic substances, assault, subsequent encounter -T578X3S Toxic effect of other specified inorganic substances, assault, sequela -T578X4A Toxic effect of other specified inorganic substances, undetermined, initial encounter -T578X4D Toxic effect of other specified inorganic substances, undetermined, subsequent encounter -T578X4S Toxic effect of other specified inorganic substances, undetermined, sequela -T5791XA Toxic effect of unspecified inorganic substance, accidental (unintentional), initial encounter -T5791XD Toxic effect of unspecified inorganic substance, accidental (unintentional), subsequent encounter -T5791XS Toxic effect of unspecified inorganic substance, accidental (unintentional), sequela -T5792XA Toxic effect of unspecified inorganic substance, intentional self-harm, initial encounter -T5792XD Toxic effect of unspecified inorganic substance, intentional self-harm, subsequent encounter -T5792XS Toxic effect of unspecified inorganic substance, intentional self-harm, sequela -T5793XA Toxic effect of unspecified inorganic substance, assault, initial encounter -T5793XD Toxic effect of unspecified inorganic substance, assault, subsequent encounter -T5793XS Toxic effect of unspecified inorganic substance, assault, sequela -T5794XA Toxic effect of unspecified inorganic substance, undetermined, initial encounter -T5794XD Toxic effect of unspecified inorganic substance, undetermined, subsequent encounter -T5794XS Toxic effect of unspecified inorganic substance, undetermined, sequela -T5801XA Toxic effect of carbon monoxide from motor vehicle exhaust, accidental (unintentional), initial encounter -T5801XD Toxic effect of carbon monoxide from motor vehicle exhaust, accidental (unintentional), subsequent encounter -T5801XS Toxic effect of carbon monoxide from motor vehicle exhaust, accidental (unintentional), sequela -T5802XA Toxic effect of carbon monoxide from motor vehicle exhaust, intentional self-harm, initial encounter -T5802XD Toxic effect of carbon monoxide from motor vehicle exhaust, intentional self-harm, subsequent encounter -T5802XS Toxic effect of carbon monoxide from motor vehicle exhaust, intentional self-harm, sequela -T5803XA Toxic effect of carbon monoxide from motor vehicle exhaust, assault, initial encounter -T5803XD Toxic effect of carbon monoxide from motor vehicle exhaust, assault, subsequent encounter -T5803XS Toxic effect of carbon monoxide from motor vehicle exhaust, assault, sequela -T5804XA Toxic effect of carbon monoxide from motor vehicle exhaust, undetermined, initial encounter -T5804XD Toxic effect of carbon monoxide from motor vehicle exhaust, undetermined, subsequent encounter -T5804XS Toxic effect of carbon monoxide from motor vehicle exhaust, undetermined, sequela -T5811XA Toxic effect of carbon monoxide from utility gas, accidental (unintentional), initial encounter -T5811XD Toxic effect of carbon monoxide from utility gas, accidental (unintentional), subsequent encounter -T5811XS Toxic effect of carbon monoxide from utility gas, accidental (unintentional), sequela -T5812XA Toxic effect of carbon monoxide from utility gas, intentional self-harm, initial encounter -T5812XD Toxic effect of carbon monoxide from utility gas, intentional self-harm, subsequent encounter -T5812XS Toxic effect of carbon monoxide from utility gas, intentional self-harm, sequela -T5813XA Toxic effect of carbon monoxide from utility gas, assault, initial encounter -T5813XD Toxic effect of carbon monoxide from utility gas, assault, subsequent encounter -T5813XS Toxic effect of carbon monoxide from utility gas, assault, sequela -T5814XA Toxic effect of carbon monoxide from utility gas, undetermined, initial encounter -T5814XD Toxic effect of carbon monoxide from utility gas, undetermined, subsequent encounter -T5814XS Toxic effect of carbon monoxide from utility gas, undetermined, sequela -T582X1A Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, accidental (unintentional), initial encounter -T582X1D Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, accidental (unintentional), subsequent encounter -T582X1S Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, accidental (unintentional), sequela -T582X2A Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, intentional self-harm, initial encounter -T582X2D Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, intentional self-harm, subsequent encounter -T582X2S Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, intentional self-harm, sequela -T582X3A Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, assault, initial encounter -T582X3D Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, assault, subsequent encounter -T582X3S Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, assault, sequela -T582X4A Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, undetermined, initial encounter -T582X4D Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, undetermined, subsequent encounter -T582X4S Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, undetermined, sequela -T588X1A Toxic effect of carbon monoxide from other source, accidental (unintentional), initial encounter -T588X1D Toxic effect of carbon monoxide from other source, accidental (unintentional), subsequent encounter -T588X1S Toxic effect of carbon monoxide from other source, accidental (unintentional), sequela -T588X2A Toxic effect of carbon monoxide from other source, intentional self-harm, initial encounter -T588X2D Toxic effect of carbon monoxide from other source, intentional self-harm, subsequent encounter -T588X2S Toxic effect of carbon monoxide from other source, intentional self-harm, sequela -T588X3A Toxic effect of carbon monoxide from other source, assault, initial encounter -T588X3D Toxic effect of carbon monoxide from other source, assault, subsequent encounter -T588X3S Toxic effect of carbon monoxide from other source, assault, sequela -T588X4A Toxic effect of carbon monoxide from other source, undetermined, initial encounter -T588X4D Toxic effect of carbon monoxide from other source, undetermined, subsequent encounter -T588X4S Toxic effect of carbon monoxide from other source, undetermined, sequela -T5891XA Toxic effect of carbon monoxide from unspecified source, accidental (unintentional), initial encounter -T5891XD Toxic effect of carbon monoxide from unspecified source, accidental (unintentional), subsequent encounter -T5891XS Toxic effect of carbon monoxide from unspecified source, accidental (unintentional), sequela -T5892XA Toxic effect of carbon monoxide from unspecified source, intentional self-harm, initial encounter -T5892XD Toxic effect of carbon monoxide from unspecified source, intentional self-harm, subsequent encounter -T5892XS Toxic effect of carbon monoxide from unspecified source, intentional self-harm, sequela -T5893XA Toxic effect of carbon monoxide from unspecified source, assault, initial encounter -T5893XD Toxic effect of carbon monoxide from unspecified source, assault, subsequent encounter -T5893XS Toxic effect of carbon monoxide from unspecified source, assault, sequela -T5894XA Toxic effect of carbon monoxide from unspecified source, undetermined, initial encounter -T5894XD Toxic effect of carbon monoxide from unspecified source, undetermined, subsequent encounter -T5894XS Toxic effect of carbon monoxide from unspecified source, undetermined, sequela -T590X1A Toxic effect of nitrogen oxides, accidental (unintentional), initial encounter -T590X1D Toxic effect of nitrogen oxides, accidental (unintentional), subsequent encounter -T590X1S Toxic effect of nitrogen oxides, accidental (unintentional), sequela -T590X2A Toxic effect of nitrogen oxides, intentional self-harm, initial encounter -T590X2D Toxic effect of nitrogen oxides, intentional self-harm, subsequent encounter -T590X2S Toxic effect of nitrogen oxides, intentional self-harm, sequela -T590X3A Toxic effect of nitrogen oxides, assault, initial encounter -T590X3D Toxic effect of nitrogen oxides, assault, subsequent encounter -T590X3S Toxic effect of nitrogen oxides, assault, sequela -T590X4A Toxic effect of nitrogen oxides, undetermined, initial encounter -T590X4D Toxic effect of nitrogen oxides, undetermined, subsequent encounter -T590X4S Toxic effect of nitrogen oxides, undetermined, sequela -T591X1A Toxic effect of sulfur dioxide, accidental (unintentional), initial encounter -T591X1D Toxic effect of sulfur dioxide, accidental (unintentional), subsequent encounter -T591X1S Toxic effect of sulfur dioxide, accidental (unintentional), sequela -T591X2A Toxic effect of sulfur dioxide, intentional self-harm, initial encounter -T591X2D Toxic effect of sulfur dioxide, intentional self-harm, subsequent encounter -T591X2S Toxic effect of sulfur dioxide, intentional self-harm, sequela -T591X3A Toxic effect of sulfur dioxide, assault, initial encounter -T591X3D Toxic effect of sulfur dioxide, assault, subsequent encounter -T591X3S Toxic effect of sulfur dioxide, assault, sequela -T591X4A Toxic effect of sulfur dioxide, undetermined, initial encounter -T591X4D Toxic effect of sulfur dioxide, undetermined, subsequent encounter -T591X4S Toxic effect of sulfur dioxide, undetermined, sequela -T592X1A Toxic effect of formaldehyde, accidental (unintentional), initial encounter -T592X1D Toxic effect of formaldehyde, accidental (unintentional), subsequent encounter -T592X1S Toxic effect of formaldehyde, accidental (unintentional), sequela -T592X2A Toxic effect of formaldehyde, intentional self-harm, initial encounter -T592X2D Toxic effect of formaldehyde, intentional self-harm, subsequent encounter -T592X2S Toxic effect of formaldehyde, intentional self-harm, sequela -T592X3A Toxic effect of formaldehyde, assault, initial encounter -T592X3D Toxic effect of formaldehyde, assault, subsequent encounter -T592X3S Toxic effect of formaldehyde, assault, sequela -T592X4A Toxic effect of formaldehyde, undetermined, initial encounter -T592X4D Toxic effect of formaldehyde, undetermined, subsequent encounter -T592X4S Toxic effect of formaldehyde, undetermined, sequela -T593X1A Toxic effect of lacrimogenic gas, accidental (unintentional), initial encounter -T593X1D Toxic effect of lacrimogenic gas, accidental (unintentional), subsequent encounter -T593X1S Toxic effect of lacrimogenic gas, accidental (unintentional), sequela -T593X2A Toxic effect of lacrimogenic gas, intentional self-harm, initial encounter -T593X2D Toxic effect of lacrimogenic gas, intentional self-harm, subsequent encounter -T593X2S Toxic effect of lacrimogenic gas, intentional self-harm, sequela -T593X3A Toxic effect of lacrimogenic gas, assault, initial encounter -T593X3D Toxic effect of lacrimogenic gas, assault, subsequent encounter -T593X3S Toxic effect of lacrimogenic gas, assault, sequela -T593X4A Toxic effect of lacrimogenic gas, undetermined, initial encounter -T593X4D Toxic effect of lacrimogenic gas, undetermined, subsequent encounter -T593X4S Toxic effect of lacrimogenic gas, undetermined, sequela -T594X1A Toxic effect of chlorine gas, accidental (unintentional), initial encounter -T594X1D Toxic effect of chlorine gas, accidental (unintentional), subsequent encounter -T594X1S Toxic effect of chlorine gas, accidental (unintentional), sequela -T594X2A Toxic effect of chlorine gas, intentional self-harm, initial encounter -T594X2D Toxic effect of chlorine gas, intentional self-harm, subsequent encounter -T594X2S Toxic effect of chlorine gas, intentional self-harm, sequela -T594X3A Toxic effect of chlorine gas, assault, initial encounter -T594X3D Toxic effect of chlorine gas, assault, subsequent encounter -T594X3S Toxic effect of chlorine gas, assault, sequela -T594X4A Toxic effect of chlorine gas, undetermined, initial encounter -T594X4D Toxic effect of chlorine gas, undetermined, subsequent encounter -T594X4S Toxic effect of chlorine gas, undetermined, sequela -T595X1A Toxic effect of fluorine gas and hydrogen fluoride, accidental (unintentional), initial encounter -T595X1D Toxic effect of fluorine gas and hydrogen fluoride, accidental (unintentional), subsequent encounter -T595X1S Toxic effect of fluorine gas and hydrogen fluoride, accidental (unintentional), sequela -T595X2A Toxic effect of fluorine gas and hydrogen fluoride, intentional self-harm, initial encounter -T595X2D Toxic effect of fluorine gas and hydrogen fluoride, intentional self-harm, subsequent encounter -T595X2S Toxic effect of fluorine gas and hydrogen fluoride, intentional self-harm, sequela -T595X3A Toxic effect of fluorine gas and hydrogen fluoride, assault, initial encounter -T595X3D Toxic effect of fluorine gas and hydrogen fluoride, assault, subsequent encounter -T595X3S Toxic effect of fluorine gas and hydrogen fluoride, assault, sequela -T595X4A Toxic effect of fluorine gas and hydrogen fluoride, undetermined, initial encounter -T595X4D Toxic effect of fluorine gas and hydrogen fluoride, undetermined, subsequent encounter -T595X4S Toxic effect of fluorine gas and hydrogen fluoride, undetermined, sequela -T596X1A Toxic effect of hydrogen sulfide, accidental (unintentional), initial encounter -T596X1D Toxic effect of hydrogen sulfide, accidental (unintentional), subsequent encounter -T596X1S Toxic effect of hydrogen sulfide, accidental (unintentional), sequela -T596X2A Toxic effect of hydrogen sulfide, intentional self-harm, initial encounter -T596X2D Toxic effect of hydrogen sulfide, intentional self-harm, subsequent encounter -T596X2S Toxic effect of hydrogen sulfide, intentional self-harm, sequela -T596X3A Toxic effect of hydrogen sulfide, assault, initial encounter -T596X3D Toxic effect of hydrogen sulfide, assault, subsequent encounter -T596X3S Toxic effect of hydrogen sulfide, assault, sequela -T596X4A Toxic effect of hydrogen sulfide, undetermined, initial encounter -T596X4D Toxic effect of hydrogen sulfide, undetermined, subsequent encounter -T596X4S Toxic effect of hydrogen sulfide, undetermined, sequela -T597X1A Toxic effect of carbon dioxide, accidental (unintentional), initial encounter -T597X1D Toxic effect of carbon dioxide, accidental (unintentional), subsequent encounter -T597X1S Toxic effect of carbon dioxide, accidental (unintentional), sequela -T597X2A Toxic effect of carbon dioxide, intentional self-harm, initial encounter -T597X2D Toxic effect of carbon dioxide, intentional self-harm, subsequent encounter -T597X2S Toxic effect of carbon dioxide, intentional self-harm, sequela -T597X3A Toxic effect of carbon dioxide, assault, initial encounter -T597X3D Toxic effect of carbon dioxide, assault, subsequent encounter -T597X3S Toxic effect of carbon dioxide, assault, sequela -T597X4A Toxic effect of carbon dioxide, undetermined, initial encounter -T597X4D Toxic effect of carbon dioxide, undetermined, subsequent encounter -T597X4S Toxic effect of carbon dioxide, undetermined, sequela -T59811A Toxic effect of smoke, accidental (unintentional), initial encounter -T59811D Toxic effect of smoke, accidental (unintentional), subsequent encounter -T59811S Toxic effect of smoke, accidental (unintentional), sequela -T59812A Toxic effect of smoke, intentional self-harm, initial encounter -T59812D Toxic effect of smoke, intentional self-harm, subsequent encounter -T59812S Toxic effect of smoke, intentional self-harm, sequela -T59813A Toxic effect of smoke, assault, initial encounter -T59813D Toxic effect of smoke, assault, subsequent encounter -T59813S Toxic effect of smoke, assault, sequela -T59814A Toxic effect of smoke, undetermined, initial encounter -T59814D Toxic effect of smoke, undetermined, subsequent encounter -T59814S Toxic effect of smoke, undetermined, sequela -T59891A Toxic effect of other specified gases, fumes and vapors, accidental (unintentional), initial encounter -T59891D Toxic effect of other specified gases, fumes and vapors, accidental (unintentional), subsequent encounter -T59891S Toxic effect of other specified gases, fumes and vapors, accidental (unintentional), sequela -T59892A Toxic effect of other specified gases, fumes and vapors, intentional self-harm, initial encounter -T59892D Toxic effect of other specified gases, fumes and vapors, intentional self-harm, subsequent encounter -T59892S Toxic effect of other specified gases, fumes and vapors, intentional self-harm, sequela -T59893A Toxic effect of other specified gases, fumes and vapors, assault, initial encounter -T59893D Toxic effect of other specified gases, fumes and vapors, assault, subsequent encounter -T59893S Toxic effect of other specified gases, fumes and vapors, assault, sequela -T59894A Toxic effect of other specified gases, fumes and vapors, undetermined, initial encounter -T59894D Toxic effect of other specified gases, fumes and vapors, undetermined, subsequent encounter -T59894S Toxic effect of other specified gases, fumes and vapors, undetermined, sequela -T5991XA Toxic effect of unspecified gases, fumes and vapors, accidental (unintentional), initial encounter -T5991XD Toxic effect of unspecified gases, fumes and vapors, accidental (unintentional), subsequent encounter -T5991XS Toxic effect of unspecified gases, fumes and vapors, accidental (unintentional), sequela -T5992XA Toxic effect of unspecified gases, fumes and vapors, intentional self-harm, initial encounter -T5992XD Toxic effect of unspecified gases, fumes and vapors, intentional self-harm, subsequent encounter -T5992XS Toxic effect of unspecified gases, fumes and vapors, intentional self-harm, sequela -T5993XA Toxic effect of unspecified gases, fumes and vapors, assault, initial encounter -T5993XD Toxic effect of unspecified gases, fumes and vapors, assault, subsequent encounter -T5993XS Toxic effect of unspecified gases, fumes and vapors, assault, sequela -T5994XA Toxic effect of unspecified gases, fumes and vapors, undetermined, initial encounter -T5994XD Toxic effect of unspecified gases, fumes and vapors, undetermined, subsequent encounter -T5994XS Toxic effect of unspecified gases, fumes and vapors, undetermined, sequela -T600X1A Toxic effect of organophosphate and carbamate insecticides, accidental (unintentional), initial encounter -T600X1D Toxic effect of organophosphate and carbamate insecticides, accidental (unintentional), subsequent encounter -T600X1S Toxic effect of organophosphate and carbamate insecticides, accidental (unintentional), sequela -T600X2A Toxic effect of organophosphate and carbamate insecticides, intentional self-harm, initial encounter -T600X2D Toxic effect of organophosphate and carbamate insecticides, intentional self-harm, subsequent encounter -T600X2S Toxic effect of organophosphate and carbamate insecticides, intentional self-harm, sequela -T600X3A Toxic effect of organophosphate and carbamate insecticides, assault, initial encounter -T600X3D Toxic effect of organophosphate and carbamate insecticides, assault, subsequent encounter -T600X3S Toxic effect of organophosphate and carbamate insecticides, assault, sequela -T600X4A Toxic effect of organophosphate and carbamate insecticides, undetermined, initial encounter -T600X4D Toxic effect of organophosphate and carbamate insecticides, undetermined, subsequent encounter -T600X4S Toxic effect of organophosphate and carbamate insecticides, undetermined, sequela -T601X1A Toxic effect of halogenated insecticides, accidental (unintentional), initial encounter -T601X1D Toxic effect of halogenated insecticides, accidental (unintentional), subsequent encounter -T601X1S Toxic effect of halogenated insecticides, accidental (unintentional), sequela -T601X2A Toxic effect of halogenated insecticides, intentional self-harm, initial encounter -T601X2D Toxic effect of halogenated insecticides, intentional self-harm, subsequent encounter -T601X2S Toxic effect of halogenated insecticides, intentional self-harm, sequela -T601X3A Toxic effect of halogenated insecticides, assault, initial encounter -T601X3D Toxic effect of halogenated insecticides, assault, subsequent encounter -T601X3S Toxic effect of halogenated insecticides, assault, sequela -T601X4A Toxic effect of halogenated insecticides, undetermined, initial encounter -T601X4D Toxic effect of halogenated insecticides, undetermined, subsequent encounter -T601X4S Toxic effect of halogenated insecticides, undetermined, sequela -T602X1A Toxic effect of other insecticides, accidental (unintentional), initial encounter -T602X1D Toxic effect of other insecticides, accidental (unintentional), subsequent encounter -T602X1S Toxic effect of other insecticides, accidental (unintentional), sequela -T602X2A Toxic effect of other insecticides, intentional self-harm, initial encounter -T602X2D Toxic effect of other insecticides, intentional self-harm, subsequent encounter -T602X2S Toxic effect of other insecticides, intentional self-harm, sequela -T602X3A Toxic effect of other insecticides, assault, initial encounter -T602X3D Toxic effect of other insecticides, assault, subsequent encounter -T602X3S Toxic effect of other insecticides, assault, sequela -T602X4A Toxic effect of other insecticides, undetermined, initial encounter -T602X4D Toxic effect of other insecticides, undetermined, subsequent encounter -T602X4S Toxic effect of other insecticides, undetermined, sequela -T603X1A Toxic effect of herbicides and fungicides, accidental (unintentional), initial encounter -T603X1D Toxic effect of herbicides and fungicides, accidental (unintentional), subsequent encounter -T603X1S Toxic effect of herbicides and fungicides, accidental (unintentional), sequela -T603X2A Toxic effect of herbicides and fungicides, intentional self-harm, initial encounter -T603X2D Toxic effect of herbicides and fungicides, intentional self-harm, subsequent encounter -T603X2S Toxic effect of herbicides and fungicides, intentional self-harm, sequela -T603X3A Toxic effect of herbicides and fungicides, assault, initial encounter -T603X3D Toxic effect of herbicides and fungicides, assault, subsequent encounter -T603X3S Toxic effect of herbicides and fungicides, assault, sequela -T603X4A Toxic effect of herbicides and fungicides, undetermined, initial encounter -T603X4D Toxic effect of herbicides and fungicides, undetermined, subsequent encounter -T603X4S Toxic effect of herbicides and fungicides, undetermined, sequela -T604X1A Toxic effect of rodenticides, accidental (unintentional), initial encounter -T604X1D Toxic effect of rodenticides, accidental (unintentional), subsequent encounter -T604X1S Toxic effect of rodenticides, accidental (unintentional), sequela -T604X2A Toxic effect of rodenticides, intentional self-harm, initial encounter -T604X2D Toxic effect of rodenticides, intentional self-harm, subsequent encounter -T604X2S Toxic effect of rodenticides, intentional self-harm, sequela -T604X3A Toxic effect of rodenticides, assault, initial encounter -T604X3D Toxic effect of rodenticides, assault, subsequent encounter -T604X3S Toxic effect of rodenticides, assault, sequela -T604X4A Toxic effect of rodenticides, undetermined, initial encounter -T604X4D Toxic effect of rodenticides, undetermined, subsequent encounter -T604X4S Toxic effect of rodenticides, undetermined, sequela -T608X1A Toxic effect of other pesticides, accidental (unintentional), initial encounter -T608X1D Toxic effect of other pesticides, accidental (unintentional), subsequent encounter -T608X1S Toxic effect of other pesticides, accidental (unintentional), sequela -T608X2A Toxic effect of other pesticides, intentional self-harm, initial encounter -T608X2D Toxic effect of other pesticides, intentional self-harm, subsequent encounter -T608X2S Toxic effect of other pesticides, intentional self-harm, sequela -T608X3A Toxic effect of other pesticides, assault, initial encounter -T608X3D Toxic effect of other pesticides, assault, subsequent encounter -T608X3S Toxic effect of other pesticides, assault, sequela -T608X4A Toxic effect of other pesticides, undetermined, initial encounter -T608X4D Toxic effect of other pesticides, undetermined, subsequent encounter -T608X4S Toxic effect of other pesticides, undetermined, sequela -T6091XA Toxic effect of unspecified pesticide, accidental (unintentional), initial encounter -T6091XD Toxic effect of unspecified pesticide, accidental (unintentional), subsequent encounter -T6091XS Toxic effect of unspecified pesticide, accidental (unintentional), sequela -T6092XA Toxic effect of unspecified pesticide, intentional self-harm, initial encounter -T6092XD Toxic effect of unspecified pesticide, intentional self-harm, subsequent encounter -T6092XS Toxic effect of unspecified pesticide, intentional self-harm, sequela -T6093XA Toxic effect of unspecified pesticide, assault, initial encounter -T6093XD Toxic effect of unspecified pesticide, assault, subsequent encounter -T6093XS Toxic effect of unspecified pesticide, assault, sequela -T6094XA Toxic effect of unspecified pesticide, undetermined, initial encounter -T6094XD Toxic effect of unspecified pesticide, undetermined, subsequent encounter -T6094XS Toxic effect of unspecified pesticide, undetermined, sequela -T6101XA Ciguatera fish poisoning, accidental (unintentional), initial encounter -T6101XD Ciguatera fish poisoning, accidental (unintentional), subsequent encounter -T6101XS Ciguatera fish poisoning, accidental (unintentional), sequela -T6102XA Ciguatera fish poisoning, intentional self-harm, initial encounter -T6102XD Ciguatera fish poisoning, intentional self-harm, subsequent encounter -T6102XS Ciguatera fish poisoning, intentional self-harm, sequela -T6103XA Ciguatera fish poisoning, assault, initial encounter -T6103XD Ciguatera fish poisoning, assault, subsequent encounter -T6103XS Ciguatera fish poisoning, assault, sequela -T6104XA Ciguatera fish poisoning, undetermined, initial encounter -T6104XD Ciguatera fish poisoning, undetermined, subsequent encounter -T6104XS Ciguatera fish poisoning, undetermined, sequela -T6111XA Scombroid fish poisoning, accidental (unintentional), initial encounter -T6111XD Scombroid fish poisoning, accidental (unintentional), subsequent encounter -T6111XS Scombroid fish poisoning, accidental (unintentional), sequela -T6112XA Scombroid fish poisoning, intentional self-harm, initial encounter -T6112XD Scombroid fish poisoning, intentional self-harm, subsequent encounter -T6112XS Scombroid fish poisoning, intentional self-harm, sequela -T6113XA Scombroid fish poisoning, assault, initial encounter -T6113XD Scombroid fish poisoning, assault, subsequent encounter -T6113XS Scombroid fish poisoning, assault, sequela -T6114XA Scombroid fish poisoning, undetermined, initial encounter -T6114XD Scombroid fish poisoning, undetermined, subsequent encounter -T6114XS Scombroid fish poisoning, undetermined, sequela -T61771A Other fish poisoning, accidental (unintentional), initial encounter -T61771D Other fish poisoning, accidental (unintentional), subsequent encounter -T61771S Other fish poisoning, accidental (unintentional), sequela -T61772A Other fish poisoning, intentional self-harm, initial encounter -T61772D Other fish poisoning, intentional self-harm, subsequent encounter -T61772S Other fish poisoning, intentional self-harm, sequela -T61773A Other fish poisoning, assault, initial encounter -T61773D Other fish poisoning, assault, subsequent encounter -T61773S Other fish poisoning, assault, sequela -T61774A Other fish poisoning, undetermined, initial encounter -T61774D Other fish poisoning, undetermined, subsequent encounter -T61774S Other fish poisoning, undetermined, sequela -T61781A Other shellfish poisoning, accidental (unintentional), initial encounter -T61781D Other shellfish poisoning, accidental (unintentional), subsequent encounter -T61781S Other shellfish poisoning, accidental (unintentional), sequela -T61782A Other shellfish poisoning, intentional self-harm, initial encounter -T61782D Other shellfish poisoning, intentional self-harm, subsequent encounter -T61782S Other shellfish poisoning, intentional self-harm, sequela -T61783A Other shellfish poisoning, assault, initial encounter -T61783D Other shellfish poisoning, assault, subsequent encounter -T61783S Other shellfish poisoning, assault, sequela -T61784A Other shellfish poisoning, undetermined, initial encounter -T61784D Other shellfish poisoning, undetermined, subsequent encounter -T61784S Other shellfish poisoning, undetermined, sequela -T618X1A Toxic effect of other seafood, accidental (unintentional), initial encounter -T618X1D Toxic effect of other seafood, accidental (unintentional), subsequent encounter -T618X1S Toxic effect of other seafood, accidental (unintentional), sequela -T618X2A Toxic effect of other seafood, intentional self-harm, initial encounter -T618X2D Toxic effect of other seafood, intentional self-harm, subsequent encounter -T618X2S Toxic effect of other seafood, intentional self-harm, sequela -T618X3A Toxic effect of other seafood, assault, initial encounter -T618X3D Toxic effect of other seafood, assault, subsequent encounter -T618X3S Toxic effect of other seafood, assault, sequela -T618X4A Toxic effect of other seafood, undetermined, initial encounter -T618X4D Toxic effect of other seafood, undetermined, subsequent encounter -T618X4S Toxic effect of other seafood, undetermined, sequela -T6191XA Toxic effect of unspecified seafood, accidental (unintentional), initial encounter -T6191XD Toxic effect of unspecified seafood, accidental (unintentional), subsequent encounter -T6191XS Toxic effect of unspecified seafood, accidental (unintentional), sequela -T6192XA Toxic effect of unspecified seafood, intentional self-harm, initial encounter -T6192XD Toxic effect of unspecified seafood, intentional self-harm, subsequent encounter -T6192XS Toxic effect of unspecified seafood, intentional self-harm, sequela -T6193XA Toxic effect of unspecified seafood, assault, initial encounter -T6193XD Toxic effect of unspecified seafood, assault, subsequent encounter -T6193XS Toxic effect of unspecified seafood, assault, sequela -T6194XA Toxic effect of unspecified seafood, undetermined, initial encounter -T6194XD Toxic effect of unspecified seafood, undetermined, subsequent encounter -T6194XS Toxic effect of unspecified seafood, undetermined, sequela -T620X1A Toxic effect of ingested mushrooms, accidental (unintentional), initial encounter -T620X1D Toxic effect of ingested mushrooms, accidental (unintentional), subsequent encounter -T620X1S Toxic effect of ingested mushrooms, accidental (unintentional), sequela -T620X2A Toxic effect of ingested mushrooms, intentional self-harm, initial encounter -T620X2D Toxic effect of ingested mushrooms, intentional self-harm, subsequent encounter -T620X2S Toxic effect of ingested mushrooms, intentional self-harm, sequela -T620X3A Toxic effect of ingested mushrooms, assault, initial encounter -T620X3D Toxic effect of ingested mushrooms, assault, subsequent encounter -T620X3S Toxic effect of ingested mushrooms, assault, sequela -T620X4A Toxic effect of ingested mushrooms, undetermined, initial encounter -T620X4D Toxic effect of ingested mushrooms, undetermined, subsequent encounter -T620X4S Toxic effect of ingested mushrooms, undetermined, sequela -T621X1A Toxic effect of ingested berries, accidental (unintentional), initial encounter -T621X1D Toxic effect of ingested berries, accidental (unintentional), subsequent encounter -T621X1S Toxic effect of ingested berries, accidental (unintentional), sequela -T621X2A Toxic effect of ingested berries, intentional self-harm, initial encounter -T621X2D Toxic effect of ingested berries, intentional self-harm, subsequent encounter -T621X2S Toxic effect of ingested berries, intentional self-harm, sequela -T621X3A Toxic effect of ingested berries, assault, initial encounter -T621X3D Toxic effect of ingested berries, assault, subsequent encounter -T621X3S Toxic effect of ingested berries, assault, sequela -T621X4A Toxic effect of ingested berries, undetermined, initial encounter -T621X4D Toxic effect of ingested berries, undetermined, subsequent encounter -T621X4S Toxic effect of ingested berries, undetermined, sequela -T622X1A Toxic effect of other ingested (parts of) plant(s), accidental (unintentional), initial encounter -T622X1D Toxic effect of other ingested (parts of) plant(s), accidental (unintentional), subsequent encounter -T622X1S Toxic effect of other ingested (parts of) plant(s), accidental (unintentional), sequela -T622X2A Toxic effect of other ingested (parts of) plant(s), intentional self-harm, initial encounter -T622X2D Toxic effect of other ingested (parts of) plant(s), intentional self-harm, subsequent encounter -T622X2S Toxic effect of other ingested (parts of) plant(s), intentional self-harm, sequela -T622X3A Toxic effect of other ingested (parts of) plant(s), assault, initial encounter -T622X3D Toxic effect of other ingested (parts of) plant(s), assault, subsequent encounter -T622X3S Toxic effect of other ingested (parts of) plant(s), assault, sequela -T622X4A Toxic effect of other ingested (parts of) plant(s), undetermined, initial encounter -T622X4D Toxic effect of other ingested (parts of) plant(s), undetermined, subsequent encounter -T622X4S Toxic effect of other ingested (parts of) plant(s), undetermined, sequela -T628X1A Toxic effect of other specified noxious substances eaten as food, accidental (unintentional), initial encounter -T628X1D Toxic effect of other specified noxious substances eaten as food, accidental (unintentional), subsequent encounter -T628X1S Toxic effect of other specified noxious substances eaten as food, accidental (unintentional), sequela -T628X2A Toxic effect of other specified noxious substances eaten as food, intentional self-harm, initial encounter -T628X2D Toxic effect of other specified noxious substances eaten as food, intentional self-harm, subsequent encounter -T628X2S Toxic effect of other specified noxious substances eaten as food, intentional self-harm, sequela -T628X3A Toxic effect of other specified noxious substances eaten as food, assault, initial encounter -T628X3D Toxic effect of other specified noxious substances eaten as food, assault, subsequent encounter -T628X3S Toxic effect of other specified noxious substances eaten as food, assault, sequela -T628X4A Toxic effect of other specified noxious substances eaten as food, undetermined, initial encounter -T628X4D Toxic effect of other specified noxious substances eaten as food, undetermined, subsequent encounter -T628X4S Toxic effect of other specified noxious substances eaten as food, undetermined, sequela -T6291XA Toxic effect of unspecified noxious substance eaten as food, accidental (unintentional), initial encounter -T6291XD Toxic effect of unspecified noxious substance eaten as food, accidental (unintentional), subsequent encounter -T6291XS Toxic effect of unspecified noxious substance eaten as food, accidental (unintentional), sequela -T6292XA Toxic effect of unspecified noxious substance eaten as food, intentional self-harm, initial encounter -T6292XD Toxic effect of unspecified noxious substance eaten as food, intentional self-harm, subsequent encounter -T6292XS Toxic effect of unspecified noxious substance eaten as food, intentional self-harm, sequela -T6293XA Toxic effect of unspecified noxious substance eaten as food, assault, initial encounter -T6293XD Toxic effect of unspecified noxious substance eaten as food, assault, subsequent encounter -T6293XS Toxic effect of unspecified noxious substance eaten as food, assault, sequela -T6294XA Toxic effect of unspecified noxious substance eaten as food, undetermined, initial encounter -T6294XD Toxic effect of unspecified noxious substance eaten as food, undetermined, subsequent encounter -T6294XS Toxic effect of unspecified noxious substance eaten as food, undetermined, sequela -T63001A Toxic effect of unspecified snake venom, accidental (unintentional), initial encounter -T63001D Toxic effect of unspecified snake venom, accidental (unintentional), subsequent encounter -T63001S Toxic effect of unspecified snake venom, accidental (unintentional), sequela -T63002A Toxic effect of unspecified snake venom, intentional self-harm, initial encounter -T63002D Toxic effect of unspecified snake venom, intentional self-harm, subsequent encounter -T63002S Toxic effect of unspecified snake venom, intentional self-harm, sequela -T63003A Toxic effect of unspecified snake venom, assault, initial encounter -T63003D Toxic effect of unspecified snake venom, assault, subsequent encounter -T63003S Toxic effect of unspecified snake venom, assault, sequela -T63004A Toxic effect of unspecified snake venom, undetermined, initial encounter -T63004D Toxic effect of unspecified snake venom, undetermined, subsequent encounter -T63004S Toxic effect of unspecified snake venom, undetermined, sequela -T63011A Toxic effect of rattlesnake venom, accidental (unintentional), initial encounter -T63011D Toxic effect of rattlesnake venom, accidental (unintentional), subsequent encounter -T63011S Toxic effect of rattlesnake venom, accidental (unintentional), sequela -T63012A Toxic effect of rattlesnake venom, intentional self-harm, initial encounter -T63012D Toxic effect of rattlesnake venom, intentional self-harm, subsequent encounter -T63012S Toxic effect of rattlesnake venom, intentional self-harm, sequela -T63013A Toxic effect of rattlesnake venom, assault, initial encounter -T63013D Toxic effect of rattlesnake venom, assault, subsequent encounter -T63013S Toxic effect of rattlesnake venom, assault, sequela -T63014A Toxic effect of rattlesnake venom, undetermined, initial encounter -T63014D Toxic effect of rattlesnake venom, undetermined, subsequent encounter -T63014S Toxic effect of rattlesnake venom, undetermined, sequela -T63021A Toxic effect of coral snake venom, accidental (unintentional), initial encounter -T63021D Toxic effect of coral snake venom, accidental (unintentional), subsequent encounter -T63021S Toxic effect of coral snake venom, accidental (unintentional), sequela -T63022A Toxic effect of coral snake venom, intentional self-harm, initial encounter -T63022D Toxic effect of coral snake venom, intentional self-harm, subsequent encounter -T63022S Toxic effect of coral snake venom, intentional self-harm, sequela -T63023A Toxic effect of coral snake venom, assault, initial encounter -T63023D Toxic effect of coral snake venom, assault, subsequent encounter -T63023S Toxic effect of coral snake venom, assault, sequela -T63024A Toxic effect of coral snake venom, undetermined, initial encounter -T63024D Toxic effect of coral snake venom, undetermined, subsequent encounter -T63024S Toxic effect of coral snake venom, undetermined, sequela -T63031A Toxic effect of taipan venom, accidental (unintentional), initial encounter -T63031D Toxic effect of taipan venom, accidental (unintentional), subsequent encounter -T63031S Toxic effect of taipan venom, accidental (unintentional), sequela -T63032A Toxic effect of taipan venom, intentional self-harm, initial encounter -T63032D Toxic effect of taipan venom, intentional self-harm, subsequent encounter -T63032S Toxic effect of taipan venom, intentional self-harm, sequela -T63033A Toxic effect of taipan venom, assault, initial encounter -T63033D Toxic effect of taipan venom, assault, subsequent encounter -T63033S Toxic effect of taipan venom, assault, sequela -T63034A Toxic effect of taipan venom, undetermined, initial encounter -T63034D Toxic effect of taipan venom, undetermined, subsequent encounter -T63034S Toxic effect of taipan venom, undetermined, sequela -T63041A Toxic effect of cobra venom, accidental (unintentional), initial encounter -T63041D Toxic effect of cobra venom, accidental (unintentional), subsequent encounter -T63041S Toxic effect of cobra venom, accidental (unintentional), sequela -T63042A Toxic effect of cobra venom, intentional self-harm, initial encounter -T63042D Toxic effect of cobra venom, intentional self-harm, subsequent encounter -T63042S Toxic effect of cobra venom, intentional self-harm, sequela -T63043A Toxic effect of cobra venom, assault, initial encounter -T63043D Toxic effect of cobra venom, assault, subsequent encounter -T63043S Toxic effect of cobra venom, assault, sequela -T63044A Toxic effect of cobra venom, undetermined, initial encounter -T63044D Toxic effect of cobra venom, undetermined, subsequent encounter -T63044S Toxic effect of cobra venom, undetermined, sequela -T63061A Toxic effect of venom of other North and South American snake, accidental (unintentional), initial encounter -T63061D Toxic effect of venom of other North and South American snake, accidental (unintentional), subsequent encounter -T63061S Toxic effect of venom of other North and South American snake, accidental (unintentional), sequela -T63062A Toxic effect of venom of other North and South American snake, intentional self-harm, initial encounter -T63062D Toxic effect of venom of other North and South American snake, intentional self-harm, subsequent encounter -T63062S Toxic effect of venom of other North and South American snake, intentional self-harm, sequela -T63063A Toxic effect of venom of other North and South American snake, assault, initial encounter -T63063D Toxic effect of venom of other North and South American snake, assault, subsequent encounter -T63063S Toxic effect of venom of other North and South American snake, assault, sequela -T63064A Toxic effect of venom of other North and South American snake, undetermined, initial encounter -T63064D Toxic effect of venom of other North and South American snake, undetermined, subsequent encounter -T63064S Toxic effect of venom of other North and South American snake, undetermined, sequela -T63071A Toxic effect of venom of other Australian snake, accidental (unintentional), initial encounter -T63071D Toxic effect of venom of other Australian snake, accidental (unintentional), subsequent encounter -T63071S Toxic effect of venom of other Australian snake, accidental (unintentional), sequela -T63072A Toxic effect of venom of other Australian snake, intentional self-harm, initial encounter -T63072D Toxic effect of venom of other Australian snake, intentional self-harm, subsequent encounter -T63072S Toxic effect of venom of other Australian snake, intentional self-harm, sequela -T63073A Toxic effect of venom of other Australian snake, assault, initial encounter -T63073D Toxic effect of venom of other Australian snake, assault, subsequent encounter -T63073S Toxic effect of venom of other Australian snake, assault, sequela -T63074A Toxic effect of venom of other Australian snake, undetermined, initial encounter -T63074D Toxic effect of venom of other Australian snake, undetermined, subsequent encounter -T63074S Toxic effect of venom of other Australian snake, undetermined, sequela -T63081A Toxic effect of venom of other African and Asian snake, accidental (unintentional), initial encounter -T63081D Toxic effect of venom of other African and Asian snake, accidental (unintentional), subsequent encounter -T63081S Toxic effect of venom of other African and Asian snake, accidental (unintentional), sequela -T63082A Toxic effect of venom of other African and Asian snake, intentional self-harm, initial encounter -T63082D Toxic effect of venom of other African and Asian snake, intentional self-harm, subsequent encounter -T63082S Toxic effect of venom of other African and Asian snake, intentional self-harm, sequela -T63083A Toxic effect of venom of other African and Asian snake, assault, initial encounter -T63083D Toxic effect of venom of other African and Asian snake, assault, subsequent encounter -T63083S Toxic effect of venom of other African and Asian snake, assault, sequela -T63084A Toxic effect of venom of other African and Asian snake, undetermined, initial encounter -T63084D Toxic effect of venom of other African and Asian snake, undetermined, subsequent encounter -T63084S Toxic effect of venom of other African and Asian snake, undetermined, sequela -T63091A Toxic effect of venom of other snake, accidental (unintentional), initial encounter -T63091D Toxic effect of venom of other snake, accidental (unintentional), subsequent encounter -T63091S Toxic effect of venom of other snake, accidental (unintentional), sequela -T63092A Toxic effect of venom of other snake, intentional self-harm, initial encounter -T63092D Toxic effect of venom of other snake, intentional self-harm, subsequent encounter -T63092S Toxic effect of venom of other snake, intentional self-harm, sequela -T63093A Toxic effect of venom of other snake, assault, initial encounter -T63093D Toxic effect of venom of other snake, assault, subsequent encounter -T63093S Toxic effect of venom of other snake, assault, sequela -T63094A Toxic effect of venom of other snake, undetermined, initial encounter -T63094D Toxic effect of venom of other snake, undetermined, subsequent encounter -T63094S Toxic effect of venom of other snake, undetermined, sequela -T63111A Toxic effect of venom of gila monster, accidental (unintentional), initial encounter -T63111D Toxic effect of venom of gila monster, accidental (unintentional), subsequent encounter -T63111S Toxic effect of venom of gila monster, accidental (unintentional), sequela -T63112A Toxic effect of venom of gila monster, intentional self-harm, initial encounter -T63112D Toxic effect of venom of gila monster, intentional self-harm, subsequent encounter -T63112S Toxic effect of venom of gila monster, intentional self-harm, sequela -T63113A Toxic effect of venom of gila monster, assault, initial encounter -T63113D Toxic effect of venom of gila monster, assault, subsequent encounter -T63113S Toxic effect of venom of gila monster, assault, sequela -T63114A Toxic effect of venom of gila monster, undetermined, initial encounter -T63114D Toxic effect of venom of gila monster, undetermined, subsequent encounter -T63114S Toxic effect of venom of gila monster, undetermined, sequela -T63121A Toxic effect of venom of other venomous lizard, accidental (unintentional), initial encounter -T63121D Toxic effect of venom of other venomous lizard, accidental (unintentional), subsequent encounter -T63121S Toxic effect of venom of other venomous lizard, accidental (unintentional), sequela -T63122A Toxic effect of venom of other venomous lizard, intentional self-harm, initial encounter -T63122D Toxic effect of venom of other venomous lizard, intentional self-harm, subsequent encounter -T63122S Toxic effect of venom of other venomous lizard, intentional self-harm, sequela -T63123A Toxic effect of venom of other venomous lizard, assault, initial encounter -T63123D Toxic effect of venom of other venomous lizard, assault, subsequent encounter -T63123S Toxic effect of venom of other venomous lizard, assault, sequela -T63124A Toxic effect of venom of other venomous lizard, undetermined, initial encounter -T63124D Toxic effect of venom of other venomous lizard, undetermined, subsequent encounter -T63124S Toxic effect of venom of other venomous lizard, undetermined, sequela -T63191A Toxic effect of venom of other reptiles, accidental (unintentional), initial encounter -T63191D Toxic effect of venom of other reptiles, accidental (unintentional), subsequent encounter -T63191S Toxic effect of venom of other reptiles, accidental (unintentional), sequela -T63192A Toxic effect of venom of other reptiles, intentional self-harm, initial encounter -T63192D Toxic effect of venom of other reptiles, intentional self-harm, subsequent encounter -T63192S Toxic effect of venom of other reptiles, intentional self-harm, sequela -T63193A Toxic effect of venom of other reptiles, assault, initial encounter -T63193D Toxic effect of venom of other reptiles, assault, subsequent encounter -T63193S Toxic effect of venom of other reptiles, assault, sequela -T63194A Toxic effect of venom of other reptiles, undetermined, initial encounter -T63194D Toxic effect of venom of other reptiles, undetermined, subsequent encounter -T63194S Toxic effect of venom of other reptiles, undetermined, sequela -T632X1A Toxic effect of venom of scorpion, accidental (unintentional), initial encounter -T632X1D Toxic effect of venom of scorpion, accidental (unintentional), subsequent encounter -T632X1S Toxic effect of venom of scorpion, accidental (unintentional), sequela -T632X2A Toxic effect of venom of scorpion, intentional self-harm, initial encounter -T632X2D Toxic effect of venom of scorpion, intentional self-harm, subsequent encounter -T632X2S Toxic effect of venom of scorpion, intentional self-harm, sequela -T632X3A Toxic effect of venom of scorpion, assault, initial encounter -T632X3D Toxic effect of venom of scorpion, assault, subsequent encounter -T632X3S Toxic effect of venom of scorpion, assault, sequela -T632X4A Toxic effect of venom of scorpion, undetermined, initial encounter -T632X4D Toxic effect of venom of scorpion, undetermined, subsequent encounter -T632X4S Toxic effect of venom of scorpion, undetermined, sequela -T63301A Toxic effect of unspecified spider venom, accidental (unintentional), initial encounter -T63301D Toxic effect of unspecified spider venom, accidental (unintentional), subsequent encounter -T63301S Toxic effect of unspecified spider venom, accidental (unintentional), sequela -T63302A Toxic effect of unspecified spider venom, intentional self-harm, initial encounter -T63302D Toxic effect of unspecified spider venom, intentional self-harm, subsequent encounter -T63302S Toxic effect of unspecified spider venom, intentional self-harm, sequela -T63303A Toxic effect of unspecified spider venom, assault, initial encounter -T63303D Toxic effect of unspecified spider venom, assault, subsequent encounter -T63303S Toxic effect of unspecified spider venom, assault, sequela -T63304A Toxic effect of unspecified spider venom, undetermined, initial encounter -T63304D Toxic effect of unspecified spider venom, undetermined, subsequent encounter -T63304S Toxic effect of unspecified spider venom, undetermined, sequela -T63311A Toxic effect of venom of black widow spider, accidental (unintentional), initial encounter -T63311D Toxic effect of venom of black widow spider, accidental (unintentional), subsequent encounter -T63311S Toxic effect of venom of black widow spider, accidental (unintentional), sequela -T63312A Toxic effect of venom of black widow spider, intentional self-harm, initial encounter -T63312D Toxic effect of venom of black widow spider, intentional self-harm, subsequent encounter -T63312S Toxic effect of venom of black widow spider, intentional self-harm, sequela -T63313A Toxic effect of venom of black widow spider, assault, initial encounter -T63313D Toxic effect of venom of black widow spider, assault, subsequent encounter -T63313S Toxic effect of venom of black widow spider, assault, sequela -T63314A Toxic effect of venom of black widow spider, undetermined, initial encounter -T63314D Toxic effect of venom of black widow spider, undetermined, subsequent encounter -T63314S Toxic effect of venom of black widow spider, undetermined, sequela -T63321A Toxic effect of venom of tarantula, accidental (unintentional), initial encounter -T63321D Toxic effect of venom of tarantula, accidental (unintentional), subsequent encounter -T63321S Toxic effect of venom of tarantula, accidental (unintentional), sequela -T63322A Toxic effect of venom of tarantula, intentional self-harm, initial encounter -T63322D Toxic effect of venom of tarantula, intentional self-harm, subsequent encounter -T63322S Toxic effect of venom of tarantula, intentional self-harm, sequela -T63323A Toxic effect of venom of tarantula, assault, initial encounter -T63323D Toxic effect of venom of tarantula, assault, subsequent encounter -T63323S Toxic effect of venom of tarantula, assault, sequela -T63324A Toxic effect of venom of tarantula, undetermined, initial encounter -T63324D Toxic effect of venom of tarantula, undetermined, subsequent encounter -T63324S Toxic effect of venom of tarantula, undetermined, sequela -T63331A Toxic effect of venom of brown recluse spider, accidental (unintentional), initial encounter -T63331D Toxic effect of venom of brown recluse spider, accidental (unintentional), subsequent encounter -T63331S Toxic effect of venom of brown recluse spider, accidental (unintentional), sequela -T63332A Toxic effect of venom of brown recluse spider, intentional self-harm, initial encounter -T63332D Toxic effect of venom of brown recluse spider, intentional self-harm, subsequent encounter -T63332S Toxic effect of venom of brown recluse spider, intentional self-harm, sequela -T63333A Toxic effect of venom of brown recluse spider, assault, initial encounter -T63333D Toxic effect of venom of brown recluse spider, assault, subsequent encounter -T63333S Toxic effect of venom of brown recluse spider, assault, sequela -T63334A Toxic effect of venom of brown recluse spider, undetermined, initial encounter -T63334D Toxic effect of venom of brown recluse spider, undetermined, subsequent encounter -T63334S Toxic effect of venom of brown recluse spider, undetermined, sequela -T63391A Toxic effect of venom of other spider, accidental (unintentional), initial encounter -T63391D Toxic effect of venom of other spider, accidental (unintentional), subsequent encounter -T63391S Toxic effect of venom of other spider, accidental (unintentional), sequela -T63392A Toxic effect of venom of other spider, intentional self-harm, initial encounter -T63392D Toxic effect of venom of other spider, intentional self-harm, subsequent encounter -T63392S Toxic effect of venom of other spider, intentional self-harm, sequela -T63393A Toxic effect of venom of other spider, assault, initial encounter -T63393D Toxic effect of venom of other spider, assault, subsequent encounter -T63393S Toxic effect of venom of other spider, assault, sequela -T63394A Toxic effect of venom of other spider, undetermined, initial encounter -T63394D Toxic effect of venom of other spider, undetermined, subsequent encounter -T63394S Toxic effect of venom of other spider, undetermined, sequela -T63411A Toxic effect of venom of centipedes and venomous millipedes, accidental (unintentional), initial encounter -T63411D Toxic effect of venom of centipedes and venomous millipedes, accidental (unintentional), subsequent encounter -T63411S Toxic effect of venom of centipedes and venomous millipedes, accidental (unintentional), sequela -T63412A Toxic effect of venom of centipedes and venomous millipedes, intentional self-harm, initial encounter -T63412D Toxic effect of venom of centipedes and venomous millipedes, intentional self-harm, subsequent encounter -T63412S Toxic effect of venom of centipedes and venomous millipedes, intentional self-harm, sequela -T63413A Toxic effect of venom of centipedes and venomous millipedes, assault, initial encounter -T63413D Toxic effect of venom of centipedes and venomous millipedes, assault, subsequent encounter -T63413S Toxic effect of venom of centipedes and venomous millipedes, assault, sequela -T63414A Toxic effect of venom of centipedes and venomous millipedes, undetermined, initial encounter -T63414D Toxic effect of venom of centipedes and venomous millipedes, undetermined, subsequent encounter -T63414S Toxic effect of venom of centipedes and venomous millipedes, undetermined, sequela -T63421A Toxic effect of venom of ants, accidental (unintentional), initial encounter -T63421D Toxic effect of venom of ants, accidental (unintentional), subsequent encounter -T63421S Toxic effect of venom of ants, accidental (unintentional), sequela -T63422A Toxic effect of venom of ants, intentional self-harm, initial encounter -T63422D Toxic effect of venom of ants, intentional self-harm, subsequent encounter -T63422S Toxic effect of venom of ants, intentional self-harm, sequela -T63423A Toxic effect of venom of ants, assault, initial encounter -T63423D Toxic effect of venom of ants, assault, subsequent encounter -T63423S Toxic effect of venom of ants, assault, sequela -T63424A Toxic effect of venom of ants, undetermined, initial encounter -T63424D Toxic effect of venom of ants, undetermined, subsequent encounter -T63424S Toxic effect of venom of ants, undetermined, sequela -T63431A Toxic effect of venom of caterpillars, accidental (unintentional), initial encounter -T63431D Toxic effect of venom of caterpillars, accidental (unintentional), subsequent encounter -T63431S Toxic effect of venom of caterpillars, accidental (unintentional), sequela -T63432A Toxic effect of venom of caterpillars, intentional self-harm, initial encounter -T63432D Toxic effect of venom of caterpillars, intentional self-harm, subsequent encounter -T63432S Toxic effect of venom of caterpillars, intentional self-harm, sequela -T63433A Toxic effect of venom of caterpillars, assault, initial encounter -T63433D Toxic effect of venom of caterpillars, assault, subsequent encounter -T63433S Toxic effect of venom of caterpillars, assault, sequela -T63434A Toxic effect of venom of caterpillars, undetermined, initial encounter -T63434D Toxic effect of venom of caterpillars, undetermined, subsequent encounter -T63434S Toxic effect of venom of caterpillars, undetermined, sequela -T63441A Toxic effect of venom of bees, accidental (unintentional), initial encounter -T63441D Toxic effect of venom of bees, accidental (unintentional), subsequent encounter -T63441S Toxic effect of venom of bees, accidental (unintentional), sequela -T63442A Toxic effect of venom of bees, intentional self-harm, initial encounter -T63442D Toxic effect of venom of bees, intentional self-harm, subsequent encounter -T63442S Toxic effect of venom of bees, intentional self-harm, sequela -T63443A Toxic effect of venom of bees, assault, initial encounter -T63443D Toxic effect of venom of bees, assault, subsequent encounter -T63443S Toxic effect of venom of bees, assault, sequela -T63444A Toxic effect of venom of bees, undetermined, initial encounter -T63444D Toxic effect of venom of bees, undetermined, subsequent encounter -T63444S Toxic effect of venom of bees, undetermined, sequela -T63451A Toxic effect of venom of hornets, accidental (unintentional), initial encounter -T63451D Toxic effect of venom of hornets, accidental (unintentional), subsequent encounter -T63451S Toxic effect of venom of hornets, accidental (unintentional), sequela -T63452A Toxic effect of venom of hornets, intentional self-harm, initial encounter -T63452D Toxic effect of venom of hornets, intentional self-harm, subsequent encounter -T63452S Toxic effect of venom of hornets, intentional self-harm, sequela -T63453A Toxic effect of venom of hornets, assault, initial encounter -T63453D Toxic effect of venom of hornets, assault, subsequent encounter -T63453S Toxic effect of venom of hornets, assault, sequela -T63454A Toxic effect of venom of hornets, undetermined, initial encounter -T63454D Toxic effect of venom of hornets, undetermined, subsequent encounter -T63454S Toxic effect of venom of hornets, undetermined, sequela -T63461A Toxic effect of venom of wasps, accidental (unintentional), initial encounter -T63461D Toxic effect of venom of wasps, accidental (unintentional), subsequent encounter -T63461S Toxic effect of venom of wasps, accidental (unintentional), sequela -T63462A Toxic effect of venom of wasps, intentional self-harm, initial encounter -T63462D Toxic effect of venom of wasps, intentional self-harm, subsequent encounter -T63462S Toxic effect of venom of wasps, intentional self-harm, sequela -T63463A Toxic effect of venom of wasps, assault, initial encounter -T63463D Toxic effect of venom of wasps, assault, subsequent encounter -T63463S Toxic effect of venom of wasps, assault, sequela -T63464A Toxic effect of venom of wasps, undetermined, initial encounter -T63464D Toxic effect of venom of wasps, undetermined, subsequent encounter -T63464S Toxic effect of venom of wasps, undetermined, sequela -T63481A Toxic effect of venom of other arthropod, accidental (unintentional), initial encounter -T63481D Toxic effect of venom of other arthropod, accidental (unintentional), subsequent encounter -T63481S Toxic effect of venom of other arthropod, accidental (unintentional), sequela -T63482A Toxic effect of venom of other arthropod, intentional self-harm, initial encounter -T63482D Toxic effect of venom of other arthropod, intentional self-harm, subsequent encounter -T63482S Toxic effect of venom of other arthropod, intentional self-harm, sequela -T63483A Toxic effect of venom of other arthropod, assault, initial encounter -T63483D Toxic effect of venom of other arthropod, assault, subsequent encounter -T63483S Toxic effect of venom of other arthropod, assault, sequela -T63484A Toxic effect of venom of other arthropod, undetermined, initial encounter -T63484D Toxic effect of venom of other arthropod, undetermined, subsequent encounter -T63484S Toxic effect of venom of other arthropod, undetermined, sequela -T63511A Toxic effect of contact with stingray, accidental (unintentional), initial encounter -T63511D Toxic effect of contact with stingray, accidental (unintentional), subsequent encounter -T63511S Toxic effect of contact with stingray, accidental (unintentional), sequela -T63512A Toxic effect of contact with stingray, intentional self-harm, initial encounter -T63512D Toxic effect of contact with stingray, intentional self-harm, subsequent encounter -T63512S Toxic effect of contact with stingray, intentional self-harm, sequela -T63513A Toxic effect of contact with stingray, assault, initial encounter -T63513D Toxic effect of contact with stingray, assault, subsequent encounter -T63513S Toxic effect of contact with stingray, assault, sequela -T63514A Toxic effect of contact with stingray, undetermined, initial encounter -T63514D Toxic effect of contact with stingray, undetermined, subsequent encounter -T63514S Toxic effect of contact with stingray, undetermined, sequela -T63591A Toxic effect of contact with other venomous fish, accidental (unintentional), initial encounter -T63591D Toxic effect of contact with other venomous fish, accidental (unintentional), subsequent encounter -T63591S Toxic effect of contact with other venomous fish, accidental (unintentional), sequela -T63592A Toxic effect of contact with other venomous fish, intentional self-harm, initial encounter -T63592D Toxic effect of contact with other venomous fish, intentional self-harm, subsequent encounter -T63592S Toxic effect of contact with other venomous fish, intentional self-harm, sequela -T63593A Toxic effect of contact with other venomous fish, assault, initial encounter -T63593D Toxic effect of contact with other venomous fish, assault, subsequent encounter -T63593S Toxic effect of contact with other venomous fish, assault, sequela -T63594A Toxic effect of contact with other venomous fish, undetermined, initial encounter -T63594D Toxic effect of contact with other venomous fish, undetermined, subsequent encounter -T63594S Toxic effect of contact with other venomous fish, undetermined, sequela -T63611A Toxic effect of contact with Portugese Man-o-war, accidental (unintentional), initial encounter -T63611D Toxic effect of contact with Portugese Man-o-war, accidental (unintentional), subsequent encounter -T63611S Toxic effect of contact with Portugese Man-o-war, accidental (unintentional), sequela -T63612A Toxic effect of contact with Portugese Man-o-war, intentional self-harm, initial encounter -T63612D Toxic effect of contact with Portugese Man-o-war, intentional self-harm, subsequent encounter -T63612S Toxic effect of contact with Portugese Man-o-war, intentional self-harm, sequela -T63613A Toxic effect of contact with Portugese Man-o-war, assault, initial encounter -T63613D Toxic effect of contact with Portugese Man-o-war, assault, subsequent encounter -T63613S Toxic effect of contact with Portugese Man-o-war, assault, sequela -T63614A Toxic effect of contact with Portugese Man-o-war, undetermined, initial encounter -T63614D Toxic effect of contact with Portugese Man-o-war, undetermined, subsequent encounter -T63614S Toxic effect of contact with Portugese Man-o-war, undetermined, sequela -T63621A Toxic effect of contact with other jellyfish, accidental (unintentional), initial encounter -T63621D Toxic effect of contact with other jellyfish, accidental (unintentional), subsequent encounter -T63621S Toxic effect of contact with other jellyfish, accidental (unintentional), sequela -T63622A Toxic effect of contact with other jellyfish, intentional self-harm, initial encounter -T63622D Toxic effect of contact with other jellyfish, intentional self-harm, subsequent encounter -T63622S Toxic effect of contact with other jellyfish, intentional self-harm, sequela -T63623A Toxic effect of contact with other jellyfish, assault, initial encounter -T63623D Toxic effect of contact with other jellyfish, assault, subsequent encounter -T63623S Toxic effect of contact with other jellyfish, assault, sequela -T63624A Toxic effect of contact with other jellyfish, undetermined, initial encounter -T63624D Toxic effect of contact with other jellyfish, undetermined, subsequent encounter -T63624S Toxic effect of contact with other jellyfish, undetermined, sequela -T63631A Toxic effect of contact with sea anemone, accidental (unintentional), initial encounter -T63631D Toxic effect of contact with sea anemone, accidental (unintentional), subsequent encounter -T63631S Toxic effect of contact with sea anemone, accidental (unintentional), sequela -T63632A Toxic effect of contact with sea anemone, intentional self-harm, initial encounter -T63632D Toxic effect of contact with sea anemone, intentional self-harm, subsequent encounter -T63632S Toxic effect of contact with sea anemone, intentional self-harm, sequela -T63633A Toxic effect of contact with sea anemone, assault, initial encounter -T63633D Toxic effect of contact with sea anemone, assault, subsequent encounter -T63633S Toxic effect of contact with sea anemone, assault, sequela -T63634A Toxic effect of contact with sea anemone, undetermined, initial encounter -T63634D Toxic effect of contact with sea anemone, undetermined, subsequent encounter -T63634S Toxic effect of contact with sea anemone, undetermined, sequela -T63691A Toxic effect of contact with other venomous marine animals, accidental (unintentional), initial encounter -T63691D Toxic effect of contact with other venomous marine animals, accidental (unintentional), subsequent encounter -T63691S Toxic effect of contact with other venomous marine animals, accidental (unintentional), sequela -T63692A Toxic effect of contact with other venomous marine animals, intentional self-harm, initial encounter -T63692D Toxic effect of contact with other venomous marine animals, intentional self-harm, subsequent encounter -T63692S Toxic effect of contact with other venomous marine animals, intentional self-harm, sequela -T63693A Toxic effect of contact with other venomous marine animals, assault, initial encounter -T63693D Toxic effect of contact with other venomous marine animals, assault, subsequent encounter -T63693S Toxic effect of contact with other venomous marine animals, assault, sequela -T63694A Toxic effect of contact with other venomous marine animals, undetermined, initial encounter -T63694D Toxic effect of contact with other venomous marine animals, undetermined, subsequent encounter -T63694S Toxic effect of contact with other venomous marine animals, undetermined, sequela -T63711A Toxic effect of contact with venomous marine plant, accidental (unintentional), initial encounter -T63711D Toxic effect of contact with venomous marine plant, accidental (unintentional), subsequent encounter -T63711S Toxic effect of contact with venomous marine plant, accidental (unintentional), sequela -T63712A Toxic effect of contact with venomous marine plant, intentional self-harm, initial encounter -T63712D Toxic effect of contact with venomous marine plant, intentional self-harm, subsequent encounter -T63712S Toxic effect of contact with venomous marine plant, intentional self-harm, sequela -T63713A Toxic effect of contact with venomous marine plant, assault, initial encounter -T63713D Toxic effect of contact with venomous marine plant, assault, subsequent encounter -T63713S Toxic effect of contact with venomous marine plant, assault, sequela -T63714A Toxic effect of contact with venomous marine plant, undetermined, initial encounter -T63714D Toxic effect of contact with venomous marine plant, undetermined, subsequent encounter -T63714S Toxic effect of contact with venomous marine plant, undetermined, sequela -T63791A Toxic effect of contact with other venomous plant, accidental (unintentional), initial encounter -T63791D Toxic effect of contact with other venomous plant, accidental (unintentional), subsequent encounter -T63791S Toxic effect of contact with other venomous plant, accidental (unintentional), sequela -T63792A Toxic effect of contact with other venomous plant, intentional self-harm, initial encounter -T63792D Toxic effect of contact with other venomous plant, intentional self-harm, subsequent encounter -T63792S Toxic effect of contact with other venomous plant, intentional self-harm, sequela -T63793A Toxic effect of contact with other venomous plant, assault, initial encounter -T63793D Toxic effect of contact with other venomous plant, assault, subsequent encounter -T63793S Toxic effect of contact with other venomous plant, assault, sequela -T63794A Toxic effect of contact with other venomous plant, undetermined, initial encounter -T63794D Toxic effect of contact with other venomous plant, undetermined, subsequent encounter -T63794S Toxic effect of contact with other venomous plant, undetermined, sequela -T63811A Toxic effect of contact with venomous frog, accidental (unintentional), initial encounter -T63811D Toxic effect of contact with venomous frog, accidental (unintentional), subsequent encounter -T63811S Toxic effect of contact with venomous frog, accidental (unintentional), sequela -T63812A Toxic effect of contact with venomous frog, intentional self-harm, initial encounter -T63812D Toxic effect of contact with venomous frog, intentional self-harm, subsequent encounter -T63812S Toxic effect of contact with venomous frog, intentional self-harm, sequela -T63813A Toxic effect of contact with venomous frog, assault, initial encounter -T63813D Toxic effect of contact with venomous frog, assault, subsequent encounter -T63813S Toxic effect of contact with venomous frog, assault, sequela -T63814A Toxic effect of contact with venomous frog, undetermined, initial encounter -T63814D Toxic effect of contact with venomous frog, undetermined, subsequent encounter -T63814S Toxic effect of contact with venomous frog, undetermined, sequela -T63821A Toxic effect of contact with venomous toad, accidental (unintentional), initial encounter -T63821D Toxic effect of contact with venomous toad, accidental (unintentional), subsequent encounter -T63821S Toxic effect of contact with venomous toad, accidental (unintentional), sequela -T63822A Toxic effect of contact with venomous toad, intentional self-harm, initial encounter -T63822D Toxic effect of contact with venomous toad, intentional self-harm, subsequent encounter -T63822S Toxic effect of contact with venomous toad, intentional self-harm, sequela -T63823A Toxic effect of contact with venomous toad, assault, initial encounter -T63823D Toxic effect of contact with venomous toad, assault, subsequent encounter -T63823S Toxic effect of contact with venomous toad, assault, sequela -T63824A Toxic effect of contact with venomous toad, undetermined, initial encounter -T63824D Toxic effect of contact with venomous toad, undetermined, subsequent encounter -T63824S Toxic effect of contact with venomous toad, undetermined, sequela -T63831A Toxic effect of contact with other venomous amphibian, accidental (unintentional), initial encounter -T63831D Toxic effect of contact with other venomous amphibian, accidental (unintentional), subsequent encounter -T63831S Toxic effect of contact with other venomous amphibian, accidental (unintentional), sequela -T63832A Toxic effect of contact with other venomous amphibian, intentional self-harm, initial encounter -T63832D Toxic effect of contact with other venomous amphibian, intentional self-harm, subsequent encounter -T63832S Toxic effect of contact with other venomous amphibian, intentional self-harm, sequela -T63833A Toxic effect of contact with other venomous amphibian, assault, initial encounter -T63833D Toxic effect of contact with other venomous amphibian, assault, subsequent encounter -T63833S Toxic effect of contact with other venomous amphibian, assault, sequela -T63834A Toxic effect of contact with other venomous amphibian, undetermined, initial encounter -T63834D Toxic effect of contact with other venomous amphibian, undetermined, subsequent encounter -T63834S Toxic effect of contact with other venomous amphibian, undetermined, sequela -T63891A Toxic effect of contact with other venomous animals, accidental (unintentional), initial encounter -T63891D Toxic effect of contact with other venomous animals, accidental (unintentional), subsequent encounter -T63891S Toxic effect of contact with other venomous animals, accidental (unintentional), sequela -T63892A Toxic effect of contact with other venomous animals, intentional self-harm, initial encounter -T63892D Toxic effect of contact with other venomous animals, intentional self-harm, subsequent encounter -T63892S Toxic effect of contact with other venomous animals, intentional self-harm, sequela -T63893A Toxic effect of contact with other venomous animals, assault, initial encounter -T63893D Toxic effect of contact with other venomous animals, assault, subsequent encounter -T63893S Toxic effect of contact with other venomous animals, assault, sequela -T63894A Toxic effect of contact with other venomous animals, undetermined, initial encounter -T63894D Toxic effect of contact with other venomous animals, undetermined, subsequent encounter -T63894S Toxic effect of contact with other venomous animals, undetermined, sequela -T6391XA Toxic effect of contact with unspecified venomous animal, accidental (unintentional), initial encounter -T6391XD Toxic effect of contact with unspecified venomous animal, accidental (unintentional), subsequent encounter -T6391XS Toxic effect of contact with unspecified venomous animal, accidental (unintentional), sequela -T6392XA Toxic effect of contact with unspecified venomous animal, intentional self-harm, initial encounter -T6392XD Toxic effect of contact with unspecified venomous animal, intentional self-harm, subsequent encounter -T6392XS Toxic effect of contact with unspecified venomous animal, intentional self-harm, sequela -T6393XA Toxic effect of contact with unspecified venomous animal, assault, initial encounter -T6393XD Toxic effect of contact with unspecified venomous animal, assault, subsequent encounter -T6393XS Toxic effect of contact with unspecified venomous animal, assault, sequela -T6394XA Toxic effect of contact with unspecified venomous animal, undetermined, initial encounter -T6394XD Toxic effect of contact with unspecified venomous animal, undetermined, subsequent encounter -T6394XS Toxic effect of contact with unspecified venomous animal, undetermined, sequela -T6401XA Toxic effect of aflatoxin, accidental (unintentional), initial encounter -T6401XD Toxic effect of aflatoxin, accidental (unintentional), subsequent encounter -T6401XS Toxic effect of aflatoxin, accidental (unintentional), sequela -T6402XA Toxic effect of aflatoxin, intentional self-harm, initial encounter -T6402XD Toxic effect of aflatoxin, intentional self-harm, subsequent encounter -T6402XS Toxic effect of aflatoxin, intentional self-harm, sequela -T6403XA Toxic effect of aflatoxin, assault, initial encounter -T6403XD Toxic effect of aflatoxin, assault, subsequent encounter -T6403XS Toxic effect of aflatoxin, assault, sequela -T6404XA Toxic effect of aflatoxin, undetermined, initial encounter -T6404XD Toxic effect of aflatoxin, undetermined, subsequent encounter -T6404XS Toxic effect of aflatoxin, undetermined, sequela -T6481XA Toxic effect of other mycotoxin food contaminants, accidental (unintentional), initial encounter -T6481XD Toxic effect of other mycotoxin food contaminants, accidental (unintentional), subsequent encounter -T6481XS Toxic effect of other mycotoxin food contaminants, accidental (unintentional), sequela -T6482XA Toxic effect of other mycotoxin food contaminants, intentional self-harm, initial encounter -T6482XD Toxic effect of other mycotoxin food contaminants, intentional self-harm, subsequent encounter -T6482XS Toxic effect of other mycotoxin food contaminants, intentional self-harm, sequela -T6483XA Toxic effect of other mycotoxin food contaminants, assault, initial encounter -T6483XD Toxic effect of other mycotoxin food contaminants, assault, subsequent encounter -T6483XS Toxic effect of other mycotoxin food contaminants, assault, sequela -T6484XA Toxic effect of other mycotoxin food contaminants, undetermined, initial encounter -T6484XD Toxic effect of other mycotoxin food contaminants, undetermined, subsequent encounter -T6484XS Toxic effect of other mycotoxin food contaminants, undetermined, sequela -T650X1A Toxic effect of cyanides, accidental (unintentional), initial encounter -T650X1D Toxic effect of cyanides, accidental (unintentional), subsequent encounter -T650X1S Toxic effect of cyanides, accidental (unintentional), sequela -T650X2A Toxic effect of cyanides, intentional self-harm, initial encounter -T650X2D Toxic effect of cyanides, intentional self-harm, subsequent encounter -T650X2S Toxic effect of cyanides, intentional self-harm, sequela -T650X3A Toxic effect of cyanides, assault, initial encounter -T650X3D Toxic effect of cyanides, assault, subsequent encounter -T650X3S Toxic effect of cyanides, assault, sequela -T650X4A Toxic effect of cyanides, undetermined, initial encounter -T650X4D Toxic effect of cyanides, undetermined, subsequent encounter -T650X4S Toxic effect of cyanides, undetermined, sequela -T651X1A Toxic effect of strychnine and its salts, accidental (unintentional), initial encounter -T651X1D Toxic effect of strychnine and its salts, accidental (unintentional), subsequent encounter -T651X1S Toxic effect of strychnine and its salts, accidental (unintentional), sequela -T651X2A Toxic effect of strychnine and its salts, intentional self-harm, initial encounter -T651X2D Toxic effect of strychnine and its salts, intentional self-harm, subsequent encounter -T651X2S Toxic effect of strychnine and its salts, intentional self-harm, sequela -T651X3A Toxic effect of strychnine and its salts, assault, initial encounter -T651X3D Toxic effect of strychnine and its salts, assault, subsequent encounter -T651X3S Toxic effect of strychnine and its salts, assault, sequela -T651X4A Toxic effect of strychnine and its salts, undetermined, initial encounter -T651X4D Toxic effect of strychnine and its salts, undetermined, subsequent encounter -T651X4S Toxic effect of strychnine and its salts, undetermined, sequela -T65211A Toxic effect of chewing tobacco, accidental (unintentional), initial encounter -T65211D Toxic effect of chewing tobacco, accidental (unintentional), subsequent encounter -T65211S Toxic effect of chewing tobacco, accidental (unintentional), sequela -T65212A Toxic effect of chewing tobacco, intentional self-harm, initial encounter -T65212D Toxic effect of chewing tobacco, intentional self-harm, subsequent encounter -T65212S Toxic effect of chewing tobacco, intentional self-harm, sequela -T65213A Toxic effect of chewing tobacco, assault, initial encounter -T65213D Toxic effect of chewing tobacco, assault, subsequent encounter -T65213S Toxic effect of chewing tobacco, assault, sequela -T65214A Toxic effect of chewing tobacco, undetermined, initial encounter -T65214D Toxic effect of chewing tobacco, undetermined, subsequent encounter -T65214S Toxic effect of chewing tobacco, undetermined, sequela -T65221A Toxic effect of tobacco cigarettes, accidental (unintentional), initial encounter -T65221D Toxic effect of tobacco cigarettes, accidental (unintentional), subsequent encounter -T65221S Toxic effect of tobacco cigarettes, accidental (unintentional), sequela -T65222A Toxic effect of tobacco cigarettes, intentional self-harm, initial encounter -T65222D Toxic effect of tobacco cigarettes, intentional self-harm, subsequent encounter -T65222S Toxic effect of tobacco cigarettes, intentional self-harm, sequela -T65223A Toxic effect of tobacco cigarettes, assault, initial encounter -T65223D Toxic effect of tobacco cigarettes, assault, subsequent encounter -T65223S Toxic effect of tobacco cigarettes, assault, sequela -T65224A Toxic effect of tobacco cigarettes, undetermined, initial encounter -T65224D Toxic effect of tobacco cigarettes, undetermined, subsequent encounter -T65224S Toxic effect of tobacco cigarettes, undetermined, sequela -T65291A Toxic effect of other tobacco and nicotine, accidental (unintentional), initial encounter -T65291D Toxic effect of other tobacco and nicotine, accidental (unintentional), subsequent encounter -T65291S Toxic effect of other tobacco and nicotine, accidental (unintentional), sequela -T65292A Toxic effect of other tobacco and nicotine, intentional self-harm, initial encounter -T65292D Toxic effect of other tobacco and nicotine, intentional self-harm, subsequent encounter -T65292S Toxic effect of other tobacco and nicotine, intentional self-harm, sequela -T65293A Toxic effect of other tobacco and nicotine, assault, initial encounter -T65293D Toxic effect of other tobacco and nicotine, assault, subsequent encounter -T65293S Toxic effect of other tobacco and nicotine, assault, sequela -T65294A Toxic effect of other tobacco and nicotine, undetermined, initial encounter -T65294D Toxic effect of other tobacco and nicotine, undetermined, subsequent encounter -T65294S Toxic effect of other tobacco and nicotine, undetermined, sequela -T653X1A Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, accidental (unintentional), initial encounter -T653X1D Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, accidental (unintentional), subsequent encounter -T653X1S Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, accidental (unintentional), sequela -T653X2A Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, intentional self-harm, initial encounter -T653X2D Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, intentional self-harm, subsequent encounter -T653X2S Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, intentional self-harm, sequela -T653X3A Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, assault, initial encounter -T653X3D Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, assault, subsequent encounter -T653X3S Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, assault, sequela -T653X4A Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, undetermined, initial encounter -T653X4D Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, undetermined, subsequent encounter -T653X4S Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, undetermined, sequela -T654X1A Toxic effect of carbon disulfide, accidental (unintentional), initial encounter -T654X1D Toxic effect of carbon disulfide, accidental (unintentional), subsequent encounter -T654X1S Toxic effect of carbon disulfide, accidental (unintentional), sequela -T654X2A Toxic effect of carbon disulfide, intentional self-harm, initial encounter -T654X2D Toxic effect of carbon disulfide, intentional self-harm, subsequent encounter -T654X2S Toxic effect of carbon disulfide, intentional self-harm, sequela -T654X3A Toxic effect of carbon disulfide, assault, initial encounter -T654X3D Toxic effect of carbon disulfide, assault, subsequent encounter -T654X3S Toxic effect of carbon disulfide, assault, sequela -T654X4A Toxic effect of carbon disulfide, undetermined, initial encounter -T654X4D Toxic effect of carbon disulfide, undetermined, subsequent encounter -T654X4S Toxic effect of carbon disulfide, undetermined, sequela -T655X1A Toxic effect of nitroglycerin and other nitric acids and esters, accidental (unintentional), initial encounter -T655X1D Toxic effect of nitroglycerin and other nitric acids and esters, accidental (unintentional), subsequent encounter -T655X1S Toxic effect of nitroglycerin and other nitric acids and esters, accidental (unintentional), sequela -T655X2A Toxic effect of nitroglycerin and other nitric acids and esters, intentional self-harm, initial encounter -T655X2D Toxic effect of nitroglycerin and other nitric acids and esters, intentional self-harm, subsequent encounter -T655X2S Toxic effect of nitroglycerin and other nitric acids and esters, intentional self-harm, sequela -T655X3A Toxic effect of nitroglycerin and other nitric acids and esters, assault, initial encounter -T655X3D Toxic effect of nitroglycerin and other nitric acids and esters, assault, subsequent encounter -T655X3S Toxic effect of nitroglycerin and other nitric acids and esters, assault, sequela -T655X4A Toxic effect of nitroglycerin and other nitric acids and esters, undetermined, initial encounter -T655X4D Toxic effect of nitroglycerin and other nitric acids and esters, undetermined, subsequent encounter -T655X4S Toxic effect of nitroglycerin and other nitric acids and esters, undetermined, sequela -T656X1A Toxic effect of paints and dyes, not elsewhere classified, accidental (unintentional), initial encounter -T656X1D Toxic effect of paints and dyes, not elsewhere classified, accidental (unintentional), subsequent encounter -T656X1S Toxic effect of paints and dyes, not elsewhere classified, accidental (unintentional), sequela -T656X2A Toxic effect of paints and dyes, not elsewhere classified, intentional self-harm, initial encounter -T656X2D Toxic effect of paints and dyes, not elsewhere classified, intentional self-harm, subsequent encounter -T656X2S Toxic effect of paints and dyes, not elsewhere classified, intentional self-harm, sequela -T656X3A Toxic effect of paints and dyes, not elsewhere classified, assault, initial encounter -T656X3D Toxic effect of paints and dyes, not elsewhere classified, assault, subsequent encounter -T656X3S Toxic effect of paints and dyes, not elsewhere classified, assault, sequela -T656X4A Toxic effect of paints and dyes, not elsewhere classified, undetermined, initial encounter -T656X4D Toxic effect of paints and dyes, not elsewhere classified, undetermined, subsequent encounter -T656X4S Toxic effect of paints and dyes, not elsewhere classified, undetermined, sequela -T65811A Toxic effect of latex, accidental (unintentional), initial encounter -T65811D Toxic effect of latex, accidental (unintentional), subsequent encounter -T65811S Toxic effect of latex, accidental (unintentional), sequela -T65812A Toxic effect of latex, intentional self-harm, initial encounter -T65812D Toxic effect of latex, intentional self-harm, subsequent encounter -T65812S Toxic effect of latex, intentional self-harm, sequela -T65813A Toxic effect of latex, assault, initial encounter -T65813D Toxic effect of latex, assault, subsequent encounter -T65813S Toxic effect of latex, assault, sequela -T65814A Toxic effect of latex, undetermined, initial encounter -T65814D Toxic effect of latex, undetermined, subsequent encounter -T65814S Toxic effect of latex, undetermined, sequela -T65821A Toxic effect of harmful algae and algae toxins, accidental (unintentional), initial encounter -T65821D Toxic effect of harmful algae and algae toxins, accidental (unintentional), subsequent encounter -T65821S Toxic effect of harmful algae and algae toxins, accidental (unintentional), sequela -T65822A Toxic effect of harmful algae and algae toxins, intentional self-harm, initial encounter -T65822D Toxic effect of harmful algae and algae toxins, intentional self-harm, subsequent encounter -T65822S Toxic effect of harmful algae and algae toxins, intentional self-harm, sequela -T65823A Toxic effect of harmful algae and algae toxins, assault, initial encounter -T65823D Toxic effect of harmful algae and algae toxins, assault, subsequent encounter -T65823S Toxic effect of harmful algae and algae toxins, assault, sequela -T65824A Toxic effect of harmful algae and algae toxins, undetermined, initial encounter -T65824D Toxic effect of harmful algae and algae toxins, undetermined, subsequent encounter -T65824S Toxic effect of harmful algae and algae toxins, undetermined, sequela -T65831A Toxic effect of fiberglass, accidental (unintentional), initial encounter -T65831D Toxic effect of fiberglass, accidental (unintentional), subsequent encounter -T65831S Toxic effect of fiberglass, accidental (unintentional), sequela -T65832A Toxic effect of fiberglass, intentional self-harm, initial encounter -T65832D Toxic effect of fiberglass, intentional self-harm, subsequent encounter -T65832S Toxic effect of fiberglass, intentional self-harm, sequela -T65833A Toxic effect of fiberglass, assault, initial encounter -T65833D Toxic effect of fiberglass, assault, subsequent encounter -T65833S Toxic effect of fiberglass, assault, sequela -T65834A Toxic effect of fiberglass, undetermined, initial encounter -T65834D Toxic effect of fiberglass, undetermined, subsequent encounter -T65834S Toxic effect of fiberglass, undetermined, sequela -T65891A Toxic effect of other specified substances, accidental (unintentional), initial encounter -T65891D Toxic effect of other specified substances, accidental (unintentional), subsequent encounter -T65891S Toxic effect of other specified substances, accidental (unintentional), sequela -T65892A Toxic effect of other specified substances, intentional self-harm, initial encounter -T65892D Toxic effect of other specified substances, intentional self-harm, subsequent encounter -T65892S Toxic effect of other specified substances, intentional self-harm, sequela -T65893A Toxic effect of other specified substances, assault, initial encounter -T65893D Toxic effect of other specified substances, assault, subsequent encounter -T65893S Toxic effect of other specified substances, assault, sequela -T65894A Toxic effect of other specified substances, undetermined, initial encounter -T65894D Toxic effect of other specified substances, undetermined, subsequent encounter -T65894S Toxic effect of other specified substances, undetermined, sequela -T6591XA Toxic effect of unspecified substance, accidental (unintentional), initial encounter -T6591XD Toxic effect of unspecified substance, accidental (unintentional), subsequent encounter -T6591XS Toxic effect of unspecified substance, accidental (unintentional), sequela -T6592XA Toxic effect of unspecified substance, intentional self-harm, initial encounter -T6592XD Toxic effect of unspecified substance, intentional self-harm, subsequent encounter -T6592XS Toxic effect of unspecified substance, intentional self-harm, sequela -T6593XA Toxic effect of unspecified substance, assault, initial encounter -T6593XD Toxic effect of unspecified substance, assault, subsequent encounter -T6593XS Toxic effect of unspecified substance, assault, sequela -T6594XA Toxic effect of unspecified substance, undetermined, initial encounter -T6594XD Toxic effect of unspecified substance, undetermined, subsequent encounter -T6594XS Toxic effect of unspecified substance, undetermined, sequela -T66XXXA Radiation sickness, unspecified, initial encounter -T66XXXD Radiation sickness, unspecified, subsequent encounter -T66XXXS Radiation sickness, unspecified, sequela -T670XXA Heatstroke and sunstroke, initial encounter -T670XXD Heatstroke and sunstroke, subsequent encounter -T670XXS Heatstroke and sunstroke, sequela -T671XXA Heat syncope, initial encounter -T671XXD Heat syncope, subsequent encounter -T671XXS Heat syncope, sequela -T672XXA Heat cramp, initial encounter -T672XXD Heat cramp, subsequent encounter -T672XXS Heat cramp, sequela -T673XXA Heat exhaustion, anhydrotic, initial encounter -T673XXD Heat exhaustion, anhydrotic, subsequent encounter -T673XXS Heat exhaustion, anhydrotic, sequela -T674XXA Heat exhaustion due to salt depletion, initial encounter -T674XXD Heat exhaustion due to salt depletion, subsequent encounter -T674XXS Heat exhaustion due to salt depletion, sequela -T675XXA Heat exhaustion, unspecified, initial encounter -T675XXD Heat exhaustion, unspecified, subsequent encounter -T675XXS Heat exhaustion, unspecified, sequela -T676XXA Heat fatigue, transient, initial encounter -T676XXD Heat fatigue, transient, subsequent encounter -T676XXS Heat fatigue, transient, sequela -T677XXA Heat edema, initial encounter -T677XXD Heat edema, subsequent encounter -T677XXS Heat edema, sequela -T678XXA Other effects of heat and light, initial encounter -T678XXD Other effects of heat and light, subsequent encounter -T678XXS Other effects of heat and light, sequela -T679XXA Effect of heat and light, unspecified, initial encounter -T679XXD Effect of heat and light, unspecified, subsequent encounter -T679XXS Effect of heat and light, unspecified, sequela -T68XXXA Hypothermia, initial encounter -T68XXXD Hypothermia, subsequent encounter -T68XXXS Hypothermia, sequela -T69011A Immersion hand, right hand, initial encounter -T69011D Immersion hand, right hand, subsequent encounter -T69011S Immersion hand, right hand, sequela -T69012A Immersion hand, left hand, initial encounter -T69012D Immersion hand, left hand, subsequent encounter -T69012S Immersion hand, left hand, sequela -T69019A Immersion hand, unspecified hand, initial encounter -T69019D Immersion hand, unspecified hand, subsequent encounter -T69019S Immersion hand, unspecified hand, sequela -T69021A Immersion foot, right foot, initial encounter -T69021D Immersion foot, right foot, subsequent encounter -T69021S Immersion foot, right foot, sequela -T69022A Immersion foot, left foot, initial encounter -T69022D Immersion foot, left foot, subsequent encounter -T69022S Immersion foot, left foot, sequela -T69029A Immersion foot, unspecified foot, initial encounter -T69029D Immersion foot, unspecified foot, subsequent encounter -T69029S Immersion foot, unspecified foot, sequela -T691XXA Chilblains, initial encounter -T691XXD Chilblains, subsequent encounter -T691XXS Chilblains, sequela -T698XXA Other specified effects of reduced temperature, initial encounter -T698XXD Other specified effects of reduced temperature, subsequent encounter -T698XXS Other specified effects of reduced temperature, sequela -T699XXA Effect of reduced temperature, unspecified, initial encounter -T699XXD Effect of reduced temperature, unspecified, subsequent encounter -T699XXS Effect of reduced temperature, unspecified, sequela -T700XXA Otitic barotrauma, initial encounter -T700XXD Otitic barotrauma, subsequent encounter -T700XXS Otitic barotrauma, sequela -T701XXA Sinus barotrauma, initial encounter -T701XXD Sinus barotrauma, subsequent encounter -T701XXS Sinus barotrauma, sequela -T7020XA Unspecified effects of high altitude, initial encounter -T7020XD Unspecified effects of high altitude, subsequent encounter -T7020XS Unspecified effects of high altitude, sequela -T7029XA Other effects of high altitude, initial encounter -T7029XD Other effects of high altitude, subsequent encounter -T7029XS Other effects of high altitude, sequela -T703XXA Caisson disease [decompression sickness], initial encounter -T703XXD Caisson disease [decompression sickness], subsequent encounter -T703XXS Caisson disease [decompression sickness], sequela -T704XXA Effects of high-pressure fluids, initial encounter -T704XXD Effects of high-pressure fluids, subsequent encounter -T704XXS Effects of high-pressure fluids, sequela -T708XXA Other effects of air pressure and water pressure, initial encounter -T708XXD Other effects of air pressure and water pressure, subsequent encounter -T708XXS Other effects of air pressure and water pressure, sequela -T709XXA Effect of air pressure and water pressure, unspecified, initial encounter -T709XXD Effect of air pressure and water pressure, unspecified, subsequent encounter -T709XXS Effect of air pressure and water pressure, unspecified, sequela -T71111A Asphyxiation due to smothering under pillow, accidental, initial encounter -T71111D Asphyxiation due to smothering under pillow, accidental, subsequent encounter -T71111S Asphyxiation due to smothering under pillow, accidental, sequela -T71112A Asphyxiation due to smothering under pillow, intentional self-harm, initial encounter -T71112D Asphyxiation due to smothering under pillow, intentional self-harm, subsequent encounter -T71112S Asphyxiation due to smothering under pillow, intentional self-harm, sequela -T71113A Asphyxiation due to smothering under pillow, assault, initial encounter -T71113D Asphyxiation due to smothering under pillow, assault, subsequent encounter -T71113S Asphyxiation due to smothering under pillow, assault, sequela -T71114A Asphyxiation due to smothering under pillow, undetermined, initial encounter -T71114D Asphyxiation due to smothering under pillow, undetermined, subsequent encounter -T71114S Asphyxiation due to smothering under pillow, undetermined, sequela -T71121A Asphyxiation due to plastic bag, accidental, initial encounter -T71121D Asphyxiation due to plastic bag, accidental, subsequent encounter -T71121S Asphyxiation due to plastic bag, accidental, sequela -T71122A Asphyxiation due to plastic bag, intentional self-harm, initial encounter -T71122D Asphyxiation due to plastic bag, intentional self-harm, subsequent encounter -T71122S Asphyxiation due to plastic bag, intentional self-harm, sequela -T71123A Asphyxiation due to plastic bag, assault, initial encounter -T71123D Asphyxiation due to plastic bag, assault, subsequent encounter -T71123S Asphyxiation due to plastic bag, assault, sequela -T71124A Asphyxiation due to plastic bag, undetermined, initial encounter -T71124D Asphyxiation due to plastic bag, undetermined, subsequent encounter -T71124S Asphyxiation due to plastic bag, undetermined, sequela -T71131A Asphyxiation due to being trapped in bed linens, accidental, initial encounter -T71131D Asphyxiation due to being trapped in bed linens, accidental, subsequent encounter -T71131S Asphyxiation due to being trapped in bed linens, accidental, sequela -T71132A Asphyxiation due to being trapped in bed linens, intentional self-harm, initial encounter -T71132D Asphyxiation due to being trapped in bed linens, intentional self-harm, subsequent encounter -T71132S Asphyxiation due to being trapped in bed linens, intentional self-harm, sequela -T71133A Asphyxiation due to being trapped in bed linens, assault, initial encounter -T71133D Asphyxiation due to being trapped in bed linens, assault, subsequent encounter -T71133S Asphyxiation due to being trapped in bed linens, assault, sequela -T71134A Asphyxiation due to being trapped in bed linens, undetermined, initial encounter -T71134D Asphyxiation due to being trapped in bed linens, undetermined, subsequent encounter -T71134S Asphyxiation due to being trapped in bed linens, undetermined, sequela -T71141A Asphyxiation due to smothering under another person's body (in bed), accidental, initial encounter -T71141D Asphyxiation due to smothering under another person's body (in bed), accidental, subsequent encounter -T71141S Asphyxiation due to smothering under another person's body (in bed), accidental, sequela -T71143A Asphyxiation due to smothering under another person's body (in bed), assault, initial encounter -T71143D Asphyxiation due to smothering under another person's body (in bed), assault, subsequent encounter -T71143S Asphyxiation due to smothering under another person's body (in bed), assault, sequela -T71144A Asphyxiation due to smothering under another person's body (in bed), undetermined, initial encounter -T71144D Asphyxiation due to smothering under another person's body (in bed), undetermined, subsequent encounter -T71144S Asphyxiation due to smothering under another person's body (in bed), undetermined, sequela -T71151A Asphyxiation due to smothering in furniture, accidental, initial encounter -T71151D Asphyxiation due to smothering in furniture, accidental, subsequent encounter -T71151S Asphyxiation due to smothering in furniture, accidental, sequela -T71152A Asphyxiation due to smothering in furniture, intentional self-harm, initial encounter -T71152D Asphyxiation due to smothering in furniture, intentional self-harm, subsequent encounter -T71152S Asphyxiation due to smothering in furniture, intentional self-harm, sequela -T71153A Asphyxiation due to smothering in furniture, assault, initial encounter -T71153D Asphyxiation due to smothering in furniture, assault, subsequent encounter -T71153S Asphyxiation due to smothering in furniture, assault, sequela -T71154A Asphyxiation due to smothering in furniture, undetermined, initial encounter -T71154D Asphyxiation due to smothering in furniture, undetermined, subsequent encounter -T71154S Asphyxiation due to smothering in furniture, undetermined, sequela -T71161A Asphyxiation due to hanging, accidental, initial encounter -T71161D Asphyxiation due to hanging, accidental, subsequent encounter -T71161S Asphyxiation due to hanging, accidental, sequela -T71162A Asphyxiation due to hanging, intentional self-harm, initial encounter -T71162D Asphyxiation due to hanging, intentional self-harm, subsequent encounter -T71162S Asphyxiation due to hanging, intentional self-harm, sequela -T71163A Asphyxiation due to hanging, assault, initial encounter -T71163D Asphyxiation due to hanging, assault, subsequent encounter -T71163S Asphyxiation due to hanging, assault, sequela -T71164A Asphyxiation due to hanging, undetermined, initial encounter -T71164D Asphyxiation due to hanging, undetermined, subsequent encounter -T71164S Asphyxiation due to hanging, undetermined, sequela -T71191A Asphyxiation due to mechanical threat to breathing due to other causes, accidental, initial encounter -T71191D Asphyxiation due to mechanical threat to breathing due to other causes, accidental, subsequent encounter -T71191S Asphyxiation due to mechanical threat to breathing due to other causes, accidental, sequela -T71192A Asphyxiation due to mechanical threat to breathing due to other causes, intentional self-harm, initial encounter -T71192D Asphyxiation due to mechanical threat to breathing due to other causes, intentional self-harm, subsequent encounter -T71192S Asphyxiation due to mechanical threat to breathing due to other causes, intentional self-harm, sequela -T71193A Asphyxiation due to mechanical threat to breathing due to other causes, assault, initial encounter -T71193D Asphyxiation due to mechanical threat to breathing due to other causes, assault, subsequent encounter -T71193S Asphyxiation due to mechanical threat to breathing due to other causes, assault, sequela -T71194A Asphyxiation due to mechanical threat to breathing due to other causes, undetermined, initial encounter -T71194D Asphyxiation due to mechanical threat to breathing due to other causes, undetermined, subsequent encounter -T71194S Asphyxiation due to mechanical threat to breathing due to other causes, undetermined, sequela -T7120XA Asphyxiation due to systemic oxygen deficiency due to low oxygen content in ambient air due to unspecified cause, initial encounter -T7120XD Asphyxiation due to systemic oxygen deficiency due to low oxygen content in ambient air due to unspecified cause, subsequent encounter -T7120XS Asphyxiation due to systemic oxygen deficiency due to low oxygen content in ambient air due to unspecified cause, sequela -T7121XA Asphyxiation due to cave-in or falling earth, initial encounter -T7121XD Asphyxiation due to cave-in or falling earth, subsequent encounter -T7121XS Asphyxiation due to cave-in or falling earth, sequela -T71221A Asphyxiation due to being trapped in a car trunk, accidental, initial encounter -T71221D Asphyxiation due to being trapped in a car trunk, accidental, subsequent encounter -T71221S Asphyxiation due to being trapped in a car trunk, accidental, sequela -T71222A Asphyxiation due to being trapped in a car trunk, intentional self-harm, initial encounter -T71222D Asphyxiation due to being trapped in a car trunk, intentional self-harm, subsequent encounter -T71222S Asphyxiation due to being trapped in a car trunk, intentional self-harm, sequela -T71223A Asphyxiation due to being trapped in a car trunk, assault, initial encounter -T71223D Asphyxiation due to being trapped in a car trunk, assault, subsequent encounter -T71223S Asphyxiation due to being trapped in a car trunk, assault, sequela -T71224A Asphyxiation due to being trapped in a car trunk, undetermined, initial encounter -T71224D Asphyxiation due to being trapped in a car trunk, undetermined, subsequent encounter -T71224S Asphyxiation due to being trapped in a car trunk, undetermined, sequela -T71231A Asphyxiation due to being trapped in a (discarded) refrigerator, accidental, initial encounter -T71231D Asphyxiation due to being trapped in a (discarded) refrigerator, accidental, subsequent encounter -T71231S Asphyxiation due to being trapped in a (discarded) refrigerator, accidental, sequela -T71232A Asphyxiation due to being trapped in a (discarded) refrigerator, intentional self-harm, initial encounter -T71232D Asphyxiation due to being trapped in a (discarded) refrigerator, intentional self-harm, subsequent encounter -T71232S Asphyxiation due to being trapped in a (discarded) refrigerator, intentional self-harm, sequela -T71233A Asphyxiation due to being trapped in a (discarded) refrigerator, assault, initial encounter -T71233D Asphyxiation due to being trapped in a (discarded) refrigerator, assault, subsequent encounter -T71233S Asphyxiation due to being trapped in a (discarded) refrigerator, assault, sequela -T71234A Asphyxiation due to being trapped in a (discarded) refrigerator, undetermined, initial encounter -T71234D Asphyxiation due to being trapped in a (discarded) refrigerator, undetermined, subsequent encounter -T71234S Asphyxiation due to being trapped in a (discarded) refrigerator, undetermined, sequela -T7129XA Asphyxiation due to being trapped in other low oxygen environment, initial encounter -T7129XD Asphyxiation due to being trapped in other low oxygen environment, subsequent encounter -T7129XS Asphyxiation due to being trapped in other low oxygen environment, sequela -T719XXA Asphyxiation due to unspecified cause, initial encounter -T719XXD Asphyxiation due to unspecified cause, subsequent encounter -T719XXS Asphyxiation due to unspecified cause, sequela -T730XXA Starvation, initial encounter -T730XXD Starvation, subsequent encounter -T730XXS Starvation, sequela -T731XXA Deprivation of water, initial encounter -T731XXD Deprivation of water, subsequent encounter -T731XXS Deprivation of water, sequela -T732XXA Exhaustion due to exposure, initial encounter -T732XXD Exhaustion due to exposure, subsequent encounter -T732XXS Exhaustion due to exposure, sequela -T733XXA Exhaustion due to excessive exertion, initial encounter -T733XXD Exhaustion due to excessive exertion, subsequent encounter -T733XXS Exhaustion due to excessive exertion, sequela -T738XXA Other effects of deprivation, initial encounter -T738XXD Other effects of deprivation, subsequent encounter -T738XXS Other effects of deprivation, sequela -T739XXA Effect of deprivation, unspecified, initial encounter -T739XXD Effect of deprivation, unspecified, subsequent encounter -T739XXS Effect of deprivation, unspecified, sequela -T7401XA Adult neglect or abandonment, confirmed, initial encounter -T7401XD Adult neglect or abandonment, confirmed, subsequent encounter -T7401XS Adult neglect or abandonment, confirmed, sequela -T7402XA Child neglect or abandonment, confirmed, initial encounter -T7402XD Child neglect or abandonment, confirmed, subsequent encounter -T7402XS Child neglect or abandonment, confirmed, sequela -T7411XA Adult physical abuse, confirmed, initial encounter -T7411XD Adult physical abuse, confirmed, subsequent encounter -T7411XS Adult physical abuse, confirmed, sequela -T7412XA Child physical abuse, confirmed, initial encounter -T7412XD Child physical abuse, confirmed, subsequent encounter -T7412XS Child physical abuse, confirmed, sequela -T7421XA Adult sexual abuse, confirmed, initial encounter -T7421XD Adult sexual abuse, confirmed, subsequent encounter -T7421XS Adult sexual abuse, confirmed, sequela -T7422XA Child sexual abuse, confirmed, initial encounter -T7422XD Child sexual abuse, confirmed, subsequent encounter -T7422XS Child sexual abuse, confirmed, sequela -T7431XA Adult psychological abuse, confirmed, initial encounter -T7431XD Adult psychological abuse, confirmed, subsequent encounter -T7431XS Adult psychological abuse, confirmed, sequela -T7432XA Child psychological abuse, confirmed, initial encounter -T7432XD Child psychological abuse, confirmed, subsequent encounter -T7432XS Child psychological abuse, confirmed, sequela -T744XXA Shaken infant syndrome, initial encounter -T744XXD Shaken infant syndrome, subsequent encounter -T744XXS Shaken infant syndrome, sequela -T7491XA Unspecified adult maltreatment, confirmed, initial encounter -T7491XD Unspecified adult maltreatment, confirmed, subsequent encounter -T7491XS Unspecified adult maltreatment, confirmed, sequela -T7492XA Unspecified child maltreatment, confirmed, initial encounter -T7492XD Unspecified child maltreatment, confirmed, subsequent encounter -T7492XS Unspecified child maltreatment, confirmed, sequela -T7500XA Unspecified effects of lightning, initial encounter -T7500XD Unspecified effects of lightning, subsequent encounter -T7500XS Unspecified effects of lightning, sequela -T7501XA Shock due to being struck by lightning, initial encounter -T7501XD Shock due to being struck by lightning, subsequent encounter -T7501XS Shock due to being struck by lightning, sequela -T7509XA Other effects of lightning, initial encounter -T7509XD Other effects of lightning, subsequent encounter -T7509XS Other effects of lightning, sequela -T751XXA Unspecified effects of drowning and nonfatal submersion, initial encounter -T751XXD Unspecified effects of drowning and nonfatal submersion, subsequent encounter -T751XXS Unspecified effects of drowning and nonfatal submersion, sequela -T7520XA Unspecified effects of vibration, initial encounter -T7520XD Unspecified effects of vibration, subsequent encounter -T7520XS Unspecified effects of vibration, sequela -T7521XA Pneumatic hammer syndrome, initial encounter -T7521XD Pneumatic hammer syndrome, subsequent encounter -T7521XS Pneumatic hammer syndrome, sequela -T7522XA Traumatic vasospastic syndrome, initial encounter -T7522XD Traumatic vasospastic syndrome, subsequent encounter -T7522XS Traumatic vasospastic syndrome, sequela -T7523XA Vertigo from infrasound, initial encounter -T7523XD Vertigo from infrasound, subsequent encounter -T7523XS Vertigo from infrasound, sequela -T7529XA Other effects of vibration, initial encounter -T7529XD Other effects of vibration, subsequent encounter -T7529XS Other effects of vibration, sequela -T753XXA Motion sickness, initial encounter -T753XXD Motion sickness, subsequent encounter -T753XXS Motion sickness, sequela -T754XXA Electrocution, initial encounter -T754XXD Electrocution, subsequent encounter -T754XXS Electrocution, sequela -T7581XA Effects of abnormal gravitation [G] forces, initial encounter -T7581XD Effects of abnormal gravitation [G] forces, subsequent encounter -T7581XS Effects of abnormal gravitation [G] forces, sequela -T7582XA Effects of weightlessness, initial encounter -T7582XD Effects of weightlessness, subsequent encounter -T7582XS Effects of weightlessness, sequela -T7589XA Other specified effects of external causes, initial encounter -T7589XD Other specified effects of external causes, subsequent encounter -T7589XS Other specified effects of external causes, sequela -T7601XA Adult neglect or abandonment, suspected, initial encounter -T7601XD Adult neglect or abandonment, suspected, subsequent encounter -T7601XS Adult neglect or abandonment, suspected, sequela -T7602XA Child neglect or abandonment, suspected, initial encounter -T7602XD Child neglect or abandonment, suspected, subsequent encounter -T7602XS Child neglect or abandonment, suspected, sequela -T7611XA Adult physical abuse, suspected, initial encounter -T7611XD Adult physical abuse, suspected, subsequent encounter -T7611XS Adult physical abuse, suspected, sequela -T7612XA Child physical abuse, suspected, initial encounter -T7612XD Child physical abuse, suspected, subsequent encounter -T7612XS Child physical abuse, suspected, sequela -T7621XA Adult sexual abuse, suspected, initial encounter -T7621XD Adult sexual abuse, suspected, subsequent encounter -T7621XS Adult sexual abuse, suspected, sequela -T7622XA Child sexual abuse, suspected, initial encounter -T7622XD Child sexual abuse, suspected, subsequent encounter -T7622XS Child sexual abuse, suspected, sequela -T7631XA Adult psychological abuse, suspected, initial encounter -T7631XD Adult psychological abuse, suspected, subsequent encounter -T7631XS Adult psychological abuse, suspected, sequela -T7632XA Child psychological abuse, suspected, initial encounter -T7632XD Child psychological abuse, suspected, subsequent encounter -T7632XS Child psychological abuse, suspected, sequela -T7691XA Unspecified adult maltreatment, suspected, initial encounter -T7691XD Unspecified adult maltreatment, suspected, subsequent encounter -T7691XS Unspecified adult maltreatment, suspected, sequela -T7692XA Unspecified child maltreatment, suspected, initial encounter -T7692XD Unspecified child maltreatment, suspected, subsequent encounter -T7692XS Unspecified child maltreatment, suspected, sequela -T7800XA Anaphylactic reaction due to unspecified food, initial encounter -T7800XD Anaphylactic reaction due to unspecified food, subsequent encounter -T7800XS Anaphylactic reaction due to unspecified food, sequela -T7801XA Anaphylactic reaction due to peanuts, initial encounter -T7801XD Anaphylactic reaction due to peanuts, subsequent encounter -T7801XS Anaphylactic reaction due to peanuts, sequela -T7802XA Anaphylactic reaction due to shellfish (crustaceans), initial encounter -T7802XD Anaphylactic reaction due to shellfish (crustaceans), subsequent encounter -T7802XS Anaphylactic reaction due to shellfish (crustaceans), sequela -T7803XA Anaphylactic reaction due to other fish, initial encounter -T7803XD Anaphylactic reaction due to other fish, subsequent encounter -T7803XS Anaphylactic reaction due to other fish, sequela -T7804XA Anaphylactic reaction due to fruits and vegetables, initial encounter -T7804XD Anaphylactic reaction due to fruits and vegetables, subsequent encounter -T7804XS Anaphylactic reaction due to fruits and vegetables, sequela -T7805XA Anaphylactic reaction due to tree nuts and seeds, initial encounter -T7805XD Anaphylactic reaction due to tree nuts and seeds, subsequent encounter -T7805XS Anaphylactic reaction due to tree nuts and seeds, sequela -T7806XA Anaphylactic reaction due to food additives, initial encounter -T7806XD Anaphylactic reaction due to food additives, subsequent encounter -T7806XS Anaphylactic reaction due to food additives, sequela -T7807XA Anaphylactic reaction due to milk and dairy products, initial encounter -T7807XD Anaphylactic reaction due to milk and dairy products, subsequent encounter -T7807XS Anaphylactic reaction due to milk and dairy products, sequela -T7808XA Anaphylactic reaction due to eggs, initial encounter -T7808XD Anaphylactic reaction due to eggs, subsequent encounter -T7808XS Anaphylactic reaction due to eggs, sequela -T7809XA Anaphylactic reaction due to other food products, initial encounter -T7809XD Anaphylactic reaction due to other food products, subsequent encounter -T7809XS Anaphylactic reaction due to other food products, sequela -T781XXA Other adverse food reactions, not elsewhere classified, initial encounter -T781XXD Other adverse food reactions, not elsewhere classified, subsequent encounter -T781XXS Other adverse food reactions, not elsewhere classified, sequela -T782XXA Anaphylactic shock, unspecified, initial encounter -T782XXD Anaphylactic shock, unspecified, subsequent encounter -T782XXS Anaphylactic shock, unspecified, sequela -T783XXA Angioneurotic edema, initial encounter -T783XXD Angioneurotic edema, subsequent encounter -T783XXS Angioneurotic edema, sequela -T7840XA Allergy, unspecified, initial encounter -T7840XD Allergy, unspecified, subsequent encounter -T7840XS Allergy, unspecified, sequela -T7841XA Arthus phenomenon, initial encounter -T7841XD Arthus phenomenon, subsequent encounter -T7841XS Arthus phenomenon, sequela -T7849XA Other allergy, initial encounter -T7849XD Other allergy, subsequent encounter -T7849XS Other allergy, sequela -T788XXA Other adverse effects, not elsewhere classified, initial encounter -T788XXD Other adverse effects, not elsewhere classified, subsequent encounter -T788XXS Other adverse effects, not elsewhere classified, sequela -T790XXA Air embolism (traumatic), initial encounter -T790XXD Air embolism (traumatic), subsequent encounter -T790XXS Air embolism (traumatic), sequela -T791XXA Fat embolism (traumatic), initial encounter -T791XXD Fat embolism (traumatic), subsequent encounter -T791XXS Fat embolism (traumatic), sequela -T792XXA Traumatic secondary and recurrent hemorrhage and seroma, initial encounter -T792XXD Traumatic secondary and recurrent hemorrhage and seroma, subsequent encounter -T792XXS Traumatic secondary and recurrent hemorrhage and seroma, sequela -T794XXA Traumatic shock, initial encounter -T794XXD Traumatic shock, subsequent encounter -T794XXS Traumatic shock, sequela -T795XXA Traumatic anuria, initial encounter -T795XXD Traumatic anuria, subsequent encounter -T795XXS Traumatic anuria, sequela -T796XXA Traumatic ischemia of muscle, initial encounter -T796XXD Traumatic ischemia of muscle, subsequent encounter -T796XXS Traumatic ischemia of muscle, sequela -T797XXA Traumatic subcutaneous emphysema, initial encounter -T797XXD Traumatic subcutaneous emphysema, subsequent encounter -T797XXS Traumatic subcutaneous emphysema, sequela -T79A0XA Compartment syndrome, unspecified, initial encounter -T79A0XD Compartment syndrome, unspecified, subsequent encounter -T79A0XS Compartment syndrome, unspecified, sequela -T79A11A Traumatic compartment syndrome of right upper extremity, initial encounter -T79A11D Traumatic compartment syndrome of right upper extremity, subsequent encounter -T79A11S Traumatic compartment syndrome of right upper extremity, sequela -T79A12A Traumatic compartment syndrome of left upper extremity, initial encounter -T79A12D Traumatic compartment syndrome of left upper extremity, subsequent encounter -T79A12S Traumatic compartment syndrome of left upper extremity, sequela -T79A19A Traumatic compartment syndrome of unspecified upper extremity, initial encounter -T79A19D Traumatic compartment syndrome of unspecified upper extremity, subsequent encounter -T79A19S Traumatic compartment syndrome of unspecified upper extremity, sequela -T79A21A Traumatic compartment syndrome of right lower extremity, initial encounter -T79A21D Traumatic compartment syndrome of right lower extremity, subsequent encounter -T79A21S Traumatic compartment syndrome of right lower extremity, sequela -T79A22A Traumatic compartment syndrome of left lower extremity, initial encounter -T79A22D Traumatic compartment syndrome of left lower extremity, subsequent encounter -T79A22S Traumatic compartment syndrome of left lower extremity, sequela -T79A29A Traumatic compartment syndrome of unspecified lower extremity, initial encounter -T79A29D Traumatic compartment syndrome of unspecified lower extremity, subsequent encounter -T79A29S Traumatic compartment syndrome of unspecified lower extremity, sequela -T79A3XA Traumatic compartment syndrome of abdomen, initial encounter -T79A3XD Traumatic compartment syndrome of abdomen, subsequent encounter -T79A3XS Traumatic compartment syndrome of abdomen, sequela -T79A9XA Traumatic compartment syndrome of other sites, initial encounter -T79A9XD Traumatic compartment syndrome of other sites, subsequent encounter -T79A9XS Traumatic compartment syndrome of other sites, sequela -T798XXA Other early complications of trauma, initial encounter -T798XXD Other early complications of trauma, subsequent encounter -T798XXS Other early complications of trauma, sequela -T799XXA Unspecified early complication of trauma, initial encounter -T799XXD Unspecified early complication of trauma, subsequent encounter -T799XXS Unspecified early complication of trauma, sequela -T800XXA Air embolism following infusion, transfusion and therapeutic injection, initial encounter -T800XXD Air embolism following infusion, transfusion and therapeutic injection, subsequent encounter -T800XXS Air embolism following infusion, transfusion and therapeutic injection, sequela -T801XXA Vascular complications following infusion, transfusion and therapeutic injection, initial encounter -T801XXD Vascular complications following infusion, transfusion and therapeutic injection, subsequent encounter -T801XXS Vascular complications following infusion, transfusion and therapeutic injection, sequela -T80211A Bloodstream infection due to central venous catheter, initial encounter -T80211D Bloodstream infection due to central venous catheter, subsequent encounter -T80211S Bloodstream infection due to central venous catheter, sequela -T80212A Local infection due to central venous catheter, initial encounter -T80212D Local infection due to central venous catheter, subsequent encounter -T80212S Local infection due to central venous catheter, sequela -T80218A Other infection due to central venous catheter, initial encounter -T80218D Other infection due to central venous catheter, subsequent encounter -T80218S Other infection due to central venous catheter, sequela -T80219A Unspecified infection due to central venous catheter, initial encounter -T80219D Unspecified infection due to central venous catheter, subsequent encounter -T80219S Unspecified infection due to central venous catheter, sequela -T8022XA Acute infection following transfusion, infusion, or injection of blood and blood products, initial encounter -T8022XD Acute infection following transfusion, infusion, or injection of blood and blood products, subsequent encounter -T8022XS Acute infection following transfusion, infusion, or injection of blood and blood products, sequela -T8029XA Infection following other infusion, transfusion and therapeutic injection, initial encounter -T8029XD Infection following other infusion, transfusion and therapeutic injection, subsequent encounter -T8029XS Infection following other infusion, transfusion and therapeutic injection, sequela -T8030XA ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, initial encounter -T8030XD ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, subsequent encounter -T8030XS ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, sequela -T80310A ABO incompatibility with acute hemolytic transfusion reaction, initial encounter -T80310D ABO incompatibility with acute hemolytic transfusion reaction, subsequent encounter -T80310S ABO incompatibility with acute hemolytic transfusion reaction, sequela -T80311A ABO incompatibility with delayed hemolytic transfusion reaction, initial encounter -T80311D ABO incompatibility with delayed hemolytic transfusion reaction, subsequent encounter -T80311S ABO incompatibility with delayed hemolytic transfusion reaction, sequela -T80319A ABO incompatibility with hemolytic transfusion reaction, unspecified, initial encounter -T80319D ABO incompatibility with hemolytic transfusion reaction, unspecified, subsequent encounter -T80319S ABO incompatibility with hemolytic transfusion reaction, unspecified, sequela -T8039XA Other ABO incompatibility reaction due to transfusion of blood or blood products, initial encounter -T8039XD Other ABO incompatibility reaction due to transfusion of blood or blood products, subsequent encounter -T8039XS Other ABO incompatibility reaction due to transfusion of blood or blood products, sequela -T8040XA Rh incompatibility reaction due to transfusion of blood or blood products, unspecified, initial encounter -T8040XD Rh incompatibility reaction due to transfusion of blood or blood products, unspecified, subsequent encounter -T8040XS Rh incompatibility reaction due to transfusion of blood or blood products, unspecified, sequela -T80410A Rh incompatibility with acute hemolytic transfusion reaction, initial encounter -T80410D Rh incompatibility with acute hemolytic transfusion reaction, subsequent encounter -T80410S Rh incompatibility with acute hemolytic transfusion reaction, sequela -T80411A Rh incompatibility with delayed hemolytic transfusion reaction, initial encounter -T80411D Rh incompatibility with delayed hemolytic transfusion reaction, subsequent encounter -T80411S Rh incompatibility with delayed hemolytic transfusion reaction, sequela -T80419A Rh incompatibility with hemolytic transfusion reaction, unspecified, initial encounter -T80419D Rh incompatibility with hemolytic transfusion reaction, unspecified, subsequent encounter -T80419S Rh incompatibility with hemolytic transfusion reaction, unspecified, sequela -T8049XA Other Rh incompatibility reaction due to transfusion of blood or blood products, initial encounter -T8049XD Other Rh incompatibility reaction due to transfusion of blood or blood products, subsequent encounter -T8049XS Other Rh incompatibility reaction due to transfusion of blood or blood products, sequela -T80A0XA Non-ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, initial encounter -T80A0XD Non-ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, subsequent encounter -T80A0XS Non-ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, sequela -T80A10A Non-ABO incompatibility with acute hemolytic transfusion reaction, initial encounter -T80A10D Non-ABO incompatibility with acute hemolytic transfusion reaction, subsequent encounter -T80A10S Non-ABO incompatibility with acute hemolytic transfusion reaction, sequela -T80A11A Non-ABO incompatibility with delayed hemolytic transfusion reaction, initial encounter -T80A11D Non-ABO incompatibility with delayed hemolytic transfusion reaction, subsequent encounter -T80A11S Non-ABO incompatibility with delayed hemolytic transfusion reaction, sequela -T80A19A Non-ABO incompatibility with hemolytic transfusion reaction, unspecified, initial encounter -T80A19D Non-ABO incompatibility with hemolytic transfusion reaction, unspecified, subsequent encounter -T80A19S Non-ABO incompatibility with hemolytic transfusion reaction, unspecified, sequela -T80A9XA Other non-ABO incompatibility reaction due to transfusion of blood or blood products, initial encounter -T80A9XD Other non-ABO incompatibility reaction due to transfusion of blood or blood products, subsequent encounter -T80A9XS Other non-ABO incompatibility reaction due to transfusion of blood or blood products, sequela -T8051XA Anaphylactic reaction due to administration of blood and blood products, initial encounter -T8051XD Anaphylactic reaction due to administration of blood and blood products, subsequent encounter -T8051XS Anaphylactic reaction due to administration of blood and blood products, sequela -T8052XA Anaphylactic reaction due to vaccination, initial encounter -T8052XD Anaphylactic reaction due to vaccination, subsequent encounter -T8052XS Anaphylactic reaction due to vaccination, sequela -T8059XA Anaphylactic reaction due to other serum, initial encounter -T8059XD Anaphylactic reaction due to other serum, subsequent encounter -T8059XS Anaphylactic reaction due to other serum, sequela -T8061XA Other serum reaction due to administration of blood and blood products, initial encounter -T8061XD Other serum reaction due to administration of blood and blood products, subsequent encounter -T8061XS Other serum reaction due to administration of blood and blood products, sequela -T8062XA Other serum reaction due to vaccination, initial encounter -T8062XD Other serum reaction due to vaccination, subsequent encounter -T8062XS Other serum reaction due to vaccination, sequela -T8069XA Other serum reaction due to other serum, initial encounter -T8069XD Other serum reaction due to other serum, subsequent encounter -T8069XS Other serum reaction due to other serum, sequela -T80810A Extravasation of vesicant antineoplastic chemotherapy, initial encounter -T80810D Extravasation of vesicant antineoplastic chemotherapy, subsequent encounter -T80810S Extravasation of vesicant antineoplastic chemotherapy, sequela -T80818A Extravasation of other vesicant agent, initial encounter -T80818D Extravasation of other vesicant agent, subsequent encounter -T80818S Extravasation of other vesicant agent, sequela -T8089XA Other complications following infusion, transfusion and therapeutic injection, initial encounter -T8089XD Other complications following infusion, transfusion and therapeutic injection, subsequent encounter -T8089XS Other complications following infusion, transfusion and therapeutic injection, sequela -T8090XA Unspecified complication following infusion and therapeutic injection, initial encounter -T8090XD Unspecified complication following infusion and therapeutic injection, subsequent encounter -T8090XS Unspecified complication following infusion and therapeutic injection, sequela -T80910A Acute hemolytic transfusion reaction, unspecified incompatibility, initial encounter -T80910D Acute hemolytic transfusion reaction, unspecified incompatibility, subsequent encounter -T80910S Acute hemolytic transfusion reaction, unspecified incompatibility, sequela -T80911A Delayed hemolytic transfusion reaction, unspecified incompatibility, initial encounter -T80911D Delayed hemolytic transfusion reaction, unspecified incompatibility, subsequent encounter -T80911S Delayed hemolytic transfusion reaction, unspecified incompatibility, sequela -T80919A Hemolytic transfusion reaction, unspecified incompatibility, unspecified as acute or delayed, initial encounter -T80919D Hemolytic transfusion reaction, unspecified incompatibility, unspecified as acute or delayed, subsequent encounter -T80919S Hemolytic transfusion reaction, unspecified incompatibility, unspecified as acute or delayed, sequela -T8092XA Unspecified transfusion reaction, initial encounter -T8092XD Unspecified transfusion reaction, subsequent encounter -T8092XS Unspecified transfusion reaction, sequela -T8110XA Postprocedural shock unspecified, initial encounter -T8110XD Postprocedural shock unspecified, subsequent encounter -T8110XS Postprocedural shock unspecified, sequela -T8111XA Postprocedural cardiogenic shock, initial encounter -T8111XD Postprocedural cardiogenic shock, subsequent encounter -T8111XS Postprocedural cardiogenic shock, sequela -T8112XA Postprocedural septic shock, initial encounter -T8112XD Postprocedural septic shock, subsequent encounter -T8112XS Postprocedural septic shock, sequela -T8119XA Other postprocedural shock, initial encounter -T8119XD Other postprocedural shock, subsequent encounter -T8119XS Other postprocedural shock, sequela -T8130XA Disruption of wound, unspecified, initial encounter -T8130XD Disruption of wound, unspecified, subsequent encounter -T8130XS Disruption of wound, unspecified, sequela -T8131XA Disruption of external operation (surgical) wound, not elsewhere classified, initial encounter -T8131XD Disruption of external operation (surgical) wound, not elsewhere classified, subsequent encounter -T8131XS Disruption of external operation (surgical) wound, not elsewhere classified, sequela -T8132XA Disruption of internal operation (surgical) wound, not elsewhere classified, initial encounter -T8132XD Disruption of internal operation (surgical) wound, not elsewhere classified, subsequent encounter -T8132XS Disruption of internal operation (surgical) wound, not elsewhere classified, sequela -T8133XA Disruption of traumatic injury wound repair, initial encounter -T8133XD Disruption of traumatic injury wound repair, subsequent encounter -T8133XS Disruption of traumatic injury wound repair, sequela -T814XXA Infection following a procedure, initial encounter -T814XXD Infection following a procedure, subsequent encounter -T814XXS Infection following a procedure, sequela -T81500A Unspecified complication of foreign body accidentally left in body following surgical operation, initial encounter -T81500D Unspecified complication of foreign body accidentally left in body following surgical operation, subsequent encounter -T81500S Unspecified complication of foreign body accidentally left in body following surgical operation, sequela -T81501A Unspecified complication of foreign body accidentally left in body following infusion or transfusion, initial encounter -T81501D Unspecified complication of foreign body accidentally left in body following infusion or transfusion, subsequent encounter -T81501S Unspecified complication of foreign body accidentally left in body following infusion or transfusion, sequela -T81502A Unspecified complication of foreign body accidentally left in body following kidney dialysis, initial encounter -T81502D Unspecified complication of foreign body accidentally left in body following kidney dialysis, subsequent encounter -T81502S Unspecified complication of foreign body accidentally left in body following kidney dialysis, sequela -T81503A Unspecified complication of foreign body accidentally left in body following injection or immunization, initial encounter -T81503D Unspecified complication of foreign body accidentally left in body following injection or immunization, subsequent encounter -T81503S Unspecified complication of foreign body accidentally left in body following injection or immunization, sequela -T81504A Unspecified complication of foreign body accidentally left in body following endoscopic examination, initial encounter -T81504D Unspecified complication of foreign body accidentally left in body following endoscopic examination, subsequent encounter -T81504S Unspecified complication of foreign body accidentally left in body following endoscopic examination, sequela -T81505A Unspecified complication of foreign body accidentally left in body following heart catheterization, initial encounter -T81505D Unspecified complication of foreign body accidentally left in body following heart catheterization, subsequent encounter -T81505S Unspecified complication of foreign body accidentally left in body following heart catheterization, sequela -T81506A Unspecified complication of foreign body accidentally left in body following aspiration, puncture or other catheterization, initial encounter -T81506D Unspecified complication of foreign body accidentally left in body following aspiration, puncture or other catheterization, subsequent encounter -T81506S Unspecified complication of foreign body accidentally left in body following aspiration, puncture or other catheterization, sequela -T81507A Unspecified complication of foreign body accidentally left in body following removal of catheter or packing, initial encounter -T81507D Unspecified complication of foreign body accidentally left in body following removal of catheter or packing, subsequent encounter -T81507S Unspecified complication of foreign body accidentally left in body following removal of catheter or packing, sequela -T81508A Unspecified complication of foreign body accidentally left in body following other procedure, initial encounter -T81508D Unspecified complication of foreign body accidentally left in body following other procedure, subsequent encounter -T81508S Unspecified complication of foreign body accidentally left in body following other procedure, sequela -T81509A Unspecified complication of foreign body accidentally left in body following unspecified procedure, initial encounter -T81509D Unspecified complication of foreign body accidentally left in body following unspecified procedure, subsequent encounter -T81509S Unspecified complication of foreign body accidentally left in body following unspecified procedure, sequela -T81510A Adhesions due to foreign body accidentally left in body following surgical operation, initial encounter -T81510D Adhesions due to foreign body accidentally left in body following surgical operation, subsequent encounter -T81510S Adhesions due to foreign body accidentally left in body following surgical operation, sequela -T81511A Adhesions due to foreign body accidentally left in body following infusion or transfusion, initial encounter -T81511D Adhesions due to foreign body accidentally left in body following infusion or transfusion, subsequent encounter -T81511S Adhesions due to foreign body accidentally left in body following infusion or transfusion, sequela -T81512A Adhesions due to foreign body accidentally left in body following kidney dialysis, initial encounter -T81512D Adhesions due to foreign body accidentally left in body following kidney dialysis, subsequent encounter -T81512S Adhesions due to foreign body accidentally left in body following kidney dialysis, sequela -T81513A Adhesions due to foreign body accidentally left in body following injection or immunization, initial encounter -T81513D Adhesions due to foreign body accidentally left in body following injection or immunization, subsequent encounter -T81513S Adhesions due to foreign body accidentally left in body following injection or immunization, sequela -T81514A Adhesions due to foreign body accidentally left in body following endoscopic examination, initial encounter -T81514D Adhesions due to foreign body accidentally left in body following endoscopic examination, subsequent encounter -T81514S Adhesions due to foreign body accidentally left in body following endoscopic examination, sequela -T81515A Adhesions due to foreign body accidentally left in body following heart catheterization, initial encounter -T81515D Adhesions due to foreign body accidentally left in body following heart catheterization, subsequent encounter -T81515S Adhesions due to foreign body accidentally left in body following heart catheterization, sequela -T81516A Adhesions due to foreign body accidentally left in body following aspiration, puncture or other catheterization, initial encounter -T81516D Adhesions due to foreign body accidentally left in body following aspiration, puncture or other catheterization, subsequent encounter -T81516S Adhesions due to foreign body accidentally left in body following aspiration, puncture or other catheterization, sequela -T81517A Adhesions due to foreign body accidentally left in body following removal of catheter or packing, initial encounter -T81517D Adhesions due to foreign body accidentally left in body following removal of catheter or packing, subsequent encounter -T81517S Adhesions due to foreign body accidentally left in body following removal of catheter or packing, sequela -T81518A Adhesions due to foreign body accidentally left in body following other procedure, initial encounter -T81518D Adhesions due to foreign body accidentally left in body following other procedure, subsequent encounter -T81518S Adhesions due to foreign body accidentally left in body following other procedure, sequela -T81519A Adhesions due to foreign body accidentally left in body following unspecified procedure, initial encounter -T81519D Adhesions due to foreign body accidentally left in body following unspecified procedure, subsequent encounter -T81519S Adhesions due to foreign body accidentally left in body following unspecified procedure, sequela -T81520A Obstruction due to foreign body accidentally left in body following surgical operation, initial encounter -T81520D Obstruction due to foreign body accidentally left in body following surgical operation, subsequent encounter -T81520S Obstruction due to foreign body accidentally left in body following surgical operation, sequela -T81521A Obstruction due to foreign body accidentally left in body following infusion or transfusion, initial encounter -T81521D Obstruction due to foreign body accidentally left in body following infusion or transfusion, subsequent encounter -T81521S Obstruction due to foreign body accidentally left in body following infusion or transfusion, sequela -T81522A Obstruction due to foreign body accidentally left in body following kidney dialysis, initial encounter -T81522D Obstruction due to foreign body accidentally left in body following kidney dialysis, subsequent encounter -T81522S Obstruction due to foreign body accidentally left in body following kidney dialysis, sequela -T81523A Obstruction due to foreign body accidentally left in body following injection or immunization, initial encounter -T81523D Obstruction due to foreign body accidentally left in body following injection or immunization, subsequent encounter -T81523S Obstruction due to foreign body accidentally left in body following injection or immunization, sequela -T81524A Obstruction due to foreign body accidentally left in body following endoscopic examination, initial encounter -T81524D Obstruction due to foreign body accidentally left in body following endoscopic examination, subsequent encounter -T81524S Obstruction due to foreign body accidentally left in body following endoscopic examination, sequela -T81525A Obstruction due to foreign body accidentally left in body following heart catheterization, initial encounter -T81525D Obstruction due to foreign body accidentally left in body following heart catheterization, subsequent encounter -T81525S Obstruction due to foreign body accidentally left in body following heart catheterization, sequela -T81526A Obstruction due to foreign body accidentally left in body following aspiration, puncture or other catheterization, initial encounter -T81526D Obstruction due to foreign body accidentally left in body following aspiration, puncture or other catheterization, subsequent encounter -T81526S Obstruction due to foreign body accidentally left in body following aspiration, puncture or other catheterization, sequela -T81527A Obstruction due to foreign body accidentally left in body following removal of catheter or packing, initial encounter -T81527D Obstruction due to foreign body accidentally left in body following removal of catheter or packing, subsequent encounter -T81527S Obstruction due to foreign body accidentally left in body following removal of catheter or packing, sequela -T81528A Obstruction due to foreign body accidentally left in body following other procedure, initial encounter -T81528D Obstruction due to foreign body accidentally left in body following other procedure, subsequent encounter -T81528S Obstruction due to foreign body accidentally left in body following other procedure, sequela -T81529A Obstruction due to foreign body accidentally left in body following unspecified procedure, initial encounter -T81529D Obstruction due to foreign body accidentally left in body following unspecified procedure, subsequent encounter -T81529S Obstruction due to foreign body accidentally left in body following unspecified procedure, sequela -T81530A Perforation due to foreign body accidentally left in body following surgical operation, initial encounter -T81530D Perforation due to foreign body accidentally left in body following surgical operation, subsequent encounter -T81530S Perforation due to foreign body accidentally left in body following surgical operation, sequela -T81531A Perforation due to foreign body accidentally left in body following infusion or transfusion, initial encounter -T81531D Perforation due to foreign body accidentally left in body following infusion or transfusion, subsequent encounter -T81531S Perforation due to foreign body accidentally left in body following infusion or transfusion, sequela -T81532A Perforation due to foreign body accidentally left in body following kidney dialysis, initial encounter -T81532D Perforation due to foreign body accidentally left in body following kidney dialysis, subsequent encounter -T81532S Perforation due to foreign body accidentally left in body following kidney dialysis, sequela -T81533A Perforation due to foreign body accidentally left in body following injection or immunization, initial encounter -T81533D Perforation due to foreign body accidentally left in body following injection or immunization, subsequent encounter -T81533S Perforation due to foreign body accidentally left in body following injection or immunization, sequela -T81534A Perforation due to foreign body accidentally left in body following endoscopic examination, initial encounter -T81534D Perforation due to foreign body accidentally left in body following endoscopic examination, subsequent encounter -T81534S Perforation due to foreign body accidentally left in body following endoscopic examination, sequela -T81535A Perforation due to foreign body accidentally left in body following heart catheterization, initial encounter -T81535D Perforation due to foreign body accidentally left in body following heart catheterization, subsequent encounter -T81535S Perforation due to foreign body accidentally left in body following heart catheterization, sequela -T81536A Perforation due to foreign body accidentally left in body following aspiration, puncture or other catheterization, initial encounter -T81536D Perforation due to foreign body accidentally left in body following aspiration, puncture or other catheterization, subsequent encounter -T81536S Perforation due to foreign body accidentally left in body following aspiration, puncture or other catheterization, sequela -T81537A Perforation due to foreign body accidentally left in body following removal of catheter or packing, initial encounter -T81537D Perforation due to foreign body accidentally left in body following removal of catheter or packing, subsequent encounter -T81537S Perforation due to foreign body accidentally left in body following removal of catheter or packing, sequela -T81538A Perforation due to foreign body accidentally left in body following other procedure, initial encounter -T81538D Perforation due to foreign body accidentally left in body following other procedure, subsequent encounter -T81538S Perforation due to foreign body accidentally left in body following other procedure, sequela -T81539A Perforation due to foreign body accidentally left in body following unspecified procedure, initial encounter -T81539D Perforation due to foreign body accidentally left in body following unspecified procedure, subsequent encounter -T81539S Perforation due to foreign body accidentally left in body following unspecified procedure, sequela -T81590A Other complications of foreign body accidentally left in body following surgical operation, initial encounter -T81590D Other complications of foreign body accidentally left in body following surgical operation, subsequent encounter -T81590S Other complications of foreign body accidentally left in body following surgical operation, sequela -T81591A Other complications of foreign body accidentally left in body following infusion or transfusion, initial encounter -T81591D Other complications of foreign body accidentally left in body following infusion or transfusion, subsequent encounter -T81591S Other complications of foreign body accidentally left in body following infusion or transfusion, sequela -T81592A Other complications of foreign body accidentally left in body following kidney dialysis, initial encounter -T81592D Other complications of foreign body accidentally left in body following kidney dialysis, subsequent encounter -T81592S Other complications of foreign body accidentally left in body following kidney dialysis, sequela -T81593A Other complications of foreign body accidentally left in body following injection or immunization, initial encounter -T81593D Other complications of foreign body accidentally left in body following injection or immunization, subsequent encounter -T81593S Other complications of foreign body accidentally left in body following injection or immunization, sequela -T81594A Other complications of foreign body accidentally left in body following endoscopic examination, initial encounter -T81594D Other complications of foreign body accidentally left in body following endoscopic examination, subsequent encounter -T81594S Other complications of foreign body accidentally left in body following endoscopic examination, sequela -T81595A Other complications of foreign body accidentally left in body following heart catheterization, initial encounter -T81595D Other complications of foreign body accidentally left in body following heart catheterization, subsequent encounter -T81595S Other complications of foreign body accidentally left in body following heart catheterization, sequela -T81596A Other complications of foreign body accidentally left in body following aspiration, puncture or other catheterization, initial encounter -T81596D Other complications of foreign body accidentally left in body following aspiration, puncture or other catheterization, subsequent encounter -T81596S Other complications of foreign body accidentally left in body following aspiration, puncture or other catheterization, sequela -T81597A Other complications of foreign body accidentally left in body following removal of catheter or packing, initial encounter -T81597D Other complications of foreign body accidentally left in body following removal of catheter or packing, subsequent encounter -T81597S Other complications of foreign body accidentally left in body following removal of catheter or packing, sequela -T81598A Other complications of foreign body accidentally left in body following other procedure, initial encounter -T81598D Other complications of foreign body accidentally left in body following other procedure, subsequent encounter -T81598S Other complications of foreign body accidentally left in body following other procedure, sequela -T81599A Other complications of foreign body accidentally left in body following unspecified procedure, initial encounter -T81599D Other complications of foreign body accidentally left in body following unspecified procedure, subsequent encounter -T81599S Other complications of foreign body accidentally left in body following unspecified procedure, sequela -T8160XA Unspecified acute reaction to foreign substance accidentally left during a procedure, initial encounter -T8160XD Unspecified acute reaction to foreign substance accidentally left during a procedure, subsequent encounter -T8160XS Unspecified acute reaction to foreign substance accidentally left during a procedure, sequela -T8161XA Aseptic peritonitis due to foreign substance accidentally left during a procedure, initial encounter -T8161XD Aseptic peritonitis due to foreign substance accidentally left during a procedure, subsequent encounter -T8161XS Aseptic peritonitis due to foreign substance accidentally left during a procedure, sequela -T8169XA Other acute reaction to foreign substance accidentally left during a procedure, initial encounter -T8169XD Other acute reaction to foreign substance accidentally left during a procedure, subsequent encounter -T8169XS Other acute reaction to foreign substance accidentally left during a procedure, sequela -T81710A Complication of mesenteric artery following a procedure, not elsewhere classified, initial encounter -T81710D Complication of mesenteric artery following a procedure, not elsewhere classified, subsequent encounter -T81710S Complication of mesenteric artery following a procedure, not elsewhere classified, sequela -T81711A Complication of renal artery following a procedure, not elsewhere classified, initial encounter -T81711D Complication of renal artery following a procedure, not elsewhere classified, subsequent encounter -T81711S Complication of renal artery following a procedure, not elsewhere classified, sequela -T81718A Complication of other artery following a procedure, not elsewhere classified, initial encounter -T81718D Complication of other artery following a procedure, not elsewhere classified, subsequent encounter -T81718S Complication of other artery following a procedure, not elsewhere classified, sequela -T81719A Complication of unspecified artery following a procedure, not elsewhere classified, initial encounter -T81719D Complication of unspecified artery following a procedure, not elsewhere classified, subsequent encounter -T81719S Complication of unspecified artery following a procedure, not elsewhere classified, sequela -T8172XA Complication of vein following a procedure, not elsewhere classified, initial encounter -T8172XD Complication of vein following a procedure, not elsewhere classified, subsequent encounter -T8172XS Complication of vein following a procedure, not elsewhere classified, sequela -T8181XA Complication of inhalation therapy, initial encounter -T8181XD Complication of inhalation therapy, subsequent encounter -T8181XS Complication of inhalation therapy, sequela -T8182XA Emphysema (subcutaneous) resulting from a procedure, initial encounter -T8182XD Emphysema (subcutaneous) resulting from a procedure, subsequent encounter -T8182XS Emphysema (subcutaneous) resulting from a procedure, sequela -T8183XA Persistent postprocedural fistula, initial encounter -T8183XD Persistent postprocedural fistula, subsequent encounter -T8183XS Persistent postprocedural fistula, sequela -T8189XA Other complications of procedures, not elsewhere classified, initial encounter -T8189XD Other complications of procedures, not elsewhere classified, subsequent encounter -T8189XS Other complications of procedures, not elsewhere classified, sequela -T819XXA Unspecified complication of procedure, initial encounter -T819XXD Unspecified complication of procedure, subsequent encounter -T819XXS Unspecified complication of procedure, sequela -T8201XA Breakdown (mechanical) of heart valve prosthesis, initial encounter -T8201XD Breakdown (mechanical) of heart valve prosthesis, subsequent encounter -T8201XS Breakdown (mechanical) of heart valve prosthesis, sequela -T8202XA Displacement of heart valve prosthesis, initial encounter -T8202XD Displacement of heart valve prosthesis, subsequent encounter -T8202XS Displacement of heart valve prosthesis, sequela -T8203XA Leakage of heart valve prosthesis, initial encounter -T8203XD Leakage of heart valve prosthesis, subsequent encounter -T8203XS Leakage of heart valve prosthesis, sequela -T8209XA Other mechanical complication of heart valve prosthesis, initial encounter -T8209XD Other mechanical complication of heart valve prosthesis, subsequent encounter -T8209XS Other mechanical complication of heart valve prosthesis, sequela -T82110A Breakdown (mechanical) of cardiac electrode, initial encounter -T82110D Breakdown (mechanical) of cardiac electrode, subsequent encounter -T82110S Breakdown (mechanical) of cardiac electrode, sequela -T82111A Breakdown (mechanical) of cardiac pulse generator (battery), initial encounter -T82111D Breakdown (mechanical) of cardiac pulse generator (battery), subsequent encounter -T82111S Breakdown (mechanical) of cardiac pulse generator (battery), sequela -T82118A Breakdown (mechanical) of other cardiac electronic device, initial encounter -T82118D Breakdown (mechanical) of other cardiac electronic device, subsequent encounter -T82118S Breakdown (mechanical) of other cardiac electronic device, sequela -T82119A Breakdown (mechanical) of unspecified cardiac electronic device, initial encounter -T82119D Breakdown (mechanical) of unspecified cardiac electronic device, subsequent encounter -T82119S Breakdown (mechanical) of unspecified cardiac electronic device, sequela -T82120A Displacement of cardiac electrode, initial encounter -T82120D Displacement of cardiac electrode, subsequent encounter -T82120S Displacement of cardiac electrode, sequela -T82121A Displacement of cardiac pulse generator (battery), initial encounter -T82121D Displacement of cardiac pulse generator (battery), subsequent encounter -T82121S Displacement of cardiac pulse generator (battery), sequela -T82128A Displacement of other cardiac electronic device, initial encounter -T82128D Displacement of other cardiac electronic device, subsequent encounter -T82128S Displacement of other cardiac electronic device, sequela -T82129A Displacement of unspecified cardiac electronic device, initial encounter -T82129D Displacement of unspecified cardiac electronic device, subsequent encounter -T82129S Displacement of unspecified cardiac electronic device, sequela -T82190A Other mechanical complication of cardiac electrode, initial encounter -T82190D Other mechanical complication of cardiac electrode, subsequent encounter -T82190S Other mechanical complication of cardiac electrode, sequela -T82191A Other mechanical complication of cardiac pulse generator (battery), initial encounter -T82191D Other mechanical complication of cardiac pulse generator (battery), subsequent encounter -T82191S Other mechanical complication of cardiac pulse generator (battery), sequela -T82198A Other mechanical complication of other cardiac electronic device, initial encounter -T82198D Other mechanical complication of other cardiac electronic device, subsequent encounter -T82198S Other mechanical complication of other cardiac electronic device, sequela -T82199A Other mechanical complication of unspecified cardiac device, initial encounter -T82199D Other mechanical complication of unspecified cardiac device, subsequent encounter -T82199S Other mechanical complication of unspecified cardiac device, sequela -T82211A Breakdown (mechanical) of coronary artery bypass graft, initial encounter -T82211D Breakdown (mechanical) of coronary artery bypass graft, subsequent encounter -T82211S Breakdown (mechanical) of coronary artery bypass graft, sequela -T82212A Displacement of coronary artery bypass graft, initial encounter -T82212D Displacement of coronary artery bypass graft, subsequent encounter -T82212S Displacement of coronary artery bypass graft, sequela -T82213A Leakage of coronary artery bypass graft, initial encounter -T82213D Leakage of coronary artery bypass graft, subsequent encounter -T82213S Leakage of coronary artery bypass graft, sequela -T82218A Other mechanical complication of coronary artery bypass graft, initial encounter -T82218D Other mechanical complication of coronary artery bypass graft, subsequent encounter -T82218S Other mechanical complication of coronary artery bypass graft, sequela -T82221A Breakdown (mechanical) of biological heart valve graft, initial encounter -T82221D Breakdown (mechanical) of biological heart valve graft, subsequent encounter -T82221S Breakdown (mechanical) of biological heart valve graft, sequela -T82222A Displacement of biological heart valve graft, initial encounter -T82222D Displacement of biological heart valve graft, subsequent encounter -T82222S Displacement of biological heart valve graft, sequela -T82223A Leakage of biological heart valve graft, initial encounter -T82223D Leakage of biological heart valve graft, subsequent encounter -T82223S Leakage of biological heart valve graft, sequela -T82228A Other mechanical complication of biological heart valve graft, initial encounter -T82228D Other mechanical complication of biological heart valve graft, subsequent encounter -T82228S Other mechanical complication of biological heart valve graft, sequela -T82310A Breakdown (mechanical) of aortic (bifurcation) graft (replacement), initial encounter -T82310D Breakdown (mechanical) of aortic (bifurcation) graft (replacement), subsequent encounter -T82310S Breakdown (mechanical) of aortic (bifurcation) graft (replacement), sequela -T82311A Breakdown (mechanical) of carotid arterial graft (bypass), initial encounter -T82311D Breakdown (mechanical) of carotid arterial graft (bypass), subsequent encounter -T82311S Breakdown (mechanical) of carotid arterial graft (bypass), sequela -T82312A Breakdown (mechanical) of femoral arterial graft (bypass), initial encounter -T82312D Breakdown (mechanical) of femoral arterial graft (bypass), subsequent encounter -T82312S Breakdown (mechanical) of femoral arterial graft (bypass), sequela -T82318A Breakdown (mechanical) of other vascular grafts, initial encounter -T82318D Breakdown (mechanical) of other vascular grafts, subsequent encounter -T82318S Breakdown (mechanical) of other vascular grafts, sequela -T82319A Breakdown (mechanical) of unspecified vascular grafts, initial encounter -T82319D Breakdown (mechanical) of unspecified vascular grafts, subsequent encounter -T82319S Breakdown (mechanical) of unspecified vascular grafts, sequela -T82320A Displacement of aortic (bifurcation) graft (replacement), initial encounter -T82320D Displacement of aortic (bifurcation) graft (replacement), subsequent encounter -T82320S Displacement of aortic (bifurcation) graft (replacement), sequela -T82321A Displacement of carotid arterial graft (bypass), initial encounter -T82321D Displacement of carotid arterial graft (bypass), subsequent encounter -T82321S Displacement of carotid arterial graft (bypass), sequela -T82322A Displacement of femoral arterial graft (bypass), initial encounter -T82322D Displacement of femoral arterial graft (bypass), subsequent encounter -T82322S Displacement of femoral arterial graft (bypass), sequela -T82328A Displacement of other vascular grafts, initial encounter -T82328D Displacement of other vascular grafts, subsequent encounter -T82328S Displacement of other vascular grafts, sequela -T82329A Displacement of unspecified vascular grafts, initial encounter -T82329D Displacement of unspecified vascular grafts, subsequent encounter -T82329S Displacement of unspecified vascular grafts, sequela -T82330A Leakage of aortic (bifurcation) graft (replacement), initial encounter -T82330D Leakage of aortic (bifurcation) graft (replacement), subsequent encounter -T82330S Leakage of aortic (bifurcation) graft (replacement), sequela -T82331A Leakage of carotid arterial graft (bypass), initial encounter -T82331D Leakage of carotid arterial graft (bypass), subsequent encounter -T82331S Leakage of carotid arterial graft (bypass), sequela -T82332A Leakage of femoral arterial graft (bypass), initial encounter -T82332D Leakage of femoral arterial graft (bypass), subsequent encounter -T82332S Leakage of femoral arterial graft (bypass), sequela -T82338A Leakage of other vascular grafts, initial encounter -T82338D Leakage of other vascular grafts, subsequent encounter -T82338S Leakage of other vascular grafts, sequela -T82339A Leakage of unspecified vascular graft, initial encounter -T82339D Leakage of unspecified vascular graft, subsequent encounter -T82339S Leakage of unspecified vascular graft, sequela -T82390A Other mechanical complication of aortic (bifurcation) graft (replacement), initial encounter -T82390D Other mechanical complication of aortic (bifurcation) graft (replacement), subsequent encounter -T82390S Other mechanical complication of aortic (bifurcation) graft (replacement), sequela -T82391A Other mechanical complication of carotid arterial graft (bypass), initial encounter -T82391D Other mechanical complication of carotid arterial graft (bypass), subsequent encounter -T82391S Other mechanical complication of carotid arterial graft (bypass), sequela -T82392A Other mechanical complication of femoral arterial graft (bypass), initial encounter -T82392D Other mechanical complication of femoral arterial graft (bypass), subsequent encounter -T82392S Other mechanical complication of femoral arterial graft (bypass), sequela -T82398A Other mechanical complication of other vascular grafts, initial encounter -T82398D Other mechanical complication of other vascular grafts, subsequent encounter -T82398S Other mechanical complication of other vascular grafts, sequela -T82399A Other mechanical complication of unspecified vascular grafts, initial encounter -T82399D Other mechanical complication of unspecified vascular grafts, subsequent encounter -T82399S Other mechanical complication of unspecified vascular grafts, sequela -T8241XA Breakdown (mechanical) of vascular dialysis catheter, initial encounter -T8241XD Breakdown (mechanical) of vascular dialysis catheter, subsequent encounter -T8241XS Breakdown (mechanical) of vascular dialysis catheter, sequela -T8242XA Displacement of vascular dialysis catheter, initial encounter -T8242XD Displacement of vascular dialysis catheter, subsequent encounter -T8242XS Displacement of vascular dialysis catheter, sequela -T8243XA Leakage of vascular dialysis catheter, initial encounter -T8243XD Leakage of vascular dialysis catheter, subsequent encounter -T8243XS Leakage of vascular dialysis catheter, sequela -T8249XA Other complication of vascular dialysis catheter, initial encounter -T8249XD Other complication of vascular dialysis catheter, subsequent encounter -T8249XS Other complication of vascular dialysis catheter, sequela -T82510A Breakdown (mechanical) of surgically created arteriovenous fistula, initial encounter -T82510D Breakdown (mechanical) of surgically created arteriovenous fistula, subsequent encounter -T82510S Breakdown (mechanical) of surgically created arteriovenous fistula, sequela -T82511A Breakdown (mechanical) of surgically created arteriovenous shunt, initial encounter -T82511D Breakdown (mechanical) of surgically created arteriovenous shunt, subsequent encounter -T82511S Breakdown (mechanical) of surgically created arteriovenous shunt, sequela -T82512A Breakdown (mechanical) of artificial heart, initial encounter -T82512D Breakdown (mechanical) of artificial heart, subsequent encounter -T82512S Breakdown (mechanical) of artificial heart, sequela -T82513A Breakdown (mechanical) of balloon (counterpulsation) device, initial encounter -T82513D Breakdown (mechanical) of balloon (counterpulsation) device, subsequent encounter -T82513S Breakdown (mechanical) of balloon (counterpulsation) device, sequela -T82514A Breakdown (mechanical) of infusion catheter, initial encounter -T82514D Breakdown (mechanical) of infusion catheter, subsequent encounter -T82514S Breakdown (mechanical) of infusion catheter, sequela -T82515A Breakdown (mechanical) of umbrella device, initial encounter -T82515D Breakdown (mechanical) of umbrella device, subsequent encounter -T82515S Breakdown (mechanical) of umbrella device, sequela -T82518A Breakdown (mechanical) of other cardiac and vascular devices and implants, initial encounter -T82518D Breakdown (mechanical) of other cardiac and vascular devices and implants, subsequent encounter -T82518S Breakdown (mechanical) of other cardiac and vascular devices and implants, sequela -T82519A Breakdown (mechanical) of unspecified cardiac and vascular devices and implants, initial encounter -T82519D Breakdown (mechanical) of unspecified cardiac and vascular devices and implants, subsequent encounter -T82519S Breakdown (mechanical) of unspecified cardiac and vascular devices and implants, sequela -T82520A Displacement of surgically created arteriovenous fistula, initial encounter -T82520D Displacement of surgically created arteriovenous fistula, subsequent encounter -T82520S Displacement of surgically created arteriovenous fistula, sequela -T82521A Displacement of surgically created arteriovenous shunt, initial encounter -T82521D Displacement of surgically created arteriovenous shunt, subsequent encounter -T82521S Displacement of surgically created arteriovenous shunt, sequela -T82522A Displacement of artificial heart, initial encounter -T82522D Displacement of artificial heart, subsequent encounter -T82522S Displacement of artificial heart, sequela -T82523A Displacement of balloon (counterpulsation) device, initial encounter -T82523D Displacement of balloon (counterpulsation) device, subsequent encounter -T82523S Displacement of balloon (counterpulsation) device, sequela -T82524A Displacement of infusion catheter, initial encounter -T82524D Displacement of infusion catheter, subsequent encounter -T82524S Displacement of infusion catheter, sequela -T82525A Displacement of umbrella device, initial encounter -T82525D Displacement of umbrella device, subsequent encounter -T82525S Displacement of umbrella device, sequela -T82528A Displacement of other cardiac and vascular devices and implants, initial encounter -T82528D Displacement of other cardiac and vascular devices and implants, subsequent encounter -T82528S Displacement of other cardiac and vascular devices and implants, sequela -T82529A Displacement of unspecified cardiac and vascular devices and implants, initial encounter -T82529D Displacement of unspecified cardiac and vascular devices and implants, subsequent encounter -T82529S Displacement of unspecified cardiac and vascular devices and implants, sequela -T82530A Leakage of surgically created arteriovenous fistula, initial encounter -T82530D Leakage of surgically created arteriovenous fistula, subsequent encounter -T82530S Leakage of surgically created arteriovenous fistula, sequela -T82531A Leakage of surgically created arteriovenous shunt, initial encounter -T82531D Leakage of surgically created arteriovenous shunt, subsequent encounter -T82531S Leakage of surgically created arteriovenous shunt, sequela -T82532A Leakage of artificial heart, initial encounter -T82532D Leakage of artificial heart, subsequent encounter -T82532S Leakage of artificial heart, sequela -T82533A Leakage of balloon (counterpulsation) device, initial encounter -T82533D Leakage of balloon (counterpulsation) device, subsequent encounter -T82533S Leakage of balloon (counterpulsation) device, sequela -T82534A Leakage of infusion catheter, initial encounter -T82534D Leakage of infusion catheter, subsequent encounter -T82534S Leakage of infusion catheter, sequela -T82535A Leakage of umbrella device, initial encounter -T82535D Leakage of umbrella device, subsequent encounter -T82535S Leakage of umbrella device, sequela -T82538A Leakage of other cardiac and vascular devices and implants, initial encounter -T82538D Leakage of other cardiac and vascular devices and implants, subsequent encounter -T82538S Leakage of other cardiac and vascular devices and implants, sequela -T82539A Leakage of unspecified cardiac and vascular devices and implants, initial encounter -T82539D Leakage of unspecified cardiac and vascular devices and implants, subsequent encounter -T82539S Leakage of unspecified cardiac and vascular devices and implants, sequela -T82590A Other mechanical complication of surgically created arteriovenous fistula, initial encounter -T82590D Other mechanical complication of surgically created arteriovenous fistula, subsequent encounter -T82590S Other mechanical complication of surgically created arteriovenous fistula, sequela -T82591A Other mechanical complication of surgically created arteriovenous shunt, initial encounter -T82591D Other mechanical complication of surgically created arteriovenous shunt, subsequent encounter -T82591S Other mechanical complication of surgically created arteriovenous shunt, sequela -T82592A Other mechanical complication of artificial heart, initial encounter -T82592D Other mechanical complication of artificial heart, subsequent encounter -T82592S Other mechanical complication of artificial heart, sequela -T82593A Other mechanical complication of balloon (counterpulsation) device, initial encounter -T82593D Other mechanical complication of balloon (counterpulsation) device, subsequent encounter -T82593S Other mechanical complication of balloon (counterpulsation) device, sequela -T82594A Other mechanical complication of infusion catheter, initial encounter -T82594D Other mechanical complication of infusion catheter, subsequent encounter -T82594S Other mechanical complication of infusion catheter, sequela -T82595A Other mechanical complication of umbrella device, initial encounter -T82595D Other mechanical complication of umbrella device, subsequent encounter -T82595S Other mechanical complication of umbrella device, sequela -T82598A Other mechanical complication of other cardiac and vascular devices and implants, initial encounter -T82598D Other mechanical complication of other cardiac and vascular devices and implants, subsequent encounter -T82598S Other mechanical complication of other cardiac and vascular devices and implants, sequela -T82599A Other mechanical complication of unspecified cardiac and vascular devices and implants, initial encounter -T82599D Other mechanical complication of unspecified cardiac and vascular devices and implants, subsequent encounter -T82599S Other mechanical complication of unspecified cardiac and vascular devices and implants, sequela -T826XXA Infection and inflammatory reaction due to cardiac valve prosthesis, initial encounter -T826XXD Infection and inflammatory reaction due to cardiac valve prosthesis, subsequent encounter -T826XXS Infection and inflammatory reaction due to cardiac valve prosthesis, sequela -T827XXA Infection and inflammatory reaction due to other cardiac and vascular devices, implants and grafts, initial encounter -T827XXD Infection and inflammatory reaction due to other cardiac and vascular devices, implants and grafts, subsequent encounter -T827XXS Infection and inflammatory reaction due to other cardiac and vascular devices, implants and grafts, sequela -T82817A Embolism of cardiac prosthetic devices, implants and grafts, initial encounter -T82817D Embolism of cardiac prosthetic devices, implants and grafts, subsequent encounter -T82817S Embolism of cardiac prosthetic devices, implants and grafts, sequela -T82818A Embolism of vascular prosthetic devices, implants and grafts, initial encounter -T82818D Embolism of vascular prosthetic devices, implants and grafts, subsequent encounter -T82818S Embolism of vascular prosthetic devices, implants and grafts, sequela -T82827A Fibrosis of cardiac prosthetic devices, implants and grafts, initial encounter -T82827D Fibrosis of cardiac prosthetic devices, implants and grafts, subsequent encounter -T82827S Fibrosis of cardiac prosthetic devices, implants and grafts, sequela -T82828A Fibrosis of vascular prosthetic devices, implants and grafts, initial encounter -T82828D Fibrosis of vascular prosthetic devices, implants and grafts, subsequent encounter -T82828S Fibrosis of vascular prosthetic devices, implants and grafts, sequela -T82837A Hemorrhage of cardiac prosthetic devices, implants and grafts, initial encounter -T82837D Hemorrhage of cardiac prosthetic devices, implants and grafts, subsequent encounter -T82837S Hemorrhage of cardiac prosthetic devices, implants and grafts, sequela -T82838A Hemorrhage of vascular prosthetic devices, implants and grafts, initial encounter -T82838D Hemorrhage of vascular prosthetic devices, implants and grafts, subsequent encounter -T82838S Hemorrhage of vascular prosthetic devices, implants and grafts, sequela -T82847A Pain from cardiac prosthetic devices, implants and grafts, initial encounter -T82847D Pain from cardiac prosthetic devices, implants and grafts, subsequent encounter -T82847S Pain from cardiac prosthetic devices, implants and grafts, sequela -T82848A Pain from vascular prosthetic devices, implants and grafts, initial encounter -T82848D Pain from vascular prosthetic devices, implants and grafts, subsequent encounter -T82848S Pain from vascular prosthetic devices, implants and grafts, sequela -T82857A Stenosis of cardiac prosthetic devices, implants and grafts, initial encounter -T82857D Stenosis of cardiac prosthetic devices, implants and grafts, subsequent encounter -T82857S Stenosis of cardiac prosthetic devices, implants and grafts, sequela -T82858A Stenosis of vascular prosthetic devices, implants and grafts, initial encounter -T82858D Stenosis of vascular prosthetic devices, implants and grafts, subsequent encounter -T82858S Stenosis of vascular prosthetic devices, implants and grafts, sequela -T82867A Thrombosis of cardiac prosthetic devices, implants and grafts, initial encounter -T82867D Thrombosis of cardiac prosthetic devices, implants and grafts, subsequent encounter -T82867S Thrombosis of cardiac prosthetic devices, implants and grafts, sequela -T82868A Thrombosis of vascular prosthetic devices, implants and grafts, initial encounter -T82868D Thrombosis of vascular prosthetic devices, implants and grafts, subsequent encounter -T82868S Thrombosis of vascular prosthetic devices, implants and grafts, sequela -T82897A Other specified complication of cardiac prosthetic devices, implants and grafts, initial encounter -T82897D Other specified complication of cardiac prosthetic devices, implants and grafts, subsequent encounter -T82897S Other specified complication of cardiac prosthetic devices, implants and grafts, sequela -T82898A Other specified complication of vascular prosthetic devices, implants and grafts, initial encounter -T82898D Other specified complication of vascular prosthetic devices, implants and grafts, subsequent encounter -T82898S Other specified complication of vascular prosthetic devices, implants and grafts, sequela -T829XXA Unspecified complication of cardiac and vascular prosthetic device, implant and graft, initial encounter -T829XXD Unspecified complication of cardiac and vascular prosthetic device, implant and graft, subsequent encounter -T829XXS Unspecified complication of cardiac and vascular prosthetic device, implant and graft, sequela -T83010A Breakdown (mechanical) of cystostomy catheter, initial encounter -T83010D Breakdown (mechanical) of cystostomy catheter, subsequent encounter -T83010S Breakdown (mechanical) of cystostomy catheter, sequela -T83018A Breakdown (mechanical) of other indwelling urethral catheter, initial encounter -T83018D Breakdown (mechanical) of other indwelling urethral catheter, subsequent encounter -T83018S Breakdown (mechanical) of other indwelling urethral catheter, sequela -T83020A Displacement of cystostomy catheter, initial encounter -T83020D Displacement of cystostomy catheter, subsequent encounter -T83020S Displacement of cystostomy catheter, sequela -T83028A Displacement of other indwelling urethral catheter, initial encounter -T83028D Displacement of other indwelling urethral catheter, subsequent encounter -T83028S Displacement of other indwelling urethral catheter, sequela -T83030A Leakage of cystostomy catheter, initial encounter -T83030D Leakage of cystostomy catheter, subsequent encounter -T83030S Leakage of cystostomy catheter, sequela -T83038A Leakage of other indwelling urethral catheter, initial encounter -T83038D Leakage of other indwelling urethral catheter, subsequent encounter -T83038S Leakage of other indwelling urethral catheter, sequela -T83090A Other mechanical complication of cystostomy catheter, initial encounter -T83090D Other mechanical complication of cystostomy catheter, subsequent encounter -T83090S Other mechanical complication of cystostomy catheter, sequela -T83098A Other mechanical complication of other indwelling urethral catheter, initial encounter -T83098D Other mechanical complication of other indwelling urethral catheter, subsequent encounter -T83098S Other mechanical complication of other indwelling urethral catheter, sequela -T83110A Breakdown (mechanical) of urinary electronic stimulator device, initial encounter -T83110D Breakdown (mechanical) of urinary electronic stimulator device, subsequent encounter -T83110S Breakdown (mechanical) of urinary electronic stimulator device, sequela -T83111A Breakdown (mechanical) of urinary sphincter implant, initial encounter -T83111D Breakdown (mechanical) of urinary sphincter implant, subsequent encounter -T83111S Breakdown (mechanical) of urinary sphincter implant, sequela -T83112A Breakdown (mechanical) of urinary stent, initial encounter -T83112D Breakdown (mechanical) of urinary stent, subsequent encounter -T83112S Breakdown (mechanical) of urinary stent, sequela -T83118A Breakdown (mechanical) of other urinary devices and implants, initial encounter -T83118D Breakdown (mechanical) of other urinary devices and implants, subsequent encounter -T83118S Breakdown (mechanical) of other urinary devices and implants, sequela -T83120A Displacement of urinary electronic stimulator device, initial encounter -T83120D Displacement of urinary electronic stimulator device, subsequent encounter -T83120S Displacement of urinary electronic stimulator device, sequela -T83121A Displacement of urinary sphincter implant, initial encounter -T83121D Displacement of urinary sphincter implant, subsequent encounter -T83121S Displacement of urinary sphincter implant, sequela -T83122A Displacement of urinary stent, initial encounter -T83122D Displacement of urinary stent, subsequent encounter -T83122S Displacement of urinary stent, sequela -T83128A Displacement of other urinary devices and implants, initial encounter -T83128D Displacement of other urinary devices and implants, subsequent encounter -T83128S Displacement of other urinary devices and implants, sequela -T83190A Other mechanical complication of urinary electronic stimulator device, initial encounter -T83190D Other mechanical complication of urinary electronic stimulator device, subsequent encounter -T83190S Other mechanical complication of urinary electronic stimulator device, sequela -T83191A Other mechanical complication of urinary sphincter implant, initial encounter -T83191D Other mechanical complication of urinary sphincter implant, subsequent encounter -T83191S Other mechanical complication of urinary sphincter implant, sequela -T83192A Other mechanical complication of urinary stent, initial encounter -T83192D Other mechanical complication of urinary stent, subsequent encounter -T83192S Other mechanical complication of urinary stent, sequela -T83198A Other mechanical complication of other urinary devices and implants, initial encounter -T83198D Other mechanical complication of other urinary devices and implants, subsequent encounter -T83198S Other mechanical complication of other urinary devices and implants, sequela -T8321XA Breakdown (mechanical) of graft of urinary organ, initial encounter -T8321XD Breakdown (mechanical) of graft of urinary organ, subsequent encounter -T8321XS Breakdown (mechanical) of graft of urinary organ, sequela -T8322XA Displacement of graft of urinary organ, initial encounter -T8322XD Displacement of graft of urinary organ, subsequent encounter -T8322XS Displacement of graft of urinary organ, sequela -T8323XA Leakage of graft of urinary organ, initial encounter -T8323XD Leakage of graft of urinary organ, subsequent encounter -T8323XS Leakage of graft of urinary organ, sequela -T8329XA Other mechanical complication of graft of urinary organ, initial encounter -T8329XD Other mechanical complication of graft of urinary organ, subsequent encounter -T8329XS Other mechanical complication of graft of urinary organ, sequela -T8331XA Breakdown (mechanical) of intrauterine contraceptive device, initial encounter -T8331XD Breakdown (mechanical) of intrauterine contraceptive device, subsequent encounter -T8331XS Breakdown (mechanical) of intrauterine contraceptive device, sequela -T8332XA Displacement of intrauterine contraceptive device, initial encounter -T8332XD Displacement of intrauterine contraceptive device, subsequent encounter -T8332XS Displacement of intrauterine contraceptive device, sequela -T8339XA Other mechanical complication of intrauterine contraceptive device, initial encounter -T8339XD Other mechanical complication of intrauterine contraceptive device, subsequent encounter -T8339XS Other mechanical complication of intrauterine contraceptive device, sequela -T83410A Breakdown (mechanical) of penile (implanted) prosthesis, initial encounter -T83410D Breakdown (mechanical) of penile (implanted) prosthesis, subsequent encounter -T83410S Breakdown (mechanical) of penile (implanted) prosthesis, sequela -T83418A Breakdown (mechanical) of other prosthetic devices, implants and grafts of genital tract, initial encounter -T83418D Breakdown (mechanical) of other prosthetic devices, implants and grafts of genital tract, subsequent encounter -T83418S Breakdown (mechanical) of other prosthetic devices, implants and grafts of genital tract, sequela -T83420A Displacement of penile (implanted) prosthesis, initial encounter -T83420D Displacement of penile (implanted) prosthesis, subsequent encounter -T83420S Displacement of penile (implanted) prosthesis, sequela -T83428A Displacement of other prosthetic devices, implants and grafts of genital tract, initial encounter -T83428D Displacement of other prosthetic devices, implants and grafts of genital tract, subsequent encounter -T83428S Displacement of other prosthetic devices, implants and grafts of genital tract, sequela -T83490A Other mechanical complication of penile (implanted) prosthesis, initial encounter -T83490D Other mechanical complication of penile (implanted) prosthesis, subsequent encounter -T83490S Other mechanical complication of penile (implanted) prosthesis, sequela -T83498A Other mechanical complication of other prosthetic devices, implants and grafts of genital tract, initial encounter -T83498D Other mechanical complication of other prosthetic devices, implants and grafts of genital tract, subsequent encounter -T83498S Other mechanical complication of other prosthetic devices, implants and grafts of genital tract, sequela -T8351XA Infection and inflammatory reaction due to indwelling urinary catheter, initial encounter -T8351XD Infection and inflammatory reaction due to indwelling urinary catheter, subsequent encounter -T8351XS Infection and inflammatory reaction due to indwelling urinary catheter, sequela -T8359XA Infection and inflammatory reaction due to prosthetic device, implant and graft in urinary system, initial encounter -T8359XD Infection and inflammatory reaction due to prosthetic device, implant and graft in urinary system, subsequent encounter -T8359XS Infection and inflammatory reaction due to prosthetic device, implant and graft in urinary system, sequela -T836XXA Infection and inflammatory reaction due to prosthetic device, implant and graft in genital tract, initial encounter -T836XXD Infection and inflammatory reaction due to prosthetic device, implant and graft in genital tract, subsequent encounter -T836XXS Infection and inflammatory reaction due to prosthetic device, implant and graft in genital tract, sequela -T83711A Erosion of implanted vaginal mesh and other prosthetic materials to surrounding organ or tissue, initial encounter -T83711D Erosion of implanted vaginal mesh and other prosthetic materials to surrounding organ or tissue, subsequent encounter -T83711S Erosion of implanted vaginal mesh and other prosthetic materials to surrounding organ or tissue, sequela -T83718A Erosion of other implanted mesh and other prosthetic materials to surrounding organ or tissue, initial encounter -T83718D Erosion of other implanted mesh and other prosthetic materials to surrounding organ or tissue, subsequent encounter -T83718S Erosion of other implanted mesh and other prosthetic materials to surrounding organ or tissue, sequela -T83721A Exposure of implanted vaginal mesh and other prosthetic materials into vagina, initial encounter -T83721D Exposure of implanted vaginal mesh and other prosthetic materials into vagina, subsequent encounter -T83721S Exposure of implanted vaginal mesh and other prosthetic materials into vagina, sequela -T83728A Exposure of other implanted mesh and other prosthetic materials to surrounding organ or tissue, initial encounter -T83728D Exposure of other implanted mesh and other prosthetic materials to surrounding organ or tissue, subsequent encounter -T83728S Exposure of other implanted mesh and other prosthetic materials to surrounding organ or tissue, sequela -T8381XA Embolism of genitourinary prosthetic devices, implants and grafts, initial encounter -T8381XD Embolism of genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8381XS Embolism of genitourinary prosthetic devices, implants and grafts, sequela -T8382XA Fibrosis of genitourinary prosthetic devices, implants and grafts, initial encounter -T8382XD Fibrosis of genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8382XS Fibrosis of genitourinary prosthetic devices, implants and grafts, sequela -T8383XA Hemorrhage of genitourinary prosthetic devices, implants and grafts, initial encounter -T8383XD Hemorrhage of genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8383XS Hemorrhage of genitourinary prosthetic devices, implants and grafts, sequela -T8384XA Pain from genitourinary prosthetic devices, implants and grafts, initial encounter -T8384XD Pain from genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8384XS Pain from genitourinary prosthetic devices, implants and grafts, sequela -T8385XA Stenosis of genitourinary prosthetic devices, implants and grafts, initial encounter -T8385XD Stenosis of genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8385XS Stenosis of genitourinary prosthetic devices, implants and grafts, sequela -T8386XA Thrombosis of genitourinary prosthetic devices, implants and grafts, initial encounter -T8386XD Thrombosis of genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8386XS Thrombosis of genitourinary prosthetic devices, implants and grafts, sequela -T8389XA Other specified complication of genitourinary prosthetic devices, implants and grafts, initial encounter -T8389XD Other specified complication of genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8389XS Other specified complication of genitourinary prosthetic devices, implants and grafts, sequela -T839XXA Unspecified complication of genitourinary prosthetic device, implant and graft, initial encounter -T839XXD Unspecified complication of genitourinary prosthetic device, implant and graft, subsequent encounter -T839XXS Unspecified complication of genitourinary prosthetic device, implant and graft, sequela -T84010A Broken internal right hip prosthesis, initial encounter -T84010D Broken internal right hip prosthesis, subsequent encounter -T84010S Broken internal right hip prosthesis, sequela -T84011A Broken internal left hip prosthesis, initial encounter -T84011D Broken internal left hip prosthesis, subsequent encounter -T84011S Broken internal left hip prosthesis, sequela -T84012A Broken internal right knee prosthesis, initial encounter -T84012D Broken internal right knee prosthesis, subsequent encounter -T84012S Broken internal right knee prosthesis, sequela -T84013A Broken internal left knee prosthesis, initial encounter -T84013D Broken internal left knee prosthesis, subsequent encounter -T84013S Broken internal left knee prosthesis, sequela -T84018A Broken internal joint prosthesis, other site, initial encounter -T84018D Broken internal joint prosthesis, other site, subsequent encounter -T84018S Broken internal joint prosthesis, other site, sequela -T84019A Broken internal joint prosthesis, unspecified site, initial encounter -T84019D Broken internal joint prosthesis, unspecified site, subsequent encounter -T84019S Broken internal joint prosthesis, unspecified site, sequela -T84020A Dislocation of internal right hip prosthesis, initial encounter -T84020D Dislocation of internal right hip prosthesis, subsequent encounter -T84020S Dislocation of internal right hip prosthesis, sequela -T84021A Dislocation of internal left hip prosthesis, initial encounter -T84021D Dislocation of internal left hip prosthesis, subsequent encounter -T84021S Dislocation of internal left hip prosthesis, sequela -T84022A Instability of internal right knee prosthesis, initial encounter -T84022D Instability of internal right knee prosthesis, subsequent encounter -T84022S Instability of internal right knee prosthesis, sequela -T84023A Instability of internal left knee prosthesis, initial encounter -T84023D Instability of internal left knee prosthesis, subsequent encounter -T84023S Instability of internal left knee prosthesis, sequela -T84028A Dislocation of other internal joint prosthesis, initial encounter -T84028D Dislocation of other internal joint prosthesis, subsequent encounter -T84028S Dislocation of other internal joint prosthesis, sequela -T84029A Dislocation of unspecified internal joint prosthesis, initial encounter -T84029D Dislocation of unspecified internal joint prosthesis, subsequent encounter -T84029S Dislocation of unspecified internal joint prosthesis, sequela -T84030A Mechanical loosening of internal right hip prosthetic joint, initial encounter -T84030D Mechanical loosening of internal right hip prosthetic joint, subsequent encounter -T84030S Mechanical loosening of internal right hip prosthetic joint, sequela -T84031A Mechanical loosening of internal left hip prosthetic joint, initial encounter -T84031D Mechanical loosening of internal left hip prosthetic joint, subsequent encounter -T84031S Mechanical loosening of internal left hip prosthetic joint, sequela -T84032A Mechanical loosening of internal right knee prosthetic joint, initial encounter -T84032D Mechanical loosening of internal right knee prosthetic joint, subsequent encounter -T84032S Mechanical loosening of internal right knee prosthetic joint, sequela -T84033A Mechanical loosening of internal left knee prosthetic joint, initial encounter -T84033D Mechanical loosening of internal left knee prosthetic joint, subsequent encounter -T84033S Mechanical loosening of internal left knee prosthetic joint, sequela -T84038A Mechanical loosening of other internal prosthetic joint, initial encounter -T84038D Mechanical loosening of other internal prosthetic joint, subsequent encounter -T84038S Mechanical loosening of other internal prosthetic joint, sequela -T84039A Mechanical loosening of unspecified internal prosthetic joint, initial encounter -T84039D Mechanical loosening of unspecified internal prosthetic joint, subsequent encounter -T84039S Mechanical loosening of unspecified internal prosthetic joint, sequela -T84040A Periprosthetic fracture around internal prosthetic right hip joint, initial encounter -T84040D Periprosthetic fracture around internal prosthetic right hip joint, subsequent encounter -T84040S Periprosthetic fracture around internal prosthetic right hip joint, sequela -T84041A Periprosthetic fracture around internal prosthetic left hip joint, initial encounter -T84041D Periprosthetic fracture around internal prosthetic left hip joint, subsequent encounter -T84041S Periprosthetic fracture around internal prosthetic left hip joint, sequela -T84042A Periprosthetic fracture around internal prosthetic right knee joint, initial encounter -T84042D Periprosthetic fracture around internal prosthetic right knee joint, subsequent encounter -T84042S Periprosthetic fracture around internal prosthetic right knee joint, sequela -T84043A Periprosthetic fracture around internal prosthetic left knee joint, initial encounter -T84043D Periprosthetic fracture around internal prosthetic left knee joint, subsequent encounter -T84043S Periprosthetic fracture around internal prosthetic left knee joint, sequela -T84048A Periprosthetic fracture around other internal prosthetic joint, initial encounter -T84048D Periprosthetic fracture around other internal prosthetic joint, subsequent encounter -T84048S Periprosthetic fracture around other internal prosthetic joint, sequela -T84049A Periprosthetic fracture around unspecified internal prosthetic joint, initial encounter -T84049D Periprosthetic fracture around unspecified internal prosthetic joint, subsequent encounter -T84049S Periprosthetic fracture around unspecified internal prosthetic joint, sequela -T84050A Periprosthetic osteolysis of internal prosthetic right hip joint, initial encounter -T84050D Periprosthetic osteolysis of internal prosthetic right hip joint, subsequent encounter -T84050S Periprosthetic osteolysis of internal prosthetic right hip joint, sequela -T84051A Periprosthetic osteolysis of internal prosthetic left hip joint, initial encounter -T84051D Periprosthetic osteolysis of internal prosthetic left hip joint, subsequent encounter -T84051S Periprosthetic osteolysis of internal prosthetic left hip joint, sequela -T84052A Periprosthetic osteolysis of internal prosthetic right knee joint, initial encounter -T84052D Periprosthetic osteolysis of internal prosthetic right knee joint, subsequent encounter -T84052S Periprosthetic osteolysis of internal prosthetic right knee joint, sequela -T84053A Periprosthetic osteolysis of internal prosthetic left knee joint, initial encounter -T84053D Periprosthetic osteolysis of internal prosthetic left knee joint, subsequent encounter -T84053S Periprosthetic osteolysis of internal prosthetic left knee joint, sequela -T84058A Periprosthetic osteolysis of other internal prosthetic joint, initial encounter -T84058D Periprosthetic osteolysis of other internal prosthetic joint, subsequent encounter -T84058S Periprosthetic osteolysis of other internal prosthetic joint, sequela -T84059A Periprosthetic osteolysis of unspecified internal prosthetic joint, initial encounter -T84059D Periprosthetic osteolysis of unspecified internal prosthetic joint, subsequent encounter -T84059S Periprosthetic osteolysis of unspecified internal prosthetic joint, sequela -T84060A Wear of articular bearing surface of internal prosthetic right hip joint, initial encounter -T84060D Wear of articular bearing surface of internal prosthetic right hip joint, subsequent encounter -T84060S Wear of articular bearing surface of internal prosthetic right hip joint, sequela -T84061A Wear of articular bearing surface of internal prosthetic left hip joint, initial encounter -T84061D Wear of articular bearing surface of internal prosthetic left hip joint, subsequent encounter -T84061S Wear of articular bearing surface of internal prosthetic left hip joint, sequela -T84062A Wear of articular bearing surface of internal prosthetic right knee joint, initial encounter -T84062D Wear of articular bearing surface of internal prosthetic right knee joint, subsequent encounter -T84062S Wear of articular bearing surface of internal prosthetic right knee joint, sequela -T84063A Wear of articular bearing surface of internal prosthetic left knee joint, initial encounter -T84063D Wear of articular bearing surface of internal prosthetic left knee joint, subsequent encounter -T84063S Wear of articular bearing surface of internal prosthetic left knee joint, sequela -T84068A Wear of articular bearing surface of other internal prosthetic joint, initial encounter -T84068D Wear of articular bearing surface of other internal prosthetic joint, subsequent encounter -T84068S Wear of articular bearing surface of other internal prosthetic joint, sequela -T84069A Wear of articular bearing surface of unspecified internal prosthetic joint, initial encounter -T84069D Wear of articular bearing surface of unspecified internal prosthetic joint, subsequent encounter -T84069S Wear of articular bearing surface of unspecified internal prosthetic joint, sequela -T84090A Other mechanical complication of internal right hip prosthesis, initial encounter -T84090D Other mechanical complication of internal right hip prosthesis, subsequent encounter -T84090S Other mechanical complication of internal right hip prosthesis, sequela -T84091A Other mechanical complication of internal left hip prosthesis, initial encounter -T84091D Other mechanical complication of internal left hip prosthesis, subsequent encounter -T84091S Other mechanical complication of internal left hip prosthesis, sequela -T84092A Other mechanical complication of internal right knee prosthesis, initial encounter -T84092D Other mechanical complication of internal right knee prosthesis, subsequent encounter -T84092S Other mechanical complication of internal right knee prosthesis, sequela -T84093A Other mechanical complication of internal left knee prosthesis, initial encounter -T84093D Other mechanical complication of internal left knee prosthesis, subsequent encounter -T84093S Other mechanical complication of internal left knee prosthesis, sequela -T84098A Other mechanical complication of other internal joint prosthesis, initial encounter -T84098D Other mechanical complication of other internal joint prosthesis, subsequent encounter -T84098S Other mechanical complication of other internal joint prosthesis, sequela -T84099A Other mechanical complication of unspecified internal joint prosthesis, initial encounter -T84099D Other mechanical complication of unspecified internal joint prosthesis, subsequent encounter -T84099S Other mechanical complication of unspecified internal joint prosthesis, sequela -T84110A Breakdown (mechanical) of internal fixation device of right humerus, initial encounter -T84110D Breakdown (mechanical) of internal fixation device of right humerus, subsequent encounter -T84110S Breakdown (mechanical) of internal fixation device of right humerus, sequela -T84111A Breakdown (mechanical) of internal fixation device of left humerus, initial encounter -T84111D Breakdown (mechanical) of internal fixation device of left humerus, subsequent encounter -T84111S Breakdown (mechanical) of internal fixation device of left humerus, sequela -T84112A Breakdown (mechanical) of internal fixation device of bone of right forearm, initial encounter -T84112D Breakdown (mechanical) of internal fixation device of bone of right forearm, subsequent encounter -T84112S Breakdown (mechanical) of internal fixation device of bone of right forearm, sequela -T84113A Breakdown (mechanical) of internal fixation device of bone of left forearm, initial encounter -T84113D Breakdown (mechanical) of internal fixation device of bone of left forearm, subsequent encounter -T84113S Breakdown (mechanical) of internal fixation device of bone of left forearm, sequela -T84114A Breakdown (mechanical) of internal fixation device of right femur, initial encounter -T84114D Breakdown (mechanical) of internal fixation device of right femur, subsequent encounter -T84114S Breakdown (mechanical) of internal fixation device of right femur, sequela -T84115A Breakdown (mechanical) of internal fixation device of left femur, initial encounter -T84115D Breakdown (mechanical) of internal fixation device of left femur, subsequent encounter -T84115S Breakdown (mechanical) of internal fixation device of left femur, sequela -T84116A Breakdown (mechanical) of internal fixation device of bone of right lower leg, initial encounter -T84116D Breakdown (mechanical) of internal fixation device of bone of right lower leg, subsequent encounter -T84116S Breakdown (mechanical) of internal fixation device of bone of right lower leg, sequela -T84117A Breakdown (mechanical) of internal fixation device of bone of left lower leg, initial encounter -T84117D Breakdown (mechanical) of internal fixation device of bone of left lower leg, subsequent encounter -T84117S Breakdown (mechanical) of internal fixation device of bone of left lower leg, sequela -T84119A Breakdown (mechanical) of internal fixation device of unspecified bone of limb, initial encounter -T84119D Breakdown (mechanical) of internal fixation device of unspecified bone of limb, subsequent encounter -T84119S Breakdown (mechanical) of internal fixation device of unspecified bone of limb, sequela -T84120A Displacement of internal fixation device of right humerus, initial encounter -T84120D Displacement of internal fixation device of right humerus, subsequent encounter -T84120S Displacement of internal fixation device of right humerus, sequela -T84121A Displacement of internal fixation device of left humerus, initial encounter -T84121D Displacement of internal fixation device of left humerus, subsequent encounter -T84121S Displacement of internal fixation device of left humerus, sequela -T84122A Displacement of internal fixation device of bone of right forearm, initial encounter -T84122D Displacement of internal fixation device of bone of right forearm, subsequent encounter -T84122S Displacement of internal fixation device of bone of right forearm, sequela -T84123A Displacement of internal fixation device of bone of left forearm, initial encounter -T84123D Displacement of internal fixation device of bone of left forearm, subsequent encounter -T84123S Displacement of internal fixation device of bone of left forearm, sequela -T84124A Displacement of internal fixation device of right femur, initial encounter -T84124D Displacement of internal fixation device of right femur, subsequent encounter -T84124S Displacement of internal fixation device of right femur, sequela -T84125A Displacement of internal fixation device of left femur, initial encounter -T84125D Displacement of internal fixation device of left femur, subsequent encounter -T84125S Displacement of internal fixation device of left femur, sequela -T84126A Displacement of internal fixation device of bone of right lower leg, initial encounter -T84126D Displacement of internal fixation device of bone of right lower leg, subsequent encounter -T84126S Displacement of internal fixation device of bone of right lower leg, sequela -T84127A Displacement of internal fixation device of bone of left lower leg, initial encounter -T84127D Displacement of internal fixation device of bone of left lower leg, subsequent encounter -T84127S Displacement of internal fixation device of bone of left lower leg, sequela -T84129A Displacement of internal fixation device of unspecified bone of limb, initial encounter -T84129D Displacement of internal fixation device of unspecified bone of limb, subsequent encounter -T84129S Displacement of internal fixation device of unspecified bone of limb, sequela -T84190A Other mechanical complication of internal fixation device of right humerus, initial encounter -T84190D Other mechanical complication of internal fixation device of right humerus, subsequent encounter -T84190S Other mechanical complication of internal fixation device of right humerus, sequela -T84191A Other mechanical complication of internal fixation device of left humerus, initial encounter -T84191D Other mechanical complication of internal fixation device of left humerus, subsequent encounter -T84191S Other mechanical complication of internal fixation device of left humerus, sequela -T84192A Other mechanical complication of internal fixation device of bone of right forearm, initial encounter -T84192D Other mechanical complication of internal fixation device of bone of right forearm, subsequent encounter -T84192S Other mechanical complication of internal fixation device of bone of right forearm, sequela -T84193A Other mechanical complication of internal fixation device of bone of left forearm, initial encounter -T84193D Other mechanical complication of internal fixation device of bone of left forearm, subsequent encounter -T84193S Other mechanical complication of internal fixation device of bone of left forearm, sequela -T84194A Other mechanical complication of internal fixation device of right femur, initial encounter -T84194D Other mechanical complication of internal fixation device of right femur, subsequent encounter -T84194S Other mechanical complication of internal fixation device of right femur, sequela -T84195A Other mechanical complication of internal fixation device of left femur, initial encounter -T84195D Other mechanical complication of internal fixation device of left femur, subsequent encounter -T84195S Other mechanical complication of internal fixation device of left femur, sequela -T84196A Other mechanical complication of internal fixation device of bone of right lower leg, initial encounter -T84196D Other mechanical complication of internal fixation device of bone of right lower leg, subsequent encounter -T84196S Other mechanical complication of internal fixation device of bone of right lower leg, sequela -T84197A Other mechanical complication of internal fixation device of bone of left lower leg, initial encounter -T84197D Other mechanical complication of internal fixation device of bone of left lower leg, subsequent encounter -T84197S Other mechanical complication of internal fixation device of bone of left lower leg, sequela -T84199A Other mechanical complication of internal fixation device of unspecified bone of limb, initial encounter -T84199D Other mechanical complication of internal fixation device of unspecified bone of limb, subsequent encounter -T84199S Other mechanical complication of internal fixation device of unspecified bone of limb, sequela -T84210A Breakdown (mechanical) of internal fixation device of bones of hand and fingers, initial encounter -T84210D Breakdown (mechanical) of internal fixation device of bones of hand and fingers, subsequent encounter -T84210S Breakdown (mechanical) of internal fixation device of bones of hand and fingers, sequela -T84213A Breakdown (mechanical) of internal fixation device of bones of foot and toes, initial encounter -T84213D Breakdown (mechanical) of internal fixation device of bones of foot and toes, subsequent encounter -T84213S Breakdown (mechanical) of internal fixation device of bones of foot and toes, sequela -T84216A Breakdown (mechanical) of internal fixation device of vertebrae, initial encounter -T84216D Breakdown (mechanical) of internal fixation device of vertebrae, subsequent encounter -T84216S Breakdown (mechanical) of internal fixation device of vertebrae, sequela -T84218A Breakdown (mechanical) of internal fixation device of other bones, initial encounter -T84218D Breakdown (mechanical) of internal fixation device of other bones, subsequent encounter -T84218S Breakdown (mechanical) of internal fixation device of other bones, sequela -T84220A Displacement of internal fixation device of bones of hand and fingers, initial encounter -T84220D Displacement of internal fixation device of bones of hand and fingers, subsequent encounter -T84220S Displacement of internal fixation device of bones of hand and fingers, sequela -T84223A Displacement of internal fixation device of bones of foot and toes, initial encounter -T84223D Displacement of internal fixation device of bones of foot and toes, subsequent encounter -T84223S Displacement of internal fixation device of bones of foot and toes, sequela -T84226A Displacement of internal fixation device of vertebrae, initial encounter -T84226D Displacement of internal fixation device of vertebrae, subsequent encounter -T84226S Displacement of internal fixation device of vertebrae, sequela -T84228A Displacement of internal fixation device of other bones, initial encounter -T84228D Displacement of internal fixation device of other bones, subsequent encounter -T84228S Displacement of internal fixation device of other bones, sequela -T84290A Other mechanical complication of internal fixation device of bones of hand and fingers, initial encounter -T84290D Other mechanical complication of internal fixation device of bones of hand and fingers, subsequent encounter -T84290S Other mechanical complication of internal fixation device of bones of hand and fingers, sequela -T84293A Other mechanical complication of internal fixation device of bones of foot and toes, initial encounter -T84293D Other mechanical complication of internal fixation device of bones of foot and toes, subsequent encounter -T84293S Other mechanical complication of internal fixation device of bones of foot and toes, sequela -T84296A Other mechanical complication of internal fixation device of vertebrae, initial encounter -T84296D Other mechanical complication of internal fixation device of vertebrae, subsequent encounter -T84296S Other mechanical complication of internal fixation device of vertebrae, sequela -T84298A Other mechanical complication of internal fixation device of other bones, initial encounter -T84298D Other mechanical complication of internal fixation device of other bones, subsequent encounter -T84298S Other mechanical complication of internal fixation device of other bones, sequela -T84310A Breakdown (mechanical) of electronic bone stimulator, initial encounter -T84310D Breakdown (mechanical) of electronic bone stimulator, subsequent encounter -T84310S Breakdown (mechanical) of electronic bone stimulator, sequela -T84318A Breakdown (mechanical) of other bone devices, implants and grafts, initial encounter -T84318D Breakdown (mechanical) of other bone devices, implants and grafts, subsequent encounter -T84318S Breakdown (mechanical) of other bone devices, implants and grafts, sequela -T84320A Displacement of electronic bone stimulator, initial encounter -T84320D Displacement of electronic bone stimulator, subsequent encounter -T84320S Displacement of electronic bone stimulator, sequela -T84328A Displacement of other bone devices, implants and grafts, initial encounter -T84328D Displacement of other bone devices, implants and grafts, subsequent encounter -T84328S Displacement of other bone devices, implants and grafts, sequela -T84390A Other mechanical complication of electronic bone stimulator, initial encounter -T84390D Other mechanical complication of electronic bone stimulator, subsequent encounter -T84390S Other mechanical complication of electronic bone stimulator, sequela -T84398A Other mechanical complication of other bone devices, implants and grafts, initial encounter -T84398D Other mechanical complication of other bone devices, implants and grafts, subsequent encounter -T84398S Other mechanical complication of other bone devices, implants and grafts, sequela -T84410A Breakdown (mechanical) of muscle and tendon graft, initial encounter -T84410D Breakdown (mechanical) of muscle and tendon graft, subsequent encounter -T84410S Breakdown (mechanical) of muscle and tendon graft, sequela -T84418A Breakdown (mechanical) of other internal orthopedic devices, implants and grafts, initial encounter -T84418D Breakdown (mechanical) of other internal orthopedic devices, implants and grafts, subsequent encounter -T84418S Breakdown (mechanical) of other internal orthopedic devices, implants and grafts, sequela -T84420A Displacement of muscle and tendon graft, initial encounter -T84420D Displacement of muscle and tendon graft, subsequent encounter -T84420S Displacement of muscle and tendon graft, sequela -T84428A Displacement of other internal orthopedic devices, implants and grafts, initial encounter -T84428D Displacement of other internal orthopedic devices, implants and grafts, subsequent encounter -T84428S Displacement of other internal orthopedic devices, implants and grafts, sequela -T84490A Other mechanical complication of muscle and tendon graft, initial encounter -T84490D Other mechanical complication of muscle and tendon graft, subsequent encounter -T84490S Other mechanical complication of muscle and tendon graft, sequela -T84498A Other mechanical complication of other internal orthopedic devices, implants and grafts, initial encounter -T84498D Other mechanical complication of other internal orthopedic devices, implants and grafts, subsequent encounter -T84498S Other mechanical complication of other internal orthopedic devices, implants and grafts, sequela -T8450XA Infection and inflammatory reaction due to unspecified internal joint prosthesis, initial encounter -T8450XD Infection and inflammatory reaction due to unspecified internal joint prosthesis, subsequent encounter -T8450XS Infection and inflammatory reaction due to unspecified internal joint prosthesis, sequela -T8451XA Infection and inflammatory reaction due to internal right hip prosthesis, initial encounter -T8451XD Infection and inflammatory reaction due to internal right hip prosthesis, subsequent encounter -T8451XS Infection and inflammatory reaction due to internal right hip prosthesis, sequela -T8452XA Infection and inflammatory reaction due to internal left hip prosthesis, initial encounter -T8452XD Infection and inflammatory reaction due to internal left hip prosthesis, subsequent encounter -T8452XS Infection and inflammatory reaction due to internal left hip prosthesis, sequela -T8453XA Infection and inflammatory reaction due to internal right knee prosthesis, initial encounter -T8453XD Infection and inflammatory reaction due to internal right knee prosthesis, subsequent encounter -T8453XS Infection and inflammatory reaction due to internal right knee prosthesis, sequela -T8454XA Infection and inflammatory reaction due to internal left knee prosthesis, initial encounter -T8454XD Infection and inflammatory reaction due to internal left knee prosthesis, subsequent encounter -T8454XS Infection and inflammatory reaction due to internal left knee prosthesis, sequela -T8459XA Infection and inflammatory reaction due to other internal joint prosthesis, initial encounter -T8459XD Infection and inflammatory reaction due to other internal joint prosthesis, subsequent encounter -T8459XS Infection and inflammatory reaction due to other internal joint prosthesis, sequela -T8460XA Infection and inflammatory reaction due to internal fixation device of unspecified site, initial encounter -T8460XD Infection and inflammatory reaction due to internal fixation device of unspecified site, subsequent encounter -T8460XS Infection and inflammatory reaction due to internal fixation device of unspecified site, sequela -T84610A Infection and inflammatory reaction due to internal fixation device of right humerus, initial encounter -T84610D Infection and inflammatory reaction due to internal fixation device of right humerus, subsequent encounter -T84610S Infection and inflammatory reaction due to internal fixation device of right humerus, sequela -T84611A Infection and inflammatory reaction due to internal fixation device of left humerus, initial encounter -T84611D Infection and inflammatory reaction due to internal fixation device of left humerus, subsequent encounter -T84611S Infection and inflammatory reaction due to internal fixation device of left humerus, sequela -T84612A Infection and inflammatory reaction due to internal fixation device of right radius, initial encounter -T84612D Infection and inflammatory reaction due to internal fixation device of right radius, subsequent encounter -T84612S Infection and inflammatory reaction due to internal fixation device of right radius, sequela -T84613A Infection and inflammatory reaction due to internal fixation device of left radius, initial encounter -T84613D Infection and inflammatory reaction due to internal fixation device of left radius, subsequent encounter -T84613S Infection and inflammatory reaction due to internal fixation device of left radius, sequela -T84614A Infection and inflammatory reaction due to internal fixation device of right ulna, initial encounter -T84614D Infection and inflammatory reaction due to internal fixation device of right ulna, subsequent encounter -T84614S Infection and inflammatory reaction due to internal fixation device of right ulna, sequela -T84615A Infection and inflammatory reaction due to internal fixation device of left ulna, initial encounter -T84615D Infection and inflammatory reaction due to internal fixation device of left ulna, subsequent encounter -T84615S Infection and inflammatory reaction due to internal fixation device of left ulna, sequela -T84619A Infection and inflammatory reaction due to internal fixation device of unspecified bone of arm, initial encounter -T84619D Infection and inflammatory reaction due to internal fixation device of unspecified bone of arm, subsequent encounter -T84619S Infection and inflammatory reaction due to internal fixation device of unspecified bone of arm, sequela -T84620A Infection and inflammatory reaction due to internal fixation device of right femur, initial encounter -T84620D Infection and inflammatory reaction due to internal fixation device of right femur, subsequent encounter -T84620S Infection and inflammatory reaction due to internal fixation device of right femur, sequela -T84621A Infection and inflammatory reaction due to internal fixation device of left femur, initial encounter -T84621D Infection and inflammatory reaction due to internal fixation device of left femur, subsequent encounter -T84621S Infection and inflammatory reaction due to internal fixation device of left femur, sequela -T84622A Infection and inflammatory reaction due to internal fixation device of right tibia, initial encounter -T84622D Infection and inflammatory reaction due to internal fixation device of right tibia, subsequent encounter -T84622S Infection and inflammatory reaction due to internal fixation device of right tibia, sequela -T84623A Infection and inflammatory reaction due to internal fixation device of left tibia, initial encounter -T84623D Infection and inflammatory reaction due to internal fixation device of left tibia, subsequent encounter -T84623S Infection and inflammatory reaction due to internal fixation device of left tibia, sequela -T84624A Infection and inflammatory reaction due to internal fixation device of right fibula, initial encounter -T84624D Infection and inflammatory reaction due to internal fixation device of right fibula, subsequent encounter -T84624S Infection and inflammatory reaction due to internal fixation device of right fibula, sequela -T84625A Infection and inflammatory reaction due to internal fixation device of left fibula, initial encounter -T84625D Infection and inflammatory reaction due to internal fixation device of left fibula, subsequent encounter -T84625S Infection and inflammatory reaction due to internal fixation device of left fibula, sequela -T84629A Infection and inflammatory reaction due to internal fixation device of unspecified bone of leg, initial encounter -T84629D Infection and inflammatory reaction due to internal fixation device of unspecified bone of leg, subsequent encounter -T84629S Infection and inflammatory reaction due to internal fixation device of unspecified bone of leg, sequela -T8463XA Infection and inflammatory reaction due to internal fixation device of spine, initial encounter -T8463XD Infection and inflammatory reaction due to internal fixation device of spine, subsequent encounter -T8463XS Infection and inflammatory reaction due to internal fixation device of spine, sequela -T8469XA Infection and inflammatory reaction due to internal fixation device of other site, initial encounter -T8469XD Infection and inflammatory reaction due to internal fixation device of other site, subsequent encounter -T8469XS Infection and inflammatory reaction due to internal fixation device of other site, sequela -T847XXA Infection and inflammatory reaction due to other internal orthopedic prosthetic devices, implants and grafts, initial encounter -T847XXD Infection and inflammatory reaction due to other internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T847XXS Infection and inflammatory reaction due to other internal orthopedic prosthetic devices, implants and grafts, sequela -T8481XA Embolism due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8481XD Embolism due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8481XS Embolism due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8482XA Fibrosis due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8482XD Fibrosis due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8482XS Fibrosis due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8483XA Hemorrhage due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8483XD Hemorrhage due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8483XS Hemorrhage due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8484XA Pain due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8484XD Pain due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8484XS Pain due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8485XA Stenosis due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8485XD Stenosis due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8485XS Stenosis due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8486XA Thrombosis due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8486XD Thrombosis due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8486XS Thrombosis due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8489XA Other specified complication of internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8489XD Other specified complication of internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8489XS Other specified complication of internal orthopedic prosthetic devices, implants and grafts, sequela -T849XXA Unspecified complication of internal orthopedic prosthetic device, implant and graft, initial encounter -T849XXD Unspecified complication of internal orthopedic prosthetic device, implant and graft, subsequent encounter -T849XXS Unspecified complication of internal orthopedic prosthetic device, implant and graft, sequela -T8501XA Breakdown (mechanical) of ventricular intracranial (communicating) shunt, initial encounter -T8501XD Breakdown (mechanical) of ventricular intracranial (communicating) shunt, subsequent encounter -T8501XS Breakdown (mechanical) of ventricular intracranial (communicating) shunt, sequela -T8502XA Displacement of ventricular intracranial (communicating) shunt, initial encounter -T8502XD Displacement of ventricular intracranial (communicating) shunt, subsequent encounter -T8502XS Displacement of ventricular intracranial (communicating) shunt, sequela -T8503XA Leakage of ventricular intracranial (communicating) shunt, initial encounter -T8503XD Leakage of ventricular intracranial (communicating) shunt, subsequent encounter -T8503XS Leakage of ventricular intracranial (communicating) shunt, sequela -T8509XA Other mechanical complication of ventricular intracranial (communicating) shunt, initial encounter -T8509XD Other mechanical complication of ventricular intracranial (communicating) shunt, subsequent encounter -T8509XS Other mechanical complication of ventricular intracranial (communicating) shunt, sequela -T85110A Breakdown (mechanical) of implanted electronic neurostimulator (electrode) of brain, initial encounter -T85110D Breakdown (mechanical) of implanted electronic neurostimulator (electrode) of brain, subsequent encounter -T85110S Breakdown (mechanical) of implanted electronic neurostimulator (electrode) of brain, sequela -T85111A Breakdown (mechanical) of implanted electronic neurostimulator (electrode) of peripheral nerve, initial encounter -T85111D Breakdown (mechanical) of implanted electronic neurostimulator (electrode) of peripheral nerve, subsequent encounter -T85111S Breakdown (mechanical) of implanted electronic neurostimulator (electrode) of peripheral nerve, sequela -T85112A Breakdown (mechanical) of implanted electronic neurostimulator (electrode) of spinal cord, initial encounter -T85112D Breakdown (mechanical) of implanted electronic neurostimulator (electrode) of spinal cord, subsequent encounter -T85112S Breakdown (mechanical) of implanted electronic neurostimulator (electrode) of spinal cord, sequela -T85118A Breakdown (mechanical) of other implanted electronic stimulator of nervous system, initial encounter -T85118D Breakdown (mechanical) of other implanted electronic stimulator of nervous system, subsequent encounter -T85118S Breakdown (mechanical) of other implanted electronic stimulator of nervous system, sequela -T85120A Displacement of implanted electronic neurostimulator (electrode) of brain, initial encounter -T85120D Displacement of implanted electronic neurostimulator (electrode) of brain, subsequent encounter -T85120S Displacement of implanted electronic neurostimulator (electrode) of brain, sequela -T85121A Displacement of implanted electronic neurostimulator (electrode) of peripheral nerve, initial encounter -T85121D Displacement of implanted electronic neurostimulator (electrode) of peripheral nerve, subsequent encounter -T85121S Displacement of implanted electronic neurostimulator (electrode) of peripheral nerve, sequela -T85122A Displacement of implanted electronic neurostimulator (electrode) of spinal cord, initial encounter -T85122D Displacement of implanted electronic neurostimulator (electrode) of spinal cord, subsequent encounter -T85122S Displacement of implanted electronic neurostimulator (electrode) of spinal cord, sequela -T85128A Displacement of other implanted electronic stimulator of nervous system, initial encounter -T85128D Displacement of other implanted electronic stimulator of nervous system, subsequent encounter -T85128S Displacement of other implanted electronic stimulator of nervous system, sequela -T85190A Other mechanical complication of implanted electronic neurostimulator (electrode) of brain, initial encounter -T85190D Other mechanical complication of implanted electronic neurostimulator (electrode) of brain, subsequent encounter -T85190S Other mechanical complication of implanted electronic neurostimulator (electrode) of brain, sequela -T85191A Other mechanical complication of implanted electronic neurostimulator (electrode) of peripheral nerve, initial encounter -T85191D Other mechanical complication of implanted electronic neurostimulator (electrode) of peripheral nerve, subsequent encounter -T85191S Other mechanical complication of implanted electronic neurostimulator (electrode) of peripheral nerve, sequela -T85192A Other mechanical complication of implanted electronic neurostimulator (electrode) of spinal cord, initial encounter -T85192D Other mechanical complication of implanted electronic neurostimulator (electrode) of spinal cord, subsequent encounter -T85192S Other mechanical complication of implanted electronic neurostimulator (electrode) of spinal cord, sequela -T85199A Other mechanical complication of other implanted electronic stimulator of nervous system, initial encounter -T85199D Other mechanical complication of other implanted electronic stimulator of nervous system, subsequent encounter -T85199S Other mechanical complication of other implanted electronic stimulator of nervous system, sequela -T8521XA Breakdown (mechanical) of intraocular lens, initial encounter -T8521XD Breakdown (mechanical) of intraocular lens, subsequent encounter -T8521XS Breakdown (mechanical) of intraocular lens, sequela -T8522XA Displacement of intraocular lens, initial encounter -T8522XD Displacement of intraocular lens, subsequent encounter -T8522XS Displacement of intraocular lens, sequela -T8529XA Other mechanical complication of intraocular lens, initial encounter -T8529XD Other mechanical complication of intraocular lens, subsequent encounter -T8529XS Other mechanical complication of intraocular lens, sequela -T85310A Breakdown (mechanical) of prosthetic orbit of right eye, initial encounter -T85310D Breakdown (mechanical) of prosthetic orbit of right eye, subsequent encounter -T85310S Breakdown (mechanical) of prosthetic orbit of right eye, sequela -T85311A Breakdown (mechanical) of prosthetic orbit of left eye, initial encounter -T85311D Breakdown (mechanical) of prosthetic orbit of left eye, subsequent encounter -T85311S Breakdown (mechanical) of prosthetic orbit of left eye, sequela -T85318A Breakdown (mechanical) of other ocular prosthetic devices, implants and grafts, initial encounter -T85318D Breakdown (mechanical) of other ocular prosthetic devices, implants and grafts, subsequent encounter -T85318S Breakdown (mechanical) of other ocular prosthetic devices, implants and grafts, sequela -T85320A Displacement of prosthetic orbit of right eye, initial encounter -T85320D Displacement of prosthetic orbit of right eye, subsequent encounter -T85320S Displacement of prosthetic orbit of right eye, sequela -T85321A Displacement of prosthetic orbit of left eye, initial encounter -T85321D Displacement of prosthetic orbit of left eye, subsequent encounter -T85321S Displacement of prosthetic orbit of left eye, sequela -T85328A Displacement of other ocular prosthetic devices, implants and grafts, initial encounter -T85328D Displacement of other ocular prosthetic devices, implants and grafts, subsequent encounter -T85328S Displacement of other ocular prosthetic devices, implants and grafts, sequela -T85390A Other mechanical complication of prosthetic orbit of right eye, initial encounter -T85390D Other mechanical complication of prosthetic orbit of right eye, subsequent encounter -T85390S Other mechanical complication of prosthetic orbit of right eye, sequela -T85391A Other mechanical complication of prosthetic orbit of left eye, initial encounter -T85391D Other mechanical complication of prosthetic orbit of left eye, subsequent encounter -T85391S Other mechanical complication of prosthetic orbit of left eye, sequela -T85398A Other mechanical complication of other ocular prosthetic devices, implants and grafts, initial encounter -T85398D Other mechanical complication of other ocular prosthetic devices, implants and grafts, subsequent encounter -T85398S Other mechanical complication of other ocular prosthetic devices, implants and grafts, sequela -T8541XA Breakdown (mechanical) of breast prosthesis and implant, initial encounter -T8541XD Breakdown (mechanical) of breast prosthesis and implant, subsequent encounter -T8541XS Breakdown (mechanical) of breast prosthesis and implant, sequela -T8542XA Displacement of breast prosthesis and implant, initial encounter -T8542XD Displacement of breast prosthesis and implant, subsequent encounter -T8542XS Displacement of breast prosthesis and implant, sequela -T8543XA Leakage of breast prosthesis and implant, initial encounter -T8543XD Leakage of breast prosthesis and implant, subsequent encounter -T8543XS Leakage of breast prosthesis and implant, sequela -T8544XA Capsular contracture of breast implant, initial encounter -T8544XD Capsular contracture of breast implant, subsequent encounter -T8544XS Capsular contracture of breast implant, sequela -T8549XA Other mechanical complication of breast prosthesis and implant, initial encounter -T8549XD Other mechanical complication of breast prosthesis and implant, subsequent encounter -T8549XS Other mechanical complication of breast prosthesis and implant, sequela -T85510A Breakdown (mechanical) of bile duct prosthesis, initial encounter -T85510D Breakdown (mechanical) of bile duct prosthesis, subsequent encounter -T85510S Breakdown (mechanical) of bile duct prosthesis, sequela -T85511A Breakdown (mechanical) of esophageal anti-reflux device, initial encounter -T85511D Breakdown (mechanical) of esophageal anti-reflux device, subsequent encounter -T85511S Breakdown (mechanical) of esophageal anti-reflux device, sequela -T85518A Breakdown (mechanical) of other gastrointestinal prosthetic devices, implants and grafts, initial encounter -T85518D Breakdown (mechanical) of other gastrointestinal prosthetic devices, implants and grafts, subsequent encounter -T85518S Breakdown (mechanical) of other gastrointestinal prosthetic devices, implants and grafts, sequela -T85520A Displacement of bile duct prosthesis, initial encounter -T85520D Displacement of bile duct prosthesis, subsequent encounter -T85520S Displacement of bile duct prosthesis, sequela -T85521A Displacement of esophageal anti-reflux device, initial encounter -T85521D Displacement of esophageal anti-reflux device, subsequent encounter -T85521S Displacement of esophageal anti-reflux device, sequela -T85528A Displacement of other gastrointestinal prosthetic devices, implants and grafts, initial encounter -T85528D Displacement of other gastrointestinal prosthetic devices, implants and grafts, subsequent encounter -T85528S Displacement of other gastrointestinal prosthetic devices, implants and grafts, sequela -T85590A Other mechanical complication of bile duct prosthesis, initial encounter -T85590D Other mechanical complication of bile duct prosthesis, subsequent encounter -T85590S Other mechanical complication of bile duct prosthesis, sequela -T85591A Other mechanical complication of esophageal anti-reflux device, initial encounter -T85591D Other mechanical complication of esophageal anti-reflux device, subsequent encounter -T85591S Other mechanical complication of esophageal anti-reflux device, sequela -T85598A Other mechanical complication of other gastrointestinal prosthetic devices, implants and grafts, initial encounter -T85598D Other mechanical complication of other gastrointestinal prosthetic devices, implants and grafts, subsequent encounter -T85598S Other mechanical complication of other gastrointestinal prosthetic devices, implants and grafts, sequela -T85610A Breakdown (mechanical) of epidural and subdural infusion catheter, initial encounter -T85610D Breakdown (mechanical) of epidural and subdural infusion catheter, subsequent encounter -T85610S Breakdown (mechanical) of epidural and subdural infusion catheter, sequela -T85611A Breakdown (mechanical) of intraperitoneal dialysis catheter, initial encounter -T85611D Breakdown (mechanical) of intraperitoneal dialysis catheter, subsequent encounter -T85611S Breakdown (mechanical) of intraperitoneal dialysis catheter, sequela -T85612A Breakdown (mechanical) of permanent sutures, initial encounter -T85612D Breakdown (mechanical) of permanent sutures, subsequent encounter -T85612S Breakdown (mechanical) of permanent sutures, sequela -T85613A Breakdown (mechanical) of artificial skin graft and decellularized allodermis, initial encounter -T85613D Breakdown (mechanical) of artificial skin graft and decellularized allodermis, subsequent encounter -T85613S Breakdown (mechanical) of artificial skin graft and decellularized allodermis, sequela -T85614A Breakdown (mechanical) of insulin pump, initial encounter -T85614D Breakdown (mechanical) of insulin pump, subsequent encounter -T85614S Breakdown (mechanical) of insulin pump, sequela -T85618A Breakdown (mechanical) of other specified internal prosthetic devices, implants and grafts, initial encounter -T85618D Breakdown (mechanical) of other specified internal prosthetic devices, implants and grafts, subsequent encounter -T85618S Breakdown (mechanical) of other specified internal prosthetic devices, implants and grafts, sequela -T85620A Displacement of epidural and subdural infusion catheter, initial encounter -T85620D Displacement of epidural and subdural infusion catheter, subsequent encounter -T85620S Displacement of epidural and subdural infusion catheter, sequela -T85621A Displacement of intraperitoneal dialysis catheter, initial encounter -T85621D Displacement of intraperitoneal dialysis catheter, subsequent encounter -T85621S Displacement of intraperitoneal dialysis catheter, sequela -T85622A Displacement of permanent sutures, initial encounter -T85622D Displacement of permanent sutures, subsequent encounter -T85622S Displacement of permanent sutures, sequela -T85623A Displacement of artificial skin graft and decellularized allodermis, initial encounter -T85623D Displacement of artificial skin graft and decellularized allodermis, subsequent encounter -T85623S Displacement of artificial skin graft and decellularized allodermis, sequela -T85624A Displacement of insulin pump, initial encounter -T85624D Displacement of insulin pump, subsequent encounter -T85624S Displacement of insulin pump, sequela -T85628A Displacement of other specified internal prosthetic devices, implants and grafts, initial encounter -T85628D Displacement of other specified internal prosthetic devices, implants and grafts, subsequent encounter -T85628S Displacement of other specified internal prosthetic devices, implants and grafts, sequela -T85630A Leakage of epidural and subdural infusion catheter, initial encounter -T85630D Leakage of epidural and subdural infusion catheter, subsequent encounter -T85630S Leakage of epidural and subdural infusion catheter, sequela -T85631A Leakage of intraperitoneal dialysis catheter, initial encounter -T85631D Leakage of intraperitoneal dialysis catheter, subsequent encounter -T85631S Leakage of intraperitoneal dialysis catheter, sequela -T85633A Leakage of insulin pump, initial encounter -T85633D Leakage of insulin pump, subsequent encounter -T85633S Leakage of insulin pump, sequela -T85638A Leakage of other specified internal prosthetic devices, implants and grafts, initial encounter -T85638D Leakage of other specified internal prosthetic devices, implants and grafts, subsequent encounter -T85638S Leakage of other specified internal prosthetic devices, implants and grafts, sequela -T85690A Other mechanical complication of epidural and subdural infusion catheter, initial encounter -T85690D Other mechanical complication of epidural and subdural infusion catheter, subsequent encounter -T85690S Other mechanical complication of epidural and subdural infusion catheter, sequela -T85691A Other mechanical complication of intraperitoneal dialysis catheter, initial encounter -T85691D Other mechanical complication of intraperitoneal dialysis catheter, subsequent encounter -T85691S Other mechanical complication of intraperitoneal dialysis catheter, sequela -T85692A Other mechanical complication of permanent sutures, initial encounter -T85692D Other mechanical complication of permanent sutures, subsequent encounter -T85692S Other mechanical complication of permanent sutures, sequela -T85693A Other mechanical complication of artificial skin graft and decellularized allodermis, initial encounter -T85693D Other mechanical complication of artificial skin graft and decellularized allodermis, subsequent encounter -T85693S Other mechanical complication of artificial skin graft and decellularized allodermis, sequela -T85694A Other mechanical complication of insulin pump, initial encounter -T85694D Other mechanical complication of insulin pump, subsequent encounter -T85694S Other mechanical complication of insulin pump, sequela -T85698A Other mechanical complication of other specified internal prosthetic devices, implants and grafts, initial encounter -T85698D Other mechanical complication of other specified internal prosthetic devices, implants and grafts, subsequent encounter -T85698S Other mechanical complication of other specified internal prosthetic devices, implants and grafts, sequela -T8571XA Infection and inflammatory reaction due to peritoneal dialysis catheter, initial encounter -T8571XD Infection and inflammatory reaction due to peritoneal dialysis catheter, subsequent encounter -T8571XS Infection and inflammatory reaction due to peritoneal dialysis catheter, sequela -T8572XA Infection and inflammatory reaction due to insulin pump, initial encounter -T8572XD Infection and inflammatory reaction due to insulin pump, subsequent encounter -T8572XS Infection and inflammatory reaction due to insulin pump, sequela -T8579XA Infection and inflammatory reaction due to other internal prosthetic devices, implants and grafts, initial encounter -T8579XD Infection and inflammatory reaction due to other internal prosthetic devices, implants and grafts, subsequent encounter -T8579XS Infection and inflammatory reaction due to other internal prosthetic devices, implants and grafts, sequela -T8581XA Embolism due to internal prosthetic devices, implants and grafts, not elsewhere classified, initial encounter -T8581XD Embolism due to internal prosthetic devices, implants and grafts, not elsewhere classified, subsequent encounter -T8581XS Embolism due to internal prosthetic devices, implants and grafts, not elsewhere classified, sequela -T8582XA Fibrosis due to internal prosthetic devices, implants and grafts, not elsewhere classified, initial encounter -T8582XD Fibrosis due to internal prosthetic devices, implants and grafts, not elsewhere classified, subsequent encounter -T8582XS Fibrosis due to internal prosthetic devices, implants and grafts, not elsewhere classified, sequela -T8583XA Hemorrhage due to internal prosthetic devices, implants and grafts, not elsewhere classified, initial encounter -T8583XD Hemorrhage due to internal prosthetic devices, implants and grafts, not elsewhere classified, subsequent encounter -T8583XS Hemorrhage due to internal prosthetic devices, implants and grafts, not elsewhere classified, sequela -T8584XA Pain due to internal prosthetic devices, implants and grafts, not elsewhere classified, initial encounter -T8584XD Pain due to internal prosthetic devices, implants and grafts, not elsewhere classified, subsequent encounter -T8584XS Pain due to internal prosthetic devices, implants and grafts, not elsewhere classified, sequela -T8585XA Stenosis due to internal prosthetic devices, implants and grafts, not elsewhere classified, initial encounter -T8585XD Stenosis due to internal prosthetic devices, implants and grafts, not elsewhere classified, subsequent encounter -T8585XS Stenosis due to internal prosthetic devices, implants and grafts, not elsewhere classified, sequela -T8586XA Thrombosis due to internal prosthetic devices, implants and grafts, not elsewhere classified, initial encounter -T8586XD Thrombosis due to internal prosthetic devices, implants and grafts, not elsewhere classified, subsequent encounter -T8586XS Thrombosis due to internal prosthetic devices, implants and grafts, not elsewhere classified, sequela -T8589XA Other specified complication of internal prosthetic devices, implants and grafts, not elsewhere classified, initial encounter -T8589XD Other specified complication of internal prosthetic devices, implants and grafts, not elsewhere classified, subsequent encounter -T8589XS Other specified complication of internal prosthetic devices, implants and grafts, not elsewhere classified, sequela -T859XXA Unspecified complication of internal prosthetic device, implant and graft, initial encounter -T859XXD Unspecified complication of internal prosthetic device, implant and graft, subsequent encounter -T859XXS Unspecified complication of internal prosthetic device, implant and graft, sequela -T8600 Unspecified complication of bone marrow transplant -T8601 Bone marrow transplant rejection -T8602 Bone marrow transplant failure -T8603 Bone marrow transplant infection -T8609 Other complications of bone marrow transplant -T8610 Unspecified complication of kidney transplant -T8611 Kidney transplant rejection -T8612 Kidney transplant failure -T8613 Kidney transplant infection -T8619 Other complication of kidney transplant -T8620 Unspecified complication of heart transplant -T8621 Heart transplant rejection -T8622 Heart transplant failure -T8623 Heart transplant infection -T86290 Cardiac allograft vasculopathy -T86298 Other complications of heart transplant -T8630 Unspecified complication of heart-lung transplant -T8631 Heart-lung transplant rejection -T8632 Heart-lung transplant failure -T8633 Heart-lung transplant infection -T8639 Other complications of heart-lung transplant -T8640 Unspecified complication of liver transplant -T8641 Liver transplant rejection -T8642 Liver transplant failure -T8643 Liver transplant infection -T8649 Other complications of liver transplant -T865 Complications of stem cell transplant -T86810 Lung transplant rejection -T86811 Lung transplant failure -T86812 Lung transplant infection -T86818 Other complications of lung transplant -T86819 Unspecified complication of lung transplant -T86820 Skin graft (allograft) rejection -T86821 Skin graft (allograft) (autograft) failure -T86822 Skin graft (allograft) (autograft) infection -T86828 Other complications of skin graft (allograft) (autograft) -T86829 Unspecified complication of skin graft (allograft) (autograft) -T86830 Bone graft rejection -T86831 Bone graft failure -T86832 Bone graft infection -T86838 Other complications of bone graft -T86839 Unspecified complication of bone graft -T86840 Corneal transplant rejection -T86841 Corneal transplant failure -T86842 Corneal transplant infection -T86848 Other complications of corneal transplant -T86849 Unspecified complication of corneal transplant -T86850 Intestine transplant rejection -T86851 Intestine transplant failure -T86852 Intestine transplant infection -T86858 Other complications of intestine transplant -T86859 Unspecified complication of intestine transplant -T86890 Other transplanted tissue rejection -T86891 Other transplanted tissue failure -T86892 Other transplanted tissue infection -T86898 Other complications of other transplanted tissue -T86899 Unspecified complication of other transplanted tissue -T8690 Unspecified complication of unspecified transplanted organ and tissue -T8691 Unspecified transplanted organ and tissue rejection -T8692 Unspecified transplanted organ and tissue failure -T8693 Unspecified transplanted organ and tissue infection -T8699 Other complications of unspecified transplanted organ and tissue -T870X1 Complications of reattached (part of) right upper extremity -T870X2 Complications of reattached (part of) left upper extremity -T870X9 Complications of reattached (part of) unspecified upper extremity -T871X1 Complications of reattached (part of) right lower extremity -T871X2 Complications of reattached (part of) left lower extremity -T871X9 Complications of reattached (part of) unspecified lower extremity -T872 Complications of other reattached body part -T8730 Neuroma of amputation stump, unspecified extremity -T8731 Neuroma of amputation stump, right upper extremity -T8732 Neuroma of amputation stump, left upper extremity -T8733 Neuroma of amputation stump, right lower extremity -T8734 Neuroma of amputation stump, left lower extremity -T8740 Infection of amputation stump, unspecified extremity -T8741 Infection of amputation stump, right upper extremity -T8742 Infection of amputation stump, left upper extremity -T8743 Infection of amputation stump, right lower extremity -T8744 Infection of amputation stump, left lower extremity -T8750 Necrosis of amputation stump, unspecified extremity -T8751 Necrosis of amputation stump, right upper extremity -T8752 Necrosis of amputation stump, left upper extremity -T8753 Necrosis of amputation stump, right lower extremity -T8754 Necrosis of amputation stump, left lower extremity -T8781 Dehiscence of amputation stump -T8789 Other complications of amputation stump -T879 Unspecified complications of amputation stump -T880XXA Infection following immunization, initial encounter -T880XXD Infection following immunization, subsequent encounter -T880XXS Infection following immunization, sequela -T881XXA Other complications following immunization, not elsewhere classified, initial encounter -T881XXD Other complications following immunization, not elsewhere classified, subsequent encounter -T881XXS Other complications following immunization, not elsewhere classified, sequela -T882XXA Shock due to anesthesia, initial encounter -T882XXD Shock due to anesthesia, subsequent encounter -T882XXS Shock due to anesthesia, sequela -T883XXA Malignant hyperthermia due to anesthesia, initial encounter -T883XXD Malignant hyperthermia due to anesthesia, subsequent encounter -T883XXS Malignant hyperthermia due to anesthesia, sequela -T884XXA Failed or difficult intubation, initial encounter -T884XXD Failed or difficult intubation, subsequent encounter -T884XXS Failed or difficult intubation, sequela -T8851XA Hypothermia following anesthesia, initial encounter -T8851XD Hypothermia following anesthesia, subsequent encounter -T8851XS Hypothermia following anesthesia, sequela -T8852XA Failed moderate sedation during procedure, initial encounter -T8852XD Failed moderate sedation during procedure, subsequent encounter -T8852XS Failed moderate sedation during procedure, sequela -T8859XA Other complications of anesthesia, initial encounter -T8859XD Other complications of anesthesia, subsequent encounter -T8859XS Other complications of anesthesia, sequela -T886XXA Anaphylactic reaction due to adverse effect of correct drug or medicament properly administered, initial encounter -T886XXD Anaphylactic reaction due to adverse effect of correct drug or medicament properly administered, subsequent encounter -T886XXS Anaphylactic reaction due to adverse effect of correct drug or medicament properly administered, sequela -T887XXA Unspecified adverse effect of drug or medicament, initial encounter -T887XXD Unspecified adverse effect of drug or medicament, subsequent encounter -T887XXS Unspecified adverse effect of drug or medicament, sequela -T888XXA Other specified complications of surgical and medical care, not elsewhere classified, initial encounter -T888XXD Other specified complications of surgical and medical care, not elsewhere classified, subsequent encounter -T888XXS Other specified complications of surgical and medical care, not elsewhere classified, sequela -T889XXA Complication of surgical and medical care, unspecified, initial encounter -T889XXD Complication of surgical and medical care, unspecified, subsequent encounter -T889XXS Complication of surgical and medical care, unspecified, sequela -V0001XA Pedestrian on foot injured in collision with roller-skater, initial encounter -V0001XD Pedestrian on foot injured in collision with roller-skater, subsequent encounter -V0001XS Pedestrian on foot injured in collision with roller-skater, sequela -V0002XA Pedestrian on foot injured in collision with skateboarder, initial encounter -V0002XD Pedestrian on foot injured in collision with skateboarder, subsequent encounter -V0002XS Pedestrian on foot injured in collision with skateboarder, sequela -V0009XA Pedestrian on foot injured in collision with other pedestrian conveyance, initial encounter -V0009XD Pedestrian on foot injured in collision with other pedestrian conveyance, subsequent encounter -V0009XS Pedestrian on foot injured in collision with other pedestrian conveyance, sequela -V00111A Fall from in-line roller-skates, initial encounter -V00111D Fall from in-line roller-skates, subsequent encounter -V00111S Fall from in-line roller-skates, sequela -V00112A In-line roller-skater colliding with stationary object, initial encounter -V00112D In-line roller-skater colliding with stationary object, subsequent encounter -V00112S In-line roller-skater colliding with stationary object, sequela -V00118A Other in-line roller-skate accident, initial encounter -V00118D Other in-line roller-skate accident, subsequent encounter -V00118S Other in-line roller-skate accident, sequela -V00121A Fall from non-in-line roller-skates, initial encounter -V00121D Fall from non-in-line roller-skates, subsequent encounter -V00121S Fall from non-in-line roller-skates, sequela -V00122A Non-in-line roller-skater colliding with stationary object, initial encounter -V00122D Non-in-line roller-skater colliding with stationary object, subsequent encounter -V00122S Non-in-line roller-skater colliding with stationary object, sequela -V00128A Other non-in-line roller-skating accident, initial encounter -V00128D Other non-in-line roller-skating accident, subsequent encounter -V00128S Other non-in-line roller-skating accident, sequela -V00131A Fall from skateboard, initial encounter -V00131D Fall from skateboard, subsequent encounter -V00131S Fall from skateboard, sequela -V00132A Skateboarder colliding with stationary object, initial encounter -V00132D Skateboarder colliding with stationary object, subsequent encounter -V00132S Skateboarder colliding with stationary object, sequela -V00138A Other skateboard accident, initial encounter -V00138D Other skateboard accident, subsequent encounter -V00138S Other skateboard accident, sequela -V00141A Fall from scooter (nonmotorized), initial encounter -V00141D Fall from scooter (nonmotorized), subsequent encounter -V00141S Fall from scooter (nonmotorized), sequela -V00142A Scooter (nonmotorized) colliding with stationary object, initial encounter -V00142D Scooter (nonmotorized) colliding with stationary object, subsequent encounter -V00142S Scooter (nonmotorized) colliding with stationary object, sequela -V00148A Other scooter (nonmotorized) accident, initial encounter -V00148D Other scooter (nonmotorized) accident, subsequent encounter -V00148S Other scooter (nonmotorized) accident, sequela -V00151A Fall from heelies, initial encounter -V00151D Fall from heelies, subsequent encounter -V00151S Fall from heelies, sequela -V00152A Heelies colliding with stationary object, initial encounter -V00152D Heelies colliding with stationary object, subsequent encounter -V00152S Heelies colliding with stationary object, sequela -V00158A Other heelies accident, initial encounter -V00158D Other heelies accident, subsequent encounter -V00158S Other heelies accident, sequela -V00181A Fall from other rolling-type pedestrian conveyance, initial encounter -V00181D Fall from other rolling-type pedestrian conveyance, subsequent encounter -V00181S Fall from other rolling-type pedestrian conveyance, sequela -V00182A Pedestrian on other rolling-type pedestrian conveyance colliding with stationary object, initial encounter -V00182D Pedestrian on other rolling-type pedestrian conveyance colliding with stationary object, subsequent encounter -V00182S Pedestrian on other rolling-type pedestrian conveyance colliding with stationary object, sequela -V00188A Other accident on other rolling-type pedestrian conveyance, initial encounter -V00188D Other accident on other rolling-type pedestrian conveyance, subsequent encounter -V00188S Other accident on other rolling-type pedestrian conveyance, sequela -V00211A Fall from ice-skates, initial encounter -V00211D Fall from ice-skates, subsequent encounter -V00211S Fall from ice-skates, sequela -V00212A Ice-skater colliding with stationary object, initial encounter -V00212D Ice-skater colliding with stationary object, subsequent encounter -V00212S Ice-skater colliding with stationary object, sequela -V00218A Other ice-skates accident, initial encounter -V00218D Other ice-skates accident, subsequent encounter -V00218S Other ice-skates accident, sequela -V00221A Fall from sled, initial encounter -V00221D Fall from sled, subsequent encounter -V00221S Fall from sled, sequela -V00222A Sledder colliding with stationary object, initial encounter -V00222D Sledder colliding with stationary object, subsequent encounter -V00222S Sledder colliding with stationary object, sequela -V00228A Other sled accident, initial encounter -V00228D Other sled accident, subsequent encounter -V00228S Other sled accident, sequela -V00281A Fall from other gliding-type pedestrian conveyance, initial encounter -V00281D Fall from other gliding-type pedestrian conveyance, subsequent encounter -V00281S Fall from other gliding-type pedestrian conveyance, sequela -V00282A Pedestrian on other gliding-type pedestrian conveyance colliding with stationary object, initial encounter -V00282D Pedestrian on other gliding-type pedestrian conveyance colliding with stationary object, subsequent encounter -V00282S Pedestrian on other gliding-type pedestrian conveyance colliding with stationary object, sequela -V00288A Other accident on other gliding-type pedestrian conveyance, initial encounter -V00288D Other accident on other gliding-type pedestrian conveyance, subsequent encounter -V00288S Other accident on other gliding-type pedestrian conveyance, sequela -V00311A Fall from snowboard, initial encounter -V00311D Fall from snowboard, subsequent encounter -V00311S Fall from snowboard, sequela -V00312A Snowboarder colliding with stationary object, initial encounter -V00312D Snowboarder colliding with stationary object, subsequent encounter -V00312S Snowboarder colliding with stationary object, sequela -V00318A Other snowboard accident, initial encounter -V00318D Other snowboard accident, subsequent encounter -V00318S Other snowboard accident, sequela -V00321A Fall from snow-skis, initial encounter -V00321D Fall from snow-skis, subsequent encounter -V00321S Fall from snow-skis, sequela -V00322A Snow-skier colliding with stationary object, initial encounter -V00322D Snow-skier colliding with stationary object, subsequent encounter -V00322S Snow-skier colliding with stationary object, sequela -V00328A Other snow-ski accident, initial encounter -V00328D Other snow-ski accident, subsequent encounter -V00328S Other snow-ski accident, sequela -V00381A Fall from other flat-bottomed pedestrian conveyance, initial encounter -V00381D Fall from other flat-bottomed pedestrian conveyance, subsequent encounter -V00381S Fall from other flat-bottomed pedestrian conveyance, sequela -V00382A Pedestrian on other flat-bottomed pedestrian conveyance colliding with stationary object, initial encounter -V00382D Pedestrian on other flat-bottomed pedestrian conveyance colliding with stationary object, subsequent encounter -V00382S Pedestrian on other flat-bottomed pedestrian conveyance colliding with stationary object, sequela -V00388A Other accident on other flat-bottomed pedestrian conveyance, initial encounter -V00388D Other accident on other flat-bottomed pedestrian conveyance, subsequent encounter -V00388S Other accident on other flat-bottomed pedestrian conveyance, sequela -V00811A Fall from moving wheelchair (powered), initial encounter -V00811D Fall from moving wheelchair (powered), subsequent encounter -V00811S Fall from moving wheelchair (powered), sequela -V00812A Wheelchair (powered) colliding with stationary object, initial encounter -V00812D Wheelchair (powered) colliding with stationary object, subsequent encounter -V00812S Wheelchair (powered) colliding with stationary object, sequela -V00818A Other accident with wheelchair (powered), initial encounter -V00818D Other accident with wheelchair (powered), subsequent encounter -V00818S Other accident with wheelchair (powered), sequela -V00821A Fall from babystroller, initial encounter -V00821D Fall from babystroller, subsequent encounter -V00821S Fall from babystroller, sequela -V00822A Babystroller colliding with stationary object, initial encounter -V00822D Babystroller colliding with stationary object, subsequent encounter -V00822S Babystroller colliding with stationary object, sequela -V00828A Other accident with babystroller, initial encounter -V00828D Other accident with babystroller, subsequent encounter -V00828S Other accident with babystroller, sequela -V00831A Fall from motorized mobility scooter, initial encounter -V00831D Fall from motorized mobility scooter, subsequent encounter -V00831S Fall from motorized mobility scooter, sequela -V00832A Motorized mobility scooter colliding with stationary object, initial encounter -V00832D Motorized mobility scooter colliding with stationary object, subsequent encounter -V00832S Motorized mobility scooter colliding with stationary object, sequela -V00838A Other accident with motorized mobility scooter, initial encounter -V00838D Other accident with motorized mobility scooter, subsequent encounter -V00838S Other accident with motorized mobility scooter, sequela -V00891A Fall from other pedestrian conveyance, initial encounter -V00891D Fall from other pedestrian conveyance, subsequent encounter -V00891S Fall from other pedestrian conveyance, sequela -V00892A Pedestrian on other pedestrian conveyance colliding with stationary object, initial encounter -V00892D Pedestrian on other pedestrian conveyance colliding with stationary object, subsequent encounter -V00892S Pedestrian on other pedestrian conveyance colliding with stationary object, sequela -V00898A Other accident on other pedestrian conveyance, initial encounter -V00898D Other accident on other pedestrian conveyance, subsequent encounter -V00898S Other accident on other pedestrian conveyance, sequela -V0100XA Pedestrian on foot injured in collision with pedal cycle in nontraffic accident, initial encounter -V0100XD Pedestrian on foot injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V0100XS Pedestrian on foot injured in collision with pedal cycle in nontraffic accident, sequela -V0101XA Pedestrian on roller-skates injured in collision with pedal cycle in nontraffic accident, initial encounter -V0101XD Pedestrian on roller-skates injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V0101XS Pedestrian on roller-skates injured in collision with pedal cycle in nontraffic accident, sequela -V0102XA Pedestrian on skateboard injured in collision with pedal cycle in nontraffic accident, initial encounter -V0102XD Pedestrian on skateboard injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V0102XS Pedestrian on skateboard injured in collision with pedal cycle in nontraffic accident, sequela -V0109XA Pedestrian with other conveyance injured in collision with pedal cycle in nontraffic accident, initial encounter -V0109XD Pedestrian with other conveyance injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V0109XS Pedestrian with other conveyance injured in collision with pedal cycle in nontraffic accident, sequela -V0110XA Pedestrian on foot injured in collision with pedal cycle in traffic accident, initial encounter -V0110XD Pedestrian on foot injured in collision with pedal cycle in traffic accident, subsequent encounter -V0110XS Pedestrian on foot injured in collision with pedal cycle in traffic accident, sequela -V0111XA Pedestrian on roller-skates injured in collision with pedal cycle in traffic accident, initial encounter -V0111XD Pedestrian on roller-skates injured in collision with pedal cycle in traffic accident, subsequent encounter -V0111XS Pedestrian on roller-skates injured in collision with pedal cycle in traffic accident, sequela -V0112XA Pedestrian on skateboard injured in collision with pedal cycle in traffic accident, initial encounter -V0112XD Pedestrian on skateboard injured in collision with pedal cycle in traffic accident, subsequent encounter -V0112XS Pedestrian on skateboard injured in collision with pedal cycle in traffic accident, sequela -V0119XA Pedestrian with other conveyance injured in collision with pedal cycle in traffic accident, initial encounter -V0119XD Pedestrian with other conveyance injured in collision with pedal cycle in traffic accident, subsequent encounter -V0119XS Pedestrian with other conveyance injured in collision with pedal cycle in traffic accident, sequela -V0190XA Pedestrian on foot injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, initial encounter -V0190XD Pedestrian on foot injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0190XS Pedestrian on foot injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, sequela -V0191XA Pedestrian on roller-skates injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, initial encounter -V0191XD Pedestrian on roller-skates injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0191XS Pedestrian on roller-skates injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, sequela -V0192XA Pedestrian on skateboard injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, initial encounter -V0192XD Pedestrian on skateboard injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0192XS Pedestrian on skateboard injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, sequela -V0199XA Pedestrian with other conveyance injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, initial encounter -V0199XD Pedestrian with other conveyance injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0199XS Pedestrian with other conveyance injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, sequela -V0200XA Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V0200XD Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V0200XS Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V0201XA Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V0201XD Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V0201XS Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V0202XA Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V0202XD Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V0202XS Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V0209XA Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V0209XD Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V0209XS Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V0210XA Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V0210XD Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V0210XS Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V0211XA Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V0211XD Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V0211XS Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V0212XA Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V0212XD Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V0212XS Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V0219XA Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V0219XD Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V0219XS Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V0290XA Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0290XD Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0290XS Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0291XA Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0291XD Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0291XS Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0292XA Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0292XD Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0292XS Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0299XA Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0299XD Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0299XS Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0300XA Pedestrian on foot injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V0300XD Pedestrian on foot injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V0300XS Pedestrian on foot injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V0301XA Pedestrian on roller-skates injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V0301XD Pedestrian on roller-skates injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V0301XS Pedestrian on roller-skates injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V0302XA Pedestrian on skateboard injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V0302XD Pedestrian on skateboard injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V0302XS Pedestrian on skateboard injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V0309XA Pedestrian with other conveyance injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V0309XD Pedestrian with other conveyance injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V0309XS Pedestrian with other conveyance injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V0310XA Pedestrian on foot injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V0310XD Pedestrian on foot injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V0310XS Pedestrian on foot injured in collision with car, pick-up truck or van in traffic accident, sequela -V0311XA Pedestrian on roller-skates injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V0311XD Pedestrian on roller-skates injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V0311XS Pedestrian on roller-skates injured in collision with car, pick-up truck or van in traffic accident, sequela -V0312XA Pedestrian on skateboard injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V0312XD Pedestrian on skateboard injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V0312XS Pedestrian on skateboard injured in collision with car, pick-up truck or van in traffic accident, sequela -V0319XA Pedestrian with other conveyance injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V0319XD Pedestrian with other conveyance injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V0319XS Pedestrian with other conveyance injured in collision with car, pick-up truck or van in traffic accident, sequela -V0390XA Pedestrian on foot injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, initial encounter -V0390XD Pedestrian on foot injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, subsequent encounter -V0390XS Pedestrian on foot injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, sequela -V0391XA Pedestrian on roller-skates injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, initial encounter -V0391XD Pedestrian on roller-skates injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, subsequent encounter -V0391XS Pedestrian on roller-skates injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, sequela -V0392XA Pedestrian on skateboard injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, initial encounter -V0392XD Pedestrian on skateboard injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, subsequent encounter -V0392XS Pedestrian on skateboard injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, sequela -V0399XA Pedestrian with other conveyance injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, initial encounter -V0399XD Pedestrian with other conveyance injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, subsequent encounter -V0399XS Pedestrian with other conveyance injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, sequela -V0400XA Pedestrian on foot injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V0400XD Pedestrian on foot injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V0400XS Pedestrian on foot injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V0401XA Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V0401XD Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V0401XS Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V0402XA Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V0402XD Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V0402XS Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V0409XA Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V0409XD Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V0409XS Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V0410XA Pedestrian on foot injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V0410XD Pedestrian on foot injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V0410XS Pedestrian on foot injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V0411XA Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V0411XD Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V0411XS Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V0412XA Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V0412XD Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V0412XS Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V0419XA Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V0419XD Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V0419XS Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V0490XA Pedestrian on foot injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, initial encounter -V0490XD Pedestrian on foot injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, subsequent encounter -V0490XS Pedestrian on foot injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, sequela -V0491XA Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, initial encounter -V0491XD Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, subsequent encounter -V0491XS Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, sequela -V0492XA Pedestrian on skateboard injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, initial encounter -V0492XD Pedestrian on skateboard injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, subsequent encounter -V0492XS Pedestrian on skateboard injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, sequela -V0499XA Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, initial encounter -V0499XD Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, subsequent encounter -V0499XS Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, sequela -V0500XA Pedestrian on foot injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V0500XD Pedestrian on foot injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V0500XS Pedestrian on foot injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V0501XA Pedestrian on roller-skates injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V0501XD Pedestrian on roller-skates injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V0501XS Pedestrian on roller-skates injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V0502XA Pedestrian on skateboard injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V0502XD Pedestrian on skateboard injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V0502XS Pedestrian on skateboard injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V0509XA Pedestrian with other conveyance injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V0509XD Pedestrian with other conveyance injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V0509XS Pedestrian with other conveyance injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V0510XA Pedestrian on foot injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V0510XD Pedestrian on foot injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V0510XS Pedestrian on foot injured in collision with railway train or railway vehicle in traffic accident, sequela -V0511XA Pedestrian on roller-skates injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V0511XD Pedestrian on roller-skates injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V0511XS Pedestrian on roller-skates injured in collision with railway train or railway vehicle in traffic accident, sequela -V0512XA Pedestrian on skateboard injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V0512XD Pedestrian on skateboard injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V0512XS Pedestrian on skateboard injured in collision with railway train or railway vehicle in traffic accident, sequela -V0519XA Pedestrian with other conveyance injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V0519XD Pedestrian with other conveyance injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V0519XS Pedestrian with other conveyance injured in collision with railway train or railway vehicle in traffic accident, sequela -V0590XA Pedestrian on foot injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0590XD Pedestrian on foot injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0590XS Pedestrian on foot injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, sequela -V0591XA Pedestrian on roller-skates injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0591XD Pedestrian on roller-skates injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0591XS Pedestrian on roller-skates injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, sequela -V0592XA Pedestrian on skateboard injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0592XD Pedestrian on skateboard injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0592XS Pedestrian on skateboard injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, sequela -V0599XA Pedestrian with other conveyance injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0599XD Pedestrian with other conveyance injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0599XS Pedestrian with other conveyance injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, sequela -V0600XA Pedestrian on foot injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V0600XD Pedestrian on foot injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V0600XS Pedestrian on foot injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V0601XA Pedestrian on roller-skates injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V0601XD Pedestrian on roller-skates injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V0601XS Pedestrian on roller-skates injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V0602XA Pedestrian on skateboard injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V0602XD Pedestrian on skateboard injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V0602XS Pedestrian on skateboard injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V0609XA Pedestrian with other conveyance injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V0609XD Pedestrian with other conveyance injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V0609XS Pedestrian with other conveyance injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V0610XA Pedestrian on foot injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V0610XD Pedestrian on foot injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V0610XS Pedestrian on foot injured in collision with other nonmotor vehicle in traffic accident, sequela -V0611XA Pedestrian on roller-skates injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V0611XD Pedestrian on roller-skates injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V0611XS Pedestrian on roller-skates injured in collision with other nonmotor vehicle in traffic accident, sequela -V0612XA Pedestrian on skateboard injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V0612XD Pedestrian on skateboard injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V0612XS Pedestrian on skateboard injured in collision with other nonmotor vehicle in traffic accident, sequela -V0619XA Pedestrian with other conveyance injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V0619XD Pedestrian with other conveyance injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V0619XS Pedestrian with other conveyance injured in collision with other nonmotor vehicle in traffic accident, sequela -V0690XA Pedestrian on foot injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0690XD Pedestrian on foot injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0690XS Pedestrian on foot injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0691XA Pedestrian on roller-skates injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0691XD Pedestrian on roller-skates injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0691XS Pedestrian on roller-skates injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0692XA Pedestrian on skateboard injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0692XD Pedestrian on skateboard injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0692XS Pedestrian on skateboard injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0699XA Pedestrian with other conveyance injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0699XD Pedestrian with other conveyance injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0699XS Pedestrian with other conveyance injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0900XA Pedestrian injured in nontraffic accident involving unspecified motor vehicles, initial encounter -V0900XD Pedestrian injured in nontraffic accident involving unspecified motor vehicles, subsequent encounter -V0900XS Pedestrian injured in nontraffic accident involving unspecified motor vehicles, sequela -V0901XA Pedestrian injured in nontraffic accident involving military vehicle, initial encounter -V0901XD Pedestrian injured in nontraffic accident involving military vehicle, subsequent encounter -V0901XS Pedestrian injured in nontraffic accident involving military vehicle, sequela -V0909XA Pedestrian injured in nontraffic accident involving other motor vehicles, initial encounter -V0909XD Pedestrian injured in nontraffic accident involving other motor vehicles, subsequent encounter -V0909XS Pedestrian injured in nontraffic accident involving other motor vehicles, sequela -V091XXA Pedestrian injured in unspecified nontraffic accident, initial encounter -V091XXD Pedestrian injured in unspecified nontraffic accident, subsequent encounter -V091XXS Pedestrian injured in unspecified nontraffic accident, sequela -V0920XA Pedestrian injured in traffic accident involving unspecified motor vehicles, initial encounter -V0920XD Pedestrian injured in traffic accident involving unspecified motor vehicles, subsequent encounter -V0920XS Pedestrian injured in traffic accident involving unspecified motor vehicles, sequela -V0921XA Pedestrian injured in traffic accident involving military vehicle, initial encounter -V0921XD Pedestrian injured in traffic accident involving military vehicle, subsequent encounter -V0921XS Pedestrian injured in traffic accident involving military vehicle, sequela -V0929XA Pedestrian injured in traffic accident involving other motor vehicles, initial encounter -V0929XD Pedestrian injured in traffic accident involving other motor vehicles, subsequent encounter -V0929XS Pedestrian injured in traffic accident involving other motor vehicles, sequela -V093XXA Pedestrian injured in unspecified traffic accident, initial encounter -V093XXD Pedestrian injured in unspecified traffic accident, subsequent encounter -V093XXS Pedestrian injured in unspecified traffic accident, sequela -V099XXA Pedestrian injured in unspecified transport accident, initial encounter -V099XXD Pedestrian injured in unspecified transport accident, subsequent encounter -V099XXS Pedestrian injured in unspecified transport accident, sequela -V100XXA Pedal cycle driver injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V100XXD Pedal cycle driver injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V100XXS Pedal cycle driver injured in collision with pedestrian or animal in nontraffic accident, sequela -V101XXA Pedal cycle passenger injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V101XXD Pedal cycle passenger injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V101XXS Pedal cycle passenger injured in collision with pedestrian or animal in nontraffic accident, sequela -V102XXA Unspecified pedal cyclist injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V102XXD Unspecified pedal cyclist injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V102XXS Unspecified pedal cyclist injured in collision with pedestrian or animal in nontraffic accident, sequela -V103XXA Person boarding or alighting a pedal cycle injured in collision with pedestrian or animal, initial encounter -V103XXD Person boarding or alighting a pedal cycle injured in collision with pedestrian or animal, subsequent encounter -V103XXS Person boarding or alighting a pedal cycle injured in collision with pedestrian or animal, sequela -V104XXA Pedal cycle driver injured in collision with pedestrian or animal in traffic accident, initial encounter -V104XXD Pedal cycle driver injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V104XXS Pedal cycle driver injured in collision with pedestrian or animal in traffic accident, sequela -V105XXA Pedal cycle passenger injured in collision with pedestrian or animal in traffic accident, initial encounter -V105XXD Pedal cycle passenger injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V105XXS Pedal cycle passenger injured in collision with pedestrian or animal in traffic accident, sequela -V109XXA Unspecified pedal cyclist injured in collision with pedestrian or animal in traffic accident, initial encounter -V109XXD Unspecified pedal cyclist injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V109XXS Unspecified pedal cyclist injured in collision with pedestrian or animal in traffic accident, sequela -V110XXA Pedal cycle driver injured in collision with other pedal cycle in nontraffic accident, initial encounter -V110XXD Pedal cycle driver injured in collision with other pedal cycle in nontraffic accident, subsequent encounter -V110XXS Pedal cycle driver injured in collision with other pedal cycle in nontraffic accident, sequela -V111XXA Pedal cycle passenger injured in collision with other pedal cycle in nontraffic accident, initial encounter -V111XXD Pedal cycle passenger injured in collision with other pedal cycle in nontraffic accident, subsequent encounter -V111XXS Pedal cycle passenger injured in collision with other pedal cycle in nontraffic accident, sequela -V112XXA Unspecified pedal cyclist injured in collision with other pedal cycle in nontraffic accident, initial encounter -V112XXD Unspecified pedal cyclist injured in collision with other pedal cycle in nontraffic accident, subsequent encounter -V112XXS Unspecified pedal cyclist injured in collision with other pedal cycle in nontraffic accident, sequela -V113XXA Person boarding or alighting a pedal cycle injured in collision with other pedal cycle, initial encounter -V113XXD Person boarding or alighting a pedal cycle injured in collision with other pedal cycle, subsequent encounter -V113XXS Person boarding or alighting a pedal cycle injured in collision with other pedal cycle, sequela -V114XXA Pedal cycle driver injured in collision with other pedal cycle in traffic accident, initial encounter -V114XXD Pedal cycle driver injured in collision with other pedal cycle in traffic accident, subsequent encounter -V114XXS Pedal cycle driver injured in collision with other pedal cycle in traffic accident, sequela -V115XXA Pedal cycle passenger injured in collision with other pedal cycle in traffic accident, initial encounter -V115XXD Pedal cycle passenger injured in collision with other pedal cycle in traffic accident, subsequent encounter -V115XXS Pedal cycle passenger injured in collision with other pedal cycle in traffic accident, sequela -V119XXA Unspecified pedal cyclist injured in collision with other pedal cycle in traffic accident, initial encounter -V119XXD Unspecified pedal cyclist injured in collision with other pedal cycle in traffic accident, subsequent encounter -V119XXS Unspecified pedal cyclist injured in collision with other pedal cycle in traffic accident, sequela -V120XXA Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V120XXD Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V120XXS Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V121XXA Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V121XXD Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V121XXS Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V122XXA Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V122XXD Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V122XXS Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V123XXA Person boarding or alighting a pedal cycle injured in collision with two- or three-wheeled motor vehicle, initial encounter -V123XXD Person boarding or alighting a pedal cycle injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V123XXS Person boarding or alighting a pedal cycle injured in collision with two- or three-wheeled motor vehicle, sequela -V124XXA Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V124XXD Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V124XXS Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V125XXA Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V125XXD Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V125XXS Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V129XXA Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V129XXD Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V129XXS Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V130XXA Pedal cycle driver injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V130XXD Pedal cycle driver injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V130XXS Pedal cycle driver injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V131XXA Pedal cycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V131XXD Pedal cycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V131XXS Pedal cycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V132XXA Unspecified pedal cyclist injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V132XXD Unspecified pedal cyclist injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V132XXS Unspecified pedal cyclist injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V133XXA Person boarding or alighting a pedal cycle injured in collision with car, pick-up truck or van, initial encounter -V133XXD Person boarding or alighting a pedal cycle injured in collision with car, pick-up truck or van, subsequent encounter -V133XXS Person boarding or alighting a pedal cycle injured in collision with car, pick-up truck or van, sequela -V134XXA Pedal cycle driver injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V134XXD Pedal cycle driver injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V134XXS Pedal cycle driver injured in collision with car, pick-up truck or van in traffic accident, sequela -V135XXA Pedal cycle passenger injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V135XXD Pedal cycle passenger injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V135XXS Pedal cycle passenger injured in collision with car, pick-up truck or van in traffic accident, sequela -V139XXA Unspecified pedal cyclist injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V139XXD Unspecified pedal cyclist injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V139XXS Unspecified pedal cyclist injured in collision with car, pick-up truck or van in traffic accident, sequela -V140XXA Pedal cycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V140XXD Pedal cycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V140XXS Pedal cycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V141XXA Pedal cycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V141XXD Pedal cycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V141XXS Pedal cycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V142XXA Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V142XXD Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V142XXS Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V143XXA Person boarding or alighting a pedal cycle injured in collision with heavy transport vehicle or bus, initial encounter -V143XXD Person boarding or alighting a pedal cycle injured in collision with heavy transport vehicle or bus, subsequent encounter -V143XXS Person boarding or alighting a pedal cycle injured in collision with heavy transport vehicle or bus, sequela -V144XXA Pedal cycle driver injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V144XXD Pedal cycle driver injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V144XXS Pedal cycle driver injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V145XXA Pedal cycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V145XXD Pedal cycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V145XXS Pedal cycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V149XXA Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V149XXD Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V149XXS Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V150XXA Pedal cycle driver injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V150XXD Pedal cycle driver injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V150XXS Pedal cycle driver injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V151XXA Pedal cycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V151XXD Pedal cycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V151XXS Pedal cycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V152XXA Unspecified pedal cyclist injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V152XXD Unspecified pedal cyclist injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V152XXS Unspecified pedal cyclist injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V153XXA Person boarding or alighting a pedal cycle injured in collision with railway train or railway vehicle, initial encounter -V153XXD Person boarding or alighting a pedal cycle injured in collision with railway train or railway vehicle, subsequent encounter -V153XXS Person boarding or alighting a pedal cycle injured in collision with railway train or railway vehicle, sequela -V154XXA Pedal cycle driver injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V154XXD Pedal cycle driver injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V154XXS Pedal cycle driver injured in collision with railway train or railway vehicle in traffic accident, sequela -V155XXA Pedal cycle passenger injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V155XXD Pedal cycle passenger injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V155XXS Pedal cycle passenger injured in collision with railway train or railway vehicle in traffic accident, sequela -V159XXA Unspecified pedal cyclist injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V159XXD Unspecified pedal cyclist injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V159XXS Unspecified pedal cyclist injured in collision with railway train or railway vehicle in traffic accident, sequela -V160XXA Pedal cycle driver injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V160XXD Pedal cycle driver injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V160XXS Pedal cycle driver injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V161XXA Pedal cycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V161XXD Pedal cycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V161XXS Pedal cycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V162XXA Unspecified pedal cyclist injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V162XXD Unspecified pedal cyclist injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V162XXS Unspecified pedal cyclist injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V163XXA Person boarding or alighting a pedal cycle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V163XXD Person boarding or alighting a pedal cycle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V163XXS Person boarding or alighting a pedal cycle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V164XXA Pedal cycle driver injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V164XXD Pedal cycle driver injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V164XXS Pedal cycle driver injured in collision with other nonmotor vehicle in traffic accident, sequela -V165XXA Pedal cycle passenger injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V165XXD Pedal cycle passenger injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V165XXS Pedal cycle passenger injured in collision with other nonmotor vehicle in traffic accident, sequela -V169XXA Unspecified pedal cyclist injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V169XXD Unspecified pedal cyclist injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V169XXS Unspecified pedal cyclist injured in collision with other nonmotor vehicle in traffic accident, sequela -V170XXA Pedal cycle driver injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V170XXD Pedal cycle driver injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V170XXS Pedal cycle driver injured in collision with fixed or stationary object in nontraffic accident, sequela -V171XXA Pedal cycle passenger injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V171XXD Pedal cycle passenger injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V171XXS Pedal cycle passenger injured in collision with fixed or stationary object in nontraffic accident, sequela -V172XXA Unspecified pedal cyclist injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V172XXD Unspecified pedal cyclist injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V172XXS Unspecified pedal cyclist injured in collision with fixed or stationary object in nontraffic accident, sequela -V173XXA Person boarding or alighting a pedal cycle injured in collision with fixed or stationary object, initial encounter -V173XXD Person boarding or alighting a pedal cycle injured in collision with fixed or stationary object, subsequent encounter -V173XXS Person boarding or alighting a pedal cycle injured in collision with fixed or stationary object, sequela -V174XXA Pedal cycle driver injured in collision with fixed or stationary object in traffic accident, initial encounter -V174XXD Pedal cycle driver injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V174XXS Pedal cycle driver injured in collision with fixed or stationary object in traffic accident, sequela -V175XXA Pedal cycle passenger injured in collision with fixed or stationary object in traffic accident, initial encounter -V175XXD Pedal cycle passenger injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V175XXS Pedal cycle passenger injured in collision with fixed or stationary object in traffic accident, sequela -V179XXA Unspecified pedal cyclist injured in collision with fixed or stationary object in traffic accident, initial encounter -V179XXD Unspecified pedal cyclist injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V179XXS Unspecified pedal cyclist injured in collision with fixed or stationary object in traffic accident, sequela -V180XXA Pedal cycle driver injured in noncollision transport accident in nontraffic accident, initial encounter -V180XXD Pedal cycle driver injured in noncollision transport accident in nontraffic accident, subsequent encounter -V180XXS Pedal cycle driver injured in noncollision transport accident in nontraffic accident, sequela -V181XXA Pedal cycle passenger injured in noncollision transport accident in nontraffic accident, initial encounter -V181XXD Pedal cycle passenger injured in noncollision transport accident in nontraffic accident, subsequent encounter -V181XXS Pedal cycle passenger injured in noncollision transport accident in nontraffic accident, sequela -V182XXA Unspecified pedal cyclist injured in noncollision transport accident in nontraffic accident, initial encounter -V182XXD Unspecified pedal cyclist injured in noncollision transport accident in nontraffic accident, subsequent encounter -V182XXS Unspecified pedal cyclist injured in noncollision transport accident in nontraffic accident, sequela -V183XXA Person boarding or alighting a pedal cycle injured in noncollision transport accident, initial encounter -V183XXD Person boarding or alighting a pedal cycle injured in noncollision transport accident, subsequent encounter -V183XXS Person boarding or alighting a pedal cycle injured in noncollision transport accident, sequela -V184XXA Pedal cycle driver injured in noncollision transport accident in traffic accident, initial encounter -V184XXD Pedal cycle driver injured in noncollision transport accident in traffic accident, subsequent encounter -V184XXS Pedal cycle driver injured in noncollision transport accident in traffic accident, sequela -V185XXA Pedal cycle passenger injured in noncollision transport accident in traffic accident, initial encounter -V185XXD Pedal cycle passenger injured in noncollision transport accident in traffic accident, subsequent encounter -V185XXS Pedal cycle passenger injured in noncollision transport accident in traffic accident, sequela -V189XXA Unspecified pedal cyclist injured in noncollision transport accident in traffic accident, initial encounter -V189XXD Unspecified pedal cyclist injured in noncollision transport accident in traffic accident, subsequent encounter -V189XXS Unspecified pedal cyclist injured in noncollision transport accident in traffic accident, sequela -V1900XA Pedal cycle driver injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V1900XD Pedal cycle driver injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V1900XS Pedal cycle driver injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V1909XA Pedal cycle driver injured in collision with other motor vehicles in nontraffic accident, initial encounter -V1909XD Pedal cycle driver injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V1909XS Pedal cycle driver injured in collision with other motor vehicles in nontraffic accident, sequela -V1910XA Pedal cycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V1910XD Pedal cycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V1910XS Pedal cycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V1919XA Pedal cycle passenger injured in collision with other motor vehicles in nontraffic accident, initial encounter -V1919XD Pedal cycle passenger injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V1919XS Pedal cycle passenger injured in collision with other motor vehicles in nontraffic accident, sequela -V1920XA Unspecified pedal cyclist injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V1920XD Unspecified pedal cyclist injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V1920XS Unspecified pedal cyclist injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V1929XA Unspecified pedal cyclist injured in collision with other motor vehicles in nontraffic accident, initial encounter -V1929XD Unspecified pedal cyclist injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V1929XS Unspecified pedal cyclist injured in collision with other motor vehicles in nontraffic accident, sequela -V193XXA Pedal cyclist (driver) (passenger) injured in unspecified nontraffic accident, initial encounter -V193XXD Pedal cyclist (driver) (passenger) injured in unspecified nontraffic accident, subsequent encounter -V193XXS Pedal cyclist (driver) (passenger) injured in unspecified nontraffic accident, sequela -V1940XA Pedal cycle driver injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V1940XD Pedal cycle driver injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V1940XS Pedal cycle driver injured in collision with unspecified motor vehicles in traffic accident, sequela -V1949XA Pedal cycle driver injured in collision with other motor vehicles in traffic accident, initial encounter -V1949XD Pedal cycle driver injured in collision with other motor vehicles in traffic accident, subsequent encounter -V1949XS Pedal cycle driver injured in collision with other motor vehicles in traffic accident, sequela -V1950XA Pedal cycle passenger injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V1950XD Pedal cycle passenger injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V1950XS Pedal cycle passenger injured in collision with unspecified motor vehicles in traffic accident, sequela -V1959XA Pedal cycle passenger injured in collision with other motor vehicles in traffic accident, initial encounter -V1959XD Pedal cycle passenger injured in collision with other motor vehicles in traffic accident, subsequent encounter -V1959XS Pedal cycle passenger injured in collision with other motor vehicles in traffic accident, sequela -V1960XA Unspecified pedal cyclist injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V1960XD Unspecified pedal cyclist injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V1960XS Unspecified pedal cyclist injured in collision with unspecified motor vehicles in traffic accident, sequela -V1969XA Unspecified pedal cyclist injured in collision with other motor vehicles in traffic accident, initial encounter -V1969XD Unspecified pedal cyclist injured in collision with other motor vehicles in traffic accident, subsequent encounter -V1969XS Unspecified pedal cyclist injured in collision with other motor vehicles in traffic accident, sequela -V1981XA Pedal cyclist (driver) (passenger) injured in transport accident with military vehicle, initial encounter -V1981XD Pedal cyclist (driver) (passenger) injured in transport accident with military vehicle, subsequent encounter -V1981XS Pedal cyclist (driver) (passenger) injured in transport accident with military vehicle, sequela -V1988XA Pedal cyclist (driver) (passenger) injured in other specified transport accidents, initial encounter -V1988XD Pedal cyclist (driver) (passenger) injured in other specified transport accidents, subsequent encounter -V1988XS Pedal cyclist (driver) (passenger) injured in other specified transport accidents, sequela -V199XXA Pedal cyclist (driver) (passenger) injured in unspecified traffic accident, initial encounter -V199XXD Pedal cyclist (driver) (passenger) injured in unspecified traffic accident, subsequent encounter -V199XXS Pedal cyclist (driver) (passenger) injured in unspecified traffic accident, sequela -V200XXA Motorcycle driver injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V200XXD Motorcycle driver injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V200XXS Motorcycle driver injured in collision with pedestrian or animal in nontraffic accident, sequela -V201XXA Motorcycle passenger injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V201XXD Motorcycle passenger injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V201XXS Motorcycle passenger injured in collision with pedestrian or animal in nontraffic accident, sequela -V202XXA Unspecified motorcycle rider injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V202XXD Unspecified motorcycle rider injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V202XXS Unspecified motorcycle rider injured in collision with pedestrian or animal in nontraffic accident, sequela -V203XXA Person boarding or alighting a motorcycle injured in collision with pedestrian or animal, initial encounter -V203XXD Person boarding or alighting a motorcycle injured in collision with pedestrian or animal, subsequent encounter -V203XXS Person boarding or alighting a motorcycle injured in collision with pedestrian or animal, sequela -V204XXA Motorcycle driver injured in collision with pedestrian or animal in traffic accident, initial encounter -V204XXD Motorcycle driver injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V204XXS Motorcycle driver injured in collision with pedestrian or animal in traffic accident, sequela -V205XXA Motorcycle passenger injured in collision with pedestrian or animal in traffic accident, initial encounter -V205XXD Motorcycle passenger injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V205XXS Motorcycle passenger injured in collision with pedestrian or animal in traffic accident, sequela -V209XXA Unspecified motorcycle rider injured in collision with pedestrian or animal in traffic accident, initial encounter -V209XXD Unspecified motorcycle rider injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V209XXS Unspecified motorcycle rider injured in collision with pedestrian or animal in traffic accident, sequela -V210XXA Motorcycle driver injured in collision with pedal cycle in nontraffic accident, initial encounter -V210XXD Motorcycle driver injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V210XXS Motorcycle driver injured in collision with pedal cycle in nontraffic accident, sequela -V211XXA Motorcycle passenger injured in collision with pedal cycle in nontraffic accident, initial encounter -V211XXD Motorcycle passenger injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V211XXS Motorcycle passenger injured in collision with pedal cycle in nontraffic accident, sequela -V212XXA Unspecified motorcycle rider injured in collision with pedal cycle in nontraffic accident, initial encounter -V212XXD Unspecified motorcycle rider injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V212XXS Unspecified motorcycle rider injured in collision with pedal cycle in nontraffic accident, sequela -V213XXA Person boarding or alighting a motorcycle injured in collision with pedal cycle, initial encounter -V213XXD Person boarding or alighting a motorcycle injured in collision with pedal cycle, subsequent encounter -V213XXS Person boarding or alighting a motorcycle injured in collision with pedal cycle, sequela -V214XXA Motorcycle driver injured in collision with pedal cycle in traffic accident, initial encounter -V214XXD Motorcycle driver injured in collision with pedal cycle in traffic accident, subsequent encounter -V214XXS Motorcycle driver injured in collision with pedal cycle in traffic accident, sequela -V215XXA Motorcycle passenger injured in collision with pedal cycle in traffic accident, initial encounter -V215XXD Motorcycle passenger injured in collision with pedal cycle in traffic accident, subsequent encounter -V215XXS Motorcycle passenger injured in collision with pedal cycle in traffic accident, sequela -V219XXA Unspecified motorcycle rider injured in collision with pedal cycle in traffic accident, initial encounter -V219XXD Unspecified motorcycle rider injured in collision with pedal cycle in traffic accident, subsequent encounter -V219XXS Unspecified motorcycle rider injured in collision with pedal cycle in traffic accident, sequela -V220XXA Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V220XXD Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V220XXS Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V221XXA Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V221XXD Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V221XXS Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V222XXA Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V222XXD Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V222XXS Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V223XXA Person boarding or alighting a motorcycle injured in collision with two- or three-wheeled motor vehicle, initial encounter -V223XXD Person boarding or alighting a motorcycle injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V223XXS Person boarding or alighting a motorcycle injured in collision with two- or three-wheeled motor vehicle, sequela -V224XXA Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V224XXD Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V224XXS Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V225XXA Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V225XXD Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V225XXS Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V229XXA Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V229XXD Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V229XXS Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V230XXA Motorcycle driver injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V230XXD Motorcycle driver injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V230XXS Motorcycle driver injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V231XXA Motorcycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V231XXD Motorcycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V231XXS Motorcycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V232XXA Unspecified motorcycle rider injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V232XXD Unspecified motorcycle rider injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V232XXS Unspecified motorcycle rider injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V233XXA Person boarding or alighting a motorcycle injured in collision with car, pick-up truck or van, initial encounter -V233XXD Person boarding or alighting a motorcycle injured in collision with car, pick-up truck or van, subsequent encounter -V233XXS Person boarding or alighting a motorcycle injured in collision with car, pick-up truck or van, sequela -V234XXA Motorcycle driver injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V234XXD Motorcycle driver injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V234XXS Motorcycle driver injured in collision with car, pick-up truck or van in traffic accident, sequela -V235XXA Motorcycle passenger injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V235XXD Motorcycle passenger injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V235XXS Motorcycle passenger injured in collision with car, pick-up truck or van in traffic accident, sequela -V239XXA Unspecified motorcycle rider injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V239XXD Unspecified motorcycle rider injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V239XXS Unspecified motorcycle rider injured in collision with car, pick-up truck or van in traffic accident, sequela -V240XXA Motorcycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V240XXD Motorcycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V240XXS Motorcycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V241XXA Motorcycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V241XXD Motorcycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V241XXS Motorcycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V242XXA Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V242XXD Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V242XXS Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V243XXA Person boarding or alighting a motorcycle injured in collision with heavy transport vehicle or bus, initial encounter -V243XXD Person boarding or alighting a motorcycle injured in collision with heavy transport vehicle or bus, subsequent encounter -V243XXS Person boarding or alighting a motorcycle injured in collision with heavy transport vehicle or bus, sequela -V244XXA Motorcycle driver injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V244XXD Motorcycle driver injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V244XXS Motorcycle driver injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V245XXA Motorcycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V245XXD Motorcycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V245XXS Motorcycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V249XXA Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V249XXD Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V249XXS Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V250XXA Motorcycle driver injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V250XXD Motorcycle driver injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V250XXS Motorcycle driver injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V251XXA Motorcycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V251XXD Motorcycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V251XXS Motorcycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V252XXA Unspecified motorcycle rider injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V252XXD Unspecified motorcycle rider injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V252XXS Unspecified motorcycle rider injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V253XXA Person boarding or alighting a motorcycle injured in collision with railway train or railway vehicle, initial encounter -V253XXD Person boarding or alighting a motorcycle injured in collision with railway train or railway vehicle, subsequent encounter -V253XXS Person boarding or alighting a motorcycle injured in collision with railway train or railway vehicle, sequela -V254XXA Motorcycle driver injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V254XXD Motorcycle driver injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V254XXS Motorcycle driver injured in collision with railway train or railway vehicle in traffic accident, sequela -V255XXA Motorcycle passenger injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V255XXD Motorcycle passenger injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V255XXS Motorcycle passenger injured in collision with railway train or railway vehicle in traffic accident, sequela -V259XXA Unspecified motorcycle rider injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V259XXD Unspecified motorcycle rider injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V259XXS Unspecified motorcycle rider injured in collision with railway train or railway vehicle in traffic accident, sequela -V260XXA Motorcycle driver injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V260XXD Motorcycle driver injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V260XXS Motorcycle driver injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V261XXA Motorcycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V261XXD Motorcycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V261XXS Motorcycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V262XXA Unspecified motorcycle rider injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V262XXD Unspecified motorcycle rider injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V262XXS Unspecified motorcycle rider injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V263XXA Person boarding or alighting a motorcycle injured in collision with other nonmotor vehicle, initial encounter -V263XXD Person boarding or alighting a motorcycle injured in collision with other nonmotor vehicle, subsequent encounter -V263XXS Person boarding or alighting a motorcycle injured in collision with other nonmotor vehicle, sequela -V264XXA Motorcycle driver injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V264XXD Motorcycle driver injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V264XXS Motorcycle driver injured in collision with other nonmotor vehicle in traffic accident, sequela -V265XXA Motorcycle passenger injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V265XXD Motorcycle passenger injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V265XXS Motorcycle passenger injured in collision with other nonmotor vehicle in traffic accident, sequela -V269XXA Unspecified motorcycle rider injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V269XXD Unspecified motorcycle rider injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V269XXS Unspecified motorcycle rider injured in collision with other nonmotor vehicle in traffic accident, sequela -V270XXA Motorcycle driver injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V270XXD Motorcycle driver injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V270XXS Motorcycle driver injured in collision with fixed or stationary object in nontraffic accident, sequela -V271XXA Motorcycle passenger injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V271XXD Motorcycle passenger injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V271XXS Motorcycle passenger injured in collision with fixed or stationary object in nontraffic accident, sequela -V272XXA Unspecified motorcycle rider injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V272XXD Unspecified motorcycle rider injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V272XXS Unspecified motorcycle rider injured in collision with fixed or stationary object in nontraffic accident, sequela -V273XXA Person boarding or alighting a motorcycle injured in collision with fixed or stationary object, initial encounter -V273XXD Person boarding or alighting a motorcycle injured in collision with fixed or stationary object, subsequent encounter -V273XXS Person boarding or alighting a motorcycle injured in collision with fixed or stationary object, sequela -V274XXA Motorcycle driver injured in collision with fixed or stationary object in traffic accident, initial encounter -V274XXD Motorcycle driver injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V274XXS Motorcycle driver injured in collision with fixed or stationary object in traffic accident, sequela -V275XXA Motorcycle passenger injured in collision with fixed or stationary object in traffic accident, initial encounter -V275XXD Motorcycle passenger injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V275XXS Motorcycle passenger injured in collision with fixed or stationary object in traffic accident, sequela -V279XXA Unspecified motorcycle rider injured in collision with fixed or stationary object in traffic accident, initial encounter -V279XXD Unspecified motorcycle rider injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V279XXS Unspecified motorcycle rider injured in collision with fixed or stationary object in traffic accident, sequela -V280XXA Motorcycle driver injured in noncollision transport accident in nontraffic accident, initial encounter -V280XXD Motorcycle driver injured in noncollision transport accident in nontraffic accident, subsequent encounter -V280XXS Motorcycle driver injured in noncollision transport accident in nontraffic accident, sequela -V281XXA Motorcycle passenger injured in noncollision transport accident in nontraffic accident, initial encounter -V281XXD Motorcycle passenger injured in noncollision transport accident in nontraffic accident, subsequent encounter -V281XXS Motorcycle passenger injured in noncollision transport accident in nontraffic accident, sequela -V282XXA Unspecified motorcycle rider injured in noncollision transport accident in nontraffic accident, initial encounter -V282XXD Unspecified motorcycle rider injured in noncollision transport accident in nontraffic accident, subsequent encounter -V282XXS Unspecified motorcycle rider injured in noncollision transport accident in nontraffic accident, sequela -V283XXA Person boarding or alighting a motorcycle injured in noncollision transport accident, initial encounter -V283XXD Person boarding or alighting a motorcycle injured in noncollision transport accident, subsequent encounter -V283XXS Person boarding or alighting a motorcycle injured in noncollision transport accident, sequela -V284XXA Motorcycle driver injured in noncollision transport accident in traffic accident, initial encounter -V284XXD Motorcycle driver injured in noncollision transport accident in traffic accident, subsequent encounter -V284XXS Motorcycle driver injured in noncollision transport accident in traffic accident, sequela -V285XXA Motorcycle passenger injured in noncollision transport accident in traffic accident, initial encounter -V285XXD Motorcycle passenger injured in noncollision transport accident in traffic accident, subsequent encounter -V285XXS Motorcycle passenger injured in noncollision transport accident in traffic accident, sequela -V289XXA Unspecified motorcycle rider injured in noncollision transport accident in traffic accident, initial encounter -V289XXD Unspecified motorcycle rider injured in noncollision transport accident in traffic accident, subsequent encounter -V289XXS Unspecified motorcycle rider injured in noncollision transport accident in traffic accident, sequela -V2900XA Motorcycle driver injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V2900XD Motorcycle driver injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V2900XS Motorcycle driver injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V2909XA Motorcycle driver injured in collision with other motor vehicles in nontraffic accident, initial encounter -V2909XD Motorcycle driver injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V2909XS Motorcycle driver injured in collision with other motor vehicles in nontraffic accident, sequela -V2910XA Motorcycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V2910XD Motorcycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V2910XS Motorcycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V2919XA Motorcycle passenger injured in collision with other motor vehicles in nontraffic accident, initial encounter -V2919XD Motorcycle passenger injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V2919XS Motorcycle passenger injured in collision with other motor vehicles in nontraffic accident, sequela -V2920XA Unspecified motorcycle rider injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V2920XD Unspecified motorcycle rider injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V2920XS Unspecified motorcycle rider injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V2929XA Unspecified motorcycle rider injured in collision with other motor vehicles in nontraffic accident, initial encounter -V2929XD Unspecified motorcycle rider injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V2929XS Unspecified motorcycle rider injured in collision with other motor vehicles in nontraffic accident, sequela -V293XXA Motorcycle rider (driver) (passenger) injured in unspecified nontraffic accident, initial encounter -V293XXD Motorcycle rider (driver) (passenger) injured in unspecified nontraffic accident, subsequent encounter -V293XXS Motorcycle rider (driver) (passenger) injured in unspecified nontraffic accident, sequela -V2940XA Motorcycle driver injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V2940XD Motorcycle driver injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V2940XS Motorcycle driver injured in collision with unspecified motor vehicles in traffic accident, sequela -V2949XA Motorcycle driver injured in collision with other motor vehicles in traffic accident, initial encounter -V2949XD Motorcycle driver injured in collision with other motor vehicles in traffic accident, subsequent encounter -V2949XS Motorcycle driver injured in collision with other motor vehicles in traffic accident, sequela -V2950XA Motorcycle passenger injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V2950XD Motorcycle passenger injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V2950XS Motorcycle passenger injured in collision with unspecified motor vehicles in traffic accident, sequela -V2959XA Motorcycle passenger injured in collision with other motor vehicles in traffic accident, initial encounter -V2959XD Motorcycle passenger injured in collision with other motor vehicles in traffic accident, subsequent encounter -V2959XS Motorcycle passenger injured in collision with other motor vehicles in traffic accident, sequela -V2960XA Unspecified motorcycle rider injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V2960XD Unspecified motorcycle rider injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V2960XS Unspecified motorcycle rider injured in collision with unspecified motor vehicles in traffic accident, sequela -V2969XA Unspecified motorcycle rider injured in collision with other motor vehicles in traffic accident, initial encounter -V2969XD Unspecified motorcycle rider injured in collision with other motor vehicles in traffic accident, subsequent encounter -V2969XS Unspecified motorcycle rider injured in collision with other motor vehicles in traffic accident, sequela -V2981XA Motorcycle rider (driver) (passenger) injured in transport accident with military vehicle, initial encounter -V2981XD Motorcycle rider (driver) (passenger) injured in transport accident with military vehicle, subsequent encounter -V2981XS Motorcycle rider (driver) (passenger) injured in transport accident with military vehicle, sequela -V2988XA Motorcycle rider (driver) (passenger) injured in other specified transport accidents, initial encounter -V2988XD Motorcycle rider (driver) (passenger) injured in other specified transport accidents, subsequent encounter -V2988XS Motorcycle rider (driver) (passenger) injured in other specified transport accidents, sequela -V299XXA Motorcycle rider (driver) (passenger) injured in unspecified traffic accident, initial encounter -V299XXD Motorcycle rider (driver) (passenger) injured in unspecified traffic accident, subsequent encounter -V299XXS Motorcycle rider (driver) (passenger) injured in unspecified traffic accident, sequela -V300XXA Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V300XXD Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V300XXS Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V301XXA Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V301XXD Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V301XXS Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V302XXA Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V302XXD Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V302XXS Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V303XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V303XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V303XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V304XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedestrian or animal, initial encounter -V304XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedestrian or animal, subsequent encounter -V304XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedestrian or animal, sequela -V305XXA Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V305XXD Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V305XXS Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V306XXA Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V306XXD Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V306XXS Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V307XXA Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V307XXD Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V307XXS Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V309XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V309XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V309XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V310XXA Driver of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V310XXD Driver of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V310XXS Driver of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V311XXA Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V311XXD Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V311XXS Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V312XXA Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V312XXD Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V312XXS Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V313XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V313XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V313XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V314XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedal cycle, initial encounter -V314XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedal cycle, subsequent encounter -V314XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedal cycle, sequela -V315XXA Driver of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V315XXD Driver of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V315XXS Driver of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, sequela -V316XXA Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V316XXD Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V316XXS Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, sequela -V317XXA Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V317XXD Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V317XXS Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, sequela -V319XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V319XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V319XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, sequela -V320XXA Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V320XXD Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V320XXS Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V321XXA Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V321XXD Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V321XXS Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V322XXA Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V322XXD Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V322XXS Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V323XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V323XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V323XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V324XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle, initial encounter -V324XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V324XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle, sequela -V325XXA Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V325XXD Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V325XXS Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V326XXA Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V326XXD Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V326XXS Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V327XXA Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V327XXD Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V327XXS Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V329XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V329XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V329XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V330XXA Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V330XXD Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V330XXS Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V331XXA Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V331XXD Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V331XXS Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V332XXA Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V332XXD Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V332XXS Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V333XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V333XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V333XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V334XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with car, pick-up truck or van, initial encounter -V334XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with car, pick-up truck or van, subsequent encounter -V334XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with car, pick-up truck or van, sequela -V335XXA Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V335XXD Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V335XXS Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V336XXA Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V336XXD Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V336XXS Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V337XXA Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V337XXD Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V337XXS Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V339XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V339XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V339XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V340XXA Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V340XXD Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V340XXS Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V341XXA Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V341XXD Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V341XXS Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V342XXA Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V342XXD Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V342XXS Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V343XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V343XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V343XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V344XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus, initial encounter -V344XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus, subsequent encounter -V344XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus, sequela -V345XXA Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V345XXD Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V345XXS Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V346XXA Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V346XXD Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V346XXS Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V347XXA Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V347XXD Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V347XXS Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V349XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V349XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V349XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V350XXA Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V350XXD Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V350XXS Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V351XXA Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V351XXD Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V351XXS Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V352XXA Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V352XXD Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V352XXS Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V353XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V353XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V353XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V354XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with railway train or railway vehicle, initial encounter -V354XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with railway train or railway vehicle, subsequent encounter -V354XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with railway train or railway vehicle, sequela -V355XXA Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V355XXD Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V355XXS Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V356XXA Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V356XXD Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V356XXS Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V357XXA Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V357XXD Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V357XXS Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V359XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V359XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V359XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V360XXA Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V360XXD Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V360XXS Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V361XXA Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V361XXD Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V361XXS Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V362XXA Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V362XXD Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V362XXS Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V363XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V363XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V363XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V364XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with other nonmotor vehicle, initial encounter -V364XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with other nonmotor vehicle, subsequent encounter -V364XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with other nonmotor vehicle, sequela -V365XXA Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V365XXD Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V365XXS Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V366XXA Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V366XXD Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V366XXS Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V367XXA Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V367XXD Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V367XXS Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V369XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V369XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V369XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V370XXA Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V370XXD Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V370XXS Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V371XXA Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V371XXD Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V371XXS Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V372XXA Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V372XXD Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V372XXS Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V373XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V373XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V373XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V374XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with fixed or stationary object, initial encounter -V374XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with fixed or stationary object, subsequent encounter -V374XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with fixed or stationary object, sequela -V375XXA Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V375XXD Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V375XXS Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V376XXA Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V376XXD Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V376XXS Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V377XXA Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V377XXD Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V377XXS Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V379XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V379XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V379XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V380XXA Driver of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V380XXD Driver of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V380XXS Driver of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, sequela -V381XXA Passenger in three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V381XXD Passenger in three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V381XXS Passenger in three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, sequela -V382XXA Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V382XXD Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V382XXS Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, sequela -V383XXA Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V383XXD Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V383XXS Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, sequela -V384XXA Person boarding or alighting a three-wheeled motor vehicle injured in noncollision transport accident, initial encounter -V384XXD Person boarding or alighting a three-wheeled motor vehicle injured in noncollision transport accident, subsequent encounter -V384XXS Person boarding or alighting a three-wheeled motor vehicle injured in noncollision transport accident, sequela -V385XXA Driver of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, initial encounter -V385XXD Driver of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V385XXS Driver of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, sequela -V386XXA Passenger in three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, initial encounter -V386XXD Passenger in three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V386XXS Passenger in three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, sequela -V387XXA Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, initial encounter -V387XXD Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V387XXS Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, sequela -V389XXA Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, initial encounter -V389XXD Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V389XXS Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, sequela -V3900XA Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V3900XD Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V3900XS Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V3909XA Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V3909XD Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V3909XS Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V3910XA Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V3910XD Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V3910XS Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V3919XA Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V3919XD Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V3919XS Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V3920XA Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V3920XD Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V3920XS Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V3929XA Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V3929XD Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V3929XS Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V393XXA Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified nontraffic accident, initial encounter -V393XXD Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified nontraffic accident, subsequent encounter -V393XXS Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified nontraffic accident, sequela -V3940XA Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V3940XD Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V3940XS Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V3949XA Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V3949XD Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V3949XS Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, sequela -V3950XA Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V3950XD Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V3950XS Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V3959XA Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V3959XD Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V3959XS Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, sequela -V3960XA Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V3960XD Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V3960XS Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V3969XA Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V3969XD Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V3969XS Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, sequela -V3981XA Occupant (driver) (passenger) of three-wheeled motor vehicle injured in transport accident with military vehicle, initial encounter -V3981XD Occupant (driver) (passenger) of three-wheeled motor vehicle injured in transport accident with military vehicle, subsequent encounter -V3981XS Occupant (driver) (passenger) of three-wheeled motor vehicle injured in transport accident with military vehicle, sequela -V3989XA Occupant (driver) (passenger) of three-wheeled motor vehicle injured in other specified transport accidents, initial encounter -V3989XD Occupant (driver) (passenger) of three-wheeled motor vehicle injured in other specified transport accidents, subsequent encounter -V3989XS Occupant (driver) (passenger) of three-wheeled motor vehicle injured in other specified transport accidents, sequela -V399XXA Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified traffic accident, initial encounter -V399XXD Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified traffic accident, subsequent encounter -V399XXS Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified traffic accident, sequela -V400XXA Car driver injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V400XXD Car driver injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V400XXS Car driver injured in collision with pedestrian or animal in nontraffic accident, sequela -V401XXA Car passenger injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V401XXD Car passenger injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V401XXS Car passenger injured in collision with pedestrian or animal in nontraffic accident, sequela -V402XXA Person on outside of car injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V402XXD Person on outside of car injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V402XXS Person on outside of car injured in collision with pedestrian or animal in nontraffic accident, sequela -V403XXA Unspecified car occupant injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V403XXD Unspecified car occupant injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V403XXS Unspecified car occupant injured in collision with pedestrian or animal in nontraffic accident, sequela -V404XXA Person boarding or alighting a car injured in collision with pedestrian or animal, initial encounter -V404XXD Person boarding or alighting a car injured in collision with pedestrian or animal, subsequent encounter -V404XXS Person boarding or alighting a car injured in collision with pedestrian or animal, sequela -V405XXA Car driver injured in collision with pedestrian or animal in traffic accident, initial encounter -V405XXD Car driver injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V405XXS Car driver injured in collision with pedestrian or animal in traffic accident, sequela -V406XXA Car passenger injured in collision with pedestrian or animal in traffic accident, initial encounter -V406XXD Car passenger injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V406XXS Car passenger injured in collision with pedestrian or animal in traffic accident, sequela -V407XXA Person on outside of car injured in collision with pedestrian or animal in traffic accident, initial encounter -V407XXD Person on outside of car injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V407XXS Person on outside of car injured in collision with pedestrian or animal in traffic accident, sequela -V409XXA Unspecified car occupant injured in collision with pedestrian or animal in traffic accident, initial encounter -V409XXD Unspecified car occupant injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V409XXS Unspecified car occupant injured in collision with pedestrian or animal in traffic accident, sequela -V410XXA Car driver injured in collision with pedal cycle in nontraffic accident, initial encounter -V410XXD Car driver injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V410XXS Car driver injured in collision with pedal cycle in nontraffic accident, sequela -V411XXA Car passenger injured in collision with pedal cycle in nontraffic accident, initial encounter -V411XXD Car passenger injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V411XXS Car passenger injured in collision with pedal cycle in nontraffic accident, sequela -V412XXA Person on outside of car injured in collision with pedal cycle in nontraffic accident, initial encounter -V412XXD Person on outside of car injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V412XXS Person on outside of car injured in collision with pedal cycle in nontraffic accident, sequela -V413XXA Unspecified car occupant injured in collision with pedal cycle in nontraffic accident, initial encounter -V413XXD Unspecified car occupant injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V413XXS Unspecified car occupant injured in collision with pedal cycle in nontraffic accident, sequela -V414XXA Person boarding or alighting a car injured in collision with pedal cycle, initial encounter -V414XXD Person boarding or alighting a car injured in collision with pedal cycle, subsequent encounter -V414XXS Person boarding or alighting a car injured in collision with pedal cycle, sequela -V415XXA Car driver injured in collision with pedal cycle in traffic accident, initial encounter -V415XXD Car driver injured in collision with pedal cycle in traffic accident, subsequent encounter -V415XXS Car driver injured in collision with pedal cycle in traffic accident, sequela -V416XXA Car passenger injured in collision with pedal cycle in traffic accident, initial encounter -V416XXD Car passenger injured in collision with pedal cycle in traffic accident, subsequent encounter -V416XXS Car passenger injured in collision with pedal cycle in traffic accident, sequela -V417XXA Person on outside of car injured in collision with pedal cycle in traffic accident, initial encounter -V417XXD Person on outside of car injured in collision with pedal cycle in traffic accident, subsequent encounter -V417XXS Person on outside of car injured in collision with pedal cycle in traffic accident, sequela -V419XXA Unspecified car occupant injured in collision with pedal cycle in traffic accident, initial encounter -V419XXD Unspecified car occupant injured in collision with pedal cycle in traffic accident, subsequent encounter -V419XXS Unspecified car occupant injured in collision with pedal cycle in traffic accident, sequela -V420XXA Car driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V420XXD Car driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V420XXS Car driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V421XXA Car passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V421XXD Car passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V421XXS Car passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V422XXA Person on outside of car injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V422XXD Person on outside of car injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V422XXS Person on outside of car injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V423XXA Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V423XXD Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V423XXS Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V424XXA Person boarding or alighting a car injured in collision with two- or three-wheeled motor vehicle, initial encounter -V424XXD Person boarding or alighting a car injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V424XXS Person boarding or alighting a car injured in collision with two- or three-wheeled motor vehicle, sequela -V425XXA Car driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V425XXD Car driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V425XXS Car driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V426XXA Car passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V426XXD Car passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V426XXS Car passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V427XXA Person on outside of car injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V427XXD Person on outside of car injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V427XXS Person on outside of car injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V429XXA Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V429XXD Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V429XXS Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V4301XA Car driver injured in collision with sport utility vehicle in nontraffic accident, initial encounter -V4301XD Car driver injured in collision with sport utility vehicle in nontraffic accident, subsequent encounter -V4301XS Car driver injured in collision with sport utility vehicle in nontraffic accident, sequela -V4302XA Car driver injured in collision with other type car in nontraffic accident, initial encounter -V4302XD Car driver injured in collision with other type car in nontraffic accident, subsequent encounter -V4302XS Car driver injured in collision with other type car in nontraffic accident, sequela -V4303XA Car driver injured in collision with pick-up truck in nontraffic accident, initial encounter -V4303XD Car driver injured in collision with pick-up truck in nontraffic accident, subsequent encounter -V4303XS Car driver injured in collision with pick-up truck in nontraffic accident, sequela -V4304XA Car driver injured in collision with van in nontraffic accident, initial encounter -V4304XD Car driver injured in collision with van in nontraffic accident, subsequent encounter -V4304XS Car driver injured in collision with van in nontraffic accident, sequela -V4311XA Car passenger injured in collision with sport utility vehicle in nontraffic accident, initial encounter -V4311XD Car passenger injured in collision with sport utility vehicle in nontraffic accident, subsequent encounter -V4311XS Car passenger injured in collision with sport utility vehicle in nontraffic accident, sequela -V4312XA Car passenger injured in collision with other type car in nontraffic accident, initial encounter -V4312XD Car passenger injured in collision with other type car in nontraffic accident, subsequent encounter -V4312XS Car passenger injured in collision with other type car in nontraffic accident, sequela -V4313XA Car passenger injured in collision with pick-up in nontraffic accident, initial encounter -V4313XD Car passenger injured in collision with pick-up in nontraffic accident, subsequent encounter -V4313XS Car passenger injured in collision with pick-up in nontraffic accident, sequela -V4314XA Car passenger injured in collision with van in nontraffic accident, initial encounter -V4314XD Car passenger injured in collision with van in nontraffic accident, subsequent encounter -V4314XS Car passenger injured in collision with van in nontraffic accident, sequela -V4321XA Person on outside of car injured in collision with sport utility vehicle in nontraffic accident, initial encounter -V4321XD Person on outside of car injured in collision with sport utility vehicle in nontraffic accident, subsequent encounter -V4321XS Person on outside of car injured in collision with sport utility vehicle in nontraffic accident, sequela -V4322XA Person on outside of car injured in collision with other type car in nontraffic accident, initial encounter -V4322XD Person on outside of car injured in collision with other type car in nontraffic accident, subsequent encounter -V4322XS Person on outside of car injured in collision with other type car in nontraffic accident, sequela -V4323XA Person on outside of car injured in collision with pick-up truck in nontraffic accident, initial encounter -V4323XD Person on outside of car injured in collision with pick-up truck in nontraffic accident, subsequent encounter -V4323XS Person on outside of car injured in collision with pick-up truck in nontraffic accident, sequela -V4324XA Person on outside of car injured in collision with van in nontraffic accident, initial encounter -V4324XD Person on outside of car injured in collision with van in nontraffic accident, subsequent encounter -V4324XS Person on outside of car injured in collision with van in nontraffic accident, sequela -V4331XA Unspecified car occupant injured in collision with sport utility vehicle in nontraffic accident, initial encounter -V4331XD Unspecified car occupant injured in collision with sport utility vehicle in nontraffic accident, subsequent encounter -V4331XS Unspecified car occupant injured in collision with sport utility vehicle in nontraffic accident, sequela -V4332XA Unspecified car occupant injured in collision with other type car in nontraffic accident, initial encounter -V4332XD Unspecified car occupant injured in collision with other type car in nontraffic accident, subsequent encounter -V4332XS Unspecified car occupant injured in collision with other type car in nontraffic accident, sequela -V4333XA Unspecified car occupant injured in collision with pick-up truck in nontraffic accident, initial encounter -V4333XD Unspecified car occupant injured in collision with pick-up truck in nontraffic accident, subsequent encounter -V4333XS Unspecified car occupant injured in collision with pick-up truck in nontraffic accident, sequela -V4334XA Unspecified car occupant injured in collision with van in nontraffic accident, initial encounter -V4334XD Unspecified car occupant injured in collision with van in nontraffic accident, subsequent encounter -V4334XS Unspecified car occupant injured in collision with van in nontraffic accident, sequela -V4341XA Person boarding or alighting a car injured in collision with sport utility vehicle, initial encounter -V4341XD Person boarding or alighting a car injured in collision with sport utility vehicle, subsequent encounter -V4341XS Person boarding or alighting a car injured in collision with sport utility vehicle, sequela -V4342XA Person boarding or alighting a car injured in collision with other type car, initial encounter -V4342XD Person boarding or alighting a car injured in collision with other type car, subsequent encounter -V4342XS Person boarding or alighting a car injured in collision with other type car, sequela -V4343XA Person boarding or alighting a car injured in collision with pick-up truck, initial encounter -V4343XD Person boarding or alighting a car injured in collision with pick-up truck, subsequent encounter -V4343XS Person boarding or alighting a car injured in collision with pick-up truck, sequela -V4344XA Person boarding or alighting a car injured in collision with van, initial encounter -V4344XD Person boarding or alighting a car injured in collision with van, subsequent encounter -V4344XS Person boarding or alighting a car injured in collision with van, sequela -V4351XA Car driver injured in collision with sport utility vehicle in traffic accident, initial encounter -V4351XD Car driver injured in collision with sport utility vehicle in traffic accident, subsequent encounter -V4351XS Car driver injured in collision with sport utility vehicle in traffic accident, sequela -V4352XA Car driver injured in collision with other type car in traffic accident, initial encounter -V4352XD Car driver injured in collision with other type car in traffic accident, subsequent encounter -V4352XS Car driver injured in collision with other type car in traffic accident, sequela -V4353XA Car driver injured in collision with pick-up truck in traffic accident, initial encounter -V4353XD Car driver injured in collision with pick-up truck in traffic accident, subsequent encounter -V4353XS Car driver injured in collision with pick-up truck in traffic accident, sequela -V4354XA Car driver injured in collision with van in traffic accident, initial encounter -V4354XD Car driver injured in collision with van in traffic accident, subsequent encounter -V4354XS Car driver injured in collision with van in traffic accident, sequela -V4361XA Car passenger injured in collision with sport utility vehicle in traffic accident, initial encounter -V4361XD Car passenger injured in collision with sport utility vehicle in traffic accident, subsequent encounter -V4361XS Car passenger injured in collision with sport utility vehicle in traffic accident, sequela -V4362XA Car passenger injured in collision with other type car in traffic accident, initial encounter -V4362XD Car passenger injured in collision with other type car in traffic accident, subsequent encounter -V4362XS Car passenger injured in collision with other type car in traffic accident, sequela -V4363XA Car passenger injured in collision with pick-up truck in traffic accident, initial encounter -V4363XD Car passenger injured in collision with pick-up truck in traffic accident, subsequent encounter -V4363XS Car passenger injured in collision with pick-up truck in traffic accident, sequela -V4364XA Car passenger injured in collision with van in traffic accident, initial encounter -V4364XD Car passenger injured in collision with van in traffic accident, subsequent encounter -V4364XS Car passenger injured in collision with van in traffic accident, sequela -V4371XA Person on outside of car injured in collision with sport utility vehicle in traffic accident, initial encounter -V4371XD Person on outside of car injured in collision with sport utility vehicle in traffic accident, subsequent encounter -V4371XS Person on outside of car injured in collision with sport utility vehicle in traffic accident, sequela -V4372XA Person on outside of car injured in collision with other type car in traffic accident, initial encounter -V4372XD Person on outside of car injured in collision with other type car in traffic accident, subsequent encounter -V4372XS Person on outside of car injured in collision with other type car in traffic accident, sequela -V4373XA Person on outside of car injured in collision with pick-up truck in traffic accident, initial encounter -V4373XD Person on outside of car injured in collision with pick-up truck in traffic accident, subsequent encounter -V4373XS Person on outside of car injured in collision with pick-up truck in traffic accident, sequela -V4374XA Person on outside of car injured in collision with van in traffic accident, initial encounter -V4374XD Person on outside of car injured in collision with van in traffic accident, subsequent encounter -V4374XS Person on outside of car injured in collision with van in traffic accident, sequela -V4391XA Unspecified car occupant injured in collision with sport utility vehicle in traffic accident, initial encounter -V4391XD Unspecified car occupant injured in collision with sport utility vehicle in traffic accident, subsequent encounter -V4391XS Unspecified car occupant injured in collision with sport utility vehicle in traffic accident, sequela -V4392XA Unspecified car occupant injured in collision with other type car in traffic accident, initial encounter -V4392XD Unspecified car occupant injured in collision with other type car in traffic accident, subsequent encounter -V4392XS Unspecified car occupant injured in collision with other type car in traffic accident, sequela -V4393XA Unspecified car occupant injured in collision with pick-up truck in traffic accident, initial encounter -V4393XD Unspecified car occupant injured in collision with pick-up truck in traffic accident, subsequent encounter -V4393XS Unspecified car occupant injured in collision with pick-up truck in traffic accident, sequela -V4394XA Unspecified car occupant injured in collision with van in traffic accident, initial encounter -V4394XD Unspecified car occupant injured in collision with van in traffic accident, subsequent encounter -V4394XS Unspecified car occupant injured in collision with van in traffic accident, sequela -V440XXA Car driver injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V440XXD Car driver injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V440XXS Car driver injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V441XXA Car passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V441XXD Car passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V441XXS Car passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V442XXA Person on outside of car injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V442XXD Person on outside of car injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V442XXS Person on outside of car injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V443XXA Unspecified car occupant injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V443XXD Unspecified car occupant injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V443XXS Unspecified car occupant injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V444XXA Person boarding or alighting a car injured in collision with heavy transport vehicle or bus, initial encounter -V444XXD Person boarding or alighting a car injured in collision with heavy transport vehicle or bus, subsequent encounter -V444XXS Person boarding or alighting a car injured in collision with heavy transport vehicle or bus, sequela -V445XXA Car driver injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V445XXD Car driver injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V445XXS Car driver injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V446XXA Car passenger injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V446XXD Car passenger injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V446XXS Car passenger injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V447XXA Person on outside of car injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V447XXD Person on outside of car injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V447XXS Person on outside of car injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V449XXA Unspecified car occupant injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V449XXD Unspecified car occupant injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V449XXS Unspecified car occupant injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V450XXA Car driver injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V450XXD Car driver injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V450XXS Car driver injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V451XXA Car passenger injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V451XXD Car passenger injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V451XXS Car passenger injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V452XXA Person on outside of car injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V452XXD Person on outside of car injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V452XXS Person on outside of car injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V453XXA Unspecified car occupant injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V453XXD Unspecified car occupant injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V453XXS Unspecified car occupant injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V454XXA Person boarding or alighting a car injured in collision with railway train or railway vehicle, initial encounter -V454XXD Person boarding or alighting a car injured in collision with railway train or railway vehicle, subsequent encounter -V454XXS Person boarding or alighting a car injured in collision with railway train or railway vehicle, sequela -V455XXA Car driver injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V455XXD Car driver injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V455XXS Car driver injured in collision with railway train or railway vehicle in traffic accident, sequela -V456XXA Car passenger injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V456XXD Car passenger injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V456XXS Car passenger injured in collision with railway train or railway vehicle in traffic accident, sequela -V457XXA Person on outside of car injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V457XXD Person on outside of car injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V457XXS Person on outside of car injured in collision with railway train or railway vehicle in traffic accident, sequela -V459XXA Unspecified car occupant injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V459XXD Unspecified car occupant injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V459XXS Unspecified car occupant injured in collision with railway train or railway vehicle in traffic accident, sequela -V460XXA Car driver injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V460XXD Car driver injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V460XXS Car driver injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V461XXA Car passenger injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V461XXD Car passenger injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V461XXS Car passenger injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V462XXA Person on outside of car injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V462XXD Person on outside of car injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V462XXS Person on outside of car injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V463XXA Unspecified car occupant injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V463XXD Unspecified car occupant injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V463XXS Unspecified car occupant injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V464XXA Person boarding or alighting a car injured in collision with other nonmotor vehicle, initial encounter -V464XXD Person boarding or alighting a car injured in collision with other nonmotor vehicle, subsequent encounter -V464XXS Person boarding or alighting a car injured in collision with other nonmotor vehicle, sequela -V465XXA Car driver injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V465XXD Car driver injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V465XXS Car driver injured in collision with other nonmotor vehicle in traffic accident, sequela -V466XXA Car passenger injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V466XXD Car passenger injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V466XXS Car passenger injured in collision with other nonmotor vehicle in traffic accident, sequela -V467XXA Person on outside of car injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V467XXD Person on outside of car injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V467XXS Person on outside of car injured in collision with other nonmotor vehicle in traffic accident, sequela -V469XXA Unspecified car occupant injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V469XXD Unspecified car occupant injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V469XXS Unspecified car occupant injured in collision with other nonmotor vehicle in traffic accident, sequela -V4701XA Driver of sport utility vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V4701XD Driver of sport utility vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V4701XS Driver of sport utility vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V4702XA Driver of other type car injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V4702XD Driver of other type car injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V4702XS Driver of other type car injured in collision with fixed or stationary object in nontraffic accident, sequela -V4711XA Passenger of sport utility vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V4711XD Passenger of sport utility vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V4711XS Passenger of sport utility vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V4712XA Passenger of other type car injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V4712XD Passenger of other type car injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V4712XS Passenger of other type car injured in collision with fixed or stationary object in nontraffic accident, sequela -V472XXA Person on outside of car injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V472XXD Person on outside of car injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V472XXS Person on outside of car injured in collision with fixed or stationary object in nontraffic accident, sequela -V4731XA Unspecified occupant of sport utility vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V4731XD Unspecified occupant of sport utility vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V4731XS Unspecified occupant of sport utility vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V4732XA Unspecified occupant of other type car injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V4732XD Unspecified occupant of other type car injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V4732XS Unspecified occupant of other type car injured in collision with fixed or stationary object in nontraffic accident, sequela -V474XXA Person boarding or alighting a car injured in collision with fixed or stationary object, initial encounter -V474XXD Person boarding or alighting a car injured in collision with fixed or stationary object, subsequent encounter -V474XXS Person boarding or alighting a car injured in collision with fixed or stationary object, sequela -V4751XA Driver of sport utility vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V4751XD Driver of sport utility vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V4751XS Driver of sport utility vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V4752XA Driver of other type car injured in collision with fixed or stationary object in traffic accident, initial encounter -V4752XD Driver of other type car injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V4752XS Driver of other type car injured in collision with fixed or stationary object in traffic accident, sequela -V4761XA Passenger of sport utility vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V4761XD Passenger of sport utility vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V4761XS Passenger of sport utility vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V4762XA Passenger of other type car injured in collision with fixed or stationary object in traffic accident, initial encounter -V4762XD Passenger of other type car injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V4762XS Passenger of other type car injured in collision with fixed or stationary object in traffic accident, sequela -V477XXA Person on outside of car injured in collision with fixed or stationary object in traffic accident, initial encounter -V477XXD Person on outside of car injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V477XXS Person on outside of car injured in collision with fixed or stationary object in traffic accident, sequela -V4791XA Unspecified occupant of sport utility vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V4791XD Unspecified occupant of sport utility vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V4791XS Unspecified occupant of sport utility vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V4792XA Unspecified occupant of other type car injured in collision with fixed or stationary object in traffic accident, initial encounter -V4792XD Unspecified occupant of other type car injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V4792XS Unspecified occupant of other type car injured in collision with fixed or stationary object in traffic accident, sequela -V480XXA Car driver injured in noncollision transport accident in nontraffic accident, initial encounter -V480XXD Car driver injured in noncollision transport accident in nontraffic accident, subsequent encounter -V480XXS Car driver injured in noncollision transport accident in nontraffic accident, sequela -V481XXA Car passenger injured in noncollision transport accident in nontraffic accident, initial encounter -V481XXD Car passenger injured in noncollision transport accident in nontraffic accident, subsequent encounter -V481XXS Car passenger injured in noncollision transport accident in nontraffic accident, sequela -V482XXA Person on outside of car injured in noncollision transport accident in nontraffic accident, initial encounter -V482XXD Person on outside of car injured in noncollision transport accident in nontraffic accident, subsequent encounter -V482XXS Person on outside of car injured in noncollision transport accident in nontraffic accident, sequela -V483XXA Unspecified car occupant injured in noncollision transport accident in nontraffic accident, initial encounter -V483XXD Unspecified car occupant injured in noncollision transport accident in nontraffic accident, subsequent encounter -V483XXS Unspecified car occupant injured in noncollision transport accident in nontraffic accident, sequela -V484XXA Person boarding or alighting a car injured in noncollision transport accident, initial encounter -V484XXD Person boarding or alighting a car injured in noncollision transport accident, subsequent encounter -V484XXS Person boarding or alighting a car injured in noncollision transport accident, sequela -V485XXA Car driver injured in noncollision transport accident in traffic accident, initial encounter -V485XXD Car driver injured in noncollision transport accident in traffic accident, subsequent encounter -V485XXS Car driver injured in noncollision transport accident in traffic accident, sequela -V486XXA Car passenger injured in noncollision transport accident in traffic accident, initial encounter -V486XXD Car passenger injured in noncollision transport accident in traffic accident, subsequent encounter -V486XXS Car passenger injured in noncollision transport accident in traffic accident, sequela -V487XXA Person on outside of car injured in noncollision transport accident in traffic accident, initial encounter -V487XXD Person on outside of car injured in noncollision transport accident in traffic accident, subsequent encounter -V487XXS Person on outside of car injured in noncollision transport accident in traffic accident, sequela -V489XXA Unspecified car occupant injured in noncollision transport accident in traffic accident, initial encounter -V489XXD Unspecified car occupant injured in noncollision transport accident in traffic accident, subsequent encounter -V489XXS Unspecified car occupant injured in noncollision transport accident in traffic accident, sequela -V4900XA Driver injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V4900XD Driver injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V4900XS Driver injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V4909XA Driver injured in collision with other motor vehicles in nontraffic accident, initial encounter -V4909XD Driver injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V4909XS Driver injured in collision with other motor vehicles in nontraffic accident, sequela -V4910XA Passenger injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V4910XD Passenger injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V4910XS Passenger injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V4919XA Passenger injured in collision with other motor vehicles in nontraffic accident, initial encounter -V4919XD Passenger injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V4919XS Passenger injured in collision with other motor vehicles in nontraffic accident, sequela -V4920XA Unspecified car occupant injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V4920XD Unspecified car occupant injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V4920XS Unspecified car occupant injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V4929XA Unspecified car occupant injured in collision with other motor vehicles in nontraffic accident, initial encounter -V4929XD Unspecified car occupant injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V4929XS Unspecified car occupant injured in collision with other motor vehicles in nontraffic accident, sequela -V493XXA Car occupant (driver) (passenger) injured in unspecified nontraffic accident, initial encounter -V493XXD Car occupant (driver) (passenger) injured in unspecified nontraffic accident, subsequent encounter -V493XXS Car occupant (driver) (passenger) injured in unspecified nontraffic accident, sequela -V4940XA Driver injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V4940XD Driver injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V4940XS Driver injured in collision with unspecified motor vehicles in traffic accident, sequela -V4949XA Driver injured in collision with other motor vehicles in traffic accident, initial encounter -V4949XD Driver injured in collision with other motor vehicles in traffic accident, subsequent encounter -V4949XS Driver injured in collision with other motor vehicles in traffic accident, sequela -V4950XA Passenger injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V4950XD Passenger injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V4950XS Passenger injured in collision with unspecified motor vehicles in traffic accident, sequela -V4959XA Passenger injured in collision with other motor vehicles in traffic accident, initial encounter -V4959XD Passenger injured in collision with other motor vehicles in traffic accident, subsequent encounter -V4959XS Passenger injured in collision with other motor vehicles in traffic accident, sequela -V4960XA Unspecified car occupant injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V4960XD Unspecified car occupant injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V4960XS Unspecified car occupant injured in collision with unspecified motor vehicles in traffic accident, sequela -V4969XA Unspecified car occupant injured in collision with other motor vehicles in traffic accident, initial encounter -V4969XD Unspecified car occupant injured in collision with other motor vehicles in traffic accident, subsequent encounter -V4969XS Unspecified car occupant injured in collision with other motor vehicles in traffic accident, sequela -V4981XA Car occupant (driver) (passenger) injured in transport accident with military vehicle, initial encounter -V4981XD Car occupant (driver) (passenger) injured in transport accident with military vehicle, subsequent encounter -V4981XS Car occupant (driver) (passenger) injured in transport accident with military vehicle, sequela -V4988XA Car occupant (driver) (passenger) injured in other specified transport accidents, initial encounter -V4988XD Car occupant (driver) (passenger) injured in other specified transport accidents, subsequent encounter -V4988XS Car occupant (driver) (passenger) injured in other specified transport accidents, sequela -V499XXA Car occupant (driver) (passenger) injured in unspecified traffic accident, initial encounter -V499XXD Car occupant (driver) (passenger) injured in unspecified traffic accident, subsequent encounter -V499XXS Car occupant (driver) (passenger) injured in unspecified traffic accident, sequela -V500XXA Driver of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V500XXD Driver of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V500XXS Driver of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, sequela -V501XXA Passenger in pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V501XXD Passenger in pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V501XXS Passenger in pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, sequela -V502XXA Person on outside of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V502XXD Person on outside of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V502XXS Person on outside of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, sequela -V503XXA Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V503XXD Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V503XXS Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, sequela -V504XXA Person boarding or alighting a pick-up truck or van injured in collision with pedestrian or animal, initial encounter -V504XXD Person boarding or alighting a pick-up truck or van injured in collision with pedestrian or animal, subsequent encounter -V504XXS Person boarding or alighting a pick-up truck or van injured in collision with pedestrian or animal, sequela -V505XXA Driver of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, initial encounter -V505XXD Driver of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V505XXS Driver of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, sequela -V506XXA Passenger in pick-up truck or van injured in collision with pedestrian or animal in traffic accident, initial encounter -V506XXD Passenger in pick-up truck or van injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V506XXS Passenger in pick-up truck or van injured in collision with pedestrian or animal in traffic accident, sequela -V507XXA Person on outside of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, initial encounter -V507XXD Person on outside of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V507XXS Person on outside of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, sequela -V509XXA Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, initial encounter -V509XXD Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V509XXS Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, sequela -V510XXA Driver of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, initial encounter -V510XXD Driver of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V510XXS Driver of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, sequela -V511XXA Passenger in pick-up truck or van injured in collision with pedal cycle in nontraffic accident, initial encounter -V511XXD Passenger in pick-up truck or van injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V511XXS Passenger in pick-up truck or van injured in collision with pedal cycle in nontraffic accident, sequela -V512XXA Person on outside of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, initial encounter -V512XXD Person on outside of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V512XXS Person on outside of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, sequela -V513XXA Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, initial encounter -V513XXD Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V513XXS Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, sequela -V514XXA Person boarding or alighting a pick-up truck or van injured in collision with pedal cycle, initial encounter -V514XXD Person boarding or alighting a pick-up truck or van injured in collision with pedal cycle, subsequent encounter -V514XXS Person boarding or alighting a pick-up truck or van injured in collision with pedal cycle, sequela -V515XXA Driver of pick-up truck or van injured in collision with pedal cycle in traffic accident, initial encounter -V515XXD Driver of pick-up truck or van injured in collision with pedal cycle in traffic accident, subsequent encounter -V515XXS Driver of pick-up truck or van injured in collision with pedal cycle in traffic accident, sequela -V516XXA Passenger in pick-up truck or van injured in collision with pedal cycle in traffic accident, initial encounter -V516XXD Passenger in pick-up truck or van injured in collision with pedal cycle in traffic accident, subsequent encounter -V516XXS Passenger in pick-up truck or van injured in collision with pedal cycle in traffic accident, sequela -V517XXA Person on outside of pick-up truck or van injured in collision with pedal cycle in traffic accident, initial encounter -V517XXD Person on outside of pick-up truck or van injured in collision with pedal cycle in traffic accident, subsequent encounter -V517XXS Person on outside of pick-up truck or van injured in collision with pedal cycle in traffic accident, sequela -V519XXA Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in traffic accident, initial encounter -V519XXD Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in traffic accident, subsequent encounter -V519XXS Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in traffic accident, sequela -V520XXA Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V520XXD Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V520XXS Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V521XXA Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V521XXD Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V521XXS Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V522XXA Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V522XXD Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V522XXS Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V523XXA Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V523XXD Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V523XXS Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V524XXA Person boarding or alighting a pick-up truck or van injured in collision with two- or three-wheeled motor vehicle, initial encounter -V524XXD Person boarding or alighting a pick-up truck or van injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V524XXS Person boarding or alighting a pick-up truck or van injured in collision with two- or three-wheeled motor vehicle, sequela -V525XXA Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V525XXD Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V525XXS Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V526XXA Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V526XXD Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V526XXS Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V527XXA Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V527XXD Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V527XXS Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V529XXA Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V529XXD Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V529XXS Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V530XXA Driver of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V530XXD Driver of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V530XXS Driver of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V531XXA Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V531XXD Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V531XXS Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V532XXA Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V532XXD Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V532XXS Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V533XXA Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V533XXD Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V533XXS Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V534XXA Person boarding or alighting a pick-up truck or van injured in collision with car, pick-up truck or van, initial encounter -V534XXD Person boarding or alighting a pick-up truck or van injured in collision with car, pick-up truck or van, subsequent encounter -V534XXS Person boarding or alighting a pick-up truck or van injured in collision with car, pick-up truck or van, sequela -V535XXA Driver of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V535XXD Driver of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V535XXS Driver of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, sequela -V536XXA Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V536XXD Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V536XXS Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, sequela -V537XXA Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V537XXD Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V537XXS Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, sequela -V539XXA Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V539XXD Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V539XXS Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, sequela -V540XXA Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V540XXD Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V540XXS Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V541XXA Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V541XXD Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V541XXS Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V542XXA Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V542XXD Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V542XXS Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V543XXA Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V543XXD Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V543XXS Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V544XXA Person boarding or alighting a pick-up truck or van injured in collision with heavy transport vehicle or bus, initial encounter -V544XXD Person boarding or alighting a pick-up truck or van injured in collision with heavy transport vehicle or bus, subsequent encounter -V544XXS Person boarding or alighting a pick-up truck or van injured in collision with heavy transport vehicle or bus, sequela -V545XXA Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V545XXD Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V545XXS Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V546XXA Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V546XXD Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V546XXS Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V547XXA Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V547XXD Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V547XXS Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V549XXA Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V549XXD Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V549XXS Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V550XXA Driver of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V550XXD Driver of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V550XXS Driver of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V551XXA Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V551XXD Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V551XXS Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V552XXA Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V552XXD Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V552XXS Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V553XXA Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V553XXD Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V553XXS Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V554XXA Person boarding or alighting a pick-up truck or van injured in collision with railway train or railway vehicle, initial encounter -V554XXD Person boarding or alighting a pick-up truck or van injured in collision with railway train or railway vehicle, subsequent encounter -V554XXS Person boarding or alighting a pick-up truck or van injured in collision with railway train or railway vehicle, sequela -V555XXA Driver of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V555XXD Driver of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V555XXS Driver of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, sequela -V556XXA Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V556XXD Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V556XXS Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, sequela -V557XXA Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V557XXD Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V557XXS Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, sequela -V559XXA Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V559XXD Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V559XXS Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, sequela -V560XXA Driver of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V560XXD Driver of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V560XXS Driver of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V561XXA Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V561XXD Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V561XXS Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V562XXA Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V562XXD Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V562XXS Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V563XXA Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V563XXD Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V563XXS Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V564XXA Person boarding or alighting a pick-up truck or van injured in collision with other nonmotor vehicle, initial encounter -V564XXD Person boarding or alighting a pick-up truck or van injured in collision with other nonmotor vehicle, subsequent encounter -V564XXS Person boarding or alighting a pick-up truck or van injured in collision with other nonmotor vehicle, sequela -V565XXA Driver of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V565XXD Driver of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V565XXS Driver of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, sequela -V566XXA Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V566XXD Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V566XXS Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, sequela -V567XXA Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V567XXD Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V567XXS Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, sequela -V569XXA Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V569XXD Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V569XXS Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, sequela -V570XXA Driver of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V570XXD Driver of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V570XXS Driver of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, sequela -V571XXA Passenger in pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V571XXD Passenger in pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V571XXS Passenger in pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, sequela -V572XXA Person on outside of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V572XXD Person on outside of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V572XXS Person on outside of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, sequela -V573XXA Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V573XXD Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V573XXS Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, sequela -V574XXA Person boarding or alighting a pick-up truck or van injured in collision with fixed or stationary object, initial encounter -V574XXD Person boarding or alighting a pick-up truck or van injured in collision with fixed or stationary object, subsequent encounter -V574XXS Person boarding or alighting a pick-up truck or van injured in collision with fixed or stationary object, sequela -V575XXA Driver of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, initial encounter -V575XXD Driver of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V575XXS Driver of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, sequela -V576XXA Passenger in pick-up truck or van injured in collision with fixed or stationary object in traffic accident, initial encounter -V576XXD Passenger in pick-up truck or van injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V576XXS Passenger in pick-up truck or van injured in collision with fixed or stationary object in traffic accident, sequela -V577XXA Person on outside of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, initial encounter -V577XXD Person on outside of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V577XXS Person on outside of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, sequela -V579XXA Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, initial encounter -V579XXD Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V579XXS Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, sequela -V580XXA Driver of pick-up truck or van injured in noncollision transport accident in nontraffic accident, initial encounter -V580XXD Driver of pick-up truck or van injured in noncollision transport accident in nontraffic accident, subsequent encounter -V580XXS Driver of pick-up truck or van injured in noncollision transport accident in nontraffic accident, sequela -V581XXA Passenger in pick-up truck or van injured in noncollision transport accident in nontraffic accident, initial encounter -V581XXD Passenger in pick-up truck or van injured in noncollision transport accident in nontraffic accident, subsequent encounter -V581XXS Passenger in pick-up truck or van injured in noncollision transport accident in nontraffic accident, sequela -V582XXA Person on outside of pick-up truck or van injured in noncollision transport accident in nontraffic accident, initial encounter -V582XXD Person on outside of pick-up truck or van injured in noncollision transport accident in nontraffic accident, subsequent encounter -V582XXS Person on outside of pick-up truck or van injured in noncollision transport accident in nontraffic accident, sequela -V583XXA Unspecified occupant of pick-up truck or van injured in noncollision transport accident in nontraffic accident, initial encounter -V583XXD Unspecified occupant of pick-up truck or van injured in noncollision transport accident in nontraffic accident, subsequent encounter -V583XXS Unspecified occupant of pick-up truck or van injured in noncollision transport accident in nontraffic accident, sequela -V584XXA Person boarding or alighting a pick-up truck or van injured in noncollision transport accident, initial encounter -V584XXD Person boarding or alighting a pick-up truck or van injured in noncollision transport accident, subsequent encounter -V584XXS Person boarding or alighting a pick-up truck or van injured in noncollision transport accident, sequela -V585XXA Driver of pick-up truck or van injured in noncollision transport accident in traffic accident, initial encounter -V585XXD Driver of pick-up truck or van injured in noncollision transport accident in traffic accident, subsequent encounter -V585XXS Driver of pick-up truck or van injured in noncollision transport accident in traffic accident, sequela -V586XXA Passenger in pick-up truck or van injured in noncollision transport accident in traffic accident, initial encounter -V586XXD Passenger in pick-up truck or van injured in noncollision transport accident in traffic accident, subsequent encounter -V586XXS Passenger in pick-up truck or van injured in noncollision transport accident in traffic accident, sequela -V587XXA Person on outside of pick-up truck or van injured in noncollision transport accident in traffic accident, initial encounter -V587XXD Person on outside of pick-up truck or van injured in noncollision transport accident in traffic accident, subsequent encounter -V587XXS Person on outside of pick-up truck or van injured in noncollision transport accident in traffic accident, sequela -V589XXA Unspecified occupant of pick-up truck or van injured in noncollision transport accident in traffic accident, initial encounter -V589XXD Unspecified occupant of pick-up truck or van injured in noncollision transport accident in traffic accident, subsequent encounter -V589XXS Unspecified occupant of pick-up truck or van injured in noncollision transport accident in traffic accident, sequela -V5900XA Driver of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V5900XD Driver of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V5900XS Driver of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V5909XA Driver of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, initial encounter -V5909XD Driver of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V5909XS Driver of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, sequela -V5910XA Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V5910XD Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V5910XS Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V5919XA Passenger in pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, initial encounter -V5919XD Passenger in pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V5919XS Passenger in pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, sequela -V5920XA Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V5920XD Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V5920XS Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V5929XA Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, initial encounter -V5929XD Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V5929XS Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, sequela -V593XXA Occupant (driver) (passenger) of pick-up truck or van injured in unspecified nontraffic accident, initial encounter -V593XXD Occupant (driver) (passenger) of pick-up truck or van injured in unspecified nontraffic accident, subsequent encounter -V593XXS Occupant (driver) (passenger) of pick-up truck or van injured in unspecified nontraffic accident, sequela -V5940XA Driver of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V5940XD Driver of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V5940XS Driver of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, sequela -V5949XA Driver of pick-up truck or van injured in collision with other motor vehicles in traffic accident, initial encounter -V5949XD Driver of pick-up truck or van injured in collision with other motor vehicles in traffic accident, subsequent encounter -V5949XS Driver of pick-up truck or van injured in collision with other motor vehicles in traffic accident, sequela -V5950XA Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V5950XD Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V5950XS Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, sequela -V5959XA Passenger in pick-up truck or van injured in collision with other motor vehicles in traffic accident, initial encounter -V5959XD Passenger in pick-up truck or van injured in collision with other motor vehicles in traffic accident, subsequent encounter -V5959XS Passenger in pick-up truck or van injured in collision with other motor vehicles in traffic accident, sequela -V5960XA Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V5960XD Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V5960XS Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, sequela -V5969XA Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in traffic accident, initial encounter -V5969XD Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in traffic accident, subsequent encounter -V5969XS Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in traffic accident, sequela -V5981XA Occupant (driver) (passenger) of pick-up truck or van injured in transport accident with military vehicle, initial encounter -V5981XD Occupant (driver) (passenger) of pick-up truck or van injured in transport accident with military vehicle, subsequent encounter -V5981XS Occupant (driver) (passenger) of pick-up truck or van injured in transport accident with military vehicle, sequela -V5988XA Occupant (driver) (passenger) of pick-up truck or van injured in other specified transport accidents, initial encounter -V5988XD Occupant (driver) (passenger) of pick-up truck or van injured in other specified transport accidents, subsequent encounter -V5988XS Occupant (driver) (passenger) of pick-up truck or van injured in other specified transport accidents, sequela -V599XXA Occupant (driver) (passenger) of pick-up truck or van injured in unspecified traffic accident, initial encounter -V599XXD Occupant (driver) (passenger) of pick-up truck or van injured in unspecified traffic accident, subsequent encounter -V599XXS Occupant (driver) (passenger) of pick-up truck or van injured in unspecified traffic accident, sequela -V600XXA Driver of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V600XXD Driver of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V600XXS Driver of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V601XXA Passenger in heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V601XXD Passenger in heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V601XXS Passenger in heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V602XXA Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V602XXD Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V602XXS Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V603XXA Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V603XXD Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V603XXS Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V604XXA Person boarding or alighting a heavy transport vehicle injured in collision with pedestrian or animal, initial encounter -V604XXD Person boarding or alighting a heavy transport vehicle injured in collision with pedestrian or animal, subsequent encounter -V604XXS Person boarding or alighting a heavy transport vehicle injured in collision with pedestrian or animal, sequela -V605XXA Driver of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V605XXD Driver of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V605XXS Driver of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V606XXA Passenger in heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V606XXD Passenger in heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V606XXS Passenger in heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V607XXA Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V607XXD Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V607XXS Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V609XXA Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V609XXD Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V609XXS Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V610XXA Driver of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V610XXD Driver of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V610XXS Driver of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V611XXA Passenger in heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V611XXD Passenger in heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V611XXS Passenger in heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V612XXA Person on outside of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V612XXD Person on outside of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V612XXS Person on outside of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V613XXA Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V613XXD Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V613XXS Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V614XXA Person boarding or alighting a heavy transport vehicle injured in collision with pedal cycle while boarding or alighting, initial encounter -V614XXD Person boarding or alighting a heavy transport vehicle injured in collision with pedal cycle while boarding or alighting, subsequent encounter -V614XXS Person boarding or alighting a heavy transport vehicle injured in collision with pedal cycle while boarding or alighting, sequela -V615XXA Driver of heavy transport vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V615XXD Driver of heavy transport vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V615XXS Driver of heavy transport vehicle injured in collision with pedal cycle in traffic accident, sequela -V616XXA Passenger in heavy transport vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V616XXD Passenger in heavy transport vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V616XXS Passenger in heavy transport vehicle injured in collision with pedal cycle in traffic accident, sequela -V617XXA Person on outside of heavy transport vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V617XXD Person on outside of heavy transport vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V617XXS Person on outside of heavy transport vehicle injured in collision with pedal cycle in traffic accident, sequela -V619XXA Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V619XXD Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V619XXS Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in traffic accident, sequela -V620XXA Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V620XXD Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V620XXS Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V621XXA Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V621XXD Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V621XXS Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V622XXA Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V622XXD Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V622XXS Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V623XXA Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V623XXD Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V623XXS Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V624XXA Person boarding or alighting a heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle, initial encounter -V624XXD Person boarding or alighting a heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V624XXS Person boarding or alighting a heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle, sequela -V625XXA Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V625XXD Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V625XXS Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V626XXA Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V626XXD Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V626XXS Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V627XXA Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V627XXD Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V627XXS Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V629XXA Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V629XXD Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V629XXS Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V630XXA Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V630XXD Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V630XXS Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V631XXA Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V631XXD Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V631XXS Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V632XXA Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V632XXD Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V632XXS Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V633XXA Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V633XXD Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V633XXS Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V634XXA Person boarding or alighting a heavy transport vehicle injured in collision with car, pick-up truck or van, initial encounter -V634XXD Person boarding or alighting a heavy transport vehicle injured in collision with car, pick-up truck or van, subsequent encounter -V634XXS Person boarding or alighting a heavy transport vehicle injured in collision with car, pick-up truck or van, sequela -V635XXA Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V635XXD Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V635XXS Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V636XXA Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V636XXD Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V636XXS Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V637XXA Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V637XXD Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V637XXS Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V639XXA Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V639XXD Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V639XXS Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V640XXA Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V640XXD Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V640XXS Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V641XXA Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V641XXD Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V641XXS Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V642XXA Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V642XXD Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V642XXS Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V643XXA Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V643XXD Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V643XXS Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V644XXA Person boarding or alighting a heavy transport vehicle injured in collision with heavy transport vehicle or bus while boarding or alighting, initial encounter -V644XXD Person boarding or alighting a heavy transport vehicle injured in collision with heavy transport vehicle or bus while boarding or alighting, subsequent encounter -V644XXS Person boarding or alighting a heavy transport vehicle injured in collision with heavy transport vehicle or bus while boarding or alighting, sequela -V645XXA Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V645XXD Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V645XXS Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V646XXA Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V646XXD Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V646XXS Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V647XXA Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V647XXD Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V647XXS Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V649XXA Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V649XXD Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V649XXS Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V650XXA Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V650XXD Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V650XXS Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V651XXA Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V651XXD Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V651XXS Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V652XXA Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V652XXD Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V652XXS Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V653XXA Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V653XXD Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V653XXS Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V654XXA Person boarding or alighting a heavy transport vehicle injured in collision with railway train or railway vehicle, initial encounter -V654XXD Person boarding or alighting a heavy transport vehicle injured in collision with railway train or railway vehicle, subsequent encounter -V654XXS Person boarding or alighting a heavy transport vehicle injured in collision with railway train or railway vehicle, sequela -V655XXA Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V655XXD Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V655XXS Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V656XXA Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V656XXD Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V656XXS Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V657XXA Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V657XXD Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V657XXS Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V659XXA Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V659XXD Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V659XXS Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V660XXA Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V660XXD Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V660XXS Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V661XXA Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V661XXD Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V661XXS Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V662XXA Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V662XXD Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V662XXS Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V663XXA Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V663XXD Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V663XXS Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V664XXA Person boarding or alighting a heavy transport vehicle injured in collision with other nonmotor vehicle, initial encounter -V664XXD Person boarding or alighting a heavy transport vehicle injured in collision with other nonmotor vehicle, subsequent encounter -V664XXS Person boarding or alighting a heavy transport vehicle injured in collision with other nonmotor vehicle, sequela -V665XXA Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V665XXD Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V665XXS Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V666XXA Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V666XXD Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V666XXS Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V667XXA Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V667XXD Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V667XXS Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V669XXA Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V669XXD Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V669XXS Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V670XXA Driver of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V670XXD Driver of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V670XXS Driver of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V671XXA Passenger in heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V671XXD Passenger in heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V671XXS Passenger in heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V672XXA Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V672XXD Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V672XXS Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V673XXA Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V673XXD Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V673XXS Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V674XXA Person boarding or alighting a heavy transport vehicle injured in collision with fixed or stationary object, initial encounter -V674XXD Person boarding or alighting a heavy transport vehicle injured in collision with fixed or stationary object, subsequent encounter -V674XXS Person boarding or alighting a heavy transport vehicle injured in collision with fixed or stationary object, sequela -V675XXA Driver of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V675XXD Driver of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V675XXS Driver of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V676XXA Passenger in heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V676XXD Passenger in heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V676XXS Passenger in heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V677XXA Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V677XXD Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V677XXS Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V679XXA Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V679XXD Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V679XXS Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V680XXA Driver of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V680XXD Driver of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V680XXS Driver of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, sequela -V681XXA Passenger in heavy transport vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V681XXD Passenger in heavy transport vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V681XXS Passenger in heavy transport vehicle injured in noncollision transport accident in nontraffic accident, sequela -V682XXA Person on outside of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V682XXD Person on outside of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V682XXS Person on outside of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, sequela -V683XXA Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V683XXD Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V683XXS Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, sequela -V684XXA Person boarding or alighting a heavy transport vehicle injured in noncollision transport accident, initial encounter -V684XXD Person boarding or alighting a heavy transport vehicle injured in noncollision transport accident, subsequent encounter -V684XXS Person boarding or alighting a heavy transport vehicle injured in noncollision transport accident, sequela -V685XXA Driver of heavy transport vehicle injured in noncollision transport accident in traffic accident, initial encounter -V685XXD Driver of heavy transport vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V685XXS Driver of heavy transport vehicle injured in noncollision transport accident in traffic accident, sequela -V686XXA Passenger in heavy transport vehicle injured in noncollision transport accident in traffic accident, initial encounter -V686XXD Passenger in heavy transport vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V686XXS Passenger in heavy transport vehicle injured in noncollision transport accident in traffic accident, sequela -V687XXA Person on outside of heavy transport vehicle injured in noncollision transport accident in traffic accident, initial encounter -V687XXD Person on outside of heavy transport vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V687XXS Person on outside of heavy transport vehicle injured in noncollision transport accident in traffic accident, sequela -V689XXA Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in traffic accident, initial encounter -V689XXD Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V689XXS Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in traffic accident, sequela -V6900XA Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V6900XD Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V6900XS Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V6909XA Driver of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V6909XD Driver of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V6909XS Driver of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V6910XA Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V6910XD Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V6910XS Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V6919XA Passenger in heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V6919XD Passenger in heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V6919XS Passenger in heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V6920XA Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V6920XD Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V6920XS Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V6929XA Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V6929XD Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V6929XS Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V693XXA Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified nontraffic accident, initial encounter -V693XXD Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified nontraffic accident, subsequent encounter -V693XXS Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified nontraffic accident, sequela -V6940XA Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V6940XD Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V6940XS Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V6949XA Driver of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V6949XD Driver of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V6949XS Driver of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, sequela -V6950XA Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V6950XD Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V6950XS Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V6959XA Passenger in heavy transport vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V6959XD Passenger in heavy transport vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V6959XS Passenger in heavy transport vehicle injured in collision with other motor vehicles in traffic accident, sequela -V6960XA Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V6960XD Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V6960XS Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V6969XA Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V6969XD Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V6969XS Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, sequela -V6981XA Occupant (driver) (passenger) of heavy transport vehicle injured in transport accidents with military vehicle, initial encounter -V6981XD Occupant (driver) (passenger) of heavy transport vehicle injured in transport accidents with military vehicle, subsequent encounter -V6981XS Occupant (driver) (passenger) of heavy transport vehicle injured in transport accidents with military vehicle, sequela -V6988XA Occupant (driver) (passenger) of heavy transport vehicle injured in other specified transport accidents, initial encounter -V6988XD Occupant (driver) (passenger) of heavy transport vehicle injured in other specified transport accidents, subsequent encounter -V6988XS Occupant (driver) (passenger) of heavy transport vehicle injured in other specified transport accidents, sequela -V699XXA Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified traffic accident, initial encounter -V699XXD Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified traffic accident, subsequent encounter -V699XXS Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified traffic accident, sequela -V700XXA Driver of bus injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V700XXD Driver of bus injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V700XXS Driver of bus injured in collision with pedestrian or animal in nontraffic accident, sequela -V701XXA Passenger on bus injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V701XXD Passenger on bus injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V701XXS Passenger on bus injured in collision with pedestrian or animal in nontraffic accident, sequela -V702XXA Person on outside of bus injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V702XXD Person on outside of bus injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V702XXS Person on outside of bus injured in collision with pedestrian or animal in nontraffic accident, sequela -V703XXA Unspecified occupant of bus injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V703XXD Unspecified occupant of bus injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V703XXS Unspecified occupant of bus injured in collision with pedestrian or animal in nontraffic accident, sequela -V704XXA Person boarding or alighting from bus injured in collision with pedestrian or animal, initial encounter -V704XXD Person boarding or alighting from bus injured in collision with pedestrian or animal, subsequent encounter -V704XXS Person boarding or alighting from bus injured in collision with pedestrian or animal, sequela -V705XXA Driver of bus injured in collision with pedestrian or animal in traffic accident, initial encounter -V705XXD Driver of bus injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V705XXS Driver of bus injured in collision with pedestrian or animal in traffic accident, sequela -V706XXA Passenger on bus injured in collision with pedestrian or animal in traffic accident, initial encounter -V706XXD Passenger on bus injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V706XXS Passenger on bus injured in collision with pedestrian or animal in traffic accident, sequela -V707XXA Person on outside of bus injured in collision with pedestrian or animal in traffic accident, initial encounter -V707XXD Person on outside of bus injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V707XXS Person on outside of bus injured in collision with pedestrian or animal in traffic accident, sequela -V709XXA Unspecified occupant of bus injured in collision with pedestrian or animal in traffic accident, initial encounter -V709XXD Unspecified occupant of bus injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V709XXS Unspecified occupant of bus injured in collision with pedestrian or animal in traffic accident, sequela -V710XXA Driver of bus injured in collision with pedal cycle in nontraffic accident, initial encounter -V710XXD Driver of bus injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V710XXS Driver of bus injured in collision with pedal cycle in nontraffic accident, sequela -V711XXA Passenger on bus injured in collision with pedal cycle in nontraffic accident, initial encounter -V711XXD Passenger on bus injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V711XXS Passenger on bus injured in collision with pedal cycle in nontraffic accident, sequela -V712XXA Person on outside of bus injured in collision with pedal cycle in nontraffic accident, initial encounter -V712XXD Person on outside of bus injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V712XXS Person on outside of bus injured in collision with pedal cycle in nontraffic accident, sequela -V713XXA Unspecified occupant of bus injured in collision with pedal cycle in nontraffic accident, initial encounter -V713XXD Unspecified occupant of bus injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V713XXS Unspecified occupant of bus injured in collision with pedal cycle in nontraffic accident, sequela -V714XXA Person boarding or alighting from bus injured in collision with pedal cycle, initial encounter -V714XXD Person boarding or alighting from bus injured in collision with pedal cycle, subsequent encounter -V714XXS Person boarding or alighting from bus injured in collision with pedal cycle, sequela -V715XXA Driver of bus injured in collision with pedal cycle in traffic accident, initial encounter -V715XXD Driver of bus injured in collision with pedal cycle in traffic accident, subsequent encounter -V715XXS Driver of bus injured in collision with pedal cycle in traffic accident, sequela -V716XXA Passenger on bus injured in collision with pedal cycle in traffic accident, initial encounter -V716XXD Passenger on bus injured in collision with pedal cycle in traffic accident, subsequent encounter -V716XXS Passenger on bus injured in collision with pedal cycle in traffic accident, sequela -V717XXA Person on outside of bus injured in collision with pedal cycle in traffic accident, initial encounter -V717XXD Person on outside of bus injured in collision with pedal cycle in traffic accident, subsequent encounter -V717XXS Person on outside of bus injured in collision with pedal cycle in traffic accident, sequela -V719XXA Unspecified occupant of bus injured in collision with pedal cycle in traffic accident, initial encounter -V719XXD Unspecified occupant of bus injured in collision with pedal cycle in traffic accident, subsequent encounter -V719XXS Unspecified occupant of bus injured in collision with pedal cycle in traffic accident, sequela -V720XXA Driver of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V720XXD Driver of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V720XXS Driver of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V721XXA Passenger on bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V721XXD Passenger on bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V721XXS Passenger on bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V722XXA Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V722XXD Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V722XXS Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V723XXA Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V723XXD Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V723XXS Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V724XXA Person boarding or alighting from bus injured in collision with two- or three-wheeled motor vehicle, initial encounter -V724XXD Person boarding or alighting from bus injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V724XXS Person boarding or alighting from bus injured in collision with two- or three-wheeled motor vehicle, sequela -V725XXA Driver of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V725XXD Driver of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V725XXS Driver of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V726XXA Passenger on bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V726XXD Passenger on bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V726XXS Passenger on bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V727XXA Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V727XXD Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V727XXS Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V729XXA Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V729XXD Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V729XXS Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V730XXA Driver of bus injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V730XXD Driver of bus injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V730XXS Driver of bus injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V731XXA Passenger on bus injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V731XXD Passenger on bus injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V731XXS Passenger on bus injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V732XXA Person on outside of bus injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V732XXD Person on outside of bus injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V732XXS Person on outside of bus injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V733XXA Unspecified occupant of bus injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V733XXD Unspecified occupant of bus injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V733XXS Unspecified occupant of bus injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V734XXA Person boarding or alighting from bus injured in collision with car, pick-up truck or van, initial encounter -V734XXD Person boarding or alighting from bus injured in collision with car, pick-up truck or van, subsequent encounter -V734XXS Person boarding or alighting from bus injured in collision with car, pick-up truck or van, sequela -V735XXA Driver of bus injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V735XXD Driver of bus injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V735XXS Driver of bus injured in collision with car, pick-up truck or van in traffic accident, sequela -V736XXA Passenger on bus injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V736XXD Passenger on bus injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V736XXS Passenger on bus injured in collision with car, pick-up truck or van in traffic accident, sequela -V737XXA Person on outside of bus injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V737XXD Person on outside of bus injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V737XXS Person on outside of bus injured in collision with car, pick-up truck or van in traffic accident, sequela -V739XXA Unspecified occupant of bus injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V739XXD Unspecified occupant of bus injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V739XXS Unspecified occupant of bus injured in collision with car, pick-up truck or van in traffic accident, sequela -V740XXA Driver of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V740XXD Driver of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V740XXS Driver of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V741XXA Passenger on bus injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V741XXD Passenger on bus injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V741XXS Passenger on bus injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V742XXA Person on outside of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V742XXD Person on outside of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V742XXS Person on outside of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V743XXA Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V743XXD Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V743XXS Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V744XXA Person boarding or alighting from bus injured in collision with heavy transport vehicle or bus, initial encounter -V744XXD Person boarding or alighting from bus injured in collision with heavy transport vehicle or bus, subsequent encounter -V744XXS Person boarding or alighting from bus injured in collision with heavy transport vehicle or bus, sequela -V745XXA Driver of bus injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V745XXD Driver of bus injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V745XXS Driver of bus injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V746XXA Passenger on bus injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V746XXD Passenger on bus injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V746XXS Passenger on bus injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V747XXA Person on outside of bus injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V747XXD Person on outside of bus injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V747XXS Person on outside of bus injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V749XXA Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V749XXD Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V749XXS Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V750XXA Driver of bus injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V750XXD Driver of bus injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V750XXS Driver of bus injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V751XXA Passenger on bus injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V751XXD Passenger on bus injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V751XXS Passenger on bus injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V752XXA Person on outside of bus injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V752XXD Person on outside of bus injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V752XXS Person on outside of bus injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V753XXA Unspecified occupant of bus injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V753XXD Unspecified occupant of bus injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V753XXS Unspecified occupant of bus injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V754XXA Person boarding or alighting from bus injured in collision with railway train or railway vehicle, initial encounter -V754XXD Person boarding or alighting from bus injured in collision with railway train or railway vehicle, subsequent encounter -V754XXS Person boarding or alighting from bus injured in collision with railway train or railway vehicle, sequela -V755XXA Driver of bus injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V755XXD Driver of bus injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V755XXS Driver of bus injured in collision with railway train or railway vehicle in traffic accident, sequela -V756XXA Passenger on bus injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V756XXD Passenger on bus injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V756XXS Passenger on bus injured in collision with railway train or railway vehicle in traffic accident, sequela -V757XXA Person on outside of bus injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V757XXD Person on outside of bus injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V757XXS Person on outside of bus injured in collision with railway train or railway vehicle in traffic accident, sequela -V759XXA Unspecified occupant of bus injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V759XXD Unspecified occupant of bus injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V759XXS Unspecified occupant of bus injured in collision with railway train or railway vehicle in traffic accident, sequela -V760XXA Driver of bus injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V760XXD Driver of bus injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V760XXS Driver of bus injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V761XXA Passenger on bus injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V761XXD Passenger on bus injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V761XXS Passenger on bus injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V762XXA Person on outside of bus injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V762XXD Person on outside of bus injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V762XXS Person on outside of bus injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V763XXA Unspecified occupant of bus injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V763XXD Unspecified occupant of bus injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V763XXS Unspecified occupant of bus injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V764XXA Person boarding or alighting from bus injured in collision with other nonmotor vehicle, initial encounter -V764XXD Person boarding or alighting from bus injured in collision with other nonmotor vehicle, subsequent encounter -V764XXS Person boarding or alighting from bus injured in collision with other nonmotor vehicle, sequela -V765XXA Driver of bus injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V765XXD Driver of bus injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V765XXS Driver of bus injured in collision with other nonmotor vehicle in traffic accident, sequela -V766XXA Passenger on bus injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V766XXD Passenger on bus injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V766XXS Passenger on bus injured in collision with other nonmotor vehicle in traffic accident, sequela -V767XXA Person on outside of bus injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V767XXD Person on outside of bus injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V767XXS Person on outside of bus injured in collision with other nonmotor vehicle in traffic accident, sequela -V769XXA Unspecified occupant of bus injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V769XXD Unspecified occupant of bus injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V769XXS Unspecified occupant of bus injured in collision with other nonmotor vehicle in traffic accident, sequela -V770XXA Driver of bus injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V770XXD Driver of bus injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V770XXS Driver of bus injured in collision with fixed or stationary object in nontraffic accident, sequela -V771XXA Passenger on bus injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V771XXD Passenger on bus injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V771XXS Passenger on bus injured in collision with fixed or stationary object in nontraffic accident, sequela -V772XXA Person on outside of bus injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V772XXD Person on outside of bus injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V772XXS Person on outside of bus injured in collision with fixed or stationary object in nontraffic accident, sequela -V773XXA Unspecified occupant of bus injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V773XXD Unspecified occupant of bus injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V773XXS Unspecified occupant of bus injured in collision with fixed or stationary object in nontraffic accident, sequela -V774XXA Person boarding or alighting from bus injured in collision with fixed or stationary object, initial encounter -V774XXD Person boarding or alighting from bus injured in collision with fixed or stationary object, subsequent encounter -V774XXS Person boarding or alighting from bus injured in collision with fixed or stationary object, sequela -V775XXA Driver of bus injured in collision with fixed or stationary object in traffic accident, initial encounter -V775XXD Driver of bus injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V775XXS Driver of bus injured in collision with fixed or stationary object in traffic accident, sequela -V776XXA Passenger on bus injured in collision with fixed or stationary object in traffic accident, initial encounter -V776XXD Passenger on bus injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V776XXS Passenger on bus injured in collision with fixed or stationary object in traffic accident, sequela -V777XXA Person on outside of bus injured in collision with fixed or stationary object in traffic accident, initial encounter -V777XXD Person on outside of bus injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V777XXS Person on outside of bus injured in collision with fixed or stationary object in traffic accident, sequela -V779XXA Unspecified occupant of bus injured in collision with fixed or stationary object in traffic accident, initial encounter -V779XXD Unspecified occupant of bus injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V779XXS Unspecified occupant of bus injured in collision with fixed or stationary object in traffic accident, sequela -V780XXA Driver of bus injured in noncollision transport accident in nontraffic accident, initial encounter -V780XXD Driver of bus injured in noncollision transport accident in nontraffic accident, subsequent encounter -V780XXS Driver of bus injured in noncollision transport accident in nontraffic accident, sequela -V781XXA Passenger on bus injured in noncollision transport accident in nontraffic accident, initial encounter -V781XXD Passenger on bus injured in noncollision transport accident in nontraffic accident, subsequent encounter -V781XXS Passenger on bus injured in noncollision transport accident in nontraffic accident, sequela -V782XXA Person on outside of bus injured in noncollision transport accident in nontraffic accident, initial encounter -V782XXD Person on outside of bus injured in noncollision transport accident in nontraffic accident, subsequent encounter -V782XXS Person on outside of bus injured in noncollision transport accident in nontraffic accident, sequela -V783XXA Unspecified occupant of bus injured in noncollision transport accident in nontraffic accident, initial encounter -V783XXD Unspecified occupant of bus injured in noncollision transport accident in nontraffic accident, subsequent encounter -V783XXS Unspecified occupant of bus injured in noncollision transport accident in nontraffic accident, sequela -V784XXA Person boarding or alighting from bus injured in noncollision transport accident, initial encounter -V784XXD Person boarding or alighting from bus injured in noncollision transport accident, subsequent encounter -V784XXS Person boarding or alighting from bus injured in noncollision transport accident, sequela -V785XXA Driver of bus injured in noncollision transport accident in traffic accident, initial encounter -V785XXD Driver of bus injured in noncollision transport accident in traffic accident, subsequent encounter -V785XXS Driver of bus injured in noncollision transport accident in traffic accident, sequela -V786XXA Passenger on bus injured in noncollision transport accident in traffic accident, initial encounter -V786XXD Passenger on bus injured in noncollision transport accident in traffic accident, subsequent encounter -V786XXS Passenger on bus injured in noncollision transport accident in traffic accident, sequela -V787XXA Person on outside of bus injured in noncollision transport accident in traffic accident, initial encounter -V787XXD Person on outside of bus injured in noncollision transport accident in traffic accident, subsequent encounter -V787XXS Person on outside of bus injured in noncollision transport accident in traffic accident, sequela -V789XXA Unspecified occupant of bus injured in noncollision transport accident in traffic accident, initial encounter -V789XXD Unspecified occupant of bus injured in noncollision transport accident in traffic accident, subsequent encounter -V789XXS Unspecified occupant of bus injured in noncollision transport accident in traffic accident, sequela -V7900XA Driver of bus injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V7900XD Driver of bus injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V7900XS Driver of bus injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V7909XA Driver of bus injured in collision with other motor vehicles in nontraffic accident, initial encounter -V7909XD Driver of bus injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V7909XS Driver of bus injured in collision with other motor vehicles in nontraffic accident, sequela -V7910XA Passenger on bus injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V7910XD Passenger on bus injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V7910XS Passenger on bus injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V7919XA Passenger on bus injured in collision with other motor vehicles in nontraffic accident, initial encounter -V7919XD Passenger on bus injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V7919XS Passenger on bus injured in collision with other motor vehicles in nontraffic accident, sequela -V7920XA Unspecified bus occupant injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V7920XD Unspecified bus occupant injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V7920XS Unspecified bus occupant injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V7929XA Unspecified bus occupant injured in collision with other motor vehicles in nontraffic accident, initial encounter -V7929XD Unspecified bus occupant injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V7929XS Unspecified bus occupant injured in collision with other motor vehicles in nontraffic accident, sequela -V793XXA Bus occupant (driver) (passenger) injured in unspecified nontraffic accident, initial encounter -V793XXD Bus occupant (driver) (passenger) injured in unspecified nontraffic accident, subsequent encounter -V793XXS Bus occupant (driver) (passenger) injured in unspecified nontraffic accident, sequela -V7940XA Driver of bus injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V7940XD Driver of bus injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V7940XS Driver of bus injured in collision with unspecified motor vehicles in traffic accident, sequela -V7949XA Driver of bus injured in collision with other motor vehicles in traffic accident, initial encounter -V7949XD Driver of bus injured in collision with other motor vehicles in traffic accident, subsequent encounter -V7949XS Driver of bus injured in collision with other motor vehicles in traffic accident, sequela -V7950XA Passenger on bus injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V7950XD Passenger on bus injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V7950XS Passenger on bus injured in collision with unspecified motor vehicles in traffic accident, sequela -V7959XA Passenger on bus injured in collision with other motor vehicles in traffic accident, initial encounter -V7959XD Passenger on bus injured in collision with other motor vehicles in traffic accident, subsequent encounter -V7959XS Passenger on bus injured in collision with other motor vehicles in traffic accident, sequela -V7960XA Unspecified bus occupant injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V7960XD Unspecified bus occupant injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V7960XS Unspecified bus occupant injured in collision with unspecified motor vehicles in traffic accident, sequela -V7969XA Unspecified bus occupant injured in collision with other motor vehicles in traffic accident, initial encounter -V7969XD Unspecified bus occupant injured in collision with other motor vehicles in traffic accident, subsequent encounter -V7969XS Unspecified bus occupant injured in collision with other motor vehicles in traffic accident, sequela -V7981XA Bus occupant (driver) (passenger) injured in transport accidents with military vehicle, initial encounter -V7981XD Bus occupant (driver) (passenger) injured in transport accidents with military vehicle, subsequent encounter -V7981XS Bus occupant (driver) (passenger) injured in transport accidents with military vehicle, sequela -V7988XA Bus occupant (driver) (passenger) injured in other specified transport accidents, initial encounter -V7988XD Bus occupant (driver) (passenger) injured in other specified transport accidents, subsequent encounter -V7988XS Bus occupant (driver) (passenger) injured in other specified transport accidents, sequela -V799XXA Bus occupant (driver) (passenger) injured in unspecified traffic accident, initial encounter -V799XXD Bus occupant (driver) (passenger) injured in unspecified traffic accident, subsequent encounter -V799XXS Bus occupant (driver) (passenger) injured in unspecified traffic accident, sequela -V80010A Animal-rider injured by fall from or being thrown from horse in noncollision accident, initial encounter -V80010D Animal-rider injured by fall from or being thrown from horse in noncollision accident, subsequent encounter -V80010S Animal-rider injured by fall from or being thrown from horse in noncollision accident, sequela -V80018A Animal-rider injured by fall from or being thrown from other animal in noncollision accident, initial encounter -V80018D Animal-rider injured by fall from or being thrown from other animal in noncollision accident, subsequent encounter -V80018S Animal-rider injured by fall from or being thrown from other animal in noncollision accident, sequela -V8002XA Occupant of animal-drawn vehicle injured by fall from or being thrown from animal-drawn vehicle in noncollision accident, initial encounter -V8002XD Occupant of animal-drawn vehicle injured by fall from or being thrown from animal-drawn vehicle in noncollision accident, subsequent encounter -V8002XS Occupant of animal-drawn vehicle injured by fall from or being thrown from animal-drawn vehicle in noncollision accident, sequela -V8011XA Animal-rider injured in collision with pedestrian or animal, initial encounter -V8011XD Animal-rider injured in collision with pedestrian or animal, subsequent encounter -V8011XS Animal-rider injured in collision with pedestrian or animal, sequela -V8012XA Occupant of animal-drawn vehicle injured in collision with pedestrian or animal, initial encounter -V8012XD Occupant of animal-drawn vehicle injured in collision with pedestrian or animal, subsequent encounter -V8012XS Occupant of animal-drawn vehicle injured in collision with pedestrian or animal, sequela -V8021XA Animal-rider injured in collision with pedal cycle, initial encounter -V8021XD Animal-rider injured in collision with pedal cycle, subsequent encounter -V8021XS Animal-rider injured in collision with pedal cycle, sequela -V8022XA Occupant of animal-drawn vehicle injured in collision with pedal cycle, initial encounter -V8022XD Occupant of animal-drawn vehicle injured in collision with pedal cycle, subsequent encounter -V8022XS Occupant of animal-drawn vehicle injured in collision with pedal cycle, sequela -V8031XA Animal-rider injured in collision with two- or three-wheeled motor vehicle, initial encounter -V8031XD Animal-rider injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V8031XS Animal-rider injured in collision with two- or three-wheeled motor vehicle, sequela -V8032XA Occupant of animal-drawn vehicle injured in collision with two- or three-wheeled motor vehicle, initial encounter -V8032XD Occupant of animal-drawn vehicle injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V8032XS Occupant of animal-drawn vehicle injured in collision with two- or three-wheeled motor vehicle, sequela -V8041XA Animal-rider injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, initial encounter -V8041XD Animal-rider injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, subsequent encounter -V8041XS Animal-rider injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, sequela -V8042XA Occupant of animal-drawn vehicle injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, initial encounter -V8042XD Occupant of animal-drawn vehicle injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, subsequent encounter -V8042XS Occupant of animal-drawn vehicle injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, sequela -V8051XA Animal-rider injured in collision with other specified motor vehicle, initial encounter -V8051XD Animal-rider injured in collision with other specified motor vehicle, subsequent encounter -V8051XS Animal-rider injured in collision with other specified motor vehicle, sequela -V8052XA Occupant of animal-drawn vehicle injured in collision with other specified motor vehicle, initial encounter -V8052XD Occupant of animal-drawn vehicle injured in collision with other specified motor vehicle, subsequent encounter -V8052XS Occupant of animal-drawn vehicle injured in collision with other specified motor vehicle, sequela -V8061XA Animal-rider injured in collision with railway train or railway vehicle, initial encounter -V8061XD Animal-rider injured in collision with railway train or railway vehicle, subsequent encounter -V8061XS Animal-rider injured in collision with railway train or railway vehicle, sequela -V8062XA Occupant of animal-drawn vehicle injured in collision with railway train or railway vehicle, initial encounter -V8062XD Occupant of animal-drawn vehicle injured in collision with railway train or railway vehicle, subsequent encounter -V8062XS Occupant of animal-drawn vehicle injured in collision with railway train or railway vehicle, sequela -V80710A Animal-rider injured in collision with other animal being ridden, initial encounter -V80710D Animal-rider injured in collision with other animal being ridden, subsequent encounter -V80710S Animal-rider injured in collision with other animal being ridden, sequela -V80711A Occupant of animal-drawn vehicle injured in collision with animal being ridden, initial encounter -V80711D Occupant of animal-drawn vehicle injured in collision with animal being ridden, subsequent encounter -V80711S Occupant of animal-drawn vehicle injured in collision with animal being ridden, sequela -V80720A Animal-rider injured in collision with animal-drawn vehicle, initial encounter -V80720D Animal-rider injured in collision with animal-drawn vehicle, subsequent encounter -V80720S Animal-rider injured in collision with animal-drawn vehicle, sequela -V80721A Occupant of animal-drawn vehicle injured in collision with other animal-drawn vehicle, initial encounter -V80721D Occupant of animal-drawn vehicle injured in collision with other animal-drawn vehicle, subsequent encounter -V80721S Occupant of animal-drawn vehicle injured in collision with other animal-drawn vehicle, sequela -V80730A Animal-rider injured in collision with streetcar, initial encounter -V80730D Animal-rider injured in collision with streetcar, subsequent encounter -V80730S Animal-rider injured in collision with streetcar, sequela -V80731A Occupant of animal-drawn vehicle injured in collision with streetcar, initial encounter -V80731D Occupant of animal-drawn vehicle injured in collision with streetcar, subsequent encounter -V80731S Occupant of animal-drawn vehicle injured in collision with streetcar, sequela -V80790A Animal-rider injured in collision with other nonmotor vehicles, initial encounter -V80790D Animal-rider injured in collision with other nonmotor vehicles, subsequent encounter -V80790S Animal-rider injured in collision with other nonmotor vehicles, sequela -V80791A Occupant of animal-drawn vehicle injured in collision with other nonmotor vehicles, initial encounter -V80791D Occupant of animal-drawn vehicle injured in collision with other nonmotor vehicles, subsequent encounter -V80791S Occupant of animal-drawn vehicle injured in collision with other nonmotor vehicles, sequela -V8081XA Animal-rider injured in collision with fixed or stationary object, initial encounter -V8081XD Animal-rider injured in collision with fixed or stationary object, subsequent encounter -V8081XS Animal-rider injured in collision with fixed or stationary object, sequela -V8082XA Occupant of animal-drawn vehicle injured in collision with fixed or stationary object, initial encounter -V8082XD Occupant of animal-drawn vehicle injured in collision with fixed or stationary object, subsequent encounter -V8082XS Occupant of animal-drawn vehicle injured in collision with fixed or stationary object, sequela -V80910A Animal-rider injured in transport accident with military vehicle, initial encounter -V80910D Animal-rider injured in transport accident with military vehicle, subsequent encounter -V80910S Animal-rider injured in transport accident with military vehicle, sequela -V80918A Animal-rider injured in other transport accident, initial encounter -V80918D Animal-rider injured in other transport accident, subsequent encounter -V80918S Animal-rider injured in other transport accident, sequela -V80919A Animal-rider injured in unspecified transport accident, initial encounter -V80919D Animal-rider injured in unspecified transport accident, subsequent encounter -V80919S Animal-rider injured in unspecified transport accident, sequela -V80920A Occupant of animal-drawn vehicle injured in transport accident with military vehicle, initial encounter -V80920D Occupant of animal-drawn vehicle injured in transport accident with military vehicle, subsequent encounter -V80920S Occupant of animal-drawn vehicle injured in transport accident with military vehicle, sequela -V80928A Occupant of animal-drawn vehicle injured in other transport accident, initial encounter -V80928D Occupant of animal-drawn vehicle injured in other transport accident, subsequent encounter -V80928S Occupant of animal-drawn vehicle injured in other transport accident, sequela -V80929A Occupant of animal-drawn vehicle injured in unspecified transport accident, initial encounter -V80929D Occupant of animal-drawn vehicle injured in unspecified transport accident, subsequent encounter -V80929S Occupant of animal-drawn vehicle injured in unspecified transport accident, sequela -V810XXA Occupant of railway train or railway vehicle injured in collision with motor vehicle in nontraffic accident, initial encounter -V810XXD Occupant of railway train or railway vehicle injured in collision with motor vehicle in nontraffic accident, subsequent encounter -V810XXS Occupant of railway train or railway vehicle injured in collision with motor vehicle in nontraffic accident, sequela -V811XXA Occupant of railway train or railway vehicle injured in collision with motor vehicle in traffic accident, initial encounter -V811XXD Occupant of railway train or railway vehicle injured in collision with motor vehicle in traffic accident, subsequent encounter -V811XXS Occupant of railway train or railway vehicle injured in collision with motor vehicle in traffic accident, sequela -V812XXA Occupant of railway train or railway vehicle injured in collision with or hit by rolling stock, initial encounter -V812XXD Occupant of railway train or railway vehicle injured in collision with or hit by rolling stock, subsequent encounter -V812XXS Occupant of railway train or railway vehicle injured in collision with or hit by rolling stock, sequela -V813XXA Occupant of railway train or railway vehicle injured in collision with other object, initial encounter -V813XXD Occupant of railway train or railway vehicle injured in collision with other object, subsequent encounter -V813XXS Occupant of railway train or railway vehicle injured in collision with other object, sequela -V814XXA Person injured while boarding or alighting from railway train or railway vehicle, initial encounter -V814XXD Person injured while boarding or alighting from railway train or railway vehicle, subsequent encounter -V814XXS Person injured while boarding or alighting from railway train or railway vehicle, sequela -V815XXA Occupant of railway train or railway vehicle injured by fall in railway train or railway vehicle, initial encounter -V815XXD Occupant of railway train or railway vehicle injured by fall in railway train or railway vehicle, subsequent encounter -V815XXS Occupant of railway train or railway vehicle injured by fall in railway train or railway vehicle, sequela -V816XXA Occupant of railway train or railway vehicle injured by fall from railway train or railway vehicle, initial encounter -V816XXD Occupant of railway train or railway vehicle injured by fall from railway train or railway vehicle, subsequent encounter -V816XXS Occupant of railway train or railway vehicle injured by fall from railway train or railway vehicle, sequela -V817XXA Occupant of railway train or railway vehicle injured in derailment without antecedent collision, initial encounter -V817XXD Occupant of railway train or railway vehicle injured in derailment without antecedent collision, subsequent encounter -V817XXS Occupant of railway train or railway vehicle injured in derailment without antecedent collision, sequela -V8181XA Occupant of railway train or railway vehicle injured due to explosion or fire on train, initial encounter -V8181XD Occupant of railway train or railway vehicle injured due to explosion or fire on train, subsequent encounter -V8181XS Occupant of railway train or railway vehicle injured due to explosion or fire on train, sequela -V8182XA Occupant of railway train or railway vehicle injured due to object falling onto train, initial encounter -V8182XD Occupant of railway train or railway vehicle injured due to object falling onto train, subsequent encounter -V8182XS Occupant of railway train or railway vehicle injured due to object falling onto train, sequela -V8183XA Occupant of railway train or railway vehicle injured due to collision with military vehicle, initial encounter -V8183XD Occupant of railway train or railway vehicle injured due to collision with military vehicle, subsequent encounter -V8183XS Occupant of railway train or railway vehicle injured due to collision with military vehicle, sequela -V8189XA Occupant of railway train or railway vehicle injured due to other specified railway accident, initial encounter -V8189XD Occupant of railway train or railway vehicle injured due to other specified railway accident, subsequent encounter -V8189XS Occupant of railway train or railway vehicle injured due to other specified railway accident, sequela -V819XXA Occupant of railway train or railway vehicle injured in unspecified railway accident, initial encounter -V819XXD Occupant of railway train or railway vehicle injured in unspecified railway accident, subsequent encounter -V819XXS Occupant of railway train or railway vehicle injured in unspecified railway accident, sequela -V820XXA Occupant of streetcar injured in collision with motor vehicle in nontraffic accident, initial encounter -V820XXD Occupant of streetcar injured in collision with motor vehicle in nontraffic accident, subsequent encounter -V820XXS Occupant of streetcar injured in collision with motor vehicle in nontraffic accident, sequela -V821XXA Occupant of streetcar injured in collision with motor vehicle in traffic accident, initial encounter -V821XXD Occupant of streetcar injured in collision with motor vehicle in traffic accident, subsequent encounter -V821XXS Occupant of streetcar injured in collision with motor vehicle in traffic accident, sequela -V822XXA Occupant of streetcar injured in collision with or hit by rolling stock, initial encounter -V822XXD Occupant of streetcar injured in collision with or hit by rolling stock, subsequent encounter -V822XXS Occupant of streetcar injured in collision with or hit by rolling stock, sequela -V823XXA Occupant of streetcar injured in collision with other object, initial encounter -V823XXD Occupant of streetcar injured in collision with other object, subsequent encounter -V823XXS Occupant of streetcar injured in collision with other object, sequela -V824XXA Person injured while boarding or alighting from streetcar, initial encounter -V824XXD Person injured while boarding or alighting from streetcar, subsequent encounter -V824XXS Person injured while boarding or alighting from streetcar, sequela -V825XXA Occupant of streetcar injured by fall in streetcar, initial encounter -V825XXD Occupant of streetcar injured by fall in streetcar, subsequent encounter -V825XXS Occupant of streetcar injured by fall in streetcar, sequela -V826XXA Occupant of streetcar injured by fall from streetcar, initial encounter -V826XXD Occupant of streetcar injured by fall from streetcar, subsequent encounter -V826XXS Occupant of streetcar injured by fall from streetcar, sequela -V827XXA Occupant of streetcar injured in derailment without antecedent collision, initial encounter -V827XXD Occupant of streetcar injured in derailment without antecedent collision, subsequent encounter -V827XXS Occupant of streetcar injured in derailment without antecedent collision, sequela -V828XXA Occupant of streetcar injured in other specified transport accidents, initial encounter -V828XXD Occupant of streetcar injured in other specified transport accidents, subsequent encounter -V828XXS Occupant of streetcar injured in other specified transport accidents, sequela -V829XXA Occupant of streetcar injured in unspecified traffic accident, initial encounter -V829XXD Occupant of streetcar injured in unspecified traffic accident, subsequent encounter -V829XXS Occupant of streetcar injured in unspecified traffic accident, sequela -V830XXA Driver of special industrial vehicle injured in traffic accident, initial encounter -V830XXD Driver of special industrial vehicle injured in traffic accident, subsequent encounter -V830XXS Driver of special industrial vehicle injured in traffic accident, sequela -V831XXA Passenger of special industrial vehicle injured in traffic accident, initial encounter -V831XXD Passenger of special industrial vehicle injured in traffic accident, subsequent encounter -V831XXS Passenger of special industrial vehicle injured in traffic accident, sequela -V832XXA Person on outside of special industrial vehicle injured in traffic accident, initial encounter -V832XXD Person on outside of special industrial vehicle injured in traffic accident, subsequent encounter -V832XXS Person on outside of special industrial vehicle injured in traffic accident, sequela -V833XXA Unspecified occupant of special industrial vehicle injured in traffic accident, initial encounter -V833XXD Unspecified occupant of special industrial vehicle injured in traffic accident, subsequent encounter -V833XXS Unspecified occupant of special industrial vehicle injured in traffic accident, sequela -V834XXA Person injured while boarding or alighting from special industrial vehicle, initial encounter -V834XXD Person injured while boarding or alighting from special industrial vehicle, subsequent encounter -V834XXS Person injured while boarding or alighting from special industrial vehicle, sequela -V835XXA Driver of special industrial vehicle injured in nontraffic accident, initial encounter -V835XXD Driver of special industrial vehicle injured in nontraffic accident, subsequent encounter -V835XXS Driver of special industrial vehicle injured in nontraffic accident, sequela -V836XXA Passenger of special industrial vehicle injured in nontraffic accident, initial encounter -V836XXD Passenger of special industrial vehicle injured in nontraffic accident, subsequent encounter -V836XXS Passenger of special industrial vehicle injured in nontraffic accident, sequela -V837XXA Person on outside of special industrial vehicle injured in nontraffic accident, initial encounter -V837XXD Person on outside of special industrial vehicle injured in nontraffic accident, subsequent encounter -V837XXS Person on outside of special industrial vehicle injured in nontraffic accident, sequela -V839XXA Unspecified occupant of special industrial vehicle injured in nontraffic accident, initial encounter -V839XXD Unspecified occupant of special industrial vehicle injured in nontraffic accident, subsequent encounter -V839XXS Unspecified occupant of special industrial vehicle injured in nontraffic accident, sequela -V840XXA Driver of special agricultural vehicle injured in traffic accident, initial encounter -V840XXD Driver of special agricultural vehicle injured in traffic accident, subsequent encounter -V840XXS Driver of special agricultural vehicle injured in traffic accident, sequela -V841XXA Passenger of special agricultural vehicle injured in traffic accident, initial encounter -V841XXD Passenger of special agricultural vehicle injured in traffic accident, subsequent encounter -V841XXS Passenger of special agricultural vehicle injured in traffic accident, sequela -V842XXA Person on outside of special agricultural vehicle injured in traffic accident, initial encounter -V842XXD Person on outside of special agricultural vehicle injured in traffic accident, subsequent encounter -V842XXS Person on outside of special agricultural vehicle injured in traffic accident, sequela -V843XXA Unspecified occupant of special agricultural vehicle injured in traffic accident, initial encounter -V843XXD Unspecified occupant of special agricultural vehicle injured in traffic accident, subsequent encounter -V843XXS Unspecified occupant of special agricultural vehicle injured in traffic accident, sequela -V844XXA Person injured while boarding or alighting from special agricultural vehicle, initial encounter -V844XXD Person injured while boarding or alighting from special agricultural vehicle, subsequent encounter -V844XXS Person injured while boarding or alighting from special agricultural vehicle, sequela -V845XXA Driver of special agricultural vehicle injured in nontraffic accident, initial encounter -V845XXD Driver of special agricultural vehicle injured in nontraffic accident, subsequent encounter -V845XXS Driver of special agricultural vehicle injured in nontraffic accident, sequela -V846XXA Passenger of special agricultural vehicle injured in nontraffic accident, initial encounter -V846XXD Passenger of special agricultural vehicle injured in nontraffic accident, subsequent encounter -V846XXS Passenger of special agricultural vehicle injured in nontraffic accident, sequela -V847XXA Person on outside of special agricultural vehicle injured in nontraffic accident, initial encounter -V847XXD Person on outside of special agricultural vehicle injured in nontraffic accident, subsequent encounter -V847XXS Person on outside of special agricultural vehicle injured in nontraffic accident, sequela -V849XXA Unspecified occupant of special agricultural vehicle injured in nontraffic accident, initial encounter -V849XXD Unspecified occupant of special agricultural vehicle injured in nontraffic accident, subsequent encounter -V849XXS Unspecified occupant of special agricultural vehicle injured in nontraffic accident, sequela -V850XXA Driver of special construction vehicle injured in traffic accident, initial encounter -V850XXD Driver of special construction vehicle injured in traffic accident, subsequent encounter -V850XXS Driver of special construction vehicle injured in traffic accident, sequela -V851XXA Passenger of special construction vehicle injured in traffic accident, initial encounter -V851XXD Passenger of special construction vehicle injured in traffic accident, subsequent encounter -V851XXS Passenger of special construction vehicle injured in traffic accident, sequela -V852XXA Person on outside of special construction vehicle injured in traffic accident, initial encounter -V852XXD Person on outside of special construction vehicle injured in traffic accident, subsequent encounter -V852XXS Person on outside of special construction vehicle injured in traffic accident, sequela -V853XXA Unspecified occupant of special construction vehicle injured in traffic accident, initial encounter -V853XXD Unspecified occupant of special construction vehicle injured in traffic accident, subsequent encounter -V853XXS Unspecified occupant of special construction vehicle injured in traffic accident, sequela -V854XXA Person injured while boarding or alighting from special construction vehicle, initial encounter -V854XXD Person injured while boarding or alighting from special construction vehicle, subsequent encounter -V854XXS Person injured while boarding or alighting from special construction vehicle, sequela -V855XXA Driver of special construction vehicle injured in nontraffic accident, initial encounter -V855XXD Driver of special construction vehicle injured in nontraffic accident, subsequent encounter -V855XXS Driver of special construction vehicle injured in nontraffic accident, sequela -V856XXA Passenger of special construction vehicle injured in nontraffic accident, initial encounter -V856XXD Passenger of special construction vehicle injured in nontraffic accident, subsequent encounter -V856XXS Passenger of special construction vehicle injured in nontraffic accident, sequela -V857XXA Person on outside of special construction vehicle injured in nontraffic accident, initial encounter -V857XXD Person on outside of special construction vehicle injured in nontraffic accident, subsequent encounter -V857XXS Person on outside of special construction vehicle injured in nontraffic accident, sequela -V859XXA Unspecified occupant of special construction vehicle injured in nontraffic accident, initial encounter -V859XXD Unspecified occupant of special construction vehicle injured in nontraffic accident, subsequent encounter -V859XXS Unspecified occupant of special construction vehicle injured in nontraffic accident, sequela -V8601XA Driver of ambulance or fire engine injured in traffic accident, initial encounter -V8601XD Driver of ambulance or fire engine injured in traffic accident, subsequent encounter -V8601XS Driver of ambulance or fire engine injured in traffic accident, sequela -V8602XA Driver of snowmobile injured in traffic accident, initial encounter -V8602XD Driver of snowmobile injured in traffic accident, subsequent encounter -V8602XS Driver of snowmobile injured in traffic accident, sequela -V8603XA Driver of dune buggy injured in traffic accident, initial encounter -V8603XD Driver of dune buggy injured in traffic accident, subsequent encounter -V8603XS Driver of dune buggy injured in traffic accident, sequela -V8604XA Driver of military vehicle injured in traffic accident, initial encounter -V8604XD Driver of military vehicle injured in traffic accident, subsequent encounter -V8604XS Driver of military vehicle injured in traffic accident, sequela -V8609XA Driver of other special all-terrain or other off-road motor vehicle injured in traffic accident, initial encounter -V8609XD Driver of other special all-terrain or other off-road motor vehicle injured in traffic accident, subsequent encounter -V8609XS Driver of other special all-terrain or other off-road motor vehicle injured in traffic accident, sequela -V8611XA Passenger of ambulance or fire engine injured in traffic accident, initial encounter -V8611XD Passenger of ambulance or fire engine injured in traffic accident, subsequent encounter -V8611XS Passenger of ambulance or fire engine injured in traffic accident, sequela -V8612XA Passenger of snowmobile injured in traffic accident, initial encounter -V8612XD Passenger of snowmobile injured in traffic accident, subsequent encounter -V8612XS Passenger of snowmobile injured in traffic accident, sequela -V8613XA Passenger of dune buggy injured in traffic accident, initial encounter -V8613XD Passenger of dune buggy injured in traffic accident, subsequent encounter -V8613XS Passenger of dune buggy injured in traffic accident, sequela -V8614XA Passenger of military vehicle injured in traffic accident, initial encounter -V8614XD Passenger of military vehicle injured in traffic accident, subsequent encounter -V8614XS Passenger of military vehicle injured in traffic accident, sequela -V8619XA Passenger of other special all-terrain or other off-road motor vehicle injured in traffic accident, initial encounter -V8619XD Passenger of other special all-terrain or other off-road motor vehicle injured in traffic accident, subsequent encounter -V8619XS Passenger of other special all-terrain or other off-road motor vehicle injured in traffic accident, sequela -V8621XA Person on outside of ambulance or fire engine injured in traffic accident, initial encounter -V8621XD Person on outside of ambulance or fire engine injured in traffic accident, subsequent encounter -V8621XS Person on outside of ambulance or fire engine injured in traffic accident, sequela -V8622XA Person on outside of snowmobile injured in traffic accident, initial encounter -V8622XD Person on outside of snowmobile injured in traffic accident, subsequent encounter -V8622XS Person on outside of snowmobile injured in traffic accident, sequela -V8623XA Person on outside of dune buggy injured in traffic accident, initial encounter -V8623XD Person on outside of dune buggy injured in traffic accident, subsequent encounter -V8623XS Person on outside of dune buggy injured in traffic accident, sequela -V8624XA Person on outside of military vehicle injured in traffic accident, initial encounter -V8624XD Person on outside of military vehicle injured in traffic accident, subsequent encounter -V8624XS Person on outside of military vehicle injured in traffic accident, sequela -V8629XA Person on outside of other special all-terrain or other off-road motor vehicle injured in traffic accident, initial encounter -V8629XD Person on outside of other special all-terrain or other off-road motor vehicle injured in traffic accident, subsequent encounter -V8629XS Person on outside of other special all-terrain or other off-road motor vehicle injured in traffic accident, sequela -V8631XA Unspecified occupant of ambulance or fire engine injured in traffic accident, initial encounter -V8631XD Unspecified occupant of ambulance or fire engine injured in traffic accident, subsequent encounter -V8631XS Unspecified occupant of ambulance or fire engine injured in traffic accident, sequela -V8632XA Unspecified occupant of snowmobile injured in traffic accident, initial encounter -V8632XD Unspecified occupant of snowmobile injured in traffic accident, subsequent encounter -V8632XS Unspecified occupant of snowmobile injured in traffic accident, sequela -V8633XA Unspecified occupant of dune buggy injured in traffic accident, initial encounter -V8633XD Unspecified occupant of dune buggy injured in traffic accident, subsequent encounter -V8633XS Unspecified occupant of dune buggy injured in traffic accident, sequela -V8634XA Unspecified occupant of military vehicle injured in traffic accident, initial encounter -V8634XD Unspecified occupant of military vehicle injured in traffic accident, subsequent encounter -V8634XS Unspecified occupant of military vehicle injured in traffic accident, sequela -V8639XA Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in traffic accident, initial encounter -V8639XD Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in traffic accident, subsequent encounter -V8639XS Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in traffic accident, sequela -V8641XA Person injured while boarding or alighting from ambulance or fire engine, initial encounter -V8641XD Person injured while boarding or alighting from ambulance or fire engine, subsequent encounter -V8641XS Person injured while boarding or alighting from ambulance or fire engine, sequela -V8642XA Person injured while boarding or alighting from snowmobile, initial encounter -V8642XD Person injured while boarding or alighting from snowmobile, subsequent encounter -V8642XS Person injured while boarding or alighting from snowmobile, sequela -V8643XA Person injured while boarding or alighting from dune buggy, initial encounter -V8643XD Person injured while boarding or alighting from dune buggy, subsequent encounter -V8643XS Person injured while boarding or alighting from dune buggy, sequela -V8644XA Person injured while boarding or alighting from military vehicle, initial encounter -V8644XD Person injured while boarding or alighting from military vehicle, subsequent encounter -V8644XS Person injured while boarding or alighting from military vehicle, sequela -V8649XA Person injured while boarding or alighting from other special all-terrain or other off-road motor vehicle, initial encounter -V8649XD Person injured while boarding or alighting from other special all-terrain or other off-road motor vehicle, subsequent encounter -V8649XS Person injured while boarding or alighting from other special all-terrain or other off-road motor vehicle, sequela -V8651XA Driver of ambulance or fire engine injured in nontraffic accident, initial encounter -V8651XD Driver of ambulance or fire engine injured in nontraffic accident, subsequent encounter -V8651XS Driver of ambulance or fire engine injured in nontraffic accident, sequela -V8652XA Driver of snowmobile injured in nontraffic accident, initial encounter -V8652XD Driver of snowmobile injured in nontraffic accident, subsequent encounter -V8652XS Driver of snowmobile injured in nontraffic accident, sequela -V8653XA Driver of dune buggy injured in nontraffic accident, initial encounter -V8653XD Driver of dune buggy injured in nontraffic accident, subsequent encounter -V8653XS Driver of dune buggy injured in nontraffic accident, sequela -V8654XA Driver of military vehicle injured in nontraffic accident, initial encounter -V8654XD Driver of military vehicle injured in nontraffic accident, subsequent encounter -V8654XS Driver of military vehicle injured in nontraffic accident, sequela -V8659XA Driver of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, initial encounter -V8659XD Driver of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, subsequent encounter -V8659XS Driver of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, sequela -V8661XA Passenger of ambulance or fire engine injured in nontraffic accident, initial encounter -V8661XD Passenger of ambulance or fire engine injured in nontraffic accident, subsequent encounter -V8661XS Passenger of ambulance or fire engine injured in nontraffic accident, sequela -V8662XA Passenger of snowmobile injured in nontraffic accident, initial encounter -V8662XD Passenger of snowmobile injured in nontraffic accident, subsequent encounter -V8662XS Passenger of snowmobile injured in nontraffic accident, sequela -V8663XA Passenger of dune buggy injured in nontraffic accident, initial encounter -V8663XD Passenger of dune buggy injured in nontraffic accident, subsequent encounter -V8663XS Passenger of dune buggy injured in nontraffic accident, sequela -V8664XA Passenger of military vehicle injured in nontraffic accident, initial encounter -V8664XD Passenger of military vehicle injured in nontraffic accident, subsequent encounter -V8664XS Passenger of military vehicle injured in nontraffic accident, sequela -V8669XA Passenger of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, initial encounter -V8669XD Passenger of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, subsequent encounter -V8669XS Passenger of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, sequela -V8671XA Person on outside of ambulance or fire engine injured in nontraffic accident, initial encounter -V8671XD Person on outside of ambulance or fire engine injured in nontraffic accident, subsequent encounter -V8671XS Person on outside of ambulance or fire engine injured in nontraffic accident, sequela -V8672XA Person on outside of snowmobile injured in nontraffic accident, initial encounter -V8672XD Person on outside of snowmobile injured in nontraffic accident, subsequent encounter -V8672XS Person on outside of snowmobile injured in nontraffic accident, sequela -V8673XA Person on outside of dune buggy injured in nontraffic accident, initial encounter -V8673XD Person on outside of dune buggy injured in nontraffic accident, subsequent encounter -V8673XS Person on outside of dune buggy injured in nontraffic accident, sequela -V8674XA Person on outside of military vehicle injured in nontraffic accident, initial encounter -V8674XD Person on outside of military vehicle injured in nontraffic accident, subsequent encounter -V8674XS Person on outside of military vehicle injured in nontraffic accident, sequela -V8679XA Person on outside of other special all-terrain or other off-road motor vehicles injured in nontraffic accident, initial encounter -V8679XD Person on outside of other special all-terrain or other off-road motor vehicles injured in nontraffic accident, subsequent encounter -V8679XS Person on outside of other special all-terrain or other off-road motor vehicles injured in nontraffic accident, sequela -V8691XA Unspecified occupant of ambulance or fire engine injured in nontraffic accident, initial encounter -V8691XD Unspecified occupant of ambulance or fire engine injured in nontraffic accident, subsequent encounter -V8691XS Unspecified occupant of ambulance or fire engine injured in nontraffic accident, sequela -V8692XA Unspecified occupant of snowmobile injured in nontraffic accident, initial encounter -V8692XD Unspecified occupant of snowmobile injured in nontraffic accident, subsequent encounter -V8692XS Unspecified occupant of snowmobile injured in nontraffic accident, sequela -V8693XA Unspecified occupant of dune buggy injured in nontraffic accident, initial encounter -V8693XD Unspecified occupant of dune buggy injured in nontraffic accident, subsequent encounter -V8693XS Unspecified occupant of dune buggy injured in nontraffic accident, sequela -V8694XA Unspecified occupant of military vehicle injured in nontraffic accident, initial encounter -V8694XD Unspecified occupant of military vehicle injured in nontraffic accident, subsequent encounter -V8694XS Unspecified occupant of military vehicle injured in nontraffic accident, sequela -V8699XA Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, initial encounter -V8699XD Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, subsequent encounter -V8699XS Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, sequela -V870XXA Person injured in collision between car and two- or three-wheeled powered vehicle (traffic), initial encounter -V870XXD Person injured in collision between car and two- or three-wheeled powered vehicle (traffic), subsequent encounter -V870XXS Person injured in collision between car and two- or three-wheeled powered vehicle (traffic), sequela -V871XXA Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle (traffic), initial encounter -V871XXD Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle (traffic), subsequent encounter -V871XXS Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle (traffic), sequela -V872XXA Person injured in collision between car and pick-up truck or van (traffic), initial encounter -V872XXD Person injured in collision between car and pick-up truck or van (traffic), subsequent encounter -V872XXS Person injured in collision between car and pick-up truck or van (traffic), sequela -V873XXA Person injured in collision between car and bus (traffic), initial encounter -V873XXD Person injured in collision between car and bus (traffic), subsequent encounter -V873XXS Person injured in collision between car and bus (traffic), sequela -V874XXA Person injured in collision between car and heavy transport vehicle (traffic), initial encounter -V874XXD Person injured in collision between car and heavy transport vehicle (traffic), subsequent encounter -V874XXS Person injured in collision between car and heavy transport vehicle (traffic), sequela -V875XXA Person injured in collision between heavy transport vehicle and bus (traffic), initial encounter -V875XXD Person injured in collision between heavy transport vehicle and bus (traffic), subsequent encounter -V875XXS Person injured in collision between heavy transport vehicle and bus (traffic), sequela -V876XXA Person injured in collision between railway train or railway vehicle and car (traffic), initial encounter -V876XXD Person injured in collision between railway train or railway vehicle and car (traffic), subsequent encounter -V876XXS Person injured in collision between railway train or railway vehicle and car (traffic), sequela -V877XXA Person injured in collision between other specified motor vehicles (traffic), initial encounter -V877XXD Person injured in collision between other specified motor vehicles (traffic), subsequent encounter -V877XXS Person injured in collision between other specified motor vehicles (traffic), sequela -V878XXA Person injured in other specified noncollision transport accidents involving motor vehicle (traffic), initial encounter -V878XXD Person injured in other specified noncollision transport accidents involving motor vehicle (traffic), subsequent encounter -V878XXS Person injured in other specified noncollision transport accidents involving motor vehicle (traffic), sequela -V879XXA Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle (traffic), initial encounter -V879XXD Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle (traffic), subsequent encounter -V879XXS Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle (traffic), sequela -V880XXA Person injured in collision between car and two- or three-wheeled motor vehicle, nontraffic, initial encounter -V880XXD Person injured in collision between car and two- or three-wheeled motor vehicle, nontraffic, subsequent encounter -V880XXS Person injured in collision between car and two- or three-wheeled motor vehicle, nontraffic, sequela -V881XXA Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle, nontraffic, initial encounter -V881XXD Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle, nontraffic, subsequent encounter -V881XXS Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle, nontraffic, sequela -V882XXA Person injured in collision between car and pick-up truck or van, nontraffic, initial encounter -V882XXD Person injured in collision between car and pick-up truck or van, nontraffic, subsequent encounter -V882XXS Person injured in collision between car and pick-up truck or van, nontraffic, sequela -V883XXA Person injured in collision between car and bus, nontraffic, initial encounter -V883XXD Person injured in collision between car and bus, nontraffic, subsequent encounter -V883XXS Person injured in collision between car and bus, nontraffic, sequela -V884XXA Person injured in collision between car and heavy transport vehicle, nontraffic, initial encounter -V884XXD Person injured in collision between car and heavy transport vehicle, nontraffic, subsequent encounter -V884XXS Person injured in collision between car and heavy transport vehicle, nontraffic, sequela -V885XXA Person injured in collision between heavy transport vehicle and bus, nontraffic, initial encounter -V885XXD Person injured in collision between heavy transport vehicle and bus, nontraffic, subsequent encounter -V885XXS Person injured in collision between heavy transport vehicle and bus, nontraffic, sequela -V886XXA Person injured in collision between railway train or railway vehicle and car, nontraffic, initial encounter -V886XXD Person injured in collision between railway train or railway vehicle and car, nontraffic, subsequent encounter -V886XXS Person injured in collision between railway train or railway vehicle and car, nontraffic, sequela -V887XXA Person injured in collision between other specified motor vehicle, nontraffic, initial encounter -V887XXD Person injured in collision between other specified motor vehicle, nontraffic, subsequent encounter -V887XXS Person injured in collision between other specified motor vehicle, nontraffic, sequela -V888XXA Person injured in other specified noncollision transport accidents involving motor vehicle, nontraffic, initial encounter -V888XXD Person injured in other specified noncollision transport accidents involving motor vehicle, nontraffic, subsequent encounter -V888XXS Person injured in other specified noncollision transport accidents involving motor vehicle, nontraffic, sequela -V889XXA Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle, nontraffic, initial encounter -V889XXD Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle, nontraffic, subsequent encounter -V889XXS Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle, nontraffic, sequela -V890XXA Person injured in unspecified motor-vehicle accident, nontraffic, initial encounter -V890XXD Person injured in unspecified motor-vehicle accident, nontraffic, subsequent encounter -V890XXS Person injured in unspecified motor-vehicle accident, nontraffic, sequela -V891XXA Person injured in unspecified nonmotor-vehicle accident, nontraffic, initial encounter -V891XXD Person injured in unspecified nonmotor-vehicle accident, nontraffic, subsequent encounter -V891XXS Person injured in unspecified nonmotor-vehicle accident, nontraffic, sequela -V892XXA Person injured in unspecified motor-vehicle accident, traffic, initial encounter -V892XXD Person injured in unspecified motor-vehicle accident, traffic, subsequent encounter -V892XXS Person injured in unspecified motor-vehicle accident, traffic, sequela -V893XXA Person injured in unspecified nonmotor-vehicle accident, traffic, initial encounter -V893XXD Person injured in unspecified nonmotor-vehicle accident, traffic, subsequent encounter -V893XXS Person injured in unspecified nonmotor-vehicle accident, traffic, sequela -V899XXA Person injured in unspecified vehicle accident, initial encounter -V899XXD Person injured in unspecified vehicle accident, subsequent encounter -V899XXS Person injured in unspecified vehicle accident, sequela -V9000XA Drowning and submersion due to merchant ship overturning, initial encounter -V9000XD Drowning and submersion due to merchant ship overturning, subsequent encounter -V9000XS Drowning and submersion due to merchant ship overturning, sequela -V9001XA Drowning and submersion due to passenger ship overturning, initial encounter -V9001XD Drowning and submersion due to passenger ship overturning, subsequent encounter -V9001XS Drowning and submersion due to passenger ship overturning, sequela -V9002XA Drowning and submersion due to fishing boat overturning, initial encounter -V9002XD Drowning and submersion due to fishing boat overturning, subsequent encounter -V9002XS Drowning and submersion due to fishing boat overturning, sequela -V9003XA Drowning and submersion due to other powered watercraft overturning, initial encounter -V9003XD Drowning and submersion due to other powered watercraft overturning, subsequent encounter -V9003XS Drowning and submersion due to other powered watercraft overturning, sequela -V9004XA Drowning and submersion due to sailboat overturning, initial encounter -V9004XD Drowning and submersion due to sailboat overturning, subsequent encounter -V9004XS Drowning and submersion due to sailboat overturning, sequela -V9005XA Drowning and submersion due to canoe or kayak overturning, initial encounter -V9005XD Drowning and submersion due to canoe or kayak overturning, subsequent encounter -V9005XS Drowning and submersion due to canoe or kayak overturning, sequela -V9006XA Drowning and submersion due to (nonpowered) inflatable craft overturning, initial encounter -V9006XD Drowning and submersion due to (nonpowered) inflatable craft overturning, subsequent encounter -V9006XS Drowning and submersion due to (nonpowered) inflatable craft overturning, sequela -V9008XA Drowning and submersion due to other unpowered watercraft overturning, initial encounter -V9008XD Drowning and submersion due to other unpowered watercraft overturning, subsequent encounter -V9008XS Drowning and submersion due to other unpowered watercraft overturning, sequela -V9009XA Drowning and submersion due to unspecified watercraft overturning, initial encounter -V9009XD Drowning and submersion due to unspecified watercraft overturning, subsequent encounter -V9009XS Drowning and submersion due to unspecified watercraft overturning, sequela -V9010XA Drowning and submersion due to merchant ship sinking, initial encounter -V9010XD Drowning and submersion due to merchant ship sinking, subsequent encounter -V9010XS Drowning and submersion due to merchant ship sinking, sequela -V9011XA Drowning and submersion due to passenger ship sinking, initial encounter -V9011XD Drowning and submersion due to passenger ship sinking, subsequent encounter -V9011XS Drowning and submersion due to passenger ship sinking, sequela -V9012XA Drowning and submersion due to fishing boat sinking, initial encounter -V9012XD Drowning and submersion due to fishing boat sinking, subsequent encounter -V9012XS Drowning and submersion due to fishing boat sinking, sequela -V9013XA Drowning and submersion due to other powered watercraft sinking, initial encounter -V9013XD Drowning and submersion due to other powered watercraft sinking, subsequent encounter -V9013XS Drowning and submersion due to other powered watercraft sinking, sequela -V9014XA Drowning and submersion due to sailboat sinking, initial encounter -V9014XD Drowning and submersion due to sailboat sinking, subsequent encounter -V9014XS Drowning and submersion due to sailboat sinking, sequela -V9015XA Drowning and submersion due to canoe or kayak sinking, initial encounter -V9015XD Drowning and submersion due to canoe or kayak sinking, subsequent encounter -V9015XS Drowning and submersion due to canoe or kayak sinking, sequela -V9016XA Drowning and submersion due to (nonpowered) inflatable craft sinking, initial encounter -V9016XD Drowning and submersion due to (nonpowered) inflatable craft sinking, subsequent encounter -V9016XS Drowning and submersion due to (nonpowered) inflatable craft sinking, sequela -V9018XA Drowning and submersion due to other unpowered watercraft sinking, initial encounter -V9018XD Drowning and submersion due to other unpowered watercraft sinking, subsequent encounter -V9018XS Drowning and submersion due to other unpowered watercraft sinking, sequela -V9019XA Drowning and submersion due to unspecified watercraft sinking, initial encounter -V9019XD Drowning and submersion due to unspecified watercraft sinking, subsequent encounter -V9019XS Drowning and submersion due to unspecified watercraft sinking, sequela -V9020XA Drowning and submersion due to falling or jumping from burning merchant ship, initial encounter -V9020XD Drowning and submersion due to falling or jumping from burning merchant ship, subsequent encounter -V9020XS Drowning and submersion due to falling or jumping from burning merchant ship, sequela -V9021XA Drowning and submersion due to falling or jumping from burning passenger ship, initial encounter -V9021XD Drowning and submersion due to falling or jumping from burning passenger ship, subsequent encounter -V9021XS Drowning and submersion due to falling or jumping from burning passenger ship, sequela -V9022XA Drowning and submersion due to falling or jumping from burning fishing boat, initial encounter -V9022XD Drowning and submersion due to falling or jumping from burning fishing boat, subsequent encounter -V9022XS Drowning and submersion due to falling or jumping from burning fishing boat, sequela -V9023XA Drowning and submersion due to falling or jumping from other burning powered watercraft, initial encounter -V9023XD Drowning and submersion due to falling or jumping from other burning powered watercraft, subsequent encounter -V9023XS Drowning and submersion due to falling or jumping from other burning powered watercraft, sequela -V9024XA Drowning and submersion due to falling or jumping from burning sailboat, initial encounter -V9024XD Drowning and submersion due to falling or jumping from burning sailboat, subsequent encounter -V9024XS Drowning and submersion due to falling or jumping from burning sailboat, sequela -V9025XA Drowning and submersion due to falling or jumping from burning canoe or kayak, initial encounter -V9025XD Drowning and submersion due to falling or jumping from burning canoe or kayak, subsequent encounter -V9025XS Drowning and submersion due to falling or jumping from burning canoe or kayak, sequela -V9026XA Drowning and submersion due to falling or jumping from burning (nonpowered) inflatable craft, initial encounter -V9026XD Drowning and submersion due to falling or jumping from burning (nonpowered) inflatable craft, subsequent encounter -V9026XS Drowning and submersion due to falling or jumping from burning (nonpowered) inflatable craft, sequela -V9027XA Drowning and submersion due to falling or jumping from burning water-skis, initial encounter -V9027XD Drowning and submersion due to falling or jumping from burning water-skis, subsequent encounter -V9027XS Drowning and submersion due to falling or jumping from burning water-skis, sequela -V9028XA Drowning and submersion due to falling or jumping from other burning unpowered watercraft, initial encounter -V9028XD Drowning and submersion due to falling or jumping from other burning unpowered watercraft, subsequent encounter -V9028XS Drowning and submersion due to falling or jumping from other burning unpowered watercraft, sequela -V9029XA Drowning and submersion due to falling or jumping from unspecified burning watercraft, initial encounter -V9029XD Drowning and submersion due to falling or jumping from unspecified burning watercraft, subsequent encounter -V9029XS Drowning and submersion due to falling or jumping from unspecified burning watercraft, sequela -V9030XA Drowning and submersion due to falling or jumping from crushed merchant ship, initial encounter -V9030XD Drowning and submersion due to falling or jumping from crushed merchant ship, subsequent encounter -V9030XS Drowning and submersion due to falling or jumping from crushed merchant ship, sequela -V9031XA Drowning and submersion due to falling or jumping from crushed passenger ship, initial encounter -V9031XD Drowning and submersion due to falling or jumping from crushed passenger ship, subsequent encounter -V9031XS Drowning and submersion due to falling or jumping from crushed passenger ship, sequela -V9032XA Drowning and submersion due to falling or jumping from crushed fishing boat, initial encounter -V9032XD Drowning and submersion due to falling or jumping from crushed fishing boat, subsequent encounter -V9032XS Drowning and submersion due to falling or jumping from crushed fishing boat, sequela -V9033XA Drowning and submersion due to falling or jumping from other crushed powered watercraft, initial encounter -V9033XD Drowning and submersion due to falling or jumping from other crushed powered watercraft, subsequent encounter -V9033XS Drowning and submersion due to falling or jumping from other crushed powered watercraft, sequela -V9034XA Drowning and submersion due to falling or jumping from crushed sailboat, initial encounter -V9034XD Drowning and submersion due to falling or jumping from crushed sailboat, subsequent encounter -V9034XS Drowning and submersion due to falling or jumping from crushed sailboat, sequela -V9035XA Drowning and submersion due to falling or jumping from crushed canoe or kayak, initial encounter -V9035XD Drowning and submersion due to falling or jumping from crushed canoe or kayak, subsequent encounter -V9035XS Drowning and submersion due to falling or jumping from crushed canoe or kayak, sequela -V9036XA Drowning and submersion due to falling or jumping from crushed (nonpowered) inflatable craft, initial encounter -V9036XD Drowning and submersion due to falling or jumping from crushed (nonpowered) inflatable craft, subsequent encounter -V9036XS Drowning and submersion due to falling or jumping from crushed (nonpowered) inflatable craft, sequela -V9037XA Drowning and submersion due to falling or jumping from crushed water-skis, initial encounter -V9037XD Drowning and submersion due to falling or jumping from crushed water-skis, subsequent encounter -V9037XS Drowning and submersion due to falling or jumping from crushed water-skis, sequela -V9038XA Drowning and submersion due to falling or jumping from other crushed unpowered watercraft, initial encounter -V9038XD Drowning and submersion due to falling or jumping from other crushed unpowered watercraft, subsequent encounter -V9038XS Drowning and submersion due to falling or jumping from other crushed unpowered watercraft, sequela -V9039XA Drowning and submersion due to falling or jumping from crushed unspecified watercraft, initial encounter -V9039XD Drowning and submersion due to falling or jumping from crushed unspecified watercraft, subsequent encounter -V9039XS Drowning and submersion due to falling or jumping from crushed unspecified watercraft, sequela -V9080XA Drowning and submersion due to other accident to merchant ship, initial encounter -V9080XD Drowning and submersion due to other accident to merchant ship, subsequent encounter -V9080XS Drowning and submersion due to other accident to merchant ship, sequela -V9081XA Drowning and submersion due to other accident to passenger ship, initial encounter -V9081XD Drowning and submersion due to other accident to passenger ship, subsequent encounter -V9081XS Drowning and submersion due to other accident to passenger ship, sequela -V9082XA Drowning and submersion due to other accident to fishing boat, initial encounter -V9082XD Drowning and submersion due to other accident to fishing boat, subsequent encounter -V9082XS Drowning and submersion due to other accident to fishing boat, sequela -V9083XA Drowning and submersion due to other accident to other powered watercraft, initial encounter -V9083XD Drowning and submersion due to other accident to other powered watercraft, subsequent encounter -V9083XS Drowning and submersion due to other accident to other powered watercraft, sequela -V9084XA Drowning and submersion due to other accident to sailboat, initial encounter -V9084XD Drowning and submersion due to other accident to sailboat, subsequent encounter -V9084XS Drowning and submersion due to other accident to sailboat, sequela -V9085XA Drowning and submersion due to other accident to canoe or kayak, initial encounter -V9085XD Drowning and submersion due to other accident to canoe or kayak, subsequent encounter -V9085XS Drowning and submersion due to other accident to canoe or kayak, sequela -V9086XA Drowning and submersion due to other accident to (nonpowered) inflatable craft, initial encounter -V9086XD Drowning and submersion due to other accident to (nonpowered) inflatable craft, subsequent encounter -V9086XS Drowning and submersion due to other accident to (nonpowered) inflatable craft, sequela -V9087XA Drowning and submersion due to other accident to water-skis, initial encounter -V9087XD Drowning and submersion due to other accident to water-skis, subsequent encounter -V9087XS Drowning and submersion due to other accident to water-skis, sequela -V9088XA Drowning and submersion due to other accident to other unpowered watercraft, initial encounter -V9088XD Drowning and submersion due to other accident to other unpowered watercraft, subsequent encounter -V9088XS Drowning and submersion due to other accident to other unpowered watercraft, sequela -V9089XA Drowning and submersion due to other accident to unspecified watercraft, initial encounter -V9089XD Drowning and submersion due to other accident to unspecified watercraft, subsequent encounter -V9089XS Drowning and submersion due to other accident to unspecified watercraft, sequela -V9100XA Burn due to merchant ship on fire, initial encounter -V9100XD Burn due to merchant ship on fire, subsequent encounter -V9100XS Burn due to merchant ship on fire, sequela -V9101XA Burn due to passenger ship on fire, initial encounter -V9101XD Burn due to passenger ship on fire, subsequent encounter -V9101XS Burn due to passenger ship on fire, sequela -V9102XA Burn due to fishing boat on fire, initial encounter -V9102XD Burn due to fishing boat on fire, subsequent encounter -V9102XS Burn due to fishing boat on fire, sequela -V9103XA Burn due to other powered watercraft on fire, initial encounter -V9103XD Burn due to other powered watercraft on fire, subsequent encounter -V9103XS Burn due to other powered watercraft on fire, sequela -V9104XA Burn due to sailboat on fire, initial encounter -V9104XD Burn due to sailboat on fire, subsequent encounter -V9104XS Burn due to sailboat on fire, sequela -V9105XA Burn due to canoe or kayak on fire, initial encounter -V9105XD Burn due to canoe or kayak on fire, subsequent encounter -V9105XS Burn due to canoe or kayak on fire, sequela -V9106XA Burn due to (nonpowered) inflatable craft on fire, initial encounter -V9106XD Burn due to (nonpowered) inflatable craft on fire, subsequent encounter -V9106XS Burn due to (nonpowered) inflatable craft on fire, sequela -V9107XA Burn due to water-skis on fire, initial encounter -V9107XD Burn due to water-skis on fire, subsequent encounter -V9107XS Burn due to water-skis on fire, sequela -V9108XA Burn due to other unpowered watercraft on fire, initial encounter -V9108XD Burn due to other unpowered watercraft on fire, subsequent encounter -V9108XS Burn due to other unpowered watercraft on fire, sequela -V9109XA Burn due to unspecified watercraft on fire, initial encounter -V9109XD Burn due to unspecified watercraft on fire, subsequent encounter -V9109XS Burn due to unspecified watercraft on fire, sequela -V9110XA Crushed between merchant ship and other watercraft or other object due to collision, initial encounter -V9110XD Crushed between merchant ship and other watercraft or other object due to collision, subsequent encounter -V9110XS Crushed between merchant ship and other watercraft or other object due to collision, sequela -V9111XA Crushed between passenger ship and other watercraft or other object due to collision, initial encounter -V9111XD Crushed between passenger ship and other watercraft or other object due to collision, subsequent encounter -V9111XS Crushed between passenger ship and other watercraft or other object due to collision, sequela -V9112XA Crushed between fishing boat and other watercraft or other object due to collision, initial encounter -V9112XD Crushed between fishing boat and other watercraft or other object due to collision, subsequent encounter -V9112XS Crushed between fishing boat and other watercraft or other object due to collision, sequela -V9113XA Crushed between other powered watercraft and other watercraft or other object due to collision, initial encounter -V9113XD Crushed between other powered watercraft and other watercraft or other object due to collision, subsequent encounter -V9113XS Crushed between other powered watercraft and other watercraft or other object due to collision, sequela -V9114XA Crushed between sailboat and other watercraft or other object due to collision, initial encounter -V9114XD Crushed between sailboat and other watercraft or other object due to collision, subsequent encounter -V9114XS Crushed between sailboat and other watercraft or other object due to collision, sequela -V9115XA Crushed between canoe or kayak and other watercraft or other object due to collision, initial encounter -V9115XD Crushed between canoe or kayak and other watercraft or other object due to collision, subsequent encounter -V9115XS Crushed between canoe or kayak and other watercraft or other object due to collision, sequela -V9116XA Crushed between (nonpowered) inflatable craft and other watercraft or other object due to collision, initial encounter -V9116XD Crushed between (nonpowered) inflatable craft and other watercraft or other object due to collision, subsequent encounter -V9116XS Crushed between (nonpowered) inflatable craft and other watercraft or other object due to collision, sequela -V9118XA Crushed between other unpowered watercraft and other watercraft or other object due to collision, initial encounter -V9118XD Crushed between other unpowered watercraft and other watercraft or other object due to collision, subsequent encounter -V9118XS Crushed between other unpowered watercraft and other watercraft or other object due to collision, sequela -V9119XA Crushed between unspecified watercraft and other watercraft or other object due to collision, initial encounter -V9119XD Crushed between unspecified watercraft and other watercraft or other object due to collision, subsequent encounter -V9119XS Crushed between unspecified watercraft and other watercraft or other object due to collision, sequela -V9120XA Fall due to collision between merchant ship and other watercraft or other object, initial encounter -V9120XD Fall due to collision between merchant ship and other watercraft or other object, subsequent encounter -V9120XS Fall due to collision between merchant ship and other watercraft or other object, sequela -V9121XA Fall due to collision between passenger ship and other watercraft or other object, initial encounter -V9121XD Fall due to collision between passenger ship and other watercraft or other object, subsequent encounter -V9121XS Fall due to collision between passenger ship and other watercraft or other object, sequela -V9122XA Fall due to collision between fishing boat and other watercraft or other object, initial encounter -V9122XD Fall due to collision between fishing boat and other watercraft or other object, subsequent encounter -V9122XS Fall due to collision between fishing boat and other watercraft or other object, sequela -V9123XA Fall due to collision between other powered watercraft and other watercraft or other object, initial encounter -V9123XD Fall due to collision between other powered watercraft and other watercraft or other object, subsequent encounter -V9123XS Fall due to collision between other powered watercraft and other watercraft or other object, sequela -V9124XA Fall due to collision between sailboat and other watercraft or other object, initial encounter -V9124XD Fall due to collision between sailboat and other watercraft or other object, subsequent encounter -V9124XS Fall due to collision between sailboat and other watercraft or other object, sequela -V9125XA Fall due to collision between canoe or kayak and other watercraft or other object, initial encounter -V9125XD Fall due to collision between canoe or kayak and other watercraft or other object, subsequent encounter -V9125XS Fall due to collision between canoe or kayak and other watercraft or other object, sequela -V9126XA Fall due to collision between (nonpowered) inflatable craft and other watercraft or other object, initial encounter -V9126XD Fall due to collision between (nonpowered) inflatable craft and other watercraft or other object, subsequent encounter -V9126XS Fall due to collision between (nonpowered) inflatable craft and other watercraft or other object, sequela -V9129XA Fall due to collision between unspecified watercraft and other watercraft or other object, initial encounter -V9129XD Fall due to collision between unspecified watercraft and other watercraft or other object, subsequent encounter -V9129XS Fall due to collision between unspecified watercraft and other watercraft or other object, sequela -V9130XA Hit or struck by falling object due to accident to merchant ship, initial encounter -V9130XD Hit or struck by falling object due to accident to merchant ship, subsequent encounter -V9130XS Hit or struck by falling object due to accident to merchant ship, sequela -V9131XA Hit or struck by falling object due to accident to passenger ship, initial encounter -V9131XD Hit or struck by falling object due to accident to passenger ship, subsequent encounter -V9131XS Hit or struck by falling object due to accident to passenger ship, sequela -V9132XA Hit or struck by falling object due to accident to fishing boat, initial encounter -V9132XD Hit or struck by falling object due to accident to fishing boat, subsequent encounter -V9132XS Hit or struck by falling object due to accident to fishing boat, sequela -V9133XA Hit or struck by falling object due to accident to other powered watercraft, initial encounter -V9133XD Hit or struck by falling object due to accident to other powered watercraft, subsequent encounter -V9133XS Hit or struck by falling object due to accident to other powered watercraft, sequela -V9134XA Hit or struck by falling object due to accident to sailboat, initial encounter -V9134XD Hit or struck by falling object due to accident to sailboat, subsequent encounter -V9134XS Hit or struck by falling object due to accident to sailboat, sequela -V9135XA Hit or struck by falling object due to accident to canoe or kayak, initial encounter -V9135XD Hit or struck by falling object due to accident to canoe or kayak, subsequent encounter -V9135XS Hit or struck by falling object due to accident to canoe or kayak, sequela -V9136XA Hit or struck by falling object due to accident to (nonpowered) inflatable craft, initial encounter -V9136XD Hit or struck by falling object due to accident to (nonpowered) inflatable craft, subsequent encounter -V9136XS Hit or struck by falling object due to accident to (nonpowered) inflatable craft, sequela -V9137XA Hit or struck by falling object due to accident to water-skis, initial encounter -V9137XD Hit or struck by falling object due to accident to water-skis, subsequent encounter -V9137XS Hit or struck by falling object due to accident to water-skis, sequela -V9138XA Hit or struck by falling object due to accident to other unpowered watercraft, initial encounter -V9138XD Hit or struck by falling object due to accident to other unpowered watercraft, subsequent encounter -V9138XS Hit or struck by falling object due to accident to other unpowered watercraft, sequela -V9139XA Hit or struck by falling object due to accident to unspecified watercraft, initial encounter -V9139XD Hit or struck by falling object due to accident to unspecified watercraft, subsequent encounter -V9139XS Hit or struck by falling object due to accident to unspecified watercraft, sequela -V9180XA Other injury due to other accident to merchant ship, initial encounter -V9180XD Other injury due to other accident to merchant ship, subsequent encounter -V9180XS Other injury due to other accident to merchant ship, sequela -V9181XA Other injury due to other accident to passenger ship, initial encounter -V9181XD Other injury due to other accident to passenger ship, subsequent encounter -V9181XS Other injury due to other accident to passenger ship, sequela -V9182XA Other injury due to other accident to fishing boat, initial encounter -V9182XD Other injury due to other accident to fishing boat, subsequent encounter -V9182XS Other injury due to other accident to fishing boat, sequela -V9183XA Other injury due to other accident to other powered watercraft, initial encounter -V9183XD Other injury due to other accident to other powered watercraft, subsequent encounter -V9183XS Other injury due to other accident to other powered watercraft, sequela -V9184XA Other injury due to other accident to sailboat, initial encounter -V9184XD Other injury due to other accident to sailboat, subsequent encounter -V9184XS Other injury due to other accident to sailboat, sequela -V9185XA Other injury due to other accident to canoe or kayak, initial encounter -V9185XD Other injury due to other accident to canoe or kayak, subsequent encounter -V9185XS Other injury due to other accident to canoe or kayak, sequela -V9186XA Other injury due to other accident to (nonpowered) inflatable craft, initial encounter -V9186XD Other injury due to other accident to (nonpowered) inflatable craft, subsequent encounter -V9186XS Other injury due to other accident to (nonpowered) inflatable craft, sequela -V9187XA Other injury due to other accident to water-skis, initial encounter -V9187XD Other injury due to other accident to water-skis, subsequent encounter -V9187XS Other injury due to other accident to water-skis, sequela -V9188XA Other injury due to other accident to other unpowered watercraft, initial encounter -V9188XD Other injury due to other accident to other unpowered watercraft, subsequent encounter -V9188XS Other injury due to other accident to other unpowered watercraft, sequela -V9189XA Other injury due to other accident to unspecified watercraft, initial encounter -V9189XD Other injury due to other accident to unspecified watercraft, subsequent encounter -V9189XS Other injury due to other accident to unspecified watercraft, sequela -V9200XA Drowning and submersion due to fall off merchant ship, initial encounter -V9200XD Drowning and submersion due to fall off merchant ship, subsequent encounter -V9200XS Drowning and submersion due to fall off merchant ship, sequela -V9201XA Drowning and submersion due to fall off passenger ship, initial encounter -V9201XD Drowning and submersion due to fall off passenger ship, subsequent encounter -V9201XS Drowning and submersion due to fall off passenger ship, sequela -V9202XA Drowning and submersion due to fall off fishing boat, initial encounter -V9202XD Drowning and submersion due to fall off fishing boat, subsequent encounter -V9202XS Drowning and submersion due to fall off fishing boat, sequela -V9203XA Drowning and submersion due to fall off other powered watercraft, initial encounter -V9203XD Drowning and submersion due to fall off other powered watercraft, subsequent encounter -V9203XS Drowning and submersion due to fall off other powered watercraft, sequela -V9204XA Drowning and submersion due to fall off sailboat, initial encounter -V9204XD Drowning and submersion due to fall off sailboat, subsequent encounter -V9204XS Drowning and submersion due to fall off sailboat, sequela -V9205XA Drowning and submersion due to fall off canoe or kayak, initial encounter -V9205XD Drowning and submersion due to fall off canoe or kayak, subsequent encounter -V9205XS Drowning and submersion due to fall off canoe or kayak, sequela -V9206XA Drowning and submersion due to fall off (nonpowered) inflatable craft, initial encounter -V9206XD Drowning and submersion due to fall off (nonpowered) inflatable craft, subsequent encounter -V9206XS Drowning and submersion due to fall off (nonpowered) inflatable craft, sequela -V9207XA Drowning and submersion due to fall off water-skis, initial encounter -V9207XD Drowning and submersion due to fall off water-skis, subsequent encounter -V9207XS Drowning and submersion due to fall off water-skis, sequela -V9208XA Drowning and submersion due to fall off other unpowered watercraft, initial encounter -V9208XD Drowning and submersion due to fall off other unpowered watercraft, subsequent encounter -V9208XS Drowning and submersion due to fall off other unpowered watercraft, sequela -V9209XA Drowning and submersion due to fall off unspecified watercraft, initial encounter -V9209XD Drowning and submersion due to fall off unspecified watercraft, subsequent encounter -V9209XS Drowning and submersion due to fall off unspecified watercraft, sequela -V9210XA Drowning and submersion due to being thrown overboard by motion of merchant ship, initial encounter -V9210XD Drowning and submersion due to being thrown overboard by motion of merchant ship, subsequent encounter -V9210XS Drowning and submersion due to being thrown overboard by motion of merchant ship, sequela -V9211XA Drowning and submersion due to being thrown overboard by motion of passenger ship, initial encounter -V9211XD Drowning and submersion due to being thrown overboard by motion of passenger ship, subsequent encounter -V9211XS Drowning and submersion due to being thrown overboard by motion of passenger ship, sequela -V9212XA Drowning and submersion due to being thrown overboard by motion of fishing boat, initial encounter -V9212XD Drowning and submersion due to being thrown overboard by motion of fishing boat, subsequent encounter -V9212XS Drowning and submersion due to being thrown overboard by motion of fishing boat, sequela -V9213XA Drowning and submersion due to being thrown overboard by motion of other powered watercraft, initial encounter -V9213XD Drowning and submersion due to being thrown overboard by motion of other powered watercraft, subsequent encounter -V9213XS Drowning and submersion due to being thrown overboard by motion of other powered watercraft, sequela -V9214XA Drowning and submersion due to being thrown overboard by motion of sailboat, initial encounter -V9214XD Drowning and submersion due to being thrown overboard by motion of sailboat, subsequent encounter -V9214XS Drowning and submersion due to being thrown overboard by motion of sailboat, sequela -V9215XA Drowning and submersion due to being thrown overboard by motion of canoe or kayak, initial encounter -V9215XD Drowning and submersion due to being thrown overboard by motion of canoe or kayak, subsequent encounter -V9215XS Drowning and submersion due to being thrown overboard by motion of canoe or kayak, sequela -V9216XA Drowning and submersion due to being thrown overboard by motion of (nonpowered) inflatable craft, initial encounter -V9216XD Drowning and submersion due to being thrown overboard by motion of (nonpowered) inflatable craft, subsequent encounter -V9216XS Drowning and submersion due to being thrown overboard by motion of (nonpowered) inflatable craft, sequela -V9219XA Drowning and submersion due to being thrown overboard by motion of unspecified watercraft, initial encounter -V9219XD Drowning and submersion due to being thrown overboard by motion of unspecified watercraft, subsequent encounter -V9219XS Drowning and submersion due to being thrown overboard by motion of unspecified watercraft, sequela -V9220XA Drowning and submersion due to being washed overboard from merchant ship, initial encounter -V9220XD Drowning and submersion due to being washed overboard from merchant ship, subsequent encounter -V9220XS Drowning and submersion due to being washed overboard from merchant ship, sequela -V9221XA Drowning and submersion due to being washed overboard from passenger ship, initial encounter -V9221XD Drowning and submersion due to being washed overboard from passenger ship, subsequent encounter -V9221XS Drowning and submersion due to being washed overboard from passenger ship, sequela -V9222XA Drowning and submersion due to being washed overboard from fishing boat, initial encounter -V9222XD Drowning and submersion due to being washed overboard from fishing boat, subsequent encounter -V9222XS Drowning and submersion due to being washed overboard from fishing boat, sequela -V9223XA Drowning and submersion due to being washed overboard from other powered watercraft, initial encounter -V9223XD Drowning and submersion due to being washed overboard from other powered watercraft, subsequent encounter -V9223XS Drowning and submersion due to being washed overboard from other powered watercraft, sequela -V9224XA Drowning and submersion due to being washed overboard from sailboat, initial encounter -V9224XD Drowning and submersion due to being washed overboard from sailboat, subsequent encounter -V9224XS Drowning and submersion due to being washed overboard from sailboat, sequela -V9225XA Drowning and submersion due to being washed overboard from canoe or kayak, initial encounter -V9225XD Drowning and submersion due to being washed overboard from canoe or kayak, subsequent encounter -V9225XS Drowning and submersion due to being washed overboard from canoe or kayak, sequela -V9226XA Drowning and submersion due to being washed overboard from (nonpowered) inflatable craft, initial encounter -V9226XD Drowning and submersion due to being washed overboard from (nonpowered) inflatable craft, subsequent encounter -V9226XS Drowning and submersion due to being washed overboard from (nonpowered) inflatable craft, sequela -V9227XA Drowning and submersion due to being washed overboard from water-skis, initial encounter -V9227XD Drowning and submersion due to being washed overboard from water-skis, subsequent encounter -V9227XS Drowning and submersion due to being washed overboard from water-skis, sequela -V9228XA Drowning and submersion due to being washed overboard from other unpowered watercraft, initial encounter -V9228XD Drowning and submersion due to being washed overboard from other unpowered watercraft, subsequent encounter -V9228XS Drowning and submersion due to being washed overboard from other unpowered watercraft, sequela -V9229XA Drowning and submersion due to being washed overboard from unspecified watercraft, initial encounter -V9229XD Drowning and submersion due to being washed overboard from unspecified watercraft, subsequent encounter -V9229XS Drowning and submersion due to being washed overboard from unspecified watercraft, sequela -V9300XA Burn due to localized fire on board merchant vessel, initial encounter -V9300XD Burn due to localized fire on board merchant vessel, subsequent encounter -V9300XS Burn due to localized fire on board merchant vessel, sequela -V9301XA Burn due to localized fire on board passenger vessel, initial encounter -V9301XD Burn due to localized fire on board passenger vessel, subsequent encounter -V9301XS Burn due to localized fire on board passenger vessel, sequela -V9302XA Burn due to localized fire on board fishing boat, initial encounter -V9302XD Burn due to localized fire on board fishing boat, subsequent encounter -V9302XS Burn due to localized fire on board fishing boat, sequela -V9303XA Burn due to localized fire on board other powered watercraft, initial encounter -V9303XD Burn due to localized fire on board other powered watercraft, subsequent encounter -V9303XS Burn due to localized fire on board other powered watercraft, sequela -V9304XA Burn due to localized fire on board sailboat, initial encounter -V9304XD Burn due to localized fire on board sailboat, subsequent encounter -V9304XS Burn due to localized fire on board sailboat, sequela -V9309XA Burn due to localized fire on board unspecified watercraft, initial encounter -V9309XD Burn due to localized fire on board unspecified watercraft, subsequent encounter -V9309XS Burn due to localized fire on board unspecified watercraft, sequela -V9310XA Other burn on board merchant vessel, initial encounter -V9310XD Other burn on board merchant vessel, subsequent encounter -V9310XS Other burn on board merchant vessel, sequela -V9311XA Other burn on board passenger vessel, initial encounter -V9311XD Other burn on board passenger vessel, subsequent encounter -V9311XS Other burn on board passenger vessel, sequela -V9312XA Other burn on board fishing boat, initial encounter -V9312XD Other burn on board fishing boat, subsequent encounter -V9312XS Other burn on board fishing boat, sequela -V9313XA Other burn on board other powered watercraft, initial encounter -V9313XD Other burn on board other powered watercraft, subsequent encounter -V9313XS Other burn on board other powered watercraft, sequela -V9314XA Other burn on board sailboat, initial encounter -V9314XD Other burn on board sailboat, subsequent encounter -V9314XS Other burn on board sailboat, sequela -V9319XA Other burn on board unspecified watercraft, initial encounter -V9319XD Other burn on board unspecified watercraft, subsequent encounter -V9319XS Other burn on board unspecified watercraft, sequela -V9320XA Heat exposure on board merchant ship, initial encounter -V9320XD Heat exposure on board merchant ship, subsequent encounter -V9320XS Heat exposure on board merchant ship, sequela -V9321XA Heat exposure on board passenger ship, initial encounter -V9321XD Heat exposure on board passenger ship, subsequent encounter -V9321XS Heat exposure on board passenger ship, sequela -V9322XA Heat exposure on board fishing boat, initial encounter -V9322XD Heat exposure on board fishing boat, subsequent encounter -V9322XS Heat exposure on board fishing boat, sequela -V9323XA Heat exposure on board other powered watercraft, initial encounter -V9323XD Heat exposure on board other powered watercraft, subsequent encounter -V9323XS Heat exposure on board other powered watercraft, sequela -V9324XA Heat exposure on board sailboat, initial encounter -V9324XD Heat exposure on board sailboat, subsequent encounter -V9324XS Heat exposure on board sailboat, sequela -V9329XA Heat exposure on board unspecified watercraft, initial encounter -V9329XD Heat exposure on board unspecified watercraft, subsequent encounter -V9329XS Heat exposure on board unspecified watercraft, sequela -V9330XA Fall on board merchant ship, initial encounter -V9330XD Fall on board merchant ship, subsequent encounter -V9330XS Fall on board merchant ship, sequela -V9331XA Fall on board passenger ship, initial encounter -V9331XD Fall on board passenger ship, subsequent encounter -V9331XS Fall on board passenger ship, sequela -V9332XA Fall on board fishing boat, initial encounter -V9332XD Fall on board fishing boat, subsequent encounter -V9332XS Fall on board fishing boat, sequela -V9333XA Fall on board other powered watercraft, initial encounter -V9333XD Fall on board other powered watercraft, subsequent encounter -V9333XS Fall on board other powered watercraft, sequela -V9334XA Fall on board sailboat, initial encounter -V9334XD Fall on board sailboat, subsequent encounter -V9334XS Fall on board sailboat, sequela -V9335XA Fall on board canoe or kayak, initial encounter -V9335XD Fall on board canoe or kayak, subsequent encounter -V9335XS Fall on board canoe or kayak, sequela -V9336XA Fall on board (nonpowered) inflatable craft, initial encounter -V9336XD Fall on board (nonpowered) inflatable craft, subsequent encounter -V9336XS Fall on board (nonpowered) inflatable craft, sequela -V9338XA Fall on board other unpowered watercraft, initial encounter -V9338XD Fall on board other unpowered watercraft, subsequent encounter -V9338XS Fall on board other unpowered watercraft, sequela -V9339XA Fall on board unspecified watercraft, initial encounter -V9339XD Fall on board unspecified watercraft, subsequent encounter -V9339XS Fall on board unspecified watercraft, sequela -V9340XA Struck by falling object on merchant ship, initial encounter -V9340XD Struck by falling object on merchant ship, subsequent encounter -V9340XS Struck by falling object on merchant ship, sequela -V9341XA Struck by falling object on passenger ship, initial encounter -V9341XD Struck by falling object on passenger ship, subsequent encounter -V9341XS Struck by falling object on passenger ship, sequela -V9342XA Struck by falling object on fishing boat, initial encounter -V9342XD Struck by falling object on fishing boat, subsequent encounter -V9342XS Struck by falling object on fishing boat, sequela -V9343XA Struck by falling object on other powered watercraft, initial encounter -V9343XD Struck by falling object on other powered watercraft, subsequent encounter -V9343XS Struck by falling object on other powered watercraft, sequela -V9344XA Struck by falling object on sailboat, initial encounter -V9344XD Struck by falling object on sailboat, subsequent encounter -V9344XS Struck by falling object on sailboat, sequela -V9348XA Struck by falling object on other unpowered watercraft, initial encounter -V9348XD Struck by falling object on other unpowered watercraft, subsequent encounter -V9348XS Struck by falling object on other unpowered watercraft, sequela -V9349XA Struck by falling object on unspecified watercraft, initial encounter -V9349XD Struck by falling object on unspecified watercraft, subsequent encounter -V9349XS Struck by falling object on unspecified watercraft, sequela -V9350XA Explosion on board merchant ship, initial encounter -V9350XD Explosion on board merchant ship, subsequent encounter -V9350XS Explosion on board merchant ship, sequela -V9351XA Explosion on board passenger ship, initial encounter -V9351XD Explosion on board passenger ship, subsequent encounter -V9351XS Explosion on board passenger ship, sequela -V9352XA Explosion on board fishing boat, initial encounter -V9352XD Explosion on board fishing boat, subsequent encounter -V9352XS Explosion on board fishing boat, sequela -V9353XA Explosion on board other powered watercraft, initial encounter -V9353XD Explosion on board other powered watercraft, subsequent encounter -V9353XS Explosion on board other powered watercraft, sequela -V9354XA Explosion on board sailboat, initial encounter -V9354XD Explosion on board sailboat, subsequent encounter -V9354XS Explosion on board sailboat, sequela -V9359XA Explosion on board unspecified watercraft, initial encounter -V9359XD Explosion on board unspecified watercraft, subsequent encounter -V9359XS Explosion on board unspecified watercraft, sequela -V9360XA Machinery accident on board merchant ship, initial encounter -V9360XD Machinery accident on board merchant ship, subsequent encounter -V9360XS Machinery accident on board merchant ship, sequela -V9361XA Machinery accident on board passenger ship, initial encounter -V9361XD Machinery accident on board passenger ship, subsequent encounter -V9361XS Machinery accident on board passenger ship, sequela -V9362XA Machinery accident on board fishing boat, initial encounter -V9362XD Machinery accident on board fishing boat, subsequent encounter -V9362XS Machinery accident on board fishing boat, sequela -V9363XA Machinery accident on board other powered watercraft, initial encounter -V9363XD Machinery accident on board other powered watercraft, subsequent encounter -V9363XS Machinery accident on board other powered watercraft, sequela -V9364XA Machinery accident on board sailboat, initial encounter -V9364XD Machinery accident on board sailboat, subsequent encounter -V9364XS Machinery accident on board sailboat, sequela -V9369XA Machinery accident on board unspecified watercraft, initial encounter -V9369XD Machinery accident on board unspecified watercraft, subsequent encounter -V9369XS Machinery accident on board unspecified watercraft, sequela -V9380XA Other injury due to other accident on board merchant ship, initial encounter -V9380XD Other injury due to other accident on board merchant ship, subsequent encounter -V9380XS Other injury due to other accident on board merchant ship, sequela -V9381XA Other injury due to other accident on board passenger ship, initial encounter -V9381XD Other injury due to other accident on board passenger ship, subsequent encounter -V9381XS Other injury due to other accident on board passenger ship, sequela -V9382XA Other injury due to other accident on board fishing boat, initial encounter -V9382XD Other injury due to other accident on board fishing boat, subsequent encounter -V9382XS Other injury due to other accident on board fishing boat, sequela -V9383XA Other injury due to other accident on board other powered watercraft, initial encounter -V9383XD Other injury due to other accident on board other powered watercraft, subsequent encounter -V9383XS Other injury due to other accident on board other powered watercraft, sequela -V9384XA Other injury due to other accident on board sailboat, initial encounter -V9384XD Other injury due to other accident on board sailboat, subsequent encounter -V9384XS Other injury due to other accident on board sailboat, sequela -V9385XA Other injury due to other accident on board canoe or kayak, initial encounter -V9385XD Other injury due to other accident on board canoe or kayak, subsequent encounter -V9385XS Other injury due to other accident on board canoe or kayak, sequela -V9386XA Other injury due to other accident on board (nonpowered) inflatable craft, initial encounter -V9386XD Other injury due to other accident on board (nonpowered) inflatable craft, subsequent encounter -V9386XS Other injury due to other accident on board (nonpowered) inflatable craft, sequela -V9387XA Other injury due to other accident on board water-skis, initial encounter -V9387XD Other injury due to other accident on board water-skis, subsequent encounter -V9387XS Other injury due to other accident on board water-skis, sequela -V9388XA Other injury due to other accident on board other unpowered watercraft, initial encounter -V9388XD Other injury due to other accident on board other unpowered watercraft, subsequent encounter -V9388XS Other injury due to other accident on board other unpowered watercraft, sequela -V9389XA Other injury due to other accident on board unspecified watercraft, initial encounter -V9389XD Other injury due to other accident on board unspecified watercraft, subsequent encounter -V9389XS Other injury due to other accident on board unspecified watercraft, sequela -V940XXA Hitting object or bottom of body of water due to fall from watercraft, initial encounter -V940XXD Hitting object or bottom of body of water due to fall from watercraft, subsequent encounter -V940XXS Hitting object or bottom of body of water due to fall from watercraft, sequela -V9411XA Bather struck by powered watercraft, initial encounter -V9411XD Bather struck by powered watercraft, subsequent encounter -V9411XS Bather struck by powered watercraft, sequela -V9412XA Bather struck by nonpowered watercraft, initial encounter -V9412XD Bather struck by nonpowered watercraft, subsequent encounter -V9412XS Bather struck by nonpowered watercraft, sequela -V9421XA Rider of nonpowered watercraft struck by other nonpowered watercraft, initial encounter -V9421XD Rider of nonpowered watercraft struck by other nonpowered watercraft, subsequent encounter -V9421XS Rider of nonpowered watercraft struck by other nonpowered watercraft, sequela -V9422XA Rider of nonpowered watercraft struck by powered watercraft, initial encounter -V9422XD Rider of nonpowered watercraft struck by powered watercraft, subsequent encounter -V9422XS Rider of nonpowered watercraft struck by powered watercraft, sequela -V9431XA Injury to rider of (inflatable) recreational watercraft being pulled behind other watercraft, initial encounter -V9431XD Injury to rider of (inflatable) recreational watercraft being pulled behind other watercraft, subsequent encounter -V9431XS Injury to rider of (inflatable) recreational watercraft being pulled behind other watercraft, sequela -V9432XA Injury to rider of non-recreational watercraft being pulled behind other watercraft, initial encounter -V9432XD Injury to rider of non-recreational watercraft being pulled behind other watercraft, subsequent encounter -V9432XS Injury to rider of non-recreational watercraft being pulled behind other watercraft, sequela -V944XXA Injury to barefoot water-skier, initial encounter -V944XXD Injury to barefoot water-skier, subsequent encounter -V944XXS Injury to barefoot water-skier, sequela -V94810A Civilian watercraft involved in water transport accident with military watercraft, initial encounter -V94810D Civilian watercraft involved in water transport accident with military watercraft, subsequent encounter -V94810S Civilian watercraft involved in water transport accident with military watercraft, sequela -V94811A Civilian in water injured by military watercraft, initial encounter -V94811D Civilian in water injured by military watercraft, subsequent encounter -V94811S Civilian in water injured by military watercraft, sequela -V94818A Other water transport accident involving military watercraft, initial encounter -V94818D Other water transport accident involving military watercraft, subsequent encounter -V94818S Other water transport accident involving military watercraft, sequela -V9489XA Other water transport accident, initial encounter -V9489XD Other water transport accident, subsequent encounter -V9489XS Other water transport accident, sequela -V949XXA Unspecified water transport accident, initial encounter -V949XXD Unspecified water transport accident, subsequent encounter -V949XXS Unspecified water transport accident, sequela -V9500XA Unspecified helicopter accident injuring occupant, initial encounter -V9500XD Unspecified helicopter accident injuring occupant, subsequent encounter -V9500XS Unspecified helicopter accident injuring occupant, sequela -V9501XA Helicopter crash injuring occupant, initial encounter -V9501XD Helicopter crash injuring occupant, subsequent encounter -V9501XS Helicopter crash injuring occupant, sequela -V9502XA Forced landing of helicopter injuring occupant, initial encounter -V9502XD Forced landing of helicopter injuring occupant, subsequent encounter -V9502XS Forced landing of helicopter injuring occupant, sequela -V9503XA Helicopter collision injuring occupant, initial encounter -V9503XD Helicopter collision injuring occupant, subsequent encounter -V9503XS Helicopter collision injuring occupant, sequela -V9504XA Helicopter fire injuring occupant, initial encounter -V9504XD Helicopter fire injuring occupant, subsequent encounter -V9504XS Helicopter fire injuring occupant, sequela -V9505XA Helicopter explosion injuring occupant, initial encounter -V9505XD Helicopter explosion injuring occupant, subsequent encounter -V9505XS Helicopter explosion injuring occupant, sequela -V9509XA Other helicopter accident injuring occupant, initial encounter -V9509XD Other helicopter accident injuring occupant, subsequent encounter -V9509XS Other helicopter accident injuring occupant, sequela -V9510XA Unspecified ultralight, microlight or powered-glider accident injuring occupant, initial encounter -V9510XD Unspecified ultralight, microlight or powered-glider accident injuring occupant, subsequent encounter -V9510XS Unspecified ultralight, microlight or powered-glider accident injuring occupant, sequela -V9511XA Ultralight, microlight or powered-glider crash injuring occupant, initial encounter -V9511XD Ultralight, microlight or powered-glider crash injuring occupant, subsequent encounter -V9511XS Ultralight, microlight or powered-glider crash injuring occupant, sequela -V9512XA Forced landing of ultralight, microlight or powered-glider injuring occupant, initial encounter -V9512XD Forced landing of ultralight, microlight or powered-glider injuring occupant, subsequent encounter -V9512XS Forced landing of ultralight, microlight or powered-glider injuring occupant, sequela -V9513XA Ultralight, microlight or powered-glider collision injuring occupant, initial encounter -V9513XD Ultralight, microlight or powered-glider collision injuring occupant, subsequent encounter -V9513XS Ultralight, microlight or powered-glider collision injuring occupant, sequela -V9514XA Ultralight, microlight or powered-glider fire injuring occupant, initial encounter -V9514XD Ultralight, microlight or powered-glider fire injuring occupant, subsequent encounter -V9514XS Ultralight, microlight or powered-glider fire injuring occupant, sequela -V9515XA Ultralight, microlight or powered-glider explosion injuring occupant, initial encounter -V9515XD Ultralight, microlight or powered-glider explosion injuring occupant, subsequent encounter -V9515XS Ultralight, microlight or powered-glider explosion injuring occupant, sequela -V9519XA Other ultralight, microlight or powered-glider accident injuring occupant, initial encounter -V9519XD Other ultralight, microlight or powered-glider accident injuring occupant, subsequent encounter -V9519XS Other ultralight, microlight or powered-glider accident injuring occupant, sequela -V9520XA Unspecified accident to other private fixed-wing aircraft, injuring occupant, initial encounter -V9520XD Unspecified accident to other private fixed-wing aircraft, injuring occupant, subsequent encounter -V9520XS Unspecified accident to other private fixed-wing aircraft, injuring occupant, sequela -V9521XA Other private fixed-wing aircraft crash injuring occupant, initial encounter -V9521XD Other private fixed-wing aircraft crash injuring occupant, subsequent encounter -V9521XS Other private fixed-wing aircraft crash injuring occupant, sequela -V9522XA Forced landing of other private fixed-wing aircraft injuring occupant, initial encounter -V9522XD Forced landing of other private fixed-wing aircraft injuring occupant, subsequent encounter -V9522XS Forced landing of other private fixed-wing aircraft injuring occupant, sequela -V9523XA Other private fixed-wing aircraft collision injuring occupant, initial encounter -V9523XD Other private fixed-wing aircraft collision injuring occupant, subsequent encounter -V9523XS Other private fixed-wing aircraft collision injuring occupant, sequela -V9524XA Other private fixed-wing aircraft fire injuring occupant, initial encounter -V9524XD Other private fixed-wing aircraft fire injuring occupant, subsequent encounter -V9524XS Other private fixed-wing aircraft fire injuring occupant, sequela -V9525XA Other private fixed-wing aircraft explosion injuring occupant, initial encounter -V9525XD Other private fixed-wing aircraft explosion injuring occupant, subsequent encounter -V9525XS Other private fixed-wing aircraft explosion injuring occupant, sequela -V9529XA Other accident to other private fixed-wing aircraft injuring occupant, initial encounter -V9529XD Other accident to other private fixed-wing aircraft injuring occupant, subsequent encounter -V9529XS Other accident to other private fixed-wing aircraft injuring occupant, sequela -V9530XA Unspecified accident to commercial fixed-wing aircraft injuring occupant, initial encounter -V9530XD Unspecified accident to commercial fixed-wing aircraft injuring occupant, subsequent encounter -V9530XS Unspecified accident to commercial fixed-wing aircraft injuring occupant, sequela -V9531XA Commercial fixed-wing aircraft crash injuring occupant, initial encounter -V9531XD Commercial fixed-wing aircraft crash injuring occupant, subsequent encounter -V9531XS Commercial fixed-wing aircraft crash injuring occupant, sequela -V9532XA Forced landing of commercial fixed-wing aircraft injuring occupant, initial encounter -V9532XD Forced landing of commercial fixed-wing aircraft injuring occupant, subsequent encounter -V9532XS Forced landing of commercial fixed-wing aircraft injuring occupant, sequela -V9533XA Commercial fixed-wing aircraft collision injuring occupant, initial encounter -V9533XD Commercial fixed-wing aircraft collision injuring occupant, subsequent encounter -V9533XS Commercial fixed-wing aircraft collision injuring occupant, sequela -V9534XA Commercial fixed-wing aircraft fire injuring occupant, initial encounter -V9534XD Commercial fixed-wing aircraft fire injuring occupant, subsequent encounter -V9534XS Commercial fixed-wing aircraft fire injuring occupant, sequela -V9535XA Commercial fixed-wing aircraft explosion injuring occupant, initial encounter -V9535XD Commercial fixed-wing aircraft explosion injuring occupant, subsequent encounter -V9535XS Commercial fixed-wing aircraft explosion injuring occupant, sequela -V9539XA Other accident to commercial fixed-wing aircraft injuring occupant, initial encounter -V9539XD Other accident to commercial fixed-wing aircraft injuring occupant, subsequent encounter -V9539XS Other accident to commercial fixed-wing aircraft injuring occupant, sequela -V9540XA Unspecified spacecraft accident injuring occupant, initial encounter -V9540XD Unspecified spacecraft accident injuring occupant, subsequent encounter -V9540XS Unspecified spacecraft accident injuring occupant, sequela -V9541XA Spacecraft crash injuring occupant, initial encounter -V9541XD Spacecraft crash injuring occupant, subsequent encounter -V9541XS Spacecraft crash injuring occupant, sequela -V9542XA Forced landing of spacecraft injuring occupant, initial encounter -V9542XD Forced landing of spacecraft injuring occupant, subsequent encounter -V9542XS Forced landing of spacecraft injuring occupant, sequela -V9543XA Spacecraft collision injuring occupant, initial encounter -V9543XD Spacecraft collision injuring occupant, subsequent encounter -V9543XS Spacecraft collision injuring occupant, sequela -V9544XA Spacecraft fire injuring occupant, initial encounter -V9544XD Spacecraft fire injuring occupant, subsequent encounter -V9544XS Spacecraft fire injuring occupant, sequela -V9545XA Spacecraft explosion injuring occupant, initial encounter -V9545XD Spacecraft explosion injuring occupant, subsequent encounter -V9545XS Spacecraft explosion injuring occupant, sequela -V9549XA Other spacecraft accident injuring occupant, initial encounter -V9549XD Other spacecraft accident injuring occupant, subsequent encounter -V9549XS Other spacecraft accident injuring occupant, sequela -V958XXA Other powered aircraft accidents injuring occupant, initial encounter -V958XXD Other powered aircraft accidents injuring occupant, subsequent encounter -V958XXS Other powered aircraft accidents injuring occupant, sequela -V959XXA Unspecified aircraft accident injuring occupant, initial encounter -V959XXD Unspecified aircraft accident injuring occupant, subsequent encounter -V959XXS Unspecified aircraft accident injuring occupant, sequela -V9600XA Unspecified balloon accident injuring occupant, initial encounter -V9600XD Unspecified balloon accident injuring occupant, subsequent encounter -V9600XS Unspecified balloon accident injuring occupant, sequela -V9601XA Balloon crash injuring occupant, initial encounter -V9601XD Balloon crash injuring occupant, subsequent encounter -V9601XS Balloon crash injuring occupant, sequela -V9602XA Forced landing of balloon injuring occupant, initial encounter -V9602XD Forced landing of balloon injuring occupant, subsequent encounter -V9602XS Forced landing of balloon injuring occupant, sequela -V9603XA Balloon collision injuring occupant, initial encounter -V9603XD Balloon collision injuring occupant, subsequent encounter -V9603XS Balloon collision injuring occupant, sequela -V9604XA Balloon fire injuring occupant, initial encounter -V9604XD Balloon fire injuring occupant, subsequent encounter -V9604XS Balloon fire injuring occupant, sequela -V9605XA Balloon explosion injuring occupant, initial encounter -V9605XD Balloon explosion injuring occupant, subsequent encounter -V9605XS Balloon explosion injuring occupant, sequela -V9609XA Other balloon accident injuring occupant, initial encounter -V9609XD Other balloon accident injuring occupant, subsequent encounter -V9609XS Other balloon accident injuring occupant, sequela -V9610XA Unspecified hang-glider accident injuring occupant, initial encounter -V9610XD Unspecified hang-glider accident injuring occupant, subsequent encounter -V9610XS Unspecified hang-glider accident injuring occupant, sequela -V9611XA Hang-glider crash injuring occupant, initial encounter -V9611XD Hang-glider crash injuring occupant, subsequent encounter -V9611XS Hang-glider crash injuring occupant, sequela -V9612XA Forced landing of hang-glider injuring occupant, initial encounter -V9612XD Forced landing of hang-glider injuring occupant, subsequent encounter -V9612XS Forced landing of hang-glider injuring occupant, sequela -V9613XA Hang-glider collision injuring occupant, initial encounter -V9613XD Hang-glider collision injuring occupant, subsequent encounter -V9613XS Hang-glider collision injuring occupant, sequela -V9614XA Hang-glider fire injuring occupant, initial encounter -V9614XD Hang-glider fire injuring occupant, subsequent encounter -V9614XS Hang-glider fire injuring occupant, sequela -V9615XA Hang-glider explosion injuring occupant, initial encounter -V9615XD Hang-glider explosion injuring occupant, subsequent encounter -V9615XS Hang-glider explosion injuring occupant, sequela -V9619XA Other hang-glider accident injuring occupant, initial encounter -V9619XD Other hang-glider accident injuring occupant, subsequent encounter -V9619XS Other hang-glider accident injuring occupant, sequela -V9620XA Unspecified glider (nonpowered) accident injuring occupant, initial encounter -V9620XD Unspecified glider (nonpowered) accident injuring occupant, subsequent encounter -V9620XS Unspecified glider (nonpowered) accident injuring occupant, sequela -V9621XA Glider (nonpowered) crash injuring occupant, initial encounter -V9621XD Glider (nonpowered) crash injuring occupant, subsequent encounter -V9621XS Glider (nonpowered) crash injuring occupant, sequela -V9622XA Forced landing of glider (nonpowered) injuring occupant, initial encounter -V9622XD Forced landing of glider (nonpowered) injuring occupant, subsequent encounter -V9622XS Forced landing of glider (nonpowered) injuring occupant, sequela -V9623XA Glider (nonpowered) collision injuring occupant, initial encounter -V9623XD Glider (nonpowered) collision injuring occupant, subsequent encounter -V9623XS Glider (nonpowered) collision injuring occupant, sequela -V9624XA Glider (nonpowered) fire injuring occupant, initial encounter -V9624XD Glider (nonpowered) fire injuring occupant, subsequent encounter -V9624XS Glider (nonpowered) fire injuring occupant, sequela -V9625XA Glider (nonpowered) explosion injuring occupant, initial encounter -V9625XD Glider (nonpowered) explosion injuring occupant, subsequent encounter -V9625XS Glider (nonpowered) explosion injuring occupant, sequela -V9629XA Other glider (nonpowered) accident injuring occupant, initial encounter -V9629XD Other glider (nonpowered) accident injuring occupant, subsequent encounter -V9629XS Other glider (nonpowered) accident injuring occupant, sequela -V968XXA Other nonpowered-aircraft accidents injuring occupant, initial encounter -V968XXD Other nonpowered-aircraft accidents injuring occupant, subsequent encounter -V968XXS Other nonpowered-aircraft accidents injuring occupant, sequela -V969XXA Unspecified nonpowered-aircraft accident injuring occupant, initial encounter -V969XXD Unspecified nonpowered-aircraft accident injuring occupant, subsequent encounter -V969XXS Unspecified nonpowered-aircraft accident injuring occupant, sequela -V970XXA Occupant of aircraft injured in other specified air transport accidents, initial encounter -V970XXD Occupant of aircraft injured in other specified air transport accidents, subsequent encounter -V970XXS Occupant of aircraft injured in other specified air transport accidents, sequela -V971XXA Person injured while boarding or alighting from aircraft, initial encounter -V971XXD Person injured while boarding or alighting from aircraft, subsequent encounter -V971XXS Person injured while boarding or alighting from aircraft, sequela -V9721XA Parachutist entangled in object, initial encounter -V9721XD Parachutist entangled in object, subsequent encounter -V9721XS Parachutist entangled in object, sequela -V9722XA Parachutist injured on landing, initial encounter -V9722XD Parachutist injured on landing, subsequent encounter -V9722XS Parachutist injured on landing, sequela -V9729XA Other parachutist accident, initial encounter -V9729XD Other parachutist accident, subsequent encounter -V9729XS Other parachutist accident, sequela -V9731XA Hit by object falling from aircraft, initial encounter -V9731XD Hit by object falling from aircraft, subsequent encounter -V9731XS Hit by object falling from aircraft, sequela -V9732XA Injured by rotating propeller, initial encounter -V9732XD Injured by rotating propeller, subsequent encounter -V9732XS Injured by rotating propeller, sequela -V9733XA Sucked into jet engine, initial encounter -V9733XD Sucked into jet engine, subsequent encounter -V9733XS Sucked into jet engine, sequela -V9739XA Other injury to person on ground due to air transport accident, initial encounter -V9739XD Other injury to person on ground due to air transport accident, subsequent encounter -V9739XS Other injury to person on ground due to air transport accident, sequela -V97810A Civilian aircraft involved in air transport accident with military aircraft, initial encounter -V97810D Civilian aircraft involved in air transport accident with military aircraft, subsequent encounter -V97810S Civilian aircraft involved in air transport accident with military aircraft, sequela -V97811A Civilian injured by military aircraft, initial encounter -V97811D Civilian injured by military aircraft, subsequent encounter -V97811S Civilian injured by military aircraft, sequela -V97818A Other air transport accident involving military aircraft, initial encounter -V97818D Other air transport accident involving military aircraft, subsequent encounter -V97818S Other air transport accident involving military aircraft, sequela -V9789XA Other air transport accidents, not elsewhere classified, initial encounter -V9789XD Other air transport accidents, not elsewhere classified, subsequent encounter -V9789XS Other air transport accidents, not elsewhere classified, sequela -V980XXA Accident to, on or involving cable-car, not on rails, initial encounter -V980XXD Accident to, on or involving cable-car, not on rails, subsequent encounter -V980XXS Accident to, on or involving cable-car, not on rails, sequela -V981XXA Accident to, on or involving land-yacht, initial encounter -V981XXD Accident to, on or involving land-yacht, subsequent encounter -V981XXS Accident to, on or involving land-yacht, sequela -V982XXA Accident to, on or involving ice yacht, initial encounter -V982XXD Accident to, on or involving ice yacht, subsequent encounter -V982XXS Accident to, on or involving ice yacht, sequela -V983XXA Accident to, on or involving ski lift, initial encounter -V983XXD Accident to, on or involving ski lift, subsequent encounter -V983XXS Accident to, on or involving ski lift, sequela -V988XXA Other specified transport accidents, initial encounter -V988XXD Other specified transport accidents, subsequent encounter -V988XXS Other specified transport accidents, sequela -V99XXXA Unspecified transport accident, initial encounter -V99XXXD Unspecified transport accident, subsequent encounter -V99XXXS Unspecified transport accident, sequela -W000XXA Fall on same level due to ice and snow, initial encounter -W000XXD Fall on same level due to ice and snow, subsequent encounter -W000XXS Fall on same level due to ice and snow, sequela -W001XXA Fall from stairs and steps due to ice and snow, initial encounter -W001XXD Fall from stairs and steps due to ice and snow, subsequent encounter -W001XXS Fall from stairs and steps due to ice and snow, sequela -W002XXA Other fall from one level to another due to ice and snow, initial encounter -W002XXD Other fall from one level to another due to ice and snow, subsequent encounter -W002XXS Other fall from one level to another due to ice and snow, sequela -W009XXA Unspecified fall due to ice and snow, initial encounter -W009XXD Unspecified fall due to ice and snow, subsequent encounter -W009XXS Unspecified fall due to ice and snow, sequela -W010XXA Fall on same level from slipping, tripping and stumbling without subsequent striking against object, initial encounter -W010XXD Fall on same level from slipping, tripping and stumbling without subsequent striking against object, subsequent encounter -W010XXS Fall on same level from slipping, tripping and stumbling without subsequent striking against object, sequela -W0110XA Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified object, initial encounter -W0110XD Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified object, subsequent encounter -W0110XS Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified object, sequela -W01110A Fall on same level from slipping, tripping and stumbling with subsequent striking against sharp glass, initial encounter -W01110D Fall on same level from slipping, tripping and stumbling with subsequent striking against sharp glass, subsequent encounter -W01110S Fall on same level from slipping, tripping and stumbling with subsequent striking against sharp glass, sequela -W01111A Fall on same level from slipping, tripping and stumbling with subsequent striking against power tool or machine, initial encounter -W01111D Fall on same level from slipping, tripping and stumbling with subsequent striking against power tool or machine, subsequent encounter -W01111S Fall on same level from slipping, tripping and stumbling with subsequent striking against power tool or machine, sequela -W01118A Fall on same level from slipping, tripping and stumbling with subsequent striking against other sharp object, initial encounter -W01118D Fall on same level from slipping, tripping and stumbling with subsequent striking against other sharp object, subsequent encounter -W01118S Fall on same level from slipping, tripping and stumbling with subsequent striking against other sharp object, sequela -W01119A Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified sharp object, initial encounter -W01119D Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified sharp object, subsequent encounter -W01119S Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified sharp object, sequela -W01190A Fall on same level from slipping, tripping and stumbling with subsequent striking against furniture, initial encounter -W01190D Fall on same level from slipping, tripping and stumbling with subsequent striking against furniture, subsequent encounter -W01190S Fall on same level from slipping, tripping and stumbling with subsequent striking against furniture, sequela -W01198A Fall on same level from slipping, tripping and stumbling with subsequent striking against other object, initial encounter -W01198D Fall on same level from slipping, tripping and stumbling with subsequent striking against other object, subsequent encounter -W01198S Fall on same level from slipping, tripping and stumbling with subsequent striking against other object, sequela -W03XXXA Other fall on same level due to collision with another person, initial encounter -W03XXXD Other fall on same level due to collision with another person, subsequent encounter -W03XXXS Other fall on same level due to collision with another person, sequela -W04XXXA Fall while being carried or supported by other persons, initial encounter -W04XXXD Fall while being carried or supported by other persons, subsequent encounter -W04XXXS Fall while being carried or supported by other persons, sequela -W050XXA Fall from non-moving wheelchair, initial encounter -W050XXD Fall from non-moving wheelchair, subsequent encounter -W050XXS Fall from non-moving wheelchair, sequela -W051XXA Fall from non-moving nonmotorized scooter, initial encounter -W051XXD Fall from non-moving nonmotorized scooter, subsequent encounter -W051XXS Fall from non-moving nonmotorized scooter, sequela -W052XXA Fall from non-moving motorized mobility scooter, initial encounter -W052XXD Fall from non-moving motorized mobility scooter, subsequent encounter -W052XXS Fall from non-moving motorized mobility scooter, sequela -W06XXXA Fall from bed, initial encounter -W06XXXD Fall from bed, subsequent encounter -W06XXXS Fall from bed, sequela -W07XXXA Fall from chair, initial encounter -W07XXXD Fall from chair, subsequent encounter -W07XXXS Fall from chair, sequela -W08XXXA Fall from other furniture, initial encounter -W08XXXD Fall from other furniture, subsequent encounter -W08XXXS Fall from other furniture, sequela -W090XXA Fall on or from playground slide, initial encounter -W090XXD Fall on or from playground slide, subsequent encounter -W090XXS Fall on or from playground slide, sequela -W091XXA Fall from playground swing, initial encounter -W091XXD Fall from playground swing, subsequent encounter -W091XXS Fall from playground swing, sequela -W092XXA Fall on or from jungle gym, initial encounter -W092XXD Fall on or from jungle gym, subsequent encounter -W092XXS Fall on or from jungle gym, sequela -W098XXA Fall on or from other playground equipment, initial encounter -W098XXD Fall on or from other playground equipment, subsequent encounter -W098XXS Fall on or from other playground equipment, sequela -W100XXA Fall (on)(from) escalator, initial encounter -W100XXD Fall (on)(from) escalator, subsequent encounter -W100XXS Fall (on)(from) escalator, sequela -W101XXA Fall (on)(from) sidewalk curb, initial encounter -W101XXD Fall (on)(from) sidewalk curb, subsequent encounter -W101XXS Fall (on)(from) sidewalk curb, sequela -W102XXA Fall (on)(from) incline, initial encounter -W102XXD Fall (on)(from) incline, subsequent encounter -W102XXS Fall (on)(from) incline, sequela -W108XXA Fall (on) (from) other stairs and steps, initial encounter -W108XXD Fall (on) (from) other stairs and steps, subsequent encounter -W108XXS Fall (on) (from) other stairs and steps, sequela -W109XXA Fall (on) (from) unspecified stairs and steps, initial encounter -W109XXD Fall (on) (from) unspecified stairs and steps, subsequent encounter -W109XXS Fall (on) (from) unspecified stairs and steps, sequela -W11XXXA Fall on and from ladder, initial encounter -W11XXXD Fall on and from ladder, subsequent encounter -W11XXXS Fall on and from ladder, sequela -W12XXXA Fall on and from scaffolding, initial encounter -W12XXXD Fall on and from scaffolding, subsequent encounter -W12XXXS Fall on and from scaffolding, sequela -W130XXA Fall from, out of or through balcony, initial encounter -W130XXD Fall from, out of or through balcony, subsequent encounter -W130XXS Fall from, out of or through balcony, sequela -W131XXA Fall from, out of or through bridge, initial encounter -W131XXD Fall from, out of or through bridge, subsequent encounter -W131XXS Fall from, out of or through bridge, sequela -W132XXA Fall from, out of or through roof, initial encounter -W132XXD Fall from, out of or through roof, subsequent encounter -W132XXS Fall from, out of or through roof, sequela -W133XXA Fall through floor, initial encounter -W133XXD Fall through floor, subsequent encounter -W133XXS Fall through floor, sequela -W134XXA Fall from, out of or through window, initial encounter -W134XXD Fall from, out of or through window, subsequent encounter -W134XXS Fall from, out of or through window, sequela -W138XXA Fall from, out of or through other building or structure, initial encounter -W138XXD Fall from, out of or through other building or structure, subsequent encounter -W138XXS Fall from, out of or through other building or structure, sequela -W139XXA Fall from, out of or through building, not otherwise specified, initial encounter -W139XXD Fall from, out of or through building, not otherwise specified, subsequent encounter -W139XXS Fall from, out of or through building, not otherwise specified, sequela -W14XXXA Fall from tree, initial encounter -W14XXXD Fall from tree, subsequent encounter -W14XXXS Fall from tree, sequela -W15XXXA Fall from cliff, initial encounter -W15XXXD Fall from cliff, subsequent encounter -W15XXXS Fall from cliff, sequela -W16011A Fall into swimming pool striking water surface causing drowning and submersion, initial encounter -W16011D Fall into swimming pool striking water surface causing drowning and submersion, subsequent encounter -W16011S Fall into swimming pool striking water surface causing drowning and submersion, sequela -W16012A Fall into swimming pool striking water surface causing other injury, initial encounter -W16012D Fall into swimming pool striking water surface causing other injury, subsequent encounter -W16012S Fall into swimming pool striking water surface causing other injury, sequela -W16021A Fall into swimming pool striking bottom causing drowning and submersion, initial encounter -W16021D Fall into swimming pool striking bottom causing drowning and submersion, subsequent encounter -W16021S Fall into swimming pool striking bottom causing drowning and submersion, sequela -W16022A Fall into swimming pool striking bottom causing other injury, initial encounter -W16022D Fall into swimming pool striking bottom causing other injury, subsequent encounter -W16022S Fall into swimming pool striking bottom causing other injury, sequela -W16031A Fall into swimming pool striking wall causing drowning and submersion, initial encounter -W16031D Fall into swimming pool striking wall causing drowning and submersion, subsequent encounter -W16031S Fall into swimming pool striking wall causing drowning and submersion, sequela -W16032A Fall into swimming pool striking wall causing other injury, initial encounter -W16032D Fall into swimming pool striking wall causing other injury, subsequent encounter -W16032S Fall into swimming pool striking wall causing other injury, sequela -W16111A Fall into natural body of water striking water surface causing drowning and submersion, initial encounter -W16111D Fall into natural body of water striking water surface causing drowning and submersion, subsequent encounter -W16111S Fall into natural body of water striking water surface causing drowning and submersion, sequela -W16112A Fall into natural body of water striking water surface causing other injury, initial encounter -W16112D Fall into natural body of water striking water surface causing other injury, subsequent encounter -W16112S Fall into natural body of water striking water surface causing other injury, sequela -W16121A Fall into natural body of water striking bottom causing drowning and submersion, initial encounter -W16121D Fall into natural body of water striking bottom causing drowning and submersion, subsequent encounter -W16121S Fall into natural body of water striking bottom causing drowning and submersion, sequela -W16122A Fall into natural body of water striking bottom causing other injury, initial encounter -W16122D Fall into natural body of water striking bottom causing other injury, subsequent encounter -W16122S Fall into natural body of water striking bottom causing other injury, sequela -W16131A Fall into natural body of water striking side causing drowning and submersion, initial encounter -W16131D Fall into natural body of water striking side causing drowning and submersion, subsequent encounter -W16131S Fall into natural body of water striking side causing drowning and submersion, sequela -W16132A Fall into natural body of water striking side causing other injury, initial encounter -W16132D Fall into natural body of water striking side causing other injury, subsequent encounter -W16132S Fall into natural body of water striking side causing other injury, sequela -W16211A Fall in (into) filled bathtub causing drowning and submersion, initial encounter -W16211D Fall in (into) filled bathtub causing drowning and submersion, subsequent encounter -W16211S Fall in (into) filled bathtub causing drowning and submersion, sequela -W16212A Fall in (into) filled bathtub causing other injury, initial encounter -W16212D Fall in (into) filled bathtub causing other injury, subsequent encounter -W16212S Fall in (into) filled bathtub causing other injury, sequela -W16221A Fall in (into) bucket of water causing drowning and submersion, initial encounter -W16221D Fall in (into) bucket of water causing drowning and submersion, subsequent encounter -W16221S Fall in (into) bucket of water causing drowning and submersion, sequela -W16222A Fall in (into) bucket of water causing other injury, initial encounter -W16222D Fall in (into) bucket of water causing other injury, subsequent encounter -W16222S Fall in (into) bucket of water causing other injury, sequela -W16311A Fall into other water striking water surface causing drowning and submersion, initial encounter -W16311D Fall into other water striking water surface causing drowning and submersion, subsequent encounter -W16311S Fall into other water striking water surface causing drowning and submersion, sequela -W16312A Fall into other water striking water surface causing other injury, initial encounter -W16312D Fall into other water striking water surface causing other injury, subsequent encounter -W16312S Fall into other water striking water surface causing other injury, sequela -W16321A Fall into other water striking bottom causing drowning and submersion, initial encounter -W16321D Fall into other water striking bottom causing drowning and submersion, subsequent encounter -W16321S Fall into other water striking bottom causing drowning and submersion, sequela -W16322A Fall into other water striking bottom causing other injury, initial encounter -W16322D Fall into other water striking bottom causing other injury, subsequent encounter -W16322S Fall into other water striking bottom causing other injury, sequela -W16331A Fall into other water striking wall causing drowning and submersion, initial encounter -W16331D Fall into other water striking wall causing drowning and submersion, subsequent encounter -W16331S Fall into other water striking wall causing drowning and submersion, sequela -W16332A Fall into other water striking wall causing other injury, initial encounter -W16332D Fall into other water striking wall causing other injury, subsequent encounter -W16332S Fall into other water striking wall causing other injury, sequela -W1641XA Fall into unspecified water causing drowning and submersion, initial encounter -W1641XD Fall into unspecified water causing drowning and submersion, subsequent encounter -W1641XS Fall into unspecified water causing drowning and submersion, sequela -W1642XA Fall into unspecified water causing other injury, initial encounter -W1642XD Fall into unspecified water causing other injury, subsequent encounter -W1642XS Fall into unspecified water causing other injury, sequela -W16511A Jumping or diving into swimming pool striking water surface causing drowning and submersion, initial encounter -W16511D Jumping or diving into swimming pool striking water surface causing drowning and submersion, subsequent encounter -W16511S Jumping or diving into swimming pool striking water surface causing drowning and submersion, sequela -W16512A Jumping or diving into swimming pool striking water surface causing other injury, initial encounter -W16512D Jumping or diving into swimming pool striking water surface causing other injury, subsequent encounter -W16512S Jumping or diving into swimming pool striking water surface causing other injury, sequela -W16521A Jumping or diving into swimming pool striking bottom causing drowning and submersion, initial encounter -W16521D Jumping or diving into swimming pool striking bottom causing drowning and submersion, subsequent encounter -W16521S Jumping or diving into swimming pool striking bottom causing drowning and submersion, sequela -W16522A Jumping or diving into swimming pool striking bottom causing other injury, initial encounter -W16522D Jumping or diving into swimming pool striking bottom causing other injury, subsequent encounter -W16522S Jumping or diving into swimming pool striking bottom causing other injury, sequela -W16531A Jumping or diving into swimming pool striking wall causing drowning and submersion, initial encounter -W16531D Jumping or diving into swimming pool striking wall causing drowning and submersion, subsequent encounter -W16531S Jumping or diving into swimming pool striking wall causing drowning and submersion, sequela -W16532A Jumping or diving into swimming pool striking wall causing other injury, initial encounter -W16532D Jumping or diving into swimming pool striking wall causing other injury, subsequent encounter -W16532S Jumping or diving into swimming pool striking wall causing other injury, sequela -W16611A Jumping or diving into natural body of water striking water surface causing drowning and submersion, initial encounter -W16611D Jumping or diving into natural body of water striking water surface causing drowning and submersion, subsequent encounter -W16611S Jumping or diving into natural body of water striking water surface causing drowning and submersion, sequela -W16612A Jumping or diving into natural body of water striking water surface causing other injury, initial encounter -W16612D Jumping or diving into natural body of water striking water surface causing other injury, subsequent encounter -W16612S Jumping or diving into natural body of water striking water surface causing other injury, sequela -W16621A Jumping or diving into natural body of water striking bottom causing drowning and submersion, initial encounter -W16621D Jumping or diving into natural body of water striking bottom causing drowning and submersion, subsequent encounter -W16621S Jumping or diving into natural body of water striking bottom causing drowning and submersion, sequela -W16622A Jumping or diving into natural body of water striking bottom causing other injury, initial encounter -W16622D Jumping or diving into natural body of water striking bottom causing other injury, subsequent encounter -W16622S Jumping or diving into natural body of water striking bottom causing other injury, sequela -W16711A Jumping or diving from boat striking water surface causing drowning and submersion, initial encounter -W16711D Jumping or diving from boat striking water surface causing drowning and submersion, subsequent encounter -W16711S Jumping or diving from boat striking water surface causing drowning and submersion, sequela -W16712A Jumping or diving from boat striking water surface causing other injury, initial encounter -W16712D Jumping or diving from boat striking water surface causing other injury, subsequent encounter -W16712S Jumping or diving from boat striking water surface causing other injury, sequela -W16721A Jumping or diving from boat striking bottom causing drowning and submersion, initial encounter -W16721D Jumping or diving from boat striking bottom causing drowning and submersion, subsequent encounter -W16721S Jumping or diving from boat striking bottom causing drowning and submersion, sequela -W16722A Jumping or diving from boat striking bottom causing other injury, initial encounter -W16722D Jumping or diving from boat striking bottom causing other injury, subsequent encounter -W16722S Jumping or diving from boat striking bottom causing other injury, sequela -W16811A Jumping or diving into other water striking water surface causing drowning and submersion, initial encounter -W16811D Jumping or diving into other water striking water surface causing drowning and submersion, subsequent encounter -W16811S Jumping or diving into other water striking water surface causing drowning and submersion, sequela -W16812A Jumping or diving into other water striking water surface causing other injury, initial encounter -W16812D Jumping or diving into other water striking water surface causing other injury, subsequent encounter -W16812S Jumping or diving into other water striking water surface causing other injury, sequela -W16821A Jumping or diving into other water striking bottom causing drowning and submersion, initial encounter -W16821D Jumping or diving into other water striking bottom causing drowning and submersion, subsequent encounter -W16821S Jumping or diving into other water striking bottom causing drowning and submersion, sequela -W16822A Jumping or diving into other water striking bottom causing other injury, initial encounter -W16822D Jumping or diving into other water striking bottom causing other injury, subsequent encounter -W16822S Jumping or diving into other water striking bottom causing other injury, sequela -W16831A Jumping or diving into other water striking wall causing drowning and submersion, initial encounter -W16831D Jumping or diving into other water striking wall causing drowning and submersion, subsequent encounter -W16831S Jumping or diving into other water striking wall causing drowning and submersion, sequela -W16832A Jumping or diving into other water striking wall causing other injury, initial encounter -W16832D Jumping or diving into other water striking wall causing other injury, subsequent encounter -W16832S Jumping or diving into other water striking wall causing other injury, sequela -W1691XA Jumping or diving into unspecified water causing drowning and submersion, initial encounter -W1691XD Jumping or diving into unspecified water causing drowning and submersion, subsequent encounter -W1691XS Jumping or diving into unspecified water causing drowning and submersion, sequela -W1692XA Jumping or diving into unspecified water causing other injury, initial encounter -W1692XD Jumping or diving into unspecified water causing other injury, subsequent encounter -W1692XS Jumping or diving into unspecified water causing other injury, sequela -W170XXA Fall into well, initial encounter -W170XXD Fall into well, subsequent encounter -W170XXS Fall into well, sequela -W171XXA Fall into storm drain or manhole, initial encounter -W171XXD Fall into storm drain or manhole, subsequent encounter -W171XXS Fall into storm drain or manhole, sequela -W172XXA Fall into hole, initial encounter -W172XXD Fall into hole, subsequent encounter -W172XXS Fall into hole, sequela -W173XXA Fall into empty swimming pool, initial encounter -W173XXD Fall into empty swimming pool, subsequent encounter -W173XXS Fall into empty swimming pool, sequela -W174XXA Fall from dock, initial encounter -W174XXD Fall from dock, subsequent encounter -W174XXS Fall from dock, sequela -W1781XA Fall down embankment (hill), initial encounter -W1781XD Fall down embankment (hill), subsequent encounter -W1781XS Fall down embankment (hill), sequela -W1782XA Fall from (out of) grocery cart, initial encounter -W1782XD Fall from (out of) grocery cart, subsequent encounter -W1782XS Fall from (out of) grocery cart, sequela -W1789XA Other fall from one level to another, initial encounter -W1789XD Other fall from one level to another, subsequent encounter -W1789XS Other fall from one level to another, sequela -W1800XA Striking against unspecified object with subsequent fall, initial encounter -W1800XD Striking against unspecified object with subsequent fall, subsequent encounter -W1800XS Striking against unspecified object with subsequent fall, sequela -W1801XA Striking against sports equipment with subsequent fall, initial encounter -W1801XD Striking against sports equipment with subsequent fall, subsequent encounter -W1801XS Striking against sports equipment with subsequent fall, sequela -W1802XA Striking against glass with subsequent fall, initial encounter -W1802XD Striking against glass with subsequent fall, subsequent encounter -W1802XS Striking against glass with subsequent fall, sequela -W1809XA Striking against other object with subsequent fall, initial encounter -W1809XD Striking against other object with subsequent fall, subsequent encounter -W1809XS Striking against other object with subsequent fall, sequela -W1811XA Fall from or off toilet without subsequent striking against object, initial encounter -W1811XD Fall from or off toilet without subsequent striking against object, subsequent encounter -W1811XS Fall from or off toilet without subsequent striking against object, sequela -W1812XA Fall from or off toilet with subsequent striking against object, initial encounter -W1812XD Fall from or off toilet with subsequent striking against object, subsequent encounter -W1812XS Fall from or off toilet with subsequent striking against object, sequela -W182XXA Fall in (into) shower or empty bathtub, initial encounter -W182XXD Fall in (into) shower or empty bathtub, subsequent encounter -W182XXS Fall in (into) shower or empty bathtub, sequela -W1830XA Fall on same level, unspecified, initial encounter -W1830XD Fall on same level, unspecified, subsequent encounter -W1830XS Fall on same level, unspecified, sequela -W1831XA Fall on same level due to stepping on an object, initial encounter -W1831XD Fall on same level due to stepping on an object, subsequent encounter -W1831XS Fall on same level due to stepping on an object, sequela -W1839XA Other fall on same level, initial encounter -W1839XD Other fall on same level, subsequent encounter -W1839XS Other fall on same level, sequela -W1840XA Slipping, tripping and stumbling without falling, unspecified, initial encounter -W1840XD Slipping, tripping and stumbling without falling, unspecified, subsequent encounter -W1840XS Slipping, tripping and stumbling without falling, unspecified, sequela -W1841XA Slipping, tripping and stumbling without falling due to stepping on object, initial encounter -W1841XD Slipping, tripping and stumbling without falling due to stepping on object, subsequent encounter -W1841XS Slipping, tripping and stumbling without falling due to stepping on object, sequela -W1842XA Slipping, tripping and stumbling without falling due to stepping into hole or opening, initial encounter -W1842XD Slipping, tripping and stumbling without falling due to stepping into hole or opening, subsequent encounter -W1842XS Slipping, tripping and stumbling without falling due to stepping into hole or opening, sequela -W1843XA Slipping, tripping and stumbling without falling due to stepping from one level to another, initial encounter -W1843XD Slipping, tripping and stumbling without falling due to stepping from one level to another, subsequent encounter -W1843XS Slipping, tripping and stumbling without falling due to stepping from one level to another, sequela -W1849XA Other slipping, tripping and stumbling without falling, initial encounter -W1849XD Other slipping, tripping and stumbling without falling, subsequent encounter -W1849XS Other slipping, tripping and stumbling without falling, sequela -W19XXXA Unspecified fall, initial encounter -W19XXXD Unspecified fall, subsequent encounter -W19XXXS Unspecified fall, sequela -W200XXA Struck by falling object in cave-in, initial encounter -W200XXD Struck by falling object in cave-in, subsequent encounter -W200XXS Struck by falling object in cave-in, sequela -W201XXA Struck by object due to collapse of building, initial encounter -W201XXD Struck by object due to collapse of building, subsequent encounter -W201XXS Struck by object due to collapse of building, sequela -W208XXA Other cause of strike by thrown, projected or falling object, initial encounter -W208XXD Other cause of strike by thrown, projected or falling object, subsequent encounter -W208XXS Other cause of strike by thrown, projected or falling object, sequela -W2100XA Struck by hit or thrown ball, unspecified type, initial encounter -W2100XD Struck by hit or thrown ball, unspecified type, subsequent encounter -W2100XS Struck by hit or thrown ball, unspecified type, sequela -W2101XA Struck by football, initial encounter -W2101XD Struck by football, subsequent encounter -W2101XS Struck by football, sequela -W2102XA Struck by soccer ball, initial encounter -W2102XD Struck by soccer ball, subsequent encounter -W2102XS Struck by soccer ball, sequela -W2103XA Struck by baseball, initial encounter -W2103XD Struck by baseball, subsequent encounter -W2103XS Struck by baseball, sequela -W2104XA Struck by golf ball, initial encounter -W2104XD Struck by golf ball, subsequent encounter -W2104XS Struck by golf ball, sequela -W2105XA Struck by basketball, initial encounter -W2105XD Struck by basketball, subsequent encounter -W2105XS Struck by basketball, sequela -W2106XA Struck by volleyball, initial encounter -W2106XD Struck by volleyball, subsequent encounter -W2106XS Struck by volleyball, sequela -W2107XA Struck by softball, initial encounter -W2107XD Struck by softball, subsequent encounter -W2107XS Struck by softball, sequela -W2109XA Struck by other hit or thrown ball, initial encounter -W2109XD Struck by other hit or thrown ball, subsequent encounter -W2109XS Struck by other hit or thrown ball, sequela -W2111XA Struck by baseball bat, initial encounter -W2111XD Struck by baseball bat, subsequent encounter -W2111XS Struck by baseball bat, sequela -W2112XA Struck by tennis racquet, initial encounter -W2112XD Struck by tennis racquet, subsequent encounter -W2112XS Struck by tennis racquet, sequela -W2113XA Struck by golf club, initial encounter -W2113XD Struck by golf club, subsequent encounter -W2113XS Struck by golf club, sequela -W2119XA Struck by other bat, racquet or club, initial encounter -W2119XD Struck by other bat, racquet or club, subsequent encounter -W2119XS Struck by other bat, racquet or club, sequela -W21210A Struck by ice hockey stick, initial encounter -W21210D Struck by ice hockey stick, subsequent encounter -W21210S Struck by ice hockey stick, sequela -W21211A Struck by field hockey stick, initial encounter -W21211D Struck by field hockey stick, subsequent encounter -W21211S Struck by field hockey stick, sequela -W21220A Struck by ice hockey puck, initial encounter -W21220D Struck by ice hockey puck, subsequent encounter -W21220S Struck by ice hockey puck, sequela -W21221A Struck by field hockey puck, initial encounter -W21221D Struck by field hockey puck, subsequent encounter -W21221S Struck by field hockey puck, sequela -W2131XA Struck by shoe cleats, initial encounter -W2131XD Struck by shoe cleats, subsequent encounter -W2131XS Struck by shoe cleats, sequela -W2132XA Struck by skate blades, initial encounter -W2132XD Struck by skate blades, subsequent encounter -W2132XS Struck by skate blades, sequela -W2139XA Struck by other sports foot wear, initial encounter -W2139XD Struck by other sports foot wear, subsequent encounter -W2139XS Struck by other sports foot wear, sequela -W214XXA Striking against diving board, initial encounter -W214XXD Striking against diving board, subsequent encounter -W214XXS Striking against diving board, sequela -W2181XA Striking against or struck by football helmet, initial encounter -W2181XD Striking against or struck by football helmet, subsequent encounter -W2181XS Striking against or struck by football helmet, sequela -W2189XA Striking against or struck by other sports equipment, initial encounter -W2189XD Striking against or struck by other sports equipment, subsequent encounter -W2189XS Striking against or struck by other sports equipment, sequela -W219XXA Striking against or struck by unspecified sports equipment, initial encounter -W219XXD Striking against or struck by unspecified sports equipment, subsequent encounter -W219XXS Striking against or struck by unspecified sports equipment, sequela -W2201XA Walked into wall, initial encounter -W2201XD Walked into wall, subsequent encounter -W2201XS Walked into wall, sequela -W2202XA Walked into lamppost, initial encounter -W2202XD Walked into lamppost, subsequent encounter -W2202XS Walked into lamppost, sequela -W2203XA Walked into furniture, initial encounter -W2203XD Walked into furniture, subsequent encounter -W2203XS Walked into furniture, sequela -W22041A Striking against wall of swimming pool causing drowning and submersion, initial encounter -W22041D Striking against wall of swimming pool causing drowning and submersion, subsequent encounter -W22041S Striking against wall of swimming pool causing drowning and submersion, sequela -W22042A Striking against wall of swimming pool causing other injury, initial encounter -W22042D Striking against wall of swimming pool causing other injury, subsequent encounter -W22042S Striking against wall of swimming pool causing other injury, sequela -W2209XA Striking against other stationary object, initial encounter -W2209XD Striking against other stationary object, subsequent encounter -W2209XS Striking against other stationary object, sequela -W2210XA Striking against or struck by unspecified automobile airbag, initial encounter -W2210XD Striking against or struck by unspecified automobile airbag, subsequent encounter -W2210XS Striking against or struck by unspecified automobile airbag, sequela -W2211XA Striking against or struck by driver side automobile airbag, initial encounter -W2211XD Striking against or struck by driver side automobile airbag, subsequent encounter -W2211XS Striking against or struck by driver side automobile airbag, sequela -W2212XA Striking against or struck by front passenger side automobile airbag, initial encounter -W2212XD Striking against or struck by front passenger side automobile airbag, subsequent encounter -W2212XS Striking against or struck by front passenger side automobile airbag, sequela -W2219XA Striking against or struck by other automobile airbag, initial encounter -W2219XD Striking against or struck by other automobile airbag, subsequent encounter -W2219XS Striking against or struck by other automobile airbag, sequela -W228XXA Striking against or struck by other objects, initial encounter -W228XXD Striking against or struck by other objects, subsequent encounter -W228XXS Striking against or struck by other objects, sequela -W230XXA Caught, crushed, jammed, or pinched between moving objects, initial encounter -W230XXD Caught, crushed, jammed, or pinched between moving objects, subsequent encounter -W230XXS Caught, crushed, jammed, or pinched between moving objects, sequela -W231XXA Caught, crushed, jammed, or pinched between stationary objects, initial encounter -W231XXD Caught, crushed, jammed, or pinched between stationary objects, subsequent encounter -W231XXS Caught, crushed, jammed, or pinched between stationary objects, sequela -W240XXA Contact with lifting devices, not elsewhere classified, initial encounter -W240XXD Contact with lifting devices, not elsewhere classified, subsequent encounter -W240XXS Contact with lifting devices, not elsewhere classified, sequela -W241XXA Contact with transmission devices, not elsewhere classified, initial encounter -W241XXD Contact with transmission devices, not elsewhere classified, subsequent encounter -W241XXS Contact with transmission devices, not elsewhere classified, sequela -W25XXXA Contact with sharp glass, initial encounter -W25XXXD Contact with sharp glass, subsequent encounter -W25XXXS Contact with sharp glass, sequela -W260XXA Contact with knife, initial encounter -W260XXD Contact with knife, subsequent encounter -W260XXS Contact with knife, sequela -W261XXA Contact with sword or dagger, initial encounter -W261XXD Contact with sword or dagger, subsequent encounter -W261XXS Contact with sword or dagger, sequela -W270XXA Contact with workbench tool, initial encounter -W270XXD Contact with workbench tool, subsequent encounter -W270XXS Contact with workbench tool, sequela -W271XXA Contact with garden tool, initial encounter -W271XXD Contact with garden tool, subsequent encounter -W271XXS Contact with garden tool, sequela -W272XXA Contact with scissors, initial encounter -W272XXD Contact with scissors, subsequent encounter -W272XXS Contact with scissors, sequela -W273XXA Contact with needle (sewing), initial encounter -W273XXD Contact with needle (sewing), subsequent encounter -W273XXS Contact with needle (sewing), sequela -W274XXA Contact with kitchen utensil, initial encounter -W274XXD Contact with kitchen utensil, subsequent encounter -W274XXS Contact with kitchen utensil, sequela -W275XXA Contact with paper-cutter, initial encounter -W275XXD Contact with paper-cutter, subsequent encounter -W275XXS Contact with paper-cutter, sequela -W278XXA Contact with other nonpowered hand tool, initial encounter -W278XXD Contact with other nonpowered hand tool, subsequent encounter -W278XXS Contact with other nonpowered hand tool, sequela -W28XXXA Contact with powered lawn mower, initial encounter -W28XXXD Contact with powered lawn mower, subsequent encounter -W28XXXS Contact with powered lawn mower, sequela -W290XXA Contact with powered kitchen appliance, initial encounter -W290XXD Contact with powered kitchen appliance, subsequent encounter -W290XXS Contact with powered kitchen appliance, sequela -W291XXA Contact with electric knife, initial encounter -W291XXD Contact with electric knife, subsequent encounter -W291XXS Contact with electric knife, sequela -W292XXA Contact with other powered household machinery, initial encounter -W292XXD Contact with other powered household machinery, subsequent encounter -W292XXS Contact with other powered household machinery, sequela -W293XXA Contact with powered garden and outdoor hand tools and machinery, initial encounter -W293XXD Contact with powered garden and outdoor hand tools and machinery, subsequent encounter -W293XXS Contact with powered garden and outdoor hand tools and machinery, sequela -W294XXA Contact with nail gun, initial encounter -W294XXD Contact with nail gun, subsequent encounter -W294XXS Contact with nail gun, sequela -W298XXA Contact with other powered powered hand tools and household machinery, initial encounter -W298XXD Contact with other powered powered hand tools and household machinery, subsequent encounter -W298XXS Contact with other powered powered hand tools and household machinery, sequela -W300XXA Contact with combine harvester, initial encounter -W300XXD Contact with combine harvester, subsequent encounter -W300XXS Contact with combine harvester, sequela -W301XXA Contact with power take-off devices (PTO), initial encounter -W301XXD Contact with power take-off devices (PTO), subsequent encounter -W301XXS Contact with power take-off devices (PTO), sequela -W302XXA Contact with hay derrick, initial encounter -W302XXD Contact with hay derrick, subsequent encounter -W302XXS Contact with hay derrick, sequela -W303XXA Contact with grain storage elevator, initial encounter -W303XXD Contact with grain storage elevator, subsequent encounter -W303XXS Contact with grain storage elevator, sequela -W3081XA Contact with agricultural transport vehicle in stationary use, initial encounter -W3081XD Contact with agricultural transport vehicle in stationary use, subsequent encounter -W3081XS Contact with agricultural transport vehicle in stationary use, sequela -W3089XA Contact with other specified agricultural machinery, initial encounter -W3089XD Contact with other specified agricultural machinery, subsequent encounter -W3089XS Contact with other specified agricultural machinery, sequela -W309XXA Contact with unspecified agricultural machinery, initial encounter -W309XXD Contact with unspecified agricultural machinery, subsequent encounter -W309XXS Contact with unspecified agricultural machinery, sequela -W310XXA Contact with mining and earth-drilling machinery, initial encounter -W310XXD Contact with mining and earth-drilling machinery, subsequent encounter -W310XXS Contact with mining and earth-drilling machinery, sequela -W311XXA Contact with metalworking machines, initial encounter -W311XXD Contact with metalworking machines, subsequent encounter -W311XXS Contact with metalworking machines, sequela -W312XXA Contact with powered woodworking and forming machines, initial encounter -W312XXD Contact with powered woodworking and forming machines, subsequent encounter -W312XXS Contact with powered woodworking and forming machines, sequela -W313XXA Contact with prime movers, initial encounter -W313XXD Contact with prime movers, subsequent encounter -W313XXS Contact with prime movers, sequela -W3181XA Contact with recreational machinery, initial encounter -W3181XD Contact with recreational machinery, subsequent encounter -W3181XS Contact with recreational machinery, sequela -W3182XA Contact with other commercial machinery, initial encounter -W3182XD Contact with other commercial machinery, subsequent encounter -W3182XS Contact with other commercial machinery, sequela -W3183XA Contact with special construction vehicle in stationary use, initial encounter -W3183XD Contact with special construction vehicle in stationary use, subsequent encounter -W3183XS Contact with special construction vehicle in stationary use, sequela -W3189XA Contact with other specified machinery, initial encounter -W3189XD Contact with other specified machinery, subsequent encounter -W3189XS Contact with other specified machinery, sequela -W319XXA Contact with unspecified machinery, initial encounter -W319XXD Contact with unspecified machinery, subsequent encounter -W319XXS Contact with unspecified machinery, sequela -W320XXA Accidental handgun discharge, initial encounter -W320XXD Accidental handgun discharge, subsequent encounter -W320XXS Accidental handgun discharge, sequela -W321XXA Accidental handgun malfunction, initial encounter -W321XXD Accidental handgun malfunction, subsequent encounter -W321XXS Accidental handgun malfunction, sequela -W3300XA Accidental discharge of unspecified larger firearm, initial encounter -W3300XD Accidental discharge of unspecified larger firearm, subsequent encounter -W3300XS Accidental discharge of unspecified larger firearm, sequela -W3301XA Accidental discharge of shotgun, initial encounter -W3301XD Accidental discharge of shotgun, subsequent encounter -W3301XS Accidental discharge of shotgun, sequela -W3302XA Accidental discharge of hunting rifle, initial encounter -W3302XD Accidental discharge of hunting rifle, subsequent encounter -W3302XS Accidental discharge of hunting rifle, sequela -W3303XA Accidental discharge of machine gun, initial encounter -W3303XD Accidental discharge of machine gun, subsequent encounter -W3303XS Accidental discharge of machine gun, sequela -W3309XA Accidental discharge of other larger firearm, initial encounter -W3309XD Accidental discharge of other larger firearm, subsequent encounter -W3309XS Accidental discharge of other larger firearm, sequela -W3310XA Accidental malfunction of unspecified larger firearm, initial encounter -W3310XD Accidental malfunction of unspecified larger firearm, subsequent encounter -W3310XS Accidental malfunction of unspecified larger firearm, sequela -W3311XA Accidental malfunction of shotgun, initial encounter -W3311XD Accidental malfunction of shotgun, subsequent encounter -W3311XS Accidental malfunction of shotgun, sequela -W3312XA Accidental malfunction of hunting rifle, initial encounter -W3312XD Accidental malfunction of hunting rifle, subsequent encounter -W3312XS Accidental malfunction of hunting rifle, sequela -W3313XA Accidental malfunction of machine gun, initial encounter -W3313XD Accidental malfunction of machine gun, subsequent encounter -W3313XS Accidental malfunction of machine gun, sequela -W3319XA Accidental malfunction of other larger firearm, initial encounter -W3319XD Accidental malfunction of other larger firearm, subsequent encounter -W3319XS Accidental malfunction of other larger firearm, sequela -W3400XA Accidental discharge from unspecified firearms or gun, initial encounter -W3400XD Accidental discharge from unspecified firearms or gun, subsequent encounter -W3400XS Accidental discharge from unspecified firearms or gun, sequela -W34010A Accidental discharge of airgun, initial encounter -W34010D Accidental discharge of airgun, subsequent encounter -W34010S Accidental discharge of airgun, sequela -W34011A Accidental discharge of paintball gun, initial encounter -W34011D Accidental discharge of paintball gun, subsequent encounter -W34011S Accidental discharge of paintball gun, sequela -W34018A Accidental discharge of other gas, air or spring-operated gun, initial encounter -W34018D Accidental discharge of other gas, air or spring-operated gun, subsequent encounter -W34018S Accidental discharge of other gas, air or spring-operated gun, sequela -W3409XA Accidental discharge from other specified firearms, initial encounter -W3409XD Accidental discharge from other specified firearms, subsequent encounter -W3409XS Accidental discharge from other specified firearms, sequela -W3410XA Accidental malfunction from unspecified firearms or gun, initial encounter -W3410XD Accidental malfunction from unspecified firearms or gun, subsequent encounter -W3410XS Accidental malfunction from unspecified firearms or gun, sequela -W34110A Accidental malfunction of airgun, initial encounter -W34110D Accidental malfunction of airgun, subsequent encounter -W34110S Accidental malfunction of airgun, sequela -W34111A Accidental malfunction of paintball gun, initial encounter -W34111D Accidental malfunction of paintball gun, subsequent encounter -W34111S Accidental malfunction of paintball gun, sequela -W34118A Accidental malfunction of other gas, air or spring-operated gun, initial encounter -W34118D Accidental malfunction of other gas, air or spring-operated gun, subsequent encounter -W34118S Accidental malfunction of other gas, air or spring-operated gun, sequela -W3419XA Accidental malfunction from other specified firearms, initial encounter -W3419XD Accidental malfunction from other specified firearms, subsequent encounter -W3419XS Accidental malfunction from other specified firearms, sequela -W35XXXA Explosion and rupture of boiler, initial encounter -W35XXXD Explosion and rupture of boiler, subsequent encounter -W35XXXS Explosion and rupture of boiler, sequela -W361XXA Explosion and rupture of aerosol can, initial encounter -W361XXD Explosion and rupture of aerosol can, subsequent encounter -W361XXS Explosion and rupture of aerosol can, sequela -W362XXA Explosion and rupture of air tank, initial encounter -W362XXD Explosion and rupture of air tank, subsequent encounter -W362XXS Explosion and rupture of air tank, sequela -W363XXA Explosion and rupture of pressurized-gas tank, initial encounter -W363XXD Explosion and rupture of pressurized-gas tank, subsequent encounter -W363XXS Explosion and rupture of pressurized-gas tank, sequela -W368XXA Explosion and rupture of other gas cylinder, initial encounter -W368XXD Explosion and rupture of other gas cylinder, subsequent encounter -W368XXS Explosion and rupture of other gas cylinder, sequela -W369XXA Explosion and rupture of unspecified gas cylinder, initial encounter -W369XXD Explosion and rupture of unspecified gas cylinder, subsequent encounter -W369XXS Explosion and rupture of unspecified gas cylinder, sequela -W370XXA Explosion of bicycle tire, initial encounter -W370XXD Explosion of bicycle tire, subsequent encounter -W370XXS Explosion of bicycle tire, sequela -W378XXA Explosion and rupture of other pressurized tire, pipe or hose, initial encounter -W378XXD Explosion and rupture of other pressurized tire, pipe or hose, subsequent encounter -W378XXS Explosion and rupture of other pressurized tire, pipe or hose, sequela -W38XXXA Explosion and rupture of other specified pressurized devices, initial encounter -W38XXXD Explosion and rupture of other specified pressurized devices, subsequent encounter -W38XXXS Explosion and rupture of other specified pressurized devices, sequela -W39XXXA Discharge of firework, initial encounter -W39XXXD Discharge of firework, subsequent encounter -W39XXXS Discharge of firework, sequela -W400XXA Explosion of blasting material, initial encounter -W400XXD Explosion of blasting material, subsequent encounter -W400XXS Explosion of blasting material, sequela -W401XXA Explosion of explosive gases, initial encounter -W401XXD Explosion of explosive gases, subsequent encounter -W401XXS Explosion of explosive gases, sequela -W408XXA Explosion of other specified explosive materials, initial encounter -W408XXD Explosion of other specified explosive materials, subsequent encounter -W408XXS Explosion of other specified explosive materials, sequela -W409XXA Explosion of unspecified explosive materials, initial encounter -W409XXD Explosion of unspecified explosive materials, subsequent encounter -W409XXS Explosion of unspecified explosive materials, sequela -W420XXA Exposure to supersonic waves, initial encounter -W420XXD Exposure to supersonic waves, subsequent encounter -W420XXS Exposure to supersonic waves, sequela -W429XXA Exposure to other noise, initial encounter -W429XXD Exposure to other noise, subsequent encounter -W429XXS Exposure to other noise, sequela -W450XXA Nail entering through skin, initial encounter -W450XXD Nail entering through skin, subsequent encounter -W450XXS Nail entering through skin, sequela -W451XXA Paper entering through skin, initial encounter -W451XXD Paper entering through skin, subsequent encounter -W451XXS Paper entering through skin, sequela -W452XXA Lid of can entering through skin, initial encounter -W452XXD Lid of can entering through skin, subsequent encounter -W452XXS Lid of can entering through skin, sequela -W458XXA Other foreign body or object entering through skin, initial encounter -W458XXD Other foreign body or object entering through skin, subsequent encounter -W458XXS Other foreign body or object entering through skin, sequela -W460XXA Contact with hypodermic needle, initial encounter -W460XXD Contact with hypodermic needle, subsequent encounter -W460XXS Contact with hypodermic needle, sequela -W461XXA Contact with contaminated hypodermic needle, initial encounter -W461XXD Contact with contaminated hypodermic needle, subsequent encounter -W461XXS Contact with contaminated hypodermic needle, sequela -W4901XA Hair causing external constriction, initial encounter -W4901XD Hair causing external constriction, subsequent encounter -W4901XS Hair causing external constriction, sequela -W4902XA String or thread causing external constriction, initial encounter -W4902XD String or thread causing external constriction, subsequent encounter -W4902XS String or thread causing external constriction, sequela -W4903XA Rubber band causing external constriction, initial encounter -W4903XD Rubber band causing external constriction, subsequent encounter -W4903XS Rubber band causing external constriction, sequela -W4904XA Ring or other jewelry causing external constriction, initial encounter -W4904XD Ring or other jewelry causing external constriction, subsequent encounter -W4904XS Ring or other jewelry causing external constriction, sequela -W4909XA Other specified item causing external constriction, initial encounter -W4909XD Other specified item causing external constriction, subsequent encounter -W4909XS Other specified item causing external constriction, sequela -W499XXA Exposure to other inanimate mechanical forces, initial encounter -W499XXD Exposure to other inanimate mechanical forces, subsequent encounter -W499XXS Exposure to other inanimate mechanical forces, sequela -W500XXA Accidental hit or strike by another person, initial encounter -W500XXD Accidental hit or strike by another person, subsequent encounter -W500XXS Accidental hit or strike by another person, sequela -W501XXA Accidental kick by another person, initial encounter -W501XXD Accidental kick by another person, subsequent encounter -W501XXS Accidental kick by another person, sequela -W502XXA Accidental twist by another person, initial encounter -W502XXD Accidental twist by another person, subsequent encounter -W502XXS Accidental twist by another person, sequela -W503XXA Accidental bite by another person, initial encounter -W503XXD Accidental bite by another person, subsequent encounter -W503XXS Accidental bite by another person, sequela -W504XXA Accidental scratch by another person, initial encounter -W504XXD Accidental scratch by another person, subsequent encounter -W504XXS Accidental scratch by another person, sequela -W51XXXA Accidental striking against or bumped into by another person, initial encounter -W51XXXD Accidental striking against or bumped into by another person, subsequent encounter -W51XXXS Accidental striking against or bumped into by another person, sequela -W52XXXA Crushed, pushed or stepped on by crowd or human stampede, initial encounter -W52XXXD Crushed, pushed or stepped on by crowd or human stampede, subsequent encounter -W52XXXS Crushed, pushed or stepped on by crowd or human stampede, sequela -W5301XA Bitten by mouse, initial encounter -W5301XD Bitten by mouse, subsequent encounter -W5301XS Bitten by mouse, sequela -W5309XA Other contact with mouse, initial encounter -W5309XD Other contact with mouse, subsequent encounter -W5309XS Other contact with mouse, sequela -W5311XA Bitten by rat, initial encounter -W5311XD Bitten by rat, subsequent encounter -W5311XS Bitten by rat, sequela -W5319XA Other contact with rat, initial encounter -W5319XD Other contact with rat, subsequent encounter -W5319XS Other contact with rat, sequela -W5321XA Bitten by squirrel, initial encounter -W5321XD Bitten by squirrel, subsequent encounter -W5321XS Bitten by squirrel, sequela -W5329XA Other contact with squirrel, initial encounter -W5329XD Other contact with squirrel, subsequent encounter -W5329XS Other contact with squirrel, sequela -W5381XA Bitten by other rodent, initial encounter -W5381XD Bitten by other rodent, subsequent encounter -W5381XS Bitten by other rodent, sequela -W5389XA Other contact with other rodent, initial encounter -W5389XD Other contact with other rodent, subsequent encounter -W5389XS Other contact with other rodent, sequela -W540XXA Bitten by dog, initial encounter -W540XXD Bitten by dog, subsequent encounter -W540XXS Bitten by dog, sequela -W541XXA Struck by dog, initial encounter -W541XXD Struck by dog, subsequent encounter -W541XXS Struck by dog, sequela -W548XXA Other contact with dog, initial encounter -W548XXD Other contact with dog, subsequent encounter -W548XXS Other contact with dog, sequela -W5501XA Bitten by cat, initial encounter -W5501XD Bitten by cat, subsequent encounter -W5501XS Bitten by cat, sequela -W5503XA Scratched by cat, initial encounter -W5503XD Scratched by cat, subsequent encounter -W5503XS Scratched by cat, sequela -W5509XA Other contact with cat, initial encounter -W5509XD Other contact with cat, subsequent encounter -W5509XS Other contact with cat, sequela -W5511XA Bitten by horse, initial encounter -W5511XD Bitten by horse, subsequent encounter -W5511XS Bitten by horse, sequela -W5512XA Struck by horse, initial encounter -W5512XD Struck by horse, subsequent encounter -W5512XS Struck by horse, sequela -W5519XA Other contact with horse, initial encounter -W5519XD Other contact with horse, subsequent encounter -W5519XS Other contact with horse, sequela -W5521XA Bitten by cow, initial encounter -W5521XD Bitten by cow, subsequent encounter -W5521XS Bitten by cow, sequela -W5522XA Struck by cow, initial encounter -W5522XD Struck by cow, subsequent encounter -W5522XS Struck by cow, sequela -W5529XA Other contact with cow, initial encounter -W5529XD Other contact with cow, subsequent encounter -W5529XS Other contact with cow, sequela -W5531XA Bitten by other hoof stock, initial encounter -W5531XD Bitten by other hoof stock, subsequent encounter -W5531XS Bitten by other hoof stock, sequela -W5532XA Struck by other hoof stock, initial encounter -W5532XD Struck by other hoof stock, subsequent encounter -W5532XS Struck by other hoof stock, sequela -W5539XA Other contact with other hoof stock, initial encounter -W5539XD Other contact with other hoof stock, subsequent encounter -W5539XS Other contact with other hoof stock, sequela -W5541XA Bitten by pig, initial encounter -W5541XD Bitten by pig, subsequent encounter -W5541XS Bitten by pig, sequela -W5542XA Struck by pig, initial encounter -W5542XD Struck by pig, subsequent encounter -W5542XS Struck by pig, sequela -W5549XA Other contact with pig, initial encounter -W5549XD Other contact with pig, subsequent encounter -W5549XS Other contact with pig, sequela -W5551XA Bitten by raccoon, initial encounter -W5551XD Bitten by raccoon, subsequent encounter -W5551XS Bitten by raccoon, sequela -W5552XA Struck by raccoon, initial encounter -W5552XD Struck by raccoon, subsequent encounter -W5552XS Struck by raccoon, sequela -W5559XA Other contact with raccoon, initial encounter -W5559XD Other contact with raccoon, subsequent encounter -W5559XS Other contact with raccoon, sequela -W5581XA Bitten by other mammals, initial encounter -W5581XD Bitten by other mammals, subsequent encounter -W5581XS Bitten by other mammals, sequela -W5582XA Struck by other mammals, initial encounter -W5582XD Struck by other mammals, subsequent encounter -W5582XS Struck by other mammals, sequela -W5589XA Other contact with other mammals, initial encounter -W5589XD Other contact with other mammals, subsequent encounter -W5589XS Other contact with other mammals, sequela -W5601XA Bitten by dolphin, initial encounter -W5601XD Bitten by dolphin, subsequent encounter -W5601XS Bitten by dolphin, sequela -W5602XA Struck by dolphin, initial encounter -W5602XD Struck by dolphin, subsequent encounter -W5602XS Struck by dolphin, sequela -W5609XA Other contact with dolphin, initial encounter -W5609XD Other contact with dolphin, subsequent encounter -W5609XS Other contact with dolphin, sequela -W5611XA Bitten by sea lion, initial encounter -W5611XD Bitten by sea lion, subsequent encounter -W5611XS Bitten by sea lion, sequela -W5612XA Struck by sea lion, initial encounter -W5612XD Struck by sea lion, subsequent encounter -W5612XS Struck by sea lion, sequela -W5619XA Other contact with sea lion, initial encounter -W5619XD Other contact with sea lion, subsequent encounter -W5619XS Other contact with sea lion, sequela -W5621XA Bitten by orca, initial encounter -W5621XD Bitten by orca, subsequent encounter -W5621XS Bitten by orca, sequela -W5622XA Struck by orca, initial encounter -W5622XD Struck by orca, subsequent encounter -W5622XS Struck by orca, sequela -W5629XA Other contact with orca, initial encounter -W5629XD Other contact with orca, subsequent encounter -W5629XS Other contact with orca, sequela -W5631XA Bitten by other marine mammals, initial encounter -W5631XD Bitten by other marine mammals, subsequent encounter -W5631XS Bitten by other marine mammals, sequela -W5632XA Struck by other marine mammals, initial encounter -W5632XD Struck by other marine mammals, subsequent encounter -W5632XS Struck by other marine mammals, sequela -W5639XA Other contact with other marine mammals, initial encounter -W5639XD Other contact with other marine mammals, subsequent encounter -W5639XS Other contact with other marine mammals, sequela -W5641XA Bitten by shark, initial encounter -W5641XD Bitten by shark, subsequent encounter -W5641XS Bitten by shark, sequela -W5642XA Struck by shark, initial encounter -W5642XD Struck by shark, subsequent encounter -W5642XS Struck by shark, sequela -W5649XA Other contact with shark, initial encounter -W5649XD Other contact with shark, subsequent encounter -W5649XS Other contact with shark, sequela -W5651XA Bitten by other fish, initial encounter -W5651XD Bitten by other fish, subsequent encounter -W5651XS Bitten by other fish, sequela -W5652XA Struck by other fish, initial encounter -W5652XD Struck by other fish, subsequent encounter -W5652XS Struck by other fish, sequela -W5659XA Other contact with other fish, initial encounter -W5659XD Other contact with other fish, subsequent encounter -W5659XS Other contact with other fish, sequela -W5681XA Bitten by other nonvenomous marine animals, initial encounter -W5681XD Bitten by other nonvenomous marine animals, subsequent encounter -W5681XS Bitten by other nonvenomous marine animals, sequela -W5682XA Struck by other nonvenomous marine animals, initial encounter -W5682XD Struck by other nonvenomous marine animals, subsequent encounter -W5682XS Struck by other nonvenomous marine animals, sequela -W5689XA Other contact with other nonvenomous marine animals, initial encounter -W5689XD Other contact with other nonvenomous marine animals, subsequent encounter -W5689XS Other contact with other nonvenomous marine animals, sequela -W57XXXA Bitten or stung by nonvenomous insect and other nonvenomous arthropods, initial encounter -W57XXXD Bitten or stung by nonvenomous insect and other nonvenomous arthropods, subsequent encounter -W57XXXS Bitten or stung by nonvenomous insect and other nonvenomous arthropods, sequela -W5801XA Bitten by alligator, initial encounter -W5801XD Bitten by alligator, subsequent encounter -W5801XS Bitten by alligator, sequela -W5802XA Struck by alligator, initial encounter -W5802XD Struck by alligator, subsequent encounter -W5802XS Struck by alligator, sequela -W5803XA Crushed by alligator, initial encounter -W5803XD Crushed by alligator, subsequent encounter -W5803XS Crushed by alligator, sequela -W5809XA Other contact with alligator, initial encounter -W5809XD Other contact with alligator, subsequent encounter -W5809XS Other contact with alligator, sequela -W5811XA Bitten by crocodile, initial encounter -W5811XD Bitten by crocodile, subsequent encounter -W5811XS Bitten by crocodile, sequela -W5812XA Struck by crocodile, initial encounter -W5812XD Struck by crocodile, subsequent encounter -W5812XS Struck by crocodile, sequela -W5813XA Crushed by crocodile, initial encounter -W5813XD Crushed by crocodile, subsequent encounter -W5813XS Crushed by crocodile, sequela -W5819XA Other contact with crocodile, initial encounter -W5819XD Other contact with crocodile, subsequent encounter -W5819XS Other contact with crocodile, sequela -W5901XA Bitten by nonvenomous lizards, initial encounter -W5901XD Bitten by nonvenomous lizards, subsequent encounter -W5901XS Bitten by nonvenomous lizards, sequela -W5902XA Struck by nonvenomous lizards, initial encounter -W5902XD Struck by nonvenomous lizards, subsequent encounter -W5902XS Struck by nonvenomous lizards, sequela -W5909XA Other contact with nonvenomous lizards, initial encounter -W5909XD Other contact with nonvenomous lizards, subsequent encounter -W5909XS Other contact with nonvenomous lizards, sequela -W5911XA Bitten by nonvenomous snake, initial encounter -W5911XD Bitten by nonvenomous snake, subsequent encounter -W5911XS Bitten by nonvenomous snake, sequela -W5912XA Struck by nonvenomous snake, initial encounter -W5912XD Struck by nonvenomous snake, subsequent encounter -W5912XS Struck by nonvenomous snake, sequela -W5913XA Crushed by nonvenomous snake, initial encounter -W5913XD Crushed by nonvenomous snake, subsequent encounter -W5913XS Crushed by nonvenomous snake, sequela -W5919XA Other contact with nonvenomous snake, initial encounter -W5919XD Other contact with nonvenomous snake, subsequent encounter -W5919XS Other contact with nonvenomous snake, sequela -W5921XA Bitten by turtle, initial encounter -W5921XD Bitten by turtle, subsequent encounter -W5921XS Bitten by turtle, sequela -W5922XA Struck by turtle, initial encounter -W5922XD Struck by turtle, subsequent encounter -W5922XS Struck by turtle, sequela -W5929XA Other contact with turtle, initial encounter -W5929XD Other contact with turtle, subsequent encounter -W5929XS Other contact with turtle, sequela -W5981XA Bitten by other nonvenomous reptiles, initial encounter -W5981XD Bitten by other nonvenomous reptiles, subsequent encounter -W5981XS Bitten by other nonvenomous reptiles, sequela -W5982XA Struck by other nonvenomous reptiles, initial encounter -W5982XD Struck by other nonvenomous reptiles, subsequent encounter -W5982XS Struck by other nonvenomous reptiles, sequela -W5983XA Crushed by other nonvenomous reptiles, initial encounter -W5983XD Crushed by other nonvenomous reptiles, subsequent encounter -W5983XS Crushed by other nonvenomous reptiles, sequela -W5989XA Other contact with other nonvenomous reptiles, initial encounter -W5989XD Other contact with other nonvenomous reptiles, subsequent encounter -W5989XS Other contact with other nonvenomous reptiles, sequela -W60XXXA Contact with nonvenomous plant thorns and spines and sharp leaves, initial encounter -W60XXXD Contact with nonvenomous plant thorns and spines and sharp leaves, subsequent encounter -W60XXXS Contact with nonvenomous plant thorns and spines and sharp leaves, sequela -W6101XA Bitten by parrot, initial encounter -W6101XD Bitten by parrot, subsequent encounter -W6101XS Bitten by parrot, sequela -W6102XA Struck by parrot, initial encounter -W6102XD Struck by parrot, subsequent encounter -W6102XS Struck by parrot, sequela -W6109XA Other contact with parrot, initial encounter -W6109XD Other contact with parrot, subsequent encounter -W6109XS Other contact with parrot, sequela -W6111XA Bitten by macaw, initial encounter -W6111XD Bitten by macaw, subsequent encounter -W6111XS Bitten by macaw, sequela -W6112XA Struck by macaw, initial encounter -W6112XD Struck by macaw, subsequent encounter -W6112XS Struck by macaw, sequela -W6119XA Other contact with macaw, initial encounter -W6119XD Other contact with macaw, subsequent encounter -W6119XS Other contact with macaw, sequela -W6121XA Bitten by other psittacines, initial encounter -W6121XD Bitten by other psittacines, subsequent encounter -W6121XS Bitten by other psittacines, sequela -W6122XA Struck by other psittacines, initial encounter -W6122XD Struck by other psittacines, subsequent encounter -W6122XS Struck by other psittacines, sequela -W6129XA Other contact with other psittacines, initial encounter -W6129XD Other contact with other psittacines, subsequent encounter -W6129XS Other contact with other psittacines, sequela -W6132XA Struck by chicken, initial encounter -W6132XD Struck by chicken, subsequent encounter -W6132XS Struck by chicken, sequela -W6133XA Pecked by chicken, initial encounter -W6133XD Pecked by chicken, subsequent encounter -W6133XS Pecked by chicken, sequela -W6139XA Other contact with chicken, initial encounter -W6139XD Other contact with chicken, subsequent encounter -W6139XS Other contact with chicken, sequela -W6142XA Struck by turkey, initial encounter -W6142XD Struck by turkey, subsequent encounter -W6142XS Struck by turkey, sequela -W6143XA Pecked by turkey, initial encounter -W6143XD Pecked by turkey, subsequent encounter -W6143XS Pecked by turkey, sequela -W6149XA Other contact with turkey, initial encounter -W6149XD Other contact with turkey, subsequent encounter -W6149XS Other contact with turkey, sequela -W6151XA Bitten by goose, initial encounter -W6151XD Bitten by goose, subsequent encounter -W6151XS Bitten by goose, sequela -W6152XA Struck by goose, initial encounter -W6152XD Struck by goose, subsequent encounter -W6152XS Struck by goose, sequela -W6159XA Other contact with goose, initial encounter -W6159XD Other contact with goose, subsequent encounter -W6159XS Other contact with goose, sequela -W6161XA Bitten by duck, initial encounter -W6161XD Bitten by duck, subsequent encounter -W6161XS Bitten by duck, sequela -W6162XA Struck by duck, initial encounter -W6162XD Struck by duck, subsequent encounter -W6162XS Struck by duck, sequela -W6169XA Other contact with duck, initial encounter -W6169XD Other contact with duck, subsequent encounter -W6169XS Other contact with duck, sequela -W6191XA Bitten by other birds, initial encounter -W6191XD Bitten by other birds, subsequent encounter -W6191XS Bitten by other birds, sequela -W6192XA Struck by other birds, initial encounter -W6192XD Struck by other birds, subsequent encounter -W6192XS Struck by other birds, sequela -W6199XA Other contact with other birds, initial encounter -W6199XD Other contact with other birds, subsequent encounter -W6199XS Other contact with other birds, sequela -W620XXA Contact with nonvenomous frogs, initial encounter -W620XXD Contact with nonvenomous frogs, subsequent encounter -W620XXS Contact with nonvenomous frogs, sequela -W621XXA Contact with nonvenomous toads, initial encounter -W621XXD Contact with nonvenomous toads, subsequent encounter -W621XXS Contact with nonvenomous toads, sequela -W629XXA Contact with other nonvenomous amphibians, initial encounter -W629XXD Contact with other nonvenomous amphibians, subsequent encounter -W629XXS Contact with other nonvenomous amphibians, sequela -W64XXXA Exposure to other animate mechanical forces, initial encounter -W64XXXD Exposure to other animate mechanical forces, subsequent encounter -W64XXXS Exposure to other animate mechanical forces, sequela -W65XXXA Accidental drowning and submersion while in bath-tub, initial encounter -W65XXXD Accidental drowning and submersion while in bath-tub, subsequent encounter -W65XXXS Accidental drowning and submersion while in bath-tub, sequela -W67XXXA Accidental drowning and submersion while in swimming-pool, initial encounter -W67XXXD Accidental drowning and submersion while in swimming-pool, subsequent encounter -W67XXXS Accidental drowning and submersion while in swimming-pool, sequela -W69XXXA Accidental drowning and submersion while in natural water, initial encounter -W69XXXD Accidental drowning and submersion while in natural water, subsequent encounter -W69XXXS Accidental drowning and submersion while in natural water, sequela -W73XXXA Other specified cause of accidental non-transport drowning and submersion, initial encounter -W73XXXD Other specified cause of accidental non-transport drowning and submersion, subsequent encounter -W73XXXS Other specified cause of accidental non-transport drowning and submersion, sequela -W74XXXA Unspecified cause of accidental drowning and submersion, initial encounter -W74XXXD Unspecified cause of accidental drowning and submersion, subsequent encounter -W74XXXS Unspecified cause of accidental drowning and submersion, sequela -W85XXXA Exposure to electric transmission lines, initial encounter -W85XXXD Exposure to electric transmission lines, subsequent encounter -W85XXXS Exposure to electric transmission lines, sequela -W860XXA Exposure to domestic wiring and appliances, initial encounter -W860XXD Exposure to domestic wiring and appliances, subsequent encounter -W860XXS Exposure to domestic wiring and appliances, sequela -W861XXA Exposure to industrial wiring, appliances and electrical machinery, initial encounter -W861XXD Exposure to industrial wiring, appliances and electrical machinery, subsequent encounter -W861XXS Exposure to industrial wiring, appliances and electrical machinery, sequela -W868XXA Exposure to other electric current, initial encounter -W868XXD Exposure to other electric current, subsequent encounter -W868XXS Exposure to other electric current, sequela -W880XXA Exposure to X-rays, initial encounter -W880XXD Exposure to X-rays, subsequent encounter -W880XXS Exposure to X-rays, sequela -W881XXA Exposure to radioactive isotopes, initial encounter -W881XXD Exposure to radioactive isotopes, subsequent encounter -W881XXS Exposure to radioactive isotopes, sequela -W888XXA Exposure to other ionizing radiation, initial encounter -W888XXD Exposure to other ionizing radiation, subsequent encounter -W888XXS Exposure to other ionizing radiation, sequela -W890XXA Exposure to welding light (arc), initial encounter -W890XXD Exposure to welding light (arc), subsequent encounter -W890XXS Exposure to welding light (arc), sequela -W891XXA Exposure to tanning bed, initial encounter -W891XXD Exposure to tanning bed, subsequent encounter -W891XXS Exposure to tanning bed, sequela -W898XXA Exposure to other man-made visible and ultraviolet light, initial encounter -W898XXD Exposure to other man-made visible and ultraviolet light, subsequent encounter -W898XXS Exposure to other man-made visible and ultraviolet light, sequela -W899XXA Exposure to unspecified man-made visible and ultraviolet light, initial encounter -W899XXD Exposure to unspecified man-made visible and ultraviolet light, subsequent encounter -W899XXS Exposure to unspecified man-made visible and ultraviolet light, sequela -W900XXA Exposure to radiofrequency, initial encounter -W900XXD Exposure to radiofrequency, subsequent encounter -W900XXS Exposure to radiofrequency, sequela -W901XXA Exposure to infrared radiation, initial encounter -W901XXD Exposure to infrared radiation, subsequent encounter -W901XXS Exposure to infrared radiation, sequela -W902XXA Exposure to laser radiation, initial encounter -W902XXD Exposure to laser radiation, subsequent encounter -W902XXS Exposure to laser radiation, sequela -W908XXA Exposure to other nonionizing radiation, initial encounter -W908XXD Exposure to other nonionizing radiation, subsequent encounter -W908XXS Exposure to other nonionizing radiation, sequela -W92XXXA Exposure to excessive heat of man-made origin, initial encounter -W92XXXD Exposure to excessive heat of man-made origin, subsequent encounter -W92XXXS Exposure to excessive heat of man-made origin, sequela -W9301XA Contact with dry ice, initial encounter -W9301XD Contact with dry ice, subsequent encounter -W9301XS Contact with dry ice, sequela -W9302XA Inhalation of dry ice, initial encounter -W9302XD Inhalation of dry ice, subsequent encounter -W9302XS Inhalation of dry ice, sequela -W9311XA Contact with liquid air, initial encounter -W9311XD Contact with liquid air, subsequent encounter -W9311XS Contact with liquid air, sequela -W9312XA Inhalation of liquid air, initial encounter -W9312XD Inhalation of liquid air, subsequent encounter -W9312XS Inhalation of liquid air, sequela -W932XXA Prolonged exposure in deep freeze unit or refrigerator, initial encounter -W932XXD Prolonged exposure in deep freeze unit or refrigerator, subsequent encounter -W932XXS Prolonged exposure in deep freeze unit or refrigerator, sequela -W938XXA Exposure to other excessive cold of man-made origin, initial encounter -W938XXD Exposure to other excessive cold of man-made origin, subsequent encounter -W938XXS Exposure to other excessive cold of man-made origin, sequela -W940XXA Exposure to prolonged high air pressure, initial encounter -W940XXD Exposure to prolonged high air pressure, subsequent encounter -W940XXS Exposure to prolonged high air pressure, sequela -W9411XA Exposure to residence or prolonged visit at high altitude, initial encounter -W9411XD Exposure to residence or prolonged visit at high altitude, subsequent encounter -W9411XS Exposure to residence or prolonged visit at high altitude, sequela -W9412XA Exposure to other prolonged low air pressure, initial encounter -W9412XD Exposure to other prolonged low air pressure, subsequent encounter -W9412XS Exposure to other prolonged low air pressure, sequela -W9421XA Exposure to reduction in atmospheric pressure while surfacing from deep-water diving, initial encounter -W9421XD Exposure to reduction in atmospheric pressure while surfacing from deep-water diving, subsequent encounter -W9421XS Exposure to reduction in atmospheric pressure while surfacing from deep-water diving, sequela -W9422XA Exposure to reduction in atmospheric pressure while surfacing from underground, initial encounter -W9422XD Exposure to reduction in atmospheric pressure while surfacing from underground, subsequent encounter -W9422XS Exposure to reduction in atmospheric pressure while surfacing from underground, sequela -W9423XA Exposure to sudden change in air pressure in aircraft during ascent, initial encounter -W9423XD Exposure to sudden change in air pressure in aircraft during ascent, subsequent encounter -W9423XS Exposure to sudden change in air pressure in aircraft during ascent, sequela -W9429XA Exposure to other rapid changes in air pressure during ascent, initial encounter -W9429XD Exposure to other rapid changes in air pressure during ascent, subsequent encounter -W9429XS Exposure to other rapid changes in air pressure during ascent, sequela -W9431XA Exposure to sudden change in air pressure in aircraft during descent, initial encounter -W9431XD Exposure to sudden change in air pressure in aircraft during descent, subsequent encounter -W9431XS Exposure to sudden change in air pressure in aircraft during descent, sequela -W9432XA Exposure to high air pressure from rapid descent in water, initial encounter -W9432XD Exposure to high air pressure from rapid descent in water, subsequent encounter -W9432XS Exposure to high air pressure from rapid descent in water, sequela -W9439XA Exposure to other rapid changes in air pressure during descent, initial encounter -W9439XD Exposure to other rapid changes in air pressure during descent, subsequent encounter -W9439XS Exposure to other rapid changes in air pressure during descent, sequela -W99XXXA Exposure to other man-made environmental factors, initial encounter -W99XXXD Exposure to other man-made environmental factors, subsequent encounter -W99XXXS Exposure to other man-made environmental factors, sequela -X000XXA Exposure to flames in uncontrolled fire in building or structure, initial encounter -X000XXD Exposure to flames in uncontrolled fire in building or structure, subsequent encounter -X000XXS Exposure to flames in uncontrolled fire in building or structure, sequela -X001XXA Exposure to smoke in uncontrolled fire in building or structure, initial encounter -X001XXD Exposure to smoke in uncontrolled fire in building or structure, subsequent encounter -X001XXS Exposure to smoke in uncontrolled fire in building or structure, sequela -X002XXA Injury due to collapse of burning building or structure in uncontrolled fire, initial encounter -X002XXD Injury due to collapse of burning building or structure in uncontrolled fire, subsequent encounter -X002XXS Injury due to collapse of burning building or structure in uncontrolled fire, sequela -X003XXA Fall from burning building or structure in uncontrolled fire, initial encounter -X003XXD Fall from burning building or structure in uncontrolled fire, subsequent encounter -X003XXS Fall from burning building or structure in uncontrolled fire, sequela -X004XXA Hit by object from burning building or structure in uncontrolled fire, initial encounter -X004XXD Hit by object from burning building or structure in uncontrolled fire, subsequent encounter -X004XXS Hit by object from burning building or structure in uncontrolled fire, sequela -X005XXA Jump from burning building or structure in uncontrolled fire, initial encounter -X005XXD Jump from burning building or structure in uncontrolled fire, subsequent encounter -X005XXS Jump from burning building or structure in uncontrolled fire, sequela -X008XXA Other exposure to uncontrolled fire in building or structure, initial encounter -X008XXD Other exposure to uncontrolled fire in building or structure, subsequent encounter -X008XXS Other exposure to uncontrolled fire in building or structure, sequela -X010XXA Exposure to flames in uncontrolled fire, not in building or structure, initial encounter -X010XXD Exposure to flames in uncontrolled fire, not in building or structure, subsequent encounter -X010XXS Exposure to flames in uncontrolled fire, not in building or structure, sequela -X011XXA Exposure to smoke in uncontrolled fire, not in building or structure, initial encounter -X011XXD Exposure to smoke in uncontrolled fire, not in building or structure, subsequent encounter -X011XXS Exposure to smoke in uncontrolled fire, not in building or structure, sequela -X013XXA Fall due to uncontrolled fire, not in building or structure, initial encounter -X013XXD Fall due to uncontrolled fire, not in building or structure, subsequent encounter -X013XXS Fall due to uncontrolled fire, not in building or structure, sequela -X014XXA Hit by object due to uncontrolled fire, not in building or structure, initial encounter -X014XXD Hit by object due to uncontrolled fire, not in building or structure, subsequent encounter -X014XXS Hit by object due to uncontrolled fire, not in building or structure, sequela -X018XXA Other exposure to uncontrolled fire, not in building or structure, initial encounter -X018XXD Other exposure to uncontrolled fire, not in building or structure, subsequent encounter -X018XXS Other exposure to uncontrolled fire, not in building or structure, sequela -X020XXA Exposure to flames in controlled fire in building or structure, initial encounter -X020XXD Exposure to flames in controlled fire in building or structure, subsequent encounter -X020XXS Exposure to flames in controlled fire in building or structure, sequela -X021XXA Exposure to smoke in controlled fire in building or structure, initial encounter -X021XXD Exposure to smoke in controlled fire in building or structure, subsequent encounter -X021XXS Exposure to smoke in controlled fire in building or structure, sequela -X022XXA Injury due to collapse of burning building or structure in controlled fire, initial encounter -X022XXD Injury due to collapse of burning building or structure in controlled fire, subsequent encounter -X022XXS Injury due to collapse of burning building or structure in controlled fire, sequela -X023XXA Fall from burning building or structure in controlled fire, initial encounter -X023XXD Fall from burning building or structure in controlled fire, subsequent encounter -X023XXS Fall from burning building or structure in controlled fire, sequela -X024XXA Hit by object from burning building or structure in controlled fire, initial encounter -X024XXD Hit by object from burning building or structure in controlled fire, subsequent encounter -X024XXS Hit by object from burning building or structure in controlled fire, sequela -X025XXA Jump from burning building or structure in controlled fire, initial encounter -X025XXD Jump from burning building or structure in controlled fire, subsequent encounter -X025XXS Jump from burning building or structure in controlled fire, sequela -X028XXA Other exposure to controlled fire in building or structure, initial encounter -X028XXD Other exposure to controlled fire in building or structure, subsequent encounter -X028XXS Other exposure to controlled fire in building or structure, sequela -X030XXA Exposure to flames in controlled fire, not in building or structure, initial encounter -X030XXD Exposure to flames in controlled fire, not in building or structure, subsequent encounter -X030XXS Exposure to flames in controlled fire, not in building or structure, sequela -X031XXA Exposure to smoke in controlled fire, not in building or structure, initial encounter -X031XXD Exposure to smoke in controlled fire, not in building or structure, subsequent encounter -X031XXS Exposure to smoke in controlled fire, not in building or structure, sequela -X033XXA Fall due to controlled fire, not in building or structure, initial encounter -X033XXD Fall due to controlled fire, not in building or structure, subsequent encounter -X033XXS Fall due to controlled fire, not in building or structure, sequela -X034XXA Hit by object due to controlled fire, not in building or structure, initial encounter -X034XXD Hit by object due to controlled fire, not in building or structure, subsequent encounter -X034XXS Hit by object due to controlled fire, not in building or structure, sequela -X038XXA Other exposure to controlled fire, not in building or structure, initial encounter -X038XXD Other exposure to controlled fire, not in building or structure, subsequent encounter -X038XXS Other exposure to controlled fire, not in building or structure, sequela -X04XXXA Exposure to ignition of highly flammable material, initial encounter -X04XXXD Exposure to ignition of highly flammable material, subsequent encounter -X04XXXS Exposure to ignition of highly flammable material, sequela -X05XXXA Exposure to ignition or melting of nightwear, initial encounter -X05XXXD Exposure to ignition or melting of nightwear, subsequent encounter -X05XXXS Exposure to ignition or melting of nightwear, sequela -X060XXA Exposure to ignition of plastic jewelry, initial encounter -X060XXD Exposure to ignition of plastic jewelry, subsequent encounter -X060XXS Exposure to ignition of plastic jewelry, sequela -X061XXA Exposure to melting of plastic jewelry, initial encounter -X061XXD Exposure to melting of plastic jewelry, subsequent encounter -X061XXS Exposure to melting of plastic jewelry, sequela -X062XXA Exposure to ignition of other clothing and apparel, initial encounter -X062XXD Exposure to ignition of other clothing and apparel, subsequent encounter -X062XXS Exposure to ignition of other clothing and apparel, sequela -X063XXA Exposure to melting of other clothing and apparel, initial encounter -X063XXD Exposure to melting of other clothing and apparel, subsequent encounter -X063XXS Exposure to melting of other clothing and apparel, sequela -X0800XA Exposure to bed fire due to unspecified burning material, initial encounter -X0800XD Exposure to bed fire due to unspecified burning material, subsequent encounter -X0800XS Exposure to bed fire due to unspecified burning material, sequela -X0801XA Exposure to bed fire due to burning cigarette, initial encounter -X0801XD Exposure to bed fire due to burning cigarette, subsequent encounter -X0801XS Exposure to bed fire due to burning cigarette, sequela -X0809XA Exposure to bed fire due to other burning material, initial encounter -X0809XD Exposure to bed fire due to other burning material, subsequent encounter -X0809XS Exposure to bed fire due to other burning material, sequela -X0810XA Exposure to sofa fire due to unspecified burning material, initial encounter -X0810XD Exposure to sofa fire due to unspecified burning material, subsequent encounter -X0810XS Exposure to sofa fire due to unspecified burning material, sequela -X0811XA Exposure to sofa fire due to burning cigarette, initial encounter -X0811XD Exposure to sofa fire due to burning cigarette, subsequent encounter -X0811XS Exposure to sofa fire due to burning cigarette, sequela -X0819XA Exposure to sofa fire due to other burning material, initial encounter -X0819XD Exposure to sofa fire due to other burning material, subsequent encounter -X0819XS Exposure to sofa fire due to other burning material, sequela -X0820XA Exposure to other furniture fire due to unspecified burning material, initial encounter -X0820XD Exposure to other furniture fire due to unspecified burning material, subsequent encounter -X0820XS Exposure to other furniture fire due to unspecified burning material, sequela -X0821XA Exposure to other furniture fire due to burning cigarette, initial encounter -X0821XD Exposure to other furniture fire due to burning cigarette, subsequent encounter -X0821XS Exposure to other furniture fire due to burning cigarette, sequela -X0829XA Exposure to other furniture fire due to other burning material, initial encounter -X0829XD Exposure to other furniture fire due to other burning material, subsequent encounter -X0829XS Exposure to other furniture fire due to other burning material, sequela -X088XXA Exposure to other specified smoke, fire and flames, initial encounter -X088XXD Exposure to other specified smoke, fire and flames, subsequent encounter -X088XXS Exposure to other specified smoke, fire and flames, sequela -X100XXA Contact with hot drinks, initial encounter -X100XXD Contact with hot drinks, subsequent encounter -X100XXS Contact with hot drinks, sequela -X101XXA Contact with hot food, initial encounter -X101XXD Contact with hot food, subsequent encounter -X101XXS Contact with hot food, sequela -X102XXA Contact with fats and cooking oils, initial encounter -X102XXD Contact with fats and cooking oils, subsequent encounter -X102XXS Contact with fats and cooking oils, sequela -X110XXA Contact with hot water in bath or tub, initial encounter -X110XXD Contact with hot water in bath or tub, subsequent encounter -X110XXS Contact with hot water in bath or tub, sequela -X111XXA Contact with running hot water, initial encounter -X111XXD Contact with running hot water, subsequent encounter -X111XXS Contact with running hot water, sequela -X118XXA Contact with other hot tap-water, initial encounter -X118XXD Contact with other hot tap-water, subsequent encounter -X118XXS Contact with other hot tap-water, sequela -X12XXXA Contact with other hot fluids, initial encounter -X12XXXD Contact with other hot fluids, subsequent encounter -X12XXXS Contact with other hot fluids, sequela -X130XXA Inhalation of steam and other hot vapors, initial encounter -X130XXD Inhalation of steam and other hot vapors, subsequent encounter -X130XXS Inhalation of steam and other hot vapors, sequela -X131XXA Other contact with steam and other hot vapors, initial encounter -X131XXD Other contact with steam and other hot vapors, subsequent encounter -X131XXS Other contact with steam and other hot vapors, sequela -X140XXA Inhalation of hot air and gases, initial encounter -X140XXD Inhalation of hot air and gases, subsequent encounter -X140XXS Inhalation of hot air and gases, sequela -X141XXA Other contact with hot air and other hot gases, initial encounter -X141XXD Other contact with hot air and other hot gases, subsequent encounter -X141XXS Other contact with hot air and other hot gases, sequela -X150XXA Contact with hot stove (kitchen), initial encounter -X150XXD Contact with hot stove (kitchen), subsequent encounter -X150XXS Contact with hot stove (kitchen), sequela -X151XXA Contact with hot toaster, initial encounter -X151XXD Contact with hot toaster, subsequent encounter -X151XXS Contact with hot toaster, sequela -X152XXA Contact with hotplate, initial encounter -X152XXD Contact with hotplate, subsequent encounter -X152XXS Contact with hotplate, sequela -X153XXA Contact with hot saucepan or skillet, initial encounter -X153XXD Contact with hot saucepan or skillet, subsequent encounter -X153XXS Contact with hot saucepan or skillet, sequela -X158XXA Contact with other hot household appliances, initial encounter -X158XXD Contact with other hot household appliances, subsequent encounter -X158XXS Contact with other hot household appliances, sequela -X16XXXA Contact with hot heating appliances, radiators and pipes, initial encounter -X16XXXD Contact with hot heating appliances, radiators and pipes, subsequent encounter -X16XXXS Contact with hot heating appliances, radiators and pipes, sequela -X17XXXA Contact with hot engines, machinery and tools, initial encounter -X17XXXD Contact with hot engines, machinery and tools, subsequent encounter -X17XXXS Contact with hot engines, machinery and tools, sequela -X18XXXA Contact with other hot metals, initial encounter -X18XXXD Contact with other hot metals, subsequent encounter -X18XXXS Contact with other hot metals, sequela -X19XXXA Contact with other heat and hot substances, initial encounter -X19XXXD Contact with other heat and hot substances, subsequent encounter -X19XXXS Contact with other heat and hot substances, sequela -X30XXXA Exposure to excessive natural heat, initial encounter -X30XXXD Exposure to excessive natural heat, subsequent encounter -X30XXXS Exposure to excessive natural heat, sequela -X31XXXA Exposure to excessive natural cold, initial encounter -X31XXXD Exposure to excessive natural cold, subsequent encounter -X31XXXS Exposure to excessive natural cold, sequela -X32XXXA Exposure to sunlight, initial encounter -X32XXXD Exposure to sunlight, subsequent encounter -X32XXXS Exposure to sunlight, sequela -X34XXXA Earthquake, initial encounter -X34XXXD Earthquake, subsequent encounter -X34XXXS Earthquake, sequela -X35XXXA Volcanic eruption, initial encounter -X35XXXD Volcanic eruption, subsequent encounter -X35XXXS Volcanic eruption, sequela -X360XXA Collapse of dam or man-made structure causing earth movement, initial encounter -X360XXD Collapse of dam or man-made structure causing earth movement, subsequent encounter -X360XXS Collapse of dam or man-made structure causing earth movement, sequela -X361XXA Avalanche, landslide, or mudslide, initial encounter -X361XXD Avalanche, landslide, or mudslide, subsequent encounter -X361XXS Avalanche, landslide, or mudslide, sequela -X370XXA Hurricane, initial encounter -X370XXD Hurricane, subsequent encounter -X370XXS Hurricane, sequela -X371XXA Tornado, initial encounter -X371XXD Tornado, subsequent encounter -X371XXS Tornado, sequela -X372XXA Blizzard (snow)(ice), initial encounter -X372XXD Blizzard (snow)(ice), subsequent encounter -X372XXS Blizzard (snow)(ice), sequela -X373XXA Dust storm, initial encounter -X373XXD Dust storm, subsequent encounter -X373XXS Dust storm, sequela -X3741XA Tidal wave due to earthquake or volcanic eruption, initial encounter -X3741XD Tidal wave due to earthquake or volcanic eruption, subsequent encounter -X3741XS Tidal wave due to earthquake or volcanic eruption, sequela -X3742XA Tidal wave due to storm, initial encounter -X3742XD Tidal wave due to storm, subsequent encounter -X3742XS Tidal wave due to storm, sequela -X3743XA Tidal wave due to landslide, initial encounter -X3743XD Tidal wave due to landslide, subsequent encounter -X3743XS Tidal wave due to landslide, sequela -X378XXA Other cataclysmic storms, initial encounter -X378XXD Other cataclysmic storms, subsequent encounter -X378XXS Other cataclysmic storms, sequela -X379XXA Unspecified cataclysmic storm, initial encounter -X379XXD Unspecified cataclysmic storm, subsequent encounter -X379XXS Unspecified cataclysmic storm, sequela -X38XXXA Flood, initial encounter -X38XXXD Flood, subsequent encounter -X38XXXS Flood, sequela -X3901XA Exposure to radon, initial encounter -X3901XD Exposure to radon, subsequent encounter -X3901XS Exposure to radon, sequela -X3908XA Exposure to other natural radiation, initial encounter -X3908XD Exposure to other natural radiation, subsequent encounter -X3908XS Exposure to other natural radiation, sequela -X398XXA Other exposure to forces of nature, initial encounter -X398XXD Other exposure to forces of nature, subsequent encounter -X398XXS Other exposure to forces of nature, sequela -X52XXXA Prolonged stay in weightless environment, initial encounter -X52XXXD Prolonged stay in weightless environment, subsequent encounter -X52XXXS Prolonged stay in weightless environment, sequela -X58XXXA Exposure to other specified factors, initial encounter -X58XXXD Exposure to other specified factors, subsequent encounter -X58XXXS Exposure to other specified factors, sequela -X710XXA Intentional self-harm by drowning and submersion while in bathtub, initial encounter -X710XXD Intentional self-harm by drowning and submersion while in bathtub, subsequent encounter -X710XXS Intentional self-harm by drowning and submersion while in bathtub, sequela -X711XXA Intentional self-harm by drowning and submersion while in swimming pool, initial encounter -X711XXD Intentional self-harm by drowning and submersion while in swimming pool, subsequent encounter -X711XXS Intentional self-harm by drowning and submersion while in swimming pool, sequela -X712XXA Intentional self-harm by drowning and submersion after jump into swimming pool, initial encounter -X712XXD Intentional self-harm by drowning and submersion after jump into swimming pool, subsequent encounter -X712XXS Intentional self-harm by drowning and submersion after jump into swimming pool, sequela -X713XXA Intentional self-harm by drowning and submersion in natural water, initial encounter -X713XXD Intentional self-harm by drowning and submersion in natural water, subsequent encounter -X713XXS Intentional self-harm by drowning and submersion in natural water, sequela -X718XXA Other intentional self-harm by drowning and submersion, initial encounter -X718XXD Other intentional self-harm by drowning and submersion, subsequent encounter -X718XXS Other intentional self-harm by drowning and submersion, sequela -X719XXA Intentional self-harm by drowning and submersion, unspecified, initial encounter -X719XXD Intentional self-harm by drowning and submersion, unspecified, subsequent encounter -X719XXS Intentional self-harm by drowning and submersion, unspecified, sequela -X72XXXA Intentional self-harm by handgun discharge, initial encounter -X72XXXD Intentional self-harm by handgun discharge, subsequent encounter -X72XXXS Intentional self-harm by handgun discharge, sequela -X730XXA Intentional self-harm by shotgun discharge, initial encounter -X730XXD Intentional self-harm by shotgun discharge, subsequent encounter -X730XXS Intentional self-harm by shotgun discharge, sequela -X731XXA Intentional self-harm by hunting rifle discharge, initial encounter -X731XXD Intentional self-harm by hunting rifle discharge, subsequent encounter -X731XXS Intentional self-harm by hunting rifle discharge, sequela -X732XXA Intentional self-harm by machine gun discharge, initial encounter -X732XXD Intentional self-harm by machine gun discharge, subsequent encounter -X732XXS Intentional self-harm by machine gun discharge, sequela -X738XXA Intentional self-harm by other larger firearm discharge, initial encounter -X738XXD Intentional self-harm by other larger firearm discharge, subsequent encounter -X738XXS Intentional self-harm by other larger firearm discharge, sequela -X739XXA Intentional self-harm by unspecified larger firearm discharge, initial encounter -X739XXD Intentional self-harm by unspecified larger firearm discharge, subsequent encounter -X739XXS Intentional self-harm by unspecified larger firearm discharge, sequela -X7401XA Intentional self-harm by airgun, initial encounter -X7401XD Intentional self-harm by airgun, subsequent encounter -X7401XS Intentional self-harm by airgun, sequela -X7402XA Intentional self-harm by paintball gun, initial encounter -X7402XD Intentional self-harm by paintball gun, subsequent encounter -X7402XS Intentional self-harm by paintball gun, sequela -X7409XA Intentional self-harm by other gas, air or spring-operated gun, initial encounter -X7409XD Intentional self-harm by other gas, air or spring-operated gun, subsequent encounter -X7409XS Intentional self-harm by other gas, air or spring-operated gun, sequela -X748XXA Intentional self-harm by other firearm discharge, initial encounter -X748XXD Intentional self-harm by other firearm discharge, subsequent encounter -X748XXS Intentional self-harm by other firearm discharge, sequela -X749XXA Intentional self-harm by unspecified firearm discharge, initial encounter -X749XXD Intentional self-harm by unspecified firearm discharge, subsequent encounter -X749XXS Intentional self-harm by unspecified firearm discharge, sequela -X75XXXA Intentional self-harm by explosive material, initial encounter -X75XXXD Intentional self-harm by explosive material, subsequent encounter -X75XXXS Intentional self-harm by explosive material, sequela -X76XXXA Intentional self-harm by smoke, fire and flames, initial encounter -X76XXXD Intentional self-harm by smoke, fire and flames, subsequent encounter -X76XXXS Intentional self-harm by smoke, fire and flames, sequela -X770XXA Intentional self-harm by steam or hot vapors, initial encounter -X770XXD Intentional self-harm by steam or hot vapors, subsequent encounter -X770XXS Intentional self-harm by steam or hot vapors, sequela -X771XXA Intentional self-harm by hot tap water, initial encounter -X771XXD Intentional self-harm by hot tap water, subsequent encounter -X771XXS Intentional self-harm by hot tap water, sequela -X772XXA Intentional self-harm by other hot fluids, initial encounter -X772XXD Intentional self-harm by other hot fluids, subsequent encounter -X772XXS Intentional self-harm by other hot fluids, sequela -X773XXA Intentional self-harm by hot household appliances, initial encounter -X773XXD Intentional self-harm by hot household appliances, subsequent encounter -X773XXS Intentional self-harm by hot household appliances, sequela -X778XXA Intentional self-harm by other hot objects, initial encounter -X778XXD Intentional self-harm by other hot objects, subsequent encounter -X778XXS Intentional self-harm by other hot objects, sequela -X779XXA Intentional self-harm by unspecified hot objects, initial encounter -X779XXD Intentional self-harm by unspecified hot objects, subsequent encounter -X779XXS Intentional self-harm by unspecified hot objects, sequela -X780XXA Intentional self-harm by sharp glass, initial encounter -X780XXD Intentional self-harm by sharp glass, subsequent encounter -X780XXS Intentional self-harm by sharp glass, sequela -X781XXA Intentional self-harm by knife, initial encounter -X781XXD Intentional self-harm by knife, subsequent encounter -X781XXS Intentional self-harm by knife, sequela -X782XXA Intentional self-harm by sword or dagger, initial encounter -X782XXD Intentional self-harm by sword or dagger, subsequent encounter -X782XXS Intentional self-harm by sword or dagger, sequela -X788XXA Intentional self-harm by other sharp object, initial encounter -X788XXD Intentional self-harm by other sharp object, subsequent encounter -X788XXS Intentional self-harm by other sharp object, sequela -X789XXA Intentional self-harm by unspecified sharp object, initial encounter -X789XXD Intentional self-harm by unspecified sharp object, subsequent encounter -X789XXS Intentional self-harm by unspecified sharp object, sequela -X79XXXA Intentional self-harm by blunt object, initial encounter -X79XXXD Intentional self-harm by blunt object, subsequent encounter -X79XXXS Intentional self-harm by blunt object, sequela -X80XXXA Intentional self-harm by jumping from a high place, initial encounter -X80XXXD Intentional self-harm by jumping from a high place, subsequent encounter -X80XXXS Intentional self-harm by jumping from a high place, sequela -X810XXA Intentional self-harm by jumping or lying in front of motor vehicle, initial encounter -X810XXD Intentional self-harm by jumping or lying in front of motor vehicle, subsequent encounter -X810XXS Intentional self-harm by jumping or lying in front of motor vehicle, sequela -X811XXA Intentional self-harm by jumping or lying in front of (subway) train, initial encounter -X811XXD Intentional self-harm by jumping or lying in front of (subway) train, subsequent encounter -X811XXS Intentional self-harm by jumping or lying in front of (subway) train, sequela -X818XXA Intentional self-harm by jumping or lying in front of other moving object, initial encounter -X818XXD Intentional self-harm by jumping or lying in front of other moving object, subsequent encounter -X818XXS Intentional self-harm by jumping or lying in front of other moving object, sequela -X820XXA Intentional collision of motor vehicle with other motor vehicle, initial encounter -X820XXD Intentional collision of motor vehicle with other motor vehicle, subsequent encounter -X820XXS Intentional collision of motor vehicle with other motor vehicle, sequela -X821XXA Intentional collision of motor vehicle with train, initial encounter -X821XXD Intentional collision of motor vehicle with train, subsequent encounter -X821XXS Intentional collision of motor vehicle with train, sequela -X822XXA Intentional collision of motor vehicle with tree, initial encounter -X822XXD Intentional collision of motor vehicle with tree, subsequent encounter -X822XXS Intentional collision of motor vehicle with tree, sequela -X828XXA Other intentional self-harm by crashing of motor vehicle, initial encounter -X828XXD Other intentional self-harm by crashing of motor vehicle, subsequent encounter -X828XXS Other intentional self-harm by crashing of motor vehicle, sequela -X830XXA Intentional self-harm by crashing of aircraft, initial encounter -X830XXD Intentional self-harm by crashing of aircraft, subsequent encounter -X830XXS Intentional self-harm by crashing of aircraft, sequela -X831XXA Intentional self-harm by electrocution, initial encounter -X831XXD Intentional self-harm by electrocution, subsequent encounter -X831XXS Intentional self-harm by electrocution, sequela -X832XXA Intentional self-harm by exposure to extremes of cold, initial encounter -X832XXD Intentional self-harm by exposure to extremes of cold, subsequent encounter -X832XXS Intentional self-harm by exposure to extremes of cold, sequela -X838XXA Intentional self-harm by other specified means, initial encounter -X838XXD Intentional self-harm by other specified means, subsequent encounter -X838XXS Intentional self-harm by other specified means, sequela -X920XXA Assault by drowning and submersion while in bathtub, initial encounter -X920XXD Assault by drowning and submersion while in bathtub, subsequent encounter -X920XXS Assault by drowning and submersion while in bathtub, sequela -X921XXA Assault by drowning and submersion while in swimming pool, initial encounter -X921XXD Assault by drowning and submersion while in swimming pool, subsequent encounter -X921XXS Assault by drowning and submersion while in swimming pool, sequela -X922XXA Assault by drowning and submersion after push into swimming pool, initial encounter -X922XXD Assault by drowning and submersion after push into swimming pool, subsequent encounter -X922XXS Assault by drowning and submersion after push into swimming pool, sequela -X923XXA Assault by drowning and submersion in natural water, initial encounter -X923XXD Assault by drowning and submersion in natural water, subsequent encounter -X923XXS Assault by drowning and submersion in natural water, sequela -X928XXA Other assault by drowning and submersion, initial encounter -X928XXD Other assault by drowning and submersion, subsequent encounter -X928XXS Other assault by drowning and submersion, sequela -X929XXA Assault by drowning and submersion, unspecified, initial encounter -X929XXD Assault by drowning and submersion, unspecified, subsequent encounter -X929XXS Assault by drowning and submersion, unspecified, sequela -X93XXXA Assault by handgun discharge, initial encounter -X93XXXD Assault by handgun discharge, subsequent encounter -X93XXXS Assault by handgun discharge, sequela -X940XXA Assault by shotgun, initial encounter -X940XXD Assault by shotgun, subsequent encounter -X940XXS Assault by shotgun, sequela -X941XXA Assault by hunting rifle, initial encounter -X941XXD Assault by hunting rifle, subsequent encounter -X941XXS Assault by hunting rifle, sequela -X942XXA Assault by machine gun, initial encounter -X942XXD Assault by machine gun, subsequent encounter -X942XXS Assault by machine gun, sequela -X948XXA Assault by other larger firearm discharge, initial encounter -X948XXD Assault by other larger firearm discharge, subsequent encounter -X948XXS Assault by other larger firearm discharge, sequela -X949XXA Assault by unspecified larger firearm discharge, initial encounter -X949XXD Assault by unspecified larger firearm discharge, subsequent encounter -X949XXS Assault by unspecified larger firearm discharge, sequela -X9501XA Assault by airgun discharge, initial encounter -X9501XD Assault by airgun discharge, subsequent encounter -X9501XS Assault by airgun discharge, sequela -X9502XA Assault by paintball gun discharge, initial encounter -X9502XD Assault by paintball gun discharge, subsequent encounter -X9502XS Assault by paintball gun discharge, sequela -X9509XA Assault by other gas, air or spring-operated gun, initial encounter -X9509XD Assault by other gas, air or spring-operated gun, subsequent encounter -X9509XS Assault by other gas, air or spring-operated gun, sequela -X958XXA Assault by other firearm discharge, initial encounter -X958XXD Assault by other firearm discharge, subsequent encounter -X958XXS Assault by other firearm discharge, sequela -X959XXA Assault by unspecified firearm discharge, initial encounter -X959XXD Assault by unspecified firearm discharge, subsequent encounter -X959XXS Assault by unspecified firearm discharge, sequela -X960XXA Assault by antipersonnel bomb, initial encounter -X960XXD Assault by antipersonnel bomb, subsequent encounter -X960XXS Assault by antipersonnel bomb, sequela -X961XXA Assault by gasoline bomb, initial encounter -X961XXD Assault by gasoline bomb, subsequent encounter -X961XXS Assault by gasoline bomb, sequela -X962XXA Assault by letter bomb, initial encounter -X962XXD Assault by letter bomb, subsequent encounter -X962XXS Assault by letter bomb, sequela -X963XXA Assault by fertilizer bomb, initial encounter -X963XXD Assault by fertilizer bomb, subsequent encounter -X963XXS Assault by fertilizer bomb, sequela -X964XXA Assault by pipe bomb, initial encounter -X964XXD Assault by pipe bomb, subsequent encounter -X964XXS Assault by pipe bomb, sequela -X968XXA Assault by other specified explosive, initial encounter -X968XXD Assault by other specified explosive, subsequent encounter -X968XXS Assault by other specified explosive, sequela -X969XXA Assault by unspecified explosive, initial encounter -X969XXD Assault by unspecified explosive, subsequent encounter -X969XXS Assault by unspecified explosive, sequela -X97XXXA Assault by smoke, fire and flames, initial encounter -X97XXXD Assault by smoke, fire and flames, subsequent encounter -X97XXXS Assault by smoke, fire and flames, sequela -X980XXA Assault by steam or hot vapors, initial encounter -X980XXD Assault by steam or hot vapors, subsequent encounter -X980XXS Assault by steam or hot vapors, sequela -X981XXA Assault by hot tap water, initial encounter -X981XXD Assault by hot tap water, subsequent encounter -X981XXS Assault by hot tap water, sequela -X982XXA Assault by hot fluids, initial encounter -X982XXD Assault by hot fluids, subsequent encounter -X982XXS Assault by hot fluids, sequela -X983XXA Assault by hot household appliances, initial encounter -X983XXD Assault by hot household appliances, subsequent encounter -X983XXS Assault by hot household appliances, sequela -X988XXA Assault by other hot objects, initial encounter -X988XXD Assault by other hot objects, subsequent encounter -X988XXS Assault by other hot objects, sequela -X989XXA Assault by unspecified hot objects, initial encounter -X989XXD Assault by unspecified hot objects, subsequent encounter -X989XXS Assault by unspecified hot objects, sequela -X990XXA Assault by sharp glass, initial encounter -X990XXD Assault by sharp glass, subsequent encounter -X990XXS Assault by sharp glass, sequela -X991XXA Assault by knife, initial encounter -X991XXD Assault by knife, subsequent encounter -X991XXS Assault by knife, sequela -X992XXA Assault by sword or dagger, initial encounter -X992XXD Assault by sword or dagger, subsequent encounter -X992XXS Assault by sword or dagger, sequela -X998XXA Assault by other sharp object, initial encounter -X998XXD Assault by other sharp object, subsequent encounter -X998XXS Assault by other sharp object, sequela -X999XXA Assault by unspecified sharp object, initial encounter -X999XXD Assault by unspecified sharp object, subsequent encounter -X999XXS Assault by unspecified sharp object, sequela -Y00XXXA Assault by blunt object, initial encounter -Y00XXXD Assault by blunt object, subsequent encounter -Y00XXXS Assault by blunt object, sequela -Y01XXXA Assault by pushing from high place, initial encounter -Y01XXXD Assault by pushing from high place, subsequent encounter -Y01XXXS Assault by pushing from high place, sequela -Y020XXA Assault by pushing or placing victim in front of motor vehicle, initial encounter -Y020XXD Assault by pushing or placing victim in front of motor vehicle, subsequent encounter -Y020XXS Assault by pushing or placing victim in front of motor vehicle, sequela -Y021XXA Assault by pushing or placing victim in front of (subway) train, initial encounter -Y021XXD Assault by pushing or placing victim in front of (subway) train, subsequent encounter -Y021XXS Assault by pushing or placing victim in front of (subway) train, sequela -Y028XXA Assault by pushing or placing victim in front of other moving object, initial encounter -Y028XXD Assault by pushing or placing victim in front of other moving object, subsequent encounter -Y028XXS Assault by pushing or placing victim in front of other moving object, sequela -Y030XXA Assault by being hit or run over by motor vehicle, initial encounter -Y030XXD Assault by being hit or run over by motor vehicle, subsequent encounter -Y030XXS Assault by being hit or run over by motor vehicle, sequela -Y038XXA Other assault by crashing of motor vehicle, initial encounter -Y038XXD Other assault by crashing of motor vehicle, subsequent encounter -Y038XXS Other assault by crashing of motor vehicle, sequela -Y040XXA Assault by unarmed brawl or fight, initial encounter -Y040XXD Assault by unarmed brawl or fight, subsequent encounter -Y040XXS Assault by unarmed brawl or fight, sequela -Y041XXA Assault by human bite, initial encounter -Y041XXD Assault by human bite, subsequent encounter -Y041XXS Assault by human bite, sequela -Y042XXA Assault by strike against or bumped into by another person, initial encounter -Y042XXD Assault by strike against or bumped into by another person, subsequent encounter -Y042XXS Assault by strike against or bumped into by another person, sequela -Y048XXA Assault by other bodily force, initial encounter -Y048XXD Assault by other bodily force, subsequent encounter -Y048XXS Assault by other bodily force, sequela -Y0701 Husband, perpetrator of maltreatment and neglect -Y0702 Wife, perpetrator of maltreatment and neglect -Y0703 Male partner, perpetrator of maltreatment and neglect -Y0704 Female partner, perpetrator of maltreatment and neglect -Y0711 Biological father, perpetrator of maltreatment and neglect -Y0712 Biological mother, perpetrator of maltreatment and neglect -Y0713 Adoptive father, perpetrator of maltreatment and neglect -Y0714 Adoptive mother, perpetrator of maltreatment and neglect -Y07410 Brother, perpetrator of maltreatment and neglect -Y07411 Sister, perpetrator of maltreatment and neglect -Y07420 Foster father, perpetrator of maltreatment and neglect -Y07421 Foster mother, perpetrator of maltreatment and neglect -Y07430 Stepfather, perpetrator of maltreatment and neglect -Y07432 Male friend of parent (co-residing in household), perpetrator of maltreatment and neglect -Y07433 Stepmother, perpetrator of maltreatment and neglect -Y07434 Female friend of parent (co-residing in household), perpetrator of maltreatment and neglect -Y07435 Stepbrother, perpetrator or maltreatment and neglect -Y07436 Stepsister, perpetrator of maltreatment and neglect -Y07490 Male cousin, perpetrator of maltreatment and neglect -Y07491 Female cousin, perpetrator of maltreatment and neglect -Y07499 Other family member, perpetrator of maltreatment and neglect -Y0750 Unspecified non-family member, perpetrator of maltreatment and neglect -Y07510 At-home childcare provider, perpetrator of maltreatment and neglect -Y07511 Daycare center childcare provider, perpetrator of maltreatment and neglect -Y07512 At-home adultcare provider, perpetrator of maltreatment and neglect -Y07513 Adultcare center provider, perpetrator of maltreatment and neglect -Y07519 Unspecified daycare provider, perpetrator of maltreatment and neglect -Y07521 Mental health provider, perpetrator of maltreatment and neglect -Y07528 Other therapist or healthcare provider, perpetrator of maltreatment and neglect -Y07529 Unspecified healthcare provider, perpetrator of maltreatment and neglect -Y0753 Teacher or instructor, perpetrator of maltreatment and neglect -Y0759 Other non-family member, perpetrator of maltreatment and neglect -Y079 Unspecified perpetrator of maltreatment and neglect -Y0801XA Assault by strike by hockey stick, initial encounter -Y0801XD Assault by strike by hockey stick, subsequent encounter -Y0801XS Assault by strike by hockey stick, sequela -Y0802XA Assault by strike by baseball bat, initial encounter -Y0802XD Assault by strike by baseball bat, subsequent encounter -Y0802XS Assault by strike by baseball bat, sequela -Y0809XA Assault by strike by other specified type of sport equipment, initial encounter -Y0809XD Assault by strike by other specified type of sport equipment, subsequent encounter -Y0809XS Assault by strike by other specified type of sport equipment, sequela -Y0881XA Assault by crashing of aircraft, initial encounter -Y0881XD Assault by crashing of aircraft, subsequent encounter -Y0881XS Assault by crashing of aircraft, sequela -Y0889XA Assault by other specified means, initial encounter -Y0889XD Assault by other specified means, subsequent encounter -Y0889XS Assault by other specified means, sequela -Y09 Assault by unspecified means -Y210XXA Drowning and submersion while in bathtub, undetermined intent, initial encounter -Y210XXD Drowning and submersion while in bathtub, undetermined intent, subsequent encounter -Y210XXS Drowning and submersion while in bathtub, undetermined intent, sequela -Y211XXA Drowning and submersion after fall into bathtub, undetermined intent, initial encounter -Y211XXD Drowning and submersion after fall into bathtub, undetermined intent, subsequent encounter -Y211XXS Drowning and submersion after fall into bathtub, undetermined intent, sequela -Y212XXA Drowning and submersion while in swimming pool, undetermined intent, initial encounter -Y212XXD Drowning and submersion while in swimming pool, undetermined intent, subsequent encounter -Y212XXS Drowning and submersion while in swimming pool, undetermined intent, sequela -Y213XXA Drowning and submersion after fall into swimming pool, undetermined intent, initial encounter -Y213XXD Drowning and submersion after fall into swimming pool, undetermined intent, subsequent encounter -Y213XXS Drowning and submersion after fall into swimming pool, undetermined intent, sequela -Y214XXA Drowning and submersion in natural water, undetermined intent, initial encounter -Y214XXD Drowning and submersion in natural water, undetermined intent, subsequent encounter -Y214XXS Drowning and submersion in natural water, undetermined intent, sequela -Y218XXA Other drowning and submersion, undetermined intent, initial encounter -Y218XXD Other drowning and submersion, undetermined intent, subsequent encounter -Y218XXS Other drowning and submersion, undetermined intent, sequela -Y219XXA Unspecified drowning and submersion, undetermined intent, initial encounter -Y219XXD Unspecified drowning and submersion, undetermined intent, subsequent encounter -Y219XXS Unspecified drowning and submersion, undetermined intent, sequela -Y22XXXA Handgun discharge, undetermined intent, initial encounter -Y22XXXD Handgun discharge, undetermined intent, subsequent encounter -Y22XXXS Handgun discharge, undetermined intent, sequela -Y230XXA Shotgun discharge, undetermined intent, initial encounter -Y230XXD Shotgun discharge, undetermined intent, subsequent encounter -Y230XXS Shotgun discharge, undetermined intent, sequela -Y231XXA Hunting rifle discharge, undetermined intent, initial encounter -Y231XXD Hunting rifle discharge, undetermined intent, subsequent encounter -Y231XXS Hunting rifle discharge, undetermined intent, sequela -Y232XXA Military firearm discharge, undetermined intent, initial encounter -Y232XXD Military firearm discharge, undetermined intent, subsequent encounter -Y232XXS Military firearm discharge, undetermined intent, sequela -Y233XXA Machine gun discharge, undetermined intent, initial encounter -Y233XXD Machine gun discharge, undetermined intent, subsequent encounter -Y233XXS Machine gun discharge, undetermined intent, sequela -Y238XXA Other larger firearm discharge, undetermined intent, initial encounter -Y238XXD Other larger firearm discharge, undetermined intent, subsequent encounter -Y238XXS Other larger firearm discharge, undetermined intent, sequela -Y239XXA Unspecified larger firearm discharge, undetermined intent, initial encounter -Y239XXD Unspecified larger firearm discharge, undetermined intent, subsequent encounter -Y239XXS Unspecified larger firearm discharge, undetermined intent, sequela -Y240XXA Airgun discharge, undetermined intent, initial encounter -Y240XXD Airgun discharge, undetermined intent, subsequent encounter -Y240XXS Airgun discharge, undetermined intent, sequela -Y248XXA Other firearm discharge, undetermined intent, initial encounter -Y248XXD Other firearm discharge, undetermined intent, subsequent encounter -Y248XXS Other firearm discharge, undetermined intent, sequela -Y249XXA Unspecified firearm discharge, undetermined intent, initial encounter -Y249XXD Unspecified firearm discharge, undetermined intent, subsequent encounter -Y249XXS Unspecified firearm discharge, undetermined intent, sequela -Y25XXXA Contact with explosive material, undetermined intent, initial encounter -Y25XXXD Contact with explosive material, undetermined intent, subsequent encounter -Y25XXXS Contact with explosive material, undetermined intent, sequela -Y26XXXA Exposure to smoke, fire and flames, undetermined intent, initial encounter -Y26XXXD Exposure to smoke, fire and flames, undetermined intent, subsequent encounter -Y26XXXS Exposure to smoke, fire and flames, undetermined intent, sequela -Y270XXA Contact with steam and hot vapors, undetermined intent, initial encounter -Y270XXD Contact with steam and hot vapors, undetermined intent, subsequent encounter -Y270XXS Contact with steam and hot vapors, undetermined intent, sequela -Y271XXA Contact with hot tap water, undetermined intent, initial encounter -Y271XXD Contact with hot tap water, undetermined intent, subsequent encounter -Y271XXS Contact with hot tap water, undetermined intent, sequela -Y272XXA Contact with hot fluids, undetermined intent, initial encounter -Y272XXD Contact with hot fluids, undetermined intent, subsequent encounter -Y272XXS Contact with hot fluids, undetermined intent, sequela -Y273XXA Contact with hot household appliance, undetermined intent, initial encounter -Y273XXD Contact with hot household appliance, undetermined intent, subsequent encounter -Y273XXS Contact with hot household appliance, undetermined intent, sequela -Y278XXA Contact with other hot objects, undetermined intent, initial encounter -Y278XXD Contact with other hot objects, undetermined intent, subsequent encounter -Y278XXS Contact with other hot objects, undetermined intent, sequela -Y279XXA Contact with unspecified hot objects, undetermined intent, initial encounter -Y279XXD Contact with unspecified hot objects, undetermined intent, subsequent encounter -Y279XXS Contact with unspecified hot objects, undetermined intent, sequela -Y280XXA Contact with sharp glass, undetermined intent, initial encounter -Y280XXD Contact with sharp glass, undetermined intent, subsequent encounter -Y280XXS Contact with sharp glass, undetermined intent, sequela -Y281XXA Contact with knife, undetermined intent, initial encounter -Y281XXD Contact with knife, undetermined intent, subsequent encounter -Y281XXS Contact with knife, undetermined intent, sequela -Y282XXA Contact with sword or dagger, undetermined intent, initial encounter -Y282XXD Contact with sword or dagger, undetermined intent, subsequent encounter -Y282XXS Contact with sword or dagger, undetermined intent, sequela -Y288XXA Contact with other sharp object, undetermined intent, initial encounter -Y288XXD Contact with other sharp object, undetermined intent, subsequent encounter -Y288XXS Contact with other sharp object, undetermined intent, sequela -Y289XXA Contact with unspecified sharp object, undetermined intent, initial encounter -Y289XXD Contact with unspecified sharp object, undetermined intent, subsequent encounter -Y289XXS Contact with unspecified sharp object, undetermined intent, sequela -Y29XXXA Contact with blunt object, undetermined intent, initial encounter -Y29XXXD Contact with blunt object, undetermined intent, subsequent encounter -Y29XXXS Contact with blunt object, undetermined intent, sequela -Y30XXXA Falling, jumping or pushed from a high place, undetermined intent, initial encounter -Y30XXXD Falling, jumping or pushed from a high place, undetermined intent, subsequent encounter -Y30XXXS Falling, jumping or pushed from a high place, undetermined intent, sequela -Y31XXXA Falling, lying or running before or into moving object, undetermined intent, initial encounter -Y31XXXD Falling, lying or running before or into moving object, undetermined intent, subsequent encounter -Y31XXXS Falling, lying or running before or into moving object, undetermined intent, sequela -Y32XXXA Crashing of motor vehicle, undetermined intent, initial encounter -Y32XXXD Crashing of motor vehicle, undetermined intent, subsequent encounter -Y32XXXS Crashing of motor vehicle, undetermined intent, sequela -Y33XXXA Other specified events, undetermined intent, initial encounter -Y33XXXD Other specified events, undetermined intent, subsequent encounter -Y33XXXS Other specified events, undetermined intent, sequela -Y35001A Legal intervention involving unspecified firearm discharge, law enforcement official injured, initial encounter -Y35001D Legal intervention involving unspecified firearm discharge, law enforcement official injured, subsequent encounter -Y35001S Legal intervention involving unspecified firearm discharge, law enforcement official injured, sequela -Y35002A Legal intervention involving unspecified firearm discharge, bystander injured, initial encounter -Y35002D Legal intervention involving unspecified firearm discharge, bystander injured, subsequent encounter -Y35002S Legal intervention involving unspecified firearm discharge, bystander injured, sequela -Y35003A Legal intervention involving unspecified firearm discharge, suspect injured, initial encounter -Y35003D Legal intervention involving unspecified firearm discharge, suspect injured, subsequent encounter -Y35003S Legal intervention involving unspecified firearm discharge, suspect injured, sequela -Y35011A Legal intervention involving injury by machine gun, law enforcement official injured, initial encounter -Y35011D Legal intervention involving injury by machine gun, law enforcement official injured, subsequent encounter -Y35011S Legal intervention involving injury by machine gun, law enforcement official injured, sequela -Y35012A Legal intervention involving injury by machine gun, bystander injured, initial encounter -Y35012D Legal intervention involving injury by machine gun, bystander injured, subsequent encounter -Y35012S Legal intervention involving injury by machine gun, bystander injured, sequela -Y35013A Legal intervention involving injury by machine gun, suspect injured, initial encounter -Y35013D Legal intervention involving injury by machine gun, suspect injured, subsequent encounter -Y35013S Legal intervention involving injury by machine gun, suspect injured, sequela -Y35021A Legal intervention involving injury by handgun, law enforcement official injured, initial encounter -Y35021D Legal intervention involving injury by handgun, law enforcement official injured, subsequent encounter -Y35021S Legal intervention involving injury by handgun, law enforcement official injured, sequela -Y35022A Legal intervention involving injury by handgun, bystander injured, initial encounter -Y35022D Legal intervention involving injury by handgun, bystander injured, subsequent encounter -Y35022S Legal intervention involving injury by handgun, bystander injured, sequela -Y35023A Legal intervention involving injury by handgun, suspect injured, initial encounter -Y35023D Legal intervention involving injury by handgun, suspect injured, subsequent encounter -Y35023S Legal intervention involving injury by handgun, suspect injured, sequela -Y35031A Legal intervention involving injury by rifle pellet, law enforcement official injured, initial encounter -Y35031D Legal intervention involving injury by rifle pellet, law enforcement official injured, subsequent encounter -Y35031S Legal intervention involving injury by rifle pellet, law enforcement official injured, sequela -Y35032A Legal intervention involving injury by rifle pellet, bystander injured, initial encounter -Y35032D Legal intervention involving injury by rifle pellet, bystander injured, subsequent encounter -Y35032S Legal intervention involving injury by rifle pellet, bystander injured, sequela -Y35033A Legal intervention involving injury by rifle pellet, suspect injured, initial encounter -Y35033D Legal intervention involving injury by rifle pellet, suspect injured, subsequent encounter -Y35033S Legal intervention involving injury by rifle pellet, suspect injured, sequela -Y35041A Legal intervention involving injury by rubber bullet, law enforcement official injured, initial encounter -Y35041D Legal intervention involving injury by rubber bullet, law enforcement official injured, subsequent encounter -Y35041S Legal intervention involving injury by rubber bullet, law enforcement official injured, sequela -Y35042A Legal intervention involving injury by rubber bullet, bystander injured, initial encounter -Y35042D Legal intervention involving injury by rubber bullet, bystander injured, subsequent encounter -Y35042S Legal intervention involving injury by rubber bullet, bystander injured, sequela -Y35043A Legal intervention involving injury by rubber bullet, suspect injured, initial encounter -Y35043D Legal intervention involving injury by rubber bullet, suspect injured, subsequent encounter -Y35043S Legal intervention involving injury by rubber bullet, suspect injured, sequela -Y35091A Legal intervention involving other firearm discharge, law enforcement official injured, initial encounter -Y35091D Legal intervention involving other firearm discharge, law enforcement official injured, subsequent encounter -Y35091S Legal intervention involving other firearm discharge, law enforcement official injured, sequela -Y35092A Legal intervention involving other firearm discharge, bystander injured, initial encounter -Y35092D Legal intervention involving other firearm discharge, bystander injured, subsequent encounter -Y35092S Legal intervention involving other firearm discharge, bystander injured, sequela -Y35093A Legal intervention involving other firearm discharge, suspect injured, initial encounter -Y35093D Legal intervention involving other firearm discharge, suspect injured, subsequent encounter -Y35093S Legal intervention involving other firearm discharge, suspect injured, sequela -Y35101A Legal intervention involving unspecified explosives, law enforcement official injured, initial encounter -Y35101D Legal intervention involving unspecified explosives, law enforcement official injured, subsequent encounter -Y35101S Legal intervention involving unspecified explosives, law enforcement official injured, sequela -Y35102A Legal intervention involving unspecified explosives, bystander injured, initial encounter -Y35102D Legal intervention involving unspecified explosives, bystander injured, subsequent encounter -Y35102S Legal intervention involving unspecified explosives, bystander injured, sequela -Y35103A Legal intervention involving unspecified explosives, suspect injured, initial encounter -Y35103D Legal intervention involving unspecified explosives, suspect injured, subsequent encounter -Y35103S Legal intervention involving unspecified explosives, suspect injured, sequela -Y35111A Legal intervention involving injury by dynamite, law enforcement official injured, initial encounter -Y35111D Legal intervention involving injury by dynamite, law enforcement official injured, subsequent encounter -Y35111S Legal intervention involving injury by dynamite, law enforcement official injured, sequela -Y35112A Legal intervention involving injury by dynamite, bystander injured, initial encounter -Y35112D Legal intervention involving injury by dynamite, bystander injured, subsequent encounter -Y35112S Legal intervention involving injury by dynamite, bystander injured, sequela -Y35113A Legal intervention involving injury by dynamite, suspect injured, initial encounter -Y35113D Legal intervention involving injury by dynamite, suspect injured, subsequent encounter -Y35113S Legal intervention involving injury by dynamite, suspect injured, sequela -Y35121A Legal intervention involving injury by explosive shell, law enforcement official injured, initial encounter -Y35121D Legal intervention involving injury by explosive shell, law enforcement official injured, subsequent encounter -Y35121S Legal intervention involving injury by explosive shell, law enforcement official injured, sequela -Y35122A Legal intervention involving injury by explosive shell, bystander injured, initial encounter -Y35122D Legal intervention involving injury by explosive shell, bystander injured, subsequent encounter -Y35122S Legal intervention involving injury by explosive shell, bystander injured, sequela -Y35123A Legal intervention involving injury by explosive shell, suspect injured, initial encounter -Y35123D Legal intervention involving injury by explosive shell, suspect injured, subsequent encounter -Y35123S Legal intervention involving injury by explosive shell, suspect injured, sequela -Y35191A Legal intervention involving other explosives, law enforcement official injured, initial encounter -Y35191D Legal intervention involving other explosives, law enforcement official injured, subsequent encounter -Y35191S Legal intervention involving other explosives, law enforcement official injured, sequela -Y35192A Legal intervention involving other explosives, bystander injured, initial encounter -Y35192D Legal intervention involving other explosives, bystander injured, subsequent encounter -Y35192S Legal intervention involving other explosives, bystander injured, sequela -Y35193A Legal intervention involving other explosives, suspect injured, initial encounter -Y35193D Legal intervention involving other explosives, suspect injured, subsequent encounter -Y35193S Legal intervention involving other explosives, suspect injured, sequela -Y35201A Legal intervention involving unspecified gas, law enforcement official injured, initial encounter -Y35201D Legal intervention involving unspecified gas, law enforcement official injured, subsequent encounter -Y35201S Legal intervention involving unspecified gas, law enforcement official injured, sequela -Y35202A Legal intervention involving unspecified gas, bystander injured, initial encounter -Y35202D Legal intervention involving unspecified gas, bystander injured, subsequent encounter -Y35202S Legal intervention involving unspecified gas, bystander injured, sequela -Y35203A Legal intervention involving unspecified gas, suspect injured, initial encounter -Y35203D Legal intervention involving unspecified gas, suspect injured, subsequent encounter -Y35203S Legal intervention involving unspecified gas, suspect injured, sequela -Y35211A Legal intervention involving injury by tear gas, law enforcement official injured, initial encounter -Y35211D Legal intervention involving injury by tear gas, law enforcement official injured, subsequent encounter -Y35211S Legal intervention involving injury by tear gas, law enforcement official injured, sequela -Y35212A Legal intervention involving injury by tear gas, bystander injured, initial encounter -Y35212D Legal intervention involving injury by tear gas, bystander injured, subsequent encounter -Y35212S Legal intervention involving injury by tear gas, bystander injured, sequela -Y35213A Legal intervention involving injury by tear gas, suspect injured, initial encounter -Y35213D Legal intervention involving injury by tear gas, suspect injured, subsequent encounter -Y35213S Legal intervention involving injury by tear gas, suspect injured, sequela -Y35291A Legal intervention involving other gas, law enforcement official injured, initial encounter -Y35291D Legal intervention involving other gas, law enforcement official injured, subsequent encounter -Y35291S Legal intervention involving other gas, law enforcement official injured, sequela -Y35292A Legal intervention involving other gas, bystander injured, initial encounter -Y35292D Legal intervention involving other gas, bystander injured, subsequent encounter -Y35292S Legal intervention involving other gas, bystander injured, sequela -Y35293A Legal intervention involving other gas, suspect injured, initial encounter -Y35293D Legal intervention involving other gas, suspect injured, subsequent encounter -Y35293S Legal intervention involving other gas, suspect injured, sequela -Y35301A Legal intervention involving unspecified blunt objects, law enforcement official injured, initial encounter -Y35301D Legal intervention involving unspecified blunt objects, law enforcement official injured, subsequent encounter -Y35301S Legal intervention involving unspecified blunt objects, law enforcement official injured, sequela -Y35302A Legal intervention involving unspecified blunt objects, bystander injured, initial encounter -Y35302D Legal intervention involving unspecified blunt objects, bystander injured, subsequent encounter -Y35302S Legal intervention involving unspecified blunt objects, bystander injured, sequela -Y35303A Legal intervention involving unspecified blunt objects, suspect injured, initial encounter -Y35303D Legal intervention involving unspecified blunt objects, suspect injured, subsequent encounter -Y35303S Legal intervention involving unspecified blunt objects, suspect injured, sequela -Y35311A Legal intervention involving baton, law enforcement official injured, initial encounter -Y35311D Legal intervention involving baton, law enforcement official injured, subsequent encounter -Y35311S Legal intervention involving baton, law enforcement official injured, sequela -Y35312A Legal intervention involving baton, bystander injured, initial encounter -Y35312D Legal intervention involving baton, bystander injured, subsequent encounter -Y35312S Legal intervention involving baton, bystander injured, sequela -Y35313A Legal intervention involving baton, suspect injured, initial encounter -Y35313D Legal intervention involving baton, suspect injured, subsequent encounter -Y35313S Legal intervention involving baton, suspect injured, sequela -Y35391A Legal intervention involving other blunt objects, law enforcement official injured, initial encounter -Y35391D Legal intervention involving other blunt objects, law enforcement official injured, subsequent encounter -Y35391S Legal intervention involving other blunt objects, law enforcement official injured, sequela -Y35392A Legal intervention involving other blunt objects, bystander injured, initial encounter -Y35392D Legal intervention involving other blunt objects, bystander injured, subsequent encounter -Y35392S Legal intervention involving other blunt objects, bystander injured, sequela -Y35393A Legal intervention involving other blunt objects, suspect injured, initial encounter -Y35393D Legal intervention involving other blunt objects, suspect injured, subsequent encounter -Y35393S Legal intervention involving other blunt objects, suspect injured, sequela -Y35401A Legal intervention involving unspecified sharp objects, law enforcement official injured, initial encounter -Y35401D Legal intervention involving unspecified sharp objects, law enforcement official injured, subsequent encounter -Y35401S Legal intervention involving unspecified sharp objects, law enforcement official injured, sequela -Y35402A Legal intervention involving unspecified sharp objects, bystander injured, initial encounter -Y35402D Legal intervention involving unspecified sharp objects, bystander injured, subsequent encounter -Y35402S Legal intervention involving unspecified sharp objects, bystander injured, sequela -Y35403A Legal intervention involving unspecified sharp objects, suspect injured, initial encounter -Y35403D Legal intervention involving unspecified sharp objects, suspect injured, subsequent encounter -Y35403S Legal intervention involving unspecified sharp objects, suspect injured, sequela -Y35411A Legal intervention involving bayonet, law enforcement official injured, initial encounter -Y35411D Legal intervention involving bayonet, law enforcement official injured, subsequent encounter -Y35411S Legal intervention involving bayonet, law enforcement official injured, sequela -Y35412A Legal intervention involving bayonet, bystander injured, initial encounter -Y35412D Legal intervention involving bayonet, bystander injured, subsequent encounter -Y35412S Legal intervention involving bayonet, bystander injured, sequela -Y35413A Legal intervention involving bayonet, suspect injured, initial encounter -Y35413D Legal intervention involving bayonet, suspect injured, subsequent encounter -Y35413S Legal intervention involving bayonet, suspect injured, sequela -Y35491A Legal intervention involving other sharp objects, law enforcement official injured, initial encounter -Y35491D Legal intervention involving other sharp objects, law enforcement official injured, subsequent encounter -Y35491S Legal intervention involving other sharp objects, law enforcement official injured, sequela -Y35492A Legal intervention involving other sharp objects, bystander injured, initial encounter -Y35492D Legal intervention involving other sharp objects, bystander injured, subsequent encounter -Y35492S Legal intervention involving other sharp objects, bystander injured, sequela -Y35493A Legal intervention involving other sharp objects, suspect injured, initial encounter -Y35493D Legal intervention involving other sharp objects, suspect injured, subsequent encounter -Y35493S Legal intervention involving other sharp objects, suspect injured, sequela -Y35811A Legal intervention involving manhandling, law enforcement official injured, initial encounter -Y35811D Legal intervention involving manhandling, law enforcement official injured, subsequent encounter -Y35811S Legal intervention involving manhandling, law enforcement official injured, sequela -Y35812A Legal intervention involving manhandling, bystander injured, initial encounter -Y35812D Legal intervention involving manhandling, bystander injured, subsequent encounter -Y35812S Legal intervention involving manhandling, bystander injured, sequela -Y35813A Legal intervention involving manhandling, suspect injured, initial encounter -Y35813D Legal intervention involving manhandling, suspect injured, subsequent encounter -Y35813S Legal intervention involving manhandling, suspect injured, sequela -Y35891A Legal intervention involving other specified means, law enforcement official injured, initial encounter -Y35891D Legal intervention involving other specified means, law enforcement official injured, subsequent encounter -Y35891S Legal intervention involving other specified means, law enforcement official injured, sequela -Y35892A Legal intervention involving other specified means, bystander injured, initial encounter -Y35892D Legal intervention involving other specified means, bystander injured, subsequent encounter -Y35892S Legal intervention involving other specified means, bystander injured, sequela -Y35893A Legal intervention involving other specified means, suspect injured, initial encounter -Y35893D Legal intervention involving other specified means, suspect injured, subsequent encounter -Y35893S Legal intervention involving other specified means, suspect injured, sequela -Y3591XA Legal intervention, means unspecified, law enforcement official injured, initial encounter -Y3591XD Legal intervention, means unspecified, law enforcement official injured, subsequent encounter -Y3591XS Legal intervention, means unspecified, law enforcement official injured, sequela -Y3592XA Legal intervention, means unspecified, bystander injured, initial encounter -Y3592XD Legal intervention, means unspecified, bystander injured, subsequent encounter -Y3592XS Legal intervention, means unspecified, bystander injured, sequela -Y3593XA Legal intervention, means unspecified, suspect injured, initial encounter -Y3593XD Legal intervention, means unspecified, suspect injured, subsequent encounter -Y3593XS Legal intervention, means unspecified, suspect injured, sequela -Y36000A War operations involving explosion of unspecified marine weapon, military personnel, initial encounter -Y36000D War operations involving explosion of unspecified marine weapon, military personnel, subsequent encounter -Y36000S War operations involving explosion of unspecified marine weapon, military personnel, sequela -Y36001A War operations involving explosion of unspecified marine weapon, civilian, initial encounter -Y36001D War operations involving explosion of unspecified marine weapon, civilian, subsequent encounter -Y36001S War operations involving explosion of unspecified marine weapon, civilian, sequela -Y36010A War operations involving explosion of depth-charge, military personnel, initial encounter -Y36010D War operations involving explosion of depth-charge, military personnel, subsequent encounter -Y36010S War operations involving explosion of depth-charge, military personnel, sequela -Y36011A War operations involving explosion of depth-charge, civilian, initial encounter -Y36011D War operations involving explosion of depth-charge, civilian, subsequent encounter -Y36011S War operations involving explosion of depth-charge, civilian, sequela -Y36020A War operations involving explosion of marine mine, military personnel, initial encounter -Y36020D War operations involving explosion of marine mine, military personnel, subsequent encounter -Y36020S War operations involving explosion of marine mine, military personnel, sequela -Y36021A War operations involving explosion of marine mine, civilian, initial encounter -Y36021D War operations involving explosion of marine mine, civilian, subsequent encounter -Y36021S War operations involving explosion of marine mine, civilian, sequela -Y36030A War operations involving explosion of sea-based artillery shell, military personnel, initial encounter -Y36030D War operations involving explosion of sea-based artillery shell, military personnel, subsequent encounter -Y36030S War operations involving explosion of sea-based artillery shell, military personnel, sequela -Y36031A War operations involving explosion of sea-based artillery shell, civilian, initial encounter -Y36031D War operations involving explosion of sea-based artillery shell, civilian, subsequent encounter -Y36031S War operations involving explosion of sea-based artillery shell, civilian, sequela -Y36040A War operations involving explosion of torpedo, military personnel, initial encounter -Y36040D War operations involving explosion of torpedo, military personnel, subsequent encounter -Y36040S War operations involving explosion of torpedo, military personnel, sequela -Y36041A War operations involving explosion of torpedo, civilian, initial encounter -Y36041D War operations involving explosion of torpedo, civilian, subsequent encounter -Y36041S War operations involving explosion of torpedo, civilian, sequela -Y36050A War operations involving accidental detonation of onboard marine weapons, military personnel, initial encounter -Y36050D War operations involving accidental detonation of onboard marine weapons, military personnel, subsequent encounter -Y36050S War operations involving accidental detonation of onboard marine weapons, military personnel, sequela -Y36051A War operations involving accidental detonation of onboard marine weapons, civilian, initial encounter -Y36051D War operations involving accidental detonation of onboard marine weapons, civilian, subsequent encounter -Y36051S War operations involving accidental detonation of onboard marine weapons, civilian, sequela -Y36090A War operations involving explosion of other marine weapons, military personnel, initial encounter -Y36090D War operations involving explosion of other marine weapons, military personnel, subsequent encounter -Y36090S War operations involving explosion of other marine weapons, military personnel, sequela -Y36091A War operations involving explosion of other marine weapons, civilian, initial encounter -Y36091D War operations involving explosion of other marine weapons, civilian, subsequent encounter -Y36091S War operations involving explosion of other marine weapons, civilian, sequela -Y36100A War operations involving unspecified destruction of aircraft, military personnel, initial encounter -Y36100D War operations involving unspecified destruction of aircraft, military personnel, subsequent encounter -Y36100S War operations involving unspecified destruction of aircraft, military personnel, sequela -Y36101A War operations involving unspecified destruction of aircraft, civilian, initial encounter -Y36101D War operations involving unspecified destruction of aircraft, civilian, subsequent encounter -Y36101S War operations involving unspecified destruction of aircraft, civilian, sequela -Y36110A War operations involving destruction of aircraft due to enemy fire or explosives, military personnel, initial encounter -Y36110D War operations involving destruction of aircraft due to enemy fire or explosives, military personnel, subsequent encounter -Y36110S War operations involving destruction of aircraft due to enemy fire or explosives, military personnel, sequela -Y36111A War operations involving destruction of aircraft due to enemy fire or explosives, civilian, initial encounter -Y36111D War operations involving destruction of aircraft due to enemy fire or explosives, civilian, subsequent encounter -Y36111S War operations involving destruction of aircraft due to enemy fire or explosives, civilian, sequela -Y36120A War operations involving destruction of aircraft due to collision with other aircraft, military personnel, initial encounter -Y36120D War operations involving destruction of aircraft due to collision with other aircraft, military personnel, subsequent encounter -Y36120S War operations involving destruction of aircraft due to collision with other aircraft, military personnel, sequela -Y36121A War operations involving destruction of aircraft due to collision with other aircraft, civilian, initial encounter -Y36121D War operations involving destruction of aircraft due to collision with other aircraft, civilian, subsequent encounter -Y36121S War operations involving destruction of aircraft due to collision with other aircraft, civilian, sequela -Y36130A War operations involving destruction of aircraft due to onboard fire, military personnel, initial encounter -Y36130D War operations involving destruction of aircraft due to onboard fire, military personnel, subsequent encounter -Y36130S War operations involving destruction of aircraft due to onboard fire, military personnel, sequela -Y36131A War operations involving destruction of aircraft due to onboard fire, civilian, initial encounter -Y36131D War operations involving destruction of aircraft due to onboard fire, civilian, subsequent encounter -Y36131S War operations involving destruction of aircraft due to onboard fire, civilian, sequela -Y36140A War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, initial encounter -Y36140D War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, subsequent encounter -Y36140S War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, sequela -Y36141A War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, initial encounter -Y36141D War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, subsequent encounter -Y36141S War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, sequela -Y36190A War operations involving other destruction of aircraft, military personnel, initial encounter -Y36190D War operations involving other destruction of aircraft, military personnel, subsequent encounter -Y36190S War operations involving other destruction of aircraft, military personnel, sequela -Y36191A War operations involving other destruction of aircraft, civilian, initial encounter -Y36191D War operations involving other destruction of aircraft, civilian, subsequent encounter -Y36191S War operations involving other destruction of aircraft, civilian, sequela -Y36200A War operations involving unspecified explosion and fragments, military personnel, initial encounter -Y36200D War operations involving unspecified explosion and fragments, military personnel, subsequent encounter -Y36200S War operations involving unspecified explosion and fragments, military personnel, sequela -Y36201A War operations involving unspecified explosion and fragments, civilian, initial encounter -Y36201D War operations involving unspecified explosion and fragments, civilian, subsequent encounter -Y36201S War operations involving unspecified explosion and fragments, civilian, sequela -Y36210A War operations involving explosion of aerial bomb, military personnel, initial encounter -Y36210D War operations involving explosion of aerial bomb, military personnel, subsequent encounter -Y36210S War operations involving explosion of aerial bomb, military personnel, sequela -Y36211A War operations involving explosion of aerial bomb, civilian, initial encounter -Y36211D War operations involving explosion of aerial bomb, civilian, subsequent encounter -Y36211S War operations involving explosion of aerial bomb, civilian, sequela -Y36220A War operations involving explosion of guided missile, military personnel, initial encounter -Y36220D War operations involving explosion of guided missile, military personnel, subsequent encounter -Y36220S War operations involving explosion of guided missile, military personnel, sequela -Y36221A War operations involving explosion of guided missile, civilian, initial encounter -Y36221D War operations involving explosion of guided missile, civilian, subsequent encounter -Y36221S War operations involving explosion of guided missile, civilian, sequela -Y36230A War operations involving explosion of improvised explosive device [IED], military personnel, initial encounter -Y36230D War operations involving explosion of improvised explosive device [IED], military personnel, subsequent encounter -Y36230S War operations involving explosion of improvised explosive device [IED], military personnel, sequela -Y36231A War operations involving explosion of improvised explosive device [IED], civilian, initial encounter -Y36231D War operations involving explosion of improvised explosive device [IED], civilian, subsequent encounter -Y36231S War operations involving explosion of improvised explosive device [IED], civilian, sequela -Y36240A War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, initial encounter -Y36240D War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, subsequent encounter -Y36240S War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, sequela -Y36241A War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, initial encounter -Y36241D War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, subsequent encounter -Y36241S War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, sequela -Y36250A War operations involving fragments from munitions, military personnel, initial encounter -Y36250D War operations involving fragments from munitions, military personnel, subsequent encounter -Y36250S War operations involving fragments from munitions, military personnel, sequela -Y36251A War operations involving fragments from munitions, civilian, initial encounter -Y36251D War operations involving fragments from munitions, civilian, subsequent encounter -Y36251S War operations involving fragments from munitions, civilian, sequela -Y36260A War operations involving fragments of improvised explosive device [IED], military personnel, initial encounter -Y36260D War operations involving fragments of improvised explosive device [IED], military personnel, subsequent encounter -Y36260S War operations involving fragments of improvised explosive device [IED], military personnel, sequela -Y36261A War operations involving fragments of improvised explosive device [IED], civilian, initial encounter -Y36261D War operations involving fragments of improvised explosive device [IED], civilian, subsequent encounter -Y36261S War operations involving fragments of improvised explosive device [IED], civilian, sequela -Y36270A War operations involving fragments from weapons, military personnel, initial encounter -Y36270D War operations involving fragments from weapons, military personnel, subsequent encounter -Y36270S War operations involving fragments from weapons, military personnel, sequela -Y36271A War operations involving fragments from weapons, civilian, initial encounter -Y36271D War operations involving fragments from weapons, civilian, subsequent encounter -Y36271S War operations involving fragments from weapons, civilian, sequela -Y36290A War operations involving other explosions and fragments, military personnel, initial encounter -Y36290D War operations involving other explosions and fragments, military personnel, subsequent encounter -Y36290S War operations involving other explosions and fragments, military personnel, sequela -Y36291A War operations involving other explosions and fragments, civilian, initial encounter -Y36291D War operations involving other explosions and fragments, civilian, subsequent encounter -Y36291S War operations involving other explosions and fragments, civilian, sequela -Y36300A War operations involving unspecified fire, conflagration and hot substance, military personnel, initial encounter -Y36300D War operations involving unspecified fire, conflagration and hot substance, military personnel, subsequent encounter -Y36300S War operations involving unspecified fire, conflagration and hot substance, military personnel, sequela -Y36301A War operations involving unspecified fire, conflagration and hot substance, civilian, initial encounter -Y36301D War operations involving unspecified fire, conflagration and hot substance, civilian, subsequent encounter -Y36301S War operations involving unspecified fire, conflagration and hot substance, civilian, sequela -Y36310A War operations involving gasoline bomb, military personnel, initial encounter -Y36310D War operations involving gasoline bomb, military personnel, subsequent encounter -Y36310S War operations involving gasoline bomb, military personnel, sequela -Y36311A War operations involving gasoline bomb, civilian, initial encounter -Y36311D War operations involving gasoline bomb, civilian, subsequent encounter -Y36311S War operations involving gasoline bomb, civilian, sequela -Y36320A War operations involving incendiary bullet, military personnel, initial encounter -Y36320D War operations involving incendiary bullet, military personnel, subsequent encounter -Y36320S War operations involving incendiary bullet, military personnel, sequela -Y36321A War operations involving incendiary bullet, civilian, initial encounter -Y36321D War operations involving incendiary bullet, civilian, subsequent encounter -Y36321S War operations involving incendiary bullet, civilian, sequela -Y36330A War operations involving flamethrower, military personnel, initial encounter -Y36330D War operations involving flamethrower, military personnel, subsequent encounter -Y36330S War operations involving flamethrower, military personnel, sequela -Y36331A War operations involving flamethrower, civilian, initial encounter -Y36331D War operations involving flamethrower, civilian, subsequent encounter -Y36331S War operations involving flamethrower, civilian, sequela -Y36390A War operations involving other fires, conflagrations and hot substances, military personnel, initial encounter -Y36390D War operations involving other fires, conflagrations and hot substances, military personnel, subsequent encounter -Y36390S War operations involving other fires, conflagrations and hot substances, military personnel, sequela -Y36391A War operations involving other fires, conflagrations and hot substances, civilian, initial encounter -Y36391D War operations involving other fires, conflagrations and hot substances, civilian, subsequent encounter -Y36391S War operations involving other fires, conflagrations and hot substances, civilian, sequela -Y36410A War operations involving rubber bullets, military personnel, initial encounter -Y36410D War operations involving rubber bullets, military personnel, subsequent encounter -Y36410S War operations involving rubber bullets, military personnel, sequela -Y36411A War operations involving rubber bullets, civilian, initial encounter -Y36411D War operations involving rubber bullets, civilian, subsequent encounter -Y36411S War operations involving rubber bullets, civilian, sequela -Y36420A War operations involving firearms pellets, military personnel, initial encounter -Y36420D War operations involving firearms pellets, military personnel, subsequent encounter -Y36420S War operations involving firearms pellets, military personnel, sequela -Y36421A War operations involving firearms pellets, civilian, initial encounter -Y36421D War operations involving firearms pellets, civilian, subsequent encounter -Y36421S War operations involving firearms pellets, civilian, sequela -Y36430A War operations involving other firearms discharge, military personnel, initial encounter -Y36430D War operations involving other firearms discharge, military personnel, subsequent encounter -Y36430S War operations involving other firearms discharge, military personnel, sequela -Y36431A War operations involving other firearms discharge, civilian, initial encounter -Y36431D War operations involving other firearms discharge, civilian, subsequent encounter -Y36431S War operations involving other firearms discharge, civilian, sequela -Y36440A War operations involving unarmed hand to hand combat, military personnel, initial encounter -Y36440D War operations involving unarmed hand to hand combat, military personnel, subsequent encounter -Y36440S War operations involving unarmed hand to hand combat, military personnel, sequela -Y36441A War operations involving unarmed hand to hand combat, civilian, initial encounter -Y36441D War operations involving unarmed hand to hand combat, civilian, subsequent encounter -Y36441S War operations involving unarmed hand to hand combat, civilian, sequela -Y36450A War operations involving combat using blunt or piercing object, military personnel, initial encounter -Y36450D War operations involving combat using blunt or piercing object, military personnel, subsequent encounter -Y36450S War operations involving combat using blunt or piercing object, military personnel, sequela -Y36451A War operations involving combat using blunt or piercing object, civilian, initial encounter -Y36451D War operations involving combat using blunt or piercing object, civilian, subsequent encounter -Y36451S War operations involving combat using blunt or piercing object, civilian, sequela -Y36460A War operations involving intentional restriction of air and airway, military personnel, initial encounter -Y36460D War operations involving intentional restriction of air and airway, military personnel, subsequent encounter -Y36460S War operations involving intentional restriction of air and airway, military personnel, sequela -Y36461A War operations involving intentional restriction of air and airway, civilian, initial encounter -Y36461D War operations involving intentional restriction of air and airway, civilian, subsequent encounter -Y36461S War operations involving intentional restriction of air and airway, civilian, sequela -Y36470A War operations involving unintentional restriction of air and airway, military personnel, initial encounter -Y36470D War operations involving unintentional restriction of air and airway, military personnel, subsequent encounter -Y36470S War operations involving unintentional restriction of air and airway, military personnel, sequela -Y36471A War operations involving unintentional restriction of air and airway, civilian, initial encounter -Y36471D War operations involving unintentional restriction of air and airway, civilian, subsequent encounter -Y36471S War operations involving unintentional restriction of air and airway, civilian, sequela -Y36490A War operations involving other forms of conventional warfare, military personnel, initial encounter -Y36490D War operations involving other forms of conventional warfare, military personnel, subsequent encounter -Y36490S War operations involving other forms of conventional warfare, military personnel, sequela -Y36491A War operations involving other forms of conventional warfare, civilian, initial encounter -Y36491D War operations involving other forms of conventional warfare, civilian, subsequent encounter -Y36491S War operations involving other forms of conventional warfare, civilian, sequela -Y36500A War operations involving unspecified effect of nuclear weapon, military personnel, initial encounter -Y36500D War operations involving unspecified effect of nuclear weapon, military personnel, subsequent encounter -Y36500S War operations involving unspecified effect of nuclear weapon, military personnel, sequela -Y36501A War operations involving unspecified effect of nuclear weapon, civilian, initial encounter -Y36501D War operations involving unspecified effect of nuclear weapon, civilian, subsequent encounter -Y36501S War operations involving unspecified effect of nuclear weapon, civilian, sequela -Y36510A War operations involving direct blast effect of nuclear weapon, military personnel, initial encounter -Y36510D War operations involving direct blast effect of nuclear weapon, military personnel, subsequent encounter -Y36510S War operations involving direct blast effect of nuclear weapon, military personnel, sequela -Y36511A War operations involving direct blast effect of nuclear weapon, civilian, initial encounter -Y36511D War operations involving direct blast effect of nuclear weapon, civilian, subsequent encounter -Y36511S War operations involving direct blast effect of nuclear weapon, civilian, sequela -Y36520A War operations involving indirect blast effect of nuclear weapon, military personnel, initial encounter -Y36520D War operations involving indirect blast effect of nuclear weapon, military personnel, subsequent encounter -Y36520S War operations involving indirect blast effect of nuclear weapon, military personnel, sequela -Y36521A War operations involving indirect blast effect of nuclear weapon, civilian, initial encounter -Y36521D War operations involving indirect blast effect of nuclear weapon, civilian, subsequent encounter -Y36521S War operations involving indirect blast effect of nuclear weapon, civilian, sequela -Y36530A War operations involving thermal radiation effect of nuclear weapon, military personnel, initial encounter -Y36530D War operations involving thermal radiation effect of nuclear weapon, military personnel, subsequent encounter -Y36530S War operations involving thermal radiation effect of nuclear weapon, military personnel, sequela -Y36531A War operations involving thermal radiation effect of nuclear weapon, civilian, initial encounter -Y36531D War operations involving thermal radiation effect of nuclear weapon, civilian, subsequent encounter -Y36531S War operations involving thermal radiation effect of nuclear weapon, civilian, sequela -Y36540A War operation involving nuclear radiation effects of nuclear weapon, military personnel, initial encounter -Y36540D War operation involving nuclear radiation effects of nuclear weapon, military personnel, subsequent encounter -Y36540S War operation involving nuclear radiation effects of nuclear weapon, military personnel, sequela -Y36541A War operation involving nuclear radiation effects of nuclear weapon, civilian, initial encounter -Y36541D War operation involving nuclear radiation effects of nuclear weapon, civilian, subsequent encounter -Y36541S War operation involving nuclear radiation effects of nuclear weapon, civilian, sequela -Y36590A War operation involving other effects of nuclear weapons, military personnel, initial encounter -Y36590D War operation involving other effects of nuclear weapons, military personnel, subsequent encounter -Y36590S War operation involving other effects of nuclear weapons, military personnel, sequela -Y36591A War operation involving other effects of nuclear weapons, civilian, initial encounter -Y36591D War operation involving other effects of nuclear weapons, civilian, subsequent encounter -Y36591S War operation involving other effects of nuclear weapons, civilian, sequela -Y366X0A War operations involving biological weapons, military personnel, initial encounter -Y366X0D War operations involving biological weapons, military personnel, subsequent encounter -Y366X0S War operations involving biological weapons, military personnel, sequela -Y366X1A War operations involving biological weapons, civilian, initial encounter -Y366X1D War operations involving biological weapons, civilian, subsequent encounter -Y366X1S War operations involving biological weapons, civilian, sequela -Y367X0A War operations involving chemical weapons and other forms of unconventional warfare, military personnel, initial encounter -Y367X0D War operations involving chemical weapons and other forms of unconventional warfare, military personnel, subsequent encounter -Y367X0S War operations involving chemical weapons and other forms of unconventional warfare, military personnel, sequela -Y367X1A War operations involving chemical weapons and other forms of unconventional warfare, civilian, initial encounter -Y367X1D War operations involving chemical weapons and other forms of unconventional warfare, civilian, subsequent encounter -Y367X1S War operations involving chemical weapons and other forms of unconventional warfare, civilian, sequela -Y36810A Explosion of mine placed during war operations but exploding after cessation of hostilities, military personnel, initial encounter -Y36810D Explosion of mine placed during war operations but exploding after cessation of hostilities, military personnel, subsequent encounter -Y36810S Explosion of mine placed during war operations but exploding after cessation of hostilities, military personnel, sequela -Y36811A Explosion of mine placed during war operations but exploding after cessation of hostilities, civilian, initial encounter -Y36811D Explosion of mine placed during war operations but exploding after cessation of hostilities, civilian, subsequent encounter -Y36811S Explosion of mine placed during war operations but exploding after cessation of hostilities, civilian, sequela -Y36820A Explosion of bomb placed during war operations but exploding after cessation of hostilities, military personnel, initial encounter -Y36820D Explosion of bomb placed during war operations but exploding after cessation of hostilities, military personnel, subsequent encounter -Y36820S Explosion of bomb placed during war operations but exploding after cessation of hostilities, military personnel, sequela -Y36821A Explosion of bomb placed during war operations but exploding after cessation of hostilities, civilian, initial encounter -Y36821D Explosion of bomb placed during war operations but exploding after cessation of hostilities, civilian, subsequent encounter -Y36821S Explosion of bomb placed during war operations but exploding after cessation of hostilities, civilian, sequela -Y36880A Other war operations occurring after cessation of hostilities, military personnel, initial encounter -Y36880D Other war operations occurring after cessation of hostilities, military personnel, subsequent encounter -Y36880S Other war operations occurring after cessation of hostilities, military personnel, sequela -Y36881A Other war operations occurring after cessation of hostilities, civilian, initial encounter -Y36881D Other war operations occurring after cessation of hostilities, civilian, subsequent encounter -Y36881S Other war operations occurring after cessation of hostilities, civilian, sequela -Y36890A Unspecified war operations occurring after cessation of hostilities, military personnel, initial encounter -Y36890D Unspecified war operations occurring after cessation of hostilities, military personnel, subsequent encounter -Y36890S Unspecified war operations occurring after cessation of hostilities, military personnel, sequela -Y36891A Unspecified war operations occurring after cessation of hostilities, civilian, initial encounter -Y36891D Unspecified war operations occurring after cessation of hostilities, civilian, subsequent encounter -Y36891S Unspecified war operations occurring after cessation of hostilities, civilian, sequela -Y3690XA War operations, unspecified, initial encounter -Y3690XD War operations, unspecified, subsequent encounter -Y3690XS War operations, unspecified, sequela -Y3691XA War operations involving unspecified weapon of mass destruction [WMD], initial encounter -Y3691XD War operations involving unspecified weapon of mass destruction [WMD], subsequent encounter -Y3691XS War operations involving unspecified weapon of mass destruction [WMD], sequela -Y3692XA War operations involving friendly fire, initial encounter -Y3692XD War operations involving friendly fire, subsequent encounter -Y3692XS War operations involving friendly fire, sequela -Y37000A Military operations involving explosion of unspecified marine weapon, military personnel, initial encounter -Y37000D Military operations involving explosion of unspecified marine weapon, military personnel, subsequent encounter -Y37000S Military operations involving explosion of unspecified marine weapon, military personnel, sequela -Y37001A Military operations involving explosion of unspecified marine weapon, civilian, initial encounter -Y37001D Military operations involving explosion of unspecified marine weapon, civilian, subsequent encounter -Y37001S Military operations involving explosion of unspecified marine weapon, civilian, sequela -Y37010A Military operations involving explosion of depth-charge, military personnel, initial encounter -Y37010D Military operations involving explosion of depth-charge, military personnel, subsequent encounter -Y37010S Military operations involving explosion of depth-charge, military personnel, sequela -Y37011A Military operations involving explosion of depth-charge, civilian, initial encounter -Y37011D Military operations involving explosion of depth-charge, civilian, subsequent encounter -Y37011S Military operations involving explosion of depth-charge, civilian, sequela -Y37020A Military operations involving explosion of marine mine, military personnel, initial encounter -Y37020D Military operations involving explosion of marine mine, military personnel, subsequent encounter -Y37020S Military operations involving explosion of marine mine, military personnel, sequela -Y37021A Military operations involving explosion of marine mine, civilian, initial encounter -Y37021D Military operations involving explosion of marine mine, civilian, subsequent encounter -Y37021S Military operations involving explosion of marine mine, civilian, sequela -Y37030A Military operations involving explosion of sea-based artillery shell, military personnel, initial encounter -Y37030D Military operations involving explosion of sea-based artillery shell, military personnel, subsequent encounter -Y37030S Military operations involving explosion of sea-based artillery shell, military personnel, sequela -Y37031A Military operations involving explosion of sea-based artillery shell, civilian, initial encounter -Y37031D Military operations involving explosion of sea-based artillery shell, civilian, subsequent encounter -Y37031S Military operations involving explosion of sea-based artillery shell, civilian, sequela -Y37040A Military operations involving explosion of torpedo, military personnel, initial encounter -Y37040D Military operations involving explosion of torpedo, military personnel, subsequent encounter -Y37040S Military operations involving explosion of torpedo, military personnel, sequela -Y37041A Military operations involving explosion of torpedo, civilian, initial encounter -Y37041D Military operations involving explosion of torpedo, civilian, subsequent encounter -Y37041S Military operations involving explosion of torpedo, civilian, sequela -Y37050A Military operations involving accidental detonation of onboard marine weapons, military personnel, initial encounter -Y37050D Military operations involving accidental detonation of onboard marine weapons, military personnel, subsequent encounter -Y37050S Military operations involving accidental detonation of onboard marine weapons, military personnel, sequela -Y37051A Military operations involving accidental detonation of onboard marine weapons, civilian, initial encounter -Y37051D Military operations involving accidental detonation of onboard marine weapons, civilian, subsequent encounter -Y37051S Military operations involving accidental detonation of onboard marine weapons, civilian, sequela -Y37090A Military operations involving explosion of other marine weapons, military personnel, initial encounter -Y37090D Military operations involving explosion of other marine weapons, military personnel, subsequent encounter -Y37090S Military operations involving explosion of other marine weapons, military personnel, sequela -Y37091A Military operations involving explosion of other marine weapons, civilian, initial encounter -Y37091D Military operations involving explosion of other marine weapons, civilian, subsequent encounter -Y37091S Military operations involving explosion of other marine weapons, civilian, sequela -Y37100A Military operations involving unspecified destruction of aircraft, military personnel, initial encounter -Y37100D Military operations involving unspecified destruction of aircraft, military personnel, subsequent encounter -Y37100S Military operations involving unspecified destruction of aircraft, military personnel, sequela -Y37101A Military operations involving unspecified destruction of aircraft, civilian, initial encounter -Y37101D Military operations involving unspecified destruction of aircraft, civilian, subsequent encounter -Y37101S Military operations involving unspecified destruction of aircraft, civilian, sequela -Y37110A Military operations involving destruction of aircraft due to enemy fire or explosives, military personnel, initial encounter -Y37110D Military operations involving destruction of aircraft due to enemy fire or explosives, military personnel, subsequent encounter -Y37110S Military operations involving destruction of aircraft due to enemy fire or explosives, military personnel, sequela -Y37111A Military operations involving destruction of aircraft due to enemy fire or explosives, civilian, initial encounter -Y37111D Military operations involving destruction of aircraft due to enemy fire or explosives, civilian, subsequent encounter -Y37111S Military operations involving destruction of aircraft due to enemy fire or explosives, civilian, sequela -Y37120A Military operations involving destruction of aircraft due to collision with other aircraft, military personnel, initial encounter -Y37120D Military operations involving destruction of aircraft due to collision with other aircraft, military personnel, subsequent encounter -Y37120S Military operations involving destruction of aircraft due to collision with other aircraft, military personnel, sequela -Y37121A Military operations involving destruction of aircraft due to collision with other aircraft, civilian, initial encounter -Y37121D Military operations involving destruction of aircraft due to collision with other aircraft, civilian, subsequent encounter -Y37121S Military operations involving destruction of aircraft due to collision with other aircraft, civilian, sequela -Y37130A Military operations involving destruction of aircraft due to onboard fire, military personnel, initial encounter -Y37130D Military operations involving destruction of aircraft due to onboard fire, military personnel, subsequent encounter -Y37130S Military operations involving destruction of aircraft due to onboard fire, military personnel, sequela -Y37131A Military operations involving destruction of aircraft due to onboard fire, civilian, initial encounter -Y37131D Military operations involving destruction of aircraft due to onboard fire, civilian, subsequent encounter -Y37131S Military operations involving destruction of aircraft due to onboard fire, civilian, sequela -Y37140A Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, initial encounter -Y37140D Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, subsequent encounter -Y37140S Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, sequela -Y37141A Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, initial encounter -Y37141D Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, subsequent encounter -Y37141S Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, sequela -Y37190A Military operations involving other destruction of aircraft, military personnel, initial encounter -Y37190D Military operations involving other destruction of aircraft, military personnel, subsequent encounter -Y37190S Military operations involving other destruction of aircraft, military personnel, sequela -Y37191A Military operations involving other destruction of aircraft, civilian, initial encounter -Y37191D Military operations involving other destruction of aircraft, civilian, subsequent encounter -Y37191S Military operations involving other destruction of aircraft, civilian, sequela -Y37200A Military operations involving unspecified explosion and fragments, military personnel, initial encounter -Y37200D Military operations involving unspecified explosion and fragments, military personnel, subsequent encounter -Y37200S Military operations involving unspecified explosion and fragments, military personnel, sequela -Y37201A Military operations involving unspecified explosion and fragments, civilian, initial encounter -Y37201D Military operations involving unspecified explosion and fragments, civilian, subsequent encounter -Y37201S Military operations involving unspecified explosion and fragments, civilian, sequela -Y37210A Military operations involving explosion of aerial bomb, military personnel, initial encounter -Y37210D Military operations involving explosion of aerial bomb, military personnel, subsequent encounter -Y37210S Military operations involving explosion of aerial bomb, military personnel, sequela -Y37211A Military operations involving explosion of aerial bomb, civilian, initial encounter -Y37211D Military operations involving explosion of aerial bomb, civilian, subsequent encounter -Y37211S Military operations involving explosion of aerial bomb, civilian, sequela -Y37220A Military operations involving explosion of guided missile, military personnel, initial encounter -Y37220D Military operations involving explosion of guided missile, military personnel, subsequent encounter -Y37220S Military operations involving explosion of guided missile, military personnel, sequela -Y37221A Military operations involving explosion of guided missile, civilian, initial encounter -Y37221D Military operations involving explosion of guided missile, civilian, subsequent encounter -Y37221S Military operations involving explosion of guided missile, civilian, sequela -Y37230A Military operations involving explosion of improvised explosive device [IED], military personnel, initial encounter -Y37230D Military operations involving explosion of improvised explosive device [IED], military personnel, subsequent encounter -Y37230S Military operations involving explosion of improvised explosive device [IED], military personnel, sequela -Y37231A Military operations involving explosion of improvised explosive device [IED], civilian, initial encounter -Y37231D Military operations involving explosion of improvised explosive device [IED], civilian, subsequent encounter -Y37231S Military operations involving explosion of improvised explosive device [IED], civilian, sequela -Y37240A Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, initial encounter -Y37240D Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, subsequent encounter -Y37240S Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, sequela -Y37241A Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, initial encounter -Y37241D Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, subsequent encounter -Y37241S Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, sequela -Y37250A Military operations involving fragments from munitions, military personnel, initial encounter -Y37250D Military operations involving fragments from munitions, military personnel, subsequent encounter -Y37250S Military operations involving fragments from munitions, military personnel, sequela -Y37251A Military operations involving fragments from munitions, civilian, initial encounter -Y37251D Military operations involving fragments from munitions, civilian, subsequent encounter -Y37251S Military operations involving fragments from munitions, civilian, sequela -Y37260A Military operations involving fragments of improvised explosive device [IED], military personnel, initial encounter -Y37260D Military operations involving fragments of improvised explosive device [IED], military personnel, subsequent encounter -Y37260S Military operations involving fragments of improvised explosive device [IED], military personnel, sequela -Y37261A Military operations involving fragments of improvised explosive device [IED], civilian, initial encounter -Y37261D Military operations involving fragments of improvised explosive device [IED], civilian, subsequent encounter -Y37261S Military operations involving fragments of improvised explosive device [IED], civilian, sequela -Y37270A Military operations involving fragments from weapons, military personnel, initial encounter -Y37270D Military operations involving fragments from weapons, military personnel, subsequent encounter -Y37270S Military operations involving fragments from weapons, military personnel, sequela -Y37271A Military operations involving fragments from weapons, civilian, initial encounter -Y37271D Military operations involving fragments from weapons, civilian, subsequent encounter -Y37271S Military operations involving fragments from weapons, civilian, sequela -Y37290A Military operations involving other explosions and fragments, military personnel, initial encounter -Y37290D Military operations involving other explosions and fragments, military personnel, subsequent encounter -Y37290S Military operations involving other explosions and fragments, military personnel, sequela -Y37291A Military operations involving other explosions and fragments, civilian, initial encounter -Y37291D Military operations involving other explosions and fragments, civilian, subsequent encounter -Y37291S Military operations involving other explosions and fragments, civilian, sequela -Y37300A Military operations involving unspecified fire, conflagration and hot substance, military personnel, initial encounter -Y37300D Military operations involving unspecified fire, conflagration and hot substance, military personnel, subsequent encounter -Y37300S Military operations involving unspecified fire, conflagration and hot substance, military personnel, sequela -Y37301A Military operations involving unspecified fire, conflagration and hot substance, civilian, initial encounter -Y37301D Military operations involving unspecified fire, conflagration and hot substance, civilian, subsequent encounter -Y37301S Military operations involving unspecified fire, conflagration and hot substance, civilian, sequela -Y37310A Military operations involving gasoline bomb, military personnel, initial encounter -Y37310D Military operations involving gasoline bomb, military personnel, subsequent encounter -Y37310S Military operations involving gasoline bomb, military personnel, sequela -Y37311A Military operations involving gasoline bomb, civilian, initial encounter -Y37311D Military operations involving gasoline bomb, civilian, subsequent encounter -Y37311S Military operations involving gasoline bomb, civilian, sequela -Y37320A Military operations involving incendiary bullet, military personnel, initial encounter -Y37320D Military operations involving incendiary bullet, military personnel, subsequent encounter -Y37320S Military operations involving incendiary bullet, military personnel, sequela -Y37321A Military operations involving incendiary bullet, civilian, initial encounter -Y37321D Military operations involving incendiary bullet, civilian, subsequent encounter -Y37321S Military operations involving incendiary bullet, civilian, sequela -Y37330A Military operations involving flamethrower, military personnel, initial encounter -Y37330D Military operations involving flamethrower, military personnel, subsequent encounter -Y37330S Military operations involving flamethrower, military personnel, sequela -Y37331A Military operations involving flamethrower, civilian, initial encounter -Y37331D Military operations involving flamethrower, civilian, subsequent encounter -Y37331S Military operations involving flamethrower, civilian, sequela -Y37390A Military operations involving other fires, conflagrations and hot substances, military personnel, initial encounter -Y37390D Military operations involving other fires, conflagrations and hot substances, military personnel, subsequent encounter -Y37390S Military operations involving other fires, conflagrations and hot substances, military personnel, sequela -Y37391A Military operations involving other fires, conflagrations and hot substances, civilian, initial encounter -Y37391D Military operations involving other fires, conflagrations and hot substances, civilian, subsequent encounter -Y37391S Military operations involving other fires, conflagrations and hot substances, civilian, sequela -Y37410A Military operations involving rubber bullets, military personnel, initial encounter -Y37410D Military operations involving rubber bullets, military personnel, subsequent encounter -Y37410S Military operations involving rubber bullets, military personnel, sequela -Y37411A Military operations involving rubber bullets, civilian, initial encounter -Y37411D Military operations involving rubber bullets, civilian, subsequent encounter -Y37411S Military operations involving rubber bullets, civilian, sequela -Y37420A Military operations involving firearms pellets, military personnel, initial encounter -Y37420D Military operations involving firearms pellets, military personnel, subsequent encounter -Y37420S Military operations involving firearms pellets, military personnel, sequela -Y37421A Military operations involving firearms pellets, civilian, initial encounter -Y37421D Military operations involving firearms pellets, civilian, subsequent encounter -Y37421S Military operations involving firearms pellets, civilian, sequela -Y37430A Military operations involving other firearms discharge, military personnel, initial encounter -Y37430D Military operations involving other firearms discharge, military personnel, subsequent encounter -Y37430S Military operations involving other firearms discharge, military personnel, sequela -Y37431A Military operations involving other firearms discharge, civilian, initial encounter -Y37431D Military operations involving other firearms discharge, civilian, subsequent encounter -Y37431S Military operations involving other firearms discharge, civilian, sequela -Y37440A Military operations involving unarmed hand to hand combat, military personnel, initial encounter -Y37440D Military operations involving unarmed hand to hand combat, military personnel, subsequent encounter -Y37440S Military operations involving unarmed hand to hand combat, military personnel, sequela -Y37441A Military operations involving unarmed hand to hand combat, civilian, initial encounter -Y37441D Military operations involving unarmed hand to hand combat, civilian, subsequent encounter -Y37441S Military operations involving unarmed hand to hand combat, civilian, sequela -Y37450A Military operations involving combat using blunt or piercing object, military personnel, initial encounter -Y37450D Military operations involving combat using blunt or piercing object, military personnel, subsequent encounter -Y37450S Military operations involving combat using blunt or piercing object, military personnel, sequela -Y37451A Military operations involving combat using blunt or piercing object, civilian, initial encounter -Y37451D Military operations involving combat using blunt or piercing object, civilian, subsequent encounter -Y37451S Military operations involving combat using blunt or piercing object, civilian, sequela -Y37460A Military operations involving intentional restriction of air and airway, military personnel, initial encounter -Y37460D Military operations involving intentional restriction of air and airway, military personnel, subsequent encounter -Y37460S Military operations involving intentional restriction of air and airway, military personnel, sequela -Y37461A Military operations involving intentional restriction of air and airway, civilian, initial encounter -Y37461D Military operations involving intentional restriction of air and airway, civilian, subsequent encounter -Y37461S Military operations involving intentional restriction of air and airway, civilian, sequela -Y37470A Military operations involving unintentional restriction of air and airway, military personnel, initial encounter -Y37470D Military operations involving unintentional restriction of air and airway, military personnel, subsequent encounter -Y37470S Military operations involving unintentional restriction of air and airway, military personnel, sequela -Y37471A Military operations involving unintentional restriction of air and airway, civilian, initial encounter -Y37471D Military operations involving unintentional restriction of air and airway, civilian, subsequent encounter -Y37471S Military operations involving unintentional restriction of air and airway, civilian, sequela -Y37490A Military operations involving other forms of conventional warfare, military personnel, initial encounter -Y37490D Military operations involving other forms of conventional warfare, military personnel, subsequent encounter -Y37490S Military operations involving other forms of conventional warfare, military personnel, sequela -Y37491A Military operations involving other forms of conventional warfare, civilian, initial encounter -Y37491D Military operations involving other forms of conventional warfare, civilian, subsequent encounter -Y37491S Military operations involving other forms of conventional warfare, civilian, sequela -Y37500A Military operations involving unspecified effect of nuclear weapon, military personnel, initial encounter -Y37500D Military operations involving unspecified effect of nuclear weapon, military personnel, subsequent encounter -Y37500S Military operations involving unspecified effect of nuclear weapon, military personnel, sequela -Y37501A Military operations involving unspecified effect of nuclear weapon, civilian, initial encounter -Y37501D Military operations involving unspecified effect of nuclear weapon, civilian, subsequent encounter -Y37501S Military operations involving unspecified effect of nuclear weapon, civilian, sequela -Y37510A Military operations involving direct blast effect of nuclear weapon, military personnel, initial encounter -Y37510D Military operations involving direct blast effect of nuclear weapon, military personnel, subsequent encounter -Y37510S Military operations involving direct blast effect of nuclear weapon, military personnel, sequela -Y37511A Military operations involving direct blast effect of nuclear weapon, civilian, initial encounter -Y37511D Military operations involving direct blast effect of nuclear weapon, civilian, subsequent encounter -Y37511S Military operations involving direct blast effect of nuclear weapon, civilian, sequela -Y37520A Military operations involving indirect blast effect of nuclear weapon, military personnel, initial encounter -Y37520D Military operations involving indirect blast effect of nuclear weapon, military personnel, subsequent encounter -Y37520S Military operations involving indirect blast effect of nuclear weapon, military personnel, sequela -Y37521A Military operations involving indirect blast effect of nuclear weapon, civilian, initial encounter -Y37521D Military operations involving indirect blast effect of nuclear weapon, civilian, subsequent encounter -Y37521S Military operations involving indirect blast effect of nuclear weapon, civilian, sequela -Y37530A Military operations involving thermal radiation effect of nuclear weapon, military personnel, initial encounter -Y37530D Military operations involving thermal radiation effect of nuclear weapon, military personnel, subsequent encounter -Y37530S Military operations involving thermal radiation effect of nuclear weapon, military personnel, sequela -Y37531A Military operations involving thermal radiation effect of nuclear weapon, civilian, initial encounter -Y37531D Military operations involving thermal radiation effect of nuclear weapon, civilian, subsequent encounter -Y37531S Military operations involving thermal radiation effect of nuclear weapon, civilian, sequela -Y37540A Military operation involving nuclear radiation effects of nuclear weapon, military personnel, initial encounter -Y37540D Military operation involving nuclear radiation effects of nuclear weapon, military personnel, subsequent encounter -Y37540S Military operation involving nuclear radiation effects of nuclear weapon, military personnel, sequela -Y37541A Military operation involving nuclear radiation effects of nuclear weapon, civilian, initial encounter -Y37541D Military operation involving nuclear radiation effects of nuclear weapon, civilian, subsequent encounter -Y37541S Military operation involving nuclear radiation effects of nuclear weapon, civilian, sequela -Y37590A Military operation involving other effects of nuclear weapons, military personnel, initial encounter -Y37590D Military operation involving other effects of nuclear weapons, military personnel, subsequent encounter -Y37590S Military operation involving other effects of nuclear weapons, military personnel, sequela -Y37591A Military operation involving other effects of nuclear weapons, civilian, initial encounter -Y37591D Military operation involving other effects of nuclear weapons, civilian, subsequent encounter -Y37591S Military operation involving other effects of nuclear weapons, civilian, sequela -Y376X0A Military operations involving biological weapons, military personnel, initial encounter -Y376X0D Military operations involving biological weapons, military personnel, subsequent encounter -Y376X0S Military operations involving biological weapons, military personnel, sequela -Y376X1A Military operations involving biological weapons, civilian, initial encounter -Y376X1D Military operations involving biological weapons, civilian, subsequent encounter -Y376X1S Military operations involving biological weapons, civilian, sequela -Y377X0A Military operations involving chemical weapons and other forms of unconventional warfare, military personnel, initial encounter -Y377X0D Military operations involving chemical weapons and other forms of unconventional warfare, military personnel, subsequent encounter -Y377X0S Military operations involving chemical weapons and other forms of unconventional warfare, military personnel, sequela -Y377X1A Military operations involving chemical weapons and other forms of unconventional warfare, civilian, initial encounter -Y377X1D Military operations involving chemical weapons and other forms of unconventional warfare, civilian, subsequent encounter -Y377X1S Military operations involving chemical weapons and other forms of unconventional warfare, civilian, sequela -Y3790XA Military operations, unspecified, initial encounter -Y3790XD Military operations, unspecified, subsequent encounter -Y3790XS Military operations, unspecified, sequela -Y3791XA Military operations involving unspecified weapon of mass destruction [WMD], initial encounter -Y3791XD Military operations involving unspecified weapon of mass destruction [WMD], subsequent encounter -Y3791XS Military operations involving unspecified weapon of mass destruction [WMD], sequela -Y3792XA Military operations involving friendly fire, initial encounter -Y3792XD Military operations involving friendly fire, subsequent encounter -Y3792XS Military operations involving friendly fire, sequela -Y380X1A Terrorism involving explosion of marine weapons, public safety official injured, initial encounter -Y380X1D Terrorism involving explosion of marine weapons, public safety official injured, subsequent encounter -Y380X1S Terrorism involving explosion of marine weapons, public safety official injured, sequela -Y380X2A Terrorism involving explosion of marine weapons, civilian injured, initial encounter -Y380X2D Terrorism involving explosion of marine weapons, civilian injured, subsequent encounter -Y380X2S Terrorism involving explosion of marine weapons, civilian injured, sequela -Y380X3A Terrorism involving explosion of marine weapons, terrorist injured, initial encounter -Y380X3D Terrorism involving explosion of marine weapons, terrorist injured, subsequent encounter -Y380X3S Terrorism involving explosion of marine weapons, terrorist injured, sequela -Y381X1A Terrorism involving destruction of aircraft, public safety official injured, initial encounter -Y381X1D Terrorism involving destruction of aircraft, public safety official injured, subsequent encounter -Y381X1S Terrorism involving destruction of aircraft, public safety official injured, sequela -Y381X2A Terrorism involving destruction of aircraft, civilian injured, initial encounter -Y381X2D Terrorism involving destruction of aircraft, civilian injured, subsequent encounter -Y381X2S Terrorism involving destruction of aircraft, civilian injured, sequela -Y381X3A Terrorism involving destruction of aircraft, terrorist injured, initial encounter -Y381X3D Terrorism involving destruction of aircraft, terrorist injured, subsequent encounter -Y381X3S Terrorism involving destruction of aircraft, terrorist injured, sequela -Y382X1A Terrorism involving other explosions and fragments, public safety official injured, initial encounter -Y382X1D Terrorism involving other explosions and fragments, public safety official injured, subsequent encounter -Y382X1S Terrorism involving other explosions and fragments, public safety official injured, sequela -Y382X2A Terrorism involving other explosions and fragments, civilian injured, initial encounter -Y382X2D Terrorism involving other explosions and fragments, civilian injured, subsequent encounter -Y382X2S Terrorism involving other explosions and fragments, civilian injured, sequela -Y382X3A Terrorism involving other explosions and fragments, terrorist injured, initial encounter -Y382X3D Terrorism involving other explosions and fragments, terrorist injured, subsequent encounter -Y382X3S Terrorism involving other explosions and fragments, terrorist injured, sequela -Y383X1A Terrorism involving fires, conflagration and hot substances, public safety official injured, initial encounter -Y383X1D Terrorism involving fires, conflagration and hot substances, public safety official injured, subsequent encounter -Y383X1S Terrorism involving fires, conflagration and hot substances, public safety official injured, sequela -Y383X2A Terrorism involving fires, conflagration and hot substances, civilian injured, initial encounter -Y383X2D Terrorism involving fires, conflagration and hot substances, civilian injured, subsequent encounter -Y383X2S Terrorism involving fires, conflagration and hot substances, civilian injured, sequela -Y383X3A Terrorism involving fires, conflagration and hot substances, terrorist injured, initial encounter -Y383X3D Terrorism involving fires, conflagration and hot substances, terrorist injured, subsequent encounter -Y383X3S Terrorism involving fires, conflagration and hot substances, terrorist injured, sequela -Y384X1A Terrorism involving firearms, public safety official injured, initial encounter -Y384X1D Terrorism involving firearms, public safety official injured, subsequent encounter -Y384X1S Terrorism involving firearms, public safety official injured, sequela -Y384X2A Terrorism involving firearms, civilian injured, initial encounter -Y384X2D Terrorism involving firearms, civilian injured, subsequent encounter -Y384X2S Terrorism involving firearms, civilian injured, sequela -Y384X3A Terrorism involving firearms, terrorist injured, initial encounter -Y384X3D Terrorism involving firearms, terrorist injured, subsequent encounter -Y384X3S Terrorism involving firearms, terrorist injured, sequela -Y385X1A Terrorism involving nuclear weapons, public safety official injured, initial encounter -Y385X1D Terrorism involving nuclear weapons, public safety official injured, subsequent encounter -Y385X1S Terrorism involving nuclear weapons, public safety official injured, sequela -Y385X2A Terrorism involving nuclear weapons, civilian injured, initial encounter -Y385X2D Terrorism involving nuclear weapons, civilian injured, subsequent encounter -Y385X2S Terrorism involving nuclear weapons, civilian injured, sequela -Y385X3A Terrorism involving nuclear weapons, terrorist injured, initial encounter -Y385X3D Terrorism involving nuclear weapons, terrorist injured, subsequent encounter -Y385X3S Terrorism involving nuclear weapons, terrorist injured, sequela -Y386X1A Terrorism involving biological weapons, public safety official injured, initial encounter -Y386X1D Terrorism involving biological weapons, public safety official injured, subsequent encounter -Y386X1S Terrorism involving biological weapons, public safety official injured, sequela -Y386X2A Terrorism involving biological weapons, civilian injured, initial encounter -Y386X2D Terrorism involving biological weapons, civilian injured, subsequent encounter -Y386X2S Terrorism involving biological weapons, civilian injured, sequela -Y386X3A Terrorism involving biological weapons, terrorist injured, initial encounter -Y386X3D Terrorism involving biological weapons, terrorist injured, subsequent encounter -Y386X3S Terrorism involving biological weapons, terrorist injured, sequela -Y387X1A Terrorism involving chemical weapons, public safety official injured, initial encounter -Y387X1D Terrorism involving chemical weapons, public safety official injured, subsequent encounter -Y387X1S Terrorism involving chemical weapons, public safety official injured, sequela -Y387X2A Terrorism involving chemical weapons, civilian injured, initial encounter -Y387X2D Terrorism involving chemical weapons, civilian injured, subsequent encounter -Y387X2S Terrorism involving chemical weapons, civilian injured, sequela -Y387X3A Terrorism involving chemical weapons, terrorist injured, initial encounter -Y387X3D Terrorism involving chemical weapons, terrorist injured, subsequent encounter -Y387X3S Terrorism involving chemical weapons, terrorist injured, sequela -Y3880XA Terrorism involving unspecified means, initial encounter -Y3880XD Terrorism involving unspecified means, subsequent encounter -Y3880XS Terrorism involving unspecified means, sequela -Y38811A Terrorism involving suicide bomber, public safety official injured, initial encounter -Y38811D Terrorism involving suicide bomber, public safety official injured, subsequent encounter -Y38811S Terrorism involving suicide bomber, public safety official injured, sequela -Y38812A Terrorism involving suicide bomber, civilian injured, initial encounter -Y38812D Terrorism involving suicide bomber, civilian injured, subsequent encounter -Y38812S Terrorism involving suicide bomber, civilian injured, sequela -Y38891A Terrorism involving other means, public safety official injured, initial encounter -Y38891D Terrorism involving other means, public safety official injured, subsequent encounter -Y38891S Terrorism involving other means, public safety official injured, sequela -Y38892A Terrorism involving other means, civilian injured, initial encounter -Y38892D Terrorism involving other means, civilian injured, subsequent encounter -Y38892S Terrorism involving other means, civilian injured, sequela -Y38893A Terrorism involving other means, terrorist injured, initial encounter -Y38893D Terrorism involving other means, terrorist injured, subsequent encounter -Y38893S Terrorism involving other means, terrorist injured, sequela -Y389X1A Terrorism, secondary effects, public safety official injured, initial encounter -Y389X1D Terrorism, secondary effects, public safety official injured, subsequent encounter -Y389X1S Terrorism, secondary effects, public safety official injured, sequela -Y389X2A Terrorism, secondary effects, civilian injured, initial encounter -Y389X2D Terrorism, secondary effects, civilian injured, subsequent encounter -Y389X2S Terrorism, secondary effects, civilian injured, sequela -Y620 Failure of sterile precautions during surgical operation -Y621 Failure of sterile precautions during infusion or transfusion -Y622 Failure of sterile precautions during kidney dialysis and other perfusion -Y623 Failure of sterile precautions during injection or immunization -Y624 Failure of sterile precautions during endoscopic examination -Y625 Failure of sterile precautions during heart catheterization -Y626 Failure of sterile precautions during aspiration, puncture and other catheterization -Y628 Failure of sterile precautions during other surgical and medical care -Y629 Failure of sterile precautions during unspecified surgical and medical care -Y630 Excessive amount of blood or other fluid given during transfusion or infusion -Y631 Incorrect dilution of fluid used during infusion -Y632 Overdose of radiation given during therapy -Y633 Inadvertent exposure of patient to radiation during medical care -Y634 Failure in dosage in electroshock or insulin-shock therapy -Y635 Inappropriate temperature in local application and packing -Y636 Underdosing and nonadministration of necessary drug, medicament or biological substance -Y638 Failure in dosage during other surgical and medical care -Y639 Failure in dosage during unspecified surgical and medical care -Y640 Contaminated medical or biological substance, transfused or infused -Y641 Contaminated medical or biological substance, injected or used for immunization -Y648 Contaminated medical or biological substance administered by other means -Y649 Contaminated medical or biological substance administered by unspecified means -Y650 Mismatched blood in transfusion -Y651 Wrong fluid used in infusion -Y652 Failure in suture or ligature during surgical operation -Y653 Endotracheal tube wrongly placed during anesthetic procedure -Y654 Failure to introduce or to remove other tube or instrument -Y6551 Performance of wrong procedure (operation) on correct patient -Y6552 Performance of procedure (operation) on patient not scheduled for surgery -Y6553 Performance of correct procedure (operation) on wrong side or body part -Y658 Other specified misadventures during surgical and medical care -Y66 Nonadministration of surgical and medical care -Y69 Unspecified misadventure during surgical and medical care -Y700 Diagnostic and monitoring anesthesiology devices associated with adverse incidents -Y701 Therapeutic (nonsurgical) and rehabilitative anesthesiology devices associated with adverse incidents -Y702 Prosthetic and other implants, materials and accessory anesthesiology devices associated with adverse incidents -Y703 Surgical instruments, materials and anesthesiology devices (including sutures) associated with adverse incidents -Y708 Miscellaneous anesthesiology devices associated with adverse incidents, not elsewhere classified -Y710 Diagnostic and monitoring cardiovascular devices associated with adverse incidents -Y711 Therapeutic (nonsurgical) and rehabilitative cardiovascular devices associated with adverse incidents -Y712 Prosthetic and other implants, materials and accessory cardiovascular devices associated with adverse incidents -Y713 Surgical instruments, materials and cardiovascular devices (including sutures) associated with adverse incidents -Y718 Miscellaneous cardiovascular devices associated with adverse incidents, not elsewhere classified -Y720 Diagnostic and monitoring otorhinolaryngological devices associated with adverse incidents -Y721 Therapeutic (nonsurgical) and rehabilitative otorhinolaryngological devices associated with adverse incidents -Y722 Prosthetic and other implants, materials and accessory otorhinolaryngological devices associated with adverse incidents -Y723 Surgical instruments, materials and otorhinolaryngological devices (including sutures) associated with adverse incidents -Y728 Miscellaneous otorhinolaryngological devices associated with adverse incidents, not elsewhere classified -Y730 Diagnostic and monitoring gastroenterology and urology devices associated with adverse incidents -Y731 Therapeutic (nonsurgical) and rehabilitative gastroenterology and urology devices associated with adverse incidents -Y732 Prosthetic and other implants, materials and accessory gastroenterology and urology devices associated with adverse incidents -Y733 Surgical instruments, materials and gastroenterology and urology devices (including sutures) associated with adverse incidents -Y738 Miscellaneous gastroenterology and urology devices associated with adverse incidents, not elsewhere classified -Y740 Diagnostic and monitoring general hospital and personal-use devices associated with adverse incidents -Y741 Therapeutic (nonsurgical) and rehabilitative general hospital and personal-use devices associated with adverse incidents -Y742 Prosthetic and other implants, materials and accessory general hospital and personal-use devices associated with adverse incidents -Y743 Surgical instruments, materials and general hospital and personal-use devices (including sutures) associated with adverse incidents -Y748 Miscellaneous general hospital and personal-use devices associated with adverse incidents, not elsewhere classified -Y750 Diagnostic and monitoring neurological devices associated with adverse incidents -Y751 Therapeutic (nonsurgical) and rehabilitative neurological devices associated with adverse incidents -Y752 Prosthetic and other implants, materials and neurological devices associated with adverse incidents -Y753 Surgical instruments, materials and neurological devices (including sutures) associated with adverse incidents -Y758 Miscellaneous neurological devices associated with adverse incidents, not elsewhere classified -Y760 Diagnostic and monitoring obstetric and gynecological devices associated with adverse incidents -Y761 Therapeutic (nonsurgical) and rehabilitative obstetric and gynecological devices associated with adverse incidents -Y762 Prosthetic and other implants, materials and accessory obstetric and gynecological devices associated with adverse incidents -Y763 Surgical instruments, materials and obstetric and gynecological devices (including sutures) associated with adverse incidents -Y768 Miscellaneous obstetric and gynecological devices associated with adverse incidents, not elsewhere classified -Y770 Diagnostic and monitoring ophthalmic devices associated with adverse incidents -Y771 Therapeutic (nonsurgical) and rehabilitative ophthalmic devices associated with adverse incidents -Y772 Prosthetic and other implants, materials and accessory ophthalmic devices associated with adverse incidents -Y773 Surgical instruments, materials and ophthalmic devices (including sutures) associated with adverse incidents -Y778 Miscellaneous ophthalmic devices associated with adverse incidents, not elsewhere classified -Y780 Diagnostic and monitoring radiological devices associated with adverse incidents -Y781 Therapeutic (nonsurgical) and rehabilitative radiological devices associated with adverse incidents -Y782 Prosthetic and other implants, materials and accessory radiological devices associated with adverse incidents -Y783 Surgical instruments, materials and radiological devices (including sutures) associated with adverse incidents -Y788 Miscellaneous radiological devices associated with adverse incidents, not elsewhere classified -Y790 Diagnostic and monitoring orthopedic devices associated with adverse incidents -Y791 Therapeutic (nonsurgical) and rehabilitative orthopedic devices associated with adverse incidents -Y792 Prosthetic and other implants, materials and accessory orthopedic devices associated with adverse incidents -Y793 Surgical instruments, materials and orthopedic devices (including sutures) associated with adverse incidents -Y798 Miscellaneous orthopedic devices associated with adverse incidents, not elsewhere classified -Y800 Diagnostic and monitoring physical medicine devices associated with adverse incidents -Y801 Therapeutic (nonsurgical) and rehabilitative physical medicine devices associated with adverse incidents -Y802 Prosthetic and other implants, materials and accessory physical medicine devices associated with adverse incidents -Y803 Surgical instruments, materials and physical medicine devices (including sutures) associated with adverse incidents -Y808 Miscellaneous physical medicine devices associated with adverse incidents, not elsewhere classified -Y810 Diagnostic and monitoring general- and plastic-surgery devices associated with adverse incidents -Y811 Therapeutic (nonsurgical) and rehabilitative general- and plastic-surgery devices associated with adverse incidents -Y812 Prosthetic and other implants, materials and accessory general- and plastic-surgery devices associated with adverse incidents -Y813 Surgical instruments, materials and general- and plastic-surgery devices (including sutures) associated with adverse incidents -Y818 Miscellaneous general- and plastic-surgery devices associated with adverse incidents, not elsewhere classified -Y828 Other medical devices associated with adverse incidents -Y829 Unspecified medical devices associated with adverse incidents -Y830 Surgical operation with transplant of whole organ as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y831 Surgical operation with implant of artificial internal device as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y832 Surgical operation with anastomosis, bypass or graft as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y833 Surgical operation with formation of external stoma as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y834 Other reconstructive surgery as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y835 Amputation of limb(s) as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y836 Removal of other organ (partial) (total) as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y838 Other surgical procedures as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y839 Surgical procedure, unspecified as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y840 Cardiac catheterization as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y841 Kidney dialysis as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y842 Radiological procedure and radiotherapy as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y843 Shock therapy as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y844 Aspiration of fluid as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y845 Insertion of gastric or duodenal sound as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y846 Urinary catheterization as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y847 Blood-sampling as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y848 Other medical procedures as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y849 Medical procedure, unspecified as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y900 Blood alcohol level of less than 20 mg/100 ml -Y901 Blood alcohol level of 20-39 mg/100 ml -Y902 Blood alcohol level of 40-59 mg/100 ml -Y903 Blood alcohol level of 60-79 mg/100 ml -Y904 Blood alcohol level of 80-99 mg/100 ml -Y905 Blood alcohol level of 100-119 mg/100 ml -Y906 Blood alcohol level of 120-199 mg/100 ml -Y907 Blood alcohol level of 200-239 mg/100 ml -Y908 Blood alcohol level of 240 mg/100 ml or more -Y909 Presence of alcohol in blood, level not specified -Y92000 Kitchen of unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92001 Dining room of unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92002 Bathroom of unspecified non-institutional (private) residence single-family (private) house as the place of occurrence of the external cause -Y92003 Bedroom of unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92007 Garden or yard of unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92008 Other place in unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92009 Unspecified place in unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92010 Kitchen of single-family (private) house as the place of occurrence of the external cause -Y92011 Dining room of single-family (private) house as the place of occurrence of the external cause -Y92012 Bathroom of single-family (private) house as the place of occurrence of the external cause -Y92013 Bedroom of single-family (private) house as the place of occurrence of the external cause -Y92014 Private driveway to single-family (private) house as the place of occurrence of the external cause -Y92015 Private garage of single-family (private) house as the place of occurrence of the external cause -Y92016 Swimming-pool in single-family (private) house or garden as the place of occurrence of the external cause -Y92017 Garden or yard in single-family (private) house as the place of occurrence of the external cause -Y92018 Other place in single-family (private) house as the place of occurrence of the external cause -Y92019 Unspecified place in single-family (private) house as the place of occurrence of the external cause -Y92020 Kitchen in mobile home as the place of occurrence of the external cause -Y92021 Dining room in mobile home as the place of occurrence of the external cause -Y92022 Bathroom in mobile home as the place of occurrence of the external cause -Y92023 Bedroom in mobile home as the place of occurrence of the external cause -Y92024 Driveway of mobile home as the place of occurrence of the external cause -Y92025 Garage of mobile home as the place of occurrence of the external cause -Y92026 Swimming-pool of mobile home as the place of occurrence of the external cause -Y92027 Garden or yard of mobile home as the place of occurrence of the external cause -Y92028 Other place in mobile home as the place of occurrence of the external cause -Y92029 Unspecified place in mobile home as the place of occurrence of the external cause -Y92030 Kitchen in apartment as the place of occurrence of the external cause -Y92031 Bathroom in apartment as the place of occurrence of the external cause -Y92032 Bedroom in apartment as the place of occurrence of the external cause -Y92038 Other place in apartment as the place of occurrence of the external cause -Y92039 Unspecified place in apartment as the place of occurrence of the external cause -Y92040 Kitchen in boarding-house as the place of occurrence of the external cause -Y92041 Bathroom in boarding-house as the place of occurrence of the external cause -Y92042 Bedroom in boarding-house as the place of occurrence of the external cause -Y92043 Driveway of boarding-house as the place of occurrence of the external cause -Y92044 Garage of boarding-house as the place of occurrence of the external cause -Y92045 Swimming-pool of boarding-house as the place of occurrence of the external cause -Y92046 Garden or yard of boarding-house as the place of occurrence of the external cause -Y92048 Other place in boarding-house as the place of occurrence of the external cause -Y92049 Unspecified place in boarding-house as the place of occurrence of the external cause -Y92090 Kitchen in other non-institutional residence as the place of occurrence of the external cause -Y92091 Bathroom in other non-institutional residence as the place of occurrence of the external cause -Y92092 Bedroom in other non-institutional residence as the place of occurrence of the external cause -Y92093 Driveway of other non-institutional residence as the place of occurrence of the external cause -Y92094 Garage of other non-institutional residence as the place of occurrence of the external cause -Y92095 Swimming-pool of other non-institutional residence as the place of occurrence of the external cause -Y92096 Garden or yard of other non-institutional residence as the place of occurrence of the external cause -Y92098 Other place in other non-institutional residence as the place of occurrence of the external cause -Y92099 Unspecified place in other non-institutional residence as the place of occurrence of the external cause -Y9210 Unspecified residential institution as the place of occurrence of the external cause -Y92110 Kitchen in children's home and orphanage as the place of occurrence of the external cause -Y92111 Bathroom in children's home and orphanage as the place of occurrence of the external cause -Y92112 Bedroom in children's home and orphanage as the place of occurrence of the external cause -Y92113 Driveway of children's home and orphanage as the place of occurrence of the external cause -Y92114 Garage of children's home and orphanage as the place of occurrence of the external cause -Y92115 Swimming-pool of children's home and orphanage as the place of occurrence of the external cause -Y92116 Garden or yard of children's home and orphanage as the place of occurrence of the external cause -Y92118 Other place in children's home and orphanage as the place of occurrence of the external cause -Y92119 Unspecified place in children's home and orphanage as the place of occurrence of the external cause -Y92120 Kitchen in nursing home as the place of occurrence of the external cause -Y92121 Bathroom in nursing home as the place of occurrence of the external cause -Y92122 Bedroom in nursing home as the place of occurrence of the external cause -Y92123 Driveway of nursing home as the place of occurrence of the external cause -Y92124 Garage of nursing home as the place of occurrence of the external cause -Y92125 Swimming-pool of nursing home as the place of occurrence of the external cause -Y92126 Garden or yard of nursing home as the place of occurrence of the external cause -Y92128 Other place in nursing home as the place of occurrence of the external cause -Y92129 Unspecified place in nursing home as the place of occurrence of the external cause -Y92130 Kitchen on military base as the place of occurrence of the external cause -Y92131 Mess hall on military base as the place of occurrence of the external cause -Y92133 Barracks on military base as the place of occurrence of the external cause -Y92135 Garage on military base as the place of occurrence of the external cause -Y92136 Swimming-pool on military base as the place of occurrence of the external cause -Y92137 Garden or yard on military base as the place of occurrence of the external cause -Y92138 Other place on military base as the place of occurrence of the external cause -Y92139 Unspecified place military base as the place of occurrence of the external cause -Y92140 Kitchen in prison as the place of occurrence of the external cause -Y92141 Dining room in prison as the place of occurrence of the external cause -Y92142 Bathroom in prison as the place of occurrence of the external cause -Y92143 Cell of prison as the place of occurrence of the external cause -Y92146 Swimming-pool of prison as the place of occurrence of the external cause -Y92147 Courtyard of prison as the place of occurrence of the external cause -Y92148 Other place in prison as the place of occurrence of the external cause -Y92149 Unspecified place in prison as the place of occurrence of the external cause -Y92150 Kitchen in reform school as the place of occurrence of the external cause -Y92151 Dining room in reform school as the place of occurrence of the external cause -Y92152 Bathroom in reform school as the place of occurrence of the external cause -Y92153 Bedroom in reform school as the place of occurrence of the external cause -Y92154 Driveway of reform school as the place of occurrence of the external cause -Y92155 Garage of reform school as the place of occurrence of the external cause -Y92156 Swimming-pool of reform school as the place of occurrence of the external cause -Y92157 Garden or yard of reform school as the place of occurrence of the external cause -Y92158 Other place in reform school as the place of occurrence of the external cause -Y92159 Unspecified place in reform school as the place of occurrence of the external cause -Y92160 Kitchen in school dormitory as the place of occurrence of the external cause -Y92161 Dining room in school dormitory as the place of occurrence of the external cause -Y92162 Bathroom in school dormitory as the place of occurrence of the external cause -Y92163 Bedroom in school dormitory as the place of occurrence of the external cause -Y92168 Other place in school dormitory as the place of occurrence of the external cause -Y92169 Unspecified place in school dormitory as the place of occurrence of the external cause -Y92190 Kitchen in other specified residential institution as the place of occurrence of the external cause -Y92191 Dining room in other specified residential institution as the place of occurrence of the external cause -Y92192 Bathroom in other specified residential institution as the place of occurrence of the external cause -Y92193 Bedroom in other specified residential institution as the place of occurrence of the external cause -Y92194 Driveway of other specified residential institution as the place of occurrence of the external cause -Y92195 Garage of other specified residential institution as the place of occurrence of the external cause -Y92196 Pool of other specified residential institution as the place of occurrence of the external cause -Y92197 Garden or yard of other specified residential institution as the place of occurrence of the external cause -Y92198 Other place in other specified residential institution as the place of occurrence of the external cause -Y92199 Unspecified place in other specified residential institution as the place of occurrence of the external cause -Y92210 Daycare center as the place of occurrence of the external cause -Y92211 Elementary school as the place of occurrence of the external cause -Y92212 Middle school as the place of occurrence of the external cause -Y92213 High school as the place of occurrence of the external cause -Y92214 College as the place of occurrence of the external cause -Y92215 Trade school as the place of occurrence of the external cause -Y92218 Other school as the place of occurrence of the external cause -Y92219 Unspecified school as the place of occurrence of the external cause -Y9222 Religious institution as the place of occurrence of the external cause -Y92230 Patient room in hospital as the place of occurrence of the external cause -Y92231 Patient bathroom in hospital as the place of occurrence of the external cause -Y92232 Corridor of hospital as the place of occurrence of the external cause -Y92233 Cafeteria of hospital as the place of occurrence of the external cause -Y92234 Operating room of hospital as the place of occurrence of the external cause -Y92238 Other place in hospital as the place of occurrence of the external cause -Y92239 Unspecified place in hospital as the place of occurrence of the external cause -Y92240 Courthouse as the place of occurrence of the external cause -Y92241 Library as the place of occurrence of the external cause -Y92242 Post office as the place of occurrence of the external cause -Y92243 City hall as the place of occurrence of the external cause -Y92248 Other public administrative building as the place of occurrence of the external cause -Y92250 Art Gallery as the place of occurrence of the external cause -Y92251 Museum as the place of occurrence of the external cause -Y92252 Music hall as the place of occurrence of the external cause -Y92253 Opera house as the place of occurrence of the external cause -Y92254 Theater (live) as the place of occurrence of the external cause -Y92258 Other cultural public building as the place of occurrence of the external cause -Y9226 Movie house or cinema as the place of occurrence of the external cause -Y9229 Other specified public building as the place of occurrence of the external cause -Y92310 Basketball court as the place of occurrence of the external cause -Y92311 Squash court as the place of occurrence of the external cause -Y92312 Tennis court as the place of occurrence of the external cause -Y92318 Other athletic court as the place of occurrence of the external cause -Y92320 Baseball field as the place of occurrence of the external cause -Y92321 Football field as the place of occurrence of the external cause -Y92322 Soccer field as the place of occurrence of the external cause -Y92328 Other athletic field as the place of occurrence of the external cause -Y92330 Ice skating rink (indoor) (outdoor) as the place of occurrence of the external cause -Y92331 Roller skating rink as the place of occurrence of the external cause -Y9234 Swimming pool (public) as the place of occurrence of the external cause -Y9239 Other specified sports and athletic area as the place of occurrence of the external cause -Y92410 Unspecified street and highway as the place of occurrence of the external cause -Y92411 Interstate highway as the place of occurrence of the external cause -Y92412 Parkway as the place of occurrence of the external cause -Y92413 State road as the place of occurrence of the external cause -Y92414 Local residential or business street as the place of occurrence of the external cause -Y92415 Exit ramp or entrance ramp of street or highway as the place of occurrence of the external cause -Y92480 Sidewalk as the place of occurrence of the external cause -Y92481 Parking lot as the place of occurrence of the external cause -Y92482 Bike path as the place of occurrence of the external cause -Y92488 Other paved roadways as the place of occurrence of the external cause -Y92510 Bank as the place of occurrence of the external cause -Y92511 Restaurant or cafe as the place of occurrence of the external cause -Y92512 Supermarket, store or market as the place of occurrence of the external cause -Y92513 Shop (commercial) as the place of occurrence of the external cause -Y92520 Airport as the place of occurrence of the external cause -Y92521 Bus station as the place of occurrence of the external cause -Y92522 Railway station as the place of occurrence of the external cause -Y92523 Highway rest stop as the place of occurrence of the external cause -Y92524 Gas station as the place of occurrence of the external cause -Y92530 Ambulatory surgery center as the place of occurrence of the external cause -Y92531 Health care provider office as the place of occurrence of the external cause -Y92532 Urgent care center as the place of occurrence of the external cause -Y92538 Other ambulatory health services establishments as the place of occurrence of the external cause -Y9259 Other trade areas as the place of occurrence of the external cause -Y9261 Building [any] under construction as the place of occurrence of the external cause -Y9262 Dock or shipyard as the place of occurrence of the external cause -Y9263 Factory as the place of occurrence of the external cause -Y9264 Mine or pit as the place of occurrence of the external cause -Y9265 Oil rig as the place of occurrence of the external cause -Y9269 Other specified industrial and construction area as the place of occurrence of the external cause -Y9271 Barn as the place of occurrence of the external cause -Y9272 Chicken coop as the place of occurrence of the external cause -Y9273 Farm field as the place of occurrence of the external cause -Y9274 Orchard as the place of occurrence of the external cause -Y9279 Other farm location as the place of occurrence of the external cause -Y92810 Car as the place of occurrence of the external cause -Y92811 Bus as the place of occurrence of the external cause -Y92812 Truck as the place of occurrence of the external cause -Y92813 Airplane as the place of occurrence of the external cause -Y92814 Boat as the place of occurrence of the external cause -Y92815 Train as the place of occurrence of the external cause -Y92816 Subway car as the place of occurrence of the external cause -Y92818 Other transport vehicle as the place of occurrence of the external cause -Y92820 Desert as the place of occurrence of the external cause -Y92821 Forest as the place of occurrence of the external cause -Y92828 Other wilderness area as the place of occurrence of the external cause -Y92830 Public park as the place of occurrence of the external cause -Y92831 Amusement park as the place of occurrence of the external cause -Y92832 Beach as the place of occurrence of the external cause -Y92833 Campsite as the place of occurrence of the external cause -Y92834 Zoological garden (Zoo) as the place of occurrence of the external cause -Y92838 Other recreation area as the place of occurrence of the external cause -Y9284 Military training ground as the place of occurrence of the external cause -Y9285 Railroad track as the place of occurrence of the external cause -Y9286 Slaughter house as the place of occurrence of the external cause -Y9289 Other specified places as the place of occurrence of the external cause -Y929 Unspecified place or not applicable -Y9301 Activity, walking, marching and hiking -Y9302 Activity, running -Y9311 Activity, swimming -Y9312 Activity, springboard and platform diving -Y9313 Activity, water polo -Y9314 Activity, water aerobics and water exercise -Y9315 Activity, underwater diving and snorkeling -Y9316 Activity, rowing, canoeing, kayaking, rafting and tubing -Y9317 Activity, water skiing and wake boarding -Y9318 Activity, surfing, windsurfing and boogie boarding -Y9319 Activity, other involving water and watercraft -Y9321 Activity, ice skating -Y9322 Activity, ice hockey -Y9323 Activity, snow (alpine) (downhill) skiing, snow boarding, sledding, tobogganing and snow tubing -Y9324 Activity, cross country skiing -Y9329 Activity, other involving ice and snow -Y9331 Activity, mountain climbing, rock climbing and wall climbing -Y9332 Activity, rappelling -Y9333 Activity, BASE jumping -Y9334 Activity, bungee jumping -Y9335 Activity, hang gliding -Y9339 Activity, other involving climbing, rappelling and jumping off -Y9341 Activity, dancing -Y9342 Activity, yoga -Y9343 Activity, gymnastics -Y9344 Activity, trampolining -Y9345 Activity, cheerleading -Y9349 Activity, other involving dancing and other rhythmic movements -Y9351 Activity, roller skating (inline) and skateboarding -Y9352 Activity, horseback riding -Y9353 Activity, golf -Y9354 Activity, bowling -Y9355 Activity, bike riding -Y9356 Activity, jumping rope -Y9357 Activity, non-running track and field events -Y9359 Activity, other involving other sports and athletics played individually -Y9361 Activity, american tackle football -Y9362 Activity, american flag or touch football -Y9363 Activity, rugby -Y9364 Activity, baseball -Y9365 Activity, lacrosse and field hockey -Y9366 Activity, soccer -Y9367 Activity, basketball -Y9368 Activity, volleyball (beach) (court) -Y936A Activity, physical games generally associated with school recess, summer camp and children -Y9369 Activity, other involving other sports and athletics played as a team or group -Y9371 Activity, boxing -Y9372 Activity, wrestling -Y9373 Activity, racquet and hand sports -Y9374 Activity, frisbee -Y9375 Activity, martial arts -Y9379 Activity, other specified sports and athletics -Y93A1 Activity, exercise machines primarily for cardiorespiratory conditioning -Y93A2 Activity, calisthenics -Y93A3 Activity, aerobic and step exercise -Y93A4 Activity, circuit training -Y93A5 Activity, obstacle course -Y93A6 Activity, grass drills -Y93A9 Activity, other involving cardiorespiratory exercise -Y93B1 Activity, exercise machines primarily for muscle strengthening -Y93B2 Activity, push-ups, pull-ups, sit-ups -Y93B3 Activity, free weights -Y93B4 Activity, pilates -Y93B9 Activity, other involving muscle strengthening exercises -Y93C1 Activity, computer keyboarding -Y93C2 Activity, hand held interactive electronic device -Y93C9 Activity, other involving computer technology and electronic devices -Y93D1 Activity, knitting and crocheting -Y93D2 Activity, sewing -Y93D3 Activity, furniture building and finishing -Y93D9 Activity, other involving arts and handcrafts -Y93E1 Activity, personal bathing and showering -Y93E2 Activity, laundry -Y93E3 Activity, vacuuming -Y93E4 Activity, ironing -Y93E5 Activity, floor mopping and cleaning -Y93E6 Activity, residential relocation -Y93E8 Activity, other personal hygiene -Y93E9 Activity, other interior property and clothing maintenance -Y93F1 Activity, caregiving, bathing -Y93F2 Activity, caregiving, lifting -Y93F9 Activity, other caregiving -Y93G1 Activity, food preparation and clean up -Y93G2 Activity, grilling and smoking food -Y93G3 Activity, cooking and baking -Y93G9 Activity, other involving cooking and grilling -Y93H1 Activity, digging, shoveling and raking -Y93H2 Activity, gardening and landscaping -Y93H3 Activity, building and construction -Y93H9 Activity, other involving exterior property and land maintenance, building and construction -Y93I1 Activity, roller coaster riding -Y93I9 Activity, other involving external motion -Y93J1 Activity, piano playing -Y93J2 Activity, drum and other percussion instrument playing -Y93J3 Activity, string instrument playing -Y93J4 Activity, winds and brass instrument playing -Y93K1 Activity, walking an animal -Y93K2 Activity, milking an animal -Y93K3 Activity, grooming and shearing an animal -Y93K9 Activity, other involving animal care -Y9381 Activity, refereeing a sports activity -Y9382 Activity, spectator at an event -Y9383 Activity, rough housing and horseplay -Y9384 Activity, sleeping -Y9389 Activity, other specified -Y939 Activity, unspecified -Y95 Nosocomial condition -Y990 Civilian activity done for income or pay -Y991 Military activity -Y992 Volunteer activity -Y998 Other external cause status -Y999 Unspecified external cause status -Z0000 Encounter for general adult medical examination without abnormal findings -Z0001 Encounter for general adult medical examination with abnormal findings -Z00110 Health examination for newborn under 8 days old -Z00111 Health examination for newborn 8 to 28 days old -Z00121 Encounter for routine child health examination with abnormal findings -Z00129 Encounter for routine child health examination without abnormal findings -Z002 Encounter for examination for period of rapid growth in childhood -Z003 Encounter for examination for adolescent development state -Z005 Encounter for examination of potential donor of organ and tissue -Z006 Encounter for examination for normal comparison and control in clinical research program -Z0070 Encounter for examination for period of delayed growth in childhood without abnormal findings -Z0071 Encounter for examination for period of delayed growth in childhood with abnormal findings -Z008 Encounter for other general examination -Z0100 Encounter for examination of eyes and vision without abnormal findings -Z0101 Encounter for examination of eyes and vision with abnormal findings -Z0110 Encounter for examination of ears and hearing without abnormal findings -Z01110 Encounter for hearing examination following failed hearing screening -Z01118 Encounter for examination of ears and hearing with other abnormal findings -Z0112 Encounter for hearing conservation and treatment -Z0120 Encounter for dental examination and cleaning without abnormal findings -Z0121 Encounter for dental examination and cleaning with abnormal findings -Z0130 Encounter for examination of blood pressure without abnormal findings -Z0131 Encounter for examination of blood pressure with abnormal findings -Z01411 Encounter for gynecological examination (general) (routine) with abnormal findings -Z01419 Encounter for gynecological examination (general) (routine) without abnormal findings -Z0142 Encounter for cervical smear to confirm findings of recent normal smear following initial abnormal smear -Z01810 Encounter for preprocedural cardiovascular examination -Z01811 Encounter for preprocedural respiratory examination -Z01812 Encounter for preprocedural laboratory examination -Z01818 Encounter for other preprocedural examination -Z0182 Encounter for allergy testing -Z0183 Encounter for blood typing -Z0184 Encounter for antibody response examination -Z0189 Encounter for other specified special examinations -Z020 Encounter for examination for admission to educational institution -Z021 Encounter for pre-employment examination -Z022 Encounter for examination for admission to residential institution -Z023 Encounter for examination for recruitment to armed forces -Z024 Encounter for examination for driving license -Z025 Encounter for examination for participation in sport -Z026 Encounter for examination for insurance purposes -Z0271 Encounter for disability determination -Z0279 Encounter for issue of other medical certificate -Z0281 Encounter for paternity testing -Z0282 Encounter for adoption services -Z0283 Encounter for blood-alcohol and blood-drug test -Z0289 Encounter for other administrative examinations -Z029 Encounter for administrative examinations, unspecified -Z036 Encounter for observation for suspected toxic effect from ingested substance ruled out -Z0371 Encounter for suspected problem with amniotic cavity and membrane ruled out -Z0372 Encounter for suspected placental problem ruled out -Z0373 Encounter for suspected fetal anomaly ruled out -Z0374 Encounter for suspected problem with fetal growth ruled out -Z0375 Encounter for suspected cervical shortening ruled out -Z0379 Encounter for other suspected maternal and fetal conditions ruled out -Z03810 Encounter for observation for suspected exposure to anthrax ruled out -Z03818 Encounter for observation for suspected exposure to other biological agents ruled out -Z0389 Encounter for observation for other suspected diseases and conditions ruled out -Z041 Encounter for examination and observation following transport accident -Z042 Encounter for examination and observation following work accident -Z043 Encounter for examination and observation following other accident -Z0441 Encounter for examination and observation following alleged adult rape -Z0442 Encounter for examination and observation following alleged child rape -Z046 Encounter for general psychiatric examination, requested by authority -Z0471 Encounter for examination and observation following alleged adult physical abuse -Z0472 Encounter for examination and observation following alleged child physical abuse -Z048 Encounter for examination and observation for other specified reasons -Z049 Encounter for examination and observation for unspecified reason -Z08 Encounter for follow-up examination after completed treatment for malignant neoplasm -Z09 Encounter for follow-up examination after completed treatment for conditions other than malignant neoplasm -Z110 Encounter for screening for intestinal infectious diseases -Z111 Encounter for screening for respiratory tuberculosis -Z112 Encounter for screening for other bacterial diseases -Z113 Encounter for screening for infections with a predominantly sexual mode of transmission -Z114 Encounter for screening for human immunodeficiency virus [HIV] -Z1151 Encounter for screening for human papillomavirus (HPV) -Z1159 Encounter for screening for other viral diseases -Z116 Encounter for screening for other protozoal diseases and helminthiases -Z118 Encounter for screening for other infectious and parasitic diseases -Z119 Encounter for screening for infectious and parasitic diseases, unspecified -Z120 Encounter for screening for malignant neoplasm of stomach -Z1210 Encounter for screening for malignant neoplasm of intestinal tract, unspecified -Z1211 Encounter for screening for malignant neoplasm of colon -Z1212 Encounter for screening for malignant neoplasm of rectum -Z1213 Encounter for screening for malignant neoplasm of small intestine -Z122 Encounter for screening for malignant neoplasm of respiratory organs -Z1231 Encounter for screening mammogram for malignant neoplasm of breast -Z1239 Encounter for other screening for malignant neoplasm of breast -Z124 Encounter for screening for malignant neoplasm of cervix -Z125 Encounter for screening for malignant neoplasm of prostate -Z126 Encounter for screening for malignant neoplasm of bladder -Z1271 Encounter for screening for malignant neoplasm of testis -Z1272 Encounter for screening for malignant neoplasm of vagina -Z1273 Encounter for screening for malignant neoplasm of ovary -Z1279 Encounter for screening for malignant neoplasm of other genitourinary organs -Z1281 Encounter for screening for malignant neoplasm of oral cavity -Z1282 Encounter for screening for malignant neoplasm of nervous system -Z1283 Encounter for screening for malignant neoplasm of skin -Z1289 Encounter for screening for malignant neoplasm of other sites -Z129 Encounter for screening for malignant neoplasm, site unspecified -Z130 Encounter for screening for diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism -Z131 Encounter for screening for diabetes mellitus -Z1321 Encounter for screening for nutritional disorder -Z13220 Encounter for screening for lipoid disorders -Z13228 Encounter for screening for other metabolic disorders -Z1329 Encounter for screening for other suspected endocrine disorder -Z134 Encounter for screening for certain developmental disorders in childhood -Z135 Encounter for screening for eye and ear disorders -Z136 Encounter for screening for cardiovascular disorders -Z1371 Encounter for nonprocreative screening for genetic disease carrier status -Z1379 Encounter for other screening for genetic and chromosomal anomalies -Z13810 Encounter for screening for upper gastrointestinal disorder -Z13811 Encounter for screening for lower gastrointestinal disorder -Z13818 Encounter for screening for other digestive system disorders -Z13820 Encounter for screening for osteoporosis -Z13828 Encounter for screening for other musculoskeletal disorder -Z1383 Encounter for screening for respiratory disorder NEC -Z1384 Encounter for screening for dental disorders -Z13850 Encounter for screening for traumatic brain injury -Z13858 Encounter for screening for other nervous system disorders -Z1388 Encounter for screening for disorder due to exposure to contaminants -Z1389 Encounter for screening for other disorder -Z139 Encounter for screening, unspecified -Z1401 Asymptomatic hemophilia A carrier -Z1402 Symptomatic hemophilia A carrier -Z141 Cystic fibrosis carrier -Z148 Genetic carrier of other disease -Z1501 Genetic susceptibility to malignant neoplasm of breast -Z1502 Genetic susceptibility to malignant neoplasm of ovary -Z1503 Genetic susceptibility to malignant neoplasm of prostate -Z1504 Genetic susceptibility to malignant neoplasm of endometrium -Z1509 Genetic susceptibility to other malignant neoplasm -Z1581 Genetic susceptibility to multiple endocrine neoplasia [MEN] -Z1589 Genetic susceptibility to other disease -Z1610 Resistance to unspecified beta lactam antibiotics -Z1611 Resistance to penicillins -Z1612 Extended spectrum beta lactamase (ESBL) resistance -Z1619 Resistance to other specified beta lactam antibiotics -Z1620 Resistance to unspecified antibiotic -Z1621 Resistance to vancomycin -Z1622 Resistance to vancomycin related antibiotics -Z1623 Resistance to quinolones and fluoroquinolones -Z1624 Resistance to multiple antibiotics -Z1629 Resistance to other single specified antibiotic -Z1630 Resistance to unspecified antimicrobial drugs -Z1631 Resistance to antiparasitic drug(s) -Z1632 Resistance to antifungal drug(s) -Z1633 Resistance to antiviral drug(s) -Z16341 Resistance to single antimycobacterial drug -Z16342 Resistance to multiple antimycobacterial drugs -Z1635 Resistance to multiple antimicrobial drugs -Z1639 Resistance to other specified antimicrobial drug -Z170 Estrogen receptor positive status [ER+] -Z171 Estrogen receptor negative status [ER-] -Z1801 Retained depleted uranium fragments -Z1809 Other retained radioactive fragments -Z1810 Retained metal fragments, unspecified -Z1811 Retained magnetic metal fragments -Z1812 Retained nonmagnetic metal fragments -Z182 Retained plastic fragments -Z1831 Retained animal quills or spines -Z1832 Retained tooth -Z1833 Retained wood fragments -Z1839 Other retained organic fragments -Z1881 Retained glass fragments -Z1883 Retained stone or crystalline fragments -Z1889 Other specified retained foreign body fragments -Z189 Retained foreign body fragments, unspecified material -Z2001 Contact with and (suspected) exposure to intestinal infectious diseases due to Escherichia coli (E. coli) -Z2009 Contact with and (suspected) exposure to other intestinal infectious diseases -Z201 Contact with and (suspected) exposure to tuberculosis -Z202 Contact with and (suspected) exposure to infections with a predominantly sexual mode of transmission -Z203 Contact with and (suspected) exposure to rabies -Z204 Contact with and (suspected) exposure to rubella -Z205 Contact with and (suspected) exposure to viral hepatitis -Z206 Contact with and (suspected) exposure to human immunodeficiency virus [HIV] -Z207 Contact with and (suspected) exposure to pediculosis, acariasis and other infestations -Z20810 Contact with and (suspected) exposure to anthrax -Z20811 Contact with and (suspected) exposure to meningococcus -Z20818 Contact with and (suspected) exposure to other bacterial communicable diseases -Z20820 Contact with and (suspected) exposure to varicella -Z20828 Contact with and (suspected) exposure to other viral communicable diseases -Z2089 Contact with and (suspected) exposure to other communicable diseases -Z209 Contact with and (suspected) exposure to unspecified communicable disease -Z21 Asymptomatic human immunodeficiency virus [HIV] infection status -Z220 Carrier of typhoid -Z221 Carrier of other intestinal infectious diseases -Z222 Carrier of diphtheria -Z2231 Carrier of bacterial disease due to meningococci -Z22321 Carrier or suspected carrier of Methicillin susceptible Staphylococcus aureus -Z22322 Carrier or suspected carrier of Methicillin resistant Staphylococcus aureus -Z22330 Carrier of Group B streptococcus -Z22338 Carrier of other streptococcus -Z2239 Carrier of other specified bacterial diseases -Z224 Carrier of infections with a predominantly sexual mode of transmission -Z2250 Carrier of unspecified viral hepatitis -Z2251 Carrier of viral hepatitis B -Z2252 Carrier of viral hepatitis C -Z2259 Carrier of other viral hepatitis -Z226 Carrier of human T-lymphotropic virus type-1 [HTLV-1] infection -Z228 Carrier of other infectious diseases -Z229 Carrier of infectious disease, unspecified -Z23 Encounter for immunization -Z2801 Immunization not carried out because of acute illness of patient -Z2802 Immunization not carried out because of chronic illness or condition of patient -Z2803 Immunization not carried out because of immune compromised state of patient -Z2804 Immunization not carried out because of patient allergy to vaccine or component -Z2809 Immunization not carried out because of other contraindication -Z281 Immunization not carried out because of patient decision for reasons of belief or group pressure -Z2820 Immunization not carried out because of patient decision for unspecified reason -Z2821 Immunization not carried out because of patient refusal -Z2829 Immunization not carried out because of patient decision for other reason -Z283 Underimmunization status -Z2881 Immunization not carried out due to patient having had the disease -Z2882 Immunization not carried out because of caregiver refusal -Z2889 Immunization not carried out for other reason -Z289 Immunization not carried out for unspecified reason -Z30011 Encounter for initial prescription of contraceptive pills -Z30012 Encounter for prescription of emergency contraception -Z30013 Encounter for initial prescription of injectable contraceptive -Z30014 Encounter for initial prescription of intrauterine contraceptive device -Z30018 Encounter for initial prescription of other contraceptives -Z30019 Encounter for initial prescription of contraceptives, unspecified -Z3002 Counseling and instruction in natural family planning to avoid pregnancy -Z3009 Encounter for other general counseling and advice on contraception -Z302 Encounter for sterilization -Z3040 Encounter for surveillance of contraceptives, unspecified -Z3041 Encounter for surveillance of contraceptive pills -Z3042 Encounter for surveillance of injectable contraceptive -Z30430 Encounter for insertion of intrauterine contraceptive device -Z30431 Encounter for routine checking of intrauterine contraceptive device -Z30432 Encounter for removal of intrauterine contraceptive device -Z30433 Encounter for removal and reinsertion of intrauterine contraceptive device -Z3049 Encounter for surveillance of other contraceptives -Z308 Encounter for other contraceptive management -Z309 Encounter for contraceptive management, unspecified -Z310 Encounter for reversal of previous sterilization -Z3141 Encounter for fertility testing -Z3142 Aftercare following sterilization reversal -Z31430 Encounter of female for testing for genetic disease carrier status for procreative management -Z31438 Encounter for other genetic testing of female for procreative management -Z31440 Encounter of male for testing for genetic disease carrier status for procreative management -Z31441 Encounter for testing of male partner of patient with recurrent pregnancy loss -Z31448 Encounter for other genetic testing of male for procreative management -Z3149 Encounter for other procreative investigation and testing -Z315 Encounter for genetic counseling -Z3161 Procreative counseling and advice using natural family planning -Z3162 Encounter for fertility preservation counseling -Z3169 Encounter for other general counseling and advice on procreation -Z3181 Encounter for male factor infertility in female patient -Z3182 Encounter for Rh incompatibility status -Z3183 Encounter for assisted reproductive fertility procedure cycle -Z3184 Encounter for fertility preservation procedure -Z3189 Encounter for other procreative management -Z319 Encounter for procreative management, unspecified -Z3200 Encounter for pregnancy test, result unknown -Z3201 Encounter for pregnancy test, result positive -Z3202 Encounter for pregnancy test, result negative -Z322 Encounter for childbirth instruction -Z323 Encounter for childcare instruction -Z331 Pregnant state, incidental -Z332 Encounter for elective termination of pregnancy -Z3400 Encounter for supervision of normal first pregnancy, unspecified trimester -Z3401 Encounter for supervision of normal first pregnancy, first trimester -Z3402 Encounter for supervision of normal first pregnancy, second trimester -Z3403 Encounter for supervision of normal first pregnancy, third trimester -Z3480 Encounter for supervision of other normal pregnancy, unspecified trimester -Z3481 Encounter for supervision of other normal pregnancy, first trimester -Z3482 Encounter for supervision of other normal pregnancy, second trimester -Z3483 Encounter for supervision of other normal pregnancy, third trimester -Z3490 Encounter for supervision of normal pregnancy, unspecified, unspecified trimester -Z3491 Encounter for supervision of normal pregnancy, unspecified, first trimester -Z3492 Encounter for supervision of normal pregnancy, unspecified, second trimester -Z3493 Encounter for supervision of normal pregnancy, unspecified, third trimester -Z36 Encounter for antenatal screening of mother -Z3A00 Weeks of gestation of pregnancy not specified -Z3A01 Less than 8 weeks gestation of pregnancy -Z3A08 8 weeks gestation of pregnancy -Z3A09 9 weeks gestation of pregnancy -Z3A10 10 weeks gestation of pregnancy -Z3A11 11 weeks gestation of pregnancy -Z3A12 12 weeks gestation of pregnancy -Z3A13 13 weeks gestation of pregnancy -Z3A14 14 weeks gestation of pregnancy -Z3A15 15 weeks gestation of pregnancy -Z3A16 16 weeks gestation of pregnancy -Z3A17 17 weeks gestation of pregnancy -Z3A18 18 weeks gestation of pregnancy -Z3A19 19 weeks gestation of pregnancy -Z3A20 20 weeks gestation of pregnancy -Z3A21 21 weeks gestation of pregnancy -Z3A22 22 weeks gestation of pregnancy -Z3A23 23 weeks gestation of pregnancy -Z3A24 24 weeks gestation of pregnancy -Z3A25 25 weeks gestation of pregnancy -Z3A26 26 weeks gestation of pregnancy -Z3A27 27 weeks gestation of pregnancy -Z3A28 28 weeks gestation of pregnancy -Z3A29 29 weeks gestation of pregnancy -Z3A30 30 weeks gestation of pregnancy -Z3A31 31 weeks gestation of pregnancy -Z3A32 32 weeks gestation of pregnancy -Z3A33 33 weeks gestation of pregnancy -Z3A34 34 weeks gestation of pregnancy -Z3A35 35 weeks gestation of pregnancy -Z3A36 36 weeks gestation of pregnancy -Z3A37 37 weeks gestation of pregnancy -Z3A38 38 weeks gestation of pregnancy -Z3A39 39 weeks gestation of pregnancy -Z3A40 40 weeks gestation of pregnancy -Z3A41 41 weeks gestation of pregnancy -Z3A42 42 weeks gestation of pregnancy -Z3A49 Greater than 42 weeks gestation of pregnancy -Z370 Single live birth -Z371 Single stillbirth -Z372 Twins, both liveborn -Z373 Twins, one liveborn and one stillborn -Z374 Twins, both stillborn -Z3750 Multiple births, unspecified, all liveborn -Z3751 Triplets, all liveborn -Z3752 Quadruplets, all liveborn -Z3753 Quintuplets, all liveborn -Z3754 Sextuplets, all liveborn -Z3759 Other multiple births, all liveborn -Z3760 Multiple births, unspecified, some liveborn -Z3761 Triplets, some liveborn -Z3762 Quadruplets, some liveborn -Z3763 Quintuplets, some liveborn -Z3764 Sextuplets, some liveborn -Z3769 Other multiple births, some liveborn -Z377 Other multiple births, all stillborn -Z379 Outcome of delivery, unspecified -Z3800 Single liveborn infant, delivered vaginally -Z3801 Single liveborn infant, delivered by cesarean -Z381 Single liveborn infant, born outside hospital -Z382 Single liveborn infant, unspecified as to place of birth -Z3830 Twin liveborn infant, delivered vaginally -Z3831 Twin liveborn infant, delivered by cesarean -Z384 Twin liveborn infant, born outside hospital -Z385 Twin liveborn infant, unspecified as to place of birth -Z3861 Triplet liveborn infant, delivered vaginally -Z3862 Triplet liveborn infant, delivered by cesarean -Z3863 Quadruplet liveborn infant, delivered vaginally -Z3864 Quadruplet liveborn infant, delivered by cesarean -Z3865 Quintuplet liveborn infant, delivered vaginally -Z3866 Quintuplet liveborn infant, delivered by cesarean -Z3868 Other multiple liveborn infant, delivered vaginally -Z3869 Other multiple liveborn infant, delivered by cesarean -Z387 Other multiple liveborn infant, born outside hospital -Z388 Other multiple liveborn infant, unspecified as to place of birth -Z390 Encounter for care and examination of mother immediately after delivery -Z391 Encounter for care and examination of lactating mother -Z392 Encounter for routine postpartum follow-up -Z4000 Encounter for prophylactic removal of unspecified organ -Z4001 Encounter for prophylactic removal of breast -Z4002 Encounter for prophylactic removal of ovary -Z4009 Encounter for prophylactic removal of other organ -Z408 Encounter for other prophylactic surgery -Z409 Encounter for prophylactic surgery, unspecified -Z411 Encounter for cosmetic surgery -Z412 Encounter for routine and ritual male circumcision -Z413 Encounter for ear piercing -Z418 Encounter for other procedures for purposes other than remedying health state -Z419 Encounter for procedure for purposes other than remedying health state, unspecified -Z421 Encounter for breast reconstruction following mastectomy -Z428 Encounter for other plastic and reconstructive surgery following medical procedure or healed injury -Z430 Encounter for attention to tracheostomy -Z431 Encounter for attention to gastrostomy -Z432 Encounter for attention to ileostomy -Z433 Encounter for attention to colostomy -Z434 Encounter for attention to other artificial openings of digestive tract -Z435 Encounter for attention to cystostomy -Z436 Encounter for attention to other artificial openings of urinary tract -Z437 Encounter for attention to artificial vagina -Z438 Encounter for attention to other artificial openings -Z439 Encounter for attention to unspecified artificial opening -Z44001 Encounter for fitting and adjustment of unspecified right artificial arm -Z44002 Encounter for fitting and adjustment of unspecified left artificial arm -Z44009 Encounter for fitting and adjustment of unspecified artificial arm, unspecified arm -Z44011 Encounter for fitting and adjustment of complete right artificial arm -Z44012 Encounter for fitting and adjustment of complete left artificial arm -Z44019 Encounter for fitting and adjustment of complete artificial arm, unspecified arm -Z44021 Encounter for fitting and adjustment of partial artificial right arm -Z44022 Encounter for fitting and adjustment of partial artificial left arm -Z44029 Encounter for fitting and adjustment of partial artificial arm, unspecified arm -Z44101 Encounter for fitting and adjustment of unspecified right artificial leg -Z44102 Encounter for fitting and adjustment of unspecified left artificial leg -Z44109 Encounter for fitting and adjustment of unspecified artificial leg, unspecified leg -Z44111 Encounter for fitting and adjustment of complete right artificial leg -Z44112 Encounter for fitting and adjustment of complete left artificial leg -Z44119 Encounter for fitting and adjustment of complete artificial leg, unspecified leg -Z44121 Encounter for fitting and adjustment of partial artificial right leg -Z44122 Encounter for fitting and adjustment of partial artificial left leg -Z44129 Encounter for fitting and adjustment of partial artificial leg, unspecified leg -Z4420 Encounter for fitting and adjustment of artificial eye, unspecified -Z4421 Encounter for fitting and adjustment of artificial right eye -Z4422 Encounter for fitting and adjustment of artificial left eye -Z4430 Encounter for fitting and adjustment of external breast prosthesis, unspecified breast -Z4431 Encounter for fitting and adjustment of external right breast prosthesis -Z4432 Encounter for fitting and adjustment of external left breast prosthesis -Z448 Encounter for fitting and adjustment of other external prosthetic devices -Z449 Encounter for fitting and adjustment of unspecified external prosthetic device -Z45010 Encounter for checking and testing of cardiac pacemaker pulse generator [battery] -Z45018 Encounter for adjustment and management of other part of cardiac pacemaker -Z4502 Encounter for adjustment and management of automatic implantable cardiac defibrillator -Z4509 Encounter for adjustment and management of other cardiac device -Z451 Encounter for adjustment and management of infusion pump -Z452 Encounter for adjustment and management of vascular access device -Z4531 Encounter for adjustment and management of implanted visual substitution device -Z45320 Encounter for adjustment and management of bone conduction device -Z45321 Encounter for adjustment and management of cochlear device -Z45328 Encounter for adjustment and management of other implanted hearing device -Z4541 Encounter for adjustment and management of cerebrospinal fluid drainage device -Z4542 Encounter for adjustment and management of neuropacemaker (brain) (peripheral nerve) (spinal cord) -Z4549 Encounter for adjustment and management of other implanted nervous system device -Z45811 Encounter for adjustment or removal of right breast implant -Z45812 Encounter for adjustment or removal of left breast implant -Z45819 Encounter for adjustment or removal of unspecified breast implant -Z4582 Encounter for adjustment or removal of myringotomy device (stent) (tube) -Z4589 Encounter for adjustment and management of other implanted devices -Z459 Encounter for adjustment and management of unspecified implanted device -Z460 Encounter for fitting and adjustment of spectacles and contact lenses -Z461 Encounter for fitting and adjustment of hearing aid -Z462 Encounter for fitting and adjustment of other devices related to nervous system and special senses -Z463 Encounter for fitting and adjustment of dental prosthetic device -Z464 Encounter for fitting and adjustment of orthodontic device -Z4651 Encounter for fitting and adjustment of gastric lap band -Z4659 Encounter for fitting and adjustment of other gastrointestinal appliance and device -Z466 Encounter for fitting and adjustment of urinary device -Z4681 Encounter for fitting and adjustment of insulin pump -Z4682 Encounter for fitting and adjustment of non-vascular catheter -Z4689 Encounter for fitting and adjustment of other specified devices -Z469 Encounter for fitting and adjustment of unspecified device -Z471 Aftercare following joint replacement surgery -Z472 Encounter for removal of internal fixation device -Z4731 Aftercare following explantation of shoulder joint prosthesis -Z4732 Aftercare following explantation of hip joint prosthesis -Z4733 Aftercare following explantation of knee joint prosthesis -Z4781 Encounter for orthopedic aftercare following surgical amputation -Z4782 Encounter for orthopedic aftercare following scoliosis surgery -Z4789 Encounter for other orthopedic aftercare -Z4800 Encounter for change or removal of nonsurgical wound dressing -Z4801 Encounter for change or removal of surgical wound dressing -Z4802 Encounter for removal of sutures -Z4803 Encounter for change or removal of drains -Z481 Encounter for planned postprocedural wound closure -Z4821 Encounter for aftercare following heart transplant -Z4822 Encounter for aftercare following kidney transplant -Z4823 Encounter for aftercare following liver transplant -Z4824 Encounter for aftercare following lung transplant -Z48280 Encounter for aftercare following heart-lung transplant -Z48288 Encounter for aftercare following multiple organ transplant -Z48290 Encounter for aftercare following bone marrow transplant -Z48298 Encounter for aftercare following other organ transplant -Z483 Aftercare following surgery for neoplasm -Z48810 Encounter for surgical aftercare following surgery on the sense organs -Z48811 Encounter for surgical aftercare following surgery on the nervous system -Z48812 Encounter for surgical aftercare following surgery on the circulatory system -Z48813 Encounter for surgical aftercare following surgery on the respiratory system -Z48814 Encounter for surgical aftercare following surgery on the teeth or oral cavity -Z48815 Encounter for surgical aftercare following surgery on the digestive system -Z48816 Encounter for surgical aftercare following surgery on the genitourinary system -Z48817 Encounter for surgical aftercare following surgery on the skin and subcutaneous tissue -Z4889 Encounter for other specified surgical aftercare -Z4901 Encounter for fitting and adjustment of extracorporeal dialysis catheter -Z4902 Encounter for fitting and adjustment of peritoneal dialysis catheter -Z4931 Encounter for adequacy testing for hemodialysis -Z4932 Encounter for adequacy testing for peritoneal dialysis -Z510 Encounter for antineoplastic radiation therapy -Z5111 Encounter for antineoplastic chemotherapy -Z5112 Encounter for antineoplastic immunotherapy -Z515 Encounter for palliative care -Z5181 Encounter for therapeutic drug level monitoring -Z5189 Encounter for other specified aftercare -Z52000 Unspecified donor, whole blood -Z52001 Unspecified donor, stem cells -Z52008 Unspecified donor, other blood -Z52010 Autologous donor, whole blood -Z52011 Autologous donor, stem cells -Z52018 Autologous donor, other blood -Z52090 Other blood donor, whole blood -Z52091 Other blood donor, stem cells -Z52098 Other blood donor, other blood -Z5210 Skin donor, unspecified -Z5211 Skin donor, autologous -Z5219 Skin donor, other -Z5220 Bone donor, unspecified -Z5221 Bone donor, autologous -Z5229 Bone donor, other -Z523 Bone marrow donor -Z524 Kidney donor -Z525 Cornea donor -Z526 Liver donor -Z52810 Egg (Oocyte) donor under age 35, anonymous recipient -Z52811 Egg (Oocyte) donor under age 35, designated recipient -Z52812 Egg (Oocyte) donor age 35 and over, anonymous recipient -Z52813 Egg (Oocyte) donor age 35 and over, designated recipient -Z52819 Egg (Oocyte) donor, unspecified -Z5289 Donor of other specified organs or tissues -Z529 Donor of unspecified organ or tissue -Z5301 Procedure and treatment not carried out due to patient smoking -Z5309 Procedure and treatment not carried out because of other contraindication -Z531 Procedure and treatment not carried out because of patient's decision for reasons of belief and group pressure -Z5320 Procedure and treatment not carried out because of patient's decision for unspecified reasons -Z5321 Procedure and treatment not carried out due to patient leaving prior to being seen by health care provider -Z5329 Procedure and treatment not carried out because of patient's decision for other reasons -Z538 Procedure and treatment not carried out for other reasons -Z539 Procedure and treatment not carried out, unspecified reason -Z550 Illiteracy and low-level literacy -Z551 Schooling unavailable and unattainable -Z552 Failed school examinations -Z553 Underachievement in school -Z554 Educational maladjustment and discord with teachers and classmates -Z558 Other problems related to education and literacy -Z559 Problems related to education and literacy, unspecified -Z560 Unemployment, unspecified -Z561 Change of job -Z562 Threat of job loss -Z563 Stressful work schedule -Z564 Discord with boss and workmates -Z565 Uncongenial work environment -Z566 Other physical and mental strain related to work -Z5681 Sexual harassment on the job -Z5682 Military deployment status -Z5689 Other problems related to employment -Z569 Unspecified problems related to employment -Z570 Occupational exposure to noise -Z571 Occupational exposure to radiation -Z572 Occupational exposure to dust -Z5731 Occupational exposure to environmental tobacco smoke -Z5739 Occupational exposure to other air contaminants -Z574 Occupational exposure to toxic agents in agriculture -Z575 Occupational exposure to toxic agents in other industries -Z576 Occupational exposure to extreme temperature -Z577 Occupational exposure to vibration -Z578 Occupational exposure to other risk factors -Z579 Occupational exposure to unspecified risk factor -Z590 Homelessness -Z591 Inadequate housing -Z592 Discord with neighbors, lodgers and landlord -Z593 Problems related to living in residential institution -Z594 Lack of adequate food and safe drinking water -Z595 Extreme poverty -Z596 Low income -Z597 Insufficient social insurance and welfare support -Z598 Other problems related to housing and economic circumstances -Z599 Problem related to housing and economic circumstances, unspecified -Z600 Problems of adjustment to life-cycle transitions -Z602 Problems related to living alone -Z603 Acculturation difficulty -Z604 Social exclusion and rejection -Z605 Target of (perceived) adverse discrimination and persecution -Z608 Other problems related to social environment -Z609 Problem related to social environment, unspecified -Z620 Inadequate parental supervision and control -Z621 Parental overprotection -Z6221 Child in welfare custody -Z6222 Institutional upbringing -Z6229 Other upbringing away from parents -Z623 Hostility towards and scapegoating of child -Z626 Inappropriate (excessive) parental pressure -Z62810 Personal history of physical and sexual abuse in childhood -Z62811 Personal history of psychological abuse in childhood -Z62812 Personal history of neglect in childhood -Z62819 Personal history of unspecified abuse in childhood -Z62820 Parent-biological child conflict -Z62821 Parent-adopted child conflict -Z62822 Parent-foster child conflict -Z62890 Parent-child estrangement NEC -Z62891 Sibling rivalry -Z62898 Other specified problems related to upbringing -Z629 Problem related to upbringing, unspecified -Z630 Problems in relationship with spouse or partner -Z631 Problems in relationship with in-laws -Z6331 Absence of family member due to military deployment -Z6332 Other absence of family member -Z634 Disappearance and death of family member -Z635 Disruption of family by separation and divorce -Z636 Dependent relative needing care at home -Z6371 Stress on family due to return of family member from military deployment -Z6372 Alcoholism and drug addiction in family -Z6379 Other stressful life events affecting family and household -Z638 Other specified problems related to primary support group -Z639 Problem related to primary support group, unspecified -Z640 Problems related to unwanted pregnancy -Z641 Problems related to multiparity -Z644 Discord with counselors -Z650 Conviction in civil and criminal proceedings without imprisonment -Z651 Imprisonment and other incarceration -Z652 Problems related to release from prison -Z653 Problems related to other legal circumstances -Z654 Victim of crime and terrorism -Z655 Exposure to disaster, war and other hostilities -Z658 Other specified problems related to psychosocial circumstances -Z659 Problem related to unspecified psychosocial circumstances -Z66 Do not resuscitate -Z6710 Type A blood, Rh positive -Z6711 Type A blood, Rh negative -Z6720 Type B blood, Rh positive -Z6721 Type B blood, Rh negative -Z6730 Type AB blood, Rh positive -Z6731 Type AB blood, Rh negative -Z6740 Type O blood, Rh positive -Z6741 Type O blood, Rh negative -Z6790 Unspecified blood type, Rh positive -Z6791 Unspecified blood type, Rh negative -Z681 Body mass index (BMI) 19 or less, adult -Z6820 Body mass index (BMI) 20.0-20.9, adult -Z6821 Body mass index (BMI) 21.0-21.9, adult -Z6822 Body mass index (BMI) 22.0-22.9, adult -Z6823 Body mass index (BMI) 23.0-23.9, adult -Z6824 Body mass index (BMI) 24.0-24.9, adult -Z6825 Body mass index (BMI) 25.0-25.9, adult -Z6826 Body mass index (BMI) 26.0-26.9, adult -Z6827 Body mass index (BMI) 27.0-27.9, adult -Z6828 Body mass index (BMI) 28.0-28.9, adult -Z6829 Body mass index (BMI) 29.0-29.9, adult -Z6830 Body mass index (BMI) 30.0-30.9, adult -Z6831 Body mass index (BMI) 31.0-31.9, adult -Z6832 Body mass index (BMI) 32.0-32.9, adult -Z6833 Body mass index (BMI) 33.0-33.9, adult -Z6834 Body mass index (BMI) 34.0-34.9, adult -Z6835 Body mass index (BMI) 35.0-35.9, adult -Z6836 Body mass index (BMI) 36.0-36.9, adult -Z6837 Body mass index (BMI) 37.0-37.9, adult -Z6838 Body mass index (BMI) 38.0-38.9, adult -Z6839 Body mass index (BMI) 39.0-39.9, adult -Z6841 Body mass index (BMI) 40.0-44.9, adult -Z6842 Body mass index (BMI) 45.0-49.9, adult -Z6843 Body mass index (BMI) 50-59.9 , adult -Z6844 Body mass index (BMI) 60.0-69.9, adult -Z6845 Body mass index (BMI) 70 or greater, adult -Z6851 Body mass index (BMI) pediatric, less than 5th percentile for age -Z6852 Body mass index (BMI) pediatric, 5th percentile to less than 85th percentile for age -Z6853 Body mass index (BMI) pediatric, 85th percentile to less than 95th percentile for age -Z6854 Body mass index (BMI) pediatric, greater than or equal to 95th percentile for age -Z69010 Encounter for mental health services for victim of parental child abuse -Z69011 Encounter for mental health services for perpetrator of parental child abuse -Z69020 Encounter for mental health services for victim of non-parental child abuse -Z69021 Encounter for mental health services for perpetrator of non-parental child abuse -Z6911 Encounter for mental health services for victim of spousal or partner abuse -Z6912 Encounter for mental health services for perpetrator of spousal or partner abuse -Z6981 Encounter for mental health services for victim of other abuse -Z6982 Encounter for mental health services for perpetrator of other abuse -Z700 Counseling related to sexual attitude -Z701 Counseling related to patient's sexual behavior and orientation -Z702 Counseling related to sexual behavior and orientation of third party -Z703 Counseling related to combined concerns regarding sexual attitude, behavior and orientation -Z708 Other sex counseling -Z709 Sex counseling, unspecified -Z710 Person encountering health services to consult on behalf of another person -Z711 Person with feared health complaint in whom no diagnosis is made -Z712 Person consulting for explanation of examination or test findings -Z713 Dietary counseling and surveillance -Z7141 Alcohol abuse counseling and surveillance of alcoholic -Z7142 Counseling for family member of alcoholic -Z7151 Drug abuse counseling and surveillance of drug abuser -Z7152 Counseling for family member of drug abuser -Z716 Tobacco abuse counseling -Z717 Human immunodeficiency virus [HIV] counseling -Z7181 Spiritual or religious counseling -Z7189 Other specified counseling -Z719 Counseling, unspecified -Z720 Tobacco use -Z723 Lack of physical exercise -Z724 Inappropriate diet and eating habits -Z7251 High risk heterosexual behavior -Z7252 High risk homosexual behavior -Z7253 High risk bisexual behavior -Z726 Gambling and betting -Z72810 Child and adolescent antisocial behavior -Z72811 Adult antisocial behavior -Z72820 Sleep deprivation -Z72821 Inadequate sleep hygiene -Z7289 Other problems related to lifestyle -Z729 Problem related to lifestyle, unspecified -Z730 Burn-out -Z731 Type A behavior pattern -Z732 Lack of relaxation and leisure -Z733 Stress, not elsewhere classified -Z734 Inadequate social skills, not elsewhere classified -Z735 Social role conflict, not elsewhere classified -Z736 Limitation of activities due to disability -Z73810 Behavioral insomnia of childhood, sleep-onset association type -Z73811 Behavioral insomnia of childhood, limit setting type -Z73812 Behavioral insomnia of childhood, combined type -Z73819 Behavioral insomnia of childhood, unspecified type -Z7382 Dual sensory impairment -Z7389 Other problems related to life management difficulty -Z739 Problem related to life management difficulty, unspecified -Z7401 Bed confinement status -Z7409 Other reduced mobility -Z741 Need for assistance with personal care -Z742 Need for assistance at home and no other household member able to render care -Z743 Need for continuous supervision -Z748 Other problems related to care provider dependency -Z749 Problem related to care provider dependency, unspecified -Z750 Medical services not available in home -Z751 Person awaiting admission to adequate facility elsewhere -Z752 Other waiting period for investigation and treatment -Z753 Unavailability and inaccessibility of health-care facilities -Z754 Unavailability and inaccessibility of other helping agencies -Z755 Holiday relief care -Z758 Other problems related to medical facilities and other health care -Z759 Unspecified problem related to medical facilities and other health care -Z760 Encounter for issue of repeat prescription -Z761 Encounter for health supervision and care of foundling -Z762 Encounter for health supervision and care of other healthy infant and child -Z763 Healthy person accompanying sick person -Z764 Other boarder to healthcare facility -Z765 Malingerer [conscious simulation] -Z7681 Expectant parent(s) prebirth pediatrician visit -Z7682 Awaiting organ transplant status -Z7689 Persons encountering health services in other specified circumstances -Z77010 Contact with and (suspected) exposure to arsenic -Z77011 Contact with and (suspected) exposure to lead -Z77012 Contact with and (suspected) exposure to uranium -Z77018 Contact with and (suspected) exposure to other hazardous metals -Z77020 Contact with and (suspected) exposure to aromatic amines -Z77021 Contact with and (suspected) exposure to benzene -Z77028 Contact with and (suspected) exposure to other hazardous aromatic compounds -Z77090 Contact with and (suspected) exposure to asbestos -Z77098 Contact with and (suspected) exposure to other hazardous, chiefly nonmedicinal, chemicals -Z77110 Contact with and (suspected) exposure to air pollution -Z77111 Contact with and (suspected) exposure to water pollution -Z77112 Contact with and (suspected) exposure to soil pollution -Z77118 Contact with and (suspected) exposure to other environmental pollution -Z77120 Contact with and (suspected) exposure to mold (toxic) -Z77121 Contact with and (suspected) exposure to harmful algae and algae toxins -Z77122 Contact with and (suspected) exposure to noise -Z77123 Contact with and (suspected) exposure to radon and other naturally occuring radiation -Z77128 Contact with and (suspected) exposure to other hazards in the physical environment -Z7721 Contact with and (suspected) exposure to potentially hazardous body fluids -Z7722 Contact with and (suspected) exposure to environmental tobacco smoke (acute) (chronic) -Z7729 Contact with and (suspected ) exposure to other hazardous substances -Z779 Other contact with and (suspected) exposures hazardous to health -Z780 Asymptomatic menopausal state -Z781 Physical restraint status -Z789 Other specified health status -Z7901 Long term (current) use of anticoagulants -Z7902 Long term (current) use of antithrombotics/antiplatelets -Z791 Long term (current) use of non-steroidal anti-inflammatories (NSAID) -Z792 Long term (current) use of antibiotics -Z793 Long term (current) use of hormonal contraceptives -Z794 Long term (current) use of insulin -Z7951 Long term (current) use of inhaled steroids -Z7952 Long term (current) use of systemic steroids -Z79810 Long term (current) use of selective estrogen receptor modulators (SERMs) -Z79811 Long term (current) use of aromatase inhibitors -Z79818 Long term (current) use of other agents affecting estrogen receptors and estrogen levels -Z7982 Long term (current) use of aspirin -Z7983 Long term (current) use of bisphosphonates -Z79890 Hormone replacement therapy (postmenopausal) -Z79891 Long term (current) use of opiate analgesic -Z79899 Other long term (current) drug therapy -Z800 Family history of malignant neoplasm of digestive organs -Z801 Family history of malignant neoplasm of trachea, bronchus and lung -Z802 Family history of malignant neoplasm of other respiratory and intrathoracic organs -Z803 Family history of malignant neoplasm of breast -Z8041 Family history of malignant neoplasm of ovary -Z8042 Family history of malignant neoplasm of prostate -Z8043 Family history of malignant neoplasm of testis -Z8049 Family history of malignant neoplasm of other genital organs -Z8051 Family history of malignant neoplasm of kidney -Z8052 Family history of malignant neoplasm of bladder -Z8059 Family history of malignant neoplasm of other urinary tract organ -Z806 Family history of leukemia -Z807 Family history of other malignant neoplasms of lymphoid, hematopoietic and related tissues -Z808 Family history of malignant neoplasm of other organs or systems -Z809 Family history of malignant neoplasm, unspecified -Z810 Family history of intellectual disabilities -Z811 Family history of alcohol abuse and dependence -Z812 Family history of tobacco abuse and dependence -Z813 Family history of other psychoactive substance abuse and dependence -Z814 Family history of other substance abuse and dependence -Z818 Family history of other mental and behavioral disorders -Z820 Family history of epilepsy and other diseases of the nervous system -Z821 Family history of blindness and visual loss -Z822 Family history of deafness and hearing loss -Z823 Family history of stroke -Z8241 Family history of sudden cardiac death -Z8249 Family history of ischemic heart disease and other diseases of the circulatory system -Z825 Family history of asthma and other chronic lower respiratory diseases -Z8261 Family history of arthritis -Z8262 Family history of osteoporosis -Z8269 Family history of other diseases of the musculoskeletal system and connective tissue -Z8271 Family history of polycystic kidney -Z8279 Family history of other congenital malformations, deformations and chromosomal abnormalities -Z828 Family history of other disabilities and chronic diseases leading to disablement, not elsewhere classified -Z830 Family history of human immunodeficiency virus [HIV] disease -Z831 Family history of other infectious and parasitic diseases -Z832 Family history of diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism -Z833 Family history of diabetes mellitus -Z8341 Family history of multiple endocrine neoplasia [MEN] syndrome -Z8349 Family history of other endocrine, nutritional and metabolic diseases -Z83511 Family history of glaucoma -Z83518 Family history of other specified eye disorder -Z8352 Family history of ear disorders -Z836 Family history of other diseases of the respiratory system -Z8371 Family history of colonic polyps -Z8379 Family history of other diseases of the digestive system -Z840 Family history of diseases of the skin and subcutaneous tissue -Z841 Family history of disorders of kidney and ureter -Z842 Family history of other diseases of the genitourinary system -Z843 Family history of consanguinity -Z8481 Family history of carrier of genetic disease -Z8489 Family history of other specified conditions -Z8500 Personal history of malignant neoplasm of unspecified digestive organ -Z8501 Personal history of malignant neoplasm of esophagus -Z85020 Personal history of malignant carcinoid tumor of stomach -Z85028 Personal history of other malignant neoplasm of stomach -Z85030 Personal history of malignant carcinoid tumor of large intestine -Z85038 Personal history of other malignant neoplasm of large intestine -Z85040 Personal history of malignant carcinoid tumor of rectum -Z85048 Personal history of other malignant neoplasm of rectum, rectosigmoid junction, and anus -Z8505 Personal history of malignant neoplasm of liver -Z85060 Personal history of malignant carcinoid tumor of small intestine -Z85068 Personal history of other malignant neoplasm of small intestine -Z8507 Personal history of malignant neoplasm of pancreas -Z8509 Personal history of malignant neoplasm of other digestive organs -Z85110 Personal history of malignant carcinoid tumor of bronchus and lung -Z85118 Personal history of other malignant neoplasm of bronchus and lung -Z8512 Personal history of malignant neoplasm of trachea -Z8520 Personal history of malignant neoplasm of unspecified respiratory organ -Z8521 Personal history of malignant neoplasm of larynx -Z8522 Personal history of malignant neoplasm of nasal cavities, middle ear, and accessory sinuses -Z85230 Personal history of malignant carcinoid tumor of thymus -Z85238 Personal history of other malignant neoplasm of thymus -Z8529 Personal history of malignant neoplasm of other respiratory and intrathoracic organs -Z853 Personal history of malignant neoplasm of breast -Z8540 Personal history of malignant neoplasm of unspecified female genital organ -Z8541 Personal history of malignant neoplasm of cervix uteri -Z8542 Personal history of malignant neoplasm of other parts of uterus -Z8543 Personal history of malignant neoplasm of ovary -Z8544 Personal history of malignant neoplasm of other female genital organs -Z8545 Personal history of malignant neoplasm of unspecified male genital organ -Z8546 Personal history of malignant neoplasm of prostate -Z8547 Personal history of malignant neoplasm of testis -Z8548 Personal history of malignant neoplasm of epididymis -Z8549 Personal history of malignant neoplasm of other male genital organs -Z8550 Personal history of malignant neoplasm of unspecified urinary tract organ -Z8551 Personal history of malignant neoplasm of bladder -Z85520 Personal history of malignant carcinoid tumor of kidney -Z85528 Personal history of other malignant neoplasm of kidney -Z8553 Personal history of malignant neoplasm of renal pelvis -Z8554 Personal history of malignant neoplasm of ureter -Z8559 Personal history of malignant neoplasm of other urinary tract organ -Z856 Personal history of leukemia -Z8571 Personal history of Hodgkin lymphoma -Z8572 Personal history of non-Hodgkin lymphomas -Z8579 Personal history of other malignant neoplasms of lymphoid, hematopoietic and related tissues -Z85810 Personal history of malignant neoplasm of tongue -Z85818 Personal history of malignant neoplasm of other sites of lip, oral cavity, and pharynx -Z85819 Personal history of malignant neoplasm of unspecified site of lip, oral cavity, and pharynx -Z85820 Personal history of malignant melanoma of skin -Z85821 Personal history of Merkel cell carcinoma -Z85828 Personal history of other malignant neoplasm of skin -Z85830 Personal history of malignant neoplasm of bone -Z85831 Personal history of malignant neoplasm of soft tissue -Z85840 Personal history of malignant neoplasm of eye -Z85841 Personal history of malignant neoplasm of brain -Z85848 Personal history of malignant neoplasm of other parts of nervous tissue -Z85850 Personal history of malignant neoplasm of thyroid -Z85858 Personal history of malignant neoplasm of other endocrine glands -Z8589 Personal history of malignant neoplasm of other organs and systems -Z859 Personal history of malignant neoplasm, unspecified -Z86000 Personal history of in-situ neoplasm of breast -Z86001 Personal history of in-situ neoplasm of cervix uteri -Z86008 Personal history of in-situ neoplasm of other site -Z86010 Personal history of colonic polyps -Z86011 Personal history of benign neoplasm of the brain -Z86012 Personal history of benign carcinoid tumor -Z86018 Personal history of other benign neoplasm -Z8603 Personal history of neoplasm of uncertain behavior -Z8611 Personal history of tuberculosis -Z8612 Personal history of poliomyelitis -Z8613 Personal history of malaria -Z8614 Personal history of Methicillin resistant Staphylococcus aureus infection -Z8619 Personal history of other infectious and parasitic diseases -Z862 Personal history of diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism -Z8631 Personal history of diabetic foot ulcer -Z8632 Personal history of gestational diabetes -Z8639 Personal history of other endocrine, nutritional and metabolic disease -Z8651 Personal history of combat and operational stress reaction -Z8659 Personal history of other mental and behavioral disorders -Z8661 Personal history of infections of the central nervous system -Z8669 Personal history of other diseases of the nervous system and sense organs -Z86711 Personal history of pulmonary embolism -Z86718 Personal history of other venous thrombosis and embolism -Z8672 Personal history of thrombophlebitis -Z8673 Personal history of transient ischemic attack (TIA), and cerebral infarction without residual deficits -Z8674 Personal history of sudden cardiac arrest -Z8679 Personal history of other diseases of the circulatory system -Z8701 Personal history of pneumonia (recurrent) -Z8709 Personal history of other diseases of the respiratory system -Z8711 Personal history of peptic ulcer disease -Z8719 Personal history of other diseases of the digestive system -Z872 Personal history of diseases of the skin and subcutaneous tissue -Z87310 Personal history of (healed) osteoporosis fracture -Z87311 Personal history of (healed) other pathological fracture -Z87312 Personal history of (healed) stress fracture -Z8739 Personal history of other diseases of the musculoskeletal system and connective tissue -Z87410 Personal history of cervical dysplasia -Z87411 Personal history of vaginal dysplasia -Z87412 Personal history of vulvar dysplasia -Z8742 Personal history of other diseases of the female genital tract -Z87430 Personal history of prostatic dysplasia -Z87438 Personal history of other diseases of male genital organs -Z87440 Personal history of urinary (tract) infections -Z87441 Personal history of nephrotic syndrome -Z87442 Personal history of urinary calculi -Z87448 Personal history of other diseases of urinary system -Z8751 Personal history of pre-term labor -Z8759 Personal history of other complications of pregnancy, childbirth and the puerperium -Z87710 Personal history of (corrected) hypospadias -Z87718 Personal history of other specified (corrected) congenital malformations of genitourinary system -Z87720 Personal history of (corrected) congenital malformations of eye -Z87721 Personal history of (corrected) congenital malformations of ear -Z87728 Personal history of other specified (corrected) congenital malformations of nervous system and sense organs -Z87730 Personal history of (corrected) cleft lip and palate -Z87738 Personal history of other specified (corrected) congenital malformations of digestive system -Z8774 Personal history of (corrected) congenital malformations of heart and circulatory system -Z8775 Personal history of (corrected) congenital malformations of respiratory system -Z8776 Personal history of (corrected) congenital malformations of integument, limbs and musculoskeletal system -Z87790 Personal history of (corrected) congenital malformations of face and neck -Z87798 Personal history of other (corrected) congenital malformations -Z8781 Personal history of (healed) traumatic fracture -Z87820 Personal history of traumatic brain injury -Z87821 Personal history of retained foreign body fully removed -Z87828 Personal history of other (healed) physical injury and trauma -Z87890 Personal history of sex reassignment -Z87891 Personal history of nicotine dependence -Z87892 Personal history of anaphylaxis -Z87898 Personal history of other specified conditions -Z880 Allergy status to penicillin -Z881 Allergy status to other antibiotic agents status -Z882 Allergy status to sulfonamides status -Z883 Allergy status to other anti-infective agents status -Z884 Allergy status to anesthetic agent status -Z885 Allergy status to narcotic agent status -Z886 Allergy status to analgesic agent status -Z887 Allergy status to serum and vaccine status -Z888 Allergy status to other drugs, medicaments and biological substances status -Z889 Allergy status to unspecified drugs, medicaments and biological substances status -Z89011 Acquired absence of right thumb -Z89012 Acquired absence of left thumb -Z89019 Acquired absence of unspecified thumb -Z89021 Acquired absence of right finger(s) -Z89022 Acquired absence of left finger(s) -Z89029 Acquired absence of unspecified finger(s) -Z89111 Acquired absence of right hand -Z89112 Acquired absence of left hand -Z89119 Acquired absence of unspecified hand -Z89121 Acquired absence of right wrist -Z89122 Acquired absence of left wrist -Z89129 Acquired absence of unspecified wrist -Z89201 Acquired absence of right upper limb, unspecified level -Z89202 Acquired absence of left upper limb, unspecified level -Z89209 Acquired absence of unspecified upper limb, unspecified level -Z89211 Acquired absence of right upper limb below elbow -Z89212 Acquired absence of left upper limb below elbow -Z89219 Acquired absence of unspecified upper limb below elbow -Z89221 Acquired absence of right upper limb above elbow -Z89222 Acquired absence of left upper limb above elbow -Z89229 Acquired absence of unspecified upper limb above elbow -Z89231 Acquired absence of right shoulder -Z89232 Acquired absence of left shoulder -Z89239 Acquired absence of unspecified shoulder -Z89411 Acquired absence of right great toe -Z89412 Acquired absence of left great toe -Z89419 Acquired absence of unspecified great toe -Z89421 Acquired absence of other right toe(s) -Z89422 Acquired absence of other left toe(s) -Z89429 Acquired absence of other toe(s), unspecified side -Z89431 Acquired absence of right foot -Z89432 Acquired absence of left foot -Z89439 Acquired absence of unspecified foot -Z89441 Acquired absence of right ankle -Z89442 Acquired absence of left ankle -Z89449 Acquired absence of unspecified ankle -Z89511 Acquired absence of right leg below knee -Z89512 Acquired absence of left leg below knee -Z89519 Acquired absence of unspecified leg below knee -Z89521 Acquired absence of right knee -Z89522 Acquired absence of left knee -Z89529 Acquired absence of unspecified knee -Z89611 Acquired absence of right leg above knee -Z89612 Acquired absence of left leg above knee -Z89619 Acquired absence of unspecified leg above knee -Z89621 Acquired absence of right hip joint -Z89622 Acquired absence of left hip joint -Z89629 Acquired absence of unspecified hip joint -Z899 Acquired absence of limb, unspecified -Z9001 Acquired absence of eye -Z9002 Acquired absence of larynx -Z9009 Acquired absence of other part of head and neck -Z9010 Acquired absence of unspecified breast and nipple -Z9011 Acquired absence of right breast and nipple -Z9012 Acquired absence of left breast and nipple -Z9013 Acquired absence of bilateral breasts and nipples -Z902 Acquired absence of lung [part of] -Z903 Acquired absence of stomach [part of] -Z90410 Acquired total absence of pancreas -Z90411 Acquired partial absence of pancreas -Z9049 Acquired absence of other specified parts of digestive tract -Z905 Acquired absence of kidney -Z906 Acquired absence of other parts of urinary tract -Z90710 Acquired absence of both cervix and uterus -Z90711 Acquired absence of uterus with remaining cervical stump -Z90712 Acquired absence of cervix with remaining uterus -Z90721 Acquired absence of ovaries, unilateral -Z90722 Acquired absence of ovaries, bilateral -Z9079 Acquired absence of other genital organ(s) -Z9081 Acquired absence of spleen -Z9089 Acquired absence of other organs -Z91010 Allergy to peanuts -Z91011 Allergy to milk products -Z91012 Allergy to eggs -Z91013 Allergy to seafood -Z91018 Allergy to other foods -Z9102 Food additives allergy status -Z91030 Bee allergy status -Z91038 Other insect allergy status -Z91040 Latex allergy status -Z91041 Radiographic dye allergy status -Z91048 Other nonmedicinal substance allergy status -Z9109 Other allergy status, other than to drugs and biological substances -Z9111 Patient's noncompliance with dietary regimen -Z91120 Patient's intentional underdosing of medication regimen due to financial hardship -Z91128 Patient's intentional underdosing of medication regimen for other reason -Z91130 Patient's unintentional underdosing of medication regimen due to age-related debility -Z91138 Patient's unintentional underdosing of medication regimen for other reason -Z9114 Patient's other noncompliance with medication regimen -Z9115 Patient's noncompliance with renal dialysis -Z9119 Patient's noncompliance with other medical treatment and regimen -Z91410 Personal history of adult physical and sexual abuse -Z91411 Personal history of adult psychological abuse -Z91412 Personal history of adult neglect -Z91419 Personal history of unspecified adult abuse -Z9149 Other personal history of psychological trauma, not elsewhere classified -Z915 Personal history of self-harm -Z9181 History of falling -Z9182 Personal history of military deployment -Z9183 Wandering in diseases classified elsewhere -Z9189 Other specified personal risk factors, not elsewhere classified -Z920 Personal history of contraception -Z9221 Personal history of antineoplastic chemotherapy -Z9222 Personal history of monoclonal drug therapy -Z9223 Personal history of estrogen therapy -Z92240 Personal history of inhaled steroid therapy -Z92241 Personal history of systemic steroid therapy -Z9225 Personal history of immunosupression therapy -Z9229 Personal history of other drug therapy -Z923 Personal history of irradiation -Z9281 Personal history of extracorporeal membrane oxygenation (ECMO) -Z9282 Status post administration of tPA (rtPA) in a different facility within the last 24 hours prior to admission to current facility -Z9283 Personal history of failed moderate sedation -Z9289 Personal history of other medical treatment -Z930 Tracheostomy status -Z931 Gastrostomy status -Z932 Ileostomy status -Z933 Colostomy status -Z934 Other artificial openings of gastrointestinal tract status -Z9350 Unspecified cystostomy status -Z9351 Cutaneous-vesicostomy status -Z9352 Appendico-vesicostomy status -Z9359 Other cystostomy status -Z936 Other artificial openings of urinary tract status -Z938 Other artificial opening status -Z939 Artificial opening status, unspecified -Z940 Kidney transplant status -Z941 Heart transplant status -Z942 Lung transplant status -Z943 Heart and lungs transplant status -Z944 Liver transplant status -Z945 Skin transplant status -Z946 Bone transplant status -Z947 Corneal transplant status -Z9481 Bone marrow transplant status -Z9482 Intestine transplant status -Z9483 Pancreas transplant status -Z9484 Stem cells transplant status -Z9489 Other transplanted organ and tissue status -Z949 Transplanted organ and tissue status, unspecified -Z950 Presence of cardiac pacemaker -Z951 Presence of aortocoronary bypass graft -Z952 Presence of prosthetic heart valve -Z953 Presence of xenogenic heart valve -Z954 Presence of other heart-valve replacement -Z955 Presence of coronary angioplasty implant and graft -Z95810 Presence of automatic (implantable) cardiac defibrillator -Z95811 Presence of heart assist device -Z95812 Presence of fully implantable artificial heart -Z95818 Presence of other cardiac implants and grafts -Z95820 Peripheral vascular angioplasty status with implants and grafts -Z95828 Presence of other vascular implants and grafts -Z959 Presence of cardiac and vascular implant and graft, unspecified -Z960 Presence of urogenital implants -Z961 Presence of intraocular lens -Z9620 Presence of otological and audiological implant, unspecified -Z9621 Cochlear implant status -Z9622 Myringotomy tube(s) status -Z9629 Presence of other otological and audiological implants -Z963 Presence of artificial larynx -Z9641 Presence of insulin pump (external) (internal) -Z9649 Presence of other endocrine implants -Z965 Presence of tooth-root and mandibular implants -Z9660 Presence of unspecified orthopedic joint implant -Z96611 Presence of right artificial shoulder joint -Z96612 Presence of left artificial shoulder joint -Z96619 Presence of unspecified artificial shoulder joint -Z96621 Presence of right artificial elbow joint -Z96622 Presence of left artificial elbow joint -Z96629 Presence of unspecified artificial elbow joint -Z96631 Presence of right artificial wrist joint -Z96632 Presence of left artificial wrist joint -Z96639 Presence of unspecified artificial wrist joint -Z96641 Presence of right artificial hip joint -Z96642 Presence of left artificial hip joint -Z96643 Presence of artificial hip joint, bilateral -Z96649 Presence of unspecified artificial hip joint -Z96651 Presence of right artificial knee joint -Z96652 Presence of left artificial knee joint -Z96653 Presence of artificial knee joint, bilateral -Z96659 Presence of unspecified artificial knee joint -Z96661 Presence of right artificial ankle joint -Z96662 Presence of left artificial ankle joint -Z96669 Presence of unspecified artificial ankle joint -Z96691 Finger-joint replacement of right hand -Z96692 Finger-joint replacement of left hand -Z96693 Finger-joint replacement, bilateral -Z96698 Presence of other orthopedic joint implants -Z967 Presence of other bone and tendon implants -Z9681 Presence of artificial skin -Z9689 Presence of other specified functional implants -Z969 Presence of functional implant, unspecified -Z970 Presence of artificial eye -Z9710 Presence of artificial limb (complete) (partial), unspecified -Z9711 Presence of artificial right arm (complete) (partial) -Z9712 Presence of artificial left arm (complete) (partial) -Z9713 Presence of artificial right leg (complete) (partial) -Z9714 Presence of artificial left leg (complete) (partial) -Z9715 Presence of artificial arms, bilateral (complete) (partial) -Z9716 Presence of artificial legs, bilateral (complete) (partial) -Z972 Presence of dental prosthetic device (complete) (partial) -Z973 Presence of spectacles and contact lenses -Z974 Presence of external hearing-aid -Z975 Presence of (intrauterine) contraceptive device -Z978 Presence of other specified devices -Z980 Intestinal bypass and anastomosis status -Z981 Arthrodesis status -Z982 Presence of cerebrospinal fluid drainage device -Z983 Post therapeutic collapse of lung status -Z9841 Cataract extraction status, right eye -Z9842 Cataract extraction status, left eye -Z9849 Cataract extraction status, unspecified eye -Z9851 Tubal ligation status -Z9852 Vasectomy status -Z9861 Coronary angioplasty status -Z9862 Peripheral vascular angioplasty status -Z98810 Dental sealant status -Z98811 Dental restoration status -Z98818 Other dental procedure status -Z9882 Breast implant status -Z9883 Filtering (vitreous) bleb after glaucoma surgery status -Z9884 Bariatric surgery status -Z9885 Transplanted organ removal status -Z9886 Personal history of breast implant removal -Z98870 Personal history of in utero procedure during pregnancy -Z98871 Personal history of in utero procedure while a fetus -Z9889 Other specified postprocedural states -Z990 Dependence on aspirator -Z9911 Dependence on respirator [ventilator] status -Z9912 Encounter for respirator [ventilator] dependence during power failure -Z992 Dependence on renal dialysis -Z993 Dependence on wheelchair -Z9981 Dependence on supplemental oxygen -Z9989 Dependence on other enabling machines and devices diff --git a/wrangler-core/src/main/resources/icd-10-2017_cm_codes.txt b/wrangler-core/src/main/resources/icd-10-2017_cm_codes.txt deleted file mode 100755 index 713acc34d..000000000 --- a/wrangler-core/src/main/resources/icd-10-2017_cm_codes.txt +++ /dev/null @@ -1,71486 +0,0 @@ -A000 Cholera due to Vibrio cholerae 01, biovar cholerae -A001 Cholera due to Vibrio cholerae 01, biovar eltor -A009 Cholera, unspecified -A0100 Typhoid fever, unspecified -A0101 Typhoid meningitis -A0102 Typhoid fever with heart involvement -A0103 Typhoid pneumonia -A0104 Typhoid arthritis -A0105 Typhoid osteomyelitis -A0109 Typhoid fever with other complications -A011 Paratyphoid fever A -A012 Paratyphoid fever B -A013 Paratyphoid fever C -A014 Paratyphoid fever, unspecified -A020 Salmonella enteritis -A021 Salmonella sepsis -A0220 Localized salmonella infection, unspecified -A0221 Salmonella meningitis -A0222 Salmonella pneumonia -A0223 Salmonella arthritis -A0224 Salmonella osteomyelitis -A0225 Salmonella pyelonephritis -A0229 Salmonella with other localized infection -A028 Other specified salmonella infections -A029 Salmonella infection, unspecified -A030 Shigellosis due to Shigella dysenteriae -A031 Shigellosis due to Shigella flexneri -A032 Shigellosis due to Shigella boydii -A033 Shigellosis due to Shigella sonnei -A038 Other shigellosis -A039 Shigellosis, unspecified -A040 Enteropathogenic Escherichia coli infection -A041 Enterotoxigenic Escherichia coli infection -A042 Enteroinvasive Escherichia coli infection -A043 Enterohemorrhagic Escherichia coli infection -A044 Other intestinal Escherichia coli infections -A045 Campylobacter enteritis -A046 Enteritis due to Yersinia enterocolitica -A047 Enterocolitis due to Clostridium difficile -A048 Other specified bacterial intestinal infections -A049 Bacterial intestinal infection, unspecified -A050 Foodborne staphylococcal intoxication -A051 Botulism food poisoning -A052 Foodborne Clostridium perfringens [Clostridium welchii] intoxication -A053 Foodborne Vibrio parahaemolyticus intoxication -A054 Foodborne Bacillus cereus intoxication -A055 Foodborne Vibrio vulnificus intoxication -A058 Other specified bacterial foodborne intoxications -A059 Bacterial foodborne intoxication, unspecified -A060 Acute amebic dysentery -A061 Chronic intestinal amebiasis -A062 Amebic nondysenteric colitis -A063 Ameboma of intestine -A064 Amebic liver abscess -A065 Amebic lung abscess -A066 Amebic brain abscess -A067 Cutaneous amebiasis -A0681 Amebic cystitis -A0682 Other amebic genitourinary infections -A0689 Other amebic infections -A069 Amebiasis, unspecified -A070 Balantidiasis -A071 Giardiasis [lambliasis] -A072 Cryptosporidiosis -A073 Isosporiasis -A074 Cyclosporiasis -A078 Other specified protozoal intestinal diseases -A079 Protozoal intestinal disease, unspecified -A080 Rotaviral enteritis -A0811 Acute gastroenteropathy due to Norwalk agent -A0819 Acute gastroenteropathy due to other small round viruses -A082 Adenoviral enteritis -A0831 Calicivirus enteritis -A0832 Astrovirus enteritis -A0839 Other viral enteritis -A084 Viral intestinal infection, unspecified -A088 Other specified intestinal infections -A09 Infectious gastroenteritis and colitis, unspecified -A150 Tuberculosis of lung -A154 Tuberculosis of intrathoracic lymph nodes -A155 Tuberculosis of larynx, trachea and bronchus -A156 Tuberculous pleurisy -A157 Primary respiratory tuberculosis -A158 Other respiratory tuberculosis -A159 Respiratory tuberculosis unspecified -A170 Tuberculous meningitis -A171 Meningeal tuberculoma -A1781 Tuberculoma of brain and spinal cord -A1782 Tuberculous meningoencephalitis -A1783 Tuberculous neuritis -A1789 Other tuberculosis of nervous system -A179 Tuberculosis of nervous system, unspecified -A1801 Tuberculosis of spine -A1802 Tuberculous arthritis of other joints -A1803 Tuberculosis of other bones -A1809 Other musculoskeletal tuberculosis -A1810 Tuberculosis of genitourinary system, unspecified -A1811 Tuberculosis of kidney and ureter -A1812 Tuberculosis of bladder -A1813 Tuberculosis of other urinary organs -A1814 Tuberculosis of prostate -A1815 Tuberculosis of other male genital organs -A1816 Tuberculosis of cervix -A1817 Tuberculous female pelvic inflammatory disease -A1818 Tuberculosis of other female genital organs -A182 Tuberculous peripheral lymphadenopathy -A1831 Tuberculous peritonitis -A1832 Tuberculous enteritis -A1839 Retroperitoneal tuberculosis -A184 Tuberculosis of skin and subcutaneous tissue -A1850 Tuberculosis of eye, unspecified -A1851 Tuberculous episcleritis -A1852 Tuberculous keratitis -A1853 Tuberculous chorioretinitis -A1854 Tuberculous iridocyclitis -A1859 Other tuberculosis of eye -A186 Tuberculosis of (inner) (middle) ear -A187 Tuberculosis of adrenal glands -A1881 Tuberculosis of thyroid gland -A1882 Tuberculosis of other endocrine glands -A1883 Tuberculosis of digestive tract organs, not elsewhere classified -A1884 Tuberculosis of heart -A1885 Tuberculosis of spleen -A1889 Tuberculosis of other sites -A190 Acute miliary tuberculosis of a single specified site -A191 Acute miliary tuberculosis of multiple sites -A192 Acute miliary tuberculosis, unspecified -A198 Other miliary tuberculosis -A199 Miliary tuberculosis, unspecified -A200 Bubonic plague -A201 Cellulocutaneous plague -A202 Pneumonic plague -A203 Plague meningitis -A207 Septicemic plague -A208 Other forms of plague -A209 Plague, unspecified -A210 Ulceroglandular tularemia -A211 Oculoglandular tularemia -A212 Pulmonary tularemia -A213 Gastrointestinal tularemia -A217 Generalized tularemia -A218 Other forms of tularemia -A219 Tularemia, unspecified -A220 Cutaneous anthrax -A221 Pulmonary anthrax -A222 Gastrointestinal anthrax -A227 Anthrax sepsis -A228 Other forms of anthrax -A229 Anthrax, unspecified -A230 Brucellosis due to Brucella melitensis -A231 Brucellosis due to Brucella abortus -A232 Brucellosis due to Brucella suis -A233 Brucellosis due to Brucella canis -A238 Other brucellosis -A239 Brucellosis, unspecified -A240 Glanders -A241 Acute and fulminating melioidosis -A242 Subacute and chronic melioidosis -A243 Other melioidosis -A249 Melioidosis, unspecified -A250 Spirillosis -A251 Streptobacillosis -A259 Rat-bite fever, unspecified -A260 Cutaneous erysipeloid -A267 Erysipelothrix sepsis -A268 Other forms of erysipeloid -A269 Erysipeloid, unspecified -A270 Leptospirosis icterohemorrhagica -A2781 Aseptic meningitis in leptospirosis -A2789 Other forms of leptospirosis -A279 Leptospirosis, unspecified -A280 Pasteurellosis -A281 Cat-scratch disease -A282 Extraintestinal yersiniosis -A288 Other specified zoonotic bacterial diseases, not elsewhere classified -A289 Zoonotic bacterial disease, unspecified -A300 Indeterminate leprosy -A301 Tuberculoid leprosy -A302 Borderline tuberculoid leprosy -A303 Borderline leprosy -A304 Borderline lepromatous leprosy -A305 Lepromatous leprosy -A308 Other forms of leprosy -A309 Leprosy, unspecified -A310 Pulmonary mycobacterial infection -A311 Cutaneous mycobacterial infection -A312 Disseminated mycobacterium avium-intracellulare complex (DMAC) -A318 Other mycobacterial infections -A319 Mycobacterial infection, unspecified -A320 Cutaneous listeriosis -A3211 Listerial meningitis -A3212 Listerial meningoencephalitis -A327 Listerial sepsis -A3281 Oculoglandular listeriosis -A3282 Listerial endocarditis -A3289 Other forms of listeriosis -A329 Listeriosis, unspecified -A33 Tetanus neonatorum -A34 Obstetrical tetanus -A35 Other tetanus -A360 Pharyngeal diphtheria -A361 Nasopharyngeal diphtheria -A362 Laryngeal diphtheria -A363 Cutaneous diphtheria -A3681 Diphtheritic cardiomyopathy -A3682 Diphtheritic radiculomyelitis -A3683 Diphtheritic polyneuritis -A3684 Diphtheritic tubulo-interstitial nephropathy -A3685 Diphtheritic cystitis -A3686 Diphtheritic conjunctivitis -A3689 Other diphtheritic complications -A369 Diphtheria, unspecified -A3700 Whooping cough due to Bordetella pertussis without pneumonia -A3701 Whooping cough due to Bordetella pertussis with pneumonia -A3710 Whooping cough due to Bordetella parapertussis without pneumonia -A3711 Whooping cough due to Bordetella parapertussis with pneumonia -A3780 Whooping cough due to other Bordetella species without pneumonia -A3781 Whooping cough due to other Bordetella species with pneumonia -A3790 Whooping cough, unspecified species without pneumonia -A3791 Whooping cough, unspecified species with pneumonia -A380 Scarlet fever with otitis media -A381 Scarlet fever with myocarditis -A388 Scarlet fever with other complications -A389 Scarlet fever, uncomplicated -A390 Meningococcal meningitis -A391 Waterhouse-Friderichsen syndrome -A392 Acute meningococcemia -A393 Chronic meningococcemia -A394 Meningococcemia, unspecified -A3950 Meningococcal carditis, unspecified -A3951 Meningococcal endocarditis -A3952 Meningococcal myocarditis -A3953 Meningococcal pericarditis -A3981 Meningococcal encephalitis -A3982 Meningococcal retrobulbar neuritis -A3983 Meningococcal arthritis -A3984 Postmeningococcal arthritis -A3989 Other meningococcal infections -A399 Meningococcal infection, unspecified -A400 Sepsis due to streptococcus, group A -A401 Sepsis due to streptococcus, group B -A403 Sepsis due to Streptococcus pneumoniae -A408 Other streptococcal sepsis -A409 Streptococcal sepsis, unspecified -A4101 Sepsis due to Methicillin susceptible Staphylococcus aureus -A4102 Sepsis due to Methicillin resistant Staphylococcus aureus -A411 Sepsis due to other specified staphylococcus -A412 Sepsis due to unspecified staphylococcus -A413 Sepsis due to Hemophilus influenzae -A414 Sepsis due to anaerobes -A4150 Gram-negative sepsis, unspecified -A4151 Sepsis due to Escherichia coli [E. coli] -A4152 Sepsis due to Pseudomonas -A4153 Sepsis due to Serratia -A4159 Other Gram-negative sepsis -A4181 Sepsis due to Enterococcus -A4189 Other specified sepsis -A419 Sepsis, unspecified organism -A420 Pulmonary actinomycosis -A421 Abdominal actinomycosis -A422 Cervicofacial actinomycosis -A427 Actinomycotic sepsis -A4281 Actinomycotic meningitis -A4282 Actinomycotic encephalitis -A4289 Other forms of actinomycosis -A429 Actinomycosis, unspecified -A430 Pulmonary nocardiosis -A431 Cutaneous nocardiosis -A438 Other forms of nocardiosis -A439 Nocardiosis, unspecified -A440 Systemic bartonellosis -A441 Cutaneous and mucocutaneous bartonellosis -A448 Other forms of bartonellosis -A449 Bartonellosis, unspecified -A46 Erysipelas -A480 Gas gangrene -A481 Legionnaires' disease -A482 Nonpneumonic Legionnaires' disease [Pontiac fever] -A483 Toxic shock syndrome -A484 Brazilian purpuric fever -A4851 Infant botulism -A4852 Wound botulism -A488 Other specified bacterial diseases -A4901 Methicillin susceptible Staphylococcus aureus infection, unspecified site -A4902 Methicillin resistant Staphylococcus aureus infection, unspecified site -A491 Streptococcal infection, unspecified site -A492 Hemophilus influenzae infection, unspecified site -A493 Mycoplasma infection, unspecified site -A498 Other bacterial infections of unspecified site -A499 Bacterial infection, unspecified -A5001 Early congenital syphilitic oculopathy -A5002 Early congenital syphilitic osteochondropathy -A5003 Early congenital syphilitic pharyngitis -A5004 Early congenital syphilitic pneumonia -A5005 Early congenital syphilitic rhinitis -A5006 Early cutaneous congenital syphilis -A5007 Early mucocutaneous congenital syphilis -A5008 Early visceral congenital syphilis -A5009 Other early congenital syphilis, symptomatic -A501 Early congenital syphilis, latent -A502 Early congenital syphilis, unspecified -A5030 Late congenital syphilitic oculopathy, unspecified -A5031 Late congenital syphilitic interstitial keratitis -A5032 Late congenital syphilitic chorioretinitis -A5039 Other late congenital syphilitic oculopathy -A5040 Late congenital neurosyphilis, unspecified -A5041 Late congenital syphilitic meningitis -A5042 Late congenital syphilitic encephalitis -A5043 Late congenital syphilitic polyneuropathy -A5044 Late congenital syphilitic optic nerve atrophy -A5045 Juvenile general paresis -A5049 Other late congenital neurosyphilis -A5051 Clutton's joints -A5052 Hutchinson's teeth -A5053 Hutchinson's triad -A5054 Late congenital cardiovascular syphilis -A5055 Late congenital syphilitic arthropathy -A5056 Late congenital syphilitic osteochondropathy -A5057 Syphilitic saddle nose -A5059 Other late congenital syphilis, symptomatic -A506 Late congenital syphilis, latent -A507 Late congenital syphilis, unspecified -A509 Congenital syphilis, unspecified -A510 Primary genital syphilis -A511 Primary anal syphilis -A512 Primary syphilis of other sites -A5131 Condyloma latum -A5132 Syphilitic alopecia -A5139 Other secondary syphilis of skin -A5141 Secondary syphilitic meningitis -A5142 Secondary syphilitic female pelvic disease -A5143 Secondary syphilitic oculopathy -A5144 Secondary syphilitic nephritis -A5145 Secondary syphilitic hepatitis -A5146 Secondary syphilitic osteopathy -A5149 Other secondary syphilitic conditions -A515 Early syphilis, latent -A519 Early syphilis, unspecified -A5200 Cardiovascular syphilis, unspecified -A5201 Syphilitic aneurysm of aorta -A5202 Syphilitic aortitis -A5203 Syphilitic endocarditis -A5204 Syphilitic cerebral arteritis -A5205 Other cerebrovascular syphilis -A5206 Other syphilitic heart involvement -A5209 Other cardiovascular syphilis -A5210 Symptomatic neurosyphilis, unspecified -A5211 Tabes dorsalis -A5212 Other cerebrospinal syphilis -A5213 Late syphilitic meningitis -A5214 Late syphilitic encephalitis -A5215 Late syphilitic neuropathy -A5216 Charcot's arthropathy (tabetic) -A5217 General paresis -A5219 Other symptomatic neurosyphilis -A522 Asymptomatic neurosyphilis -A523 Neurosyphilis, unspecified -A5271 Late syphilitic oculopathy -A5272 Syphilis of lung and bronchus -A5273 Symptomatic late syphilis of other respiratory organs -A5274 Syphilis of liver and other viscera -A5275 Syphilis of kidney and ureter -A5276 Other genitourinary symptomatic late syphilis -A5277 Syphilis of bone and joint -A5278 Syphilis of other musculoskeletal tissue -A5279 Other symptomatic late syphilis -A528 Late syphilis, latent -A529 Late syphilis, unspecified -A530 Latent syphilis, unspecified as early or late -A539 Syphilis, unspecified -A5400 Gonococcal infection of lower genitourinary tract, unspecified -A5401 Gonococcal cystitis and urethritis, unspecified -A5402 Gonococcal vulvovaginitis, unspecified -A5403 Gonococcal cervicitis, unspecified -A5409 Other gonococcal infection of lower genitourinary tract -A541 Gonococcal infection of lower genitourinary tract with periurethral and accessory gland abscess -A5421 Gonococcal infection of kidney and ureter -A5422 Gonococcal prostatitis -A5423 Gonococcal infection of other male genital organs -A5424 Gonococcal female pelvic inflammatory disease -A5429 Other gonococcal genitourinary infections -A5430 Gonococcal infection of eye, unspecified -A5431 Gonococcal conjunctivitis -A5432 Gonococcal iridocyclitis -A5433 Gonococcal keratitis -A5439 Other gonococcal eye infection -A5440 Gonococcal infection of musculoskeletal system, unspecified -A5441 Gonococcal spondylopathy -A5442 Gonococcal arthritis -A5443 Gonococcal osteomyelitis -A5449 Gonococcal infection of other musculoskeletal tissue -A545 Gonococcal pharyngitis -A546 Gonococcal infection of anus and rectum -A5481 Gonococcal meningitis -A5482 Gonococcal brain abscess -A5483 Gonococcal heart infection -A5484 Gonococcal pneumonia -A5485 Gonococcal peritonitis -A5486 Gonococcal sepsis -A5489 Other gonococcal infections -A549 Gonococcal infection, unspecified -A55 Chlamydial lymphogranuloma (venereum) -A5600 Chlamydial infection of lower genitourinary tract, unspecified -A5601 Chlamydial cystitis and urethritis -A5602 Chlamydial vulvovaginitis -A5609 Other chlamydial infection of lower genitourinary tract -A5611 Chlamydial female pelvic inflammatory disease -A5619 Other chlamydial genitourinary infection -A562 Chlamydial infection of genitourinary tract, unspecified -A563 Chlamydial infection of anus and rectum -A564 Chlamydial infection of pharynx -A568 Sexually transmitted chlamydial infection of other sites -A57 Chancroid -A58 Granuloma inguinale -A5900 Urogenital trichomoniasis, unspecified -A5901 Trichomonal vulvovaginitis -A5902 Trichomonal prostatitis -A5903 Trichomonal cystitis and urethritis -A5909 Other urogenital trichomoniasis -A598 Trichomoniasis of other sites -A599 Trichomoniasis, unspecified -A6000 Herpesviral infection of urogenital system, unspecified -A6001 Herpesviral infection of penis -A6002 Herpesviral infection of other male genital organs -A6003 Herpesviral cervicitis -A6004 Herpesviral vulvovaginitis -A6009 Herpesviral infection of other urogenital tract -A601 Herpesviral infection of perianal skin and rectum -A609 Anogenital herpesviral infection, unspecified -A630 Anogenital (venereal) warts -A638 Other specified predominantly sexually transmitted diseases -A64 Unspecified sexually transmitted disease -A65 Nonvenereal syphilis -A660 Initial lesions of yaws -A661 Multiple papillomata and wet crab yaws -A662 Other early skin lesions of yaws -A663 Hyperkeratosis of yaws -A664 Gummata and ulcers of yaws -A665 Gangosa -A666 Bone and joint lesions of yaws -A667 Other manifestations of yaws -A668 Latent yaws -A669 Yaws, unspecified -A670 Primary lesions of pinta -A671 Intermediate lesions of pinta -A672 Late lesions of pinta -A673 Mixed lesions of pinta -A679 Pinta, unspecified -A680 Louse-borne relapsing fever -A681 Tick-borne relapsing fever -A689 Relapsing fever, unspecified -A690 Necrotizing ulcerative stomatitis -A691 Other Vincent's infections -A6920 Lyme disease, unspecified -A6921 Meningitis due to Lyme disease -A6922 Other neurologic disorders in Lyme disease -A6923 Arthritis due to Lyme disease -A6929 Other conditions associated with Lyme disease -A698 Other specified spirochetal infections -A699 Spirochetal infection, unspecified -A70 Chlamydia psittaci infections -A710 Initial stage of trachoma -A711 Active stage of trachoma -A719 Trachoma, unspecified -A740 Chlamydial conjunctivitis -A7481 Chlamydial peritonitis -A7489 Other chlamydial diseases -A749 Chlamydial infection, unspecified -A750 Epidemic louse-borne typhus fever due to Rickettsia prowazekii -A751 Recrudescent typhus [Brill's disease] -A752 Typhus fever due to Rickettsia typhi -A753 Typhus fever due to Rickettsia tsutsugamushi -A759 Typhus fever, unspecified -A770 Spotted fever due to Rickettsia rickettsii -A771 Spotted fever due to Rickettsia conorii -A772 Spotted fever due to Rickettsia siberica -A773 Spotted fever due to Rickettsia australis -A7740 Ehrlichiosis, unspecified -A7741 Ehrlichiosis chafeensis [E. chafeensis] -A7749 Other ehrlichiosis -A778 Other spotted fevers -A779 Spotted fever, unspecified -A78 Q fever -A790 Trench fever -A791 Rickettsialpox due to Rickettsia akari -A7981 Rickettsiosis due to Ehrlichia sennetsu -A7989 Other specified rickettsioses -A799 Rickettsiosis, unspecified -A800 Acute paralytic poliomyelitis, vaccine-associated -A801 Acute paralytic poliomyelitis, wild virus, imported -A802 Acute paralytic poliomyelitis, wild virus, indigenous -A8030 Acute paralytic poliomyelitis, unspecified -A8039 Other acute paralytic poliomyelitis -A804 Acute nonparalytic poliomyelitis -A809 Acute poliomyelitis, unspecified -A8100 Creutzfeldt-Jakob disease, unspecified -A8101 Variant Creutzfeldt-Jakob disease -A8109 Other Creutzfeldt-Jakob disease -A811 Subacute sclerosing panencephalitis -A812 Progressive multifocal leukoencephalopathy -A8181 Kuru -A8182 Gerstmann-Straussler-Scheinker syndrome -A8183 Fatal familial insomnia -A8189 Other atypical virus infections of central nervous system -A819 Atypical virus infection of central nervous system, unspecified -A820 Sylvatic rabies -A821 Urban rabies -A829 Rabies, unspecified -A830 Japanese encephalitis -A831 Western equine encephalitis -A832 Eastern equine encephalitis -A833 St Louis encephalitis -A834 Australian encephalitis -A835 California encephalitis -A836 Rocio virus disease -A838 Other mosquito-borne viral encephalitis -A839 Mosquito-borne viral encephalitis, unspecified -A840 Far Eastern tick-borne encephalitis [Russian spring-summer encephalitis] -A841 Central European tick-borne encephalitis -A848 Other tick-borne viral encephalitis -A849 Tick-borne viral encephalitis, unspecified -A850 Enteroviral encephalitis -A851 Adenoviral encephalitis -A852 Arthropod-borne viral encephalitis, unspecified -A858 Other specified viral encephalitis -A86 Unspecified viral encephalitis -A870 Enteroviral meningitis -A871 Adenoviral meningitis -A872 Lymphocytic choriomeningitis -A878 Other viral meningitis -A879 Viral meningitis, unspecified -A880 Enteroviral exanthematous fever [Boston exanthem] -A881 Epidemic vertigo -A888 Other specified viral infections of central nervous system -A89 Unspecified viral infection of central nervous system -A90 Dengue fever [classical dengue] -A91 Dengue hemorrhagic fever -A920 Chikungunya virus disease -A921 O'nyong-nyong fever -A922 Venezuelan equine fever -A9230 West Nile virus infection, unspecified -A9231 West Nile virus infection with encephalitis -A9232 West Nile virus infection with other neurologic manifestation -A9239 West Nile virus infection with other complications -A924 Rift Valley fever -A925 Zika virus disease -A928 Other specified mosquito-borne viral fevers -A929 Mosquito-borne viral fever, unspecified -A930 Oropouche virus disease -A931 Sandfly fever -A932 Colorado tick fever -A938 Other specified arthropod-borne viral fevers -A94 Unspecified arthropod-borne viral fever -A950 Sylvatic yellow fever -A951 Urban yellow fever -A959 Yellow fever, unspecified -A960 Junin hemorrhagic fever -A961 Machupo hemorrhagic fever -A962 Lassa fever -A968 Other arenaviral hemorrhagic fevers -A969 Arenaviral hemorrhagic fever, unspecified -A980 Crimean-Congo hemorrhagic fever -A981 Omsk hemorrhagic fever -A982 Kyasanur Forest disease -A983 Marburg virus disease -A984 Ebola virus disease -A985 Hemorrhagic fever with renal syndrome -A988 Other specified viral hemorrhagic fevers -A99 Unspecified viral hemorrhagic fever -B000 Eczema herpeticum -B001 Herpesviral vesicular dermatitis -B002 Herpesviral gingivostomatitis and pharyngotonsillitis -B003 Herpesviral meningitis -B004 Herpesviral encephalitis -B0050 Herpesviral ocular disease, unspecified -B0051 Herpesviral iridocyclitis -B0052 Herpesviral keratitis -B0053 Herpesviral conjunctivitis -B0059 Other herpesviral disease of eye -B007 Disseminated herpesviral disease -B0081 Herpesviral hepatitis -B0082 Herpes simplex myelitis -B0089 Other herpesviral infection -B009 Herpesviral infection, unspecified -B010 Varicella meningitis -B0111 Varicella encephalitis and encephalomyelitis -B0112 Varicella myelitis -B012 Varicella pneumonia -B0181 Varicella keratitis -B0189 Other varicella complications -B019 Varicella without complication -B020 Zoster encephalitis -B021 Zoster meningitis -B0221 Postherpetic geniculate ganglionitis -B0222 Postherpetic trigeminal neuralgia -B0223 Postherpetic polyneuropathy -B0224 Postherpetic myelitis -B0229 Other postherpetic nervous system involvement -B0230 Zoster ocular disease, unspecified -B0231 Zoster conjunctivitis -B0232 Zoster iridocyclitis -B0233 Zoster keratitis -B0234 Zoster scleritis -B0239 Other herpes zoster eye disease -B027 Disseminated zoster -B028 Zoster with other complications -B029 Zoster without complications -B03 Smallpox -B04 Monkeypox -B050 Measles complicated by encephalitis -B051 Measles complicated by meningitis -B052 Measles complicated by pneumonia -B053 Measles complicated by otitis media -B054 Measles with intestinal complications -B0581 Measles keratitis and keratoconjunctivitis -B0589 Other measles complications -B059 Measles without complication -B0600 Rubella with neurological complication, unspecified -B0601 Rubella encephalitis -B0602 Rubella meningitis -B0609 Other neurological complications of rubella -B0681 Rubella pneumonia -B0682 Rubella arthritis -B0689 Other rubella complications -B069 Rubella without complication -B070 Plantar wart -B078 Other viral warts -B079 Viral wart, unspecified -B08010 Cowpox -B08011 Vaccinia not from vaccine -B0802 Orf virus disease -B0803 Pseudocowpox [milker's node] -B0804 Paravaccinia, unspecified -B0809 Other orthopoxvirus infections -B081 Molluscum contagiosum -B0820 Exanthema subitum [sixth disease], unspecified -B0821 Exanthema subitum [sixth disease] due to human herpesvirus 6 -B0822 Exanthema subitum [sixth disease] due to human herpesvirus 7 -B083 Erythema infectiosum [fifth disease] -B084 Enteroviral vesicular stomatitis with exanthem -B085 Enteroviral vesicular pharyngitis -B0860 Parapoxvirus infection, unspecified -B0861 Bovine stomatitis -B0862 Sealpox -B0869 Other parapoxvirus infections -B0870 Yatapoxvirus infection, unspecified -B0871 Tanapox virus disease -B0872 Yaba pox virus disease -B0879 Other yatapoxvirus infections -B088 Other specified viral infections characterized by skin and mucous membrane lesions -B09 Unspecified viral infection characterized by skin and mucous membrane lesions -B1001 Human herpesvirus 6 encephalitis -B1009 Other human herpesvirus encephalitis -B1081 Human herpesvirus 6 infection -B1082 Human herpesvirus 7 infection -B1089 Other human herpesvirus infection -B150 Hepatitis A with hepatic coma -B159 Hepatitis A without hepatic coma -B160 Acute hepatitis B with delta-agent with hepatic coma -B161 Acute hepatitis B with delta-agent without hepatic coma -B162 Acute hepatitis B without delta-agent with hepatic coma -B169 Acute hepatitis B without delta-agent and without hepatic coma -B170 Acute delta-(super) infection of hepatitis B carrier -B1710 Acute hepatitis C without hepatic coma -B1711 Acute hepatitis C with hepatic coma -B172 Acute hepatitis E -B178 Other specified acute viral hepatitis -B179 Acute viral hepatitis, unspecified -B180 Chronic viral hepatitis B with delta-agent -B181 Chronic viral hepatitis B without delta-agent -B182 Chronic viral hepatitis C -B188 Other chronic viral hepatitis -B189 Chronic viral hepatitis, unspecified -B190 Unspecified viral hepatitis with hepatic coma -B1910 Unspecified viral hepatitis B without hepatic coma -B1911 Unspecified viral hepatitis B with hepatic coma -B1920 Unspecified viral hepatitis C without hepatic coma -B1921 Unspecified viral hepatitis C with hepatic coma -B199 Unspecified viral hepatitis without hepatic coma -B20 Human immunodeficiency virus [HIV] disease -B250 Cytomegaloviral pneumonitis -B251 Cytomegaloviral hepatitis -B252 Cytomegaloviral pancreatitis -B258 Other cytomegaloviral diseases -B259 Cytomegaloviral disease, unspecified -B260 Mumps orchitis -B261 Mumps meningitis -B262 Mumps encephalitis -B263 Mumps pancreatitis -B2681 Mumps hepatitis -B2682 Mumps myocarditis -B2683 Mumps nephritis -B2684 Mumps polyneuropathy -B2685 Mumps arthritis -B2689 Other mumps complications -B269 Mumps without complication -B2700 Gammaherpesviral mononucleosis without complication -B2701 Gammaherpesviral mononucleosis with polyneuropathy -B2702 Gammaherpesviral mononucleosis with meningitis -B2709 Gammaherpesviral mononucleosis with other complications -B2710 Cytomegaloviral mononucleosis without complications -B2711 Cytomegaloviral mononucleosis with polyneuropathy -B2712 Cytomegaloviral mononucleosis with meningitis -B2719 Cytomegaloviral mononucleosis with other complication -B2780 Other infectious mononucleosis without complication -B2781 Other infectious mononucleosis with polyneuropathy -B2782 Other infectious mononucleosis with meningitis -B2789 Other infectious mononucleosis with other complication -B2790 Infectious mononucleosis, unspecified without complication -B2791 Infectious mononucleosis, unspecified with polyneuropathy -B2792 Infectious mononucleosis, unspecified with meningitis -B2799 Infectious mononucleosis, unspecified with other complication -B300 Keratoconjunctivitis due to adenovirus -B301 Conjunctivitis due to adenovirus -B302 Viral pharyngoconjunctivitis -B303 Acute epidemic hemorrhagic conjunctivitis (enteroviral) -B308 Other viral conjunctivitis -B309 Viral conjunctivitis, unspecified -B330 Epidemic myalgia -B331 Ross River disease -B3320 Viral carditis, unspecified -B3321 Viral endocarditis -B3322 Viral myocarditis -B3323 Viral pericarditis -B3324 Viral cardiomyopathy -B333 Retrovirus infections, not elsewhere classified -B334 Hantavirus (cardio)-pulmonary syndrome [HPS] [HCPS] -B338 Other specified viral diseases -B340 Adenovirus infection, unspecified -B341 Enterovirus infection, unspecified -B342 Coronavirus infection, unspecified -B343 Parvovirus infection, unspecified -B344 Papovavirus infection, unspecified -B348 Other viral infections of unspecified site -B349 Viral infection, unspecified -B350 Tinea barbae and tinea capitis -B351 Tinea unguium -B352 Tinea manuum -B353 Tinea pedis -B354 Tinea corporis -B355 Tinea imbricata -B356 Tinea cruris -B358 Other dermatophytoses -B359 Dermatophytosis, unspecified -B360 Pityriasis versicolor -B361 Tinea nigra -B362 White piedra -B363 Black piedra -B368 Other specified superficial mycoses -B369 Superficial mycosis, unspecified -B370 Candidal stomatitis -B371 Pulmonary candidiasis -B372 Candidiasis of skin and nail -B373 Candidiasis of vulva and vagina -B3741 Candidal cystitis and urethritis -B3742 Candidal balanitis -B3749 Other urogenital candidiasis -B375 Candidal meningitis -B376 Candidal endocarditis -B377 Candidal sepsis -B3781 Candidal esophagitis -B3782 Candidal enteritis -B3783 Candidal cheilitis -B3784 Candidal otitis externa -B3789 Other sites of candidiasis -B379 Candidiasis, unspecified -B380 Acute pulmonary coccidioidomycosis -B381 Chronic pulmonary coccidioidomycosis -B382 Pulmonary coccidioidomycosis, unspecified -B383 Cutaneous coccidioidomycosis -B384 Coccidioidomycosis meningitis -B387 Disseminated coccidioidomycosis -B3881 Prostatic coccidioidomycosis -B3889 Other forms of coccidioidomycosis -B389 Coccidioidomycosis, unspecified -B390 Acute pulmonary histoplasmosis capsulati -B391 Chronic pulmonary histoplasmosis capsulati -B392 Pulmonary histoplasmosis capsulati, unspecified -B393 Disseminated histoplasmosis capsulati -B394 Histoplasmosis capsulati, unspecified -B395 Histoplasmosis duboisii -B399 Histoplasmosis, unspecified -B400 Acute pulmonary blastomycosis -B401 Chronic pulmonary blastomycosis -B402 Pulmonary blastomycosis, unspecified -B403 Cutaneous blastomycosis -B407 Disseminated blastomycosis -B4081 Blastomycotic meningoencephalitis -B4089 Other forms of blastomycosis -B409 Blastomycosis, unspecified -B410 Pulmonary paracoccidioidomycosis -B417 Disseminated paracoccidioidomycosis -B418 Other forms of paracoccidioidomycosis -B419 Paracoccidioidomycosis, unspecified -B420 Pulmonary sporotrichosis -B421 Lymphocutaneous sporotrichosis -B427 Disseminated sporotrichosis -B4281 Cerebral sporotrichosis -B4282 Sporotrichosis arthritis -B4289 Other forms of sporotrichosis -B429 Sporotrichosis, unspecified -B430 Cutaneous chromomycosis -B431 Pheomycotic brain abscess -B432 Subcutaneous pheomycotic abscess and cyst -B438 Other forms of chromomycosis -B439 Chromomycosis, unspecified -B440 Invasive pulmonary aspergillosis -B441 Other pulmonary aspergillosis -B442 Tonsillar aspergillosis -B447 Disseminated aspergillosis -B4481 Allergic bronchopulmonary aspergillosis -B4489 Other forms of aspergillosis -B449 Aspergillosis, unspecified -B450 Pulmonary cryptococcosis -B451 Cerebral cryptococcosis -B452 Cutaneous cryptococcosis -B453 Osseous cryptococcosis -B457 Disseminated cryptococcosis -B458 Other forms of cryptococcosis -B459 Cryptococcosis, unspecified -B460 Pulmonary mucormycosis -B461 Rhinocerebral mucormycosis -B462 Gastrointestinal mucormycosis -B463 Cutaneous mucormycosis -B464 Disseminated mucormycosis -B465 Mucormycosis, unspecified -B468 Other zygomycoses -B469 Zygomycosis, unspecified -B470 Eumycetoma -B471 Actinomycetoma -B479 Mycetoma, unspecified -B480 Lobomycosis -B481 Rhinosporidiosis -B482 Allescheriasis -B483 Geotrichosis -B484 Penicillosis -B488 Other specified mycoses -B49 Unspecified mycosis -B500 Plasmodium falciparum malaria with cerebral complications -B508 Other severe and complicated Plasmodium falciparum malaria -B509 Plasmodium falciparum malaria, unspecified -B510 Plasmodium vivax malaria with rupture of spleen -B518 Plasmodium vivax malaria with other complications -B519 Plasmodium vivax malaria without complication -B520 Plasmodium malariae malaria with nephropathy -B528 Plasmodium malariae malaria with other complications -B529 Plasmodium malariae malaria without complication -B530 Plasmodium ovale malaria -B531 Malaria due to simian plasmodia -B538 Other malaria, not elsewhere classified -B54 Unspecified malaria -B550 Visceral leishmaniasis -B551 Cutaneous leishmaniasis -B552 Mucocutaneous leishmaniasis -B559 Leishmaniasis, unspecified -B560 Gambiense trypanosomiasis -B561 Rhodesiense trypanosomiasis -B569 African trypanosomiasis, unspecified -B570 Acute Chagas' disease with heart involvement -B571 Acute Chagas' disease without heart involvement -B572 Chagas' disease (chronic) with heart involvement -B5730 Chagas' disease with digestive system involvement, unspecified -B5731 Megaesophagus in Chagas' disease -B5732 Megacolon in Chagas' disease -B5739 Other digestive system involvement in Chagas' disease -B5740 Chagas' disease with nervous system involvement, unspecified -B5741 Meningitis in Chagas' disease -B5742 Meningoencephalitis in Chagas' disease -B5749 Other nervous system involvement in Chagas' disease -B575 Chagas' disease (chronic) with other organ involvement -B5800 Toxoplasma oculopathy, unspecified -B5801 Toxoplasma chorioretinitis -B5809 Other toxoplasma oculopathy -B581 Toxoplasma hepatitis -B582 Toxoplasma meningoencephalitis -B583 Pulmonary toxoplasmosis -B5881 Toxoplasma myocarditis -B5882 Toxoplasma myositis -B5883 Toxoplasma tubulo-interstitial nephropathy -B5889 Toxoplasmosis with other organ involvement -B589 Toxoplasmosis, unspecified -B59 Pneumocystosis -B600 Babesiosis -B6010 Acanthamebiasis, unspecified -B6011 Meningoencephalitis due to Acanthamoeba (culbertsoni) -B6012 Conjunctivitis due to Acanthamoeba -B6013 Keratoconjunctivitis due to Acanthamoeba -B6019 Other acanthamebic disease -B602 Naegleriasis -B608 Other specified protozoal diseases -B64 Unspecified protozoal disease -B650 Schistosomiasis due to Schistosoma haematobium [urinary schistosomiasis] -B651 Schistosomiasis due to Schistosoma mansoni [intestinal schistosomiasis] -B652 Schistosomiasis due to Schistosoma japonicum -B653 Cercarial dermatitis -B658 Other schistosomiasis -B659 Schistosomiasis, unspecified -B660 Opisthorchiasis -B661 Clonorchiasis -B662 Dicroceliasis -B663 Fascioliasis -B664 Paragonimiasis -B665 Fasciolopsiasis -B668 Other specified fluke infections -B669 Fluke infection, unspecified -B670 Echinococcus granulosus infection of liver -B671 Echinococcus granulosus infection of lung -B672 Echinococcus granulosus infection of bone -B6731 Echinococcus granulosus infection, thyroid gland -B6732 Echinococcus granulosus infection, multiple sites -B6739 Echinococcus granulosus infection, other sites -B674 Echinococcus granulosus infection, unspecified -B675 Echinococcus multilocularis infection of liver -B6761 Echinococcus multilocularis infection, multiple sites -B6769 Echinococcus multilocularis infection, other sites -B677 Echinococcus multilocularis infection, unspecified -B678 Echinococcosis, unspecified, of liver -B6790 Echinococcosis, unspecified -B6799 Other echinococcosis -B680 Taenia solium taeniasis -B681 Taenia saginata taeniasis -B689 Taeniasis, unspecified -B690 Cysticercosis of central nervous system -B691 Cysticercosis of eye -B6981 Myositis in cysticercosis -B6989 Cysticercosis of other sites -B699 Cysticercosis, unspecified -B700 Diphyllobothriasis -B701 Sparganosis -B710 Hymenolepiasis -B711 Dipylidiasis -B718 Other specified cestode infections -B719 Cestode infection, unspecified -B72 Dracunculiasis -B7300 Onchocerciasis with eye involvement, unspecified -B7301 Onchocerciasis with endophthalmitis -B7302 Onchocerciasis with glaucoma -B7309 Onchocerciasis with other eye involvement -B731 Onchocerciasis without eye disease -B740 Filariasis due to Wuchereria bancrofti -B741 Filariasis due to Brugia malayi -B742 Filariasis due to Brugia timori -B743 Loiasis -B744 Mansonelliasis -B748 Other filariases -B749 Filariasis, unspecified -B75 Trichinellosis -B760 Ancylostomiasis -B761 Necatoriasis -B768 Other hookworm diseases -B769 Hookworm disease, unspecified -B770 Ascariasis with intestinal complications -B7781 Ascariasis pneumonia -B7789 Ascariasis with other complications -B779 Ascariasis, unspecified -B780 Intestinal strongyloidiasis -B781 Cutaneous strongyloidiasis -B787 Disseminated strongyloidiasis -B789 Strongyloidiasis, unspecified -B79 Trichuriasis -B80 Enterobiasis -B810 Anisakiasis -B811 Intestinal capillariasis -B812 Trichostrongyliasis -B813 Intestinal angiostrongyliasis -B814 Mixed intestinal helminthiases -B818 Other specified intestinal helminthiases -B820 Intestinal helminthiasis, unspecified -B829 Intestinal parasitism, unspecified -B830 Visceral larva migrans -B831 Gnathostomiasis -B832 Angiostrongyliasis due to Parastrongylus cantonensis -B833 Syngamiasis -B834 Internal hirudiniasis -B838 Other specified helminthiases -B839 Helminthiasis, unspecified -B850 Pediculosis due to Pediculus humanus capitis -B851 Pediculosis due to Pediculus humanus corporis -B852 Pediculosis, unspecified -B853 Phthiriasis -B854 Mixed pediculosis and phthiriasis -B86 Scabies -B870 Cutaneous myiasis -B871 Wound myiasis -B872 Ocular myiasis -B873 Nasopharyngeal myiasis -B874 Aural myiasis -B8781 Genitourinary myiasis -B8782 Intestinal myiasis -B8789 Myiasis of other sites -B879 Myiasis, unspecified -B880 Other acariasis -B881 Tungiasis [sandflea infestation] -B882 Other arthropod infestations -B883 External hirudiniasis -B888 Other specified infestations -B889 Infestation, unspecified -B89 Unspecified parasitic disease -B900 Sequelae of central nervous system tuberculosis -B901 Sequelae of genitourinary tuberculosis -B902 Sequelae of tuberculosis of bones and joints -B908 Sequelae of tuberculosis of other organs -B909 Sequelae of respiratory and unspecified tuberculosis -B91 Sequelae of poliomyelitis -B92 Sequelae of leprosy -B940 Sequelae of trachoma -B941 Sequelae of viral encephalitis -B942 Sequelae of viral hepatitis -B948 Sequelae of other specified infectious and parasitic diseases -B949 Sequelae of unspecified infectious and parasitic disease -B950 Streptococcus, group A, as the cause of diseases classified elsewhere -B951 Streptococcus, group B, as the cause of diseases classified elsewhere -B952 Enterococcus as the cause of diseases classified elsewhere -B953 Streptococcus pneumoniae as the cause of diseases classified elsewhere -B954 Other streptococcus as the cause of diseases classified elsewhere -B955 Unspecified streptococcus as the cause of diseases classified elsewhere -B9561 Methicillin susceptible Staphylococcus aureus infection as the cause of diseases classified elsewhere -B9562 Methicillin resistant Staphylococcus aureus infection as the cause of diseases classified elsewhere -B957 Other staphylococcus as the cause of diseases classified elsewhere -B958 Unspecified staphylococcus as the cause of diseases classified elsewhere -B960 Mycoplasma pneumoniae [M. pneumoniae] as the cause of diseases classified elsewhere -B961 Klebsiella pneumoniae [K. pneumoniae] as the cause of diseases classified elsewhere -B9620 Unspecified Escherichia coli [E. coli] as the cause of diseases classified elsewhere -B9621 Shiga toxin-producing Escherichia coli [E. coli] (STEC) O157 as the cause of diseases classified elsewhere -B9622 Other specified Shiga toxin-producing Escherichia coli [E. coli] (STEC) as the cause of diseases classified elsewhere -B9623 Unspecified Shiga toxin-producing Escherichia coli [E. coli] (STEC) as the cause of diseases classified elsewhere -B9629 Other Escherichia coli [E. coli] as the cause of diseases classified elsewhere -B963 Hemophilus influenzae [H. influenzae] as the cause of diseases classified elsewhere -B964 Proteus (mirabilis) (morganii) as the cause of diseases classified elsewhere -B965 Pseudomonas (aeruginosa) (mallei) (pseudomallei) as the cause of diseases classified elsewhere -B966 Bacteroides fragilis [B. fragilis] as the cause of diseases classified elsewhere -B967 Clostridium perfringens [C. perfringens] as the cause of diseases classified elsewhere -B9681 Helicobacter pylori [H. pylori] as the cause of diseases classified elsewhere -B9682 Vibrio vulnificus as the cause of diseases classified elsewhere -B9689 Other specified bacterial agents as the cause of diseases classified elsewhere -B970 Adenovirus as the cause of diseases classified elsewhere -B9710 Unspecified enterovirus as the cause of diseases classified elsewhere -B9711 Coxsackievirus as the cause of diseases classified elsewhere -B9712 Echovirus as the cause of diseases classified elsewhere -B9719 Other enterovirus as the cause of diseases classified elsewhere -B9721 SARS-associated coronavirus as the cause of diseases classified elsewhere -B9729 Other coronavirus as the cause of diseases classified elsewhere -B9730 Unspecified retrovirus as the cause of diseases classified elsewhere -B9731 Lentivirus as the cause of diseases classified elsewhere -B9732 Oncovirus as the cause of diseases classified elsewhere -B9733 Human T-cell lymphotrophic virus, type I [HTLV-I] as the cause of diseases classified elsewhere -B9734 Human T-cell lymphotrophic virus, type II [HTLV-II] as the cause of diseases classified elsewhere -B9735 Human immunodeficiency virus, type 2 [HIV 2] as the cause of diseases classified elsewhere -B9739 Other retrovirus as the cause of diseases classified elsewhere -B974 Respiratory syncytial virus as the cause of diseases classified elsewhere -B975 Reovirus as the cause of diseases classified elsewhere -B976 Parvovirus as the cause of diseases classified elsewhere -B977 Papillomavirus as the cause of diseases classified elsewhere -B9781 Human metapneumovirus as the cause of diseases classified elsewhere -B9789 Other viral agents as the cause of diseases classified elsewhere -B998 Other infectious disease -B999 Unspecified infectious disease -C000 Malignant neoplasm of external upper lip -C001 Malignant neoplasm of external lower lip -C002 Malignant neoplasm of external lip, unspecified -C003 Malignant neoplasm of upper lip, inner aspect -C004 Malignant neoplasm of lower lip, inner aspect -C005 Malignant neoplasm of lip, unspecified, inner aspect -C006 Malignant neoplasm of commissure of lip, unspecified -C008 Malignant neoplasm of overlapping sites of lip -C009 Malignant neoplasm of lip, unspecified -C01 Malignant neoplasm of base of tongue -C020 Malignant neoplasm of dorsal surface of tongue -C021 Malignant neoplasm of border of tongue -C022 Malignant neoplasm of ventral surface of tongue -C023 Malignant neoplasm of anterior two-thirds of tongue, part unspecified -C024 Malignant neoplasm of lingual tonsil -C028 Malignant neoplasm of overlapping sites of tongue -C029 Malignant neoplasm of tongue, unspecified -C030 Malignant neoplasm of upper gum -C031 Malignant neoplasm of lower gum -C039 Malignant neoplasm of gum, unspecified -C040 Malignant neoplasm of anterior floor of mouth -C041 Malignant neoplasm of lateral floor of mouth -C048 Malignant neoplasm of overlapping sites of floor of mouth -C049 Malignant neoplasm of floor of mouth, unspecified -C050 Malignant neoplasm of hard palate -C051 Malignant neoplasm of soft palate -C052 Malignant neoplasm of uvula -C058 Malignant neoplasm of overlapping sites of palate -C059 Malignant neoplasm of palate, unspecified -C060 Malignant neoplasm of cheek mucosa -C061 Malignant neoplasm of vestibule of mouth -C062 Malignant neoplasm of retromolar area -C0680 Malignant neoplasm of overlapping sites of unspecified parts of mouth -C0689 Malignant neoplasm of overlapping sites of other parts of mouth -C069 Malignant neoplasm of mouth, unspecified -C07 Malignant neoplasm of parotid gland -C080 Malignant neoplasm of submandibular gland -C081 Malignant neoplasm of sublingual gland -C089 Malignant neoplasm of major salivary gland, unspecified -C090 Malignant neoplasm of tonsillar fossa -C091 Malignant neoplasm of tonsillar pillar (anterior) (posterior) -C098 Malignant neoplasm of overlapping sites of tonsil -C099 Malignant neoplasm of tonsil, unspecified -C100 Malignant neoplasm of vallecula -C101 Malignant neoplasm of anterior surface of epiglottis -C102 Malignant neoplasm of lateral wall of oropharynx -C103 Malignant neoplasm of posterior wall of oropharynx -C104 Malignant neoplasm of branchial cleft -C108 Malignant neoplasm of overlapping sites of oropharynx -C109 Malignant neoplasm of oropharynx, unspecified -C110 Malignant neoplasm of superior wall of nasopharynx -C111 Malignant neoplasm of posterior wall of nasopharynx -C112 Malignant neoplasm of lateral wall of nasopharynx -C113 Malignant neoplasm of anterior wall of nasopharynx -C118 Malignant neoplasm of overlapping sites of nasopharynx -C119 Malignant neoplasm of nasopharynx, unspecified -C12 Malignant neoplasm of pyriform sinus -C130 Malignant neoplasm of postcricoid region -C131 Malignant neoplasm of aryepiglottic fold, hypopharyngeal aspect -C132 Malignant neoplasm of posterior wall of hypopharynx -C138 Malignant neoplasm of overlapping sites of hypopharynx -C139 Malignant neoplasm of hypopharynx, unspecified -C140 Malignant neoplasm of pharynx, unspecified -C142 Malignant neoplasm of Waldeyer's ring -C148 Malignant neoplasm of overlapping sites of lip, oral cavity and pharynx -C153 Malignant neoplasm of upper third of esophagus -C154 Malignant neoplasm of middle third of esophagus -C155 Malignant neoplasm of lower third of esophagus -C158 Malignant neoplasm of overlapping sites of esophagus -C159 Malignant neoplasm of esophagus, unspecified -C160 Malignant neoplasm of cardia -C161 Malignant neoplasm of fundus of stomach -C162 Malignant neoplasm of body of stomach -C163 Malignant neoplasm of pyloric antrum -C164 Malignant neoplasm of pylorus -C165 Malignant neoplasm of lesser curvature of stomach, unspecified -C166 Malignant neoplasm of greater curvature of stomach, unspecified -C168 Malignant neoplasm of overlapping sites of stomach -C169 Malignant neoplasm of stomach, unspecified -C170 Malignant neoplasm of duodenum -C171 Malignant neoplasm of jejunum -C172 Malignant neoplasm of ileum -C173 Meckel's diverticulum, malignant -C178 Malignant neoplasm of overlapping sites of small intestine -C179 Malignant neoplasm of small intestine, unspecified -C180 Malignant neoplasm of cecum -C181 Malignant neoplasm of appendix -C182 Malignant neoplasm of ascending colon -C183 Malignant neoplasm of hepatic flexure -C184 Malignant neoplasm of transverse colon -C185 Malignant neoplasm of splenic flexure -C186 Malignant neoplasm of descending colon -C187 Malignant neoplasm of sigmoid colon -C188 Malignant neoplasm of overlapping sites of colon -C189 Malignant neoplasm of colon, unspecified -C19 Malignant neoplasm of rectosigmoid junction -C20 Malignant neoplasm of rectum -C210 Malignant neoplasm of anus, unspecified -C211 Malignant neoplasm of anal canal -C212 Malignant neoplasm of cloacogenic zone -C218 Malignant neoplasm of overlapping sites of rectum, anus and anal canal -C220 Liver cell carcinoma -C221 Intrahepatic bile duct carcinoma -C222 Hepatoblastoma -C223 Angiosarcoma of liver -C224 Other sarcomas of liver -C227 Other specified carcinomas of liver -C228 Malignant neoplasm of liver, primary, unspecified as to type -C229 Malignant neoplasm of liver, not specified as primary or secondary -C23 Malignant neoplasm of gallbladder -C240 Malignant neoplasm of extrahepatic bile duct -C241 Malignant neoplasm of ampulla of Vater -C248 Malignant neoplasm of overlapping sites of biliary tract -C249 Malignant neoplasm of biliary tract, unspecified -C250 Malignant neoplasm of head of pancreas -C251 Malignant neoplasm of body of pancreas -C252 Malignant neoplasm of tail of pancreas -C253 Malignant neoplasm of pancreatic duct -C254 Malignant neoplasm of endocrine pancreas -C257 Malignant neoplasm of other parts of pancreas -C258 Malignant neoplasm of overlapping sites of pancreas -C259 Malignant neoplasm of pancreas, unspecified -C260 Malignant neoplasm of intestinal tract, part unspecified -C261 Malignant neoplasm of spleen -C269 Malignant neoplasm of ill-defined sites within the digestive system -C300 Malignant neoplasm of nasal cavity -C301 Malignant neoplasm of middle ear -C310 Malignant neoplasm of maxillary sinus -C311 Malignant neoplasm of ethmoidal sinus -C312 Malignant neoplasm of frontal sinus -C313 Malignant neoplasm of sphenoid sinus -C318 Malignant neoplasm of overlapping sites of accessory sinuses -C319 Malignant neoplasm of accessory sinus, unspecified -C320 Malignant neoplasm of glottis -C321 Malignant neoplasm of supraglottis -C322 Malignant neoplasm of subglottis -C323 Malignant neoplasm of laryngeal cartilage -C328 Malignant neoplasm of overlapping sites of larynx -C329 Malignant neoplasm of larynx, unspecified -C33 Malignant neoplasm of trachea -C3400 Malignant neoplasm of unspecified main bronchus -C3401 Malignant neoplasm of right main bronchus -C3402 Malignant neoplasm of left main bronchus -C3410 Malignant neoplasm of upper lobe, unspecified bronchus or lung -C3411 Malignant neoplasm of upper lobe, right bronchus or lung -C3412 Malignant neoplasm of upper lobe, left bronchus or lung -C342 Malignant neoplasm of middle lobe, bronchus or lung -C3430 Malignant neoplasm of lower lobe, unspecified bronchus or lung -C3431 Malignant neoplasm of lower lobe, right bronchus or lung -C3432 Malignant neoplasm of lower lobe, left bronchus or lung -C3480 Malignant neoplasm of overlapping sites of unspecified bronchus and lung -C3481 Malignant neoplasm of overlapping sites of right bronchus and lung -C3482 Malignant neoplasm of overlapping sites of left bronchus and lung -C3490 Malignant neoplasm of unspecified part of unspecified bronchus or lung -C3491 Malignant neoplasm of unspecified part of right bronchus or lung -C3492 Malignant neoplasm of unspecified part of left bronchus or lung -C37 Malignant neoplasm of thymus -C380 Malignant neoplasm of heart -C381 Malignant neoplasm of anterior mediastinum -C382 Malignant neoplasm of posterior mediastinum -C383 Malignant neoplasm of mediastinum, part unspecified -C384 Malignant neoplasm of pleura -C388 Malignant neoplasm of overlapping sites of heart, mediastinum and pleura -C390 Malignant neoplasm of upper respiratory tract, part unspecified -C399 Malignant neoplasm of lower respiratory tract, part unspecified -C4000 Malignant neoplasm of scapula and long bones of unspecified upper limb -C4001 Malignant neoplasm of scapula and long bones of right upper limb -C4002 Malignant neoplasm of scapula and long bones of left upper limb -C4010 Malignant neoplasm of short bones of unspecified upper limb -C4011 Malignant neoplasm of short bones of right upper limb -C4012 Malignant neoplasm of short bones of left upper limb -C4020 Malignant neoplasm of long bones of unspecified lower limb -C4021 Malignant neoplasm of long bones of right lower limb -C4022 Malignant neoplasm of long bones of left lower limb -C4030 Malignant neoplasm of short bones of unspecified lower limb -C4031 Malignant neoplasm of short bones of right lower limb -C4032 Malignant neoplasm of short bones of left lower limb -C4080 Malignant neoplasm of overlapping sites of bone and articular cartilage of unspecified limb -C4081 Malignant neoplasm of overlapping sites of bone and articular cartilage of right limb -C4082 Malignant neoplasm of overlapping sites of bone and articular cartilage of left limb -C4090 Malignant neoplasm of unspecified bones and articular cartilage of unspecified limb -C4091 Malignant neoplasm of unspecified bones and articular cartilage of right limb -C4092 Malignant neoplasm of unspecified bones and articular cartilage of left limb -C410 Malignant neoplasm of bones of skull and face -C411 Malignant neoplasm of mandible -C412 Malignant neoplasm of vertebral column -C413 Malignant neoplasm of ribs, sternum and clavicle -C414 Malignant neoplasm of pelvic bones, sacrum and coccyx -C419 Malignant neoplasm of bone and articular cartilage, unspecified -C430 Malignant melanoma of lip -C4310 Malignant melanoma of unspecified eyelid, including canthus -C4311 Malignant melanoma of right eyelid, including canthus -C4312 Malignant melanoma of left eyelid, including canthus -C4320 Malignant melanoma of unspecified ear and external auricular canal -C4321 Malignant melanoma of right ear and external auricular canal -C4322 Malignant melanoma of left ear and external auricular canal -C4330 Malignant melanoma of unspecified part of face -C4331 Malignant melanoma of nose -C4339 Malignant melanoma of other parts of face -C434 Malignant melanoma of scalp and neck -C4351 Malignant melanoma of anal skin -C4352 Malignant melanoma of skin of breast -C4359 Malignant melanoma of other part of trunk -C4360 Malignant melanoma of unspecified upper limb, including shoulder -C4361 Malignant melanoma of right upper limb, including shoulder -C4362 Malignant melanoma of left upper limb, including shoulder -C4370 Malignant melanoma of unspecified lower limb, including hip -C4371 Malignant melanoma of right lower limb, including hip -C4372 Malignant melanoma of left lower limb, including hip -C438 Malignant melanoma of overlapping sites of skin -C439 Malignant melanoma of skin, unspecified -C4A0 Merkel cell carcinoma of lip -C4A10 Merkel cell carcinoma of unspecified eyelid, including canthus -C4A11 Merkel cell carcinoma of right eyelid, including canthus -C4A12 Merkel cell carcinoma of left eyelid, including canthus -C4A20 Merkel cell carcinoma of unspecified ear and external auricular canal -C4A21 Merkel cell carcinoma of right ear and external auricular canal -C4A22 Merkel cell carcinoma of left ear and external auricular canal -C4A30 Merkel cell carcinoma of unspecified part of face -C4A31 Merkel cell carcinoma of nose -C4A39 Merkel cell carcinoma of other parts of face -C4A4 Merkel cell carcinoma of scalp and neck -C4A51 Merkel cell carcinoma of anal skin -C4A52 Merkel cell carcinoma of skin of breast -C4A59 Merkel cell carcinoma of other part of trunk -C4A60 Merkel cell carcinoma of unspecified upper limb, including shoulder -C4A61 Merkel cell carcinoma of right upper limb, including shoulder -C4A62 Merkel cell carcinoma of left upper limb, including shoulder -C4A70 Merkel cell carcinoma of unspecified lower limb, including hip -C4A71 Merkel cell carcinoma of right lower limb, including hip -C4A72 Merkel cell carcinoma of left lower limb, including hip -C4A8 Merkel cell carcinoma of overlapping sites -C4A9 Merkel cell carcinoma, unspecified -C4400 Unspecified malignant neoplasm of skin of lip -C4401 Basal cell carcinoma of skin of lip -C4402 Squamous cell carcinoma of skin of lip -C4409 Other specified malignant neoplasm of skin of lip -C44101 Unspecified malignant neoplasm of skin of unspecified eyelid, including canthus -C44102 Unspecified malignant neoplasm of skin of right eyelid, including canthus -C44109 Unspecified malignant neoplasm of skin of left eyelid, including canthus -C44111 Basal cell carcinoma of skin of unspecified eyelid, including canthus -C44112 Basal cell carcinoma of skin of right eyelid, including canthus -C44119 Basal cell carcinoma of skin of left eyelid, including canthus -C44121 Squamous cell carcinoma of skin of unspecified eyelid, including canthus -C44122 Squamous cell carcinoma of skin of right eyelid, including canthus -C44129 Squamous cell carcinoma of skin of left eyelid, including canthus -C44191 Other specified malignant neoplasm of skin of unspecified eyelid, including canthus -C44192 Other specified malignant neoplasm of skin of right eyelid, including canthus -C44199 Other specified malignant neoplasm of skin of left eyelid, including canthus -C44201 Unspecified malignant neoplasm of skin of unspecified ear and external auricular canal -C44202 Unspecified malignant neoplasm of skin of right ear and external auricular canal -C44209 Unspecified malignant neoplasm of skin of left ear and external auricular canal -C44211 Basal cell carcinoma of skin of unspecified ear and external auricular canal -C44212 Basal cell carcinoma of skin of right ear and external auricular canal -C44219 Basal cell carcinoma of skin of left ear and external auricular canal -C44221 Squamous cell carcinoma of skin of unspecified ear and external auricular canal -C44222 Squamous cell carcinoma of skin of right ear and external auricular canal -C44229 Squamous cell carcinoma of skin of left ear and external auricular canal -C44291 Other specified malignant neoplasm of skin of unspecified ear and external auricular canal -C44292 Other specified malignant neoplasm of skin of right ear and external auricular canal -C44299 Other specified malignant neoplasm of skin of left ear and external auricular canal -C44300 Unspecified malignant neoplasm of skin of unspecified part of face -C44301 Unspecified malignant neoplasm of skin of nose -C44309 Unspecified malignant neoplasm of skin of other parts of face -C44310 Basal cell carcinoma of skin of unspecified parts of face -C44311 Basal cell carcinoma of skin of nose -C44319 Basal cell carcinoma of skin of other parts of face -C44320 Squamous cell carcinoma of skin of unspecified parts of face -C44321 Squamous cell carcinoma of skin of nose -C44329 Squamous cell carcinoma of skin of other parts of face -C44390 Other specified malignant neoplasm of skin of unspecified parts of face -C44391 Other specified malignant neoplasm of skin of nose -C44399 Other specified malignant neoplasm of skin of other parts of face -C4440 Unspecified malignant neoplasm of skin of scalp and neck -C4441 Basal cell carcinoma of skin of scalp and neck -C4442 Squamous cell carcinoma of skin of scalp and neck -C4449 Other specified malignant neoplasm of skin of scalp and neck -C44500 Unspecified malignant neoplasm of anal skin -C44501 Unspecified malignant neoplasm of skin of breast -C44509 Unspecified malignant neoplasm of skin of other part of trunk -C44510 Basal cell carcinoma of anal skin -C44511 Basal cell carcinoma of skin of breast -C44519 Basal cell carcinoma of skin of other part of trunk -C44520 Squamous cell carcinoma of anal skin -C44521 Squamous cell carcinoma of skin of breast -C44529 Squamous cell carcinoma of skin of other part of trunk -C44590 Other specified malignant neoplasm of anal skin -C44591 Other specified malignant neoplasm of skin of breast -C44599 Other specified malignant neoplasm of skin of other part of trunk -C44601 Unspecified malignant neoplasm of skin of unspecified upper limb, including shoulder -C44602 Unspecified malignant neoplasm of skin of right upper limb, including shoulder -C44609 Unspecified malignant neoplasm of skin of left upper limb, including shoulder -C44611 Basal cell carcinoma of skin of unspecified upper limb, including shoulder -C44612 Basal cell carcinoma of skin of right upper limb, including shoulder -C44619 Basal cell carcinoma of skin of left upper limb, including shoulder -C44621 Squamous cell carcinoma of skin of unspecified upper limb, including shoulder -C44622 Squamous cell carcinoma of skin of right upper limb, including shoulder -C44629 Squamous cell carcinoma of skin of left upper limb, including shoulder -C44691 Other specified malignant neoplasm of skin of unspecified upper limb, including shoulder -C44692 Other specified malignant neoplasm of skin of right upper limb, including shoulder -C44699 Other specified malignant neoplasm of skin of left upper limb, including shoulder -C44701 Unspecified malignant neoplasm of skin of unspecified lower limb, including hip -C44702 Unspecified malignant neoplasm of skin of right lower limb, including hip -C44709 Unspecified malignant neoplasm of skin of left lower limb, including hip -C44711 Basal cell carcinoma of skin of unspecified lower limb, including hip -C44712 Basal cell carcinoma of skin of right lower limb, including hip -C44719 Basal cell carcinoma of skin of left lower limb, including hip -C44721 Squamous cell carcinoma of skin of unspecified lower limb, including hip -C44722 Squamous cell carcinoma of skin of right lower limb, including hip -C44729 Squamous cell carcinoma of skin of left lower limb, including hip -C44791 Other specified malignant neoplasm of skin of unspecified lower limb, including hip -C44792 Other specified malignant neoplasm of skin of right lower limb, including hip -C44799 Other specified malignant neoplasm of skin of left lower limb, including hip -C4480 Unspecified malignant neoplasm of overlapping sites of skin -C4481 Basal cell carcinoma of overlapping sites of skin -C4482 Squamous cell carcinoma of overlapping sites of skin -C4489 Other specified malignant neoplasm of overlapping sites of skin -C4490 Unspecified malignant neoplasm of skin, unspecified -C4491 Basal cell carcinoma of skin, unspecified -C4492 Squamous cell carcinoma of skin, unspecified -C4499 Other specified malignant neoplasm of skin, unspecified -C450 Mesothelioma of pleura -C451 Mesothelioma of peritoneum -C452 Mesothelioma of pericardium -C457 Mesothelioma of other sites -C459 Mesothelioma, unspecified -C460 Kaposi's sarcoma of skin -C461 Kaposi's sarcoma of soft tissue -C462 Kaposi's sarcoma of palate -C463 Kaposi's sarcoma of lymph nodes -C464 Kaposi's sarcoma of gastrointestinal sites -C4650 Kaposi's sarcoma of unspecified lung -C4651 Kaposi's sarcoma of right lung -C4652 Kaposi's sarcoma of left lung -C467 Kaposi's sarcoma of other sites -C469 Kaposi's sarcoma, unspecified -C470 Malignant neoplasm of peripheral nerves of head, face and neck -C4710 Malignant neoplasm of peripheral nerves of unspecified upper limb, including shoulder -C4711 Malignant neoplasm of peripheral nerves of right upper limb, including shoulder -C4712 Malignant neoplasm of peripheral nerves of left upper limb, including shoulder -C4720 Malignant neoplasm of peripheral nerves of unspecified lower limb, including hip -C4721 Malignant neoplasm of peripheral nerves of right lower limb, including hip -C4722 Malignant neoplasm of peripheral nerves of left lower limb, including hip -C473 Malignant neoplasm of peripheral nerves of thorax -C474 Malignant neoplasm of peripheral nerves of abdomen -C475 Malignant neoplasm of peripheral nerves of pelvis -C476 Malignant neoplasm of peripheral nerves of trunk, unspecified -C478 Malignant neoplasm of overlapping sites of peripheral nerves and autonomic nervous system -C479 Malignant neoplasm of peripheral nerves and autonomic nervous system, unspecified -C480 Malignant neoplasm of retroperitoneum -C481 Malignant neoplasm of specified parts of peritoneum -C482 Malignant neoplasm of peritoneum, unspecified -C488 Malignant neoplasm of overlapping sites of retroperitoneum and peritoneum -C490 Malignant neoplasm of connective and soft tissue of head, face and neck -C4910 Malignant neoplasm of connective and soft tissue of unspecified upper limb, including shoulder -C4911 Malignant neoplasm of connective and soft tissue of right upper limb, including shoulder -C4912 Malignant neoplasm of connective and soft tissue of left upper limb, including shoulder -C4920 Malignant neoplasm of connective and soft tissue of unspecified lower limb, including hip -C4921 Malignant neoplasm of connective and soft tissue of right lower limb, including hip -C4922 Malignant neoplasm of connective and soft tissue of left lower limb, including hip -C493 Malignant neoplasm of connective and soft tissue of thorax -C494 Malignant neoplasm of connective and soft tissue of abdomen -C495 Malignant neoplasm of connective and soft tissue of pelvis -C496 Malignant neoplasm of connective and soft tissue of trunk, unspecified -C498 Malignant neoplasm of overlapping sites of connective and soft tissue -C499 Malignant neoplasm of connective and soft tissue, unspecified -C49A0 Gastrointestinal stromal tumor, unspecified site -C49A1 Gastrointestinal stromal tumor of esophagus -C49A2 Gastrointestinal stromal tumor of stomach -C49A3 Gastrointestinal stromal tumor of small intestine -C49A4 Gastrointestinal stromal tumor of large intestine -C49A5 Gastrointestinal stromal tumor of rectum -C49A9 Gastrointestinal stromal tumor of other sites -C50011 Malignant neoplasm of nipple and areola, right female breast -C50012 Malignant neoplasm of nipple and areola, left female breast -C50019 Malignant neoplasm of nipple and areola, unspecified female breast -C50021 Malignant neoplasm of nipple and areola, right male breast -C50022 Malignant neoplasm of nipple and areola, left male breast -C50029 Malignant neoplasm of nipple and areola, unspecified male breast -C50111 Malignant neoplasm of central portion of right female breast -C50112 Malignant neoplasm of central portion of left female breast -C50119 Malignant neoplasm of central portion of unspecified female breast -C50121 Malignant neoplasm of central portion of right male breast -C50122 Malignant neoplasm of central portion of left male breast -C50129 Malignant neoplasm of central portion of unspecified male breast -C50211 Malignant neoplasm of upper-inner quadrant of right female breast -C50212 Malignant neoplasm of upper-inner quadrant of left female breast -C50219 Malignant neoplasm of upper-inner quadrant of unspecified female breast -C50221 Malignant neoplasm of upper-inner quadrant of right male breast -C50222 Malignant neoplasm of upper-inner quadrant of left male breast -C50229 Malignant neoplasm of upper-inner quadrant of unspecified male breast -C50311 Malignant neoplasm of lower-inner quadrant of right female breast -C50312 Malignant neoplasm of lower-inner quadrant of left female breast -C50319 Malignant neoplasm of lower-inner quadrant of unspecified female breast -C50321 Malignant neoplasm of lower-inner quadrant of right male breast -C50322 Malignant neoplasm of lower-inner quadrant of left male breast -C50329 Malignant neoplasm of lower-inner quadrant of unspecified male breast -C50411 Malignant neoplasm of upper-outer quadrant of right female breast -C50412 Malignant neoplasm of upper-outer quadrant of left female breast -C50419 Malignant neoplasm of upper-outer quadrant of unspecified female breast -C50421 Malignant neoplasm of upper-outer quadrant of right male breast -C50422 Malignant neoplasm of upper-outer quadrant of left male breast -C50429 Malignant neoplasm of upper-outer quadrant of unspecified male breast -C50511 Malignant neoplasm of lower-outer quadrant of right female breast -C50512 Malignant neoplasm of lower-outer quadrant of left female breast -C50519 Malignant neoplasm of lower-outer quadrant of unspecified female breast -C50521 Malignant neoplasm of lower-outer quadrant of right male breast -C50522 Malignant neoplasm of lower-outer quadrant of left male breast -C50529 Malignant neoplasm of lower-outer quadrant of unspecified male breast -C50611 Malignant neoplasm of axillary tail of right female breast -C50612 Malignant neoplasm of axillary tail of left female breast -C50619 Malignant neoplasm of axillary tail of unspecified female breast -C50621 Malignant neoplasm of axillary tail of right male breast -C50622 Malignant neoplasm of axillary tail of left male breast -C50629 Malignant neoplasm of axillary tail of unspecified male breast -C50811 Malignant neoplasm of overlapping sites of right female breast -C50812 Malignant neoplasm of overlapping sites of left female breast -C50819 Malignant neoplasm of overlapping sites of unspecified female breast -C50821 Malignant neoplasm of overlapping sites of right male breast -C50822 Malignant neoplasm of overlapping sites of left male breast -C50829 Malignant neoplasm of overlapping sites of unspecified male breast -C50911 Malignant neoplasm of unspecified site of right female breast -C50912 Malignant neoplasm of unspecified site of left female breast -C50919 Malignant neoplasm of unspecified site of unspecified female breast -C50921 Malignant neoplasm of unspecified site of right male breast -C50922 Malignant neoplasm of unspecified site of left male breast -C50929 Malignant neoplasm of unspecified site of unspecified male breast -C510 Malignant neoplasm of labium majus -C511 Malignant neoplasm of labium minus -C512 Malignant neoplasm of clitoris -C518 Malignant neoplasm of overlapping sites of vulva -C519 Malignant neoplasm of vulva, unspecified -C52 Malignant neoplasm of vagina -C530 Malignant neoplasm of endocervix -C531 Malignant neoplasm of exocervix -C538 Malignant neoplasm of overlapping sites of cervix uteri -C539 Malignant neoplasm of cervix uteri, unspecified -C540 Malignant neoplasm of isthmus uteri -C541 Malignant neoplasm of endometrium -C542 Malignant neoplasm of myometrium -C543 Malignant neoplasm of fundus uteri -C548 Malignant neoplasm of overlapping sites of corpus uteri -C549 Malignant neoplasm of corpus uteri, unspecified -C55 Malignant neoplasm of uterus, part unspecified -C561 Malignant neoplasm of right ovary -C562 Malignant neoplasm of left ovary -C569 Malignant neoplasm of unspecified ovary -C5700 Malignant neoplasm of unspecified fallopian tube -C5701 Malignant neoplasm of right fallopian tube -C5702 Malignant neoplasm of left fallopian tube -C5710 Malignant neoplasm of unspecified broad ligament -C5711 Malignant neoplasm of right broad ligament -C5712 Malignant neoplasm of left broad ligament -C5720 Malignant neoplasm of unspecified round ligament -C5721 Malignant neoplasm of right round ligament -C5722 Malignant neoplasm of left round ligament -C573 Malignant neoplasm of parametrium -C574 Malignant neoplasm of uterine adnexa, unspecified -C577 Malignant neoplasm of other specified female genital organs -C578 Malignant neoplasm of overlapping sites of female genital organs -C579 Malignant neoplasm of female genital organ, unspecified -C58 Malignant neoplasm of placenta -C600 Malignant neoplasm of prepuce -C601 Malignant neoplasm of glans penis -C602 Malignant neoplasm of body of penis -C608 Malignant neoplasm of overlapping sites of penis -C609 Malignant neoplasm of penis, unspecified -C61 Malignant neoplasm of prostate -C6200 Malignant neoplasm of unspecified undescended testis -C6201 Malignant neoplasm of undescended right testis -C6202 Malignant neoplasm of undescended left testis -C6210 Malignant neoplasm of unspecified descended testis -C6211 Malignant neoplasm of descended right testis -C6212 Malignant neoplasm of descended left testis -C6290 Malignant neoplasm of unspecified testis, unspecified whether descended or undescended -C6291 Malignant neoplasm of right testis, unspecified whether descended or undescended -C6292 Malignant neoplasm of left testis, unspecified whether descended or undescended -C6300 Malignant neoplasm of unspecified epididymis -C6301 Malignant neoplasm of right epididymis -C6302 Malignant neoplasm of left epididymis -C6310 Malignant neoplasm of unspecified spermatic cord -C6311 Malignant neoplasm of right spermatic cord -C6312 Malignant neoplasm of left spermatic cord -C632 Malignant neoplasm of scrotum -C637 Malignant neoplasm of other specified male genital organs -C638 Malignant neoplasm of overlapping sites of male genital organs -C639 Malignant neoplasm of male genital organ, unspecified -C641 Malignant neoplasm of right kidney, except renal pelvis -C642 Malignant neoplasm of left kidney, except renal pelvis -C649 Malignant neoplasm of unspecified kidney, except renal pelvis -C651 Malignant neoplasm of right renal pelvis -C652 Malignant neoplasm of left renal pelvis -C659 Malignant neoplasm of unspecified renal pelvis -C661 Malignant neoplasm of right ureter -C662 Malignant neoplasm of left ureter -C669 Malignant neoplasm of unspecified ureter -C670 Malignant neoplasm of trigone of bladder -C671 Malignant neoplasm of dome of bladder -C672 Malignant neoplasm of lateral wall of bladder -C673 Malignant neoplasm of anterior wall of bladder -C674 Malignant neoplasm of posterior wall of bladder -C675 Malignant neoplasm of bladder neck -C676 Malignant neoplasm of ureteric orifice -C677 Malignant neoplasm of urachus -C678 Malignant neoplasm of overlapping sites of bladder -C679 Malignant neoplasm of bladder, unspecified -C680 Malignant neoplasm of urethra -C681 Malignant neoplasm of paraurethral glands -C688 Malignant neoplasm of overlapping sites of urinary organs -C689 Malignant neoplasm of urinary organ, unspecified -C6900 Malignant neoplasm of unspecified conjunctiva -C6901 Malignant neoplasm of right conjunctiva -C6902 Malignant neoplasm of left conjunctiva -C6910 Malignant neoplasm of unspecified cornea -C6911 Malignant neoplasm of right cornea -C6912 Malignant neoplasm of left cornea -C6920 Malignant neoplasm of unspecified retina -C6921 Malignant neoplasm of right retina -C6922 Malignant neoplasm of left retina -C6930 Malignant neoplasm of unspecified choroid -C6931 Malignant neoplasm of right choroid -C6932 Malignant neoplasm of left choroid -C6940 Malignant neoplasm of unspecified ciliary body -C6941 Malignant neoplasm of right ciliary body -C6942 Malignant neoplasm of left ciliary body -C6950 Malignant neoplasm of unspecified lacrimal gland and duct -C6951 Malignant neoplasm of right lacrimal gland and duct -C6952 Malignant neoplasm of left lacrimal gland and duct -C6960 Malignant neoplasm of unspecified orbit -C6961 Malignant neoplasm of right orbit -C6962 Malignant neoplasm of left orbit -C6980 Malignant neoplasm of overlapping sites of unspecified eye and adnexa -C6981 Malignant neoplasm of overlapping sites of right eye and adnexa -C6982 Malignant neoplasm of overlapping sites of left eye and adnexa -C6990 Malignant neoplasm of unspecified site of unspecified eye -C6991 Malignant neoplasm of unspecified site of right eye -C6992 Malignant neoplasm of unspecified site of left eye -C700 Malignant neoplasm of cerebral meninges -C701 Malignant neoplasm of spinal meninges -C709 Malignant neoplasm of meninges, unspecified -C710 Malignant neoplasm of cerebrum, except lobes and ventricles -C711 Malignant neoplasm of frontal lobe -C712 Malignant neoplasm of temporal lobe -C713 Malignant neoplasm of parietal lobe -C714 Malignant neoplasm of occipital lobe -C715 Malignant neoplasm of cerebral ventricle -C716 Malignant neoplasm of cerebellum -C717 Malignant neoplasm of brain stem -C718 Malignant neoplasm of overlapping sites of brain -C719 Malignant neoplasm of brain, unspecified -C720 Malignant neoplasm of spinal cord -C721 Malignant neoplasm of cauda equina -C7220 Malignant neoplasm of unspecified olfactory nerve -C7221 Malignant neoplasm of right olfactory nerve -C7222 Malignant neoplasm of left olfactory nerve -C7230 Malignant neoplasm of unspecified optic nerve -C7231 Malignant neoplasm of right optic nerve -C7232 Malignant neoplasm of left optic nerve -C7240 Malignant neoplasm of unspecified acoustic nerve -C7241 Malignant neoplasm of right acoustic nerve -C7242 Malignant neoplasm of left acoustic nerve -C7250 Malignant neoplasm of unspecified cranial nerve -C7259 Malignant neoplasm of other cranial nerves -C729 Malignant neoplasm of central nervous system, unspecified -C73 Malignant neoplasm of thyroid gland -C7400 Malignant neoplasm of cortex of unspecified adrenal gland -C7401 Malignant neoplasm of cortex of right adrenal gland -C7402 Malignant neoplasm of cortex of left adrenal gland -C7410 Malignant neoplasm of medulla of unspecified adrenal gland -C7411 Malignant neoplasm of medulla of right adrenal gland -C7412 Malignant neoplasm of medulla of left adrenal gland -C7490 Malignant neoplasm of unspecified part of unspecified adrenal gland -C7491 Malignant neoplasm of unspecified part of right adrenal gland -C7492 Malignant neoplasm of unspecified part of left adrenal gland -C750 Malignant neoplasm of parathyroid gland -C751 Malignant neoplasm of pituitary gland -C752 Malignant neoplasm of craniopharyngeal duct -C753 Malignant neoplasm of pineal gland -C754 Malignant neoplasm of carotid body -C755 Malignant neoplasm of aortic body and other paraganglia -C758 Malignant neoplasm with pluriglandular involvement, unspecified -C759 Malignant neoplasm of endocrine gland, unspecified -C7A00 Malignant carcinoid tumor of unspecified site -C7A010 Malignant carcinoid tumor of the duodenum -C7A011 Malignant carcinoid tumor of the jejunum -C7A012 Malignant carcinoid tumor of the ileum -C7A019 Malignant carcinoid tumor of the small intestine, unspecified portion -C7A020 Malignant carcinoid tumor of the appendix -C7A021 Malignant carcinoid tumor of the cecum -C7A022 Malignant carcinoid tumor of the ascending colon -C7A023 Malignant carcinoid tumor of the transverse colon -C7A024 Malignant carcinoid tumor of the descending colon -C7A025 Malignant carcinoid tumor of the sigmoid colon -C7A026 Malignant carcinoid tumor of the rectum -C7A029 Malignant carcinoid tumor of the large intestine, unspecified portion -C7A090 Malignant carcinoid tumor of the bronchus and lung -C7A091 Malignant carcinoid tumor of the thymus -C7A092 Malignant carcinoid tumor of the stomach -C7A093 Malignant carcinoid tumor of the kidney -C7A094 Malignant carcinoid tumor of the foregut, unspecified -C7A095 Malignant carcinoid tumor of the midgut, unspecified -C7A096 Malignant carcinoid tumor of the hindgut, unspecified -C7A098 Malignant carcinoid tumors of other sites -C7A1 Malignant poorly differentiated neuroendocrine tumors -C7A8 Other malignant neuroendocrine tumors -C7B00 Secondary carcinoid tumors, unspecified site -C7B01 Secondary carcinoid tumors of distant lymph nodes -C7B02 Secondary carcinoid tumors of liver -C7B03 Secondary carcinoid tumors of bone -C7B04 Secondary carcinoid tumors of peritoneum -C7B09 Secondary carcinoid tumors of other sites -C7B1 Secondary Merkel cell carcinoma -C7B8 Other secondary neuroendocrine tumors -C760 Malignant neoplasm of head, face and neck -C761 Malignant neoplasm of thorax -C762 Malignant neoplasm of abdomen -C763 Malignant neoplasm of pelvis -C7640 Malignant neoplasm of unspecified upper limb -C7641 Malignant neoplasm of right upper limb -C7642 Malignant neoplasm of left upper limb -C7650 Malignant neoplasm of unspecified lower limb -C7651 Malignant neoplasm of right lower limb -C7652 Malignant neoplasm of left lower limb -C768 Malignant neoplasm of other specified ill-defined sites -C770 Secondary and unspecified malignant neoplasm of lymph nodes of head, face and neck -C771 Secondary and unspecified malignant neoplasm of intrathoracic lymph nodes -C772 Secondary and unspecified malignant neoplasm of intra-abdominal lymph nodes -C773 Secondary and unspecified malignant neoplasm of axilla and upper limb lymph nodes -C774 Secondary and unspecified malignant neoplasm of inguinal and lower limb lymph nodes -C775 Secondary and unspecified malignant neoplasm of intrapelvic lymph nodes -C778 Secondary and unspecified malignant neoplasm of lymph nodes of multiple regions -C779 Secondary and unspecified malignant neoplasm of lymph node, unspecified -C7800 Secondary malignant neoplasm of unspecified lung -C7801 Secondary malignant neoplasm of right lung -C7802 Secondary malignant neoplasm of left lung -C781 Secondary malignant neoplasm of mediastinum -C782 Secondary malignant neoplasm of pleura -C7830 Secondary malignant neoplasm of unspecified respiratory organ -C7839 Secondary malignant neoplasm of other respiratory organs -C784 Secondary malignant neoplasm of small intestine -C785 Secondary malignant neoplasm of large intestine and rectum -C786 Secondary malignant neoplasm of retroperitoneum and peritoneum -C787 Secondary malignant neoplasm of liver and intrahepatic bile duct -C7880 Secondary malignant neoplasm of unspecified digestive organ -C7889 Secondary malignant neoplasm of other digestive organs -C7900 Secondary malignant neoplasm of unspecified kidney and renal pelvis -C7901 Secondary malignant neoplasm of right kidney and renal pelvis -C7902 Secondary malignant neoplasm of left kidney and renal pelvis -C7910 Secondary malignant neoplasm of unspecified urinary organs -C7911 Secondary malignant neoplasm of bladder -C7919 Secondary malignant neoplasm of other urinary organs -C792 Secondary malignant neoplasm of skin -C7931 Secondary malignant neoplasm of brain -C7932 Secondary malignant neoplasm of cerebral meninges -C7940 Secondary malignant neoplasm of unspecified part of nervous system -C7949 Secondary malignant neoplasm of other parts of nervous system -C7951 Secondary malignant neoplasm of bone -C7952 Secondary malignant neoplasm of bone marrow -C7960 Secondary malignant neoplasm of unspecified ovary -C7961 Secondary malignant neoplasm of right ovary -C7962 Secondary malignant neoplasm of left ovary -C7970 Secondary malignant neoplasm of unspecified adrenal gland -C7971 Secondary malignant neoplasm of right adrenal gland -C7972 Secondary malignant neoplasm of left adrenal gland -C7981 Secondary malignant neoplasm of breast -C7982 Secondary malignant neoplasm of genital organs -C7989 Secondary malignant neoplasm of other specified sites -C799 Secondary malignant neoplasm of unspecified site -C800 Disseminated malignant neoplasm, unspecified -C801 Malignant (primary) neoplasm, unspecified -C802 Malignant neoplasm associated with transplanted organ -C8100 Nodular lymphocyte predominant Hodgkin lymphoma, unspecified site -C8101 Nodular lymphocyte predominant Hodgkin lymphoma, lymph nodes of head, face, and neck -C8102 Nodular lymphocyte predominant Hodgkin lymphoma, intrathoracic lymph nodes -C8103 Nodular lymphocyte predominant Hodgkin lymphoma, intra-abdominal lymph nodes -C8104 Nodular lymphocyte predominant Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8105 Nodular lymphocyte predominant Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8106 Nodular lymphocyte predominant Hodgkin lymphoma, intrapelvic lymph nodes -C8107 Nodular lymphocyte predominant Hodgkin lymphoma, spleen -C8108 Nodular lymphocyte predominant Hodgkin lymphoma, lymph nodes of multiple sites -C8109 Nodular lymphocyte predominant Hodgkin lymphoma, extranodal and solid organ sites -C8110 Nodular sclerosis Hodgkin lymphoma, unspecified site -C8111 Nodular sclerosis Hodgkin lymphoma, lymph nodes of head, face, and neck -C8112 Nodular sclerosis Hodgkin lymphoma, intrathoracic lymph nodes -C8113 Nodular sclerosis Hodgkin lymphoma, intra-abdominal lymph nodes -C8114 Nodular sclerosis Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8115 Nodular sclerosis Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8116 Nodular sclerosis Hodgkin lymphoma, intrapelvic lymph nodes -C8117 Nodular sclerosis Hodgkin lymphoma, spleen -C8118 Nodular sclerosis Hodgkin lymphoma, lymph nodes of multiple sites -C8119 Nodular sclerosis Hodgkin lymphoma, extranodal and solid organ sites -C8120 Mixed cellularity Hodgkin lymphoma, unspecified site -C8121 Mixed cellularity Hodgkin lymphoma, lymph nodes of head, face, and neck -C8122 Mixed cellularity Hodgkin lymphoma, intrathoracic lymph nodes -C8123 Mixed cellularity Hodgkin lymphoma, intra-abdominal lymph nodes -C8124 Mixed cellularity Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8125 Mixed cellularity Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8126 Mixed cellularity Hodgkin lymphoma, intrapelvic lymph nodes -C8127 Mixed cellularity Hodgkin lymphoma, spleen -C8128 Mixed cellularity Hodgkin lymphoma, lymph nodes of multiple sites -C8129 Mixed cellularity Hodgkin lymphoma, extranodal and solid organ sites -C8130 Lymphocyte depleted Hodgkin lymphoma, unspecified site -C8131 Lymphocyte depleted Hodgkin lymphoma, lymph nodes of head, face, and neck -C8132 Lymphocyte depleted Hodgkin lymphoma, intrathoracic lymph nodes -C8133 Lymphocyte depleted Hodgkin lymphoma, intra-abdominal lymph nodes -C8134 Lymphocyte depleted Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8135 Lymphocyte depleted Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8136 Lymphocyte depleted Hodgkin lymphoma, intrapelvic lymph nodes -C8137 Lymphocyte depleted Hodgkin lymphoma, spleen -C8138 Lymphocyte depleted Hodgkin lymphoma, lymph nodes of multiple sites -C8139 Lymphocyte depleted Hodgkin lymphoma, extranodal and solid organ sites -C8140 Lymphocyte-rich Hodgkin lymphoma, unspecified site -C8141 Lymphocyte-rich Hodgkin lymphoma, lymph nodes of head, face, and neck -C8142 Lymphocyte-rich Hodgkin lymphoma, intrathoracic lymph nodes -C8143 Lymphocyte-rich Hodgkin lymphoma, intra-abdominal lymph nodes -C8144 Lymphocyte-rich Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8145 Lymphocyte-rich Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8146 Lymphocyte-rich Hodgkin lymphoma, intrapelvic lymph nodes -C8147 Lymphocyte-rich Hodgkin lymphoma, spleen -C8148 Lymphocyte-rich Hodgkin lymphoma, lymph nodes of multiple sites -C8149 Lymphocyte-rich Hodgkin lymphoma, extranodal and solid organ sites -C8170 Other Hodgkin lymphoma, unspecified site -C8171 Other Hodgkin lymphoma, lymph nodes of head, face, and neck -C8172 Other Hodgkin lymphoma, intrathoracic lymph nodes -C8173 Other Hodgkin lymphoma, intra-abdominal lymph nodes -C8174 Other Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8175 Other Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8176 Other Hodgkin lymphoma, intrapelvic lymph nodes -C8177 Other Hodgkin lymphoma, spleen -C8178 Other Hodgkin lymphoma, lymph nodes of multiple sites -C8179 Other Hodgkin lymphoma, extranodal and solid organ sites -C8190 Hodgkin lymphoma, unspecified, unspecified site -C8191 Hodgkin lymphoma, unspecified, lymph nodes of head, face, and neck -C8192 Hodgkin lymphoma, unspecified, intrathoracic lymph nodes -C8193 Hodgkin lymphoma, unspecified, intra-abdominal lymph nodes -C8194 Hodgkin lymphoma, unspecified, lymph nodes of axilla and upper limb -C8195 Hodgkin lymphoma, unspecified, lymph nodes of inguinal region and lower limb -C8196 Hodgkin lymphoma, unspecified, intrapelvic lymph nodes -C8197 Hodgkin lymphoma, unspecified, spleen -C8198 Hodgkin lymphoma, unspecified, lymph nodes of multiple sites -C8199 Hodgkin lymphoma, unspecified, extranodal and solid organ sites -C8200 Follicular lymphoma grade I, unspecified site -C8201 Follicular lymphoma grade I, lymph nodes of head, face, and neck -C8202 Follicular lymphoma grade I, intrathoracic lymph nodes -C8203 Follicular lymphoma grade I, intra-abdominal lymph nodes -C8204 Follicular lymphoma grade I, lymph nodes of axilla and upper limb -C8205 Follicular lymphoma grade I, lymph nodes of inguinal region and lower limb -C8206 Follicular lymphoma grade I, intrapelvic lymph nodes -C8207 Follicular lymphoma grade I, spleen -C8208 Follicular lymphoma grade I, lymph nodes of multiple sites -C8209 Follicular lymphoma grade I, extranodal and solid organ sites -C8210 Follicular lymphoma grade II, unspecified site -C8211 Follicular lymphoma grade II, lymph nodes of head, face, and neck -C8212 Follicular lymphoma grade II, intrathoracic lymph nodes -C8213 Follicular lymphoma grade II, intra-abdominal lymph nodes -C8214 Follicular lymphoma grade II, lymph nodes of axilla and upper limb -C8215 Follicular lymphoma grade II, lymph nodes of inguinal region and lower limb -C8216 Follicular lymphoma grade II, intrapelvic lymph nodes -C8217 Follicular lymphoma grade II, spleen -C8218 Follicular lymphoma grade II, lymph nodes of multiple sites -C8219 Follicular lymphoma grade II, extranodal and solid organ sites -C8220 Follicular lymphoma grade III, unspecified, unspecified site -C8221 Follicular lymphoma grade III, unspecified, lymph nodes of head, face, and neck -C8222 Follicular lymphoma grade III, unspecified, intrathoracic lymph nodes -C8223 Follicular lymphoma grade III, unspecified, intra-abdominal lymph nodes -C8224 Follicular lymphoma grade III, unspecified, lymph nodes of axilla and upper limb -C8225 Follicular lymphoma grade III, unspecified, lymph nodes of inguinal region and lower limb -C8226 Follicular lymphoma grade III, unspecified, intrapelvic lymph nodes -C8227 Follicular lymphoma grade III, unspecified, spleen -C8228 Follicular lymphoma grade III, unspecified, lymph nodes of multiple sites -C8229 Follicular lymphoma grade III, unspecified, extranodal and solid organ sites -C8230 Follicular lymphoma grade IIIa, unspecified site -C8231 Follicular lymphoma grade IIIa, lymph nodes of head, face, and neck -C8232 Follicular lymphoma grade IIIa, intrathoracic lymph nodes -C8233 Follicular lymphoma grade IIIa, intra-abdominal lymph nodes -C8234 Follicular lymphoma grade IIIa, lymph nodes of axilla and upper limb -C8235 Follicular lymphoma grade IIIa, lymph nodes of inguinal region and lower limb -C8236 Follicular lymphoma grade IIIa, intrapelvic lymph nodes -C8237 Follicular lymphoma grade IIIa, spleen -C8238 Follicular lymphoma grade IIIa, lymph nodes of multiple sites -C8239 Follicular lymphoma grade IIIa, extranodal and solid organ sites -C8240 Follicular lymphoma grade IIIb, unspecified site -C8241 Follicular lymphoma grade IIIb, lymph nodes of head, face, and neck -C8242 Follicular lymphoma grade IIIb, intrathoracic lymph nodes -C8243 Follicular lymphoma grade IIIb, intra-abdominal lymph nodes -C8244 Follicular lymphoma grade IIIb, lymph nodes of axilla and upper limb -C8245 Follicular lymphoma grade IIIb, lymph nodes of inguinal region and lower limb -C8246 Follicular lymphoma grade IIIb, intrapelvic lymph nodes -C8247 Follicular lymphoma grade IIIb, spleen -C8248 Follicular lymphoma grade IIIb, lymph nodes of multiple sites -C8249 Follicular lymphoma grade IIIb, extranodal and solid organ sites -C8250 Diffuse follicle center lymphoma, unspecified site -C8251 Diffuse follicle center lymphoma, lymph nodes of head, face, and neck -C8252 Diffuse follicle center lymphoma, intrathoracic lymph nodes -C8253 Diffuse follicle center lymphoma, intra-abdominal lymph nodes -C8254 Diffuse follicle center lymphoma, lymph nodes of axilla and upper limb -C8255 Diffuse follicle center lymphoma, lymph nodes of inguinal region and lower limb -C8256 Diffuse follicle center lymphoma, intrapelvic lymph nodes -C8257 Diffuse follicle center lymphoma, spleen -C8258 Diffuse follicle center lymphoma, lymph nodes of multiple sites -C8259 Diffuse follicle center lymphoma, extranodal and solid organ sites -C8260 Cutaneous follicle center lymphoma, unspecified site -C8261 Cutaneous follicle center lymphoma, lymph nodes of head, face, and neck -C8262 Cutaneous follicle center lymphoma, intrathoracic lymph nodes -C8263 Cutaneous follicle center lymphoma, intra-abdominal lymph nodes -C8264 Cutaneous follicle center lymphoma, lymph nodes of axilla and upper limb -C8265 Cutaneous follicle center lymphoma, lymph nodes of inguinal region and lower limb -C8266 Cutaneous follicle center lymphoma, intrapelvic lymph nodes -C8267 Cutaneous follicle center lymphoma, spleen -C8268 Cutaneous follicle center lymphoma, lymph nodes of multiple sites -C8269 Cutaneous follicle center lymphoma, extranodal and solid organ sites -C8280 Other types of follicular lymphoma, unspecified site -C8281 Other types of follicular lymphoma, lymph nodes of head, face, and neck -C8282 Other types of follicular lymphoma, intrathoracic lymph nodes -C8283 Other types of follicular lymphoma, intra-abdominal lymph nodes -C8284 Other types of follicular lymphoma, lymph nodes of axilla and upper limb -C8285 Other types of follicular lymphoma, lymph nodes of inguinal region and lower limb -C8286 Other types of follicular lymphoma, intrapelvic lymph nodes -C8287 Other types of follicular lymphoma, spleen -C8288 Other types of follicular lymphoma, lymph nodes of multiple sites -C8289 Other types of follicular lymphoma, extranodal and solid organ sites -C8290 Follicular lymphoma, unspecified, unspecified site -C8291 Follicular lymphoma, unspecified, lymph nodes of head, face, and neck -C8292 Follicular lymphoma, unspecified, intrathoracic lymph nodes -C8293 Follicular lymphoma, unspecified, intra-abdominal lymph nodes -C8294 Follicular lymphoma, unspecified, lymph nodes of axilla and upper limb -C8295 Follicular lymphoma, unspecified, lymph nodes of inguinal region and lower limb -C8296 Follicular lymphoma, unspecified, intrapelvic lymph nodes -C8297 Follicular lymphoma, unspecified, spleen -C8298 Follicular lymphoma, unspecified, lymph nodes of multiple sites -C8299 Follicular lymphoma, unspecified, extranodal and solid organ sites -C8300 Small cell B-cell lymphoma, unspecified site -C8301 Small cell B-cell lymphoma, lymph nodes of head, face, and neck -C8302 Small cell B-cell lymphoma, intrathoracic lymph nodes -C8303 Small cell B-cell lymphoma, intra-abdominal lymph nodes -C8304 Small cell B-cell lymphoma, lymph nodes of axilla and upper limb -C8305 Small cell B-cell lymphoma, lymph nodes of inguinal region and lower limb -C8306 Small cell B-cell lymphoma, intrapelvic lymph nodes -C8307 Small cell B-cell lymphoma, spleen -C8308 Small cell B-cell lymphoma, lymph nodes of multiple sites -C8309 Small cell B-cell lymphoma, extranodal and solid organ sites -C8310 Mantle cell lymphoma, unspecified site -C8311 Mantle cell lymphoma, lymph nodes of head, face, and neck -C8312 Mantle cell lymphoma, intrathoracic lymph nodes -C8313 Mantle cell lymphoma, intra-abdominal lymph nodes -C8314 Mantle cell lymphoma, lymph nodes of axilla and upper limb -C8315 Mantle cell lymphoma, lymph nodes of inguinal region and lower limb -C8316 Mantle cell lymphoma, intrapelvic lymph nodes -C8317 Mantle cell lymphoma, spleen -C8318 Mantle cell lymphoma, lymph nodes of multiple sites -C8319 Mantle cell lymphoma, extranodal and solid organ sites -C8330 Diffuse large B-cell lymphoma, unspecified site -C8331 Diffuse large B-cell lymphoma, lymph nodes of head, face, and neck -C8332 Diffuse large B-cell lymphoma, intrathoracic lymph nodes -C8333 Diffuse large B-cell lymphoma, intra-abdominal lymph nodes -C8334 Diffuse large B-cell lymphoma, lymph nodes of axilla and upper limb -C8335 Diffuse large B-cell lymphoma, lymph nodes of inguinal region and lower limb -C8336 Diffuse large B-cell lymphoma, intrapelvic lymph nodes -C8337 Diffuse large B-cell lymphoma, spleen -C8338 Diffuse large B-cell lymphoma, lymph nodes of multiple sites -C8339 Diffuse large B-cell lymphoma, extranodal and solid organ sites -C8350 Lymphoblastic (diffuse) lymphoma, unspecified site -C8351 Lymphoblastic (diffuse) lymphoma, lymph nodes of head, face, and neck -C8352 Lymphoblastic (diffuse) lymphoma, intrathoracic lymph nodes -C8353 Lymphoblastic (diffuse) lymphoma, intra-abdominal lymph nodes -C8354 Lymphoblastic (diffuse) lymphoma, lymph nodes of axilla and upper limb -C8355 Lymphoblastic (diffuse) lymphoma, lymph nodes of inguinal region and lower limb -C8356 Lymphoblastic (diffuse) lymphoma, intrapelvic lymph nodes -C8357 Lymphoblastic (diffuse) lymphoma, spleen -C8358 Lymphoblastic (diffuse) lymphoma, lymph nodes of multiple sites -C8359 Lymphoblastic (diffuse) lymphoma, extranodal and solid organ sites -C8370 Burkitt lymphoma, unspecified site -C8371 Burkitt lymphoma, lymph nodes of head, face, and neck -C8372 Burkitt lymphoma, intrathoracic lymph nodes -C8373 Burkitt lymphoma, intra-abdominal lymph nodes -C8374 Burkitt lymphoma, lymph nodes of axilla and upper limb -C8375 Burkitt lymphoma, lymph nodes of inguinal region and lower limb -C8376 Burkitt lymphoma, intrapelvic lymph nodes -C8377 Burkitt lymphoma, spleen -C8378 Burkitt lymphoma, lymph nodes of multiple sites -C8379 Burkitt lymphoma, extranodal and solid organ sites -C8380 Other non-follicular lymphoma, unspecified site -C8381 Other non-follicular lymphoma, lymph nodes of head, face, and neck -C8382 Other non-follicular lymphoma, intrathoracic lymph nodes -C8383 Other non-follicular lymphoma, intra-abdominal lymph nodes -C8384 Other non-follicular lymphoma, lymph nodes of axilla and upper limb -C8385 Other non-follicular lymphoma, lymph nodes of inguinal region and lower limb -C8386 Other non-follicular lymphoma, intrapelvic lymph nodes -C8387 Other non-follicular lymphoma, spleen -C8388 Other non-follicular lymphoma, lymph nodes of multiple sites -C8389 Other non-follicular lymphoma, extranodal and solid organ sites -C8390 Non-follicular (diffuse) lymphoma, unspecified, unspecified site -C8391 Non-follicular (diffuse) lymphoma, unspecified, lymph nodes of head, face, and neck -C8392 Non-follicular (diffuse) lymphoma, unspecified, intrathoracic lymph nodes -C8393 Non-follicular (diffuse) lymphoma, unspecified, intra-abdominal lymph nodes -C8394 Non-follicular (diffuse) lymphoma, unspecified, lymph nodes of axilla and upper limb -C8395 Non-follicular (diffuse) lymphoma, unspecified, lymph nodes of inguinal region and lower limb -C8396 Non-follicular (diffuse) lymphoma, unspecified, intrapelvic lymph nodes -C8397 Non-follicular (diffuse) lymphoma, unspecified, spleen -C8398 Non-follicular (diffuse) lymphoma, unspecified, lymph nodes of multiple sites -C8399 Non-follicular (diffuse) lymphoma, unspecified, extranodal and solid organ sites -C8400 Mycosis fungoides, unspecified site -C8401 Mycosis fungoides, lymph nodes of head, face, and neck -C8402 Mycosis fungoides, intrathoracic lymph nodes -C8403 Mycosis fungoides, intra-abdominal lymph nodes -C8404 Mycosis fungoides, lymph nodes of axilla and upper limb -C8405 Mycosis fungoides, lymph nodes of inguinal region and lower limb -C8406 Mycosis fungoides, intrapelvic lymph nodes -C8407 Mycosis fungoides, spleen -C8408 Mycosis fungoides, lymph nodes of multiple sites -C8409 Mycosis fungoides, extranodal and solid organ sites -C8410 Sezary disease, unspecified site -C8411 Sezary disease, lymph nodes of head, face, and neck -C8412 Sezary disease, intrathoracic lymph nodes -C8413 Sezary disease, intra-abdominal lymph nodes -C8414 Sezary disease, lymph nodes of axilla and upper limb -C8415 Sezary disease, lymph nodes of inguinal region and lower limb -C8416 Sezary disease, intrapelvic lymph nodes -C8417 Sezary disease, spleen -C8418 Sezary disease, lymph nodes of multiple sites -C8419 Sezary disease, extranodal and solid organ sites -C8440 Peripheral T-cell lymphoma, not classified, unspecified site -C8441 Peripheral T-cell lymphoma, not classified, lymph nodes of head, face, and neck -C8442 Peripheral T-cell lymphoma, not classified, intrathoracic lymph nodes -C8443 Peripheral T-cell lymphoma, not classified, intra-abdominal lymph nodes -C8444 Peripheral T-cell lymphoma, not classified, lymph nodes of axilla and upper limb -C8445 Peripheral T-cell lymphoma, not classified, lymph nodes of inguinal region and lower limb -C8446 Peripheral T-cell lymphoma, not classified, intrapelvic lymph nodes -C8447 Peripheral T-cell lymphoma, not classified, spleen -C8448 Peripheral T-cell lymphoma, not classified, lymph nodes of multiple sites -C8449 Peripheral T-cell lymphoma, not classified, extranodal and solid organ sites -C8460 Anaplastic large cell lymphoma, ALK-positive, unspecified site -C8461 Anaplastic large cell lymphoma, ALK-positive, lymph nodes of head, face, and neck -C8462 Anaplastic large cell lymphoma, ALK-positive, intrathoracic lymph nodes -C8463 Anaplastic large cell lymphoma, ALK-positive, intra-abdominal lymph nodes -C8464 Anaplastic large cell lymphoma, ALK-positive, lymph nodes of axilla and upper limb -C8465 Anaplastic large cell lymphoma, ALK-positive, lymph nodes of inguinal region and lower limb -C8466 Anaplastic large cell lymphoma, ALK-positive, intrapelvic lymph nodes -C8467 Anaplastic large cell lymphoma, ALK-positive, spleen -C8468 Anaplastic large cell lymphoma, ALK-positive, lymph nodes of multiple sites -C8469 Anaplastic large cell lymphoma, ALK-positive, extranodal and solid organ sites -C8470 Anaplastic large cell lymphoma, ALK-negative, unspecified site -C8471 Anaplastic large cell lymphoma, ALK-negative, lymph nodes of head, face, and neck -C8472 Anaplastic large cell lymphoma, ALK-negative, intrathoracic lymph nodes -C8473 Anaplastic large cell lymphoma, ALK-negative, intra-abdominal lymph nodes -C8474 Anaplastic large cell lymphoma, ALK-negative, lymph nodes of axilla and upper limb -C8475 Anaplastic large cell lymphoma, ALK-negative, lymph nodes of inguinal region and lower limb -C8476 Anaplastic large cell lymphoma, ALK-negative, intrapelvic lymph nodes -C8477 Anaplastic large cell lymphoma, ALK-negative, spleen -C8478 Anaplastic large cell lymphoma, ALK-negative, lymph nodes of multiple sites -C8479 Anaplastic large cell lymphoma, ALK-negative, extranodal and solid organ sites -C84A0 Cutaneous T-cell lymphoma, unspecified, unspecified site -C84A1 Cutaneous T-cell lymphoma, unspecified lymph nodes of head, face, and neck -C84A2 Cutaneous T-cell lymphoma, unspecified, intrathoracic lymph nodes -C84A3 Cutaneous T-cell lymphoma, unspecified, intra-abdominal lymph nodes -C84A4 Cutaneous T-cell lymphoma, unspecified, lymph nodes of axilla and upper limb -C84A5 Cutaneous T-cell lymphoma, unspecified, lymph nodes of inguinal region and lower limb -C84A6 Cutaneous T-cell lymphoma, unspecified, intrapelvic lymph nodes -C84A7 Cutaneous T-cell lymphoma, unspecified, spleen -C84A8 Cutaneous T-cell lymphoma, unspecified, lymph nodes of multiple sites -C84A9 Cutaneous T-cell lymphoma, unspecified, extranodal and solid organ sites -C84Z0 Other mature T/NK-cell lymphomas, unspecified site -C84Z1 Other mature T/NK-cell lymphomas, lymph nodes of head, face, and neck -C84Z2 Other mature T/NK-cell lymphomas, intrathoracic lymph nodes -C84Z3 Other mature T/NK-cell lymphomas, intra-abdominal lymph nodes -C84Z4 Other mature T/NK-cell lymphomas, lymph nodes of axilla and upper limb -C84Z5 Other mature T/NK-cell lymphomas, lymph nodes of inguinal region and lower limb -C84Z6 Other mature T/NK-cell lymphomas, intrapelvic lymph nodes -C84Z7 Other mature T/NK-cell lymphomas, spleen -C84Z8 Other mature T/NK-cell lymphomas, lymph nodes of multiple sites -C84Z9 Other mature T/NK-cell lymphomas, extranodal and solid organ sites -C8490 Mature T/NK-cell lymphomas, unspecified, unspecified site -C8491 Mature T/NK-cell lymphomas, unspecified, lymph nodes of head, face, and neck -C8492 Mature T/NK-cell lymphomas, unspecified, intrathoracic lymph nodes -C8493 Mature T/NK-cell lymphomas, unspecified, intra-abdominal lymph nodes -C8494 Mature T/NK-cell lymphomas, unspecified, lymph nodes of axilla and upper limb -C8495 Mature T/NK-cell lymphomas, unspecified, lymph nodes of inguinal region and lower limb -C8496 Mature T/NK-cell lymphomas, unspecified, intrapelvic lymph nodes -C8497 Mature T/NK-cell lymphomas, unspecified, spleen -C8498 Mature T/NK-cell lymphomas, unspecified, lymph nodes of multiple sites -C8499 Mature T/NK-cell lymphomas, unspecified, extranodal and solid organ sites -C8510 Unspecified B-cell lymphoma, unspecified site -C8511 Unspecified B-cell lymphoma, lymph nodes of head, face, and neck -C8512 Unspecified B-cell lymphoma, intrathoracic lymph nodes -C8513 Unspecified B-cell lymphoma, intra-abdominal lymph nodes -C8514 Unspecified B-cell lymphoma, lymph nodes of axilla and upper limb -C8515 Unspecified B-cell lymphoma, lymph nodes of inguinal region and lower limb -C8516 Unspecified B-cell lymphoma, intrapelvic lymph nodes -C8517 Unspecified B-cell lymphoma, spleen -C8518 Unspecified B-cell lymphoma, lymph nodes of multiple sites -C8519 Unspecified B-cell lymphoma, extranodal and solid organ sites -C8520 Mediastinal (thymic) large B-cell lymphoma, unspecified site -C8521 Mediastinal (thymic) large B-cell lymphoma, lymph nodes of head, face, and neck -C8522 Mediastinal (thymic) large B-cell lymphoma, intrathoracic lymph nodes -C8523 Mediastinal (thymic) large B-cell lymphoma, intra-abdominal lymph nodes -C8524 Mediastinal (thymic) large B-cell lymphoma, lymph nodes of axilla and upper limb -C8525 Mediastinal (thymic) large B-cell lymphoma, lymph nodes of inguinal region and lower limb -C8526 Mediastinal (thymic) large B-cell lymphoma, intrapelvic lymph nodes -C8527 Mediastinal (thymic) large B-cell lymphoma, spleen -C8528 Mediastinal (thymic) large B-cell lymphoma, lymph nodes of multiple sites -C8529 Mediastinal (thymic) large B-cell lymphoma, extranodal and solid organ sites -C8580 Other specified types of non-Hodgkin lymphoma, unspecified site -C8581 Other specified types of non-Hodgkin lymphoma, lymph nodes of head, face, and neck -C8582 Other specified types of non-Hodgkin lymphoma, intrathoracic lymph nodes -C8583 Other specified types of non-Hodgkin lymphoma, intra-abdominal lymph nodes -C8584 Other specified types of non-Hodgkin lymphoma, lymph nodes of axilla and upper limb -C8585 Other specified types of non-Hodgkin lymphoma, lymph nodes of inguinal region and lower limb -C8586 Other specified types of non-Hodgkin lymphoma, intrapelvic lymph nodes -C8587 Other specified types of non-Hodgkin lymphoma, spleen -C8588 Other specified types of non-Hodgkin lymphoma, lymph nodes of multiple sites -C8589 Other specified types of non-Hodgkin lymphoma, extranodal and solid organ sites -C8590 Non-Hodgkin lymphoma, unspecified, unspecified site -C8591 Non-Hodgkin lymphoma, unspecified, lymph nodes of head, face, and neck -C8592 Non-Hodgkin lymphoma, unspecified, intrathoracic lymph nodes -C8593 Non-Hodgkin lymphoma, unspecified, intra-abdominal lymph nodes -C8594 Non-Hodgkin lymphoma, unspecified, lymph nodes of axilla and upper limb -C8595 Non-Hodgkin lymphoma, unspecified, lymph nodes of inguinal region and lower limb -C8596 Non-Hodgkin lymphoma, unspecified, intrapelvic lymph nodes -C8597 Non-Hodgkin lymphoma, unspecified, spleen -C8598 Non-Hodgkin lymphoma, unspecified, lymph nodes of multiple sites -C8599 Non-Hodgkin lymphoma, unspecified, extranodal and solid organ sites -C860 Extranodal NK/T-cell lymphoma, nasal type -C861 Hepatosplenic T-cell lymphoma -C862 Enteropathy-type (intestinal) T-cell lymphoma -C863 Subcutaneous panniculitis-like T-cell lymphoma -C864 Blastic NK-cell lymphoma -C865 Angioimmunoblastic T-cell lymphoma -C866 Primary cutaneous CD30-positive T-cell proliferations -C880 Waldenstrom macroglobulinemia -C882 Heavy chain disease -C883 Immunoproliferative small intestinal disease -C884 Extranodal marginal zone B-cell lymphoma of mucosa-associated lymphoid tissue [MALT-lymphoma] -C888 Other malignant immunoproliferative diseases -C889 Malignant immunoproliferative disease, unspecified -C9000 Multiple myeloma not having achieved remission -C9001 Multiple myeloma in remission -C9002 Multiple myeloma in relapse -C9010 Plasma cell leukemia not having achieved remission -C9011 Plasma cell leukemia in remission -C9012 Plasma cell leukemia in relapse -C9020 Extramedullary plasmacytoma not having achieved remission -C9021 Extramedullary plasmacytoma in remission -C9022 Extramedullary plasmacytoma in relapse -C9030 Solitary plasmacytoma not having achieved remission -C9031 Solitary plasmacytoma in remission -C9032 Solitary plasmacytoma in relapse -C9100 Acute lymphoblastic leukemia not having achieved remission -C9101 Acute lymphoblastic leukemia, in remission -C9102 Acute lymphoblastic leukemia, in relapse -C9110 Chronic lymphocytic leukemia of B-cell type not having achieved remission -C9111 Chronic lymphocytic leukemia of B-cell type in remission -C9112 Chronic lymphocytic leukemia of B-cell type in relapse -C9130 Prolymphocytic leukemia of B-cell type not having achieved remission -C9131 Prolymphocytic leukemia of B-cell type, in remission -C9132 Prolymphocytic leukemia of B-cell type, in relapse -C9140 Hairy cell leukemia not having achieved remission -C9141 Hairy cell leukemia, in remission -C9142 Hairy cell leukemia, in relapse -C9150 Adult T-cell lymphoma/leukemia (HTLV-1-associated) not having achieved remission -C9151 Adult T-cell lymphoma/leukemia (HTLV-1-associated), in remission -C9152 Adult T-cell lymphoma/leukemia (HTLV-1-associated), in relapse -C9160 Prolymphocytic leukemia of T-cell type not having achieved remission -C9161 Prolymphocytic leukemia of T-cell type, in remission -C9162 Prolymphocytic leukemia of T-cell type, in relapse -C91A0 Mature B-cell leukemia Burkitt-type not having achieved remission -C91A1 Mature B-cell leukemia Burkitt-type, in remission -C91A2 Mature B-cell leukemia Burkitt-type, in relapse -C91Z0 Other lymphoid leukemia not having achieved remission -C91Z1 Other lymphoid leukemia, in remission -C91Z2 Other lymphoid leukemia, in relapse -C9190 Lymphoid leukemia, unspecified not having achieved remission -C9191 Lymphoid leukemia, unspecified, in remission -C9192 Lymphoid leukemia, unspecified, in relapse -C9200 Acute myeloblastic leukemia, not having achieved remission -C9201 Acute myeloblastic leukemia, in remission -C9202 Acute myeloblastic leukemia, in relapse -C9210 Chronic myeloid leukemia, BCR/ABL-positive, not having achieved remission -C9211 Chronic myeloid leukemia, BCR/ABL-positive, in remission -C9212 Chronic myeloid leukemia, BCR/ABL-positive, in relapse -C9220 Atypical chronic myeloid leukemia, BCR/ABL-negative, not having achieved remission -C9221 Atypical chronic myeloid leukemia, BCR/ABL-negative, in remission -C9222 Atypical chronic myeloid leukemia, BCR/ABL-negative, in relapse -C9230 Myeloid sarcoma, not having achieved remission -C9231 Myeloid sarcoma, in remission -C9232 Myeloid sarcoma, in relapse -C9240 Acute promyelocytic leukemia, not having achieved remission -C9241 Acute promyelocytic leukemia, in remission -C9242 Acute promyelocytic leukemia, in relapse -C9250 Acute myelomonocytic leukemia, not having achieved remission -C9251 Acute myelomonocytic leukemia, in remission -C9252 Acute myelomonocytic leukemia, in relapse -C9260 Acute myeloid leukemia with 11q23-abnormality not having achieved remission -C9261 Acute myeloid leukemia with 11q23-abnormality in remission -C9262 Acute myeloid leukemia with 11q23-abnormality in relapse -C92A0 Acute myeloid leukemia with multilineage dysplasia, not having achieved remission -C92A1 Acute myeloid leukemia with multilineage dysplasia, in remission -C92A2 Acute myeloid leukemia with multilineage dysplasia, in relapse -C92Z0 Other myeloid leukemia not having achieved remission -C92Z1 Other myeloid leukemia, in remission -C92Z2 Other myeloid leukemia, in relapse -C9290 Myeloid leukemia, unspecified, not having achieved remission -C9291 Myeloid leukemia, unspecified in remission -C9292 Myeloid leukemia, unspecified in relapse -C9300 Acute monoblastic/monocytic leukemia, not having achieved remission -C9301 Acute monoblastic/monocytic leukemia, in remission -C9302 Acute monoblastic/monocytic leukemia, in relapse -C9310 Chronic myelomonocytic leukemia not having achieved remission -C9311 Chronic myelomonocytic leukemia, in remission -C9312 Chronic myelomonocytic leukemia, in relapse -C9330 Juvenile myelomonocytic leukemia, not having achieved remission -C9331 Juvenile myelomonocytic leukemia, in remission -C9332 Juvenile myelomonocytic leukemia, in relapse -C93Z0 Other monocytic leukemia, not having achieved remission -C93Z1 Other monocytic leukemia, in remission -C93Z2 Other monocytic leukemia, in relapse -C9390 Monocytic leukemia, unspecified, not having achieved remission -C9391 Monocytic leukemia, unspecified in remission -C9392 Monocytic leukemia, unspecified in relapse -C9400 Acute erythroid leukemia, not having achieved remission -C9401 Acute erythroid leukemia, in remission -C9402 Acute erythroid leukemia, in relapse -C9420 Acute megakaryoblastic leukemia not having achieved remission -C9421 Acute megakaryoblastic leukemia, in remission -C9422 Acute megakaryoblastic leukemia, in relapse -C9430 Mast cell leukemia not having achieved remission -C9431 Mast cell leukemia, in remission -C9432 Mast cell leukemia, in relapse -C9440 Acute panmyelosis with myelofibrosis not having achieved remission -C9441 Acute panmyelosis with myelofibrosis, in remission -C9442 Acute panmyelosis with myelofibrosis, in relapse -C946 Myelodysplastic disease, not classified -C9480 Other specified leukemias not having achieved remission -C9481 Other specified leukemias, in remission -C9482 Other specified leukemias, in relapse -C9500 Acute leukemia of unspecified cell type not having achieved remission -C9501 Acute leukemia of unspecified cell type, in remission -C9502 Acute leukemia of unspecified cell type, in relapse -C9510 Chronic leukemia of unspecified cell type not having achieved remission -C9511 Chronic leukemia of unspecified cell type, in remission -C9512 Chronic leukemia of unspecified cell type, in relapse -C9590 Leukemia, unspecified not having achieved remission -C9591 Leukemia, unspecified, in remission -C9592 Leukemia, unspecified, in relapse -C960 Multifocal and multisystemic (disseminated) Langerhans-cell histiocytosis -C962 Malignant mast cell tumor -C964 Sarcoma of dendritic cells (accessory cells) -C965 Multifocal and unisystemic Langerhans-cell histiocytosis -C966 Unifocal Langerhans-cell histiocytosis -C96A Histiocytic sarcoma -C96Z Other specified malignant neoplasms of lymphoid, hematopoietic and related tissue -C969 Malignant neoplasm of lymphoid, hematopoietic and related tissue, unspecified -D0000 Carcinoma in situ of oral cavity, unspecified site -D0001 Carcinoma in situ of labial mucosa and vermilion border -D0002 Carcinoma in situ of buccal mucosa -D0003 Carcinoma in situ of gingiva and edentulous alveolar ridge -D0004 Carcinoma in situ of soft palate -D0005 Carcinoma in situ of hard palate -D0006 Carcinoma in situ of floor of mouth -D0007 Carcinoma in situ of tongue -D0008 Carcinoma in situ of pharynx -D001 Carcinoma in situ of esophagus -D002 Carcinoma in situ of stomach -D010 Carcinoma in situ of colon -D011 Carcinoma in situ of rectosigmoid junction -D012 Carcinoma in situ of rectum -D013 Carcinoma in situ of anus and anal canal -D0140 Carcinoma in situ of unspecified part of intestine -D0149 Carcinoma in situ of other parts of intestine -D015 Carcinoma in situ of liver, gallbladder and bile ducts -D017 Carcinoma in situ of other specified digestive organs -D019 Carcinoma in situ of digestive organ, unspecified -D020 Carcinoma in situ of larynx -D021 Carcinoma in situ of trachea -D0220 Carcinoma in situ of unspecified bronchus and lung -D0221 Carcinoma in situ of right bronchus and lung -D0222 Carcinoma in situ of left bronchus and lung -D023 Carcinoma in situ of other parts of respiratory system -D024 Carcinoma in situ of respiratory system, unspecified -D030 Melanoma in situ of lip -D0310 Melanoma in situ of unspecified eyelid, including canthus -D0311 Melanoma in situ of right eyelid, including canthus -D0312 Melanoma in situ of left eyelid, including canthus -D0320 Melanoma in situ of unspecified ear and external auricular canal -D0321 Melanoma in situ of right ear and external auricular canal -D0322 Melanoma in situ of left ear and external auricular canal -D0330 Melanoma in situ of unspecified part of face -D0339 Melanoma in situ of other parts of face -D034 Melanoma in situ of scalp and neck -D0351 Melanoma in situ of anal skin -D0352 Melanoma in situ of breast (skin) (soft tissue) -D0359 Melanoma in situ of other part of trunk -D0360 Melanoma in situ of unspecified upper limb, including shoulder -D0361 Melanoma in situ of right upper limb, including shoulder -D0362 Melanoma in situ of left upper limb, including shoulder -D0370 Melanoma in situ of unspecified lower limb, including hip -D0371 Melanoma in situ of right lower limb, including hip -D0372 Melanoma in situ of left lower limb, including hip -D038 Melanoma in situ of other sites -D039 Melanoma in situ, unspecified -D040 Carcinoma in situ of skin of lip -D0410 Carcinoma in situ of skin of unspecified eyelid, including canthus -D0411 Carcinoma in situ of skin of right eyelid, including canthus -D0412 Carcinoma in situ of skin of left eyelid, including canthus -D0420 Carcinoma in situ of skin of unspecified ear and external auricular canal -D0421 Carcinoma in situ of skin of right ear and external auricular canal -D0422 Carcinoma in situ of skin of left ear and external auricular canal -D0430 Carcinoma in situ of skin of unspecified part of face -D0439 Carcinoma in situ of skin of other parts of face -D044 Carcinoma in situ of skin of scalp and neck -D045 Carcinoma in situ of skin of trunk -D0460 Carcinoma in situ of skin of unspecified upper limb, including shoulder -D0461 Carcinoma in situ of skin of right upper limb, including shoulder -D0462 Carcinoma in situ of skin of left upper limb, including shoulder -D0470 Carcinoma in situ of skin of unspecified lower limb, including hip -D0471 Carcinoma in situ of skin of right lower limb, including hip -D0472 Carcinoma in situ of skin of left lower limb, including hip -D048 Carcinoma in situ of skin of other sites -D049 Carcinoma in situ of skin, unspecified -D0500 Lobular carcinoma in situ of unspecified breast -D0501 Lobular carcinoma in situ of right breast -D0502 Lobular carcinoma in situ of left breast -D0510 Intraductal carcinoma in situ of unspecified breast -D0511 Intraductal carcinoma in situ of right breast -D0512 Intraductal carcinoma in situ of left breast -D0580 Other specified type of carcinoma in situ of unspecified breast -D0581 Other specified type of carcinoma in situ of right breast -D0582 Other specified type of carcinoma in situ of left breast -D0590 Unspecified type of carcinoma in situ of unspecified breast -D0591 Unspecified type of carcinoma in situ of right breast -D0592 Unspecified type of carcinoma in situ of left breast -D060 Carcinoma in situ of endocervix -D061 Carcinoma in situ of exocervix -D067 Carcinoma in situ of other parts of cervix -D069 Carcinoma in situ of cervix, unspecified -D070 Carcinoma in situ of endometrium -D071 Carcinoma in situ of vulva -D072 Carcinoma in situ of vagina -D0730 Carcinoma in situ of unspecified female genital organs -D0739 Carcinoma in situ of other female genital organs -D074 Carcinoma in situ of penis -D075 Carcinoma in situ of prostate -D0760 Carcinoma in situ of unspecified male genital organs -D0761 Carcinoma in situ of scrotum -D0769 Carcinoma in situ of other male genital organs -D090 Carcinoma in situ of bladder -D0910 Carcinoma in situ of unspecified urinary organ -D0919 Carcinoma in situ of other urinary organs -D0920 Carcinoma in situ of unspecified eye -D0921 Carcinoma in situ of right eye -D0922 Carcinoma in situ of left eye -D093 Carcinoma in situ of thyroid and other endocrine glands -D098 Carcinoma in situ of other specified sites -D099 Carcinoma in situ, unspecified -D100 Benign neoplasm of lip -D101 Benign neoplasm of tongue -D102 Benign neoplasm of floor of mouth -D1030 Benign neoplasm of unspecified part of mouth -D1039 Benign neoplasm of other parts of mouth -D104 Benign neoplasm of tonsil -D105 Benign neoplasm of other parts of oropharynx -D106 Benign neoplasm of nasopharynx -D107 Benign neoplasm of hypopharynx -D109 Benign neoplasm of pharynx, unspecified -D110 Benign neoplasm of parotid gland -D117 Benign neoplasm of other major salivary glands -D119 Benign neoplasm of major salivary gland, unspecified -D120 Benign neoplasm of cecum -D121 Benign neoplasm of appendix -D122 Benign neoplasm of ascending colon -D123 Benign neoplasm of transverse colon -D124 Benign neoplasm of descending colon -D125 Benign neoplasm of sigmoid colon -D126 Benign neoplasm of colon, unspecified -D127 Benign neoplasm of rectosigmoid junction -D128 Benign neoplasm of rectum -D129 Benign neoplasm of anus and anal canal -D130 Benign neoplasm of esophagus -D131 Benign neoplasm of stomach -D132 Benign neoplasm of duodenum -D1330 Benign neoplasm of unspecified part of small intestine -D1339 Benign neoplasm of other parts of small intestine -D134 Benign neoplasm of liver -D135 Benign neoplasm of extrahepatic bile ducts -D136 Benign neoplasm of pancreas -D137 Benign neoplasm of endocrine pancreas -D139 Benign neoplasm of ill-defined sites within the digestive system -D140 Benign neoplasm of middle ear, nasal cavity and accessory sinuses -D141 Benign neoplasm of larynx -D142 Benign neoplasm of trachea -D1430 Benign neoplasm of unspecified bronchus and lung -D1431 Benign neoplasm of right bronchus and lung -D1432 Benign neoplasm of left bronchus and lung -D144 Benign neoplasm of respiratory system, unspecified -D150 Benign neoplasm of thymus -D151 Benign neoplasm of heart -D152 Benign neoplasm of mediastinum -D157 Benign neoplasm of other specified intrathoracic organs -D159 Benign neoplasm of intrathoracic organ, unspecified -D1600 Benign neoplasm of scapula and long bones of unspecified upper limb -D1601 Benign neoplasm of scapula and long bones of right upper limb -D1602 Benign neoplasm of scapula and long bones of left upper limb -D1610 Benign neoplasm of short bones of unspecified upper limb -D1611 Benign neoplasm of short bones of right upper limb -D1612 Benign neoplasm of short bones of left upper limb -D1620 Benign neoplasm of long bones of unspecified lower limb -D1621 Benign neoplasm of long bones of right lower limb -D1622 Benign neoplasm of long bones of left lower limb -D1630 Benign neoplasm of short bones of unspecified lower limb -D1631 Benign neoplasm of short bones of right lower limb -D1632 Benign neoplasm of short bones of left lower limb -D164 Benign neoplasm of bones of skull and face -D165 Benign neoplasm of lower jaw bone -D166 Benign neoplasm of vertebral column -D167 Benign neoplasm of ribs, sternum and clavicle -D168 Benign neoplasm of pelvic bones, sacrum and coccyx -D169 Benign neoplasm of bone and articular cartilage, unspecified -D170 Benign lipomatous neoplasm of skin and subcutaneous tissue of head, face and neck -D171 Benign lipomatous neoplasm of skin and subcutaneous tissue of trunk -D1720 Benign lipomatous neoplasm of skin and subcutaneous tissue of unspecified limb -D1721 Benign lipomatous neoplasm of skin and subcutaneous tissue of right arm -D1722 Benign lipomatous neoplasm of skin and subcutaneous tissue of left arm -D1723 Benign lipomatous neoplasm of skin and subcutaneous tissue of right leg -D1724 Benign lipomatous neoplasm of skin and subcutaneous tissue of left leg -D1730 Benign lipomatous neoplasm of skin and subcutaneous tissue of unspecified sites -D1739 Benign lipomatous neoplasm of skin and subcutaneous tissue of other sites -D174 Benign lipomatous neoplasm of intrathoracic organs -D175 Benign lipomatous neoplasm of intra-abdominal organs -D176 Benign lipomatous neoplasm of spermatic cord -D1771 Benign lipomatous neoplasm of kidney -D1772 Benign lipomatous neoplasm of other genitourinary organ -D1779 Benign lipomatous neoplasm of other sites -D179 Benign lipomatous neoplasm, unspecified -D1800 Hemangioma unspecified site -D1801 Hemangioma of skin and subcutaneous tissue -D1802 Hemangioma of intracranial structures -D1803 Hemangioma of intra-abdominal structures -D1809 Hemangioma of other sites -D181 Lymphangioma, any site -D190 Benign neoplasm of mesothelial tissue of pleura -D191 Benign neoplasm of mesothelial tissue of peritoneum -D197 Benign neoplasm of mesothelial tissue of other sites -D199 Benign neoplasm of mesothelial tissue, unspecified -D200 Benign neoplasm of soft tissue of retroperitoneum -D201 Benign neoplasm of soft tissue of peritoneum -D210 Benign neoplasm of connective and other soft tissue of head, face and neck -D2110 Benign neoplasm of connective and other soft tissue of unspecified upper limb, including shoulder -D2111 Benign neoplasm of connective and other soft tissue of right upper limb, including shoulder -D2112 Benign neoplasm of connective and other soft tissue of left upper limb, including shoulder -D2120 Benign neoplasm of connective and other soft tissue of unspecified lower limb, including hip -D2121 Benign neoplasm of connective and other soft tissue of right lower limb, including hip -D2122 Benign neoplasm of connective and other soft tissue of left lower limb, including hip -D213 Benign neoplasm of connective and other soft tissue of thorax -D214 Benign neoplasm of connective and other soft tissue of abdomen -D215 Benign neoplasm of connective and other soft tissue of pelvis -D216 Benign neoplasm of connective and other soft tissue of trunk, unspecified -D219 Benign neoplasm of connective and other soft tissue, unspecified -D220 Melanocytic nevi of lip -D2210 Melanocytic nevi of unspecified eyelid, including canthus -D2211 Melanocytic nevi of right eyelid, including canthus -D2212 Melanocytic nevi of left eyelid, including canthus -D2220 Melanocytic nevi of unspecified ear and external auricular canal -D2221 Melanocytic nevi of right ear and external auricular canal -D2222 Melanocytic nevi of left ear and external auricular canal -D2230 Melanocytic nevi of unspecified part of face -D2239 Melanocytic nevi of other parts of face -D224 Melanocytic nevi of scalp and neck -D225 Melanocytic nevi of trunk -D2260 Melanocytic nevi of unspecified upper limb, including shoulder -D2261 Melanocytic nevi of right upper limb, including shoulder -D2262 Melanocytic nevi of left upper limb, including shoulder -D2270 Melanocytic nevi of unspecified lower limb, including hip -D2271 Melanocytic nevi of right lower limb, including hip -D2272 Melanocytic nevi of left lower limb, including hip -D229 Melanocytic nevi, unspecified -D230 Other benign neoplasm of skin of lip -D2310 Other benign neoplasm of skin of unspecified eyelid, including canthus -D2311 Other benign neoplasm of skin of right eyelid, including canthus -D2312 Other benign neoplasm of skin of left eyelid, including canthus -D2320 Other benign neoplasm of skin of unspecified ear and external auricular canal -D2321 Other benign neoplasm of skin of right ear and external auricular canal -D2322 Other benign neoplasm of skin of left ear and external auricular canal -D2330 Other benign neoplasm of skin of unspecified part of face -D2339 Other benign neoplasm of skin of other parts of face -D234 Other benign neoplasm of skin of scalp and neck -D235 Other benign neoplasm of skin of trunk -D2360 Other benign neoplasm of skin of unspecified upper limb, including shoulder -D2361 Other benign neoplasm of skin of right upper limb, including shoulder -D2362 Other benign neoplasm of skin of left upper limb, including shoulder -D2370 Other benign neoplasm of skin of unspecified lower limb, including hip -D2371 Other benign neoplasm of skin of right lower limb, including hip -D2372 Other benign neoplasm of skin of left lower limb, including hip -D239 Other benign neoplasm of skin, unspecified -D241 Benign neoplasm of right breast -D242 Benign neoplasm of left breast -D249 Benign neoplasm of unspecified breast -D250 Submucous leiomyoma of uterus -D251 Intramural leiomyoma of uterus -D252 Subserosal leiomyoma of uterus -D259 Leiomyoma of uterus, unspecified -D260 Other benign neoplasm of cervix uteri -D261 Other benign neoplasm of corpus uteri -D267 Other benign neoplasm of other parts of uterus -D269 Other benign neoplasm of uterus, unspecified -D270 Benign neoplasm of right ovary -D271 Benign neoplasm of left ovary -D279 Benign neoplasm of unspecified ovary -D280 Benign neoplasm of vulva -D281 Benign neoplasm of vagina -D282 Benign neoplasm of uterine tubes and ligaments -D287 Benign neoplasm of other specified female genital organs -D289 Benign neoplasm of female genital organ, unspecified -D290 Benign neoplasm of penis -D291 Benign neoplasm of prostate -D2920 Benign neoplasm of unspecified testis -D2921 Benign neoplasm of right testis -D2922 Benign neoplasm of left testis -D2930 Benign neoplasm of unspecified epididymis -D2931 Benign neoplasm of right epididymis -D2932 Benign neoplasm of left epididymis -D294 Benign neoplasm of scrotum -D298 Benign neoplasm of other specified male genital organs -D299 Benign neoplasm of male genital organ, unspecified -D3000 Benign neoplasm of unspecified kidney -D3001 Benign neoplasm of right kidney -D3002 Benign neoplasm of left kidney -D3010 Benign neoplasm of unspecified renal pelvis -D3011 Benign neoplasm of right renal pelvis -D3012 Benign neoplasm of left renal pelvis -D3020 Benign neoplasm of unspecified ureter -D3021 Benign neoplasm of right ureter -D3022 Benign neoplasm of left ureter -D303 Benign neoplasm of bladder -D304 Benign neoplasm of urethra -D308 Benign neoplasm of other specified urinary organs -D309 Benign neoplasm of urinary organ, unspecified -D3100 Benign neoplasm of unspecified conjunctiva -D3101 Benign neoplasm of right conjunctiva -D3102 Benign neoplasm of left conjunctiva -D3110 Benign neoplasm of unspecified cornea -D3111 Benign neoplasm of right cornea -D3112 Benign neoplasm of left cornea -D3120 Benign neoplasm of unspecified retina -D3121 Benign neoplasm of right retina -D3122 Benign neoplasm of left retina -D3130 Benign neoplasm of unspecified choroid -D3131 Benign neoplasm of right choroid -D3132 Benign neoplasm of left choroid -D3140 Benign neoplasm of unspecified ciliary body -D3141 Benign neoplasm of right ciliary body -D3142 Benign neoplasm of left ciliary body -D3150 Benign neoplasm of unspecified lacrimal gland and duct -D3151 Benign neoplasm of right lacrimal gland and duct -D3152 Benign neoplasm of left lacrimal gland and duct -D3160 Benign neoplasm of unspecified site of unspecified orbit -D3161 Benign neoplasm of unspecified site of right orbit -D3162 Benign neoplasm of unspecified site of left orbit -D3190 Benign neoplasm of unspecified part of unspecified eye -D3191 Benign neoplasm of unspecified part of right eye -D3192 Benign neoplasm of unspecified part of left eye -D320 Benign neoplasm of cerebral meninges -D321 Benign neoplasm of spinal meninges -D329 Benign neoplasm of meninges, unspecified -D330 Benign neoplasm of brain, supratentorial -D331 Benign neoplasm of brain, infratentorial -D332 Benign neoplasm of brain, unspecified -D333 Benign neoplasm of cranial nerves -D334 Benign neoplasm of spinal cord -D337 Benign neoplasm of other specified parts of central nervous system -D339 Benign neoplasm of central nervous system, unspecified -D34 Benign neoplasm of thyroid gland -D3500 Benign neoplasm of unspecified adrenal gland -D3501 Benign neoplasm of right adrenal gland -D3502 Benign neoplasm of left adrenal gland -D351 Benign neoplasm of parathyroid gland -D352 Benign neoplasm of pituitary gland -D353 Benign neoplasm of craniopharyngeal duct -D354 Benign neoplasm of pineal gland -D355 Benign neoplasm of carotid body -D356 Benign neoplasm of aortic body and other paraganglia -D357 Benign neoplasm of other specified endocrine glands -D359 Benign neoplasm of endocrine gland, unspecified -D360 Benign neoplasm of lymph nodes -D3610 Benign neoplasm of peripheral nerves and autonomic nervous system, unspecified -D3611 Benign neoplasm of peripheral nerves and autonomic nervous system of face, head, and neck -D3612 Benign neoplasm of peripheral nerves and autonomic nervous system, upper limb, including shoulder -D3613 Benign neoplasm of peripheral nerves and autonomic nervous system of lower limb, including hip -D3614 Benign neoplasm of peripheral nerves and autonomic nervous system of thorax -D3615 Benign neoplasm of peripheral nerves and autonomic nervous system of abdomen -D3616 Benign neoplasm of peripheral nerves and autonomic nervous system of pelvis -D3617 Benign neoplasm of peripheral nerves and autonomic nervous system of trunk, unspecified -D367 Benign neoplasm of other specified sites -D369 Benign neoplasm, unspecified site -D3A00 Benign carcinoid tumor of unspecified site -D3A010 Benign carcinoid tumor of the duodenum -D3A011 Benign carcinoid tumor of the jejunum -D3A012 Benign carcinoid tumor of the ileum -D3A019 Benign carcinoid tumor of the small intestine, unspecified portion -D3A020 Benign carcinoid tumor of the appendix -D3A021 Benign carcinoid tumor of the cecum -D3A022 Benign carcinoid tumor of the ascending colon -D3A023 Benign carcinoid tumor of the transverse colon -D3A024 Benign carcinoid tumor of the descending colon -D3A025 Benign carcinoid tumor of the sigmoid colon -D3A026 Benign carcinoid tumor of the rectum -D3A029 Benign carcinoid tumor of the large intestine, unspecified portion -D3A090 Benign carcinoid tumor of the bronchus and lung -D3A091 Benign carcinoid tumor of the thymus -D3A092 Benign carcinoid tumor of the stomach -D3A093 Benign carcinoid tumor of the kidney -D3A094 Benign carcinoid tumor of the foregut, unspecified -D3A095 Benign carcinoid tumor of the midgut, unspecified -D3A096 Benign carcinoid tumor of the hindgut, unspecified -D3A098 Benign carcinoid tumors of other sites -D3A8 Other benign neuroendocrine tumors -D3701 Neoplasm of uncertain behavior of lip -D3702 Neoplasm of uncertain behavior of tongue -D37030 Neoplasm of uncertain behavior of the parotid salivary glands -D37031 Neoplasm of uncertain behavior of the sublingual salivary glands -D37032 Neoplasm of uncertain behavior of the submandibular salivary glands -D37039 Neoplasm of uncertain behavior of the major salivary glands, unspecified -D3704 Neoplasm of uncertain behavior of the minor salivary glands -D3705 Neoplasm of uncertain behavior of pharynx -D3709 Neoplasm of uncertain behavior of other specified sites of the oral cavity -D371 Neoplasm of uncertain behavior of stomach -D372 Neoplasm of uncertain behavior of small intestine -D373 Neoplasm of uncertain behavior of appendix -D374 Neoplasm of uncertain behavior of colon -D375 Neoplasm of uncertain behavior of rectum -D376 Neoplasm of uncertain behavior of liver, gallbladder and bile ducts -D378 Neoplasm of uncertain behavior of other specified digestive organs -D379 Neoplasm of uncertain behavior of digestive organ, unspecified -D380 Neoplasm of uncertain behavior of larynx -D381 Neoplasm of uncertain behavior of trachea, bronchus and lung -D382 Neoplasm of uncertain behavior of pleura -D383 Neoplasm of uncertain behavior of mediastinum -D384 Neoplasm of uncertain behavior of thymus -D385 Neoplasm of uncertain behavior of other respiratory organs -D386 Neoplasm of uncertain behavior of respiratory organ, unspecified -D390 Neoplasm of uncertain behavior of uterus -D3910 Neoplasm of uncertain behavior of unspecified ovary -D3911 Neoplasm of uncertain behavior of right ovary -D3912 Neoplasm of uncertain behavior of left ovary -D392 Neoplasm of uncertain behavior of placenta -D398 Neoplasm of uncertain behavior of other specified female genital organs -D399 Neoplasm of uncertain behavior of female genital organ, unspecified -D400 Neoplasm of uncertain behavior of prostate -D4010 Neoplasm of uncertain behavior of unspecified testis -D4011 Neoplasm of uncertain behavior of right testis -D4012 Neoplasm of uncertain behavior of left testis -D408 Neoplasm of uncertain behavior of other specified male genital organs -D409 Neoplasm of uncertain behavior of male genital organ, unspecified -D4100 Neoplasm of uncertain behavior of unspecified kidney -D4101 Neoplasm of uncertain behavior of right kidney -D4102 Neoplasm of uncertain behavior of left kidney -D4110 Neoplasm of uncertain behavior of unspecified renal pelvis -D4111 Neoplasm of uncertain behavior of right renal pelvis -D4112 Neoplasm of uncertain behavior of left renal pelvis -D4120 Neoplasm of uncertain behavior of unspecified ureter -D4121 Neoplasm of uncertain behavior of right ureter -D4122 Neoplasm of uncertain behavior of left ureter -D413 Neoplasm of uncertain behavior of urethra -D414 Neoplasm of uncertain behavior of bladder -D418 Neoplasm of uncertain behavior of other specified urinary organs -D419 Neoplasm of uncertain behavior of unspecified urinary organ -D420 Neoplasm of uncertain behavior of cerebral meninges -D421 Neoplasm of uncertain behavior of spinal meninges -D429 Neoplasm of uncertain behavior of meninges, unspecified -D430 Neoplasm of uncertain behavior of brain, supratentorial -D431 Neoplasm of uncertain behavior of brain, infratentorial -D432 Neoplasm of uncertain behavior of brain, unspecified -D433 Neoplasm of uncertain behavior of cranial nerves -D434 Neoplasm of uncertain behavior of spinal cord -D438 Neoplasm of uncertain behavior of other specified parts of central nervous system -D439 Neoplasm of uncertain behavior of central nervous system, unspecified -D440 Neoplasm of uncertain behavior of thyroid gland -D4410 Neoplasm of uncertain behavior of unspecified adrenal gland -D4411 Neoplasm of uncertain behavior of right adrenal gland -D4412 Neoplasm of uncertain behavior of left adrenal gland -D442 Neoplasm of uncertain behavior of parathyroid gland -D443 Neoplasm of uncertain behavior of pituitary gland -D444 Neoplasm of uncertain behavior of craniopharyngeal duct -D445 Neoplasm of uncertain behavior of pineal gland -D446 Neoplasm of uncertain behavior of carotid body -D447 Neoplasm of uncertain behavior of aortic body and other paraganglia -D449 Neoplasm of uncertain behavior of unspecified endocrine gland -D45 Polycythemia vera -D460 Refractory anemia without ring sideroblasts, so stated -D461 Refractory anemia with ring sideroblasts -D4620 Refractory anemia with excess of blasts, unspecified -D4621 Refractory anemia with excess of blasts 1 -D4622 Refractory anemia with excess of blasts 2 -D46A Refractory cytopenia with multilineage dysplasia -D46B Refractory cytopenia with multilineage dysplasia and ring sideroblasts -D46C Myelodysplastic syndrome with isolated del(5q) chromosomal abnormality -D464 Refractory anemia, unspecified -D46Z Other myelodysplastic syndromes -D469 Myelodysplastic syndrome, unspecified -D470 Histiocytic and mast cell tumors of uncertain behavior -D471 Chronic myeloproliferative disease -D472 Monoclonal gammopathy -D473 Essential (hemorrhagic) thrombocythemia -D474 Osteomyelofibrosis -D47Z1 Post-transplant lymphoproliferative disorder (PTLD) -D47Z2 Castleman disease -D47Z9 Other specified neoplasms of uncertain behavior of lymphoid, hematopoietic and related tissue -D479 Neoplasm of uncertain behavior of lymphoid, hematopoietic and related tissue, unspecified -D480 Neoplasm of uncertain behavior of bone and articular cartilage -D481 Neoplasm of uncertain behavior of connective and other soft tissue -D482 Neoplasm of uncertain behavior of peripheral nerves and autonomic nervous system -D483 Neoplasm of uncertain behavior of retroperitoneum -D484 Neoplasm of uncertain behavior of peritoneum -D485 Neoplasm of uncertain behavior of skin -D4860 Neoplasm of uncertain behavior of unspecified breast -D4861 Neoplasm of uncertain behavior of right breast -D4862 Neoplasm of uncertain behavior of left breast -D487 Neoplasm of uncertain behavior of other specified sites -D489 Neoplasm of uncertain behavior, unspecified -D490 Neoplasm of unspecified behavior of digestive system -D491 Neoplasm of unspecified behavior of respiratory system -D492 Neoplasm of unspecified behavior of bone, soft tissue, and skin -D493 Neoplasm of unspecified behavior of breast -D494 Neoplasm of unspecified behavior of bladder -D49511 Neoplasm of unspecified behavior of right kidney -D49512 Neoplasm of unspecified behavior of left kidney -D49519 Neoplasm of unspecified behavior of unspecified kidney -D4959 Neoplasm of unspecified behavior of other genitourinary organ -D496 Neoplasm of unspecified behavior of brain -D497 Neoplasm of unspecified behavior of endocrine glands and other parts of nervous system -D4981 Neoplasm of unspecified behavior of retina and choroid -D4989 Neoplasm of unspecified behavior of other specified sites -D499 Neoplasm of unspecified behavior of unspecified site -D500 Iron deficiency anemia secondary to blood loss (chronic) -D501 Sideropenic dysphagia -D508 Other iron deficiency anemias -D509 Iron deficiency anemia, unspecified -D510 Vitamin B12 deficiency anemia due to intrinsic factor deficiency -D511 Vitamin B12 deficiency anemia due to selective vitamin B12 malabsorption with proteinuria -D512 Transcobalamin II deficiency -D513 Other dietary vitamin B12 deficiency anemia -D518 Other vitamin B12 deficiency anemias -D519 Vitamin B12 deficiency anemia, unspecified -D520 Dietary folate deficiency anemia -D521 Drug-induced folate deficiency anemia -D528 Other folate deficiency anemias -D529 Folate deficiency anemia, unspecified -D530 Protein deficiency anemia -D531 Other megaloblastic anemias, not elsewhere classified -D532 Scorbutic anemia -D538 Other specified nutritional anemias -D539 Nutritional anemia, unspecified -D550 Anemia due to glucose-6-phosphate dehydrogenase [G6PD] deficiency -D551 Anemia due to other disorders of glutathione metabolism -D552 Anemia due to disorders of glycolytic enzymes -D553 Anemia due to disorders of nucleotide metabolism -D558 Other anemias due to enzyme disorders -D559 Anemia due to enzyme disorder, unspecified -D560 Alpha thalassemia -D561 Beta thalassemia -D562 Delta-beta thalassemia -D563 Thalassemia minor -D564 Hereditary persistence of fetal hemoglobin [HPFH] -D565 Hemoglobin E-beta thalassemia -D568 Other thalassemias -D569 Thalassemia, unspecified -D5700 Hb-SS disease with crisis, unspecified -D5701 Hb-SS disease with acute chest syndrome -D5702 Hb-SS disease with splenic sequestration -D571 Sickle-cell disease without crisis -D5720 Sickle-cell/Hb-C disease without crisis -D57211 Sickle-cell/Hb-C disease with acute chest syndrome -D57212 Sickle-cell/Hb-C disease with splenic sequestration -D57219 Sickle-cell/Hb-C disease with crisis, unspecified -D573 Sickle-cell trait -D5740 Sickle-cell thalassemia without crisis -D57411 Sickle-cell thalassemia with acute chest syndrome -D57412 Sickle-cell thalassemia with splenic sequestration -D57419 Sickle-cell thalassemia with crisis, unspecified -D5780 Other sickle-cell disorders without crisis -D57811 Other sickle-cell disorders with acute chest syndrome -D57812 Other sickle-cell disorders with splenic sequestration -D57819 Other sickle-cell disorders with crisis, unspecified -D580 Hereditary spherocytosis -D581 Hereditary elliptocytosis -D582 Other hemoglobinopathies -D588 Other specified hereditary hemolytic anemias -D589 Hereditary hemolytic anemia, unspecified -D590 Drug-induced autoimmune hemolytic anemia -D591 Other autoimmune hemolytic anemias -D592 Drug-induced nonautoimmune hemolytic anemia -D593 Hemolytic-uremic syndrome -D594 Other nonautoimmune hemolytic anemias -D595 Paroxysmal nocturnal hemoglobinuria [Marchiafava-Micheli] -D596 Hemoglobinuria due to hemolysis from other external causes -D598 Other acquired hemolytic anemias -D599 Acquired hemolytic anemia, unspecified -D600 Chronic acquired pure red cell aplasia -D601 Transient acquired pure red cell aplasia -D608 Other acquired pure red cell aplasias -D609 Acquired pure red cell aplasia, unspecified -D6101 Constitutional (pure) red blood cell aplasia -D6109 Other constitutional aplastic anemia -D611 Drug-induced aplastic anemia -D612 Aplastic anemia due to other external agents -D613 Idiopathic aplastic anemia -D61810 Antineoplastic chemotherapy induced pancytopenia -D61811 Other drug-induced pancytopenia -D61818 Other pancytopenia -D6182 Myelophthisis -D6189 Other specified aplastic anemias and other bone marrow failure syndromes -D619 Aplastic anemia, unspecified -D62 Acute posthemorrhagic anemia -D630 Anemia in neoplastic disease -D631 Anemia in chronic kidney disease -D638 Anemia in other chronic diseases classified elsewhere -D640 Hereditary sideroblastic anemia -D641 Secondary sideroblastic anemia due to disease -D642 Secondary sideroblastic anemia due to drugs and toxins -D643 Other sideroblastic anemias -D644 Congenital dyserythropoietic anemia -D6481 Anemia due to antineoplastic chemotherapy -D6489 Other specified anemias -D649 Anemia, unspecified -D65 Disseminated intravascular coagulation [defibrination syndrome] -D66 Hereditary factor VIII deficiency -D67 Hereditary factor IX deficiency -D680 Von Willebrand's disease -D681 Hereditary factor XI deficiency -D682 Hereditary deficiency of other clotting factors -D68311 Acquired hemophilia -D68312 Antiphospholipid antibody with hemorrhagic disorder -D68318 Other hemorrhagic disorder due to intrinsic circulating anticoagulants, antibodies, or inhibitors -D6832 Hemorrhagic disorder due to extrinsic circulating anticoagulants -D684 Acquired coagulation factor deficiency -D6851 Activated protein C resistance -D6852 Prothrombin gene mutation -D6859 Other primary thrombophilia -D6861 Antiphospholipid syndrome -D6862 Lupus anticoagulant syndrome -D6869 Other thrombophilia -D688 Other specified coagulation defects -D689 Coagulation defect, unspecified -D690 Allergic purpura -D691 Qualitative platelet defects -D692 Other nonthrombocytopenic purpura -D693 Immune thrombocytopenic purpura -D6941 Evans syndrome -D6942 Congenital and hereditary thrombocytopenia purpura -D6949 Other primary thrombocytopenia -D6951 Posttransfusion purpura -D6959 Other secondary thrombocytopenia -D696 Thrombocytopenia, unspecified -D698 Other specified hemorrhagic conditions -D699 Hemorrhagic condition, unspecified -D700 Congenital agranulocytosis -D701 Agranulocytosis secondary to cancer chemotherapy -D702 Other drug-induced agranulocytosis -D703 Neutropenia due to infection -D704 Cyclic neutropenia -D708 Other neutropenia -D709 Neutropenia, unspecified -D71 Functional disorders of polymorphonuclear neutrophils -D720 Genetic anomalies of leukocytes -D721 Eosinophilia -D72810 Lymphocytopenia -D72818 Other decreased white blood cell count -D72819 Decreased white blood cell count, unspecified -D72820 Lymphocytosis (symptomatic) -D72821 Monocytosis (symptomatic) -D72822 Plasmacytosis -D72823 Leukemoid reaction -D72824 Basophilia -D72825 Bandemia -D72828 Other elevated white blood cell count -D72829 Elevated white blood cell count, unspecified -D7289 Other specified disorders of white blood cells -D729 Disorder of white blood cells, unspecified -D730 Hyposplenism -D731 Hypersplenism -D732 Chronic congestive splenomegaly -D733 Abscess of spleen -D734 Cyst of spleen -D735 Infarction of spleen -D7381 Neutropenic splenomegaly -D7389 Other diseases of spleen -D739 Disease of spleen, unspecified -D740 Congenital methemoglobinemia -D748 Other methemoglobinemias -D749 Methemoglobinemia, unspecified -D750 Familial erythrocytosis -D751 Secondary polycythemia -D7581 Myelofibrosis -D7582 Heparin induced thrombocytopenia (HIT) -D7589 Other specified diseases of blood and blood-forming organs -D759 Disease of blood and blood-forming organs, unspecified -D761 Hemophagocytic lymphohistiocytosis -D762 Hemophagocytic syndrome, infection-associated -D763 Other histiocytosis syndromes -D77 Other disorders of blood and blood-forming organs in diseases classified elsewhere -D7801 Intraoperative hemorrhage and hematoma of the spleen complicating a procedure on the spleen -D7802 Intraoperative hemorrhage and hematoma of the spleen complicating other procedure -D7811 Accidental puncture and laceration of the spleen during a procedure on the spleen -D7812 Accidental puncture and laceration of the spleen during other procedure -D7821 Postprocedural hemorrhage of the spleen following a procedure on the spleen -D7822 Postprocedural hemorrhage of the spleen following other procedure -D7831 Postprocedural hematoma of the spleen following a procedure on the spleen -D7832 Postprocedural hematoma of the spleen following other procedure -D7833 Postprocedural seroma of the spleen following a procedure on the spleen -D7834 Postprocedural seroma of the spleen following other procedure -D7881 Other intraoperative complications of the spleen -D7889 Other postprocedural complications of the spleen -D800 Hereditary hypogammaglobulinemia -D801 Nonfamilial hypogammaglobulinemia -D802 Selective deficiency of immunoglobulin A [IgA] -D803 Selective deficiency of immunoglobulin G [IgG] subclasses -D804 Selective deficiency of immunoglobulin M [IgM] -D805 Immunodeficiency with increased immunoglobulin M [IgM] -D806 Antibody deficiency with near-normal immunoglobulins or with hyperimmunoglobulinemia -D807 Transient hypogammaglobulinemia of infancy -D808 Other immunodeficiencies with predominantly antibody defects -D809 Immunodeficiency with predominantly antibody defects, unspecified -D810 Severe combined immunodeficiency [SCID] with reticular dysgenesis -D811 Severe combined immunodeficiency [SCID] with low T- and B-cell numbers -D812 Severe combined immunodeficiency [SCID] with low or normal B-cell numbers -D813 Adenosine deaminase [ADA] deficiency -D814 Nezelof's syndrome -D815 Purine nucleoside phosphorylase [PNP] deficiency -D816 Major histocompatibility complex class I deficiency -D817 Major histocompatibility complex class II deficiency -D81810 Biotinidase deficiency -D81818 Other biotin-dependent carboxylase deficiency -D81819 Biotin-dependent carboxylase deficiency, unspecified -D8189 Other combined immunodeficiencies -D819 Combined immunodeficiency, unspecified -D820 Wiskott-Aldrich syndrome -D821 Di George's syndrome -D822 Immunodeficiency with short-limbed stature -D823 Immunodeficiency following hereditary defective response to Epstein-Barr virus -D824 Hyperimmunoglobulin E [IgE] syndrome -D828 Immunodeficiency associated with other specified major defects -D829 Immunodeficiency associated with major defect, unspecified -D830 Common variable immunodeficiency with predominant abnormalities of B-cell numbers and function -D831 Common variable immunodeficiency with predominant immunoregulatory T-cell disorders -D832 Common variable immunodeficiency with autoantibodies to B- or T-cells -D838 Other common variable immunodeficiencies -D839 Common variable immunodeficiency, unspecified -D840 Lymphocyte function antigen-1 [LFA-1] defect -D841 Defects in the complement system -D848 Other specified immunodeficiencies -D849 Immunodeficiency, unspecified -D860 Sarcoidosis of lung -D861 Sarcoidosis of lymph nodes -D862 Sarcoidosis of lung with sarcoidosis of lymph nodes -D863 Sarcoidosis of skin -D8681 Sarcoid meningitis -D8682 Multiple cranial nerve palsies in sarcoidosis -D8683 Sarcoid iridocyclitis -D8684 Sarcoid pyelonephritis -D8685 Sarcoid myocarditis -D8686 Sarcoid arthropathy -D8687 Sarcoid myositis -D8689 Sarcoidosis of other sites -D869 Sarcoidosis, unspecified -D890 Polyclonal hypergammaglobulinemia -D891 Cryoglobulinemia -D892 Hypergammaglobulinemia, unspecified -D893 Immune reconstitution syndrome -D8940 Mast cell activation, unspecified -D8941 Monoclonal mast cell activation syndrome -D8942 Idiopathic mast cell activation syndrome -D8943 Secondary mast cell activation -D8949 Other mast cell activation disorder -D89810 Acute graft-versus-host disease -D89811 Chronic graft-versus-host disease -D89812 Acute on chronic graft-versus-host disease -D89813 Graft-versus-host disease, unspecified -D8982 Autoimmune lymphoproliferative syndrome [ALPS] -D8989 Other specified disorders involving the immune mechanism, not elsewhere classified -D899 Disorder involving the immune mechanism, unspecified -E000 Congenital iodine-deficiency syndrome, neurological type -E001 Congenital iodine-deficiency syndrome, myxedematous type -E002 Congenital iodine-deficiency syndrome, mixed type -E009 Congenital iodine-deficiency syndrome, unspecified -E010 Iodine-deficiency related diffuse (endemic) goiter -E011 Iodine-deficiency related multinodular (endemic) goiter -E012 Iodine-deficiency related (endemic) goiter, unspecified -E018 Other iodine-deficiency related thyroid disorders and allied conditions -E02 Subclinical iodine-deficiency hypothyroidism -E030 Congenital hypothyroidism with diffuse goiter -E031 Congenital hypothyroidism without goiter -E032 Hypothyroidism due to medicaments and other exogenous substances -E033 Postinfectious hypothyroidism -E034 Atrophy of thyroid (acquired) -E035 Myxedema coma -E038 Other specified hypothyroidism -E039 Hypothyroidism, unspecified -E040 Nontoxic diffuse goiter -E041 Nontoxic single thyroid nodule -E042 Nontoxic multinodular goiter -E048 Other specified nontoxic goiter -E049 Nontoxic goiter, unspecified -E0500 Thyrotoxicosis with diffuse goiter without thyrotoxic crisis or storm -E0501 Thyrotoxicosis with diffuse goiter with thyrotoxic crisis or storm -E0510 Thyrotoxicosis with toxic single thyroid nodule without thyrotoxic crisis or storm -E0511 Thyrotoxicosis with toxic single thyroid nodule with thyrotoxic crisis or storm -E0520 Thyrotoxicosis with toxic multinodular goiter without thyrotoxic crisis or storm -E0521 Thyrotoxicosis with toxic multinodular goiter with thyrotoxic crisis or storm -E0530 Thyrotoxicosis from ectopic thyroid tissue without thyrotoxic crisis or storm -E0531 Thyrotoxicosis from ectopic thyroid tissue with thyrotoxic crisis or storm -E0540 Thyrotoxicosis factitia without thyrotoxic crisis or storm -E0541 Thyrotoxicosis factitia with thyrotoxic crisis or storm -E0580 Other thyrotoxicosis without thyrotoxic crisis or storm -E0581 Other thyrotoxicosis with thyrotoxic crisis or storm -E0590 Thyrotoxicosis, unspecified without thyrotoxic crisis or storm -E0591 Thyrotoxicosis, unspecified with thyrotoxic crisis or storm -E060 Acute thyroiditis -E061 Subacute thyroiditis -E062 Chronic thyroiditis with transient thyrotoxicosis -E063 Autoimmune thyroiditis -E064 Drug-induced thyroiditis -E065 Other chronic thyroiditis -E069 Thyroiditis, unspecified -E070 Hypersecretion of calcitonin -E071 Dyshormogenetic goiter -E0781 Sick-euthyroid syndrome -E0789 Other specified disorders of thyroid -E079 Disorder of thyroid, unspecified -E0800 Diabetes mellitus due to underlying condition with hyperosmolarity without nonketotic hyperglycemic-hyperosmolar coma (NKHHC) -E0801 Diabetes mellitus due to underlying condition with hyperosmolarity with coma -E0810 Diabetes mellitus due to underlying condition with ketoacidosis without coma -E0811 Diabetes mellitus due to underlying condition with ketoacidosis with coma -E0821 Diabetes mellitus due to underlying condition with diabetic nephropathy -E0822 Diabetes mellitus due to underlying condition with diabetic chronic kidney disease -E0829 Diabetes mellitus due to underlying condition with other diabetic kidney complication -E08311 Diabetes mellitus due to underlying condition with unspecified diabetic retinopathy with macular edema -E08319 Diabetes mellitus due to underlying condition with unspecified diabetic retinopathy without macular edema -E083211 Diabetes mellitus due to underlying condition with mild nonproliferative diabetic retinopathy with macular edema, right eye -E083212 Diabetes mellitus due to underlying condition with mild nonproliferative diabetic retinopathy with macular edema, left eye -E083213 Diabetes mellitus due to underlying condition with mild nonproliferative diabetic retinopathy with macular edema, bilateral -E083219 Diabetes mellitus due to underlying condition with mild nonproliferative diabetic retinopathy with macular edema, unspecified eye -E083291 Diabetes mellitus due to underlying condition with mild nonproliferative diabetic retinopathy without macular edema, right eye -E083292 Diabetes mellitus due to underlying condition with mild nonproliferative diabetic retinopathy without macular edema, left eye -E083293 Diabetes mellitus due to underlying condition with mild nonproliferative diabetic retinopathy without macular edema, bilateral -E083299 Diabetes mellitus due to underlying condition with mild nonproliferative diabetic retinopathy without macular edema, unspecified eye -E083311 Diabetes mellitus due to underlying condition with moderate nonproliferative diabetic retinopathy with macular edema, right eye -E083312 Diabetes mellitus due to underlying condition with moderate nonproliferative diabetic retinopathy with macular edema, left eye -E083313 Diabetes mellitus due to underlying condition with moderate nonproliferative diabetic retinopathy with macular edema, bilateral -E083319 Diabetes mellitus due to underlying condition with moderate nonproliferative diabetic retinopathy with macular edema, unspecified eye -E083391 Diabetes mellitus due to underlying condition with moderate nonproliferative diabetic retinopathy without macular edema, right eye -E083392 Diabetes mellitus due to underlying condition with moderate nonproliferative diabetic retinopathy without macular edema, left eye -E083393 Diabetes mellitus due to underlying condition with moderate nonproliferative diabetic retinopathy without macular edema, bilateral -E083399 Diabetes mellitus due to underlying condition with moderate nonproliferative diabetic retinopathy without macular edema, unspecified eye -E083411 Diabetes mellitus due to underlying condition with severe nonproliferative diabetic retinopathy with macular edema, right eye -E083412 Diabetes mellitus due to underlying condition with severe nonproliferative diabetic retinopathy with macular edema, left eye -E083413 Diabetes mellitus due to underlying condition with severe nonproliferative diabetic retinopathy with macular edema, bilateral -E083419 Diabetes mellitus due to underlying condition with severe nonproliferative diabetic retinopathy with macular edema, unspecified eye -E083491 Diabetes mellitus due to underlying condition with severe nonproliferative diabetic retinopathy without macular edema, right eye -E083492 Diabetes mellitus due to underlying condition with severe nonproliferative diabetic retinopathy without macular edema, left eye -E083493 Diabetes mellitus due to underlying condition with severe nonproliferative diabetic retinopathy without macular edema, bilateral -E083499 Diabetes mellitus due to underlying condition with severe nonproliferative diabetic retinopathy without macular edema, unspecified eye -E083511 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with macular edema, right eye -E083512 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with macular edema, left eye -E083513 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with macular edema, bilateral -E083519 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with macular edema, unspecified eye -E083521 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with traction retinal detachment involving the macula, right eye -E083522 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with traction retinal detachment involving the macula, left eye -E083523 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with traction retinal detachment involving the macula, bilateral -E083529 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with traction retinal detachment involving the macula, unspecified eye -E083531 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, right eye -E083532 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, left eye -E083533 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, bilateral -E083539 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, unspecified eye -E083541 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, right eye -E083542 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, left eye -E083543 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, bilateral -E083549 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, unspecified eye -E083551 Diabetes mellitus due to underlying condition with stable proliferative diabetic retinopathy, right eye -E083552 Diabetes mellitus due to underlying condition with stable proliferative diabetic retinopathy, left eye -E083553 Diabetes mellitus due to underlying condition with stable proliferative diabetic retinopathy, bilateral -E083559 Diabetes mellitus due to underlying condition with stable proliferative diabetic retinopathy, unspecified eye -E083591 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy without macular edema, right eye -E083592 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy without macular edema, left eye -E083593 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy without macular edema, bilateral -E083599 Diabetes mellitus due to underlying condition with proliferative diabetic retinopathy without macular edema, unspecified eye -E0836 Diabetes mellitus due to underlying condition with diabetic cataract -E0837X1 Diabetes mellitus due to underlying condition with diabetic macular edema, resolved following treatment, right eye -E0837X2 Diabetes mellitus due to underlying condition with diabetic macular edema, resolved following treatment, left eye -E0837X3 Diabetes mellitus due to underlying condition with diabetic macular edema, resolved following treatment, bilateral -E0837X9 Diabetes mellitus due to underlying condition with diabetic macular edema, resolved following treatment, unspecified eye -E0839 Diabetes mellitus due to underlying condition with other diabetic ophthalmic complication -E0840 Diabetes mellitus due to underlying condition with diabetic neuropathy, unspecified -E0841 Diabetes mellitus due to underlying condition with diabetic mononeuropathy -E0842 Diabetes mellitus due to underlying condition with diabetic polyneuropathy -E0843 Diabetes mellitus due to underlying condition with diabetic autonomic (poly)neuropathy -E0844 Diabetes mellitus due to underlying condition with diabetic amyotrophy -E0849 Diabetes mellitus due to underlying condition with other diabetic neurological complication -E0851 Diabetes mellitus due to underlying condition with diabetic peripheral angiopathy without gangrene -E0852 Diabetes mellitus due to underlying condition with diabetic peripheral angiopathy with gangrene -E0859 Diabetes mellitus due to underlying condition with other circulatory complications -E08610 Diabetes mellitus due to underlying condition with diabetic neuropathic arthropathy -E08618 Diabetes mellitus due to underlying condition with other diabetic arthropathy -E08620 Diabetes mellitus due to underlying condition with diabetic dermatitis -E08621 Diabetes mellitus due to underlying condition with foot ulcer -E08622 Diabetes mellitus due to underlying condition with other skin ulcer -E08628 Diabetes mellitus due to underlying condition with other skin complications -E08630 Diabetes mellitus due to underlying condition with periodontal disease -E08638 Diabetes mellitus due to underlying condition with other oral complications -E08641 Diabetes mellitus due to underlying condition with hypoglycemia with coma -E08649 Diabetes mellitus due to underlying condition with hypoglycemia without coma -E0865 Diabetes mellitus due to underlying condition with hyperglycemia -E0869 Diabetes mellitus due to underlying condition with other specified complication -E088 Diabetes mellitus due to underlying condition with unspecified complications -E089 Diabetes mellitus due to underlying condition without complications -E0900 Drug or chemical induced diabetes mellitus with hyperosmolarity without nonketotic hyperglycemic-hyperosmolar coma (NKHHC) -E0901 Drug or chemical induced diabetes mellitus with hyperosmolarity with coma -E0910 Drug or chemical induced diabetes mellitus with ketoacidosis without coma -E0911 Drug or chemical induced diabetes mellitus with ketoacidosis with coma -E0921 Drug or chemical induced diabetes mellitus with diabetic nephropathy -E0922 Drug or chemical induced diabetes mellitus with diabetic chronic kidney disease -E0929 Drug or chemical induced diabetes mellitus with other diabetic kidney complication -E09311 Drug or chemical induced diabetes mellitus with unspecified diabetic retinopathy with macular edema -E09319 Drug or chemical induced diabetes mellitus with unspecified diabetic retinopathy without macular edema -E093211 Drug or chemical induced diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, right eye -E093212 Drug or chemical induced diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, left eye -E093213 Drug or chemical induced diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, bilateral -E093219 Drug or chemical induced diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, unspecified eye -E093291 Drug or chemical induced diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, right eye -E093292 Drug or chemical induced diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, left eye -E093293 Drug or chemical induced diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, bilateral -E093299 Drug or chemical induced diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, unspecified eye -E093311 Drug or chemical induced diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, right eye -E093312 Drug or chemical induced diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, left eye -E093313 Drug or chemical induced diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, bilateral -E093319 Drug or chemical induced diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, unspecified eye -E093391 Drug or chemical induced diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, right eye -E093392 Drug or chemical induced diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, left eye -E093393 Drug or chemical induced diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, bilateral -E093399 Drug or chemical induced diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, unspecified eye -E093411 Drug or chemical induced diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, right eye -E093412 Drug or chemical induced diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, left eye -E093413 Drug or chemical induced diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, bilateral -E093419 Drug or chemical induced diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, unspecified eye -E093491 Drug or chemical induced diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, right eye -E093492 Drug or chemical induced diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, left eye -E093493 Drug or chemical induced diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, bilateral -E093499 Drug or chemical induced diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, unspecified eye -E093511 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with macular edema, right eye -E093512 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with macular edema, left eye -E093513 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with macular edema, bilateral -E093519 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with macular edema, unspecified eye -E093521 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, right eye -E093522 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, left eye -E093523 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, bilateral -E093529 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, unspecified eye -E093531 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, right eye -E093532 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, left eye -E093533 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, bilateral -E093539 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, unspecified eye -E093541 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, right eye -E093542 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, left eye -E093543 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, bilateral -E093549 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, unspecified eye -E093551 Drug or chemical induced diabetes mellitus with stable proliferative diabetic retinopathy, right eye -E093552 Drug or chemical induced diabetes mellitus with stable proliferative diabetic retinopathy, left eye -E093553 Drug or chemical induced diabetes mellitus with stable proliferative diabetic retinopathy, bilateral -E093559 Drug or chemical induced diabetes mellitus with stable proliferative diabetic retinopathy, unspecified eye -E093591 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy without macular edema, right eye -E093592 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy without macular edema, left eye -E093593 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy without macular edema, bilateral -E093599 Drug or chemical induced diabetes mellitus with proliferative diabetic retinopathy without macular edema, unspecified eye -E0936 Drug or chemical induced diabetes mellitus with diabetic cataract -E0937X1 Drug or chemical induced diabetes mellitus with diabetic macular edema, resolved following treatment, right eye -E0937X2 Drug or chemical induced diabetes mellitus with diabetic macular edema, resolved following treatment, left eye -E0937X3 Drug or chemical induced diabetes mellitus with diabetic macular edema, resolved following treatment, bilateral -E0937X9 Drug or chemical induced diabetes mellitus with diabetic macular edema, resolved following treatment, unspecified eye -E0939 Drug or chemical induced diabetes mellitus with other diabetic ophthalmic complication -E0940 Drug or chemical induced diabetes mellitus with neurological complications with diabetic neuropathy, unspecified -E0941 Drug or chemical induced diabetes mellitus with neurological complications with diabetic mononeuropathy -E0942 Drug or chemical induced diabetes mellitus with neurological complications with diabetic polyneuropathy -E0943 Drug or chemical induced diabetes mellitus with neurological complications with diabetic autonomic (poly)neuropathy -E0944 Drug or chemical induced diabetes mellitus with neurological complications with diabetic amyotrophy -E0949 Drug or chemical induced diabetes mellitus with neurological complications with other diabetic neurological complication -E0951 Drug or chemical induced diabetes mellitus with diabetic peripheral angiopathy without gangrene -E0952 Drug or chemical induced diabetes mellitus with diabetic peripheral angiopathy with gangrene -E0959 Drug or chemical induced diabetes mellitus with other circulatory complications -E09610 Drug or chemical induced diabetes mellitus with diabetic neuropathic arthropathy -E09618 Drug or chemical induced diabetes mellitus with other diabetic arthropathy -E09620 Drug or chemical induced diabetes mellitus with diabetic dermatitis -E09621 Drug or chemical induced diabetes mellitus with foot ulcer -E09622 Drug or chemical induced diabetes mellitus with other skin ulcer -E09628 Drug or chemical induced diabetes mellitus with other skin complications -E09630 Drug or chemical induced diabetes mellitus with periodontal disease -E09638 Drug or chemical induced diabetes mellitus with other oral complications -E09641 Drug or chemical induced diabetes mellitus with hypoglycemia with coma -E09649 Drug or chemical induced diabetes mellitus with hypoglycemia without coma -E0965 Drug or chemical induced diabetes mellitus with hyperglycemia -E0969 Drug or chemical induced diabetes mellitus with other specified complication -E098 Drug or chemical induced diabetes mellitus with unspecified complications -E099 Drug or chemical induced diabetes mellitus without complications -E1010 Type 1 diabetes mellitus with ketoacidosis without coma -E1011 Type 1 diabetes mellitus with ketoacidosis with coma -E1021 Type 1 diabetes mellitus with diabetic nephropathy -E1022 Type 1 diabetes mellitus with diabetic chronic kidney disease -E1029 Type 1 diabetes mellitus with other diabetic kidney complication -E10311 Type 1 diabetes mellitus with unspecified diabetic retinopathy with macular edema -E10319 Type 1 diabetes mellitus with unspecified diabetic retinopathy without macular edema -E103211 Type 1 diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, right eye -E103212 Type 1 diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, left eye -E103213 Type 1 diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, bilateral -E103219 Type 1 diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, unspecified eye -E103291 Type 1 diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, right eye -E103292 Type 1 diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, left eye -E103293 Type 1 diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, bilateral -E103299 Type 1 diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, unspecified eye -E103311 Type 1 diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, right eye -E103312 Type 1 diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, left eye -E103313 Type 1 diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, bilateral -E103319 Type 1 diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, unspecified eye -E103391 Type 1 diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, right eye -E103392 Type 1 diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, left eye -E103393 Type 1 diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, bilateral -E103399 Type 1 diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, unspecified eye -E103411 Type 1 diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, right eye -E103412 Type 1 diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, left eye -E103413 Type 1 diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, bilateral -E103419 Type 1 diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, unspecified eye -E103491 Type 1 diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, right eye -E103492 Type 1 diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, left eye -E103493 Type 1 diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, bilateral -E103499 Type 1 diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, unspecified eye -E103511 Type 1 diabetes mellitus with proliferative diabetic retinopathy with macular edema, right eye -E103512 Type 1 diabetes mellitus with proliferative diabetic retinopathy with macular edema, left eye -E103513 Type 1 diabetes mellitus with proliferative diabetic retinopathy with macular edema, bilateral -E103519 Type 1 diabetes mellitus with proliferative diabetic retinopathy with macular edema, unspecified eye -E103521 Type 1 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, right eye -E103522 Type 1 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, left eye -E103523 Type 1 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, bilateral -E103529 Type 1 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, unspecified eye -E103531 Type 1 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, right eye -E103532 Type 1 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, left eye -E103533 Type 1 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, bilateral -E103539 Type 1 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, unspecified eye -E103541 Type 1 diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, right eye -E103542 Type 1 diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, left eye -E103543 Type 1 diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, bilateral -E103549 Type 1 diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, unspecified eye -E103551 Type 1 diabetes mellitus with stable proliferative diabetic retinopathy, right eye -E103552 Type 1 diabetes mellitus with stable proliferative diabetic retinopathy, left eye -E103553 Type 1 diabetes mellitus with stable proliferative diabetic retinopathy, bilateral -E103559 Type 1 diabetes mellitus with stable proliferative diabetic retinopathy, unspecified eye -E103591 Type 1 diabetes mellitus with proliferative diabetic retinopathy without macular edema, right eye -E103592 Type 1 diabetes mellitus with proliferative diabetic retinopathy without macular edema, left eye -E103593 Type 1 diabetes mellitus with proliferative diabetic retinopathy without macular edema, bilateral -E103599 Type 1 diabetes mellitus with proliferative diabetic retinopathy without macular edema, unspecified eye -E1036 Type 1 diabetes mellitus with diabetic cataract -E1037X1 Type 1 diabetes mellitus with diabetic macular edema, resolved following treatment, right eye -E1037X2 Type 1 diabetes mellitus with diabetic macular edema, resolved following treatment, left eye -E1037X3 Type 1 diabetes mellitus with diabetic macular edema, resolved following treatment, bilateral -E1037X9 Type 1 diabetes mellitus with diabetic macular edema, resolved following treatment, unspecified eye -E1039 Type 1 diabetes mellitus with other diabetic ophthalmic complication -E1040 Type 1 diabetes mellitus with diabetic neuropathy, unspecified -E1041 Type 1 diabetes mellitus with diabetic mononeuropathy -E1042 Type 1 diabetes mellitus with diabetic polyneuropathy -E1043 Type 1 diabetes mellitus with diabetic autonomic (poly)neuropathy -E1044 Type 1 diabetes mellitus with diabetic amyotrophy -E1049 Type 1 diabetes mellitus with other diabetic neurological complication -E1051 Type 1 diabetes mellitus with diabetic peripheral angiopathy without gangrene -E1052 Type 1 diabetes mellitus with diabetic peripheral angiopathy with gangrene -E1059 Type 1 diabetes mellitus with other circulatory complications -E10610 Type 1 diabetes mellitus with diabetic neuropathic arthropathy -E10618 Type 1 diabetes mellitus with other diabetic arthropathy -E10620 Type 1 diabetes mellitus with diabetic dermatitis -E10621 Type 1 diabetes mellitus with foot ulcer -E10622 Type 1 diabetes mellitus with other skin ulcer -E10628 Type 1 diabetes mellitus with other skin complications -E10630 Type 1 diabetes mellitus with periodontal disease -E10638 Type 1 diabetes mellitus with other oral complications -E10641 Type 1 diabetes mellitus with hypoglycemia with coma -E10649 Type 1 diabetes mellitus with hypoglycemia without coma -E1065 Type 1 diabetes mellitus with hyperglycemia -E1069 Type 1 diabetes mellitus with other specified complication -E108 Type 1 diabetes mellitus with unspecified complications -E109 Type 1 diabetes mellitus without complications -E1100 Type 2 diabetes mellitus with hyperosmolarity without nonketotic hyperglycemic-hyperosmolar coma (NKHHC) -E1101 Type 2 diabetes mellitus with hyperosmolarity with coma -E1121 Type 2 diabetes mellitus with diabetic nephropathy -E1122 Type 2 diabetes mellitus with diabetic chronic kidney disease -E1129 Type 2 diabetes mellitus with other diabetic kidney complication -E11311 Type 2 diabetes mellitus with unspecified diabetic retinopathy with macular edema -E11319 Type 2 diabetes mellitus with unspecified diabetic retinopathy without macular edema -E113211 Type 2 diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, right eye -E113212 Type 2 diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, left eye -E113213 Type 2 diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, bilateral -E113219 Type 2 diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, unspecified eye -E113291 Type 2 diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, right eye -E113292 Type 2 diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, left eye -E113293 Type 2 diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, bilateral -E113299 Type 2 diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, unspecified eye -E113311 Type 2 diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, right eye -E113312 Type 2 diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, left eye -E113313 Type 2 diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, bilateral -E113319 Type 2 diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, unspecified eye -E113391 Type 2 diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, right eye -E113392 Type 2 diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, left eye -E113393 Type 2 diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, bilateral -E113399 Type 2 diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, unspecified eye -E113411 Type 2 diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, right eye -E113412 Type 2 diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, left eye -E113413 Type 2 diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, bilateral -E113419 Type 2 diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, unspecified eye -E113491 Type 2 diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, right eye -E113492 Type 2 diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, left eye -E113493 Type 2 diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, bilateral -E113499 Type 2 diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, unspecified eye -E113511 Type 2 diabetes mellitus with proliferative diabetic retinopathy with macular edema, right eye -E113512 Type 2 diabetes mellitus with proliferative diabetic retinopathy with macular edema, left eye -E113513 Type 2 diabetes mellitus with proliferative diabetic retinopathy with macular edema, bilateral -E113519 Type 2 diabetes mellitus with proliferative diabetic retinopathy with macular edema, unspecified eye -E113521 Type 2 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, right eye -E113522 Type 2 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, left eye -E113523 Type 2 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, bilateral -E113529 Type 2 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, unspecified eye -E113531 Type 2 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, right eye -E113532 Type 2 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, left eye -E113533 Type 2 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, bilateral -E113539 Type 2 diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, unspecified eye -E113541 Type 2 diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, right eye -E113542 Type 2 diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, left eye -E113543 Type 2 diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, bilateral -E113549 Type 2 diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, unspecified eye -E113551 Type 2 diabetes mellitus with stable proliferative diabetic retinopathy, right eye -E113552 Type 2 diabetes mellitus with stable proliferative diabetic retinopathy, left eye -E113553 Type 2 diabetes mellitus with stable proliferative diabetic retinopathy, bilateral -E113559 Type 2 diabetes mellitus with stable proliferative diabetic retinopathy, unspecified eye -E113591 Type 2 diabetes mellitus with proliferative diabetic retinopathy without macular edema, right eye -E113592 Type 2 diabetes mellitus with proliferative diabetic retinopathy without macular edema, left eye -E113593 Type 2 diabetes mellitus with proliferative diabetic retinopathy without macular edema, bilateral -E113599 Type 2 diabetes mellitus with proliferative diabetic retinopathy without macular edema, unspecified eye -E1136 Type 2 diabetes mellitus with diabetic cataract -E1137X1 Type 2 diabetes mellitus with diabetic macular edema, resolved following treatment, right eye -E1137X2 Type 2 diabetes mellitus with diabetic macular edema, resolved following treatment, left eye -E1137X3 Type 2 diabetes mellitus with diabetic macular edema, resolved following treatment, bilateral -E1137X9 Type 2 diabetes mellitus with diabetic macular edema, resolved following treatment, unspecified eye -E1139 Type 2 diabetes mellitus with other diabetic ophthalmic complication -E1140 Type 2 diabetes mellitus with diabetic neuropathy, unspecified -E1141 Type 2 diabetes mellitus with diabetic mononeuropathy -E1142 Type 2 diabetes mellitus with diabetic polyneuropathy -E1143 Type 2 diabetes mellitus with diabetic autonomic (poly)neuropathy -E1144 Type 2 diabetes mellitus with diabetic amyotrophy -E1149 Type 2 diabetes mellitus with other diabetic neurological complication -E1151 Type 2 diabetes mellitus with diabetic peripheral angiopathy without gangrene -E1152 Type 2 diabetes mellitus with diabetic peripheral angiopathy with gangrene -E1159 Type 2 diabetes mellitus with other circulatory complications -E11610 Type 2 diabetes mellitus with diabetic neuropathic arthropathy -E11618 Type 2 diabetes mellitus with other diabetic arthropathy -E11620 Type 2 diabetes mellitus with diabetic dermatitis -E11621 Type 2 diabetes mellitus with foot ulcer -E11622 Type 2 diabetes mellitus with other skin ulcer -E11628 Type 2 diabetes mellitus with other skin complications -E11630 Type 2 diabetes mellitus with periodontal disease -E11638 Type 2 diabetes mellitus with other oral complications -E11641 Type 2 diabetes mellitus with hypoglycemia with coma -E11649 Type 2 diabetes mellitus with hypoglycemia without coma -E1165 Type 2 diabetes mellitus with hyperglycemia -E1169 Type 2 diabetes mellitus with other specified complication -E118 Type 2 diabetes mellitus with unspecified complications -E119 Type 2 diabetes mellitus without complications -E1300 Other specified diabetes mellitus with hyperosmolarity without nonketotic hyperglycemic-hyperosmolar coma (NKHHC) -E1301 Other specified diabetes mellitus with hyperosmolarity with coma -E1310 Other specified diabetes mellitus with ketoacidosis without coma -E1311 Other specified diabetes mellitus with ketoacidosis with coma -E1321 Other specified diabetes mellitus with diabetic nephropathy -E1322 Other specified diabetes mellitus with diabetic chronic kidney disease -E1329 Other specified diabetes mellitus with other diabetic kidney complication -E13311 Other specified diabetes mellitus with unspecified diabetic retinopathy with macular edema -E13319 Other specified diabetes mellitus with unspecified diabetic retinopathy without macular edema -E133211 Other specified diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, right eye -E133212 Other specified diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, left eye -E133213 Other specified diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, bilateral -E133219 Other specified diabetes mellitus with mild nonproliferative diabetic retinopathy with macular edema, unspecified eye -E133291 Other specified diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, right eye -E133292 Other specified diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, left eye -E133293 Other specified diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, bilateral -E133299 Other specified diabetes mellitus with mild nonproliferative diabetic retinopathy without macular edema, unspecified eye -E133311 Other specified diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, right eye -E133312 Other specified diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, left eye -E133313 Other specified diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, bilateral -E133319 Other specified diabetes mellitus with moderate nonproliferative diabetic retinopathy with macular edema, unspecified eye -E133391 Other specified diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, right eye -E133392 Other specified diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, left eye -E133393 Other specified diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, bilateral -E133399 Other specified diabetes mellitus with moderate nonproliferative diabetic retinopathy without macular edema, unspecified eye -E133411 Other specified diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, right eye -E133412 Other specified diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, left eye -E133413 Other specified diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, bilateral -E133419 Other specified diabetes mellitus with severe nonproliferative diabetic retinopathy with macular edema, unspecified eye -E133491 Other specified diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, right eye -E133492 Other specified diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, left eye -E133493 Other specified diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, bilateral -E133499 Other specified diabetes mellitus with severe nonproliferative diabetic retinopathy without macular edema, unspecified eye -E133511 Other specified diabetes mellitus with proliferative diabetic retinopathy with macular edema, right eye -E133512 Other specified diabetes mellitus with proliferative diabetic retinopathy with macular edema, left eye -E133513 Other specified diabetes mellitus with proliferative diabetic retinopathy with macular edema, bilateral -E133519 Other specified diabetes mellitus with proliferative diabetic retinopathy with macular edema, unspecified eye -E133521 Other specified diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, right eye -E133522 Other specified diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, left eye -E133523 Other specified diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, bilateral -E133529 Other specified diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment involving the macula, unspecified eye -E133531 Other specified diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, right eye -E133532 Other specified diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, left eye -E133533 Other specified diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, bilateral -E133539 Other specified diabetes mellitus with proliferative diabetic retinopathy with traction retinal detachment not involving the macula, unspecified eye -E133541 Other specified diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, right eye -E133542 Other specified diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, left eye -E133543 Other specified diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, bilateral -E133549 Other specified diabetes mellitus with proliferative diabetic retinopathy with combined traction retinal detachment and rhegmatogenous retinal detachment, unspecified eye -E133551 Other specified diabetes mellitus with stable proliferative diabetic retinopathy, right eye -E133552 Other specified diabetes mellitus with stable proliferative diabetic retinopathy, left eye -E133553 Other specified diabetes mellitus with stable proliferative diabetic retinopathy, bilateral -E133559 Other specified diabetes mellitus with stable proliferative diabetic retinopathy, unspecified eye -E133591 Other specified diabetes mellitus with proliferative diabetic retinopathy without macular edema, right eye -E133592 Other specified diabetes mellitus with proliferative diabetic retinopathy without macular edema, left eye -E133593 Other specified diabetes mellitus with proliferative diabetic retinopathy without macular edema, bilateral -E133599 Other specified diabetes mellitus with proliferative diabetic retinopathy without macular edema, unspecified eye -E1336 Other specified diabetes mellitus with diabetic cataract -E1337X1 Other specified diabetes mellitus with diabetic macular edema, resolved following treatment, right eye -E1337X2 Other specified diabetes mellitus with diabetic macular edema, resolved following treatment, left eye -E1337X3 Other specified diabetes mellitus with diabetic macular edema, resolved following treatment, bilateral -E1337X9 Other specified diabetes mellitus with diabetic macular edema, resolved following treatment, unspecified eye -E1339 Other specified diabetes mellitus with other diabetic ophthalmic complication -E1340 Other specified diabetes mellitus with diabetic neuropathy, unspecified -E1341 Other specified diabetes mellitus with diabetic mononeuropathy -E1342 Other specified diabetes mellitus with diabetic polyneuropathy -E1343 Other specified diabetes mellitus with diabetic autonomic (poly)neuropathy -E1344 Other specified diabetes mellitus with diabetic amyotrophy -E1349 Other specified diabetes mellitus with other diabetic neurological complication -E1351 Other specified diabetes mellitus with diabetic peripheral angiopathy without gangrene -E1352 Other specified diabetes mellitus with diabetic peripheral angiopathy with gangrene -E1359 Other specified diabetes mellitus with other circulatory complications -E13610 Other specified diabetes mellitus with diabetic neuropathic arthropathy -E13618 Other specified diabetes mellitus with other diabetic arthropathy -E13620 Other specified diabetes mellitus with diabetic dermatitis -E13621 Other specified diabetes mellitus with foot ulcer -E13622 Other specified diabetes mellitus with other skin ulcer -E13628 Other specified diabetes mellitus with other skin complications -E13630 Other specified diabetes mellitus with periodontal disease -E13638 Other specified diabetes mellitus with other oral complications -E13641 Other specified diabetes mellitus with hypoglycemia with coma -E13649 Other specified diabetes mellitus with hypoglycemia without coma -E1365 Other specified diabetes mellitus with hyperglycemia -E1369 Other specified diabetes mellitus with other specified complication -E138 Other specified diabetes mellitus with unspecified complications -E139 Other specified diabetes mellitus without complications -E15 Nondiabetic hypoglycemic coma -E160 Drug-induced hypoglycemia without coma -E161 Other hypoglycemia -E162 Hypoglycemia, unspecified -E163 Increased secretion of glucagon -E164 Increased secretion of gastrin -E168 Other specified disorders of pancreatic internal secretion -E169 Disorder of pancreatic internal secretion, unspecified -E200 Idiopathic hypoparathyroidism -E201 Pseudohypoparathyroidism -E208 Other hypoparathyroidism -E209 Hypoparathyroidism, unspecified -E210 Primary hyperparathyroidism -E211 Secondary hyperparathyroidism, not elsewhere classified -E212 Other hyperparathyroidism -E213 Hyperparathyroidism, unspecified -E214 Other specified disorders of parathyroid gland -E215 Disorder of parathyroid gland, unspecified -E220 Acromegaly and pituitary gigantism -E221 Hyperprolactinemia -E222 Syndrome of inappropriate secretion of antidiuretic hormone -E228 Other hyperfunction of pituitary gland -E229 Hyperfunction of pituitary gland, unspecified -E230 Hypopituitarism -E231 Drug-induced hypopituitarism -E232 Diabetes insipidus -E233 Hypothalamic dysfunction, not elsewhere classified -E236 Other disorders of pituitary gland -E237 Disorder of pituitary gland, unspecified -E240 Pituitary-dependent Cushing's disease -E241 Nelson's syndrome -E242 Drug-induced Cushing's syndrome -E243 Ectopic ACTH syndrome -E244 Alcohol-induced pseudo-Cushing's syndrome -E248 Other Cushing's syndrome -E249 Cushing's syndrome, unspecified -E250 Congenital adrenogenital disorders associated with enzyme deficiency -E258 Other adrenogenital disorders -E259 Adrenogenital disorder, unspecified -E2601 Conn's syndrome -E2602 Glucocorticoid-remediable aldosteronism -E2609 Other primary hyperaldosteronism -E261 Secondary hyperaldosteronism -E2681 Bartter's syndrome -E2689 Other hyperaldosteronism -E269 Hyperaldosteronism, unspecified -E270 Other adrenocortical overactivity -E271 Primary adrenocortical insufficiency -E272 Addisonian crisis -E273 Drug-induced adrenocortical insufficiency -E2740 Unspecified adrenocortical insufficiency -E2749 Other adrenocortical insufficiency -E275 Adrenomedullary hyperfunction -E278 Other specified disorders of adrenal gland -E279 Disorder of adrenal gland, unspecified -E280 Estrogen excess -E281 Androgen excess -E282 Polycystic ovarian syndrome -E28310 Symptomatic premature menopause -E28319 Asymptomatic premature menopause -E2839 Other primary ovarian failure -E288 Other ovarian dysfunction -E289 Ovarian dysfunction, unspecified -E290 Testicular hyperfunction -E291 Testicular hypofunction -E298 Other testicular dysfunction -E299 Testicular dysfunction, unspecified -E300 Delayed puberty -E301 Precocious puberty -E308 Other disorders of puberty -E309 Disorder of puberty, unspecified -E310 Autoimmune polyglandular failure -E311 Polyglandular hyperfunction -E3120 Multiple endocrine neoplasia [MEN] syndrome, unspecified -E3121 Multiple endocrine neoplasia [MEN] type I -E3122 Multiple endocrine neoplasia [MEN] type IIA -E3123 Multiple endocrine neoplasia [MEN] type IIB -E318 Other polyglandular dysfunction -E319 Polyglandular dysfunction, unspecified -E320 Persistent hyperplasia of thymus -E321 Abscess of thymus -E328 Other diseases of thymus -E329 Disease of thymus, unspecified -E340 Carcinoid syndrome -E341 Other hypersecretion of intestinal hormones -E342 Ectopic hormone secretion, not elsewhere classified -E343 Short stature due to endocrine disorder -E344 Constitutional tall stature -E3450 Androgen insensitivity syndrome, unspecified -E3451 Complete androgen insensitivity syndrome -E3452 Partial androgen insensitivity syndrome -E348 Other specified endocrine disorders -E349 Endocrine disorder, unspecified -E35 Disorders of endocrine glands in diseases classified elsewhere -E3601 Intraoperative hemorrhage and hematoma of an endocrine system organ or structure complicating an endocrine system procedure -E3602 Intraoperative hemorrhage and hematoma of an endocrine system organ or structure complicating other procedure -E3611 Accidental puncture and laceration of an endocrine system organ or structure during an endocrine system procedure -E3612 Accidental puncture and laceration of an endocrine system organ or structure during other procedure -E368 Other intraoperative complications of endocrine system -E40 Kwashiorkor -E41 Nutritional marasmus -E42 Marasmic kwashiorkor -E43 Unspecified severe protein-calorie malnutrition -E440 Moderate protein-calorie malnutrition -E441 Mild protein-calorie malnutrition -E45 Retarded development following protein-calorie malnutrition -E46 Unspecified protein-calorie malnutrition -E500 Vitamin A deficiency with conjunctival xerosis -E501 Vitamin A deficiency with Bitot's spot and conjunctival xerosis -E502 Vitamin A deficiency with corneal xerosis -E503 Vitamin A deficiency with corneal ulceration and xerosis -E504 Vitamin A deficiency with keratomalacia -E505 Vitamin A deficiency with night blindness -E506 Vitamin A deficiency with xerophthalmic scars of cornea -E507 Other ocular manifestations of vitamin A deficiency -E508 Other manifestations of vitamin A deficiency -E509 Vitamin A deficiency, unspecified -E5111 Dry beriberi -E5112 Wet beriberi -E512 Wernicke's encephalopathy -E518 Other manifestations of thiamine deficiency -E519 Thiamine deficiency, unspecified -E52 Niacin deficiency [pellagra] -E530 Riboflavin deficiency -E531 Pyridoxine deficiency -E538 Deficiency of other specified B group vitamins -E539 Vitamin B deficiency, unspecified -E54 Ascorbic acid deficiency -E550 Rickets, active -E559 Vitamin D deficiency, unspecified -E560 Deficiency of vitamin E -E561 Deficiency of vitamin K -E568 Deficiency of other vitamins -E569 Vitamin deficiency, unspecified -E58 Dietary calcium deficiency -E59 Dietary selenium deficiency -E60 Dietary zinc deficiency -E610 Copper deficiency -E611 Iron deficiency -E612 Magnesium deficiency -E613 Manganese deficiency -E614 Chromium deficiency -E615 Molybdenum deficiency -E616 Vanadium deficiency -E617 Deficiency of multiple nutrient elements -E618 Deficiency of other specified nutrient elements -E619 Deficiency of nutrient element, unspecified -E630 Essential fatty acid [EFA] deficiency -E631 Imbalance of constituents of food intake -E638 Other specified nutritional deficiencies -E639 Nutritional deficiency, unspecified -E640 Sequelae of protein-calorie malnutrition -E641 Sequelae of vitamin A deficiency -E642 Sequelae of vitamin C deficiency -E643 Sequelae of rickets -E648 Sequelae of other nutritional deficiencies -E649 Sequelae of unspecified nutritional deficiency -E65 Localized adiposity -E6601 Morbid (severe) obesity due to excess calories -E6609 Other obesity due to excess calories -E661 Drug-induced obesity -E662 Morbid (severe) obesity with alveolar hypoventilation -E663 Overweight -E668 Other obesity -E669 Obesity, unspecified -E670 Hypervitaminosis A -E671 Hypercarotinemia -E672 Megavitamin-B6 syndrome -E673 Hypervitaminosis D -E678 Other specified hyperalimentation -E68 Sequelae of hyperalimentation -E700 Classical phenylketonuria -E701 Other hyperphenylalaninemias -E7020 Disorder of tyrosine metabolism, unspecified -E7021 Tyrosinemia -E7029 Other disorders of tyrosine metabolism -E7030 Albinism, unspecified -E70310 X-linked ocular albinism -E70311 Autosomal recessive ocular albinism -E70318 Other ocular albinism -E70319 Ocular albinism, unspecified -E70320 Tyrosinase negative oculocutaneous albinism -E70321 Tyrosinase positive oculocutaneous albinism -E70328 Other oculocutaneous albinism -E70329 Oculocutaneous albinism, unspecified -E70330 Chediak-Higashi syndrome -E70331 Hermansky-Pudlak syndrome -E70338 Other albinism with hematologic abnormality -E70339 Albinism with hematologic abnormality, unspecified -E7039 Other specified albinism -E7040 Disorders of histidine metabolism, unspecified -E7041 Histidinemia -E7049 Other disorders of histidine metabolism -E705 Disorders of tryptophan metabolism -E708 Other disorders of aromatic amino-acid metabolism -E709 Disorder of aromatic amino-acid metabolism, unspecified -E710 Maple-syrup-urine disease -E71110 Isovaleric acidemia -E71111 3-methylglutaconic aciduria -E71118 Other branched-chain organic acidurias -E71120 Methylmalonic acidemia -E71121 Propionic acidemia -E71128 Other disorders of propionate metabolism -E7119 Other disorders of branched-chain amino-acid metabolism -E712 Disorder of branched-chain amino-acid metabolism, unspecified -E7130 Disorder of fatty-acid metabolism, unspecified -E71310 Long chain/very long chain acyl CoA dehydrogenase deficiency -E71311 Medium chain acyl CoA dehydrogenase deficiency -E71312 Short chain acyl CoA dehydrogenase deficiency -E71313 Glutaric aciduria type II -E71314 Muscle carnitine palmitoyltransferase deficiency -E71318 Other disorders of fatty-acid oxidation -E7132 Disorders of ketone metabolism -E7139 Other disorders of fatty-acid metabolism -E7140 Disorder of carnitine metabolism, unspecified -E7141 Primary carnitine deficiency -E7142 Carnitine deficiency due to inborn errors of metabolism -E7143 Iatrogenic carnitine deficiency -E71440 Ruvalcaba-Myhre-Smith syndrome -E71448 Other secondary carnitine deficiency -E7150 Peroxisomal disorder, unspecified -E71510 Zellweger syndrome -E71511 Neonatal adrenoleukodystrophy -E71518 Other disorders of peroxisome biogenesis -E71520 Childhood cerebral X-linked adrenoleukodystrophy -E71521 Adolescent X-linked adrenoleukodystrophy -E71522 Adrenomyeloneuropathy -E71528 Other X-linked adrenoleukodystrophy -E71529 X-linked adrenoleukodystrophy, unspecified type -E7153 Other group 2 peroxisomal disorders -E71540 Rhizomelic chondrodysplasia punctata -E71541 Zellweger-like syndrome -E71542 Other group 3 peroxisomal disorders -E71548 Other peroxisomal disorders -E7200 Disorders of amino-acid transport, unspecified -E7201 Cystinuria -E7202 Hartnup's disease -E7203 Lowe's syndrome -E7204 Cystinosis -E7209 Other disorders of amino-acid transport -E7210 Disorders of sulfur-bearing amino-acid metabolism, unspecified -E7211 Homocystinuria -E7212 Methylenetetrahydrofolate reductase deficiency -E7219 Other disorders of sulfur-bearing amino-acid metabolism -E7220 Disorder of urea cycle metabolism, unspecified -E7221 Argininemia -E7222 Arginosuccinic aciduria -E7223 Citrullinemia -E7229 Other disorders of urea cycle metabolism -E723 Disorders of lysine and hydroxylysine metabolism -E724 Disorders of ornithine metabolism -E7250 Disorder of glycine metabolism, unspecified -E7251 Non-ketotic hyperglycinemia -E7252 Trimethylaminuria -E7253 Hyperoxaluria -E7259 Other disorders of glycine metabolism -E728 Other specified disorders of amino-acid metabolism -E729 Disorder of amino-acid metabolism, unspecified -E730 Congenital lactase deficiency -E731 Secondary lactase deficiency -E738 Other lactose intolerance -E739 Lactose intolerance, unspecified -E7400 Glycogen storage disease, unspecified -E7401 von Gierke disease -E7402 Pompe disease -E7403 Cori disease -E7404 McArdle disease -E7409 Other glycogen storage disease -E7410 Disorder of fructose metabolism, unspecified -E7411 Essential fructosuria -E7412 Hereditary fructose intolerance -E7419 Other disorders of fructose metabolism -E7420 Disorders of galactose metabolism, unspecified -E7421 Galactosemia -E7429 Other disorders of galactose metabolism -E7431 Sucrase-isomaltase deficiency -E7439 Other disorders of intestinal carbohydrate absorption -E744 Disorders of pyruvate metabolism and gluconeogenesis -E748 Other specified disorders of carbohydrate metabolism -E749 Disorder of carbohydrate metabolism, unspecified -E7500 GM2 gangliosidosis, unspecified -E7501 Sandhoff disease -E7502 Tay-Sachs disease -E7509 Other GM2 gangliosidosis -E7510 Unspecified gangliosidosis -E7511 Mucolipidosis IV -E7519 Other gangliosidosis -E7521 Fabry (-Anderson) disease -E7522 Gaucher disease -E7523 Krabbe disease -E75240 Niemann-Pick disease type A -E75241 Niemann-Pick disease type B -E75242 Niemann-Pick disease type C -E75243 Niemann-Pick disease type D -E75248 Other Niemann-Pick disease -E75249 Niemann-Pick disease, unspecified -E7525 Metachromatic leukodystrophy -E7529 Other sphingolipidosis -E753 Sphingolipidosis, unspecified -E754 Neuronal ceroid lipofuscinosis -E755 Other lipid storage disorders -E756 Lipid storage disorder, unspecified -E7601 Hurler's syndrome -E7602 Hurler-Scheie syndrome -E7603 Scheie's syndrome -E761 Mucopolysaccharidosis, type II -E76210 Morquio A mucopolysaccharidoses -E76211 Morquio B mucopolysaccharidoses -E76219 Morquio mucopolysaccharidoses, unspecified -E7622 Sanfilippo mucopolysaccharidoses -E7629 Other mucopolysaccharidoses -E763 Mucopolysaccharidosis, unspecified -E768 Other disorders of glucosaminoglycan metabolism -E769 Glucosaminoglycan metabolism disorder, unspecified -E770 Defects in post-translational modification of lysosomal enzymes -E771 Defects in glycoprotein degradation -E778 Other disorders of glycoprotein metabolism -E779 Disorder of glycoprotein metabolism, unspecified -E7800 Pure hypercholesterolemia, unspecified -E7801 Familial hypercholesterolemia -E781 Pure hyperglyceridemia -E782 Mixed hyperlipidemia -E783 Hyperchylomicronemia -E784 Other hyperlipidemia -E785 Hyperlipidemia, unspecified -E786 Lipoprotein deficiency -E7870 Disorder of bile acid and cholesterol metabolism, unspecified -E7871 Barth syndrome -E7872 Smith-Lemli-Opitz syndrome -E7879 Other disorders of bile acid and cholesterol metabolism -E7881 Lipoid dermatoarthritis -E7889 Other lipoprotein metabolism disorders -E789 Disorder of lipoprotein metabolism, unspecified -E790 Hyperuricemia without signs of inflammatory arthritis and tophaceous disease -E791 Lesch-Nyhan syndrome -E792 Myoadenylate deaminase deficiency -E798 Other disorders of purine and pyrimidine metabolism -E799 Disorder of purine and pyrimidine metabolism, unspecified -E800 Hereditary erythropoietic porphyria -E801 Porphyria cutanea tarda -E8020 Unspecified porphyria -E8021 Acute intermittent (hepatic) porphyria -E8029 Other porphyria -E803 Defects of catalase and peroxidase -E804 Gilbert syndrome -E805 Crigler-Najjar syndrome -E806 Other disorders of bilirubin metabolism -E807 Disorder of bilirubin metabolism, unspecified -E8300 Disorder of copper metabolism, unspecified -E8301 Wilson's disease -E8309 Other disorders of copper metabolism -E8310 Disorder of iron metabolism, unspecified -E83110 Hereditary hemochromatosis -E83111 Hemochromatosis due to repeated red blood cell transfusions -E83118 Other hemochromatosis -E83119 Hemochromatosis, unspecified -E8319 Other disorders of iron metabolism -E832 Disorders of zinc metabolism -E8330 Disorder of phosphorus metabolism, unspecified -E8331 Familial hypophosphatemia -E8332 Hereditary vitamin D-dependent rickets (type 1) (type 2) -E8339 Other disorders of phosphorus metabolism -E8340 Disorders of magnesium metabolism, unspecified -E8341 Hypermagnesemia -E8342 Hypomagnesemia -E8349 Other disorders of magnesium metabolism -E8350 Unspecified disorder of calcium metabolism -E8351 Hypocalcemia -E8352 Hypercalcemia -E8359 Other disorders of calcium metabolism -E8381 Hungry bone syndrome -E8389 Other disorders of mineral metabolism -E839 Disorder of mineral metabolism, unspecified -E840 Cystic fibrosis with pulmonary manifestations -E8411 Meconium ileus in cystic fibrosis -E8419 Cystic fibrosis with other intestinal manifestations -E848 Cystic fibrosis with other manifestations -E849 Cystic fibrosis, unspecified -E850 Non-neuropathic heredofamilial amyloidosis -E851 Neuropathic heredofamilial amyloidosis -E852 Heredofamilial amyloidosis, unspecified -E853 Secondary systemic amyloidosis -E854 Organ-limited amyloidosis -E858 Other amyloidosis -E859 Amyloidosis, unspecified -E860 Dehydration -E861 Hypovolemia -E869 Volume depletion, unspecified -E870 Hyperosmolality and hypernatremia -E871 Hypo-osmolality and hyponatremia -E872 Acidosis -E873 Alkalosis -E874 Mixed disorder of acid-base balance -E875 Hyperkalemia -E876 Hypokalemia -E8770 Fluid overload, unspecified -E8771 Transfusion associated circulatory overload -E8779 Other fluid overload -E878 Other disorders of electrolyte and fluid balance, not elsewhere classified -E8801 Alpha-1-antitrypsin deficiency -E8809 Other disorders of plasma-protein metabolism, not elsewhere classified -E881 Lipodystrophy, not elsewhere classified -E882 Lipomatosis, not elsewhere classified -E883 Tumor lysis syndrome -E8840 Mitochondrial metabolism disorder, unspecified -E8841 MELAS syndrome -E8842 MERRF syndrome -E8849 Other mitochondrial metabolism disorders -E8881 Metabolic syndrome -E8889 Other specified metabolic disorders -E889 Metabolic disorder, unspecified -E890 Postprocedural hypothyroidism -E891 Postprocedural hypoinsulinemia -E892 Postprocedural hypoparathyroidism -E893 Postprocedural hypopituitarism -E8940 Asymptomatic postprocedural ovarian failure -E8941 Symptomatic postprocedural ovarian failure -E895 Postprocedural testicular hypofunction -E896 Postprocedural adrenocortical (-medullary) hypofunction -E89810 Postprocedural hemorrhage of an endocrine system organ or structure following an endocrine system procedure -E89811 Postprocedural hemorrhage of an endocrine system organ or structure following other procedure -E89820 Postprocedural hematoma of an endocrine system organ or structure following an endocrine system procedure -E89821 Postprocedural hematoma of an endocrine system organ or structure following other procedure -E89822 Postprocedural seroma of an endocrine system organ or structure following an endocrine system procedure -E89823 Postprocedural seroma of an endocrine system organ or structure following other procedure -E8989 Other postprocedural endocrine and metabolic complications and disorders -F0150 Vascular dementia without behavioral disturbance -F0151 Vascular dementia with behavioral disturbance -F0280 Dementia in other diseases classified elsewhere without behavioral disturbance -F0281 Dementia in other diseases classified elsewhere with behavioral disturbance -F0390 Unspecified dementia without behavioral disturbance -F0391 Unspecified dementia with behavioral disturbance -F04 Amnestic disorder due to known physiological condition -F05 Delirium due to known physiological condition -F060 Psychotic disorder with hallucinations due to known physiological condition -F061 Catatonic disorder due to known physiological condition -F062 Psychotic disorder with delusions due to known physiological condition -F0630 Mood disorder due to known physiological condition, unspecified -F0631 Mood disorder due to known physiological condition with depressive features -F0632 Mood disorder due to known physiological condition with major depressive-like episode -F0633 Mood disorder due to known physiological condition with manic features -F0634 Mood disorder due to known physiological condition with mixed features -F064 Anxiety disorder due to known physiological condition -F068 Other specified mental disorders due to known physiological condition -F070 Personality change due to known physiological condition -F0781 Postconcussional syndrome -F0789 Other personality and behavioral disorders due to known physiological condition -F079 Unspecified personality and behavioral disorder due to known physiological condition -F09 Unspecified mental disorder due to known physiological condition -F1010 Alcohol abuse, uncomplicated -F10120 Alcohol abuse with intoxication, uncomplicated -F10121 Alcohol abuse with intoxication delirium -F10129 Alcohol abuse with intoxication, unspecified -F1014 Alcohol abuse with alcohol-induced mood disorder -F10150 Alcohol abuse with alcohol-induced psychotic disorder with delusions -F10151 Alcohol abuse with alcohol-induced psychotic disorder with hallucinations -F10159 Alcohol abuse with alcohol-induced psychotic disorder, unspecified -F10180 Alcohol abuse with alcohol-induced anxiety disorder -F10181 Alcohol abuse with alcohol-induced sexual dysfunction -F10182 Alcohol abuse with alcohol-induced sleep disorder -F10188 Alcohol abuse with other alcohol-induced disorder -F1019 Alcohol abuse with unspecified alcohol-induced disorder -F1020 Alcohol dependence, uncomplicated -F1021 Alcohol dependence, in remission -F10220 Alcohol dependence with intoxication, uncomplicated -F10221 Alcohol dependence with intoxication delirium -F10229 Alcohol dependence with intoxication, unspecified -F10230 Alcohol dependence with withdrawal, uncomplicated -F10231 Alcohol dependence with withdrawal delirium -F10232 Alcohol dependence with withdrawal with perceptual disturbance -F10239 Alcohol dependence with withdrawal, unspecified -F1024 Alcohol dependence with alcohol-induced mood disorder -F10250 Alcohol dependence with alcohol-induced psychotic disorder with delusions -F10251 Alcohol dependence with alcohol-induced psychotic disorder with hallucinations -F10259 Alcohol dependence with alcohol-induced psychotic disorder, unspecified -F1026 Alcohol dependence with alcohol-induced persisting amnestic disorder -F1027 Alcohol dependence with alcohol-induced persisting dementia -F10280 Alcohol dependence with alcohol-induced anxiety disorder -F10281 Alcohol dependence with alcohol-induced sexual dysfunction -F10282 Alcohol dependence with alcohol-induced sleep disorder -F10288 Alcohol dependence with other alcohol-induced disorder -F1029 Alcohol dependence with unspecified alcohol-induced disorder -F10920 Alcohol use, unspecified with intoxication, uncomplicated -F10921 Alcohol use, unspecified with intoxication delirium -F10929 Alcohol use, unspecified with intoxication, unspecified -F1094 Alcohol use, unspecified with alcohol-induced mood disorder -F10950 Alcohol use, unspecified with alcohol-induced psychotic disorder with delusions -F10951 Alcohol use, unspecified with alcohol-induced psychotic disorder with hallucinations -F10959 Alcohol use, unspecified with alcohol-induced psychotic disorder, unspecified -F1096 Alcohol use, unspecified with alcohol-induced persisting amnestic disorder -F1097 Alcohol use, unspecified with alcohol-induced persisting dementia -F10980 Alcohol use, unspecified with alcohol-induced anxiety disorder -F10981 Alcohol use, unspecified with alcohol-induced sexual dysfunction -F10982 Alcohol use, unspecified with alcohol-induced sleep disorder -F10988 Alcohol use, unspecified with other alcohol-induced disorder -F1099 Alcohol use, unspecified with unspecified alcohol-induced disorder -F1110 Opioid abuse, uncomplicated -F11120 Opioid abuse with intoxication, uncomplicated -F11121 Opioid abuse with intoxication delirium -F11122 Opioid abuse with intoxication with perceptual disturbance -F11129 Opioid abuse with intoxication, unspecified -F1114 Opioid abuse with opioid-induced mood disorder -F11150 Opioid abuse with opioid-induced psychotic disorder with delusions -F11151 Opioid abuse with opioid-induced psychotic disorder with hallucinations -F11159 Opioid abuse with opioid-induced psychotic disorder, unspecified -F11181 Opioid abuse with opioid-induced sexual dysfunction -F11182 Opioid abuse with opioid-induced sleep disorder -F11188 Opioid abuse with other opioid-induced disorder -F1119 Opioid abuse with unspecified opioid-induced disorder -F1120 Opioid dependence, uncomplicated -F1121 Opioid dependence, in remission -F11220 Opioid dependence with intoxication, uncomplicated -F11221 Opioid dependence with intoxication delirium -F11222 Opioid dependence with intoxication with perceptual disturbance -F11229 Opioid dependence with intoxication, unspecified -F1123 Opioid dependence with withdrawal -F1124 Opioid dependence with opioid-induced mood disorder -F11250 Opioid dependence with opioid-induced psychotic disorder with delusions -F11251 Opioid dependence with opioid-induced psychotic disorder with hallucinations -F11259 Opioid dependence with opioid-induced psychotic disorder, unspecified -F11281 Opioid dependence with opioid-induced sexual dysfunction -F11282 Opioid dependence with opioid-induced sleep disorder -F11288 Opioid dependence with other opioid-induced disorder -F1129 Opioid dependence with unspecified opioid-induced disorder -F1190 Opioid use, unspecified, uncomplicated -F11920 Opioid use, unspecified with intoxication, uncomplicated -F11921 Opioid use, unspecified with intoxication delirium -F11922 Opioid use, unspecified with intoxication with perceptual disturbance -F11929 Opioid use, unspecified with intoxication, unspecified -F1193 Opioid use, unspecified with withdrawal -F1194 Opioid use, unspecified with opioid-induced mood disorder -F11950 Opioid use, unspecified with opioid-induced psychotic disorder with delusions -F11951 Opioid use, unspecified with opioid-induced psychotic disorder with hallucinations -F11959 Opioid use, unspecified with opioid-induced psychotic disorder, unspecified -F11981 Opioid use, unspecified with opioid-induced sexual dysfunction -F11982 Opioid use, unspecified with opioid-induced sleep disorder -F11988 Opioid use, unspecified with other opioid-induced disorder -F1199 Opioid use, unspecified with unspecified opioid-induced disorder -F1210 Cannabis abuse, uncomplicated -F12120 Cannabis abuse with intoxication, uncomplicated -F12121 Cannabis abuse with intoxication delirium -F12122 Cannabis abuse with intoxication with perceptual disturbance -F12129 Cannabis abuse with intoxication, unspecified -F12150 Cannabis abuse with psychotic disorder with delusions -F12151 Cannabis abuse with psychotic disorder with hallucinations -F12159 Cannabis abuse with psychotic disorder, unspecified -F12180 Cannabis abuse with cannabis-induced anxiety disorder -F12188 Cannabis abuse with other cannabis-induced disorder -F1219 Cannabis abuse with unspecified cannabis-induced disorder -F1220 Cannabis dependence, uncomplicated -F1221 Cannabis dependence, in remission -F12220 Cannabis dependence with intoxication, uncomplicated -F12221 Cannabis dependence with intoxication delirium -F12222 Cannabis dependence with intoxication with perceptual disturbance -F12229 Cannabis dependence with intoxication, unspecified -F12250 Cannabis dependence with psychotic disorder with delusions -F12251 Cannabis dependence with psychotic disorder with hallucinations -F12259 Cannabis dependence with psychotic disorder, unspecified -F12280 Cannabis dependence with cannabis-induced anxiety disorder -F12288 Cannabis dependence with other cannabis-induced disorder -F1229 Cannabis dependence with unspecified cannabis-induced disorder -F1290 Cannabis use, unspecified, uncomplicated -F12920 Cannabis use, unspecified with intoxication, uncomplicated -F12921 Cannabis use, unspecified with intoxication delirium -F12922 Cannabis use, unspecified with intoxication with perceptual disturbance -F12929 Cannabis use, unspecified with intoxication, unspecified -F12950 Cannabis use, unspecified with psychotic disorder with delusions -F12951 Cannabis use, unspecified with psychotic disorder with hallucinations -F12959 Cannabis use, unspecified with psychotic disorder, unspecified -F12980 Cannabis use, unspecified with anxiety disorder -F12988 Cannabis use, unspecified with other cannabis-induced disorder -F1299 Cannabis use, unspecified with unspecified cannabis-induced disorder -F1310 Sedative, hypnotic or anxiolytic abuse, uncomplicated -F13120 Sedative, hypnotic or anxiolytic abuse with intoxication, uncomplicated -F13121 Sedative, hypnotic or anxiolytic abuse with intoxication delirium -F13129 Sedative, hypnotic or anxiolytic abuse with intoxication, unspecified -F1314 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced mood disorder -F13150 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced psychotic disorder with delusions -F13151 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced psychotic disorder with hallucinations -F13159 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced psychotic disorder, unspecified -F13180 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced anxiety disorder -F13181 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced sexual dysfunction -F13182 Sedative, hypnotic or anxiolytic abuse with sedative, hypnotic or anxiolytic-induced sleep disorder -F13188 Sedative, hypnotic or anxiolytic abuse with other sedative, hypnotic or anxiolytic-induced disorder -F1319 Sedative, hypnotic or anxiolytic abuse with unspecified sedative, hypnotic or anxiolytic-induced disorder -F1320 Sedative, hypnotic or anxiolytic dependence, uncomplicated -F1321 Sedative, hypnotic or anxiolytic dependence, in remission -F13220 Sedative, hypnotic or anxiolytic dependence with intoxication, uncomplicated -F13221 Sedative, hypnotic or anxiolytic dependence with intoxication delirium -F13229 Sedative, hypnotic or anxiolytic dependence with intoxication, unspecified -F13230 Sedative, hypnotic or anxiolytic dependence with withdrawal, uncomplicated -F13231 Sedative, hypnotic or anxiolytic dependence with withdrawal delirium -F13232 Sedative, hypnotic or anxiolytic dependence with withdrawal with perceptual disturbance -F13239 Sedative, hypnotic or anxiolytic dependence with withdrawal, unspecified -F1324 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced mood disorder -F13250 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced psychotic disorder with delusions -F13251 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced psychotic disorder with hallucinations -F13259 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced psychotic disorder, unspecified -F1326 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced persisting amnestic disorder -F1327 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced persisting dementia -F13280 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced anxiety disorder -F13281 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced sexual dysfunction -F13282 Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced sleep disorder -F13288 Sedative, hypnotic or anxiolytic dependence with other sedative, hypnotic or anxiolytic-induced disorder -F1329 Sedative, hypnotic or anxiolytic dependence with unspecified sedative, hypnotic or anxiolytic-induced disorder -F1390 Sedative, hypnotic, or anxiolytic use, unspecified, uncomplicated -F13920 Sedative, hypnotic or anxiolytic use, unspecified with intoxication, uncomplicated -F13921 Sedative, hypnotic or anxiolytic use, unspecified with intoxication delirium -F13929 Sedative, hypnotic or anxiolytic use, unspecified with intoxication, unspecified -F13930 Sedative, hypnotic or anxiolytic use, unspecified with withdrawal, uncomplicated -F13931 Sedative, hypnotic or anxiolytic use, unspecified with withdrawal delirium -F13932 Sedative, hypnotic or anxiolytic use, unspecified with withdrawal with perceptual disturbances -F13939 Sedative, hypnotic or anxiolytic use, unspecified with withdrawal, unspecified -F1394 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced mood disorder -F13950 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced psychotic disorder with delusions -F13951 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced psychotic disorder with hallucinations -F13959 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced psychotic disorder, unspecified -F1396 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced persisting amnestic disorder -F1397 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced persisting dementia -F13980 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced anxiety disorder -F13981 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced sexual dysfunction -F13982 Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced sleep disorder -F13988 Sedative, hypnotic or anxiolytic use, unspecified with other sedative, hypnotic or anxiolytic-induced disorder -F1399 Sedative, hypnotic or anxiolytic use, unspecified with unspecified sedative, hypnotic or anxiolytic-induced disorder -F1410 Cocaine abuse, uncomplicated -F14120 Cocaine abuse with intoxication, uncomplicated -F14121 Cocaine abuse with intoxication with delirium -F14122 Cocaine abuse with intoxication with perceptual disturbance -F14129 Cocaine abuse with intoxication, unspecified -F1414 Cocaine abuse with cocaine-induced mood disorder -F14150 Cocaine abuse with cocaine-induced psychotic disorder with delusions -F14151 Cocaine abuse with cocaine-induced psychotic disorder with hallucinations -F14159 Cocaine abuse with cocaine-induced psychotic disorder, unspecified -F14180 Cocaine abuse with cocaine-induced anxiety disorder -F14181 Cocaine abuse with cocaine-induced sexual dysfunction -F14182 Cocaine abuse with cocaine-induced sleep disorder -F14188 Cocaine abuse with other cocaine-induced disorder -F1419 Cocaine abuse with unspecified cocaine-induced disorder -F1420 Cocaine dependence, uncomplicated -F1421 Cocaine dependence, in remission -F14220 Cocaine dependence with intoxication, uncomplicated -F14221 Cocaine dependence with intoxication delirium -F14222 Cocaine dependence with intoxication with perceptual disturbance -F14229 Cocaine dependence with intoxication, unspecified -F1423 Cocaine dependence with withdrawal -F1424 Cocaine dependence with cocaine-induced mood disorder -F14250 Cocaine dependence with cocaine-induced psychotic disorder with delusions -F14251 Cocaine dependence with cocaine-induced psychotic disorder with hallucinations -F14259 Cocaine dependence with cocaine-induced psychotic disorder, unspecified -F14280 Cocaine dependence with cocaine-induced anxiety disorder -F14281 Cocaine dependence with cocaine-induced sexual dysfunction -F14282 Cocaine dependence with cocaine-induced sleep disorder -F14288 Cocaine dependence with other cocaine-induced disorder -F1429 Cocaine dependence with unspecified cocaine-induced disorder -F1490 Cocaine use, unspecified, uncomplicated -F14920 Cocaine use, unspecified with intoxication, uncomplicated -F14921 Cocaine use, unspecified with intoxication delirium -F14922 Cocaine use, unspecified with intoxication with perceptual disturbance -F14929 Cocaine use, unspecified with intoxication, unspecified -F1494 Cocaine use, unspecified with cocaine-induced mood disorder -F14950 Cocaine use, unspecified with cocaine-induced psychotic disorder with delusions -F14951 Cocaine use, unspecified with cocaine-induced psychotic disorder with hallucinations -F14959 Cocaine use, unspecified with cocaine-induced psychotic disorder, unspecified -F14980 Cocaine use, unspecified with cocaine-induced anxiety disorder -F14981 Cocaine use, unspecified with cocaine-induced sexual dysfunction -F14982 Cocaine use, unspecified with cocaine-induced sleep disorder -F14988 Cocaine use, unspecified with other cocaine-induced disorder -F1499 Cocaine use, unspecified with unspecified cocaine-induced disorder -F1510 Other stimulant abuse, uncomplicated -F15120 Other stimulant abuse with intoxication, uncomplicated -F15121 Other stimulant abuse with intoxication delirium -F15122 Other stimulant abuse with intoxication with perceptual disturbance -F15129 Other stimulant abuse with intoxication, unspecified -F1514 Other stimulant abuse with stimulant-induced mood disorder -F15150 Other stimulant abuse with stimulant-induced psychotic disorder with delusions -F15151 Other stimulant abuse with stimulant-induced psychotic disorder with hallucinations -F15159 Other stimulant abuse with stimulant-induced psychotic disorder, unspecified -F15180 Other stimulant abuse with stimulant-induced anxiety disorder -F15181 Other stimulant abuse with stimulant-induced sexual dysfunction -F15182 Other stimulant abuse with stimulant-induced sleep disorder -F15188 Other stimulant abuse with other stimulant-induced disorder -F1519 Other stimulant abuse with unspecified stimulant-induced disorder -F1520 Other stimulant dependence, uncomplicated -F1521 Other stimulant dependence, in remission -F15220 Other stimulant dependence with intoxication, uncomplicated -F15221 Other stimulant dependence with intoxication delirium -F15222 Other stimulant dependence with intoxication with perceptual disturbance -F15229 Other stimulant dependence with intoxication, unspecified -F1523 Other stimulant dependence with withdrawal -F1524 Other stimulant dependence with stimulant-induced mood disorder -F15250 Other stimulant dependence with stimulant-induced psychotic disorder with delusions -F15251 Other stimulant dependence with stimulant-induced psychotic disorder with hallucinations -F15259 Other stimulant dependence with stimulant-induced psychotic disorder, unspecified -F15280 Other stimulant dependence with stimulant-induced anxiety disorder -F15281 Other stimulant dependence with stimulant-induced sexual dysfunction -F15282 Other stimulant dependence with stimulant-induced sleep disorder -F15288 Other stimulant dependence with other stimulant-induced disorder -F1529 Other stimulant dependence with unspecified stimulant-induced disorder -F1590 Other stimulant use, unspecified, uncomplicated -F15920 Other stimulant use, unspecified with intoxication, uncomplicated -F15921 Other stimulant use, unspecified with intoxication delirium -F15922 Other stimulant use, unspecified with intoxication with perceptual disturbance -F15929 Other stimulant use, unspecified with intoxication, unspecified -F1593 Other stimulant use, unspecified with withdrawal -F1594 Other stimulant use, unspecified with stimulant-induced mood disorder -F15950 Other stimulant use, unspecified with stimulant-induced psychotic disorder with delusions -F15951 Other stimulant use, unspecified with stimulant-induced psychotic disorder with hallucinations -F15959 Other stimulant use, unspecified with stimulant-induced psychotic disorder, unspecified -F15980 Other stimulant use, unspecified with stimulant-induced anxiety disorder -F15981 Other stimulant use, unspecified with stimulant-induced sexual dysfunction -F15982 Other stimulant use, unspecified with stimulant-induced sleep disorder -F15988 Other stimulant use, unspecified with other stimulant-induced disorder -F1599 Other stimulant use, unspecified with unspecified stimulant-induced disorder -F1610 Hallucinogen abuse, uncomplicated -F16120 Hallucinogen abuse with intoxication, uncomplicated -F16121 Hallucinogen abuse with intoxication with delirium -F16122 Hallucinogen abuse with intoxication with perceptual disturbance -F16129 Hallucinogen abuse with intoxication, unspecified -F1614 Hallucinogen abuse with hallucinogen-induced mood disorder -F16150 Hallucinogen abuse with hallucinogen-induced psychotic disorder with delusions -F16151 Hallucinogen abuse with hallucinogen-induced psychotic disorder with hallucinations -F16159 Hallucinogen abuse with hallucinogen-induced psychotic disorder, unspecified -F16180 Hallucinogen abuse with hallucinogen-induced anxiety disorder -F16183 Hallucinogen abuse with hallucinogen persisting perception disorder (flashbacks) -F16188 Hallucinogen abuse with other hallucinogen-induced disorder -F1619 Hallucinogen abuse with unspecified hallucinogen-induced disorder -F1620 Hallucinogen dependence, uncomplicated -F1621 Hallucinogen dependence, in remission -F16220 Hallucinogen dependence with intoxication, uncomplicated -F16221 Hallucinogen dependence with intoxication with delirium -F16229 Hallucinogen dependence with intoxication, unspecified -F1624 Hallucinogen dependence with hallucinogen-induced mood disorder -F16250 Hallucinogen dependence with hallucinogen-induced psychotic disorder with delusions -F16251 Hallucinogen dependence with hallucinogen-induced psychotic disorder with hallucinations -F16259 Hallucinogen dependence with hallucinogen-induced psychotic disorder, unspecified -F16280 Hallucinogen dependence with hallucinogen-induced anxiety disorder -F16283 Hallucinogen dependence with hallucinogen persisting perception disorder (flashbacks) -F16288 Hallucinogen dependence with other hallucinogen-induced disorder -F1629 Hallucinogen dependence with unspecified hallucinogen-induced disorder -F1690 Hallucinogen use, unspecified, uncomplicated -F16920 Hallucinogen use, unspecified with intoxication, uncomplicated -F16921 Hallucinogen use, unspecified with intoxication with delirium -F16929 Hallucinogen use, unspecified with intoxication, unspecified -F1694 Hallucinogen use, unspecified with hallucinogen-induced mood disorder -F16950 Hallucinogen use, unspecified with hallucinogen-induced psychotic disorder with delusions -F16951 Hallucinogen use, unspecified with hallucinogen-induced psychotic disorder with hallucinations -F16959 Hallucinogen use, unspecified with hallucinogen-induced psychotic disorder, unspecified -F16980 Hallucinogen use, unspecified with hallucinogen-induced anxiety disorder -F16983 Hallucinogen use, unspecified with hallucinogen persisting perception disorder (flashbacks) -F16988 Hallucinogen use, unspecified with other hallucinogen-induced disorder -F1699 Hallucinogen use, unspecified with unspecified hallucinogen-induced disorder -F17200 Nicotine dependence, unspecified, uncomplicated -F17201 Nicotine dependence, unspecified, in remission -F17203 Nicotine dependence unspecified, with withdrawal -F17208 Nicotine dependence, unspecified, with other nicotine-induced disorders -F17209 Nicotine dependence, unspecified, with unspecified nicotine-induced disorders -F17210 Nicotine dependence, cigarettes, uncomplicated -F17211 Nicotine dependence, cigarettes, in remission -F17213 Nicotine dependence, cigarettes, with withdrawal -F17218 Nicotine dependence, cigarettes, with other nicotine-induced disorders -F17219 Nicotine dependence, cigarettes, with unspecified nicotine-induced disorders -F17220 Nicotine dependence, chewing tobacco, uncomplicated -F17221 Nicotine dependence, chewing tobacco, in remission -F17223 Nicotine dependence, chewing tobacco, with withdrawal -F17228 Nicotine dependence, chewing tobacco, with other nicotine-induced disorders -F17229 Nicotine dependence, chewing tobacco, with unspecified nicotine-induced disorders -F17290 Nicotine dependence, other tobacco product, uncomplicated -F17291 Nicotine dependence, other tobacco product, in remission -F17293 Nicotine dependence, other tobacco product, with withdrawal -F17298 Nicotine dependence, other tobacco product, with other nicotine-induced disorders -F17299 Nicotine dependence, other tobacco product, with unspecified nicotine-induced disorders -F1810 Inhalant abuse, uncomplicated -F18120 Inhalant abuse with intoxication, uncomplicated -F18121 Inhalant abuse with intoxication delirium -F18129 Inhalant abuse with intoxication, unspecified -F1814 Inhalant abuse with inhalant-induced mood disorder -F18150 Inhalant abuse with inhalant-induced psychotic disorder with delusions -F18151 Inhalant abuse with inhalant-induced psychotic disorder with hallucinations -F18159 Inhalant abuse with inhalant-induced psychotic disorder, unspecified -F1817 Inhalant abuse with inhalant-induced dementia -F18180 Inhalant abuse with inhalant-induced anxiety disorder -F18188 Inhalant abuse with other inhalant-induced disorder -F1819 Inhalant abuse with unspecified inhalant-induced disorder -F1820 Inhalant dependence, uncomplicated -F1821 Inhalant dependence, in remission -F18220 Inhalant dependence with intoxication, uncomplicated -F18221 Inhalant dependence with intoxication delirium -F18229 Inhalant dependence with intoxication, unspecified -F1824 Inhalant dependence with inhalant-induced mood disorder -F18250 Inhalant dependence with inhalant-induced psychotic disorder with delusions -F18251 Inhalant dependence with inhalant-induced psychotic disorder with hallucinations -F18259 Inhalant dependence with inhalant-induced psychotic disorder, unspecified -F1827 Inhalant dependence with inhalant-induced dementia -F18280 Inhalant dependence with inhalant-induced anxiety disorder -F18288 Inhalant dependence with other inhalant-induced disorder -F1829 Inhalant dependence with unspecified inhalant-induced disorder -F1890 Inhalant use, unspecified, uncomplicated -F18920 Inhalant use, unspecified with intoxication, uncomplicated -F18921 Inhalant use, unspecified with intoxication with delirium -F18929 Inhalant use, unspecified with intoxication, unspecified -F1894 Inhalant use, unspecified with inhalant-induced mood disorder -F18950 Inhalant use, unspecified with inhalant-induced psychotic disorder with delusions -F18951 Inhalant use, unspecified with inhalant-induced psychotic disorder with hallucinations -F18959 Inhalant use, unspecified with inhalant-induced psychotic disorder, unspecified -F1897 Inhalant use, unspecified with inhalant-induced persisting dementia -F18980 Inhalant use, unspecified with inhalant-induced anxiety disorder -F18988 Inhalant use, unspecified with other inhalant-induced disorder -F1899 Inhalant use, unspecified with unspecified inhalant-induced disorder -F1910 Other psychoactive substance abuse, uncomplicated -F19120 Other psychoactive substance abuse with intoxication, uncomplicated -F19121 Other psychoactive substance abuse with intoxication delirium -F19122 Other psychoactive substance abuse with intoxication with perceptual disturbances -F19129 Other psychoactive substance abuse with intoxication, unspecified -F1914 Other psychoactive substance abuse with psychoactive substance-induced mood disorder -F19150 Other psychoactive substance abuse with psychoactive substance-induced psychotic disorder with delusions -F19151 Other psychoactive substance abuse with psychoactive substance-induced psychotic disorder with hallucinations -F19159 Other psychoactive substance abuse with psychoactive substance-induced psychotic disorder, unspecified -F1916 Other psychoactive substance abuse with psychoactive substance-induced persisting amnestic disorder -F1917 Other psychoactive substance abuse with psychoactive substance-induced persisting dementia -F19180 Other psychoactive substance abuse with psychoactive substance-induced anxiety disorder -F19181 Other psychoactive substance abuse with psychoactive substance-induced sexual dysfunction -F19182 Other psychoactive substance abuse with psychoactive substance-induced sleep disorder -F19188 Other psychoactive substance abuse with other psychoactive substance-induced disorder -F1919 Other psychoactive substance abuse with unspecified psychoactive substance-induced disorder -F1920 Other psychoactive substance dependence, uncomplicated -F1921 Other psychoactive substance dependence, in remission -F19220 Other psychoactive substance dependence with intoxication, uncomplicated -F19221 Other psychoactive substance dependence with intoxication delirium -F19222 Other psychoactive substance dependence with intoxication with perceptual disturbance -F19229 Other psychoactive substance dependence with intoxication, unspecified -F19230 Other psychoactive substance dependence with withdrawal, uncomplicated -F19231 Other psychoactive substance dependence with withdrawal delirium -F19232 Other psychoactive substance dependence with withdrawal with perceptual disturbance -F19239 Other psychoactive substance dependence with withdrawal, unspecified -F1924 Other psychoactive substance dependence with psychoactive substance-induced mood disorder -F19250 Other psychoactive substance dependence with psychoactive substance-induced psychotic disorder with delusions -F19251 Other psychoactive substance dependence with psychoactive substance-induced psychotic disorder with hallucinations -F19259 Other psychoactive substance dependence with psychoactive substance-induced psychotic disorder, unspecified -F1926 Other psychoactive substance dependence with psychoactive substance-induced persisting amnestic disorder -F1927 Other psychoactive substance dependence with psychoactive substance-induced persisting dementia -F19280 Other psychoactive substance dependence with psychoactive substance-induced anxiety disorder -F19281 Other psychoactive substance dependence with psychoactive substance-induced sexual dysfunction -F19282 Other psychoactive substance dependence with psychoactive substance-induced sleep disorder -F19288 Other psychoactive substance dependence with other psychoactive substance-induced disorder -F1929 Other psychoactive substance dependence with unspecified psychoactive substance-induced disorder -F1990 Other psychoactive substance use, unspecified, uncomplicated -F19920 Other psychoactive substance use, unspecified with intoxication, uncomplicated -F19921 Other psychoactive substance use, unspecified with intoxication with delirium -F19922 Other psychoactive substance use, unspecified with intoxication with perceptual disturbance -F19929 Other psychoactive substance use, unspecified with intoxication, unspecified -F19930 Other psychoactive substance use, unspecified with withdrawal, uncomplicated -F19931 Other psychoactive substance use, unspecified with withdrawal delirium -F19932 Other psychoactive substance use, unspecified with withdrawal with perceptual disturbance -F19939 Other psychoactive substance use, unspecified with withdrawal, unspecified -F1994 Other psychoactive substance use, unspecified with psychoactive substance-induced mood disorder -F19950 Other psychoactive substance use, unspecified with psychoactive substance-induced psychotic disorder with delusions -F19951 Other psychoactive substance use, unspecified with psychoactive substance-induced psychotic disorder with hallucinations -F19959 Other psychoactive substance use, unspecified with psychoactive substance-induced psychotic disorder, unspecified -F1996 Other psychoactive substance use, unspecified with psychoactive substance-induced persisting amnestic disorder -F1997 Other psychoactive substance use, unspecified with psychoactive substance-induced persisting dementia -F19980 Other psychoactive substance use, unspecified with psychoactive substance-induced anxiety disorder -F19981 Other psychoactive substance use, unspecified with psychoactive substance-induced sexual dysfunction -F19982 Other psychoactive substance use, unspecified with psychoactive substance-induced sleep disorder -F19988 Other psychoactive substance use, unspecified with other psychoactive substance-induced disorder -F1999 Other psychoactive substance use, unspecified with unspecified psychoactive substance-induced disorder -F200 Paranoid schizophrenia -F201 Disorganized schizophrenia -F202 Catatonic schizophrenia -F203 Undifferentiated schizophrenia -F205 Residual schizophrenia -F2081 Schizophreniform disorder -F2089 Other schizophrenia -F209 Schizophrenia, unspecified -F21 Schizotypal disorder -F22 Delusional disorders -F23 Brief psychotic disorder -F24 Shared psychotic disorder -F250 Schizoaffective disorder, bipolar type -F251 Schizoaffective disorder, depressive type -F258 Other schizoaffective disorders -F259 Schizoaffective disorder, unspecified -F28 Other psychotic disorder not due to a substance or known physiological condition -F29 Unspecified psychosis not due to a substance or known physiological condition -F3010 Manic episode without psychotic symptoms, unspecified -F3011 Manic episode without psychotic symptoms, mild -F3012 Manic episode without psychotic symptoms, moderate -F3013 Manic episode, severe, without psychotic symptoms -F302 Manic episode, severe with psychotic symptoms -F303 Manic episode in partial remission -F304 Manic episode in full remission -F308 Other manic episodes -F309 Manic episode, unspecified -F310 Bipolar disorder, current episode hypomanic -F3110 Bipolar disorder, current episode manic without psychotic features, unspecified -F3111 Bipolar disorder, current episode manic without psychotic features, mild -F3112 Bipolar disorder, current episode manic without psychotic features, moderate -F3113 Bipolar disorder, current episode manic without psychotic features, severe -F312 Bipolar disorder, current episode manic severe with psychotic features -F3130 Bipolar disorder, current episode depressed, mild or moderate severity, unspecified -F3131 Bipolar disorder, current episode depressed, mild -F3132 Bipolar disorder, current episode depressed, moderate -F314 Bipolar disorder, current episode depressed, severe, without psychotic features -F315 Bipolar disorder, current episode depressed, severe, with psychotic features -F3160 Bipolar disorder, current episode mixed, unspecified -F3161 Bipolar disorder, current episode mixed, mild -F3162 Bipolar disorder, current episode mixed, moderate -F3163 Bipolar disorder, current episode mixed, severe, without psychotic features -F3164 Bipolar disorder, current episode mixed, severe, with psychotic features -F3170 Bipolar disorder, currently in remission, most recent episode unspecified -F3171 Bipolar disorder, in partial remission, most recent episode hypomanic -F3172 Bipolar disorder, in full remission, most recent episode hypomanic -F3173 Bipolar disorder, in partial remission, most recent episode manic -F3174 Bipolar disorder, in full remission, most recent episode manic -F3175 Bipolar disorder, in partial remission, most recent episode depressed -F3176 Bipolar disorder, in full remission, most recent episode depressed -F3177 Bipolar disorder, in partial remission, most recent episode mixed -F3178 Bipolar disorder, in full remission, most recent episode mixed -F3181 Bipolar II disorder -F3189 Other bipolar disorder -F319 Bipolar disorder, unspecified -F320 Major depressive disorder, single episode, mild -F321 Major depressive disorder, single episode, moderate -F322 Major depressive disorder, single episode, severe without psychotic features -F323 Major depressive disorder, single episode, severe with psychotic features -F324 Major depressive disorder, single episode, in partial remission -F325 Major depressive disorder, single episode, in full remission -F3281 Premenstrual dysphoric disorder -F3289 Other specified depressive episodes -F329 Major depressive disorder, single episode, unspecified -F330 Major depressive disorder, recurrent, mild -F331 Major depressive disorder, recurrent, moderate -F332 Major depressive disorder, recurrent severe without psychotic features -F333 Major depressive disorder, recurrent, severe with psychotic symptoms -F3340 Major depressive disorder, recurrent, in remission, unspecified -F3341 Major depressive disorder, recurrent, in partial remission -F3342 Major depressive disorder, recurrent, in full remission -F338 Other recurrent depressive disorders -F339 Major depressive disorder, recurrent, unspecified -F340 Cyclothymic disorder -F341 Dysthymic disorder -F3481 Disruptive mood dysregulation disorder -F3489 Other specified persistent mood disorders -F349 Persistent mood [affective] disorder, unspecified -F39 Unspecified mood [affective] disorder -F4000 Agoraphobia, unspecified -F4001 Agoraphobia with panic disorder -F4002 Agoraphobia without panic disorder -F4010 Social phobia, unspecified -F4011 Social phobia, generalized -F40210 Arachnophobia -F40218 Other animal type phobia -F40220 Fear of thunderstorms -F40228 Other natural environment type phobia -F40230 Fear of blood -F40231 Fear of injections and transfusions -F40232 Fear of other medical care -F40233 Fear of injury -F40240 Claustrophobia -F40241 Acrophobia -F40242 Fear of bridges -F40243 Fear of flying -F40248 Other situational type phobia -F40290 Androphobia -F40291 Gynephobia -F40298 Other specified phobia -F408 Other phobic anxiety disorders -F409 Phobic anxiety disorder, unspecified -F410 Panic disorder [episodic paroxysmal anxiety] without agoraphobia -F411 Generalized anxiety disorder -F413 Other mixed anxiety disorders -F418 Other specified anxiety disorders -F419 Anxiety disorder, unspecified -F422 Mixed obsessional thoughts and acts -F423 Hoarding disorder -F424 Excoriation (skin-picking) disorder -F428 Other obsessive-compulsive disorder -F429 Obsessive-compulsive disorder, unspecified -F430 Acute stress reaction -F4310 Post-traumatic stress disorder, unspecified -F4311 Post-traumatic stress disorder, acute -F4312 Post-traumatic stress disorder, chronic -F4320 Adjustment disorder, unspecified -F4321 Adjustment disorder with depressed mood -F4322 Adjustment disorder with anxiety -F4323 Adjustment disorder with mixed anxiety and depressed mood -F4324 Adjustment disorder with disturbance of conduct -F4325 Adjustment disorder with mixed disturbance of emotions and conduct -F4329 Adjustment disorder with other symptoms -F438 Other reactions to severe stress -F439 Reaction to severe stress, unspecified -F440 Dissociative amnesia -F441 Dissociative fugue -F442 Dissociative stupor -F444 Conversion disorder with motor symptom or deficit -F445 Conversion disorder with seizures or convulsions -F446 Conversion disorder with sensory symptom or deficit -F447 Conversion disorder with mixed symptom presentation -F4481 Dissociative identity disorder -F4489 Other dissociative and conversion disorders -F449 Dissociative and conversion disorder, unspecified -F450 Somatization disorder -F451 Undifferentiated somatoform disorder -F4520 Hypochondriacal disorder, unspecified -F4521 Hypochondriasis -F4522 Body dysmorphic disorder -F4529 Other hypochondriacal disorders -F4541 Pain disorder exclusively related to psychological factors -F4542 Pain disorder with related psychological factors -F458 Other somatoform disorders -F459 Somatoform disorder, unspecified -F481 Depersonalization-derealization syndrome -F482 Pseudobulbar affect -F488 Other specified nonpsychotic mental disorders -F489 Nonpsychotic mental disorder, unspecified -F5000 Anorexia nervosa, unspecified -F5001 Anorexia nervosa, restricting type -F5002 Anorexia nervosa, binge eating/purging type -F502 Bulimia nervosa -F5081 Binge eating disorder -F5089 Other specified eating disorder -F509 Eating disorder, unspecified -F5101 Primary insomnia -F5102 Adjustment insomnia -F5103 Paradoxical insomnia -F5104 Psychophysiologic insomnia -F5105 Insomnia due to other mental disorder -F5109 Other insomnia not due to a substance or known physiological condition -F5111 Primary hypersomnia -F5112 Insufficient sleep syndrome -F5113 Hypersomnia due to other mental disorder -F5119 Other hypersomnia not due to a substance or known physiological condition -F513 Sleepwalking [somnambulism] -F514 Sleep terrors [night terrors] -F515 Nightmare disorder -F518 Other sleep disorders not due to a substance or known physiological condition -F519 Sleep disorder not due to a substance or known physiological condition, unspecified -F520 Hypoactive sexual desire disorder -F521 Sexual aversion disorder -F5221 Male erectile disorder -F5222 Female sexual arousal disorder -F5231 Female orgasmic disorder -F5232 Male orgasmic disorder -F524 Premature ejaculation -F525 Vaginismus not due to a substance or known physiological condition -F526 Dyspareunia not due to a substance or known physiological condition -F528 Other sexual dysfunction not due to a substance or known physiological condition -F529 Unspecified sexual dysfunction not due to a substance or known physiological condition -F53 Puerperal psychosis -F54 Psychological and behavioral factors associated with disorders or diseases classified elsewhere -F550 Abuse of antacids -F551 Abuse of herbal or folk remedies -F552 Abuse of laxatives -F553 Abuse of steroids or hormones -F554 Abuse of vitamins -F558 Abuse of other non-psychoactive substances -F59 Unspecified behavioral syndromes associated with physiological disturbances and physical factors -F600 Paranoid personality disorder -F601 Schizoid personality disorder -F602 Antisocial personality disorder -F603 Borderline personality disorder -F604 Histrionic personality disorder -F605 Obsessive-compulsive personality disorder -F606 Avoidant personality disorder -F607 Dependent personality disorder -F6081 Narcissistic personality disorder -F6089 Other specific personality disorders -F609 Personality disorder, unspecified -F630 Pathological gambling -F631 Pyromania -F632 Kleptomania -F633 Trichotillomania -F6381 Intermittent explosive disorder -F6389 Other impulse disorders -F639 Impulse disorder, unspecified -F640 Transsexualism -F641 Dual role transvestism -F642 Gender identity disorder of childhood -F648 Other gender identity disorders -F649 Gender identity disorder, unspecified -F650 Fetishism -F651 Transvestic fetishism -F652 Exhibitionism -F653 Voyeurism -F654 Pedophilia -F6550 Sadomasochism, unspecified -F6551 Sexual masochism -F6552 Sexual sadism -F6581 Frotteurism -F6589 Other paraphilias -F659 Paraphilia, unspecified -F66 Other sexual disorders -F6810 Factitious disorder, unspecified -F6811 Factitious disorder with predominantly psychological signs and symptoms -F6812 Factitious disorder with predominantly physical signs and symptoms -F6813 Factitious disorder with combined psychological and physical signs and symptoms -F688 Other specified disorders of adult personality and behavior -F69 Unspecified disorder of adult personality and behavior -F70 Mild intellectual disabilities -F71 Moderate intellectual disabilities -F72 Severe intellectual disabilities -F73 Profound intellectual disabilities -F78 Other intellectual disabilities -F79 Unspecified intellectual disabilities -F800 Phonological disorder -F801 Expressive language disorder -F802 Mixed receptive-expressive language disorder -F804 Speech and language development delay due to hearing loss -F8081 Childhood onset fluency disorder -F8082 Social pragmatic communication disorder -F8089 Other developmental disorders of speech and language -F809 Developmental disorder of speech and language, unspecified -F810 Specific reading disorder -F812 Mathematics disorder -F8181 Disorder of written expression -F8189 Other developmental disorders of scholastic skills -F819 Developmental disorder of scholastic skills, unspecified -F82 Specific developmental disorder of motor function -F840 Autistic disorder -F842 Rett's syndrome -F843 Other childhood disintegrative disorder -F845 Asperger's syndrome -F848 Other pervasive developmental disorders -F849 Pervasive developmental disorder, unspecified -F88 Other disorders of psychological development -F89 Unspecified disorder of psychological development -F900 Attention-deficit hyperactivity disorder, predominantly inattentive type -F901 Attention-deficit hyperactivity disorder, predominantly hyperactive type -F902 Attention-deficit hyperactivity disorder, combined type -F908 Attention-deficit hyperactivity disorder, other type -F909 Attention-deficit hyperactivity disorder, unspecified type -F910 Conduct disorder confined to family context -F911 Conduct disorder, childhood-onset type -F912 Conduct disorder, adolescent-onset type -F913 Oppositional defiant disorder -F918 Other conduct disorders -F919 Conduct disorder, unspecified -F930 Separation anxiety disorder of childhood -F938 Other childhood emotional disorders -F939 Childhood emotional disorder, unspecified -F940 Selective mutism -F941 Reactive attachment disorder of childhood -F942 Disinhibited attachment disorder of childhood -F948 Other childhood disorders of social functioning -F949 Childhood disorder of social functioning, unspecified -F950 Transient tic disorder -F951 Chronic motor or vocal tic disorder -F952 Tourette's disorder -F958 Other tic disorders -F959 Tic disorder, unspecified -F980 Enuresis not due to a substance or known physiological condition -F981 Encopresis not due to a substance or known physiological condition -F9821 Rumination disorder of infancy -F9829 Other feeding disorders of infancy and early childhood -F983 Pica of infancy and childhood -F984 Stereotyped movement disorders -F985 Adult onset fluency disorder -F988 Other specified behavioral and emotional disorders with onset usually occurring in childhood and adolescence -F989 Unspecified behavioral and emotional disorders with onset usually occurring in childhood and adolescence -F99 Mental disorder, not otherwise specified -G000 Hemophilus meningitis -G001 Pneumococcal meningitis -G002 Streptococcal meningitis -G003 Staphylococcal meningitis -G008 Other bacterial meningitis -G009 Bacterial meningitis, unspecified -G01 Meningitis in bacterial diseases classified elsewhere -G02 Meningitis in other infectious and parasitic diseases classified elsewhere -G030 Nonpyogenic meningitis -G031 Chronic meningitis -G032 Benign recurrent meningitis [Mollaret] -G038 Meningitis due to other specified causes -G039 Meningitis, unspecified -G0400 Acute disseminated encephalitis and encephalomyelitis, unspecified -G0401 Postinfectious acute disseminated encephalitis and encephalomyelitis (postinfectious ADEM) -G0402 Postimmunization acute disseminated encephalitis, myelitis and encephalomyelitis -G041 Tropical spastic paraplegia -G042 Bacterial meningoencephalitis and meningomyelitis, not elsewhere classified -G0430 Acute necrotizing hemorrhagic encephalopathy, unspecified -G0431 Postinfectious acute necrotizing hemorrhagic encephalopathy -G0432 Postimmunization acute necrotizing hemorrhagic encephalopathy -G0439 Other acute necrotizing hemorrhagic encephalopathy -G0481 Other encephalitis and encephalomyelitis -G0489 Other myelitis -G0490 Encephalitis and encephalomyelitis, unspecified -G0491 Myelitis, unspecified -G053 Encephalitis and encephalomyelitis in diseases classified elsewhere -G054 Myelitis in diseases classified elsewhere -G060 Intracranial abscess and granuloma -G061 Intraspinal abscess and granuloma -G062 Extradural and subdural abscess, unspecified -G07 Intracranial and intraspinal abscess and granuloma in diseases classified elsewhere -G08 Intracranial and intraspinal phlebitis and thrombophlebitis -G09 Sequelae of inflammatory diseases of central nervous system -G10 Huntington's disease -G110 Congenital nonprogressive ataxia -G111 Early-onset cerebellar ataxia -G112 Late-onset cerebellar ataxia -G113 Cerebellar ataxia with defective DNA repair -G114 Hereditary spastic paraplegia -G118 Other hereditary ataxias -G119 Hereditary ataxia, unspecified -G120 Infantile spinal muscular atrophy, type I [Werdnig-Hoffman] -G121 Other inherited spinal muscular atrophy -G1220 Motor neuron disease, unspecified -G1221 Amyotrophic lateral sclerosis -G1222 Progressive bulbar palsy -G1229 Other motor neuron disease -G128 Other spinal muscular atrophies and related syndromes -G129 Spinal muscular atrophy, unspecified -G130 Paraneoplastic neuromyopathy and neuropathy -G131 Other systemic atrophy primarily affecting central nervous system in neoplastic disease -G132 Systemic atrophy primarily affecting the central nervous system in myxedema -G138 Systemic atrophy primarily affecting central nervous system in other diseases classified elsewhere -G14 Postpolio syndrome -G20 Parkinson's disease -G210 Malignant neuroleptic syndrome -G2111 Neuroleptic induced parkinsonism -G2119 Other drug induced secondary parkinsonism -G212 Secondary parkinsonism due to other external agents -G213 Postencephalitic parkinsonism -G214 Vascular parkinsonism -G218 Other secondary parkinsonism -G219 Secondary parkinsonism, unspecified -G230 Hallervorden-Spatz disease -G231 Progressive supranuclear ophthalmoplegia [Steele-Richardson-Olszewski] -G232 Striatonigral degeneration -G238 Other specified degenerative diseases of basal ganglia -G239 Degenerative disease of basal ganglia, unspecified -G2401 Drug induced subacute dyskinesia -G2402 Drug induced acute dystonia -G2409 Other drug induced dystonia -G241 Genetic torsion dystonia -G242 Idiopathic nonfamilial dystonia -G243 Spasmodic torticollis -G244 Idiopathic orofacial dystonia -G245 Blepharospasm -G248 Other dystonia -G249 Dystonia, unspecified -G250 Essential tremor -G251 Drug-induced tremor -G252 Other specified forms of tremor -G253 Myoclonus -G254 Drug-induced chorea -G255 Other chorea -G2561 Drug induced tics -G2569 Other tics of organic origin -G2570 Drug induced movement disorder, unspecified -G2571 Drug induced akathisia -G2579 Other drug induced movement disorders -G2581 Restless legs syndrome -G2582 Stiff-man syndrome -G2583 Benign shuddering attacks -G2589 Other specified extrapyramidal and movement disorders -G259 Extrapyramidal and movement disorder, unspecified -G26 Extrapyramidal and movement disorders in diseases classified elsewhere -G300 Alzheimer's disease with early onset -G301 Alzheimer's disease with late onset -G308 Other Alzheimer's disease -G309 Alzheimer's disease, unspecified -G3101 Pick's disease -G3109 Other frontotemporal dementia -G311 Senile degeneration of brain, not elsewhere classified -G312 Degeneration of nervous system due to alcohol -G3181 Alpers disease -G3182 Leigh's disease -G3183 Dementia with Lewy bodies -G3184 Mild cognitive impairment, so stated -G3185 Corticobasal degeneration -G3189 Other specified degenerative diseases of nervous system -G319 Degenerative disease of nervous system, unspecified -G320 Subacute combined degeneration of spinal cord in diseases classified elsewhere -G3281 Cerebellar ataxia in diseases classified elsewhere -G3289 Other specified degenerative disorders of nervous system in diseases classified elsewhere -G35 Multiple sclerosis -G360 Neuromyelitis optica [Devic] -G361 Acute and subacute hemorrhagic leukoencephalitis [Hurst] -G368 Other specified acute disseminated demyelination -G369 Acute disseminated demyelination, unspecified -G370 Diffuse sclerosis of central nervous system -G371 Central demyelination of corpus callosum -G372 Central pontine myelinolysis -G373 Acute transverse myelitis in demyelinating disease of central nervous system -G374 Subacute necrotizing myelitis of central nervous system -G375 Concentric sclerosis [Balo] of central nervous system -G378 Other specified demyelinating diseases of central nervous system -G379 Demyelinating disease of central nervous system, unspecified -G40001 Localization-related (focal) (partial) idiopathic epilepsy and epileptic syndromes with seizures of localized onset, not intractable, with status epilepticus -G40009 Localization-related (focal) (partial) idiopathic epilepsy and epileptic syndromes with seizures of localized onset, not intractable, without status epilepticus -G40011 Localization-related (focal) (partial) idiopathic epilepsy and epileptic syndromes with seizures of localized onset, intractable, with status epilepticus -G40019 Localization-related (focal) (partial) idiopathic epilepsy and epileptic syndromes with seizures of localized onset, intractable, without status epilepticus -G40101 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with simple partial seizures, not intractable, with status epilepticus -G40109 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with simple partial seizures, not intractable, without status epilepticus -G40111 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with simple partial seizures, intractable, with status epilepticus -G40119 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with simple partial seizures, intractable, without status epilepticus -G40201 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with complex partial seizures, not intractable, with status epilepticus -G40209 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with complex partial seizures, not intractable, without status epilepticus -G40211 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with complex partial seizures, intractable, with status epilepticus -G40219 Localization-related (focal) (partial) symptomatic epilepsy and epileptic syndromes with complex partial seizures, intractable, without status epilepticus -G40301 Generalized idiopathic epilepsy and epileptic syndromes, not intractable, with status epilepticus -G40309 Generalized idiopathic epilepsy and epileptic syndromes, not intractable, without status epilepticus -G40311 Generalized idiopathic epilepsy and epileptic syndromes, intractable, with status epilepticus -G40319 Generalized idiopathic epilepsy and epileptic syndromes, intractable, without status epilepticus -G40A01 Absence epileptic syndrome, not intractable, with status epilepticus -G40A09 Absence epileptic syndrome, not intractable, without status epilepticus -G40A11 Absence epileptic syndrome, intractable, with status epilepticus -G40A19 Absence epileptic syndrome, intractable, without status epilepticus -G40B01 Juvenile myoclonic epilepsy, not intractable, with status epilepticus -G40B09 Juvenile myoclonic epilepsy, not intractable, without status epilepticus -G40B11 Juvenile myoclonic epilepsy, intractable, with status epilepticus -G40B19 Juvenile myoclonic epilepsy, intractable, without status epilepticus -G40401 Other generalized epilepsy and epileptic syndromes, not intractable, with status epilepticus -G40409 Other generalized epilepsy and epileptic syndromes, not intractable, without status epilepticus -G40411 Other generalized epilepsy and epileptic syndromes, intractable, with status epilepticus -G40419 Other generalized epilepsy and epileptic syndromes, intractable, without status epilepticus -G40501 Epileptic seizures related to external causes, not intractable, with status epilepticus -G40509 Epileptic seizures related to external causes, not intractable, without status epilepticus -G40801 Other epilepsy, not intractable, with status epilepticus -G40802 Other epilepsy, not intractable, without status epilepticus -G40803 Other epilepsy, intractable, with status epilepticus -G40804 Other epilepsy, intractable, without status epilepticus -G40811 Lennox-Gastaut syndrome, not intractable, with status epilepticus -G40812 Lennox-Gastaut syndrome, not intractable, without status epilepticus -G40813 Lennox-Gastaut syndrome, intractable, with status epilepticus -G40814 Lennox-Gastaut syndrome, intractable, without status epilepticus -G40821 Epileptic spasms, not intractable, with status epilepticus -G40822 Epileptic spasms, not intractable, without status epilepticus -G40823 Epileptic spasms, intractable, with status epilepticus -G40824 Epileptic spasms, intractable, without status epilepticus -G4089 Other seizures -G40901 Epilepsy, unspecified, not intractable, with status epilepticus -G40909 Epilepsy, unspecified, not intractable, without status epilepticus -G40911 Epilepsy, unspecified, intractable, with status epilepticus -G40919 Epilepsy, unspecified, intractable, without status epilepticus -G43001 Migraine without aura, not intractable, with status migrainosus -G43009 Migraine without aura, not intractable, without status migrainosus -G43011 Migraine without aura, intractable, with status migrainosus -G43019 Migraine without aura, intractable, without status migrainosus -G43101 Migraine with aura, not intractable, with status migrainosus -G43109 Migraine with aura, not intractable, without status migrainosus -G43111 Migraine with aura, intractable, with status migrainosus -G43119 Migraine with aura, intractable, without status migrainosus -G43401 Hemiplegic migraine, not intractable, with status migrainosus -G43409 Hemiplegic migraine, not intractable, without status migrainosus -G43411 Hemiplegic migraine, intractable, with status migrainosus -G43419 Hemiplegic migraine, intractable, without status migrainosus -G43501 Persistent migraine aura without cerebral infarction, not intractable, with status migrainosus -G43509 Persistent migraine aura without cerebral infarction, not intractable, without status migrainosus -G43511 Persistent migraine aura without cerebral infarction, intractable, with status migrainosus -G43519 Persistent migraine aura without cerebral infarction, intractable, without status migrainosus -G43601 Persistent migraine aura with cerebral infarction, not intractable, with status migrainosus -G43609 Persistent migraine aura with cerebral infarction, not intractable, without status migrainosus -G43611 Persistent migraine aura with cerebral infarction, intractable, with status migrainosus -G43619 Persistent migraine aura with cerebral infarction, intractable, without status migrainosus -G43701 Chronic migraine without aura, not intractable, with status migrainosus -G43709 Chronic migraine without aura, not intractable, without status migrainosus -G43711 Chronic migraine without aura, intractable, with status migrainosus -G43719 Chronic migraine without aura, intractable, without status migrainosus -G43A0 Cyclical vomiting, not intractable -G43A1 Cyclical vomiting, intractable -G43B0 Ophthalmoplegic migraine, not intractable -G43B1 Ophthalmoplegic migraine, intractable -G43C0 Periodic headache syndromes in child or adult, not intractable -G43C1 Periodic headache syndromes in child or adult, intractable -G43D0 Abdominal migraine, not intractable -G43D1 Abdominal migraine, intractable -G43801 Other migraine, not intractable, with status migrainosus -G43809 Other migraine, not intractable, without status migrainosus -G43811 Other migraine, intractable, with status migrainosus -G43819 Other migraine, intractable, without status migrainosus -G43821 Menstrual migraine, not intractable, with status migrainosus -G43829 Menstrual migraine, not intractable, without status migrainosus -G43831 Menstrual migraine, intractable, with status migrainosus -G43839 Menstrual migraine, intractable, without status migrainosus -G43901 Migraine, unspecified, not intractable, with status migrainosus -G43909 Migraine, unspecified, not intractable, without status migrainosus -G43911 Migraine, unspecified, intractable, with status migrainosus -G43919 Migraine, unspecified, intractable, without status migrainosus -G44001 Cluster headache syndrome, unspecified, intractable -G44009 Cluster headache syndrome, unspecified, not intractable -G44011 Episodic cluster headache, intractable -G44019 Episodic cluster headache, not intractable -G44021 Chronic cluster headache, intractable -G44029 Chronic cluster headache, not intractable -G44031 Episodic paroxysmal hemicrania, intractable -G44039 Episodic paroxysmal hemicrania, not intractable -G44041 Chronic paroxysmal hemicrania, intractable -G44049 Chronic paroxysmal hemicrania, not intractable -G44051 Short lasting unilateral neuralgiform headache with conjunctival injection and tearing (SUNCT), intractable -G44059 Short lasting unilateral neuralgiform headache with conjunctival injection and tearing (SUNCT), not intractable -G44091 Other trigeminal autonomic cephalgias (TAC), intractable -G44099 Other trigeminal autonomic cephalgias (TAC), not intractable -G441 Vascular headache, not elsewhere classified -G44201 Tension-type headache, unspecified, intractable -G44209 Tension-type headache, unspecified, not intractable -G44211 Episodic tension-type headache, intractable -G44219 Episodic tension-type headache, not intractable -G44221 Chronic tension-type headache, intractable -G44229 Chronic tension-type headache, not intractable -G44301 Post-traumatic headache, unspecified, intractable -G44309 Post-traumatic headache, unspecified, not intractable -G44311 Acute post-traumatic headache, intractable -G44319 Acute post-traumatic headache, not intractable -G44321 Chronic post-traumatic headache, intractable -G44329 Chronic post-traumatic headache, not intractable -G4440 Drug-induced headache, not elsewhere classified, not intractable -G4441 Drug-induced headache, not elsewhere classified, intractable -G4451 Hemicrania continua -G4452 New daily persistent headache (NDPH) -G4453 Primary thunderclap headache -G4459 Other complicated headache syndrome -G4481 Hypnic headache -G4482 Headache associated with sexual activity -G4483 Primary cough headache -G4484 Primary exertional headache -G4485 Primary stabbing headache -G4489 Other headache syndrome -G450 Vertebro-basilar artery syndrome -G451 Carotid artery syndrome (hemispheric) -G452 Multiple and bilateral precerebral artery syndromes -G453 Amaurosis fugax -G454 Transient global amnesia -G458 Other transient cerebral ischemic attacks and related syndromes -G459 Transient cerebral ischemic attack, unspecified -G460 Middle cerebral artery syndrome -G461 Anterior cerebral artery syndrome -G462 Posterior cerebral artery syndrome -G463 Brain stem stroke syndrome -G464 Cerebellar stroke syndrome -G465 Pure motor lacunar syndrome -G466 Pure sensory lacunar syndrome -G467 Other lacunar syndromes -G468 Other vascular syndromes of brain in cerebrovascular diseases -G4700 Insomnia, unspecified -G4701 Insomnia due to medical condition -G4709 Other insomnia -G4710 Hypersomnia, unspecified -G4711 Idiopathic hypersomnia with long sleep time -G4712 Idiopathic hypersomnia without long sleep time -G4713 Recurrent hypersomnia -G4714 Hypersomnia due to medical condition -G4719 Other hypersomnia -G4720 Circadian rhythm sleep disorder, unspecified type -G4721 Circadian rhythm sleep disorder, delayed sleep phase type -G4722 Circadian rhythm sleep disorder, advanced sleep phase type -G4723 Circadian rhythm sleep disorder, irregular sleep wake type -G4724 Circadian rhythm sleep disorder, free running type -G4725 Circadian rhythm sleep disorder, jet lag type -G4726 Circadian rhythm sleep disorder, shift work type -G4727 Circadian rhythm sleep disorder in conditions classified elsewhere -G4729 Other circadian rhythm sleep disorder -G4730 Sleep apnea, unspecified -G4731 Primary central sleep apnea -G4732 High altitude periodic breathing -G4733 Obstructive sleep apnea (adult) (pediatric) -G4734 Idiopathic sleep related nonobstructive alveolar hypoventilation -G4735 Congenital central alveolar hypoventilation syndrome -G4736 Sleep related hypoventilation in conditions classified elsewhere -G4737 Central sleep apnea in conditions classified elsewhere -G4739 Other sleep apnea -G47411 Narcolepsy with cataplexy -G47419 Narcolepsy without cataplexy -G47421 Narcolepsy in conditions classified elsewhere with cataplexy -G47429 Narcolepsy in conditions classified elsewhere without cataplexy -G4750 Parasomnia, unspecified -G4751 Confusional arousals -G4752 REM sleep behavior disorder -G4753 Recurrent isolated sleep paralysis -G4754 Parasomnia in conditions classified elsewhere -G4759 Other parasomnia -G4761 Periodic limb movement disorder -G4762 Sleep related leg cramps -G4763 Sleep related bruxism -G4769 Other sleep related movement disorders -G478 Other sleep disorders -G479 Sleep disorder, unspecified -G500 Trigeminal neuralgia -G501 Atypical facial pain -G508 Other disorders of trigeminal nerve -G509 Disorder of trigeminal nerve, unspecified -G510 Bell's palsy -G511 Geniculate ganglionitis -G512 Melkersson's syndrome -G513 Clonic hemifacial spasm -G514 Facial myokymia -G518 Other disorders of facial nerve -G519 Disorder of facial nerve, unspecified -G520 Disorders of olfactory nerve -G521 Disorders of glossopharyngeal nerve -G522 Disorders of vagus nerve -G523 Disorders of hypoglossal nerve -G527 Disorders of multiple cranial nerves -G528 Disorders of other specified cranial nerves -G529 Cranial nerve disorder, unspecified -G53 Cranial nerve disorders in diseases classified elsewhere -G540 Brachial plexus disorders -G541 Lumbosacral plexus disorders -G542 Cervical root disorders, not elsewhere classified -G543 Thoracic root disorders, not elsewhere classified -G544 Lumbosacral root disorders, not elsewhere classified -G545 Neuralgic amyotrophy -G546 Phantom limb syndrome with pain -G547 Phantom limb syndrome without pain -G548 Other nerve root and plexus disorders -G549 Nerve root and plexus disorder, unspecified -G55 Nerve root and plexus compressions in diseases classified elsewhere -G5600 Carpal tunnel syndrome, unspecified upper limb -G5601 Carpal tunnel syndrome, right upper limb -G5602 Carpal tunnel syndrome, left upper limb -G5603 Carpal tunnel syndrome, bilateral upper limbs -G5610 Other lesions of median nerve, unspecified upper limb -G5611 Other lesions of median nerve, right upper limb -G5612 Other lesions of median nerve, left upper limb -G5613 Other lesions of median nerve, bilateral upper limbs -G5620 Lesion of ulnar nerve, unspecified upper limb -G5621 Lesion of ulnar nerve, right upper limb -G5622 Lesion of ulnar nerve, left upper limb -G5623 Lesion of ulnar nerve, bilateral upper limbs -G5630 Lesion of radial nerve, unspecified upper limb -G5631 Lesion of radial nerve, right upper limb -G5632 Lesion of radial nerve, left upper limb -G5633 Lesion of radial nerve, bilateral upper limbs -G5640 Causalgia of unspecified upper limb -G5641 Causalgia of right upper limb -G5642 Causalgia of left upper limb -G5643 Causalgia of bilateral upper limbs -G5680 Other specified mononeuropathies of unspecified upper limb -G5681 Other specified mononeuropathies of right upper limb -G5682 Other specified mononeuropathies of left upper limb -G5683 Other specified mononeuropathies of bilateral upper limbs -G5690 Unspecified mononeuropathy of unspecified upper limb -G5691 Unspecified mononeuropathy of right upper limb -G5692 Unspecified mononeuropathy of left upper limb -G5693 Unspecified mononeuropathy of bilateral upper limbs -G5700 Lesion of sciatic nerve, unspecified lower limb -G5701 Lesion of sciatic nerve, right lower limb -G5702 Lesion of sciatic nerve, left lower limb -G5703 Lesion of sciatic nerve, bilateral lower limbs -G5710 Meralgia paresthetica, unspecified lower limb -G5711 Meralgia paresthetica, right lower limb -G5712 Meralgia paresthetica, left lower limb -G5713 Meralgia paresthetica, bilateral lower limbs -G5720 Lesion of femoral nerve, unspecified lower limb -G5721 Lesion of femoral nerve, right lower limb -G5722 Lesion of femoral nerve, left lower limb -G5723 Lesion of femoral nerve, bilateral lower limbs -G5730 Lesion of lateral popliteal nerve, unspecified lower limb -G5731 Lesion of lateral popliteal nerve, right lower limb -G5732 Lesion of lateral popliteal nerve, left lower limb -G5733 Lesion of lateral popliteal nerve, bilateral lower limbs -G5740 Lesion of medial popliteal nerve, unspecified lower limb -G5741 Lesion of medial popliteal nerve, right lower limb -G5742 Lesion of medial popliteal nerve, left lower limb -G5743 Lesion of medial popliteal nerve, bilateral lower limbs -G5750 Tarsal tunnel syndrome, unspecified lower limb -G5751 Tarsal tunnel syndrome, right lower limb -G5752 Tarsal tunnel syndrome, left lower limb -G5753 Tarsal tunnel syndrome, bilateral lower limbs -G5760 Lesion of plantar nerve, unspecified lower limb -G5761 Lesion of plantar nerve, right lower limb -G5762 Lesion of plantar nerve, left lower limb -G5763 Lesion of plantar nerve, bilateral lower limbs -G5770 Causalgia of unspecified lower limb -G5771 Causalgia of right lower limb -G5772 Causalgia of left lower limb -G5773 Causalgia of bilateral lower limbs -G5780 Other specified mononeuropathies of unspecified lower limb -G5781 Other specified mononeuropathies of right lower limb -G5782 Other specified mononeuropathies of left lower limb -G5783 Other specified mononeuropathies of bilateral lower limbs -G5790 Unspecified mononeuropathy of unspecified lower limb -G5791 Unspecified mononeuropathy of right lower limb -G5792 Unspecified mononeuropathy of left lower limb -G5793 Unspecified mononeuropathy of bilateral lower limbs -G580 Intercostal neuropathy -G587 Mononeuritis multiplex -G588 Other specified mononeuropathies -G589 Mononeuropathy, unspecified -G59 Mononeuropathy in diseases classified elsewhere -G600 Hereditary motor and sensory neuropathy -G601 Refsum's disease -G602 Neuropathy in association with hereditary ataxia -G603 Idiopathic progressive neuropathy -G608 Other hereditary and idiopathic neuropathies -G609 Hereditary and idiopathic neuropathy, unspecified -G610 Guillain-Barre syndrome -G611 Serum neuropathy -G6181 Chronic inflammatory demyelinating polyneuritis -G6182 Multifocal motor neuropathy -G6189 Other inflammatory polyneuropathies -G619 Inflammatory polyneuropathy, unspecified -G620 Drug-induced polyneuropathy -G621 Alcoholic polyneuropathy -G622 Polyneuropathy due to other toxic agents -G6281 Critical illness polyneuropathy -G6282 Radiation-induced polyneuropathy -G6289 Other specified polyneuropathies -G629 Polyneuropathy, unspecified -G63 Polyneuropathy in diseases classified elsewhere -G64 Other disorders of peripheral nervous system -G650 Sequelae of Guillain-Barre syndrome -G651 Sequelae of other inflammatory polyneuropathy -G652 Sequelae of toxic polyneuropathy -G7000 Myasthenia gravis without (acute) exacerbation -G7001 Myasthenia gravis with (acute) exacerbation -G701 Toxic myoneural disorders -G702 Congenital and developmental myasthenia -G7080 Lambert-Eaton syndrome, unspecified -G7081 Lambert-Eaton syndrome in disease classified elsewhere -G7089 Other specified myoneural disorders -G709 Myoneural disorder, unspecified -G710 Muscular dystrophy -G7111 Myotonic muscular dystrophy -G7112 Myotonia congenita -G7113 Myotonic chondrodystrophy -G7114 Drug induced myotonia -G7119 Other specified myotonic disorders -G712 Congenital myopathies -G713 Mitochondrial myopathy, not elsewhere classified -G718 Other primary disorders of muscles -G719 Primary disorder of muscle, unspecified -G720 Drug-induced myopathy -G721 Alcoholic myopathy -G722 Myopathy due to other toxic agents -G723 Periodic paralysis -G7241 Inclusion body myositis [IBM] -G7249 Other inflammatory and immune myopathies, not elsewhere classified -G7281 Critical illness myopathy -G7289 Other specified myopathies -G729 Myopathy, unspecified -G731 Lambert-Eaton syndrome in neoplastic disease -G733 Myasthenic syndromes in other diseases classified elsewhere -G737 Myopathy in diseases classified elsewhere -G800 Spastic quadriplegic cerebral palsy -G801 Spastic diplegic cerebral palsy -G802 Spastic hemiplegic cerebral palsy -G803 Athetoid cerebral palsy -G804 Ataxic cerebral palsy -G808 Other cerebral palsy -G809 Cerebral palsy, unspecified -G8100 Flaccid hemiplegia affecting unspecified side -G8101 Flaccid hemiplegia affecting right dominant side -G8102 Flaccid hemiplegia affecting left dominant side -G8103 Flaccid hemiplegia affecting right nondominant side -G8104 Flaccid hemiplegia affecting left nondominant side -G8110 Spastic hemiplegia affecting unspecified side -G8111 Spastic hemiplegia affecting right dominant side -G8112 Spastic hemiplegia affecting left dominant side -G8113 Spastic hemiplegia affecting right nondominant side -G8114 Spastic hemiplegia affecting left nondominant side -G8190 Hemiplegia, unspecified affecting unspecified side -G8191 Hemiplegia, unspecified affecting right dominant side -G8192 Hemiplegia, unspecified affecting left dominant side -G8193 Hemiplegia, unspecified affecting right nondominant side -G8194 Hemiplegia, unspecified affecting left nondominant side -G8220 Paraplegia, unspecified -G8221 Paraplegia, complete -G8222 Paraplegia, incomplete -G8250 Quadriplegia, unspecified -G8251 Quadriplegia, C1-C4 complete -G8252 Quadriplegia, C1-C4 incomplete -G8253 Quadriplegia, C5-C7 complete -G8254 Quadriplegia, C5-C7 incomplete -G830 Diplegia of upper limbs -G8310 Monoplegia of lower limb affecting unspecified side -G8311 Monoplegia of lower limb affecting right dominant side -G8312 Monoplegia of lower limb affecting left dominant side -G8313 Monoplegia of lower limb affecting right nondominant side -G8314 Monoplegia of lower limb affecting left nondominant side -G8320 Monoplegia of upper limb affecting unspecified side -G8321 Monoplegia of upper limb affecting right dominant side -G8322 Monoplegia of upper limb affecting left dominant side -G8323 Monoplegia of upper limb affecting right nondominant side -G8324 Monoplegia of upper limb affecting left nondominant side -G8330 Monoplegia, unspecified affecting unspecified side -G8331 Monoplegia, unspecified affecting right dominant side -G8332 Monoplegia, unspecified affecting left dominant side -G8333 Monoplegia, unspecified affecting right nondominant side -G8334 Monoplegia, unspecified affecting left nondominant side -G834 Cauda equina syndrome -G835 Locked-in state -G8381 Brown-Sequard syndrome -G8382 Anterior cord syndrome -G8383 Posterior cord syndrome -G8384 Todd's paralysis (postepileptic) -G8389 Other specified paralytic syndromes -G839 Paralytic syndrome, unspecified -G890 Central pain syndrome -G8911 Acute pain due to trauma -G8912 Acute post-thoracotomy pain -G8918 Other acute postprocedural pain -G8921 Chronic pain due to trauma -G8922 Chronic post-thoracotomy pain -G8928 Other chronic postprocedural pain -G8929 Other chronic pain -G893 Neoplasm related pain (acute) (chronic) -G894 Chronic pain syndrome -G9001 Carotid sinus syncope -G9009 Other idiopathic peripheral autonomic neuropathy -G901 Familial dysautonomia [Riley-Day] -G902 Horner's syndrome -G903 Multi-system degeneration of the autonomic nervous system -G904 Autonomic dysreflexia -G9050 Complex regional pain syndrome I, unspecified -G90511 Complex regional pain syndrome I of right upper limb -G90512 Complex regional pain syndrome I of left upper limb -G90513 Complex regional pain syndrome I of upper limb, bilateral -G90519 Complex regional pain syndrome I of unspecified upper limb -G90521 Complex regional pain syndrome I of right lower limb -G90522 Complex regional pain syndrome I of left lower limb -G90523 Complex regional pain syndrome I of lower limb, bilateral -G90529 Complex regional pain syndrome I of unspecified lower limb -G9059 Complex regional pain syndrome I of other specified site -G908 Other disorders of autonomic nervous system -G909 Disorder of the autonomic nervous system, unspecified -G910 Communicating hydrocephalus -G911 Obstructive hydrocephalus -G912 (Idiopathic) normal pressure hydrocephalus -G913 Post-traumatic hydrocephalus, unspecified -G914 Hydrocephalus in diseases classified elsewhere -G918 Other hydrocephalus -G919 Hydrocephalus, unspecified -G92 Toxic encephalopathy -G930 Cerebral cysts -G931 Anoxic brain damage, not elsewhere classified -G932 Benign intracranial hypertension -G933 Postviral fatigue syndrome -G9340 Encephalopathy, unspecified -G9341 Metabolic encephalopathy -G9349 Other encephalopathy -G935 Compression of brain -G936 Cerebral edema -G937 Reye's syndrome -G9381 Temporal sclerosis -G9382 Brain death -G9389 Other specified disorders of brain -G939 Disorder of brain, unspecified -G94 Other disorders of brain in diseases classified elsewhere -G950 Syringomyelia and syringobulbia -G9511 Acute infarction of spinal cord (embolic) (nonembolic) -G9519 Other vascular myelopathies -G9520 Unspecified cord compression -G9529 Other cord compression -G9581 Conus medullaris syndrome -G9589 Other specified diseases of spinal cord -G959 Disease of spinal cord, unspecified -G960 Cerebrospinal fluid leak -G9611 Dural tear -G9612 Meningeal adhesions (cerebral) (spinal) -G9619 Other disorders of meninges, not elsewhere classified -G968 Other specified disorders of central nervous system -G969 Disorder of central nervous system, unspecified -G970 Cerebrospinal fluid leak from spinal puncture -G971 Other reaction to spinal and lumbar puncture -G972 Intracranial hypotension following ventricular shunting -G9731 Intraoperative hemorrhage and hematoma of a nervous system organ or structure complicating a nervous system procedure -G9732 Intraoperative hemorrhage and hematoma of a nervous system organ or structure complicating other procedure -G9741 Accidental puncture or laceration of dura during a procedure -G9748 Accidental puncture and laceration of other nervous system organ or structure during a nervous system procedure -G9749 Accidental puncture and laceration of other nervous system organ or structure during other procedure -G9751 Postprocedural hemorrhage of a nervous system organ or structure following a nervous system procedure -G9752 Postprocedural hemorrhage of a nervous system organ or structure following other procedure -G9761 Postprocedural hematoma of a nervous system organ or structure following a nervous system procedure -G9762 Postprocedural hematoma of a nervous system organ or structure following other procedure -G9763 Postprocedural seroma of a nervous system organ or structure following a nervous system procedure -G9764 Postprocedural seroma of a nervous system organ or structure following other procedure -G9781 Other intraoperative complications of nervous system -G9782 Other postprocedural complications and disorders of nervous system -G980 Neurogenic arthritis, not elsewhere classified -G988 Other disorders of nervous system -G990 Autonomic neuropathy in diseases classified elsewhere -G992 Myelopathy in diseases classified elsewhere -G998 Other specified disorders of nervous system in diseases classified elsewhere -H00011 Hordeolum externum right upper eyelid -H00012 Hordeolum externum right lower eyelid -H00013 Hordeolum externum right eye, unspecified eyelid -H00014 Hordeolum externum left upper eyelid -H00015 Hordeolum externum left lower eyelid -H00016 Hordeolum externum left eye, unspecified eyelid -H00019 Hordeolum externum unspecified eye, unspecified eyelid -H00021 Hordeolum internum right upper eyelid -H00022 Hordeolum internum right lower eyelid -H00023 Hordeolum internum right eye, unspecified eyelid -H00024 Hordeolum internum left upper eyelid -H00025 Hordeolum internum left lower eyelid -H00026 Hordeolum internum left eye, unspecified eyelid -H00029 Hordeolum internum unspecified eye, unspecified eyelid -H00031 Abscess of right upper eyelid -H00032 Abscess of right lower eyelid -H00033 Abscess of eyelid right eye, unspecified eyelid -H00034 Abscess of left upper eyelid -H00035 Abscess of left lower eyelid -H00036 Abscess of eyelid left eye, unspecified eyelid -H00039 Abscess of eyelid unspecified eye, unspecified eyelid -H0011 Chalazion right upper eyelid -H0012 Chalazion right lower eyelid -H0013 Chalazion right eye, unspecified eyelid -H0014 Chalazion left upper eyelid -H0015 Chalazion left lower eyelid -H0016 Chalazion left eye, unspecified eyelid -H0019 Chalazion unspecified eye, unspecified eyelid -H01001 Unspecified blepharitis right upper eyelid -H01002 Unspecified blepharitis right lower eyelid -H01003 Unspecified blepharitis right eye, unspecified eyelid -H01004 Unspecified blepharitis left upper eyelid -H01005 Unspecified blepharitis left lower eyelid -H01006 Unspecified blepharitis left eye, unspecified eyelid -H01009 Unspecified blepharitis unspecified eye, unspecified eyelid -H01011 Ulcerative blepharitis right upper eyelid -H01012 Ulcerative blepharitis right lower eyelid -H01013 Ulcerative blepharitis right eye, unspecified eyelid -H01014 Ulcerative blepharitis left upper eyelid -H01015 Ulcerative blepharitis left lower eyelid -H01016 Ulcerative blepharitis left eye, unspecified eyelid -H01019 Ulcerative blepharitis unspecified eye, unspecified eyelid -H01021 Squamous blepharitis right upper eyelid -H01022 Squamous blepharitis right lower eyelid -H01023 Squamous blepharitis right eye, unspecified eyelid -H01024 Squamous blepharitis left upper eyelid -H01025 Squamous blepharitis left lower eyelid -H01026 Squamous blepharitis left eye, unspecified eyelid -H01029 Squamous blepharitis unspecified eye, unspecified eyelid -H01111 Allergic dermatitis of right upper eyelid -H01112 Allergic dermatitis of right lower eyelid -H01113 Allergic dermatitis of right eye, unspecified eyelid -H01114 Allergic dermatitis of left upper eyelid -H01115 Allergic dermatitis of left lower eyelid -H01116 Allergic dermatitis of left eye, unspecified eyelid -H01119 Allergic dermatitis of unspecified eye, unspecified eyelid -H01121 Discoid lupus erythematosus of right upper eyelid -H01122 Discoid lupus erythematosus of right lower eyelid -H01123 Discoid lupus erythematosus of right eye, unspecified eyelid -H01124 Discoid lupus erythematosus of left upper eyelid -H01125 Discoid lupus erythematosus of left lower eyelid -H01126 Discoid lupus erythematosus of left eye, unspecified eyelid -H01129 Discoid lupus erythematosus of unspecified eye, unspecified eyelid -H01131 Eczematous dermatitis of right upper eyelid -H01132 Eczematous dermatitis of right lower eyelid -H01133 Eczematous dermatitis of right eye, unspecified eyelid -H01134 Eczematous dermatitis of left upper eyelid -H01135 Eczematous dermatitis of left lower eyelid -H01136 Eczematous dermatitis of left eye, unspecified eyelid -H01139 Eczematous dermatitis of unspecified eye, unspecified eyelid -H01141 Xeroderma of right upper eyelid -H01142 Xeroderma of right lower eyelid -H01143 Xeroderma of right eye, unspecified eyelid -H01144 Xeroderma of left upper eyelid -H01145 Xeroderma of left lower eyelid -H01146 Xeroderma of left eye, unspecified eyelid -H01149 Xeroderma of unspecified eye, unspecified eyelid -H018 Other specified inflammations of eyelid -H019 Unspecified inflammation of eyelid -H02001 Unspecified entropion of right upper eyelid -H02002 Unspecified entropion of right lower eyelid -H02003 Unspecified entropion of right eye, unspecified eyelid -H02004 Unspecified entropion of left upper eyelid -H02005 Unspecified entropion of left lower eyelid -H02006 Unspecified entropion of left eye, unspecified eyelid -H02009 Unspecified entropion of unspecified eye, unspecified eyelid -H02011 Cicatricial entropion of right upper eyelid -H02012 Cicatricial entropion of right lower eyelid -H02013 Cicatricial entropion of right eye, unspecified eyelid -H02014 Cicatricial entropion of left upper eyelid -H02015 Cicatricial entropion of left lower eyelid -H02016 Cicatricial entropion of left eye, unspecified eyelid -H02019 Cicatricial entropion of unspecified eye, unspecified eyelid -H02021 Mechanical entropion of right upper eyelid -H02022 Mechanical entropion of right lower eyelid -H02023 Mechanical entropion of right eye, unspecified eyelid -H02024 Mechanical entropion of left upper eyelid -H02025 Mechanical entropion of left lower eyelid -H02026 Mechanical entropion of left eye, unspecified eyelid -H02029 Mechanical entropion of unspecified eye, unspecified eyelid -H02031 Senile entropion of right upper eyelid -H02032 Senile entropion of right lower eyelid -H02033 Senile entropion of right eye, unspecified eyelid -H02034 Senile entropion of left upper eyelid -H02035 Senile entropion of left lower eyelid -H02036 Senile entropion of left eye, unspecified eyelid -H02039 Senile entropion of unspecified eye, unspecified eyelid -H02041 Spastic entropion of right upper eyelid -H02042 Spastic entropion of right lower eyelid -H02043 Spastic entropion of right eye, unspecified eyelid -H02044 Spastic entropion of left upper eyelid -H02045 Spastic entropion of left lower eyelid -H02046 Spastic entropion of left eye, unspecified eyelid -H02049 Spastic entropion of unspecified eye, unspecified eyelid -H02051 Trichiasis without entropian right upper eyelid -H02052 Trichiasis without entropian right lower eyelid -H02053 Trichiasis without entropian right eye, unspecified eyelid -H02054 Trichiasis without entropian left upper eyelid -H02055 Trichiasis without entropian left lower eyelid -H02056 Trichiasis without entropian left eye, unspecified eyelid -H02059 Trichiasis without entropian unspecified eye, unspecified eyelid -H02101 Unspecified ectropion of right upper eyelid -H02102 Unspecified ectropion of right lower eyelid -H02103 Unspecified ectropion of right eye, unspecified eyelid -H02104 Unspecified ectropion of left upper eyelid -H02105 Unspecified ectropion of left lower eyelid -H02106 Unspecified ectropion of left eye, unspecified eyelid -H02109 Unspecified ectropion of unspecified eye, unspecified eyelid -H02111 Cicatricial ectropion of right upper eyelid -H02112 Cicatricial ectropion of right lower eyelid -H02113 Cicatricial ectropion of right eye, unspecified eyelid -H02114 Cicatricial ectropion of left upper eyelid -H02115 Cicatricial ectropion of left lower eyelid -H02116 Cicatricial ectropion of left eye, unspecified eyelid -H02119 Cicatricial ectropion of unspecified eye, unspecified eyelid -H02121 Mechanical ectropion of right upper eyelid -H02122 Mechanical ectropion of right lower eyelid -H02123 Mechanical ectropion of right eye, unspecified eyelid -H02124 Mechanical ectropion of left upper eyelid -H02125 Mechanical ectropion of left lower eyelid -H02126 Mechanical ectropion of left eye, unspecified eyelid -H02129 Mechanical ectropion of unspecified eye, unspecified eyelid -H02131 Senile ectropion of right upper eyelid -H02132 Senile ectropion of right lower eyelid -H02133 Senile ectropion of right eye, unspecified eyelid -H02134 Senile ectropion of left upper eyelid -H02135 Senile ectropion of left lower eyelid -H02136 Senile ectropion of left eye, unspecified eyelid -H02139 Senile ectropion of unspecified eye, unspecified eyelid -H02141 Spastic ectropion of right upper eyelid -H02142 Spastic ectropion of right lower eyelid -H02143 Spastic ectropion of right eye, unspecified eyelid -H02144 Spastic ectropion of left upper eyelid -H02145 Spastic ectropion of left lower eyelid -H02146 Spastic ectropion of left eye, unspecified eyelid -H02149 Spastic ectropion of unspecified eye, unspecified eyelid -H02201 Unspecified lagophthalmos right upper eyelid -H02202 Unspecified lagophthalmos right lower eyelid -H02203 Unspecified lagophthalmos right eye, unspecified eyelid -H02204 Unspecified lagophthalmos left upper eyelid -H02205 Unspecified lagophthalmos left lower eyelid -H02206 Unspecified lagophthalmos left eye, unspecified eyelid -H02209 Unspecified lagophthalmos unspecified eye, unspecified eyelid -H02211 Cicatricial lagophthalmos right upper eyelid -H02212 Cicatricial lagophthalmos right lower eyelid -H02213 Cicatricial lagophthalmos right eye, unspecified eyelid -H02214 Cicatricial lagophthalmos left upper eyelid -H02215 Cicatricial lagophthalmos left lower eyelid -H02216 Cicatricial lagophthalmos left eye, unspecified eyelid -H02219 Cicatricial lagophthalmos unspecified eye, unspecified eyelid -H02221 Mechanical lagophthalmos right upper eyelid -H02222 Mechanical lagophthalmos right lower eyelid -H02223 Mechanical lagophthalmos right eye, unspecified eyelid -H02224 Mechanical lagophthalmos left upper eyelid -H02225 Mechanical lagophthalmos left lower eyelid -H02226 Mechanical lagophthalmos left eye, unspecified eyelid -H02229 Mechanical lagophthalmos unspecified eye, unspecified eyelid -H02231 Paralytic lagophthalmos right upper eyelid -H02232 Paralytic lagophthalmos right lower eyelid -H02233 Paralytic lagophthalmos right eye, unspecified eyelid -H02234 Paralytic lagophthalmos left upper eyelid -H02235 Paralytic lagophthalmos left lower eyelid -H02236 Paralytic lagophthalmos left eye, unspecified eyelid -H02239 Paralytic lagophthalmos unspecified eye, unspecified eyelid -H0230 Blepharochalasis unspecified eye, unspecified eyelid -H0231 Blepharochalasis right upper eyelid -H0232 Blepharochalasis right lower eyelid -H0233 Blepharochalasis right eye, unspecified eyelid -H0234 Blepharochalasis left upper eyelid -H0235 Blepharochalasis left lower eyelid -H0236 Blepharochalasis left eye, unspecified eyelid -H02401 Unspecified ptosis of right eyelid -H02402 Unspecified ptosis of left eyelid -H02403 Unspecified ptosis of bilateral eyelids -H02409 Unspecified ptosis of unspecified eyelid -H02411 Mechanical ptosis of right eyelid -H02412 Mechanical ptosis of left eyelid -H02413 Mechanical ptosis of bilateral eyelids -H02419 Mechanical ptosis of unspecified eyelid -H02421 Myogenic ptosis of right eyelid -H02422 Myogenic ptosis of left eyelid -H02423 Myogenic ptosis of bilateral eyelids -H02429 Myogenic ptosis of unspecified eyelid -H02431 Paralytic ptosis of right eyelid -H02432 Paralytic ptosis of left eyelid -H02433 Paralytic ptosis of bilateral eyelids -H02439 Paralytic ptosis unspecified eyelid -H02511 Abnormal innervation syndrome right upper eyelid -H02512 Abnormal innervation syndrome right lower eyelid -H02513 Abnormal innervation syndrome right eye, unspecified eyelid -H02514 Abnormal innervation syndrome left upper eyelid -H02515 Abnormal innervation syndrome left lower eyelid -H02516 Abnormal innervation syndrome left eye, unspecified eyelid -H02519 Abnormal innervation syndrome unspecified eye, unspecified eyelid -H02521 Blepharophimosis right upper eyelid -H02522 Blepharophimosis right lower eyelid -H02523 Blepharophimosis right eye, unspecified eyelid -H02524 Blepharophimosis left upper eyelid -H02525 Blepharophimosis left lower eyelid -H02526 Blepharophimosis left eye, unspecified eyelid -H02529 Blepharophimosis unspecified eye, unspecified lid -H02531 Eyelid retraction right upper eyelid -H02532 Eyelid retraction right lower eyelid -H02533 Eyelid retraction right eye, unspecified eyelid -H02534 Eyelid retraction left upper eyelid -H02535 Eyelid retraction left lower eyelid -H02536 Eyelid retraction left eye, unspecified eyelid -H02539 Eyelid retraction unspecified eye, unspecified lid -H0259 Other disorders affecting eyelid function -H0260 Xanthelasma of unspecified eye, unspecified eyelid -H0261 Xanthelasma of right upper eyelid -H0262 Xanthelasma of right lower eyelid -H0263 Xanthelasma of right eye, unspecified eyelid -H0264 Xanthelasma of left upper eyelid -H0265 Xanthelasma of left lower eyelid -H0266 Xanthelasma of left eye, unspecified eyelid -H0270 Unspecified degenerative disorders of eyelid and periocular area -H02711 Chloasma of right upper eyelid and periocular area -H02712 Chloasma of right lower eyelid and periocular area -H02713 Chloasma of right eye, unspecified eyelid and periocular area -H02714 Chloasma of left upper eyelid and periocular area -H02715 Chloasma of left lower eyelid and periocular area -H02716 Chloasma of left eye, unspecified eyelid and periocular area -H02719 Chloasma of unspecified eye, unspecified eyelid and periocular area -H02721 Madarosis of right upper eyelid and periocular area -H02722 Madarosis of right lower eyelid and periocular area -H02723 Madarosis of right eye, unspecified eyelid and periocular area -H02724 Madarosis of left upper eyelid and periocular area -H02725 Madarosis of left lower eyelid and periocular area -H02726 Madarosis of left eye, unspecified eyelid and periocular area -H02729 Madarosis of unspecified eye, unspecified eyelid and periocular area -H02731 Vitiligo of right upper eyelid and periocular area -H02732 Vitiligo of right lower eyelid and periocular area -H02733 Vitiligo of right eye, unspecified eyelid and periocular area -H02734 Vitiligo of left upper eyelid and periocular area -H02735 Vitiligo of left lower eyelid and periocular area -H02736 Vitiligo of left eye, unspecified eyelid and periocular area -H02739 Vitiligo of unspecified eye, unspecified eyelid and periocular area -H0279 Other degenerative disorders of eyelid and periocular area -H02811 Retained foreign body in right upper eyelid -H02812 Retained foreign body in right lower eyelid -H02813 Retained foreign body in right eye, unspecified eyelid -H02814 Retained foreign body in left upper eyelid -H02815 Retained foreign body in left lower eyelid -H02816 Retained foreign body in left eye, unspecified eyelid -H02819 Retained foreign body in unspecified eye, unspecified eyelid -H02821 Cysts of right upper eyelid -H02822 Cysts of right lower eyelid -H02823 Cysts of right eye, unspecified eyelid -H02824 Cysts of left upper eyelid -H02825 Cysts of left lower eyelid -H02826 Cysts of left eye, unspecified eyelid -H02829 Cysts of unspecified eye, unspecified eyelid -H02831 Dermatochalasis of right upper eyelid -H02832 Dermatochalasis of right lower eyelid -H02833 Dermatochalasis of right eye, unspecified eyelid -H02834 Dermatochalasis of left upper eyelid -H02835 Dermatochalasis of left lower eyelid -H02836 Dermatochalasis of left eye, unspecified eyelid -H02839 Dermatochalasis of unspecified eye, unspecified eyelid -H02841 Edema of right upper eyelid -H02842 Edema of right lower eyelid -H02843 Edema of right eye, unspecified eyelid -H02844 Edema of left upper eyelid -H02845 Edema of left lower eyelid -H02846 Edema of left eye, unspecified eyelid -H02849 Edema of unspecified eye, unspecified eyelid -H02851 Elephantiasis of right upper eyelid -H02852 Elephantiasis of right lower eyelid -H02853 Elephantiasis of right eye, unspecified eyelid -H02854 Elephantiasis of left upper eyelid -H02855 Elephantiasis of left lower eyelid -H02856 Elephantiasis of left eye, unspecified eyelid -H02859 Elephantiasis of unspecified eye, unspecified eyelid -H02861 Hypertrichosis of right upper eyelid -H02862 Hypertrichosis of right lower eyelid -H02863 Hypertrichosis of right eye, unspecified eyelid -H02864 Hypertrichosis of left upper eyelid -H02865 Hypertrichosis of left lower eyelid -H02866 Hypertrichosis of left eye, unspecified eyelid -H02869 Hypertrichosis of unspecified eye, unspecified eyelid -H02871 Vascular anomalies of right upper eyelid -H02872 Vascular anomalies of right lower eyelid -H02873 Vascular anomalies of right eye, unspecified eyelid -H02874 Vascular anomalies of left upper eyelid -H02875 Vascular anomalies of left lower eyelid -H02876 Vascular anomalies of left eye, unspecified eyelid -H02879 Vascular anomalies of unspecified eye, unspecified eyelid -H0289 Other specified disorders of eyelid -H029 Unspecified disorder of eyelid -H04001 Unspecified dacryoadenitis, right lacrimal gland -H04002 Unspecified dacryoadenitis, left lacrimal gland -H04003 Unspecified dacryoadenitis, bilateral lacrimal glands -H04009 Unspecified dacryoadenitis, unspecified lacrimal gland -H04011 Acute dacryoadenitis, right lacrimal gland -H04012 Acute dacryoadenitis, left lacrimal gland -H04013 Acute dacryoadenitis, bilateral lacrimal glands -H04019 Acute dacryoadenitis, unspecified lacrimal gland -H04021 Chronic dacryoadenitis, right lacrimal gland -H04022 Chronic dacryoadenitis, left lacrimal gland -H04023 Chronic dacryoadenitis, bilateral lacrimal gland -H04029 Chronic dacryoadenitis, unspecified lacrimal gland -H04031 Chronic enlargement of right lacrimal gland -H04032 Chronic enlargement of left lacrimal gland -H04033 Chronic enlargement of bilateral lacrimal glands -H04039 Chronic enlargement of unspecified lacrimal gland -H04111 Dacryops of right lacrimal gland -H04112 Dacryops of left lacrimal gland -H04113 Dacryops of bilateral lacrimal glands -H04119 Dacryops of unspecified lacrimal gland -H04121 Dry eye syndrome of right lacrimal gland -H04122 Dry eye syndrome of left lacrimal gland -H04123 Dry eye syndrome of bilateral lacrimal glands -H04129 Dry eye syndrome of unspecified lacrimal gland -H04131 Lacrimal cyst, right lacrimal gland -H04132 Lacrimal cyst, left lacrimal gland -H04133 Lacrimal cyst, bilateral lacrimal glands -H04139 Lacrimal cyst, unspecified lacrimal gland -H04141 Primary lacrimal gland atrophy, right lacrimal gland -H04142 Primary lacrimal gland atrophy, left lacrimal gland -H04143 Primary lacrimal gland atrophy, bilateral lacrimal glands -H04149 Primary lacrimal gland atrophy, unspecified lacrimal gland -H04151 Secondary lacrimal gland atrophy, right lacrimal gland -H04152 Secondary lacrimal gland atrophy, left lacrimal gland -H04153 Secondary lacrimal gland atrophy, bilateral lacrimal glands -H04159 Secondary lacrimal gland atrophy, unspecified lacrimal gland -H04161 Lacrimal gland dislocation, right lacrimal gland -H04162 Lacrimal gland dislocation, left lacrimal gland -H04163 Lacrimal gland dislocation, bilateral lacrimal glands -H04169 Lacrimal gland dislocation, unspecified lacrimal gland -H0419 Other specified disorders of lacrimal gland -H04201 Unspecified epiphora, right lacrimal gland -H04202 Unspecified epiphora, left lacrimal gland -H04203 Unspecified epiphora, bilateral lacrimal glands -H04209 Unspecified epiphora, unspecified lacrimal gland -H04211 Epiphora due to excess lacrimation, right lacrimal gland -H04212 Epiphora due to excess lacrimation, left lacrimal gland -H04213 Epiphora due to excess lacrimation, bilateral lacrimal glands -H04219 Epiphora due to excess lacrimation, unspecified lacrimal gland -H04221 Epiphora due to insufficient drainage, right lacrimal gland -H04222 Epiphora due to insufficient drainage, left lacrimal gland -H04223 Epiphora due to insufficient drainage, bilateral lacrimal glands -H04229 Epiphora due to insufficient drainage, unspecified lacrimal gland -H04301 Unspecified dacryocystitis of right lacrimal passage -H04302 Unspecified dacryocystitis of left lacrimal passage -H04303 Unspecified dacryocystitis of bilateral lacrimal passages -H04309 Unspecified dacryocystitis of unspecified lacrimal passage -H04311 Phlegmonous dacryocystitis of right lacrimal passage -H04312 Phlegmonous dacryocystitis of left lacrimal passage -H04313 Phlegmonous dacryocystitis of bilateral lacrimal passages -H04319 Phlegmonous dacryocystitis of unspecified lacrimal passage -H04321 Acute dacryocystitis of right lacrimal passage -H04322 Acute dacryocystitis of left lacrimal passage -H04323 Acute dacryocystitis of bilateral lacrimal passages -H04329 Acute dacryocystitis of unspecified lacrimal passage -H04331 Acute lacrimal canaliculitis of right lacrimal passage -H04332 Acute lacrimal canaliculitis of left lacrimal passage -H04333 Acute lacrimal canaliculitis of bilateral lacrimal passages -H04339 Acute lacrimal canaliculitis of unspecified lacrimal passage -H04411 Chronic dacryocystitis of right lacrimal passage -H04412 Chronic dacryocystitis of left lacrimal passage -H04413 Chronic dacryocystitis of bilateral lacrimal passages -H04419 Chronic dacryocystitis of unspecified lacrimal passage -H04421 Chronic lacrimal canaliculitis of right lacrimal passage -H04422 Chronic lacrimal canaliculitis of left lacrimal passage -H04423 Chronic lacrimal canaliculitis of bilateral lacrimal passages -H04429 Chronic lacrimal canaliculitis of unspecified lacrimal passage -H04431 Chronic lacrimal mucocele of right lacrimal passage -H04432 Chronic lacrimal mucocele of left lacrimal passage -H04433 Chronic lacrimal mucocele of bilateral lacrimal passages -H04439 Chronic lacrimal mucocele of unspecified lacrimal passage -H04511 Dacryolith of right lacrimal passage -H04512 Dacryolith of left lacrimal passage -H04513 Dacryolith of bilateral lacrimal passages -H04519 Dacryolith of unspecified lacrimal passage -H04521 Eversion of right lacrimal punctum -H04522 Eversion of left lacrimal punctum -H04523 Eversion of bilateral lacrimal punctum -H04529 Eversion of unspecified lacrimal punctum -H04531 Neonatal obstruction of right nasolacrimal duct -H04532 Neonatal obstruction of left nasolacrimal duct -H04533 Neonatal obstruction of bilateral nasolacrimal duct -H04539 Neonatal obstruction of unspecified nasolacrimal duct -H04541 Stenosis of right lacrimal canaliculi -H04542 Stenosis of left lacrimal canaliculi -H04543 Stenosis of bilateral lacrimal canaliculi -H04549 Stenosis of unspecified lacrimal canaliculi -H04551 Acquired stenosis of right nasolacrimal duct -H04552 Acquired stenosis of left nasolacrimal duct -H04553 Acquired stenosis of bilateral nasolacrimal duct -H04559 Acquired stenosis of unspecified nasolacrimal duct -H04561 Stenosis of right lacrimal punctum -H04562 Stenosis of left lacrimal punctum -H04563 Stenosis of bilateral lacrimal punctum -H04569 Stenosis of unspecified lacrimal punctum -H04571 Stenosis of right lacrimal sac -H04572 Stenosis of left lacrimal sac -H04573 Stenosis of bilateral lacrimal sac -H04579 Stenosis of unspecified lacrimal sac -H04611 Lacrimal fistula right lacrimal passage -H04612 Lacrimal fistula left lacrimal passage -H04613 Lacrimal fistula bilateral lacrimal passages -H04619 Lacrimal fistula unspecified lacrimal passage -H0469 Other changes of lacrimal passages -H04811 Granuloma of right lacrimal passage -H04812 Granuloma of left lacrimal passage -H04813 Granuloma of bilateral lacrimal passages -H04819 Granuloma of unspecified lacrimal passage -H0489 Other disorders of lacrimal system -H049 Disorder of lacrimal system, unspecified -H0500 Unspecified acute inflammation of orbit -H05011 Cellulitis of right orbit -H05012 Cellulitis of left orbit -H05013 Cellulitis of bilateral orbits -H05019 Cellulitis of unspecified orbit -H05021 Osteomyelitis of right orbit -H05022 Osteomyelitis of left orbit -H05023 Osteomyelitis of bilateral orbits -H05029 Osteomyelitis of unspecified orbit -H05031 Periostitis of right orbit -H05032 Periostitis of left orbit -H05033 Periostitis of bilateral orbits -H05039 Periostitis of unspecified orbit -H05041 Tenonitis of right orbit -H05042 Tenonitis of left orbit -H05043 Tenonitis of bilateral orbits -H05049 Tenonitis of unspecified orbit -H0510 Unspecified chronic inflammatory disorders of orbit -H05111 Granuloma of right orbit -H05112 Granuloma of left orbit -H05113 Granuloma of bilateral orbits -H05119 Granuloma of unspecified orbit -H05121 Orbital myositis, right orbit -H05122 Orbital myositis, left orbit -H05123 Orbital myositis, bilateral -H05129 Orbital myositis, unspecified orbit -H0520 Unspecified exophthalmos -H05211 Displacement (lateral) of globe, right eye -H05212 Displacement (lateral) of globe, left eye -H05213 Displacement (lateral) of globe, bilateral -H05219 Displacement (lateral) of globe, unspecified eye -H05221 Edema of right orbit -H05222 Edema of left orbit -H05223 Edema of bilateral orbit -H05229 Edema of unspecified orbit -H05231 Hemorrhage of right orbit -H05232 Hemorrhage of left orbit -H05233 Hemorrhage of bilateral orbit -H05239 Hemorrhage of unspecified orbit -H05241 Constant exophthalmos, right eye -H05242 Constant exophthalmos, left eye -H05243 Constant exophthalmos, bilateral -H05249 Constant exophthalmos, unspecified eye -H05251 Intermittent exophthalmos, right eye -H05252 Intermittent exophthalmos, left eye -H05253 Intermittent exophthalmos, bilateral -H05259 Intermittent exophthalmos, unspecified eye -H05261 Pulsating exophthalmos, right eye -H05262 Pulsating exophthalmos, left eye -H05263 Pulsating exophthalmos, bilateral -H05269 Pulsating exophthalmos, unspecified eye -H0530 Unspecified deformity of orbit -H05311 Atrophy of right orbit -H05312 Atrophy of left orbit -H05313 Atrophy of bilateral orbit -H05319 Atrophy of unspecified orbit -H05321 Deformity of right orbit due to bone disease -H05322 Deformity of left orbit due to bone disease -H05323 Deformity of bilateral orbits due to bone disease -H05329 Deformity of unspecified orbit due to bone disease -H05331 Deformity of right orbit due to trauma or surgery -H05332 Deformity of left orbit due to trauma or surgery -H05333 Deformity of bilateral orbits due to trauma or surgery -H05339 Deformity of unspecified orbit due to trauma or surgery -H05341 Enlargement of right orbit -H05342 Enlargement of left orbit -H05343 Enlargement of bilateral orbits -H05349 Enlargement of unspecified orbit -H05351 Exostosis of right orbit -H05352 Exostosis of left orbit -H05353 Exostosis of bilateral orbits -H05359 Exostosis of unspecified orbit -H05401 Unspecified enophthalmos, right eye -H05402 Unspecified enophthalmos, left eye -H05403 Unspecified enophthalmos, bilateral -H05409 Unspecified enophthalmos, unspecified eye -H05411 Enophthalmos due to atrophy of orbital tissue, right eye -H05412 Enophthalmos due to atrophy of orbital tissue, left eye -H05413 Enophthalmos due to atrophy of orbital tissue, bilateral -H05419 Enophthalmos due to atrophy of orbital tissue, unspecified eye -H05421 Enophthalmos due to trauma or surgery, right eye -H05422 Enophthalmos due to trauma or surgery, left eye -H05423 Enophthalmos due to trauma or surgery, bilateral -H05429 Enophthalmos due to trauma or surgery, unspecified eye -H0550 Retained (old) foreign body following penetrating wound of unspecified orbit -H0551 Retained (old) foreign body following penetrating wound of right orbit -H0552 Retained (old) foreign body following penetrating wound of left orbit -H0553 Retained (old) foreign body following penetrating wound of bilateral orbits -H05811 Cyst of right orbit -H05812 Cyst of left orbit -H05813 Cyst of bilateral orbits -H05819 Cyst of unspecified orbit -H05821 Myopathy of extraocular muscles, right orbit -H05822 Myopathy of extraocular muscles, left orbit -H05823 Myopathy of extraocular muscles, bilateral -H05829 Myopathy of extraocular muscles, unspecified orbit -H0589 Other disorders of orbit -H059 Unspecified disorder of orbit -H10011 Acute follicular conjunctivitis, right eye -H10012 Acute follicular conjunctivitis, left eye -H10013 Acute follicular conjunctivitis, bilateral -H10019 Acute follicular conjunctivitis, unspecified eye -H10021 Other mucopurulent conjunctivitis, right eye -H10022 Other mucopurulent conjunctivitis, left eye -H10023 Other mucopurulent conjunctivitis, bilateral -H10029 Other mucopurulent conjunctivitis, unspecified eye -H1010 Acute atopic conjunctivitis, unspecified eye -H1011 Acute atopic conjunctivitis, right eye -H1012 Acute atopic conjunctivitis, left eye -H1013 Acute atopic conjunctivitis, bilateral -H10211 Acute toxic conjunctivitis, right eye -H10212 Acute toxic conjunctivitis, left eye -H10213 Acute toxic conjunctivitis, bilateral -H10219 Acute toxic conjunctivitis, unspecified eye -H10221 Pseudomembranous conjunctivitis, right eye -H10222 Pseudomembranous conjunctivitis, left eye -H10223 Pseudomembranous conjunctivitis, bilateral -H10229 Pseudomembranous conjunctivitis, unspecified eye -H10231 Serous conjunctivitis, except viral, right eye -H10232 Serous conjunctivitis, except viral, left eye -H10233 Serous conjunctivitis, except viral, bilateral -H10239 Serous conjunctivitis, except viral, unspecified eye -H1030 Unspecified acute conjunctivitis, unspecified eye -H1031 Unspecified acute conjunctivitis, right eye -H1032 Unspecified acute conjunctivitis, left eye -H1033 Unspecified acute conjunctivitis, bilateral -H10401 Unspecified chronic conjunctivitis, right eye -H10402 Unspecified chronic conjunctivitis, left eye -H10403 Unspecified chronic conjunctivitis, bilateral -H10409 Unspecified chronic conjunctivitis, unspecified eye -H10411 Chronic giant papillary conjunctivitis, right eye -H10412 Chronic giant papillary conjunctivitis, left eye -H10413 Chronic giant papillary conjunctivitis, bilateral -H10419 Chronic giant papillary conjunctivitis, unspecified eye -H10421 Simple chronic conjunctivitis, right eye -H10422 Simple chronic conjunctivitis, left eye -H10423 Simple chronic conjunctivitis, bilateral -H10429 Simple chronic conjunctivitis, unspecified eye -H10431 Chronic follicular conjunctivitis, right eye -H10432 Chronic follicular conjunctivitis, left eye -H10433 Chronic follicular conjunctivitis, bilateral -H10439 Chronic follicular conjunctivitis, unspecified eye -H1044 Vernal conjunctivitis -H1045 Other chronic allergic conjunctivitis -H10501 Unspecified blepharoconjunctivitis, right eye -H10502 Unspecified blepharoconjunctivitis, left eye -H10503 Unspecified blepharoconjunctivitis, bilateral -H10509 Unspecified blepharoconjunctivitis, unspecified eye -H10511 Ligneous conjunctivitis, right eye -H10512 Ligneous conjunctivitis, left eye -H10513 Ligneous conjunctivitis, bilateral -H10519 Ligneous conjunctivitis, unspecified eye -H10521 Angular blepharoconjunctivitis, right eye -H10522 Angular blepharoconjunctivitis, left eye -H10523 Angular blepharoconjunctivitis, bilateral -H10529 Angular blepharoconjunctivitis, unspecified eye -H10531 Contact blepharoconjunctivitis, right eye -H10532 Contact blepharoconjunctivitis, left eye -H10533 Contact blepharoconjunctivitis, bilateral -H10539 Contact blepharoconjunctivitis, unspecified eye -H10811 Pingueculitis, right eye -H10812 Pingueculitis, left eye -H10813 Pingueculitis, bilateral -H10819 Pingueculitis, unspecified eye -H1089 Other conjunctivitis -H109 Unspecified conjunctivitis -H11001 Unspecified pterygium of right eye -H11002 Unspecified pterygium of left eye -H11003 Unspecified pterygium of eye, bilateral -H11009 Unspecified pterygium of unspecified eye -H11011 Amyloid pterygium of right eye -H11012 Amyloid pterygium of left eye -H11013 Amyloid pterygium of eye, bilateral -H11019 Amyloid pterygium of unspecified eye -H11021 Central pterygium of right eye -H11022 Central pterygium of left eye -H11023 Central pterygium of eye, bilateral -H11029 Central pterygium of unspecified eye -H11031 Double pterygium of right eye -H11032 Double pterygium of left eye -H11033 Double pterygium of eye, bilateral -H11039 Double pterygium of unspecified eye -H11041 Peripheral pterygium, stationary, right eye -H11042 Peripheral pterygium, stationary, left eye -H11043 Peripheral pterygium, stationary, bilateral -H11049 Peripheral pterygium, stationary, unspecified eye -H11051 Peripheral pterygium, progressive, right eye -H11052 Peripheral pterygium, progressive, left eye -H11053 Peripheral pterygium, progressive, bilateral -H11059 Peripheral pterygium, progressive, unspecified eye -H11061 Recurrent pterygium of right eye -H11062 Recurrent pterygium of left eye -H11063 Recurrent pterygium of eye, bilateral -H11069 Recurrent pterygium of unspecified eye -H1110 Unspecified conjunctival degenerations -H11111 Conjunctival deposits, right eye -H11112 Conjunctival deposits, left eye -H11113 Conjunctival deposits, bilateral -H11119 Conjunctival deposits, unspecified eye -H11121 Conjunctival concretions, right eye -H11122 Conjunctival concretions, left eye -H11123 Conjunctival concretions, bilateral -H11129 Conjunctival concretions, unspecified eye -H11131 Conjunctival pigmentations, right eye -H11132 Conjunctival pigmentations, left eye -H11133 Conjunctival pigmentations, bilateral -H11139 Conjunctival pigmentations, unspecified eye -H11141 Conjunctival xerosis, unspecified, right eye -H11142 Conjunctival xerosis, unspecified, left eye -H11143 Conjunctival xerosis, unspecified, bilateral -H11149 Conjunctival xerosis, unspecified, unspecified eye -H11151 Pinguecula, right eye -H11152 Pinguecula, left eye -H11153 Pinguecula, bilateral -H11159 Pinguecula, unspecified eye -H11211 Conjunctival adhesions and strands (localized), right eye -H11212 Conjunctival adhesions and strands (localized), left eye -H11213 Conjunctival adhesions and strands (localized), bilateral -H11219 Conjunctival adhesions and strands (localized), unspecified eye -H11221 Conjunctival granuloma, right eye -H11222 Conjunctival granuloma, left eye -H11223 Conjunctival granuloma, bilateral -H11229 Conjunctival granuloma, unspecified -H11231 Symblepharon, right eye -H11232 Symblepharon, left eye -H11233 Symblepharon, bilateral -H11239 Symblepharon, unspecified eye -H11241 Scarring of conjunctiva, right eye -H11242 Scarring of conjunctiva, left eye -H11243 Scarring of conjunctiva, bilateral -H11249 Scarring of conjunctiva, unspecified eye -H1130 Conjunctival hemorrhage, unspecified eye -H1131 Conjunctival hemorrhage, right eye -H1132 Conjunctival hemorrhage, left eye -H1133 Conjunctival hemorrhage, bilateral -H11411 Vascular abnormalities of conjunctiva, right eye -H11412 Vascular abnormalities of conjunctiva, left eye -H11413 Vascular abnormalities of conjunctiva, bilateral -H11419 Vascular abnormalities of conjunctiva, unspecified eye -H11421 Conjunctival edema, right eye -H11422 Conjunctival edema, left eye -H11423 Conjunctival edema, bilateral -H11429 Conjunctival edema, unspecified eye -H11431 Conjunctival hyperemia, right eye -H11432 Conjunctival hyperemia, left eye -H11433 Conjunctival hyperemia, bilateral -H11439 Conjunctival hyperemia, unspecified eye -H11441 Conjunctival cysts, right eye -H11442 Conjunctival cysts, left eye -H11443 Conjunctival cysts, bilateral -H11449 Conjunctival cysts, unspecified eye -H11811 Pseudopterygium of conjunctiva, right eye -H11812 Pseudopterygium of conjunctiva, left eye -H11813 Pseudopterygium of conjunctiva, bilateral -H11819 Pseudopterygium of conjunctiva, unspecified eye -H11821 Conjunctivochalasis, right eye -H11822 Conjunctivochalasis, left eye -H11823 Conjunctivochalasis, bilateral -H11829 Conjunctivochalasis, unspecified eye -H1189 Other specified disorders of conjunctiva -H119 Unspecified disorder of conjunctiva -H15001 Unspecified scleritis, right eye -H15002 Unspecified scleritis, left eye -H15003 Unspecified scleritis, bilateral -H15009 Unspecified scleritis, unspecified eye -H15011 Anterior scleritis, right eye -H15012 Anterior scleritis, left eye -H15013 Anterior scleritis, bilateral -H15019 Anterior scleritis, unspecified eye -H15021 Brawny scleritis, right eye -H15022 Brawny scleritis, left eye -H15023 Brawny scleritis, bilateral -H15029 Brawny scleritis, unspecified eye -H15031 Posterior scleritis, right eye -H15032 Posterior scleritis, left eye -H15033 Posterior scleritis, bilateral -H15039 Posterior scleritis, unspecified eye -H15041 Scleritis with corneal involvement, right eye -H15042 Scleritis with corneal involvement, left eye -H15043 Scleritis with corneal involvement, bilateral -H15049 Scleritis with corneal involvement, unspecified eye -H15051 Scleromalacia perforans, right eye -H15052 Scleromalacia perforans, left eye -H15053 Scleromalacia perforans, bilateral -H15059 Scleromalacia perforans, unspecified eye -H15091 Other scleritis, right eye -H15092 Other scleritis, left eye -H15093 Other scleritis, bilateral -H15099 Other scleritis, unspecified eye -H15101 Unspecified episcleritis, right eye -H15102 Unspecified episcleritis, left eye -H15103 Unspecified episcleritis, bilateral -H15109 Unspecified episcleritis, unspecified eye -H15111 Episcleritis periodica fugax, right eye -H15112 Episcleritis periodica fugax, left eye -H15113 Episcleritis periodica fugax, bilateral -H15119 Episcleritis periodica fugax, unspecified eye -H15121 Nodular episcleritis, right eye -H15122 Nodular episcleritis, left eye -H15123 Nodular episcleritis, bilateral -H15129 Nodular episcleritis, unspecified eye -H15811 Equatorial staphyloma, right eye -H15812 Equatorial staphyloma, left eye -H15813 Equatorial staphyloma, bilateral -H15819 Equatorial staphyloma, unspecified eye -H15821 Localized anterior staphyloma, right eye -H15822 Localized anterior staphyloma, left eye -H15823 Localized anterior staphyloma, bilateral -H15829 Localized anterior staphyloma, unspecified eye -H15831 Staphyloma posticum, right eye -H15832 Staphyloma posticum, left eye -H15833 Staphyloma posticum, bilateral -H15839 Staphyloma posticum, unspecified eye -H15841 Scleral ectasia, right eye -H15842 Scleral ectasia, left eye -H15843 Scleral ectasia, bilateral -H15849 Scleral ectasia, unspecified eye -H15851 Ring staphyloma, right eye -H15852 Ring staphyloma, left eye -H15853 Ring staphyloma, bilateral -H15859 Ring staphyloma, unspecified eye -H1589 Other disorders of sclera -H159 Unspecified disorder of sclera -H16001 Unspecified corneal ulcer, right eye -H16002 Unspecified corneal ulcer, left eye -H16003 Unspecified corneal ulcer, bilateral -H16009 Unspecified corneal ulcer, unspecified eye -H16011 Central corneal ulcer, right eye -H16012 Central corneal ulcer, left eye -H16013 Central corneal ulcer, bilateral -H16019 Central corneal ulcer, unspecified eye -H16021 Ring corneal ulcer, right eye -H16022 Ring corneal ulcer, left eye -H16023 Ring corneal ulcer, bilateral -H16029 Ring corneal ulcer, unspecified eye -H16031 Corneal ulcer with hypopyon, right eye -H16032 Corneal ulcer with hypopyon, left eye -H16033 Corneal ulcer with hypopyon, bilateral -H16039 Corneal ulcer with hypopyon, unspecified eye -H16041 Marginal corneal ulcer, right eye -H16042 Marginal corneal ulcer, left eye -H16043 Marginal corneal ulcer, bilateral -H16049 Marginal corneal ulcer, unspecified eye -H16051 Mooren's corneal ulcer, right eye -H16052 Mooren's corneal ulcer, left eye -H16053 Mooren's corneal ulcer, bilateral -H16059 Mooren's corneal ulcer, unspecified eye -H16061 Mycotic corneal ulcer, right eye -H16062 Mycotic corneal ulcer, left eye -H16063 Mycotic corneal ulcer, bilateral -H16069 Mycotic corneal ulcer, unspecified eye -H16071 Perforated corneal ulcer, right eye -H16072 Perforated corneal ulcer, left eye -H16073 Perforated corneal ulcer, bilateral -H16079 Perforated corneal ulcer, unspecified eye -H16101 Unspecified superficial keratitis, right eye -H16102 Unspecified superficial keratitis, left eye -H16103 Unspecified superficial keratitis, bilateral -H16109 Unspecified superficial keratitis, unspecified eye -H16111 Macular keratitis, right eye -H16112 Macular keratitis, left eye -H16113 Macular keratitis, bilateral -H16119 Macular keratitis, unspecified eye -H16121 Filamentary keratitis, right eye -H16122 Filamentary keratitis, left eye -H16123 Filamentary keratitis, bilateral -H16129 Filamentary keratitis, unspecified eye -H16131 Photokeratitis, right eye -H16132 Photokeratitis, left eye -H16133 Photokeratitis, bilateral -H16139 Photokeratitis, unspecified eye -H16141 Punctate keratitis, right eye -H16142 Punctate keratitis, left eye -H16143 Punctate keratitis, bilateral -H16149 Punctate keratitis, unspecified eye -H16201 Unspecified keratoconjunctivitis, right eye -H16202 Unspecified keratoconjunctivitis, left eye -H16203 Unspecified keratoconjunctivitis, bilateral -H16209 Unspecified keratoconjunctivitis, unspecified eye -H16211 Exposure keratoconjunctivitis, right eye -H16212 Exposure keratoconjunctivitis, left eye -H16213 Exposure keratoconjunctivitis, bilateral -H16219 Exposure keratoconjunctivitis, unspecified eye -H16221 Keratoconjunctivitis sicca, not specified as Sjogren's, right eye -H16222 Keratoconjunctivitis sicca, not specified as Sjogren's, left eye -H16223 Keratoconjunctivitis sicca, not specified as Sjogren's, bilateral -H16229 Keratoconjunctivitis sicca, not specified as Sjogren's, unspecified eye -H16231 Neurotrophic keratoconjunctivitis, right eye -H16232 Neurotrophic keratoconjunctivitis, left eye -H16233 Neurotrophic keratoconjunctivitis, bilateral -H16239 Neurotrophic keratoconjunctivitis, unspecified eye -H16241 Ophthalmia nodosa, right eye -H16242 Ophthalmia nodosa, left eye -H16243 Ophthalmia nodosa, bilateral -H16249 Ophthalmia nodosa, unspecified eye -H16251 Phlyctenular keratoconjunctivitis, right eye -H16252 Phlyctenular keratoconjunctivitis, left eye -H16253 Phlyctenular keratoconjunctivitis, bilateral -H16259 Phlyctenular keratoconjunctivitis, unspecified eye -H16261 Vernal keratoconjunctivitis, with limbar and corneal involvement, right eye -H16262 Vernal keratoconjunctivitis, with limbar and corneal involvement, left eye -H16263 Vernal keratoconjunctivitis, with limbar and corneal involvement, bilateral -H16269 Vernal keratoconjunctivitis, with limbar and corneal involvement, unspecified eye -H16291 Other keratoconjunctivitis, right eye -H16292 Other keratoconjunctivitis, left eye -H16293 Other keratoconjunctivitis, bilateral -H16299 Other keratoconjunctivitis, unspecified eye -H16301 Unspecified interstitial keratitis, right eye -H16302 Unspecified interstitial keratitis, left eye -H16303 Unspecified interstitial keratitis, bilateral -H16309 Unspecified interstitial keratitis, unspecified eye -H16311 Corneal abscess, right eye -H16312 Corneal abscess, left eye -H16313 Corneal abscess, bilateral -H16319 Corneal abscess, unspecified eye -H16321 Diffuse interstitial keratitis, right eye -H16322 Diffuse interstitial keratitis, left eye -H16323 Diffuse interstitial keratitis, bilateral -H16329 Diffuse interstitial keratitis, unspecified eye -H16331 Sclerosing keratitis, right eye -H16332 Sclerosing keratitis, left eye -H16333 Sclerosing keratitis, bilateral -H16339 Sclerosing keratitis, unspecified eye -H16391 Other interstitial and deep keratitis, right eye -H16392 Other interstitial and deep keratitis, left eye -H16393 Other interstitial and deep keratitis, bilateral -H16399 Other interstitial and deep keratitis, unspecified eye -H16401 Unspecified corneal neovascularization, right eye -H16402 Unspecified corneal neovascularization, left eye -H16403 Unspecified corneal neovascularization, bilateral -H16409 Unspecified corneal neovascularization, unspecified eye -H16411 Ghost vessels (corneal), right eye -H16412 Ghost vessels (corneal), left eye -H16413 Ghost vessels (corneal), bilateral -H16419 Ghost vessels (corneal), unspecified eye -H16421 Pannus (corneal), right eye -H16422 Pannus (corneal), left eye -H16423 Pannus (corneal), bilateral -H16429 Pannus (corneal), unspecified eye -H16431 Localized vascularization of cornea, right eye -H16432 Localized vascularization of cornea, left eye -H16433 Localized vascularization of cornea, bilateral -H16439 Localized vascularization of cornea, unspecified eye -H16441 Deep vascularization of cornea, right eye -H16442 Deep vascularization of cornea, left eye -H16443 Deep vascularization of cornea, bilateral -H16449 Deep vascularization of cornea, unspecified eye -H168 Other keratitis -H169 Unspecified keratitis -H1700 Adherent leukoma, unspecified eye -H1701 Adherent leukoma, right eye -H1702 Adherent leukoma, left eye -H1703 Adherent leukoma, bilateral -H1710 Central corneal opacity, unspecified eye -H1711 Central corneal opacity, right eye -H1712 Central corneal opacity, left eye -H1713 Central corneal opacity, bilateral -H17811 Minor opacity of cornea, right eye -H17812 Minor opacity of cornea, left eye -H17813 Minor opacity of cornea, bilateral -H17819 Minor opacity of cornea, unspecified eye -H17821 Peripheral opacity of cornea, right eye -H17822 Peripheral opacity of cornea, left eye -H17823 Peripheral opacity of cornea, bilateral -H17829 Peripheral opacity of cornea, unspecified eye -H1789 Other corneal scars and opacities -H179 Unspecified corneal scar and opacity -H18001 Unspecified corneal deposit, right eye -H18002 Unspecified corneal deposit, left eye -H18003 Unspecified corneal deposit, bilateral -H18009 Unspecified corneal deposit, unspecified eye -H18011 Anterior corneal pigmentations, right eye -H18012 Anterior corneal pigmentations, left eye -H18013 Anterior corneal pigmentations, bilateral -H18019 Anterior corneal pigmentations, unspecified eye -H18021 Argentous corneal deposits, right eye -H18022 Argentous corneal deposits, left eye -H18023 Argentous corneal deposits, bilateral -H18029 Argentous corneal deposits, unspecified eye -H18031 Corneal deposits in metabolic disorders, right eye -H18032 Corneal deposits in metabolic disorders, left eye -H18033 Corneal deposits in metabolic disorders, bilateral -H18039 Corneal deposits in metabolic disorders, unspecified eye -H18041 Kayser-Fleischer ring, right eye -H18042 Kayser-Fleischer ring, left eye -H18043 Kayser-Fleischer ring, bilateral -H18049 Kayser-Fleischer ring, unspecified eye -H18051 Posterior corneal pigmentations, right eye -H18052 Posterior corneal pigmentations, left eye -H18053 Posterior corneal pigmentations, bilateral -H18059 Posterior corneal pigmentations, unspecified eye -H18061 Stromal corneal pigmentations, right eye -H18062 Stromal corneal pigmentations, left eye -H18063 Stromal corneal pigmentations, bilateral -H18069 Stromal corneal pigmentations, unspecified eye -H1810 Bullous keratopathy, unspecified eye -H1811 Bullous keratopathy, right eye -H1812 Bullous keratopathy, left eye -H1813 Bullous keratopathy, bilateral -H1820 Unspecified corneal edema -H18211 Corneal edema secondary to contact lens, right eye -H18212 Corneal edema secondary to contact lens, left eye -H18213 Corneal edema secondary to contact lens, bilateral -H18219 Corneal edema secondary to contact lens, unspecified eye -H18221 Idiopathic corneal edema, right eye -H18222 Idiopathic corneal edema, left eye -H18223 Idiopathic corneal edema, bilateral -H18229 Idiopathic corneal edema, unspecified eye -H18231 Secondary corneal edema, right eye -H18232 Secondary corneal edema, left eye -H18233 Secondary corneal edema, bilateral -H18239 Secondary corneal edema, unspecified eye -H1830 Unspecified corneal membrane change -H18311 Folds and rupture in Bowman's membrane, right eye -H18312 Folds and rupture in Bowman's membrane, left eye -H18313 Folds and rupture in Bowman's membrane, bilateral -H18319 Folds and rupture in Bowman's membrane, unspecified eye -H18321 Folds in Descemet's membrane, right eye -H18322 Folds in Descemet's membrane, left eye -H18323 Folds in Descemet's membrane, bilateral -H18329 Folds in Descemet's membrane, unspecified eye -H18331 Rupture in Descemet's membrane, right eye -H18332 Rupture in Descemet's membrane, left eye -H18333 Rupture in Descemet's membrane, bilateral -H18339 Rupture in Descemet's membrane, unspecified eye -H1840 Unspecified corneal degeneration -H18411 Arcus senilis, right eye -H18412 Arcus senilis, left eye -H18413 Arcus senilis, bilateral -H18419 Arcus senilis, unspecified eye -H18421 Band keratopathy, right eye -H18422 Band keratopathy, left eye -H18423 Band keratopathy, bilateral -H18429 Band keratopathy, unspecified eye -H1843 Other calcerous corneal degeneration -H18441 Keratomalacia, right eye -H18442 Keratomalacia, left eye -H18443 Keratomalacia, bilateral -H18449 Keratomalacia, unspecified eye -H18451 Nodular corneal degeneration, right eye -H18452 Nodular corneal degeneration, left eye -H18453 Nodular corneal degeneration, bilateral -H18459 Nodular corneal degeneration, unspecified eye -H18461 Peripheral corneal degeneration, right eye -H18462 Peripheral corneal degeneration, left eye -H18463 Peripheral corneal degeneration, bilateral -H18469 Peripheral corneal degeneration, unspecified eye -H1849 Other corneal degeneration -H1850 Unspecified hereditary corneal dystrophies -H1851 Endothelial corneal dystrophy -H1852 Epithelial (juvenile) corneal dystrophy -H1853 Granular corneal dystrophy -H1854 Lattice corneal dystrophy -H1855 Macular corneal dystrophy -H1859 Other hereditary corneal dystrophies -H18601 Keratoconus, unspecified, right eye -H18602 Keratoconus, unspecified, left eye -H18603 Keratoconus, unspecified, bilateral -H18609 Keratoconus, unspecified, unspecified eye -H18611 Keratoconus, stable, right eye -H18612 Keratoconus, stable, left eye -H18613 Keratoconus, stable, bilateral -H18619 Keratoconus, stable, unspecified eye -H18621 Keratoconus, unstable, right eye -H18622 Keratoconus, unstable, left eye -H18623 Keratoconus, unstable, bilateral -H18629 Keratoconus, unstable, unspecified eye -H1870 Unspecified corneal deformity -H18711 Corneal ectasia, right eye -H18712 Corneal ectasia, left eye -H18713 Corneal ectasia, bilateral -H18719 Corneal ectasia, unspecified eye -H18721 Corneal staphyloma, right eye -H18722 Corneal staphyloma, left eye -H18723 Corneal staphyloma, bilateral -H18729 Corneal staphyloma, unspecified eye -H18731 Descemetocele, right eye -H18732 Descemetocele, left eye -H18733 Descemetocele, bilateral -H18739 Descemetocele, unspecified eye -H18791 Other corneal deformities, right eye -H18792 Other corneal deformities, left eye -H18793 Other corneal deformities, bilateral -H18799 Other corneal deformities, unspecified eye -H18811 Anesthesia and hypoesthesia of cornea, right eye -H18812 Anesthesia and hypoesthesia of cornea, left eye -H18813 Anesthesia and hypoesthesia of cornea, bilateral -H18819 Anesthesia and hypoesthesia of cornea, unspecified eye -H18821 Corneal disorder due to contact lens, right eye -H18822 Corneal disorder due to contact lens, left eye -H18823 Corneal disorder due to contact lens, bilateral -H18829 Corneal disorder due to contact lens, unspecified eye -H18831 Recurrent erosion of cornea, right eye -H18832 Recurrent erosion of cornea, left eye -H18833 Recurrent erosion of cornea, bilateral -H18839 Recurrent erosion of cornea, unspecified eye -H18891 Other specified disorders of cornea, right eye -H18892 Other specified disorders of cornea, left eye -H18893 Other specified disorders of cornea, bilateral -H18899 Other specified disorders of cornea, unspecified eye -H189 Unspecified disorder of cornea -H2000 Unspecified acute and subacute iridocyclitis -H20011 Primary iridocyclitis, right eye -H20012 Primary iridocyclitis, left eye -H20013 Primary iridocyclitis, bilateral -H20019 Primary iridocyclitis, unspecified eye -H20021 Recurrent acute iridocyclitis, right eye -H20022 Recurrent acute iridocyclitis, left eye -H20023 Recurrent acute iridocyclitis, bilateral -H20029 Recurrent acute iridocyclitis, unspecified eye -H20031 Secondary infectious iridocyclitis, right eye -H20032 Secondary infectious iridocyclitis, left eye -H20033 Secondary infectious iridocyclitis, bilateral -H20039 Secondary infectious iridocyclitis, unspecified eye -H20041 Secondary noninfectious iridocyclitis, right eye -H20042 Secondary noninfectious iridocyclitis, left eye -H20043 Secondary noninfectious iridocyclitis, bilateral -H20049 Secondary noninfectious iridocyclitis, unspecified eye -H20051 Hypopyon, right eye -H20052 Hypopyon, left eye -H20053 Hypopyon, bilateral -H20059 Hypopyon, unspecified eye -H2010 Chronic iridocyclitis, unspecified eye -H2011 Chronic iridocyclitis, right eye -H2012 Chronic iridocyclitis, left eye -H2013 Chronic iridocyclitis, bilateral -H2020 Lens-induced iridocyclitis, unspecified eye -H2021 Lens-induced iridocyclitis, right eye -H2022 Lens-induced iridocyclitis, left eye -H2023 Lens-induced iridocyclitis, bilateral -H20811 Fuchs' heterochromic cyclitis, right eye -H20812 Fuchs' heterochromic cyclitis, left eye -H20813 Fuchs' heterochromic cyclitis, bilateral -H20819 Fuchs' heterochromic cyclitis, unspecified eye -H20821 Vogt-Koyanagi syndrome, right eye -H20822 Vogt-Koyanagi syndrome, left eye -H20823 Vogt-Koyanagi syndrome, bilateral -H20829 Vogt-Koyanagi syndrome, unspecified eye -H209 Unspecified iridocyclitis -H2100 Hyphema, unspecified eye -H2101 Hyphema, right eye -H2102 Hyphema, left eye -H2103 Hyphema, bilateral -H211X1 Other vascular disorders of iris and ciliary body, right eye -H211X2 Other vascular disorders of iris and ciliary body, left eye -H211X3 Other vascular disorders of iris and ciliary body, bilateral -H211X9 Other vascular disorders of iris and ciliary body, unspecified eye -H21211 Degeneration of chamber angle, right eye -H21212 Degeneration of chamber angle, left eye -H21213 Degeneration of chamber angle, bilateral -H21219 Degeneration of chamber angle, unspecified eye -H21221 Degeneration of ciliary body, right eye -H21222 Degeneration of ciliary body, left eye -H21223 Degeneration of ciliary body, bilateral -H21229 Degeneration of ciliary body, unspecified eye -H21231 Degeneration of iris (pigmentary), right eye -H21232 Degeneration of iris (pigmentary), left eye -H21233 Degeneration of iris (pigmentary), bilateral -H21239 Degeneration of iris (pigmentary), unspecified eye -H21241 Degeneration of pupillary margin, right eye -H21242 Degeneration of pupillary margin, left eye -H21243 Degeneration of pupillary margin, bilateral -H21249 Degeneration of pupillary margin, unspecified eye -H21251 Iridoschisis, right eye -H21252 Iridoschisis, left eye -H21253 Iridoschisis, bilateral -H21259 Iridoschisis, unspecified eye -H21261 Iris atrophy (essential) (progressive), right eye -H21262 Iris atrophy (essential) (progressive), left eye -H21263 Iris atrophy (essential) (progressive), bilateral -H21269 Iris atrophy (essential) (progressive), unspecified eye -H21271 Miotic pupillary cyst, right eye -H21272 Miotic pupillary cyst, left eye -H21273 Miotic pupillary cyst, bilateral -H21279 Miotic pupillary cyst, unspecified eye -H2129 Other iris atrophy -H21301 Idiopathic cysts of iris, ciliary body or anterior chamber, right eye -H21302 Idiopathic cysts of iris, ciliary body or anterior chamber, left eye -H21303 Idiopathic cysts of iris, ciliary body or anterior chamber, bilateral -H21309 Idiopathic cysts of iris, ciliary body or anterior chamber, unspecified eye -H21311 Exudative cysts of iris or anterior chamber, right eye -H21312 Exudative cysts of iris or anterior chamber, left eye -H21313 Exudative cysts of iris or anterior chamber, bilateral -H21319 Exudative cysts of iris or anterior chamber, unspecified eye -H21321 Implantation cysts of iris, ciliary body or anterior chamber, right eye -H21322 Implantation cysts of iris, ciliary body or anterior chamber, left eye -H21323 Implantation cysts of iris, ciliary body or anterior chamber, bilateral -H21329 Implantation cysts of iris, ciliary body or anterior chamber, unspecified eye -H21331 Parasitic cyst of iris, ciliary body or anterior chamber, right eye -H21332 Parasitic cyst of iris, ciliary body or anterior chamber, left eye -H21333 Parasitic cyst of iris, ciliary body or anterior chamber, bilateral -H21339 Parasitic cyst of iris, ciliary body or anterior chamber, unspecified eye -H21341 Primary cyst of pars plana, right eye -H21342 Primary cyst of pars plana, left eye -H21343 Primary cyst of pars plana, bilateral -H21349 Primary cyst of pars plana, unspecified eye -H21351 Exudative cyst of pars plana, right eye -H21352 Exudative cyst of pars plana, left eye -H21353 Exudative cyst of pars plana, bilateral -H21359 Exudative cyst of pars plana, unspecified eye -H2140 Pupillary membranes, unspecified eye -H2141 Pupillary membranes, right eye -H2142 Pupillary membranes, left eye -H2143 Pupillary membranes, bilateral -H21501 Unspecified adhesions of iris, right eye -H21502 Unspecified adhesions of iris, left eye -H21503 Unspecified adhesions of iris, bilateral -H21509 Unspecified adhesions of iris and ciliary body, unspecified eye -H21511 Anterior synechiae (iris), right eye -H21512 Anterior synechiae (iris), left eye -H21513 Anterior synechiae (iris), bilateral -H21519 Anterior synechiae (iris), unspecified eye -H21521 Goniosynechiae, right eye -H21522 Goniosynechiae, left eye -H21523 Goniosynechiae, bilateral -H21529 Goniosynechiae, unspecified eye -H21531 Iridodialysis, right eye -H21532 Iridodialysis, left eye -H21533 Iridodialysis, bilateral -H21539 Iridodialysis, unspecified eye -H21541 Posterior synechiae (iris), right eye -H21542 Posterior synechiae (iris), left eye -H21543 Posterior synechiae (iris), bilateral -H21549 Posterior synechiae (iris), unspecified eye -H21551 Recession of chamber angle, right eye -H21552 Recession of chamber angle, left eye -H21553 Recession of chamber angle, bilateral -H21559 Recession of chamber angle, unspecified eye -H21561 Pupillary abnormality, right eye -H21562 Pupillary abnormality, left eye -H21563 Pupillary abnormality, bilateral -H21569 Pupillary abnormality, unspecified eye -H2181 Floppy iris syndrome -H2182 Plateau iris syndrome (post-iridectomy) (postprocedural) -H2189 Other specified disorders of iris and ciliary body -H219 Unspecified disorder of iris and ciliary body -H22 Disorders of iris and ciliary body in diseases classified elsewhere -H25011 Cortical age-related cataract, right eye -H25012 Cortical age-related cataract, left eye -H25013 Cortical age-related cataract, bilateral -H25019 Cortical age-related cataract, unspecified eye -H25031 Anterior subcapsular polar age-related cataract, right eye -H25032 Anterior subcapsular polar age-related cataract, left eye -H25033 Anterior subcapsular polar age-related cataract, bilateral -H25039 Anterior subcapsular polar age-related cataract, unspecified eye -H25041 Posterior subcapsular polar age-related cataract, right eye -H25042 Posterior subcapsular polar age-related cataract, left eye -H25043 Posterior subcapsular polar age-related cataract, bilateral -H25049 Posterior subcapsular polar age-related cataract, unspecified eye -H25091 Other age-related incipient cataract, right eye -H25092 Other age-related incipient cataract, left eye -H25093 Other age-related incipient cataract, bilateral -H25099 Other age-related incipient cataract, unspecified eye -H2510 Age-related nuclear cataract, unspecified eye -H2511 Age-related nuclear cataract, right eye -H2512 Age-related nuclear cataract, left eye -H2513 Age-related nuclear cataract, bilateral -H2520 Age-related cataract, morgagnian type, unspecified eye -H2521 Age-related cataract, morgagnian type, right eye -H2522 Age-related cataract, morgagnian type, left eye -H2523 Age-related cataract, morgagnian type, bilateral -H25811 Combined forms of age-related cataract, right eye -H25812 Combined forms of age-related cataract, left eye -H25813 Combined forms of age-related cataract, bilateral -H25819 Combined forms of age-related cataract, unspecified eye -H2589 Other age-related cataract -H259 Unspecified age-related cataract -H26001 Unspecified infantile and juvenile cataract, right eye -H26002 Unspecified infantile and juvenile cataract, left eye -H26003 Unspecified infantile and juvenile cataract, bilateral -H26009 Unspecified infantile and juvenile cataract, unspecified eye -H26011 Infantile and juvenile cortical, lamellar, or zonular cataract, right eye -H26012 Infantile and juvenile cortical, lamellar, or zonular cataract, left eye -H26013 Infantile and juvenile cortical, lamellar, or zonular cataract, bilateral -H26019 Infantile and juvenile cortical, lamellar, or zonular cataract, unspecified eye -H26031 Infantile and juvenile nuclear cataract, right eye -H26032 Infantile and juvenile nuclear cataract, left eye -H26033 Infantile and juvenile nuclear cataract, bilateral -H26039 Infantile and juvenile nuclear cataract, unspecified eye -H26041 Anterior subcapsular polar infantile and juvenile cataract, right eye -H26042 Anterior subcapsular polar infantile and juvenile cataract, left eye -H26043 Anterior subcapsular polar infantile and juvenile cataract, bilateral -H26049 Anterior subcapsular polar infantile and juvenile cataract, unspecified eye -H26051 Posterior subcapsular polar infantile and juvenile cataract, right eye -H26052 Posterior subcapsular polar infantile and juvenile cataract, left eye -H26053 Posterior subcapsular polar infantile and juvenile cataract, bilateral -H26059 Posterior subcapsular polar infantile and juvenile cataract, unspecified eye -H26061 Combined forms of infantile and juvenile cataract, right eye -H26062 Combined forms of infantile and juvenile cataract, left eye -H26063 Combined forms of infantile and juvenile cataract, bilateral -H26069 Combined forms of infantile and juvenile cataract, unspecified eye -H2609 Other infantile and juvenile cataract -H26101 Unspecified traumatic cataract, right eye -H26102 Unspecified traumatic cataract, left eye -H26103 Unspecified traumatic cataract, bilateral -H26109 Unspecified traumatic cataract, unspecified eye -H26111 Localized traumatic opacities, right eye -H26112 Localized traumatic opacities, left eye -H26113 Localized traumatic opacities, bilateral -H26119 Localized traumatic opacities, unspecified eye -H26121 Partially resolved traumatic cataract, right eye -H26122 Partially resolved traumatic cataract, left eye -H26123 Partially resolved traumatic cataract, bilateral -H26129 Partially resolved traumatic cataract, unspecified eye -H26131 Total traumatic cataract, right eye -H26132 Total traumatic cataract, left eye -H26133 Total traumatic cataract, bilateral -H26139 Total traumatic cataract, unspecified eye -H2620 Unspecified complicated cataract -H26211 Cataract with neovascularization, right eye -H26212 Cataract with neovascularization, left eye -H26213 Cataract with neovascularization, bilateral -H26219 Cataract with neovascularization, unspecified eye -H26221 Cataract secondary to ocular disorders (degenerative) (inflammatory), right eye -H26222 Cataract secondary to ocular disorders (degenerative) (inflammatory), left eye -H26223 Cataract secondary to ocular disorders (degenerative) (inflammatory), bilateral -H26229 Cataract secondary to ocular disorders (degenerative) (inflammatory), unspecified eye -H26231 Glaucomatous flecks (subcapsular), right eye -H26232 Glaucomatous flecks (subcapsular), left eye -H26233 Glaucomatous flecks (subcapsular), bilateral -H26239 Glaucomatous flecks (subcapsular), unspecified eye -H2630 Drug-induced cataract, unspecified eye -H2631 Drug-induced cataract, right eye -H2632 Drug-induced cataract, left eye -H2633 Drug-induced cataract, bilateral -H2640 Unspecified secondary cataract -H26411 Soemmering's ring, right eye -H26412 Soemmering's ring, left eye -H26413 Soemmering's ring, bilateral -H26419 Soemmering's ring, unspecified eye -H26491 Other secondary cataract, right eye -H26492 Other secondary cataract, left eye -H26493 Other secondary cataract, bilateral -H26499 Other secondary cataract, unspecified eye -H268 Other specified cataract -H269 Unspecified cataract -H2700 Aphakia, unspecified eye -H2701 Aphakia, right eye -H2702 Aphakia, left eye -H2703 Aphakia, bilateral -H2710 Unspecified dislocation of lens -H27111 Subluxation of lens, right eye -H27112 Subluxation of lens, left eye -H27113 Subluxation of lens, bilateral -H27119 Subluxation of lens, unspecified eye -H27121 Anterior dislocation of lens, right eye -H27122 Anterior dislocation of lens, left eye -H27123 Anterior dislocation of lens, bilateral -H27129 Anterior dislocation of lens, unspecified eye -H27131 Posterior dislocation of lens, right eye -H27132 Posterior dislocation of lens, left eye -H27133 Posterior dislocation of lens, bilateral -H27139 Posterior dislocation of lens, unspecified eye -H278 Other specified disorders of lens -H279 Unspecified disorder of lens -H28 Cataract in diseases classified elsewhere -H30001 Unspecified focal chorioretinal inflammation, right eye -H30002 Unspecified focal chorioretinal inflammation, left eye -H30003 Unspecified focal chorioretinal inflammation, bilateral -H30009 Unspecified focal chorioretinal inflammation, unspecified eye -H30011 Focal chorioretinal inflammation, juxtapapillary, right eye -H30012 Focal chorioretinal inflammation, juxtapapillary, left eye -H30013 Focal chorioretinal inflammation, juxtapapillary, bilateral -H30019 Focal chorioretinal inflammation, juxtapapillary, unspecified eye -H30021 Focal chorioretinal inflammation of posterior pole, right eye -H30022 Focal chorioretinal inflammation of posterior pole, left eye -H30023 Focal chorioretinal inflammation of posterior pole, bilateral -H30029 Focal chorioretinal inflammation of posterior pole, unspecified eye -H30031 Focal chorioretinal inflammation, peripheral, right eye -H30032 Focal chorioretinal inflammation, peripheral, left eye -H30033 Focal chorioretinal inflammation, peripheral, bilateral -H30039 Focal chorioretinal inflammation, peripheral, unspecified eye -H30041 Focal chorioretinal inflammation, macular or paramacular, right eye -H30042 Focal chorioretinal inflammation, macular or paramacular, left eye -H30043 Focal chorioretinal inflammation, macular or paramacular, bilateral -H30049 Focal chorioretinal inflammation, macular or paramacular, unspecified eye -H30101 Unspecified disseminated chorioretinal inflammation, right eye -H30102 Unspecified disseminated chorioretinal inflammation, left eye -H30103 Unspecified disseminated chorioretinal inflammation, bilateral -H30109 Unspecified disseminated chorioretinal inflammation, unspecified eye -H30111 Disseminated chorioretinal inflammation of posterior pole, right eye -H30112 Disseminated chorioretinal inflammation of posterior pole, left eye -H30113 Disseminated chorioretinal inflammation of posterior pole, bilateral -H30119 Disseminated chorioretinal inflammation of posterior pole, unspecified eye -H30121 Disseminated chorioretinal inflammation, peripheral right eye -H30122 Disseminated chorioretinal inflammation, peripheral, left eye -H30123 Disseminated chorioretinal inflammation, peripheral, bilateral -H30129 Disseminated chorioretinal inflammation, peripheral, unspecified eye -H30131 Disseminated chorioretinal inflammation, generalized, right eye -H30132 Disseminated chorioretinal inflammation, generalized, left eye -H30133 Disseminated chorioretinal inflammation, generalized, bilateral -H30139 Disseminated chorioretinal inflammation, generalized, unspecified eye -H30141 Acute posterior multifocal placoid pigment epitheliopathy, right eye -H30142 Acute posterior multifocal placoid pigment epitheliopathy, left eye -H30143 Acute posterior multifocal placoid pigment epitheliopathy, bilateral -H30149 Acute posterior multifocal placoid pigment epitheliopathy, unspecified eye -H3020 Posterior cyclitis, unspecified eye -H3021 Posterior cyclitis, right eye -H3022 Posterior cyclitis, left eye -H3023 Posterior cyclitis, bilateral -H30811 Harada's disease, right eye -H30812 Harada's disease, left eye -H30813 Harada's disease, bilateral -H30819 Harada's disease, unspecified eye -H30891 Other chorioretinal inflammations, right eye -H30892 Other chorioretinal inflammations, left eye -H30893 Other chorioretinal inflammations, bilateral -H30899 Other chorioretinal inflammations, unspecified eye -H3090 Unspecified chorioretinal inflammation, unspecified eye -H3091 Unspecified chorioretinal inflammation, right eye -H3092 Unspecified chorioretinal inflammation, left eye -H3093 Unspecified chorioretinal inflammation, bilateral -H31001 Unspecified chorioretinal scars, right eye -H31002 Unspecified chorioretinal scars, left eye -H31003 Unspecified chorioretinal scars, bilateral -H31009 Unspecified chorioretinal scars, unspecified eye -H31011 Macula scars of posterior pole (postinflammatory) (post-traumatic), right eye -H31012 Macula scars of posterior pole (postinflammatory) (post-traumatic), left eye -H31013 Macula scars of posterior pole (postinflammatory) (post-traumatic), bilateral -H31019 Macula scars of posterior pole (postinflammatory) (post-traumatic), unspecified eye -H31021 Solar retinopathy, right eye -H31022 Solar retinopathy, left eye -H31023 Solar retinopathy, bilateral -H31029 Solar retinopathy, unspecified eye -H31091 Other chorioretinal scars, right eye -H31092 Other chorioretinal scars, left eye -H31093 Other chorioretinal scars, bilateral -H31099 Other chorioretinal scars, unspecified eye -H31101 Choroidal degeneration, unspecified, right eye -H31102 Choroidal degeneration, unspecified, left eye -H31103 Choroidal degeneration, unspecified, bilateral -H31109 Choroidal degeneration, unspecified, unspecified eye -H31111 Age-related choroidal atrophy, right eye -H31112 Age-related choroidal atrophy, left eye -H31113 Age-related choroidal atrophy, bilateral -H31119 Age-related choroidal atrophy, unspecified eye -H31121 Diffuse secondary atrophy of choroid, right eye -H31122 Diffuse secondary atrophy of choroid, left eye -H31123 Diffuse secondary atrophy of choroid, bilateral -H31129 Diffuse secondary atrophy of choroid, unspecified eye -H3120 Hereditary choroidal dystrophy, unspecified -H3121 Choroideremia -H3122 Choroidal dystrophy (central areolar) (generalized) (peripapillary) -H3123 Gyrate atrophy, choroid -H3129 Other hereditary choroidal dystrophy -H31301 Unspecified choroidal hemorrhage, right eye -H31302 Unspecified choroidal hemorrhage, left eye -H31303 Unspecified choroidal hemorrhage, bilateral -H31309 Unspecified choroidal hemorrhage, unspecified eye -H31311 Expulsive choroidal hemorrhage, right eye -H31312 Expulsive choroidal hemorrhage, left eye -H31313 Expulsive choroidal hemorrhage, bilateral -H31319 Expulsive choroidal hemorrhage, unspecified eye -H31321 Choroidal rupture, right eye -H31322 Choroidal rupture, left eye -H31323 Choroidal rupture, bilateral -H31329 Choroidal rupture, unspecified eye -H31401 Unspecified choroidal detachment, right eye -H31402 Unspecified choroidal detachment, left eye -H31403 Unspecified choroidal detachment, bilateral -H31409 Unspecified choroidal detachment, unspecified eye -H31411 Hemorrhagic choroidal detachment, right eye -H31412 Hemorrhagic choroidal detachment, left eye -H31413 Hemorrhagic choroidal detachment, bilateral -H31419 Hemorrhagic choroidal detachment, unspecified eye -H31421 Serous choroidal detachment, right eye -H31422 Serous choroidal detachment, left eye -H31423 Serous choroidal detachment, bilateral -H31429 Serous choroidal detachment, unspecified eye -H318 Other specified disorders of choroid -H319 Unspecified disorder of choroid -H32 Chorioretinal disorders in diseases classified elsewhere -H33001 Unspecified retinal detachment with retinal break, right eye -H33002 Unspecified retinal detachment with retinal break, left eye -H33003 Unspecified retinal detachment with retinal break, bilateral -H33009 Unspecified retinal detachment with retinal break, unspecified eye -H33011 Retinal detachment with single break, right eye -H33012 Retinal detachment with single break, left eye -H33013 Retinal detachment with single break, bilateral -H33019 Retinal detachment with single break, unspecified eye -H33021 Retinal detachment with multiple breaks, right eye -H33022 Retinal detachment with multiple breaks, left eye -H33023 Retinal detachment with multiple breaks, bilateral -H33029 Retinal detachment with multiple breaks, unspecified eye -H33031 Retinal detachment with giant retinal tear, right eye -H33032 Retinal detachment with giant retinal tear, left eye -H33033 Retinal detachment with giant retinal tear, bilateral -H33039 Retinal detachment with giant retinal tear, unspecified eye -H33041 Retinal detachment with retinal dialysis, right eye -H33042 Retinal detachment with retinal dialysis, left eye -H33043 Retinal detachment with retinal dialysis, bilateral -H33049 Retinal detachment with retinal dialysis, unspecified eye -H33051 Total retinal detachment, right eye -H33052 Total retinal detachment, left eye -H33053 Total retinal detachment, bilateral -H33059 Total retinal detachment, unspecified eye -H33101 Unspecified retinoschisis, right eye -H33102 Unspecified retinoschisis, left eye -H33103 Unspecified retinoschisis, bilateral -H33109 Unspecified retinoschisis, unspecified eye -H33111 Cyst of ora serrata, right eye -H33112 Cyst of ora serrata, left eye -H33113 Cyst of ora serrata, bilateral -H33119 Cyst of ora serrata, unspecified eye -H33121 Parasitic cyst of retina, right eye -H33122 Parasitic cyst of retina, left eye -H33123 Parasitic cyst of retina, bilateral -H33129 Parasitic cyst of retina, unspecified eye -H33191 Other retinoschisis and retinal cysts, right eye -H33192 Other retinoschisis and retinal cysts, left eye -H33193 Other retinoschisis and retinal cysts, bilateral -H33199 Other retinoschisis and retinal cysts, unspecified eye -H3320 Serous retinal detachment, unspecified eye -H3321 Serous retinal detachment, right eye -H3322 Serous retinal detachment, left eye -H3323 Serous retinal detachment, bilateral -H33301 Unspecified retinal break, right eye -H33302 Unspecified retinal break, left eye -H33303 Unspecified retinal break, bilateral -H33309 Unspecified retinal break, unspecified eye -H33311 Horseshoe tear of retina without detachment, right eye -H33312 Horseshoe tear of retina without detachment, left eye -H33313 Horseshoe tear of retina without detachment, bilateral -H33319 Horseshoe tear of retina without detachment, unspecified eye -H33321 Round hole, right eye -H33322 Round hole, left eye -H33323 Round hole, bilateral -H33329 Round hole, unspecified eye -H33331 Multiple defects of retina without detachment, right eye -H33332 Multiple defects of retina without detachment, left eye -H33333 Multiple defects of retina without detachment, bilateral -H33339 Multiple defects of retina without detachment, unspecified eye -H3340 Traction detachment of retina, unspecified eye -H3341 Traction detachment of retina, right eye -H3342 Traction detachment of retina, left eye -H3343 Traction detachment of retina, bilateral -H338 Other retinal detachments -H3400 Transient retinal artery occlusion, unspecified eye -H3401 Transient retinal artery occlusion, right eye -H3402 Transient retinal artery occlusion, left eye -H3403 Transient retinal artery occlusion, bilateral -H3410 Central retinal artery occlusion, unspecified eye -H3411 Central retinal artery occlusion, right eye -H3412 Central retinal artery occlusion, left eye -H3413 Central retinal artery occlusion, bilateral -H34211 Partial retinal artery occlusion, right eye -H34212 Partial retinal artery occlusion, left eye -H34213 Partial retinal artery occlusion, bilateral -H34219 Partial retinal artery occlusion, unspecified eye -H34231 Retinal artery branch occlusion, right eye -H34232 Retinal artery branch occlusion, left eye -H34233 Retinal artery branch occlusion, bilateral -H34239 Retinal artery branch occlusion, unspecified eye -H348110 Central retinal vein occlusion, right eye, with macular edema -H348111 Central retinal vein occlusion, right eye, with retinal neovascularization -H348112 Central retinal vein occlusion, right eye, stable -H348120 Central retinal vein occlusion, left eye, with macular edema -H348121 Central retinal vein occlusion, left eye, with retinal neovascularization -H348122 Central retinal vein occlusion, left eye, stable -H348130 Central retinal vein occlusion, bilateral, with macular edema -H348131 Central retinal vein occlusion, bilateral, with retinal neovascularization -H348132 Central retinal vein occlusion, bilateral, stable -H348190 Central retinal vein occlusion, unspecified eye, with macular edema -H348191 Central retinal vein occlusion, unspecified eye, with retinal neovascularization -H348192 Central retinal vein occlusion, unspecified eye, stable -H34821 Venous engorgement, right eye -H34822 Venous engorgement, left eye -H34823 Venous engorgement, bilateral -H34829 Venous engorgement, unspecified eye -H348310 Tributary (branch) retinal vein occlusion, right eye, with macular edema -H348311 Tributary (branch) retinal vein occlusion, right eye, with retinal neovascularization -H348312 Tributary (branch) retinal vein occlusion, right eye, stable -H348320 Tributary (branch) retinal vein occlusion, left eye, with macular edema -H348321 Tributary (branch) retinal vein occlusion, left eye, with retinal neovascularization -H348322 Tributary (branch) retinal vein occlusion, left eye, stable -H348330 Tributary (branch) retinal vein occlusion, bilateral, with macular edema -H348331 Tributary (branch) retinal vein occlusion, bilateral, with retinal neovascularization -H348332 Tributary (branch) retinal vein occlusion, bilateral, stable -H348390 Tributary (branch) retinal vein occlusion, unspecified eye, with macular edema -H348391 Tributary (branch) retinal vein occlusion, unspecified eye, with retinal neovascularization -H348392 Tributary (branch) retinal vein occlusion, unspecified eye, stable -H349 Unspecified retinal vascular occlusion -H3500 Unspecified background retinopathy -H35011 Changes in retinal vascular appearance, right eye -H35012 Changes in retinal vascular appearance, left eye -H35013 Changes in retinal vascular appearance, bilateral -H35019 Changes in retinal vascular appearance, unspecified eye -H35021 Exudative retinopathy, right eye -H35022 Exudative retinopathy, left eye -H35023 Exudative retinopathy, bilateral -H35029 Exudative retinopathy, unspecified eye -H35031 Hypertensive retinopathy, right eye -H35032 Hypertensive retinopathy, left eye -H35033 Hypertensive retinopathy, bilateral -H35039 Hypertensive retinopathy, unspecified eye -H35041 Retinal micro-aneurysms, unspecified, right eye -H35042 Retinal micro-aneurysms, unspecified, left eye -H35043 Retinal micro-aneurysms, unspecified, bilateral -H35049 Retinal micro-aneurysms, unspecified, unspecified eye -H35051 Retinal neovascularization, unspecified, right eye -H35052 Retinal neovascularization, unspecified, left eye -H35053 Retinal neovascularization, unspecified, bilateral -H35059 Retinal neovascularization, unspecified, unspecified eye -H35061 Retinal vasculitis, right eye -H35062 Retinal vasculitis, left eye -H35063 Retinal vasculitis, bilateral -H35069 Retinal vasculitis, unspecified eye -H35071 Retinal telangiectasis, right eye -H35072 Retinal telangiectasis, left eye -H35073 Retinal telangiectasis, bilateral -H35079 Retinal telangiectasis, unspecified eye -H3509 Other intraretinal microvascular abnormalities -H35101 Retinopathy of prematurity, unspecified, right eye -H35102 Retinopathy of prematurity, unspecified, left eye -H35103 Retinopathy of prematurity, unspecified, bilateral -H35109 Retinopathy of prematurity, unspecified, unspecified eye -H35111 Retinopathy of prematurity, stage 0, right eye -H35112 Retinopathy of prematurity, stage 0, left eye -H35113 Retinopathy of prematurity, stage 0, bilateral -H35119 Retinopathy of prematurity, stage 0, unspecified eye -H35121 Retinopathy of prematurity, stage 1, right eye -H35122 Retinopathy of prematurity, stage 1, left eye -H35123 Retinopathy of prematurity, stage 1, bilateral -H35129 Retinopathy of prematurity, stage 1, unspecified eye -H35131 Retinopathy of prematurity, stage 2, right eye -H35132 Retinopathy of prematurity, stage 2, left eye -H35133 Retinopathy of prematurity, stage 2, bilateral -H35139 Retinopathy of prematurity, stage 2, unspecified eye -H35141 Retinopathy of prematurity, stage 3, right eye -H35142 Retinopathy of prematurity, stage 3, left eye -H35143 Retinopathy of prematurity, stage 3, bilateral -H35149 Retinopathy of prematurity, stage 3, unspecified eye -H35151 Retinopathy of prematurity, stage 4, right eye -H35152 Retinopathy of prematurity, stage 4, left eye -H35153 Retinopathy of prematurity, stage 4, bilateral -H35159 Retinopathy of prematurity, stage 4, unspecified eye -H35161 Retinopathy of prematurity, stage 5, right eye -H35162 Retinopathy of prematurity, stage 5, left eye -H35163 Retinopathy of prematurity, stage 5, bilateral -H35169 Retinopathy of prematurity, stage 5, unspecified eye -H35171 Retrolental fibroplasia, right eye -H35172 Retrolental fibroplasia, left eye -H35173 Retrolental fibroplasia, bilateral -H35179 Retrolental fibroplasia, unspecified eye -H3520 Other non-diabetic proliferative retinopathy, unspecified eye -H3521 Other non-diabetic proliferative retinopathy, right eye -H3522 Other non-diabetic proliferative retinopathy, left eye -H3523 Other non-diabetic proliferative retinopathy, bilateral -H3530 Unspecified macular degeneration -H353110 Nonexudative age-related macular degeneration, right eye, stage unspecified -H353111 Nonexudative age-related macular degeneration, right eye, early dry stage -H353112 Nonexudative age-related macular degeneration, right eye, intermediate dry stage -H353113 Nonexudative age-related macular degeneration, right eye, advanced atrophic without subfoveal involvement -H353114 Nonexudative age-related macular degeneration, right eye, advanced atrophic with subfoveal involvement -H353120 Nonexudative age-related macular degeneration, left eye, stage unspecified -H353121 Nonexudative age-related macular degeneration, left eye, early dry stage -H353122 Nonexudative age-related macular degeneration, left eye, intermediate dry stage -H353123 Nonexudative age-related macular degeneration, left eye, advanced atrophic without subfoveal involvement -H353124 Nonexudative age-related macular degeneration, left eye, advanced atrophic with subfoveal involvement -H353130 Nonexudative age-related macular degeneration, bilateral, stage unspecified -H353131 Nonexudative age-related macular degeneration, bilateral, early dry stage -H353132 Nonexudative age-related macular degeneration, bilateral, intermediate dry stage -H353133 Nonexudative age-related macular degeneration, bilateral, advanced atrophic without subfoveal involvement -H353134 Nonexudative age-related macular degeneration, bilateral, advanced atrophic with subfoveal involvement -H353190 Nonexudative age-related macular degeneration, unspecified eye, stage unspecified -H353191 Nonexudative age-related macular degeneration, unspecified eye, early dry stage -H353192 Nonexudative age-related macular degeneration, unspecified eye, intermediate dry stage -H353193 Nonexudative age-related macular degeneration, unspecified eye, advanced atrophic without subfoveal involvement -H353194 Nonexudative age-related macular degeneration, unspecified eye, advanced atrophic with subfoveal involvement -H353210 Exudative age-related macular degeneration, right eye, stage unspecified -H353211 Exudative age-related macular degeneration, right eye, with active choroidal neovascularization -H353212 Exudative age-related macular degeneration, right eye, with inactive choroidal neovascularization -H353213 Exudative age-related macular degeneration, right eye, with inactive scar -H353220 Exudative age-related macular degeneration, left eye, stage unspecified -H353221 Exudative age-related macular degeneration, left eye, with active choroidal neovascularization -H353222 Exudative age-related macular degeneration, left eye, with inactive choroidal neovascularization -H353223 Exudative age-related macular degeneration, left eye, with inactive scar -H353230 Exudative age-related macular degeneration, bilateral, stage unspecified -H353231 Exudative age-related macular degeneration, bilateral, with active choroidal neovascularization -H353232 Exudative age-related macular degeneration, bilateral, with inactive choroidal neovascularization -H353233 Exudative age-related macular degeneration, bilateral, with inactive scar -H353290 Exudative age-related macular degeneration, unspecified eye, stage unspecified -H353291 Exudative age-related macular degeneration, unspecified eye, with active choroidal neovascularization -H353292 Exudative age-related macular degeneration, unspecified eye, with inactive choroidal neovascularization -H353293 Exudative age-related macular degeneration, unspecified eye, with inactive scar -H3533 Angioid streaks of macula -H35341 Macular cyst, hole, or pseudohole, right eye -H35342 Macular cyst, hole, or pseudohole, left eye -H35343 Macular cyst, hole, or pseudohole, bilateral -H35349 Macular cyst, hole, or pseudohole, unspecified eye -H35351 Cystoid macular degeneration, right eye -H35352 Cystoid macular degeneration, left eye -H35353 Cystoid macular degeneration, bilateral -H35359 Cystoid macular degeneration, unspecified eye -H35361 Drusen (degenerative) of macula, right eye -H35362 Drusen (degenerative) of macula, left eye -H35363 Drusen (degenerative) of macula, bilateral -H35369 Drusen (degenerative) of macula, unspecified eye -H35371 Puckering of macula, right eye -H35372 Puckering of macula, left eye -H35373 Puckering of macula, bilateral -H35379 Puckering of macula, unspecified eye -H35381 Toxic maculopathy, right eye -H35382 Toxic maculopathy, left eye -H35383 Toxic maculopathy, bilateral -H35389 Toxic maculopathy, unspecified eye -H3540 Unspecified peripheral retinal degeneration -H35411 Lattice degeneration of retina, right eye -H35412 Lattice degeneration of retina, left eye -H35413 Lattice degeneration of retina, bilateral -H35419 Lattice degeneration of retina, unspecified eye -H35421 Microcystoid degeneration of retina, right eye -H35422 Microcystoid degeneration of retina, left eye -H35423 Microcystoid degeneration of retina, bilateral -H35429 Microcystoid degeneration of retina, unspecified eye -H35431 Paving stone degeneration of retina, right eye -H35432 Paving stone degeneration of retina, left eye -H35433 Paving stone degeneration of retina, bilateral -H35439 Paving stone degeneration of retina, unspecified eye -H35441 Age-related reticular degeneration of retina, right eye -H35442 Age-related reticular degeneration of retina, left eye -H35443 Age-related reticular degeneration of retina, bilateral -H35449 Age-related reticular degeneration of retina, unspecified eye -H35451 Secondary pigmentary degeneration, right eye -H35452 Secondary pigmentary degeneration, left eye -H35453 Secondary pigmentary degeneration, bilateral -H35459 Secondary pigmentary degeneration, unspecified eye -H35461 Secondary vitreoretinal degeneration, right eye -H35462 Secondary vitreoretinal degeneration, left eye -H35463 Secondary vitreoretinal degeneration, bilateral -H35469 Secondary vitreoretinal degeneration, unspecified eye -H3550 Unspecified hereditary retinal dystrophy -H3551 Vitreoretinal dystrophy -H3552 Pigmentary retinal dystrophy -H3553 Other dystrophies primarily involving the sensory retina -H3554 Dystrophies primarily involving the retinal pigment epithelium -H3560 Retinal hemorrhage, unspecified eye -H3561 Retinal hemorrhage, right eye -H3562 Retinal hemorrhage, left eye -H3563 Retinal hemorrhage, bilateral -H3570 Unspecified separation of retinal layers -H35711 Central serous chorioretinopathy, right eye -H35712 Central serous chorioretinopathy, left eye -H35713 Central serous chorioretinopathy, bilateral -H35719 Central serous chorioretinopathy, unspecified eye -H35721 Serous detachment of retinal pigment epithelium, right eye -H35722 Serous detachment of retinal pigment epithelium, left eye -H35723 Serous detachment of retinal pigment epithelium, bilateral -H35729 Serous detachment of retinal pigment epithelium, unspecified eye -H35731 Hemorrhagic detachment of retinal pigment epithelium, right eye -H35732 Hemorrhagic detachment of retinal pigment epithelium, left eye -H35733 Hemorrhagic detachment of retinal pigment epithelium, bilateral -H35739 Hemorrhagic detachment of retinal pigment epithelium, unspecified eye -H3581 Retinal edema -H3582 Retinal ischemia -H3589 Other specified retinal disorders -H359 Unspecified retinal disorder -H36 Retinal disorders in diseases classified elsewhere -H40001 Preglaucoma, unspecified, right eye -H40002 Preglaucoma, unspecified, left eye -H40003 Preglaucoma, unspecified, bilateral -H40009 Preglaucoma, unspecified, unspecified eye -H40011 Open angle with borderline findings, low risk, right eye -H40012 Open angle with borderline findings, low risk, left eye -H40013 Open angle with borderline findings, low risk, bilateral -H40019 Open angle with borderline findings, low risk, unspecified eye -H40021 Open angle with borderline findings, high risk, right eye -H40022 Open angle with borderline findings, high risk, left eye -H40023 Open angle with borderline findings, high risk, bilateral -H40029 Open angle with borderline findings, high risk, unspecified eye -H40031 Anatomical narrow angle, right eye -H40032 Anatomical narrow angle, left eye -H40033 Anatomical narrow angle, bilateral -H40039 Anatomical narrow angle, unspecified eye -H40041 Steroid responder, right eye -H40042 Steroid responder, left eye -H40043 Steroid responder, bilateral -H40049 Steroid responder, unspecified eye -H40051 Ocular hypertension, right eye -H40052 Ocular hypertension, left eye -H40053 Ocular hypertension, bilateral -H40059 Ocular hypertension, unspecified eye -H40061 Primary angle closure without glaucoma damage, right eye -H40062 Primary angle closure without glaucoma damage, left eye -H40063 Primary angle closure without glaucoma damage, bilateral -H40069 Primary angle closure without glaucoma damage, unspecified eye -H4010X0 Unspecified open-angle glaucoma, stage unspecified -H4010X1 Unspecified open-angle glaucoma, mild stage -H4010X2 Unspecified open-angle glaucoma, moderate stage -H4010X3 Unspecified open-angle glaucoma, severe stage -H4010X4 Unspecified open-angle glaucoma, indeterminate stage -H401110 Primary open-angle glaucoma, right eye, stage unspecified -H401111 Primary open-angle glaucoma, right eye, mild stage -H401112 Primary open-angle glaucoma, right eye, moderate stage -H401113 Primary open-angle glaucoma, right eye, severe stage -H401114 Primary open-angle glaucoma, right eye, indeterminate stage -H401120 Primary open-angle glaucoma, left eye, stage unspecified -H401121 Primary open-angle glaucoma, left eye, mild stage -H401122 Primary open-angle glaucoma, left eye, moderate stage -H401123 Primary open-angle glaucoma, left eye, severe stage -H401124 Primary open-angle glaucoma, left eye, indeterminate stage -H401130 Primary open-angle glaucoma, bilateral, stage unspecified -H401131 Primary open-angle glaucoma, bilateral, mild stage -H401132 Primary open-angle glaucoma, bilateral, moderate stage -H401133 Primary open-angle glaucoma, bilateral, severe stage -H401134 Primary open-angle glaucoma, bilateral, indeterminate stage -H401190 Primary open-angle glaucoma, unspecified eye, stage unspecified -H401191 Primary open-angle glaucoma, unspecified eye, mild stage -H401192 Primary open-angle glaucoma, unspecified eye, moderate stage -H401193 Primary open-angle glaucoma, unspecified eye, severe stage -H401194 Primary open-angle glaucoma, unspecified eye, indeterminate stage -H401210 Low-tension glaucoma, right eye, stage unspecified -H401211 Low-tension glaucoma, right eye, mild stage -H401212 Low-tension glaucoma, right eye, moderate stage -H401213 Low-tension glaucoma, right eye, severe stage -H401214 Low-tension glaucoma, right eye, indeterminate stage -H401220 Low-tension glaucoma, left eye, stage unspecified -H401221 Low-tension glaucoma, left eye, mild stage -H401222 Low-tension glaucoma, left eye, moderate stage -H401223 Low-tension glaucoma, left eye, severe stage -H401224 Low-tension glaucoma, left eye, indeterminate stage -H401230 Low-tension glaucoma, bilateral, stage unspecified -H401231 Low-tension glaucoma, bilateral, mild stage -H401232 Low-tension glaucoma, bilateral, moderate stage -H401233 Low-tension glaucoma, bilateral, severe stage -H401234 Low-tension glaucoma, bilateral, indeterminate stage -H401290 Low-tension glaucoma, unspecified eye, stage unspecified -H401291 Low-tension glaucoma, unspecified eye, mild stage -H401292 Low-tension glaucoma, unspecified eye, moderate stage -H401293 Low-tension glaucoma, unspecified eye, severe stage -H401294 Low-tension glaucoma, unspecified eye, indeterminate stage -H401310 Pigmentary glaucoma, right eye, stage unspecified -H401311 Pigmentary glaucoma, right eye, mild stage -H401312 Pigmentary glaucoma, right eye, moderate stage -H401313 Pigmentary glaucoma, right eye, severe stage -H401314 Pigmentary glaucoma, right eye, indeterminate stage -H401320 Pigmentary glaucoma, left eye, stage unspecified -H401321 Pigmentary glaucoma, left eye, mild stage -H401322 Pigmentary glaucoma, left eye, moderate stage -H401323 Pigmentary glaucoma, left eye, severe stage -H401324 Pigmentary glaucoma, left eye, indeterminate stage -H401330 Pigmentary glaucoma, bilateral, stage unspecified -H401331 Pigmentary glaucoma, bilateral, mild stage -H401332 Pigmentary glaucoma, bilateral, moderate stage -H401333 Pigmentary glaucoma, bilateral, severe stage -H401334 Pigmentary glaucoma, bilateral, indeterminate stage -H401390 Pigmentary glaucoma, unspecified eye, stage unspecified -H401391 Pigmentary glaucoma, unspecified eye, mild stage -H401392 Pigmentary glaucoma, unspecified eye, moderate stage -H401393 Pigmentary glaucoma, unspecified eye, severe stage -H401394 Pigmentary glaucoma, unspecified eye, indeterminate stage -H401410 Capsular glaucoma with pseudoexfoliation of lens, right eye, stage unspecified -H401411 Capsular glaucoma with pseudoexfoliation of lens, right eye, mild stage -H401412 Capsular glaucoma with pseudoexfoliation of lens, right eye, moderate stage -H401413 Capsular glaucoma with pseudoexfoliation of lens, right eye, severe stage -H401414 Capsular glaucoma with pseudoexfoliation of lens, right eye, indeterminate stage -H401420 Capsular glaucoma with pseudoexfoliation of lens, left eye, stage unspecified -H401421 Capsular glaucoma with pseudoexfoliation of lens, left eye, mild stage -H401422 Capsular glaucoma with pseudoexfoliation of lens, left eye, moderate stage -H401423 Capsular glaucoma with pseudoexfoliation of lens, left eye, severe stage -H401424 Capsular glaucoma with pseudoexfoliation of lens, left eye, indeterminate stage -H401430 Capsular glaucoma with pseudoexfoliation of lens, bilateral, stage unspecified -H401431 Capsular glaucoma with pseudoexfoliation of lens, bilateral, mild stage -H401432 Capsular glaucoma with pseudoexfoliation of lens, bilateral, moderate stage -H401433 Capsular glaucoma with pseudoexfoliation of lens, bilateral, severe stage -H401434 Capsular glaucoma with pseudoexfoliation of lens, bilateral, indeterminate stage -H401490 Capsular glaucoma with pseudoexfoliation of lens, unspecified eye, stage unspecified -H401491 Capsular glaucoma with pseudoexfoliation of lens, unspecified eye, mild stage -H401492 Capsular glaucoma with pseudoexfoliation of lens, unspecified eye, moderate stage -H401493 Capsular glaucoma with pseudoexfoliation of lens, unspecified eye, severe stage -H401494 Capsular glaucoma with pseudoexfoliation of lens, unspecified eye, indeterminate stage -H40151 Residual stage of open-angle glaucoma, right eye -H40152 Residual stage of open-angle glaucoma, left eye -H40153 Residual stage of open-angle glaucoma, bilateral -H40159 Residual stage of open-angle glaucoma, unspecified eye -H4020X0 Unspecified primary angle-closure glaucoma, stage unspecified -H4020X1 Unspecified primary angle-closure glaucoma, mild stage -H4020X2 Unspecified primary angle-closure glaucoma, moderate stage -H4020X3 Unspecified primary angle-closure glaucoma, severe stage -H4020X4 Unspecified primary angle-closure glaucoma, indeterminate stage -H40211 Acute angle-closure glaucoma, right eye -H40212 Acute angle-closure glaucoma, left eye -H40213 Acute angle-closure glaucoma, bilateral -H40219 Acute angle-closure glaucoma, unspecified eye -H402210 Chronic angle-closure glaucoma, right eye, stage unspecified -H402211 Chronic angle-closure glaucoma, right eye, mild stage -H402212 Chronic angle-closure glaucoma, right eye, moderate stage -H402213 Chronic angle-closure glaucoma, right eye, severe stage -H402214 Chronic angle-closure glaucoma, right eye, indeterminate stage -H402220 Chronic angle-closure glaucoma, left eye, stage unspecified -H402221 Chronic angle-closure glaucoma, left eye, mild stage -H402222 Chronic angle-closure glaucoma, left eye, moderate stage -H402223 Chronic angle-closure glaucoma, left eye, severe stage -H402224 Chronic angle-closure glaucoma, left eye, indeterminate stage -H402230 Chronic angle-closure glaucoma, bilateral, stage unspecified -H402231 Chronic angle-closure glaucoma, bilateral, mild stage -H402232 Chronic angle-closure glaucoma, bilateral, moderate stage -H402233 Chronic angle-closure glaucoma, bilateral, severe stage -H402234 Chronic angle-closure glaucoma, bilateral, indeterminate stage -H402290 Chronic angle-closure glaucoma, unspecified eye, stage unspecified -H402291 Chronic angle-closure glaucoma, unspecified eye, mild stage -H402292 Chronic angle-closure glaucoma, unspecified eye, moderate stage -H402293 Chronic angle-closure glaucoma, unspecified eye, severe stage -H402294 Chronic angle-closure glaucoma, unspecified eye, indeterminate stage -H40231 Intermittent angle-closure glaucoma, right eye -H40232 Intermittent angle-closure glaucoma, left eye -H40233 Intermittent angle-closure glaucoma, bilateral -H40239 Intermittent angle-closure glaucoma, unspecified eye -H40241 Residual stage of angle-closure glaucoma, right eye -H40242 Residual stage of angle-closure glaucoma, left eye -H40243 Residual stage of angle-closure glaucoma, bilateral -H40249 Residual stage of angle-closure glaucoma, unspecified eye -H4030X0 Glaucoma secondary to eye trauma, unspecified eye, stage unspecified -H4030X1 Glaucoma secondary to eye trauma, unspecified eye, mild stage -H4030X2 Glaucoma secondary to eye trauma, unspecified eye, moderate stage -H4030X3 Glaucoma secondary to eye trauma, unspecified eye, severe stage -H4030X4 Glaucoma secondary to eye trauma, unspecified eye, indeterminate stage -H4031X0 Glaucoma secondary to eye trauma, right eye, stage unspecified -H4031X1 Glaucoma secondary to eye trauma, right eye, mild stage -H4031X2 Glaucoma secondary to eye trauma, right eye, moderate stage -H4031X3 Glaucoma secondary to eye trauma, right eye, severe stage -H4031X4 Glaucoma secondary to eye trauma, right eye, indeterminate stage -H4032X0 Glaucoma secondary to eye trauma, left eye, stage unspecified -H4032X1 Glaucoma secondary to eye trauma, left eye, mild stage -H4032X2 Glaucoma secondary to eye trauma, left eye, moderate stage -H4032X3 Glaucoma secondary to eye trauma, left eye, severe stage -H4032X4 Glaucoma secondary to eye trauma, left eye, indeterminate stage -H4033X0 Glaucoma secondary to eye trauma, bilateral, stage unspecified -H4033X1 Glaucoma secondary to eye trauma, bilateral, mild stage -H4033X2 Glaucoma secondary to eye trauma, bilateral, moderate stage -H4033X3 Glaucoma secondary to eye trauma, bilateral, severe stage -H4033X4 Glaucoma secondary to eye trauma, bilateral, indeterminate stage -H4040X0 Glaucoma secondary to eye inflammation, unspecified eye, stage unspecified -H4040X1 Glaucoma secondary to eye inflammation, unspecified eye, mild stage -H4040X2 Glaucoma secondary to eye inflammation, unspecified eye, moderate stage -H4040X3 Glaucoma secondary to eye inflammation, unspecified eye, severe stage -H4040X4 Glaucoma secondary to eye inflammation, unspecified eye, indeterminate stage -H4041X0 Glaucoma secondary to eye inflammation, right eye, stage unspecified -H4041X1 Glaucoma secondary to eye inflammation, right eye, mild stage -H4041X2 Glaucoma secondary to eye inflammation, right eye, moderate stage -H4041X3 Glaucoma secondary to eye inflammation, right eye, severe stage -H4041X4 Glaucoma secondary to eye inflammation, right eye, indeterminate stage -H4042X0 Glaucoma secondary to eye inflammation, left eye, stage unspecified -H4042X1 Glaucoma secondary to eye inflammation, left eye, mild stage -H4042X2 Glaucoma secondary to eye inflammation, left eye, moderate stage -H4042X3 Glaucoma secondary to eye inflammation, left eye, severe stage -H4042X4 Glaucoma secondary to eye inflammation, left eye, indeterminate stage -H4043X0 Glaucoma secondary to eye inflammation, bilateral, stage unspecified -H4043X1 Glaucoma secondary to eye inflammation, bilateral, mild stage -H4043X2 Glaucoma secondary to eye inflammation, bilateral, moderate stage -H4043X3 Glaucoma secondary to eye inflammation, bilateral, severe stage -H4043X4 Glaucoma secondary to eye inflammation, bilateral, indeterminate stage -H4050X0 Glaucoma secondary to other eye disorders, unspecified eye, stage unspecified -H4050X1 Glaucoma secondary to other eye disorders, unspecified eye, mild stage -H4050X2 Glaucoma secondary to other eye disorders, unspecified eye, moderate stage -H4050X3 Glaucoma secondary to other eye disorders, unspecified eye, severe stage -H4050X4 Glaucoma secondary to other eye disorders, unspecified eye, indeterminate stage -H4051X0 Glaucoma secondary to other eye disorders, right eye, stage unspecified -H4051X1 Glaucoma secondary to other eye disorders, right eye, mild stage -H4051X2 Glaucoma secondary to other eye disorders, right eye, moderate stage -H4051X3 Glaucoma secondary to other eye disorders, right eye, severe stage -H4051X4 Glaucoma secondary to other eye disorders, right eye, indeterminate stage -H4052X0 Glaucoma secondary to other eye disorders, left eye, stage unspecified -H4052X1 Glaucoma secondary to other eye disorders, left eye, mild stage -H4052X2 Glaucoma secondary to other eye disorders, left eye, moderate stage -H4052X3 Glaucoma secondary to other eye disorders, left eye, severe stage -H4052X4 Glaucoma secondary to other eye disorders, left eye, indeterminate stage -H4053X0 Glaucoma secondary to other eye disorders, bilateral, stage unspecified -H4053X1 Glaucoma secondary to other eye disorders, bilateral, mild stage -H4053X2 Glaucoma secondary to other eye disorders, bilateral, moderate stage -H4053X3 Glaucoma secondary to other eye disorders, bilateral, severe stage -H4053X4 Glaucoma secondary to other eye disorders, bilateral, indeterminate stage -H4060X0 Glaucoma secondary to drugs, unspecified eye, stage unspecified -H4060X1 Glaucoma secondary to drugs, unspecified eye, mild stage -H4060X2 Glaucoma secondary to drugs, unspecified eye, moderate stage -H4060X3 Glaucoma secondary to drugs, unspecified eye, severe stage -H4060X4 Glaucoma secondary to drugs, unspecified eye, indeterminate stage -H4061X0 Glaucoma secondary to drugs, right eye, stage unspecified -H4061X1 Glaucoma secondary to drugs, right eye, mild stage -H4061X2 Glaucoma secondary to drugs, right eye, moderate stage -H4061X3 Glaucoma secondary to drugs, right eye, severe stage -H4061X4 Glaucoma secondary to drugs, right eye, indeterminate stage -H4062X0 Glaucoma secondary to drugs, left eye, stage unspecified -H4062X1 Glaucoma secondary to drugs, left eye, mild stage -H4062X2 Glaucoma secondary to drugs, left eye, moderate stage -H4062X3 Glaucoma secondary to drugs, left eye, severe stage -H4062X4 Glaucoma secondary to drugs, left eye, indeterminate stage -H4063X0 Glaucoma secondary to drugs, bilateral, stage unspecified -H4063X1 Glaucoma secondary to drugs, bilateral, mild stage -H4063X2 Glaucoma secondary to drugs, bilateral, moderate stage -H4063X3 Glaucoma secondary to drugs, bilateral, severe stage -H4063X4 Glaucoma secondary to drugs, bilateral, indeterminate stage -H40811 Glaucoma with increased episcleral venous pressure, right eye -H40812 Glaucoma with increased episcleral venous pressure, left eye -H40813 Glaucoma with increased episcleral venous pressure, bilateral -H40819 Glaucoma with increased episcleral venous pressure, unspecified eye -H40821 Hypersecretion glaucoma, right eye -H40822 Hypersecretion glaucoma, left eye -H40823 Hypersecretion glaucoma, bilateral -H40829 Hypersecretion glaucoma, unspecified eye -H40831 Aqueous misdirection, right eye -H40832 Aqueous misdirection, left eye -H40833 Aqueous misdirection, bilateral -H40839 Aqueous misdirection, unspecified eye -H4089 Other specified glaucoma -H409 Unspecified glaucoma -H42 Glaucoma in diseases classified elsewhere -H4300 Vitreous prolapse, unspecified eye -H4301 Vitreous prolapse, right eye -H4302 Vitreous prolapse, left eye -H4303 Vitreous prolapse, bilateral -H4310 Vitreous hemorrhage, unspecified eye -H4311 Vitreous hemorrhage, right eye -H4312 Vitreous hemorrhage, left eye -H4313 Vitreous hemorrhage, bilateral -H4320 Crystalline deposits in vitreous body, unspecified eye -H4321 Crystalline deposits in vitreous body, right eye -H4322 Crystalline deposits in vitreous body, left eye -H4323 Crystalline deposits in vitreous body, bilateral -H43311 Vitreous membranes and strands, right eye -H43312 Vitreous membranes and strands, left eye -H43313 Vitreous membranes and strands, bilateral -H43319 Vitreous membranes and strands, unspecified eye -H43391 Other vitreous opacities, right eye -H43392 Other vitreous opacities, left eye -H43393 Other vitreous opacities, bilateral -H43399 Other vitreous opacities, unspecified eye -H43811 Vitreous degeneration, right eye -H43812 Vitreous degeneration, left eye -H43813 Vitreous degeneration, bilateral -H43819 Vitreous degeneration, unspecified eye -H43821 Vitreomacular adhesion, right eye -H43822 Vitreomacular adhesion, left eye -H43823 Vitreomacular adhesion, bilateral -H43829 Vitreomacular adhesion, unspecified eye -H4389 Other disorders of vitreous body -H439 Unspecified disorder of vitreous body -H44001 Unspecified purulent endophthalmitis, right eye -H44002 Unspecified purulent endophthalmitis, left eye -H44003 Unspecified purulent endophthalmitis, bilateral -H44009 Unspecified purulent endophthalmitis, unspecified eye -H44011 Panophthalmitis (acute), right eye -H44012 Panophthalmitis (acute), left eye -H44013 Panophthalmitis (acute), bilateral -H44019 Panophthalmitis (acute), unspecified eye -H44021 Vitreous abscess (chronic), right eye -H44022 Vitreous abscess (chronic), left eye -H44023 Vitreous abscess (chronic), bilateral -H44029 Vitreous abscess (chronic), unspecified eye -H44111 Panuveitis, right eye -H44112 Panuveitis, left eye -H44113 Panuveitis, bilateral -H44119 Panuveitis, unspecified eye -H44121 Parasitic endophthalmitis, unspecified, right eye -H44122 Parasitic endophthalmitis, unspecified, left eye -H44123 Parasitic endophthalmitis, unspecified, bilateral -H44129 Parasitic endophthalmitis, unspecified, unspecified eye -H44131 Sympathetic uveitis, right eye -H44132 Sympathetic uveitis, left eye -H44133 Sympathetic uveitis, bilateral -H44139 Sympathetic uveitis, unspecified eye -H4419 Other endophthalmitis -H4420 Degenerative myopia, unspecified eye -H4421 Degenerative myopia, right eye -H4422 Degenerative myopia, left eye -H4423 Degenerative myopia, bilateral -H4430 Unspecified degenerative disorder of globe -H44311 Chalcosis, right eye -H44312 Chalcosis, left eye -H44313 Chalcosis, bilateral -H44319 Chalcosis, unspecified eye -H44321 Siderosis of eye, right eye -H44322 Siderosis of eye, left eye -H44323 Siderosis of eye, bilateral -H44329 Siderosis of eye, unspecified eye -H44391 Other degenerative disorders of globe, right eye -H44392 Other degenerative disorders of globe, left eye -H44393 Other degenerative disorders of globe, bilateral -H44399 Other degenerative disorders of globe, unspecified eye -H4440 Unspecified hypotony of eye -H44411 Flat anterior chamber hypotony of right eye -H44412 Flat anterior chamber hypotony of left eye -H44413 Flat anterior chamber hypotony of eye, bilateral -H44419 Flat anterior chamber hypotony of unspecified eye -H44421 Hypotony of right eye due to ocular fistula -H44422 Hypotony of left eye due to ocular fistula -H44423 Hypotony of eye due to ocular fistula, bilateral -H44429 Hypotony of unspecified eye due to ocular fistula -H44431 Hypotony of eye due to other ocular disorders, right eye -H44432 Hypotony of eye due to other ocular disorders, left eye -H44433 Hypotony of eye due to other ocular disorders, bilateral -H44439 Hypotony of eye due to other ocular disorders, unspecified eye -H44441 Primary hypotony of right eye -H44442 Primary hypotony of left eye -H44443 Primary hypotony of eye, bilateral -H44449 Primary hypotony of unspecified eye -H4450 Unspecified degenerated conditions of globe -H44511 Absolute glaucoma, right eye -H44512 Absolute glaucoma, left eye -H44513 Absolute glaucoma, bilateral -H44519 Absolute glaucoma, unspecified eye -H44521 Atrophy of globe, right eye -H44522 Atrophy of globe, left eye -H44523 Atrophy of globe, bilateral -H44529 Atrophy of globe, unspecified eye -H44531 Leucocoria, right eye -H44532 Leucocoria, left eye -H44533 Leucocoria, bilateral -H44539 Leucocoria, unspecified eye -H44601 Unspecified retained (old) intraocular foreign body, magnetic, right eye -H44602 Unspecified retained (old) intraocular foreign body, magnetic, left eye -H44603 Unspecified retained (old) intraocular foreign body, magnetic, bilateral -H44609 Unspecified retained (old) intraocular foreign body, magnetic, unspecified eye -H44611 Retained (old) magnetic foreign body in anterior chamber, right eye -H44612 Retained (old) magnetic foreign body in anterior chamber, left eye -H44613 Retained (old) magnetic foreign body in anterior chamber, bilateral -H44619 Retained (old) magnetic foreign body in anterior chamber, unspecified eye -H44621 Retained (old) magnetic foreign body in iris or ciliary body, right eye -H44622 Retained (old) magnetic foreign body in iris or ciliary body, left eye -H44623 Retained (old) magnetic foreign body in iris or ciliary body, bilateral -H44629 Retained (old) magnetic foreign body in iris or ciliary body, unspecified eye -H44631 Retained (old) magnetic foreign body in lens, right eye -H44632 Retained (old) magnetic foreign body in lens, left eye -H44633 Retained (old) magnetic foreign body in lens, bilateral -H44639 Retained (old) magnetic foreign body in lens, unspecified eye -H44641 Retained (old) magnetic foreign body in posterior wall of globe, right eye -H44642 Retained (old) magnetic foreign body in posterior wall of globe, left eye -H44643 Retained (old) magnetic foreign body in posterior wall of globe, bilateral -H44649 Retained (old) magnetic foreign body in posterior wall of globe, unspecified eye -H44651 Retained (old) magnetic foreign body in vitreous body, right eye -H44652 Retained (old) magnetic foreign body in vitreous body, left eye -H44653 Retained (old) magnetic foreign body in vitreous body, bilateral -H44659 Retained (old) magnetic foreign body in vitreous body, unspecified eye -H44691 Retained (old) intraocular foreign body, magnetic, in other or multiple sites, right eye -H44692 Retained (old) intraocular foreign body, magnetic, in other or multiple sites, left eye -H44693 Retained (old) intraocular foreign body, magnetic, in other or multiple sites, bilateral -H44699 Retained (old) intraocular foreign body, magnetic, in other or multiple sites, unspecified eye -H44701 Unspecified retained (old) intraocular foreign body, nonmagnetic, right eye -H44702 Unspecified retained (old) intraocular foreign body, nonmagnetic, left eye -H44703 Unspecified retained (old) intraocular foreign body, nonmagnetic, bilateral -H44709 Unspecified retained (old) intraocular foreign body, nonmagnetic, unspecified eye -H44711 Retained (nonmagnetic) (old) foreign body in anterior chamber, right eye -H44712 Retained (nonmagnetic) (old) foreign body in anterior chamber, left eye -H44713 Retained (nonmagnetic) (old) foreign body in anterior chamber, bilateral -H44719 Retained (nonmagnetic) (old) foreign body in anterior chamber, unspecified eye -H44721 Retained (nonmagnetic) (old) foreign body in iris or ciliary body, right eye -H44722 Retained (nonmagnetic) (old) foreign body in iris or ciliary body, left eye -H44723 Retained (nonmagnetic) (old) foreign body in iris or ciliary body, bilateral -H44729 Retained (nonmagnetic) (old) foreign body in iris or ciliary body, unspecified eye -H44731 Retained (nonmagnetic) (old) foreign body in lens, right eye -H44732 Retained (nonmagnetic) (old) foreign body in lens, left eye -H44733 Retained (nonmagnetic) (old) foreign body in lens, bilateral -H44739 Retained (nonmagnetic) (old) foreign body in lens, unspecified eye -H44741 Retained (nonmagnetic) (old) foreign body in posterior wall of globe, right eye -H44742 Retained (nonmagnetic) (old) foreign body in posterior wall of globe, left eye -H44743 Retained (nonmagnetic) (old) foreign body in posterior wall of globe, bilateral -H44749 Retained (nonmagnetic) (old) foreign body in posterior wall of globe, unspecified eye -H44751 Retained (nonmagnetic) (old) foreign body in vitreous body, right eye -H44752 Retained (nonmagnetic) (old) foreign body in vitreous body, left eye -H44753 Retained (nonmagnetic) (old) foreign body in vitreous body, bilateral -H44759 Retained (nonmagnetic) (old) foreign body in vitreous body, unspecified eye -H44791 Retained (old) intraocular foreign body, nonmagnetic, in other or multiple sites, right eye -H44792 Retained (old) intraocular foreign body, nonmagnetic, in other or multiple sites, left eye -H44793 Retained (old) intraocular foreign body, nonmagnetic, in other or multiple sites, bilateral -H44799 Retained (old) intraocular foreign body, nonmagnetic, in other or multiple sites, unspecified eye -H44811 Hemophthalmos, right eye -H44812 Hemophthalmos, left eye -H44813 Hemophthalmos, bilateral -H44819 Hemophthalmos, unspecified eye -H44821 Luxation of globe, right eye -H44822 Luxation of globe, left eye -H44823 Luxation of globe, bilateral -H44829 Luxation of globe, unspecified eye -H4489 Other disorders of globe -H449 Unspecified disorder of globe -H4600 Optic papillitis, unspecified eye -H4601 Optic papillitis, right eye -H4602 Optic papillitis, left eye -H4603 Optic papillitis, bilateral -H4610 Retrobulbar neuritis, unspecified eye -H4611 Retrobulbar neuritis, right eye -H4612 Retrobulbar neuritis, left eye -H4613 Retrobulbar neuritis, bilateral -H462 Nutritional optic neuropathy -H463 Toxic optic neuropathy -H468 Other optic neuritis -H469 Unspecified optic neuritis -H47011 Ischemic optic neuropathy, right eye -H47012 Ischemic optic neuropathy, left eye -H47013 Ischemic optic neuropathy, bilateral -H47019 Ischemic optic neuropathy, unspecified eye -H47021 Hemorrhage in optic nerve sheath, right eye -H47022 Hemorrhage in optic nerve sheath, left eye -H47023 Hemorrhage in optic nerve sheath, bilateral -H47029 Hemorrhage in optic nerve sheath, unspecified eye -H47031 Optic nerve hypoplasia, right eye -H47032 Optic nerve hypoplasia, left eye -H47033 Optic nerve hypoplasia, bilateral -H47039 Optic nerve hypoplasia, unspecified eye -H47091 Other disorders of optic nerve, not elsewhere classified, right eye -H47092 Other disorders of optic nerve, not elsewhere classified, left eye -H47093 Other disorders of optic nerve, not elsewhere classified, bilateral -H47099 Other disorders of optic nerve, not elsewhere classified, unspecified eye -H4710 Unspecified papilledema -H4711 Papilledema associated with increased intracranial pressure -H4712 Papilledema associated with decreased ocular pressure -H4713 Papilledema associated with retinal disorder -H47141 Foster-Kennedy syndrome, right eye -H47142 Foster-Kennedy syndrome, left eye -H47143 Foster-Kennedy syndrome, bilateral -H47149 Foster-Kennedy syndrome, unspecified eye -H4720 Unspecified optic atrophy -H47211 Primary optic atrophy, right eye -H47212 Primary optic atrophy, left eye -H47213 Primary optic atrophy, bilateral -H47219 Primary optic atrophy, unspecified eye -H4722 Hereditary optic atrophy -H47231 Glaucomatous optic atrophy, right eye -H47232 Glaucomatous optic atrophy, left eye -H47233 Glaucomatous optic atrophy, bilateral -H47239 Glaucomatous optic atrophy, unspecified eye -H47291 Other optic atrophy, right eye -H47292 Other optic atrophy, left eye -H47293 Other optic atrophy, bilateral -H47299 Other optic atrophy, unspecified eye -H47311 Coloboma of optic disc, right eye -H47312 Coloboma of optic disc, left eye -H47313 Coloboma of optic disc, bilateral -H47319 Coloboma of optic disc, unspecified eye -H47321 Drusen of optic disc, right eye -H47322 Drusen of optic disc, left eye -H47323 Drusen of optic disc, bilateral -H47329 Drusen of optic disc, unspecified eye -H47331 Pseudopapilledema of optic disc, right eye -H47332 Pseudopapilledema of optic disc, left eye -H47333 Pseudopapilledema of optic disc, bilateral -H47339 Pseudopapilledema of optic disc, unspecified eye -H47391 Other disorders of optic disc, right eye -H47392 Other disorders of optic disc, left eye -H47393 Other disorders of optic disc, bilateral -H47399 Other disorders of optic disc, unspecified eye -H4741 Disorders of optic chiasm in (due to) inflammatory disorders -H4742 Disorders of optic chiasm in (due to) neoplasm -H4743 Disorders of optic chiasm in (due to) vascular disorders -H4749 Disorders of optic chiasm in (due to) other disorders -H47511 Disorders of visual pathways in (due to) inflammatory disorders, right side -H47512 Disorders of visual pathways in (due to) inflammatory disorders, left side -H47519 Disorders of visual pathways in (due to) inflammatory disorders, unspecified side -H47521 Disorders of visual pathways in (due to) neoplasm, right side -H47522 Disorders of visual pathways in (due to) neoplasm, left side -H47529 Disorders of visual pathways in (due to) neoplasm, unspecified side -H47531 Disorders of visual pathways in (due to) vascular disorders, right side -H47532 Disorders of visual pathways in (due to) vascular disorders, left side -H47539 Disorders of visual pathways in (due to) vascular disorders, unspecified side -H47611 Cortical blindness, right side of brain -H47612 Cortical blindness, left side of brain -H47619 Cortical blindness, unspecified side of brain -H47621 Disorders of visual cortex in (due to) inflammatory disorders, right side of brain -H47622 Disorders of visual cortex in (due to) inflammatory disorders, left side of brain -H47629 Disorders of visual cortex in (due to) inflammatory disorders, unspecified side of brain -H47631 Disorders of visual cortex in (due to) neoplasm, right side of brain -H47632 Disorders of visual cortex in (due to) neoplasm, left side of brain -H47639 Disorders of visual cortex in (due to) neoplasm, unspecified side of brain -H47641 Disorders of visual cortex in (due to) vascular disorders, right side of brain -H47642 Disorders of visual cortex in (due to) vascular disorders, left side of brain -H47649 Disorders of visual cortex in (due to) vascular disorders, unspecified side of brain -H479 Unspecified disorder of visual pathways -H4900 Third [oculomotor] nerve palsy, unspecified eye -H4901 Third [oculomotor] nerve palsy, right eye -H4902 Third [oculomotor] nerve palsy, left eye -H4903 Third [oculomotor] nerve palsy, bilateral -H4910 Fourth [trochlear] nerve palsy, unspecified eye -H4911 Fourth [trochlear] nerve palsy, right eye -H4912 Fourth [trochlear] nerve palsy, left eye -H4913 Fourth [trochlear] nerve palsy, bilateral -H4920 Sixth [abducent] nerve palsy, unspecified eye -H4921 Sixth [abducent] nerve palsy, right eye -H4922 Sixth [abducent] nerve palsy, left eye -H4923 Sixth [abducent] nerve palsy, bilateral -H4930 Total (external) ophthalmoplegia, unspecified eye -H4931 Total (external) ophthalmoplegia, right eye -H4932 Total (external) ophthalmoplegia, left eye -H4933 Total (external) ophthalmoplegia, bilateral -H4940 Progressive external ophthalmoplegia, unspecified eye -H4941 Progressive external ophthalmoplegia, right eye -H4942 Progressive external ophthalmoplegia, left eye -H4943 Progressive external ophthalmoplegia, bilateral -H49811 Kearns-Sayre syndrome, right eye -H49812 Kearns-Sayre syndrome, left eye -H49813 Kearns-Sayre syndrome, bilateral -H49819 Kearns-Sayre syndrome, unspecified eye -H49881 Other paralytic strabismus, right eye -H49882 Other paralytic strabismus, left eye -H49883 Other paralytic strabismus, bilateral -H49889 Other paralytic strabismus, unspecified eye -H499 Unspecified paralytic strabismus -H5000 Unspecified esotropia -H50011 Monocular esotropia, right eye -H50012 Monocular esotropia, left eye -H50021 Monocular esotropia with A pattern, right eye -H50022 Monocular esotropia with A pattern, left eye -H50031 Monocular esotropia with V pattern, right eye -H50032 Monocular esotropia with V pattern, left eye -H50041 Monocular esotropia with other noncomitancies, right eye -H50042 Monocular esotropia with other noncomitancies, left eye -H5005 Alternating esotropia -H5006 Alternating esotropia with A pattern -H5007 Alternating esotropia with V pattern -H5008 Alternating esotropia with other noncomitancies -H5010 Unspecified exotropia -H50111 Monocular exotropia, right eye -H50112 Monocular exotropia, left eye -H50121 Monocular exotropia with A pattern, right eye -H50122 Monocular exotropia with A pattern, left eye -H50131 Monocular exotropia with V pattern, right eye -H50132 Monocular exotropia with V pattern, left eye -H50141 Monocular exotropia with other noncomitancies, right eye -H50142 Monocular exotropia with other noncomitancies, left eye -H5015 Alternating exotropia -H5016 Alternating exotropia with A pattern -H5017 Alternating exotropia with V pattern -H5018 Alternating exotropia with other noncomitancies -H5021 Vertical strabismus, right eye -H5022 Vertical strabismus, left eye -H5030 Unspecified intermittent heterotropia -H50311 Intermittent monocular esotropia, right eye -H50312 Intermittent monocular esotropia, left eye -H5032 Intermittent alternating esotropia -H50331 Intermittent monocular exotropia, right eye -H50332 Intermittent monocular exotropia, left eye -H5034 Intermittent alternating exotropia -H5040 Unspecified heterotropia -H50411 Cyclotropia, right eye -H50412 Cyclotropia, left eye -H5042 Monofixation syndrome -H5043 Accommodative component in esotropia -H5050 Unspecified heterophoria -H5051 Esophoria -H5052 Exophoria -H5053 Vertical heterophoria -H5054 Cyclophoria -H5055 Alternating heterophoria -H5060 Mechanical strabismus, unspecified -H50611 Brown's sheath syndrome, right eye -H50612 Brown's sheath syndrome, left eye -H5069 Other mechanical strabismus -H50811 Duane's syndrome, right eye -H50812 Duane's syndrome, left eye -H5089 Other specified strabismus -H509 Unspecified strabismus -H510 Palsy (spasm) of conjugate gaze -H5111 Convergence insufficiency -H5112 Convergence excess -H5120 Internuclear ophthalmoplegia, unspecified eye -H5121 Internuclear ophthalmoplegia, right eye -H5122 Internuclear ophthalmoplegia, left eye -H5123 Internuclear ophthalmoplegia, bilateral -H518 Other specified disorders of binocular movement -H519 Unspecified disorder of binocular movement -H5200 Hypermetropia, unspecified eye -H5201 Hypermetropia, right eye -H5202 Hypermetropia, left eye -H5203 Hypermetropia, bilateral -H5210 Myopia, unspecified eye -H5211 Myopia, right eye -H5212 Myopia, left eye -H5213 Myopia, bilateral -H52201 Unspecified astigmatism, right eye -H52202 Unspecified astigmatism, left eye -H52203 Unspecified astigmatism, bilateral -H52209 Unspecified astigmatism, unspecified eye -H52211 Irregular astigmatism, right eye -H52212 Irregular astigmatism, left eye -H52213 Irregular astigmatism, bilateral -H52219 Irregular astigmatism, unspecified eye -H52221 Regular astigmatism, right eye -H52222 Regular astigmatism, left eye -H52223 Regular astigmatism, bilateral -H52229 Regular astigmatism, unspecified eye -H5231 Anisometropia -H5232 Aniseikonia -H524 Presbyopia -H52511 Internal ophthalmoplegia (complete) (total), right eye -H52512 Internal ophthalmoplegia (complete) (total), left eye -H52513 Internal ophthalmoplegia (complete) (total), bilateral -H52519 Internal ophthalmoplegia (complete) (total), unspecified eye -H52521 Paresis of accommodation, right eye -H52522 Paresis of accommodation, left eye -H52523 Paresis of accommodation, bilateral -H52529 Paresis of accommodation, unspecified eye -H52531 Spasm of accommodation, right eye -H52532 Spasm of accommodation, left eye -H52533 Spasm of accommodation, bilateral -H52539 Spasm of accommodation, unspecified eye -H526 Other disorders of refraction -H527 Unspecified disorder of refraction -H53001 Unspecified amblyopia, right eye -H53002 Unspecified amblyopia, left eye -H53003 Unspecified amblyopia, bilateral -H53009 Unspecified amblyopia, unspecified eye -H53011 Deprivation amblyopia, right eye -H53012 Deprivation amblyopia, left eye -H53013 Deprivation amblyopia, bilateral -H53019 Deprivation amblyopia, unspecified eye -H53021 Refractive amblyopia, right eye -H53022 Refractive amblyopia, left eye -H53023 Refractive amblyopia, bilateral -H53029 Refractive amblyopia, unspecified eye -H53031 Strabismic amblyopia, right eye -H53032 Strabismic amblyopia, left eye -H53033 Strabismic amblyopia, bilateral -H53039 Strabismic amblyopia, unspecified eye -H53041 Amblyopia suspect, right eye -H53042 Amblyopia suspect, left eye -H53043 Amblyopia suspect, bilateral -H53049 Amblyopia suspect, unspecified eye -H5310 Unspecified subjective visual disturbances -H5311 Day blindness -H53121 Transient visual loss, right eye -H53122 Transient visual loss, left eye -H53123 Transient visual loss, bilateral -H53129 Transient visual loss, unspecified eye -H53131 Sudden visual loss, right eye -H53132 Sudden visual loss, left eye -H53133 Sudden visual loss, bilateral -H53139 Sudden visual loss, unspecified eye -H53141 Visual discomfort, right eye -H53142 Visual discomfort, left eye -H53143 Visual discomfort, bilateral -H53149 Visual discomfort, unspecified -H5315 Visual distortions of shape and size -H5316 Psychophysical visual disturbances -H5319 Other subjective visual disturbances -H532 Diplopia -H5330 Unspecified disorder of binocular vision -H5331 Abnormal retinal correspondence -H5332 Fusion with defective stereopsis -H5333 Simultaneous visual perception without fusion -H5334 Suppression of binocular vision -H5340 Unspecified visual field defects -H53411 Scotoma involving central area, right eye -H53412 Scotoma involving central area, left eye -H53413 Scotoma involving central area, bilateral -H53419 Scotoma involving central area, unspecified eye -H53421 Scotoma of blind spot area, right eye -H53422 Scotoma of blind spot area, left eye -H53423 Scotoma of blind spot area, bilateral -H53429 Scotoma of blind spot area, unspecified eye -H53431 Sector or arcuate defects, right eye -H53432 Sector or arcuate defects, left eye -H53433 Sector or arcuate defects, bilateral -H53439 Sector or arcuate defects, unspecified eye -H53451 Other localized visual field defect, right eye -H53452 Other localized visual field defect, left eye -H53453 Other localized visual field defect, bilateral -H53459 Other localized visual field defect, unspecified eye -H53461 Homonymous bilateral field defects, right side -H53462 Homonymous bilateral field defects, left side -H53469 Homonymous bilateral field defects, unspecified side -H5347 Heteronymous bilateral field defects -H53481 Generalized contraction of visual field, right eye -H53482 Generalized contraction of visual field, left eye -H53483 Generalized contraction of visual field, bilateral -H53489 Generalized contraction of visual field, unspecified eye -H5350 Unspecified color vision deficiencies -H5351 Achromatopsia -H5352 Acquired color vision deficiency -H5353 Deuteranomaly -H5354 Protanomaly -H5355 Tritanomaly -H5359 Other color vision deficiencies -H5360 Unspecified night blindness -H5361 Abnormal dark adaptation curve -H5362 Acquired night blindness -H5363 Congenital night blindness -H5369 Other night blindness -H5371 Glare sensitivity -H5372 Impaired contrast sensitivity -H538 Other visual disturbances -H539 Unspecified visual disturbance -H540 Blindness, both eyes -H5410 Blindness, one eye, low vision other eye, unspecified eyes -H5411 Blindness, right eye, low vision left eye -H5412 Blindness, left eye, low vision right eye -H542 Low vision, both eyes -H543 Unqualified visual loss, both eyes -H5440 Blindness, one eye, unspecified eye -H5441 Blindness, right eye, normal vision left eye -H5442 Blindness, left eye, normal vision right eye -H5450 Low vision, one eye, unspecified eye -H5451 Low vision, right eye, normal vision left eye -H5452 Low vision, left eye, normal vision right eye -H5460 Unqualified visual loss, one eye, unspecified -H5461 Unqualified visual loss, right eye, normal vision left eye -H5462 Unqualified visual loss, left eye, normal vision right eye -H547 Unspecified visual loss -H548 Legal blindness, as defined in USA -H5500 Unspecified nystagmus -H5501 Congenital nystagmus -H5502 Latent nystagmus -H5503 Visual deprivation nystagmus -H5504 Dissociated nystagmus -H5509 Other forms of nystagmus -H5581 Saccadic eye movements -H5589 Other irregular eye movements -H5700 Unspecified anomaly of pupillary function -H5701 Argyll Robertson pupil, atypical -H5702 Anisocoria -H5703 Miosis -H5704 Mydriasis -H57051 Tonic pupil, right eye -H57052 Tonic pupil, left eye -H57053 Tonic pupil, bilateral -H57059 Tonic pupil, unspecified eye -H5709 Other anomalies of pupillary function -H5710 Ocular pain, unspecified eye -H5711 Ocular pain, right eye -H5712 Ocular pain, left eye -H5713 Ocular pain, bilateral -H578 Other specified disorders of eye and adnexa -H579 Unspecified disorder of eye and adnexa -H59011 Keratopathy (bullous aphakic) following cataract surgery, right eye -H59012 Keratopathy (bullous aphakic) following cataract surgery, left eye -H59013 Keratopathy (bullous aphakic) following cataract surgery, bilateral -H59019 Keratopathy (bullous aphakic) following cataract surgery, unspecified eye -H59021 Cataract (lens) fragments in eye following cataract surgery, right eye -H59022 Cataract (lens) fragments in eye following cataract surgery, left eye -H59023 Cataract (lens) fragments in eye following cataract surgery, bilateral -H59029 Cataract (lens) fragments in eye following cataract surgery, unspecified eye -H59031 Cystoid macular edema following cataract surgery, right eye -H59032 Cystoid macular edema following cataract surgery, left eye -H59033 Cystoid macular edema following cataract surgery, bilateral -H59039 Cystoid macular edema following cataract surgery, unspecified eye -H59091 Other disorders of the right eye following cataract surgery -H59092 Other disorders of the left eye following cataract surgery -H59093 Other disorders of the eye following cataract surgery, bilateral -H59099 Other disorders of unspecified eye following cataract surgery -H59111 Intraoperative hemorrhage and hematoma of right eye and adnexa complicating an ophthalmic procedure -H59112 Intraoperative hemorrhage and hematoma of left eye and adnexa complicating an ophthalmic procedure -H59113 Intraoperative hemorrhage and hematoma of eye and adnexa complicating an ophthalmic procedure, bilateral -H59119 Intraoperative hemorrhage and hematoma of unspecified eye and adnexa complicating an ophthalmic procedure -H59121 Intraoperative hemorrhage and hematoma of right eye and adnexa complicating other procedure -H59122 Intraoperative hemorrhage and hematoma of left eye and adnexa complicating other procedure -H59123 Intraoperative hemorrhage and hematoma of eye and adnexa complicating other procedure, bilateral -H59129 Intraoperative hemorrhage and hematoma of unspecified eye and adnexa complicating other procedure -H59211 Accidental puncture and laceration of right eye and adnexa during an ophthalmic procedure -H59212 Accidental puncture and laceration of left eye and adnexa during an ophthalmic procedure -H59213 Accidental puncture and laceration of eye and adnexa during an ophthalmic procedure, bilateral -H59219 Accidental puncture and laceration of unspecified eye and adnexa during an ophthalmic procedure -H59221 Accidental puncture and laceration of right eye and adnexa during other procedure -H59222 Accidental puncture and laceration of left eye and adnexa during other procedure -H59223 Accidental puncture and laceration of eye and adnexa during other procedure, bilateral -H59229 Accidental puncture and laceration of unspecified eye and adnexa during other procedure -H59311 Postprocedural hemorrhage of right eye and adnexa following an ophthalmic procedure -H59312 Postprocedural hemorrhage of left eye and adnexa following an ophthalmic procedure -H59313 Postprocedural hemorrhage of eye and adnexa following an ophthalmic procedure, bilateral -H59319 Postprocedural hemorrhage of unspecified eye and adnexa following an ophthalmic procedure -H59321 Postprocedural hemorrhage of right eye and adnexa following other procedure -H59322 Postprocedural hemorrhage of left eye and adnexa following other procedure -H59323 Postprocedural hemorrhage of eye and adnexa following other procedure, bilateral -H59329 Postprocedural hemorrhage of unspecified eye and adnexa following other procedure -H59331 Postprocedural hematoma of right eye and adnexa following an ophthalmic procedure -H59332 Postprocedural hematoma of left eye and adnexa following an ophthalmic procedure -H59333 Postprocedural hematoma of eye and adnexa following an ophthalmic procedure, bilateral -H59339 Postprocedural hematoma of unspecified eye and adnexa following an ophthalmic procedure -H59341 Postprocedural hematoma of right eye and adnexa following other procedure -H59342 Postprocedural hematoma of left eye and adnexa following other procedure -H59343 Postprocedural hematoma of eye and adnexa following other procedure, bilateral -H59349 Postprocedural hematoma of unspecified eye and adnexa following other procedure -H59351 Postprocedural seroma of right eye and adnexa following an ophthalmic procedure -H59352 Postprocedural seroma of left eye and adnexa following an ophthalmic procedure -H59353 Postprocedural seroma of eye and adnexa following an ophthalmic procedure, bilateral -H59359 Postprocedural seroma of unspecified eye and adnexa following an ophthalmic procedure -H59361 Postprocedural seroma of right eye and adnexa following other procedure -H59362 Postprocedural seroma of left eye and adnexa following other procedure -H59363 Postprocedural seroma of eye and adnexa following other procedure, bilateral -H59369 Postprocedural seroma of unspecified eye and adnexa following other procedure -H5940 Inflammation (infection) of postprocedural bleb, unspecified -H5941 Inflammation (infection) of postprocedural bleb, stage 1 -H5942 Inflammation (infection) of postprocedural bleb, stage 2 -H5943 Inflammation (infection) of postprocedural bleb, stage 3 -H59811 Chorioretinal scars after surgery for detachment, right eye -H59812 Chorioretinal scars after surgery for detachment, left eye -H59813 Chorioretinal scars after surgery for detachment, bilateral -H59819 Chorioretinal scars after surgery for detachment, unspecified eye -H5988 Other intraoperative complications of eye and adnexa, not elsewhere classified -H5989 Other postprocedural complications and disorders of eye and adnexa, not elsewhere classified -H6000 Abscess of external ear, unspecified ear -H6001 Abscess of right external ear -H6002 Abscess of left external ear -H6003 Abscess of external ear, bilateral -H6010 Cellulitis of external ear, unspecified ear -H6011 Cellulitis of right external ear -H6012 Cellulitis of left external ear -H6013 Cellulitis of external ear, bilateral -H6020 Malignant otitis externa, unspecified ear -H6021 Malignant otitis externa, right ear -H6022 Malignant otitis externa, left ear -H6023 Malignant otitis externa, bilateral -H60311 Diffuse otitis externa, right ear -H60312 Diffuse otitis externa, left ear -H60313 Diffuse otitis externa, bilateral -H60319 Diffuse otitis externa, unspecified ear -H60321 Hemorrhagic otitis externa, right ear -H60322 Hemorrhagic otitis externa, left ear -H60323 Hemorrhagic otitis externa, bilateral -H60329 Hemorrhagic otitis externa, unspecified ear -H60331 Swimmer's ear, right ear -H60332 Swimmer's ear, left ear -H60333 Swimmer's ear, bilateral -H60339 Swimmer's ear, unspecified ear -H60391 Other infective otitis externa, right ear -H60392 Other infective otitis externa, left ear -H60393 Other infective otitis externa, bilateral -H60399 Other infective otitis externa, unspecified ear -H6040 Cholesteatoma of external ear, unspecified ear -H6041 Cholesteatoma of right external ear -H6042 Cholesteatoma of left external ear -H6043 Cholesteatoma of external ear, bilateral -H60501 Unspecified acute noninfective otitis externa, right ear -H60502 Unspecified acute noninfective otitis externa, left ear -H60503 Unspecified acute noninfective otitis externa, bilateral -H60509 Unspecified acute noninfective otitis externa, unspecified ear -H60511 Acute actinic otitis externa, right ear -H60512 Acute actinic otitis externa, left ear -H60513 Acute actinic otitis externa, bilateral -H60519 Acute actinic otitis externa, unspecified ear -H60521 Acute chemical otitis externa, right ear -H60522 Acute chemical otitis externa, left ear -H60523 Acute chemical otitis externa, bilateral -H60529 Acute chemical otitis externa, unspecified ear -H60531 Acute contact otitis externa, right ear -H60532 Acute contact otitis externa, left ear -H60533 Acute contact otitis externa, bilateral -H60539 Acute contact otitis externa, unspecified ear -H60541 Acute eczematoid otitis externa, right ear -H60542 Acute eczematoid otitis externa, left ear -H60543 Acute eczematoid otitis externa, bilateral -H60549 Acute eczematoid otitis externa, unspecified ear -H60551 Acute reactive otitis externa, right ear -H60552 Acute reactive otitis externa, left ear -H60553 Acute reactive otitis externa, bilateral -H60559 Acute reactive otitis externa, unspecified ear -H60591 Other noninfective acute otitis externa, right ear -H60592 Other noninfective acute otitis externa, left ear -H60593 Other noninfective acute otitis externa, bilateral -H60599 Other noninfective acute otitis externa, unspecified ear -H6060 Unspecified chronic otitis externa, unspecified ear -H6061 Unspecified chronic otitis externa, right ear -H6062 Unspecified chronic otitis externa, left ear -H6063 Unspecified chronic otitis externa, bilateral -H608X1 Other otitis externa, right ear -H608X2 Other otitis externa, left ear -H608X3 Other otitis externa, bilateral -H608X9 Other otitis externa, unspecified ear -H6090 Unspecified otitis externa, unspecified ear -H6091 Unspecified otitis externa, right ear -H6092 Unspecified otitis externa, left ear -H6093 Unspecified otitis externa, bilateral -H61001 Unspecified perichondritis of right external ear -H61002 Unspecified perichondritis of left external ear -H61003 Unspecified perichondritis of external ear, bilateral -H61009 Unspecified perichondritis of external ear, unspecified ear -H61011 Acute perichondritis of right external ear -H61012 Acute perichondritis of left external ear -H61013 Acute perichondritis of external ear, bilateral -H61019 Acute perichondritis of external ear, unspecified ear -H61021 Chronic perichondritis of right external ear -H61022 Chronic perichondritis of left external ear -H61023 Chronic perichondritis of external ear, bilateral -H61029 Chronic perichondritis of external ear, unspecified ear -H61031 Chondritis of right external ear -H61032 Chondritis of left external ear -H61033 Chondritis of external ear, bilateral -H61039 Chondritis of external ear, unspecified ear -H61101 Unspecified noninfective disorders of pinna, right ear -H61102 Unspecified noninfective disorders of pinna, left ear -H61103 Unspecified noninfective disorders of pinna, bilateral -H61109 Unspecified noninfective disorders of pinna, unspecified ear -H61111 Acquired deformity of pinna, right ear -H61112 Acquired deformity of pinna, left ear -H61113 Acquired deformity of pinna, bilateral -H61119 Acquired deformity of pinna, unspecified ear -H61121 Hematoma of pinna, right ear -H61122 Hematoma of pinna, left ear -H61123 Hematoma of pinna, bilateral -H61129 Hematoma of pinna, unspecified ear -H61191 Noninfective disorders of pinna, right ear -H61192 Noninfective disorders of pinna, left ear -H61193 Noninfective disorders of pinna, bilateral -H61199 Noninfective disorders of pinna, unspecified ear -H6120 Impacted cerumen, unspecified ear -H6121 Impacted cerumen, right ear -H6122 Impacted cerumen, left ear -H6123 Impacted cerumen, bilateral -H61301 Acquired stenosis of right external ear canal, unspecified -H61302 Acquired stenosis of left external ear canal, unspecified -H61303 Acquired stenosis of external ear canal, unspecified, bilateral -H61309 Acquired stenosis of external ear canal, unspecified, unspecified ear -H61311 Acquired stenosis of right external ear canal secondary to trauma -H61312 Acquired stenosis of left external ear canal secondary to trauma -H61313 Acquired stenosis of external ear canal secondary to trauma, bilateral -H61319 Acquired stenosis of external ear canal secondary to trauma, unspecified ear -H61321 Acquired stenosis of right external ear canal secondary to inflammation and infection -H61322 Acquired stenosis of left external ear canal secondary to inflammation and infection -H61323 Acquired stenosis of external ear canal secondary to inflammation and infection, bilateral -H61329 Acquired stenosis of external ear canal secondary to inflammation and infection, unspecified ear -H61391 Other acquired stenosis of right external ear canal -H61392 Other acquired stenosis of left external ear canal -H61393 Other acquired stenosis of external ear canal, bilateral -H61399 Other acquired stenosis of external ear canal, unspecified ear -H61811 Exostosis of right external canal -H61812 Exostosis of left external canal -H61813 Exostosis of external canal, bilateral -H61819 Exostosis of external canal, unspecified ear -H61891 Other specified disorders of right external ear -H61892 Other specified disorders of left external ear -H61893 Other specified disorders of external ear, bilateral -H61899 Other specified disorders of external ear, unspecified ear -H6190 Disorder of external ear, unspecified, unspecified ear -H6191 Disorder of right external ear, unspecified -H6192 Disorder of left external ear, unspecified -H6193 Disorder of external ear, unspecified, bilateral -H6240 Otitis externa in other diseases classified elsewhere, unspecified ear -H6241 Otitis externa in other diseases classified elsewhere, right ear -H6242 Otitis externa in other diseases classified elsewhere, left ear -H6243 Otitis externa in other diseases classified elsewhere, bilateral -H628X1 Other disorders of right external ear in diseases classified elsewhere -H628X2 Other disorders of left external ear in diseases classified elsewhere -H628X3 Other disorders of external ear in diseases classified elsewhere, bilateral -H628X9 Other disorders of external ear in diseases classified elsewhere, unspecified ear -H6500 Acute serous otitis media, unspecified ear -H6501 Acute serous otitis media, right ear -H6502 Acute serous otitis media, left ear -H6503 Acute serous otitis media, bilateral -H6504 Acute serous otitis media, recurrent, right ear -H6505 Acute serous otitis media, recurrent, left ear -H6506 Acute serous otitis media, recurrent, bilateral -H6507 Acute serous otitis media, recurrent, unspecified ear -H65111 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), right ear -H65112 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), left ear -H65113 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), bilateral -H65114 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), recurrent, right ear -H65115 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), recurrent, left ear -H65116 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), recurrent, bilateral -H65117 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), recurrent, unspecified ear -H65119 Acute and subacute allergic otitis media (mucoid) (sanguinous) (serous), unspecified ear -H65191 Other acute nonsuppurative otitis media, right ear -H65192 Other acute nonsuppurative otitis media, left ear -H65193 Other acute nonsuppurative otitis media, bilateral -H65194 Other acute nonsuppurative otitis media, recurrent, right ear -H65195 Other acute nonsuppurative otitis media, recurrent, left ear -H65196 Other acute nonsuppurative otitis media, recurrent, bilateral -H65197 Other acute nonsuppurative otitis media recurrent, unspecified ear -H65199 Other acute nonsuppurative otitis media, unspecified ear -H6520 Chronic serous otitis media, unspecified ear -H6521 Chronic serous otitis media, right ear -H6522 Chronic serous otitis media, left ear -H6523 Chronic serous otitis media, bilateral -H6530 Chronic mucoid otitis media, unspecified ear -H6531 Chronic mucoid otitis media, right ear -H6532 Chronic mucoid otitis media, left ear -H6533 Chronic mucoid otitis media, bilateral -H65411 Chronic allergic otitis media, right ear -H65412 Chronic allergic otitis media, left ear -H65413 Chronic allergic otitis media, bilateral -H65419 Chronic allergic otitis media, unspecified ear -H65491 Other chronic nonsuppurative otitis media, right ear -H65492 Other chronic nonsuppurative otitis media, left ear -H65493 Other chronic nonsuppurative otitis media, bilateral -H65499 Other chronic nonsuppurative otitis media, unspecified ear -H6590 Unspecified nonsuppurative otitis media, unspecified ear -H6591 Unspecified nonsuppurative otitis media, right ear -H6592 Unspecified nonsuppurative otitis media, left ear -H6593 Unspecified nonsuppurative otitis media, bilateral -H66001 Acute suppurative otitis media without spontaneous rupture of ear drum, right ear -H66002 Acute suppurative otitis media without spontaneous rupture of ear drum, left ear -H66003 Acute suppurative otitis media without spontaneous rupture of ear drum, bilateral -H66004 Acute suppurative otitis media without spontaneous rupture of ear drum, recurrent, right ear -H66005 Acute suppurative otitis media without spontaneous rupture of ear drum, recurrent, left ear -H66006 Acute suppurative otitis media without spontaneous rupture of ear drum, recurrent, bilateral -H66007 Acute suppurative otitis media without spontaneous rupture of ear drum, recurrent, unspecified ear -H66009 Acute suppurative otitis media without spontaneous rupture of ear drum, unspecified ear -H66011 Acute suppurative otitis media with spontaneous rupture of ear drum, right ear -H66012 Acute suppurative otitis media with spontaneous rupture of ear drum, left ear -H66013 Acute suppurative otitis media with spontaneous rupture of ear drum, bilateral -H66014 Acute suppurative otitis media with spontaneous rupture of ear drum, recurrent, right ear -H66015 Acute suppurative otitis media with spontaneous rupture of ear drum, recurrent, left ear -H66016 Acute suppurative otitis media with spontaneous rupture of ear drum, recurrent, bilateral -H66017 Acute suppurative otitis media with spontaneous rupture of ear drum, recurrent, unspecified ear -H66019 Acute suppurative otitis media with spontaneous rupture of ear drum, unspecified ear -H6610 Chronic tubotympanic suppurative otitis media, unspecified -H6611 Chronic tubotympanic suppurative otitis media, right ear -H6612 Chronic tubotympanic suppurative otitis media, left ear -H6613 Chronic tubotympanic suppurative otitis media, bilateral -H6620 Chronic atticoantral suppurative otitis media, unspecified ear -H6621 Chronic atticoantral suppurative otitis media, right ear -H6622 Chronic atticoantral suppurative otitis media, left ear -H6623 Chronic atticoantral suppurative otitis media, bilateral -H663X1 Other chronic suppurative otitis media, right ear -H663X2 Other chronic suppurative otitis media, left ear -H663X3 Other chronic suppurative otitis media, bilateral -H663X9 Other chronic suppurative otitis media, unspecified ear -H6640 Suppurative otitis media, unspecified, unspecified ear -H6641 Suppurative otitis media, unspecified, right ear -H6642 Suppurative otitis media, unspecified, left ear -H6643 Suppurative otitis media, unspecified, bilateral -H6690 Otitis media, unspecified, unspecified ear -H6691 Otitis media, unspecified, right ear -H6692 Otitis media, unspecified, left ear -H6693 Otitis media, unspecified, bilateral -H671 Otitis media in diseases classified elsewhere, right ear -H672 Otitis media in diseases classified elsewhere, left ear -H673 Otitis media in diseases classified elsewhere, bilateral -H679 Otitis media in diseases classified elsewhere, unspecified ear -H68001 Unspecified Eustachian salpingitis, right ear -H68002 Unspecified Eustachian salpingitis, left ear -H68003 Unspecified Eustachian salpingitis, bilateral -H68009 Unspecified Eustachian salpingitis, unspecified ear -H68011 Acute Eustachian salpingitis, right ear -H68012 Acute Eustachian salpingitis, left ear -H68013 Acute Eustachian salpingitis, bilateral -H68019 Acute Eustachian salpingitis, unspecified ear -H68021 Chronic Eustachian salpingitis, right ear -H68022 Chronic Eustachian salpingitis, left ear -H68023 Chronic Eustachian salpingitis, bilateral -H68029 Chronic Eustachian salpingitis, unspecified ear -H68101 Unspecified obstruction of Eustachian tube, right ear -H68102 Unspecified obstruction of Eustachian tube, left ear -H68103 Unspecified obstruction of Eustachian tube, bilateral -H68109 Unspecified obstruction of Eustachian tube, unspecified ear -H68111 Osseous obstruction of Eustachian tube, right ear -H68112 Osseous obstruction of Eustachian tube, left ear -H68113 Osseous obstruction of Eustachian tube, bilateral -H68119 Osseous obstruction of Eustachian tube, unspecified ear -H68121 Intrinsic cartilagenous obstruction of Eustachian tube, right ear -H68122 Intrinsic cartilagenous obstruction of Eustachian tube, left ear -H68123 Intrinsic cartilagenous obstruction of Eustachian tube, bilateral -H68129 Intrinsic cartilagenous obstruction of Eustachian tube, unspecified ear -H68131 Extrinsic cartilagenous obstruction of Eustachian tube, right ear -H68132 Extrinsic cartilagenous obstruction of Eustachian tube, left ear -H68133 Extrinsic cartilagenous obstruction of Eustachian tube, bilateral -H68139 Extrinsic cartilagenous obstruction of Eustachian tube, unspecified ear -H6900 Patulous Eustachian tube, unspecified ear -H6901 Patulous Eustachian tube, right ear -H6902 Patulous Eustachian tube, left ear -H6903 Patulous Eustachian tube, bilateral -H6980 Other specified disorders of Eustachian tube, unspecified ear -H6981 Other specified disorders of Eustachian tube, right ear -H6982 Other specified disorders of Eustachian tube, left ear -H6983 Other specified disorders of Eustachian tube, bilateral -H6990 Unspecified Eustachian tube disorder, unspecified ear -H6991 Unspecified Eustachian tube disorder, right ear -H6992 Unspecified Eustachian tube disorder, left ear -H6993 Unspecified Eustachian tube disorder, bilateral -H70001 Acute mastoiditis without complications, right ear -H70002 Acute mastoiditis without complications, left ear -H70003 Acute mastoiditis without complications, bilateral -H70009 Acute mastoiditis without complications, unspecified ear -H70011 Subperiosteal abscess of mastoid, right ear -H70012 Subperiosteal abscess of mastoid, left ear -H70013 Subperiosteal abscess of mastoid, bilateral -H70019 Subperiosteal abscess of mastoid, unspecified ear -H70091 Acute mastoiditis with other complications, right ear -H70092 Acute mastoiditis with other complications, left ear -H70093 Acute mastoiditis with other complications, bilateral -H70099 Acute mastoiditis with other complications, unspecified ear -H7010 Chronic mastoiditis, unspecified ear -H7011 Chronic mastoiditis, right ear -H7012 Chronic mastoiditis, left ear -H7013 Chronic mastoiditis, bilateral -H70201 Unspecified petrositis, right ear -H70202 Unspecified petrositis, left ear -H70203 Unspecified petrositis, bilateral -H70209 Unspecified petrositis, unspecified ear -H70211 Acute petrositis, right ear -H70212 Acute petrositis, left ear -H70213 Acute petrositis, bilateral -H70219 Acute petrositis, unspecified ear -H70221 Chronic petrositis, right ear -H70222 Chronic petrositis, left ear -H70223 Chronic petrositis, bilateral -H70229 Chronic petrositis, unspecified ear -H70811 Postauricular fistula, right ear -H70812 Postauricular fistula, left ear -H70813 Postauricular fistula, bilateral -H70819 Postauricular fistula, unspecified ear -H70891 Other mastoiditis and related conditions, right ear -H70892 Other mastoiditis and related conditions, left ear -H70893 Other mastoiditis and related conditions, bilateral -H70899 Other mastoiditis and related conditions, unspecified ear -H7090 Unspecified mastoiditis, unspecified ear -H7091 Unspecified mastoiditis, right ear -H7092 Unspecified mastoiditis, left ear -H7093 Unspecified mastoiditis, bilateral -H7100 Cholesteatoma of attic, unspecified ear -H7101 Cholesteatoma of attic, right ear -H7102 Cholesteatoma of attic, left ear -H7103 Cholesteatoma of attic, bilateral -H7110 Cholesteatoma of tympanum, unspecified ear -H7111 Cholesteatoma of tympanum, right ear -H7112 Cholesteatoma of tympanum, left ear -H7113 Cholesteatoma of tympanum, bilateral -H7120 Cholesteatoma of mastoid, unspecified ear -H7121 Cholesteatoma of mastoid, right ear -H7122 Cholesteatoma of mastoid, left ear -H7123 Cholesteatoma of mastoid, bilateral -H7130 Diffuse cholesteatosis, unspecified ear -H7131 Diffuse cholesteatosis, right ear -H7132 Diffuse cholesteatosis, left ear -H7133 Diffuse cholesteatosis, bilateral -H7190 Unspecified cholesteatoma, unspecified ear -H7191 Unspecified cholesteatoma, right ear -H7192 Unspecified cholesteatoma, left ear -H7193 Unspecified cholesteatoma, bilateral -H7200 Central perforation of tympanic membrane, unspecified ear -H7201 Central perforation of tympanic membrane, right ear -H7202 Central perforation of tympanic membrane, left ear -H7203 Central perforation of tympanic membrane, bilateral -H7210 Attic perforation of tympanic membrane, unspecified ear -H7211 Attic perforation of tympanic membrane, right ear -H7212 Attic perforation of tympanic membrane, left ear -H7213 Attic perforation of tympanic membrane, bilateral -H722X1 Other marginal perforations of tympanic membrane, right ear -H722X2 Other marginal perforations of tympanic membrane, left ear -H722X3 Other marginal perforations of tympanic membrane, bilateral -H722X9 Other marginal perforations of tympanic membrane, unspecified ear -H72811 Multiple perforations of tympanic membrane, right ear -H72812 Multiple perforations of tympanic membrane, left ear -H72813 Multiple perforations of tympanic membrane, bilateral -H72819 Multiple perforations of tympanic membrane, unspecified ear -H72821 Total perforations of tympanic membrane, right ear -H72822 Total perforations of tympanic membrane, left ear -H72823 Total perforations of tympanic membrane, bilateral -H72829 Total perforations of tympanic membrane, unspecified ear -H7290 Unspecified perforation of tympanic membrane, unspecified ear -H7291 Unspecified perforation of tympanic membrane, right ear -H7292 Unspecified perforation of tympanic membrane, left ear -H7293 Unspecified perforation of tympanic membrane, bilateral -H73001 Acute myringitis, right ear -H73002 Acute myringitis, left ear -H73003 Acute myringitis, bilateral -H73009 Acute myringitis, unspecified ear -H73011 Bullous myringitis, right ear -H73012 Bullous myringitis, left ear -H73013 Bullous myringitis, bilateral -H73019 Bullous myringitis, unspecified ear -H73091 Other acute myringitis, right ear -H73092 Other acute myringitis, left ear -H73093 Other acute myringitis, bilateral -H73099 Other acute myringitis, unspecified ear -H7310 Chronic myringitis, unspecified ear -H7311 Chronic myringitis, right ear -H7312 Chronic myringitis, left ear -H7313 Chronic myringitis, bilateral -H7320 Unspecified myringitis, unspecified ear -H7321 Unspecified myringitis, right ear -H7322 Unspecified myringitis, left ear -H7323 Unspecified myringitis, bilateral -H73811 Atrophic flaccid tympanic membrane, right ear -H73812 Atrophic flaccid tympanic membrane, left ear -H73813 Atrophic flaccid tympanic membrane, bilateral -H73819 Atrophic flaccid tympanic membrane, unspecified ear -H73821 Atrophic nonflaccid tympanic membrane, right ear -H73822 Atrophic nonflaccid tympanic membrane, left ear -H73823 Atrophic nonflaccid tympanic membrane, bilateral -H73829 Atrophic nonflaccid tympanic membrane, unspecified ear -H73891 Other specified disorders of tympanic membrane, right ear -H73892 Other specified disorders of tympanic membrane, left ear -H73893 Other specified disorders of tympanic membrane, bilateral -H73899 Other specified disorders of tympanic membrane, unspecified ear -H7390 Unspecified disorder of tympanic membrane, unspecified ear -H7391 Unspecified disorder of tympanic membrane, right ear -H7392 Unspecified disorder of tympanic membrane, left ear -H7393 Unspecified disorder of tympanic membrane, bilateral -H7401 Tympanosclerosis, right ear -H7402 Tympanosclerosis, left ear -H7403 Tympanosclerosis, bilateral -H7409 Tympanosclerosis, unspecified ear -H7411 Adhesive right middle ear disease -H7412 Adhesive left middle ear disease -H7413 Adhesive middle ear disease, bilateral -H7419 Adhesive middle ear disease, unspecified ear -H7420 Discontinuity and dislocation of ear ossicles, unspecified ear -H7421 Discontinuity and dislocation of right ear ossicles -H7422 Discontinuity and dislocation of left ear ossicles -H7423 Discontinuity and dislocation of ear ossicles, bilateral -H74311 Ankylosis of ear ossicles, right ear -H74312 Ankylosis of ear ossicles, left ear -H74313 Ankylosis of ear ossicles, bilateral -H74319 Ankylosis of ear ossicles, unspecified ear -H74321 Partial loss of ear ossicles, right ear -H74322 Partial loss of ear ossicles, left ear -H74323 Partial loss of ear ossicles, bilateral -H74329 Partial loss of ear ossicles, unspecified ear -H74391 Other acquired abnormalities of right ear ossicles -H74392 Other acquired abnormalities of left ear ossicles -H74393 Other acquired abnormalities of ear ossicles, bilateral -H74399 Other acquired abnormalities of ear ossicles, unspecified ear -H7440 Polyp of middle ear, unspecified ear -H7441 Polyp of right middle ear -H7442 Polyp of left middle ear -H7443 Polyp of middle ear, bilateral -H748X1 Other specified disorders of right middle ear and mastoid -H748X2 Other specified disorders of left middle ear and mastoid -H748X3 Other specified disorders of middle ear and mastoid, bilateral -H748X9 Other specified disorders of middle ear and mastoid, unspecified ear -H7490 Unspecified disorder of middle ear and mastoid, unspecified ear -H7491 Unspecified disorder of right middle ear and mastoid -H7492 Unspecified disorder of left middle ear and mastoid -H7493 Unspecified disorder of middle ear and mastoid, bilateral -H7500 Mastoiditis in infectious and parasitic diseases classified elsewhere, unspecified ear -H7501 Mastoiditis in infectious and parasitic diseases classified elsewhere, right ear -H7502 Mastoiditis in infectious and parasitic diseases classified elsewhere, left ear -H7503 Mastoiditis in infectious and parasitic diseases classified elsewhere, bilateral -H7580 Other specified disorders of middle ear and mastoid in diseases classified elsewhere, unspecified ear -H7581 Other specified disorders of right middle ear and mastoid in diseases classified elsewhere -H7582 Other specified disorders of left middle ear and mastoid in diseases classified elsewhere -H7583 Other specified disorders of middle ear and mastoid in diseases classified elsewhere, bilateral -H8000 Otosclerosis involving oval window, nonobliterative, unspecified ear -H8001 Otosclerosis involving oval window, nonobliterative, right ear -H8002 Otosclerosis involving oval window, nonobliterative, left ear -H8003 Otosclerosis involving oval window, nonobliterative, bilateral -H8010 Otosclerosis involving oval window, obliterative, unspecified ear -H8011 Otosclerosis involving oval window, obliterative, right ear -H8012 Otosclerosis involving oval window, obliterative, left ear -H8013 Otosclerosis involving oval window, obliterative, bilateral -H8020 Cochlear otosclerosis, unspecified ear -H8021 Cochlear otosclerosis, right ear -H8022 Cochlear otosclerosis, left ear -H8023 Cochlear otosclerosis, bilateral -H8080 Other otosclerosis, unspecified ear -H8081 Other otosclerosis, right ear -H8082 Other otosclerosis, left ear -H8083 Other otosclerosis, bilateral -H8090 Unspecified otosclerosis, unspecified ear -H8091 Unspecified otosclerosis, right ear -H8092 Unspecified otosclerosis, left ear -H8093 Unspecified otosclerosis, bilateral -H8101 Meniere's disease, right ear -H8102 Meniere's disease, left ear -H8103 Meniere's disease, bilateral -H8109 Meniere's disease, unspecified ear -H8110 Benign paroxysmal vertigo, unspecified ear -H8111 Benign paroxysmal vertigo, right ear -H8112 Benign paroxysmal vertigo, left ear -H8113 Benign paroxysmal vertigo, bilateral -H8120 Vestibular neuronitis, unspecified ear -H8121 Vestibular neuronitis, right ear -H8122 Vestibular neuronitis, left ear -H8123 Vestibular neuronitis, bilateral -H81311 Aural vertigo, right ear -H81312 Aural vertigo, left ear -H81313 Aural vertigo, bilateral -H81319 Aural vertigo, unspecified ear -H81391 Other peripheral vertigo, right ear -H81392 Other peripheral vertigo, left ear -H81393 Other peripheral vertigo, bilateral -H81399 Other peripheral vertigo, unspecified ear -H8141 Vertigo of central origin, right ear -H8142 Vertigo of central origin, left ear -H8143 Vertigo of central origin, bilateral -H8149 Vertigo of central origin, unspecified ear -H818X1 Other disorders of vestibular function, right ear -H818X2 Other disorders of vestibular function, left ear -H818X3 Other disorders of vestibular function, bilateral -H818X9 Other disorders of vestibular function, unspecified ear -H8190 Unspecified disorder of vestibular function, unspecified ear -H8191 Unspecified disorder of vestibular function, right ear -H8192 Unspecified disorder of vestibular function, left ear -H8193 Unspecified disorder of vestibular function, bilateral -H821 Vertiginous syndromes in diseases classified elsewhere, right ear -H822 Vertiginous syndromes in diseases classified elsewhere, left ear -H823 Vertiginous syndromes in diseases classified elsewhere, bilateral -H829 Vertiginous syndromes in diseases classified elsewhere, unspecified ear -H8301 Labyrinthitis, right ear -H8302 Labyrinthitis, left ear -H8303 Labyrinthitis, bilateral -H8309 Labyrinthitis, unspecified ear -H8311 Labyrinthine fistula, right ear -H8312 Labyrinthine fistula, left ear -H8313 Labyrinthine fistula, bilateral -H8319 Labyrinthine fistula, unspecified ear -H832X1 Labyrinthine dysfunction, right ear -H832X2 Labyrinthine dysfunction, left ear -H832X3 Labyrinthine dysfunction, bilateral -H832X9 Labyrinthine dysfunction, unspecified ear -H833X1 Noise effects on right inner ear -H833X2 Noise effects on left inner ear -H833X3 Noise effects on inner ear, bilateral -H833X9 Noise effects on inner ear, unspecified ear -H838X1 Other specified diseases of right inner ear -H838X2 Other specified diseases of left inner ear -H838X3 Other specified diseases of inner ear, bilateral -H838X9 Other specified diseases of inner ear, unspecified ear -H8390 Unspecified disease of inner ear, unspecified ear -H8391 Unspecified disease of right inner ear -H8392 Unspecified disease of left inner ear -H8393 Unspecified disease of inner ear, bilateral -H900 Conductive hearing loss, bilateral -H9011 Conductive hearing loss, unilateral, right ear, with unrestricted hearing on the contralateral side -H9012 Conductive hearing loss, unilateral, left ear, with unrestricted hearing on the contralateral side -H902 Conductive hearing loss, unspecified -H903 Sensorineural hearing loss, bilateral -H9041 Sensorineural hearing loss, unilateral, right ear, with unrestricted hearing on the contralateral side -H9042 Sensorineural hearing loss, unilateral, left ear, with unrestricted hearing on the contralateral side -H905 Unspecified sensorineural hearing loss -H906 Mixed conductive and sensorineural hearing loss, bilateral -H9071 Mixed conductive and sensorineural hearing loss, unilateral, right ear, with unrestricted hearing on the contralateral side -H9072 Mixed conductive and sensorineural hearing loss, unilateral, left ear, with unrestricted hearing on the contralateral side -H908 Mixed conductive and sensorineural hearing loss, unspecified -H90A11 Conductive hearing loss, unilateral, right ear with restricted hearing on the contralateral side -H90A12 Conductive hearing loss, unilateral, left ear with restricted hearing on the contralateral side -H90A21 Sensorineural hearing loss, unilateral, right ear, with restricted hearing on the contralateral side -H90A22 Sensorineural hearing loss, unilateral, left ear, with restricted hearing on the contralateral side -H90A31 Mixed conductive and sensorineural hearing loss, unilateral, right ear with restricted hearing on the contralateral side -H90A32 Mixed conductive and sensorineural hearing loss, unilateral, left ear with restricted hearing on the contralateral side -H9101 Ototoxic hearing loss, right ear -H9102 Ototoxic hearing loss, left ear -H9103 Ototoxic hearing loss, bilateral -H9109 Ototoxic hearing loss, unspecified ear -H9110 Presbycusis, unspecified ear -H9111 Presbycusis, right ear -H9112 Presbycusis, left ear -H9113 Presbycusis, bilateral -H9120 Sudden idiopathic hearing loss, unspecified ear -H9121 Sudden idiopathic hearing loss, right ear -H9122 Sudden idiopathic hearing loss, left ear -H9123 Sudden idiopathic hearing loss, bilateral -H913 Deaf nonspeaking, not elsewhere classified -H918X1 Other specified hearing loss, right ear -H918X2 Other specified hearing loss, left ear -H918X3 Other specified hearing loss, bilateral -H918X9 Other specified hearing loss, unspecified ear -H9190 Unspecified hearing loss, unspecified ear -H9191 Unspecified hearing loss, right ear -H9192 Unspecified hearing loss, left ear -H9193 Unspecified hearing loss, bilateral -H9201 Otalgia, right ear -H9202 Otalgia, left ear -H9203 Otalgia, bilateral -H9209 Otalgia, unspecified ear -H9210 Otorrhea, unspecified ear -H9211 Otorrhea, right ear -H9212 Otorrhea, left ear -H9213 Otorrhea, bilateral -H9220 Otorrhagia, unspecified ear -H9221 Otorrhagia, right ear -H9222 Otorrhagia, left ear -H9223 Otorrhagia, bilateral -H93011 Transient ischemic deafness, right ear -H93012 Transient ischemic deafness, left ear -H93013 Transient ischemic deafness, bilateral -H93019 Transient ischemic deafness, unspecified ear -H93091 Unspecified degenerative and vascular disorders of right ear -H93092 Unspecified degenerative and vascular disorders of left ear -H93093 Unspecified degenerative and vascular disorders of ear, bilateral -H93099 Unspecified degenerative and vascular disorders of unspecified ear -H9311 Tinnitus, right ear -H9312 Tinnitus, left ear -H9313 Tinnitus, bilateral -H9319 Tinnitus, unspecified ear -H93A1 Pulsatile tinnitus, right ear -H93A2 Pulsatile tinnitus, left ear -H93A3 Pulsatile tinnitus, bilateral -H93A9 Pulsatile tinnitus, unspecified ear -H93211 Auditory recruitment, right ear -H93212 Auditory recruitment, left ear -H93213 Auditory recruitment, bilateral -H93219 Auditory recruitment, unspecified ear -H93221 Diplacusis, right ear -H93222 Diplacusis, left ear -H93223 Diplacusis, bilateral -H93229 Diplacusis, unspecified ear -H93231 Hyperacusis, right ear -H93232 Hyperacusis, left ear -H93233 Hyperacusis, bilateral -H93239 Hyperacusis, unspecified ear -H93241 Temporary auditory threshold shift, right ear -H93242 Temporary auditory threshold shift, left ear -H93243 Temporary auditory threshold shift, bilateral -H93249 Temporary auditory threshold shift, unspecified ear -H9325 Central auditory processing disorder -H93291 Other abnormal auditory perceptions, right ear -H93292 Other abnormal auditory perceptions, left ear -H93293 Other abnormal auditory perceptions, bilateral -H93299 Other abnormal auditory perceptions, unspecified ear -H933X1 Disorders of right acoustic nerve -H933X2 Disorders of left acoustic nerve -H933X3 Disorders of bilateral acoustic nerves -H933X9 Disorders of unspecified acoustic nerve -H938X1 Other specified disorders of right ear -H938X2 Other specified disorders of left ear -H938X3 Other specified disorders of ear, bilateral -H938X9 Other specified disorders of ear, unspecified ear -H9390 Unspecified disorder of ear, unspecified ear -H9391 Unspecified disorder of right ear -H9392 Unspecified disorder of left ear -H9393 Unspecified disorder of ear, bilateral -H9400 Acoustic neuritis in infectious and parasitic diseases classified elsewhere, unspecified ear -H9401 Acoustic neuritis in infectious and parasitic diseases classified elsewhere, right ear -H9402 Acoustic neuritis in infectious and parasitic diseases classified elsewhere, left ear -H9403 Acoustic neuritis in infectious and parasitic diseases classified elsewhere, bilateral -H9480 Other specified disorders of ear in diseases classified elsewhere, unspecified ear -H9481 Other specified disorders of right ear in diseases classified elsewhere -H9482 Other specified disorders of left ear in diseases classified elsewhere -H9483 Other specified disorders of ear in diseases classified elsewhere, bilateral -H9500 Recurrent cholesteatoma of postmastoidectomy cavity, unspecified ear -H9501 Recurrent cholesteatoma of postmastoidectomy cavity, right ear -H9502 Recurrent cholesteatoma of postmastoidectomy cavity, left ear -H9503 Recurrent cholesteatoma of postmastoidectomy cavity, bilateral ears -H95111 Chronic inflammation of postmastoidectomy cavity, right ear -H95112 Chronic inflammation of postmastoidectomy cavity, left ear -H95113 Chronic inflammation of postmastoidectomy cavity, bilateral ears -H95119 Chronic inflammation of postmastoidectomy cavity, unspecified ear -H95121 Granulation of postmastoidectomy cavity, right ear -H95122 Granulation of postmastoidectomy cavity, left ear -H95123 Granulation of postmastoidectomy cavity, bilateral ears -H95129 Granulation of postmastoidectomy cavity, unspecified ear -H95131 Mucosal cyst of postmastoidectomy cavity, right ear -H95132 Mucosal cyst of postmastoidectomy cavity, left ear -H95133 Mucosal cyst of postmastoidectomy cavity, bilateral ears -H95139 Mucosal cyst of postmastoidectomy cavity, unspecified ear -H95191 Other disorders following mastoidectomy, right ear -H95192 Other disorders following mastoidectomy, left ear -H95193 Other disorders following mastoidectomy, bilateral ears -H95199 Other disorders following mastoidectomy, unspecified ear -H9521 Intraoperative hemorrhage and hematoma of ear and mastoid process complicating a procedure on the ear and mastoid process -H9522 Intraoperative hemorrhage and hematoma of ear and mastoid process complicating other procedure -H9531 Accidental puncture and laceration of the ear and mastoid process during a procedure on the ear and mastoid process -H9532 Accidental puncture and laceration of the ear and mastoid process during other procedure -H9541 Postprocedural hemorrhage of ear and mastoid process following a procedure on the ear and mastoid process -H9542 Postprocedural hemorrhage of ear and mastoid process following other procedure -H9551 Postprocedural hematoma of ear and mastoid process following a procedure on the ear and mastoid process -H9552 Postprocedural hematoma of ear and mastoid process following other procedure -H9553 Postprocedural seroma of ear and mastoid process following a procedure on the ear and mastoid process -H9554 Postprocedural seroma of ear and mastoid process following other procedure -H95811 Postprocedural stenosis of right external ear canal -H95812 Postprocedural stenosis of left external ear canal -H95813 Postprocedural stenosis of external ear canal, bilateral -H95819 Postprocedural stenosis of unspecified external ear canal -H9588 Other intraoperative complications and disorders of the ear and mastoid process, not elsewhere classified -H9589 Other postprocedural complications and disorders of the ear and mastoid process, not elsewhere classified -I00 Rheumatic fever without heart involvement -I010 Acute rheumatic pericarditis -I011 Acute rheumatic endocarditis -I012 Acute rheumatic myocarditis -I018 Other acute rheumatic heart disease -I019 Acute rheumatic heart disease, unspecified -I020 Rheumatic chorea with heart involvement -I029 Rheumatic chorea without heart involvement -I050 Rheumatic mitral stenosis -I051 Rheumatic mitral insufficiency -I052 Rheumatic mitral stenosis with insufficiency -I058 Other rheumatic mitral valve diseases -I059 Rheumatic mitral valve disease, unspecified -I060 Rheumatic aortic stenosis -I061 Rheumatic aortic insufficiency -I062 Rheumatic aortic stenosis with insufficiency -I068 Other rheumatic aortic valve diseases -I069 Rheumatic aortic valve disease, unspecified -I070 Rheumatic tricuspid stenosis -I071 Rheumatic tricuspid insufficiency -I072 Rheumatic tricuspid stenosis and insufficiency -I078 Other rheumatic tricuspid valve diseases -I079 Rheumatic tricuspid valve disease, unspecified -I080 Rheumatic disorders of both mitral and aortic valves -I081 Rheumatic disorders of both mitral and tricuspid valves -I082 Rheumatic disorders of both aortic and tricuspid valves -I083 Combined rheumatic disorders of mitral, aortic and tricuspid valves -I088 Other rheumatic multiple valve diseases -I089 Rheumatic multiple valve disease, unspecified -I090 Rheumatic myocarditis -I091 Rheumatic diseases of endocardium, valve unspecified -I092 Chronic rheumatic pericarditis -I0981 Rheumatic heart failure -I0989 Other specified rheumatic heart diseases -I099 Rheumatic heart disease, unspecified -I10 Essential (primary) hypertension -I110 Hypertensive heart disease with heart failure -I119 Hypertensive heart disease without heart failure -I120 Hypertensive chronic kidney disease with stage 5 chronic kidney disease or end stage renal disease -I129 Hypertensive chronic kidney disease with stage 1 through stage 4 chronic kidney disease, or unspecified chronic kidney disease -I130 Hypertensive heart and chronic kidney disease with heart failure and stage 1 through stage 4 chronic kidney disease, or unspecified chronic kidney disease -I1310 Hypertensive heart and chronic kidney disease without heart failure, with stage 1 through stage 4 chronic kidney disease, or unspecified chronic kidney disease -I1311 Hypertensive heart and chronic kidney disease without heart failure, with stage 5 chronic kidney disease, or end stage renal disease -I132 Hypertensive heart and chronic kidney disease with heart failure and with stage 5 chronic kidney disease, or end stage renal disease -I150 Renovascular hypertension -I151 Hypertension secondary to other renal disorders -I152 Hypertension secondary to endocrine disorders -I158 Other secondary hypertension -I159 Secondary hypertension, unspecified -I160 Hypertensive urgency -I161 Hypertensive emergency -I169 Hypertensive crisis, unspecified -I200 Unstable angina -I201 Angina pectoris with documented spasm -I208 Other forms of angina pectoris -I209 Angina pectoris, unspecified -I2101 ST elevation (STEMI) myocardial infarction involving left main coronary artery -I2102 ST elevation (STEMI) myocardial infarction involving left anterior descending coronary artery -I2109 ST elevation (STEMI) myocardial infarction involving other coronary artery of anterior wall -I2111 ST elevation (STEMI) myocardial infarction involving right coronary artery -I2119 ST elevation (STEMI) myocardial infarction involving other coronary artery of inferior wall -I2121 ST elevation (STEMI) myocardial infarction involving left circumflex coronary artery -I2129 ST elevation (STEMI) myocardial infarction involving other sites -I213 ST elevation (STEMI) myocardial infarction of unspecified site -I214 Non-ST elevation (NSTEMI) myocardial infarction -I220 Subsequent ST elevation (STEMI) myocardial infarction of anterior wall -I221 Subsequent ST elevation (STEMI) myocardial infarction of inferior wall -I222 Subsequent non-ST elevation (NSTEMI) myocardial infarction -I228 Subsequent ST elevation (STEMI) myocardial infarction of other sites -I229 Subsequent ST elevation (STEMI) myocardial infarction of unspecified site -I230 Hemopericardium as current complication following acute myocardial infarction -I231 Atrial septal defect as current complication following acute myocardial infarction -I232 Ventricular septal defect as current complication following acute myocardial infarction -I233 Rupture of cardiac wall without hemopericardium as current complication following acute myocardial infarction -I234 Rupture of chordae tendineae as current complication following acute myocardial infarction -I235 Rupture of papillary muscle as current complication following acute myocardial infarction -I236 Thrombosis of atrium, auricular appendage, and ventricle as current complications following acute myocardial infarction -I237 Postinfarction angina -I238 Other current complications following acute myocardial infarction -I240 Acute coronary thrombosis not resulting in myocardial infarction -I241 Dressler's syndrome -I248 Other forms of acute ischemic heart disease -I249 Acute ischemic heart disease, unspecified -I2510 Atherosclerotic heart disease of native coronary artery without angina pectoris -I25110 Atherosclerotic heart disease of native coronary artery with unstable angina pectoris -I25111 Atherosclerotic heart disease of native coronary artery with angina pectoris with documented spasm -I25118 Atherosclerotic heart disease of native coronary artery with other forms of angina pectoris -I25119 Atherosclerotic heart disease of native coronary artery with unspecified angina pectoris -I252 Old myocardial infarction -I253 Aneurysm of heart -I2541 Coronary artery aneurysm -I2542 Coronary artery dissection -I255 Ischemic cardiomyopathy -I256 Silent myocardial ischemia -I25700 Atherosclerosis of coronary artery bypass graft(s), unspecified, with unstable angina pectoris -I25701 Atherosclerosis of coronary artery bypass graft(s), unspecified, with angina pectoris with documented spasm -I25708 Atherosclerosis of coronary artery bypass graft(s), unspecified, with other forms of angina pectoris -I25709 Atherosclerosis of coronary artery bypass graft(s), unspecified, with unspecified angina pectoris -I25710 Atherosclerosis of autologous vein coronary artery bypass graft(s) with unstable angina pectoris -I25711 Atherosclerosis of autologous vein coronary artery bypass graft(s) with angina pectoris with documented spasm -I25718 Atherosclerosis of autologous vein coronary artery bypass graft(s) with other forms of angina pectoris -I25719 Atherosclerosis of autologous vein coronary artery bypass graft(s) with unspecified angina pectoris -I25720 Atherosclerosis of autologous artery coronary artery bypass graft(s) with unstable angina pectoris -I25721 Atherosclerosis of autologous artery coronary artery bypass graft(s) with angina pectoris with documented spasm -I25728 Atherosclerosis of autologous artery coronary artery bypass graft(s) with other forms of angina pectoris -I25729 Atherosclerosis of autologous artery coronary artery bypass graft(s) with unspecified angina pectoris -I25730 Atherosclerosis of nonautologous biological coronary artery bypass graft(s) with unstable angina pectoris -I25731 Atherosclerosis of nonautologous biological coronary artery bypass graft(s) with angina pectoris with documented spasm -I25738 Atherosclerosis of nonautologous biological coronary artery bypass graft(s) with other forms of angina pectoris -I25739 Atherosclerosis of nonautologous biological coronary artery bypass graft(s) with unspecified angina pectoris -I25750 Atherosclerosis of native coronary artery of transplanted heart with unstable angina -I25751 Atherosclerosis of native coronary artery of transplanted heart with angina pectoris with documented spasm -I25758 Atherosclerosis of native coronary artery of transplanted heart with other forms of angina pectoris -I25759 Atherosclerosis of native coronary artery of transplanted heart with unspecified angina pectoris -I25760 Atherosclerosis of bypass graft of coronary artery of transplanted heart with unstable angina -I25761 Atherosclerosis of bypass graft of coronary artery of transplanted heart with angina pectoris with documented spasm -I25768 Atherosclerosis of bypass graft of coronary artery of transplanted heart with other forms of angina pectoris -I25769 Atherosclerosis of bypass graft of coronary artery of transplanted heart with unspecified angina pectoris -I25790 Atherosclerosis of other coronary artery bypass graft(s) with unstable angina pectoris -I25791 Atherosclerosis of other coronary artery bypass graft(s) with angina pectoris with documented spasm -I25798 Atherosclerosis of other coronary artery bypass graft(s) with other forms of angina pectoris -I25799 Atherosclerosis of other coronary artery bypass graft(s) with unspecified angina pectoris -I25810 Atherosclerosis of coronary artery bypass graft(s) without angina pectoris -I25811 Atherosclerosis of native coronary artery of transplanted heart without angina pectoris -I25812 Atherosclerosis of bypass graft of coronary artery of transplanted heart without angina pectoris -I2582 Chronic total occlusion of coronary artery -I2583 Coronary atherosclerosis due to lipid rich plaque -I2584 Coronary atherosclerosis due to calcified coronary lesion -I2589 Other forms of chronic ischemic heart disease -I259 Chronic ischemic heart disease, unspecified -I2601 Septic pulmonary embolism with acute cor pulmonale -I2602 Saddle embolus of pulmonary artery with acute cor pulmonale -I2609 Other pulmonary embolism with acute cor pulmonale -I2690 Septic pulmonary embolism without acute cor pulmonale -I2692 Saddle embolus of pulmonary artery without acute cor pulmonale -I2699 Other pulmonary embolism without acute cor pulmonale -I270 Primary pulmonary hypertension -I271 Kyphoscoliotic heart disease -I272 Other secondary pulmonary hypertension -I2781 Cor pulmonale (chronic) -I2782 Chronic pulmonary embolism -I2789 Other specified pulmonary heart diseases -I279 Pulmonary heart disease, unspecified -I280 Arteriovenous fistula of pulmonary vessels -I281 Aneurysm of pulmonary artery -I288 Other diseases of pulmonary vessels -I289 Disease of pulmonary vessels, unspecified -I300 Acute nonspecific idiopathic pericarditis -I301 Infective pericarditis -I308 Other forms of acute pericarditis -I309 Acute pericarditis, unspecified -I310 Chronic adhesive pericarditis -I311 Chronic constrictive pericarditis -I312 Hemopericardium, not elsewhere classified -I313 Pericardial effusion (noninflammatory) -I314 Cardiac tamponade -I318 Other specified diseases of pericardium -I319 Disease of pericardium, unspecified -I32 Pericarditis in diseases classified elsewhere -I330 Acute and subacute infective endocarditis -I339 Acute and subacute endocarditis, unspecified -I340 Nonrheumatic mitral (valve) insufficiency -I341 Nonrheumatic mitral (valve) prolapse -I342 Nonrheumatic mitral (valve) stenosis -I348 Other nonrheumatic mitral valve disorders -I349 Nonrheumatic mitral valve disorder, unspecified -I350 Nonrheumatic aortic (valve) stenosis -I351 Nonrheumatic aortic (valve) insufficiency -I352 Nonrheumatic aortic (valve) stenosis with insufficiency -I358 Other nonrheumatic aortic valve disorders -I359 Nonrheumatic aortic valve disorder, unspecified -I360 Nonrheumatic tricuspid (valve) stenosis -I361 Nonrheumatic tricuspid (valve) insufficiency -I362 Nonrheumatic tricuspid (valve) stenosis with insufficiency -I368 Other nonrheumatic tricuspid valve disorders -I369 Nonrheumatic tricuspid valve disorder, unspecified -I370 Nonrheumatic pulmonary valve stenosis -I371 Nonrheumatic pulmonary valve insufficiency -I372 Nonrheumatic pulmonary valve stenosis with insufficiency -I378 Other nonrheumatic pulmonary valve disorders -I379 Nonrheumatic pulmonary valve disorder, unspecified -I38 Endocarditis, valve unspecified -I39 Endocarditis and heart valve disorders in diseases classified elsewhere -I400 Infective myocarditis -I401 Isolated myocarditis -I408 Other acute myocarditis -I409 Acute myocarditis, unspecified -I41 Myocarditis in diseases classified elsewhere -I420 Dilated cardiomyopathy -I421 Obstructive hypertrophic cardiomyopathy -I422 Other hypertrophic cardiomyopathy -I423 Endomyocardial (eosinophilic) disease -I424 Endocardial fibroelastosis -I425 Other restrictive cardiomyopathy -I426 Alcoholic cardiomyopathy -I427 Cardiomyopathy due to drug and external agent -I428 Other cardiomyopathies -I429 Cardiomyopathy, unspecified -I43 Cardiomyopathy in diseases classified elsewhere -I440 Atrioventricular block, first degree -I441 Atrioventricular block, second degree -I442 Atrioventricular block, complete -I4430 Unspecified atrioventricular block -I4439 Other atrioventricular block -I444 Left anterior fascicular block -I445 Left posterior fascicular block -I4460 Unspecified fascicular block -I4469 Other fascicular block -I447 Left bundle-branch block, unspecified -I450 Right fascicular block -I4510 Unspecified right bundle-branch block -I4519 Other right bundle-branch block -I452 Bifascicular block -I453 Trifascicular block -I454 Nonspecific intraventricular block -I455 Other specified heart block -I456 Pre-excitation syndrome -I4581 Long QT syndrome -I4589 Other specified conduction disorders -I459 Conduction disorder, unspecified -I462 Cardiac arrest due to underlying cardiac condition -I468 Cardiac arrest due to other underlying condition -I469 Cardiac arrest, cause unspecified -I470 Re-entry ventricular arrhythmia -I471 Supraventricular tachycardia -I472 Ventricular tachycardia -I479 Paroxysmal tachycardia, unspecified -I480 Paroxysmal atrial fibrillation -I481 Persistent atrial fibrillation -I482 Chronic atrial fibrillation -I483 Typical atrial flutter -I484 Atypical atrial flutter -I4891 Unspecified atrial fibrillation -I4892 Unspecified atrial flutter -I4901 Ventricular fibrillation -I4902 Ventricular flutter -I491 Atrial premature depolarization -I492 Junctional premature depolarization -I493 Ventricular premature depolarization -I4940 Unspecified premature depolarization -I4949 Other premature depolarization -I495 Sick sinus syndrome -I498 Other specified cardiac arrhythmias -I499 Cardiac arrhythmia, unspecified -I501 Left ventricular failure -I5020 Unspecified systolic (congestive) heart failure -I5021 Acute systolic (congestive) heart failure -I5022 Chronic systolic (congestive) heart failure -I5023 Acute on chronic systolic (congestive) heart failure -I5030 Unspecified diastolic (congestive) heart failure -I5031 Acute diastolic (congestive) heart failure -I5032 Chronic diastolic (congestive) heart failure -I5033 Acute on chronic diastolic (congestive) heart failure -I5040 Unspecified combined systolic (congestive) and diastolic (congestive) heart failure -I5041 Acute combined systolic (congestive) and diastolic (congestive) heart failure -I5042 Chronic combined systolic (congestive) and diastolic (congestive) heart failure -I5043 Acute on chronic combined systolic (congestive) and diastolic (congestive) heart failure -I509 Heart failure, unspecified -I510 Cardiac septal defect, acquired -I511 Rupture of chordae tendineae, not elsewhere classified -I512 Rupture of papillary muscle, not elsewhere classified -I513 Intracardiac thrombosis, not elsewhere classified -I514 Myocarditis, unspecified -I515 Myocardial degeneration -I517 Cardiomegaly -I5181 Takotsubo syndrome -I5189 Other ill-defined heart diseases -I519 Heart disease, unspecified -I52 Other heart disorders in diseases classified elsewhere -I6000 Nontraumatic subarachnoid hemorrhage from unspecified carotid siphon and bifurcation -I6001 Nontraumatic subarachnoid hemorrhage from right carotid siphon and bifurcation -I6002 Nontraumatic subarachnoid hemorrhage from left carotid siphon and bifurcation -I6010 Nontraumatic subarachnoid hemorrhage from unspecified middle cerebral artery -I6011 Nontraumatic subarachnoid hemorrhage from right middle cerebral artery -I6012 Nontraumatic subarachnoid hemorrhage from left middle cerebral artery -I602 Nontraumatic subarachnoid hemorrhage from anterior communicating artery -I6030 Nontraumatic subarachnoid hemorrhage from unspecified posterior communicating artery -I6031 Nontraumatic subarachnoid hemorrhage from right posterior communicating artery -I6032 Nontraumatic subarachnoid hemorrhage from left posterior communicating artery -I604 Nontraumatic subarachnoid hemorrhage from basilar artery -I6050 Nontraumatic subarachnoid hemorrhage from unspecified vertebral artery -I6051 Nontraumatic subarachnoid hemorrhage from right vertebral artery -I6052 Nontraumatic subarachnoid hemorrhage from left vertebral artery -I606 Nontraumatic subarachnoid hemorrhage from other intracranial arteries -I607 Nontraumatic subarachnoid hemorrhage from unspecified intracranial artery -I608 Other nontraumatic subarachnoid hemorrhage -I609 Nontraumatic subarachnoid hemorrhage, unspecified -I610 Nontraumatic intracerebral hemorrhage in hemisphere, subcortical -I611 Nontraumatic intracerebral hemorrhage in hemisphere, cortical -I612 Nontraumatic intracerebral hemorrhage in hemisphere, unspecified -I613 Nontraumatic intracerebral hemorrhage in brain stem -I614 Nontraumatic intracerebral hemorrhage in cerebellum -I615 Nontraumatic intracerebral hemorrhage, intraventricular -I616 Nontraumatic intracerebral hemorrhage, multiple localized -I618 Other nontraumatic intracerebral hemorrhage -I619 Nontraumatic intracerebral hemorrhage, unspecified -I6200 Nontraumatic subdural hemorrhage, unspecified -I6201 Nontraumatic acute subdural hemorrhage -I6202 Nontraumatic subacute subdural hemorrhage -I6203 Nontraumatic chronic subdural hemorrhage -I621 Nontraumatic extradural hemorrhage -I629 Nontraumatic intracranial hemorrhage, unspecified -I6300 Cerebral infarction due to thrombosis of unspecified precerebral artery -I63011 Cerebral infarction due to thrombosis of right vertebral artery -I63012 Cerebral infarction due to thrombosis of left vertebral artery -I63013 Cerebral infarction due to thrombosis of bilateral vertebral arteries -I63019 Cerebral infarction due to thrombosis of unspecified vertebral artery -I6302 Cerebral infarction due to thrombosis of basilar artery -I63031 Cerebral infarction due to thrombosis of right carotid artery -I63032 Cerebral infarction due to thrombosis of left carotid artery -I63033 Cerebral infarction due to thrombosis of bilateral carotid arteries -I63039 Cerebral infarction due to thrombosis of unspecified carotid artery -I6309 Cerebral infarction due to thrombosis of other precerebral artery -I6310 Cerebral infarction due to embolism of unspecified precerebral artery -I63111 Cerebral infarction due to embolism of right vertebral artery -I63112 Cerebral infarction due to embolism of left vertebral artery -I63113 Cerebral infarction due to embolism of bilateral vertebral arteries -I63119 Cerebral infarction due to embolism of unspecified vertebral artery -I6312 Cerebral infarction due to embolism of basilar artery -I63131 Cerebral infarction due to embolism of right carotid artery -I63132 Cerebral infarction due to embolism of left carotid artery -I63133 Cerebral infarction due to embolism of bilateral carotid arteries -I63139 Cerebral infarction due to embolism of unspecified carotid artery -I6319 Cerebral infarction due to embolism of other precerebral artery -I6320 Cerebral infarction due to unspecified occlusion or stenosis of unspecified precerebral arteries -I63211 Cerebral infarction due to unspecified occlusion or stenosis of right vertebral arteries -I63212 Cerebral infarction due to unspecified occlusion or stenosis of left vertebral arteries -I63213 Cerebral infarction due to unspecified occlusion or stenosis of bilateral vertebral arteries -I63219 Cerebral infarction due to unspecified occlusion or stenosis of unspecified vertebral arteries -I6322 Cerebral infarction due to unspecified occlusion or stenosis of basilar arteries -I63231 Cerebral infarction due to unspecified occlusion or stenosis of right carotid arteries -I63232 Cerebral infarction due to unspecified occlusion or stenosis of left carotid arteries -I63233 Cerebral infarction due to unspecified occlusion or stenosis of bilateral carotid arteries -I63239 Cerebral infarction due to unspecified occlusion or stenosis of unspecified carotid arteries -I6329 Cerebral infarction due to unspecified occlusion or stenosis of other precerebral arteries -I6330 Cerebral infarction due to thrombosis of unspecified cerebral artery -I63311 Cerebral infarction due to thrombosis of right middle cerebral artery -I63312 Cerebral infarction due to thrombosis of left middle cerebral artery -I63313 Cerebral infarction due to thrombosis of bilateral middle cerebral arteries -I63319 Cerebral infarction due to thrombosis of unspecified middle cerebral artery -I63321 Cerebral infarction due to thrombosis of right anterior cerebral artery -I63322 Cerebral infarction due to thrombosis of left anterior cerebral artery -I63323 Cerebral infarction due to thrombosis of bilateral anterior arteries -I63329 Cerebral infarction due to thrombosis of unspecified anterior cerebral artery -I63331 Cerebral infarction due to thrombosis of right posterior cerebral artery -I63332 Cerebral infarction due to thrombosis of left posterior cerebral artery -I63333 Cerebral infarction to thrombosis of bilateral posterior arteries -I63339 Cerebral infarction due to thrombosis of unspecified posterior cerebral artery -I63341 Cerebral infarction due to thrombosis of right cerebellar artery -I63342 Cerebral infarction due to thrombosis of left cerebellar artery -I63343 Cerebral infarction to thrombosis of bilateral cerebellar arteries -I63349 Cerebral infarction due to thrombosis of unspecified cerebellar artery -I6339 Cerebral infarction due to thrombosis of other cerebral artery -I6340 Cerebral infarction due to embolism of unspecified cerebral artery -I63411 Cerebral infarction due to embolism of right middle cerebral artery -I63412 Cerebral infarction due to embolism of left middle cerebral artery -I63413 Cerebral infarction due to embolism of bilateral middle cerebral arteries -I63419 Cerebral infarction due to embolism of unspecified middle cerebral artery -I63421 Cerebral infarction due to embolism of right anterior cerebral artery -I63422 Cerebral infarction due to embolism of left anterior cerebral artery -I63423 Cerebral infarction due to embolism of bilateral anterior cerebral arteries -I63429 Cerebral infarction due to embolism of unspecified anterior cerebral artery -I63431 Cerebral infarction due to embolism of right posterior cerebral artery -I63432 Cerebral infarction due to embolism of left posterior cerebral artery -I63433 Cerebral infarction due to embolism of bilateral posterior cerebral arteries -I63439 Cerebral infarction due to embolism of unspecified posterior cerebral artery -I63441 Cerebral infarction due to embolism of right cerebellar artery -I63442 Cerebral infarction due to embolism of left cerebellar artery -I63443 Cerebral infarction due to embolism of bilateral cerebellar arteries -I63449 Cerebral infarction due to embolism of unspecified cerebellar artery -I6349 Cerebral infarction due to embolism of other cerebral artery -I6350 Cerebral infarction due to unspecified occlusion or stenosis of unspecified cerebral artery -I63511 Cerebral infarction due to unspecified occlusion or stenosis of right middle cerebral artery -I63512 Cerebral infarction due to unspecified occlusion or stenosis of left middle cerebral artery -I63513 Cerebral infarction due to unspecified occlusion or stenosis of bilateral middle arteries -I63519 Cerebral infarction due to unspecified occlusion or stenosis of unspecified middle cerebral artery -I63521 Cerebral infarction due to unspecified occlusion or stenosis of right anterior cerebral artery -I63522 Cerebral infarction due to unspecified occlusion or stenosis of left anterior cerebral artery -I63523 Cerebral infarction due to unspecified occlusion or stenosis of bilateral anterior arteries -I63529 Cerebral infarction due to unspecified occlusion or stenosis of unspecified anterior cerebral artery -I63531 Cerebral infarction due to unspecified occlusion or stenosis of right posterior cerebral artery -I63532 Cerebral infarction due to unspecified occlusion or stenosis of left posterior cerebral artery -I63533 Cerebral infarction due to unspecified occlusion or stenosis of bilateral posterior arteries -I63539 Cerebral infarction due to unspecified occlusion or stenosis of unspecified posterior cerebral artery -I63541 Cerebral infarction due to unspecified occlusion or stenosis of right cerebellar artery -I63542 Cerebral infarction due to unspecified occlusion or stenosis of left cerebellar artery -I63543 Cerebral infarction due to unspecified occlusion or stenosis of bilateral cerebellar arteries -I63549 Cerebral infarction due to unspecified occlusion or stenosis of unspecified cerebellar artery -I6359 Cerebral infarction due to unspecified occlusion or stenosis of other cerebral artery -I636 Cerebral infarction due to cerebral venous thrombosis, nonpyogenic -I638 Other cerebral infarction -I639 Cerebral infarction, unspecified -I6501 Occlusion and stenosis of right vertebral artery -I6502 Occlusion and stenosis of left vertebral artery -I6503 Occlusion and stenosis of bilateral vertebral arteries -I6509 Occlusion and stenosis of unspecified vertebral artery -I651 Occlusion and stenosis of basilar artery -I6521 Occlusion and stenosis of right carotid artery -I6522 Occlusion and stenosis of left carotid artery -I6523 Occlusion and stenosis of bilateral carotid arteries -I6529 Occlusion and stenosis of unspecified carotid artery -I658 Occlusion and stenosis of other precerebral arteries -I659 Occlusion and stenosis of unspecified precerebral artery -I6601 Occlusion and stenosis of right middle cerebral artery -I6602 Occlusion and stenosis of left middle cerebral artery -I6603 Occlusion and stenosis of bilateral middle cerebral arteries -I6609 Occlusion and stenosis of unspecified middle cerebral artery -I6611 Occlusion and stenosis of right anterior cerebral artery -I6612 Occlusion and stenosis of left anterior cerebral artery -I6613 Occlusion and stenosis of bilateral anterior cerebral arteries -I6619 Occlusion and stenosis of unspecified anterior cerebral artery -I6621 Occlusion and stenosis of right posterior cerebral artery -I6622 Occlusion and stenosis of left posterior cerebral artery -I6623 Occlusion and stenosis of bilateral posterior cerebral arteries -I6629 Occlusion and stenosis of unspecified posterior cerebral artery -I663 Occlusion and stenosis of cerebellar arteries -I668 Occlusion and stenosis of other cerebral arteries -I669 Occlusion and stenosis of unspecified cerebral artery -I670 Dissection of cerebral arteries, nonruptured -I671 Cerebral aneurysm, nonruptured -I672 Cerebral atherosclerosis -I673 Progressive vascular leukoencephalopathy -I674 Hypertensive encephalopathy -I675 Moyamoya disease -I676 Nonpyogenic thrombosis of intracranial venous system -I677 Cerebral arteritis, not elsewhere classified -I6781 Acute cerebrovascular insufficiency -I6782 Cerebral ischemia -I6783 Posterior reversible encephalopathy syndrome -I67841 Reversible cerebrovascular vasoconstriction syndrome -I67848 Other cerebrovascular vasospasm and vasoconstriction -I6789 Other cerebrovascular disease -I679 Cerebrovascular disease, unspecified -I680 Cerebral amyloid angiopathy -I682 Cerebral arteritis in other diseases classified elsewhere -I688 Other cerebrovascular disorders in diseases classified elsewhere -I6900 Unspecified sequelae of nontraumatic subarachnoid hemorrhage -I69010 Attention and concentration deficit following nontraumatic subarachnoid hemorrhage -I69011 Memory deficit following nontraumatic subarachnoid hemorrhage -I69012 Visuospatial deficit and spatial neglect following nontraumatic subarachnoid hemorrhage -I69013 Psychomotor deficit following nontraumatic subarachnoid hemorrhage -I69014 Frontal lobe and executive function deficit following nontraumatic subarachnoid hemorrhage -I69015 Cognitive social or emotional deficit following nontraumatic subarachnoid hemorrhage -I69018 Other symptoms and signs involving cognitive functions following nontraumatic subarachnoid hemorrhage -I69019 Unspecified symptoms and signs involving cognitive functions following nontraumatic subarachnoid hemorrhage -I69020 Aphasia following nontraumatic subarachnoid hemorrhage -I69021 Dysphasia following nontraumatic subarachnoid hemorrhage -I69022 Dysarthria following nontraumatic subarachnoid hemorrhage -I69023 Fluency disorder following nontraumatic subarachnoid hemorrhage -I69028 Other speech and language deficits following nontraumatic subarachnoid hemorrhage -I69031 Monoplegia of upper limb following nontraumatic subarachnoid hemorrhage affecting right dominant side -I69032 Monoplegia of upper limb following nontraumatic subarachnoid hemorrhage affecting left dominant side -I69033 Monoplegia of upper limb following nontraumatic subarachnoid hemorrhage affecting right non-dominant side -I69034 Monoplegia of upper limb following nontraumatic subarachnoid hemorrhage affecting left non-dominant side -I69039 Monoplegia of upper limb following nontraumatic subarachnoid hemorrhage affecting unspecified side -I69041 Monoplegia of lower limb following nontraumatic subarachnoid hemorrhage affecting right dominant side -I69042 Monoplegia of lower limb following nontraumatic subarachnoid hemorrhage affecting left dominant side -I69043 Monoplegia of lower limb following nontraumatic subarachnoid hemorrhage affecting right non-dominant side -I69044 Monoplegia of lower limb following nontraumatic subarachnoid hemorrhage affecting left non-dominant side -I69049 Monoplegia of lower limb following nontraumatic subarachnoid hemorrhage affecting unspecified side -I69051 Hemiplegia and hemiparesis following nontraumatic subarachnoid hemorrhage affecting right dominant side -I69052 Hemiplegia and hemiparesis following nontraumatic subarachnoid hemorrhage affecting left dominant side -I69053 Hemiplegia and hemiparesis following nontraumatic subarachnoid hemorrhage affecting right non-dominant side -I69054 Hemiplegia and hemiparesis following nontraumatic subarachnoid hemorrhage affecting left non-dominant side -I69059 Hemiplegia and hemiparesis following nontraumatic subarachnoid hemorrhage affecting unspecified side -I69061 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage affecting right dominant side -I69062 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage affecting left dominant side -I69063 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage affecting right non-dominant side -I69064 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage affecting left non-dominant side -I69065 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage, bilateral -I69069 Other paralytic syndrome following nontraumatic subarachnoid hemorrhage affecting unspecified side -I69090 Apraxia following nontraumatic subarachnoid hemorrhage -I69091 Dysphagia following nontraumatic subarachnoid hemorrhage -I69092 Facial weakness following nontraumatic subarachnoid hemorrhage -I69093 Ataxia following nontraumatic subarachnoid hemorrhage -I69098 Other sequelae following nontraumatic subarachnoid hemorrhage -I6910 Unspecified sequelae of nontraumatic intracerebral hemorrhage -I69110 Attention and concentration deficit following nontraumatic intracerebral hemorrhage -I69111 Memory deficit following nontraumatic intracerebral hemorrhage -I69112 Visuospatial deficit and spatial neglect following nontraumatic intracerebral hemorrhage -I69113 Psychomotor deficit following nontraumatic intracerebral hemorrhage -I69114 Frontal lobe and executive function deficit following nontraumatic intracerebral hemorrhage -I69115 Cognitive social or emotional deficit following nontraumatic intracerebral hemorrhage -I69118 Other symptoms and signs involving cognitive functions following nontraumatic intracerebral hemorrhage -I69119 Unspecified symptoms and signs involving cognitive functions following nontraumatic intracerebral hemorrhage -I69120 Aphasia following nontraumatic intracerebral hemorrhage -I69121 Dysphasia following nontraumatic intracerebral hemorrhage -I69122 Dysarthria following nontraumatic intracerebral hemorrhage -I69123 Fluency disorder following nontraumatic intracerebral hemorrhage -I69128 Other speech and language deficits following nontraumatic intracerebral hemorrhage -I69131 Monoplegia of upper limb following nontraumatic intracerebral hemorrhage affecting right dominant side -I69132 Monoplegia of upper limb following nontraumatic intracerebral hemorrhage affecting left dominant side -I69133 Monoplegia of upper limb following nontraumatic intracerebral hemorrhage affecting right non-dominant side -I69134 Monoplegia of upper limb following nontraumatic intracerebral hemorrhage affecting left non-dominant side -I69139 Monoplegia of upper limb following nontraumatic intracerebral hemorrhage affecting unspecified side -I69141 Monoplegia of lower limb following nontraumatic intracerebral hemorrhage affecting right dominant side -I69142 Monoplegia of lower limb following nontraumatic intracerebral hemorrhage affecting left dominant side -I69143 Monoplegia of lower limb following nontraumatic intracerebral hemorrhage affecting right non-dominant side -I69144 Monoplegia of lower limb following nontraumatic intracerebral hemorrhage affecting left non-dominant side -I69149 Monoplegia of lower limb following nontraumatic intracerebral hemorrhage affecting unspecified side -I69151 Hemiplegia and hemiparesis following nontraumatic intracerebral hemorrhage affecting right dominant side -I69152 Hemiplegia and hemiparesis following nontraumatic intracerebral hemorrhage affecting left dominant side -I69153 Hemiplegia and hemiparesis following nontraumatic intracerebral hemorrhage affecting right non-dominant side -I69154 Hemiplegia and hemiparesis following nontraumatic intracerebral hemorrhage affecting left non-dominant side -I69159 Hemiplegia and hemiparesis following nontraumatic intracerebral hemorrhage affecting unspecified side -I69161 Other paralytic syndrome following nontraumatic intracerebral hemorrhage affecting right dominant side -I69162 Other paralytic syndrome following nontraumatic intracerebral hemorrhage affecting left dominant side -I69163 Other paralytic syndrome following nontraumatic intracerebral hemorrhage affecting right non-dominant side -I69164 Other paralytic syndrome following nontraumatic intracerebral hemorrhage affecting left non-dominant side -I69165 Other paralytic syndrome following nontraumatic intracerebral hemorrhage, bilateral -I69169 Other paralytic syndrome following nontraumatic intracerebral hemorrhage affecting unspecified side -I69190 Apraxia following nontraumatic intracerebral hemorrhage -I69191 Dysphagia following nontraumatic intracerebral hemorrhage -I69192 Facial weakness following nontraumatic intracerebral hemorrhage -I69193 Ataxia following nontraumatic intracerebral hemorrhage -I69198 Other sequelae of nontraumatic intracerebral hemorrhage -I6920 Unspecified sequelae of other nontraumatic intracranial hemorrhage -I69210 Attention and concentration deficit following other nontraumatic intracranial hemorrhage -I69211 Memory deficit following other nontraumatic intracranial hemorrhage -I69212 Visuospatial deficit and spatial neglect following other nontraumatic intracranial hemorrhage -I69213 Psychomotor deficit following other nontraumatic intracranial hemorrhage -I69214 Frontal lobe and executive function deficit following other nontraumatic intracranial hemorrhage -I69215 Cognitive social or emotional deficit following other nontraumatic intracranial hemorrhage -I69218 Other symptoms and signs involving cognitive functions following other nontraumatic intracranial hemorrhage -I69219 Unspecified symptoms and signs involving cognitive functions following other nontraumatic intracranial hemorrhage -I69220 Aphasia following other nontraumatic intracranial hemorrhage -I69221 Dysphasia following other nontraumatic intracranial hemorrhage -I69222 Dysarthria following other nontraumatic intracranial hemorrhage -I69223 Fluency disorder following other nontraumatic intracranial hemorrhage -I69228 Other speech and language deficits following other nontraumatic intracranial hemorrhage -I69231 Monoplegia of upper limb following other nontraumatic intracranial hemorrhage affecting right dominant side -I69232 Monoplegia of upper limb following other nontraumatic intracranial hemorrhage affecting left dominant side -I69233 Monoplegia of upper limb following other nontraumatic intracranial hemorrhage affecting right non-dominant side -I69234 Monoplegia of upper limb following other nontraumatic intracranial hemorrhage affecting left non-dominant side -I69239 Monoplegia of upper limb following other nontraumatic intracranial hemorrhage affecting unspecified side -I69241 Monoplegia of lower limb following other nontraumatic intracranial hemorrhage affecting right dominant side -I69242 Monoplegia of lower limb following other nontraumatic intracranial hemorrhage affecting left dominant side -I69243 Monoplegia of lower limb following other nontraumatic intracranial hemorrhage affecting right non-dominant side -I69244 Monoplegia of lower limb following other nontraumatic intracranial hemorrhage affecting left non-dominant side -I69249 Monoplegia of lower limb following other nontraumatic intracranial hemorrhage affecting unspecified side -I69251 Hemiplegia and hemiparesis following other nontraumatic intracranial hemorrhage affecting right dominant side -I69252 Hemiplegia and hemiparesis following other nontraumatic intracranial hemorrhage affecting left dominant side -I69253 Hemiplegia and hemiparesis following other nontraumatic intracranial hemorrhage affecting right non-dominant side -I69254 Hemiplegia and hemiparesis following other nontraumatic intracranial hemorrhage affecting left non-dominant side -I69259 Hemiplegia and hemiparesis following other nontraumatic intracranial hemorrhage affecting unspecified side -I69261 Other paralytic syndrome following other nontraumatic intracranial hemorrhage affecting right dominant side -I69262 Other paralytic syndrome following other nontraumatic intracranial hemorrhage affecting left dominant side -I69263 Other paralytic syndrome following other nontraumatic intracranial hemorrhage affecting right non-dominant side -I69264 Other paralytic syndrome following other nontraumatic intracranial hemorrhage affecting left non-dominant side -I69265 Other paralytic syndrome following other nontraumatic intracranial hemorrhage, bilateral -I69269 Other paralytic syndrome following other nontraumatic intracranial hemorrhage affecting unspecified side -I69290 Apraxia following other nontraumatic intracranial hemorrhage -I69291 Dysphagia following other nontraumatic intracranial hemorrhage -I69292 Facial weakness following other nontraumatic intracranial hemorrhage -I69293 Ataxia following other nontraumatic intracranial hemorrhage -I69298 Other sequelae of other nontraumatic intracranial hemorrhage -I6930 Unspecified sequelae of cerebral infarction -I69310 Attention and concentration deficit following cerebral infarction -I69311 Memory deficit following cerebral infarction -I69312 Visuospatial deficit and spatial neglect following cerebral infarction -I69313 Psychomotor deficit following cerebral infarction -I69314 Frontal lobe and executive function deficit following cerebral infarction -I69315 Cognitive social or emotional deficit following cerebral infarction -I69318 Other symptoms and signs involving cognitive functions following cerebral infarction -I69319 Unspecified symptoms and signs involving cognitive functions following cerebral infarction -I69320 Aphasia following cerebral infarction -I69321 Dysphasia following cerebral infarction -I69322 Dysarthria following cerebral infarction -I69323 Fluency disorder following cerebral infarction -I69328 Other speech and language deficits following cerebral infarction -I69331 Monoplegia of upper limb following cerebral infarction affecting right dominant side -I69332 Monoplegia of upper limb following cerebral infarction affecting left dominant side -I69333 Monoplegia of upper limb following cerebral infarction affecting right non-dominant side -I69334 Monoplegia of upper limb following cerebral infarction affecting left non-dominant side -I69339 Monoplegia of upper limb following cerebral infarction affecting unspecified side -I69341 Monoplegia of lower limb following cerebral infarction affecting right dominant side -I69342 Monoplegia of lower limb following cerebral infarction affecting left dominant side -I69343 Monoplegia of lower limb following cerebral infarction affecting right non-dominant side -I69344 Monoplegia of lower limb following cerebral infarction affecting left non-dominant side -I69349 Monoplegia of lower limb following cerebral infarction affecting unspecified side -I69351 Hemiplegia and hemiparesis following cerebral infarction affecting right dominant side -I69352 Hemiplegia and hemiparesis following cerebral infarction affecting left dominant side -I69353 Hemiplegia and hemiparesis following cerebral infarction affecting right non-dominant side -I69354 Hemiplegia and hemiparesis following cerebral infarction affecting left non-dominant side -I69359 Hemiplegia and hemiparesis following cerebral infarction affecting unspecified side -I69361 Other paralytic syndrome following cerebral infarction affecting right dominant side -I69362 Other paralytic syndrome following cerebral infarction affecting left dominant side -I69363 Other paralytic syndrome following cerebral infarction affecting right non-dominant side -I69364 Other paralytic syndrome following cerebral infarction affecting left non-dominant side -I69365 Other paralytic syndrome following cerebral infarction, bilateral -I69369 Other paralytic syndrome following cerebral infarction affecting unspecified side -I69390 Apraxia following cerebral infarction -I69391 Dysphagia following cerebral infarction -I69392 Facial weakness following cerebral infarction -I69393 Ataxia following cerebral infarction -I69398 Other sequelae of cerebral infarction -I6980 Unspecified sequelae of other cerebrovascular disease -I69810 Attention and concentration deficit following other cerebrovascular disease -I69811 Memory deficit following other cerebrovascular disease -I69812 Visuospatial deficit and spatial neglect following other cerebrovascular disease -I69813 Psychomotor deficit following other cerebrovascular disease -I69814 Frontal lobe and executive function deficit following other cerebrovascular disease -I69815 Cognitive social or emotional deficit following other cerebrovascular disease -I69818 Other symptoms and signs involving cognitive functions following other cerebrovascular disease -I69819 Unspecified symptoms and signs involving cognitive functions following other cerebrovascular disease -I69820 Aphasia following other cerebrovascular disease -I69821 Dysphasia following other cerebrovascular disease -I69822 Dysarthria following other cerebrovascular disease -I69823 Fluency disorder following other cerebrovascular disease -I69828 Other speech and language deficits following other cerebrovascular disease -I69831 Monoplegia of upper limb following other cerebrovascular disease affecting right dominant side -I69832 Monoplegia of upper limb following other cerebrovascular disease affecting left dominant side -I69833 Monoplegia of upper limb following other cerebrovascular disease affecting right non-dominant side -I69834 Monoplegia of upper limb following other cerebrovascular disease affecting left non-dominant side -I69839 Monoplegia of upper limb following other cerebrovascular disease affecting unspecified side -I69841 Monoplegia of lower limb following other cerebrovascular disease affecting right dominant side -I69842 Monoplegia of lower limb following other cerebrovascular disease affecting left dominant side -I69843 Monoplegia of lower limb following other cerebrovascular disease affecting right non-dominant side -I69844 Monoplegia of lower limb following other cerebrovascular disease affecting left non-dominant side -I69849 Monoplegia of lower limb following other cerebrovascular disease affecting unspecified side -I69851 Hemiplegia and hemiparesis following other cerebrovascular disease affecting right dominant side -I69852 Hemiplegia and hemiparesis following other cerebrovascular disease affecting left dominant side -I69853 Hemiplegia and hemiparesis following other cerebrovascular disease affecting right non-dominant side -I69854 Hemiplegia and hemiparesis following other cerebrovascular disease affecting left non-dominant side -I69859 Hemiplegia and hemiparesis following other cerebrovascular disease affecting unspecified side -I69861 Other paralytic syndrome following other cerebrovascular disease affecting right dominant side -I69862 Other paralytic syndrome following other cerebrovascular disease affecting left dominant side -I69863 Other paralytic syndrome following other cerebrovascular disease affecting right non-dominant side -I69864 Other paralytic syndrome following other cerebrovascular disease affecting left non-dominant side -I69865 Other paralytic syndrome following other cerebrovascular disease, bilateral -I69869 Other paralytic syndrome following other cerebrovascular disease affecting unspecified side -I69890 Apraxia following other cerebrovascular disease -I69891 Dysphagia following other cerebrovascular disease -I69892 Facial weakness following other cerebrovascular disease -I69893 Ataxia following other cerebrovascular disease -I69898 Other sequelae of other cerebrovascular disease -I6990 Unspecified sequelae of unspecified cerebrovascular disease -I69910 Attention and concentration deficit following unspecified cerebrovascular disease -I69911 Memory deficit following unspecified cerebrovascular disease -I69912 Visuospatial deficit and spatial neglect following unspecified cerebrovascular disease -I69913 Psychomotor deficit following unspecified cerebrovascular disease -I69914 Frontal lobe and executive function deficit following unspecified cerebrovascular disease -I69915 Cognitive social or emotional deficit following unspecified cerebrovascular disease -I69918 Other symptoms and signs involving cognitive functions following unspecified cerebrovascular disease -I69919 Unspecified symptoms and signs involving cognitive functions following unspecified cerebrovascular disease -I69920 Aphasia following unspecified cerebrovascular disease -I69921 Dysphasia following unspecified cerebrovascular disease -I69922 Dysarthria following unspecified cerebrovascular disease -I69923 Fluency disorder following unspecified cerebrovascular disease -I69928 Other speech and language deficits following unspecified cerebrovascular disease -I69931 Monoplegia of upper limb following unspecified cerebrovascular disease affecting right dominant side -I69932 Monoplegia of upper limb following unspecified cerebrovascular disease affecting left dominant side -I69933 Monoplegia of upper limb following unspecified cerebrovascular disease affecting right non-dominant side -I69934 Monoplegia of upper limb following unspecified cerebrovascular disease affecting left non-dominant side -I69939 Monoplegia of upper limb following unspecified cerebrovascular disease affecting unspecified side -I69941 Monoplegia of lower limb following unspecified cerebrovascular disease affecting right dominant side -I69942 Monoplegia of lower limb following unspecified cerebrovascular disease affecting left dominant side -I69943 Monoplegia of lower limb following unspecified cerebrovascular disease affecting right non-dominant side -I69944 Monoplegia of lower limb following unspecified cerebrovascular disease affecting left non-dominant side -I69949 Monoplegia of lower limb following unspecified cerebrovascular disease affecting unspecified side -I69951 Hemiplegia and hemiparesis following unspecified cerebrovascular disease affecting right dominant side -I69952 Hemiplegia and hemiparesis following unspecified cerebrovascular disease affecting left dominant side -I69953 Hemiplegia and hemiparesis following unspecified cerebrovascular disease affecting right non-dominant side -I69954 Hemiplegia and hemiparesis following unspecified cerebrovascular disease affecting left non-dominant side -I69959 Hemiplegia and hemiparesis following unspecified cerebrovascular disease affecting unspecified side -I69961 Other paralytic syndrome following unspecified cerebrovascular disease affecting right dominant side -I69962 Other paralytic syndrome following unspecified cerebrovascular disease affecting left dominant side -I69963 Other paralytic syndrome following unspecified cerebrovascular disease affecting right non-dominant side -I69964 Other paralytic syndrome following unspecified cerebrovascular disease affecting left non-dominant side -I69965 Other paralytic syndrome following unspecified cerebrovascular disease, bilateral -I69969 Other paralytic syndrome following unspecified cerebrovascular disease affecting unspecified side -I69990 Apraxia following unspecified cerebrovascular disease -I69991 Dysphagia following unspecified cerebrovascular disease -I69992 Facial weakness following unspecified cerebrovascular disease -I69993 Ataxia following unspecified cerebrovascular disease -I69998 Other sequelae following unspecified cerebrovascular disease -I700 Atherosclerosis of aorta -I701 Atherosclerosis of renal artery -I70201 Unspecified atherosclerosis of native arteries of extremities, right leg -I70202 Unspecified atherosclerosis of native arteries of extremities, left leg -I70203 Unspecified atherosclerosis of native arteries of extremities, bilateral legs -I70208 Unspecified atherosclerosis of native arteries of extremities, other extremity -I70209 Unspecified atherosclerosis of native arteries of extremities, unspecified extremity -I70211 Atherosclerosis of native arteries of extremities with intermittent claudication, right leg -I70212 Atherosclerosis of native arteries of extremities with intermittent claudication, left leg -I70213 Atherosclerosis of native arteries of extremities with intermittent claudication, bilateral legs -I70218 Atherosclerosis of native arteries of extremities with intermittent claudication, other extremity -I70219 Atherosclerosis of native arteries of extremities with intermittent claudication, unspecified extremity -I70221 Atherosclerosis of native arteries of extremities with rest pain, right leg -I70222 Atherosclerosis of native arteries of extremities with rest pain, left leg -I70223 Atherosclerosis of native arteries of extremities with rest pain, bilateral legs -I70228 Atherosclerosis of native arteries of extremities with rest pain, other extremity -I70229 Atherosclerosis of native arteries of extremities with rest pain, unspecified extremity -I70231 Atherosclerosis of native arteries of right leg with ulceration of thigh -I70232 Atherosclerosis of native arteries of right leg with ulceration of calf -I70233 Atherosclerosis of native arteries of right leg with ulceration of ankle -I70234 Atherosclerosis of native arteries of right leg with ulceration of heel and midfoot -I70235 Atherosclerosis of native arteries of right leg with ulceration of other part of foot -I70238 Atherosclerosis of native arteries of right leg with ulceration of other part of lower right leg -I70239 Atherosclerosis of native arteries of right leg with ulceration of unspecified site -I70241 Atherosclerosis of native arteries of left leg with ulceration of thigh -I70242 Atherosclerosis of native arteries of left leg with ulceration of calf -I70243 Atherosclerosis of native arteries of left leg with ulceration of ankle -I70244 Atherosclerosis of native arteries of left leg with ulceration of heel and midfoot -I70245 Atherosclerosis of native arteries of left leg with ulceration of other part of foot -I70248 Atherosclerosis of native arteries of left leg with ulceration of other part of lower left leg -I70249 Atherosclerosis of native arteries of left leg with ulceration of unspecified site -I7025 Atherosclerosis of native arteries of other extremities with ulceration -I70261 Atherosclerosis of native arteries of extremities with gangrene, right leg -I70262 Atherosclerosis of native arteries of extremities with gangrene, left leg -I70263 Atherosclerosis of native arteries of extremities with gangrene, bilateral legs -I70268 Atherosclerosis of native arteries of extremities with gangrene, other extremity -I70269 Atherosclerosis of native arteries of extremities with gangrene, unspecified extremity -I70291 Other atherosclerosis of native arteries of extremities, right leg -I70292 Other atherosclerosis of native arteries of extremities, left leg -I70293 Other atherosclerosis of native arteries of extremities, bilateral legs -I70298 Other atherosclerosis of native arteries of extremities, other extremity -I70299 Other atherosclerosis of native arteries of extremities, unspecified extremity -I70301 Unspecified atherosclerosis of unspecified type of bypass graft(s) of the extremities, right leg -I70302 Unspecified atherosclerosis of unspecified type of bypass graft(s) of the extremities, left leg -I70303 Unspecified atherosclerosis of unspecified type of bypass graft(s) of the extremities, bilateral legs -I70308 Unspecified atherosclerosis of unspecified type of bypass graft(s) of the extremities, other extremity -I70309 Unspecified atherosclerosis of unspecified type of bypass graft(s) of the extremities, unspecified extremity -I70311 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with intermittent claudication, right leg -I70312 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with intermittent claudication, left leg -I70313 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with intermittent claudication, bilateral legs -I70318 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with intermittent claudication, other extremity -I70319 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with intermittent claudication, unspecified extremity -I70321 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with rest pain, right leg -I70322 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with rest pain, left leg -I70323 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with rest pain, bilateral legs -I70328 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with rest pain, other extremity -I70329 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with rest pain, unspecified extremity -I70331 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of thigh -I70332 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of calf -I70333 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of ankle -I70334 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of heel and midfoot -I70335 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of other part of foot -I70338 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of other part of lower leg -I70339 Atherosclerosis of unspecified type of bypass graft(s) of the right leg with ulceration of unspecified site -I70341 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of thigh -I70342 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of calf -I70343 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of ankle -I70344 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of heel and midfoot -I70345 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of other part of foot -I70348 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of other part of lower leg -I70349 Atherosclerosis of unspecified type of bypass graft(s) of the left leg with ulceration of unspecified site -I7035 Atherosclerosis of unspecified type of bypass graft(s) of other extremity with ulceration -I70361 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with gangrene, right leg -I70362 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with gangrene, left leg -I70363 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with gangrene, bilateral legs -I70368 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with gangrene, other extremity -I70369 Atherosclerosis of unspecified type of bypass graft(s) of the extremities with gangrene, unspecified extremity -I70391 Other atherosclerosis of unspecified type of bypass graft(s) of the extremities, right leg -I70392 Other atherosclerosis of unspecified type of bypass graft(s) of the extremities, left leg -I70393 Other atherosclerosis of unspecified type of bypass graft(s) of the extremities, bilateral legs -I70398 Other atherosclerosis of unspecified type of bypass graft(s) of the extremities, other extremity -I70399 Other atherosclerosis of unspecified type of bypass graft(s) of the extremities, unspecified extremity -I70401 Unspecified atherosclerosis of autologous vein bypass graft(s) of the extremities, right leg -I70402 Unspecified atherosclerosis of autologous vein bypass graft(s) of the extremities, left leg -I70403 Unspecified atherosclerosis of autologous vein bypass graft(s) of the extremities, bilateral legs -I70408 Unspecified atherosclerosis of autologous vein bypass graft(s) of the extremities, other extremity -I70409 Unspecified atherosclerosis of autologous vein bypass graft(s) of the extremities, unspecified extremity -I70411 Atherosclerosis of autologous vein bypass graft(s) of the extremities with intermittent claudication, right leg -I70412 Atherosclerosis of autologous vein bypass graft(s) of the extremities with intermittent claudication, left leg -I70413 Atherosclerosis of autologous vein bypass graft(s) of the extremities with intermittent claudication, bilateral legs -I70418 Atherosclerosis of autologous vein bypass graft(s) of the extremities with intermittent claudication, other extremity -I70419 Atherosclerosis of autologous vein bypass graft(s) of the extremities with intermittent claudication, unspecified extremity -I70421 Atherosclerosis of autologous vein bypass graft(s) of the extremities with rest pain, right leg -I70422 Atherosclerosis of autologous vein bypass graft(s) of the extremities with rest pain, left leg -I70423 Atherosclerosis of autologous vein bypass graft(s) of the extremities with rest pain, bilateral legs -I70428 Atherosclerosis of autologous vein bypass graft(s) of the extremities with rest pain, other extremity -I70429 Atherosclerosis of autologous vein bypass graft(s) of the extremities with rest pain, unspecified extremity -I70431 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of thigh -I70432 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of calf -I70433 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of ankle -I70434 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of heel and midfoot -I70435 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of other part of foot -I70438 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of other part of lower leg -I70439 Atherosclerosis of autologous vein bypass graft(s) of the right leg with ulceration of unspecified site -I70441 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of thigh -I70442 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of calf -I70443 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of ankle -I70444 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of heel and midfoot -I70445 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of other part of foot -I70448 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of other part of lower leg -I70449 Atherosclerosis of autologous vein bypass graft(s) of the left leg with ulceration of unspecified site -I7045 Atherosclerosis of autologous vein bypass graft(s) of other extremity with ulceration -I70461 Atherosclerosis of autologous vein bypass graft(s) of the extremities with gangrene, right leg -I70462 Atherosclerosis of autologous vein bypass graft(s) of the extremities with gangrene, left leg -I70463 Atherosclerosis of autologous vein bypass graft(s) of the extremities with gangrene, bilateral legs -I70468 Atherosclerosis of autologous vein bypass graft(s) of the extremities with gangrene, other extremity -I70469 Atherosclerosis of autologous vein bypass graft(s) of the extremities with gangrene, unspecified extremity -I70491 Other atherosclerosis of autologous vein bypass graft(s) of the extremities, right leg -I70492 Other atherosclerosis of autologous vein bypass graft(s) of the extremities, left leg -I70493 Other atherosclerosis of autologous vein bypass graft(s) of the extremities, bilateral legs -I70498 Other atherosclerosis of autologous vein bypass graft(s) of the extremities, other extremity -I70499 Other atherosclerosis of autologous vein bypass graft(s) of the extremities, unspecified extremity -I70501 Unspecified atherosclerosis of nonautologous biological bypass graft(s) of the extremities, right leg -I70502 Unspecified atherosclerosis of nonautologous biological bypass graft(s) of the extremities, left leg -I70503 Unspecified atherosclerosis of nonautologous biological bypass graft(s) of the extremities, bilateral legs -I70508 Unspecified atherosclerosis of nonautologous biological bypass graft(s) of the extremities, other extremity -I70509 Unspecified atherosclerosis of nonautologous biological bypass graft(s) of the extremities, unspecified extremity -I70511 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with intermittent claudication, right leg -I70512 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with intermittent claudication, left leg -I70513 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with intermittent claudication, bilateral legs -I70518 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with intermittent claudication, other extremity -I70519 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with intermittent claudication, unspecified extremity -I70521 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with rest pain, right leg -I70522 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with rest pain, left leg -I70523 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with rest pain, bilateral legs -I70528 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with rest pain, other extremity -I70529 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with rest pain, unspecified extremity -I70531 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of thigh -I70532 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of calf -I70533 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of ankle -I70534 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of heel and midfoot -I70535 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of other part of foot -I70538 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of other part of lower leg -I70539 Atherosclerosis of nonautologous biological bypass graft(s) of the right leg with ulceration of unspecified site -I70541 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of thigh -I70542 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of calf -I70543 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of ankle -I70544 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of heel and midfoot -I70545 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of other part of foot -I70548 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of other part of lower leg -I70549 Atherosclerosis of nonautologous biological bypass graft(s) of the left leg with ulceration of unspecified site -I7055 Atherosclerosis of nonautologous biological bypass graft(s) of other extremity with ulceration -I70561 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with gangrene, right leg -I70562 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with gangrene, left leg -I70563 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with gangrene, bilateral legs -I70568 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with gangrene, other extremity -I70569 Atherosclerosis of nonautologous biological bypass graft(s) of the extremities with gangrene, unspecified extremity -I70591 Other atherosclerosis of nonautologous biological bypass graft(s) of the extremities, right leg -I70592 Other atherosclerosis of nonautologous biological bypass graft(s) of the extremities, left leg -I70593 Other atherosclerosis of nonautologous biological bypass graft(s) of the extremities, bilateral legs -I70598 Other atherosclerosis of nonautologous biological bypass graft(s) of the extremities, other extremity -I70599 Other atherosclerosis of nonautologous biological bypass graft(s) of the extremities, unspecified extremity -I70601 Unspecified atherosclerosis of nonbiological bypass graft(s) of the extremities, right leg -I70602 Unspecified atherosclerosis of nonbiological bypass graft(s) of the extremities, left leg -I70603 Unspecified atherosclerosis of nonbiological bypass graft(s) of the extremities, bilateral legs -I70608 Unspecified atherosclerosis of nonbiological bypass graft(s) of the extremities, other extremity -I70609 Unspecified atherosclerosis of nonbiological bypass graft(s) of the extremities, unspecified extremity -I70611 Atherosclerosis of nonbiological bypass graft(s) of the extremities with intermittent claudication, right leg -I70612 Atherosclerosis of nonbiological bypass graft(s) of the extremities with intermittent claudication, left leg -I70613 Atherosclerosis of nonbiological bypass graft(s) of the extremities with intermittent claudication, bilateral legs -I70618 Atherosclerosis of nonbiological bypass graft(s) of the extremities with intermittent claudication, other extremity -I70619 Atherosclerosis of nonbiological bypass graft(s) of the extremities with intermittent claudication, unspecified extremity -I70621 Atherosclerosis of nonbiological bypass graft(s) of the extremities with rest pain, right leg -I70622 Atherosclerosis of nonbiological bypass graft(s) of the extremities with rest pain, left leg -I70623 Atherosclerosis of nonbiological bypass graft(s) of the extremities with rest pain, bilateral legs -I70628 Atherosclerosis of nonbiological bypass graft(s) of the extremities with rest pain, other extremity -I70629 Atherosclerosis of nonbiological bypass graft(s) of the extremities with rest pain, unspecified extremity -I70631 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of thigh -I70632 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of calf -I70633 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of ankle -I70634 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of heel and midfoot -I70635 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of other part of foot -I70638 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of other part of lower leg -I70639 Atherosclerosis of nonbiological bypass graft(s) of the right leg with ulceration of unspecified site -I70641 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of thigh -I70642 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of calf -I70643 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of ankle -I70644 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of heel and midfoot -I70645 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of other part of foot -I70648 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of other part of lower leg -I70649 Atherosclerosis of nonbiological bypass graft(s) of the left leg with ulceration of unspecified site -I7065 Atherosclerosis of nonbiological bypass graft(s) of other extremity with ulceration -I70661 Atherosclerosis of nonbiological bypass graft(s) of the extremities with gangrene, right leg -I70662 Atherosclerosis of nonbiological bypass graft(s) of the extremities with gangrene, left leg -I70663 Atherosclerosis of nonbiological bypass graft(s) of the extremities with gangrene, bilateral legs -I70668 Atherosclerosis of nonbiological bypass graft(s) of the extremities with gangrene, other extremity -I70669 Atherosclerosis of nonbiological bypass graft(s) of the extremities with gangrene, unspecified extremity -I70691 Other atherosclerosis of nonbiological bypass graft(s) of the extremities, right leg -I70692 Other atherosclerosis of nonbiological bypass graft(s) of the extremities, left leg -I70693 Other atherosclerosis of nonbiological bypass graft(s) of the extremities, bilateral legs -I70698 Other atherosclerosis of nonbiological bypass graft(s) of the extremities, other extremity -I70699 Other atherosclerosis of nonbiological bypass graft(s) of the extremities, unspecified extremity -I70701 Unspecified atherosclerosis of other type of bypass graft(s) of the extremities, right leg -I70702 Unspecified atherosclerosis of other type of bypass graft(s) of the extremities, left leg -I70703 Unspecified atherosclerosis of other type of bypass graft(s) of the extremities, bilateral legs -I70708 Unspecified atherosclerosis of other type of bypass graft(s) of the extremities, other extremity -I70709 Unspecified atherosclerosis of other type of bypass graft(s) of the extremities, unspecified extremity -I70711 Atherosclerosis of other type of bypass graft(s) of the extremities with intermittent claudication, right leg -I70712 Atherosclerosis of other type of bypass graft(s) of the extremities with intermittent claudication, left leg -I70713 Atherosclerosis of other type of bypass graft(s) of the extremities with intermittent claudication, bilateral legs -I70718 Atherosclerosis of other type of bypass graft(s) of the extremities with intermittent claudication, other extremity -I70719 Atherosclerosis of other type of bypass graft(s) of the extremities with intermittent claudication, unspecified extremity -I70721 Atherosclerosis of other type of bypass graft(s) of the extremities with rest pain, right leg -I70722 Atherosclerosis of other type of bypass graft(s) of the extremities with rest pain, left leg -I70723 Atherosclerosis of other type of bypass graft(s) of the extremities with rest pain, bilateral legs -I70728 Atherosclerosis of other type of bypass graft(s) of the extremities with rest pain, other extremity -I70729 Atherosclerosis of other type of bypass graft(s) of the extremities with rest pain, unspecified extremity -I70731 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of thigh -I70732 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of calf -I70733 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of ankle -I70734 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of heel and midfoot -I70735 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of other part of foot -I70738 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of other part of lower leg -I70739 Atherosclerosis of other type of bypass graft(s) of the right leg with ulceration of unspecified site -I70741 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of thigh -I70742 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of calf -I70743 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of ankle -I70744 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of heel and midfoot -I70745 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of other part of foot -I70748 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of other part of lower leg -I70749 Atherosclerosis of other type of bypass graft(s) of the left leg with ulceration of unspecified site -I7075 Atherosclerosis of other type of bypass graft(s) of other extremity with ulceration -I70761 Atherosclerosis of other type of bypass graft(s) of the extremities with gangrene, right leg -I70762 Atherosclerosis of other type of bypass graft(s) of the extremities with gangrene, left leg -I70763 Atherosclerosis of other type of bypass graft(s) of the extremities with gangrene, bilateral legs -I70768 Atherosclerosis of other type of bypass graft(s) of the extremities with gangrene, other extremity -I70769 Atherosclerosis of other type of bypass graft(s) of the extremities with gangrene, unspecified extremity -I70791 Other atherosclerosis of other type of bypass graft(s) of the extremities, right leg -I70792 Other atherosclerosis of other type of bypass graft(s) of the extremities, left leg -I70793 Other atherosclerosis of other type of bypass graft(s) of the extremities, bilateral legs -I70798 Other atherosclerosis of other type of bypass graft(s) of the extremities, other extremity -I70799 Other atherosclerosis of other type of bypass graft(s) of the extremities, unspecified extremity -I708 Atherosclerosis of other arteries -I7090 Unspecified atherosclerosis -I7091 Generalized atherosclerosis -I7092 Chronic total occlusion of artery of the extremities -I7100 Dissection of unspecified site of aorta -I7101 Dissection of thoracic aorta -I7102 Dissection of abdominal aorta -I7103 Dissection of thoracoabdominal aorta -I711 Thoracic aortic aneurysm, ruptured -I712 Thoracic aortic aneurysm, without rupture -I713 Abdominal aortic aneurysm, ruptured -I714 Abdominal aortic aneurysm, without rupture -I715 Thoracoabdominal aortic aneurysm, ruptured -I716 Thoracoabdominal aortic aneurysm, without rupture -I718 Aortic aneurysm of unspecified site, ruptured -I719 Aortic aneurysm of unspecified site, without rupture -I720 Aneurysm of carotid artery -I721 Aneurysm of artery of upper extremity -I722 Aneurysm of renal artery -I723 Aneurysm of iliac artery -I724 Aneurysm of artery of lower extremity -I725 Aneurysm of other precerebral arteries -I726 Aneurysm of vertebral artery -I728 Aneurysm of other specified arteries -I729 Aneurysm of unspecified site -I7300 Raynaud's syndrome without gangrene -I7301 Raynaud's syndrome with gangrene -I731 Thromboangiitis obliterans [Buerger's disease] -I7381 Erythromelalgia -I7389 Other specified peripheral vascular diseases -I739 Peripheral vascular disease, unspecified -I7401 Saddle embolus of abdominal aorta -I7409 Other arterial embolism and thrombosis of abdominal aorta -I7410 Embolism and thrombosis of unspecified parts of aorta -I7411 Embolism and thrombosis of thoracic aorta -I7419 Embolism and thrombosis of other parts of aorta -I742 Embolism and thrombosis of arteries of the upper extremities -I743 Embolism and thrombosis of arteries of the lower extremities -I744 Embolism and thrombosis of arteries of extremities, unspecified -I745 Embolism and thrombosis of iliac artery -I748 Embolism and thrombosis of other arteries -I749 Embolism and thrombosis of unspecified artery -I75011 Atheroembolism of right upper extremity -I75012 Atheroembolism of left upper extremity -I75013 Atheroembolism of bilateral upper extremities -I75019 Atheroembolism of unspecified upper extremity -I75021 Atheroembolism of right lower extremity -I75022 Atheroembolism of left lower extremity -I75023 Atheroembolism of bilateral lower extremities -I75029 Atheroembolism of unspecified lower extremity -I7581 Atheroembolism of kidney -I7589 Atheroembolism of other site -I76 Septic arterial embolism -I770 Arteriovenous fistula, acquired -I771 Stricture of artery -I772 Rupture of artery -I773 Arterial fibromuscular dysplasia -I774 Celiac artery compression syndrome -I775 Necrosis of artery -I776 Arteritis, unspecified -I7770 Dissection of unspecified artery -I7771 Dissection of carotid artery -I7772 Dissection of iliac artery -I7773 Dissection of renal artery -I7774 Dissection of vertebral artery -I7775 Dissection of other precerebral arteries -I7776 Dissection of artery of upper extremity -I7777 Dissection of artery of lower extremity -I7779 Dissection of other specified artery -I77810 Thoracic aortic ectasia -I77811 Abdominal aortic ectasia -I77812 Thoracoabdominal aortic ectasia -I77819 Aortic ectasia, unspecified site -I7789 Other specified disorders of arteries and arterioles -I779 Disorder of arteries and arterioles, unspecified -I780 Hereditary hemorrhagic telangiectasia -I781 Nevus, non-neoplastic -I788 Other diseases of capillaries -I789 Disease of capillaries, unspecified -I790 Aneurysm of aorta in diseases classified elsewhere -I791 Aortitis in diseases classified elsewhere -I798 Other disorders of arteries, arterioles and capillaries in diseases classified elsewhere -I8000 Phlebitis and thrombophlebitis of superficial vessels of unspecified lower extremity -I8001 Phlebitis and thrombophlebitis of superficial vessels of right lower extremity -I8002 Phlebitis and thrombophlebitis of superficial vessels of left lower extremity -I8003 Phlebitis and thrombophlebitis of superficial vessels of lower extremities, bilateral -I8010 Phlebitis and thrombophlebitis of unspecified femoral vein -I8011 Phlebitis and thrombophlebitis of right femoral vein -I8012 Phlebitis and thrombophlebitis of left femoral vein -I8013 Phlebitis and thrombophlebitis of femoral vein, bilateral -I80201 Phlebitis and thrombophlebitis of unspecified deep vessels of right lower extremity -I80202 Phlebitis and thrombophlebitis of unspecified deep vessels of left lower extremity -I80203 Phlebitis and thrombophlebitis of unspecified deep vessels of lower extremities, bilateral -I80209 Phlebitis and thrombophlebitis of unspecified deep vessels of unspecified lower extremity -I80211 Phlebitis and thrombophlebitis of right iliac vein -I80212 Phlebitis and thrombophlebitis of left iliac vein -I80213 Phlebitis and thrombophlebitis of iliac vein, bilateral -I80219 Phlebitis and thrombophlebitis of unspecified iliac vein -I80221 Phlebitis and thrombophlebitis of right popliteal vein -I80222 Phlebitis and thrombophlebitis of left popliteal vein -I80223 Phlebitis and thrombophlebitis of popliteal vein, bilateral -I80229 Phlebitis and thrombophlebitis of unspecified popliteal vein -I80231 Phlebitis and thrombophlebitis of right tibial vein -I80232 Phlebitis and thrombophlebitis of left tibial vein -I80233 Phlebitis and thrombophlebitis of tibial vein, bilateral -I80239 Phlebitis and thrombophlebitis of unspecified tibial vein -I80291 Phlebitis and thrombophlebitis of other deep vessels of right lower extremity -I80292 Phlebitis and thrombophlebitis of other deep vessels of left lower extremity -I80293 Phlebitis and thrombophlebitis of other deep vessels of lower extremity, bilateral -I80299 Phlebitis and thrombophlebitis of other deep vessels of unspecified lower extremity -I803 Phlebitis and thrombophlebitis of lower extremities, unspecified -I808 Phlebitis and thrombophlebitis of other sites -I809 Phlebitis and thrombophlebitis of unspecified site -I81 Portal vein thrombosis -I820 Budd-Chiari syndrome -I821 Thrombophlebitis migrans -I82210 Acute embolism and thrombosis of superior vena cava -I82211 Chronic embolism and thrombosis of superior vena cava -I82220 Acute embolism and thrombosis of inferior vena cava -I82221 Chronic embolism and thrombosis of inferior vena cava -I82290 Acute embolism and thrombosis of other thoracic veins -I82291 Chronic embolism and thrombosis of other thoracic veins -I823 Embolism and thrombosis of renal vein -I82401 Acute embolism and thrombosis of unspecified deep veins of right lower extremity -I82402 Acute embolism and thrombosis of unspecified deep veins of left lower extremity -I82403 Acute embolism and thrombosis of unspecified deep veins of lower extremity, bilateral -I82409 Acute embolism and thrombosis of unspecified deep veins of unspecified lower extremity -I82411 Acute embolism and thrombosis of right femoral vein -I82412 Acute embolism and thrombosis of left femoral vein -I82413 Acute embolism and thrombosis of femoral vein, bilateral -I82419 Acute embolism and thrombosis of unspecified femoral vein -I82421 Acute embolism and thrombosis of right iliac vein -I82422 Acute embolism and thrombosis of left iliac vein -I82423 Acute embolism and thrombosis of iliac vein, bilateral -I82429 Acute embolism and thrombosis of unspecified iliac vein -I82431 Acute embolism and thrombosis of right popliteal vein -I82432 Acute embolism and thrombosis of left popliteal vein -I82433 Acute embolism and thrombosis of popliteal vein, bilateral -I82439 Acute embolism and thrombosis of unspecified popliteal vein -I82441 Acute embolism and thrombosis of right tibial vein -I82442 Acute embolism and thrombosis of left tibial vein -I82443 Acute embolism and thrombosis of tibial vein, bilateral -I82449 Acute embolism and thrombosis of unspecified tibial vein -I82491 Acute embolism and thrombosis of other specified deep vein of right lower extremity -I82492 Acute embolism and thrombosis of other specified deep vein of left lower extremity -I82493 Acute embolism and thrombosis of other specified deep vein of lower extremity, bilateral -I82499 Acute embolism and thrombosis of other specified deep vein of unspecified lower extremity -I824Y1 Acute embolism and thrombosis of unspecified deep veins of right proximal lower extremity -I824Y2 Acute embolism and thrombosis of unspecified deep veins of left proximal lower extremity -I824Y3 Acute embolism and thrombosis of unspecified deep veins of proximal lower extremity, bilateral -I824Y9 Acute embolism and thrombosis of unspecified deep veins of unspecified proximal lower extremity -I824Z1 Acute embolism and thrombosis of unspecified deep veins of right distal lower extremity -I824Z2 Acute embolism and thrombosis of unspecified deep veins of left distal lower extremity -I824Z3 Acute embolism and thrombosis of unspecified deep veins of distal lower extremity, bilateral -I824Z9 Acute embolism and thrombosis of unspecified deep veins of unspecified distal lower extremity -I82501 Chronic embolism and thrombosis of unspecified deep veins of right lower extremity -I82502 Chronic embolism and thrombosis of unspecified deep veins of left lower extremity -I82503 Chronic embolism and thrombosis of unspecified deep veins of lower extremity, bilateral -I82509 Chronic embolism and thrombosis of unspecified deep veins of unspecified lower extremity -I82511 Chronic embolism and thrombosis of right femoral vein -I82512 Chronic embolism and thrombosis of left femoral vein -I82513 Chronic embolism and thrombosis of femoral vein, bilateral -I82519 Chronic embolism and thrombosis of unspecified femoral vein -I82521 Chronic embolism and thrombosis of right iliac vein -I82522 Chronic embolism and thrombosis of left iliac vein -I82523 Chronic embolism and thrombosis of iliac vein, bilateral -I82529 Chronic embolism and thrombosis of unspecified iliac vein -I82531 Chronic embolism and thrombosis of right popliteal vein -I82532 Chronic embolism and thrombosis of left popliteal vein -I82533 Chronic embolism and thrombosis of popliteal vein, bilateral -I82539 Chronic embolism and thrombosis of unspecified popliteal vein -I82541 Chronic embolism and thrombosis of right tibial vein -I82542 Chronic embolism and thrombosis of left tibial vein -I82543 Chronic embolism and thrombosis of tibial vein, bilateral -I82549 Chronic embolism and thrombosis of unspecified tibial vein -I82591 Chronic embolism and thrombosis of other specified deep vein of right lower extremity -I82592 Chronic embolism and thrombosis of other specified deep vein of left lower extremity -I82593 Chronic embolism and thrombosis of other specified deep vein of lower extremity, bilateral -I82599 Chronic embolism and thrombosis of other specified deep vein of unspecified lower extremity -I825Y1 Chronic embolism and thrombosis of unspecified deep veins of right proximal lower extremity -I825Y2 Chronic embolism and thrombosis of unspecified deep veins of left proximal lower extremity -I825Y3 Chronic embolism and thrombosis of unspecified deep veins of proximal lower extremity, bilateral -I825Y9 Chronic embolism and thrombosis of unspecified deep veins of unspecified proximal lower extremity -I825Z1 Chronic embolism and thrombosis of unspecified deep veins of right distal lower extremity -I825Z2 Chronic embolism and thrombosis of unspecified deep veins of left distal lower extremity -I825Z3 Chronic embolism and thrombosis of unspecified deep veins of distal lower extremity, bilateral -I825Z9 Chronic embolism and thrombosis of unspecified deep veins of unspecified distal lower extremity -I82601 Acute embolism and thrombosis of unspecified veins of right upper extremity -I82602 Acute embolism and thrombosis of unspecified veins of left upper extremity -I82603 Acute embolism and thrombosis of unspecified veins of upper extremity, bilateral -I82609 Acute embolism and thrombosis of unspecified veins of unspecified upper extremity -I82611 Acute embolism and thrombosis of superficial veins of right upper extremity -I82612 Acute embolism and thrombosis of superficial veins of left upper extremity -I82613 Acute embolism and thrombosis of superficial veins of upper extremity, bilateral -I82619 Acute embolism and thrombosis of superficial veins of unspecified upper extremity -I82621 Acute embolism and thrombosis of deep veins of right upper extremity -I82622 Acute embolism and thrombosis of deep veins of left upper extremity -I82623 Acute embolism and thrombosis of deep veins of upper extremity, bilateral -I82629 Acute embolism and thrombosis of deep veins of unspecified upper extremity -I82701 Chronic embolism and thrombosis of unspecified veins of right upper extremity -I82702 Chronic embolism and thrombosis of unspecified veins of left upper extremity -I82703 Chronic embolism and thrombosis of unspecified veins of upper extremity, bilateral -I82709 Chronic embolism and thrombosis of unspecified veins of unspecified upper extremity -I82711 Chronic embolism and thrombosis of superficial veins of right upper extremity -I82712 Chronic embolism and thrombosis of superficial veins of left upper extremity -I82713 Chronic embolism and thrombosis of superficial veins of upper extremity, bilateral -I82719 Chronic embolism and thrombosis of superficial veins of unspecified upper extremity -I82721 Chronic embolism and thrombosis of deep veins of right upper extremity -I82722 Chronic embolism and thrombosis of deep veins of left upper extremity -I82723 Chronic embolism and thrombosis of deep veins of upper extremity, bilateral -I82729 Chronic embolism and thrombosis of deep veins of unspecified upper extremity -I82A11 Acute embolism and thrombosis of right axillary vein -I82A12 Acute embolism and thrombosis of left axillary vein -I82A13 Acute embolism and thrombosis of axillary vein, bilateral -I82A19 Acute embolism and thrombosis of unspecified axillary vein -I82A21 Chronic embolism and thrombosis of right axillary vein -I82A22 Chronic embolism and thrombosis of left axillary vein -I82A23 Chronic embolism and thrombosis of axillary vein, bilateral -I82A29 Chronic embolism and thrombosis of unspecified axillary vein -I82B11 Acute embolism and thrombosis of right subclavian vein -I82B12 Acute embolism and thrombosis of left subclavian vein -I82B13 Acute embolism and thrombosis of subclavian vein, bilateral -I82B19 Acute embolism and thrombosis of unspecified subclavian vein -I82B21 Chronic embolism and thrombosis of right subclavian vein -I82B22 Chronic embolism and thrombosis of left subclavian vein -I82B23 Chronic embolism and thrombosis of subclavian vein, bilateral -I82B29 Chronic embolism and thrombosis of unspecified subclavian vein -I82C11 Acute embolism and thrombosis of right internal jugular vein -I82C12 Acute embolism and thrombosis of left internal jugular vein -I82C13 Acute embolism and thrombosis of internal jugular vein, bilateral -I82C19 Acute embolism and thrombosis of unspecified internal jugular vein -I82C21 Chronic embolism and thrombosis of right internal jugular vein -I82C22 Chronic embolism and thrombosis of left internal jugular vein -I82C23 Chronic embolism and thrombosis of internal jugular vein, bilateral -I82C29 Chronic embolism and thrombosis of unspecified internal jugular vein -I82811 Embolism and thrombosis of superficial veins of right lower extremities -I82812 Embolism and thrombosis of superficial veins of left lower extremities -I82813 Embolism and thrombosis of superficial veins of lower extremities, bilateral -I82819 Embolism and thrombosis of superficial veins of unspecified lower extremities -I82890 Acute embolism and thrombosis of other specified veins -I82891 Chronic embolism and thrombosis of other specified veins -I8290 Acute embolism and thrombosis of unspecified vein -I8291 Chronic embolism and thrombosis of unspecified vein -I83001 Varicose veins of unspecified lower extremity with ulcer of thigh -I83002 Varicose veins of unspecified lower extremity with ulcer of calf -I83003 Varicose veins of unspecified lower extremity with ulcer of ankle -I83004 Varicose veins of unspecified lower extremity with ulcer of heel and midfoot -I83005 Varicose veins of unspecified lower extremity with ulcer other part of foot -I83008 Varicose veins of unspecified lower extremity with ulcer other part of lower leg -I83009 Varicose veins of unspecified lower extremity with ulcer of unspecified site -I83011 Varicose veins of right lower extremity with ulcer of thigh -I83012 Varicose veins of right lower extremity with ulcer of calf -I83013 Varicose veins of right lower extremity with ulcer of ankle -I83014 Varicose veins of right lower extremity with ulcer of heel and midfoot -I83015 Varicose veins of right lower extremity with ulcer other part of foot -I83018 Varicose veins of right lower extremity with ulcer other part of lower leg -I83019 Varicose veins of right lower extremity with ulcer of unspecified site -I83021 Varicose veins of left lower extremity with ulcer of thigh -I83022 Varicose veins of left lower extremity with ulcer of calf -I83023 Varicose veins of left lower extremity with ulcer of ankle -I83024 Varicose veins of left lower extremity with ulcer of heel and midfoot -I83025 Varicose veins of left lower extremity with ulcer other part of foot -I83028 Varicose veins of left lower extremity with ulcer other part of lower leg -I83029 Varicose veins of left lower extremity with ulcer of unspecified site -I8310 Varicose veins of unspecified lower extremity with inflammation -I8311 Varicose veins of right lower extremity with inflammation -I8312 Varicose veins of left lower extremity with inflammation -I83201 Varicose veins of unspecified lower extremity with both ulcer of thigh and inflammation -I83202 Varicose veins of unspecified lower extremity with both ulcer of calf and inflammation -I83203 Varicose veins of unspecified lower extremity with both ulcer of ankle and inflammation -I83204 Varicose veins of unspecified lower extremity with both ulcer of heel and midfoot and inflammation -I83205 Varicose veins of unspecified lower extremity with both ulcer other part of foot and inflammation -I83208 Varicose veins of unspecified lower extremity with both ulcer of other part of lower extremity and inflammation -I83209 Varicose veins of unspecified lower extremity with both ulcer of unspecified site and inflammation -I83211 Varicose veins of right lower extremity with both ulcer of thigh and inflammation -I83212 Varicose veins of right lower extremity with both ulcer of calf and inflammation -I83213 Varicose veins of right lower extremity with both ulcer of ankle and inflammation -I83214 Varicose veins of right lower extremity with both ulcer of heel and midfoot and inflammation -I83215 Varicose veins of right lower extremity with both ulcer other part of foot and inflammation -I83218 Varicose veins of right lower extremity with both ulcer of other part of lower extremity and inflammation -I83219 Varicose veins of right lower extremity with both ulcer of unspecified site and inflammation -I83221 Varicose veins of left lower extremity with both ulcer of thigh and inflammation -I83222 Varicose veins of left lower extremity with both ulcer of calf and inflammation -I83223 Varicose veins of left lower extremity with both ulcer of ankle and inflammation -I83224 Varicose veins of left lower extremity with both ulcer of heel and midfoot and inflammation -I83225 Varicose veins of left lower extremity with both ulcer other part of foot and inflammation -I83228 Varicose veins of left lower extremity with both ulcer of other part of lower extremity and inflammation -I83229 Varicose veins of left lower extremity with both ulcer of unspecified site and inflammation -I83811 Varicose veins of right lower extremities with pain -I83812 Varicose veins of left lower extremities with pain -I83813 Varicose veins of bilateral lower extremities with pain -I83819 Varicose veins of unspecified lower extremities with pain -I83891 Varicose veins of right lower extremities with other complications -I83892 Varicose veins of left lower extremities with other complications -I83893 Varicose veins of bilateral lower extremities with other complications -I83899 Varicose veins of unspecified lower extremities with other complications -I8390 Asymptomatic varicose veins of unspecified lower extremity -I8391 Asymptomatic varicose veins of right lower extremity -I8392 Asymptomatic varicose veins of left lower extremity -I8393 Asymptomatic varicose veins of bilateral lower extremities -I8500 Esophageal varices without bleeding -I8501 Esophageal varices with bleeding -I8510 Secondary esophageal varices without bleeding -I8511 Secondary esophageal varices with bleeding -I860 Sublingual varices -I861 Scrotal varices -I862 Pelvic varices -I863 Vulval varices -I864 Gastric varices -I868 Varicose veins of other specified sites -I87001 Postthrombotic syndrome without complications of right lower extremity -I87002 Postthrombotic syndrome without complications of left lower extremity -I87003 Postthrombotic syndrome without complications of bilateral lower extremity -I87009 Postthrombotic syndrome without complications of unspecified extremity -I87011 Postthrombotic syndrome with ulcer of right lower extremity -I87012 Postthrombotic syndrome with ulcer of left lower extremity -I87013 Postthrombotic syndrome with ulcer of bilateral lower extremity -I87019 Postthrombotic syndrome with ulcer of unspecified lower extremity -I87021 Postthrombotic syndrome with inflammation of right lower extremity -I87022 Postthrombotic syndrome with inflammation of left lower extremity -I87023 Postthrombotic syndrome with inflammation of bilateral lower extremity -I87029 Postthrombotic syndrome with inflammation of unspecified lower extremity -I87031 Postthrombotic syndrome with ulcer and inflammation of right lower extremity -I87032 Postthrombotic syndrome with ulcer and inflammation of left lower extremity -I87033 Postthrombotic syndrome with ulcer and inflammation of bilateral lower extremity -I87039 Postthrombotic syndrome with ulcer and inflammation of unspecified lower extremity -I87091 Postthrombotic syndrome with other complications of right lower extremity -I87092 Postthrombotic syndrome with other complications of left lower extremity -I87093 Postthrombotic syndrome with other complications of bilateral lower extremity -I87099 Postthrombotic syndrome with other complications of unspecified lower extremity -I871 Compression of vein -I872 Venous insufficiency (chronic) (peripheral) -I87301 Chronic venous hypertension (idiopathic) without complications of right lower extremity -I87302 Chronic venous hypertension (idiopathic) without complications of left lower extremity -I87303 Chronic venous hypertension (idiopathic) without complications of bilateral lower extremity -I87309 Chronic venous hypertension (idiopathic) without complications of unspecified lower extremity -I87311 Chronic venous hypertension (idiopathic) with ulcer of right lower extremity -I87312 Chronic venous hypertension (idiopathic) with ulcer of left lower extremity -I87313 Chronic venous hypertension (idiopathic) with ulcer of bilateral lower extremity -I87319 Chronic venous hypertension (idiopathic) with ulcer of unspecified lower extremity -I87321 Chronic venous hypertension (idiopathic) with inflammation of right lower extremity -I87322 Chronic venous hypertension (idiopathic) with inflammation of left lower extremity -I87323 Chronic venous hypertension (idiopathic) with inflammation of bilateral lower extremity -I87329 Chronic venous hypertension (idiopathic) with inflammation of unspecified lower extremity -I87331 Chronic venous hypertension (idiopathic) with ulcer and inflammation of right lower extremity -I87332 Chronic venous hypertension (idiopathic) with ulcer and inflammation of left lower extremity -I87333 Chronic venous hypertension (idiopathic) with ulcer and inflammation of bilateral lower extremity -I87339 Chronic venous hypertension (idiopathic) with ulcer and inflammation of unspecified lower extremity -I87391 Chronic venous hypertension (idiopathic) with other complications of right lower extremity -I87392 Chronic venous hypertension (idiopathic) with other complications of left lower extremity -I87393 Chronic venous hypertension (idiopathic) with other complications of bilateral lower extremity -I87399 Chronic venous hypertension (idiopathic) with other complications of unspecified lower extremity -I878 Other specified disorders of veins -I879 Disorder of vein, unspecified -I880 Nonspecific mesenteric lymphadenitis -I881 Chronic lymphadenitis, except mesenteric -I888 Other nonspecific lymphadenitis -I889 Nonspecific lymphadenitis, unspecified -I890 Lymphedema, not elsewhere classified -I891 Lymphangitis -I898 Other specified noninfective disorders of lymphatic vessels and lymph nodes -I899 Noninfective disorder of lymphatic vessels and lymph nodes, unspecified -I950 Idiopathic hypotension -I951 Orthostatic hypotension -I952 Hypotension due to drugs -I953 Hypotension of hemodialysis -I9581 Postprocedural hypotension -I9589 Other hypotension -I959 Hypotension, unspecified -I96 Gangrene, not elsewhere classified -I970 Postcardiotomy syndrome -I97110 Postprocedural cardiac insufficiency following cardiac surgery -I97111 Postprocedural cardiac insufficiency following other surgery -I97120 Postprocedural cardiac arrest following cardiac surgery -I97121 Postprocedural cardiac arrest following other surgery -I97130 Postprocedural heart failure following cardiac surgery -I97131 Postprocedural heart failure following other surgery -I97190 Other postprocedural cardiac functional disturbances following cardiac surgery -I97191 Other postprocedural cardiac functional disturbances following other surgery -I972 Postmastectomy lymphedema syndrome -I973 Postprocedural hypertension -I97410 Intraoperative hemorrhage and hematoma of a circulatory system organ or structure complicating a cardiac catheterization -I97411 Intraoperative hemorrhage and hematoma of a circulatory system organ or structure complicating a cardiac bypass -I97418 Intraoperative hemorrhage and hematoma of a circulatory system organ or structure complicating other circulatory system procedure -I9742 Intraoperative hemorrhage and hematoma of a circulatory system organ or structure complicating other procedure -I9751 Accidental puncture and laceration of a circulatory system organ or structure during a circulatory system procedure -I9752 Accidental puncture and laceration of a circulatory system organ or structure during other procedure -I97610 Postprocedural hemorrhage of a circulatory system organ or structure following a cardiac catheterization -I97611 Postprocedural hemorrhage of a circulatory system organ or structure following cardiac bypass -I97618 Postprocedural hemorrhage of a circulatory system organ or structure following other circulatory system procedure -I97620 Postprocedural hemorrhage of a circulatory system organ or structure following other procedure -I97621 Postprocedural hematoma of a circulatory system organ or structure following other procedure -I97622 Postprocedural seroma of a circulatory system organ or structure following other procedure -I97630 Postprocedural hematoma of a circulatory system organ or structure following a cardiac catheterization -I97631 Postprocedural hematoma of a circulatory system organ or structure following cardiac bypass -I97638 Postprocedural hematoma of a circulatory system organ or structure following other circulatory system procedure -I97640 Postprocedural seroma of a circulatory system organ or structure following a cardiac catheterization -I97641 Postprocedural seroma of a circulatory system organ or structure following cardiac bypass -I97648 Postprocedural seroma of a circulatory system organ or structure following other circulatory system procedure -I97710 Intraoperative cardiac arrest during cardiac surgery -I97711 Intraoperative cardiac arrest during other surgery -I97790 Other intraoperative cardiac functional disturbances during cardiac surgery -I97791 Other intraoperative cardiac functional disturbances during other surgery -I97810 Intraoperative cerebrovascular infarction during cardiac surgery -I97811 Intraoperative cerebrovascular infarction during other surgery -I97820 Postprocedural cerebrovascular infarction following cardiac surgery -I97821 Postprocedural cerebrovascular infarction following other surgery -I9788 Other intraoperative complications of the circulatory system, not elsewhere classified -I9789 Other postprocedural complications and disorders of the circulatory system, not elsewhere classified -I998 Other disorder of circulatory system -I999 Unspecified disorder of circulatory system -J00 Acute nasopharyngitis [common cold] -J0100 Acute maxillary sinusitis, unspecified -J0101 Acute recurrent maxillary sinusitis -J0110 Acute frontal sinusitis, unspecified -J0111 Acute recurrent frontal sinusitis -J0120 Acute ethmoidal sinusitis, unspecified -J0121 Acute recurrent ethmoidal sinusitis -J0130 Acute sphenoidal sinusitis, unspecified -J0131 Acute recurrent sphenoidal sinusitis -J0140 Acute pansinusitis, unspecified -J0141 Acute recurrent pansinusitis -J0180 Other acute sinusitis -J0181 Other acute recurrent sinusitis -J0190 Acute sinusitis, unspecified -J0191 Acute recurrent sinusitis, unspecified -J020 Streptococcal pharyngitis -J028 Acute pharyngitis due to other specified organisms -J029 Acute pharyngitis, unspecified -J0300 Acute streptococcal tonsillitis, unspecified -J0301 Acute recurrent streptococcal tonsillitis -J0380 Acute tonsillitis due to other specified organisms -J0381 Acute recurrent tonsillitis due to other specified organisms -J0390 Acute tonsillitis, unspecified -J0391 Acute recurrent tonsillitis, unspecified -J040 Acute laryngitis -J0410 Acute tracheitis without obstruction -J0411 Acute tracheitis with obstruction -J042 Acute laryngotracheitis -J0430 Supraglottitis, unspecified, without obstruction -J0431 Supraglottitis, unspecified, with obstruction -J050 Acute obstructive laryngitis [croup] -J0510 Acute epiglottitis without obstruction -J0511 Acute epiglottitis with obstruction -J060 Acute laryngopharyngitis -J069 Acute upper respiratory infection, unspecified -J09X1 Influenza due to identified novel influenza A virus with pneumonia -J09X2 Influenza due to identified novel influenza A virus with other respiratory manifestations -J09X3 Influenza due to identified novel influenza A virus with gastrointestinal manifestations -J09X9 Influenza due to identified novel influenza A virus with other manifestations -J1000 Influenza due to other identified influenza virus with unspecified type of pneumonia -J1001 Influenza due to other identified influenza virus with the same other identified influenza virus pneumonia -J1008 Influenza due to other identified influenza virus with other specified pneumonia -J101 Influenza due to other identified influenza virus with other respiratory manifestations -J102 Influenza due to other identified influenza virus with gastrointestinal manifestations -J1081 Influenza due to other identified influenza virus with encephalopathy -J1082 Influenza due to other identified influenza virus with myocarditis -J1083 Influenza due to other identified influenza virus with otitis media -J1089 Influenza due to other identified influenza virus with other manifestations -J1100 Influenza due to unidentified influenza virus with unspecified type of pneumonia -J1108 Influenza due to unidentified influenza virus with specified pneumonia -J111 Influenza due to unidentified influenza virus with other respiratory manifestations -J112 Influenza due to unidentified influenza virus with gastrointestinal manifestations -J1181 Influenza due to unidentified influenza virus with encephalopathy -J1182 Influenza due to unidentified influenza virus with myocarditis -J1183 Influenza due to unidentified influenza virus with otitis media -J1189 Influenza due to unidentified influenza virus with other manifestations -J120 Adenoviral pneumonia -J121 Respiratory syncytial virus pneumonia -J122 Parainfluenza virus pneumonia -J123 Human metapneumovirus pneumonia -J1281 Pneumonia due to SARS-associated coronavirus -J1289 Other viral pneumonia -J129 Viral pneumonia, unspecified -J13 Pneumonia due to Streptococcus pneumoniae -J14 Pneumonia due to Hemophilus influenzae -J150 Pneumonia due to Klebsiella pneumoniae -J151 Pneumonia due to Pseudomonas -J1520 Pneumonia due to staphylococcus, unspecified -J15211 Pneumonia due to Methicillin susceptible Staphylococcus aureus -J15212 Pneumonia due to Methicillin resistant Staphylococcus aureus -J1529 Pneumonia due to other staphylococcus -J153 Pneumonia due to streptococcus, group B -J154 Pneumonia due to other streptococci -J155 Pneumonia due to Escherichia coli -J156 Pneumonia due to other aerobic Gram-negative bacteria -J157 Pneumonia due to Mycoplasma pneumoniae -J158 Pneumonia due to other specified bacteria -J159 Unspecified bacterial pneumonia -J160 Chlamydial pneumonia -J168 Pneumonia due to other specified infectious organisms -J17 Pneumonia in diseases classified elsewhere -J180 Bronchopneumonia, unspecified organism -J181 Lobar pneumonia, unspecified organism -J182 Hypostatic pneumonia, unspecified organism -J188 Other pneumonia, unspecified organism -J189 Pneumonia, unspecified organism -J200 Acute bronchitis due to Mycoplasma pneumoniae -J201 Acute bronchitis due to Hemophilus influenzae -J202 Acute bronchitis due to streptococcus -J203 Acute bronchitis due to coxsackievirus -J204 Acute bronchitis due to parainfluenza virus -J205 Acute bronchitis due to respiratory syncytial virus -J206 Acute bronchitis due to rhinovirus -J207 Acute bronchitis due to echovirus -J208 Acute bronchitis due to other specified organisms -J209 Acute bronchitis, unspecified -J210 Acute bronchiolitis due to respiratory syncytial virus -J211 Acute bronchiolitis due to human metapneumovirus -J218 Acute bronchiolitis due to other specified organisms -J219 Acute bronchiolitis, unspecified -J22 Unspecified acute lower respiratory infection -J300 Vasomotor rhinitis -J301 Allergic rhinitis due to pollen -J302 Other seasonal allergic rhinitis -J305 Allergic rhinitis due to food -J3081 Allergic rhinitis due to animal (cat) (dog) hair and dander -J3089 Other allergic rhinitis -J309 Allergic rhinitis, unspecified -J310 Chronic rhinitis -J311 Chronic nasopharyngitis -J312 Chronic pharyngitis -J320 Chronic maxillary sinusitis -J321 Chronic frontal sinusitis -J322 Chronic ethmoidal sinusitis -J323 Chronic sphenoidal sinusitis -J324 Chronic pansinusitis -J328 Other chronic sinusitis -J329 Chronic sinusitis, unspecified -J330 Polyp of nasal cavity -J331 Polypoid sinus degeneration -J338 Other polyp of sinus -J339 Nasal polyp, unspecified -J340 Abscess, furuncle and carbuncle of nose -J341 Cyst and mucocele of nose and nasal sinus -J342 Deviated nasal septum -J343 Hypertrophy of nasal turbinates -J3481 Nasal mucositis (ulcerative) -J3489 Other specified disorders of nose and nasal sinuses -J349 Unspecified disorder of nose and nasal sinuses -J3501 Chronic tonsillitis -J3502 Chronic adenoiditis -J3503 Chronic tonsillitis and adenoiditis -J351 Hypertrophy of tonsils -J352 Hypertrophy of adenoids -J353 Hypertrophy of tonsils with hypertrophy of adenoids -J358 Other chronic diseases of tonsils and adenoids -J359 Chronic disease of tonsils and adenoids, unspecified -J36 Peritonsillar abscess -J370 Chronic laryngitis -J371 Chronic laryngotracheitis -J3800 Paralysis of vocal cords and larynx, unspecified -J3801 Paralysis of vocal cords and larynx, unilateral -J3802 Paralysis of vocal cords and larynx, bilateral -J381 Polyp of vocal cord and larynx -J382 Nodules of vocal cords -J383 Other diseases of vocal cords -J384 Edema of larynx -J385 Laryngeal spasm -J386 Stenosis of larynx -J387 Other diseases of larynx -J390 Retropharyngeal and parapharyngeal abscess -J391 Other abscess of pharynx -J392 Other diseases of pharynx -J393 Upper respiratory tract hypersensitivity reaction, site unspecified -J398 Other specified diseases of upper respiratory tract -J399 Disease of upper respiratory tract, unspecified -J40 Bronchitis, not specified as acute or chronic -J410 Simple chronic bronchitis -J411 Mucopurulent chronic bronchitis -J418 Mixed simple and mucopurulent chronic bronchitis -J42 Unspecified chronic bronchitis -J430 Unilateral pulmonary emphysema [MacLeod's syndrome] -J431 Panlobular emphysema -J432 Centrilobular emphysema -J438 Other emphysema -J439 Emphysema, unspecified -J440 Chronic obstructive pulmonary disease with acute lower respiratory infection -J441 Chronic obstructive pulmonary disease with (acute) exacerbation -J449 Chronic obstructive pulmonary disease, unspecified -J4520 Mild intermittent asthma, uncomplicated -J4521 Mild intermittent asthma with (acute) exacerbation -J4522 Mild intermittent asthma with status asthmaticus -J4530 Mild persistent asthma, uncomplicated -J4531 Mild persistent asthma with (acute) exacerbation -J4532 Mild persistent asthma with status asthmaticus -J4540 Moderate persistent asthma, uncomplicated -J4541 Moderate persistent asthma with (acute) exacerbation -J4542 Moderate persistent asthma with status asthmaticus -J4550 Severe persistent asthma, uncomplicated -J4551 Severe persistent asthma with (acute) exacerbation -J4552 Severe persistent asthma with status asthmaticus -J45901 Unspecified asthma with (acute) exacerbation -J45902 Unspecified asthma with status asthmaticus -J45909 Unspecified asthma, uncomplicated -J45990 Exercise induced bronchospasm -J45991 Cough variant asthma -J45998 Other asthma -J470 Bronchiectasis with acute lower respiratory infection -J471 Bronchiectasis with (acute) exacerbation -J479 Bronchiectasis, uncomplicated -J60 Coalworker's pneumoconiosis -J61 Pneumoconiosis due to asbestos and other mineral fibers -J620 Pneumoconiosis due to talc dust -J628 Pneumoconiosis due to other dust containing silica -J630 Aluminosis (of lung) -J631 Bauxite fibrosis (of lung) -J632 Berylliosis -J633 Graphite fibrosis (of lung) -J634 Siderosis -J635 Stannosis -J636 Pneumoconiosis due to other specified inorganic dusts -J64 Unspecified pneumoconiosis -J65 Pneumoconiosis associated with tuberculosis -J660 Byssinosis -J661 Flax-dressers' disease -J662 Cannabinosis -J668 Airway disease due to other specific organic dusts -J670 Farmer's lung -J671 Bagassosis -J672 Bird fancier's lung -J673 Suberosis -J674 Maltworker's lung -J675 Mushroom-worker's lung -J676 Maple-bark-stripper's lung -J677 Air conditioner and humidifier lung -J678 Hypersensitivity pneumonitis due to other organic dusts -J679 Hypersensitivity pneumonitis due to unspecified organic dust -J680 Bronchitis and pneumonitis due to chemicals, gases, fumes and vapors -J681 Pulmonary edema due to chemicals, gases, fumes and vapors -J682 Upper respiratory inflammation due to chemicals, gases, fumes and vapors, not elsewhere classified -J683 Other acute and subacute respiratory conditions due to chemicals, gases, fumes and vapors -J684 Chronic respiratory conditions due to chemicals, gases, fumes and vapors -J688 Other respiratory conditions due to chemicals, gases, fumes and vapors -J689 Unspecified respiratory condition due to chemicals, gases, fumes and vapors -J690 Pneumonitis due to inhalation of food and vomit -J691 Pneumonitis due to inhalation of oils and essences -J698 Pneumonitis due to inhalation of other solids and liquids -J700 Acute pulmonary manifestations due to radiation -J701 Chronic and other pulmonary manifestations due to radiation -J702 Acute drug-induced interstitial lung disorders -J703 Chronic drug-induced interstitial lung disorders -J704 Drug-induced interstitial lung disorders, unspecified -J705 Respiratory conditions due to smoke inhalation -J708 Respiratory conditions due to other specified external agents -J709 Respiratory conditions due to unspecified external agent -J80 Acute respiratory distress syndrome -J810 Acute pulmonary edema -J811 Chronic pulmonary edema -J82 Pulmonary eosinophilia, not elsewhere classified -J8401 Alveolar proteinosis -J8402 Pulmonary alveolar microlithiasis -J8403 Idiopathic pulmonary hemosiderosis -J8409 Other alveolar and parieto-alveolar conditions -J8410 Pulmonary fibrosis, unspecified -J84111 Idiopathic interstitial pneumonia, not otherwise specified -J84112 Idiopathic pulmonary fibrosis -J84113 Idiopathic non-specific interstitial pneumonitis -J84114 Acute interstitial pneumonitis -J84115 Respiratory bronchiolitis interstitial lung disease -J84116 Cryptogenic organizing pneumonia -J84117 Desquamative interstitial pneumonia -J8417 Other interstitial pulmonary diseases with fibrosis in diseases classified elsewhere -J842 Lymphoid interstitial pneumonia -J8481 Lymphangioleiomyomatosis -J8482 Adult pulmonary Langerhans cell histiocytosis -J8483 Surfactant mutations of the lung -J84841 Neuroendocrine cell hyperplasia of infancy -J84842 Pulmonary interstitial glycogenosis -J84843 Alveolar capillary dysplasia with vein misalignment -J84848 Other interstitial lung diseases of childhood -J8489 Other specified interstitial pulmonary diseases -J849 Interstitial pulmonary disease, unspecified -J850 Gangrene and necrosis of lung -J851 Abscess of lung with pneumonia -J852 Abscess of lung without pneumonia -J853 Abscess of mediastinum -J860 Pyothorax with fistula -J869 Pyothorax without fistula -J90 Pleural effusion, not elsewhere classified -J910 Malignant pleural effusion -J918 Pleural effusion in other conditions classified elsewhere -J920 Pleural plaque with presence of asbestos -J929 Pleural plaque without asbestos -J930 Spontaneous tension pneumothorax -J9311 Primary spontaneous pneumothorax -J9312 Secondary spontaneous pneumothorax -J9381 Chronic pneumothorax -J9382 Other air leak -J9383 Other pneumothorax -J939 Pneumothorax, unspecified -J940 Chylous effusion -J941 Fibrothorax -J942 Hemothorax -J948 Other specified pleural conditions -J949 Pleural condition, unspecified -J9500 Unspecified tracheostomy complication -J9501 Hemorrhage from tracheostomy stoma -J9502 Infection of tracheostomy stoma -J9503 Malfunction of tracheostomy stoma -J9504 Tracheo-esophageal fistula following tracheostomy -J9509 Other tracheostomy complication -J951 Acute pulmonary insufficiency following thoracic surgery -J952 Acute pulmonary insufficiency following nonthoracic surgery -J953 Chronic pulmonary insufficiency following surgery -J954 Chemical pneumonitis due to anesthesia -J955 Postprocedural subglottic stenosis -J9561 Intraoperative hemorrhage and hematoma of a respiratory system organ or structure complicating a respiratory system procedure -J9562 Intraoperative hemorrhage and hematoma of a respiratory system organ or structure complicating other procedure -J9571 Accidental puncture and laceration of a respiratory system organ or structure during a respiratory system procedure -J9572 Accidental puncture and laceration of a respiratory system organ or structure during other procedure -J95811 Postprocedural pneumothorax -J95812 Postprocedural air leak -J95821 Acute postprocedural respiratory failure -J95822 Acute and chronic postprocedural respiratory failure -J95830 Postprocedural hemorrhage of a respiratory system organ or structure following a respiratory system procedure -J95831 Postprocedural hemorrhage of a respiratory system organ or structure following other procedure -J9584 Transfusion-related acute lung injury (TRALI) -J95850 Mechanical complication of respirator -J95851 Ventilator associated pneumonia -J95859 Other complication of respirator [ventilator] -J95860 Postprocedural hematoma of a respiratory system organ or structure following a respiratory system procedure -J95861 Postprocedural hematoma of a respiratory system organ or structure following other procedure -J95862 Postprocedural seroma of a respiratory system organ or structure following a respiratory system procedure -J95863 Postprocedural seroma of a respiratory system organ or structure following other procedure -J9588 Other intraoperative complications of respiratory system, not elsewhere classified -J9589 Other postprocedural complications and disorders of respiratory system, not elsewhere classified -J9600 Acute respiratory failure, unspecified whether with hypoxia or hypercapnia -J9601 Acute respiratory failure with hypoxia -J9602 Acute respiratory failure with hypercapnia -J9610 Chronic respiratory failure, unspecified whether with hypoxia or hypercapnia -J9611 Chronic respiratory failure with hypoxia -J9612 Chronic respiratory failure with hypercapnia -J9620 Acute and chronic respiratory failure, unspecified whether with hypoxia or hypercapnia -J9621 Acute and chronic respiratory failure with hypoxia -J9622 Acute and chronic respiratory failure with hypercapnia -J9690 Respiratory failure, unspecified, unspecified whether with hypoxia or hypercapnia -J9691 Respiratory failure, unspecified with hypoxia -J9692 Respiratory failure, unspecified with hypercapnia -J9801 Acute bronchospasm -J9809 Other diseases of bronchus, not elsewhere classified -J9811 Atelectasis -J9819 Other pulmonary collapse -J982 Interstitial emphysema -J983 Compensatory emphysema -J984 Other disorders of lung -J9851 Mediastinitis -J9859 Other diseases of mediastinum, not elsewhere classified -J986 Disorders of diaphragm -J988 Other specified respiratory disorders -J989 Respiratory disorder, unspecified -J99 Respiratory disorders in diseases classified elsewhere -K000 Anodontia -K001 Supernumerary teeth -K002 Abnormalities of size and form of teeth -K003 Mottled teeth -K004 Disturbances in tooth formation -K005 Hereditary disturbances in tooth structure, not elsewhere classified -K006 Disturbances in tooth eruption -K007 Teething syndrome -K008 Other disorders of tooth development -K009 Disorder of tooth development, unspecified -K010 Embedded teeth -K011 Impacted teeth -K023 Arrested dental caries -K0251 Dental caries on pit and fissure surface limited to enamel -K0252 Dental caries on pit and fissure surface penetrating into dentin -K0253 Dental caries on pit and fissure surface penetrating into pulp -K0261 Dental caries on smooth surface limited to enamel -K0262 Dental caries on smooth surface penetrating into dentin -K0263 Dental caries on smooth surface penetrating into pulp -K027 Dental root caries -K029 Dental caries, unspecified -K030 Excessive attrition of teeth -K031 Abrasion of teeth -K032 Erosion of teeth -K033 Pathological resorption of teeth -K034 Hypercementosis -K035 Ankylosis of teeth -K036 Deposits [accretions] on teeth -K037 Posteruptive color changes of dental hard tissues -K0381 Cracked tooth -K0389 Other specified diseases of hard tissues of teeth -K039 Disease of hard tissues of teeth, unspecified -K0401 Reversible pulpitis -K0402 Irreversible pulpitis -K041 Necrosis of pulp -K042 Pulp degeneration -K043 Abnormal hard tissue formation in pulp -K044 Acute apical periodontitis of pulpal origin -K045 Chronic apical periodontitis -K046 Periapical abscess with sinus -K047 Periapical abscess without sinus -K048 Radicular cyst -K0490 Unspecified diseases of pulp and periapical tissues -K0499 Other diseases of pulp and periapical tissues -K0500 Acute gingivitis, plaque induced -K0501 Acute gingivitis, non-plaque induced -K0510 Chronic gingivitis, plaque induced -K0511 Chronic gingivitis, non-plaque induced -K0520 Aggressive periodontitis, unspecified -K05211 Aggressive periodontitis, localized, slight -K05212 Aggressive periodontitis, localized, moderate -K05213 Aggressive periodontitis, localized, severe -K05219 Aggressive periodontitis, localized, unspecified severity -K05221 Aggressive periodontitis, generalized, slight -K05222 Aggressive periodontitis, generalized, moderate -K05223 Aggressive periodontitis, generalized, severe -K05229 Aggressive periodontitis, generalized, unspecified severity -K0530 Chronic periodontitis, unspecified -K05311 Chronic periodontitis, localized, slight -K05312 Chronic periodontitis, localized, moderate -K05313 Chronic periodontitis, localized, severe -K05319 Chronic periodontitis, localized, unspecified severity -K05321 Chronic periodontitis, generalized, slight -K05322 Chronic periodontitis, generalized, moderate -K05323 Chronic periodontitis, generalized, severe -K05329 Chronic periodontitis, generalized, unspecified severity -K054 Periodontosis -K055 Other periodontal diseases -K056 Periodontal disease, unspecified -K060 Gingival recession -K061 Gingival enlargement -K062 Gingival and edentulous alveolar ridge lesions associated with trauma -K063 Horizontal alveolar bone loss -K068 Other specified disorders of gingiva and edentulous alveolar ridge -K069 Disorder of gingiva and edentulous alveolar ridge, unspecified -K080 Exfoliation of teeth due to systemic causes -K08101 Complete loss of teeth, unspecified cause, class I -K08102 Complete loss of teeth, unspecified cause, class II -K08103 Complete loss of teeth, unspecified cause, class III -K08104 Complete loss of teeth, unspecified cause, class IV -K08109 Complete loss of teeth, unspecified cause, unspecified class -K08111 Complete loss of teeth due to trauma, class I -K08112 Complete loss of teeth due to trauma, class II -K08113 Complete loss of teeth due to trauma, class III -K08114 Complete loss of teeth due to trauma, class IV -K08119 Complete loss of teeth due to trauma, unspecified class -K08121 Complete loss of teeth due to periodontal diseases, class I -K08122 Complete loss of teeth due to periodontal diseases, class II -K08123 Complete loss of teeth due to periodontal diseases, class III -K08124 Complete loss of teeth due to periodontal diseases, class IV -K08129 Complete loss of teeth due to periodontal diseases, unspecified class -K08131 Complete loss of teeth due to caries, class I -K08132 Complete loss of teeth due to caries, class II -K08133 Complete loss of teeth due to caries, class III -K08134 Complete loss of teeth due to caries, class IV -K08139 Complete loss of teeth due to caries, unspecified class -K08191 Complete loss of teeth due to other specified cause, class I -K08192 Complete loss of teeth due to other specified cause, class II -K08193 Complete loss of teeth due to other specified cause, class III -K08194 Complete loss of teeth due to other specified cause, class IV -K08199 Complete loss of teeth due to other specified cause, unspecified class -K0820 Unspecified atrophy of edentulous alveolar ridge -K0821 Minimal atrophy of the mandible -K0822 Moderate atrophy of the mandible -K0823 Severe atrophy of the mandible -K0824 Minimal atrophy of maxilla -K0825 Moderate atrophy of the maxilla -K0826 Severe atrophy of the maxilla -K083 Retained dental root -K08401 Partial loss of teeth, unspecified cause, class I -K08402 Partial loss of teeth, unspecified cause, class II -K08403 Partial loss of teeth, unspecified cause, class III -K08404 Partial loss of teeth, unspecified cause, class IV -K08409 Partial loss of teeth, unspecified cause, unspecified class -K08411 Partial loss of teeth due to trauma, class I -K08412 Partial loss of teeth due to trauma, class II -K08413 Partial loss of teeth due to trauma, class III -K08414 Partial loss of teeth due to trauma, class IV -K08419 Partial loss of teeth due to trauma, unspecified class -K08421 Partial loss of teeth due to periodontal diseases, class I -K08422 Partial loss of teeth due to periodontal diseases, class II -K08423 Partial loss of teeth due to periodontal diseases, class III -K08424 Partial loss of teeth due to periodontal diseases, class IV -K08429 Partial loss of teeth due to periodontal diseases, unspecified class -K08431 Partial loss of teeth due to caries, class I -K08432 Partial loss of teeth due to caries, class II -K08433 Partial loss of teeth due to caries, class III -K08434 Partial loss of teeth due to caries, class IV -K08439 Partial loss of teeth due to caries, unspecified class -K08491 Partial loss of teeth due to other specified cause, class I -K08492 Partial loss of teeth due to other specified cause, class II -K08493 Partial loss of teeth due to other specified cause, class III -K08494 Partial loss of teeth due to other specified cause, class IV -K08499 Partial loss of teeth due to other specified cause, unspecified class -K0850 Unsatisfactory restoration of tooth, unspecified -K0851 Open restoration margins of tooth -K0852 Unrepairable overhanging of dental restorative materials -K08530 Fractured dental restorative material without loss of material -K08531 Fractured dental restorative material with loss of material -K08539 Fractured dental restorative material, unspecified -K0854 Contour of existing restoration of tooth biologically incompatible with oral health -K0855 Allergy to existing dental restorative material -K0856 Poor aesthetic of existing restoration of tooth -K0859 Other unsatisfactory restoration of tooth -K0881 Primary occlusal trauma -K0882 Secondary occlusal trauma -K0889 Other specified disorders of teeth and supporting structures -K089 Disorder of teeth and supporting structures, unspecified -K090 Developmental odontogenic cysts -K091 Developmental (nonodontogenic) cysts of oral region -K098 Other cysts of oral region, not elsewhere classified -K099 Cyst of oral region, unspecified -K110 Atrophy of salivary gland -K111 Hypertrophy of salivary gland -K1120 Sialoadenitis, unspecified -K1121 Acute sialoadenitis -K1122 Acute recurrent sialoadenitis -K1123 Chronic sialoadenitis -K113 Abscess of salivary gland -K114 Fistula of salivary gland -K115 Sialolithiasis -K116 Mucocele of salivary gland -K117 Disturbances of salivary secretion -K118 Other diseases of salivary glands -K119 Disease of salivary gland, unspecified -K120 Recurrent oral aphthae -K121 Other forms of stomatitis -K122 Cellulitis and abscess of mouth -K1230 Oral mucositis (ulcerative), unspecified -K1231 Oral mucositis (ulcerative) due to antineoplastic therapy -K1232 Oral mucositis (ulcerative) due to other drugs -K1233 Oral mucositis (ulcerative) due to radiation -K1239 Other oral mucositis (ulcerative) -K130 Diseases of lips -K131 Cheek and lip biting -K1321 Leukoplakia of oral mucosa, including tongue -K1322 Minimal keratinized residual ridge mucosa -K1323 Excessive keratinized residual ridge mucosa -K1324 Leukokeratosis nicotina palati -K1329 Other disturbances of oral epithelium, including tongue -K133 Hairy leukoplakia -K134 Granuloma and granuloma-like lesions of oral mucosa -K135 Oral submucous fibrosis -K136 Irritative hyperplasia of oral mucosa -K1370 Unspecified lesions of oral mucosa -K1379 Other lesions of oral mucosa -K140 Glossitis -K141 Geographic tongue -K142 Median rhomboid glossitis -K143 Hypertrophy of tongue papillae -K144 Atrophy of tongue papillae -K145 Plicated tongue -K146 Glossodynia -K148 Other diseases of tongue -K149 Disease of tongue, unspecified -K200 Eosinophilic esophagitis -K208 Other esophagitis -K209 Esophagitis, unspecified -K210 Gastro-esophageal reflux disease with esophagitis -K219 Gastro-esophageal reflux disease without esophagitis -K220 Achalasia of cardia -K2210 Ulcer of esophagus without bleeding -K2211 Ulcer of esophagus with bleeding -K222 Esophageal obstruction -K223 Perforation of esophagus -K224 Dyskinesia of esophagus -K225 Diverticulum of esophagus, acquired -K226 Gastro-esophageal laceration-hemorrhage syndrome -K2270 Barrett's esophagus without dysplasia -K22710 Barrett's esophagus with low grade dysplasia -K22711 Barrett's esophagus with high grade dysplasia -K22719 Barrett's esophagus with dysplasia, unspecified -K228 Other specified diseases of esophagus -K229 Disease of esophagus, unspecified -K23 Disorders of esophagus in diseases classified elsewhere -K250 Acute gastric ulcer with hemorrhage -K251 Acute gastric ulcer with perforation -K252 Acute gastric ulcer with both hemorrhage and perforation -K253 Acute gastric ulcer without hemorrhage or perforation -K254 Chronic or unspecified gastric ulcer with hemorrhage -K255 Chronic or unspecified gastric ulcer with perforation -K256 Chronic or unspecified gastric ulcer with both hemorrhage and perforation -K257 Chronic gastric ulcer without hemorrhage or perforation -K259 Gastric ulcer, unspecified as acute or chronic, without hemorrhage or perforation -K260 Acute duodenal ulcer with hemorrhage -K261 Acute duodenal ulcer with perforation -K262 Acute duodenal ulcer with both hemorrhage and perforation -K263 Acute duodenal ulcer without hemorrhage or perforation -K264 Chronic or unspecified duodenal ulcer with hemorrhage -K265 Chronic or unspecified duodenal ulcer with perforation -K266 Chronic or unspecified duodenal ulcer with both hemorrhage and perforation -K267 Chronic duodenal ulcer without hemorrhage or perforation -K269 Duodenal ulcer, unspecified as acute or chronic, without hemorrhage or perforation -K270 Acute peptic ulcer, site unspecified, with hemorrhage -K271 Acute peptic ulcer, site unspecified, with perforation -K272 Acute peptic ulcer, site unspecified, with both hemorrhage and perforation -K273 Acute peptic ulcer, site unspecified, without hemorrhage or perforation -K274 Chronic or unspecified peptic ulcer, site unspecified, with hemorrhage -K275 Chronic or unspecified peptic ulcer, site unspecified, with perforation -K276 Chronic or unspecified peptic ulcer, site unspecified, with both hemorrhage and perforation -K277 Chronic peptic ulcer, site unspecified, without hemorrhage or perforation -K279 Peptic ulcer, site unspecified, unspecified as acute or chronic, without hemorrhage or perforation -K280 Acute gastrojejunal ulcer with hemorrhage -K281 Acute gastrojejunal ulcer with perforation -K282 Acute gastrojejunal ulcer with both hemorrhage and perforation -K283 Acute gastrojejunal ulcer without hemorrhage or perforation -K284 Chronic or unspecified gastrojejunal ulcer with hemorrhage -K285 Chronic or unspecified gastrojejunal ulcer with perforation -K286 Chronic or unspecified gastrojejunal ulcer with both hemorrhage and perforation -K287 Chronic gastrojejunal ulcer without hemorrhage or perforation -K289 Gastrojejunal ulcer, unspecified as acute or chronic, without hemorrhage or perforation -K2900 Acute gastritis without bleeding -K2901 Acute gastritis with bleeding -K2920 Alcoholic gastritis without bleeding -K2921 Alcoholic gastritis with bleeding -K2930 Chronic superficial gastritis without bleeding -K2931 Chronic superficial gastritis with bleeding -K2940 Chronic atrophic gastritis without bleeding -K2941 Chronic atrophic gastritis with bleeding -K2950 Unspecified chronic gastritis without bleeding -K2951 Unspecified chronic gastritis with bleeding -K2960 Other gastritis without bleeding -K2961 Other gastritis with bleeding -K2970 Gastritis, unspecified, without bleeding -K2971 Gastritis, unspecified, with bleeding -K2980 Duodenitis without bleeding -K2981 Duodenitis with bleeding -K2990 Gastroduodenitis, unspecified, without bleeding -K2991 Gastroduodenitis, unspecified, with bleeding -K30 Functional dyspepsia -K310 Acute dilatation of stomach -K311 Adult hypertrophic pyloric stenosis -K312 Hourglass stricture and stenosis of stomach -K313 Pylorospasm, not elsewhere classified -K314 Gastric diverticulum -K315 Obstruction of duodenum -K316 Fistula of stomach and duodenum -K317 Polyp of stomach and duodenum -K31811 Angiodysplasia of stomach and duodenum with bleeding -K31819 Angiodysplasia of stomach and duodenum without bleeding -K3182 Dieulafoy lesion (hemorrhagic) of stomach and duodenum -K3183 Achlorhydria -K3184 Gastroparesis -K3189 Other diseases of stomach and duodenum -K319 Disease of stomach and duodenum, unspecified -K352 Acute appendicitis with generalized peritonitis -K353 Acute appendicitis with localized peritonitis -K3580 Unspecified acute appendicitis -K3589 Other acute appendicitis -K36 Other appendicitis -K37 Unspecified appendicitis -K380 Hyperplasia of appendix -K381 Appendicular concretions -K382 Diverticulum of appendix -K383 Fistula of appendix -K388 Other specified diseases of appendix -K389 Disease of appendix, unspecified -K4000 Bilateral inguinal hernia, with obstruction, without gangrene, not specified as recurrent -K4001 Bilateral inguinal hernia, with obstruction, without gangrene, recurrent -K4010 Bilateral inguinal hernia, with gangrene, not specified as recurrent -K4011 Bilateral inguinal hernia, with gangrene, recurrent -K4020 Bilateral inguinal hernia, without obstruction or gangrene, not specified as recurrent -K4021 Bilateral inguinal hernia, without obstruction or gangrene, recurrent -K4030 Unilateral inguinal hernia, with obstruction, without gangrene, not specified as recurrent -K4031 Unilateral inguinal hernia, with obstruction, without gangrene, recurrent -K4040 Unilateral inguinal hernia, with gangrene, not specified as recurrent -K4041 Unilateral inguinal hernia, with gangrene, recurrent -K4090 Unilateral inguinal hernia, without obstruction or gangrene, not specified as recurrent -K4091 Unilateral inguinal hernia, without obstruction or gangrene, recurrent -K4100 Bilateral femoral hernia, with obstruction, without gangrene, not specified as recurrent -K4101 Bilateral femoral hernia, with obstruction, without gangrene, recurrent -K4110 Bilateral femoral hernia, with gangrene, not specified as recurrent -K4111 Bilateral femoral hernia, with gangrene, recurrent -K4120 Bilateral femoral hernia, without obstruction or gangrene, not specified as recurrent -K4121 Bilateral femoral hernia, without obstruction or gangrene, recurrent -K4130 Unilateral femoral hernia, with obstruction, without gangrene, not specified as recurrent -K4131 Unilateral femoral hernia, with obstruction, without gangrene, recurrent -K4140 Unilateral femoral hernia, with gangrene, not specified as recurrent -K4141 Unilateral femoral hernia, with gangrene, recurrent -K4190 Unilateral femoral hernia, without obstruction or gangrene, not specified as recurrent -K4191 Unilateral femoral hernia, without obstruction or gangrene, recurrent -K420 Umbilical hernia with obstruction, without gangrene -K421 Umbilical hernia with gangrene -K429 Umbilical hernia without obstruction or gangrene -K430 Incisional hernia with obstruction, without gangrene -K431 Incisional hernia with gangrene -K432 Incisional hernia without obstruction or gangrene -K433 Parastomal hernia with obstruction, without gangrene -K434 Parastomal hernia with gangrene -K435 Parastomal hernia without obstruction or gangrene -K436 Other and unspecified ventral hernia with obstruction, without gangrene -K437 Other and unspecified ventral hernia with gangrene -K439 Ventral hernia without obstruction or gangrene -K440 Diaphragmatic hernia with obstruction, without gangrene -K441 Diaphragmatic hernia with gangrene -K449 Diaphragmatic hernia without obstruction or gangrene -K450 Other specified abdominal hernia with obstruction, without gangrene -K451 Other specified abdominal hernia with gangrene -K458 Other specified abdominal hernia without obstruction or gangrene -K460 Unspecified abdominal hernia with obstruction, without gangrene -K461 Unspecified abdominal hernia with gangrene -K469 Unspecified abdominal hernia without obstruction or gangrene -K5000 Crohn's disease of small intestine without complications -K50011 Crohn's disease of small intestine with rectal bleeding -K50012 Crohn's disease of small intestine with intestinal obstruction -K50013 Crohn's disease of small intestine with fistula -K50014 Crohn's disease of small intestine with abscess -K50018 Crohn's disease of small intestine with other complication -K50019 Crohn's disease of small intestine with unspecified complications -K5010 Crohn's disease of large intestine without complications -K50111 Crohn's disease of large intestine with rectal bleeding -K50112 Crohn's disease of large intestine with intestinal obstruction -K50113 Crohn's disease of large intestine with fistula -K50114 Crohn's disease of large intestine with abscess -K50118 Crohn's disease of large intestine with other complication -K50119 Crohn's disease of large intestine with unspecified complications -K5080 Crohn's disease of both small and large intestine without complications -K50811 Crohn's disease of both small and large intestine with rectal bleeding -K50812 Crohn's disease of both small and large intestine with intestinal obstruction -K50813 Crohn's disease of both small and large intestine with fistula -K50814 Crohn's disease of both small and large intestine with abscess -K50818 Crohn's disease of both small and large intestine with other complication -K50819 Crohn's disease of both small and large intestine with unspecified complications -K5090 Crohn's disease, unspecified, without complications -K50911 Crohn's disease, unspecified, with rectal bleeding -K50912 Crohn's disease, unspecified, with intestinal obstruction -K50913 Crohn's disease, unspecified, with fistula -K50914 Crohn's disease, unspecified, with abscess -K50918 Crohn's disease, unspecified, with other complication -K50919 Crohn's disease, unspecified, with unspecified complications -K5100 Ulcerative (chronic) pancolitis without complications -K51011 Ulcerative (chronic) pancolitis with rectal bleeding -K51012 Ulcerative (chronic) pancolitis with intestinal obstruction -K51013 Ulcerative (chronic) pancolitis with fistula -K51014 Ulcerative (chronic) pancolitis with abscess -K51018 Ulcerative (chronic) pancolitis with other complication -K51019 Ulcerative (chronic) pancolitis with unspecified complications -K5120 Ulcerative (chronic) proctitis without complications -K51211 Ulcerative (chronic) proctitis with rectal bleeding -K51212 Ulcerative (chronic) proctitis with intestinal obstruction -K51213 Ulcerative (chronic) proctitis with fistula -K51214 Ulcerative (chronic) proctitis with abscess -K51218 Ulcerative (chronic) proctitis with other complication -K51219 Ulcerative (chronic) proctitis with unspecified complications -K5130 Ulcerative (chronic) rectosigmoiditis without complications -K51311 Ulcerative (chronic) rectosigmoiditis with rectal bleeding -K51312 Ulcerative (chronic) rectosigmoiditis with intestinal obstruction -K51313 Ulcerative (chronic) rectosigmoiditis with fistula -K51314 Ulcerative (chronic) rectosigmoiditis with abscess -K51318 Ulcerative (chronic) rectosigmoiditis with other complication -K51319 Ulcerative (chronic) rectosigmoiditis with unspecified complications -K5140 Inflammatory polyps of colon without complications -K51411 Inflammatory polyps of colon with rectal bleeding -K51412 Inflammatory polyps of colon with intestinal obstruction -K51413 Inflammatory polyps of colon with fistula -K51414 Inflammatory polyps of colon with abscess -K51418 Inflammatory polyps of colon with other complication -K51419 Inflammatory polyps of colon with unspecified complications -K5150 Left sided colitis without complications -K51511 Left sided colitis with rectal bleeding -K51512 Left sided colitis with intestinal obstruction -K51513 Left sided colitis with fistula -K51514 Left sided colitis with abscess -K51518 Left sided colitis with other complication -K51519 Left sided colitis with unspecified complications -K5180 Other ulcerative colitis without complications -K51811 Other ulcerative colitis with rectal bleeding -K51812 Other ulcerative colitis with intestinal obstruction -K51813 Other ulcerative colitis with fistula -K51814 Other ulcerative colitis with abscess -K51818 Other ulcerative colitis with other complication -K51819 Other ulcerative colitis with unspecified complications -K5190 Ulcerative colitis, unspecified, without complications -K51911 Ulcerative colitis, unspecified with rectal bleeding -K51912 Ulcerative colitis, unspecified with intestinal obstruction -K51913 Ulcerative colitis, unspecified with fistula -K51914 Ulcerative colitis, unspecified with abscess -K51918 Ulcerative colitis, unspecified with other complication -K51919 Ulcerative colitis, unspecified with unspecified complications -K520 Gastroenteritis and colitis due to radiation -K521 Toxic gastroenteritis and colitis -K5221 Food protein-induced enterocolitis syndrome -K5222 Food protein-induced enteropathy -K5229 Other allergic and dietetic gastroenteritis and colitis -K523 Indeterminate colitis -K5281 Eosinophilic gastritis or gastroenteritis -K5282 Eosinophilic colitis -K52831 Collagenous colitis -K52832 Lymphocytic colitis -K52838 Other microscopic colitis -K52839 Microscopic colitis, unspecified -K5289 Other specified noninfective gastroenteritis and colitis -K529 Noninfective gastroenteritis and colitis, unspecified -K55011 Focal (segmental) acute (reversible) ischemia of small intestine -K55012 Diffuse acute (reversible) ischemia of small intestine -K55019 Acute (reversible) ischemia of small intestine, extent unspecified -K55021 Focal (segmental) acute infarction of small intestine -K55022 Diffuse acute infarction of small intestine -K55029 Acute infarction of small intestine, extent unspecified -K55031 Focal (segmental) acute (reversible) ischemia of large intestine -K55032 Diffuse acute (reversible) ischemia of large intestine -K55039 Acute (reversible) ischemia of large intestine, extent unspecified -K55041 Focal (segmental) acute infarction of large intestine -K55042 Diffuse acute infarction of large intestine -K55049 Acute infarction of large intestine, extent unspecified -K55051 Focal (segmental) acute (reversible) ischemia of intestine, part unspecified -K55052 Diffuse acute (reversible) ischemia of intestine, part unspecified -K55059 Acute (reversible) ischemia of intestine, part and extent unspecified -K55061 Focal (segmental) acute infarction of intestine, part unspecified -K55062 Diffuse acute infarction of intestine, part unspecified -K55069 Acute infarction of intestine, part and extent unspecified -K551 Chronic vascular disorders of intestine -K5520 Angiodysplasia of colon without hemorrhage -K5521 Angiodysplasia of colon with hemorrhage -K5530 Necrotizing enterocolitis, unspecified -K5531 Stage 1 necrotizing enterocolitis -K5532 Stage 2 necrotizing enterocolitis -K5533 Stage 3 necrotizing enterocolitis -K558 Other vascular disorders of intestine -K559 Vascular disorder of intestine, unspecified -K560 Paralytic ileus -K561 Intussusception -K562 Volvulus -K563 Gallstone ileus -K5641 Fecal impaction -K5649 Other impaction of intestine -K565 Intestinal adhesions [bands] with obstruction (postprocedural) (postinfection) -K5660 Unspecified intestinal obstruction -K5669 Other intestinal obstruction -K567 Ileus, unspecified -K5700 Diverticulitis of small intestine with perforation and abscess without bleeding -K5701 Diverticulitis of small intestine with perforation and abscess with bleeding -K5710 Diverticulosis of small intestine without perforation or abscess without bleeding -K5711 Diverticulosis of small intestine without perforation or abscess with bleeding -K5712 Diverticulitis of small intestine without perforation or abscess without bleeding -K5713 Diverticulitis of small intestine without perforation or abscess with bleeding -K5720 Diverticulitis of large intestine with perforation and abscess without bleeding -K5721 Diverticulitis of large intestine with perforation and abscess with bleeding -K5730 Diverticulosis of large intestine without perforation or abscess without bleeding -K5731 Diverticulosis of large intestine without perforation or abscess with bleeding -K5732 Diverticulitis of large intestine without perforation or abscess without bleeding -K5733 Diverticulitis of large intestine without perforation or abscess with bleeding -K5740 Diverticulitis of both small and large intestine with perforation and abscess without bleeding -K5741 Diverticulitis of both small and large intestine with perforation and abscess with bleeding -K5750 Diverticulosis of both small and large intestine without perforation or abscess without bleeding -K5751 Diverticulosis of both small and large intestine without perforation or abscess with bleeding -K5752 Diverticulitis of both small and large intestine without perforation or abscess without bleeding -K5753 Diverticulitis of both small and large intestine without perforation or abscess with bleeding -K5780 Diverticulitis of intestine, part unspecified, with perforation and abscess without bleeding -K5781 Diverticulitis of intestine, part unspecified, with perforation and abscess with bleeding -K5790 Diverticulosis of intestine, part unspecified, without perforation or abscess without bleeding -K5791 Diverticulosis of intestine, part unspecified, without perforation or abscess with bleeding -K5792 Diverticulitis of intestine, part unspecified, without perforation or abscess without bleeding -K5793 Diverticulitis of intestine, part unspecified, without perforation or abscess with bleeding -K580 Irritable bowel syndrome with diarrhea -K581 Irritable bowel syndrome with constipation -K582 Mixed irritable bowel syndrome -K588 Other irritable bowel syndrome -K589 Irritable bowel syndrome without diarrhea -K5900 Constipation, unspecified -K5901 Slow transit constipation -K5902 Outlet dysfunction constipation -K5903 Drug induced constipation -K5904 Chronic idiopathic constipation -K5909 Other constipation -K591 Functional diarrhea -K592 Neurogenic bowel, not elsewhere classified -K5931 Toxic megacolon -K5939 Other megacolon -K594 Anal spasm -K598 Other specified functional intestinal disorders -K599 Functional intestinal disorder, unspecified -K600 Acute anal fissure -K601 Chronic anal fissure -K602 Anal fissure, unspecified -K603 Anal fistula -K604 Rectal fistula -K605 Anorectal fistula -K610 Anal abscess -K611 Rectal abscess -K612 Anorectal abscess -K613 Ischiorectal abscess -K614 Intrasphincteric abscess -K620 Anal polyp -K621 Rectal polyp -K622 Anal prolapse -K623 Rectal prolapse -K624 Stenosis of anus and rectum -K625 Hemorrhage of anus and rectum -K626 Ulcer of anus and rectum -K627 Radiation proctitis -K6281 Anal sphincter tear (healed) (nontraumatic) (old) -K6282 Dysplasia of anus -K6289 Other specified diseases of anus and rectum -K629 Disease of anus and rectum, unspecified -K630 Abscess of intestine -K631 Perforation of intestine (nontraumatic) -K632 Fistula of intestine -K633 Ulcer of intestine -K634 Enteroptosis -K635 Polyp of colon -K6381 Dieulafoy lesion of intestine -K6389 Other specified diseases of intestine -K639 Disease of intestine, unspecified -K640 First degree hemorrhoids -K641 Second degree hemorrhoids -K642 Third degree hemorrhoids -K643 Fourth degree hemorrhoids -K644 Residual hemorrhoidal skin tags -K645 Perianal venous thrombosis -K648 Other hemorrhoids -K649 Unspecified hemorrhoids -K650 Generalized (acute) peritonitis -K651 Peritoneal abscess -K652 Spontaneous bacterial peritonitis -K653 Choleperitonitis -K654 Sclerosing mesenteritis -K658 Other peritonitis -K659 Peritonitis, unspecified -K660 Peritoneal adhesions (postprocedural) (postinfection) -K661 Hemoperitoneum -K668 Other specified disorders of peritoneum -K669 Disorder of peritoneum, unspecified -K67 Disorders of peritoneum in infectious diseases classified elsewhere -K6811 Postprocedural retroperitoneal abscess -K6812 Psoas muscle abscess -K6819 Other retroperitoneal abscess -K689 Other disorders of retroperitoneum -K700 Alcoholic fatty liver -K7010 Alcoholic hepatitis without ascites -K7011 Alcoholic hepatitis with ascites -K702 Alcoholic fibrosis and sclerosis of liver -K7030 Alcoholic cirrhosis of liver without ascites -K7031 Alcoholic cirrhosis of liver with ascites -K7040 Alcoholic hepatic failure without coma -K7041 Alcoholic hepatic failure with coma -K709 Alcoholic liver disease, unspecified -K710 Toxic liver disease with cholestasis -K7110 Toxic liver disease with hepatic necrosis, without coma -K7111 Toxic liver disease with hepatic necrosis, with coma -K712 Toxic liver disease with acute hepatitis -K713 Toxic liver disease with chronic persistent hepatitis -K714 Toxic liver disease with chronic lobular hepatitis -K7150 Toxic liver disease with chronic active hepatitis without ascites -K7151 Toxic liver disease with chronic active hepatitis with ascites -K716 Toxic liver disease with hepatitis, not elsewhere classified -K717 Toxic liver disease with fibrosis and cirrhosis of liver -K718 Toxic liver disease with other disorders of liver -K719 Toxic liver disease, unspecified -K7200 Acute and subacute hepatic failure without coma -K7201 Acute and subacute hepatic failure with coma -K7210 Chronic hepatic failure without coma -K7211 Chronic hepatic failure with coma -K7290 Hepatic failure, unspecified without coma -K7291 Hepatic failure, unspecified with coma -K730 Chronic persistent hepatitis, not elsewhere classified -K731 Chronic lobular hepatitis, not elsewhere classified -K732 Chronic active hepatitis, not elsewhere classified -K738 Other chronic hepatitis, not elsewhere classified -K739 Chronic hepatitis, unspecified -K740 Hepatic fibrosis -K741 Hepatic sclerosis -K742 Hepatic fibrosis with hepatic sclerosis -K743 Primary biliary cirrhosis -K744 Secondary biliary cirrhosis -K745 Biliary cirrhosis, unspecified -K7460 Unspecified cirrhosis of liver -K7469 Other cirrhosis of liver -K750 Abscess of liver -K751 Phlebitis of portal vein -K752 Nonspecific reactive hepatitis -K753 Granulomatous hepatitis, not elsewhere classified -K754 Autoimmune hepatitis -K7581 Nonalcoholic steatohepatitis (NASH) -K7589 Other specified inflammatory liver diseases -K759 Inflammatory liver disease, unspecified -K760 Fatty (change of) liver, not elsewhere classified -K761 Chronic passive congestion of liver -K762 Central hemorrhagic necrosis of liver -K763 Infarction of liver -K764 Peliosis hepatis -K765 Hepatic veno-occlusive disease -K766 Portal hypertension -K767 Hepatorenal syndrome -K7681 Hepatopulmonary syndrome -K7689 Other specified diseases of liver -K769 Liver disease, unspecified -K77 Liver disorders in diseases classified elsewhere -K8000 Calculus of gallbladder with acute cholecystitis without obstruction -K8001 Calculus of gallbladder with acute cholecystitis with obstruction -K8010 Calculus of gallbladder with chronic cholecystitis without obstruction -K8011 Calculus of gallbladder with chronic cholecystitis with obstruction -K8012 Calculus of gallbladder with acute and chronic cholecystitis without obstruction -K8013 Calculus of gallbladder with acute and chronic cholecystitis with obstruction -K8018 Calculus of gallbladder with other cholecystitis without obstruction -K8019 Calculus of gallbladder with other cholecystitis with obstruction -K8020 Calculus of gallbladder without cholecystitis without obstruction -K8021 Calculus of gallbladder without cholecystitis with obstruction -K8030 Calculus of bile duct with cholangitis, unspecified, without obstruction -K8031 Calculus of bile duct with cholangitis, unspecified, with obstruction -K8032 Calculus of bile duct with acute cholangitis without obstruction -K8033 Calculus of bile duct with acute cholangitis with obstruction -K8034 Calculus of bile duct with chronic cholangitis without obstruction -K8035 Calculus of bile duct with chronic cholangitis with obstruction -K8036 Calculus of bile duct with acute and chronic cholangitis without obstruction -K8037 Calculus of bile duct with acute and chronic cholangitis with obstruction -K8040 Calculus of bile duct with cholecystitis, unspecified, without obstruction -K8041 Calculus of bile duct with cholecystitis, unspecified, with obstruction -K8042 Calculus of bile duct with acute cholecystitis without obstruction -K8043 Calculus of bile duct with acute cholecystitis with obstruction -K8044 Calculus of bile duct with chronic cholecystitis without obstruction -K8045 Calculus of bile duct with chronic cholecystitis with obstruction -K8046 Calculus of bile duct with acute and chronic cholecystitis without obstruction -K8047 Calculus of bile duct with acute and chronic cholecystitis with obstruction -K8050 Calculus of bile duct without cholangitis or cholecystitis without obstruction -K8051 Calculus of bile duct without cholangitis or cholecystitis with obstruction -K8060 Calculus of gallbladder and bile duct with cholecystitis, unspecified, without obstruction -K8061 Calculus of gallbladder and bile duct with cholecystitis, unspecified, with obstruction -K8062 Calculus of gallbladder and bile duct with acute cholecystitis without obstruction -K8063 Calculus of gallbladder and bile duct with acute cholecystitis with obstruction -K8064 Calculus of gallbladder and bile duct with chronic cholecystitis without obstruction -K8065 Calculus of gallbladder and bile duct with chronic cholecystitis with obstruction -K8066 Calculus of gallbladder and bile duct with acute and chronic cholecystitis without obstruction -K8067 Calculus of gallbladder and bile duct with acute and chronic cholecystitis with obstruction -K8070 Calculus of gallbladder and bile duct without cholecystitis without obstruction -K8071 Calculus of gallbladder and bile duct without cholecystitis with obstruction -K8080 Other cholelithiasis without obstruction -K8081 Other cholelithiasis with obstruction -K810 Acute cholecystitis -K811 Chronic cholecystitis -K812 Acute cholecystitis with chronic cholecystitis -K819 Cholecystitis, unspecified -K820 Obstruction of gallbladder -K821 Hydrops of gallbladder -K822 Perforation of gallbladder -K823 Fistula of gallbladder -K824 Cholesterolosis of gallbladder -K828 Other specified diseases of gallbladder -K829 Disease of gallbladder, unspecified -K830 Cholangitis -K831 Obstruction of bile duct -K832 Perforation of bile duct -K833 Fistula of bile duct -K834 Spasm of sphincter of Oddi -K835 Biliary cyst -K838 Other specified diseases of biliary tract -K839 Disease of biliary tract, unspecified -K8500 Idiopathic acute pancreatitis without necrosis or infection -K8501 Idiopathic acute pancreatitis with uninfected necrosis -K8502 Idiopathic acute pancreatitis with infected necrosis -K8510 Biliary acute pancreatitis without necrosis or infection -K8511 Biliary acute pancreatitis with uninfected necrosis -K8512 Biliary acute pancreatitis with infected necrosis -K8520 Alcohol induced acute pancreatitis without necrosis or infection -K8521 Alcohol induced acute pancreatitis with uninfected necrosis -K8522 Alcohol induced acute pancreatitis with infected necrosis -K8530 Drug induced acute pancreatitis without necrosis or infection -K8531 Drug induced acute pancreatitis with uninfected necrosis -K8532 Drug induced acute pancreatitis with infected necrosis -K8580 Other acute pancreatitis without necrosis or infection -K8581 Other acute pancreatitis with uninfected necrosis -K8582 Other acute pancreatitis with infected necrosis -K8590 Acute pancreatitis without necrosis or infection, unspecified -K8591 Acute pancreatitis with uninfected necrosis, unspecified -K8592 Acute pancreatitis with infected necrosis, unspecified -K860 Alcohol-induced chronic pancreatitis -K861 Other chronic pancreatitis -K862 Cyst of pancreas -K863 Pseudocyst of pancreas -K8681 Exocrine pancreatic insufficiency -K8689 Other specified diseases of pancreas -K869 Disease of pancreas, unspecified -K87 Disorders of gallbladder, biliary tract and pancreas in diseases classified elsewhere -K900 Celiac disease -K901 Tropical sprue -K902 Blind loop syndrome, not elsewhere classified -K903 Pancreatic steatorrhea -K9041 Non-celiac gluten sensitivity -K9049 Malabsorption due to intolerance, not elsewhere classified -K9081 Whipple's disease -K9089 Other intestinal malabsorption -K909 Intestinal malabsorption, unspecified -K910 Vomiting following gastrointestinal surgery -K911 Postgastric surgery syndromes -K912 Postsurgical malabsorption, not elsewhere classified -K913 Postprocedural intestinal obstruction -K915 Postcholecystectomy syndrome -K9161 Intraoperative hemorrhage and hematoma of a digestive system organ or structure complicating a digestive system procedure -K9162 Intraoperative hemorrhage and hematoma of a digestive system organ or structure complicating other procedure -K9171 Accidental puncture and laceration of a digestive system organ or structure during a digestive system procedure -K9172 Accidental puncture and laceration of a digestive system organ or structure during other procedure -K9181 Other intraoperative complications of digestive system -K9182 Postprocedural hepatic failure -K9183 Postprocedural hepatorenal syndrome -K91840 Postprocedural hemorrhage of a digestive system organ or structure following a digestive system procedure -K91841 Postprocedural hemorrhage of a digestive system organ or structure following other procedure -K91850 Pouchitis -K91858 Other complications of intestinal pouch -K9186 Retained cholelithiasis following cholecystectomy -K91870 Postprocedural hematoma of a digestive system organ or structure following a digestive system procedure -K91871 Postprocedural hematoma of a digestive system organ or structure following other procedure -K91872 Postprocedural seroma of a digestive system organ or structure following a digestive system procedure -K91873 Postprocedural seroma of a digestive system organ or structure following other procedure -K9189 Other postprocedural complications and disorders of digestive system -K920 Hematemesis -K921 Melena -K922 Gastrointestinal hemorrhage, unspecified -K9281 Gastrointestinal mucositis (ulcerative) -K9289 Other specified diseases of the digestive system -K929 Disease of digestive system, unspecified -K9400 Colostomy complication, unspecified -K9401 Colostomy hemorrhage -K9402 Colostomy infection -K9403 Colostomy malfunction -K9409 Other complications of colostomy -K9410 Enterostomy complication, unspecified -K9411 Enterostomy hemorrhage -K9412 Enterostomy infection -K9413 Enterostomy malfunction -K9419 Other complications of enterostomy -K9420 Gastrostomy complication, unspecified -K9421 Gastrostomy hemorrhage -K9422 Gastrostomy infection -K9423 Gastrostomy malfunction -K9429 Other complications of gastrostomy -K9430 Esophagostomy complications, unspecified -K9431 Esophagostomy hemorrhage -K9432 Esophagostomy infection -K9433 Esophagostomy malfunction -K9439 Other complications of esophagostomy -K9501 Infection due to gastric band procedure -K9509 Other complications of gastric band procedure -K9581 Infection due to other bariatric procedure -K9589 Other complications of other bariatric procedure -L00 Staphylococcal scalded skin syndrome -L0100 Impetigo, unspecified -L0101 Non-bullous impetigo -L0102 Bockhart's impetigo -L0103 Bullous impetigo -L0109 Other impetigo -L011 Impetiginization of other dermatoses -L0201 Cutaneous abscess of face -L0202 Furuncle of face -L0203 Carbuncle of face -L0211 Cutaneous abscess of neck -L0212 Furuncle of neck -L0213 Carbuncle of neck -L02211 Cutaneous abscess of abdominal wall -L02212 Cutaneous abscess of back [any part, except buttock] -L02213 Cutaneous abscess of chest wall -L02214 Cutaneous abscess of groin -L02215 Cutaneous abscess of perineum -L02216 Cutaneous abscess of umbilicus -L02219 Cutaneous abscess of trunk, unspecified -L02221 Furuncle of abdominal wall -L02222 Furuncle of back [any part, except buttock] -L02223 Furuncle of chest wall -L02224 Furuncle of groin -L02225 Furuncle of perineum -L02226 Furuncle of umbilicus -L02229 Furuncle of trunk, unspecified -L02231 Carbuncle of abdominal wall -L02232 Carbuncle of back [any part, except buttock] -L02233 Carbuncle of chest wall -L02234 Carbuncle of groin -L02235 Carbuncle of perineum -L02236 Carbuncle of umbilicus -L02239 Carbuncle of trunk, unspecified -L0231 Cutaneous abscess of buttock -L0232 Furuncle of buttock -L0233 Carbuncle of buttock -L02411 Cutaneous abscess of right axilla -L02412 Cutaneous abscess of left axilla -L02413 Cutaneous abscess of right upper limb -L02414 Cutaneous abscess of left upper limb -L02415 Cutaneous abscess of right lower limb -L02416 Cutaneous abscess of left lower limb -L02419 Cutaneous abscess of limb, unspecified -L02421 Furuncle of right axilla -L02422 Furuncle of left axilla -L02423 Furuncle of right upper limb -L02424 Furuncle of left upper limb -L02425 Furuncle of right lower limb -L02426 Furuncle of left lower limb -L02429 Furuncle of limb, unspecified -L02431 Carbuncle of right axilla -L02432 Carbuncle of left axilla -L02433 Carbuncle of right upper limb -L02434 Carbuncle of left upper limb -L02435 Carbuncle of right lower limb -L02436 Carbuncle of left lower limb -L02439 Carbuncle of limb, unspecified -L02511 Cutaneous abscess of right hand -L02512 Cutaneous abscess of left hand -L02519 Cutaneous abscess of unspecified hand -L02521 Furuncle right hand -L02522 Furuncle left hand -L02529 Furuncle unspecified hand -L02531 Carbuncle of right hand -L02532 Carbuncle of left hand -L02539 Carbuncle of unspecified hand -L02611 Cutaneous abscess of right foot -L02612 Cutaneous abscess of left foot -L02619 Cutaneous abscess of unspecified foot -L02621 Furuncle of right foot -L02622 Furuncle of left foot -L02629 Furuncle of unspecified foot -L02631 Carbuncle of right foot -L02632 Carbuncle of left foot -L02639 Carbuncle of unspecified foot -L02811 Cutaneous abscess of head [any part, except face] -L02818 Cutaneous abscess of other sites -L02821 Furuncle of head [any part, except face] -L02828 Furuncle of other sites -L02831 Carbuncle of head [any part, except face] -L02838 Carbuncle of other sites -L0291 Cutaneous abscess, unspecified -L0292 Furuncle, unspecified -L0293 Carbuncle, unspecified -L03011 Cellulitis of right finger -L03012 Cellulitis of left finger -L03019 Cellulitis of unspecified finger -L03021 Acute lymphangitis of right finger -L03022 Acute lymphangitis of left finger -L03029 Acute lymphangitis of unspecified finger -L03031 Cellulitis of right toe -L03032 Cellulitis of left toe -L03039 Cellulitis of unspecified toe -L03041 Acute lymphangitis of right toe -L03042 Acute lymphangitis of left toe -L03049 Acute lymphangitis of unspecified toe -L03111 Cellulitis of right axilla -L03112 Cellulitis of left axilla -L03113 Cellulitis of right upper limb -L03114 Cellulitis of left upper limb -L03115 Cellulitis of right lower limb -L03116 Cellulitis of left lower limb -L03119 Cellulitis of unspecified part of limb -L03121 Acute lymphangitis of right axilla -L03122 Acute lymphangitis of left axilla -L03123 Acute lymphangitis of right upper limb -L03124 Acute lymphangitis of left upper limb -L03125 Acute lymphangitis of right lower limb -L03126 Acute lymphangitis of left lower limb -L03129 Acute lymphangitis of unspecified part of limb -L03211 Cellulitis of face -L03212 Acute lymphangitis of face -L03213 Periorbital cellulitis -L03221 Cellulitis of neck -L03222 Acute lymphangitis of neck -L03311 Cellulitis of abdominal wall -L03312 Cellulitis of back [any part except buttock] -L03313 Cellulitis of chest wall -L03314 Cellulitis of groin -L03315 Cellulitis of perineum -L03316 Cellulitis of umbilicus -L03317 Cellulitis of buttock -L03319 Cellulitis of trunk, unspecified -L03321 Acute lymphangitis of abdominal wall -L03322 Acute lymphangitis of back [any part except buttock] -L03323 Acute lymphangitis of chest wall -L03324 Acute lymphangitis of groin -L03325 Acute lymphangitis of perineum -L03326 Acute lymphangitis of umbilicus -L03327 Acute lymphangitis of buttock -L03329 Acute lymphangitis of trunk, unspecified -L03811 Cellulitis of head [any part, except face] -L03818 Cellulitis of other sites -L03891 Acute lymphangitis of head [any part, except face] -L03898 Acute lymphangitis of other sites -L0390 Cellulitis, unspecified -L0391 Acute lymphangitis, unspecified -L040 Acute lymphadenitis of face, head and neck -L041 Acute lymphadenitis of trunk -L042 Acute lymphadenitis of upper limb -L043 Acute lymphadenitis of lower limb -L048 Acute lymphadenitis of other sites -L049 Acute lymphadenitis, unspecified -L0501 Pilonidal cyst with abscess -L0502 Pilonidal sinus with abscess -L0591 Pilonidal cyst without abscess -L0592 Pilonidal sinus without abscess -L080 Pyoderma -L081 Erythrasma -L0881 Pyoderma vegetans -L0882 Omphalitis not of newborn -L0889 Other specified local infections of the skin and subcutaneous tissue -L089 Local infection of the skin and subcutaneous tissue, unspecified -L100 Pemphigus vulgaris -L101 Pemphigus vegetans -L102 Pemphigus foliaceous -L103 Brazilian pemphigus [fogo selvagem] -L104 Pemphigus erythematosus -L105 Drug-induced pemphigus -L1081 Paraneoplastic pemphigus -L1089 Other pemphigus -L109 Pemphigus, unspecified -L110 Acquired keratosis follicularis -L111 Transient acantholytic dermatosis [Grover] -L118 Other specified acantholytic disorders -L119 Acantholytic disorder, unspecified -L120 Bullous pemphigoid -L121 Cicatricial pemphigoid -L122 Chronic bullous disease of childhood -L1230 Acquired epidermolysis bullosa, unspecified -L1231 Epidermolysis bullosa due to drug -L1235 Other acquired epidermolysis bullosa -L128 Other pemphigoid -L129 Pemphigoid, unspecified -L130 Dermatitis herpetiformis -L131 Subcorneal pustular dermatitis -L138 Other specified bullous disorders -L139 Bullous disorder, unspecified -L14 Bullous disorders in diseases classified elsewhere -L200 Besnier's prurigo -L2081 Atopic neurodermatitis -L2082 Flexural eczema -L2083 Infantile (acute) (chronic) eczema -L2084 Intrinsic (allergic) eczema -L2089 Other atopic dermatitis -L209 Atopic dermatitis, unspecified -L210 Seborrhea capitis -L211 Seborrheic infantile dermatitis -L218 Other seborrheic dermatitis -L219 Seborrheic dermatitis, unspecified -L22 Diaper dermatitis -L230 Allergic contact dermatitis due to metals -L231 Allergic contact dermatitis due to adhesives -L232 Allergic contact dermatitis due to cosmetics -L233 Allergic contact dermatitis due to drugs in contact with skin -L234 Allergic contact dermatitis due to dyes -L235 Allergic contact dermatitis due to other chemical products -L236 Allergic contact dermatitis due to food in contact with the skin -L237 Allergic contact dermatitis due to plants, except food -L2381 Allergic contact dermatitis due to animal (cat) (dog) dander -L2389 Allergic contact dermatitis due to other agents -L239 Allergic contact dermatitis, unspecified cause -L240 Irritant contact dermatitis due to detergents -L241 Irritant contact dermatitis due to oils and greases -L242 Irritant contact dermatitis due to solvents -L243 Irritant contact dermatitis due to cosmetics -L244 Irritant contact dermatitis due to drugs in contact with skin -L245 Irritant contact dermatitis due to other chemical products -L246 Irritant contact dermatitis due to food in contact with skin -L247 Irritant contact dermatitis due to plants, except food -L2481 Irritant contact dermatitis due to metals -L2489 Irritant contact dermatitis due to other agents -L249 Irritant contact dermatitis, unspecified cause -L250 Unspecified contact dermatitis due to cosmetics -L251 Unspecified contact dermatitis due to drugs in contact with skin -L252 Unspecified contact dermatitis due to dyes -L253 Unspecified contact dermatitis due to other chemical products -L254 Unspecified contact dermatitis due to food in contact with skin -L255 Unspecified contact dermatitis due to plants, except food -L258 Unspecified contact dermatitis due to other agents -L259 Unspecified contact dermatitis, unspecified cause -L26 Exfoliative dermatitis -L270 Generalized skin eruption due to drugs and medicaments taken internally -L271 Localized skin eruption due to drugs and medicaments taken internally -L272 Dermatitis due to ingested food -L278 Dermatitis due to other substances taken internally -L279 Dermatitis due to unspecified substance taken internally -L280 Lichen simplex chronicus -L281 Prurigo nodularis -L282 Other prurigo -L290 Pruritus ani -L291 Pruritus scroti -L292 Pruritus vulvae -L293 Anogenital pruritus, unspecified -L298 Other pruritus -L299 Pruritus, unspecified -L300 Nummular dermatitis -L301 Dyshidrosis [pompholyx] -L302 Cutaneous autosensitization -L303 Infective dermatitis -L304 Erythema intertrigo -L305 Pityriasis alba -L308 Other specified dermatitis -L309 Dermatitis, unspecified -L400 Psoriasis vulgaris -L401 Generalized pustular psoriasis -L402 Acrodermatitis continua -L403 Pustulosis palmaris et plantaris -L404 Guttate psoriasis -L4050 Arthropathic psoriasis, unspecified -L4051 Distal interphalangeal psoriatic arthropathy -L4052 Psoriatic arthritis mutilans -L4053 Psoriatic spondylitis -L4054 Psoriatic juvenile arthropathy -L4059 Other psoriatic arthropathy -L408 Other psoriasis -L409 Psoriasis, unspecified -L410 Pityriasis lichenoides et varioliformis acuta -L411 Pityriasis lichenoides chronica -L413 Small plaque parapsoriasis -L414 Large plaque parapsoriasis -L415 Retiform parapsoriasis -L418 Other parapsoriasis -L419 Parapsoriasis, unspecified -L42 Pityriasis rosea -L430 Hypertrophic lichen planus -L431 Bullous lichen planus -L432 Lichenoid drug reaction -L433 Subacute (active) lichen planus -L438 Other lichen planus -L439 Lichen planus, unspecified -L440 Pityriasis rubra pilaris -L441 Lichen nitidus -L442 Lichen striatus -L443 Lichen ruber moniliformis -L444 Infantile papular acrodermatitis [Gianotti-Crosti] -L448 Other specified papulosquamous disorders -L449 Papulosquamous disorder, unspecified -L45 Papulosquamous disorders in diseases classified elsewhere -L490 Exfoliation due to erythematous condition involving less than 10 percent of body surface -L491 Exfoliation due to erythematous condition involving 10-19 percent of body surface -L492 Exfoliation due to erythematous condition involving 20-29 percent of body surface -L493 Exfoliation due to erythematous condition involving 30-39 percent of body surface -L494 Exfoliation due to erythematous condition involving 40-49 percent of body surface -L495 Exfoliation due to erythematous condition involving 50-59 percent of body surface -L496 Exfoliation due to erythematous condition involving 60-69 percent of body surface -L497 Exfoliation due to erythematous condition involving 70-79 percent of body surface -L498 Exfoliation due to erythematous condition involving 80-89 percent of body surface -L499 Exfoliation due to erythematous condition involving 90 or more percent of body surface -L500 Allergic urticaria -L501 Idiopathic urticaria -L502 Urticaria due to cold and heat -L503 Dermatographic urticaria -L504 Vibratory urticaria -L505 Cholinergic urticaria -L506 Contact urticaria -L508 Other urticaria -L509 Urticaria, unspecified -L510 Nonbullous erythema multiforme -L511 Stevens-Johnson syndrome -L512 Toxic epidermal necrolysis [Lyell] -L513 Stevens-Johnson syndrome-toxic epidermal necrolysis overlap syndrome -L518 Other erythema multiforme -L519 Erythema multiforme, unspecified -L52 Erythema nodosum -L530 Toxic erythema -L531 Erythema annulare centrifugum -L532 Erythema marginatum -L533 Other chronic figurate erythema -L538 Other specified erythematous conditions -L539 Erythematous condition, unspecified -L54 Erythema in diseases classified elsewhere -L550 Sunburn of first degree -L551 Sunburn of second degree -L552 Sunburn of third degree -L559 Sunburn, unspecified -L560 Drug phototoxic response -L561 Drug photoallergic response -L562 Photocontact dermatitis [berloque dermatitis] -L563 Solar urticaria -L564 Polymorphous light eruption -L565 Disseminated superficial actinic porokeratosis (DSAP) -L568 Other specified acute skin changes due to ultraviolet radiation -L569 Acute skin change due to ultraviolet radiation, unspecified -L570 Actinic keratosis -L571 Actinic reticuloid -L572 Cutis rhomboidalis nuchae -L573 Poikiloderma of Civatte -L574 Cutis laxa senilis -L575 Actinic granuloma -L578 Other skin changes due to chronic exposure to nonionizing radiation -L579 Skin changes due to chronic exposure to nonionizing radiation, unspecified -L580 Acute radiodermatitis -L581 Chronic radiodermatitis -L589 Radiodermatitis, unspecified -L590 Erythema ab igne [dermatitis ab igne] -L598 Other specified disorders of the skin and subcutaneous tissue related to radiation -L599 Disorder of the skin and subcutaneous tissue related to radiation, unspecified -L600 Ingrowing nail -L601 Onycholysis -L602 Onychogryphosis -L603 Nail dystrophy -L604 Beau's lines -L605 Yellow nail syndrome -L608 Other nail disorders -L609 Nail disorder, unspecified -L62 Nail disorders in diseases classified elsewhere -L630 Alopecia (capitis) totalis -L631 Alopecia universalis -L632 Ophiasis -L638 Other alopecia areata -L639 Alopecia areata, unspecified -L640 Drug-induced androgenic alopecia -L648 Other androgenic alopecia -L649 Androgenic alopecia, unspecified -L650 Telogen effluvium -L651 Anagen effluvium -L652 Alopecia mucinosa -L658 Other specified nonscarring hair loss -L659 Nonscarring hair loss, unspecified -L660 Pseudopelade -L661 Lichen planopilaris -L662 Folliculitis decalvans -L663 Perifolliculitis capitis abscedens -L664 Folliculitis ulerythematosa reticulata -L668 Other cicatricial alopecia -L669 Cicatricial alopecia, unspecified -L670 Trichorrhexis nodosa -L671 Variations in hair color -L678 Other hair color and hair shaft abnormalities -L679 Hair color and hair shaft abnormality, unspecified -L680 Hirsutism -L681 Acquired hypertrichosis lanuginosa -L682 Localized hypertrichosis -L683 Polytrichia -L688 Other hypertrichosis -L689 Hypertrichosis, unspecified -L700 Acne vulgaris -L701 Acne conglobata -L702 Acne varioliformis -L703 Acne tropica -L704 Infantile acne -L705 Acne excoriee -L708 Other acne -L709 Acne, unspecified -L710 Perioral dermatitis -L711 Rhinophyma -L718 Other rosacea -L719 Rosacea, unspecified -L720 Epidermal cyst -L7211 Pilar cyst -L7212 Trichodermal cyst -L722 Steatocystoma multiplex -L723 Sebaceous cyst -L728 Other follicular cysts of the skin and subcutaneous tissue -L729 Follicular cyst of the skin and subcutaneous tissue, unspecified -L730 Acne keloid -L731 Pseudofolliculitis barbae -L732 Hidradenitis suppurativa -L738 Other specified follicular disorders -L739 Follicular disorder, unspecified -L740 Miliaria rubra -L741 Miliaria crystallina -L742 Miliaria profunda -L743 Miliaria, unspecified -L744 Anhidrosis -L74510 Primary focal hyperhidrosis, axilla -L74511 Primary focal hyperhidrosis, face -L74512 Primary focal hyperhidrosis, palms -L74513 Primary focal hyperhidrosis, soles -L74519 Primary focal hyperhidrosis, unspecified -L7452 Secondary focal hyperhidrosis -L748 Other eccrine sweat disorders -L749 Eccrine sweat disorder, unspecified -L750 Bromhidrosis -L751 Chromhidrosis -L752 Apocrine miliaria -L758 Other apocrine sweat disorders -L759 Apocrine sweat disorder, unspecified -L7601 Intraoperative hemorrhage and hematoma of skin and subcutaneous tissue complicating a dermatologic procedure -L7602 Intraoperative hemorrhage and hematoma of skin and subcutaneous tissue complicating other procedure -L7611 Accidental puncture and laceration of skin and subcutaneous tissue during a dermatologic procedure -L7612 Accidental puncture and laceration of skin and subcutaneous tissue during other procedure -L7621 Postprocedural hemorrhage of skin and subcutaneous tissue following a dermatologic procedure -L7622 Postprocedural hemorrhage of skin and subcutaneous tissue following other procedure -L7631 Postprocedural hematoma of skin and subcutaneous tissue following a dermatologic procedure -L7632 Postprocedural hematoma of skin and subcutaneous tissue following other procedure -L7633 Postprocedural seroma of skin and subcutaneous tissue following a dermatologic procedure -L7634 Postprocedural seroma of skin and subcutaneous tissue following other procedure -L7681 Other intraoperative complications of skin and subcutaneous tissue -L7682 Other postprocedural complications of skin and subcutaneous tissue -L80 Vitiligo -L810 Postinflammatory hyperpigmentation -L811 Chloasma -L812 Freckles -L813 Cafe au lait spots -L814 Other melanin hyperpigmentation -L815 Leukoderma, not elsewhere classified -L816 Other disorders of diminished melanin formation -L817 Pigmented purpuric dermatosis -L818 Other specified disorders of pigmentation -L819 Disorder of pigmentation, unspecified -L820 Inflamed seborrheic keratosis -L821 Other seborrheic keratosis -L83 Acanthosis nigricans -L84 Corns and callosities -L850 Acquired ichthyosis -L851 Acquired keratosis [keratoderma] palmaris et plantaris -L852 Keratosis punctata (palmaris et plantaris) -L853 Xerosis cutis -L858 Other specified epidermal thickening -L859 Epidermal thickening, unspecified -L86 Keratoderma in diseases classified elsewhere -L870 Keratosis follicularis et parafollicularis in cutem penetrans -L871 Reactive perforating collagenosis -L872 Elastosis perforans serpiginosa -L878 Other transepidermal elimination disorders -L879 Transepidermal elimination disorder, unspecified -L88 Pyoderma gangrenosum -L89000 Pressure ulcer of unspecified elbow, unstageable -L89001 Pressure ulcer of unspecified elbow, stage 1 -L89002 Pressure ulcer of unspecified elbow, stage 2 -L89003 Pressure ulcer of unspecified elbow, stage 3 -L89004 Pressure ulcer of unspecified elbow, stage 4 -L89009 Pressure ulcer of unspecified elbow, unspecified stage -L89010 Pressure ulcer of right elbow, unstageable -L89011 Pressure ulcer of right elbow, stage 1 -L89012 Pressure ulcer of right elbow, stage 2 -L89013 Pressure ulcer of right elbow, stage 3 -L89014 Pressure ulcer of right elbow, stage 4 -L89019 Pressure ulcer of right elbow, unspecified stage -L89020 Pressure ulcer of left elbow, unstageable -L89021 Pressure ulcer of left elbow, stage 1 -L89022 Pressure ulcer of left elbow, stage 2 -L89023 Pressure ulcer of left elbow, stage 3 -L89024 Pressure ulcer of left elbow, stage 4 -L89029 Pressure ulcer of left elbow, unspecified stage -L89100 Pressure ulcer of unspecified part of back, unstageable -L89101 Pressure ulcer of unspecified part of back, stage 1 -L89102 Pressure ulcer of unspecified part of back, stage 2 -L89103 Pressure ulcer of unspecified part of back, stage 3 -L89104 Pressure ulcer of unspecified part of back, stage 4 -L89109 Pressure ulcer of unspecified part of back, unspecified stage -L89110 Pressure ulcer of right upper back, unstageable -L89111 Pressure ulcer of right upper back, stage 1 -L89112 Pressure ulcer of right upper back, stage 2 -L89113 Pressure ulcer of right upper back, stage 3 -L89114 Pressure ulcer of right upper back, stage 4 -L89119 Pressure ulcer of right upper back, unspecified stage -L89120 Pressure ulcer of left upper back, unstageable -L89121 Pressure ulcer of left upper back, stage 1 -L89122 Pressure ulcer of left upper back, stage 2 -L89123 Pressure ulcer of left upper back, stage 3 -L89124 Pressure ulcer of left upper back, stage 4 -L89129 Pressure ulcer of left upper back, unspecified stage -L89130 Pressure ulcer of right lower back, unstageable -L89131 Pressure ulcer of right lower back, stage 1 -L89132 Pressure ulcer of right lower back, stage 2 -L89133 Pressure ulcer of right lower back, stage 3 -L89134 Pressure ulcer of right lower back, stage 4 -L89139 Pressure ulcer of right lower back, unspecified stage -L89140 Pressure ulcer of left lower back, unstageable -L89141 Pressure ulcer of left lower back, stage 1 -L89142 Pressure ulcer of left lower back, stage 2 -L89143 Pressure ulcer of left lower back, stage 3 -L89144 Pressure ulcer of left lower back, stage 4 -L89149 Pressure ulcer of left lower back, unspecified stage -L89150 Pressure ulcer of sacral region, unstageable -L89151 Pressure ulcer of sacral region, stage 1 -L89152 Pressure ulcer of sacral region, stage 2 -L89153 Pressure ulcer of sacral region, stage 3 -L89154 Pressure ulcer of sacral region, stage 4 -L89159 Pressure ulcer of sacral region, unspecified stage -L89200 Pressure ulcer of unspecified hip, unstageable -L89201 Pressure ulcer of unspecified hip, stage 1 -L89202 Pressure ulcer of unspecified hip, stage 2 -L89203 Pressure ulcer of unspecified hip, stage 3 -L89204 Pressure ulcer of unspecified hip, stage 4 -L89209 Pressure ulcer of unspecified hip, unspecified stage -L89210 Pressure ulcer of right hip, unstageable -L89211 Pressure ulcer of right hip, stage 1 -L89212 Pressure ulcer of right hip, stage 2 -L89213 Pressure ulcer of right hip, stage 3 -L89214 Pressure ulcer of right hip, stage 4 -L89219 Pressure ulcer of right hip, unspecified stage -L89220 Pressure ulcer of left hip, unstageable -L89221 Pressure ulcer of left hip, stage 1 -L89222 Pressure ulcer of left hip, stage 2 -L89223 Pressure ulcer of left hip, stage 3 -L89224 Pressure ulcer of left hip, stage 4 -L89229 Pressure ulcer of left hip, unspecified stage -L89300 Pressure ulcer of unspecified buttock, unstageable -L89301 Pressure ulcer of unspecified buttock, stage 1 -L89302 Pressure ulcer of unspecified buttock, stage 2 -L89303 Pressure ulcer of unspecified buttock, stage 3 -L89304 Pressure ulcer of unspecified buttock, stage 4 -L89309 Pressure ulcer of unspecified buttock, unspecified stage -L89310 Pressure ulcer of right buttock, unstageable -L89311 Pressure ulcer of right buttock, stage 1 -L89312 Pressure ulcer of right buttock, stage 2 -L89313 Pressure ulcer of right buttock, stage 3 -L89314 Pressure ulcer of right buttock, stage 4 -L89319 Pressure ulcer of right buttock, unspecified stage -L89320 Pressure ulcer of left buttock, unstageable -L89321 Pressure ulcer of left buttock, stage 1 -L89322 Pressure ulcer of left buttock, stage 2 -L89323 Pressure ulcer of left buttock, stage 3 -L89324 Pressure ulcer of left buttock, stage 4 -L89329 Pressure ulcer of left buttock, unspecified stage -L8940 Pressure ulcer of contiguous site of back, buttock and hip, unspecified stage -L8941 Pressure ulcer of contiguous site of back, buttock and hip, stage 1 -L8942 Pressure ulcer of contiguous site of back, buttock and hip, stage 2 -L8943 Pressure ulcer of contiguous site of back, buttock and hip, stage 3 -L8944 Pressure ulcer of contiguous site of back, buttock and hip, stage 4 -L8945 Pressure ulcer of contiguous site of back, buttock and hip, unstageable -L89500 Pressure ulcer of unspecified ankle, unstageable -L89501 Pressure ulcer of unspecified ankle, stage 1 -L89502 Pressure ulcer of unspecified ankle, stage 2 -L89503 Pressure ulcer of unspecified ankle, stage 3 -L89504 Pressure ulcer of unspecified ankle, stage 4 -L89509 Pressure ulcer of unspecified ankle, unspecified stage -L89510 Pressure ulcer of right ankle, unstageable -L89511 Pressure ulcer of right ankle, stage 1 -L89512 Pressure ulcer of right ankle, stage 2 -L89513 Pressure ulcer of right ankle, stage 3 -L89514 Pressure ulcer of right ankle, stage 4 -L89519 Pressure ulcer of right ankle, unspecified stage -L89520 Pressure ulcer of left ankle, unstageable -L89521 Pressure ulcer of left ankle, stage 1 -L89522 Pressure ulcer of left ankle, stage 2 -L89523 Pressure ulcer of left ankle, stage 3 -L89524 Pressure ulcer of left ankle, stage 4 -L89529 Pressure ulcer of left ankle, unspecified stage -L89600 Pressure ulcer of unspecified heel, unstageable -L89601 Pressure ulcer of unspecified heel, stage 1 -L89602 Pressure ulcer of unspecified heel, stage 2 -L89603 Pressure ulcer of unspecified heel, stage 3 -L89604 Pressure ulcer of unspecified heel, stage 4 -L89609 Pressure ulcer of unspecified heel, unspecified stage -L89610 Pressure ulcer of right heel, unstageable -L89611 Pressure ulcer of right heel, stage 1 -L89612 Pressure ulcer of right heel, stage 2 -L89613 Pressure ulcer of right heel, stage 3 -L89614 Pressure ulcer of right heel, stage 4 -L89619 Pressure ulcer of right heel, unspecified stage -L89620 Pressure ulcer of left heel, unstageable -L89621 Pressure ulcer of left heel, stage 1 -L89622 Pressure ulcer of left heel, stage 2 -L89623 Pressure ulcer of left heel, stage 3 -L89624 Pressure ulcer of left heel, stage 4 -L89629 Pressure ulcer of left heel, unspecified stage -L89810 Pressure ulcer of head, unstageable -L89811 Pressure ulcer of head, stage 1 -L89812 Pressure ulcer of head, stage 2 -L89813 Pressure ulcer of head, stage 3 -L89814 Pressure ulcer of head, stage 4 -L89819 Pressure ulcer of head, unspecified stage -L89890 Pressure ulcer of other site, unstageable -L89891 Pressure ulcer of other site, stage 1 -L89892 Pressure ulcer of other site, stage 2 -L89893 Pressure ulcer of other site, stage 3 -L89894 Pressure ulcer of other site, stage 4 -L89899 Pressure ulcer of other site, unspecified stage -L8990 Pressure ulcer of unspecified site, unspecified stage -L8991 Pressure ulcer of unspecified site, stage 1 -L8992 Pressure ulcer of unspecified site, stage 2 -L8993 Pressure ulcer of unspecified site, stage 3 -L8994 Pressure ulcer of unspecified site, stage 4 -L8995 Pressure ulcer of unspecified site, unstageable -L900 Lichen sclerosus et atrophicus -L901 Anetoderma of Schweninger-Buzzi -L902 Anetoderma of Jadassohn-Pellizzari -L903 Atrophoderma of Pasini and Pierini -L904 Acrodermatitis chronica atrophicans -L905 Scar conditions and fibrosis of skin -L906 Striae atrophicae -L908 Other atrophic disorders of skin -L909 Atrophic disorder of skin, unspecified -L910 Hypertrophic scar -L918 Other hypertrophic disorders of the skin -L919 Hypertrophic disorder of the skin, unspecified -L920 Granuloma annulare -L921 Necrobiosis lipoidica, not elsewhere classified -L922 Granuloma faciale [eosinophilic granuloma of skin] -L923 Foreign body granuloma of the skin and subcutaneous tissue -L928 Other granulomatous disorders of the skin and subcutaneous tissue -L929 Granulomatous disorder of the skin and subcutaneous tissue, unspecified -L930 Discoid lupus erythematosus -L931 Subacute cutaneous lupus erythematosus -L932 Other local lupus erythematosus -L940 Localized scleroderma [morphea] -L941 Linear scleroderma -L942 Calcinosis cutis -L943 Sclerodactyly -L944 Gottron's papules -L945 Poikiloderma vasculare atrophicans -L946 Ainhum -L948 Other specified localized connective tissue disorders -L949 Localized connective tissue disorder, unspecified -L950 Livedoid vasculitis -L951 Erythema elevatum diutinum -L958 Other vasculitis limited to the skin -L959 Vasculitis limited to the skin, unspecified -L97101 Non-pressure chronic ulcer of unspecified thigh limited to breakdown of skin -L97102 Non-pressure chronic ulcer of unspecified thigh with fat layer exposed -L97103 Non-pressure chronic ulcer of unspecified thigh with necrosis of muscle -L97104 Non-pressure chronic ulcer of unspecified thigh with necrosis of bone -L97109 Non-pressure chronic ulcer of unspecified thigh with unspecified severity -L97111 Non-pressure chronic ulcer of right thigh limited to breakdown of skin -L97112 Non-pressure chronic ulcer of right thigh with fat layer exposed -L97113 Non-pressure chronic ulcer of right thigh with necrosis of muscle -L97114 Non-pressure chronic ulcer of right thigh with necrosis of bone -L97119 Non-pressure chronic ulcer of right thigh with unspecified severity -L97121 Non-pressure chronic ulcer of left thigh limited to breakdown of skin -L97122 Non-pressure chronic ulcer of left thigh with fat layer exposed -L97123 Non-pressure chronic ulcer of left thigh with necrosis of muscle -L97124 Non-pressure chronic ulcer of left thigh with necrosis of bone -L97129 Non-pressure chronic ulcer of left thigh with unspecified severity -L97201 Non-pressure chronic ulcer of unspecified calf limited to breakdown of skin -L97202 Non-pressure chronic ulcer of unspecified calf with fat layer exposed -L97203 Non-pressure chronic ulcer of unspecified calf with necrosis of muscle -L97204 Non-pressure chronic ulcer of unspecified calf with necrosis of bone -L97209 Non-pressure chronic ulcer of unspecified calf with unspecified severity -L97211 Non-pressure chronic ulcer of right calf limited to breakdown of skin -L97212 Non-pressure chronic ulcer of right calf with fat layer exposed -L97213 Non-pressure chronic ulcer of right calf with necrosis of muscle -L97214 Non-pressure chronic ulcer of right calf with necrosis of bone -L97219 Non-pressure chronic ulcer of right calf with unspecified severity -L97221 Non-pressure chronic ulcer of left calf limited to breakdown of skin -L97222 Non-pressure chronic ulcer of left calf with fat layer exposed -L97223 Non-pressure chronic ulcer of left calf with necrosis of muscle -L97224 Non-pressure chronic ulcer of left calf with necrosis of bone -L97229 Non-pressure chronic ulcer of left calf with unspecified severity -L97301 Non-pressure chronic ulcer of unspecified ankle limited to breakdown of skin -L97302 Non-pressure chronic ulcer of unspecified ankle with fat layer exposed -L97303 Non-pressure chronic ulcer of unspecified ankle with necrosis of muscle -L97304 Non-pressure chronic ulcer of unspecified ankle with necrosis of bone -L97309 Non-pressure chronic ulcer of unspecified ankle with unspecified severity -L97311 Non-pressure chronic ulcer of right ankle limited to breakdown of skin -L97312 Non-pressure chronic ulcer of right ankle with fat layer exposed -L97313 Non-pressure chronic ulcer of right ankle with necrosis of muscle -L97314 Non-pressure chronic ulcer of right ankle with necrosis of bone -L97319 Non-pressure chronic ulcer of right ankle with unspecified severity -L97321 Non-pressure chronic ulcer of left ankle limited to breakdown of skin -L97322 Non-pressure chronic ulcer of left ankle with fat layer exposed -L97323 Non-pressure chronic ulcer of left ankle with necrosis of muscle -L97324 Non-pressure chronic ulcer of left ankle with necrosis of bone -L97329 Non-pressure chronic ulcer of left ankle with unspecified severity -L97401 Non-pressure chronic ulcer of unspecified heel and midfoot limited to breakdown of skin -L97402 Non-pressure chronic ulcer of unspecified heel and midfoot with fat layer exposed -L97403 Non-pressure chronic ulcer of unspecified heel and midfoot with necrosis of muscle -L97404 Non-pressure chronic ulcer of unspecified heel and midfoot with necrosis of bone -L97409 Non-pressure chronic ulcer of unspecified heel and midfoot with unspecified severity -L97411 Non-pressure chronic ulcer of right heel and midfoot limited to breakdown of skin -L97412 Non-pressure chronic ulcer of right heel and midfoot with fat layer exposed -L97413 Non-pressure chronic ulcer of right heel and midfoot with necrosis of muscle -L97414 Non-pressure chronic ulcer of right heel and midfoot with necrosis of bone -L97419 Non-pressure chronic ulcer of right heel and midfoot with unspecified severity -L97421 Non-pressure chronic ulcer of left heel and midfoot limited to breakdown of skin -L97422 Non-pressure chronic ulcer of left heel and midfoot with fat layer exposed -L97423 Non-pressure chronic ulcer of left heel and midfoot with necrosis of muscle -L97424 Non-pressure chronic ulcer of left heel and midfoot with necrosis of bone -L97429 Non-pressure chronic ulcer of left heel and midfoot with unspecified severity -L97501 Non-pressure chronic ulcer of other part of unspecified foot limited to breakdown of skin -L97502 Non-pressure chronic ulcer of other part of unspecified foot with fat layer exposed -L97503 Non-pressure chronic ulcer of other part of unspecified foot with necrosis of muscle -L97504 Non-pressure chronic ulcer of other part of unspecified foot with necrosis of bone -L97509 Non-pressure chronic ulcer of other part of unspecified foot with unspecified severity -L97511 Non-pressure chronic ulcer of other part of right foot limited to breakdown of skin -L97512 Non-pressure chronic ulcer of other part of right foot with fat layer exposed -L97513 Non-pressure chronic ulcer of other part of right foot with necrosis of muscle -L97514 Non-pressure chronic ulcer of other part of right foot with necrosis of bone -L97519 Non-pressure chronic ulcer of other part of right foot with unspecified severity -L97521 Non-pressure chronic ulcer of other part of left foot limited to breakdown of skin -L97522 Non-pressure chronic ulcer of other part of left foot with fat layer exposed -L97523 Non-pressure chronic ulcer of other part of left foot with necrosis of muscle -L97524 Non-pressure chronic ulcer of other part of left foot with necrosis of bone -L97529 Non-pressure chronic ulcer of other part of left foot with unspecified severity -L97801 Non-pressure chronic ulcer of other part of unspecified lower leg limited to breakdown of skin -L97802 Non-pressure chronic ulcer of other part of unspecified lower leg with fat layer exposed -L97803 Non-pressure chronic ulcer of other part of unspecified lower leg with necrosis of muscle -L97804 Non-pressure chronic ulcer of other part of unspecified lower leg with necrosis of bone -L97809 Non-pressure chronic ulcer of other part of unspecified lower leg with unspecified severity -L97811 Non-pressure chronic ulcer of other part of right lower leg limited to breakdown of skin -L97812 Non-pressure chronic ulcer of other part of right lower leg with fat layer exposed -L97813 Non-pressure chronic ulcer of other part of right lower leg with necrosis of muscle -L97814 Non-pressure chronic ulcer of other part of right lower leg with necrosis of bone -L97819 Non-pressure chronic ulcer of other part of right lower leg with unspecified severity -L97821 Non-pressure chronic ulcer of other part of left lower leg limited to breakdown of skin -L97822 Non-pressure chronic ulcer of other part of left lower leg with fat layer exposed -L97823 Non-pressure chronic ulcer of other part of left lower leg with necrosis of muscle -L97824 Non-pressure chronic ulcer of other part of left lower leg with necrosis of bone -L97829 Non-pressure chronic ulcer of other part of left lower leg with unspecified severity -L97901 Non-pressure chronic ulcer of unspecified part of unspecified lower leg limited to breakdown of skin -L97902 Non-pressure chronic ulcer of unspecified part of unspecified lower leg with fat layer exposed -L97903 Non-pressure chronic ulcer of unspecified part of unspecified lower leg with necrosis of muscle -L97904 Non-pressure chronic ulcer of unspecified part of unspecified lower leg with necrosis of bone -L97909 Non-pressure chronic ulcer of unspecified part of unspecified lower leg with unspecified severity -L97911 Non-pressure chronic ulcer of unspecified part of right lower leg limited to breakdown of skin -L97912 Non-pressure chronic ulcer of unspecified part of right lower leg with fat layer exposed -L97913 Non-pressure chronic ulcer of unspecified part of right lower leg with necrosis of muscle -L97914 Non-pressure chronic ulcer of unspecified part of right lower leg with necrosis of bone -L97919 Non-pressure chronic ulcer of unspecified part of right lower leg with unspecified severity -L97921 Non-pressure chronic ulcer of unspecified part of left lower leg limited to breakdown of skin -L97922 Non-pressure chronic ulcer of unspecified part of left lower leg with fat layer exposed -L97923 Non-pressure chronic ulcer of unspecified part of left lower leg with necrosis of muscle -L97924 Non-pressure chronic ulcer of unspecified part of left lower leg with necrosis of bone -L97929 Non-pressure chronic ulcer of unspecified part of left lower leg with unspecified severity -L980 Pyogenic granuloma -L981 Factitial dermatitis -L982 Febrile neutrophilic dermatosis [Sweet] -L983 Eosinophilic cellulitis [Wells] -L98411 Non-pressure chronic ulcer of buttock limited to breakdown of skin -L98412 Non-pressure chronic ulcer of buttock with fat layer exposed -L98413 Non-pressure chronic ulcer of buttock with necrosis of muscle -L98414 Non-pressure chronic ulcer of buttock with necrosis of bone -L98419 Non-pressure chronic ulcer of buttock with unspecified severity -L98421 Non-pressure chronic ulcer of back limited to breakdown of skin -L98422 Non-pressure chronic ulcer of back with fat layer exposed -L98423 Non-pressure chronic ulcer of back with necrosis of muscle -L98424 Non-pressure chronic ulcer of back with necrosis of bone -L98429 Non-pressure chronic ulcer of back with unspecified severity -L98491 Non-pressure chronic ulcer of skin of other sites limited to breakdown of skin -L98492 Non-pressure chronic ulcer of skin of other sites with fat layer exposed -L98493 Non-pressure chronic ulcer of skin of other sites with necrosis of muscle -L98494 Non-pressure chronic ulcer of skin of other sites with necrosis of bone -L98499 Non-pressure chronic ulcer of skin of other sites with unspecified severity -L985 Mucinosis of the skin -L986 Other infiltrative disorders of the skin and subcutaneous tissue -L987 Excessive and redundant skin and subcutaneous tissue -L988 Other specified disorders of the skin and subcutaneous tissue -L989 Disorder of the skin and subcutaneous tissue, unspecified -L99 Other disorders of skin and subcutaneous tissue in diseases classified elsewhere -M0000 Staphylococcal arthritis, unspecified joint -M00011 Staphylococcal arthritis, right shoulder -M00012 Staphylococcal arthritis, left shoulder -M00019 Staphylococcal arthritis, unspecified shoulder -M00021 Staphylococcal arthritis, right elbow -M00022 Staphylococcal arthritis, left elbow -M00029 Staphylococcal arthritis, unspecified elbow -M00031 Staphylococcal arthritis, right wrist -M00032 Staphylococcal arthritis, left wrist -M00039 Staphylococcal arthritis, unspecified wrist -M00041 Staphylococcal arthritis, right hand -M00042 Staphylococcal arthritis, left hand -M00049 Staphylococcal arthritis, unspecified hand -M00051 Staphylococcal arthritis, right hip -M00052 Staphylococcal arthritis, left hip -M00059 Staphylococcal arthritis, unspecified hip -M00061 Staphylococcal arthritis, right knee -M00062 Staphylococcal arthritis, left knee -M00069 Staphylococcal arthritis, unspecified knee -M00071 Staphylococcal arthritis, right ankle and foot -M00072 Staphylococcal arthritis, left ankle and foot -M00079 Staphylococcal arthritis, unspecified ankle and foot -M0008 Staphylococcal arthritis, vertebrae -M0009 Staphylococcal polyarthritis -M0010 Pneumococcal arthritis, unspecified joint -M00111 Pneumococcal arthritis, right shoulder -M00112 Pneumococcal arthritis, left shoulder -M00119 Pneumococcal arthritis, unspecified shoulder -M00121 Pneumococcal arthritis, right elbow -M00122 Pneumococcal arthritis, left elbow -M00129 Pneumococcal arthritis, unspecified elbow -M00131 Pneumococcal arthritis, right wrist -M00132 Pneumococcal arthritis, left wrist -M00139 Pneumococcal arthritis, unspecified wrist -M00141 Pneumococcal arthritis, right hand -M00142 Pneumococcal arthritis, left hand -M00149 Pneumococcal arthritis, unspecified hand -M00151 Pneumococcal arthritis, right hip -M00152 Pneumococcal arthritis, left hip -M00159 Pneumococcal arthritis, unspecified hip -M00161 Pneumococcal arthritis, right knee -M00162 Pneumococcal arthritis, left knee -M00169 Pneumococcal arthritis, unspecified knee -M00171 Pneumococcal arthritis, right ankle and foot -M00172 Pneumococcal arthritis, left ankle and foot -M00179 Pneumococcal arthritis, unspecified ankle and foot -M0018 Pneumococcal arthritis, vertebrae -M0019 Pneumococcal polyarthritis -M0020 Other streptococcal arthritis, unspecified joint -M00211 Other streptococcal arthritis, right shoulder -M00212 Other streptococcal arthritis, left shoulder -M00219 Other streptococcal arthritis, unspecified shoulder -M00221 Other streptococcal arthritis, right elbow -M00222 Other streptococcal arthritis, left elbow -M00229 Other streptococcal arthritis, unspecified elbow -M00231 Other streptococcal arthritis, right wrist -M00232 Other streptococcal arthritis, left wrist -M00239 Other streptococcal arthritis, unspecified wrist -M00241 Other streptococcal arthritis, right hand -M00242 Other streptococcal arthritis, left hand -M00249 Other streptococcal arthritis, unspecified hand -M00251 Other streptococcal arthritis, right hip -M00252 Other streptococcal arthritis, left hip -M00259 Other streptococcal arthritis, unspecified hip -M00261 Other streptococcal arthritis, right knee -M00262 Other streptococcal arthritis, left knee -M00269 Other streptococcal arthritis, unspecified knee -M00271 Other streptococcal arthritis, right ankle and foot -M00272 Other streptococcal arthritis, left ankle and foot -M00279 Other streptococcal arthritis, unspecified ankle and foot -M0028 Other streptococcal arthritis, vertebrae -M0029 Other streptococcal polyarthritis -M0080 Arthritis due to other bacteria, unspecified joint -M00811 Arthritis due to other bacteria, right shoulder -M00812 Arthritis due to other bacteria, left shoulder -M00819 Arthritis due to other bacteria, unspecified shoulder -M00821 Arthritis due to other bacteria, right elbow -M00822 Arthritis due to other bacteria, left elbow -M00829 Arthritis due to other bacteria, unspecified elbow -M00831 Arthritis due to other bacteria, right wrist -M00832 Arthritis due to other bacteria, left wrist -M00839 Arthritis due to other bacteria, unspecified wrist -M00841 Arthritis due to other bacteria, right hand -M00842 Arthritis due to other bacteria, left hand -M00849 Arthritis due to other bacteria, unspecified hand -M00851 Arthritis due to other bacteria, right hip -M00852 Arthritis due to other bacteria, left hip -M00859 Arthritis due to other bacteria, unspecified hip -M00861 Arthritis due to other bacteria, right knee -M00862 Arthritis due to other bacteria, left knee -M00869 Arthritis due to other bacteria, unspecified knee -M00871 Arthritis due to other bacteria, right ankle and foot -M00872 Arthritis due to other bacteria, left ankle and foot -M00879 Arthritis due to other bacteria, unspecified ankle and foot -M0088 Arthritis due to other bacteria, vertebrae -M0089 Polyarthritis due to other bacteria -M009 Pyogenic arthritis, unspecified -M01X0 Direct infection of unspecified joint in infectious and parasitic diseases classified elsewhere -M01X11 Direct infection of right shoulder in infectious and parasitic diseases classified elsewhere -M01X12 Direct infection of left shoulder in infectious and parasitic diseases classified elsewhere -M01X19 Direct infection of unspecified shoulder in infectious and parasitic diseases classified elsewhere -M01X21 Direct infection of right elbow in infectious and parasitic diseases classified elsewhere -M01X22 Direct infection of left elbow in infectious and parasitic diseases classified elsewhere -M01X29 Direct infection of unspecified elbow in infectious and parasitic diseases classified elsewhere -M01X31 Direct infection of right wrist in infectious and parasitic diseases classified elsewhere -M01X32 Direct infection of left wrist in infectious and parasitic diseases classified elsewhere -M01X39 Direct infection of unspecified wrist in infectious and parasitic diseases classified elsewhere -M01X41 Direct infection of right hand in infectious and parasitic diseases classified elsewhere -M01X42 Direct infection of left hand in infectious and parasitic diseases classified elsewhere -M01X49 Direct infection of unspecified hand in infectious and parasitic diseases classified elsewhere -M01X51 Direct infection of right hip in infectious and parasitic diseases classified elsewhere -M01X52 Direct infection of left hip in infectious and parasitic diseases classified elsewhere -M01X59 Direct infection of unspecified hip in infectious and parasitic diseases classified elsewhere -M01X61 Direct infection of right knee in infectious and parasitic diseases classified elsewhere -M01X62 Direct infection of left knee in infectious and parasitic diseases classified elsewhere -M01X69 Direct infection of unspecified knee in infectious and parasitic diseases classified elsewhere -M01X71 Direct infection of right ankle and foot in infectious and parasitic diseases classified elsewhere -M01X72 Direct infection of left ankle and foot in infectious and parasitic diseases classified elsewhere -M01X79 Direct infection of unspecified ankle and foot in infectious and parasitic diseases classified elsewhere -M01X8 Direct infection of vertebrae in infectious and parasitic diseases classified elsewhere -M01X9 Direct infection of multiple joints in infectious and parasitic diseases classified elsewhere -M0200 Arthropathy following intestinal bypass, unspecified site -M02011 Arthropathy following intestinal bypass, right shoulder -M02012 Arthropathy following intestinal bypass, left shoulder -M02019 Arthropathy following intestinal bypass, unspecified shoulder -M02021 Arthropathy following intestinal bypass, right elbow -M02022 Arthropathy following intestinal bypass, left elbow -M02029 Arthropathy following intestinal bypass, unspecified elbow -M02031 Arthropathy following intestinal bypass, right wrist -M02032 Arthropathy following intestinal bypass, left wrist -M02039 Arthropathy following intestinal bypass, unspecified wrist -M02041 Arthropathy following intestinal bypass, right hand -M02042 Arthropathy following intestinal bypass, left hand -M02049 Arthropathy following intestinal bypass, unspecified hand -M02051 Arthropathy following intestinal bypass, right hip -M02052 Arthropathy following intestinal bypass, left hip -M02059 Arthropathy following intestinal bypass, unspecified hip -M02061 Arthropathy following intestinal bypass, right knee -M02062 Arthropathy following intestinal bypass, left knee -M02069 Arthropathy following intestinal bypass, unspecified knee -M02071 Arthropathy following intestinal bypass, right ankle and foot -M02072 Arthropathy following intestinal bypass, left ankle and foot -M02079 Arthropathy following intestinal bypass, unspecified ankle and foot -M0208 Arthropathy following intestinal bypass, vertebrae -M0209 Arthropathy following intestinal bypass, multiple sites -M0210 Postdysenteric arthropathy, unspecified site -M02111 Postdysenteric arthropathy, right shoulder -M02112 Postdysenteric arthropathy, left shoulder -M02119 Postdysenteric arthropathy, unspecified shoulder -M02121 Postdysenteric arthropathy, right elbow -M02122 Postdysenteric arthropathy, left elbow -M02129 Postdysenteric arthropathy, unspecified elbow -M02131 Postdysenteric arthropathy, right wrist -M02132 Postdysenteric arthropathy, left wrist -M02139 Postdysenteric arthropathy, unspecified wrist -M02141 Postdysenteric arthropathy, right hand -M02142 Postdysenteric arthropathy, left hand -M02149 Postdysenteric arthropathy, unspecified hand -M02151 Postdysenteric arthropathy, right hip -M02152 Postdysenteric arthropathy, left hip -M02159 Postdysenteric arthropathy, unspecified hip -M02161 Postdysenteric arthropathy, right knee -M02162 Postdysenteric arthropathy, left knee -M02169 Postdysenteric arthropathy, unspecified knee -M02171 Postdysenteric arthropathy, right ankle and foot -M02172 Postdysenteric arthropathy, left ankle and foot -M02179 Postdysenteric arthropathy, unspecified ankle and foot -M0218 Postdysenteric arthropathy, vertebrae -M0219 Postdysenteric arthropathy, multiple sites -M0220 Postimmunization arthropathy, unspecified site -M02211 Postimmunization arthropathy, right shoulder -M02212 Postimmunization arthropathy, left shoulder -M02219 Postimmunization arthropathy, unspecified shoulder -M02221 Postimmunization arthropathy, right elbow -M02222 Postimmunization arthropathy, left elbow -M02229 Postimmunization arthropathy, unspecified elbow -M02231 Postimmunization arthropathy, right wrist -M02232 Postimmunization arthropathy, left wrist -M02239 Postimmunization arthropathy, unspecified wrist -M02241 Postimmunization arthropathy, right hand -M02242 Postimmunization arthropathy, left hand -M02249 Postimmunization arthropathy, unspecified hand -M02251 Postimmunization arthropathy, right hip -M02252 Postimmunization arthropathy, left hip -M02259 Postimmunization arthropathy, unspecified hip -M02261 Postimmunization arthropathy, right knee -M02262 Postimmunization arthropathy, left knee -M02269 Postimmunization arthropathy, unspecified knee -M02271 Postimmunization arthropathy, right ankle and foot -M02272 Postimmunization arthropathy, left ankle and foot -M02279 Postimmunization arthropathy, unspecified ankle and foot -M0228 Postimmunization arthropathy, vertebrae -M0229 Postimmunization arthropathy, multiple sites -M0230 Reiter's disease, unspecified site -M02311 Reiter's disease, right shoulder -M02312 Reiter's disease, left shoulder -M02319 Reiter's disease, unspecified shoulder -M02321 Reiter's disease, right elbow -M02322 Reiter's disease, left elbow -M02329 Reiter's disease, unspecified elbow -M02331 Reiter's disease, right wrist -M02332 Reiter's disease, left wrist -M02339 Reiter's disease, unspecified wrist -M02341 Reiter's disease, right hand -M02342 Reiter's disease, left hand -M02349 Reiter's disease, unspecified hand -M02351 Reiter's disease, right hip -M02352 Reiter's disease, left hip -M02359 Reiter's disease, unspecified hip -M02361 Reiter's disease, right knee -M02362 Reiter's disease, left knee -M02369 Reiter's disease, unspecified knee -M02371 Reiter's disease, right ankle and foot -M02372 Reiter's disease, left ankle and foot -M02379 Reiter's disease, unspecified ankle and foot -M0238 Reiter's disease, vertebrae -M0239 Reiter's disease, multiple sites -M0280 Other reactive arthropathies, unspecified site -M02811 Other reactive arthropathies, right shoulder -M02812 Other reactive arthropathies, left shoulder -M02819 Other reactive arthropathies, unspecified shoulder -M02821 Other reactive arthropathies, right elbow -M02822 Other reactive arthropathies, left elbow -M02829 Other reactive arthropathies, unspecified elbow -M02831 Other reactive arthropathies, right wrist -M02832 Other reactive arthropathies, left wrist -M02839 Other reactive arthropathies, unspecified wrist -M02841 Other reactive arthropathies, right hand -M02842 Other reactive arthropathies, left hand -M02849 Other reactive arthropathies, unspecified hand -M02851 Other reactive arthropathies, right hip -M02852 Other reactive arthropathies, left hip -M02859 Other reactive arthropathies, unspecified hip -M02861 Other reactive arthropathies, right knee -M02862 Other reactive arthropathies, left knee -M02869 Other reactive arthropathies, unspecified knee -M02871 Other reactive arthropathies, right ankle and foot -M02872 Other reactive arthropathies, left ankle and foot -M02879 Other reactive arthropathies, unspecified ankle and foot -M0288 Other reactive arthropathies, vertebrae -M0289 Other reactive arthropathies, multiple sites -M029 Reactive arthropathy, unspecified -M041 Periodic fever syndromes -M042 Cryopyrin-associated periodic syndromes -M048 Other autoinflammatory syndromes -M049 Autoinflammatory syndrome, unspecified -M0500 Felty's syndrome, unspecified site -M05011 Felty's syndrome, right shoulder -M05012 Felty's syndrome, left shoulder -M05019 Felty's syndrome, unspecified shoulder -M05021 Felty's syndrome, right elbow -M05022 Felty's syndrome, left elbow -M05029 Felty's syndrome, unspecified elbow -M05031 Felty's syndrome, right wrist -M05032 Felty's syndrome, left wrist -M05039 Felty's syndrome, unspecified wrist -M05041 Felty's syndrome, right hand -M05042 Felty's syndrome, left hand -M05049 Felty's syndrome, unspecified hand -M05051 Felty's syndrome, right hip -M05052 Felty's syndrome, left hip -M05059 Felty's syndrome, unspecified hip -M05061 Felty's syndrome, right knee -M05062 Felty's syndrome, left knee -M05069 Felty's syndrome, unspecified knee -M05071 Felty's syndrome, right ankle and foot -M05072 Felty's syndrome, left ankle and foot -M05079 Felty's syndrome, unspecified ankle and foot -M0509 Felty's syndrome, multiple sites -M0510 Rheumatoid lung disease with rheumatoid arthritis of unspecified site -M05111 Rheumatoid lung disease with rheumatoid arthritis of right shoulder -M05112 Rheumatoid lung disease with rheumatoid arthritis of left shoulder -M05119 Rheumatoid lung disease with rheumatoid arthritis of unspecified shoulder -M05121 Rheumatoid lung disease with rheumatoid arthritis of right elbow -M05122 Rheumatoid lung disease with rheumatoid arthritis of left elbow -M05129 Rheumatoid lung disease with rheumatoid arthritis of unspecified elbow -M05131 Rheumatoid lung disease with rheumatoid arthritis of right wrist -M05132 Rheumatoid lung disease with rheumatoid arthritis of left wrist -M05139 Rheumatoid lung disease with rheumatoid arthritis of unspecified wrist -M05141 Rheumatoid lung disease with rheumatoid arthritis of right hand -M05142 Rheumatoid lung disease with rheumatoid arthritis of left hand -M05149 Rheumatoid lung disease with rheumatoid arthritis of unspecified hand -M05151 Rheumatoid lung disease with rheumatoid arthritis of right hip -M05152 Rheumatoid lung disease with rheumatoid arthritis of left hip -M05159 Rheumatoid lung disease with rheumatoid arthritis of unspecified hip -M05161 Rheumatoid lung disease with rheumatoid arthritis of right knee -M05162 Rheumatoid lung disease with rheumatoid arthritis of left knee -M05169 Rheumatoid lung disease with rheumatoid arthritis of unspecified knee -M05171 Rheumatoid lung disease with rheumatoid arthritis of right ankle and foot -M05172 Rheumatoid lung disease with rheumatoid arthritis of left ankle and foot -M05179 Rheumatoid lung disease with rheumatoid arthritis of unspecified ankle and foot -M0519 Rheumatoid lung disease with rheumatoid arthritis of multiple sites -M0520 Rheumatoid vasculitis with rheumatoid arthritis of unspecified site -M05211 Rheumatoid vasculitis with rheumatoid arthritis of right shoulder -M05212 Rheumatoid vasculitis with rheumatoid arthritis of left shoulder -M05219 Rheumatoid vasculitis with rheumatoid arthritis of unspecified shoulder -M05221 Rheumatoid vasculitis with rheumatoid arthritis of right elbow -M05222 Rheumatoid vasculitis with rheumatoid arthritis of left elbow -M05229 Rheumatoid vasculitis with rheumatoid arthritis of unspecified elbow -M05231 Rheumatoid vasculitis with rheumatoid arthritis of right wrist -M05232 Rheumatoid vasculitis with rheumatoid arthritis of left wrist -M05239 Rheumatoid vasculitis with rheumatoid arthritis of unspecified wrist -M05241 Rheumatoid vasculitis with rheumatoid arthritis of right hand -M05242 Rheumatoid vasculitis with rheumatoid arthritis of left hand -M05249 Rheumatoid vasculitis with rheumatoid arthritis of unspecified hand -M05251 Rheumatoid vasculitis with rheumatoid arthritis of right hip -M05252 Rheumatoid vasculitis with rheumatoid arthritis of left hip -M05259 Rheumatoid vasculitis with rheumatoid arthritis of unspecified hip -M05261 Rheumatoid vasculitis with rheumatoid arthritis of right knee -M05262 Rheumatoid vasculitis with rheumatoid arthritis of left knee -M05269 Rheumatoid vasculitis with rheumatoid arthritis of unspecified knee -M05271 Rheumatoid vasculitis with rheumatoid arthritis of right ankle and foot -M05272 Rheumatoid vasculitis with rheumatoid arthritis of left ankle and foot -M05279 Rheumatoid vasculitis with rheumatoid arthritis of unspecified ankle and foot -M0529 Rheumatoid vasculitis with rheumatoid arthritis of multiple sites -M0530 Rheumatoid heart disease with rheumatoid arthritis of unspecified site -M05311 Rheumatoid heart disease with rheumatoid arthritis of right shoulder -M05312 Rheumatoid heart disease with rheumatoid arthritis of left shoulder -M05319 Rheumatoid heart disease with rheumatoid arthritis of unspecified shoulder -M05321 Rheumatoid heart disease with rheumatoid arthritis of right elbow -M05322 Rheumatoid heart disease with rheumatoid arthritis of left elbow -M05329 Rheumatoid heart disease with rheumatoid arthritis of unspecified elbow -M05331 Rheumatoid heart disease with rheumatoid arthritis of right wrist -M05332 Rheumatoid heart disease with rheumatoid arthritis of left wrist -M05339 Rheumatoid heart disease with rheumatoid arthritis of unspecified wrist -M05341 Rheumatoid heart disease with rheumatoid arthritis of right hand -M05342 Rheumatoid heart disease with rheumatoid arthritis of left hand -M05349 Rheumatoid heart disease with rheumatoid arthritis of unspecified hand -M05351 Rheumatoid heart disease with rheumatoid arthritis of right hip -M05352 Rheumatoid heart disease with rheumatoid arthritis of left hip -M05359 Rheumatoid heart disease with rheumatoid arthritis of unspecified hip -M05361 Rheumatoid heart disease with rheumatoid arthritis of right knee -M05362 Rheumatoid heart disease with rheumatoid arthritis of left knee -M05369 Rheumatoid heart disease with rheumatoid arthritis of unspecified knee -M05371 Rheumatoid heart disease with rheumatoid arthritis of right ankle and foot -M05372 Rheumatoid heart disease with rheumatoid arthritis of left ankle and foot -M05379 Rheumatoid heart disease with rheumatoid arthritis of unspecified ankle and foot -M0539 Rheumatoid heart disease with rheumatoid arthritis of multiple sites -M0540 Rheumatoid myopathy with rheumatoid arthritis of unspecified site -M05411 Rheumatoid myopathy with rheumatoid arthritis of right shoulder -M05412 Rheumatoid myopathy with rheumatoid arthritis of left shoulder -M05419 Rheumatoid myopathy with rheumatoid arthritis of unspecified shoulder -M05421 Rheumatoid myopathy with rheumatoid arthritis of right elbow -M05422 Rheumatoid myopathy with rheumatoid arthritis of left elbow -M05429 Rheumatoid myopathy with rheumatoid arthritis of unspecified elbow -M05431 Rheumatoid myopathy with rheumatoid arthritis of right wrist -M05432 Rheumatoid myopathy with rheumatoid arthritis of left wrist -M05439 Rheumatoid myopathy with rheumatoid arthritis of unspecified wrist -M05441 Rheumatoid myopathy with rheumatoid arthritis of right hand -M05442 Rheumatoid myopathy with rheumatoid arthritis of left hand -M05449 Rheumatoid myopathy with rheumatoid arthritis of unspecified hand -M05451 Rheumatoid myopathy with rheumatoid arthritis of right hip -M05452 Rheumatoid myopathy with rheumatoid arthritis of left hip -M05459 Rheumatoid myopathy with rheumatoid arthritis of unspecified hip -M05461 Rheumatoid myopathy with rheumatoid arthritis of right knee -M05462 Rheumatoid myopathy with rheumatoid arthritis of left knee -M05469 Rheumatoid myopathy with rheumatoid arthritis of unspecified knee -M05471 Rheumatoid myopathy with rheumatoid arthritis of right ankle and foot -M05472 Rheumatoid myopathy with rheumatoid arthritis of left ankle and foot -M05479 Rheumatoid myopathy with rheumatoid arthritis of unspecified ankle and foot -M0549 Rheumatoid myopathy with rheumatoid arthritis of multiple sites -M0550 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified site -M05511 Rheumatoid polyneuropathy with rheumatoid arthritis of right shoulder -M05512 Rheumatoid polyneuropathy with rheumatoid arthritis of left shoulder -M05519 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified shoulder -M05521 Rheumatoid polyneuropathy with rheumatoid arthritis of right elbow -M05522 Rheumatoid polyneuropathy with rheumatoid arthritis of left elbow -M05529 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified elbow -M05531 Rheumatoid polyneuropathy with rheumatoid arthritis of right wrist -M05532 Rheumatoid polyneuropathy with rheumatoid arthritis of left wrist -M05539 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified wrist -M05541 Rheumatoid polyneuropathy with rheumatoid arthritis of right hand -M05542 Rheumatoid polyneuropathy with rheumatoid arthritis of left hand -M05549 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified hand -M05551 Rheumatoid polyneuropathy with rheumatoid arthritis of right hip -M05552 Rheumatoid polyneuropathy with rheumatoid arthritis of left hip -M05559 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified hip -M05561 Rheumatoid polyneuropathy with rheumatoid arthritis of right knee -M05562 Rheumatoid polyneuropathy with rheumatoid arthritis of left knee -M05569 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified knee -M05571 Rheumatoid polyneuropathy with rheumatoid arthritis of right ankle and foot -M05572 Rheumatoid polyneuropathy with rheumatoid arthritis of left ankle and foot -M05579 Rheumatoid polyneuropathy with rheumatoid arthritis of unspecified ankle and foot -M0559 Rheumatoid polyneuropathy with rheumatoid arthritis of multiple sites -M0560 Rheumatoid arthritis of unspecified site with involvement of other organs and systems -M05611 Rheumatoid arthritis of right shoulder with involvement of other organs and systems -M05612 Rheumatoid arthritis of left shoulder with involvement of other organs and systems -M05619 Rheumatoid arthritis of unspecified shoulder with involvement of other organs and systems -M05621 Rheumatoid arthritis of right elbow with involvement of other organs and systems -M05622 Rheumatoid arthritis of left elbow with involvement of other organs and systems -M05629 Rheumatoid arthritis of unspecified elbow with involvement of other organs and systems -M05631 Rheumatoid arthritis of right wrist with involvement of other organs and systems -M05632 Rheumatoid arthritis of left wrist with involvement of other organs and systems -M05639 Rheumatoid arthritis of unspecified wrist with involvement of other organs and systems -M05641 Rheumatoid arthritis of right hand with involvement of other organs and systems -M05642 Rheumatoid arthritis of left hand with involvement of other organs and systems -M05649 Rheumatoid arthritis of unspecified hand with involvement of other organs and systems -M05651 Rheumatoid arthritis of right hip with involvement of other organs and systems -M05652 Rheumatoid arthritis of left hip with involvement of other organs and systems -M05659 Rheumatoid arthritis of unspecified hip with involvement of other organs and systems -M05661 Rheumatoid arthritis of right knee with involvement of other organs and systems -M05662 Rheumatoid arthritis of left knee with involvement of other organs and systems -M05669 Rheumatoid arthritis of unspecified knee with involvement of other organs and systems -M05671 Rheumatoid arthritis of right ankle and foot with involvement of other organs and systems -M05672 Rheumatoid arthritis of left ankle and foot with involvement of other organs and systems -M05679 Rheumatoid arthritis of unspecified ankle and foot with involvement of other organs and systems -M0569 Rheumatoid arthritis of multiple sites with involvement of other organs and systems -M0570 Rheumatoid arthritis with rheumatoid factor of unspecified site without organ or systems involvement -M05711 Rheumatoid arthritis with rheumatoid factor of right shoulder without organ or systems involvement -M05712 Rheumatoid arthritis with rheumatoid factor of left shoulder without organ or systems involvement -M05719 Rheumatoid arthritis with rheumatoid factor of unspecified shoulder without organ or systems involvement -M05721 Rheumatoid arthritis with rheumatoid factor of right elbow without organ or systems involvement -M05722 Rheumatoid arthritis with rheumatoid factor of left elbow without organ or systems involvement -M05729 Rheumatoid arthritis with rheumatoid factor of unspecified elbow without organ or systems involvement -M05731 Rheumatoid arthritis with rheumatoid factor of right wrist without organ or systems involvement -M05732 Rheumatoid arthritis with rheumatoid factor of left wrist without organ or systems involvement -M05739 Rheumatoid arthritis with rheumatoid factor of unspecified wrist without organ or systems involvement -M05741 Rheumatoid arthritis with rheumatoid factor of right hand without organ or systems involvement -M05742 Rheumatoid arthritis with rheumatoid factor of left hand without organ or systems involvement -M05749 Rheumatoid arthritis with rheumatoid factor of unspecified hand without organ or systems involvement -M05751 Rheumatoid arthritis with rheumatoid factor of right hip without organ or systems involvement -M05752 Rheumatoid arthritis with rheumatoid factor of left hip without organ or systems involvement -M05759 Rheumatoid arthritis with rheumatoid factor of unspecified hip without organ or systems involvement -M05761 Rheumatoid arthritis with rheumatoid factor of right knee without organ or systems involvement -M05762 Rheumatoid arthritis with rheumatoid factor of left knee without organ or systems involvement -M05769 Rheumatoid arthritis with rheumatoid factor of unspecified knee without organ or systems involvement -M05771 Rheumatoid arthritis with rheumatoid factor of right ankle and foot without organ or systems involvement -M05772 Rheumatoid arthritis with rheumatoid factor of left ankle and foot without organ or systems involvement -M05779 Rheumatoid arthritis with rheumatoid factor of unspecified ankle and foot without organ or systems involvement -M0579 Rheumatoid arthritis with rheumatoid factor of multiple sites without organ or systems involvement -M0580 Other rheumatoid arthritis with rheumatoid factor of unspecified site -M05811 Other rheumatoid arthritis with rheumatoid factor of right shoulder -M05812 Other rheumatoid arthritis with rheumatoid factor of left shoulder -M05819 Other rheumatoid arthritis with rheumatoid factor of unspecified shoulder -M05821 Other rheumatoid arthritis with rheumatoid factor of right elbow -M05822 Other rheumatoid arthritis with rheumatoid factor of left elbow -M05829 Other rheumatoid arthritis with rheumatoid factor of unspecified elbow -M05831 Other rheumatoid arthritis with rheumatoid factor of right wrist -M05832 Other rheumatoid arthritis with rheumatoid factor of left wrist -M05839 Other rheumatoid arthritis with rheumatoid factor of unspecified wrist -M05841 Other rheumatoid arthritis with rheumatoid factor of right hand -M05842 Other rheumatoid arthritis with rheumatoid factor of left hand -M05849 Other rheumatoid arthritis with rheumatoid factor of unspecified hand -M05851 Other rheumatoid arthritis with rheumatoid factor of right hip -M05852 Other rheumatoid arthritis with rheumatoid factor of left hip -M05859 Other rheumatoid arthritis with rheumatoid factor of unspecified hip -M05861 Other rheumatoid arthritis with rheumatoid factor of right knee -M05862 Other rheumatoid arthritis with rheumatoid factor of left knee -M05869 Other rheumatoid arthritis with rheumatoid factor of unspecified knee -M05871 Other rheumatoid arthritis with rheumatoid factor of right ankle and foot -M05872 Other rheumatoid arthritis with rheumatoid factor of left ankle and foot -M05879 Other rheumatoid arthritis with rheumatoid factor of unspecified ankle and foot -M0589 Other rheumatoid arthritis with rheumatoid factor of multiple sites -M059 Rheumatoid arthritis with rheumatoid factor, unspecified -M0600 Rheumatoid arthritis without rheumatoid factor, unspecified site -M06011 Rheumatoid arthritis without rheumatoid factor, right shoulder -M06012 Rheumatoid arthritis without rheumatoid factor, left shoulder -M06019 Rheumatoid arthritis without rheumatoid factor, unspecified shoulder -M06021 Rheumatoid arthritis without rheumatoid factor, right elbow -M06022 Rheumatoid arthritis without rheumatoid factor, left elbow -M06029 Rheumatoid arthritis without rheumatoid factor, unspecified elbow -M06031 Rheumatoid arthritis without rheumatoid factor, right wrist -M06032 Rheumatoid arthritis without rheumatoid factor, left wrist -M06039 Rheumatoid arthritis without rheumatoid factor, unspecified wrist -M06041 Rheumatoid arthritis without rheumatoid factor, right hand -M06042 Rheumatoid arthritis without rheumatoid factor, left hand -M06049 Rheumatoid arthritis without rheumatoid factor, unspecified hand -M06051 Rheumatoid arthritis without rheumatoid factor, right hip -M06052 Rheumatoid arthritis without rheumatoid factor, left hip -M06059 Rheumatoid arthritis without rheumatoid factor, unspecified hip -M06061 Rheumatoid arthritis without rheumatoid factor, right knee -M06062 Rheumatoid arthritis without rheumatoid factor, left knee -M06069 Rheumatoid arthritis without rheumatoid factor, unspecified knee -M06071 Rheumatoid arthritis without rheumatoid factor, right ankle and foot -M06072 Rheumatoid arthritis without rheumatoid factor, left ankle and foot -M06079 Rheumatoid arthritis without rheumatoid factor, unspecified ankle and foot -M0608 Rheumatoid arthritis without rheumatoid factor, vertebrae -M0609 Rheumatoid arthritis without rheumatoid factor, multiple sites -M061 Adult-onset Still's disease -M0620 Rheumatoid bursitis, unspecified site -M06211 Rheumatoid bursitis, right shoulder -M06212 Rheumatoid bursitis, left shoulder -M06219 Rheumatoid bursitis, unspecified shoulder -M06221 Rheumatoid bursitis, right elbow -M06222 Rheumatoid bursitis, left elbow -M06229 Rheumatoid bursitis, unspecified elbow -M06231 Rheumatoid bursitis, right wrist -M06232 Rheumatoid bursitis, left wrist -M06239 Rheumatoid bursitis, unspecified wrist -M06241 Rheumatoid bursitis, right hand -M06242 Rheumatoid bursitis, left hand -M06249 Rheumatoid bursitis, unspecified hand -M06251 Rheumatoid bursitis, right hip -M06252 Rheumatoid bursitis, left hip -M06259 Rheumatoid bursitis, unspecified hip -M06261 Rheumatoid bursitis, right knee -M06262 Rheumatoid bursitis, left knee -M06269 Rheumatoid bursitis, unspecified knee -M06271 Rheumatoid bursitis, right ankle and foot -M06272 Rheumatoid bursitis, left ankle and foot -M06279 Rheumatoid bursitis, unspecified ankle and foot -M0628 Rheumatoid bursitis, vertebrae -M0629 Rheumatoid bursitis, multiple sites -M0630 Rheumatoid nodule, unspecified site -M06311 Rheumatoid nodule, right shoulder -M06312 Rheumatoid nodule, left shoulder -M06319 Rheumatoid nodule, unspecified shoulder -M06321 Rheumatoid nodule, right elbow -M06322 Rheumatoid nodule, left elbow -M06329 Rheumatoid nodule, unspecified elbow -M06331 Rheumatoid nodule, right wrist -M06332 Rheumatoid nodule, left wrist -M06339 Rheumatoid nodule, unspecified wrist -M06341 Rheumatoid nodule, right hand -M06342 Rheumatoid nodule, left hand -M06349 Rheumatoid nodule, unspecified hand -M06351 Rheumatoid nodule, right hip -M06352 Rheumatoid nodule, left hip -M06359 Rheumatoid nodule, unspecified hip -M06361 Rheumatoid nodule, right knee -M06362 Rheumatoid nodule, left knee -M06369 Rheumatoid nodule, unspecified knee -M06371 Rheumatoid nodule, right ankle and foot -M06372 Rheumatoid nodule, left ankle and foot -M06379 Rheumatoid nodule, unspecified ankle and foot -M0638 Rheumatoid nodule, vertebrae -M0639 Rheumatoid nodule, multiple sites -M064 Inflammatory polyarthropathy -M0680 Other specified rheumatoid arthritis, unspecified site -M06811 Other specified rheumatoid arthritis, right shoulder -M06812 Other specified rheumatoid arthritis, left shoulder -M06819 Other specified rheumatoid arthritis, unspecified shoulder -M06821 Other specified rheumatoid arthritis, right elbow -M06822 Other specified rheumatoid arthritis, left elbow -M06829 Other specified rheumatoid arthritis, unspecified elbow -M06831 Other specified rheumatoid arthritis, right wrist -M06832 Other specified rheumatoid arthritis, left wrist -M06839 Other specified rheumatoid arthritis, unspecified wrist -M06841 Other specified rheumatoid arthritis, right hand -M06842 Other specified rheumatoid arthritis, left hand -M06849 Other specified rheumatoid arthritis, unspecified hand -M06851 Other specified rheumatoid arthritis, right hip -M06852 Other specified rheumatoid arthritis, left hip -M06859 Other specified rheumatoid arthritis, unspecified hip -M06861 Other specified rheumatoid arthritis, right knee -M06862 Other specified rheumatoid arthritis, left knee -M06869 Other specified rheumatoid arthritis, unspecified knee -M06871 Other specified rheumatoid arthritis, right ankle and foot -M06872 Other specified rheumatoid arthritis, left ankle and foot -M06879 Other specified rheumatoid arthritis, unspecified ankle and foot -M0688 Other specified rheumatoid arthritis, vertebrae -M0689 Other specified rheumatoid arthritis, multiple sites -M069 Rheumatoid arthritis, unspecified -M0760 Enteropathic arthropathies, unspecified site -M07611 Enteropathic arthropathies, right shoulder -M07612 Enteropathic arthropathies, left shoulder -M07619 Enteropathic arthropathies, unspecified shoulder -M07621 Enteropathic arthropathies, right elbow -M07622 Enteropathic arthropathies, left elbow -M07629 Enteropathic arthropathies, unspecified elbow -M07631 Enteropathic arthropathies, right wrist -M07632 Enteropathic arthropathies, left wrist -M07639 Enteropathic arthropathies, unspecified wrist -M07641 Enteropathic arthropathies, right hand -M07642 Enteropathic arthropathies, left hand -M07649 Enteropathic arthropathies, unspecified hand -M07651 Enteropathic arthropathies, right hip -M07652 Enteropathic arthropathies, left hip -M07659 Enteropathic arthropathies, unspecified hip -M07661 Enteropathic arthropathies, right knee -M07662 Enteropathic arthropathies, left knee -M07669 Enteropathic arthropathies, unspecified knee -M07671 Enteropathic arthropathies, right ankle and foot -M07672 Enteropathic arthropathies, left ankle and foot -M07679 Enteropathic arthropathies, unspecified ankle and foot -M0768 Enteropathic arthropathies, vertebrae -M0769 Enteropathic arthropathies, multiple sites -M0800 Unspecified juvenile rheumatoid arthritis of unspecified site -M08011 Unspecified juvenile rheumatoid arthritis, right shoulder -M08012 Unspecified juvenile rheumatoid arthritis, left shoulder -M08019 Unspecified juvenile rheumatoid arthritis, unspecified shoulder -M08021 Unspecified juvenile rheumatoid arthritis, right elbow -M08022 Unspecified juvenile rheumatoid arthritis, left elbow -M08029 Unspecified juvenile rheumatoid arthritis, unspecified elbow -M08031 Unspecified juvenile rheumatoid arthritis, right wrist -M08032 Unspecified juvenile rheumatoid arthritis, left wrist -M08039 Unspecified juvenile rheumatoid arthritis, unspecified wrist -M08041 Unspecified juvenile rheumatoid arthritis, right hand -M08042 Unspecified juvenile rheumatoid arthritis, left hand -M08049 Unspecified juvenile rheumatoid arthritis, unspecified hand -M08051 Unspecified juvenile rheumatoid arthritis, right hip -M08052 Unspecified juvenile rheumatoid arthritis, left hip -M08059 Unspecified juvenile rheumatoid arthritis, unspecified hip -M08061 Unspecified juvenile rheumatoid arthritis, right knee -M08062 Unspecified juvenile rheumatoid arthritis, left knee -M08069 Unspecified juvenile rheumatoid arthritis, unspecified knee -M08071 Unspecified juvenile rheumatoid arthritis, right ankle and foot -M08072 Unspecified juvenile rheumatoid arthritis, left ankle and foot -M08079 Unspecified juvenile rheumatoid arthritis, unspecified ankle and foot -M0808 Unspecified juvenile rheumatoid arthritis, vertebrae -M0809 Unspecified juvenile rheumatoid arthritis, multiple sites -M081 Juvenile ankylosing spondylitis -M0820 Juvenile rheumatoid arthritis with systemic onset, unspecified site -M08211 Juvenile rheumatoid arthritis with systemic onset, right shoulder -M08212 Juvenile rheumatoid arthritis with systemic onset, left shoulder -M08219 Juvenile rheumatoid arthritis with systemic onset, unspecified shoulder -M08221 Juvenile rheumatoid arthritis with systemic onset, right elbow -M08222 Juvenile rheumatoid arthritis with systemic onset, left elbow -M08229 Juvenile rheumatoid arthritis with systemic onset, unspecified elbow -M08231 Juvenile rheumatoid arthritis with systemic onset, right wrist -M08232 Juvenile rheumatoid arthritis with systemic onset, left wrist -M08239 Juvenile rheumatoid arthritis with systemic onset, unspecified wrist -M08241 Juvenile rheumatoid arthritis with systemic onset, right hand -M08242 Juvenile rheumatoid arthritis with systemic onset, left hand -M08249 Juvenile rheumatoid arthritis with systemic onset, unspecified hand -M08251 Juvenile rheumatoid arthritis with systemic onset, right hip -M08252 Juvenile rheumatoid arthritis with systemic onset, left hip -M08259 Juvenile rheumatoid arthritis with systemic onset, unspecified hip -M08261 Juvenile rheumatoid arthritis with systemic onset, right knee -M08262 Juvenile rheumatoid arthritis with systemic onset, left knee -M08269 Juvenile rheumatoid arthritis with systemic onset, unspecified knee -M08271 Juvenile rheumatoid arthritis with systemic onset, right ankle and foot -M08272 Juvenile rheumatoid arthritis with systemic onset, left ankle and foot -M08279 Juvenile rheumatoid arthritis with systemic onset, unspecified ankle and foot -M0828 Juvenile rheumatoid arthritis with systemic onset, vertebrae -M0829 Juvenile rheumatoid arthritis with systemic onset, multiple sites -M083 Juvenile rheumatoid polyarthritis (seronegative) -M0840 Pauciarticular juvenile rheumatoid arthritis, unspecified site -M08411 Pauciarticular juvenile rheumatoid arthritis, right shoulder -M08412 Pauciarticular juvenile rheumatoid arthritis, left shoulder -M08419 Pauciarticular juvenile rheumatoid arthritis, unspecified shoulder -M08421 Pauciarticular juvenile rheumatoid arthritis, right elbow -M08422 Pauciarticular juvenile rheumatoid arthritis, left elbow -M08429 Pauciarticular juvenile rheumatoid arthritis, unspecified elbow -M08431 Pauciarticular juvenile rheumatoid arthritis, right wrist -M08432 Pauciarticular juvenile rheumatoid arthritis, left wrist -M08439 Pauciarticular juvenile rheumatoid arthritis, unspecified wrist -M08441 Pauciarticular juvenile rheumatoid arthritis, right hand -M08442 Pauciarticular juvenile rheumatoid arthritis, left hand -M08449 Pauciarticular juvenile rheumatoid arthritis, unspecified hand -M08451 Pauciarticular juvenile rheumatoid arthritis, right hip -M08452 Pauciarticular juvenile rheumatoid arthritis, left hip -M08459 Pauciarticular juvenile rheumatoid arthritis, unspecified hip -M08461 Pauciarticular juvenile rheumatoid arthritis, right knee -M08462 Pauciarticular juvenile rheumatoid arthritis, left knee -M08469 Pauciarticular juvenile rheumatoid arthritis, unspecified knee -M08471 Pauciarticular juvenile rheumatoid arthritis, right ankle and foot -M08472 Pauciarticular juvenile rheumatoid arthritis, left ankle and foot -M08479 Pauciarticular juvenile rheumatoid arthritis, unspecified ankle and foot -M0848 Pauciarticular juvenile rheumatoid arthritis, vertebrae -M0880 Other juvenile arthritis, unspecified site -M08811 Other juvenile arthritis, right shoulder -M08812 Other juvenile arthritis, left shoulder -M08819 Other juvenile arthritis, unspecified shoulder -M08821 Other juvenile arthritis, right elbow -M08822 Other juvenile arthritis, left elbow -M08829 Other juvenile arthritis, unspecified elbow -M08831 Other juvenile arthritis, right wrist -M08832 Other juvenile arthritis, left wrist -M08839 Other juvenile arthritis, unspecified wrist -M08841 Other juvenile arthritis, right hand -M08842 Other juvenile arthritis, left hand -M08849 Other juvenile arthritis, unspecified hand -M08851 Other juvenile arthritis, right hip -M08852 Other juvenile arthritis, left hip -M08859 Other juvenile arthritis, unspecified hip -M08861 Other juvenile arthritis, right knee -M08862 Other juvenile arthritis, left knee -M08869 Other juvenile arthritis, unspecified knee -M08871 Other juvenile arthritis, right ankle and foot -M08872 Other juvenile arthritis, left ankle and foot -M08879 Other juvenile arthritis, unspecified ankle and foot -M0888 Other juvenile arthritis, other specified site -M0889 Other juvenile arthritis, multiple sites -M0890 Juvenile arthritis, unspecified, unspecified site -M08911 Juvenile arthritis, unspecified, right shoulder -M08912 Juvenile arthritis, unspecified, left shoulder -M08919 Juvenile arthritis, unspecified, unspecified shoulder -M08921 Juvenile arthritis, unspecified, right elbow -M08922 Juvenile arthritis, unspecified, left elbow -M08929 Juvenile arthritis, unspecified, unspecified elbow -M08931 Juvenile arthritis, unspecified, right wrist -M08932 Juvenile arthritis, unspecified, left wrist -M08939 Juvenile arthritis, unspecified, unspecified wrist -M08941 Juvenile arthritis, unspecified, right hand -M08942 Juvenile arthritis, unspecified, left hand -M08949 Juvenile arthritis, unspecified, unspecified hand -M08951 Juvenile arthritis, unspecified, right hip -M08952 Juvenile arthritis, unspecified, left hip -M08959 Juvenile arthritis, unspecified, unspecified hip -M08961 Juvenile arthritis, unspecified, right knee -M08962 Juvenile arthritis, unspecified, left knee -M08969 Juvenile arthritis, unspecified, unspecified knee -M08971 Juvenile arthritis, unspecified, right ankle and foot -M08972 Juvenile arthritis, unspecified, left ankle and foot -M08979 Juvenile arthritis, unspecified, unspecified ankle and foot -M0898 Juvenile arthritis, unspecified, vertebrae -M0899 Juvenile arthritis, unspecified, multiple sites -M1A00X0 Idiopathic chronic gout, unspecified site, without tophus (tophi) -M1A00X1 Idiopathic chronic gout, unspecified site, with tophus (tophi) -M1A0110 Idiopathic chronic gout, right shoulder, without tophus (tophi) -M1A0111 Idiopathic chronic gout, right shoulder, with tophus (tophi) -M1A0120 Idiopathic chronic gout, left shoulder, without tophus (tophi) -M1A0121 Idiopathic chronic gout, left shoulder, with tophus (tophi) -M1A0190 Idiopathic chronic gout, unspecified shoulder, without tophus (tophi) -M1A0191 Idiopathic chronic gout, unspecified shoulder, with tophus (tophi) -M1A0210 Idiopathic chronic gout, right elbow, without tophus (tophi) -M1A0211 Idiopathic chronic gout, right elbow, with tophus (tophi) -M1A0220 Idiopathic chronic gout, left elbow, without tophus (tophi) -M1A0221 Idiopathic chronic gout, left elbow, with tophus (tophi) -M1A0290 Idiopathic chronic gout, unspecified elbow, without tophus (tophi) -M1A0291 Idiopathic chronic gout, unspecified elbow, with tophus (tophi) -M1A0310 Idiopathic chronic gout, right wrist, without tophus (tophi) -M1A0311 Idiopathic chronic gout, right wrist, with tophus (tophi) -M1A0320 Idiopathic chronic gout, left wrist, without tophus (tophi) -M1A0321 Idiopathic chronic gout, left wrist, with tophus (tophi) -M1A0390 Idiopathic chronic gout, unspecified wrist, without tophus (tophi) -M1A0391 Idiopathic chronic gout, unspecified wrist, with tophus (tophi) -M1A0410 Idiopathic chronic gout, right hand, without tophus (tophi) -M1A0411 Idiopathic chronic gout, right hand, with tophus (tophi) -M1A0420 Idiopathic chronic gout, left hand, without tophus (tophi) -M1A0421 Idiopathic chronic gout, left hand, with tophus (tophi) -M1A0490 Idiopathic chronic gout, unspecified hand, without tophus (tophi) -M1A0491 Idiopathic chronic gout, unspecified hand, with tophus (tophi) -M1A0510 Idiopathic chronic gout, right hip, without tophus (tophi) -M1A0511 Idiopathic chronic gout, right hip, with tophus (tophi) -M1A0520 Idiopathic chronic gout, left hip, without tophus (tophi) -M1A0521 Idiopathic chronic gout, left hip, with tophus (tophi) -M1A0590 Idiopathic chronic gout, unspecified hip, without tophus (tophi) -M1A0591 Idiopathic chronic gout, unspecified hip, with tophus (tophi) -M1A0610 Idiopathic chronic gout, right knee, without tophus (tophi) -M1A0611 Idiopathic chronic gout, right knee, with tophus (tophi) -M1A0620 Idiopathic chronic gout, left knee, without tophus (tophi) -M1A0621 Idiopathic chronic gout, left knee, with tophus (tophi) -M1A0690 Idiopathic chronic gout, unspecified knee, without tophus (tophi) -M1A0691 Idiopathic chronic gout, unspecified knee, with tophus (tophi) -M1A0710 Idiopathic chronic gout, right ankle and foot, without tophus (tophi) -M1A0711 Idiopathic chronic gout, right ankle and foot, with tophus (tophi) -M1A0720 Idiopathic chronic gout, left ankle and foot, without tophus (tophi) -M1A0721 Idiopathic chronic gout, left ankle and foot, with tophus (tophi) -M1A0790 Idiopathic chronic gout, unspecified ankle and foot, without tophus (tophi) -M1A0791 Idiopathic chronic gout, unspecified ankle and foot, with tophus (tophi) -M1A08X0 Idiopathic chronic gout, vertebrae, without tophus (tophi) -M1A08X1 Idiopathic chronic gout, vertebrae, with tophus (tophi) -M1A09X0 Idiopathic chronic gout, multiple sites, without tophus (tophi) -M1A09X1 Idiopathic chronic gout, multiple sites, with tophus (tophi) -M1A10X0 Lead-induced chronic gout, unspecified site, without tophus (tophi) -M1A10X1 Lead-induced chronic gout, unspecified site, with tophus (tophi) -M1A1110 Lead-induced chronic gout, right shoulder, without tophus (tophi) -M1A1111 Lead-induced chronic gout, right shoulder, with tophus (tophi) -M1A1120 Lead-induced chronic gout, left shoulder, without tophus (tophi) -M1A1121 Lead-induced chronic gout, left shoulder, with tophus (tophi) -M1A1190 Lead-induced chronic gout, unspecified shoulder, without tophus (tophi) -M1A1191 Lead-induced chronic gout, unspecified shoulder, with tophus (tophi) -M1A1210 Lead-induced chronic gout, right elbow, without tophus (tophi) -M1A1211 Lead-induced chronic gout, right elbow, with tophus (tophi) -M1A1220 Lead-induced chronic gout, left elbow, without tophus (tophi) -M1A1221 Lead-induced chronic gout, left elbow, with tophus (tophi) -M1A1290 Lead-induced chronic gout, unspecified elbow, without tophus (tophi) -M1A1291 Lead-induced chronic gout, unspecified elbow, with tophus (tophi) -M1A1310 Lead-induced chronic gout, right wrist, without tophus (tophi) -M1A1311 Lead-induced chronic gout, right wrist, with tophus (tophi) -M1A1320 Lead-induced chronic gout, left wrist, without tophus (tophi) -M1A1321 Lead-induced chronic gout, left wrist, with tophus (tophi) -M1A1390 Lead-induced chronic gout, unspecified wrist, without tophus (tophi) -M1A1391 Lead-induced chronic gout, unspecified wrist, with tophus (tophi) -M1A1410 Lead-induced chronic gout, right hand, without tophus (tophi) -M1A1411 Lead-induced chronic gout, right hand, with tophus (tophi) -M1A1420 Lead-induced chronic gout, left hand, without tophus (tophi) -M1A1421 Lead-induced chronic gout, left hand, with tophus (tophi) -M1A1490 Lead-induced chronic gout, unspecified hand, without tophus (tophi) -M1A1491 Lead-induced chronic gout, unspecified hand, with tophus (tophi) -M1A1510 Lead-induced chronic gout, right hip, without tophus (tophi) -M1A1511 Lead-induced chronic gout, right hip, with tophus (tophi) -M1A1520 Lead-induced chronic gout, left hip, without tophus (tophi) -M1A1521 Lead-induced chronic gout, left hip, with tophus (tophi) -M1A1590 Lead-induced chronic gout, unspecified hip, without tophus (tophi) -M1A1591 Lead-induced chronic gout, unspecified hip, with tophus (tophi) -M1A1610 Lead-induced chronic gout, right knee, without tophus (tophi) -M1A1611 Lead-induced chronic gout, right knee, with tophus (tophi) -M1A1620 Lead-induced chronic gout, left knee, without tophus (tophi) -M1A1621 Lead-induced chronic gout, left knee, with tophus (tophi) -M1A1690 Lead-induced chronic gout, unspecified knee, without tophus (tophi) -M1A1691 Lead-induced chronic gout, unspecified knee, with tophus (tophi) -M1A1710 Lead-induced chronic gout, right ankle and foot, without tophus (tophi) -M1A1711 Lead-induced chronic gout, right ankle and foot, with tophus (tophi) -M1A1720 Lead-induced chronic gout, left ankle and foot, without tophus (tophi) -M1A1721 Lead-induced chronic gout, left ankle and foot, with tophus (tophi) -M1A1790 Lead-induced chronic gout, unspecified ankle and foot, without tophus (tophi) -M1A1791 Lead-induced chronic gout, unspecified ankle and foot, with tophus (tophi) -M1A18X0 Lead-induced chronic gout, vertebrae, without tophus (tophi) -M1A18X1 Lead-induced chronic gout, vertebrae, with tophus (tophi) -M1A19X0 Lead-induced chronic gout, multiple sites, without tophus (tophi) -M1A19X1 Lead-induced chronic gout, multiple sites, with tophus (tophi) -M1A20X0 Drug-induced chronic gout, unspecified site, without tophus (tophi) -M1A20X1 Drug-induced chronic gout, unspecified site, with tophus (tophi) -M1A2110 Drug-induced chronic gout, right shoulder, without tophus (tophi) -M1A2111 Drug-induced chronic gout, right shoulder, with tophus (tophi) -M1A2120 Drug-induced chronic gout, left shoulder, without tophus (tophi) -M1A2121 Drug-induced chronic gout, left shoulder, with tophus (tophi) -M1A2190 Drug-induced chronic gout, unspecified shoulder, without tophus (tophi) -M1A2191 Drug-induced chronic gout, unspecified shoulder, with tophus (tophi) -M1A2210 Drug-induced chronic gout, right elbow, without tophus (tophi) -M1A2211 Drug-induced chronic gout, right elbow, with tophus (tophi) -M1A2220 Drug-induced chronic gout, left elbow, without tophus (tophi) -M1A2221 Drug-induced chronic gout, left elbow, with tophus (tophi) -M1A2290 Drug-induced chronic gout, unspecified elbow, without tophus (tophi) -M1A2291 Drug-induced chronic gout, unspecified elbow, with tophus (tophi) -M1A2310 Drug-induced chronic gout, right wrist, without tophus (tophi) -M1A2311 Drug-induced chronic gout, right wrist, with tophus (tophi) -M1A2320 Drug-induced chronic gout, left wrist, without tophus (tophi) -M1A2321 Drug-induced chronic gout, left wrist, with tophus (tophi) -M1A2390 Drug-induced chronic gout, unspecified wrist, without tophus (tophi) -M1A2391 Drug-induced chronic gout, unspecified wrist, with tophus (tophi) -M1A2410 Drug-induced chronic gout, right hand, without tophus (tophi) -M1A2411 Drug-induced chronic gout, right hand, with tophus (tophi) -M1A2420 Drug-induced chronic gout, left hand, without tophus (tophi) -M1A2421 Drug-induced chronic gout, left hand, with tophus (tophi) -M1A2490 Drug-induced chronic gout, unspecified hand, without tophus (tophi) -M1A2491 Drug-induced chronic gout, unspecified hand, with tophus (tophi) -M1A2510 Drug-induced chronic gout, right hip, without tophus (tophi) -M1A2511 Drug-induced chronic gout, right hip, with tophus (tophi) -M1A2520 Drug-induced chronic gout, left hip, without tophus (tophi) -M1A2521 Drug-induced chronic gout, left hip, with tophus (tophi) -M1A2590 Drug-induced chronic gout, unspecified hip, without tophus (tophi) -M1A2591 Drug-induced chronic gout, unspecified hip, with tophus (tophi) -M1A2610 Drug-induced chronic gout, right knee, without tophus (tophi) -M1A2611 Drug-induced chronic gout, right knee, with tophus (tophi) -M1A2620 Drug-induced chronic gout, left knee, without tophus (tophi) -M1A2621 Drug-induced chronic gout, left knee, with tophus (tophi) -M1A2690 Drug-induced chronic gout, unspecified knee, without tophus (tophi) -M1A2691 Drug-induced chronic gout, unspecified knee, with tophus (tophi) -M1A2710 Drug-induced chronic gout, right ankle and foot, without tophus (tophi) -M1A2711 Drug-induced chronic gout, right ankle and foot, with tophus (tophi) -M1A2720 Drug-induced chronic gout, left ankle and foot, without tophus (tophi) -M1A2721 Drug-induced chronic gout, left ankle and foot, with tophus (tophi) -M1A2790 Drug-induced chronic gout, unspecified ankle and foot, without tophus (tophi) -M1A2791 Drug-induced chronic gout, unspecified ankle and foot, with tophus (tophi) -M1A28X0 Drug-induced chronic gout, vertebrae, without tophus (tophi) -M1A28X1 Drug-induced chronic gout, vertebrae, with tophus (tophi) -M1A29X0 Drug-induced chronic gout, multiple sites, without tophus (tophi) -M1A29X1 Drug-induced chronic gout, multiple sites, with tophus (tophi) -M1A30X0 Chronic gout due to renal impairment, unspecified site, without tophus (tophi) -M1A30X1 Chronic gout due to renal impairment, unspecified site, with tophus (tophi) -M1A3110 Chronic gout due to renal impairment, right shoulder, without tophus (tophi) -M1A3111 Chronic gout due to renal impairment, right shoulder, with tophus (tophi) -M1A3120 Chronic gout due to renal impairment, left shoulder, without tophus (tophi) -M1A3121 Chronic gout due to renal impairment, left shoulder, with tophus (tophi) -M1A3190 Chronic gout due to renal impairment, unspecified shoulder, without tophus (tophi) -M1A3191 Chronic gout due to renal impairment, unspecified shoulder, with tophus (tophi) -M1A3210 Chronic gout due to renal impairment, right elbow, without tophus (tophi) -M1A3211 Chronic gout due to renal impairment, right elbow, with tophus (tophi) -M1A3220 Chronic gout due to renal impairment, left elbow, without tophus (tophi) -M1A3221 Chronic gout due to renal impairment, left elbow, with tophus (tophi) -M1A3290 Chronic gout due to renal impairment, unspecified elbow, without tophus (tophi) -M1A3291 Chronic gout due to renal impairment, unspecified elbow, with tophus (tophi) -M1A3310 Chronic gout due to renal impairment, right wrist, without tophus (tophi) -M1A3311 Chronic gout due to renal impairment, right wrist, with tophus (tophi) -M1A3320 Chronic gout due to renal impairment, left wrist, without tophus (tophi) -M1A3321 Chronic gout due to renal impairment, left wrist, with tophus (tophi) -M1A3390 Chronic gout due to renal impairment, unspecified wrist, without tophus (tophi) -M1A3391 Chronic gout due to renal impairment, unspecified wrist, with tophus (tophi) -M1A3410 Chronic gout due to renal impairment, right hand, without tophus (tophi) -M1A3411 Chronic gout due to renal impairment, right hand, with tophus (tophi) -M1A3420 Chronic gout due to renal impairment, left hand, without tophus (tophi) -M1A3421 Chronic gout due to renal impairment, left hand, with tophus (tophi) -M1A3490 Chronic gout due to renal impairment, unspecified hand, without tophus (tophi) -M1A3491 Chronic gout due to renal impairment, unspecified hand, with tophus (tophi) -M1A3510 Chronic gout due to renal impairment, right hip, without tophus (tophi) -M1A3511 Chronic gout due to renal impairment, right hip, with tophus (tophi) -M1A3520 Chronic gout due to renal impairment, left hip, without tophus (tophi) -M1A3521 Chronic gout due to renal impairment, left hip, with tophus (tophi) -M1A3590 Chronic gout due to renal impairment, unspecified hip, without tophus (tophi) -M1A3591 Chronic gout due to renal impairment, unspecified hip, with tophus (tophi) -M1A3610 Chronic gout due to renal impairment, right knee, without tophus (tophi) -M1A3611 Chronic gout due to renal impairment, right knee, with tophus (tophi) -M1A3620 Chronic gout due to renal impairment, left knee, without tophus (tophi) -M1A3621 Chronic gout due to renal impairment, left knee, with tophus (tophi) -M1A3690 Chronic gout due to renal impairment, unspecified knee, without tophus (tophi) -M1A3691 Chronic gout due to renal impairment, unspecified knee, with tophus (tophi) -M1A3710 Chronic gout due to renal impairment, right ankle and foot, without tophus (tophi) -M1A3711 Chronic gout due to renal impairment, right ankle and foot, with tophus (tophi) -M1A3720 Chronic gout due to renal impairment, left ankle and foot, without tophus (tophi) -M1A3721 Chronic gout due to renal impairment, left ankle and foot, with tophus (tophi) -M1A3790 Chronic gout due to renal impairment, unspecified ankle and foot, without tophus (tophi) -M1A3791 Chronic gout due to renal impairment, unspecified ankle and foot, with tophus (tophi) -M1A38X0 Chronic gout due to renal impairment, vertebrae, without tophus (tophi) -M1A38X1 Chronic gout due to renal impairment, vertebrae, with tophus (tophi) -M1A39X0 Chronic gout due to renal impairment, multiple sites, without tophus (tophi) -M1A39X1 Chronic gout due to renal impairment, multiple sites, with tophus (tophi) -M1A40X0 Other secondary chronic gout, unspecified site, without tophus (tophi) -M1A40X1 Other secondary chronic gout, unspecified site, with tophus (tophi) -M1A4110 Other secondary chronic gout, right shoulder, without tophus (tophi) -M1A4111 Other secondary chronic gout, right shoulder, with tophus (tophi) -M1A4120 Other secondary chronic gout, left shoulder, without tophus (tophi) -M1A4121 Other secondary chronic gout, left shoulder, with tophus (tophi) -M1A4190 Other secondary chronic gout, unspecified shoulder, without tophus (tophi) -M1A4191 Other secondary chronic gout, unspecified shoulder, with tophus (tophi) -M1A4210 Other secondary chronic gout, right elbow, without tophus (tophi) -M1A4211 Other secondary chronic gout, right elbow, with tophus (tophi) -M1A4220 Other secondary chronic gout, left elbow, without tophus (tophi) -M1A4221 Other secondary chronic gout, left elbow, with tophus (tophi) -M1A4290 Other secondary chronic gout, unspecified elbow, without tophus (tophi) -M1A4291 Other secondary chronic gout, unspecified elbow, with tophus (tophi) -M1A4310 Other secondary chronic gout, right wrist, without tophus (tophi) -M1A4311 Other secondary chronic gout, right wrist, with tophus (tophi) -M1A4320 Other secondary chronic gout, left wrist, without tophus (tophi) -M1A4321 Other secondary chronic gout, left wrist, with tophus (tophi) -M1A4390 Other secondary chronic gout, unspecified wrist, without tophus (tophi) -M1A4391 Other secondary chronic gout, unspecified wrist, with tophus (tophi) -M1A4410 Other secondary chronic gout, right hand, without tophus (tophi) -M1A4411 Other secondary chronic gout, right hand, with tophus (tophi) -M1A4420 Other secondary chronic gout, left hand, without tophus (tophi) -M1A4421 Other secondary chronic gout, left hand, with tophus (tophi) -M1A4490 Other secondary chronic gout, unspecified hand, without tophus (tophi) -M1A4491 Other secondary chronic gout, unspecified hand, with tophus (tophi) -M1A4510 Other secondary chronic gout, right hip, without tophus (tophi) -M1A4511 Other secondary chronic gout, right hip, with tophus (tophi) -M1A4520 Other secondary chronic gout, left hip, without tophus (tophi) -M1A4521 Other secondary chronic gout, left hip, with tophus (tophi) -M1A4590 Other secondary chronic gout, unspecified hip, without tophus (tophi) -M1A4591 Other secondary chronic gout, unspecified hip, with tophus (tophi) -M1A4610 Other secondary chronic gout, right knee, without tophus (tophi) -M1A4611 Other secondary chronic gout, right knee, with tophus (tophi) -M1A4620 Other secondary chronic gout, left knee, without tophus (tophi) -M1A4621 Other secondary chronic gout, left knee, with tophus (tophi) -M1A4690 Other secondary chronic gout, unspecified knee, without tophus (tophi) -M1A4691 Other secondary chronic gout, unspecified knee, with tophus (tophi) -M1A4710 Other secondary chronic gout, right ankle and foot, without tophus (tophi) -M1A4711 Other secondary chronic gout, right ankle and foot, with tophus (tophi) -M1A4720 Other secondary chronic gout, left ankle and foot, without tophus (tophi) -M1A4721 Other secondary chronic gout, left ankle and foot, with tophus (tophi) -M1A4790 Other secondary chronic gout, unspecified ankle and foot, without tophus (tophi) -M1A4791 Other secondary chronic gout, unspecified ankle and foot, with tophus (tophi) -M1A48X0 Other secondary chronic gout, vertebrae, without tophus (tophi) -M1A48X1 Other secondary chronic gout, vertebrae, with tophus (tophi) -M1A49X0 Other secondary chronic gout, multiple sites, without tophus (tophi) -M1A49X1 Other secondary chronic gout, multiple sites, with tophus (tophi) -M1A9XX0 Chronic gout, unspecified, without tophus (tophi) -M1A9XX1 Chronic gout, unspecified, with tophus (tophi) -M1000 Idiopathic gout, unspecified site -M10011 Idiopathic gout, right shoulder -M10012 Idiopathic gout, left shoulder -M10019 Idiopathic gout, unspecified shoulder -M10021 Idiopathic gout, right elbow -M10022 Idiopathic gout, left elbow -M10029 Idiopathic gout, unspecified elbow -M10031 Idiopathic gout, right wrist -M10032 Idiopathic gout, left wrist -M10039 Idiopathic gout, unspecified wrist -M10041 Idiopathic gout, right hand -M10042 Idiopathic gout, left hand -M10049 Idiopathic gout, unspecified hand -M10051 Idiopathic gout, right hip -M10052 Idiopathic gout, left hip -M10059 Idiopathic gout, unspecified hip -M10061 Idiopathic gout, right knee -M10062 Idiopathic gout, left knee -M10069 Idiopathic gout, unspecified knee -M10071 Idiopathic gout, right ankle and foot -M10072 Idiopathic gout, left ankle and foot -M10079 Idiopathic gout, unspecified ankle and foot -M1008 Idiopathic gout, vertebrae -M1009 Idiopathic gout, multiple sites -M1010 Lead-induced gout, unspecified site -M10111 Lead-induced gout, right shoulder -M10112 Lead-induced gout, left shoulder -M10119 Lead-induced gout, unspecified shoulder -M10121 Lead-induced gout, right elbow -M10122 Lead-induced gout, left elbow -M10129 Lead-induced gout, unspecified elbow -M10131 Lead-induced gout, right wrist -M10132 Lead-induced gout, left wrist -M10139 Lead-induced gout, unspecified wrist -M10141 Lead-induced gout, right hand -M10142 Lead-induced gout, left hand -M10149 Lead-induced gout, unspecified hand -M10151 Lead-induced gout, right hip -M10152 Lead-induced gout, left hip -M10159 Lead-induced gout, unspecified hip -M10161 Lead-induced gout, right knee -M10162 Lead-induced gout, left knee -M10169 Lead-induced gout, unspecified knee -M10171 Lead-induced gout, right ankle and foot -M10172 Lead-induced gout, left ankle and foot -M10179 Lead-induced gout, unspecified ankle and foot -M1018 Lead-induced gout, vertebrae -M1019 Lead-induced gout, multiple sites -M1020 Drug-induced gout, unspecified site -M10211 Drug-induced gout, right shoulder -M10212 Drug-induced gout, left shoulder -M10219 Drug-induced gout, unspecified shoulder -M10221 Drug-induced gout, right elbow -M10222 Drug-induced gout, left elbow -M10229 Drug-induced gout, unspecified elbow -M10231 Drug-induced gout, right wrist -M10232 Drug-induced gout, left wrist -M10239 Drug-induced gout, unspecified wrist -M10241 Drug-induced gout, right hand -M10242 Drug-induced gout, left hand -M10249 Drug-induced gout, unspecified hand -M10251 Drug-induced gout, right hip -M10252 Drug-induced gout, left hip -M10259 Drug-induced gout, unspecified hip -M10261 Drug-induced gout, right knee -M10262 Drug-induced gout, left knee -M10269 Drug-induced gout, unspecified knee -M10271 Drug-induced gout, right ankle and foot -M10272 Drug-induced gout, left ankle and foot -M10279 Drug-induced gout, unspecified ankle and foot -M1028 Drug-induced gout, vertebrae -M1029 Drug-induced gout, multiple sites -M1030 Gout due to renal impairment, unspecified site -M10311 Gout due to renal impairment, right shoulder -M10312 Gout due to renal impairment, left shoulder -M10319 Gout due to renal impairment, unspecified shoulder -M10321 Gout due to renal impairment, right elbow -M10322 Gout due to renal impairment, left elbow -M10329 Gout due to renal impairment, unspecified elbow -M10331 Gout due to renal impairment, right wrist -M10332 Gout due to renal impairment, left wrist -M10339 Gout due to renal impairment, unspecified wrist -M10341 Gout due to renal impairment, right hand -M10342 Gout due to renal impairment, left hand -M10349 Gout due to renal impairment, unspecified hand -M10351 Gout due to renal impairment, right hip -M10352 Gout due to renal impairment, left hip -M10359 Gout due to renal impairment, unspecified hip -M10361 Gout due to renal impairment, right knee -M10362 Gout due to renal impairment, left knee -M10369 Gout due to renal impairment, unspecified knee -M10371 Gout due to renal impairment, right ankle and foot -M10372 Gout due to renal impairment, left ankle and foot -M10379 Gout due to renal impairment, unspecified ankle and foot -M1038 Gout due to renal impairment, vertebrae -M1039 Gout due to renal impairment, multiple sites -M1040 Other secondary gout, unspecified site -M10411 Other secondary gout, right shoulder -M10412 Other secondary gout, left shoulder -M10419 Other secondary gout, unspecified shoulder -M10421 Other secondary gout, right elbow -M10422 Other secondary gout, left elbow -M10429 Other secondary gout, unspecified elbow -M10431 Other secondary gout, right wrist -M10432 Other secondary gout, left wrist -M10439 Other secondary gout, unspecified wrist -M10441 Other secondary gout, right hand -M10442 Other secondary gout, left hand -M10449 Other secondary gout, unspecified hand -M10451 Other secondary gout, right hip -M10452 Other secondary gout, left hip -M10459 Other secondary gout, unspecified hip -M10461 Other secondary gout, right knee -M10462 Other secondary gout, left knee -M10469 Other secondary gout, unspecified knee -M10471 Other secondary gout, right ankle and foot -M10472 Other secondary gout, left ankle and foot -M10479 Other secondary gout, unspecified ankle and foot -M1048 Other secondary gout, vertebrae -M1049 Other secondary gout, multiple sites -M109 Gout, unspecified -M1100 Hydroxyapatite deposition disease, unspecified site -M11011 Hydroxyapatite deposition disease, right shoulder -M11012 Hydroxyapatite deposition disease, left shoulder -M11019 Hydroxyapatite deposition disease, unspecified shoulder -M11021 Hydroxyapatite deposition disease, right elbow -M11022 Hydroxyapatite deposition disease, left elbow -M11029 Hydroxyapatite deposition disease, unspecified elbow -M11031 Hydroxyapatite deposition disease, right wrist -M11032 Hydroxyapatite deposition disease, left wrist -M11039 Hydroxyapatite deposition disease, unspecified wrist -M11041 Hydroxyapatite deposition disease, right hand -M11042 Hydroxyapatite deposition disease, left hand -M11049 Hydroxyapatite deposition disease, unspecified hand -M11051 Hydroxyapatite deposition disease, right hip -M11052 Hydroxyapatite deposition disease, left hip -M11059 Hydroxyapatite deposition disease, unspecified hip -M11061 Hydroxyapatite deposition disease, right knee -M11062 Hydroxyapatite deposition disease, left knee -M11069 Hydroxyapatite deposition disease, unspecified knee -M11071 Hydroxyapatite deposition disease, right ankle and foot -M11072 Hydroxyapatite deposition disease, left ankle and foot -M11079 Hydroxyapatite deposition disease, unspecified ankle and foot -M1108 Hydroxyapatite deposition disease, vertebrae -M1109 Hydroxyapatite deposition disease, multiple sites -M1110 Familial chondrocalcinosis, unspecified site -M11111 Familial chondrocalcinosis, right shoulder -M11112 Familial chondrocalcinosis, left shoulder -M11119 Familial chondrocalcinosis, unspecified shoulder -M11121 Familial chondrocalcinosis, right elbow -M11122 Familial chondrocalcinosis, left elbow -M11129 Familial chondrocalcinosis, unspecified elbow -M11131 Familial chondrocalcinosis, right wrist -M11132 Familial chondrocalcinosis, left wrist -M11139 Familial chondrocalcinosis, unspecified wrist -M11141 Familial chondrocalcinosis, right hand -M11142 Familial chondrocalcinosis, left hand -M11149 Familial chondrocalcinosis, unspecified hand -M11151 Familial chondrocalcinosis, right hip -M11152 Familial chondrocalcinosis, left hip -M11159 Familial chondrocalcinosis, unspecified hip -M11161 Familial chondrocalcinosis, right knee -M11162 Familial chondrocalcinosis, left knee -M11169 Familial chondrocalcinosis, unspecified knee -M11171 Familial chondrocalcinosis, right ankle and foot -M11172 Familial chondrocalcinosis, left ankle and foot -M11179 Familial chondrocalcinosis, unspecified ankle and foot -M1118 Familial chondrocalcinosis, vertebrae -M1119 Familial chondrocalcinosis, multiple sites -M1120 Other chondrocalcinosis, unspecified site -M11211 Other chondrocalcinosis, right shoulder -M11212 Other chondrocalcinosis, left shoulder -M11219 Other chondrocalcinosis, unspecified shoulder -M11221 Other chondrocalcinosis, right elbow -M11222 Other chondrocalcinosis, left elbow -M11229 Other chondrocalcinosis, unspecified elbow -M11231 Other chondrocalcinosis, right wrist -M11232 Other chondrocalcinosis, left wrist -M11239 Other chondrocalcinosis, unspecified wrist -M11241 Other chondrocalcinosis, right hand -M11242 Other chondrocalcinosis, left hand -M11249 Other chondrocalcinosis, unspecified hand -M11251 Other chondrocalcinosis, right hip -M11252 Other chondrocalcinosis, left hip -M11259 Other chondrocalcinosis, unspecified hip -M11261 Other chondrocalcinosis, right knee -M11262 Other chondrocalcinosis, left knee -M11269 Other chondrocalcinosis, unspecified knee -M11271 Other chondrocalcinosis, right ankle and foot -M11272 Other chondrocalcinosis, left ankle and foot -M11279 Other chondrocalcinosis, unspecified ankle and foot -M1128 Other chondrocalcinosis, vertebrae -M1129 Other chondrocalcinosis, multiple sites -M1180 Other specified crystal arthropathies, unspecified site -M11811 Other specified crystal arthropathies, right shoulder -M11812 Other specified crystal arthropathies, left shoulder -M11819 Other specified crystal arthropathies, unspecified shoulder -M11821 Other specified crystal arthropathies, right elbow -M11822 Other specified crystal arthropathies, left elbow -M11829 Other specified crystal arthropathies, unspecified elbow -M11831 Other specified crystal arthropathies, right wrist -M11832 Other specified crystal arthropathies, left wrist -M11839 Other specified crystal arthropathies, unspecified wrist -M11841 Other specified crystal arthropathies, right hand -M11842 Other specified crystal arthropathies, left hand -M11849 Other specified crystal arthropathies, unspecified hand -M11851 Other specified crystal arthropathies, right hip -M11852 Other specified crystal arthropathies, left hip -M11859 Other specified crystal arthropathies, unspecified hip -M11861 Other specified crystal arthropathies, right knee -M11862 Other specified crystal arthropathies, left knee -M11869 Other specified crystal arthropathies, unspecified knee -M11871 Other specified crystal arthropathies, right ankle and foot -M11872 Other specified crystal arthropathies, left ankle and foot -M11879 Other specified crystal arthropathies, unspecified ankle and foot -M1188 Other specified crystal arthropathies, vertebrae -M1189 Other specified crystal arthropathies, multiple sites -M119 Crystal arthropathy, unspecified -M1200 Chronic postrheumatic arthropathy [Jaccoud], unspecified site -M12011 Chronic postrheumatic arthropathy [Jaccoud], right shoulder -M12012 Chronic postrheumatic arthropathy [Jaccoud], left shoulder -M12019 Chronic postrheumatic arthropathy [Jaccoud], unspecified shoulder -M12021 Chronic postrheumatic arthropathy [Jaccoud], right elbow -M12022 Chronic postrheumatic arthropathy [Jaccoud], left elbow -M12029 Chronic postrheumatic arthropathy [Jaccoud], unspecified elbow -M12031 Chronic postrheumatic arthropathy [Jaccoud], right wrist -M12032 Chronic postrheumatic arthropathy [Jaccoud], left wrist -M12039 Chronic postrheumatic arthropathy [Jaccoud], unspecified wrist -M12041 Chronic postrheumatic arthropathy [Jaccoud], right hand -M12042 Chronic postrheumatic arthropathy [Jaccoud], left hand -M12049 Chronic postrheumatic arthropathy [Jaccoud], unspecified hand -M12051 Chronic postrheumatic arthropathy [Jaccoud], right hip -M12052 Chronic postrheumatic arthropathy [Jaccoud], left hip -M12059 Chronic postrheumatic arthropathy [Jaccoud], unspecified hip -M12061 Chronic postrheumatic arthropathy [Jaccoud], right knee -M12062 Chronic postrheumatic arthropathy [Jaccoud], left knee -M12069 Chronic postrheumatic arthropathy [Jaccoud], unspecified knee -M12071 Chronic postrheumatic arthropathy [Jaccoud], right ankle and foot -M12072 Chronic postrheumatic arthropathy [Jaccoud], left ankle and foot -M12079 Chronic postrheumatic arthropathy [Jaccoud], unspecified ankle and foot -M1208 Chronic postrheumatic arthropathy [Jaccoud], other specified site -M1209 Chronic postrheumatic arthropathy [Jaccoud], multiple sites -M1210 Kaschin-Beck disease, unspecified site -M12111 Kaschin-Beck disease, right shoulder -M12112 Kaschin-Beck disease, left shoulder -M12119 Kaschin-Beck disease, unspecified shoulder -M12121 Kaschin-Beck disease, right elbow -M12122 Kaschin-Beck disease, left elbow -M12129 Kaschin-Beck disease, unspecified elbow -M12131 Kaschin-Beck disease, right wrist -M12132 Kaschin-Beck disease, left wrist -M12139 Kaschin-Beck disease, unspecified wrist -M12141 Kaschin-Beck disease, right hand -M12142 Kaschin-Beck disease, left hand -M12149 Kaschin-Beck disease, unspecified hand -M12151 Kaschin-Beck disease, right hip -M12152 Kaschin-Beck disease, left hip -M12159 Kaschin-Beck disease, unspecified hip -M12161 Kaschin-Beck disease, right knee -M12162 Kaschin-Beck disease, left knee -M12169 Kaschin-Beck disease, unspecified knee -M12171 Kaschin-Beck disease, right ankle and foot -M12172 Kaschin-Beck disease, left ankle and foot -M12179 Kaschin-Beck disease, unspecified ankle and foot -M1218 Kaschin-Beck disease, vertebrae -M1219 Kaschin-Beck disease, multiple sites -M1220 Villonodular synovitis (pigmented), unspecified site -M12211 Villonodular synovitis (pigmented), right shoulder -M12212 Villonodular synovitis (pigmented), left shoulder -M12219 Villonodular synovitis (pigmented), unspecified shoulder -M12221 Villonodular synovitis (pigmented), right elbow -M12222 Villonodular synovitis (pigmented), left elbow -M12229 Villonodular synovitis (pigmented), unspecified elbow -M12231 Villonodular synovitis (pigmented), right wrist -M12232 Villonodular synovitis (pigmented), left wrist -M12239 Villonodular synovitis (pigmented), unspecified wrist -M12241 Villonodular synovitis (pigmented), right hand -M12242 Villonodular synovitis (pigmented), left hand -M12249 Villonodular synovitis (pigmented), unspecified hand -M12251 Villonodular synovitis (pigmented), right hip -M12252 Villonodular synovitis (pigmented), left hip -M12259 Villonodular synovitis (pigmented), unspecified hip -M12261 Villonodular synovitis (pigmented), right knee -M12262 Villonodular synovitis (pigmented), left knee -M12269 Villonodular synovitis (pigmented), unspecified knee -M12271 Villonodular synovitis (pigmented), right ankle and foot -M12272 Villonodular synovitis (pigmented), left ankle and foot -M12279 Villonodular synovitis (pigmented), unspecified ankle and foot -M1228 Villonodular synovitis (pigmented), other specified site -M1229 Villonodular synovitis (pigmented), multiple sites -M1230 Palindromic rheumatism, unspecified site -M12311 Palindromic rheumatism, right shoulder -M12312 Palindromic rheumatism, left shoulder -M12319 Palindromic rheumatism, unspecified shoulder -M12321 Palindromic rheumatism, right elbow -M12322 Palindromic rheumatism, left elbow -M12329 Palindromic rheumatism, unspecified elbow -M12331 Palindromic rheumatism, right wrist -M12332 Palindromic rheumatism, left wrist -M12339 Palindromic rheumatism, unspecified wrist -M12341 Palindromic rheumatism, right hand -M12342 Palindromic rheumatism, left hand -M12349 Palindromic rheumatism, unspecified hand -M12351 Palindromic rheumatism, right hip -M12352 Palindromic rheumatism, left hip -M12359 Palindromic rheumatism, unspecified hip -M12361 Palindromic rheumatism, right knee -M12362 Palindromic rheumatism, left knee -M12369 Palindromic rheumatism, unspecified knee -M12371 Palindromic rheumatism, right ankle and foot -M12372 Palindromic rheumatism, left ankle and foot -M12379 Palindromic rheumatism, unspecified ankle and foot -M1238 Palindromic rheumatism, other specified site -M1239 Palindromic rheumatism, multiple sites -M1240 Intermittent hydrarthrosis, unspecified site -M12411 Intermittent hydrarthrosis, right shoulder -M12412 Intermittent hydrarthrosis, left shoulder -M12419 Intermittent hydrarthrosis, unspecified shoulder -M12421 Intermittent hydrarthrosis, right elbow -M12422 Intermittent hydrarthrosis, left elbow -M12429 Intermittent hydrarthrosis, unspecified elbow -M12431 Intermittent hydrarthrosis, right wrist -M12432 Intermittent hydrarthrosis, left wrist -M12439 Intermittent hydrarthrosis, unspecified wrist -M12441 Intermittent hydrarthrosis, right hand -M12442 Intermittent hydrarthrosis, left hand -M12449 Intermittent hydrarthrosis, unspecified hand -M12451 Intermittent hydrarthrosis, right hip -M12452 Intermittent hydrarthrosis, left hip -M12459 Intermittent hydrarthrosis, unspecified hip -M12461 Intermittent hydrarthrosis, right knee -M12462 Intermittent hydrarthrosis, left knee -M12469 Intermittent hydrarthrosis, unspecified knee -M12471 Intermittent hydrarthrosis, right ankle and foot -M12472 Intermittent hydrarthrosis, left ankle and foot -M12479 Intermittent hydrarthrosis, unspecified ankle and foot -M1248 Intermittent hydrarthrosis, other site -M1249 Intermittent hydrarthrosis, multiple sites -M1250 Traumatic arthropathy, unspecified site -M12511 Traumatic arthropathy, right shoulder -M12512 Traumatic arthropathy, left shoulder -M12519 Traumatic arthropathy, unspecified shoulder -M12521 Traumatic arthropathy, right elbow -M12522 Traumatic arthropathy, left elbow -M12529 Traumatic arthropathy, unspecified elbow -M12531 Traumatic arthropathy, right wrist -M12532 Traumatic arthropathy, left wrist -M12539 Traumatic arthropathy, unspecified wrist -M12541 Traumatic arthropathy, right hand -M12542 Traumatic arthropathy, left hand -M12549 Traumatic arthropathy, unspecified hand -M12551 Traumatic arthropathy, right hip -M12552 Traumatic arthropathy, left hip -M12559 Traumatic arthropathy, unspecified hip -M12561 Traumatic arthropathy, right knee -M12562 Traumatic arthropathy, left knee -M12569 Traumatic arthropathy, unspecified knee -M12571 Traumatic arthropathy, right ankle and foot -M12572 Traumatic arthropathy, left ankle and foot -M12579 Traumatic arthropathy, unspecified ankle and foot -M1258 Traumatic arthropathy, other specified site -M1259 Traumatic arthropathy, multiple sites -M1280 Other specific arthropathies, not elsewhere classified, unspecified site -M12811 Other specific arthropathies, not elsewhere classified, right shoulder -M12812 Other specific arthropathies, not elsewhere classified, left shoulder -M12819 Other specific arthropathies, not elsewhere classified, unspecified shoulder -M12821 Other specific arthropathies, not elsewhere classified, right elbow -M12822 Other specific arthropathies, not elsewhere classified, left elbow -M12829 Other specific arthropathies, not elsewhere classified, unspecified elbow -M12831 Other specific arthropathies, not elsewhere classified, right wrist -M12832 Other specific arthropathies, not elsewhere classified, left wrist -M12839 Other specific arthropathies, not elsewhere classified, unspecified wrist -M12841 Other specific arthropathies, not elsewhere classified, right hand -M12842 Other specific arthropathies, not elsewhere classified, left hand -M12849 Other specific arthropathies, not elsewhere classified, unspecified hand -M12851 Other specific arthropathies, not elsewhere classified, right hip -M12852 Other specific arthropathies, not elsewhere classified, left hip -M12859 Other specific arthropathies, not elsewhere classified, unspecified hip -M12861 Other specific arthropathies, not elsewhere classified, right knee -M12862 Other specific arthropathies, not elsewhere classified, left knee -M12869 Other specific arthropathies, not elsewhere classified, unspecified knee -M12871 Other specific arthropathies, not elsewhere classified, right ankle and foot -M12872 Other specific arthropathies, not elsewhere classified, left ankle and foot -M12879 Other specific arthropathies, not elsewhere classified, unspecified ankle and foot -M1288 Other specific arthropathies, not elsewhere classified, other specified site -M1289 Other specific arthropathies, not elsewhere classified, multiple sites -M129 Arthropathy, unspecified -M130 Polyarthritis, unspecified -M1310 Monoarthritis, not elsewhere classified, unspecified site -M13111 Monoarthritis, not elsewhere classified, right shoulder -M13112 Monoarthritis, not elsewhere classified, left shoulder -M13119 Monoarthritis, not elsewhere classified, unspecified shoulder -M13121 Monoarthritis, not elsewhere classified, right elbow -M13122 Monoarthritis, not elsewhere classified, left elbow -M13129 Monoarthritis, not elsewhere classified, unspecified elbow -M13131 Monoarthritis, not elsewhere classified, right wrist -M13132 Monoarthritis, not elsewhere classified, left wrist -M13139 Monoarthritis, not elsewhere classified, unspecified wrist -M13141 Monoarthritis, not elsewhere classified, right hand -M13142 Monoarthritis, not elsewhere classified, left hand -M13149 Monoarthritis, not elsewhere classified, unspecified hand -M13151 Monoarthritis, not elsewhere classified, right hip -M13152 Monoarthritis, not elsewhere classified, left hip -M13159 Monoarthritis, not elsewhere classified, unspecified hip -M13161 Monoarthritis, not elsewhere classified, right knee -M13162 Monoarthritis, not elsewhere classified, left knee -M13169 Monoarthritis, not elsewhere classified, unspecified knee -M13171 Monoarthritis, not elsewhere classified, right ankle and foot -M13172 Monoarthritis, not elsewhere classified, left ankle and foot -M13179 Monoarthritis, not elsewhere classified, unspecified ankle and foot -M1380 Other specified arthritis, unspecified site -M13811 Other specified arthritis, right shoulder -M13812 Other specified arthritis, left shoulder -M13819 Other specified arthritis, unspecified shoulder -M13821 Other specified arthritis, right elbow -M13822 Other specified arthritis, left elbow -M13829 Other specified arthritis, unspecified elbow -M13831 Other specified arthritis, right wrist -M13832 Other specified arthritis, left wrist -M13839 Other specified arthritis, unspecified wrist -M13841 Other specified arthritis, right hand -M13842 Other specified arthritis, left hand -M13849 Other specified arthritis, unspecified hand -M13851 Other specified arthritis, right hip -M13852 Other specified arthritis, left hip -M13859 Other specified arthritis, unspecified hip -M13861 Other specified arthritis, right knee -M13862 Other specified arthritis, left knee -M13869 Other specified arthritis, unspecified knee -M13871 Other specified arthritis, right ankle and foot -M13872 Other specified arthritis, left ankle and foot -M13879 Other specified arthritis, unspecified ankle and foot -M1388 Other specified arthritis, other site -M1389 Other specified arthritis, multiple sites -M1460 Charcot's joint, unspecified site -M14611 Charcot's joint, right shoulder -M14612 Charcot's joint, left shoulder -M14619 Charcot's joint, unspecified shoulder -M14621 Charcot's joint, right elbow -M14622 Charcot's joint, left elbow -M14629 Charcot's joint, unspecified elbow -M14631 Charcot's joint, right wrist -M14632 Charcot's joint, left wrist -M14639 Charcot's joint, unspecified wrist -M14641 Charcot's joint, right hand -M14642 Charcot's joint, left hand -M14649 Charcot's joint, unspecified hand -M14651 Charcot's joint, right hip -M14652 Charcot's joint, left hip -M14659 Charcot's joint, unspecified hip -M14661 Charcot's joint, right knee -M14662 Charcot's joint, left knee -M14669 Charcot's joint, unspecified knee -M14671 Charcot's joint, right ankle and foot -M14672 Charcot's joint, left ankle and foot -M14679 Charcot's joint, unspecified ankle and foot -M1468 Charcot's joint, vertebrae -M1469 Charcot's joint, multiple sites -M1480 Arthropathies in other specified diseases classified elsewhere, unspecified site -M14811 Arthropathies in other specified diseases classified elsewhere, right shoulder -M14812 Arthropathies in other specified diseases classified elsewhere, left shoulder -M14819 Arthropathies in other specified diseases classified elsewhere, unspecified shoulder -M14821 Arthropathies in other specified diseases classified elsewhere, right elbow -M14822 Arthropathies in other specified diseases classified elsewhere, left elbow -M14829 Arthropathies in other specified diseases classified elsewhere, unspecified elbow -M14831 Arthropathies in other specified diseases classified elsewhere, right wrist -M14832 Arthropathies in other specified diseases classified elsewhere, left wrist -M14839 Arthropathies in other specified diseases classified elsewhere, unspecified wrist -M14841 Arthropathies in other specified diseases classified elsewhere, right hand -M14842 Arthropathies in other specified diseases classified elsewhere, left hand -M14849 Arthropathies in other specified diseases classified elsewhere, unspecified hand -M14851 Arthropathies in other specified diseases classified elsewhere, right hip -M14852 Arthropathies in other specified diseases classified elsewhere, left hip -M14859 Arthropathies in other specified diseases classified elsewhere, unspecified hip -M14861 Arthropathies in other specified diseases classified elsewhere, right knee -M14862 Arthropathies in other specified diseases classified elsewhere, left knee -M14869 Arthropathies in other specified diseases classified elsewhere, unspecified knee -M14871 Arthropathies in other specified diseases classified elsewhere, right ankle and foot -M14872 Arthropathies in other specified diseases classified elsewhere, left ankle and foot -M14879 Arthropathies in other specified diseases classified elsewhere, unspecified ankle and foot -M1488 Arthropathies in other specified diseases classified elsewhere, vertebrae -M1489 Arthropathies in other specified diseases classified elsewhere, multiple sites -M150 Primary generalized (osteo)arthritis -M151 Heberden's nodes (with arthropathy) -M152 Bouchard's nodes (with arthropathy) -M153 Secondary multiple arthritis -M154 Erosive (osteo)arthritis -M158 Other polyosteoarthritis -M159 Polyosteoarthritis, unspecified -M160 Bilateral primary osteoarthritis of hip -M1610 Unilateral primary osteoarthritis, unspecified hip -M1611 Unilateral primary osteoarthritis, right hip -M1612 Unilateral primary osteoarthritis, left hip -M162 Bilateral osteoarthritis resulting from hip dysplasia -M1630 Unilateral osteoarthritis resulting from hip dysplasia, unspecified hip -M1631 Unilateral osteoarthritis resulting from hip dysplasia, right hip -M1632 Unilateral osteoarthritis resulting from hip dysplasia, left hip -M164 Bilateral post-traumatic osteoarthritis of hip -M1650 Unilateral post-traumatic osteoarthritis, unspecified hip -M1651 Unilateral post-traumatic osteoarthritis, right hip -M1652 Unilateral post-traumatic osteoarthritis, left hip -M166 Other bilateral secondary osteoarthritis of hip -M167 Other unilateral secondary osteoarthritis of hip -M169 Osteoarthritis of hip, unspecified -M170 Bilateral primary osteoarthritis of knee -M1710 Unilateral primary osteoarthritis, unspecified knee -M1711 Unilateral primary osteoarthritis, right knee -M1712 Unilateral primary osteoarthritis, left knee -M172 Bilateral post-traumatic osteoarthritis of knee -M1730 Unilateral post-traumatic osteoarthritis, unspecified knee -M1731 Unilateral post-traumatic osteoarthritis, right knee -M1732 Unilateral post-traumatic osteoarthritis, left knee -M174 Other bilateral secondary osteoarthritis of knee -M175 Other unilateral secondary osteoarthritis of knee -M179 Osteoarthritis of knee, unspecified -M180 Bilateral primary osteoarthritis of first carpometacarpal joints -M1810 Unilateral primary osteoarthritis of first carpometacarpal joint, unspecified hand -M1811 Unilateral primary osteoarthritis of first carpometacarpal joint, right hand -M1812 Unilateral primary osteoarthritis of first carpometacarpal joint, left hand -M182 Bilateral post-traumatic osteoarthritis of first carpometacarpal joints -M1830 Unilateral post-traumatic osteoarthritis of first carpometacarpal joint, unspecified hand -M1831 Unilateral post-traumatic osteoarthritis of first carpometacarpal joint, right hand -M1832 Unilateral post-traumatic osteoarthritis of first carpometacarpal joint, left hand -M184 Other bilateral secondary osteoarthritis of first carpometacarpal joints -M1850 Other unilateral secondary osteoarthritis of first carpometacarpal joint, unspecified hand -M1851 Other unilateral secondary osteoarthritis of first carpometacarpal joint, right hand -M1852 Other unilateral secondary osteoarthritis of first carpometacarpal joint, left hand -M189 Osteoarthritis of first carpometacarpal joint, unspecified -M19011 Primary osteoarthritis, right shoulder -M19012 Primary osteoarthritis, left shoulder -M19019 Primary osteoarthritis, unspecified shoulder -M19021 Primary osteoarthritis, right elbow -M19022 Primary osteoarthritis, left elbow -M19029 Primary osteoarthritis, unspecified elbow -M19031 Primary osteoarthritis, right wrist -M19032 Primary osteoarthritis, left wrist -M19039 Primary osteoarthritis, unspecified wrist -M19041 Primary osteoarthritis, right hand -M19042 Primary osteoarthritis, left hand -M19049 Primary osteoarthritis, unspecified hand -M19071 Primary osteoarthritis, right ankle and foot -M19072 Primary osteoarthritis, left ankle and foot -M19079 Primary osteoarthritis, unspecified ankle and foot -M19111 Post-traumatic osteoarthritis, right shoulder -M19112 Post-traumatic osteoarthritis, left shoulder -M19119 Post-traumatic osteoarthritis, unspecified shoulder -M19121 Post-traumatic osteoarthritis, right elbow -M19122 Post-traumatic osteoarthritis, left elbow -M19129 Post-traumatic osteoarthritis, unspecified elbow -M19131 Post-traumatic osteoarthritis, right wrist -M19132 Post-traumatic osteoarthritis, left wrist -M19139 Post-traumatic osteoarthritis, unspecified wrist -M19141 Post-traumatic osteoarthritis, right hand -M19142 Post-traumatic osteoarthritis, left hand -M19149 Post-traumatic osteoarthritis, unspecified hand -M19171 Post-traumatic osteoarthritis, right ankle and foot -M19172 Post-traumatic osteoarthritis, left ankle and foot -M19179 Post-traumatic osteoarthritis, unspecified ankle and foot -M19211 Secondary osteoarthritis, right shoulder -M19212 Secondary osteoarthritis, left shoulder -M19219 Secondary osteoarthritis, unspecified shoulder -M19221 Secondary osteoarthritis, right elbow -M19222 Secondary osteoarthritis, left elbow -M19229 Secondary osteoarthritis, unspecified elbow -M19231 Secondary osteoarthritis, right wrist -M19232 Secondary osteoarthritis, left wrist -M19239 Secondary osteoarthritis, unspecified wrist -M19241 Secondary osteoarthritis, right hand -M19242 Secondary osteoarthritis, left hand -M19249 Secondary osteoarthritis, unspecified hand -M19271 Secondary osteoarthritis, right ankle and foot -M19272 Secondary osteoarthritis, left ankle and foot -M19279 Secondary osteoarthritis, unspecified ankle and foot -M1990 Unspecified osteoarthritis, unspecified site -M1991 Primary osteoarthritis, unspecified site -M1992 Post-traumatic osteoarthritis, unspecified site -M1993 Secondary osteoarthritis, unspecified site -M20001 Unspecified deformity of right finger(s) -M20002 Unspecified deformity of left finger(s) -M20009 Unspecified deformity of unspecified finger(s) -M20011 Mallet finger of right finger(s) -M20012 Mallet finger of left finger(s) -M20019 Mallet finger of unspecified finger(s) -M20021 Boutonniere deformity of right finger(s) -M20022 Boutonniere deformity of left finger(s) -M20029 Boutonniere deformity of unspecified finger(s) -M20031 Swan-neck deformity of right finger(s) -M20032 Swan-neck deformity of left finger(s) -M20039 Swan-neck deformity of unspecified finger(s) -M20091 Other deformity of right finger(s) -M20092 Other deformity of left finger(s) -M20099 Other deformity of finger(s), unspecified finger(s) -M2010 Hallux valgus (acquired), unspecified foot -M2011 Hallux valgus (acquired), right foot -M2012 Hallux valgus (acquired), left foot -M2020 Hallux rigidus, unspecified foot -M2021 Hallux rigidus, right foot -M2022 Hallux rigidus, left foot -M2030 Hallux varus (acquired), unspecified foot -M2031 Hallux varus (acquired), right foot -M2032 Hallux varus (acquired), left foot -M2040 Other hammer toe(s) (acquired), unspecified foot -M2041 Other hammer toe(s) (acquired), right foot -M2042 Other hammer toe(s) (acquired), left foot -M205X1 Other deformities of toe(s) (acquired), right foot -M205X2 Other deformities of toe(s) (acquired), left foot -M205X9 Other deformities of toe(s) (acquired), unspecified foot -M2060 Acquired deformities of toe(s), unspecified, unspecified foot -M2061 Acquired deformities of toe(s), unspecified, right foot -M2062 Acquired deformities of toe(s), unspecified, left foot -M2100 Valgus deformity, not elsewhere classified, unspecified site -M21021 Valgus deformity, not elsewhere classified, right elbow -M21022 Valgus deformity, not elsewhere classified, left elbow -M21029 Valgus deformity, not elsewhere classified, unspecified elbow -M21051 Valgus deformity, not elsewhere classified, right hip -M21052 Valgus deformity, not elsewhere classified, left hip -M21059 Valgus deformity, not elsewhere classified, unspecified hip -M21061 Valgus deformity, not elsewhere classified, right knee -M21062 Valgus deformity, not elsewhere classified, left knee -M21069 Valgus deformity, not elsewhere classified, unspecified knee -M21071 Valgus deformity, not elsewhere classified, right ankle -M21072 Valgus deformity, not elsewhere classified, left ankle -M21079 Valgus deformity, not elsewhere classified, unspecified ankle -M2110 Varus deformity, not elsewhere classified, unspecified site -M21121 Varus deformity, not elsewhere classified, right elbow -M21122 Varus deformity, not elsewhere classified, left elbow -M21129 Varus deformity, not elsewhere classified, unspecified elbow -M21151 Varus deformity, not elsewhere classified, right hip -M21152 Varus deformity, not elsewhere classified, left hip -M21159 Varus deformity, not elsewhere classified, unspecified -M21161 Varus deformity, not elsewhere classified, right knee -M21162 Varus deformity, not elsewhere classified, left knee -M21169 Varus deformity, not elsewhere classified, unspecified knee -M21171 Varus deformity, not elsewhere classified, right ankle -M21172 Varus deformity, not elsewhere classified, left ankle -M21179 Varus deformity, not elsewhere classified, unspecified ankle -M2120 Flexion deformity, unspecified site -M21211 Flexion deformity, right shoulder -M21212 Flexion deformity, left shoulder -M21219 Flexion deformity, unspecified shoulder -M21221 Flexion deformity, right elbow -M21222 Flexion deformity, left elbow -M21229 Flexion deformity, unspecified elbow -M21231 Flexion deformity, right wrist -M21232 Flexion deformity, left wrist -M21239 Flexion deformity, unspecified wrist -M21241 Flexion deformity, right finger joints -M21242 Flexion deformity, left finger joints -M21249 Flexion deformity, unspecified finger joints -M21251 Flexion deformity, right hip -M21252 Flexion deformity, left hip -M21259 Flexion deformity, unspecified hip -M21261 Flexion deformity, right knee -M21262 Flexion deformity, left knee -M21269 Flexion deformity, unspecified knee -M21271 Flexion deformity, right ankle and toes -M21272 Flexion deformity, left ankle and toes -M21279 Flexion deformity, unspecified ankle and toes -M21331 Wrist drop, right wrist -M21332 Wrist drop, left wrist -M21339 Wrist drop, unspecified wrist -M21371 Foot drop, right foot -M21372 Foot drop, left foot -M21379 Foot drop, unspecified foot -M2140 Flat foot [pes planus] (acquired), unspecified foot -M2141 Flat foot [pes planus] (acquired), right foot -M2142 Flat foot [pes planus] (acquired), left foot -M21511 Acquired clawhand, right hand -M21512 Acquired clawhand, left hand -M21519 Acquired clawhand, unspecified hand -M21521 Acquired clubhand, right hand -M21522 Acquired clubhand, left hand -M21529 Acquired clubhand, unspecified hand -M21531 Acquired clawfoot, right foot -M21532 Acquired clawfoot, left foot -M21539 Acquired clawfoot, unspecified foot -M21541 Acquired clubfoot, right foot -M21542 Acquired clubfoot, left foot -M21549 Acquired clubfoot, unspecified foot -M21611 Bunion of right foot -M21612 Bunion of left foot -M21619 Bunion of unspecified foot -M21621 Bunionette of right foot -M21622 Bunionette of left foot -M21629 Bunionette of unspecified foot -M216X1 Other acquired deformities of right foot -M216X2 Other acquired deformities of left foot -M216X9 Other acquired deformities of unspecified foot -M2170 Unequal limb length (acquired), unspecified site -M21721 Unequal limb length (acquired), right humerus -M21722 Unequal limb length (acquired), left humerus -M21729 Unequal limb length (acquired), unspecified humerus -M21731 Unequal limb length (acquired), right ulna -M21732 Unequal limb length (acquired), left ulna -M21733 Unequal limb length (acquired), right radius -M21734 Unequal limb length (acquired), left radius -M21739 Unequal limb length (acquired), unspecified ulna and radius -M21751 Unequal limb length (acquired), right femur -M21752 Unequal limb length (acquired), left femur -M21759 Unequal limb length (acquired), unspecified femur -M21761 Unequal limb length (acquired), right tibia -M21762 Unequal limb length (acquired), left tibia -M21763 Unequal limb length (acquired), right fibula -M21764 Unequal limb length (acquired), left fibula -M21769 Unequal limb length (acquired), unspecified tibia and fibula -M2180 Other specified acquired deformities of unspecified limb -M21821 Other specified acquired deformities of right upper arm -M21822 Other specified acquired deformities of left upper arm -M21829 Other specified acquired deformities of unspecified upper arm -M21831 Other specified acquired deformities of right forearm -M21832 Other specified acquired deformities of left forearm -M21839 Other specified acquired deformities of unspecified forearm -M21851 Other specified acquired deformities of right thigh -M21852 Other specified acquired deformities of left thigh -M21859 Other specified acquired deformities of unspecified thigh -M21861 Other specified acquired deformities of right lower leg -M21862 Other specified acquired deformities of left lower leg -M21869 Other specified acquired deformities of unspecified lower leg -M2190 Unspecified acquired deformity of unspecified limb -M21921 Unspecified acquired deformity of right upper arm -M21922 Unspecified acquired deformity of left upper arm -M21929 Unspecified acquired deformity of unspecified upper arm -M21931 Unspecified acquired deformity of right forearm -M21932 Unspecified acquired deformity of left forearm -M21939 Unspecified acquired deformity of unspecified forearm -M21941 Unspecified acquired deformity of hand, right hand -M21942 Unspecified acquired deformity of hand, left hand -M21949 Unspecified acquired deformity of hand, unspecified hand -M21951 Unspecified acquired deformity of right thigh -M21952 Unspecified acquired deformity of left thigh -M21959 Unspecified acquired deformity of unspecified thigh -M21961 Unspecified acquired deformity of right lower leg -M21962 Unspecified acquired deformity of left lower leg -M21969 Unspecified acquired deformity of unspecified lower leg -M2200 Recurrent dislocation of patella, unspecified knee -M2201 Recurrent dislocation of patella, right knee -M2202 Recurrent dislocation of patella, left knee -M2210 Recurrent subluxation of patella, unspecified knee -M2211 Recurrent subluxation of patella, right knee -M2212 Recurrent subluxation of patella, left knee -M222X1 Patellofemoral disorders, right knee -M222X2 Patellofemoral disorders, left knee -M222X9 Patellofemoral disorders, unspecified knee -M223X1 Other derangements of patella, right knee -M223X2 Other derangements of patella, left knee -M223X9 Other derangements of patella, unspecified knee -M2240 Chondromalacia patellae, unspecified knee -M2241 Chondromalacia patellae, right knee -M2242 Chondromalacia patellae, left knee -M228X1 Other disorders of patella, right knee -M228X2 Other disorders of patella, left knee -M228X9 Other disorders of patella, unspecified knee -M2290 Unspecified disorder of patella, unspecified knee -M2291 Unspecified disorder of patella, right knee -M2292 Unspecified disorder of patella, left knee -M23000 Cystic meniscus, unspecified lateral meniscus, right knee -M23001 Cystic meniscus, unspecified lateral meniscus, left knee -M23002 Cystic meniscus, unspecified lateral meniscus, unspecified knee -M23003 Cystic meniscus, unspecified medial meniscus, right knee -M23004 Cystic meniscus, unspecified medial meniscus, left knee -M23005 Cystic meniscus, unspecified medial meniscus, unspecified knee -M23006 Cystic meniscus, unspecified meniscus, right knee -M23007 Cystic meniscus, unspecified meniscus, left knee -M23009 Cystic meniscus, unspecified meniscus, unspecified knee -M23011 Cystic meniscus, anterior horn of medial meniscus, right knee -M23012 Cystic meniscus, anterior horn of medial meniscus, left knee -M23019 Cystic meniscus, anterior horn of medial meniscus, unspecified knee -M23021 Cystic meniscus, posterior horn of medial meniscus, right knee -M23022 Cystic meniscus, posterior horn of medial meniscus, left knee -M23029 Cystic meniscus, posterior horn of medial meniscus, unspecified knee -M23031 Cystic meniscus, other medial meniscus, right knee -M23032 Cystic meniscus, other medial meniscus, left knee -M23039 Cystic meniscus, other medial meniscus, unspecified knee -M23041 Cystic meniscus, anterior horn of lateral meniscus, right knee -M23042 Cystic meniscus, anterior horn of lateral meniscus, left knee -M23049 Cystic meniscus, anterior horn of lateral meniscus, unspecified knee -M23051 Cystic meniscus, posterior horn of lateral meniscus, right knee -M23052 Cystic meniscus, posterior horn of lateral meniscus, left knee -M23059 Cystic meniscus, posterior horn of lateral meniscus, unspecified knee -M23061 Cystic meniscus, other lateral meniscus, right knee -M23062 Cystic meniscus, other lateral meniscus, left knee -M23069 Cystic meniscus, other lateral meniscus, unspecified knee -M23200 Derangement of unspecified lateral meniscus due to old tear or injury, right knee -M23201 Derangement of unspecified lateral meniscus due to old tear or injury, left knee -M23202 Derangement of unspecified lateral meniscus due to old tear or injury, unspecified knee -M23203 Derangement of unspecified medial meniscus due to old tear or injury, right knee -M23204 Derangement of unspecified medial meniscus due to old tear or injury, left knee -M23205 Derangement of unspecified medial meniscus due to old tear or injury, unspecified knee -M23206 Derangement of unspecified meniscus due to old tear or injury, right knee -M23207 Derangement of unspecified meniscus due to old tear or injury, left knee -M23209 Derangement of unspecified meniscus due to old tear or injury, unspecified knee -M23211 Derangement of anterior horn of medial meniscus due to old tear or injury, right knee -M23212 Derangement of anterior horn of medial meniscus due to old tear or injury, left knee -M23219 Derangement of anterior horn of medial meniscus due to old tear or injury, unspecified knee -M23221 Derangement of posterior horn of medial meniscus due to old tear or injury, right knee -M23222 Derangement of posterior horn of medial meniscus due to old tear or injury, left knee -M23229 Derangement of posterior horn of medial meniscus due to old tear or injury, unspecified knee -M23231 Derangement of other medial meniscus due to old tear or injury, right knee -M23232 Derangement of other medial meniscus due to old tear or injury, left knee -M23239 Derangement of other medial meniscus due to old tear or injury, unspecified knee -M23241 Derangement of anterior horn of lateral meniscus due to old tear or injury, right knee -M23242 Derangement of anterior horn of lateral meniscus due to old tear or injury, left knee -M23249 Derangement of anterior horn of lateral meniscus due to old tear or injury, unspecified knee -M23251 Derangement of posterior horn of lateral meniscus due to old tear or injury, right knee -M23252 Derangement of posterior horn of lateral meniscus due to old tear or injury, left knee -M23259 Derangement of posterior horn of lateral meniscus due to old tear or injury, unspecified knee -M23261 Derangement of other lateral meniscus due to old tear or injury, right knee -M23262 Derangement of other lateral meniscus due to old tear or injury, left knee -M23269 Derangement of other lateral meniscus due to old tear or injury, unspecified knee -M23300 Other meniscus derangements, unspecified lateral meniscus, right knee -M23301 Other meniscus derangements, unspecified lateral meniscus, left knee -M23302 Other meniscus derangements, unspecified lateral meniscus, unspecified knee -M23303 Other meniscus derangements, unspecified medial meniscus, right knee -M23304 Other meniscus derangements, unspecified medial meniscus, left knee -M23305 Other meniscus derangements, unspecified medial meniscus, unspecified knee -M23306 Other meniscus derangements, unspecified meniscus, right knee -M23307 Other meniscus derangements, unspecified meniscus, left knee -M23309 Other meniscus derangements, unspecified meniscus, unspecified knee -M23311 Other meniscus derangements, anterior horn of medial meniscus, right knee -M23312 Other meniscus derangements, anterior horn of medial meniscus, left knee -M23319 Other meniscus derangements, anterior horn of medial meniscus, unspecified knee -M23321 Other meniscus derangements, posterior horn of medial meniscus, right knee -M23322 Other meniscus derangements, posterior horn of medial meniscus, left knee -M23329 Other meniscus derangements, posterior horn of medial meniscus, unspecified knee -M23331 Other meniscus derangements, other medial meniscus, right knee -M23332 Other meniscus derangements, other medial meniscus, left knee -M23339 Other meniscus derangements, other medial meniscus, unspecified knee -M23341 Other meniscus derangements, anterior horn of lateral meniscus, right knee -M23342 Other meniscus derangements, anterior horn of lateral meniscus, left knee -M23349 Other meniscus derangements, anterior horn of lateral meniscus, unspecified knee -M23351 Other meniscus derangements, posterior horn of lateral meniscus, right knee -M23352 Other meniscus derangements, posterior horn of lateral meniscus, left knee -M23359 Other meniscus derangements, posterior horn of lateral meniscus, unspecified knee -M23361 Other meniscus derangements, other lateral meniscus, right knee -M23362 Other meniscus derangements, other lateral meniscus, left knee -M23369 Other meniscus derangements, other lateral meniscus, unspecified knee -M2340 Loose body in knee, unspecified knee -M2341 Loose body in knee, right knee -M2342 Loose body in knee, left knee -M2350 Chronic instability of knee, unspecified knee -M2351 Chronic instability of knee, right knee -M2352 Chronic instability of knee, left knee -M23601 Other spontaneous disruption of unspecified ligament of right knee -M23602 Other spontaneous disruption of unspecified ligament of left knee -M23609 Other spontaneous disruption of unspecified ligament of unspecified knee -M23611 Other spontaneous disruption of anterior cruciate ligament of right knee -M23612 Other spontaneous disruption of anterior cruciate ligament of left knee -M23619 Other spontaneous disruption of anterior cruciate ligament of unspecified knee -M23621 Other spontaneous disruption of posterior cruciate ligament of right knee -M23622 Other spontaneous disruption of posterior cruciate ligament of left knee -M23629 Other spontaneous disruption of posterior cruciate ligament of unspecified knee -M23631 Other spontaneous disruption of medial collateral ligament of right knee -M23632 Other spontaneous disruption of medial collateral ligament of left knee -M23639 Other spontaneous disruption of medial collateral ligament of unspecified knee -M23641 Other spontaneous disruption of lateral collateral ligament of right knee -M23642 Other spontaneous disruption of lateral collateral ligament of left knee -M23649 Other spontaneous disruption of lateral collateral ligament of unspecified knee -M23671 Other spontaneous disruption of capsular ligament of right knee -M23672 Other spontaneous disruption of capsular ligament of left knee -M23679 Other spontaneous disruption of capsular ligament of unspecified knee -M238X1 Other internal derangements of right knee -M238X2 Other internal derangements of left knee -M238X9 Other internal derangements of unspecified knee -M2390 Unspecified internal derangement of unspecified knee -M2391 Unspecified internal derangement of right knee -M2392 Unspecified internal derangement of left knee -M2400 Loose body in unspecified joint -M24011 Loose body in right shoulder -M24012 Loose body in left shoulder -M24019 Loose body in unspecified shoulder -M24021 Loose body in right elbow -M24022 Loose body in left elbow -M24029 Loose body in unspecified elbow -M24031 Loose body in right wrist -M24032 Loose body in left wrist -M24039 Loose body in unspecified wrist -M24041 Loose body in right finger joint(s) -M24042 Loose body in left finger joint(s) -M24049 Loose body in unspecified finger joint(s) -M24051 Loose body in right hip -M24052 Loose body in left hip -M24059 Loose body in unspecified hip -M24071 Loose body in right ankle -M24072 Loose body in left ankle -M24073 Loose body in unspecified ankle -M24074 Loose body in right toe joint(s) -M24075 Loose body in left toe joint(s) -M24076 Loose body in unspecified toe joints -M2408 Loose body, other site -M2410 Other articular cartilage disorders, unspecified site -M24111 Other articular cartilage disorders, right shoulder -M24112 Other articular cartilage disorders, left shoulder -M24119 Other articular cartilage disorders, unspecified shoulder -M24121 Other articular cartilage disorders, right elbow -M24122 Other articular cartilage disorders, left elbow -M24129 Other articular cartilage disorders, unspecified elbow -M24131 Other articular cartilage disorders, right wrist -M24132 Other articular cartilage disorders, left wrist -M24139 Other articular cartilage disorders, unspecified wrist -M24141 Other articular cartilage disorders, right hand -M24142 Other articular cartilage disorders, left hand -M24149 Other articular cartilage disorders, unspecified hand -M24151 Other articular cartilage disorders, right hip -M24152 Other articular cartilage disorders, left hip -M24159 Other articular cartilage disorders, unspecified hip -M24171 Other articular cartilage disorders, right ankle -M24172 Other articular cartilage disorders, left ankle -M24173 Other articular cartilage disorders, unspecified ankle -M24174 Other articular cartilage disorders, right foot -M24175 Other articular cartilage disorders, left foot -M24176 Other articular cartilage disorders, unspecified foot -M2420 Disorder of ligament, unspecified site -M24211 Disorder of ligament, right shoulder -M24212 Disorder of ligament, left shoulder -M24219 Disorder of ligament, unspecified shoulder -M24221 Disorder of ligament, right elbow -M24222 Disorder of ligament, left elbow -M24229 Disorder of ligament, unspecified elbow -M24231 Disorder of ligament, right wrist -M24232 Disorder of ligament, left wrist -M24239 Disorder of ligament, unspecified wrist -M24241 Disorder of ligament, right hand -M24242 Disorder of ligament, left hand -M24249 Disorder of ligament, unspecified hand -M24251 Disorder of ligament, right hip -M24252 Disorder of ligament, left hip -M24259 Disorder of ligament, unspecified hip -M24271 Disorder of ligament, right ankle -M24272 Disorder of ligament, left ankle -M24273 Disorder of ligament, unspecified ankle -M24274 Disorder of ligament, right foot -M24275 Disorder of ligament, left foot -M24276 Disorder of ligament, unspecified foot -M2428 Disorder of ligament, vertebrae -M2430 Pathological dislocation of unspecified joint, not elsewhere classified -M24311 Pathological dislocation of right shoulder, not elsewhere classified -M24312 Pathological dislocation of left shoulder, not elsewhere classified -M24319 Pathological dislocation of unspecified shoulder, not elsewhere classified -M24321 Pathological dislocation of right elbow, not elsewhere classified -M24322 Pathological dislocation of left elbow, not elsewhere classified -M24329 Pathological dislocation of unspecified elbow, not elsewhere classified -M24331 Pathological dislocation of right wrist, not elsewhere classified -M24332 Pathological dislocation of left wrist, not elsewhere classified -M24339 Pathological dislocation of unspecified wrist, not elsewhere classified -M24341 Pathological dislocation of right hand, not elsewhere classified -M24342 Pathological dislocation of left hand, not elsewhere classified -M24349 Pathological dislocation of unspecified hand, not elsewhere classified -M24351 Pathological dislocation of right hip, not elsewhere classified -M24352 Pathological dislocation of left hip, not elsewhere classified -M24359 Pathological dislocation of unspecified hip, not elsewhere classified -M24361 Pathological dislocation of right knee, not elsewhere classified -M24362 Pathological dislocation of left knee, not elsewhere classified -M24369 Pathological dislocation of unspecified knee, not elsewhere classified -M24371 Pathological dislocation of right ankle, not elsewhere classified -M24372 Pathological dislocation of left ankle, not elsewhere classified -M24373 Pathological dislocation of unspecified ankle, not elsewhere classified -M24374 Pathological dislocation of right foot, not elsewhere classified -M24375 Pathological dislocation of left foot, not elsewhere classified -M24376 Pathological dislocation of unspecified foot, not elsewhere classified -M2440 Recurrent dislocation, unspecified joint -M24411 Recurrent dislocation, right shoulder -M24412 Recurrent dislocation, left shoulder -M24419 Recurrent dislocation, unspecified shoulder -M24421 Recurrent dislocation, right elbow -M24422 Recurrent dislocation, left elbow -M24429 Recurrent dislocation, unspecified elbow -M24431 Recurrent dislocation, right wrist -M24432 Recurrent dislocation, left wrist -M24439 Recurrent dislocation, unspecified wrist -M24441 Recurrent dislocation, right hand -M24442 Recurrent dislocation, left hand -M24443 Recurrent dislocation, unspecified hand -M24444 Recurrent dislocation, right finger -M24445 Recurrent dislocation, left finger -M24446 Recurrent dislocation, unspecified finger -M24451 Recurrent dislocation, right hip -M24452 Recurrent dislocation, left hip -M24459 Recurrent dislocation, unspecified hip -M24461 Recurrent dislocation, right knee -M24462 Recurrent dislocation, left knee -M24469 Recurrent dislocation, unspecified knee -M24471 Recurrent dislocation, right ankle -M24472 Recurrent dislocation, left ankle -M24473 Recurrent dislocation, unspecified ankle -M24474 Recurrent dislocation, right foot -M24475 Recurrent dislocation, left foot -M24476 Recurrent dislocation, unspecified foot -M24477 Recurrent dislocation, right toe(s) -M24478 Recurrent dislocation, left toe(s) -M24479 Recurrent dislocation, unspecified toe(s) -M2450 Contracture, unspecified joint -M24511 Contracture, right shoulder -M24512 Contracture, left shoulder -M24519 Contracture, unspecified shoulder -M24521 Contracture, right elbow -M24522 Contracture, left elbow -M24529 Contracture, unspecified elbow -M24531 Contracture, right wrist -M24532 Contracture, left wrist -M24539 Contracture, unspecified wrist -M24541 Contracture, right hand -M24542 Contracture, left hand -M24549 Contracture, unspecified hand -M24551 Contracture, right hip -M24552 Contracture, left hip -M24559 Contracture, unspecified hip -M24561 Contracture, right knee -M24562 Contracture, left knee -M24569 Contracture, unspecified knee -M24571 Contracture, right ankle -M24572 Contracture, left ankle -M24573 Contracture, unspecified ankle -M24574 Contracture, right foot -M24575 Contracture, left foot -M24576 Contracture, unspecified foot -M2460 Ankylosis, unspecified joint -M24611 Ankylosis, right shoulder -M24612 Ankylosis, left shoulder -M24619 Ankylosis, unspecified shoulder -M24621 Ankylosis, right elbow -M24622 Ankylosis, left elbow -M24629 Ankylosis, unspecified elbow -M24631 Ankylosis, right wrist -M24632 Ankylosis, left wrist -M24639 Ankylosis, unspecified wrist -M24641 Ankylosis, right hand -M24642 Ankylosis, left hand -M24649 Ankylosis, unspecified hand -M24651 Ankylosis, right hip -M24652 Ankylosis, left hip -M24659 Ankylosis, unspecified hip -M24661 Ankylosis, right knee -M24662 Ankylosis, left knee -M24669 Ankylosis, unspecified knee -M24671 Ankylosis, right ankle -M24672 Ankylosis, left ankle -M24673 Ankylosis, unspecified ankle -M24674 Ankylosis, right foot -M24675 Ankylosis, left foot -M24676 Ankylosis, unspecified foot -M247 Protrusio acetabuli -M2480 Other specific joint derangements of unspecified joint, not elsewhere classified -M24811 Other specific joint derangements of right shoulder, not elsewhere classified -M24812 Other specific joint derangements of left shoulder, not elsewhere classified -M24819 Other specific joint derangements of unspecified shoulder, not elsewhere classified -M24821 Other specific joint derangements of right elbow, not elsewhere classified -M24822 Other specific joint derangements of left elbow, not elsewhere classified -M24829 Other specific joint derangements of unspecified elbow, not elsewhere classified -M24831 Other specific joint derangements of right wrist, not elsewhere classified -M24832 Other specific joint derangements of left wrist, not elsewhere classified -M24839 Other specific joint derangements of unspecified wrist, not elsewhere classified -M24841 Other specific joint derangements of right hand, not elsewhere classified -M24842 Other specific joint derangements of left hand, not elsewhere classified -M24849 Other specific joint derangements of unspecified hand, not elsewhere classified -M24851 Other specific joint derangements of right hip, not elsewhere classified -M24852 Other specific joint derangements of left hip, not elsewhere classified -M24859 Other specific joint derangements of unspecified hip, not elsewhere classified -M24871 Other specific joint derangements of right ankle, not elsewhere classified -M24872 Other specific joint derangements of left ankle, not elsewhere classified -M24873 Other specific joint derangements of unspecified ankle, not elsewhere classified -M24874 Other specific joint derangements of right foot, not elsewhere classified -M24875 Other specific joint derangements left foot, not elsewhere classified -M24876 Other specific joint derangements of unspecified foot, not elsewhere classified -M249 Joint derangement, unspecified -M2500 Hemarthrosis, unspecified joint -M25011 Hemarthrosis, right shoulder -M25012 Hemarthrosis, left shoulder -M25019 Hemarthrosis, unspecified shoulder -M25021 Hemarthrosis, right elbow -M25022 Hemarthrosis, left elbow -M25029 Hemarthrosis, unspecified elbow -M25031 Hemarthrosis, right wrist -M25032 Hemarthrosis, left wrist -M25039 Hemarthrosis, unspecified wrist -M25041 Hemarthrosis, right hand -M25042 Hemarthrosis, left hand -M25049 Hemarthrosis, unspecified hand -M25051 Hemarthrosis, right hip -M25052 Hemarthrosis, left hip -M25059 Hemarthrosis, unspecified hip -M25061 Hemarthrosis, right knee -M25062 Hemarthrosis, left knee -M25069 Hemarthrosis, unspecified knee -M25071 Hemarthrosis, right ankle -M25072 Hemarthrosis, left ankle -M25073 Hemarthrosis, unspecified ankle -M25074 Hemarthrosis, right foot -M25075 Hemarthrosis, left foot -M25076 Hemarthrosis, unspecified foot -M2508 Hemarthrosis, other specified site -M2510 Fistula, unspecified joint -M25111 Fistula, right shoulder -M25112 Fistula, left shoulder -M25119 Fistula, unspecified shoulder -M25121 Fistula, right elbow -M25122 Fistula, left elbow -M25129 Fistula, unspecified elbow -M25131 Fistula, right wrist -M25132 Fistula, left wrist -M25139 Fistula, unspecified wrist -M25141 Fistula, right hand -M25142 Fistula, left hand -M25149 Fistula, unspecified hand -M25151 Fistula, right hip -M25152 Fistula, left hip -M25159 Fistula, unspecified hip -M25161 Fistula, right knee -M25162 Fistula, left knee -M25169 Fistula, unspecified knee -M25171 Fistula, right ankle -M25172 Fistula, left ankle -M25173 Fistula, unspecified ankle -M25174 Fistula, right foot -M25175 Fistula, left foot -M25176 Fistula, unspecified foot -M2518 Fistula, other specified site -M2520 Flail joint, unspecified joint -M25211 Flail joint, right shoulder -M25212 Flail joint, left shoulder -M25219 Flail joint, unspecified shoulder -M25221 Flail joint, right elbow -M25222 Flail joint, left elbow -M25229 Flail joint, unspecified elbow -M25231 Flail joint, right wrist -M25232 Flail joint, left wrist -M25239 Flail joint, unspecified wrist -M25241 Flail joint, right hand -M25242 Flail joint, left hand -M25249 Flail joint, unspecified hand -M25251 Flail joint, right hip -M25252 Flail joint, left hip -M25259 Flail joint, unspecified hip -M25261 Flail joint, right knee -M25262 Flail joint, left knee -M25269 Flail joint, unspecified knee -M25271 Flail joint, right ankle and foot -M25272 Flail joint, left ankle and foot -M25279 Flail joint, unspecified ankle and foot -M2528 Flail joint, other site -M2530 Other instability, unspecified joint -M25311 Other instability, right shoulder -M25312 Other instability, left shoulder -M25319 Other instability, unspecified shoulder -M25321 Other instability, right elbow -M25322 Other instability, left elbow -M25329 Other instability, unspecified elbow -M25331 Other instability, right wrist -M25332 Other instability, left wrist -M25339 Other instability, unspecified wrist -M25341 Other instability, right hand -M25342 Other instability, left hand -M25349 Other instability, unspecified hand -M25351 Other instability, right hip -M25352 Other instability, left hip -M25359 Other instability, unspecified hip -M25361 Other instability, right knee -M25362 Other instability, left knee -M25369 Other instability, unspecified knee -M25371 Other instability, right ankle -M25372 Other instability, left ankle -M25373 Other instability, unspecified ankle -M25374 Other instability, right foot -M25375 Other instability, left foot -M25376 Other instability, unspecified foot -M2540 Effusion, unspecified joint -M25411 Effusion, right shoulder -M25412 Effusion, left shoulder -M25419 Effusion, unspecified shoulder -M25421 Effusion, right elbow -M25422 Effusion, left elbow -M25429 Effusion, unspecified elbow -M25431 Effusion, right wrist -M25432 Effusion, left wrist -M25439 Effusion, unspecified wrist -M25441 Effusion, right hand -M25442 Effusion, left hand -M25449 Effusion, unspecified hand -M25451 Effusion, right hip -M25452 Effusion, left hip -M25459 Effusion, unspecified hip -M25461 Effusion, right knee -M25462 Effusion, left knee -M25469 Effusion, unspecified knee -M25471 Effusion, right ankle -M25472 Effusion, left ankle -M25473 Effusion, unspecified ankle -M25474 Effusion, right foot -M25475 Effusion, left foot -M25476 Effusion, unspecified foot -M2548 Effusion, other site -M2550 Pain in unspecified joint -M25511 Pain in right shoulder -M25512 Pain in left shoulder -M25519 Pain in unspecified shoulder -M25521 Pain in right elbow -M25522 Pain in left elbow -M25529 Pain in unspecified elbow -M25531 Pain in right wrist -M25532 Pain in left wrist -M25539 Pain in unspecified wrist -M25541 Pain in joints of right hand -M25542 Pain in joints of left hand -M25549 Pain in joints of unspecified hand -M25551 Pain in right hip -M25552 Pain in left hip -M25559 Pain in unspecified hip -M25561 Pain in right knee -M25562 Pain in left knee -M25569 Pain in unspecified knee -M25571 Pain in right ankle and joints of right foot -M25572 Pain in left ankle and joints of left foot -M25579 Pain in unspecified ankle and joints of unspecified foot -M2560 Stiffness of unspecified joint, not elsewhere classified -M25611 Stiffness of right shoulder, not elsewhere classified -M25612 Stiffness of left shoulder, not elsewhere classified -M25619 Stiffness of unspecified shoulder, not elsewhere classified -M25621 Stiffness of right elbow, not elsewhere classified -M25622 Stiffness of left elbow, not elsewhere classified -M25629 Stiffness of unspecified elbow, not elsewhere classified -M25631 Stiffness of right wrist, not elsewhere classified -M25632 Stiffness of left wrist, not elsewhere classified -M25639 Stiffness of unspecified wrist, not elsewhere classified -M25641 Stiffness of right hand, not elsewhere classified -M25642 Stiffness of left hand, not elsewhere classified -M25649 Stiffness of unspecified hand, not elsewhere classified -M25651 Stiffness of right hip, not elsewhere classified -M25652 Stiffness of left hip, not elsewhere classified -M25659 Stiffness of unspecified hip, not elsewhere classified -M25661 Stiffness of right knee, not elsewhere classified -M25662 Stiffness of left knee, not elsewhere classified -M25669 Stiffness of unspecified knee, not elsewhere classified -M25671 Stiffness of right ankle, not elsewhere classified -M25672 Stiffness of left ankle, not elsewhere classified -M25673 Stiffness of unspecified ankle, not elsewhere classified -M25674 Stiffness of right foot, not elsewhere classified -M25675 Stiffness of left foot, not elsewhere classified -M25676 Stiffness of unspecified foot, not elsewhere classified -M2570 Osteophyte, unspecified joint -M25711 Osteophyte, right shoulder -M25712 Osteophyte, left shoulder -M25719 Osteophyte, unspecified shoulder -M25721 Osteophyte, right elbow -M25722 Osteophyte, left elbow -M25729 Osteophyte, unspecified elbow -M25731 Osteophyte, right wrist -M25732 Osteophyte, left wrist -M25739 Osteophyte, unspecified wrist -M25741 Osteophyte, right hand -M25742 Osteophyte, left hand -M25749 Osteophyte, unspecified hand -M25751 Osteophyte, right hip -M25752 Osteophyte, left hip -M25759 Osteophyte, unspecified hip -M25761 Osteophyte, right knee -M25762 Osteophyte, left knee -M25769 Osteophyte, unspecified knee -M25771 Osteophyte, right ankle -M25772 Osteophyte, left ankle -M25773 Osteophyte, unspecified ankle -M25774 Osteophyte, right foot -M25775 Osteophyte, left foot -M25776 Osteophyte, unspecified foot -M2578 Osteophyte, vertebrae -M2580 Other specified joint disorders, unspecified joint -M25811 Other specified joint disorders, right shoulder -M25812 Other specified joint disorders, left shoulder -M25819 Other specified joint disorders, unspecified shoulder -M25821 Other specified joint disorders, right elbow -M25822 Other specified joint disorders, left elbow -M25829 Other specified joint disorders, unspecified elbow -M25831 Other specified joint disorders, right wrist -M25832 Other specified joint disorders, left wrist -M25839 Other specified joint disorders, unspecified wrist -M25841 Other specified joint disorders, right hand -M25842 Other specified joint disorders, left hand -M25849 Other specified joint disorders, unspecified hand -M25851 Other specified joint disorders, right hip -M25852 Other specified joint disorders, left hip -M25859 Other specified joint disorders, unspecified hip -M25861 Other specified joint disorders, right knee -M25862 Other specified joint disorders, left knee -M25869 Other specified joint disorders, unspecified knee -M25871 Other specified joint disorders, right ankle and foot -M25872 Other specified joint disorders, left ankle and foot -M25879 Other specified joint disorders, unspecified ankle and foot -M259 Joint disorder, unspecified -M2600 Unspecified anomaly of jaw size -M2601 Maxillary hyperplasia -M2602 Maxillary hypoplasia -M2603 Mandibular hyperplasia -M2604 Mandibular hypoplasia -M2605 Macrogenia -M2606 Microgenia -M2607 Excessive tuberosity of jaw -M2609 Other specified anomalies of jaw size -M2610 Unspecified anomaly of jaw-cranial base relationship -M2611 Maxillary asymmetry -M2612 Other jaw asymmetry -M2619 Other specified anomalies of jaw-cranial base relationship -M2620 Unspecified anomaly of dental arch relationship -M26211 Malocclusion, Angle's class I -M26212 Malocclusion, Angle's class II -M26213 Malocclusion, Angle's class III -M26219 Malocclusion, Angle's class, unspecified -M26220 Open anterior occlusal relationship -M26221 Open posterior occlusal relationship -M2623 Excessive horizontal overlap -M2624 Reverse articulation -M2625 Anomalies of interarch distance -M2629 Other anomalies of dental arch relationship -M2630 Unspecified anomaly of tooth position of fully erupted tooth or teeth -M2631 Crowding of fully erupted teeth -M2632 Excessive spacing of fully erupted teeth -M2633 Horizontal displacement of fully erupted tooth or teeth -M2634 Vertical displacement of fully erupted tooth or teeth -M2635 Rotation of fully erupted tooth or teeth -M2636 Insufficient interocclusal distance of fully erupted teeth (ridge) -M2637 Excessive interocclusal distance of fully erupted teeth -M2639 Other anomalies of tooth position of fully erupted tooth or teeth -M264 Malocclusion, unspecified -M2650 Dentofacial functional abnormalities, unspecified -M2651 Abnormal jaw closure -M2652 Limited mandibular range of motion -M2653 Deviation in opening and closing of the mandible -M2654 Insufficient anterior guidance -M2655 Centric occlusion maximum intercuspation discrepancy -M2656 Non-working side interference -M2657 Lack of posterior occlusal support -M2659 Other dentofacial functional abnormalities -M26601 Right temporomandibular joint disorder, unspecified -M26602 Left temporomandibular joint disorder, unspecified -M26603 Bilateral temporomandibular joint disorder, unspecified -M26609 Unspecified temporomandibular joint disorder, unspecified side -M26611 Adhesions and ankylosis of right temporomandibular joint -M26612 Adhesions and ankylosis of left temporomandibular joint -M26613 Adhesions and ankylosis of bilateral temporomandibular joint -M26619 Adhesions and ankylosis of temporomandibular joint, unspecified side -M26621 Arthralgia of right temporomandibular joint -M26622 Arthralgia of left temporomandibular joint -M26623 Arthralgia of bilateral temporomandibular joint -M26629 Arthralgia of temporomandibular joint, unspecified side -M26631 Articular disc disorder of right temporomandibular joint -M26632 Articular disc disorder of left temporomandibular joint -M26633 Articular disc disorder of bilateral temporomandibular joint -M26639 Articular disc disorder of temporomandibular joint, unspecified side -M2669 Other specified disorders of temporomandibular joint -M2670 Unspecified alveolar anomaly -M2671 Alveolar maxillary hyperplasia -M2672 Alveolar mandibular hyperplasia -M2673 Alveolar maxillary hypoplasia -M2674 Alveolar mandibular hypoplasia -M2679 Other specified alveolar anomalies -M2681 Anterior soft tissue impingement -M2682 Posterior soft tissue impingement -M2689 Other dentofacial anomalies -M269 Dentofacial anomaly, unspecified -M270 Developmental disorders of jaws -M271 Giant cell granuloma, central -M272 Inflammatory conditions of jaws -M273 Alveolitis of jaws -M2740 Unspecified cyst of jaw -M2749 Other cysts of jaw -M2751 Perforation of root canal space due to endodontic treatment -M2752 Endodontic overfill -M2753 Endodontic underfill -M2759 Other periradicular pathology associated with previous endodontic treatment -M2761 Osseointegration failure of dental implant -M2762 Post-osseointegration biological failure of dental implant -M2763 Post-osseointegration mechanical failure of dental implant -M2769 Other endosseous dental implant failure -M278 Other specified diseases of jaws -M279 Disease of jaws, unspecified -M300 Polyarteritis nodosa -M301 Polyarteritis with lung involvement [Churg-Strauss] -M302 Juvenile polyarteritis -M303 Mucocutaneous lymph node syndrome [Kawasaki] -M308 Other conditions related to polyarteritis nodosa -M310 Hypersensitivity angiitis -M311 Thrombotic microangiopathy -M312 Lethal midline granuloma -M3130 Wegener's granulomatosis without renal involvement -M3131 Wegener's granulomatosis with renal involvement -M314 Aortic arch syndrome [Takayasu] -M315 Giant cell arteritis with polymyalgia rheumatica -M316 Other giant cell arteritis -M317 Microscopic polyangiitis -M318 Other specified necrotizing vasculopathies -M319 Necrotizing vasculopathy, unspecified -M320 Drug-induced systemic lupus erythematosus -M3210 Systemic lupus erythematosus, organ or system involvement unspecified -M3211 Endocarditis in systemic lupus erythematosus -M3212 Pericarditis in systemic lupus erythematosus -M3213 Lung involvement in systemic lupus erythematosus -M3214 Glomerular disease in systemic lupus erythematosus -M3215 Tubulo-interstitial nephropathy in systemic lupus erythematosus -M3219 Other organ or system involvement in systemic lupus erythematosus -M328 Other forms of systemic lupus erythematosus -M329 Systemic lupus erythematosus, unspecified -M3300 Juvenile dermatopolymyositis, organ involvement unspecified -M3301 Juvenile dermatopolymyositis with respiratory involvement -M3302 Juvenile dermatopolymyositis with myopathy -M3309 Juvenile dermatopolymyositis with other organ involvement -M3310 Other dermatopolymyositis, organ involvement unspecified -M3311 Other dermatopolymyositis with respiratory involvement -M3312 Other dermatopolymyositis with myopathy -M3319 Other dermatopolymyositis with other organ involvement -M3320 Polymyositis, organ involvement unspecified -M3321 Polymyositis with respiratory involvement -M3322 Polymyositis with myopathy -M3329 Polymyositis with other organ involvement -M3390 Dermatopolymyositis, unspecified, organ involvement unspecified -M3391 Dermatopolymyositis, unspecified with respiratory involvement -M3392 Dermatopolymyositis, unspecified with myopathy -M3399 Dermatopolymyositis, unspecified with other organ involvement -M340 Progressive systemic sclerosis -M341 CR(E)ST syndrome -M342 Systemic sclerosis induced by drug and chemical -M3481 Systemic sclerosis with lung involvement -M3482 Systemic sclerosis with myopathy -M3483 Systemic sclerosis with polyneuropathy -M3489 Other systemic sclerosis -M349 Systemic sclerosis, unspecified -M3500 Sicca syndrome, unspecified -M3501 Sicca syndrome with keratoconjunctivitis -M3502 Sicca syndrome with lung involvement -M3503 Sicca syndrome with myopathy -M3504 Sicca syndrome with tubulo-interstitial nephropathy -M3509 Sicca syndrome with other organ involvement -M351 Other overlap syndromes -M352 Behcet's disease -M353 Polymyalgia rheumatica -M354 Diffuse (eosinophilic) fasciitis -M355 Multifocal fibrosclerosis -M356 Relapsing panniculitis [Weber-Christian] -M357 Hypermobility syndrome -M358 Other specified systemic involvement of connective tissue -M359 Systemic involvement of connective tissue, unspecified -M360 Dermato(poly)myositis in neoplastic disease -M361 Arthropathy in neoplastic disease -M362 Hemophilic arthropathy -M363 Arthropathy in other blood disorders -M364 Arthropathy in hypersensitivity reactions classified elsewhere -M368 Systemic disorders of connective tissue in other diseases classified elsewhere -M4000 Postural kyphosis, site unspecified -M4003 Postural kyphosis, cervicothoracic region -M4004 Postural kyphosis, thoracic region -M4005 Postural kyphosis, thoracolumbar region -M4010 Other secondary kyphosis, site unspecified -M4012 Other secondary kyphosis, cervical region -M4013 Other secondary kyphosis, cervicothoracic region -M4014 Other secondary kyphosis, thoracic region -M4015 Other secondary kyphosis, thoracolumbar region -M40202 Unspecified kyphosis, cervical region -M40203 Unspecified kyphosis, cervicothoracic region -M40204 Unspecified kyphosis, thoracic region -M40205 Unspecified kyphosis, thoracolumbar region -M40209 Unspecified kyphosis, site unspecified -M40292 Other kyphosis, cervical region -M40293 Other kyphosis, cervicothoracic region -M40294 Other kyphosis, thoracic region -M40295 Other kyphosis, thoracolumbar region -M40299 Other kyphosis, site unspecified -M4030 Flatback syndrome, site unspecified -M4035 Flatback syndrome, thoracolumbar region -M4036 Flatback syndrome, lumbar region -M4037 Flatback syndrome, lumbosacral region -M4040 Postural lordosis, site unspecified -M4045 Postural lordosis, thoracolumbar region -M4046 Postural lordosis, lumbar region -M4047 Postural lordosis, lumbosacral region -M4050 Lordosis, unspecified, site unspecified -M4055 Lordosis, unspecified, thoracolumbar region -M4056 Lordosis, unspecified, lumbar region -M4057 Lordosis, unspecified, lumbosacral region -M4100 Infantile idiopathic scoliosis, site unspecified -M4102 Infantile idiopathic scoliosis, cervical region -M4103 Infantile idiopathic scoliosis, cervicothoracic region -M4104 Infantile idiopathic scoliosis, thoracic region -M4105 Infantile idiopathic scoliosis, thoracolumbar region -M4106 Infantile idiopathic scoliosis, lumbar region -M4107 Infantile idiopathic scoliosis, lumbosacral region -M4108 Infantile idiopathic scoliosis, sacral and sacrococcygeal region -M41112 Juvenile idiopathic scoliosis, cervical region -M41113 Juvenile idiopathic scoliosis, cervicothoracic region -M41114 Juvenile idiopathic scoliosis, thoracic region -M41115 Juvenile idiopathic scoliosis, thoracolumbar region -M41116 Juvenile idiopathic scoliosis, lumbar region -M41117 Juvenile idiopathic scoliosis, lumbosacral region -M41119 Juvenile idiopathic scoliosis, site unspecified -M41122 Adolescent idiopathic scoliosis, cervical region -M41123 Adolescent idiopathic scoliosis, cervicothoracic region -M41124 Adolescent idiopathic scoliosis, thoracic region -M41125 Adolescent idiopathic scoliosis, thoracolumbar region -M41126 Adolescent idiopathic scoliosis, lumbar region -M41127 Adolescent idiopathic scoliosis, lumbosacral region -M41129 Adolescent idiopathic scoliosis, site unspecified -M4120 Other idiopathic scoliosis, site unspecified -M4122 Other idiopathic scoliosis, cervical region -M4123 Other idiopathic scoliosis, cervicothoracic region -M4124 Other idiopathic scoliosis, thoracic region -M4125 Other idiopathic scoliosis, thoracolumbar region -M4126 Other idiopathic scoliosis, lumbar region -M4127 Other idiopathic scoliosis, lumbosacral region -M4130 Thoracogenic scoliosis, site unspecified -M4134 Thoracogenic scoliosis, thoracic region -M4135 Thoracogenic scoliosis, thoracolumbar region -M4140 Neuromuscular scoliosis, site unspecified -M4141 Neuromuscular scoliosis, occipito-atlanto-axial region -M4142 Neuromuscular scoliosis, cervical region -M4143 Neuromuscular scoliosis, cervicothoracic region -M4144 Neuromuscular scoliosis, thoracic region -M4145 Neuromuscular scoliosis, thoracolumbar region -M4146 Neuromuscular scoliosis, lumbar region -M4147 Neuromuscular scoliosis, lumbosacral region -M4150 Other secondary scoliosis, site unspecified -M4152 Other secondary scoliosis, cervical region -M4153 Other secondary scoliosis, cervicothoracic region -M4154 Other secondary scoliosis, thoracic region -M4155 Other secondary scoliosis, thoracolumbar region -M4156 Other secondary scoliosis, lumbar region -M4157 Other secondary scoliosis, lumbosacral region -M4180 Other forms of scoliosis, site unspecified -M4182 Other forms of scoliosis, cervical region -M4183 Other forms of scoliosis, cervicothoracic region -M4184 Other forms of scoliosis, thoracic region -M4185 Other forms of scoliosis, thoracolumbar region -M4186 Other forms of scoliosis, lumbar region -M4187 Other forms of scoliosis, lumbosacral region -M419 Scoliosis, unspecified -M4200 Juvenile osteochondrosis of spine, site unspecified -M4201 Juvenile osteochondrosis of spine, occipito-atlanto-axial region -M4202 Juvenile osteochondrosis of spine, cervical region -M4203 Juvenile osteochondrosis of spine, cervicothoracic region -M4204 Juvenile osteochondrosis of spine, thoracic region -M4205 Juvenile osteochondrosis of spine, thoracolumbar region -M4206 Juvenile osteochondrosis of spine, lumbar region -M4207 Juvenile osteochondrosis of spine, lumbosacral region -M4208 Juvenile osteochondrosis of spine, sacral and sacrococcygeal region -M4209 Juvenile osteochondrosis of spine, multiple sites in spine -M4210 Adult osteochondrosis of spine, site unspecified -M4211 Adult osteochondrosis of spine, occipito-atlanto-axial region -M4212 Adult osteochondrosis of spine, cervical region -M4213 Adult osteochondrosis of spine, cervicothoracic region -M4214 Adult osteochondrosis of spine, thoracic region -M4215 Adult osteochondrosis of spine, thoracolumbar region -M4216 Adult osteochondrosis of spine, lumbar region -M4217 Adult osteochondrosis of spine, lumbosacral region -M4218 Adult osteochondrosis of spine, sacral and sacrococcygeal region -M4219 Adult osteochondrosis of spine, multiple sites in spine -M429 Spinal osteochondrosis, unspecified -M4300 Spondylolysis, site unspecified -M4301 Spondylolysis, occipito-atlanto-axial region -M4302 Spondylolysis, cervical region -M4303 Spondylolysis, cervicothoracic region -M4304 Spondylolysis, thoracic region -M4305 Spondylolysis, thoracolumbar region -M4306 Spondylolysis, lumbar region -M4307 Spondylolysis, lumbosacral region -M4308 Spondylolysis, sacral and sacrococcygeal region -M4309 Spondylolysis, multiple sites in spine -M4310 Spondylolisthesis, site unspecified -M4311 Spondylolisthesis, occipito-atlanto-axial region -M4312 Spondylolisthesis, cervical region -M4313 Spondylolisthesis, cervicothoracic region -M4314 Spondylolisthesis, thoracic region -M4315 Spondylolisthesis, thoracolumbar region -M4316 Spondylolisthesis, lumbar region -M4317 Spondylolisthesis, lumbosacral region -M4318 Spondylolisthesis, sacral and sacrococcygeal region -M4319 Spondylolisthesis, multiple sites in spine -M4320 Fusion of spine, site unspecified -M4321 Fusion of spine, occipito-atlanto-axial region -M4322 Fusion of spine, cervical region -M4323 Fusion of spine, cervicothoracic region -M4324 Fusion of spine, thoracic region -M4325 Fusion of spine, thoracolumbar region -M4326 Fusion of spine, lumbar region -M4327 Fusion of spine, lumbosacral region -M4328 Fusion of spine, sacral and sacrococcygeal region -M433 Recurrent atlantoaxial dislocation with myelopathy -M434 Other recurrent atlantoaxial dislocation -M435X2 Other recurrent vertebral dislocation, cervical region -M435X3 Other recurrent vertebral dislocation, cervicothoracic region -M435X4 Other recurrent vertebral dislocation, thoracic region -M435X5 Other recurrent vertebral dislocation, thoracolumbar region -M435X6 Other recurrent vertebral dislocation, lumbar region -M435X7 Other recurrent vertebral dislocation, lumbosacral region -M435X8 Other recurrent vertebral dislocation, sacral and sacrococcygeal region -M435X9 Other recurrent vertebral dislocation, site unspecified -M436 Torticollis -M438X1 Other specified deforming dorsopathies, occipito-atlanto-axial region -M438X2 Other specified deforming dorsopathies, cervical region -M438X3 Other specified deforming dorsopathies, cervicothoracic region -M438X4 Other specified deforming dorsopathies, thoracic region -M438X5 Other specified deforming dorsopathies, thoracolumbar region -M438X6 Other specified deforming dorsopathies, lumbar region -M438X7 Other specified deforming dorsopathies, lumbosacral region -M438X8 Other specified deforming dorsopathies, sacral and sacrococcygeal region -M438X9 Other specified deforming dorsopathies, site unspecified -M439 Deforming dorsopathy, unspecified -M450 Ankylosing spondylitis of multiple sites in spine -M451 Ankylosing spondylitis of occipito-atlanto-axial region -M452 Ankylosing spondylitis of cervical region -M453 Ankylosing spondylitis of cervicothoracic region -M454 Ankylosing spondylitis of thoracic region -M455 Ankylosing spondylitis of thoracolumbar region -M456 Ankylosing spondylitis lumbar region -M457 Ankylosing spondylitis of lumbosacral region -M458 Ankylosing spondylitis sacral and sacrococcygeal region -M459 Ankylosing spondylitis of unspecified sites in spine -M4600 Spinal enthesopathy, site unspecified -M4601 Spinal enthesopathy, occipito-atlanto-axial region -M4602 Spinal enthesopathy, cervical region -M4603 Spinal enthesopathy, cervicothoracic region -M4604 Spinal enthesopathy, thoracic region -M4605 Spinal enthesopathy, thoracolumbar region -M4606 Spinal enthesopathy, lumbar region -M4607 Spinal enthesopathy, lumbosacral region -M4608 Spinal enthesopathy, sacral and sacrococcygeal region -M4609 Spinal enthesopathy, multiple sites in spine -M461 Sacroiliitis, not elsewhere classified -M4620 Osteomyelitis of vertebra, site unspecified -M4621 Osteomyelitis of vertebra, occipito-atlanto-axial region -M4622 Osteomyelitis of vertebra, cervical region -M4623 Osteomyelitis of vertebra, cervicothoracic region -M4624 Osteomyelitis of vertebra, thoracic region -M4625 Osteomyelitis of vertebra, thoracolumbar region -M4626 Osteomyelitis of vertebra, lumbar region -M4627 Osteomyelitis of vertebra, lumbosacral region -M4628 Osteomyelitis of vertebra, sacral and sacrococcygeal region -M4630 Infection of intervertebral disc (pyogenic), site unspecified -M4631 Infection of intervertebral disc (pyogenic), occipito-atlanto-axial region -M4632 Infection of intervertebral disc (pyogenic), cervical region -M4633 Infection of intervertebral disc (pyogenic), cervicothoracic region -M4634 Infection of intervertebral disc (pyogenic), thoracic region -M4635 Infection of intervertebral disc (pyogenic), thoracolumbar region -M4636 Infection of intervertebral disc (pyogenic), lumbar region -M4637 Infection of intervertebral disc (pyogenic), lumbosacral region -M4638 Infection of intervertebral disc (pyogenic), sacral and sacrococcygeal region -M4639 Infection of intervertebral disc (pyogenic), multiple sites in spine -M4640 Discitis, unspecified, site unspecified -M4641 Discitis, unspecified, occipito-atlanto-axial region -M4642 Discitis, unspecified, cervical region -M4643 Discitis, unspecified, cervicothoracic region -M4644 Discitis, unspecified, thoracic region -M4645 Discitis, unspecified, thoracolumbar region -M4646 Discitis, unspecified, lumbar region -M4647 Discitis, unspecified, lumbosacral region -M4648 Discitis, unspecified, sacral and sacrococcygeal region -M4649 Discitis, unspecified, multiple sites in spine -M4650 Other infective spondylopathies, site unspecified -M4651 Other infective spondylopathies, occipito-atlanto-axial region -M4652 Other infective spondylopathies, cervical region -M4653 Other infective spondylopathies, cervicothoracic region -M4654 Other infective spondylopathies, thoracic region -M4655 Other infective spondylopathies, thoracolumbar region -M4656 Other infective spondylopathies, lumbar region -M4657 Other infective spondylopathies, lumbosacral region -M4658 Other infective spondylopathies, sacral and sacrococcygeal region -M4659 Other infective spondylopathies, multiple sites in spine -M4680 Other specified inflammatory spondylopathies, site unspecified -M4681 Other specified inflammatory spondylopathies, occipito-atlanto-axial region -M4682 Other specified inflammatory spondylopathies, cervical region -M4683 Other specified inflammatory spondylopathies, cervicothoracic region -M4684 Other specified inflammatory spondylopathies, thoracic region -M4685 Other specified inflammatory spondylopathies, thoracolumbar region -M4686 Other specified inflammatory spondylopathies, lumbar region -M4687 Other specified inflammatory spondylopathies, lumbosacral region -M4688 Other specified inflammatory spondylopathies, sacral and sacrococcygeal region -M4689 Other specified inflammatory spondylopathies, multiple sites in spine -M4690 Unspecified inflammatory spondylopathy, site unspecified -M4691 Unspecified inflammatory spondylopathy, occipito-atlanto-axial region -M4692 Unspecified inflammatory spondylopathy, cervical region -M4693 Unspecified inflammatory spondylopathy, cervicothoracic region -M4694 Unspecified inflammatory spondylopathy, thoracic region -M4695 Unspecified inflammatory spondylopathy, thoracolumbar region -M4696 Unspecified inflammatory spondylopathy, lumbar region -M4697 Unspecified inflammatory spondylopathy, lumbosacral region -M4698 Unspecified inflammatory spondylopathy, sacral and sacrococcygeal region -M4699 Unspecified inflammatory spondylopathy, multiple sites in spine -M47011 Anterior spinal artery compression syndromes, occipito-atlanto-axial region -M47012 Anterior spinal artery compression syndromes, cervical region -M47013 Anterior spinal artery compression syndromes, cervicothoracic region -M47014 Anterior spinal artery compression syndromes, thoracic region -M47015 Anterior spinal artery compression syndromes, thoracolumbar region -M47016 Anterior spinal artery compression syndromes, lumbar region -M47019 Anterior spinal artery compression syndromes, site unspecified -M47021 Vertebral artery compression syndromes, occipito-atlanto-axial region -M47022 Vertebral artery compression syndromes, cervical region -M47029 Vertebral artery compression syndromes, site unspecified -M4710 Other spondylosis with myelopathy, site unspecified -M4711 Other spondylosis with myelopathy, occipito-atlanto-axial region -M4712 Other spondylosis with myelopathy, cervical region -M4713 Other spondylosis with myelopathy, cervicothoracic region -M4714 Other spondylosis with myelopathy, thoracic region -M4715 Other spondylosis with myelopathy, thoracolumbar region -M4716 Other spondylosis with myelopathy, lumbar region -M4720 Other spondylosis with radiculopathy, site unspecified -M4721 Other spondylosis with radiculopathy, occipito-atlanto-axial region -M4722 Other spondylosis with radiculopathy, cervical region -M4723 Other spondylosis with radiculopathy, cervicothoracic region -M4724 Other spondylosis with radiculopathy, thoracic region -M4725 Other spondylosis with radiculopathy, thoracolumbar region -M4726 Other spondylosis with radiculopathy, lumbar region -M4727 Other spondylosis with radiculopathy, lumbosacral region -M4728 Other spondylosis with radiculopathy, sacral and sacrococcygeal region -M47811 Spondylosis without myelopathy or radiculopathy, occipito-atlanto-axial region -M47812 Spondylosis without myelopathy or radiculopathy, cervical region -M47813 Spondylosis without myelopathy or radiculopathy, cervicothoracic region -M47814 Spondylosis without myelopathy or radiculopathy, thoracic region -M47815 Spondylosis without myelopathy or radiculopathy, thoracolumbar region -M47816 Spondylosis without myelopathy or radiculopathy, lumbar region -M47817 Spondylosis without myelopathy or radiculopathy, lumbosacral region -M47818 Spondylosis without myelopathy or radiculopathy, sacral and sacrococcygeal region -M47819 Spondylosis without myelopathy or radiculopathy, site unspecified -M47891 Other spondylosis, occipito-atlanto-axial region -M47892 Other spondylosis, cervical region -M47893 Other spondylosis, cervicothoracic region -M47894 Other spondylosis, thoracic region -M47895 Other spondylosis, thoracolumbar region -M47896 Other spondylosis, lumbar region -M47897 Other spondylosis, lumbosacral region -M47898 Other spondylosis, sacral and sacrococcygeal region -M47899 Other spondylosis, site unspecified -M479 Spondylosis, unspecified -M4800 Spinal stenosis, site unspecified -M4801 Spinal stenosis, occipito-atlanto-axial region -M4802 Spinal stenosis, cervical region -M4803 Spinal stenosis, cervicothoracic region -M4804 Spinal stenosis, thoracic region -M4805 Spinal stenosis, thoracolumbar region -M4806 Spinal stenosis, lumbar region -M4807 Spinal stenosis, lumbosacral region -M4808 Spinal stenosis, sacral and sacrococcygeal region -M4810 Ankylosing hyperostosis [Forestier], site unspecified -M4811 Ankylosing hyperostosis [Forestier], occipito-atlanto-axial region -M4812 Ankylosing hyperostosis [Forestier], cervical region -M4813 Ankylosing hyperostosis [Forestier], cervicothoracic region -M4814 Ankylosing hyperostosis [Forestier], thoracic region -M4815 Ankylosing hyperostosis [Forestier], thoracolumbar region -M4816 Ankylosing hyperostosis [Forestier], lumbar region -M4817 Ankylosing hyperostosis [Forestier], lumbosacral region -M4818 Ankylosing hyperostosis [Forestier], sacral and sacrococcygeal region -M4819 Ankylosing hyperostosis [Forestier], multiple sites in spine -M4820 Kissing spine, site unspecified -M4821 Kissing spine, occipito-atlanto-axial region -M4822 Kissing spine, cervical region -M4823 Kissing spine, cervicothoracic region -M4824 Kissing spine, thoracic region -M4825 Kissing spine, thoracolumbar region -M4826 Kissing spine, lumbar region -M4827 Kissing spine, lumbosacral region -M4830 Traumatic spondylopathy, site unspecified -M4831 Traumatic spondylopathy, occipito-atlanto-axial region -M4832 Traumatic spondylopathy, cervical region -M4833 Traumatic spondylopathy, cervicothoracic region -M4834 Traumatic spondylopathy, thoracic region -M4835 Traumatic spondylopathy, thoracolumbar region -M4836 Traumatic spondylopathy, lumbar region -M4837 Traumatic spondylopathy, lumbosacral region -M4838 Traumatic spondylopathy, sacral and sacrococcygeal region -M4840XA Fatigue fracture of vertebra, site unspecified, initial encounter for fracture -M4840XD Fatigue fracture of vertebra, site unspecified, subsequent encounter for fracture with routine healing -M4840XG Fatigue fracture of vertebra, site unspecified, subsequent encounter for fracture with delayed healing -M4840XS Fatigue fracture of vertebra, site unspecified, sequela of fracture -M4841XA Fatigue fracture of vertebra, occipito-atlanto-axial region, initial encounter for fracture -M4841XD Fatigue fracture of vertebra, occipito-atlanto-axial region, subsequent encounter for fracture with routine healing -M4841XG Fatigue fracture of vertebra, occipito-atlanto-axial region, subsequent encounter for fracture with delayed healing -M4841XS Fatigue fracture of vertebra, occipito-atlanto-axial region, sequela of fracture -M4842XA Fatigue fracture of vertebra, cervical region, initial encounter for fracture -M4842XD Fatigue fracture of vertebra, cervical region, subsequent encounter for fracture with routine healing -M4842XG Fatigue fracture of vertebra, cervical region, subsequent encounter for fracture with delayed healing -M4842XS Fatigue fracture of vertebra, cervical region, sequela of fracture -M4843XA Fatigue fracture of vertebra, cervicothoracic region, initial encounter for fracture -M4843XD Fatigue fracture of vertebra, cervicothoracic region, subsequent encounter for fracture with routine healing -M4843XG Fatigue fracture of vertebra, cervicothoracic region, subsequent encounter for fracture with delayed healing -M4843XS Fatigue fracture of vertebra, cervicothoracic region, sequela of fracture -M4844XA Fatigue fracture of vertebra, thoracic region, initial encounter for fracture -M4844XD Fatigue fracture of vertebra, thoracic region, subsequent encounter for fracture with routine healing -M4844XG Fatigue fracture of vertebra, thoracic region, subsequent encounter for fracture with delayed healing -M4844XS Fatigue fracture of vertebra, thoracic region, sequela of fracture -M4845XA Fatigue fracture of vertebra, thoracolumbar region, initial encounter for fracture -M4845XD Fatigue fracture of vertebra, thoracolumbar region, subsequent encounter for fracture with routine healing -M4845XG Fatigue fracture of vertebra, thoracolumbar region, subsequent encounter for fracture with delayed healing -M4845XS Fatigue fracture of vertebra, thoracolumbar region, sequela of fracture -M4846XA Fatigue fracture of vertebra, lumbar region, initial encounter for fracture -M4846XD Fatigue fracture of vertebra, lumbar region, subsequent encounter for fracture with routine healing -M4846XG Fatigue fracture of vertebra, lumbar region, subsequent encounter for fracture with delayed healing -M4846XS Fatigue fracture of vertebra, lumbar region, sequela of fracture -M4847XA Fatigue fracture of vertebra, lumbosacral region, initial encounter for fracture -M4847XD Fatigue fracture of vertebra, lumbosacral region, subsequent encounter for fracture with routine healing -M4847XG Fatigue fracture of vertebra, lumbosacral region, subsequent encounter for fracture with delayed healing -M4847XS Fatigue fracture of vertebra, lumbosacral region, sequela of fracture -M4848XA Fatigue fracture of vertebra, sacral and sacrococcygeal region, initial encounter for fracture -M4848XD Fatigue fracture of vertebra, sacral and sacrococcygeal region, subsequent encounter for fracture with routine healing -M4848XG Fatigue fracture of vertebra, sacral and sacrococcygeal region, subsequent encounter for fracture with delayed healing -M4848XS Fatigue fracture of vertebra, sacral and sacrococcygeal region, sequela of fracture -M4850XA Collapsed vertebra, not elsewhere classified, site unspecified, initial encounter for fracture -M4850XD Collapsed vertebra, not elsewhere classified, site unspecified, subsequent encounter for fracture with routine healing -M4850XG Collapsed vertebra, not elsewhere classified, site unspecified, subsequent encounter for fracture with delayed healing -M4850XS Collapsed vertebra, not elsewhere classified, site unspecified, sequela of fracture -M4851XA Collapsed vertebra, not elsewhere classified, occipito-atlanto-axial region, initial encounter for fracture -M4851XD Collapsed vertebra, not elsewhere classified, occipito-atlanto-axial region, subsequent encounter for fracture with routine healing -M4851XG Collapsed vertebra, not elsewhere classified, occipito-atlanto-axial region, subsequent encounter for fracture with delayed healing -M4851XS Collapsed vertebra, not elsewhere classified, occipito-atlanto-axial region, sequela of fracture -M4852XA Collapsed vertebra, not elsewhere classified, cervical region, initial encounter for fracture -M4852XD Collapsed vertebra, not elsewhere classified, cervical region, subsequent encounter for fracture with routine healing -M4852XG Collapsed vertebra, not elsewhere classified, cervical region, subsequent encounter for fracture with delayed healing -M4852XS Collapsed vertebra, not elsewhere classified, cervical region, sequela of fracture -M4853XA Collapsed vertebra, not elsewhere classified, cervicothoracic region, initial encounter for fracture -M4853XD Collapsed vertebra, not elsewhere classified, cervicothoracic region, subsequent encounter for fracture with routine healing -M4853XG Collapsed vertebra, not elsewhere classified, cervicothoracic region, subsequent encounter for fracture with delayed healing -M4853XS Collapsed vertebra, not elsewhere classified, cervicothoracic region, sequela of fracture -M4854XA Collapsed vertebra, not elsewhere classified, thoracic region, initial encounter for fracture -M4854XD Collapsed vertebra, not elsewhere classified, thoracic region, subsequent encounter for fracture with routine healing -M4854XG Collapsed vertebra, not elsewhere classified, thoracic region, subsequent encounter for fracture with delayed healing -M4854XS Collapsed vertebra, not elsewhere classified, thoracic region, sequela of fracture -M4855XA Collapsed vertebra, not elsewhere classified, thoracolumbar region, initial encounter for fracture -M4855XD Collapsed vertebra, not elsewhere classified, thoracolumbar region, subsequent encounter for fracture with routine healing -M4855XG Collapsed vertebra, not elsewhere classified, thoracolumbar region, subsequent encounter for fracture with delayed healing -M4855XS Collapsed vertebra, not elsewhere classified, thoracolumbar region, sequela of fracture -M4856XA Collapsed vertebra, not elsewhere classified, lumbar region, initial encounter for fracture -M4856XD Collapsed vertebra, not elsewhere classified, lumbar region, subsequent encounter for fracture with routine healing -M4856XG Collapsed vertebra, not elsewhere classified, lumbar region, subsequent encounter for fracture with delayed healing -M4856XS Collapsed vertebra, not elsewhere classified, lumbar region, sequela of fracture -M4857XA Collapsed vertebra, not elsewhere classified, lumbosacral region, initial encounter for fracture -M4857XD Collapsed vertebra, not elsewhere classified, lumbosacral region, subsequent encounter for fracture with routine healing -M4857XG Collapsed vertebra, not elsewhere classified, lumbosacral region, subsequent encounter for fracture with delayed healing -M4857XS Collapsed vertebra, not elsewhere classified, lumbosacral region, sequela of fracture -M4858XA Collapsed vertebra, not elsewhere classified, sacral and sacrococcygeal region, initial encounter for fracture -M4858XD Collapsed vertebra, not elsewhere classified, sacral and sacrococcygeal region, subsequent encounter for fracture with routine healing -M4858XG Collapsed vertebra, not elsewhere classified, sacral and sacrococcygeal region, subsequent encounter for fracture with delayed healing -M4858XS Collapsed vertebra, not elsewhere classified, sacral and sacrococcygeal region, sequela of fracture -M488X1 Other specified spondylopathies, occipito-atlanto-axial region -M488X2 Other specified spondylopathies, cervical region -M488X3 Other specified spondylopathies, cervicothoracic region -M488X4 Other specified spondylopathies, thoracic region -M488X5 Other specified spondylopathies, thoracolumbar region -M488X6 Other specified spondylopathies, lumbar region -M488X7 Other specified spondylopathies, lumbosacral region -M488X8 Other specified spondylopathies, sacral and sacrococcygeal region -M488X9 Other specified spondylopathies, site unspecified -M489 Spondylopathy, unspecified -M4980 Spondylopathy in diseases classified elsewhere, site unspecified -M4981 Spondylopathy in diseases classified elsewhere, occipito-atlanto-axial region -M4982 Spondylopathy in diseases classified elsewhere, cervical region -M4983 Spondylopathy in diseases classified elsewhere, cervicothoracic region -M4984 Spondylopathy in diseases classified elsewhere, thoracic region -M4985 Spondylopathy in diseases classified elsewhere, thoracolumbar region -M4986 Spondylopathy in diseases classified elsewhere, lumbar region -M4987 Spondylopathy in diseases classified elsewhere, lumbosacral region -M4988 Spondylopathy in diseases classified elsewhere, sacral and sacrococcygeal region -M4989 Spondylopathy in diseases classified elsewhere, multiple sites in spine -M5000 Cervical disc disorder with myelopathy, unspecified cervical region -M5001 Cervical disc disorder with myelopathy, high cervical region -M50020 Cervical disc disorder with myelopathy, mid-cervical region, unspecified level -M50021 Cervical disc disorder at C4-C5 level with myelopathy -M50022 Cervical disc disorder at C5-C6 level with myelopathy -M50023 Cervical disc disorder at C6-C7 level with myelopathy -M5003 Cervical disc disorder with myelopathy, cervicothoracic region -M5010 Cervical disc disorder with radiculopathy, unspecified cervical region -M5011 Cervical disc disorder with radiculopathy, high cervical region -M50120 Mid-cervical disc disorder, unspecified -M50121 Cervical disc disorder at C4-C5 level with radiculopathy -M50122 Cervical disc disorder at C5-C6 level with radiculopathy -M50123 Cervical disc disorder at C6-C7 level with radiculopathy -M5013 Cervical disc disorder with radiculopathy, cervicothoracic region -M5020 Other cervical disc displacement, unspecified cervical region -M5021 Other cervical disc displacement, high cervical region -M50220 Other cervical disc displacement, mid-cervical region, unspecified level -M50221 Other cervical disc displacement at C4-C5 level -M50222 Other cervical disc displacement at C5-C6 level -M50223 Other cervical disc displacement at C6-C7 level -M5023 Other cervical disc displacement, cervicothoracic region -M5030 Other cervical disc degeneration, unspecified cervical region -M5031 Other cervical disc degeneration, high cervical region -M50320 Other cervical disc degeneration, mid-cervical region, unspecified level -M50321 Other cervical disc degeneration at C4-C5 level -M50322 Other cervical disc degeneration at C5-C6 level -M50323 Other cervical disc degeneration at C6-C7 level -M5033 Other cervical disc degeneration, cervicothoracic region -M5080 Other cervical disc disorders, unspecified cervical region -M5081 Other cervical disc disorders, high cervical region -M50820 Other cervical disc disorders, mid-cervical region, unspecified level -M50821 Other cervical disc disorders at C4-C5 level -M50822 Other cervical disc disorders at C5-C6 level -M50823 Other cervical disc disorders at C6-C7 level -M5083 Other cervical disc disorders, cervicothoracic region -M5090 Cervical disc disorder, unspecified, unspecified cervical region -M5091 Cervical disc disorder, unspecified, high cervical region -M50920 Unspecified cervical disc disorder, mid-cervical region, unspecified level -M50921 Unspecified cervical disc disorder at C4-C5 level -M50922 Unspecified cervical disc disorder at C5-C6 level -M50923 Unspecified cervical disc disorder at C6-C7 level -M5093 Cervical disc disorder, unspecified, cervicothoracic region -M5104 Intervertebral disc disorders with myelopathy, thoracic region -M5105 Intervertebral disc disorders with myelopathy, thoracolumbar region -M5106 Intervertebral disc disorders with myelopathy, lumbar region -M5114 Intervertebral disc disorders with radiculopathy, thoracic region -M5115 Intervertebral disc disorders with radiculopathy, thoracolumbar region -M5116 Intervertebral disc disorders with radiculopathy, lumbar region -M5117 Intervertebral disc disorders with radiculopathy, lumbosacral region -M5124 Other intervertebral disc displacement, thoracic region -M5125 Other intervertebral disc displacement, thoracolumbar region -M5126 Other intervertebral disc displacement, lumbar region -M5127 Other intervertebral disc displacement, lumbosacral region -M5134 Other intervertebral disc degeneration, thoracic region -M5135 Other intervertebral disc degeneration, thoracolumbar region -M5136 Other intervertebral disc degeneration, lumbar region -M5137 Other intervertebral disc degeneration, lumbosacral region -M5144 Schmorl's nodes, thoracic region -M5145 Schmorl's nodes, thoracolumbar region -M5146 Schmorl's nodes, lumbar region -M5147 Schmorl's nodes, lumbosacral region -M5184 Other intervertebral disc disorders, thoracic region -M5185 Other intervertebral disc disorders, thoracolumbar region -M5186 Other intervertebral disc disorders, lumbar region -M5187 Other intervertebral disc disorders, lumbosacral region -M519 Unspecified thoracic, thoracolumbar and lumbosacral intervertebral disc disorder -M530 Cervicocranial syndrome -M531 Cervicobrachial syndrome -M532X1 Spinal instabilities, occipito-atlanto-axial region -M532X2 Spinal instabilities, cervical region -M532X3 Spinal instabilities, cervicothoracic region -M532X4 Spinal instabilities, thoracic region -M532X5 Spinal instabilities, thoracolumbar region -M532X6 Spinal instabilities, lumbar region -M532X7 Spinal instabilities, lumbosacral region -M532X8 Spinal instabilities, sacral and sacrococcygeal region -M532X9 Spinal instabilities, site unspecified -M533 Sacrococcygeal disorders, not elsewhere classified -M5380 Other specified dorsopathies, site unspecified -M5381 Other specified dorsopathies, occipito-atlanto-axial region -M5382 Other specified dorsopathies, cervical region -M5383 Other specified dorsopathies, cervicothoracic region -M5384 Other specified dorsopathies, thoracic region -M5385 Other specified dorsopathies, thoracolumbar region -M5386 Other specified dorsopathies, lumbar region -M5387 Other specified dorsopathies, lumbosacral region -M5388 Other specified dorsopathies, sacral and sacrococcygeal region -M539 Dorsopathy, unspecified -M5400 Panniculitis affecting regions of neck and back, site unspecified -M5401 Panniculitis affecting regions of neck and back, occipito-atlanto-axial region -M5402 Panniculitis affecting regions of neck and back, cervical region -M5403 Panniculitis affecting regions of neck and back, cervicothoracic region -M5404 Panniculitis affecting regions of neck and back, thoracic region -M5405 Panniculitis affecting regions of neck and back, thoracolumbar region -M5406 Panniculitis affecting regions of neck and back, lumbar region -M5407 Panniculitis affecting regions of neck and back, lumbosacral region -M5408 Panniculitis affecting regions of neck and back, sacral and sacrococcygeal region -M5409 Panniculitis affecting regions, neck and back, multiple sites in spine -M5410 Radiculopathy, site unspecified -M5411 Radiculopathy, occipito-atlanto-axial region -M5412 Radiculopathy, cervical region -M5413 Radiculopathy, cervicothoracic region -M5414 Radiculopathy, thoracic region -M5415 Radiculopathy, thoracolumbar region -M5416 Radiculopathy, lumbar region -M5417 Radiculopathy, lumbosacral region -M5418 Radiculopathy, sacral and sacrococcygeal region -M542 Cervicalgia -M5430 Sciatica, unspecified side -M5431 Sciatica, right side -M5432 Sciatica, left side -M5440 Lumbago with sciatica, unspecified side -M5441 Lumbago with sciatica, right side -M5442 Lumbago with sciatica, left side -M545 Low back pain -M546 Pain in thoracic spine -M5481 Occipital neuralgia -M5489 Other dorsalgia -M549 Dorsalgia, unspecified -M60000 Infective myositis, unspecified right arm -M60001 Infective myositis, unspecified left arm -M60002 Infective myositis, unspecified arm -M60003 Infective myositis, unspecified right leg -M60004 Infective myositis, unspecified left leg -M60005 Infective myositis, unspecified leg -M60009 Infective myositis, unspecified site -M60011 Infective myositis, right shoulder -M60012 Infective myositis, left shoulder -M60019 Infective myositis, unspecified shoulder -M60021 Infective myositis, right upper arm -M60022 Infective myositis, left upper arm -M60029 Infective myositis, unspecified upper arm -M60031 Infective myositis, right forearm -M60032 Infective myositis, left forearm -M60039 Infective myositis, unspecified forearm -M60041 Infective myositis, right hand -M60042 Infective myositis, left hand -M60043 Infective myositis, unspecified hand -M60044 Infective myositis, right finger(s) -M60045 Infective myositis, left finger(s) -M60046 Infective myositis, unspecified finger(s) -M60051 Infective myositis, right thigh -M60052 Infective myositis, left thigh -M60059 Infective myositis, unspecified thigh -M60061 Infective myositis, right lower leg -M60062 Infective myositis, left lower leg -M60069 Infective myositis, unspecified lower leg -M60070 Infective myositis, right ankle -M60071 Infective myositis, left ankle -M60072 Infective myositis, unspecified ankle -M60073 Infective myositis, right foot -M60074 Infective myositis, left foot -M60075 Infective myositis, unspecified foot -M60076 Infective myositis, right toe(s) -M60077 Infective myositis, left toe(s) -M60078 Infective myositis, unspecified toe(s) -M6008 Infective myositis, other site -M6009 Infective myositis, multiple sites -M6010 Interstitial myositis of unspecified site -M60111 Interstitial myositis, right shoulder -M60112 Interstitial myositis, left shoulder -M60119 Interstitial myositis, unspecified shoulder -M60121 Interstitial myositis, right upper arm -M60122 Interstitial myositis, left upper arm -M60129 Interstitial myositis, unspecified upper arm -M60131 Interstitial myositis, right forearm -M60132 Interstitial myositis, left forearm -M60139 Interstitial myositis, unspecified forearm -M60141 Interstitial myositis, right hand -M60142 Interstitial myositis, left hand -M60149 Interstitial myositis, unspecified hand -M60151 Interstitial myositis, right thigh -M60152 Interstitial myositis, left thigh -M60159 Interstitial myositis, unspecified thigh -M60161 Interstitial myositis, right lower leg -M60162 Interstitial myositis, left lower leg -M60169 Interstitial myositis, unspecified lower leg -M60171 Interstitial myositis, right ankle and foot -M60172 Interstitial myositis, left ankle and foot -M60179 Interstitial myositis, unspecified ankle and foot -M6018 Interstitial myositis, other site -M6019 Interstitial myositis, multiple sites -M6020 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified site -M60211 Foreign body granuloma of soft tissue, not elsewhere classified, right shoulder -M60212 Foreign body granuloma of soft tissue, not elsewhere classified, left shoulder -M60219 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified shoulder -M60221 Foreign body granuloma of soft tissue, not elsewhere classified, right upper arm -M60222 Foreign body granuloma of soft tissue, not elsewhere classified, left upper arm -M60229 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified upper arm -M60231 Foreign body granuloma of soft tissue, not elsewhere classified, right forearm -M60232 Foreign body granuloma of soft tissue, not elsewhere classified, left forearm -M60239 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified forearm -M60241 Foreign body granuloma of soft tissue, not elsewhere classified, right hand -M60242 Foreign body granuloma of soft tissue, not elsewhere classified, left hand -M60249 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified hand -M60251 Foreign body granuloma of soft tissue, not elsewhere classified, right thigh -M60252 Foreign body granuloma of soft tissue, not elsewhere classified, left thigh -M60259 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified thigh -M60261 Foreign body granuloma of soft tissue, not elsewhere classified, right lower leg -M60262 Foreign body granuloma of soft tissue, not elsewhere classified, left lower leg -M60269 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified lower leg -M60271 Foreign body granuloma of soft tissue, not elsewhere classified, right ankle and foot -M60272 Foreign body granuloma of soft tissue, not elsewhere classified, left ankle and foot -M60279 Foreign body granuloma of soft tissue, not elsewhere classified, unspecified ankle and foot -M6028 Foreign body granuloma of soft tissue, not elsewhere classified, other site -M6080 Other myositis, unspecified site -M60811 Other myositis, right shoulder -M60812 Other myositis, left shoulder -M60819 Other myositis, unspecified shoulder -M60821 Other myositis, right upper arm -M60822 Other myositis, left upper arm -M60829 Other myositis, unspecified upper arm -M60831 Other myositis, right forearm -M60832 Other myositis, left forearm -M60839 Other myositis, unspecified forearm -M60841 Other myositis, right hand -M60842 Other myositis, left hand -M60849 Other myositis, unspecified hand -M60851 Other myositis, right thigh -M60852 Other myositis, left thigh -M60859 Other myositis, unspecified thigh -M60861 Other myositis, right lower leg -M60862 Other myositis, left lower leg -M60869 Other myositis, unspecified lower leg -M60871 Other myositis, right ankle and foot -M60872 Other myositis, left ankle and foot -M60879 Other myositis, unspecified ankle and foot -M6088 Other myositis, other site -M6089 Other myositis, multiple sites -M609 Myositis, unspecified -M6100 Myositis ossificans traumatica, unspecified site -M61011 Myositis ossificans traumatica, right shoulder -M61012 Myositis ossificans traumatica, left shoulder -M61019 Myositis ossificans traumatica, unspecified shoulder -M61021 Myositis ossificans traumatica, right upper arm -M61022 Myositis ossificans traumatica, left upper arm -M61029 Myositis ossificans traumatica, unspecified upper arm -M61031 Myositis ossificans traumatica, right forearm -M61032 Myositis ossificans traumatica, left forearm -M61039 Myositis ossificans traumatica, unspecified forearm -M61041 Myositis ossificans traumatica, right hand -M61042 Myositis ossificans traumatica, left hand -M61049 Myositis ossificans traumatica, unspecified hand -M61051 Myositis ossificans traumatica, right thigh -M61052 Myositis ossificans traumatica, left thigh -M61059 Myositis ossificans traumatica, unspecified thigh -M61061 Myositis ossificans traumatica, right lower leg -M61062 Myositis ossificans traumatica, left lower leg -M61069 Myositis ossificans traumatica, unspecified lower leg -M61071 Myositis ossificans traumatica, right ankle and foot -M61072 Myositis ossificans traumatica, left ankle and foot -M61079 Myositis ossificans traumatica, unspecified ankle and foot -M6108 Myositis ossificans traumatica, other site -M6109 Myositis ossificans traumatica, multiple sites -M6110 Myositis ossificans progressiva, unspecified site -M61111 Myositis ossificans progressiva, right shoulder -M61112 Myositis ossificans progressiva, left shoulder -M61119 Myositis ossificans progressiva, unspecified shoulder -M61121 Myositis ossificans progressiva, right upper arm -M61122 Myositis ossificans progressiva, left upper arm -M61129 Myositis ossificans progressiva, unspecified arm -M61131 Myositis ossificans progressiva, right forearm -M61132 Myositis ossificans progressiva, left forearm -M61139 Myositis ossificans progressiva, unspecified forearm -M61141 Myositis ossificans progressiva, right hand -M61142 Myositis ossificans progressiva, left hand -M61143 Myositis ossificans progressiva, unspecified hand -M61144 Myositis ossificans progressiva, right finger(s) -M61145 Myositis ossificans progressiva, left finger(s) -M61146 Myositis ossificans progressiva, unspecified finger(s) -M61151 Myositis ossificans progressiva, right thigh -M61152 Myositis ossificans progressiva, left thigh -M61159 Myositis ossificans progressiva, unspecified thigh -M61161 Myositis ossificans progressiva, right lower leg -M61162 Myositis ossificans progressiva, left lower leg -M61169 Myositis ossificans progressiva, unspecified lower leg -M61171 Myositis ossificans progressiva, right ankle -M61172 Myositis ossificans progressiva, left ankle -M61173 Myositis ossificans progressiva, unspecified ankle -M61174 Myositis ossificans progressiva, right foot -M61175 Myositis ossificans progressiva, left foot -M61176 Myositis ossificans progressiva, unspecified foot -M61177 Myositis ossificans progressiva, right toe(s) -M61178 Myositis ossificans progressiva, left toe(s) -M61179 Myositis ossificans progressiva, unspecified toe(s) -M6118 Myositis ossificans progressiva, other site -M6119 Myositis ossificans progressiva, multiple sites -M6120 Paralytic calcification and ossification of muscle, unspecified site -M61211 Paralytic calcification and ossification of muscle, right shoulder -M61212 Paralytic calcification and ossification of muscle, left shoulder -M61219 Paralytic calcification and ossification of muscle, unspecified shoulder -M61221 Paralytic calcification and ossification of muscle, right upper arm -M61222 Paralytic calcification and ossification of muscle, left upper arm -M61229 Paralytic calcification and ossification of muscle, unspecified upper arm -M61231 Paralytic calcification and ossification of muscle, right forearm -M61232 Paralytic calcification and ossification of muscle, left forearm -M61239 Paralytic calcification and ossification of muscle, unspecified forearm -M61241 Paralytic calcification and ossification of muscle, right hand -M61242 Paralytic calcification and ossification of muscle, left hand -M61249 Paralytic calcification and ossification of muscle, unspecified hand -M61251 Paralytic calcification and ossification of muscle, right thigh -M61252 Paralytic calcification and ossification of muscle, left thigh -M61259 Paralytic calcification and ossification of muscle, unspecified thigh -M61261 Paralytic calcification and ossification of muscle, right lower leg -M61262 Paralytic calcification and ossification of muscle, left lower leg -M61269 Paralytic calcification and ossification of muscle, unspecified lower leg -M61271 Paralytic calcification and ossification of muscle, right ankle and foot -M61272 Paralytic calcification and ossification of muscle, left ankle and foot -M61279 Paralytic calcification and ossification of muscle, unspecified ankle and foot -M6128 Paralytic calcification and ossification of muscle, other site -M6129 Paralytic calcification and ossification of muscle, multiple sites -M6130 Calcification and ossification of muscles associated with burns, unspecified site -M61311 Calcification and ossification of muscles associated with burns, right shoulder -M61312 Calcification and ossification of muscles associated with burns, left shoulder -M61319 Calcification and ossification of muscles associated with burns, unspecified shoulder -M61321 Calcification and ossification of muscles associated with burns, right upper arm -M61322 Calcification and ossification of muscles associated with burns, left upper arm -M61329 Calcification and ossification of muscles associated with burns, unspecified upper arm -M61331 Calcification and ossification of muscles associated with burns, right forearm -M61332 Calcification and ossification of muscles associated with burns, left forearm -M61339 Calcification and ossification of muscles associated with burns, unspecified forearm -M61341 Calcification and ossification of muscles associated with burns, right hand -M61342 Calcification and ossification of muscles associated with burns, left hand -M61349 Calcification and ossification of muscles associated with burns, unspecified hand -M61351 Calcification and ossification of muscles associated with burns, right thigh -M61352 Calcification and ossification of muscles associated with burns, left thigh -M61359 Calcification and ossification of muscles associated with burns, unspecified thigh -M61361 Calcification and ossification of muscles associated with burns, right lower leg -M61362 Calcification and ossification of muscles associated with burns, left lower leg -M61369 Calcification and ossification of muscles associated with burns, unspecified lower leg -M61371 Calcification and ossification of muscles associated with burns, right ankle and foot -M61372 Calcification and ossification of muscles associated with burns, left ankle and foot -M61379 Calcification and ossification of muscles associated with burns, unspecified ankle and foot -M6138 Calcification and ossification of muscles associated with burns, other site -M6139 Calcification and ossification of muscles associated with burns, multiple sites -M6140 Other calcification of muscle, unspecified site -M61411 Other calcification of muscle, right shoulder -M61412 Other calcification of muscle, left shoulder -M61419 Other calcification of muscle, unspecified shoulder -M61421 Other calcification of muscle, right upper arm -M61422 Other calcification of muscle, left upper arm -M61429 Other calcification of muscle, unspecified upper arm -M61431 Other calcification of muscle, right forearm -M61432 Other calcification of muscle, left forearm -M61439 Other calcification of muscle, unspecified forearm -M61441 Other calcification of muscle, right hand -M61442 Other calcification of muscle, left hand -M61449 Other calcification of muscle, unspecified hand -M61451 Other calcification of muscle, right thigh -M61452 Other calcification of muscle, left thigh -M61459 Other calcification of muscle, unspecified thigh -M61461 Other calcification of muscle, right lower leg -M61462 Other calcification of muscle, left lower leg -M61469 Other calcification of muscle, unspecified lower leg -M61471 Other calcification of muscle, right ankle and foot -M61472 Other calcification of muscle, left ankle and foot -M61479 Other calcification of muscle, unspecified ankle and foot -M6148 Other calcification of muscle, other site -M6149 Other calcification of muscle, multiple sites -M6150 Other ossification of muscle, unspecified site -M61511 Other ossification of muscle, right shoulder -M61512 Other ossification of muscle, left shoulder -M61519 Other ossification of muscle, unspecified shoulder -M61521 Other ossification of muscle, right upper arm -M61522 Other ossification of muscle, left upper arm -M61529 Other ossification of muscle, unspecified upper arm -M61531 Other ossification of muscle, right forearm -M61532 Other ossification of muscle, left forearm -M61539 Other ossification of muscle, unspecified forearm -M61541 Other ossification of muscle, right hand -M61542 Other ossification of muscle, left hand -M61549 Other ossification of muscle, unspecified hand -M61551 Other ossification of muscle, right thigh -M61552 Other ossification of muscle, left thigh -M61559 Other ossification of muscle, unspecified thigh -M61561 Other ossification of muscle, right lower leg -M61562 Other ossification of muscle, left lower leg -M61569 Other ossification of muscle, unspecified lower leg -M61571 Other ossification of muscle, right ankle and foot -M61572 Other ossification of muscle, left ankle and foot -M61579 Other ossification of muscle, unspecified ankle and foot -M6158 Other ossification of muscle, other site -M6159 Other ossification of muscle, multiple sites -M619 Calcification and ossification of muscle, unspecified -M6200 Separation of muscle (nontraumatic), unspecified site -M62011 Separation of muscle (nontraumatic), right shoulder -M62012 Separation of muscle (nontraumatic), left shoulder -M62019 Separation of muscle (nontraumatic), unspecified shoulder -M62021 Separation of muscle (nontraumatic), right upper arm -M62022 Separation of muscle (nontraumatic), left upper arm -M62029 Separation of muscle (nontraumatic), unspecified upper arm -M62031 Separation of muscle (nontraumatic), right forearm -M62032 Separation of muscle (nontraumatic), left forearm -M62039 Separation of muscle (nontraumatic), unspecified forearm -M62041 Separation of muscle (nontraumatic), right hand -M62042 Separation of muscle (nontraumatic), left hand -M62049 Separation of muscle (nontraumatic), unspecified hand -M62051 Separation of muscle (nontraumatic), right thigh -M62052 Separation of muscle (nontraumatic), left thigh -M62059 Separation of muscle (nontraumatic), unspecified thigh -M62061 Separation of muscle (nontraumatic), right lower leg -M62062 Separation of muscle (nontraumatic), left lower leg -M62069 Separation of muscle (nontraumatic), unspecified lower leg -M62071 Separation of muscle (nontraumatic), right ankle and foot -M62072 Separation of muscle (nontraumatic), left ankle and foot -M62079 Separation of muscle (nontraumatic), unspecified ankle and foot -M6208 Separation of muscle (nontraumatic), other site -M6210 Other rupture of muscle (nontraumatic), unspecified site -M62111 Other rupture of muscle (nontraumatic), right shoulder -M62112 Other rupture of muscle (nontraumatic), left shoulder -M62119 Other rupture of muscle (nontraumatic), unspecified shoulder -M62121 Other rupture of muscle (nontraumatic), right upper arm -M62122 Other rupture of muscle (nontraumatic), left upper arm -M62129 Other rupture of muscle (nontraumatic), unspecified upper arm -M62131 Other rupture of muscle (nontraumatic), right forearm -M62132 Other rupture of muscle (nontraumatic), left forearm -M62139 Other rupture of muscle (nontraumatic), unspecified forearm -M62141 Other rupture of muscle (nontraumatic), right hand -M62142 Other rupture of muscle (nontraumatic), left hand -M62149 Other rupture of muscle (nontraumatic), unspecified hand -M62151 Other rupture of muscle (nontraumatic), right thigh -M62152 Other rupture of muscle (nontraumatic), left thigh -M62159 Other rupture of muscle (nontraumatic), unspecified thigh -M62161 Other rupture of muscle (nontraumatic), right lower leg -M62162 Other rupture of muscle (nontraumatic), left lower leg -M62169 Other rupture of muscle (nontraumatic), unspecified lower leg -M62171 Other rupture of muscle (nontraumatic), right ankle and foot -M62172 Other rupture of muscle (nontraumatic), left ankle and foot -M62179 Other rupture of muscle (nontraumatic), unspecified ankle and foot -M6218 Other rupture of muscle (nontraumatic), other site -M6220 Nontraumatic ischemic infarction of muscle, unspecified site -M62211 Nontraumatic ischemic infarction of muscle, right shoulder -M62212 Nontraumatic ischemic infarction of muscle, left shoulder -M62219 Nontraumatic ischemic infarction of muscle, unspecified shoulder -M62221 Nontraumatic ischemic infarction of muscle, right upper arm -M62222 Nontraumatic ischemic infarction of muscle, left upper arm -M62229 Nontraumatic ischemic infarction of muscle, unspecified upper arm -M62231 Nontraumatic ischemic infarction of muscle, right forearm -M62232 Nontraumatic ischemic infarction of muscle, left forearm -M62239 Nontraumatic ischemic infarction of muscle, unspecified forearm -M62241 Nontraumatic ischemic infarction of muscle, right hand -M62242 Nontraumatic ischemic infarction of muscle, left hand -M62249 Nontraumatic ischemic infarction of muscle, unspecified hand -M62251 Nontraumatic ischemic infarction of muscle, right thigh -M62252 Nontraumatic ischemic infarction of muscle, left thigh -M62259 Nontraumatic ischemic infarction of muscle, unspecified thigh -M62261 Nontraumatic ischemic infarction of muscle, right lower leg -M62262 Nontraumatic ischemic infarction of muscle, left lower leg -M62269 Nontraumatic ischemic infarction of muscle, unspecified lower leg -M62271 Nontraumatic ischemic infarction of muscle, right ankle and foot -M62272 Nontraumatic ischemic infarction of muscle, left ankle and foot -M62279 Nontraumatic ischemic infarction of muscle, unspecified ankle and foot -M6228 Nontraumatic ischemic infarction of muscle, other site -M623 Immobility syndrome (paraplegic) -M6240 Contracture of muscle, unspecified site -M62411 Contracture of muscle, right shoulder -M62412 Contracture of muscle, left shoulder -M62419 Contracture of muscle, unspecified shoulder -M62421 Contracture of muscle, right upper arm -M62422 Contracture of muscle, left upper arm -M62429 Contracture of muscle, unspecified upper arm -M62431 Contracture of muscle, right forearm -M62432 Contracture of muscle, left forearm -M62439 Contracture of muscle, unspecified forearm -M62441 Contracture of muscle, right hand -M62442 Contracture of muscle, left hand -M62449 Contracture of muscle, unspecified hand -M62451 Contracture of muscle, right thigh -M62452 Contracture of muscle, left thigh -M62459 Contracture of muscle, unspecified thigh -M62461 Contracture of muscle, right lower leg -M62462 Contracture of muscle, left lower leg -M62469 Contracture of muscle, unspecified lower leg -M62471 Contracture of muscle, right ankle and foot -M62472 Contracture of muscle, left ankle and foot -M62479 Contracture of muscle, unspecified ankle and foot -M6248 Contracture of muscle, other site -M6249 Contracture of muscle, multiple sites -M6250 Muscle wasting and atrophy, not elsewhere classified, unspecified site -M62511 Muscle wasting and atrophy, not elsewhere classified, right shoulder -M62512 Muscle wasting and atrophy, not elsewhere classified, left shoulder -M62519 Muscle wasting and atrophy, not elsewhere classified, unspecified shoulder -M62521 Muscle wasting and atrophy, not elsewhere classified, right upper arm -M62522 Muscle wasting and atrophy, not elsewhere classified, left upper arm -M62529 Muscle wasting and atrophy, not elsewhere classified, unspecified upper arm -M62531 Muscle wasting and atrophy, not elsewhere classified, right forearm -M62532 Muscle wasting and atrophy, not elsewhere classified, left forearm -M62539 Muscle wasting and atrophy, not elsewhere classified, unspecified forearm -M62541 Muscle wasting and atrophy, not elsewhere classified, right hand -M62542 Muscle wasting and atrophy, not elsewhere classified, left hand -M62549 Muscle wasting and atrophy, not elsewhere classified, unspecified hand -M62551 Muscle wasting and atrophy, not elsewhere classified, right thigh -M62552 Muscle wasting and atrophy, not elsewhere classified, left thigh -M62559 Muscle wasting and atrophy, not elsewhere classified, unspecified thigh -M62561 Muscle wasting and atrophy, not elsewhere classified, right lower leg -M62562 Muscle wasting and atrophy, not elsewhere classified, left lower leg -M62569 Muscle wasting and atrophy, not elsewhere classified, unspecified lower leg -M62571 Muscle wasting and atrophy, not elsewhere classified, right ankle and foot -M62572 Muscle wasting and atrophy, not elsewhere classified, left ankle and foot -M62579 Muscle wasting and atrophy, not elsewhere classified, unspecified ankle and foot -M6258 Muscle wasting and atrophy, not elsewhere classified, other site -M6259 Muscle wasting and atrophy, not elsewhere classified, multiple sites -M6281 Muscle weakness (generalized) -M6282 Rhabdomyolysis -M62830 Muscle spasm of back -M62831 Muscle spasm of calf -M62838 Other muscle spasm -M6284 Sarcopenia -M6289 Other specified disorders of muscle -M629 Disorder of muscle, unspecified -M6380 Disorders of muscle in diseases classified elsewhere, unspecified site -M63811 Disorders of muscle in diseases classified elsewhere, right shoulder -M63812 Disorders of muscle in diseases classified elsewhere, left shoulder -M63819 Disorders of muscle in diseases classified elsewhere, unspecified shoulder -M63821 Disorders of muscle in diseases classified elsewhere, right upper arm -M63822 Disorders of muscle in diseases classified elsewhere, left upper arm -M63829 Disorders of muscle in diseases classified elsewhere, unspecified upper arm -M63831 Disorders of muscle in diseases classified elsewhere, right forearm -M63832 Disorders of muscle in diseases classified elsewhere, left forearm -M63839 Disorders of muscle in diseases classified elsewhere, unspecified forearm -M63841 Disorders of muscle in diseases classified elsewhere, right hand -M63842 Disorders of muscle in diseases classified elsewhere, left hand -M63849 Disorders of muscle in diseases classified elsewhere, unspecified hand -M63851 Disorders of muscle in diseases classified elsewhere, right thigh -M63852 Disorders of muscle in diseases classified elsewhere, left thigh -M63859 Disorders of muscle in diseases classified elsewhere, unspecified thigh -M63861 Disorders of muscle in diseases classified elsewhere, right lower leg -M63862 Disorders of muscle in diseases classified elsewhere, left lower leg -M63869 Disorders of muscle in diseases classified elsewhere, unspecified lower leg -M63871 Disorders of muscle in diseases classified elsewhere, right ankle and foot -M63872 Disorders of muscle in diseases classified elsewhere, left ankle and foot -M63879 Disorders of muscle in diseases classified elsewhere, unspecified ankle and foot -M6388 Disorders of muscle in diseases classified elsewhere, other site -M6389 Disorders of muscle in diseases classified elsewhere, multiple sites -M6500 Abscess of tendon sheath, unspecified site -M65011 Abscess of tendon sheath, right shoulder -M65012 Abscess of tendon sheath, left shoulder -M65019 Abscess of tendon sheath, unspecified shoulder -M65021 Abscess of tendon sheath, right upper arm -M65022 Abscess of tendon sheath, left upper arm -M65029 Abscess of tendon sheath, unspecified upper arm -M65031 Abscess of tendon sheath, right forearm -M65032 Abscess of tendon sheath, left forearm -M65039 Abscess of tendon sheath, unspecified forearm -M65041 Abscess of tendon sheath, right hand -M65042 Abscess of tendon sheath, left hand -M65049 Abscess of tendon sheath, unspecified hand -M65051 Abscess of tendon sheath, right thigh -M65052 Abscess of tendon sheath, left thigh -M65059 Abscess of tendon sheath, unspecified thigh -M65061 Abscess of tendon sheath, right lower leg -M65062 Abscess of tendon sheath, left lower leg -M65069 Abscess of tendon sheath, unspecified lower leg -M65071 Abscess of tendon sheath, right ankle and foot -M65072 Abscess of tendon sheath, left ankle and foot -M65079 Abscess of tendon sheath, unspecified ankle and foot -M6508 Abscess of tendon sheath, other site -M6510 Other infective (teno)synovitis, unspecified site -M65111 Other infective (teno)synovitis, right shoulder -M65112 Other infective (teno)synovitis, left shoulder -M65119 Other infective (teno)synovitis, unspecified shoulder -M65121 Other infective (teno)synovitis, right elbow -M65122 Other infective (teno)synovitis, left elbow -M65129 Other infective (teno)synovitis, unspecified elbow -M65131 Other infective (teno)synovitis, right wrist -M65132 Other infective (teno)synovitis, left wrist -M65139 Other infective (teno)synovitis, unspecified wrist -M65141 Other infective (teno)synovitis, right hand -M65142 Other infective (teno)synovitis, left hand -M65149 Other infective (teno)synovitis, unspecified hand -M65151 Other infective (teno)synovitis, right hip -M65152 Other infective (teno)synovitis, left hip -M65159 Other infective (teno)synovitis, unspecified hip -M65161 Other infective (teno)synovitis, right knee -M65162 Other infective (teno)synovitis, left knee -M65169 Other infective (teno)synovitis, unspecified knee -M65171 Other infective (teno)synovitis, right ankle and foot -M65172 Other infective (teno)synovitis, left ankle and foot -M65179 Other infective (teno)synovitis, unspecified ankle and foot -M6518 Other infective (teno)synovitis, other site -M6519 Other infective (teno)synovitis, multiple sites -M6520 Calcific tendinitis, unspecified site -M65221 Calcific tendinitis, right upper arm -M65222 Calcific tendinitis, left upper arm -M65229 Calcific tendinitis, unspecified upper arm -M65231 Calcific tendinitis, right forearm -M65232 Calcific tendinitis, left forearm -M65239 Calcific tendinitis, unspecified forearm -M65241 Calcific tendinitis, right hand -M65242 Calcific tendinitis, left hand -M65249 Calcific tendinitis, unspecified hand -M65251 Calcific tendinitis, right thigh -M65252 Calcific tendinitis, left thigh -M65259 Calcific tendinitis, unspecified thigh -M65261 Calcific tendinitis, right lower leg -M65262 Calcific tendinitis, left lower leg -M65269 Calcific tendinitis, unspecified lower leg -M65271 Calcific tendinitis, right ankle and foot -M65272 Calcific tendinitis, left ankle and foot -M65279 Calcific tendinitis, unspecified ankle and foot -M6528 Calcific tendinitis, other site -M6529 Calcific tendinitis, multiple sites -M6530 Trigger finger, unspecified finger -M65311 Trigger thumb, right thumb -M65312 Trigger thumb, left thumb -M65319 Trigger thumb, unspecified thumb -M65321 Trigger finger, right index finger -M65322 Trigger finger, left index finger -M65329 Trigger finger, unspecified index finger -M65331 Trigger finger, right middle finger -M65332 Trigger finger, left middle finger -M65339 Trigger finger, unspecified middle finger -M65341 Trigger finger, right ring finger -M65342 Trigger finger, left ring finger -M65349 Trigger finger, unspecified ring finger -M65351 Trigger finger, right little finger -M65352 Trigger finger, left little finger -M65359 Trigger finger, unspecified little finger -M654 Radial styloid tenosynovitis [de Quervain] -M6580 Other synovitis and tenosynovitis, unspecified site -M65811 Other synovitis and tenosynovitis, right shoulder -M65812 Other synovitis and tenosynovitis, left shoulder -M65819 Other synovitis and tenosynovitis, unspecified shoulder -M65821 Other synovitis and tenosynovitis, right upper arm -M65822 Other synovitis and tenosynovitis, left upper arm -M65829 Other synovitis and tenosynovitis, unspecified upper arm -M65831 Other synovitis and tenosynovitis, right forearm -M65832 Other synovitis and tenosynovitis, left forearm -M65839 Other synovitis and tenosynovitis, unspecified forearm -M65841 Other synovitis and tenosynovitis, right hand -M65842 Other synovitis and tenosynovitis, left hand -M65849 Other synovitis and tenosynovitis, unspecified hand -M65851 Other synovitis and tenosynovitis, right thigh -M65852 Other synovitis and tenosynovitis, left thigh -M65859 Other synovitis and tenosynovitis, unspecified thigh -M65861 Other synovitis and tenosynovitis, right lower leg -M65862 Other synovitis and tenosynovitis, left lower leg -M65869 Other synovitis and tenosynovitis, unspecified lower leg -M65871 Other synovitis and tenosynovitis, right ankle and foot -M65872 Other synovitis and tenosynovitis, left ankle and foot -M65879 Other synovitis and tenosynovitis, unspecified ankle and foot -M6588 Other synovitis and tenosynovitis, other site -M6589 Other synovitis and tenosynovitis, multiple sites -M659 Synovitis and tenosynovitis, unspecified -M660 Rupture of popliteal cyst -M6610 Rupture of synovium, unspecified joint -M66111 Rupture of synovium, right shoulder -M66112 Rupture of synovium, left shoulder -M66119 Rupture of synovium, unspecified shoulder -M66121 Rupture of synovium, right elbow -M66122 Rupture of synovium, left elbow -M66129 Rupture of synovium, unspecified elbow -M66131 Rupture of synovium, right wrist -M66132 Rupture of synovium, left wrist -M66139 Rupture of synovium, unspecified wrist -M66141 Rupture of synovium, right hand -M66142 Rupture of synovium, left hand -M66143 Rupture of synovium, unspecified hand -M66144 Rupture of synovium, right finger(s) -M66145 Rupture of synovium, left finger(s) -M66146 Rupture of synovium, unspecified finger(s) -M66151 Rupture of synovium, right hip -M66152 Rupture of synovium, left hip -M66159 Rupture of synovium, unspecified hip -M66171 Rupture of synovium, right ankle -M66172 Rupture of synovium, left ankle -M66173 Rupture of synovium, unspecified ankle -M66174 Rupture of synovium, right foot -M66175 Rupture of synovium, left foot -M66176 Rupture of synovium, unspecified foot -M66177 Rupture of synovium, right toe(s) -M66178 Rupture of synovium, left toe(s) -M66179 Rupture of synovium, unspecified toe(s) -M6618 Rupture of synovium, other site -M6620 Spontaneous rupture of extensor tendons, unspecified site -M66211 Spontaneous rupture of extensor tendons, right shoulder -M66212 Spontaneous rupture of extensor tendons, left shoulder -M66219 Spontaneous rupture of extensor tendons, unspecified shoulder -M66221 Spontaneous rupture of extensor tendons, right upper arm -M66222 Spontaneous rupture of extensor tendons, left upper arm -M66229 Spontaneous rupture of extensor tendons, unspecified upper arm -M66231 Spontaneous rupture of extensor tendons, right forearm -M66232 Spontaneous rupture of extensor tendons, left forearm -M66239 Spontaneous rupture of extensor tendons, unspecified forearm -M66241 Spontaneous rupture of extensor tendons, right hand -M66242 Spontaneous rupture of extensor tendons, left hand -M66249 Spontaneous rupture of extensor tendons, unspecified hand -M66251 Spontaneous rupture of extensor tendons, right thigh -M66252 Spontaneous rupture of extensor tendons, left thigh -M66259 Spontaneous rupture of extensor tendons, unspecified thigh -M66261 Spontaneous rupture of extensor tendons, right lower leg -M66262 Spontaneous rupture of extensor tendons, left lower leg -M66269 Spontaneous rupture of extensor tendons, unspecified lower leg -M66271 Spontaneous rupture of extensor tendons, right ankle and foot -M66272 Spontaneous rupture of extensor tendons, left ankle and foot -M66279 Spontaneous rupture of extensor tendons, unspecified ankle and foot -M6628 Spontaneous rupture of extensor tendons, other site -M6629 Spontaneous rupture of extensor tendons, multiple sites -M6630 Spontaneous rupture of flexor tendons, unspecified site -M66311 Spontaneous rupture of flexor tendons, right shoulder -M66312 Spontaneous rupture of flexor tendons, left shoulder -M66319 Spontaneous rupture of flexor tendons, unspecified shoulder -M66321 Spontaneous rupture of flexor tendons, right upper arm -M66322 Spontaneous rupture of flexor tendons, left upper arm -M66329 Spontaneous rupture of flexor tendons, unspecified upper arm -M66331 Spontaneous rupture of flexor tendons, right forearm -M66332 Spontaneous rupture of flexor tendons, left forearm -M66339 Spontaneous rupture of flexor tendons, unspecified forearm -M66341 Spontaneous rupture of flexor tendons, right hand -M66342 Spontaneous rupture of flexor tendons, left hand -M66349 Spontaneous rupture of flexor tendons, unspecified hand -M66351 Spontaneous rupture of flexor tendons, right thigh -M66352 Spontaneous rupture of flexor tendons, left thigh -M66359 Spontaneous rupture of flexor tendons, unspecified thigh -M66361 Spontaneous rupture of flexor tendons, right lower leg -M66362 Spontaneous rupture of flexor tendons, left lower leg -M66369 Spontaneous rupture of flexor tendons, unspecified lower leg -M66371 Spontaneous rupture of flexor tendons, right ankle and foot -M66372 Spontaneous rupture of flexor tendons, left ankle and foot -M66379 Spontaneous rupture of flexor tendons, unspecified ankle and foot -M6638 Spontaneous rupture of flexor tendons, other site -M6639 Spontaneous rupture of flexor tendons, multiple sites -M6680 Spontaneous rupture of other tendons, unspecified site -M66811 Spontaneous rupture of other tendons, right shoulder -M66812 Spontaneous rupture of other tendons, left shoulder -M66819 Spontaneous rupture of other tendons, unspecified shoulder -M66821 Spontaneous rupture of other tendons, right upper arm -M66822 Spontaneous rupture of other tendons, left upper arm -M66829 Spontaneous rupture of other tendons, unspecified upper arm -M66831 Spontaneous rupture of other tendons, right forearm -M66832 Spontaneous rupture of other tendons, left forearm -M66839 Spontaneous rupture of other tendons, unspecified forearm -M66841 Spontaneous rupture of other tendons, right hand -M66842 Spontaneous rupture of other tendons, left hand -M66849 Spontaneous rupture of other tendons, unspecified hand -M66851 Spontaneous rupture of other tendons, right thigh -M66852 Spontaneous rupture of other tendons, left thigh -M66859 Spontaneous rupture of other tendons, unspecified thigh -M66861 Spontaneous rupture of other tendons, right lower leg -M66862 Spontaneous rupture of other tendons, left lower leg -M66869 Spontaneous rupture of other tendons, unspecified lower leg -M66871 Spontaneous rupture of other tendons, right ankle and foot -M66872 Spontaneous rupture of other tendons, left ankle and foot -M66879 Spontaneous rupture of other tendons, unspecified ankle and foot -M6688 Spontaneous rupture of other tendons, other -M6689 Spontaneous rupture of other tendons, multiple sites -M669 Spontaneous rupture of unspecified tendon -M6700 Short Achilles tendon (acquired), unspecified ankle -M6701 Short Achilles tendon (acquired), right ankle -M6702 Short Achilles tendon (acquired), left ankle -M6720 Synovial hypertrophy, not elsewhere classified, unspecified site -M67211 Synovial hypertrophy, not elsewhere classified, right shoulder -M67212 Synovial hypertrophy, not elsewhere classified, left shoulder -M67219 Synovial hypertrophy, not elsewhere classified, unspecified shoulder -M67221 Synovial hypertrophy, not elsewhere classified, right upper arm -M67222 Synovial hypertrophy, not elsewhere classified, left upper arm -M67229 Synovial hypertrophy, not elsewhere classified, unspecified upper arm -M67231 Synovial hypertrophy, not elsewhere classified, right forearm -M67232 Synovial hypertrophy, not elsewhere classified, left forearm -M67239 Synovial hypertrophy, not elsewhere classified, unspecified forearm -M67241 Synovial hypertrophy, not elsewhere classified, right hand -M67242 Synovial hypertrophy, not elsewhere classified, left hand -M67249 Synovial hypertrophy, not elsewhere classified, unspecified hand -M67251 Synovial hypertrophy, not elsewhere classified, right thigh -M67252 Synovial hypertrophy, not elsewhere classified, left thigh -M67259 Synovial hypertrophy, not elsewhere classified, unspecified thigh -M67261 Synovial hypertrophy, not elsewhere classified, right lower leg -M67262 Synovial hypertrophy, not elsewhere classified, left lower leg -M67269 Synovial hypertrophy, not elsewhere classified, unspecified lower leg -M67271 Synovial hypertrophy, not elsewhere classified, right ankle and foot -M67272 Synovial hypertrophy, not elsewhere classified, left ankle and foot -M67279 Synovial hypertrophy, not elsewhere classified, unspecified ankle and foot -M6728 Synovial hypertrophy, not elsewhere classified, other site -M6729 Synovial hypertrophy, not elsewhere classified, multiple sites -M6730 Transient synovitis, unspecified site -M67311 Transient synovitis, right shoulder -M67312 Transient synovitis, left shoulder -M67319 Transient synovitis, unspecified shoulder -M67321 Transient synovitis, right elbow -M67322 Transient synovitis, left elbow -M67329 Transient synovitis, unspecified elbow -M67331 Transient synovitis, right wrist -M67332 Transient synovitis, left wrist -M67339 Transient synovitis, unspecified wrist -M67341 Transient synovitis, right hand -M67342 Transient synovitis, left hand -M67349 Transient synovitis, unspecified hand -M67351 Transient synovitis, right hip -M67352 Transient synovitis, left hip -M67359 Transient synovitis, unspecified hip -M67361 Transient synovitis, right knee -M67362 Transient synovitis, left knee -M67369 Transient synovitis, unspecified knee -M67371 Transient synovitis, right ankle and foot -M67372 Transient synovitis, left ankle and foot -M67379 Transient synovitis, unspecified ankle and foot -M6738 Transient synovitis, other site -M6739 Transient synovitis, multiple sites -M6740 Ganglion, unspecified site -M67411 Ganglion, right shoulder -M67412 Ganglion, left shoulder -M67419 Ganglion, unspecified shoulder -M67421 Ganglion, right elbow -M67422 Ganglion, left elbow -M67429 Ganglion, unspecified elbow -M67431 Ganglion, right wrist -M67432 Ganglion, left wrist -M67439 Ganglion, unspecified wrist -M67441 Ganglion, right hand -M67442 Ganglion, left hand -M67449 Ganglion, unspecified hand -M67451 Ganglion, right hip -M67452 Ganglion, left hip -M67459 Ganglion, unspecified hip -M67461 Ganglion, right knee -M67462 Ganglion, left knee -M67469 Ganglion, unspecified knee -M67471 Ganglion, right ankle and foot -M67472 Ganglion, left ankle and foot -M67479 Ganglion, unspecified ankle and foot -M6748 Ganglion, other site -M6749 Ganglion, multiple sites -M6750 Plica syndrome, unspecified knee -M6751 Plica syndrome, right knee -M6752 Plica syndrome, left knee -M6780 Other specified disorders of synovium and tendon, unspecified site -M67811 Other specified disorders of synovium, right shoulder -M67812 Other specified disorders of synovium, left shoulder -M67813 Other specified disorders of tendon, right shoulder -M67814 Other specified disorders of tendon, left shoulder -M67819 Other specified disorders of synovium and tendon, unspecified shoulder -M67821 Other specified disorders of synovium, right elbow -M67822 Other specified disorders of synovium, left elbow -M67823 Other specified disorders of tendon, right elbow -M67824 Other specified disorders of tendon, left elbow -M67829 Other specified disorders of synovium and tendon, unspecified elbow -M67831 Other specified disorders of synovium, right wrist -M67832 Other specified disorders of synovium, left wrist -M67833 Other specified disorders of tendon, right wrist -M67834 Other specified disorders of tendon, left wrist -M67839 Other specified disorders of synovium and tendon, unspecified forearm -M67841 Other specified disorders of synovium, right hand -M67842 Other specified disorders of synovium, left hand -M67843 Other specified disorders of tendon, right hand -M67844 Other specified disorders of tendon, left hand -M67849 Other specified disorders of synovium and tendon, unspecified hand -M67851 Other specified disorders of synovium, right hip -M67852 Other specified disorders of synovium, left hip -M67853 Other specified disorders of tendon, right hip -M67854 Other specified disorders of tendon, left hip -M67859 Other specified disorders of synovium and tendon, unspecified hip -M67861 Other specified disorders of synovium, right knee -M67862 Other specified disorders of synovium, left knee -M67863 Other specified disorders of tendon, right knee -M67864 Other specified disorders of tendon, left knee -M67869 Other specified disorders of synovium and tendon, unspecified knee -M67871 Other specified disorders of synovium, right ankle and foot -M67872 Other specified disorders of synovium, left ankle and foot -M67873 Other specified disorders of tendon, right ankle and foot -M67874 Other specified disorders of tendon, left ankle and foot -M67879 Other specified disorders of synovium and tendon, unspecified ankle and foot -M6788 Other specified disorders of synovium and tendon, other site -M6789 Other specified disorders of synovium and tendon, multiple sites -M6790 Unspecified disorder of synovium and tendon, unspecified site -M67911 Unspecified disorder of synovium and tendon, right shoulder -M67912 Unspecified disorder of synovium and tendon, left shoulder -M67919 Unspecified disorder of synovium and tendon, unspecified shoulder -M67921 Unspecified disorder of synovium and tendon, right upper arm -M67922 Unspecified disorder of synovium and tendon, left upper arm -M67929 Unspecified disorder of synovium and tendon, unspecified upper arm -M67931 Unspecified disorder of synovium and tendon, right forearm -M67932 Unspecified disorder of synovium and tendon, left forearm -M67939 Unspecified disorder of synovium and tendon, unspecified forearm -M67941 Unspecified disorder of synovium and tendon, right hand -M67942 Unspecified disorder of synovium and tendon, left hand -M67949 Unspecified disorder of synovium and tendon, unspecified hand -M67951 Unspecified disorder of synovium and tendon, right thigh -M67952 Unspecified disorder of synovium and tendon, left thigh -M67959 Unspecified disorder of synovium and tendon, unspecified thigh -M67961 Unspecified disorder of synovium and tendon, right lower leg -M67962 Unspecified disorder of synovium and tendon, left lower leg -M67969 Unspecified disorder of synovium and tendon, unspecified lower leg -M67971 Unspecified disorder of synovium and tendon, right ankle and foot -M67972 Unspecified disorder of synovium and tendon, left ankle and foot -M67979 Unspecified disorder of synovium and tendon, unspecified ankle and foot -M6798 Unspecified disorder of synovium and tendon, other site -M6799 Unspecified disorder of synovium and tendon, multiple sites -M70031 Crepitant synovitis (acute) (chronic), right wrist -M70032 Crepitant synovitis (acute) (chronic), left wrist -M70039 Crepitant synovitis (acute) (chronic), unspecified wrist -M70041 Crepitant synovitis (acute) (chronic), right hand -M70042 Crepitant synovitis (acute) (chronic), left hand -M70049 Crepitant synovitis (acute) (chronic), unspecified hand -M7010 Bursitis, unspecified hand -M7011 Bursitis, right hand -M7012 Bursitis, left hand -M7020 Olecranon bursitis, unspecified elbow -M7021 Olecranon bursitis, right elbow -M7022 Olecranon bursitis, left elbow -M7030 Other bursitis of elbow, unspecified elbow -M7031 Other bursitis of elbow, right elbow -M7032 Other bursitis of elbow, left elbow -M7040 Prepatellar bursitis, unspecified knee -M7041 Prepatellar bursitis, right knee -M7042 Prepatellar bursitis, left knee -M7050 Other bursitis of knee, unspecified knee -M7051 Other bursitis of knee, right knee -M7052 Other bursitis of knee, left knee -M7060 Trochanteric bursitis, unspecified hip -M7061 Trochanteric bursitis, right hip -M7062 Trochanteric bursitis, left hip -M7070 Other bursitis of hip, unspecified hip -M7071 Other bursitis of hip, right hip -M7072 Other bursitis of hip, left hip -M7080 Other soft tissue disorders related to use, overuse and pressure of unspecified site -M70811 Other soft tissue disorders related to use, overuse and pressure, right shoulder -M70812 Other soft tissue disorders related to use, overuse and pressure, left shoulder -M70819 Other soft tissue disorders related to use, overuse and pressure, unspecified shoulder -M70821 Other soft tissue disorders related to use, overuse and pressure, right upper arm -M70822 Other soft tissue disorders related to use, overuse and pressure, left upper arm -M70829 Other soft tissue disorders related to use, overuse and pressure, unspecified upper arms -M70831 Other soft tissue disorders related to use, overuse and pressure, right forearm -M70832 Other soft tissue disorders related to use, overuse and pressure, left forearm -M70839 Other soft tissue disorders related to use, overuse and pressure, unspecified forearm -M70841 Other soft tissue disorders related to use, overuse and pressure, right hand -M70842 Other soft tissue disorders related to use, overuse and pressure, left hand -M70849 Other soft tissue disorders related to use, overuse and pressure, unspecified hand -M70851 Other soft tissue disorders related to use, overuse and pressure, right thigh -M70852 Other soft tissue disorders related to use, overuse and pressure, left thigh -M70859 Other soft tissue disorders related to use, overuse and pressure, unspecified thigh -M70861 Other soft tissue disorders related to use, overuse and pressure, right lower leg -M70862 Other soft tissue disorders related to use, overuse and pressure, left lower leg -M70869 Other soft tissue disorders related to use, overuse and pressure, unspecified leg -M70871 Other soft tissue disorders related to use, overuse and pressure, right ankle and foot -M70872 Other soft tissue disorders related to use, overuse and pressure, left ankle and foot -M70879 Other soft tissue disorders related to use, overuse and pressure, unspecified ankle and foot -M7088 Other soft tissue disorders related to use, overuse and pressure other site -M7089 Other soft tissue disorders related to use, overuse and pressure multiple sites -M7090 Unspecified soft tissue disorder related to use, overuse and pressure of unspecified site -M70911 Unspecified soft tissue disorder related to use, overuse and pressure, right shoulder -M70912 Unspecified soft tissue disorder related to use, overuse and pressure, left shoulder -M70919 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified shoulder -M70921 Unspecified soft tissue disorder related to use, overuse and pressure, right upper arm -M70922 Unspecified soft tissue disorder related to use, overuse and pressure, left upper arm -M70929 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified upper arm -M70931 Unspecified soft tissue disorder related to use, overuse and pressure, right forearm -M70932 Unspecified soft tissue disorder related to use, overuse and pressure, left forearm -M70939 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified forearm -M70941 Unspecified soft tissue disorder related to use, overuse and pressure, right hand -M70942 Unspecified soft tissue disorder related to use, overuse and pressure, left hand -M70949 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified hand -M70951 Unspecified soft tissue disorder related to use, overuse and pressure, right thigh -M70952 Unspecified soft tissue disorder related to use, overuse and pressure, left thigh -M70959 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified thigh -M70961 Unspecified soft tissue disorder related to use, overuse and pressure, right lower leg -M70962 Unspecified soft tissue disorder related to use, overuse and pressure, left lower leg -M70969 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified lower leg -M70971 Unspecified soft tissue disorder related to use, overuse and pressure, right ankle and foot -M70972 Unspecified soft tissue disorder related to use, overuse and pressure, left ankle and foot -M70979 Unspecified soft tissue disorder related to use, overuse and pressure, unspecified ankle and foot -M7098 Unspecified soft tissue disorder related to use, overuse and pressure other -M7099 Unspecified soft tissue disorder related to use, overuse and pressure multiple sites -M7100 Abscess of bursa, unspecified site -M71011 Abscess of bursa, right shoulder -M71012 Abscess of bursa, left shoulder -M71019 Abscess of bursa, unspecified shoulder -M71021 Abscess of bursa, right elbow -M71022 Abscess of bursa, left elbow -M71029 Abscess of bursa, unspecified elbow -M71031 Abscess of bursa, right wrist -M71032 Abscess of bursa, left wrist -M71039 Abscess of bursa, unspecified wrist -M71041 Abscess of bursa, right hand -M71042 Abscess of bursa, left hand -M71049 Abscess of bursa, unspecified hand -M71051 Abscess of bursa, right hip -M71052 Abscess of bursa, left hip -M71059 Abscess of bursa, unspecified hip -M71061 Abscess of bursa, right knee -M71062 Abscess of bursa, left knee -M71069 Abscess of bursa, unspecified knee -M71071 Abscess of bursa, right ankle and foot -M71072 Abscess of bursa, left ankle and foot -M71079 Abscess of bursa, unspecified ankle and foot -M7108 Abscess of bursa, other site -M7109 Abscess of bursa, multiple sites -M7110 Other infective bursitis, unspecified site -M71111 Other infective bursitis, right shoulder -M71112 Other infective bursitis, left shoulder -M71119 Other infective bursitis, unspecified shoulder -M71121 Other infective bursitis, right elbow -M71122 Other infective bursitis, left elbow -M71129 Other infective bursitis, unspecified elbow -M71131 Other infective bursitis, right wrist -M71132 Other infective bursitis, left wrist -M71139 Other infective bursitis, unspecified wrist -M71141 Other infective bursitis, right hand -M71142 Other infective bursitis, left hand -M71149 Other infective bursitis, unspecified hand -M71151 Other infective bursitis, right hip -M71152 Other infective bursitis, left hip -M71159 Other infective bursitis, unspecified hip -M71161 Other infective bursitis, right knee -M71162 Other infective bursitis, left knee -M71169 Other infective bursitis, unspecified knee -M71171 Other infective bursitis, right ankle and foot -M71172 Other infective bursitis, left ankle and foot -M71179 Other infective bursitis, unspecified ankle and foot -M7118 Other infective bursitis, other site -M7119 Other infective bursitis, multiple sites -M7120 Synovial cyst of popliteal space [Baker], unspecified knee -M7121 Synovial cyst of popliteal space [Baker], right knee -M7122 Synovial cyst of popliteal space [Baker], left knee -M7130 Other bursal cyst, unspecified site -M71311 Other bursal cyst, right shoulder -M71312 Other bursal cyst, left shoulder -M71319 Other bursal cyst, unspecified shoulder -M71321 Other bursal cyst, right elbow -M71322 Other bursal cyst, left elbow -M71329 Other bursal cyst, unspecified elbow -M71331 Other bursal cyst, right wrist -M71332 Other bursal cyst, left wrist -M71339 Other bursal cyst, unspecified wrist -M71341 Other bursal cyst, right hand -M71342 Other bursal cyst, left hand -M71349 Other bursal cyst, unspecified hand -M71351 Other bursal cyst, right hip -M71352 Other bursal cyst, left hip -M71359 Other bursal cyst, unspecified hip -M71371 Other bursal cyst, right ankle and foot -M71372 Other bursal cyst, left ankle and foot -M71379 Other bursal cyst, unspecified ankle and foot -M7138 Other bursal cyst, other site -M7139 Other bursal cyst, multiple sites -M7140 Calcium deposit in bursa, unspecified site -M71421 Calcium deposit in bursa, right elbow -M71422 Calcium deposit in bursa, left elbow -M71429 Calcium deposit in bursa, unspecified elbow -M71431 Calcium deposit in bursa, right wrist -M71432 Calcium deposit in bursa, left wrist -M71439 Calcium deposit in bursa, unspecified wrist -M71441 Calcium deposit in bursa, right hand -M71442 Calcium deposit in bursa, left hand -M71449 Calcium deposit in bursa, unspecified hand -M71451 Calcium deposit in bursa, right hip -M71452 Calcium deposit in bursa, left hip -M71459 Calcium deposit in bursa, unspecified hip -M71461 Calcium deposit in bursa, right knee -M71462 Calcium deposit in bursa, left knee -M71469 Calcium deposit in bursa, unspecified knee -M71471 Calcium deposit in bursa, right ankle and foot -M71472 Calcium deposit in bursa, left ankle and foot -M71479 Calcium deposit in bursa, unspecified ankle and foot -M7148 Calcium deposit in bursa, other site -M7149 Calcium deposit in bursa, multiple sites -M7150 Other bursitis, not elsewhere classified, unspecified site -M71521 Other bursitis, not elsewhere classified, right elbow -M71522 Other bursitis, not elsewhere classified, left elbow -M71529 Other bursitis, not elsewhere classified, unspecified elbow -M71531 Other bursitis, not elsewhere classified, right wrist -M71532 Other bursitis, not elsewhere classified, left wrist -M71539 Other bursitis, not elsewhere classified, unspecified wrist -M71541 Other bursitis, not elsewhere classified, right hand -M71542 Other bursitis, not elsewhere classified, left hand -M71549 Other bursitis, not elsewhere classified, unspecified hand -M71551 Other bursitis, not elsewhere classified, right hip -M71552 Other bursitis, not elsewhere classified, left hip -M71559 Other bursitis, not elsewhere classified, unspecified hip -M71561 Other bursitis, not elsewhere classified, right knee -M71562 Other bursitis, not elsewhere classified, left knee -M71569 Other bursitis, not elsewhere classified, unspecified knee -M71571 Other bursitis, not elsewhere classified, right ankle and foot -M71572 Other bursitis, not elsewhere classified, left ankle and foot -M71579 Other bursitis, not elsewhere classified, unspecified ankle and foot -M7158 Other bursitis, not elsewhere classified, other site -M7180 Other specified bursopathies, unspecified site -M71811 Other specified bursopathies, right shoulder -M71812 Other specified bursopathies, left shoulder -M71819 Other specified bursopathies, unspecified shoulder -M71821 Other specified bursopathies, right elbow -M71822 Other specified bursopathies, left elbow -M71829 Other specified bursopathies, unspecified elbow -M71831 Other specified bursopathies, right wrist -M71832 Other specified bursopathies, left wrist -M71839 Other specified bursopathies, unspecified wrist -M71841 Other specified bursopathies, right hand -M71842 Other specified bursopathies, left hand -M71849 Other specified bursopathies, unspecified hand -M71851 Other specified bursopathies, right hip -M71852 Other specified bursopathies, left hip -M71859 Other specified bursopathies, unspecified hip -M71861 Other specified bursopathies, right knee -M71862 Other specified bursopathies, left knee -M71869 Other specified bursopathies, unspecified knee -M71871 Other specified bursopathies, right ankle and foot -M71872 Other specified bursopathies, left ankle and foot -M71879 Other specified bursopathies, unspecified ankle and foot -M7188 Other specified bursopathies, other site -M7189 Other specified bursopathies, multiple sites -M719 Bursopathy, unspecified -M720 Palmar fascial fibromatosis [Dupuytren] -M721 Knuckle pads -M722 Plantar fascial fibromatosis -M724 Pseudosarcomatous fibromatosis -M726 Necrotizing fasciitis -M728 Other fibroblastic disorders -M729 Fibroblastic disorder, unspecified -M7500 Adhesive capsulitis of unspecified shoulder -M7501 Adhesive capsulitis of right shoulder -M7502 Adhesive capsulitis of left shoulder -M75100 Unspecified rotator cuff tear or rupture of unspecified shoulder, not specified as traumatic -M75101 Unspecified rotator cuff tear or rupture of right shoulder, not specified as traumatic -M75102 Unspecified rotator cuff tear or rupture of left shoulder, not specified as traumatic -M75110 Incomplete rotator cuff tear or rupture of unspecified shoulder, not specified as traumatic -M75111 Incomplete rotator cuff tear or rupture of right shoulder, not specified as traumatic -M75112 Incomplete rotator cuff tear or rupture of left shoulder, not specified as traumatic -M75120 Complete rotator cuff tear or rupture of unspecified shoulder, not specified as traumatic -M75121 Complete rotator cuff tear or rupture of right shoulder, not specified as traumatic -M75122 Complete rotator cuff tear or rupture of left shoulder, not specified as traumatic -M7520 Bicipital tendinitis, unspecified shoulder -M7521 Bicipital tendinitis, right shoulder -M7522 Bicipital tendinitis, left shoulder -M7530 Calcific tendinitis of unspecified shoulder -M7531 Calcific tendinitis of right shoulder -M7532 Calcific tendinitis of left shoulder -M7540 Impingement syndrome of unspecified shoulder -M7541 Impingement syndrome of right shoulder -M7542 Impingement syndrome of left shoulder -M7550 Bursitis of unspecified shoulder -M7551 Bursitis of right shoulder -M7552 Bursitis of left shoulder -M7580 Other shoulder lesions, unspecified shoulder -M7581 Other shoulder lesions, right shoulder -M7582 Other shoulder lesions, left shoulder -M7590 Shoulder lesion, unspecified, unspecified shoulder -M7591 Shoulder lesion, unspecified, right shoulder -M7592 Shoulder lesion, unspecified, left shoulder -M7600 Gluteal tendinitis, unspecified hip -M7601 Gluteal tendinitis, right hip -M7602 Gluteal tendinitis, left hip -M7610 Psoas tendinitis, unspecified hip -M7611 Psoas tendinitis, right hip -M7612 Psoas tendinitis, left hip -M7620 Iliac crest spur, unspecified hip -M7621 Iliac crest spur, right hip -M7622 Iliac crest spur, left hip -M7630 Iliotibial band syndrome, unspecified leg -M7631 Iliotibial band syndrome, right leg -M7632 Iliotibial band syndrome, left leg -M7640 Tibial collateral bursitis [Pellegrini-Stieda], unspecified leg -M7641 Tibial collateral bursitis [Pellegrini-Stieda], right leg -M7642 Tibial collateral bursitis [Pellegrini-Stieda], left leg -M7650 Patellar tendinitis, unspecified knee -M7651 Patellar tendinitis, right knee -M7652 Patellar tendinitis, left knee -M7660 Achilles tendinitis, unspecified leg -M7661 Achilles tendinitis, right leg -M7662 Achilles tendinitis, left leg -M7670 Peroneal tendinitis, unspecified leg -M7671 Peroneal tendinitis, right leg -M7672 Peroneal tendinitis, left leg -M76811 Anterior tibial syndrome, right leg -M76812 Anterior tibial syndrome, left leg -M76819 Anterior tibial syndrome, unspecified leg -M76821 Posterior tibial tendinitis, right leg -M76822 Posterior tibial tendinitis, left leg -M76829 Posterior tibial tendinitis, unspecified leg -M76891 Other specified enthesopathies of right lower limb, excluding foot -M76892 Other specified enthesopathies of left lower limb, excluding foot -M76899 Other specified enthesopathies of unspecified lower limb, excluding foot -M769 Unspecified enthesopathy, lower limb, excluding foot -M7700 Medial epicondylitis, unspecified elbow -M7701 Medial epicondylitis, right elbow -M7702 Medial epicondylitis, left elbow -M7710 Lateral epicondylitis, unspecified elbow -M7711 Lateral epicondylitis, right elbow -M7712 Lateral epicondylitis, left elbow -M7720 Periarthritis, unspecified wrist -M7721 Periarthritis, right wrist -M7722 Periarthritis, left wrist -M7730 Calcaneal spur, unspecified foot -M7731 Calcaneal spur, right foot -M7732 Calcaneal spur, left foot -M7740 Metatarsalgia, unspecified foot -M7741 Metatarsalgia, right foot -M7742 Metatarsalgia, left foot -M7750 Other enthesopathy of unspecified foot -M7751 Other enthesopathy of right foot -M7752 Other enthesopathy of left foot -M778 Other enthesopathies, not elsewhere classified -M779 Enthesopathy, unspecified -M790 Rheumatism, unspecified -M791 Myalgia -M792 Neuralgia and neuritis, unspecified -M793 Panniculitis, unspecified -M794 Hypertrophy of (infrapatellar) fat pad -M795 Residual foreign body in soft tissue -M79601 Pain in right arm -M79602 Pain in left arm -M79603 Pain in arm, unspecified -M79604 Pain in right leg -M79605 Pain in left leg -M79606 Pain in leg, unspecified -M79609 Pain in unspecified limb -M79621 Pain in right upper arm -M79622 Pain in left upper arm -M79629 Pain in unspecified upper arm -M79631 Pain in right forearm -M79632 Pain in left forearm -M79639 Pain in unspecified forearm -M79641 Pain in right hand -M79642 Pain in left hand -M79643 Pain in unspecified hand -M79644 Pain in right finger(s) -M79645 Pain in left finger(s) -M79646 Pain in unspecified finger(s) -M79651 Pain in right thigh -M79652 Pain in left thigh -M79659 Pain in unspecified thigh -M79661 Pain in right lower leg -M79662 Pain in left lower leg -M79669 Pain in unspecified lower leg -M79671 Pain in right foot -M79672 Pain in left foot -M79673 Pain in unspecified foot -M79674 Pain in right toe(s) -M79675 Pain in left toe(s) -M79676 Pain in unspecified toe(s) -M797 Fibromyalgia -M79A11 Nontraumatic compartment syndrome of right upper extremity -M79A12 Nontraumatic compartment syndrome of left upper extremity -M79A19 Nontraumatic compartment syndrome of unspecified upper extremity -M79A21 Nontraumatic compartment syndrome of right lower extremity -M79A22 Nontraumatic compartment syndrome of left lower extremity -M79A29 Nontraumatic compartment syndrome of unspecified lower extremity -M79A3 Nontraumatic compartment syndrome of abdomen -M79A9 Nontraumatic compartment syndrome of other sites -M7981 Nontraumatic hematoma of soft tissue -M7989 Other specified soft tissue disorders -M799 Soft tissue disorder, unspecified -M8000XA Age-related osteoporosis with current pathological fracture, unspecified site, initial encounter for fracture -M8000XD Age-related osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with routine healing -M8000XG Age-related osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with delayed healing -M8000XK Age-related osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with nonunion -M8000XP Age-related osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with malunion -M8000XS Age-related osteoporosis with current pathological fracture, unspecified site, sequela -M80011A Age-related osteoporosis with current pathological fracture, right shoulder, initial encounter for fracture -M80011D Age-related osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with routine healing -M80011G Age-related osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with delayed healing -M80011K Age-related osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with nonunion -M80011P Age-related osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with malunion -M80011S Age-related osteoporosis with current pathological fracture, right shoulder, sequela -M80012A Age-related osteoporosis with current pathological fracture, left shoulder, initial encounter for fracture -M80012D Age-related osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with routine healing -M80012G Age-related osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with delayed healing -M80012K Age-related osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with nonunion -M80012P Age-related osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with malunion -M80012S Age-related osteoporosis with current pathological fracture, left shoulder, sequela -M80019A Age-related osteoporosis with current pathological fracture, unspecified shoulder, initial encounter for fracture -M80019D Age-related osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with routine healing -M80019G Age-related osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with delayed healing -M80019K Age-related osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with nonunion -M80019P Age-related osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with malunion -M80019S Age-related osteoporosis with current pathological fracture, unspecified shoulder, sequela -M80021A Age-related osteoporosis with current pathological fracture, right humerus, initial encounter for fracture -M80021D Age-related osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with routine healing -M80021G Age-related osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with delayed healing -M80021K Age-related osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with nonunion -M80021P Age-related osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with malunion -M80021S Age-related osteoporosis with current pathological fracture, right humerus, sequela -M80022A Age-related osteoporosis with current pathological fracture, left humerus, initial encounter for fracture -M80022D Age-related osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with routine healing -M80022G Age-related osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with delayed healing -M80022K Age-related osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with nonunion -M80022P Age-related osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with malunion -M80022S Age-related osteoporosis with current pathological fracture, left humerus, sequela -M80029A Age-related osteoporosis with current pathological fracture, unspecified humerus, initial encounter for fracture -M80029D Age-related osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with routine healing -M80029G Age-related osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with delayed healing -M80029K Age-related osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with nonunion -M80029P Age-related osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with malunion -M80029S Age-related osteoporosis with current pathological fracture, unspecified humerus, sequela -M80031A Age-related osteoporosis with current pathological fracture, right forearm, initial encounter for fracture -M80031D Age-related osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with routine healing -M80031G Age-related osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with delayed healing -M80031K Age-related osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with nonunion -M80031P Age-related osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with malunion -M80031S Age-related osteoporosis with current pathological fracture, right forearm, sequela -M80032A Age-related osteoporosis with current pathological fracture, left forearm, initial encounter for fracture -M80032D Age-related osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with routine healing -M80032G Age-related osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with delayed healing -M80032K Age-related osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with nonunion -M80032P Age-related osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with malunion -M80032S Age-related osteoporosis with current pathological fracture, left forearm, sequela -M80039A Age-related osteoporosis with current pathological fracture, unspecified forearm, initial encounter for fracture -M80039D Age-related osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with routine healing -M80039G Age-related osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with delayed healing -M80039K Age-related osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with nonunion -M80039P Age-related osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with malunion -M80039S Age-related osteoporosis with current pathological fracture, unspecified forearm, sequela -M80041A Age-related osteoporosis with current pathological fracture, right hand, initial encounter for fracture -M80041D Age-related osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with routine healing -M80041G Age-related osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with delayed healing -M80041K Age-related osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with nonunion -M80041P Age-related osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with malunion -M80041S Age-related osteoporosis with current pathological fracture, right hand, sequela -M80042A Age-related osteoporosis with current pathological fracture, left hand, initial encounter for fracture -M80042D Age-related osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with routine healing -M80042G Age-related osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with delayed healing -M80042K Age-related osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with nonunion -M80042P Age-related osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with malunion -M80042S Age-related osteoporosis with current pathological fracture, left hand, sequela -M80049A Age-related osteoporosis with current pathological fracture, unspecified hand, initial encounter for fracture -M80049D Age-related osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with routine healing -M80049G Age-related osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with delayed healing -M80049K Age-related osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with nonunion -M80049P Age-related osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with malunion -M80049S Age-related osteoporosis with current pathological fracture, unspecified hand, sequela -M80051A Age-related osteoporosis with current pathological fracture, right femur, initial encounter for fracture -M80051D Age-related osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with routine healing -M80051G Age-related osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with delayed healing -M80051K Age-related osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with nonunion -M80051P Age-related osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with malunion -M80051S Age-related osteoporosis with current pathological fracture, right femur, sequela -M80052A Age-related osteoporosis with current pathological fracture, left femur, initial encounter for fracture -M80052D Age-related osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with routine healing -M80052G Age-related osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with delayed healing -M80052K Age-related osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with nonunion -M80052P Age-related osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with malunion -M80052S Age-related osteoporosis with current pathological fracture, left femur, sequela -M80059A Age-related osteoporosis with current pathological fracture, unspecified femur, initial encounter for fracture -M80059D Age-related osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with routine healing -M80059G Age-related osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with delayed healing -M80059K Age-related osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with nonunion -M80059P Age-related osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with malunion -M80059S Age-related osteoporosis with current pathological fracture, unspecified femur, sequela -M80061A Age-related osteoporosis with current pathological fracture, right lower leg, initial encounter for fracture -M80061D Age-related osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with routine healing -M80061G Age-related osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with delayed healing -M80061K Age-related osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with nonunion -M80061P Age-related osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with malunion -M80061S Age-related osteoporosis with current pathological fracture, right lower leg, sequela -M80062A Age-related osteoporosis with current pathological fracture, left lower leg, initial encounter for fracture -M80062D Age-related osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with routine healing -M80062G Age-related osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with delayed healing -M80062K Age-related osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with nonunion -M80062P Age-related osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with malunion -M80062S Age-related osteoporosis with current pathological fracture, left lower leg, sequela -M80069A Age-related osteoporosis with current pathological fracture, unspecified lower leg, initial encounter for fracture -M80069D Age-related osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with routine healing -M80069G Age-related osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with delayed healing -M80069K Age-related osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with nonunion -M80069P Age-related osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with malunion -M80069S Age-related osteoporosis with current pathological fracture, unspecified lower leg, sequela -M80071A Age-related osteoporosis with current pathological fracture, right ankle and foot, initial encounter for fracture -M80071D Age-related osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with routine healing -M80071G Age-related osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with delayed healing -M80071K Age-related osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with nonunion -M80071P Age-related osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with malunion -M80071S Age-related osteoporosis with current pathological fracture, right ankle and foot, sequela -M80072A Age-related osteoporosis with current pathological fracture, left ankle and foot, initial encounter for fracture -M80072D Age-related osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with routine healing -M80072G Age-related osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with delayed healing -M80072K Age-related osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with nonunion -M80072P Age-related osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with malunion -M80072S Age-related osteoporosis with current pathological fracture, left ankle and foot, sequela -M80079A Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, initial encounter for fracture -M80079D Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with routine healing -M80079G Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with delayed healing -M80079K Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with nonunion -M80079P Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with malunion -M80079S Age-related osteoporosis with current pathological fracture, unspecified ankle and foot, sequela -M8008XA Age-related osteoporosis with current pathological fracture, vertebra(e), initial encounter for fracture -M8008XD Age-related osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with routine healing -M8008XG Age-related osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with delayed healing -M8008XK Age-related osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with nonunion -M8008XP Age-related osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with malunion -M8008XS Age-related osteoporosis with current pathological fracture, vertebra(e), sequela -M8080XA Other osteoporosis with current pathological fracture, unspecified site, initial encounter for fracture -M8080XD Other osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with routine healing -M8080XG Other osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with delayed healing -M8080XK Other osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with nonunion -M8080XP Other osteoporosis with current pathological fracture, unspecified site, subsequent encounter for fracture with malunion -M8080XS Other osteoporosis with current pathological fracture, unspecified site, sequela -M80811A Other osteoporosis with current pathological fracture, right shoulder, initial encounter for fracture -M80811D Other osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with routine healing -M80811G Other osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with delayed healing -M80811K Other osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with nonunion -M80811P Other osteoporosis with current pathological fracture, right shoulder, subsequent encounter for fracture with malunion -M80811S Other osteoporosis with current pathological fracture, right shoulder, sequela -M80812A Other osteoporosis with current pathological fracture, left shoulder, initial encounter for fracture -M80812D Other osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with routine healing -M80812G Other osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with delayed healing -M80812K Other osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with nonunion -M80812P Other osteoporosis with current pathological fracture, left shoulder, subsequent encounter for fracture with malunion -M80812S Other osteoporosis with current pathological fracture, left shoulder, sequela -M80819A Other osteoporosis with current pathological fracture, unspecified shoulder, initial encounter for fracture -M80819D Other osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with routine healing -M80819G Other osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with delayed healing -M80819K Other osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with nonunion -M80819P Other osteoporosis with current pathological fracture, unspecified shoulder, subsequent encounter for fracture with malunion -M80819S Other osteoporosis with current pathological fracture, unspecified shoulder, sequela -M80821A Other osteoporosis with current pathological fracture, right humerus, initial encounter for fracture -M80821D Other osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with routine healing -M80821G Other osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with delayed healing -M80821K Other osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with nonunion -M80821P Other osteoporosis with current pathological fracture, right humerus, subsequent encounter for fracture with malunion -M80821S Other osteoporosis with current pathological fracture, right humerus, sequela -M80822A Other osteoporosis with current pathological fracture, left humerus, initial encounter for fracture -M80822D Other osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with routine healing -M80822G Other osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with delayed healing -M80822K Other osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with nonunion -M80822P Other osteoporosis with current pathological fracture, left humerus, subsequent encounter for fracture with malunion -M80822S Other osteoporosis with current pathological fracture, left humerus, sequela -M80829A Other osteoporosis with current pathological fracture, unspecified humerus, initial encounter for fracture -M80829D Other osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with routine healing -M80829G Other osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with delayed healing -M80829K Other osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with nonunion -M80829P Other osteoporosis with current pathological fracture, unspecified humerus, subsequent encounter for fracture with malunion -M80829S Other osteoporosis with current pathological fracture, unspecified humerus, sequela -M80831A Other osteoporosis with current pathological fracture, right forearm, initial encounter for fracture -M80831D Other osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with routine healing -M80831G Other osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with delayed healing -M80831K Other osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with nonunion -M80831P Other osteoporosis with current pathological fracture, right forearm, subsequent encounter for fracture with malunion -M80831S Other osteoporosis with current pathological fracture, right forearm, sequela -M80832A Other osteoporosis with current pathological fracture, left forearm, initial encounter for fracture -M80832D Other osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with routine healing -M80832G Other osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with delayed healing -M80832K Other osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with nonunion -M80832P Other osteoporosis with current pathological fracture, left forearm, subsequent encounter for fracture with malunion -M80832S Other osteoporosis with current pathological fracture, left forearm, sequela -M80839A Other osteoporosis with current pathological fracture, unspecified forearm, initial encounter for fracture -M80839D Other osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with routine healing -M80839G Other osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with delayed healing -M80839K Other osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with nonunion -M80839P Other osteoporosis with current pathological fracture, unspecified forearm, subsequent encounter for fracture with malunion -M80839S Other osteoporosis with current pathological fracture, unspecified forearm, sequela -M80841A Other osteoporosis with current pathological fracture, right hand, initial encounter for fracture -M80841D Other osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with routine healing -M80841G Other osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with delayed healing -M80841K Other osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with nonunion -M80841P Other osteoporosis with current pathological fracture, right hand, subsequent encounter for fracture with malunion -M80841S Other osteoporosis with current pathological fracture, right hand, sequela -M80842A Other osteoporosis with current pathological fracture, left hand, initial encounter for fracture -M80842D Other osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with routine healing -M80842G Other osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with delayed healing -M80842K Other osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with nonunion -M80842P Other osteoporosis with current pathological fracture, left hand, subsequent encounter for fracture with malunion -M80842S Other osteoporosis with current pathological fracture, left hand, sequela -M80849A Other osteoporosis with current pathological fracture, unspecified hand, initial encounter for fracture -M80849D Other osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with routine healing -M80849G Other osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with delayed healing -M80849K Other osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with nonunion -M80849P Other osteoporosis with current pathological fracture, unspecified hand, subsequent encounter for fracture with malunion -M80849S Other osteoporosis with current pathological fracture, unspecified hand, sequela -M80851A Other osteoporosis with current pathological fracture, right femur, initial encounter for fracture -M80851D Other osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with routine healing -M80851G Other osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with delayed healing -M80851K Other osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with nonunion -M80851P Other osteoporosis with current pathological fracture, right femur, subsequent encounter for fracture with malunion -M80851S Other osteoporosis with current pathological fracture, right femur, sequela -M80852A Other osteoporosis with current pathological fracture, left femur, initial encounter for fracture -M80852D Other osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with routine healing -M80852G Other osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with delayed healing -M80852K Other osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with nonunion -M80852P Other osteoporosis with current pathological fracture, left femur, subsequent encounter for fracture with malunion -M80852S Other osteoporosis with current pathological fracture, left femur, sequela -M80859A Other osteoporosis with current pathological fracture, unspecified femur, initial encounter for fracture -M80859D Other osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with routine healing -M80859G Other osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with delayed healing -M80859K Other osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with nonunion -M80859P Other osteoporosis with current pathological fracture, unspecified femur, subsequent encounter for fracture with malunion -M80859S Other osteoporosis with current pathological fracture, unspecified femur, sequela -M80861A Other osteoporosis with current pathological fracture, right lower leg, initial encounter for fracture -M80861D Other osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with routine healing -M80861G Other osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with delayed healing -M80861K Other osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with nonunion -M80861P Other osteoporosis with current pathological fracture, right lower leg, subsequent encounter for fracture with malunion -M80861S Other osteoporosis with current pathological fracture, right lower leg, sequela -M80862A Other osteoporosis with current pathological fracture, left lower leg, initial encounter for fracture -M80862D Other osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with routine healing -M80862G Other osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with delayed healing -M80862K Other osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with nonunion -M80862P Other osteoporosis with current pathological fracture, left lower leg, subsequent encounter for fracture with malunion -M80862S Other osteoporosis with current pathological fracture, left lower leg, sequela -M80869A Other osteoporosis with current pathological fracture, unspecified lower leg, initial encounter for fracture -M80869D Other osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with routine healing -M80869G Other osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with delayed healing -M80869K Other osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with nonunion -M80869P Other osteoporosis with current pathological fracture, unspecified lower leg, subsequent encounter for fracture with malunion -M80869S Other osteoporosis with current pathological fracture, unspecified lower leg, sequela -M80871A Other osteoporosis with current pathological fracture, right ankle and foot, initial encounter for fracture -M80871D Other osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with routine healing -M80871G Other osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with delayed healing -M80871K Other osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with nonunion -M80871P Other osteoporosis with current pathological fracture, right ankle and foot, subsequent encounter for fracture with malunion -M80871S Other osteoporosis with current pathological fracture, right ankle and foot, sequela -M80872A Other osteoporosis with current pathological fracture, left ankle and foot, initial encounter for fracture -M80872D Other osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with routine healing -M80872G Other osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with delayed healing -M80872K Other osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with nonunion -M80872P Other osteoporosis with current pathological fracture, left ankle and foot, subsequent encounter for fracture with malunion -M80872S Other osteoporosis with current pathological fracture, left ankle and foot, sequela -M80879A Other osteoporosis with current pathological fracture, unspecified ankle and foot, initial encounter for fracture -M80879D Other osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with routine healing -M80879G Other osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with delayed healing -M80879K Other osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with nonunion -M80879P Other osteoporosis with current pathological fracture, unspecified ankle and foot, subsequent encounter for fracture with malunion -M80879S Other osteoporosis with current pathological fracture, unspecified ankle and foot, sequela -M8088XA Other osteoporosis with current pathological fracture, vertebra(e), initial encounter for fracture -M8088XD Other osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with routine healing -M8088XG Other osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with delayed healing -M8088XK Other osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with nonunion -M8088XP Other osteoporosis with current pathological fracture, vertebra(e), subsequent encounter for fracture with malunion -M8088XS Other osteoporosis with current pathological fracture, vertebra(e), sequela -M810 Age-related osteoporosis without current pathological fracture -M816 Localized osteoporosis [Lequesne] -M818 Other osteoporosis without current pathological fracture -M830 Puerperal osteomalacia -M831 Senile osteomalacia -M832 Adult osteomalacia due to malabsorption -M833 Adult osteomalacia due to malnutrition -M834 Aluminum bone disease -M835 Other drug-induced osteomalacia in adults -M838 Other adult osteomalacia -M839 Adult osteomalacia, unspecified -M8430XA Stress fracture, unspecified site, initial encounter for fracture -M8430XD Stress fracture, unspecified site, subsequent encounter for fracture with routine healing -M8430XG Stress fracture, unspecified site, subsequent encounter for fracture with delayed healing -M8430XK Stress fracture, unspecified site, subsequent encounter for fracture with nonunion -M8430XP Stress fracture, unspecified site, subsequent encounter for fracture with malunion -M8430XS Stress fracture, unspecified site, sequela -M84311A Stress fracture, right shoulder, initial encounter for fracture -M84311D Stress fracture, right shoulder, subsequent encounter for fracture with routine healing -M84311G Stress fracture, right shoulder, subsequent encounter for fracture with delayed healing -M84311K Stress fracture, right shoulder, subsequent encounter for fracture with nonunion -M84311P Stress fracture, right shoulder, subsequent encounter for fracture with malunion -M84311S Stress fracture, right shoulder, sequela -M84312A Stress fracture, left shoulder, initial encounter for fracture -M84312D Stress fracture, left shoulder, subsequent encounter for fracture with routine healing -M84312G Stress fracture, left shoulder, subsequent encounter for fracture with delayed healing -M84312K Stress fracture, left shoulder, subsequent encounter for fracture with nonunion -M84312P Stress fracture, left shoulder, subsequent encounter for fracture with malunion -M84312S Stress fracture, left shoulder, sequela -M84319A Stress fracture, unspecified shoulder, initial encounter for fracture -M84319D Stress fracture, unspecified shoulder, subsequent encounter for fracture with routine healing -M84319G Stress fracture, unspecified shoulder, subsequent encounter for fracture with delayed healing -M84319K Stress fracture, unspecified shoulder, subsequent encounter for fracture with nonunion -M84319P Stress fracture, unspecified shoulder, subsequent encounter for fracture with malunion -M84319S Stress fracture, unspecified shoulder, sequela -M84321A Stress fracture, right humerus, initial encounter for fracture -M84321D Stress fracture, right humerus, subsequent encounter for fracture with routine healing -M84321G Stress fracture, right humerus, subsequent encounter for fracture with delayed healing -M84321K Stress fracture, right humerus, subsequent encounter for fracture with nonunion -M84321P Stress fracture, right humerus, subsequent encounter for fracture with malunion -M84321S Stress fracture, right humerus, sequela -M84322A Stress fracture, left humerus, initial encounter for fracture -M84322D Stress fracture, left humerus, subsequent encounter for fracture with routine healing -M84322G Stress fracture, left humerus, subsequent encounter for fracture with delayed healing -M84322K Stress fracture, left humerus, subsequent encounter for fracture with nonunion -M84322P Stress fracture, left humerus, subsequent encounter for fracture with malunion -M84322S Stress fracture, left humerus, sequela -M84329A Stress fracture, unspecified humerus, initial encounter for fracture -M84329D Stress fracture, unspecified humerus, subsequent encounter for fracture with routine healing -M84329G Stress fracture, unspecified humerus, subsequent encounter for fracture with delayed healing -M84329K Stress fracture, unspecified humerus, subsequent encounter for fracture with nonunion -M84329P Stress fracture, unspecified humerus, subsequent encounter for fracture with malunion -M84329S Stress fracture, unspecified humerus, sequela -M84331A Stress fracture, right ulna, initial encounter for fracture -M84331D Stress fracture, right ulna, subsequent encounter for fracture with routine healing -M84331G Stress fracture, right ulna, subsequent encounter for fracture with delayed healing -M84331K Stress fracture, right ulna, subsequent encounter for fracture with nonunion -M84331P Stress fracture, right ulna, subsequent encounter for fracture with malunion -M84331S Stress fracture, right ulna, sequela -M84332A Stress fracture, left ulna, initial encounter for fracture -M84332D Stress fracture, left ulna, subsequent encounter for fracture with routine healing -M84332G Stress fracture, left ulna, subsequent encounter for fracture with delayed healing -M84332K Stress fracture, left ulna, subsequent encounter for fracture with nonunion -M84332P Stress fracture, left ulna, subsequent encounter for fracture with malunion -M84332S Stress fracture, left ulna, sequela -M84333A Stress fracture, right radius, initial encounter for fracture -M84333D Stress fracture, right radius, subsequent encounter for fracture with routine healing -M84333G Stress fracture, right radius, subsequent encounter for fracture with delayed healing -M84333K Stress fracture, right radius, subsequent encounter for fracture with nonunion -M84333P Stress fracture, right radius, subsequent encounter for fracture with malunion -M84333S Stress fracture, right radius, sequela -M84334A Stress fracture, left radius, initial encounter for fracture -M84334D Stress fracture, left radius, subsequent encounter for fracture with routine healing -M84334G Stress fracture, left radius, subsequent encounter for fracture with delayed healing -M84334K Stress fracture, left radius, subsequent encounter for fracture with nonunion -M84334P Stress fracture, left radius, subsequent encounter for fracture with malunion -M84334S Stress fracture, left radius, sequela -M84339A Stress fracture, unspecified ulna and radius, initial encounter for fracture -M84339D Stress fracture, unspecified ulna and radius, subsequent encounter for fracture with routine healing -M84339G Stress fracture, unspecified ulna and radius, subsequent encounter for fracture with delayed healing -M84339K Stress fracture, unspecified ulna and radius, subsequent encounter for fracture with nonunion -M84339P Stress fracture, unspecified ulna and radius, subsequent encounter for fracture with malunion -M84339S Stress fracture, unspecified ulna and radius, sequela -M84341A Stress fracture, right hand, initial encounter for fracture -M84341D Stress fracture, right hand, subsequent encounter for fracture with routine healing -M84341G Stress fracture, right hand, subsequent encounter for fracture with delayed healing -M84341K Stress fracture, right hand, subsequent encounter for fracture with nonunion -M84341P Stress fracture, right hand, subsequent encounter for fracture with malunion -M84341S Stress fracture, right hand, sequela -M84342A Stress fracture, left hand, initial encounter for fracture -M84342D Stress fracture, left hand, subsequent encounter for fracture with routine healing -M84342G Stress fracture, left hand, subsequent encounter for fracture with delayed healing -M84342K Stress fracture, left hand, subsequent encounter for fracture with nonunion -M84342P Stress fracture, left hand, subsequent encounter for fracture with malunion -M84342S Stress fracture, left hand, sequela -M84343A Stress fracture, unspecified hand, initial encounter for fracture -M84343D Stress fracture, unspecified hand, subsequent encounter for fracture with routine healing -M84343G Stress fracture, unspecified hand, subsequent encounter for fracture with delayed healing -M84343K Stress fracture, unspecified hand, subsequent encounter for fracture with nonunion -M84343P Stress fracture, unspecified hand, subsequent encounter for fracture with malunion -M84343S Stress fracture, unspecified hand, sequela -M84344A Stress fracture, right finger(s), initial encounter for fracture -M84344D Stress fracture, right finger(s), subsequent encounter for fracture with routine healing -M84344G Stress fracture, right finger(s), subsequent encounter for fracture with delayed healing -M84344K Stress fracture, right finger(s), subsequent encounter for fracture with nonunion -M84344P Stress fracture, right finger(s), subsequent encounter for fracture with malunion -M84344S Stress fracture, right finger(s), sequela -M84345A Stress fracture, left finger(s), initial encounter for fracture -M84345D Stress fracture, left finger(s), subsequent encounter for fracture with routine healing -M84345G Stress fracture, left finger(s), subsequent encounter for fracture with delayed healing -M84345K Stress fracture, left finger(s), subsequent encounter for fracture with nonunion -M84345P Stress fracture, left finger(s), subsequent encounter for fracture with malunion -M84345S Stress fracture, left finger(s), sequela -M84346A Stress fracture, unspecified finger(s), initial encounter for fracture -M84346D Stress fracture, unspecified finger(s), subsequent encounter for fracture with routine healing -M84346G Stress fracture, unspecified finger(s), subsequent encounter for fracture with delayed healing -M84346K Stress fracture, unspecified finger(s), subsequent encounter for fracture with nonunion -M84346P Stress fracture, unspecified finger(s), subsequent encounter for fracture with malunion -M84346S Stress fracture, unspecified finger(s), sequela -M84350A Stress fracture, pelvis, initial encounter for fracture -M84350D Stress fracture, pelvis, subsequent encounter for fracture with routine healing -M84350G Stress fracture, pelvis, subsequent encounter for fracture with delayed healing -M84350K Stress fracture, pelvis, subsequent encounter for fracture with nonunion -M84350P Stress fracture, pelvis, subsequent encounter for fracture with malunion -M84350S Stress fracture, pelvis, sequela -M84351A Stress fracture, right femur, initial encounter for fracture -M84351D Stress fracture, right femur, subsequent encounter for fracture with routine healing -M84351G Stress fracture, right femur, subsequent encounter for fracture with delayed healing -M84351K Stress fracture, right femur, subsequent encounter for fracture with nonunion -M84351P Stress fracture, right femur, subsequent encounter for fracture with malunion -M84351S Stress fracture, right femur, sequela -M84352A Stress fracture, left femur, initial encounter for fracture -M84352D Stress fracture, left femur, subsequent encounter for fracture with routine healing -M84352G Stress fracture, left femur, subsequent encounter for fracture with delayed healing -M84352K Stress fracture, left femur, subsequent encounter for fracture with nonunion -M84352P Stress fracture, left femur, subsequent encounter for fracture with malunion -M84352S Stress fracture, left femur, sequela -M84353A Stress fracture, unspecified femur, initial encounter for fracture -M84353D Stress fracture, unspecified femur, subsequent encounter for fracture with routine healing -M84353G Stress fracture, unspecified femur, subsequent encounter for fracture with delayed healing -M84353K Stress fracture, unspecified femur, subsequent encounter for fracture with nonunion -M84353P Stress fracture, unspecified femur, subsequent encounter for fracture with malunion -M84353S Stress fracture, unspecified femur, sequela -M84359A Stress fracture, hip, unspecified, initial encounter for fracture -M84359D Stress fracture, hip, unspecified, subsequent encounter for fracture with routine healing -M84359G Stress fracture, hip, unspecified, subsequent encounter for fracture with delayed healing -M84359K Stress fracture, hip, unspecified, subsequent encounter for fracture with nonunion -M84359P Stress fracture, hip, unspecified, subsequent encounter for fracture with malunion -M84359S Stress fracture, hip, unspecified, sequela -M84361A Stress fracture, right tibia, initial encounter for fracture -M84361D Stress fracture, right tibia, subsequent encounter for fracture with routine healing -M84361G Stress fracture, right tibia, subsequent encounter for fracture with delayed healing -M84361K Stress fracture, right tibia, subsequent encounter for fracture with nonunion -M84361P Stress fracture, right tibia, subsequent encounter for fracture with malunion -M84361S Stress fracture, right tibia, sequela -M84362A Stress fracture, left tibia, initial encounter for fracture -M84362D Stress fracture, left tibia, subsequent encounter for fracture with routine healing -M84362G Stress fracture, left tibia, subsequent encounter for fracture with delayed healing -M84362K Stress fracture, left tibia, subsequent encounter for fracture with nonunion -M84362P Stress fracture, left tibia, subsequent encounter for fracture with malunion -M84362S Stress fracture, left tibia, sequela -M84363A Stress fracture, right fibula, initial encounter for fracture -M84363D Stress fracture, right fibula, subsequent encounter for fracture with routine healing -M84363G Stress fracture, right fibula, subsequent encounter for fracture with delayed healing -M84363K Stress fracture, right fibula, subsequent encounter for fracture with nonunion -M84363P Stress fracture, right fibula, subsequent encounter for fracture with malunion -M84363S Stress fracture, right fibula, sequela -M84364A Stress fracture, left fibula, initial encounter for fracture -M84364D Stress fracture, left fibula, subsequent encounter for fracture with routine healing -M84364G Stress fracture, left fibula, subsequent encounter for fracture with delayed healing -M84364K Stress fracture, left fibula, subsequent encounter for fracture with nonunion -M84364P Stress fracture, left fibula, subsequent encounter for fracture with malunion -M84364S Stress fracture, left fibula, sequela -M84369A Stress fracture, unspecified tibia and fibula, initial encounter for fracture -M84369D Stress fracture, unspecified tibia and fibula, subsequent encounter for fracture with routine healing -M84369G Stress fracture, unspecified tibia and fibula, subsequent encounter for fracture with delayed healing -M84369K Stress fracture, unspecified tibia and fibula, subsequent encounter for fracture with nonunion -M84369P Stress fracture, unspecified tibia and fibula, subsequent encounter for fracture with malunion -M84369S Stress fracture, unspecified tibia and fibula, sequela -M84371A Stress fracture, right ankle, initial encounter for fracture -M84371D Stress fracture, right ankle, subsequent encounter for fracture with routine healing -M84371G Stress fracture, right ankle, subsequent encounter for fracture with delayed healing -M84371K Stress fracture, right ankle, subsequent encounter for fracture with nonunion -M84371P Stress fracture, right ankle, subsequent encounter for fracture with malunion -M84371S Stress fracture, right ankle, sequela -M84372A Stress fracture, left ankle, initial encounter for fracture -M84372D Stress fracture, left ankle, subsequent encounter for fracture with routine healing -M84372G Stress fracture, left ankle, subsequent encounter for fracture with delayed healing -M84372K Stress fracture, left ankle, subsequent encounter for fracture with nonunion -M84372P Stress fracture, left ankle, subsequent encounter for fracture with malunion -M84372S Stress fracture, left ankle, sequela -M84373A Stress fracture, unspecified ankle, initial encounter for fracture -M84373D Stress fracture, unspecified ankle, subsequent encounter for fracture with routine healing -M84373G Stress fracture, unspecified ankle, subsequent encounter for fracture with delayed healing -M84373K Stress fracture, unspecified ankle, subsequent encounter for fracture with nonunion -M84373P Stress fracture, unspecified ankle, subsequent encounter for fracture with malunion -M84373S Stress fracture, unspecified ankle, sequela -M84374A Stress fracture, right foot, initial encounter for fracture -M84374D Stress fracture, right foot, subsequent encounter for fracture with routine healing -M84374G Stress fracture, right foot, subsequent encounter for fracture with delayed healing -M84374K Stress fracture, right foot, subsequent encounter for fracture with nonunion -M84374P Stress fracture, right foot, subsequent encounter for fracture with malunion -M84374S Stress fracture, right foot, sequela -M84375A Stress fracture, left foot, initial encounter for fracture -M84375D Stress fracture, left foot, subsequent encounter for fracture with routine healing -M84375G Stress fracture, left foot, subsequent encounter for fracture with delayed healing -M84375K Stress fracture, left foot, subsequent encounter for fracture with nonunion -M84375P Stress fracture, left foot, subsequent encounter for fracture with malunion -M84375S Stress fracture, left foot, sequela -M84376A Stress fracture, unspecified foot, initial encounter for fracture -M84376D Stress fracture, unspecified foot, subsequent encounter for fracture with routine healing -M84376G Stress fracture, unspecified foot, subsequent encounter for fracture with delayed healing -M84376K Stress fracture, unspecified foot, subsequent encounter for fracture with nonunion -M84376P Stress fracture, unspecified foot, subsequent encounter for fracture with malunion -M84376S Stress fracture, unspecified foot, sequela -M84377A Stress fracture, right toe(s), initial encounter for fracture -M84377D Stress fracture, right toe(s), subsequent encounter for fracture with routine healing -M84377G Stress fracture, right toe(s), subsequent encounter for fracture with delayed healing -M84377K Stress fracture, right toe(s), subsequent encounter for fracture with nonunion -M84377P Stress fracture, right toe(s), subsequent encounter for fracture with malunion -M84377S Stress fracture, right toe(s), sequela -M84378A Stress fracture, left toe(s), initial encounter for fracture -M84378D Stress fracture, left toe(s), subsequent encounter for fracture with routine healing -M84378G Stress fracture, left toe(s), subsequent encounter for fracture with delayed healing -M84378K Stress fracture, left toe(s), subsequent encounter for fracture with nonunion -M84378P Stress fracture, left toe(s), subsequent encounter for fracture with malunion -M84378S Stress fracture, left toe(s), sequela -M84379A Stress fracture, unspecified toe(s), initial encounter for fracture -M84379D Stress fracture, unspecified toe(s), subsequent encounter for fracture with routine healing -M84379G Stress fracture, unspecified toe(s), subsequent encounter for fracture with delayed healing -M84379K Stress fracture, unspecified toe(s), subsequent encounter for fracture with nonunion -M84379P Stress fracture, unspecified toe(s), subsequent encounter for fracture with malunion -M84379S Stress fracture, unspecified toe(s), sequela -M8438XA Stress fracture, other site, initial encounter for fracture -M8438XD Stress fracture, other site, subsequent encounter for fracture with routine healing -M8438XG Stress fracture, other site, subsequent encounter for fracture with delayed healing -M8438XK Stress fracture, other site, subsequent encounter for fracture with nonunion -M8438XP Stress fracture, other site, subsequent encounter for fracture with malunion -M8438XS Stress fracture, other site, sequela -M8440XA Pathological fracture, unspecified site, initial encounter for fracture -M8440XD Pathological fracture, unspecified site, subsequent encounter for fracture with routine healing -M8440XG Pathological fracture, unspecified site, subsequent encounter for fracture with delayed healing -M8440XK Pathological fracture, unspecified site, subsequent encounter for fracture with nonunion -M8440XP Pathological fracture, unspecified site, subsequent encounter for fracture with malunion -M8440XS Pathological fracture, unspecified site, sequela -M84411A Pathological fracture, right shoulder, initial encounter for fracture -M84411D Pathological fracture, right shoulder, subsequent encounter for fracture with routine healing -M84411G Pathological fracture, right shoulder, subsequent encounter for fracture with delayed healing -M84411K Pathological fracture, right shoulder, subsequent encounter for fracture with nonunion -M84411P Pathological fracture, right shoulder, subsequent encounter for fracture with malunion -M84411S Pathological fracture, right shoulder, sequela -M84412A Pathological fracture, left shoulder, initial encounter for fracture -M84412D Pathological fracture, left shoulder, subsequent encounter for fracture with routine healing -M84412G Pathological fracture, left shoulder, subsequent encounter for fracture with delayed healing -M84412K Pathological fracture, left shoulder, subsequent encounter for fracture with nonunion -M84412P Pathological fracture, left shoulder, subsequent encounter for fracture with malunion -M84412S Pathological fracture, left shoulder, sequela -M84419A Pathological fracture, unspecified shoulder, initial encounter for fracture -M84419D Pathological fracture, unspecified shoulder, subsequent encounter for fracture with routine healing -M84419G Pathological fracture, unspecified shoulder, subsequent encounter for fracture with delayed healing -M84419K Pathological fracture, unspecified shoulder, subsequent encounter for fracture with nonunion -M84419P Pathological fracture, unspecified shoulder, subsequent encounter for fracture with malunion -M84419S Pathological fracture, unspecified shoulder, sequela -M84421A Pathological fracture, right humerus, initial encounter for fracture -M84421D Pathological fracture, right humerus, subsequent encounter for fracture with routine healing -M84421G Pathological fracture, right humerus, subsequent encounter for fracture with delayed healing -M84421K Pathological fracture, right humerus, subsequent encounter for fracture with nonunion -M84421P Pathological fracture, right humerus, subsequent encounter for fracture with malunion -M84421S Pathological fracture, right humerus, sequela -M84422A Pathological fracture, left humerus, initial encounter for fracture -M84422D Pathological fracture, left humerus, subsequent encounter for fracture with routine healing -M84422G Pathological fracture, left humerus, subsequent encounter for fracture with delayed healing -M84422K Pathological fracture, left humerus, subsequent encounter for fracture with nonunion -M84422P Pathological fracture, left humerus, subsequent encounter for fracture with malunion -M84422S Pathological fracture, left humerus, sequela -M84429A Pathological fracture, unspecified humerus, initial encounter for fracture -M84429D Pathological fracture, unspecified humerus, subsequent encounter for fracture with routine healing -M84429G Pathological fracture, unspecified humerus, subsequent encounter for fracture with delayed healing -M84429K Pathological fracture, unspecified humerus, subsequent encounter for fracture with nonunion -M84429P Pathological fracture, unspecified humerus, subsequent encounter for fracture with malunion -M84429S Pathological fracture, unspecified humerus, sequela -M84431A Pathological fracture, right ulna, initial encounter for fracture -M84431D Pathological fracture, right ulna, subsequent encounter for fracture with routine healing -M84431G Pathological fracture, right ulna, subsequent encounter for fracture with delayed healing -M84431K Pathological fracture, right ulna, subsequent encounter for fracture with nonunion -M84431P Pathological fracture, right ulna, subsequent encounter for fracture with malunion -M84431S Pathological fracture, right ulna, sequela -M84432A Pathological fracture, left ulna, initial encounter for fracture -M84432D Pathological fracture, left ulna, subsequent encounter for fracture with routine healing -M84432G Pathological fracture, left ulna, subsequent encounter for fracture with delayed healing -M84432K Pathological fracture, left ulna, subsequent encounter for fracture with nonunion -M84432P Pathological fracture, left ulna, subsequent encounter for fracture with malunion -M84432S Pathological fracture, left ulna, sequela -M84433A Pathological fracture, right radius, initial encounter for fracture -M84433D Pathological fracture, right radius, subsequent encounter for fracture with routine healing -M84433G Pathological fracture, right radius, subsequent encounter for fracture with delayed healing -M84433K Pathological fracture, right radius, subsequent encounter for fracture with nonunion -M84433P Pathological fracture, right radius, subsequent encounter for fracture with malunion -M84433S Pathological fracture, right radius, sequela -M84434A Pathological fracture, left radius, initial encounter for fracture -M84434D Pathological fracture, left radius, subsequent encounter for fracture with routine healing -M84434G Pathological fracture, left radius, subsequent encounter for fracture with delayed healing -M84434K Pathological fracture, left radius, subsequent encounter for fracture with nonunion -M84434P Pathological fracture, left radius, subsequent encounter for fracture with malunion -M84434S Pathological fracture, left radius, sequela -M84439A Pathological fracture, unspecified ulna and radius, initial encounter for fracture -M84439D Pathological fracture, unspecified ulna and radius, subsequent encounter for fracture with routine healing -M84439G Pathological fracture, unspecified ulna and radius, subsequent encounter for fracture with delayed healing -M84439K Pathological fracture, unspecified ulna and radius, subsequent encounter for fracture with nonunion -M84439P Pathological fracture, unspecified ulna and radius, subsequent encounter for fracture with malunion -M84439S Pathological fracture, unspecified ulna and radius, sequela -M84441A Pathological fracture, right hand, initial encounter for fracture -M84441D Pathological fracture, right hand, subsequent encounter for fracture with routine healing -M84441G Pathological fracture, right hand, subsequent encounter for fracture with delayed healing -M84441K Pathological fracture, right hand, subsequent encounter for fracture with nonunion -M84441P Pathological fracture, right hand, subsequent encounter for fracture with malunion -M84441S Pathological fracture, right hand, sequela -M84442A Pathological fracture, left hand, initial encounter for fracture -M84442D Pathological fracture, left hand, subsequent encounter for fracture with routine healing -M84442G Pathological fracture, left hand, subsequent encounter for fracture with delayed healing -M84442K Pathological fracture, left hand, subsequent encounter for fracture with nonunion -M84442P Pathological fracture, left hand, subsequent encounter for fracture with malunion -M84442S Pathological fracture, left hand, sequela -M84443A Pathological fracture, unspecified hand, initial encounter for fracture -M84443D Pathological fracture, unspecified hand, subsequent encounter for fracture with routine healing -M84443G Pathological fracture, unspecified hand, subsequent encounter for fracture with delayed healing -M84443K Pathological fracture, unspecified hand, subsequent encounter for fracture with nonunion -M84443P Pathological fracture, unspecified hand, subsequent encounter for fracture with malunion -M84443S Pathological fracture, unspecified hand, sequela -M84444A Pathological fracture, right finger(s), initial encounter for fracture -M84444D Pathological fracture, right finger(s), subsequent encounter for fracture with routine healing -M84444G Pathological fracture, right finger(s), subsequent encounter for fracture with delayed healing -M84444K Pathological fracture, right finger(s), subsequent encounter for fracture with nonunion -M84444P Pathological fracture, right finger(s), subsequent encounter for fracture with malunion -M84444S Pathological fracture, right finger(s), sequela -M84445A Pathological fracture, left finger(s), initial encounter for fracture -M84445D Pathological fracture, left finger(s), subsequent encounter for fracture with routine healing -M84445G Pathological fracture, left finger(s), subsequent encounter for fracture with delayed healing -M84445K Pathological fracture, left finger(s), subsequent encounter for fracture with nonunion -M84445P Pathological fracture, left finger(s), subsequent encounter for fracture with malunion -M84445S Pathological fracture, left finger(s), sequela -M84446A Pathological fracture, unspecified finger(s), initial encounter for fracture -M84446D Pathological fracture, unspecified finger(s), subsequent encounter for fracture with routine healing -M84446G Pathological fracture, unspecified finger(s), subsequent encounter for fracture with delayed healing -M84446K Pathological fracture, unspecified finger(s), subsequent encounter for fracture with nonunion -M84446P Pathological fracture, unspecified finger(s), subsequent encounter for fracture with malunion -M84446S Pathological fracture, unspecified finger(s), sequela -M84451A Pathological fracture, right femur, initial encounter for fracture -M84451D Pathological fracture, right femur, subsequent encounter for fracture with routine healing -M84451G Pathological fracture, right femur, subsequent encounter for fracture with delayed healing -M84451K Pathological fracture, right femur, subsequent encounter for fracture with nonunion -M84451P Pathological fracture, right femur, subsequent encounter for fracture with malunion -M84451S Pathological fracture, right femur, sequela -M84452A Pathological fracture, left femur, initial encounter for fracture -M84452D Pathological fracture, left femur, subsequent encounter for fracture with routine healing -M84452G Pathological fracture, left femur, subsequent encounter for fracture with delayed healing -M84452K Pathological fracture, left femur, subsequent encounter for fracture with nonunion -M84452P Pathological fracture, left femur, subsequent encounter for fracture with malunion -M84452S Pathological fracture, left femur, sequela -M84453A Pathological fracture, unspecified femur, initial encounter for fracture -M84453D Pathological fracture, unspecified femur, subsequent encounter for fracture with routine healing -M84453G Pathological fracture, unspecified femur, subsequent encounter for fracture with delayed healing -M84453K Pathological fracture, unspecified femur, subsequent encounter for fracture with nonunion -M84453P Pathological fracture, unspecified femur, subsequent encounter for fracture with malunion -M84453S Pathological fracture, unspecified femur, sequela -M84454A Pathological fracture, pelvis, initial encounter for fracture -M84454D Pathological fracture, pelvis, subsequent encounter for fracture with routine healing -M84454G Pathological fracture, pelvis, subsequent encounter for fracture with delayed healing -M84454K Pathological fracture, pelvis, subsequent encounter for fracture with nonunion -M84454P Pathological fracture, pelvis, subsequent encounter for fracture with malunion -M84454S Pathological fracture, pelvis, sequela -M84459A Pathological fracture, hip, unspecified, initial encounter for fracture -M84459D Pathological fracture, hip, unspecified, subsequent encounter for fracture with routine healing -M84459G Pathological fracture, hip, unspecified, subsequent encounter for fracture with delayed healing -M84459K Pathological fracture, hip, unspecified, subsequent encounter for fracture with nonunion -M84459P Pathological fracture, hip, unspecified, subsequent encounter for fracture with malunion -M84459S Pathological fracture, hip, unspecified, sequela -M84461A Pathological fracture, right tibia, initial encounter for fracture -M84461D Pathological fracture, right tibia, subsequent encounter for fracture with routine healing -M84461G Pathological fracture, right tibia, subsequent encounter for fracture with delayed healing -M84461K Pathological fracture, right tibia, subsequent encounter for fracture with nonunion -M84461P Pathological fracture, right tibia, subsequent encounter for fracture with malunion -M84461S Pathological fracture, right tibia, sequela -M84462A Pathological fracture, left tibia, initial encounter for fracture -M84462D Pathological fracture, left tibia, subsequent encounter for fracture with routine healing -M84462G Pathological fracture, left tibia, subsequent encounter for fracture with delayed healing -M84462K Pathological fracture, left tibia, subsequent encounter for fracture with nonunion -M84462P Pathological fracture, left tibia, subsequent encounter for fracture with malunion -M84462S Pathological fracture, left tibia, sequela -M84463A Pathological fracture, right fibula, initial encounter for fracture -M84463D Pathological fracture, right fibula, subsequent encounter for fracture with routine healing -M84463G Pathological fracture, right fibula, subsequent encounter for fracture with delayed healing -M84463K Pathological fracture, right fibula, subsequent encounter for fracture with nonunion -M84463P Pathological fracture, right fibula, subsequent encounter for fracture with malunion -M84463S Pathological fracture, right fibula, sequela -M84464A Pathological fracture, left fibula, initial encounter for fracture -M84464D Pathological fracture, left fibula, subsequent encounter for fracture with routine healing -M84464G Pathological fracture, left fibula, subsequent encounter for fracture with delayed healing -M84464K Pathological fracture, left fibula, subsequent encounter for fracture with nonunion -M84464P Pathological fracture, left fibula, subsequent encounter for fracture with malunion -M84464S Pathological fracture, left fibula, sequela -M84469A Pathological fracture, unspecified tibia and fibula, initial encounter for fracture -M84469D Pathological fracture, unspecified tibia and fibula, subsequent encounter for fracture with routine healing -M84469G Pathological fracture, unspecified tibia and fibula, subsequent encounter for fracture with delayed healing -M84469K Pathological fracture, unspecified tibia and fibula, subsequent encounter for fracture with nonunion -M84469P Pathological fracture, unspecified tibia and fibula, subsequent encounter for fracture with malunion -M84469S Pathological fracture, unspecified tibia and fibula, sequela -M84471A Pathological fracture, right ankle, initial encounter for fracture -M84471D Pathological fracture, right ankle, subsequent encounter for fracture with routine healing -M84471G Pathological fracture, right ankle, subsequent encounter for fracture with delayed healing -M84471K Pathological fracture, right ankle, subsequent encounter for fracture with nonunion -M84471P Pathological fracture, right ankle, subsequent encounter for fracture with malunion -M84471S Pathological fracture, right ankle, sequela -M84472A Pathological fracture, left ankle, initial encounter for fracture -M84472D Pathological fracture, left ankle, subsequent encounter for fracture with routine healing -M84472G Pathological fracture, left ankle, subsequent encounter for fracture with delayed healing -M84472K Pathological fracture, left ankle, subsequent encounter for fracture with nonunion -M84472P Pathological fracture, left ankle, subsequent encounter for fracture with malunion -M84472S Pathological fracture, left ankle, sequela -M84473A Pathological fracture, unspecified ankle, initial encounter for fracture -M84473D Pathological fracture, unspecified ankle, subsequent encounter for fracture with routine healing -M84473G Pathological fracture, unspecified ankle, subsequent encounter for fracture with delayed healing -M84473K Pathological fracture, unspecified ankle, subsequent encounter for fracture with nonunion -M84473P Pathological fracture, unspecified ankle, subsequent encounter for fracture with malunion -M84473S Pathological fracture, unspecified ankle, sequela -M84474A Pathological fracture, right foot, initial encounter for fracture -M84474D Pathological fracture, right foot, subsequent encounter for fracture with routine healing -M84474G Pathological fracture, right foot, subsequent encounter for fracture with delayed healing -M84474K Pathological fracture, right foot, subsequent encounter for fracture with nonunion -M84474P Pathological fracture, right foot, subsequent encounter for fracture with malunion -M84474S Pathological fracture, right foot, sequela -M84475A Pathological fracture, left foot, initial encounter for fracture -M84475D Pathological fracture, left foot, subsequent encounter for fracture with routine healing -M84475G Pathological fracture, left foot, subsequent encounter for fracture with delayed healing -M84475K Pathological fracture, left foot, subsequent encounter for fracture with nonunion -M84475P Pathological fracture, left foot, subsequent encounter for fracture with malunion -M84475S Pathological fracture, left foot, sequela -M84476A Pathological fracture, unspecified foot, initial encounter for fracture -M84476D Pathological fracture, unspecified foot, subsequent encounter for fracture with routine healing -M84476G Pathological fracture, unspecified foot, subsequent encounter for fracture with delayed healing -M84476K Pathological fracture, unspecified foot, subsequent encounter for fracture with nonunion -M84476P Pathological fracture, unspecified foot, subsequent encounter for fracture with malunion -M84476S Pathological fracture, unspecified foot, sequela -M84477A Pathological fracture, right toe(s), initial encounter for fracture -M84477D Pathological fracture, right toe(s), subsequent encounter for fracture with routine healing -M84477G Pathological fracture, right toe(s), subsequent encounter for fracture with delayed healing -M84477K Pathological fracture, right toe(s), subsequent encounter for fracture with nonunion -M84477P Pathological fracture, right toe(s), subsequent encounter for fracture with malunion -M84477S Pathological fracture, right toe(s), sequela -M84478A Pathological fracture, left toe(s), initial encounter for fracture -M84478D Pathological fracture, left toe(s), subsequent encounter for fracture with routine healing -M84478G Pathological fracture, left toe(s), subsequent encounter for fracture with delayed healing -M84478K Pathological fracture, left toe(s), subsequent encounter for fracture with nonunion -M84478P Pathological fracture, left toe(s), subsequent encounter for fracture with malunion -M84478S Pathological fracture, left toe(s), sequela -M84479A Pathological fracture, unspecified toe(s), initial encounter for fracture -M84479D Pathological fracture, unspecified toe(s), subsequent encounter for fracture with routine healing -M84479G Pathological fracture, unspecified toe(s), subsequent encounter for fracture with delayed healing -M84479K Pathological fracture, unspecified toe(s), subsequent encounter for fracture with nonunion -M84479P Pathological fracture, unspecified toe(s), subsequent encounter for fracture with malunion -M84479S Pathological fracture, unspecified toe(s), sequela -M8448XA Pathological fracture, other site, initial encounter for fracture -M8448XD Pathological fracture, other site, subsequent encounter for fracture with routine healing -M8448XG Pathological fracture, other site, subsequent encounter for fracture with delayed healing -M8448XK Pathological fracture, other site, subsequent encounter for fracture with nonunion -M8448XP Pathological fracture, other site, subsequent encounter for fracture with malunion -M8448XS Pathological fracture, other site, sequela -M8450XA Pathological fracture in neoplastic disease, unspecified site, initial encounter for fracture -M8450XD Pathological fracture in neoplastic disease, unspecified site, subsequent encounter for fracture with routine healing -M8450XG Pathological fracture in neoplastic disease, unspecified site, subsequent encounter for fracture with delayed healing -M8450XK Pathological fracture in neoplastic disease, unspecified site, subsequent encounter for fracture with nonunion -M8450XP Pathological fracture in neoplastic disease, unspecified site, subsequent encounter for fracture with malunion -M8450XS Pathological fracture in neoplastic disease, unspecified site, sequela -M84511A Pathological fracture in neoplastic disease, right shoulder, initial encounter for fracture -M84511D Pathological fracture in neoplastic disease, right shoulder, subsequent encounter for fracture with routine healing -M84511G Pathological fracture in neoplastic disease, right shoulder, subsequent encounter for fracture with delayed healing -M84511K Pathological fracture in neoplastic disease, right shoulder, subsequent encounter for fracture with nonunion -M84511P Pathological fracture in neoplastic disease, right shoulder, subsequent encounter for fracture with malunion -M84511S Pathological fracture in neoplastic disease, right shoulder, sequela -M84512A Pathological fracture in neoplastic disease, left shoulder, initial encounter for fracture -M84512D Pathological fracture in neoplastic disease, left shoulder, subsequent encounter for fracture with routine healing -M84512G Pathological fracture in neoplastic disease, left shoulder, subsequent encounter for fracture with delayed healing -M84512K Pathological fracture in neoplastic disease, left shoulder, subsequent encounter for fracture with nonunion -M84512P Pathological fracture in neoplastic disease, left shoulder, subsequent encounter for fracture with malunion -M84512S Pathological fracture in neoplastic disease, left shoulder, sequela -M84519A Pathological fracture in neoplastic disease, unspecified shoulder, initial encounter for fracture -M84519D Pathological fracture in neoplastic disease, unspecified shoulder, subsequent encounter for fracture with routine healing -M84519G Pathological fracture in neoplastic disease, unspecified shoulder, subsequent encounter for fracture with delayed healing -M84519K Pathological fracture in neoplastic disease, unspecified shoulder, subsequent encounter for fracture with nonunion -M84519P Pathological fracture in neoplastic disease, unspecified shoulder, subsequent encounter for fracture with malunion -M84519S Pathological fracture in neoplastic disease, unspecified shoulder, sequela -M84521A Pathological fracture in neoplastic disease, right humerus, initial encounter for fracture -M84521D Pathological fracture in neoplastic disease, right humerus, subsequent encounter for fracture with routine healing -M84521G Pathological fracture in neoplastic disease, right humerus, subsequent encounter for fracture with delayed healing -M84521K Pathological fracture in neoplastic disease, right humerus, subsequent encounter for fracture with nonunion -M84521P Pathological fracture in neoplastic disease, right humerus, subsequent encounter for fracture with malunion -M84521S Pathological fracture in neoplastic disease, right humerus, sequela -M84522A Pathological fracture in neoplastic disease, left humerus, initial encounter for fracture -M84522D Pathological fracture in neoplastic disease, left humerus, subsequent encounter for fracture with routine healing -M84522G Pathological fracture in neoplastic disease, left humerus, subsequent encounter for fracture with delayed healing -M84522K Pathological fracture in neoplastic disease, left humerus, subsequent encounter for fracture with nonunion -M84522P Pathological fracture in neoplastic disease, left humerus, subsequent encounter for fracture with malunion -M84522S Pathological fracture in neoplastic disease, left humerus, sequela -M84529A Pathological fracture in neoplastic disease, unspecified humerus, initial encounter for fracture -M84529D Pathological fracture in neoplastic disease, unspecified humerus, subsequent encounter for fracture with routine healing -M84529G Pathological fracture in neoplastic disease, unspecified humerus, subsequent encounter for fracture with delayed healing -M84529K Pathological fracture in neoplastic disease, unspecified humerus, subsequent encounter for fracture with nonunion -M84529P Pathological fracture in neoplastic disease, unspecified humerus, subsequent encounter for fracture with malunion -M84529S Pathological fracture in neoplastic disease, unspecified humerus, sequela -M84531A Pathological fracture in neoplastic disease, right ulna, initial encounter for fracture -M84531D Pathological fracture in neoplastic disease, right ulna, subsequent encounter for fracture with routine healing -M84531G Pathological fracture in neoplastic disease, right ulna, subsequent encounter for fracture with delayed healing -M84531K Pathological fracture in neoplastic disease, right ulna, subsequent encounter for fracture with nonunion -M84531P Pathological fracture in neoplastic disease, right ulna, subsequent encounter for fracture with malunion -M84531S Pathological fracture in neoplastic disease, right ulna, sequela -M84532A Pathological fracture in neoplastic disease, left ulna, initial encounter for fracture -M84532D Pathological fracture in neoplastic disease, left ulna, subsequent encounter for fracture with routine healing -M84532G Pathological fracture in neoplastic disease, left ulna, subsequent encounter for fracture with delayed healing -M84532K Pathological fracture in neoplastic disease, left ulna, subsequent encounter for fracture with nonunion -M84532P Pathological fracture in neoplastic disease, left ulna, subsequent encounter for fracture with malunion -M84532S Pathological fracture in neoplastic disease, left ulna, sequela -M84533A Pathological fracture in neoplastic disease, right radius, initial encounter for fracture -M84533D Pathological fracture in neoplastic disease, right radius, subsequent encounter for fracture with routine healing -M84533G Pathological fracture in neoplastic disease, right radius, subsequent encounter for fracture with delayed healing -M84533K Pathological fracture in neoplastic disease, right radius, subsequent encounter for fracture with nonunion -M84533P Pathological fracture in neoplastic disease, right radius, subsequent encounter for fracture with malunion -M84533S Pathological fracture in neoplastic disease, right radius, sequela -M84534A Pathological fracture in neoplastic disease, left radius, initial encounter for fracture -M84534D Pathological fracture in neoplastic disease, left radius, subsequent encounter for fracture with routine healing -M84534G Pathological fracture in neoplastic disease, left radius, subsequent encounter for fracture with delayed healing -M84534K Pathological fracture in neoplastic disease, left radius, subsequent encounter for fracture with nonunion -M84534P Pathological fracture in neoplastic disease, left radius, subsequent encounter for fracture with malunion -M84534S Pathological fracture in neoplastic disease, left radius, sequela -M84539A Pathological fracture in neoplastic disease, unspecified ulna and radius, initial encounter for fracture -M84539D Pathological fracture in neoplastic disease, unspecified ulna and radius, subsequent encounter for fracture with routine healing -M84539G Pathological fracture in neoplastic disease, unspecified ulna and radius, subsequent encounter for fracture with delayed healing -M84539K Pathological fracture in neoplastic disease, unspecified ulna and radius, subsequent encounter for fracture with nonunion -M84539P Pathological fracture in neoplastic disease, unspecified ulna and radius, subsequent encounter for fracture with malunion -M84539S Pathological fracture in neoplastic disease, unspecified ulna and radius, sequela -M84541A Pathological fracture in neoplastic disease, right hand, initial encounter for fracture -M84541D Pathological fracture in neoplastic disease, right hand, subsequent encounter for fracture with routine healing -M84541G Pathological fracture in neoplastic disease, right hand, subsequent encounter for fracture with delayed healing -M84541K Pathological fracture in neoplastic disease, right hand, subsequent encounter for fracture with nonunion -M84541P Pathological fracture in neoplastic disease, right hand, subsequent encounter for fracture with malunion -M84541S Pathological fracture in neoplastic disease, right hand, sequela -M84542A Pathological fracture in neoplastic disease, left hand, initial encounter for fracture -M84542D Pathological fracture in neoplastic disease, left hand, subsequent encounter for fracture with routine healing -M84542G Pathological fracture in neoplastic disease, left hand, subsequent encounter for fracture with delayed healing -M84542K Pathological fracture in neoplastic disease, left hand, subsequent encounter for fracture with nonunion -M84542P Pathological fracture in neoplastic disease, left hand, subsequent encounter for fracture with malunion -M84542S Pathological fracture in neoplastic disease, left hand, sequela -M84549A Pathological fracture in neoplastic disease, unspecified hand, initial encounter for fracture -M84549D Pathological fracture in neoplastic disease, unspecified hand, subsequent encounter for fracture with routine healing -M84549G Pathological fracture in neoplastic disease, unspecified hand, subsequent encounter for fracture with delayed healing -M84549K Pathological fracture in neoplastic disease, unspecified hand, subsequent encounter for fracture with nonunion -M84549P Pathological fracture in neoplastic disease, unspecified hand, subsequent encounter for fracture with malunion -M84549S Pathological fracture in neoplastic disease, unspecified hand, sequela -M84550A Pathological fracture in neoplastic disease, pelvis, initial encounter for fracture -M84550D Pathological fracture in neoplastic disease, pelvis, subsequent encounter for fracture with routine healing -M84550G Pathological fracture in neoplastic disease, pelvis, subsequent encounter for fracture with delayed healing -M84550K Pathological fracture in neoplastic disease, pelvis, subsequent encounter for fracture with nonunion -M84550P Pathological fracture in neoplastic disease, pelvis, subsequent encounter for fracture with malunion -M84550S Pathological fracture in neoplastic disease, pelvis, sequela -M84551A Pathological fracture in neoplastic disease, right femur, initial encounter for fracture -M84551D Pathological fracture in neoplastic disease, right femur, subsequent encounter for fracture with routine healing -M84551G Pathological fracture in neoplastic disease, right femur, subsequent encounter for fracture with delayed healing -M84551K Pathological fracture in neoplastic disease, right femur, subsequent encounter for fracture with nonunion -M84551P Pathological fracture in neoplastic disease, right femur, subsequent encounter for fracture with malunion -M84551S Pathological fracture in neoplastic disease, right femur, sequela -M84552A Pathological fracture in neoplastic disease, left femur, initial encounter for fracture -M84552D Pathological fracture in neoplastic disease, left femur, subsequent encounter for fracture with routine healing -M84552G Pathological fracture in neoplastic disease, left femur, subsequent encounter for fracture with delayed healing -M84552K Pathological fracture in neoplastic disease, left femur, subsequent encounter for fracture with nonunion -M84552P Pathological fracture in neoplastic disease, left femur, subsequent encounter for fracture with malunion -M84552S Pathological fracture in neoplastic disease, left femur, sequela -M84553A Pathological fracture in neoplastic disease, unspecified femur, initial encounter for fracture -M84553D Pathological fracture in neoplastic disease, unspecified femur, subsequent encounter for fracture with routine healing -M84553G Pathological fracture in neoplastic disease, unspecified femur, subsequent encounter for fracture with delayed healing -M84553K Pathological fracture in neoplastic disease, unspecified femur, subsequent encounter for fracture with nonunion -M84553P Pathological fracture in neoplastic disease, unspecified femur, subsequent encounter for fracture with malunion -M84553S Pathological fracture in neoplastic disease, unspecified femur, sequela -M84559A Pathological fracture in neoplastic disease, hip, unspecified, initial encounter for fracture -M84559D Pathological fracture in neoplastic disease, hip, unspecified, subsequent encounter for fracture with routine healing -M84559G Pathological fracture in neoplastic disease, hip, unspecified, subsequent encounter for fracture with delayed healing -M84559K Pathological fracture in neoplastic disease, hip, unspecified, subsequent encounter for fracture with nonunion -M84559P Pathological fracture in neoplastic disease, hip, unspecified, subsequent encounter for fracture with malunion -M84559S Pathological fracture in neoplastic disease, hip, unspecified, sequela -M84561A Pathological fracture in neoplastic disease, right tibia, initial encounter for fracture -M84561D Pathological fracture in neoplastic disease, right tibia, subsequent encounter for fracture with routine healing -M84561G Pathological fracture in neoplastic disease, right tibia, subsequent encounter for fracture with delayed healing -M84561K Pathological fracture in neoplastic disease, right tibia, subsequent encounter for fracture with nonunion -M84561P Pathological fracture in neoplastic disease, right tibia, subsequent encounter for fracture with malunion -M84561S Pathological fracture in neoplastic disease, right tibia, sequela -M84562A Pathological fracture in neoplastic disease, left tibia, initial encounter for fracture -M84562D Pathological fracture in neoplastic disease, left tibia, subsequent encounter for fracture with routine healing -M84562G Pathological fracture in neoplastic disease, left tibia, subsequent encounter for fracture with delayed healing -M84562K Pathological fracture in neoplastic disease, left tibia, subsequent encounter for fracture with nonunion -M84562P Pathological fracture in neoplastic disease, left tibia, subsequent encounter for fracture with malunion -M84562S Pathological fracture in neoplastic disease, left tibia, sequela -M84563A Pathological fracture in neoplastic disease, right fibula, initial encounter for fracture -M84563D Pathological fracture in neoplastic disease, right fibula, subsequent encounter for fracture with routine healing -M84563G Pathological fracture in neoplastic disease, right fibula, subsequent encounter for fracture with delayed healing -M84563K Pathological fracture in neoplastic disease, right fibula, subsequent encounter for fracture with nonunion -M84563P Pathological fracture in neoplastic disease, right fibula, subsequent encounter for fracture with malunion -M84563S Pathological fracture in neoplastic disease, right fibula, sequela -M84564A Pathological fracture in neoplastic disease, left fibula, initial encounter for fracture -M84564D Pathological fracture in neoplastic disease, left fibula, subsequent encounter for fracture with routine healing -M84564G Pathological fracture in neoplastic disease, left fibula, subsequent encounter for fracture with delayed healing -M84564K Pathological fracture in neoplastic disease, left fibula, subsequent encounter for fracture with nonunion -M84564P Pathological fracture in neoplastic disease, left fibula, subsequent encounter for fracture with malunion -M84564S Pathological fracture in neoplastic disease, left fibula, sequela -M84569A Pathological fracture in neoplastic disease, unspecified tibia and fibula, initial encounter for fracture -M84569D Pathological fracture in neoplastic disease, unspecified tibia and fibula, subsequent encounter for fracture with routine healing -M84569G Pathological fracture in neoplastic disease, unspecified tibia and fibula, subsequent encounter for fracture with delayed healing -M84569K Pathological fracture in neoplastic disease, unspecified tibia and fibula, subsequent encounter for fracture with nonunion -M84569P Pathological fracture in neoplastic disease, unspecified tibia and fibula, subsequent encounter for fracture with malunion -M84569S Pathological fracture in neoplastic disease, unspecified tibia and fibula, sequela -M84571A Pathological fracture in neoplastic disease, right ankle, initial encounter for fracture -M84571D Pathological fracture in neoplastic disease, right ankle, subsequent encounter for fracture with routine healing -M84571G Pathological fracture in neoplastic disease, right ankle, subsequent encounter for fracture with delayed healing -M84571K Pathological fracture in neoplastic disease, right ankle, subsequent encounter for fracture with nonunion -M84571P Pathological fracture in neoplastic disease, right ankle, subsequent encounter for fracture with malunion -M84571S Pathological fracture in neoplastic disease, right ankle, sequela -M84572A Pathological fracture in neoplastic disease, left ankle, initial encounter for fracture -M84572D Pathological fracture in neoplastic disease, left ankle, subsequent encounter for fracture with routine healing -M84572G Pathological fracture in neoplastic disease, left ankle, subsequent encounter for fracture with delayed healing -M84572K Pathological fracture in neoplastic disease, left ankle, subsequent encounter for fracture with nonunion -M84572P Pathological fracture in neoplastic disease, left ankle, subsequent encounter for fracture with malunion -M84572S Pathological fracture in neoplastic disease, left ankle, sequela -M84573A Pathological fracture in neoplastic disease, unspecified ankle, initial encounter for fracture -M84573D Pathological fracture in neoplastic disease, unspecified ankle, subsequent encounter for fracture with routine healing -M84573G Pathological fracture in neoplastic disease, unspecified ankle, subsequent encounter for fracture with delayed healing -M84573K Pathological fracture in neoplastic disease, unspecified ankle, subsequent encounter for fracture with nonunion -M84573P Pathological fracture in neoplastic disease, unspecified ankle, subsequent encounter for fracture with malunion -M84573S Pathological fracture in neoplastic disease, unspecified ankle, sequela -M84574A Pathological fracture in neoplastic disease, right foot, initial encounter for fracture -M84574D Pathological fracture in neoplastic disease, right foot, subsequent encounter for fracture with routine healing -M84574G Pathological fracture in neoplastic disease, right foot, subsequent encounter for fracture with delayed healing -M84574K Pathological fracture in neoplastic disease, right foot, subsequent encounter for fracture with nonunion -M84574P Pathological fracture in neoplastic disease, right foot, subsequent encounter for fracture with malunion -M84574S Pathological fracture in neoplastic disease, right foot, sequela -M84575A Pathological fracture in neoplastic disease, left foot, initial encounter for fracture -M84575D Pathological fracture in neoplastic disease, left foot, subsequent encounter for fracture with routine healing -M84575G Pathological fracture in neoplastic disease, left foot, subsequent encounter for fracture with delayed healing -M84575K Pathological fracture in neoplastic disease, left foot, subsequent encounter for fracture with nonunion -M84575P Pathological fracture in neoplastic disease, left foot, subsequent encounter for fracture with malunion -M84575S Pathological fracture in neoplastic disease, left foot, sequela -M84576A Pathological fracture in neoplastic disease, unspecified foot, initial encounter for fracture -M84576D Pathological fracture in neoplastic disease, unspecified foot, subsequent encounter for fracture with routine healing -M84576G Pathological fracture in neoplastic disease, unspecified foot, subsequent encounter for fracture with delayed healing -M84576K Pathological fracture in neoplastic disease, unspecified foot, subsequent encounter for fracture with nonunion -M84576P Pathological fracture in neoplastic disease, unspecified foot, subsequent encounter for fracture with malunion -M84576S Pathological fracture in neoplastic disease, unspecified foot, sequela -M8458XA Pathological fracture in neoplastic disease, other specified site, initial encounter for fracture -M8458XD Pathological fracture in neoplastic disease, other specified site, subsequent encounter for fracture with routine healing -M8458XG Pathological fracture in neoplastic disease, other specified site, subsequent encounter for fracture with delayed healing -M8458XK Pathological fracture in neoplastic disease, other specified site, subsequent encounter for fracture with nonunion -M8458XP Pathological fracture in neoplastic disease, other specified site, subsequent encounter for fracture with malunion -M8458XS Pathological fracture in neoplastic disease, other specified site, sequela -M8460XA Pathological fracture in other disease, unspecified site, initial encounter for fracture -M8460XD Pathological fracture in other disease, unspecified site, subsequent encounter for fracture with routine healing -M8460XG Pathological fracture in other disease, unspecified site, subsequent encounter for fracture with delayed healing -M8460XK Pathological fracture in other disease, unspecified site, subsequent encounter for fracture with nonunion -M8460XP Pathological fracture in other disease, unspecified site, subsequent encounter for fracture with malunion -M8460XS Pathological fracture in other disease, unspecified site, sequela -M84611A Pathological fracture in other disease, right shoulder, initial encounter for fracture -M84611D Pathological fracture in other disease, right shoulder, subsequent encounter for fracture with routine healing -M84611G Pathological fracture in other disease, right shoulder, subsequent encounter for fracture with delayed healing -M84611K Pathological fracture in other disease, right shoulder, subsequent encounter for fracture with nonunion -M84611P Pathological fracture in other disease, right shoulder, subsequent encounter for fracture with malunion -M84611S Pathological fracture in other disease, right shoulder, sequela -M84612A Pathological fracture in other disease, left shoulder, initial encounter for fracture -M84612D Pathological fracture in other disease, left shoulder, subsequent encounter for fracture with routine healing -M84612G Pathological fracture in other disease, left shoulder, subsequent encounter for fracture with delayed healing -M84612K Pathological fracture in other disease, left shoulder, subsequent encounter for fracture with nonunion -M84612P Pathological fracture in other disease, left shoulder, subsequent encounter for fracture with malunion -M84612S Pathological fracture in other disease, left shoulder, sequela -M84619A Pathological fracture in other disease, unspecified shoulder, initial encounter for fracture -M84619D Pathological fracture in other disease, unspecified shoulder, subsequent encounter for fracture with routine healing -M84619G Pathological fracture in other disease, unspecified shoulder, subsequent encounter for fracture with delayed healing -M84619K Pathological fracture in other disease, unspecified shoulder, subsequent encounter for fracture with nonunion -M84619P Pathological fracture in other disease, unspecified shoulder, subsequent encounter for fracture with malunion -M84619S Pathological fracture in other disease, unspecified shoulder, sequela -M84621A Pathological fracture in other disease, right humerus, initial encounter for fracture -M84621D Pathological fracture in other disease, right humerus, subsequent encounter for fracture with routine healing -M84621G Pathological fracture in other disease, right humerus, subsequent encounter for fracture with delayed healing -M84621K Pathological fracture in other disease, right humerus, subsequent encounter for fracture with nonunion -M84621P Pathological fracture in other disease, right humerus, subsequent encounter for fracture with malunion -M84621S Pathological fracture in other disease, right humerus, sequela -M84622A Pathological fracture in other disease, left humerus, initial encounter for fracture -M84622D Pathological fracture in other disease, left humerus, subsequent encounter for fracture with routine healing -M84622G Pathological fracture in other disease, left humerus, subsequent encounter for fracture with delayed healing -M84622K Pathological fracture in other disease, left humerus, subsequent encounter for fracture with nonunion -M84622P Pathological fracture in other disease, left humerus, subsequent encounter for fracture with malunion -M84622S Pathological fracture in other disease, left humerus, sequela -M84629A Pathological fracture in other disease, unspecified humerus, initial encounter for fracture -M84629D Pathological fracture in other disease, unspecified humerus, subsequent encounter for fracture with routine healing -M84629G Pathological fracture in other disease, unspecified humerus, subsequent encounter for fracture with delayed healing -M84629K Pathological fracture in other disease, unspecified humerus, subsequent encounter for fracture with nonunion -M84629P Pathological fracture in other disease, unspecified humerus, subsequent encounter for fracture with malunion -M84629S Pathological fracture in other disease, unspecified humerus, sequela -M84631A Pathological fracture in other disease, right ulna, initial encounter for fracture -M84631D Pathological fracture in other disease, right ulna, subsequent encounter for fracture with routine healing -M84631G Pathological fracture in other disease, right ulna, subsequent encounter for fracture with delayed healing -M84631K Pathological fracture in other disease, right ulna, subsequent encounter for fracture with nonunion -M84631P Pathological fracture in other disease, right ulna, subsequent encounter for fracture with malunion -M84631S Pathological fracture in other disease, right ulna, sequela -M84632A Pathological fracture in other disease, left ulna, initial encounter for fracture -M84632D Pathological fracture in other disease, left ulna, subsequent encounter for fracture with routine healing -M84632G Pathological fracture in other disease, left ulna, subsequent encounter for fracture with delayed healing -M84632K Pathological fracture in other disease, left ulna, subsequent encounter for fracture with nonunion -M84632P Pathological fracture in other disease, left ulna, subsequent encounter for fracture with malunion -M84632S Pathological fracture in other disease, left ulna, sequela -M84633A Pathological fracture in other disease, right radius, initial encounter for fracture -M84633D Pathological fracture in other disease, right radius, subsequent encounter for fracture with routine healing -M84633G Pathological fracture in other disease, right radius, subsequent encounter for fracture with delayed healing -M84633K Pathological fracture in other disease, right radius, subsequent encounter for fracture with nonunion -M84633P Pathological fracture in other disease, right radius, subsequent encounter for fracture with malunion -M84633S Pathological fracture in other disease, right radius, sequela -M84634A Pathological fracture in other disease, left radius, initial encounter for fracture -M84634D Pathological fracture in other disease, left radius, subsequent encounter for fracture with routine healing -M84634G Pathological fracture in other disease, left radius, subsequent encounter for fracture with delayed healing -M84634K Pathological fracture in other disease, left radius, subsequent encounter for fracture with nonunion -M84634P Pathological fracture in other disease, left radius, subsequent encounter for fracture with malunion -M84634S Pathological fracture in other disease, left radius, sequela -M84639A Pathological fracture in other disease, unspecified ulna and radius, initial encounter for fracture -M84639D Pathological fracture in other disease, unspecified ulna and radius, subsequent encounter for fracture with routine healing -M84639G Pathological fracture in other disease, unspecified ulna and radius, subsequent encounter for fracture with delayed healing -M84639K Pathological fracture in other disease, unspecified ulna and radius, subsequent encounter for fracture with nonunion -M84639P Pathological fracture in other disease, unspecified ulna and radius, subsequent encounter for fracture with malunion -M84639S Pathological fracture in other disease, unspecified ulna and radius, sequela -M84641A Pathological fracture in other disease, right hand, initial encounter for fracture -M84641D Pathological fracture in other disease, right hand, subsequent encounter for fracture with routine healing -M84641G Pathological fracture in other disease, right hand, subsequent encounter for fracture with delayed healing -M84641K Pathological fracture in other disease, right hand, subsequent encounter for fracture with nonunion -M84641P Pathological fracture in other disease, right hand, subsequent encounter for fracture with malunion -M84641S Pathological fracture in other disease, right hand, sequela -M84642A Pathological fracture in other disease, left hand, initial encounter for fracture -M84642D Pathological fracture in other disease, left hand, subsequent encounter for fracture with routine healing -M84642G Pathological fracture in other disease, left hand, subsequent encounter for fracture with delayed healing -M84642K Pathological fracture in other disease, left hand, subsequent encounter for fracture with nonunion -M84642P Pathological fracture in other disease, left hand, subsequent encounter for fracture with malunion -M84642S Pathological fracture in other disease, left hand, sequela -M84649A Pathological fracture in other disease, unspecified hand, initial encounter for fracture -M84649D Pathological fracture in other disease, unspecified hand, subsequent encounter for fracture with routine healing -M84649G Pathological fracture in other disease, unspecified hand, subsequent encounter for fracture with delayed healing -M84649K Pathological fracture in other disease, unspecified hand, subsequent encounter for fracture with nonunion -M84649P Pathological fracture in other disease, unspecified hand, subsequent encounter for fracture with malunion -M84649S Pathological fracture in other disease, unspecified hand, sequela -M84650A Pathological fracture in other disease, pelvis, initial encounter for fracture -M84650D Pathological fracture in other disease, pelvis, subsequent encounter for fracture with routine healing -M84650G Pathological fracture in other disease, pelvis, subsequent encounter for fracture with delayed healing -M84650K Pathological fracture in other disease, pelvis, subsequent encounter for fracture with nonunion -M84650P Pathological fracture in other disease, pelvis, subsequent encounter for fracture with malunion -M84650S Pathological fracture in other disease, pelvis, sequela -M84651A Pathological fracture in other disease, right femur, initial encounter for fracture -M84651D Pathological fracture in other disease, right femur, subsequent encounter for fracture with routine healing -M84651G Pathological fracture in other disease, right femur, subsequent encounter for fracture with delayed healing -M84651K Pathological fracture in other disease, right femur, subsequent encounter for fracture with nonunion -M84651P Pathological fracture in other disease, right femur, subsequent encounter for fracture with malunion -M84651S Pathological fracture in other disease, right femur, sequela -M84652A Pathological fracture in other disease, left femur, initial encounter for fracture -M84652D Pathological fracture in other disease, left femur, subsequent encounter for fracture with routine healing -M84652G Pathological fracture in other disease, left femur, subsequent encounter for fracture with delayed healing -M84652K Pathological fracture in other disease, left femur, subsequent encounter for fracture with nonunion -M84652P Pathological fracture in other disease, left femur, subsequent encounter for fracture with malunion -M84652S Pathological fracture in other disease, left femur, sequela -M84653A Pathological fracture in other disease, unspecified femur, initial encounter for fracture -M84653D Pathological fracture in other disease, unspecified femur, subsequent encounter for fracture with routine healing -M84653G Pathological fracture in other disease, unspecified femur, subsequent encounter for fracture with delayed healing -M84653K Pathological fracture in other disease, unspecified femur, subsequent encounter for fracture with nonunion -M84653P Pathological fracture in other disease, unspecified femur, subsequent encounter for fracture with malunion -M84653S Pathological fracture in other disease, unspecified femur, sequela -M84659A Pathological fracture in other disease, hip, unspecified, initial encounter for fracture -M84659D Pathological fracture in other disease, hip, unspecified, subsequent encounter for fracture with routine healing -M84659G Pathological fracture in other disease, hip, unspecified, subsequent encounter for fracture with delayed healing -M84659K Pathological fracture in other disease, hip, unspecified, subsequent encounter for fracture with nonunion -M84659P Pathological fracture in other disease, hip, unspecified, subsequent encounter for fracture with malunion -M84659S Pathological fracture in other disease, hip, unspecified, sequela -M84661A Pathological fracture in other disease, right tibia, initial encounter for fracture -M84661D Pathological fracture in other disease, right tibia, subsequent encounter for fracture with routine healing -M84661G Pathological fracture in other disease, right tibia, subsequent encounter for fracture with delayed healing -M84661K Pathological fracture in other disease, right tibia, subsequent encounter for fracture with nonunion -M84661P Pathological fracture in other disease, right tibia, subsequent encounter for fracture with malunion -M84661S Pathological fracture in other disease, right tibia, sequela -M84662A Pathological fracture in other disease, left tibia, initial encounter for fracture -M84662D Pathological fracture in other disease, left tibia, subsequent encounter for fracture with routine healing -M84662G Pathological fracture in other disease, left tibia, subsequent encounter for fracture with delayed healing -M84662K Pathological fracture in other disease, left tibia, subsequent encounter for fracture with nonunion -M84662P Pathological fracture in other disease, left tibia, subsequent encounter for fracture with malunion -M84662S Pathological fracture in other disease, left tibia, sequela -M84663A Pathological fracture in other disease, right fibula, initial encounter for fracture -M84663D Pathological fracture in other disease, right fibula, subsequent encounter for fracture with routine healing -M84663G Pathological fracture in other disease, right fibula, subsequent encounter for fracture with delayed healing -M84663K Pathological fracture in other disease, right fibula, subsequent encounter for fracture with nonunion -M84663P Pathological fracture in other disease, right fibula, subsequent encounter for fracture with malunion -M84663S Pathological fracture in other disease, right fibula, sequela -M84664A Pathological fracture in other disease, left fibula, initial encounter for fracture -M84664D Pathological fracture in other disease, left fibula, subsequent encounter for fracture with routine healing -M84664G Pathological fracture in other disease, left fibula, subsequent encounter for fracture with delayed healing -M84664K Pathological fracture in other disease, left fibula, subsequent encounter for fracture with nonunion -M84664P Pathological fracture in other disease, left fibula, subsequent encounter for fracture with malunion -M84664S Pathological fracture in other disease, left fibula, sequela -M84669A Pathological fracture in other disease, unspecified tibia and fibula, initial encounter for fracture -M84669D Pathological fracture in other disease, unspecified tibia and fibula, subsequent encounter for fracture with routine healing -M84669G Pathological fracture in other disease, unspecified tibia and fibula, subsequent encounter for fracture with delayed healing -M84669K Pathological fracture in other disease, unspecified tibia and fibula, subsequent encounter for fracture with nonunion -M84669P Pathological fracture in other disease, unspecified tibia and fibula, subsequent encounter for fracture with malunion -M84669S Pathological fracture in other disease, unspecified tibia and fibula, sequela -M84671A Pathological fracture in other disease, right ankle, initial encounter for fracture -M84671D Pathological fracture in other disease, right ankle, subsequent encounter for fracture with routine healing -M84671G Pathological fracture in other disease, right ankle, subsequent encounter for fracture with delayed healing -M84671K Pathological fracture in other disease, right ankle, subsequent encounter for fracture with nonunion -M84671P Pathological fracture in other disease, right ankle, subsequent encounter for fracture with malunion -M84671S Pathological fracture in other disease, right ankle, sequela -M84672A Pathological fracture in other disease, left ankle, initial encounter for fracture -M84672D Pathological fracture in other disease, left ankle, subsequent encounter for fracture with routine healing -M84672G Pathological fracture in other disease, left ankle, subsequent encounter for fracture with delayed healing -M84672K Pathological fracture in other disease, left ankle, subsequent encounter for fracture with nonunion -M84672P Pathological fracture in other disease, left ankle, subsequent encounter for fracture with malunion -M84672S Pathological fracture in other disease, left ankle, sequela -M84673A Pathological fracture in other disease, unspecified ankle, initial encounter for fracture -M84673D Pathological fracture in other disease, unspecified ankle, subsequent encounter for fracture with routine healing -M84673G Pathological fracture in other disease, unspecified ankle, subsequent encounter for fracture with delayed healing -M84673K Pathological fracture in other disease, unspecified ankle, subsequent encounter for fracture with nonunion -M84673P Pathological fracture in other disease, unspecified ankle, subsequent encounter for fracture with malunion -M84673S Pathological fracture in other disease, unspecified ankle, sequela -M84674A Pathological fracture in other disease, right foot, initial encounter for fracture -M84674D Pathological fracture in other disease, right foot, subsequent encounter for fracture with routine healing -M84674G Pathological fracture in other disease, right foot, subsequent encounter for fracture with delayed healing -M84674K Pathological fracture in other disease, right foot, subsequent encounter for fracture with nonunion -M84674P Pathological fracture in other disease, right foot, subsequent encounter for fracture with malunion -M84674S Pathological fracture in other disease, right foot, sequela -M84675A Pathological fracture in other disease, left foot, initial encounter for fracture -M84675D Pathological fracture in other disease, left foot, subsequent encounter for fracture with routine healing -M84675G Pathological fracture in other disease, left foot, subsequent encounter for fracture with delayed healing -M84675K Pathological fracture in other disease, left foot, subsequent encounter for fracture with nonunion -M84675P Pathological fracture in other disease, left foot, subsequent encounter for fracture with malunion -M84675S Pathological fracture in other disease, left foot, sequela -M84676A Pathological fracture in other disease, unspecified foot, initial encounter for fracture -M84676D Pathological fracture in other disease, unspecified foot, subsequent encounter for fracture with routine healing -M84676G Pathological fracture in other disease, unspecified foot, subsequent encounter for fracture with delayed healing -M84676K Pathological fracture in other disease, unspecified foot, subsequent encounter for fracture with nonunion -M84676P Pathological fracture in other disease, unspecified foot, subsequent encounter for fracture with malunion -M84676S Pathological fracture in other disease, unspecified foot, sequela -M8468XA Pathological fracture in other disease, other site, initial encounter for fracture -M8468XD Pathological fracture in other disease, other site, subsequent encounter for fracture with routine healing -M8468XG Pathological fracture in other disease, other site, subsequent encounter for fracture with delayed healing -M8468XK Pathological fracture in other disease, other site, subsequent encounter for fracture with nonunion -M8468XP Pathological fracture in other disease, other site, subsequent encounter for fracture with malunion -M8468XS Pathological fracture in other disease, other site, sequela -M84750A Atypical femoral fracture, unspecified, initial encounter for fracture -M84750D Atypical femoral fracture, unspecified, subsequent encounter for fracture with routine healing -M84750G Atypical femoral fracture, unspecified, subsequent encounter for fracture with delayed healing -M84750K Atypical femoral fracture, unspecified, subsequent encounter for fracture with nonunion -M84750P Atypical femoral fracture, unspecified, subsequent encounter for fracture with malunion -M84750S Atypical femoral fracture, unspecified, sequela -M84751A Incomplete atypical femoral fracture, right leg, initial encounter for fracture -M84751D Incomplete atypical femoral fracture, right leg, subsequent encounter for fracture with routine healing -M84751G Incomplete atypical femoral fracture, right leg, subsequent encounter for fracture with delayed healing -M84751K Incomplete atypical femoral fracture, right leg, subsequent encounter for fracture with nonunion -M84751P Incomplete atypical femoral fracture, right leg, subsequent encounter for fracture with malunion -M84751S Incomplete atypical femoral fracture, right leg, sequela -M84752A Incomplete atypical femoral fracture, left leg, initial encounter for fracture -M84752D Incomplete atypical femoral fracture, left leg, subsequent encounter for fracture with routine healing -M84752G Incomplete atypical femoral fracture, left leg, subsequent encounter for fracture with delayed healing -M84752K Incomplete atypical femoral fracture, left leg, subsequent encounter for fracture with nonunion -M84752P Incomplete atypical femoral fracture, left leg, subsequent encounter for fracture with malunion -M84752S Incomplete atypical femoral fracture, left leg, sequela -M84753A Incomplete atypical femoral fracture, unspecified leg, initial encounter for fracture -M84753D Incomplete atypical femoral fracture, unspecified leg, subsequent encounter for fracture with routine healing -M84753G Incomplete atypical femoral fracture, unspecified leg, subsequent encounter for fracture with delayed healing -M84753K Incomplete atypical femoral fracture, unspecified leg, subsequent encounter for fracture with nonunion -M84753P Incomplete atypical femoral fracture, unspecified leg, subsequent encounter for fracture with malunion -M84753S Incomplete atypical femoral fracture, unspecified leg, sequela -M84754A Complete transverse atypical femoral fracture, right leg, initial encounter for fracture -M84754D Complete transverse atypical femoral fracture, right leg, subsequent encounter for fracture with routine healing -M84754G Complete transverse atypical femoral fracture, right leg, subsequent encounter for fracture with delayed healing -M84754K Complete transverse atypical femoral fracture, right leg, subsequent encounter for fracture with nonunion -M84754P Complete transverse atypical femoral fracture, right leg, subsequent encounter for fracture with malunion -M84754S Complete transverse atypical femoral fracture, right leg, sequela -M84755A Complete transverse atypical femoral fracture, left leg, initial encounter for fracture -M84755D Complete transverse atypical femoral fracture, left leg, subsequent encounter for fracture with routine healing -M84755G Complete transverse atypical femoral fracture, left leg, subsequent encounter for fracture with delayed healing -M84755K Complete transverse atypical femoral fracture, left leg, subsequent encounter for fracture with nonunion -M84755P Complete transverse atypical femoral fracture, left leg, subsequent encounter for fracture with malunion -M84755S Complete transverse atypical femoral fracture, left leg, sequela -M84756A Complete transverse atypical femoral fracture, unspecified leg, initial encounter for fracture -M84756D Complete transverse atypical femoral fracture, unspecified leg, subsequent encounter for fracture with routine healing -M84756G Complete transverse atypical femoral fracture, unspecified leg, subsequent encounter for fracture with delayed healing -M84756K Complete transverse atypical femoral fracture, unspecified leg, subsequent encounter for fracture with nonunion -M84756P Complete transverse atypical femoral fracture, unspecified leg, subsequent encounter for fracture with malunion -M84756S Complete transverse atypical femoral fracture, unspecified leg, sequela -M84757A Complete oblique atypical femoral fracture, right leg, initial encounter for fracture -M84757D Complete oblique atypical femoral fracture, right leg, subsequent encounter for fracture with routine healing -M84757G Complete oblique atypical femoral fracture, right leg, subsequent encounter for fracture with delayed healing -M84757K Complete oblique atypical femoral fracture, right leg, subsequent encounter for fracture with nonunion -M84757P Complete oblique atypical femoral fracture, right leg, subsequent encounter for fracture with malunion -M84757S Complete oblique atypical femoral fracture, right leg, sequela -M84758A Complete oblique atypical femoral fracture, left leg, initial encounter for fracture -M84758D Complete oblique atypical femoral fracture, left leg, subsequent encounter for fracture with routine healing -M84758G Complete oblique atypical femoral fracture, left leg, subsequent encounter for fracture with delayed healing -M84758K Complete oblique atypical femoral fracture, left leg, subsequent encounter for fracture with nonunion -M84758P Complete oblique atypical femoral fracture, left leg, subsequent encounter for fracture with malunion -M84758S Complete oblique atypical femoral fracture, left leg, sequela -M84759A Complete oblique atypical femoral fracture, unspecified leg, initial encounter for fracture -M84759D Complete oblique atypical femoral fracture, unspecified leg, subsequent encounter for fracture with routine healing -M84759G Complete oblique atypical femoral fracture, unspecified leg, subsequent encounter for fracture with delayed healing -M84759K Complete oblique atypical femoral fracture, unspecified leg, subsequent encounter for fracture with nonunion -M84759P Complete oblique atypical femoral fracture, unspecified leg, subsequent encounter for fracture with malunion -M84759S Complete oblique atypical femoral fracture, unspecified leg, sequela -M8480 Other disorders of continuity of bone, unspecified site -M84811 Other disorders of continuity of bone, right shoulder -M84812 Other disorders of continuity of bone, left shoulder -M84819 Other disorders of continuity of bone, unspecified shoulder -M84821 Other disorders of continuity of bone, right humerus -M84822 Other disorders of continuity of bone, left humerus -M84829 Other disorders of continuity of bone, unspecified humerus -M84831 Other disorders of continuity of bone, right ulna -M84832 Other disorders of continuity of bone, left ulna -M84833 Other disorders of continuity of bone, right radius -M84834 Other disorders of continuity of bone, left radius -M84839 Other disorders of continuity of bone, unspecified ulna and radius -M84841 Other disorders of continuity of bone, right hand -M84842 Other disorders of continuity of bone, left hand -M84849 Other disorders of continuity of bone, unspecified hand -M84851 Other disorders of continuity of bone, right pelvic region and thigh -M84852 Other disorders of continuity of bone, left pelvic region and thigh -M84859 Other disorders of continuity of bone, unspecified pelvic region and thigh -M84861 Other disorders of continuity of bone, right tibia -M84862 Other disorders of continuity of bone, left tibia -M84863 Other disorders of continuity of bone, right fibula -M84864 Other disorders of continuity of bone, left fibula -M84869 Other disorders of continuity of bone, unspecified tibia and fibula -M84871 Other disorders of continuity of bone, right ankle and foot -M84872 Other disorders of continuity of bone, left ankle and foot -M84879 Other disorders of continuity of bone, unspecified ankle and foot -M8488 Other disorders of continuity of bone, other site -M849 Disorder of continuity of bone, unspecified -M8500 Fibrous dysplasia (monostotic), unspecified site -M85011 Fibrous dysplasia (monostotic), right shoulder -M85012 Fibrous dysplasia (monostotic), left shoulder -M85019 Fibrous dysplasia (monostotic), unspecified shoulder -M85021 Fibrous dysplasia (monostotic), right upper arm -M85022 Fibrous dysplasia (monostotic), left upper arm -M85029 Fibrous dysplasia (monostotic), unspecified upper arm -M85031 Fibrous dysplasia (monostotic), right forearm -M85032 Fibrous dysplasia (monostotic), left forearm -M85039 Fibrous dysplasia (monostotic), unspecified forearm -M85041 Fibrous dysplasia (monostotic), right hand -M85042 Fibrous dysplasia (monostotic), left hand -M85049 Fibrous dysplasia (monostotic), unspecified hand -M85051 Fibrous dysplasia (monostotic), right thigh -M85052 Fibrous dysplasia (monostotic), left thigh -M85059 Fibrous dysplasia (monostotic), unspecified thigh -M85061 Fibrous dysplasia (monostotic), right lower leg -M85062 Fibrous dysplasia (monostotic), left lower leg -M85069 Fibrous dysplasia (monostotic), unspecified lower leg -M85071 Fibrous dysplasia (monostotic), right ankle and foot -M85072 Fibrous dysplasia (monostotic), left ankle and foot -M85079 Fibrous dysplasia (monostotic), unspecified ankle and foot -M8508 Fibrous dysplasia (monostotic), other site -M8509 Fibrous dysplasia (monostotic), multiple sites -M8510 Skeletal fluorosis, unspecified site -M85111 Skeletal fluorosis, right shoulder -M85112 Skeletal fluorosis, left shoulder -M85119 Skeletal fluorosis, unspecified shoulder -M85121 Skeletal fluorosis, right upper arm -M85122 Skeletal fluorosis, left upper arm -M85129 Skeletal fluorosis, unspecified upper arm -M85131 Skeletal fluorosis, right forearm -M85132 Skeletal fluorosis, left forearm -M85139 Skeletal fluorosis, unspecified forearm -M85141 Skeletal fluorosis, right hand -M85142 Skeletal fluorosis, left hand -M85149 Skeletal fluorosis, unspecified hand -M85151 Skeletal fluorosis, right thigh -M85152 Skeletal fluorosis, left thigh -M85159 Skeletal fluorosis, unspecified thigh -M85161 Skeletal fluorosis, right lower leg -M85162 Skeletal fluorosis, left lower leg -M85169 Skeletal fluorosis, unspecified lower leg -M85171 Skeletal fluorosis, right ankle and foot -M85172 Skeletal fluorosis, left ankle and foot -M85179 Skeletal fluorosis, unspecified ankle and foot -M8518 Skeletal fluorosis, other site -M8519 Skeletal fluorosis, multiple sites -M852 Hyperostosis of skull -M8530 Osteitis condensans, unspecified site -M85311 Osteitis condensans, right shoulder -M85312 Osteitis condensans, left shoulder -M85319 Osteitis condensans, unspecified shoulder -M85321 Osteitis condensans, right upper arm -M85322 Osteitis condensans, left upper arm -M85329 Osteitis condensans, unspecified upper arm -M85331 Osteitis condensans, right forearm -M85332 Osteitis condensans, left forearm -M85339 Osteitis condensans, unspecified forearm -M85341 Osteitis condensans, right hand -M85342 Osteitis condensans, left hand -M85349 Osteitis condensans, unspecified hand -M85351 Osteitis condensans, right thigh -M85352 Osteitis condensans, left thigh -M85359 Osteitis condensans, unspecified thigh -M85361 Osteitis condensans, right lower leg -M85362 Osteitis condensans, left lower leg -M85369 Osteitis condensans, unspecified lower leg -M85371 Osteitis condensans, right ankle and foot -M85372 Osteitis condensans, left ankle and foot -M85379 Osteitis condensans, unspecified ankle and foot -M8538 Osteitis condensans, other site -M8539 Osteitis condensans, multiple sites -M8540 Solitary bone cyst, unspecified site -M85411 Solitary bone cyst, right shoulder -M85412 Solitary bone cyst, left shoulder -M85419 Solitary bone cyst, unspecified shoulder -M85421 Solitary bone cyst, right humerus -M85422 Solitary bone cyst, left humerus -M85429 Solitary bone cyst, unspecified humerus -M85431 Solitary bone cyst, right ulna and radius -M85432 Solitary bone cyst, left ulna and radius -M85439 Solitary bone cyst, unspecified ulna and radius -M85441 Solitary bone cyst, right hand -M85442 Solitary bone cyst, left hand -M85449 Solitary bone cyst, unspecified hand -M85451 Solitary bone cyst, right pelvis -M85452 Solitary bone cyst, left pelvis -M85459 Solitary bone cyst, unspecified pelvis -M85461 Solitary bone cyst, right tibia and fibula -M85462 Solitary bone cyst, left tibia and fibula -M85469 Solitary bone cyst, unspecified tibia and fibula -M85471 Solitary bone cyst, right ankle and foot -M85472 Solitary bone cyst, left ankle and foot -M85479 Solitary bone cyst, unspecified ankle and foot -M8548 Solitary bone cyst, other site -M8550 Aneurysmal bone cyst, unspecified site -M85511 Aneurysmal bone cyst, right shoulder -M85512 Aneurysmal bone cyst, left shoulder -M85519 Aneurysmal bone cyst, unspecified shoulder -M85521 Aneurysmal bone cyst, right upper arm -M85522 Aneurysmal bone cyst, left upper arm -M85529 Aneurysmal bone cyst, unspecified upper arm -M85531 Aneurysmal bone cyst, right forearm -M85532 Aneurysmal bone cyst, left forearm -M85539 Aneurysmal bone cyst, unspecified forearm -M85541 Aneurysmal bone cyst, right hand -M85542 Aneurysmal bone cyst, left hand -M85549 Aneurysmal bone cyst, unspecified hand -M85551 Aneurysmal bone cyst, right thigh -M85552 Aneurysmal bone cyst, left thigh -M85559 Aneurysmal bone cyst, unspecified thigh -M85561 Aneurysmal bone cyst, right lower leg -M85562 Aneurysmal bone cyst, left lower leg -M85569 Aneurysmal bone cyst, unspecified lower leg -M85571 Aneurysmal bone cyst, right ankle and foot -M85572 Aneurysmal bone cyst, left ankle and foot -M85579 Aneurysmal bone cyst, unspecified ankle and foot -M8558 Aneurysmal bone cyst, other site -M8559 Aneurysmal bone cyst, multiple sites -M8560 Other cyst of bone, unspecified site -M85611 Other cyst of bone, right shoulder -M85612 Other cyst of bone, left shoulder -M85619 Other cyst of bone, unspecified shoulder -M85621 Other cyst of bone, right upper arm -M85622 Other cyst of bone, left upper arm -M85629 Other cyst of bone, unspecified upper arm -M85631 Other cyst of bone, right forearm -M85632 Other cyst of bone, left forearm -M85639 Other cyst of bone, unspecified forearm -M85641 Other cyst of bone, right hand -M85642 Other cyst of bone, left hand -M85649 Other cyst of bone, unspecified hand -M85651 Other cyst of bone, right thigh -M85652 Other cyst of bone, left thigh -M85659 Other cyst of bone, unspecified thigh -M85661 Other cyst of bone, right lower leg -M85662 Other cyst of bone, left lower leg -M85669 Other cyst of bone, unspecified lower leg -M85671 Other cyst of bone, right ankle and foot -M85672 Other cyst of bone, left ankle and foot -M85679 Other cyst of bone, unspecified ankle and foot -M8568 Other cyst of bone, other site -M8569 Other cyst of bone, multiple sites -M8580 Other specified disorders of bone density and structure, unspecified site -M85811 Other specified disorders of bone density and structure, right shoulder -M85812 Other specified disorders of bone density and structure, left shoulder -M85819 Other specified disorders of bone density and structure, unspecified shoulder -M85821 Other specified disorders of bone density and structure, right upper arm -M85822 Other specified disorders of bone density and structure, left upper arm -M85829 Other specified disorders of bone density and structure, unspecified upper arm -M85831 Other specified disorders of bone density and structure, right forearm -M85832 Other specified disorders of bone density and structure, left forearm -M85839 Other specified disorders of bone density and structure, unspecified forearm -M85841 Other specified disorders of bone density and structure, right hand -M85842 Other specified disorders of bone density and structure, left hand -M85849 Other specified disorders of bone density and structure, unspecified hand -M85851 Other specified disorders of bone density and structure, right thigh -M85852 Other specified disorders of bone density and structure, left thigh -M85859 Other specified disorders of bone density and structure, unspecified thigh -M85861 Other specified disorders of bone density and structure, right lower leg -M85862 Other specified disorders of bone density and structure, left lower leg -M85869 Other specified disorders of bone density and structure, unspecified lower leg -M85871 Other specified disorders of bone density and structure, right ankle and foot -M85872 Other specified disorders of bone density and structure, left ankle and foot -M85879 Other specified disorders of bone density and structure, unspecified ankle and foot -M8588 Other specified disorders of bone density and structure, other site -M8589 Other specified disorders of bone density and structure, multiple sites -M859 Disorder of bone density and structure, unspecified -M8600 Acute hematogenous osteomyelitis, unspecified site -M86011 Acute hematogenous osteomyelitis, right shoulder -M86012 Acute hematogenous osteomyelitis, left shoulder -M86019 Acute hematogenous osteomyelitis, unspecified shoulder -M86021 Acute hematogenous osteomyelitis, right humerus -M86022 Acute hematogenous osteomyelitis, left humerus -M86029 Acute hematogenous osteomyelitis, unspecified humerus -M86031 Acute hematogenous osteomyelitis, right radius and ulna -M86032 Acute hematogenous osteomyelitis, left radius and ulna -M86039 Acute hematogenous osteomyelitis, unspecified radius and ulna -M86041 Acute hematogenous osteomyelitis, right hand -M86042 Acute hematogenous osteomyelitis, left hand -M86049 Acute hematogenous osteomyelitis, unspecified hand -M86051 Acute hematogenous osteomyelitis, right femur -M86052 Acute hematogenous osteomyelitis, left femur -M86059 Acute hematogenous osteomyelitis, unspecified femur -M86061 Acute hematogenous osteomyelitis, right tibia and fibula -M86062 Acute hematogenous osteomyelitis, left tibia and fibula -M86069 Acute hematogenous osteomyelitis, unspecified tibia and fibula -M86071 Acute hematogenous osteomyelitis, right ankle and foot -M86072 Acute hematogenous osteomyelitis, left ankle and foot -M86079 Acute hematogenous osteomyelitis, unspecified ankle and foot -M8608 Acute hematogenous osteomyelitis, other sites -M8609 Acute hematogenous osteomyelitis, multiple sites -M8610 Other acute osteomyelitis, unspecified site -M86111 Other acute osteomyelitis, right shoulder -M86112 Other acute osteomyelitis, left shoulder -M86119 Other acute osteomyelitis, unspecified shoulder -M86121 Other acute osteomyelitis, right humerus -M86122 Other acute osteomyelitis, left humerus -M86129 Other acute osteomyelitis, unspecified humerus -M86131 Other acute osteomyelitis, right radius and ulna -M86132 Other acute osteomyelitis, left radius and ulna -M86139 Other acute osteomyelitis, unspecified radius and ulna -M86141 Other acute osteomyelitis, right hand -M86142 Other acute osteomyelitis, left hand -M86149 Other acute osteomyelitis, unspecified hand -M86151 Other acute osteomyelitis, right femur -M86152 Other acute osteomyelitis, left femur -M86159 Other acute osteomyelitis, unspecified femur -M86161 Other acute osteomyelitis, right tibia and fibula -M86162 Other acute osteomyelitis, left tibia and fibula -M86169 Other acute osteomyelitis, unspecified tibia and fibula -M86171 Other acute osteomyelitis, right ankle and foot -M86172 Other acute osteomyelitis, left ankle and foot -M86179 Other acute osteomyelitis, unspecified ankle and foot -M8618 Other acute osteomyelitis, other site -M8619 Other acute osteomyelitis, multiple sites -M8620 Subacute osteomyelitis, unspecified site -M86211 Subacute osteomyelitis, right shoulder -M86212 Subacute osteomyelitis, left shoulder -M86219 Subacute osteomyelitis, unspecified shoulder -M86221 Subacute osteomyelitis, right humerus -M86222 Subacute osteomyelitis, left humerus -M86229 Subacute osteomyelitis, unspecified humerus -M86231 Subacute osteomyelitis, right radius and ulna -M86232 Subacute osteomyelitis, left radius and ulna -M86239 Subacute osteomyelitis, unspecified radius and ulna -M86241 Subacute osteomyelitis, right hand -M86242 Subacute osteomyelitis, left hand -M86249 Subacute osteomyelitis, unspecified hand -M86251 Subacute osteomyelitis, right femur -M86252 Subacute osteomyelitis, left femur -M86259 Subacute osteomyelitis, unspecified femur -M86261 Subacute osteomyelitis, right tibia and fibula -M86262 Subacute osteomyelitis, left tibia and fibula -M86269 Subacute osteomyelitis, unspecified tibia and fibula -M86271 Subacute osteomyelitis, right ankle and foot -M86272 Subacute osteomyelitis, left ankle and foot -M86279 Subacute osteomyelitis, unspecified ankle and foot -M8628 Subacute osteomyelitis, other site -M8629 Subacute osteomyelitis, multiple sites -M8630 Chronic multifocal osteomyelitis, unspecified site -M86311 Chronic multifocal osteomyelitis, right shoulder -M86312 Chronic multifocal osteomyelitis, left shoulder -M86319 Chronic multifocal osteomyelitis, unspecified shoulder -M86321 Chronic multifocal osteomyelitis, right humerus -M86322 Chronic multifocal osteomyelitis, left humerus -M86329 Chronic multifocal osteomyelitis, unspecified humerus -M86331 Chronic multifocal osteomyelitis, right radius and ulna -M86332 Chronic multifocal osteomyelitis, left radius and ulna -M86339 Chronic multifocal osteomyelitis, unspecified radius and ulna -M86341 Chronic multifocal osteomyelitis, right hand -M86342 Chronic multifocal osteomyelitis, left hand -M86349 Chronic multifocal osteomyelitis, unspecified hand -M86351 Chronic multifocal osteomyelitis, right femur -M86352 Chronic multifocal osteomyelitis, left femur -M86359 Chronic multifocal osteomyelitis, unspecified femur -M86361 Chronic multifocal osteomyelitis, right tibia and fibula -M86362 Chronic multifocal osteomyelitis, left tibia and fibula -M86369 Chronic multifocal osteomyelitis, unspecified tibia and fibula -M86371 Chronic multifocal osteomyelitis, right ankle and foot -M86372 Chronic multifocal osteomyelitis, left ankle and foot -M86379 Chronic multifocal osteomyelitis, unspecified ankle and foot -M8638 Chronic multifocal osteomyelitis, other site -M8639 Chronic multifocal osteomyelitis, multiple sites -M8640 Chronic osteomyelitis with draining sinus, unspecified site -M86411 Chronic osteomyelitis with draining sinus, right shoulder -M86412 Chronic osteomyelitis with draining sinus, left shoulder -M86419 Chronic osteomyelitis with draining sinus, unspecified shoulder -M86421 Chronic osteomyelitis with draining sinus, right humerus -M86422 Chronic osteomyelitis with draining sinus, left humerus -M86429 Chronic osteomyelitis with draining sinus, unspecified humerus -M86431 Chronic osteomyelitis with draining sinus, right radius and ulna -M86432 Chronic osteomyelitis with draining sinus, left radius and ulna -M86439 Chronic osteomyelitis with draining sinus, unspecified radius and ulna -M86441 Chronic osteomyelitis with draining sinus, right hand -M86442 Chronic osteomyelitis with draining sinus, left hand -M86449 Chronic osteomyelitis with draining sinus, unspecified hand -M86451 Chronic osteomyelitis with draining sinus, right femur -M86452 Chronic osteomyelitis with draining sinus, left femur -M86459 Chronic osteomyelitis with draining sinus, unspecified femur -M86461 Chronic osteomyelitis with draining sinus, right tibia and fibula -M86462 Chronic osteomyelitis with draining sinus, left tibia and fibula -M86469 Chronic osteomyelitis with draining sinus, unspecified tibia and fibula -M86471 Chronic osteomyelitis with draining sinus, right ankle and foot -M86472 Chronic osteomyelitis with draining sinus, left ankle and foot -M86479 Chronic osteomyelitis with draining sinus, unspecified ankle and foot -M8648 Chronic osteomyelitis with draining sinus, other site -M8649 Chronic osteomyelitis with draining sinus, multiple sites -M8650 Other chronic hematogenous osteomyelitis, unspecified site -M86511 Other chronic hematogenous osteomyelitis, right shoulder -M86512 Other chronic hematogenous osteomyelitis, left shoulder -M86519 Other chronic hematogenous osteomyelitis, unspecified shoulder -M86521 Other chronic hematogenous osteomyelitis, right humerus -M86522 Other chronic hematogenous osteomyelitis, left humerus -M86529 Other chronic hematogenous osteomyelitis, unspecified humerus -M86531 Other chronic hematogenous osteomyelitis, right radius and ulna -M86532 Other chronic hematogenous osteomyelitis, left radius and ulna -M86539 Other chronic hematogenous osteomyelitis, unspecified radius and ulna -M86541 Other chronic hematogenous osteomyelitis, right hand -M86542 Other chronic hematogenous osteomyelitis, left hand -M86549 Other chronic hematogenous osteomyelitis, unspecified hand -M86551 Other chronic hematogenous osteomyelitis, right femur -M86552 Other chronic hematogenous osteomyelitis, left femur -M86559 Other chronic hematogenous osteomyelitis, unspecified femur -M86561 Other chronic hematogenous osteomyelitis, right tibia and fibula -M86562 Other chronic hematogenous osteomyelitis, left tibia and fibula -M86569 Other chronic hematogenous osteomyelitis, unspecified tibia and fibula -M86571 Other chronic hematogenous osteomyelitis, right ankle and foot -M86572 Other chronic hematogenous osteomyelitis, left ankle and foot -M86579 Other chronic hematogenous osteomyelitis, unspecified ankle and foot -M8658 Other chronic hematogenous osteomyelitis, other site -M8659 Other chronic hematogenous osteomyelitis, multiple sites -M8660 Other chronic osteomyelitis, unspecified site -M86611 Other chronic osteomyelitis, right shoulder -M86612 Other chronic osteomyelitis, left shoulder -M86619 Other chronic osteomyelitis, unspecified shoulder -M86621 Other chronic osteomyelitis, right humerus -M86622 Other chronic osteomyelitis, left humerus -M86629 Other chronic osteomyelitis, unspecified humerus -M86631 Other chronic osteomyelitis, right radius and ulna -M86632 Other chronic osteomyelitis, left radius and ulna -M86639 Other chronic osteomyelitis, unspecified radius and ulna -M86641 Other chronic osteomyelitis, right hand -M86642 Other chronic osteomyelitis, left hand -M86649 Other chronic osteomyelitis, unspecified hand -M86651 Other chronic osteomyelitis, right thigh -M86652 Other chronic osteomyelitis, left thigh -M86659 Other chronic osteomyelitis, unspecified thigh -M86661 Other chronic osteomyelitis, right tibia and fibula -M86662 Other chronic osteomyelitis, left tibia and fibula -M86669 Other chronic osteomyelitis, unspecified tibia and fibula -M86671 Other chronic osteomyelitis, right ankle and foot -M86672 Other chronic osteomyelitis, left ankle and foot -M86679 Other chronic osteomyelitis, unspecified ankle and foot -M8668 Other chronic osteomyelitis, other site -M8669 Other chronic osteomyelitis, multiple sites -M868X0 Other osteomyelitis, multiple sites -M868X1 Other osteomyelitis, shoulder -M868X2 Other osteomyelitis, upper arm -M868X3 Other osteomyelitis, forearm -M868X4 Other osteomyelitis, hand -M868X5 Other osteomyelitis, thigh -M868X6 Other osteomyelitis, lower leg -M868X7 Other osteomyelitis, ankle and foot -M868X8 Other osteomyelitis, other site -M868X9 Other osteomyelitis, unspecified sites -M869 Osteomyelitis, unspecified -M8700 Idiopathic aseptic necrosis of unspecified bone -M87011 Idiopathic aseptic necrosis of right shoulder -M87012 Idiopathic aseptic necrosis of left shoulder -M87019 Idiopathic aseptic necrosis of unspecified shoulder -M87021 Idiopathic aseptic necrosis of right humerus -M87022 Idiopathic aseptic necrosis of left humerus -M87029 Idiopathic aseptic necrosis of unspecified humerus -M87031 Idiopathic aseptic necrosis of right radius -M87032 Idiopathic aseptic necrosis of left radius -M87033 Idiopathic aseptic necrosis of unspecified radius -M87034 Idiopathic aseptic necrosis of right ulna -M87035 Idiopathic aseptic necrosis of left ulna -M87036 Idiopathic aseptic necrosis of unspecified ulna -M87037 Idiopathic aseptic necrosis of right carpus -M87038 Idiopathic aseptic necrosis of left carpus -M87039 Idiopathic aseptic necrosis of unspecified carpus -M87041 Idiopathic aseptic necrosis of right hand -M87042 Idiopathic aseptic necrosis of left hand -M87043 Idiopathic aseptic necrosis of unspecified hand -M87044 Idiopathic aseptic necrosis of right finger(s) -M87045 Idiopathic aseptic necrosis of left finger(s) -M87046 Idiopathic aseptic necrosis of unspecified finger(s) -M87050 Idiopathic aseptic necrosis of pelvis -M87051 Idiopathic aseptic necrosis of right femur -M87052 Idiopathic aseptic necrosis of left femur -M87059 Idiopathic aseptic necrosis of unspecified femur -M87061 Idiopathic aseptic necrosis of right tibia -M87062 Idiopathic aseptic necrosis of left tibia -M87063 Idiopathic aseptic necrosis of unspecified tibia -M87064 Idiopathic aseptic necrosis of right fibula -M87065 Idiopathic aseptic necrosis of left fibula -M87066 Idiopathic aseptic necrosis of unspecified fibula -M87071 Idiopathic aseptic necrosis of right ankle -M87072 Idiopathic aseptic necrosis of left ankle -M87073 Idiopathic aseptic necrosis of unspecified ankle -M87074 Idiopathic aseptic necrosis of right foot -M87075 Idiopathic aseptic necrosis of left foot -M87076 Idiopathic aseptic necrosis of unspecified foot -M87077 Idiopathic aseptic necrosis of right toe(s) -M87078 Idiopathic aseptic necrosis of left toe(s) -M87079 Idiopathic aseptic necrosis of unspecified toe(s) -M8708 Idiopathic aseptic necrosis of bone, other site -M8709 Idiopathic aseptic necrosis of bone, multiple sites -M8710 Osteonecrosis due to drugs, unspecified bone -M87111 Osteonecrosis due to drugs, right shoulder -M87112 Osteonecrosis due to drugs, left shoulder -M87119 Osteonecrosis due to drugs, unspecified shoulder -M87121 Osteonecrosis due to drugs, right humerus -M87122 Osteonecrosis due to drugs, left humerus -M87129 Osteonecrosis due to drugs, unspecified humerus -M87131 Osteonecrosis due to drugs of right radius -M87132 Osteonecrosis due to drugs of left radius -M87133 Osteonecrosis due to drugs of unspecified radius -M87134 Osteonecrosis due to drugs of right ulna -M87135 Osteonecrosis due to drugs of left ulna -M87136 Osteonecrosis due to drugs of unspecified ulna -M87137 Osteonecrosis due to drugs of right carpus -M87138 Osteonecrosis due to drugs of left carpus -M87139 Osteonecrosis due to drugs of unspecified carpus -M87141 Osteonecrosis due to drugs, right hand -M87142 Osteonecrosis due to drugs, left hand -M87143 Osteonecrosis due to drugs, unspecified hand -M87144 Osteonecrosis due to drugs, right finger(s) -M87145 Osteonecrosis due to drugs, left finger(s) -M87146 Osteonecrosis due to drugs, unspecified finger(s) -M87150 Osteonecrosis due to drugs, pelvis -M87151 Osteonecrosis due to drugs, right femur -M87152 Osteonecrosis due to drugs, left femur -M87159 Osteonecrosis due to drugs, unspecified femur -M87161 Osteonecrosis due to drugs, right tibia -M87162 Osteonecrosis due to drugs, left tibia -M87163 Osteonecrosis due to drugs, unspecified tibia -M87164 Osteonecrosis due to drugs, right fibula -M87165 Osteonecrosis due to drugs, left fibula -M87166 Osteonecrosis due to drugs, unspecified fibula -M87171 Osteonecrosis due to drugs, right ankle -M87172 Osteonecrosis due to drugs, left ankle -M87173 Osteonecrosis due to drugs, unspecified ankle -M87174 Osteonecrosis due to drugs, right foot -M87175 Osteonecrosis due to drugs, left foot -M87176 Osteonecrosis due to drugs, unspecified foot -M87177 Osteonecrosis due to drugs, right toe(s) -M87178 Osteonecrosis due to drugs, left toe(s) -M87179 Osteonecrosis due to drugs, unspecified toe(s) -M87180 Osteonecrosis due to drugs, jaw -M87188 Osteonecrosis due to drugs, other site -M8719 Osteonecrosis due to drugs, multiple sites -M8720 Osteonecrosis due to previous trauma, unspecified bone -M87211 Osteonecrosis due to previous trauma, right shoulder -M87212 Osteonecrosis due to previous trauma, left shoulder -M87219 Osteonecrosis due to previous trauma, unspecified shoulder -M87221 Osteonecrosis due to previous trauma, right humerus -M87222 Osteonecrosis due to previous trauma, left humerus -M87229 Osteonecrosis due to previous trauma, unspecified humerus -M87231 Osteonecrosis due to previous trauma of right radius -M87232 Osteonecrosis due to previous trauma of left radius -M87233 Osteonecrosis due to previous trauma of unspecified radius -M87234 Osteonecrosis due to previous trauma of right ulna -M87235 Osteonecrosis due to previous trauma of left ulna -M87236 Osteonecrosis due to previous trauma of unspecified ulna -M87237 Osteonecrosis due to previous trauma of right carpus -M87238 Osteonecrosis due to previous trauma of left carpus -M87239 Osteonecrosis due to previous trauma of unspecified carpus -M87241 Osteonecrosis due to previous trauma, right hand -M87242 Osteonecrosis due to previous trauma, left hand -M87243 Osteonecrosis due to previous trauma, unspecified hand -M87244 Osteonecrosis due to previous trauma, right finger(s) -M87245 Osteonecrosis due to previous trauma, left finger(s) -M87246 Osteonecrosis due to previous trauma, unspecified finger(s) -M87250 Osteonecrosis due to previous trauma, pelvis -M87251 Osteonecrosis due to previous trauma, right femur -M87252 Osteonecrosis due to previous trauma, left femur -M87256 Osteonecrosis due to previous trauma, unspecified femur -M87261 Osteonecrosis due to previous trauma, right tibia -M87262 Osteonecrosis due to previous trauma, left tibia -M87263 Osteonecrosis due to previous trauma, unspecified tibia -M87264 Osteonecrosis due to previous trauma, right fibula -M87265 Osteonecrosis due to previous trauma, left fibula -M87266 Osteonecrosis due to previous trauma, unspecified fibula -M87271 Osteonecrosis due to previous trauma, right ankle -M87272 Osteonecrosis due to previous trauma, left ankle -M87273 Osteonecrosis due to previous trauma, unspecified ankle -M87274 Osteonecrosis due to previous trauma, right foot -M87275 Osteonecrosis due to previous trauma, left foot -M87276 Osteonecrosis due to previous trauma, unspecified foot -M87277 Osteonecrosis due to previous trauma, right toe(s) -M87278 Osteonecrosis due to previous trauma, left toe(s) -M87279 Osteonecrosis due to previous trauma, unspecified toe(s) -M8728 Osteonecrosis due to previous trauma, other site -M8729 Osteonecrosis due to previous trauma, multiple sites -M8730 Other secondary osteonecrosis, unspecified bone -M87311 Other secondary osteonecrosis, right shoulder -M87312 Other secondary osteonecrosis, left shoulder -M87319 Other secondary osteonecrosis, unspecified shoulder -M87321 Other secondary osteonecrosis, right humerus -M87322 Other secondary osteonecrosis, left humerus -M87329 Other secondary osteonecrosis, unspecified humerus -M87331 Other secondary osteonecrosis of right radius -M87332 Other secondary osteonecrosis of left radius -M87333 Other secondary osteonecrosis of unspecified radius -M87334 Other secondary osteonecrosis of right ulna -M87335 Other secondary osteonecrosis of left ulna -M87336 Other secondary osteonecrosis of unspecified ulna -M87337 Other secondary osteonecrosis of right carpus -M87338 Other secondary osteonecrosis of left carpus -M87339 Other secondary osteonecrosis of unspecified carpus -M87341 Other secondary osteonecrosis, right hand -M87342 Other secondary osteonecrosis, left hand -M87343 Other secondary osteonecrosis, unspecified hand -M87344 Other secondary osteonecrosis, right finger(s) -M87345 Other secondary osteonecrosis, left finger(s) -M87346 Other secondary osteonecrosis, unspecified finger(s) -M87350 Other secondary osteonecrosis, pelvis -M87351 Other secondary osteonecrosis, right femur -M87352 Other secondary osteonecrosis, left femur -M87353 Other secondary osteonecrosis, unspecified femur -M87361 Other secondary osteonecrosis, right tibia -M87362 Other secondary osteonecrosis, left tibia -M87363 Other secondary osteonecrosis, unspecified tibia -M87364 Other secondary osteonecrosis, right fibula -M87365 Other secondary osteonecrosis, left fibula -M87366 Other secondary osteonecrosis, unspecified fibula -M87371 Other secondary osteonecrosis, right ankle -M87372 Other secondary osteonecrosis, left ankle -M87373 Other secondary osteonecrosis, unspecified ankle -M87374 Other secondary osteonecrosis, right foot -M87375 Other secondary osteonecrosis, left foot -M87376 Other secondary osteonecrosis, unspecified foot -M87377 Other secondary osteonecrosis, right toe(s) -M87378 Other secondary osteonecrosis, left toe(s) -M87379 Other secondary osteonecrosis, unspecified toe(s) -M8738 Other secondary osteonecrosis, other site -M8739 Other secondary osteonecrosis, multiple sites -M8780 Other osteonecrosis, unspecified bone -M87811 Other osteonecrosis, right shoulder -M87812 Other osteonecrosis, left shoulder -M87819 Other osteonecrosis, unspecified shoulder -M87821 Other osteonecrosis, right humerus -M87822 Other osteonecrosis, left humerus -M87829 Other osteonecrosis, unspecified humerus -M87831 Other osteonecrosis of right radius -M87832 Other osteonecrosis of left radius -M87833 Other osteonecrosis of unspecified radius -M87834 Other osteonecrosis of right ulna -M87835 Other osteonecrosis of left ulna -M87836 Other osteonecrosis of unspecified ulna -M87837 Other osteonecrosis of right carpus -M87838 Other osteonecrosis of left carpus -M87839 Other osteonecrosis of unspecified carpus -M87841 Other osteonecrosis, right hand -M87842 Other osteonecrosis, left hand -M87843 Other osteonecrosis, unspecified hand -M87844 Other osteonecrosis, right finger(s) -M87845 Other osteonecrosis, left finger(s) -M87849 Other osteonecrosis, unspecified finger(s) -M87850 Other osteonecrosis, pelvis -M87851 Other osteonecrosis, right femur -M87852 Other osteonecrosis, left femur -M87859 Other osteonecrosis, unspecified femur -M87861 Other osteonecrosis, right tibia -M87862 Other osteonecrosis, left tibia -M87863 Other osteonecrosis, unspecified tibia -M87864 Other osteonecrosis, right fibula -M87865 Other osteonecrosis, left fibula -M87869 Other osteonecrosis, unspecified fibula -M87871 Other osteonecrosis, right ankle -M87872 Other osteonecrosis, left ankle -M87873 Other osteonecrosis, unspecified ankle -M87874 Other osteonecrosis, right foot -M87875 Other osteonecrosis, left foot -M87876 Other osteonecrosis, unspecified foot -M87877 Other osteonecrosis, right toe(s) -M87878 Other osteonecrosis, left toe(s) -M87879 Other osteonecrosis, unspecified toe(s) -M8788 Other osteonecrosis, other site -M8789 Other osteonecrosis, multiple sites -M879 Osteonecrosis, unspecified -M880 Osteitis deformans of skull -M881 Osteitis deformans of vertebrae -M88811 Osteitis deformans of right shoulder -M88812 Osteitis deformans of left shoulder -M88819 Osteitis deformans of unspecified shoulder -M88821 Osteitis deformans of right upper arm -M88822 Osteitis deformans of left upper arm -M88829 Osteitis deformans of unspecified upper arm -M88831 Osteitis deformans of right forearm -M88832 Osteitis deformans of left forearm -M88839 Osteitis deformans of unspecified forearm -M88841 Osteitis deformans of right hand -M88842 Osteitis deformans of left hand -M88849 Osteitis deformans of unspecified hand -M88851 Osteitis deformans of right thigh -M88852 Osteitis deformans of left thigh -M88859 Osteitis deformans of unspecified thigh -M88861 Osteitis deformans of right lower leg -M88862 Osteitis deformans of left lower leg -M88869 Osteitis deformans of unspecified lower leg -M88871 Osteitis deformans of right ankle and foot -M88872 Osteitis deformans of left ankle and foot -M88879 Osteitis deformans of unspecified ankle and foot -M8888 Osteitis deformans of other bones -M8889 Osteitis deformans of multiple sites -M889 Osteitis deformans of unspecified bone -M8900 Algoneurodystrophy, unspecified site -M89011 Algoneurodystrophy, right shoulder -M89012 Algoneurodystrophy, left shoulder -M89019 Algoneurodystrophy, unspecified shoulder -M89021 Algoneurodystrophy, right upper arm -M89022 Algoneurodystrophy, left upper arm -M89029 Algoneurodystrophy, unspecified upper arm -M89031 Algoneurodystrophy, right forearm -M89032 Algoneurodystrophy, left forearm -M89039 Algoneurodystrophy, unspecified forearm -M89041 Algoneurodystrophy, right hand -M89042 Algoneurodystrophy, left hand -M89049 Algoneurodystrophy, unspecified hand -M89051 Algoneurodystrophy, right thigh -M89052 Algoneurodystrophy, left thigh -M89059 Algoneurodystrophy, unspecified thigh -M89061 Algoneurodystrophy, right lower leg -M89062 Algoneurodystrophy, left lower leg -M89069 Algoneurodystrophy, unspecified lower leg -M89071 Algoneurodystrophy, right ankle and foot -M89072 Algoneurodystrophy, left ankle and foot -M89079 Algoneurodystrophy, unspecified ankle and foot -M8908 Algoneurodystrophy, other site -M8909 Algoneurodystrophy, multiple sites -M89121 Complete physeal arrest, right proximal humerus -M89122 Complete physeal arrest, left proximal humerus -M89123 Partial physeal arrest, right proximal humerus -M89124 Partial physeal arrest, left proximal humerus -M89125 Complete physeal arrest, right distal humerus -M89126 Complete physeal arrest, left distal humerus -M89127 Partial physeal arrest, right distal humerus -M89128 Partial physeal arrest, left distal humerus -M89129 Physeal arrest, humerus, unspecified -M89131 Complete physeal arrest, right distal radius -M89132 Complete physeal arrest, left distal radius -M89133 Partial physeal arrest, right distal radius -M89134 Partial physeal arrest, left distal radius -M89138 Other physeal arrest of forearm -M89139 Physeal arrest, forearm, unspecified -M89151 Complete physeal arrest, right proximal femur -M89152 Complete physeal arrest, left proximal femur -M89153 Partial physeal arrest, right proximal femur -M89154 Partial physeal arrest, left proximal femur -M89155 Complete physeal arrest, right distal femur -M89156 Complete physeal arrest, left distal femur -M89157 Partial physeal arrest, right distal femur -M89158 Partial physeal arrest, left distal femur -M89159 Physeal arrest, femur, unspecified -M89160 Complete physeal arrest, right proximal tibia -M89161 Complete physeal arrest, left proximal tibia -M89162 Partial physeal arrest, right proximal tibia -M89163 Partial physeal arrest, left proximal tibia -M89164 Complete physeal arrest, right distal tibia -M89165 Complete physeal arrest, left distal tibia -M89166 Partial physeal arrest, right distal tibia -M89167 Partial physeal arrest, left distal tibia -M89168 Other physeal arrest of lower leg -M89169 Physeal arrest, lower leg, unspecified -M8918 Physeal arrest, other site -M8920 Other disorders of bone development and growth, unspecified site -M89211 Other disorders of bone development and growth, right shoulder -M89212 Other disorders of bone development and growth, left shoulder -M89219 Other disorders of bone development and growth, unspecified shoulder -M89221 Other disorders of bone development and growth, right humerus -M89222 Other disorders of bone development and growth, left humerus -M89229 Other disorders of bone development and growth, unspecified humerus -M89231 Other disorders of bone development and growth, right ulna -M89232 Other disorders of bone development and growth, left ulna -M89233 Other disorders of bone development and growth, right radius -M89234 Other disorders of bone development and growth, left radius -M89239 Other disorders of bone development and growth, unspecified ulna and radius -M89241 Other disorders of bone development and growth, right hand -M89242 Other disorders of bone development and growth, left hand -M89249 Other disorders of bone development and growth, unspecified hand -M89251 Other disorders of bone development and growth, right femur -M89252 Other disorders of bone development and growth, left femur -M89259 Other disorders of bone development and growth, unspecified femur -M89261 Other disorders of bone development and growth, right tibia -M89262 Other disorders of bone development and growth, left tibia -M89263 Other disorders of bone development and growth, right fibula -M89264 Other disorders of bone development and growth, left fibula -M89269 Other disorders of bone development and growth, unspecified lower leg -M89271 Other disorders of bone development and growth, right ankle and foot -M89272 Other disorders of bone development and growth, left ankle and foot -M89279 Other disorders of bone development and growth, unspecified ankle and foot -M8928 Other disorders of bone development and growth, other site -M8929 Other disorders of bone development and growth, multiple sites -M8930 Hypertrophy of bone, unspecified site -M89311 Hypertrophy of bone, right shoulder -M89312 Hypertrophy of bone, left shoulder -M89319 Hypertrophy of bone, unspecified shoulder -M89321 Hypertrophy of bone, right humerus -M89322 Hypertrophy of bone, left humerus -M89329 Hypertrophy of bone, unspecified humerus -M89331 Hypertrophy of bone, right ulna -M89332 Hypertrophy of bone, left ulna -M89333 Hypertrophy of bone, right radius -M89334 Hypertrophy of bone, left radius -M89339 Hypertrophy of bone, unspecified ulna and radius -M89341 Hypertrophy of bone, right hand -M89342 Hypertrophy of bone, left hand -M89349 Hypertrophy of bone, unspecified hand -M89351 Hypertrophy of bone, right femur -M89352 Hypertrophy of bone, left femur -M89359 Hypertrophy of bone, unspecified femur -M89361 Hypertrophy of bone, right tibia -M89362 Hypertrophy of bone, left tibia -M89363 Hypertrophy of bone, right fibula -M89364 Hypertrophy of bone, left fibula -M89369 Hypertrophy of bone, unspecified tibia and fibula -M89371 Hypertrophy of bone, right ankle and foot -M89372 Hypertrophy of bone, left ankle and foot -M89379 Hypertrophy of bone, unspecified ankle and foot -M8938 Hypertrophy of bone, other site -M8939 Hypertrophy of bone, multiple sites -M8940 Other hypertrophic osteoarthropathy, unspecified site -M89411 Other hypertrophic osteoarthropathy, right shoulder -M89412 Other hypertrophic osteoarthropathy, left shoulder -M89419 Other hypertrophic osteoarthropathy, unspecified shoulder -M89421 Other hypertrophic osteoarthropathy, right upper arm -M89422 Other hypertrophic osteoarthropathy, left upper arm -M89429 Other hypertrophic osteoarthropathy, unspecified upper arm -M89431 Other hypertrophic osteoarthropathy, right forearm -M89432 Other hypertrophic osteoarthropathy, left forearm -M89439 Other hypertrophic osteoarthropathy, unspecified forearm -M89441 Other hypertrophic osteoarthropathy, right hand -M89442 Other hypertrophic osteoarthropathy, left hand -M89449 Other hypertrophic osteoarthropathy, unspecified hand -M89451 Other hypertrophic osteoarthropathy, right thigh -M89452 Other hypertrophic osteoarthropathy, left thigh -M89459 Other hypertrophic osteoarthropathy, unspecified thigh -M89461 Other hypertrophic osteoarthropathy, right lower leg -M89462 Other hypertrophic osteoarthropathy, left lower leg -M89469 Other hypertrophic osteoarthropathy, unspecified lower leg -M89471 Other hypertrophic osteoarthropathy, right ankle and foot -M89472 Other hypertrophic osteoarthropathy, left ankle and foot -M89479 Other hypertrophic osteoarthropathy, unspecified ankle and foot -M8948 Other hypertrophic osteoarthropathy, other site -M8949 Other hypertrophic osteoarthropathy, multiple sites -M8950 Osteolysis, unspecified site -M89511 Osteolysis, right shoulder -M89512 Osteolysis, left shoulder -M89519 Osteolysis, unspecified shoulder -M89521 Osteolysis, right upper arm -M89522 Osteolysis, left upper arm -M89529 Osteolysis, unspecified upper arm -M89531 Osteolysis, right forearm -M89532 Osteolysis, left forearm -M89539 Osteolysis, unspecified forearm -M89541 Osteolysis, right hand -M89542 Osteolysis, left hand -M89549 Osteolysis, unspecified hand -M89551 Osteolysis, right thigh -M89552 Osteolysis, left thigh -M89559 Osteolysis, unspecified thigh -M89561 Osteolysis, right lower leg -M89562 Osteolysis, left lower leg -M89569 Osteolysis, unspecified lower leg -M89571 Osteolysis, right ankle and foot -M89572 Osteolysis, left ankle and foot -M89579 Osteolysis, unspecified ankle and foot -M8958 Osteolysis, other site -M8959 Osteolysis, multiple sites -M8960 Osteopathy after poliomyelitis, unspecified site -M89611 Osteopathy after poliomyelitis, right shoulder -M89612 Osteopathy after poliomyelitis, left shoulder -M89619 Osteopathy after poliomyelitis, unspecified shoulder -M89621 Osteopathy after poliomyelitis, right upper arm -M89622 Osteopathy after poliomyelitis, left upper arm -M89629 Osteopathy after poliomyelitis, unspecified upper arm -M89631 Osteopathy after poliomyelitis, right forearm -M89632 Osteopathy after poliomyelitis, left forearm -M89639 Osteopathy after poliomyelitis, unspecified forearm -M89641 Osteopathy after poliomyelitis, right hand -M89642 Osteopathy after poliomyelitis, left hand -M89649 Osteopathy after poliomyelitis, unspecified hand -M89651 Osteopathy after poliomyelitis, right thigh -M89652 Osteopathy after poliomyelitis, left thigh -M89659 Osteopathy after poliomyelitis, unspecified thigh -M89661 Osteopathy after poliomyelitis, right lower leg -M89662 Osteopathy after poliomyelitis, left lower leg -M89669 Osteopathy after poliomyelitis, unspecified lower leg -M89671 Osteopathy after poliomyelitis, right ankle and foot -M89672 Osteopathy after poliomyelitis, left ankle and foot -M89679 Osteopathy after poliomyelitis, unspecified ankle and foot -M8968 Osteopathy after poliomyelitis, other site -M8969 Osteopathy after poliomyelitis, multiple sites -M8970 Major osseous defect, unspecified site -M89711 Major osseous defect, right shoulder region -M89712 Major osseous defect, left shoulder region -M89719 Major osseous defect, unspecified shoulder region -M89721 Major osseous defect, right humerus -M89722 Major osseous defect, left humerus -M89729 Major osseous defect, unspecified humerus -M89731 Major osseous defect, right forearm -M89732 Major osseous defect, left forearm -M89739 Major osseous defect, unspecified forearm -M89741 Major osseous defect, right hand -M89742 Major osseous defect, left hand -M89749 Major osseous defect, unspecified hand -M89751 Major osseous defect, right pelvic region and thigh -M89752 Major osseous defect, left pelvic region and thigh -M89759 Major osseous defect, unspecified pelvic region and thigh -M89761 Major osseous defect, right lower leg -M89762 Major osseous defect, left lower leg -M89769 Major osseous defect, unspecified lower leg -M89771 Major osseous defect, right ankle and foot -M89772 Major osseous defect, left ankle and foot -M89779 Major osseous defect, unspecified ankle and foot -M8978 Major osseous defect, other site -M8979 Major osseous defect, multiple sites -M898X0 Other specified disorders of bone, multiple sites -M898X1 Other specified disorders of bone, shoulder -M898X2 Other specified disorders of bone, upper arm -M898X3 Other specified disorders of bone, forearm -M898X4 Other specified disorders of bone, hand -M898X5 Other specified disorders of bone, thigh -M898X6 Other specified disorders of bone, lower leg -M898X7 Other specified disorders of bone, ankle and foot -M898X8 Other specified disorders of bone, other site -M898X9 Other specified disorders of bone, unspecified site -M899 Disorder of bone, unspecified -M9050 Osteonecrosis in diseases classified elsewhere, unspecified site -M90511 Osteonecrosis in diseases classified elsewhere, right shoulder -M90512 Osteonecrosis in diseases classified elsewhere, left shoulder -M90519 Osteonecrosis in diseases classified elsewhere, unspecified shoulder -M90521 Osteonecrosis in diseases classified elsewhere, right upper arm -M90522 Osteonecrosis in diseases classified elsewhere, left upper arm -M90529 Osteonecrosis in diseases classified elsewhere, unspecified upper arm -M90531 Osteonecrosis in diseases classified elsewhere, right forearm -M90532 Osteonecrosis in diseases classified elsewhere, left forearm -M90539 Osteonecrosis in diseases classified elsewhere, unspecified forearm -M90541 Osteonecrosis in diseases classified elsewhere, right hand -M90542 Osteonecrosis in diseases classified elsewhere, left hand -M90549 Osteonecrosis in diseases classified elsewhere, unspecified hand -M90551 Osteonecrosis in diseases classified elsewhere, right thigh -M90552 Osteonecrosis in diseases classified elsewhere, left thigh -M90559 Osteonecrosis in diseases classified elsewhere, unspecified thigh -M90561 Osteonecrosis in diseases classified elsewhere, right lower leg -M90562 Osteonecrosis in diseases classified elsewhere, left lower leg -M90569 Osteonecrosis in diseases classified elsewhere, unspecified lower leg -M90571 Osteonecrosis in diseases classified elsewhere, right ankle and foot -M90572 Osteonecrosis in diseases classified elsewhere, left ankle and foot -M90579 Osteonecrosis in diseases classified elsewhere, unspecified ankle and foot -M9058 Osteonecrosis in diseases classified elsewhere, other site -M9059 Osteonecrosis in diseases classified elsewhere, multiple sites -M9060 Osteitis deformans in neoplastic diseases, unspecified site -M90611 Osteitis deformans in neoplastic diseases, right shoulder -M90612 Osteitis deformans in neoplastic diseases, left shoulder -M90619 Osteitis deformans in neoplastic diseases, unspecified shoulder -M90621 Osteitis deformans in neoplastic diseases, right upper arm -M90622 Osteitis deformans in neoplastic diseases, left upper arm -M90629 Osteitis deformans in neoplastic diseases, unspecified upper arm -M90631 Osteitis deformans in neoplastic diseases, right forearm -M90632 Osteitis deformans in neoplastic diseases, left forearm -M90639 Osteitis deformans in neoplastic diseases, unspecified forearm -M90641 Osteitis deformans in neoplastic diseases, right hand -M90642 Osteitis deformans in neoplastic diseases, left hand -M90649 Osteitis deformans in neoplastic diseases, unspecified hand -M90651 Osteitis deformans in neoplastic diseases, right thigh -M90652 Osteitis deformans in neoplastic diseases, left thigh -M90659 Osteitis deformans in neoplastic diseases, unspecified thigh -M90661 Osteitis deformans in neoplastic diseases, right lower leg -M90662 Osteitis deformans in neoplastic diseases, left lower leg -M90669 Osteitis deformans in neoplastic diseases, unspecified lower leg -M90671 Osteitis deformans in neoplastic diseases, right ankle and foot -M90672 Osteitis deformans in neoplastic diseases, left ankle and foot -M90679 Osteitis deformans in neoplastic diseases, unspecified ankle and foot -M9068 Osteitis deformans in neoplastic diseases, other site -M9069 Osteitis deformans in neoplastic diseases, multiple sites -M9080 Osteopathy in diseases classified elsewhere, unspecified site -M90811 Osteopathy in diseases classified elsewhere, right shoulder -M90812 Osteopathy in diseases classified elsewhere, left shoulder -M90819 Osteopathy in diseases classified elsewhere, unspecified shoulder -M90821 Osteopathy in diseases classified elsewhere, right upper arm -M90822 Osteopathy in diseases classified elsewhere, left upper arm -M90829 Osteopathy in diseases classified elsewhere, unspecified upper arm -M90831 Osteopathy in diseases classified elsewhere, right forearm -M90832 Osteopathy in diseases classified elsewhere, left forearm -M90839 Osteopathy in diseases classified elsewhere, unspecified forearm -M90841 Osteopathy in diseases classified elsewhere, right hand -M90842 Osteopathy in diseases classified elsewhere, left hand -M90849 Osteopathy in diseases classified elsewhere, unspecified hand -M90851 Osteopathy in diseases classified elsewhere, right thigh -M90852 Osteopathy in diseases classified elsewhere, left thigh -M90859 Osteopathy in diseases classified elsewhere, unspecified thigh -M90861 Osteopathy in diseases classified elsewhere, right lower leg -M90862 Osteopathy in diseases classified elsewhere, left lower leg -M90869 Osteopathy in diseases classified elsewhere, unspecified lower leg -M90871 Osteopathy in diseases classified elsewhere, right ankle and foot -M90872 Osteopathy in diseases classified elsewhere, left ankle and foot -M90879 Osteopathy in diseases classified elsewhere, unspecified ankle and foot -M9088 Osteopathy in diseases classified elsewhere, other site -M9089 Osteopathy in diseases classified elsewhere, multiple sites -M910 Juvenile osteochondrosis of pelvis -M9110 Juvenile osteochondrosis of head of femur [Legg-Calve-Perthes], unspecified leg -M9111 Juvenile osteochondrosis of head of femur [Legg-Calve-Perthes], right leg -M9112 Juvenile osteochondrosis of head of femur [Legg-Calve-Perthes], left leg -M9120 Coxa plana, unspecified hip -M9121 Coxa plana, right hip -M9122 Coxa plana, left hip -M9130 Pseudocoxalgia, unspecified hip -M9131 Pseudocoxalgia, right hip -M9132 Pseudocoxalgia, left hip -M9140 Coxa magna, unspecified hip -M9141 Coxa magna, right hip -M9142 Coxa magna, left hip -M9180 Other juvenile osteochondrosis of hip and pelvis, unspecified leg -M9181 Other juvenile osteochondrosis of hip and pelvis, right leg -M9182 Other juvenile osteochondrosis of hip and pelvis, left leg -M9190 Juvenile osteochondrosis of hip and pelvis, unspecified, unspecified leg -M9191 Juvenile osteochondrosis of hip and pelvis, unspecified, right leg -M9192 Juvenile osteochondrosis of hip and pelvis, unspecified, left leg -M9200 Juvenile osteochondrosis of humerus, unspecified arm -M9201 Juvenile osteochondrosis of humerus, right arm -M9202 Juvenile osteochondrosis of humerus, left arm -M9210 Juvenile osteochondrosis of radius and ulna, unspecified arm -M9211 Juvenile osteochondrosis of radius and ulna, right arm -M9212 Juvenile osteochondrosis of radius and ulna, left arm -M92201 Unspecified juvenile osteochondrosis, right hand -M92202 Unspecified juvenile osteochondrosis, left hand -M92209 Unspecified juvenile osteochondrosis, unspecified hand -M92211 Osteochondrosis (juvenile) of carpal lunate [Kienbock], right hand -M92212 Osteochondrosis (juvenile) of carpal lunate [Kienbock], left hand -M92219 Osteochondrosis (juvenile) of carpal lunate [Kienbock], unspecified hand -M92221 Osteochondrosis (juvenile) of metacarpal heads [Mauclaire], right hand -M92222 Osteochondrosis (juvenile) of metacarpal heads [Mauclaire], left hand -M92229 Osteochondrosis (juvenile) of metacarpal heads [Mauclaire], unspecified hand -M92291 Other juvenile osteochondrosis, right hand -M92292 Other juvenile osteochondrosis, left hand -M92299 Other juvenile osteochondrosis, unspecified hand -M9230 Other juvenile osteochondrosis, unspecified upper limb -M9231 Other juvenile osteochondrosis, right upper limb -M9232 Other juvenile osteochondrosis, left upper limb -M9240 Juvenile osteochondrosis of patella, unspecified knee -M9241 Juvenile osteochondrosis of patella, right knee -M9242 Juvenile osteochondrosis of patella, left knee -M9250 Juvenile osteochondrosis of tibia and fibula, unspecified leg -M9251 Juvenile osteochondrosis of tibia and fibula, right leg -M9252 Juvenile osteochondrosis of tibia and fibula, left leg -M9260 Juvenile osteochondrosis of tarsus, unspecified ankle -M9261 Juvenile osteochondrosis of tarsus, right ankle -M9262 Juvenile osteochondrosis of tarsus, left ankle -M9270 Juvenile osteochondrosis of metatarsus, unspecified foot -M9271 Juvenile osteochondrosis of metatarsus, right foot -M9272 Juvenile osteochondrosis of metatarsus, left foot -M928 Other specified juvenile osteochondrosis -M929 Juvenile osteochondrosis, unspecified -M93001 Unspecified slipped upper femoral epiphysis (nontraumatic), right hip -M93002 Unspecified slipped upper femoral epiphysis (nontraumatic), left hip -M93003 Unspecified slipped upper femoral epiphysis (nontraumatic), unspecified hip -M93011 Acute slipped upper femoral epiphysis (nontraumatic), right hip -M93012 Acute slipped upper femoral epiphysis (nontraumatic), left hip -M93013 Acute slipped upper femoral epiphysis (nontraumatic), unspecified hip -M93021 Chronic slipped upper femoral epiphysis (nontraumatic), right hip -M93022 Chronic slipped upper femoral epiphysis (nontraumatic), left hip -M93023 Chronic slipped upper femoral epiphysis (nontraumatic), unspecified hip -M93031 Acute on chronic slipped upper femoral epiphysis (nontraumatic), right hip -M93032 Acute on chronic slipped upper femoral epiphysis (nontraumatic), left hip -M93033 Acute on chronic slipped upper femoral epiphysis (nontraumatic), unspecified hip -M931 Kienbock's disease of adults -M9320 Osteochondritis dissecans of unspecified site -M93211 Osteochondritis dissecans, right shoulder -M93212 Osteochondritis dissecans, left shoulder -M93219 Osteochondritis dissecans, unspecified shoulder -M93221 Osteochondritis dissecans, right elbow -M93222 Osteochondritis dissecans, left elbow -M93229 Osteochondritis dissecans, unspecified elbow -M93231 Osteochondritis dissecans, right wrist -M93232 Osteochondritis dissecans, left wrist -M93239 Osteochondritis dissecans, unspecified wrist -M93241 Osteochondritis dissecans, joints of right hand -M93242 Osteochondritis dissecans, joints of left hand -M93249 Osteochondritis dissecans, joints of unspecified hand -M93251 Osteochondritis dissecans, right hip -M93252 Osteochondritis dissecans, left hip -M93259 Osteochondritis dissecans, unspecified hip -M93261 Osteochondritis dissecans, right knee -M93262 Osteochondritis dissecans, left knee -M93269 Osteochondritis dissecans, unspecified knee -M93271 Osteochondritis dissecans, right ankle and joints of right foot -M93272 Osteochondritis dissecans, left ankle and joints of left foot -M93279 Osteochondritis dissecans, unspecified ankle and joints of foot -M9328 Osteochondritis dissecans other site -M9329 Osteochondritis dissecans multiple sites -M9380 Other specified osteochondropathies of unspecified site -M93811 Other specified osteochondropathies, right shoulder -M93812 Other specified osteochondropathies, left shoulder -M93819 Other specified osteochondropathies, unspecified shoulder -M93821 Other specified osteochondropathies, right upper arm -M93822 Other specified osteochondropathies, left upper arm -M93829 Other specified osteochondropathies, unspecified upper arm -M93831 Other specified osteochondropathies, right forearm -M93832 Other specified osteochondropathies, left forearm -M93839 Other specified osteochondropathies, unspecified forearm -M93841 Other specified osteochondropathies, right hand -M93842 Other specified osteochondropathies, left hand -M93849 Other specified osteochondropathies, unspecified hand -M93851 Other specified osteochondropathies, right thigh -M93852 Other specified osteochondropathies, left thigh -M93859 Other specified osteochondropathies, unspecified thigh -M93861 Other specified osteochondropathies, right lower leg -M93862 Other specified osteochondropathies, left lower leg -M93869 Other specified osteochondropathies, unspecified lower leg -M93871 Other specified osteochondropathies, right ankle and foot -M93872 Other specified osteochondropathies, left ankle and foot -M93879 Other specified osteochondropathies, unspecified ankle and foot -M9388 Other specified osteochondropathies other -M9389 Other specified osteochondropathies multiple sites -M9390 Osteochondropathy, unspecified of unspecified site -M93911 Osteochondropathy, unspecified, right shoulder -M93912 Osteochondropathy, unspecified, left shoulder -M93919 Osteochondropathy, unspecified, unspecified shoulder -M93921 Osteochondropathy, unspecified, right upper arm -M93922 Osteochondropathy, unspecified, left upper arm -M93929 Osteochondropathy, unspecified, unspecified upper arm -M93931 Osteochondropathy, unspecified, right forearm -M93932 Osteochondropathy, unspecified, left forearm -M93939 Osteochondropathy, unspecified, unspecified forearm -M93941 Osteochondropathy, unspecified, right hand -M93942 Osteochondropathy, unspecified, left hand -M93949 Osteochondropathy, unspecified, unspecified hand -M93951 Osteochondropathy, unspecified, right thigh -M93952 Osteochondropathy, unspecified, left thigh -M93959 Osteochondropathy, unspecified, unspecified thigh -M93961 Osteochondropathy, unspecified, right lower leg -M93962 Osteochondropathy, unspecified, left lower leg -M93969 Osteochondropathy, unspecified, unspecified lower leg -M93971 Osteochondropathy, unspecified, right ankle and foot -M93972 Osteochondropathy, unspecified, left ankle and foot -M93979 Osteochondropathy, unspecified, unspecified ankle and foot -M9398 Osteochondropathy, unspecified other -M9399 Osteochondropathy, unspecified multiple sites -M940 Chondrocostal junction syndrome [Tietze] -M941 Relapsing polychondritis -M9420 Chondromalacia, unspecified site -M94211 Chondromalacia, right shoulder -M94212 Chondromalacia, left shoulder -M94219 Chondromalacia, unspecified shoulder -M94221 Chondromalacia, right elbow -M94222 Chondromalacia, left elbow -M94229 Chondromalacia, unspecified elbow -M94231 Chondromalacia, right wrist -M94232 Chondromalacia, left wrist -M94239 Chondromalacia, unspecified wrist -M94241 Chondromalacia, joints of right hand -M94242 Chondromalacia, joints of left hand -M94249 Chondromalacia, joints of unspecified hand -M94251 Chondromalacia, right hip -M94252 Chondromalacia, left hip -M94259 Chondromalacia, unspecified hip -M94261 Chondromalacia, right knee -M94262 Chondromalacia, left knee -M94269 Chondromalacia, unspecified knee -M94271 Chondromalacia, right ankle and joints of right foot -M94272 Chondromalacia, left ankle and joints of left foot -M94279 Chondromalacia, unspecified ankle and joints of foot -M9428 Chondromalacia, other site -M9429 Chondromalacia, multiple sites -M94351 Chondrolysis, right hip -M94352 Chondrolysis, left hip -M94359 Chondrolysis, unspecified hip -M948X0 Other specified disorders of cartilage, multiple sites -M948X1 Other specified disorders of cartilage, shoulder -M948X2 Other specified disorders of cartilage, upper arm -M948X3 Other specified disorders of cartilage, forearm -M948X4 Other specified disorders of cartilage, hand -M948X5 Other specified disorders of cartilage, thigh -M948X6 Other specified disorders of cartilage, lower leg -M948X7 Other specified disorders of cartilage, ankle and foot -M948X8 Other specified disorders of cartilage, other site -M948X9 Other specified disorders of cartilage, unspecified sites -M949 Disorder of cartilage, unspecified -M950 Acquired deformity of nose -M9510 Cauliflower ear, unspecified ear -M9511 Cauliflower ear, right ear -M9512 Cauliflower ear, left ear -M952 Other acquired deformity of head -M953 Acquired deformity of neck -M954 Acquired deformity of chest and rib -M955 Acquired deformity of pelvis -M958 Other specified acquired deformities of musculoskeletal system -M959 Acquired deformity of musculoskeletal system, unspecified -M960 Pseudarthrosis after fusion or arthrodesis -M961 Postlaminectomy syndrome, not elsewhere classified -M962 Postradiation kyphosis -M963 Postlaminectomy kyphosis -M964 Postsurgical lordosis -M965 Postradiation scoliosis -M96621 Fracture of humerus following insertion of orthopedic implant, joint prosthesis, or bone plate, right arm -M96622 Fracture of humerus following insertion of orthopedic implant, joint prosthesis, or bone plate, left arm -M96629 Fracture of humerus following insertion of orthopedic implant, joint prosthesis, or bone plate, unspecified arm -M96631 Fracture of radius or ulna following insertion of orthopedic implant, joint prosthesis, or bone plate, right arm -M96632 Fracture of radius or ulna following insertion of orthopedic implant, joint prosthesis, or bone plate, left arm -M96639 Fracture of radius or ulna following insertion of orthopedic implant, joint prosthesis, or bone plate, unspecified arm -M9665 Fracture of pelvis following insertion of orthopedic implant, joint prosthesis, or bone plate -M96661 Fracture of femur following insertion of orthopedic implant, joint prosthesis, or bone plate, right leg -M96662 Fracture of femur following insertion of orthopedic implant, joint prosthesis, or bone plate, left leg -M96669 Fracture of femur following insertion of orthopedic implant, joint prosthesis, or bone plate, unspecified leg -M96671 Fracture of tibia or fibula following insertion of orthopedic implant, joint prosthesis, or bone plate, right leg -M96672 Fracture of tibia or fibula following insertion of orthopedic implant, joint prosthesis, or bone plate, left leg -M96679 Fracture of tibia or fibula following insertion of orthopedic implant, joint prosthesis, or bone plate, unspecified leg -M9669 Fracture of other bone following insertion of orthopedic implant, joint prosthesis, or bone plate -M96810 Intraoperative hemorrhage and hematoma of a musculoskeletal structure complicating a musculoskeletal system procedure -M96811 Intraoperative hemorrhage and hematoma of a musculoskeletal structure complicating other procedure -M96820 Accidental puncture and laceration of a musculoskeletal structure during a musculoskeletal system procedure -M96821 Accidental puncture and laceration of a musculoskeletal structure during other procedure -M96830 Postprocedural hemorrhage of a musculoskeletal structure following a musculoskeletal system procedure -M96831 Postprocedural hemorrhage of a musculoskeletal structure following other procedure -M96840 Postprocedural hematoma of a musculoskeletal structure following a musculoskeletal system procedure -M96841 Postprocedural hematoma of a musculoskeletal structure following other procedure -M96842 Postprocedural seroma of a musculoskeletal structure following a musculoskeletal system procedure -M96843 Postprocedural seroma of a musculoskeletal structure following other procedure -M9689 Other intraoperative and postprocedural complications and disorders of the musculoskeletal system -M9701XA Periprosthetic fracture around internal prosthetic right hip joint, initial encounter -M9701XD Periprosthetic fracture around internal prosthetic right hip joint, subsequent encounter -M9701XS Periprosthetic fracture around internal prosthetic right hip joint, sequela -M9702XA Periprosthetic fracture around internal prosthetic left hip joint, initial encounter -M9702XD Periprosthetic fracture around internal prosthetic left hip joint, subsequent encounter -M9702XS Periprosthetic fracture around internal prosthetic left hip joint, sequela -M9711XA Periprosthetic fracture around internal prosthetic right knee joint, initial encounter -M9711XD Periprosthetic fracture around internal prosthetic right knee joint, subsequent encounter -M9711XS Periprosthetic fracture around internal prosthetic right knee joint, sequela -M9712XA Periprosthetic fracture around internal prosthetic left knee joint, initial encounter -M9712XD Periprosthetic fracture around internal prosthetic left knee joint, subsequent encounter -M9712XS Periprosthetic fracture around internal prosthetic left knee joint, sequela -M9721XA Periprosthetic fracture around internal prosthetic right ankle joint, initial encounter -M9721XD Periprosthetic fracture around internal prosthetic right ankle joint, subsequent encounter -M9721XS Periprosthetic fracture around internal prosthetic right ankle joint, sequela -M9722XA Periprosthetic fracture around internal prosthetic left ankle joint, initial encounter -M9722XD Periprosthetic fracture around internal prosthetic left ankle joint, subsequent encounter -M9722XS Periprosthetic fracture around internal prosthetic left ankle joint, sequela -M9731XA Periprosthetic fracture around internal prosthetic right shoulder joint, initial encounter -M9731XD Periprosthetic fracture around internal prosthetic right shoulder joint, subsequent encounter -M9731XS Periprosthetic fracture around internal prosthetic right shoulder joint, sequela -M9732XA Periprosthetic fracture around internal prosthetic left shoulder joint, initial encounter -M9732XD Periprosthetic fracture around internal prosthetic left shoulder joint, subsequent encounter -M9732XS Periprosthetic fracture around internal prosthetic left shoulder joint, sequela -M9741XA Periprosthetic fracture around internal prosthetic right elbow joint, initial encounter -M9741XD Periprosthetic fracture around internal prosthetic right elbow joint, subsequent encounter -M9741XS Periprosthetic fracture around internal prosthetic right elbow joint, sequela -M9742XA Periprosthetic fracture around internal prosthetic left elbow joint, initial encounter -M9742XD Periprosthetic fracture around internal prosthetic left elbow joint, subsequent encounter -M9742XS Periprosthetic fracture around internal prosthetic left elbow joint, sequela -M978XXA Periprosthetic fracture around other internal prosthetic joint, initial encounter -M978XXD Periprosthetic fracture around other internal prosthetic joint, subsequent encounter -M978XXS Periprosthetic fracture around other internal prosthetic joint, sequela -M979XXA Periprosthetic fracture around unspecified internal prosthetic joint, initial encounter -M979XXD Periprosthetic fracture around unspecified internal prosthetic joint, subsequent encounter -M979XXS Periprosthetic fracture around unspecified internal prosthetic joint, sequela -M9900 Segmental and somatic dysfunction of head region -M9901 Segmental and somatic dysfunction of cervical region -M9902 Segmental and somatic dysfunction of thoracic region -M9903 Segmental and somatic dysfunction of lumbar region -M9904 Segmental and somatic dysfunction of sacral region -M9905 Segmental and somatic dysfunction of pelvic region -M9906 Segmental and somatic dysfunction of lower extremity -M9907 Segmental and somatic dysfunction of upper extremity -M9908 Segmental and somatic dysfunction of rib cage -M9909 Segmental and somatic dysfunction of abdomen and other regions -M9910 Subluxation complex (vertebral) of head region -M9911 Subluxation complex (vertebral) of cervical region -M9912 Subluxation complex (vertebral) of thoracic region -M9913 Subluxation complex (vertebral) of lumbar region -M9914 Subluxation complex (vertebral) of sacral region -M9915 Subluxation complex (vertebral) of pelvic region -M9916 Subluxation complex (vertebral) of lower extremity -M9917 Subluxation complex (vertebral) of upper extremity -M9918 Subluxation complex (vertebral) of rib cage -M9919 Subluxation complex (vertebral) of abdomen and other regions -M9920 Subluxation stenosis of neural canal of head region -M9921 Subluxation stenosis of neural canal of cervical region -M9922 Subluxation stenosis of neural canal of thoracic region -M9923 Subluxation stenosis of neural canal of lumbar region -M9924 Subluxation stenosis of neural canal of sacral region -M9925 Subluxation stenosis of neural canal of pelvic region -M9926 Subluxation stenosis of neural canal of lower extremity -M9927 Subluxation stenosis of neural canal of upper extremity -M9928 Subluxation stenosis of neural canal of rib cage -M9929 Subluxation stenosis of neural canal of abdomen and other regions -M9930 Osseous stenosis of neural canal of head region -M9931 Osseous stenosis of neural canal of cervical region -M9932 Osseous stenosis of neural canal of thoracic region -M9933 Osseous stenosis of neural canal of lumbar region -M9934 Osseous stenosis of neural canal of sacral region -M9935 Osseous stenosis of neural canal of pelvic region -M9936 Osseous stenosis of neural canal of lower extremity -M9937 Osseous stenosis of neural canal of upper extremity -M9938 Osseous stenosis of neural canal of rib cage -M9939 Osseous stenosis of neural canal of abdomen and other regions -M9940 Connective tissue stenosis of neural canal of head region -M9941 Connective tissue stenosis of neural canal of cervical region -M9942 Connective tissue stenosis of neural canal of thoracic region -M9943 Connective tissue stenosis of neural canal of lumbar region -M9944 Connective tissue stenosis of neural canal of sacral region -M9945 Connective tissue stenosis of neural canal of pelvic region -M9946 Connective tissue stenosis of neural canal of lower extremity -M9947 Connective tissue stenosis of neural canal of upper extremity -M9948 Connective tissue stenosis of neural canal of rib cage -M9949 Connective tissue stenosis of neural canal of abdomen and other regions -M9950 Intervertebral disc stenosis of neural canal of head region -M9951 Intervertebral disc stenosis of neural canal of cervical region -M9952 Intervertebral disc stenosis of neural canal of thoracic region -M9953 Intervertebral disc stenosis of neural canal of lumbar region -M9954 Intervertebral disc stenosis of neural canal of sacral region -M9955 Intervertebral disc stenosis of neural canal of pelvic region -M9956 Intervertebral disc stenosis of neural canal of lower extremity -M9957 Intervertebral disc stenosis of neural canal of upper extremity -M9958 Intervertebral disc stenosis of neural canal of rib cage -M9959 Intervertebral disc stenosis of neural canal of abdomen and other regions -M9960 Osseous and subluxation stenosis of intervertebral foramina of head region -M9961 Osseous and subluxation stenosis of intervertebral foramina of cervical region -M9962 Osseous and subluxation stenosis of intervertebral foramina of thoracic region -M9963 Osseous and subluxation stenosis of intervertebral foramina of lumbar region -M9964 Osseous and subluxation stenosis of intervertebral foramina of sacral region -M9965 Osseous and subluxation stenosis of intervertebral foramina of pelvic region -M9966 Osseous and subluxation stenosis of intervertebral foramina of lower extremity -M9967 Osseous and subluxation stenosis of intervertebral foramina of upper extremity -M9968 Osseous and subluxation stenosis of intervertebral foramina of rib cage -M9969 Osseous and subluxation stenosis of intervertebral foramina of abdomen and other regions -M9970 Connective tissue and disc stenosis of intervertebral foramina of head region -M9971 Connective tissue and disc stenosis of intervertebral foramina of cervical region -M9972 Connective tissue and disc stenosis of intervertebral foramina of thoracic region -M9973 Connective tissue and disc stenosis of intervertebral foramina of lumbar region -M9974 Connective tissue and disc stenosis of intervertebral foramina of sacral region -M9975 Connective tissue and disc stenosis of intervertebral foramina of pelvic region -M9976 Connective tissue and disc stenosis of intervertebral foramina of lower extremity -M9977 Connective tissue and disc stenosis of intervertebral foramina of upper extremity -M9978 Connective tissue and disc stenosis of intervertebral foramina of rib cage -M9979 Connective tissue and disc stenosis of intervertebral foramina of abdomen and other regions -M9980 Other biomechanical lesions of head region -M9981 Other biomechanical lesions of cervical region -M9982 Other biomechanical lesions of thoracic region -M9983 Other biomechanical lesions of lumbar region -M9984 Other biomechanical lesions of sacral region -M9985 Other biomechanical lesions of pelvic region -M9986 Other biomechanical lesions of lower extremity -M9987 Other biomechanical lesions of upper extremity -M9988 Other biomechanical lesions of rib cage -M9989 Other biomechanical lesions of abdomen and other regions -M999 Biomechanical lesion, unspecified -N000 Acute nephritic syndrome with minor glomerular abnormality -N001 Acute nephritic syndrome with focal and segmental glomerular lesions -N002 Acute nephritic syndrome with diffuse membranous glomerulonephritis -N003 Acute nephritic syndrome with diffuse mesangial proliferative glomerulonephritis -N004 Acute nephritic syndrome with diffuse endocapillary proliferative glomerulonephritis -N005 Acute nephritic syndrome with diffuse mesangiocapillary glomerulonephritis -N006 Acute nephritic syndrome with dense deposit disease -N007 Acute nephritic syndrome with diffuse crescentic glomerulonephritis -N008 Acute nephritic syndrome with other morphologic changes -N009 Acute nephritic syndrome with unspecified morphologic changes -N010 Rapidly progressive nephritic syndrome with minor glomerular abnormality -N011 Rapidly progressive nephritic syndrome with focal and segmental glomerular lesions -N012 Rapidly progressive nephritic syndrome with diffuse membranous glomerulonephritis -N013 Rapidly progressive nephritic syndrome with diffuse mesangial proliferative glomerulonephritis -N014 Rapidly progressive nephritic syndrome with diffuse endocapillary proliferative glomerulonephritis -N015 Rapidly progressive nephritic syndrome with diffuse mesangiocapillary glomerulonephritis -N016 Rapidly progressive nephritic syndrome with dense deposit disease -N017 Rapidly progressive nephritic syndrome with diffuse crescentic glomerulonephritis -N018 Rapidly progressive nephritic syndrome with other morphologic changes -N019 Rapidly progressive nephritic syndrome with unspecified morphologic changes -N020 Recurrent and persistent hematuria with minor glomerular abnormality -N021 Recurrent and persistent hematuria with focal and segmental glomerular lesions -N022 Recurrent and persistent hematuria with diffuse membranous glomerulonephritis -N023 Recurrent and persistent hematuria with diffuse mesangial proliferative glomerulonephritis -N024 Recurrent and persistent hematuria with diffuse endocapillary proliferative glomerulonephritis -N025 Recurrent and persistent hematuria with diffuse mesangiocapillary glomerulonephritis -N026 Recurrent and persistent hematuria with dense deposit disease -N027 Recurrent and persistent hematuria with diffuse crescentic glomerulonephritis -N028 Recurrent and persistent hematuria with other morphologic changes -N029 Recurrent and persistent hematuria with unspecified morphologic changes -N030 Chronic nephritic syndrome with minor glomerular abnormality -N031 Chronic nephritic syndrome with focal and segmental glomerular lesions -N032 Chronic nephritic syndrome with diffuse membranous glomerulonephritis -N033 Chronic nephritic syndrome with diffuse mesangial proliferative glomerulonephritis -N034 Chronic nephritic syndrome with diffuse endocapillary proliferative glomerulonephritis -N035 Chronic nephritic syndrome with diffuse mesangiocapillary glomerulonephritis -N036 Chronic nephritic syndrome with dense deposit disease -N037 Chronic nephritic syndrome with diffuse crescentic glomerulonephritis -N038 Chronic nephritic syndrome with other morphologic changes -N039 Chronic nephritic syndrome with unspecified morphologic changes -N040 Nephrotic syndrome with minor glomerular abnormality -N041 Nephrotic syndrome with focal and segmental glomerular lesions -N042 Nephrotic syndrome with diffuse membranous glomerulonephritis -N043 Nephrotic syndrome with diffuse mesangial proliferative glomerulonephritis -N044 Nephrotic syndrome with diffuse endocapillary proliferative glomerulonephritis -N045 Nephrotic syndrome with diffuse mesangiocapillary glomerulonephritis -N046 Nephrotic syndrome with dense deposit disease -N047 Nephrotic syndrome with diffuse crescentic glomerulonephritis -N048 Nephrotic syndrome with other morphologic changes -N049 Nephrotic syndrome with unspecified morphologic changes -N050 Unspecified nephritic syndrome with minor glomerular abnormality -N051 Unspecified nephritic syndrome with focal and segmental glomerular lesions -N052 Unspecified nephritic syndrome with diffuse membranous glomerulonephritis -N053 Unspecified nephritic syndrome with diffuse mesangial proliferative glomerulonephritis -N054 Unspecified nephritic syndrome with diffuse endocapillary proliferative glomerulonephritis -N055 Unspecified nephritic syndrome with diffuse mesangiocapillary glomerulonephritis -N056 Unspecified nephritic syndrome with dense deposit disease -N057 Unspecified nephritic syndrome with diffuse crescentic glomerulonephritis -N058 Unspecified nephritic syndrome with other morphologic changes -N059 Unspecified nephritic syndrome with unspecified morphologic changes -N060 Isolated proteinuria with minor glomerular abnormality -N061 Isolated proteinuria with focal and segmental glomerular lesions -N062 Isolated proteinuria with diffuse membranous glomerulonephritis -N063 Isolated proteinuria with diffuse mesangial proliferative glomerulonephritis -N064 Isolated proteinuria with diffuse endocapillary proliferative glomerulonephritis -N065 Isolated proteinuria with diffuse mesangiocapillary glomerulonephritis -N066 Isolated proteinuria with dense deposit disease -N067 Isolated proteinuria with diffuse crescentic glomerulonephritis -N068 Isolated proteinuria with other morphologic lesion -N069 Isolated proteinuria with unspecified morphologic lesion -N070 Hereditary nephropathy, not elsewhere classified with minor glomerular abnormality -N071 Hereditary nephropathy, not elsewhere classified with focal and segmental glomerular lesions -N072 Hereditary nephropathy, not elsewhere classified with diffuse membranous glomerulonephritis -N073 Hereditary nephropathy, not elsewhere classified with diffuse mesangial proliferative glomerulonephritis -N074 Hereditary nephropathy, not elsewhere classified with diffuse endocapillary proliferative glomerulonephritis -N075 Hereditary nephropathy, not elsewhere classified with diffuse mesangiocapillary glomerulonephritis -N076 Hereditary nephropathy, not elsewhere classified with dense deposit disease -N077 Hereditary nephropathy, not elsewhere classified with diffuse crescentic glomerulonephritis -N078 Hereditary nephropathy, not elsewhere classified with other morphologic lesions -N079 Hereditary nephropathy, not elsewhere classified with unspecified morphologic lesions -N08 Glomerular disorders in diseases classified elsewhere -N10 Acute pyelonephritis -N110 Nonobstructive reflux-associated chronic pyelonephritis -N111 Chronic obstructive pyelonephritis -N118 Other chronic tubulo-interstitial nephritis -N119 Chronic tubulo-interstitial nephritis, unspecified -N12 Tubulo-interstitial nephritis, not specified as acute or chronic -N130 Hydronephrosis with ureteropelvic junction obstruction -N131 Hydronephrosis with ureteral stricture, not elsewhere classified -N132 Hydronephrosis with renal and ureteral calculous obstruction -N1330 Unspecified hydronephrosis -N1339 Other hydronephrosis -N134 Hydroureter -N135 Crossing vessel and stricture of ureter without hydronephrosis -N136 Pyonephrosis -N1370 Vesicoureteral-reflux, unspecified -N1371 Vesicoureteral-reflux without reflux nephropathy -N13721 Vesicoureteral-reflux with reflux nephropathy without hydroureter, unilateral -N13722 Vesicoureteral-reflux with reflux nephropathy without hydroureter, bilateral -N13729 Vesicoureteral-reflux with reflux nephropathy without hydroureter, unspecified -N13731 Vesicoureteral-reflux with reflux nephropathy with hydroureter, unilateral -N13732 Vesicoureteral-reflux with reflux nephropathy with hydroureter, bilateral -N13739 Vesicoureteral-reflux with reflux nephropathy with hydroureter, unspecified -N138 Other obstructive and reflux uropathy -N139 Obstructive and reflux uropathy, unspecified -N140 Analgesic nephropathy -N141 Nephropathy induced by other drugs, medicaments and biological substances -N142 Nephropathy induced by unspecified drug, medicament or biological substance -N143 Nephropathy induced by heavy metals -N144 Toxic nephropathy, not elsewhere classified -N150 Balkan nephropathy -N151 Renal and perinephric abscess -N158 Other specified renal tubulo-interstitial diseases -N159 Renal tubulo-interstitial disease, unspecified -N16 Renal tubulo-interstitial disorders in diseases classified elsewhere -N170 Acute kidney failure with tubular necrosis -N171 Acute kidney failure with acute cortical necrosis -N172 Acute kidney failure with medullary necrosis -N178 Other acute kidney failure -N179 Acute kidney failure, unspecified -N181 Chronic kidney disease, stage 1 -N182 Chronic kidney disease, stage 2 (mild) -N183 Chronic kidney disease, stage 3 (moderate) -N184 Chronic kidney disease, stage 4 (severe) -N185 Chronic kidney disease, stage 5 -N186 End stage renal disease -N189 Chronic kidney disease, unspecified -N19 Unspecified kidney failure -N200 Calculus of kidney -N201 Calculus of ureter -N202 Calculus of kidney with calculus of ureter -N209 Urinary calculus, unspecified -N210 Calculus in bladder -N211 Calculus in urethra -N218 Other lower urinary tract calculus -N219 Calculus of lower urinary tract, unspecified -N22 Calculus of urinary tract in diseases classified elsewhere -N23 Unspecified renal colic -N250 Renal osteodystrophy -N251 Nephrogenic diabetes insipidus -N2581 Secondary hyperparathyroidism of renal origin -N2589 Other disorders resulting from impaired renal tubular function -N259 Disorder resulting from impaired renal tubular function, unspecified -N261 Atrophy of kidney (terminal) -N262 Page kidney -N269 Renal sclerosis, unspecified -N270 Small kidney, unilateral -N271 Small kidney, bilateral -N279 Small kidney, unspecified -N280 Ischemia and infarction of kidney -N281 Cyst of kidney, acquired -N2881 Hypertrophy of kidney -N2882 Megaloureter -N2883 Nephroptosis -N2884 Pyelitis cystica -N2885 Pyeloureteritis cystica -N2886 Ureteritis cystica -N2889 Other specified disorders of kidney and ureter -N289 Disorder of kidney and ureter, unspecified -N29 Other disorders of kidney and ureter in diseases classified elsewhere -N3000 Acute cystitis without hematuria -N3001 Acute cystitis with hematuria -N3010 Interstitial cystitis (chronic) without hematuria -N3011 Interstitial cystitis (chronic) with hematuria -N3020 Other chronic cystitis without hematuria -N3021 Other chronic cystitis with hematuria -N3030 Trigonitis without hematuria -N3031 Trigonitis with hematuria -N3040 Irradiation cystitis without hematuria -N3041 Irradiation cystitis with hematuria -N3080 Other cystitis without hematuria -N3081 Other cystitis with hematuria -N3090 Cystitis, unspecified without hematuria -N3091 Cystitis, unspecified with hematuria -N310 Uninhibited neuropathic bladder, not elsewhere classified -N311 Reflex neuropathic bladder, not elsewhere classified -N312 Flaccid neuropathic bladder, not elsewhere classified -N318 Other neuromuscular dysfunction of bladder -N319 Neuromuscular dysfunction of bladder, unspecified -N320 Bladder-neck obstruction -N321 Vesicointestinal fistula -N322 Vesical fistula, not elsewhere classified -N323 Diverticulum of bladder -N3281 Overactive bladder -N3289 Other specified disorders of bladder -N329 Bladder disorder, unspecified -N33 Bladder disorders in diseases classified elsewhere -N340 Urethral abscess -N341 Nonspecific urethritis -N342 Other urethritis -N343 Urethral syndrome, unspecified -N35010 Post-traumatic urethral stricture, male, meatal -N35011 Post-traumatic bulbous urethral stricture -N35012 Post-traumatic membranous urethral stricture -N35013 Post-traumatic anterior urethral stricture -N35014 Post-traumatic urethral stricture, male, unspecified -N35021 Urethral stricture due to childbirth -N35028 Other post-traumatic urethral stricture, female -N35111 Postinfective urethral stricture, not elsewhere classified, male, meatal -N35112 Postinfective bulbous urethral stricture, not elsewhere classified -N35113 Postinfective membranous urethral stricture, not elsewhere classified -N35114 Postinfective anterior urethral stricture, not elsewhere classified -N35119 Postinfective urethral stricture, not elsewhere classified, male, unspecified -N3512 Postinfective urethral stricture, not elsewhere classified, female -N358 Other urethral stricture -N359 Urethral stricture, unspecified -N360 Urethral fistula -N361 Urethral diverticulum -N362 Urethral caruncle -N3641 Hypermobility of urethra -N3642 Intrinsic sphincter deficiency (ISD) -N3643 Combined hypermobility of urethra and intrinsic sphincter deficiency -N3644 Muscular disorders of urethra -N365 Urethral false passage -N368 Other specified disorders of urethra -N369 Urethral disorder, unspecified -N37 Urethral disorders in diseases classified elsewhere -N390 Urinary tract infection, site not specified -N393 Stress incontinence (female) (male) -N3941 Urge incontinence -N3942 Incontinence without sensory awareness -N3943 Post-void dribbling -N3944 Nocturnal enuresis -N3945 Continuous leakage -N3946 Mixed incontinence -N39490 Overflow incontinence -N39491 Coital incontinence -N39492 Postural (urinary) incontinence -N39498 Other specified urinary incontinence -N398 Other specified disorders of urinary system -N399 Disorder of urinary system, unspecified -N400 Benign prostatic hyperplasia without lower urinary tract symptoms -N401 Benign prostatic hyperplasia with lower urinary tract symptoms -N402 Nodular prostate without lower urinary tract symptoms -N403 Nodular prostate with lower urinary tract symptoms -N410 Acute prostatitis -N411 Chronic prostatitis -N412 Abscess of prostate -N413 Prostatocystitis -N414 Granulomatous prostatitis -N418 Other inflammatory diseases of prostate -N419 Inflammatory disease of prostate, unspecified -N420 Calculus of prostate -N421 Congestion and hemorrhage of prostate -N4230 Unspecified dysplasia of prostate -N4231 Prostatic intraepithelial neoplasia -N4232 Atypical small acinar proliferation of prostate -N4239 Other dysplasia of prostate -N4281 Prostatodynia syndrome -N4282 Prostatosis syndrome -N4283 Cyst of prostate -N4289 Other specified disorders of prostate -N429 Disorder of prostate, unspecified -N430 Encysted hydrocele -N431 Infected hydrocele -N432 Other hydrocele -N433 Hydrocele, unspecified -N4340 Spermatocele of epididymis, unspecified -N4341 Spermatocele of epididymis, single -N4342 Spermatocele of epididymis, multiple -N4400 Torsion of testis, unspecified -N4401 Extravaginal torsion of spermatic cord -N4402 Intravaginal torsion of spermatic cord -N4403 Torsion of appendix testis -N4404 Torsion of appendix epididymis -N441 Cyst of tunica albuginea testis -N442 Benign cyst of testis -N448 Other noninflammatory disorders of the testis -N451 Epididymitis -N452 Orchitis -N453 Epididymo-orchitis -N454 Abscess of epididymis or testis -N4601 Organic azoospermia -N46021 Azoospermia due to drug therapy -N46022 Azoospermia due to infection -N46023 Azoospermia due to obstruction of efferent ducts -N46024 Azoospermia due to radiation -N46025 Azoospermia due to systemic disease -N46029 Azoospermia due to other extratesticular causes -N4611 Organic oligospermia -N46121 Oligospermia due to drug therapy -N46122 Oligospermia due to infection -N46123 Oligospermia due to obstruction of efferent ducts -N46124 Oligospermia due to radiation -N46125 Oligospermia due to systemic disease -N46129 Oligospermia due to other extratesticular causes -N468 Other male infertility -N469 Male infertility, unspecified -N470 Adherent prepuce, newborn -N471 Phimosis -N472 Paraphimosis -N473 Deficient foreskin -N474 Benign cyst of prepuce -N475 Adhesions of prepuce and glans penis -N476 Balanoposthitis -N477 Other inflammatory diseases of prepuce -N478 Other disorders of prepuce -N480 Leukoplakia of penis -N481 Balanitis -N4821 Abscess of corpus cavernosum and penis -N4822 Cellulitis of corpus cavernosum and penis -N4829 Other inflammatory disorders of penis -N4830 Priapism, unspecified -N4831 Priapism due to trauma -N4832 Priapism due to disease classified elsewhere -N4833 Priapism, drug-induced -N4839 Other priapism -N485 Ulcer of penis -N486 Induration penis plastica -N4881 Thrombosis of superficial vein of penis -N4882 Acquired torsion of penis -N4883 Acquired buried penis -N4889 Other specified disorders of penis -N489 Disorder of penis, unspecified -N490 Inflammatory disorders of seminal vesicle -N491 Inflammatory disorders of spermatic cord, tunica vaginalis and vas deferens -N492 Inflammatory disorders of scrotum -N493 Fournier gangrene -N498 Inflammatory disorders of other specified male genital organs -N499 Inflammatory disorder of unspecified male genital organ -N500 Atrophy of testis -N501 Vascular disorders of male genital organs -N503 Cyst of epididymis -N50811 Right testicular pain -N50812 Left testicular pain -N50819 Testicular pain, unspecified -N5082 Scrotal pain -N5089 Other specified disorders of the male genital organs -N509 Disorder of male genital organs, unspecified -N51 Disorders of male genital organs in diseases classified elsewhere -N5201 Erectile dysfunction due to arterial insufficiency -N5202 Corporo-venous occlusive erectile dysfunction -N5203 Combined arterial insufficiency and corporo-venous occlusive erectile dysfunction -N521 Erectile dysfunction due to diseases classified elsewhere -N522 Drug-induced erectile dysfunction -N5231 Erectile dysfunction following radical prostatectomy -N5232 Erectile dysfunction following radical cystectomy -N5233 Erectile dysfunction following urethral surgery -N5234 Erectile dysfunction following simple prostatectomy -N5235 Erectile dysfunction following radiation therapy -N5236 Erectile dysfunction following interstitial seed therapy -N5237 Erectile dysfunction following prostate ablative therapy -N5239 Other and unspecified postprocedural erectile dysfunction -N528 Other male erectile dysfunction -N529 Male erectile dysfunction, unspecified -N5311 Retarded ejaculation -N5312 Painful ejaculation -N5313 Anejaculatory orgasm -N5314 Retrograde ejaculation -N5319 Other ejaculatory dysfunction -N538 Other male sexual dysfunction -N539 Unspecified male sexual dysfunction -N6001 Solitary cyst of right breast -N6002 Solitary cyst of left breast -N6009 Solitary cyst of unspecified breast -N6011 Diffuse cystic mastopathy of right breast -N6012 Diffuse cystic mastopathy of left breast -N6019 Diffuse cystic mastopathy of unspecified breast -N6021 Fibroadenosis of right breast -N6022 Fibroadenosis of left breast -N6029 Fibroadenosis of unspecified breast -N6031 Fibrosclerosis of right breast -N6032 Fibrosclerosis of left breast -N6039 Fibrosclerosis of unspecified breast -N6041 Mammary duct ectasia of right breast -N6042 Mammary duct ectasia of left breast -N6049 Mammary duct ectasia of unspecified breast -N6081 Other benign mammary dysplasias of right breast -N6082 Other benign mammary dysplasias of left breast -N6089 Other benign mammary dysplasias of unspecified breast -N6091 Unspecified benign mammary dysplasia of right breast -N6092 Unspecified benign mammary dysplasia of left breast -N6099 Unspecified benign mammary dysplasia of unspecified breast -N610 Mastitis without abscess -N611 Abscess of the breast and nipple -N62 Hypertrophy of breast -N63 Unspecified lump in breast -N640 Fissure and fistula of nipple -N641 Fat necrosis of breast -N642 Atrophy of breast -N643 Galactorrhea not associated with childbirth -N644 Mastodynia -N6451 Induration of breast -N6452 Nipple discharge -N6453 Retraction of nipple -N6459 Other signs and symptoms in breast -N6481 Ptosis of breast -N6482 Hypoplasia of breast -N6489 Other specified disorders of breast -N649 Disorder of breast, unspecified -N650 Deformity of reconstructed breast -N651 Disproportion of reconstructed breast -N7001 Acute salpingitis -N7002 Acute oophoritis -N7003 Acute salpingitis and oophoritis -N7011 Chronic salpingitis -N7012 Chronic oophoritis -N7013 Chronic salpingitis and oophoritis -N7091 Salpingitis, unspecified -N7092 Oophoritis, unspecified -N7093 Salpingitis and oophoritis, unspecified -N710 Acute inflammatory disease of uterus -N711 Chronic inflammatory disease of uterus -N719 Inflammatory disease of uterus, unspecified -N72 Inflammatory disease of cervix uteri -N730 Acute parametritis and pelvic cellulitis -N731 Chronic parametritis and pelvic cellulitis -N732 Unspecified parametritis and pelvic cellulitis -N733 Female acute pelvic peritonitis -N734 Female chronic pelvic peritonitis -N735 Female pelvic peritonitis, unspecified -N736 Female pelvic peritoneal adhesions (postinfective) -N738 Other specified female pelvic inflammatory diseases -N739 Female pelvic inflammatory disease, unspecified -N74 Female pelvic inflammatory disorders in diseases classified elsewhere -N750 Cyst of Bartholin's gland -N751 Abscess of Bartholin's gland -N758 Other diseases of Bartholin's gland -N759 Disease of Bartholin's gland, unspecified -N760 Acute vaginitis -N761 Subacute and chronic vaginitis -N762 Acute vulvitis -N763 Subacute and chronic vulvitis -N764 Abscess of vulva -N765 Ulceration of vagina -N766 Ulceration of vulva -N7681 Mucositis (ulcerative) of vagina and vulva -N7689 Other specified inflammation of vagina and vulva -N770 Ulceration of vulva in diseases classified elsewhere -N771 Vaginitis, vulvitis and vulvovaginitis in diseases classified elsewhere -N800 Endometriosis of uterus -N801 Endometriosis of ovary -N802 Endometriosis of fallopian tube -N803 Endometriosis of pelvic peritoneum -N804 Endometriosis of rectovaginal septum and vagina -N805 Endometriosis of intestine -N806 Endometriosis in cutaneous scar -N808 Other endometriosis -N809 Endometriosis, unspecified -N810 Urethrocele -N8110 Cystocele, unspecified -N8111 Cystocele, midline -N8112 Cystocele, lateral -N812 Incomplete uterovaginal prolapse -N813 Complete uterovaginal prolapse -N814 Uterovaginal prolapse, unspecified -N815 Vaginal enterocele -N816 Rectocele -N8181 Perineocele -N8182 Incompetence or weakening of pubocervical tissue -N8183 Incompetence or weakening of rectovaginal tissue -N8184 Pelvic muscle wasting -N8185 Cervical stump prolapse -N8189 Other female genital prolapse -N819 Female genital prolapse, unspecified -N820 Vesicovaginal fistula -N821 Other female urinary-genital tract fistulae -N822 Fistula of vagina to small intestine -N823 Fistula of vagina to large intestine -N824 Other female intestinal-genital tract fistulae -N825 Female genital tract-skin fistulae -N828 Other female genital tract fistulae -N829 Female genital tract fistula, unspecified -N8300 Follicular cyst of ovary, unspecified side -N8301 Follicular cyst of right ovary -N8302 Follicular cyst of left ovary -N8310 Corpus luteum cyst of ovary, unspecified side -N8311 Corpus luteum cyst of right ovary -N8312 Corpus luteum cyst of left ovary -N83201 Unspecified ovarian cyst, right side -N83202 Unspecified ovarian cyst, left side -N83209 Unspecified ovarian cyst, unspecified side -N83291 Other ovarian cyst, right side -N83292 Other ovarian cyst, left side -N83299 Other ovarian cyst, unspecified side -N83311 Acquired atrophy of right ovary -N83312 Acquired atrophy of left ovary -N83319 Acquired atrophy of ovary, unspecified side -N83321 Acquired atrophy of right fallopian tube -N83322 Acquired atrophy of left fallopian tube -N83329 Acquired atrophy of fallopian tube, unspecified side -N83331 Acquired atrophy of right ovary and fallopian tube -N83332 Acquired atrophy of left ovary and fallopian tube -N83339 Acquired atrophy of ovary and fallopian tube, unspecified side -N8340 Prolapse and hernia of ovary and fallopian tube, unspecified side -N8341 Prolapse and hernia of right ovary and fallopian tube -N8342 Prolapse and hernia of left ovary and fallopian tube -N83511 Torsion of right ovary and ovarian pedicle -N83512 Torsion of left ovary and ovarian pedicle -N83519 Torsion of ovary and ovarian pedicle, unspecified side -N83521 Torsion of right fallopian tube -N83522 Torsion of left fallopian tube -N83529 Torsion of fallopian tube, unspecified side -N8353 Torsion of ovary, ovarian pedicle and fallopian tube -N836 Hematosalpinx -N837 Hematoma of broad ligament -N838 Other noninflammatory disorders of ovary, fallopian tube and broad ligament -N839 Noninflammatory disorder of ovary, fallopian tube and broad ligament, unspecified -N840 Polyp of corpus uteri -N841 Polyp of cervix uteri -N842 Polyp of vagina -N843 Polyp of vulva -N848 Polyp of other parts of female genital tract -N849 Polyp of female genital tract, unspecified -N8500 Endometrial hyperplasia, unspecified -N8501 Benign endometrial hyperplasia -N8502 Endometrial intraepithelial neoplasia [EIN] -N852 Hypertrophy of uterus -N853 Subinvolution of uterus -N854 Malposition of uterus -N855 Inversion of uterus -N856 Intrauterine synechiae -N857 Hematometra -N858 Other specified noninflammatory disorders of uterus -N859 Noninflammatory disorder of uterus, unspecified -N86 Erosion and ectropion of cervix uteri -N870 Mild cervical dysplasia -N871 Moderate cervical dysplasia -N879 Dysplasia of cervix uteri, unspecified -N880 Leukoplakia of cervix uteri -N881 Old laceration of cervix uteri -N882 Stricture and stenosis of cervix uteri -N883 Incompetence of cervix uteri -N884 Hypertrophic elongation of cervix uteri -N888 Other specified noninflammatory disorders of cervix uteri -N889 Noninflammatory disorder of cervix uteri, unspecified -N890 Mild vaginal dysplasia -N891 Moderate vaginal dysplasia -N893 Dysplasia of vagina, unspecified -N894 Leukoplakia of vagina -N895 Stricture and atresia of vagina -N896 Tight hymenal ring -N897 Hematocolpos -N898 Other specified noninflammatory disorders of vagina -N899 Noninflammatory disorder of vagina, unspecified -N900 Mild vulvar dysplasia -N901 Moderate vulvar dysplasia -N903 Dysplasia of vulva, unspecified -N904 Leukoplakia of vulva -N905 Atrophy of vulva -N9060 Unspecified hypertrophy of vulva -N9061 Childhood asymmetric labium majus enlargement -N9069 Other specified hypertrophy of vulva -N907 Vulvar cyst -N90810 Female genital mutilation status, unspecified -N90811 Female genital mutilation Type I status -N90812 Female genital mutilation Type II status -N90813 Female genital mutilation Type III status -N90818 Other female genital mutilation status -N9089 Other specified noninflammatory disorders of vulva and perineum -N909 Noninflammatory disorder of vulva and perineum, unspecified -N910 Primary amenorrhea -N911 Secondary amenorrhea -N912 Amenorrhea, unspecified -N913 Primary oligomenorrhea -N914 Secondary oligomenorrhea -N915 Oligomenorrhea, unspecified -N920 Excessive and frequent menstruation with regular cycle -N921 Excessive and frequent menstruation with irregular cycle -N922 Excessive menstruation at puberty -N923 Ovulation bleeding -N924 Excessive bleeding in the premenopausal period -N925 Other specified irregular menstruation -N926 Irregular menstruation, unspecified -N930 Postcoital and contact bleeding -N931 Pre-pubertal vaginal bleeding -N938 Other specified abnormal uterine and vaginal bleeding -N939 Abnormal uterine and vaginal bleeding, unspecified -N940 Mittelschmerz -N9410 Unspecified dyspareunia -N9411 Superficial (introital) dyspareunia -N9412 Deep dyspareunia -N9419 Other specified dyspareunia -N942 Vaginismus -N943 Premenstrual tension syndrome -N944 Primary dysmenorrhea -N945 Secondary dysmenorrhea -N946 Dysmenorrhea, unspecified -N94810 Vulvar vestibulitis -N94818 Other vulvodynia -N94819 Vulvodynia, unspecified -N9489 Other specified conditions associated with female genital organs and menstrual cycle -N949 Unspecified condition associated with female genital organs and menstrual cycle -N950 Postmenopausal bleeding -N951 Menopausal and female climacteric states -N952 Postmenopausal atrophic vaginitis -N958 Other specified menopausal and perimenopausal disorders -N959 Unspecified menopausal and perimenopausal disorder -N96 Recurrent pregnancy loss -N970 Female infertility associated with anovulation -N971 Female infertility of tubal origin -N972 Female infertility of uterine origin -N978 Female infertility of other origin -N979 Female infertility, unspecified -N980 Infection associated with artificial insemination -N981 Hyperstimulation of ovaries -N982 Complications of attempted introduction of fertilized ovum following in vitro fertilization -N983 Complications of attempted introduction of embryo in embryo transfer -N988 Other complications associated with artificial fertilization -N989 Complication associated with artificial fertilization, unspecified -N990 Postprocedural (acute) (chronic) kidney failure -N99110 Postprocedural urethral stricture, male, meatal -N99111 Postprocedural bulbous urethral stricture -N99112 Postprocedural membranous urethral stricture -N99113 Postprocedural anterior bulbous urethral stricture -N99114 Postprocedural urethral stricture, male, unspecified -N99115 Postprocedural fossa navicularis urethral stricture -N9912 Postprocedural urethral stricture, female -N992 Postprocedural adhesions of vagina -N993 Prolapse of vaginal vault after hysterectomy -N994 Postprocedural pelvic peritoneal adhesions -N99510 Cystostomy hemorrhage -N99511 Cystostomy infection -N99512 Cystostomy malfunction -N99518 Other cystostomy complication -N99520 Hemorrhage of incontinent external stoma of urinary tract -N99521 Infection of incontinent external stoma of urinary tract -N99522 Malfunction of incontinent external stoma of urinary tract -N99523 Herniation of incontinent stoma of urinary tract -N99524 Stenosis of incontinent stoma of urinary tract -N99528 Other complication of incontinent external stoma of urinary tract -N99530 Hemorrhage of continent stoma of urinary tract -N99531 Infection of continent stoma of urinary tract -N99532 Malfunction of continent stoma of urinary tract -N99533 Herniation of continent stoma of urinary tract -N99534 Stenosis of continent stoma of urinary tract -N99538 Other complication of continent stoma of urinary tract -N9961 Intraoperative hemorrhage and hematoma of a genitourinary system organ or structure complicating a genitourinary system procedure -N9962 Intraoperative hemorrhage and hematoma of a genitourinary system organ or structure complicating other procedure -N9971 Accidental puncture and laceration of a genitourinary system organ or structure during a genitourinary system procedure -N9972 Accidental puncture and laceration of a genitourinary system organ or structure during other procedure -N9981 Other intraoperative complications of genitourinary system -N99820 Postprocedural hemorrhage of a genitourinary system organ or structure following a genitourinary system procedure -N99821 Postprocedural hemorrhage of a genitourinary system organ or structure following other procedure -N9983 Residual ovary syndrome -N99840 Postprocedural hematoma of a genitourinary system organ or structure following a genitourinary system procedure -N99841 Postprocedural hematoma of a genitourinary system organ or structure following other procedure -N99842 Postprocedural seroma of a genitourinary system organ or structure following a genitourinary system procedure -N99843 Postprocedural seroma of a genitourinary system organ or structure following other procedure -N9989 Other postprocedural complications and disorders of genitourinary system -O0000 Abdominal pregnancy without intrauterine pregnancy -O0001 Abdominal pregnancy with intrauterine pregnancy -O0010 Tubal pregnancy without intrauterine pregnancy -O0011 Tubal pregnancy with intrauterine pregnancy -O0020 Ovarian pregnancy without intrauterine pregnancy -O0021 Ovarian pregnancy with intrauterine pregnancy -O0080 Other ectopic pregnancy without intrauterine pregnancy -O0081 Other ectopic pregnancy with intrauterine pregnancy -O0090 Unspecified ectopic pregnancy without intrauterine pregnancy -O0091 Unspecified ectopic pregnancy with intrauterine pregnancy -O010 Classical hydatidiform mole -O011 Incomplete and partial hydatidiform mole -O019 Hydatidiform mole, unspecified -O020 Blighted ovum and nonhydatidiform mole -O021 Missed abortion -O0281 Inappropriate change in quantitative human chorionic gonadotropin (hCG) in early pregnancy -O0289 Other abnormal products of conception -O029 Abnormal product of conception, unspecified -O030 Genital tract and pelvic infection following incomplete spontaneous abortion -O031 Delayed or excessive hemorrhage following incomplete spontaneous abortion -O032 Embolism following incomplete spontaneous abortion -O0330 Unspecified complication following incomplete spontaneous abortion -O0331 Shock following incomplete spontaneous abortion -O0332 Renal failure following incomplete spontaneous abortion -O0333 Metabolic disorder following incomplete spontaneous abortion -O0334 Damage to pelvic organs following incomplete spontaneous abortion -O0335 Other venous complications following incomplete spontaneous abortion -O0336 Cardiac arrest following incomplete spontaneous abortion -O0337 Sepsis following incomplete spontaneous abortion -O0338 Urinary tract infection following incomplete spontaneous abortion -O0339 Incomplete spontaneous abortion with other complications -O034 Incomplete spontaneous abortion without complication -O035 Genital tract and pelvic infection following complete or unspecified spontaneous abortion -O036 Delayed or excessive hemorrhage following complete or unspecified spontaneous abortion -O037 Embolism following complete or unspecified spontaneous abortion -O0380 Unspecified complication following complete or unspecified spontaneous abortion -O0381 Shock following complete or unspecified spontaneous abortion -O0382 Renal failure following complete or unspecified spontaneous abortion -O0383 Metabolic disorder following complete or unspecified spontaneous abortion -O0384 Damage to pelvic organs following complete or unspecified spontaneous abortion -O0385 Other venous complications following complete or unspecified spontaneous abortion -O0386 Cardiac arrest following complete or unspecified spontaneous abortion -O0387 Sepsis following complete or unspecified spontaneous abortion -O0388 Urinary tract infection following complete or unspecified spontaneous abortion -O0389 Complete or unspecified spontaneous abortion with other complications -O039 Complete or unspecified spontaneous abortion without complication -O045 Genital tract and pelvic infection following (induced) termination of pregnancy -O046 Delayed or excessive hemorrhage following (induced) termination of pregnancy -O047 Embolism following (induced) termination of pregnancy -O0480 (Induced) termination of pregnancy with unspecified complications -O0481 Shock following (induced) termination of pregnancy -O0482 Renal failure following (induced) termination of pregnancy -O0483 Metabolic disorder following (induced) termination of pregnancy -O0484 Damage to pelvic organs following (induced) termination of pregnancy -O0485 Other venous complications following (induced) termination of pregnancy -O0486 Cardiac arrest following (induced) termination of pregnancy -O0487 Sepsis following (induced) termination of pregnancy -O0488 Urinary tract infection following (induced) termination of pregnancy -O0489 (Induced) termination of pregnancy with other complications -O070 Genital tract and pelvic infection following failed attempted termination of pregnancy -O071 Delayed or excessive hemorrhage following failed attempted termination of pregnancy -O072 Embolism following failed attempted termination of pregnancy -O0730 Failed attempted termination of pregnancy with unspecified complications -O0731 Shock following failed attempted termination of pregnancy -O0732 Renal failure following failed attempted termination of pregnancy -O0733 Metabolic disorder following failed attempted termination of pregnancy -O0734 Damage to pelvic organs following failed attempted termination of pregnancy -O0735 Other venous complications following failed attempted termination of pregnancy -O0736 Cardiac arrest following failed attempted termination of pregnancy -O0737 Sepsis following failed attempted termination of pregnancy -O0738 Urinary tract infection following failed attempted termination of pregnancy -O0739 Failed attempted termination of pregnancy with other complications -O074 Failed attempted termination of pregnancy without complication -O080 Genital tract and pelvic infection following ectopic and molar pregnancy -O081 Delayed or excessive hemorrhage following ectopic and molar pregnancy -O082 Embolism following ectopic and molar pregnancy -O083 Shock following ectopic and molar pregnancy -O084 Renal failure following ectopic and molar pregnancy -O085 Metabolic disorders following an ectopic and molar pregnancy -O086 Damage to pelvic organs and tissues following an ectopic and molar pregnancy -O087 Other venous complications following an ectopic and molar pregnancy -O0881 Cardiac arrest following an ectopic and molar pregnancy -O0882 Sepsis following ectopic and molar pregnancy -O0883 Urinary tract infection following an ectopic and molar pregnancy -O0889 Other complications following an ectopic and molar pregnancy -O089 Unspecified complication following an ectopic and molar pregnancy -O0900 Supervision of pregnancy with history of infertility, unspecified trimester -O0901 Supervision of pregnancy with history of infertility, first trimester -O0902 Supervision of pregnancy with history of infertility, second trimester -O0903 Supervision of pregnancy with history of infertility, third trimester -O0910 Supervision of pregnancy with history of ectopic pregnancy, unspecified trimester -O0911 Supervision of pregnancy with history of ectopic pregnancy, first trimester -O0912 Supervision of pregnancy with history of ectopic pregnancy, second trimester -O0913 Supervision of pregnancy with history of ectopic pregnancy, third trimester -O09A0 Supervision of pregnancy with history of molar pregnancy, unspecified trimester -O09A1 Supervision of pregnancy with history of molar pregnancy, first trimester -O09A2 Supervision of pregnancy with history of molar pregnancy, second trimester -O09A3 Supervision of pregnancy with history of molar pregnancy, third trimester -O09211 Supervision of pregnancy with history of pre-term labor, first trimester -O09212 Supervision of pregnancy with history of pre-term labor, second trimester -O09213 Supervision of pregnancy with history of pre-term labor, third trimester -O09219 Supervision of pregnancy with history of pre-term labor, unspecified trimester -O09291 Supervision of pregnancy with other poor reproductive or obstetric history, first trimester -O09292 Supervision of pregnancy with other poor reproductive or obstetric history, second trimester -O09293 Supervision of pregnancy with other poor reproductive or obstetric history, third trimester -O09299 Supervision of pregnancy with other poor reproductive or obstetric history, unspecified trimester -O0930 Supervision of pregnancy with insufficient antenatal care, unspecified trimester -O0931 Supervision of pregnancy with insufficient antenatal care, first trimester -O0932 Supervision of pregnancy with insufficient antenatal care, second trimester -O0933 Supervision of pregnancy with insufficient antenatal care, third trimester -O0940 Supervision of pregnancy with grand multiparity, unspecified trimester -O0941 Supervision of pregnancy with grand multiparity, first trimester -O0942 Supervision of pregnancy with grand multiparity, second trimester -O0943 Supervision of pregnancy with grand multiparity, third trimester -O09511 Supervision of elderly primigravida, first trimester -O09512 Supervision of elderly primigravida, second trimester -O09513 Supervision of elderly primigravida, third trimester -O09519 Supervision of elderly primigravida, unspecified trimester -O09521 Supervision of elderly multigravida, first trimester -O09522 Supervision of elderly multigravida, second trimester -O09523 Supervision of elderly multigravida, third trimester -O09529 Supervision of elderly multigravida, unspecified trimester -O09611 Supervision of young primigravida, first trimester -O09612 Supervision of young primigravida, second trimester -O09613 Supervision of young primigravida, third trimester -O09619 Supervision of young primigravida, unspecified trimester -O09621 Supervision of young multigravida, first trimester -O09622 Supervision of young multigravida, second trimester -O09623 Supervision of young multigravida, third trimester -O09629 Supervision of young multigravida, unspecified trimester -O0970 Supervision of high risk pregnancy due to social problems, unspecified trimester -O0971 Supervision of high risk pregnancy due to social problems, first trimester -O0972 Supervision of high risk pregnancy due to social problems, second trimester -O0973 Supervision of high risk pregnancy due to social problems, third trimester -O09811 Supervision of pregnancy resulting from assisted reproductive technology, first trimester -O09812 Supervision of pregnancy resulting from assisted reproductive technology, second trimester -O09813 Supervision of pregnancy resulting from assisted reproductive technology, third trimester -O09819 Supervision of pregnancy resulting from assisted reproductive technology, unspecified trimester -O09821 Supervision of pregnancy with history of in utero procedure during previous pregnancy, first trimester -O09822 Supervision of pregnancy with history of in utero procedure during previous pregnancy, second trimester -O09823 Supervision of pregnancy with history of in utero procedure during previous pregnancy, third trimester -O09829 Supervision of pregnancy with history of in utero procedure during previous pregnancy, unspecified trimester -O09891 Supervision of other high risk pregnancies, first trimester -O09892 Supervision of other high risk pregnancies, second trimester -O09893 Supervision of other high risk pregnancies, third trimester -O09899 Supervision of other high risk pregnancies, unspecified trimester -O0990 Supervision of high risk pregnancy, unspecified, unspecified trimester -O0991 Supervision of high risk pregnancy, unspecified, first trimester -O0992 Supervision of high risk pregnancy, unspecified, second trimester -O0993 Supervision of high risk pregnancy, unspecified, third trimester -O10011 Pre-existing essential hypertension complicating pregnancy, first trimester -O10012 Pre-existing essential hypertension complicating pregnancy, second trimester -O10013 Pre-existing essential hypertension complicating pregnancy, third trimester -O10019 Pre-existing essential hypertension complicating pregnancy, unspecified trimester -O1002 Pre-existing essential hypertension complicating childbirth -O1003 Pre-existing essential hypertension complicating the puerperium -O10111 Pre-existing hypertensive heart disease complicating pregnancy, first trimester -O10112 Pre-existing hypertensive heart disease complicating pregnancy, second trimester -O10113 Pre-existing hypertensive heart disease complicating pregnancy, third trimester -O10119 Pre-existing hypertensive heart disease complicating pregnancy, unspecified trimester -O1012 Pre-existing hypertensive heart disease complicating childbirth -O1013 Pre-existing hypertensive heart disease complicating the puerperium -O10211 Pre-existing hypertensive chronic kidney disease complicating pregnancy, first trimester -O10212 Pre-existing hypertensive chronic kidney disease complicating pregnancy, second trimester -O10213 Pre-existing hypertensive chronic kidney disease complicating pregnancy, third trimester -O10219 Pre-existing hypertensive chronic kidney disease complicating pregnancy, unspecified trimester -O1022 Pre-existing hypertensive chronic kidney disease complicating childbirth -O1023 Pre-existing hypertensive chronic kidney disease complicating the puerperium -O10311 Pre-existing hypertensive heart and chronic kidney disease complicating pregnancy, first trimester -O10312 Pre-existing hypertensive heart and chronic kidney disease complicating pregnancy, second trimester -O10313 Pre-existing hypertensive heart and chronic kidney disease complicating pregnancy, third trimester -O10319 Pre-existing hypertensive heart and chronic kidney disease complicating pregnancy, unspecified trimester -O1032 Pre-existing hypertensive heart and chronic kidney disease complicating childbirth -O1033 Pre-existing hypertensive heart and chronic kidney disease complicating the puerperium -O10411 Pre-existing secondary hypertension complicating pregnancy, first trimester -O10412 Pre-existing secondary hypertension complicating pregnancy, second trimester -O10413 Pre-existing secondary hypertension complicating pregnancy, third trimester -O10419 Pre-existing secondary hypertension complicating pregnancy, unspecified trimester -O1042 Pre-existing secondary hypertension complicating childbirth -O1043 Pre-existing secondary hypertension complicating the puerperium -O10911 Unspecified pre-existing hypertension complicating pregnancy, first trimester -O10912 Unspecified pre-existing hypertension complicating pregnancy, second trimester -O10913 Unspecified pre-existing hypertension complicating pregnancy, third trimester -O10919 Unspecified pre-existing hypertension complicating pregnancy, unspecified trimester -O1092 Unspecified pre-existing hypertension complicating childbirth -O1093 Unspecified pre-existing hypertension complicating the puerperium -O111 Pre-existing hypertension with pre-eclampsia, first trimester -O112 Pre-existing hypertension with pre-eclampsia, second trimester -O113 Pre-existing hypertension with pre-eclampsia, third trimester -O114 Pre-existing hypertension with pre-eclampsia, complicating childbirth -O115 Pre-existing hypertension with pre-eclampsia, complicating the puerperium -O119 Pre-existing hypertension with pre-eclampsia, unspecified trimester -O1200 Gestational edema, unspecified trimester -O1201 Gestational edema, first trimester -O1202 Gestational edema, second trimester -O1203 Gestational edema, third trimester -O1204 Gestational edema, complicating childbirth -O1205 Gestational edema, complicating the puerperium -O1210 Gestational proteinuria, unspecified trimester -O1211 Gestational proteinuria, first trimester -O1212 Gestational proteinuria, second trimester -O1213 Gestational proteinuria, third trimester -O1214 Gestational proteinuria, complicating childbirth -O1215 Gestational proteinuria, complicating the puerperium -O1220 Gestational edema with proteinuria, unspecified trimester -O1221 Gestational edema with proteinuria, first trimester -O1222 Gestational edema with proteinuria, second trimester -O1223 Gestational edema with proteinuria, third trimester -O1224 Gestational edema with proteinuria, complicating childbirth -O1225 Gestational edema with proteinuria, complicating the puerperium -O131 Gestational [pregnancy-induced] hypertension without significant proteinuria, first trimester -O132 Gestational [pregnancy-induced] hypertension without significant proteinuria, second trimester -O133 Gestational [pregnancy-induced] hypertension without significant proteinuria, third trimester -O134 Gestational [pregnancy-induced] hypertension without significant proteinuria, complicating childbirth -O135 Gestational [pregnancy-induced] hypertension without significant proteinuria, complicating the puerperium -O139 Gestational [pregnancy-induced] hypertension without significant proteinuria, unspecified trimester -O1400 Mild to moderate pre-eclampsia, unspecified trimester -O1402 Mild to moderate pre-eclampsia, second trimester -O1403 Mild to moderate pre-eclampsia, third trimester -O1404 Mild to moderate pre-eclampsia, complicating childbirth -O1405 Mild to moderate pre-eclampsia, complicating the puerperium -O1410 Severe pre-eclampsia, unspecified trimester -O1412 Severe pre-eclampsia, second trimester -O1413 Severe pre-eclampsia, third trimester -O1414 Severe pre-eclampsia complicating childbirth -O1415 Severe pre-eclampsia, complicating the puerperium -O1420 HELLP syndrome (HELLP), unspecified trimester -O1422 HELLP syndrome (HELLP), second trimester -O1423 HELLP syndrome (HELLP), third trimester -O1424 HELLP syndrome, complicating childbirth -O1425 HELLP syndrome, complicating the puerperium -O1490 Unspecified pre-eclampsia, unspecified trimester -O1492 Unspecified pre-eclampsia, second trimester -O1493 Unspecified pre-eclampsia, third trimester -O1494 Unspecified pre-eclampsia, complicating childbirth -O1495 Unspecified pre-eclampsia, complicating the puerperium -O1500 Eclampsia complicating pregnancy, unspecified trimester -O1502 Eclampsia complicating pregnancy, second trimester -O1503 Eclampsia complicating pregnancy, third trimester -O151 Eclampsia complicating labor -O152 Eclampsia complicating the puerperium -O159 Eclampsia, unspecified as to time period -O161 Unspecified maternal hypertension, first trimester -O162 Unspecified maternal hypertension, second trimester -O163 Unspecified maternal hypertension, third trimester -O164 Unspecified maternal hypertension, complicating childbirth -O165 Unspecified maternal hypertension, complicating the puerperium -O169 Unspecified maternal hypertension, unspecified trimester -O200 Threatened abortion -O208 Other hemorrhage in early pregnancy -O209 Hemorrhage in early pregnancy, unspecified -O210 Mild hyperemesis gravidarum -O211 Hyperemesis gravidarum with metabolic disturbance -O212 Late vomiting of pregnancy -O218 Other vomiting complicating pregnancy -O219 Vomiting of pregnancy, unspecified -O2200 Varicose veins of lower extremity in pregnancy, unspecified trimester -O2201 Varicose veins of lower extremity in pregnancy, first trimester -O2202 Varicose veins of lower extremity in pregnancy, second trimester -O2203 Varicose veins of lower extremity in pregnancy, third trimester -O2210 Genital varices in pregnancy, unspecified trimester -O2211 Genital varices in pregnancy, first trimester -O2212 Genital varices in pregnancy, second trimester -O2213 Genital varices in pregnancy, third trimester -O2220 Superficial thrombophlebitis in pregnancy, unspecified trimester -O2221 Superficial thrombophlebitis in pregnancy, first trimester -O2222 Superficial thrombophlebitis in pregnancy, second trimester -O2223 Superficial thrombophlebitis in pregnancy, third trimester -O2230 Deep phlebothrombosis in pregnancy, unspecified trimester -O2231 Deep phlebothrombosis in pregnancy, first trimester -O2232 Deep phlebothrombosis in pregnancy, second trimester -O2233 Deep phlebothrombosis in pregnancy, third trimester -O2240 Hemorrhoids in pregnancy, unspecified trimester -O2241 Hemorrhoids in pregnancy, first trimester -O2242 Hemorrhoids in pregnancy, second trimester -O2243 Hemorrhoids in pregnancy, third trimester -O2250 Cerebral venous thrombosis in pregnancy, unspecified trimester -O2251 Cerebral venous thrombosis in pregnancy, first trimester -O2252 Cerebral venous thrombosis in pregnancy, second trimester -O2253 Cerebral venous thrombosis in pregnancy, third trimester -O228X1 Other venous complications in pregnancy, first trimester -O228X2 Other venous complications in pregnancy, second trimester -O228X3 Other venous complications in pregnancy, third trimester -O228X9 Other venous complications in pregnancy, unspecified trimester -O2290 Venous complication in pregnancy, unspecified, unspecified trimester -O2291 Venous complication in pregnancy, unspecified, first trimester -O2292 Venous complication in pregnancy, unspecified, second trimester -O2293 Venous complication in pregnancy, unspecified, third trimester -O2300 Infections of kidney in pregnancy, unspecified trimester -O2301 Infections of kidney in pregnancy, first trimester -O2302 Infections of kidney in pregnancy, second trimester -O2303 Infections of kidney in pregnancy, third trimester -O2310 Infections of bladder in pregnancy, unspecified trimester -O2311 Infections of bladder in pregnancy, first trimester -O2312 Infections of bladder in pregnancy, second trimester -O2313 Infections of bladder in pregnancy, third trimester -O2320 Infections of urethra in pregnancy, unspecified trimester -O2321 Infections of urethra in pregnancy, first trimester -O2322 Infections of urethra in pregnancy, second trimester -O2323 Infections of urethra in pregnancy, third trimester -O2330 Infections of other parts of urinary tract in pregnancy, unspecified trimester -O2331 Infections of other parts of urinary tract in pregnancy, first trimester -O2332 Infections of other parts of urinary tract in pregnancy, second trimester -O2333 Infections of other parts of urinary tract in pregnancy, third trimester -O2340 Unspecified infection of urinary tract in pregnancy, unspecified trimester -O2341 Unspecified infection of urinary tract in pregnancy, first trimester -O2342 Unspecified infection of urinary tract in pregnancy, second trimester -O2343 Unspecified infection of urinary tract in pregnancy, third trimester -O23511 Infections of cervix in pregnancy, first trimester -O23512 Infections of cervix in pregnancy, second trimester -O23513 Infections of cervix in pregnancy, third trimester -O23519 Infections of cervix in pregnancy, unspecified trimester -O23521 Salpingo-oophoritis in pregnancy, first trimester -O23522 Salpingo-oophoritis in pregnancy, second trimester -O23523 Salpingo-oophoritis in pregnancy, third trimester -O23529 Salpingo-oophoritis in pregnancy, unspecified trimester -O23591 Infection of other part of genital tract in pregnancy, first trimester -O23592 Infection of other part of genital tract in pregnancy, second trimester -O23593 Infection of other part of genital tract in pregnancy, third trimester -O23599 Infection of other part of genital tract in pregnancy, unspecified trimester -O2390 Unspecified genitourinary tract infection in pregnancy, unspecified trimester -O2391 Unspecified genitourinary tract infection in pregnancy, first trimester -O2392 Unspecified genitourinary tract infection in pregnancy, second trimester -O2393 Unspecified genitourinary tract infection in pregnancy, third trimester -O24011 Pre-existing type 1 diabetes mellitus, in pregnancy, first trimester -O24012 Pre-existing type 1 diabetes mellitus, in pregnancy, second trimester -O24013 Pre-existing type 1 diabetes mellitus, in pregnancy, third trimester -O24019 Pre-existing type 1 diabetes mellitus, in pregnancy, unspecified trimester -O2402 Pre-existing type 1 diabetes mellitus, in childbirth -O2403 Pre-existing type 1 diabetes mellitus, in the puerperium -O24111 Pre-existing type 2 diabetes mellitus, in pregnancy, first trimester -O24112 Pre-existing type 2 diabetes mellitus, in pregnancy, second trimester -O24113 Pre-existing type 2 diabetes mellitus, in pregnancy, third trimester -O24119 Pre-existing type 2 diabetes mellitus, in pregnancy, unspecified trimester -O2412 Pre-existing type 2 diabetes mellitus, in childbirth -O2413 Pre-existing type 2 diabetes mellitus, in the puerperium -O24311 Unspecified pre-existing diabetes mellitus in pregnancy, first trimester -O24312 Unspecified pre-existing diabetes mellitus in pregnancy, second trimester -O24313 Unspecified pre-existing diabetes mellitus in pregnancy, third trimester -O24319 Unspecified pre-existing diabetes mellitus in pregnancy, unspecified trimester -O2432 Unspecified pre-existing diabetes mellitus in childbirth -O2433 Unspecified pre-existing diabetes mellitus in the puerperium -O24410 Gestational diabetes mellitus in pregnancy, diet controlled -O24414 Gestational diabetes mellitus in pregnancy, insulin controlled -O24415 Gestational diabetes mellitus in pregnancy, controlled by oral hypoglycemic drugs -O24419 Gestational diabetes mellitus in pregnancy, unspecified control -O24420 Gestational diabetes mellitus in childbirth, diet controlled -O24424 Gestational diabetes mellitus in childbirth, insulin controlled -O24425 Gestational diabetes mellitus in childbirth, controlled by oral hypoglycemic drugs -O24429 Gestational diabetes mellitus in childbirth, unspecified control -O24430 Gestational diabetes mellitus in the puerperium, diet controlled -O24434 Gestational diabetes mellitus in the puerperium, insulin controlled -O24435 Gestational diabetes mellitus in puerperium, controlled by oral hypoglycemic drugs -O24439 Gestational diabetes mellitus in the puerperium, unspecified control -O24811 Other pre-existing diabetes mellitus in pregnancy, first trimester -O24812 Other pre-existing diabetes mellitus in pregnancy, second trimester -O24813 Other pre-existing diabetes mellitus in pregnancy, third trimester -O24819 Other pre-existing diabetes mellitus in pregnancy, unspecified trimester -O2482 Other pre-existing diabetes mellitus in childbirth -O2483 Other pre-existing diabetes mellitus in the puerperium -O24911 Unspecified diabetes mellitus in pregnancy, first trimester -O24912 Unspecified diabetes mellitus in pregnancy, second trimester -O24913 Unspecified diabetes mellitus in pregnancy, third trimester -O24919 Unspecified diabetes mellitus in pregnancy, unspecified trimester -O2492 Unspecified diabetes mellitus in childbirth -O2493 Unspecified diabetes mellitus in the puerperium -O2510 Malnutrition in pregnancy, unspecified trimester -O2511 Malnutrition in pregnancy, first trimester -O2512 Malnutrition in pregnancy, second trimester -O2513 Malnutrition in pregnancy, third trimester -O252 Malnutrition in childbirth -O253 Malnutrition in the puerperium -O2600 Excessive weight gain in pregnancy, unspecified trimester -O2601 Excessive weight gain in pregnancy, first trimester -O2602 Excessive weight gain in pregnancy, second trimester -O2603 Excessive weight gain in pregnancy, third trimester -O2610 Low weight gain in pregnancy, unspecified trimester -O2611 Low weight gain in pregnancy, first trimester -O2612 Low weight gain in pregnancy, second trimester -O2613 Low weight gain in pregnancy, third trimester -O2620 Pregnancy care for patient with recurrent pregnancy loss, unspecified trimester -O2621 Pregnancy care for patient with recurrent pregnancy loss, first trimester -O2622 Pregnancy care for patient with recurrent pregnancy loss, second trimester -O2623 Pregnancy care for patient with recurrent pregnancy loss, third trimester -O2630 Retained intrauterine contraceptive device in pregnancy, unspecified trimester -O2631 Retained intrauterine contraceptive device in pregnancy, first trimester -O2632 Retained intrauterine contraceptive device in pregnancy, second trimester -O2633 Retained intrauterine contraceptive device in pregnancy, third trimester -O2640 Herpes gestationis, unspecified trimester -O2641 Herpes gestationis, first trimester -O2642 Herpes gestationis, second trimester -O2643 Herpes gestationis, third trimester -O2650 Maternal hypotension syndrome, unspecified trimester -O2651 Maternal hypotension syndrome, first trimester -O2652 Maternal hypotension syndrome, second trimester -O2653 Maternal hypotension syndrome, third trimester -O26611 Liver and biliary tract disorders in pregnancy, first trimester -O26612 Liver and biliary tract disorders in pregnancy, second trimester -O26613 Liver and biliary tract disorders in pregnancy, third trimester -O26619 Liver and biliary tract disorders in pregnancy, unspecified trimester -O2662 Liver and biliary tract disorders in childbirth -O2663 Liver and biliary tract disorders in the puerperium -O26711 Subluxation of symphysis (pubis) in pregnancy, first trimester -O26712 Subluxation of symphysis (pubis) in pregnancy, second trimester -O26713 Subluxation of symphysis (pubis) in pregnancy, third trimester -O26719 Subluxation of symphysis (pubis) in pregnancy, unspecified trimester -O2672 Subluxation of symphysis (pubis) in childbirth -O2673 Subluxation of symphysis (pubis) in the puerperium -O26811 Pregnancy related exhaustion and fatigue, first trimester -O26812 Pregnancy related exhaustion and fatigue, second trimester -O26813 Pregnancy related exhaustion and fatigue, third trimester -O26819 Pregnancy related exhaustion and fatigue, unspecified trimester -O26821 Pregnancy related peripheral neuritis, first trimester -O26822 Pregnancy related peripheral neuritis, second trimester -O26823 Pregnancy related peripheral neuritis, third trimester -O26829 Pregnancy related peripheral neuritis, unspecified trimester -O26831 Pregnancy related renal disease, first trimester -O26832 Pregnancy related renal disease, second trimester -O26833 Pregnancy related renal disease, third trimester -O26839 Pregnancy related renal disease, unspecified trimester -O26841 Uterine size-date discrepancy, first trimester -O26842 Uterine size-date discrepancy, second trimester -O26843 Uterine size-date discrepancy, third trimester -O26849 Uterine size-date discrepancy, unspecified trimester -O26851 Spotting complicating pregnancy, first trimester -O26852 Spotting complicating pregnancy, second trimester -O26853 Spotting complicating pregnancy, third trimester -O26859 Spotting complicating pregnancy, unspecified trimester -O2686 Pruritic urticarial papules and plaques of pregnancy (PUPPP) -O26872 Cervical shortening, second trimester -O26873 Cervical shortening, third trimester -O26879 Cervical shortening, unspecified trimester -O26891 Other specified pregnancy related conditions, first trimester -O26892 Other specified pregnancy related conditions, second trimester -O26893 Other specified pregnancy related conditions, third trimester -O26899 Other specified pregnancy related conditions, unspecified trimester -O2690 Pregnancy related conditions, unspecified, unspecified trimester -O2691 Pregnancy related conditions, unspecified, first trimester -O2692 Pregnancy related conditions, unspecified, second trimester -O2693 Pregnancy related conditions, unspecified, third trimester -O280 Abnormal hematological finding on antenatal screening of mother -O281 Abnormal biochemical finding on antenatal screening of mother -O282 Abnormal cytological finding on antenatal screening of mother -O283 Abnormal ultrasonic finding on antenatal screening of mother -O284 Abnormal radiological finding on antenatal screening of mother -O285 Abnormal chromosomal and genetic finding on antenatal screening of mother -O288 Other abnormal findings on antenatal screening of mother -O289 Unspecified abnormal findings on antenatal screening of mother -O29011 Aspiration pneumonitis due to anesthesia during pregnancy, first trimester -O29012 Aspiration pneumonitis due to anesthesia during pregnancy, second trimester -O29013 Aspiration pneumonitis due to anesthesia during pregnancy, third trimester -O29019 Aspiration pneumonitis due to anesthesia during pregnancy, unspecified trimester -O29021 Pressure collapse of lung due to anesthesia during pregnancy, first trimester -O29022 Pressure collapse of lung due to anesthesia during pregnancy, second trimester -O29023 Pressure collapse of lung due to anesthesia during pregnancy, third trimester -O29029 Pressure collapse of lung due to anesthesia during pregnancy, unspecified trimester -O29091 Other pulmonary complications of anesthesia during pregnancy, first trimester -O29092 Other pulmonary complications of anesthesia during pregnancy, second trimester -O29093 Other pulmonary complications of anesthesia during pregnancy, third trimester -O29099 Other pulmonary complications of anesthesia during pregnancy, unspecified trimester -O29111 Cardiac arrest due to anesthesia during pregnancy, first trimester -O29112 Cardiac arrest due to anesthesia during pregnancy, second trimester -O29113 Cardiac arrest due to anesthesia during pregnancy, third trimester -O29119 Cardiac arrest due to anesthesia during pregnancy, unspecified trimester -O29121 Cardiac failure due to anesthesia during pregnancy, first trimester -O29122 Cardiac failure due to anesthesia during pregnancy, second trimester -O29123 Cardiac failure due to anesthesia during pregnancy, third trimester -O29129 Cardiac failure due to anesthesia during pregnancy, unspecified trimester -O29191 Other cardiac complications of anesthesia during pregnancy, first trimester -O29192 Other cardiac complications of anesthesia during pregnancy, second trimester -O29193 Other cardiac complications of anesthesia during pregnancy, third trimester -O29199 Other cardiac complications of anesthesia during pregnancy, unspecified trimester -O29211 Cerebral anoxia due to anesthesia during pregnancy, first trimester -O29212 Cerebral anoxia due to anesthesia during pregnancy, second trimester -O29213 Cerebral anoxia due to anesthesia during pregnancy, third trimester -O29219 Cerebral anoxia due to anesthesia during pregnancy, unspecified trimester -O29291 Other central nervous system complications of anesthesia during pregnancy, first trimester -O29292 Other central nervous system complications of anesthesia during pregnancy, second trimester -O29293 Other central nervous system complications of anesthesia during pregnancy, third trimester -O29299 Other central nervous system complications of anesthesia during pregnancy, unspecified trimester -O293X1 Toxic reaction to local anesthesia during pregnancy, first trimester -O293X2 Toxic reaction to local anesthesia during pregnancy, second trimester -O293X3 Toxic reaction to local anesthesia during pregnancy, third trimester -O293X9 Toxic reaction to local anesthesia during pregnancy, unspecified trimester -O2940 Spinal and epidural anesthesia induced headache during pregnancy, unspecified trimester -O2941 Spinal and epidural anesthesia induced headache during pregnancy, first trimester -O2942 Spinal and epidural anesthesia induced headache during pregnancy, second trimester -O2943 Spinal and epidural anesthesia induced headache during pregnancy, third trimester -O295X1 Other complications of spinal and epidural anesthesia during pregnancy, first trimester -O295X2 Other complications of spinal and epidural anesthesia during pregnancy, second trimester -O295X3 Other complications of spinal and epidural anesthesia during pregnancy, third trimester -O295X9 Other complications of spinal and epidural anesthesia during pregnancy, unspecified trimester -O2960 Failed or difficult intubation for anesthesia during pregnancy, unspecified trimester -O2961 Failed or difficult intubation for anesthesia during pregnancy, first trimester -O2962 Failed or difficult intubation for anesthesia during pregnancy, second trimester -O2963 Failed or difficult intubation for anesthesia during pregnancy, third trimester -O298X1 Other complications of anesthesia during pregnancy, first trimester -O298X2 Other complications of anesthesia during pregnancy, second trimester -O298X3 Other complications of anesthesia during pregnancy, third trimester -O298X9 Other complications of anesthesia during pregnancy, unspecified trimester -O2990 Unspecified complication of anesthesia during pregnancy, unspecified trimester -O2991 Unspecified complication of anesthesia during pregnancy, first trimester -O2992 Unspecified complication of anesthesia during pregnancy, second trimester -O2993 Unspecified complication of anesthesia during pregnancy, third trimester -O30001 Twin pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, first trimester -O30002 Twin pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, second trimester -O30003 Twin pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, third trimester -O30009 Twin pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, unspecified trimester -O30011 Twin pregnancy, monochorionic/monoamniotic, first trimester -O30012 Twin pregnancy, monochorionic/monoamniotic, second trimester -O30013 Twin pregnancy, monochorionic/monoamniotic, third trimester -O30019 Twin pregnancy, monochorionic/monoamniotic, unspecified trimester -O30021 Conjoined twin pregnancy, first trimester -O30022 Conjoined twin pregnancy, second trimester -O30023 Conjoined twin pregnancy, third trimester -O30029 Conjoined twin pregnancy, unspecified trimester -O30031 Twin pregnancy, monochorionic/diamniotic, first trimester -O30032 Twin pregnancy, monochorionic/diamniotic, second trimester -O30033 Twin pregnancy, monochorionic/diamniotic, third trimester -O30039 Twin pregnancy, monochorionic/diamniotic, unspecified trimester -O30041 Twin pregnancy, dichorionic/diamniotic, first trimester -O30042 Twin pregnancy, dichorionic/diamniotic, second trimester -O30043 Twin pregnancy, dichorionic/diamniotic, third trimester -O30049 Twin pregnancy, dichorionic/diamniotic, unspecified trimester -O30091 Twin pregnancy, unable to determine number of placenta and number of amniotic sacs, first trimester -O30092 Twin pregnancy, unable to determine number of placenta and number of amniotic sacs, second trimester -O30093 Twin pregnancy, unable to determine number of placenta and number of amniotic sacs, third trimester -O30099 Twin pregnancy, unable to determine number of placenta and number of amniotic sacs, unspecified trimester -O30101 Triplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, first trimester -O30102 Triplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, second trimester -O30103 Triplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, third trimester -O30109 Triplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, unspecified trimester -O30111 Triplet pregnancy with two or more monochorionic fetuses, first trimester -O30112 Triplet pregnancy with two or more monochorionic fetuses, second trimester -O30113 Triplet pregnancy with two or more monochorionic fetuses, third trimester -O30119 Triplet pregnancy with two or more monochorionic fetuses, unspecified trimester -O30121 Triplet pregnancy with two or more monoamniotic fetuses, first trimester -O30122 Triplet pregnancy with two or more monoamniotic fetuses, second trimester -O30123 Triplet pregnancy with two or more monoamniotic fetuses, third trimester -O30129 Triplet pregnancy with two or more monoamniotic fetuses, unspecified trimester -O30191 Triplet pregnancy, unable to determine number of placenta and number of amniotic sacs, first trimester -O30192 Triplet pregnancy, unable to determine number of placenta and number of amniotic sacs, second trimester -O30193 Triplet pregnancy, unable to determine number of placenta and number of amniotic sacs, third trimester -O30199 Triplet pregnancy, unable to determine number of placenta and number of amniotic sacs, unspecified trimester -O30201 Quadruplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, first trimester -O30202 Quadruplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, second trimester -O30203 Quadruplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, third trimester -O30209 Quadruplet pregnancy, unspecified number of placenta and unspecified number of amniotic sacs, unspecified trimester -O30211 Quadruplet pregnancy with two or more monochorionic fetuses, first trimester -O30212 Quadruplet pregnancy with two or more monochorionic fetuses, second trimester -O30213 Quadruplet pregnancy with two or more monochorionic fetuses, third trimester -O30219 Quadruplet pregnancy with two or more monochorionic fetuses, unspecified trimester -O30221 Quadruplet pregnancy with two or more monoamniotic fetuses, first trimester -O30222 Quadruplet pregnancy with two or more monoamniotic fetuses, second trimester -O30223 Quadruplet pregnancy with two or more monoamniotic fetuses, third trimester -O30229 Quadruplet pregnancy with two or more monoamniotic fetuses, unspecified trimester -O30291 Quadruplet pregnancy, unable to determine number of placenta and number of amniotic sacs, first trimester -O30292 Quadruplet pregnancy, unable to determine number of placenta and number of amniotic sacs, second trimester -O30293 Quadruplet pregnancy, unable to determine number of placenta and number of amniotic sacs, third trimester -O30299 Quadruplet pregnancy, unable to determine number of placenta and number of amniotic sacs, unspecified trimester -O30801 Other specified multiple gestation, unspecified number of placenta and unspecified number of amniotic sacs, first trimester -O30802 Other specified multiple gestation, unspecified number of placenta and unspecified number of amniotic sacs, second trimester -O30803 Other specified multiple gestation, unspecified number of placenta and unspecified number of amniotic sacs, third trimester -O30809 Other specified multiple gestation, unspecified number of placenta and unspecified number of amniotic sacs, unspecified trimester -O30811 Other specified multiple gestation with two or more monochorionic fetuses, first trimester -O30812 Other specified multiple gestation with two or more monochorionic fetuses, second trimester -O30813 Other specified multiple gestation with two or more monochorionic fetuses, third trimester -O30819 Other specified multiple gestation with two or more monochorionic fetuses, unspecified trimester -O30821 Other specified multiple gestation with two or more monoamniotic fetuses, first trimester -O30822 Other specified multiple gestation with two or more monoamniotic fetuses, second trimester -O30823 Other specified multiple gestation with two or more monoamniotic fetuses, third trimester -O30829 Other specified multiple gestation with two or more monoamniotic fetuses, unspecified trimester -O30891 Other specified multiple gestation, unable to determine number of placenta and number of amniotic sacs, first trimester -O30892 Other specified multiple gestation, unable to determine number of placenta and number of amniotic sacs, second trimester -O30893 Other specified multiple gestation, unable to determine number of placenta and number of amniotic sacs, third trimester -O30899 Other specified multiple gestation, unable to determine number of placenta and number of amniotic sacs, unspecified trimester -O3090 Multiple gestation, unspecified, unspecified trimester -O3091 Multiple gestation, unspecified, first trimester -O3092 Multiple gestation, unspecified, second trimester -O3093 Multiple gestation, unspecified, third trimester -O3100X0 Papyraceous fetus, unspecified trimester, not applicable or unspecified -O3100X1 Papyraceous fetus, unspecified trimester, fetus 1 -O3100X2 Papyraceous fetus, unspecified trimester, fetus 2 -O3100X3 Papyraceous fetus, unspecified trimester, fetus 3 -O3100X4 Papyraceous fetus, unspecified trimester, fetus 4 -O3100X5 Papyraceous fetus, unspecified trimester, fetus 5 -O3100X9 Papyraceous fetus, unspecified trimester, other fetus -O3101X0 Papyraceous fetus, first trimester, not applicable or unspecified -O3101X1 Papyraceous fetus, first trimester, fetus 1 -O3101X2 Papyraceous fetus, first trimester, fetus 2 -O3101X3 Papyraceous fetus, first trimester, fetus 3 -O3101X4 Papyraceous fetus, first trimester, fetus 4 -O3101X5 Papyraceous fetus, first trimester, fetus 5 -O3101X9 Papyraceous fetus, first trimester, other fetus -O3102X0 Papyraceous fetus, second trimester, not applicable or unspecified -O3102X1 Papyraceous fetus, second trimester, fetus 1 -O3102X2 Papyraceous fetus, second trimester, fetus 2 -O3102X3 Papyraceous fetus, second trimester, fetus 3 -O3102X4 Papyraceous fetus, second trimester, fetus 4 -O3102X5 Papyraceous fetus, second trimester, fetus 5 -O3102X9 Papyraceous fetus, second trimester, other fetus -O3103X0 Papyraceous fetus, third trimester, not applicable or unspecified -O3103X1 Papyraceous fetus, third trimester, fetus 1 -O3103X2 Papyraceous fetus, third trimester, fetus 2 -O3103X3 Papyraceous fetus, third trimester, fetus 3 -O3103X4 Papyraceous fetus, third trimester, fetus 4 -O3103X5 Papyraceous fetus, third trimester, fetus 5 -O3103X9 Papyraceous fetus, third trimester, other fetus -O3110X0 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, not applicable or unspecified -O3110X1 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, fetus 1 -O3110X2 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, fetus 2 -O3110X3 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, fetus 3 -O3110X4 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, fetus 4 -O3110X5 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, fetus 5 -O3110X9 Continuing pregnancy after spontaneous abortion of one fetus or more, unspecified trimester, other fetus -O3111X0 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, not applicable or unspecified -O3111X1 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, fetus 1 -O3111X2 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, fetus 2 -O3111X3 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, fetus 3 -O3111X4 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, fetus 4 -O3111X5 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, fetus 5 -O3111X9 Continuing pregnancy after spontaneous abortion of one fetus or more, first trimester, other fetus -O3112X0 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, not applicable or unspecified -O3112X1 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, fetus 1 -O3112X2 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, fetus 2 -O3112X3 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, fetus 3 -O3112X4 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, fetus 4 -O3112X5 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, fetus 5 -O3112X9 Continuing pregnancy after spontaneous abortion of one fetus or more, second trimester, other fetus -O3113X0 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, not applicable or unspecified -O3113X1 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, fetus 1 -O3113X2 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, fetus 2 -O3113X3 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, fetus 3 -O3113X4 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, fetus 4 -O3113X5 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, fetus 5 -O3113X9 Continuing pregnancy after spontaneous abortion of one fetus or more, third trimester, other fetus -O3120X0 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, not applicable or unspecified -O3120X1 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, fetus 1 -O3120X2 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, fetus 2 -O3120X3 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, fetus 3 -O3120X4 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, fetus 4 -O3120X5 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, fetus 5 -O3120X9 Continuing pregnancy after intrauterine death of one fetus or more, unspecified trimester, other fetus -O3121X0 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, not applicable or unspecified -O3121X1 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, fetus 1 -O3121X2 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, fetus 2 -O3121X3 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, fetus 3 -O3121X4 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, fetus 4 -O3121X5 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, fetus 5 -O3121X9 Continuing pregnancy after intrauterine death of one fetus or more, first trimester, other fetus -O3122X0 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, not applicable or unspecified -O3122X1 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, fetus 1 -O3122X2 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, fetus 2 -O3122X3 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, fetus 3 -O3122X4 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, fetus 4 -O3122X5 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, fetus 5 -O3122X9 Continuing pregnancy after intrauterine death of one fetus or more, second trimester, other fetus -O3123X0 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, not applicable or unspecified -O3123X1 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, fetus 1 -O3123X2 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, fetus 2 -O3123X3 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, fetus 3 -O3123X4 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, fetus 4 -O3123X5 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, fetus 5 -O3123X9 Continuing pregnancy after intrauterine death of one fetus or more, third trimester, other fetus -O3130X0 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, not applicable or unspecified -O3130X1 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, fetus 1 -O3130X2 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, fetus 2 -O3130X3 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, fetus 3 -O3130X4 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, fetus 4 -O3130X5 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, fetus 5 -O3130X9 Continuing pregnancy after elective fetal reduction of one fetus or more, unspecified trimester, other fetus -O3131X0 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, not applicable or unspecified -O3131X1 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, fetus 1 -O3131X2 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, fetus 2 -O3131X3 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, fetus 3 -O3131X4 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, fetus 4 -O3131X5 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, fetus 5 -O3131X9 Continuing pregnancy after elective fetal reduction of one fetus or more, first trimester, other fetus -O3132X0 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, not applicable or unspecified -O3132X1 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, fetus 1 -O3132X2 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, fetus 2 -O3132X3 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, fetus 3 -O3132X4 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, fetus 4 -O3132X5 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, fetus 5 -O3132X9 Continuing pregnancy after elective fetal reduction of one fetus or more, second trimester, other fetus -O3133X0 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, not applicable or unspecified -O3133X1 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, fetus 1 -O3133X2 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, fetus 2 -O3133X3 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, fetus 3 -O3133X4 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, fetus 4 -O3133X5 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, fetus 5 -O3133X9 Continuing pregnancy after elective fetal reduction of one fetus or more, third trimester, other fetus -O318X10 Other complications specific to multiple gestation, first trimester, not applicable or unspecified -O318X11 Other complications specific to multiple gestation, first trimester, fetus 1 -O318X12 Other complications specific to multiple gestation, first trimester, fetus 2 -O318X13 Other complications specific to multiple gestation, first trimester, fetus 3 -O318X14 Other complications specific to multiple gestation, first trimester, fetus 4 -O318X15 Other complications specific to multiple gestation, first trimester, fetus 5 -O318X19 Other complications specific to multiple gestation, first trimester, other fetus -O318X20 Other complications specific to multiple gestation, second trimester, not applicable or unspecified -O318X21 Other complications specific to multiple gestation, second trimester, fetus 1 -O318X22 Other complications specific to multiple gestation, second trimester, fetus 2 -O318X23 Other complications specific to multiple gestation, second trimester, fetus 3 -O318X24 Other complications specific to multiple gestation, second trimester, fetus 4 -O318X25 Other complications specific to multiple gestation, second trimester, fetus 5 -O318X29 Other complications specific to multiple gestation, second trimester, other fetus -O318X30 Other complications specific to multiple gestation, third trimester, not applicable or unspecified -O318X31 Other complications specific to multiple gestation, third trimester, fetus 1 -O318X32 Other complications specific to multiple gestation, third trimester, fetus 2 -O318X33 Other complications specific to multiple gestation, third trimester, fetus 3 -O318X34 Other complications specific to multiple gestation, third trimester, fetus 4 -O318X35 Other complications specific to multiple gestation, third trimester, fetus 5 -O318X39 Other complications specific to multiple gestation, third trimester, other fetus -O318X90 Other complications specific to multiple gestation, unspecified trimester, not applicable or unspecified -O318X91 Other complications specific to multiple gestation, unspecified trimester, fetus 1 -O318X92 Other complications specific to multiple gestation, unspecified trimester, fetus 2 -O318X93 Other complications specific to multiple gestation, unspecified trimester, fetus 3 -O318X94 Other complications specific to multiple gestation, unspecified trimester, fetus 4 -O318X95 Other complications specific to multiple gestation, unspecified trimester, fetus 5 -O318X99 Other complications specific to multiple gestation, unspecified trimester, other fetus -O320XX0 Maternal care for unstable lie, not applicable or unspecified -O320XX1 Maternal care for unstable lie, fetus 1 -O320XX2 Maternal care for unstable lie, fetus 2 -O320XX3 Maternal care for unstable lie, fetus 3 -O320XX4 Maternal care for unstable lie, fetus 4 -O320XX5 Maternal care for unstable lie, fetus 5 -O320XX9 Maternal care for unstable lie, other fetus -O321XX0 Maternal care for breech presentation, not applicable or unspecified -O321XX1 Maternal care for breech presentation, fetus 1 -O321XX2 Maternal care for breech presentation, fetus 2 -O321XX3 Maternal care for breech presentation, fetus 3 -O321XX4 Maternal care for breech presentation, fetus 4 -O321XX5 Maternal care for breech presentation, fetus 5 -O321XX9 Maternal care for breech presentation, other fetus -O322XX0 Maternal care for transverse and oblique lie, not applicable or unspecified -O322XX1 Maternal care for transverse and oblique lie, fetus 1 -O322XX2 Maternal care for transverse and oblique lie, fetus 2 -O322XX3 Maternal care for transverse and oblique lie, fetus 3 -O322XX4 Maternal care for transverse and oblique lie, fetus 4 -O322XX5 Maternal care for transverse and oblique lie, fetus 5 -O322XX9 Maternal care for transverse and oblique lie, other fetus -O323XX0 Maternal care for face, brow and chin presentation, not applicable or unspecified -O323XX1 Maternal care for face, brow and chin presentation, fetus 1 -O323XX2 Maternal care for face, brow and chin presentation, fetus 2 -O323XX3 Maternal care for face, brow and chin presentation, fetus 3 -O323XX4 Maternal care for face, brow and chin presentation, fetus 4 -O323XX5 Maternal care for face, brow and chin presentation, fetus 5 -O323XX9 Maternal care for face, brow and chin presentation, other fetus -O324XX0 Maternal care for high head at term, not applicable or unspecified -O324XX1 Maternal care for high head at term, fetus 1 -O324XX2 Maternal care for high head at term, fetus 2 -O324XX3 Maternal care for high head at term, fetus 3 -O324XX4 Maternal care for high head at term, fetus 4 -O324XX5 Maternal care for high head at term, fetus 5 -O324XX9 Maternal care for high head at term, other fetus -O326XX0 Maternal care for compound presentation, not applicable or unspecified -O326XX1 Maternal care for compound presentation, fetus 1 -O326XX2 Maternal care for compound presentation, fetus 2 -O326XX3 Maternal care for compound presentation, fetus 3 -O326XX4 Maternal care for compound presentation, fetus 4 -O326XX5 Maternal care for compound presentation, fetus 5 -O326XX9 Maternal care for compound presentation, other fetus -O328XX0 Maternal care for other malpresentation of fetus, not applicable or unspecified -O328XX1 Maternal care for other malpresentation of fetus, fetus 1 -O328XX2 Maternal care for other malpresentation of fetus, fetus 2 -O328XX3 Maternal care for other malpresentation of fetus, fetus 3 -O328XX4 Maternal care for other malpresentation of fetus, fetus 4 -O328XX5 Maternal care for other malpresentation of fetus, fetus 5 -O328XX9 Maternal care for other malpresentation of fetus, other fetus -O329XX0 Maternal care for malpresentation of fetus, unspecified, not applicable or unspecified -O329XX1 Maternal care for malpresentation of fetus, unspecified, fetus 1 -O329XX2 Maternal care for malpresentation of fetus, unspecified, fetus 2 -O329XX3 Maternal care for malpresentation of fetus, unspecified, fetus 3 -O329XX4 Maternal care for malpresentation of fetus, unspecified, fetus 4 -O329XX5 Maternal care for malpresentation of fetus, unspecified, fetus 5 -O329XX9 Maternal care for malpresentation of fetus, unspecified, other fetus -O330 Maternal care for disproportion due to deformity of maternal pelvic bones -O331 Maternal care for disproportion due to generally contracted pelvis -O332 Maternal care for disproportion due to inlet contraction of pelvis -O333XX0 Maternal care for disproportion due to outlet contraction of pelvis, not applicable or unspecified -O333XX1 Maternal care for disproportion due to outlet contraction of pelvis, fetus 1 -O333XX2 Maternal care for disproportion due to outlet contraction of pelvis, fetus 2 -O333XX3 Maternal care for disproportion due to outlet contraction of pelvis, fetus 3 -O333XX4 Maternal care for disproportion due to outlet contraction of pelvis, fetus 4 -O333XX5 Maternal care for disproportion due to outlet contraction of pelvis, fetus 5 -O333XX9 Maternal care for disproportion due to outlet contraction of pelvis, other fetus -O334XX0 Maternal care for disproportion of mixed maternal and fetal origin, not applicable or unspecified -O334XX1 Maternal care for disproportion of mixed maternal and fetal origin, fetus 1 -O334XX2 Maternal care for disproportion of mixed maternal and fetal origin, fetus 2 -O334XX3 Maternal care for disproportion of mixed maternal and fetal origin, fetus 3 -O334XX4 Maternal care for disproportion of mixed maternal and fetal origin, fetus 4 -O334XX5 Maternal care for disproportion of mixed maternal and fetal origin, fetus 5 -O334XX9 Maternal care for disproportion of mixed maternal and fetal origin, other fetus -O335XX0 Maternal care for disproportion due to unusually large fetus, not applicable or unspecified -O335XX1 Maternal care for disproportion due to unusually large fetus, fetus 1 -O335XX2 Maternal care for disproportion due to unusually large fetus, fetus 2 -O335XX3 Maternal care for disproportion due to unusually large fetus, fetus 3 -O335XX4 Maternal care for disproportion due to unusually large fetus, fetus 4 -O335XX5 Maternal care for disproportion due to unusually large fetus, fetus 5 -O335XX9 Maternal care for disproportion due to unusually large fetus, other fetus -O336XX0 Maternal care for disproportion due to hydrocephalic fetus, not applicable or unspecified -O336XX1 Maternal care for disproportion due to hydrocephalic fetus, fetus 1 -O336XX2 Maternal care for disproportion due to hydrocephalic fetus, fetus 2 -O336XX3 Maternal care for disproportion due to hydrocephalic fetus, fetus 3 -O336XX4 Maternal care for disproportion due to hydrocephalic fetus, fetus 4 -O336XX5 Maternal care for disproportion due to hydrocephalic fetus, fetus 5 -O336XX9 Maternal care for disproportion due to hydrocephalic fetus, other fetus -O337XX0 Maternal care for disproportion due to other fetal deformities, not applicable or unspecified -O337XX1 Maternal care for disproportion due to other fetal deformities, fetus 1 -O337XX2 Maternal care for disproportion due to other fetal deformities, fetus 2 -O337XX3 Maternal care for disproportion due to other fetal deformities, fetus 3 -O337XX4 Maternal care for disproportion due to other fetal deformities, fetus 4 -O337XX5 Maternal care for disproportion due to other fetal deformities, fetus 5 -O337XX9 Maternal care for disproportion due to other fetal deformities, other fetus -O338 Maternal care for disproportion of other origin -O339 Maternal care for disproportion, unspecified -O3400 Maternal care for unspecified congenital malformation of uterus, unspecified trimester -O3401 Maternal care for unspecified congenital malformation of uterus, first trimester -O3402 Maternal care for unspecified congenital malformation of uterus, second trimester -O3403 Maternal care for unspecified congenital malformation of uterus, third trimester -O3410 Maternal care for benign tumor of corpus uteri, unspecified trimester -O3411 Maternal care for benign tumor of corpus uteri, first trimester -O3412 Maternal care for benign tumor of corpus uteri, second trimester -O3413 Maternal care for benign tumor of corpus uteri, third trimester -O34211 Maternal care for low transverse scar from previous cesarean delivery -O34212 Maternal care for vertical scar from previous cesarean delivery -O34219 Maternal care for unspecified type scar from previous cesarean delivery -O3429 Maternal care due to uterine scar from other previous surgery -O3430 Maternal care for cervical incompetence, unspecified trimester -O3431 Maternal care for cervical incompetence, first trimester -O3432 Maternal care for cervical incompetence, second trimester -O3433 Maternal care for cervical incompetence, third trimester -O3440 Maternal care for other abnormalities of cervix, unspecified trimester -O3441 Maternal care for other abnormalities of cervix, first trimester -O3442 Maternal care for other abnormalities of cervix, second trimester -O3443 Maternal care for other abnormalities of cervix, third trimester -O34511 Maternal care for incarceration of gravid uterus, first trimester -O34512 Maternal care for incarceration of gravid uterus, second trimester -O34513 Maternal care for incarceration of gravid uterus, third trimester -O34519 Maternal care for incarceration of gravid uterus, unspecified trimester -O34521 Maternal care for prolapse of gravid uterus, first trimester -O34522 Maternal care for prolapse of gravid uterus, second trimester -O34523 Maternal care for prolapse of gravid uterus, third trimester -O34529 Maternal care for prolapse of gravid uterus, unspecified trimester -O34531 Maternal care for retroversion of gravid uterus, first trimester -O34532 Maternal care for retroversion of gravid uterus, second trimester -O34533 Maternal care for retroversion of gravid uterus, third trimester -O34539 Maternal care for retroversion of gravid uterus, unspecified trimester -O34591 Maternal care for other abnormalities of gravid uterus, first trimester -O34592 Maternal care for other abnormalities of gravid uterus, second trimester -O34593 Maternal care for other abnormalities of gravid uterus, third trimester -O34599 Maternal care for other abnormalities of gravid uterus, unspecified trimester -O3460 Maternal care for abnormality of vagina, unspecified trimester -O3461 Maternal care for abnormality of vagina, first trimester -O3462 Maternal care for abnormality of vagina, second trimester -O3463 Maternal care for abnormality of vagina, third trimester -O3470 Maternal care for abnormality of vulva and perineum, unspecified trimester -O3471 Maternal care for abnormality of vulva and perineum, first trimester -O3472 Maternal care for abnormality of vulva and perineum, second trimester -O3473 Maternal care for abnormality of vulva and perineum, third trimester -O3480 Maternal care for other abnormalities of pelvic organs, unspecified trimester -O3481 Maternal care for other abnormalities of pelvic organs, first trimester -O3482 Maternal care for other abnormalities of pelvic organs, second trimester -O3483 Maternal care for other abnormalities of pelvic organs, third trimester -O3490 Maternal care for abnormality of pelvic organ, unspecified, unspecified trimester -O3491 Maternal care for abnormality of pelvic organ, unspecified, first trimester -O3492 Maternal care for abnormality of pelvic organ, unspecified, second trimester -O3493 Maternal care for abnormality of pelvic organ, unspecified, third trimester -O350XX0 Maternal care for (suspected) central nervous system malformation in fetus, not applicable or unspecified -O350XX1 Maternal care for (suspected) central nervous system malformation in fetus, fetus 1 -O350XX2 Maternal care for (suspected) central nervous system malformation in fetus, fetus 2 -O350XX3 Maternal care for (suspected) central nervous system malformation in fetus, fetus 3 -O350XX4 Maternal care for (suspected) central nervous system malformation in fetus, fetus 4 -O350XX5 Maternal care for (suspected) central nervous system malformation in fetus, fetus 5 -O350XX9 Maternal care for (suspected) central nervous system malformation in fetus, other fetus -O351XX0 Maternal care for (suspected) chromosomal abnormality in fetus, not applicable or unspecified -O351XX1 Maternal care for (suspected) chromosomal abnormality in fetus, fetus 1 -O351XX2 Maternal care for (suspected) chromosomal abnormality in fetus, fetus 2 -O351XX3 Maternal care for (suspected) chromosomal abnormality in fetus, fetus 3 -O351XX4 Maternal care for (suspected) chromosomal abnormality in fetus, fetus 4 -O351XX5 Maternal care for (suspected) chromosomal abnormality in fetus, fetus 5 -O351XX9 Maternal care for (suspected) chromosomal abnormality in fetus, other fetus -O352XX0 Maternal care for (suspected) hereditary disease in fetus, not applicable or unspecified -O352XX1 Maternal care for (suspected) hereditary disease in fetus, fetus 1 -O352XX2 Maternal care for (suspected) hereditary disease in fetus, fetus 2 -O352XX3 Maternal care for (suspected) hereditary disease in fetus, fetus 3 -O352XX4 Maternal care for (suspected) hereditary disease in fetus, fetus 4 -O352XX5 Maternal care for (suspected) hereditary disease in fetus, fetus 5 -O352XX9 Maternal care for (suspected) hereditary disease in fetus, other fetus -O353XX0 Maternal care for (suspected) damage to fetus from viral disease in mother, not applicable or unspecified -O353XX1 Maternal care for (suspected) damage to fetus from viral disease in mother, fetus 1 -O353XX2 Maternal care for (suspected) damage to fetus from viral disease in mother, fetus 2 -O353XX3 Maternal care for (suspected) damage to fetus from viral disease in mother, fetus 3 -O353XX4 Maternal care for (suspected) damage to fetus from viral disease in mother, fetus 4 -O353XX5 Maternal care for (suspected) damage to fetus from viral disease in mother, fetus 5 -O353XX9 Maternal care for (suspected) damage to fetus from viral disease in mother, other fetus -O354XX0 Maternal care for (suspected) damage to fetus from alcohol, not applicable or unspecified -O354XX1 Maternal care for (suspected) damage to fetus from alcohol, fetus 1 -O354XX2 Maternal care for (suspected) damage to fetus from alcohol, fetus 2 -O354XX3 Maternal care for (suspected) damage to fetus from alcohol, fetus 3 -O354XX4 Maternal care for (suspected) damage to fetus from alcohol, fetus 4 -O354XX5 Maternal care for (suspected) damage to fetus from alcohol, fetus 5 -O354XX9 Maternal care for (suspected) damage to fetus from alcohol, other fetus -O355XX0 Maternal care for (suspected) damage to fetus by drugs, not applicable or unspecified -O355XX1 Maternal care for (suspected) damage to fetus by drugs, fetus 1 -O355XX2 Maternal care for (suspected) damage to fetus by drugs, fetus 2 -O355XX3 Maternal care for (suspected) damage to fetus by drugs, fetus 3 -O355XX4 Maternal care for (suspected) damage to fetus by drugs, fetus 4 -O355XX5 Maternal care for (suspected) damage to fetus by drugs, fetus 5 -O355XX9 Maternal care for (suspected) damage to fetus by drugs, other fetus -O356XX0 Maternal care for (suspected) damage to fetus by radiation, not applicable or unspecified -O356XX1 Maternal care for (suspected) damage to fetus by radiation, fetus 1 -O356XX2 Maternal care for (suspected) damage to fetus by radiation, fetus 2 -O356XX3 Maternal care for (suspected) damage to fetus by radiation, fetus 3 -O356XX4 Maternal care for (suspected) damage to fetus by radiation, fetus 4 -O356XX5 Maternal care for (suspected) damage to fetus by radiation, fetus 5 -O356XX9 Maternal care for (suspected) damage to fetus by radiation, other fetus -O357XX0 Maternal care for (suspected) damage to fetus by other medical procedures, not applicable or unspecified -O357XX1 Maternal care for (suspected) damage to fetus by other medical procedures, fetus 1 -O357XX2 Maternal care for (suspected) damage to fetus by other medical procedures, fetus 2 -O357XX3 Maternal care for (suspected) damage to fetus by other medical procedures, fetus 3 -O357XX4 Maternal care for (suspected) damage to fetus by other medical procedures, fetus 4 -O357XX5 Maternal care for (suspected) damage to fetus by other medical procedures, fetus 5 -O357XX9 Maternal care for (suspected) damage to fetus by other medical procedures, other fetus -O358XX0 Maternal care for other (suspected) fetal abnormality and damage, not applicable or unspecified -O358XX1 Maternal care for other (suspected) fetal abnormality and damage, fetus 1 -O358XX2 Maternal care for other (suspected) fetal abnormality and damage, fetus 2 -O358XX3 Maternal care for other (suspected) fetal abnormality and damage, fetus 3 -O358XX4 Maternal care for other (suspected) fetal abnormality and damage, fetus 4 -O358XX5 Maternal care for other (suspected) fetal abnormality and damage, fetus 5 -O358XX9 Maternal care for other (suspected) fetal abnormality and damage, other fetus -O359XX0 Maternal care for (suspected) fetal abnormality and damage, unspecified, not applicable or unspecified -O359XX1 Maternal care for (suspected) fetal abnormality and damage, unspecified, fetus 1 -O359XX2 Maternal care for (suspected) fetal abnormality and damage, unspecified, fetus 2 -O359XX3 Maternal care for (suspected) fetal abnormality and damage, unspecified, fetus 3 -O359XX4 Maternal care for (suspected) fetal abnormality and damage, unspecified, fetus 4 -O359XX5 Maternal care for (suspected) fetal abnormality and damage, unspecified, fetus 5 -O359XX9 Maternal care for (suspected) fetal abnormality and damage, unspecified, other fetus -O360110 Maternal care for anti-D [Rh] antibodies, first trimester, not applicable or unspecified -O360111 Maternal care for anti-D [Rh] antibodies, first trimester, fetus 1 -O360112 Maternal care for anti-D [Rh] antibodies, first trimester, fetus 2 -O360113 Maternal care for anti-D [Rh] antibodies, first trimester, fetus 3 -O360114 Maternal care for anti-D [Rh] antibodies, first trimester, fetus 4 -O360115 Maternal care for anti-D [Rh] antibodies, first trimester, fetus 5 -O360119 Maternal care for anti-D [Rh] antibodies, first trimester, other fetus -O360120 Maternal care for anti-D [Rh] antibodies, second trimester, not applicable or unspecified -O360121 Maternal care for anti-D [Rh] antibodies, second trimester, fetus 1 -O360122 Maternal care for anti-D [Rh] antibodies, second trimester, fetus 2 -O360123 Maternal care for anti-D [Rh] antibodies, second trimester, fetus 3 -O360124 Maternal care for anti-D [Rh] antibodies, second trimester, fetus 4 -O360125 Maternal care for anti-D [Rh] antibodies, second trimester, fetus 5 -O360129 Maternal care for anti-D [Rh] antibodies, second trimester, other fetus -O360130 Maternal care for anti-D [Rh] antibodies, third trimester, not applicable or unspecified -O360131 Maternal care for anti-D [Rh] antibodies, third trimester, fetus 1 -O360132 Maternal care for anti-D [Rh] antibodies, third trimester, fetus 2 -O360133 Maternal care for anti-D [Rh] antibodies, third trimester, fetus 3 -O360134 Maternal care for anti-D [Rh] antibodies, third trimester, fetus 4 -O360135 Maternal care for anti-D [Rh] antibodies, third trimester, fetus 5 -O360139 Maternal care for anti-D [Rh] antibodies, third trimester, other fetus -O360190 Maternal care for anti-D [Rh] antibodies, unspecified trimester, not applicable or unspecified -O360191 Maternal care for anti-D [Rh] antibodies, unspecified trimester, fetus 1 -O360192 Maternal care for anti-D [Rh] antibodies, unspecified trimester, fetus 2 -O360193 Maternal care for anti-D [Rh] antibodies, unspecified trimester, fetus 3 -O360194 Maternal care for anti-D [Rh] antibodies, unspecified trimester, fetus 4 -O360195 Maternal care for anti-D [Rh] antibodies, unspecified trimester, fetus 5 -O360199 Maternal care for anti-D [Rh] antibodies, unspecified trimester, other fetus -O360910 Maternal care for other rhesus isoimmunization, first trimester, not applicable or unspecified -O360911 Maternal care for other rhesus isoimmunization, first trimester, fetus 1 -O360912 Maternal care for other rhesus isoimmunization, first trimester, fetus 2 -O360913 Maternal care for other rhesus isoimmunization, first trimester, fetus 3 -O360914 Maternal care for other rhesus isoimmunization, first trimester, fetus 4 -O360915 Maternal care for other rhesus isoimmunization, first trimester, fetus 5 -O360919 Maternal care for other rhesus isoimmunization, first trimester, other fetus -O360920 Maternal care for other rhesus isoimmunization, second trimester, not applicable or unspecified -O360921 Maternal care for other rhesus isoimmunization, second trimester, fetus 1 -O360922 Maternal care for other rhesus isoimmunization, second trimester, fetus 2 -O360923 Maternal care for other rhesus isoimmunization, second trimester, fetus 3 -O360924 Maternal care for other rhesus isoimmunization, second trimester, fetus 4 -O360925 Maternal care for other rhesus isoimmunization, second trimester, fetus 5 -O360929 Maternal care for other rhesus isoimmunization, second trimester, other fetus -O360930 Maternal care for other rhesus isoimmunization, third trimester, not applicable or unspecified -O360931 Maternal care for other rhesus isoimmunization, third trimester, fetus 1 -O360932 Maternal care for other rhesus isoimmunization, third trimester, fetus 2 -O360933 Maternal care for other rhesus isoimmunization, third trimester, fetus 3 -O360934 Maternal care for other rhesus isoimmunization, third trimester, fetus 4 -O360935 Maternal care for other rhesus isoimmunization, third trimester, fetus 5 -O360939 Maternal care for other rhesus isoimmunization, third trimester, other fetus -O360990 Maternal care for other rhesus isoimmunization, unspecified trimester, not applicable or unspecified -O360991 Maternal care for other rhesus isoimmunization, unspecified trimester, fetus 1 -O360992 Maternal care for other rhesus isoimmunization, unspecified trimester, fetus 2 -O360993 Maternal care for other rhesus isoimmunization, unspecified trimester, fetus 3 -O360994 Maternal care for other rhesus isoimmunization, unspecified trimester, fetus 4 -O360995 Maternal care for other rhesus isoimmunization, unspecified trimester, fetus 5 -O360999 Maternal care for other rhesus isoimmunization, unspecified trimester, other fetus -O361110 Maternal care for Anti-A sensitization, first trimester, not applicable or unspecified -O361111 Maternal care for Anti-A sensitization, first trimester, fetus 1 -O361112 Maternal care for Anti-A sensitization, first trimester, fetus 2 -O361113 Maternal care for Anti-A sensitization, first trimester, fetus 3 -O361114 Maternal care for Anti-A sensitization, first trimester, fetus 4 -O361115 Maternal care for Anti-A sensitization, first trimester, fetus 5 -O361119 Maternal care for Anti-A sensitization, first trimester, other fetus -O361120 Maternal care for Anti-A sensitization, second trimester, not applicable or unspecified -O361121 Maternal care for Anti-A sensitization, second trimester, fetus 1 -O361122 Maternal care for Anti-A sensitization, second trimester, fetus 2 -O361123 Maternal care for Anti-A sensitization, second trimester, fetus 3 -O361124 Maternal care for Anti-A sensitization, second trimester, fetus 4 -O361125 Maternal care for Anti-A sensitization, second trimester, fetus 5 -O361129 Maternal care for Anti-A sensitization, second trimester, other fetus -O361130 Maternal care for Anti-A sensitization, third trimester, not applicable or unspecified -O361131 Maternal care for Anti-A sensitization, third trimester, fetus 1 -O361132 Maternal care for Anti-A sensitization, third trimester, fetus 2 -O361133 Maternal care for Anti-A sensitization, third trimester, fetus 3 -O361134 Maternal care for Anti-A sensitization, third trimester, fetus 4 -O361135 Maternal care for Anti-A sensitization, third trimester, fetus 5 -O361139 Maternal care for Anti-A sensitization, third trimester, other fetus -O361190 Maternal care for Anti-A sensitization, unspecified trimester, not applicable or unspecified -O361191 Maternal care for Anti-A sensitization, unspecified trimester, fetus 1 -O361192 Maternal care for Anti-A sensitization, unspecified trimester, fetus 2 -O361193 Maternal care for Anti-A sensitization, unspecified trimester, fetus 3 -O361194 Maternal care for Anti-A sensitization, unspecified trimester, fetus 4 -O361195 Maternal care for Anti-A sensitization, unspecified trimester, fetus 5 -O361199 Maternal care for Anti-A sensitization, unspecified trimester, other fetus -O361910 Maternal care for other isoimmunization, first trimester, not applicable or unspecified -O361911 Maternal care for other isoimmunization, first trimester, fetus 1 -O361912 Maternal care for other isoimmunization, first trimester, fetus 2 -O361913 Maternal care for other isoimmunization, first trimester, fetus 3 -O361914 Maternal care for other isoimmunization, first trimester, fetus 4 -O361915 Maternal care for other isoimmunization, first trimester, fetus 5 -O361919 Maternal care for other isoimmunization, first trimester, other fetus -O361920 Maternal care for other isoimmunization, second trimester, not applicable or unspecified -O361921 Maternal care for other isoimmunization, second trimester, fetus 1 -O361922 Maternal care for other isoimmunization, second trimester, fetus 2 -O361923 Maternal care for other isoimmunization, second trimester, fetus 3 -O361924 Maternal care for other isoimmunization, second trimester, fetus 4 -O361925 Maternal care for other isoimmunization, second trimester, fetus 5 -O361929 Maternal care for other isoimmunization, second trimester, other fetus -O361930 Maternal care for other isoimmunization, third trimester, not applicable or unspecified -O361931 Maternal care for other isoimmunization, third trimester, fetus 1 -O361932 Maternal care for other isoimmunization, third trimester, fetus 2 -O361933 Maternal care for other isoimmunization, third trimester, fetus 3 -O361934 Maternal care for other isoimmunization, third trimester, fetus 4 -O361935 Maternal care for other isoimmunization, third trimester, fetus 5 -O361939 Maternal care for other isoimmunization, third trimester, other fetus -O361990 Maternal care for other isoimmunization, unspecified trimester, not applicable or unspecified -O361991 Maternal care for other isoimmunization, unspecified trimester, fetus 1 -O361992 Maternal care for other isoimmunization, unspecified trimester, fetus 2 -O361993 Maternal care for other isoimmunization, unspecified trimester, fetus 3 -O361994 Maternal care for other isoimmunization, unspecified trimester, fetus 4 -O361995 Maternal care for other isoimmunization, unspecified trimester, fetus 5 -O361999 Maternal care for other isoimmunization, unspecified trimester, other fetus -O3620X0 Maternal care for hydrops fetalis, unspecified trimester, not applicable or unspecified -O3620X1 Maternal care for hydrops fetalis, unspecified trimester, fetus 1 -O3620X2 Maternal care for hydrops fetalis, unspecified trimester, fetus 2 -O3620X3 Maternal care for hydrops fetalis, unspecified trimester, fetus 3 -O3620X4 Maternal care for hydrops fetalis, unspecified trimester, fetus 4 -O3620X5 Maternal care for hydrops fetalis, unspecified trimester, fetus 5 -O3620X9 Maternal care for hydrops fetalis, unspecified trimester, other fetus -O3621X0 Maternal care for hydrops fetalis, first trimester, not applicable or unspecified -O3621X1 Maternal care for hydrops fetalis, first trimester, fetus 1 -O3621X2 Maternal care for hydrops fetalis, first trimester, fetus 2 -O3621X3 Maternal care for hydrops fetalis, first trimester, fetus 3 -O3621X4 Maternal care for hydrops fetalis, first trimester, fetus 4 -O3621X5 Maternal care for hydrops fetalis, first trimester, fetus 5 -O3621X9 Maternal care for hydrops fetalis, first trimester, other fetus -O3622X0 Maternal care for hydrops fetalis, second trimester, not applicable or unspecified -O3622X1 Maternal care for hydrops fetalis, second trimester, fetus 1 -O3622X2 Maternal care for hydrops fetalis, second trimester, fetus 2 -O3622X3 Maternal care for hydrops fetalis, second trimester, fetus 3 -O3622X4 Maternal care for hydrops fetalis, second trimester, fetus 4 -O3622X5 Maternal care for hydrops fetalis, second trimester, fetus 5 -O3622X9 Maternal care for hydrops fetalis, second trimester, other fetus -O3623X0 Maternal care for hydrops fetalis, third trimester, not applicable or unspecified -O3623X1 Maternal care for hydrops fetalis, third trimester, fetus 1 -O3623X2 Maternal care for hydrops fetalis, third trimester, fetus 2 -O3623X3 Maternal care for hydrops fetalis, third trimester, fetus 3 -O3623X4 Maternal care for hydrops fetalis, third trimester, fetus 4 -O3623X5 Maternal care for hydrops fetalis, third trimester, fetus 5 -O3623X9 Maternal care for hydrops fetalis, third trimester, other fetus -O364XX0 Maternal care for intrauterine death, not applicable or unspecified -O364XX1 Maternal care for intrauterine death, fetus 1 -O364XX2 Maternal care for intrauterine death, fetus 2 -O364XX3 Maternal care for intrauterine death, fetus 3 -O364XX4 Maternal care for intrauterine death, fetus 4 -O364XX5 Maternal care for intrauterine death, fetus 5 -O364XX9 Maternal care for intrauterine death, other fetus -O365110 Maternal care for known or suspected placental insufficiency, first trimester, not applicable or unspecified -O365111 Maternal care for known or suspected placental insufficiency, first trimester, fetus 1 -O365112 Maternal care for known or suspected placental insufficiency, first trimester, fetus 2 -O365113 Maternal care for known or suspected placental insufficiency, first trimester, fetus 3 -O365114 Maternal care for known or suspected placental insufficiency, first trimester, fetus 4 -O365115 Maternal care for known or suspected placental insufficiency, first trimester, fetus 5 -O365119 Maternal care for known or suspected placental insufficiency, first trimester, other fetus -O365120 Maternal care for known or suspected placental insufficiency, second trimester, not applicable or unspecified -O365121 Maternal care for known or suspected placental insufficiency, second trimester, fetus 1 -O365122 Maternal care for known or suspected placental insufficiency, second trimester, fetus 2 -O365123 Maternal care for known or suspected placental insufficiency, second trimester, fetus 3 -O365124 Maternal care for known or suspected placental insufficiency, second trimester, fetus 4 -O365125 Maternal care for known or suspected placental insufficiency, second trimester, fetus 5 -O365129 Maternal care for known or suspected placental insufficiency, second trimester, other fetus -O365130 Maternal care for known or suspected placental insufficiency, third trimester, not applicable or unspecified -O365131 Maternal care for known or suspected placental insufficiency, third trimester, fetus 1 -O365132 Maternal care for known or suspected placental insufficiency, third trimester, fetus 2 -O365133 Maternal care for known or suspected placental insufficiency, third trimester, fetus 3 -O365134 Maternal care for known or suspected placental insufficiency, third trimester, fetus 4 -O365135 Maternal care for known or suspected placental insufficiency, third trimester, fetus 5 -O365139 Maternal care for known or suspected placental insufficiency, third trimester, other fetus -O365190 Maternal care for known or suspected placental insufficiency, unspecified trimester, not applicable or unspecified -O365191 Maternal care for known or suspected placental insufficiency, unspecified trimester, fetus 1 -O365192 Maternal care for known or suspected placental insufficiency, unspecified trimester, fetus 2 -O365193 Maternal care for known or suspected placental insufficiency, unspecified trimester, fetus 3 -O365194 Maternal care for known or suspected placental insufficiency, unspecified trimester, fetus 4 -O365195 Maternal care for known or suspected placental insufficiency, unspecified trimester, fetus 5 -O365199 Maternal care for known or suspected placental insufficiency, unspecified trimester, other fetus -O365910 Maternal care for other known or suspected poor fetal growth, first trimester, not applicable or unspecified -O365911 Maternal care for other known or suspected poor fetal growth, first trimester, fetus 1 -O365912 Maternal care for other known or suspected poor fetal growth, first trimester, fetus 2 -O365913 Maternal care for other known or suspected poor fetal growth, first trimester, fetus 3 -O365914 Maternal care for other known or suspected poor fetal growth, first trimester, fetus 4 -O365915 Maternal care for other known or suspected poor fetal growth, first trimester, fetus 5 -O365919 Maternal care for other known or suspected poor fetal growth, first trimester, other fetus -O365920 Maternal care for other known or suspected poor fetal growth, second trimester, not applicable or unspecified -O365921 Maternal care for other known or suspected poor fetal growth, second trimester, fetus 1 -O365922 Maternal care for other known or suspected poor fetal growth, second trimester, fetus 2 -O365923 Maternal care for other known or suspected poor fetal growth, second trimester, fetus 3 -O365924 Maternal care for other known or suspected poor fetal growth, second trimester, fetus 4 -O365925 Maternal care for other known or suspected poor fetal growth, second trimester, fetus 5 -O365929 Maternal care for other known or suspected poor fetal growth, second trimester, other fetus -O365930 Maternal care for other known or suspected poor fetal growth, third trimester, not applicable or unspecified -O365931 Maternal care for other known or suspected poor fetal growth, third trimester, fetus 1 -O365932 Maternal care for other known or suspected poor fetal growth, third trimester, fetus 2 -O365933 Maternal care for other known or suspected poor fetal growth, third trimester, fetus 3 -O365934 Maternal care for other known or suspected poor fetal growth, third trimester, fetus 4 -O365935 Maternal care for other known or suspected poor fetal growth, third trimester, fetus 5 -O365939 Maternal care for other known or suspected poor fetal growth, third trimester, other fetus -O365990 Maternal care for other known or suspected poor fetal growth, unspecified trimester, not applicable or unspecified -O365991 Maternal care for other known or suspected poor fetal growth, unspecified trimester, fetus 1 -O365992 Maternal care for other known or suspected poor fetal growth, unspecified trimester, fetus 2 -O365993 Maternal care for other known or suspected poor fetal growth, unspecified trimester, fetus 3 -O365994 Maternal care for other known or suspected poor fetal growth, unspecified trimester, fetus 4 -O365995 Maternal care for other known or suspected poor fetal growth, unspecified trimester, fetus 5 -O365999 Maternal care for other known or suspected poor fetal growth, unspecified trimester, other fetus -O3660X0 Maternal care for excessive fetal growth, unspecified trimester, not applicable or unspecified -O3660X1 Maternal care for excessive fetal growth, unspecified trimester, fetus 1 -O3660X2 Maternal care for excessive fetal growth, unspecified trimester, fetus 2 -O3660X3 Maternal care for excessive fetal growth, unspecified trimester, fetus 3 -O3660X4 Maternal care for excessive fetal growth, unspecified trimester, fetus 4 -O3660X5 Maternal care for excessive fetal growth, unspecified trimester, fetus 5 -O3660X9 Maternal care for excessive fetal growth, unspecified trimester, other fetus -O3661X0 Maternal care for excessive fetal growth, first trimester, not applicable or unspecified -O3661X1 Maternal care for excessive fetal growth, first trimester, fetus 1 -O3661X2 Maternal care for excessive fetal growth, first trimester, fetus 2 -O3661X3 Maternal care for excessive fetal growth, first trimester, fetus 3 -O3661X4 Maternal care for excessive fetal growth, first trimester, fetus 4 -O3661X5 Maternal care for excessive fetal growth, first trimester, fetus 5 -O3661X9 Maternal care for excessive fetal growth, first trimester, other fetus -O3662X0 Maternal care for excessive fetal growth, second trimester, not applicable or unspecified -O3662X1 Maternal care for excessive fetal growth, second trimester, fetus 1 -O3662X2 Maternal care for excessive fetal growth, second trimester, fetus 2 -O3662X3 Maternal care for excessive fetal growth, second trimester, fetus 3 -O3662X4 Maternal care for excessive fetal growth, second trimester, fetus 4 -O3662X5 Maternal care for excessive fetal growth, second trimester, fetus 5 -O3662X9 Maternal care for excessive fetal growth, second trimester, other fetus -O3663X0 Maternal care for excessive fetal growth, third trimester, not applicable or unspecified -O3663X1 Maternal care for excessive fetal growth, third trimester, fetus 1 -O3663X2 Maternal care for excessive fetal growth, third trimester, fetus 2 -O3663X3 Maternal care for excessive fetal growth, third trimester, fetus 3 -O3663X4 Maternal care for excessive fetal growth, third trimester, fetus 4 -O3663X5 Maternal care for excessive fetal growth, third trimester, fetus 5 -O3663X9 Maternal care for excessive fetal growth, third trimester, other fetus -O3670X0 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, not applicable or unspecified -O3670X1 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, fetus 1 -O3670X2 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, fetus 2 -O3670X3 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, fetus 3 -O3670X4 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, fetus 4 -O3670X5 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, fetus 5 -O3670X9 Maternal care for viable fetus in abdominal pregnancy, unspecified trimester, other fetus -O3671X0 Maternal care for viable fetus in abdominal pregnancy, first trimester, not applicable or unspecified -O3671X1 Maternal care for viable fetus in abdominal pregnancy, first trimester, fetus 1 -O3671X2 Maternal care for viable fetus in abdominal pregnancy, first trimester, fetus 2 -O3671X3 Maternal care for viable fetus in abdominal pregnancy, first trimester, fetus 3 -O3671X4 Maternal care for viable fetus in abdominal pregnancy, first trimester, fetus 4 -O3671X5 Maternal care for viable fetus in abdominal pregnancy, first trimester, fetus 5 -O3671X9 Maternal care for viable fetus in abdominal pregnancy, first trimester, other fetus -O3672X0 Maternal care for viable fetus in abdominal pregnancy, second trimester, not applicable or unspecified -O3672X1 Maternal care for viable fetus in abdominal pregnancy, second trimester, fetus 1 -O3672X2 Maternal care for viable fetus in abdominal pregnancy, second trimester, fetus 2 -O3672X3 Maternal care for viable fetus in abdominal pregnancy, second trimester, fetus 3 -O3672X4 Maternal care for viable fetus in abdominal pregnancy, second trimester, fetus 4 -O3672X5 Maternal care for viable fetus in abdominal pregnancy, second trimester, fetus 5 -O3672X9 Maternal care for viable fetus in abdominal pregnancy, second trimester, other fetus -O3673X0 Maternal care for viable fetus in abdominal pregnancy, third trimester, not applicable or unspecified -O3673X1 Maternal care for viable fetus in abdominal pregnancy, third trimester, fetus 1 -O3673X2 Maternal care for viable fetus in abdominal pregnancy, third trimester, fetus 2 -O3673X3 Maternal care for viable fetus in abdominal pregnancy, third trimester, fetus 3 -O3673X4 Maternal care for viable fetus in abdominal pregnancy, third trimester, fetus 4 -O3673X5 Maternal care for viable fetus in abdominal pregnancy, third trimester, fetus 5 -O3673X9 Maternal care for viable fetus in abdominal pregnancy, third trimester, other fetus -O3680X0 Pregnancy with inconclusive fetal viability, not applicable or unspecified -O3680X1 Pregnancy with inconclusive fetal viability, fetus 1 -O3680X2 Pregnancy with inconclusive fetal viability, fetus 2 -O3680X3 Pregnancy with inconclusive fetal viability, fetus 3 -O3680X4 Pregnancy with inconclusive fetal viability, fetus 4 -O3680X5 Pregnancy with inconclusive fetal viability, fetus 5 -O3680X9 Pregnancy with inconclusive fetal viability, other fetus -O368120 Decreased fetal movements, second trimester, not applicable or unspecified -O368121 Decreased fetal movements, second trimester, fetus 1 -O368122 Decreased fetal movements, second trimester, fetus 2 -O368123 Decreased fetal movements, second trimester, fetus 3 -O368124 Decreased fetal movements, second trimester, fetus 4 -O368125 Decreased fetal movements, second trimester, fetus 5 -O368129 Decreased fetal movements, second trimester, other fetus -O368130 Decreased fetal movements, third trimester, not applicable or unspecified -O368131 Decreased fetal movements, third trimester, fetus 1 -O368132 Decreased fetal movements, third trimester, fetus 2 -O368133 Decreased fetal movements, third trimester, fetus 3 -O368134 Decreased fetal movements, third trimester, fetus 4 -O368135 Decreased fetal movements, third trimester, fetus 5 -O368139 Decreased fetal movements, third trimester, other fetus -O368190 Decreased fetal movements, unspecified trimester, not applicable or unspecified -O368191 Decreased fetal movements, unspecified trimester, fetus 1 -O368192 Decreased fetal movements, unspecified trimester, fetus 2 -O368193 Decreased fetal movements, unspecified trimester, fetus 3 -O368194 Decreased fetal movements, unspecified trimester, fetus 4 -O368195 Decreased fetal movements, unspecified trimester, fetus 5 -O368199 Decreased fetal movements, unspecified trimester, other fetus -O368210 Fetal anemia and thrombocytopenia, first trimester, not applicable or unspecified -O368211 Fetal anemia and thrombocytopenia, first trimester, fetus 1 -O368212 Fetal anemia and thrombocytopenia, first trimester, fetus 2 -O368213 Fetal anemia and thrombocytopenia, first trimester, fetus 3 -O368214 Fetal anemia and thrombocytopenia, first trimester, fetus 4 -O368215 Fetal anemia and thrombocytopenia, first trimester, fetus 5 -O368219 Fetal anemia and thrombocytopenia, first trimester, other fetus -O368220 Fetal anemia and thrombocytopenia, second trimester, not applicable or unspecified -O368221 Fetal anemia and thrombocytopenia, second trimester, fetus 1 -O368222 Fetal anemia and thrombocytopenia, second trimester, fetus 2 -O368223 Fetal anemia and thrombocytopenia, second trimester, fetus 3 -O368224 Fetal anemia and thrombocytopenia, second trimester, fetus 4 -O368225 Fetal anemia and thrombocytopenia, second trimester, fetus 5 -O368229 Fetal anemia and thrombocytopenia, second trimester, other fetus -O368230 Fetal anemia and thrombocytopenia, third trimester, not applicable or unspecified -O368231 Fetal anemia and thrombocytopenia, third trimester, fetus 1 -O368232 Fetal anemia and thrombocytopenia, third trimester, fetus 2 -O368233 Fetal anemia and thrombocytopenia, third trimester, fetus 3 -O368234 Fetal anemia and thrombocytopenia, third trimester, fetus 4 -O368235 Fetal anemia and thrombocytopenia, third trimester, fetus 5 -O368239 Fetal anemia and thrombocytopenia, third trimester, other fetus -O368290 Fetal anemia and thrombocytopenia, unspecified trimester, not applicable or unspecified -O368291 Fetal anemia and thrombocytopenia, unspecified trimester, fetus 1 -O368292 Fetal anemia and thrombocytopenia, unspecified trimester, fetus 2 -O368293 Fetal anemia and thrombocytopenia, unspecified trimester, fetus 3 -O368294 Fetal anemia and thrombocytopenia, unspecified trimester, fetus 4 -O368295 Fetal anemia and thrombocytopenia, unspecified trimester, fetus 5 -O368299 Fetal anemia and thrombocytopenia, unspecified trimester, other fetus -O368910 Maternal care for other specified fetal problems, first trimester, not applicable or unspecified -O368911 Maternal care for other specified fetal problems, first trimester, fetus 1 -O368912 Maternal care for other specified fetal problems, first trimester, fetus 2 -O368913 Maternal care for other specified fetal problems, first trimester, fetus 3 -O368914 Maternal care for other specified fetal problems, first trimester, fetus 4 -O368915 Maternal care for other specified fetal problems, first trimester, fetus 5 -O368919 Maternal care for other specified fetal problems, first trimester, other fetus -O368920 Maternal care for other specified fetal problems, second trimester, not applicable or unspecified -O368921 Maternal care for other specified fetal problems, second trimester, fetus 1 -O368922 Maternal care for other specified fetal problems, second trimester, fetus 2 -O368923 Maternal care for other specified fetal problems, second trimester, fetus 3 -O368924 Maternal care for other specified fetal problems, second trimester, fetus 4 -O368925 Maternal care for other specified fetal problems, second trimester, fetus 5 -O368929 Maternal care for other specified fetal problems, second trimester, other fetus -O368930 Maternal care for other specified fetal problems, third trimester, not applicable or unspecified -O368931 Maternal care for other specified fetal problems, third trimester, fetus 1 -O368932 Maternal care for other specified fetal problems, third trimester, fetus 2 -O368933 Maternal care for other specified fetal problems, third trimester, fetus 3 -O368934 Maternal care for other specified fetal problems, third trimester, fetus 4 -O368935 Maternal care for other specified fetal problems, third trimester, fetus 5 -O368939 Maternal care for other specified fetal problems, third trimester, other fetus -O368990 Maternal care for other specified fetal problems, unspecified trimester, not applicable or unspecified -O368991 Maternal care for other specified fetal problems, unspecified trimester, fetus 1 -O368992 Maternal care for other specified fetal problems, unspecified trimester, fetus 2 -O368993 Maternal care for other specified fetal problems, unspecified trimester, fetus 3 -O368994 Maternal care for other specified fetal problems, unspecified trimester, fetus 4 -O368995 Maternal care for other specified fetal problems, unspecified trimester, fetus 5 -O368999 Maternal care for other specified fetal problems, unspecified trimester, other fetus -O3690X0 Maternal care for fetal problem, unspecified, unspecified trimester, not applicable or unspecified -O3690X1 Maternal care for fetal problem, unspecified, unspecified trimester, fetus 1 -O3690X2 Maternal care for fetal problem, unspecified, unspecified trimester, fetus 2 -O3690X3 Maternal care for fetal problem, unspecified, unspecified trimester, fetus 3 -O3690X4 Maternal care for fetal problem, unspecified, unspecified trimester, fetus 4 -O3690X5 Maternal care for fetal problem, unspecified, unspecified trimester, fetus 5 -O3690X9 Maternal care for fetal problem, unspecified, unspecified trimester, other fetus -O3691X0 Maternal care for fetal problem, unspecified, first trimester, not applicable or unspecified -O3691X1 Maternal care for fetal problem, unspecified, first trimester, fetus 1 -O3691X2 Maternal care for fetal problem, unspecified, first trimester, fetus 2 -O3691X3 Maternal care for fetal problem, unspecified, first trimester, fetus 3 -O3691X4 Maternal care for fetal problem, unspecified, first trimester, fetus 4 -O3691X5 Maternal care for fetal problem, unspecified, first trimester, fetus 5 -O3691X9 Maternal care for fetal problem, unspecified, first trimester, other fetus -O3692X0 Maternal care for fetal problem, unspecified, second trimester, not applicable or unspecified -O3692X1 Maternal care for fetal problem, unspecified, second trimester, fetus 1 -O3692X2 Maternal care for fetal problem, unspecified, second trimester, fetus 2 -O3692X3 Maternal care for fetal problem, unspecified, second trimester, fetus 3 -O3692X4 Maternal care for fetal problem, unspecified, second trimester, fetus 4 -O3692X5 Maternal care for fetal problem, unspecified, second trimester, fetus 5 -O3692X9 Maternal care for fetal problem, unspecified, second trimester, other fetus -O3693X0 Maternal care for fetal problem, unspecified, third trimester, not applicable or unspecified -O3693X1 Maternal care for fetal problem, unspecified, third trimester, fetus 1 -O3693X2 Maternal care for fetal problem, unspecified, third trimester, fetus 2 -O3693X3 Maternal care for fetal problem, unspecified, third trimester, fetus 3 -O3693X4 Maternal care for fetal problem, unspecified, third trimester, fetus 4 -O3693X5 Maternal care for fetal problem, unspecified, third trimester, fetus 5 -O3693X9 Maternal care for fetal problem, unspecified, third trimester, other fetus -O401XX0 Polyhydramnios, first trimester, not applicable or unspecified -O401XX1 Polyhydramnios, first trimester, fetus 1 -O401XX2 Polyhydramnios, first trimester, fetus 2 -O401XX3 Polyhydramnios, first trimester, fetus 3 -O401XX4 Polyhydramnios, first trimester, fetus 4 -O401XX5 Polyhydramnios, first trimester, fetus 5 -O401XX9 Polyhydramnios, first trimester, other fetus -O402XX0 Polyhydramnios, second trimester, not applicable or unspecified -O402XX1 Polyhydramnios, second trimester, fetus 1 -O402XX2 Polyhydramnios, second trimester, fetus 2 -O402XX3 Polyhydramnios, second trimester, fetus 3 -O402XX4 Polyhydramnios, second trimester, fetus 4 -O402XX5 Polyhydramnios, second trimester, fetus 5 -O402XX9 Polyhydramnios, second trimester, other fetus -O403XX0 Polyhydramnios, third trimester, not applicable or unspecified -O403XX1 Polyhydramnios, third trimester, fetus 1 -O403XX2 Polyhydramnios, third trimester, fetus 2 -O403XX3 Polyhydramnios, third trimester, fetus 3 -O403XX4 Polyhydramnios, third trimester, fetus 4 -O403XX5 Polyhydramnios, third trimester, fetus 5 -O403XX9 Polyhydramnios, third trimester, other fetus -O409XX0 Polyhydramnios, unspecified trimester, not applicable or unspecified -O409XX1 Polyhydramnios, unspecified trimester, fetus 1 -O409XX2 Polyhydramnios, unspecified trimester, fetus 2 -O409XX3 Polyhydramnios, unspecified trimester, fetus 3 -O409XX4 Polyhydramnios, unspecified trimester, fetus 4 -O409XX5 Polyhydramnios, unspecified trimester, fetus 5 -O409XX9 Polyhydramnios, unspecified trimester, other fetus -O4100X0 Oligohydramnios, unspecified trimester, not applicable or unspecified -O4100X1 Oligohydramnios, unspecified trimester, fetus 1 -O4100X2 Oligohydramnios, unspecified trimester, fetus 2 -O4100X3 Oligohydramnios, unspecified trimester, fetus 3 -O4100X4 Oligohydramnios, unspecified trimester, fetus 4 -O4100X5 Oligohydramnios, unspecified trimester, fetus 5 -O4100X9 Oligohydramnios, unspecified trimester, other fetus -O4101X0 Oligohydramnios, first trimester, not applicable or unspecified -O4101X1 Oligohydramnios, first trimester, fetus 1 -O4101X2 Oligohydramnios, first trimester, fetus 2 -O4101X3 Oligohydramnios, first trimester, fetus 3 -O4101X4 Oligohydramnios, first trimester, fetus 4 -O4101X5 Oligohydramnios, first trimester, fetus 5 -O4101X9 Oligohydramnios, first trimester, other fetus -O4102X0 Oligohydramnios, second trimester, not applicable or unspecified -O4102X1 Oligohydramnios, second trimester, fetus 1 -O4102X2 Oligohydramnios, second trimester, fetus 2 -O4102X3 Oligohydramnios, second trimester, fetus 3 -O4102X4 Oligohydramnios, second trimester, fetus 4 -O4102X5 Oligohydramnios, second trimester, fetus 5 -O4102X9 Oligohydramnios, second trimester, other fetus -O4103X0 Oligohydramnios, third trimester, not applicable or unspecified -O4103X1 Oligohydramnios, third trimester, fetus 1 -O4103X2 Oligohydramnios, third trimester, fetus 2 -O4103X3 Oligohydramnios, third trimester, fetus 3 -O4103X4 Oligohydramnios, third trimester, fetus 4 -O4103X5 Oligohydramnios, third trimester, fetus 5 -O4103X9 Oligohydramnios, third trimester, other fetus -O411010 Infection of amniotic sac and membranes, unspecified, first trimester, not applicable or unspecified -O411011 Infection of amniotic sac and membranes, unspecified, first trimester, fetus 1 -O411012 Infection of amniotic sac and membranes, unspecified, first trimester, fetus 2 -O411013 Infection of amniotic sac and membranes, unspecified, first trimester, fetus 3 -O411014 Infection of amniotic sac and membranes, unspecified, first trimester, fetus 4 -O411015 Infection of amniotic sac and membranes, unspecified, first trimester, fetus 5 -O411019 Infection of amniotic sac and membranes, unspecified, first trimester, other fetus -O411020 Infection of amniotic sac and membranes, unspecified, second trimester, not applicable or unspecified -O411021 Infection of amniotic sac and membranes, unspecified, second trimester, fetus 1 -O411022 Infection of amniotic sac and membranes, unspecified, second trimester, fetus 2 -O411023 Infection of amniotic sac and membranes, unspecified, second trimester, fetus 3 -O411024 Infection of amniotic sac and membranes, unspecified, second trimester, fetus 4 -O411025 Infection of amniotic sac and membranes, unspecified, second trimester, fetus 5 -O411029 Infection of amniotic sac and membranes, unspecified, second trimester, other fetus -O411030 Infection of amniotic sac and membranes, unspecified, third trimester, not applicable or unspecified -O411031 Infection of amniotic sac and membranes, unspecified, third trimester, fetus 1 -O411032 Infection of amniotic sac and membranes, unspecified, third trimester, fetus 2 -O411033 Infection of amniotic sac and membranes, unspecified, third trimester, fetus 3 -O411034 Infection of amniotic sac and membranes, unspecified, third trimester, fetus 4 -O411035 Infection of amniotic sac and membranes, unspecified, third trimester, fetus 5 -O411039 Infection of amniotic sac and membranes, unspecified, third trimester, other fetus -O411090 Infection of amniotic sac and membranes, unspecified, unspecified trimester, not applicable or unspecified -O411091 Infection of amniotic sac and membranes, unspecified, unspecified trimester, fetus 1 -O411092 Infection of amniotic sac and membranes, unspecified, unspecified trimester, fetus 2 -O411093 Infection of amniotic sac and membranes, unspecified, unspecified trimester, fetus 3 -O411094 Infection of amniotic sac and membranes, unspecified, unspecified trimester, fetus 4 -O411095 Infection of amniotic sac and membranes, unspecified, unspecified trimester, fetus 5 -O411099 Infection of amniotic sac and membranes, unspecified, unspecified trimester, other fetus -O411210 Chorioamnionitis, first trimester, not applicable or unspecified -O411211 Chorioamnionitis, first trimester, fetus 1 -O411212 Chorioamnionitis, first trimester, fetus 2 -O411213 Chorioamnionitis, first trimester, fetus 3 -O411214 Chorioamnionitis, first trimester, fetus 4 -O411215 Chorioamnionitis, first trimester, fetus 5 -O411219 Chorioamnionitis, first trimester, other fetus -O411220 Chorioamnionitis, second trimester, not applicable or unspecified -O411221 Chorioamnionitis, second trimester, fetus 1 -O411222 Chorioamnionitis, second trimester, fetus 2 -O411223 Chorioamnionitis, second trimester, fetus 3 -O411224 Chorioamnionitis, second trimester, fetus 4 -O411225 Chorioamnionitis, second trimester, fetus 5 -O411229 Chorioamnionitis, second trimester, other fetus -O411230 Chorioamnionitis, third trimester, not applicable or unspecified -O411231 Chorioamnionitis, third trimester, fetus 1 -O411232 Chorioamnionitis, third trimester, fetus 2 -O411233 Chorioamnionitis, third trimester, fetus 3 -O411234 Chorioamnionitis, third trimester, fetus 4 -O411235 Chorioamnionitis, third trimester, fetus 5 -O411239 Chorioamnionitis, third trimester, other fetus -O411290 Chorioamnionitis, unspecified trimester, not applicable or unspecified -O411291 Chorioamnionitis, unspecified trimester, fetus 1 -O411292 Chorioamnionitis, unspecified trimester, fetus 2 -O411293 Chorioamnionitis, unspecified trimester, fetus 3 -O411294 Chorioamnionitis, unspecified trimester, fetus 4 -O411295 Chorioamnionitis, unspecified trimester, fetus 5 -O411299 Chorioamnionitis, unspecified trimester, other fetus -O411410 Placentitis, first trimester, not applicable or unspecified -O411411 Placentitis, first trimester, fetus 1 -O411412 Placentitis, first trimester, fetus 2 -O411413 Placentitis, first trimester, fetus 3 -O411414 Placentitis, first trimester, fetus 4 -O411415 Placentitis, first trimester, fetus 5 -O411419 Placentitis, first trimester, other fetus -O411420 Placentitis, second trimester, not applicable or unspecified -O411421 Placentitis, second trimester, fetus 1 -O411422 Placentitis, second trimester, fetus 2 -O411423 Placentitis, second trimester, fetus 3 -O411424 Placentitis, second trimester, fetus 4 -O411425 Placentitis, second trimester, fetus 5 -O411429 Placentitis, second trimester, other fetus -O411430 Placentitis, third trimester, not applicable or unspecified -O411431 Placentitis, third trimester, fetus 1 -O411432 Placentitis, third trimester, fetus 2 -O411433 Placentitis, third trimester, fetus 3 -O411434 Placentitis, third trimester, fetus 4 -O411435 Placentitis, third trimester, fetus 5 -O411439 Placentitis, third trimester, other fetus -O411490 Placentitis, unspecified trimester, not applicable or unspecified -O411491 Placentitis, unspecified trimester, fetus 1 -O411492 Placentitis, unspecified trimester, fetus 2 -O411493 Placentitis, unspecified trimester, fetus 3 -O411494 Placentitis, unspecified trimester, fetus 4 -O411495 Placentitis, unspecified trimester, fetus 5 -O411499 Placentitis, unspecified trimester, other fetus -O418X10 Other specified disorders of amniotic fluid and membranes, first trimester, not applicable or unspecified -O418X11 Other specified disorders of amniotic fluid and membranes, first trimester, fetus 1 -O418X12 Other specified disorders of amniotic fluid and membranes, first trimester, fetus 2 -O418X13 Other specified disorders of amniotic fluid and membranes, first trimester, fetus 3 -O418X14 Other specified disorders of amniotic fluid and membranes, first trimester, fetus 4 -O418X15 Other specified disorders of amniotic fluid and membranes, first trimester, fetus 5 -O418X19 Other specified disorders of amniotic fluid and membranes, first trimester, other fetus -O418X20 Other specified disorders of amniotic fluid and membranes, second trimester, not applicable or unspecified -O418X21 Other specified disorders of amniotic fluid and membranes, second trimester, fetus 1 -O418X22 Other specified disorders of amniotic fluid and membranes, second trimester, fetus 2 -O418X23 Other specified disorders of amniotic fluid and membranes, second trimester, fetus 3 -O418X24 Other specified disorders of amniotic fluid and membranes, second trimester, fetus 4 -O418X25 Other specified disorders of amniotic fluid and membranes, second trimester, fetus 5 -O418X29 Other specified disorders of amniotic fluid and membranes, second trimester, other fetus -O418X30 Other specified disorders of amniotic fluid and membranes, third trimester, not applicable or unspecified -O418X31 Other specified disorders of amniotic fluid and membranes, third trimester, fetus 1 -O418X32 Other specified disorders of amniotic fluid and membranes, third trimester, fetus 2 -O418X33 Other specified disorders of amniotic fluid and membranes, third trimester, fetus 3 -O418X34 Other specified disorders of amniotic fluid and membranes, third trimester, fetus 4 -O418X35 Other specified disorders of amniotic fluid and membranes, third trimester, fetus 5 -O418X39 Other specified disorders of amniotic fluid and membranes, third trimester, other fetus -O418X90 Other specified disorders of amniotic fluid and membranes, unspecified trimester, not applicable or unspecified -O418X91 Other specified disorders of amniotic fluid and membranes, unspecified trimester, fetus 1 -O418X92 Other specified disorders of amniotic fluid and membranes, unspecified trimester, fetus 2 -O418X93 Other specified disorders of amniotic fluid and membranes, unspecified trimester, fetus 3 -O418X94 Other specified disorders of amniotic fluid and membranes, unspecified trimester, fetus 4 -O418X95 Other specified disorders of amniotic fluid and membranes, unspecified trimester, fetus 5 -O418X99 Other specified disorders of amniotic fluid and membranes, unspecified trimester, other fetus -O4190X0 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, not applicable or unspecified -O4190X1 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, fetus 1 -O4190X2 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, fetus 2 -O4190X3 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, fetus 3 -O4190X4 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, fetus 4 -O4190X5 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, fetus 5 -O4190X9 Disorder of amniotic fluid and membranes, unspecified, unspecified trimester, other fetus -O4191X0 Disorder of amniotic fluid and membranes, unspecified, first trimester, not applicable or unspecified -O4191X1 Disorder of amniotic fluid and membranes, unspecified, first trimester, fetus 1 -O4191X2 Disorder of amniotic fluid and membranes, unspecified, first trimester, fetus 2 -O4191X3 Disorder of amniotic fluid and membranes, unspecified, first trimester, fetus 3 -O4191X4 Disorder of amniotic fluid and membranes, unspecified, first trimester, fetus 4 -O4191X5 Disorder of amniotic fluid and membranes, unspecified, first trimester, fetus 5 -O4191X9 Disorder of amniotic fluid and membranes, unspecified, first trimester, other fetus -O4192X0 Disorder of amniotic fluid and membranes, unspecified, second trimester, not applicable or unspecified -O4192X1 Disorder of amniotic fluid and membranes, unspecified, second trimester, fetus 1 -O4192X2 Disorder of amniotic fluid and membranes, unspecified, second trimester, fetus 2 -O4192X3 Disorder of amniotic fluid and membranes, unspecified, second trimester, fetus 3 -O4192X4 Disorder of amniotic fluid and membranes, unspecified, second trimester, fetus 4 -O4192X5 Disorder of amniotic fluid and membranes, unspecified, second trimester, fetus 5 -O4192X9 Disorder of amniotic fluid and membranes, unspecified, second trimester, other fetus -O4193X0 Disorder of amniotic fluid and membranes, unspecified, third trimester, not applicable or unspecified -O4193X1 Disorder of amniotic fluid and membranes, unspecified, third trimester, fetus 1 -O4193X2 Disorder of amniotic fluid and membranes, unspecified, third trimester, fetus 2 -O4193X3 Disorder of amniotic fluid and membranes, unspecified, third trimester, fetus 3 -O4193X4 Disorder of amniotic fluid and membranes, unspecified, third trimester, fetus 4 -O4193X5 Disorder of amniotic fluid and membranes, unspecified, third trimester, fetus 5 -O4193X9 Disorder of amniotic fluid and membranes, unspecified, third trimester, other fetus -O4200 Premature rupture of membranes, onset of labor within 24 hours of rupture, unspecified weeks of gestation -O42011 Preterm premature rupture of membranes, onset of labor within 24 hours of rupture, first trimester -O42012 Preterm premature rupture of membranes, onset of labor within 24 hours of rupture, second trimester -O42013 Preterm premature rupture of membranes, onset of labor within 24 hours of rupture, third trimester -O42019 Preterm premature rupture of membranes, onset of labor within 24 hours of rupture, unspecified trimester -O4202 Full-term premature rupture of membranes, onset of labor within 24 hours of rupture -O4210 Premature rupture of membranes, onset of labor more than 24 hours following rupture, unspecified weeks of gestation -O42111 Preterm premature rupture of membranes, onset of labor more than 24 hours following rupture, first trimester -O42112 Preterm premature rupture of membranes, onset of labor more than 24 hours following rupture, second trimester -O42113 Preterm premature rupture of membranes, onset of labor more than 24 hours following rupture, third trimester -O42119 Preterm premature rupture of membranes, onset of labor more than 24 hours following rupture, unspecified trimester -O4212 Full-term premature rupture of membranes, onset of labor more than 24 hours following rupture -O4290 Premature rupture of membranes, unspecified as to length of time between rupture and onset of labor, unspecified weeks of gestation -O42911 Preterm premature rupture of membranes, unspecified as to length of time between rupture and onset of labor, first trimester -O42912 Preterm premature rupture of membranes, unspecified as to length of time between rupture and onset of labor, second trimester -O42913 Preterm premature rupture of membranes, unspecified as to length of time between rupture and onset of labor, third trimester -O42919 Preterm premature rupture of membranes, unspecified as to length of time between rupture and onset of labor, unspecified trimester -O4292 Full-term premature rupture of membranes, unspecified as to length of time between rupture and onset of labor -O43011 Fetomaternal placental transfusion syndrome, first trimester -O43012 Fetomaternal placental transfusion syndrome, second trimester -O43013 Fetomaternal placental transfusion syndrome, third trimester -O43019 Fetomaternal placental transfusion syndrome, unspecified trimester -O43021 Fetus-to-fetus placental transfusion syndrome, first trimester -O43022 Fetus-to-fetus placental transfusion syndrome, second trimester -O43023 Fetus-to-fetus placental transfusion syndrome, third trimester -O43029 Fetus-to-fetus placental transfusion syndrome, unspecified trimester -O43101 Malformation of placenta, unspecified, first trimester -O43102 Malformation of placenta, unspecified, second trimester -O43103 Malformation of placenta, unspecified, third trimester -O43109 Malformation of placenta, unspecified, unspecified trimester -O43111 Circumvallate placenta, first trimester -O43112 Circumvallate placenta, second trimester -O43113 Circumvallate placenta, third trimester -O43119 Circumvallate placenta, unspecified trimester -O43121 Velamentous insertion of umbilical cord, first trimester -O43122 Velamentous insertion of umbilical cord, second trimester -O43123 Velamentous insertion of umbilical cord, third trimester -O43129 Velamentous insertion of umbilical cord, unspecified trimester -O43191 Other malformation of placenta, first trimester -O43192 Other malformation of placenta, second trimester -O43193 Other malformation of placenta, third trimester -O43199 Other malformation of placenta, unspecified trimester -O43211 Placenta accreta, first trimester -O43212 Placenta accreta, second trimester -O43213 Placenta accreta, third trimester -O43219 Placenta accreta, unspecified trimester -O43221 Placenta increta, first trimester -O43222 Placenta increta, second trimester -O43223 Placenta increta, third trimester -O43229 Placenta increta, unspecified trimester -O43231 Placenta percreta, first trimester -O43232 Placenta percreta, second trimester -O43233 Placenta percreta, third trimester -O43239 Placenta percreta, unspecified trimester -O43811 Placental infarction, first trimester -O43812 Placental infarction, second trimester -O43813 Placental infarction, third trimester -O43819 Placental infarction, unspecified trimester -O43891 Other placental disorders, first trimester -O43892 Other placental disorders, second trimester -O43893 Other placental disorders, third trimester -O43899 Other placental disorders, unspecified trimester -O4390 Unspecified placental disorder, unspecified trimester -O4391 Unspecified placental disorder, first trimester -O4392 Unspecified placental disorder, second trimester -O4393 Unspecified placental disorder, third trimester -O4400 Complete placenta previa NOS or without hemorrhage, unspecified trimester -O4401 Complete placenta previa NOS or without hemorrhage, first trimester -O4402 Complete placenta previa NOS or without hemorrhage, second trimester -O4403 Complete placenta previa NOS or without hemorrhage, third trimester -O4410 Complete placenta previa with hemorrhage, unspecified trimester -O4411 Complete placenta previa with hemorrhage, first trimester -O4412 Complete placenta previa with hemorrhage, second trimester -O4413 Complete placenta previa with hemorrhage, third trimester -O4420 Partial placenta previa NOS or without hemorrhage, unspecified trimester -O4421 Partial placenta previa NOS or without hemorrhage, first trimester -O4422 Partial placenta previa NOS or without hemorrhage, second trimester -O4423 Partial placenta previa NOS or without hemorrhage, third trimester -O4430 Partial placenta previa with hemorrhage, unspecified trimester -O4431 Partial placenta previa with hemorrhage, first trimester -O4432 Partial placenta previa with hemorrhage, second trimester -O4433 Partial placenta previa with hemorrhage, third trimester -O4440 Low lying placenta NOS or without hemorrhage, unspecified trimester -O4441 Low lying placenta NOS or without hemorrhage, first trimester -O4442 Low lying placenta NOS or without hemorrhage, second trimester -O4443 Low lying placenta NOS or without hemorrhage, third trimester -O4450 Low lying placenta with hemorrhage, unspecified trimester -O4451 Low lying placenta with hemorrhage, first trimester -O4452 Low lying placenta with hemorrhage, second trimester -O4453 Low lying placenta with hemorrhage, third trimester -O45001 Premature separation of placenta with coagulation defect, unspecified, first trimester -O45002 Premature separation of placenta with coagulation defect, unspecified, second trimester -O45003 Premature separation of placenta with coagulation defect, unspecified, third trimester -O45009 Premature separation of placenta with coagulation defect, unspecified, unspecified trimester -O45011 Premature separation of placenta with afibrinogenemia, first trimester -O45012 Premature separation of placenta with afibrinogenemia, second trimester -O45013 Premature separation of placenta with afibrinogenemia, third trimester -O45019 Premature separation of placenta with afibrinogenemia, unspecified trimester -O45021 Premature separation of placenta with disseminated intravascular coagulation, first trimester -O45022 Premature separation of placenta with disseminated intravascular coagulation, second trimester -O45023 Premature separation of placenta with disseminated intravascular coagulation, third trimester -O45029 Premature separation of placenta with disseminated intravascular coagulation, unspecified trimester -O45091 Premature separation of placenta with other coagulation defect, first trimester -O45092 Premature separation of placenta with other coagulation defect, second trimester -O45093 Premature separation of placenta with other coagulation defect, third trimester -O45099 Premature separation of placenta with other coagulation defect, unspecified trimester -O458X1 Other premature separation of placenta, first trimester -O458X2 Other premature separation of placenta, second trimester -O458X3 Other premature separation of placenta, third trimester -O458X9 Other premature separation of placenta, unspecified trimester -O4590 Premature separation of placenta, unspecified, unspecified trimester -O4591 Premature separation of placenta, unspecified, first trimester -O4592 Premature separation of placenta, unspecified, second trimester -O4593 Premature separation of placenta, unspecified, third trimester -O46001 Antepartum hemorrhage with coagulation defect, unspecified, first trimester -O46002 Antepartum hemorrhage with coagulation defect, unspecified, second trimester -O46003 Antepartum hemorrhage with coagulation defect, unspecified, third trimester -O46009 Antepartum hemorrhage with coagulation defect, unspecified, unspecified trimester -O46011 Antepartum hemorrhage with afibrinogenemia, first trimester -O46012 Antepartum hemorrhage with afibrinogenemia, second trimester -O46013 Antepartum hemorrhage with afibrinogenemia, third trimester -O46019 Antepartum hemorrhage with afibrinogenemia, unspecified trimester -O46021 Antepartum hemorrhage with disseminated intravascular coagulation, first trimester -O46022 Antepartum hemorrhage with disseminated intravascular coagulation, second trimester -O46023 Antepartum hemorrhage with disseminated intravascular coagulation, third trimester -O46029 Antepartum hemorrhage with disseminated intravascular coagulation, unspecified trimester -O46091 Antepartum hemorrhage with other coagulation defect, first trimester -O46092 Antepartum hemorrhage with other coagulation defect, second trimester -O46093 Antepartum hemorrhage with other coagulation defect, third trimester -O46099 Antepartum hemorrhage with other coagulation defect, unspecified trimester -O468X1 Other antepartum hemorrhage, first trimester -O468X2 Other antepartum hemorrhage, second trimester -O468X3 Other antepartum hemorrhage, third trimester -O468X9 Other antepartum hemorrhage, unspecified trimester -O4690 Antepartum hemorrhage, unspecified, unspecified trimester -O4691 Antepartum hemorrhage, unspecified, first trimester -O4692 Antepartum hemorrhage, unspecified, second trimester -O4693 Antepartum hemorrhage, unspecified, third trimester -O4700 False labor before 37 completed weeks of gestation, unspecified trimester -O4702 False labor before 37 completed weeks of gestation, second trimester -O4703 False labor before 37 completed weeks of gestation, third trimester -O471 False labor at or after 37 completed weeks of gestation -O479 False labor, unspecified -O480 Post-term pregnancy -O481 Prolonged pregnancy -O6000 Preterm labor without delivery, unspecified trimester -O6002 Preterm labor without delivery, second trimester -O6003 Preterm labor without delivery, third trimester -O6010X0 Preterm labor with preterm delivery, unspecified trimester, not applicable or unspecified -O6010X1 Preterm labor with preterm delivery, unspecified trimester, fetus 1 -O6010X2 Preterm labor with preterm delivery, unspecified trimester, fetus 2 -O6010X3 Preterm labor with preterm delivery, unspecified trimester, fetus 3 -O6010X4 Preterm labor with preterm delivery, unspecified trimester, fetus 4 -O6010X5 Preterm labor with preterm delivery, unspecified trimester, fetus 5 -O6010X9 Preterm labor with preterm delivery, unspecified trimester, other fetus -O6012X0 Preterm labor second trimester with preterm delivery second trimester, not applicable or unspecified -O6012X1 Preterm labor second trimester with preterm delivery second trimester, fetus 1 -O6012X2 Preterm labor second trimester with preterm delivery second trimester, fetus 2 -O6012X3 Preterm labor second trimester with preterm delivery second trimester, fetus 3 -O6012X4 Preterm labor second trimester with preterm delivery second trimester, fetus 4 -O6012X5 Preterm labor second trimester with preterm delivery second trimester, fetus 5 -O6012X9 Preterm labor second trimester with preterm delivery second trimester, other fetus -O6013X0 Preterm labor second trimester with preterm delivery third trimester, not applicable or unspecified -O6013X1 Preterm labor second trimester with preterm delivery third trimester, fetus 1 -O6013X2 Preterm labor second trimester with preterm delivery third trimester, fetus 2 -O6013X3 Preterm labor second trimester with preterm delivery third trimester, fetus 3 -O6013X4 Preterm labor second trimester with preterm delivery third trimester, fetus 4 -O6013X5 Preterm labor second trimester with preterm delivery third trimester, fetus 5 -O6013X9 Preterm labor second trimester with preterm delivery third trimester, other fetus -O6014X0 Preterm labor third trimester with preterm delivery third trimester, not applicable or unspecified -O6014X1 Preterm labor third trimester with preterm delivery third trimester, fetus 1 -O6014X2 Preterm labor third trimester with preterm delivery third trimester, fetus 2 -O6014X3 Preterm labor third trimester with preterm delivery third trimester, fetus 3 -O6014X4 Preterm labor third trimester with preterm delivery third trimester, fetus 4 -O6014X5 Preterm labor third trimester with preterm delivery third trimester, fetus 5 -O6014X9 Preterm labor third trimester with preterm delivery third trimester, other fetus -O6020X0 Term delivery with preterm labor, unspecified trimester, not applicable or unspecified -O6020X1 Term delivery with preterm labor, unspecified trimester, fetus 1 -O6020X2 Term delivery with preterm labor, unspecified trimester, fetus 2 -O6020X3 Term delivery with preterm labor, unspecified trimester, fetus 3 -O6020X4 Term delivery with preterm labor, unspecified trimester, fetus 4 -O6020X5 Term delivery with preterm labor, unspecified trimester, fetus 5 -O6020X9 Term delivery with preterm labor, unspecified trimester, other fetus -O6022X0 Term delivery with preterm labor, second trimester, not applicable or unspecified -O6022X1 Term delivery with preterm labor, second trimester, fetus 1 -O6022X2 Term delivery with preterm labor, second trimester, fetus 2 -O6022X3 Term delivery with preterm labor, second trimester, fetus 3 -O6022X4 Term delivery with preterm labor, second trimester, fetus 4 -O6022X5 Term delivery with preterm labor, second trimester, fetus 5 -O6022X9 Term delivery with preterm labor, second trimester, other fetus -O6023X0 Term delivery with preterm labor, third trimester, not applicable or unspecified -O6023X1 Term delivery with preterm labor, third trimester, fetus 1 -O6023X2 Term delivery with preterm labor, third trimester, fetus 2 -O6023X3 Term delivery with preterm labor, third trimester, fetus 3 -O6023X4 Term delivery with preterm labor, third trimester, fetus 4 -O6023X5 Term delivery with preterm labor, third trimester, fetus 5 -O6023X9 Term delivery with preterm labor, third trimester, other fetus -O610 Failed medical induction of labor -O611 Failed instrumental induction of labor -O618 Other failed induction of labor -O619 Failed induction of labor, unspecified -O620 Primary inadequate contractions -O621 Secondary uterine inertia -O622 Other uterine inertia -O623 Precipitate labor -O624 Hypertonic, incoordinate, and prolonged uterine contractions -O628 Other abnormalities of forces of labor -O629 Abnormality of forces of labor, unspecified -O630 Prolonged first stage (of labor) -O631 Prolonged second stage (of labor) -O632 Delayed delivery of second twin, triplet, etc. -O639 Long labor, unspecified -O640XX0 Obstructed labor due to incomplete rotation of fetal head, not applicable or unspecified -O640XX1 Obstructed labor due to incomplete rotation of fetal head, fetus 1 -O640XX2 Obstructed labor due to incomplete rotation of fetal head, fetus 2 -O640XX3 Obstructed labor due to incomplete rotation of fetal head, fetus 3 -O640XX4 Obstructed labor due to incomplete rotation of fetal head, fetus 4 -O640XX5 Obstructed labor due to incomplete rotation of fetal head, fetus 5 -O640XX9 Obstructed labor due to incomplete rotation of fetal head, other fetus -O641XX0 Obstructed labor due to breech presentation, not applicable or unspecified -O641XX1 Obstructed labor due to breech presentation, fetus 1 -O641XX2 Obstructed labor due to breech presentation, fetus 2 -O641XX3 Obstructed labor due to breech presentation, fetus 3 -O641XX4 Obstructed labor due to breech presentation, fetus 4 -O641XX5 Obstructed labor due to breech presentation, fetus 5 -O641XX9 Obstructed labor due to breech presentation, other fetus -O642XX0 Obstructed labor due to face presentation, not applicable or unspecified -O642XX1 Obstructed labor due to face presentation, fetus 1 -O642XX2 Obstructed labor due to face presentation, fetus 2 -O642XX3 Obstructed labor due to face presentation, fetus 3 -O642XX4 Obstructed labor due to face presentation, fetus 4 -O642XX5 Obstructed labor due to face presentation, fetus 5 -O642XX9 Obstructed labor due to face presentation, other fetus -O643XX0 Obstructed labor due to brow presentation, not applicable or unspecified -O643XX1 Obstructed labor due to brow presentation, fetus 1 -O643XX2 Obstructed labor due to brow presentation, fetus 2 -O643XX3 Obstructed labor due to brow presentation, fetus 3 -O643XX4 Obstructed labor due to brow presentation, fetus 4 -O643XX5 Obstructed labor due to brow presentation, fetus 5 -O643XX9 Obstructed labor due to brow presentation, other fetus -O644XX0 Obstructed labor due to shoulder presentation, not applicable or unspecified -O644XX1 Obstructed labor due to shoulder presentation, fetus 1 -O644XX2 Obstructed labor due to shoulder presentation, fetus 2 -O644XX3 Obstructed labor due to shoulder presentation, fetus 3 -O644XX4 Obstructed labor due to shoulder presentation, fetus 4 -O644XX5 Obstructed labor due to shoulder presentation, fetus 5 -O644XX9 Obstructed labor due to shoulder presentation, other fetus -O645XX0 Obstructed labor due to compound presentation, not applicable or unspecified -O645XX1 Obstructed labor due to compound presentation, fetus 1 -O645XX2 Obstructed labor due to compound presentation, fetus 2 -O645XX3 Obstructed labor due to compound presentation, fetus 3 -O645XX4 Obstructed labor due to compound presentation, fetus 4 -O645XX5 Obstructed labor due to compound presentation, fetus 5 -O645XX9 Obstructed labor due to compound presentation, other fetus -O648XX0 Obstructed labor due to other malposition and malpresentation, not applicable or unspecified -O648XX1 Obstructed labor due to other malposition and malpresentation, fetus 1 -O648XX2 Obstructed labor due to other malposition and malpresentation, fetus 2 -O648XX3 Obstructed labor due to other malposition and malpresentation, fetus 3 -O648XX4 Obstructed labor due to other malposition and malpresentation, fetus 4 -O648XX5 Obstructed labor due to other malposition and malpresentation, fetus 5 -O648XX9 Obstructed labor due to other malposition and malpresentation, other fetus -O649XX0 Obstructed labor due to malposition and malpresentation, unspecified, not applicable or unspecified -O649XX1 Obstructed labor due to malposition and malpresentation, unspecified, fetus 1 -O649XX2 Obstructed labor due to malposition and malpresentation, unspecified, fetus 2 -O649XX3 Obstructed labor due to malposition and malpresentation, unspecified, fetus 3 -O649XX4 Obstructed labor due to malposition and malpresentation, unspecified, fetus 4 -O649XX5 Obstructed labor due to malposition and malpresentation, unspecified, fetus 5 -O649XX9 Obstructed labor due to malposition and malpresentation, unspecified, other fetus -O650 Obstructed labor due to deformed pelvis -O651 Obstructed labor due to generally contracted pelvis -O652 Obstructed labor due to pelvic inlet contraction -O653 Obstructed labor due to pelvic outlet and mid-cavity contraction -O654 Obstructed labor due to fetopelvic disproportion, unspecified -O655 Obstructed labor due to abnormality of maternal pelvic organs -O658 Obstructed labor due to other maternal pelvic abnormalities -O659 Obstructed labor due to maternal pelvic abnormality, unspecified -O660 Obstructed labor due to shoulder dystocia -O661 Obstructed labor due to locked twins -O662 Obstructed labor due to unusually large fetus -O663 Obstructed labor due to other abnormalities of fetus -O6640 Failed trial of labor, unspecified -O6641 Failed attempted vaginal birth after previous cesarean delivery -O665 Attempted application of vacuum extractor and forceps -O666 Obstructed labor due to other multiple fetuses -O668 Other specified obstructed labor -O669 Obstructed labor, unspecified -O670 Intrapartum hemorrhage with coagulation defect -O678 Other intrapartum hemorrhage -O679 Intrapartum hemorrhage, unspecified -O68 Labor and delivery complicated by abnormality of fetal acid-base balance -O690XX0 Labor and delivery complicated by prolapse of cord, not applicable or unspecified -O690XX1 Labor and delivery complicated by prolapse of cord, fetus 1 -O690XX2 Labor and delivery complicated by prolapse of cord, fetus 2 -O690XX3 Labor and delivery complicated by prolapse of cord, fetus 3 -O690XX4 Labor and delivery complicated by prolapse of cord, fetus 4 -O690XX5 Labor and delivery complicated by prolapse of cord, fetus 5 -O690XX9 Labor and delivery complicated by prolapse of cord, other fetus -O691XX0 Labor and delivery complicated by cord around neck, with compression, not applicable or unspecified -O691XX1 Labor and delivery complicated by cord around neck, with compression, fetus 1 -O691XX2 Labor and delivery complicated by cord around neck, with compression, fetus 2 -O691XX3 Labor and delivery complicated by cord around neck, with compression, fetus 3 -O691XX4 Labor and delivery complicated by cord around neck, with compression, fetus 4 -O691XX5 Labor and delivery complicated by cord around neck, with compression, fetus 5 -O691XX9 Labor and delivery complicated by cord around neck, with compression, other fetus -O692XX0 Labor and delivery complicated by other cord entanglement, with compression, not applicable or unspecified -O692XX1 Labor and delivery complicated by other cord entanglement, with compression, fetus 1 -O692XX2 Labor and delivery complicated by other cord entanglement, with compression, fetus 2 -O692XX3 Labor and delivery complicated by other cord entanglement, with compression, fetus 3 -O692XX4 Labor and delivery complicated by other cord entanglement, with compression, fetus 4 -O692XX5 Labor and delivery complicated by other cord entanglement, with compression, fetus 5 -O692XX9 Labor and delivery complicated by other cord entanglement, with compression, other fetus -O693XX0 Labor and delivery complicated by short cord, not applicable or unspecified -O693XX1 Labor and delivery complicated by short cord, fetus 1 -O693XX2 Labor and delivery complicated by short cord, fetus 2 -O693XX3 Labor and delivery complicated by short cord, fetus 3 -O693XX4 Labor and delivery complicated by short cord, fetus 4 -O693XX5 Labor and delivery complicated by short cord, fetus 5 -O693XX9 Labor and delivery complicated by short cord, other fetus -O694XX0 Labor and delivery complicated by vasa previa, not applicable or unspecified -O694XX1 Labor and delivery complicated by vasa previa, fetus 1 -O694XX2 Labor and delivery complicated by vasa previa, fetus 2 -O694XX3 Labor and delivery complicated by vasa previa, fetus 3 -O694XX4 Labor and delivery complicated by vasa previa, fetus 4 -O694XX5 Labor and delivery complicated by vasa previa, fetus 5 -O694XX9 Labor and delivery complicated by vasa previa, other fetus -O695XX0 Labor and delivery complicated by vascular lesion of cord, not applicable or unspecified -O695XX1 Labor and delivery complicated by vascular lesion of cord, fetus 1 -O695XX2 Labor and delivery complicated by vascular lesion of cord, fetus 2 -O695XX3 Labor and delivery complicated by vascular lesion of cord, fetus 3 -O695XX4 Labor and delivery complicated by vascular lesion of cord, fetus 4 -O695XX5 Labor and delivery complicated by vascular lesion of cord, fetus 5 -O695XX9 Labor and delivery complicated by vascular lesion of cord, other fetus -O6981X0 Labor and delivery complicated by cord around neck, without compression, not applicable or unspecified -O6981X1 Labor and delivery complicated by cord around neck, without compression, fetus 1 -O6981X2 Labor and delivery complicated by cord around neck, without compression, fetus 2 -O6981X3 Labor and delivery complicated by cord around neck, without compression, fetus 3 -O6981X4 Labor and delivery complicated by cord around neck, without compression, fetus 4 -O6981X5 Labor and delivery complicated by cord around neck, without compression, fetus 5 -O6981X9 Labor and delivery complicated by cord around neck, without compression, other fetus -O6982X0 Labor and delivery complicated by other cord entanglement, without compression, not applicable or unspecified -O6982X1 Labor and delivery complicated by other cord entanglement, without compression, fetus 1 -O6982X2 Labor and delivery complicated by other cord entanglement, without compression, fetus 2 -O6982X3 Labor and delivery complicated by other cord entanglement, without compression, fetus 3 -O6982X4 Labor and delivery complicated by other cord entanglement, without compression, fetus 4 -O6982X5 Labor and delivery complicated by other cord entanglement, without compression, fetus 5 -O6982X9 Labor and delivery complicated by other cord entanglement, without compression, other fetus -O6989X0 Labor and delivery complicated by other cord complications, not applicable or unspecified -O6989X1 Labor and delivery complicated by other cord complications, fetus 1 -O6989X2 Labor and delivery complicated by other cord complications, fetus 2 -O6989X3 Labor and delivery complicated by other cord complications, fetus 3 -O6989X4 Labor and delivery complicated by other cord complications, fetus 4 -O6989X5 Labor and delivery complicated by other cord complications, fetus 5 -O6989X9 Labor and delivery complicated by other cord complications, other fetus -O699XX0 Labor and delivery complicated by cord complication, unspecified, not applicable or unspecified -O699XX1 Labor and delivery complicated by cord complication, unspecified, fetus 1 -O699XX2 Labor and delivery complicated by cord complication, unspecified, fetus 2 -O699XX3 Labor and delivery complicated by cord complication, unspecified, fetus 3 -O699XX4 Labor and delivery complicated by cord complication, unspecified, fetus 4 -O699XX5 Labor and delivery complicated by cord complication, unspecified, fetus 5 -O699XX9 Labor and delivery complicated by cord complication, unspecified, other fetus -O700 First degree perineal laceration during delivery -O701 Second degree perineal laceration during delivery -O7020 Third degree perineal laceration during delivery, unspecified -O7021 Third degree perineal laceration during delivery, IIIa -O7022 Third degree perineal laceration during delivery, IIIb -O7023 Third degree perineal laceration during delivery, IIIc -O703 Fourth degree perineal laceration during delivery -O704 Anal sphincter tear complicating delivery, not associated with third degree laceration -O709 Perineal laceration during delivery, unspecified -O7100 Rupture of uterus before onset of labor, unspecified trimester -O7102 Rupture of uterus before onset of labor, second trimester -O7103 Rupture of uterus before onset of labor, third trimester -O711 Rupture of uterus during labor -O712 Postpartum inversion of uterus -O713 Obstetric laceration of cervix -O714 Obstetric high vaginal laceration alone -O715 Other obstetric injury to pelvic organs -O716 Obstetric damage to pelvic joints and ligaments -O717 Obstetric hematoma of pelvis -O7181 Laceration of uterus, not elsewhere classified -O7182 Other specified trauma to perineum and vulva -O7189 Other specified obstetric trauma -O719 Obstetric trauma, unspecified -O720 Third-stage hemorrhage -O721 Other immediate postpartum hemorrhage -O722 Delayed and secondary postpartum hemorrhage -O723 Postpartum coagulation defects -O730 Retained placenta without hemorrhage -O731 Retained portions of placenta and membranes, without hemorrhage -O740 Aspiration pneumonitis due to anesthesia during labor and delivery -O741 Other pulmonary complications of anesthesia during labor and delivery -O742 Cardiac complications of anesthesia during labor and delivery -O743 Central nervous system complications of anesthesia during labor and delivery -O744 Toxic reaction to local anesthesia during labor and delivery -O745 Spinal and epidural anesthesia-induced headache during labor and delivery -O746 Other complications of spinal and epidural anesthesia during labor and delivery -O747 Failed or difficult intubation for anesthesia during labor and delivery -O748 Other complications of anesthesia during labor and delivery -O749 Complication of anesthesia during labor and delivery, unspecified -O750 Maternal distress during labor and delivery -O751 Shock during or following labor and delivery -O752 Pyrexia during labor, not elsewhere classified -O753 Other infection during labor -O754 Other complications of obstetric surgery and procedures -O755 Delayed delivery after artificial rupture of membranes -O7581 Maternal exhaustion complicating labor and delivery -O7582 Onset (spontaneous) of labor after 37 completed weeks of gestation but before 39 completed weeks gestation, with delivery by (planned) cesarean section -O7589 Other specified complications of labor and delivery -O759 Complication of labor and delivery, unspecified -O76 Abnormality in fetal heart rate and rhythm complicating labor and delivery -O770 Labor and delivery complicated by meconium in amniotic fluid -O771 Fetal stress in labor or delivery due to drug administration -O778 Labor and delivery complicated by other evidence of fetal stress -O779 Labor and delivery complicated by fetal stress, unspecified -O80 Encounter for full-term uncomplicated delivery -O82 Encounter for cesarean delivery without indication -O85 Puerperal sepsis -O860 Infection of obstetric surgical wound -O8611 Cervicitis following delivery -O8612 Endometritis following delivery -O8613 Vaginitis following delivery -O8619 Other infection of genital tract following delivery -O8620 Urinary tract infection following delivery, unspecified -O8621 Infection of kidney following delivery -O8622 Infection of bladder following delivery -O8629 Other urinary tract infection following delivery -O864 Pyrexia of unknown origin following delivery -O8681 Puerperal septic thrombophlebitis -O8689 Other specified puerperal infections -O870 Superficial thrombophlebitis in the puerperium -O871 Deep phlebothrombosis in the puerperium -O872 Hemorrhoids in the puerperium -O873 Cerebral venous thrombosis in the puerperium -O874 Varicose veins of lower extremity in the puerperium -O878 Other venous complications in the puerperium -O879 Venous complication in the puerperium, unspecified -O88011 Air embolism in pregnancy, first trimester -O88012 Air embolism in pregnancy, second trimester -O88013 Air embolism in pregnancy, third trimester -O88019 Air embolism in pregnancy, unspecified trimester -O8802 Air embolism in childbirth -O8803 Air embolism in the puerperium -O88111 Amniotic fluid embolism in pregnancy, first trimester -O88112 Amniotic fluid embolism in pregnancy, second trimester -O88113 Amniotic fluid embolism in pregnancy, third trimester -O88119 Amniotic fluid embolism in pregnancy, unspecified trimester -O8812 Amniotic fluid embolism in childbirth -O8813 Amniotic fluid embolism in the puerperium -O88211 Thromboembolism in pregnancy, first trimester -O88212 Thromboembolism in pregnancy, second trimester -O88213 Thromboembolism in pregnancy, third trimester -O88219 Thromboembolism in pregnancy, unspecified trimester -O8822 Thromboembolism in childbirth -O8823 Thromboembolism in the puerperium -O88311 Pyemic and septic embolism in pregnancy, first trimester -O88312 Pyemic and septic embolism in pregnancy, second trimester -O88313 Pyemic and septic embolism in pregnancy, third trimester -O88319 Pyemic and septic embolism in pregnancy, unspecified trimester -O8832 Pyemic and septic embolism in childbirth -O8833 Pyemic and septic embolism in the puerperium -O88811 Other embolism in pregnancy, first trimester -O88812 Other embolism in pregnancy, second trimester -O88813 Other embolism in pregnancy, third trimester -O88819 Other embolism in pregnancy, unspecified trimester -O8882 Other embolism in childbirth -O8883 Other embolism in the puerperium -O8901 Aspiration pneumonitis due to anesthesia during the puerperium -O8909 Other pulmonary complications of anesthesia during the puerperium -O891 Cardiac complications of anesthesia during the puerperium -O892 Central nervous system complications of anesthesia during the puerperium -O893 Toxic reaction to local anesthesia during the puerperium -O894 Spinal and epidural anesthesia-induced headache during the puerperium -O895 Other complications of spinal and epidural anesthesia during the puerperium -O896 Failed or difficult intubation for anesthesia during the puerperium -O898 Other complications of anesthesia during the puerperium -O899 Complication of anesthesia during the puerperium, unspecified -O900 Disruption of cesarean delivery wound -O901 Disruption of perineal obstetric wound -O902 Hematoma of obstetric wound -O903 Peripartum cardiomyopathy -O904 Postpartum acute kidney failure -O905 Postpartum thyroiditis -O906 Postpartum mood disturbance -O9081 Anemia of the puerperium -O9089 Other complications of the puerperium, not elsewhere classified -O909 Complication of the puerperium, unspecified -O91011 Infection of nipple associated with pregnancy, first trimester -O91012 Infection of nipple associated with pregnancy, second trimester -O91013 Infection of nipple associated with pregnancy, third trimester -O91019 Infection of nipple associated with pregnancy, unspecified trimester -O9102 Infection of nipple associated with the puerperium -O9103 Infection of nipple associated with lactation -O91111 Abscess of breast associated with pregnancy, first trimester -O91112 Abscess of breast associated with pregnancy, second trimester -O91113 Abscess of breast associated with pregnancy, third trimester -O91119 Abscess of breast associated with pregnancy, unspecified trimester -O9112 Abscess of breast associated with the puerperium -O9113 Abscess of breast associated with lactation -O91211 Nonpurulent mastitis associated with pregnancy, first trimester -O91212 Nonpurulent mastitis associated with pregnancy, second trimester -O91213 Nonpurulent mastitis associated with pregnancy, third trimester -O91219 Nonpurulent mastitis associated with pregnancy, unspecified trimester -O9122 Nonpurulent mastitis associated with the puerperium -O9123 Nonpurulent mastitis associated with lactation -O92011 Retracted nipple associated with pregnancy, first trimester -O92012 Retracted nipple associated with pregnancy, second trimester -O92013 Retracted nipple associated with pregnancy, third trimester -O92019 Retracted nipple associated with pregnancy, unspecified trimester -O9202 Retracted nipple associated with the puerperium -O9203 Retracted nipple associated with lactation -O92111 Cracked nipple associated with pregnancy, first trimester -O92112 Cracked nipple associated with pregnancy, second trimester -O92113 Cracked nipple associated with pregnancy, third trimester -O92119 Cracked nipple associated with pregnancy, unspecified trimester -O9212 Cracked nipple associated with the puerperium -O9213 Cracked nipple associated with lactation -O9220 Unspecified disorder of breast associated with pregnancy and the puerperium -O9229 Other disorders of breast associated with pregnancy and the puerperium -O923 Agalactia -O924 Hypogalactia -O925 Suppressed lactation -O926 Galactorrhea -O9270 Unspecified disorders of lactation -O9279 Other disorders of lactation -O94 Sequelae of complication of pregnancy, childbirth, and the puerperium -O98011 Tuberculosis complicating pregnancy, first trimester -O98012 Tuberculosis complicating pregnancy, second trimester -O98013 Tuberculosis complicating pregnancy, third trimester -O98019 Tuberculosis complicating pregnancy, unspecified trimester -O9802 Tuberculosis complicating childbirth -O9803 Tuberculosis complicating the puerperium -O98111 Syphilis complicating pregnancy, first trimester -O98112 Syphilis complicating pregnancy, second trimester -O98113 Syphilis complicating pregnancy, third trimester -O98119 Syphilis complicating pregnancy, unspecified trimester -O9812 Syphilis complicating childbirth -O9813 Syphilis complicating the puerperium -O98211 Gonorrhea complicating pregnancy, first trimester -O98212 Gonorrhea complicating pregnancy, second trimester -O98213 Gonorrhea complicating pregnancy, third trimester -O98219 Gonorrhea complicating pregnancy, unspecified trimester -O9822 Gonorrhea complicating childbirth -O9823 Gonorrhea complicating the puerperium -O98311 Other infections with a predominantly sexual mode of transmission complicating pregnancy, first trimester -O98312 Other infections with a predominantly sexual mode of transmission complicating pregnancy, second trimester -O98313 Other infections with a predominantly sexual mode of transmission complicating pregnancy, third trimester -O98319 Other infections with a predominantly sexual mode of transmission complicating pregnancy, unspecified trimester -O9832 Other infections with a predominantly sexual mode of transmission complicating childbirth -O9833 Other infections with a predominantly sexual mode of transmission complicating the puerperium -O98411 Viral hepatitis complicating pregnancy, first trimester -O98412 Viral hepatitis complicating pregnancy, second trimester -O98413 Viral hepatitis complicating pregnancy, third trimester -O98419 Viral hepatitis complicating pregnancy, unspecified trimester -O9842 Viral hepatitis complicating childbirth -O9843 Viral hepatitis complicating the puerperium -O98511 Other viral diseases complicating pregnancy, first trimester -O98512 Other viral diseases complicating pregnancy, second trimester -O98513 Other viral diseases complicating pregnancy, third trimester -O98519 Other viral diseases complicating pregnancy, unspecified trimester -O9852 Other viral diseases complicating childbirth -O9853 Other viral diseases complicating the puerperium -O98611 Protozoal diseases complicating pregnancy, first trimester -O98612 Protozoal diseases complicating pregnancy, second trimester -O98613 Protozoal diseases complicating pregnancy, third trimester -O98619 Protozoal diseases complicating pregnancy, unspecified trimester -O9862 Protozoal diseases complicating childbirth -O9863 Protozoal diseases complicating the puerperium -O98711 Human immunodeficiency virus [HIV] disease complicating pregnancy, first trimester -O98712 Human immunodeficiency virus [HIV] disease complicating pregnancy, second trimester -O98713 Human immunodeficiency virus [HIV] disease complicating pregnancy, third trimester -O98719 Human immunodeficiency virus [HIV] disease complicating pregnancy, unspecified trimester -O9872 Human immunodeficiency virus [HIV] disease complicating childbirth -O9873 Human immunodeficiency virus [HIV] disease complicating the puerperium -O98811 Other maternal infectious and parasitic diseases complicating pregnancy, first trimester -O98812 Other maternal infectious and parasitic diseases complicating pregnancy, second trimester -O98813 Other maternal infectious and parasitic diseases complicating pregnancy, third trimester -O98819 Other maternal infectious and parasitic diseases complicating pregnancy, unspecified trimester -O9882 Other maternal infectious and parasitic diseases complicating childbirth -O9883 Other maternal infectious and parasitic diseases complicating the puerperium -O98911 Unspecified maternal infectious and parasitic disease complicating pregnancy, first trimester -O98912 Unspecified maternal infectious and parasitic disease complicating pregnancy, second trimester -O98913 Unspecified maternal infectious and parasitic disease complicating pregnancy, third trimester -O98919 Unspecified maternal infectious and parasitic disease complicating pregnancy, unspecified trimester -O9892 Unspecified maternal infectious and parasitic disease complicating childbirth -O9893 Unspecified maternal infectious and parasitic disease complicating the puerperium -O99011 Anemia complicating pregnancy, first trimester -O99012 Anemia complicating pregnancy, second trimester -O99013 Anemia complicating pregnancy, third trimester -O99019 Anemia complicating pregnancy, unspecified trimester -O9902 Anemia complicating childbirth -O9903 Anemia complicating the puerperium -O99111 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating pregnancy, first trimester -O99112 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating pregnancy, second trimester -O99113 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating pregnancy, third trimester -O99119 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating pregnancy, unspecified trimester -O9912 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating childbirth -O9913 Other diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism complicating the puerperium -O99210 Obesity complicating pregnancy, unspecified trimester -O99211 Obesity complicating pregnancy, first trimester -O99212 Obesity complicating pregnancy, second trimester -O99213 Obesity complicating pregnancy, third trimester -O99214 Obesity complicating childbirth -O99215 Obesity complicating the puerperium -O99280 Endocrine, nutritional and metabolic diseases complicating pregnancy, unspecified trimester -O99281 Endocrine, nutritional and metabolic diseases complicating pregnancy, first trimester -O99282 Endocrine, nutritional and metabolic diseases complicating pregnancy, second trimester -O99283 Endocrine, nutritional and metabolic diseases complicating pregnancy, third trimester -O99284 Endocrine, nutritional and metabolic diseases complicating childbirth -O99285 Endocrine, nutritional and metabolic diseases complicating the puerperium -O99310 Alcohol use complicating pregnancy, unspecified trimester -O99311 Alcohol use complicating pregnancy, first trimester -O99312 Alcohol use complicating pregnancy, second trimester -O99313 Alcohol use complicating pregnancy, third trimester -O99314 Alcohol use complicating childbirth -O99315 Alcohol use complicating the puerperium -O99320 Drug use complicating pregnancy, unspecified trimester -O99321 Drug use complicating pregnancy, first trimester -O99322 Drug use complicating pregnancy, second trimester -O99323 Drug use complicating pregnancy, third trimester -O99324 Drug use complicating childbirth -O99325 Drug use complicating the puerperium -O99330 Smoking (tobacco) complicating pregnancy, unspecified trimester -O99331 Smoking (tobacco) complicating pregnancy, first trimester -O99332 Smoking (tobacco) complicating pregnancy, second trimester -O99333 Smoking (tobacco) complicating pregnancy, third trimester -O99334 Smoking (tobacco) complicating childbirth -O99335 Smoking (tobacco) complicating the puerperium -O99340 Other mental disorders complicating pregnancy, unspecified trimester -O99341 Other mental disorders complicating pregnancy, first trimester -O99342 Other mental disorders complicating pregnancy, second trimester -O99343 Other mental disorders complicating pregnancy, third trimester -O99344 Other mental disorders complicating childbirth -O99345 Other mental disorders complicating the puerperium -O99350 Diseases of the nervous system complicating pregnancy, unspecified trimester -O99351 Diseases of the nervous system complicating pregnancy, first trimester -O99352 Diseases of the nervous system complicating pregnancy, second trimester -O99353 Diseases of the nervous system complicating pregnancy, third trimester -O99354 Diseases of the nervous system complicating childbirth -O99355 Diseases of the nervous system complicating the puerperium -O99411 Diseases of the circulatory system complicating pregnancy, first trimester -O99412 Diseases of the circulatory system complicating pregnancy, second trimester -O99413 Diseases of the circulatory system complicating pregnancy, third trimester -O99419 Diseases of the circulatory system complicating pregnancy, unspecified trimester -O9942 Diseases of the circulatory system complicating childbirth -O9943 Diseases of the circulatory system complicating the puerperium -O99511 Diseases of the respiratory system complicating pregnancy, first trimester -O99512 Diseases of the respiratory system complicating pregnancy, second trimester -O99513 Diseases of the respiratory system complicating pregnancy, third trimester -O99519 Diseases of the respiratory system complicating pregnancy, unspecified trimester -O9952 Diseases of the respiratory system complicating childbirth -O9953 Diseases of the respiratory system complicating the puerperium -O99611 Diseases of the digestive system complicating pregnancy, first trimester -O99612 Diseases of the digestive system complicating pregnancy, second trimester -O99613 Diseases of the digestive system complicating pregnancy, third trimester -O99619 Diseases of the digestive system complicating pregnancy, unspecified trimester -O9962 Diseases of the digestive system complicating childbirth -O9963 Diseases of the digestive system complicating the puerperium -O99711 Diseases of the skin and subcutaneous tissue complicating pregnancy, first trimester -O99712 Diseases of the skin and subcutaneous tissue complicating pregnancy, second trimester -O99713 Diseases of the skin and subcutaneous tissue complicating pregnancy, third trimester -O99719 Diseases of the skin and subcutaneous tissue complicating pregnancy, unspecified trimester -O9972 Diseases of the skin and subcutaneous tissue complicating childbirth -O9973 Diseases of the skin and subcutaneous tissue complicating the puerperium -O99810 Abnormal glucose complicating pregnancy -O99814 Abnormal glucose complicating childbirth -O99815 Abnormal glucose complicating the puerperium -O99820 Streptococcus B carrier state complicating pregnancy -O99824 Streptococcus B carrier state complicating childbirth -O99825 Streptococcus B carrier state complicating the puerperium -O99830 Other infection carrier state complicating pregnancy -O99834 Other infection carrier state complicating childbirth -O99835 Other infection carrier state complicating the puerperium -O99840 Bariatric surgery status complicating pregnancy, unspecified trimester -O99841 Bariatric surgery status complicating pregnancy, first trimester -O99842 Bariatric surgery status complicating pregnancy, second trimester -O99843 Bariatric surgery status complicating pregnancy, third trimester -O99844 Bariatric surgery status complicating childbirth -O99845 Bariatric surgery status complicating the puerperium -O9989 Other specified diseases and conditions complicating pregnancy, childbirth and the puerperium -O9A111 Malignant neoplasm complicating pregnancy, first trimester -O9A112 Malignant neoplasm complicating pregnancy, second trimester -O9A113 Malignant neoplasm complicating pregnancy, third trimester -O9A119 Malignant neoplasm complicating pregnancy, unspecified trimester -O9A12 Malignant neoplasm complicating childbirth -O9A13 Malignant neoplasm complicating the puerperium -O9A211 Injury, poisoning and certain other consequences of external causes complicating pregnancy, first trimester -O9A212 Injury, poisoning and certain other consequences of external causes complicating pregnancy, second trimester -O9A213 Injury, poisoning and certain other consequences of external causes complicating pregnancy, third trimester -O9A219 Injury, poisoning and certain other consequences of external causes complicating pregnancy, unspecified trimester -O9A22 Injury, poisoning and certain other consequences of external causes complicating childbirth -O9A23 Injury, poisoning and certain other consequences of external causes complicating the puerperium -O9A311 Physical abuse complicating pregnancy, first trimester -O9A312 Physical abuse complicating pregnancy, second trimester -O9A313 Physical abuse complicating pregnancy, third trimester -O9A319 Physical abuse complicating pregnancy, unspecified trimester -O9A32 Physical abuse complicating childbirth -O9A33 Physical abuse complicating the puerperium -O9A411 Sexual abuse complicating pregnancy, first trimester -O9A412 Sexual abuse complicating pregnancy, second trimester -O9A413 Sexual abuse complicating pregnancy, third trimester -O9A419 Sexual abuse complicating pregnancy, unspecified trimester -O9A42 Sexual abuse complicating childbirth -O9A43 Sexual abuse complicating the puerperium -O9A511 Psychological abuse complicating pregnancy, first trimester -O9A512 Psychological abuse complicating pregnancy, second trimester -O9A513 Psychological abuse complicating pregnancy, third trimester -O9A519 Psychological abuse complicating pregnancy, unspecified trimester -O9A52 Psychological abuse complicating childbirth -O9A53 Psychological abuse complicating the puerperium -P000 Newborn affected by maternal hypertensive disorders -P001 Newborn affected by maternal renal and urinary tract diseases -P002 Newborn affected by maternal infectious and parasitic diseases -P003 Newborn affected by other maternal circulatory and respiratory diseases -P004 Newborn affected by maternal nutritional disorders -P005 Newborn affected by maternal injury -P006 Newborn affected by surgical procedure on mother -P007 Newborn affected by other medical procedures on mother, not elsewhere classified -P0081 Newborn affected by periodontal disease in mother -P0089 Newborn affected by other maternal conditions -P009 Newborn affected by unspecified maternal condition -P010 Newborn affected by incompetent cervix -P011 Newborn affected by premature rupture of membranes -P012 Newborn affected by oligohydramnios -P013 Newborn affected by polyhydramnios -P014 Newborn affected by ectopic pregnancy -P015 Newborn affected by multiple pregnancy -P016 Newborn affected by maternal death -P017 Newborn affected by malpresentation before labor -P018 Newborn affected by other maternal complications of pregnancy -P019 Newborn affected by maternal complication of pregnancy, unspecified -P020 Newborn affected by placenta previa -P021 Newborn affected by other forms of placental separation and hemorrhage -P0220 Newborn affected by unspecified morphological and functional abnormalities of placenta -P0229 Newborn affected by other morphological and functional abnormalities of placenta -P023 Newborn affected by placental transfusion syndromes -P024 Newborn affected by prolapsed cord -P025 Newborn affected by other compression of umbilical cord -P0260 Newborn affected by unspecified conditions of umbilical cord -P0269 Newborn affected by other conditions of umbilical cord -P027 Newborn affected by chorioamnionitis -P028 Newborn affected by other abnormalities of membranes -P029 Newborn affected by abnormality of membranes, unspecified -P030 Newborn affected by breech delivery and extraction -P031 Newborn affected by other malpresentation, malposition and disproportion during labor and delivery -P032 Newborn affected by forceps delivery -P033 Newborn affected by delivery by vacuum extractor [ventouse] -P034 Newborn affected by Cesarean delivery -P035 Newborn affected by precipitate delivery -P036 Newborn affected by abnormal uterine contractions -P03810 Newborn affected by abnormality in fetal (intrauterine) heart rate or rhythm before the onset of labor -P03811 Newborn affected by abnormality in fetal (intrauterine) heart rate or rhythm during labor -P03819 Newborn affected by abnormality in fetal (intrauterine) heart rate or rhythm, unspecified as to time of onset -P0382 Meconium passage during delivery -P0389 Newborn affected by other specified complications of labor and delivery -P039 Newborn affected by complication of labor and delivery, unspecified -P040 Newborn affected by maternal anesthesia and analgesia in pregnancy, labor and delivery -P041 Newborn affected by other maternal medication -P042 Newborn affected by maternal use of tobacco -P043 Newborn affected by maternal use of alcohol -P0441 Newborn affected by maternal use of cocaine -P0449 Newborn affected by maternal use of other drugs of addiction -P045 Newborn affected by maternal use of nutritional chemical substances -P046 Newborn affected by maternal exposure to environmental chemical substances -P048 Newborn affected by other maternal noxious substances -P049 Newborn affected by maternal noxious substance, unspecified -P0500 Newborn light for gestational age, unspecified weight -P0501 Newborn light for gestational age, less than 500 grams -P0502 Newborn light for gestational age, 500-749 grams -P0503 Newborn light for gestational age, 750-999 grams -P0504 Newborn light for gestational age, 1000-1249 grams -P0505 Newborn light for gestational age, 1250-1499 grams -P0506 Newborn light for gestational age, 1500-1749 grams -P0507 Newborn light for gestational age, 1750-1999 grams -P0508 Newborn light for gestational age, 2000-2499 grams -P0509 Newborn light for gestational age, 2500 grams and over -P0510 Newborn small for gestational age, unspecified weight -P0511 Newborn small for gestational age, less than 500 grams -P0512 Newborn small for gestational age, 500-749 grams -P0513 Newborn small for gestational age, 750-999 grams -P0514 Newborn small for gestational age, 1000-1249 grams -P0515 Newborn small for gestational age, 1250-1499 grams -P0516 Newborn small for gestational age, 1500-1749 grams -P0517 Newborn small for gestational age, 1750-1999 grams -P0518 Newborn small for gestational age, 2000-2499 grams -P0519 Newborn small for gestational age, other -P052 Newborn affected by fetal (intrauterine) malnutrition not light or small for gestational age -P059 Newborn affected by slow intrauterine growth, unspecified -P0700 Extremely low birth weight newborn, unspecified weight -P0701 Extremely low birth weight newborn, less than 500 grams -P0702 Extremely low birth weight newborn, 500-749 grams -P0703 Extremely low birth weight newborn, 750-999 grams -P0710 Other low birth weight newborn, unspecified weight -P0714 Other low birth weight newborn, 1000-1249 grams -P0715 Other low birth weight newborn, 1250-1499 grams -P0716 Other low birth weight newborn, 1500-1749 grams -P0717 Other low birth weight newborn, 1750-1999 grams -P0718 Other low birth weight newborn, 2000-2499 grams -P0720 Extreme immaturity of newborn, unspecified weeks of gestation -P0721 Extreme immaturity of newborn, gestational age less than 23 completed weeks -P0722 Extreme immaturity of newborn, gestational age 23 completed weeks -P0723 Extreme immaturity of newborn, gestational age 24 completed weeks -P0724 Extreme immaturity of newborn, gestational age 25 completed weeks -P0725 Extreme immaturity of newborn, gestational age 26 completed weeks -P0726 Extreme immaturity of newborn, gestational age 27 completed weeks -P0730 Preterm newborn, unspecified weeks of gestation -P0731 Preterm newborn, gestational age 28 completed weeks -P0732 Preterm newborn, gestational age 29 completed weeks -P0733 Preterm newborn, gestational age 30 completed weeks -P0734 Preterm newborn, gestational age 31 completed weeks -P0735 Preterm newborn, gestational age 32 completed weeks -P0736 Preterm newborn, gestational age 33 completed weeks -P0737 Preterm newborn, gestational age 34 completed weeks -P0738 Preterm newborn, gestational age 35 completed weeks -P0739 Preterm newborn, gestational age 36 completed weeks -P080 Exceptionally large newborn baby -P081 Other heavy for gestational age newborn -P0821 Post-term newborn -P0822 Prolonged gestation of newborn -P09 Abnormal findings on neonatal screening -P100 Subdural hemorrhage due to birth injury -P101 Cerebral hemorrhage due to birth injury -P102 Intraventricular hemorrhage due to birth injury -P103 Subarachnoid hemorrhage due to birth injury -P104 Tentorial tear due to birth injury -P108 Other intracranial lacerations and hemorrhages due to birth injury -P109 Unspecified intracranial laceration and hemorrhage due to birth injury -P110 Cerebral edema due to birth injury -P111 Other specified brain damage due to birth injury -P112 Unspecified brain damage due to birth injury -P113 Birth injury to facial nerve -P114 Birth injury to other cranial nerves -P115 Birth injury to spine and spinal cord -P119 Birth injury to central nervous system, unspecified -P120 Cephalhematoma due to birth injury -P121 Chignon (from vacuum extraction) due to birth injury -P122 Epicranial subaponeurotic hemorrhage due to birth injury -P123 Bruising of scalp due to birth injury -P124 Injury of scalp of newborn due to monitoring equipment -P1281 Caput succedaneum -P1289 Other birth injuries to scalp -P129 Birth injury to scalp, unspecified -P130 Fracture of skull due to birth injury -P131 Other birth injuries to skull -P132 Birth injury to femur -P133 Birth injury to other long bones -P134 Fracture of clavicle due to birth injury -P138 Birth injuries to other parts of skeleton -P139 Birth injury to skeleton, unspecified -P140 Erb's paralysis due to birth injury -P141 Klumpke's paralysis due to birth injury -P142 Phrenic nerve paralysis due to birth injury -P143 Other brachial plexus birth injuries -P148 Birth injuries to other parts of peripheral nervous system -P149 Birth injury to peripheral nervous system, unspecified -P150 Birth injury to liver -P151 Birth injury to spleen -P152 Sternomastoid injury due to birth injury -P153 Birth injury to eye -P154 Birth injury to face -P155 Birth injury to external genitalia -P156 Subcutaneous fat necrosis due to birth injury -P158 Other specified birth injuries -P159 Birth injury, unspecified -P190 Metabolic acidemia in newborn first noted before onset of labor -P191 Metabolic acidemia in newborn first noted during labor -P192 Metabolic acidemia noted at birth -P199 Metabolic acidemia, unspecified -P220 Respiratory distress syndrome of newborn -P221 Transient tachypnea of newborn -P228 Other respiratory distress of newborn -P229 Respiratory distress of newborn, unspecified -P230 Congenital pneumonia due to viral agent -P231 Congenital pneumonia due to Chlamydia -P232 Congenital pneumonia due to staphylococcus -P233 Congenital pneumonia due to streptococcus, group B -P234 Congenital pneumonia due to Escherichia coli -P235 Congenital pneumonia due to Pseudomonas -P236 Congenital pneumonia due to other bacterial agents -P238 Congenital pneumonia due to other organisms -P239 Congenital pneumonia, unspecified -P2400 Meconium aspiration without respiratory symptoms -P2401 Meconium aspiration with respiratory symptoms -P2410 Neonatal aspiration of (clear) amniotic fluid and mucus without respiratory symptoms -P2411 Neonatal aspiration of (clear) amniotic fluid and mucus with respiratory symptoms -P2420 Neonatal aspiration of blood without respiratory symptoms -P2421 Neonatal aspiration of blood with respiratory symptoms -P2430 Neonatal aspiration of milk and regurgitated food without respiratory symptoms -P2431 Neonatal aspiration of milk and regurgitated food with respiratory symptoms -P2480 Other neonatal aspiration without respiratory symptoms -P2481 Other neonatal aspiration with respiratory symptoms -P249 Neonatal aspiration, unspecified -P250 Interstitial emphysema originating in the perinatal period -P251 Pneumothorax originating in the perinatal period -P252 Pneumomediastinum originating in the perinatal period -P253 Pneumopericardium originating in the perinatal period -P258 Other conditions related to interstitial emphysema originating in the perinatal period -P260 Tracheobronchial hemorrhage originating in the perinatal period -P261 Massive pulmonary hemorrhage originating in the perinatal period -P268 Other pulmonary hemorrhages originating in the perinatal period -P269 Unspecified pulmonary hemorrhage originating in the perinatal period -P270 Wilson-Mikity syndrome -P271 Bronchopulmonary dysplasia originating in the perinatal period -P278 Other chronic respiratory diseases originating in the perinatal period -P279 Unspecified chronic respiratory disease originating in the perinatal period -P280 Primary atelectasis of newborn -P2810 Unspecified atelectasis of newborn -P2811 Resorption atelectasis without respiratory distress syndrome -P2819 Other atelectasis of newborn -P282 Cyanotic attacks of newborn -P283 Primary sleep apnea of newborn -P284 Other apnea of newborn -P285 Respiratory failure of newborn -P2881 Respiratory arrest of newborn -P2889 Other specified respiratory conditions of newborn -P289 Respiratory condition of newborn, unspecified -P290 Neonatal cardiac failure -P2911 Neonatal tachycardia -P2912 Neonatal bradycardia -P292 Neonatal hypertension -P293 Persistent fetal circulation -P294 Transient myocardial ischemia in newborn -P2981 Cardiac arrest of newborn -P2989 Other cardiovascular disorders originating in the perinatal period -P299 Cardiovascular disorder originating in the perinatal period, unspecified -P350 Congenital rubella syndrome -P351 Congenital cytomegalovirus infection -P352 Congenital herpesviral [herpes simplex] infection -P353 Congenital viral hepatitis -P358 Other congenital viral diseases -P359 Congenital viral disease, unspecified -P360 Sepsis of newborn due to streptococcus, group B -P3610 Sepsis of newborn due to unspecified streptococci -P3619 Sepsis of newborn due to other streptococci -P362 Sepsis of newborn due to Staphylococcus aureus -P3630 Sepsis of newborn due to unspecified staphylococci -P3639 Sepsis of newborn due to other staphylococci -P364 Sepsis of newborn due to Escherichia coli -P365 Sepsis of newborn due to anaerobes -P368 Other bacterial sepsis of newborn -P369 Bacterial sepsis of newborn, unspecified -P370 Congenital tuberculosis -P371 Congenital toxoplasmosis -P372 Neonatal (disseminated) listeriosis -P373 Congenital falciparum malaria -P374 Other congenital malaria -P375 Neonatal candidiasis -P378 Other specified congenital infectious and parasitic diseases -P379 Congenital infectious or parasitic disease, unspecified -P381 Omphalitis with mild hemorrhage -P389 Omphalitis without hemorrhage -P390 Neonatal infective mastitis -P391 Neonatal conjunctivitis and dacryocystitis -P392 Intra-amniotic infection affecting newborn, not elsewhere classified -P393 Neonatal urinary tract infection -P394 Neonatal skin infection -P398 Other specified infections specific to the perinatal period -P399 Infection specific to the perinatal period, unspecified -P500 Newborn affected by intrauterine (fetal) blood loss from vasa previa -P501 Newborn affected by intrauterine (fetal) blood loss from ruptured cord -P502 Newborn affected by intrauterine (fetal) blood loss from placenta -P503 Newborn affected by hemorrhage into co-twin -P504 Newborn affected by hemorrhage into maternal circulation -P505 Newborn affected by intrauterine (fetal) blood loss from cut end of co-twin's cord -P508 Newborn affected by other intrauterine (fetal) blood loss -P509 Newborn affected by intrauterine (fetal) blood loss, unspecified -P510 Massive umbilical hemorrhage of newborn -P518 Other umbilical hemorrhages of newborn -P519 Umbilical hemorrhage of newborn, unspecified -P520 Intraventricular (nontraumatic) hemorrhage, grade 1, of newborn -P521 Intraventricular (nontraumatic) hemorrhage, grade 2, of newborn -P5221 Intraventricular (nontraumatic) hemorrhage, grade 3, of newborn -P5222 Intraventricular (nontraumatic) hemorrhage, grade 4, of newborn -P523 Unspecified intraventricular (nontraumatic) hemorrhage of newborn -P524 Intracerebral (nontraumatic) hemorrhage of newborn -P525 Subarachnoid (nontraumatic) hemorrhage of newborn -P526 Cerebellar (nontraumatic) and posterior fossa hemorrhage of newborn -P528 Other intracranial (nontraumatic) hemorrhages of newborn -P529 Intracranial (nontraumatic) hemorrhage of newborn, unspecified -P53 Hemorrhagic disease of newborn -P540 Neonatal hematemesis -P541 Neonatal melena -P542 Neonatal rectal hemorrhage -P543 Other neonatal gastrointestinal hemorrhage -P544 Neonatal adrenal hemorrhage -P545 Neonatal cutaneous hemorrhage -P546 Neonatal vaginal hemorrhage -P548 Other specified neonatal hemorrhages -P549 Neonatal hemorrhage, unspecified -P550 Rh isoimmunization of newborn -P551 ABO isoimmunization of newborn -P558 Other hemolytic diseases of newborn -P559 Hemolytic disease of newborn, unspecified -P560 Hydrops fetalis due to isoimmunization -P5690 Hydrops fetalis due to unspecified hemolytic disease -P5699 Hydrops fetalis due to other hemolytic disease -P570 Kernicterus due to isoimmunization -P578 Other specified kernicterus -P579 Kernicterus, unspecified -P580 Neonatal jaundice due to bruising -P581 Neonatal jaundice due to bleeding -P582 Neonatal jaundice due to infection -P583 Neonatal jaundice due to polycythemia -P5841 Neonatal jaundice due to drugs or toxins transmitted from mother -P5842 Neonatal jaundice due to drugs or toxins given to newborn -P585 Neonatal jaundice due to swallowed maternal blood -P588 Neonatal jaundice due to other specified excessive hemolysis -P589 Neonatal jaundice due to excessive hemolysis, unspecified -P590 Neonatal jaundice associated with preterm delivery -P591 Inspissated bile syndrome -P5920 Neonatal jaundice from unspecified hepatocellular damage -P5929 Neonatal jaundice from other hepatocellular damage -P593 Neonatal jaundice from breast milk inhibitor -P598 Neonatal jaundice from other specified causes -P599 Neonatal jaundice, unspecified -P60 Disseminated intravascular coagulation of newborn -P610 Transient neonatal thrombocytopenia -P611 Polycythemia neonatorum -P612 Anemia of prematurity -P613 Congenital anemia from fetal blood loss -P614 Other congenital anemias, not elsewhere classified -P615 Transient neonatal neutropenia -P616 Other transient neonatal disorders of coagulation -P618 Other specified perinatal hematological disorders -P619 Perinatal hematological disorder, unspecified -P700 Syndrome of infant of mother with gestational diabetes -P701 Syndrome of infant of a diabetic mother -P702 Neonatal diabetes mellitus -P703 Iatrogenic neonatal hypoglycemia -P704 Other neonatal hypoglycemia -P708 Other transitory disorders of carbohydrate metabolism of newborn -P709 Transitory disorder of carbohydrate metabolism of newborn, unspecified -P710 Cow's milk hypocalcemia in newborn -P711 Other neonatal hypocalcemia -P712 Neonatal hypomagnesemia -P713 Neonatal tetany without calcium or magnesium deficiency -P714 Transitory neonatal hypoparathyroidism -P718 Other transitory neonatal disorders of calcium and magnesium metabolism -P719 Transitory neonatal disorder of calcium and magnesium metabolism, unspecified -P720 Neonatal goiter, not elsewhere classified -P721 Transitory neonatal hyperthyroidism -P722 Other transitory neonatal disorders of thyroid function, not elsewhere classified -P728 Other specified transitory neonatal endocrine disorders -P729 Transitory neonatal endocrine disorder, unspecified -P740 Late metabolic acidosis of newborn -P741 Dehydration of newborn -P742 Disturbances of sodium balance of newborn -P743 Disturbances of potassium balance of newborn -P744 Other transitory electrolyte disturbances of newborn -P745 Transitory tyrosinemia of newborn -P746 Transitory hyperammonemia of newborn -P748 Other transitory metabolic disturbances of newborn -P749 Transitory metabolic disturbance of newborn, unspecified -P760 Meconium plug syndrome -P761 Transitory ileus of newborn -P762 Intestinal obstruction due to inspissated milk -P768 Other specified intestinal obstruction of newborn -P769 Intestinal obstruction of newborn, unspecified -P771 Stage 1 necrotizing enterocolitis in newborn -P772 Stage 2 necrotizing enterocolitis in newborn -P773 Stage 3 necrotizing enterocolitis in newborn -P779 Necrotizing enterocolitis in newborn, unspecified -P780 Perinatal intestinal perforation -P781 Other neonatal peritonitis -P782 Neonatal hematemesis and melena due to swallowed maternal blood -P783 Noninfective neonatal diarrhea -P7881 Congenital cirrhosis (of liver) -P7882 Peptic ulcer of newborn -P7883 Newborn esophageal reflux -P7889 Other specified perinatal digestive system disorders -P789 Perinatal digestive system disorder, unspecified -P800 Cold injury syndrome -P808 Other hypothermia of newborn -P809 Hypothermia of newborn, unspecified -P810 Environmental hyperthermia of newborn -P818 Other specified disturbances of temperature regulation of newborn -P819 Disturbance of temperature regulation of newborn, unspecified -P830 Sclerema neonatorum -P831 Neonatal erythema toxicum -P832 Hydrops fetalis not due to hemolytic disease -P8330 Unspecified edema specific to newborn -P8339 Other edema specific to newborn -P834 Breast engorgement of newborn -P835 Congenital hydrocele -P836 Umbilical polyp of newborn -P838 Other specified conditions of integument specific to newborn -P839 Condition of the integument specific to newborn, unspecified -P84 Other problems with newborn -P90 Convulsions of newborn -P910 Neonatal cerebral ischemia -P911 Acquired periventricular cysts of newborn -P912 Neonatal cerebral leukomalacia -P913 Neonatal cerebral irritability -P914 Neonatal cerebral depression -P915 Neonatal coma -P9160 Hypoxic ischemic encephalopathy [HIE], unspecified -P9161 Mild hypoxic ischemic encephalopathy [HIE] -P9162 Moderate hypoxic ischemic encephalopathy [HIE] -P9163 Severe hypoxic ischemic encephalopathy [HIE] -P918 Other specified disturbances of cerebral status of newborn -P919 Disturbance of cerebral status of newborn, unspecified -P9201 Bilious vomiting of newborn -P9209 Other vomiting of newborn -P921 Regurgitation and rumination of newborn -P922 Slow feeding of newborn -P923 Underfeeding of newborn -P924 Overfeeding of newborn -P925 Neonatal difficulty in feeding at breast -P926 Failure to thrive in newborn -P928 Other feeding problems of newborn -P929 Feeding problem of newborn, unspecified -P930 Grey baby syndrome -P938 Other reactions and intoxications due to drugs administered to newborn -P940 Transient neonatal myasthenia gravis -P941 Congenital hypertonia -P942 Congenital hypotonia -P948 Other disorders of muscle tone of newborn -P949 Disorder of muscle tone of newborn, unspecified -P95 Stillbirth -P960 Congenital renal failure -P961 Neonatal withdrawal symptoms from maternal use of drugs of addiction -P962 Withdrawal symptoms from therapeutic use of drugs in newborn -P963 Wide cranial sutures of newborn -P965 Complication to newborn due to (fetal) intrauterine procedure -P9681 Exposure to (parental) (environmental) tobacco smoke in the perinatal period -P9682 Delayed separation of umbilical cord -P9683 Meconium staining -P9689 Other specified conditions originating in the perinatal period -P969 Condition originating in the perinatal period, unspecified -Q000 Anencephaly -Q001 Craniorachischisis -Q002 Iniencephaly -Q010 Frontal encephalocele -Q011 Nasofrontal encephalocele -Q012 Occipital encephalocele -Q018 Encephalocele of other sites -Q019 Encephalocele, unspecified -Q02 Microcephaly -Q030 Malformations of aqueduct of Sylvius -Q031 Atresia of foramina of Magendie and Luschka -Q038 Other congenital hydrocephalus -Q039 Congenital hydrocephalus, unspecified -Q040 Congenital malformations of corpus callosum -Q041 Arhinencephaly -Q042 Holoprosencephaly -Q043 Other reduction deformities of brain -Q044 Septo-optic dysplasia of brain -Q045 Megalencephaly -Q046 Congenital cerebral cysts -Q048 Other specified congenital malformations of brain -Q049 Congenital malformation of brain, unspecified -Q050 Cervical spina bifida with hydrocephalus -Q051 Thoracic spina bifida with hydrocephalus -Q052 Lumbar spina bifida with hydrocephalus -Q053 Sacral spina bifida with hydrocephalus -Q054 Unspecified spina bifida with hydrocephalus -Q055 Cervical spina bifida without hydrocephalus -Q056 Thoracic spina bifida without hydrocephalus -Q057 Lumbar spina bifida without hydrocephalus -Q058 Sacral spina bifida without hydrocephalus -Q059 Spina bifida, unspecified -Q060 Amyelia -Q061 Hypoplasia and dysplasia of spinal cord -Q062 Diastematomyelia -Q063 Other congenital cauda equina malformations -Q064 Hydromyelia -Q068 Other specified congenital malformations of spinal cord -Q069 Congenital malformation of spinal cord, unspecified -Q0700 Arnold-Chiari syndrome without spina bifida or hydrocephalus -Q0701 Arnold-Chiari syndrome with spina bifida -Q0702 Arnold-Chiari syndrome with hydrocephalus -Q0703 Arnold-Chiari syndrome with spina bifida and hydrocephalus -Q078 Other specified congenital malformations of nervous system -Q079 Congenital malformation of nervous system, unspecified -Q100 Congenital ptosis -Q101 Congenital ectropion -Q102 Congenital entropion -Q103 Other congenital malformations of eyelid -Q104 Absence and agenesis of lacrimal apparatus -Q105 Congenital stenosis and stricture of lacrimal duct -Q106 Other congenital malformations of lacrimal apparatus -Q107 Congenital malformation of orbit -Q110 Cystic eyeball -Q111 Other anophthalmos -Q112 Microphthalmos -Q113 Macrophthalmos -Q120 Congenital cataract -Q121 Congenital displaced lens -Q122 Coloboma of lens -Q123 Congenital aphakia -Q124 Spherophakia -Q128 Other congenital lens malformations -Q129 Congenital lens malformation, unspecified -Q130 Coloboma of iris -Q131 Absence of iris -Q132 Other congenital malformations of iris -Q133 Congenital corneal opacity -Q134 Other congenital corneal malformations -Q135 Blue sclera -Q1381 Rieger's anomaly -Q1389 Other congenital malformations of anterior segment of eye -Q139 Congenital malformation of anterior segment of eye, unspecified -Q140 Congenital malformation of vitreous humor -Q141 Congenital malformation of retina -Q142 Congenital malformation of optic disc -Q143 Congenital malformation of choroid -Q148 Other congenital malformations of posterior segment of eye -Q149 Congenital malformation of posterior segment of eye, unspecified -Q150 Congenital glaucoma -Q158 Other specified congenital malformations of eye -Q159 Congenital malformation of eye, unspecified -Q160 Congenital absence of (ear) auricle -Q161 Congenital absence, atresia and stricture of auditory canal (external) -Q162 Absence of eustachian tube -Q163 Congenital malformation of ear ossicles -Q164 Other congenital malformations of middle ear -Q165 Congenital malformation of inner ear -Q169 Congenital malformation of ear causing impairment of hearing, unspecified -Q170 Accessory auricle -Q171 Macrotia -Q172 Microtia -Q173 Other misshapen ear -Q174 Misplaced ear -Q175 Prominent ear -Q178 Other specified congenital malformations of ear -Q179 Congenital malformation of ear, unspecified -Q180 Sinus, fistula and cyst of branchial cleft -Q181 Preauricular sinus and cyst -Q182 Other branchial cleft malformations -Q183 Webbing of neck -Q184 Macrostomia -Q185 Microstomia -Q186 Macrocheilia -Q187 Microcheilia -Q188 Other specified congenital malformations of face and neck -Q189 Congenital malformation of face and neck, unspecified -Q200 Common arterial trunk -Q201 Double outlet right ventricle -Q202 Double outlet left ventricle -Q203 Discordant ventriculoarterial connection -Q204 Double inlet ventricle -Q205 Discordant atrioventricular connection -Q206 Isomerism of atrial appendages -Q208 Other congenital malformations of cardiac chambers and connections -Q209 Congenital malformation of cardiac chambers and connections, unspecified -Q210 Ventricular septal defect -Q211 Atrial septal defect -Q212 Atrioventricular septal defect -Q213 Tetralogy of Fallot -Q214 Aortopulmonary septal defect -Q218 Other congenital malformations of cardiac septa -Q219 Congenital malformation of cardiac septum, unspecified -Q220 Pulmonary valve atresia -Q221 Congenital pulmonary valve stenosis -Q222 Congenital pulmonary valve insufficiency -Q223 Other congenital malformations of pulmonary valve -Q224 Congenital tricuspid stenosis -Q225 Ebstein's anomaly -Q226 Hypoplastic right heart syndrome -Q228 Other congenital malformations of tricuspid valve -Q229 Congenital malformation of tricuspid valve, unspecified -Q230 Congenital stenosis of aortic valve -Q231 Congenital insufficiency of aortic valve -Q232 Congenital mitral stenosis -Q233 Congenital mitral insufficiency -Q234 Hypoplastic left heart syndrome -Q238 Other congenital malformations of aortic and mitral valves -Q239 Congenital malformation of aortic and mitral valves, unspecified -Q240 Dextrocardia -Q241 Levocardia -Q242 Cor triatriatum -Q243 Pulmonary infundibular stenosis -Q244 Congenital subaortic stenosis -Q245 Malformation of coronary vessels -Q246 Congenital heart block -Q248 Other specified congenital malformations of heart -Q249 Congenital malformation of heart, unspecified -Q250 Patent ductus arteriosus -Q251 Coarctation of aorta -Q2521 Interruption of aortic arch -Q2529 Other atresia of aorta -Q253 Supravalvular aortic stenosis -Q2540 Congenital malformation of aorta unspecified -Q2541 Absence and aplasia of aorta -Q2542 Hypoplasia of aorta -Q2543 Congenital aneurysm of aorta -Q2544 Congenital dilation of aorta -Q2545 Double aortic arch -Q2546 Tortuous aortic arch -Q2547 Right aortic arch -Q2548 Anomalous origin of subclavian artery -Q2549 Other congenital malformations of aorta -Q255 Atresia of pulmonary artery -Q256 Stenosis of pulmonary artery -Q2571 Coarctation of pulmonary artery -Q2572 Congenital pulmonary arteriovenous malformation -Q2579 Other congenital malformations of pulmonary artery -Q258 Other congenital malformations of other great arteries -Q259 Congenital malformation of great arteries, unspecified -Q260 Congenital stenosis of vena cava -Q261 Persistent left superior vena cava -Q262 Total anomalous pulmonary venous connection -Q263 Partial anomalous pulmonary venous connection -Q264 Anomalous pulmonary venous connection, unspecified -Q265 Anomalous portal venous connection -Q266 Portal vein-hepatic artery fistula -Q268 Other congenital malformations of great veins -Q269 Congenital malformation of great vein, unspecified -Q270 Congenital absence and hypoplasia of umbilical artery -Q271 Congenital renal artery stenosis -Q272 Other congenital malformations of renal artery -Q2730 Arteriovenous malformation, site unspecified -Q2731 Arteriovenous malformation of vessel of upper limb -Q2732 Arteriovenous malformation of vessel of lower limb -Q2733 Arteriovenous malformation of digestive system vessel -Q2734 Arteriovenous malformation of renal vessel -Q2739 Arteriovenous malformation, other site -Q274 Congenital phlebectasia -Q278 Other specified congenital malformations of peripheral vascular system -Q279 Congenital malformation of peripheral vascular system, unspecified -Q280 Arteriovenous malformation of precerebral vessels -Q281 Other malformations of precerebral vessels -Q282 Arteriovenous malformation of cerebral vessels -Q283 Other malformations of cerebral vessels -Q288 Other specified congenital malformations of circulatory system -Q289 Congenital malformation of circulatory system, unspecified -Q300 Choanal atresia -Q301 Agenesis and underdevelopment of nose -Q302 Fissured, notched and cleft nose -Q303 Congenital perforated nasal septum -Q308 Other congenital malformations of nose -Q309 Congenital malformation of nose, unspecified -Q310 Web of larynx -Q311 Congenital subglottic stenosis -Q312 Laryngeal hypoplasia -Q313 Laryngocele -Q315 Congenital laryngomalacia -Q318 Other congenital malformations of larynx -Q319 Congenital malformation of larynx, unspecified -Q320 Congenital tracheomalacia -Q321 Other congenital malformations of trachea -Q322 Congenital bronchomalacia -Q323 Congenital stenosis of bronchus -Q324 Other congenital malformations of bronchus -Q330 Congenital cystic lung -Q331 Accessory lobe of lung -Q332 Sequestration of lung -Q333 Agenesis of lung -Q334 Congenital bronchiectasis -Q335 Ectopic tissue in lung -Q336 Congenital hypoplasia and dysplasia of lung -Q338 Other congenital malformations of lung -Q339 Congenital malformation of lung, unspecified -Q340 Anomaly of pleura -Q341 Congenital cyst of mediastinum -Q348 Other specified congenital malformations of respiratory system -Q349 Congenital malformation of respiratory system, unspecified -Q351 Cleft hard palate -Q353 Cleft soft palate -Q355 Cleft hard palate with cleft soft palate -Q357 Cleft uvula -Q359 Cleft palate, unspecified -Q360 Cleft lip, bilateral -Q361 Cleft lip, median -Q369 Cleft lip, unilateral -Q370 Cleft hard palate with bilateral cleft lip -Q371 Cleft hard palate with unilateral cleft lip -Q372 Cleft soft palate with bilateral cleft lip -Q373 Cleft soft palate with unilateral cleft lip -Q374 Cleft hard and soft palate with bilateral cleft lip -Q375 Cleft hard and soft palate with unilateral cleft lip -Q378 Unspecified cleft palate with bilateral cleft lip -Q379 Unspecified cleft palate with unilateral cleft lip -Q380 Congenital malformations of lips, not elsewhere classified -Q381 Ankyloglossia -Q382 Macroglossia -Q383 Other congenital malformations of tongue -Q384 Congenital malformations of salivary glands and ducts -Q385 Congenital malformations of palate, not elsewhere classified -Q386 Other congenital malformations of mouth -Q387 Congenital pharyngeal pouch -Q388 Other congenital malformations of pharynx -Q390 Atresia of esophagus without fistula -Q391 Atresia of esophagus with tracheo-esophageal fistula -Q392 Congenital tracheo-esophageal fistula without atresia -Q393 Congenital stenosis and stricture of esophagus -Q394 Esophageal web -Q395 Congenital dilatation of esophagus -Q396 Congenital diverticulum of esophagus -Q398 Other congenital malformations of esophagus -Q399 Congenital malformation of esophagus, unspecified -Q400 Congenital hypertrophic pyloric stenosis -Q401 Congenital hiatus hernia -Q402 Other specified congenital malformations of stomach -Q403 Congenital malformation of stomach, unspecified -Q408 Other specified congenital malformations of upper alimentary tract -Q409 Congenital malformation of upper alimentary tract, unspecified -Q410 Congenital absence, atresia and stenosis of duodenum -Q411 Congenital absence, atresia and stenosis of jejunum -Q412 Congenital absence, atresia and stenosis of ileum -Q418 Congenital absence, atresia and stenosis of other specified parts of small intestine -Q419 Congenital absence, atresia and stenosis of small intestine, part unspecified -Q420 Congenital absence, atresia and stenosis of rectum with fistula -Q421 Congenital absence, atresia and stenosis of rectum without fistula -Q422 Congenital absence, atresia and stenosis of anus with fistula -Q423 Congenital absence, atresia and stenosis of anus without fistula -Q428 Congenital absence, atresia and stenosis of other parts of large intestine -Q429 Congenital absence, atresia and stenosis of large intestine, part unspecified -Q430 Meckel's diverticulum (displaced) (hypertrophic) -Q431 Hirschsprung's disease -Q432 Other congenital functional disorders of colon -Q433 Congenital malformations of intestinal fixation -Q434 Duplication of intestine -Q435 Ectopic anus -Q436 Congenital fistula of rectum and anus -Q437 Persistent cloaca -Q438 Other specified congenital malformations of intestine -Q439 Congenital malformation of intestine, unspecified -Q440 Agenesis, aplasia and hypoplasia of gallbladder -Q441 Other congenital malformations of gallbladder -Q442 Atresia of bile ducts -Q443 Congenital stenosis and stricture of bile ducts -Q444 Choledochal cyst -Q445 Other congenital malformations of bile ducts -Q446 Cystic disease of liver -Q447 Other congenital malformations of liver -Q450 Agenesis, aplasia and hypoplasia of pancreas -Q451 Annular pancreas -Q452 Congenital pancreatic cyst -Q453 Other congenital malformations of pancreas and pancreatic duct -Q458 Other specified congenital malformations of digestive system -Q459 Congenital malformation of digestive system, unspecified -Q5001 Congenital absence of ovary, unilateral -Q5002 Congenital absence of ovary, bilateral -Q501 Developmental ovarian cyst -Q502 Congenital torsion of ovary -Q5031 Accessory ovary -Q5032 Ovarian streak -Q5039 Other congenital malformation of ovary -Q504 Embryonic cyst of fallopian tube -Q505 Embryonic cyst of broad ligament -Q506 Other congenital malformations of fallopian tube and broad ligament -Q510 Agenesis and aplasia of uterus -Q5110 Doubling of uterus with doubling of cervix and vagina without obstruction -Q5111 Doubling of uterus with doubling of cervix and vagina with obstruction -Q512 Other doubling of uterus -Q513 Bicornate uterus -Q514 Unicornate uterus -Q515 Agenesis and aplasia of cervix -Q516 Embryonic cyst of cervix -Q517 Congenital fistulae between uterus and digestive and urinary tracts -Q51810 Arcuate uterus -Q51811 Hypoplasia of uterus -Q51818 Other congenital malformations of uterus -Q51820 Cervical duplication -Q51821 Hypoplasia of cervix -Q51828 Other congenital malformations of cervix -Q519 Congenital malformation of uterus and cervix, unspecified -Q520 Congenital absence of vagina -Q5210 Doubling of vagina, unspecified -Q5211 Transverse vaginal septum -Q52120 Longitudinal vaginal septum, nonobstructing -Q52121 Longitudinal vaginal septum, obstructing, right side -Q52122 Longitudinal vaginal septum, obstructing, left side -Q52123 Longitudinal vaginal septum, microperforate, right side -Q52124 Longitudinal vaginal septum, microperforate, left side -Q52129 Other and unspecified longitudinal vaginal septum -Q522 Congenital rectovaginal fistula -Q523 Imperforate hymen -Q524 Other congenital malformations of vagina -Q525 Fusion of labia -Q526 Congenital malformation of clitoris -Q5270 Unspecified congenital malformations of vulva -Q5271 Congenital absence of vulva -Q5279 Other congenital malformations of vulva -Q528 Other specified congenital malformations of female genitalia -Q529 Congenital malformation of female genitalia, unspecified -Q5300 Ectopic testis, unspecified -Q5301 Ectopic testis, unilateral -Q5302 Ectopic testes, bilateral -Q5310 Unspecified undescended testicle, unilateral -Q5311 Abdominal testis, unilateral -Q5312 Ectopic perineal testis, unilateral -Q5320 Undescended testicle, unspecified, bilateral -Q5321 Abdominal testis, bilateral -Q5322 Ectopic perineal testis, bilateral -Q539 Undescended testicle, unspecified -Q540 Hypospadias, balanic -Q541 Hypospadias, penile -Q542 Hypospadias, penoscrotal -Q543 Hypospadias, perineal -Q544 Congenital chordee -Q548 Other hypospadias -Q549 Hypospadias, unspecified -Q550 Absence and aplasia of testis -Q551 Hypoplasia of testis and scrotum -Q5520 Unspecified congenital malformations of testis and scrotum -Q5521 Polyorchism -Q5522 Retractile testis -Q5523 Scrotal transposition -Q5529 Other congenital malformations of testis and scrotum -Q553 Atresia of vas deferens -Q554 Other congenital malformations of vas deferens, epididymis, seminal vesicles and prostate -Q555 Congenital absence and aplasia of penis -Q5561 Curvature of penis (lateral) -Q5562 Hypoplasia of penis -Q5563 Congenital torsion of penis -Q5564 Hidden penis -Q5569 Other congenital malformation of penis -Q557 Congenital vasocutaneous fistula -Q558 Other specified congenital malformations of male genital organs -Q559 Congenital malformation of male genital organ, unspecified -Q560 Hermaphroditism, not elsewhere classified -Q561 Male pseudohermaphroditism, not elsewhere classified -Q562 Female pseudohermaphroditism, not elsewhere classified -Q563 Pseudohermaphroditism, unspecified -Q564 Indeterminate sex, unspecified -Q600 Renal agenesis, unilateral -Q601 Renal agenesis, bilateral -Q602 Renal agenesis, unspecified -Q603 Renal hypoplasia, unilateral -Q604 Renal hypoplasia, bilateral -Q605 Renal hypoplasia, unspecified -Q606 Potter's syndrome -Q6100 Congenital renal cyst, unspecified -Q6101 Congenital single renal cyst -Q6102 Congenital multiple renal cysts -Q6111 Cystic dilatation of collecting ducts -Q6119 Other polycystic kidney, infantile type -Q612 Polycystic kidney, adult type -Q613 Polycystic kidney, unspecified -Q614 Renal dysplasia -Q615 Medullary cystic kidney -Q618 Other cystic kidney diseases -Q619 Cystic kidney disease, unspecified -Q620 Congenital hydronephrosis -Q6210 Congenital occlusion of ureter, unspecified -Q6211 Congenital occlusion of ureteropelvic junction -Q6212 Congenital occlusion of ureterovesical orifice -Q622 Congenital megaureter -Q6231 Congenital ureterocele, orthotopic -Q6232 Cecoureterocele -Q6239 Other obstructive defects of renal pelvis and ureter -Q624 Agenesis of ureter -Q625 Duplication of ureter -Q6260 Malposition of ureter, unspecified -Q6261 Deviation of ureter -Q6262 Displacement of ureter -Q6263 Anomalous implantation of ureter -Q6269 Other malposition of ureter -Q627 Congenital vesico-uretero-renal reflux -Q628 Other congenital malformations of ureter -Q630 Accessory kidney -Q631 Lobulated, fused and horseshoe kidney -Q632 Ectopic kidney -Q633 Hyperplastic and giant kidney -Q638 Other specified congenital malformations of kidney -Q639 Congenital malformation of kidney, unspecified -Q640 Epispadias -Q6410 Exstrophy of urinary bladder, unspecified -Q6411 Supravesical fissure of urinary bladder -Q6412 Cloacal extrophy of urinary bladder -Q6419 Other exstrophy of urinary bladder -Q642 Congenital posterior urethral valves -Q6431 Congenital bladder neck obstruction -Q6432 Congenital stricture of urethra -Q6433 Congenital stricture of urinary meatus -Q6439 Other atresia and stenosis of urethra and bladder neck -Q644 Malformation of urachus -Q645 Congenital absence of bladder and urethra -Q646 Congenital diverticulum of bladder -Q6470 Unspecified congenital malformation of bladder and urethra -Q6471 Congenital prolapse of urethra -Q6472 Congenital prolapse of urinary meatus -Q6473 Congenital urethrorectal fistula -Q6474 Double urethra -Q6475 Double urinary meatus -Q6479 Other congenital malformations of bladder and urethra -Q648 Other specified congenital malformations of urinary system -Q649 Congenital malformation of urinary system, unspecified -Q6500 Congenital dislocation of unspecified hip, unilateral -Q6501 Congenital dislocation of right hip, unilateral -Q6502 Congenital dislocation of left hip, unilateral -Q651 Congenital dislocation of hip, bilateral -Q652 Congenital dislocation of hip, unspecified -Q6530 Congenital partial dislocation of unspecified hip, unilateral -Q6531 Congenital partial dislocation of right hip, unilateral -Q6532 Congenital partial dislocation of left hip, unilateral -Q654 Congenital partial dislocation of hip, bilateral -Q655 Congenital partial dislocation of hip, unspecified -Q656 Congenital unstable hip -Q6581 Congenital coxa valga -Q6582 Congenital coxa vara -Q6589 Other specified congenital deformities of hip -Q659 Congenital deformity of hip, unspecified -Q660 Congenital talipes equinovarus -Q661 Congenital talipes calcaneovarus -Q6621 Congenital metatarsus primus varus -Q6622 Congenital metatarsus adductus -Q663 Other congenital varus deformities of feet -Q664 Congenital talipes calcaneovalgus -Q6650 Congenital pes planus, unspecified foot -Q6651 Congenital pes planus, right foot -Q6652 Congenital pes planus, left foot -Q666 Other congenital valgus deformities of feet -Q667 Congenital pes cavus -Q6680 Congenital vertical talus deformity, unspecified foot -Q6681 Congenital vertical talus deformity, right foot -Q6682 Congenital vertical talus deformity, left foot -Q6689 Other specified congenital deformities of feet -Q669 Congenital deformity of feet, unspecified -Q670 Congenital facial asymmetry -Q671 Congenital compression facies -Q672 Dolichocephaly -Q673 Plagiocephaly -Q674 Other congenital deformities of skull, face and jaw -Q675 Congenital deformity of spine -Q676 Pectus excavatum -Q677 Pectus carinatum -Q678 Other congenital deformities of chest -Q680 Congenital deformity of sternocleidomastoid muscle -Q681 Congenital deformity of finger(s) and hand -Q682 Congenital deformity of knee -Q683 Congenital bowing of femur -Q684 Congenital bowing of tibia and fibula -Q685 Congenital bowing of long bones of leg, unspecified -Q686 Discoid meniscus -Q688 Other specified congenital musculoskeletal deformities -Q690 Accessory finger(s) -Q691 Accessory thumb(s) -Q692 Accessory toe(s) -Q699 Polydactyly, unspecified -Q7000 Fused fingers, unspecified hand -Q7001 Fused fingers, right hand -Q7002 Fused fingers, left hand -Q7003 Fused fingers, bilateral -Q7010 Webbed fingers, unspecified hand -Q7011 Webbed fingers, right hand -Q7012 Webbed fingers, left hand -Q7013 Webbed fingers, bilateral -Q7020 Fused toes, unspecified foot -Q7021 Fused toes, right foot -Q7022 Fused toes, left foot -Q7023 Fused toes, bilateral -Q7030 Webbed toes, unspecified foot -Q7031 Webbed toes, right foot -Q7032 Webbed toes, left foot -Q7033 Webbed toes, bilateral -Q704 Polysyndactyly, unspecified -Q709 Syndactyly, unspecified -Q7100 Congenital complete absence of unspecified upper limb -Q7101 Congenital complete absence of right upper limb -Q7102 Congenital complete absence of left upper limb -Q7103 Congenital complete absence of upper limb, bilateral -Q7110 Congenital absence of unspecified upper arm and forearm with hand present -Q7111 Congenital absence of right upper arm and forearm with hand present -Q7112 Congenital absence of left upper arm and forearm with hand present -Q7113 Congenital absence of upper arm and forearm with hand present, bilateral -Q7120 Congenital absence of both forearm and hand, unspecified upper limb -Q7121 Congenital absence of both forearm and hand, right upper limb -Q7122 Congenital absence of both forearm and hand, left upper limb -Q7123 Congenital absence of both forearm and hand, bilateral -Q7130 Congenital absence of unspecified hand and finger -Q7131 Congenital absence of right hand and finger -Q7132 Congenital absence of left hand and finger -Q7133 Congenital absence of hand and finger, bilateral -Q7140 Longitudinal reduction defect of unspecified radius -Q7141 Longitudinal reduction defect of right radius -Q7142 Longitudinal reduction defect of left radius -Q7143 Longitudinal reduction defect of radius, bilateral -Q7150 Longitudinal reduction defect of unspecified ulna -Q7151 Longitudinal reduction defect of right ulna -Q7152 Longitudinal reduction defect of left ulna -Q7153 Longitudinal reduction defect of ulna, bilateral -Q7160 Lobster-claw hand, unspecified hand -Q7161 Lobster-claw right hand -Q7162 Lobster-claw left hand -Q7163 Lobster-claw hand, bilateral -Q71811 Congenital shortening of right upper limb -Q71812 Congenital shortening of left upper limb -Q71813 Congenital shortening of upper limb, bilateral -Q71819 Congenital shortening of unspecified upper limb -Q71891 Other reduction defects of right upper limb -Q71892 Other reduction defects of left upper limb -Q71893 Other reduction defects of upper limb, bilateral -Q71899 Other reduction defects of unspecified upper limb -Q7190 Unspecified reduction defect of unspecified upper limb -Q7191 Unspecified reduction defect of right upper limb -Q7192 Unspecified reduction defect of left upper limb -Q7193 Unspecified reduction defect of upper limb, bilateral -Q7200 Congenital complete absence of unspecified lower limb -Q7201 Congenital complete absence of right lower limb -Q7202 Congenital complete absence of left lower limb -Q7203 Congenital complete absence of lower limb, bilateral -Q7210 Congenital absence of unspecified thigh and lower leg with foot present -Q7211 Congenital absence of right thigh and lower leg with foot present -Q7212 Congenital absence of left thigh and lower leg with foot present -Q7213 Congenital absence of thigh and lower leg with foot present, bilateral -Q7220 Congenital absence of both lower leg and foot, unspecified lower limb -Q7221 Congenital absence of both lower leg and foot, right lower limb -Q7222 Congenital absence of both lower leg and foot, left lower limb -Q7223 Congenital absence of both lower leg and foot, bilateral -Q7230 Congenital absence of unspecified foot and toe(s) -Q7231 Congenital absence of right foot and toe(s) -Q7232 Congenital absence of left foot and toe(s) -Q7233 Congenital absence of foot and toe(s), bilateral -Q7240 Longitudinal reduction defect of unspecified femur -Q7241 Longitudinal reduction defect of right femur -Q7242 Longitudinal reduction defect of left femur -Q7243 Longitudinal reduction defect of femur, bilateral -Q7250 Longitudinal reduction defect of unspecified tibia -Q7251 Longitudinal reduction defect of right tibia -Q7252 Longitudinal reduction defect of left tibia -Q7253 Longitudinal reduction defect of tibia, bilateral -Q7260 Longitudinal reduction defect of unspecified fibula -Q7261 Longitudinal reduction defect of right fibula -Q7262 Longitudinal reduction defect of left fibula -Q7263 Longitudinal reduction defect of fibula, bilateral -Q7270 Split foot, unspecified lower limb -Q7271 Split foot, right lower limb -Q7272 Split foot, left lower limb -Q7273 Split foot, bilateral -Q72811 Congenital shortening of right lower limb -Q72812 Congenital shortening of left lower limb -Q72813 Congenital shortening of lower limb, bilateral -Q72819 Congenital shortening of unspecified lower limb -Q72891 Other reduction defects of right lower limb -Q72892 Other reduction defects of left lower limb -Q72893 Other reduction defects of lower limb, bilateral -Q72899 Other reduction defects of unspecified lower limb -Q7290 Unspecified reduction defect of unspecified lower limb -Q7291 Unspecified reduction defect of right lower limb -Q7292 Unspecified reduction defect of left lower limb -Q7293 Unspecified reduction defect of lower limb, bilateral -Q730 Congenital absence of unspecified limb(s) -Q731 Phocomelia, unspecified limb(s) -Q738 Other reduction defects of unspecified limb(s) -Q740 Other congenital malformations of upper limb(s), including shoulder girdle -Q741 Congenital malformation of knee -Q742 Other congenital malformations of lower limb(s), including pelvic girdle -Q743 Arthrogryposis multiplex congenita -Q748 Other specified congenital malformations of limb(s) -Q749 Unspecified congenital malformation of limb(s) -Q750 Craniosynostosis -Q751 Craniofacial dysostosis -Q752 Hypertelorism -Q753 Macrocephaly -Q754 Mandibulofacial dysostosis -Q755 Oculomandibular dysostosis -Q758 Other specified congenital malformations of skull and face bones -Q759 Congenital malformation of skull and face bones, unspecified -Q760 Spina bifida occulta -Q761 Klippel-Feil syndrome -Q762 Congenital spondylolisthesis -Q763 Congenital scoliosis due to congenital bony malformation -Q76411 Congenital kyphosis, occipito-atlanto-axial region -Q76412 Congenital kyphosis, cervical region -Q76413 Congenital kyphosis, cervicothoracic region -Q76414 Congenital kyphosis, thoracic region -Q76415 Congenital kyphosis, thoracolumbar region -Q76419 Congenital kyphosis, unspecified region -Q76425 Congenital lordosis, thoracolumbar region -Q76426 Congenital lordosis, lumbar region -Q76427 Congenital lordosis, lumbosacral region -Q76428 Congenital lordosis, sacral and sacrococcygeal region -Q76429 Congenital lordosis, unspecified region -Q7649 Other congenital malformations of spine, not associated with scoliosis -Q765 Cervical rib -Q766 Other congenital malformations of ribs -Q767 Congenital malformation of sternum -Q768 Other congenital malformations of bony thorax -Q769 Congenital malformation of bony thorax, unspecified -Q770 Achondrogenesis -Q771 Thanatophoric short stature -Q772 Short rib syndrome -Q773 Chondrodysplasia punctata -Q774 Achondroplasia -Q775 Diastrophic dysplasia -Q776 Chondroectodermal dysplasia -Q777 Spondyloepiphyseal dysplasia -Q778 Other osteochondrodysplasia with defects of growth of tubular bones and spine -Q779 Osteochondrodysplasia with defects of growth of tubular bones and spine, unspecified -Q780 Osteogenesis imperfecta -Q781 Polyostotic fibrous dysplasia -Q782 Osteopetrosis -Q783 Progressive diaphyseal dysplasia -Q784 Enchondromatosis -Q785 Metaphyseal dysplasia -Q786 Multiple congenital exostoses -Q788 Other specified osteochondrodysplasias -Q789 Osteochondrodysplasia, unspecified -Q790 Congenital diaphragmatic hernia -Q791 Other congenital malformations of diaphragm -Q792 Exomphalos -Q793 Gastroschisis -Q794 Prune belly syndrome -Q7951 Congenital hernia of bladder -Q7959 Other congenital malformations of abdominal wall -Q796 Ehlers-Danlos syndrome -Q798 Other congenital malformations of musculoskeletal system -Q799 Congenital malformation of musculoskeletal system, unspecified -Q800 Ichthyosis vulgaris -Q801 X-linked ichthyosis -Q802 Lamellar ichthyosis -Q803 Congenital bullous ichthyosiform erythroderma -Q804 Harlequin fetus -Q808 Other congenital ichthyosis -Q809 Congenital ichthyosis, unspecified -Q810 Epidermolysis bullosa simplex -Q811 Epidermolysis bullosa letalis -Q812 Epidermolysis bullosa dystrophica -Q818 Other epidermolysis bullosa -Q819 Epidermolysis bullosa, unspecified -Q820 Hereditary lymphedema -Q821 Xeroderma pigmentosum -Q822 Mastocytosis -Q823 Incontinentia pigmenti -Q824 Ectodermal dysplasia (anhidrotic) -Q825 Congenital non-neoplastic nevus -Q826 Congenital sacral dimple -Q828 Other specified congenital malformations of skin -Q829 Congenital malformation of skin, unspecified -Q830 Congenital absence of breast with absent nipple -Q831 Accessory breast -Q832 Absent nipple -Q833 Accessory nipple -Q838 Other congenital malformations of breast -Q839 Congenital malformation of breast, unspecified -Q840 Congenital alopecia -Q841 Congenital morphological disturbances of hair, not elsewhere classified -Q842 Other congenital malformations of hair -Q843 Anonychia -Q844 Congenital leukonychia -Q845 Enlarged and hypertrophic nails -Q846 Other congenital malformations of nails -Q848 Other specified congenital malformations of integument -Q849 Congenital malformation of integument, unspecified -Q8500 Neurofibromatosis, unspecified -Q8501 Neurofibromatosis, type 1 -Q8502 Neurofibromatosis, type 2 -Q8503 Schwannomatosis -Q8509 Other neurofibromatosis -Q851 Tuberous sclerosis -Q858 Other phakomatoses, not elsewhere classified -Q859 Phakomatosis, unspecified -Q860 Fetal alcohol syndrome (dysmorphic) -Q861 Fetal hydantoin syndrome -Q862 Dysmorphism due to warfarin -Q868 Other congenital malformation syndromes due to known exogenous causes -Q870 Congenital malformation syndromes predominantly affecting facial appearance -Q871 Congenital malformation syndromes predominantly associated with short stature -Q872 Congenital malformation syndromes predominantly involving limbs -Q873 Congenital malformation syndromes involving early overgrowth -Q8740 Marfan's syndrome, unspecified -Q87410 Marfan's syndrome with aortic dilation -Q87418 Marfan's syndrome with other cardiovascular manifestations -Q8742 Marfan's syndrome with ocular manifestations -Q8743 Marfan's syndrome with skeletal manifestation -Q875 Other congenital malformation syndromes with other skeletal changes -Q8781 Alport syndrome -Q8782 Arterial tortuosity syndrome -Q8789 Other specified congenital malformation syndromes, not elsewhere classified -Q8901 Asplenia (congenital) -Q8909 Congenital malformations of spleen -Q891 Congenital malformations of adrenal gland -Q892 Congenital malformations of other endocrine glands -Q893 Situs inversus -Q894 Conjoined twins -Q897 Multiple congenital malformations, not elsewhere classified -Q898 Other specified congenital malformations -Q899 Congenital malformation, unspecified -Q900 Trisomy 21, nonmosaicism (meiotic nondisjunction) -Q901 Trisomy 21, mosaicism (mitotic nondisjunction) -Q902 Trisomy 21, translocation -Q909 Down syndrome, unspecified -Q910 Trisomy 18, nonmosaicism (meiotic nondisjunction) -Q911 Trisomy 18, mosaicism (mitotic nondisjunction) -Q912 Trisomy 18, translocation -Q913 Trisomy 18, unspecified -Q914 Trisomy 13, nonmosaicism (meiotic nondisjunction) -Q915 Trisomy 13, mosaicism (mitotic nondisjunction) -Q916 Trisomy 13, translocation -Q917 Trisomy 13, unspecified -Q920 Whole chromosome trisomy, nonmosaicism (meiotic nondisjunction) -Q921 Whole chromosome trisomy, mosaicism (mitotic nondisjunction) -Q922 Partial trisomy -Q925 Duplications with other complex rearrangements -Q9261 Marker chromosomes in normal individual -Q9262 Marker chromosomes in abnormal individual -Q927 Triploidy and polyploidy -Q928 Other specified trisomies and partial trisomies of autosomes -Q929 Trisomy and partial trisomy of autosomes, unspecified -Q930 Whole chromosome monosomy, nonmosaicism (meiotic nondisjunction) -Q931 Whole chromosome monosomy, mosaicism (mitotic nondisjunction) -Q932 Chromosome replaced with ring, dicentric or isochromosome -Q933 Deletion of short arm of chromosome 4 -Q934 Deletion of short arm of chromosome 5 -Q935 Other deletions of part of a chromosome -Q937 Deletions with other complex rearrangements -Q9381 Velo-cardio-facial syndrome -Q9388 Other microdeletions -Q9389 Other deletions from the autosomes -Q939 Deletion from autosomes, unspecified -Q950 Balanced translocation and insertion in normal individual -Q951 Chromosome inversion in normal individual -Q952 Balanced autosomal rearrangement in abnormal individual -Q953 Balanced sex/autosomal rearrangement in abnormal individual -Q955 Individual with autosomal fragile site -Q958 Other balanced rearrangements and structural markers -Q959 Balanced rearrangement and structural marker, unspecified -Q960 Karyotype 45, X -Q961 Karyotype 46, X iso (Xq) -Q962 Karyotype 46, X with abnormal sex chromosome, except iso (Xq) -Q963 Mosaicism, 45, X/46, XX or XY -Q964 Mosaicism, 45, X/other cell line(s) with abnormal sex chromosome -Q968 Other variants of Turner's syndrome -Q969 Turner's syndrome, unspecified -Q970 Karyotype 47, XXX -Q971 Female with more than three X chromosomes -Q972 Mosaicism, lines with various numbers of X chromosomes -Q973 Female with 46, XY karyotype -Q978 Other specified sex chromosome abnormalities, female phenotype -Q979 Sex chromosome abnormality, female phenotype, unspecified -Q980 Klinefelter syndrome karyotype 47, XXY -Q981 Klinefelter syndrome, male with more than two X chromosomes -Q983 Other male with 46, XX karyotype -Q984 Klinefelter syndrome, unspecified -Q985 Karyotype 47, XYY -Q986 Male with structurally abnormal sex chromosome -Q987 Male with sex chromosome mosaicism -Q988 Other specified sex chromosome abnormalities, male phenotype -Q989 Sex chromosome abnormality, male phenotype, unspecified -Q990 Chimera 46, XX/46, XY -Q991 46, XX true hermaphrodite -Q992 Fragile X chromosome -Q998 Other specified chromosome abnormalities -Q999 Chromosomal abnormality, unspecified -R000 Tachycardia, unspecified -R001 Bradycardia, unspecified -R002 Palpitations -R008 Other abnormalities of heart beat -R009 Unspecified abnormalities of heart beat -R010 Benign and innocent cardiac murmurs -R011 Cardiac murmur, unspecified -R012 Other cardiac sounds -R030 Elevated blood-pressure reading, without diagnosis of hypertension -R031 Nonspecific low blood-pressure reading -R040 Epistaxis -R041 Hemorrhage from throat -R042 Hemoptysis -R0481 Acute idiopathic pulmonary hemorrhage in infants -R0489 Hemorrhage from other sites in respiratory passages -R049 Hemorrhage from respiratory passages, unspecified -R05 Cough -R0600 Dyspnea, unspecified -R0601 Orthopnea -R0602 Shortness of breath -R0609 Other forms of dyspnea -R061 Stridor -R062 Wheezing -R063 Periodic breathing -R064 Hyperventilation -R065 Mouth breathing -R066 Hiccough -R067 Sneezing -R0681 Apnea, not elsewhere classified -R0682 Tachypnea, not elsewhere classified -R0683 Snoring -R0689 Other abnormalities of breathing -R069 Unspecified abnormalities of breathing -R070 Pain in throat -R071 Chest pain on breathing -R072 Precordial pain -R0781 Pleurodynia -R0782 Intercostal pain -R0789 Other chest pain -R079 Chest pain, unspecified -R0901 Asphyxia -R0902 Hypoxemia -R091 Pleurisy -R092 Respiratory arrest -R093 Abnormal sputum -R0981 Nasal congestion -R0982 Postnasal drip -R0989 Other specified symptoms and signs involving the circulatory and respiratory systems -R100 Acute abdomen -R1010 Upper abdominal pain, unspecified -R1011 Right upper quadrant pain -R1012 Left upper quadrant pain -R1013 Epigastric pain -R102 Pelvic and perineal pain -R1030 Lower abdominal pain, unspecified -R1031 Right lower quadrant pain -R1032 Left lower quadrant pain -R1033 Periumbilical pain -R10811 Right upper quadrant abdominal tenderness -R10812 Left upper quadrant abdominal tenderness -R10813 Right lower quadrant abdominal tenderness -R10814 Left lower quadrant abdominal tenderness -R10815 Periumbilic abdominal tenderness -R10816 Epigastric abdominal tenderness -R10817 Generalized abdominal tenderness -R10819 Abdominal tenderness, unspecified site -R10821 Right upper quadrant rebound abdominal tenderness -R10822 Left upper quadrant rebound abdominal tenderness -R10823 Right lower quadrant rebound abdominal tenderness -R10824 Left lower quadrant rebound abdominal tenderness -R10825 Periumbilic rebound abdominal tenderness -R10826 Epigastric rebound abdominal tenderness -R10827 Generalized rebound abdominal tenderness -R10829 Rebound abdominal tenderness, unspecified site -R1083 Colic -R1084 Generalized abdominal pain -R109 Unspecified abdominal pain -R110 Nausea -R1110 Vomiting, unspecified -R1111 Vomiting without nausea -R1112 Projectile vomiting -R1113 Vomiting of fecal matter -R1114 Bilious vomiting -R112 Nausea with vomiting, unspecified -R12 Heartburn -R130 Aphagia -R1310 Dysphagia, unspecified -R1311 Dysphagia, oral phase -R1312 Dysphagia, oropharyngeal phase -R1313 Dysphagia, pharyngeal phase -R1314 Dysphagia, pharyngoesophageal phase -R1319 Other dysphagia -R140 Abdominal distension (gaseous) -R141 Gas pain -R142 Eructation -R143 Flatulence -R150 Incomplete defecation -R151 Fecal smearing -R152 Fecal urgency -R159 Full incontinence of feces -R160 Hepatomegaly, not elsewhere classified -R161 Splenomegaly, not elsewhere classified -R162 Hepatomegaly with splenomegaly, not elsewhere classified -R17 Unspecified jaundice -R180 Malignant ascites -R188 Other ascites -R1900 Intra-abdominal and pelvic swelling, mass and lump, unspecified site -R1901 Right upper quadrant abdominal swelling, mass and lump -R1902 Left upper quadrant abdominal swelling, mass and lump -R1903 Right lower quadrant abdominal swelling, mass and lump -R1904 Left lower quadrant abdominal swelling, mass and lump -R1905 Periumbilic swelling, mass or lump -R1906 Epigastric swelling, mass or lump -R1907 Generalized intra-abdominal and pelvic swelling, mass and lump -R1909 Other intra-abdominal and pelvic swelling, mass and lump -R1911 Absent bowel sounds -R1912 Hyperactive bowel sounds -R1915 Other abnormal bowel sounds -R192 Visible peristalsis -R1930 Abdominal rigidity, unspecified site -R1931 Right upper quadrant abdominal rigidity -R1932 Left upper quadrant abdominal rigidity -R1933 Right lower quadrant abdominal rigidity -R1934 Left lower quadrant abdominal rigidity -R1935 Periumbilic abdominal rigidity -R1936 Epigastric abdominal rigidity -R1937 Generalized abdominal rigidity -R194 Change in bowel habit -R195 Other fecal abnormalities -R196 Halitosis -R197 Diarrhea, unspecified -R198 Other specified symptoms and signs involving the digestive system and abdomen -R200 Anesthesia of skin -R201 Hypoesthesia of skin -R202 Paresthesia of skin -R203 Hyperesthesia -R208 Other disturbances of skin sensation -R209 Unspecified disturbances of skin sensation -R21 Rash and other nonspecific skin eruption -R220 Localized swelling, mass and lump, head -R221 Localized swelling, mass and lump, neck -R222 Localized swelling, mass and lump, trunk -R2230 Localized swelling, mass and lump, unspecified upper limb -R2231 Localized swelling, mass and lump, right upper limb -R2232 Localized swelling, mass and lump, left upper limb -R2233 Localized swelling, mass and lump, upper limb, bilateral -R2240 Localized swelling, mass and lump, unspecified lower limb -R2241 Localized swelling, mass and lump, right lower limb -R2242 Localized swelling, mass and lump, left lower limb -R2243 Localized swelling, mass and lump, lower limb, bilateral -R229 Localized swelling, mass and lump, unspecified -R230 Cyanosis -R231 Pallor -R232 Flushing -R233 Spontaneous ecchymoses -R234 Changes in skin texture -R238 Other skin changes -R239 Unspecified skin changes -R250 Abnormal head movements -R251 Tremor, unspecified -R252 Cramp and spasm -R253 Fasciculation -R258 Other abnormal involuntary movements -R259 Unspecified abnormal involuntary movements -R260 Ataxic gait -R261 Paralytic gait -R262 Difficulty in walking, not elsewhere classified -R2681 Unsteadiness on feet -R2689 Other abnormalities of gait and mobility -R269 Unspecified abnormalities of gait and mobility -R270 Ataxia, unspecified -R278 Other lack of coordination -R279 Unspecified lack of coordination -R290 Tetany -R291 Meningismus -R292 Abnormal reflex -R293 Abnormal posture -R294 Clicking hip -R295 Transient paralysis -R296 Repeated falls -R29700 NIHSS score 0 -R29701 NIHSS score 1 -R29702 NIHSS score 2 -R29703 NIHSS score 3 -R29704 NIHSS score 4 -R29705 NIHSS score 5 -R29706 NIHSS score 6 -R29707 NIHSS score 7 -R29708 NIHSS score 8 -R29709 NIHSS score 9 -R29710 NIHSS score 10 -R29711 NIHSS score 11 -R29712 NIHSS score 12 -R29713 NIHSS score 13 -R29714 NIHSS score 14 -R29715 NIHSS score 15 -R29716 NIHSS score 16 -R29717 NIHSS score 17 -R29718 NIHSS score 18 -R29719 NIHSS score 19 -R29720 NIHSS score 20 -R29721 NIHSS score 21 -R29722 NIHSS score 22 -R29723 NIHSS score 23 -R29724 NIHSS score 24 -R29725 NIHSS score 25 -R29726 NIHSS score 26 -R29727 NIHSS score 27 -R29728 NIHSS score 28 -R29729 NIHSS score 29 -R29730 NIHSS score 30 -R29731 NIHSS score 31 -R29732 NIHSS score 32 -R29733 NIHSS score 33 -R29734 NIHSS score 34 -R29735 NIHSS score 35 -R29736 NIHSS score 36 -R29737 NIHSS score 37 -R29738 NIHSS score 38 -R29739 NIHSS score 39 -R29740 NIHSS score 40 -R29741 NIHSS score 41 -R29742 NIHSS score 42 -R29810 Facial weakness -R29818 Other symptoms and signs involving the nervous system -R29890 Loss of height -R29891 Ocular torticollis -R29898 Other symptoms and signs involving the musculoskeletal system -R2990 Unspecified symptoms and signs involving the nervous system -R2991 Unspecified symptoms and signs involving the musculoskeletal system -R300 Dysuria -R301 Vesical tenesmus -R309 Painful micturition, unspecified -R310 Gross hematuria -R311 Benign essential microscopic hematuria -R3121 Asymptomatic microscopic hematuria -R3129 Other microscopic hematuria -R319 Hematuria, unspecified -R32 Unspecified urinary incontinence -R330 Drug induced retention of urine -R338 Other retention of urine -R339 Retention of urine, unspecified -R34 Anuria and oliguria -R350 Frequency of micturition -R351 Nocturia -R358 Other polyuria -R360 Urethral discharge without blood -R361 Hematospermia -R369 Urethral discharge, unspecified -R37 Sexual dysfunction, unspecified -R390 Extravasation of urine -R3911 Hesitancy of micturition -R3912 Poor urinary stream -R3913 Splitting of urinary stream -R3914 Feeling of incomplete bladder emptying -R3915 Urgency of urination -R3916 Straining to void -R39191 Need to immediately re-void -R39192 Position dependent micturition -R39198 Other difficulties with micturition -R392 Extrarenal uremia -R3981 Functional urinary incontinence -R3982 Chronic bladder pain -R3989 Other symptoms and signs involving the genitourinary system -R399 Unspecified symptoms and signs involving the genitourinary system -R400 Somnolence -R401 Stupor -R4020 Unspecified coma -R402110 Coma scale, eyes open, never, unspecified time -R402111 Coma scale, eyes open, never, in the field [EMT or ambulance] -R402112 Coma scale, eyes open, never, at arrival to emergency department -R402113 Coma scale, eyes open, never, at hospital admission -R402114 Coma scale, eyes open, never, 24 hours or more after hospital admission -R402120 Coma scale, eyes open, to pain, unspecified time -R402121 Coma scale, eyes open, to pain, in the field [EMT or ambulance] -R402122 Coma scale, eyes open, to pain, at arrival to emergency department -R402123 Coma scale, eyes open, to pain, at hospital admission -R402124 Coma scale, eyes open, to pain, 24 hours or more after hospital admission -R402130 Coma scale, eyes open, to sound, unspecified time -R402131 Coma scale, eyes open, to sound, in the field [EMT or ambulance] -R402132 Coma scale, eyes open, to sound, at arrival to emergency department -R402133 Coma scale, eyes open, to sound, at hospital admission -R402134 Coma scale, eyes open, to sound, 24 hours or more after hospital admission -R402140 Coma scale, eyes open, spontaneous, unspecified time -R402141 Coma scale, eyes open, spontaneous, in the field [EMT or ambulance] -R402142 Coma scale, eyes open, spontaneous, at arrival to emergency department -R402143 Coma scale, eyes open, spontaneous, at hospital admission -R402144 Coma scale, eyes open, spontaneous, 24 hours or more after hospital admission -R402210 Coma scale, best verbal response, none, unspecified time -R402211 Coma scale, best verbal response, none, in the field [EMT or ambulance] -R402212 Coma scale, best verbal response, none, at arrival to emergency department -R402213 Coma scale, best verbal response, none, at hospital admission -R402214 Coma scale, best verbal response, none, 24 hours or more after hospital admission -R402220 Coma scale, best verbal response, incomprehensible words, unspecified time -R402221 Coma scale, best verbal response, incomprehensible words, in the field [EMT or ambulance] -R402222 Coma scale, best verbal response, incomprehensible words, at arrival to emergency department -R402223 Coma scale, best verbal response, incomprehensible words, at hospital admission -R402224 Coma scale, best verbal response, incomprehensible words, 24 hours or more after hospital admission -R402230 Coma scale, best verbal response, inappropriate words, unspecified time -R402231 Coma scale, best verbal response, inappropriate words, in the field [EMT or ambulance] -R402232 Coma scale, best verbal response, inappropriate words, at arrival to emergency department -R402233 Coma scale, best verbal response, inappropriate words, at hospital admission -R402234 Coma scale, best verbal response, inappropriate words, 24 hours or more after hospital admission -R402240 Coma scale, best verbal response, confused conversation, unspecified time -R402241 Coma scale, best verbal response, confused conversation, in the field [EMT or ambulance] -R402242 Coma scale, best verbal response, confused conversation, at arrival to emergency department -R402243 Coma scale, best verbal response, confused conversation, at hospital admission -R402244 Coma scale, best verbal response, confused conversation, 24 hours or more after hospital admission -R402250 Coma scale, best verbal response, oriented, unspecified time -R402251 Coma scale, best verbal response, oriented, in the field [EMT or ambulance] -R402252 Coma scale, best verbal response, oriented, at arrival to emergency department -R402253 Coma scale, best verbal response, oriented, at hospital admission -R402254 Coma scale, best verbal response, oriented, 24 hours or more after hospital admission -R402310 Coma scale, best motor response, none, unspecified time -R402311 Coma scale, best motor response, none, in the field [EMT or ambulance] -R402312 Coma scale, best motor response, none, at arrival to emergency department -R402313 Coma scale, best motor response, none, at hospital admission -R402314 Coma scale, best motor response, none, 24 hours or more after hospital admission -R402320 Coma scale, best motor response, extension, unspecified time -R402321 Coma scale, best motor response, extension, in the field [EMT or ambulance] -R402322 Coma scale, best motor response, extension, at arrival to emergency department -R402323 Coma scale, best motor response, extension, at hospital admission -R402324 Coma scale, best motor response, extension, 24 hours or more after hospital admission -R402330 Coma scale, best motor response, abnormal, unspecified time -R402331 Coma scale, best motor response, abnormal, in the field [EMT or ambulance] -R402332 Coma scale, best motor response, abnormal, at arrival to emergency department -R402333 Coma scale, best motor response, abnormal, at hospital admission -R402334 Coma scale, best motor response, abnormal, 24 hours or more after hospital admission -R402340 Coma scale, best motor response, flexion withdrawal, unspecified time -R402341 Coma scale, best motor response, flexion withdrawal, in the field [EMT or ambulance] -R402342 Coma scale, best motor response, flexion withdrawal, at arrival to emergency department -R402343 Coma scale, best motor response, flexion withdrawal, at hospital admission -R402344 Coma scale, best motor response, flexion withdrawal, 24 hours or more after hospital admission -R402350 Coma scale, best motor response, localizes pain, unspecified time -R402351 Coma scale, best motor response, localizes pain, in the field [EMT or ambulance] -R402352 Coma scale, best motor response, localizes pain, at arrival to emergency department -R402353 Coma scale, best motor response, localizes pain, at hospital admission -R402354 Coma scale, best motor response, localizes pain, 24 hours or more after hospital admission -R402360 Coma scale, best motor response, obeys commands, unspecified time -R402361 Coma scale, best motor response, obeys commands, in the field [EMT or ambulance] -R402362 Coma scale, best motor response, obeys commands, at arrival to emergency department -R402363 Coma scale, best motor response, obeys commands, at hospital admission -R402364 Coma scale, best motor response, obeys commands, 24 hours or more after hospital admission -R402410 Glasgow coma scale score 13-15, unspecified time -R402411 Glasgow coma scale score 13-15, in the field [EMT or ambulance] -R402412 Glasgow coma scale score 13-15, at arrival to emergency department -R402413 Glasgow coma scale score 13-15, at hospital admission -R402414 Glasgow coma scale score 13-15, 24 hours or more after hospital admission -R402420 Glasgow coma scale score 9-12, unspecified time -R402421 Glasgow coma scale score 9-12, in the field [EMT or ambulance] -R402422 Glasgow coma scale score 9-12, at arrival to emergency department -R402423 Glasgow coma scale score 9-12, at hospital admission -R402424 Glasgow coma scale score 9-12, 24 hours or more after hospital admission -R402430 Glasgow coma scale score 3-8, unspecified time -R402431 Glasgow coma scale score 3-8, in the field [EMT or ambulance] -R402432 Glasgow coma scale score 3-8, at arrival to emergency department -R402433 Glasgow coma scale score 3-8, at hospital admission -R402434 Glasgow coma scale score 3-8, 24 hours or more after hospital admission -R402440 Other coma, without documented Glasgow coma scale score, or with partial score reported, unspecified time -R402441 Other coma, without documented Glasgow coma scale score, or with partial score reported, in the field [EMT or ambulance] -R402442 Other coma, without documented Glasgow coma scale score, or with partial score reported, at arrival to emergency department -R402443 Other coma, without documented Glasgow coma scale score, or with partial score reported, at hospital admission -R402444 Other coma, without documented Glasgow coma scale score, or with partial score reported, 24 hours or more after hospital admission -R403 Persistent vegetative state -R404 Transient alteration of awareness -R410 Disorientation, unspecified -R411 Anterograde amnesia -R412 Retrograde amnesia -R413 Other amnesia -R414 Neurologic neglect syndrome -R4181 Age-related cognitive decline -R4182 Altered mental status, unspecified -R4183 Borderline intellectual functioning -R41840 Attention and concentration deficit -R41841 Cognitive communication deficit -R41842 Visuospatial deficit -R41843 Psychomotor deficit -R41844 Frontal lobe and executive function deficit -R4189 Other symptoms and signs involving cognitive functions and awareness -R419 Unspecified symptoms and signs involving cognitive functions and awareness -R42 Dizziness and giddiness -R430 Anosmia -R431 Parosmia -R432 Parageusia -R438 Other disturbances of smell and taste -R439 Unspecified disturbances of smell and taste -R440 Auditory hallucinations -R441 Visual hallucinations -R442 Other hallucinations -R443 Hallucinations, unspecified -R448 Other symptoms and signs involving general sensations and perceptions -R449 Unspecified symptoms and signs involving general sensations and perceptions -R450 Nervousness -R451 Restlessness and agitation -R452 Unhappiness -R453 Demoralization and apathy -R454 Irritability and anger -R455 Hostility -R456 Violent behavior -R457 State of emotional shock and stress, unspecified -R4581 Low self-esteem -R4582 Worries -R4583 Excessive crying of child, adolescent or adult -R4584 Anhedonia -R45850 Homicidal ideations -R45851 Suicidal ideations -R4586 Emotional lability -R4587 Impulsiveness -R4589 Other symptoms and signs involving emotional state -R460 Very low level of personal hygiene -R461 Bizarre personal appearance -R462 Strange and inexplicable behavior -R463 Overactivity -R464 Slowness and poor responsiveness -R465 Suspiciousness and marked evasiveness -R466 Undue concern and preoccupation with stressful events -R467 Verbosity and circumstantial detail obscuring reason for contact -R4681 Obsessive-compulsive behavior -R4689 Other symptoms and signs involving appearance and behavior -R4701 Aphasia -R4702 Dysphasia -R471 Dysarthria and anarthria -R4781 Slurred speech -R4782 Fluency disorder in conditions classified elsewhere -R4789 Other speech disturbances -R479 Unspecified speech disturbances -R480 Dyslexia and alexia -R481 Agnosia -R482 Apraxia -R483 Visual agnosia -R488 Other symbolic dysfunctions -R489 Unspecified symbolic dysfunctions -R490 Dysphonia -R491 Aphonia -R4921 Hypernasality -R4922 Hyponasality -R498 Other voice and resonance disorders -R499 Unspecified voice and resonance disorder -R502 Drug induced fever -R5081 Fever presenting with conditions classified elsewhere -R5082 Postprocedural fever -R5083 Postvaccination fever -R5084 Febrile nonhemolytic transfusion reaction -R509 Fever, unspecified -R51 Headache -R52 Pain, unspecified -R530 Neoplastic (malignant) related fatigue -R531 Weakness -R532 Functional quadriplegia -R5381 Other malaise -R5382 Chronic fatigue, unspecified -R5383 Other fatigue -R54 Age-related physical debility -R55 Syncope and collapse -R5600 Simple febrile convulsions -R5601 Complex febrile convulsions -R561 Post traumatic seizures -R569 Unspecified convulsions -R570 Cardiogenic shock -R571 Hypovolemic shock -R578 Other shock -R579 Shock, unspecified -R58 Hemorrhage, not elsewhere classified -R590 Localized enlarged lymph nodes -R591 Generalized enlarged lymph nodes -R599 Enlarged lymph nodes, unspecified -R600 Localized edema -R601 Generalized edema -R609 Edema, unspecified -R61 Generalized hyperhidrosis -R620 Delayed milestone in childhood -R6250 Unspecified lack of expected normal physiological development in childhood -R6251 Failure to thrive (child) -R6252 Short stature (child) -R6259 Other lack of expected normal physiological development in childhood -R627 Adult failure to thrive -R630 Anorexia -R631 Polydipsia -R632 Polyphagia -R633 Feeding difficulties -R634 Abnormal weight loss -R635 Abnormal weight gain -R636 Underweight -R638 Other symptoms and signs concerning food and fluid intake -R64 Cachexia -R6510 Systemic inflammatory response syndrome (SIRS) of non-infectious origin without acute organ dysfunction -R6511 Systemic inflammatory response syndrome (SIRS) of non-infectious origin with acute organ dysfunction -R6520 Severe sepsis without septic shock -R6521 Severe sepsis with septic shock -R680 Hypothermia, not associated with low environmental temperature -R6811 Excessive crying of infant (baby) -R6812 Fussy infant (baby) -R6813 Apparent life threatening event in infant (ALTE) -R6819 Other nonspecific symptoms peculiar to infancy -R682 Dry mouth, unspecified -R683 Clubbing of fingers -R6881 Early satiety -R6882 Decreased libido -R6883 Chills (without fever) -R6884 Jaw pain -R6889 Other general symptoms and signs -R69 Illness, unspecified -R700 Elevated erythrocyte sedimentation rate -R701 Abnormal plasma viscosity -R710 Precipitous drop in hematocrit -R718 Other abnormality of red blood cells -R7301 Impaired fasting glucose -R7302 Impaired glucose tolerance (oral) -R7303 Prediabetes -R7309 Other abnormal glucose -R739 Hyperglycemia, unspecified -R740 Nonspecific elevation of levels of transaminase and lactic acid dehydrogenase [LDH] -R748 Abnormal levels of other serum enzymes -R749 Abnormal serum enzyme level, unspecified -R75 Inconclusive laboratory evidence of human immunodeficiency virus [HIV] -R760 Raised antibody titer -R7611 Nonspecific reaction to tuberculin skin test without active tuberculosis -R7612 Nonspecific reaction to cell mediated immunity measurement of gamma interferon antigen response without active tuberculosis -R768 Other specified abnormal immunological findings in serum -R769 Abnormal immunological finding in serum, unspecified -R770 Abnormality of albumin -R771 Abnormality of globulin -R772 Abnormality of alphafetoprotein -R778 Other specified abnormalities of plasma proteins -R779 Abnormality of plasma protein, unspecified -R780 Finding of alcohol in blood -R781 Finding of opiate drug in blood -R782 Finding of cocaine in blood -R783 Finding of hallucinogen in blood -R784 Finding of other drugs of addictive potential in blood -R785 Finding of other psychotropic drug in blood -R786 Finding of steroid agent in blood -R7871 Abnormal lead level in blood -R7879 Finding of abnormal level of heavy metals in blood -R7881 Bacteremia -R7889 Finding of other specified substances, not normally found in blood -R789 Finding of unspecified substance, not normally found in blood -R790 Abnormal level of blood mineral -R791 Abnormal coagulation profile -R7981 Abnormal blood-gas level -R7982 Elevated C-reactive protein (CRP) -R7989 Other specified abnormal findings of blood chemistry -R799 Abnormal finding of blood chemistry, unspecified -R800 Isolated proteinuria -R801 Persistent proteinuria, unspecified -R802 Orthostatic proteinuria, unspecified -R803 Bence Jones proteinuria -R808 Other proteinuria -R809 Proteinuria, unspecified -R81 Glycosuria -R820 Chyluria -R821 Myoglobinuria -R822 Biliuria -R823 Hemoglobinuria -R824 Acetonuria -R825 Elevated urine levels of drugs, medicaments and biological substances -R826 Abnormal urine levels of substances chiefly nonmedicinal as to source -R8271 Bacteriuria -R8279 Other abnormal findings on microbiological examination of urine -R828 Abnormal findings on cytological and histological examination of urine -R8290 Unspecified abnormal findings in urine -R8291 Other chromoabnormalities of urine -R8299 Other abnormal findings in urine -R830 Abnormal level of enzymes in cerebrospinal fluid -R831 Abnormal level of hormones in cerebrospinal fluid -R832 Abnormal level of other drugs, medicaments and biological substances in cerebrospinal fluid -R833 Abnormal level of substances chiefly nonmedicinal as to source in cerebrospinal fluid -R834 Abnormal immunological findings in cerebrospinal fluid -R835 Abnormal microbiological findings in cerebrospinal fluid -R836 Abnormal cytological findings in cerebrospinal fluid -R838 Other abnormal findings in cerebrospinal fluid -R839 Unspecified abnormal finding in cerebrospinal fluid -R840 Abnormal level of enzymes in specimens from respiratory organs and thorax -R841 Abnormal level of hormones in specimens from respiratory organs and thorax -R842 Abnormal level of other drugs, medicaments and biological substances in specimens from respiratory organs and thorax -R843 Abnormal level of substances chiefly nonmedicinal as to source in specimens from respiratory organs and thorax -R844 Abnormal immunological findings in specimens from respiratory organs and thorax -R845 Abnormal microbiological findings in specimens from respiratory organs and thorax -R846 Abnormal cytological findings in specimens from respiratory organs and thorax -R847 Abnormal histological findings in specimens from respiratory organs and thorax -R848 Other abnormal findings in specimens from respiratory organs and thorax -R849 Unspecified abnormal finding in specimens from respiratory organs and thorax -R850 Abnormal level of enzymes in specimens from digestive organs and abdominal cavity -R851 Abnormal level of hormones in specimens from digestive organs and abdominal cavity -R852 Abnormal level of other drugs, medicaments and biological substances in specimens from digestive organs and abdominal cavity -R853 Abnormal level of substances chiefly nonmedicinal as to source in specimens from digestive organs and abdominal cavity -R854 Abnormal immunological findings in specimens from digestive organs and abdominal cavity -R855 Abnormal microbiological findings in specimens from digestive organs and abdominal cavity -R85610 Atypical squamous cells of undetermined significance on cytologic smear of anus (ASC-US) -R85611 Atypical squamous cells cannot exclude high grade squamous intraepithelial lesion on cytologic smear of anus (ASC-H) -R85612 Low grade squamous intraepithelial lesion on cytologic smear of anus (LGSIL) -R85613 High grade squamous intraepithelial lesion on cytologic smear of anus (HGSIL) -R85614 Cytologic evidence of malignancy on smear of anus -R85615 Unsatisfactory cytologic smear of anus -R85616 Satisfactory anal smear but lacking transformation zone -R85618 Other abnormal cytological findings on specimens from anus -R85619 Unspecified abnormal cytological findings in specimens from anus -R8569 Abnormal cytological findings in specimens from other digestive organs and abdominal cavity -R857 Abnormal histological findings in specimens from digestive organs and abdominal cavity -R8581 Anal high risk human papillomavirus (HPV) DNA test positive -R8582 Anal low risk human papillomavirus (HPV) DNA test positive -R8589 Other abnormal findings in specimens from digestive organs and abdominal cavity -R859 Unspecified abnormal finding in specimens from digestive organs and abdominal cavity -R860 Abnormal level of enzymes in specimens from male genital organs -R861 Abnormal level of hormones in specimens from male genital organs -R862 Abnormal level of other drugs, medicaments and biological substances in specimens from male genital organs -R863 Abnormal level of substances chiefly nonmedicinal as to source in specimens from male genital organs -R864 Abnormal immunological findings in specimens from male genital organs -R865 Abnormal microbiological findings in specimens from male genital organs -R866 Abnormal cytological findings in specimens from male genital organs -R867 Abnormal histological findings in specimens from male genital organs -R868 Other abnormal findings in specimens from male genital organs -R869 Unspecified abnormal finding in specimens from male genital organs -R870 Abnormal level of enzymes in specimens from female genital organs -R871 Abnormal level of hormones in specimens from female genital organs -R872 Abnormal level of other drugs, medicaments and biological substances in specimens from female genital organs -R873 Abnormal level of substances chiefly nonmedicinal as to source in specimens from female genital organs -R874 Abnormal immunological findings in specimens from female genital organs -R875 Abnormal microbiological findings in specimens from female genital organs -R87610 Atypical squamous cells of undetermined significance on cytologic smear of cervix (ASC-US) -R87611 Atypical squamous cells cannot exclude high grade squamous intraepithelial lesion on cytologic smear of cervix (ASC-H) -R87612 Low grade squamous intraepithelial lesion on cytologic smear of cervix (LGSIL) -R87613 High grade squamous intraepithelial lesion on cytologic smear of cervix (HGSIL) -R87614 Cytologic evidence of malignancy on smear of cervix -R87615 Unsatisfactory cytologic smear of cervix -R87616 Satisfactory cervical smear but lacking transformation zone -R87618 Other abnormal cytological findings on specimens from cervix uteri -R87619 Unspecified abnormal cytological findings in specimens from cervix uteri -R87620 Atypical squamous cells of undetermined significance on cytologic smear of vagina (ASC-US) -R87621 Atypical squamous cells cannot exclude high grade squamous intraepithelial lesion on cytologic smear of vagina (ASC-H) -R87622 Low grade squamous intraepithelial lesion on cytologic smear of vagina (LGSIL) -R87623 High grade squamous intraepithelial lesion on cytologic smear of vagina (HGSIL) -R87624 Cytologic evidence of malignancy on smear of vagina -R87625 Unsatisfactory cytologic smear of vagina -R87628 Other abnormal cytological findings on specimens from vagina -R87629 Unspecified abnormal cytological findings in specimens from vagina -R8769 Abnormal cytological findings in specimens from other female genital organs -R877 Abnormal histological findings in specimens from female genital organs -R87810 Cervical high risk human papillomavirus (HPV) DNA test positive -R87811 Vaginal high risk human papillomavirus (HPV) DNA test positive -R87820 Cervical low risk human papillomavirus (HPV) DNA test positive -R87821 Vaginal low risk human papillomavirus (HPV) DNA test positive -R8789 Other abnormal findings in specimens from female genital organs -R879 Unspecified abnormal finding in specimens from female genital organs -R880 Cloudy (hemodialysis) (peritoneal) dialysis effluent -R888 Abnormal findings in other body fluids and substances -R890 Abnormal level of enzymes in specimens from other organs, systems and tissues -R891 Abnormal level of hormones in specimens from other organs, systems and tissues -R892 Abnormal level of other drugs, medicaments and biological substances in specimens from other organs, systems and tissues -R893 Abnormal level of substances chiefly nonmedicinal as to source in specimens from other organs, systems and tissues -R894 Abnormal immunological findings in specimens from other organs, systems and tissues -R895 Abnormal microbiological findings in specimens from other organs, systems and tissues -R896 Abnormal cytological findings in specimens from other organs, systems and tissues -R897 Abnormal histological findings in specimens from other organs, systems and tissues -R898 Other abnormal findings in specimens from other organs, systems and tissues -R899 Unspecified abnormal finding in specimens from other organs, systems and tissues -R900 Intracranial space-occupying lesion found on diagnostic imaging of central nervous system -R9081 Abnormal echoencephalogram -R9082 White matter disease, unspecified -R9089 Other abnormal findings on diagnostic imaging of central nervous system -R911 Solitary pulmonary nodule -R918 Other nonspecific abnormal finding of lung field -R920 Mammographic microcalcification found on diagnostic imaging of breast -R921 Mammographic calcification found on diagnostic imaging of breast -R922 Inconclusive mammogram -R928 Other abnormal and inconclusive findings on diagnostic imaging of breast -R930 Abnormal findings on diagnostic imaging of skull and head, not elsewhere classified -R931 Abnormal findings on diagnostic imaging of heart and coronary circulation -R932 Abnormal findings on diagnostic imaging of liver and biliary tract -R933 Abnormal findings on diagnostic imaging of other parts of digestive tract -R9341 Abnormal radiologic findings on diagnostic imaging of renal pelvis, ureter, or bladder -R93421 Abnormal radiologic findings on diagnostic imaging of right kidney -R93422 Abnormal radiologic findings on diagnostic imaging of left kidney -R93429 Abnormal radiologic findings on diagnostic imaging of unspecified kidney -R9349 Abnormal radiologic findings on diagnostic imaging of other urinary organs -R935 Abnormal findings on diagnostic imaging of other abdominal regions, including retroperitoneum -R936 Abnormal findings on diagnostic imaging of limbs -R937 Abnormal findings on diagnostic imaging of other parts of musculoskeletal system -R938 Abnormal findings on diagnostic imaging of other specified body structures -R939 Diagnostic imaging inconclusive due to excess body fat of patient -R9401 Abnormal electroencephalogram [EEG] -R9402 Abnormal brain scan -R9409 Abnormal results of other function studies of central nervous system -R94110 Abnormal electro-oculogram [EOG] -R94111 Abnormal electroretinogram [ERG] -R94112 Abnormal visually evoked potential [VEP] -R94113 Abnormal oculomotor study -R94118 Abnormal results of other function studies of eye -R94120 Abnormal auditory function study -R94121 Abnormal vestibular function study -R94128 Abnormal results of other function studies of ear and other special senses -R94130 Abnormal response to nerve stimulation, unspecified -R94131 Abnormal electromyogram [EMG] -R94138 Abnormal results of other function studies of peripheral nervous system -R942 Abnormal results of pulmonary function studies -R9430 Abnormal result of cardiovascular function study, unspecified -R9431 Abnormal electrocardiogram [ECG] [EKG] -R9439 Abnormal result of other cardiovascular function study -R944 Abnormal results of kidney function studies -R945 Abnormal results of liver function studies -R946 Abnormal results of thyroid function studies -R947 Abnormal results of other endocrine function studies -R948 Abnormal results of function studies of other organs and systems -R970 Elevated carcinoembryonic antigen [CEA] -R971 Elevated cancer antigen 125 [CA 125] -R9720 Elevated prostate specific antigen [PSA] -R9721 Rising PSA following treatment for malignant neoplasm of prostate -R978 Other abnormal tumor markers -R99 Ill-defined and unknown cause of mortality -S0000XA Unspecified superficial injury of scalp, initial encounter -S0000XD Unspecified superficial injury of scalp, subsequent encounter -S0000XS Unspecified superficial injury of scalp, sequela -S0001XA Abrasion of scalp, initial encounter -S0001XD Abrasion of scalp, subsequent encounter -S0001XS Abrasion of scalp, sequela -S0002XA Blister (nonthermal) of scalp, initial encounter -S0002XD Blister (nonthermal) of scalp, subsequent encounter -S0002XS Blister (nonthermal) of scalp, sequela -S0003XA Contusion of scalp, initial encounter -S0003XD Contusion of scalp, subsequent encounter -S0003XS Contusion of scalp, sequela -S0004XA External constriction of part of scalp, initial encounter -S0004XD External constriction of part of scalp, subsequent encounter -S0004XS External constriction of part of scalp, sequela -S0005XA Superficial foreign body of scalp, initial encounter -S0005XD Superficial foreign body of scalp, subsequent encounter -S0005XS Superficial foreign body of scalp, sequela -S0006XA Insect bite (nonvenomous) of scalp, initial encounter -S0006XD Insect bite (nonvenomous) of scalp, subsequent encounter -S0006XS Insect bite (nonvenomous) of scalp, sequela -S0007XA Other superficial bite of scalp, initial encounter -S0007XD Other superficial bite of scalp, subsequent encounter -S0007XS Other superficial bite of scalp, sequela -S0010XA Contusion of unspecified eyelid and periocular area, initial encounter -S0010XD Contusion of unspecified eyelid and periocular area, subsequent encounter -S0010XS Contusion of unspecified eyelid and periocular area, sequela -S0011XA Contusion of right eyelid and periocular area, initial encounter -S0011XD Contusion of right eyelid and periocular area, subsequent encounter -S0011XS Contusion of right eyelid and periocular area, sequela -S0012XA Contusion of left eyelid and periocular area, initial encounter -S0012XD Contusion of left eyelid and periocular area, subsequent encounter -S0012XS Contusion of left eyelid and periocular area, sequela -S00201A Unspecified superficial injury of right eyelid and periocular area, initial encounter -S00201D Unspecified superficial injury of right eyelid and periocular area, subsequent encounter -S00201S Unspecified superficial injury of right eyelid and periocular area, sequela -S00202A Unspecified superficial injury of left eyelid and periocular area, initial encounter -S00202D Unspecified superficial injury of left eyelid and periocular area, subsequent encounter -S00202S Unspecified superficial injury of left eyelid and periocular area, sequela -S00209A Unspecified superficial injury of unspecified eyelid and periocular area, initial encounter -S00209D Unspecified superficial injury of unspecified eyelid and periocular area, subsequent encounter -S00209S Unspecified superficial injury of unspecified eyelid and periocular area, sequela -S00211A Abrasion of right eyelid and periocular area, initial encounter -S00211D Abrasion of right eyelid and periocular area, subsequent encounter -S00211S Abrasion of right eyelid and periocular area, sequela -S00212A Abrasion of left eyelid and periocular area, initial encounter -S00212D Abrasion of left eyelid and periocular area, subsequent encounter -S00212S Abrasion of left eyelid and periocular area, sequela -S00219A Abrasion of unspecified eyelid and periocular area, initial encounter -S00219D Abrasion of unspecified eyelid and periocular area, subsequent encounter -S00219S Abrasion of unspecified eyelid and periocular area, sequela -S00221A Blister (nonthermal) of right eyelid and periocular area, initial encounter -S00221D Blister (nonthermal) of right eyelid and periocular area, subsequent encounter -S00221S Blister (nonthermal) of right eyelid and periocular area, sequela -S00222A Blister (nonthermal) of left eyelid and periocular area, initial encounter -S00222D Blister (nonthermal) of left eyelid and periocular area, subsequent encounter -S00222S Blister (nonthermal) of left eyelid and periocular area, sequela -S00229A Blister (nonthermal) of unspecified eyelid and periocular area, initial encounter -S00229D Blister (nonthermal) of unspecified eyelid and periocular area, subsequent encounter -S00229S Blister (nonthermal) of unspecified eyelid and periocular area, sequela -S00241A External constriction of right eyelid and periocular area, initial encounter -S00241D External constriction of right eyelid and periocular area, subsequent encounter -S00241S External constriction of right eyelid and periocular area, sequela -S00242A External constriction of left eyelid and periocular area, initial encounter -S00242D External constriction of left eyelid and periocular area, subsequent encounter -S00242S External constriction of left eyelid and periocular area, sequela -S00249A External constriction of unspecified eyelid and periocular area, initial encounter -S00249D External constriction of unspecified eyelid and periocular area, subsequent encounter -S00249S External constriction of unspecified eyelid and periocular area, sequela -S00251A Superficial foreign body of right eyelid and periocular area, initial encounter -S00251D Superficial foreign body of right eyelid and periocular area, subsequent encounter -S00251S Superficial foreign body of right eyelid and periocular area, sequela -S00252A Superficial foreign body of left eyelid and periocular area, initial encounter -S00252D Superficial foreign body of left eyelid and periocular area, subsequent encounter -S00252S Superficial foreign body of left eyelid and periocular area, sequela -S00259A Superficial foreign body of unspecified eyelid and periocular area, initial encounter -S00259D Superficial foreign body of unspecified eyelid and periocular area, subsequent encounter -S00259S Superficial foreign body of unspecified eyelid and periocular area, sequela -S00261A Insect bite (nonvenomous) of right eyelid and periocular area, initial encounter -S00261D Insect bite (nonvenomous) of right eyelid and periocular area, subsequent encounter -S00261S Insect bite (nonvenomous) of right eyelid and periocular area, sequela -S00262A Insect bite (nonvenomous) of left eyelid and periocular area, initial encounter -S00262D Insect bite (nonvenomous) of left eyelid and periocular area, subsequent encounter -S00262S Insect bite (nonvenomous) of left eyelid and periocular area, sequela -S00269A Insect bite (nonvenomous) of unspecified eyelid and periocular area, initial encounter -S00269D Insect bite (nonvenomous) of unspecified eyelid and periocular area, subsequent encounter -S00269S Insect bite (nonvenomous) of unspecified eyelid and periocular area, sequela -S00271A Other superficial bite of right eyelid and periocular area, initial encounter -S00271D Other superficial bite of right eyelid and periocular area, subsequent encounter -S00271S Other superficial bite of right eyelid and periocular area, sequela -S00272A Other superficial bite of left eyelid and periocular area, initial encounter -S00272D Other superficial bite of left eyelid and periocular area, subsequent encounter -S00272S Other superficial bite of left eyelid and periocular area, sequela -S00279A Other superficial bite of unspecified eyelid and periocular area, initial encounter -S00279D Other superficial bite of unspecified eyelid and periocular area, subsequent encounter -S00279S Other superficial bite of unspecified eyelid and periocular area, sequela -S0030XA Unspecified superficial injury of nose, initial encounter -S0030XD Unspecified superficial injury of nose, subsequent encounter -S0030XS Unspecified superficial injury of nose, sequela -S0031XA Abrasion of nose, initial encounter -S0031XD Abrasion of nose, subsequent encounter -S0031XS Abrasion of nose, sequela -S0032XA Blister (nonthermal) of nose, initial encounter -S0032XD Blister (nonthermal) of nose, subsequent encounter -S0032XS Blister (nonthermal) of nose, sequela -S0033XA Contusion of nose, initial encounter -S0033XD Contusion of nose, subsequent encounter -S0033XS Contusion of nose, sequela -S0034XA External constriction of nose, initial encounter -S0034XD External constriction of nose, subsequent encounter -S0034XS External constriction of nose, sequela -S0035XA Superficial foreign body of nose, initial encounter -S0035XD Superficial foreign body of nose, subsequent encounter -S0035XS Superficial foreign body of nose, sequela -S0036XA Insect bite (nonvenomous) of nose, initial encounter -S0036XD Insect bite (nonvenomous) of nose, subsequent encounter -S0036XS Insect bite (nonvenomous) of nose, sequela -S0037XA Other superficial bite of nose, initial encounter -S0037XD Other superficial bite of nose, subsequent encounter -S0037XS Other superficial bite of nose, sequela -S00401A Unspecified superficial injury of right ear, initial encounter -S00401D Unspecified superficial injury of right ear, subsequent encounter -S00401S Unspecified superficial injury of right ear, sequela -S00402A Unspecified superficial injury of left ear, initial encounter -S00402D Unspecified superficial injury of left ear, subsequent encounter -S00402S Unspecified superficial injury of left ear, sequela -S00409A Unspecified superficial injury of unspecified ear, initial encounter -S00409D Unspecified superficial injury of unspecified ear, subsequent encounter -S00409S Unspecified superficial injury of unspecified ear, sequela -S00411A Abrasion of right ear, initial encounter -S00411D Abrasion of right ear, subsequent encounter -S00411S Abrasion of right ear, sequela -S00412A Abrasion of left ear, initial encounter -S00412D Abrasion of left ear, subsequent encounter -S00412S Abrasion of left ear, sequela -S00419A Abrasion of unspecified ear, initial encounter -S00419D Abrasion of unspecified ear, subsequent encounter -S00419S Abrasion of unspecified ear, sequela -S00421A Blister (nonthermal) of right ear, initial encounter -S00421D Blister (nonthermal) of right ear, subsequent encounter -S00421S Blister (nonthermal) of right ear, sequela -S00422A Blister (nonthermal) of left ear, initial encounter -S00422D Blister (nonthermal) of left ear, subsequent encounter -S00422S Blister (nonthermal) of left ear, sequela -S00429A Blister (nonthermal) of unspecified ear, initial encounter -S00429D Blister (nonthermal) of unspecified ear, subsequent encounter -S00429S Blister (nonthermal) of unspecified ear, sequela -S00431A Contusion of right ear, initial encounter -S00431D Contusion of right ear, subsequent encounter -S00431S Contusion of right ear, sequela -S00432A Contusion of left ear, initial encounter -S00432D Contusion of left ear, subsequent encounter -S00432S Contusion of left ear, sequela -S00439A Contusion of unspecified ear, initial encounter -S00439D Contusion of unspecified ear, subsequent encounter -S00439S Contusion of unspecified ear, sequela -S00441A External constriction of right ear, initial encounter -S00441D External constriction of right ear, subsequent encounter -S00441S External constriction of right ear, sequela -S00442A External constriction of left ear, initial encounter -S00442D External constriction of left ear, subsequent encounter -S00442S External constriction of left ear, sequela -S00449A External constriction of unspecified ear, initial encounter -S00449D External constriction of unspecified ear, subsequent encounter -S00449S External constriction of unspecified ear, sequela -S00451A Superficial foreign body of right ear, initial encounter -S00451D Superficial foreign body of right ear, subsequent encounter -S00451S Superficial foreign body of right ear, sequela -S00452A Superficial foreign body of left ear, initial encounter -S00452D Superficial foreign body of left ear, subsequent encounter -S00452S Superficial foreign body of left ear, sequela -S00459A Superficial foreign body of unspecified ear, initial encounter -S00459D Superficial foreign body of unspecified ear, subsequent encounter -S00459S Superficial foreign body of unspecified ear, sequela -S00461A Insect bite (nonvenomous) of right ear, initial encounter -S00461D Insect bite (nonvenomous) of right ear, subsequent encounter -S00461S Insect bite (nonvenomous) of right ear, sequela -S00462A Insect bite (nonvenomous) of left ear, initial encounter -S00462D Insect bite (nonvenomous) of left ear, subsequent encounter -S00462S Insect bite (nonvenomous) of left ear, sequela -S00469A Insect bite (nonvenomous) of unspecified ear, initial encounter -S00469D Insect bite (nonvenomous) of unspecified ear, subsequent encounter -S00469S Insect bite (nonvenomous) of unspecified ear, sequela -S00471A Other superficial bite of right ear, initial encounter -S00471D Other superficial bite of right ear, subsequent encounter -S00471S Other superficial bite of right ear, sequela -S00472A Other superficial bite of left ear, initial encounter -S00472D Other superficial bite of left ear, subsequent encounter -S00472S Other superficial bite of left ear, sequela -S00479A Other superficial bite of unspecified ear, initial encounter -S00479D Other superficial bite of unspecified ear, subsequent encounter -S00479S Other superficial bite of unspecified ear, sequela -S00501A Unspecified superficial injury of lip, initial encounter -S00501D Unspecified superficial injury of lip, subsequent encounter -S00501S Unspecified superficial injury of lip, sequela -S00502A Unspecified superficial injury of oral cavity, initial encounter -S00502D Unspecified superficial injury of oral cavity, subsequent encounter -S00502S Unspecified superficial injury of oral cavity, sequela -S00511A Abrasion of lip, initial encounter -S00511D Abrasion of lip, subsequent encounter -S00511S Abrasion of lip, sequela -S00512A Abrasion of oral cavity, initial encounter -S00512D Abrasion of oral cavity, subsequent encounter -S00512S Abrasion of oral cavity, sequela -S00521A Blister (nonthermal) of lip, initial encounter -S00521D Blister (nonthermal) of lip, subsequent encounter -S00521S Blister (nonthermal) of lip, sequela -S00522A Blister (nonthermal) of oral cavity, initial encounter -S00522D Blister (nonthermal) of oral cavity, subsequent encounter -S00522S Blister (nonthermal) of oral cavity, sequela -S00531A Contusion of lip, initial encounter -S00531D Contusion of lip, subsequent encounter -S00531S Contusion of lip, sequela -S00532A Contusion of oral cavity, initial encounter -S00532D Contusion of oral cavity, subsequent encounter -S00532S Contusion of oral cavity, sequela -S00541A External constriction of lip, initial encounter -S00541D External constriction of lip, subsequent encounter -S00541S External constriction of lip, sequela -S00542A External constriction of oral cavity, initial encounter -S00542D External constriction of oral cavity, subsequent encounter -S00542S External constriction of oral cavity, sequela -S00551A Superficial foreign body of lip, initial encounter -S00551D Superficial foreign body of lip, subsequent encounter -S00551S Superficial foreign body of lip, sequela -S00552A Superficial foreign body of oral cavity, initial encounter -S00552D Superficial foreign body of oral cavity, subsequent encounter -S00552S Superficial foreign body of oral cavity, sequela -S00561A Insect bite (nonvenomous) of lip, initial encounter -S00561D Insect bite (nonvenomous) of lip, subsequent encounter -S00561S Insect bite (nonvenomous) of lip, sequela -S00562A Insect bite (nonvenomous) of oral cavity, initial encounter -S00562D Insect bite (nonvenomous) of oral cavity, subsequent encounter -S00562S Insect bite (nonvenomous) of oral cavity, sequela -S00571A Other superficial bite of lip, initial encounter -S00571D Other superficial bite of lip, subsequent encounter -S00571S Other superficial bite of lip, sequela -S00572A Other superficial bite of oral cavity, initial encounter -S00572D Other superficial bite of oral cavity, subsequent encounter -S00572S Other superficial bite of oral cavity, sequela -S0080XA Unspecified superficial injury of other part of head, initial encounter -S0080XD Unspecified superficial injury of other part of head, subsequent encounter -S0080XS Unspecified superficial injury of other part of head, sequela -S0081XA Abrasion of other part of head, initial encounter -S0081XD Abrasion of other part of head, subsequent encounter -S0081XS Abrasion of other part of head, sequela -S0082XA Blister (nonthermal) of other part of head, initial encounter -S0082XD Blister (nonthermal) of other part of head, subsequent encounter -S0082XS Blister (nonthermal) of other part of head, sequela -S0083XA Contusion of other part of head, initial encounter -S0083XD Contusion of other part of head, subsequent encounter -S0083XS Contusion of other part of head, sequela -S0084XA External constriction of other part of head, initial encounter -S0084XD External constriction of other part of head, subsequent encounter -S0084XS External constriction of other part of head, sequela -S0085XA Superficial foreign body of other part of head, initial encounter -S0085XD Superficial foreign body of other part of head, subsequent encounter -S0085XS Superficial foreign body of other part of head, sequela -S0086XA Insect bite (nonvenomous) of other part of head, initial encounter -S0086XD Insect bite (nonvenomous) of other part of head, subsequent encounter -S0086XS Insect bite (nonvenomous) of other part of head, sequela -S0087XA Other superficial bite of other part of head, initial encounter -S0087XD Other superficial bite of other part of head, subsequent encounter -S0087XS Other superficial bite of other part of head, sequela -S0090XA Unspecified superficial injury of unspecified part of head, initial encounter -S0090XD Unspecified superficial injury of unspecified part of head, subsequent encounter -S0090XS Unspecified superficial injury of unspecified part of head, sequela -S0091XA Abrasion of unspecified part of head, initial encounter -S0091XD Abrasion of unspecified part of head, subsequent encounter -S0091XS Abrasion of unspecified part of head, sequela -S0092XA Blister (nonthermal) of unspecified part of head, initial encounter -S0092XD Blister (nonthermal) of unspecified part of head, subsequent encounter -S0092XS Blister (nonthermal) of unspecified part of head, sequela -S0093XA Contusion of unspecified part of head, initial encounter -S0093XD Contusion of unspecified part of head, subsequent encounter -S0093XS Contusion of unspecified part of head, sequela -S0094XA External constriction of unspecified part of head, initial encounter -S0094XD External constriction of unspecified part of head, subsequent encounter -S0094XS External constriction of unspecified part of head, sequela -S0095XA Superficial foreign body of unspecified part of head, initial encounter -S0095XD Superficial foreign body of unspecified part of head, subsequent encounter -S0095XS Superficial foreign body of unspecified part of head, sequela -S0096XA Insect bite (nonvenomous) of unspecified part of head, initial encounter -S0096XD Insect bite (nonvenomous) of unspecified part of head, subsequent encounter -S0096XS Insect bite (nonvenomous) of unspecified part of head, sequela -S0097XA Other superficial bite of unspecified part of head, initial encounter -S0097XD Other superficial bite of unspecified part of head, subsequent encounter -S0097XS Other superficial bite of unspecified part of head, sequela -S0100XA Unspecified open wound of scalp, initial encounter -S0100XD Unspecified open wound of scalp, subsequent encounter -S0100XS Unspecified open wound of scalp, sequela -S0101XA Laceration without foreign body of scalp, initial encounter -S0101XD Laceration without foreign body of scalp, subsequent encounter -S0101XS Laceration without foreign body of scalp, sequela -S0102XA Laceration with foreign body of scalp, initial encounter -S0102XD Laceration with foreign body of scalp, subsequent encounter -S0102XS Laceration with foreign body of scalp, sequela -S0103XA Puncture wound without foreign body of scalp, initial encounter -S0103XD Puncture wound without foreign body of scalp, subsequent encounter -S0103XS Puncture wound without foreign body of scalp, sequela -S0104XA Puncture wound with foreign body of scalp, initial encounter -S0104XD Puncture wound with foreign body of scalp, subsequent encounter -S0104XS Puncture wound with foreign body of scalp, sequela -S0105XA Open bite of scalp, initial encounter -S0105XD Open bite of scalp, subsequent encounter -S0105XS Open bite of scalp, sequela -S01101A Unspecified open wound of right eyelid and periocular area, initial encounter -S01101D Unspecified open wound of right eyelid and periocular area, subsequent encounter -S01101S Unspecified open wound of right eyelid and periocular area, sequela -S01102A Unspecified open wound of left eyelid and periocular area, initial encounter -S01102D Unspecified open wound of left eyelid and periocular area, subsequent encounter -S01102S Unspecified open wound of left eyelid and periocular area, sequela -S01109A Unspecified open wound of unspecified eyelid and periocular area, initial encounter -S01109D Unspecified open wound of unspecified eyelid and periocular area, subsequent encounter -S01109S Unspecified open wound of unspecified eyelid and periocular area, sequela -S01111A Laceration without foreign body of right eyelid and periocular area, initial encounter -S01111D Laceration without foreign body of right eyelid and periocular area, subsequent encounter -S01111S Laceration without foreign body of right eyelid and periocular area, sequela -S01112A Laceration without foreign body of left eyelid and periocular area, initial encounter -S01112D Laceration without foreign body of left eyelid and periocular area, subsequent encounter -S01112S Laceration without foreign body of left eyelid and periocular area, sequela -S01119A Laceration without foreign body of unspecified eyelid and periocular area, initial encounter -S01119D Laceration without foreign body of unspecified eyelid and periocular area, subsequent encounter -S01119S Laceration without foreign body of unspecified eyelid and periocular area, sequela -S01121A Laceration with foreign body of right eyelid and periocular area, initial encounter -S01121D Laceration with foreign body of right eyelid and periocular area, subsequent encounter -S01121S Laceration with foreign body of right eyelid and periocular area, sequela -S01122A Laceration with foreign body of left eyelid and periocular area, initial encounter -S01122D Laceration with foreign body of left eyelid and periocular area, subsequent encounter -S01122S Laceration with foreign body of left eyelid and periocular area, sequela -S01129A Laceration with foreign body of unspecified eyelid and periocular area, initial encounter -S01129D Laceration with foreign body of unspecified eyelid and periocular area, subsequent encounter -S01129S Laceration with foreign body of unspecified eyelid and periocular area, sequela -S01131A Puncture wound without foreign body of right eyelid and periocular area, initial encounter -S01131D Puncture wound without foreign body of right eyelid and periocular area, subsequent encounter -S01131S Puncture wound without foreign body of right eyelid and periocular area, sequela -S01132A Puncture wound without foreign body of left eyelid and periocular area, initial encounter -S01132D Puncture wound without foreign body of left eyelid and periocular area, subsequent encounter -S01132S Puncture wound without foreign body of left eyelid and periocular area, sequela -S01139A Puncture wound without foreign body of unspecified eyelid and periocular area, initial encounter -S01139D Puncture wound without foreign body of unspecified eyelid and periocular area, subsequent encounter -S01139S Puncture wound without foreign body of unspecified eyelid and periocular area, sequela -S01141A Puncture wound with foreign body of right eyelid and periocular area, initial encounter -S01141D Puncture wound with foreign body of right eyelid and periocular area, subsequent encounter -S01141S Puncture wound with foreign body of right eyelid and periocular area, sequela -S01142A Puncture wound with foreign body of left eyelid and periocular area, initial encounter -S01142D Puncture wound with foreign body of left eyelid and periocular area, subsequent encounter -S01142S Puncture wound with foreign body of left eyelid and periocular area, sequela -S01149A Puncture wound with foreign body of unspecified eyelid and periocular area, initial encounter -S01149D Puncture wound with foreign body of unspecified eyelid and periocular area, subsequent encounter -S01149S Puncture wound with foreign body of unspecified eyelid and periocular area, sequela -S01151A Open bite of right eyelid and periocular area, initial encounter -S01151D Open bite of right eyelid and periocular area, subsequent encounter -S01151S Open bite of right eyelid and periocular area, sequela -S01152A Open bite of left eyelid and periocular area, initial encounter -S01152D Open bite of left eyelid and periocular area, subsequent encounter -S01152S Open bite of left eyelid and periocular area, sequela -S01159A Open bite of unspecified eyelid and periocular area, initial encounter -S01159D Open bite of unspecified eyelid and periocular area, subsequent encounter -S01159S Open bite of unspecified eyelid and periocular area, sequela -S0120XA Unspecified open wound of nose, initial encounter -S0120XD Unspecified open wound of nose, subsequent encounter -S0120XS Unspecified open wound of nose, sequela -S0121XA Laceration without foreign body of nose, initial encounter -S0121XD Laceration without foreign body of nose, subsequent encounter -S0121XS Laceration without foreign body of nose, sequela -S0122XA Laceration with foreign body of nose, initial encounter -S0122XD Laceration with foreign body of nose, subsequent encounter -S0122XS Laceration with foreign body of nose, sequela -S0123XA Puncture wound without foreign body of nose, initial encounter -S0123XD Puncture wound without foreign body of nose, subsequent encounter -S0123XS Puncture wound without foreign body of nose, sequela -S0124XA Puncture wound with foreign body of nose, initial encounter -S0124XD Puncture wound with foreign body of nose, subsequent encounter -S0124XS Puncture wound with foreign body of nose, sequela -S0125XA Open bite of nose, initial encounter -S0125XD Open bite of nose, subsequent encounter -S0125XS Open bite of nose, sequela -S01301A Unspecified open wound of right ear, initial encounter -S01301D Unspecified open wound of right ear, subsequent encounter -S01301S Unspecified open wound of right ear, sequela -S01302A Unspecified open wound of left ear, initial encounter -S01302D Unspecified open wound of left ear, subsequent encounter -S01302S Unspecified open wound of left ear, sequela -S01309A Unspecified open wound of unspecified ear, initial encounter -S01309D Unspecified open wound of unspecified ear, subsequent encounter -S01309S Unspecified open wound of unspecified ear, sequela -S01311A Laceration without foreign body of right ear, initial encounter -S01311D Laceration without foreign body of right ear, subsequent encounter -S01311S Laceration without foreign body of right ear, sequela -S01312A Laceration without foreign body of left ear, initial encounter -S01312D Laceration without foreign body of left ear, subsequent encounter -S01312S Laceration without foreign body of left ear, sequela -S01319A Laceration without foreign body of unspecified ear, initial encounter -S01319D Laceration without foreign body of unspecified ear, subsequent encounter -S01319S Laceration without foreign body of unspecified ear, sequela -S01321A Laceration with foreign body of right ear, initial encounter -S01321D Laceration with foreign body of right ear, subsequent encounter -S01321S Laceration with foreign body of right ear, sequela -S01322A Laceration with foreign body of left ear, initial encounter -S01322D Laceration with foreign body of left ear, subsequent encounter -S01322S Laceration with foreign body of left ear, sequela -S01329A Laceration with foreign body of unspecified ear, initial encounter -S01329D Laceration with foreign body of unspecified ear, subsequent encounter -S01329S Laceration with foreign body of unspecified ear, sequela -S01331A Puncture wound without foreign body of right ear, initial encounter -S01331D Puncture wound without foreign body of right ear, subsequent encounter -S01331S Puncture wound without foreign body of right ear, sequela -S01332A Puncture wound without foreign body of left ear, initial encounter -S01332D Puncture wound without foreign body of left ear, subsequent encounter -S01332S Puncture wound without foreign body of left ear, sequela -S01339A Puncture wound without foreign body of unspecified ear, initial encounter -S01339D Puncture wound without foreign body of unspecified ear, subsequent encounter -S01339S Puncture wound without foreign body of unspecified ear, sequela -S01341A Puncture wound with foreign body of right ear, initial encounter -S01341D Puncture wound with foreign body of right ear, subsequent encounter -S01341S Puncture wound with foreign body of right ear, sequela -S01342A Puncture wound with foreign body of left ear, initial encounter -S01342D Puncture wound with foreign body of left ear, subsequent encounter -S01342S Puncture wound with foreign body of left ear, sequela -S01349A Puncture wound with foreign body of unspecified ear, initial encounter -S01349D Puncture wound with foreign body of unspecified ear, subsequent encounter -S01349S Puncture wound with foreign body of unspecified ear, sequela -S01351A Open bite of right ear, initial encounter -S01351D Open bite of right ear, subsequent encounter -S01351S Open bite of right ear, sequela -S01352A Open bite of left ear, initial encounter -S01352D Open bite of left ear, subsequent encounter -S01352S Open bite of left ear, sequela -S01359A Open bite of unspecified ear, initial encounter -S01359D Open bite of unspecified ear, subsequent encounter -S01359S Open bite of unspecified ear, sequela -S01401A Unspecified open wound of right cheek and temporomandibular area, initial encounter -S01401D Unspecified open wound of right cheek and temporomandibular area, subsequent encounter -S01401S Unspecified open wound of right cheek and temporomandibular area, sequela -S01402A Unspecified open wound of left cheek and temporomandibular area, initial encounter -S01402D Unspecified open wound of left cheek and temporomandibular area, subsequent encounter -S01402S Unspecified open wound of left cheek and temporomandibular area, sequela -S01409A Unspecified open wound of unspecified cheek and temporomandibular area, initial encounter -S01409D Unspecified open wound of unspecified cheek and temporomandibular area, subsequent encounter -S01409S Unspecified open wound of unspecified cheek and temporomandibular area, sequela -S01411A Laceration without foreign body of right cheek and temporomandibular area, initial encounter -S01411D Laceration without foreign body of right cheek and temporomandibular area, subsequent encounter -S01411S Laceration without foreign body of right cheek and temporomandibular area, sequela -S01412A Laceration without foreign body of left cheek and temporomandibular area, initial encounter -S01412D Laceration without foreign body of left cheek and temporomandibular area, subsequent encounter -S01412S Laceration without foreign body of left cheek and temporomandibular area, sequela -S01419A Laceration without foreign body of unspecified cheek and temporomandibular area, initial encounter -S01419D Laceration without foreign body of unspecified cheek and temporomandibular area, subsequent encounter -S01419S Laceration without foreign body of unspecified cheek and temporomandibular area, sequela -S01421A Laceration with foreign body of right cheek and temporomandibular area, initial encounter -S01421D Laceration with foreign body of right cheek and temporomandibular area, subsequent encounter -S01421S Laceration with foreign body of right cheek and temporomandibular area, sequela -S01422A Laceration with foreign body of left cheek and temporomandibular area, initial encounter -S01422D Laceration with foreign body of left cheek and temporomandibular area, subsequent encounter -S01422S Laceration with foreign body of left cheek and temporomandibular area, sequela -S01429A Laceration with foreign body of unspecified cheek and temporomandibular area, initial encounter -S01429D Laceration with foreign body of unspecified cheek and temporomandibular area, subsequent encounter -S01429S Laceration with foreign body of unspecified cheek and temporomandibular area, sequela -S01431A Puncture wound without foreign body of right cheek and temporomandibular area, initial encounter -S01431D Puncture wound without foreign body of right cheek and temporomandibular area, subsequent encounter -S01431S Puncture wound without foreign body of right cheek and temporomandibular area, sequela -S01432A Puncture wound without foreign body of left cheek and temporomandibular area, initial encounter -S01432D Puncture wound without foreign body of left cheek and temporomandibular area, subsequent encounter -S01432S Puncture wound without foreign body of left cheek and temporomandibular area, sequela -S01439A Puncture wound without foreign body of unspecified cheek and temporomandibular area, initial encounter -S01439D Puncture wound without foreign body of unspecified cheek and temporomandibular area, subsequent encounter -S01439S Puncture wound without foreign body of unspecified cheek and temporomandibular area, sequela -S01441A Puncture wound with foreign body of right cheek and temporomandibular area, initial encounter -S01441D Puncture wound with foreign body of right cheek and temporomandibular area, subsequent encounter -S01441S Puncture wound with foreign body of right cheek and temporomandibular area, sequela -S01442A Puncture wound with foreign body of left cheek and temporomandibular area, initial encounter -S01442D Puncture wound with foreign body of left cheek and temporomandibular area, subsequent encounter -S01442S Puncture wound with foreign body of left cheek and temporomandibular area, sequela -S01449A Puncture wound with foreign body of unspecified cheek and temporomandibular area, initial encounter -S01449D Puncture wound with foreign body of unspecified cheek and temporomandibular area, subsequent encounter -S01449S Puncture wound with foreign body of unspecified cheek and temporomandibular area, sequela -S01451A Open bite of right cheek and temporomandibular area, initial encounter -S01451D Open bite of right cheek and temporomandibular area, subsequent encounter -S01451S Open bite of right cheek and temporomandibular area, sequela -S01452A Open bite of left cheek and temporomandibular area, initial encounter -S01452D Open bite of left cheek and temporomandibular area, subsequent encounter -S01452S Open bite of left cheek and temporomandibular area, sequela -S01459A Open bite of unspecified cheek and temporomandibular area, initial encounter -S01459D Open bite of unspecified cheek and temporomandibular area, subsequent encounter -S01459S Open bite of unspecified cheek and temporomandibular area, sequela -S01501A Unspecified open wound of lip, initial encounter -S01501D Unspecified open wound of lip, subsequent encounter -S01501S Unspecified open wound of lip, sequela -S01502A Unspecified open wound of oral cavity, initial encounter -S01502D Unspecified open wound of oral cavity, subsequent encounter -S01502S Unspecified open wound of oral cavity, sequela -S01511A Laceration without foreign body of lip, initial encounter -S01511D Laceration without foreign body of lip, subsequent encounter -S01511S Laceration without foreign body of lip, sequela -S01512A Laceration without foreign body of oral cavity, initial encounter -S01512D Laceration without foreign body of oral cavity, subsequent encounter -S01512S Laceration without foreign body of oral cavity, sequela -S01521A Laceration with foreign body of lip, initial encounter -S01521D Laceration with foreign body of lip, subsequent encounter -S01521S Laceration with foreign body of lip, sequela -S01522A Laceration with foreign body of oral cavity, initial encounter -S01522D Laceration with foreign body of oral cavity, subsequent encounter -S01522S Laceration with foreign body of oral cavity, sequela -S01531A Puncture wound without foreign body of lip, initial encounter -S01531D Puncture wound without foreign body of lip, subsequent encounter -S01531S Puncture wound without foreign body of lip, sequela -S01532A Puncture wound without foreign body of oral cavity, initial encounter -S01532D Puncture wound without foreign body of oral cavity, subsequent encounter -S01532S Puncture wound without foreign body of oral cavity, sequela -S01541A Puncture wound with foreign body of lip, initial encounter -S01541D Puncture wound with foreign body of lip, subsequent encounter -S01541S Puncture wound with foreign body of lip, sequela -S01542A Puncture wound with foreign body of oral cavity, initial encounter -S01542D Puncture wound with foreign body of oral cavity, subsequent encounter -S01542S Puncture wound with foreign body of oral cavity, sequela -S01551A Open bite of lip, initial encounter -S01551D Open bite of lip, subsequent encounter -S01551S Open bite of lip, sequela -S01552A Open bite of oral cavity, initial encounter -S01552D Open bite of oral cavity, subsequent encounter -S01552S Open bite of oral cavity, sequela -S0180XA Unspecified open wound of other part of head, initial encounter -S0180XD Unspecified open wound of other part of head, subsequent encounter -S0180XS Unspecified open wound of other part of head, sequela -S0181XA Laceration without foreign body of other part of head, initial encounter -S0181XD Laceration without foreign body of other part of head, subsequent encounter -S0181XS Laceration without foreign body of other part of head, sequela -S0182XA Laceration with foreign body of other part of head, initial encounter -S0182XD Laceration with foreign body of other part of head, subsequent encounter -S0182XS Laceration with foreign body of other part of head, sequela -S0183XA Puncture wound without foreign body of other part of head, initial encounter -S0183XD Puncture wound without foreign body of other part of head, subsequent encounter -S0183XS Puncture wound without foreign body of other part of head, sequela -S0184XA Puncture wound with foreign body of other part of head, initial encounter -S0184XD Puncture wound with foreign body of other part of head, subsequent encounter -S0184XS Puncture wound with foreign body of other part of head, sequela -S0185XA Open bite of other part of head, initial encounter -S0185XD Open bite of other part of head, subsequent encounter -S0185XS Open bite of other part of head, sequela -S0190XA Unspecified open wound of unspecified part of head, initial encounter -S0190XD Unspecified open wound of unspecified part of head, subsequent encounter -S0190XS Unspecified open wound of unspecified part of head, sequela -S0191XA Laceration without foreign body of unspecified part of head, initial encounter -S0191XD Laceration without foreign body of unspecified part of head, subsequent encounter -S0191XS Laceration without foreign body of unspecified part of head, sequela -S0192XA Laceration with foreign body of unspecified part of head, initial encounter -S0192XD Laceration with foreign body of unspecified part of head, subsequent encounter -S0192XS Laceration with foreign body of unspecified part of head, sequela -S0193XA Puncture wound without foreign body of unspecified part of head, initial encounter -S0193XD Puncture wound without foreign body of unspecified part of head, subsequent encounter -S0193XS Puncture wound without foreign body of unspecified part of head, sequela -S0194XA Puncture wound with foreign body of unspecified part of head, initial encounter -S0194XD Puncture wound with foreign body of unspecified part of head, subsequent encounter -S0194XS Puncture wound with foreign body of unspecified part of head, sequela -S0195XA Open bite of unspecified part of head, initial encounter -S0195XD Open bite of unspecified part of head, subsequent encounter -S0195XS Open bite of unspecified part of head, sequela -S020XXA Fracture of vault of skull, initial encounter for closed fracture -S020XXB Fracture of vault of skull, initial encounter for open fracture -S020XXD Fracture of vault of skull, subsequent encounter for fracture with routine healing -S020XXG Fracture of vault of skull, subsequent encounter for fracture with delayed healing -S020XXK Fracture of vault of skull, subsequent encounter for fracture with nonunion -S020XXS Fracture of vault of skull, sequela -S02101A Fracture of base of skull, right side, initial encounter for closed fracture -S02101B Fracture of base of skull, right side, initial encounter for open fracture -S02101D Fracture of base of skull, right side, subsequent encounter for fracture with routine healing -S02101G Fracture of base of skull, right side, subsequent encounter for fracture with delayed healing -S02101K Fracture of base of skull, right side, subsequent encounter for fracture with nonunion -S02101S Fracture of base of skull, right side, sequela -S02102A Fracture of base of skull, left side, initial encounter for closed fracture -S02102B Fracture of base of skull, left side, initial encounter for open fracture -S02102D Fracture of base of skull, left side, subsequent encounter for fracture with routine healing -S02102G Fracture of base of skull, left side, subsequent encounter for fracture with delayed healing -S02102K Fracture of base of skull, left side, subsequent encounter for fracture with nonunion -S02102S Fracture of base of skull, left side, sequela -S02109A Fracture of base of skull, unspecified side, initial encounter for closed fracture -S02109B Fracture of base of skull, unspecified side, initial encounter for open fracture -S02109D Fracture of base of skull, unspecified side, subsequent encounter for fracture with routine healing -S02109G Fracture of base of skull, unspecified side, subsequent encounter for fracture with delayed healing -S02109K Fracture of base of skull, unspecified side, subsequent encounter for fracture with nonunion -S02109S Fracture of base of skull, unspecified side, sequela -S02110A Type I occipital condyle fracture, unspecified side, initial encounter for closed fracture -S02110B Type I occipital condyle fracture, unspecified side, initial encounter for open fracture -S02110D Type I occipital condyle fracture, unspecified side, subsequent encounter for fracture with routine healing -S02110G Type I occipital condyle fracture, unspecified side, subsequent encounter for fracture with delayed healing -S02110K Type I occipital condyle fracture, unspecified side, subsequent encounter for fracture with nonunion -S02110S Type I occipital condyle fracture, unspecified side, sequela -S02111A Type II occipital condyle fracture, unspecified side, initial encounter for closed fracture -S02111B Type II occipital condyle fracture, unspecified side, initial encounter for open fracture -S02111D Type II occipital condyle fracture, unspecified side, subsequent encounter for fracture with routine healing -S02111G Type II occipital condyle fracture, unspecified side, subsequent encounter for fracture with delayed healing -S02111K Type II occipital condyle fracture, unspecified side, subsequent encounter for fracture with nonunion -S02111S Type II occipital condyle fracture, unspecified side, sequela -S02112A Type III occipital condyle fracture, unspecified side, initial encounter for closed fracture -S02112B Type III occipital condyle fracture, unspecified side, initial encounter for open fracture -S02112D Type III occipital condyle fracture, unspecified side, subsequent encounter for fracture with routine healing -S02112G Type III occipital condyle fracture, unspecified side, subsequent encounter for fracture with delayed healing -S02112K Type III occipital condyle fracture, unspecified side, subsequent encounter for fracture with nonunion -S02112S Type III occipital condyle fracture, unspecified side, sequela -S02113A Unspecified occipital condyle fracture, initial encounter for closed fracture -S02113B Unspecified occipital condyle fracture, initial encounter for open fracture -S02113D Unspecified occipital condyle fracture, subsequent encounter for fracture with routine healing -S02113G Unspecified occipital condyle fracture, subsequent encounter for fracture with delayed healing -S02113K Unspecified occipital condyle fracture, subsequent encounter for fracture with nonunion -S02113S Unspecified occipital condyle fracture, sequela -S02118A Other fracture of occiput, unspecified side, initial encounter for closed fracture -S02118B Other fracture of occiput, unspecified side, initial encounter for open fracture -S02118D Other fracture of occiput, unspecified side, subsequent encounter for fracture with routine healing -S02118G Other fracture of occiput, unspecified side, subsequent encounter for fracture with delayed healing -S02118K Other fracture of occiput, unspecified side, subsequent encounter for fracture with nonunion -S02118S Other fracture of occiput, unspecified side, sequela -S02119A Unspecified fracture of occiput, initial encounter for closed fracture -S02119B Unspecified fracture of occiput, initial encounter for open fracture -S02119D Unspecified fracture of occiput, subsequent encounter for fracture with routine healing -S02119G Unspecified fracture of occiput, subsequent encounter for fracture with delayed healing -S02119K Unspecified fracture of occiput, subsequent encounter for fracture with nonunion -S02119S Unspecified fracture of occiput, sequela -S0211AA Type I occipital condyle fracture, right side, initial encounter for closed fracture -S0211AB Type I occipital condyle fracture, right side, initial encounter for open fracture -S0211AD Type I occipital condyle fracture, right side, subsequent encounter for fracture with routine healing -S0211AG Type I occipital condyle fracture, right side, subsequent encounter for fracture with delayed healing -S0211AK Type I occipital condyle fracture, right side, subsequent encounter for fracture with nonunion -S0211AS Type I occipital condyle fracture, right side, sequela -S0211BA Type I occipital condyle fracture, left side, initial encounter for closed fracture -S0211BB Type I occipital condyle fracture, left side, initial encounter for open fracture -S0211BD Type I occipital condyle fracture, left side, subsequent encounter for fracture with routine healing -S0211BG Type I occipital condyle fracture, left side, subsequent encounter for fracture with delayed healing -S0211BK Type I occipital condyle fracture, left side, subsequent encounter for fracture with nonunion -S0211BS Type I occipital condyle fracture, left side, sequela -S0211CA Type II occipital condyle fracture, right side, initial encounter for closed fracture -S0211CB Type II occipital condyle fracture, right side, initial encounter for open fracture -S0211CD Type II occipital condyle fracture, right side, subsequent encounter for fracture with routine healing -S0211CG Type II occipital condyle fracture, right side, subsequent encounter for fracture with delayed healing -S0211CK Type II occipital condyle fracture, right side, subsequent encounter for fracture with nonunion -S0211CS Type II occipital condyle fracture, right side, sequela -S0211DA Type II occipital condyle fracture, left side, initial encounter for closed fracture -S0211DB Type II occipital condyle fracture, left side, initial encounter for open fracture -S0211DD Type II occipital condyle fracture, left side, subsequent encounter for fracture with routine healing -S0211DG Type II occipital condyle fracture, left side, subsequent encounter for fracture with delayed healing -S0211DK Type II occipital condyle fracture, left side, subsequent encounter for fracture with nonunion -S0211DS Type II occipital condyle fracture, left side, sequela -S0211EA Type III occipital condyle fracture, right side, initial encounter for closed fracture -S0211EB Type III occipital condyle fracture, right side, initial encounter for open fracture -S0211ED Type III occipital condyle fracture, right side, subsequent encounter for fracture with routine healing -S0211EG Type III occipital condyle fracture, right side, subsequent encounter for fracture with delayed healing -S0211EK Type III occipital condyle fracture, right side, subsequent encounter for fracture with nonunion -S0211ES Type III occipital condyle fracture, right side, sequela -S0211FA Type III occipital condyle fracture, left side, initial encounter for closed fracture -S0211FB Type III occipital condyle fracture, left side, initial encounter for open fracture -S0211FD Type III occipital condyle fracture, left side, subsequent encounter for fracture with routine healing -S0211FG Type III occipital condyle fracture, left side, subsequent encounter for fracture with delayed healing -S0211FK Type III occipital condyle fracture, left side, subsequent encounter for fracture with nonunion -S0211FS Type III occipital condyle fracture, left side, sequela -S0211GA Other fracture of occiput, right side, initial encounter for closed fracture -S0211GB Other fracture of occiput, right side, initial encounter for open fracture -S0211GD Other fracture of occiput, right side, subsequent encounter for fracture with routine healing -S0211GG Other fracture of occiput, right side, subsequent encounter for fracture with delayed healing -S0211GK Other fracture of occiput, right side, subsequent encounter for fracture with nonunion -S0211GS Other fracture of occiput, right side, sequela -S0211HA Other fracture of occiput, left side, initial encounter for closed fracture -S0211HB Other fracture of occiput, left side, initial encounter for open fracture -S0211HD Other fracture of occiput, left side, subsequent encounter for fracture with routine healing -S0211HG Other fracture of occiput, left side, subsequent encounter for fracture with delayed healing -S0211HK Other fracture of occiput, left side, subsequent encounter for fracture with nonunion -S0211HS Other fracture of occiput, left side, sequela -S0219XA Other fracture of base of skull, initial encounter for closed fracture -S0219XB Other fracture of base of skull, initial encounter for open fracture -S0219XD Other fracture of base of skull, subsequent encounter for fracture with routine healing -S0219XG Other fracture of base of skull, subsequent encounter for fracture with delayed healing -S0219XK Other fracture of base of skull, subsequent encounter for fracture with nonunion -S0219XS Other fracture of base of skull, sequela -S022XXA Fracture of nasal bones, initial encounter for closed fracture -S022XXB Fracture of nasal bones, initial encounter for open fracture -S022XXD Fracture of nasal bones, subsequent encounter for fracture with routine healing -S022XXG Fracture of nasal bones, subsequent encounter for fracture with delayed healing -S022XXK Fracture of nasal bones, subsequent encounter for fracture with nonunion -S022XXS Fracture of nasal bones, sequela -S0230XA Fracture of orbital floor, unspecified side, initial encounter for closed fracture -S0230XB Fracture of orbital floor, unspecified side, initial encounter for open fracture -S0230XD Fracture of orbital floor, unspecified side, subsequent encounter for fracture with routine healing -S0230XG Fracture of orbital floor, unspecified side, subsequent encounter for fracture with delayed healing -S0230XK Fracture of orbital floor, unspecified side, subsequent encounter for fracture with nonunion -S0230XS Fracture of orbital floor, unspecified side, sequela -S0231XA Fracture of orbital floor, right side, initial encounter for closed fracture -S0231XB Fracture of orbital floor, right side, initial encounter for open fracture -S0231XD Fracture of orbital floor, right side, subsequent encounter for fracture with routine healing -S0231XG Fracture of orbital floor, right side, subsequent encounter for fracture with delayed healing -S0231XK Fracture of orbital floor, right side, subsequent encounter for fracture with nonunion -S0231XS Fracture of orbital floor, right side, sequela -S0232XA Fracture of orbital floor, left side, initial encounter for closed fracture -S0232XB Fracture of orbital floor, left side, initial encounter for open fracture -S0232XD Fracture of orbital floor, left side, subsequent encounter for fracture with routine healing -S0232XG Fracture of orbital floor, left side, subsequent encounter for fracture with delayed healing -S0232XK Fracture of orbital floor, left side, subsequent encounter for fracture with nonunion -S0232XS Fracture of orbital floor, left side, sequela -S02400A Malar fracture, unspecified side, initial encounter for closed fracture -S02400B Malar fracture, unspecified side, initial encounter for open fracture -S02400D Malar fracture, unspecified side, subsequent encounter for fracture with routine healing -S02400G Malar fracture, unspecified side, subsequent encounter for fracture with delayed healing -S02400K Malar fracture, unspecified side, subsequent encounter for fracture with nonunion -S02400S Malar fracture, unspecified side, sequela -S02401A Maxillary fracture, unspecified side, initial encounter for closed fracture -S02401B Maxillary fracture, unspecified side, initial encounter for open fracture -S02401D Maxillary fracture, unspecified side, subsequent encounter for fracture with routine healing -S02401G Maxillary fracture, unspecified side, subsequent encounter for fracture with delayed healing -S02401K Maxillary fracture, unspecified side, subsequent encounter for fracture with nonunion -S02401S Maxillary fracture, unspecified side, sequela -S02402A Zygomatic fracture, unspecified side, initial encounter for closed fracture -S02402B Zygomatic fracture, unspecified side, initial encounter for open fracture -S02402D Zygomatic fracture, unspecified side, subsequent encounter for fracture with routine healing -S02402G Zygomatic fracture, unspecified side, subsequent encounter for fracture with delayed healing -S02402K Zygomatic fracture, unspecified side, subsequent encounter for fracture with nonunion -S02402S Zygomatic fracture, unspecified side, sequela -S0240AA Malar fracture, right side, initial encounter for closed fracture -S0240AB Malar fracture, right side, initial encounter for open fracture -S0240AD Malar fracture, right side, subsequent encounter for fracture with routine healing -S0240AG Malar fracture, right side, subsequent encounter for fracture with delayed healing -S0240AK Malar fracture, right side, subsequent encounter for fracture with nonunion -S0240AS Malar fracture, right side, sequela -S0240BA Malar fracture, left side, initial encounter for closed fracture -S0240BB Malar fracture, left side, initial encounter for open fracture -S0240BD Malar fracture, left side, subsequent encounter for fracture with routine healing -S0240BG Malar fracture, left side, subsequent encounter for fracture with delayed healing -S0240BK Malar fracture, left side, subsequent encounter for fracture with nonunion -S0240BS Malar fracture, left side, sequela -S0240CA Maxillary fracture, right side, initial encounter for closed fracture -S0240CB Maxillary fracture, right side, initial encounter for open fracture -S0240CD Maxillary fracture, right side, subsequent encounter for fracture with routine healing -S0240CG Maxillary fracture, right side, subsequent encounter for fracture with delayed healing -S0240CK Maxillary fracture, right side, subsequent encounter for fracture with nonunion -S0240CS Maxillary fracture, right side, sequela -S0240DA Maxillary fracture, left side, initial encounter for closed fracture -S0240DB Maxillary fracture, left side, initial encounter for open fracture -S0240DD Maxillary fracture, left side, subsequent encounter for fracture with routine healing -S0240DG Maxillary fracture, left side, subsequent encounter for fracture with delayed healing -S0240DK Maxillary fracture, left side, subsequent encounter for fracture with nonunion -S0240DS Maxillary fracture, left side, sequela -S0240EA Zygomatic fracture, right side, initial encounter for closed fracture -S0240EB Zygomatic fracture, right side, initial encounter for open fracture -S0240ED Zygomatic fracture, right side, subsequent encounter for fracture with routine healing -S0240EG Zygomatic fracture, right side, subsequent encounter for fracture with delayed healing -S0240EK Zygomatic fracture, right side, subsequent encounter for fracture with nonunion -S0240ES Zygomatic fracture, right side, sequela -S0240FA Zygomatic fracture, left side, initial encounter for closed fracture -S0240FB Zygomatic fracture, left side, initial encounter for open fracture -S0240FD Zygomatic fracture, left side, subsequent encounter for fracture with routine healing -S0240FG Zygomatic fracture, left side, subsequent encounter for fracture with delayed healing -S0240FK Zygomatic fracture, left side, subsequent encounter for fracture with nonunion -S0240FS Zygomatic fracture, left side, sequela -S02411A LeFort I fracture, initial encounter for closed fracture -S02411B LeFort I fracture, initial encounter for open fracture -S02411D LeFort I fracture, subsequent encounter for fracture with routine healing -S02411G LeFort I fracture, subsequent encounter for fracture with delayed healing -S02411K LeFort I fracture, subsequent encounter for fracture with nonunion -S02411S LeFort I fracture, sequela -S02412A LeFort II fracture, initial encounter for closed fracture -S02412B LeFort II fracture, initial encounter for open fracture -S02412D LeFort II fracture, subsequent encounter for fracture with routine healing -S02412G LeFort II fracture, subsequent encounter for fracture with delayed healing -S02412K LeFort II fracture, subsequent encounter for fracture with nonunion -S02412S LeFort II fracture, sequela -S02413A LeFort III fracture, initial encounter for closed fracture -S02413B LeFort III fracture, initial encounter for open fracture -S02413D LeFort III fracture, subsequent encounter for fracture with routine healing -S02413G LeFort III fracture, subsequent encounter for fracture with delayed healing -S02413K LeFort III fracture, subsequent encounter for fracture with nonunion -S02413S LeFort III fracture, sequela -S0242XA Fracture of alveolus of maxilla, initial encounter for closed fracture -S0242XB Fracture of alveolus of maxilla, initial encounter for open fracture -S0242XD Fracture of alveolus of maxilla, subsequent encounter for fracture with routine healing -S0242XG Fracture of alveolus of maxilla, subsequent encounter for fracture with delayed healing -S0242XK Fracture of alveolus of maxilla, subsequent encounter for fracture with nonunion -S0242XS Fracture of alveolus of maxilla, sequela -S025XXA Fracture of tooth (traumatic), initial encounter for closed fracture -S025XXB Fracture of tooth (traumatic), initial encounter for open fracture -S025XXD Fracture of tooth (traumatic), subsequent encounter for fracture with routine healing -S025XXG Fracture of tooth (traumatic), subsequent encounter for fracture with delayed healing -S025XXK Fracture of tooth (traumatic), subsequent encounter for fracture with nonunion -S025XXS Fracture of tooth (traumatic), sequela -S02600A Fracture of unspecified part of body of mandible, unspecified side, initial encounter for closed fracture -S02600B Fracture of unspecified part of body of mandible, unspecified side, initial encounter for open fracture -S02600D Fracture of unspecified part of body of mandible, unspecified side, subsequent encounter for fracture with routine healing -S02600G Fracture of unspecified part of body of mandible, unspecified side, subsequent encounter for fracture with delayed healing -S02600K Fracture of unspecified part of body of mandible, unspecified side, subsequent encounter for fracture with nonunion -S02600S Fracture of unspecified part of body of mandible, unspecified side, sequela -S02601A Fracture of unspecified part of body of right mandible, initial encounter for closed fracture -S02601B Fracture of unspecified part of body of right mandible, initial encounter for open fracture -S02601D Fracture of unspecified part of body of right mandible, subsequent encounter for fracture with routine healing -S02601G Fracture of unspecified part of body of right mandible, subsequent encounter for fracture with delayed healing -S02601K Fracture of unspecified part of body of right mandible, subsequent encounter for fracture with nonunion -S02601S Fracture of unspecified part of body of right mandible, sequela -S02602A Fracture of unspecified part of body of left mandible, initial encounter for closed fracture -S02602B Fracture of unspecified part of body of left mandible, initial encounter for open fracture -S02602D Fracture of unspecified part of body of left mandible, subsequent encounter for fracture with routine healing -S02602G Fracture of unspecified part of body of left mandible, subsequent encounter for fracture with delayed healing -S02602K Fracture of unspecified part of body of left mandible, subsequent encounter for fracture with nonunion -S02602S Fracture of unspecified part of body of left mandible, sequela -S02609A Fracture of mandible, unspecified, initial encounter for closed fracture -S02609B Fracture of mandible, unspecified, initial encounter for open fracture -S02609D Fracture of mandible, unspecified, subsequent encounter for fracture with routine healing -S02609G Fracture of mandible, unspecified, subsequent encounter for fracture with delayed healing -S02609K Fracture of mandible, unspecified, subsequent encounter for fracture with nonunion -S02609S Fracture of mandible, unspecified, sequela -S02610A Fracture of condylar process of mandible, unspecified side, initial encounter for closed fracture -S02610B Fracture of condylar process of mandible, unspecified side, initial encounter for open fracture -S02610D Fracture of condylar process of mandible, unspecified side, subsequent encounter for fracture with routine healing -S02610G Fracture of condylar process of mandible, unspecified side, subsequent encounter for fracture with delayed healing -S02610K Fracture of condylar process of mandible, unspecified side, subsequent encounter for fracture with nonunion -S02610S Fracture of condylar process of mandible, unspecified side, sequela -S02611A Fracture of condylar process of right mandible, initial encounter for closed fracture -S02611B Fracture of condylar process of right mandible, initial encounter for open fracture -S02611D Fracture of condylar process of right mandible, subsequent encounter for fracture with routine healing -S02611G Fracture of condylar process of right mandible, subsequent encounter for fracture with delayed healing -S02611K Fracture of condylar process of right mandible, subsequent encounter for fracture with nonunion -S02611S Fracture of condylar process of right mandible, sequela -S02612A Fracture of condylar process of left mandible, initial encounter for closed fracture -S02612B Fracture of condylar process of left mandible, initial encounter for open fracture -S02612D Fracture of condylar process of left mandible, subsequent encounter for fracture with routine healing -S02612G Fracture of condylar process of left mandible, subsequent encounter for fracture with delayed healing -S02612K Fracture of condylar process of left mandible, subsequent encounter for fracture with nonunion -S02612S Fracture of condylar process of left mandible, sequela -S02620A Fracture of subcondylar process of mandible, unspecified side, initial encounter for closed fracture -S02620B Fracture of subcondylar process of mandible, unspecified side, initial encounter for open fracture -S02620D Fracture of subcondylar process of mandible, unspecified side, subsequent encounter for fracture with routine healing -S02620G Fracture of subcondylar process of mandible, unspecified side, subsequent encounter for fracture with delayed healing -S02620K Fracture of subcondylar process of mandible, unspecified side, subsequent encounter for fracture with nonunion -S02620S Fracture of subcondylar process of mandible, unspecified side, sequela -S02621A Fracture of subcondylar process of right mandible, initial encounter for closed fracture -S02621B Fracture of subcondylar process of right mandible, initial encounter for open fracture -S02621D Fracture of subcondylar process of right mandible, subsequent encounter for fracture with routine healing -S02621G Fracture of subcondylar process of right mandible, subsequent encounter for fracture with delayed healing -S02621K Fracture of subcondylar process of right mandible, subsequent encounter for fracture with nonunion -S02621S Fracture of subcondylar process of right mandible, sequela -S02622A Fracture of subcondylar process of left mandible, initial encounter for closed fracture -S02622B Fracture of subcondylar process of left mandible, initial encounter for open fracture -S02622D Fracture of subcondylar process of left mandible, subsequent encounter for fracture with routine healing -S02622G Fracture of subcondylar process of left mandible, subsequent encounter for fracture with delayed healing -S02622K Fracture of subcondylar process of left mandible, subsequent encounter for fracture with nonunion -S02622S Fracture of subcondylar process of left mandible, sequela -S02630A Fracture of coronoid process of mandible, unspecified side, initial encounter for closed fracture -S02630B Fracture of coronoid process of mandible, unspecified side, initial encounter for open fracture -S02630D Fracture of coronoid process of mandible, unspecified side, subsequent encounter for fracture with routine healing -S02630G Fracture of coronoid process of mandible, unspecified side, subsequent encounter for fracture with delayed healing -S02630K Fracture of coronoid process of mandible, unspecified side, subsequent encounter for fracture with nonunion -S02630S Fracture of coronoid process of mandible, unspecified side, sequela -S02631A Fracture of coronoid process of right mandible, initial encounter for closed fracture -S02631B Fracture of coronoid process of right mandible, initial encounter for open fracture -S02631D Fracture of coronoid process of right mandible, subsequent encounter for fracture with routine healing -S02631G Fracture of coronoid process of right mandible, subsequent encounter for fracture with delayed healing -S02631K Fracture of coronoid process of right mandible, subsequent encounter for fracture with nonunion -S02631S Fracture of coronoid process of right mandible, sequela -S02632A Fracture of coronoid process of left mandible, initial encounter for closed fracture -S02632B Fracture of coronoid process of left mandible, initial encounter for open fracture -S02632D Fracture of coronoid process of left mandible, subsequent encounter for fracture with routine healing -S02632G Fracture of coronoid process of left mandible, subsequent encounter for fracture with delayed healing -S02632K Fracture of coronoid process of left mandible, subsequent encounter for fracture with nonunion -S02632S Fracture of coronoid process of left mandible, sequela -S02640A Fracture of ramus of mandible, unspecified side, initial encounter for closed fracture -S02640B Fracture of ramus of mandible, unspecified side, initial encounter for open fracture -S02640D Fracture of ramus of mandible, unspecified side, subsequent encounter for fracture with routine healing -S02640G Fracture of ramus of mandible, unspecified side, subsequent encounter for fracture with delayed healing -S02640K Fracture of ramus of mandible, unspecified side, subsequent encounter for fracture with nonunion -S02640S Fracture of ramus of mandible, unspecified side, sequela -S02641A Fracture of ramus of right mandible, initial encounter for closed fracture -S02641B Fracture of ramus of right mandible, initial encounter for open fracture -S02641D Fracture of ramus of right mandible, subsequent encounter for fracture with routine healing -S02641G Fracture of ramus of right mandible, subsequent encounter for fracture with delayed healing -S02641K Fracture of ramus of right mandible, subsequent encounter for fracture with nonunion -S02641S Fracture of ramus of right mandible, sequela -S02642A Fracture of ramus of left mandible, initial encounter for closed fracture -S02642B Fracture of ramus of left mandible, initial encounter for open fracture -S02642D Fracture of ramus of left mandible, subsequent encounter for fracture with routine healing -S02642G Fracture of ramus of left mandible, subsequent encounter for fracture with delayed healing -S02642K Fracture of ramus of left mandible, subsequent encounter for fracture with nonunion -S02642S Fracture of ramus of left mandible, sequela -S02650A Fracture of angle of mandible, unspecified side, initial encounter for closed fracture -S02650B Fracture of angle of mandible, unspecified side, initial encounter for open fracture -S02650D Fracture of angle of mandible, unspecified side, subsequent encounter for fracture with routine healing -S02650G Fracture of angle of mandible, unspecified side, subsequent encounter for fracture with delayed healing -S02650K Fracture of angle of mandible, unspecified side, subsequent encounter for fracture with nonunion -S02650S Fracture of angle of mandible, unspecified side, sequela -S02651A Fracture of angle of right mandible, initial encounter for closed fracture -S02651B Fracture of angle of right mandible, initial encounter for open fracture -S02651D Fracture of angle of right mandible, subsequent encounter for fracture with routine healing -S02651G Fracture of angle of right mandible, subsequent encounter for fracture with delayed healing -S02651K Fracture of angle of right mandible, subsequent encounter for fracture with nonunion -S02651S Fracture of angle of right mandible, sequela -S02652A Fracture of angle of left mandible, initial encounter for closed fracture -S02652B Fracture of angle of left mandible, initial encounter for open fracture -S02652D Fracture of angle of left mandible, subsequent encounter for fracture with routine healing -S02652G Fracture of angle of left mandible, subsequent encounter for fracture with delayed healing -S02652K Fracture of angle of left mandible, subsequent encounter for fracture with nonunion -S02652S Fracture of angle of left mandible, sequela -S0266XA Fracture of symphysis of mandible, initial encounter for closed fracture -S0266XB Fracture of symphysis of mandible, initial encounter for open fracture -S0266XD Fracture of symphysis of mandible, subsequent encounter for fracture with routine healing -S0266XG Fracture of symphysis of mandible, subsequent encounter for fracture with delayed healing -S0266XK Fracture of symphysis of mandible, subsequent encounter for fracture with nonunion -S0266XS Fracture of symphysis of mandible, sequela -S02670A Fracture of alveolus of mandible, unspecified side, initial encounter for closed fracture -S02670B Fracture of alveolus of mandible, unspecified side, initial encounter for open fracture -S02670D Fracture of alveolus of mandible, unspecified side, subsequent encounter for fracture with routine healing -S02670G Fracture of alveolus of mandible, unspecified side, subsequent encounter for fracture with delayed healing -S02670K Fracture of alveolus of mandible, unspecified side, subsequent encounter for fracture with nonunion -S02670S Fracture of alveolus of mandible, unspecified side, sequela -S02671A Fracture of alveolus of right mandible, initial encounter for closed fracture -S02671B Fracture of alveolus of right mandible, initial encounter for open fracture -S02671D Fracture of alveolus of right mandible, subsequent encounter for fracture with routine healing -S02671G Fracture of alveolus of right mandible, subsequent encounter for fracture with delayed healing -S02671K Fracture of alveolus of right mandible, subsequent encounter for fracture with nonunion -S02671S Fracture of alveolus of right mandible, sequela -S02672A Fracture of alveolus of left mandible, initial encounter for closed fracture -S02672B Fracture of alveolus of left mandible, initial encounter for open fracture -S02672D Fracture of alveolus of left mandible, subsequent encounter for fracture with routine healing -S02672G Fracture of alveolus of left mandible, subsequent encounter for fracture with delayed healing -S02672K Fracture of alveolus of left mandible, subsequent encounter for fracture with nonunion -S02672S Fracture of alveolus of left mandible, sequela -S0269XA Fracture of mandible of other specified site, initial encounter for closed fracture -S0269XB Fracture of mandible of other specified site, initial encounter for open fracture -S0269XD Fracture of mandible of other specified site, subsequent encounter for fracture with routine healing -S0269XG Fracture of mandible of other specified site, subsequent encounter for fracture with delayed healing -S0269XK Fracture of mandible of other specified site, subsequent encounter for fracture with nonunion -S0269XS Fracture of mandible of other specified site, sequela -S0280XA Fracture of other specified skull and facial bones, unspecified side, initial encounter for closed fracture -S0280XB Fracture of other specified skull and facial bones, unspecified side, initial encounter for open fracture -S0280XD Fracture of other specified skull and facial bones, unspecified side, subsequent encounter for fracture with routine healing -S0280XG Fracture of other specified skull and facial bones, unspecified side, subsequent encounter for fracture with delayed healing -S0280XK Fracture of other specified skull and facial bones, unspecified side, subsequent encounter for fracture with nonunion -S0280XS Fracture of other specified skull and facial bones, unspecified side, sequela -S0281XA Fracture of other specified skull and facial bones, right side, initial encounter for closed fracture -S0281XB Fracture of other specified skull and facial bones, right side, initial encounter for open fracture -S0281XD Fracture of other specified skull and facial bones, right side, subsequent encounter for fracture with routine healing -S0281XG Fracture of other specified skull and facial bones, right side, subsequent encounter for fracture with delayed healing -S0281XK Fracture of other specified skull and facial bones, right side, subsequent encounter for fracture with nonunion -S0281XS Fracture of other specified skull and facial bones, right side, sequela -S0282XA Fracture of other specified skull and facial bones, left side, initial encounter for closed fracture -S0282XB Fracture of other specified skull and facial bones, left side, initial encounter for open fracture -S0282XD Fracture of other specified skull and facial bones, left side, subsequent encounter for fracture with routine healing -S0282XG Fracture of other specified skull and facial bones, left side, subsequent encounter for fracture with delayed healing -S0282XK Fracture of other specified skull and facial bones, left side, subsequent encounter for fracture with nonunion -S0282XS Fracture of other specified skull and facial bones, left side, sequela -S0291XA Unspecified fracture of skull, initial encounter for closed fracture -S0291XB Unspecified fracture of skull, initial encounter for open fracture -S0291XD Unspecified fracture of skull, subsequent encounter for fracture with routine healing -S0291XG Unspecified fracture of skull, subsequent encounter for fracture with delayed healing -S0291XK Unspecified fracture of skull, subsequent encounter for fracture with nonunion -S0291XS Unspecified fracture of skull, sequela -S0292XA Unspecified fracture of facial bones, initial encounter for closed fracture -S0292XB Unspecified fracture of facial bones, initial encounter for open fracture -S0292XD Unspecified fracture of facial bones, subsequent encounter for fracture with routine healing -S0292XG Unspecified fracture of facial bones, subsequent encounter for fracture with delayed healing -S0292XK Unspecified fracture of facial bones, subsequent encounter for fracture with nonunion -S0292XS Unspecified fracture of facial bones, sequela -S0300XA Dislocation of jaw, unspecified side, initial encounter -S0300XD Dislocation of jaw, unspecified side, subsequent encounter -S0300XS Dislocation of jaw, unspecified side, sequela -S0301XA Dislocation of jaw, right side, initial encounter -S0301XD Dislocation of jaw, right side, subsequent encounter -S0301XS Dislocation of jaw, right side, sequela -S0302XA Dislocation of jaw, left side, initial encounter -S0302XD Dislocation of jaw, left side, subsequent encounter -S0302XS Dislocation of jaw, left side, sequela -S0303XA Dislocation of jaw, bilateral, initial encounter -S0303XD Dislocation of jaw, bilateral, subsequent encounter -S0303XS Dislocation of jaw, bilateral, sequela -S031XXA Dislocation of septal cartilage of nose, initial encounter -S031XXD Dislocation of septal cartilage of nose, subsequent encounter -S031XXS Dislocation of septal cartilage of nose, sequela -S032XXA Dislocation of tooth, initial encounter -S032XXD Dislocation of tooth, subsequent encounter -S032XXS Dislocation of tooth, sequela -S0340XA Sprain of jaw, unspecified side, initial encounter -S0340XD Sprain of jaw, unspecified side, subsequent encounter -S0340XS Sprain of jaw, unspecified side, sequela -S0341XA Sprain of jaw, right side, initial encounter -S0341XD Sprain of jaw, right side, subsequent encounter -S0341XS Sprain of jaw, right side, sequela -S0342XA Sprain of jaw, left side, initial encounter -S0342XD Sprain of jaw, left side, subsequent encounter -S0342XS Sprain of jaw, left side, sequela -S0343XA Sprain of jaw, bilateral, initial encounter -S0343XD Sprain of jaw, bilateral, subsequent encounter -S0343XS Sprain of jaw, bilateral, sequela -S038XXA Sprain of joints and ligaments of other parts of head, initial encounter -S038XXD Sprain of joints and ligaments of other parts of head, subsequent encounter -S038XXS Sprain of joints and ligaments of other parts of head, sequela -S039XXA Sprain of joints and ligaments of unspecified parts of head, initial encounter -S039XXD Sprain of joints and ligaments of unspecified parts of head, subsequent encounter -S039XXS Sprain of joints and ligaments of unspecified parts of head, sequela -S04011A Injury of optic nerve, right eye, initial encounter -S04011D Injury of optic nerve, right eye, subsequent encounter -S04011S Injury of optic nerve, right eye, sequela -S04012A Injury of optic nerve, left eye, initial encounter -S04012D Injury of optic nerve, left eye, subsequent encounter -S04012S Injury of optic nerve, left eye, sequela -S04019A Injury of optic nerve, unspecified eye, initial encounter -S04019D Injury of optic nerve, unspecified eye, subsequent encounter -S04019S Injury of optic nerve, unspecified eye, sequela -S0402XA Injury of optic chiasm, initial encounter -S0402XD Injury of optic chiasm, subsequent encounter -S0402XS Injury of optic chiasm, sequela -S04031A Injury of optic tract and pathways, right eye, initial encounter -S04031D Injury of optic tract and pathways, right eye, subsequent encounter -S04031S Injury of optic tract and pathways, right eye, sequela -S04032A Injury of optic tract and pathways, left eye, initial encounter -S04032D Injury of optic tract and pathways, left eye, subsequent encounter -S04032S Injury of optic tract and pathways, left eye, sequela -S04039A Injury of optic tract and pathways, unspecified eye, initial encounter -S04039D Injury of optic tract and pathways, unspecified eye, subsequent encounter -S04039S Injury of optic tract and pathways, unspecified eye, sequela -S04041A Injury of visual cortex, right eye, initial encounter -S04041D Injury of visual cortex, right eye, subsequent encounter -S04041S Injury of visual cortex, right eye, sequela -S04042A Injury of visual cortex, left eye, initial encounter -S04042D Injury of visual cortex, left eye, subsequent encounter -S04042S Injury of visual cortex, left eye, sequela -S04049A Injury of visual cortex, unspecified eye, initial encounter -S04049D Injury of visual cortex, unspecified eye, subsequent encounter -S04049S Injury of visual cortex, unspecified eye, sequela -S0410XA Injury of oculomotor nerve, unspecified side, initial encounter -S0410XD Injury of oculomotor nerve, unspecified side, subsequent encounter -S0410XS Injury of oculomotor nerve, unspecified side, sequela -S0411XA Injury of oculomotor nerve, right side, initial encounter -S0411XD Injury of oculomotor nerve, right side, subsequent encounter -S0411XS Injury of oculomotor nerve, right side, sequela -S0412XA Injury of oculomotor nerve, left side, initial encounter -S0412XD Injury of oculomotor nerve, left side, subsequent encounter -S0412XS Injury of oculomotor nerve, left side, sequela -S0420XA Injury of trochlear nerve, unspecified side, initial encounter -S0420XD Injury of trochlear nerve, unspecified side, subsequent encounter -S0420XS Injury of trochlear nerve, unspecified side, sequela -S0421XA Injury of trochlear nerve, right side, initial encounter -S0421XD Injury of trochlear nerve, right side, subsequent encounter -S0421XS Injury of trochlear nerve, right side, sequela -S0422XA Injury of trochlear nerve, left side, initial encounter -S0422XD Injury of trochlear nerve, left side, subsequent encounter -S0422XS Injury of trochlear nerve, left side, sequela -S0430XA Injury of trigeminal nerve, unspecified side, initial encounter -S0430XD Injury of trigeminal nerve, unspecified side, subsequent encounter -S0430XS Injury of trigeminal nerve, unspecified side, sequela -S0431XA Injury of trigeminal nerve, right side, initial encounter -S0431XD Injury of trigeminal nerve, right side, subsequent encounter -S0431XS Injury of trigeminal nerve, right side, sequela -S0432XA Injury of trigeminal nerve, left side, initial encounter -S0432XD Injury of trigeminal nerve, left side, subsequent encounter -S0432XS Injury of trigeminal nerve, left side, sequela -S0440XA Injury of abducent nerve, unspecified side, initial encounter -S0440XD Injury of abducent nerve, unspecified side, subsequent encounter -S0440XS Injury of abducent nerve, unspecified side, sequela -S0441XA Injury of abducent nerve, right side, initial encounter -S0441XD Injury of abducent nerve, right side, subsequent encounter -S0441XS Injury of abducent nerve, right side, sequela -S0442XA Injury of abducent nerve, left side, initial encounter -S0442XD Injury of abducent nerve, left side, subsequent encounter -S0442XS Injury of abducent nerve, left side, sequela -S0450XA Injury of facial nerve, unspecified side, initial encounter -S0450XD Injury of facial nerve, unspecified side, subsequent encounter -S0450XS Injury of facial nerve, unspecified side, sequela -S0451XA Injury of facial nerve, right side, initial encounter -S0451XD Injury of facial nerve, right side, subsequent encounter -S0451XS Injury of facial nerve, right side, sequela -S0452XA Injury of facial nerve, left side, initial encounter -S0452XD Injury of facial nerve, left side, subsequent encounter -S0452XS Injury of facial nerve, left side, sequela -S0460XA Injury of acoustic nerve, unspecified side, initial encounter -S0460XD Injury of acoustic nerve, unspecified side, subsequent encounter -S0460XS Injury of acoustic nerve, unspecified side, sequela -S0461XA Injury of acoustic nerve, right side, initial encounter -S0461XD Injury of acoustic nerve, right side, subsequent encounter -S0461XS Injury of acoustic nerve, right side, sequela -S0462XA Injury of acoustic nerve, left side, initial encounter -S0462XD Injury of acoustic nerve, left side, subsequent encounter -S0462XS Injury of acoustic nerve, left side, sequela -S0470XA Injury of accessory nerve, unspecified side, initial encounter -S0470XD Injury of accessory nerve, unspecified side, subsequent encounter -S0470XS Injury of accessory nerve, unspecified side, sequela -S0471XA Injury of accessory nerve, right side, initial encounter -S0471XD Injury of accessory nerve, right side, subsequent encounter -S0471XS Injury of accessory nerve, right side, sequela -S0472XA Injury of accessory nerve, left side, initial encounter -S0472XD Injury of accessory nerve, left side, subsequent encounter -S0472XS Injury of accessory nerve, left side, sequela -S04811A Injury of olfactory [1st ] nerve, right side, initial encounter -S04811D Injury of olfactory [1st ] nerve, right side, subsequent encounter -S04811S Injury of olfactory [1st ] nerve, right side, sequela -S04812A Injury of olfactory [1st ] nerve, left side, initial encounter -S04812D Injury of olfactory [1st ] nerve, left side, subsequent encounter -S04812S Injury of olfactory [1st ] nerve, left side, sequela -S04819A Injury of olfactory [1st ] nerve, unspecified side, initial encounter -S04819D Injury of olfactory [1st ] nerve, unspecified side, subsequent encounter -S04819S Injury of olfactory [1st ] nerve, unspecified side, sequela -S04891A Injury of other cranial nerves, right side, initial encounter -S04891D Injury of other cranial nerves, right side, subsequent encounter -S04891S Injury of other cranial nerves, right side, sequela -S04892A Injury of other cranial nerves, left side, initial encounter -S04892D Injury of other cranial nerves, left side, subsequent encounter -S04892S Injury of other cranial nerves, left side, sequela -S04899A Injury of other cranial nerves, unspecified side, initial encounter -S04899D Injury of other cranial nerves, unspecified side, subsequent encounter -S04899S Injury of other cranial nerves, unspecified side, sequela -S049XXA Injury of unspecified cranial nerve, initial encounter -S049XXD Injury of unspecified cranial nerve, subsequent encounter -S049XXS Injury of unspecified cranial nerve, sequela -S0500XA Injury of conjunctiva and corneal abrasion without foreign body, unspecified eye, initial encounter -S0500XD Injury of conjunctiva and corneal abrasion without foreign body, unspecified eye, subsequent encounter -S0500XS Injury of conjunctiva and corneal abrasion without foreign body, unspecified eye, sequela -S0501XA Injury of conjunctiva and corneal abrasion without foreign body, right eye, initial encounter -S0501XD Injury of conjunctiva and corneal abrasion without foreign body, right eye, subsequent encounter -S0501XS Injury of conjunctiva and corneal abrasion without foreign body, right eye, sequela -S0502XA Injury of conjunctiva and corneal abrasion without foreign body, left eye, initial encounter -S0502XD Injury of conjunctiva and corneal abrasion without foreign body, left eye, subsequent encounter -S0502XS Injury of conjunctiva and corneal abrasion without foreign body, left eye, sequela -S0510XA Contusion of eyeball and orbital tissues, unspecified eye, initial encounter -S0510XD Contusion of eyeball and orbital tissues, unspecified eye, subsequent encounter -S0510XS Contusion of eyeball and orbital tissues, unspecified eye, sequela -S0511XA Contusion of eyeball and orbital tissues, right eye, initial encounter -S0511XD Contusion of eyeball and orbital tissues, right eye, subsequent encounter -S0511XS Contusion of eyeball and orbital tissues, right eye, sequela -S0512XA Contusion of eyeball and orbital tissues, left eye, initial encounter -S0512XD Contusion of eyeball and orbital tissues, left eye, subsequent encounter -S0512XS Contusion of eyeball and orbital tissues, left eye, sequela -S0520XA Ocular laceration and rupture with prolapse or loss of intraocular tissue, unspecified eye, initial encounter -S0520XD Ocular laceration and rupture with prolapse or loss of intraocular tissue, unspecified eye, subsequent encounter -S0520XS Ocular laceration and rupture with prolapse or loss of intraocular tissue, unspecified eye, sequela -S0521XA Ocular laceration and rupture with prolapse or loss of intraocular tissue, right eye, initial encounter -S0521XD Ocular laceration and rupture with prolapse or loss of intraocular tissue, right eye, subsequent encounter -S0521XS Ocular laceration and rupture with prolapse or loss of intraocular tissue, right eye, sequela -S0522XA Ocular laceration and rupture with prolapse or loss of intraocular tissue, left eye, initial encounter -S0522XD Ocular laceration and rupture with prolapse or loss of intraocular tissue, left eye, subsequent encounter -S0522XS Ocular laceration and rupture with prolapse or loss of intraocular tissue, left eye, sequela -S0530XA Ocular laceration without prolapse or loss of intraocular tissue, unspecified eye, initial encounter -S0530XD Ocular laceration without prolapse or loss of intraocular tissue, unspecified eye, subsequent encounter -S0530XS Ocular laceration without prolapse or loss of intraocular tissue, unspecified eye, sequela -S0531XA Ocular laceration without prolapse or loss of intraocular tissue, right eye, initial encounter -S0531XD Ocular laceration without prolapse or loss of intraocular tissue, right eye, subsequent encounter -S0531XS Ocular laceration without prolapse or loss of intraocular tissue, right eye, sequela -S0532XA Ocular laceration without prolapse or loss of intraocular tissue, left eye, initial encounter -S0532XD Ocular laceration without prolapse or loss of intraocular tissue, left eye, subsequent encounter -S0532XS Ocular laceration without prolapse or loss of intraocular tissue, left eye, sequela -S0540XA Penetrating wound of orbit with or without foreign body, unspecified eye, initial encounter -S0540XD Penetrating wound of orbit with or without foreign body, unspecified eye, subsequent encounter -S0540XS Penetrating wound of orbit with or without foreign body, unspecified eye, sequela -S0541XA Penetrating wound of orbit with or without foreign body, right eye, initial encounter -S0541XD Penetrating wound of orbit with or without foreign body, right eye, subsequent encounter -S0541XS Penetrating wound of orbit with or without foreign body, right eye, sequela -S0542XA Penetrating wound of orbit with or without foreign body, left eye, initial encounter -S0542XD Penetrating wound of orbit with or without foreign body, left eye, subsequent encounter -S0542XS Penetrating wound of orbit with or without foreign body, left eye, sequela -S0550XA Penetrating wound with foreign body of unspecified eyeball, initial encounter -S0550XD Penetrating wound with foreign body of unspecified eyeball, subsequent encounter -S0550XS Penetrating wound with foreign body of unspecified eyeball, sequela -S0551XA Penetrating wound with foreign body of right eyeball, initial encounter -S0551XD Penetrating wound with foreign body of right eyeball, subsequent encounter -S0551XS Penetrating wound with foreign body of right eyeball, sequela -S0552XA Penetrating wound with foreign body of left eyeball, initial encounter -S0552XD Penetrating wound with foreign body of left eyeball, subsequent encounter -S0552XS Penetrating wound with foreign body of left eyeball, sequela -S0560XA Penetrating wound without foreign body of unspecified eyeball, initial encounter -S0560XD Penetrating wound without foreign body of unspecified eyeball, subsequent encounter -S0560XS Penetrating wound without foreign body of unspecified eyeball, sequela -S0561XA Penetrating wound without foreign body of right eyeball, initial encounter -S0561XD Penetrating wound without foreign body of right eyeball, subsequent encounter -S0561XS Penetrating wound without foreign body of right eyeball, sequela -S0562XA Penetrating wound without foreign body of left eyeball, initial encounter -S0562XD Penetrating wound without foreign body of left eyeball, subsequent encounter -S0562XS Penetrating wound without foreign body of left eyeball, sequela -S0570XA Avulsion of unspecified eye, initial encounter -S0570XD Avulsion of unspecified eye, subsequent encounter -S0570XS Avulsion of unspecified eye, sequela -S0571XA Avulsion of right eye, initial encounter -S0571XD Avulsion of right eye, subsequent encounter -S0571XS Avulsion of right eye, sequela -S0572XA Avulsion of left eye, initial encounter -S0572XD Avulsion of left eye, subsequent encounter -S0572XS Avulsion of left eye, sequela -S058X1A Other injuries of right eye and orbit, initial encounter -S058X1D Other injuries of right eye and orbit, subsequent encounter -S058X1S Other injuries of right eye and orbit, sequela -S058X2A Other injuries of left eye and orbit, initial encounter -S058X2D Other injuries of left eye and orbit, subsequent encounter -S058X2S Other injuries of left eye and orbit, sequela -S058X9A Other injuries of unspecified eye and orbit, initial encounter -S058X9D Other injuries of unspecified eye and orbit, subsequent encounter -S058X9S Other injuries of unspecified eye and orbit, sequela -S0590XA Unspecified injury of unspecified eye and orbit, initial encounter -S0590XD Unspecified injury of unspecified eye and orbit, subsequent encounter -S0590XS Unspecified injury of unspecified eye and orbit, sequela -S0591XA Unspecified injury of right eye and orbit, initial encounter -S0591XD Unspecified injury of right eye and orbit, subsequent encounter -S0591XS Unspecified injury of right eye and orbit, sequela -S0592XA Unspecified injury of left eye and orbit, initial encounter -S0592XD Unspecified injury of left eye and orbit, subsequent encounter -S0592XS Unspecified injury of left eye and orbit, sequela -S060X0A Concussion without loss of consciousness, initial encounter -S060X0D Concussion without loss of consciousness, subsequent encounter -S060X0S Concussion without loss of consciousness, sequela -S060X1A Concussion with loss of consciousness of 30 minutes or less, initial encounter -S060X1D Concussion with loss of consciousness of 30 minutes or less, subsequent encounter -S060X1S Concussion with loss of consciousness of 30 minutes or less, sequela -S060X9A Concussion with loss of consciousness of unspecified duration, initial encounter -S060X9D Concussion with loss of consciousness of unspecified duration, subsequent encounter -S060X9S Concussion with loss of consciousness of unspecified duration, sequela -S061X0A Traumatic cerebral edema without loss of consciousness, initial encounter -S061X0D Traumatic cerebral edema without loss of consciousness, subsequent encounter -S061X0S Traumatic cerebral edema without loss of consciousness, sequela -S061X1A Traumatic cerebral edema with loss of consciousness of 30 minutes or less, initial encounter -S061X1D Traumatic cerebral edema with loss of consciousness of 30 minutes or less, subsequent encounter -S061X1S Traumatic cerebral edema with loss of consciousness of 30 minutes or less, sequela -S061X2A Traumatic cerebral edema with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S061X2D Traumatic cerebral edema with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S061X2S Traumatic cerebral edema with loss of consciousness of 31 minutes to 59 minutes, sequela -S061X3A Traumatic cerebral edema with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S061X3D Traumatic cerebral edema with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S061X3S Traumatic cerebral edema with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S061X4A Traumatic cerebral edema with loss of consciousness of 6 hours to 24 hours, initial encounter -S061X4D Traumatic cerebral edema with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S061X4S Traumatic cerebral edema with loss of consciousness of 6 hours to 24 hours, sequela -S061X5A Traumatic cerebral edema with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S061X5D Traumatic cerebral edema with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S061X5S Traumatic cerebral edema with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S061X6A Traumatic cerebral edema with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S061X6D Traumatic cerebral edema with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S061X6S Traumatic cerebral edema with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S061X7A Traumatic cerebral edema with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S061X7D Traumatic cerebral edema with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S061X7S Traumatic cerebral edema with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S061X8A Traumatic cerebral edema with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S061X8D Traumatic cerebral edema with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S061X8S Traumatic cerebral edema with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S061X9A Traumatic cerebral edema with loss of consciousness of unspecified duration, initial encounter -S061X9D Traumatic cerebral edema with loss of consciousness of unspecified duration, subsequent encounter -S061X9S Traumatic cerebral edema with loss of consciousness of unspecified duration, sequela -S062X0A Diffuse traumatic brain injury without loss of consciousness, initial encounter -S062X0D Diffuse traumatic brain injury without loss of consciousness, subsequent encounter -S062X0S Diffuse traumatic brain injury without loss of consciousness, sequela -S062X1A Diffuse traumatic brain injury with loss of consciousness of 30 minutes or less, initial encounter -S062X1D Diffuse traumatic brain injury with loss of consciousness of 30 minutes or less, subsequent encounter -S062X1S Diffuse traumatic brain injury with loss of consciousness of 30 minutes or less, sequela -S062X2A Diffuse traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S062X2D Diffuse traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S062X2S Diffuse traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, sequela -S062X3A Diffuse traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S062X3D Diffuse traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S062X3S Diffuse traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S062X4A Diffuse traumatic brain injury with loss of consciousness of 6 hours to 24 hours, initial encounter -S062X4D Diffuse traumatic brain injury with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S062X4S Diffuse traumatic brain injury with loss of consciousness of 6 hours to 24 hours, sequela -S062X5A Diffuse traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious levels, initial encounter -S062X5D Diffuse traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious levels, subsequent encounter -S062X5S Diffuse traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious levels, sequela -S062X6A Diffuse traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S062X6D Diffuse traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S062X6S Diffuse traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S062X7A Diffuse traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S062X7D Diffuse traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S062X7S Diffuse traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S062X8A Diffuse traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S062X8D Diffuse traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S062X8S Diffuse traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S062X9A Diffuse traumatic brain injury with loss of consciousness of unspecified duration, initial encounter -S062X9D Diffuse traumatic brain injury with loss of consciousness of unspecified duration, subsequent encounter -S062X9S Diffuse traumatic brain injury with loss of consciousness of unspecified duration, sequela -S06300A Unspecified focal traumatic brain injury without loss of consciousness, initial encounter -S06300D Unspecified focal traumatic brain injury without loss of consciousness, subsequent encounter -S06300S Unspecified focal traumatic brain injury without loss of consciousness, sequela -S06301A Unspecified focal traumatic brain injury with loss of consciousness of 30 minutes or less, initial encounter -S06301D Unspecified focal traumatic brain injury with loss of consciousness of 30 minutes or less, subsequent encounter -S06301S Unspecified focal traumatic brain injury with loss of consciousness of 30 minutes or less, sequela -S06302A Unspecified focal traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06302D Unspecified focal traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06302S Unspecified focal traumatic brain injury with loss of consciousness of 31 minutes to 59 minutes, sequela -S06303A Unspecified focal traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06303D Unspecified focal traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06303S Unspecified focal traumatic brain injury with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06304A Unspecified focal traumatic brain injury with loss of consciousness of 6 hours to 24 hours, initial encounter -S06304D Unspecified focal traumatic brain injury with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06304S Unspecified focal traumatic brain injury with loss of consciousness of 6 hours to 24 hours, sequela -S06305A Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06305D Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06305S Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06306A Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06306D Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06306S Unspecified focal traumatic brain injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06307A Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06307D Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06307S Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06308A Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06308D Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06308S Unspecified focal traumatic brain injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06309A Unspecified focal traumatic brain injury with loss of consciousness of unspecified duration, initial encounter -S06309D Unspecified focal traumatic brain injury with loss of consciousness of unspecified duration, subsequent encounter -S06309S Unspecified focal traumatic brain injury with loss of consciousness of unspecified duration, sequela -S06310A Contusion and laceration of right cerebrum without loss of consciousness, initial encounter -S06310D Contusion and laceration of right cerebrum without loss of consciousness, subsequent encounter -S06310S Contusion and laceration of right cerebrum without loss of consciousness, sequela -S06311A Contusion and laceration of right cerebrum with loss of consciousness of 30 minutes or less, initial encounter -S06311D Contusion and laceration of right cerebrum with loss of consciousness of 30 minutes or less, subsequent encounter -S06311S Contusion and laceration of right cerebrum with loss of consciousness of 30 minutes or less, sequela -S06312A Contusion and laceration of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06312D Contusion and laceration of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06312S Contusion and laceration of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, sequela -S06313A Contusion and laceration of right cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06313D Contusion and laceration of right cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06313S Contusion and laceration of right cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06314A Contusion and laceration of right cerebrum with loss of consciousness of 6 hours to 24 hours, initial encounter -S06314D Contusion and laceration of right cerebrum with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06314S Contusion and laceration of right cerebrum with loss of consciousness of 6 hours to 24 hours, sequela -S06315A Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06315D Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06315S Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06316A Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06316D Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06316S Contusion and laceration of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06317A Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06317D Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06317S Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06318A Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06318D Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06318S Contusion and laceration of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06319A Contusion and laceration of right cerebrum with loss of consciousness of unspecified duration, initial encounter -S06319D Contusion and laceration of right cerebrum with loss of consciousness of unspecified duration, subsequent encounter -S06319S Contusion and laceration of right cerebrum with loss of consciousness of unspecified duration, sequela -S06320A Contusion and laceration of left cerebrum without loss of consciousness, initial encounter -S06320D Contusion and laceration of left cerebrum without loss of consciousness, subsequent encounter -S06320S Contusion and laceration of left cerebrum without loss of consciousness, sequela -S06321A Contusion and laceration of left cerebrum with loss of consciousness of 30 minutes or less, initial encounter -S06321D Contusion and laceration of left cerebrum with loss of consciousness of 30 minutes or less, subsequent encounter -S06321S Contusion and laceration of left cerebrum with loss of consciousness of 30 minutes or less, sequela -S06322A Contusion and laceration of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06322D Contusion and laceration of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06322S Contusion and laceration of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, sequela -S06323A Contusion and laceration of left cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06323D Contusion and laceration of left cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06323S Contusion and laceration of left cerebrum with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06324A Contusion and laceration of left cerebrum with loss of consciousness of 6 hours to 24 hours, initial encounter -S06324D Contusion and laceration of left cerebrum with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06324S Contusion and laceration of left cerebrum with loss of consciousness of 6 hours to 24 hours, sequela -S06325A Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06325D Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06325S Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06326A Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06326D Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06326S Contusion and laceration of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06327A Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06327D Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06327S Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06328A Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06328D Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06328S Contusion and laceration of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06329A Contusion and laceration of left cerebrum with loss of consciousness of unspecified duration, initial encounter -S06329D Contusion and laceration of left cerebrum with loss of consciousness of unspecified duration, subsequent encounter -S06329S Contusion and laceration of left cerebrum with loss of consciousness of unspecified duration, sequela -S06330A Contusion and laceration of cerebrum, unspecified, without loss of consciousness, initial encounter -S06330D Contusion and laceration of cerebrum, unspecified, without loss of consciousness, subsequent encounter -S06330S Contusion and laceration of cerebrum, unspecified, without loss of consciousness, sequela -S06331A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, initial encounter -S06331D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, subsequent encounter -S06331S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, sequela -S06332A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06332D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06332S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, sequela -S06333A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06333D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06333S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06334A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, initial encounter -S06334D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06334S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, sequela -S06335A Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06335D Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06335S Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06336A Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06336D Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06336S Contusion and laceration of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06337A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06337D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06337S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06338A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06338D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06338S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06339A Contusion and laceration of cerebrum, unspecified, with loss of consciousness of unspecified duration, initial encounter -S06339D Contusion and laceration of cerebrum, unspecified, with loss of consciousness of unspecified duration, subsequent encounter -S06339S Contusion and laceration of cerebrum, unspecified, with loss of consciousness of unspecified duration, sequela -S06340A Traumatic hemorrhage of right cerebrum without loss of consciousness, initial encounter -S06340D Traumatic hemorrhage of right cerebrum without loss of consciousness, subsequent encounter -S06340S Traumatic hemorrhage of right cerebrum without loss of consciousness, sequela -S06341A Traumatic hemorrhage of right cerebrum with loss of consciousness of 30 minutes or less, initial encounter -S06341D Traumatic hemorrhage of right cerebrum with loss of consciousness of 30 minutes or less, subsequent encounter -S06341S Traumatic hemorrhage of right cerebrum with loss of consciousness of 30 minutes or less, sequela -S06342A Traumatic hemorrhage of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06342D Traumatic hemorrhage of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06342S Traumatic hemorrhage of right cerebrum with loss of consciousness of 31 minutes to 59 minutes, sequela -S06343A Traumatic hemorrhage of right cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, initial encounter -S06343D Traumatic hemorrhage of right cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, subsequent encounter -S06343S Traumatic hemorrhage of right cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, sequela -S06344A Traumatic hemorrhage of right cerebrum with loss of consciousness of 6 hours to 24 hours, initial encounter -S06344D Traumatic hemorrhage of right cerebrum with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06344S Traumatic hemorrhage of right cerebrum with loss of consciousness of 6 hours to 24 hours, sequela -S06345A Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06345D Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06345S Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06346A Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06346D Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06346S Traumatic hemorrhage of right cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06347A Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06347D Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06347S Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06348A Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06348D Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06348S Traumatic hemorrhage of right cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06349A Traumatic hemorrhage of right cerebrum with loss of consciousness of unspecified duration, initial encounter -S06349D Traumatic hemorrhage of right cerebrum with loss of consciousness of unspecified duration, subsequent encounter -S06349S Traumatic hemorrhage of right cerebrum with loss of consciousness of unspecified duration, sequela -S06350A Traumatic hemorrhage of left cerebrum without loss of consciousness, initial encounter -S06350D Traumatic hemorrhage of left cerebrum without loss of consciousness, subsequent encounter -S06350S Traumatic hemorrhage of left cerebrum without loss of consciousness, sequela -S06351A Traumatic hemorrhage of left cerebrum with loss of consciousness of 30 minutes or less, initial encounter -S06351D Traumatic hemorrhage of left cerebrum with loss of consciousness of 30 minutes or less, subsequent encounter -S06351S Traumatic hemorrhage of left cerebrum with loss of consciousness of 30 minutes or less, sequela -S06352A Traumatic hemorrhage of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06352D Traumatic hemorrhage of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06352S Traumatic hemorrhage of left cerebrum with loss of consciousness of 31 minutes to 59 minutes, sequela -S06353A Traumatic hemorrhage of left cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, initial encounter -S06353D Traumatic hemorrhage of left cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, subsequent encounter -S06353S Traumatic hemorrhage of left cerebrum with loss of consciousness of 1 hours to 5 hours 59 minutes, sequela -S06354A Traumatic hemorrhage of left cerebrum with loss of consciousness of 6 hours to 24 hours, initial encounter -S06354D Traumatic hemorrhage of left cerebrum with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06354S Traumatic hemorrhage of left cerebrum with loss of consciousness of 6 hours to 24 hours, sequela -S06355A Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06355D Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06355S Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06356A Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06356D Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06356S Traumatic hemorrhage of left cerebrum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06357A Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06357D Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06357S Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06358A Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06358D Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06358S Traumatic hemorrhage of left cerebrum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06359A Traumatic hemorrhage of left cerebrum with loss of consciousness of unspecified duration, initial encounter -S06359D Traumatic hemorrhage of left cerebrum with loss of consciousness of unspecified duration, subsequent encounter -S06359S Traumatic hemorrhage of left cerebrum with loss of consciousness of unspecified duration, sequela -S06360A Traumatic hemorrhage of cerebrum, unspecified, without loss of consciousness, initial encounter -S06360D Traumatic hemorrhage of cerebrum, unspecified, without loss of consciousness, subsequent encounter -S06360S Traumatic hemorrhage of cerebrum, unspecified, without loss of consciousness, sequela -S06361A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, initial encounter -S06361D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, subsequent encounter -S06361S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 30 minutes or less, sequela -S06362A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06362D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06362S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 31 minutes to 59 minutes, sequela -S06363A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 1 hours to 5 hours 59 minutes, initial encounter -S06363D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 1 hours to 5 hours 59 minutes, subsequent encounter -S06363S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 1 hours to 5 hours 59 minutes, sequela -S06364A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, initial encounter -S06364D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06364S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of 6 hours to 24 hours, sequela -S06365A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06365D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06365S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06366A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06366D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06366S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06367A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06367D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06367S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06368A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06368D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06368S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06369A Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of unspecified duration, initial encounter -S06369D Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of unspecified duration, subsequent encounter -S06369S Traumatic hemorrhage of cerebrum, unspecified, with loss of consciousness of unspecified duration, sequela -S06370A Contusion, laceration, and hemorrhage of cerebellum without loss of consciousness, initial encounter -S06370D Contusion, laceration, and hemorrhage of cerebellum without loss of consciousness, subsequent encounter -S06370S Contusion, laceration, and hemorrhage of cerebellum without loss of consciousness, sequela -S06371A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 30 minutes or less, initial encounter -S06371D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 30 minutes or less, subsequent encounter -S06371S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 30 minutes or less, sequela -S06372A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06372D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06372S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 31 minutes to 59 minutes, sequela -S06373A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06373D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06373S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06374A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 6 hours to 24 hours, initial encounter -S06374D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06374S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of 6 hours to 24 hours, sequela -S06375A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06375D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06375S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06376A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06376D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06376S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06377A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06377D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06377S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06378A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06378D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06378S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06379A Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of unspecified duration, initial encounter -S06379D Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of unspecified duration, subsequent encounter -S06379S Contusion, laceration, and hemorrhage of cerebellum with loss of consciousness of unspecified duration, sequela -S06380A Contusion, laceration, and hemorrhage of brainstem without loss of consciousness, initial encounter -S06380D Contusion, laceration, and hemorrhage of brainstem without loss of consciousness, subsequent encounter -S06380S Contusion, laceration, and hemorrhage of brainstem without loss of consciousness, sequela -S06381A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 30 minutes or less, initial encounter -S06381D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 30 minutes or less, subsequent encounter -S06381S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 30 minutes or less, sequela -S06382A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06382D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06382S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 31 minutes to 59 minutes, sequela -S06383A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06383D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06383S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06384A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 6 hours to 24 hours, initial encounter -S06384D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06384S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of 6 hours to 24 hours, sequela -S06385A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06385D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06385S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06386A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06386D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06386S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06387A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06387D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06387S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06388A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06388D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06388S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06389A Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of unspecified duration, initial encounter -S06389D Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of unspecified duration, subsequent encounter -S06389S Contusion, laceration, and hemorrhage of brainstem with loss of consciousness of unspecified duration, sequela -S064X0A Epidural hemorrhage without loss of consciousness, initial encounter -S064X0D Epidural hemorrhage without loss of consciousness, subsequent encounter -S064X0S Epidural hemorrhage without loss of consciousness, sequela -S064X1A Epidural hemorrhage with loss of consciousness of 30 minutes or less, initial encounter -S064X1D Epidural hemorrhage with loss of consciousness of 30 minutes or less, subsequent encounter -S064X1S Epidural hemorrhage with loss of consciousness of 30 minutes or less, sequela -S064X2A Epidural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S064X2D Epidural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S064X2S Epidural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, sequela -S064X3A Epidural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S064X3D Epidural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S064X3S Epidural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S064X4A Epidural hemorrhage with loss of consciousness of 6 hours to 24 hours, initial encounter -S064X4D Epidural hemorrhage with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S064X4S Epidural hemorrhage with loss of consciousness of 6 hours to 24 hours, sequela -S064X5A Epidural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S064X5D Epidural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S064X5S Epidural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S064X6A Epidural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S064X6D Epidural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S064X6S Epidural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S064X7A Epidural hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S064X7D Epidural hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S064X7S Epidural hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S064X8A Epidural hemorrhage with loss of consciousness of any duration with death due to other causes prior to regaining consciousness, initial encounter -S064X8D Epidural hemorrhage with loss of consciousness of any duration with death due to other causes prior to regaining consciousness, subsequent encounter -S064X8S Epidural hemorrhage with loss of consciousness of any duration with death due to other causes prior to regaining consciousness, sequela -S064X9A Epidural hemorrhage with loss of consciousness of unspecified duration, initial encounter -S064X9D Epidural hemorrhage with loss of consciousness of unspecified duration, subsequent encounter -S064X9S Epidural hemorrhage with loss of consciousness of unspecified duration, sequela -S065X0A Traumatic subdural hemorrhage without loss of consciousness, initial encounter -S065X0D Traumatic subdural hemorrhage without loss of consciousness, subsequent encounter -S065X0S Traumatic subdural hemorrhage without loss of consciousness, sequela -S065X1A Traumatic subdural hemorrhage with loss of consciousness of 30 minutes or less, initial encounter -S065X1D Traumatic subdural hemorrhage with loss of consciousness of 30 minutes or less, subsequent encounter -S065X1S Traumatic subdural hemorrhage with loss of consciousness of 30 minutes or less, sequela -S065X2A Traumatic subdural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S065X2D Traumatic subdural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S065X2S Traumatic subdural hemorrhage with loss of consciousness of 31 minutes to 59 minutes, sequela -S065X3A Traumatic subdural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S065X3D Traumatic subdural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S065X3S Traumatic subdural hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S065X4A Traumatic subdural hemorrhage with loss of consciousness of 6 hours to 24 hours, initial encounter -S065X4D Traumatic subdural hemorrhage with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S065X4S Traumatic subdural hemorrhage with loss of consciousness of 6 hours to 24 hours, sequela -S065X5A Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S065X5D Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S065X5S Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S065X6A Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S065X6D Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S065X6S Traumatic subdural hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S065X7A Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to brain injury before regaining consciousness, initial encounter -S065X7D Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to brain injury before regaining consciousness, subsequent encounter -S065X7S Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to brain injury before regaining consciousness, sequela -S065X8A Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to other cause before regaining consciousness, initial encounter -S065X8D Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to other cause before regaining consciousness, subsequent encounter -S065X8S Traumatic subdural hemorrhage with loss of consciousness of any duration with death due to other cause before regaining consciousness, sequela -S065X9A Traumatic subdural hemorrhage with loss of consciousness of unspecified duration, initial encounter -S065X9D Traumatic subdural hemorrhage with loss of consciousness of unspecified duration, subsequent encounter -S065X9S Traumatic subdural hemorrhage with loss of consciousness of unspecified duration, sequela -S066X0A Traumatic subarachnoid hemorrhage without loss of consciousness, initial encounter -S066X0D Traumatic subarachnoid hemorrhage without loss of consciousness, subsequent encounter -S066X0S Traumatic subarachnoid hemorrhage without loss of consciousness, sequela -S066X1A Traumatic subarachnoid hemorrhage with loss of consciousness of 30 minutes or less, initial encounter -S066X1D Traumatic subarachnoid hemorrhage with loss of consciousness of 30 minutes or less, subsequent encounter -S066X1S Traumatic subarachnoid hemorrhage with loss of consciousness of 30 minutes or less, sequela -S066X2A Traumatic subarachnoid hemorrhage with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S066X2D Traumatic subarachnoid hemorrhage with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S066X2S Traumatic subarachnoid hemorrhage with loss of consciousness of 31 minutes to 59 minutes, sequela -S066X3A Traumatic subarachnoid hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S066X3D Traumatic subarachnoid hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S066X3S Traumatic subarachnoid hemorrhage with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S066X4A Traumatic subarachnoid hemorrhage with loss of consciousness of 6 hours to 24 hours, initial encounter -S066X4D Traumatic subarachnoid hemorrhage with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S066X4S Traumatic subarachnoid hemorrhage with loss of consciousness of 6 hours to 24 hours, sequela -S066X5A Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S066X5D Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S066X5S Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S066X6A Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S066X6D Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S066X6S Traumatic subarachnoid hemorrhage with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S066X7A Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S066X7D Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S066X7S Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S066X8A Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S066X8D Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S066X8S Traumatic subarachnoid hemorrhage with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S066X9A Traumatic subarachnoid hemorrhage with loss of consciousness of unspecified duration, initial encounter -S066X9D Traumatic subarachnoid hemorrhage with loss of consciousness of unspecified duration, subsequent encounter -S066X9S Traumatic subarachnoid hemorrhage with loss of consciousness of unspecified duration, sequela -S06810A Injury of right internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, initial encounter -S06810D Injury of right internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, subsequent encounter -S06810S Injury of right internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, sequela -S06811A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, initial encounter -S06811D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, subsequent encounter -S06811S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, sequela -S06812A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06812D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06812S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, sequela -S06813A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06813D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06813S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06814A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, initial encounter -S06814D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06814S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, sequela -S06815A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06815D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06815S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06816A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06816D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06816S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06817A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06817D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06817S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06818A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06818D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06818S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06819A Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, initial encounter -S06819D Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, subsequent encounter -S06819S Injury of right internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, sequela -S06820A Injury of left internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, initial encounter -S06820D Injury of left internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, subsequent encounter -S06820S Injury of left internal carotid artery, intracranial portion, not elsewhere classified without loss of consciousness, sequela -S06821A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, initial encounter -S06821D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, subsequent encounter -S06821S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 30 minutes or less, sequela -S06822A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06822D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06822S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 31 minutes to 59 minutes, sequela -S06823A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06823D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06823S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06824A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, initial encounter -S06824D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06824S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of 6 hours to 24 hours, sequela -S06825A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06825D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06825S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06826A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06826D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06826S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06827A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06827D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06827S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06828A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06828D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06828S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06829A Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, initial encounter -S06829D Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, subsequent encounter -S06829S Injury of left internal carotid artery, intracranial portion, not elsewhere classified with loss of consciousness of unspecified duration, sequela -S06890A Other specified intracranial injury without loss of consciousness, initial encounter -S06890D Other specified intracranial injury without loss of consciousness, subsequent encounter -S06890S Other specified intracranial injury without loss of consciousness, sequela -S06891A Other specified intracranial injury with loss of consciousness of 30 minutes or less, initial encounter -S06891D Other specified intracranial injury with loss of consciousness of 30 minutes or less, subsequent encounter -S06891S Other specified intracranial injury with loss of consciousness of 30 minutes or less, sequela -S06892A Other specified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S06892D Other specified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S06892S Other specified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, sequela -S06893A Other specified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S06893D Other specified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S06893S Other specified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S06894A Other specified intracranial injury with loss of consciousness of 6 hours to 24 hours, initial encounter -S06894D Other specified intracranial injury with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S06894S Other specified intracranial injury with loss of consciousness of 6 hours to 24 hours, sequela -S06895A Other specified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S06895D Other specified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S06895S Other specified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S06896A Other specified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S06896D Other specified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S06896S Other specified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S06897A Other specified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S06897D Other specified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S06897S Other specified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S06898A Other specified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S06898D Other specified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S06898S Other specified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S06899A Other specified intracranial injury with loss of consciousness of unspecified duration, initial encounter -S06899D Other specified intracranial injury with loss of consciousness of unspecified duration, subsequent encounter -S06899S Other specified intracranial injury with loss of consciousness of unspecified duration, sequela -S069X0A Unspecified intracranial injury without loss of consciousness, initial encounter -S069X0D Unspecified intracranial injury without loss of consciousness, subsequent encounter -S069X0S Unspecified intracranial injury without loss of consciousness, sequela -S069X1A Unspecified intracranial injury with loss of consciousness of 30 minutes or less, initial encounter -S069X1D Unspecified intracranial injury with loss of consciousness of 30 minutes or less, subsequent encounter -S069X1S Unspecified intracranial injury with loss of consciousness of 30 minutes or less, sequela -S069X2A Unspecified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, initial encounter -S069X2D Unspecified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, subsequent encounter -S069X2S Unspecified intracranial injury with loss of consciousness of 31 minutes to 59 minutes, sequela -S069X3A Unspecified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, initial encounter -S069X3D Unspecified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, subsequent encounter -S069X3S Unspecified intracranial injury with loss of consciousness of 1 hour to 5 hours 59 minutes, sequela -S069X4A Unspecified intracranial injury with loss of consciousness of 6 hours to 24 hours, initial encounter -S069X4D Unspecified intracranial injury with loss of consciousness of 6 hours to 24 hours, subsequent encounter -S069X4S Unspecified intracranial injury with loss of consciousness of 6 hours to 24 hours, sequela -S069X5A Unspecified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, initial encounter -S069X5D Unspecified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, subsequent encounter -S069X5S Unspecified intracranial injury with loss of consciousness greater than 24 hours with return to pre-existing conscious level, sequela -S069X6A Unspecified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, initial encounter -S069X6D Unspecified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, subsequent encounter -S069X6S Unspecified intracranial injury with loss of consciousness greater than 24 hours without return to pre-existing conscious level with patient surviving, sequela -S069X7A Unspecified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, initial encounter -S069X7D Unspecified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, subsequent encounter -S069X7S Unspecified intracranial injury with loss of consciousness of any duration with death due to brain injury prior to regaining consciousness, sequela -S069X8A Unspecified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, initial encounter -S069X8D Unspecified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, subsequent encounter -S069X8S Unspecified intracranial injury with loss of consciousness of any duration with death due to other cause prior to regaining consciousness, sequela -S069X9A Unspecified intracranial injury with loss of consciousness of unspecified duration, initial encounter -S069X9D Unspecified intracranial injury with loss of consciousness of unspecified duration, subsequent encounter -S069X9S Unspecified intracranial injury with loss of consciousness of unspecified duration, sequela -S070XXA Crushing injury of face, initial encounter -S070XXD Crushing injury of face, subsequent encounter -S070XXS Crushing injury of face, sequela -S071XXA Crushing injury of skull, initial encounter -S071XXD Crushing injury of skull, subsequent encounter -S071XXS Crushing injury of skull, sequela -S078XXA Crushing injury of other parts of head, initial encounter -S078XXD Crushing injury of other parts of head, subsequent encounter -S078XXS Crushing injury of other parts of head, sequela -S079XXA Crushing injury of head, part unspecified, initial encounter -S079XXD Crushing injury of head, part unspecified, subsequent encounter -S079XXS Crushing injury of head, part unspecified, sequela -S080XXA Avulsion of scalp, initial encounter -S080XXD Avulsion of scalp, subsequent encounter -S080XXS Avulsion of scalp, sequela -S08111A Complete traumatic amputation of right ear, initial encounter -S08111D Complete traumatic amputation of right ear, subsequent encounter -S08111S Complete traumatic amputation of right ear, sequela -S08112A Complete traumatic amputation of left ear, initial encounter -S08112D Complete traumatic amputation of left ear, subsequent encounter -S08112S Complete traumatic amputation of left ear, sequela -S08119A Complete traumatic amputation of unspecified ear, initial encounter -S08119D Complete traumatic amputation of unspecified ear, subsequent encounter -S08119S Complete traumatic amputation of unspecified ear, sequela -S08121A Partial traumatic amputation of right ear, initial encounter -S08121D Partial traumatic amputation of right ear, subsequent encounter -S08121S Partial traumatic amputation of right ear, sequela -S08122A Partial traumatic amputation of left ear, initial encounter -S08122D Partial traumatic amputation of left ear, subsequent encounter -S08122S Partial traumatic amputation of left ear, sequela -S08129A Partial traumatic amputation of unspecified ear, initial encounter -S08129D Partial traumatic amputation of unspecified ear, subsequent encounter -S08129S Partial traumatic amputation of unspecified ear, sequela -S08811A Complete traumatic amputation of nose, initial encounter -S08811D Complete traumatic amputation of nose, subsequent encounter -S08811S Complete traumatic amputation of nose, sequela -S08812A Partial traumatic amputation of nose, initial encounter -S08812D Partial traumatic amputation of nose, subsequent encounter -S08812S Partial traumatic amputation of nose, sequela -S0889XA Traumatic amputation of other parts of head, initial encounter -S0889XD Traumatic amputation of other parts of head, subsequent encounter -S0889XS Traumatic amputation of other parts of head, sequela -S090XXA Injury of blood vessels of head, not elsewhere classified, initial encounter -S090XXD Injury of blood vessels of head, not elsewhere classified, subsequent encounter -S090XXS Injury of blood vessels of head, not elsewhere classified, sequela -S0910XA Unspecified injury of muscle and tendon of head, initial encounter -S0910XD Unspecified injury of muscle and tendon of head, subsequent encounter -S0910XS Unspecified injury of muscle and tendon of head, sequela -S0911XA Strain of muscle and tendon of head, initial encounter -S0911XD Strain of muscle and tendon of head, subsequent encounter -S0911XS Strain of muscle and tendon of head, sequela -S0912XA Laceration of muscle and tendon of head, initial encounter -S0912XD Laceration of muscle and tendon of head, subsequent encounter -S0912XS Laceration of muscle and tendon of head, sequela -S0919XA Other specified injury of muscle and tendon of head, initial encounter -S0919XD Other specified injury of muscle and tendon of head, subsequent encounter -S0919XS Other specified injury of muscle and tendon of head, sequela -S0920XA Traumatic rupture of unspecified ear drum, initial encounter -S0920XD Traumatic rupture of unspecified ear drum, subsequent encounter -S0920XS Traumatic rupture of unspecified ear drum, sequela -S0921XA Traumatic rupture of right ear drum, initial encounter -S0921XD Traumatic rupture of right ear drum, subsequent encounter -S0921XS Traumatic rupture of right ear drum, sequela -S0922XA Traumatic rupture of left ear drum, initial encounter -S0922XD Traumatic rupture of left ear drum, subsequent encounter -S0922XS Traumatic rupture of left ear drum, sequela -S09301A Unspecified injury of right middle and inner ear, initial encounter -S09301D Unspecified injury of right middle and inner ear, subsequent encounter -S09301S Unspecified injury of right middle and inner ear, sequela -S09302A Unspecified injury of left middle and inner ear, initial encounter -S09302D Unspecified injury of left middle and inner ear, subsequent encounter -S09302S Unspecified injury of left middle and inner ear, sequela -S09309A Unspecified injury of unspecified middle and inner ear, initial encounter -S09309D Unspecified injury of unspecified middle and inner ear, subsequent encounter -S09309S Unspecified injury of unspecified middle and inner ear, sequela -S09311A Primary blast injury of right ear, initial encounter -S09311D Primary blast injury of right ear, subsequent encounter -S09311S Primary blast injury of right ear, sequela -S09312A Primary blast injury of left ear, initial encounter -S09312D Primary blast injury of left ear, subsequent encounter -S09312S Primary blast injury of left ear, sequela -S09313A Primary blast injury of ear, bilateral, initial encounter -S09313D Primary blast injury of ear, bilateral, subsequent encounter -S09313S Primary blast injury of ear, bilateral, sequela -S09319A Primary blast injury of unspecified ear, initial encounter -S09319D Primary blast injury of unspecified ear, subsequent encounter -S09319S Primary blast injury of unspecified ear, sequela -S09391A Other specified injury of right middle and inner ear, initial encounter -S09391D Other specified injury of right middle and inner ear, subsequent encounter -S09391S Other specified injury of right middle and inner ear, sequela -S09392A Other specified injury of left middle and inner ear, initial encounter -S09392D Other specified injury of left middle and inner ear, subsequent encounter -S09392S Other specified injury of left middle and inner ear, sequela -S09399A Other specified injury of unspecified middle and inner ear, initial encounter -S09399D Other specified injury of unspecified middle and inner ear, subsequent encounter -S09399S Other specified injury of unspecified middle and inner ear, sequela -S098XXA Other specified injuries of head, initial encounter -S098XXD Other specified injuries of head, subsequent encounter -S098XXS Other specified injuries of head, sequela -S0990XA Unspecified injury of head, initial encounter -S0990XD Unspecified injury of head, subsequent encounter -S0990XS Unspecified injury of head, sequela -S0991XA Unspecified injury of ear, initial encounter -S0991XD Unspecified injury of ear, subsequent encounter -S0991XS Unspecified injury of ear, sequela -S0992XA Unspecified injury of nose, initial encounter -S0992XD Unspecified injury of nose, subsequent encounter -S0992XS Unspecified injury of nose, sequela -S0993XA Unspecified injury of face, initial encounter -S0993XD Unspecified injury of face, subsequent encounter -S0993XS Unspecified injury of face, sequela -S100XXA Contusion of throat, initial encounter -S100XXD Contusion of throat, subsequent encounter -S100XXS Contusion of throat, sequela -S1010XA Unspecified superficial injuries of throat, initial encounter -S1010XD Unspecified superficial injuries of throat, subsequent encounter -S1010XS Unspecified superficial injuries of throat, sequela -S1011XA Abrasion of throat, initial encounter -S1011XD Abrasion of throat, subsequent encounter -S1011XS Abrasion of throat, sequela -S1012XA Blister (nonthermal) of throat, initial encounter -S1012XD Blister (nonthermal) of throat, subsequent encounter -S1012XS Blister (nonthermal) of throat, sequela -S1014XA External constriction of part of throat, initial encounter -S1014XD External constriction of part of throat, subsequent encounter -S1014XS External constriction of part of throat, sequela -S1015XA Superficial foreign body of throat, initial encounter -S1015XD Superficial foreign body of throat, subsequent encounter -S1015XS Superficial foreign body of throat, sequela -S1016XA Insect bite (nonvenomous) of throat, initial encounter -S1016XD Insect bite (nonvenomous) of throat, subsequent encounter -S1016XS Insect bite (nonvenomous) of throat, sequela -S1017XA Other superficial bite of throat, initial encounter -S1017XD Other superficial bite of throat, subsequent encounter -S1017XS Other superficial bite of throat, sequela -S1080XA Unspecified superficial injury of other specified part of neck, initial encounter -S1080XD Unspecified superficial injury of other specified part of neck, subsequent encounter -S1080XS Unspecified superficial injury of other specified part of neck, sequela -S1081XA Abrasion of other specified part of neck, initial encounter -S1081XD Abrasion of other specified part of neck, subsequent encounter -S1081XS Abrasion of other specified part of neck, sequela -S1082XA Blister (nonthermal) of other specified part of neck, initial encounter -S1082XD Blister (nonthermal) of other specified part of neck, subsequent encounter -S1082XS Blister (nonthermal) of other specified part of neck, sequela -S1083XA Contusion of other specified part of neck, initial encounter -S1083XD Contusion of other specified part of neck, subsequent encounter -S1083XS Contusion of other specified part of neck, sequela -S1084XA External constriction of other specified part of neck, initial encounter -S1084XD External constriction of other specified part of neck, subsequent encounter -S1084XS External constriction of other specified part of neck, sequela -S1085XA Superficial foreign body of other specified part of neck, initial encounter -S1085XD Superficial foreign body of other specified part of neck, subsequent encounter -S1085XS Superficial foreign body of other specified part of neck, sequela -S1086XA Insect bite of other specified part of neck, initial encounter -S1086XD Insect bite of other specified part of neck, subsequent encounter -S1086XS Insect bite of other specified part of neck, sequela -S1087XA Other superficial bite of other specified part of neck, initial encounter -S1087XD Other superficial bite of other specified part of neck, subsequent encounter -S1087XS Other superficial bite of other specified part of neck, sequela -S1090XA Unspecified superficial injury of unspecified part of neck, initial encounter -S1090XD Unspecified superficial injury of unspecified part of neck, subsequent encounter -S1090XS Unspecified superficial injury of unspecified part of neck, sequela -S1091XA Abrasion of unspecified part of neck, initial encounter -S1091XD Abrasion of unspecified part of neck, subsequent encounter -S1091XS Abrasion of unspecified part of neck, sequela -S1092XA Blister (nonthermal) of unspecified part of neck, initial encounter -S1092XD Blister (nonthermal) of unspecified part of neck, subsequent encounter -S1092XS Blister (nonthermal) of unspecified part of neck, sequela -S1093XA Contusion of unspecified part of neck, initial encounter -S1093XD Contusion of unspecified part of neck, subsequent encounter -S1093XS Contusion of unspecified part of neck, sequela -S1094XA External constriction of unspecified part of neck, initial encounter -S1094XD External constriction of unspecified part of neck, subsequent encounter -S1094XS External constriction of unspecified part of neck, sequela -S1095XA Superficial foreign body of unspecified part of neck, initial encounter -S1095XD Superficial foreign body of unspecified part of neck, subsequent encounter -S1095XS Superficial foreign body of unspecified part of neck, sequela -S1096XA Insect bite of unspecified part of neck, initial encounter -S1096XD Insect bite of unspecified part of neck, subsequent encounter -S1096XS Insect bite of unspecified part of neck, sequela -S1097XA Other superficial bite of unspecified part of neck, initial encounter -S1097XD Other superficial bite of unspecified part of neck, subsequent encounter -S1097XS Other superficial bite of unspecified part of neck, sequela -S11011A Laceration without foreign body of larynx, initial encounter -S11011D Laceration without foreign body of larynx, subsequent encounter -S11011S Laceration without foreign body of larynx, sequela -S11012A Laceration with foreign body of larynx, initial encounter -S11012D Laceration with foreign body of larynx, subsequent encounter -S11012S Laceration with foreign body of larynx, sequela -S11013A Puncture wound without foreign body of larynx, initial encounter -S11013D Puncture wound without foreign body of larynx, subsequent encounter -S11013S Puncture wound without foreign body of larynx, sequela -S11014A Puncture wound with foreign body of larynx, initial encounter -S11014D Puncture wound with foreign body of larynx, subsequent encounter -S11014S Puncture wound with foreign body of larynx, sequela -S11015A Open bite of larynx, initial encounter -S11015D Open bite of larynx, subsequent encounter -S11015S Open bite of larynx, sequela -S11019A Unspecified open wound of larynx, initial encounter -S11019D Unspecified open wound of larynx, subsequent encounter -S11019S Unspecified open wound of larynx, sequela -S11021A Laceration without foreign body of trachea, initial encounter -S11021D Laceration without foreign body of trachea, subsequent encounter -S11021S Laceration without foreign body of trachea, sequela -S11022A Laceration with foreign body of trachea, initial encounter -S11022D Laceration with foreign body of trachea, subsequent encounter -S11022S Laceration with foreign body of trachea, sequela -S11023A Puncture wound without foreign body of trachea, initial encounter -S11023D Puncture wound without foreign body of trachea, subsequent encounter -S11023S Puncture wound without foreign body of trachea, sequela -S11024A Puncture wound with foreign body of trachea, initial encounter -S11024D Puncture wound with foreign body of trachea, subsequent encounter -S11024S Puncture wound with foreign body of trachea, sequela -S11025A Open bite of trachea, initial encounter -S11025D Open bite of trachea, subsequent encounter -S11025S Open bite of trachea, sequela -S11029A Unspecified open wound of trachea, initial encounter -S11029D Unspecified open wound of trachea, subsequent encounter -S11029S Unspecified open wound of trachea, sequela -S11031A Laceration without foreign body of vocal cord, initial encounter -S11031D Laceration without foreign body of vocal cord, subsequent encounter -S11031S Laceration without foreign body of vocal cord, sequela -S11032A Laceration with foreign body of vocal cord, initial encounter -S11032D Laceration with foreign body of vocal cord, subsequent encounter -S11032S Laceration with foreign body of vocal cord, sequela -S11033A Puncture wound without foreign body of vocal cord, initial encounter -S11033D Puncture wound without foreign body of vocal cord, subsequent encounter -S11033S Puncture wound without foreign body of vocal cord, sequela -S11034A Puncture wound with foreign body of vocal cord, initial encounter -S11034D Puncture wound with foreign body of vocal cord, subsequent encounter -S11034S Puncture wound with foreign body of vocal cord, sequela -S11035A Open bite of vocal cord, initial encounter -S11035D Open bite of vocal cord, subsequent encounter -S11035S Open bite of vocal cord, sequela -S11039A Unspecified open wound of vocal cord, initial encounter -S11039D Unspecified open wound of vocal cord, subsequent encounter -S11039S Unspecified open wound of vocal cord, sequela -S1110XA Unspecified open wound of thyroid gland, initial encounter -S1110XD Unspecified open wound of thyroid gland, subsequent encounter -S1110XS Unspecified open wound of thyroid gland, sequela -S1111XA Laceration without foreign body of thyroid gland, initial encounter -S1111XD Laceration without foreign body of thyroid gland, subsequent encounter -S1111XS Laceration without foreign body of thyroid gland, sequela -S1112XA Laceration with foreign body of thyroid gland, initial encounter -S1112XD Laceration with foreign body of thyroid gland, subsequent encounter -S1112XS Laceration with foreign body of thyroid gland, sequela -S1113XA Puncture wound without foreign body of thyroid gland, initial encounter -S1113XD Puncture wound without foreign body of thyroid gland, subsequent encounter -S1113XS Puncture wound without foreign body of thyroid gland, sequela -S1114XA Puncture wound with foreign body of thyroid gland, initial encounter -S1114XD Puncture wound with foreign body of thyroid gland, subsequent encounter -S1114XS Puncture wound with foreign body of thyroid gland, sequela -S1115XA Open bite of thyroid gland, initial encounter -S1115XD Open bite of thyroid gland, subsequent encounter -S1115XS Open bite of thyroid gland, sequela -S1120XA Unspecified open wound of pharynx and cervical esophagus, initial encounter -S1120XD Unspecified open wound of pharynx and cervical esophagus, subsequent encounter -S1120XS Unspecified open wound of pharynx and cervical esophagus, sequela -S1121XA Laceration without foreign body of pharynx and cervical esophagus, initial encounter -S1121XD Laceration without foreign body of pharynx and cervical esophagus, subsequent encounter -S1121XS Laceration without foreign body of pharynx and cervical esophagus, sequela -S1122XA Laceration with foreign body of pharynx and cervical esophagus, initial encounter -S1122XD Laceration with foreign body of pharynx and cervical esophagus, subsequent encounter -S1122XS Laceration with foreign body of pharynx and cervical esophagus, sequela -S1123XA Puncture wound without foreign body of pharynx and cervical esophagus, initial encounter -S1123XD Puncture wound without foreign body of pharynx and cervical esophagus, subsequent encounter -S1123XS Puncture wound without foreign body of pharynx and cervical esophagus, sequela -S1124XA Puncture wound with foreign body of pharynx and cervical esophagus, initial encounter -S1124XD Puncture wound with foreign body of pharynx and cervical esophagus, subsequent encounter -S1124XS Puncture wound with foreign body of pharynx and cervical esophagus, sequela -S1125XA Open bite of pharynx and cervical esophagus, initial encounter -S1125XD Open bite of pharynx and cervical esophagus, subsequent encounter -S1125XS Open bite of pharynx and cervical esophagus, sequela -S1180XA Unspecified open wound of other specified part of neck, initial encounter -S1180XD Unspecified open wound of other specified part of neck, subsequent encounter -S1180XS Unspecified open wound of other specified part of neck, sequela -S1181XA Laceration without foreign body of other specified part of neck, initial encounter -S1181XD Laceration without foreign body of other specified part of neck, subsequent encounter -S1181XS Laceration without foreign body of other specified part of neck, sequela -S1182XA Laceration with foreign body of other specified part of neck, initial encounter -S1182XD Laceration with foreign body of other specified part of neck, subsequent encounter -S1182XS Laceration with foreign body of other specified part of neck, sequela -S1183XA Puncture wound without foreign body of other specified part of neck, initial encounter -S1183XD Puncture wound without foreign body of other specified part of neck, subsequent encounter -S1183XS Puncture wound without foreign body of other specified part of neck, sequela -S1184XA Puncture wound with foreign body of other specified part of neck, initial encounter -S1184XD Puncture wound with foreign body of other specified part of neck, subsequent encounter -S1184XS Puncture wound with foreign body of other specified part of neck, sequela -S1185XA Open bite of other specified part of neck, initial encounter -S1185XD Open bite of other specified part of neck, subsequent encounter -S1185XS Open bite of other specified part of neck, sequela -S1189XA Other open wound of other specified part of neck, initial encounter -S1189XD Other open wound of other specified part of neck, subsequent encounter -S1189XS Other open wound of other specified part of neck, sequela -S1190XA Unspecified open wound of unspecified part of neck, initial encounter -S1190XD Unspecified open wound of unspecified part of neck, subsequent encounter -S1190XS Unspecified open wound of unspecified part of neck, sequela -S1191XA Laceration without foreign body of unspecified part of neck, initial encounter -S1191XD Laceration without foreign body of unspecified part of neck, subsequent encounter -S1191XS Laceration without foreign body of unspecified part of neck, sequela -S1192XA Laceration with foreign body of unspecified part of neck, initial encounter -S1192XD Laceration with foreign body of unspecified part of neck, subsequent encounter -S1192XS Laceration with foreign body of unspecified part of neck, sequela -S1193XA Puncture wound without foreign body of unspecified part of neck, initial encounter -S1193XD Puncture wound without foreign body of unspecified part of neck, subsequent encounter -S1193XS Puncture wound without foreign body of unspecified part of neck, sequela -S1194XA Puncture wound with foreign body of unspecified part of neck, initial encounter -S1194XD Puncture wound with foreign body of unspecified part of neck, subsequent encounter -S1194XS Puncture wound with foreign body of unspecified part of neck, sequela -S1195XA Open bite of unspecified part of neck, initial encounter -S1195XD Open bite of unspecified part of neck, subsequent encounter -S1195XS Open bite of unspecified part of neck, sequela -S12000A Unspecified displaced fracture of first cervical vertebra, initial encounter for closed fracture -S12000B Unspecified displaced fracture of first cervical vertebra, initial encounter for open fracture -S12000D Unspecified displaced fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12000G Unspecified displaced fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12000K Unspecified displaced fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12000S Unspecified displaced fracture of first cervical vertebra, sequela -S12001A Unspecified nondisplaced fracture of first cervical vertebra, initial encounter for closed fracture -S12001B Unspecified nondisplaced fracture of first cervical vertebra, initial encounter for open fracture -S12001D Unspecified nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12001G Unspecified nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12001K Unspecified nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12001S Unspecified nondisplaced fracture of first cervical vertebra, sequela -S1201XA Stable burst fracture of first cervical vertebra, initial encounter for closed fracture -S1201XB Stable burst fracture of first cervical vertebra, initial encounter for open fracture -S1201XD Stable burst fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S1201XG Stable burst fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S1201XK Stable burst fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S1201XS Stable burst fracture of first cervical vertebra, sequela -S1202XA Unstable burst fracture of first cervical vertebra, initial encounter for closed fracture -S1202XB Unstable burst fracture of first cervical vertebra, initial encounter for open fracture -S1202XD Unstable burst fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S1202XG Unstable burst fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S1202XK Unstable burst fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S1202XS Unstable burst fracture of first cervical vertebra, sequela -S12030A Displaced posterior arch fracture of first cervical vertebra, initial encounter for closed fracture -S12030B Displaced posterior arch fracture of first cervical vertebra, initial encounter for open fracture -S12030D Displaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12030G Displaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12030K Displaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12030S Displaced posterior arch fracture of first cervical vertebra, sequela -S12031A Nondisplaced posterior arch fracture of first cervical vertebra, initial encounter for closed fracture -S12031B Nondisplaced posterior arch fracture of first cervical vertebra, initial encounter for open fracture -S12031D Nondisplaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12031G Nondisplaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12031K Nondisplaced posterior arch fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12031S Nondisplaced posterior arch fracture of first cervical vertebra, sequela -S12040A Displaced lateral mass fracture of first cervical vertebra, initial encounter for closed fracture -S12040B Displaced lateral mass fracture of first cervical vertebra, initial encounter for open fracture -S12040D Displaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12040G Displaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12040K Displaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12040S Displaced lateral mass fracture of first cervical vertebra, sequela -S12041A Nondisplaced lateral mass fracture of first cervical vertebra, initial encounter for closed fracture -S12041B Nondisplaced lateral mass fracture of first cervical vertebra, initial encounter for open fracture -S12041D Nondisplaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12041G Nondisplaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12041K Nondisplaced lateral mass fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12041S Nondisplaced lateral mass fracture of first cervical vertebra, sequela -S12090A Other displaced fracture of first cervical vertebra, initial encounter for closed fracture -S12090B Other displaced fracture of first cervical vertebra, initial encounter for open fracture -S12090D Other displaced fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12090G Other displaced fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12090K Other displaced fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12090S Other displaced fracture of first cervical vertebra, sequela -S12091A Other nondisplaced fracture of first cervical vertebra, initial encounter for closed fracture -S12091B Other nondisplaced fracture of first cervical vertebra, initial encounter for open fracture -S12091D Other nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with routine healing -S12091G Other nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with delayed healing -S12091K Other nondisplaced fracture of first cervical vertebra, subsequent encounter for fracture with nonunion -S12091S Other nondisplaced fracture of first cervical vertebra, sequela -S12100A Unspecified displaced fracture of second cervical vertebra, initial encounter for closed fracture -S12100B Unspecified displaced fracture of second cervical vertebra, initial encounter for open fracture -S12100D Unspecified displaced fracture of second cervical vertebra, subsequent encounter for fracture with routine healing -S12100G Unspecified displaced fracture of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12100K Unspecified displaced fracture of second cervical vertebra, subsequent encounter for fracture with nonunion -S12100S Unspecified displaced fracture of second cervical vertebra, sequela -S12101A Unspecified nondisplaced fracture of second cervical vertebra, initial encounter for closed fracture -S12101B Unspecified nondisplaced fracture of second cervical vertebra, initial encounter for open fracture -S12101D Unspecified nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with routine healing -S12101G Unspecified nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12101K Unspecified nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with nonunion -S12101S Unspecified nondisplaced fracture of second cervical vertebra, sequela -S12110A Anterior displaced Type II dens fracture, initial encounter for closed fracture -S12110B Anterior displaced Type II dens fracture, initial encounter for open fracture -S12110D Anterior displaced Type II dens fracture, subsequent encounter for fracture with routine healing -S12110G Anterior displaced Type II dens fracture, subsequent encounter for fracture with delayed healing -S12110K Anterior displaced Type II dens fracture, subsequent encounter for fracture with nonunion -S12110S Anterior displaced Type II dens fracture, sequela -S12111A Posterior displaced Type II dens fracture, initial encounter for closed fracture -S12111B Posterior displaced Type II dens fracture, initial encounter for open fracture -S12111D Posterior displaced Type II dens fracture, subsequent encounter for fracture with routine healing -S12111G Posterior displaced Type II dens fracture, subsequent encounter for fracture with delayed healing -S12111K Posterior displaced Type II dens fracture, subsequent encounter for fracture with nonunion -S12111S Posterior displaced Type II dens fracture, sequela -S12112A Nondisplaced Type II dens fracture, initial encounter for closed fracture -S12112B Nondisplaced Type II dens fracture, initial encounter for open fracture -S12112D Nondisplaced Type II dens fracture, subsequent encounter for fracture with routine healing -S12112G Nondisplaced Type II dens fracture, subsequent encounter for fracture with delayed healing -S12112K Nondisplaced Type II dens fracture, subsequent encounter for fracture with nonunion -S12112S Nondisplaced Type II dens fracture, sequela -S12120A Other displaced dens fracture, initial encounter for closed fracture -S12120B Other displaced dens fracture, initial encounter for open fracture -S12120D Other displaced dens fracture, subsequent encounter for fracture with routine healing -S12120G Other displaced dens fracture, subsequent encounter for fracture with delayed healing -S12120K Other displaced dens fracture, subsequent encounter for fracture with nonunion -S12120S Other displaced dens fracture, sequela -S12121A Other nondisplaced dens fracture, initial encounter for closed fracture -S12121B Other nondisplaced dens fracture, initial encounter for open fracture -S12121D Other nondisplaced dens fracture, subsequent encounter for fracture with routine healing -S12121G Other nondisplaced dens fracture, subsequent encounter for fracture with delayed healing -S12121K Other nondisplaced dens fracture, subsequent encounter for fracture with nonunion -S12121S Other nondisplaced dens fracture, sequela -S12130A Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, initial encounter for closed fracture -S12130B Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, initial encounter for open fracture -S12130D Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with routine healing -S12130G Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12130K Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with nonunion -S12130S Unspecified traumatic displaced spondylolisthesis of second cervical vertebra, sequela -S12131A Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, initial encounter for closed fracture -S12131B Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, initial encounter for open fracture -S12131D Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with routine healing -S12131G Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12131K Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with nonunion -S12131S Unspecified traumatic nondisplaced spondylolisthesis of second cervical vertebra, sequela -S1214XA Type III traumatic spondylolisthesis of second cervical vertebra, initial encounter for closed fracture -S1214XB Type III traumatic spondylolisthesis of second cervical vertebra, initial encounter for open fracture -S1214XD Type III traumatic spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with routine healing -S1214XG Type III traumatic spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with delayed healing -S1214XK Type III traumatic spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with nonunion -S1214XS Type III traumatic spondylolisthesis of second cervical vertebra, sequela -S12150A Other traumatic displaced spondylolisthesis of second cervical vertebra, initial encounter for closed fracture -S12150B Other traumatic displaced spondylolisthesis of second cervical vertebra, initial encounter for open fracture -S12150D Other traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with routine healing -S12150G Other traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12150K Other traumatic displaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with nonunion -S12150S Other traumatic displaced spondylolisthesis of second cervical vertebra, sequela -S12151A Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, initial encounter for closed fracture -S12151B Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, initial encounter for open fracture -S12151D Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with routine healing -S12151G Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12151K Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, subsequent encounter for fracture with nonunion -S12151S Other traumatic nondisplaced spondylolisthesis of second cervical vertebra, sequela -S12190A Other displaced fracture of second cervical vertebra, initial encounter for closed fracture -S12190B Other displaced fracture of second cervical vertebra, initial encounter for open fracture -S12190D Other displaced fracture of second cervical vertebra, subsequent encounter for fracture with routine healing -S12190G Other displaced fracture of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12190K Other displaced fracture of second cervical vertebra, subsequent encounter for fracture with nonunion -S12190S Other displaced fracture of second cervical vertebra, sequela -S12191A Other nondisplaced fracture of second cervical vertebra, initial encounter for closed fracture -S12191B Other nondisplaced fracture of second cervical vertebra, initial encounter for open fracture -S12191D Other nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with routine healing -S12191G Other nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with delayed healing -S12191K Other nondisplaced fracture of second cervical vertebra, subsequent encounter for fracture with nonunion -S12191S Other nondisplaced fracture of second cervical vertebra, sequela -S12200A Unspecified displaced fracture of third cervical vertebra, initial encounter for closed fracture -S12200B Unspecified displaced fracture of third cervical vertebra, initial encounter for open fracture -S12200D Unspecified displaced fracture of third cervical vertebra, subsequent encounter for fracture with routine healing -S12200G Unspecified displaced fracture of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12200K Unspecified displaced fracture of third cervical vertebra, subsequent encounter for fracture with nonunion -S12200S Unspecified displaced fracture of third cervical vertebra, sequela -S12201A Unspecified nondisplaced fracture of third cervical vertebra, initial encounter for closed fracture -S12201B Unspecified nondisplaced fracture of third cervical vertebra, initial encounter for open fracture -S12201D Unspecified nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with routine healing -S12201G Unspecified nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12201K Unspecified nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with nonunion -S12201S Unspecified nondisplaced fracture of third cervical vertebra, sequela -S12230A Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, initial encounter for closed fracture -S12230B Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, initial encounter for open fracture -S12230D Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with routine healing -S12230G Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12230K Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with nonunion -S12230S Unspecified traumatic displaced spondylolisthesis of third cervical vertebra, sequela -S12231A Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, initial encounter for closed fracture -S12231B Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, initial encounter for open fracture -S12231D Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with routine healing -S12231G Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12231K Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with nonunion -S12231S Unspecified traumatic nondisplaced spondylolisthesis of third cervical vertebra, sequela -S1224XA Type III traumatic spondylolisthesis of third cervical vertebra, initial encounter for closed fracture -S1224XB Type III traumatic spondylolisthesis of third cervical vertebra, initial encounter for open fracture -S1224XD Type III traumatic spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with routine healing -S1224XG Type III traumatic spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with delayed healing -S1224XK Type III traumatic spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with nonunion -S1224XS Type III traumatic spondylolisthesis of third cervical vertebra, sequela -S12250A Other traumatic displaced spondylolisthesis of third cervical vertebra, initial encounter for closed fracture -S12250B Other traumatic displaced spondylolisthesis of third cervical vertebra, initial encounter for open fracture -S12250D Other traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with routine healing -S12250G Other traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12250K Other traumatic displaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with nonunion -S12250S Other traumatic displaced spondylolisthesis of third cervical vertebra, sequela -S12251A Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, initial encounter for closed fracture -S12251B Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, initial encounter for open fracture -S12251D Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with routine healing -S12251G Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12251K Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, subsequent encounter for fracture with nonunion -S12251S Other traumatic nondisplaced spondylolisthesis of third cervical vertebra, sequela -S12290A Other displaced fracture of third cervical vertebra, initial encounter for closed fracture -S12290B Other displaced fracture of third cervical vertebra, initial encounter for open fracture -S12290D Other displaced fracture of third cervical vertebra, subsequent encounter for fracture with routine healing -S12290G Other displaced fracture of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12290K Other displaced fracture of third cervical vertebra, subsequent encounter for fracture with nonunion -S12290S Other displaced fracture of third cervical vertebra, sequela -S12291A Other nondisplaced fracture of third cervical vertebra, initial encounter for closed fracture -S12291B Other nondisplaced fracture of third cervical vertebra, initial encounter for open fracture -S12291D Other nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with routine healing -S12291G Other nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with delayed healing -S12291K Other nondisplaced fracture of third cervical vertebra, subsequent encounter for fracture with nonunion -S12291S Other nondisplaced fracture of third cervical vertebra, sequela -S12300A Unspecified displaced fracture of fourth cervical vertebra, initial encounter for closed fracture -S12300B Unspecified displaced fracture of fourth cervical vertebra, initial encounter for open fracture -S12300D Unspecified displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12300G Unspecified displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12300K Unspecified displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12300S Unspecified displaced fracture of fourth cervical vertebra, sequela -S12301A Unspecified nondisplaced fracture of fourth cervical vertebra, initial encounter for closed fracture -S12301B Unspecified nondisplaced fracture of fourth cervical vertebra, initial encounter for open fracture -S12301D Unspecified nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12301G Unspecified nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12301K Unspecified nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12301S Unspecified nondisplaced fracture of fourth cervical vertebra, sequela -S12330A Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, initial encounter for closed fracture -S12330B Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, initial encounter for open fracture -S12330D Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12330G Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12330K Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12330S Unspecified traumatic displaced spondylolisthesis of fourth cervical vertebra, sequela -S12331A Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, initial encounter for closed fracture -S12331B Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, initial encounter for open fracture -S12331D Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12331G Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12331K Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12331S Unspecified traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, sequela -S1234XA Type III traumatic spondylolisthesis of fourth cervical vertebra, initial encounter for closed fracture -S1234XB Type III traumatic spondylolisthesis of fourth cervical vertebra, initial encounter for open fracture -S1234XD Type III traumatic spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S1234XG Type III traumatic spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S1234XK Type III traumatic spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S1234XS Type III traumatic spondylolisthesis of fourth cervical vertebra, sequela -S12350A Other traumatic displaced spondylolisthesis of fourth cervical vertebra, initial encounter for closed fracture -S12350B Other traumatic displaced spondylolisthesis of fourth cervical vertebra, initial encounter for open fracture -S12350D Other traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12350G Other traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12350K Other traumatic displaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12350S Other traumatic displaced spondylolisthesis of fourth cervical vertebra, sequela -S12351A Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, initial encounter for closed fracture -S12351B Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, initial encounter for open fracture -S12351D Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12351G Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12351K Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12351S Other traumatic nondisplaced spondylolisthesis of fourth cervical vertebra, sequela -S12390A Other displaced fracture of fourth cervical vertebra, initial encounter for closed fracture -S12390B Other displaced fracture of fourth cervical vertebra, initial encounter for open fracture -S12390D Other displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12390G Other displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12390K Other displaced fracture of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12390S Other displaced fracture of fourth cervical vertebra, sequela -S12391A Other nondisplaced fracture of fourth cervical vertebra, initial encounter for closed fracture -S12391B Other nondisplaced fracture of fourth cervical vertebra, initial encounter for open fracture -S12391D Other nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with routine healing -S12391G Other nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with delayed healing -S12391K Other nondisplaced fracture of fourth cervical vertebra, subsequent encounter for fracture with nonunion -S12391S Other nondisplaced fracture of fourth cervical vertebra, sequela -S12400A Unspecified displaced fracture of fifth cervical vertebra, initial encounter for closed fracture -S12400B Unspecified displaced fracture of fifth cervical vertebra, initial encounter for open fracture -S12400D Unspecified displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12400G Unspecified displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12400K Unspecified displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12400S Unspecified displaced fracture of fifth cervical vertebra, sequela -S12401A Unspecified nondisplaced fracture of fifth cervical vertebra, initial encounter for closed fracture -S12401B Unspecified nondisplaced fracture of fifth cervical vertebra, initial encounter for open fracture -S12401D Unspecified nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12401G Unspecified nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12401K Unspecified nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12401S Unspecified nondisplaced fracture of fifth cervical vertebra, sequela -S12430A Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, initial encounter for closed fracture -S12430B Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, initial encounter for open fracture -S12430D Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12430G Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12430K Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12430S Unspecified traumatic displaced spondylolisthesis of fifth cervical vertebra, sequela -S12431A Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, initial encounter for closed fracture -S12431B Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, initial encounter for open fracture -S12431D Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12431G Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12431K Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12431S Unspecified traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, sequela -S1244XA Type III traumatic spondylolisthesis of fifth cervical vertebra, initial encounter for closed fracture -S1244XB Type III traumatic spondylolisthesis of fifth cervical vertebra, initial encounter for open fracture -S1244XD Type III traumatic spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S1244XG Type III traumatic spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S1244XK Type III traumatic spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S1244XS Type III traumatic spondylolisthesis of fifth cervical vertebra, sequela -S12450A Other traumatic displaced spondylolisthesis of fifth cervical vertebra, initial encounter for closed fracture -S12450B Other traumatic displaced spondylolisthesis of fifth cervical vertebra, initial encounter for open fracture -S12450D Other traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12450G Other traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12450K Other traumatic displaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12450S Other traumatic displaced spondylolisthesis of fifth cervical vertebra, sequela -S12451A Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, initial encounter for closed fracture -S12451B Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, initial encounter for open fracture -S12451D Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12451G Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12451K Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12451S Other traumatic nondisplaced spondylolisthesis of fifth cervical vertebra, sequela -S12490A Other displaced fracture of fifth cervical vertebra, initial encounter for closed fracture -S12490B Other displaced fracture of fifth cervical vertebra, initial encounter for open fracture -S12490D Other displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12490G Other displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12490K Other displaced fracture of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12490S Other displaced fracture of fifth cervical vertebra, sequela -S12491A Other nondisplaced fracture of fifth cervical vertebra, initial encounter for closed fracture -S12491B Other nondisplaced fracture of fifth cervical vertebra, initial encounter for open fracture -S12491D Other nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with routine healing -S12491G Other nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with delayed healing -S12491K Other nondisplaced fracture of fifth cervical vertebra, subsequent encounter for fracture with nonunion -S12491S Other nondisplaced fracture of fifth cervical vertebra, sequela -S12500A Unspecified displaced fracture of sixth cervical vertebra, initial encounter for closed fracture -S12500B Unspecified displaced fracture of sixth cervical vertebra, initial encounter for open fracture -S12500D Unspecified displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12500G Unspecified displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12500K Unspecified displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12500S Unspecified displaced fracture of sixth cervical vertebra, sequela -S12501A Unspecified nondisplaced fracture of sixth cervical vertebra, initial encounter for closed fracture -S12501B Unspecified nondisplaced fracture of sixth cervical vertebra, initial encounter for open fracture -S12501D Unspecified nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12501G Unspecified nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12501K Unspecified nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12501S Unspecified nondisplaced fracture of sixth cervical vertebra, sequela -S12530A Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, initial encounter for closed fracture -S12530B Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, initial encounter for open fracture -S12530D Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12530G Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12530K Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12530S Unspecified traumatic displaced spondylolisthesis of sixth cervical vertebra, sequela -S12531A Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, initial encounter for closed fracture -S12531B Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, initial encounter for open fracture -S12531D Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12531G Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12531K Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12531S Unspecified traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, sequela -S1254XA Type III traumatic spondylolisthesis of sixth cervical vertebra, initial encounter for closed fracture -S1254XB Type III traumatic spondylolisthesis of sixth cervical vertebra, initial encounter for open fracture -S1254XD Type III traumatic spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S1254XG Type III traumatic spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S1254XK Type III traumatic spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S1254XS Type III traumatic spondylolisthesis of sixth cervical vertebra, sequela -S12550A Other traumatic displaced spondylolisthesis of sixth cervical vertebra, initial encounter for closed fracture -S12550B Other traumatic displaced spondylolisthesis of sixth cervical vertebra, initial encounter for open fracture -S12550D Other traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12550G Other traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12550K Other traumatic displaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12550S Other traumatic displaced spondylolisthesis of sixth cervical vertebra, sequela -S12551A Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, initial encounter for closed fracture -S12551B Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, initial encounter for open fracture -S12551D Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12551G Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12551K Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12551S Other traumatic nondisplaced spondylolisthesis of sixth cervical vertebra, sequela -S12590A Other displaced fracture of sixth cervical vertebra, initial encounter for closed fracture -S12590B Other displaced fracture of sixth cervical vertebra, initial encounter for open fracture -S12590D Other displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12590G Other displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12590K Other displaced fracture of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12590S Other displaced fracture of sixth cervical vertebra, sequela -S12591A Other nondisplaced fracture of sixth cervical vertebra, initial encounter for closed fracture -S12591B Other nondisplaced fracture of sixth cervical vertebra, initial encounter for open fracture -S12591D Other nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with routine healing -S12591G Other nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with delayed healing -S12591K Other nondisplaced fracture of sixth cervical vertebra, subsequent encounter for fracture with nonunion -S12591S Other nondisplaced fracture of sixth cervical vertebra, sequela -S12600A Unspecified displaced fracture of seventh cervical vertebra, initial encounter for closed fracture -S12600B Unspecified displaced fracture of seventh cervical vertebra, initial encounter for open fracture -S12600D Unspecified displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12600G Unspecified displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12600K Unspecified displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12600S Unspecified displaced fracture of seventh cervical vertebra, sequela -S12601A Unspecified nondisplaced fracture of seventh cervical vertebra, initial encounter for closed fracture -S12601B Unspecified nondisplaced fracture of seventh cervical vertebra, initial encounter for open fracture -S12601D Unspecified nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12601G Unspecified nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12601K Unspecified nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12601S Unspecified nondisplaced fracture of seventh cervical vertebra, sequela -S12630A Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, initial encounter for closed fracture -S12630B Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, initial encounter for open fracture -S12630D Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12630G Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12630K Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12630S Unspecified traumatic displaced spondylolisthesis of seventh cervical vertebra, sequela -S12631A Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, initial encounter for closed fracture -S12631B Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, initial encounter for open fracture -S12631D Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12631G Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12631K Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12631S Unspecified traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, sequela -S1264XA Type III traumatic spondylolisthesis of seventh cervical vertebra, initial encounter for closed fracture -S1264XB Type III traumatic spondylolisthesis of seventh cervical vertebra, initial encounter for open fracture -S1264XD Type III traumatic spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S1264XG Type III traumatic spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S1264XK Type III traumatic spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S1264XS Type III traumatic spondylolisthesis of seventh cervical vertebra, sequela -S12650A Other traumatic displaced spondylolisthesis of seventh cervical vertebra, initial encounter for closed fracture -S12650B Other traumatic displaced spondylolisthesis of seventh cervical vertebra, initial encounter for open fracture -S12650D Other traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12650G Other traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12650K Other traumatic displaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12650S Other traumatic displaced spondylolisthesis of seventh cervical vertebra, sequela -S12651A Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, initial encounter for closed fracture -S12651B Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, initial encounter for open fracture -S12651D Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12651G Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12651K Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12651S Other traumatic nondisplaced spondylolisthesis of seventh cervical vertebra, sequela -S12690A Other displaced fracture of seventh cervical vertebra, initial encounter for closed fracture -S12690B Other displaced fracture of seventh cervical vertebra, initial encounter for open fracture -S12690D Other displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12690G Other displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12690K Other displaced fracture of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12690S Other displaced fracture of seventh cervical vertebra, sequela -S12691A Other nondisplaced fracture of seventh cervical vertebra, initial encounter for closed fracture -S12691B Other nondisplaced fracture of seventh cervical vertebra, initial encounter for open fracture -S12691D Other nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with routine healing -S12691G Other nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with delayed healing -S12691K Other nondisplaced fracture of seventh cervical vertebra, subsequent encounter for fracture with nonunion -S12691S Other nondisplaced fracture of seventh cervical vertebra, sequela -S128XXA Fracture of other parts of neck, initial encounter -S128XXD Fracture of other parts of neck, subsequent encounter -S128XXS Fracture of other parts of neck, sequela -S129XXA Fracture of neck, unspecified, initial encounter -S129XXD Fracture of neck, unspecified, subsequent encounter -S129XXS Fracture of neck, unspecified, sequela -S130XXA Traumatic rupture of cervical intervertebral disc, initial encounter -S130XXD Traumatic rupture of cervical intervertebral disc, subsequent encounter -S130XXS Traumatic rupture of cervical intervertebral disc, sequela -S13100A Subluxation of unspecified cervical vertebrae, initial encounter -S13100D Subluxation of unspecified cervical vertebrae, subsequent encounter -S13100S Subluxation of unspecified cervical vertebrae, sequela -S13101A Dislocation of unspecified cervical vertebrae, initial encounter -S13101D Dislocation of unspecified cervical vertebrae, subsequent encounter -S13101S Dislocation of unspecified cervical vertebrae, sequela -S13110A Subluxation of C0/C1 cervical vertebrae, initial encounter -S13110D Subluxation of C0/C1 cervical vertebrae, subsequent encounter -S13110S Subluxation of C0/C1 cervical vertebrae, sequela -S13111A Dislocation of C0/C1 cervical vertebrae, initial encounter -S13111D Dislocation of C0/C1 cervical vertebrae, subsequent encounter -S13111S Dislocation of C0/C1 cervical vertebrae, sequela -S13120A Subluxation of C1/C2 cervical vertebrae, initial encounter -S13120D Subluxation of C1/C2 cervical vertebrae, subsequent encounter -S13120S Subluxation of C1/C2 cervical vertebrae, sequela -S13121A Dislocation of C1/C2 cervical vertebrae, initial encounter -S13121D Dislocation of C1/C2 cervical vertebrae, subsequent encounter -S13121S Dislocation of C1/C2 cervical vertebrae, sequela -S13130A Subluxation of C2/C3 cervical vertebrae, initial encounter -S13130D Subluxation of C2/C3 cervical vertebrae, subsequent encounter -S13130S Subluxation of C2/C3 cervical vertebrae, sequela -S13131A Dislocation of C2/C3 cervical vertebrae, initial encounter -S13131D Dislocation of C2/C3 cervical vertebrae, subsequent encounter -S13131S Dislocation of C2/C3 cervical vertebrae, sequela -S13140A Subluxation of C3/C4 cervical vertebrae, initial encounter -S13140D Subluxation of C3/C4 cervical vertebrae, subsequent encounter -S13140S Subluxation of C3/C4 cervical vertebrae, sequela -S13141A Dislocation of C3/C4 cervical vertebrae, initial encounter -S13141D Dislocation of C3/C4 cervical vertebrae, subsequent encounter -S13141S Dislocation of C3/C4 cervical vertebrae, sequela -S13150A Subluxation of C4/C5 cervical vertebrae, initial encounter -S13150D Subluxation of C4/C5 cervical vertebrae, subsequent encounter -S13150S Subluxation of C4/C5 cervical vertebrae, sequela -S13151A Dislocation of C4/C5 cervical vertebrae, initial encounter -S13151D Dislocation of C4/C5 cervical vertebrae, subsequent encounter -S13151S Dislocation of C4/C5 cervical vertebrae, sequela -S13160A Subluxation of C5/C6 cervical vertebrae, initial encounter -S13160D Subluxation of C5/C6 cervical vertebrae, subsequent encounter -S13160S Subluxation of C5/C6 cervical vertebrae, sequela -S13161A Dislocation of C5/C6 cervical vertebrae, initial encounter -S13161D Dislocation of C5/C6 cervical vertebrae, subsequent encounter -S13161S Dislocation of C5/C6 cervical vertebrae, sequela -S13170A Subluxation of C6/C7 cervical vertebrae, initial encounter -S13170D Subluxation of C6/C7 cervical vertebrae, subsequent encounter -S13170S Subluxation of C6/C7 cervical vertebrae, sequela -S13171A Dislocation of C6/C7 cervical vertebrae, initial encounter -S13171D Dislocation of C6/C7 cervical vertebrae, subsequent encounter -S13171S Dislocation of C6/C7 cervical vertebrae, sequela -S13180A Subluxation of C7/T1 cervical vertebrae, initial encounter -S13180D Subluxation of C7/T1 cervical vertebrae, subsequent encounter -S13180S Subluxation of C7/T1 cervical vertebrae, sequela -S13181A Dislocation of C7/T1 cervical vertebrae, initial encounter -S13181D Dislocation of C7/T1 cervical vertebrae, subsequent encounter -S13181S Dislocation of C7/T1 cervical vertebrae, sequela -S1320XA Dislocation of unspecified parts of neck, initial encounter -S1320XD Dislocation of unspecified parts of neck, subsequent encounter -S1320XS Dislocation of unspecified parts of neck, sequela -S1329XA Dislocation of other parts of neck, initial encounter -S1329XD Dislocation of other parts of neck, subsequent encounter -S1329XS Dislocation of other parts of neck, sequela -S134XXA Sprain of ligaments of cervical spine, initial encounter -S134XXD Sprain of ligaments of cervical spine, subsequent encounter -S134XXS Sprain of ligaments of cervical spine, sequela -S135XXA Sprain of thyroid region, initial encounter -S135XXD Sprain of thyroid region, subsequent encounter -S135XXS Sprain of thyroid region, sequela -S138XXA Sprain of joints and ligaments of other parts of neck, initial encounter -S138XXD Sprain of joints and ligaments of other parts of neck, subsequent encounter -S138XXS Sprain of joints and ligaments of other parts of neck, sequela -S139XXA Sprain of joints and ligaments of unspecified parts of neck, initial encounter -S139XXD Sprain of joints and ligaments of unspecified parts of neck, subsequent encounter -S139XXS Sprain of joints and ligaments of unspecified parts of neck, sequela -S140XXA Concussion and edema of cervical spinal cord, initial encounter -S140XXD Concussion and edema of cervical spinal cord, subsequent encounter -S140XXS Concussion and edema of cervical spinal cord, sequela -S14101A Unspecified injury at C1 level of cervical spinal cord, initial encounter -S14101D Unspecified injury at C1 level of cervical spinal cord, subsequent encounter -S14101S Unspecified injury at C1 level of cervical spinal cord, sequela -S14102A Unspecified injury at C2 level of cervical spinal cord, initial encounter -S14102D Unspecified injury at C2 level of cervical spinal cord, subsequent encounter -S14102S Unspecified injury at C2 level of cervical spinal cord, sequela -S14103A Unspecified injury at C3 level of cervical spinal cord, initial encounter -S14103D Unspecified injury at C3 level of cervical spinal cord, subsequent encounter -S14103S Unspecified injury at C3 level of cervical spinal cord, sequela -S14104A Unspecified injury at C4 level of cervical spinal cord, initial encounter -S14104D Unspecified injury at C4 level of cervical spinal cord, subsequent encounter -S14104S Unspecified injury at C4 level of cervical spinal cord, sequela -S14105A Unspecified injury at C5 level of cervical spinal cord, initial encounter -S14105D Unspecified injury at C5 level of cervical spinal cord, subsequent encounter -S14105S Unspecified injury at C5 level of cervical spinal cord, sequela -S14106A Unspecified injury at C6 level of cervical spinal cord, initial encounter -S14106D Unspecified injury at C6 level of cervical spinal cord, subsequent encounter -S14106S Unspecified injury at C6 level of cervical spinal cord, sequela -S14107A Unspecified injury at C7 level of cervical spinal cord, initial encounter -S14107D Unspecified injury at C7 level of cervical spinal cord, subsequent encounter -S14107S Unspecified injury at C7 level of cervical spinal cord, sequela -S14108A Unspecified injury at C8 level of cervical spinal cord, initial encounter -S14108D Unspecified injury at C8 level of cervical spinal cord, subsequent encounter -S14108S Unspecified injury at C8 level of cervical spinal cord, sequela -S14109A Unspecified injury at unspecified level of cervical spinal cord, initial encounter -S14109D Unspecified injury at unspecified level of cervical spinal cord, subsequent encounter -S14109S Unspecified injury at unspecified level of cervical spinal cord, sequela -S14111A Complete lesion at C1 level of cervical spinal cord, initial encounter -S14111D Complete lesion at C1 level of cervical spinal cord, subsequent encounter -S14111S Complete lesion at C1 level of cervical spinal cord, sequela -S14112A Complete lesion at C2 level of cervical spinal cord, initial encounter -S14112D Complete lesion at C2 level of cervical spinal cord, subsequent encounter -S14112S Complete lesion at C2 level of cervical spinal cord, sequela -S14113A Complete lesion at C3 level of cervical spinal cord, initial encounter -S14113D Complete lesion at C3 level of cervical spinal cord, subsequent encounter -S14113S Complete lesion at C3 level of cervical spinal cord, sequela -S14114A Complete lesion at C4 level of cervical spinal cord, initial encounter -S14114D Complete lesion at C4 level of cervical spinal cord, subsequent encounter -S14114S Complete lesion at C4 level of cervical spinal cord, sequela -S14115A Complete lesion at C5 level of cervical spinal cord, initial encounter -S14115D Complete lesion at C5 level of cervical spinal cord, subsequent encounter -S14115S Complete lesion at C5 level of cervical spinal cord, sequela -S14116A Complete lesion at C6 level of cervical spinal cord, initial encounter -S14116D Complete lesion at C6 level of cervical spinal cord, subsequent encounter -S14116S Complete lesion at C6 level of cervical spinal cord, sequela -S14117A Complete lesion at C7 level of cervical spinal cord, initial encounter -S14117D Complete lesion at C7 level of cervical spinal cord, subsequent encounter -S14117S Complete lesion at C7 level of cervical spinal cord, sequela -S14118A Complete lesion at C8 level of cervical spinal cord, initial encounter -S14118D Complete lesion at C8 level of cervical spinal cord, subsequent encounter -S14118S Complete lesion at C8 level of cervical spinal cord, sequela -S14119A Complete lesion at unspecified level of cervical spinal cord, initial encounter -S14119D Complete lesion at unspecified level of cervical spinal cord, subsequent encounter -S14119S Complete lesion at unspecified level of cervical spinal cord, sequela -S14121A Central cord syndrome at C1 level of cervical spinal cord, initial encounter -S14121D Central cord syndrome at C1 level of cervical spinal cord, subsequent encounter -S14121S Central cord syndrome at C1 level of cervical spinal cord, sequela -S14122A Central cord syndrome at C2 level of cervical spinal cord, initial encounter -S14122D Central cord syndrome at C2 level of cervical spinal cord, subsequent encounter -S14122S Central cord syndrome at C2 level of cervical spinal cord, sequela -S14123A Central cord syndrome at C3 level of cervical spinal cord, initial encounter -S14123D Central cord syndrome at C3 level of cervical spinal cord, subsequent encounter -S14123S Central cord syndrome at C3 level of cervical spinal cord, sequela -S14124A Central cord syndrome at C4 level of cervical spinal cord, initial encounter -S14124D Central cord syndrome at C4 level of cervical spinal cord, subsequent encounter -S14124S Central cord syndrome at C4 level of cervical spinal cord, sequela -S14125A Central cord syndrome at C5 level of cervical spinal cord, initial encounter -S14125D Central cord syndrome at C5 level of cervical spinal cord, subsequent encounter -S14125S Central cord syndrome at C5 level of cervical spinal cord, sequela -S14126A Central cord syndrome at C6 level of cervical spinal cord, initial encounter -S14126D Central cord syndrome at C6 level of cervical spinal cord, subsequent encounter -S14126S Central cord syndrome at C6 level of cervical spinal cord, sequela -S14127A Central cord syndrome at C7 level of cervical spinal cord, initial encounter -S14127D Central cord syndrome at C7 level of cervical spinal cord, subsequent encounter -S14127S Central cord syndrome at C7 level of cervical spinal cord, sequela -S14128A Central cord syndrome at C8 level of cervical spinal cord, initial encounter -S14128D Central cord syndrome at C8 level of cervical spinal cord, subsequent encounter -S14128S Central cord syndrome at C8 level of cervical spinal cord, sequela -S14129A Central cord syndrome at unspecified level of cervical spinal cord, initial encounter -S14129D Central cord syndrome at unspecified level of cervical spinal cord, subsequent encounter -S14129S Central cord syndrome at unspecified level of cervical spinal cord, sequela -S14131A Anterior cord syndrome at C1 level of cervical spinal cord, initial encounter -S14131D Anterior cord syndrome at C1 level of cervical spinal cord, subsequent encounter -S14131S Anterior cord syndrome at C1 level of cervical spinal cord, sequela -S14132A Anterior cord syndrome at C2 level of cervical spinal cord, initial encounter -S14132D Anterior cord syndrome at C2 level of cervical spinal cord, subsequent encounter -S14132S Anterior cord syndrome at C2 level of cervical spinal cord, sequela -S14133A Anterior cord syndrome at C3 level of cervical spinal cord, initial encounter -S14133D Anterior cord syndrome at C3 level of cervical spinal cord, subsequent encounter -S14133S Anterior cord syndrome at C3 level of cervical spinal cord, sequela -S14134A Anterior cord syndrome at C4 level of cervical spinal cord, initial encounter -S14134D Anterior cord syndrome at C4 level of cervical spinal cord, subsequent encounter -S14134S Anterior cord syndrome at C4 level of cervical spinal cord, sequela -S14135A Anterior cord syndrome at C5 level of cervical spinal cord, initial encounter -S14135D Anterior cord syndrome at C5 level of cervical spinal cord, subsequent encounter -S14135S Anterior cord syndrome at C5 level of cervical spinal cord, sequela -S14136A Anterior cord syndrome at C6 level of cervical spinal cord, initial encounter -S14136D Anterior cord syndrome at C6 level of cervical spinal cord, subsequent encounter -S14136S Anterior cord syndrome at C6 level of cervical spinal cord, sequela -S14137A Anterior cord syndrome at C7 level of cervical spinal cord, initial encounter -S14137D Anterior cord syndrome at C7 level of cervical spinal cord, subsequent encounter -S14137S Anterior cord syndrome at C7 level of cervical spinal cord, sequela -S14138A Anterior cord syndrome at C8 level of cervical spinal cord, initial encounter -S14138D Anterior cord syndrome at C8 level of cervical spinal cord, subsequent encounter -S14138S Anterior cord syndrome at C8 level of cervical spinal cord, sequela -S14139A Anterior cord syndrome at unspecified level of cervical spinal cord, initial encounter -S14139D Anterior cord syndrome at unspecified level of cervical spinal cord, subsequent encounter -S14139S Anterior cord syndrome at unspecified level of cervical spinal cord, sequela -S14141A Brown-Sequard syndrome at C1 level of cervical spinal cord, initial encounter -S14141D Brown-Sequard syndrome at C1 level of cervical spinal cord, subsequent encounter -S14141S Brown-Sequard syndrome at C1 level of cervical spinal cord, sequela -S14142A Brown-Sequard syndrome at C2 level of cervical spinal cord, initial encounter -S14142D Brown-Sequard syndrome at C2 level of cervical spinal cord, subsequent encounter -S14142S Brown-Sequard syndrome at C2 level of cervical spinal cord, sequela -S14143A Brown-Sequard syndrome at C3 level of cervical spinal cord, initial encounter -S14143D Brown-Sequard syndrome at C3 level of cervical spinal cord, subsequent encounter -S14143S Brown-Sequard syndrome at C3 level of cervical spinal cord, sequela -S14144A Brown-Sequard syndrome at C4 level of cervical spinal cord, initial encounter -S14144D Brown-Sequard syndrome at C4 level of cervical spinal cord, subsequent encounter -S14144S Brown-Sequard syndrome at C4 level of cervical spinal cord, sequela -S14145A Brown-Sequard syndrome at C5 level of cervical spinal cord, initial encounter -S14145D Brown-Sequard syndrome at C5 level of cervical spinal cord, subsequent encounter -S14145S Brown-Sequard syndrome at C5 level of cervical spinal cord, sequela -S14146A Brown-Sequard syndrome at C6 level of cervical spinal cord, initial encounter -S14146D Brown-Sequard syndrome at C6 level of cervical spinal cord, subsequent encounter -S14146S Brown-Sequard syndrome at C6 level of cervical spinal cord, sequela -S14147A Brown-Sequard syndrome at C7 level of cervical spinal cord, initial encounter -S14147D Brown-Sequard syndrome at C7 level of cervical spinal cord, subsequent encounter -S14147S Brown-Sequard syndrome at C7 level of cervical spinal cord, sequela -S14148A Brown-Sequard syndrome at C8 level of cervical spinal cord, initial encounter -S14148D Brown-Sequard syndrome at C8 level of cervical spinal cord, subsequent encounter -S14148S Brown-Sequard syndrome at C8 level of cervical spinal cord, sequela -S14149A Brown-Sequard syndrome at unspecified level of cervical spinal cord, initial encounter -S14149D Brown-Sequard syndrome at unspecified level of cervical spinal cord, subsequent encounter -S14149S Brown-Sequard syndrome at unspecified level of cervical spinal cord, sequela -S14151A Other incomplete lesion at C1 level of cervical spinal cord, initial encounter -S14151D Other incomplete lesion at C1 level of cervical spinal cord, subsequent encounter -S14151S Other incomplete lesion at C1 level of cervical spinal cord, sequela -S14152A Other incomplete lesion at C2 level of cervical spinal cord, initial encounter -S14152D Other incomplete lesion at C2 level of cervical spinal cord, subsequent encounter -S14152S Other incomplete lesion at C2 level of cervical spinal cord, sequela -S14153A Other incomplete lesion at C3 level of cervical spinal cord, initial encounter -S14153D Other incomplete lesion at C3 level of cervical spinal cord, subsequent encounter -S14153S Other incomplete lesion at C3 level of cervical spinal cord, sequela -S14154A Other incomplete lesion at C4 level of cervical spinal cord, initial encounter -S14154D Other incomplete lesion at C4 level of cervical spinal cord, subsequent encounter -S14154S Other incomplete lesion at C4 level of cervical spinal cord, sequela -S14155A Other incomplete lesion at C5 level of cervical spinal cord, initial encounter -S14155D Other incomplete lesion at C5 level of cervical spinal cord, subsequent encounter -S14155S Other incomplete lesion at C5 level of cervical spinal cord, sequela -S14156A Other incomplete lesion at C6 level of cervical spinal cord, initial encounter -S14156D Other incomplete lesion at C6 level of cervical spinal cord, subsequent encounter -S14156S Other incomplete lesion at C6 level of cervical spinal cord, sequela -S14157A Other incomplete lesion at C7 level of cervical spinal cord, initial encounter -S14157D Other incomplete lesion at C7 level of cervical spinal cord, subsequent encounter -S14157S Other incomplete lesion at C7 level of cervical spinal cord, sequela -S14158A Other incomplete lesion at C8 level of cervical spinal cord, initial encounter -S14158D Other incomplete lesion at C8 level of cervical spinal cord, subsequent encounter -S14158S Other incomplete lesion at C8 level of cervical spinal cord, sequela -S14159A Other incomplete lesion at unspecified level of cervical spinal cord, initial encounter -S14159D Other incomplete lesion at unspecified level of cervical spinal cord, subsequent encounter -S14159S Other incomplete lesion at unspecified level of cervical spinal cord, sequela -S142XXA Injury of nerve root of cervical spine, initial encounter -S142XXD Injury of nerve root of cervical spine, subsequent encounter -S142XXS Injury of nerve root of cervical spine, sequela -S143XXA Injury of brachial plexus, initial encounter -S143XXD Injury of brachial plexus, subsequent encounter -S143XXS Injury of brachial plexus, sequela -S144XXA Injury of peripheral nerves of neck, initial encounter -S144XXD Injury of peripheral nerves of neck, subsequent encounter -S144XXS Injury of peripheral nerves of neck, sequela -S145XXA Injury of cervical sympathetic nerves, initial encounter -S145XXD Injury of cervical sympathetic nerves, subsequent encounter -S145XXS Injury of cervical sympathetic nerves, sequela -S148XXA Injury of other specified nerves of neck, initial encounter -S148XXD Injury of other specified nerves of neck, subsequent encounter -S148XXS Injury of other specified nerves of neck, sequela -S149XXA Injury of unspecified nerves of neck, initial encounter -S149XXD Injury of unspecified nerves of neck, subsequent encounter -S149XXS Injury of unspecified nerves of neck, sequela -S15001A Unspecified injury of right carotid artery, initial encounter -S15001D Unspecified injury of right carotid artery, subsequent encounter -S15001S Unspecified injury of right carotid artery, sequela -S15002A Unspecified injury of left carotid artery, initial encounter -S15002D Unspecified injury of left carotid artery, subsequent encounter -S15002S Unspecified injury of left carotid artery, sequela -S15009A Unspecified injury of unspecified carotid artery, initial encounter -S15009D Unspecified injury of unspecified carotid artery, subsequent encounter -S15009S Unspecified injury of unspecified carotid artery, sequela -S15011A Minor laceration of right carotid artery, initial encounter -S15011D Minor laceration of right carotid artery, subsequent encounter -S15011S Minor laceration of right carotid artery, sequela -S15012A Minor laceration of left carotid artery, initial encounter -S15012D Minor laceration of left carotid artery, subsequent encounter -S15012S Minor laceration of left carotid artery, sequela -S15019A Minor laceration of unspecified carotid artery, initial encounter -S15019D Minor laceration of unspecified carotid artery, subsequent encounter -S15019S Minor laceration of unspecified carotid artery, sequela -S15021A Major laceration of right carotid artery, initial encounter -S15021D Major laceration of right carotid artery, subsequent encounter -S15021S Major laceration of right carotid artery, sequela -S15022A Major laceration of left carotid artery, initial encounter -S15022D Major laceration of left carotid artery, subsequent encounter -S15022S Major laceration of left carotid artery, sequela -S15029A Major laceration of unspecified carotid artery, initial encounter -S15029D Major laceration of unspecified carotid artery, subsequent encounter -S15029S Major laceration of unspecified carotid artery, sequela -S15091A Other specified injury of right carotid artery, initial encounter -S15091D Other specified injury of right carotid artery, subsequent encounter -S15091S Other specified injury of right carotid artery, sequela -S15092A Other specified injury of left carotid artery, initial encounter -S15092D Other specified injury of left carotid artery, subsequent encounter -S15092S Other specified injury of left carotid artery, sequela -S15099A Other specified injury of unspecified carotid artery, initial encounter -S15099D Other specified injury of unspecified carotid artery, subsequent encounter -S15099S Other specified injury of unspecified carotid artery, sequela -S15101A Unspecified injury of right vertebral artery, initial encounter -S15101D Unspecified injury of right vertebral artery, subsequent encounter -S15101S Unspecified injury of right vertebral artery, sequela -S15102A Unspecified injury of left vertebral artery, initial encounter -S15102D Unspecified injury of left vertebral artery, subsequent encounter -S15102S Unspecified injury of left vertebral artery, sequela -S15109A Unspecified injury of unspecified vertebral artery, initial encounter -S15109D Unspecified injury of unspecified vertebral artery, subsequent encounter -S15109S Unspecified injury of unspecified vertebral artery, sequela -S15111A Minor laceration of right vertebral artery, initial encounter -S15111D Minor laceration of right vertebral artery, subsequent encounter -S15111S Minor laceration of right vertebral artery, sequela -S15112A Minor laceration of left vertebral artery, initial encounter -S15112D Minor laceration of left vertebral artery, subsequent encounter -S15112S Minor laceration of left vertebral artery, sequela -S15119A Minor laceration of unspecified vertebral artery, initial encounter -S15119D Minor laceration of unspecified vertebral artery, subsequent encounter -S15119S Minor laceration of unspecified vertebral artery, sequela -S15121A Major laceration of right vertebral artery, initial encounter -S15121D Major laceration of right vertebral artery, subsequent encounter -S15121S Major laceration of right vertebral artery, sequela -S15122A Major laceration of left vertebral artery, initial encounter -S15122D Major laceration of left vertebral artery, subsequent encounter -S15122S Major laceration of left vertebral artery, sequela -S15129A Major laceration of unspecified vertebral artery, initial encounter -S15129D Major laceration of unspecified vertebral artery, subsequent encounter -S15129S Major laceration of unspecified vertebral artery, sequela -S15191A Other specified injury of right vertebral artery, initial encounter -S15191D Other specified injury of right vertebral artery, subsequent encounter -S15191S Other specified injury of right vertebral artery, sequela -S15192A Other specified injury of left vertebral artery, initial encounter -S15192D Other specified injury of left vertebral artery, subsequent encounter -S15192S Other specified injury of left vertebral artery, sequela -S15199A Other specified injury of unspecified vertebral artery, initial encounter -S15199D Other specified injury of unspecified vertebral artery, subsequent encounter -S15199S Other specified injury of unspecified vertebral artery, sequela -S15201A Unspecified injury of right external jugular vein, initial encounter -S15201D Unspecified injury of right external jugular vein, subsequent encounter -S15201S Unspecified injury of right external jugular vein, sequela -S15202A Unspecified injury of left external jugular vein, initial encounter -S15202D Unspecified injury of left external jugular vein, subsequent encounter -S15202S Unspecified injury of left external jugular vein, sequela -S15209A Unspecified injury of unspecified external jugular vein, initial encounter -S15209D Unspecified injury of unspecified external jugular vein, subsequent encounter -S15209S Unspecified injury of unspecified external jugular vein, sequela -S15211A Minor laceration of right external jugular vein, initial encounter -S15211D Minor laceration of right external jugular vein, subsequent encounter -S15211S Minor laceration of right external jugular vein, sequela -S15212A Minor laceration of left external jugular vein, initial encounter -S15212D Minor laceration of left external jugular vein, subsequent encounter -S15212S Minor laceration of left external jugular vein, sequela -S15219A Minor laceration of unspecified external jugular vein, initial encounter -S15219D Minor laceration of unspecified external jugular vein, subsequent encounter -S15219S Minor laceration of unspecified external jugular vein, sequela -S15221A Major laceration of right external jugular vein, initial encounter -S15221D Major laceration of right external jugular vein, subsequent encounter -S15221S Major laceration of right external jugular vein, sequela -S15222A Major laceration of left external jugular vein, initial encounter -S15222D Major laceration of left external jugular vein, subsequent encounter -S15222S Major laceration of left external jugular vein, sequela -S15229A Major laceration of unspecified external jugular vein, initial encounter -S15229D Major laceration of unspecified external jugular vein, subsequent encounter -S15229S Major laceration of unspecified external jugular vein, sequela -S15291A Other specified injury of right external jugular vein, initial encounter -S15291D Other specified injury of right external jugular vein, subsequent encounter -S15291S Other specified injury of right external jugular vein, sequela -S15292A Other specified injury of left external jugular vein, initial encounter -S15292D Other specified injury of left external jugular vein, subsequent encounter -S15292S Other specified injury of left external jugular vein, sequela -S15299A Other specified injury of unspecified external jugular vein, initial encounter -S15299D Other specified injury of unspecified external jugular vein, subsequent encounter -S15299S Other specified injury of unspecified external jugular vein, sequela -S15301A Unspecified injury of right internal jugular vein, initial encounter -S15301D Unspecified injury of right internal jugular vein, subsequent encounter -S15301S Unspecified injury of right internal jugular vein, sequela -S15302A Unspecified injury of left internal jugular vein, initial encounter -S15302D Unspecified injury of left internal jugular vein, subsequent encounter -S15302S Unspecified injury of left internal jugular vein, sequela -S15309A Unspecified injury of unspecified internal jugular vein, initial encounter -S15309D Unspecified injury of unspecified internal jugular vein, subsequent encounter -S15309S Unspecified injury of unspecified internal jugular vein, sequela -S15311A Minor laceration of right internal jugular vein, initial encounter -S15311D Minor laceration of right internal jugular vein, subsequent encounter -S15311S Minor laceration of right internal jugular vein, sequela -S15312A Minor laceration of left internal jugular vein, initial encounter -S15312D Minor laceration of left internal jugular vein, subsequent encounter -S15312S Minor laceration of left internal jugular vein, sequela -S15319A Minor laceration of unspecified internal jugular vein, initial encounter -S15319D Minor laceration of unspecified internal jugular vein, subsequent encounter -S15319S Minor laceration of unspecified internal jugular vein, sequela -S15321A Major laceration of right internal jugular vein, initial encounter -S15321D Major laceration of right internal jugular vein, subsequent encounter -S15321S Major laceration of right internal jugular vein, sequela -S15322A Major laceration of left internal jugular vein, initial encounter -S15322D Major laceration of left internal jugular vein, subsequent encounter -S15322S Major laceration of left internal jugular vein, sequela -S15329A Major laceration of unspecified internal jugular vein, initial encounter -S15329D Major laceration of unspecified internal jugular vein, subsequent encounter -S15329S Major laceration of unspecified internal jugular vein, sequela -S15391A Other specified injury of right internal jugular vein, initial encounter -S15391D Other specified injury of right internal jugular vein, subsequent encounter -S15391S Other specified injury of right internal jugular vein, sequela -S15392A Other specified injury of left internal jugular vein, initial encounter -S15392D Other specified injury of left internal jugular vein, subsequent encounter -S15392S Other specified injury of left internal jugular vein, sequela -S15399A Other specified injury of unspecified internal jugular vein, initial encounter -S15399D Other specified injury of unspecified internal jugular vein, subsequent encounter -S15399S Other specified injury of unspecified internal jugular vein, sequela -S158XXA Injury of other specified blood vessels at neck level, initial encounter -S158XXD Injury of other specified blood vessels at neck level, subsequent encounter -S158XXS Injury of other specified blood vessels at neck level, sequela -S159XXA Injury of unspecified blood vessel at neck level, initial encounter -S159XXD Injury of unspecified blood vessel at neck level, subsequent encounter -S159XXS Injury of unspecified blood vessel at neck level, sequela -S161XXA Strain of muscle, fascia and tendon at neck level, initial encounter -S161XXD Strain of muscle, fascia and tendon at neck level, subsequent encounter -S161XXS Strain of muscle, fascia and tendon at neck level, sequela -S162XXA Laceration of muscle, fascia and tendon at neck level, initial encounter -S162XXD Laceration of muscle, fascia and tendon at neck level, subsequent encounter -S162XXS Laceration of muscle, fascia and tendon at neck level, sequela -S168XXA Other specified injury of muscle, fascia and tendon at neck level, initial encounter -S168XXD Other specified injury of muscle, fascia and tendon at neck level, subsequent encounter -S168XXS Other specified injury of muscle, fascia and tendon at neck level, sequela -S169XXA Unspecified injury of muscle, fascia and tendon at neck level, initial encounter -S169XXD Unspecified injury of muscle, fascia and tendon at neck level, subsequent encounter -S169XXS Unspecified injury of muscle, fascia and tendon at neck level, sequela -S170XXA Crushing injury of larynx and trachea, initial encounter -S170XXD Crushing injury of larynx and trachea, subsequent encounter -S170XXS Crushing injury of larynx and trachea, sequela -S178XXA Crushing injury of other specified parts of neck, initial encounter -S178XXD Crushing injury of other specified parts of neck, subsequent encounter -S178XXS Crushing injury of other specified parts of neck, sequela -S179XXA Crushing injury of neck, part unspecified, initial encounter -S179XXD Crushing injury of neck, part unspecified, subsequent encounter -S179XXS Crushing injury of neck, part unspecified, sequela -S1980XA Other specified injuries of unspecified part of neck, initial encounter -S1980XD Other specified injuries of unspecified part of neck, subsequent encounter -S1980XS Other specified injuries of unspecified part of neck, sequela -S1981XA Other specified injuries of larynx, initial encounter -S1981XD Other specified injuries of larynx, subsequent encounter -S1981XS Other specified injuries of larynx, sequela -S1982XA Other specified injuries of cervical trachea, initial encounter -S1982XD Other specified injuries of cervical trachea, subsequent encounter -S1982XS Other specified injuries of cervical trachea, sequela -S1983XA Other specified injuries of vocal cord, initial encounter -S1983XD Other specified injuries of vocal cord, subsequent encounter -S1983XS Other specified injuries of vocal cord, sequela -S1984XA Other specified injuries of thyroid gland, initial encounter -S1984XD Other specified injuries of thyroid gland, subsequent encounter -S1984XS Other specified injuries of thyroid gland, sequela -S1985XA Other specified injuries of pharynx and cervical esophagus, initial encounter -S1985XD Other specified injuries of pharynx and cervical esophagus, subsequent encounter -S1985XS Other specified injuries of pharynx and cervical esophagus, sequela -S1989XA Other specified injuries of other specified part of neck, initial encounter -S1989XD Other specified injuries of other specified part of neck, subsequent encounter -S1989XS Other specified injuries of other specified part of neck, sequela -S199XXA Unspecified injury of neck, initial encounter -S199XXD Unspecified injury of neck, subsequent encounter -S199XXS Unspecified injury of neck, sequela -S2000XA Contusion of breast, unspecified breast, initial encounter -S2000XD Contusion of breast, unspecified breast, subsequent encounter -S2000XS Contusion of breast, unspecified breast, sequela -S2001XA Contusion of right breast, initial encounter -S2001XD Contusion of right breast, subsequent encounter -S2001XS Contusion of right breast, sequela -S2002XA Contusion of left breast, initial encounter -S2002XD Contusion of left breast, subsequent encounter -S2002XS Contusion of left breast, sequela -S20101A Unspecified superficial injuries of breast, right breast, initial encounter -S20101D Unspecified superficial injuries of breast, right breast, subsequent encounter -S20101S Unspecified superficial injuries of breast, right breast, sequela -S20102A Unspecified superficial injuries of breast, left breast, initial encounter -S20102D Unspecified superficial injuries of breast, left breast, subsequent encounter -S20102S Unspecified superficial injuries of breast, left breast, sequela -S20109A Unspecified superficial injuries of breast, unspecified breast, initial encounter -S20109D Unspecified superficial injuries of breast, unspecified breast, subsequent encounter -S20109S Unspecified superficial injuries of breast, unspecified breast, sequela -S20111A Abrasion of breast, right breast, initial encounter -S20111D Abrasion of breast, right breast, subsequent encounter -S20111S Abrasion of breast, right breast, sequela -S20112A Abrasion of breast, left breast, initial encounter -S20112D Abrasion of breast, left breast, subsequent encounter -S20112S Abrasion of breast, left breast, sequela -S20119A Abrasion of breast, unspecified breast, initial encounter -S20119D Abrasion of breast, unspecified breast, subsequent encounter -S20119S Abrasion of breast, unspecified breast, sequela -S20121A Blister (nonthermal) of breast, right breast, initial encounter -S20121D Blister (nonthermal) of breast, right breast, subsequent encounter -S20121S Blister (nonthermal) of breast, right breast, sequela -S20122A Blister (nonthermal) of breast, left breast, initial encounter -S20122D Blister (nonthermal) of breast, left breast, subsequent encounter -S20122S Blister (nonthermal) of breast, left breast, sequela -S20129A Blister (nonthermal) of breast, unspecified breast, initial encounter -S20129D Blister (nonthermal) of breast, unspecified breast, subsequent encounter -S20129S Blister (nonthermal) of breast, unspecified breast, sequela -S20141A External constriction of part of breast, right breast, initial encounter -S20141D External constriction of part of breast, right breast, subsequent encounter -S20141S External constriction of part of breast, right breast, sequela -S20142A External constriction of part of breast, left breast, initial encounter -S20142D External constriction of part of breast, left breast, subsequent encounter -S20142S External constriction of part of breast, left breast, sequela -S20149A External constriction of part of breast, unspecified breast, initial encounter -S20149D External constriction of part of breast, unspecified breast, subsequent encounter -S20149S External constriction of part of breast, unspecified breast, sequela -S20151A Superficial foreign body of breast, right breast, initial encounter -S20151D Superficial foreign body of breast, right breast, subsequent encounter -S20151S Superficial foreign body of breast, right breast, sequela -S20152A Superficial foreign body of breast, left breast, initial encounter -S20152D Superficial foreign body of breast, left breast, subsequent encounter -S20152S Superficial foreign body of breast, left breast, sequela -S20159A Superficial foreign body of breast, unspecified breast, initial encounter -S20159D Superficial foreign body of breast, unspecified breast, subsequent encounter -S20159S Superficial foreign body of breast, unspecified breast, sequela -S20161A Insect bite (nonvenomous) of breast, right breast, initial encounter -S20161D Insect bite (nonvenomous) of breast, right breast, subsequent encounter -S20161S Insect bite (nonvenomous) of breast, right breast, sequela -S20162A Insect bite (nonvenomous) of breast, left breast, initial encounter -S20162D Insect bite (nonvenomous) of breast, left breast, subsequent encounter -S20162S Insect bite (nonvenomous) of breast, left breast, sequela -S20169A Insect bite (nonvenomous) of breast, unspecified breast, initial encounter -S20169D Insect bite (nonvenomous) of breast, unspecified breast, subsequent encounter -S20169S Insect bite (nonvenomous) of breast, unspecified breast, sequela -S20171A Other superficial bite of breast, right breast, initial encounter -S20171D Other superficial bite of breast, right breast, subsequent encounter -S20171S Other superficial bite of breast, right breast, sequela -S20172A Other superficial bite of breast, left breast, initial encounter -S20172D Other superficial bite of breast, left breast, subsequent encounter -S20172S Other superficial bite of breast, left breast, sequela -S20179A Other superficial bite of breast, unspecified breast, initial encounter -S20179D Other superficial bite of breast, unspecified breast, subsequent encounter -S20179S Other superficial bite of breast, unspecified breast, sequela -S2020XA Contusion of thorax, unspecified, initial encounter -S2020XD Contusion of thorax, unspecified, subsequent encounter -S2020XS Contusion of thorax, unspecified, sequela -S20211A Contusion of right front wall of thorax, initial encounter -S20211D Contusion of right front wall of thorax, subsequent encounter -S20211S Contusion of right front wall of thorax, sequela -S20212A Contusion of left front wall of thorax, initial encounter -S20212D Contusion of left front wall of thorax, subsequent encounter -S20212S Contusion of left front wall of thorax, sequela -S20219A Contusion of unspecified front wall of thorax, initial encounter -S20219D Contusion of unspecified front wall of thorax, subsequent encounter -S20219S Contusion of unspecified front wall of thorax, sequela -S20221A Contusion of right back wall of thorax, initial encounter -S20221D Contusion of right back wall of thorax, subsequent encounter -S20221S Contusion of right back wall of thorax, sequela -S20222A Contusion of left back wall of thorax, initial encounter -S20222D Contusion of left back wall of thorax, subsequent encounter -S20222S Contusion of left back wall of thorax, sequela -S20229A Contusion of unspecified back wall of thorax, initial encounter -S20229D Contusion of unspecified back wall of thorax, subsequent encounter -S20229S Contusion of unspecified back wall of thorax, sequela -S20301A Unspecified superficial injuries of right front wall of thorax, initial encounter -S20301D Unspecified superficial injuries of right front wall of thorax, subsequent encounter -S20301S Unspecified superficial injuries of right front wall of thorax, sequela -S20302A Unspecified superficial injuries of left front wall of thorax, initial encounter -S20302D Unspecified superficial injuries of left front wall of thorax, subsequent encounter -S20302S Unspecified superficial injuries of left front wall of thorax, sequela -S20309A Unspecified superficial injuries of unspecified front wall of thorax, initial encounter -S20309D Unspecified superficial injuries of unspecified front wall of thorax, subsequent encounter -S20309S Unspecified superficial injuries of unspecified front wall of thorax, sequela -S20311A Abrasion of right front wall of thorax, initial encounter -S20311D Abrasion of right front wall of thorax, subsequent encounter -S20311S Abrasion of right front wall of thorax, sequela -S20312A Abrasion of left front wall of thorax, initial encounter -S20312D Abrasion of left front wall of thorax, subsequent encounter -S20312S Abrasion of left front wall of thorax, sequela -S20319A Abrasion of unspecified front wall of thorax, initial encounter -S20319D Abrasion of unspecified front wall of thorax, subsequent encounter -S20319S Abrasion of unspecified front wall of thorax, sequela -S20321A Blister (nonthermal) of right front wall of thorax, initial encounter -S20321D Blister (nonthermal) of right front wall of thorax, subsequent encounter -S20321S Blister (nonthermal) of right front wall of thorax, sequela -S20322A Blister (nonthermal) of left front wall of thorax, initial encounter -S20322D Blister (nonthermal) of left front wall of thorax, subsequent encounter -S20322S Blister (nonthermal) of left front wall of thorax, sequela -S20329A Blister (nonthermal) of unspecified front wall of thorax, initial encounter -S20329D Blister (nonthermal) of unspecified front wall of thorax, subsequent encounter -S20329S Blister (nonthermal) of unspecified front wall of thorax, sequela -S20341A External constriction of right front wall of thorax, initial encounter -S20341D External constriction of right front wall of thorax, subsequent encounter -S20341S External constriction of right front wall of thorax, sequela -S20342A External constriction of left front wall of thorax, initial encounter -S20342D External constriction of left front wall of thorax, subsequent encounter -S20342S External constriction of left front wall of thorax, sequela -S20349A External constriction of unspecified front wall of thorax, initial encounter -S20349D External constriction of unspecified front wall of thorax, subsequent encounter -S20349S External constriction of unspecified front wall of thorax, sequela -S20351A Superficial foreign body of right front wall of thorax, initial encounter -S20351D Superficial foreign body of right front wall of thorax, subsequent encounter -S20351S Superficial foreign body of right front wall of thorax, sequela -S20352A Superficial foreign body of left front wall of thorax, initial encounter -S20352D Superficial foreign body of left front wall of thorax, subsequent encounter -S20352S Superficial foreign body of left front wall of thorax, sequela -S20359A Superficial foreign body of unspecified front wall of thorax, initial encounter -S20359D Superficial foreign body of unspecified front wall of thorax, subsequent encounter -S20359S Superficial foreign body of unspecified front wall of thorax, sequela -S20361A Insect bite (nonvenomous) of right front wall of thorax, initial encounter -S20361D Insect bite (nonvenomous) of right front wall of thorax, subsequent encounter -S20361S Insect bite (nonvenomous) of right front wall of thorax, sequela -S20362A Insect bite (nonvenomous) of left front wall of thorax, initial encounter -S20362D Insect bite (nonvenomous) of left front wall of thorax, subsequent encounter -S20362S Insect bite (nonvenomous) of left front wall of thorax, sequela -S20369A Insect bite (nonvenomous) of unspecified front wall of thorax, initial encounter -S20369D Insect bite (nonvenomous) of unspecified front wall of thorax, subsequent encounter -S20369S Insect bite (nonvenomous) of unspecified front wall of thorax, sequela -S20371A Other superficial bite of right front wall of thorax, initial encounter -S20371D Other superficial bite of right front wall of thorax, subsequent encounter -S20371S Other superficial bite of right front wall of thorax, sequela -S20372A Other superficial bite of left front wall of thorax, initial encounter -S20372D Other superficial bite of left front wall of thorax, subsequent encounter -S20372S Other superficial bite of left front wall of thorax, sequela -S20379A Other superficial bite of unspecified front wall of thorax, initial encounter -S20379D Other superficial bite of unspecified front wall of thorax, subsequent encounter -S20379S Other superficial bite of unspecified front wall of thorax, sequela -S20401A Unspecified superficial injuries of right back wall of thorax, initial encounter -S20401D Unspecified superficial injuries of right back wall of thorax, subsequent encounter -S20401S Unspecified superficial injuries of right back wall of thorax, sequela -S20402A Unspecified superficial injuries of left back wall of thorax, initial encounter -S20402D Unspecified superficial injuries of left back wall of thorax, subsequent encounter -S20402S Unspecified superficial injuries of left back wall of thorax, sequela -S20409A Unspecified superficial injuries of unspecified back wall of thorax, initial encounter -S20409D Unspecified superficial injuries of unspecified back wall of thorax, subsequent encounter -S20409S Unspecified superficial injuries of unspecified back wall of thorax, sequela -S20411A Abrasion of right back wall of thorax, initial encounter -S20411D Abrasion of right back wall of thorax, subsequent encounter -S20411S Abrasion of right back wall of thorax, sequela -S20412A Abrasion of left back wall of thorax, initial encounter -S20412D Abrasion of left back wall of thorax, subsequent encounter -S20412S Abrasion of left back wall of thorax, sequela -S20419A Abrasion of unspecified back wall of thorax, initial encounter -S20419D Abrasion of unspecified back wall of thorax, subsequent encounter -S20419S Abrasion of unspecified back wall of thorax, sequela -S20421A Blister (nonthermal) of right back wall of thorax, initial encounter -S20421D Blister (nonthermal) of right back wall of thorax, subsequent encounter -S20421S Blister (nonthermal) of right back wall of thorax, sequela -S20422A Blister (nonthermal) of left back wall of thorax, initial encounter -S20422D Blister (nonthermal) of left back wall of thorax, subsequent encounter -S20422S Blister (nonthermal) of left back wall of thorax, sequela -S20429A Blister (nonthermal) of unspecified back wall of thorax, initial encounter -S20429D Blister (nonthermal) of unspecified back wall of thorax, subsequent encounter -S20429S Blister (nonthermal) of unspecified back wall of thorax, sequela -S20441A External constriction of right back wall of thorax, initial encounter -S20441D External constriction of right back wall of thorax, subsequent encounter -S20441S External constriction of right back wall of thorax, sequela -S20442A External constriction of left back wall of thorax, initial encounter -S20442D External constriction of left back wall of thorax, subsequent encounter -S20442S External constriction of left back wall of thorax, sequela -S20449A External constriction of unspecified back wall of thorax, initial encounter -S20449D External constriction of unspecified back wall of thorax, subsequent encounter -S20449S External constriction of unspecified back wall of thorax, sequela -S20451A Superficial foreign body of right back wall of thorax, initial encounter -S20451D Superficial foreign body of right back wall of thorax, subsequent encounter -S20451S Superficial foreign body of right back wall of thorax, sequela -S20452A Superficial foreign body of left back wall of thorax, initial encounter -S20452D Superficial foreign body of left back wall of thorax, subsequent encounter -S20452S Superficial foreign body of left back wall of thorax, sequela -S20459A Superficial foreign body of unspecified back wall of thorax, initial encounter -S20459D Superficial foreign body of unspecified back wall of thorax, subsequent encounter -S20459S Superficial foreign body of unspecified back wall of thorax, sequela -S20461A Insect bite (nonvenomous) of right back wall of thorax, initial encounter -S20461D Insect bite (nonvenomous) of right back wall of thorax, subsequent encounter -S20461S Insect bite (nonvenomous) of right back wall of thorax, sequela -S20462A Insect bite (nonvenomous) of left back wall of thorax, initial encounter -S20462D Insect bite (nonvenomous) of left back wall of thorax, subsequent encounter -S20462S Insect bite (nonvenomous) of left back wall of thorax, sequela -S20469A Insect bite (nonvenomous) of unspecified back wall of thorax, initial encounter -S20469D Insect bite (nonvenomous) of unspecified back wall of thorax, subsequent encounter -S20469S Insect bite (nonvenomous) of unspecified back wall of thorax, sequela -S20471A Other superficial bite of right back wall of thorax, initial encounter -S20471D Other superficial bite of right back wall of thorax, subsequent encounter -S20471S Other superficial bite of right back wall of thorax, sequela -S20472A Other superficial bite of left back wall of thorax, initial encounter -S20472D Other superficial bite of left back wall of thorax, subsequent encounter -S20472S Other superficial bite of left back wall of thorax, sequela -S20479A Other superficial bite of unspecified back wall of thorax, initial encounter -S20479D Other superficial bite of unspecified back wall of thorax, subsequent encounter -S20479S Other superficial bite of unspecified back wall of thorax, sequela -S2090XA Unspecified superficial injury of unspecified parts of thorax, initial encounter -S2090XD Unspecified superficial injury of unspecified parts of thorax, subsequent encounter -S2090XS Unspecified superficial injury of unspecified parts of thorax, sequela -S2091XA Abrasion of unspecified parts of thorax, initial encounter -S2091XD Abrasion of unspecified parts of thorax, subsequent encounter -S2091XS Abrasion of unspecified parts of thorax, sequela -S2092XA Blister (nonthermal) of unspecified parts of thorax, initial encounter -S2092XD Blister (nonthermal) of unspecified parts of thorax, subsequent encounter -S2092XS Blister (nonthermal) of unspecified parts of thorax, sequela -S2094XA External constriction of unspecified parts of thorax, initial encounter -S2094XD External constriction of unspecified parts of thorax, subsequent encounter -S2094XS External constriction of unspecified parts of thorax, sequela -S2095XA Superficial foreign body of unspecified parts of thorax, initial encounter -S2095XD Superficial foreign body of unspecified parts of thorax, subsequent encounter -S2095XS Superficial foreign body of unspecified parts of thorax, sequela -S2096XA Insect bite (nonvenomous) of unspecified parts of thorax, initial encounter -S2096XD Insect bite (nonvenomous) of unspecified parts of thorax, subsequent encounter -S2096XS Insect bite (nonvenomous) of unspecified parts of thorax, sequela -S2097XA Other superficial bite of unspecified parts of thorax, initial encounter -S2097XD Other superficial bite of unspecified parts of thorax, subsequent encounter -S2097XS Other superficial bite of unspecified parts of thorax, sequela -S21001A Unspecified open wound of right breast, initial encounter -S21001D Unspecified open wound of right breast, subsequent encounter -S21001S Unspecified open wound of right breast, sequela -S21002A Unspecified open wound of left breast, initial encounter -S21002D Unspecified open wound of left breast, subsequent encounter -S21002S Unspecified open wound of left breast, sequela -S21009A Unspecified open wound of unspecified breast, initial encounter -S21009D Unspecified open wound of unspecified breast, subsequent encounter -S21009S Unspecified open wound of unspecified breast, sequela -S21011A Laceration without foreign body of right breast, initial encounter -S21011D Laceration without foreign body of right breast, subsequent encounter -S21011S Laceration without foreign body of right breast, sequela -S21012A Laceration without foreign body of left breast, initial encounter -S21012D Laceration without foreign body of left breast, subsequent encounter -S21012S Laceration without foreign body of left breast, sequela -S21019A Laceration without foreign body of unspecified breast, initial encounter -S21019D Laceration without foreign body of unspecified breast, subsequent encounter -S21019S Laceration without foreign body of unspecified breast, sequela -S21021A Laceration with foreign body of right breast, initial encounter -S21021D Laceration with foreign body of right breast, subsequent encounter -S21021S Laceration with foreign body of right breast, sequela -S21022A Laceration with foreign body of left breast, initial encounter -S21022D Laceration with foreign body of left breast, subsequent encounter -S21022S Laceration with foreign body of left breast, sequela -S21029A Laceration with foreign body of unspecified breast, initial encounter -S21029D Laceration with foreign body of unspecified breast, subsequent encounter -S21029S Laceration with foreign body of unspecified breast, sequela -S21031A Puncture wound without foreign body of right breast, initial encounter -S21031D Puncture wound without foreign body of right breast, subsequent encounter -S21031S Puncture wound without foreign body of right breast, sequela -S21032A Puncture wound without foreign body of left breast, initial encounter -S21032D Puncture wound without foreign body of left breast, subsequent encounter -S21032S Puncture wound without foreign body of left breast, sequela -S21039A Puncture wound without foreign body of unspecified breast, initial encounter -S21039D Puncture wound without foreign body of unspecified breast, subsequent encounter -S21039S Puncture wound without foreign body of unspecified breast, sequela -S21041A Puncture wound with foreign body of right breast, initial encounter -S21041D Puncture wound with foreign body of right breast, subsequent encounter -S21041S Puncture wound with foreign body of right breast, sequela -S21042A Puncture wound with foreign body of left breast, initial encounter -S21042D Puncture wound with foreign body of left breast, subsequent encounter -S21042S Puncture wound with foreign body of left breast, sequela -S21049A Puncture wound with foreign body of unspecified breast, initial encounter -S21049D Puncture wound with foreign body of unspecified breast, subsequent encounter -S21049S Puncture wound with foreign body of unspecified breast, sequela -S21051A Open bite of right breast, initial encounter -S21051D Open bite of right breast, subsequent encounter -S21051S Open bite of right breast, sequela -S21052A Open bite of left breast, initial encounter -S21052D Open bite of left breast, subsequent encounter -S21052S Open bite of left breast, sequela -S21059A Open bite of unspecified breast, initial encounter -S21059D Open bite of unspecified breast, subsequent encounter -S21059S Open bite of unspecified breast, sequela -S21101A Unspecified open wound of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21101D Unspecified open wound of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21101S Unspecified open wound of right front wall of thorax without penetration into thoracic cavity, sequela -S21102A Unspecified open wound of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21102D Unspecified open wound of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21102S Unspecified open wound of left front wall of thorax without penetration into thoracic cavity, sequela -S21109A Unspecified open wound of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21109D Unspecified open wound of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21109S Unspecified open wound of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21111A Laceration without foreign body of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21111D Laceration without foreign body of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21111S Laceration without foreign body of right front wall of thorax without penetration into thoracic cavity, sequela -S21112A Laceration without foreign body of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21112D Laceration without foreign body of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21112S Laceration without foreign body of left front wall of thorax without penetration into thoracic cavity, sequela -S21119A Laceration without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21119D Laceration without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21119S Laceration without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21121A Laceration with foreign body of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21121D Laceration with foreign body of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21121S Laceration with foreign body of right front wall of thorax without penetration into thoracic cavity, sequela -S21122A Laceration with foreign body of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21122D Laceration with foreign body of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21122S Laceration with foreign body of left front wall of thorax without penetration into thoracic cavity, sequela -S21129A Laceration with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21129D Laceration with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21129S Laceration with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21131A Puncture wound without foreign body of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21131D Puncture wound without foreign body of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21131S Puncture wound without foreign body of right front wall of thorax without penetration into thoracic cavity, sequela -S21132A Puncture wound without foreign body of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21132D Puncture wound without foreign body of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21132S Puncture wound without foreign body of left front wall of thorax without penetration into thoracic cavity, sequela -S21139A Puncture wound without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21139D Puncture wound without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21139S Puncture wound without foreign body of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21141A Puncture wound with foreign body of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21141D Puncture wound with foreign body of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21141S Puncture wound with foreign body of right front wall of thorax without penetration into thoracic cavity, sequela -S21142A Puncture wound with foreign body of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21142D Puncture wound with foreign body of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21142S Puncture wound with foreign body of left front wall of thorax without penetration into thoracic cavity, sequela -S21149A Puncture wound with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21149D Puncture wound with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21149S Puncture wound with foreign body of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21151A Open bite of right front wall of thorax without penetration into thoracic cavity, initial encounter -S21151D Open bite of right front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21151S Open bite of right front wall of thorax without penetration into thoracic cavity, sequela -S21152A Open bite of left front wall of thorax without penetration into thoracic cavity, initial encounter -S21152D Open bite of left front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21152S Open bite of left front wall of thorax without penetration into thoracic cavity, sequela -S21159A Open bite of unspecified front wall of thorax without penetration into thoracic cavity, initial encounter -S21159D Open bite of unspecified front wall of thorax without penetration into thoracic cavity, subsequent encounter -S21159S Open bite of unspecified front wall of thorax without penetration into thoracic cavity, sequela -S21201A Unspecified open wound of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21201D Unspecified open wound of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21201S Unspecified open wound of right back wall of thorax without penetration into thoracic cavity, sequela -S21202A Unspecified open wound of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21202D Unspecified open wound of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21202S Unspecified open wound of left back wall of thorax without penetration into thoracic cavity, sequela -S21209A Unspecified open wound of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21209D Unspecified open wound of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21209S Unspecified open wound of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21211A Laceration without foreign body of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21211D Laceration without foreign body of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21211S Laceration without foreign body of right back wall of thorax without penetration into thoracic cavity, sequela -S21212A Laceration without foreign body of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21212D Laceration without foreign body of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21212S Laceration without foreign body of left back wall of thorax without penetration into thoracic cavity, sequela -S21219A Laceration without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21219D Laceration without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21219S Laceration without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21221A Laceration with foreign body of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21221D Laceration with foreign body of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21221S Laceration with foreign body of right back wall of thorax without penetration into thoracic cavity, sequela -S21222A Laceration with foreign body of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21222D Laceration with foreign body of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21222S Laceration with foreign body of left back wall of thorax without penetration into thoracic cavity, sequela -S21229A Laceration with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21229D Laceration with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21229S Laceration with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21231A Puncture wound without foreign body of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21231D Puncture wound without foreign body of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21231S Puncture wound without foreign body of right back wall of thorax without penetration into thoracic cavity, sequela -S21232A Puncture wound without foreign body of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21232D Puncture wound without foreign body of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21232S Puncture wound without foreign body of left back wall of thorax without penetration into thoracic cavity, sequela -S21239A Puncture wound without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21239D Puncture wound without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21239S Puncture wound without foreign body of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21241A Puncture wound with foreign body of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21241D Puncture wound with foreign body of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21241S Puncture wound with foreign body of right back wall of thorax without penetration into thoracic cavity, sequela -S21242A Puncture wound with foreign body of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21242D Puncture wound with foreign body of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21242S Puncture wound with foreign body of left back wall of thorax without penetration into thoracic cavity, sequela -S21249A Puncture wound with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21249D Puncture wound with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21249S Puncture wound with foreign body of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21251A Open bite of right back wall of thorax without penetration into thoracic cavity, initial encounter -S21251D Open bite of right back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21251S Open bite of right back wall of thorax without penetration into thoracic cavity, sequela -S21252A Open bite of left back wall of thorax without penetration into thoracic cavity, initial encounter -S21252D Open bite of left back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21252S Open bite of left back wall of thorax without penetration into thoracic cavity, sequela -S21259A Open bite of unspecified back wall of thorax without penetration into thoracic cavity, initial encounter -S21259D Open bite of unspecified back wall of thorax without penetration into thoracic cavity, subsequent encounter -S21259S Open bite of unspecified back wall of thorax without penetration into thoracic cavity, sequela -S21301A Unspecified open wound of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21301D Unspecified open wound of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21301S Unspecified open wound of right front wall of thorax with penetration into thoracic cavity, sequela -S21302A Unspecified open wound of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21302D Unspecified open wound of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21302S Unspecified open wound of left front wall of thorax with penetration into thoracic cavity, sequela -S21309A Unspecified open wound of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21309D Unspecified open wound of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21309S Unspecified open wound of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21311A Laceration without foreign body of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21311D Laceration without foreign body of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21311S Laceration without foreign body of right front wall of thorax with penetration into thoracic cavity, sequela -S21312A Laceration without foreign body of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21312D Laceration without foreign body of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21312S Laceration without foreign body of left front wall of thorax with penetration into thoracic cavity, sequela -S21319A Laceration without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21319D Laceration without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21319S Laceration without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21321A Laceration with foreign body of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21321D Laceration with foreign body of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21321S Laceration with foreign body of right front wall of thorax with penetration into thoracic cavity, sequela -S21322A Laceration with foreign body of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21322D Laceration with foreign body of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21322S Laceration with foreign body of left front wall of thorax with penetration into thoracic cavity, sequela -S21329A Laceration with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21329D Laceration with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21329S Laceration with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21331A Puncture wound without foreign body of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21331D Puncture wound without foreign body of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21331S Puncture wound without foreign body of right front wall of thorax with penetration into thoracic cavity, sequela -S21332A Puncture wound without foreign body of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21332D Puncture wound without foreign body of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21332S Puncture wound without foreign body of left front wall of thorax with penetration into thoracic cavity, sequela -S21339A Puncture wound without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21339D Puncture wound without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21339S Puncture wound without foreign body of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21341A Puncture wound with foreign body of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21341D Puncture wound with foreign body of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21341S Puncture wound with foreign body of right front wall of thorax with penetration into thoracic cavity, sequela -S21342A Puncture wound with foreign body of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21342D Puncture wound with foreign body of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21342S Puncture wound with foreign body of left front wall of thorax with penetration into thoracic cavity, sequela -S21349A Puncture wound with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21349D Puncture wound with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21349S Puncture wound with foreign body of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21351A Open bite of right front wall of thorax with penetration into thoracic cavity, initial encounter -S21351D Open bite of right front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21351S Open bite of right front wall of thorax with penetration into thoracic cavity, sequela -S21352A Open bite of left front wall of thorax with penetration into thoracic cavity, initial encounter -S21352D Open bite of left front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21352S Open bite of left front wall of thorax with penetration into thoracic cavity, sequela -S21359A Open bite of unspecified front wall of thorax with penetration into thoracic cavity, initial encounter -S21359D Open bite of unspecified front wall of thorax with penetration into thoracic cavity, subsequent encounter -S21359S Open bite of unspecified front wall of thorax with penetration into thoracic cavity, sequela -S21401A Unspecified open wound of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21401D Unspecified open wound of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21401S Unspecified open wound of right back wall of thorax with penetration into thoracic cavity, sequela -S21402A Unspecified open wound of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21402D Unspecified open wound of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21402S Unspecified open wound of left back wall of thorax with penetration into thoracic cavity, sequela -S21409A Unspecified open wound of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21409D Unspecified open wound of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21409S Unspecified open wound of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S21411A Laceration without foreign body of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21411D Laceration without foreign body of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21411S Laceration without foreign body of right back wall of thorax with penetration into thoracic cavity, sequela -S21412A Laceration without foreign body of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21412D Laceration without foreign body of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21412S Laceration without foreign body of left back wall of thorax with penetration into thoracic cavity, sequela -S21419A Laceration without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21419D Laceration without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21419S Laceration without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S21421A Laceration with foreign body of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21421D Laceration with foreign body of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21421S Laceration with foreign body of right back wall of thorax with penetration into thoracic cavity, sequela -S21422A Laceration with foreign body of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21422D Laceration with foreign body of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21422S Laceration with foreign body of left back wall of thorax with penetration into thoracic cavity, sequela -S21429A Laceration with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21429D Laceration with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21429S Laceration with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S21431A Puncture wound without foreign body of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21431D Puncture wound without foreign body of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21431S Puncture wound without foreign body of right back wall of thorax with penetration into thoracic cavity, sequela -S21432A Puncture wound without foreign body of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21432D Puncture wound without foreign body of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21432S Puncture wound without foreign body of left back wall of thorax with penetration into thoracic cavity, sequela -S21439A Puncture wound without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21439D Puncture wound without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21439S Puncture wound without foreign body of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S21441A Puncture wound with foreign body of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21441D Puncture wound with foreign body of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21441S Puncture wound with foreign body of right back wall of thorax with penetration into thoracic cavity, sequela -S21442A Puncture wound with foreign body of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21442D Puncture wound with foreign body of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21442S Puncture wound with foreign body of left back wall of thorax with penetration into thoracic cavity, sequela -S21449A Puncture wound with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21449D Puncture wound with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21449S Puncture wound with foreign body of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S21451A Open bite of right back wall of thorax with penetration into thoracic cavity, initial encounter -S21451D Open bite of right back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21451S Open bite of right back wall of thorax with penetration into thoracic cavity, sequela -S21452A Open bite of left back wall of thorax with penetration into thoracic cavity, initial encounter -S21452D Open bite of left back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21452S Open bite of left back wall of thorax with penetration into thoracic cavity, sequela -S21459A Open bite of unspecified back wall of thorax with penetration into thoracic cavity, initial encounter -S21459D Open bite of unspecified back wall of thorax with penetration into thoracic cavity, subsequent encounter -S21459S Open bite of unspecified back wall of thorax with penetration into thoracic cavity, sequela -S2190XA Unspecified open wound of unspecified part of thorax, initial encounter -S2190XD Unspecified open wound of unspecified part of thorax, subsequent encounter -S2190XS Unspecified open wound of unspecified part of thorax, sequela -S2191XA Laceration without foreign body of unspecified part of thorax, initial encounter -S2191XD Laceration without foreign body of unspecified part of thorax, subsequent encounter -S2191XS Laceration without foreign body of unspecified part of thorax, sequela -S2192XA Laceration with foreign body of unspecified part of thorax, initial encounter -S2192XD Laceration with foreign body of unspecified part of thorax, subsequent encounter -S2192XS Laceration with foreign body of unspecified part of thorax, sequela -S2193XA Puncture wound without foreign body of unspecified part of thorax, initial encounter -S2193XD Puncture wound without foreign body of unspecified part of thorax, subsequent encounter -S2193XS Puncture wound without foreign body of unspecified part of thorax, sequela -S2194XA Puncture wound with foreign body of unspecified part of thorax, initial encounter -S2194XD Puncture wound with foreign body of unspecified part of thorax, subsequent encounter -S2194XS Puncture wound with foreign body of unspecified part of thorax, sequela -S2195XA Open bite of unspecified part of thorax, initial encounter -S2195XD Open bite of unspecified part of thorax, subsequent encounter -S2195XS Open bite of unspecified part of thorax, sequela -S22000A Wedge compression fracture of unspecified thoracic vertebra, initial encounter for closed fracture -S22000B Wedge compression fracture of unspecified thoracic vertebra, initial encounter for open fracture -S22000D Wedge compression fracture of unspecified thoracic vertebra, subsequent encounter for fracture with routine healing -S22000G Wedge compression fracture of unspecified thoracic vertebra, subsequent encounter for fracture with delayed healing -S22000K Wedge compression fracture of unspecified thoracic vertebra, subsequent encounter for fracture with nonunion -S22000S Wedge compression fracture of unspecified thoracic vertebra, sequela -S22001A Stable burst fracture of unspecified thoracic vertebra, initial encounter for closed fracture -S22001B Stable burst fracture of unspecified thoracic vertebra, initial encounter for open fracture -S22001D Stable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with routine healing -S22001G Stable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with delayed healing -S22001K Stable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with nonunion -S22001S Stable burst fracture of unspecified thoracic vertebra, sequela -S22002A Unstable burst fracture of unspecified thoracic vertebra, initial encounter for closed fracture -S22002B Unstable burst fracture of unspecified thoracic vertebra, initial encounter for open fracture -S22002D Unstable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with routine healing -S22002G Unstable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with delayed healing -S22002K Unstable burst fracture of unspecified thoracic vertebra, subsequent encounter for fracture with nonunion -S22002S Unstable burst fracture of unspecified thoracic vertebra, sequela -S22008A Other fracture of unspecified thoracic vertebra, initial encounter for closed fracture -S22008B Other fracture of unspecified thoracic vertebra, initial encounter for open fracture -S22008D Other fracture of unspecified thoracic vertebra, subsequent encounter for fracture with routine healing -S22008G Other fracture of unspecified thoracic vertebra, subsequent encounter for fracture with delayed healing -S22008K Other fracture of unspecified thoracic vertebra, subsequent encounter for fracture with nonunion -S22008S Other fracture of unspecified thoracic vertebra, sequela -S22009A Unspecified fracture of unspecified thoracic vertebra, initial encounter for closed fracture -S22009B Unspecified fracture of unspecified thoracic vertebra, initial encounter for open fracture -S22009D Unspecified fracture of unspecified thoracic vertebra, subsequent encounter for fracture with routine healing -S22009G Unspecified fracture of unspecified thoracic vertebra, subsequent encounter for fracture with delayed healing -S22009K Unspecified fracture of unspecified thoracic vertebra, subsequent encounter for fracture with nonunion -S22009S Unspecified fracture of unspecified thoracic vertebra, sequela -S22010A Wedge compression fracture of first thoracic vertebra, initial encounter for closed fracture -S22010B Wedge compression fracture of first thoracic vertebra, initial encounter for open fracture -S22010D Wedge compression fracture of first thoracic vertebra, subsequent encounter for fracture with routine healing -S22010G Wedge compression fracture of first thoracic vertebra, subsequent encounter for fracture with delayed healing -S22010K Wedge compression fracture of first thoracic vertebra, subsequent encounter for fracture with nonunion -S22010S Wedge compression fracture of first thoracic vertebra, sequela -S22011A Stable burst fracture of first thoracic vertebra, initial encounter for closed fracture -S22011B Stable burst fracture of first thoracic vertebra, initial encounter for open fracture -S22011D Stable burst fracture of first thoracic vertebra, subsequent encounter for fracture with routine healing -S22011G Stable burst fracture of first thoracic vertebra, subsequent encounter for fracture with delayed healing -S22011K Stable burst fracture of first thoracic vertebra, subsequent encounter for fracture with nonunion -S22011S Stable burst fracture of first thoracic vertebra, sequela -S22012A Unstable burst fracture of first thoracic vertebra, initial encounter for closed fracture -S22012B Unstable burst fracture of first thoracic vertebra, initial encounter for open fracture -S22012D Unstable burst fracture of first thoracic vertebra, subsequent encounter for fracture with routine healing -S22012G Unstable burst fracture of first thoracic vertebra, subsequent encounter for fracture with delayed healing -S22012K Unstable burst fracture of first thoracic vertebra, subsequent encounter for fracture with nonunion -S22012S Unstable burst fracture of first thoracic vertebra, sequela -S22018A Other fracture of first thoracic vertebra, initial encounter for closed fracture -S22018B Other fracture of first thoracic vertebra, initial encounter for open fracture -S22018D Other fracture of first thoracic vertebra, subsequent encounter for fracture with routine healing -S22018G Other fracture of first thoracic vertebra, subsequent encounter for fracture with delayed healing -S22018K Other fracture of first thoracic vertebra, subsequent encounter for fracture with nonunion -S22018S Other fracture of first thoracic vertebra, sequela -S22019A Unspecified fracture of first thoracic vertebra, initial encounter for closed fracture -S22019B Unspecified fracture of first thoracic vertebra, initial encounter for open fracture -S22019D Unspecified fracture of first thoracic vertebra, subsequent encounter for fracture with routine healing -S22019G Unspecified fracture of first thoracic vertebra, subsequent encounter for fracture with delayed healing -S22019K Unspecified fracture of first thoracic vertebra, subsequent encounter for fracture with nonunion -S22019S Unspecified fracture of first thoracic vertebra, sequela -S22020A Wedge compression fracture of second thoracic vertebra, initial encounter for closed fracture -S22020B Wedge compression fracture of second thoracic vertebra, initial encounter for open fracture -S22020D Wedge compression fracture of second thoracic vertebra, subsequent encounter for fracture with routine healing -S22020G Wedge compression fracture of second thoracic vertebra, subsequent encounter for fracture with delayed healing -S22020K Wedge compression fracture of second thoracic vertebra, subsequent encounter for fracture with nonunion -S22020S Wedge compression fracture of second thoracic vertebra, sequela -S22021A Stable burst fracture of second thoracic vertebra, initial encounter for closed fracture -S22021B Stable burst fracture of second thoracic vertebra, initial encounter for open fracture -S22021D Stable burst fracture of second thoracic vertebra, subsequent encounter for fracture with routine healing -S22021G Stable burst fracture of second thoracic vertebra, subsequent encounter for fracture with delayed healing -S22021K Stable burst fracture of second thoracic vertebra, subsequent encounter for fracture with nonunion -S22021S Stable burst fracture of second thoracic vertebra, sequela -S22022A Unstable burst fracture of second thoracic vertebra, initial encounter for closed fracture -S22022B Unstable burst fracture of second thoracic vertebra, initial encounter for open fracture -S22022D Unstable burst fracture of second thoracic vertebra, subsequent encounter for fracture with routine healing -S22022G Unstable burst fracture of second thoracic vertebra, subsequent encounter for fracture with delayed healing -S22022K Unstable burst fracture of second thoracic vertebra, subsequent encounter for fracture with nonunion -S22022S Unstable burst fracture of second thoracic vertebra, sequela -S22028A Other fracture of second thoracic vertebra, initial encounter for closed fracture -S22028B Other fracture of second thoracic vertebra, initial encounter for open fracture -S22028D Other fracture of second thoracic vertebra, subsequent encounter for fracture with routine healing -S22028G Other fracture of second thoracic vertebra, subsequent encounter for fracture with delayed healing -S22028K Other fracture of second thoracic vertebra, subsequent encounter for fracture with nonunion -S22028S Other fracture of second thoracic vertebra, sequela -S22029A Unspecified fracture of second thoracic vertebra, initial encounter for closed fracture -S22029B Unspecified fracture of second thoracic vertebra, initial encounter for open fracture -S22029D Unspecified fracture of second thoracic vertebra, subsequent encounter for fracture with routine healing -S22029G Unspecified fracture of second thoracic vertebra, subsequent encounter for fracture with delayed healing -S22029K Unspecified fracture of second thoracic vertebra, subsequent encounter for fracture with nonunion -S22029S Unspecified fracture of second thoracic vertebra, sequela -S22030A Wedge compression fracture of third thoracic vertebra, initial encounter for closed fracture -S22030B Wedge compression fracture of third thoracic vertebra, initial encounter for open fracture -S22030D Wedge compression fracture of third thoracic vertebra, subsequent encounter for fracture with routine healing -S22030G Wedge compression fracture of third thoracic vertebra, subsequent encounter for fracture with delayed healing -S22030K Wedge compression fracture of third thoracic vertebra, subsequent encounter for fracture with nonunion -S22030S Wedge compression fracture of third thoracic vertebra, sequela -S22031A Stable burst fracture of third thoracic vertebra, initial encounter for closed fracture -S22031B Stable burst fracture of third thoracic vertebra, initial encounter for open fracture -S22031D Stable burst fracture of third thoracic vertebra, subsequent encounter for fracture with routine healing -S22031G Stable burst fracture of third thoracic vertebra, subsequent encounter for fracture with delayed healing -S22031K Stable burst fracture of third thoracic vertebra, subsequent encounter for fracture with nonunion -S22031S Stable burst fracture of third thoracic vertebra, sequela -S22032A Unstable burst fracture of third thoracic vertebra, initial encounter for closed fracture -S22032B Unstable burst fracture of third thoracic vertebra, initial encounter for open fracture -S22032D Unstable burst fracture of third thoracic vertebra, subsequent encounter for fracture with routine healing -S22032G Unstable burst fracture of third thoracic vertebra, subsequent encounter for fracture with delayed healing -S22032K Unstable burst fracture of third thoracic vertebra, subsequent encounter for fracture with nonunion -S22032S Unstable burst fracture of third thoracic vertebra, sequela -S22038A Other fracture of third thoracic vertebra, initial encounter for closed fracture -S22038B Other fracture of third thoracic vertebra, initial encounter for open fracture -S22038D Other fracture of third thoracic vertebra, subsequent encounter for fracture with routine healing -S22038G Other fracture of third thoracic vertebra, subsequent encounter for fracture with delayed healing -S22038K Other fracture of third thoracic vertebra, subsequent encounter for fracture with nonunion -S22038S Other fracture of third thoracic vertebra, sequela -S22039A Unspecified fracture of third thoracic vertebra, initial encounter for closed fracture -S22039B Unspecified fracture of third thoracic vertebra, initial encounter for open fracture -S22039D Unspecified fracture of third thoracic vertebra, subsequent encounter for fracture with routine healing -S22039G Unspecified fracture of third thoracic vertebra, subsequent encounter for fracture with delayed healing -S22039K Unspecified fracture of third thoracic vertebra, subsequent encounter for fracture with nonunion -S22039S Unspecified fracture of third thoracic vertebra, sequela -S22040A Wedge compression fracture of fourth thoracic vertebra, initial encounter for closed fracture -S22040B Wedge compression fracture of fourth thoracic vertebra, initial encounter for open fracture -S22040D Wedge compression fracture of fourth thoracic vertebra, subsequent encounter for fracture with routine healing -S22040G Wedge compression fracture of fourth thoracic vertebra, subsequent encounter for fracture with delayed healing -S22040K Wedge compression fracture of fourth thoracic vertebra, subsequent encounter for fracture with nonunion -S22040S Wedge compression fracture of fourth thoracic vertebra, sequela -S22041A Stable burst fracture of fourth thoracic vertebra, initial encounter for closed fracture -S22041B Stable burst fracture of fourth thoracic vertebra, initial encounter for open fracture -S22041D Stable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with routine healing -S22041G Stable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with delayed healing -S22041K Stable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with nonunion -S22041S Stable burst fracture of fourth thoracic vertebra, sequela -S22042A Unstable burst fracture of fourth thoracic vertebra, initial encounter for closed fracture -S22042B Unstable burst fracture of fourth thoracic vertebra, initial encounter for open fracture -S22042D Unstable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with routine healing -S22042G Unstable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with delayed healing -S22042K Unstable burst fracture of fourth thoracic vertebra, subsequent encounter for fracture with nonunion -S22042S Unstable burst fracture of fourth thoracic vertebra, sequela -S22048A Other fracture of fourth thoracic vertebra, initial encounter for closed fracture -S22048B Other fracture of fourth thoracic vertebra, initial encounter for open fracture -S22048D Other fracture of fourth thoracic vertebra, subsequent encounter for fracture with routine healing -S22048G Other fracture of fourth thoracic vertebra, subsequent encounter for fracture with delayed healing -S22048K Other fracture of fourth thoracic vertebra, subsequent encounter for fracture with nonunion -S22048S Other fracture of fourth thoracic vertebra, sequela -S22049A Unspecified fracture of fourth thoracic vertebra, initial encounter for closed fracture -S22049B Unspecified fracture of fourth thoracic vertebra, initial encounter for open fracture -S22049D Unspecified fracture of fourth thoracic vertebra, subsequent encounter for fracture with routine healing -S22049G Unspecified fracture of fourth thoracic vertebra, subsequent encounter for fracture with delayed healing -S22049K Unspecified fracture of fourth thoracic vertebra, subsequent encounter for fracture with nonunion -S22049S Unspecified fracture of fourth thoracic vertebra, sequela -S22050A Wedge compression fracture of T5-T6 vertebra, initial encounter for closed fracture -S22050B Wedge compression fracture of T5-T6 vertebra, initial encounter for open fracture -S22050D Wedge compression fracture of T5-T6 vertebra, subsequent encounter for fracture with routine healing -S22050G Wedge compression fracture of T5-T6 vertebra, subsequent encounter for fracture with delayed healing -S22050K Wedge compression fracture of T5-T6 vertebra, subsequent encounter for fracture with nonunion -S22050S Wedge compression fracture of T5-T6 vertebra, sequela -S22051A Stable burst fracture of T5-T6 vertebra, initial encounter for closed fracture -S22051B Stable burst fracture of T5-T6 vertebra, initial encounter for open fracture -S22051D Stable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with routine healing -S22051G Stable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with delayed healing -S22051K Stable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with nonunion -S22051S Stable burst fracture of T5-T6 vertebra, sequela -S22052A Unstable burst fracture of T5-T6 vertebra, initial encounter for closed fracture -S22052B Unstable burst fracture of T5-T6 vertebra, initial encounter for open fracture -S22052D Unstable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with routine healing -S22052G Unstable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with delayed healing -S22052K Unstable burst fracture of T5-T6 vertebra, subsequent encounter for fracture with nonunion -S22052S Unstable burst fracture of T5-T6 vertebra, sequela -S22058A Other fracture of T5-T6 vertebra, initial encounter for closed fracture -S22058B Other fracture of T5-T6 vertebra, initial encounter for open fracture -S22058D Other fracture of T5-T6 vertebra, subsequent encounter for fracture with routine healing -S22058G Other fracture of T5-T6 vertebra, subsequent encounter for fracture with delayed healing -S22058K Other fracture of T5-T6 vertebra, subsequent encounter for fracture with nonunion -S22058S Other fracture of T5-T6 vertebra, sequela -S22059A Unspecified fracture of T5-T6 vertebra, initial encounter for closed fracture -S22059B Unspecified fracture of T5-T6 vertebra, initial encounter for open fracture -S22059D Unspecified fracture of T5-T6 vertebra, subsequent encounter for fracture with routine healing -S22059G Unspecified fracture of T5-T6 vertebra, subsequent encounter for fracture with delayed healing -S22059K Unspecified fracture of T5-T6 vertebra, subsequent encounter for fracture with nonunion -S22059S Unspecified fracture of T5-T6 vertebra, sequela -S22060A Wedge compression fracture of T7-T8 vertebra, initial encounter for closed fracture -S22060B Wedge compression fracture of T7-T8 vertebra, initial encounter for open fracture -S22060D Wedge compression fracture of T7-T8 vertebra, subsequent encounter for fracture with routine healing -S22060G Wedge compression fracture of T7-T8 vertebra, subsequent encounter for fracture with delayed healing -S22060K Wedge compression fracture of T7-T8 vertebra, subsequent encounter for fracture with nonunion -S22060S Wedge compression fracture of T7-T8 vertebra, sequela -S22061A Stable burst fracture of T7-T8 vertebra, initial encounter for closed fracture -S22061B Stable burst fracture of T7-T8 vertebra, initial encounter for open fracture -S22061D Stable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with routine healing -S22061G Stable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with delayed healing -S22061K Stable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with nonunion -S22061S Stable burst fracture of T7-T8 vertebra, sequela -S22062A Unstable burst fracture of T7-T8 vertebra, initial encounter for closed fracture -S22062B Unstable burst fracture of T7-T8 vertebra, initial encounter for open fracture -S22062D Unstable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with routine healing -S22062G Unstable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with delayed healing -S22062K Unstable burst fracture of T7-T8 vertebra, subsequent encounter for fracture with nonunion -S22062S Unstable burst fracture of T7-T8 vertebra, sequela -S22068A Other fracture of T7-T8 thoracic vertebra, initial encounter for closed fracture -S22068B Other fracture of T7-T8 thoracic vertebra, initial encounter for open fracture -S22068D Other fracture of T7-T8 thoracic vertebra, subsequent encounter for fracture with routine healing -S22068G Other fracture of T7-T8 thoracic vertebra, subsequent encounter for fracture with delayed healing -S22068K Other fracture of T7-T8 thoracic vertebra, subsequent encounter for fracture with nonunion -S22068S Other fracture of T7-T8 thoracic vertebra, sequela -S22069A Unspecified fracture of T7-T8 vertebra, initial encounter for closed fracture -S22069B Unspecified fracture of T7-T8 vertebra, initial encounter for open fracture -S22069D Unspecified fracture of T7-T8 vertebra, subsequent encounter for fracture with routine healing -S22069G Unspecified fracture of T7-T8 vertebra, subsequent encounter for fracture with delayed healing -S22069K Unspecified fracture of T7-T8 vertebra, subsequent encounter for fracture with nonunion -S22069S Unspecified fracture of T7-T8 vertebra, sequela -S22070A Wedge compression fracture of T9-T10 vertebra, initial encounter for closed fracture -S22070B Wedge compression fracture of T9-T10 vertebra, initial encounter for open fracture -S22070D Wedge compression fracture of T9-T10 vertebra, subsequent encounter for fracture with routine healing -S22070G Wedge compression fracture of T9-T10 vertebra, subsequent encounter for fracture with delayed healing -S22070K Wedge compression fracture of T9-T10 vertebra, subsequent encounter for fracture with nonunion -S22070S Wedge compression fracture of T9-T10 vertebra, sequela -S22071A Stable burst fracture of T9-T10 vertebra, initial encounter for closed fracture -S22071B Stable burst fracture of T9-T10 vertebra, initial encounter for open fracture -S22071D Stable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with routine healing -S22071G Stable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with delayed healing -S22071K Stable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with nonunion -S22071S Stable burst fracture of T9-T10 vertebra, sequela -S22072A Unstable burst fracture of T9-T10 vertebra, initial encounter for closed fracture -S22072B Unstable burst fracture of T9-T10 vertebra, initial encounter for open fracture -S22072D Unstable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with routine healing -S22072G Unstable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with delayed healing -S22072K Unstable burst fracture of T9-T10 vertebra, subsequent encounter for fracture with nonunion -S22072S Unstable burst fracture of T9-T10 vertebra, sequela -S22078A Other fracture of T9-T10 vertebra, initial encounter for closed fracture -S22078B Other fracture of T9-T10 vertebra, initial encounter for open fracture -S22078D Other fracture of T9-T10 vertebra, subsequent encounter for fracture with routine healing -S22078G Other fracture of T9-T10 vertebra, subsequent encounter for fracture with delayed healing -S22078K Other fracture of T9-T10 vertebra, subsequent encounter for fracture with nonunion -S22078S Other fracture of T9-T10 vertebra, sequela -S22079A Unspecified fracture of T9-T10 vertebra, initial encounter for closed fracture -S22079B Unspecified fracture of T9-T10 vertebra, initial encounter for open fracture -S22079D Unspecified fracture of T9-T10 vertebra, subsequent encounter for fracture with routine healing -S22079G Unspecified fracture of T9-T10 vertebra, subsequent encounter for fracture with delayed healing -S22079K Unspecified fracture of T9-T10 vertebra, subsequent encounter for fracture with nonunion -S22079S Unspecified fracture of T9-T10 vertebra, sequela -S22080A Wedge compression fracture of T11-T12 vertebra, initial encounter for closed fracture -S22080B Wedge compression fracture of T11-T12 vertebra, initial encounter for open fracture -S22080D Wedge compression fracture of T11-T12 vertebra, subsequent encounter for fracture with routine healing -S22080G Wedge compression fracture of T11-T12 vertebra, subsequent encounter for fracture with delayed healing -S22080K Wedge compression fracture of T11-T12 vertebra, subsequent encounter for fracture with nonunion -S22080S Wedge compression fracture of T11-T12 vertebra, sequela -S22081A Stable burst fracture of T11-T12 vertebra, initial encounter for closed fracture -S22081B Stable burst fracture of T11-T12 vertebra, initial encounter for open fracture -S22081D Stable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with routine healing -S22081G Stable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with delayed healing -S22081K Stable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with nonunion -S22081S Stable burst fracture of T11-T12 vertebra, sequela -S22082A Unstable burst fracture of T11-T12 vertebra, initial encounter for closed fracture -S22082B Unstable burst fracture of T11-T12 vertebra, initial encounter for open fracture -S22082D Unstable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with routine healing -S22082G Unstable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with delayed healing -S22082K Unstable burst fracture of T11-T12 vertebra, subsequent encounter for fracture with nonunion -S22082S Unstable burst fracture of T11-T12 vertebra, sequela -S22088A Other fracture of T11-T12 vertebra, initial encounter for closed fracture -S22088B Other fracture of T11-T12 vertebra, initial encounter for open fracture -S22088D Other fracture of T11-T12 vertebra, subsequent encounter for fracture with routine healing -S22088G Other fracture of T11-T12 vertebra, subsequent encounter for fracture with delayed healing -S22088K Other fracture of T11-T12 vertebra, subsequent encounter for fracture with nonunion -S22088S Other fracture of T11-T12 vertebra, sequela -S22089A Unspecified fracture of T11-T12 vertebra, initial encounter for closed fracture -S22089B Unspecified fracture of T11-T12 vertebra, initial encounter for open fracture -S22089D Unspecified fracture of T11-T12 vertebra, subsequent encounter for fracture with routine healing -S22089G Unspecified fracture of T11-T12 vertebra, subsequent encounter for fracture with delayed healing -S22089K Unspecified fracture of T11-T12 vertebra, subsequent encounter for fracture with nonunion -S22089S Unspecified fracture of T11-T12 vertebra, sequela -S2220XA Unspecified fracture of sternum, initial encounter for closed fracture -S2220XB Unspecified fracture of sternum, initial encounter for open fracture -S2220XD Unspecified fracture of sternum, subsequent encounter for fracture with routine healing -S2220XG Unspecified fracture of sternum, subsequent encounter for fracture with delayed healing -S2220XK Unspecified fracture of sternum, subsequent encounter for fracture with nonunion -S2220XS Unspecified fracture of sternum, sequela -S2221XA Fracture of manubrium, initial encounter for closed fracture -S2221XB Fracture of manubrium, initial encounter for open fracture -S2221XD Fracture of manubrium, subsequent encounter for fracture with routine healing -S2221XG Fracture of manubrium, subsequent encounter for fracture with delayed healing -S2221XK Fracture of manubrium, subsequent encounter for fracture with nonunion -S2221XS Fracture of manubrium, sequela -S2222XA Fracture of body of sternum, initial encounter for closed fracture -S2222XB Fracture of body of sternum, initial encounter for open fracture -S2222XD Fracture of body of sternum, subsequent encounter for fracture with routine healing -S2222XG Fracture of body of sternum, subsequent encounter for fracture with delayed healing -S2222XK Fracture of body of sternum, subsequent encounter for fracture with nonunion -S2222XS Fracture of body of sternum, sequela -S2223XA Sternal manubrial dissociation, initial encounter for closed fracture -S2223XB Sternal manubrial dissociation, initial encounter for open fracture -S2223XD Sternal manubrial dissociation, subsequent encounter for fracture with routine healing -S2223XG Sternal manubrial dissociation, subsequent encounter for fracture with delayed healing -S2223XK Sternal manubrial dissociation, subsequent encounter for fracture with nonunion -S2223XS Sternal manubrial dissociation, sequela -S2224XA Fracture of xiphoid process, initial encounter for closed fracture -S2224XB Fracture of xiphoid process, initial encounter for open fracture -S2224XD Fracture of xiphoid process, subsequent encounter for fracture with routine healing -S2224XG Fracture of xiphoid process, subsequent encounter for fracture with delayed healing -S2224XK Fracture of xiphoid process, subsequent encounter for fracture with nonunion -S2224XS Fracture of xiphoid process, sequela -S2231XA Fracture of one rib, right side, initial encounter for closed fracture -S2231XB Fracture of one rib, right side, initial encounter for open fracture -S2231XD Fracture of one rib, right side, subsequent encounter for fracture with routine healing -S2231XG Fracture of one rib, right side, subsequent encounter for fracture with delayed healing -S2231XK Fracture of one rib, right side, subsequent encounter for fracture with nonunion -S2231XS Fracture of one rib, right side, sequela -S2232XA Fracture of one rib, left side, initial encounter for closed fracture -S2232XB Fracture of one rib, left side, initial encounter for open fracture -S2232XD Fracture of one rib, left side, subsequent encounter for fracture with routine healing -S2232XG Fracture of one rib, left side, subsequent encounter for fracture with delayed healing -S2232XK Fracture of one rib, left side, subsequent encounter for fracture with nonunion -S2232XS Fracture of one rib, left side, sequela -S2239XA Fracture of one rib, unspecified side, initial encounter for closed fracture -S2239XB Fracture of one rib, unspecified side, initial encounter for open fracture -S2239XD Fracture of one rib, unspecified side, subsequent encounter for fracture with routine healing -S2239XG Fracture of one rib, unspecified side, subsequent encounter for fracture with delayed healing -S2239XK Fracture of one rib, unspecified side, subsequent encounter for fracture with nonunion -S2239XS Fracture of one rib, unspecified side, sequela -S2241XA Multiple fractures of ribs, right side, initial encounter for closed fracture -S2241XB Multiple fractures of ribs, right side, initial encounter for open fracture -S2241XD Multiple fractures of ribs, right side, subsequent encounter for fracture with routine healing -S2241XG Multiple fractures of ribs, right side, subsequent encounter for fracture with delayed healing -S2241XK Multiple fractures of ribs, right side, subsequent encounter for fracture with nonunion -S2241XS Multiple fractures of ribs, right side, sequela -S2242XA Multiple fractures of ribs, left side, initial encounter for closed fracture -S2242XB Multiple fractures of ribs, left side, initial encounter for open fracture -S2242XD Multiple fractures of ribs, left side, subsequent encounter for fracture with routine healing -S2242XG Multiple fractures of ribs, left side, subsequent encounter for fracture with delayed healing -S2242XK Multiple fractures of ribs, left side, subsequent encounter for fracture with nonunion -S2242XS Multiple fractures of ribs, left side, sequela -S2243XA Multiple fractures of ribs, bilateral, initial encounter for closed fracture -S2243XB Multiple fractures of ribs, bilateral, initial encounter for open fracture -S2243XD Multiple fractures of ribs, bilateral, subsequent encounter for fracture with routine healing -S2243XG Multiple fractures of ribs, bilateral, subsequent encounter for fracture with delayed healing -S2243XK Multiple fractures of ribs, bilateral, subsequent encounter for fracture with nonunion -S2243XS Multiple fractures of ribs, bilateral, sequela -S2249XA Multiple fractures of ribs, unspecified side, initial encounter for closed fracture -S2249XB Multiple fractures of ribs, unspecified side, initial encounter for open fracture -S2249XD Multiple fractures of ribs, unspecified side, subsequent encounter for fracture with routine healing -S2249XG Multiple fractures of ribs, unspecified side, subsequent encounter for fracture with delayed healing -S2249XK Multiple fractures of ribs, unspecified side, subsequent encounter for fracture with nonunion -S2249XS Multiple fractures of ribs, unspecified side, sequela -S225XXA Flail chest, initial encounter for closed fracture -S225XXB Flail chest, initial encounter for open fracture -S225XXD Flail chest, subsequent encounter for fracture with routine healing -S225XXG Flail chest, subsequent encounter for fracture with delayed healing -S225XXK Flail chest, subsequent encounter for fracture with nonunion -S225XXS Flail chest, sequela -S229XXA Fracture of bony thorax, part unspecified, initial encounter for closed fracture -S229XXB Fracture of bony thorax, part unspecified, initial encounter for open fracture -S229XXD Fracture of bony thorax, part unspecified, subsequent encounter for fracture with routine healing -S229XXG Fracture of bony thorax, part unspecified, subsequent encounter for fracture with delayed healing -S229XXK Fracture of bony thorax, part unspecified, subsequent encounter for fracture with nonunion -S229XXS Fracture of bony thorax, part unspecified, sequela -S230XXA Traumatic rupture of thoracic intervertebral disc, initial encounter -S230XXD Traumatic rupture of thoracic intervertebral disc, subsequent encounter -S230XXS Traumatic rupture of thoracic intervertebral disc, sequela -S23100A Subluxation of unspecified thoracic vertebra, initial encounter -S23100D Subluxation of unspecified thoracic vertebra, subsequent encounter -S23100S Subluxation of unspecified thoracic vertebra, sequela -S23101A Dislocation of unspecified thoracic vertebra, initial encounter -S23101D Dislocation of unspecified thoracic vertebra, subsequent encounter -S23101S Dislocation of unspecified thoracic vertebra, sequela -S23110A Subluxation of T1/T2 thoracic vertebra, initial encounter -S23110D Subluxation of T1/T2 thoracic vertebra, subsequent encounter -S23110S Subluxation of T1/T2 thoracic vertebra, sequela -S23111A Dislocation of T1/T2 thoracic vertebra, initial encounter -S23111D Dislocation of T1/T2 thoracic vertebra, subsequent encounter -S23111S Dislocation of T1/T2 thoracic vertebra, sequela -S23120A Subluxation of T2/T3 thoracic vertebra, initial encounter -S23120D Subluxation of T2/T3 thoracic vertebra, subsequent encounter -S23120S Subluxation of T2/T3 thoracic vertebra, sequela -S23121A Dislocation of T2/T3 thoracic vertebra, initial encounter -S23121D Dislocation of T2/T3 thoracic vertebra, subsequent encounter -S23121S Dislocation of T2/T3 thoracic vertebra, sequela -S23122A Subluxation of T3/T4 thoracic vertebra, initial encounter -S23122D Subluxation of T3/T4 thoracic vertebra, subsequent encounter -S23122S Subluxation of T3/T4 thoracic vertebra, sequela -S23123A Dislocation of T3/T4 thoracic vertebra, initial encounter -S23123D Dislocation of T3/T4 thoracic vertebra, subsequent encounter -S23123S Dislocation of T3/T4 thoracic vertebra, sequela -S23130A Subluxation of T4/T5 thoracic vertebra, initial encounter -S23130D Subluxation of T4/T5 thoracic vertebra, subsequent encounter -S23130S Subluxation of T4/T5 thoracic vertebra, sequela -S23131A Dislocation of T4/T5 thoracic vertebra, initial encounter -S23131D Dislocation of T4/T5 thoracic vertebra, subsequent encounter -S23131S Dislocation of T4/T5 thoracic vertebra, sequela -S23132A Subluxation of T5/T6 thoracic vertebra, initial encounter -S23132D Subluxation of T5/T6 thoracic vertebra, subsequent encounter -S23132S Subluxation of T5/T6 thoracic vertebra, sequela -S23133A Dislocation of T5/T6 thoracic vertebra, initial encounter -S23133D Dislocation of T5/T6 thoracic vertebra, subsequent encounter -S23133S Dislocation of T5/T6 thoracic vertebra, sequela -S23140A Subluxation of T6/T7 thoracic vertebra, initial encounter -S23140D Subluxation of T6/T7 thoracic vertebra, subsequent encounter -S23140S Subluxation of T6/T7 thoracic vertebra, sequela -S23141A Dislocation of T6/T7 thoracic vertebra, initial encounter -S23141D Dislocation of T6/T7 thoracic vertebra, subsequent encounter -S23141S Dislocation of T6/T7 thoracic vertebra, sequela -S23142A Subluxation of T7/T8 thoracic vertebra, initial encounter -S23142D Subluxation of T7/T8 thoracic vertebra, subsequent encounter -S23142S Subluxation of T7/T8 thoracic vertebra, sequela -S23143A Dislocation of T7/T8 thoracic vertebra, initial encounter -S23143D Dislocation of T7/T8 thoracic vertebra, subsequent encounter -S23143S Dislocation of T7/T8 thoracic vertebra, sequela -S23150A Subluxation of T8/T9 thoracic vertebra, initial encounter -S23150D Subluxation of T8/T9 thoracic vertebra, subsequent encounter -S23150S Subluxation of T8/T9 thoracic vertebra, sequela -S23151A Dislocation of T8/T9 thoracic vertebra, initial encounter -S23151D Dislocation of T8/T9 thoracic vertebra, subsequent encounter -S23151S Dislocation of T8/T9 thoracic vertebra, sequela -S23152A Subluxation of T9/T10 thoracic vertebra, initial encounter -S23152D Subluxation of T9/T10 thoracic vertebra, subsequent encounter -S23152S Subluxation of T9/T10 thoracic vertebra, sequela -S23153A Dislocation of T9/T10 thoracic vertebra, initial encounter -S23153D Dislocation of T9/T10 thoracic vertebra, subsequent encounter -S23153S Dislocation of T9/T10 thoracic vertebra, sequela -S23160A Subluxation of T10/T11 thoracic vertebra, initial encounter -S23160D Subluxation of T10/T11 thoracic vertebra, subsequent encounter -S23160S Subluxation of T10/T11 thoracic vertebra, sequela -S23161A Dislocation of T10/T11 thoracic vertebra, initial encounter -S23161D Dislocation of T10/T11 thoracic vertebra, subsequent encounter -S23161S Dislocation of T10/T11 thoracic vertebra, sequela -S23162A Subluxation of T11/T12 thoracic vertebra, initial encounter -S23162D Subluxation of T11/T12 thoracic vertebra, subsequent encounter -S23162S Subluxation of T11/T12 thoracic vertebra, sequela -S23163A Dislocation of T11/T12 thoracic vertebra, initial encounter -S23163D Dislocation of T11/T12 thoracic vertebra, subsequent encounter -S23163S Dislocation of T11/T12 thoracic vertebra, sequela -S23170A Subluxation of T12/L1 thoracic vertebra, initial encounter -S23170D Subluxation of T12/L1 thoracic vertebra, subsequent encounter -S23170S Subluxation of T12/L1 thoracic vertebra, sequela -S23171A Dislocation of T12/L1 thoracic vertebra, initial encounter -S23171D Dislocation of T12/L1 thoracic vertebra, subsequent encounter -S23171S Dislocation of T12/L1 thoracic vertebra, sequela -S2320XA Dislocation of unspecified part of thorax, initial encounter -S2320XD Dislocation of unspecified part of thorax, subsequent encounter -S2320XS Dislocation of unspecified part of thorax, sequela -S2329XA Dislocation of other parts of thorax, initial encounter -S2329XD Dislocation of other parts of thorax, subsequent encounter -S2329XS Dislocation of other parts of thorax, sequela -S233XXA Sprain of ligaments of thoracic spine, initial encounter -S233XXD Sprain of ligaments of thoracic spine, subsequent encounter -S233XXS Sprain of ligaments of thoracic spine, sequela -S2341XA Sprain of ribs, initial encounter -S2341XD Sprain of ribs, subsequent encounter -S2341XS Sprain of ribs, sequela -S23420A Sprain of sternoclavicular (joint) (ligament), initial encounter -S23420D Sprain of sternoclavicular (joint) (ligament), subsequent encounter -S23420S Sprain of sternoclavicular (joint) (ligament), sequela -S23421A Sprain of chondrosternal joint, initial encounter -S23421D Sprain of chondrosternal joint, subsequent encounter -S23421S Sprain of chondrosternal joint, sequela -S23428A Other sprain of sternum, initial encounter -S23428D Other sprain of sternum, subsequent encounter -S23428S Other sprain of sternum, sequela -S23429A Unspecified sprain of sternum, initial encounter -S23429D Unspecified sprain of sternum, subsequent encounter -S23429S Unspecified sprain of sternum, sequela -S238XXA Sprain of other specified parts of thorax, initial encounter -S238XXD Sprain of other specified parts of thorax, subsequent encounter -S238XXS Sprain of other specified parts of thorax, sequela -S239XXA Sprain of unspecified parts of thorax, initial encounter -S239XXD Sprain of unspecified parts of thorax, subsequent encounter -S239XXS Sprain of unspecified parts of thorax, sequela -S240XXA Concussion and edema of thoracic spinal cord, initial encounter -S240XXD Concussion and edema of thoracic spinal cord, subsequent encounter -S240XXS Concussion and edema of thoracic spinal cord, sequela -S24101A Unspecified injury at T1 level of thoracic spinal cord, initial encounter -S24101D Unspecified injury at T1 level of thoracic spinal cord, subsequent encounter -S24101S Unspecified injury at T1 level of thoracic spinal cord, sequela -S24102A Unspecified injury at T2-T6 level of thoracic spinal cord, initial encounter -S24102D Unspecified injury at T2-T6 level of thoracic spinal cord, subsequent encounter -S24102S Unspecified injury at T2-T6 level of thoracic spinal cord, sequela -S24103A Unspecified injury at T7-T10 level of thoracic spinal cord, initial encounter -S24103D Unspecified injury at T7-T10 level of thoracic spinal cord, subsequent encounter -S24103S Unspecified injury at T7-T10 level of thoracic spinal cord, sequela -S24104A Unspecified injury at T11-T12 level of thoracic spinal cord, initial encounter -S24104D Unspecified injury at T11-T12 level of thoracic spinal cord, subsequent encounter -S24104S Unspecified injury at T11-T12 level of thoracic spinal cord, sequela -S24109A Unspecified injury at unspecified level of thoracic spinal cord, initial encounter -S24109D Unspecified injury at unspecified level of thoracic spinal cord, subsequent encounter -S24109S Unspecified injury at unspecified level of thoracic spinal cord, sequela -S24111A Complete lesion at T1 level of thoracic spinal cord, initial encounter -S24111D Complete lesion at T1 level of thoracic spinal cord, subsequent encounter -S24111S Complete lesion at T1 level of thoracic spinal cord, sequela -S24112A Complete lesion at T2-T6 level of thoracic spinal cord, initial encounter -S24112D Complete lesion at T2-T6 level of thoracic spinal cord, subsequent encounter -S24112S Complete lesion at T2-T6 level of thoracic spinal cord, sequela -S24113A Complete lesion at T7-T10 level of thoracic spinal cord, initial encounter -S24113D Complete lesion at T7-T10 level of thoracic spinal cord, subsequent encounter -S24113S Complete lesion at T7-T10 level of thoracic spinal cord, sequela -S24114A Complete lesion at T11-T12 level of thoracic spinal cord, initial encounter -S24114D Complete lesion at T11-T12 level of thoracic spinal cord, subsequent encounter -S24114S Complete lesion at T11-T12 level of thoracic spinal cord, sequela -S24119A Complete lesion at unspecified level of thoracic spinal cord, initial encounter -S24119D Complete lesion at unspecified level of thoracic spinal cord, subsequent encounter -S24119S Complete lesion at unspecified level of thoracic spinal cord, sequela -S24131A Anterior cord syndrome at T1 level of thoracic spinal cord, initial encounter -S24131D Anterior cord syndrome at T1 level of thoracic spinal cord, subsequent encounter -S24131S Anterior cord syndrome at T1 level of thoracic spinal cord, sequela -S24132A Anterior cord syndrome at T2-T6 level of thoracic spinal cord, initial encounter -S24132D Anterior cord syndrome at T2-T6 level of thoracic spinal cord, subsequent encounter -S24132S Anterior cord syndrome at T2-T6 level of thoracic spinal cord, sequela -S24133A Anterior cord syndrome at T7-T10 level of thoracic spinal cord, initial encounter -S24133D Anterior cord syndrome at T7-T10 level of thoracic spinal cord, subsequent encounter -S24133S Anterior cord syndrome at T7-T10 level of thoracic spinal cord, sequela -S24134A Anterior cord syndrome at T11-T12 level of thoracic spinal cord, initial encounter -S24134D Anterior cord syndrome at T11-T12 level of thoracic spinal cord, subsequent encounter -S24134S Anterior cord syndrome at T11-T12 level of thoracic spinal cord, sequela -S24139A Anterior cord syndrome at unspecified level of thoracic spinal cord, initial encounter -S24139D Anterior cord syndrome at unspecified level of thoracic spinal cord, subsequent encounter -S24139S Anterior cord syndrome at unspecified level of thoracic spinal cord, sequela -S24141A Brown-Sequard syndrome at T1 level of thoracic spinal cord, initial encounter -S24141D Brown-Sequard syndrome at T1 level of thoracic spinal cord, subsequent encounter -S24141S Brown-Sequard syndrome at T1 level of thoracic spinal cord, sequela -S24142A Brown-Sequard syndrome at T2-T6 level of thoracic spinal cord, initial encounter -S24142D Brown-Sequard syndrome at T2-T6 level of thoracic spinal cord, subsequent encounter -S24142S Brown-Sequard syndrome at T2-T6 level of thoracic spinal cord, sequela -S24143A Brown-Sequard syndrome at T7-T10 level of thoracic spinal cord, initial encounter -S24143D Brown-Sequard syndrome at T7-T10 level of thoracic spinal cord, subsequent encounter -S24143S Brown-Sequard syndrome at T7-T10 level of thoracic spinal cord, sequela -S24144A Brown-Sequard syndrome at T11-T12 level of thoracic spinal cord, initial encounter -S24144D Brown-Sequard syndrome at T11-T12 level of thoracic spinal cord, subsequent encounter -S24144S Brown-Sequard syndrome at T11-T12 level of thoracic spinal cord, sequela -S24149A Brown-Sequard syndrome at unspecified level of thoracic spinal cord, initial encounter -S24149D Brown-Sequard syndrome at unspecified level of thoracic spinal cord, subsequent encounter -S24149S Brown-Sequard syndrome at unspecified level of thoracic spinal cord, sequela -S24151A Other incomplete lesion at T1 level of thoracic spinal cord, initial encounter -S24151D Other incomplete lesion at T1 level of thoracic spinal cord, subsequent encounter -S24151S Other incomplete lesion at T1 level of thoracic spinal cord, sequela -S24152A Other incomplete lesion at T2-T6 level of thoracic spinal cord, initial encounter -S24152D Other incomplete lesion at T2-T6 level of thoracic spinal cord, subsequent encounter -S24152S Other incomplete lesion at T2-T6 level of thoracic spinal cord, sequela -S24153A Other incomplete lesion at T7-T10 level of thoracic spinal cord, initial encounter -S24153D Other incomplete lesion at T7-T10 level of thoracic spinal cord, subsequent encounter -S24153S Other incomplete lesion at T7-T10 level of thoracic spinal cord, sequela -S24154A Other incomplete lesion at T11-T12 level of thoracic spinal cord, initial encounter -S24154D Other incomplete lesion at T11-T12 level of thoracic spinal cord, subsequent encounter -S24154S Other incomplete lesion at T11-T12 level of thoracic spinal cord, sequela -S24159A Other incomplete lesion at unspecified level of thoracic spinal cord, initial encounter -S24159D Other incomplete lesion at unspecified level of thoracic spinal cord, subsequent encounter -S24159S Other incomplete lesion at unspecified level of thoracic spinal cord, sequela -S242XXA Injury of nerve root of thoracic spine, initial encounter -S242XXD Injury of nerve root of thoracic spine, subsequent encounter -S242XXS Injury of nerve root of thoracic spine, sequela -S243XXA Injury of peripheral nerves of thorax, initial encounter -S243XXD Injury of peripheral nerves of thorax, subsequent encounter -S243XXS Injury of peripheral nerves of thorax, sequela -S244XXA Injury of thoracic sympathetic nervous system, initial encounter -S244XXD Injury of thoracic sympathetic nervous system, subsequent encounter -S244XXS Injury of thoracic sympathetic nervous system, sequela -S248XXA Injury of other specified nerves of thorax, initial encounter -S248XXD Injury of other specified nerves of thorax, subsequent encounter -S248XXS Injury of other specified nerves of thorax, sequela -S249XXA Injury of unspecified nerve of thorax, initial encounter -S249XXD Injury of unspecified nerve of thorax, subsequent encounter -S249XXS Injury of unspecified nerve of thorax, sequela -S2500XA Unspecified injury of thoracic aorta, initial encounter -S2500XD Unspecified injury of thoracic aorta, subsequent encounter -S2500XS Unspecified injury of thoracic aorta, sequela -S2501XA Minor laceration of thoracic aorta, initial encounter -S2501XD Minor laceration of thoracic aorta, subsequent encounter -S2501XS Minor laceration of thoracic aorta, sequela -S2502XA Major laceration of thoracic aorta, initial encounter -S2502XD Major laceration of thoracic aorta, subsequent encounter -S2502XS Major laceration of thoracic aorta, sequela -S2509XA Other specified injury of thoracic aorta, initial encounter -S2509XD Other specified injury of thoracic aorta, subsequent encounter -S2509XS Other specified injury of thoracic aorta, sequela -S25101A Unspecified injury of right innominate or subclavian artery, initial encounter -S25101D Unspecified injury of right innominate or subclavian artery, subsequent encounter -S25101S Unspecified injury of right innominate or subclavian artery, sequela -S25102A Unspecified injury of left innominate or subclavian artery, initial encounter -S25102D Unspecified injury of left innominate or subclavian artery, subsequent encounter -S25102S Unspecified injury of left innominate or subclavian artery, sequela -S25109A Unspecified injury of unspecified innominate or subclavian artery, initial encounter -S25109D Unspecified injury of unspecified innominate or subclavian artery, subsequent encounter -S25109S Unspecified injury of unspecified innominate or subclavian artery, sequela -S25111A Minor laceration of right innominate or subclavian artery, initial encounter -S25111D Minor laceration of right innominate or subclavian artery, subsequent encounter -S25111S Minor laceration of right innominate or subclavian artery, sequela -S25112A Minor laceration of left innominate or subclavian artery, initial encounter -S25112D Minor laceration of left innominate or subclavian artery, subsequent encounter -S25112S Minor laceration of left innominate or subclavian artery, sequela -S25119A Minor laceration of unspecified innominate or subclavian artery, initial encounter -S25119D Minor laceration of unspecified innominate or subclavian artery, subsequent encounter -S25119S Minor laceration of unspecified innominate or subclavian artery, sequela -S25121A Major laceration of right innominate or subclavian artery, initial encounter -S25121D Major laceration of right innominate or subclavian artery, subsequent encounter -S25121S Major laceration of right innominate or subclavian artery, sequela -S25122A Major laceration of left innominate or subclavian artery, initial encounter -S25122D Major laceration of left innominate or subclavian artery, subsequent encounter -S25122S Major laceration of left innominate or subclavian artery, sequela -S25129A Major laceration of unspecified innominate or subclavian artery, initial encounter -S25129D Major laceration of unspecified innominate or subclavian artery, subsequent encounter -S25129S Major laceration of unspecified innominate or subclavian artery, sequela -S25191A Other specified injury of right innominate or subclavian artery, initial encounter -S25191D Other specified injury of right innominate or subclavian artery, subsequent encounter -S25191S Other specified injury of right innominate or subclavian artery, sequela -S25192A Other specified injury of left innominate or subclavian artery, initial encounter -S25192D Other specified injury of left innominate or subclavian artery, subsequent encounter -S25192S Other specified injury of left innominate or subclavian artery, sequela -S25199A Other specified injury of unspecified innominate or subclavian artery, initial encounter -S25199D Other specified injury of unspecified innominate or subclavian artery, subsequent encounter -S25199S Other specified injury of unspecified innominate or subclavian artery, sequela -S2520XA Unspecified injury of superior vena cava, initial encounter -S2520XD Unspecified injury of superior vena cava, subsequent encounter -S2520XS Unspecified injury of superior vena cava, sequela -S2521XA Minor laceration of superior vena cava, initial encounter -S2521XD Minor laceration of superior vena cava, subsequent encounter -S2521XS Minor laceration of superior vena cava, sequela -S2522XA Major laceration of superior vena cava, initial encounter -S2522XD Major laceration of superior vena cava, subsequent encounter -S2522XS Major laceration of superior vena cava, sequela -S2529XA Other specified injury of superior vena cava, initial encounter -S2529XD Other specified injury of superior vena cava, subsequent encounter -S2529XS Other specified injury of superior vena cava, sequela -S25301A Unspecified injury of right innominate or subclavian vein, initial encounter -S25301D Unspecified injury of right innominate or subclavian vein, subsequent encounter -S25301S Unspecified injury of right innominate or subclavian vein, sequela -S25302A Unspecified injury of left innominate or subclavian vein, initial encounter -S25302D Unspecified injury of left innominate or subclavian vein, subsequent encounter -S25302S Unspecified injury of left innominate or subclavian vein, sequela -S25309A Unspecified injury of unspecified innominate or subclavian vein, initial encounter -S25309D Unspecified injury of unspecified innominate or subclavian vein, subsequent encounter -S25309S Unspecified injury of unspecified innominate or subclavian vein, sequela -S25311A Minor laceration of right innominate or subclavian vein, initial encounter -S25311D Minor laceration of right innominate or subclavian vein, subsequent encounter -S25311S Minor laceration of right innominate or subclavian vein, sequela -S25312A Minor laceration of left innominate or subclavian vein, initial encounter -S25312D Minor laceration of left innominate or subclavian vein, subsequent encounter -S25312S Minor laceration of left innominate or subclavian vein, sequela -S25319A Minor laceration of unspecified innominate or subclavian vein, initial encounter -S25319D Minor laceration of unspecified innominate or subclavian vein, subsequent encounter -S25319S Minor laceration of unspecified innominate or subclavian vein, sequela -S25321A Major laceration of right innominate or subclavian vein, initial encounter -S25321D Major laceration of right innominate or subclavian vein, subsequent encounter -S25321S Major laceration of right innominate or subclavian vein, sequela -S25322A Major laceration of left innominate or subclavian vein, initial encounter -S25322D Major laceration of left innominate or subclavian vein, subsequent encounter -S25322S Major laceration of left innominate or subclavian vein, sequela -S25329A Major laceration of unspecified innominate or subclavian vein, initial encounter -S25329D Major laceration of unspecified innominate or subclavian vein, subsequent encounter -S25329S Major laceration of unspecified innominate or subclavian vein, sequela -S25391A Other specified injury of right innominate or subclavian vein, initial encounter -S25391D Other specified injury of right innominate or subclavian vein, subsequent encounter -S25391S Other specified injury of right innominate or subclavian vein, sequela -S25392A Other specified injury of left innominate or subclavian vein, initial encounter -S25392D Other specified injury of left innominate or subclavian vein, subsequent encounter -S25392S Other specified injury of left innominate or subclavian vein, sequela -S25399A Other specified injury of unspecified innominate or subclavian vein, initial encounter -S25399D Other specified injury of unspecified innominate or subclavian vein, subsequent encounter -S25399S Other specified injury of unspecified innominate or subclavian vein, sequela -S25401A Unspecified injury of right pulmonary blood vessels, initial encounter -S25401D Unspecified injury of right pulmonary blood vessels, subsequent encounter -S25401S Unspecified injury of right pulmonary blood vessels, sequela -S25402A Unspecified injury of left pulmonary blood vessels, initial encounter -S25402D Unspecified injury of left pulmonary blood vessels, subsequent encounter -S25402S Unspecified injury of left pulmonary blood vessels, sequela -S25409A Unspecified injury of unspecified pulmonary blood vessels, initial encounter -S25409D Unspecified injury of unspecified pulmonary blood vessels, subsequent encounter -S25409S Unspecified injury of unspecified pulmonary blood vessels, sequela -S25411A Minor laceration of right pulmonary blood vessels, initial encounter -S25411D Minor laceration of right pulmonary blood vessels, subsequent encounter -S25411S Minor laceration of right pulmonary blood vessels, sequela -S25412A Minor laceration of left pulmonary blood vessels, initial encounter -S25412D Minor laceration of left pulmonary blood vessels, subsequent encounter -S25412S Minor laceration of left pulmonary blood vessels, sequela -S25419A Minor laceration of unspecified pulmonary blood vessels, initial encounter -S25419D Minor laceration of unspecified pulmonary blood vessels, subsequent encounter -S25419S Minor laceration of unspecified pulmonary blood vessels, sequela -S25421A Major laceration of right pulmonary blood vessels, initial encounter -S25421D Major laceration of right pulmonary blood vessels, subsequent encounter -S25421S Major laceration of right pulmonary blood vessels, sequela -S25422A Major laceration of left pulmonary blood vessels, initial encounter -S25422D Major laceration of left pulmonary blood vessels, subsequent encounter -S25422S Major laceration of left pulmonary blood vessels, sequela -S25429A Major laceration of unspecified pulmonary blood vessels, initial encounter -S25429D Major laceration of unspecified pulmonary blood vessels, subsequent encounter -S25429S Major laceration of unspecified pulmonary blood vessels, sequela -S25491A Other specified injury of right pulmonary blood vessels, initial encounter -S25491D Other specified injury of right pulmonary blood vessels, subsequent encounter -S25491S Other specified injury of right pulmonary blood vessels, sequela -S25492A Other specified injury of left pulmonary blood vessels, initial encounter -S25492D Other specified injury of left pulmonary blood vessels, subsequent encounter -S25492S Other specified injury of left pulmonary blood vessels, sequela -S25499A Other specified injury of unspecified pulmonary blood vessels, initial encounter -S25499D Other specified injury of unspecified pulmonary blood vessels, subsequent encounter -S25499S Other specified injury of unspecified pulmonary blood vessels, sequela -S25501A Unspecified injury of intercostal blood vessels, right side, initial encounter -S25501D Unspecified injury of intercostal blood vessels, right side, subsequent encounter -S25501S Unspecified injury of intercostal blood vessels, right side, sequela -S25502A Unspecified injury of intercostal blood vessels, left side, initial encounter -S25502D Unspecified injury of intercostal blood vessels, left side, subsequent encounter -S25502S Unspecified injury of intercostal blood vessels, left side, sequela -S25509A Unspecified injury of intercostal blood vessels, unspecified side, initial encounter -S25509D Unspecified injury of intercostal blood vessels, unspecified side, subsequent encounter -S25509S Unspecified injury of intercostal blood vessels, unspecified side, sequela -S25511A Laceration of intercostal blood vessels, right side, initial encounter -S25511D Laceration of intercostal blood vessels, right side, subsequent encounter -S25511S Laceration of intercostal blood vessels, right side, sequela -S25512A Laceration of intercostal blood vessels, left side, initial encounter -S25512D Laceration of intercostal blood vessels, left side, subsequent encounter -S25512S Laceration of intercostal blood vessels, left side, sequela -S25519A Laceration of intercostal blood vessels, unspecified side, initial encounter -S25519D Laceration of intercostal blood vessels, unspecified side, subsequent encounter -S25519S Laceration of intercostal blood vessels, unspecified side, sequela -S25591A Other specified injury of intercostal blood vessels, right side, initial encounter -S25591D Other specified injury of intercostal blood vessels, right side, subsequent encounter -S25591S Other specified injury of intercostal blood vessels, right side, sequela -S25592A Other specified injury of intercostal blood vessels, left side, initial encounter -S25592D Other specified injury of intercostal blood vessels, left side, subsequent encounter -S25592S Other specified injury of intercostal blood vessels, left side, sequela -S25599A Other specified injury of intercostal blood vessels, unspecified side, initial encounter -S25599D Other specified injury of intercostal blood vessels, unspecified side, subsequent encounter -S25599S Other specified injury of intercostal blood vessels, unspecified side, sequela -S25801A Unspecified injury of other blood vessels of thorax, right side, initial encounter -S25801D Unspecified injury of other blood vessels of thorax, right side, subsequent encounter -S25801S Unspecified injury of other blood vessels of thorax, right side, sequela -S25802A Unspecified injury of other blood vessels of thorax, left side, initial encounter -S25802D Unspecified injury of other blood vessels of thorax, left side, subsequent encounter -S25802S Unspecified injury of other blood vessels of thorax, left side, sequela -S25809A Unspecified injury of other blood vessels of thorax, unspecified side, initial encounter -S25809D Unspecified injury of other blood vessels of thorax, unspecified side, subsequent encounter -S25809S Unspecified injury of other blood vessels of thorax, unspecified side, sequela -S25811A Laceration of other blood vessels of thorax, right side, initial encounter -S25811D Laceration of other blood vessels of thorax, right side, subsequent encounter -S25811S Laceration of other blood vessels of thorax, right side, sequela -S25812A Laceration of other blood vessels of thorax, left side, initial encounter -S25812D Laceration of other blood vessels of thorax, left side, subsequent encounter -S25812S Laceration of other blood vessels of thorax, left side, sequela -S25819A Laceration of other blood vessels of thorax, unspecified side, initial encounter -S25819D Laceration of other blood vessels of thorax, unspecified side, subsequent encounter -S25819S Laceration of other blood vessels of thorax, unspecified side, sequela -S25891A Other specified injury of other blood vessels of thorax, right side, initial encounter -S25891D Other specified injury of other blood vessels of thorax, right side, subsequent encounter -S25891S Other specified injury of other blood vessels of thorax, right side, sequela -S25892A Other specified injury of other blood vessels of thorax, left side, initial encounter -S25892D Other specified injury of other blood vessels of thorax, left side, subsequent encounter -S25892S Other specified injury of other blood vessels of thorax, left side, sequela -S25899A Other specified injury of other blood vessels of thorax, unspecified side, initial encounter -S25899D Other specified injury of other blood vessels of thorax, unspecified side, subsequent encounter -S25899S Other specified injury of other blood vessels of thorax, unspecified side, sequela -S2590XA Unspecified injury of unspecified blood vessel of thorax, initial encounter -S2590XD Unspecified injury of unspecified blood vessel of thorax, subsequent encounter -S2590XS Unspecified injury of unspecified blood vessel of thorax, sequela -S2591XA Laceration of unspecified blood vessel of thorax, initial encounter -S2591XD Laceration of unspecified blood vessel of thorax, subsequent encounter -S2591XS Laceration of unspecified blood vessel of thorax, sequela -S2599XA Other specified injury of unspecified blood vessel of thorax, initial encounter -S2599XD Other specified injury of unspecified blood vessel of thorax, subsequent encounter -S2599XS Other specified injury of unspecified blood vessel of thorax, sequela -S2600XA Unspecified injury of heart with hemopericardium, initial encounter -S2600XD Unspecified injury of heart with hemopericardium, subsequent encounter -S2600XS Unspecified injury of heart with hemopericardium, sequela -S2601XA Contusion of heart with hemopericardium, initial encounter -S2601XD Contusion of heart with hemopericardium, subsequent encounter -S2601XS Contusion of heart with hemopericardium, sequela -S26020A Mild laceration of heart with hemopericardium, initial encounter -S26020D Mild laceration of heart with hemopericardium, subsequent encounter -S26020S Mild laceration of heart with hemopericardium, sequela -S26021A Moderate laceration of heart with hemopericardium, initial encounter -S26021D Moderate laceration of heart with hemopericardium, subsequent encounter -S26021S Moderate laceration of heart with hemopericardium, sequela -S26022A Major laceration of heart with hemopericardium, initial encounter -S26022D Major laceration of heart with hemopericardium, subsequent encounter -S26022S Major laceration of heart with hemopericardium, sequela -S2609XA Other injury of heart with hemopericardium, initial encounter -S2609XD Other injury of heart with hemopericardium, subsequent encounter -S2609XS Other injury of heart with hemopericardium, sequela -S2610XA Unspecified injury of heart without hemopericardium, initial encounter -S2610XD Unspecified injury of heart without hemopericardium, subsequent encounter -S2610XS Unspecified injury of heart without hemopericardium, sequela -S2611XA Contusion of heart without hemopericardium, initial encounter -S2611XD Contusion of heart without hemopericardium, subsequent encounter -S2611XS Contusion of heart without hemopericardium, sequela -S2612XA Laceration of heart without hemopericardium, initial encounter -S2612XD Laceration of heart without hemopericardium, subsequent encounter -S2612XS Laceration of heart without hemopericardium, sequela -S2619XA Other injury of heart without hemopericardium, initial encounter -S2619XD Other injury of heart without hemopericardium, subsequent encounter -S2619XS Other injury of heart without hemopericardium, sequela -S2690XA Unspecified injury of heart, unspecified with or without hemopericardium, initial encounter -S2690XD Unspecified injury of heart, unspecified with or without hemopericardium, subsequent encounter -S2690XS Unspecified injury of heart, unspecified with or without hemopericardium, sequela -S2691XA Contusion of heart, unspecified with or without hemopericardium, initial encounter -S2691XD Contusion of heart, unspecified with or without hemopericardium, subsequent encounter -S2691XS Contusion of heart, unspecified with or without hemopericardium, sequela -S2692XA Laceration of heart, unspecified with or without hemopericardium, initial encounter -S2692XD Laceration of heart, unspecified with or without hemopericardium, subsequent encounter -S2692XS Laceration of heart, unspecified with or without hemopericardium, sequela -S2699XA Other injury of heart, unspecified with or without hemopericardium, initial encounter -S2699XD Other injury of heart, unspecified with or without hemopericardium, subsequent encounter -S2699XS Other injury of heart, unspecified with or without hemopericardium, sequela -S270XXA Traumatic pneumothorax, initial encounter -S270XXD Traumatic pneumothorax, subsequent encounter -S270XXS Traumatic pneumothorax, sequela -S271XXA Traumatic hemothorax, initial encounter -S271XXD Traumatic hemothorax, subsequent encounter -S271XXS Traumatic hemothorax, sequela -S272XXA Traumatic hemopneumothorax, initial encounter -S272XXD Traumatic hemopneumothorax, subsequent encounter -S272XXS Traumatic hemopneumothorax, sequela -S27301A Unspecified injury of lung, unilateral, initial encounter -S27301D Unspecified injury of lung, unilateral, subsequent encounter -S27301S Unspecified injury of lung, unilateral, sequela -S27302A Unspecified injury of lung, bilateral, initial encounter -S27302D Unspecified injury of lung, bilateral, subsequent encounter -S27302S Unspecified injury of lung, bilateral, sequela -S27309A Unspecified injury of lung, unspecified, initial encounter -S27309D Unspecified injury of lung, unspecified, subsequent encounter -S27309S Unspecified injury of lung, unspecified, sequela -S27311A Primary blast injury of lung, unilateral, initial encounter -S27311D Primary blast injury of lung, unilateral, subsequent encounter -S27311S Primary blast injury of lung, unilateral, sequela -S27312A Primary blast injury of lung, bilateral, initial encounter -S27312D Primary blast injury of lung, bilateral, subsequent encounter -S27312S Primary blast injury of lung, bilateral, sequela -S27319A Primary blast injury of lung, unspecified, initial encounter -S27319D Primary blast injury of lung, unspecified, subsequent encounter -S27319S Primary blast injury of lung, unspecified, sequela -S27321A Contusion of lung, unilateral, initial encounter -S27321D Contusion of lung, unilateral, subsequent encounter -S27321S Contusion of lung, unilateral, sequela -S27322A Contusion of lung, bilateral, initial encounter -S27322D Contusion of lung, bilateral, subsequent encounter -S27322S Contusion of lung, bilateral, sequela -S27329A Contusion of lung, unspecified, initial encounter -S27329D Contusion of lung, unspecified, subsequent encounter -S27329S Contusion of lung, unspecified, sequela -S27331A Laceration of lung, unilateral, initial encounter -S27331D Laceration of lung, unilateral, subsequent encounter -S27331S Laceration of lung, unilateral, sequela -S27332A Laceration of lung, bilateral, initial encounter -S27332D Laceration of lung, bilateral, subsequent encounter -S27332S Laceration of lung, bilateral, sequela -S27339A Laceration of lung, unspecified, initial encounter -S27339D Laceration of lung, unspecified, subsequent encounter -S27339S Laceration of lung, unspecified, sequela -S27391A Other injuries of lung, unilateral, initial encounter -S27391D Other injuries of lung, unilateral, subsequent encounter -S27391S Other injuries of lung, unilateral, sequela -S27392A Other injuries of lung, bilateral, initial encounter -S27392D Other injuries of lung, bilateral, subsequent encounter -S27392S Other injuries of lung, bilateral, sequela -S27399A Other injuries of lung, unspecified, initial encounter -S27399D Other injuries of lung, unspecified, subsequent encounter -S27399S Other injuries of lung, unspecified, sequela -S27401A Unspecified injury of bronchus, unilateral, initial encounter -S27401D Unspecified injury of bronchus, unilateral, subsequent encounter -S27401S Unspecified injury of bronchus, unilateral, sequela -S27402A Unspecified injury of bronchus, bilateral, initial encounter -S27402D Unspecified injury of bronchus, bilateral, subsequent encounter -S27402S Unspecified injury of bronchus, bilateral, sequela -S27409A Unspecified injury of bronchus, unspecified, initial encounter -S27409D Unspecified injury of bronchus, unspecified, subsequent encounter -S27409S Unspecified injury of bronchus, unspecified, sequela -S27411A Primary blast injury of bronchus, unilateral, initial encounter -S27411D Primary blast injury of bronchus, unilateral, subsequent encounter -S27411S Primary blast injury of bronchus, unilateral, sequela -S27412A Primary blast injury of bronchus, bilateral, initial encounter -S27412D Primary blast injury of bronchus, bilateral, subsequent encounter -S27412S Primary blast injury of bronchus, bilateral, sequela -S27419A Primary blast injury of bronchus, unspecified, initial encounter -S27419D Primary blast injury of bronchus, unspecified, subsequent encounter -S27419S Primary blast injury of bronchus, unspecified, sequela -S27421A Contusion of bronchus, unilateral, initial encounter -S27421D Contusion of bronchus, unilateral, subsequent encounter -S27421S Contusion of bronchus, unilateral, sequela -S27422A Contusion of bronchus, bilateral, initial encounter -S27422D Contusion of bronchus, bilateral, subsequent encounter -S27422S Contusion of bronchus, bilateral, sequela -S27429A Contusion of bronchus, unspecified, initial encounter -S27429D Contusion of bronchus, unspecified, subsequent encounter -S27429S Contusion of bronchus, unspecified, sequela -S27431A Laceration of bronchus, unilateral, initial encounter -S27431D Laceration of bronchus, unilateral, subsequent encounter -S27431S Laceration of bronchus, unilateral, sequela -S27432A Laceration of bronchus, bilateral, initial encounter -S27432D Laceration of bronchus, bilateral, subsequent encounter -S27432S Laceration of bronchus, bilateral, sequela -S27439A Laceration of bronchus, unspecified, initial encounter -S27439D Laceration of bronchus, unspecified, subsequent encounter -S27439S Laceration of bronchus, unspecified, sequela -S27491A Other injury of bronchus, unilateral, initial encounter -S27491D Other injury of bronchus, unilateral, subsequent encounter -S27491S Other injury of bronchus, unilateral, sequela -S27492A Other injury of bronchus, bilateral, initial encounter -S27492D Other injury of bronchus, bilateral, subsequent encounter -S27492S Other injury of bronchus, bilateral, sequela -S27499A Other injury of bronchus, unspecified, initial encounter -S27499D Other injury of bronchus, unspecified, subsequent encounter -S27499S Other injury of bronchus, unspecified, sequela -S2750XA Unspecified injury of thoracic trachea, initial encounter -S2750XD Unspecified injury of thoracic trachea, subsequent encounter -S2750XS Unspecified injury of thoracic trachea, sequela -S2751XA Primary blast injury of thoracic trachea, initial encounter -S2751XD Primary blast injury of thoracic trachea, subsequent encounter -S2751XS Primary blast injury of thoracic trachea, sequela -S2752XA Contusion of thoracic trachea, initial encounter -S2752XD Contusion of thoracic trachea, subsequent encounter -S2752XS Contusion of thoracic trachea, sequela -S2753XA Laceration of thoracic trachea, initial encounter -S2753XD Laceration of thoracic trachea, subsequent encounter -S2753XS Laceration of thoracic trachea, sequela -S2759XA Other injury of thoracic trachea, initial encounter -S2759XD Other injury of thoracic trachea, subsequent encounter -S2759XS Other injury of thoracic trachea, sequela -S2760XA Unspecified injury of pleura, initial encounter -S2760XD Unspecified injury of pleura, subsequent encounter -S2760XS Unspecified injury of pleura, sequela -S2763XA Laceration of pleura, initial encounter -S2763XD Laceration of pleura, subsequent encounter -S2763XS Laceration of pleura, sequela -S2769XA Other injury of pleura, initial encounter -S2769XD Other injury of pleura, subsequent encounter -S2769XS Other injury of pleura, sequela -S27802A Contusion of diaphragm, initial encounter -S27802D Contusion of diaphragm, subsequent encounter -S27802S Contusion of diaphragm, sequela -S27803A Laceration of diaphragm, initial encounter -S27803D Laceration of diaphragm, subsequent encounter -S27803S Laceration of diaphragm, sequela -S27808A Other injury of diaphragm, initial encounter -S27808D Other injury of diaphragm, subsequent encounter -S27808S Other injury of diaphragm, sequela -S27809A Unspecified injury of diaphragm, initial encounter -S27809D Unspecified injury of diaphragm, subsequent encounter -S27809S Unspecified injury of diaphragm, sequela -S27812A Contusion of esophagus (thoracic part), initial encounter -S27812D Contusion of esophagus (thoracic part), subsequent encounter -S27812S Contusion of esophagus (thoracic part), sequela -S27813A Laceration of esophagus (thoracic part), initial encounter -S27813D Laceration of esophagus (thoracic part), subsequent encounter -S27813S Laceration of esophagus (thoracic part), sequela -S27818A Other injury of esophagus (thoracic part), initial encounter -S27818D Other injury of esophagus (thoracic part), subsequent encounter -S27818S Other injury of esophagus (thoracic part), sequela -S27819A Unspecified injury of esophagus (thoracic part), initial encounter -S27819D Unspecified injury of esophagus (thoracic part), subsequent encounter -S27819S Unspecified injury of esophagus (thoracic part), sequela -S27892A Contusion of other specified intrathoracic organs, initial encounter -S27892D Contusion of other specified intrathoracic organs, subsequent encounter -S27892S Contusion of other specified intrathoracic organs, sequela -S27893A Laceration of other specified intrathoracic organs, initial encounter -S27893D Laceration of other specified intrathoracic organs, subsequent encounter -S27893S Laceration of other specified intrathoracic organs, sequela -S27898A Other injury of other specified intrathoracic organs, initial encounter -S27898D Other injury of other specified intrathoracic organs, subsequent encounter -S27898S Other injury of other specified intrathoracic organs, sequela -S27899A Unspecified injury of other specified intrathoracic organs, initial encounter -S27899D Unspecified injury of other specified intrathoracic organs, subsequent encounter -S27899S Unspecified injury of other specified intrathoracic organs, sequela -S279XXA Injury of unspecified intrathoracic organ, initial encounter -S279XXD Injury of unspecified intrathoracic organ, subsequent encounter -S279XXS Injury of unspecified intrathoracic organ, sequela -S280XXA Crushed chest, initial encounter -S280XXD Crushed chest, subsequent encounter -S280XXS Crushed chest, sequela -S281XXA Traumatic amputation (partial) of part of thorax, except breast, initial encounter -S281XXD Traumatic amputation (partial) of part of thorax, except breast, subsequent encounter -S281XXS Traumatic amputation (partial) of part of thorax, except breast, sequela -S28211A Complete traumatic amputation of right breast, initial encounter -S28211D Complete traumatic amputation of right breast, subsequent encounter -S28211S Complete traumatic amputation of right breast, sequela -S28212A Complete traumatic amputation of left breast, initial encounter -S28212D Complete traumatic amputation of left breast, subsequent encounter -S28212S Complete traumatic amputation of left breast, sequela -S28219A Complete traumatic amputation of unspecified breast, initial encounter -S28219D Complete traumatic amputation of unspecified breast, subsequent encounter -S28219S Complete traumatic amputation of unspecified breast, sequela -S28221A Partial traumatic amputation of right breast, initial encounter -S28221D Partial traumatic amputation of right breast, subsequent encounter -S28221S Partial traumatic amputation of right breast, sequela -S28222A Partial traumatic amputation of left breast, initial encounter -S28222D Partial traumatic amputation of left breast, subsequent encounter -S28222S Partial traumatic amputation of left breast, sequela -S28229A Partial traumatic amputation of unspecified breast, initial encounter -S28229D Partial traumatic amputation of unspecified breast, subsequent encounter -S28229S Partial traumatic amputation of unspecified breast, sequela -S29001A Unspecified injury of muscle and tendon of front wall of thorax, initial encounter -S29001D Unspecified injury of muscle and tendon of front wall of thorax, subsequent encounter -S29001S Unspecified injury of muscle and tendon of front wall of thorax, sequela -S29002A Unspecified injury of muscle and tendon of back wall of thorax, initial encounter -S29002D Unspecified injury of muscle and tendon of back wall of thorax, subsequent encounter -S29002S Unspecified injury of muscle and tendon of back wall of thorax, sequela -S29009A Unspecified injury of muscle and tendon of unspecified wall of thorax, initial encounter -S29009D Unspecified injury of muscle and tendon of unspecified wall of thorax, subsequent encounter -S29009S Unspecified injury of muscle and tendon of unspecified wall of thorax, sequela -S29011A Strain of muscle and tendon of front wall of thorax, initial encounter -S29011D Strain of muscle and tendon of front wall of thorax, subsequent encounter -S29011S Strain of muscle and tendon of front wall of thorax, sequela -S29012A Strain of muscle and tendon of back wall of thorax, initial encounter -S29012D Strain of muscle and tendon of back wall of thorax, subsequent encounter -S29012S Strain of muscle and tendon of back wall of thorax, sequela -S29019A Strain of muscle and tendon of unspecified wall of thorax, initial encounter -S29019D Strain of muscle and tendon of unspecified wall of thorax, subsequent encounter -S29019S Strain of muscle and tendon of unspecified wall of thorax, sequela -S29021A Laceration of muscle and tendon of front wall of thorax, initial encounter -S29021D Laceration of muscle and tendon of front wall of thorax, subsequent encounter -S29021S Laceration of muscle and tendon of front wall of thorax, sequela -S29022A Laceration of muscle and tendon of back wall of thorax, initial encounter -S29022D Laceration of muscle and tendon of back wall of thorax, subsequent encounter -S29022S Laceration of muscle and tendon of back wall of thorax, sequela -S29029A Laceration of muscle and tendon of unspecified wall of thorax, initial encounter -S29029D Laceration of muscle and tendon of unspecified wall of thorax, subsequent encounter -S29029S Laceration of muscle and tendon of unspecified wall of thorax, sequela -S29091A Other injury of muscle and tendon of front wall of thorax, initial encounter -S29091D Other injury of muscle and tendon of front wall of thorax, subsequent encounter -S29091S Other injury of muscle and tendon of front wall of thorax, sequela -S29092A Other injury of muscle and tendon of back wall of thorax, initial encounter -S29092D Other injury of muscle and tendon of back wall of thorax, subsequent encounter -S29092S Other injury of muscle and tendon of back wall of thorax, sequela -S29099A Other injury of muscle and tendon of unspecified wall of thorax, initial encounter -S29099D Other injury of muscle and tendon of unspecified wall of thorax, subsequent encounter -S29099S Other injury of muscle and tendon of unspecified wall of thorax, sequela -S298XXA Other specified injuries of thorax, initial encounter -S298XXD Other specified injuries of thorax, subsequent encounter -S298XXS Other specified injuries of thorax, sequela -S299XXA Unspecified injury of thorax, initial encounter -S299XXD Unspecified injury of thorax, subsequent encounter -S299XXS Unspecified injury of thorax, sequela -S300XXA Contusion of lower back and pelvis, initial encounter -S300XXD Contusion of lower back and pelvis, subsequent encounter -S300XXS Contusion of lower back and pelvis, sequela -S301XXA Contusion of abdominal wall, initial encounter -S301XXD Contusion of abdominal wall, subsequent encounter -S301XXS Contusion of abdominal wall, sequela -S30201A Contusion of unspecified external genital organ, male, initial encounter -S30201D Contusion of unspecified external genital organ, male, subsequent encounter -S30201S Contusion of unspecified external genital organ, male, sequela -S30202A Contusion of unspecified external genital organ, female, initial encounter -S30202D Contusion of unspecified external genital organ, female, subsequent encounter -S30202S Contusion of unspecified external genital organ, female, sequela -S3021XA Contusion of penis, initial encounter -S3021XD Contusion of penis, subsequent encounter -S3021XS Contusion of penis, sequela -S3022XA Contusion of scrotum and testes, initial encounter -S3022XD Contusion of scrotum and testes, subsequent encounter -S3022XS Contusion of scrotum and testes, sequela -S3023XA Contusion of vagina and vulva, initial encounter -S3023XD Contusion of vagina and vulva, subsequent encounter -S3023XS Contusion of vagina and vulva, sequela -S303XXA Contusion of anus, initial encounter -S303XXD Contusion of anus, subsequent encounter -S303XXS Contusion of anus, sequela -S30810A Abrasion of lower back and pelvis, initial encounter -S30810D Abrasion of lower back and pelvis, subsequent encounter -S30810S Abrasion of lower back and pelvis, sequela -S30811A Abrasion of abdominal wall, initial encounter -S30811D Abrasion of abdominal wall, subsequent encounter -S30811S Abrasion of abdominal wall, sequela -S30812A Abrasion of penis, initial encounter -S30812D Abrasion of penis, subsequent encounter -S30812S Abrasion of penis, sequela -S30813A Abrasion of scrotum and testes, initial encounter -S30813D Abrasion of scrotum and testes, subsequent encounter -S30813S Abrasion of scrotum and testes, sequela -S30814A Abrasion of vagina and vulva, initial encounter -S30814D Abrasion of vagina and vulva, subsequent encounter -S30814S Abrasion of vagina and vulva, sequela -S30815A Abrasion of unspecified external genital organs, male, initial encounter -S30815D Abrasion of unspecified external genital organs, male, subsequent encounter -S30815S Abrasion of unspecified external genital organs, male, sequela -S30816A Abrasion of unspecified external genital organs, female, initial encounter -S30816D Abrasion of unspecified external genital organs, female, subsequent encounter -S30816S Abrasion of unspecified external genital organs, female, sequela -S30817A Abrasion of anus, initial encounter -S30817D Abrasion of anus, subsequent encounter -S30817S Abrasion of anus, sequela -S30820A Blister (nonthermal) of lower back and pelvis, initial encounter -S30820D Blister (nonthermal) of lower back and pelvis, subsequent encounter -S30820S Blister (nonthermal) of lower back and pelvis, sequela -S30821A Blister (nonthermal) of abdominal wall, initial encounter -S30821D Blister (nonthermal) of abdominal wall, subsequent encounter -S30821S Blister (nonthermal) of abdominal wall, sequela -S30822A Blister (nonthermal) of penis, initial encounter -S30822D Blister (nonthermal) of penis, subsequent encounter -S30822S Blister (nonthermal) of penis, sequela -S30823A Blister (nonthermal) of scrotum and testes, initial encounter -S30823D Blister (nonthermal) of scrotum and testes, subsequent encounter -S30823S Blister (nonthermal) of scrotum and testes, sequela -S30824A Blister (nonthermal) of vagina and vulva, initial encounter -S30824D Blister (nonthermal) of vagina and vulva, subsequent encounter -S30824S Blister (nonthermal) of vagina and vulva, sequela -S30825A Blister (nonthermal) of unspecified external genital organs, male, initial encounter -S30825D Blister (nonthermal) of unspecified external genital organs, male, subsequent encounter -S30825S Blister (nonthermal) of unspecified external genital organs, male, sequela -S30826A Blister (nonthermal) of unspecified external genital organs, female, initial encounter -S30826D Blister (nonthermal) of unspecified external genital organs, female, subsequent encounter -S30826S Blister (nonthermal) of unspecified external genital organs, female, sequela -S30827A Blister (nonthermal) of anus, initial encounter -S30827D Blister (nonthermal) of anus, subsequent encounter -S30827S Blister (nonthermal) of anus, sequela -S30840A External constriction of lower back and pelvis, initial encounter -S30840D External constriction of lower back and pelvis, subsequent encounter -S30840S External constriction of lower back and pelvis, sequela -S30841A External constriction of abdominal wall, initial encounter -S30841D External constriction of abdominal wall, subsequent encounter -S30841S External constriction of abdominal wall, sequela -S30842A External constriction of penis, initial encounter -S30842D External constriction of penis, subsequent encounter -S30842S External constriction of penis, sequela -S30843A External constriction of scrotum and testes, initial encounter -S30843D External constriction of scrotum and testes, subsequent encounter -S30843S External constriction of scrotum and testes, sequela -S30844A External constriction of vagina and vulva, initial encounter -S30844D External constriction of vagina and vulva, subsequent encounter -S30844S External constriction of vagina and vulva, sequela -S30845A External constriction of unspecified external genital organs, male, initial encounter -S30845D External constriction of unspecified external genital organs, male, subsequent encounter -S30845S External constriction of unspecified external genital organs, male, sequela -S30846A External constriction of unspecified external genital organs, female, initial encounter -S30846D External constriction of unspecified external genital organs, female, subsequent encounter -S30846S External constriction of unspecified external genital organs, female, sequela -S30850A Superficial foreign body of lower back and pelvis, initial encounter -S30850D Superficial foreign body of lower back and pelvis, subsequent encounter -S30850S Superficial foreign body of lower back and pelvis, sequela -S30851A Superficial foreign body of abdominal wall, initial encounter -S30851D Superficial foreign body of abdominal wall, subsequent encounter -S30851S Superficial foreign body of abdominal wall, sequela -S30852A Superficial foreign body of penis, initial encounter -S30852D Superficial foreign body of penis, subsequent encounter -S30852S Superficial foreign body of penis, sequela -S30853A Superficial foreign body of scrotum and testes, initial encounter -S30853D Superficial foreign body of scrotum and testes, subsequent encounter -S30853S Superficial foreign body of scrotum and testes, sequela -S30854A Superficial foreign body of vagina and vulva, initial encounter -S30854D Superficial foreign body of vagina and vulva, subsequent encounter -S30854S Superficial foreign body of vagina and vulva, sequela -S30855A Superficial foreign body of unspecified external genital organs, male, initial encounter -S30855D Superficial foreign body of unspecified external genital organs, male, subsequent encounter -S30855S Superficial foreign body of unspecified external genital organs, male, sequela -S30856A Superficial foreign body of unspecified external genital organs, female, initial encounter -S30856D Superficial foreign body of unspecified external genital organs, female, subsequent encounter -S30856S Superficial foreign body of unspecified external genital organs, female, sequela -S30857A Superficial foreign body of anus, initial encounter -S30857D Superficial foreign body of anus, subsequent encounter -S30857S Superficial foreign body of anus, sequela -S30860A Insect bite (nonvenomous) of lower back and pelvis, initial encounter -S30860D Insect bite (nonvenomous) of lower back and pelvis, subsequent encounter -S30860S Insect bite (nonvenomous) of lower back and pelvis, sequela -S30861A Insect bite (nonvenomous) of abdominal wall, initial encounter -S30861D Insect bite (nonvenomous) of abdominal wall, subsequent encounter -S30861S Insect bite (nonvenomous) of abdominal wall, sequela -S30862A Insect bite (nonvenomous) of penis, initial encounter -S30862D Insect bite (nonvenomous) of penis, subsequent encounter -S30862S Insect bite (nonvenomous) of penis, sequela -S30863A Insect bite (nonvenomous) of scrotum and testes, initial encounter -S30863D Insect bite (nonvenomous) of scrotum and testes, subsequent encounter -S30863S Insect bite (nonvenomous) of scrotum and testes, sequela -S30864A Insect bite (nonvenomous) of vagina and vulva, initial encounter -S30864D Insect bite (nonvenomous) of vagina and vulva, subsequent encounter -S30864S Insect bite (nonvenomous) of vagina and vulva, sequela -S30865A Insect bite (nonvenomous) of unspecified external genital organs, male, initial encounter -S30865D Insect bite (nonvenomous) of unspecified external genital organs, male, subsequent encounter -S30865S Insect bite (nonvenomous) of unspecified external genital organs, male, sequela -S30866A Insect bite (nonvenomous) of unspecified external genital organs, female, initial encounter -S30866D Insect bite (nonvenomous) of unspecified external genital organs, female, subsequent encounter -S30866S Insect bite (nonvenomous) of unspecified external genital organs, female, sequela -S30867A Insect bite (nonvenomous) of anus, initial encounter -S30867D Insect bite (nonvenomous) of anus, subsequent encounter -S30867S Insect bite (nonvenomous) of anus, sequela -S30870A Other superficial bite of lower back and pelvis, initial encounter -S30870D Other superficial bite of lower back and pelvis, subsequent encounter -S30870S Other superficial bite of lower back and pelvis, sequela -S30871A Other superficial bite of abdominal wall, initial encounter -S30871D Other superficial bite of abdominal wall, subsequent encounter -S30871S Other superficial bite of abdominal wall, sequela -S30872A Other superficial bite of penis, initial encounter -S30872D Other superficial bite of penis, subsequent encounter -S30872S Other superficial bite of penis, sequela -S30873A Other superficial bite of scrotum and testes, initial encounter -S30873D Other superficial bite of scrotum and testes, subsequent encounter -S30873S Other superficial bite of scrotum and testes, sequela -S30874A Other superficial bite of vagina and vulva, initial encounter -S30874D Other superficial bite of vagina and vulva, subsequent encounter -S30874S Other superficial bite of vagina and vulva, sequela -S30875A Other superficial bite of unspecified external genital organs, male, initial encounter -S30875D Other superficial bite of unspecified external genital organs, male, subsequent encounter -S30875S Other superficial bite of unspecified external genital organs, male, sequela -S30876A Other superficial bite of unspecified external genital organs, female, initial encounter -S30876D Other superficial bite of unspecified external genital organs, female, subsequent encounter -S30876S Other superficial bite of unspecified external genital organs, female, sequela -S30877A Other superficial bite of anus, initial encounter -S30877D Other superficial bite of anus, subsequent encounter -S30877S Other superficial bite of anus, sequela -S3091XA Unspecified superficial injury of lower back and pelvis, initial encounter -S3091XD Unspecified superficial injury of lower back and pelvis, subsequent encounter -S3091XS Unspecified superficial injury of lower back and pelvis, sequela -S3092XA Unspecified superficial injury of abdominal wall, initial encounter -S3092XD Unspecified superficial injury of abdominal wall, subsequent encounter -S3092XS Unspecified superficial injury of abdominal wall, sequela -S3093XA Unspecified superficial injury of penis, initial encounter -S3093XD Unspecified superficial injury of penis, subsequent encounter -S3093XS Unspecified superficial injury of penis, sequela -S3094XA Unspecified superficial injury of scrotum and testes, initial encounter -S3094XD Unspecified superficial injury of scrotum and testes, subsequent encounter -S3094XS Unspecified superficial injury of scrotum and testes, sequela -S3095XA Unspecified superficial injury of vagina and vulva, initial encounter -S3095XD Unspecified superficial injury of vagina and vulva, subsequent encounter -S3095XS Unspecified superficial injury of vagina and vulva, sequela -S3096XA Unspecified superficial injury of unspecified external genital organs, male, initial encounter -S3096XD Unspecified superficial injury of unspecified external genital organs, male, subsequent encounter -S3096XS Unspecified superficial injury of unspecified external genital organs, male, sequela -S3097XA Unspecified superficial injury of unspecified external genital organs, female, initial encounter -S3097XD Unspecified superficial injury of unspecified external genital organs, female, subsequent encounter -S3097XS Unspecified superficial injury of unspecified external genital organs, female, sequela -S3098XA Unspecified superficial injury of anus, initial encounter -S3098XD Unspecified superficial injury of anus, subsequent encounter -S3098XS Unspecified superficial injury of anus, sequela -S31000A Unspecified open wound of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31000D Unspecified open wound of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31000S Unspecified open wound of lower back and pelvis without penetration into retroperitoneum, sequela -S31001A Unspecified open wound of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31001D Unspecified open wound of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31001S Unspecified open wound of lower back and pelvis with penetration into retroperitoneum, sequela -S31010A Laceration without foreign body of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31010D Laceration without foreign body of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31010S Laceration without foreign body of lower back and pelvis without penetration into retroperitoneum, sequela -S31011A Laceration without foreign body of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31011D Laceration without foreign body of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31011S Laceration without foreign body of lower back and pelvis with penetration into retroperitoneum, sequela -S31020A Laceration with foreign body of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31020D Laceration with foreign body of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31020S Laceration with foreign body of lower back and pelvis without penetration into retroperitoneum, sequela -S31021A Laceration with foreign body of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31021D Laceration with foreign body of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31021S Laceration with foreign body of lower back and pelvis with penetration into retroperitoneum, sequela -S31030A Puncture wound without foreign body of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31030D Puncture wound without foreign body of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31030S Puncture wound without foreign body of lower back and pelvis without penetration into retroperitoneum, sequela -S31031A Puncture wound without foreign body of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31031D Puncture wound without foreign body of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31031S Puncture wound without foreign body of lower back and pelvis with penetration into retroperitoneum, sequela -S31040A Puncture wound with foreign body of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31040D Puncture wound with foreign body of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31040S Puncture wound with foreign body of lower back and pelvis without penetration into retroperitoneum, sequela -S31041A Puncture wound with foreign body of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31041D Puncture wound with foreign body of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31041S Puncture wound with foreign body of lower back and pelvis with penetration into retroperitoneum, sequela -S31050A Open bite of lower back and pelvis without penetration into retroperitoneum, initial encounter -S31050D Open bite of lower back and pelvis without penetration into retroperitoneum, subsequent encounter -S31050S Open bite of lower back and pelvis without penetration into retroperitoneum, sequela -S31051A Open bite of lower back and pelvis with penetration into retroperitoneum, initial encounter -S31051D Open bite of lower back and pelvis with penetration into retroperitoneum, subsequent encounter -S31051S Open bite of lower back and pelvis with penetration into retroperitoneum, sequela -S31100A Unspecified open wound of abdominal wall, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31100D Unspecified open wound of abdominal wall, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31100S Unspecified open wound of abdominal wall, right upper quadrant without penetration into peritoneal cavity, sequela -S31101A Unspecified open wound of abdominal wall, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31101D Unspecified open wound of abdominal wall, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31101S Unspecified open wound of abdominal wall, left upper quadrant without penetration into peritoneal cavity, sequela -S31102A Unspecified open wound of abdominal wall, epigastric region without penetration into peritoneal cavity, initial encounter -S31102D Unspecified open wound of abdominal wall, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31102S Unspecified open wound of abdominal wall, epigastric region without penetration into peritoneal cavity, sequela -S31103A Unspecified open wound of abdominal wall, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31103D Unspecified open wound of abdominal wall, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31103S Unspecified open wound of abdominal wall, right lower quadrant without penetration into peritoneal cavity, sequela -S31104A Unspecified open wound of abdominal wall, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31104D Unspecified open wound of abdominal wall, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31104S Unspecified open wound of abdominal wall, left lower quadrant without penetration into peritoneal cavity, sequela -S31105A Unspecified open wound of abdominal wall, periumbilic region without penetration into peritoneal cavity, initial encounter -S31105D Unspecified open wound of abdominal wall, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31105S Unspecified open wound of abdominal wall, periumbilic region without penetration into peritoneal cavity, sequela -S31109A Unspecified open wound of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31109D Unspecified open wound of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31109S Unspecified open wound of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, sequela -S31110A Laceration without foreign body of abdominal wall, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31110D Laceration without foreign body of abdominal wall, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31110S Laceration without foreign body of abdominal wall, right upper quadrant without penetration into peritoneal cavity, sequela -S31111A Laceration without foreign body of abdominal wall, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31111D Laceration without foreign body of abdominal wall, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31111S Laceration without foreign body of abdominal wall, left upper quadrant without penetration into peritoneal cavity, sequela -S31112A Laceration without foreign body of abdominal wall, epigastric region without penetration into peritoneal cavity, initial encounter -S31112D Laceration without foreign body of abdominal wall, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31112S Laceration without foreign body of abdominal wall, epigastric region without penetration into peritoneal cavity, sequela -S31113A Laceration without foreign body of abdominal wall, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31113D Laceration without foreign body of abdominal wall, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31113S Laceration without foreign body of abdominal wall, right lower quadrant without penetration into peritoneal cavity, sequela -S31114A Laceration without foreign body of abdominal wall, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31114D Laceration without foreign body of abdominal wall, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31114S Laceration without foreign body of abdominal wall, left lower quadrant without penetration into peritoneal cavity, sequela -S31115A Laceration without foreign body of abdominal wall, periumbilic region without penetration into peritoneal cavity, initial encounter -S31115D Laceration without foreign body of abdominal wall, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31115S Laceration without foreign body of abdominal wall, periumbilic region without penetration into peritoneal cavity, sequela -S31119A Laceration without foreign body of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31119D Laceration without foreign body of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31119S Laceration without foreign body of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, sequela -S31120A Laceration of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31120D Laceration of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31120S Laceration of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, sequela -S31121A Laceration of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31121D Laceration of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31121S Laceration of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, sequela -S31122A Laceration of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, initial encounter -S31122D Laceration of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31122S Laceration of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, sequela -S31123A Laceration of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31123D Laceration of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31123S Laceration of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, sequela -S31124A Laceration of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31124D Laceration of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31124S Laceration of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, sequela -S31125A Laceration of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, initial encounter -S31125D Laceration of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31125S Laceration of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, sequela -S31129A Laceration of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31129D Laceration of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31129S Laceration of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, sequela -S31130A Puncture wound of abdominal wall without foreign body, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31130D Puncture wound of abdominal wall without foreign body, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31130S Puncture wound of abdominal wall without foreign body, right upper quadrant without penetration into peritoneal cavity, sequela -S31131A Puncture wound of abdominal wall without foreign body, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31131D Puncture wound of abdominal wall without foreign body, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31131S Puncture wound of abdominal wall without foreign body, left upper quadrant without penetration into peritoneal cavity, sequela -S31132A Puncture wound of abdominal wall without foreign body, epigastric region without penetration into peritoneal cavity, initial encounter -S31132D Puncture wound of abdominal wall without foreign body, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31132S Puncture wound of abdominal wall without foreign body, epigastric region without penetration into peritoneal cavity, sequela -S31133A Puncture wound of abdominal wall without foreign body, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31133D Puncture wound of abdominal wall without foreign body, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31133S Puncture wound of abdominal wall without foreign body, right lower quadrant without penetration into peritoneal cavity, sequela -S31134A Puncture wound of abdominal wall without foreign body, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31134D Puncture wound of abdominal wall without foreign body, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31134S Puncture wound of abdominal wall without foreign body, left lower quadrant without penetration into peritoneal cavity, sequela -S31135A Puncture wound of abdominal wall without foreign body, periumbilic region without penetration into peritoneal cavity, initial encounter -S31135D Puncture wound of abdominal wall without foreign body, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31135S Puncture wound of abdominal wall without foreign body, periumbilic region without penetration into peritoneal cavity, sequela -S31139A Puncture wound of abdominal wall without foreign body, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31139D Puncture wound of abdominal wall without foreign body, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31139S Puncture wound of abdominal wall without foreign body, unspecified quadrant without penetration into peritoneal cavity, sequela -S31140A Puncture wound of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31140D Puncture wound of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31140S Puncture wound of abdominal wall with foreign body, right upper quadrant without penetration into peritoneal cavity, sequela -S31141A Puncture wound of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31141D Puncture wound of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31141S Puncture wound of abdominal wall with foreign body, left upper quadrant without penetration into peritoneal cavity, sequela -S31142A Puncture wound of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, initial encounter -S31142D Puncture wound of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31142S Puncture wound of abdominal wall with foreign body, epigastric region without penetration into peritoneal cavity, sequela -S31143A Puncture wound of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31143D Puncture wound of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31143S Puncture wound of abdominal wall with foreign body, right lower quadrant without penetration into peritoneal cavity, sequela -S31144A Puncture wound of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31144D Puncture wound of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31144S Puncture wound of abdominal wall with foreign body, left lower quadrant without penetration into peritoneal cavity, sequela -S31145A Puncture wound of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, initial encounter -S31145D Puncture wound of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31145S Puncture wound of abdominal wall with foreign body, periumbilic region without penetration into peritoneal cavity, sequela -S31149A Puncture wound of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31149D Puncture wound of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31149S Puncture wound of abdominal wall with foreign body, unspecified quadrant without penetration into peritoneal cavity, sequela -S31150A Open bite of abdominal wall, right upper quadrant without penetration into peritoneal cavity, initial encounter -S31150D Open bite of abdominal wall, right upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31150S Open bite of abdominal wall, right upper quadrant without penetration into peritoneal cavity, sequela -S31151A Open bite of abdominal wall, left upper quadrant without penetration into peritoneal cavity, initial encounter -S31151D Open bite of abdominal wall, left upper quadrant without penetration into peritoneal cavity, subsequent encounter -S31151S Open bite of abdominal wall, left upper quadrant without penetration into peritoneal cavity, sequela -S31152A Open bite of abdominal wall, epigastric region without penetration into peritoneal cavity, initial encounter -S31152D Open bite of abdominal wall, epigastric region without penetration into peritoneal cavity, subsequent encounter -S31152S Open bite of abdominal wall, epigastric region without penetration into peritoneal cavity, sequela -S31153A Open bite of abdominal wall, right lower quadrant without penetration into peritoneal cavity, initial encounter -S31153D Open bite of abdominal wall, right lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31153S Open bite of abdominal wall, right lower quadrant without penetration into peritoneal cavity, sequela -S31154A Open bite of abdominal wall, left lower quadrant without penetration into peritoneal cavity, initial encounter -S31154D Open bite of abdominal wall, left lower quadrant without penetration into peritoneal cavity, subsequent encounter -S31154S Open bite of abdominal wall, left lower quadrant without penetration into peritoneal cavity, sequela -S31155A Open bite of abdominal wall, periumbilic region without penetration into peritoneal cavity, initial encounter -S31155D Open bite of abdominal wall, periumbilic region without penetration into peritoneal cavity, subsequent encounter -S31155S Open bite of abdominal wall, periumbilic region without penetration into peritoneal cavity, sequela -S31159A Open bite of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, initial encounter -S31159D Open bite of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, subsequent encounter -S31159S Open bite of abdominal wall, unspecified quadrant without penetration into peritoneal cavity, sequela -S3120XA Unspecified open wound of penis, initial encounter -S3120XD Unspecified open wound of penis, subsequent encounter -S3120XS Unspecified open wound of penis, sequela -S3121XA Laceration without foreign body of penis, initial encounter -S3121XD Laceration without foreign body of penis, subsequent encounter -S3121XS Laceration without foreign body of penis, sequela -S3122XA Laceration with foreign body of penis, initial encounter -S3122XD Laceration with foreign body of penis, subsequent encounter -S3122XS Laceration with foreign body of penis, sequela -S3123XA Puncture wound without foreign body of penis, initial encounter -S3123XD Puncture wound without foreign body of penis, subsequent encounter -S3123XS Puncture wound without foreign body of penis, sequela -S3124XA Puncture wound with foreign body of penis, initial encounter -S3124XD Puncture wound with foreign body of penis, subsequent encounter -S3124XS Puncture wound with foreign body of penis, sequela -S3125XA Open bite of penis, initial encounter -S3125XD Open bite of penis, subsequent encounter -S3125XS Open bite of penis, sequela -S3130XA Unspecified open wound of scrotum and testes, initial encounter -S3130XD Unspecified open wound of scrotum and testes, subsequent encounter -S3130XS Unspecified open wound of scrotum and testes, sequela -S3131XA Laceration without foreign body of scrotum and testes, initial encounter -S3131XD Laceration without foreign body of scrotum and testes, subsequent encounter -S3131XS Laceration without foreign body of scrotum and testes, sequela -S3132XA Laceration with foreign body of scrotum and testes, initial encounter -S3132XD Laceration with foreign body of scrotum and testes, subsequent encounter -S3132XS Laceration with foreign body of scrotum and testes, sequela -S3133XA Puncture wound without foreign body of scrotum and testes, initial encounter -S3133XD Puncture wound without foreign body of scrotum and testes, subsequent encounter -S3133XS Puncture wound without foreign body of scrotum and testes, sequela -S3134XA Puncture wound with foreign body of scrotum and testes, initial encounter -S3134XD Puncture wound with foreign body of scrotum and testes, subsequent encounter -S3134XS Puncture wound with foreign body of scrotum and testes, sequela -S3135XA Open bite of scrotum and testes, initial encounter -S3135XD Open bite of scrotum and testes, subsequent encounter -S3135XS Open bite of scrotum and testes, sequela -S3140XA Unspecified open wound of vagina and vulva, initial encounter -S3140XD Unspecified open wound of vagina and vulva, subsequent encounter -S3140XS Unspecified open wound of vagina and vulva, sequela -S3141XA Laceration without foreign body of vagina and vulva, initial encounter -S3141XD Laceration without foreign body of vagina and vulva, subsequent encounter -S3141XS Laceration without foreign body of vagina and vulva, sequela -S3142XA Laceration with foreign body of vagina and vulva, initial encounter -S3142XD Laceration with foreign body of vagina and vulva, subsequent encounter -S3142XS Laceration with foreign body of vagina and vulva, sequela -S3143XA Puncture wound without foreign body of vagina and vulva, initial encounter -S3143XD Puncture wound without foreign body of vagina and vulva, subsequent encounter -S3143XS Puncture wound without foreign body of vagina and vulva, sequela -S3144XA Puncture wound with foreign body of vagina and vulva, initial encounter -S3144XD Puncture wound with foreign body of vagina and vulva, subsequent encounter -S3144XS Puncture wound with foreign body of vagina and vulva, sequela -S3145XA Open bite of vagina and vulva, initial encounter -S3145XD Open bite of vagina and vulva, subsequent encounter -S3145XS Open bite of vagina and vulva, sequela -S31501A Unspecified open wound of unspecified external genital organs, male, initial encounter -S31501D Unspecified open wound of unspecified external genital organs, male, subsequent encounter -S31501S Unspecified open wound of unspecified external genital organs, male, sequela -S31502A Unspecified open wound of unspecified external genital organs, female, initial encounter -S31502D Unspecified open wound of unspecified external genital organs, female, subsequent encounter -S31502S Unspecified open wound of unspecified external genital organs, female, sequela -S31511A Laceration without foreign body of unspecified external genital organs, male, initial encounter -S31511D Laceration without foreign body of unspecified external genital organs, male, subsequent encounter -S31511S Laceration without foreign body of unspecified external genital organs, male, sequela -S31512A Laceration without foreign body of unspecified external genital organs, female, initial encounter -S31512D Laceration without foreign body of unspecified external genital organs, female, subsequent encounter -S31512S Laceration without foreign body of unspecified external genital organs, female, sequela -S31521A Laceration with foreign body of unspecified external genital organs, male, initial encounter -S31521D Laceration with foreign body of unspecified external genital organs, male, subsequent encounter -S31521S Laceration with foreign body of unspecified external genital organs, male, sequela -S31522A Laceration with foreign body of unspecified external genital organs, female, initial encounter -S31522D Laceration with foreign body of unspecified external genital organs, female, subsequent encounter -S31522S Laceration with foreign body of unspecified external genital organs, female, sequela -S31531A Puncture wound without foreign body of unspecified external genital organs, male, initial encounter -S31531D Puncture wound without foreign body of unspecified external genital organs, male, subsequent encounter -S31531S Puncture wound without foreign body of unspecified external genital organs, male, sequela -S31532A Puncture wound without foreign body of unspecified external genital organs, female, initial encounter -S31532D Puncture wound without foreign body of unspecified external genital organs, female, subsequent encounter -S31532S Puncture wound without foreign body of unspecified external genital organs, female, sequela -S31541A Puncture wound with foreign body of unspecified external genital organs, male, initial encounter -S31541D Puncture wound with foreign body of unspecified external genital organs, male, subsequent encounter -S31541S Puncture wound with foreign body of unspecified external genital organs, male, sequela -S31542A Puncture wound with foreign body of unspecified external genital organs, female, initial encounter -S31542D Puncture wound with foreign body of unspecified external genital organs, female, subsequent encounter -S31542S Puncture wound with foreign body of unspecified external genital organs, female, sequela -S31551A Open bite of unspecified external genital organs, male, initial encounter -S31551D Open bite of unspecified external genital organs, male, subsequent encounter -S31551S Open bite of unspecified external genital organs, male, sequela -S31552A Open bite of unspecified external genital organs, female, initial encounter -S31552D Open bite of unspecified external genital organs, female, subsequent encounter -S31552S Open bite of unspecified external genital organs, female, sequela -S31600A Unspecified open wound of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31600D Unspecified open wound of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31600S Unspecified open wound of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31601A Unspecified open wound of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31601D Unspecified open wound of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31601S Unspecified open wound of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31602A Unspecified open wound of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31602D Unspecified open wound of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31602S Unspecified open wound of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31603A Unspecified open wound of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31603D Unspecified open wound of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31603S Unspecified open wound of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31604A Unspecified open wound of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31604D Unspecified open wound of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31604S Unspecified open wound of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31605A Unspecified open wound of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31605D Unspecified open wound of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31605S Unspecified open wound of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31609A Unspecified open wound of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31609D Unspecified open wound of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31609S Unspecified open wound of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31610A Laceration without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31610D Laceration without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31610S Laceration without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31611A Laceration without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31611D Laceration without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31611S Laceration without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31612A Laceration without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31612D Laceration without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31612S Laceration without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31613A Laceration without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31613D Laceration without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31613S Laceration without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31614A Laceration without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31614D Laceration without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31614S Laceration without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31615A Laceration without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31615D Laceration without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31615S Laceration without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31619A Laceration without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31619D Laceration without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31619S Laceration without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31620A Laceration with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31620D Laceration with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31620S Laceration with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31621A Laceration with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31621D Laceration with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31621S Laceration with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31622A Laceration with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31622D Laceration with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31622S Laceration with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31623A Laceration with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31623D Laceration with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31623S Laceration with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31624A Laceration with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31624D Laceration with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31624S Laceration with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31625A Laceration with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31625D Laceration with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31625S Laceration with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31629A Laceration with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31629D Laceration with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31629S Laceration with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31630A Puncture wound without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31630D Puncture wound without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31630S Puncture wound without foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31631A Puncture wound without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31631D Puncture wound without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31631S Puncture wound without foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31632A Puncture wound without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31632D Puncture wound without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31632S Puncture wound without foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31633A Puncture wound without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31633D Puncture wound without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31633S Puncture wound without foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31634A Puncture wound without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31634D Puncture wound without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31634S Puncture wound without foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31635A Puncture wound without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31635D Puncture wound without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31635S Puncture wound without foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31639A Puncture wound without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31639D Puncture wound without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31639S Puncture wound without foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31640A Puncture wound with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31640D Puncture wound with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31640S Puncture wound with foreign body of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31641A Puncture wound with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31641D Puncture wound with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31641S Puncture wound with foreign body of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31642A Puncture wound with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31642D Puncture wound with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31642S Puncture wound with foreign body of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31643A Puncture wound with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31643D Puncture wound with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31643S Puncture wound with foreign body of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31644A Puncture wound with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31644D Puncture wound with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31644S Puncture wound with foreign body of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31645A Puncture wound with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31645D Puncture wound with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31645S Puncture wound with foreign body of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31649A Puncture wound with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31649D Puncture wound with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31649S Puncture wound with foreign body of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31650A Open bite of abdominal wall, right upper quadrant with penetration into peritoneal cavity, initial encounter -S31650D Open bite of abdominal wall, right upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31650S Open bite of abdominal wall, right upper quadrant with penetration into peritoneal cavity, sequela -S31651A Open bite of abdominal wall, left upper quadrant with penetration into peritoneal cavity, initial encounter -S31651D Open bite of abdominal wall, left upper quadrant with penetration into peritoneal cavity, subsequent encounter -S31651S Open bite of abdominal wall, left upper quadrant with penetration into peritoneal cavity, sequela -S31652A Open bite of abdominal wall, epigastric region with penetration into peritoneal cavity, initial encounter -S31652D Open bite of abdominal wall, epigastric region with penetration into peritoneal cavity, subsequent encounter -S31652S Open bite of abdominal wall, epigastric region with penetration into peritoneal cavity, sequela -S31653A Open bite of abdominal wall, right lower quadrant with penetration into peritoneal cavity, initial encounter -S31653D Open bite of abdominal wall, right lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31653S Open bite of abdominal wall, right lower quadrant with penetration into peritoneal cavity, sequela -S31654A Open bite of abdominal wall, left lower quadrant with penetration into peritoneal cavity, initial encounter -S31654D Open bite of abdominal wall, left lower quadrant with penetration into peritoneal cavity, subsequent encounter -S31654S Open bite of abdominal wall, left lower quadrant with penetration into peritoneal cavity, sequela -S31655A Open bite of abdominal wall, periumbilic region with penetration into peritoneal cavity, initial encounter -S31655D Open bite of abdominal wall, periumbilic region with penetration into peritoneal cavity, subsequent encounter -S31655S Open bite of abdominal wall, periumbilic region with penetration into peritoneal cavity, sequela -S31659A Open bite of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, initial encounter -S31659D Open bite of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, subsequent encounter -S31659S Open bite of abdominal wall, unspecified quadrant with penetration into peritoneal cavity, sequela -S31801A Laceration without foreign body of unspecified buttock, initial encounter -S31801D Laceration without foreign body of unspecified buttock, subsequent encounter -S31801S Laceration without foreign body of unspecified buttock, sequela -S31802A Laceration with foreign body of unspecified buttock, initial encounter -S31802D Laceration with foreign body of unspecified buttock, subsequent encounter -S31802S Laceration with foreign body of unspecified buttock, sequela -S31803A Puncture wound without foreign body of unspecified buttock, initial encounter -S31803D Puncture wound without foreign body of unspecified buttock, subsequent encounter -S31803S Puncture wound without foreign body of unspecified buttock, sequela -S31804A Puncture wound with foreign body of unspecified buttock, initial encounter -S31804D Puncture wound with foreign body of unspecified buttock, subsequent encounter -S31804S Puncture wound with foreign body of unspecified buttock, sequela -S31805A Open bite of unspecified buttock, initial encounter -S31805D Open bite of unspecified buttock, subsequent encounter -S31805S Open bite of unspecified buttock, sequela -S31809A Unspecified open wound of unspecified buttock, initial encounter -S31809D Unspecified open wound of unspecified buttock, subsequent encounter -S31809S Unspecified open wound of unspecified buttock, sequela -S31811A Laceration without foreign body of right buttock, initial encounter -S31811D Laceration without foreign body of right buttock, subsequent encounter -S31811S Laceration without foreign body of right buttock, sequela -S31812A Laceration with foreign body of right buttock, initial encounter -S31812D Laceration with foreign body of right buttock, subsequent encounter -S31812S Laceration with foreign body of right buttock, sequela -S31813A Puncture wound without foreign body of right buttock, initial encounter -S31813D Puncture wound without foreign body of right buttock, subsequent encounter -S31813S Puncture wound without foreign body of right buttock, sequela -S31814A Puncture wound with foreign body of right buttock, initial encounter -S31814D Puncture wound with foreign body of right buttock, subsequent encounter -S31814S Puncture wound with foreign body of right buttock, sequela -S31815A Open bite of right buttock, initial encounter -S31815D Open bite of right buttock, subsequent encounter -S31815S Open bite of right buttock, sequela -S31819A Unspecified open wound of right buttock, initial encounter -S31819D Unspecified open wound of right buttock, subsequent encounter -S31819S Unspecified open wound of right buttock, sequela -S31821A Laceration without foreign body of left buttock, initial encounter -S31821D Laceration without foreign body of left buttock, subsequent encounter -S31821S Laceration without foreign body of left buttock, sequela -S31822A Laceration with foreign body of left buttock, initial encounter -S31822D Laceration with foreign body of left buttock, subsequent encounter -S31822S Laceration with foreign body of left buttock, sequela -S31823A Puncture wound without foreign body of left buttock, initial encounter -S31823D Puncture wound without foreign body of left buttock, subsequent encounter -S31823S Puncture wound without foreign body of left buttock, sequela -S31824A Puncture wound with foreign body of left buttock, initial encounter -S31824D Puncture wound with foreign body of left buttock, subsequent encounter -S31824S Puncture wound with foreign body of left buttock, sequela -S31825A Open bite of left buttock, initial encounter -S31825D Open bite of left buttock, subsequent encounter -S31825S Open bite of left buttock, sequela -S31829A Unspecified open wound of left buttock, initial encounter -S31829D Unspecified open wound of left buttock, subsequent encounter -S31829S Unspecified open wound of left buttock, sequela -S31831A Laceration without foreign body of anus, initial encounter -S31831D Laceration without foreign body of anus, subsequent encounter -S31831S Laceration without foreign body of anus, sequela -S31832A Laceration with foreign body of anus, initial encounter -S31832D Laceration with foreign body of anus, subsequent encounter -S31832S Laceration with foreign body of anus, sequela -S31833A Puncture wound without foreign body of anus, initial encounter -S31833D Puncture wound without foreign body of anus, subsequent encounter -S31833S Puncture wound without foreign body of anus, sequela -S31834A Puncture wound with foreign body of anus, initial encounter -S31834D Puncture wound with foreign body of anus, subsequent encounter -S31834S Puncture wound with foreign body of anus, sequela -S31835A Open bite of anus, initial encounter -S31835D Open bite of anus, subsequent encounter -S31835S Open bite of anus, sequela -S31839A Unspecified open wound of anus, initial encounter -S31839D Unspecified open wound of anus, subsequent encounter -S31839S Unspecified open wound of anus, sequela -S32000A Wedge compression fracture of unspecified lumbar vertebra, initial encounter for closed fracture -S32000B Wedge compression fracture of unspecified lumbar vertebra, initial encounter for open fracture -S32000D Wedge compression fracture of unspecified lumbar vertebra, subsequent encounter for fracture with routine healing -S32000G Wedge compression fracture of unspecified lumbar vertebra, subsequent encounter for fracture with delayed healing -S32000K Wedge compression fracture of unspecified lumbar vertebra, subsequent encounter for fracture with nonunion -S32000S Wedge compression fracture of unspecified lumbar vertebra, sequela -S32001A Stable burst fracture of unspecified lumbar vertebra, initial encounter for closed fracture -S32001B Stable burst fracture of unspecified lumbar vertebra, initial encounter for open fracture -S32001D Stable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with routine healing -S32001G Stable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with delayed healing -S32001K Stable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with nonunion -S32001S Stable burst fracture of unspecified lumbar vertebra, sequela -S32002A Unstable burst fracture of unspecified lumbar vertebra, initial encounter for closed fracture -S32002B Unstable burst fracture of unspecified lumbar vertebra, initial encounter for open fracture -S32002D Unstable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with routine healing -S32002G Unstable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with delayed healing -S32002K Unstable burst fracture of unspecified lumbar vertebra, subsequent encounter for fracture with nonunion -S32002S Unstable burst fracture of unspecified lumbar vertebra, sequela -S32008A Other fracture of unspecified lumbar vertebra, initial encounter for closed fracture -S32008B Other fracture of unspecified lumbar vertebra, initial encounter for open fracture -S32008D Other fracture of unspecified lumbar vertebra, subsequent encounter for fracture with routine healing -S32008G Other fracture of unspecified lumbar vertebra, subsequent encounter for fracture with delayed healing -S32008K Other fracture of unspecified lumbar vertebra, subsequent encounter for fracture with nonunion -S32008S Other fracture of unspecified lumbar vertebra, sequela -S32009A Unspecified fracture of unspecified lumbar vertebra, initial encounter for closed fracture -S32009B Unspecified fracture of unspecified lumbar vertebra, initial encounter for open fracture -S32009D Unspecified fracture of unspecified lumbar vertebra, subsequent encounter for fracture with routine healing -S32009G Unspecified fracture of unspecified lumbar vertebra, subsequent encounter for fracture with delayed healing -S32009K Unspecified fracture of unspecified lumbar vertebra, subsequent encounter for fracture with nonunion -S32009S Unspecified fracture of unspecified lumbar vertebra, sequela -S32010A Wedge compression fracture of first lumbar vertebra, initial encounter for closed fracture -S32010B Wedge compression fracture of first lumbar vertebra, initial encounter for open fracture -S32010D Wedge compression fracture of first lumbar vertebra, subsequent encounter for fracture with routine healing -S32010G Wedge compression fracture of first lumbar vertebra, subsequent encounter for fracture with delayed healing -S32010K Wedge compression fracture of first lumbar vertebra, subsequent encounter for fracture with nonunion -S32010S Wedge compression fracture of first lumbar vertebra, sequela -S32011A Stable burst fracture of first lumbar vertebra, initial encounter for closed fracture -S32011B Stable burst fracture of first lumbar vertebra, initial encounter for open fracture -S32011D Stable burst fracture of first lumbar vertebra, subsequent encounter for fracture with routine healing -S32011G Stable burst fracture of first lumbar vertebra, subsequent encounter for fracture with delayed healing -S32011K Stable burst fracture of first lumbar vertebra, subsequent encounter for fracture with nonunion -S32011S Stable burst fracture of first lumbar vertebra, sequela -S32012A Unstable burst fracture of first lumbar vertebra, initial encounter for closed fracture -S32012B Unstable burst fracture of first lumbar vertebra, initial encounter for open fracture -S32012D Unstable burst fracture of first lumbar vertebra, subsequent encounter for fracture with routine healing -S32012G Unstable burst fracture of first lumbar vertebra, subsequent encounter for fracture with delayed healing -S32012K Unstable burst fracture of first lumbar vertebra, subsequent encounter for fracture with nonunion -S32012S Unstable burst fracture of first lumbar vertebra, sequela -S32018A Other fracture of first lumbar vertebra, initial encounter for closed fracture -S32018B Other fracture of first lumbar vertebra, initial encounter for open fracture -S32018D Other fracture of first lumbar vertebra, subsequent encounter for fracture with routine healing -S32018G Other fracture of first lumbar vertebra, subsequent encounter for fracture with delayed healing -S32018K Other fracture of first lumbar vertebra, subsequent encounter for fracture with nonunion -S32018S Other fracture of first lumbar vertebra, sequela -S32019A Unspecified fracture of first lumbar vertebra, initial encounter for closed fracture -S32019B Unspecified fracture of first lumbar vertebra, initial encounter for open fracture -S32019D Unspecified fracture of first lumbar vertebra, subsequent encounter for fracture with routine healing -S32019G Unspecified fracture of first lumbar vertebra, subsequent encounter for fracture with delayed healing -S32019K Unspecified fracture of first lumbar vertebra, subsequent encounter for fracture with nonunion -S32019S Unspecified fracture of first lumbar vertebra, sequela -S32020A Wedge compression fracture of second lumbar vertebra, initial encounter for closed fracture -S32020B Wedge compression fracture of second lumbar vertebra, initial encounter for open fracture -S32020D Wedge compression fracture of second lumbar vertebra, subsequent encounter for fracture with routine healing -S32020G Wedge compression fracture of second lumbar vertebra, subsequent encounter for fracture with delayed healing -S32020K Wedge compression fracture of second lumbar vertebra, subsequent encounter for fracture with nonunion -S32020S Wedge compression fracture of second lumbar vertebra, sequela -S32021A Stable burst fracture of second lumbar vertebra, initial encounter for closed fracture -S32021B Stable burst fracture of second lumbar vertebra, initial encounter for open fracture -S32021D Stable burst fracture of second lumbar vertebra, subsequent encounter for fracture with routine healing -S32021G Stable burst fracture of second lumbar vertebra, subsequent encounter for fracture with delayed healing -S32021K Stable burst fracture of second lumbar vertebra, subsequent encounter for fracture with nonunion -S32021S Stable burst fracture of second lumbar vertebra, sequela -S32022A Unstable burst fracture of second lumbar vertebra, initial encounter for closed fracture -S32022B Unstable burst fracture of second lumbar vertebra, initial encounter for open fracture -S32022D Unstable burst fracture of second lumbar vertebra, subsequent encounter for fracture with routine healing -S32022G Unstable burst fracture of second lumbar vertebra, subsequent encounter for fracture with delayed healing -S32022K Unstable burst fracture of second lumbar vertebra, subsequent encounter for fracture with nonunion -S32022S Unstable burst fracture of second lumbar vertebra, sequela -S32028A Other fracture of second lumbar vertebra, initial encounter for closed fracture -S32028B Other fracture of second lumbar vertebra, initial encounter for open fracture -S32028D Other fracture of second lumbar vertebra, subsequent encounter for fracture with routine healing -S32028G Other fracture of second lumbar vertebra, subsequent encounter for fracture with delayed healing -S32028K Other fracture of second lumbar vertebra, subsequent encounter for fracture with nonunion -S32028S Other fracture of second lumbar vertebra, sequela -S32029A Unspecified fracture of second lumbar vertebra, initial encounter for closed fracture -S32029B Unspecified fracture of second lumbar vertebra, initial encounter for open fracture -S32029D Unspecified fracture of second lumbar vertebra, subsequent encounter for fracture with routine healing -S32029G Unspecified fracture of second lumbar vertebra, subsequent encounter for fracture with delayed healing -S32029K Unspecified fracture of second lumbar vertebra, subsequent encounter for fracture with nonunion -S32029S Unspecified fracture of second lumbar vertebra, sequela -S32030A Wedge compression fracture of third lumbar vertebra, initial encounter for closed fracture -S32030B Wedge compression fracture of third lumbar vertebra, initial encounter for open fracture -S32030D Wedge compression fracture of third lumbar vertebra, subsequent encounter for fracture with routine healing -S32030G Wedge compression fracture of third lumbar vertebra, subsequent encounter for fracture with delayed healing -S32030K Wedge compression fracture of third lumbar vertebra, subsequent encounter for fracture with nonunion -S32030S Wedge compression fracture of third lumbar vertebra, sequela -S32031A Stable burst fracture of third lumbar vertebra, initial encounter for closed fracture -S32031B Stable burst fracture of third lumbar vertebra, initial encounter for open fracture -S32031D Stable burst fracture of third lumbar vertebra, subsequent encounter for fracture with routine healing -S32031G Stable burst fracture of third lumbar vertebra, subsequent encounter for fracture with delayed healing -S32031K Stable burst fracture of third lumbar vertebra, subsequent encounter for fracture with nonunion -S32031S Stable burst fracture of third lumbar vertebra, sequela -S32032A Unstable burst fracture of third lumbar vertebra, initial encounter for closed fracture -S32032B Unstable burst fracture of third lumbar vertebra, initial encounter for open fracture -S32032D Unstable burst fracture of third lumbar vertebra, subsequent encounter for fracture with routine healing -S32032G Unstable burst fracture of third lumbar vertebra, subsequent encounter for fracture with delayed healing -S32032K Unstable burst fracture of third lumbar vertebra, subsequent encounter for fracture with nonunion -S32032S Unstable burst fracture of third lumbar vertebra, sequela -S32038A Other fracture of third lumbar vertebra, initial encounter for closed fracture -S32038B Other fracture of third lumbar vertebra, initial encounter for open fracture -S32038D Other fracture of third lumbar vertebra, subsequent encounter for fracture with routine healing -S32038G Other fracture of third lumbar vertebra, subsequent encounter for fracture with delayed healing -S32038K Other fracture of third lumbar vertebra, subsequent encounter for fracture with nonunion -S32038S Other fracture of third lumbar vertebra, sequela -S32039A Unspecified fracture of third lumbar vertebra, initial encounter for closed fracture -S32039B Unspecified fracture of third lumbar vertebra, initial encounter for open fracture -S32039D Unspecified fracture of third lumbar vertebra, subsequent encounter for fracture with routine healing -S32039G Unspecified fracture of third lumbar vertebra, subsequent encounter for fracture with delayed healing -S32039K Unspecified fracture of third lumbar vertebra, subsequent encounter for fracture with nonunion -S32039S Unspecified fracture of third lumbar vertebra, sequela -S32040A Wedge compression fracture of fourth lumbar vertebra, initial encounter for closed fracture -S32040B Wedge compression fracture of fourth lumbar vertebra, initial encounter for open fracture -S32040D Wedge compression fracture of fourth lumbar vertebra, subsequent encounter for fracture with routine healing -S32040G Wedge compression fracture of fourth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32040K Wedge compression fracture of fourth lumbar vertebra, subsequent encounter for fracture with nonunion -S32040S Wedge compression fracture of fourth lumbar vertebra, sequela -S32041A Stable burst fracture of fourth lumbar vertebra, initial encounter for closed fracture -S32041B Stable burst fracture of fourth lumbar vertebra, initial encounter for open fracture -S32041D Stable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with routine healing -S32041G Stable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32041K Stable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with nonunion -S32041S Stable burst fracture of fourth lumbar vertebra, sequela -S32042A Unstable burst fracture of fourth lumbar vertebra, initial encounter for closed fracture -S32042B Unstable burst fracture of fourth lumbar vertebra, initial encounter for open fracture -S32042D Unstable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with routine healing -S32042G Unstable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32042K Unstable burst fracture of fourth lumbar vertebra, subsequent encounter for fracture with nonunion -S32042S Unstable burst fracture of fourth lumbar vertebra, sequela -S32048A Other fracture of fourth lumbar vertebra, initial encounter for closed fracture -S32048B Other fracture of fourth lumbar vertebra, initial encounter for open fracture -S32048D Other fracture of fourth lumbar vertebra, subsequent encounter for fracture with routine healing -S32048G Other fracture of fourth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32048K Other fracture of fourth lumbar vertebra, subsequent encounter for fracture with nonunion -S32048S Other fracture of fourth lumbar vertebra, sequela -S32049A Unspecified fracture of fourth lumbar vertebra, initial encounter for closed fracture -S32049B Unspecified fracture of fourth lumbar vertebra, initial encounter for open fracture -S32049D Unspecified fracture of fourth lumbar vertebra, subsequent encounter for fracture with routine healing -S32049G Unspecified fracture of fourth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32049K Unspecified fracture of fourth lumbar vertebra, subsequent encounter for fracture with nonunion -S32049S Unspecified fracture of fourth lumbar vertebra, sequela -S32050A Wedge compression fracture of fifth lumbar vertebra, initial encounter for closed fracture -S32050B Wedge compression fracture of fifth lumbar vertebra, initial encounter for open fracture -S32050D Wedge compression fracture of fifth lumbar vertebra, subsequent encounter for fracture with routine healing -S32050G Wedge compression fracture of fifth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32050K Wedge compression fracture of fifth lumbar vertebra, subsequent encounter for fracture with nonunion -S32050S Wedge compression fracture of fifth lumbar vertebra, sequela -S32051A Stable burst fracture of fifth lumbar vertebra, initial encounter for closed fracture -S32051B Stable burst fracture of fifth lumbar vertebra, initial encounter for open fracture -S32051D Stable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with routine healing -S32051G Stable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32051K Stable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with nonunion -S32051S Stable burst fracture of fifth lumbar vertebra, sequela -S32052A Unstable burst fracture of fifth lumbar vertebra, initial encounter for closed fracture -S32052B Unstable burst fracture of fifth lumbar vertebra, initial encounter for open fracture -S32052D Unstable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with routine healing -S32052G Unstable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32052K Unstable burst fracture of fifth lumbar vertebra, subsequent encounter for fracture with nonunion -S32052S Unstable burst fracture of fifth lumbar vertebra, sequela -S32058A Other fracture of fifth lumbar vertebra, initial encounter for closed fracture -S32058B Other fracture of fifth lumbar vertebra, initial encounter for open fracture -S32058D Other fracture of fifth lumbar vertebra, subsequent encounter for fracture with routine healing -S32058G Other fracture of fifth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32058K Other fracture of fifth lumbar vertebra, subsequent encounter for fracture with nonunion -S32058S Other fracture of fifth lumbar vertebra, sequela -S32059A Unspecified fracture of fifth lumbar vertebra, initial encounter for closed fracture -S32059B Unspecified fracture of fifth lumbar vertebra, initial encounter for open fracture -S32059D Unspecified fracture of fifth lumbar vertebra, subsequent encounter for fracture with routine healing -S32059G Unspecified fracture of fifth lumbar vertebra, subsequent encounter for fracture with delayed healing -S32059K Unspecified fracture of fifth lumbar vertebra, subsequent encounter for fracture with nonunion -S32059S Unspecified fracture of fifth lumbar vertebra, sequela -S3210XA Unspecified fracture of sacrum, initial encounter for closed fracture -S3210XB Unspecified fracture of sacrum, initial encounter for open fracture -S3210XD Unspecified fracture of sacrum, subsequent encounter for fracture with routine healing -S3210XG Unspecified fracture of sacrum, subsequent encounter for fracture with delayed healing -S3210XK Unspecified fracture of sacrum, subsequent encounter for fracture with nonunion -S3210XS Unspecified fracture of sacrum, sequela -S32110A Nondisplaced Zone I fracture of sacrum, initial encounter for closed fracture -S32110B Nondisplaced Zone I fracture of sacrum, initial encounter for open fracture -S32110D Nondisplaced Zone I fracture of sacrum, subsequent encounter for fracture with routine healing -S32110G Nondisplaced Zone I fracture of sacrum, subsequent encounter for fracture with delayed healing -S32110K Nondisplaced Zone I fracture of sacrum, subsequent encounter for fracture with nonunion -S32110S Nondisplaced Zone I fracture of sacrum, sequela -S32111A Minimally displaced Zone I fracture of sacrum, initial encounter for closed fracture -S32111B Minimally displaced Zone I fracture of sacrum, initial encounter for open fracture -S32111D Minimally displaced Zone I fracture of sacrum, subsequent encounter for fracture with routine healing -S32111G Minimally displaced Zone I fracture of sacrum, subsequent encounter for fracture with delayed healing -S32111K Minimally displaced Zone I fracture of sacrum, subsequent encounter for fracture with nonunion -S32111S Minimally displaced Zone I fracture of sacrum, sequela -S32112A Severely displaced Zone I fracture of sacrum, initial encounter for closed fracture -S32112B Severely displaced Zone I fracture of sacrum, initial encounter for open fracture -S32112D Severely displaced Zone I fracture of sacrum, subsequent encounter for fracture with routine healing -S32112G Severely displaced Zone I fracture of sacrum, subsequent encounter for fracture with delayed healing -S32112K Severely displaced Zone I fracture of sacrum, subsequent encounter for fracture with nonunion -S32112S Severely displaced Zone I fracture of sacrum, sequela -S32119A Unspecified Zone I fracture of sacrum, initial encounter for closed fracture -S32119B Unspecified Zone I fracture of sacrum, initial encounter for open fracture -S32119D Unspecified Zone I fracture of sacrum, subsequent encounter for fracture with routine healing -S32119G Unspecified Zone I fracture of sacrum, subsequent encounter for fracture with delayed healing -S32119K Unspecified Zone I fracture of sacrum, subsequent encounter for fracture with nonunion -S32119S Unspecified Zone I fracture of sacrum, sequela -S32120A Nondisplaced Zone II fracture of sacrum, initial encounter for closed fracture -S32120B Nondisplaced Zone II fracture of sacrum, initial encounter for open fracture -S32120D Nondisplaced Zone II fracture of sacrum, subsequent encounter for fracture with routine healing -S32120G Nondisplaced Zone II fracture of sacrum, subsequent encounter for fracture with delayed healing -S32120K Nondisplaced Zone II fracture of sacrum, subsequent encounter for fracture with nonunion -S32120S Nondisplaced Zone II fracture of sacrum, sequela -S32121A Minimally displaced Zone II fracture of sacrum, initial encounter for closed fracture -S32121B Minimally displaced Zone II fracture of sacrum, initial encounter for open fracture -S32121D Minimally displaced Zone II fracture of sacrum, subsequent encounter for fracture with routine healing -S32121G Minimally displaced Zone II fracture of sacrum, subsequent encounter for fracture with delayed healing -S32121K Minimally displaced Zone II fracture of sacrum, subsequent encounter for fracture with nonunion -S32121S Minimally displaced Zone II fracture of sacrum, sequela -S32122A Severely displaced Zone II fracture of sacrum, initial encounter for closed fracture -S32122B Severely displaced Zone II fracture of sacrum, initial encounter for open fracture -S32122D Severely displaced Zone II fracture of sacrum, subsequent encounter for fracture with routine healing -S32122G Severely displaced Zone II fracture of sacrum, subsequent encounter for fracture with delayed healing -S32122K Severely displaced Zone II fracture of sacrum, subsequent encounter for fracture with nonunion -S32122S Severely displaced Zone II fracture of sacrum, sequela -S32129A Unspecified Zone II fracture of sacrum, initial encounter for closed fracture -S32129B Unspecified Zone II fracture of sacrum, initial encounter for open fracture -S32129D Unspecified Zone II fracture of sacrum, subsequent encounter for fracture with routine healing -S32129G Unspecified Zone II fracture of sacrum, subsequent encounter for fracture with delayed healing -S32129K Unspecified Zone II fracture of sacrum, subsequent encounter for fracture with nonunion -S32129S Unspecified Zone II fracture of sacrum, sequela -S32130A Nondisplaced Zone III fracture of sacrum, initial encounter for closed fracture -S32130B Nondisplaced Zone III fracture of sacrum, initial encounter for open fracture -S32130D Nondisplaced Zone III fracture of sacrum, subsequent encounter for fracture with routine healing -S32130G Nondisplaced Zone III fracture of sacrum, subsequent encounter for fracture with delayed healing -S32130K Nondisplaced Zone III fracture of sacrum, subsequent encounter for fracture with nonunion -S32130S Nondisplaced Zone III fracture of sacrum, sequela -S32131A Minimally displaced Zone III fracture of sacrum, initial encounter for closed fracture -S32131B Minimally displaced Zone III fracture of sacrum, initial encounter for open fracture -S32131D Minimally displaced Zone III fracture of sacrum, subsequent encounter for fracture with routine healing -S32131G Minimally displaced Zone III fracture of sacrum, subsequent encounter for fracture with delayed healing -S32131K Minimally displaced Zone III fracture of sacrum, subsequent encounter for fracture with nonunion -S32131S Minimally displaced Zone III fracture of sacrum, sequela -S32132A Severely displaced Zone III fracture of sacrum, initial encounter for closed fracture -S32132B Severely displaced Zone III fracture of sacrum, initial encounter for open fracture -S32132D Severely displaced Zone III fracture of sacrum, subsequent encounter for fracture with routine healing -S32132G Severely displaced Zone III fracture of sacrum, subsequent encounter for fracture with delayed healing -S32132K Severely displaced Zone III fracture of sacrum, subsequent encounter for fracture with nonunion -S32132S Severely displaced Zone III fracture of sacrum, sequela -S32139A Unspecified Zone III fracture of sacrum, initial encounter for closed fracture -S32139B Unspecified Zone III fracture of sacrum, initial encounter for open fracture -S32139D Unspecified Zone III fracture of sacrum, subsequent encounter for fracture with routine healing -S32139G Unspecified Zone III fracture of sacrum, subsequent encounter for fracture with delayed healing -S32139K Unspecified Zone III fracture of sacrum, subsequent encounter for fracture with nonunion -S32139S Unspecified Zone III fracture of sacrum, sequela -S3214XA Type 1 fracture of sacrum, initial encounter for closed fracture -S3214XB Type 1 fracture of sacrum, initial encounter for open fracture -S3214XD Type 1 fracture of sacrum, subsequent encounter for fracture with routine healing -S3214XG Type 1 fracture of sacrum, subsequent encounter for fracture with delayed healing -S3214XK Type 1 fracture of sacrum, subsequent encounter for fracture with nonunion -S3214XS Type 1 fracture of sacrum, sequela -S3215XA Type 2 fracture of sacrum, initial encounter for closed fracture -S3215XB Type 2 fracture of sacrum, initial encounter for open fracture -S3215XD Type 2 fracture of sacrum, subsequent encounter for fracture with routine healing -S3215XG Type 2 fracture of sacrum, subsequent encounter for fracture with delayed healing -S3215XK Type 2 fracture of sacrum, subsequent encounter for fracture with nonunion -S3215XS Type 2 fracture of sacrum, sequela -S3216XA Type 3 fracture of sacrum, initial encounter for closed fracture -S3216XB Type 3 fracture of sacrum, initial encounter for open fracture -S3216XD Type 3 fracture of sacrum, subsequent encounter for fracture with routine healing -S3216XG Type 3 fracture of sacrum, subsequent encounter for fracture with delayed healing -S3216XK Type 3 fracture of sacrum, subsequent encounter for fracture with nonunion -S3216XS Type 3 fracture of sacrum, sequela -S3217XA Type 4 fracture of sacrum, initial encounter for closed fracture -S3217XB Type 4 fracture of sacrum, initial encounter for open fracture -S3217XD Type 4 fracture of sacrum, subsequent encounter for fracture with routine healing -S3217XG Type 4 fracture of sacrum, subsequent encounter for fracture with delayed healing -S3217XK Type 4 fracture of sacrum, subsequent encounter for fracture with nonunion -S3217XS Type 4 fracture of sacrum, sequela -S3219XA Other fracture of sacrum, initial encounter for closed fracture -S3219XB Other fracture of sacrum, initial encounter for open fracture -S3219XD Other fracture of sacrum, subsequent encounter for fracture with routine healing -S3219XG Other fracture of sacrum, subsequent encounter for fracture with delayed healing -S3219XK Other fracture of sacrum, subsequent encounter for fracture with nonunion -S3219XS Other fracture of sacrum, sequela -S322XXA Fracture of coccyx, initial encounter for closed fracture -S322XXB Fracture of coccyx, initial encounter for open fracture -S322XXD Fracture of coccyx, subsequent encounter for fracture with routine healing -S322XXG Fracture of coccyx, subsequent encounter for fracture with delayed healing -S322XXK Fracture of coccyx, subsequent encounter for fracture with nonunion -S322XXS Fracture of coccyx, sequela -S32301A Unspecified fracture of right ilium, initial encounter for closed fracture -S32301B Unspecified fracture of right ilium, initial encounter for open fracture -S32301D Unspecified fracture of right ilium, subsequent encounter for fracture with routine healing -S32301G Unspecified fracture of right ilium, subsequent encounter for fracture with delayed healing -S32301K Unspecified fracture of right ilium, subsequent encounter for fracture with nonunion -S32301S Unspecified fracture of right ilium, sequela -S32302A Unspecified fracture of left ilium, initial encounter for closed fracture -S32302B Unspecified fracture of left ilium, initial encounter for open fracture -S32302D Unspecified fracture of left ilium, subsequent encounter for fracture with routine healing -S32302G Unspecified fracture of left ilium, subsequent encounter for fracture with delayed healing -S32302K Unspecified fracture of left ilium, subsequent encounter for fracture with nonunion -S32302S Unspecified fracture of left ilium, sequela -S32309A Unspecified fracture of unspecified ilium, initial encounter for closed fracture -S32309B Unspecified fracture of unspecified ilium, initial encounter for open fracture -S32309D Unspecified fracture of unspecified ilium, subsequent encounter for fracture with routine healing -S32309G Unspecified fracture of unspecified ilium, subsequent encounter for fracture with delayed healing -S32309K Unspecified fracture of unspecified ilium, subsequent encounter for fracture with nonunion -S32309S Unspecified fracture of unspecified ilium, sequela -S32311A Displaced avulsion fracture of right ilium, initial encounter for closed fracture -S32311B Displaced avulsion fracture of right ilium, initial encounter for open fracture -S32311D Displaced avulsion fracture of right ilium, subsequent encounter for fracture with routine healing -S32311G Displaced avulsion fracture of right ilium, subsequent encounter for fracture with delayed healing -S32311K Displaced avulsion fracture of right ilium, subsequent encounter for fracture with nonunion -S32311S Displaced avulsion fracture of right ilium, sequela -S32312A Displaced avulsion fracture of left ilium, initial encounter for closed fracture -S32312B Displaced avulsion fracture of left ilium, initial encounter for open fracture -S32312D Displaced avulsion fracture of left ilium, subsequent encounter for fracture with routine healing -S32312G Displaced avulsion fracture of left ilium, subsequent encounter for fracture with delayed healing -S32312K Displaced avulsion fracture of left ilium, subsequent encounter for fracture with nonunion -S32312S Displaced avulsion fracture of left ilium, sequela -S32313A Displaced avulsion fracture of unspecified ilium, initial encounter for closed fracture -S32313B Displaced avulsion fracture of unspecified ilium, initial encounter for open fracture -S32313D Displaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with routine healing -S32313G Displaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with delayed healing -S32313K Displaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with nonunion -S32313S Displaced avulsion fracture of unspecified ilium, sequela -S32314A Nondisplaced avulsion fracture of right ilium, initial encounter for closed fracture -S32314B Nondisplaced avulsion fracture of right ilium, initial encounter for open fracture -S32314D Nondisplaced avulsion fracture of right ilium, subsequent encounter for fracture with routine healing -S32314G Nondisplaced avulsion fracture of right ilium, subsequent encounter for fracture with delayed healing -S32314K Nondisplaced avulsion fracture of right ilium, subsequent encounter for fracture with nonunion -S32314S Nondisplaced avulsion fracture of right ilium, sequela -S32315A Nondisplaced avulsion fracture of left ilium, initial encounter for closed fracture -S32315B Nondisplaced avulsion fracture of left ilium, initial encounter for open fracture -S32315D Nondisplaced avulsion fracture of left ilium, subsequent encounter for fracture with routine healing -S32315G Nondisplaced avulsion fracture of left ilium, subsequent encounter for fracture with delayed healing -S32315K Nondisplaced avulsion fracture of left ilium, subsequent encounter for fracture with nonunion -S32315S Nondisplaced avulsion fracture of left ilium, sequela -S32316A Nondisplaced avulsion fracture of unspecified ilium, initial encounter for closed fracture -S32316B Nondisplaced avulsion fracture of unspecified ilium, initial encounter for open fracture -S32316D Nondisplaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with routine healing -S32316G Nondisplaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with delayed healing -S32316K Nondisplaced avulsion fracture of unspecified ilium, subsequent encounter for fracture with nonunion -S32316S Nondisplaced avulsion fracture of unspecified ilium, sequela -S32391A Other fracture of right ilium, initial encounter for closed fracture -S32391B Other fracture of right ilium, initial encounter for open fracture -S32391D Other fracture of right ilium, subsequent encounter for fracture with routine healing -S32391G Other fracture of right ilium, subsequent encounter for fracture with delayed healing -S32391K Other fracture of right ilium, subsequent encounter for fracture with nonunion -S32391S Other fracture of right ilium, sequela -S32392A Other fracture of left ilium, initial encounter for closed fracture -S32392B Other fracture of left ilium, initial encounter for open fracture -S32392D Other fracture of left ilium, subsequent encounter for fracture with routine healing -S32392G Other fracture of left ilium, subsequent encounter for fracture with delayed healing -S32392K Other fracture of left ilium, subsequent encounter for fracture with nonunion -S32392S Other fracture of left ilium, sequela -S32399A Other fracture of unspecified ilium, initial encounter for closed fracture -S32399B Other fracture of unspecified ilium, initial encounter for open fracture -S32399D Other fracture of unspecified ilium, subsequent encounter for fracture with routine healing -S32399G Other fracture of unspecified ilium, subsequent encounter for fracture with delayed healing -S32399K Other fracture of unspecified ilium, subsequent encounter for fracture with nonunion -S32399S Other fracture of unspecified ilium, sequela -S32401A Unspecified fracture of right acetabulum, initial encounter for closed fracture -S32401B Unspecified fracture of right acetabulum, initial encounter for open fracture -S32401D Unspecified fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32401G Unspecified fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32401K Unspecified fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32401S Unspecified fracture of right acetabulum, sequela -S32402A Unspecified fracture of left acetabulum, initial encounter for closed fracture -S32402B Unspecified fracture of left acetabulum, initial encounter for open fracture -S32402D Unspecified fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32402G Unspecified fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32402K Unspecified fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32402S Unspecified fracture of left acetabulum, sequela -S32409A Unspecified fracture of unspecified acetabulum, initial encounter for closed fracture -S32409B Unspecified fracture of unspecified acetabulum, initial encounter for open fracture -S32409D Unspecified fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32409G Unspecified fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32409K Unspecified fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32409S Unspecified fracture of unspecified acetabulum, sequela -S32411A Displaced fracture of anterior wall of right acetabulum, initial encounter for closed fracture -S32411B Displaced fracture of anterior wall of right acetabulum, initial encounter for open fracture -S32411D Displaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with routine healing -S32411G Displaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32411K Displaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with nonunion -S32411S Displaced fracture of anterior wall of right acetabulum, sequela -S32412A Displaced fracture of anterior wall of left acetabulum, initial encounter for closed fracture -S32412B Displaced fracture of anterior wall of left acetabulum, initial encounter for open fracture -S32412D Displaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with routine healing -S32412G Displaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32412K Displaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with nonunion -S32412S Displaced fracture of anterior wall of left acetabulum, sequela -S32413A Displaced fracture of anterior wall of unspecified acetabulum, initial encounter for closed fracture -S32413B Displaced fracture of anterior wall of unspecified acetabulum, initial encounter for open fracture -S32413D Displaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32413G Displaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32413K Displaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32413S Displaced fracture of anterior wall of unspecified acetabulum, sequela -S32414A Nondisplaced fracture of anterior wall of right acetabulum, initial encounter for closed fracture -S32414B Nondisplaced fracture of anterior wall of right acetabulum, initial encounter for open fracture -S32414D Nondisplaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with routine healing -S32414G Nondisplaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32414K Nondisplaced fracture of anterior wall of right acetabulum, subsequent encounter for fracture with nonunion -S32414S Nondisplaced fracture of anterior wall of right acetabulum, sequela -S32415A Nondisplaced fracture of anterior wall of left acetabulum, initial encounter for closed fracture -S32415B Nondisplaced fracture of anterior wall of left acetabulum, initial encounter for open fracture -S32415D Nondisplaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with routine healing -S32415G Nondisplaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32415K Nondisplaced fracture of anterior wall of left acetabulum, subsequent encounter for fracture with nonunion -S32415S Nondisplaced fracture of anterior wall of left acetabulum, sequela -S32416A Nondisplaced fracture of anterior wall of unspecified acetabulum, initial encounter for closed fracture -S32416B Nondisplaced fracture of anterior wall of unspecified acetabulum, initial encounter for open fracture -S32416D Nondisplaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32416G Nondisplaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32416K Nondisplaced fracture of anterior wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32416S Nondisplaced fracture of anterior wall of unspecified acetabulum, sequela -S32421A Displaced fracture of posterior wall of right acetabulum, initial encounter for closed fracture -S32421B Displaced fracture of posterior wall of right acetabulum, initial encounter for open fracture -S32421D Displaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with routine healing -S32421G Displaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32421K Displaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with nonunion -S32421S Displaced fracture of posterior wall of right acetabulum, sequela -S32422A Displaced fracture of posterior wall of left acetabulum, initial encounter for closed fracture -S32422B Displaced fracture of posterior wall of left acetabulum, initial encounter for open fracture -S32422D Displaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with routine healing -S32422G Displaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32422K Displaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with nonunion -S32422S Displaced fracture of posterior wall of left acetabulum, sequela -S32423A Displaced fracture of posterior wall of unspecified acetabulum, initial encounter for closed fracture -S32423B Displaced fracture of posterior wall of unspecified acetabulum, initial encounter for open fracture -S32423D Displaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32423G Displaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32423K Displaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32423S Displaced fracture of posterior wall of unspecified acetabulum, sequela -S32424A Nondisplaced fracture of posterior wall of right acetabulum, initial encounter for closed fracture -S32424B Nondisplaced fracture of posterior wall of right acetabulum, initial encounter for open fracture -S32424D Nondisplaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with routine healing -S32424G Nondisplaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32424K Nondisplaced fracture of posterior wall of right acetabulum, subsequent encounter for fracture with nonunion -S32424S Nondisplaced fracture of posterior wall of right acetabulum, sequela -S32425A Nondisplaced fracture of posterior wall of left acetabulum, initial encounter for closed fracture -S32425B Nondisplaced fracture of posterior wall of left acetabulum, initial encounter for open fracture -S32425D Nondisplaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with routine healing -S32425G Nondisplaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32425K Nondisplaced fracture of posterior wall of left acetabulum, subsequent encounter for fracture with nonunion -S32425S Nondisplaced fracture of posterior wall of left acetabulum, sequela -S32426A Nondisplaced fracture of posterior wall of unspecified acetabulum, initial encounter for closed fracture -S32426B Nondisplaced fracture of posterior wall of unspecified acetabulum, initial encounter for open fracture -S32426D Nondisplaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32426G Nondisplaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32426K Nondisplaced fracture of posterior wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32426S Nondisplaced fracture of posterior wall of unspecified acetabulum, sequela -S32431A Displaced fracture of anterior column [iliopubic] of right acetabulum, initial encounter for closed fracture -S32431B Displaced fracture of anterior column [iliopubic] of right acetabulum, initial encounter for open fracture -S32431D Displaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with routine healing -S32431G Displaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with delayed healing -S32431K Displaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with nonunion -S32431S Displaced fracture of anterior column [iliopubic] of right acetabulum, sequela -S32432A Displaced fracture of anterior column [iliopubic] of left acetabulum, initial encounter for closed fracture -S32432B Displaced fracture of anterior column [iliopubic] of left acetabulum, initial encounter for open fracture -S32432D Displaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with routine healing -S32432G Displaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with delayed healing -S32432K Displaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with nonunion -S32432S Displaced fracture of anterior column [iliopubic] of left acetabulum, sequela -S32433A Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, initial encounter for closed fracture -S32433B Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, initial encounter for open fracture -S32433D Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32433G Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32433K Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32433S Displaced fracture of anterior column [iliopubic] of unspecified acetabulum, sequela -S32434A Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, initial encounter for closed fracture -S32434B Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, initial encounter for open fracture -S32434D Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with routine healing -S32434G Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with delayed healing -S32434K Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, subsequent encounter for fracture with nonunion -S32434S Nondisplaced fracture of anterior column [iliopubic] of right acetabulum, sequela -S32435A Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, initial encounter for closed fracture -S32435B Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, initial encounter for open fracture -S32435D Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with routine healing -S32435G Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with delayed healing -S32435K Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, subsequent encounter for fracture with nonunion -S32435S Nondisplaced fracture of anterior column [iliopubic] of left acetabulum, sequela -S32436A Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, initial encounter for closed fracture -S32436B Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, initial encounter for open fracture -S32436D Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32436G Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32436K Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32436S Nondisplaced fracture of anterior column [iliopubic] of unspecified acetabulum, sequela -S32441A Displaced fracture of posterior column [ilioischial] of right acetabulum, initial encounter for closed fracture -S32441B Displaced fracture of posterior column [ilioischial] of right acetabulum, initial encounter for open fracture -S32441D Displaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with routine healing -S32441G Displaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with delayed healing -S32441K Displaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with nonunion -S32441S Displaced fracture of posterior column [ilioischial] of right acetabulum, sequela -S32442A Displaced fracture of posterior column [ilioischial] of left acetabulum, initial encounter for closed fracture -S32442B Displaced fracture of posterior column [ilioischial] of left acetabulum, initial encounter for open fracture -S32442D Displaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with routine healing -S32442G Displaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with delayed healing -S32442K Displaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with nonunion -S32442S Displaced fracture of posterior column [ilioischial] of left acetabulum, sequela -S32443A Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, initial encounter for closed fracture -S32443B Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, initial encounter for open fracture -S32443D Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32443G Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32443K Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32443S Displaced fracture of posterior column [ilioischial] of unspecified acetabulum, sequela -S32444A Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, initial encounter for closed fracture -S32444B Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, initial encounter for open fracture -S32444D Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with routine healing -S32444G Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with delayed healing -S32444K Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, subsequent encounter for fracture with nonunion -S32444S Nondisplaced fracture of posterior column [ilioischial] of right acetabulum, sequela -S32445A Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, initial encounter for closed fracture -S32445B Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, initial encounter for open fracture -S32445D Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with routine healing -S32445G Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with delayed healing -S32445K Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, subsequent encounter for fracture with nonunion -S32445S Nondisplaced fracture of posterior column [ilioischial] of left acetabulum, sequela -S32446A Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, initial encounter for closed fracture -S32446B Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, initial encounter for open fracture -S32446D Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32446G Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32446K Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32446S Nondisplaced fracture of posterior column [ilioischial] of unspecified acetabulum, sequela -S32451A Displaced transverse fracture of right acetabulum, initial encounter for closed fracture -S32451B Displaced transverse fracture of right acetabulum, initial encounter for open fracture -S32451D Displaced transverse fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32451G Displaced transverse fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32451K Displaced transverse fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32451S Displaced transverse fracture of right acetabulum, sequela -S32452A Displaced transverse fracture of left acetabulum, initial encounter for closed fracture -S32452B Displaced transverse fracture of left acetabulum, initial encounter for open fracture -S32452D Displaced transverse fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32452G Displaced transverse fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32452K Displaced transverse fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32452S Displaced transverse fracture of left acetabulum, sequela -S32453A Displaced transverse fracture of unspecified acetabulum, initial encounter for closed fracture -S32453B Displaced transverse fracture of unspecified acetabulum, initial encounter for open fracture -S32453D Displaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32453G Displaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32453K Displaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32453S Displaced transverse fracture of unspecified acetabulum, sequela -S32454A Nondisplaced transverse fracture of right acetabulum, initial encounter for closed fracture -S32454B Nondisplaced transverse fracture of right acetabulum, initial encounter for open fracture -S32454D Nondisplaced transverse fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32454G Nondisplaced transverse fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32454K Nondisplaced transverse fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32454S Nondisplaced transverse fracture of right acetabulum, sequela -S32455A Nondisplaced transverse fracture of left acetabulum, initial encounter for closed fracture -S32455B Nondisplaced transverse fracture of left acetabulum, initial encounter for open fracture -S32455D Nondisplaced transverse fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32455G Nondisplaced transverse fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32455K Nondisplaced transverse fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32455S Nondisplaced transverse fracture of left acetabulum, sequela -S32456A Nondisplaced transverse fracture of unspecified acetabulum, initial encounter for closed fracture -S32456B Nondisplaced transverse fracture of unspecified acetabulum, initial encounter for open fracture -S32456D Nondisplaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32456G Nondisplaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32456K Nondisplaced transverse fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32456S Nondisplaced transverse fracture of unspecified acetabulum, sequela -S32461A Displaced associated transverse-posterior fracture of right acetabulum, initial encounter for closed fracture -S32461B Displaced associated transverse-posterior fracture of right acetabulum, initial encounter for open fracture -S32461D Displaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32461G Displaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32461K Displaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32461S Displaced associated transverse-posterior fracture of right acetabulum, sequela -S32462A Displaced associated transverse-posterior fracture of left acetabulum, initial encounter for closed fracture -S32462B Displaced associated transverse-posterior fracture of left acetabulum, initial encounter for open fracture -S32462D Displaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32462G Displaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32462K Displaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32462S Displaced associated transverse-posterior fracture of left acetabulum, sequela -S32463A Displaced associated transverse-posterior fracture of unspecified acetabulum, initial encounter for closed fracture -S32463B Displaced associated transverse-posterior fracture of unspecified acetabulum, initial encounter for open fracture -S32463D Displaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32463G Displaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32463K Displaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32463S Displaced associated transverse-posterior fracture of unspecified acetabulum, sequela -S32464A Nondisplaced associated transverse-posterior fracture of right acetabulum, initial encounter for closed fracture -S32464B Nondisplaced associated transverse-posterior fracture of right acetabulum, initial encounter for open fracture -S32464D Nondisplaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32464G Nondisplaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32464K Nondisplaced associated transverse-posterior fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32464S Nondisplaced associated transverse-posterior fracture of right acetabulum, sequela -S32465A Nondisplaced associated transverse-posterior fracture of left acetabulum, initial encounter for closed fracture -S32465B Nondisplaced associated transverse-posterior fracture of left acetabulum, initial encounter for open fracture -S32465D Nondisplaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32465G Nondisplaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32465K Nondisplaced associated transverse-posterior fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32465S Nondisplaced associated transverse-posterior fracture of left acetabulum, sequela -S32466A Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, initial encounter for closed fracture -S32466B Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, initial encounter for open fracture -S32466D Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32466G Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32466K Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32466S Nondisplaced associated transverse-posterior fracture of unspecified acetabulum, sequela -S32471A Displaced fracture of medial wall of right acetabulum, initial encounter for closed fracture -S32471B Displaced fracture of medial wall of right acetabulum, initial encounter for open fracture -S32471D Displaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with routine healing -S32471G Displaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32471K Displaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with nonunion -S32471S Displaced fracture of medial wall of right acetabulum, sequela -S32472A Displaced fracture of medial wall of left acetabulum, initial encounter for closed fracture -S32472B Displaced fracture of medial wall of left acetabulum, initial encounter for open fracture -S32472D Displaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with routine healing -S32472G Displaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32472K Displaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with nonunion -S32472S Displaced fracture of medial wall of left acetabulum, sequela -S32473A Displaced fracture of medial wall of unspecified acetabulum, initial encounter for closed fracture -S32473B Displaced fracture of medial wall of unspecified acetabulum, initial encounter for open fracture -S32473D Displaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32473G Displaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32473K Displaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32473S Displaced fracture of medial wall of unspecified acetabulum, sequela -S32474A Nondisplaced fracture of medial wall of right acetabulum, initial encounter for closed fracture -S32474B Nondisplaced fracture of medial wall of right acetabulum, initial encounter for open fracture -S32474D Nondisplaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with routine healing -S32474G Nondisplaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with delayed healing -S32474K Nondisplaced fracture of medial wall of right acetabulum, subsequent encounter for fracture with nonunion -S32474S Nondisplaced fracture of medial wall of right acetabulum, sequela -S32475A Nondisplaced fracture of medial wall of left acetabulum, initial encounter for closed fracture -S32475B Nondisplaced fracture of medial wall of left acetabulum, initial encounter for open fracture -S32475D Nondisplaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with routine healing -S32475G Nondisplaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with delayed healing -S32475K Nondisplaced fracture of medial wall of left acetabulum, subsequent encounter for fracture with nonunion -S32475S Nondisplaced fracture of medial wall of left acetabulum, sequela -S32476A Nondisplaced fracture of medial wall of unspecified acetabulum, initial encounter for closed fracture -S32476B Nondisplaced fracture of medial wall of unspecified acetabulum, initial encounter for open fracture -S32476D Nondisplaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32476G Nondisplaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32476K Nondisplaced fracture of medial wall of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32476S Nondisplaced fracture of medial wall of unspecified acetabulum, sequela -S32481A Displaced dome fracture of right acetabulum, initial encounter for closed fracture -S32481B Displaced dome fracture of right acetabulum, initial encounter for open fracture -S32481D Displaced dome fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32481G Displaced dome fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32481K Displaced dome fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32481S Displaced dome fracture of right acetabulum, sequela -S32482A Displaced dome fracture of left acetabulum, initial encounter for closed fracture -S32482B Displaced dome fracture of left acetabulum, initial encounter for open fracture -S32482D Displaced dome fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32482G Displaced dome fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32482K Displaced dome fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32482S Displaced dome fracture of left acetabulum, sequela -S32483A Displaced dome fracture of unspecified acetabulum, initial encounter for closed fracture -S32483B Displaced dome fracture of unspecified acetabulum, initial encounter for open fracture -S32483D Displaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32483G Displaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32483K Displaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32483S Displaced dome fracture of unspecified acetabulum, sequela -S32484A Nondisplaced dome fracture of right acetabulum, initial encounter for closed fracture -S32484B Nondisplaced dome fracture of right acetabulum, initial encounter for open fracture -S32484D Nondisplaced dome fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32484G Nondisplaced dome fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32484K Nondisplaced dome fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32484S Nondisplaced dome fracture of right acetabulum, sequela -S32485A Nondisplaced dome fracture of left acetabulum, initial encounter for closed fracture -S32485B Nondisplaced dome fracture of left acetabulum, initial encounter for open fracture -S32485D Nondisplaced dome fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32485G Nondisplaced dome fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32485K Nondisplaced dome fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32485S Nondisplaced dome fracture of left acetabulum, sequela -S32486A Nondisplaced dome fracture of unspecified acetabulum, initial encounter for closed fracture -S32486B Nondisplaced dome fracture of unspecified acetabulum, initial encounter for open fracture -S32486D Nondisplaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32486G Nondisplaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32486K Nondisplaced dome fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32486S Nondisplaced dome fracture of unspecified acetabulum, sequela -S32491A Other specified fracture of right acetabulum, initial encounter for closed fracture -S32491B Other specified fracture of right acetabulum, initial encounter for open fracture -S32491D Other specified fracture of right acetabulum, subsequent encounter for fracture with routine healing -S32491G Other specified fracture of right acetabulum, subsequent encounter for fracture with delayed healing -S32491K Other specified fracture of right acetabulum, subsequent encounter for fracture with nonunion -S32491S Other specified fracture of right acetabulum, sequela -S32492A Other specified fracture of left acetabulum, initial encounter for closed fracture -S32492B Other specified fracture of left acetabulum, initial encounter for open fracture -S32492D Other specified fracture of left acetabulum, subsequent encounter for fracture with routine healing -S32492G Other specified fracture of left acetabulum, subsequent encounter for fracture with delayed healing -S32492K Other specified fracture of left acetabulum, subsequent encounter for fracture with nonunion -S32492S Other specified fracture of left acetabulum, sequela -S32499A Other specified fracture of unspecified acetabulum, initial encounter for closed fracture -S32499B Other specified fracture of unspecified acetabulum, initial encounter for open fracture -S32499D Other specified fracture of unspecified acetabulum, subsequent encounter for fracture with routine healing -S32499G Other specified fracture of unspecified acetabulum, subsequent encounter for fracture with delayed healing -S32499K Other specified fracture of unspecified acetabulum, subsequent encounter for fracture with nonunion -S32499S Other specified fracture of unspecified acetabulum, sequela -S32501A Unspecified fracture of right pubis, initial encounter for closed fracture -S32501B Unspecified fracture of right pubis, initial encounter for open fracture -S32501D Unspecified fracture of right pubis, subsequent encounter for fracture with routine healing -S32501G Unspecified fracture of right pubis, subsequent encounter for fracture with delayed healing -S32501K Unspecified fracture of right pubis, subsequent encounter for fracture with nonunion -S32501S Unspecified fracture of right pubis, sequela -S32502A Unspecified fracture of left pubis, initial encounter for closed fracture -S32502B Unspecified fracture of left pubis, initial encounter for open fracture -S32502D Unspecified fracture of left pubis, subsequent encounter for fracture with routine healing -S32502G Unspecified fracture of left pubis, subsequent encounter for fracture with delayed healing -S32502K Unspecified fracture of left pubis, subsequent encounter for fracture with nonunion -S32502S Unspecified fracture of left pubis, sequela -S32509A Unspecified fracture of unspecified pubis, initial encounter for closed fracture -S32509B Unspecified fracture of unspecified pubis, initial encounter for open fracture -S32509D Unspecified fracture of unspecified pubis, subsequent encounter for fracture with routine healing -S32509G Unspecified fracture of unspecified pubis, subsequent encounter for fracture with delayed healing -S32509K Unspecified fracture of unspecified pubis, subsequent encounter for fracture with nonunion -S32509S Unspecified fracture of unspecified pubis, sequela -S32511A Fracture of superior rim of right pubis, initial encounter for closed fracture -S32511B Fracture of superior rim of right pubis, initial encounter for open fracture -S32511D Fracture of superior rim of right pubis, subsequent encounter for fracture with routine healing -S32511G Fracture of superior rim of right pubis, subsequent encounter for fracture with delayed healing -S32511K Fracture of superior rim of right pubis, subsequent encounter for fracture with nonunion -S32511S Fracture of superior rim of right pubis, sequela -S32512A Fracture of superior rim of left pubis, initial encounter for closed fracture -S32512B Fracture of superior rim of left pubis, initial encounter for open fracture -S32512D Fracture of superior rim of left pubis, subsequent encounter for fracture with routine healing -S32512G Fracture of superior rim of left pubis, subsequent encounter for fracture with delayed healing -S32512K Fracture of superior rim of left pubis, subsequent encounter for fracture with nonunion -S32512S Fracture of superior rim of left pubis, sequela -S32519A Fracture of superior rim of unspecified pubis, initial encounter for closed fracture -S32519B Fracture of superior rim of unspecified pubis, initial encounter for open fracture -S32519D Fracture of superior rim of unspecified pubis, subsequent encounter for fracture with routine healing -S32519G Fracture of superior rim of unspecified pubis, subsequent encounter for fracture with delayed healing -S32519K Fracture of superior rim of unspecified pubis, subsequent encounter for fracture with nonunion -S32519S Fracture of superior rim of unspecified pubis, sequela -S32591A Other specified fracture of right pubis, initial encounter for closed fracture -S32591B Other specified fracture of right pubis, initial encounter for open fracture -S32591D Other specified fracture of right pubis, subsequent encounter for fracture with routine healing -S32591G Other specified fracture of right pubis, subsequent encounter for fracture with delayed healing -S32591K Other specified fracture of right pubis, subsequent encounter for fracture with nonunion -S32591S Other specified fracture of right pubis, sequela -S32592A Other specified fracture of left pubis, initial encounter for closed fracture -S32592B Other specified fracture of left pubis, initial encounter for open fracture -S32592D Other specified fracture of left pubis, subsequent encounter for fracture with routine healing -S32592G Other specified fracture of left pubis, subsequent encounter for fracture with delayed healing -S32592K Other specified fracture of left pubis, subsequent encounter for fracture with nonunion -S32592S Other specified fracture of left pubis, sequela -S32599A Other specified fracture of unspecified pubis, initial encounter for closed fracture -S32599B Other specified fracture of unspecified pubis, initial encounter for open fracture -S32599D Other specified fracture of unspecified pubis, subsequent encounter for fracture with routine healing -S32599G Other specified fracture of unspecified pubis, subsequent encounter for fracture with delayed healing -S32599K Other specified fracture of unspecified pubis, subsequent encounter for fracture with nonunion -S32599S Other specified fracture of unspecified pubis, sequela -S32601A Unspecified fracture of right ischium, initial encounter for closed fracture -S32601B Unspecified fracture of right ischium, initial encounter for open fracture -S32601D Unspecified fracture of right ischium, subsequent encounter for fracture with routine healing -S32601G Unspecified fracture of right ischium, subsequent encounter for fracture with delayed healing -S32601K Unspecified fracture of right ischium, subsequent encounter for fracture with nonunion -S32601S Unspecified fracture of right ischium, sequela -S32602A Unspecified fracture of left ischium, initial encounter for closed fracture -S32602B Unspecified fracture of left ischium, initial encounter for open fracture -S32602D Unspecified fracture of left ischium, subsequent encounter for fracture with routine healing -S32602G Unspecified fracture of left ischium, subsequent encounter for fracture with delayed healing -S32602K Unspecified fracture of left ischium, subsequent encounter for fracture with nonunion -S32602S Unspecified fracture of left ischium, sequela -S32609A Unspecified fracture of unspecified ischium, initial encounter for closed fracture -S32609B Unspecified fracture of unspecified ischium, initial encounter for open fracture -S32609D Unspecified fracture of unspecified ischium, subsequent encounter for fracture with routine healing -S32609G Unspecified fracture of unspecified ischium, subsequent encounter for fracture with delayed healing -S32609K Unspecified fracture of unspecified ischium, subsequent encounter for fracture with nonunion -S32609S Unspecified fracture of unspecified ischium, sequela -S32611A Displaced avulsion fracture of right ischium, initial encounter for closed fracture -S32611B Displaced avulsion fracture of right ischium, initial encounter for open fracture -S32611D Displaced avulsion fracture of right ischium, subsequent encounter for fracture with routine healing -S32611G Displaced avulsion fracture of right ischium, subsequent encounter for fracture with delayed healing -S32611K Displaced avulsion fracture of right ischium, subsequent encounter for fracture with nonunion -S32611S Displaced avulsion fracture of right ischium, sequela -S32612A Displaced avulsion fracture of left ischium, initial encounter for closed fracture -S32612B Displaced avulsion fracture of left ischium, initial encounter for open fracture -S32612D Displaced avulsion fracture of left ischium, subsequent encounter for fracture with routine healing -S32612G Displaced avulsion fracture of left ischium, subsequent encounter for fracture with delayed healing -S32612K Displaced avulsion fracture of left ischium, subsequent encounter for fracture with nonunion -S32612S Displaced avulsion fracture of left ischium, sequela -S32613A Displaced avulsion fracture of unspecified ischium, initial encounter for closed fracture -S32613B Displaced avulsion fracture of unspecified ischium, initial encounter for open fracture -S32613D Displaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with routine healing -S32613G Displaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with delayed healing -S32613K Displaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with nonunion -S32613S Displaced avulsion fracture of unspecified ischium, sequela -S32614A Nondisplaced avulsion fracture of right ischium, initial encounter for closed fracture -S32614B Nondisplaced avulsion fracture of right ischium, initial encounter for open fracture -S32614D Nondisplaced avulsion fracture of right ischium, subsequent encounter for fracture with routine healing -S32614G Nondisplaced avulsion fracture of right ischium, subsequent encounter for fracture with delayed healing -S32614K Nondisplaced avulsion fracture of right ischium, subsequent encounter for fracture with nonunion -S32614S Nondisplaced avulsion fracture of right ischium, sequela -S32615A Nondisplaced avulsion fracture of left ischium, initial encounter for closed fracture -S32615B Nondisplaced avulsion fracture of left ischium, initial encounter for open fracture -S32615D Nondisplaced avulsion fracture of left ischium, subsequent encounter for fracture with routine healing -S32615G Nondisplaced avulsion fracture of left ischium, subsequent encounter for fracture with delayed healing -S32615K Nondisplaced avulsion fracture of left ischium, subsequent encounter for fracture with nonunion -S32615S Nondisplaced avulsion fracture of left ischium, sequela -S32616A Nondisplaced avulsion fracture of unspecified ischium, initial encounter for closed fracture -S32616B Nondisplaced avulsion fracture of unspecified ischium, initial encounter for open fracture -S32616D Nondisplaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with routine healing -S32616G Nondisplaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with delayed healing -S32616K Nondisplaced avulsion fracture of unspecified ischium, subsequent encounter for fracture with nonunion -S32616S Nondisplaced avulsion fracture of unspecified ischium, sequela -S32691A Other specified fracture of right ischium, initial encounter for closed fracture -S32691B Other specified fracture of right ischium, initial encounter for open fracture -S32691D Other specified fracture of right ischium, subsequent encounter for fracture with routine healing -S32691G Other specified fracture of right ischium, subsequent encounter for fracture with delayed healing -S32691K Other specified fracture of right ischium, subsequent encounter for fracture with nonunion -S32691S Other specified fracture of right ischium, sequela -S32692A Other specified fracture of left ischium, initial encounter for closed fracture -S32692B Other specified fracture of left ischium, initial encounter for open fracture -S32692D Other specified fracture of left ischium, subsequent encounter for fracture with routine healing -S32692G Other specified fracture of left ischium, subsequent encounter for fracture with delayed healing -S32692K Other specified fracture of left ischium, subsequent encounter for fracture with nonunion -S32692S Other specified fracture of left ischium, sequela -S32699A Other specified fracture of unspecified ischium, initial encounter for closed fracture -S32699B Other specified fracture of unspecified ischium, initial encounter for open fracture -S32699D Other specified fracture of unspecified ischium, subsequent encounter for fracture with routine healing -S32699G Other specified fracture of unspecified ischium, subsequent encounter for fracture with delayed healing -S32699K Other specified fracture of unspecified ischium, subsequent encounter for fracture with nonunion -S32699S Other specified fracture of unspecified ischium, sequela -S32810A Multiple fractures of pelvis with stable disruption of pelvic ring, initial encounter for closed fracture -S32810B Multiple fractures of pelvis with stable disruption of pelvic ring, initial encounter for open fracture -S32810D Multiple fractures of pelvis with stable disruption of pelvic ring, subsequent encounter for fracture with routine healing -S32810G Multiple fractures of pelvis with stable disruption of pelvic ring, subsequent encounter for fracture with delayed healing -S32810K Multiple fractures of pelvis with stable disruption of pelvic ring, subsequent encounter for fracture with nonunion -S32810S Multiple fractures of pelvis with stable disruption of pelvic ring, sequela -S32811A Multiple fractures of pelvis with unstable disruption of pelvic ring, initial encounter for closed fracture -S32811B Multiple fractures of pelvis with unstable disruption of pelvic ring, initial encounter for open fracture -S32811D Multiple fractures of pelvis with unstable disruption of pelvic ring, subsequent encounter for fracture with routine healing -S32811G Multiple fractures of pelvis with unstable disruption of pelvic ring, subsequent encounter for fracture with delayed healing -S32811K Multiple fractures of pelvis with unstable disruption of pelvic ring, subsequent encounter for fracture with nonunion -S32811S Multiple fractures of pelvis with unstable disruption of pelvic ring, sequela -S3282XA Multiple fractures of pelvis without disruption of pelvic ring, initial encounter for closed fracture -S3282XB Multiple fractures of pelvis without disruption of pelvic ring, initial encounter for open fracture -S3282XD Multiple fractures of pelvis without disruption of pelvic ring, subsequent encounter for fracture with routine healing -S3282XG Multiple fractures of pelvis without disruption of pelvic ring, subsequent encounter for fracture with delayed healing -S3282XK Multiple fractures of pelvis without disruption of pelvic ring, subsequent encounter for fracture with nonunion -S3282XS Multiple fractures of pelvis without disruption of pelvic ring, sequela -S3289XA Fracture of other parts of pelvis, initial encounter for closed fracture -S3289XB Fracture of other parts of pelvis, initial encounter for open fracture -S3289XD Fracture of other parts of pelvis, subsequent encounter for fracture with routine healing -S3289XG Fracture of other parts of pelvis, subsequent encounter for fracture with delayed healing -S3289XK Fracture of other parts of pelvis, subsequent encounter for fracture with nonunion -S3289XS Fracture of other parts of pelvis, sequela -S329XXA Fracture of unspecified parts of lumbosacral spine and pelvis, initial encounter for closed fracture -S329XXB Fracture of unspecified parts of lumbosacral spine and pelvis, initial encounter for open fracture -S329XXD Fracture of unspecified parts of lumbosacral spine and pelvis, subsequent encounter for fracture with routine healing -S329XXG Fracture of unspecified parts of lumbosacral spine and pelvis, subsequent encounter for fracture with delayed healing -S329XXK Fracture of unspecified parts of lumbosacral spine and pelvis, subsequent encounter for fracture with nonunion -S329XXS Fracture of unspecified parts of lumbosacral spine and pelvis, sequela -S330XXA Traumatic rupture of lumbar intervertebral disc, initial encounter -S330XXD Traumatic rupture of lumbar intervertebral disc, subsequent encounter -S330XXS Traumatic rupture of lumbar intervertebral disc, sequela -S33100A Subluxation of unspecified lumbar vertebra, initial encounter -S33100D Subluxation of unspecified lumbar vertebra, subsequent encounter -S33100S Subluxation of unspecified lumbar vertebra, sequela -S33101A Dislocation of unspecified lumbar vertebra, initial encounter -S33101D Dislocation of unspecified lumbar vertebra, subsequent encounter -S33101S Dislocation of unspecified lumbar vertebra, sequela -S33110A Subluxation of L1/L2 lumbar vertebra, initial encounter -S33110D Subluxation of L1/L2 lumbar vertebra, subsequent encounter -S33110S Subluxation of L1/L2 lumbar vertebra, sequela -S33111A Dislocation of L1/L2 lumbar vertebra, initial encounter -S33111D Dislocation of L1/L2 lumbar vertebra, subsequent encounter -S33111S Dislocation of L1/L2 lumbar vertebra, sequela -S33120A Subluxation of L2/L3 lumbar vertebra, initial encounter -S33120D Subluxation of L2/L3 lumbar vertebra, subsequent encounter -S33120S Subluxation of L2/L3 lumbar vertebra, sequela -S33121A Dislocation of L2/L3 lumbar vertebra, initial encounter -S33121D Dislocation of L2/L3 lumbar vertebra, subsequent encounter -S33121S Dislocation of L2/L3 lumbar vertebra, sequela -S33130A Subluxation of L3/L4 lumbar vertebra, initial encounter -S33130D Subluxation of L3/L4 lumbar vertebra, subsequent encounter -S33130S Subluxation of L3/L4 lumbar vertebra, sequela -S33131A Dislocation of L3/L4 lumbar vertebra, initial encounter -S33131D Dislocation of L3/L4 lumbar vertebra, subsequent encounter -S33131S Dislocation of L3/L4 lumbar vertebra, sequela -S33140A Subluxation of L4/L5 lumbar vertebra, initial encounter -S33140D Subluxation of L4/L5 lumbar vertebra, subsequent encounter -S33140S Subluxation of L4/L5 lumbar vertebra, sequela -S33141A Dislocation of L4/L5 lumbar vertebra, initial encounter -S33141D Dislocation of L4/L5 lumbar vertebra, subsequent encounter -S33141S Dislocation of L4/L5 lumbar vertebra, sequela -S332XXA Dislocation of sacroiliac and sacrococcygeal joint, initial encounter -S332XXD Dislocation of sacroiliac and sacrococcygeal joint, subsequent encounter -S332XXS Dislocation of sacroiliac and sacrococcygeal joint, sequela -S3330XA Dislocation of unspecified parts of lumbar spine and pelvis, initial encounter -S3330XD Dislocation of unspecified parts of lumbar spine and pelvis, subsequent encounter -S3330XS Dislocation of unspecified parts of lumbar spine and pelvis, sequela -S3339XA Dislocation of other parts of lumbar spine and pelvis, initial encounter -S3339XD Dislocation of other parts of lumbar spine and pelvis, subsequent encounter -S3339XS Dislocation of other parts of lumbar spine and pelvis, sequela -S334XXA Traumatic rupture of symphysis pubis, initial encounter -S334XXD Traumatic rupture of symphysis pubis, subsequent encounter -S334XXS Traumatic rupture of symphysis pubis, sequela -S335XXA Sprain of ligaments of lumbar spine, initial encounter -S335XXD Sprain of ligaments of lumbar spine, subsequent encounter -S335XXS Sprain of ligaments of lumbar spine, sequela -S336XXA Sprain of sacroiliac joint, initial encounter -S336XXD Sprain of sacroiliac joint, subsequent encounter -S336XXS Sprain of sacroiliac joint, sequela -S338XXA Sprain of other parts of lumbar spine and pelvis, initial encounter -S338XXD Sprain of other parts of lumbar spine and pelvis, subsequent encounter -S338XXS Sprain of other parts of lumbar spine and pelvis, sequela -S339XXA Sprain of unspecified parts of lumbar spine and pelvis, initial encounter -S339XXD Sprain of unspecified parts of lumbar spine and pelvis, subsequent encounter -S339XXS Sprain of unspecified parts of lumbar spine and pelvis, sequela -S3401XA Concussion and edema of lumbar spinal cord, initial encounter -S3401XD Concussion and edema of lumbar spinal cord, subsequent encounter -S3401XS Concussion and edema of lumbar spinal cord, sequela -S3402XA Concussion and edema of sacral spinal cord, initial encounter -S3402XD Concussion and edema of sacral spinal cord, subsequent encounter -S3402XS Concussion and edema of sacral spinal cord, sequela -S34101A Unspecified injury to L1 level of lumbar spinal cord, initial encounter -S34101D Unspecified injury to L1 level of lumbar spinal cord, subsequent encounter -S34101S Unspecified injury to L1 level of lumbar spinal cord, sequela -S34102A Unspecified injury to L2 level of lumbar spinal cord, initial encounter -S34102D Unspecified injury to L2 level of lumbar spinal cord, subsequent encounter -S34102S Unspecified injury to L2 level of lumbar spinal cord, sequela -S34103A Unspecified injury to L3 level of lumbar spinal cord, initial encounter -S34103D Unspecified injury to L3 level of lumbar spinal cord, subsequent encounter -S34103S Unspecified injury to L3 level of lumbar spinal cord, sequela -S34104A Unspecified injury to L4 level of lumbar spinal cord, initial encounter -S34104D Unspecified injury to L4 level of lumbar spinal cord, subsequent encounter -S34104S Unspecified injury to L4 level of lumbar spinal cord, sequela -S34105A Unspecified injury to L5 level of lumbar spinal cord, initial encounter -S34105D Unspecified injury to L5 level of lumbar spinal cord, subsequent encounter -S34105S Unspecified injury to L5 level of lumbar spinal cord, sequela -S34109A Unspecified injury to unspecified level of lumbar spinal cord, initial encounter -S34109D Unspecified injury to unspecified level of lumbar spinal cord, subsequent encounter -S34109S Unspecified injury to unspecified level of lumbar spinal cord, sequela -S34111A Complete lesion of L1 level of lumbar spinal cord, initial encounter -S34111D Complete lesion of L1 level of lumbar spinal cord, subsequent encounter -S34111S Complete lesion of L1 level of lumbar spinal cord, sequela -S34112A Complete lesion of L2 level of lumbar spinal cord, initial encounter -S34112D Complete lesion of L2 level of lumbar spinal cord, subsequent encounter -S34112S Complete lesion of L2 level of lumbar spinal cord, sequela -S34113A Complete lesion of L3 level of lumbar spinal cord, initial encounter -S34113D Complete lesion of L3 level of lumbar spinal cord, subsequent encounter -S34113S Complete lesion of L3 level of lumbar spinal cord, sequela -S34114A Complete lesion of L4 level of lumbar spinal cord, initial encounter -S34114D Complete lesion of L4 level of lumbar spinal cord, subsequent encounter -S34114S Complete lesion of L4 level of lumbar spinal cord, sequela -S34115A Complete lesion of L5 level of lumbar spinal cord, initial encounter -S34115D Complete lesion of L5 level of lumbar spinal cord, subsequent encounter -S34115S Complete lesion of L5 level of lumbar spinal cord, sequela -S34119A Complete lesion of unspecified level of lumbar spinal cord, initial encounter -S34119D Complete lesion of unspecified level of lumbar spinal cord, subsequent encounter -S34119S Complete lesion of unspecified level of lumbar spinal cord, sequela -S34121A Incomplete lesion of L1 level of lumbar spinal cord, initial encounter -S34121D Incomplete lesion of L1 level of lumbar spinal cord, subsequent encounter -S34121S Incomplete lesion of L1 level of lumbar spinal cord, sequela -S34122A Incomplete lesion of L2 level of lumbar spinal cord, initial encounter -S34122D Incomplete lesion of L2 level of lumbar spinal cord, subsequent encounter -S34122S Incomplete lesion of L2 level of lumbar spinal cord, sequela -S34123A Incomplete lesion of L3 level of lumbar spinal cord, initial encounter -S34123D Incomplete lesion of L3 level of lumbar spinal cord, subsequent encounter -S34123S Incomplete lesion of L3 level of lumbar spinal cord, sequela -S34124A Incomplete lesion of L4 level of lumbar spinal cord, initial encounter -S34124D Incomplete lesion of L4 level of lumbar spinal cord, subsequent encounter -S34124S Incomplete lesion of L4 level of lumbar spinal cord, sequela -S34125A Incomplete lesion of L5 level of lumbar spinal cord, initial encounter -S34125D Incomplete lesion of L5 level of lumbar spinal cord, subsequent encounter -S34125S Incomplete lesion of L5 level of lumbar spinal cord, sequela -S34129A Incomplete lesion of unspecified level of lumbar spinal cord, initial encounter -S34129D Incomplete lesion of unspecified level of lumbar spinal cord, subsequent encounter -S34129S Incomplete lesion of unspecified level of lumbar spinal cord, sequela -S34131A Complete lesion of sacral spinal cord, initial encounter -S34131D Complete lesion of sacral spinal cord, subsequent encounter -S34131S Complete lesion of sacral spinal cord, sequela -S34132A Incomplete lesion of sacral spinal cord, initial encounter -S34132D Incomplete lesion of sacral spinal cord, subsequent encounter -S34132S Incomplete lesion of sacral spinal cord, sequela -S34139A Unspecified injury to sacral spinal cord, initial encounter -S34139D Unspecified injury to sacral spinal cord, subsequent encounter -S34139S Unspecified injury to sacral spinal cord, sequela -S3421XA Injury of nerve root of lumbar spine, initial encounter -S3421XD Injury of nerve root of lumbar spine, subsequent encounter -S3421XS Injury of nerve root of lumbar spine, sequela -S3422XA Injury of nerve root of sacral spine, initial encounter -S3422XD Injury of nerve root of sacral spine, subsequent encounter -S3422XS Injury of nerve root of sacral spine, sequela -S343XXA Injury of cauda equina, initial encounter -S343XXD Injury of cauda equina, subsequent encounter -S343XXS Injury of cauda equina, sequela -S344XXA Injury of lumbosacral plexus, initial encounter -S344XXD Injury of lumbosacral plexus, subsequent encounter -S344XXS Injury of lumbosacral plexus, sequela -S345XXA Injury of lumbar, sacral and pelvic sympathetic nerves, initial encounter -S345XXD Injury of lumbar, sacral and pelvic sympathetic nerves, subsequent encounter -S345XXS Injury of lumbar, sacral and pelvic sympathetic nerves, sequela -S346XXA Injury of peripheral nerve(s) at abdomen, lower back and pelvis level, initial encounter -S346XXD Injury of peripheral nerve(s) at abdomen, lower back and pelvis level, subsequent encounter -S346XXS Injury of peripheral nerve(s) at abdomen, lower back and pelvis level, sequela -S348XXA Injury of other nerves at abdomen, lower back and pelvis level, initial encounter -S348XXD Injury of other nerves at abdomen, lower back and pelvis level, subsequent encounter -S348XXS Injury of other nerves at abdomen, lower back and pelvis level, sequela -S349XXA Injury of unspecified nerves at abdomen, lower back and pelvis level, initial encounter -S349XXD Injury of unspecified nerves at abdomen, lower back and pelvis level, subsequent encounter -S349XXS Injury of unspecified nerves at abdomen, lower back and pelvis level, sequela -S3500XA Unspecified injury of abdominal aorta, initial encounter -S3500XD Unspecified injury of abdominal aorta, subsequent encounter -S3500XS Unspecified injury of abdominal aorta, sequela -S3501XA Minor laceration of abdominal aorta, initial encounter -S3501XD Minor laceration of abdominal aorta, subsequent encounter -S3501XS Minor laceration of abdominal aorta, sequela -S3502XA Major laceration of abdominal aorta, initial encounter -S3502XD Major laceration of abdominal aorta, subsequent encounter -S3502XS Major laceration of abdominal aorta, sequela -S3509XA Other injury of abdominal aorta, initial encounter -S3509XD Other injury of abdominal aorta, subsequent encounter -S3509XS Other injury of abdominal aorta, sequela -S3510XA Unspecified injury of inferior vena cava, initial encounter -S3510XD Unspecified injury of inferior vena cava, subsequent encounter -S3510XS Unspecified injury of inferior vena cava, sequela -S3511XA Minor laceration of inferior vena cava, initial encounter -S3511XD Minor laceration of inferior vena cava, subsequent encounter -S3511XS Minor laceration of inferior vena cava, sequela -S3512XA Major laceration of inferior vena cava, initial encounter -S3512XD Major laceration of inferior vena cava, subsequent encounter -S3512XS Major laceration of inferior vena cava, sequela -S3519XA Other injury of inferior vena cava, initial encounter -S3519XD Other injury of inferior vena cava, subsequent encounter -S3519XS Other injury of inferior vena cava, sequela -S35211A Minor laceration of celiac artery, initial encounter -S35211D Minor laceration of celiac artery, subsequent encounter -S35211S Minor laceration of celiac artery, sequela -S35212A Major laceration of celiac artery, initial encounter -S35212D Major laceration of celiac artery, subsequent encounter -S35212S Major laceration of celiac artery, sequela -S35218A Other injury of celiac artery, initial encounter -S35218D Other injury of celiac artery, subsequent encounter -S35218S Other injury of celiac artery, sequela -S35219A Unspecified injury of celiac artery, initial encounter -S35219D Unspecified injury of celiac artery, subsequent encounter -S35219S Unspecified injury of celiac artery, sequela -S35221A Minor laceration of superior mesenteric artery, initial encounter -S35221D Minor laceration of superior mesenteric artery, subsequent encounter -S35221S Minor laceration of superior mesenteric artery, sequela -S35222A Major laceration of superior mesenteric artery, initial encounter -S35222D Major laceration of superior mesenteric artery, subsequent encounter -S35222S Major laceration of superior mesenteric artery, sequela -S35228A Other injury of superior mesenteric artery, initial encounter -S35228D Other injury of superior mesenteric artery, subsequent encounter -S35228S Other injury of superior mesenteric artery, sequela -S35229A Unspecified injury of superior mesenteric artery, initial encounter -S35229D Unspecified injury of superior mesenteric artery, subsequent encounter -S35229S Unspecified injury of superior mesenteric artery, sequela -S35231A Minor laceration of inferior mesenteric artery, initial encounter -S35231D Minor laceration of inferior mesenteric artery, subsequent encounter -S35231S Minor laceration of inferior mesenteric artery, sequela -S35232A Major laceration of inferior mesenteric artery, initial encounter -S35232D Major laceration of inferior mesenteric artery, subsequent encounter -S35232S Major laceration of inferior mesenteric artery, sequela -S35238A Other injury of inferior mesenteric artery, initial encounter -S35238D Other injury of inferior mesenteric artery, subsequent encounter -S35238S Other injury of inferior mesenteric artery, sequela -S35239A Unspecified injury of inferior mesenteric artery, initial encounter -S35239D Unspecified injury of inferior mesenteric artery, subsequent encounter -S35239S Unspecified injury of inferior mesenteric artery, sequela -S35291A Minor laceration of branches of celiac and mesenteric artery, initial encounter -S35291D Minor laceration of branches of celiac and mesenteric artery, subsequent encounter -S35291S Minor laceration of branches of celiac and mesenteric artery, sequela -S35292A Major laceration of branches of celiac and mesenteric artery, initial encounter -S35292D Major laceration of branches of celiac and mesenteric artery, subsequent encounter -S35292S Major laceration of branches of celiac and mesenteric artery, sequela -S35298A Other injury of branches of celiac and mesenteric artery, initial encounter -S35298D Other injury of branches of celiac and mesenteric artery, subsequent encounter -S35298S Other injury of branches of celiac and mesenteric artery, sequela -S35299A Unspecified injury of branches of celiac and mesenteric artery, initial encounter -S35299D Unspecified injury of branches of celiac and mesenteric artery, subsequent encounter -S35299S Unspecified injury of branches of celiac and mesenteric artery, sequela -S35311A Laceration of portal vein, initial encounter -S35311D Laceration of portal vein, subsequent encounter -S35311S Laceration of portal vein, sequela -S35318A Other specified injury of portal vein, initial encounter -S35318D Other specified injury of portal vein, subsequent encounter -S35318S Other specified injury of portal vein, sequela -S35319A Unspecified injury of portal vein, initial encounter -S35319D Unspecified injury of portal vein, subsequent encounter -S35319S Unspecified injury of portal vein, sequela -S35321A Laceration of splenic vein, initial encounter -S35321D Laceration of splenic vein, subsequent encounter -S35321S Laceration of splenic vein, sequela -S35328A Other specified injury of splenic vein, initial encounter -S35328D Other specified injury of splenic vein, subsequent encounter -S35328S Other specified injury of splenic vein, sequela -S35329A Unspecified injury of splenic vein, initial encounter -S35329D Unspecified injury of splenic vein, subsequent encounter -S35329S Unspecified injury of splenic vein, sequela -S35331A Laceration of superior mesenteric vein, initial encounter -S35331D Laceration of superior mesenteric vein, subsequent encounter -S35331S Laceration of superior mesenteric vein, sequela -S35338A Other specified injury of superior mesenteric vein, initial encounter -S35338D Other specified injury of superior mesenteric vein, subsequent encounter -S35338S Other specified injury of superior mesenteric vein, sequela -S35339A Unspecified injury of superior mesenteric vein, initial encounter -S35339D Unspecified injury of superior mesenteric vein, subsequent encounter -S35339S Unspecified injury of superior mesenteric vein, sequela -S35341A Laceration of inferior mesenteric vein, initial encounter -S35341D Laceration of inferior mesenteric vein, subsequent encounter -S35341S Laceration of inferior mesenteric vein, sequela -S35348A Other specified injury of inferior mesenteric vein, initial encounter -S35348D Other specified injury of inferior mesenteric vein, subsequent encounter -S35348S Other specified injury of inferior mesenteric vein, sequela -S35349A Unspecified injury of inferior mesenteric vein, initial encounter -S35349D Unspecified injury of inferior mesenteric vein, subsequent encounter -S35349S Unspecified injury of inferior mesenteric vein, sequela -S35401A Unspecified injury of right renal artery, initial encounter -S35401D Unspecified injury of right renal artery, subsequent encounter -S35401S Unspecified injury of right renal artery, sequela -S35402A Unspecified injury of left renal artery, initial encounter -S35402D Unspecified injury of left renal artery, subsequent encounter -S35402S Unspecified injury of left renal artery, sequela -S35403A Unspecified injury of unspecified renal artery, initial encounter -S35403D Unspecified injury of unspecified renal artery, subsequent encounter -S35403S Unspecified injury of unspecified renal artery, sequela -S35404A Unspecified injury of right renal vein, initial encounter -S35404D Unspecified injury of right renal vein, subsequent encounter -S35404S Unspecified injury of right renal vein, sequela -S35405A Unspecified injury of left renal vein, initial encounter -S35405D Unspecified injury of left renal vein, subsequent encounter -S35405S Unspecified injury of left renal vein, sequela -S35406A Unspecified injury of unspecified renal vein, initial encounter -S35406D Unspecified injury of unspecified renal vein, subsequent encounter -S35406S Unspecified injury of unspecified renal vein, sequela -S35411A Laceration of right renal artery, initial encounter -S35411D Laceration of right renal artery, subsequent encounter -S35411S Laceration of right renal artery, sequela -S35412A Laceration of left renal artery, initial encounter -S35412D Laceration of left renal artery, subsequent encounter -S35412S Laceration of left renal artery, sequela -S35413A Laceration of unspecified renal artery, initial encounter -S35413D Laceration of unspecified renal artery, subsequent encounter -S35413S Laceration of unspecified renal artery, sequela -S35414A Laceration of right renal vein, initial encounter -S35414D Laceration of right renal vein, subsequent encounter -S35414S Laceration of right renal vein, sequela -S35415A Laceration of left renal vein, initial encounter -S35415D Laceration of left renal vein, subsequent encounter -S35415S Laceration of left renal vein, sequela -S35416A Laceration of unspecified renal vein, initial encounter -S35416D Laceration of unspecified renal vein, subsequent encounter -S35416S Laceration of unspecified renal vein, sequela -S35491A Other specified injury of right renal artery, initial encounter -S35491D Other specified injury of right renal artery, subsequent encounter -S35491S Other specified injury of right renal artery, sequela -S35492A Other specified injury of left renal artery, initial encounter -S35492D Other specified injury of left renal artery, subsequent encounter -S35492S Other specified injury of left renal artery, sequela -S35493A Other specified injury of unspecified renal artery, initial encounter -S35493D Other specified injury of unspecified renal artery, subsequent encounter -S35493S Other specified injury of unspecified renal artery, sequela -S35494A Other specified injury of right renal vein, initial encounter -S35494D Other specified injury of right renal vein, subsequent encounter -S35494S Other specified injury of right renal vein, sequela -S35495A Other specified injury of left renal vein, initial encounter -S35495D Other specified injury of left renal vein, subsequent encounter -S35495S Other specified injury of left renal vein, sequela -S35496A Other specified injury of unspecified renal vein, initial encounter -S35496D Other specified injury of unspecified renal vein, subsequent encounter -S35496S Other specified injury of unspecified renal vein, sequela -S3550XA Injury of unspecified iliac blood vessel(s), initial encounter -S3550XD Injury of unspecified iliac blood vessel(s), subsequent encounter -S3550XS Injury of unspecified iliac blood vessel(s), sequela -S35511A Injury of right iliac artery, initial encounter -S35511D Injury of right iliac artery, subsequent encounter -S35511S Injury of right iliac artery, sequela -S35512A Injury of left iliac artery, initial encounter -S35512D Injury of left iliac artery, subsequent encounter -S35512S Injury of left iliac artery, sequela -S35513A Injury of unspecified iliac artery, initial encounter -S35513D Injury of unspecified iliac artery, subsequent encounter -S35513S Injury of unspecified iliac artery, sequela -S35514A Injury of right iliac vein, initial encounter -S35514D Injury of right iliac vein, subsequent encounter -S35514S Injury of right iliac vein, sequela -S35515A Injury of left iliac vein, initial encounter -S35515D Injury of left iliac vein, subsequent encounter -S35515S Injury of left iliac vein, sequela -S35516A Injury of unspecified iliac vein, initial encounter -S35516D Injury of unspecified iliac vein, subsequent encounter -S35516S Injury of unspecified iliac vein, sequela -S35531A Injury of right uterine artery, initial encounter -S35531D Injury of right uterine artery, subsequent encounter -S35531S Injury of right uterine artery, sequela -S35532A Injury of left uterine artery, initial encounter -S35532D Injury of left uterine artery, subsequent encounter -S35532S Injury of left uterine artery, sequela -S35533A Injury of unspecified uterine artery, initial encounter -S35533D Injury of unspecified uterine artery, subsequent encounter -S35533S Injury of unspecified uterine artery, sequela -S35534A Injury of right uterine vein, initial encounter -S35534D Injury of right uterine vein, subsequent encounter -S35534S Injury of right uterine vein, sequela -S35535A Injury of left uterine vein, initial encounter -S35535D Injury of left uterine vein, subsequent encounter -S35535S Injury of left uterine vein, sequela -S35536A Injury of unspecified uterine vein, initial encounter -S35536D Injury of unspecified uterine vein, subsequent encounter -S35536S Injury of unspecified uterine vein, sequela -S3559XA Injury of other iliac blood vessels, initial encounter -S3559XD Injury of other iliac blood vessels, subsequent encounter -S3559XS Injury of other iliac blood vessels, sequela -S358X1A Laceration of other blood vessels at abdomen, lower back and pelvis level, initial encounter -S358X1D Laceration of other blood vessels at abdomen, lower back and pelvis level, subsequent encounter -S358X1S Laceration of other blood vessels at abdomen, lower back and pelvis level, sequela -S358X8A Other specified injury of other blood vessels at abdomen, lower back and pelvis level, initial encounter -S358X8D Other specified injury of other blood vessels at abdomen, lower back and pelvis level, subsequent encounter -S358X8S Other specified injury of other blood vessels at abdomen, lower back and pelvis level, sequela -S358X9A Unspecified injury of other blood vessels at abdomen, lower back and pelvis level, initial encounter -S358X9D Unspecified injury of other blood vessels at abdomen, lower back and pelvis level, subsequent encounter -S358X9S Unspecified injury of other blood vessels at abdomen, lower back and pelvis level, sequela -S3590XA Unspecified injury of unspecified blood vessel at abdomen, lower back and pelvis level, initial encounter -S3590XD Unspecified injury of unspecified blood vessel at abdomen, lower back and pelvis level, subsequent encounter -S3590XS Unspecified injury of unspecified blood vessel at abdomen, lower back and pelvis level, sequela -S3591XA Laceration of unspecified blood vessel at abdomen, lower back and pelvis level, initial encounter -S3591XD Laceration of unspecified blood vessel at abdomen, lower back and pelvis level, subsequent encounter -S3591XS Laceration of unspecified blood vessel at abdomen, lower back and pelvis level, sequela -S3599XA Other specified injury of unspecified blood vessel at abdomen, lower back and pelvis level, initial encounter -S3599XD Other specified injury of unspecified blood vessel at abdomen, lower back and pelvis level, subsequent encounter -S3599XS Other specified injury of unspecified blood vessel at abdomen, lower back and pelvis level, sequela -S3600XA Unspecified injury of spleen, initial encounter -S3600XD Unspecified injury of spleen, subsequent encounter -S3600XS Unspecified injury of spleen, sequela -S36020A Minor contusion of spleen, initial encounter -S36020D Minor contusion of spleen, subsequent encounter -S36020S Minor contusion of spleen, sequela -S36021A Major contusion of spleen, initial encounter -S36021D Major contusion of spleen, subsequent encounter -S36021S Major contusion of spleen, sequela -S36029A Unspecified contusion of spleen, initial encounter -S36029D Unspecified contusion of spleen, subsequent encounter -S36029S Unspecified contusion of spleen, sequela -S36030A Superficial (capsular) laceration of spleen, initial encounter -S36030D Superficial (capsular) laceration of spleen, subsequent encounter -S36030S Superficial (capsular) laceration of spleen, sequela -S36031A Moderate laceration of spleen, initial encounter -S36031D Moderate laceration of spleen, subsequent encounter -S36031S Moderate laceration of spleen, sequela -S36032A Major laceration of spleen, initial encounter -S36032D Major laceration of spleen, subsequent encounter -S36032S Major laceration of spleen, sequela -S36039A Unspecified laceration of spleen, initial encounter -S36039D Unspecified laceration of spleen, subsequent encounter -S36039S Unspecified laceration of spleen, sequela -S3609XA Other injury of spleen, initial encounter -S3609XD Other injury of spleen, subsequent encounter -S3609XS Other injury of spleen, sequela -S36112A Contusion of liver, initial encounter -S36112D Contusion of liver, subsequent encounter -S36112S Contusion of liver, sequela -S36113A Laceration of liver, unspecified degree, initial encounter -S36113D Laceration of liver, unspecified degree, subsequent encounter -S36113S Laceration of liver, unspecified degree, sequela -S36114A Minor laceration of liver, initial encounter -S36114D Minor laceration of liver, subsequent encounter -S36114S Minor laceration of liver, sequela -S36115A Moderate laceration of liver, initial encounter -S36115D Moderate laceration of liver, subsequent encounter -S36115S Moderate laceration of liver, sequela -S36116A Major laceration of liver, initial encounter -S36116D Major laceration of liver, subsequent encounter -S36116S Major laceration of liver, sequela -S36118A Other injury of liver, initial encounter -S36118D Other injury of liver, subsequent encounter -S36118S Other injury of liver, sequela -S36119A Unspecified injury of liver, initial encounter -S36119D Unspecified injury of liver, subsequent encounter -S36119S Unspecified injury of liver, sequela -S36122A Contusion of gallbladder, initial encounter -S36122D Contusion of gallbladder, subsequent encounter -S36122S Contusion of gallbladder, sequela -S36123A Laceration of gallbladder, initial encounter -S36123D Laceration of gallbladder, subsequent encounter -S36123S Laceration of gallbladder, sequela -S36128A Other injury of gallbladder, initial encounter -S36128D Other injury of gallbladder, subsequent encounter -S36128S Other injury of gallbladder, sequela -S36129A Unspecified injury of gallbladder, initial encounter -S36129D Unspecified injury of gallbladder, subsequent encounter -S36129S Unspecified injury of gallbladder, sequela -S3613XA Injury of bile duct, initial encounter -S3613XD Injury of bile duct, subsequent encounter -S3613XS Injury of bile duct, sequela -S36200A Unspecified injury of head of pancreas, initial encounter -S36200D Unspecified injury of head of pancreas, subsequent encounter -S36200S Unspecified injury of head of pancreas, sequela -S36201A Unspecified injury of body of pancreas, initial encounter -S36201D Unspecified injury of body of pancreas, subsequent encounter -S36201S Unspecified injury of body of pancreas, sequela -S36202A Unspecified injury of tail of pancreas, initial encounter -S36202D Unspecified injury of tail of pancreas, subsequent encounter -S36202S Unspecified injury of tail of pancreas, sequela -S36209A Unspecified injury of unspecified part of pancreas, initial encounter -S36209D Unspecified injury of unspecified part of pancreas, subsequent encounter -S36209S Unspecified injury of unspecified part of pancreas, sequela -S36220A Contusion of head of pancreas, initial encounter -S36220D Contusion of head of pancreas, subsequent encounter -S36220S Contusion of head of pancreas, sequela -S36221A Contusion of body of pancreas, initial encounter -S36221D Contusion of body of pancreas, subsequent encounter -S36221S Contusion of body of pancreas, sequela -S36222A Contusion of tail of pancreas, initial encounter -S36222D Contusion of tail of pancreas, subsequent encounter -S36222S Contusion of tail of pancreas, sequela -S36229A Contusion of unspecified part of pancreas, initial encounter -S36229D Contusion of unspecified part of pancreas, subsequent encounter -S36229S Contusion of unspecified part of pancreas, sequela -S36230A Laceration of head of pancreas, unspecified degree, initial encounter -S36230D Laceration of head of pancreas, unspecified degree, subsequent encounter -S36230S Laceration of head of pancreas, unspecified degree, sequela -S36231A Laceration of body of pancreas, unspecified degree, initial encounter -S36231D Laceration of body of pancreas, unspecified degree, subsequent encounter -S36231S Laceration of body of pancreas, unspecified degree, sequela -S36232A Laceration of tail of pancreas, unspecified degree, initial encounter -S36232D Laceration of tail of pancreas, unspecified degree, subsequent encounter -S36232S Laceration of tail of pancreas, unspecified degree, sequela -S36239A Laceration of unspecified part of pancreas, unspecified degree, initial encounter -S36239D Laceration of unspecified part of pancreas, unspecified degree, subsequent encounter -S36239S Laceration of unspecified part of pancreas, unspecified degree, sequela -S36240A Minor laceration of head of pancreas, initial encounter -S36240D Minor laceration of head of pancreas, subsequent encounter -S36240S Minor laceration of head of pancreas, sequela -S36241A Minor laceration of body of pancreas, initial encounter -S36241D Minor laceration of body of pancreas, subsequent encounter -S36241S Minor laceration of body of pancreas, sequela -S36242A Minor laceration of tail of pancreas, initial encounter -S36242D Minor laceration of tail of pancreas, subsequent encounter -S36242S Minor laceration of tail of pancreas, sequela -S36249A Minor laceration of unspecified part of pancreas, initial encounter -S36249D Minor laceration of unspecified part of pancreas, subsequent encounter -S36249S Minor laceration of unspecified part of pancreas, sequela -S36250A Moderate laceration of head of pancreas, initial encounter -S36250D Moderate laceration of head of pancreas, subsequent encounter -S36250S Moderate laceration of head of pancreas, sequela -S36251A Moderate laceration of body of pancreas, initial encounter -S36251D Moderate laceration of body of pancreas, subsequent encounter -S36251S Moderate laceration of body of pancreas, sequela -S36252A Moderate laceration of tail of pancreas, initial encounter -S36252D Moderate laceration of tail of pancreas, subsequent encounter -S36252S Moderate laceration of tail of pancreas, sequela -S36259A Moderate laceration of unspecified part of pancreas, initial encounter -S36259D Moderate laceration of unspecified part of pancreas, subsequent encounter -S36259S Moderate laceration of unspecified part of pancreas, sequela -S36260A Major laceration of head of pancreas, initial encounter -S36260D Major laceration of head of pancreas, subsequent encounter -S36260S Major laceration of head of pancreas, sequela -S36261A Major laceration of body of pancreas, initial encounter -S36261D Major laceration of body of pancreas, subsequent encounter -S36261S Major laceration of body of pancreas, sequela -S36262A Major laceration of tail of pancreas, initial encounter -S36262D Major laceration of tail of pancreas, subsequent encounter -S36262S Major laceration of tail of pancreas, sequela -S36269A Major laceration of unspecified part of pancreas, initial encounter -S36269D Major laceration of unspecified part of pancreas, subsequent encounter -S36269S Major laceration of unspecified part of pancreas, sequela -S36290A Other injury of head of pancreas, initial encounter -S36290D Other injury of head of pancreas, subsequent encounter -S36290S Other injury of head of pancreas, sequela -S36291A Other injury of body of pancreas, initial encounter -S36291D Other injury of body of pancreas, subsequent encounter -S36291S Other injury of body of pancreas, sequela -S36292A Other injury of tail of pancreas, initial encounter -S36292D Other injury of tail of pancreas, subsequent encounter -S36292S Other injury of tail of pancreas, sequela -S36299A Other injury of unspecified part of pancreas, initial encounter -S36299D Other injury of unspecified part of pancreas, subsequent encounter -S36299S Other injury of unspecified part of pancreas, sequela -S3630XA Unspecified injury of stomach, initial encounter -S3630XD Unspecified injury of stomach, subsequent encounter -S3630XS Unspecified injury of stomach, sequela -S3632XA Contusion of stomach, initial encounter -S3632XD Contusion of stomach, subsequent encounter -S3632XS Contusion of stomach, sequela -S3633XA Laceration of stomach, initial encounter -S3633XD Laceration of stomach, subsequent encounter -S3633XS Laceration of stomach, sequela -S3639XA Other injury of stomach, initial encounter -S3639XD Other injury of stomach, subsequent encounter -S3639XS Other injury of stomach, sequela -S36400A Unspecified injury of duodenum, initial encounter -S36400D Unspecified injury of duodenum, subsequent encounter -S36400S Unspecified injury of duodenum, sequela -S36408A Unspecified injury of other part of small intestine, initial encounter -S36408D Unspecified injury of other part of small intestine, subsequent encounter -S36408S Unspecified injury of other part of small intestine, sequela -S36409A Unspecified injury of unspecified part of small intestine, initial encounter -S36409D Unspecified injury of unspecified part of small intestine, subsequent encounter -S36409S Unspecified injury of unspecified part of small intestine, sequela -S36410A Primary blast injury of duodenum, initial encounter -S36410D Primary blast injury of duodenum, subsequent encounter -S36410S Primary blast injury of duodenum, sequela -S36418A Primary blast injury of other part of small intestine, initial encounter -S36418D Primary blast injury of other part of small intestine, subsequent encounter -S36418S Primary blast injury of other part of small intestine, sequela -S36419A Primary blast injury of unspecified part of small intestine, initial encounter -S36419D Primary blast injury of unspecified part of small intestine, subsequent encounter -S36419S Primary blast injury of unspecified part of small intestine, sequela -S36420A Contusion of duodenum, initial encounter -S36420D Contusion of duodenum, subsequent encounter -S36420S Contusion of duodenum, sequela -S36428A Contusion of other part of small intestine, initial encounter -S36428D Contusion of other part of small intestine, subsequent encounter -S36428S Contusion of other part of small intestine, sequela -S36429A Contusion of unspecified part of small intestine, initial encounter -S36429D Contusion of unspecified part of small intestine, subsequent encounter -S36429S Contusion of unspecified part of small intestine, sequela -S36430A Laceration of duodenum, initial encounter -S36430D Laceration of duodenum, subsequent encounter -S36430S Laceration of duodenum, sequela -S36438A Laceration of other part of small intestine, initial encounter -S36438D Laceration of other part of small intestine, subsequent encounter -S36438S Laceration of other part of small intestine, sequela -S36439A Laceration of unspecified part of small intestine, initial encounter -S36439D Laceration of unspecified part of small intestine, subsequent encounter -S36439S Laceration of unspecified part of small intestine, sequela -S36490A Other injury of duodenum, initial encounter -S36490D Other injury of duodenum, subsequent encounter -S36490S Other injury of duodenum, sequela -S36498A Other injury of other part of small intestine, initial encounter -S36498D Other injury of other part of small intestine, subsequent encounter -S36498S Other injury of other part of small intestine, sequela -S36499A Other injury of unspecified part of small intestine, initial encounter -S36499D Other injury of unspecified part of small intestine, subsequent encounter -S36499S Other injury of unspecified part of small intestine, sequela -S36500A Unspecified injury of ascending [right] colon, initial encounter -S36500D Unspecified injury of ascending [right] colon, subsequent encounter -S36500S Unspecified injury of ascending [right] colon, sequela -S36501A Unspecified injury of transverse colon, initial encounter -S36501D Unspecified injury of transverse colon, subsequent encounter -S36501S Unspecified injury of transverse colon, sequela -S36502A Unspecified injury of descending [left] colon, initial encounter -S36502D Unspecified injury of descending [left] colon, subsequent encounter -S36502S Unspecified injury of descending [left] colon, sequela -S36503A Unspecified injury of sigmoid colon, initial encounter -S36503D Unspecified injury of sigmoid colon, subsequent encounter -S36503S Unspecified injury of sigmoid colon, sequela -S36508A Unspecified injury of other part of colon, initial encounter -S36508D Unspecified injury of other part of colon, subsequent encounter -S36508S Unspecified injury of other part of colon, sequela -S36509A Unspecified injury of unspecified part of colon, initial encounter -S36509D Unspecified injury of unspecified part of colon, subsequent encounter -S36509S Unspecified injury of unspecified part of colon, sequela -S36510A Primary blast injury of ascending [right] colon, initial encounter -S36510D Primary blast injury of ascending [right] colon, subsequent encounter -S36510S Primary blast injury of ascending [right] colon, sequela -S36511A Primary blast injury of transverse colon, initial encounter -S36511D Primary blast injury of transverse colon, subsequent encounter -S36511S Primary blast injury of transverse colon, sequela -S36512A Primary blast injury of descending [left] colon, initial encounter -S36512D Primary blast injury of descending [left] colon, subsequent encounter -S36512S Primary blast injury of descending [left] colon, sequela -S36513A Primary blast injury of sigmoid colon, initial encounter -S36513D Primary blast injury of sigmoid colon, subsequent encounter -S36513S Primary blast injury of sigmoid colon, sequela -S36518A Primary blast injury of other part of colon, initial encounter -S36518D Primary blast injury of other part of colon, subsequent encounter -S36518S Primary blast injury of other part of colon, sequela -S36519A Primary blast injury of unspecified part of colon, initial encounter -S36519D Primary blast injury of unspecified part of colon, subsequent encounter -S36519S Primary blast injury of unspecified part of colon, sequela -S36520A Contusion of ascending [right] colon, initial encounter -S36520D Contusion of ascending [right] colon, subsequent encounter -S36520S Contusion of ascending [right] colon, sequela -S36521A Contusion of transverse colon, initial encounter -S36521D Contusion of transverse colon, subsequent encounter -S36521S Contusion of transverse colon, sequela -S36522A Contusion of descending [left] colon, initial encounter -S36522D Contusion of descending [left] colon, subsequent encounter -S36522S Contusion of descending [left] colon, sequela -S36523A Contusion of sigmoid colon, initial encounter -S36523D Contusion of sigmoid colon, subsequent encounter -S36523S Contusion of sigmoid colon, sequela -S36528A Contusion of other part of colon, initial encounter -S36528D Contusion of other part of colon, subsequent encounter -S36528S Contusion of other part of colon, sequela -S36529A Contusion of unspecified part of colon, initial encounter -S36529D Contusion of unspecified part of colon, subsequent encounter -S36529S Contusion of unspecified part of colon, sequela -S36530A Laceration of ascending [right] colon, initial encounter -S36530D Laceration of ascending [right] colon, subsequent encounter -S36530S Laceration of ascending [right] colon, sequela -S36531A Laceration of transverse colon, initial encounter -S36531D Laceration of transverse colon, subsequent encounter -S36531S Laceration of transverse colon, sequela -S36532A Laceration of descending [left] colon, initial encounter -S36532D Laceration of descending [left] colon, subsequent encounter -S36532S Laceration of descending [left] colon, sequela -S36533A Laceration of sigmoid colon, initial encounter -S36533D Laceration of sigmoid colon, subsequent encounter -S36533S Laceration of sigmoid colon, sequela -S36538A Laceration of other part of colon, initial encounter -S36538D Laceration of other part of colon, subsequent encounter -S36538S Laceration of other part of colon, sequela -S36539A Laceration of unspecified part of colon, initial encounter -S36539D Laceration of unspecified part of colon, subsequent encounter -S36539S Laceration of unspecified part of colon, sequela -S36590A Other injury of ascending [right] colon, initial encounter -S36590D Other injury of ascending [right] colon, subsequent encounter -S36590S Other injury of ascending [right] colon, sequela -S36591A Other injury of transverse colon, initial encounter -S36591D Other injury of transverse colon, subsequent encounter -S36591S Other injury of transverse colon, sequela -S36592A Other injury of descending [left] colon, initial encounter -S36592D Other injury of descending [left] colon, subsequent encounter -S36592S Other injury of descending [left] colon, sequela -S36593A Other injury of sigmoid colon, initial encounter -S36593D Other injury of sigmoid colon, subsequent encounter -S36593S Other injury of sigmoid colon, sequela -S36598A Other injury of other part of colon, initial encounter -S36598D Other injury of other part of colon, subsequent encounter -S36598S Other injury of other part of colon, sequela -S36599A Other injury of unspecified part of colon, initial encounter -S36599D Other injury of unspecified part of colon, subsequent encounter -S36599S Other injury of unspecified part of colon, sequela -S3660XA Unspecified injury of rectum, initial encounter -S3660XD Unspecified injury of rectum, subsequent encounter -S3660XS Unspecified injury of rectum, sequela -S3661XA Primary blast injury of rectum, initial encounter -S3661XD Primary blast injury of rectum, subsequent encounter -S3661XS Primary blast injury of rectum, sequela -S3662XA Contusion of rectum, initial encounter -S3662XD Contusion of rectum, subsequent encounter -S3662XS Contusion of rectum, sequela -S3663XA Laceration of rectum, initial encounter -S3663XD Laceration of rectum, subsequent encounter -S3663XS Laceration of rectum, sequela -S3669XA Other injury of rectum, initial encounter -S3669XD Other injury of rectum, subsequent encounter -S3669XS Other injury of rectum, sequela -S3681XA Injury of peritoneum, initial encounter -S3681XD Injury of peritoneum, subsequent encounter -S3681XS Injury of peritoneum, sequela -S36892A Contusion of other intra-abdominal organs, initial encounter -S36892D Contusion of other intra-abdominal organs, subsequent encounter -S36892S Contusion of other intra-abdominal organs, sequela -S36893A Laceration of other intra-abdominal organs, initial encounter -S36893D Laceration of other intra-abdominal organs, subsequent encounter -S36893S Laceration of other intra-abdominal organs, sequela -S36898A Other injury of other intra-abdominal organs, initial encounter -S36898D Other injury of other intra-abdominal organs, subsequent encounter -S36898S Other injury of other intra-abdominal organs, sequela -S36899A Unspecified injury of other intra-abdominal organs, initial encounter -S36899D Unspecified injury of other intra-abdominal organs, subsequent encounter -S36899S Unspecified injury of other intra-abdominal organs, sequela -S3690XA Unspecified injury of unspecified intra-abdominal organ, initial encounter -S3690XD Unspecified injury of unspecified intra-abdominal organ, subsequent encounter -S3690XS Unspecified injury of unspecified intra-abdominal organ, sequela -S3692XA Contusion of unspecified intra-abdominal organ, initial encounter -S3692XD Contusion of unspecified intra-abdominal organ, subsequent encounter -S3692XS Contusion of unspecified intra-abdominal organ, sequela -S3693XA Laceration of unspecified intra-abdominal organ, initial encounter -S3693XD Laceration of unspecified intra-abdominal organ, subsequent encounter -S3693XS Laceration of unspecified intra-abdominal organ, sequela -S3699XA Other injury of unspecified intra-abdominal organ, initial encounter -S3699XD Other injury of unspecified intra-abdominal organ, subsequent encounter -S3699XS Other injury of unspecified intra-abdominal organ, sequela -S37001A Unspecified injury of right kidney, initial encounter -S37001D Unspecified injury of right kidney, subsequent encounter -S37001S Unspecified injury of right kidney, sequela -S37002A Unspecified injury of left kidney, initial encounter -S37002D Unspecified injury of left kidney, subsequent encounter -S37002S Unspecified injury of left kidney, sequela -S37009A Unspecified injury of unspecified kidney, initial encounter -S37009D Unspecified injury of unspecified kidney, subsequent encounter -S37009S Unspecified injury of unspecified kidney, sequela -S37011A Minor contusion of right kidney, initial encounter -S37011D Minor contusion of right kidney, subsequent encounter -S37011S Minor contusion of right kidney, sequela -S37012A Minor contusion of left kidney, initial encounter -S37012D Minor contusion of left kidney, subsequent encounter -S37012S Minor contusion of left kidney, sequela -S37019A Minor contusion of unspecified kidney, initial encounter -S37019D Minor contusion of unspecified kidney, subsequent encounter -S37019S Minor contusion of unspecified kidney, sequela -S37021A Major contusion of right kidney, initial encounter -S37021D Major contusion of right kidney, subsequent encounter -S37021S Major contusion of right kidney, sequela -S37022A Major contusion of left kidney, initial encounter -S37022D Major contusion of left kidney, subsequent encounter -S37022S Major contusion of left kidney, sequela -S37029A Major contusion of unspecified kidney, initial encounter -S37029D Major contusion of unspecified kidney, subsequent encounter -S37029S Major contusion of unspecified kidney, sequela -S37031A Laceration of right kidney, unspecified degree, initial encounter -S37031D Laceration of right kidney, unspecified degree, subsequent encounter -S37031S Laceration of right kidney, unspecified degree, sequela -S37032A Laceration of left kidney, unspecified degree, initial encounter -S37032D Laceration of left kidney, unspecified degree, subsequent encounter -S37032S Laceration of left kidney, unspecified degree, sequela -S37039A Laceration of unspecified kidney, unspecified degree, initial encounter -S37039D Laceration of unspecified kidney, unspecified degree, subsequent encounter -S37039S Laceration of unspecified kidney, unspecified degree, sequela -S37041A Minor laceration of right kidney, initial encounter -S37041D Minor laceration of right kidney, subsequent encounter -S37041S Minor laceration of right kidney, sequela -S37042A Minor laceration of left kidney, initial encounter -S37042D Minor laceration of left kidney, subsequent encounter -S37042S Minor laceration of left kidney, sequela -S37049A Minor laceration of unspecified kidney, initial encounter -S37049D Minor laceration of unspecified kidney, subsequent encounter -S37049S Minor laceration of unspecified kidney, sequela -S37051A Moderate laceration of right kidney, initial encounter -S37051D Moderate laceration of right kidney, subsequent encounter -S37051S Moderate laceration of right kidney, sequela -S37052A Moderate laceration of left kidney, initial encounter -S37052D Moderate laceration of left kidney, subsequent encounter -S37052S Moderate laceration of left kidney, sequela -S37059A Moderate laceration of unspecified kidney, initial encounter -S37059D Moderate laceration of unspecified kidney, subsequent encounter -S37059S Moderate laceration of unspecified kidney, sequela -S37061A Major laceration of right kidney, initial encounter -S37061D Major laceration of right kidney, subsequent encounter -S37061S Major laceration of right kidney, sequela -S37062A Major laceration of left kidney, initial encounter -S37062D Major laceration of left kidney, subsequent encounter -S37062S Major laceration of left kidney, sequela -S37069A Major laceration of unspecified kidney, initial encounter -S37069D Major laceration of unspecified kidney, subsequent encounter -S37069S Major laceration of unspecified kidney, sequela -S37091A Other injury of right kidney, initial encounter -S37091D Other injury of right kidney, subsequent encounter -S37091S Other injury of right kidney, sequela -S37092A Other injury of left kidney, initial encounter -S37092D Other injury of left kidney, subsequent encounter -S37092S Other injury of left kidney, sequela -S37099A Other injury of unspecified kidney, initial encounter -S37099D Other injury of unspecified kidney, subsequent encounter -S37099S Other injury of unspecified kidney, sequela -S3710XA Unspecified injury of ureter, initial encounter -S3710XD Unspecified injury of ureter, subsequent encounter -S3710XS Unspecified injury of ureter, sequela -S3712XA Contusion of ureter, initial encounter -S3712XD Contusion of ureter, subsequent encounter -S3712XS Contusion of ureter, sequela -S3713XA Laceration of ureter, initial encounter -S3713XD Laceration of ureter, subsequent encounter -S3713XS Laceration of ureter, sequela -S3719XA Other injury of ureter, initial encounter -S3719XD Other injury of ureter, subsequent encounter -S3719XS Other injury of ureter, sequela -S3720XA Unspecified injury of bladder, initial encounter -S3720XD Unspecified injury of bladder, subsequent encounter -S3720XS Unspecified injury of bladder, sequela -S3722XA Contusion of bladder, initial encounter -S3722XD Contusion of bladder, subsequent encounter -S3722XS Contusion of bladder, sequela -S3723XA Laceration of bladder, initial encounter -S3723XD Laceration of bladder, subsequent encounter -S3723XS Laceration of bladder, sequela -S3729XA Other injury of bladder, initial encounter -S3729XD Other injury of bladder, subsequent encounter -S3729XS Other injury of bladder, sequela -S3730XA Unspecified injury of urethra, initial encounter -S3730XD Unspecified injury of urethra, subsequent encounter -S3730XS Unspecified injury of urethra, sequela -S3732XA Contusion of urethra, initial encounter -S3732XD Contusion of urethra, subsequent encounter -S3732XS Contusion of urethra, sequela -S3733XA Laceration of urethra, initial encounter -S3733XD Laceration of urethra, subsequent encounter -S3733XS Laceration of urethra, sequela -S3739XA Other injury of urethra, initial encounter -S3739XD Other injury of urethra, subsequent encounter -S3739XS Other injury of urethra, sequela -S37401A Unspecified injury of ovary, unilateral, initial encounter -S37401D Unspecified injury of ovary, unilateral, subsequent encounter -S37401S Unspecified injury of ovary, unilateral, sequela -S37402A Unspecified injury of ovary, bilateral, initial encounter -S37402D Unspecified injury of ovary, bilateral, subsequent encounter -S37402S Unspecified injury of ovary, bilateral, sequela -S37409A Unspecified injury of ovary, unspecified, initial encounter -S37409D Unspecified injury of ovary, unspecified, subsequent encounter -S37409S Unspecified injury of ovary, unspecified, sequela -S37421A Contusion of ovary, unilateral, initial encounter -S37421D Contusion of ovary, unilateral, subsequent encounter -S37421S Contusion of ovary, unilateral, sequela -S37422A Contusion of ovary, bilateral, initial encounter -S37422D Contusion of ovary, bilateral, subsequent encounter -S37422S Contusion of ovary, bilateral, sequela -S37429A Contusion of ovary, unspecified, initial encounter -S37429D Contusion of ovary, unspecified, subsequent encounter -S37429S Contusion of ovary, unspecified, sequela -S37431A Laceration of ovary, unilateral, initial encounter -S37431D Laceration of ovary, unilateral, subsequent encounter -S37431S Laceration of ovary, unilateral, sequela -S37432A Laceration of ovary, bilateral, initial encounter -S37432D Laceration of ovary, bilateral, subsequent encounter -S37432S Laceration of ovary, bilateral, sequela -S37439A Laceration of ovary, unspecified, initial encounter -S37439D Laceration of ovary, unspecified, subsequent encounter -S37439S Laceration of ovary, unspecified, sequela -S37491A Other injury of ovary, unilateral, initial encounter -S37491D Other injury of ovary, unilateral, subsequent encounter -S37491S Other injury of ovary, unilateral, sequela -S37492A Other injury of ovary, bilateral, initial encounter -S37492D Other injury of ovary, bilateral, subsequent encounter -S37492S Other injury of ovary, bilateral, sequela -S37499A Other injury of ovary, unspecified, initial encounter -S37499D Other injury of ovary, unspecified, subsequent encounter -S37499S Other injury of ovary, unspecified, sequela -S37501A Unspecified injury of fallopian tube, unilateral, initial encounter -S37501D Unspecified injury of fallopian tube, unilateral, subsequent encounter -S37501S Unspecified injury of fallopian tube, unilateral, sequela -S37502A Unspecified injury of fallopian tube, bilateral, initial encounter -S37502D Unspecified injury of fallopian tube, bilateral, subsequent encounter -S37502S Unspecified injury of fallopian tube, bilateral, sequela -S37509A Unspecified injury of fallopian tube, unspecified, initial encounter -S37509D Unspecified injury of fallopian tube, unspecified, subsequent encounter -S37509S Unspecified injury of fallopian tube, unspecified, sequela -S37511A Primary blast injury of fallopian tube, unilateral, initial encounter -S37511D Primary blast injury of fallopian tube, unilateral, subsequent encounter -S37511S Primary blast injury of fallopian tube, unilateral, sequela -S37512A Primary blast injury of fallopian tube, bilateral, initial encounter -S37512D Primary blast injury of fallopian tube, bilateral, subsequent encounter -S37512S Primary blast injury of fallopian tube, bilateral, sequela -S37519A Primary blast injury of fallopian tube, unspecified, initial encounter -S37519D Primary blast injury of fallopian tube, unspecified, subsequent encounter -S37519S Primary blast injury of fallopian tube, unspecified, sequela -S37521A Contusion of fallopian tube, unilateral, initial encounter -S37521D Contusion of fallopian tube, unilateral, subsequent encounter -S37521S Contusion of fallopian tube, unilateral, sequela -S37522A Contusion of fallopian tube, bilateral, initial encounter -S37522D Contusion of fallopian tube, bilateral, subsequent encounter -S37522S Contusion of fallopian tube, bilateral, sequela -S37529A Contusion of fallopian tube, unspecified, initial encounter -S37529D Contusion of fallopian tube, unspecified, subsequent encounter -S37529S Contusion of fallopian tube, unspecified, sequela -S37531A Laceration of fallopian tube, unilateral, initial encounter -S37531D Laceration of fallopian tube, unilateral, subsequent encounter -S37531S Laceration of fallopian tube, unilateral, sequela -S37532A Laceration of fallopian tube, bilateral, initial encounter -S37532D Laceration of fallopian tube, bilateral, subsequent encounter -S37532S Laceration of fallopian tube, bilateral, sequela -S37539A Laceration of fallopian tube, unspecified, initial encounter -S37539D Laceration of fallopian tube, unspecified, subsequent encounter -S37539S Laceration of fallopian tube, unspecified, sequela -S37591A Other injury of fallopian tube, unilateral, initial encounter -S37591D Other injury of fallopian tube, unilateral, subsequent encounter -S37591S Other injury of fallopian tube, unilateral, sequela -S37592A Other injury of fallopian tube, bilateral, initial encounter -S37592D Other injury of fallopian tube, bilateral, subsequent encounter -S37592S Other injury of fallopian tube, bilateral, sequela -S37599A Other injury of fallopian tube, unspecified, initial encounter -S37599D Other injury of fallopian tube, unspecified, subsequent encounter -S37599S Other injury of fallopian tube, unspecified, sequela -S3760XA Unspecified injury of uterus, initial encounter -S3760XD Unspecified injury of uterus, subsequent encounter -S3760XS Unspecified injury of uterus, sequela -S3762XA Contusion of uterus, initial encounter -S3762XD Contusion of uterus, subsequent encounter -S3762XS Contusion of uterus, sequela -S3763XA Laceration of uterus, initial encounter -S3763XD Laceration of uterus, subsequent encounter -S3763XS Laceration of uterus, sequela -S3769XA Other injury of uterus, initial encounter -S3769XD Other injury of uterus, subsequent encounter -S3769XS Other injury of uterus, sequela -S37812A Contusion of adrenal gland, initial encounter -S37812D Contusion of adrenal gland, subsequent encounter -S37812S Contusion of adrenal gland, sequela -S37813A Laceration of adrenal gland, initial encounter -S37813D Laceration of adrenal gland, subsequent encounter -S37813S Laceration of adrenal gland, sequela -S37818A Other injury of adrenal gland, initial encounter -S37818D Other injury of adrenal gland, subsequent encounter -S37818S Other injury of adrenal gland, sequela -S37819A Unspecified injury of adrenal gland, initial encounter -S37819D Unspecified injury of adrenal gland, subsequent encounter -S37819S Unspecified injury of adrenal gland, sequela -S37822A Contusion of prostate, initial encounter -S37822D Contusion of prostate, subsequent encounter -S37822S Contusion of prostate, sequela -S37823A Laceration of prostate, initial encounter -S37823D Laceration of prostate, subsequent encounter -S37823S Laceration of prostate, sequela -S37828A Other injury of prostate, initial encounter -S37828D Other injury of prostate, subsequent encounter -S37828S Other injury of prostate, sequela -S37829A Unspecified injury of prostate, initial encounter -S37829D Unspecified injury of prostate, subsequent encounter -S37829S Unspecified injury of prostate, sequela -S37892A Contusion of other urinary and pelvic organ, initial encounter -S37892D Contusion of other urinary and pelvic organ, subsequent encounter -S37892S Contusion of other urinary and pelvic organ, sequela -S37893A Laceration of other urinary and pelvic organ, initial encounter -S37893D Laceration of other urinary and pelvic organ, subsequent encounter -S37893S Laceration of other urinary and pelvic organ, sequela -S37898A Other injury of other urinary and pelvic organ, initial encounter -S37898D Other injury of other urinary and pelvic organ, subsequent encounter -S37898S Other injury of other urinary and pelvic organ, sequela -S37899A Unspecified injury of other urinary and pelvic organ, initial encounter -S37899D Unspecified injury of other urinary and pelvic organ, subsequent encounter -S37899S Unspecified injury of other urinary and pelvic organ, sequela -S3790XA Unspecified injury of unspecified urinary and pelvic organ, initial encounter -S3790XD Unspecified injury of unspecified urinary and pelvic organ, subsequent encounter -S3790XS Unspecified injury of unspecified urinary and pelvic organ, sequela -S3792XA Contusion of unspecified urinary and pelvic organ, initial encounter -S3792XD Contusion of unspecified urinary and pelvic organ, subsequent encounter -S3792XS Contusion of unspecified urinary and pelvic organ, sequela -S3793XA Laceration of unspecified urinary and pelvic organ, initial encounter -S3793XD Laceration of unspecified urinary and pelvic organ, subsequent encounter -S3793XS Laceration of unspecified urinary and pelvic organ, sequela -S3799XA Other injury of unspecified urinary and pelvic organ, initial encounter -S3799XD Other injury of unspecified urinary and pelvic organ, subsequent encounter -S3799XS Other injury of unspecified urinary and pelvic organ, sequela -S38001A Crushing injury of unspecified external genital organs, male, initial encounter -S38001D Crushing injury of unspecified external genital organs, male, subsequent encounter -S38001S Crushing injury of unspecified external genital organs, male, sequela -S38002A Crushing injury of unspecified external genital organs, female, initial encounter -S38002D Crushing injury of unspecified external genital organs, female, subsequent encounter -S38002S Crushing injury of unspecified external genital organs, female, sequela -S3801XA Crushing injury of penis, initial encounter -S3801XD Crushing injury of penis, subsequent encounter -S3801XS Crushing injury of penis, sequela -S3802XA Crushing injury of scrotum and testis, initial encounter -S3802XD Crushing injury of scrotum and testis, subsequent encounter -S3802XS Crushing injury of scrotum and testis, sequela -S3803XA Crushing injury of vulva, initial encounter -S3803XD Crushing injury of vulva, subsequent encounter -S3803XS Crushing injury of vulva, sequela -S381XXA Crushing injury of abdomen, lower back, and pelvis, initial encounter -S381XXD Crushing injury of abdomen, lower back, and pelvis, subsequent encounter -S381XXS Crushing injury of abdomen, lower back, and pelvis, sequela -S38211A Complete traumatic amputation of female external genital organs, initial encounter -S38211D Complete traumatic amputation of female external genital organs, subsequent encounter -S38211S Complete traumatic amputation of female external genital organs, sequela -S38212A Partial traumatic amputation of female external genital organs, initial encounter -S38212D Partial traumatic amputation of female external genital organs, subsequent encounter -S38212S Partial traumatic amputation of female external genital organs, sequela -S38221A Complete traumatic amputation of penis, initial encounter -S38221D Complete traumatic amputation of penis, subsequent encounter -S38221S Complete traumatic amputation of penis, sequela -S38222A Partial traumatic amputation of penis, initial encounter -S38222D Partial traumatic amputation of penis, subsequent encounter -S38222S Partial traumatic amputation of penis, sequela -S38231A Complete traumatic amputation of scrotum and testis, initial encounter -S38231D Complete traumatic amputation of scrotum and testis, subsequent encounter -S38231S Complete traumatic amputation of scrotum and testis, sequela -S38232A Partial traumatic amputation of scrotum and testis, initial encounter -S38232D Partial traumatic amputation of scrotum and testis, subsequent encounter -S38232S Partial traumatic amputation of scrotum and testis, sequela -S383XXA Transection (partial) of abdomen, initial encounter -S383XXD Transection (partial) of abdomen, subsequent encounter -S383XXS Transection (partial) of abdomen, sequela -S39001A Unspecified injury of muscle, fascia and tendon of abdomen, initial encounter -S39001D Unspecified injury of muscle, fascia and tendon of abdomen, subsequent encounter -S39001S Unspecified injury of muscle, fascia and tendon of abdomen, sequela -S39002A Unspecified injury of muscle, fascia and tendon of lower back, initial encounter -S39002D Unspecified injury of muscle, fascia and tendon of lower back, subsequent encounter -S39002S Unspecified injury of muscle, fascia and tendon of lower back, sequela -S39003A Unspecified injury of muscle, fascia and tendon of pelvis, initial encounter -S39003D Unspecified injury of muscle, fascia and tendon of pelvis, subsequent encounter -S39003S Unspecified injury of muscle, fascia and tendon of pelvis, sequela -S39011A Strain of muscle, fascia and tendon of abdomen, initial encounter -S39011D Strain of muscle, fascia and tendon of abdomen, subsequent encounter -S39011S Strain of muscle, fascia and tendon of abdomen, sequela -S39012A Strain of muscle, fascia and tendon of lower back, initial encounter -S39012D Strain of muscle, fascia and tendon of lower back, subsequent encounter -S39012S Strain of muscle, fascia and tendon of lower back, sequela -S39013A Strain of muscle, fascia and tendon of pelvis, initial encounter -S39013D Strain of muscle, fascia and tendon of pelvis, subsequent encounter -S39013S Strain of muscle, fascia and tendon of pelvis, sequela -S39021A Laceration of muscle, fascia and tendon of abdomen, initial encounter -S39021D Laceration of muscle, fascia and tendon of abdomen, subsequent encounter -S39021S Laceration of muscle, fascia and tendon of abdomen, sequela -S39022A Laceration of muscle, fascia and tendon of lower back, initial encounter -S39022D Laceration of muscle, fascia and tendon of lower back, subsequent encounter -S39022S Laceration of muscle, fascia and tendon of lower back, sequela -S39023A Laceration of muscle, fascia and tendon of pelvis, initial encounter -S39023D Laceration of muscle, fascia and tendon of pelvis, subsequent encounter -S39023S Laceration of muscle, fascia and tendon of pelvis, sequela -S39091A Other injury of muscle, fascia and tendon of abdomen, initial encounter -S39091D Other injury of muscle, fascia and tendon of abdomen, subsequent encounter -S39091S Other injury of muscle, fascia and tendon of abdomen, sequela -S39092A Other injury of muscle, fascia and tendon of lower back, initial encounter -S39092D Other injury of muscle, fascia and tendon of lower back, subsequent encounter -S39092S Other injury of muscle, fascia and tendon of lower back, sequela -S39093A Other injury of muscle, fascia and tendon of pelvis, initial encounter -S39093D Other injury of muscle, fascia and tendon of pelvis, subsequent encounter -S39093S Other injury of muscle, fascia and tendon of pelvis, sequela -S3981XA Other specified injuries of abdomen, initial encounter -S3981XD Other specified injuries of abdomen, subsequent encounter -S3981XS Other specified injuries of abdomen, sequela -S3982XA Other specified injuries of lower back, initial encounter -S3982XD Other specified injuries of lower back, subsequent encounter -S3982XS Other specified injuries of lower back, sequela -S3983XA Other specified injuries of pelvis, initial encounter -S3983XD Other specified injuries of pelvis, subsequent encounter -S3983XS Other specified injuries of pelvis, sequela -S39840A Fracture of corpus cavernosum penis, initial encounter -S39840D Fracture of corpus cavernosum penis, subsequent encounter -S39840S Fracture of corpus cavernosum penis, sequela -S39848A Other specified injuries of external genitals, initial encounter -S39848D Other specified injuries of external genitals, subsequent encounter -S39848S Other specified injuries of external genitals, sequela -S3991XA Unspecified injury of abdomen, initial encounter -S3991XD Unspecified injury of abdomen, subsequent encounter -S3991XS Unspecified injury of abdomen, sequela -S3992XA Unspecified injury of lower back, initial encounter -S3992XD Unspecified injury of lower back, subsequent encounter -S3992XS Unspecified injury of lower back, sequela -S3993XA Unspecified injury of pelvis, initial encounter -S3993XD Unspecified injury of pelvis, subsequent encounter -S3993XS Unspecified injury of pelvis, sequela -S3994XA Unspecified injury of external genitals, initial encounter -S3994XD Unspecified injury of external genitals, subsequent encounter -S3994XS Unspecified injury of external genitals, sequela -S40011A Contusion of right shoulder, initial encounter -S40011D Contusion of right shoulder, subsequent encounter -S40011S Contusion of right shoulder, sequela -S40012A Contusion of left shoulder, initial encounter -S40012D Contusion of left shoulder, subsequent encounter -S40012S Contusion of left shoulder, sequela -S40019A Contusion of unspecified shoulder, initial encounter -S40019D Contusion of unspecified shoulder, subsequent encounter -S40019S Contusion of unspecified shoulder, sequela -S40021A Contusion of right upper arm, initial encounter -S40021D Contusion of right upper arm, subsequent encounter -S40021S Contusion of right upper arm, sequela -S40022A Contusion of left upper arm, initial encounter -S40022D Contusion of left upper arm, subsequent encounter -S40022S Contusion of left upper arm, sequela -S40029A Contusion of unspecified upper arm, initial encounter -S40029D Contusion of unspecified upper arm, subsequent encounter -S40029S Contusion of unspecified upper arm, sequela -S40211A Abrasion of right shoulder, initial encounter -S40211D Abrasion of right shoulder, subsequent encounter -S40211S Abrasion of right shoulder, sequela -S40212A Abrasion of left shoulder, initial encounter -S40212D Abrasion of left shoulder, subsequent encounter -S40212S Abrasion of left shoulder, sequela -S40219A Abrasion of unspecified shoulder, initial encounter -S40219D Abrasion of unspecified shoulder, subsequent encounter -S40219S Abrasion of unspecified shoulder, sequela -S40221A Blister (nonthermal) of right shoulder, initial encounter -S40221D Blister (nonthermal) of right shoulder, subsequent encounter -S40221S Blister (nonthermal) of right shoulder, sequela -S40222A Blister (nonthermal) of left shoulder, initial encounter -S40222D Blister (nonthermal) of left shoulder, subsequent encounter -S40222S Blister (nonthermal) of left shoulder, sequela -S40229A Blister (nonthermal) of unspecified shoulder, initial encounter -S40229D Blister (nonthermal) of unspecified shoulder, subsequent encounter -S40229S Blister (nonthermal) of unspecified shoulder, sequela -S40241A External constriction of right shoulder, initial encounter -S40241D External constriction of right shoulder, subsequent encounter -S40241S External constriction of right shoulder, sequela -S40242A External constriction of left shoulder, initial encounter -S40242D External constriction of left shoulder, subsequent encounter -S40242S External constriction of left shoulder, sequela -S40249A External constriction of unspecified shoulder, initial encounter -S40249D External constriction of unspecified shoulder, subsequent encounter -S40249S External constriction of unspecified shoulder, sequela -S40251A Superficial foreign body of right shoulder, initial encounter -S40251D Superficial foreign body of right shoulder, subsequent encounter -S40251S Superficial foreign body of right shoulder, sequela -S40252A Superficial foreign body of left shoulder, initial encounter -S40252D Superficial foreign body of left shoulder, subsequent encounter -S40252S Superficial foreign body of left shoulder, sequela -S40259A Superficial foreign body of unspecified shoulder, initial encounter -S40259D Superficial foreign body of unspecified shoulder, subsequent encounter -S40259S Superficial foreign body of unspecified shoulder, sequela -S40261A Insect bite (nonvenomous) of right shoulder, initial encounter -S40261D Insect bite (nonvenomous) of right shoulder, subsequent encounter -S40261S Insect bite (nonvenomous) of right shoulder, sequela -S40262A Insect bite (nonvenomous) of left shoulder, initial encounter -S40262D Insect bite (nonvenomous) of left shoulder, subsequent encounter -S40262S Insect bite (nonvenomous) of left shoulder, sequela -S40269A Insect bite (nonvenomous) of unspecified shoulder, initial encounter -S40269D Insect bite (nonvenomous) of unspecified shoulder, subsequent encounter -S40269S Insect bite (nonvenomous) of unspecified shoulder, sequela -S40271A Other superficial bite of right shoulder, initial encounter -S40271D Other superficial bite of right shoulder, subsequent encounter -S40271S Other superficial bite of right shoulder, sequela -S40272A Other superficial bite of left shoulder, initial encounter -S40272D Other superficial bite of left shoulder, subsequent encounter -S40272S Other superficial bite of left shoulder, sequela -S40279A Other superficial bite of unspecified shoulder, initial encounter -S40279D Other superficial bite of unspecified shoulder, subsequent encounter -S40279S Other superficial bite of unspecified shoulder, sequela -S40811A Abrasion of right upper arm, initial encounter -S40811D Abrasion of right upper arm, subsequent encounter -S40811S Abrasion of right upper arm, sequela -S40812A Abrasion of left upper arm, initial encounter -S40812D Abrasion of left upper arm, subsequent encounter -S40812S Abrasion of left upper arm, sequela -S40819A Abrasion of unspecified upper arm, initial encounter -S40819D Abrasion of unspecified upper arm, subsequent encounter -S40819S Abrasion of unspecified upper arm, sequela -S40821A Blister (nonthermal) of right upper arm, initial encounter -S40821D Blister (nonthermal) of right upper arm, subsequent encounter -S40821S Blister (nonthermal) of right upper arm, sequela -S40822A Blister (nonthermal) of left upper arm, initial encounter -S40822D Blister (nonthermal) of left upper arm, subsequent encounter -S40822S Blister (nonthermal) of left upper arm, sequela -S40829A Blister (nonthermal) of unspecified upper arm, initial encounter -S40829D Blister (nonthermal) of unspecified upper arm, subsequent encounter -S40829S Blister (nonthermal) of unspecified upper arm, sequela -S40841A External constriction of right upper arm, initial encounter -S40841D External constriction of right upper arm, subsequent encounter -S40841S External constriction of right upper arm, sequela -S40842A External constriction of left upper arm, initial encounter -S40842D External constriction of left upper arm, subsequent encounter -S40842S External constriction of left upper arm, sequela -S40849A External constriction of unspecified upper arm, initial encounter -S40849D External constriction of unspecified upper arm, subsequent encounter -S40849S External constriction of unspecified upper arm, sequela -S40851A Superficial foreign body of right upper arm, initial encounter -S40851D Superficial foreign body of right upper arm, subsequent encounter -S40851S Superficial foreign body of right upper arm, sequela -S40852A Superficial foreign body of left upper arm, initial encounter -S40852D Superficial foreign body of left upper arm, subsequent encounter -S40852S Superficial foreign body of left upper arm, sequela -S40859A Superficial foreign body of unspecified upper arm, initial encounter -S40859D Superficial foreign body of unspecified upper arm, subsequent encounter -S40859S Superficial foreign body of unspecified upper arm, sequela -S40861A Insect bite (nonvenomous) of right upper arm, initial encounter -S40861D Insect bite (nonvenomous) of right upper arm, subsequent encounter -S40861S Insect bite (nonvenomous) of right upper arm, sequela -S40862A Insect bite (nonvenomous) of left upper arm, initial encounter -S40862D Insect bite (nonvenomous) of left upper arm, subsequent encounter -S40862S Insect bite (nonvenomous) of left upper arm, sequela -S40869A Insect bite (nonvenomous) of unspecified upper arm, initial encounter -S40869D Insect bite (nonvenomous) of unspecified upper arm, subsequent encounter -S40869S Insect bite (nonvenomous) of unspecified upper arm, sequela -S40871A Other superficial bite of right upper arm, initial encounter -S40871D Other superficial bite of right upper arm, subsequent encounter -S40871S Other superficial bite of right upper arm, sequela -S40872A Other superficial bite of left upper arm, initial encounter -S40872D Other superficial bite of left upper arm, subsequent encounter -S40872S Other superficial bite of left upper arm, sequela -S40879A Other superficial bite of unspecified upper arm, initial encounter -S40879D Other superficial bite of unspecified upper arm, subsequent encounter -S40879S Other superficial bite of unspecified upper arm, sequela -S40911A Unspecified superficial injury of right shoulder, initial encounter -S40911D Unspecified superficial injury of right shoulder, subsequent encounter -S40911S Unspecified superficial injury of right shoulder, sequela -S40912A Unspecified superficial injury of left shoulder, initial encounter -S40912D Unspecified superficial injury of left shoulder, subsequent encounter -S40912S Unspecified superficial injury of left shoulder, sequela -S40919A Unspecified superficial injury of unspecified shoulder, initial encounter -S40919D Unspecified superficial injury of unspecified shoulder, subsequent encounter -S40919S Unspecified superficial injury of unspecified shoulder, sequela -S40921A Unspecified superficial injury of right upper arm, initial encounter -S40921D Unspecified superficial injury of right upper arm, subsequent encounter -S40921S Unspecified superficial injury of right upper arm, sequela -S40922A Unspecified superficial injury of left upper arm, initial encounter -S40922D Unspecified superficial injury of left upper arm, subsequent encounter -S40922S Unspecified superficial injury of left upper arm, sequela -S40929A Unspecified superficial injury of unspecified upper arm, initial encounter -S40929D Unspecified superficial injury of unspecified upper arm, subsequent encounter -S40929S Unspecified superficial injury of unspecified upper arm, sequela -S41001A Unspecified open wound of right shoulder, initial encounter -S41001D Unspecified open wound of right shoulder, subsequent encounter -S41001S Unspecified open wound of right shoulder, sequela -S41002A Unspecified open wound of left shoulder, initial encounter -S41002D Unspecified open wound of left shoulder, subsequent encounter -S41002S Unspecified open wound of left shoulder, sequela -S41009A Unspecified open wound of unspecified shoulder, initial encounter -S41009D Unspecified open wound of unspecified shoulder, subsequent encounter -S41009S Unspecified open wound of unspecified shoulder, sequela -S41011A Laceration without foreign body of right shoulder, initial encounter -S41011D Laceration without foreign body of right shoulder, subsequent encounter -S41011S Laceration without foreign body of right shoulder, sequela -S41012A Laceration without foreign body of left shoulder, initial encounter -S41012D Laceration without foreign body of left shoulder, subsequent encounter -S41012S Laceration without foreign body of left shoulder, sequela -S41019A Laceration without foreign body of unspecified shoulder, initial encounter -S41019D Laceration without foreign body of unspecified shoulder, subsequent encounter -S41019S Laceration without foreign body of unspecified shoulder, sequela -S41021A Laceration with foreign body of right shoulder, initial encounter -S41021D Laceration with foreign body of right shoulder, subsequent encounter -S41021S Laceration with foreign body of right shoulder, sequela -S41022A Laceration with foreign body of left shoulder, initial encounter -S41022D Laceration with foreign body of left shoulder, subsequent encounter -S41022S Laceration with foreign body of left shoulder, sequela -S41029A Laceration with foreign body of unspecified shoulder, initial encounter -S41029D Laceration with foreign body of unspecified shoulder, subsequent encounter -S41029S Laceration with foreign body of unspecified shoulder, sequela -S41031A Puncture wound without foreign body of right shoulder, initial encounter -S41031D Puncture wound without foreign body of right shoulder, subsequent encounter -S41031S Puncture wound without foreign body of right shoulder, sequela -S41032A Puncture wound without foreign body of left shoulder, initial encounter -S41032D Puncture wound without foreign body of left shoulder, subsequent encounter -S41032S Puncture wound without foreign body of left shoulder, sequela -S41039A Puncture wound without foreign body of unspecified shoulder, initial encounter -S41039D Puncture wound without foreign body of unspecified shoulder, subsequent encounter -S41039S Puncture wound without foreign body of unspecified shoulder, sequela -S41041A Puncture wound with foreign body of right shoulder, initial encounter -S41041D Puncture wound with foreign body of right shoulder, subsequent encounter -S41041S Puncture wound with foreign body of right shoulder, sequela -S41042A Puncture wound with foreign body of left shoulder, initial encounter -S41042D Puncture wound with foreign body of left shoulder, subsequent encounter -S41042S Puncture wound with foreign body of left shoulder, sequela -S41049A Puncture wound with foreign body of unspecified shoulder, initial encounter -S41049D Puncture wound with foreign body of unspecified shoulder, subsequent encounter -S41049S Puncture wound with foreign body of unspecified shoulder, sequela -S41051A Open bite of right shoulder, initial encounter -S41051D Open bite of right shoulder, subsequent encounter -S41051S Open bite of right shoulder, sequela -S41052A Open bite of left shoulder, initial encounter -S41052D Open bite of left shoulder, subsequent encounter -S41052S Open bite of left shoulder, sequela -S41059A Open bite of unspecified shoulder, initial encounter -S41059D Open bite of unspecified shoulder, subsequent encounter -S41059S Open bite of unspecified shoulder, sequela -S41101A Unspecified open wound of right upper arm, initial encounter -S41101D Unspecified open wound of right upper arm, subsequent encounter -S41101S Unspecified open wound of right upper arm, sequela -S41102A Unspecified open wound of left upper arm, initial encounter -S41102D Unspecified open wound of left upper arm, subsequent encounter -S41102S Unspecified open wound of left upper arm, sequela -S41109A Unspecified open wound of unspecified upper arm, initial encounter -S41109D Unspecified open wound of unspecified upper arm, subsequent encounter -S41109S Unspecified open wound of unspecified upper arm, sequela -S41111A Laceration without foreign body of right upper arm, initial encounter -S41111D Laceration without foreign body of right upper arm, subsequent encounter -S41111S Laceration without foreign body of right upper arm, sequela -S41112A Laceration without foreign body of left upper arm, initial encounter -S41112D Laceration without foreign body of left upper arm, subsequent encounter -S41112S Laceration without foreign body of left upper arm, sequela -S41119A Laceration without foreign body of unspecified upper arm, initial encounter -S41119D Laceration without foreign body of unspecified upper arm, subsequent encounter -S41119S Laceration without foreign body of unspecified upper arm, sequela -S41121A Laceration with foreign body of right upper arm, initial encounter -S41121D Laceration with foreign body of right upper arm, subsequent encounter -S41121S Laceration with foreign body of right upper arm, sequela -S41122A Laceration with foreign body of left upper arm, initial encounter -S41122D Laceration with foreign body of left upper arm, subsequent encounter -S41122S Laceration with foreign body of left upper arm, sequela -S41129A Laceration with foreign body of unspecified upper arm, initial encounter -S41129D Laceration with foreign body of unspecified upper arm, subsequent encounter -S41129S Laceration with foreign body of unspecified upper arm, sequela -S41131A Puncture wound without foreign body of right upper arm, initial encounter -S41131D Puncture wound without foreign body of right upper arm, subsequent encounter -S41131S Puncture wound without foreign body of right upper arm, sequela -S41132A Puncture wound without foreign body of left upper arm, initial encounter -S41132D Puncture wound without foreign body of left upper arm, subsequent encounter -S41132S Puncture wound without foreign body of left upper arm, sequela -S41139A Puncture wound without foreign body of unspecified upper arm, initial encounter -S41139D Puncture wound without foreign body of unspecified upper arm, subsequent encounter -S41139S Puncture wound without foreign body of unspecified upper arm, sequela -S41141A Puncture wound with foreign body of right upper arm, initial encounter -S41141D Puncture wound with foreign body of right upper arm, subsequent encounter -S41141S Puncture wound with foreign body of right upper arm, sequela -S41142A Puncture wound with foreign body of left upper arm, initial encounter -S41142D Puncture wound with foreign body of left upper arm, subsequent encounter -S41142S Puncture wound with foreign body of left upper arm, sequela -S41149A Puncture wound with foreign body of unspecified upper arm, initial encounter -S41149D Puncture wound with foreign body of unspecified upper arm, subsequent encounter -S41149S Puncture wound with foreign body of unspecified upper arm, sequela -S41151A Open bite of right upper arm, initial encounter -S41151D Open bite of right upper arm, subsequent encounter -S41151S Open bite of right upper arm, sequela -S41152A Open bite of left upper arm, initial encounter -S41152D Open bite of left upper arm, subsequent encounter -S41152S Open bite of left upper arm, sequela -S41159A Open bite of unspecified upper arm, initial encounter -S41159D Open bite of unspecified upper arm, subsequent encounter -S41159S Open bite of unspecified upper arm, sequela -S42001A Fracture of unspecified part of right clavicle, initial encounter for closed fracture -S42001B Fracture of unspecified part of right clavicle, initial encounter for open fracture -S42001D Fracture of unspecified part of right clavicle, subsequent encounter for fracture with routine healing -S42001G Fracture of unspecified part of right clavicle, subsequent encounter for fracture with delayed healing -S42001K Fracture of unspecified part of right clavicle, subsequent encounter for fracture with nonunion -S42001P Fracture of unspecified part of right clavicle, subsequent encounter for fracture with malunion -S42001S Fracture of unspecified part of right clavicle, sequela -S42002A Fracture of unspecified part of left clavicle, initial encounter for closed fracture -S42002B Fracture of unspecified part of left clavicle, initial encounter for open fracture -S42002D Fracture of unspecified part of left clavicle, subsequent encounter for fracture with routine healing -S42002G Fracture of unspecified part of left clavicle, subsequent encounter for fracture with delayed healing -S42002K Fracture of unspecified part of left clavicle, subsequent encounter for fracture with nonunion -S42002P Fracture of unspecified part of left clavicle, subsequent encounter for fracture with malunion -S42002S Fracture of unspecified part of left clavicle, sequela -S42009A Fracture of unspecified part of unspecified clavicle, initial encounter for closed fracture -S42009B Fracture of unspecified part of unspecified clavicle, initial encounter for open fracture -S42009D Fracture of unspecified part of unspecified clavicle, subsequent encounter for fracture with routine healing -S42009G Fracture of unspecified part of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42009K Fracture of unspecified part of unspecified clavicle, subsequent encounter for fracture with nonunion -S42009P Fracture of unspecified part of unspecified clavicle, subsequent encounter for fracture with malunion -S42009S Fracture of unspecified part of unspecified clavicle, sequela -S42011A Anterior displaced fracture of sternal end of right clavicle, initial encounter for closed fracture -S42011B Anterior displaced fracture of sternal end of right clavicle, initial encounter for open fracture -S42011D Anterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with routine healing -S42011G Anterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with delayed healing -S42011K Anterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with nonunion -S42011P Anterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with malunion -S42011S Anterior displaced fracture of sternal end of right clavicle, sequela -S42012A Anterior displaced fracture of sternal end of left clavicle, initial encounter for closed fracture -S42012B Anterior displaced fracture of sternal end of left clavicle, initial encounter for open fracture -S42012D Anterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with routine healing -S42012G Anterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with delayed healing -S42012K Anterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with nonunion -S42012P Anterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with malunion -S42012S Anterior displaced fracture of sternal end of left clavicle, sequela -S42013A Anterior displaced fracture of sternal end of unspecified clavicle, initial encounter for closed fracture -S42013B Anterior displaced fracture of sternal end of unspecified clavicle, initial encounter for open fracture -S42013D Anterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with routine healing -S42013G Anterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42013K Anterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with nonunion -S42013P Anterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with malunion -S42013S Anterior displaced fracture of sternal end of unspecified clavicle, sequela -S42014A Posterior displaced fracture of sternal end of right clavicle, initial encounter for closed fracture -S42014B Posterior displaced fracture of sternal end of right clavicle, initial encounter for open fracture -S42014D Posterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with routine healing -S42014G Posterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with delayed healing -S42014K Posterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with nonunion -S42014P Posterior displaced fracture of sternal end of right clavicle, subsequent encounter for fracture with malunion -S42014S Posterior displaced fracture of sternal end of right clavicle, sequela -S42015A Posterior displaced fracture of sternal end of left clavicle, initial encounter for closed fracture -S42015B Posterior displaced fracture of sternal end of left clavicle, initial encounter for open fracture -S42015D Posterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with routine healing -S42015G Posterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with delayed healing -S42015K Posterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with nonunion -S42015P Posterior displaced fracture of sternal end of left clavicle, subsequent encounter for fracture with malunion -S42015S Posterior displaced fracture of sternal end of left clavicle, sequela -S42016A Posterior displaced fracture of sternal end of unspecified clavicle, initial encounter for closed fracture -S42016B Posterior displaced fracture of sternal end of unspecified clavicle, initial encounter for open fracture -S42016D Posterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with routine healing -S42016G Posterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42016K Posterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with nonunion -S42016P Posterior displaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with malunion -S42016S Posterior displaced fracture of sternal end of unspecified clavicle, sequela -S42017A Nondisplaced fracture of sternal end of right clavicle, initial encounter for closed fracture -S42017B Nondisplaced fracture of sternal end of right clavicle, initial encounter for open fracture -S42017D Nondisplaced fracture of sternal end of right clavicle, subsequent encounter for fracture with routine healing -S42017G Nondisplaced fracture of sternal end of right clavicle, subsequent encounter for fracture with delayed healing -S42017K Nondisplaced fracture of sternal end of right clavicle, subsequent encounter for fracture with nonunion -S42017P Nondisplaced fracture of sternal end of right clavicle, subsequent encounter for fracture with malunion -S42017S Nondisplaced fracture of sternal end of right clavicle, sequela -S42018A Nondisplaced fracture of sternal end of left clavicle, initial encounter for closed fracture -S42018B Nondisplaced fracture of sternal end of left clavicle, initial encounter for open fracture -S42018D Nondisplaced fracture of sternal end of left clavicle, subsequent encounter for fracture with routine healing -S42018G Nondisplaced fracture of sternal end of left clavicle, subsequent encounter for fracture with delayed healing -S42018K Nondisplaced fracture of sternal end of left clavicle, subsequent encounter for fracture with nonunion -S42018P Nondisplaced fracture of sternal end of left clavicle, subsequent encounter for fracture with malunion -S42018S Nondisplaced fracture of sternal end of left clavicle, sequela -S42019A Nondisplaced fracture of sternal end of unspecified clavicle, initial encounter for closed fracture -S42019B Nondisplaced fracture of sternal end of unspecified clavicle, initial encounter for open fracture -S42019D Nondisplaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with routine healing -S42019G Nondisplaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42019K Nondisplaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with nonunion -S42019P Nondisplaced fracture of sternal end of unspecified clavicle, subsequent encounter for fracture with malunion -S42019S Nondisplaced fracture of sternal end of unspecified clavicle, sequela -S42021A Displaced fracture of shaft of right clavicle, initial encounter for closed fracture -S42021B Displaced fracture of shaft of right clavicle, initial encounter for open fracture -S42021D Displaced fracture of shaft of right clavicle, subsequent encounter for fracture with routine healing -S42021G Displaced fracture of shaft of right clavicle, subsequent encounter for fracture with delayed healing -S42021K Displaced fracture of shaft of right clavicle, subsequent encounter for fracture with nonunion -S42021P Displaced fracture of shaft of right clavicle, subsequent encounter for fracture with malunion -S42021S Displaced fracture of shaft of right clavicle, sequela -S42022A Displaced fracture of shaft of left clavicle, initial encounter for closed fracture -S42022B Displaced fracture of shaft of left clavicle, initial encounter for open fracture -S42022D Displaced fracture of shaft of left clavicle, subsequent encounter for fracture with routine healing -S42022G Displaced fracture of shaft of left clavicle, subsequent encounter for fracture with delayed healing -S42022K Displaced fracture of shaft of left clavicle, subsequent encounter for fracture with nonunion -S42022P Displaced fracture of shaft of left clavicle, subsequent encounter for fracture with malunion -S42022S Displaced fracture of shaft of left clavicle, sequela -S42023A Displaced fracture of shaft of unspecified clavicle, initial encounter for closed fracture -S42023B Displaced fracture of shaft of unspecified clavicle, initial encounter for open fracture -S42023D Displaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with routine healing -S42023G Displaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42023K Displaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with nonunion -S42023P Displaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with malunion -S42023S Displaced fracture of shaft of unspecified clavicle, sequela -S42024A Nondisplaced fracture of shaft of right clavicle, initial encounter for closed fracture -S42024B Nondisplaced fracture of shaft of right clavicle, initial encounter for open fracture -S42024D Nondisplaced fracture of shaft of right clavicle, subsequent encounter for fracture with routine healing -S42024G Nondisplaced fracture of shaft of right clavicle, subsequent encounter for fracture with delayed healing -S42024K Nondisplaced fracture of shaft of right clavicle, subsequent encounter for fracture with nonunion -S42024P Nondisplaced fracture of shaft of right clavicle, subsequent encounter for fracture with malunion -S42024S Nondisplaced fracture of shaft of right clavicle, sequela -S42025A Nondisplaced fracture of shaft of left clavicle, initial encounter for closed fracture -S42025B Nondisplaced fracture of shaft of left clavicle, initial encounter for open fracture -S42025D Nondisplaced fracture of shaft of left clavicle, subsequent encounter for fracture with routine healing -S42025G Nondisplaced fracture of shaft of left clavicle, subsequent encounter for fracture with delayed healing -S42025K Nondisplaced fracture of shaft of left clavicle, subsequent encounter for fracture with nonunion -S42025P Nondisplaced fracture of shaft of left clavicle, subsequent encounter for fracture with malunion -S42025S Nondisplaced fracture of shaft of left clavicle, sequela -S42026A Nondisplaced fracture of shaft of unspecified clavicle, initial encounter for closed fracture -S42026B Nondisplaced fracture of shaft of unspecified clavicle, initial encounter for open fracture -S42026D Nondisplaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with routine healing -S42026G Nondisplaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42026K Nondisplaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with nonunion -S42026P Nondisplaced fracture of shaft of unspecified clavicle, subsequent encounter for fracture with malunion -S42026S Nondisplaced fracture of shaft of unspecified clavicle, sequela -S42031A Displaced fracture of lateral end of right clavicle, initial encounter for closed fracture -S42031B Displaced fracture of lateral end of right clavicle, initial encounter for open fracture -S42031D Displaced fracture of lateral end of right clavicle, subsequent encounter for fracture with routine healing -S42031G Displaced fracture of lateral end of right clavicle, subsequent encounter for fracture with delayed healing -S42031K Displaced fracture of lateral end of right clavicle, subsequent encounter for fracture with nonunion -S42031P Displaced fracture of lateral end of right clavicle, subsequent encounter for fracture with malunion -S42031S Displaced fracture of lateral end of right clavicle, sequela -S42032A Displaced fracture of lateral end of left clavicle, initial encounter for closed fracture -S42032B Displaced fracture of lateral end of left clavicle, initial encounter for open fracture -S42032D Displaced fracture of lateral end of left clavicle, subsequent encounter for fracture with routine healing -S42032G Displaced fracture of lateral end of left clavicle, subsequent encounter for fracture with delayed healing -S42032K Displaced fracture of lateral end of left clavicle, subsequent encounter for fracture with nonunion -S42032P Displaced fracture of lateral end of left clavicle, subsequent encounter for fracture with malunion -S42032S Displaced fracture of lateral end of left clavicle, sequela -S42033A Displaced fracture of lateral end of unspecified clavicle, initial encounter for closed fracture -S42033B Displaced fracture of lateral end of unspecified clavicle, initial encounter for open fracture -S42033D Displaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with routine healing -S42033G Displaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42033K Displaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with nonunion -S42033P Displaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with malunion -S42033S Displaced fracture of lateral end of unspecified clavicle, sequela -S42034A Nondisplaced fracture of lateral end of right clavicle, initial encounter for closed fracture -S42034B Nondisplaced fracture of lateral end of right clavicle, initial encounter for open fracture -S42034D Nondisplaced fracture of lateral end of right clavicle, subsequent encounter for fracture with routine healing -S42034G Nondisplaced fracture of lateral end of right clavicle, subsequent encounter for fracture with delayed healing -S42034K Nondisplaced fracture of lateral end of right clavicle, subsequent encounter for fracture with nonunion -S42034P Nondisplaced fracture of lateral end of right clavicle, subsequent encounter for fracture with malunion -S42034S Nondisplaced fracture of lateral end of right clavicle, sequela -S42035A Nondisplaced fracture of lateral end of left clavicle, initial encounter for closed fracture -S42035B Nondisplaced fracture of lateral end of left clavicle, initial encounter for open fracture -S42035D Nondisplaced fracture of lateral end of left clavicle, subsequent encounter for fracture with routine healing -S42035G Nondisplaced fracture of lateral end of left clavicle, subsequent encounter for fracture with delayed healing -S42035K Nondisplaced fracture of lateral end of left clavicle, subsequent encounter for fracture with nonunion -S42035P Nondisplaced fracture of lateral end of left clavicle, subsequent encounter for fracture with malunion -S42035S Nondisplaced fracture of lateral end of left clavicle, sequela -S42036A Nondisplaced fracture of lateral end of unspecified clavicle, initial encounter for closed fracture -S42036B Nondisplaced fracture of lateral end of unspecified clavicle, initial encounter for open fracture -S42036D Nondisplaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with routine healing -S42036G Nondisplaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with delayed healing -S42036K Nondisplaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with nonunion -S42036P Nondisplaced fracture of lateral end of unspecified clavicle, subsequent encounter for fracture with malunion -S42036S Nondisplaced fracture of lateral end of unspecified clavicle, sequela -S42101A Fracture of unspecified part of scapula, right shoulder, initial encounter for closed fracture -S42101B Fracture of unspecified part of scapula, right shoulder, initial encounter for open fracture -S42101D Fracture of unspecified part of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42101G Fracture of unspecified part of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42101K Fracture of unspecified part of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42101P Fracture of unspecified part of scapula, right shoulder, subsequent encounter for fracture with malunion -S42101S Fracture of unspecified part of scapula, right shoulder, sequela -S42102A Fracture of unspecified part of scapula, left shoulder, initial encounter for closed fracture -S42102B Fracture of unspecified part of scapula, left shoulder, initial encounter for open fracture -S42102D Fracture of unspecified part of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42102G Fracture of unspecified part of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42102K Fracture of unspecified part of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42102P Fracture of unspecified part of scapula, left shoulder, subsequent encounter for fracture with malunion -S42102S Fracture of unspecified part of scapula, left shoulder, sequela -S42109A Fracture of unspecified part of scapula, unspecified shoulder, initial encounter for closed fracture -S42109B Fracture of unspecified part of scapula, unspecified shoulder, initial encounter for open fracture -S42109D Fracture of unspecified part of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42109G Fracture of unspecified part of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42109K Fracture of unspecified part of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42109P Fracture of unspecified part of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42109S Fracture of unspecified part of scapula, unspecified shoulder, sequela -S42111A Displaced fracture of body of scapula, right shoulder, initial encounter for closed fracture -S42111B Displaced fracture of body of scapula, right shoulder, initial encounter for open fracture -S42111D Displaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42111G Displaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42111K Displaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42111P Displaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with malunion -S42111S Displaced fracture of body of scapula, right shoulder, sequela -S42112A Displaced fracture of body of scapula, left shoulder, initial encounter for closed fracture -S42112B Displaced fracture of body of scapula, left shoulder, initial encounter for open fracture -S42112D Displaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42112G Displaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42112K Displaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42112P Displaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with malunion -S42112S Displaced fracture of body of scapula, left shoulder, sequela -S42113A Displaced fracture of body of scapula, unspecified shoulder, initial encounter for closed fracture -S42113B Displaced fracture of body of scapula, unspecified shoulder, initial encounter for open fracture -S42113D Displaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42113G Displaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42113K Displaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42113P Displaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42113S Displaced fracture of body of scapula, unspecified shoulder, sequela -S42114A Nondisplaced fracture of body of scapula, right shoulder, initial encounter for closed fracture -S42114B Nondisplaced fracture of body of scapula, right shoulder, initial encounter for open fracture -S42114D Nondisplaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42114G Nondisplaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42114K Nondisplaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42114P Nondisplaced fracture of body of scapula, right shoulder, subsequent encounter for fracture with malunion -S42114S Nondisplaced fracture of body of scapula, right shoulder, sequela -S42115A Nondisplaced fracture of body of scapula, left shoulder, initial encounter for closed fracture -S42115B Nondisplaced fracture of body of scapula, left shoulder, initial encounter for open fracture -S42115D Nondisplaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42115G Nondisplaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42115K Nondisplaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42115P Nondisplaced fracture of body of scapula, left shoulder, subsequent encounter for fracture with malunion -S42115S Nondisplaced fracture of body of scapula, left shoulder, sequela -S42116A Nondisplaced fracture of body of scapula, unspecified shoulder, initial encounter for closed fracture -S42116B Nondisplaced fracture of body of scapula, unspecified shoulder, initial encounter for open fracture -S42116D Nondisplaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42116G Nondisplaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42116K Nondisplaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42116P Nondisplaced fracture of body of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42116S Nondisplaced fracture of body of scapula, unspecified shoulder, sequela -S42121A Displaced fracture of acromial process, right shoulder, initial encounter for closed fracture -S42121B Displaced fracture of acromial process, right shoulder, initial encounter for open fracture -S42121D Displaced fracture of acromial process, right shoulder, subsequent encounter for fracture with routine healing -S42121G Displaced fracture of acromial process, right shoulder, subsequent encounter for fracture with delayed healing -S42121K Displaced fracture of acromial process, right shoulder, subsequent encounter for fracture with nonunion -S42121P Displaced fracture of acromial process, right shoulder, subsequent encounter for fracture with malunion -S42121S Displaced fracture of acromial process, right shoulder, sequela -S42122A Displaced fracture of acromial process, left shoulder, initial encounter for closed fracture -S42122B Displaced fracture of acromial process, left shoulder, initial encounter for open fracture -S42122D Displaced fracture of acromial process, left shoulder, subsequent encounter for fracture with routine healing -S42122G Displaced fracture of acromial process, left shoulder, subsequent encounter for fracture with delayed healing -S42122K Displaced fracture of acromial process, left shoulder, subsequent encounter for fracture with nonunion -S42122P Displaced fracture of acromial process, left shoulder, subsequent encounter for fracture with malunion -S42122S Displaced fracture of acromial process, left shoulder, sequela -S42123A Displaced fracture of acromial process, unspecified shoulder, initial encounter for closed fracture -S42123B Displaced fracture of acromial process, unspecified shoulder, initial encounter for open fracture -S42123D Displaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with routine healing -S42123G Displaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42123K Displaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with nonunion -S42123P Displaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with malunion -S42123S Displaced fracture of acromial process, unspecified shoulder, sequela -S42124A Nondisplaced fracture of acromial process, right shoulder, initial encounter for closed fracture -S42124B Nondisplaced fracture of acromial process, right shoulder, initial encounter for open fracture -S42124D Nondisplaced fracture of acromial process, right shoulder, subsequent encounter for fracture with routine healing -S42124G Nondisplaced fracture of acromial process, right shoulder, subsequent encounter for fracture with delayed healing -S42124K Nondisplaced fracture of acromial process, right shoulder, subsequent encounter for fracture with nonunion -S42124P Nondisplaced fracture of acromial process, right shoulder, subsequent encounter for fracture with malunion -S42124S Nondisplaced fracture of acromial process, right shoulder, sequela -S42125A Nondisplaced fracture of acromial process, left shoulder, initial encounter for closed fracture -S42125B Nondisplaced fracture of acromial process, left shoulder, initial encounter for open fracture -S42125D Nondisplaced fracture of acromial process, left shoulder, subsequent encounter for fracture with routine healing -S42125G Nondisplaced fracture of acromial process, left shoulder, subsequent encounter for fracture with delayed healing -S42125K Nondisplaced fracture of acromial process, left shoulder, subsequent encounter for fracture with nonunion -S42125P Nondisplaced fracture of acromial process, left shoulder, subsequent encounter for fracture with malunion -S42125S Nondisplaced fracture of acromial process, left shoulder, sequela -S42126A Nondisplaced fracture of acromial process, unspecified shoulder, initial encounter for closed fracture -S42126B Nondisplaced fracture of acromial process, unspecified shoulder, initial encounter for open fracture -S42126D Nondisplaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with routine healing -S42126G Nondisplaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42126K Nondisplaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with nonunion -S42126P Nondisplaced fracture of acromial process, unspecified shoulder, subsequent encounter for fracture with malunion -S42126S Nondisplaced fracture of acromial process, unspecified shoulder, sequela -S42131A Displaced fracture of coracoid process, right shoulder, initial encounter for closed fracture -S42131B Displaced fracture of coracoid process, right shoulder, initial encounter for open fracture -S42131D Displaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with routine healing -S42131G Displaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with delayed healing -S42131K Displaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with nonunion -S42131P Displaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with malunion -S42131S Displaced fracture of coracoid process, right shoulder, sequela -S42132A Displaced fracture of coracoid process, left shoulder, initial encounter for closed fracture -S42132B Displaced fracture of coracoid process, left shoulder, initial encounter for open fracture -S42132D Displaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with routine healing -S42132G Displaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with delayed healing -S42132K Displaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with nonunion -S42132P Displaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with malunion -S42132S Displaced fracture of coracoid process, left shoulder, sequela -S42133A Displaced fracture of coracoid process, unspecified shoulder, initial encounter for closed fracture -S42133B Displaced fracture of coracoid process, unspecified shoulder, initial encounter for open fracture -S42133D Displaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with routine healing -S42133G Displaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42133K Displaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with nonunion -S42133P Displaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with malunion -S42133S Displaced fracture of coracoid process, unspecified shoulder, sequela -S42134A Nondisplaced fracture of coracoid process, right shoulder, initial encounter for closed fracture -S42134B Nondisplaced fracture of coracoid process, right shoulder, initial encounter for open fracture -S42134D Nondisplaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with routine healing -S42134G Nondisplaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with delayed healing -S42134K Nondisplaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with nonunion -S42134P Nondisplaced fracture of coracoid process, right shoulder, subsequent encounter for fracture with malunion -S42134S Nondisplaced fracture of coracoid process, right shoulder, sequela -S42135A Nondisplaced fracture of coracoid process, left shoulder, initial encounter for closed fracture -S42135B Nondisplaced fracture of coracoid process, left shoulder, initial encounter for open fracture -S42135D Nondisplaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with routine healing -S42135G Nondisplaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with delayed healing -S42135K Nondisplaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with nonunion -S42135P Nondisplaced fracture of coracoid process, left shoulder, subsequent encounter for fracture with malunion -S42135S Nondisplaced fracture of coracoid process, left shoulder, sequela -S42136A Nondisplaced fracture of coracoid process, unspecified shoulder, initial encounter for closed fracture -S42136B Nondisplaced fracture of coracoid process, unspecified shoulder, initial encounter for open fracture -S42136D Nondisplaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with routine healing -S42136G Nondisplaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42136K Nondisplaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with nonunion -S42136P Nondisplaced fracture of coracoid process, unspecified shoulder, subsequent encounter for fracture with malunion -S42136S Nondisplaced fracture of coracoid process, unspecified shoulder, sequela -S42141A Displaced fracture of glenoid cavity of scapula, right shoulder, initial encounter for closed fracture -S42141B Displaced fracture of glenoid cavity of scapula, right shoulder, initial encounter for open fracture -S42141D Displaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42141G Displaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42141K Displaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42141P Displaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with malunion -S42141S Displaced fracture of glenoid cavity of scapula, right shoulder, sequela -S42142A Displaced fracture of glenoid cavity of scapula, left shoulder, initial encounter for closed fracture -S42142B Displaced fracture of glenoid cavity of scapula, left shoulder, initial encounter for open fracture -S42142D Displaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42142G Displaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42142K Displaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42142P Displaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with malunion -S42142S Displaced fracture of glenoid cavity of scapula, left shoulder, sequela -S42143A Displaced fracture of glenoid cavity of scapula, unspecified shoulder, initial encounter for closed fracture -S42143B Displaced fracture of glenoid cavity of scapula, unspecified shoulder, initial encounter for open fracture -S42143D Displaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42143G Displaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42143K Displaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42143P Displaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42143S Displaced fracture of glenoid cavity of scapula, unspecified shoulder, sequela -S42144A Nondisplaced fracture of glenoid cavity of scapula, right shoulder, initial encounter for closed fracture -S42144B Nondisplaced fracture of glenoid cavity of scapula, right shoulder, initial encounter for open fracture -S42144D Nondisplaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42144G Nondisplaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42144K Nondisplaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42144P Nondisplaced fracture of glenoid cavity of scapula, right shoulder, subsequent encounter for fracture with malunion -S42144S Nondisplaced fracture of glenoid cavity of scapula, right shoulder, sequela -S42145A Nondisplaced fracture of glenoid cavity of scapula, left shoulder, initial encounter for closed fracture -S42145B Nondisplaced fracture of glenoid cavity of scapula, left shoulder, initial encounter for open fracture -S42145D Nondisplaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42145G Nondisplaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42145K Nondisplaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42145P Nondisplaced fracture of glenoid cavity of scapula, left shoulder, subsequent encounter for fracture with malunion -S42145S Nondisplaced fracture of glenoid cavity of scapula, left shoulder, sequela -S42146A Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, initial encounter for closed fracture -S42146B Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, initial encounter for open fracture -S42146D Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42146G Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42146K Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42146P Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42146S Nondisplaced fracture of glenoid cavity of scapula, unspecified shoulder, sequela -S42151A Displaced fracture of neck of scapula, right shoulder, initial encounter for closed fracture -S42151B Displaced fracture of neck of scapula, right shoulder, initial encounter for open fracture -S42151D Displaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42151G Displaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42151K Displaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42151P Displaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with malunion -S42151S Displaced fracture of neck of scapula, right shoulder, sequela -S42152A Displaced fracture of neck of scapula, left shoulder, initial encounter for closed fracture -S42152B Displaced fracture of neck of scapula, left shoulder, initial encounter for open fracture -S42152D Displaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42152G Displaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42152K Displaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42152P Displaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with malunion -S42152S Displaced fracture of neck of scapula, left shoulder, sequela -S42153A Displaced fracture of neck of scapula, unspecified shoulder, initial encounter for closed fracture -S42153B Displaced fracture of neck of scapula, unspecified shoulder, initial encounter for open fracture -S42153D Displaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42153G Displaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42153K Displaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42153P Displaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42153S Displaced fracture of neck of scapula, unspecified shoulder, sequela -S42154A Nondisplaced fracture of neck of scapula, right shoulder, initial encounter for closed fracture -S42154B Nondisplaced fracture of neck of scapula, right shoulder, initial encounter for open fracture -S42154D Nondisplaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42154G Nondisplaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42154K Nondisplaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42154P Nondisplaced fracture of neck of scapula, right shoulder, subsequent encounter for fracture with malunion -S42154S Nondisplaced fracture of neck of scapula, right shoulder, sequela -S42155A Nondisplaced fracture of neck of scapula, left shoulder, initial encounter for closed fracture -S42155B Nondisplaced fracture of neck of scapula, left shoulder, initial encounter for open fracture -S42155D Nondisplaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42155G Nondisplaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42155K Nondisplaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42155P Nondisplaced fracture of neck of scapula, left shoulder, subsequent encounter for fracture with malunion -S42155S Nondisplaced fracture of neck of scapula, left shoulder, sequela -S42156A Nondisplaced fracture of neck of scapula, unspecified shoulder, initial encounter for closed fracture -S42156B Nondisplaced fracture of neck of scapula, unspecified shoulder, initial encounter for open fracture -S42156D Nondisplaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42156G Nondisplaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42156K Nondisplaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42156P Nondisplaced fracture of neck of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42156S Nondisplaced fracture of neck of scapula, unspecified shoulder, sequela -S42191A Fracture of other part of scapula, right shoulder, initial encounter for closed fracture -S42191B Fracture of other part of scapula, right shoulder, initial encounter for open fracture -S42191D Fracture of other part of scapula, right shoulder, subsequent encounter for fracture with routine healing -S42191G Fracture of other part of scapula, right shoulder, subsequent encounter for fracture with delayed healing -S42191K Fracture of other part of scapula, right shoulder, subsequent encounter for fracture with nonunion -S42191P Fracture of other part of scapula, right shoulder, subsequent encounter for fracture with malunion -S42191S Fracture of other part of scapula, right shoulder, sequela -S42192A Fracture of other part of scapula, left shoulder, initial encounter for closed fracture -S42192B Fracture of other part of scapula, left shoulder, initial encounter for open fracture -S42192D Fracture of other part of scapula, left shoulder, subsequent encounter for fracture with routine healing -S42192G Fracture of other part of scapula, left shoulder, subsequent encounter for fracture with delayed healing -S42192K Fracture of other part of scapula, left shoulder, subsequent encounter for fracture with nonunion -S42192P Fracture of other part of scapula, left shoulder, subsequent encounter for fracture with malunion -S42192S Fracture of other part of scapula, left shoulder, sequela -S42199A Fracture of other part of scapula, unspecified shoulder, initial encounter for closed fracture -S42199B Fracture of other part of scapula, unspecified shoulder, initial encounter for open fracture -S42199D Fracture of other part of scapula, unspecified shoulder, subsequent encounter for fracture with routine healing -S42199G Fracture of other part of scapula, unspecified shoulder, subsequent encounter for fracture with delayed healing -S42199K Fracture of other part of scapula, unspecified shoulder, subsequent encounter for fracture with nonunion -S42199P Fracture of other part of scapula, unspecified shoulder, subsequent encounter for fracture with malunion -S42199S Fracture of other part of scapula, unspecified shoulder, sequela -S42201A Unspecified fracture of upper end of right humerus, initial encounter for closed fracture -S42201B Unspecified fracture of upper end of right humerus, initial encounter for open fracture -S42201D Unspecified fracture of upper end of right humerus, subsequent encounter for fracture with routine healing -S42201G Unspecified fracture of upper end of right humerus, subsequent encounter for fracture with delayed healing -S42201K Unspecified fracture of upper end of right humerus, subsequent encounter for fracture with nonunion -S42201P Unspecified fracture of upper end of right humerus, subsequent encounter for fracture with malunion -S42201S Unspecified fracture of upper end of right humerus, sequela -S42202A Unspecified fracture of upper end of left humerus, initial encounter for closed fracture -S42202B Unspecified fracture of upper end of left humerus, initial encounter for open fracture -S42202D Unspecified fracture of upper end of left humerus, subsequent encounter for fracture with routine healing -S42202G Unspecified fracture of upper end of left humerus, subsequent encounter for fracture with delayed healing -S42202K Unspecified fracture of upper end of left humerus, subsequent encounter for fracture with nonunion -S42202P Unspecified fracture of upper end of left humerus, subsequent encounter for fracture with malunion -S42202S Unspecified fracture of upper end of left humerus, sequela -S42209A Unspecified fracture of upper end of unspecified humerus, initial encounter for closed fracture -S42209B Unspecified fracture of upper end of unspecified humerus, initial encounter for open fracture -S42209D Unspecified fracture of upper end of unspecified humerus, subsequent encounter for fracture with routine healing -S42209G Unspecified fracture of upper end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42209K Unspecified fracture of upper end of unspecified humerus, subsequent encounter for fracture with nonunion -S42209P Unspecified fracture of upper end of unspecified humerus, subsequent encounter for fracture with malunion -S42209S Unspecified fracture of upper end of unspecified humerus, sequela -S42211A Unspecified displaced fracture of surgical neck of right humerus, initial encounter for closed fracture -S42211B Unspecified displaced fracture of surgical neck of right humerus, initial encounter for open fracture -S42211D Unspecified displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42211G Unspecified displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42211K Unspecified displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42211P Unspecified displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42211S Unspecified displaced fracture of surgical neck of right humerus, sequela -S42212A Unspecified displaced fracture of surgical neck of left humerus, initial encounter for closed fracture -S42212B Unspecified displaced fracture of surgical neck of left humerus, initial encounter for open fracture -S42212D Unspecified displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42212G Unspecified displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42212K Unspecified displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42212P Unspecified displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42212S Unspecified displaced fracture of surgical neck of left humerus, sequela -S42213A Unspecified displaced fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42213B Unspecified displaced fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42213D Unspecified displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42213G Unspecified displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42213K Unspecified displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42213P Unspecified displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42213S Unspecified displaced fracture of surgical neck of unspecified humerus, sequela -S42214A Unspecified nondisplaced fracture of surgical neck of right humerus, initial encounter for closed fracture -S42214B Unspecified nondisplaced fracture of surgical neck of right humerus, initial encounter for open fracture -S42214D Unspecified nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42214G Unspecified nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42214K Unspecified nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42214P Unspecified nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42214S Unspecified nondisplaced fracture of surgical neck of right humerus, sequela -S42215A Unspecified nondisplaced fracture of surgical neck of left humerus, initial encounter for closed fracture -S42215B Unspecified nondisplaced fracture of surgical neck of left humerus, initial encounter for open fracture -S42215D Unspecified nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42215G Unspecified nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42215K Unspecified nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42215P Unspecified nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42215S Unspecified nondisplaced fracture of surgical neck of left humerus, sequela -S42216A Unspecified nondisplaced fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42216B Unspecified nondisplaced fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42216D Unspecified nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42216G Unspecified nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42216K Unspecified nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42216P Unspecified nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42216S Unspecified nondisplaced fracture of surgical neck of unspecified humerus, sequela -S42221A 2-part displaced fracture of surgical neck of right humerus, initial encounter for closed fracture -S42221B 2-part displaced fracture of surgical neck of right humerus, initial encounter for open fracture -S42221D 2-part displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42221G 2-part displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42221K 2-part displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42221P 2-part displaced fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42221S 2-part displaced fracture of surgical neck of right humerus, sequela -S42222A 2-part displaced fracture of surgical neck of left humerus, initial encounter for closed fracture -S42222B 2-part displaced fracture of surgical neck of left humerus, initial encounter for open fracture -S42222D 2-part displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42222G 2-part displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42222K 2-part displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42222P 2-part displaced fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42222S 2-part displaced fracture of surgical neck of left humerus, sequela -S42223A 2-part displaced fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42223B 2-part displaced fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42223D 2-part displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42223G 2-part displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42223K 2-part displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42223P 2-part displaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42223S 2-part displaced fracture of surgical neck of unspecified humerus, sequela -S42224A 2-part nondisplaced fracture of surgical neck of right humerus, initial encounter for closed fracture -S42224B 2-part nondisplaced fracture of surgical neck of right humerus, initial encounter for open fracture -S42224D 2-part nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42224G 2-part nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42224K 2-part nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42224P 2-part nondisplaced fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42224S 2-part nondisplaced fracture of surgical neck of right humerus, sequela -S42225A 2-part nondisplaced fracture of surgical neck of left humerus, initial encounter for closed fracture -S42225B 2-part nondisplaced fracture of surgical neck of left humerus, initial encounter for open fracture -S42225D 2-part nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42225G 2-part nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42225K 2-part nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42225P 2-part nondisplaced fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42225S 2-part nondisplaced fracture of surgical neck of left humerus, sequela -S42226A 2-part nondisplaced fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42226B 2-part nondisplaced fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42226D 2-part nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42226G 2-part nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42226K 2-part nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42226P 2-part nondisplaced fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42226S 2-part nondisplaced fracture of surgical neck of unspecified humerus, sequela -S42231A 3-part fracture of surgical neck of right humerus, initial encounter for closed fracture -S42231B 3-part fracture of surgical neck of right humerus, initial encounter for open fracture -S42231D 3-part fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42231G 3-part fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42231K 3-part fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42231P 3-part fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42231S 3-part fracture of surgical neck of right humerus, sequela -S42232A 3-part fracture of surgical neck of left humerus, initial encounter for closed fracture -S42232B 3-part fracture of surgical neck of left humerus, initial encounter for open fracture -S42232D 3-part fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42232G 3-part fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42232K 3-part fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42232P 3-part fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42232S 3-part fracture of surgical neck of left humerus, sequela -S42239A 3-part fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42239B 3-part fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42239D 3-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42239G 3-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42239K 3-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42239P 3-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42239S 3-part fracture of surgical neck of unspecified humerus, sequela -S42241A 4-part fracture of surgical neck of right humerus, initial encounter for closed fracture -S42241B 4-part fracture of surgical neck of right humerus, initial encounter for open fracture -S42241D 4-part fracture of surgical neck of right humerus, subsequent encounter for fracture with routine healing -S42241G 4-part fracture of surgical neck of right humerus, subsequent encounter for fracture with delayed healing -S42241K 4-part fracture of surgical neck of right humerus, subsequent encounter for fracture with nonunion -S42241P 4-part fracture of surgical neck of right humerus, subsequent encounter for fracture with malunion -S42241S 4-part fracture of surgical neck of right humerus, sequela -S42242A 4-part fracture of surgical neck of left humerus, initial encounter for closed fracture -S42242B 4-part fracture of surgical neck of left humerus, initial encounter for open fracture -S42242D 4-part fracture of surgical neck of left humerus, subsequent encounter for fracture with routine healing -S42242G 4-part fracture of surgical neck of left humerus, subsequent encounter for fracture with delayed healing -S42242K 4-part fracture of surgical neck of left humerus, subsequent encounter for fracture with nonunion -S42242P 4-part fracture of surgical neck of left humerus, subsequent encounter for fracture with malunion -S42242S 4-part fracture of surgical neck of left humerus, sequela -S42249A 4-part fracture of surgical neck of unspecified humerus, initial encounter for closed fracture -S42249B 4-part fracture of surgical neck of unspecified humerus, initial encounter for open fracture -S42249D 4-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with routine healing -S42249G 4-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with delayed healing -S42249K 4-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with nonunion -S42249P 4-part fracture of surgical neck of unspecified humerus, subsequent encounter for fracture with malunion -S42249S 4-part fracture of surgical neck of unspecified humerus, sequela -S42251A Displaced fracture of greater tuberosity of right humerus, initial encounter for closed fracture -S42251B Displaced fracture of greater tuberosity of right humerus, initial encounter for open fracture -S42251D Displaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with routine healing -S42251G Displaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with delayed healing -S42251K Displaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with nonunion -S42251P Displaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with malunion -S42251S Displaced fracture of greater tuberosity of right humerus, sequela -S42252A Displaced fracture of greater tuberosity of left humerus, initial encounter for closed fracture -S42252B Displaced fracture of greater tuberosity of left humerus, initial encounter for open fracture -S42252D Displaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with routine healing -S42252G Displaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with delayed healing -S42252K Displaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with nonunion -S42252P Displaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with malunion -S42252S Displaced fracture of greater tuberosity of left humerus, sequela -S42253A Displaced fracture of greater tuberosity of unspecified humerus, initial encounter for closed fracture -S42253B Displaced fracture of greater tuberosity of unspecified humerus, initial encounter for open fracture -S42253D Displaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with routine healing -S42253G Displaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with delayed healing -S42253K Displaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with nonunion -S42253P Displaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with malunion -S42253S Displaced fracture of greater tuberosity of unspecified humerus, sequela -S42254A Nondisplaced fracture of greater tuberosity of right humerus, initial encounter for closed fracture -S42254B Nondisplaced fracture of greater tuberosity of right humerus, initial encounter for open fracture -S42254D Nondisplaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with routine healing -S42254G Nondisplaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with delayed healing -S42254K Nondisplaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with nonunion -S42254P Nondisplaced fracture of greater tuberosity of right humerus, subsequent encounter for fracture with malunion -S42254S Nondisplaced fracture of greater tuberosity of right humerus, sequela -S42255A Nondisplaced fracture of greater tuberosity of left humerus, initial encounter for closed fracture -S42255B Nondisplaced fracture of greater tuberosity of left humerus, initial encounter for open fracture -S42255D Nondisplaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with routine healing -S42255G Nondisplaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with delayed healing -S42255K Nondisplaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with nonunion -S42255P Nondisplaced fracture of greater tuberosity of left humerus, subsequent encounter for fracture with malunion -S42255S Nondisplaced fracture of greater tuberosity of left humerus, sequela -S42256A Nondisplaced fracture of greater tuberosity of unspecified humerus, initial encounter for closed fracture -S42256B Nondisplaced fracture of greater tuberosity of unspecified humerus, initial encounter for open fracture -S42256D Nondisplaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with routine healing -S42256G Nondisplaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with delayed healing -S42256K Nondisplaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with nonunion -S42256P Nondisplaced fracture of greater tuberosity of unspecified humerus, subsequent encounter for fracture with malunion -S42256S Nondisplaced fracture of greater tuberosity of unspecified humerus, sequela -S42261A Displaced fracture of lesser tuberosity of right humerus, initial encounter for closed fracture -S42261B Displaced fracture of lesser tuberosity of right humerus, initial encounter for open fracture -S42261D Displaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with routine healing -S42261G Displaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with delayed healing -S42261K Displaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with nonunion -S42261P Displaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with malunion -S42261S Displaced fracture of lesser tuberosity of right humerus, sequela -S42262A Displaced fracture of lesser tuberosity of left humerus, initial encounter for closed fracture -S42262B Displaced fracture of lesser tuberosity of left humerus, initial encounter for open fracture -S42262D Displaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with routine healing -S42262G Displaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with delayed healing -S42262K Displaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with nonunion -S42262P Displaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with malunion -S42262S Displaced fracture of lesser tuberosity of left humerus, sequela -S42263A Displaced fracture of lesser tuberosity of unspecified humerus, initial encounter for closed fracture -S42263B Displaced fracture of lesser tuberosity of unspecified humerus, initial encounter for open fracture -S42263D Displaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with routine healing -S42263G Displaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with delayed healing -S42263K Displaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with nonunion -S42263P Displaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with malunion -S42263S Displaced fracture of lesser tuberosity of unspecified humerus, sequela -S42264A Nondisplaced fracture of lesser tuberosity of right humerus, initial encounter for closed fracture -S42264B Nondisplaced fracture of lesser tuberosity of right humerus, initial encounter for open fracture -S42264D Nondisplaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with routine healing -S42264G Nondisplaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with delayed healing -S42264K Nondisplaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with nonunion -S42264P Nondisplaced fracture of lesser tuberosity of right humerus, subsequent encounter for fracture with malunion -S42264S Nondisplaced fracture of lesser tuberosity of right humerus, sequela -S42265A Nondisplaced fracture of lesser tuberosity of left humerus, initial encounter for closed fracture -S42265B Nondisplaced fracture of lesser tuberosity of left humerus, initial encounter for open fracture -S42265D Nondisplaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with routine healing -S42265G Nondisplaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with delayed healing -S42265K Nondisplaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with nonunion -S42265P Nondisplaced fracture of lesser tuberosity of left humerus, subsequent encounter for fracture with malunion -S42265S Nondisplaced fracture of lesser tuberosity of left humerus, sequela -S42266A Nondisplaced fracture of lesser tuberosity of unspecified humerus, initial encounter for closed fracture -S42266B Nondisplaced fracture of lesser tuberosity of unspecified humerus, initial encounter for open fracture -S42266D Nondisplaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with routine healing -S42266G Nondisplaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with delayed healing -S42266K Nondisplaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with nonunion -S42266P Nondisplaced fracture of lesser tuberosity of unspecified humerus, subsequent encounter for fracture with malunion -S42266S Nondisplaced fracture of lesser tuberosity of unspecified humerus, sequela -S42271A Torus fracture of upper end of right humerus, initial encounter for closed fracture -S42271D Torus fracture of upper end of right humerus, subsequent encounter for fracture with routine healing -S42271G Torus fracture of upper end of right humerus, subsequent encounter for fracture with delayed healing -S42271K Torus fracture of upper end of right humerus, subsequent encounter for fracture with nonunion -S42271P Torus fracture of upper end of right humerus, subsequent encounter for fracture with malunion -S42271S Torus fracture of upper end of right humerus, sequela -S42272A Torus fracture of upper end of left humerus, initial encounter for closed fracture -S42272D Torus fracture of upper end of left humerus, subsequent encounter for fracture with routine healing -S42272G Torus fracture of upper end of left humerus, subsequent encounter for fracture with delayed healing -S42272K Torus fracture of upper end of left humerus, subsequent encounter for fracture with nonunion -S42272P Torus fracture of upper end of left humerus, subsequent encounter for fracture with malunion -S42272S Torus fracture of upper end of left humerus, sequela -S42279A Torus fracture of upper end of unspecified humerus, initial encounter for closed fracture -S42279D Torus fracture of upper end of unspecified humerus, subsequent encounter for fracture with routine healing -S42279G Torus fracture of upper end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42279K Torus fracture of upper end of unspecified humerus, subsequent encounter for fracture with nonunion -S42279P Torus fracture of upper end of unspecified humerus, subsequent encounter for fracture with malunion -S42279S Torus fracture of upper end of unspecified humerus, sequela -S42291A Other displaced fracture of upper end of right humerus, initial encounter for closed fracture -S42291B Other displaced fracture of upper end of right humerus, initial encounter for open fracture -S42291D Other displaced fracture of upper end of right humerus, subsequent encounter for fracture with routine healing -S42291G Other displaced fracture of upper end of right humerus, subsequent encounter for fracture with delayed healing -S42291K Other displaced fracture of upper end of right humerus, subsequent encounter for fracture with nonunion -S42291P Other displaced fracture of upper end of right humerus, subsequent encounter for fracture with malunion -S42291S Other displaced fracture of upper end of right humerus, sequela -S42292A Other displaced fracture of upper end of left humerus, initial encounter for closed fracture -S42292B Other displaced fracture of upper end of left humerus, initial encounter for open fracture -S42292D Other displaced fracture of upper end of left humerus, subsequent encounter for fracture with routine healing -S42292G Other displaced fracture of upper end of left humerus, subsequent encounter for fracture with delayed healing -S42292K Other displaced fracture of upper end of left humerus, subsequent encounter for fracture with nonunion -S42292P Other displaced fracture of upper end of left humerus, subsequent encounter for fracture with malunion -S42292S Other displaced fracture of upper end of left humerus, sequela -S42293A Other displaced fracture of upper end of unspecified humerus, initial encounter for closed fracture -S42293B Other displaced fracture of upper end of unspecified humerus, initial encounter for open fracture -S42293D Other displaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with routine healing -S42293G Other displaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42293K Other displaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with nonunion -S42293P Other displaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with malunion -S42293S Other displaced fracture of upper end of unspecified humerus, sequela -S42294A Other nondisplaced fracture of upper end of right humerus, initial encounter for closed fracture -S42294B Other nondisplaced fracture of upper end of right humerus, initial encounter for open fracture -S42294D Other nondisplaced fracture of upper end of right humerus, subsequent encounter for fracture with routine healing -S42294G Other nondisplaced fracture of upper end of right humerus, subsequent encounter for fracture with delayed healing -S42294K Other nondisplaced fracture of upper end of right humerus, subsequent encounter for fracture with nonunion -S42294P Other nondisplaced fracture of upper end of right humerus, subsequent encounter for fracture with malunion -S42294S Other nondisplaced fracture of upper end of right humerus, sequela -S42295A Other nondisplaced fracture of upper end of left humerus, initial encounter for closed fracture -S42295B Other nondisplaced fracture of upper end of left humerus, initial encounter for open fracture -S42295D Other nondisplaced fracture of upper end of left humerus, subsequent encounter for fracture with routine healing -S42295G Other nondisplaced fracture of upper end of left humerus, subsequent encounter for fracture with delayed healing -S42295K Other nondisplaced fracture of upper end of left humerus, subsequent encounter for fracture with nonunion -S42295P Other nondisplaced fracture of upper end of left humerus, subsequent encounter for fracture with malunion -S42295S Other nondisplaced fracture of upper end of left humerus, sequela -S42296A Other nondisplaced fracture of upper end of unspecified humerus, initial encounter for closed fracture -S42296B Other nondisplaced fracture of upper end of unspecified humerus, initial encounter for open fracture -S42296D Other nondisplaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with routine healing -S42296G Other nondisplaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42296K Other nondisplaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with nonunion -S42296P Other nondisplaced fracture of upper end of unspecified humerus, subsequent encounter for fracture with malunion -S42296S Other nondisplaced fracture of upper end of unspecified humerus, sequela -S42301A Unspecified fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42301B Unspecified fracture of shaft of humerus, right arm, initial encounter for open fracture -S42301D Unspecified fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42301G Unspecified fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42301K Unspecified fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42301P Unspecified fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42301S Unspecified fracture of shaft of humerus, right arm, sequela -S42302A Unspecified fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42302B Unspecified fracture of shaft of humerus, left arm, initial encounter for open fracture -S42302D Unspecified fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42302G Unspecified fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42302K Unspecified fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42302P Unspecified fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42302S Unspecified fracture of shaft of humerus, left arm, sequela -S42309A Unspecified fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42309B Unspecified fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42309D Unspecified fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42309G Unspecified fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42309K Unspecified fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42309P Unspecified fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42309S Unspecified fracture of shaft of humerus, unspecified arm, sequela -S42311A Greenstick fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42311D Greenstick fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42311G Greenstick fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42311K Greenstick fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42311P Greenstick fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42311S Greenstick fracture of shaft of humerus, right arm, sequela -S42312A Greenstick fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42312D Greenstick fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42312G Greenstick fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42312K Greenstick fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42312P Greenstick fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42312S Greenstick fracture of shaft of humerus, left arm, sequela -S42319A Greenstick fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42319D Greenstick fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42319G Greenstick fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42319K Greenstick fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42319P Greenstick fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42319S Greenstick fracture of shaft of humerus, unspecified arm, sequela -S42321A Displaced transverse fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42321B Displaced transverse fracture of shaft of humerus, right arm, initial encounter for open fracture -S42321D Displaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42321G Displaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42321K Displaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42321P Displaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42321S Displaced transverse fracture of shaft of humerus, right arm, sequela -S42322A Displaced transverse fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42322B Displaced transverse fracture of shaft of humerus, left arm, initial encounter for open fracture -S42322D Displaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42322G Displaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42322K Displaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42322P Displaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42322S Displaced transverse fracture of shaft of humerus, left arm, sequela -S42323A Displaced transverse fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42323B Displaced transverse fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42323D Displaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42323G Displaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42323K Displaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42323P Displaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42323S Displaced transverse fracture of shaft of humerus, unspecified arm, sequela -S42324A Nondisplaced transverse fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42324B Nondisplaced transverse fracture of shaft of humerus, right arm, initial encounter for open fracture -S42324D Nondisplaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42324G Nondisplaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42324K Nondisplaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42324P Nondisplaced transverse fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42324S Nondisplaced transverse fracture of shaft of humerus, right arm, sequela -S42325A Nondisplaced transverse fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42325B Nondisplaced transverse fracture of shaft of humerus, left arm, initial encounter for open fracture -S42325D Nondisplaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42325G Nondisplaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42325K Nondisplaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42325P Nondisplaced transverse fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42325S Nondisplaced transverse fracture of shaft of humerus, left arm, sequela -S42326A Nondisplaced transverse fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42326B Nondisplaced transverse fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42326D Nondisplaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42326G Nondisplaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42326K Nondisplaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42326P Nondisplaced transverse fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42326S Nondisplaced transverse fracture of shaft of humerus, unspecified arm, sequela -S42331A Displaced oblique fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42331B Displaced oblique fracture of shaft of humerus, right arm, initial encounter for open fracture -S42331D Displaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42331G Displaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42331K Displaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42331P Displaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42331S Displaced oblique fracture of shaft of humerus, right arm, sequela -S42332A Displaced oblique fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42332B Displaced oblique fracture of shaft of humerus, left arm, initial encounter for open fracture -S42332D Displaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42332G Displaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42332K Displaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42332P Displaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42332S Displaced oblique fracture of shaft of humerus, left arm, sequela -S42333A Displaced oblique fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42333B Displaced oblique fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42333D Displaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42333G Displaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42333K Displaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42333P Displaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42333S Displaced oblique fracture of shaft of humerus, unspecified arm, sequela -S42334A Nondisplaced oblique fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42334B Nondisplaced oblique fracture of shaft of humerus, right arm, initial encounter for open fracture -S42334D Nondisplaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42334G Nondisplaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42334K Nondisplaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42334P Nondisplaced oblique fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42334S Nondisplaced oblique fracture of shaft of humerus, right arm, sequela -S42335A Nondisplaced oblique fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42335B Nondisplaced oblique fracture of shaft of humerus, left arm, initial encounter for open fracture -S42335D Nondisplaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42335G Nondisplaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42335K Nondisplaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42335P Nondisplaced oblique fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42335S Nondisplaced oblique fracture of shaft of humerus, left arm, sequela -S42336A Nondisplaced oblique fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42336B Nondisplaced oblique fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42336D Nondisplaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42336G Nondisplaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42336K Nondisplaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42336P Nondisplaced oblique fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42336S Nondisplaced oblique fracture of shaft of humerus, unspecified arm, sequela -S42341A Displaced spiral fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42341B Displaced spiral fracture of shaft of humerus, right arm, initial encounter for open fracture -S42341D Displaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42341G Displaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42341K Displaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42341P Displaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42341S Displaced spiral fracture of shaft of humerus, right arm, sequela -S42342A Displaced spiral fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42342B Displaced spiral fracture of shaft of humerus, left arm, initial encounter for open fracture -S42342D Displaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42342G Displaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42342K Displaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42342P Displaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42342S Displaced spiral fracture of shaft of humerus, left arm, sequela -S42343A Displaced spiral fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42343B Displaced spiral fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42343D Displaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42343G Displaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42343K Displaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42343P Displaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42343S Displaced spiral fracture of shaft of humerus, unspecified arm, sequela -S42344A Nondisplaced spiral fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42344B Nondisplaced spiral fracture of shaft of humerus, right arm, initial encounter for open fracture -S42344D Nondisplaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42344G Nondisplaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42344K Nondisplaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42344P Nondisplaced spiral fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42344S Nondisplaced spiral fracture of shaft of humerus, right arm, sequela -S42345A Nondisplaced spiral fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42345B Nondisplaced spiral fracture of shaft of humerus, left arm, initial encounter for open fracture -S42345D Nondisplaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42345G Nondisplaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42345K Nondisplaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42345P Nondisplaced spiral fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42345S Nondisplaced spiral fracture of shaft of humerus, left arm, sequela -S42346A Nondisplaced spiral fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42346B Nondisplaced spiral fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42346D Nondisplaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42346G Nondisplaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42346K Nondisplaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42346P Nondisplaced spiral fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42346S Nondisplaced spiral fracture of shaft of humerus, unspecified arm, sequela -S42351A Displaced comminuted fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42351B Displaced comminuted fracture of shaft of humerus, right arm, initial encounter for open fracture -S42351D Displaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42351G Displaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42351K Displaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42351P Displaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42351S Displaced comminuted fracture of shaft of humerus, right arm, sequela -S42352A Displaced comminuted fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42352B Displaced comminuted fracture of shaft of humerus, left arm, initial encounter for open fracture -S42352D Displaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42352G Displaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42352K Displaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42352P Displaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42352S Displaced comminuted fracture of shaft of humerus, left arm, sequela -S42353A Displaced comminuted fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42353B Displaced comminuted fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42353D Displaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42353G Displaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42353K Displaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42353P Displaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42353S Displaced comminuted fracture of shaft of humerus, unspecified arm, sequela -S42354A Nondisplaced comminuted fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42354B Nondisplaced comminuted fracture of shaft of humerus, right arm, initial encounter for open fracture -S42354D Nondisplaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42354G Nondisplaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42354K Nondisplaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42354P Nondisplaced comminuted fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42354S Nondisplaced comminuted fracture of shaft of humerus, right arm, sequela -S42355A Nondisplaced comminuted fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42355B Nondisplaced comminuted fracture of shaft of humerus, left arm, initial encounter for open fracture -S42355D Nondisplaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42355G Nondisplaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42355K Nondisplaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42355P Nondisplaced comminuted fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42355S Nondisplaced comminuted fracture of shaft of humerus, left arm, sequela -S42356A Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42356B Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42356D Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42356G Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42356K Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42356P Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42356S Nondisplaced comminuted fracture of shaft of humerus, unspecified arm, sequela -S42361A Displaced segmental fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42361B Displaced segmental fracture of shaft of humerus, right arm, initial encounter for open fracture -S42361D Displaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42361G Displaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42361K Displaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42361P Displaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42361S Displaced segmental fracture of shaft of humerus, right arm, sequela -S42362A Displaced segmental fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42362B Displaced segmental fracture of shaft of humerus, left arm, initial encounter for open fracture -S42362D Displaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42362G Displaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42362K Displaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42362P Displaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42362S Displaced segmental fracture of shaft of humerus, left arm, sequela -S42363A Displaced segmental fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42363B Displaced segmental fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42363D Displaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42363G Displaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42363K Displaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42363P Displaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42363S Displaced segmental fracture of shaft of humerus, unspecified arm, sequela -S42364A Nondisplaced segmental fracture of shaft of humerus, right arm, initial encounter for closed fracture -S42364B Nondisplaced segmental fracture of shaft of humerus, right arm, initial encounter for open fracture -S42364D Nondisplaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with routine healing -S42364G Nondisplaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with delayed healing -S42364K Nondisplaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with nonunion -S42364P Nondisplaced segmental fracture of shaft of humerus, right arm, subsequent encounter for fracture with malunion -S42364S Nondisplaced segmental fracture of shaft of humerus, right arm, sequela -S42365A Nondisplaced segmental fracture of shaft of humerus, left arm, initial encounter for closed fracture -S42365B Nondisplaced segmental fracture of shaft of humerus, left arm, initial encounter for open fracture -S42365D Nondisplaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with routine healing -S42365G Nondisplaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with delayed healing -S42365K Nondisplaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with nonunion -S42365P Nondisplaced segmental fracture of shaft of humerus, left arm, subsequent encounter for fracture with malunion -S42365S Nondisplaced segmental fracture of shaft of humerus, left arm, sequela -S42366A Nondisplaced segmental fracture of shaft of humerus, unspecified arm, initial encounter for closed fracture -S42366B Nondisplaced segmental fracture of shaft of humerus, unspecified arm, initial encounter for open fracture -S42366D Nondisplaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S42366G Nondisplaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S42366K Nondisplaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S42366P Nondisplaced segmental fracture of shaft of humerus, unspecified arm, subsequent encounter for fracture with malunion -S42366S Nondisplaced segmental fracture of shaft of humerus, unspecified arm, sequela -S42391A Other fracture of shaft of right humerus, initial encounter for closed fracture -S42391B Other fracture of shaft of right humerus, initial encounter for open fracture -S42391D Other fracture of shaft of right humerus, subsequent encounter for fracture with routine healing -S42391G Other fracture of shaft of right humerus, subsequent encounter for fracture with delayed healing -S42391K Other fracture of shaft of right humerus, subsequent encounter for fracture with nonunion -S42391P Other fracture of shaft of right humerus, subsequent encounter for fracture with malunion -S42391S Other fracture of shaft of right humerus, sequela -S42392A Other fracture of shaft of left humerus, initial encounter for closed fracture -S42392B Other fracture of shaft of left humerus, initial encounter for open fracture -S42392D Other fracture of shaft of left humerus, subsequent encounter for fracture with routine healing -S42392G Other fracture of shaft of left humerus, subsequent encounter for fracture with delayed healing -S42392K Other fracture of shaft of left humerus, subsequent encounter for fracture with nonunion -S42392P Other fracture of shaft of left humerus, subsequent encounter for fracture with malunion -S42392S Other fracture of shaft of left humerus, sequela -S42399A Other fracture of shaft of unspecified humerus, initial encounter for closed fracture -S42399B Other fracture of shaft of unspecified humerus, initial encounter for open fracture -S42399D Other fracture of shaft of unspecified humerus, subsequent encounter for fracture with routine healing -S42399G Other fracture of shaft of unspecified humerus, subsequent encounter for fracture with delayed healing -S42399K Other fracture of shaft of unspecified humerus, subsequent encounter for fracture with nonunion -S42399P Other fracture of shaft of unspecified humerus, subsequent encounter for fracture with malunion -S42399S Other fracture of shaft of unspecified humerus, sequela -S42401A Unspecified fracture of lower end of right humerus, initial encounter for closed fracture -S42401B Unspecified fracture of lower end of right humerus, initial encounter for open fracture -S42401D Unspecified fracture of lower end of right humerus, subsequent encounter for fracture with routine healing -S42401G Unspecified fracture of lower end of right humerus, subsequent encounter for fracture with delayed healing -S42401K Unspecified fracture of lower end of right humerus, subsequent encounter for fracture with nonunion -S42401P Unspecified fracture of lower end of right humerus, subsequent encounter for fracture with malunion -S42401S Unspecified fracture of lower end of right humerus, sequela -S42402A Unspecified fracture of lower end of left humerus, initial encounter for closed fracture -S42402B Unspecified fracture of lower end of left humerus, initial encounter for open fracture -S42402D Unspecified fracture of lower end of left humerus, subsequent encounter for fracture with routine healing -S42402G Unspecified fracture of lower end of left humerus, subsequent encounter for fracture with delayed healing -S42402K Unspecified fracture of lower end of left humerus, subsequent encounter for fracture with nonunion -S42402P Unspecified fracture of lower end of left humerus, subsequent encounter for fracture with malunion -S42402S Unspecified fracture of lower end of left humerus, sequela -S42409A Unspecified fracture of lower end of unspecified humerus, initial encounter for closed fracture -S42409B Unspecified fracture of lower end of unspecified humerus, initial encounter for open fracture -S42409D Unspecified fracture of lower end of unspecified humerus, subsequent encounter for fracture with routine healing -S42409G Unspecified fracture of lower end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42409K Unspecified fracture of lower end of unspecified humerus, subsequent encounter for fracture with nonunion -S42409P Unspecified fracture of lower end of unspecified humerus, subsequent encounter for fracture with malunion -S42409S Unspecified fracture of lower end of unspecified humerus, sequela -S42411A Displaced simple supracondylar fracture without intercondylar fracture of right humerus, initial encounter for closed fracture -S42411B Displaced simple supracondylar fracture without intercondylar fracture of right humerus, initial encounter for open fracture -S42411D Displaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42411G Displaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42411K Displaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42411P Displaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42411S Displaced simple supracondylar fracture without intercondylar fracture of right humerus, sequela -S42412A Displaced simple supracondylar fracture without intercondylar fracture of left humerus, initial encounter for closed fracture -S42412B Displaced simple supracondylar fracture without intercondylar fracture of left humerus, initial encounter for open fracture -S42412D Displaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42412G Displaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42412K Displaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42412P Displaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42412S Displaced simple supracondylar fracture without intercondylar fracture of left humerus, sequela -S42413A Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for closed fracture -S42413B Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for open fracture -S42413D Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42413G Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42413K Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42413P Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42413S Displaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, sequela -S42414A Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, initial encounter for closed fracture -S42414B Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, initial encounter for open fracture -S42414D Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42414G Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42414K Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42414P Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42414S Nondisplaced simple supracondylar fracture without intercondylar fracture of right humerus, sequela -S42415A Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, initial encounter for closed fracture -S42415B Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, initial encounter for open fracture -S42415D Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42415G Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42415K Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42415P Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42415S Nondisplaced simple supracondylar fracture without intercondylar fracture of left humerus, sequela -S42416A Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for closed fracture -S42416B Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for open fracture -S42416D Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42416G Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42416K Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42416P Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42416S Nondisplaced simple supracondylar fracture without intercondylar fracture of unspecified humerus, sequela -S42421A Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, initial encounter for closed fracture -S42421B Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, initial encounter for open fracture -S42421D Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42421G Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42421K Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42421P Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42421S Displaced comminuted supracondylar fracture without intercondylar fracture of right humerus, sequela -S42422A Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, initial encounter for closed fracture -S42422B Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, initial encounter for open fracture -S42422D Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42422G Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42422K Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42422P Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42422S Displaced comminuted supracondylar fracture without intercondylar fracture of left humerus, sequela -S42423A Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for closed fracture -S42423B Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for open fracture -S42423D Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42423G Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42423K Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42423P Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42423S Displaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, sequela -S42424A Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, initial encounter for closed fracture -S42424B Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, initial encounter for open fracture -S42424D Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42424G Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42424K Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42424P Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42424S Nondisplaced comminuted supracondylar fracture without intercondylar fracture of right humerus, sequela -S42425A Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, initial encounter for closed fracture -S42425B Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, initial encounter for open fracture -S42425D Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42425G Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42425K Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42425P Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42425S Nondisplaced comminuted supracondylar fracture without intercondylar fracture of left humerus, sequela -S42426A Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for closed fracture -S42426B Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, initial encounter for open fracture -S42426D Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42426G Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42426K Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42426P Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42426S Nondisplaced comminuted supracondylar fracture without intercondylar fracture of unspecified humerus, sequela -S42431A Displaced fracture (avulsion) of lateral epicondyle of right humerus, initial encounter for closed fracture -S42431B Displaced fracture (avulsion) of lateral epicondyle of right humerus, initial encounter for open fracture -S42431D Displaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with routine healing -S42431G Displaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with delayed healing -S42431K Displaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with nonunion -S42431P Displaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with malunion -S42431S Displaced fracture (avulsion) of lateral epicondyle of right humerus, sequela -S42432A Displaced fracture (avulsion) of lateral epicondyle of left humerus, initial encounter for closed fracture -S42432B Displaced fracture (avulsion) of lateral epicondyle of left humerus, initial encounter for open fracture -S42432D Displaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with routine healing -S42432G Displaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with delayed healing -S42432K Displaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with nonunion -S42432P Displaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with malunion -S42432S Displaced fracture (avulsion) of lateral epicondyle of left humerus, sequela -S42433A Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, initial encounter for closed fracture -S42433B Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, initial encounter for open fracture -S42433D Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42433G Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42433K Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42433P Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with malunion -S42433S Displaced fracture (avulsion) of lateral epicondyle of unspecified humerus, sequela -S42434A Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, initial encounter for closed fracture -S42434B Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, initial encounter for open fracture -S42434D Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with routine healing -S42434G Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with delayed healing -S42434K Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with nonunion -S42434P Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, subsequent encounter for fracture with malunion -S42434S Nondisplaced fracture (avulsion) of lateral epicondyle of right humerus, sequela -S42435A Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, initial encounter for closed fracture -S42435B Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, initial encounter for open fracture -S42435D Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with routine healing -S42435G Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with delayed healing -S42435K Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with nonunion -S42435P Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, subsequent encounter for fracture with malunion -S42435S Nondisplaced fracture (avulsion) of lateral epicondyle of left humerus, sequela -S42436A Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, initial encounter for closed fracture -S42436B Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, initial encounter for open fracture -S42436D Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42436G Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42436K Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42436P Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, subsequent encounter for fracture with malunion -S42436S Nondisplaced fracture (avulsion) of lateral epicondyle of unspecified humerus, sequela -S42441A Displaced fracture (avulsion) of medial epicondyle of right humerus, initial encounter for closed fracture -S42441B Displaced fracture (avulsion) of medial epicondyle of right humerus, initial encounter for open fracture -S42441D Displaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with routine healing -S42441G Displaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with delayed healing -S42441K Displaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with nonunion -S42441P Displaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with malunion -S42441S Displaced fracture (avulsion) of medial epicondyle of right humerus, sequela -S42442A Displaced fracture (avulsion) of medial epicondyle of left humerus, initial encounter for closed fracture -S42442B Displaced fracture (avulsion) of medial epicondyle of left humerus, initial encounter for open fracture -S42442D Displaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with routine healing -S42442G Displaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with delayed healing -S42442K Displaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with nonunion -S42442P Displaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with malunion -S42442S Displaced fracture (avulsion) of medial epicondyle of left humerus, sequela -S42443A Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for closed fracture -S42443B Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for open fracture -S42443D Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42443G Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42443K Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42443P Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with malunion -S42443S Displaced fracture (avulsion) of medial epicondyle of unspecified humerus, sequela -S42444A Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, initial encounter for closed fracture -S42444B Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, initial encounter for open fracture -S42444D Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with routine healing -S42444G Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with delayed healing -S42444K Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with nonunion -S42444P Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with malunion -S42444S Nondisplaced fracture (avulsion) of medial epicondyle of right humerus, sequela -S42445A Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, initial encounter for closed fracture -S42445B Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, initial encounter for open fracture -S42445D Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with routine healing -S42445G Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with delayed healing -S42445K Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with nonunion -S42445P Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with malunion -S42445S Nondisplaced fracture (avulsion) of medial epicondyle of left humerus, sequela -S42446A Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for closed fracture -S42446B Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for open fracture -S42446D Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42446G Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42446K Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42446P Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with malunion -S42446S Nondisplaced fracture (avulsion) of medial epicondyle of unspecified humerus, sequela -S42447A Incarcerated fracture (avulsion) of medial epicondyle of right humerus, initial encounter for closed fracture -S42447B Incarcerated fracture (avulsion) of medial epicondyle of right humerus, initial encounter for open fracture -S42447D Incarcerated fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with routine healing -S42447G Incarcerated fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with delayed healing -S42447K Incarcerated fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with nonunion -S42447P Incarcerated fracture (avulsion) of medial epicondyle of right humerus, subsequent encounter for fracture with malunion -S42447S Incarcerated fracture (avulsion) of medial epicondyle of right humerus, sequela -S42448A Incarcerated fracture (avulsion) of medial epicondyle of left humerus, initial encounter for closed fracture -S42448B Incarcerated fracture (avulsion) of medial epicondyle of left humerus, initial encounter for open fracture -S42448D Incarcerated fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with routine healing -S42448G Incarcerated fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with delayed healing -S42448K Incarcerated fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with nonunion -S42448P Incarcerated fracture (avulsion) of medial epicondyle of left humerus, subsequent encounter for fracture with malunion -S42448S Incarcerated fracture (avulsion) of medial epicondyle of left humerus, sequela -S42449A Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for closed fracture -S42449B Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, initial encounter for open fracture -S42449D Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42449G Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42449K Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42449P Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, subsequent encounter for fracture with malunion -S42449S Incarcerated fracture (avulsion) of medial epicondyle of unspecified humerus, sequela -S42451A Displaced fracture of lateral condyle of right humerus, initial encounter for closed fracture -S42451B Displaced fracture of lateral condyle of right humerus, initial encounter for open fracture -S42451D Displaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with routine healing -S42451G Displaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with delayed healing -S42451K Displaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with nonunion -S42451P Displaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with malunion -S42451S Displaced fracture of lateral condyle of right humerus, sequela -S42452A Displaced fracture of lateral condyle of left humerus, initial encounter for closed fracture -S42452B Displaced fracture of lateral condyle of left humerus, initial encounter for open fracture -S42452D Displaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with routine healing -S42452G Displaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with delayed healing -S42452K Displaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with nonunion -S42452P Displaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with malunion -S42452S Displaced fracture of lateral condyle of left humerus, sequela -S42453A Displaced fracture of lateral condyle of unspecified humerus, initial encounter for closed fracture -S42453B Displaced fracture of lateral condyle of unspecified humerus, initial encounter for open fracture -S42453D Displaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42453G Displaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42453K Displaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42453P Displaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with malunion -S42453S Displaced fracture of lateral condyle of unspecified humerus, sequela -S42454A Nondisplaced fracture of lateral condyle of right humerus, initial encounter for closed fracture -S42454B Nondisplaced fracture of lateral condyle of right humerus, initial encounter for open fracture -S42454D Nondisplaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with routine healing -S42454G Nondisplaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with delayed healing -S42454K Nondisplaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with nonunion -S42454P Nondisplaced fracture of lateral condyle of right humerus, subsequent encounter for fracture with malunion -S42454S Nondisplaced fracture of lateral condyle of right humerus, sequela -S42455A Nondisplaced fracture of lateral condyle of left humerus, initial encounter for closed fracture -S42455B Nondisplaced fracture of lateral condyle of left humerus, initial encounter for open fracture -S42455D Nondisplaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with routine healing -S42455G Nondisplaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with delayed healing -S42455K Nondisplaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with nonunion -S42455P Nondisplaced fracture of lateral condyle of left humerus, subsequent encounter for fracture with malunion -S42455S Nondisplaced fracture of lateral condyle of left humerus, sequela -S42456A Nondisplaced fracture of lateral condyle of unspecified humerus, initial encounter for closed fracture -S42456B Nondisplaced fracture of lateral condyle of unspecified humerus, initial encounter for open fracture -S42456D Nondisplaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42456G Nondisplaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42456K Nondisplaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42456P Nondisplaced fracture of lateral condyle of unspecified humerus, subsequent encounter for fracture with malunion -S42456S Nondisplaced fracture of lateral condyle of unspecified humerus, sequela -S42461A Displaced fracture of medial condyle of right humerus, initial encounter for closed fracture -S42461B Displaced fracture of medial condyle of right humerus, initial encounter for open fracture -S42461D Displaced fracture of medial condyle of right humerus, subsequent encounter for fracture with routine healing -S42461G Displaced fracture of medial condyle of right humerus, subsequent encounter for fracture with delayed healing -S42461K Displaced fracture of medial condyle of right humerus, subsequent encounter for fracture with nonunion -S42461P Displaced fracture of medial condyle of right humerus, subsequent encounter for fracture with malunion -S42461S Displaced fracture of medial condyle of right humerus, sequela -S42462A Displaced fracture of medial condyle of left humerus, initial encounter for closed fracture -S42462B Displaced fracture of medial condyle of left humerus, initial encounter for open fracture -S42462D Displaced fracture of medial condyle of left humerus, subsequent encounter for fracture with routine healing -S42462G Displaced fracture of medial condyle of left humerus, subsequent encounter for fracture with delayed healing -S42462K Displaced fracture of medial condyle of left humerus, subsequent encounter for fracture with nonunion -S42462P Displaced fracture of medial condyle of left humerus, subsequent encounter for fracture with malunion -S42462S Displaced fracture of medial condyle of left humerus, sequela -S42463A Displaced fracture of medial condyle of unspecified humerus, initial encounter for closed fracture -S42463B Displaced fracture of medial condyle of unspecified humerus, initial encounter for open fracture -S42463D Displaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42463G Displaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42463K Displaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42463P Displaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with malunion -S42463S Displaced fracture of medial condyle of unspecified humerus, sequela -S42464A Nondisplaced fracture of medial condyle of right humerus, initial encounter for closed fracture -S42464B Nondisplaced fracture of medial condyle of right humerus, initial encounter for open fracture -S42464D Nondisplaced fracture of medial condyle of right humerus, subsequent encounter for fracture with routine healing -S42464G Nondisplaced fracture of medial condyle of right humerus, subsequent encounter for fracture with delayed healing -S42464K Nondisplaced fracture of medial condyle of right humerus, subsequent encounter for fracture with nonunion -S42464P Nondisplaced fracture of medial condyle of right humerus, subsequent encounter for fracture with malunion -S42464S Nondisplaced fracture of medial condyle of right humerus, sequela -S42465A Nondisplaced fracture of medial condyle of left humerus, initial encounter for closed fracture -S42465B Nondisplaced fracture of medial condyle of left humerus, initial encounter for open fracture -S42465D Nondisplaced fracture of medial condyle of left humerus, subsequent encounter for fracture with routine healing -S42465G Nondisplaced fracture of medial condyle of left humerus, subsequent encounter for fracture with delayed healing -S42465K Nondisplaced fracture of medial condyle of left humerus, subsequent encounter for fracture with nonunion -S42465P Nondisplaced fracture of medial condyle of left humerus, subsequent encounter for fracture with malunion -S42465S Nondisplaced fracture of medial condyle of left humerus, sequela -S42466A Nondisplaced fracture of medial condyle of unspecified humerus, initial encounter for closed fracture -S42466B Nondisplaced fracture of medial condyle of unspecified humerus, initial encounter for open fracture -S42466D Nondisplaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with routine healing -S42466G Nondisplaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with delayed healing -S42466K Nondisplaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with nonunion -S42466P Nondisplaced fracture of medial condyle of unspecified humerus, subsequent encounter for fracture with malunion -S42466S Nondisplaced fracture of medial condyle of unspecified humerus, sequela -S42471A Displaced transcondylar fracture of right humerus, initial encounter for closed fracture -S42471B Displaced transcondylar fracture of right humerus, initial encounter for open fracture -S42471D Displaced transcondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42471G Displaced transcondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42471K Displaced transcondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42471P Displaced transcondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42471S Displaced transcondylar fracture of right humerus, sequela -S42472A Displaced transcondylar fracture of left humerus, initial encounter for closed fracture -S42472B Displaced transcondylar fracture of left humerus, initial encounter for open fracture -S42472D Displaced transcondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42472G Displaced transcondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42472K Displaced transcondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42472P Displaced transcondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42472S Displaced transcondylar fracture of left humerus, sequela -S42473A Displaced transcondylar fracture of unspecified humerus, initial encounter for closed fracture -S42473B Displaced transcondylar fracture of unspecified humerus, initial encounter for open fracture -S42473D Displaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42473G Displaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42473K Displaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42473P Displaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42473S Displaced transcondylar fracture of unspecified humerus, sequela -S42474A Nondisplaced transcondylar fracture of right humerus, initial encounter for closed fracture -S42474B Nondisplaced transcondylar fracture of right humerus, initial encounter for open fracture -S42474D Nondisplaced transcondylar fracture of right humerus, subsequent encounter for fracture with routine healing -S42474G Nondisplaced transcondylar fracture of right humerus, subsequent encounter for fracture with delayed healing -S42474K Nondisplaced transcondylar fracture of right humerus, subsequent encounter for fracture with nonunion -S42474P Nondisplaced transcondylar fracture of right humerus, subsequent encounter for fracture with malunion -S42474S Nondisplaced transcondylar fracture of right humerus, sequela -S42475A Nondisplaced transcondylar fracture of left humerus, initial encounter for closed fracture -S42475B Nondisplaced transcondylar fracture of left humerus, initial encounter for open fracture -S42475D Nondisplaced transcondylar fracture of left humerus, subsequent encounter for fracture with routine healing -S42475G Nondisplaced transcondylar fracture of left humerus, subsequent encounter for fracture with delayed healing -S42475K Nondisplaced transcondylar fracture of left humerus, subsequent encounter for fracture with nonunion -S42475P Nondisplaced transcondylar fracture of left humerus, subsequent encounter for fracture with malunion -S42475S Nondisplaced transcondylar fracture of left humerus, sequela -S42476A Nondisplaced transcondylar fracture of unspecified humerus, initial encounter for closed fracture -S42476B Nondisplaced transcondylar fracture of unspecified humerus, initial encounter for open fracture -S42476D Nondisplaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with routine healing -S42476G Nondisplaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with delayed healing -S42476K Nondisplaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with nonunion -S42476P Nondisplaced transcondylar fracture of unspecified humerus, subsequent encounter for fracture with malunion -S42476S Nondisplaced transcondylar fracture of unspecified humerus, sequela -S42481A Torus fracture of lower end of right humerus, initial encounter for closed fracture -S42481D Torus fracture of lower end of right humerus, subsequent encounter for fracture with routine healing -S42481G Torus fracture of lower end of right humerus, subsequent encounter for fracture with delayed healing -S42481K Torus fracture of lower end of right humerus, subsequent encounter for fracture with nonunion -S42481P Torus fracture of lower end of right humerus, subsequent encounter for fracture with malunion -S42481S Torus fracture of lower end of right humerus, sequela -S42482A Torus fracture of lower end of left humerus, initial encounter for closed fracture -S42482D Torus fracture of lower end of left humerus, subsequent encounter for fracture with routine healing -S42482G Torus fracture of lower end of left humerus, subsequent encounter for fracture with delayed healing -S42482K Torus fracture of lower end of left humerus, subsequent encounter for fracture with nonunion -S42482P Torus fracture of lower end of left humerus, subsequent encounter for fracture with malunion -S42482S Torus fracture of lower end of left humerus, sequela -S42489A Torus fracture of lower end of unspecified humerus, initial encounter for closed fracture -S42489D Torus fracture of lower end of unspecified humerus, subsequent encounter for fracture with routine healing -S42489G Torus fracture of lower end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42489K Torus fracture of lower end of unspecified humerus, subsequent encounter for fracture with nonunion -S42489P Torus fracture of lower end of unspecified humerus, subsequent encounter for fracture with malunion -S42489S Torus fracture of lower end of unspecified humerus, sequela -S42491A Other displaced fracture of lower end of right humerus, initial encounter for closed fracture -S42491B Other displaced fracture of lower end of right humerus, initial encounter for open fracture -S42491D Other displaced fracture of lower end of right humerus, subsequent encounter for fracture with routine healing -S42491G Other displaced fracture of lower end of right humerus, subsequent encounter for fracture with delayed healing -S42491K Other displaced fracture of lower end of right humerus, subsequent encounter for fracture with nonunion -S42491P Other displaced fracture of lower end of right humerus, subsequent encounter for fracture with malunion -S42491S Other displaced fracture of lower end of right humerus, sequela -S42492A Other displaced fracture of lower end of left humerus, initial encounter for closed fracture -S42492B Other displaced fracture of lower end of left humerus, initial encounter for open fracture -S42492D Other displaced fracture of lower end of left humerus, subsequent encounter for fracture with routine healing -S42492G Other displaced fracture of lower end of left humerus, subsequent encounter for fracture with delayed healing -S42492K Other displaced fracture of lower end of left humerus, subsequent encounter for fracture with nonunion -S42492P Other displaced fracture of lower end of left humerus, subsequent encounter for fracture with malunion -S42492S Other displaced fracture of lower end of left humerus, sequela -S42493A Other displaced fracture of lower end of unspecified humerus, initial encounter for closed fracture -S42493B Other displaced fracture of lower end of unspecified humerus, initial encounter for open fracture -S42493D Other displaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with routine healing -S42493G Other displaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42493K Other displaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with nonunion -S42493P Other displaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with malunion -S42493S Other displaced fracture of lower end of unspecified humerus, sequela -S42494A Other nondisplaced fracture of lower end of right humerus, initial encounter for closed fracture -S42494B Other nondisplaced fracture of lower end of right humerus, initial encounter for open fracture -S42494D Other nondisplaced fracture of lower end of right humerus, subsequent encounter for fracture with routine healing -S42494G Other nondisplaced fracture of lower end of right humerus, subsequent encounter for fracture with delayed healing -S42494K Other nondisplaced fracture of lower end of right humerus, subsequent encounter for fracture with nonunion -S42494P Other nondisplaced fracture of lower end of right humerus, subsequent encounter for fracture with malunion -S42494S Other nondisplaced fracture of lower end of right humerus, sequela -S42495A Other nondisplaced fracture of lower end of left humerus, initial encounter for closed fracture -S42495B Other nondisplaced fracture of lower end of left humerus, initial encounter for open fracture -S42495D Other nondisplaced fracture of lower end of left humerus, subsequent encounter for fracture with routine healing -S42495G Other nondisplaced fracture of lower end of left humerus, subsequent encounter for fracture with delayed healing -S42495K Other nondisplaced fracture of lower end of left humerus, subsequent encounter for fracture with nonunion -S42495P Other nondisplaced fracture of lower end of left humerus, subsequent encounter for fracture with malunion -S42495S Other nondisplaced fracture of lower end of left humerus, sequela -S42496A Other nondisplaced fracture of lower end of unspecified humerus, initial encounter for closed fracture -S42496B Other nondisplaced fracture of lower end of unspecified humerus, initial encounter for open fracture -S42496D Other nondisplaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with routine healing -S42496G Other nondisplaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with delayed healing -S42496K Other nondisplaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with nonunion -S42496P Other nondisplaced fracture of lower end of unspecified humerus, subsequent encounter for fracture with malunion -S42496S Other nondisplaced fracture of lower end of unspecified humerus, sequela -S4290XA Fracture of unspecified shoulder girdle, part unspecified, initial encounter for closed fracture -S4290XB Fracture of unspecified shoulder girdle, part unspecified, initial encounter for open fracture -S4290XD Fracture of unspecified shoulder girdle, part unspecified, subsequent encounter for fracture with routine healing -S4290XG Fracture of unspecified shoulder girdle, part unspecified, subsequent encounter for fracture with delayed healing -S4290XK Fracture of unspecified shoulder girdle, part unspecified, subsequent encounter for fracture with nonunion -S4290XP Fracture of unspecified shoulder girdle, part unspecified, subsequent encounter for fracture with malunion -S4290XS Fracture of unspecified shoulder girdle, part unspecified, sequela -S4291XA Fracture of right shoulder girdle, part unspecified, initial encounter for closed fracture -S4291XB Fracture of right shoulder girdle, part unspecified, initial encounter for open fracture -S4291XD Fracture of right shoulder girdle, part unspecified, subsequent encounter for fracture with routine healing -S4291XG Fracture of right shoulder girdle, part unspecified, subsequent encounter for fracture with delayed healing -S4291XK Fracture of right shoulder girdle, part unspecified, subsequent encounter for fracture with nonunion -S4291XP Fracture of right shoulder girdle, part unspecified, subsequent encounter for fracture with malunion -S4291XS Fracture of right shoulder girdle, part unspecified, sequela -S4292XA Fracture of left shoulder girdle, part unspecified, initial encounter for closed fracture -S4292XB Fracture of left shoulder girdle, part unspecified, initial encounter for open fracture -S4292XD Fracture of left shoulder girdle, part unspecified, subsequent encounter for fracture with routine healing -S4292XG Fracture of left shoulder girdle, part unspecified, subsequent encounter for fracture with delayed healing -S4292XK Fracture of left shoulder girdle, part unspecified, subsequent encounter for fracture with nonunion -S4292XP Fracture of left shoulder girdle, part unspecified, subsequent encounter for fracture with malunion -S4292XS Fracture of left shoulder girdle, part unspecified, sequela -S43001A Unspecified subluxation of right shoulder joint, initial encounter -S43001D Unspecified subluxation of right shoulder joint, subsequent encounter -S43001S Unspecified subluxation of right shoulder joint, sequela -S43002A Unspecified subluxation of left shoulder joint, initial encounter -S43002D Unspecified subluxation of left shoulder joint, subsequent encounter -S43002S Unspecified subluxation of left shoulder joint, sequela -S43003A Unspecified subluxation of unspecified shoulder joint, initial encounter -S43003D Unspecified subluxation of unspecified shoulder joint, subsequent encounter -S43003S Unspecified subluxation of unspecified shoulder joint, sequela -S43004A Unspecified dislocation of right shoulder joint, initial encounter -S43004D Unspecified dislocation of right shoulder joint, subsequent encounter -S43004S Unspecified dislocation of right shoulder joint, sequela -S43005A Unspecified dislocation of left shoulder joint, initial encounter -S43005D Unspecified dislocation of left shoulder joint, subsequent encounter -S43005S Unspecified dislocation of left shoulder joint, sequela -S43006A Unspecified dislocation of unspecified shoulder joint, initial encounter -S43006D Unspecified dislocation of unspecified shoulder joint, subsequent encounter -S43006S Unspecified dislocation of unspecified shoulder joint, sequela -S43011A Anterior subluxation of right humerus, initial encounter -S43011D Anterior subluxation of right humerus, subsequent encounter -S43011S Anterior subluxation of right humerus, sequela -S43012A Anterior subluxation of left humerus, initial encounter -S43012D Anterior subluxation of left humerus, subsequent encounter -S43012S Anterior subluxation of left humerus, sequela -S43013A Anterior subluxation of unspecified humerus, initial encounter -S43013D Anterior subluxation of unspecified humerus, subsequent encounter -S43013S Anterior subluxation of unspecified humerus, sequela -S43014A Anterior dislocation of right humerus, initial encounter -S43014D Anterior dislocation of right humerus, subsequent encounter -S43014S Anterior dislocation of right humerus, sequela -S43015A Anterior dislocation of left humerus, initial encounter -S43015D Anterior dislocation of left humerus, subsequent encounter -S43015S Anterior dislocation of left humerus, sequela -S43016A Anterior dislocation of unspecified humerus, initial encounter -S43016D Anterior dislocation of unspecified humerus, subsequent encounter -S43016S Anterior dislocation of unspecified humerus, sequela -S43021A Posterior subluxation of right humerus, initial encounter -S43021D Posterior subluxation of right humerus, subsequent encounter -S43021S Posterior subluxation of right humerus, sequela -S43022A Posterior subluxation of left humerus, initial encounter -S43022D Posterior subluxation of left humerus, subsequent encounter -S43022S Posterior subluxation of left humerus, sequela -S43023A Posterior subluxation of unspecified humerus, initial encounter -S43023D Posterior subluxation of unspecified humerus, subsequent encounter -S43023S Posterior subluxation of unspecified humerus, sequela -S43024A Posterior dislocation of right humerus, initial encounter -S43024D Posterior dislocation of right humerus, subsequent encounter -S43024S Posterior dislocation of right humerus, sequela -S43025A Posterior dislocation of left humerus, initial encounter -S43025D Posterior dislocation of left humerus, subsequent encounter -S43025S Posterior dislocation of left humerus, sequela -S43026A Posterior dislocation of unspecified humerus, initial encounter -S43026D Posterior dislocation of unspecified humerus, subsequent encounter -S43026S Posterior dislocation of unspecified humerus, sequela -S43031A Inferior subluxation of right humerus, initial encounter -S43031D Inferior subluxation of right humerus, subsequent encounter -S43031S Inferior subluxation of right humerus, sequela -S43032A Inferior subluxation of left humerus, initial encounter -S43032D Inferior subluxation of left humerus, subsequent encounter -S43032S Inferior subluxation of left humerus, sequela -S43033A Inferior subluxation of unspecified humerus, initial encounter -S43033D Inferior subluxation of unspecified humerus, subsequent encounter -S43033S Inferior subluxation of unspecified humerus, sequela -S43034A Inferior dislocation of right humerus, initial encounter -S43034D Inferior dislocation of right humerus, subsequent encounter -S43034S Inferior dislocation of right humerus, sequela -S43035A Inferior dislocation of left humerus, initial encounter -S43035D Inferior dislocation of left humerus, subsequent encounter -S43035S Inferior dislocation of left humerus, sequela -S43036A Inferior dislocation of unspecified humerus, initial encounter -S43036D Inferior dislocation of unspecified humerus, subsequent encounter -S43036S Inferior dislocation of unspecified humerus, sequela -S43081A Other subluxation of right shoulder joint, initial encounter -S43081D Other subluxation of right shoulder joint, subsequent encounter -S43081S Other subluxation of right shoulder joint, sequela -S43082A Other subluxation of left shoulder joint, initial encounter -S43082D Other subluxation of left shoulder joint, subsequent encounter -S43082S Other subluxation of left shoulder joint, sequela -S43083A Other subluxation of unspecified shoulder joint, initial encounter -S43083D Other subluxation of unspecified shoulder joint, subsequent encounter -S43083S Other subluxation of unspecified shoulder joint, sequela -S43084A Other dislocation of right shoulder joint, initial encounter -S43084D Other dislocation of right shoulder joint, subsequent encounter -S43084S Other dislocation of right shoulder joint, sequela -S43085A Other dislocation of left shoulder joint, initial encounter -S43085D Other dislocation of left shoulder joint, subsequent encounter -S43085S Other dislocation of left shoulder joint, sequela -S43086A Other dislocation of unspecified shoulder joint, initial encounter -S43086D Other dislocation of unspecified shoulder joint, subsequent encounter -S43086S Other dislocation of unspecified shoulder joint, sequela -S43101A Unspecified dislocation of right acromioclavicular joint, initial encounter -S43101D Unspecified dislocation of right acromioclavicular joint, subsequent encounter -S43101S Unspecified dislocation of right acromioclavicular joint, sequela -S43102A Unspecified dislocation of left acromioclavicular joint, initial encounter -S43102D Unspecified dislocation of left acromioclavicular joint, subsequent encounter -S43102S Unspecified dislocation of left acromioclavicular joint, sequela -S43109A Unspecified dislocation of unspecified acromioclavicular joint, initial encounter -S43109D Unspecified dislocation of unspecified acromioclavicular joint, subsequent encounter -S43109S Unspecified dislocation of unspecified acromioclavicular joint, sequela -S43111A Subluxation of right acromioclavicular joint, initial encounter -S43111D Subluxation of right acromioclavicular joint, subsequent encounter -S43111S Subluxation of right acromioclavicular joint, sequela -S43112A Subluxation of left acromioclavicular joint, initial encounter -S43112D Subluxation of left acromioclavicular joint, subsequent encounter -S43112S Subluxation of left acromioclavicular joint, sequela -S43119A Subluxation of unspecified acromioclavicular joint, initial encounter -S43119D Subluxation of unspecified acromioclavicular joint, subsequent encounter -S43119S Subluxation of unspecified acromioclavicular joint, sequela -S43121A Dislocation of right acromioclavicular joint, 100%-200% displacement, initial encounter -S43121D Dislocation of right acromioclavicular joint, 100%-200% displacement, subsequent encounter -S43121S Dislocation of right acromioclavicular joint, 100%-200% displacement, sequela -S43122A Dislocation of left acromioclavicular joint, 100%-200% displacement, initial encounter -S43122D Dislocation of left acromioclavicular joint, 100%-200% displacement, subsequent encounter -S43122S Dislocation of left acromioclavicular joint, 100%-200% displacement, sequela -S43129A Dislocation of unspecified acromioclavicular joint, 100%-200% displacement, initial encounter -S43129D Dislocation of unspecified acromioclavicular joint, 100%-200% displacement, subsequent encounter -S43129S Dislocation of unspecified acromioclavicular joint, 100%-200% displacement, sequela -S43131A Dislocation of right acromioclavicular joint, greater than 200% displacement, initial encounter -S43131D Dislocation of right acromioclavicular joint, greater than 200% displacement, subsequent encounter -S43131S Dislocation of right acromioclavicular joint, greater than 200% displacement, sequela -S43132A Dislocation of left acromioclavicular joint, greater than 200% displacement, initial encounter -S43132D Dislocation of left acromioclavicular joint, greater than 200% displacement, subsequent encounter -S43132S Dislocation of left acromioclavicular joint, greater than 200% displacement, sequela -S43139A Dislocation of unspecified acromioclavicular joint, greater than 200% displacement, initial encounter -S43139D Dislocation of unspecified acromioclavicular joint, greater than 200% displacement, subsequent encounter -S43139S Dislocation of unspecified acromioclavicular joint, greater than 200% displacement, sequela -S43141A Inferior dislocation of right acromioclavicular joint, initial encounter -S43141D Inferior dislocation of right acromioclavicular joint, subsequent encounter -S43141S Inferior dislocation of right acromioclavicular joint, sequela -S43142A Inferior dislocation of left acromioclavicular joint, initial encounter -S43142D Inferior dislocation of left acromioclavicular joint, subsequent encounter -S43142S Inferior dislocation of left acromioclavicular joint, sequela -S43149A Inferior dislocation of unspecified acromioclavicular joint, initial encounter -S43149D Inferior dislocation of unspecified acromioclavicular joint, subsequent encounter -S43149S Inferior dislocation of unspecified acromioclavicular joint, sequela -S43151A Posterior dislocation of right acromioclavicular joint, initial encounter -S43151D Posterior dislocation of right acromioclavicular joint, subsequent encounter -S43151S Posterior dislocation of right acromioclavicular joint, sequela -S43152A Posterior dislocation of left acromioclavicular joint, initial encounter -S43152D Posterior dislocation of left acromioclavicular joint, subsequent encounter -S43152S Posterior dislocation of left acromioclavicular joint, sequela -S43159A Posterior dislocation of unspecified acromioclavicular joint, initial encounter -S43159D Posterior dislocation of unspecified acromioclavicular joint, subsequent encounter -S43159S Posterior dislocation of unspecified acromioclavicular joint, sequela -S43201A Unspecified subluxation of right sternoclavicular joint, initial encounter -S43201D Unspecified subluxation of right sternoclavicular joint, subsequent encounter -S43201S Unspecified subluxation of right sternoclavicular joint, sequela -S43202A Unspecified subluxation of left sternoclavicular joint, initial encounter -S43202D Unspecified subluxation of left sternoclavicular joint, subsequent encounter -S43202S Unspecified subluxation of left sternoclavicular joint, sequela -S43203A Unspecified subluxation of unspecified sternoclavicular joint, initial encounter -S43203D Unspecified subluxation of unspecified sternoclavicular joint, subsequent encounter -S43203S Unspecified subluxation of unspecified sternoclavicular joint, sequela -S43204A Unspecified dislocation of right sternoclavicular joint, initial encounter -S43204D Unspecified dislocation of right sternoclavicular joint, subsequent encounter -S43204S Unspecified dislocation of right sternoclavicular joint, sequela -S43205A Unspecified dislocation of left sternoclavicular joint, initial encounter -S43205D Unspecified dislocation of left sternoclavicular joint, subsequent encounter -S43205S Unspecified dislocation of left sternoclavicular joint, sequela -S43206A Unspecified dislocation of unspecified sternoclavicular joint, initial encounter -S43206D Unspecified dislocation of unspecified sternoclavicular joint, subsequent encounter -S43206S Unspecified dislocation of unspecified sternoclavicular joint, sequela -S43211A Anterior subluxation of right sternoclavicular joint, initial encounter -S43211D Anterior subluxation of right sternoclavicular joint, subsequent encounter -S43211S Anterior subluxation of right sternoclavicular joint, sequela -S43212A Anterior subluxation of left sternoclavicular joint, initial encounter -S43212D Anterior subluxation of left sternoclavicular joint, subsequent encounter -S43212S Anterior subluxation of left sternoclavicular joint, sequela -S43213A Anterior subluxation of unspecified sternoclavicular joint, initial encounter -S43213D Anterior subluxation of unspecified sternoclavicular joint, subsequent encounter -S43213S Anterior subluxation of unspecified sternoclavicular joint, sequela -S43214A Anterior dislocation of right sternoclavicular joint, initial encounter -S43214D Anterior dislocation of right sternoclavicular joint, subsequent encounter -S43214S Anterior dislocation of right sternoclavicular joint, sequela -S43215A Anterior dislocation of left sternoclavicular joint, initial encounter -S43215D Anterior dislocation of left sternoclavicular joint, subsequent encounter -S43215S Anterior dislocation of left sternoclavicular joint, sequela -S43216A Anterior dislocation of unspecified sternoclavicular joint, initial encounter -S43216D Anterior dislocation of unspecified sternoclavicular joint, subsequent encounter -S43216S Anterior dislocation of unspecified sternoclavicular joint, sequela -S43221A Posterior subluxation of right sternoclavicular joint, initial encounter -S43221D Posterior subluxation of right sternoclavicular joint, subsequent encounter -S43221S Posterior subluxation of right sternoclavicular joint, sequela -S43222A Posterior subluxation of left sternoclavicular joint, initial encounter -S43222D Posterior subluxation of left sternoclavicular joint, subsequent encounter -S43222S Posterior subluxation of left sternoclavicular joint, sequela -S43223A Posterior subluxation of unspecified sternoclavicular joint, initial encounter -S43223D Posterior subluxation of unspecified sternoclavicular joint, subsequent encounter -S43223S Posterior subluxation of unspecified sternoclavicular joint, sequela -S43224A Posterior dislocation of right sternoclavicular joint, initial encounter -S43224D Posterior dislocation of right sternoclavicular joint, subsequent encounter -S43224S Posterior dislocation of right sternoclavicular joint, sequela -S43225A Posterior dislocation of left sternoclavicular joint, initial encounter -S43225D Posterior dislocation of left sternoclavicular joint, subsequent encounter -S43225S Posterior dislocation of left sternoclavicular joint, sequela -S43226A Posterior dislocation of unspecified sternoclavicular joint, initial encounter -S43226D Posterior dislocation of unspecified sternoclavicular joint, subsequent encounter -S43226S Posterior dislocation of unspecified sternoclavicular joint, sequela -S43301A Subluxation of unspecified parts of right shoulder girdle, initial encounter -S43301D Subluxation of unspecified parts of right shoulder girdle, subsequent encounter -S43301S Subluxation of unspecified parts of right shoulder girdle, sequela -S43302A Subluxation of unspecified parts of left shoulder girdle, initial encounter -S43302D Subluxation of unspecified parts of left shoulder girdle, subsequent encounter -S43302S Subluxation of unspecified parts of left shoulder girdle, sequela -S43303A Subluxation of unspecified parts of unspecified shoulder girdle, initial encounter -S43303D Subluxation of unspecified parts of unspecified shoulder girdle, subsequent encounter -S43303S Subluxation of unspecified parts of unspecified shoulder girdle, sequela -S43304A Dislocation of unspecified parts of right shoulder girdle, initial encounter -S43304D Dislocation of unspecified parts of right shoulder girdle, subsequent encounter -S43304S Dislocation of unspecified parts of right shoulder girdle, sequela -S43305A Dislocation of unspecified parts of left shoulder girdle, initial encounter -S43305D Dislocation of unspecified parts of left shoulder girdle, subsequent encounter -S43305S Dislocation of unspecified parts of left shoulder girdle, sequela -S43306A Dislocation of unspecified parts of unspecified shoulder girdle, initial encounter -S43306D Dislocation of unspecified parts of unspecified shoulder girdle, subsequent encounter -S43306S Dislocation of unspecified parts of unspecified shoulder girdle, sequela -S43311A Subluxation of right scapula, initial encounter -S43311D Subluxation of right scapula, subsequent encounter -S43311S Subluxation of right scapula, sequela -S43312A Subluxation of left scapula, initial encounter -S43312D Subluxation of left scapula, subsequent encounter -S43312S Subluxation of left scapula, sequela -S43313A Subluxation of unspecified scapula, initial encounter -S43313D Subluxation of unspecified scapula, subsequent encounter -S43313S Subluxation of unspecified scapula, sequela -S43314A Dislocation of right scapula, initial encounter -S43314D Dislocation of right scapula, subsequent encounter -S43314S Dislocation of right scapula, sequela -S43315A Dislocation of left scapula, initial encounter -S43315D Dislocation of left scapula, subsequent encounter -S43315S Dislocation of left scapula, sequela -S43316A Dislocation of unspecified scapula, initial encounter -S43316D Dislocation of unspecified scapula, subsequent encounter -S43316S Dislocation of unspecified scapula, sequela -S43391A Subluxation of other parts of right shoulder girdle, initial encounter -S43391D Subluxation of other parts of right shoulder girdle, subsequent encounter -S43391S Subluxation of other parts of right shoulder girdle, sequela -S43392A Subluxation of other parts of left shoulder girdle, initial encounter -S43392D Subluxation of other parts of left shoulder girdle, subsequent encounter -S43392S Subluxation of other parts of left shoulder girdle, sequela -S43393A Subluxation of other parts of unspecified shoulder girdle, initial encounter -S43393D Subluxation of other parts of unspecified shoulder girdle, subsequent encounter -S43393S Subluxation of other parts of unspecified shoulder girdle, sequela -S43394A Dislocation of other parts of right shoulder girdle, initial encounter -S43394D Dislocation of other parts of right shoulder girdle, subsequent encounter -S43394S Dislocation of other parts of right shoulder girdle, sequela -S43395A Dislocation of other parts of left shoulder girdle, initial encounter -S43395D Dislocation of other parts of left shoulder girdle, subsequent encounter -S43395S Dislocation of other parts of left shoulder girdle, sequela -S43396A Dislocation of other parts of unspecified shoulder girdle, initial encounter -S43396D Dislocation of other parts of unspecified shoulder girdle, subsequent encounter -S43396S Dislocation of other parts of unspecified shoulder girdle, sequela -S43401A Unspecified sprain of right shoulder joint, initial encounter -S43401D Unspecified sprain of right shoulder joint, subsequent encounter -S43401S Unspecified sprain of right shoulder joint, sequela -S43402A Unspecified sprain of left shoulder joint, initial encounter -S43402D Unspecified sprain of left shoulder joint, subsequent encounter -S43402S Unspecified sprain of left shoulder joint, sequela -S43409A Unspecified sprain of unspecified shoulder joint, initial encounter -S43409D Unspecified sprain of unspecified shoulder joint, subsequent encounter -S43409S Unspecified sprain of unspecified shoulder joint, sequela -S43411A Sprain of right coracohumeral (ligament), initial encounter -S43411D Sprain of right coracohumeral (ligament), subsequent encounter -S43411S Sprain of right coracohumeral (ligament), sequela -S43412A Sprain of left coracohumeral (ligament), initial encounter -S43412D Sprain of left coracohumeral (ligament), subsequent encounter -S43412S Sprain of left coracohumeral (ligament), sequela -S43419A Sprain of unspecified coracohumeral (ligament), initial encounter -S43419D Sprain of unspecified coracohumeral (ligament), subsequent encounter -S43419S Sprain of unspecified coracohumeral (ligament), sequela -S43421A Sprain of right rotator cuff capsule, initial encounter -S43421D Sprain of right rotator cuff capsule, subsequent encounter -S43421S Sprain of right rotator cuff capsule, sequela -S43422A Sprain of left rotator cuff capsule, initial encounter -S43422D Sprain of left rotator cuff capsule, subsequent encounter -S43422S Sprain of left rotator cuff capsule, sequela -S43429A Sprain of unspecified rotator cuff capsule, initial encounter -S43429D Sprain of unspecified rotator cuff capsule, subsequent encounter -S43429S Sprain of unspecified rotator cuff capsule, sequela -S43431A Superior glenoid labrum lesion of right shoulder, initial encounter -S43431D Superior glenoid labrum lesion of right shoulder, subsequent encounter -S43431S Superior glenoid labrum lesion of right shoulder, sequela -S43432A Superior glenoid labrum lesion of left shoulder, initial encounter -S43432D Superior glenoid labrum lesion of left shoulder, subsequent encounter -S43432S Superior glenoid labrum lesion of left shoulder, sequela -S43439A Superior glenoid labrum lesion of unspecified shoulder, initial encounter -S43439D Superior glenoid labrum lesion of unspecified shoulder, subsequent encounter -S43439S Superior glenoid labrum lesion of unspecified shoulder, sequela -S43491A Other sprain of right shoulder joint, initial encounter -S43491D Other sprain of right shoulder joint, subsequent encounter -S43491S Other sprain of right shoulder joint, sequela -S43492A Other sprain of left shoulder joint, initial encounter -S43492D Other sprain of left shoulder joint, subsequent encounter -S43492S Other sprain of left shoulder joint, sequela -S43499A Other sprain of unspecified shoulder joint, initial encounter -S43499D Other sprain of unspecified shoulder joint, subsequent encounter -S43499S Other sprain of unspecified shoulder joint, sequela -S4350XA Sprain of unspecified acromioclavicular joint, initial encounter -S4350XD Sprain of unspecified acromioclavicular joint, subsequent encounter -S4350XS Sprain of unspecified acromioclavicular joint, sequela -S4351XA Sprain of right acromioclavicular joint, initial encounter -S4351XD Sprain of right acromioclavicular joint, subsequent encounter -S4351XS Sprain of right acromioclavicular joint, sequela -S4352XA Sprain of left acromioclavicular joint, initial encounter -S4352XD Sprain of left acromioclavicular joint, subsequent encounter -S4352XS Sprain of left acromioclavicular joint, sequela -S4360XA Sprain of unspecified sternoclavicular joint, initial encounter -S4360XD Sprain of unspecified sternoclavicular joint, subsequent encounter -S4360XS Sprain of unspecified sternoclavicular joint, sequela -S4361XA Sprain of right sternoclavicular joint, initial encounter -S4361XD Sprain of right sternoclavicular joint, subsequent encounter -S4361XS Sprain of right sternoclavicular joint, sequela -S4362XA Sprain of left sternoclavicular joint, initial encounter -S4362XD Sprain of left sternoclavicular joint, subsequent encounter -S4362XS Sprain of left sternoclavicular joint, sequela -S4380XA Sprain of other specified parts of unspecified shoulder girdle, initial encounter -S4380XD Sprain of other specified parts of unspecified shoulder girdle, subsequent encounter -S4380XS Sprain of other specified parts of unspecified shoulder girdle, sequela -S4381XA Sprain of other specified parts of right shoulder girdle, initial encounter -S4381XD Sprain of other specified parts of right shoulder girdle, subsequent encounter -S4381XS Sprain of other specified parts of right shoulder girdle, sequela -S4382XA Sprain of other specified parts of left shoulder girdle, initial encounter -S4382XD Sprain of other specified parts of left shoulder girdle, subsequent encounter -S4382XS Sprain of other specified parts of left shoulder girdle, sequela -S4390XA Sprain of unspecified parts of unspecified shoulder girdle, initial encounter -S4390XD Sprain of unspecified parts of unspecified shoulder girdle, subsequent encounter -S4390XS Sprain of unspecified parts of unspecified shoulder girdle, sequela -S4391XA Sprain of unspecified parts of right shoulder girdle, initial encounter -S4391XD Sprain of unspecified parts of right shoulder girdle, subsequent encounter -S4391XS Sprain of unspecified parts of right shoulder girdle, sequela -S4392XA Sprain of unspecified parts of left shoulder girdle, initial encounter -S4392XD Sprain of unspecified parts of left shoulder girdle, subsequent encounter -S4392XS Sprain of unspecified parts of left shoulder girdle, sequela -S4400XA Injury of ulnar nerve at upper arm level, unspecified arm, initial encounter -S4400XD Injury of ulnar nerve at upper arm level, unspecified arm, subsequent encounter -S4400XS Injury of ulnar nerve at upper arm level, unspecified arm, sequela -S4401XA Injury of ulnar nerve at upper arm level, right arm, initial encounter -S4401XD Injury of ulnar nerve at upper arm level, right arm, subsequent encounter -S4401XS Injury of ulnar nerve at upper arm level, right arm, sequela -S4402XA Injury of ulnar nerve at upper arm level, left arm, initial encounter -S4402XD Injury of ulnar nerve at upper arm level, left arm, subsequent encounter -S4402XS Injury of ulnar nerve at upper arm level, left arm, sequela -S4410XA Injury of median nerve at upper arm level, unspecified arm, initial encounter -S4410XD Injury of median nerve at upper arm level, unspecified arm, subsequent encounter -S4410XS Injury of median nerve at upper arm level, unspecified arm, sequela -S4411XA Injury of median nerve at upper arm level, right arm, initial encounter -S4411XD Injury of median nerve at upper arm level, right arm, subsequent encounter -S4411XS Injury of median nerve at upper arm level, right arm, sequela -S4412XA Injury of median nerve at upper arm level, left arm, initial encounter -S4412XD Injury of median nerve at upper arm level, left arm, subsequent encounter -S4412XS Injury of median nerve at upper arm level, left arm, sequela -S4420XA Injury of radial nerve at upper arm level, unspecified arm, initial encounter -S4420XD Injury of radial nerve at upper arm level, unspecified arm, subsequent encounter -S4420XS Injury of radial nerve at upper arm level, unspecified arm, sequela -S4421XA Injury of radial nerve at upper arm level, right arm, initial encounter -S4421XD Injury of radial nerve at upper arm level, right arm, subsequent encounter -S4421XS Injury of radial nerve at upper arm level, right arm, sequela -S4422XA Injury of radial nerve at upper arm level, left arm, initial encounter -S4422XD Injury of radial nerve at upper arm level, left arm, subsequent encounter -S4422XS Injury of radial nerve at upper arm level, left arm, sequela -S4430XA Injury of axillary nerve, unspecified arm, initial encounter -S4430XD Injury of axillary nerve, unspecified arm, subsequent encounter -S4430XS Injury of axillary nerve, unspecified arm, sequela -S4431XA Injury of axillary nerve, right arm, initial encounter -S4431XD Injury of axillary nerve, right arm, subsequent encounter -S4431XS Injury of axillary nerve, right arm, sequela -S4432XA Injury of axillary nerve, left arm, initial encounter -S4432XD Injury of axillary nerve, left arm, subsequent encounter -S4432XS Injury of axillary nerve, left arm, sequela -S4440XA Injury of musculocutaneous nerve, unspecified arm, initial encounter -S4440XD Injury of musculocutaneous nerve, unspecified arm, subsequent encounter -S4440XS Injury of musculocutaneous nerve, unspecified arm, sequela -S4441XA Injury of musculocutaneous nerve, right arm, initial encounter -S4441XD Injury of musculocutaneous nerve, right arm, subsequent encounter -S4441XS Injury of musculocutaneous nerve, right arm, sequela -S4442XA Injury of musculocutaneous nerve, left arm, initial encounter -S4442XD Injury of musculocutaneous nerve, left arm, subsequent encounter -S4442XS Injury of musculocutaneous nerve, left arm, sequela -S4450XA Injury of cutaneous sensory nerve at shoulder and upper arm level, unspecified arm, initial encounter -S4450XD Injury of cutaneous sensory nerve at shoulder and upper arm level, unspecified arm, subsequent encounter -S4450XS Injury of cutaneous sensory nerve at shoulder and upper arm level, unspecified arm, sequela -S4451XA Injury of cutaneous sensory nerve at shoulder and upper arm level, right arm, initial encounter -S4451XD Injury of cutaneous sensory nerve at shoulder and upper arm level, right arm, subsequent encounter -S4451XS Injury of cutaneous sensory nerve at shoulder and upper arm level, right arm, sequela -S4452XA Injury of cutaneous sensory nerve at shoulder and upper arm level, left arm, initial encounter -S4452XD Injury of cutaneous sensory nerve at shoulder and upper arm level, left arm, subsequent encounter -S4452XS Injury of cutaneous sensory nerve at shoulder and upper arm level, left arm, sequela -S448X1A Injury of other nerves at shoulder and upper arm level, right arm, initial encounter -S448X1D Injury of other nerves at shoulder and upper arm level, right arm, subsequent encounter -S448X1S Injury of other nerves at shoulder and upper arm level, right arm, sequela -S448X2A Injury of other nerves at shoulder and upper arm level, left arm, initial encounter -S448X2D Injury of other nerves at shoulder and upper arm level, left arm, subsequent encounter -S448X2S Injury of other nerves at shoulder and upper arm level, left arm, sequela -S448X9A Injury of other nerves at shoulder and upper arm level, unspecified arm, initial encounter -S448X9D Injury of other nerves at shoulder and upper arm level, unspecified arm, subsequent encounter -S448X9S Injury of other nerves at shoulder and upper arm level, unspecified arm, sequela -S4490XA Injury of unspecified nerve at shoulder and upper arm level, unspecified arm, initial encounter -S4490XD Injury of unspecified nerve at shoulder and upper arm level, unspecified arm, subsequent encounter -S4490XS Injury of unspecified nerve at shoulder and upper arm level, unspecified arm, sequela -S4491XA Injury of unspecified nerve at shoulder and upper arm level, right arm, initial encounter -S4491XD Injury of unspecified nerve at shoulder and upper arm level, right arm, subsequent encounter -S4491XS Injury of unspecified nerve at shoulder and upper arm level, right arm, sequela -S4492XA Injury of unspecified nerve at shoulder and upper arm level, left arm, initial encounter -S4492XD Injury of unspecified nerve at shoulder and upper arm level, left arm, subsequent encounter -S4492XS Injury of unspecified nerve at shoulder and upper arm level, left arm, sequela -S45001A Unspecified injury of axillary artery, right side, initial encounter -S45001D Unspecified injury of axillary artery, right side, subsequent encounter -S45001S Unspecified injury of axillary artery, right side, sequela -S45002A Unspecified injury of axillary artery, left side, initial encounter -S45002D Unspecified injury of axillary artery, left side, subsequent encounter -S45002S Unspecified injury of axillary artery, left side, sequela -S45009A Unspecified injury of axillary artery, unspecified side, initial encounter -S45009D Unspecified injury of axillary artery, unspecified side, subsequent encounter -S45009S Unspecified injury of axillary artery, unspecified side, sequela -S45011A Laceration of axillary artery, right side, initial encounter -S45011D Laceration of axillary artery, right side, subsequent encounter -S45011S Laceration of axillary artery, right side, sequela -S45012A Laceration of axillary artery, left side, initial encounter -S45012D Laceration of axillary artery, left side, subsequent encounter -S45012S Laceration of axillary artery, left side, sequela -S45019A Laceration of axillary artery, unspecified side, initial encounter -S45019D Laceration of axillary artery, unspecified side, subsequent encounter -S45019S Laceration of axillary artery, unspecified side, sequela -S45091A Other specified injury of axillary artery, right side, initial encounter -S45091D Other specified injury of axillary artery, right side, subsequent encounter -S45091S Other specified injury of axillary artery, right side, sequela -S45092A Other specified injury of axillary artery, left side, initial encounter -S45092D Other specified injury of axillary artery, left side, subsequent encounter -S45092S Other specified injury of axillary artery, left side, sequela -S45099A Other specified injury of axillary artery, unspecified side, initial encounter -S45099D Other specified injury of axillary artery, unspecified side, subsequent encounter -S45099S Other specified injury of axillary artery, unspecified side, sequela -S45101A Unspecified injury of brachial artery, right side, initial encounter -S45101D Unspecified injury of brachial artery, right side, subsequent encounter -S45101S Unspecified injury of brachial artery, right side, sequela -S45102A Unspecified injury of brachial artery, left side, initial encounter -S45102D Unspecified injury of brachial artery, left side, subsequent encounter -S45102S Unspecified injury of brachial artery, left side, sequela -S45109A Unspecified injury of brachial artery, unspecified side, initial encounter -S45109D Unspecified injury of brachial artery, unspecified side, subsequent encounter -S45109S Unspecified injury of brachial artery, unspecified side, sequela -S45111A Laceration of brachial artery, right side, initial encounter -S45111D Laceration of brachial artery, right side, subsequent encounter -S45111S Laceration of brachial artery, right side, sequela -S45112A Laceration of brachial artery, left side, initial encounter -S45112D Laceration of brachial artery, left side, subsequent encounter -S45112S Laceration of brachial artery, left side, sequela -S45119A Laceration of brachial artery, unspecified side, initial encounter -S45119D Laceration of brachial artery, unspecified side, subsequent encounter -S45119S Laceration of brachial artery, unspecified side, sequela -S45191A Other specified injury of brachial artery, right side, initial encounter -S45191D Other specified injury of brachial artery, right side, subsequent encounter -S45191S Other specified injury of brachial artery, right side, sequela -S45192A Other specified injury of brachial artery, left side, initial encounter -S45192D Other specified injury of brachial artery, left side, subsequent encounter -S45192S Other specified injury of brachial artery, left side, sequela -S45199A Other specified injury of brachial artery, unspecified side, initial encounter -S45199D Other specified injury of brachial artery, unspecified side, subsequent encounter -S45199S Other specified injury of brachial artery, unspecified side, sequela -S45201A Unspecified injury of axillary or brachial vein, right side, initial encounter -S45201D Unspecified injury of axillary or brachial vein, right side, subsequent encounter -S45201S Unspecified injury of axillary or brachial vein, right side, sequela -S45202A Unspecified injury of axillary or brachial vein, left side, initial encounter -S45202D Unspecified injury of axillary or brachial vein, left side, subsequent encounter -S45202S Unspecified injury of axillary or brachial vein, left side, sequela -S45209A Unspecified injury of axillary or brachial vein, unspecified side, initial encounter -S45209D Unspecified injury of axillary or brachial vein, unspecified side, subsequent encounter -S45209S Unspecified injury of axillary or brachial vein, unspecified side, sequela -S45211A Laceration of axillary or brachial vein, right side, initial encounter -S45211D Laceration of axillary or brachial vein, right side, subsequent encounter -S45211S Laceration of axillary or brachial vein, right side, sequela -S45212A Laceration of axillary or brachial vein, left side, initial encounter -S45212D Laceration of axillary or brachial vein, left side, subsequent encounter -S45212S Laceration of axillary or brachial vein, left side, sequela -S45219A Laceration of axillary or brachial vein, unspecified side, initial encounter -S45219D Laceration of axillary or brachial vein, unspecified side, subsequent encounter -S45219S Laceration of axillary or brachial vein, unspecified side, sequela -S45291A Other specified injury of axillary or brachial vein, right side, initial encounter -S45291D Other specified injury of axillary or brachial vein, right side, subsequent encounter -S45291S Other specified injury of axillary or brachial vein, right side, sequela -S45292A Other specified injury of axillary or brachial vein, left side, initial encounter -S45292D Other specified injury of axillary or brachial vein, left side, subsequent encounter -S45292S Other specified injury of axillary or brachial vein, left side, sequela -S45299A Other specified injury of axillary or brachial vein, unspecified side, initial encounter -S45299D Other specified injury of axillary or brachial vein, unspecified side, subsequent encounter -S45299S Other specified injury of axillary or brachial vein, unspecified side, sequela -S45301A Unspecified injury of superficial vein at shoulder and upper arm level, right arm, initial encounter -S45301D Unspecified injury of superficial vein at shoulder and upper arm level, right arm, subsequent encounter -S45301S Unspecified injury of superficial vein at shoulder and upper arm level, right arm, sequela -S45302A Unspecified injury of superficial vein at shoulder and upper arm level, left arm, initial encounter -S45302D Unspecified injury of superficial vein at shoulder and upper arm level, left arm, subsequent encounter -S45302S Unspecified injury of superficial vein at shoulder and upper arm level, left arm, sequela -S45309A Unspecified injury of superficial vein at shoulder and upper arm level, unspecified arm, initial encounter -S45309D Unspecified injury of superficial vein at shoulder and upper arm level, unspecified arm, subsequent encounter -S45309S Unspecified injury of superficial vein at shoulder and upper arm level, unspecified arm, sequela -S45311A Laceration of superficial vein at shoulder and upper arm level, right arm, initial encounter -S45311D Laceration of superficial vein at shoulder and upper arm level, right arm, subsequent encounter -S45311S Laceration of superficial vein at shoulder and upper arm level, right arm, sequela -S45312A Laceration of superficial vein at shoulder and upper arm level, left arm, initial encounter -S45312D Laceration of superficial vein at shoulder and upper arm level, left arm, subsequent encounter -S45312S Laceration of superficial vein at shoulder and upper arm level, left arm, sequela -S45319A Laceration of superficial vein at shoulder and upper arm level, unspecified arm, initial encounter -S45319D Laceration of superficial vein at shoulder and upper arm level, unspecified arm, subsequent encounter -S45319S Laceration of superficial vein at shoulder and upper arm level, unspecified arm, sequela -S45391A Other specified injury of superficial vein at shoulder and upper arm level, right arm, initial encounter -S45391D Other specified injury of superficial vein at shoulder and upper arm level, right arm, subsequent encounter -S45391S Other specified injury of superficial vein at shoulder and upper arm level, right arm, sequela -S45392A Other specified injury of superficial vein at shoulder and upper arm level, left arm, initial encounter -S45392D Other specified injury of superficial vein at shoulder and upper arm level, left arm, subsequent encounter -S45392S Other specified injury of superficial vein at shoulder and upper arm level, left arm, sequela -S45399A Other specified injury of superficial vein at shoulder and upper arm level, unspecified arm, initial encounter -S45399D Other specified injury of superficial vein at shoulder and upper arm level, unspecified arm, subsequent encounter -S45399S Other specified injury of superficial vein at shoulder and upper arm level, unspecified arm, sequela -S45801A Unspecified injury of other specified blood vessels at shoulder and upper arm level, right arm, initial encounter -S45801D Unspecified injury of other specified blood vessels at shoulder and upper arm level, right arm, subsequent encounter -S45801S Unspecified injury of other specified blood vessels at shoulder and upper arm level, right arm, sequela -S45802A Unspecified injury of other specified blood vessels at shoulder and upper arm level, left arm, initial encounter -S45802D Unspecified injury of other specified blood vessels at shoulder and upper arm level, left arm, subsequent encounter -S45802S Unspecified injury of other specified blood vessels at shoulder and upper arm level, left arm, sequela -S45809A Unspecified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, initial encounter -S45809D Unspecified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, subsequent encounter -S45809S Unspecified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, sequela -S45811A Laceration of other specified blood vessels at shoulder and upper arm level, right arm, initial encounter -S45811D Laceration of other specified blood vessels at shoulder and upper arm level, right arm, subsequent encounter -S45811S Laceration of other specified blood vessels at shoulder and upper arm level, right arm, sequela -S45812A Laceration of other specified blood vessels at shoulder and upper arm level, left arm, initial encounter -S45812D Laceration of other specified blood vessels at shoulder and upper arm level, left arm, subsequent encounter -S45812S Laceration of other specified blood vessels at shoulder and upper arm level, left arm, sequela -S45819A Laceration of other specified blood vessels at shoulder and upper arm level, unspecified arm, initial encounter -S45819D Laceration of other specified blood vessels at shoulder and upper arm level, unspecified arm, subsequent encounter -S45819S Laceration of other specified blood vessels at shoulder and upper arm level, unspecified arm, sequela -S45891A Other specified injury of other specified blood vessels at shoulder and upper arm level, right arm, initial encounter -S45891D Other specified injury of other specified blood vessels at shoulder and upper arm level, right arm, subsequent encounter -S45891S Other specified injury of other specified blood vessels at shoulder and upper arm level, right arm, sequela -S45892A Other specified injury of other specified blood vessels at shoulder and upper arm level, left arm, initial encounter -S45892D Other specified injury of other specified blood vessels at shoulder and upper arm level, left arm, subsequent encounter -S45892S Other specified injury of other specified blood vessels at shoulder and upper arm level, left arm, sequela -S45899A Other specified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, initial encounter -S45899D Other specified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, subsequent encounter -S45899S Other specified injury of other specified blood vessels at shoulder and upper arm level, unspecified arm, sequela -S45901A Unspecified injury of unspecified blood vessel at shoulder and upper arm level, right arm, initial encounter -S45901D Unspecified injury of unspecified blood vessel at shoulder and upper arm level, right arm, subsequent encounter -S45901S Unspecified injury of unspecified blood vessel at shoulder and upper arm level, right arm, sequela -S45902A Unspecified injury of unspecified blood vessel at shoulder and upper arm level, left arm, initial encounter -S45902D Unspecified injury of unspecified blood vessel at shoulder and upper arm level, left arm, subsequent encounter -S45902S Unspecified injury of unspecified blood vessel at shoulder and upper arm level, left arm, sequela -S45909A Unspecified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, initial encounter -S45909D Unspecified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, subsequent encounter -S45909S Unspecified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, sequela -S45911A Laceration of unspecified blood vessel at shoulder and upper arm level, right arm, initial encounter -S45911D Laceration of unspecified blood vessel at shoulder and upper arm level, right arm, subsequent encounter -S45911S Laceration of unspecified blood vessel at shoulder and upper arm level, right arm, sequela -S45912A Laceration of unspecified blood vessel at shoulder and upper arm level, left arm, initial encounter -S45912D Laceration of unspecified blood vessel at shoulder and upper arm level, left arm, subsequent encounter -S45912S Laceration of unspecified blood vessel at shoulder and upper arm level, left arm, sequela -S45919A Laceration of unspecified blood vessel at shoulder and upper arm level, unspecified arm, initial encounter -S45919D Laceration of unspecified blood vessel at shoulder and upper arm level, unspecified arm, subsequent encounter -S45919S Laceration of unspecified blood vessel at shoulder and upper arm level, unspecified arm, sequela -S45991A Other specified injury of unspecified blood vessel at shoulder and upper arm level, right arm, initial encounter -S45991D Other specified injury of unspecified blood vessel at shoulder and upper arm level, right arm, subsequent encounter -S45991S Other specified injury of unspecified blood vessel at shoulder and upper arm level, right arm, sequela -S45992A Other specified injury of unspecified blood vessel at shoulder and upper arm level, left arm, initial encounter -S45992D Other specified injury of unspecified blood vessel at shoulder and upper arm level, left arm, subsequent encounter -S45992S Other specified injury of unspecified blood vessel at shoulder and upper arm level, left arm, sequela -S45999A Other specified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, initial encounter -S45999D Other specified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, subsequent encounter -S45999S Other specified injury of unspecified blood vessel at shoulder and upper arm level, unspecified arm, sequela -S46001A Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, initial encounter -S46001D Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, subsequent encounter -S46001S Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, sequela -S46002A Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, initial encounter -S46002D Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, subsequent encounter -S46002S Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, sequela -S46009A Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, initial encounter -S46009D Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, subsequent encounter -S46009S Unspecified injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, sequela -S46011A Strain of muscle(s) and tendon(s) of the rotator cuff of right shoulder, initial encounter -S46011D Strain of muscle(s) and tendon(s) of the rotator cuff of right shoulder, subsequent encounter -S46011S Strain of muscle(s) and tendon(s) of the rotator cuff of right shoulder, sequela -S46012A Strain of muscle(s) and tendon(s) of the rotator cuff of left shoulder, initial encounter -S46012D Strain of muscle(s) and tendon(s) of the rotator cuff of left shoulder, subsequent encounter -S46012S Strain of muscle(s) and tendon(s) of the rotator cuff of left shoulder, sequela -S46019A Strain of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, initial encounter -S46019D Strain of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, subsequent encounter -S46019S Strain of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, sequela -S46021A Laceration of muscle(s) and tendon(s) of the rotator cuff of right shoulder, initial encounter -S46021D Laceration of muscle(s) and tendon(s) of the rotator cuff of right shoulder, subsequent encounter -S46021S Laceration of muscle(s) and tendon(s) of the rotator cuff of right shoulder, sequela -S46022A Laceration of muscle(s) and tendon(s) of the rotator cuff of left shoulder, initial encounter -S46022D Laceration of muscle(s) and tendon(s) of the rotator cuff of left shoulder, subsequent encounter -S46022S Laceration of muscle(s) and tendon(s) of the rotator cuff of left shoulder, sequela -S46029A Laceration of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, initial encounter -S46029D Laceration of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, subsequent encounter -S46029S Laceration of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, sequela -S46091A Other injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, initial encounter -S46091D Other injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, subsequent encounter -S46091S Other injury of muscle(s) and tendon(s) of the rotator cuff of right shoulder, sequela -S46092A Other injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, initial encounter -S46092D Other injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, subsequent encounter -S46092S Other injury of muscle(s) and tendon(s) of the rotator cuff of left shoulder, sequela -S46099A Other injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, initial encounter -S46099D Other injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, subsequent encounter -S46099S Other injury of muscle(s) and tendon(s) of the rotator cuff of unspecified shoulder, sequela -S46101A Unspecified injury of muscle, fascia and tendon of long head of biceps, right arm, initial encounter -S46101D Unspecified injury of muscle, fascia and tendon of long head of biceps, right arm, subsequent encounter -S46101S Unspecified injury of muscle, fascia and tendon of long head of biceps, right arm, sequela -S46102A Unspecified injury of muscle, fascia and tendon of long head of biceps, left arm, initial encounter -S46102D Unspecified injury of muscle, fascia and tendon of long head of biceps, left arm, subsequent encounter -S46102S Unspecified injury of muscle, fascia and tendon of long head of biceps, left arm, sequela -S46109A Unspecified injury of muscle, fascia and tendon of long head of biceps, unspecified arm, initial encounter -S46109D Unspecified injury of muscle, fascia and tendon of long head of biceps, unspecified arm, subsequent encounter -S46109S Unspecified injury of muscle, fascia and tendon of long head of biceps, unspecified arm, sequela -S46111A Strain of muscle, fascia and tendon of long head of biceps, right arm, initial encounter -S46111D Strain of muscle, fascia and tendon of long head of biceps, right arm, subsequent encounter -S46111S Strain of muscle, fascia and tendon of long head of biceps, right arm, sequela -S46112A Strain of muscle, fascia and tendon of long head of biceps, left arm, initial encounter -S46112D Strain of muscle, fascia and tendon of long head of biceps, left arm, subsequent encounter -S46112S Strain of muscle, fascia and tendon of long head of biceps, left arm, sequela -S46119A Strain of muscle, fascia and tendon of long head of biceps, unspecified arm, initial encounter -S46119D Strain of muscle, fascia and tendon of long head of biceps, unspecified arm, subsequent encounter -S46119S Strain of muscle, fascia and tendon of long head of biceps, unspecified arm, sequela -S46121A Laceration of muscle, fascia and tendon of long head of biceps, right arm, initial encounter -S46121D Laceration of muscle, fascia and tendon of long head of biceps, right arm, subsequent encounter -S46121S Laceration of muscle, fascia and tendon of long head of biceps, right arm, sequela -S46122A Laceration of muscle, fascia and tendon of long head of biceps, left arm, initial encounter -S46122D Laceration of muscle, fascia and tendon of long head of biceps, left arm, subsequent encounter -S46122S Laceration of muscle, fascia and tendon of long head of biceps, left arm, sequela -S46129A Laceration of muscle, fascia and tendon of long head of biceps, unspecified arm, initial encounter -S46129D Laceration of muscle, fascia and tendon of long head of biceps, unspecified arm, subsequent encounter -S46129S Laceration of muscle, fascia and tendon of long head of biceps, unspecified arm, sequela -S46191A Other injury of muscle, fascia and tendon of long head of biceps, right arm, initial encounter -S46191D Other injury of muscle, fascia and tendon of long head of biceps, right arm, subsequent encounter -S46191S Other injury of muscle, fascia and tendon of long head of biceps, right arm, sequela -S46192A Other injury of muscle, fascia and tendon of long head of biceps, left arm, initial encounter -S46192D Other injury of muscle, fascia and tendon of long head of biceps, left arm, subsequent encounter -S46192S Other injury of muscle, fascia and tendon of long head of biceps, left arm, sequela -S46199A Other injury of muscle, fascia and tendon of long head of biceps, unspecified arm, initial encounter -S46199D Other injury of muscle, fascia and tendon of long head of biceps, unspecified arm, subsequent encounter -S46199S Other injury of muscle, fascia and tendon of long head of biceps, unspecified arm, sequela -S46201A Unspecified injury of muscle, fascia and tendon of other parts of biceps, right arm, initial encounter -S46201D Unspecified injury of muscle, fascia and tendon of other parts of biceps, right arm, subsequent encounter -S46201S Unspecified injury of muscle, fascia and tendon of other parts of biceps, right arm, sequela -S46202A Unspecified injury of muscle, fascia and tendon of other parts of biceps, left arm, initial encounter -S46202D Unspecified injury of muscle, fascia and tendon of other parts of biceps, left arm, subsequent encounter -S46202S Unspecified injury of muscle, fascia and tendon of other parts of biceps, left arm, sequela -S46209A Unspecified injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, initial encounter -S46209D Unspecified injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, subsequent encounter -S46209S Unspecified injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, sequela -S46211A Strain of muscle, fascia and tendon of other parts of biceps, right arm, initial encounter -S46211D Strain of muscle, fascia and tendon of other parts of biceps, right arm, subsequent encounter -S46211S Strain of muscle, fascia and tendon of other parts of biceps, right arm, sequela -S46212A Strain of muscle, fascia and tendon of other parts of biceps, left arm, initial encounter -S46212D Strain of muscle, fascia and tendon of other parts of biceps, left arm, subsequent encounter -S46212S Strain of muscle, fascia and tendon of other parts of biceps, left arm, sequela -S46219A Strain of muscle, fascia and tendon of other parts of biceps, unspecified arm, initial encounter -S46219D Strain of muscle, fascia and tendon of other parts of biceps, unspecified arm, subsequent encounter -S46219S Strain of muscle, fascia and tendon of other parts of biceps, unspecified arm, sequela -S46221A Laceration of muscle, fascia and tendon of other parts of biceps, right arm, initial encounter -S46221D Laceration of muscle, fascia and tendon of other parts of biceps, right arm, subsequent encounter -S46221S Laceration of muscle, fascia and tendon of other parts of biceps, right arm, sequela -S46222A Laceration of muscle, fascia and tendon of other parts of biceps, left arm, initial encounter -S46222D Laceration of muscle, fascia and tendon of other parts of biceps, left arm, subsequent encounter -S46222S Laceration of muscle, fascia and tendon of other parts of biceps, left arm, sequela -S46229A Laceration of muscle, fascia and tendon of other parts of biceps, unspecified arm, initial encounter -S46229D Laceration of muscle, fascia and tendon of other parts of biceps, unspecified arm, subsequent encounter -S46229S Laceration of muscle, fascia and tendon of other parts of biceps, unspecified arm, sequela -S46291A Other injury of muscle, fascia and tendon of other parts of biceps, right arm, initial encounter -S46291D Other injury of muscle, fascia and tendon of other parts of biceps, right arm, subsequent encounter -S46291S Other injury of muscle, fascia and tendon of other parts of biceps, right arm, sequela -S46292A Other injury of muscle, fascia and tendon of other parts of biceps, left arm, initial encounter -S46292D Other injury of muscle, fascia and tendon of other parts of biceps, left arm, subsequent encounter -S46292S Other injury of muscle, fascia and tendon of other parts of biceps, left arm, sequela -S46299A Other injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, initial encounter -S46299D Other injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, subsequent encounter -S46299S Other injury of muscle, fascia and tendon of other parts of biceps, unspecified arm, sequela -S46301A Unspecified injury of muscle, fascia and tendon of triceps, right arm, initial encounter -S46301D Unspecified injury of muscle, fascia and tendon of triceps, right arm, subsequent encounter -S46301S Unspecified injury of muscle, fascia and tendon of triceps, right arm, sequela -S46302A Unspecified injury of muscle, fascia and tendon of triceps, left arm, initial encounter -S46302D Unspecified injury of muscle, fascia and tendon of triceps, left arm, subsequent encounter -S46302S Unspecified injury of muscle, fascia and tendon of triceps, left arm, sequela -S46309A Unspecified injury of muscle, fascia and tendon of triceps, unspecified arm, initial encounter -S46309D Unspecified injury of muscle, fascia and tendon of triceps, unspecified arm, subsequent encounter -S46309S Unspecified injury of muscle, fascia and tendon of triceps, unspecified arm, sequela -S46311A Strain of muscle, fascia and tendon of triceps, right arm, initial encounter -S46311D Strain of muscle, fascia and tendon of triceps, right arm, subsequent encounter -S46311S Strain of muscle, fascia and tendon of triceps, right arm, sequela -S46312A Strain of muscle, fascia and tendon of triceps, left arm, initial encounter -S46312D Strain of muscle, fascia and tendon of triceps, left arm, subsequent encounter -S46312S Strain of muscle, fascia and tendon of triceps, left arm, sequela -S46319A Strain of muscle, fascia and tendon of triceps, unspecified arm, initial encounter -S46319D Strain of muscle, fascia and tendon of triceps, unspecified arm, subsequent encounter -S46319S Strain of muscle, fascia and tendon of triceps, unspecified arm, sequela -S46321A Laceration of muscle, fascia and tendon of triceps, right arm, initial encounter -S46321D Laceration of muscle, fascia and tendon of triceps, right arm, subsequent encounter -S46321S Laceration of muscle, fascia and tendon of triceps, right arm, sequela -S46322A Laceration of muscle, fascia and tendon of triceps, left arm, initial encounter -S46322D Laceration of muscle, fascia and tendon of triceps, left arm, subsequent encounter -S46322S Laceration of muscle, fascia and tendon of triceps, left arm, sequela -S46329A Laceration of muscle, fascia and tendon of triceps, unspecified arm, initial encounter -S46329D Laceration of muscle, fascia and tendon of triceps, unspecified arm, subsequent encounter -S46329S Laceration of muscle, fascia and tendon of triceps, unspecified arm, sequela -S46391A Other injury of muscle, fascia and tendon of triceps, right arm, initial encounter -S46391D Other injury of muscle, fascia and tendon of triceps, right arm, subsequent encounter -S46391S Other injury of muscle, fascia and tendon of triceps, right arm, sequela -S46392A Other injury of muscle, fascia and tendon of triceps, left arm, initial encounter -S46392D Other injury of muscle, fascia and tendon of triceps, left arm, subsequent encounter -S46392S Other injury of muscle, fascia and tendon of triceps, left arm, sequela -S46399A Other injury of muscle, fascia and tendon of triceps, unspecified arm, initial encounter -S46399D Other injury of muscle, fascia and tendon of triceps, unspecified arm, subsequent encounter -S46399S Other injury of muscle, fascia and tendon of triceps, unspecified arm, sequela -S46801A Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, initial encounter -S46801D Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, subsequent encounter -S46801S Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, sequela -S46802A Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, initial encounter -S46802D Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, subsequent encounter -S46802S Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, sequela -S46809A Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, initial encounter -S46809D Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, subsequent encounter -S46809S Unspecified injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, sequela -S46811A Strain of other muscles, fascia and tendons at shoulder and upper arm level, right arm, initial encounter -S46811D Strain of other muscles, fascia and tendons at shoulder and upper arm level, right arm, subsequent encounter -S46811S Strain of other muscles, fascia and tendons at shoulder and upper arm level, right arm, sequela -S46812A Strain of other muscles, fascia and tendons at shoulder and upper arm level, left arm, initial encounter -S46812D Strain of other muscles, fascia and tendons at shoulder and upper arm level, left arm, subsequent encounter -S46812S Strain of other muscles, fascia and tendons at shoulder and upper arm level, left arm, sequela -S46819A Strain of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, initial encounter -S46819D Strain of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, subsequent encounter -S46819S Strain of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, sequela -S46821A Laceration of other muscles, fascia and tendons at shoulder and upper arm level, right arm, initial encounter -S46821D Laceration of other muscles, fascia and tendons at shoulder and upper arm level, right arm, subsequent encounter -S46821S Laceration of other muscles, fascia and tendons at shoulder and upper arm level, right arm, sequela -S46822A Laceration of other muscles, fascia and tendons at shoulder and upper arm level, left arm, initial encounter -S46822D Laceration of other muscles, fascia and tendons at shoulder and upper arm level, left arm, subsequent encounter -S46822S Laceration of other muscles, fascia and tendons at shoulder and upper arm level, left arm, sequela -S46829A Laceration of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, initial encounter -S46829D Laceration of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, subsequent encounter -S46829S Laceration of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, sequela -S46891A Other injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, initial encounter -S46891D Other injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, subsequent encounter -S46891S Other injury of other muscles, fascia and tendons at shoulder and upper arm level, right arm, sequela -S46892A Other injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, initial encounter -S46892D Other injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, subsequent encounter -S46892S Other injury of other muscles, fascia and tendons at shoulder and upper arm level, left arm, sequela -S46899A Other injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, initial encounter -S46899D Other injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, subsequent encounter -S46899S Other injury of other muscles, fascia and tendons at shoulder and upper arm level, unspecified arm, sequela -S46901A Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, initial encounter -S46901D Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, subsequent encounter -S46901S Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, sequela -S46902A Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, initial encounter -S46902D Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, subsequent encounter -S46902S Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, sequela -S46909A Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, initial encounter -S46909D Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, subsequent encounter -S46909S Unspecified injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, sequela -S46911A Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, initial encounter -S46911D Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, subsequent encounter -S46911S Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, sequela -S46912A Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, initial encounter -S46912D Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, subsequent encounter -S46912S Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, sequela -S46919A Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, initial encounter -S46919D Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, subsequent encounter -S46919S Strain of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, sequela -S46921A Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, initial encounter -S46921D Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, subsequent encounter -S46921S Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, sequela -S46922A Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, initial encounter -S46922D Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, subsequent encounter -S46922S Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, sequela -S46929A Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, initial encounter -S46929D Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, subsequent encounter -S46929S Laceration of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, sequela -S46991A Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, initial encounter -S46991D Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, subsequent encounter -S46991S Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, right arm, sequela -S46992A Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, initial encounter -S46992D Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, subsequent encounter -S46992S Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, left arm, sequela -S46999A Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, initial encounter -S46999D Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, subsequent encounter -S46999S Other injury of unspecified muscle, fascia and tendon at shoulder and upper arm level, unspecified arm, sequela -S471XXA Crushing injury of right shoulder and upper arm, initial encounter -S471XXD Crushing injury of right shoulder and upper arm, subsequent encounter -S471XXS Crushing injury of right shoulder and upper arm, sequela -S472XXA Crushing injury of left shoulder and upper arm, initial encounter -S472XXD Crushing injury of left shoulder and upper arm, subsequent encounter -S472XXS Crushing injury of left shoulder and upper arm, sequela -S479XXA Crushing injury of shoulder and upper arm, unspecified arm, initial encounter -S479XXD Crushing injury of shoulder and upper arm, unspecified arm, subsequent encounter -S479XXS Crushing injury of shoulder and upper arm, unspecified arm, sequela -S48011A Complete traumatic amputation at right shoulder joint, initial encounter -S48011D Complete traumatic amputation at right shoulder joint, subsequent encounter -S48011S Complete traumatic amputation at right shoulder joint, sequela -S48012A Complete traumatic amputation at left shoulder joint, initial encounter -S48012D Complete traumatic amputation at left shoulder joint, subsequent encounter -S48012S Complete traumatic amputation at left shoulder joint, sequela -S48019A Complete traumatic amputation at unspecified shoulder joint, initial encounter -S48019D Complete traumatic amputation at unspecified shoulder joint, subsequent encounter -S48019S Complete traumatic amputation at unspecified shoulder joint, sequela -S48021A Partial traumatic amputation at right shoulder joint, initial encounter -S48021D Partial traumatic amputation at right shoulder joint, subsequent encounter -S48021S Partial traumatic amputation at right shoulder joint, sequela -S48022A Partial traumatic amputation at left shoulder joint, initial encounter -S48022D Partial traumatic amputation at left shoulder joint, subsequent encounter -S48022S Partial traumatic amputation at left shoulder joint, sequela -S48029A Partial traumatic amputation at unspecified shoulder joint, initial encounter -S48029D Partial traumatic amputation at unspecified shoulder joint, subsequent encounter -S48029S Partial traumatic amputation at unspecified shoulder joint, sequela -S48111A Complete traumatic amputation at level between right shoulder and elbow, initial encounter -S48111D Complete traumatic amputation at level between right shoulder and elbow, subsequent encounter -S48111S Complete traumatic amputation at level between right shoulder and elbow, sequela -S48112A Complete traumatic amputation at level between left shoulder and elbow, initial encounter -S48112D Complete traumatic amputation at level between left shoulder and elbow, subsequent encounter -S48112S Complete traumatic amputation at level between left shoulder and elbow, sequela -S48119A Complete traumatic amputation at level between unspecified shoulder and elbow, initial encounter -S48119D Complete traumatic amputation at level between unspecified shoulder and elbow, subsequent encounter -S48119S Complete traumatic amputation at level between unspecified shoulder and elbow, sequela -S48121A Partial traumatic amputation at level between right shoulder and elbow, initial encounter -S48121D Partial traumatic amputation at level between right shoulder and elbow, subsequent encounter -S48121S Partial traumatic amputation at level between right shoulder and elbow, sequela -S48122A Partial traumatic amputation at level between left shoulder and elbow, initial encounter -S48122D Partial traumatic amputation at level between left shoulder and elbow, subsequent encounter -S48122S Partial traumatic amputation at level between left shoulder and elbow, sequela -S48129A Partial traumatic amputation at level between unspecified shoulder and elbow, initial encounter -S48129D Partial traumatic amputation at level between unspecified shoulder and elbow, subsequent encounter -S48129S Partial traumatic amputation at level between unspecified shoulder and elbow, sequela -S48911A Complete traumatic amputation of right shoulder and upper arm, level unspecified, initial encounter -S48911D Complete traumatic amputation of right shoulder and upper arm, level unspecified, subsequent encounter -S48911S Complete traumatic amputation of right shoulder and upper arm, level unspecified, sequela -S48912A Complete traumatic amputation of left shoulder and upper arm, level unspecified, initial encounter -S48912D Complete traumatic amputation of left shoulder and upper arm, level unspecified, subsequent encounter -S48912S Complete traumatic amputation of left shoulder and upper arm, level unspecified, sequela -S48919A Complete traumatic amputation of unspecified shoulder and upper arm, level unspecified, initial encounter -S48919D Complete traumatic amputation of unspecified shoulder and upper arm, level unspecified, subsequent encounter -S48919S Complete traumatic amputation of unspecified shoulder and upper arm, level unspecified, sequela -S48921A Partial traumatic amputation of right shoulder and upper arm, level unspecified, initial encounter -S48921D Partial traumatic amputation of right shoulder and upper arm, level unspecified, subsequent encounter -S48921S Partial traumatic amputation of right shoulder and upper arm, level unspecified, sequela -S48922A Partial traumatic amputation of left shoulder and upper arm, level unspecified, initial encounter -S48922D Partial traumatic amputation of left shoulder and upper arm, level unspecified, subsequent encounter -S48922S Partial traumatic amputation of left shoulder and upper arm, level unspecified, sequela -S48929A Partial traumatic amputation of unspecified shoulder and upper arm, level unspecified, initial encounter -S48929D Partial traumatic amputation of unspecified shoulder and upper arm, level unspecified, subsequent encounter -S48929S Partial traumatic amputation of unspecified shoulder and upper arm, level unspecified, sequela -S49001A Unspecified physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49001D Unspecified physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49001G Unspecified physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49001K Unspecified physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49001P Unspecified physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49001S Unspecified physeal fracture of upper end of humerus, right arm, sequela -S49002A Unspecified physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49002D Unspecified physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49002G Unspecified physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49002K Unspecified physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49002P Unspecified physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49002S Unspecified physeal fracture of upper end of humerus, left arm, sequela -S49009A Unspecified physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49009D Unspecified physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49009G Unspecified physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49009K Unspecified physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49009P Unspecified physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49009S Unspecified physeal fracture of upper end of humerus, unspecified arm, sequela -S49011A Salter-Harris Type I physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49011D Salter-Harris Type I physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49011G Salter-Harris Type I physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49011K Salter-Harris Type I physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49011P Salter-Harris Type I physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49011S Salter-Harris Type I physeal fracture of upper end of humerus, right arm, sequela -S49012A Salter-Harris Type I physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49012D Salter-Harris Type I physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49012G Salter-Harris Type I physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49012K Salter-Harris Type I physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49012P Salter-Harris Type I physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49012S Salter-Harris Type I physeal fracture of upper end of humerus, left arm, sequela -S49019A Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49019D Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49019G Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49019K Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49019P Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49019S Salter-Harris Type I physeal fracture of upper end of humerus, unspecified arm, sequela -S49021A Salter-Harris Type II physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49021D Salter-Harris Type II physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49021G Salter-Harris Type II physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49021K Salter-Harris Type II physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49021P Salter-Harris Type II physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49021S Salter-Harris Type II physeal fracture of upper end of humerus, right arm, sequela -S49022A Salter-Harris Type II physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49022D Salter-Harris Type II physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49022G Salter-Harris Type II physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49022K Salter-Harris Type II physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49022P Salter-Harris Type II physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49022S Salter-Harris Type II physeal fracture of upper end of humerus, left arm, sequela -S49029A Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49029D Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49029G Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49029K Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49029P Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49029S Salter-Harris Type II physeal fracture of upper end of humerus, unspecified arm, sequela -S49031A Salter-Harris Type III physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49031D Salter-Harris Type III physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49031G Salter-Harris Type III physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49031K Salter-Harris Type III physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49031P Salter-Harris Type III physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49031S Salter-Harris Type III physeal fracture of upper end of humerus, right arm, sequela -S49032A Salter-Harris Type III physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49032D Salter-Harris Type III physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49032G Salter-Harris Type III physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49032K Salter-Harris Type III physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49032P Salter-Harris Type III physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49032S Salter-Harris Type III physeal fracture of upper end of humerus, left arm, sequela -S49039A Salter-Harris Type III physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49039D Salter-Harris Type III physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49039G Salter-Harris Type III physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49039K Salter-Harris Type III physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49039P Salter-Harris Type III physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49039S Salter-Harris Type III physeal fracture of upper end of humerus, unspecified arm, sequela -S49041A Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49041D Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49041G Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49041K Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49041P Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49041S Salter-Harris Type IV physeal fracture of upper end of humerus, right arm, sequela -S49042A Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49042D Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49042G Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49042K Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49042P Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49042S Salter-Harris Type IV physeal fracture of upper end of humerus, left arm, sequela -S49049A Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49049D Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49049G Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49049K Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49049P Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49049S Salter-Harris Type IV physeal fracture of upper end of humerus, unspecified arm, sequela -S49091A Other physeal fracture of upper end of humerus, right arm, initial encounter for closed fracture -S49091D Other physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with routine healing -S49091G Other physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49091K Other physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with nonunion -S49091P Other physeal fracture of upper end of humerus, right arm, subsequent encounter for fracture with malunion -S49091S Other physeal fracture of upper end of humerus, right arm, sequela -S49092A Other physeal fracture of upper end of humerus, left arm, initial encounter for closed fracture -S49092D Other physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with routine healing -S49092G Other physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49092K Other physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with nonunion -S49092P Other physeal fracture of upper end of humerus, left arm, subsequent encounter for fracture with malunion -S49092S Other physeal fracture of upper end of humerus, left arm, sequela -S49099A Other physeal fracture of upper end of humerus, unspecified arm, initial encounter for closed fracture -S49099D Other physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49099G Other physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49099K Other physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49099P Other physeal fracture of upper end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49099S Other physeal fracture of upper end of humerus, unspecified arm, sequela -S49101A Unspecified physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49101D Unspecified physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49101G Unspecified physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49101K Unspecified physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49101P Unspecified physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49101S Unspecified physeal fracture of lower end of humerus, right arm, sequela -S49102A Unspecified physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49102D Unspecified physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49102G Unspecified physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49102K Unspecified physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49102P Unspecified physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49102S Unspecified physeal fracture of lower end of humerus, left arm, sequela -S49109A Unspecified physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49109D Unspecified physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49109G Unspecified physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49109K Unspecified physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49109P Unspecified physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49109S Unspecified physeal fracture of lower end of humerus, unspecified arm, sequela -S49111A Salter-Harris Type I physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49111D Salter-Harris Type I physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49111G Salter-Harris Type I physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49111K Salter-Harris Type I physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49111P Salter-Harris Type I physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49111S Salter-Harris Type I physeal fracture of lower end of humerus, right arm, sequela -S49112A Salter-Harris Type I physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49112D Salter-Harris Type I physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49112G Salter-Harris Type I physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49112K Salter-Harris Type I physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49112P Salter-Harris Type I physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49112S Salter-Harris Type I physeal fracture of lower end of humerus, left arm, sequela -S49119A Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49119D Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49119G Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49119K Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49119P Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49119S Salter-Harris Type I physeal fracture of lower end of humerus, unspecified arm, sequela -S49121A Salter-Harris Type II physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49121D Salter-Harris Type II physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49121G Salter-Harris Type II physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49121K Salter-Harris Type II physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49121P Salter-Harris Type II physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49121S Salter-Harris Type II physeal fracture of lower end of humerus, right arm, sequela -S49122A Salter-Harris Type II physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49122D Salter-Harris Type II physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49122G Salter-Harris Type II physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49122K Salter-Harris Type II physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49122P Salter-Harris Type II physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49122S Salter-Harris Type II physeal fracture of lower end of humerus, left arm, sequela -S49129A Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49129D Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49129G Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49129K Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49129P Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49129S Salter-Harris Type II physeal fracture of lower end of humerus, unspecified arm, sequela -S49131A Salter-Harris Type III physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49131D Salter-Harris Type III physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49131G Salter-Harris Type III physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49131K Salter-Harris Type III physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49131P Salter-Harris Type III physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49131S Salter-Harris Type III physeal fracture of lower end of humerus, right arm, sequela -S49132A Salter-Harris Type III physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49132D Salter-Harris Type III physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49132G Salter-Harris Type III physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49132K Salter-Harris Type III physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49132P Salter-Harris Type III physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49132S Salter-Harris Type III physeal fracture of lower end of humerus, left arm, sequela -S49139A Salter-Harris Type III physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49139D Salter-Harris Type III physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49139G Salter-Harris Type III physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49139K Salter-Harris Type III physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49139P Salter-Harris Type III physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49139S Salter-Harris Type III physeal fracture of lower end of humerus, unspecified arm, sequela -S49141A Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49141D Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49141G Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49141K Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49141P Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49141S Salter-Harris Type IV physeal fracture of lower end of humerus, right arm, sequela -S49142A Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49142D Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49142G Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49142K Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49142P Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49142S Salter-Harris Type IV physeal fracture of lower end of humerus, left arm, sequela -S49149A Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49149D Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49149G Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49149K Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49149P Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49149S Salter-Harris Type IV physeal fracture of lower end of humerus, unspecified arm, sequela -S49191A Other physeal fracture of lower end of humerus, right arm, initial encounter for closed fracture -S49191D Other physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with routine healing -S49191G Other physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with delayed healing -S49191K Other physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with nonunion -S49191P Other physeal fracture of lower end of humerus, right arm, subsequent encounter for fracture with malunion -S49191S Other physeal fracture of lower end of humerus, right arm, sequela -S49192A Other physeal fracture of lower end of humerus, left arm, initial encounter for closed fracture -S49192D Other physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with routine healing -S49192G Other physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with delayed healing -S49192K Other physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with nonunion -S49192P Other physeal fracture of lower end of humerus, left arm, subsequent encounter for fracture with malunion -S49192S Other physeal fracture of lower end of humerus, left arm, sequela -S49199A Other physeal fracture of lower end of humerus, unspecified arm, initial encounter for closed fracture -S49199D Other physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with routine healing -S49199G Other physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with delayed healing -S49199K Other physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with nonunion -S49199P Other physeal fracture of lower end of humerus, unspecified arm, subsequent encounter for fracture with malunion -S49199S Other physeal fracture of lower end of humerus, unspecified arm, sequela -S4980XA Other specified injuries of shoulder and upper arm, unspecified arm, initial encounter -S4980XD Other specified injuries of shoulder and upper arm, unspecified arm, subsequent encounter -S4980XS Other specified injuries of shoulder and upper arm, unspecified arm, sequela -S4981XA Other specified injuries of right shoulder and upper arm, initial encounter -S4981XD Other specified injuries of right shoulder and upper arm, subsequent encounter -S4981XS Other specified injuries of right shoulder and upper arm, sequela -S4982XA Other specified injuries of left shoulder and upper arm, initial encounter -S4982XD Other specified injuries of left shoulder and upper arm, subsequent encounter -S4982XS Other specified injuries of left shoulder and upper arm, sequela -S4990XA Unspecified injury of shoulder and upper arm, unspecified arm, initial encounter -S4990XD Unspecified injury of shoulder and upper arm, unspecified arm, subsequent encounter -S4990XS Unspecified injury of shoulder and upper arm, unspecified arm, sequela -S4991XA Unspecified injury of right shoulder and upper arm, initial encounter -S4991XD Unspecified injury of right shoulder and upper arm, subsequent encounter -S4991XS Unspecified injury of right shoulder and upper arm, sequela -S4992XA Unspecified injury of left shoulder and upper arm, initial encounter -S4992XD Unspecified injury of left shoulder and upper arm, subsequent encounter -S4992XS Unspecified injury of left shoulder and upper arm, sequela -S5000XA Contusion of unspecified elbow, initial encounter -S5000XD Contusion of unspecified elbow, subsequent encounter -S5000XS Contusion of unspecified elbow, sequela -S5001XA Contusion of right elbow, initial encounter -S5001XD Contusion of right elbow, subsequent encounter -S5001XS Contusion of right elbow, sequela -S5002XA Contusion of left elbow, initial encounter -S5002XD Contusion of left elbow, subsequent encounter -S5002XS Contusion of left elbow, sequela -S5010XA Contusion of unspecified forearm, initial encounter -S5010XD Contusion of unspecified forearm, subsequent encounter -S5010XS Contusion of unspecified forearm, sequela -S5011XA Contusion of right forearm, initial encounter -S5011XD Contusion of right forearm, subsequent encounter -S5011XS Contusion of right forearm, sequela -S5012XA Contusion of left forearm, initial encounter -S5012XD Contusion of left forearm, subsequent encounter -S5012XS Contusion of left forearm, sequela -S50311A Abrasion of right elbow, initial encounter -S50311D Abrasion of right elbow, subsequent encounter -S50311S Abrasion of right elbow, sequela -S50312A Abrasion of left elbow, initial encounter -S50312D Abrasion of left elbow, subsequent encounter -S50312S Abrasion of left elbow, sequela -S50319A Abrasion of unspecified elbow, initial encounter -S50319D Abrasion of unspecified elbow, subsequent encounter -S50319S Abrasion of unspecified elbow, sequela -S50321A Blister (nonthermal) of right elbow, initial encounter -S50321D Blister (nonthermal) of right elbow, subsequent encounter -S50321S Blister (nonthermal) of right elbow, sequela -S50322A Blister (nonthermal) of left elbow, initial encounter -S50322D Blister (nonthermal) of left elbow, subsequent encounter -S50322S Blister (nonthermal) of left elbow, sequela -S50329A Blister (nonthermal) of unspecified elbow, initial encounter -S50329D Blister (nonthermal) of unspecified elbow, subsequent encounter -S50329S Blister (nonthermal) of unspecified elbow, sequela -S50341A External constriction of right elbow, initial encounter -S50341D External constriction of right elbow, subsequent encounter -S50341S External constriction of right elbow, sequela -S50342A External constriction of left elbow, initial encounter -S50342D External constriction of left elbow, subsequent encounter -S50342S External constriction of left elbow, sequela -S50349A External constriction of unspecified elbow, initial encounter -S50349D External constriction of unspecified elbow, subsequent encounter -S50349S External constriction of unspecified elbow, sequela -S50351A Superficial foreign body of right elbow, initial encounter -S50351D Superficial foreign body of right elbow, subsequent encounter -S50351S Superficial foreign body of right elbow, sequela -S50352A Superficial foreign body of left elbow, initial encounter -S50352D Superficial foreign body of left elbow, subsequent encounter -S50352S Superficial foreign body of left elbow, sequela -S50359A Superficial foreign body of unspecified elbow, initial encounter -S50359D Superficial foreign body of unspecified elbow, subsequent encounter -S50359S Superficial foreign body of unspecified elbow, sequela -S50361A Insect bite (nonvenomous) of right elbow, initial encounter -S50361D Insect bite (nonvenomous) of right elbow, subsequent encounter -S50361S Insect bite (nonvenomous) of right elbow, sequela -S50362A Insect bite (nonvenomous) of left elbow, initial encounter -S50362D Insect bite (nonvenomous) of left elbow, subsequent encounter -S50362S Insect bite (nonvenomous) of left elbow, sequela -S50369A Insect bite (nonvenomous) of unspecified elbow, initial encounter -S50369D Insect bite (nonvenomous) of unspecified elbow, subsequent encounter -S50369S Insect bite (nonvenomous) of unspecified elbow, sequela -S50371A Other superficial bite of right elbow, initial encounter -S50371D Other superficial bite of right elbow, subsequent encounter -S50371S Other superficial bite of right elbow, sequela -S50372A Other superficial bite of left elbow, initial encounter -S50372D Other superficial bite of left elbow, subsequent encounter -S50372S Other superficial bite of left elbow, sequela -S50379A Other superficial bite of unspecified elbow, initial encounter -S50379D Other superficial bite of unspecified elbow, subsequent encounter -S50379S Other superficial bite of unspecified elbow, sequela -S50811A Abrasion of right forearm, initial encounter -S50811D Abrasion of right forearm, subsequent encounter -S50811S Abrasion of right forearm, sequela -S50812A Abrasion of left forearm, initial encounter -S50812D Abrasion of left forearm, subsequent encounter -S50812S Abrasion of left forearm, sequela -S50819A Abrasion of unspecified forearm, initial encounter -S50819D Abrasion of unspecified forearm, subsequent encounter -S50819S Abrasion of unspecified forearm, sequela -S50821A Blister (nonthermal) of right forearm, initial encounter -S50821D Blister (nonthermal) of right forearm, subsequent encounter -S50821S Blister (nonthermal) of right forearm, sequela -S50822A Blister (nonthermal) of left forearm, initial encounter -S50822D Blister (nonthermal) of left forearm, subsequent encounter -S50822S Blister (nonthermal) of left forearm, sequela -S50829A Blister (nonthermal) of unspecified forearm, initial encounter -S50829D Blister (nonthermal) of unspecified forearm, subsequent encounter -S50829S Blister (nonthermal) of unspecified forearm, sequela -S50841A External constriction of right forearm, initial encounter -S50841D External constriction of right forearm, subsequent encounter -S50841S External constriction of right forearm, sequela -S50842A External constriction of left forearm, initial encounter -S50842D External constriction of left forearm, subsequent encounter -S50842S External constriction of left forearm, sequela -S50849A External constriction of unspecified forearm, initial encounter -S50849D External constriction of unspecified forearm, subsequent encounter -S50849S External constriction of unspecified forearm, sequela -S50851A Superficial foreign body of right forearm, initial encounter -S50851D Superficial foreign body of right forearm, subsequent encounter -S50851S Superficial foreign body of right forearm, sequela -S50852A Superficial foreign body of left forearm, initial encounter -S50852D Superficial foreign body of left forearm, subsequent encounter -S50852S Superficial foreign body of left forearm, sequela -S50859A Superficial foreign body of unspecified forearm, initial encounter -S50859D Superficial foreign body of unspecified forearm, subsequent encounter -S50859S Superficial foreign body of unspecified forearm, sequela -S50861A Insect bite (nonvenomous) of right forearm, initial encounter -S50861D Insect bite (nonvenomous) of right forearm, subsequent encounter -S50861S Insect bite (nonvenomous) of right forearm, sequela -S50862A Insect bite (nonvenomous) of left forearm, initial encounter -S50862D Insect bite (nonvenomous) of left forearm, subsequent encounter -S50862S Insect bite (nonvenomous) of left forearm, sequela -S50869A Insect bite (nonvenomous) of unspecified forearm, initial encounter -S50869D Insect bite (nonvenomous) of unspecified forearm, subsequent encounter -S50869S Insect bite (nonvenomous) of unspecified forearm, sequela -S50871A Other superficial bite of right forearm, initial encounter -S50871D Other superficial bite of right forearm, subsequent encounter -S50871S Other superficial bite of right forearm, sequela -S50872A Other superficial bite of left forearm, initial encounter -S50872D Other superficial bite of left forearm, subsequent encounter -S50872S Other superficial bite of left forearm, sequela -S50879A Other superficial bite of unspecified forearm, initial encounter -S50879D Other superficial bite of unspecified forearm, subsequent encounter -S50879S Other superficial bite of unspecified forearm, sequela -S50901A Unspecified superficial injury of right elbow, initial encounter -S50901D Unspecified superficial injury of right elbow, subsequent encounter -S50901S Unspecified superficial injury of right elbow, sequela -S50902A Unspecified superficial injury of left elbow, initial encounter -S50902D Unspecified superficial injury of left elbow, subsequent encounter -S50902S Unspecified superficial injury of left elbow, sequela -S50909A Unspecified superficial injury of unspecified elbow, initial encounter -S50909D Unspecified superficial injury of unspecified elbow, subsequent encounter -S50909S Unspecified superficial injury of unspecified elbow, sequela -S50911A Unspecified superficial injury of right forearm, initial encounter -S50911D Unspecified superficial injury of right forearm, subsequent encounter -S50911S Unspecified superficial injury of right forearm, sequela -S50912A Unspecified superficial injury of left forearm, initial encounter -S50912D Unspecified superficial injury of left forearm, subsequent encounter -S50912S Unspecified superficial injury of left forearm, sequela -S50919A Unspecified superficial injury of unspecified forearm, initial encounter -S50919D Unspecified superficial injury of unspecified forearm, subsequent encounter -S50919S Unspecified superficial injury of unspecified forearm, sequela -S51001A Unspecified open wound of right elbow, initial encounter -S51001D Unspecified open wound of right elbow, subsequent encounter -S51001S Unspecified open wound of right elbow, sequela -S51002A Unspecified open wound of left elbow, initial encounter -S51002D Unspecified open wound of left elbow, subsequent encounter -S51002S Unspecified open wound of left elbow, sequela -S51009A Unspecified open wound of unspecified elbow, initial encounter -S51009D Unspecified open wound of unspecified elbow, subsequent encounter -S51009S Unspecified open wound of unspecified elbow, sequela -S51011A Laceration without foreign body of right elbow, initial encounter -S51011D Laceration without foreign body of right elbow, subsequent encounter -S51011S Laceration without foreign body of right elbow, sequela -S51012A Laceration without foreign body of left elbow, initial encounter -S51012D Laceration without foreign body of left elbow, subsequent encounter -S51012S Laceration without foreign body of left elbow, sequela -S51019A Laceration without foreign body of unspecified elbow, initial encounter -S51019D Laceration without foreign body of unspecified elbow, subsequent encounter -S51019S Laceration without foreign body of unspecified elbow, sequela -S51021A Laceration with foreign body of right elbow, initial encounter -S51021D Laceration with foreign body of right elbow, subsequent encounter -S51021S Laceration with foreign body of right elbow, sequela -S51022A Laceration with foreign body of left elbow, initial encounter -S51022D Laceration with foreign body of left elbow, subsequent encounter -S51022S Laceration with foreign body of left elbow, sequela -S51029A Laceration with foreign body of unspecified elbow, initial encounter -S51029D Laceration with foreign body of unspecified elbow, subsequent encounter -S51029S Laceration with foreign body of unspecified elbow, sequela -S51031A Puncture wound without foreign body of right elbow, initial encounter -S51031D Puncture wound without foreign body of right elbow, subsequent encounter -S51031S Puncture wound without foreign body of right elbow, sequela -S51032A Puncture wound without foreign body of left elbow, initial encounter -S51032D Puncture wound without foreign body of left elbow, subsequent encounter -S51032S Puncture wound without foreign body of left elbow, sequela -S51039A Puncture wound without foreign body of unspecified elbow, initial encounter -S51039D Puncture wound without foreign body of unspecified elbow, subsequent encounter -S51039S Puncture wound without foreign body of unspecified elbow, sequela -S51041A Puncture wound with foreign body of right elbow, initial encounter -S51041D Puncture wound with foreign body of right elbow, subsequent encounter -S51041S Puncture wound with foreign body of right elbow, sequela -S51042A Puncture wound with foreign body of left elbow, initial encounter -S51042D Puncture wound with foreign body of left elbow, subsequent encounter -S51042S Puncture wound with foreign body of left elbow, sequela -S51049A Puncture wound with foreign body of unspecified elbow, initial encounter -S51049D Puncture wound with foreign body of unspecified elbow, subsequent encounter -S51049S Puncture wound with foreign body of unspecified elbow, sequela -S51051A Open bite, right elbow, initial encounter -S51051D Open bite, right elbow, subsequent encounter -S51051S Open bite, right elbow, sequela -S51052A Open bite, left elbow, initial encounter -S51052D Open bite, left elbow, subsequent encounter -S51052S Open bite, left elbow, sequela -S51059A Open bite, unspecified elbow, initial encounter -S51059D Open bite, unspecified elbow, subsequent encounter -S51059S Open bite, unspecified elbow, sequela -S51801A Unspecified open wound of right forearm, initial encounter -S51801D Unspecified open wound of right forearm, subsequent encounter -S51801S Unspecified open wound of right forearm, sequela -S51802A Unspecified open wound of left forearm, initial encounter -S51802D Unspecified open wound of left forearm, subsequent encounter -S51802S Unspecified open wound of left forearm, sequela -S51809A Unspecified open wound of unspecified forearm, initial encounter -S51809D Unspecified open wound of unspecified forearm, subsequent encounter -S51809S Unspecified open wound of unspecified forearm, sequela -S51811A Laceration without foreign body of right forearm, initial encounter -S51811D Laceration without foreign body of right forearm, subsequent encounter -S51811S Laceration without foreign body of right forearm, sequela -S51812A Laceration without foreign body of left forearm, initial encounter -S51812D Laceration without foreign body of left forearm, subsequent encounter -S51812S Laceration without foreign body of left forearm, sequela -S51819A Laceration without foreign body of unspecified forearm, initial encounter -S51819D Laceration without foreign body of unspecified forearm, subsequent encounter -S51819S Laceration without foreign body of unspecified forearm, sequela -S51821A Laceration with foreign body of right forearm, initial encounter -S51821D Laceration with foreign body of right forearm, subsequent encounter -S51821S Laceration with foreign body of right forearm, sequela -S51822A Laceration with foreign body of left forearm, initial encounter -S51822D Laceration with foreign body of left forearm, subsequent encounter -S51822S Laceration with foreign body of left forearm, sequela -S51829A Laceration with foreign body of unspecified forearm, initial encounter -S51829D Laceration with foreign body of unspecified forearm, subsequent encounter -S51829S Laceration with foreign body of unspecified forearm, sequela -S51831A Puncture wound without foreign body of right forearm, initial encounter -S51831D Puncture wound without foreign body of right forearm, subsequent encounter -S51831S Puncture wound without foreign body of right forearm, sequela -S51832A Puncture wound without foreign body of left forearm, initial encounter -S51832D Puncture wound without foreign body of left forearm, subsequent encounter -S51832S Puncture wound without foreign body of left forearm, sequela -S51839A Puncture wound without foreign body of unspecified forearm, initial encounter -S51839D Puncture wound without foreign body of unspecified forearm, subsequent encounter -S51839S Puncture wound without foreign body of unspecified forearm, sequela -S51841A Puncture wound with foreign body of right forearm, initial encounter -S51841D Puncture wound with foreign body of right forearm, subsequent encounter -S51841S Puncture wound with foreign body of right forearm, sequela -S51842A Puncture wound with foreign body of left forearm, initial encounter -S51842D Puncture wound with foreign body of left forearm, subsequent encounter -S51842S Puncture wound with foreign body of left forearm, sequela -S51849A Puncture wound with foreign body of unspecified forearm, initial encounter -S51849D Puncture wound with foreign body of unspecified forearm, subsequent encounter -S51849S Puncture wound with foreign body of unspecified forearm, sequela -S51851A Open bite of right forearm, initial encounter -S51851D Open bite of right forearm, subsequent encounter -S51851S Open bite of right forearm, sequela -S51852A Open bite of left forearm, initial encounter -S51852D Open bite of left forearm, subsequent encounter -S51852S Open bite of left forearm, sequela -S51859A Open bite of unspecified forearm, initial encounter -S51859D Open bite of unspecified forearm, subsequent encounter -S51859S Open bite of unspecified forearm, sequela -S52001A Unspecified fracture of upper end of right ulna, initial encounter for closed fracture -S52001B Unspecified fracture of upper end of right ulna, initial encounter for open fracture type I or II -S52001C Unspecified fracture of upper end of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52001D Unspecified fracture of upper end of right ulna, subsequent encounter for closed fracture with routine healing -S52001E Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52001F Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52001G Unspecified fracture of upper end of right ulna, subsequent encounter for closed fracture with delayed healing -S52001H Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52001J Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52001K Unspecified fracture of upper end of right ulna, subsequent encounter for closed fracture with nonunion -S52001M Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52001N Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52001P Unspecified fracture of upper end of right ulna, subsequent encounter for closed fracture with malunion -S52001Q Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with malunion -S52001R Unspecified fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52001S Unspecified fracture of upper end of right ulna, sequela -S52002A Unspecified fracture of upper end of left ulna, initial encounter for closed fracture -S52002B Unspecified fracture of upper end of left ulna, initial encounter for open fracture type I or II -S52002C Unspecified fracture of upper end of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52002D Unspecified fracture of upper end of left ulna, subsequent encounter for closed fracture with routine healing -S52002E Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52002F Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52002G Unspecified fracture of upper end of left ulna, subsequent encounter for closed fracture with delayed healing -S52002H Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52002J Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52002K Unspecified fracture of upper end of left ulna, subsequent encounter for closed fracture with nonunion -S52002M Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52002N Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52002P Unspecified fracture of upper end of left ulna, subsequent encounter for closed fracture with malunion -S52002Q Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with malunion -S52002R Unspecified fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52002S Unspecified fracture of upper end of left ulna, sequela -S52009A Unspecified fracture of upper end of unspecified ulna, initial encounter for closed fracture -S52009B Unspecified fracture of upper end of unspecified ulna, initial encounter for open fracture type I or II -S52009C Unspecified fracture of upper end of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52009D Unspecified fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52009E Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52009F Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52009G Unspecified fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52009H Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52009J Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52009K Unspecified fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52009M Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52009N Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52009P Unspecified fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with malunion -S52009Q Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52009R Unspecified fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52009S Unspecified fracture of upper end of unspecified ulna, sequela -S52011A Torus fracture of upper end of right ulna, initial encounter for closed fracture -S52011D Torus fracture of upper end of right ulna, subsequent encounter for fracture with routine healing -S52011G Torus fracture of upper end of right ulna, subsequent encounter for fracture with delayed healing -S52011K Torus fracture of upper end of right ulna, subsequent encounter for fracture with nonunion -S52011P Torus fracture of upper end of right ulna, subsequent encounter for fracture with malunion -S52011S Torus fracture of upper end of right ulna, sequela -S52012A Torus fracture of upper end of left ulna, initial encounter for closed fracture -S52012D Torus fracture of upper end of left ulna, subsequent encounter for fracture with routine healing -S52012G Torus fracture of upper end of left ulna, subsequent encounter for fracture with delayed healing -S52012K Torus fracture of upper end of left ulna, subsequent encounter for fracture with nonunion -S52012P Torus fracture of upper end of left ulna, subsequent encounter for fracture with malunion -S52012S Torus fracture of upper end of left ulna, sequela -S52019A Torus fracture of upper end of unspecified ulna, initial encounter for closed fracture -S52019D Torus fracture of upper end of unspecified ulna, subsequent encounter for fracture with routine healing -S52019G Torus fracture of upper end of unspecified ulna, subsequent encounter for fracture with delayed healing -S52019K Torus fracture of upper end of unspecified ulna, subsequent encounter for fracture with nonunion -S52019P Torus fracture of upper end of unspecified ulna, subsequent encounter for fracture with malunion -S52019S Torus fracture of upper end of unspecified ulna, sequela -S52021A Displaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for closed fracture -S52021B Displaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for open fracture type I or II -S52021C Displaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52021D Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with routine healing -S52021E Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52021F Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52021G Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with delayed healing -S52021H Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52021J Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52021K Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with nonunion -S52021M Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52021N Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52021P Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with malunion -S52021Q Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with malunion -S52021R Displaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52021S Displaced fracture of olecranon process without intraarticular extension of right ulna, sequela -S52022A Displaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for closed fracture -S52022B Displaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for open fracture type I or II -S52022C Displaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52022D Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with routine healing -S52022E Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52022F Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52022G Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with delayed healing -S52022H Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52022J Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52022K Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with nonunion -S52022M Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52022N Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52022P Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with malunion -S52022Q Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with malunion -S52022R Displaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52022S Displaced fracture of olecranon process without intraarticular extension of left ulna, sequela -S52023A Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for closed fracture -S52023B Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for open fracture type I or II -S52023C Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52023D Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52023E Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52023F Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52023G Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52023H Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52023J Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52023K Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52023M Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52023N Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52023P Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with malunion -S52023Q Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52023R Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52023S Displaced fracture of olecranon process without intraarticular extension of unspecified ulna, sequela -S52024A Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for closed fracture -S52024B Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for open fracture type I or II -S52024C Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52024D Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with routine healing -S52024E Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52024F Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52024G Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with delayed healing -S52024H Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52024J Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52024K Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with nonunion -S52024M Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52024N Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52024P Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for closed fracture with malunion -S52024Q Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with malunion -S52024R Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52024S Nondisplaced fracture of olecranon process without intraarticular extension of right ulna, sequela -S52025A Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for closed fracture -S52025B Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for open fracture type I or II -S52025C Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52025D Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with routine healing -S52025E Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52025F Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52025G Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with delayed healing -S52025H Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52025J Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52025K Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with nonunion -S52025M Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52025N Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52025P Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for closed fracture with malunion -S52025Q Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with malunion -S52025R Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52025S Nondisplaced fracture of olecranon process without intraarticular extension of left ulna, sequela -S52026A Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for closed fracture -S52026B Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for open fracture type I or II -S52026C Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52026D Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52026E Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52026F Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52026G Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52026H Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52026J Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52026K Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52026M Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52026N Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52026P Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with malunion -S52026Q Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52026R Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52026S Nondisplaced fracture of olecranon process without intraarticular extension of unspecified ulna, sequela -S52031A Displaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for closed fracture -S52031B Displaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for open fracture type I or II -S52031C Displaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52031D Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with routine healing -S52031E Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52031F Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52031G Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with delayed healing -S52031H Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52031J Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52031K Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with nonunion -S52031M Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52031N Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52031P Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with malunion -S52031Q Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with malunion -S52031R Displaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52031S Displaced fracture of olecranon process with intraarticular extension of right ulna, sequela -S52032A Displaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for closed fracture -S52032B Displaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for open fracture type I or II -S52032C Displaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52032D Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with routine healing -S52032E Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52032F Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52032G Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with delayed healing -S52032H Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52032J Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52032K Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with nonunion -S52032M Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52032N Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52032P Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with malunion -S52032Q Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with malunion -S52032R Displaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52032S Displaced fracture of olecranon process with intraarticular extension of left ulna, sequela -S52033A Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for closed fracture -S52033B Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for open fracture type I or II -S52033C Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52033D Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52033E Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52033F Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52033G Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52033H Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52033J Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52033K Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52033M Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52033N Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52033P Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with malunion -S52033Q Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52033R Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52033S Displaced fracture of olecranon process with intraarticular extension of unspecified ulna, sequela -S52034A Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for closed fracture -S52034B Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for open fracture type I or II -S52034C Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52034D Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with routine healing -S52034E Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52034F Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52034G Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with delayed healing -S52034H Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52034J Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52034K Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with nonunion -S52034M Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52034N Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52034P Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for closed fracture with malunion -S52034Q Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type I or II with malunion -S52034R Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52034S Nondisplaced fracture of olecranon process with intraarticular extension of right ulna, sequela -S52035A Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for closed fracture -S52035B Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for open fracture type I or II -S52035C Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52035D Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with routine healing -S52035E Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52035F Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52035G Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with delayed healing -S52035H Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52035J Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52035K Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with nonunion -S52035M Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52035N Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52035P Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for closed fracture with malunion -S52035Q Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type I or II with malunion -S52035R Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52035S Nondisplaced fracture of olecranon process with intraarticular extension of left ulna, sequela -S52036A Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for closed fracture -S52036B Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for open fracture type I or II -S52036C Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52036D Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52036E Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52036F Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52036G Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52036H Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52036J Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52036K Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52036M Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52036N Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52036P Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for closed fracture with malunion -S52036Q Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52036R Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52036S Nondisplaced fracture of olecranon process with intraarticular extension of unspecified ulna, sequela -S52041A Displaced fracture of coronoid process of right ulna, initial encounter for closed fracture -S52041B Displaced fracture of coronoid process of right ulna, initial encounter for open fracture type I or II -S52041C Displaced fracture of coronoid process of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52041D Displaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with routine healing -S52041E Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52041F Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52041G Displaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with delayed healing -S52041H Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52041J Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52041K Displaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with nonunion -S52041M Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52041N Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52041P Displaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with malunion -S52041Q Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with malunion -S52041R Displaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52041S Displaced fracture of coronoid process of right ulna, sequela -S52042A Displaced fracture of coronoid process of left ulna, initial encounter for closed fracture -S52042B Displaced fracture of coronoid process of left ulna, initial encounter for open fracture type I or II -S52042C Displaced fracture of coronoid process of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52042D Displaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with routine healing -S52042E Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52042F Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52042G Displaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with delayed healing -S52042H Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52042J Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52042K Displaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with nonunion -S52042M Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52042N Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52042P Displaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with malunion -S52042Q Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with malunion -S52042R Displaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52042S Displaced fracture of coronoid process of left ulna, sequela -S52043A Displaced fracture of coronoid process of unspecified ulna, initial encounter for closed fracture -S52043B Displaced fracture of coronoid process of unspecified ulna, initial encounter for open fracture type I or II -S52043C Displaced fracture of coronoid process of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52043D Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52043E Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52043F Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52043G Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52043H Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52043J Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52043K Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52043M Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52043N Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52043P Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with malunion -S52043Q Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52043R Displaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52043S Displaced fracture of coronoid process of unspecified ulna, sequela -S52044A Nondisplaced fracture of coronoid process of right ulna, initial encounter for closed fracture -S52044B Nondisplaced fracture of coronoid process of right ulna, initial encounter for open fracture type I or II -S52044C Nondisplaced fracture of coronoid process of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52044D Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with routine healing -S52044E Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52044F Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52044G Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with delayed healing -S52044H Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52044J Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52044K Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with nonunion -S52044M Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52044N Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52044P Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for closed fracture with malunion -S52044Q Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type I or II with malunion -S52044R Nondisplaced fracture of coronoid process of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52044S Nondisplaced fracture of coronoid process of right ulna, sequela -S52045A Nondisplaced fracture of coronoid process of left ulna, initial encounter for closed fracture -S52045B Nondisplaced fracture of coronoid process of left ulna, initial encounter for open fracture type I or II -S52045C Nondisplaced fracture of coronoid process of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52045D Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with routine healing -S52045E Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52045F Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52045G Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with delayed healing -S52045H Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52045J Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52045K Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with nonunion -S52045M Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52045N Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52045P Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for closed fracture with malunion -S52045Q Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type I or II with malunion -S52045R Nondisplaced fracture of coronoid process of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52045S Nondisplaced fracture of coronoid process of left ulna, sequela -S52046A Nondisplaced fracture of coronoid process of unspecified ulna, initial encounter for closed fracture -S52046B Nondisplaced fracture of coronoid process of unspecified ulna, initial encounter for open fracture type I or II -S52046C Nondisplaced fracture of coronoid process of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52046D Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52046E Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52046F Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52046G Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52046H Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52046J Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52046K Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52046M Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52046N Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52046P Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for closed fracture with malunion -S52046Q Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52046R Nondisplaced fracture of coronoid process of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52046S Nondisplaced fracture of coronoid process of unspecified ulna, sequela -S52091A Other fracture of upper end of right ulna, initial encounter for closed fracture -S52091B Other fracture of upper end of right ulna, initial encounter for open fracture type I or II -S52091C Other fracture of upper end of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52091D Other fracture of upper end of right ulna, subsequent encounter for closed fracture with routine healing -S52091E Other fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52091F Other fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52091G Other fracture of upper end of right ulna, subsequent encounter for closed fracture with delayed healing -S52091H Other fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52091J Other fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52091K Other fracture of upper end of right ulna, subsequent encounter for closed fracture with nonunion -S52091M Other fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52091N Other fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52091P Other fracture of upper end of right ulna, subsequent encounter for closed fracture with malunion -S52091Q Other fracture of upper end of right ulna, subsequent encounter for open fracture type I or II with malunion -S52091R Other fracture of upper end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52091S Other fracture of upper end of right ulna, sequela -S52092A Other fracture of upper end of left ulna, initial encounter for closed fracture -S52092B Other fracture of upper end of left ulna, initial encounter for open fracture type I or II -S52092C Other fracture of upper end of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52092D Other fracture of upper end of left ulna, subsequent encounter for closed fracture with routine healing -S52092E Other fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52092F Other fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52092G Other fracture of upper end of left ulna, subsequent encounter for closed fracture with delayed healing -S52092H Other fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52092J Other fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52092K Other fracture of upper end of left ulna, subsequent encounter for closed fracture with nonunion -S52092M Other fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52092N Other fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52092P Other fracture of upper end of left ulna, subsequent encounter for closed fracture with malunion -S52092Q Other fracture of upper end of left ulna, subsequent encounter for open fracture type I or II with malunion -S52092R Other fracture of upper end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52092S Other fracture of upper end of left ulna, sequela -S52099A Other fracture of upper end of unspecified ulna, initial encounter for closed fracture -S52099B Other fracture of upper end of unspecified ulna, initial encounter for open fracture type I or II -S52099C Other fracture of upper end of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52099D Other fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52099E Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52099F Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52099G Other fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52099H Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52099J Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52099K Other fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52099M Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52099N Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52099P Other fracture of upper end of unspecified ulna, subsequent encounter for closed fracture with malunion -S52099Q Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52099R Other fracture of upper end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52099S Other fracture of upper end of unspecified ulna, sequela -S52101A Unspecified fracture of upper end of right radius, initial encounter for closed fracture -S52101B Unspecified fracture of upper end of right radius, initial encounter for open fracture type I or II -S52101C Unspecified fracture of upper end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52101D Unspecified fracture of upper end of right radius, subsequent encounter for closed fracture with routine healing -S52101E Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52101F Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52101G Unspecified fracture of upper end of right radius, subsequent encounter for closed fracture with delayed healing -S52101H Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52101J Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52101K Unspecified fracture of upper end of right radius, subsequent encounter for closed fracture with nonunion -S52101M Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52101N Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52101P Unspecified fracture of upper end of right radius, subsequent encounter for closed fracture with malunion -S52101Q Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type I or II with malunion -S52101R Unspecified fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52101S Unspecified fracture of upper end of right radius, sequela -S52102A Unspecified fracture of upper end of left radius, initial encounter for closed fracture -S52102B Unspecified fracture of upper end of left radius, initial encounter for open fracture type I or II -S52102C Unspecified fracture of upper end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52102D Unspecified fracture of upper end of left radius, subsequent encounter for closed fracture with routine healing -S52102E Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52102F Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52102G Unspecified fracture of upper end of left radius, subsequent encounter for closed fracture with delayed healing -S52102H Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52102J Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52102K Unspecified fracture of upper end of left radius, subsequent encounter for closed fracture with nonunion -S52102M Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52102N Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52102P Unspecified fracture of upper end of left radius, subsequent encounter for closed fracture with malunion -S52102Q Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type I or II with malunion -S52102R Unspecified fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52102S Unspecified fracture of upper end of left radius, sequela -S52109A Unspecified fracture of upper end of unspecified radius, initial encounter for closed fracture -S52109B Unspecified fracture of upper end of unspecified radius, initial encounter for open fracture type I or II -S52109C Unspecified fracture of upper end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52109D Unspecified fracture of upper end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52109E Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52109F Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52109G Unspecified fracture of upper end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52109H Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52109J Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52109K Unspecified fracture of upper end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52109M Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52109N Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52109P Unspecified fracture of upper end of unspecified radius, subsequent encounter for closed fracture with malunion -S52109Q Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52109R Unspecified fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52109S Unspecified fracture of upper end of unspecified radius, sequela -S52111A Torus fracture of upper end of right radius, initial encounter for closed fracture -S52111D Torus fracture of upper end of right radius, subsequent encounter for fracture with routine healing -S52111G Torus fracture of upper end of right radius, subsequent encounter for fracture with delayed healing -S52111K Torus fracture of upper end of right radius, subsequent encounter for fracture with nonunion -S52111P Torus fracture of upper end of right radius, subsequent encounter for fracture with malunion -S52111S Torus fracture of upper end of right radius, sequela -S52112A Torus fracture of upper end of left radius, initial encounter for closed fracture -S52112D Torus fracture of upper end of left radius, subsequent encounter for fracture with routine healing -S52112G Torus fracture of upper end of left radius, subsequent encounter for fracture with delayed healing -S52112K Torus fracture of upper end of left radius, subsequent encounter for fracture with nonunion -S52112P Torus fracture of upper end of left radius, subsequent encounter for fracture with malunion -S52112S Torus fracture of upper end of left radius, sequela -S52119A Torus fracture of upper end of unspecified radius, initial encounter for closed fracture -S52119D Torus fracture of upper end of unspecified radius, subsequent encounter for fracture with routine healing -S52119G Torus fracture of upper end of unspecified radius, subsequent encounter for fracture with delayed healing -S52119K Torus fracture of upper end of unspecified radius, subsequent encounter for fracture with nonunion -S52119P Torus fracture of upper end of unspecified radius, subsequent encounter for fracture with malunion -S52119S Torus fracture of upper end of unspecified radius, sequela -S52121A Displaced fracture of head of right radius, initial encounter for closed fracture -S52121B Displaced fracture of head of right radius, initial encounter for open fracture type I or II -S52121C Displaced fracture of head of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52121D Displaced fracture of head of right radius, subsequent encounter for closed fracture with routine healing -S52121E Displaced fracture of head of right radius, subsequent encounter for open fracture type I or II with routine healing -S52121F Displaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52121G Displaced fracture of head of right radius, subsequent encounter for closed fracture with delayed healing -S52121H Displaced fracture of head of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52121J Displaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52121K Displaced fracture of head of right radius, subsequent encounter for closed fracture with nonunion -S52121M Displaced fracture of head of right radius, subsequent encounter for open fracture type I or II with nonunion -S52121N Displaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52121P Displaced fracture of head of right radius, subsequent encounter for closed fracture with malunion -S52121Q Displaced fracture of head of right radius, subsequent encounter for open fracture type I or II with malunion -S52121R Displaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52121S Displaced fracture of head of right radius, sequela -S52122A Displaced fracture of head of left radius, initial encounter for closed fracture -S52122B Displaced fracture of head of left radius, initial encounter for open fracture type I or II -S52122C Displaced fracture of head of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52122D Displaced fracture of head of left radius, subsequent encounter for closed fracture with routine healing -S52122E Displaced fracture of head of left radius, subsequent encounter for open fracture type I or II with routine healing -S52122F Displaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52122G Displaced fracture of head of left radius, subsequent encounter for closed fracture with delayed healing -S52122H Displaced fracture of head of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52122J Displaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52122K Displaced fracture of head of left radius, subsequent encounter for closed fracture with nonunion -S52122M Displaced fracture of head of left radius, subsequent encounter for open fracture type I or II with nonunion -S52122N Displaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52122P Displaced fracture of head of left radius, subsequent encounter for closed fracture with malunion -S52122Q Displaced fracture of head of left radius, subsequent encounter for open fracture type I or II with malunion -S52122R Displaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52122S Displaced fracture of head of left radius, sequela -S52123A Displaced fracture of head of unspecified radius, initial encounter for closed fracture -S52123B Displaced fracture of head of unspecified radius, initial encounter for open fracture type I or II -S52123C Displaced fracture of head of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52123D Displaced fracture of head of unspecified radius, subsequent encounter for closed fracture with routine healing -S52123E Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52123F Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52123G Displaced fracture of head of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52123H Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52123J Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52123K Displaced fracture of head of unspecified radius, subsequent encounter for closed fracture with nonunion -S52123M Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52123N Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52123P Displaced fracture of head of unspecified radius, subsequent encounter for closed fracture with malunion -S52123Q Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52123R Displaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52123S Displaced fracture of head of unspecified radius, sequela -S52124A Nondisplaced fracture of head of right radius, initial encounter for closed fracture -S52124B Nondisplaced fracture of head of right radius, initial encounter for open fracture type I or II -S52124C Nondisplaced fracture of head of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52124D Nondisplaced fracture of head of right radius, subsequent encounter for closed fracture with routine healing -S52124E Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type I or II with routine healing -S52124F Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52124G Nondisplaced fracture of head of right radius, subsequent encounter for closed fracture with delayed healing -S52124H Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52124J Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52124K Nondisplaced fracture of head of right radius, subsequent encounter for closed fracture with nonunion -S52124M Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type I or II with nonunion -S52124N Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52124P Nondisplaced fracture of head of right radius, subsequent encounter for closed fracture with malunion -S52124Q Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type I or II with malunion -S52124R Nondisplaced fracture of head of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52124S Nondisplaced fracture of head of right radius, sequela -S52125A Nondisplaced fracture of head of left radius, initial encounter for closed fracture -S52125B Nondisplaced fracture of head of left radius, initial encounter for open fracture type I or II -S52125C Nondisplaced fracture of head of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52125D Nondisplaced fracture of head of left radius, subsequent encounter for closed fracture with routine healing -S52125E Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type I or II with routine healing -S52125F Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52125G Nondisplaced fracture of head of left radius, subsequent encounter for closed fracture with delayed healing -S52125H Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52125J Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52125K Nondisplaced fracture of head of left radius, subsequent encounter for closed fracture with nonunion -S52125M Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type I or II with nonunion -S52125N Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52125P Nondisplaced fracture of head of left radius, subsequent encounter for closed fracture with malunion -S52125Q Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type I or II with malunion -S52125R Nondisplaced fracture of head of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52125S Nondisplaced fracture of head of left radius, sequela -S52126A Nondisplaced fracture of head of unspecified radius, initial encounter for closed fracture -S52126B Nondisplaced fracture of head of unspecified radius, initial encounter for open fracture type I or II -S52126C Nondisplaced fracture of head of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52126D Nondisplaced fracture of head of unspecified radius, subsequent encounter for closed fracture with routine healing -S52126E Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52126F Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52126G Nondisplaced fracture of head of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52126H Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52126J Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52126K Nondisplaced fracture of head of unspecified radius, subsequent encounter for closed fracture with nonunion -S52126M Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52126N Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52126P Nondisplaced fracture of head of unspecified radius, subsequent encounter for closed fracture with malunion -S52126Q Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52126R Nondisplaced fracture of head of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52126S Nondisplaced fracture of head of unspecified radius, sequela -S52131A Displaced fracture of neck of right radius, initial encounter for closed fracture -S52131B Displaced fracture of neck of right radius, initial encounter for open fracture type I or II -S52131C Displaced fracture of neck of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52131D Displaced fracture of neck of right radius, subsequent encounter for closed fracture with routine healing -S52131E Displaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with routine healing -S52131F Displaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52131G Displaced fracture of neck of right radius, subsequent encounter for closed fracture with delayed healing -S52131H Displaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52131J Displaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52131K Displaced fracture of neck of right radius, subsequent encounter for closed fracture with nonunion -S52131M Displaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with nonunion -S52131N Displaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52131P Displaced fracture of neck of right radius, subsequent encounter for closed fracture with malunion -S52131Q Displaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with malunion -S52131R Displaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52131S Displaced fracture of neck of right radius, sequela -S52132A Displaced fracture of neck of left radius, initial encounter for closed fracture -S52132B Displaced fracture of neck of left radius, initial encounter for open fracture type I or II -S52132C Displaced fracture of neck of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52132D Displaced fracture of neck of left radius, subsequent encounter for closed fracture with routine healing -S52132E Displaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with routine healing -S52132F Displaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52132G Displaced fracture of neck of left radius, subsequent encounter for closed fracture with delayed healing -S52132H Displaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52132J Displaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52132K Displaced fracture of neck of left radius, subsequent encounter for closed fracture with nonunion -S52132M Displaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with nonunion -S52132N Displaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52132P Displaced fracture of neck of left radius, subsequent encounter for closed fracture with malunion -S52132Q Displaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with malunion -S52132R Displaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52132S Displaced fracture of neck of left radius, sequela -S52133A Displaced fracture of neck of unspecified radius, initial encounter for closed fracture -S52133B Displaced fracture of neck of unspecified radius, initial encounter for open fracture type I or II -S52133C Displaced fracture of neck of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52133D Displaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with routine healing -S52133E Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52133F Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52133G Displaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52133H Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52133J Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52133K Displaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with nonunion -S52133M Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52133N Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52133P Displaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with malunion -S52133Q Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52133R Displaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52133S Displaced fracture of neck of unspecified radius, sequela -S52134A Nondisplaced fracture of neck of right radius, initial encounter for closed fracture -S52134B Nondisplaced fracture of neck of right radius, initial encounter for open fracture type I or II -S52134C Nondisplaced fracture of neck of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52134D Nondisplaced fracture of neck of right radius, subsequent encounter for closed fracture with routine healing -S52134E Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with routine healing -S52134F Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52134G Nondisplaced fracture of neck of right radius, subsequent encounter for closed fracture with delayed healing -S52134H Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52134J Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52134K Nondisplaced fracture of neck of right radius, subsequent encounter for closed fracture with nonunion -S52134M Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with nonunion -S52134N Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52134P Nondisplaced fracture of neck of right radius, subsequent encounter for closed fracture with malunion -S52134Q Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type I or II with malunion -S52134R Nondisplaced fracture of neck of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52134S Nondisplaced fracture of neck of right radius, sequela -S52135A Nondisplaced fracture of neck of left radius, initial encounter for closed fracture -S52135B Nondisplaced fracture of neck of left radius, initial encounter for open fracture type I or II -S52135C Nondisplaced fracture of neck of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52135D Nondisplaced fracture of neck of left radius, subsequent encounter for closed fracture with routine healing -S52135E Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with routine healing -S52135F Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52135G Nondisplaced fracture of neck of left radius, subsequent encounter for closed fracture with delayed healing -S52135H Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52135J Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52135K Nondisplaced fracture of neck of left radius, subsequent encounter for closed fracture with nonunion -S52135M Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with nonunion -S52135N Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52135P Nondisplaced fracture of neck of left radius, subsequent encounter for closed fracture with malunion -S52135Q Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type I or II with malunion -S52135R Nondisplaced fracture of neck of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52135S Nondisplaced fracture of neck of left radius, sequela -S52136A Nondisplaced fracture of neck of unspecified radius, initial encounter for closed fracture -S52136B Nondisplaced fracture of neck of unspecified radius, initial encounter for open fracture type I or II -S52136C Nondisplaced fracture of neck of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52136D Nondisplaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with routine healing -S52136E Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52136F Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52136G Nondisplaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52136H Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52136J Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52136K Nondisplaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with nonunion -S52136M Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52136N Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52136P Nondisplaced fracture of neck of unspecified radius, subsequent encounter for closed fracture with malunion -S52136Q Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52136R Nondisplaced fracture of neck of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52136S Nondisplaced fracture of neck of unspecified radius, sequela -S52181A Other fracture of upper end of right radius, initial encounter for closed fracture -S52181B Other fracture of upper end of right radius, initial encounter for open fracture type I or II -S52181C Other fracture of upper end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52181D Other fracture of upper end of right radius, subsequent encounter for closed fracture with routine healing -S52181E Other fracture of upper end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52181F Other fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52181G Other fracture of upper end of right radius, subsequent encounter for closed fracture with delayed healing -S52181H Other fracture of upper end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52181J Other fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52181K Other fracture of upper end of right radius, subsequent encounter for closed fracture with nonunion -S52181M Other fracture of upper end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52181N Other fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52181P Other fracture of upper end of right radius, subsequent encounter for closed fracture with malunion -S52181Q Other fracture of upper end of right radius, subsequent encounter for open fracture type I or II with malunion -S52181R Other fracture of upper end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52181S Other fracture of upper end of right radius, sequela -S52182A Other fracture of upper end of left radius, initial encounter for closed fracture -S52182B Other fracture of upper end of left radius, initial encounter for open fracture type I or II -S52182C Other fracture of upper end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52182D Other fracture of upper end of left radius, subsequent encounter for closed fracture with routine healing -S52182E Other fracture of upper end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52182F Other fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52182G Other fracture of upper end of left radius, subsequent encounter for closed fracture with delayed healing -S52182H Other fracture of upper end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52182J Other fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52182K Other fracture of upper end of left radius, subsequent encounter for closed fracture with nonunion -S52182M Other fracture of upper end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52182N Other fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52182P Other fracture of upper end of left radius, subsequent encounter for closed fracture with malunion -S52182Q Other fracture of upper end of left radius, subsequent encounter for open fracture type I or II with malunion -S52182R Other fracture of upper end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52182S Other fracture of upper end of left radius, sequela -S52189A Other fracture of upper end of unspecified radius, initial encounter for closed fracture -S52189B Other fracture of upper end of unspecified radius, initial encounter for open fracture type I or II -S52189C Other fracture of upper end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52189D Other fracture of upper end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52189E Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52189F Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52189G Other fracture of upper end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52189H Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52189J Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52189K Other fracture of upper end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52189M Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52189N Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52189P Other fracture of upper end of unspecified radius, subsequent encounter for closed fracture with malunion -S52189Q Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52189R Other fracture of upper end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52189S Other fracture of upper end of unspecified radius, sequela -S52201A Unspecified fracture of shaft of right ulna, initial encounter for closed fracture -S52201B Unspecified fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52201C Unspecified fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52201D Unspecified fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52201E Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52201F Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52201G Unspecified fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52201H Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52201J Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52201K Unspecified fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52201M Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52201N Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52201P Unspecified fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52201Q Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52201R Unspecified fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52201S Unspecified fracture of shaft of right ulna, sequela -S52202A Unspecified fracture of shaft of left ulna, initial encounter for closed fracture -S52202B Unspecified fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52202C Unspecified fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52202D Unspecified fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52202E Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52202F Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52202G Unspecified fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52202H Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52202J Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52202K Unspecified fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52202M Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52202N Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52202P Unspecified fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52202Q Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52202R Unspecified fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52202S Unspecified fracture of shaft of left ulna, sequela -S52209A Unspecified fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52209B Unspecified fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52209C Unspecified fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52209D Unspecified fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52209E Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52209F Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52209G Unspecified fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52209H Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52209J Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52209K Unspecified fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52209M Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52209N Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52209P Unspecified fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52209Q Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52209R Unspecified fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52209S Unspecified fracture of shaft of unspecified ulna, sequela -S52211A Greenstick fracture of shaft of right ulna, initial encounter for closed fracture -S52211D Greenstick fracture of shaft of right ulna, subsequent encounter for fracture with routine healing -S52211G Greenstick fracture of shaft of right ulna, subsequent encounter for fracture with delayed healing -S52211K Greenstick fracture of shaft of right ulna, subsequent encounter for fracture with nonunion -S52211P Greenstick fracture of shaft of right ulna, subsequent encounter for fracture with malunion -S52211S Greenstick fracture of shaft of right ulna, sequela -S52212A Greenstick fracture of shaft of left ulna, initial encounter for closed fracture -S52212D Greenstick fracture of shaft of left ulna, subsequent encounter for fracture with routine healing -S52212G Greenstick fracture of shaft of left ulna, subsequent encounter for fracture with delayed healing -S52212K Greenstick fracture of shaft of left ulna, subsequent encounter for fracture with nonunion -S52212P Greenstick fracture of shaft of left ulna, subsequent encounter for fracture with malunion -S52212S Greenstick fracture of shaft of left ulna, sequela -S52219A Greenstick fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52219D Greenstick fracture of shaft of unspecified ulna, subsequent encounter for fracture with routine healing -S52219G Greenstick fracture of shaft of unspecified ulna, subsequent encounter for fracture with delayed healing -S52219K Greenstick fracture of shaft of unspecified ulna, subsequent encounter for fracture with nonunion -S52219P Greenstick fracture of shaft of unspecified ulna, subsequent encounter for fracture with malunion -S52219S Greenstick fracture of shaft of unspecified ulna, sequela -S52221A Displaced transverse fracture of shaft of right ulna, initial encounter for closed fracture -S52221B Displaced transverse fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52221C Displaced transverse fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52221D Displaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52221E Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52221F Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52221G Displaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52221H Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52221J Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52221K Displaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52221M Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52221N Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52221P Displaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52221Q Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52221R Displaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52221S Displaced transverse fracture of shaft of right ulna, sequela -S52222A Displaced transverse fracture of shaft of left ulna, initial encounter for closed fracture -S52222B Displaced transverse fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52222C Displaced transverse fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52222D Displaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52222E Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52222F Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52222G Displaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52222H Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52222J Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52222K Displaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52222M Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52222N Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52222P Displaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52222Q Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52222R Displaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52222S Displaced transverse fracture of shaft of left ulna, sequela -S52223A Displaced transverse fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52223B Displaced transverse fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52223C Displaced transverse fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52223D Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52223E Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52223F Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52223G Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52223H Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52223J Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52223K Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52223M Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52223N Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52223P Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52223Q Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52223R Displaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52223S Displaced transverse fracture of shaft of unspecified ulna, sequela -S52224A Nondisplaced transverse fracture of shaft of right ulna, initial encounter for closed fracture -S52224B Nondisplaced transverse fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52224C Nondisplaced transverse fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52224D Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52224E Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52224F Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52224G Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52224H Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52224J Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52224K Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52224M Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52224N Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52224P Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52224Q Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52224R Nondisplaced transverse fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52224S Nondisplaced transverse fracture of shaft of right ulna, sequela -S52225A Nondisplaced transverse fracture of shaft of left ulna, initial encounter for closed fracture -S52225B Nondisplaced transverse fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52225C Nondisplaced transverse fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52225D Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52225E Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52225F Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52225G Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52225H Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52225J Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52225K Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52225M Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52225N Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52225P Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52225Q Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52225R Nondisplaced transverse fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52225S Nondisplaced transverse fracture of shaft of left ulna, sequela -S52226A Nondisplaced transverse fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52226B Nondisplaced transverse fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52226C Nondisplaced transverse fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52226D Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52226E Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52226F Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52226G Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52226H Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52226J Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52226K Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52226M Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52226N Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52226P Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52226Q Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52226R Nondisplaced transverse fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52226S Nondisplaced transverse fracture of shaft of unspecified ulna, sequela -S52231A Displaced oblique fracture of shaft of right ulna, initial encounter for closed fracture -S52231B Displaced oblique fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52231C Displaced oblique fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52231D Displaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52231E Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52231F Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52231G Displaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52231H Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52231J Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52231K Displaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52231M Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52231N Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52231P Displaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52231Q Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52231R Displaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52231S Displaced oblique fracture of shaft of right ulna, sequela -S52232A Displaced oblique fracture of shaft of left ulna, initial encounter for closed fracture -S52232B Displaced oblique fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52232C Displaced oblique fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52232D Displaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52232E Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52232F Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52232G Displaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52232H Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52232J Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52232K Displaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52232M Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52232N Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52232P Displaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52232Q Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52232R Displaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52232S Displaced oblique fracture of shaft of left ulna, sequela -S52233A Displaced oblique fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52233B Displaced oblique fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52233C Displaced oblique fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52233D Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52233E Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52233F Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52233G Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52233H Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52233J Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52233K Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52233M Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52233N Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52233P Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52233Q Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52233R Displaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52233S Displaced oblique fracture of shaft of unspecified ulna, sequela -S52234A Nondisplaced oblique fracture of shaft of right ulna, initial encounter for closed fracture -S52234B Nondisplaced oblique fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52234C Nondisplaced oblique fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52234D Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52234E Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52234F Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52234G Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52234H Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52234J Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52234K Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52234M Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52234N Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52234P Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52234Q Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52234R Nondisplaced oblique fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52234S Nondisplaced oblique fracture of shaft of right ulna, sequela -S52235A Nondisplaced oblique fracture of shaft of left ulna, initial encounter for closed fracture -S52235B Nondisplaced oblique fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52235C Nondisplaced oblique fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52235D Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52235E Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52235F Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52235G Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52235H Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52235J Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52235K Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52235M Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52235N Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52235P Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52235Q Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52235R Nondisplaced oblique fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52235S Nondisplaced oblique fracture of shaft of left ulna, sequela -S52236A Nondisplaced oblique fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52236B Nondisplaced oblique fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52236C Nondisplaced oblique fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52236D Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52236E Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52236F Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52236G Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52236H Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52236J Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52236K Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52236M Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52236N Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52236P Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52236Q Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52236R Nondisplaced oblique fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52236S Nondisplaced oblique fracture of shaft of unspecified ulna, sequela -S52241A Displaced spiral fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52241B Displaced spiral fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52241C Displaced spiral fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52241D Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52241E Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52241F Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52241G Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52241H Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52241J Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52241K Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52241M Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52241N Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52241P Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52241Q Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52241R Displaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52241S Displaced spiral fracture of shaft of ulna, right arm, sequela -S52242A Displaced spiral fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52242B Displaced spiral fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52242C Displaced spiral fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52242D Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52242E Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52242F Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52242G Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52242H Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52242J Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52242K Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52242M Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52242N Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52242P Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52242Q Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52242R Displaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52242S Displaced spiral fracture of shaft of ulna, left arm, sequela -S52243A Displaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52243B Displaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52243C Displaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52243D Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52243E Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52243F Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52243G Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52243H Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52243J Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52243K Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52243M Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52243N Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52243P Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52243Q Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52243R Displaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52243S Displaced spiral fracture of shaft of ulna, unspecified arm, sequela -S52244A Nondisplaced spiral fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52244B Nondisplaced spiral fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52244C Nondisplaced spiral fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52244D Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52244E Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52244F Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52244G Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52244H Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52244J Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52244K Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52244M Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52244N Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52244P Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52244Q Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52244R Nondisplaced spiral fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52244S Nondisplaced spiral fracture of shaft of ulna, right arm, sequela -S52245A Nondisplaced spiral fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52245B Nondisplaced spiral fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52245C Nondisplaced spiral fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52245D Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52245E Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52245F Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52245G Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52245H Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52245J Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52245K Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52245M Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52245N Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52245P Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52245Q Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52245R Nondisplaced spiral fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52245S Nondisplaced spiral fracture of shaft of ulna, left arm, sequela -S52246A Nondisplaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52246B Nondisplaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52246C Nondisplaced spiral fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52246D Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52246E Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52246F Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52246G Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52246H Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52246J Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52246K Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52246M Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52246N Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52246P Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52246Q Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52246R Nondisplaced spiral fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52246S Nondisplaced spiral fracture of shaft of ulna, unspecified arm, sequela -S52251A Displaced comminuted fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52251B Displaced comminuted fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52251C Displaced comminuted fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52251D Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52251E Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52251F Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52251G Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52251H Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52251J Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52251K Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52251M Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52251N Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52251P Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52251Q Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52251R Displaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52251S Displaced comminuted fracture of shaft of ulna, right arm, sequela -S52252A Displaced comminuted fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52252B Displaced comminuted fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52252C Displaced comminuted fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52252D Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52252E Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52252F Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52252G Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52252H Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52252J Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52252K Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52252M Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52252N Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52252P Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52252Q Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52252R Displaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52252S Displaced comminuted fracture of shaft of ulna, left arm, sequela -S52253A Displaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52253B Displaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52253C Displaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52253D Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52253E Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52253F Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52253G Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52253H Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52253J Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52253K Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52253M Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52253N Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52253P Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52253Q Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52253R Displaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52253S Displaced comminuted fracture of shaft of ulna, unspecified arm, sequela -S52254A Nondisplaced comminuted fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52254B Nondisplaced comminuted fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52254C Nondisplaced comminuted fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52254D Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52254E Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52254F Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52254G Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52254H Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52254J Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52254K Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52254M Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52254N Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52254P Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52254Q Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52254R Nondisplaced comminuted fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52254S Nondisplaced comminuted fracture of shaft of ulna, right arm, sequela -S52255A Nondisplaced comminuted fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52255B Nondisplaced comminuted fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52255C Nondisplaced comminuted fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52255D Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52255E Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52255F Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52255G Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52255H Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52255J Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52255K Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52255M Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52255N Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52255P Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52255Q Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52255R Nondisplaced comminuted fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52255S Nondisplaced comminuted fracture of shaft of ulna, left arm, sequela -S52256A Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52256B Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52256C Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52256D Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52256E Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52256F Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52256G Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52256H Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52256J Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52256K Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52256M Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52256N Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52256P Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52256Q Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52256R Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52256S Nondisplaced comminuted fracture of shaft of ulna, unspecified arm, sequela -S52261A Displaced segmental fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52261B Displaced segmental fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52261C Displaced segmental fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52261D Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52261E Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52261F Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52261G Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52261H Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52261J Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52261K Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52261M Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52261N Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52261P Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52261Q Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52261R Displaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52261S Displaced segmental fracture of shaft of ulna, right arm, sequela -S52262A Displaced segmental fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52262B Displaced segmental fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52262C Displaced segmental fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52262D Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52262E Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52262F Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52262G Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52262H Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52262J Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52262K Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52262M Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52262N Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52262P Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52262Q Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52262R Displaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52262S Displaced segmental fracture of shaft of ulna, left arm, sequela -S52263A Displaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52263B Displaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52263C Displaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52263D Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52263E Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52263F Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52263G Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52263H Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52263J Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52263K Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52263M Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52263N Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52263P Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52263Q Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52263R Displaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52263S Displaced segmental fracture of shaft of ulna, unspecified arm, sequela -S52264A Nondisplaced segmental fracture of shaft of ulna, right arm, initial encounter for closed fracture -S52264B Nondisplaced segmental fracture of shaft of ulna, right arm, initial encounter for open fracture type I or II -S52264C Nondisplaced segmental fracture of shaft of ulna, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52264D Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with routine healing -S52264E Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with routine healing -S52264F Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52264G Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with delayed healing -S52264H Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52264J Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52264K Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with nonunion -S52264M Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with nonunion -S52264N Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52264P Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for closed fracture with malunion -S52264Q Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type I or II with malunion -S52264R Nondisplaced segmental fracture of shaft of ulna, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52264S Nondisplaced segmental fracture of shaft of ulna, right arm, sequela -S52265A Nondisplaced segmental fracture of shaft of ulna, left arm, initial encounter for closed fracture -S52265B Nondisplaced segmental fracture of shaft of ulna, left arm, initial encounter for open fracture type I or II -S52265C Nondisplaced segmental fracture of shaft of ulna, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52265D Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with routine healing -S52265E Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with routine healing -S52265F Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52265G Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with delayed healing -S52265H Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52265J Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52265K Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with nonunion -S52265M Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with nonunion -S52265N Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52265P Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for closed fracture with malunion -S52265Q Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type I or II with malunion -S52265R Nondisplaced segmental fracture of shaft of ulna, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52265S Nondisplaced segmental fracture of shaft of ulna, left arm, sequela -S52266A Nondisplaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for closed fracture -S52266B Nondisplaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type I or II -S52266C Nondisplaced segmental fracture of shaft of ulna, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52266D Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with routine healing -S52266E Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52266F Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52266G Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52266H Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52266J Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52266K Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with nonunion -S52266M Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52266N Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52266P Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for closed fracture with malunion -S52266Q Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52266R Nondisplaced segmental fracture of shaft of ulna, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52266S Nondisplaced segmental fracture of shaft of ulna, unspecified arm, sequela -S52271A Monteggia's fracture of right ulna, initial encounter for closed fracture -S52271B Monteggia's fracture of right ulna, initial encounter for open fracture type I or II -S52271C Monteggia's fracture of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52271D Monteggia's fracture of right ulna, subsequent encounter for closed fracture with routine healing -S52271E Monteggia's fracture of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52271F Monteggia's fracture of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52271G Monteggia's fracture of right ulna, subsequent encounter for closed fracture with delayed healing -S52271H Monteggia's fracture of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52271J Monteggia's fracture of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52271K Monteggia's fracture of right ulna, subsequent encounter for closed fracture with nonunion -S52271M Monteggia's fracture of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52271N Monteggia's fracture of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52271P Monteggia's fracture of right ulna, subsequent encounter for closed fracture with malunion -S52271Q Monteggia's fracture of right ulna, subsequent encounter for open fracture type I or II with malunion -S52271R Monteggia's fracture of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52271S Monteggia's fracture of right ulna, sequela -S52272A Monteggia's fracture of left ulna, initial encounter for closed fracture -S52272B Monteggia's fracture of left ulna, initial encounter for open fracture type I or II -S52272C Monteggia's fracture of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52272D Monteggia's fracture of left ulna, subsequent encounter for closed fracture with routine healing -S52272E Monteggia's fracture of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52272F Monteggia's fracture of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52272G Monteggia's fracture of left ulna, subsequent encounter for closed fracture with delayed healing -S52272H Monteggia's fracture of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52272J Monteggia's fracture of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52272K Monteggia's fracture of left ulna, subsequent encounter for closed fracture with nonunion -S52272M Monteggia's fracture of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52272N Monteggia's fracture of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52272P Monteggia's fracture of left ulna, subsequent encounter for closed fracture with malunion -S52272Q Monteggia's fracture of left ulna, subsequent encounter for open fracture type I or II with malunion -S52272R Monteggia's fracture of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52272S Monteggia's fracture of left ulna, sequela -S52279A Monteggia's fracture of unspecified ulna, initial encounter for closed fracture -S52279B Monteggia's fracture of unspecified ulna, initial encounter for open fracture type I or II -S52279C Monteggia's fracture of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52279D Monteggia's fracture of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52279E Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52279F Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52279G Monteggia's fracture of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52279H Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52279J Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52279K Monteggia's fracture of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52279M Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52279N Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52279P Monteggia's fracture of unspecified ulna, subsequent encounter for closed fracture with malunion -S52279Q Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52279R Monteggia's fracture of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52279S Monteggia's fracture of unspecified ulna, sequela -S52281A Bent bone of right ulna, initial encounter for closed fracture -S52281B Bent bone of right ulna, initial encounter for open fracture type I or II -S52281C Bent bone of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52281D Bent bone of right ulna, subsequent encounter for closed fracture with routine healing -S52281E Bent bone of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52281F Bent bone of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52281G Bent bone of right ulna, subsequent encounter for closed fracture with delayed healing -S52281H Bent bone of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52281J Bent bone of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52281K Bent bone of right ulna, subsequent encounter for closed fracture with nonunion -S52281M Bent bone of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52281N Bent bone of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52281P Bent bone of right ulna, subsequent encounter for closed fracture with malunion -S52281Q Bent bone of right ulna, subsequent encounter for open fracture type I or II with malunion -S52281R Bent bone of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52281S Bent bone of right ulna, sequela -S52282A Bent bone of left ulna, initial encounter for closed fracture -S52282B Bent bone of left ulna, initial encounter for open fracture type I or II -S52282C Bent bone of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52282D Bent bone of left ulna, subsequent encounter for closed fracture with routine healing -S52282E Bent bone of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52282F Bent bone of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52282G Bent bone of left ulna, subsequent encounter for closed fracture with delayed healing -S52282H Bent bone of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52282J Bent bone of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52282K Bent bone of left ulna, subsequent encounter for closed fracture with nonunion -S52282M Bent bone of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52282N Bent bone of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52282P Bent bone of left ulna, subsequent encounter for closed fracture with malunion -S52282Q Bent bone of left ulna, subsequent encounter for open fracture type I or II with malunion -S52282R Bent bone of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52282S Bent bone of left ulna, sequela -S52283A Bent bone of unspecified ulna, initial encounter for closed fracture -S52283B Bent bone of unspecified ulna, initial encounter for open fracture type I or II -S52283C Bent bone of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52283D Bent bone of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52283E Bent bone of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52283F Bent bone of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52283G Bent bone of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52283H Bent bone of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52283J Bent bone of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52283K Bent bone of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52283M Bent bone of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52283N Bent bone of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52283P Bent bone of unspecified ulna, subsequent encounter for closed fracture with malunion -S52283Q Bent bone of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52283R Bent bone of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52283S Bent bone of unspecified ulna, sequela -S52291A Other fracture of shaft of right ulna, initial encounter for closed fracture -S52291B Other fracture of shaft of right ulna, initial encounter for open fracture type I or II -S52291C Other fracture of shaft of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52291D Other fracture of shaft of right ulna, subsequent encounter for closed fracture with routine healing -S52291E Other fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52291F Other fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52291G Other fracture of shaft of right ulna, subsequent encounter for closed fracture with delayed healing -S52291H Other fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52291J Other fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52291K Other fracture of shaft of right ulna, subsequent encounter for closed fracture with nonunion -S52291M Other fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52291N Other fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52291P Other fracture of shaft of right ulna, subsequent encounter for closed fracture with malunion -S52291Q Other fracture of shaft of right ulna, subsequent encounter for open fracture type I or II with malunion -S52291R Other fracture of shaft of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52291S Other fracture of shaft of right ulna, sequela -S52292A Other fracture of shaft of left ulna, initial encounter for closed fracture -S52292B Other fracture of shaft of left ulna, initial encounter for open fracture type I or II -S52292C Other fracture of shaft of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52292D Other fracture of shaft of left ulna, subsequent encounter for closed fracture with routine healing -S52292E Other fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52292F Other fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52292G Other fracture of shaft of left ulna, subsequent encounter for closed fracture with delayed healing -S52292H Other fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52292J Other fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52292K Other fracture of shaft of left ulna, subsequent encounter for closed fracture with nonunion -S52292M Other fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52292N Other fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52292P Other fracture of shaft of left ulna, subsequent encounter for closed fracture with malunion -S52292Q Other fracture of shaft of left ulna, subsequent encounter for open fracture type I or II with malunion -S52292R Other fracture of shaft of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52292S Other fracture of shaft of left ulna, sequela -S52299A Other fracture of shaft of unspecified ulna, initial encounter for closed fracture -S52299B Other fracture of shaft of unspecified ulna, initial encounter for open fracture type I or II -S52299C Other fracture of shaft of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52299D Other fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52299E Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52299F Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52299G Other fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52299H Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52299J Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52299K Other fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52299M Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52299N Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52299P Other fracture of shaft of unspecified ulna, subsequent encounter for closed fracture with malunion -S52299Q Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52299R Other fracture of shaft of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52299S Other fracture of shaft of unspecified ulna, sequela -S52301A Unspecified fracture of shaft of right radius, initial encounter for closed fracture -S52301B Unspecified fracture of shaft of right radius, initial encounter for open fracture type I or II -S52301C Unspecified fracture of shaft of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52301D Unspecified fracture of shaft of right radius, subsequent encounter for closed fracture with routine healing -S52301E Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type I or II with routine healing -S52301F Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52301G Unspecified fracture of shaft of right radius, subsequent encounter for closed fracture with delayed healing -S52301H Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52301J Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52301K Unspecified fracture of shaft of right radius, subsequent encounter for closed fracture with nonunion -S52301M Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type I or II with nonunion -S52301N Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52301P Unspecified fracture of shaft of right radius, subsequent encounter for closed fracture with malunion -S52301Q Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type I or II with malunion -S52301R Unspecified fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52301S Unspecified fracture of shaft of right radius, sequela -S52302A Unspecified fracture of shaft of left radius, initial encounter for closed fracture -S52302B Unspecified fracture of shaft of left radius, initial encounter for open fracture type I or II -S52302C Unspecified fracture of shaft of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52302D Unspecified fracture of shaft of left radius, subsequent encounter for closed fracture with routine healing -S52302E Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type I or II with routine healing -S52302F Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52302G Unspecified fracture of shaft of left radius, subsequent encounter for closed fracture with delayed healing -S52302H Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52302J Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52302K Unspecified fracture of shaft of left radius, subsequent encounter for closed fracture with nonunion -S52302M Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type I or II with nonunion -S52302N Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52302P Unspecified fracture of shaft of left radius, subsequent encounter for closed fracture with malunion -S52302Q Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type I or II with malunion -S52302R Unspecified fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52302S Unspecified fracture of shaft of left radius, sequela -S52309A Unspecified fracture of shaft of unspecified radius, initial encounter for closed fracture -S52309B Unspecified fracture of shaft of unspecified radius, initial encounter for open fracture type I or II -S52309C Unspecified fracture of shaft of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52309D Unspecified fracture of shaft of unspecified radius, subsequent encounter for closed fracture with routine healing -S52309E Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52309F Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52309G Unspecified fracture of shaft of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52309H Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52309J Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52309K Unspecified fracture of shaft of unspecified radius, subsequent encounter for closed fracture with nonunion -S52309M Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52309N Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52309P Unspecified fracture of shaft of unspecified radius, subsequent encounter for closed fracture with malunion -S52309Q Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52309R Unspecified fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52309S Unspecified fracture of shaft of unspecified radius, sequela -S52311A Greenstick fracture of shaft of radius, right arm, initial encounter for closed fracture -S52311D Greenstick fracture of shaft of radius, right arm, subsequent encounter for fracture with routine healing -S52311G Greenstick fracture of shaft of radius, right arm, subsequent encounter for fracture with delayed healing -S52311K Greenstick fracture of shaft of radius, right arm, subsequent encounter for fracture with nonunion -S52311P Greenstick fracture of shaft of radius, right arm, subsequent encounter for fracture with malunion -S52311S Greenstick fracture of shaft of radius, right arm, sequela -S52312A Greenstick fracture of shaft of radius, left arm, initial encounter for closed fracture -S52312D Greenstick fracture of shaft of radius, left arm, subsequent encounter for fracture with routine healing -S52312G Greenstick fracture of shaft of radius, left arm, subsequent encounter for fracture with delayed healing -S52312K Greenstick fracture of shaft of radius, left arm, subsequent encounter for fracture with nonunion -S52312P Greenstick fracture of shaft of radius, left arm, subsequent encounter for fracture with malunion -S52312S Greenstick fracture of shaft of radius, left arm, sequela -S52319A Greenstick fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52319D Greenstick fracture of shaft of radius, unspecified arm, subsequent encounter for fracture with routine healing -S52319G Greenstick fracture of shaft of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S52319K Greenstick fracture of shaft of radius, unspecified arm, subsequent encounter for fracture with nonunion -S52319P Greenstick fracture of shaft of radius, unspecified arm, subsequent encounter for fracture with malunion -S52319S Greenstick fracture of shaft of radius, unspecified arm, sequela -S52321A Displaced transverse fracture of shaft of right radius, initial encounter for closed fracture -S52321B Displaced transverse fracture of shaft of right radius, initial encounter for open fracture type I or II -S52321C Displaced transverse fracture of shaft of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52321D Displaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with routine healing -S52321E Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with routine healing -S52321F Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52321G Displaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with delayed healing -S52321H Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52321J Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52321K Displaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with nonunion -S52321M Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with nonunion -S52321N Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52321P Displaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with malunion -S52321Q Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with malunion -S52321R Displaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52321S Displaced transverse fracture of shaft of right radius, sequela -S52322A Displaced transverse fracture of shaft of left radius, initial encounter for closed fracture -S52322B Displaced transverse fracture of shaft of left radius, initial encounter for open fracture type I or II -S52322C Displaced transverse fracture of shaft of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52322D Displaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with routine healing -S52322E Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with routine healing -S52322F Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52322G Displaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with delayed healing -S52322H Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52322J Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52322K Displaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with nonunion -S52322M Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with nonunion -S52322N Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52322P Displaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with malunion -S52322Q Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with malunion -S52322R Displaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52322S Displaced transverse fracture of shaft of left radius, sequela -S52323A Displaced transverse fracture of shaft of unspecified radius, initial encounter for closed fracture -S52323B Displaced transverse fracture of shaft of unspecified radius, initial encounter for open fracture type I or II -S52323C Displaced transverse fracture of shaft of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52323D Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with routine healing -S52323E Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52323F Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52323G Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52323H Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52323J Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52323K Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with nonunion -S52323M Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52323N Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52323P Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with malunion -S52323Q Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52323R Displaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52323S Displaced transverse fracture of shaft of unspecified radius, sequela -S52324A Nondisplaced transverse fracture of shaft of right radius, initial encounter for closed fracture -S52324B Nondisplaced transverse fracture of shaft of right radius, initial encounter for open fracture type I or II -S52324C Nondisplaced transverse fracture of shaft of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52324D Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with routine healing -S52324E Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with routine healing -S52324F Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52324G Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with delayed healing -S52324H Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52324J Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52324K Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with nonunion -S52324M Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with nonunion -S52324N Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52324P Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for closed fracture with malunion -S52324Q Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type I or II with malunion -S52324R Nondisplaced transverse fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52324S Nondisplaced transverse fracture of shaft of right radius, sequela -S52325A Nondisplaced transverse fracture of shaft of left radius, initial encounter for closed fracture -S52325B Nondisplaced transverse fracture of shaft of left radius, initial encounter for open fracture type I or II -S52325C Nondisplaced transverse fracture of shaft of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52325D Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with routine healing -S52325E Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with routine healing -S52325F Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52325G Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with delayed healing -S52325H Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52325J Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52325K Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with nonunion -S52325M Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with nonunion -S52325N Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52325P Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for closed fracture with malunion -S52325Q Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type I or II with malunion -S52325R Nondisplaced transverse fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52325S Nondisplaced transverse fracture of shaft of left radius, sequela -S52326A Nondisplaced transverse fracture of shaft of unspecified radius, initial encounter for closed fracture -S52326B Nondisplaced transverse fracture of shaft of unspecified radius, initial encounter for open fracture type I or II -S52326C Nondisplaced transverse fracture of shaft of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52326D Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with routine healing -S52326E Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52326F Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52326G Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52326H Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52326J Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52326K Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with nonunion -S52326M Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52326N Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52326P Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for closed fracture with malunion -S52326Q Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52326R Nondisplaced transverse fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52326S Nondisplaced transverse fracture of shaft of unspecified radius, sequela -S52331A Displaced oblique fracture of shaft of right radius, initial encounter for closed fracture -S52331B Displaced oblique fracture of shaft of right radius, initial encounter for open fracture type I or II -S52331C Displaced oblique fracture of shaft of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52331D Displaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with routine healing -S52331E Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with routine healing -S52331F Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52331G Displaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with delayed healing -S52331H Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52331J Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52331K Displaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with nonunion -S52331M Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with nonunion -S52331N Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52331P Displaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with malunion -S52331Q Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with malunion -S52331R Displaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52331S Displaced oblique fracture of shaft of right radius, sequela -S52332A Displaced oblique fracture of shaft of left radius, initial encounter for closed fracture -S52332B Displaced oblique fracture of shaft of left radius, initial encounter for open fracture type I or II -S52332C Displaced oblique fracture of shaft of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52332D Displaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with routine healing -S52332E Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with routine healing -S52332F Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52332G Displaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with delayed healing -S52332H Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52332J Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52332K Displaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with nonunion -S52332M Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with nonunion -S52332N Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52332P Displaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with malunion -S52332Q Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with malunion -S52332R Displaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52332S Displaced oblique fracture of shaft of left radius, sequela -S52333A Displaced oblique fracture of shaft of unspecified radius, initial encounter for closed fracture -S52333B Displaced oblique fracture of shaft of unspecified radius, initial encounter for open fracture type I or II -S52333C Displaced oblique fracture of shaft of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52333D Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with routine healing -S52333E Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52333F Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52333G Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52333H Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52333J Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52333K Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with nonunion -S52333M Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52333N Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52333P Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with malunion -S52333Q Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52333R Displaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52333S Displaced oblique fracture of shaft of unspecified radius, sequela -S52334A Nondisplaced oblique fracture of shaft of right radius, initial encounter for closed fracture -S52334B Nondisplaced oblique fracture of shaft of right radius, initial encounter for open fracture type I or II -S52334C Nondisplaced oblique fracture of shaft of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52334D Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with routine healing -S52334E Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with routine healing -S52334F Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52334G Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with delayed healing -S52334H Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52334J Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52334K Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with nonunion -S52334M Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with nonunion -S52334N Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52334P Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for closed fracture with malunion -S52334Q Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type I or II with malunion -S52334R Nondisplaced oblique fracture of shaft of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52334S Nondisplaced oblique fracture of shaft of right radius, sequela -S52335A Nondisplaced oblique fracture of shaft of left radius, initial encounter for closed fracture -S52335B Nondisplaced oblique fracture of shaft of left radius, initial encounter for open fracture type I or II -S52335C Nondisplaced oblique fracture of shaft of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52335D Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with routine healing -S52335E Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with routine healing -S52335F Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52335G Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with delayed healing -S52335H Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52335J Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52335K Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with nonunion -S52335M Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with nonunion -S52335N Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52335P Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for closed fracture with malunion -S52335Q Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type I or II with malunion -S52335R Nondisplaced oblique fracture of shaft of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52335S Nondisplaced oblique fracture of shaft of left radius, sequela -S52336A Nondisplaced oblique fracture of shaft of unspecified radius, initial encounter for closed fracture -S52336B Nondisplaced oblique fracture of shaft of unspecified radius, initial encounter for open fracture type I or II -S52336C Nondisplaced oblique fracture of shaft of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52336D Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with routine healing -S52336E Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52336F Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52336G Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52336H Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52336J Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52336K Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with nonunion -S52336M Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52336N Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52336P Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for closed fracture with malunion -S52336Q Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52336R Nondisplaced oblique fracture of shaft of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52336S Nondisplaced oblique fracture of shaft of unspecified radius, sequela -S52341A Displaced spiral fracture of shaft of radius, right arm, initial encounter for closed fracture -S52341B Displaced spiral fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52341C Displaced spiral fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52341D Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52341E Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52341F Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52341G Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52341H Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52341J Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52341K Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52341M Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52341N Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52341P Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52341Q Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52341R Displaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52341S Displaced spiral fracture of shaft of radius, right arm, sequela -S52342A Displaced spiral fracture of shaft of radius, left arm, initial encounter for closed fracture -S52342B Displaced spiral fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52342C Displaced spiral fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52342D Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52342E Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52342F Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52342G Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52342H Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52342J Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52342K Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52342M Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52342N Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52342P Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52342Q Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52342R Displaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52342S Displaced spiral fracture of shaft of radius, left arm, sequela -S52343A Displaced spiral fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52343B Displaced spiral fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52343C Displaced spiral fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52343D Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52343E Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52343F Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52343G Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52343H Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52343J Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52343K Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52343M Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52343N Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52343P Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52343Q Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52343R Displaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52343S Displaced spiral fracture of shaft of radius, unspecified arm, sequela -S52344A Nondisplaced spiral fracture of shaft of radius, right arm, initial encounter for closed fracture -S52344B Nondisplaced spiral fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52344C Nondisplaced spiral fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52344D Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52344E Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52344F Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52344G Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52344H Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52344J Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52344K Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52344M Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52344N Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52344P Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52344Q Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52344R Nondisplaced spiral fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52344S Nondisplaced spiral fracture of shaft of radius, right arm, sequela -S52345A Nondisplaced spiral fracture of shaft of radius, left arm, initial encounter for closed fracture -S52345B Nondisplaced spiral fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52345C Nondisplaced spiral fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52345D Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52345E Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52345F Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52345G Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52345H Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52345J Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52345K Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52345M Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52345N Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52345P Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52345Q Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52345R Nondisplaced spiral fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52345S Nondisplaced spiral fracture of shaft of radius, left arm, sequela -S52346A Nondisplaced spiral fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52346B Nondisplaced spiral fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52346C Nondisplaced spiral fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52346D Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52346E Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52346F Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52346G Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52346H Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52346J Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52346K Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52346M Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52346N Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52346P Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52346Q Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52346R Nondisplaced spiral fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52346S Nondisplaced spiral fracture of shaft of radius, unspecified arm, sequela -S52351A Displaced comminuted fracture of shaft of radius, right arm, initial encounter for closed fracture -S52351B Displaced comminuted fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52351C Displaced comminuted fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52351D Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52351E Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52351F Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52351G Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52351H Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52351J Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52351K Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52351M Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52351N Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52351P Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52351Q Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52351R Displaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52351S Displaced comminuted fracture of shaft of radius, right arm, sequela -S52352A Displaced comminuted fracture of shaft of radius, left arm, initial encounter for closed fracture -S52352B Displaced comminuted fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52352C Displaced comminuted fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52352D Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52352E Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52352F Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52352G Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52352H Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52352J Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52352K Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52352M Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52352N Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52352P Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52352Q Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52352R Displaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52352S Displaced comminuted fracture of shaft of radius, left arm, sequela -S52353A Displaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52353B Displaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52353C Displaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52353D Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52353E Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52353F Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52353G Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52353H Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52353J Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52353K Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52353M Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52353N Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52353P Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52353Q Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52353R Displaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52353S Displaced comminuted fracture of shaft of radius, unspecified arm, sequela -S52354A Nondisplaced comminuted fracture of shaft of radius, right arm, initial encounter for closed fracture -S52354B Nondisplaced comminuted fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52354C Nondisplaced comminuted fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52354D Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52354E Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52354F Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52354G Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52354H Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52354J Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52354K Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52354M Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52354N Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52354P Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52354Q Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52354R Nondisplaced comminuted fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52354S Nondisplaced comminuted fracture of shaft of radius, right arm, sequela -S52355A Nondisplaced comminuted fracture of shaft of radius, left arm, initial encounter for closed fracture -S52355B Nondisplaced comminuted fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52355C Nondisplaced comminuted fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52355D Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52355E Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52355F Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52355G Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52355H Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52355J Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52355K Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52355M Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52355N Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52355P Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52355Q Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52355R Nondisplaced comminuted fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52355S Nondisplaced comminuted fracture of shaft of radius, left arm, sequela -S52356A Nondisplaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52356B Nondisplaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52356C Nondisplaced comminuted fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52356D Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52356E Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52356F Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52356G Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52356H Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52356J Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52356K Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52356M Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52356N Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52356P Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52356Q Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52356R Nondisplaced comminuted fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52356S Nondisplaced comminuted fracture of shaft of radius, unspecified arm, sequela -S52361A Displaced segmental fracture of shaft of radius, right arm, initial encounter for closed fracture -S52361B Displaced segmental fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52361C Displaced segmental fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52361D Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52361E Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52361F Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52361G Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52361H Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52361J Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52361K Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52361M Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52361N Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52361P Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52361Q Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52361R Displaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52361S Displaced segmental fracture of shaft of radius, right arm, sequela -S52362A Displaced segmental fracture of shaft of radius, left arm, initial encounter for closed fracture -S52362B Displaced segmental fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52362C Displaced segmental fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52362D Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52362E Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52362F Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52362G Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52362H Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52362J Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52362K Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52362M Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52362N Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52362P Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52362Q Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52362R Displaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52362S Displaced segmental fracture of shaft of radius, left arm, sequela -S52363A Displaced segmental fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52363B Displaced segmental fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52363C Displaced segmental fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52363D Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52363E Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52363F Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52363G Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52363H Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52363J Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52363K Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52363M Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52363N Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52363P Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52363Q Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52363R Displaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52363S Displaced segmental fracture of shaft of radius, unspecified arm, sequela -S52364A Nondisplaced segmental fracture of shaft of radius, right arm, initial encounter for closed fracture -S52364B Nondisplaced segmental fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52364C Nondisplaced segmental fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52364D Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52364E Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52364F Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52364G Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52364H Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52364J Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52364K Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52364M Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52364N Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52364P Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52364Q Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52364R Nondisplaced segmental fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52364S Nondisplaced segmental fracture of shaft of radius, right arm, sequela -S52365A Nondisplaced segmental fracture of shaft of radius, left arm, initial encounter for closed fracture -S52365B Nondisplaced segmental fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52365C Nondisplaced segmental fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52365D Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52365E Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52365F Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52365G Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52365H Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52365J Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52365K Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52365M Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52365N Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52365P Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52365Q Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52365R Nondisplaced segmental fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52365S Nondisplaced segmental fracture of shaft of radius, left arm, sequela -S52366A Nondisplaced segmental fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52366B Nondisplaced segmental fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52366C Nondisplaced segmental fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52366D Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52366E Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52366F Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52366G Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52366H Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52366J Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52366K Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52366M Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52366N Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52366P Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52366Q Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52366R Nondisplaced segmental fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52366S Nondisplaced segmental fracture of shaft of radius, unspecified arm, sequela -S52371A Galeazzi's fracture of right radius, initial encounter for closed fracture -S52371B Galeazzi's fracture of right radius, initial encounter for open fracture type I or II -S52371C Galeazzi's fracture of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52371D Galeazzi's fracture of right radius, subsequent encounter for closed fracture with routine healing -S52371E Galeazzi's fracture of right radius, subsequent encounter for open fracture type I or II with routine healing -S52371F Galeazzi's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52371G Galeazzi's fracture of right radius, subsequent encounter for closed fracture with delayed healing -S52371H Galeazzi's fracture of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52371J Galeazzi's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52371K Galeazzi's fracture of right radius, subsequent encounter for closed fracture with nonunion -S52371M Galeazzi's fracture of right radius, subsequent encounter for open fracture type I or II with nonunion -S52371N Galeazzi's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52371P Galeazzi's fracture of right radius, subsequent encounter for closed fracture with malunion -S52371Q Galeazzi's fracture of right radius, subsequent encounter for open fracture type I or II with malunion -S52371R Galeazzi's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52371S Galeazzi's fracture of right radius, sequela -S52372A Galeazzi's fracture of left radius, initial encounter for closed fracture -S52372B Galeazzi's fracture of left radius, initial encounter for open fracture type I or II -S52372C Galeazzi's fracture of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52372D Galeazzi's fracture of left radius, subsequent encounter for closed fracture with routine healing -S52372E Galeazzi's fracture of left radius, subsequent encounter for open fracture type I or II with routine healing -S52372F Galeazzi's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52372G Galeazzi's fracture of left radius, subsequent encounter for closed fracture with delayed healing -S52372H Galeazzi's fracture of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52372J Galeazzi's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52372K Galeazzi's fracture of left radius, subsequent encounter for closed fracture with nonunion -S52372M Galeazzi's fracture of left radius, subsequent encounter for open fracture type I or II with nonunion -S52372N Galeazzi's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52372P Galeazzi's fracture of left radius, subsequent encounter for closed fracture with malunion -S52372Q Galeazzi's fracture of left radius, subsequent encounter for open fracture type I or II with malunion -S52372R Galeazzi's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52372S Galeazzi's fracture of left radius, sequela -S52379A Galeazzi's fracture of unspecified radius, initial encounter for closed fracture -S52379B Galeazzi's fracture of unspecified radius, initial encounter for open fracture type I or II -S52379C Galeazzi's fracture of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52379D Galeazzi's fracture of unspecified radius, subsequent encounter for closed fracture with routine healing -S52379E Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52379F Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52379G Galeazzi's fracture of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52379H Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52379J Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52379K Galeazzi's fracture of unspecified radius, subsequent encounter for closed fracture with nonunion -S52379M Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52379N Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52379P Galeazzi's fracture of unspecified radius, subsequent encounter for closed fracture with malunion -S52379Q Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52379R Galeazzi's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52379S Galeazzi's fracture of unspecified radius, sequela -S52381A Bent bone of right radius, initial encounter for closed fracture -S52381B Bent bone of right radius, initial encounter for open fracture type I or II -S52381C Bent bone of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52381D Bent bone of right radius, subsequent encounter for closed fracture with routine healing -S52381E Bent bone of right radius, subsequent encounter for open fracture type I or II with routine healing -S52381F Bent bone of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52381G Bent bone of right radius, subsequent encounter for closed fracture with delayed healing -S52381H Bent bone of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52381J Bent bone of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52381K Bent bone of right radius, subsequent encounter for closed fracture with nonunion -S52381M Bent bone of right radius, subsequent encounter for open fracture type I or II with nonunion -S52381N Bent bone of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52381P Bent bone of right radius, subsequent encounter for closed fracture with malunion -S52381Q Bent bone of right radius, subsequent encounter for open fracture type I or II with malunion -S52381R Bent bone of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52381S Bent bone of right radius, sequela -S52382A Bent bone of left radius, initial encounter for closed fracture -S52382B Bent bone of left radius, initial encounter for open fracture type I or II -S52382C Bent bone of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52382D Bent bone of left radius, subsequent encounter for closed fracture with routine healing -S52382E Bent bone of left radius, subsequent encounter for open fracture type I or II with routine healing -S52382F Bent bone of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52382G Bent bone of left radius, subsequent encounter for closed fracture with delayed healing -S52382H Bent bone of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52382J Bent bone of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52382K Bent bone of left radius, subsequent encounter for closed fracture with nonunion -S52382M Bent bone of left radius, subsequent encounter for open fracture type I or II with nonunion -S52382N Bent bone of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52382P Bent bone of left radius, subsequent encounter for closed fracture with malunion -S52382Q Bent bone of left radius, subsequent encounter for open fracture type I or II with malunion -S52382R Bent bone of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52382S Bent bone of left radius, sequela -S52389A Bent bone of unspecified radius, initial encounter for closed fracture -S52389B Bent bone of unspecified radius, initial encounter for open fracture type I or II -S52389C Bent bone of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52389D Bent bone of unspecified radius, subsequent encounter for closed fracture with routine healing -S52389E Bent bone of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52389F Bent bone of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52389G Bent bone of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52389H Bent bone of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52389J Bent bone of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52389K Bent bone of unspecified radius, subsequent encounter for closed fracture with nonunion -S52389M Bent bone of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52389N Bent bone of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52389P Bent bone of unspecified radius, subsequent encounter for closed fracture with malunion -S52389Q Bent bone of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52389R Bent bone of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52389S Bent bone of unspecified radius, sequela -S52391A Other fracture of shaft of radius, right arm, initial encounter for closed fracture -S52391B Other fracture of shaft of radius, right arm, initial encounter for open fracture type I or II -S52391C Other fracture of shaft of radius, right arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52391D Other fracture of shaft of radius, right arm, subsequent encounter for closed fracture with routine healing -S52391E Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with routine healing -S52391F Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52391G Other fracture of shaft of radius, right arm, subsequent encounter for closed fracture with delayed healing -S52391H Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with delayed healing -S52391J Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52391K Other fracture of shaft of radius, right arm, subsequent encounter for closed fracture with nonunion -S52391M Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with nonunion -S52391N Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52391P Other fracture of shaft of radius, right arm, subsequent encounter for closed fracture with malunion -S52391Q Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type I or II with malunion -S52391R Other fracture of shaft of radius, right arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52391S Other fracture of shaft of radius, right arm, sequela -S52392A Other fracture of shaft of radius, left arm, initial encounter for closed fracture -S52392B Other fracture of shaft of radius, left arm, initial encounter for open fracture type I or II -S52392C Other fracture of shaft of radius, left arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52392D Other fracture of shaft of radius, left arm, subsequent encounter for closed fracture with routine healing -S52392E Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with routine healing -S52392F Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52392G Other fracture of shaft of radius, left arm, subsequent encounter for closed fracture with delayed healing -S52392H Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with delayed healing -S52392J Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52392K Other fracture of shaft of radius, left arm, subsequent encounter for closed fracture with nonunion -S52392M Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with nonunion -S52392N Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52392P Other fracture of shaft of radius, left arm, subsequent encounter for closed fracture with malunion -S52392Q Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type I or II with malunion -S52392R Other fracture of shaft of radius, left arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52392S Other fracture of shaft of radius, left arm, sequela -S52399A Other fracture of shaft of radius, unspecified arm, initial encounter for closed fracture -S52399B Other fracture of shaft of radius, unspecified arm, initial encounter for open fracture type I or II -S52399C Other fracture of shaft of radius, unspecified arm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52399D Other fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with routine healing -S52399E Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with routine healing -S52399F Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52399G Other fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with delayed healing -S52399H Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with delayed healing -S52399J Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52399K Other fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with nonunion -S52399M Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with nonunion -S52399N Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52399P Other fracture of shaft of radius, unspecified arm, subsequent encounter for closed fracture with malunion -S52399Q Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type I or II with malunion -S52399R Other fracture of shaft of radius, unspecified arm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52399S Other fracture of shaft of radius, unspecified arm, sequela -S52501A Unspecified fracture of the lower end of right radius, initial encounter for closed fracture -S52501B Unspecified fracture of the lower end of right radius, initial encounter for open fracture type I or II -S52501C Unspecified fracture of the lower end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52501D Unspecified fracture of the lower end of right radius, subsequent encounter for closed fracture with routine healing -S52501E Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52501F Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52501G Unspecified fracture of the lower end of right radius, subsequent encounter for closed fracture with delayed healing -S52501H Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52501J Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52501K Unspecified fracture of the lower end of right radius, subsequent encounter for closed fracture with nonunion -S52501M Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52501N Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52501P Unspecified fracture of the lower end of right radius, subsequent encounter for closed fracture with malunion -S52501Q Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type I or II with malunion -S52501R Unspecified fracture of the lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52501S Unspecified fracture of the lower end of right radius, sequela -S52502A Unspecified fracture of the lower end of left radius, initial encounter for closed fracture -S52502B Unspecified fracture of the lower end of left radius, initial encounter for open fracture type I or II -S52502C Unspecified fracture of the lower end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52502D Unspecified fracture of the lower end of left radius, subsequent encounter for closed fracture with routine healing -S52502E Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52502F Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52502G Unspecified fracture of the lower end of left radius, subsequent encounter for closed fracture with delayed healing -S52502H Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52502J Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52502K Unspecified fracture of the lower end of left radius, subsequent encounter for closed fracture with nonunion -S52502M Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52502N Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52502P Unspecified fracture of the lower end of left radius, subsequent encounter for closed fracture with malunion -S52502Q Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type I or II with malunion -S52502R Unspecified fracture of the lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52502S Unspecified fracture of the lower end of left radius, sequela -S52509A Unspecified fracture of the lower end of unspecified radius, initial encounter for closed fracture -S52509B Unspecified fracture of the lower end of unspecified radius, initial encounter for open fracture type I or II -S52509C Unspecified fracture of the lower end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52509D Unspecified fracture of the lower end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52509E Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52509F Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52509G Unspecified fracture of the lower end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52509H Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52509J Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52509K Unspecified fracture of the lower end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52509M Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52509N Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52509P Unspecified fracture of the lower end of unspecified radius, subsequent encounter for closed fracture with malunion -S52509Q Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52509R Unspecified fracture of the lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52509S Unspecified fracture of the lower end of unspecified radius, sequela -S52511A Displaced fracture of right radial styloid process, initial encounter for closed fracture -S52511B Displaced fracture of right radial styloid process, initial encounter for open fracture type I or II -S52511C Displaced fracture of right radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52511D Displaced fracture of right radial styloid process, subsequent encounter for closed fracture with routine healing -S52511E Displaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52511F Displaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52511G Displaced fracture of right radial styloid process, subsequent encounter for closed fracture with delayed healing -S52511H Displaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52511J Displaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52511K Displaced fracture of right radial styloid process, subsequent encounter for closed fracture with nonunion -S52511M Displaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52511N Displaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52511P Displaced fracture of right radial styloid process, subsequent encounter for closed fracture with malunion -S52511Q Displaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52511R Displaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52511S Displaced fracture of right radial styloid process, sequela -S52512A Displaced fracture of left radial styloid process, initial encounter for closed fracture -S52512B Displaced fracture of left radial styloid process, initial encounter for open fracture type I or II -S52512C Displaced fracture of left radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52512D Displaced fracture of left radial styloid process, subsequent encounter for closed fracture with routine healing -S52512E Displaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52512F Displaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52512G Displaced fracture of left radial styloid process, subsequent encounter for closed fracture with delayed healing -S52512H Displaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52512J Displaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52512K Displaced fracture of left radial styloid process, subsequent encounter for closed fracture with nonunion -S52512M Displaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52512N Displaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52512P Displaced fracture of left radial styloid process, subsequent encounter for closed fracture with malunion -S52512Q Displaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52512R Displaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52512S Displaced fracture of left radial styloid process, sequela -S52513A Displaced fracture of unspecified radial styloid process, initial encounter for closed fracture -S52513B Displaced fracture of unspecified radial styloid process, initial encounter for open fracture type I or II -S52513C Displaced fracture of unspecified radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52513D Displaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with routine healing -S52513E Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52513F Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52513G Displaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with delayed healing -S52513H Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52513J Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52513K Displaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with nonunion -S52513M Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52513N Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52513P Displaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with malunion -S52513Q Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52513R Displaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52513S Displaced fracture of unspecified radial styloid process, sequela -S52514A Nondisplaced fracture of right radial styloid process, initial encounter for closed fracture -S52514B Nondisplaced fracture of right radial styloid process, initial encounter for open fracture type I or II -S52514C Nondisplaced fracture of right radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52514D Nondisplaced fracture of right radial styloid process, subsequent encounter for closed fracture with routine healing -S52514E Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52514F Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52514G Nondisplaced fracture of right radial styloid process, subsequent encounter for closed fracture with delayed healing -S52514H Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52514J Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52514K Nondisplaced fracture of right radial styloid process, subsequent encounter for closed fracture with nonunion -S52514M Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52514N Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52514P Nondisplaced fracture of right radial styloid process, subsequent encounter for closed fracture with malunion -S52514Q Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52514R Nondisplaced fracture of right radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52514S Nondisplaced fracture of right radial styloid process, sequela -S52515A Nondisplaced fracture of left radial styloid process, initial encounter for closed fracture -S52515B Nondisplaced fracture of left radial styloid process, initial encounter for open fracture type I or II -S52515C Nondisplaced fracture of left radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52515D Nondisplaced fracture of left radial styloid process, subsequent encounter for closed fracture with routine healing -S52515E Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52515F Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52515G Nondisplaced fracture of left radial styloid process, subsequent encounter for closed fracture with delayed healing -S52515H Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52515J Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52515K Nondisplaced fracture of left radial styloid process, subsequent encounter for closed fracture with nonunion -S52515M Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52515N Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52515P Nondisplaced fracture of left radial styloid process, subsequent encounter for closed fracture with malunion -S52515Q Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52515R Nondisplaced fracture of left radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52515S Nondisplaced fracture of left radial styloid process, sequela -S52516A Nondisplaced fracture of unspecified radial styloid process, initial encounter for closed fracture -S52516B Nondisplaced fracture of unspecified radial styloid process, initial encounter for open fracture type I or II -S52516C Nondisplaced fracture of unspecified radial styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52516D Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with routine healing -S52516E Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with routine healing -S52516F Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52516G Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with delayed healing -S52516H Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52516J Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52516K Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with nonunion -S52516M Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with nonunion -S52516N Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52516P Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for closed fracture with malunion -S52516Q Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type I or II with malunion -S52516R Nondisplaced fracture of unspecified radial styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52516S Nondisplaced fracture of unspecified radial styloid process, sequela -S52521A Torus fracture of lower end of right radius, initial encounter for closed fracture -S52521D Torus fracture of lower end of right radius, subsequent encounter for fracture with routine healing -S52521G Torus fracture of lower end of right radius, subsequent encounter for fracture with delayed healing -S52521K Torus fracture of lower end of right radius, subsequent encounter for fracture with nonunion -S52521P Torus fracture of lower end of right radius, subsequent encounter for fracture with malunion -S52521S Torus fracture of lower end of right radius, sequela -S52522A Torus fracture of lower end of left radius, initial encounter for closed fracture -S52522D Torus fracture of lower end of left radius, subsequent encounter for fracture with routine healing -S52522G Torus fracture of lower end of left radius, subsequent encounter for fracture with delayed healing -S52522K Torus fracture of lower end of left radius, subsequent encounter for fracture with nonunion -S52522P Torus fracture of lower end of left radius, subsequent encounter for fracture with malunion -S52522S Torus fracture of lower end of left radius, sequela -S52529A Torus fracture of lower end of unspecified radius, initial encounter for closed fracture -S52529D Torus fracture of lower end of unspecified radius, subsequent encounter for fracture with routine healing -S52529G Torus fracture of lower end of unspecified radius, subsequent encounter for fracture with delayed healing -S52529K Torus fracture of lower end of unspecified radius, subsequent encounter for fracture with nonunion -S52529P Torus fracture of lower end of unspecified radius, subsequent encounter for fracture with malunion -S52529S Torus fracture of lower end of unspecified radius, sequela -S52531A Colles' fracture of right radius, initial encounter for closed fracture -S52531B Colles' fracture of right radius, initial encounter for open fracture type I or II -S52531C Colles' fracture of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52531D Colles' fracture of right radius, subsequent encounter for closed fracture with routine healing -S52531E Colles' fracture of right radius, subsequent encounter for open fracture type I or II with routine healing -S52531F Colles' fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52531G Colles' fracture of right radius, subsequent encounter for closed fracture with delayed healing -S52531H Colles' fracture of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52531J Colles' fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52531K Colles' fracture of right radius, subsequent encounter for closed fracture with nonunion -S52531M Colles' fracture of right radius, subsequent encounter for open fracture type I or II with nonunion -S52531N Colles' fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52531P Colles' fracture of right radius, subsequent encounter for closed fracture with malunion -S52531Q Colles' fracture of right radius, subsequent encounter for open fracture type I or II with malunion -S52531R Colles' fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52531S Colles' fracture of right radius, sequela -S52532A Colles' fracture of left radius, initial encounter for closed fracture -S52532B Colles' fracture of left radius, initial encounter for open fracture type I or II -S52532C Colles' fracture of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52532D Colles' fracture of left radius, subsequent encounter for closed fracture with routine healing -S52532E Colles' fracture of left radius, subsequent encounter for open fracture type I or II with routine healing -S52532F Colles' fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52532G Colles' fracture of left radius, subsequent encounter for closed fracture with delayed healing -S52532H Colles' fracture of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52532J Colles' fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52532K Colles' fracture of left radius, subsequent encounter for closed fracture with nonunion -S52532M Colles' fracture of left radius, subsequent encounter for open fracture type I or II with nonunion -S52532N Colles' fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52532P Colles' fracture of left radius, subsequent encounter for closed fracture with malunion -S52532Q Colles' fracture of left radius, subsequent encounter for open fracture type I or II with malunion -S52532R Colles' fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52532S Colles' fracture of left radius, sequela -S52539A Colles' fracture of unspecified radius, initial encounter for closed fracture -S52539B Colles' fracture of unspecified radius, initial encounter for open fracture type I or II -S52539C Colles' fracture of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52539D Colles' fracture of unspecified radius, subsequent encounter for closed fracture with routine healing -S52539E Colles' fracture of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52539F Colles' fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52539G Colles' fracture of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52539H Colles' fracture of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52539J Colles' fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52539K Colles' fracture of unspecified radius, subsequent encounter for closed fracture with nonunion -S52539M Colles' fracture of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52539N Colles' fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52539P Colles' fracture of unspecified radius, subsequent encounter for closed fracture with malunion -S52539Q Colles' fracture of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52539R Colles' fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52539S Colles' fracture of unspecified radius, sequela -S52541A Smith's fracture of right radius, initial encounter for closed fracture -S52541B Smith's fracture of right radius, initial encounter for open fracture type I or II -S52541C Smith's fracture of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52541D Smith's fracture of right radius, subsequent encounter for closed fracture with routine healing -S52541E Smith's fracture of right radius, subsequent encounter for open fracture type I or II with routine healing -S52541F Smith's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52541G Smith's fracture of right radius, subsequent encounter for closed fracture with delayed healing -S52541H Smith's fracture of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52541J Smith's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52541K Smith's fracture of right radius, subsequent encounter for closed fracture with nonunion -S52541M Smith's fracture of right radius, subsequent encounter for open fracture type I or II with nonunion -S52541N Smith's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52541P Smith's fracture of right radius, subsequent encounter for closed fracture with malunion -S52541Q Smith's fracture of right radius, subsequent encounter for open fracture type I or II with malunion -S52541R Smith's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52541S Smith's fracture of right radius, sequela -S52542A Smith's fracture of left radius, initial encounter for closed fracture -S52542B Smith's fracture of left radius, initial encounter for open fracture type I or II -S52542C Smith's fracture of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52542D Smith's fracture of left radius, subsequent encounter for closed fracture with routine healing -S52542E Smith's fracture of left radius, subsequent encounter for open fracture type I or II with routine healing -S52542F Smith's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52542G Smith's fracture of left radius, subsequent encounter for closed fracture with delayed healing -S52542H Smith's fracture of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52542J Smith's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52542K Smith's fracture of left radius, subsequent encounter for closed fracture with nonunion -S52542M Smith's fracture of left radius, subsequent encounter for open fracture type I or II with nonunion -S52542N Smith's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52542P Smith's fracture of left radius, subsequent encounter for closed fracture with malunion -S52542Q Smith's fracture of left radius, subsequent encounter for open fracture type I or II with malunion -S52542R Smith's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52542S Smith's fracture of left radius, sequela -S52549A Smith's fracture of unspecified radius, initial encounter for closed fracture -S52549B Smith's fracture of unspecified radius, initial encounter for open fracture type I or II -S52549C Smith's fracture of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52549D Smith's fracture of unspecified radius, subsequent encounter for closed fracture with routine healing -S52549E Smith's fracture of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52549F Smith's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52549G Smith's fracture of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52549H Smith's fracture of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52549J Smith's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52549K Smith's fracture of unspecified radius, subsequent encounter for closed fracture with nonunion -S52549M Smith's fracture of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52549N Smith's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52549P Smith's fracture of unspecified radius, subsequent encounter for closed fracture with malunion -S52549Q Smith's fracture of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52549R Smith's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52549S Smith's fracture of unspecified radius, sequela -S52551A Other extraarticular fracture of lower end of right radius, initial encounter for closed fracture -S52551B Other extraarticular fracture of lower end of right radius, initial encounter for open fracture type I or II -S52551C Other extraarticular fracture of lower end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52551D Other extraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with routine healing -S52551E Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52551F Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52551G Other extraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with delayed healing -S52551H Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52551J Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52551K Other extraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with nonunion -S52551M Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52551N Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52551P Other extraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with malunion -S52551Q Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with malunion -S52551R Other extraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52551S Other extraarticular fracture of lower end of right radius, sequela -S52552A Other extraarticular fracture of lower end of left radius, initial encounter for closed fracture -S52552B Other extraarticular fracture of lower end of left radius, initial encounter for open fracture type I or II -S52552C Other extraarticular fracture of lower end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52552D Other extraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with routine healing -S52552E Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52552F Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52552G Other extraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with delayed healing -S52552H Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52552J Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52552K Other extraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with nonunion -S52552M Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52552N Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52552P Other extraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with malunion -S52552Q Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with malunion -S52552R Other extraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52552S Other extraarticular fracture of lower end of left radius, sequela -S52559A Other extraarticular fracture of lower end of unspecified radius, initial encounter for closed fracture -S52559B Other extraarticular fracture of lower end of unspecified radius, initial encounter for open fracture type I or II -S52559C Other extraarticular fracture of lower end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52559D Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52559E Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52559F Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52559G Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52559H Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52559J Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52559K Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52559M Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52559N Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52559P Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with malunion -S52559Q Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52559R Other extraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52559S Other extraarticular fracture of lower end of unspecified radius, sequela -S52561A Barton's fracture of right radius, initial encounter for closed fracture -S52561B Barton's fracture of right radius, initial encounter for open fracture type I or II -S52561C Barton's fracture of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52561D Barton's fracture of right radius, subsequent encounter for closed fracture with routine healing -S52561E Barton's fracture of right radius, subsequent encounter for open fracture type I or II with routine healing -S52561F Barton's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52561G Barton's fracture of right radius, subsequent encounter for closed fracture with delayed healing -S52561H Barton's fracture of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52561J Barton's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52561K Barton's fracture of right radius, subsequent encounter for closed fracture with nonunion -S52561M Barton's fracture of right radius, subsequent encounter for open fracture type I or II with nonunion -S52561N Barton's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52561P Barton's fracture of right radius, subsequent encounter for closed fracture with malunion -S52561Q Barton's fracture of right radius, subsequent encounter for open fracture type I or II with malunion -S52561R Barton's fracture of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52561S Barton's fracture of right radius, sequela -S52562A Barton's fracture of left radius, initial encounter for closed fracture -S52562B Barton's fracture of left radius, initial encounter for open fracture type I or II -S52562C Barton's fracture of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52562D Barton's fracture of left radius, subsequent encounter for closed fracture with routine healing -S52562E Barton's fracture of left radius, subsequent encounter for open fracture type I or II with routine healing -S52562F Barton's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52562G Barton's fracture of left radius, subsequent encounter for closed fracture with delayed healing -S52562H Barton's fracture of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52562J Barton's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52562K Barton's fracture of left radius, subsequent encounter for closed fracture with nonunion -S52562M Barton's fracture of left radius, subsequent encounter for open fracture type I or II with nonunion -S52562N Barton's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52562P Barton's fracture of left radius, subsequent encounter for closed fracture with malunion -S52562Q Barton's fracture of left radius, subsequent encounter for open fracture type I or II with malunion -S52562R Barton's fracture of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52562S Barton's fracture of left radius, sequela -S52569A Barton's fracture of unspecified radius, initial encounter for closed fracture -S52569B Barton's fracture of unspecified radius, initial encounter for open fracture type I or II -S52569C Barton's fracture of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52569D Barton's fracture of unspecified radius, subsequent encounter for closed fracture with routine healing -S52569E Barton's fracture of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52569F Barton's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52569G Barton's fracture of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52569H Barton's fracture of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52569J Barton's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52569K Barton's fracture of unspecified radius, subsequent encounter for closed fracture with nonunion -S52569M Barton's fracture of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52569N Barton's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52569P Barton's fracture of unspecified radius, subsequent encounter for closed fracture with malunion -S52569Q Barton's fracture of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52569R Barton's fracture of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52569S Barton's fracture of unspecified radius, sequela -S52571A Other intraarticular fracture of lower end of right radius, initial encounter for closed fracture -S52571B Other intraarticular fracture of lower end of right radius, initial encounter for open fracture type I or II -S52571C Other intraarticular fracture of lower end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52571D Other intraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with routine healing -S52571E Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52571F Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52571G Other intraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with delayed healing -S52571H Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52571J Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52571K Other intraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with nonunion -S52571M Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52571N Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52571P Other intraarticular fracture of lower end of right radius, subsequent encounter for closed fracture with malunion -S52571Q Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type I or II with malunion -S52571R Other intraarticular fracture of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52571S Other intraarticular fracture of lower end of right radius, sequela -S52572A Other intraarticular fracture of lower end of left radius, initial encounter for closed fracture -S52572B Other intraarticular fracture of lower end of left radius, initial encounter for open fracture type I or II -S52572C Other intraarticular fracture of lower end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52572D Other intraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with routine healing -S52572E Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52572F Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52572G Other intraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with delayed healing -S52572H Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52572J Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52572K Other intraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with nonunion -S52572M Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52572N Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52572P Other intraarticular fracture of lower end of left radius, subsequent encounter for closed fracture with malunion -S52572Q Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type I or II with malunion -S52572R Other intraarticular fracture of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52572S Other intraarticular fracture of lower end of left radius, sequela -S52579A Other intraarticular fracture of lower end of unspecified radius, initial encounter for closed fracture -S52579B Other intraarticular fracture of lower end of unspecified radius, initial encounter for open fracture type I or II -S52579C Other intraarticular fracture of lower end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52579D Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52579E Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52579F Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52579G Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52579H Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52579J Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52579K Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52579M Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52579N Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52579P Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for closed fracture with malunion -S52579Q Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52579R Other intraarticular fracture of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52579S Other intraarticular fracture of lower end of unspecified radius, sequela -S52591A Other fractures of lower end of right radius, initial encounter for closed fracture -S52591B Other fractures of lower end of right radius, initial encounter for open fracture type I or II -S52591C Other fractures of lower end of right radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52591D Other fractures of lower end of right radius, subsequent encounter for closed fracture with routine healing -S52591E Other fractures of lower end of right radius, subsequent encounter for open fracture type I or II with routine healing -S52591F Other fractures of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52591G Other fractures of lower end of right radius, subsequent encounter for closed fracture with delayed healing -S52591H Other fractures of lower end of right radius, subsequent encounter for open fracture type I or II with delayed healing -S52591J Other fractures of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52591K Other fractures of lower end of right radius, subsequent encounter for closed fracture with nonunion -S52591M Other fractures of lower end of right radius, subsequent encounter for open fracture type I or II with nonunion -S52591N Other fractures of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52591P Other fractures of lower end of right radius, subsequent encounter for closed fracture with malunion -S52591Q Other fractures of lower end of right radius, subsequent encounter for open fracture type I or II with malunion -S52591R Other fractures of lower end of right radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52591S Other fractures of lower end of right radius, sequela -S52592A Other fractures of lower end of left radius, initial encounter for closed fracture -S52592B Other fractures of lower end of left radius, initial encounter for open fracture type I or II -S52592C Other fractures of lower end of left radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52592D Other fractures of lower end of left radius, subsequent encounter for closed fracture with routine healing -S52592E Other fractures of lower end of left radius, subsequent encounter for open fracture type I or II with routine healing -S52592F Other fractures of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52592G Other fractures of lower end of left radius, subsequent encounter for closed fracture with delayed healing -S52592H Other fractures of lower end of left radius, subsequent encounter for open fracture type I or II with delayed healing -S52592J Other fractures of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52592K Other fractures of lower end of left radius, subsequent encounter for closed fracture with nonunion -S52592M Other fractures of lower end of left radius, subsequent encounter for open fracture type I or II with nonunion -S52592N Other fractures of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52592P Other fractures of lower end of left radius, subsequent encounter for closed fracture with malunion -S52592Q Other fractures of lower end of left radius, subsequent encounter for open fracture type I or II with malunion -S52592R Other fractures of lower end of left radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52592S Other fractures of lower end of left radius, sequela -S52599A Other fractures of lower end of unspecified radius, initial encounter for closed fracture -S52599B Other fractures of lower end of unspecified radius, initial encounter for open fracture type I or II -S52599C Other fractures of lower end of unspecified radius, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52599D Other fractures of lower end of unspecified radius, subsequent encounter for closed fracture with routine healing -S52599E Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type I or II with routine healing -S52599F Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52599G Other fractures of lower end of unspecified radius, subsequent encounter for closed fracture with delayed healing -S52599H Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type I or II with delayed healing -S52599J Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52599K Other fractures of lower end of unspecified radius, subsequent encounter for closed fracture with nonunion -S52599M Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type I or II with nonunion -S52599N Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52599P Other fractures of lower end of unspecified radius, subsequent encounter for closed fracture with malunion -S52599Q Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type I or II with malunion -S52599R Other fractures of lower end of unspecified radius, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52599S Other fractures of lower end of unspecified radius, sequela -S52601A Unspecified fracture of lower end of right ulna, initial encounter for closed fracture -S52601B Unspecified fracture of lower end of right ulna, initial encounter for open fracture type I or II -S52601C Unspecified fracture of lower end of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52601D Unspecified fracture of lower end of right ulna, subsequent encounter for closed fracture with routine healing -S52601E Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52601F Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52601G Unspecified fracture of lower end of right ulna, subsequent encounter for closed fracture with delayed healing -S52601H Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52601J Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52601K Unspecified fracture of lower end of right ulna, subsequent encounter for closed fracture with nonunion -S52601M Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52601N Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52601P Unspecified fracture of lower end of right ulna, subsequent encounter for closed fracture with malunion -S52601Q Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with malunion -S52601R Unspecified fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52601S Unspecified fracture of lower end of right ulna, sequela -S52602A Unspecified fracture of lower end of left ulna, initial encounter for closed fracture -S52602B Unspecified fracture of lower end of left ulna, initial encounter for open fracture type I or II -S52602C Unspecified fracture of lower end of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52602D Unspecified fracture of lower end of left ulna, subsequent encounter for closed fracture with routine healing -S52602E Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52602F Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52602G Unspecified fracture of lower end of left ulna, subsequent encounter for closed fracture with delayed healing -S52602H Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52602J Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52602K Unspecified fracture of lower end of left ulna, subsequent encounter for closed fracture with nonunion -S52602M Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52602N Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52602P Unspecified fracture of lower end of left ulna, subsequent encounter for closed fracture with malunion -S52602Q Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with malunion -S52602R Unspecified fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52602S Unspecified fracture of lower end of left ulna, sequela -S52609A Unspecified fracture of lower end of unspecified ulna, initial encounter for closed fracture -S52609B Unspecified fracture of lower end of unspecified ulna, initial encounter for open fracture type I or II -S52609C Unspecified fracture of lower end of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52609D Unspecified fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52609E Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52609F Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52609G Unspecified fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52609H Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52609J Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52609K Unspecified fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52609M Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52609N Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52609P Unspecified fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with malunion -S52609Q Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52609R Unspecified fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52609S Unspecified fracture of lower end of unspecified ulna, sequela -S52611A Displaced fracture of right ulna styloid process, initial encounter for closed fracture -S52611B Displaced fracture of right ulna styloid process, initial encounter for open fracture type I or II -S52611C Displaced fracture of right ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52611D Displaced fracture of right ulna styloid process, subsequent encounter for closed fracture with routine healing -S52611E Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52611F Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52611G Displaced fracture of right ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52611H Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52611J Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52611K Displaced fracture of right ulna styloid process, subsequent encounter for closed fracture with nonunion -S52611M Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52611N Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52611P Displaced fracture of right ulna styloid process, subsequent encounter for closed fracture with malunion -S52611Q Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52611R Displaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52611S Displaced fracture of right ulna styloid process, sequela -S52612A Displaced fracture of left ulna styloid process, initial encounter for closed fracture -S52612B Displaced fracture of left ulna styloid process, initial encounter for open fracture type I or II -S52612C Displaced fracture of left ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52612D Displaced fracture of left ulna styloid process, subsequent encounter for closed fracture with routine healing -S52612E Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52612F Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52612G Displaced fracture of left ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52612H Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52612J Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52612K Displaced fracture of left ulna styloid process, subsequent encounter for closed fracture with nonunion -S52612M Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52612N Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52612P Displaced fracture of left ulna styloid process, subsequent encounter for closed fracture with malunion -S52612Q Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52612R Displaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52612S Displaced fracture of left ulna styloid process, sequela -S52613A Displaced fracture of unspecified ulna styloid process, initial encounter for closed fracture -S52613B Displaced fracture of unspecified ulna styloid process, initial encounter for open fracture type I or II -S52613C Displaced fracture of unspecified ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52613D Displaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with routine healing -S52613E Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52613F Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52613G Displaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52613H Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52613J Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52613K Displaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with nonunion -S52613M Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52613N Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52613P Displaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with malunion -S52613Q Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52613R Displaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52613S Displaced fracture of unspecified ulna styloid process, sequela -S52614A Nondisplaced fracture of right ulna styloid process, initial encounter for closed fracture -S52614B Nondisplaced fracture of right ulna styloid process, initial encounter for open fracture type I or II -S52614C Nondisplaced fracture of right ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52614D Nondisplaced fracture of right ulna styloid process, subsequent encounter for closed fracture with routine healing -S52614E Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52614F Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52614G Nondisplaced fracture of right ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52614H Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52614J Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52614K Nondisplaced fracture of right ulna styloid process, subsequent encounter for closed fracture with nonunion -S52614M Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52614N Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52614P Nondisplaced fracture of right ulna styloid process, subsequent encounter for closed fracture with malunion -S52614Q Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52614R Nondisplaced fracture of right ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52614S Nondisplaced fracture of right ulna styloid process, sequela -S52615A Nondisplaced fracture of left ulna styloid process, initial encounter for closed fracture -S52615B Nondisplaced fracture of left ulna styloid process, initial encounter for open fracture type I or II -S52615C Nondisplaced fracture of left ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52615D Nondisplaced fracture of left ulna styloid process, subsequent encounter for closed fracture with routine healing -S52615E Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52615F Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52615G Nondisplaced fracture of left ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52615H Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52615J Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52615K Nondisplaced fracture of left ulna styloid process, subsequent encounter for closed fracture with nonunion -S52615M Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52615N Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52615P Nondisplaced fracture of left ulna styloid process, subsequent encounter for closed fracture with malunion -S52615Q Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52615R Nondisplaced fracture of left ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52615S Nondisplaced fracture of left ulna styloid process, sequela -S52616A Nondisplaced fracture of unspecified ulna styloid process, initial encounter for closed fracture -S52616B Nondisplaced fracture of unspecified ulna styloid process, initial encounter for open fracture type I or II -S52616C Nondisplaced fracture of unspecified ulna styloid process, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52616D Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with routine healing -S52616E Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with routine healing -S52616F Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52616G Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with delayed healing -S52616H Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with delayed healing -S52616J Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52616K Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with nonunion -S52616M Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with nonunion -S52616N Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52616P Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for closed fracture with malunion -S52616Q Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type I or II with malunion -S52616R Nondisplaced fracture of unspecified ulna styloid process, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52616S Nondisplaced fracture of unspecified ulna styloid process, sequela -S52621A Torus fracture of lower end of right ulna, initial encounter for closed fracture -S52621D Torus fracture of lower end of right ulna, subsequent encounter for fracture with routine healing -S52621G Torus fracture of lower end of right ulna, subsequent encounter for fracture with delayed healing -S52621K Torus fracture of lower end of right ulna, subsequent encounter for fracture with nonunion -S52621P Torus fracture of lower end of right ulna, subsequent encounter for fracture with malunion -S52621S Torus fracture of lower end of right ulna, sequela -S52622A Torus fracture of lower end of left ulna, initial encounter for closed fracture -S52622D Torus fracture of lower end of left ulna, subsequent encounter for fracture with routine healing -S52622G Torus fracture of lower end of left ulna, subsequent encounter for fracture with delayed healing -S52622K Torus fracture of lower end of left ulna, subsequent encounter for fracture with nonunion -S52622P Torus fracture of lower end of left ulna, subsequent encounter for fracture with malunion -S52622S Torus fracture of lower end of left ulna, sequela -S52629A Torus fracture of lower end of unspecified ulna, initial encounter for closed fracture -S52629D Torus fracture of lower end of unspecified ulna, subsequent encounter for fracture with routine healing -S52629G Torus fracture of lower end of unspecified ulna, subsequent encounter for fracture with delayed healing -S52629K Torus fracture of lower end of unspecified ulna, subsequent encounter for fracture with nonunion -S52629P Torus fracture of lower end of unspecified ulna, subsequent encounter for fracture with malunion -S52629S Torus fracture of lower end of unspecified ulna, sequela -S52691A Other fracture of lower end of right ulna, initial encounter for closed fracture -S52691B Other fracture of lower end of right ulna, initial encounter for open fracture type I or II -S52691C Other fracture of lower end of right ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52691D Other fracture of lower end of right ulna, subsequent encounter for closed fracture with routine healing -S52691E Other fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with routine healing -S52691F Other fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52691G Other fracture of lower end of right ulna, subsequent encounter for closed fracture with delayed healing -S52691H Other fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with delayed healing -S52691J Other fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52691K Other fracture of lower end of right ulna, subsequent encounter for closed fracture with nonunion -S52691M Other fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with nonunion -S52691N Other fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52691P Other fracture of lower end of right ulna, subsequent encounter for closed fracture with malunion -S52691Q Other fracture of lower end of right ulna, subsequent encounter for open fracture type I or II with malunion -S52691R Other fracture of lower end of right ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52691S Other fracture of lower end of right ulna, sequela -S52692A Other fracture of lower end of left ulna, initial encounter for closed fracture -S52692B Other fracture of lower end of left ulna, initial encounter for open fracture type I or II -S52692C Other fracture of lower end of left ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52692D Other fracture of lower end of left ulna, subsequent encounter for closed fracture with routine healing -S52692E Other fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with routine healing -S52692F Other fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52692G Other fracture of lower end of left ulna, subsequent encounter for closed fracture with delayed healing -S52692H Other fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with delayed healing -S52692J Other fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52692K Other fracture of lower end of left ulna, subsequent encounter for closed fracture with nonunion -S52692M Other fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with nonunion -S52692N Other fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52692P Other fracture of lower end of left ulna, subsequent encounter for closed fracture with malunion -S52692Q Other fracture of lower end of left ulna, subsequent encounter for open fracture type I or II with malunion -S52692R Other fracture of lower end of left ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52692S Other fracture of lower end of left ulna, sequela -S52699A Other fracture of lower end of unspecified ulna, initial encounter for closed fracture -S52699B Other fracture of lower end of unspecified ulna, initial encounter for open fracture type I or II -S52699C Other fracture of lower end of unspecified ulna, initial encounter for open fracture type IIIA, IIIB, or IIIC -S52699D Other fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with routine healing -S52699E Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with routine healing -S52699F Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S52699G Other fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with delayed healing -S52699H Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with delayed healing -S52699J Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S52699K Other fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with nonunion -S52699M Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with nonunion -S52699N Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S52699P Other fracture of lower end of unspecified ulna, subsequent encounter for closed fracture with malunion -S52699Q Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type I or II with malunion -S52699R Other fracture of lower end of unspecified ulna, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S52699S Other fracture of lower end of unspecified ulna, sequela -S5290XA Unspecified fracture of unspecified forearm, initial encounter for closed fracture -S5290XB Unspecified fracture of unspecified forearm, initial encounter for open fracture type I or II -S5290XC Unspecified fracture of unspecified forearm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S5290XD Unspecified fracture of unspecified forearm, subsequent encounter for closed fracture with routine healing -S5290XE Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type I or II with routine healing -S5290XF Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S5290XG Unspecified fracture of unspecified forearm, subsequent encounter for closed fracture with delayed healing -S5290XH Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type I or II with delayed healing -S5290XJ Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S5290XK Unspecified fracture of unspecified forearm, subsequent encounter for closed fracture with nonunion -S5290XM Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type I or II with nonunion -S5290XN Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S5290XP Unspecified fracture of unspecified forearm, subsequent encounter for closed fracture with malunion -S5290XQ Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type I or II with malunion -S5290XR Unspecified fracture of unspecified forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S5290XS Unspecified fracture of unspecified forearm, sequela -S5291XA Unspecified fracture of right forearm, initial encounter for closed fracture -S5291XB Unspecified fracture of right forearm, initial encounter for open fracture type I or II -S5291XC Unspecified fracture of right forearm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S5291XD Unspecified fracture of right forearm, subsequent encounter for closed fracture with routine healing -S5291XE Unspecified fracture of right forearm, subsequent encounter for open fracture type I or II with routine healing -S5291XF Unspecified fracture of right forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S5291XG Unspecified fracture of right forearm, subsequent encounter for closed fracture with delayed healing -S5291XH Unspecified fracture of right forearm, subsequent encounter for open fracture type I or II with delayed healing -S5291XJ Unspecified fracture of right forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S5291XK Unspecified fracture of right forearm, subsequent encounter for closed fracture with nonunion -S5291XM Unspecified fracture of right forearm, subsequent encounter for open fracture type I or II with nonunion -S5291XN Unspecified fracture of right forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S5291XP Unspecified fracture of right forearm, subsequent encounter for closed fracture with malunion -S5291XQ Unspecified fracture of right forearm, subsequent encounter for open fracture type I or II with malunion -S5291XR Unspecified fracture of right forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S5291XS Unspecified fracture of right forearm, sequela -S5292XA Unspecified fracture of left forearm, initial encounter for closed fracture -S5292XB Unspecified fracture of left forearm, initial encounter for open fracture type I or II -S5292XC Unspecified fracture of left forearm, initial encounter for open fracture type IIIA, IIIB, or IIIC -S5292XD Unspecified fracture of left forearm, subsequent encounter for closed fracture with routine healing -S5292XE Unspecified fracture of left forearm, subsequent encounter for open fracture type I or II with routine healing -S5292XF Unspecified fracture of left forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S5292XG Unspecified fracture of left forearm, subsequent encounter for closed fracture with delayed healing -S5292XH Unspecified fracture of left forearm, subsequent encounter for open fracture type I or II with delayed healing -S5292XJ Unspecified fracture of left forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S5292XK Unspecified fracture of left forearm, subsequent encounter for closed fracture with nonunion -S5292XM Unspecified fracture of left forearm, subsequent encounter for open fracture type I or II with nonunion -S5292XN Unspecified fracture of left forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S5292XP Unspecified fracture of left forearm, subsequent encounter for closed fracture with malunion -S5292XQ Unspecified fracture of left forearm, subsequent encounter for open fracture type I or II with malunion -S5292XR Unspecified fracture of left forearm, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S5292XS Unspecified fracture of left forearm, sequela -S53001A Unspecified subluxation of right radial head, initial encounter -S53001D Unspecified subluxation of right radial head, subsequent encounter -S53001S Unspecified subluxation of right radial head, sequela -S53002A Unspecified subluxation of left radial head, initial encounter -S53002D Unspecified subluxation of left radial head, subsequent encounter -S53002S Unspecified subluxation of left radial head, sequela -S53003A Unspecified subluxation of unspecified radial head, initial encounter -S53003D Unspecified subluxation of unspecified radial head, subsequent encounter -S53003S Unspecified subluxation of unspecified radial head, sequela -S53004A Unspecified dislocation of right radial head, initial encounter -S53004D Unspecified dislocation of right radial head, subsequent encounter -S53004S Unspecified dislocation of right radial head, sequela -S53005A Unspecified dislocation of left radial head, initial encounter -S53005D Unspecified dislocation of left radial head, subsequent encounter -S53005S Unspecified dislocation of left radial head, sequela -S53006A Unspecified dislocation of unspecified radial head, initial encounter -S53006D Unspecified dislocation of unspecified radial head, subsequent encounter -S53006S Unspecified dislocation of unspecified radial head, sequela -S53011A Anterior subluxation of right radial head, initial encounter -S53011D Anterior subluxation of right radial head, subsequent encounter -S53011S Anterior subluxation of right radial head, sequela -S53012A Anterior subluxation of left radial head, initial encounter -S53012D Anterior subluxation of left radial head, subsequent encounter -S53012S Anterior subluxation of left radial head, sequela -S53013A Anterior subluxation of unspecified radial head, initial encounter -S53013D Anterior subluxation of unspecified radial head, subsequent encounter -S53013S Anterior subluxation of unspecified radial head, sequela -S53014A Anterior dislocation of right radial head, initial encounter -S53014D Anterior dislocation of right radial head, subsequent encounter -S53014S Anterior dislocation of right radial head, sequela -S53015A Anterior dislocation of left radial head, initial encounter -S53015D Anterior dislocation of left radial head, subsequent encounter -S53015S Anterior dislocation of left radial head, sequela -S53016A Anterior dislocation of unspecified radial head, initial encounter -S53016D Anterior dislocation of unspecified radial head, subsequent encounter -S53016S Anterior dislocation of unspecified radial head, sequela -S53021A Posterior subluxation of right radial head, initial encounter -S53021D Posterior subluxation of right radial head, subsequent encounter -S53021S Posterior subluxation of right radial head, sequela -S53022A Posterior subluxation of left radial head, initial encounter -S53022D Posterior subluxation of left radial head, subsequent encounter -S53022S Posterior subluxation of left radial head, sequela -S53023A Posterior subluxation of unspecified radial head, initial encounter -S53023D Posterior subluxation of unspecified radial head, subsequent encounter -S53023S Posterior subluxation of unspecified radial head, sequela -S53024A Posterior dislocation of right radial head, initial encounter -S53024D Posterior dislocation of right radial head, subsequent encounter -S53024S Posterior dislocation of right radial head, sequela -S53025A Posterior dislocation of left radial head, initial encounter -S53025D Posterior dislocation of left radial head, subsequent encounter -S53025S Posterior dislocation of left radial head, sequela -S53026A Posterior dislocation of unspecified radial head, initial encounter -S53026D Posterior dislocation of unspecified radial head, subsequent encounter -S53026S Posterior dislocation of unspecified radial head, sequela -S53031A Nursemaid's elbow, right elbow, initial encounter -S53031D Nursemaid's elbow, right elbow, subsequent encounter -S53031S Nursemaid's elbow, right elbow, sequela -S53032A Nursemaid's elbow, left elbow, initial encounter -S53032D Nursemaid's elbow, left elbow, subsequent encounter -S53032S Nursemaid's elbow, left elbow, sequela -S53033A Nursemaid's elbow, unspecified elbow, initial encounter -S53033D Nursemaid's elbow, unspecified elbow, subsequent encounter -S53033S Nursemaid's elbow, unspecified elbow, sequela -S53091A Other subluxation of right radial head, initial encounter -S53091D Other subluxation of right radial head, subsequent encounter -S53091S Other subluxation of right radial head, sequela -S53092A Other subluxation of left radial head, initial encounter -S53092D Other subluxation of left radial head, subsequent encounter -S53092S Other subluxation of left radial head, sequela -S53093A Other subluxation of unspecified radial head, initial encounter -S53093D Other subluxation of unspecified radial head, subsequent encounter -S53093S Other subluxation of unspecified radial head, sequela -S53094A Other dislocation of right radial head, initial encounter -S53094D Other dislocation of right radial head, subsequent encounter -S53094S Other dislocation of right radial head, sequela -S53095A Other dislocation of left radial head, initial encounter -S53095D Other dislocation of left radial head, subsequent encounter -S53095S Other dislocation of left radial head, sequela -S53096A Other dislocation of unspecified radial head, initial encounter -S53096D Other dislocation of unspecified radial head, subsequent encounter -S53096S Other dislocation of unspecified radial head, sequela -S53101A Unspecified subluxation of right ulnohumeral joint, initial encounter -S53101D Unspecified subluxation of right ulnohumeral joint, subsequent encounter -S53101S Unspecified subluxation of right ulnohumeral joint, sequela -S53102A Unspecified subluxation of left ulnohumeral joint, initial encounter -S53102D Unspecified subluxation of left ulnohumeral joint, subsequent encounter -S53102S Unspecified subluxation of left ulnohumeral joint, sequela -S53103A Unspecified subluxation of unspecified ulnohumeral joint, initial encounter -S53103D Unspecified subluxation of unspecified ulnohumeral joint, subsequent encounter -S53103S Unspecified subluxation of unspecified ulnohumeral joint, sequela -S53104A Unspecified dislocation of right ulnohumeral joint, initial encounter -S53104D Unspecified dislocation of right ulnohumeral joint, subsequent encounter -S53104S Unspecified dislocation of right ulnohumeral joint, sequela -S53105A Unspecified dislocation of left ulnohumeral joint, initial encounter -S53105D Unspecified dislocation of left ulnohumeral joint, subsequent encounter -S53105S Unspecified dislocation of left ulnohumeral joint, sequela -S53106A Unspecified dislocation of unspecified ulnohumeral joint, initial encounter -S53106D Unspecified dislocation of unspecified ulnohumeral joint, subsequent encounter -S53106S Unspecified dislocation of unspecified ulnohumeral joint, sequela -S53111A Anterior subluxation of right ulnohumeral joint, initial encounter -S53111D Anterior subluxation of right ulnohumeral joint, subsequent encounter -S53111S Anterior subluxation of right ulnohumeral joint, sequela -S53112A Anterior subluxation of left ulnohumeral joint, initial encounter -S53112D Anterior subluxation of left ulnohumeral joint, subsequent encounter -S53112S Anterior subluxation of left ulnohumeral joint, sequela -S53113A Anterior subluxation of unspecified ulnohumeral joint, initial encounter -S53113D Anterior subluxation of unspecified ulnohumeral joint, subsequent encounter -S53113S Anterior subluxation of unspecified ulnohumeral joint, sequela -S53114A Anterior dislocation of right ulnohumeral joint, initial encounter -S53114D Anterior dislocation of right ulnohumeral joint, subsequent encounter -S53114S Anterior dislocation of right ulnohumeral joint, sequela -S53115A Anterior dislocation of left ulnohumeral joint, initial encounter -S53115D Anterior dislocation of left ulnohumeral joint, subsequent encounter -S53115S Anterior dislocation of left ulnohumeral joint, sequela -S53116A Anterior dislocation of unspecified ulnohumeral joint, initial encounter -S53116D Anterior dislocation of unspecified ulnohumeral joint, subsequent encounter -S53116S Anterior dislocation of unspecified ulnohumeral joint, sequela -S53121A Posterior subluxation of right ulnohumeral joint, initial encounter -S53121D Posterior subluxation of right ulnohumeral joint, subsequent encounter -S53121S Posterior subluxation of right ulnohumeral joint, sequela -S53122A Posterior subluxation of left ulnohumeral joint, initial encounter -S53122D Posterior subluxation of left ulnohumeral joint, subsequent encounter -S53122S Posterior subluxation of left ulnohumeral joint, sequela -S53123A Posterior subluxation of unspecified ulnohumeral joint, initial encounter -S53123D Posterior subluxation of unspecified ulnohumeral joint, subsequent encounter -S53123S Posterior subluxation of unspecified ulnohumeral joint, sequela -S53124A Posterior dislocation of right ulnohumeral joint, initial encounter -S53124D Posterior dislocation of right ulnohumeral joint, subsequent encounter -S53124S Posterior dislocation of right ulnohumeral joint, sequela -S53125A Posterior dislocation of left ulnohumeral joint, initial encounter -S53125D Posterior dislocation of left ulnohumeral joint, subsequent encounter -S53125S Posterior dislocation of left ulnohumeral joint, sequela -S53126A Posterior dislocation of unspecified ulnohumeral joint, initial encounter -S53126D Posterior dislocation of unspecified ulnohumeral joint, subsequent encounter -S53126S Posterior dislocation of unspecified ulnohumeral joint, sequela -S53131A Medial subluxation of right ulnohumeral joint, initial encounter -S53131D Medial subluxation of right ulnohumeral joint, subsequent encounter -S53131S Medial subluxation of right ulnohumeral joint, sequela -S53132A Medial subluxation of left ulnohumeral joint, initial encounter -S53132D Medial subluxation of left ulnohumeral joint, subsequent encounter -S53132S Medial subluxation of left ulnohumeral joint, sequela -S53133A Medial subluxation of unspecified ulnohumeral joint, initial encounter -S53133D Medial subluxation of unspecified ulnohumeral joint, subsequent encounter -S53133S Medial subluxation of unspecified ulnohumeral joint, sequela -S53134A Medial dislocation of right ulnohumeral joint, initial encounter -S53134D Medial dislocation of right ulnohumeral joint, subsequent encounter -S53134S Medial dislocation of right ulnohumeral joint, sequela -S53135A Medial dislocation of left ulnohumeral joint, initial encounter -S53135D Medial dislocation of left ulnohumeral joint, subsequent encounter -S53135S Medial dislocation of left ulnohumeral joint, sequela -S53136A Medial dislocation of unspecified ulnohumeral joint, initial encounter -S53136D Medial dislocation of unspecified ulnohumeral joint, subsequent encounter -S53136S Medial dislocation of unspecified ulnohumeral joint, sequela -S53141A Lateral subluxation of right ulnohumeral joint, initial encounter -S53141D Lateral subluxation of right ulnohumeral joint, subsequent encounter -S53141S Lateral subluxation of right ulnohumeral joint, sequela -S53142A Lateral subluxation of left ulnohumeral joint, initial encounter -S53142D Lateral subluxation of left ulnohumeral joint, subsequent encounter -S53142S Lateral subluxation of left ulnohumeral joint, sequela -S53143A Lateral subluxation of unspecified ulnohumeral joint, initial encounter -S53143D Lateral subluxation of unspecified ulnohumeral joint, subsequent encounter -S53143S Lateral subluxation of unspecified ulnohumeral joint, sequela -S53144A Lateral dislocation of right ulnohumeral joint, initial encounter -S53144D Lateral dislocation of right ulnohumeral joint, subsequent encounter -S53144S Lateral dislocation of right ulnohumeral joint, sequela -S53145A Lateral dislocation of left ulnohumeral joint, initial encounter -S53145D Lateral dislocation of left ulnohumeral joint, subsequent encounter -S53145S Lateral dislocation of left ulnohumeral joint, sequela -S53146A Lateral dislocation of unspecified ulnohumeral joint, initial encounter -S53146D Lateral dislocation of unspecified ulnohumeral joint, subsequent encounter -S53146S Lateral dislocation of unspecified ulnohumeral joint, sequela -S53191A Other subluxation of right ulnohumeral joint, initial encounter -S53191D Other subluxation of right ulnohumeral joint, subsequent encounter -S53191S Other subluxation of right ulnohumeral joint, sequela -S53192A Other subluxation of left ulnohumeral joint, initial encounter -S53192D Other subluxation of left ulnohumeral joint, subsequent encounter -S53192S Other subluxation of left ulnohumeral joint, sequela -S53193A Other subluxation of unspecified ulnohumeral joint, initial encounter -S53193D Other subluxation of unspecified ulnohumeral joint, subsequent encounter -S53193S Other subluxation of unspecified ulnohumeral joint, sequela -S53194A Other dislocation of right ulnohumeral joint, initial encounter -S53194D Other dislocation of right ulnohumeral joint, subsequent encounter -S53194S Other dislocation of right ulnohumeral joint, sequela -S53195A Other dislocation of left ulnohumeral joint, initial encounter -S53195D Other dislocation of left ulnohumeral joint, subsequent encounter -S53195S Other dislocation of left ulnohumeral joint, sequela -S53196A Other dislocation of unspecified ulnohumeral joint, initial encounter -S53196D Other dislocation of unspecified ulnohumeral joint, subsequent encounter -S53196S Other dislocation of unspecified ulnohumeral joint, sequela -S5320XA Traumatic rupture of unspecified radial collateral ligament, initial encounter -S5320XD Traumatic rupture of unspecified radial collateral ligament, subsequent encounter -S5320XS Traumatic rupture of unspecified radial collateral ligament, sequela -S5321XA Traumatic rupture of right radial collateral ligament, initial encounter -S5321XD Traumatic rupture of right radial collateral ligament, subsequent encounter -S5321XS Traumatic rupture of right radial collateral ligament, sequela -S5322XA Traumatic rupture of left radial collateral ligament, initial encounter -S5322XD Traumatic rupture of left radial collateral ligament, subsequent encounter -S5322XS Traumatic rupture of left radial collateral ligament, sequela -S5330XA Traumatic rupture of unspecified ulnar collateral ligament, initial encounter -S5330XD Traumatic rupture of unspecified ulnar collateral ligament, subsequent encounter -S5330XS Traumatic rupture of unspecified ulnar collateral ligament, sequela -S5331XA Traumatic rupture of right ulnar collateral ligament, initial encounter -S5331XD Traumatic rupture of right ulnar collateral ligament, subsequent encounter -S5331XS Traumatic rupture of right ulnar collateral ligament, sequela -S5332XA Traumatic rupture of left ulnar collateral ligament, initial encounter -S5332XD Traumatic rupture of left ulnar collateral ligament, subsequent encounter -S5332XS Traumatic rupture of left ulnar collateral ligament, sequela -S53401A Unspecified sprain of right elbow, initial encounter -S53401D Unspecified sprain of right elbow, subsequent encounter -S53401S Unspecified sprain of right elbow, sequela -S53402A Unspecified sprain of left elbow, initial encounter -S53402D Unspecified sprain of left elbow, subsequent encounter -S53402S Unspecified sprain of left elbow, sequela -S53409A Unspecified sprain of unspecified elbow, initial encounter -S53409D Unspecified sprain of unspecified elbow, subsequent encounter -S53409S Unspecified sprain of unspecified elbow, sequela -S53411A Radiohumeral (joint) sprain of right elbow, initial encounter -S53411D Radiohumeral (joint) sprain of right elbow, subsequent encounter -S53411S Radiohumeral (joint) sprain of right elbow, sequela -S53412A Radiohumeral (joint) sprain of left elbow, initial encounter -S53412D Radiohumeral (joint) sprain of left elbow, subsequent encounter -S53412S Radiohumeral (joint) sprain of left elbow, sequela -S53419A Radiohumeral (joint) sprain of unspecified elbow, initial encounter -S53419D Radiohumeral (joint) sprain of unspecified elbow, subsequent encounter -S53419S Radiohumeral (joint) sprain of unspecified elbow, sequela -S53421A Ulnohumeral (joint) sprain of right elbow, initial encounter -S53421D Ulnohumeral (joint) sprain of right elbow, subsequent encounter -S53421S Ulnohumeral (joint) sprain of right elbow, sequela -S53422A Ulnohumeral (joint) sprain of left elbow, initial encounter -S53422D Ulnohumeral (joint) sprain of left elbow, subsequent encounter -S53422S Ulnohumeral (joint) sprain of left elbow, sequela -S53429A Ulnohumeral (joint) sprain of unspecified elbow, initial encounter -S53429D Ulnohumeral (joint) sprain of unspecified elbow, subsequent encounter -S53429S Ulnohumeral (joint) sprain of unspecified elbow, sequela -S53431A Radial collateral ligament sprain of right elbow, initial encounter -S53431D Radial collateral ligament sprain of right elbow, subsequent encounter -S53431S Radial collateral ligament sprain of right elbow, sequela -S53432A Radial collateral ligament sprain of left elbow, initial encounter -S53432D Radial collateral ligament sprain of left elbow, subsequent encounter -S53432S Radial collateral ligament sprain of left elbow, sequela -S53439A Radial collateral ligament sprain of unspecified elbow, initial encounter -S53439D Radial collateral ligament sprain of unspecified elbow, subsequent encounter -S53439S Radial collateral ligament sprain of unspecified elbow, sequela -S53441A Ulnar collateral ligament sprain of right elbow, initial encounter -S53441D Ulnar collateral ligament sprain of right elbow, subsequent encounter -S53441S Ulnar collateral ligament sprain of right elbow, sequela -S53442A Ulnar collateral ligament sprain of left elbow, initial encounter -S53442D Ulnar collateral ligament sprain of left elbow, subsequent encounter -S53442S Ulnar collateral ligament sprain of left elbow, sequela -S53449A Ulnar collateral ligament sprain of unspecified elbow, initial encounter -S53449D Ulnar collateral ligament sprain of unspecified elbow, subsequent encounter -S53449S Ulnar collateral ligament sprain of unspecified elbow, sequela -S53491A Other sprain of right elbow, initial encounter -S53491D Other sprain of right elbow, subsequent encounter -S53491S Other sprain of right elbow, sequela -S53492A Other sprain of left elbow, initial encounter -S53492D Other sprain of left elbow, subsequent encounter -S53492S Other sprain of left elbow, sequela -S53499A Other sprain of unspecified elbow, initial encounter -S53499D Other sprain of unspecified elbow, subsequent encounter -S53499S Other sprain of unspecified elbow, sequela -S5400XA Injury of ulnar nerve at forearm level, unspecified arm, initial encounter -S5400XD Injury of ulnar nerve at forearm level, unspecified arm, subsequent encounter -S5400XS Injury of ulnar nerve at forearm level, unspecified arm, sequela -S5401XA Injury of ulnar nerve at forearm level, right arm, initial encounter -S5401XD Injury of ulnar nerve at forearm level, right arm, subsequent encounter -S5401XS Injury of ulnar nerve at forearm level, right arm, sequela -S5402XA Injury of ulnar nerve at forearm level, left arm, initial encounter -S5402XD Injury of ulnar nerve at forearm level, left arm, subsequent encounter -S5402XS Injury of ulnar nerve at forearm level, left arm, sequela -S5410XA Injury of median nerve at forearm level, unspecified arm, initial encounter -S5410XD Injury of median nerve at forearm level, unspecified arm, subsequent encounter -S5410XS Injury of median nerve at forearm level, unspecified arm, sequela -S5411XA Injury of median nerve at forearm level, right arm, initial encounter -S5411XD Injury of median nerve at forearm level, right arm, subsequent encounter -S5411XS Injury of median nerve at forearm level, right arm, sequela -S5412XA Injury of median nerve at forearm level, left arm, initial encounter -S5412XD Injury of median nerve at forearm level, left arm, subsequent encounter -S5412XS Injury of median nerve at forearm level, left arm, sequela -S5420XA Injury of radial nerve at forearm level, unspecified arm, initial encounter -S5420XD Injury of radial nerve at forearm level, unspecified arm, subsequent encounter -S5420XS Injury of radial nerve at forearm level, unspecified arm, sequela -S5421XA Injury of radial nerve at forearm level, right arm, initial encounter -S5421XD Injury of radial nerve at forearm level, right arm, subsequent encounter -S5421XS Injury of radial nerve at forearm level, right arm, sequela -S5422XA Injury of radial nerve at forearm level, left arm, initial encounter -S5422XD Injury of radial nerve at forearm level, left arm, subsequent encounter -S5422XS Injury of radial nerve at forearm level, left arm, sequela -S5430XA Injury of cutaneous sensory nerve at forearm level, unspecified arm, initial encounter -S5430XD Injury of cutaneous sensory nerve at forearm level, unspecified arm, subsequent encounter -S5430XS Injury of cutaneous sensory nerve at forearm level, unspecified arm, sequela -S5431XA Injury of cutaneous sensory nerve at forearm level, right arm, initial encounter -S5431XD Injury of cutaneous sensory nerve at forearm level, right arm, subsequent encounter -S5431XS Injury of cutaneous sensory nerve at forearm level, right arm, sequela -S5432XA Injury of cutaneous sensory nerve at forearm level, left arm, initial encounter -S5432XD Injury of cutaneous sensory nerve at forearm level, left arm, subsequent encounter -S5432XS Injury of cutaneous sensory nerve at forearm level, left arm, sequela -S548X1A Injury of other nerves at forearm level, right arm, initial encounter -S548X1D Injury of other nerves at forearm level, right arm, subsequent encounter -S548X1S Injury of other nerves at forearm level, right arm, sequela -S548X2A Injury of other nerves at forearm level, left arm, initial encounter -S548X2D Injury of other nerves at forearm level, left arm, subsequent encounter -S548X2S Injury of other nerves at forearm level, left arm, sequela -S548X9A Injury of other nerves at forearm level, unspecified arm, initial encounter -S548X9D Injury of other nerves at forearm level, unspecified arm, subsequent encounter -S548X9S Injury of other nerves at forearm level, unspecified arm, sequela -S5490XA Injury of unspecified nerve at forearm level, unspecified arm, initial encounter -S5490XD Injury of unspecified nerve at forearm level, unspecified arm, subsequent encounter -S5490XS Injury of unspecified nerve at forearm level, unspecified arm, sequela -S5491XA Injury of unspecified nerve at forearm level, right arm, initial encounter -S5491XD Injury of unspecified nerve at forearm level, right arm, subsequent encounter -S5491XS Injury of unspecified nerve at forearm level, right arm, sequela -S5492XA Injury of unspecified nerve at forearm level, left arm, initial encounter -S5492XD Injury of unspecified nerve at forearm level, left arm, subsequent encounter -S5492XS Injury of unspecified nerve at forearm level, left arm, sequela -S55001A Unspecified injury of ulnar artery at forearm level, right arm, initial encounter -S55001D Unspecified injury of ulnar artery at forearm level, right arm, subsequent encounter -S55001S Unspecified injury of ulnar artery at forearm level, right arm, sequela -S55002A Unspecified injury of ulnar artery at forearm level, left arm, initial encounter -S55002D Unspecified injury of ulnar artery at forearm level, left arm, subsequent encounter -S55002S Unspecified injury of ulnar artery at forearm level, left arm, sequela -S55009A Unspecified injury of ulnar artery at forearm level, unspecified arm, initial encounter -S55009D Unspecified injury of ulnar artery at forearm level, unspecified arm, subsequent encounter -S55009S Unspecified injury of ulnar artery at forearm level, unspecified arm, sequela -S55011A Laceration of ulnar artery at forearm level, right arm, initial encounter -S55011D Laceration of ulnar artery at forearm level, right arm, subsequent encounter -S55011S Laceration of ulnar artery at forearm level, right arm, sequela -S55012A Laceration of ulnar artery at forearm level, left arm, initial encounter -S55012D Laceration of ulnar artery at forearm level, left arm, subsequent encounter -S55012S Laceration of ulnar artery at forearm level, left arm, sequela -S55019A Laceration of ulnar artery at forearm level, unspecified arm, initial encounter -S55019D Laceration of ulnar artery at forearm level, unspecified arm, subsequent encounter -S55019S Laceration of ulnar artery at forearm level, unspecified arm, sequela -S55091A Other specified injury of ulnar artery at forearm level, right arm, initial encounter -S55091D Other specified injury of ulnar artery at forearm level, right arm, subsequent encounter -S55091S Other specified injury of ulnar artery at forearm level, right arm, sequela -S55092A Other specified injury of ulnar artery at forearm level, left arm, initial encounter -S55092D Other specified injury of ulnar artery at forearm level, left arm, subsequent encounter -S55092S Other specified injury of ulnar artery at forearm level, left arm, sequela -S55099A Other specified injury of ulnar artery at forearm level, unspecified arm, initial encounter -S55099D Other specified injury of ulnar artery at forearm level, unspecified arm, subsequent encounter -S55099S Other specified injury of ulnar artery at forearm level, unspecified arm, sequela -S55101A Unspecified injury of radial artery at forearm level, right arm, initial encounter -S55101D Unspecified injury of radial artery at forearm level, right arm, subsequent encounter -S55101S Unspecified injury of radial artery at forearm level, right arm, sequela -S55102A Unspecified injury of radial artery at forearm level, left arm, initial encounter -S55102D Unspecified injury of radial artery at forearm level, left arm, subsequent encounter -S55102S Unspecified injury of radial artery at forearm level, left arm, sequela -S55109A Unspecified injury of radial artery at forearm level, unspecified arm, initial encounter -S55109D Unspecified injury of radial artery at forearm level, unspecified arm, subsequent encounter -S55109S Unspecified injury of radial artery at forearm level, unspecified arm, sequela -S55111A Laceration of radial artery at forearm level, right arm, initial encounter -S55111D Laceration of radial artery at forearm level, right arm, subsequent encounter -S55111S Laceration of radial artery at forearm level, right arm, sequela -S55112A Laceration of radial artery at forearm level, left arm, initial encounter -S55112D Laceration of radial artery at forearm level, left arm, subsequent encounter -S55112S Laceration of radial artery at forearm level, left arm, sequela -S55119A Laceration of radial artery at forearm level, unspecified arm, initial encounter -S55119D Laceration of radial artery at forearm level, unspecified arm, subsequent encounter -S55119S Laceration of radial artery at forearm level, unspecified arm, sequela -S55191A Other specified injury of radial artery at forearm level, right arm, initial encounter -S55191D Other specified injury of radial artery at forearm level, right arm, subsequent encounter -S55191S Other specified injury of radial artery at forearm level, right arm, sequela -S55192A Other specified injury of radial artery at forearm level, left arm, initial encounter -S55192D Other specified injury of radial artery at forearm level, left arm, subsequent encounter -S55192S Other specified injury of radial artery at forearm level, left arm, sequela -S55199A Other specified injury of radial artery at forearm level, unspecified arm, initial encounter -S55199D Other specified injury of radial artery at forearm level, unspecified arm, subsequent encounter -S55199S Other specified injury of radial artery at forearm level, unspecified arm, sequela -S55201A Unspecified injury of vein at forearm level, right arm, initial encounter -S55201D Unspecified injury of vein at forearm level, right arm, subsequent encounter -S55201S Unspecified injury of vein at forearm level, right arm, sequela -S55202A Unspecified injury of vein at forearm level, left arm, initial encounter -S55202D Unspecified injury of vein at forearm level, left arm, subsequent encounter -S55202S Unspecified injury of vein at forearm level, left arm, sequela -S55209A Unspecified injury of vein at forearm level, unspecified arm, initial encounter -S55209D Unspecified injury of vein at forearm level, unspecified arm, subsequent encounter -S55209S Unspecified injury of vein at forearm level, unspecified arm, sequela -S55211A Laceration of vein at forearm level, right arm, initial encounter -S55211D Laceration of vein at forearm level, right arm, subsequent encounter -S55211S Laceration of vein at forearm level, right arm, sequela -S55212A Laceration of vein at forearm level, left arm, initial encounter -S55212D Laceration of vein at forearm level, left arm, subsequent encounter -S55212S Laceration of vein at forearm level, left arm, sequela -S55219A Laceration of vein at forearm level, unspecified arm, initial encounter -S55219D Laceration of vein at forearm level, unspecified arm, subsequent encounter -S55219S Laceration of vein at forearm level, unspecified arm, sequela -S55291A Other specified injury of vein at forearm level, right arm, initial encounter -S55291D Other specified injury of vein at forearm level, right arm, subsequent encounter -S55291S Other specified injury of vein at forearm level, right arm, sequela -S55292A Other specified injury of vein at forearm level, left arm, initial encounter -S55292D Other specified injury of vein at forearm level, left arm, subsequent encounter -S55292S Other specified injury of vein at forearm level, left arm, sequela -S55299A Other specified injury of vein at forearm level, unspecified arm, initial encounter -S55299D Other specified injury of vein at forearm level, unspecified arm, subsequent encounter -S55299S Other specified injury of vein at forearm level, unspecified arm, sequela -S55801A Unspecified injury of other blood vessels at forearm level, right arm, initial encounter -S55801D Unspecified injury of other blood vessels at forearm level, right arm, subsequent encounter -S55801S Unspecified injury of other blood vessels at forearm level, right arm, sequela -S55802A Unspecified injury of other blood vessels at forearm level, left arm, initial encounter -S55802D Unspecified injury of other blood vessels at forearm level, left arm, subsequent encounter -S55802S Unspecified injury of other blood vessels at forearm level, left arm, sequela -S55809A Unspecified injury of other blood vessels at forearm level, unspecified arm, initial encounter -S55809D Unspecified injury of other blood vessels at forearm level, unspecified arm, subsequent encounter -S55809S Unspecified injury of other blood vessels at forearm level, unspecified arm, sequela -S55811A Laceration of other blood vessels at forearm level, right arm, initial encounter -S55811D Laceration of other blood vessels at forearm level, right arm, subsequent encounter -S55811S Laceration of other blood vessels at forearm level, right arm, sequela -S55812A Laceration of other blood vessels at forearm level, left arm, initial encounter -S55812D Laceration of other blood vessels at forearm level, left arm, subsequent encounter -S55812S Laceration of other blood vessels at forearm level, left arm, sequela -S55819A Laceration of other blood vessels at forearm level, unspecified arm, initial encounter -S55819D Laceration of other blood vessels at forearm level, unspecified arm, subsequent encounter -S55819S Laceration of other blood vessels at forearm level, unspecified arm, sequela -S55891A Other specified injury of other blood vessels at forearm level, right arm, initial encounter -S55891D Other specified injury of other blood vessels at forearm level, right arm, subsequent encounter -S55891S Other specified injury of other blood vessels at forearm level, right arm, sequela -S55892A Other specified injury of other blood vessels at forearm level, left arm, initial encounter -S55892D Other specified injury of other blood vessels at forearm level, left arm, subsequent encounter -S55892S Other specified injury of other blood vessels at forearm level, left arm, sequela -S55899A Other specified injury of other blood vessels at forearm level, unspecified arm, initial encounter -S55899D Other specified injury of other blood vessels at forearm level, unspecified arm, subsequent encounter -S55899S Other specified injury of other blood vessels at forearm level, unspecified arm, sequela -S55901A Unspecified injury of unspecified blood vessel at forearm level, right arm, initial encounter -S55901D Unspecified injury of unspecified blood vessel at forearm level, right arm, subsequent encounter -S55901S Unspecified injury of unspecified blood vessel at forearm level, right arm, sequela -S55902A Unspecified injury of unspecified blood vessel at forearm level, left arm, initial encounter -S55902D Unspecified injury of unspecified blood vessel at forearm level, left arm, subsequent encounter -S55902S Unspecified injury of unspecified blood vessel at forearm level, left arm, sequela -S55909A Unspecified injury of unspecified blood vessel at forearm level, unspecified arm, initial encounter -S55909D Unspecified injury of unspecified blood vessel at forearm level, unspecified arm, subsequent encounter -S55909S Unspecified injury of unspecified blood vessel at forearm level, unspecified arm, sequela -S55911A Laceration of unspecified blood vessel at forearm level, right arm, initial encounter -S55911D Laceration of unspecified blood vessel at forearm level, right arm, subsequent encounter -S55911S Laceration of unspecified blood vessel at forearm level, right arm, sequela -S55912A Laceration of unspecified blood vessel at forearm level, left arm, initial encounter -S55912D Laceration of unspecified blood vessel at forearm level, left arm, subsequent encounter -S55912S Laceration of unspecified blood vessel at forearm level, left arm, sequela -S55919A Laceration of unspecified blood vessel at forearm level, unspecified arm, initial encounter -S55919D Laceration of unspecified blood vessel at forearm level, unspecified arm, subsequent encounter -S55919S Laceration of unspecified blood vessel at forearm level, unspecified arm, sequela -S55991A Other specified injury of unspecified blood vessel at forearm level, right arm, initial encounter -S55991D Other specified injury of unspecified blood vessel at forearm level, right arm, subsequent encounter -S55991S Other specified injury of unspecified blood vessel at forearm level, right arm, sequela -S55992A Other specified injury of unspecified blood vessel at forearm level, left arm, initial encounter -S55992D Other specified injury of unspecified blood vessel at forearm level, left arm, subsequent encounter -S55992S Other specified injury of unspecified blood vessel at forearm level, left arm, sequela -S55999A Other specified injury of unspecified blood vessel at forearm level, unspecified arm, initial encounter -S55999D Other specified injury of unspecified blood vessel at forearm level, unspecified arm, subsequent encounter -S55999S Other specified injury of unspecified blood vessel at forearm level, unspecified arm, sequela -S56001A Unspecified injury of flexor muscle, fascia and tendon of right thumb at forearm level, initial encounter -S56001D Unspecified injury of flexor muscle, fascia and tendon of right thumb at forearm level, subsequent encounter -S56001S Unspecified injury of flexor muscle, fascia and tendon of right thumb at forearm level, sequela -S56002A Unspecified injury of flexor muscle, fascia and tendon of left thumb at forearm level, initial encounter -S56002D Unspecified injury of flexor muscle, fascia and tendon of left thumb at forearm level, subsequent encounter -S56002S Unspecified injury of flexor muscle, fascia and tendon of left thumb at forearm level, sequela -S56009A Unspecified injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, initial encounter -S56009D Unspecified injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, subsequent encounter -S56009S Unspecified injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, sequela -S56011A Strain of flexor muscle, fascia and tendon of right thumb at forearm level, initial encounter -S56011D Strain of flexor muscle, fascia and tendon of right thumb at forearm level, subsequent encounter -S56011S Strain of flexor muscle, fascia and tendon of right thumb at forearm level, sequela -S56012A Strain of flexor muscle, fascia and tendon of left thumb at forearm level, initial encounter -S56012D Strain of flexor muscle, fascia and tendon of left thumb at forearm level, subsequent encounter -S56012S Strain of flexor muscle, fascia and tendon of left thumb at forearm level, sequela -S56019A Strain of flexor muscle, fascia and tendon of unspecified thumb at forearm level, initial encounter -S56019D Strain of flexor muscle, fascia and tendon of unspecified thumb at forearm level, subsequent encounter -S56019S Strain of flexor muscle, fascia and tendon of unspecified thumb at forearm level, sequela -S56021A Laceration of flexor muscle, fascia and tendon of right thumb at forearm level, initial encounter -S56021D Laceration of flexor muscle, fascia and tendon of right thumb at forearm level, subsequent encounter -S56021S Laceration of flexor muscle, fascia and tendon of right thumb at forearm level, sequela -S56022A Laceration of flexor muscle, fascia and tendon of left thumb at forearm level, initial encounter -S56022D Laceration of flexor muscle, fascia and tendon of left thumb at forearm level, subsequent encounter -S56022S Laceration of flexor muscle, fascia and tendon of left thumb at forearm level, sequela -S56029A Laceration of flexor muscle, fascia and tendon of unspecified thumb at forearm level, initial encounter -S56029D Laceration of flexor muscle, fascia and tendon of unspecified thumb at forearm level, subsequent encounter -S56029S Laceration of flexor muscle, fascia and tendon of unspecified thumb at forearm level, sequela -S56091A Other injury of flexor muscle, fascia and tendon of right thumb at forearm level, initial encounter -S56091D Other injury of flexor muscle, fascia and tendon of right thumb at forearm level, subsequent encounter -S56091S Other injury of flexor muscle, fascia and tendon of right thumb at forearm level, sequela -S56092A Other injury of flexor muscle, fascia and tendon of left thumb at forearm level, initial encounter -S56092D Other injury of flexor muscle, fascia and tendon of left thumb at forearm level, subsequent encounter -S56092S Other injury of flexor muscle, fascia and tendon of left thumb at forearm level, sequela -S56099A Other injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, initial encounter -S56099D Other injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, subsequent encounter -S56099S Other injury of flexor muscle, fascia and tendon of unspecified thumb at forearm level, sequela -S56101A Unspecified injury of flexor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56101D Unspecified injury of flexor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56101S Unspecified injury of flexor muscle, fascia and tendon of right index finger at forearm level, sequela -S56102A Unspecified injury of flexor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56102D Unspecified injury of flexor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56102S Unspecified injury of flexor muscle, fascia and tendon of left index finger at forearm level, sequela -S56103A Unspecified injury of flexor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56103D Unspecified injury of flexor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56103S Unspecified injury of flexor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56104A Unspecified injury of flexor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56104D Unspecified injury of flexor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56104S Unspecified injury of flexor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56105A Unspecified injury of flexor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56105D Unspecified injury of flexor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56105S Unspecified injury of flexor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56106A Unspecified injury of flexor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56106D Unspecified injury of flexor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56106S Unspecified injury of flexor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56107A Unspecified injury of flexor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56107D Unspecified injury of flexor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56107S Unspecified injury of flexor muscle, fascia and tendon of right little finger at forearm level, sequela -S56108A Unspecified injury of flexor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56108D Unspecified injury of flexor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56108S Unspecified injury of flexor muscle, fascia and tendon of left little finger at forearm level, sequela -S56109A Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56109D Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56109S Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56111A Strain of flexor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56111D Strain of flexor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56111S Strain of flexor muscle, fascia and tendon of right index finger at forearm level, sequela -S56112A Strain of flexor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56112D Strain of flexor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56112S Strain of flexor muscle, fascia and tendon of left index finger at forearm level, sequela -S56113A Strain of flexor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56113D Strain of flexor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56113S Strain of flexor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56114A Strain of flexor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56114D Strain of flexor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56114S Strain of flexor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56115A Strain of flexor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56115D Strain of flexor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56115S Strain of flexor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56116A Strain of flexor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56116D Strain of flexor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56116S Strain of flexor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56117A Strain of flexor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56117D Strain of flexor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56117S Strain of flexor muscle, fascia and tendon of right little finger at forearm level, sequela -S56118A Strain of flexor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56118D Strain of flexor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56118S Strain of flexor muscle, fascia and tendon of left little finger at forearm level, sequela -S56119A Strain of flexor muscle, fascia and tendon of finger of unspecified finger at forearm level, initial encounter -S56119D Strain of flexor muscle, fascia and tendon of finger of unspecified finger at forearm level, subsequent encounter -S56119S Strain of flexor muscle, fascia and tendon of finger of unspecified finger at forearm level, sequela -S56121A Laceration of flexor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56121D Laceration of flexor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56121S Laceration of flexor muscle, fascia and tendon of right index finger at forearm level, sequela -S56122A Laceration of flexor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56122D Laceration of flexor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56122S Laceration of flexor muscle, fascia and tendon of left index finger at forearm level, sequela -S56123A Laceration of flexor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56123D Laceration of flexor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56123S Laceration of flexor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56124A Laceration of flexor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56124D Laceration of flexor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56124S Laceration of flexor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56125A Laceration of flexor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56125D Laceration of flexor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56125S Laceration of flexor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56126A Laceration of flexor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56126D Laceration of flexor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56126S Laceration of flexor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56127A Laceration of flexor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56127D Laceration of flexor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56127S Laceration of flexor muscle, fascia and tendon of right little finger at forearm level, sequela -S56128A Laceration of flexor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56128D Laceration of flexor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56128S Laceration of flexor muscle, fascia and tendon of left little finger at forearm level, sequela -S56129A Laceration of flexor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56129D Laceration of flexor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56129S Laceration of flexor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56191A Other injury of flexor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56191D Other injury of flexor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56191S Other injury of flexor muscle, fascia and tendon of right index finger at forearm level, sequela -S56192A Other injury of flexor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56192D Other injury of flexor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56192S Other injury of flexor muscle, fascia and tendon of left index finger at forearm level, sequela -S56193A Other injury of flexor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56193D Other injury of flexor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56193S Other injury of flexor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56194A Other injury of flexor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56194D Other injury of flexor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56194S Other injury of flexor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56195A Other injury of flexor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56195D Other injury of flexor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56195S Other injury of flexor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56196A Other injury of flexor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56196D Other injury of flexor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56196S Other injury of flexor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56197A Other injury of flexor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56197D Other injury of flexor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56197S Other injury of flexor muscle, fascia and tendon of right little finger at forearm level, sequela -S56198A Other injury of flexor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56198D Other injury of flexor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56198S Other injury of flexor muscle, fascia and tendon of left little finger at forearm level, sequela -S56199A Other injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56199D Other injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56199S Other injury of flexor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56201A Unspecified injury of other flexor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56201D Unspecified injury of other flexor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56201S Unspecified injury of other flexor muscle, fascia and tendon at forearm level, right arm, sequela -S56202A Unspecified injury of other flexor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56202D Unspecified injury of other flexor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56202S Unspecified injury of other flexor muscle, fascia and tendon at forearm level, left arm, sequela -S56209A Unspecified injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56209D Unspecified injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56209S Unspecified injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56211A Strain of other flexor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56211D Strain of other flexor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56211S Strain of other flexor muscle, fascia and tendon at forearm level, right arm, sequela -S56212A Strain of other flexor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56212D Strain of other flexor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56212S Strain of other flexor muscle, fascia and tendon at forearm level, left arm, sequela -S56219A Strain of other flexor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56219D Strain of other flexor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56219S Strain of other flexor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56221A Laceration of other flexor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56221D Laceration of other flexor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56221S Laceration of other flexor muscle, fascia and tendon at forearm level, right arm, sequela -S56222A Laceration of other flexor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56222D Laceration of other flexor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56222S Laceration of other flexor muscle, fascia and tendon at forearm level, left arm, sequela -S56229A Laceration of other flexor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56229D Laceration of other flexor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56229S Laceration of other flexor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56291A Other injury of other flexor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56291D Other injury of other flexor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56291S Other injury of other flexor muscle, fascia and tendon at forearm level, right arm, sequela -S56292A Other injury of other flexor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56292D Other injury of other flexor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56292S Other injury of other flexor muscle, fascia and tendon at forearm level, left arm, sequela -S56299A Other injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56299D Other injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56299S Other injury of other flexor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56301A Unspecified injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, initial encounter -S56301D Unspecified injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, subsequent encounter -S56301S Unspecified injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, sequela -S56302A Unspecified injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, initial encounter -S56302D Unspecified injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, subsequent encounter -S56302S Unspecified injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, sequela -S56309A Unspecified injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, initial encounter -S56309D Unspecified injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, subsequent encounter -S56309S Unspecified injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, sequela -S56311A Strain of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, initial encounter -S56311D Strain of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, subsequent encounter -S56311S Strain of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, sequela -S56312A Strain of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, initial encounter -S56312D Strain of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, subsequent encounter -S56312S Strain of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, sequela -S56319A Strain of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, initial encounter -S56319D Strain of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, subsequent encounter -S56319S Strain of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, sequela -S56321A Laceration of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, initial encounter -S56321D Laceration of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, subsequent encounter -S56321S Laceration of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, sequela -S56322A Laceration of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, initial encounter -S56322D Laceration of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, subsequent encounter -S56322S Laceration of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, sequela -S56329A Laceration of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, initial encounter -S56329D Laceration of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, subsequent encounter -S56329S Laceration of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, sequela -S56391A Other injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, initial encounter -S56391D Other injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, subsequent encounter -S56391S Other injury of extensor or abductor muscles, fascia and tendons of right thumb at forearm level, sequela -S56392A Other injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, initial encounter -S56392D Other injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, subsequent encounter -S56392S Other injury of extensor or abductor muscles, fascia and tendons of left thumb at forearm level, sequela -S56399A Other injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, initial encounter -S56399D Other injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, subsequent encounter -S56399S Other injury of extensor or abductor muscles, fascia and tendons of unspecified thumb at forearm level, sequela -S56401A Unspecified injury of extensor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56401D Unspecified injury of extensor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56401S Unspecified injury of extensor muscle, fascia and tendon of right index finger at forearm level, sequela -S56402A Unspecified injury of extensor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56402D Unspecified injury of extensor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56402S Unspecified injury of extensor muscle, fascia and tendon of left index finger at forearm level, sequela -S56403A Unspecified injury of extensor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56403D Unspecified injury of extensor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56403S Unspecified injury of extensor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56404A Unspecified injury of extensor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56404D Unspecified injury of extensor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56404S Unspecified injury of extensor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56405A Unspecified injury of extensor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56405D Unspecified injury of extensor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56405S Unspecified injury of extensor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56406A Unspecified injury of extensor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56406D Unspecified injury of extensor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56406S Unspecified injury of extensor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56407A Unspecified injury of extensor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56407D Unspecified injury of extensor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56407S Unspecified injury of extensor muscle, fascia and tendon of right little finger at forearm level, sequela -S56408A Unspecified injury of extensor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56408D Unspecified injury of extensor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56408S Unspecified injury of extensor muscle, fascia and tendon of left little finger at forearm level, sequela -S56409A Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56409D Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56409S Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56411A Strain of extensor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56411D Strain of extensor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56411S Strain of extensor muscle, fascia and tendon of right index finger at forearm level, sequela -S56412A Strain of extensor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56412D Strain of extensor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56412S Strain of extensor muscle, fascia and tendon of left index finger at forearm level, sequela -S56413A Strain of extensor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56413D Strain of extensor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56413S Strain of extensor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56414A Strain of extensor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56414D Strain of extensor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56414S Strain of extensor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56415A Strain of extensor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56415D Strain of extensor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56415S Strain of extensor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56416A Strain of extensor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56416D Strain of extensor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56416S Strain of extensor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56417A Strain of extensor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56417D Strain of extensor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56417S Strain of extensor muscle, fascia and tendon of right little finger at forearm level, sequela -S56418A Strain of extensor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56418D Strain of extensor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56418S Strain of extensor muscle, fascia and tendon of left little finger at forearm level, sequela -S56419A Strain of extensor muscle, fascia and tendon of finger, unspecified finger at forearm level, initial encounter -S56419D Strain of extensor muscle, fascia and tendon of finger, unspecified finger at forearm level, subsequent encounter -S56419S Strain of extensor muscle, fascia and tendon of finger, unspecified finger at forearm level, sequela -S56421A Laceration of extensor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56421D Laceration of extensor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56421S Laceration of extensor muscle, fascia and tendon of right index finger at forearm level, sequela -S56422A Laceration of extensor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56422D Laceration of extensor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56422S Laceration of extensor muscle, fascia and tendon of left index finger at forearm level, sequela -S56423A Laceration of extensor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56423D Laceration of extensor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56423S Laceration of extensor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56424A Laceration of extensor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56424D Laceration of extensor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56424S Laceration of extensor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56425A Laceration of extensor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56425D Laceration of extensor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56425S Laceration of extensor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56426A Laceration of extensor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56426D Laceration of extensor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56426S Laceration of extensor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56427A Laceration of extensor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56427D Laceration of extensor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56427S Laceration of extensor muscle, fascia and tendon of right little finger at forearm level, sequela -S56428A Laceration of extensor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56428D Laceration of extensor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56428S Laceration of extensor muscle, fascia and tendon of left little finger at forearm level, sequela -S56429A Laceration of extensor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56429D Laceration of extensor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56429S Laceration of extensor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56491A Other injury of extensor muscle, fascia and tendon of right index finger at forearm level, initial encounter -S56491D Other injury of extensor muscle, fascia and tendon of right index finger at forearm level, subsequent encounter -S56491S Other injury of extensor muscle, fascia and tendon of right index finger at forearm level, sequela -S56492A Other injury of extensor muscle, fascia and tendon of left index finger at forearm level, initial encounter -S56492D Other injury of extensor muscle, fascia and tendon of left index finger at forearm level, subsequent encounter -S56492S Other injury of extensor muscle, fascia and tendon of left index finger at forearm level, sequela -S56493A Other injury of extensor muscle, fascia and tendon of right middle finger at forearm level, initial encounter -S56493D Other injury of extensor muscle, fascia and tendon of right middle finger at forearm level, subsequent encounter -S56493S Other injury of extensor muscle, fascia and tendon of right middle finger at forearm level, sequela -S56494A Other injury of extensor muscle, fascia and tendon of left middle finger at forearm level, initial encounter -S56494D Other injury of extensor muscle, fascia and tendon of left middle finger at forearm level, subsequent encounter -S56494S Other injury of extensor muscle, fascia and tendon of left middle finger at forearm level, sequela -S56495A Other injury of extensor muscle, fascia and tendon of right ring finger at forearm level, initial encounter -S56495D Other injury of extensor muscle, fascia and tendon of right ring finger at forearm level, subsequent encounter -S56495S Other injury of extensor muscle, fascia and tendon of right ring finger at forearm level, sequela -S56496A Other injury of extensor muscle, fascia and tendon of left ring finger at forearm level, initial encounter -S56496D Other injury of extensor muscle, fascia and tendon of left ring finger at forearm level, subsequent encounter -S56496S Other injury of extensor muscle, fascia and tendon of left ring finger at forearm level, sequela -S56497A Other injury of extensor muscle, fascia and tendon of right little finger at forearm level, initial encounter -S56497D Other injury of extensor muscle, fascia and tendon of right little finger at forearm level, subsequent encounter -S56497S Other injury of extensor muscle, fascia and tendon of right little finger at forearm level, sequela -S56498A Other injury of extensor muscle, fascia and tendon of left little finger at forearm level, initial encounter -S56498D Other injury of extensor muscle, fascia and tendon of left little finger at forearm level, subsequent encounter -S56498S Other injury of extensor muscle, fascia and tendon of left little finger at forearm level, sequela -S56499A Other injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, initial encounter -S56499D Other injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, subsequent encounter -S56499S Other injury of extensor muscle, fascia and tendon of unspecified finger at forearm level, sequela -S56501A Unspecified injury of other extensor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56501D Unspecified injury of other extensor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56501S Unspecified injury of other extensor muscle, fascia and tendon at forearm level, right arm, sequela -S56502A Unspecified injury of other extensor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56502D Unspecified injury of other extensor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56502S Unspecified injury of other extensor muscle, fascia and tendon at forearm level, left arm, sequela -S56509A Unspecified injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56509D Unspecified injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56509S Unspecified injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56511A Strain of other extensor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56511D Strain of other extensor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56511S Strain of other extensor muscle, fascia and tendon at forearm level, right arm, sequela -S56512A Strain of other extensor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56512D Strain of other extensor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56512S Strain of other extensor muscle, fascia and tendon at forearm level, left arm, sequela -S56519A Strain of other extensor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56519D Strain of other extensor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56519S Strain of other extensor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56521A Laceration of other extensor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56521D Laceration of other extensor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56521S Laceration of other extensor muscle, fascia and tendon at forearm level, right arm, sequela -S56522A Laceration of other extensor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56522D Laceration of other extensor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56522S Laceration of other extensor muscle, fascia and tendon at forearm level, left arm, sequela -S56529A Laceration of other extensor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56529D Laceration of other extensor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56529S Laceration of other extensor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56591A Other injury of other extensor muscle, fascia and tendon at forearm level, right arm, initial encounter -S56591D Other injury of other extensor muscle, fascia and tendon at forearm level, right arm, subsequent encounter -S56591S Other injury of other extensor muscle, fascia and tendon at forearm level, right arm, sequela -S56592A Other injury of other extensor muscle, fascia and tendon at forearm level, left arm, initial encounter -S56592D Other injury of other extensor muscle, fascia and tendon at forearm level, left arm, subsequent encounter -S56592S Other injury of other extensor muscle, fascia and tendon at forearm level, left arm, sequela -S56599A Other injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, initial encounter -S56599D Other injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, subsequent encounter -S56599S Other injury of other extensor muscle, fascia and tendon at forearm level, unspecified arm, sequela -S56801A Unspecified injury of other muscles, fascia and tendons at forearm level, right arm, initial encounter -S56801D Unspecified injury of other muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56801S Unspecified injury of other muscles, fascia and tendons at forearm level, right arm, sequela -S56802A Unspecified injury of other muscles, fascia and tendons at forearm level, left arm, initial encounter -S56802D Unspecified injury of other muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56802S Unspecified injury of other muscles, fascia and tendons at forearm level, left arm, sequela -S56809A Unspecified injury of other muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56809D Unspecified injury of other muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56809S Unspecified injury of other muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56811A Strain of other muscles, fascia and tendons at forearm level, right arm, initial encounter -S56811D Strain of other muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56811S Strain of other muscles, fascia and tendons at forearm level, right arm, sequela -S56812A Strain of other muscles, fascia and tendons at forearm level, left arm, initial encounter -S56812D Strain of other muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56812S Strain of other muscles, fascia and tendons at forearm level, left arm, sequela -S56819A Strain of other muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56819D Strain of other muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56819S Strain of other muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56821A Laceration of other muscles, fascia and tendons at forearm level, right arm, initial encounter -S56821D Laceration of other muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56821S Laceration of other muscles, fascia and tendons at forearm level, right arm, sequela -S56822A Laceration of other muscles, fascia and tendons at forearm level, left arm, initial encounter -S56822D Laceration of other muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56822S Laceration of other muscles, fascia and tendons at forearm level, left arm, sequela -S56829A Laceration of other muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56829D Laceration of other muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56829S Laceration of other muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56891A Other injury of other muscles, fascia and tendons at forearm level, right arm, initial encounter -S56891D Other injury of other muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56891S Other injury of other muscles, fascia and tendons at forearm level, right arm, sequela -S56892A Other injury of other muscles, fascia and tendons at forearm level, left arm, initial encounter -S56892D Other injury of other muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56892S Other injury of other muscles, fascia and tendons at forearm level, left arm, sequela -S56899A Other injury of other muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56899D Other injury of other muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56899S Other injury of other muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56901A Unspecified injury of unspecified muscles, fascia and tendons at forearm level, right arm, initial encounter -S56901D Unspecified injury of unspecified muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56901S Unspecified injury of unspecified muscles, fascia and tendons at forearm level, right arm, sequela -S56902A Unspecified injury of unspecified muscles, fascia and tendons at forearm level, left arm, initial encounter -S56902D Unspecified injury of unspecified muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56902S Unspecified injury of unspecified muscles, fascia and tendons at forearm level, left arm, sequela -S56909A Unspecified injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56909D Unspecified injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56909S Unspecified injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56911A Strain of unspecified muscles, fascia and tendons at forearm level, right arm, initial encounter -S56911D Strain of unspecified muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56911S Strain of unspecified muscles, fascia and tendons at forearm level, right arm, sequela -S56912A Strain of unspecified muscles, fascia and tendons at forearm level, left arm, initial encounter -S56912D Strain of unspecified muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56912S Strain of unspecified muscles, fascia and tendons at forearm level, left arm, sequela -S56919A Strain of unspecified muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56919D Strain of unspecified muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56919S Strain of unspecified muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56921A Laceration of unspecified muscles, fascia and tendons at forearm level, right arm, initial encounter -S56921D Laceration of unspecified muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56921S Laceration of unspecified muscles, fascia and tendons at forearm level, right arm, sequela -S56922A Laceration of unspecified muscles, fascia and tendons at forearm level, left arm, initial encounter -S56922D Laceration of unspecified muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56922S Laceration of unspecified muscles, fascia and tendons at forearm level, left arm, sequela -S56929A Laceration of unspecified muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56929D Laceration of unspecified muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56929S Laceration of unspecified muscles, fascia and tendons at forearm level, unspecified arm, sequela -S56991A Other injury of unspecified muscles, fascia and tendons at forearm level, right arm, initial encounter -S56991D Other injury of unspecified muscles, fascia and tendons at forearm level, right arm, subsequent encounter -S56991S Other injury of unspecified muscles, fascia and tendons at forearm level, right arm, sequela -S56992A Other injury of unspecified muscles, fascia and tendons at forearm level, left arm, initial encounter -S56992D Other injury of unspecified muscles, fascia and tendons at forearm level, left arm, subsequent encounter -S56992S Other injury of unspecified muscles, fascia and tendons at forearm level, left arm, sequela -S56999A Other injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, initial encounter -S56999D Other injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, subsequent encounter -S56999S Other injury of unspecified muscles, fascia and tendons at forearm level, unspecified arm, sequela -S5700XA Crushing injury of unspecified elbow, initial encounter -S5700XD Crushing injury of unspecified elbow, subsequent encounter -S5700XS Crushing injury of unspecified elbow, sequela -S5701XA Crushing injury of right elbow, initial encounter -S5701XD Crushing injury of right elbow, subsequent encounter -S5701XS Crushing injury of right elbow, sequela -S5702XA Crushing injury of left elbow, initial encounter -S5702XD Crushing injury of left elbow, subsequent encounter -S5702XS Crushing injury of left elbow, sequela -S5780XA Crushing injury of unspecified forearm, initial encounter -S5780XD Crushing injury of unspecified forearm, subsequent encounter -S5780XS Crushing injury of unspecified forearm, sequela -S5781XA Crushing injury of right forearm, initial encounter -S5781XD Crushing injury of right forearm, subsequent encounter -S5781XS Crushing injury of right forearm, sequela -S5782XA Crushing injury of left forearm, initial encounter -S5782XD Crushing injury of left forearm, subsequent encounter -S5782XS Crushing injury of left forearm, sequela -S58011A Complete traumatic amputation at elbow level, right arm, initial encounter -S58011D Complete traumatic amputation at elbow level, right arm, subsequent encounter -S58011S Complete traumatic amputation at elbow level, right arm, sequela -S58012A Complete traumatic amputation at elbow level, left arm, initial encounter -S58012D Complete traumatic amputation at elbow level, left arm, subsequent encounter -S58012S Complete traumatic amputation at elbow level, left arm, sequela -S58019A Complete traumatic amputation at elbow level, unspecified arm, initial encounter -S58019D Complete traumatic amputation at elbow level, unspecified arm, subsequent encounter -S58019S Complete traumatic amputation at elbow level, unspecified arm, sequela -S58021A Partial traumatic amputation at elbow level, right arm, initial encounter -S58021D Partial traumatic amputation at elbow level, right arm, subsequent encounter -S58021S Partial traumatic amputation at elbow level, right arm, sequela -S58022A Partial traumatic amputation at elbow level, left arm, initial encounter -S58022D Partial traumatic amputation at elbow level, left arm, subsequent encounter -S58022S Partial traumatic amputation at elbow level, left arm, sequela -S58029A Partial traumatic amputation at elbow level, unspecified arm, initial encounter -S58029D Partial traumatic amputation at elbow level, unspecified arm, subsequent encounter -S58029S Partial traumatic amputation at elbow level, unspecified arm, sequela -S58111A Complete traumatic amputation at level between elbow and wrist, right arm, initial encounter -S58111D Complete traumatic amputation at level between elbow and wrist, right arm, subsequent encounter -S58111S Complete traumatic amputation at level between elbow and wrist, right arm, sequela -S58112A Complete traumatic amputation at level between elbow and wrist, left arm, initial encounter -S58112D Complete traumatic amputation at level between elbow and wrist, left arm, subsequent encounter -S58112S Complete traumatic amputation at level between elbow and wrist, left arm, sequela -S58119A Complete traumatic amputation at level between elbow and wrist, unspecified arm, initial encounter -S58119D Complete traumatic amputation at level between elbow and wrist, unspecified arm, subsequent encounter -S58119S Complete traumatic amputation at level between elbow and wrist, unspecified arm, sequela -S58121A Partial traumatic amputation at level between elbow and wrist, right arm, initial encounter -S58121D Partial traumatic amputation at level between elbow and wrist, right arm, subsequent encounter -S58121S Partial traumatic amputation at level between elbow and wrist, right arm, sequela -S58122A Partial traumatic amputation at level between elbow and wrist, left arm, initial encounter -S58122D Partial traumatic amputation at level between elbow and wrist, left arm, subsequent encounter -S58122S Partial traumatic amputation at level between elbow and wrist, left arm, sequela -S58129A Partial traumatic amputation at level between elbow and wrist, unspecified arm, initial encounter -S58129D Partial traumatic amputation at level between elbow and wrist, unspecified arm, subsequent encounter -S58129S Partial traumatic amputation at level between elbow and wrist, unspecified arm, sequela -S58911A Complete traumatic amputation of right forearm, level unspecified, initial encounter -S58911D Complete traumatic amputation of right forearm, level unspecified, subsequent encounter -S58911S Complete traumatic amputation of right forearm, level unspecified, sequela -S58912A Complete traumatic amputation of left forearm, level unspecified, initial encounter -S58912D Complete traumatic amputation of left forearm, level unspecified, subsequent encounter -S58912S Complete traumatic amputation of left forearm, level unspecified, sequela -S58919A Complete traumatic amputation of unspecified forearm, level unspecified, initial encounter -S58919D Complete traumatic amputation of unspecified forearm, level unspecified, subsequent encounter -S58919S Complete traumatic amputation of unspecified forearm, level unspecified, sequela -S58921A Partial traumatic amputation of right forearm, level unspecified, initial encounter -S58921D Partial traumatic amputation of right forearm, level unspecified, subsequent encounter -S58921S Partial traumatic amputation of right forearm, level unspecified, sequela -S58922A Partial traumatic amputation of left forearm, level unspecified, initial encounter -S58922D Partial traumatic amputation of left forearm, level unspecified, subsequent encounter -S58922S Partial traumatic amputation of left forearm, level unspecified, sequela -S58929A Partial traumatic amputation of unspecified forearm, level unspecified, initial encounter -S58929D Partial traumatic amputation of unspecified forearm, level unspecified, subsequent encounter -S58929S Partial traumatic amputation of unspecified forearm, level unspecified, sequela -S59001A Unspecified physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59001D Unspecified physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59001G Unspecified physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59001K Unspecified physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59001P Unspecified physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59001S Unspecified physeal fracture of lower end of ulna, right arm, sequela -S59002A Unspecified physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59002D Unspecified physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59002G Unspecified physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59002K Unspecified physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59002P Unspecified physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59002S Unspecified physeal fracture of lower end of ulna, left arm, sequela -S59009A Unspecified physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59009D Unspecified physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59009G Unspecified physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59009K Unspecified physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59009P Unspecified physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59009S Unspecified physeal fracture of lower end of ulna, unspecified arm, sequela -S59011A Salter-Harris Type I physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59011D Salter-Harris Type I physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59011G Salter-Harris Type I physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59011K Salter-Harris Type I physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59011P Salter-Harris Type I physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59011S Salter-Harris Type I physeal fracture of lower end of ulna, right arm, sequela -S59012A Salter-Harris Type I physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59012D Salter-Harris Type I physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59012G Salter-Harris Type I physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59012K Salter-Harris Type I physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59012P Salter-Harris Type I physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59012S Salter-Harris Type I physeal fracture of lower end of ulna, left arm, sequela -S59019A Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59019D Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59019G Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59019K Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59019P Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59019S Salter-Harris Type I physeal fracture of lower end of ulna, unspecified arm, sequela -S59021A Salter-Harris Type II physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59021D Salter-Harris Type II physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59021G Salter-Harris Type II physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59021K Salter-Harris Type II physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59021P Salter-Harris Type II physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59021S Salter-Harris Type II physeal fracture of lower end of ulna, right arm, sequela -S59022A Salter-Harris Type II physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59022D Salter-Harris Type II physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59022G Salter-Harris Type II physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59022K Salter-Harris Type II physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59022P Salter-Harris Type II physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59022S Salter-Harris Type II physeal fracture of lower end of ulna, left arm, sequela -S59029A Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59029D Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59029G Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59029K Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59029P Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59029S Salter-Harris Type II physeal fracture of lower end of ulna, unspecified arm, sequela -S59031A Salter-Harris Type III physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59031D Salter-Harris Type III physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59031G Salter-Harris Type III physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59031K Salter-Harris Type III physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59031P Salter-Harris Type III physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59031S Salter-Harris Type III physeal fracture of lower end of ulna, right arm, sequela -S59032A Salter-Harris Type III physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59032D Salter-Harris Type III physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59032G Salter-Harris Type III physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59032K Salter-Harris Type III physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59032P Salter-Harris Type III physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59032S Salter-Harris Type III physeal fracture of lower end of ulna, left arm, sequela -S59039A Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59039D Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59039G Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59039K Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59039P Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59039S Salter-Harris Type III physeal fracture of lower end of ulna, unspecified arm, sequela -S59041A Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59041D Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59041G Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59041K Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59041P Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59041S Salter-Harris Type IV physeal fracture of lower end of ulna, right arm, sequela -S59042A Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59042D Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59042G Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59042K Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59042P Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59042S Salter-Harris Type IV physeal fracture of lower end of ulna, left arm, sequela -S59049A Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59049D Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59049G Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59049K Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59049P Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59049S Salter-Harris Type IV physeal fracture of lower end of ulna, unspecified arm, sequela -S59091A Other physeal fracture of lower end of ulna, right arm, initial encounter for closed fracture -S59091D Other physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with routine healing -S59091G Other physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with delayed healing -S59091K Other physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with nonunion -S59091P Other physeal fracture of lower end of ulna, right arm, subsequent encounter for fracture with malunion -S59091S Other physeal fracture of lower end of ulna, right arm, sequela -S59092A Other physeal fracture of lower end of ulna, left arm, initial encounter for closed fracture -S59092D Other physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with routine healing -S59092G Other physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with delayed healing -S59092K Other physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with nonunion -S59092P Other physeal fracture of lower end of ulna, left arm, subsequent encounter for fracture with malunion -S59092S Other physeal fracture of lower end of ulna, left arm, sequela -S59099A Other physeal fracture of lower end of ulna, unspecified arm, initial encounter for closed fracture -S59099D Other physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with routine healing -S59099G Other physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with delayed healing -S59099K Other physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with nonunion -S59099P Other physeal fracture of lower end of ulna, unspecified arm, subsequent encounter for fracture with malunion -S59099S Other physeal fracture of lower end of ulna, unspecified arm, sequela -S59101A Unspecified physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59101D Unspecified physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59101G Unspecified physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59101K Unspecified physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59101P Unspecified physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59101S Unspecified physeal fracture of upper end of radius, right arm, sequela -S59102A Unspecified physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59102D Unspecified physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59102G Unspecified physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59102K Unspecified physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59102P Unspecified physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59102S Unspecified physeal fracture of upper end of radius, left arm, sequela -S59109A Unspecified physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59109D Unspecified physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59109G Unspecified physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59109K Unspecified physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59109P Unspecified physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59109S Unspecified physeal fracture of upper end of radius, unspecified arm, sequela -S59111A Salter-Harris Type I physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59111D Salter-Harris Type I physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59111G Salter-Harris Type I physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59111K Salter-Harris Type I physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59111P Salter-Harris Type I physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59111S Salter-Harris Type I physeal fracture of upper end of radius, right arm, sequela -S59112A Salter-Harris Type I physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59112D Salter-Harris Type I physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59112G Salter-Harris Type I physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59112K Salter-Harris Type I physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59112P Salter-Harris Type I physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59112S Salter-Harris Type I physeal fracture of upper end of radius, left arm, sequela -S59119A Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59119D Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59119G Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59119K Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59119P Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59119S Salter-Harris Type I physeal fracture of upper end of radius, unspecified arm, sequela -S59121A Salter-Harris Type II physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59121D Salter-Harris Type II physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59121G Salter-Harris Type II physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59121K Salter-Harris Type II physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59121P Salter-Harris Type II physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59121S Salter-Harris Type II physeal fracture of upper end of radius, right arm, sequela -S59122A Salter-Harris Type II physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59122D Salter-Harris Type II physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59122G Salter-Harris Type II physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59122K Salter-Harris Type II physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59122P Salter-Harris Type II physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59122S Salter-Harris Type II physeal fracture of upper end of radius, left arm, sequela -S59129A Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59129D Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59129G Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59129K Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59129P Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59129S Salter-Harris Type II physeal fracture of upper end of radius, unspecified arm, sequela -S59131A Salter-Harris Type III physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59131D Salter-Harris Type III physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59131G Salter-Harris Type III physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59131K Salter-Harris Type III physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59131P Salter-Harris Type III physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59131S Salter-Harris Type III physeal fracture of upper end of radius, right arm, sequela -S59132A Salter-Harris Type III physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59132D Salter-Harris Type III physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59132G Salter-Harris Type III physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59132K Salter-Harris Type III physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59132P Salter-Harris Type III physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59132S Salter-Harris Type III physeal fracture of upper end of radius, left arm, sequela -S59139A Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59139D Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59139G Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59139K Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59139P Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59139S Salter-Harris Type III physeal fracture of upper end of radius, unspecified arm, sequela -S59141A Salter-Harris Type IV physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59141D Salter-Harris Type IV physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59141G Salter-Harris Type IV physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59141K Salter-Harris Type IV physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59141P Salter-Harris Type IV physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59141S Salter-Harris Type IV physeal fracture of upper end of radius, right arm, sequela -S59142A Salter-Harris Type IV physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59142D Salter-Harris Type IV physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59142G Salter-Harris Type IV physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59142K Salter-Harris Type IV physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59142P Salter-Harris Type IV physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59142S Salter-Harris Type IV physeal fracture of upper end of radius, left arm, sequela -S59149A Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59149D Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59149G Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59149K Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59149P Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59149S Salter-Harris Type IV physeal fracture of upper end of radius, unspecified arm, sequela -S59191A Other physeal fracture of upper end of radius, right arm, initial encounter for closed fracture -S59191D Other physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with routine healing -S59191G Other physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with delayed healing -S59191K Other physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with nonunion -S59191P Other physeal fracture of upper end of radius, right arm, subsequent encounter for fracture with malunion -S59191S Other physeal fracture of upper end of radius, right arm, sequela -S59192A Other physeal fracture of upper end of radius, left arm, initial encounter for closed fracture -S59192D Other physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with routine healing -S59192G Other physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with delayed healing -S59192K Other physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with nonunion -S59192P Other physeal fracture of upper end of radius, left arm, subsequent encounter for fracture with malunion -S59192S Other physeal fracture of upper end of radius, left arm, sequela -S59199A Other physeal fracture of upper end of radius, unspecified arm, initial encounter for closed fracture -S59199D Other physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59199G Other physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59199K Other physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59199P Other physeal fracture of upper end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59199S Other physeal fracture of upper end of radius, unspecified arm, sequela -S59201A Unspecified physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59201D Unspecified physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59201G Unspecified physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59201K Unspecified physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59201P Unspecified physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59201S Unspecified physeal fracture of lower end of radius, right arm, sequela -S59202A Unspecified physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59202D Unspecified physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59202G Unspecified physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59202K Unspecified physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59202P Unspecified physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59202S Unspecified physeal fracture of lower end of radius, left arm, sequela -S59209A Unspecified physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59209D Unspecified physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59209G Unspecified physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59209K Unspecified physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59209P Unspecified physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59209S Unspecified physeal fracture of lower end of radius, unspecified arm, sequela -S59211A Salter-Harris Type I physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59211D Salter-Harris Type I physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59211G Salter-Harris Type I physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59211K Salter-Harris Type I physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59211P Salter-Harris Type I physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59211S Salter-Harris Type I physeal fracture of lower end of radius, right arm, sequela -S59212A Salter-Harris Type I physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59212D Salter-Harris Type I physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59212G Salter-Harris Type I physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59212K Salter-Harris Type I physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59212P Salter-Harris Type I physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59212S Salter-Harris Type I physeal fracture of lower end of radius, left arm, sequela -S59219A Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59219D Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59219G Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59219K Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59219P Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59219S Salter-Harris Type I physeal fracture of lower end of radius, unspecified arm, sequela -S59221A Salter-Harris Type II physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59221D Salter-Harris Type II physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59221G Salter-Harris Type II physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59221K Salter-Harris Type II physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59221P Salter-Harris Type II physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59221S Salter-Harris Type II physeal fracture of lower end of radius, right arm, sequela -S59222A Salter-Harris Type II physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59222D Salter-Harris Type II physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59222G Salter-Harris Type II physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59222K Salter-Harris Type II physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59222P Salter-Harris Type II physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59222S Salter-Harris Type II physeal fracture of lower end of radius, left arm, sequela -S59229A Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59229D Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59229G Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59229K Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59229P Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59229S Salter-Harris Type II physeal fracture of lower end of radius, unspecified arm, sequela -S59231A Salter-Harris Type III physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59231D Salter-Harris Type III physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59231G Salter-Harris Type III physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59231K Salter-Harris Type III physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59231P Salter-Harris Type III physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59231S Salter-Harris Type III physeal fracture of lower end of radius, right arm, sequela -S59232A Salter-Harris Type III physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59232D Salter-Harris Type III physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59232G Salter-Harris Type III physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59232K Salter-Harris Type III physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59232P Salter-Harris Type III physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59232S Salter-Harris Type III physeal fracture of lower end of radius, left arm, sequela -S59239A Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59239D Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59239G Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59239K Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59239P Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59239S Salter-Harris Type III physeal fracture of lower end of radius, unspecified arm, sequela -S59241A Salter-Harris Type IV physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59241D Salter-Harris Type IV physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59241G Salter-Harris Type IV physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59241K Salter-Harris Type IV physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59241P Salter-Harris Type IV physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59241S Salter-Harris Type IV physeal fracture of lower end of radius, right arm, sequela -S59242A Salter-Harris Type IV physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59242D Salter-Harris Type IV physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59242G Salter-Harris Type IV physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59242K Salter-Harris Type IV physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59242P Salter-Harris Type IV physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59242S Salter-Harris Type IV physeal fracture of lower end of radius, left arm, sequela -S59249A Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59249D Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59249G Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59249K Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59249P Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59249S Salter-Harris Type IV physeal fracture of lower end of radius, unspecified arm, sequela -S59291A Other physeal fracture of lower end of radius, right arm, initial encounter for closed fracture -S59291D Other physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with routine healing -S59291G Other physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with delayed healing -S59291K Other physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with nonunion -S59291P Other physeal fracture of lower end of radius, right arm, subsequent encounter for fracture with malunion -S59291S Other physeal fracture of lower end of radius, right arm, sequela -S59292A Other physeal fracture of lower end of radius, left arm, initial encounter for closed fracture -S59292D Other physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with routine healing -S59292G Other physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with delayed healing -S59292K Other physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with nonunion -S59292P Other physeal fracture of lower end of radius, left arm, subsequent encounter for fracture with malunion -S59292S Other physeal fracture of lower end of radius, left arm, sequela -S59299A Other physeal fracture of lower end of radius, unspecified arm, initial encounter for closed fracture -S59299D Other physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with routine healing -S59299G Other physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with delayed healing -S59299K Other physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with nonunion -S59299P Other physeal fracture of lower end of radius, unspecified arm, subsequent encounter for fracture with malunion -S59299S Other physeal fracture of lower end of radius, unspecified arm, sequela -S59801A Other specified injuries of right elbow, initial encounter -S59801D Other specified injuries of right elbow, subsequent encounter -S59801S Other specified injuries of right elbow, sequela -S59802A Other specified injuries of left elbow, initial encounter -S59802D Other specified injuries of left elbow, subsequent encounter -S59802S Other specified injuries of left elbow, sequela -S59809A Other specified injuries of unspecified elbow, initial encounter -S59809D Other specified injuries of unspecified elbow, subsequent encounter -S59809S Other specified injuries of unspecified elbow, sequela -S59811A Other specified injuries right forearm, initial encounter -S59811D Other specified injuries right forearm, subsequent encounter -S59811S Other specified injuries right forearm, sequela -S59812A Other specified injuries left forearm, initial encounter -S59812D Other specified injuries left forearm, subsequent encounter -S59812S Other specified injuries left forearm, sequela -S59819A Other specified injuries unspecified forearm, initial encounter -S59819D Other specified injuries unspecified forearm, subsequent encounter -S59819S Other specified injuries unspecified forearm, sequela -S59901A Unspecified injury of right elbow, initial encounter -S59901D Unspecified injury of right elbow, subsequent encounter -S59901S Unspecified injury of right elbow, sequela -S59902A Unspecified injury of left elbow, initial encounter -S59902D Unspecified injury of left elbow, subsequent encounter -S59902S Unspecified injury of left elbow, sequela -S59909A Unspecified injury of unspecified elbow, initial encounter -S59909D Unspecified injury of unspecified elbow, subsequent encounter -S59909S Unspecified injury of unspecified elbow, sequela -S59911A Unspecified injury of right forearm, initial encounter -S59911D Unspecified injury of right forearm, subsequent encounter -S59911S Unspecified injury of right forearm, sequela -S59912A Unspecified injury of left forearm, initial encounter -S59912D Unspecified injury of left forearm, subsequent encounter -S59912S Unspecified injury of left forearm, sequela -S59919A Unspecified injury of unspecified forearm, initial encounter -S59919D Unspecified injury of unspecified forearm, subsequent encounter -S59919S Unspecified injury of unspecified forearm, sequela -S6000XA Contusion of unspecified finger without damage to nail, initial encounter -S6000XD Contusion of unspecified finger without damage to nail, subsequent encounter -S6000XS Contusion of unspecified finger without damage to nail, sequela -S60011A Contusion of right thumb without damage to nail, initial encounter -S60011D Contusion of right thumb without damage to nail, subsequent encounter -S60011S Contusion of right thumb without damage to nail, sequela -S60012A Contusion of left thumb without damage to nail, initial encounter -S60012D Contusion of left thumb without damage to nail, subsequent encounter -S60012S Contusion of left thumb without damage to nail, sequela -S60019A Contusion of unspecified thumb without damage to nail, initial encounter -S60019D Contusion of unspecified thumb without damage to nail, subsequent encounter -S60019S Contusion of unspecified thumb without damage to nail, sequela -S60021A Contusion of right index finger without damage to nail, initial encounter -S60021D Contusion of right index finger without damage to nail, subsequent encounter -S60021S Contusion of right index finger without damage to nail, sequela -S60022A Contusion of left index finger without damage to nail, initial encounter -S60022D Contusion of left index finger without damage to nail, subsequent encounter -S60022S Contusion of left index finger without damage to nail, sequela -S60029A Contusion of unspecified index finger without damage to nail, initial encounter -S60029D Contusion of unspecified index finger without damage to nail, subsequent encounter -S60029S Contusion of unspecified index finger without damage to nail, sequela -S60031A Contusion of right middle finger without damage to nail, initial encounter -S60031D Contusion of right middle finger without damage to nail, subsequent encounter -S60031S Contusion of right middle finger without damage to nail, sequela -S60032A Contusion of left middle finger without damage to nail, initial encounter -S60032D Contusion of left middle finger without damage to nail, subsequent encounter -S60032S Contusion of left middle finger without damage to nail, sequela -S60039A Contusion of unspecified middle finger without damage to nail, initial encounter -S60039D Contusion of unspecified middle finger without damage to nail, subsequent encounter -S60039S Contusion of unspecified middle finger without damage to nail, sequela -S60041A Contusion of right ring finger without damage to nail, initial encounter -S60041D Contusion of right ring finger without damage to nail, subsequent encounter -S60041S Contusion of right ring finger without damage to nail, sequela -S60042A Contusion of left ring finger without damage to nail, initial encounter -S60042D Contusion of left ring finger without damage to nail, subsequent encounter -S60042S Contusion of left ring finger without damage to nail, sequela -S60049A Contusion of unspecified ring finger without damage to nail, initial encounter -S60049D Contusion of unspecified ring finger without damage to nail, subsequent encounter -S60049S Contusion of unspecified ring finger without damage to nail, sequela -S60051A Contusion of right little finger without damage to nail, initial encounter -S60051D Contusion of right little finger without damage to nail, subsequent encounter -S60051S Contusion of right little finger without damage to nail, sequela -S60052A Contusion of left little finger without damage to nail, initial encounter -S60052D Contusion of left little finger without damage to nail, subsequent encounter -S60052S Contusion of left little finger without damage to nail, sequela -S60059A Contusion of unspecified little finger without damage to nail, initial encounter -S60059D Contusion of unspecified little finger without damage to nail, subsequent encounter -S60059S Contusion of unspecified little finger without damage to nail, sequela -S6010XA Contusion of unspecified finger with damage to nail, initial encounter -S6010XD Contusion of unspecified finger with damage to nail, subsequent encounter -S6010XS Contusion of unspecified finger with damage to nail, sequela -S60111A Contusion of right thumb with damage to nail, initial encounter -S60111D Contusion of right thumb with damage to nail, subsequent encounter -S60111S Contusion of right thumb with damage to nail, sequela -S60112A Contusion of left thumb with damage to nail, initial encounter -S60112D Contusion of left thumb with damage to nail, subsequent encounter -S60112S Contusion of left thumb with damage to nail, sequela -S60119A Contusion of unspecified thumb with damage to nail, initial encounter -S60119D Contusion of unspecified thumb with damage to nail, subsequent encounter -S60119S Contusion of unspecified thumb with damage to nail, sequela -S60121A Contusion of right index finger with damage to nail, initial encounter -S60121D Contusion of right index finger with damage to nail, subsequent encounter -S60121S Contusion of right index finger with damage to nail, sequela -S60122A Contusion of left index finger with damage to nail, initial encounter -S60122D Contusion of left index finger with damage to nail, subsequent encounter -S60122S Contusion of left index finger with damage to nail, sequela -S60129A Contusion of unspecified index finger with damage to nail, initial encounter -S60129D Contusion of unspecified index finger with damage to nail, subsequent encounter -S60129S Contusion of unspecified index finger with damage to nail, sequela -S60131A Contusion of right middle finger with damage to nail, initial encounter -S60131D Contusion of right middle finger with damage to nail, subsequent encounter -S60131S Contusion of right middle finger with damage to nail, sequela -S60132A Contusion of left middle finger with damage to nail, initial encounter -S60132D Contusion of left middle finger with damage to nail, subsequent encounter -S60132S Contusion of left middle finger with damage to nail, sequela -S60139A Contusion of unspecified middle finger with damage to nail, initial encounter -S60139D Contusion of unspecified middle finger with damage to nail, subsequent encounter -S60139S Contusion of unspecified middle finger with damage to nail, sequela -S60141A Contusion of right ring finger with damage to nail, initial encounter -S60141D Contusion of right ring finger with damage to nail, subsequent encounter -S60141S Contusion of right ring finger with damage to nail, sequela -S60142A Contusion of left ring finger with damage to nail, initial encounter -S60142D Contusion of left ring finger with damage to nail, subsequent encounter -S60142S Contusion of left ring finger with damage to nail, sequela -S60149A Contusion of unspecified ring finger with damage to nail, initial encounter -S60149D Contusion of unspecified ring finger with damage to nail, subsequent encounter -S60149S Contusion of unspecified ring finger with damage to nail, sequela -S60151A Contusion of right little finger with damage to nail, initial encounter -S60151D Contusion of right little finger with damage to nail, subsequent encounter -S60151S Contusion of right little finger with damage to nail, sequela -S60152A Contusion of left little finger with damage to nail, initial encounter -S60152D Contusion of left little finger with damage to nail, subsequent encounter -S60152S Contusion of left little finger with damage to nail, sequela -S60159A Contusion of unspecified little finger with damage to nail, initial encounter -S60159D Contusion of unspecified little finger with damage to nail, subsequent encounter -S60159S Contusion of unspecified little finger with damage to nail, sequela -S60211A Contusion of right wrist, initial encounter -S60211D Contusion of right wrist, subsequent encounter -S60211S Contusion of right wrist, sequela -S60212A Contusion of left wrist, initial encounter -S60212D Contusion of left wrist, subsequent encounter -S60212S Contusion of left wrist, sequela -S60219A Contusion of unspecified wrist, initial encounter -S60219D Contusion of unspecified wrist, subsequent encounter -S60219S Contusion of unspecified wrist, sequela -S60221A Contusion of right hand, initial encounter -S60221D Contusion of right hand, subsequent encounter -S60221S Contusion of right hand, sequela -S60222A Contusion of left hand, initial encounter -S60222D Contusion of left hand, subsequent encounter -S60222S Contusion of left hand, sequela -S60229A Contusion of unspecified hand, initial encounter -S60229D Contusion of unspecified hand, subsequent encounter -S60229S Contusion of unspecified hand, sequela -S60311A Abrasion of right thumb, initial encounter -S60311D Abrasion of right thumb, subsequent encounter -S60311S Abrasion of right thumb, sequela -S60312A Abrasion of left thumb, initial encounter -S60312D Abrasion of left thumb, subsequent encounter -S60312S Abrasion of left thumb, sequela -S60319A Abrasion of unspecified thumb, initial encounter -S60319D Abrasion of unspecified thumb, subsequent encounter -S60319S Abrasion of unspecified thumb, sequela -S60321A Blister (nonthermal) of right thumb, initial encounter -S60321D Blister (nonthermal) of right thumb, subsequent encounter -S60321S Blister (nonthermal) of right thumb, sequela -S60322A Blister (nonthermal) of left thumb, initial encounter -S60322D Blister (nonthermal) of left thumb, subsequent encounter -S60322S Blister (nonthermal) of left thumb, sequela -S60329A Blister (nonthermal) of unspecified thumb, initial encounter -S60329D Blister (nonthermal) of unspecified thumb, subsequent encounter -S60329S Blister (nonthermal) of unspecified thumb, sequela -S60341A External constriction of right thumb, initial encounter -S60341D External constriction of right thumb, subsequent encounter -S60341S External constriction of right thumb, sequela -S60342A External constriction of left thumb, initial encounter -S60342D External constriction of left thumb, subsequent encounter -S60342S External constriction of left thumb, sequela -S60349A External constriction of unspecified thumb, initial encounter -S60349D External constriction of unspecified thumb, subsequent encounter -S60349S External constriction of unspecified thumb, sequela -S60351A Superficial foreign body of right thumb, initial encounter -S60351D Superficial foreign body of right thumb, subsequent encounter -S60351S Superficial foreign body of right thumb, sequela -S60352A Superficial foreign body of left thumb, initial encounter -S60352D Superficial foreign body of left thumb, subsequent encounter -S60352S Superficial foreign body of left thumb, sequela -S60359A Superficial foreign body of unspecified thumb, initial encounter -S60359D Superficial foreign body of unspecified thumb, subsequent encounter -S60359S Superficial foreign body of unspecified thumb, sequela -S60361A Insect bite (nonvenomous) of right thumb, initial encounter -S60361D Insect bite (nonvenomous) of right thumb, subsequent encounter -S60361S Insect bite (nonvenomous) of right thumb, sequela -S60362A Insect bite (nonvenomous) of left thumb, initial encounter -S60362D Insect bite (nonvenomous) of left thumb, subsequent encounter -S60362S Insect bite (nonvenomous) of left thumb, sequela -S60369A Insect bite (nonvenomous) of unspecified thumb, initial encounter -S60369D Insect bite (nonvenomous) of unspecified thumb, subsequent encounter -S60369S Insect bite (nonvenomous) of unspecified thumb, sequela -S60371A Other superficial bite of right thumb, initial encounter -S60371D Other superficial bite of right thumb, subsequent encounter -S60371S Other superficial bite of right thumb, sequela -S60372A Other superficial bite of left thumb, initial encounter -S60372D Other superficial bite of left thumb, subsequent encounter -S60372S Other superficial bite of left thumb, sequela -S60379A Other superficial bite of unspecified thumb, initial encounter -S60379D Other superficial bite of unspecified thumb, subsequent encounter -S60379S Other superficial bite of unspecified thumb, sequela -S60391A Other superficial injuries of right thumb, initial encounter -S60391D Other superficial injuries of right thumb, subsequent encounter -S60391S Other superficial injuries of right thumb, sequela -S60392A Other superficial injuries of left thumb, initial encounter -S60392D Other superficial injuries of left thumb, subsequent encounter -S60392S Other superficial injuries of left thumb, sequela -S60399A Other superficial injuries of unspecified thumb, initial encounter -S60399D Other superficial injuries of unspecified thumb, subsequent encounter -S60399S Other superficial injuries of unspecified thumb, sequela -S60410A Abrasion of right index finger, initial encounter -S60410D Abrasion of right index finger, subsequent encounter -S60410S Abrasion of right index finger, sequela -S60411A Abrasion of left index finger, initial encounter -S60411D Abrasion of left index finger, subsequent encounter -S60411S Abrasion of left index finger, sequela -S60412A Abrasion of right middle finger, initial encounter -S60412D Abrasion of right middle finger, subsequent encounter -S60412S Abrasion of right middle finger, sequela -S60413A Abrasion of left middle finger, initial encounter -S60413D Abrasion of left middle finger, subsequent encounter -S60413S Abrasion of left middle finger, sequela -S60414A Abrasion of right ring finger, initial encounter -S60414D Abrasion of right ring finger, subsequent encounter -S60414S Abrasion of right ring finger, sequela -S60415A Abrasion of left ring finger, initial encounter -S60415D Abrasion of left ring finger, subsequent encounter -S60415S Abrasion of left ring finger, sequela -S60416A Abrasion of right little finger, initial encounter -S60416D Abrasion of right little finger, subsequent encounter -S60416S Abrasion of right little finger, sequela -S60417A Abrasion of left little finger, initial encounter -S60417D Abrasion of left little finger, subsequent encounter -S60417S Abrasion of left little finger, sequela -S60418A Abrasion of other finger, initial encounter -S60418D Abrasion of other finger, subsequent encounter -S60418S Abrasion of other finger, sequela -S60419A Abrasion of unspecified finger, initial encounter -S60419D Abrasion of unspecified finger, subsequent encounter -S60419S Abrasion of unspecified finger, sequela -S60420A Blister (nonthermal) of right index finger, initial encounter -S60420D Blister (nonthermal) of right index finger, subsequent encounter -S60420S Blister (nonthermal) of right index finger, sequela -S60421A Blister (nonthermal) of left index finger, initial encounter -S60421D Blister (nonthermal) of left index finger, subsequent encounter -S60421S Blister (nonthermal) of left index finger, sequela -S60422A Blister (nonthermal) of right middle finger, initial encounter -S60422D Blister (nonthermal) of right middle finger, subsequent encounter -S60422S Blister (nonthermal) of right middle finger, sequela -S60423A Blister (nonthermal) of left middle finger, initial encounter -S60423D Blister (nonthermal) of left middle finger, subsequent encounter -S60423S Blister (nonthermal) of left middle finger, sequela -S60424A Blister (nonthermal) of right ring finger, initial encounter -S60424D Blister (nonthermal) of right ring finger, subsequent encounter -S60424S Blister (nonthermal) of right ring finger, sequela -S60425A Blister (nonthermal) of left ring finger, initial encounter -S60425D Blister (nonthermal) of left ring finger, subsequent encounter -S60425S Blister (nonthermal) of left ring finger, sequela -S60426A Blister (nonthermal) of right little finger, initial encounter -S60426D Blister (nonthermal) of right little finger, subsequent encounter -S60426S Blister (nonthermal) of right little finger, sequela -S60427A Blister (nonthermal) of left little finger, initial encounter -S60427D Blister (nonthermal) of left little finger, subsequent encounter -S60427S Blister (nonthermal) of left little finger, sequela -S60428A Blister (nonthermal) of other finger, initial encounter -S60428D Blister (nonthermal) of other finger, subsequent encounter -S60428S Blister (nonthermal) of other finger, sequela -S60429A Blister (nonthermal) of unspecified finger, initial encounter -S60429D Blister (nonthermal) of unspecified finger, subsequent encounter -S60429S Blister (nonthermal) of unspecified finger, sequela -S60440A External constriction of right index finger, initial encounter -S60440D External constriction of right index finger, subsequent encounter -S60440S External constriction of right index finger, sequela -S60441A External constriction of left index finger, initial encounter -S60441D External constriction of left index finger, subsequent encounter -S60441S External constriction of left index finger, sequela -S60442A External constriction of right middle finger, initial encounter -S60442D External constriction of right middle finger, subsequent encounter -S60442S External constriction of right middle finger, sequela -S60443A External constriction of left middle finger, initial encounter -S60443D External constriction of left middle finger, subsequent encounter -S60443S External constriction of left middle finger, sequela -S60444A External constriction of right ring finger, initial encounter -S60444D External constriction of right ring finger, subsequent encounter -S60444S External constriction of right ring finger, sequela -S60445A External constriction of left ring finger, initial encounter -S60445D External constriction of left ring finger, subsequent encounter -S60445S External constriction of left ring finger, sequela -S60446A External constriction of right little finger, initial encounter -S60446D External constriction of right little finger, subsequent encounter -S60446S External constriction of right little finger, sequela -S60447A External constriction of left little finger, initial encounter -S60447D External constriction of left little finger, subsequent encounter -S60447S External constriction of left little finger, sequela -S60448A External constriction of other finger, initial encounter -S60448D External constriction of other finger, subsequent encounter -S60448S External constriction of other finger, sequela -S60449A External constriction of unspecified finger, initial encounter -S60449D External constriction of unspecified finger, subsequent encounter -S60449S External constriction of unspecified finger, sequela -S60450A Superficial foreign body of right index finger, initial encounter -S60450D Superficial foreign body of right index finger, subsequent encounter -S60450S Superficial foreign body of right index finger, sequela -S60451A Superficial foreign body of left index finger, initial encounter -S60451D Superficial foreign body of left index finger, subsequent encounter -S60451S Superficial foreign body of left index finger, sequela -S60452A Superficial foreign body of right middle finger, initial encounter -S60452D Superficial foreign body of right middle finger, subsequent encounter -S60452S Superficial foreign body of right middle finger, sequela -S60453A Superficial foreign body of left middle finger, initial encounter -S60453D Superficial foreign body of left middle finger, subsequent encounter -S60453S Superficial foreign body of left middle finger, sequela -S60454A Superficial foreign body of right ring finger, initial encounter -S60454D Superficial foreign body of right ring finger, subsequent encounter -S60454S Superficial foreign body of right ring finger, sequela -S60455A Superficial foreign body of left ring finger, initial encounter -S60455D Superficial foreign body of left ring finger, subsequent encounter -S60455S Superficial foreign body of left ring finger, sequela -S60456A Superficial foreign body of right little finger, initial encounter -S60456D Superficial foreign body of right little finger, subsequent encounter -S60456S Superficial foreign body of right little finger, sequela -S60457A Superficial foreign body of left little finger, initial encounter -S60457D Superficial foreign body of left little finger, subsequent encounter -S60457S Superficial foreign body of left little finger, sequela -S60458A Superficial foreign body of other finger, initial encounter -S60458D Superficial foreign body of other finger, subsequent encounter -S60458S Superficial foreign body of other finger, sequela -S60459A Superficial foreign body of unspecified finger, initial encounter -S60459D Superficial foreign body of unspecified finger, subsequent encounter -S60459S Superficial foreign body of unspecified finger, sequela -S60460A Insect bite (nonvenomous) of right index finger, initial encounter -S60460D Insect bite (nonvenomous) of right index finger, subsequent encounter -S60460S Insect bite (nonvenomous) of right index finger, sequela -S60461A Insect bite (nonvenomous) of left index finger, initial encounter -S60461D Insect bite (nonvenomous) of left index finger, subsequent encounter -S60461S Insect bite (nonvenomous) of left index finger, sequela -S60462A Insect bite (nonvenomous) of right middle finger, initial encounter -S60462D Insect bite (nonvenomous) of right middle finger, subsequent encounter -S60462S Insect bite (nonvenomous) of right middle finger, sequela -S60463A Insect bite (nonvenomous) of left middle finger, initial encounter -S60463D Insect bite (nonvenomous) of left middle finger, subsequent encounter -S60463S Insect bite (nonvenomous) of left middle finger, sequela -S60464A Insect bite (nonvenomous) of right ring finger, initial encounter -S60464D Insect bite (nonvenomous) of right ring finger, subsequent encounter -S60464S Insect bite (nonvenomous) of right ring finger, sequela -S60465A Insect bite (nonvenomous) of left ring finger, initial encounter -S60465D Insect bite (nonvenomous) of left ring finger, subsequent encounter -S60465S Insect bite (nonvenomous) of left ring finger, sequela -S60466A Insect bite (nonvenomous) of right little finger, initial encounter -S60466D Insect bite (nonvenomous) of right little finger, subsequent encounter -S60466S Insect bite (nonvenomous) of right little finger, sequela -S60467A Insect bite (nonvenomous) of left little finger, initial encounter -S60467D Insect bite (nonvenomous) of left little finger, subsequent encounter -S60467S Insect bite (nonvenomous) of left little finger, sequela -S60468A Insect bite (nonvenomous) of other finger, initial encounter -S60468D Insect bite (nonvenomous) of other finger, subsequent encounter -S60468S Insect bite (nonvenomous) of other finger, sequela -S60469A Insect bite (nonvenomous) of unspecified finger, initial encounter -S60469D Insect bite (nonvenomous) of unspecified finger, subsequent encounter -S60469S Insect bite (nonvenomous) of unspecified finger, sequela -S60470A Other superficial bite of right index finger, initial encounter -S60470D Other superficial bite of right index finger, subsequent encounter -S60470S Other superficial bite of right index finger, sequela -S60471A Other superficial bite of left index finger, initial encounter -S60471D Other superficial bite of left index finger, subsequent encounter -S60471S Other superficial bite of left index finger, sequela -S60472A Other superficial bite of right middle finger, initial encounter -S60472D Other superficial bite of right middle finger, subsequent encounter -S60472S Other superficial bite of right middle finger, sequela -S60473A Other superficial bite of left middle finger, initial encounter -S60473D Other superficial bite of left middle finger, subsequent encounter -S60473S Other superficial bite of left middle finger, sequela -S60474A Other superficial bite of right ring finger, initial encounter -S60474D Other superficial bite of right ring finger, subsequent encounter -S60474S Other superficial bite of right ring finger, sequela -S60475A Other superficial bite of left ring finger, initial encounter -S60475D Other superficial bite of left ring finger, subsequent encounter -S60475S Other superficial bite of left ring finger, sequela -S60476A Other superficial bite of right little finger, initial encounter -S60476D Other superficial bite of right little finger, subsequent encounter -S60476S Other superficial bite of right little finger, sequela -S60477A Other superficial bite of left little finger, initial encounter -S60477D Other superficial bite of left little finger, subsequent encounter -S60477S Other superficial bite of left little finger, sequela -S60478A Other superficial bite of other finger, initial encounter -S60478D Other superficial bite of other finger, subsequent encounter -S60478S Other superficial bite of other finger, sequela -S60479A Other superficial bite of unspecified finger, initial encounter -S60479D Other superficial bite of unspecified finger, subsequent encounter -S60479S Other superficial bite of unspecified finger, sequela -S60511A Abrasion of right hand, initial encounter -S60511D Abrasion of right hand, subsequent encounter -S60511S Abrasion of right hand, sequela -S60512A Abrasion of left hand, initial encounter -S60512D Abrasion of left hand, subsequent encounter -S60512S Abrasion of left hand, sequela -S60519A Abrasion of unspecified hand, initial encounter -S60519D Abrasion of unspecified hand, subsequent encounter -S60519S Abrasion of unspecified hand, sequela -S60521A Blister (nonthermal) of right hand, initial encounter -S60521D Blister (nonthermal) of right hand, subsequent encounter -S60521S Blister (nonthermal) of right hand, sequela -S60522A Blister (nonthermal) of left hand, initial encounter -S60522D Blister (nonthermal) of left hand, subsequent encounter -S60522S Blister (nonthermal) of left hand, sequela -S60529A Blister (nonthermal) of unspecified hand, initial encounter -S60529D Blister (nonthermal) of unspecified hand, subsequent encounter -S60529S Blister (nonthermal) of unspecified hand, sequela -S60541A External constriction of right hand, initial encounter -S60541D External constriction of right hand, subsequent encounter -S60541S External constriction of right hand, sequela -S60542A External constriction of left hand, initial encounter -S60542D External constriction of left hand, subsequent encounter -S60542S External constriction of left hand, sequela -S60549A External constriction of unspecified hand, initial encounter -S60549D External constriction of unspecified hand, subsequent encounter -S60549S External constriction of unspecified hand, sequela -S60551A Superficial foreign body of right hand, initial encounter -S60551D Superficial foreign body of right hand, subsequent encounter -S60551S Superficial foreign body of right hand, sequela -S60552A Superficial foreign body of left hand, initial encounter -S60552D Superficial foreign body of left hand, subsequent encounter -S60552S Superficial foreign body of left hand, sequela -S60559A Superficial foreign body of unspecified hand, initial encounter -S60559D Superficial foreign body of unspecified hand, subsequent encounter -S60559S Superficial foreign body of unspecified hand, sequela -S60561A Insect bite (nonvenomous) of right hand, initial encounter -S60561D Insect bite (nonvenomous) of right hand, subsequent encounter -S60561S Insect bite (nonvenomous) of right hand, sequela -S60562A Insect bite (nonvenomous) of left hand, initial encounter -S60562D Insect bite (nonvenomous) of left hand, subsequent encounter -S60562S Insect bite (nonvenomous) of left hand, sequela -S60569A Insect bite (nonvenomous) of unspecified hand, initial encounter -S60569D Insect bite (nonvenomous) of unspecified hand, subsequent encounter -S60569S Insect bite (nonvenomous) of unspecified hand, sequela -S60571A Other superficial bite of hand of right hand, initial encounter -S60571D Other superficial bite of hand of right hand, subsequent encounter -S60571S Other superficial bite of hand of right hand, sequela -S60572A Other superficial bite of hand of left hand, initial encounter -S60572D Other superficial bite of hand of left hand, subsequent encounter -S60572S Other superficial bite of hand of left hand, sequela -S60579A Other superficial bite of hand of unspecified hand, initial encounter -S60579D Other superficial bite of hand of unspecified hand, subsequent encounter -S60579S Other superficial bite of hand of unspecified hand, sequela -S60811A Abrasion of right wrist, initial encounter -S60811D Abrasion of right wrist, subsequent encounter -S60811S Abrasion of right wrist, sequela -S60812A Abrasion of left wrist, initial encounter -S60812D Abrasion of left wrist, subsequent encounter -S60812S Abrasion of left wrist, sequela -S60819A Abrasion of unspecified wrist, initial encounter -S60819D Abrasion of unspecified wrist, subsequent encounter -S60819S Abrasion of unspecified wrist, sequela -S60821A Blister (nonthermal) of right wrist, initial encounter -S60821D Blister (nonthermal) of right wrist, subsequent encounter -S60821S Blister (nonthermal) of right wrist, sequela -S60822A Blister (nonthermal) of left wrist, initial encounter -S60822D Blister (nonthermal) of left wrist, subsequent encounter -S60822S Blister (nonthermal) of left wrist, sequela -S60829A Blister (nonthermal) of unspecified wrist, initial encounter -S60829D Blister (nonthermal) of unspecified wrist, subsequent encounter -S60829S Blister (nonthermal) of unspecified wrist, sequela -S60841A External constriction of right wrist, initial encounter -S60841D External constriction of right wrist, subsequent encounter -S60841S External constriction of right wrist, sequela -S60842A External constriction of left wrist, initial encounter -S60842D External constriction of left wrist, subsequent encounter -S60842S External constriction of left wrist, sequela -S60849A External constriction of unspecified wrist, initial encounter -S60849D External constriction of unspecified wrist, subsequent encounter -S60849S External constriction of unspecified wrist, sequela -S60851A Superficial foreign body of right wrist, initial encounter -S60851D Superficial foreign body of right wrist, subsequent encounter -S60851S Superficial foreign body of right wrist, sequela -S60852A Superficial foreign body of left wrist, initial encounter -S60852D Superficial foreign body of left wrist, subsequent encounter -S60852S Superficial foreign body of left wrist, sequela -S60859A Superficial foreign body of unspecified wrist, initial encounter -S60859D Superficial foreign body of unspecified wrist, subsequent encounter -S60859S Superficial foreign body of unspecified wrist, sequela -S60861A Insect bite (nonvenomous) of right wrist, initial encounter -S60861D Insect bite (nonvenomous) of right wrist, subsequent encounter -S60861S Insect bite (nonvenomous) of right wrist, sequela -S60862A Insect bite (nonvenomous) of left wrist, initial encounter -S60862D Insect bite (nonvenomous) of left wrist, subsequent encounter -S60862S Insect bite (nonvenomous) of left wrist, sequela -S60869A Insect bite (nonvenomous) of unspecified wrist, initial encounter -S60869D Insect bite (nonvenomous) of unspecified wrist, subsequent encounter -S60869S Insect bite (nonvenomous) of unspecified wrist, sequela -S60871A Other superficial bite of right wrist, initial encounter -S60871D Other superficial bite of right wrist, subsequent encounter -S60871S Other superficial bite of right wrist, sequela -S60872A Other superficial bite of left wrist, initial encounter -S60872D Other superficial bite of left wrist, subsequent encounter -S60872S Other superficial bite of left wrist, sequela -S60879A Other superficial bite of unspecified wrist, initial encounter -S60879D Other superficial bite of unspecified wrist, subsequent encounter -S60879S Other superficial bite of unspecified wrist, sequela -S60911A Unspecified superficial injury of right wrist, initial encounter -S60911D Unspecified superficial injury of right wrist, subsequent encounter -S60911S Unspecified superficial injury of right wrist, sequela -S60912A Unspecified superficial injury of left wrist, initial encounter -S60912D Unspecified superficial injury of left wrist, subsequent encounter -S60912S Unspecified superficial injury of left wrist, sequela -S60919A Unspecified superficial injury of unspecified wrist, initial encounter -S60919D Unspecified superficial injury of unspecified wrist, subsequent encounter -S60919S Unspecified superficial injury of unspecified wrist, sequela -S60921A Unspecified superficial injury of right hand, initial encounter -S60921D Unspecified superficial injury of right hand, subsequent encounter -S60921S Unspecified superficial injury of right hand, sequela -S60922A Unspecified superficial injury of left hand, initial encounter -S60922D Unspecified superficial injury of left hand, subsequent encounter -S60922S Unspecified superficial injury of left hand, sequela -S60929A Unspecified superficial injury of unspecified hand, initial encounter -S60929D Unspecified superficial injury of unspecified hand, subsequent encounter -S60929S Unspecified superficial injury of unspecified hand, sequela -S60931A Unspecified superficial injury of right thumb, initial encounter -S60931D Unspecified superficial injury of right thumb, subsequent encounter -S60931S Unspecified superficial injury of right thumb, sequela -S60932A Unspecified superficial injury of left thumb, initial encounter -S60932D Unspecified superficial injury of left thumb, subsequent encounter -S60932S Unspecified superficial injury of left thumb, sequela -S60939A Unspecified superficial injury of unspecified thumb, initial encounter -S60939D Unspecified superficial injury of unspecified thumb, subsequent encounter -S60939S Unspecified superficial injury of unspecified thumb, sequela -S60940A Unspecified superficial injury of right index finger, initial encounter -S60940D Unspecified superficial injury of right index finger, subsequent encounter -S60940S Unspecified superficial injury of right index finger, sequela -S60941A Unspecified superficial injury of left index finger, initial encounter -S60941D Unspecified superficial injury of left index finger, subsequent encounter -S60941S Unspecified superficial injury of left index finger, sequela -S60942A Unspecified superficial injury of right middle finger, initial encounter -S60942D Unspecified superficial injury of right middle finger, subsequent encounter -S60942S Unspecified superficial injury of right middle finger, sequela -S60943A Unspecified superficial injury of left middle finger, initial encounter -S60943D Unspecified superficial injury of left middle finger, subsequent encounter -S60943S Unspecified superficial injury of left middle finger, sequela -S60944A Unspecified superficial injury of right ring finger, initial encounter -S60944D Unspecified superficial injury of right ring finger, subsequent encounter -S60944S Unspecified superficial injury of right ring finger, sequela -S60945A Unspecified superficial injury of left ring finger, initial encounter -S60945D Unspecified superficial injury of left ring finger, subsequent encounter -S60945S Unspecified superficial injury of left ring finger, sequela -S60946A Unspecified superficial injury of right little finger, initial encounter -S60946D Unspecified superficial injury of right little finger, subsequent encounter -S60946S Unspecified superficial injury of right little finger, sequela -S60947A Unspecified superficial injury of left little finger, initial encounter -S60947D Unspecified superficial injury of left little finger, subsequent encounter -S60947S Unspecified superficial injury of left little finger, sequela -S60948A Unspecified superficial injury of other finger, initial encounter -S60948D Unspecified superficial injury of other finger, subsequent encounter -S60948S Unspecified superficial injury of other finger, sequela -S60949A Unspecified superficial injury of unspecified finger, initial encounter -S60949D Unspecified superficial injury of unspecified finger, subsequent encounter -S60949S Unspecified superficial injury of unspecified finger, sequela -S61001A Unspecified open wound of right thumb without damage to nail, initial encounter -S61001D Unspecified open wound of right thumb without damage to nail, subsequent encounter -S61001S Unspecified open wound of right thumb without damage to nail, sequela -S61002A Unspecified open wound of left thumb without damage to nail, initial encounter -S61002D Unspecified open wound of left thumb without damage to nail, subsequent encounter -S61002S Unspecified open wound of left thumb without damage to nail, sequela -S61009A Unspecified open wound of unspecified thumb without damage to nail, initial encounter -S61009D Unspecified open wound of unspecified thumb without damage to nail, subsequent encounter -S61009S Unspecified open wound of unspecified thumb without damage to nail, sequela -S61011A Laceration without foreign body of right thumb without damage to nail, initial encounter -S61011D Laceration without foreign body of right thumb without damage to nail, subsequent encounter -S61011S Laceration without foreign body of right thumb without damage to nail, sequela -S61012A Laceration without foreign body of left thumb without damage to nail, initial encounter -S61012D Laceration without foreign body of left thumb without damage to nail, subsequent encounter -S61012S Laceration without foreign body of left thumb without damage to nail, sequela -S61019A Laceration without foreign body of unspecified thumb without damage to nail, initial encounter -S61019D Laceration without foreign body of unspecified thumb without damage to nail, subsequent encounter -S61019S Laceration without foreign body of unspecified thumb without damage to nail, sequela -S61021A Laceration with foreign body of right thumb without damage to nail, initial encounter -S61021D Laceration with foreign body of right thumb without damage to nail, subsequent encounter -S61021S Laceration with foreign body of right thumb without damage to nail, sequela -S61022A Laceration with foreign body of left thumb without damage to nail, initial encounter -S61022D Laceration with foreign body of left thumb without damage to nail, subsequent encounter -S61022S Laceration with foreign body of left thumb without damage to nail, sequela -S61029A Laceration with foreign body of unspecified thumb without damage to nail, initial encounter -S61029D Laceration with foreign body of unspecified thumb without damage to nail, subsequent encounter -S61029S Laceration with foreign body of unspecified thumb without damage to nail, sequela -S61031A Puncture wound without foreign body of right thumb without damage to nail, initial encounter -S61031D Puncture wound without foreign body of right thumb without damage to nail, subsequent encounter -S61031S Puncture wound without foreign body of right thumb without damage to nail, sequela -S61032A Puncture wound without foreign body of left thumb without damage to nail, initial encounter -S61032D Puncture wound without foreign body of left thumb without damage to nail, subsequent encounter -S61032S Puncture wound without foreign body of left thumb without damage to nail, sequela -S61039A Puncture wound without foreign body of unspecified thumb without damage to nail, initial encounter -S61039D Puncture wound without foreign body of unspecified thumb without damage to nail, subsequent encounter -S61039S Puncture wound without foreign body of unspecified thumb without damage to nail, sequela -S61041A Puncture wound with foreign body of right thumb without damage to nail, initial encounter -S61041D Puncture wound with foreign body of right thumb without damage to nail, subsequent encounter -S61041S Puncture wound with foreign body of right thumb without damage to nail, sequela -S61042A Puncture wound with foreign body of left thumb without damage to nail, initial encounter -S61042D Puncture wound with foreign body of left thumb without damage to nail, subsequent encounter -S61042S Puncture wound with foreign body of left thumb without damage to nail, sequela -S61049A Puncture wound with foreign body of unspecified thumb without damage to nail, initial encounter -S61049D Puncture wound with foreign body of unspecified thumb without damage to nail, subsequent encounter -S61049S Puncture wound with foreign body of unspecified thumb without damage to nail, sequela -S61051A Open bite of right thumb without damage to nail, initial encounter -S61051D Open bite of right thumb without damage to nail, subsequent encounter -S61051S Open bite of right thumb without damage to nail, sequela -S61052A Open bite of left thumb without damage to nail, initial encounter -S61052D Open bite of left thumb without damage to nail, subsequent encounter -S61052S Open bite of left thumb without damage to nail, sequela -S61059A Open bite of unspecified thumb without damage to nail, initial encounter -S61059D Open bite of unspecified thumb without damage to nail, subsequent encounter -S61059S Open bite of unspecified thumb without damage to nail, sequela -S61101A Unspecified open wound of right thumb with damage to nail, initial encounter -S61101D Unspecified open wound of right thumb with damage to nail, subsequent encounter -S61101S Unspecified open wound of right thumb with damage to nail, sequela -S61102A Unspecified open wound of left thumb with damage to nail, initial encounter -S61102D Unspecified open wound of left thumb with damage to nail, subsequent encounter -S61102S Unspecified open wound of left thumb with damage to nail, sequela -S61109A Unspecified open wound of unspecified thumb with damage to nail, initial encounter -S61109D Unspecified open wound of unspecified thumb with damage to nail, subsequent encounter -S61109S Unspecified open wound of unspecified thumb with damage to nail, sequela -S61111A Laceration without foreign body of right thumb with damage to nail, initial encounter -S61111D Laceration without foreign body of right thumb with damage to nail, subsequent encounter -S61111S Laceration without foreign body of right thumb with damage to nail, sequela -S61112A Laceration without foreign body of left thumb with damage to nail, initial encounter -S61112D Laceration without foreign body of left thumb with damage to nail, subsequent encounter -S61112S Laceration without foreign body of left thumb with damage to nail, sequela -S61119A Laceration without foreign body of unspecified thumb with damage to nail, initial encounter -S61119D Laceration without foreign body of unspecified thumb with damage to nail, subsequent encounter -S61119S Laceration without foreign body of unspecified thumb with damage to nail, sequela -S61121A Laceration with foreign body of right thumb with damage to nail, initial encounter -S61121D Laceration with foreign body of right thumb with damage to nail, subsequent encounter -S61121S Laceration with foreign body of right thumb with damage to nail, sequela -S61122A Laceration with foreign body of left thumb with damage to nail, initial encounter -S61122D Laceration with foreign body of left thumb with damage to nail, subsequent encounter -S61122S Laceration with foreign body of left thumb with damage to nail, sequela -S61129A Laceration with foreign body of unspecified thumb with damage to nail, initial encounter -S61129D Laceration with foreign body of unspecified thumb with damage to nail, subsequent encounter -S61129S Laceration with foreign body of unspecified thumb with damage to nail, sequela -S61131A Puncture wound without foreign body of right thumb with damage to nail, initial encounter -S61131D Puncture wound without foreign body of right thumb with damage to nail, subsequent encounter -S61131S Puncture wound without foreign body of right thumb with damage to nail, sequela -S61132A Puncture wound without foreign body of left thumb with damage to nail, initial encounter -S61132D Puncture wound without foreign body of left thumb with damage to nail, subsequent encounter -S61132S Puncture wound without foreign body of left thumb with damage to nail, sequela -S61139A Puncture wound without foreign body of unspecified thumb with damage to nail, initial encounter -S61139D Puncture wound without foreign body of unspecified thumb with damage to nail, subsequent encounter -S61139S Puncture wound without foreign body of unspecified thumb with damage to nail, sequela -S61141A Puncture wound with foreign body of right thumb with damage to nail, initial encounter -S61141D Puncture wound with foreign body of right thumb with damage to nail, subsequent encounter -S61141S Puncture wound with foreign body of right thumb with damage to nail, sequela -S61142A Puncture wound with foreign body of left thumb with damage to nail, initial encounter -S61142D Puncture wound with foreign body of left thumb with damage to nail, subsequent encounter -S61142S Puncture wound with foreign body of left thumb with damage to nail, sequela -S61149A Puncture wound with foreign body of unspecified thumb with damage to nail, initial encounter -S61149D Puncture wound with foreign body of unspecified thumb with damage to nail, subsequent encounter -S61149S Puncture wound with foreign body of unspecified thumb with damage to nail, sequela -S61151A Open bite of right thumb with damage to nail, initial encounter -S61151D Open bite of right thumb with damage to nail, subsequent encounter -S61151S Open bite of right thumb with damage to nail, sequela -S61152A Open bite of left thumb with damage to nail, initial encounter -S61152D Open bite of left thumb with damage to nail, subsequent encounter -S61152S Open bite of left thumb with damage to nail, sequela -S61159A Open bite of unspecified thumb with damage to nail, initial encounter -S61159D Open bite of unspecified thumb with damage to nail, subsequent encounter -S61159S Open bite of unspecified thumb with damage to nail, sequela -S61200A Unspecified open wound of right index finger without damage to nail, initial encounter -S61200D Unspecified open wound of right index finger without damage to nail, subsequent encounter -S61200S Unspecified open wound of right index finger without damage to nail, sequela -S61201A Unspecified open wound of left index finger without damage to nail, initial encounter -S61201D Unspecified open wound of left index finger without damage to nail, subsequent encounter -S61201S Unspecified open wound of left index finger without damage to nail, sequela -S61202A Unspecified open wound of right middle finger without damage to nail, initial encounter -S61202D Unspecified open wound of right middle finger without damage to nail, subsequent encounter -S61202S Unspecified open wound of right middle finger without damage to nail, sequela -S61203A Unspecified open wound of left middle finger without damage to nail, initial encounter -S61203D Unspecified open wound of left middle finger without damage to nail, subsequent encounter -S61203S Unspecified open wound of left middle finger without damage to nail, sequela -S61204A Unspecified open wound of right ring finger without damage to nail, initial encounter -S61204D Unspecified open wound of right ring finger without damage to nail, subsequent encounter -S61204S Unspecified open wound of right ring finger without damage to nail, sequela -S61205A Unspecified open wound of left ring finger without damage to nail, initial encounter -S61205D Unspecified open wound of left ring finger without damage to nail, subsequent encounter -S61205S Unspecified open wound of left ring finger without damage to nail, sequela -S61206A Unspecified open wound of right little finger without damage to nail, initial encounter -S61206D Unspecified open wound of right little finger without damage to nail, subsequent encounter -S61206S Unspecified open wound of right little finger without damage to nail, sequela -S61207A Unspecified open wound of left little finger without damage to nail, initial encounter -S61207D Unspecified open wound of left little finger without damage to nail, subsequent encounter -S61207S Unspecified open wound of left little finger without damage to nail, sequela -S61208A Unspecified open wound of other finger without damage to nail, initial encounter -S61208D Unspecified open wound of other finger without damage to nail, subsequent encounter -S61208S Unspecified open wound of other finger without damage to nail, sequela -S61209A Unspecified open wound of unspecified finger without damage to nail, initial encounter -S61209D Unspecified open wound of unspecified finger without damage to nail, subsequent encounter -S61209S Unspecified open wound of unspecified finger without damage to nail, sequela -S61210A Laceration without foreign body of right index finger without damage to nail, initial encounter -S61210D Laceration without foreign body of right index finger without damage to nail, subsequent encounter -S61210S Laceration without foreign body of right index finger without damage to nail, sequela -S61211A Laceration without foreign body of left index finger without damage to nail, initial encounter -S61211D Laceration without foreign body of left index finger without damage to nail, subsequent encounter -S61211S Laceration without foreign body of left index finger without damage to nail, sequela -S61212A Laceration without foreign body of right middle finger without damage to nail, initial encounter -S61212D Laceration without foreign body of right middle finger without damage to nail, subsequent encounter -S61212S Laceration without foreign body of right middle finger without damage to nail, sequela -S61213A Laceration without foreign body of left middle finger without damage to nail, initial encounter -S61213D Laceration without foreign body of left middle finger without damage to nail, subsequent encounter -S61213S Laceration without foreign body of left middle finger without damage to nail, sequela -S61214A Laceration without foreign body of right ring finger without damage to nail, initial encounter -S61214D Laceration without foreign body of right ring finger without damage to nail, subsequent encounter -S61214S Laceration without foreign body of right ring finger without damage to nail, sequela -S61215A Laceration without foreign body of left ring finger without damage to nail, initial encounter -S61215D Laceration without foreign body of left ring finger without damage to nail, subsequent encounter -S61215S Laceration without foreign body of left ring finger without damage to nail, sequela -S61216A Laceration without foreign body of right little finger without damage to nail, initial encounter -S61216D Laceration without foreign body of right little finger without damage to nail, subsequent encounter -S61216S Laceration without foreign body of right little finger without damage to nail, sequela -S61217A Laceration without foreign body of left little finger without damage to nail, initial encounter -S61217D Laceration without foreign body of left little finger without damage to nail, subsequent encounter -S61217S Laceration without foreign body of left little finger without damage to nail, sequela -S61218A Laceration without foreign body of other finger without damage to nail, initial encounter -S61218D Laceration without foreign body of other finger without damage to nail, subsequent encounter -S61218S Laceration without foreign body of other finger without damage to nail, sequela -S61219A Laceration without foreign body of unspecified finger without damage to nail, initial encounter -S61219D Laceration without foreign body of unspecified finger without damage to nail, subsequent encounter -S61219S Laceration without foreign body of unspecified finger without damage to nail, sequela -S61220A Laceration with foreign body of right index finger without damage to nail, initial encounter -S61220D Laceration with foreign body of right index finger without damage to nail, subsequent encounter -S61220S Laceration with foreign body of right index finger without damage to nail, sequela -S61221A Laceration with foreign body of left index finger without damage to nail, initial encounter -S61221D Laceration with foreign body of left index finger without damage to nail, subsequent encounter -S61221S Laceration with foreign body of left index finger without damage to nail, sequela -S61222A Laceration with foreign body of right middle finger without damage to nail, initial encounter -S61222D Laceration with foreign body of right middle finger without damage to nail, subsequent encounter -S61222S Laceration with foreign body of right middle finger without damage to nail, sequela -S61223A Laceration with foreign body of left middle finger without damage to nail, initial encounter -S61223D Laceration with foreign body of left middle finger without damage to nail, subsequent encounter -S61223S Laceration with foreign body of left middle finger without damage to nail, sequela -S61224A Laceration with foreign body of right ring finger without damage to nail, initial encounter -S61224D Laceration with foreign body of right ring finger without damage to nail, subsequent encounter -S61224S Laceration with foreign body of right ring finger without damage to nail, sequela -S61225A Laceration with foreign body of left ring finger without damage to nail, initial encounter -S61225D Laceration with foreign body of left ring finger without damage to nail, subsequent encounter -S61225S Laceration with foreign body of left ring finger without damage to nail, sequela -S61226A Laceration with foreign body of right little finger without damage to nail, initial encounter -S61226D Laceration with foreign body of right little finger without damage to nail, subsequent encounter -S61226S Laceration with foreign body of right little finger without damage to nail, sequela -S61227A Laceration with foreign body of left little finger without damage to nail, initial encounter -S61227D Laceration with foreign body of left little finger without damage to nail, subsequent encounter -S61227S Laceration with foreign body of left little finger without damage to nail, sequela -S61228A Laceration with foreign body of other finger without damage to nail, initial encounter -S61228D Laceration with foreign body of other finger without damage to nail, subsequent encounter -S61228S Laceration with foreign body of other finger without damage to nail, sequela -S61229A Laceration with foreign body of unspecified finger without damage to nail, initial encounter -S61229D Laceration with foreign body of unspecified finger without damage to nail, subsequent encounter -S61229S Laceration with foreign body of unspecified finger without damage to nail, sequela -S61230A Puncture wound without foreign body of right index finger without damage to nail, initial encounter -S61230D Puncture wound without foreign body of right index finger without damage to nail, subsequent encounter -S61230S Puncture wound without foreign body of right index finger without damage to nail, sequela -S61231A Puncture wound without foreign body of left index finger without damage to nail, initial encounter -S61231D Puncture wound without foreign body of left index finger without damage to nail, subsequent encounter -S61231S Puncture wound without foreign body of left index finger without damage to nail, sequela -S61232A Puncture wound without foreign body of right middle finger without damage to nail, initial encounter -S61232D Puncture wound without foreign body of right middle finger without damage to nail, subsequent encounter -S61232S Puncture wound without foreign body of right middle finger without damage to nail, sequela -S61233A Puncture wound without foreign body of left middle finger without damage to nail, initial encounter -S61233D Puncture wound without foreign body of left middle finger without damage to nail, subsequent encounter -S61233S Puncture wound without foreign body of left middle finger without damage to nail, sequela -S61234A Puncture wound without foreign body of right ring finger without damage to nail, initial encounter -S61234D Puncture wound without foreign body of right ring finger without damage to nail, subsequent encounter -S61234S Puncture wound without foreign body of right ring finger without damage to nail, sequela -S61235A Puncture wound without foreign body of left ring finger without damage to nail, initial encounter -S61235D Puncture wound without foreign body of left ring finger without damage to nail, subsequent encounter -S61235S Puncture wound without foreign body of left ring finger without damage to nail, sequela -S61236A Puncture wound without foreign body of right little finger without damage to nail, initial encounter -S61236D Puncture wound without foreign body of right little finger without damage to nail, subsequent encounter -S61236S Puncture wound without foreign body of right little finger without damage to nail, sequela -S61237A Puncture wound without foreign body of left little finger without damage to nail, initial encounter -S61237D Puncture wound without foreign body of left little finger without damage to nail, subsequent encounter -S61237S Puncture wound without foreign body of left little finger without damage to nail, sequela -S61238A Puncture wound without foreign body of other finger without damage to nail, initial encounter -S61238D Puncture wound without foreign body of other finger without damage to nail, subsequent encounter -S61238S Puncture wound without foreign body of other finger without damage to nail, sequela -S61239A Puncture wound without foreign body of unspecified finger without damage to nail, initial encounter -S61239D Puncture wound without foreign body of unspecified finger without damage to nail, subsequent encounter -S61239S Puncture wound without foreign body of unspecified finger without damage to nail, sequela -S61240A Puncture wound with foreign body of right index finger without damage to nail, initial encounter -S61240D Puncture wound with foreign body of right index finger without damage to nail, subsequent encounter -S61240S Puncture wound with foreign body of right index finger without damage to nail, sequela -S61241A Puncture wound with foreign body of left index finger without damage to nail, initial encounter -S61241D Puncture wound with foreign body of left index finger without damage to nail, subsequent encounter -S61241S Puncture wound with foreign body of left index finger without damage to nail, sequela -S61242A Puncture wound with foreign body of right middle finger without damage to nail, initial encounter -S61242D Puncture wound with foreign body of right middle finger without damage to nail, subsequent encounter -S61242S Puncture wound with foreign body of right middle finger without damage to nail, sequela -S61243A Puncture wound with foreign body of left middle finger without damage to nail, initial encounter -S61243D Puncture wound with foreign body of left middle finger without damage to nail, subsequent encounter -S61243S Puncture wound with foreign body of left middle finger without damage to nail, sequela -S61244A Puncture wound with foreign body of right ring finger without damage to nail, initial encounter -S61244D Puncture wound with foreign body of right ring finger without damage to nail, subsequent encounter -S61244S Puncture wound with foreign body of right ring finger without damage to nail, sequela -S61245A Puncture wound with foreign body of left ring finger without damage to nail, initial encounter -S61245D Puncture wound with foreign body of left ring finger without damage to nail, subsequent encounter -S61245S Puncture wound with foreign body of left ring finger without damage to nail, sequela -S61246A Puncture wound with foreign body of right little finger without damage to nail, initial encounter -S61246D Puncture wound with foreign body of right little finger without damage to nail, subsequent encounter -S61246S Puncture wound with foreign body of right little finger without damage to nail, sequela -S61247A Puncture wound with foreign body of left little finger without damage to nail, initial encounter -S61247D Puncture wound with foreign body of left little finger without damage to nail, subsequent encounter -S61247S Puncture wound with foreign body of left little finger without damage to nail, sequela -S61248A Puncture wound with foreign body of other finger without damage to nail, initial encounter -S61248D Puncture wound with foreign body of other finger without damage to nail, subsequent encounter -S61248S Puncture wound with foreign body of other finger without damage to nail, sequela -S61249A Puncture wound with foreign body of unspecified finger without damage to nail, initial encounter -S61249D Puncture wound with foreign body of unspecified finger without damage to nail, subsequent encounter -S61249S Puncture wound with foreign body of unspecified finger without damage to nail, sequela -S61250A Open bite of right index finger without damage to nail, initial encounter -S61250D Open bite of right index finger without damage to nail, subsequent encounter -S61250S Open bite of right index finger without damage to nail, sequela -S61251A Open bite of left index finger without damage to nail, initial encounter -S61251D Open bite of left index finger without damage to nail, subsequent encounter -S61251S Open bite of left index finger without damage to nail, sequela -S61252A Open bite of right middle finger without damage to nail, initial encounter -S61252D Open bite of right middle finger without damage to nail, subsequent encounter -S61252S Open bite of right middle finger without damage to nail, sequela -S61253A Open bite of left middle finger without damage to nail, initial encounter -S61253D Open bite of left middle finger without damage to nail, subsequent encounter -S61253S Open bite of left middle finger without damage to nail, sequela -S61254A Open bite of right ring finger without damage to nail, initial encounter -S61254D Open bite of right ring finger without damage to nail, subsequent encounter -S61254S Open bite of right ring finger without damage to nail, sequela -S61255A Open bite of left ring finger without damage to nail, initial encounter -S61255D Open bite of left ring finger without damage to nail, subsequent encounter -S61255S Open bite of left ring finger without damage to nail, sequela -S61256A Open bite of right little finger without damage to nail, initial encounter -S61256D Open bite of right little finger without damage to nail, subsequent encounter -S61256S Open bite of right little finger without damage to nail, sequela -S61257A Open bite of left little finger without damage to nail, initial encounter -S61257D Open bite of left little finger without damage to nail, subsequent encounter -S61257S Open bite of left little finger without damage to nail, sequela -S61258A Open bite of other finger without damage to nail, initial encounter -S61258D Open bite of other finger without damage to nail, subsequent encounter -S61258S Open bite of other finger without damage to nail, sequela -S61259A Open bite of unspecified finger without damage to nail, initial encounter -S61259D Open bite of unspecified finger without damage to nail, subsequent encounter -S61259S Open bite of unspecified finger without damage to nail, sequela -S61300A Unspecified open wound of right index finger with damage to nail, initial encounter -S61300D Unspecified open wound of right index finger with damage to nail, subsequent encounter -S61300S Unspecified open wound of right index finger with damage to nail, sequela -S61301A Unspecified open wound of left index finger with damage to nail, initial encounter -S61301D Unspecified open wound of left index finger with damage to nail, subsequent encounter -S61301S Unspecified open wound of left index finger with damage to nail, sequela -S61302A Unspecified open wound of right middle finger with damage to nail, initial encounter -S61302D Unspecified open wound of right middle finger with damage to nail, subsequent encounter -S61302S Unspecified open wound of right middle finger with damage to nail, sequela -S61303A Unspecified open wound of left middle finger with damage to nail, initial encounter -S61303D Unspecified open wound of left middle finger with damage to nail, subsequent encounter -S61303S Unspecified open wound of left middle finger with damage to nail, sequela -S61304A Unspecified open wound of right ring finger with damage to nail, initial encounter -S61304D Unspecified open wound of right ring finger with damage to nail, subsequent encounter -S61304S Unspecified open wound of right ring finger with damage to nail, sequela -S61305A Unspecified open wound of left ring finger with damage to nail, initial encounter -S61305D Unspecified open wound of left ring finger with damage to nail, subsequent encounter -S61305S Unspecified open wound of left ring finger with damage to nail, sequela -S61306A Unspecified open wound of right little finger with damage to nail, initial encounter -S61306D Unspecified open wound of right little finger with damage to nail, subsequent encounter -S61306S Unspecified open wound of right little finger with damage to nail, sequela -S61307A Unspecified open wound of left little finger with damage to nail, initial encounter -S61307D Unspecified open wound of left little finger with damage to nail, subsequent encounter -S61307S Unspecified open wound of left little finger with damage to nail, sequela -S61308A Unspecified open wound of other finger with damage to nail, initial encounter -S61308D Unspecified open wound of other finger with damage to nail, subsequent encounter -S61308S Unspecified open wound of other finger with damage to nail, sequela -S61309A Unspecified open wound of unspecified finger with damage to nail, initial encounter -S61309D Unspecified open wound of unspecified finger with damage to nail, subsequent encounter -S61309S Unspecified open wound of unspecified finger with damage to nail, sequela -S61310A Laceration without foreign body of right index finger with damage to nail, initial encounter -S61310D Laceration without foreign body of right index finger with damage to nail, subsequent encounter -S61310S Laceration without foreign body of right index finger with damage to nail, sequela -S61311A Laceration without foreign body of left index finger with damage to nail, initial encounter -S61311D Laceration without foreign body of left index finger with damage to nail, subsequent encounter -S61311S Laceration without foreign body of left index finger with damage to nail, sequela -S61312A Laceration without foreign body of right middle finger with damage to nail, initial encounter -S61312D Laceration without foreign body of right middle finger with damage to nail, subsequent encounter -S61312S Laceration without foreign body of right middle finger with damage to nail, sequela -S61313A Laceration without foreign body of left middle finger with damage to nail, initial encounter -S61313D Laceration without foreign body of left middle finger with damage to nail, subsequent encounter -S61313S Laceration without foreign body of left middle finger with damage to nail, sequela -S61314A Laceration without foreign body of right ring finger with damage to nail, initial encounter -S61314D Laceration without foreign body of right ring finger with damage to nail, subsequent encounter -S61314S Laceration without foreign body of right ring finger with damage to nail, sequela -S61315A Laceration without foreign body of left ring finger with damage to nail, initial encounter -S61315D Laceration without foreign body of left ring finger with damage to nail, subsequent encounter -S61315S Laceration without foreign body of left ring finger with damage to nail, sequela -S61316A Laceration without foreign body of right little finger with damage to nail, initial encounter -S61316D Laceration without foreign body of right little finger with damage to nail, subsequent encounter -S61316S Laceration without foreign body of right little finger with damage to nail, sequela -S61317A Laceration without foreign body of left little finger with damage to nail, initial encounter -S61317D Laceration without foreign body of left little finger with damage to nail, subsequent encounter -S61317S Laceration without foreign body of left little finger with damage to nail, sequela -S61318A Laceration without foreign body of other finger with damage to nail, initial encounter -S61318D Laceration without foreign body of other finger with damage to nail, subsequent encounter -S61318S Laceration without foreign body of other finger with damage to nail, sequela -S61319A Laceration without foreign body of unspecified finger with damage to nail, initial encounter -S61319D Laceration without foreign body of unspecified finger with damage to nail, subsequent encounter -S61319S Laceration without foreign body of unspecified finger with damage to nail, sequela -S61320A Laceration with foreign body of right index finger with damage to nail, initial encounter -S61320D Laceration with foreign body of right index finger with damage to nail, subsequent encounter -S61320S Laceration with foreign body of right index finger with damage to nail, sequela -S61321A Laceration with foreign body of left index finger with damage to nail, initial encounter -S61321D Laceration with foreign body of left index finger with damage to nail, subsequent encounter -S61321S Laceration with foreign body of left index finger with damage to nail, sequela -S61322A Laceration with foreign body of right middle finger with damage to nail, initial encounter -S61322D Laceration with foreign body of right middle finger with damage to nail, subsequent encounter -S61322S Laceration with foreign body of right middle finger with damage to nail, sequela -S61323A Laceration with foreign body of left middle finger with damage to nail, initial encounter -S61323D Laceration with foreign body of left middle finger with damage to nail, subsequent encounter -S61323S Laceration with foreign body of left middle finger with damage to nail, sequela -S61324A Laceration with foreign body of right ring finger with damage to nail, initial encounter -S61324D Laceration with foreign body of right ring finger with damage to nail, subsequent encounter -S61324S Laceration with foreign body of right ring finger with damage to nail, sequela -S61325A Laceration with foreign body of left ring finger with damage to nail, initial encounter -S61325D Laceration with foreign body of left ring finger with damage to nail, subsequent encounter -S61325S Laceration with foreign body of left ring finger with damage to nail, sequela -S61326A Laceration with foreign body of right little finger with damage to nail, initial encounter -S61326D Laceration with foreign body of right little finger with damage to nail, subsequent encounter -S61326S Laceration with foreign body of right little finger with damage to nail, sequela -S61327A Laceration with foreign body of left little finger with damage to nail, initial encounter -S61327D Laceration with foreign body of left little finger with damage to nail, subsequent encounter -S61327S Laceration with foreign body of left little finger with damage to nail, sequela -S61328A Laceration with foreign body of other finger with damage to nail, initial encounter -S61328D Laceration with foreign body of other finger with damage to nail, subsequent encounter -S61328S Laceration with foreign body of other finger with damage to nail, sequela -S61329A Laceration with foreign body of unspecified finger with damage to nail, initial encounter -S61329D Laceration with foreign body of unspecified finger with damage to nail, subsequent encounter -S61329S Laceration with foreign body of unspecified finger with damage to nail, sequela -S61330A Puncture wound without foreign body of right index finger with damage to nail, initial encounter -S61330D Puncture wound without foreign body of right index finger with damage to nail, subsequent encounter -S61330S Puncture wound without foreign body of right index finger with damage to nail, sequela -S61331A Puncture wound without foreign body of left index finger with damage to nail, initial encounter -S61331D Puncture wound without foreign body of left index finger with damage to nail, subsequent encounter -S61331S Puncture wound without foreign body of left index finger with damage to nail, sequela -S61332A Puncture wound without foreign body of right middle finger with damage to nail, initial encounter -S61332D Puncture wound without foreign body of right middle finger with damage to nail, subsequent encounter -S61332S Puncture wound without foreign body of right middle finger with damage to nail, sequela -S61333A Puncture wound without foreign body of left middle finger with damage to nail, initial encounter -S61333D Puncture wound without foreign body of left middle finger with damage to nail, subsequent encounter -S61333S Puncture wound without foreign body of left middle finger with damage to nail, sequela -S61334A Puncture wound without foreign body of right ring finger with damage to nail, initial encounter -S61334D Puncture wound without foreign body of right ring finger with damage to nail, subsequent encounter -S61334S Puncture wound without foreign body of right ring finger with damage to nail, sequela -S61335A Puncture wound without foreign body of left ring finger with damage to nail, initial encounter -S61335D Puncture wound without foreign body of left ring finger with damage to nail, subsequent encounter -S61335S Puncture wound without foreign body of left ring finger with damage to nail, sequela -S61336A Puncture wound without foreign body of right little finger with damage to nail, initial encounter -S61336D Puncture wound without foreign body of right little finger with damage to nail, subsequent encounter -S61336S Puncture wound without foreign body of right little finger with damage to nail, sequela -S61337A Puncture wound without foreign body of left little finger with damage to nail, initial encounter -S61337D Puncture wound without foreign body of left little finger with damage to nail, subsequent encounter -S61337S Puncture wound without foreign body of left little finger with damage to nail, sequela -S61338A Puncture wound without foreign body of other finger with damage to nail, initial encounter -S61338D Puncture wound without foreign body of other finger with damage to nail, subsequent encounter -S61338S Puncture wound without foreign body of other finger with damage to nail, sequela -S61339A Puncture wound without foreign body of unspecified finger with damage to nail, initial encounter -S61339D Puncture wound without foreign body of unspecified finger with damage to nail, subsequent encounter -S61339S Puncture wound without foreign body of unspecified finger with damage to nail, sequela -S61340A Puncture wound with foreign body of right index finger with damage to nail, initial encounter -S61340D Puncture wound with foreign body of right index finger with damage to nail, subsequent encounter -S61340S Puncture wound with foreign body of right index finger with damage to nail, sequela -S61341A Puncture wound with foreign body of left index finger with damage to nail, initial encounter -S61341D Puncture wound with foreign body of left index finger with damage to nail, subsequent encounter -S61341S Puncture wound with foreign body of left index finger with damage to nail, sequela -S61342A Puncture wound with foreign body of right middle finger with damage to nail, initial encounter -S61342D Puncture wound with foreign body of right middle finger with damage to nail, subsequent encounter -S61342S Puncture wound with foreign body of right middle finger with damage to nail, sequela -S61343A Puncture wound with foreign body of left middle finger with damage to nail, initial encounter -S61343D Puncture wound with foreign body of left middle finger with damage to nail, subsequent encounter -S61343S Puncture wound with foreign body of left middle finger with damage to nail, sequela -S61344A Puncture wound with foreign body of right ring finger with damage to nail, initial encounter -S61344D Puncture wound with foreign body of right ring finger with damage to nail, subsequent encounter -S61344S Puncture wound with foreign body of right ring finger with damage to nail, sequela -S61345A Puncture wound with foreign body of left ring finger with damage to nail, initial encounter -S61345D Puncture wound with foreign body of left ring finger with damage to nail, subsequent encounter -S61345S Puncture wound with foreign body of left ring finger with damage to nail, sequela -S61346A Puncture wound with foreign body of right little finger with damage to nail, initial encounter -S61346D Puncture wound with foreign body of right little finger with damage to nail, subsequent encounter -S61346S Puncture wound with foreign body of right little finger with damage to nail, sequela -S61347A Puncture wound with foreign body of left little finger with damage to nail, initial encounter -S61347D Puncture wound with foreign body of left little finger with damage to nail, subsequent encounter -S61347S Puncture wound with foreign body of left little finger with damage to nail, sequela -S61348A Puncture wound with foreign body of other finger with damage to nail, initial encounter -S61348D Puncture wound with foreign body of other finger with damage to nail, subsequent encounter -S61348S Puncture wound with foreign body of other finger with damage to nail, sequela -S61349A Puncture wound with foreign body of unspecified finger with damage to nail, initial encounter -S61349D Puncture wound with foreign body of unspecified finger with damage to nail, subsequent encounter -S61349S Puncture wound with foreign body of unspecified finger with damage to nail, sequela -S61350A Open bite of right index finger with damage to nail, initial encounter -S61350D Open bite of right index finger with damage to nail, subsequent encounter -S61350S Open bite of right index finger with damage to nail, sequela -S61351A Open bite of left index finger with damage to nail, initial encounter -S61351D Open bite of left index finger with damage to nail, subsequent encounter -S61351S Open bite of left index finger with damage to nail, sequela -S61352A Open bite of right middle finger with damage to nail, initial encounter -S61352D Open bite of right middle finger with damage to nail, subsequent encounter -S61352S Open bite of right middle finger with damage to nail, sequela -S61353A Open bite of left middle finger with damage to nail, initial encounter -S61353D Open bite of left middle finger with damage to nail, subsequent encounter -S61353S Open bite of left middle finger with damage to nail, sequela -S61354A Open bite of right ring finger with damage to nail, initial encounter -S61354D Open bite of right ring finger with damage to nail, subsequent encounter -S61354S Open bite of right ring finger with damage to nail, sequela -S61355A Open bite of left ring finger with damage to nail, initial encounter -S61355D Open bite of left ring finger with damage to nail, subsequent encounter -S61355S Open bite of left ring finger with damage to nail, sequela -S61356A Open bite of right little finger with damage to nail, initial encounter -S61356D Open bite of right little finger with damage to nail, subsequent encounter -S61356S Open bite of right little finger with damage to nail, sequela -S61357A Open bite of left little finger with damage to nail, initial encounter -S61357D Open bite of left little finger with damage to nail, subsequent encounter -S61357S Open bite of left little finger with damage to nail, sequela -S61358A Open bite of other finger with damage to nail, initial encounter -S61358D Open bite of other finger with damage to nail, subsequent encounter -S61358S Open bite of other finger with damage to nail, sequela -S61359A Open bite of unspecified finger with damage to nail, initial encounter -S61359D Open bite of unspecified finger with damage to nail, subsequent encounter -S61359S Open bite of unspecified finger with damage to nail, sequela -S61401A Unspecified open wound of right hand, initial encounter -S61401D Unspecified open wound of right hand, subsequent encounter -S61401S Unspecified open wound of right hand, sequela -S61402A Unspecified open wound of left hand, initial encounter -S61402D Unspecified open wound of left hand, subsequent encounter -S61402S Unspecified open wound of left hand, sequela -S61409A Unspecified open wound of unspecified hand, initial encounter -S61409D Unspecified open wound of unspecified hand, subsequent encounter -S61409S Unspecified open wound of unspecified hand, sequela -S61411A Laceration without foreign body of right hand, initial encounter -S61411D Laceration without foreign body of right hand, subsequent encounter -S61411S Laceration without foreign body of right hand, sequela -S61412A Laceration without foreign body of left hand, initial encounter -S61412D Laceration without foreign body of left hand, subsequent encounter -S61412S Laceration without foreign body of left hand, sequela -S61419A Laceration without foreign body of unspecified hand, initial encounter -S61419D Laceration without foreign body of unspecified hand, subsequent encounter -S61419S Laceration without foreign body of unspecified hand, sequela -S61421A Laceration with foreign body of right hand, initial encounter -S61421D Laceration with foreign body of right hand, subsequent encounter -S61421S Laceration with foreign body of right hand, sequela -S61422A Laceration with foreign body of left hand, initial encounter -S61422D Laceration with foreign body of left hand, subsequent encounter -S61422S Laceration with foreign body of left hand, sequela -S61429A Laceration with foreign body of unspecified hand, initial encounter -S61429D Laceration with foreign body of unspecified hand, subsequent encounter -S61429S Laceration with foreign body of unspecified hand, sequela -S61431A Puncture wound without foreign body of right hand, initial encounter -S61431D Puncture wound without foreign body of right hand, subsequent encounter -S61431S Puncture wound without foreign body of right hand, sequela -S61432A Puncture wound without foreign body of left hand, initial encounter -S61432D Puncture wound without foreign body of left hand, subsequent encounter -S61432S Puncture wound without foreign body of left hand, sequela -S61439A Puncture wound without foreign body of unspecified hand, initial encounter -S61439D Puncture wound without foreign body of unspecified hand, subsequent encounter -S61439S Puncture wound without foreign body of unspecified hand, sequela -S61441A Puncture wound with foreign body of right hand, initial encounter -S61441D Puncture wound with foreign body of right hand, subsequent encounter -S61441S Puncture wound with foreign body of right hand, sequela -S61442A Puncture wound with foreign body of left hand, initial encounter -S61442D Puncture wound with foreign body of left hand, subsequent encounter -S61442S Puncture wound with foreign body of left hand, sequela -S61449A Puncture wound with foreign body of unspecified hand, initial encounter -S61449D Puncture wound with foreign body of unspecified hand, subsequent encounter -S61449S Puncture wound with foreign body of unspecified hand, sequela -S61451A Open bite of right hand, initial encounter -S61451D Open bite of right hand, subsequent encounter -S61451S Open bite of right hand, sequela -S61452A Open bite of left hand, initial encounter -S61452D Open bite of left hand, subsequent encounter -S61452S Open bite of left hand, sequela -S61459A Open bite of unspecified hand, initial encounter -S61459D Open bite of unspecified hand, subsequent encounter -S61459S Open bite of unspecified hand, sequela -S61501A Unspecified open wound of right wrist, initial encounter -S61501D Unspecified open wound of right wrist, subsequent encounter -S61501S Unspecified open wound of right wrist, sequela -S61502A Unspecified open wound of left wrist, initial encounter -S61502D Unspecified open wound of left wrist, subsequent encounter -S61502S Unspecified open wound of left wrist, sequela -S61509A Unspecified open wound of unspecified wrist, initial encounter -S61509D Unspecified open wound of unspecified wrist, subsequent encounter -S61509S Unspecified open wound of unspecified wrist, sequela -S61511A Laceration without foreign body of right wrist, initial encounter -S61511D Laceration without foreign body of right wrist, subsequent encounter -S61511S Laceration without foreign body of right wrist, sequela -S61512A Laceration without foreign body of left wrist, initial encounter -S61512D Laceration without foreign body of left wrist, subsequent encounter -S61512S Laceration without foreign body of left wrist, sequela -S61519A Laceration without foreign body of unspecified wrist, initial encounter -S61519D Laceration without foreign body of unspecified wrist, subsequent encounter -S61519S Laceration without foreign body of unspecified wrist, sequela -S61521A Laceration with foreign body of right wrist, initial encounter -S61521D Laceration with foreign body of right wrist, subsequent encounter -S61521S Laceration with foreign body of right wrist, sequela -S61522A Laceration with foreign body of left wrist, initial encounter -S61522D Laceration with foreign body of left wrist, subsequent encounter -S61522S Laceration with foreign body of left wrist, sequela -S61529A Laceration with foreign body of unspecified wrist, initial encounter -S61529D Laceration with foreign body of unspecified wrist, subsequent encounter -S61529S Laceration with foreign body of unspecified wrist, sequela -S61531A Puncture wound without foreign body of right wrist, initial encounter -S61531D Puncture wound without foreign body of right wrist, subsequent encounter -S61531S Puncture wound without foreign body of right wrist, sequela -S61532A Puncture wound without foreign body of left wrist, initial encounter -S61532D Puncture wound without foreign body of left wrist, subsequent encounter -S61532S Puncture wound without foreign body of left wrist, sequela -S61539A Puncture wound without foreign body of unspecified wrist, initial encounter -S61539D Puncture wound without foreign body of unspecified wrist, subsequent encounter -S61539S Puncture wound without foreign body of unspecified wrist, sequela -S61541A Puncture wound with foreign body of right wrist, initial encounter -S61541D Puncture wound with foreign body of right wrist, subsequent encounter -S61541S Puncture wound with foreign body of right wrist, sequela -S61542A Puncture wound with foreign body of left wrist, initial encounter -S61542D Puncture wound with foreign body of left wrist, subsequent encounter -S61542S Puncture wound with foreign body of left wrist, sequela -S61549A Puncture wound with foreign body of unspecified wrist, initial encounter -S61549D Puncture wound with foreign body of unspecified wrist, subsequent encounter -S61549S Puncture wound with foreign body of unspecified wrist, sequela -S61551A Open bite of right wrist, initial encounter -S61551D Open bite of right wrist, subsequent encounter -S61551S Open bite of right wrist, sequela -S61552A Open bite of left wrist, initial encounter -S61552D Open bite of left wrist, subsequent encounter -S61552S Open bite of left wrist, sequela -S61559A Open bite of unspecified wrist, initial encounter -S61559D Open bite of unspecified wrist, subsequent encounter -S61559S Open bite of unspecified wrist, sequela -S62001A Unspecified fracture of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62001B Unspecified fracture of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62001D Unspecified fracture of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62001G Unspecified fracture of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62001K Unspecified fracture of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62001P Unspecified fracture of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62001S Unspecified fracture of navicular [scaphoid] bone of right wrist, sequela -S62002A Unspecified fracture of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62002B Unspecified fracture of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62002D Unspecified fracture of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62002G Unspecified fracture of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62002K Unspecified fracture of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62002P Unspecified fracture of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62002S Unspecified fracture of navicular [scaphoid] bone of left wrist, sequela -S62009A Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62009B Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62009D Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62009G Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62009K Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62009P Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62009S Unspecified fracture of navicular [scaphoid] bone of unspecified wrist, sequela -S62011A Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62011B Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62011D Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62011G Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62011K Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62011P Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62011S Displaced fracture of distal pole of navicular [scaphoid] bone of right wrist, sequela -S62012A Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62012B Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62012D Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62012G Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62012K Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62012P Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62012S Displaced fracture of distal pole of navicular [scaphoid] bone of left wrist, sequela -S62013A Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62013B Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62013D Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62013G Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62013K Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62013P Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62013S Displaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, sequela -S62014A Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62014B Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62014D Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62014G Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62014K Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62014P Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62014S Nondisplaced fracture of distal pole of navicular [scaphoid] bone of right wrist, sequela -S62015A Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62015B Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62015D Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62015G Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62015K Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62015P Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62015S Nondisplaced fracture of distal pole of navicular [scaphoid] bone of left wrist, sequela -S62016A Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62016B Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62016D Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62016G Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62016K Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62016P Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62016S Nondisplaced fracture of distal pole of navicular [scaphoid] bone of unspecified wrist, sequela -S62021A Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62021B Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62021D Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62021G Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62021K Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62021P Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62021S Displaced fracture of middle third of navicular [scaphoid] bone of right wrist, sequela -S62022A Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62022B Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62022D Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62022G Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62022K Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62022P Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62022S Displaced fracture of middle third of navicular [scaphoid] bone of left wrist, sequela -S62023A Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62023B Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62023D Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62023G Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62023K Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62023P Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62023S Displaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, sequela -S62024A Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62024B Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62024D Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62024G Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62024K Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62024P Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62024S Nondisplaced fracture of middle third of navicular [scaphoid] bone of right wrist, sequela -S62025A Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62025B Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62025D Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62025G Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62025K Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62025P Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62025S Nondisplaced fracture of middle third of navicular [scaphoid] bone of left wrist, sequela -S62026A Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62026B Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62026D Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62026G Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62026K Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62026P Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62026S Nondisplaced fracture of middle third of navicular [scaphoid] bone of unspecified wrist, sequela -S62031A Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62031B Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62031D Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62031G Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62031K Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62031P Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62031S Displaced fracture of proximal third of navicular [scaphoid] bone of right wrist, sequela -S62032A Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62032B Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62032D Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62032G Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62032K Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62032P Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62032S Displaced fracture of proximal third of navicular [scaphoid] bone of left wrist, sequela -S62033A Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62033B Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62033D Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62033G Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62033K Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62033P Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62033S Displaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, sequela -S62034A Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, initial encounter for closed fracture -S62034B Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, initial encounter for open fracture -S62034D Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with routine healing -S62034G Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with delayed healing -S62034K Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with nonunion -S62034P Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, subsequent encounter for fracture with malunion -S62034S Nondisplaced fracture of proximal third of navicular [scaphoid] bone of right wrist, sequela -S62035A Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, initial encounter for closed fracture -S62035B Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, initial encounter for open fracture -S62035D Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with routine healing -S62035G Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with delayed healing -S62035K Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with nonunion -S62035P Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, subsequent encounter for fracture with malunion -S62035S Nondisplaced fracture of proximal third of navicular [scaphoid] bone of left wrist, sequela -S62036A Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, initial encounter for closed fracture -S62036B Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, initial encounter for open fracture -S62036D Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with routine healing -S62036G Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with delayed healing -S62036K Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with nonunion -S62036P Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, subsequent encounter for fracture with malunion -S62036S Nondisplaced fracture of proximal third of navicular [scaphoid] bone of unspecified wrist, sequela -S62101A Fracture of unspecified carpal bone, right wrist, initial encounter for closed fracture -S62101B Fracture of unspecified carpal bone, right wrist, initial encounter for open fracture -S62101D Fracture of unspecified carpal bone, right wrist, subsequent encounter for fracture with routine healing -S62101G Fracture of unspecified carpal bone, right wrist, subsequent encounter for fracture with delayed healing -S62101K Fracture of unspecified carpal bone, right wrist, subsequent encounter for fracture with nonunion -S62101P Fracture of unspecified carpal bone, right wrist, subsequent encounter for fracture with malunion -S62101S Fracture of unspecified carpal bone, right wrist, sequela -S62102A Fracture of unspecified carpal bone, left wrist, initial encounter for closed fracture -S62102B Fracture of unspecified carpal bone, left wrist, initial encounter for open fracture -S62102D Fracture of unspecified carpal bone, left wrist, subsequent encounter for fracture with routine healing -S62102G Fracture of unspecified carpal bone, left wrist, subsequent encounter for fracture with delayed healing -S62102K Fracture of unspecified carpal bone, left wrist, subsequent encounter for fracture with nonunion -S62102P Fracture of unspecified carpal bone, left wrist, subsequent encounter for fracture with malunion -S62102S Fracture of unspecified carpal bone, left wrist, sequela -S62109A Fracture of unspecified carpal bone, unspecified wrist, initial encounter for closed fracture -S62109B Fracture of unspecified carpal bone, unspecified wrist, initial encounter for open fracture -S62109D Fracture of unspecified carpal bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62109G Fracture of unspecified carpal bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62109K Fracture of unspecified carpal bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62109P Fracture of unspecified carpal bone, unspecified wrist, subsequent encounter for fracture with malunion -S62109S Fracture of unspecified carpal bone, unspecified wrist, sequela -S62111A Displaced fracture of triquetrum [cuneiform] bone, right wrist, initial encounter for closed fracture -S62111B Displaced fracture of triquetrum [cuneiform] bone, right wrist, initial encounter for open fracture -S62111D Displaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with routine healing -S62111G Displaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62111K Displaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with nonunion -S62111P Displaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with malunion -S62111S Displaced fracture of triquetrum [cuneiform] bone, right wrist, sequela -S62112A Displaced fracture of triquetrum [cuneiform] bone, left wrist, initial encounter for closed fracture -S62112B Displaced fracture of triquetrum [cuneiform] bone, left wrist, initial encounter for open fracture -S62112D Displaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with routine healing -S62112G Displaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62112K Displaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with nonunion -S62112P Displaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with malunion -S62112S Displaced fracture of triquetrum [cuneiform] bone, left wrist, sequela -S62113A Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, initial encounter for closed fracture -S62113B Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, initial encounter for open fracture -S62113D Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62113G Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62113K Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62113P Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62113S Displaced fracture of triquetrum [cuneiform] bone, unspecified wrist, sequela -S62114A Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, initial encounter for closed fracture -S62114B Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, initial encounter for open fracture -S62114D Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with routine healing -S62114G Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62114K Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with nonunion -S62114P Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, subsequent encounter for fracture with malunion -S62114S Nondisplaced fracture of triquetrum [cuneiform] bone, right wrist, sequela -S62115A Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, initial encounter for closed fracture -S62115B Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, initial encounter for open fracture -S62115D Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with routine healing -S62115G Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62115K Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with nonunion -S62115P Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, subsequent encounter for fracture with malunion -S62115S Nondisplaced fracture of triquetrum [cuneiform] bone, left wrist, sequela -S62116A Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, initial encounter for closed fracture -S62116B Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, initial encounter for open fracture -S62116D Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62116G Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62116K Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62116P Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62116S Nondisplaced fracture of triquetrum [cuneiform] bone, unspecified wrist, sequela -S62121A Displaced fracture of lunate [semilunar], right wrist, initial encounter for closed fracture -S62121B Displaced fracture of lunate [semilunar], right wrist, initial encounter for open fracture -S62121D Displaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with routine healing -S62121G Displaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with delayed healing -S62121K Displaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with nonunion -S62121P Displaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with malunion -S62121S Displaced fracture of lunate [semilunar], right wrist, sequela -S62122A Displaced fracture of lunate [semilunar], left wrist, initial encounter for closed fracture -S62122B Displaced fracture of lunate [semilunar], left wrist, initial encounter for open fracture -S62122D Displaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with routine healing -S62122G Displaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with delayed healing -S62122K Displaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with nonunion -S62122P Displaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with malunion -S62122S Displaced fracture of lunate [semilunar], left wrist, sequela -S62123A Displaced fracture of lunate [semilunar], unspecified wrist, initial encounter for closed fracture -S62123B Displaced fracture of lunate [semilunar], unspecified wrist, initial encounter for open fracture -S62123D Displaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with routine healing -S62123G Displaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with delayed healing -S62123K Displaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with nonunion -S62123P Displaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with malunion -S62123S Displaced fracture of lunate [semilunar], unspecified wrist, sequela -S62124A Nondisplaced fracture of lunate [semilunar], right wrist, initial encounter for closed fracture -S62124B Nondisplaced fracture of lunate [semilunar], right wrist, initial encounter for open fracture -S62124D Nondisplaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with routine healing -S62124G Nondisplaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with delayed healing -S62124K Nondisplaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with nonunion -S62124P Nondisplaced fracture of lunate [semilunar], right wrist, subsequent encounter for fracture with malunion -S62124S Nondisplaced fracture of lunate [semilunar], right wrist, sequela -S62125A Nondisplaced fracture of lunate [semilunar], left wrist, initial encounter for closed fracture -S62125B Nondisplaced fracture of lunate [semilunar], left wrist, initial encounter for open fracture -S62125D Nondisplaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with routine healing -S62125G Nondisplaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with delayed healing -S62125K Nondisplaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with nonunion -S62125P Nondisplaced fracture of lunate [semilunar], left wrist, subsequent encounter for fracture with malunion -S62125S Nondisplaced fracture of lunate [semilunar], left wrist, sequela -S62126A Nondisplaced fracture of lunate [semilunar], unspecified wrist, initial encounter for closed fracture -S62126B Nondisplaced fracture of lunate [semilunar], unspecified wrist, initial encounter for open fracture -S62126D Nondisplaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with routine healing -S62126G Nondisplaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with delayed healing -S62126K Nondisplaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with nonunion -S62126P Nondisplaced fracture of lunate [semilunar], unspecified wrist, subsequent encounter for fracture with malunion -S62126S Nondisplaced fracture of lunate [semilunar], unspecified wrist, sequela -S62131A Displaced fracture of capitate [os magnum] bone, right wrist, initial encounter for closed fracture -S62131B Displaced fracture of capitate [os magnum] bone, right wrist, initial encounter for open fracture -S62131D Displaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with routine healing -S62131G Displaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with delayed healing -S62131K Displaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with nonunion -S62131P Displaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with malunion -S62131S Displaced fracture of capitate [os magnum] bone, right wrist, sequela -S62132A Displaced fracture of capitate [os magnum] bone, left wrist, initial encounter for closed fracture -S62132B Displaced fracture of capitate [os magnum] bone, left wrist, initial encounter for open fracture -S62132D Displaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with routine healing -S62132G Displaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with delayed healing -S62132K Displaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with nonunion -S62132P Displaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with malunion -S62132S Displaced fracture of capitate [os magnum] bone, left wrist, sequela -S62133A Displaced fracture of capitate [os magnum] bone, unspecified wrist, initial encounter for closed fracture -S62133B Displaced fracture of capitate [os magnum] bone, unspecified wrist, initial encounter for open fracture -S62133D Displaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62133G Displaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62133K Displaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62133P Displaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62133S Displaced fracture of capitate [os magnum] bone, unspecified wrist, sequela -S62134A Nondisplaced fracture of capitate [os magnum] bone, right wrist, initial encounter for closed fracture -S62134B Nondisplaced fracture of capitate [os magnum] bone, right wrist, initial encounter for open fracture -S62134D Nondisplaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with routine healing -S62134G Nondisplaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with delayed healing -S62134K Nondisplaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with nonunion -S62134P Nondisplaced fracture of capitate [os magnum] bone, right wrist, subsequent encounter for fracture with malunion -S62134S Nondisplaced fracture of capitate [os magnum] bone, right wrist, sequela -S62135A Nondisplaced fracture of capitate [os magnum] bone, left wrist, initial encounter for closed fracture -S62135B Nondisplaced fracture of capitate [os magnum] bone, left wrist, initial encounter for open fracture -S62135D Nondisplaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with routine healing -S62135G Nondisplaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with delayed healing -S62135K Nondisplaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with nonunion -S62135P Nondisplaced fracture of capitate [os magnum] bone, left wrist, subsequent encounter for fracture with malunion -S62135S Nondisplaced fracture of capitate [os magnum] bone, left wrist, sequela -S62136A Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, initial encounter for closed fracture -S62136B Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, initial encounter for open fracture -S62136D Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62136G Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62136K Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62136P Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62136S Nondisplaced fracture of capitate [os magnum] bone, unspecified wrist, sequela -S62141A Displaced fracture of body of hamate [unciform] bone, right wrist, initial encounter for closed fracture -S62141B Displaced fracture of body of hamate [unciform] bone, right wrist, initial encounter for open fracture -S62141D Displaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with routine healing -S62141G Displaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62141K Displaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with nonunion -S62141P Displaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with malunion -S62141S Displaced fracture of body of hamate [unciform] bone, right wrist, sequela -S62142A Displaced fracture of body of hamate [unciform] bone, left wrist, initial encounter for closed fracture -S62142B Displaced fracture of body of hamate [unciform] bone, left wrist, initial encounter for open fracture -S62142D Displaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with routine healing -S62142G Displaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62142K Displaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with nonunion -S62142P Displaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with malunion -S62142S Displaced fracture of body of hamate [unciform] bone, left wrist, sequela -S62143A Displaced fracture of body of hamate [unciform] bone, unspecified wrist, initial encounter for closed fracture -S62143B Displaced fracture of body of hamate [unciform] bone, unspecified wrist, initial encounter for open fracture -S62143D Displaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62143G Displaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62143K Displaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62143P Displaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62143S Displaced fracture of body of hamate [unciform] bone, unspecified wrist, sequela -S62144A Nondisplaced fracture of body of hamate [unciform] bone, right wrist, initial encounter for closed fracture -S62144B Nondisplaced fracture of body of hamate [unciform] bone, right wrist, initial encounter for open fracture -S62144D Nondisplaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with routine healing -S62144G Nondisplaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62144K Nondisplaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with nonunion -S62144P Nondisplaced fracture of body of hamate [unciform] bone, right wrist, subsequent encounter for fracture with malunion -S62144S Nondisplaced fracture of body of hamate [unciform] bone, right wrist, sequela -S62145A Nondisplaced fracture of body of hamate [unciform] bone, left wrist, initial encounter for closed fracture -S62145B Nondisplaced fracture of body of hamate [unciform] bone, left wrist, initial encounter for open fracture -S62145D Nondisplaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with routine healing -S62145G Nondisplaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62145K Nondisplaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with nonunion -S62145P Nondisplaced fracture of body of hamate [unciform] bone, left wrist, subsequent encounter for fracture with malunion -S62145S Nondisplaced fracture of body of hamate [unciform] bone, left wrist, sequela -S62146A Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, initial encounter for closed fracture -S62146B Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, initial encounter for open fracture -S62146D Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62146G Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62146K Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62146P Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62146S Nondisplaced fracture of body of hamate [unciform] bone, unspecified wrist, sequela -S62151A Displaced fracture of hook process of hamate [unciform] bone, right wrist, initial encounter for closed fracture -S62151B Displaced fracture of hook process of hamate [unciform] bone, right wrist, initial encounter for open fracture -S62151D Displaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with routine healing -S62151G Displaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62151K Displaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with nonunion -S62151P Displaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with malunion -S62151S Displaced fracture of hook process of hamate [unciform] bone, right wrist, sequela -S62152A Displaced fracture of hook process of hamate [unciform] bone, left wrist, initial encounter for closed fracture -S62152B Displaced fracture of hook process of hamate [unciform] bone, left wrist, initial encounter for open fracture -S62152D Displaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with routine healing -S62152G Displaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62152K Displaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with nonunion -S62152P Displaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with malunion -S62152S Displaced fracture of hook process of hamate [unciform] bone, left wrist, sequela -S62153A Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, initial encounter for closed fracture -S62153B Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, initial encounter for open fracture -S62153D Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62153G Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62153K Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62153P Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62153S Displaced fracture of hook process of hamate [unciform] bone, unspecified wrist, sequela -S62154A Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, initial encounter for closed fracture -S62154B Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, initial encounter for open fracture -S62154D Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with routine healing -S62154G Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with delayed healing -S62154K Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with nonunion -S62154P Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, subsequent encounter for fracture with malunion -S62154S Nondisplaced fracture of hook process of hamate [unciform] bone, right wrist, sequela -S62155A Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, initial encounter for closed fracture -S62155B Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, initial encounter for open fracture -S62155D Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with routine healing -S62155G Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with delayed healing -S62155K Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with nonunion -S62155P Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, subsequent encounter for fracture with malunion -S62155S Nondisplaced fracture of hook process of hamate [unciform] bone, left wrist, sequela -S62156A Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, initial encounter for closed fracture -S62156B Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, initial encounter for open fracture -S62156D Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with routine healing -S62156G Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with delayed healing -S62156K Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with nonunion -S62156P Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, subsequent encounter for fracture with malunion -S62156S Nondisplaced fracture of hook process of hamate [unciform] bone, unspecified wrist, sequela -S62161A Displaced fracture of pisiform, right wrist, initial encounter for closed fracture -S62161B Displaced fracture of pisiform, right wrist, initial encounter for open fracture -S62161D Displaced fracture of pisiform, right wrist, subsequent encounter for fracture with routine healing -S62161G Displaced fracture of pisiform, right wrist, subsequent encounter for fracture with delayed healing -S62161K Displaced fracture of pisiform, right wrist, subsequent encounter for fracture with nonunion -S62161P Displaced fracture of pisiform, right wrist, subsequent encounter for fracture with malunion -S62161S Displaced fracture of pisiform, right wrist, sequela -S62162A Displaced fracture of pisiform, left wrist, initial encounter for closed fracture -S62162B Displaced fracture of pisiform, left wrist, initial encounter for open fracture -S62162D Displaced fracture of pisiform, left wrist, subsequent encounter for fracture with routine healing -S62162G Displaced fracture of pisiform, left wrist, subsequent encounter for fracture with delayed healing -S62162K Displaced fracture of pisiform, left wrist, subsequent encounter for fracture with nonunion -S62162P Displaced fracture of pisiform, left wrist, subsequent encounter for fracture with malunion -S62162S Displaced fracture of pisiform, left wrist, sequela -S62163A Displaced fracture of pisiform, unspecified wrist, initial encounter for closed fracture -S62163B Displaced fracture of pisiform, unspecified wrist, initial encounter for open fracture -S62163D Displaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with routine healing -S62163G Displaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with delayed healing -S62163K Displaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with nonunion -S62163P Displaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with malunion -S62163S Displaced fracture of pisiform, unspecified wrist, sequela -S62164A Nondisplaced fracture of pisiform, right wrist, initial encounter for closed fracture -S62164B Nondisplaced fracture of pisiform, right wrist, initial encounter for open fracture -S62164D Nondisplaced fracture of pisiform, right wrist, subsequent encounter for fracture with routine healing -S62164G Nondisplaced fracture of pisiform, right wrist, subsequent encounter for fracture with delayed healing -S62164K Nondisplaced fracture of pisiform, right wrist, subsequent encounter for fracture with nonunion -S62164P Nondisplaced fracture of pisiform, right wrist, subsequent encounter for fracture with malunion -S62164S Nondisplaced fracture of pisiform, right wrist, sequela -S62165A Nondisplaced fracture of pisiform, left wrist, initial encounter for closed fracture -S62165B Nondisplaced fracture of pisiform, left wrist, initial encounter for open fracture -S62165D Nondisplaced fracture of pisiform, left wrist, subsequent encounter for fracture with routine healing -S62165G Nondisplaced fracture of pisiform, left wrist, subsequent encounter for fracture with delayed healing -S62165K Nondisplaced fracture of pisiform, left wrist, subsequent encounter for fracture with nonunion -S62165P Nondisplaced fracture of pisiform, left wrist, subsequent encounter for fracture with malunion -S62165S Nondisplaced fracture of pisiform, left wrist, sequela -S62166A Nondisplaced fracture of pisiform, unspecified wrist, initial encounter for closed fracture -S62166B Nondisplaced fracture of pisiform, unspecified wrist, initial encounter for open fracture -S62166D Nondisplaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with routine healing -S62166G Nondisplaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with delayed healing -S62166K Nondisplaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with nonunion -S62166P Nondisplaced fracture of pisiform, unspecified wrist, subsequent encounter for fracture with malunion -S62166S Nondisplaced fracture of pisiform, unspecified wrist, sequela -S62171A Displaced fracture of trapezium [larger multangular], right wrist, initial encounter for closed fracture -S62171B Displaced fracture of trapezium [larger multangular], right wrist, initial encounter for open fracture -S62171D Displaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with routine healing -S62171G Displaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with delayed healing -S62171K Displaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with nonunion -S62171P Displaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with malunion -S62171S Displaced fracture of trapezium [larger multangular], right wrist, sequela -S62172A Displaced fracture of trapezium [larger multangular], left wrist, initial encounter for closed fracture -S62172B Displaced fracture of trapezium [larger multangular], left wrist, initial encounter for open fracture -S62172D Displaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with routine healing -S62172G Displaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with delayed healing -S62172K Displaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with nonunion -S62172P Displaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with malunion -S62172S Displaced fracture of trapezium [larger multangular], left wrist, sequela -S62173A Displaced fracture of trapezium [larger multangular], unspecified wrist, initial encounter for closed fracture -S62173B Displaced fracture of trapezium [larger multangular], unspecified wrist, initial encounter for open fracture -S62173D Displaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with routine healing -S62173G Displaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with delayed healing -S62173K Displaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with nonunion -S62173P Displaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with malunion -S62173S Displaced fracture of trapezium [larger multangular], unspecified wrist, sequela -S62174A Nondisplaced fracture of trapezium [larger multangular], right wrist, initial encounter for closed fracture -S62174B Nondisplaced fracture of trapezium [larger multangular], right wrist, initial encounter for open fracture -S62174D Nondisplaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with routine healing -S62174G Nondisplaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with delayed healing -S62174K Nondisplaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with nonunion -S62174P Nondisplaced fracture of trapezium [larger multangular], right wrist, subsequent encounter for fracture with malunion -S62174S Nondisplaced fracture of trapezium [larger multangular], right wrist, sequela -S62175A Nondisplaced fracture of trapezium [larger multangular], left wrist, initial encounter for closed fracture -S62175B Nondisplaced fracture of trapezium [larger multangular], left wrist, initial encounter for open fracture -S62175D Nondisplaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with routine healing -S62175G Nondisplaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with delayed healing -S62175K Nondisplaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with nonunion -S62175P Nondisplaced fracture of trapezium [larger multangular], left wrist, subsequent encounter for fracture with malunion -S62175S Nondisplaced fracture of trapezium [larger multangular], left wrist, sequela -S62176A Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, initial encounter for closed fracture -S62176B Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, initial encounter for open fracture -S62176D Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with routine healing -S62176G Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with delayed healing -S62176K Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with nonunion -S62176P Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, subsequent encounter for fracture with malunion -S62176S Nondisplaced fracture of trapezium [larger multangular], unspecified wrist, sequela -S62181A Displaced fracture of trapezoid [smaller multangular], right wrist, initial encounter for closed fracture -S62181B Displaced fracture of trapezoid [smaller multangular], right wrist, initial encounter for open fracture -S62181D Displaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with routine healing -S62181G Displaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with delayed healing -S62181K Displaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with nonunion -S62181P Displaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with malunion -S62181S Displaced fracture of trapezoid [smaller multangular], right wrist, sequela -S62182A Displaced fracture of trapezoid [smaller multangular], left wrist, initial encounter for closed fracture -S62182B Displaced fracture of trapezoid [smaller multangular], left wrist, initial encounter for open fracture -S62182D Displaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with routine healing -S62182G Displaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with delayed healing -S62182K Displaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with nonunion -S62182P Displaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with malunion -S62182S Displaced fracture of trapezoid [smaller multangular], left wrist, sequela -S62183A Displaced fracture of trapezoid [smaller multangular], unspecified wrist, initial encounter for closed fracture -S62183B Displaced fracture of trapezoid [smaller multangular], unspecified wrist, initial encounter for open fracture -S62183D Displaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with routine healing -S62183G Displaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with delayed healing -S62183K Displaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with nonunion -S62183P Displaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with malunion -S62183S Displaced fracture of trapezoid [smaller multangular], unspecified wrist, sequela -S62184A Nondisplaced fracture of trapezoid [smaller multangular], right wrist, initial encounter for closed fracture -S62184B Nondisplaced fracture of trapezoid [smaller multangular], right wrist, initial encounter for open fracture -S62184D Nondisplaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with routine healing -S62184G Nondisplaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with delayed healing -S62184K Nondisplaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with nonunion -S62184P Nondisplaced fracture of trapezoid [smaller multangular], right wrist, subsequent encounter for fracture with malunion -S62184S Nondisplaced fracture of trapezoid [smaller multangular], right wrist, sequela -S62185A Nondisplaced fracture of trapezoid [smaller multangular], left wrist, initial encounter for closed fracture -S62185B Nondisplaced fracture of trapezoid [smaller multangular], left wrist, initial encounter for open fracture -S62185D Nondisplaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with routine healing -S62185G Nondisplaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with delayed healing -S62185K Nondisplaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with nonunion -S62185P Nondisplaced fracture of trapezoid [smaller multangular], left wrist, subsequent encounter for fracture with malunion -S62185S Nondisplaced fracture of trapezoid [smaller multangular], left wrist, sequela -S62186A Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, initial encounter for closed fracture -S62186B Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, initial encounter for open fracture -S62186D Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with routine healing -S62186G Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with delayed healing -S62186K Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with nonunion -S62186P Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, subsequent encounter for fracture with malunion -S62186S Nondisplaced fracture of trapezoid [smaller multangular], unspecified wrist, sequela -S62201A Unspecified fracture of first metacarpal bone, right hand, initial encounter for closed fracture -S62201B Unspecified fracture of first metacarpal bone, right hand, initial encounter for open fracture -S62201D Unspecified fracture of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62201G Unspecified fracture of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62201K Unspecified fracture of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62201P Unspecified fracture of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62201S Unspecified fracture of first metacarpal bone, right hand, sequela -S62202A Unspecified fracture of first metacarpal bone, left hand, initial encounter for closed fracture -S62202B Unspecified fracture of first metacarpal bone, left hand, initial encounter for open fracture -S62202D Unspecified fracture of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62202G Unspecified fracture of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62202K Unspecified fracture of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62202P Unspecified fracture of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62202S Unspecified fracture of first metacarpal bone, left hand, sequela -S62209A Unspecified fracture of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62209B Unspecified fracture of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62209D Unspecified fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62209G Unspecified fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62209K Unspecified fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62209P Unspecified fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62209S Unspecified fracture of first metacarpal bone, unspecified hand, sequela -S62211A Bennett's fracture, right hand, initial encounter for closed fracture -S62211B Bennett's fracture, right hand, initial encounter for open fracture -S62211D Bennett's fracture, right hand, subsequent encounter for fracture with routine healing -S62211G Bennett's fracture, right hand, subsequent encounter for fracture with delayed healing -S62211K Bennett's fracture, right hand, subsequent encounter for fracture with nonunion -S62211P Bennett's fracture, right hand, subsequent encounter for fracture with malunion -S62211S Bennett's fracture, right hand, sequela -S62212A Bennett's fracture, left hand, initial encounter for closed fracture -S62212B Bennett's fracture, left hand, initial encounter for open fracture -S62212D Bennett's fracture, left hand, subsequent encounter for fracture with routine healing -S62212G Bennett's fracture, left hand, subsequent encounter for fracture with delayed healing -S62212K Bennett's fracture, left hand, subsequent encounter for fracture with nonunion -S62212P Bennett's fracture, left hand, subsequent encounter for fracture with malunion -S62212S Bennett's fracture, left hand, sequela -S62213A Bennett's fracture, unspecified hand, initial encounter for closed fracture -S62213B Bennett's fracture, unspecified hand, initial encounter for open fracture -S62213D Bennett's fracture, unspecified hand, subsequent encounter for fracture with routine healing -S62213G Bennett's fracture, unspecified hand, subsequent encounter for fracture with delayed healing -S62213K Bennett's fracture, unspecified hand, subsequent encounter for fracture with nonunion -S62213P Bennett's fracture, unspecified hand, subsequent encounter for fracture with malunion -S62213S Bennett's fracture, unspecified hand, sequela -S62221A Displaced Rolando's fracture, right hand, initial encounter for closed fracture -S62221B Displaced Rolando's fracture, right hand, initial encounter for open fracture -S62221D Displaced Rolando's fracture, right hand, subsequent encounter for fracture with routine healing -S62221G Displaced Rolando's fracture, right hand, subsequent encounter for fracture with delayed healing -S62221K Displaced Rolando's fracture, right hand, subsequent encounter for fracture with nonunion -S62221P Displaced Rolando's fracture, right hand, subsequent encounter for fracture with malunion -S62221S Displaced Rolando's fracture, right hand, sequela -S62222A Displaced Rolando's fracture, left hand, initial encounter for closed fracture -S62222B Displaced Rolando's fracture, left hand, initial encounter for open fracture -S62222D Displaced Rolando's fracture, left hand, subsequent encounter for fracture with routine healing -S62222G Displaced Rolando's fracture, left hand, subsequent encounter for fracture with delayed healing -S62222K Displaced Rolando's fracture, left hand, subsequent encounter for fracture with nonunion -S62222P Displaced Rolando's fracture, left hand, subsequent encounter for fracture with malunion -S62222S Displaced Rolando's fracture, left hand, sequela -S62223A Displaced Rolando's fracture, unspecified hand, initial encounter for closed fracture -S62223B Displaced Rolando's fracture, unspecified hand, initial encounter for open fracture -S62223D Displaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with routine healing -S62223G Displaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with delayed healing -S62223K Displaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with nonunion -S62223P Displaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with malunion -S62223S Displaced Rolando's fracture, unspecified hand, sequela -S62224A Nondisplaced Rolando's fracture, right hand, initial encounter for closed fracture -S62224B Nondisplaced Rolando's fracture, right hand, initial encounter for open fracture -S62224D Nondisplaced Rolando's fracture, right hand, subsequent encounter for fracture with routine healing -S62224G Nondisplaced Rolando's fracture, right hand, subsequent encounter for fracture with delayed healing -S62224K Nondisplaced Rolando's fracture, right hand, subsequent encounter for fracture with nonunion -S62224P Nondisplaced Rolando's fracture, right hand, subsequent encounter for fracture with malunion -S62224S Nondisplaced Rolando's fracture, right hand, sequela -S62225A Nondisplaced Rolando's fracture, left hand, initial encounter for closed fracture -S62225B Nondisplaced Rolando's fracture, left hand, initial encounter for open fracture -S62225D Nondisplaced Rolando's fracture, left hand, subsequent encounter for fracture with routine healing -S62225G Nondisplaced Rolando's fracture, left hand, subsequent encounter for fracture with delayed healing -S62225K Nondisplaced Rolando's fracture, left hand, subsequent encounter for fracture with nonunion -S62225P Nondisplaced Rolando's fracture, left hand, subsequent encounter for fracture with malunion -S62225S Nondisplaced Rolando's fracture, left hand, sequela -S62226A Nondisplaced Rolando's fracture, unspecified hand, initial encounter for closed fracture -S62226B Nondisplaced Rolando's fracture, unspecified hand, initial encounter for open fracture -S62226D Nondisplaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with routine healing -S62226G Nondisplaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with delayed healing -S62226K Nondisplaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with nonunion -S62226P Nondisplaced Rolando's fracture, unspecified hand, subsequent encounter for fracture with malunion -S62226S Nondisplaced Rolando's fracture, unspecified hand, sequela -S62231A Other displaced fracture of base of first metacarpal bone, right hand, initial encounter for closed fracture -S62231B Other displaced fracture of base of first metacarpal bone, right hand, initial encounter for open fracture -S62231D Other displaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62231G Other displaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62231K Other displaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62231P Other displaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62231S Other displaced fracture of base of first metacarpal bone, right hand, sequela -S62232A Other displaced fracture of base of first metacarpal bone, left hand, initial encounter for closed fracture -S62232B Other displaced fracture of base of first metacarpal bone, left hand, initial encounter for open fracture -S62232D Other displaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62232G Other displaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62232K Other displaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62232P Other displaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62232S Other displaced fracture of base of first metacarpal bone, left hand, sequela -S62233A Other displaced fracture of base of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62233B Other displaced fracture of base of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62233D Other displaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62233G Other displaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62233K Other displaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62233P Other displaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62233S Other displaced fracture of base of first metacarpal bone, unspecified hand, sequela -S62234A Other nondisplaced fracture of base of first metacarpal bone, right hand, initial encounter for closed fracture -S62234B Other nondisplaced fracture of base of first metacarpal bone, right hand, initial encounter for open fracture -S62234D Other nondisplaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62234G Other nondisplaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62234K Other nondisplaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62234P Other nondisplaced fracture of base of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62234S Other nondisplaced fracture of base of first metacarpal bone, right hand, sequela -S62235A Other nondisplaced fracture of base of first metacarpal bone, left hand, initial encounter for closed fracture -S62235B Other nondisplaced fracture of base of first metacarpal bone, left hand, initial encounter for open fracture -S62235D Other nondisplaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62235G Other nondisplaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62235K Other nondisplaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62235P Other nondisplaced fracture of base of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62235S Other nondisplaced fracture of base of first metacarpal bone, left hand, sequela -S62236A Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62236B Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62236D Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62236G Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62236K Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62236P Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62236S Other nondisplaced fracture of base of first metacarpal bone, unspecified hand, sequela -S62241A Displaced fracture of shaft of first metacarpal bone, right hand, initial encounter for closed fracture -S62241B Displaced fracture of shaft of first metacarpal bone, right hand, initial encounter for open fracture -S62241D Displaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62241G Displaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62241K Displaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62241P Displaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62241S Displaced fracture of shaft of first metacarpal bone, right hand, sequela -S62242A Displaced fracture of shaft of first metacarpal bone, left hand, initial encounter for closed fracture -S62242B Displaced fracture of shaft of first metacarpal bone, left hand, initial encounter for open fracture -S62242D Displaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62242G Displaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62242K Displaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62242P Displaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62242S Displaced fracture of shaft of first metacarpal bone, left hand, sequela -S62243A Displaced fracture of shaft of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62243B Displaced fracture of shaft of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62243D Displaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62243G Displaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62243K Displaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62243P Displaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62243S Displaced fracture of shaft of first metacarpal bone, unspecified hand, sequela -S62244A Nondisplaced fracture of shaft of first metacarpal bone, right hand, initial encounter for closed fracture -S62244B Nondisplaced fracture of shaft of first metacarpal bone, right hand, initial encounter for open fracture -S62244D Nondisplaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62244G Nondisplaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62244K Nondisplaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62244P Nondisplaced fracture of shaft of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62244S Nondisplaced fracture of shaft of first metacarpal bone, right hand, sequela -S62245A Nondisplaced fracture of shaft of first metacarpal bone, left hand, initial encounter for closed fracture -S62245B Nondisplaced fracture of shaft of first metacarpal bone, left hand, initial encounter for open fracture -S62245D Nondisplaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62245G Nondisplaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62245K Nondisplaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62245P Nondisplaced fracture of shaft of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62245S Nondisplaced fracture of shaft of first metacarpal bone, left hand, sequela -S62246A Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62246B Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62246D Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62246G Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62246K Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62246P Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62246S Nondisplaced fracture of shaft of first metacarpal bone, unspecified hand, sequela -S62251A Displaced fracture of neck of first metacarpal bone, right hand, initial encounter for closed fracture -S62251B Displaced fracture of neck of first metacarpal bone, right hand, initial encounter for open fracture -S62251D Displaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62251G Displaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62251K Displaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62251P Displaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62251S Displaced fracture of neck of first metacarpal bone, right hand, sequela -S62252A Displaced fracture of neck of first metacarpal bone, left hand, initial encounter for closed fracture -S62252B Displaced fracture of neck of first metacarpal bone, left hand, initial encounter for open fracture -S62252D Displaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62252G Displaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62252K Displaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62252P Displaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62252S Displaced fracture of neck of first metacarpal bone, left hand, sequela -S62253A Displaced fracture of neck of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62253B Displaced fracture of neck of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62253D Displaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62253G Displaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62253K Displaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62253P Displaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62253S Displaced fracture of neck of first metacarpal bone, unspecified hand, sequela -S62254A Nondisplaced fracture of neck of first metacarpal bone, right hand, initial encounter for closed fracture -S62254B Nondisplaced fracture of neck of first metacarpal bone, right hand, initial encounter for open fracture -S62254D Nondisplaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62254G Nondisplaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62254K Nondisplaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62254P Nondisplaced fracture of neck of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62254S Nondisplaced fracture of neck of first metacarpal bone, right hand, sequela -S62255A Nondisplaced fracture of neck of first metacarpal bone, left hand, initial encounter for closed fracture -S62255B Nondisplaced fracture of neck of first metacarpal bone, left hand, initial encounter for open fracture -S62255D Nondisplaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62255G Nondisplaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62255K Nondisplaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62255P Nondisplaced fracture of neck of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62255S Nondisplaced fracture of neck of first metacarpal bone, left hand, sequela -S62256A Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62256B Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62256D Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62256G Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62256K Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62256P Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62256S Nondisplaced fracture of neck of first metacarpal bone, unspecified hand, sequela -S62291A Other fracture of first metacarpal bone, right hand, initial encounter for closed fracture -S62291B Other fracture of first metacarpal bone, right hand, initial encounter for open fracture -S62291D Other fracture of first metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62291G Other fracture of first metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62291K Other fracture of first metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62291P Other fracture of first metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62291S Other fracture of first metacarpal bone, right hand, sequela -S62292A Other fracture of first metacarpal bone, left hand, initial encounter for closed fracture -S62292B Other fracture of first metacarpal bone, left hand, initial encounter for open fracture -S62292D Other fracture of first metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62292G Other fracture of first metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62292K Other fracture of first metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62292P Other fracture of first metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62292S Other fracture of first metacarpal bone, left hand, sequela -S62299A Other fracture of first metacarpal bone, unspecified hand, initial encounter for closed fracture -S62299B Other fracture of first metacarpal bone, unspecified hand, initial encounter for open fracture -S62299D Other fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with routine healing -S62299G Other fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with delayed healing -S62299K Other fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with nonunion -S62299P Other fracture of first metacarpal bone, unspecified hand, subsequent encounter for fracture with malunion -S62299S Other fracture of first metacarpal bone, unspecified hand, sequela -S62300A Unspecified fracture of second metacarpal bone, right hand, initial encounter for closed fracture -S62300B Unspecified fracture of second metacarpal bone, right hand, initial encounter for open fracture -S62300D Unspecified fracture of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62300G Unspecified fracture of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62300K Unspecified fracture of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62300P Unspecified fracture of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62300S Unspecified fracture of second metacarpal bone, right hand, sequela -S62301A Unspecified fracture of second metacarpal bone, left hand, initial encounter for closed fracture -S62301B Unspecified fracture of second metacarpal bone, left hand, initial encounter for open fracture -S62301D Unspecified fracture of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62301G Unspecified fracture of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62301K Unspecified fracture of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62301P Unspecified fracture of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62301S Unspecified fracture of second metacarpal bone, left hand, sequela -S62302A Unspecified fracture of third metacarpal bone, right hand, initial encounter for closed fracture -S62302B Unspecified fracture of third metacarpal bone, right hand, initial encounter for open fracture -S62302D Unspecified fracture of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62302G Unspecified fracture of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62302K Unspecified fracture of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62302P Unspecified fracture of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62302S Unspecified fracture of third metacarpal bone, right hand, sequela -S62303A Unspecified fracture of third metacarpal bone, left hand, initial encounter for closed fracture -S62303B Unspecified fracture of third metacarpal bone, left hand, initial encounter for open fracture -S62303D Unspecified fracture of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62303G Unspecified fracture of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62303K Unspecified fracture of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62303P Unspecified fracture of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62303S Unspecified fracture of third metacarpal bone, left hand, sequela -S62304A Unspecified fracture of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62304B Unspecified fracture of fourth metacarpal bone, right hand, initial encounter for open fracture -S62304D Unspecified fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62304G Unspecified fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62304K Unspecified fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62304P Unspecified fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62304S Unspecified fracture of fourth metacarpal bone, right hand, sequela -S62305A Unspecified fracture of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62305B Unspecified fracture of fourth metacarpal bone, left hand, initial encounter for open fracture -S62305D Unspecified fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62305G Unspecified fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62305K Unspecified fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62305P Unspecified fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62305S Unspecified fracture of fourth metacarpal bone, left hand, sequela -S62306A Unspecified fracture of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62306B Unspecified fracture of fifth metacarpal bone, right hand, initial encounter for open fracture -S62306D Unspecified fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62306G Unspecified fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62306K Unspecified fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62306P Unspecified fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62306S Unspecified fracture of fifth metacarpal bone, right hand, sequela -S62307A Unspecified fracture of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62307B Unspecified fracture of fifth metacarpal bone, left hand, initial encounter for open fracture -S62307D Unspecified fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62307G Unspecified fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62307K Unspecified fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62307P Unspecified fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62307S Unspecified fracture of fifth metacarpal bone, left hand, sequela -S62308A Unspecified fracture of other metacarpal bone, initial encounter for closed fracture -S62308B Unspecified fracture of other metacarpal bone, initial encounter for open fracture -S62308D Unspecified fracture of other metacarpal bone, subsequent encounter for fracture with routine healing -S62308G Unspecified fracture of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62308K Unspecified fracture of other metacarpal bone, subsequent encounter for fracture with nonunion -S62308P Unspecified fracture of other metacarpal bone, subsequent encounter for fracture with malunion -S62308S Unspecified fracture of other metacarpal bone, sequela -S62309A Unspecified fracture of unspecified metacarpal bone, initial encounter for closed fracture -S62309B Unspecified fracture of unspecified metacarpal bone, initial encounter for open fracture -S62309D Unspecified fracture of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62309G Unspecified fracture of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62309K Unspecified fracture of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62309P Unspecified fracture of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62309S Unspecified fracture of unspecified metacarpal bone, sequela -S62310A Displaced fracture of base of second metacarpal bone, right hand, initial encounter for closed fracture -S62310B Displaced fracture of base of second metacarpal bone, right hand, initial encounter for open fracture -S62310D Displaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62310G Displaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62310K Displaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62310P Displaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62310S Displaced fracture of base of second metacarpal bone, right hand, sequela -S62311A Displaced fracture of base of second metacarpal bone. left hand, initial encounter for closed fracture -S62311B Displaced fracture of base of second metacarpal bone. left hand, initial encounter for open fracture -S62311D Displaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with routine healing -S62311G Displaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with delayed healing -S62311K Displaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with nonunion -S62311P Displaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with malunion -S62311S Displaced fracture of base of second metacarpal bone. left hand, sequela -S62312A Displaced fracture of base of third metacarpal bone, right hand, initial encounter for closed fracture -S62312B Displaced fracture of base of third metacarpal bone, right hand, initial encounter for open fracture -S62312D Displaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62312G Displaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62312K Displaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62312P Displaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62312S Displaced fracture of base of third metacarpal bone, right hand, sequela -S62313A Displaced fracture of base of third metacarpal bone, left hand, initial encounter for closed fracture -S62313B Displaced fracture of base of third metacarpal bone, left hand, initial encounter for open fracture -S62313D Displaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62313G Displaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62313K Displaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62313P Displaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62313S Displaced fracture of base of third metacarpal bone, left hand, sequela -S62314A Displaced fracture of base of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62314B Displaced fracture of base of fourth metacarpal bone, right hand, initial encounter for open fracture -S62314D Displaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62314G Displaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62314K Displaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62314P Displaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62314S Displaced fracture of base of fourth metacarpal bone, right hand, sequela -S62315A Displaced fracture of base of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62315B Displaced fracture of base of fourth metacarpal bone, left hand, initial encounter for open fracture -S62315D Displaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62315G Displaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62315K Displaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62315P Displaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62315S Displaced fracture of base of fourth metacarpal bone, left hand, sequela -S62316A Displaced fracture of base of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62316B Displaced fracture of base of fifth metacarpal bone, right hand, initial encounter for open fracture -S62316D Displaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62316G Displaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62316K Displaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62316P Displaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62316S Displaced fracture of base of fifth metacarpal bone, right hand, sequela -S62317A Displaced fracture of base of fifth metacarpal bone. left hand, initial encounter for closed fracture -S62317B Displaced fracture of base of fifth metacarpal bone. left hand, initial encounter for open fracture -S62317D Displaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with routine healing -S62317G Displaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with delayed healing -S62317K Displaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with nonunion -S62317P Displaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with malunion -S62317S Displaced fracture of base of fifth metacarpal bone. left hand, sequela -S62318A Displaced fracture of base of other metacarpal bone, initial encounter for closed fracture -S62318B Displaced fracture of base of other metacarpal bone, initial encounter for open fracture -S62318D Displaced fracture of base of other metacarpal bone, subsequent encounter for fracture with routine healing -S62318G Displaced fracture of base of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62318K Displaced fracture of base of other metacarpal bone, subsequent encounter for fracture with nonunion -S62318P Displaced fracture of base of other metacarpal bone, subsequent encounter for fracture with malunion -S62318S Displaced fracture of base of other metacarpal bone, sequela -S62319A Displaced fracture of base of unspecified metacarpal bone, initial encounter for closed fracture -S62319B Displaced fracture of base of unspecified metacarpal bone, initial encounter for open fracture -S62319D Displaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62319G Displaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62319K Displaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62319P Displaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62319S Displaced fracture of base of unspecified metacarpal bone, sequela -S62320A Displaced fracture of shaft of second metacarpal bone, right hand, initial encounter for closed fracture -S62320B Displaced fracture of shaft of second metacarpal bone, right hand, initial encounter for open fracture -S62320D Displaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62320G Displaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62320K Displaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62320P Displaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62320S Displaced fracture of shaft of second metacarpal bone, right hand, sequela -S62321A Displaced fracture of shaft of second metacarpal bone, left hand, initial encounter for closed fracture -S62321B Displaced fracture of shaft of second metacarpal bone, left hand, initial encounter for open fracture -S62321D Displaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62321G Displaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62321K Displaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62321P Displaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62321S Displaced fracture of shaft of second metacarpal bone, left hand, sequela -S62322A Displaced fracture of shaft of third metacarpal bone, right hand, initial encounter for closed fracture -S62322B Displaced fracture of shaft of third metacarpal bone, right hand, initial encounter for open fracture -S62322D Displaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62322G Displaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62322K Displaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62322P Displaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62322S Displaced fracture of shaft of third metacarpal bone, right hand, sequela -S62323A Displaced fracture of shaft of third metacarpal bone, left hand, initial encounter for closed fracture -S62323B Displaced fracture of shaft of third metacarpal bone, left hand, initial encounter for open fracture -S62323D Displaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62323G Displaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62323K Displaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62323P Displaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62323S Displaced fracture of shaft of third metacarpal bone, left hand, sequela -S62324A Displaced fracture of shaft of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62324B Displaced fracture of shaft of fourth metacarpal bone, right hand, initial encounter for open fracture -S62324D Displaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62324G Displaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62324K Displaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62324P Displaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62324S Displaced fracture of shaft of fourth metacarpal bone, right hand, sequela -S62325A Displaced fracture of shaft of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62325B Displaced fracture of shaft of fourth metacarpal bone, left hand, initial encounter for open fracture -S62325D Displaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62325G Displaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62325K Displaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62325P Displaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62325S Displaced fracture of shaft of fourth metacarpal bone, left hand, sequela -S62326A Displaced fracture of shaft of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62326B Displaced fracture of shaft of fifth metacarpal bone, right hand, initial encounter for open fracture -S62326D Displaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62326G Displaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62326K Displaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62326P Displaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62326S Displaced fracture of shaft of fifth metacarpal bone, right hand, sequela -S62327A Displaced fracture of shaft of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62327B Displaced fracture of shaft of fifth metacarpal bone, left hand, initial encounter for open fracture -S62327D Displaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62327G Displaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62327K Displaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62327P Displaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62327S Displaced fracture of shaft of fifth metacarpal bone, left hand, sequela -S62328A Displaced fracture of shaft of other metacarpal bone, initial encounter for closed fracture -S62328B Displaced fracture of shaft of other metacarpal bone, initial encounter for open fracture -S62328D Displaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with routine healing -S62328G Displaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62328K Displaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with nonunion -S62328P Displaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with malunion -S62328S Displaced fracture of shaft of other metacarpal bone, sequela -S62329A Displaced fracture of shaft of unspecified metacarpal bone, initial encounter for closed fracture -S62329B Displaced fracture of shaft of unspecified metacarpal bone, initial encounter for open fracture -S62329D Displaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62329G Displaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62329K Displaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62329P Displaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62329S Displaced fracture of shaft of unspecified metacarpal bone, sequela -S62330A Displaced fracture of neck of second metacarpal bone, right hand, initial encounter for closed fracture -S62330B Displaced fracture of neck of second metacarpal bone, right hand, initial encounter for open fracture -S62330D Displaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62330G Displaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62330K Displaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62330P Displaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62330S Displaced fracture of neck of second metacarpal bone, right hand, sequela -S62331A Displaced fracture of neck of second metacarpal bone, left hand, initial encounter for closed fracture -S62331B Displaced fracture of neck of second metacarpal bone, left hand, initial encounter for open fracture -S62331D Displaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62331G Displaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62331K Displaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62331P Displaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62331S Displaced fracture of neck of second metacarpal bone, left hand, sequela -S62332A Displaced fracture of neck of third metacarpal bone, right hand, initial encounter for closed fracture -S62332B Displaced fracture of neck of third metacarpal bone, right hand, initial encounter for open fracture -S62332D Displaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62332G Displaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62332K Displaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62332P Displaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62332S Displaced fracture of neck of third metacarpal bone, right hand, sequela -S62333A Displaced fracture of neck of third metacarpal bone, left hand, initial encounter for closed fracture -S62333B Displaced fracture of neck of third metacarpal bone, left hand, initial encounter for open fracture -S62333D Displaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62333G Displaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62333K Displaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62333P Displaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62333S Displaced fracture of neck of third metacarpal bone, left hand, sequela -S62334A Displaced fracture of neck of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62334B Displaced fracture of neck of fourth metacarpal bone, right hand, initial encounter for open fracture -S62334D Displaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62334G Displaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62334K Displaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62334P Displaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62334S Displaced fracture of neck of fourth metacarpal bone, right hand, sequela -S62335A Displaced fracture of neck of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62335B Displaced fracture of neck of fourth metacarpal bone, left hand, initial encounter for open fracture -S62335D Displaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62335G Displaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62335K Displaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62335P Displaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62335S Displaced fracture of neck of fourth metacarpal bone, left hand, sequela -S62336A Displaced fracture of neck of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62336B Displaced fracture of neck of fifth metacarpal bone, right hand, initial encounter for open fracture -S62336D Displaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62336G Displaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62336K Displaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62336P Displaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62336S Displaced fracture of neck of fifth metacarpal bone, right hand, sequela -S62337A Displaced fracture of neck of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62337B Displaced fracture of neck of fifth metacarpal bone, left hand, initial encounter for open fracture -S62337D Displaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62337G Displaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62337K Displaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62337P Displaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62337S Displaced fracture of neck of fifth metacarpal bone, left hand, sequela -S62338A Displaced fracture of neck of other metacarpal bone, initial encounter for closed fracture -S62338B Displaced fracture of neck of other metacarpal bone, initial encounter for open fracture -S62338D Displaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with routine healing -S62338G Displaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62338K Displaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with nonunion -S62338P Displaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with malunion -S62338S Displaced fracture of neck of other metacarpal bone, sequela -S62339A Displaced fracture of neck of unspecified metacarpal bone, initial encounter for closed fracture -S62339B Displaced fracture of neck of unspecified metacarpal bone, initial encounter for open fracture -S62339D Displaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62339G Displaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62339K Displaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62339P Displaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62339S Displaced fracture of neck of unspecified metacarpal bone, sequela -S62340A Nondisplaced fracture of base of second metacarpal bone, right hand, initial encounter for closed fracture -S62340B Nondisplaced fracture of base of second metacarpal bone, right hand, initial encounter for open fracture -S62340D Nondisplaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62340G Nondisplaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62340K Nondisplaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62340P Nondisplaced fracture of base of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62340S Nondisplaced fracture of base of second metacarpal bone, right hand, sequela -S62341A Nondisplaced fracture of base of second metacarpal bone. left hand, initial encounter for closed fracture -S62341B Nondisplaced fracture of base of second metacarpal bone. left hand, initial encounter for open fracture -S62341D Nondisplaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with routine healing -S62341G Nondisplaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with delayed healing -S62341K Nondisplaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with nonunion -S62341P Nondisplaced fracture of base of second metacarpal bone. left hand, subsequent encounter for fracture with malunion -S62341S Nondisplaced fracture of base of second metacarpal bone. left hand, sequela -S62342A Nondisplaced fracture of base of third metacarpal bone, right hand, initial encounter for closed fracture -S62342B Nondisplaced fracture of base of third metacarpal bone, right hand, initial encounter for open fracture -S62342D Nondisplaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62342G Nondisplaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62342K Nondisplaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62342P Nondisplaced fracture of base of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62342S Nondisplaced fracture of base of third metacarpal bone, right hand, sequela -S62343A Nondisplaced fracture of base of third metacarpal bone, left hand, initial encounter for closed fracture -S62343B Nondisplaced fracture of base of third metacarpal bone, left hand, initial encounter for open fracture -S62343D Nondisplaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62343G Nondisplaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62343K Nondisplaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62343P Nondisplaced fracture of base of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62343S Nondisplaced fracture of base of third metacarpal bone, left hand, sequela -S62344A Nondisplaced fracture of base of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62344B Nondisplaced fracture of base of fourth metacarpal bone, right hand, initial encounter for open fracture -S62344D Nondisplaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62344G Nondisplaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62344K Nondisplaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62344P Nondisplaced fracture of base of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62344S Nondisplaced fracture of base of fourth metacarpal bone, right hand, sequela -S62345A Nondisplaced fracture of base of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62345B Nondisplaced fracture of base of fourth metacarpal bone, left hand, initial encounter for open fracture -S62345D Nondisplaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62345G Nondisplaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62345K Nondisplaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62345P Nondisplaced fracture of base of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62345S Nondisplaced fracture of base of fourth metacarpal bone, left hand, sequela -S62346A Nondisplaced fracture of base of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62346B Nondisplaced fracture of base of fifth metacarpal bone, right hand, initial encounter for open fracture -S62346D Nondisplaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62346G Nondisplaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62346K Nondisplaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62346P Nondisplaced fracture of base of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62346S Nondisplaced fracture of base of fifth metacarpal bone, right hand, sequela -S62347A Nondisplaced fracture of base of fifth metacarpal bone. left hand, initial encounter for closed fracture -S62347B Nondisplaced fracture of base of fifth metacarpal bone. left hand, initial encounter for open fracture -S62347D Nondisplaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with routine healing -S62347G Nondisplaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with delayed healing -S62347K Nondisplaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with nonunion -S62347P Nondisplaced fracture of base of fifth metacarpal bone. left hand, subsequent encounter for fracture with malunion -S62347S Nondisplaced fracture of base of fifth metacarpal bone. left hand, sequela -S62348A Nondisplaced fracture of base of other metacarpal bone, initial encounter for closed fracture -S62348B Nondisplaced fracture of base of other metacarpal bone, initial encounter for open fracture -S62348D Nondisplaced fracture of base of other metacarpal bone, subsequent encounter for fracture with routine healing -S62348G Nondisplaced fracture of base of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62348K Nondisplaced fracture of base of other metacarpal bone, subsequent encounter for fracture with nonunion -S62348P Nondisplaced fracture of base of other metacarpal bone, subsequent encounter for fracture with malunion -S62348S Nondisplaced fracture of base of other metacarpal bone, sequela -S62349A Nondisplaced fracture of base of unspecified metacarpal bone, initial encounter for closed fracture -S62349B Nondisplaced fracture of base of unspecified metacarpal bone, initial encounter for open fracture -S62349D Nondisplaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62349G Nondisplaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62349K Nondisplaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62349P Nondisplaced fracture of base of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62349S Nondisplaced fracture of base of unspecified metacarpal bone, sequela -S62350A Nondisplaced fracture of shaft of second metacarpal bone, right hand, initial encounter for closed fracture -S62350B Nondisplaced fracture of shaft of second metacarpal bone, right hand, initial encounter for open fracture -S62350D Nondisplaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62350G Nondisplaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62350K Nondisplaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62350P Nondisplaced fracture of shaft of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62350S Nondisplaced fracture of shaft of second metacarpal bone, right hand, sequela -S62351A Nondisplaced fracture of shaft of second metacarpal bone, left hand, initial encounter for closed fracture -S62351B Nondisplaced fracture of shaft of second metacarpal bone, left hand, initial encounter for open fracture -S62351D Nondisplaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62351G Nondisplaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62351K Nondisplaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62351P Nondisplaced fracture of shaft of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62351S Nondisplaced fracture of shaft of second metacarpal bone, left hand, sequela -S62352A Nondisplaced fracture of shaft of third metacarpal bone, right hand, initial encounter for closed fracture -S62352B Nondisplaced fracture of shaft of third metacarpal bone, right hand, initial encounter for open fracture -S62352D Nondisplaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62352G Nondisplaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62352K Nondisplaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62352P Nondisplaced fracture of shaft of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62352S Nondisplaced fracture of shaft of third metacarpal bone, right hand, sequela -S62353A Nondisplaced fracture of shaft of third metacarpal bone, left hand, initial encounter for closed fracture -S62353B Nondisplaced fracture of shaft of third metacarpal bone, left hand, initial encounter for open fracture -S62353D Nondisplaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62353G Nondisplaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62353K Nondisplaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62353P Nondisplaced fracture of shaft of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62353S Nondisplaced fracture of shaft of third metacarpal bone, left hand, sequela -S62354A Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62354B Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, initial encounter for open fracture -S62354D Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62354G Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62354K Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62354P Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62354S Nondisplaced fracture of shaft of fourth metacarpal bone, right hand, sequela -S62355A Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62355B Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, initial encounter for open fracture -S62355D Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62355G Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62355K Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62355P Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62355S Nondisplaced fracture of shaft of fourth metacarpal bone, left hand, sequela -S62356A Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62356B Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, initial encounter for open fracture -S62356D Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62356G Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62356K Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62356P Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62356S Nondisplaced fracture of shaft of fifth metacarpal bone, right hand, sequela -S62357A Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62357B Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, initial encounter for open fracture -S62357D Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62357G Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62357K Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62357P Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62357S Nondisplaced fracture of shaft of fifth metacarpal bone, left hand, sequela -S62358A Nondisplaced fracture of shaft of other metacarpal bone, initial encounter for closed fracture -S62358B Nondisplaced fracture of shaft of other metacarpal bone, initial encounter for open fracture -S62358D Nondisplaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with routine healing -S62358G Nondisplaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62358K Nondisplaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with nonunion -S62358P Nondisplaced fracture of shaft of other metacarpal bone, subsequent encounter for fracture with malunion -S62358S Nondisplaced fracture of shaft of other metacarpal bone, sequela -S62359A Nondisplaced fracture of shaft of unspecified metacarpal bone, initial encounter for closed fracture -S62359B Nondisplaced fracture of shaft of unspecified metacarpal bone, initial encounter for open fracture -S62359D Nondisplaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62359G Nondisplaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62359K Nondisplaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62359P Nondisplaced fracture of shaft of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62359S Nondisplaced fracture of shaft of unspecified metacarpal bone, sequela -S62360A Nondisplaced fracture of neck of second metacarpal bone, right hand, initial encounter for closed fracture -S62360B Nondisplaced fracture of neck of second metacarpal bone, right hand, initial encounter for open fracture -S62360D Nondisplaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62360G Nondisplaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62360K Nondisplaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62360P Nondisplaced fracture of neck of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62360S Nondisplaced fracture of neck of second metacarpal bone, right hand, sequela -S62361A Nondisplaced fracture of neck of second metacarpal bone, left hand, initial encounter for closed fracture -S62361B Nondisplaced fracture of neck of second metacarpal bone, left hand, initial encounter for open fracture -S62361D Nondisplaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62361G Nondisplaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62361K Nondisplaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62361P Nondisplaced fracture of neck of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62361S Nondisplaced fracture of neck of second metacarpal bone, left hand, sequela -S62362A Nondisplaced fracture of neck of third metacarpal bone, right hand, initial encounter for closed fracture -S62362B Nondisplaced fracture of neck of third metacarpal bone, right hand, initial encounter for open fracture -S62362D Nondisplaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62362G Nondisplaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62362K Nondisplaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62362P Nondisplaced fracture of neck of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62362S Nondisplaced fracture of neck of third metacarpal bone, right hand, sequela -S62363A Nondisplaced fracture of neck of third metacarpal bone, left hand, initial encounter for closed fracture -S62363B Nondisplaced fracture of neck of third metacarpal bone, left hand, initial encounter for open fracture -S62363D Nondisplaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62363G Nondisplaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62363K Nondisplaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62363P Nondisplaced fracture of neck of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62363S Nondisplaced fracture of neck of third metacarpal bone, left hand, sequela -S62364A Nondisplaced fracture of neck of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62364B Nondisplaced fracture of neck of fourth metacarpal bone, right hand, initial encounter for open fracture -S62364D Nondisplaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62364G Nondisplaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62364K Nondisplaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62364P Nondisplaced fracture of neck of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62364S Nondisplaced fracture of neck of fourth metacarpal bone, right hand, sequela -S62365A Nondisplaced fracture of neck of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62365B Nondisplaced fracture of neck of fourth metacarpal bone, left hand, initial encounter for open fracture -S62365D Nondisplaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62365G Nondisplaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62365K Nondisplaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62365P Nondisplaced fracture of neck of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62365S Nondisplaced fracture of neck of fourth metacarpal bone, left hand, sequela -S62366A Nondisplaced fracture of neck of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62366B Nondisplaced fracture of neck of fifth metacarpal bone, right hand, initial encounter for open fracture -S62366D Nondisplaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62366G Nondisplaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62366K Nondisplaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62366P Nondisplaced fracture of neck of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62366S Nondisplaced fracture of neck of fifth metacarpal bone, right hand, sequela -S62367A Nondisplaced fracture of neck of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62367B Nondisplaced fracture of neck of fifth metacarpal bone, left hand, initial encounter for open fracture -S62367D Nondisplaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62367G Nondisplaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62367K Nondisplaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62367P Nondisplaced fracture of neck of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62367S Nondisplaced fracture of neck of fifth metacarpal bone, left hand, sequela -S62368A Nondisplaced fracture of neck of other metacarpal bone, initial encounter for closed fracture -S62368B Nondisplaced fracture of neck of other metacarpal bone, initial encounter for open fracture -S62368D Nondisplaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with routine healing -S62368G Nondisplaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62368K Nondisplaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with nonunion -S62368P Nondisplaced fracture of neck of other metacarpal bone, subsequent encounter for fracture with malunion -S62368S Nondisplaced fracture of neck of other metacarpal bone, sequela -S62369A Nondisplaced fracture of neck of unspecified metacarpal bone, initial encounter for closed fracture -S62369B Nondisplaced fracture of neck of unspecified metacarpal bone, initial encounter for open fracture -S62369D Nondisplaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62369G Nondisplaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62369K Nondisplaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62369P Nondisplaced fracture of neck of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62369S Nondisplaced fracture of neck of unspecified metacarpal bone, sequela -S62390A Other fracture of second metacarpal bone, right hand, initial encounter for closed fracture -S62390B Other fracture of second metacarpal bone, right hand, initial encounter for open fracture -S62390D Other fracture of second metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62390G Other fracture of second metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62390K Other fracture of second metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62390P Other fracture of second metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62390S Other fracture of second metacarpal bone, right hand, sequela -S62391A Other fracture of second metacarpal bone, left hand, initial encounter for closed fracture -S62391B Other fracture of second metacarpal bone, left hand, initial encounter for open fracture -S62391D Other fracture of second metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62391G Other fracture of second metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62391K Other fracture of second metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62391P Other fracture of second metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62391S Other fracture of second metacarpal bone, left hand, sequela -S62392A Other fracture of third metacarpal bone, right hand, initial encounter for closed fracture -S62392B Other fracture of third metacarpal bone, right hand, initial encounter for open fracture -S62392D Other fracture of third metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62392G Other fracture of third metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62392K Other fracture of third metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62392P Other fracture of third metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62392S Other fracture of third metacarpal bone, right hand, sequela -S62393A Other fracture of third metacarpal bone, left hand, initial encounter for closed fracture -S62393B Other fracture of third metacarpal bone, left hand, initial encounter for open fracture -S62393D Other fracture of third metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62393G Other fracture of third metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62393K Other fracture of third metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62393P Other fracture of third metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62393S Other fracture of third metacarpal bone, left hand, sequela -S62394A Other fracture of fourth metacarpal bone, right hand, initial encounter for closed fracture -S62394B Other fracture of fourth metacarpal bone, right hand, initial encounter for open fracture -S62394D Other fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62394G Other fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62394K Other fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62394P Other fracture of fourth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62394S Other fracture of fourth metacarpal bone, right hand, sequela -S62395A Other fracture of fourth metacarpal bone, left hand, initial encounter for closed fracture -S62395B Other fracture of fourth metacarpal bone, left hand, initial encounter for open fracture -S62395D Other fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62395G Other fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62395K Other fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62395P Other fracture of fourth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62395S Other fracture of fourth metacarpal bone, left hand, sequela -S62396A Other fracture of fifth metacarpal bone, right hand, initial encounter for closed fracture -S62396B Other fracture of fifth metacarpal bone, right hand, initial encounter for open fracture -S62396D Other fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with routine healing -S62396G Other fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with delayed healing -S62396K Other fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with nonunion -S62396P Other fracture of fifth metacarpal bone, right hand, subsequent encounter for fracture with malunion -S62396S Other fracture of fifth metacarpal bone, right hand, sequela -S62397A Other fracture of fifth metacarpal bone, left hand, initial encounter for closed fracture -S62397B Other fracture of fifth metacarpal bone, left hand, initial encounter for open fracture -S62397D Other fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with routine healing -S62397G Other fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with delayed healing -S62397K Other fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with nonunion -S62397P Other fracture of fifth metacarpal bone, left hand, subsequent encounter for fracture with malunion -S62397S Other fracture of fifth metacarpal bone, left hand, sequela -S62398A Other fracture of other metacarpal bone, initial encounter for closed fracture -S62398B Other fracture of other metacarpal bone, initial encounter for open fracture -S62398D Other fracture of other metacarpal bone, subsequent encounter for fracture with routine healing -S62398G Other fracture of other metacarpal bone, subsequent encounter for fracture with delayed healing -S62398K Other fracture of other metacarpal bone, subsequent encounter for fracture with nonunion -S62398P Other fracture of other metacarpal bone, subsequent encounter for fracture with malunion -S62398S Other fracture of other metacarpal bone, sequela -S62399A Other fracture of unspecified metacarpal bone, initial encounter for closed fracture -S62399B Other fracture of unspecified metacarpal bone, initial encounter for open fracture -S62399D Other fracture of unspecified metacarpal bone, subsequent encounter for fracture with routine healing -S62399G Other fracture of unspecified metacarpal bone, subsequent encounter for fracture with delayed healing -S62399K Other fracture of unspecified metacarpal bone, subsequent encounter for fracture with nonunion -S62399P Other fracture of unspecified metacarpal bone, subsequent encounter for fracture with malunion -S62399S Other fracture of unspecified metacarpal bone, sequela -S62501A Fracture of unspecified phalanx of right thumb, initial encounter for closed fracture -S62501B Fracture of unspecified phalanx of right thumb, initial encounter for open fracture -S62501D Fracture of unspecified phalanx of right thumb, subsequent encounter for fracture with routine healing -S62501G Fracture of unspecified phalanx of right thumb, subsequent encounter for fracture with delayed healing -S62501K Fracture of unspecified phalanx of right thumb, subsequent encounter for fracture with nonunion -S62501P Fracture of unspecified phalanx of right thumb, subsequent encounter for fracture with malunion -S62501S Fracture of unspecified phalanx of right thumb, sequela -S62502A Fracture of unspecified phalanx of left thumb, initial encounter for closed fracture -S62502B Fracture of unspecified phalanx of left thumb, initial encounter for open fracture -S62502D Fracture of unspecified phalanx of left thumb, subsequent encounter for fracture with routine healing -S62502G Fracture of unspecified phalanx of left thumb, subsequent encounter for fracture with delayed healing -S62502K Fracture of unspecified phalanx of left thumb, subsequent encounter for fracture with nonunion -S62502P Fracture of unspecified phalanx of left thumb, subsequent encounter for fracture with malunion -S62502S Fracture of unspecified phalanx of left thumb, sequela -S62509A Fracture of unspecified phalanx of unspecified thumb, initial encounter for closed fracture -S62509B Fracture of unspecified phalanx of unspecified thumb, initial encounter for open fracture -S62509D Fracture of unspecified phalanx of unspecified thumb, subsequent encounter for fracture with routine healing -S62509G Fracture of unspecified phalanx of unspecified thumb, subsequent encounter for fracture with delayed healing -S62509K Fracture of unspecified phalanx of unspecified thumb, subsequent encounter for fracture with nonunion -S62509P Fracture of unspecified phalanx of unspecified thumb, subsequent encounter for fracture with malunion -S62509S Fracture of unspecified phalanx of unspecified thumb, sequela -S62511A Displaced fracture of proximal phalanx of right thumb, initial encounter for closed fracture -S62511B Displaced fracture of proximal phalanx of right thumb, initial encounter for open fracture -S62511D Displaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with routine healing -S62511G Displaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with delayed healing -S62511K Displaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with nonunion -S62511P Displaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with malunion -S62511S Displaced fracture of proximal phalanx of right thumb, sequela -S62512A Displaced fracture of proximal phalanx of left thumb, initial encounter for closed fracture -S62512B Displaced fracture of proximal phalanx of left thumb, initial encounter for open fracture -S62512D Displaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with routine healing -S62512G Displaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with delayed healing -S62512K Displaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with nonunion -S62512P Displaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with malunion -S62512S Displaced fracture of proximal phalanx of left thumb, sequela -S62513A Displaced fracture of proximal phalanx of unspecified thumb, initial encounter for closed fracture -S62513B Displaced fracture of proximal phalanx of unspecified thumb, initial encounter for open fracture -S62513D Displaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with routine healing -S62513G Displaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with delayed healing -S62513K Displaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with nonunion -S62513P Displaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with malunion -S62513S Displaced fracture of proximal phalanx of unspecified thumb, sequela -S62514A Nondisplaced fracture of proximal phalanx of right thumb, initial encounter for closed fracture -S62514B Nondisplaced fracture of proximal phalanx of right thumb, initial encounter for open fracture -S62514D Nondisplaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with routine healing -S62514G Nondisplaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with delayed healing -S62514K Nondisplaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with nonunion -S62514P Nondisplaced fracture of proximal phalanx of right thumb, subsequent encounter for fracture with malunion -S62514S Nondisplaced fracture of proximal phalanx of right thumb, sequela -S62515A Nondisplaced fracture of proximal phalanx of left thumb, initial encounter for closed fracture -S62515B Nondisplaced fracture of proximal phalanx of left thumb, initial encounter for open fracture -S62515D Nondisplaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with routine healing -S62515G Nondisplaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with delayed healing -S62515K Nondisplaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with nonunion -S62515P Nondisplaced fracture of proximal phalanx of left thumb, subsequent encounter for fracture with malunion -S62515S Nondisplaced fracture of proximal phalanx of left thumb, sequela -S62516A Nondisplaced fracture of proximal phalanx of unspecified thumb, initial encounter for closed fracture -S62516B Nondisplaced fracture of proximal phalanx of unspecified thumb, initial encounter for open fracture -S62516D Nondisplaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with routine healing -S62516G Nondisplaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with delayed healing -S62516K Nondisplaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with nonunion -S62516P Nondisplaced fracture of proximal phalanx of unspecified thumb, subsequent encounter for fracture with malunion -S62516S Nondisplaced fracture of proximal phalanx of unspecified thumb, sequela -S62521A Displaced fracture of distal phalanx of right thumb, initial encounter for closed fracture -S62521B Displaced fracture of distal phalanx of right thumb, initial encounter for open fracture -S62521D Displaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with routine healing -S62521G Displaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with delayed healing -S62521K Displaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with nonunion -S62521P Displaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with malunion -S62521S Displaced fracture of distal phalanx of right thumb, sequela -S62522A Displaced fracture of distal phalanx of left thumb, initial encounter for closed fracture -S62522B Displaced fracture of distal phalanx of left thumb, initial encounter for open fracture -S62522D Displaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with routine healing -S62522G Displaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with delayed healing -S62522K Displaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with nonunion -S62522P Displaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with malunion -S62522S Displaced fracture of distal phalanx of left thumb, sequela -S62523A Displaced fracture of distal phalanx of unspecified thumb, initial encounter for closed fracture -S62523B Displaced fracture of distal phalanx of unspecified thumb, initial encounter for open fracture -S62523D Displaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with routine healing -S62523G Displaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with delayed healing -S62523K Displaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with nonunion -S62523P Displaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with malunion -S62523S Displaced fracture of distal phalanx of unspecified thumb, sequela -S62524A Nondisplaced fracture of distal phalanx of right thumb, initial encounter for closed fracture -S62524B Nondisplaced fracture of distal phalanx of right thumb, initial encounter for open fracture -S62524D Nondisplaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with routine healing -S62524G Nondisplaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with delayed healing -S62524K Nondisplaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with nonunion -S62524P Nondisplaced fracture of distal phalanx of right thumb, subsequent encounter for fracture with malunion -S62524S Nondisplaced fracture of distal phalanx of right thumb, sequela -S62525A Nondisplaced fracture of distal phalanx of left thumb, initial encounter for closed fracture -S62525B Nondisplaced fracture of distal phalanx of left thumb, initial encounter for open fracture -S62525D Nondisplaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with routine healing -S62525G Nondisplaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with delayed healing -S62525K Nondisplaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with nonunion -S62525P Nondisplaced fracture of distal phalanx of left thumb, subsequent encounter for fracture with malunion -S62525S Nondisplaced fracture of distal phalanx of left thumb, sequela -S62526A Nondisplaced fracture of distal phalanx of unspecified thumb, initial encounter for closed fracture -S62526B Nondisplaced fracture of distal phalanx of unspecified thumb, initial encounter for open fracture -S62526D Nondisplaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with routine healing -S62526G Nondisplaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with delayed healing -S62526K Nondisplaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with nonunion -S62526P Nondisplaced fracture of distal phalanx of unspecified thumb, subsequent encounter for fracture with malunion -S62526S Nondisplaced fracture of distal phalanx of unspecified thumb, sequela -S62600A Fracture of unspecified phalanx of right index finger, initial encounter for closed fracture -S62600B Fracture of unspecified phalanx of right index finger, initial encounter for open fracture -S62600D Fracture of unspecified phalanx of right index finger, subsequent encounter for fracture with routine healing -S62600G Fracture of unspecified phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62600K Fracture of unspecified phalanx of right index finger, subsequent encounter for fracture with nonunion -S62600P Fracture of unspecified phalanx of right index finger, subsequent encounter for fracture with malunion -S62600S Fracture of unspecified phalanx of right index finger, sequela -S62601A Fracture of unspecified phalanx of left index finger, initial encounter for closed fracture -S62601B Fracture of unspecified phalanx of left index finger, initial encounter for open fracture -S62601D Fracture of unspecified phalanx of left index finger, subsequent encounter for fracture with routine healing -S62601G Fracture of unspecified phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62601K Fracture of unspecified phalanx of left index finger, subsequent encounter for fracture with nonunion -S62601P Fracture of unspecified phalanx of left index finger, subsequent encounter for fracture with malunion -S62601S Fracture of unspecified phalanx of left index finger, sequela -S62602A Fracture of unspecified phalanx of right middle finger, initial encounter for closed fracture -S62602B Fracture of unspecified phalanx of right middle finger, initial encounter for open fracture -S62602D Fracture of unspecified phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62602G Fracture of unspecified phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62602K Fracture of unspecified phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62602P Fracture of unspecified phalanx of right middle finger, subsequent encounter for fracture with malunion -S62602S Fracture of unspecified phalanx of right middle finger, sequela -S62603A Fracture of unspecified phalanx of left middle finger, initial encounter for closed fracture -S62603B Fracture of unspecified phalanx of left middle finger, initial encounter for open fracture -S62603D Fracture of unspecified phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62603G Fracture of unspecified phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62603K Fracture of unspecified phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62603P Fracture of unspecified phalanx of left middle finger, subsequent encounter for fracture with malunion -S62603S Fracture of unspecified phalanx of left middle finger, sequela -S62604A Fracture of unspecified phalanx of right ring finger, initial encounter for closed fracture -S62604B Fracture of unspecified phalanx of right ring finger, initial encounter for open fracture -S62604D Fracture of unspecified phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62604G Fracture of unspecified phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62604K Fracture of unspecified phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62604P Fracture of unspecified phalanx of right ring finger, subsequent encounter for fracture with malunion -S62604S Fracture of unspecified phalanx of right ring finger, sequela -S62605A Fracture of unspecified phalanx of left ring finger, initial encounter for closed fracture -S62605B Fracture of unspecified phalanx of left ring finger, initial encounter for open fracture -S62605D Fracture of unspecified phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62605G Fracture of unspecified phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62605K Fracture of unspecified phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62605P Fracture of unspecified phalanx of left ring finger, subsequent encounter for fracture with malunion -S62605S Fracture of unspecified phalanx of left ring finger, sequela -S62606A Fracture of unspecified phalanx of right little finger, initial encounter for closed fracture -S62606B Fracture of unspecified phalanx of right little finger, initial encounter for open fracture -S62606D Fracture of unspecified phalanx of right little finger, subsequent encounter for fracture with routine healing -S62606G Fracture of unspecified phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62606K Fracture of unspecified phalanx of right little finger, subsequent encounter for fracture with nonunion -S62606P Fracture of unspecified phalanx of right little finger, subsequent encounter for fracture with malunion -S62606S Fracture of unspecified phalanx of right little finger, sequela -S62607A Fracture of unspecified phalanx of left little finger, initial encounter for closed fracture -S62607B Fracture of unspecified phalanx of left little finger, initial encounter for open fracture -S62607D Fracture of unspecified phalanx of left little finger, subsequent encounter for fracture with routine healing -S62607G Fracture of unspecified phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62607K Fracture of unspecified phalanx of left little finger, subsequent encounter for fracture with nonunion -S62607P Fracture of unspecified phalanx of left little finger, subsequent encounter for fracture with malunion -S62607S Fracture of unspecified phalanx of left little finger, sequela -S62608A Fracture of unspecified phalanx of other finger, initial encounter for closed fracture -S62608B Fracture of unspecified phalanx of other finger, initial encounter for open fracture -S62608D Fracture of unspecified phalanx of other finger, subsequent encounter for fracture with routine healing -S62608G Fracture of unspecified phalanx of other finger, subsequent encounter for fracture with delayed healing -S62608K Fracture of unspecified phalanx of other finger, subsequent encounter for fracture with nonunion -S62608P Fracture of unspecified phalanx of other finger, subsequent encounter for fracture with malunion -S62608S Fracture of unspecified phalanx of other finger, sequela -S62609A Fracture of unspecified phalanx of unspecified finger, initial encounter for closed fracture -S62609B Fracture of unspecified phalanx of unspecified finger, initial encounter for open fracture -S62609D Fracture of unspecified phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62609G Fracture of unspecified phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62609K Fracture of unspecified phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62609P Fracture of unspecified phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62609S Fracture of unspecified phalanx of unspecified finger, sequela -S62610A Displaced fracture of proximal phalanx of right index finger, initial encounter for closed fracture -S62610B Displaced fracture of proximal phalanx of right index finger, initial encounter for open fracture -S62610D Displaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with routine healing -S62610G Displaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62610K Displaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with nonunion -S62610P Displaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with malunion -S62610S Displaced fracture of proximal phalanx of right index finger, sequela -S62611A Displaced fracture of proximal phalanx of left index finger, initial encounter for closed fracture -S62611B Displaced fracture of proximal phalanx of left index finger, initial encounter for open fracture -S62611D Displaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with routine healing -S62611G Displaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62611K Displaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with nonunion -S62611P Displaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with malunion -S62611S Displaced fracture of proximal phalanx of left index finger, sequela -S62612A Displaced fracture of proximal phalanx of right middle finger, initial encounter for closed fracture -S62612B Displaced fracture of proximal phalanx of right middle finger, initial encounter for open fracture -S62612D Displaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62612G Displaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62612K Displaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62612P Displaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with malunion -S62612S Displaced fracture of proximal phalanx of right middle finger, sequela -S62613A Displaced fracture of proximal phalanx of left middle finger, initial encounter for closed fracture -S62613B Displaced fracture of proximal phalanx of left middle finger, initial encounter for open fracture -S62613D Displaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62613G Displaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62613K Displaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62613P Displaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with malunion -S62613S Displaced fracture of proximal phalanx of left middle finger, sequela -S62614A Displaced fracture of proximal phalanx of right ring finger, initial encounter for closed fracture -S62614B Displaced fracture of proximal phalanx of right ring finger, initial encounter for open fracture -S62614D Displaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62614G Displaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62614K Displaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62614P Displaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with malunion -S62614S Displaced fracture of proximal phalanx of right ring finger, sequela -S62615A Displaced fracture of proximal phalanx of left ring finger, initial encounter for closed fracture -S62615B Displaced fracture of proximal phalanx of left ring finger, initial encounter for open fracture -S62615D Displaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62615G Displaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62615K Displaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62615P Displaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with malunion -S62615S Displaced fracture of proximal phalanx of left ring finger, sequela -S62616A Displaced fracture of proximal phalanx of right little finger, initial encounter for closed fracture -S62616B Displaced fracture of proximal phalanx of right little finger, initial encounter for open fracture -S62616D Displaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with routine healing -S62616G Displaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62616K Displaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with nonunion -S62616P Displaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with malunion -S62616S Displaced fracture of proximal phalanx of right little finger, sequela -S62617A Displaced fracture of proximal phalanx of left little finger, initial encounter for closed fracture -S62617B Displaced fracture of proximal phalanx of left little finger, initial encounter for open fracture -S62617D Displaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with routine healing -S62617G Displaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62617K Displaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with nonunion -S62617P Displaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with malunion -S62617S Displaced fracture of proximal phalanx of left little finger, sequela -S62618A Displaced fracture of proximal phalanx of other finger, initial encounter for closed fracture -S62618B Displaced fracture of proximal phalanx of other finger, initial encounter for open fracture -S62618D Displaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with routine healing -S62618G Displaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with delayed healing -S62618K Displaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with nonunion -S62618P Displaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with malunion -S62618S Displaced fracture of proximal phalanx of other finger, sequela -S62619A Displaced fracture of proximal phalanx of unspecified finger, initial encounter for closed fracture -S62619B Displaced fracture of proximal phalanx of unspecified finger, initial encounter for open fracture -S62619D Displaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62619G Displaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62619K Displaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62619P Displaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62619S Displaced fracture of proximal phalanx of unspecified finger, sequela -S62620A Displaced fracture of medial phalanx of right index finger, initial encounter for closed fracture -S62620B Displaced fracture of medial phalanx of right index finger, initial encounter for open fracture -S62620D Displaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with routine healing -S62620G Displaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62620K Displaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with nonunion -S62620P Displaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with malunion -S62620S Displaced fracture of medial phalanx of right index finger, sequela -S62621A Displaced fracture of medial phalanx of left index finger, initial encounter for closed fracture -S62621B Displaced fracture of medial phalanx of left index finger, initial encounter for open fracture -S62621D Displaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with routine healing -S62621G Displaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62621K Displaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with nonunion -S62621P Displaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with malunion -S62621S Displaced fracture of medial phalanx of left index finger, sequela -S62622A Displaced fracture of medial phalanx of right middle finger, initial encounter for closed fracture -S62622B Displaced fracture of medial phalanx of right middle finger, initial encounter for open fracture -S62622D Displaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62622G Displaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62622K Displaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62622P Displaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with malunion -S62622S Displaced fracture of medial phalanx of right middle finger, sequela -S62623A Displaced fracture of medial phalanx of left middle finger, initial encounter for closed fracture -S62623B Displaced fracture of medial phalanx of left middle finger, initial encounter for open fracture -S62623D Displaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62623G Displaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62623K Displaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62623P Displaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with malunion -S62623S Displaced fracture of medial phalanx of left middle finger, sequela -S62624A Displaced fracture of medial phalanx of right ring finger, initial encounter for closed fracture -S62624B Displaced fracture of medial phalanx of right ring finger, initial encounter for open fracture -S62624D Displaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62624G Displaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62624K Displaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62624P Displaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with malunion -S62624S Displaced fracture of medial phalanx of right ring finger, sequela -S62625A Displaced fracture of medial phalanx of left ring finger, initial encounter for closed fracture -S62625B Displaced fracture of medial phalanx of left ring finger, initial encounter for open fracture -S62625D Displaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62625G Displaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62625K Displaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62625P Displaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with malunion -S62625S Displaced fracture of medial phalanx of left ring finger, sequela -S62626A Displaced fracture of medial phalanx of right little finger, initial encounter for closed fracture -S62626B Displaced fracture of medial phalanx of right little finger, initial encounter for open fracture -S62626D Displaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with routine healing -S62626G Displaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62626K Displaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with nonunion -S62626P Displaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with malunion -S62626S Displaced fracture of medial phalanx of right little finger, sequela -S62627A Displaced fracture of medial phalanx of left little finger, initial encounter for closed fracture -S62627B Displaced fracture of medial phalanx of left little finger, initial encounter for open fracture -S62627D Displaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with routine healing -S62627G Displaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62627K Displaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with nonunion -S62627P Displaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with malunion -S62627S Displaced fracture of medial phalanx of left little finger, sequela -S62628A Displaced fracture of medial phalanx of other finger, initial encounter for closed fracture -S62628B Displaced fracture of medial phalanx of other finger, initial encounter for open fracture -S62628D Displaced fracture of medial phalanx of other finger, subsequent encounter for fracture with routine healing -S62628G Displaced fracture of medial phalanx of other finger, subsequent encounter for fracture with delayed healing -S62628K Displaced fracture of medial phalanx of other finger, subsequent encounter for fracture with nonunion -S62628P Displaced fracture of medial phalanx of other finger, subsequent encounter for fracture with malunion -S62628S Displaced fracture of medial phalanx of other finger, sequela -S62629A Displaced fracture of medial phalanx of unspecified finger, initial encounter for closed fracture -S62629B Displaced fracture of medial phalanx of unspecified finger, initial encounter for open fracture -S62629D Displaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62629G Displaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62629K Displaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62629P Displaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62629S Displaced fracture of medial phalanx of unspecified finger, sequela -S62630A Displaced fracture of distal phalanx of right index finger, initial encounter for closed fracture -S62630B Displaced fracture of distal phalanx of right index finger, initial encounter for open fracture -S62630D Displaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with routine healing -S62630G Displaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62630K Displaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with nonunion -S62630P Displaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with malunion -S62630S Displaced fracture of distal phalanx of right index finger, sequela -S62631A Displaced fracture of distal phalanx of left index finger, initial encounter for closed fracture -S62631B Displaced fracture of distal phalanx of left index finger, initial encounter for open fracture -S62631D Displaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with routine healing -S62631G Displaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62631K Displaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with nonunion -S62631P Displaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with malunion -S62631S Displaced fracture of distal phalanx of left index finger, sequela -S62632A Displaced fracture of distal phalanx of right middle finger, initial encounter for closed fracture -S62632B Displaced fracture of distal phalanx of right middle finger, initial encounter for open fracture -S62632D Displaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62632G Displaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62632K Displaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62632P Displaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with malunion -S62632S Displaced fracture of distal phalanx of right middle finger, sequela -S62633A Displaced fracture of distal phalanx of left middle finger, initial encounter for closed fracture -S62633B Displaced fracture of distal phalanx of left middle finger, initial encounter for open fracture -S62633D Displaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62633G Displaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62633K Displaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62633P Displaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with malunion -S62633S Displaced fracture of distal phalanx of left middle finger, sequela -S62634A Displaced fracture of distal phalanx of right ring finger, initial encounter for closed fracture -S62634B Displaced fracture of distal phalanx of right ring finger, initial encounter for open fracture -S62634D Displaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62634G Displaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62634K Displaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62634P Displaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with malunion -S62634S Displaced fracture of distal phalanx of right ring finger, sequela -S62635A Displaced fracture of distal phalanx of left ring finger, initial encounter for closed fracture -S62635B Displaced fracture of distal phalanx of left ring finger, initial encounter for open fracture -S62635D Displaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62635G Displaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62635K Displaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62635P Displaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with malunion -S62635S Displaced fracture of distal phalanx of left ring finger, sequela -S62636A Displaced fracture of distal phalanx of right little finger, initial encounter for closed fracture -S62636B Displaced fracture of distal phalanx of right little finger, initial encounter for open fracture -S62636D Displaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with routine healing -S62636G Displaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62636K Displaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with nonunion -S62636P Displaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with malunion -S62636S Displaced fracture of distal phalanx of right little finger, sequela -S62637A Displaced fracture of distal phalanx of left little finger, initial encounter for closed fracture -S62637B Displaced fracture of distal phalanx of left little finger, initial encounter for open fracture -S62637D Displaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with routine healing -S62637G Displaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62637K Displaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with nonunion -S62637P Displaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with malunion -S62637S Displaced fracture of distal phalanx of left little finger, sequela -S62638A Displaced fracture of distal phalanx of other finger, initial encounter for closed fracture -S62638B Displaced fracture of distal phalanx of other finger, initial encounter for open fracture -S62638D Displaced fracture of distal phalanx of other finger, subsequent encounter for fracture with routine healing -S62638G Displaced fracture of distal phalanx of other finger, subsequent encounter for fracture with delayed healing -S62638K Displaced fracture of distal phalanx of other finger, subsequent encounter for fracture with nonunion -S62638P Displaced fracture of distal phalanx of other finger, subsequent encounter for fracture with malunion -S62638S Displaced fracture of distal phalanx of other finger, sequela -S62639A Displaced fracture of distal phalanx of unspecified finger, initial encounter for closed fracture -S62639B Displaced fracture of distal phalanx of unspecified finger, initial encounter for open fracture -S62639D Displaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62639G Displaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62639K Displaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62639P Displaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62639S Displaced fracture of distal phalanx of unspecified finger, sequela -S62640A Nondisplaced fracture of proximal phalanx of right index finger, initial encounter for closed fracture -S62640B Nondisplaced fracture of proximal phalanx of right index finger, initial encounter for open fracture -S62640D Nondisplaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with routine healing -S62640G Nondisplaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62640K Nondisplaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with nonunion -S62640P Nondisplaced fracture of proximal phalanx of right index finger, subsequent encounter for fracture with malunion -S62640S Nondisplaced fracture of proximal phalanx of right index finger, sequela -S62641A Nondisplaced fracture of proximal phalanx of left index finger, initial encounter for closed fracture -S62641B Nondisplaced fracture of proximal phalanx of left index finger, initial encounter for open fracture -S62641D Nondisplaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with routine healing -S62641G Nondisplaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62641K Nondisplaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with nonunion -S62641P Nondisplaced fracture of proximal phalanx of left index finger, subsequent encounter for fracture with malunion -S62641S Nondisplaced fracture of proximal phalanx of left index finger, sequela -S62642A Nondisplaced fracture of proximal phalanx of right middle finger, initial encounter for closed fracture -S62642B Nondisplaced fracture of proximal phalanx of right middle finger, initial encounter for open fracture -S62642D Nondisplaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62642G Nondisplaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62642K Nondisplaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62642P Nondisplaced fracture of proximal phalanx of right middle finger, subsequent encounter for fracture with malunion -S62642S Nondisplaced fracture of proximal phalanx of right middle finger, sequela -S62643A Nondisplaced fracture of proximal phalanx of left middle finger, initial encounter for closed fracture -S62643B Nondisplaced fracture of proximal phalanx of left middle finger, initial encounter for open fracture -S62643D Nondisplaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62643G Nondisplaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62643K Nondisplaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62643P Nondisplaced fracture of proximal phalanx of left middle finger, subsequent encounter for fracture with malunion -S62643S Nondisplaced fracture of proximal phalanx of left middle finger, sequela -S62644A Nondisplaced fracture of proximal phalanx of right ring finger, initial encounter for closed fracture -S62644B Nondisplaced fracture of proximal phalanx of right ring finger, initial encounter for open fracture -S62644D Nondisplaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62644G Nondisplaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62644K Nondisplaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62644P Nondisplaced fracture of proximal phalanx of right ring finger, subsequent encounter for fracture with malunion -S62644S Nondisplaced fracture of proximal phalanx of right ring finger, sequela -S62645A Nondisplaced fracture of proximal phalanx of left ring finger, initial encounter for closed fracture -S62645B Nondisplaced fracture of proximal phalanx of left ring finger, initial encounter for open fracture -S62645D Nondisplaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62645G Nondisplaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62645K Nondisplaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62645P Nondisplaced fracture of proximal phalanx of left ring finger, subsequent encounter for fracture with malunion -S62645S Nondisplaced fracture of proximal phalanx of left ring finger, sequela -S62646A Nondisplaced fracture of proximal phalanx of right little finger, initial encounter for closed fracture -S62646B Nondisplaced fracture of proximal phalanx of right little finger, initial encounter for open fracture -S62646D Nondisplaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with routine healing -S62646G Nondisplaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62646K Nondisplaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with nonunion -S62646P Nondisplaced fracture of proximal phalanx of right little finger, subsequent encounter for fracture with malunion -S62646S Nondisplaced fracture of proximal phalanx of right little finger, sequela -S62647A Nondisplaced fracture of proximal phalanx of left little finger, initial encounter for closed fracture -S62647B Nondisplaced fracture of proximal phalanx of left little finger, initial encounter for open fracture -S62647D Nondisplaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with routine healing -S62647G Nondisplaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62647K Nondisplaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with nonunion -S62647P Nondisplaced fracture of proximal phalanx of left little finger, subsequent encounter for fracture with malunion -S62647S Nondisplaced fracture of proximal phalanx of left little finger, sequela -S62648A Nondisplaced fracture of proximal phalanx of other finger, initial encounter for closed fracture -S62648B Nondisplaced fracture of proximal phalanx of other finger, initial encounter for open fracture -S62648D Nondisplaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with routine healing -S62648G Nondisplaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with delayed healing -S62648K Nondisplaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with nonunion -S62648P Nondisplaced fracture of proximal phalanx of other finger, subsequent encounter for fracture with malunion -S62648S Nondisplaced fracture of proximal phalanx of other finger, sequela -S62649A Nondisplaced fracture of proximal phalanx of unspecified finger, initial encounter for closed fracture -S62649B Nondisplaced fracture of proximal phalanx of unspecified finger, initial encounter for open fracture -S62649D Nondisplaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62649G Nondisplaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62649K Nondisplaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62649P Nondisplaced fracture of proximal phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62649S Nondisplaced fracture of proximal phalanx of unspecified finger, sequela -S62650A Nondisplaced fracture of medial phalanx of right index finger, initial encounter for closed fracture -S62650B Nondisplaced fracture of medial phalanx of right index finger, initial encounter for open fracture -S62650D Nondisplaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with routine healing -S62650G Nondisplaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62650K Nondisplaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with nonunion -S62650P Nondisplaced fracture of medial phalanx of right index finger, subsequent encounter for fracture with malunion -S62650S Nondisplaced fracture of medial phalanx of right index finger, sequela -S62651A Nondisplaced fracture of medial phalanx of left index finger, initial encounter for closed fracture -S62651B Nondisplaced fracture of medial phalanx of left index finger, initial encounter for open fracture -S62651D Nondisplaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with routine healing -S62651G Nondisplaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62651K Nondisplaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with nonunion -S62651P Nondisplaced fracture of medial phalanx of left index finger, subsequent encounter for fracture with malunion -S62651S Nondisplaced fracture of medial phalanx of left index finger, sequela -S62652A Nondisplaced fracture of medial phalanx of right middle finger, initial encounter for closed fracture -S62652B Nondisplaced fracture of medial phalanx of right middle finger, initial encounter for open fracture -S62652D Nondisplaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62652G Nondisplaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62652K Nondisplaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62652P Nondisplaced fracture of medial phalanx of right middle finger, subsequent encounter for fracture with malunion -S62652S Nondisplaced fracture of medial phalanx of right middle finger, sequela -S62653A Nondisplaced fracture of medial phalanx of left middle finger, initial encounter for closed fracture -S62653B Nondisplaced fracture of medial phalanx of left middle finger, initial encounter for open fracture -S62653D Nondisplaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62653G Nondisplaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62653K Nondisplaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62653P Nondisplaced fracture of medial phalanx of left middle finger, subsequent encounter for fracture with malunion -S62653S Nondisplaced fracture of medial phalanx of left middle finger, sequela -S62654A Nondisplaced fracture of medial phalanx of right ring finger, initial encounter for closed fracture -S62654B Nondisplaced fracture of medial phalanx of right ring finger, initial encounter for open fracture -S62654D Nondisplaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62654G Nondisplaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62654K Nondisplaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62654P Nondisplaced fracture of medial phalanx of right ring finger, subsequent encounter for fracture with malunion -S62654S Nondisplaced fracture of medial phalanx of right ring finger, sequela -S62655A Nondisplaced fracture of medial phalanx of left ring finger, initial encounter for closed fracture -S62655B Nondisplaced fracture of medial phalanx of left ring finger, initial encounter for open fracture -S62655D Nondisplaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62655G Nondisplaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62655K Nondisplaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62655P Nondisplaced fracture of medial phalanx of left ring finger, subsequent encounter for fracture with malunion -S62655S Nondisplaced fracture of medial phalanx of left ring finger, sequela -S62656A Nondisplaced fracture of medial phalanx of right little finger, initial encounter for closed fracture -S62656B Nondisplaced fracture of medial phalanx of right little finger, initial encounter for open fracture -S62656D Nondisplaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with routine healing -S62656G Nondisplaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62656K Nondisplaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with nonunion -S62656P Nondisplaced fracture of medial phalanx of right little finger, subsequent encounter for fracture with malunion -S62656S Nondisplaced fracture of medial phalanx of right little finger, sequela -S62657A Nondisplaced fracture of medial phalanx of left little finger, initial encounter for closed fracture -S62657B Nondisplaced fracture of medial phalanx of left little finger, initial encounter for open fracture -S62657D Nondisplaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with routine healing -S62657G Nondisplaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62657K Nondisplaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with nonunion -S62657P Nondisplaced fracture of medial phalanx of left little finger, subsequent encounter for fracture with malunion -S62657S Nondisplaced fracture of medial phalanx of left little finger, sequela -S62658A Nondisplaced fracture of medial phalanx of other finger, initial encounter for closed fracture -S62658B Nondisplaced fracture of medial phalanx of other finger, initial encounter for open fracture -S62658D Nondisplaced fracture of medial phalanx of other finger, subsequent encounter for fracture with routine healing -S62658G Nondisplaced fracture of medial phalanx of other finger, subsequent encounter for fracture with delayed healing -S62658K Nondisplaced fracture of medial phalanx of other finger, subsequent encounter for fracture with nonunion -S62658P Nondisplaced fracture of medial phalanx of other finger, subsequent encounter for fracture with malunion -S62658S Nondisplaced fracture of medial phalanx of other finger, sequela -S62659A Nondisplaced fracture of medial phalanx of unspecified finger, initial encounter for closed fracture -S62659B Nondisplaced fracture of medial phalanx of unspecified finger, initial encounter for open fracture -S62659D Nondisplaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62659G Nondisplaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62659K Nondisplaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62659P Nondisplaced fracture of medial phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62659S Nondisplaced fracture of medial phalanx of unspecified finger, sequela -S62660A Nondisplaced fracture of distal phalanx of right index finger, initial encounter for closed fracture -S62660B Nondisplaced fracture of distal phalanx of right index finger, initial encounter for open fracture -S62660D Nondisplaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with routine healing -S62660G Nondisplaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with delayed healing -S62660K Nondisplaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with nonunion -S62660P Nondisplaced fracture of distal phalanx of right index finger, subsequent encounter for fracture with malunion -S62660S Nondisplaced fracture of distal phalanx of right index finger, sequela -S62661A Nondisplaced fracture of distal phalanx of left index finger, initial encounter for closed fracture -S62661B Nondisplaced fracture of distal phalanx of left index finger, initial encounter for open fracture -S62661D Nondisplaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with routine healing -S62661G Nondisplaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with delayed healing -S62661K Nondisplaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with nonunion -S62661P Nondisplaced fracture of distal phalanx of left index finger, subsequent encounter for fracture with malunion -S62661S Nondisplaced fracture of distal phalanx of left index finger, sequela -S62662A Nondisplaced fracture of distal phalanx of right middle finger, initial encounter for closed fracture -S62662B Nondisplaced fracture of distal phalanx of right middle finger, initial encounter for open fracture -S62662D Nondisplaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with routine healing -S62662G Nondisplaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with delayed healing -S62662K Nondisplaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with nonunion -S62662P Nondisplaced fracture of distal phalanx of right middle finger, subsequent encounter for fracture with malunion -S62662S Nondisplaced fracture of distal phalanx of right middle finger, sequela -S62663A Nondisplaced fracture of distal phalanx of left middle finger, initial encounter for closed fracture -S62663B Nondisplaced fracture of distal phalanx of left middle finger, initial encounter for open fracture -S62663D Nondisplaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with routine healing -S62663G Nondisplaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with delayed healing -S62663K Nondisplaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with nonunion -S62663P Nondisplaced fracture of distal phalanx of left middle finger, subsequent encounter for fracture with malunion -S62663S Nondisplaced fracture of distal phalanx of left middle finger, sequela -S62664A Nondisplaced fracture of distal phalanx of right ring finger, initial encounter for closed fracture -S62664B Nondisplaced fracture of distal phalanx of right ring finger, initial encounter for open fracture -S62664D Nondisplaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with routine healing -S62664G Nondisplaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with delayed healing -S62664K Nondisplaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with nonunion -S62664P Nondisplaced fracture of distal phalanx of right ring finger, subsequent encounter for fracture with malunion -S62664S Nondisplaced fracture of distal phalanx of right ring finger, sequela -S62665A Nondisplaced fracture of distal phalanx of left ring finger, initial encounter for closed fracture -S62665B Nondisplaced fracture of distal phalanx of left ring finger, initial encounter for open fracture -S62665D Nondisplaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with routine healing -S62665G Nondisplaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with delayed healing -S62665K Nondisplaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with nonunion -S62665P Nondisplaced fracture of distal phalanx of left ring finger, subsequent encounter for fracture with malunion -S62665S Nondisplaced fracture of distal phalanx of left ring finger, sequela -S62666A Nondisplaced fracture of distal phalanx of right little finger, initial encounter for closed fracture -S62666B Nondisplaced fracture of distal phalanx of right little finger, initial encounter for open fracture -S62666D Nondisplaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with routine healing -S62666G Nondisplaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with delayed healing -S62666K Nondisplaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with nonunion -S62666P Nondisplaced fracture of distal phalanx of right little finger, subsequent encounter for fracture with malunion -S62666S Nondisplaced fracture of distal phalanx of right little finger, sequela -S62667A Nondisplaced fracture of distal phalanx of left little finger, initial encounter for closed fracture -S62667B Nondisplaced fracture of distal phalanx of left little finger, initial encounter for open fracture -S62667D Nondisplaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with routine healing -S62667G Nondisplaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with delayed healing -S62667K Nondisplaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with nonunion -S62667P Nondisplaced fracture of distal phalanx of left little finger, subsequent encounter for fracture with malunion -S62667S Nondisplaced fracture of distal phalanx of left little finger, sequela -S62668A Nondisplaced fracture of distal phalanx of other finger, initial encounter for closed fracture -S62668B Nondisplaced fracture of distal phalanx of other finger, initial encounter for open fracture -S62668D Nondisplaced fracture of distal phalanx of other finger, subsequent encounter for fracture with routine healing -S62668G Nondisplaced fracture of distal phalanx of other finger, subsequent encounter for fracture with delayed healing -S62668K Nondisplaced fracture of distal phalanx of other finger, subsequent encounter for fracture with nonunion -S62668P Nondisplaced fracture of distal phalanx of other finger, subsequent encounter for fracture with malunion -S62668S Nondisplaced fracture of distal phalanx of other finger, sequela -S62669A Nondisplaced fracture of distal phalanx of unspecified finger, initial encounter for closed fracture -S62669B Nondisplaced fracture of distal phalanx of unspecified finger, initial encounter for open fracture -S62669D Nondisplaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with routine healing -S62669G Nondisplaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with delayed healing -S62669K Nondisplaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with nonunion -S62669P Nondisplaced fracture of distal phalanx of unspecified finger, subsequent encounter for fracture with malunion -S62669S Nondisplaced fracture of distal phalanx of unspecified finger, sequela -S6290XA Unspecified fracture of unspecified wrist and hand, initial encounter for closed fracture -S6290XB Unspecified fracture of unspecified wrist and hand, initial encounter for open fracture -S6290XD Unspecified fracture of unspecified wrist and hand, subsequent encounter for fracture with routine healing -S6290XG Unspecified fracture of unspecified wrist and hand, subsequent encounter for fracture with delayed healing -S6290XK Unspecified fracture of unspecified wrist and hand, subsequent encounter for fracture with nonunion -S6290XP Unspecified fracture of unspecified wrist and hand, subsequent encounter for fracture with malunion -S6290XS Unspecified fracture of unspecified wrist and hand, sequela -S6291XA Unspecified fracture of right wrist and hand, initial encounter for closed fracture -S6291XB Unspecified fracture of right wrist and hand, initial encounter for open fracture -S6291XD Unspecified fracture of right wrist and hand, subsequent encounter for fracture with routine healing -S6291XG Unspecified fracture of right wrist and hand, subsequent encounter for fracture with delayed healing -S6291XK Unspecified fracture of right wrist and hand, subsequent encounter for fracture with nonunion -S6291XP Unspecified fracture of right wrist and hand, subsequent encounter for fracture with malunion -S6291XS Unspecified fracture of right wrist and hand, sequela -S6292XA Unspecified fracture of left wrist and hand, initial encounter for closed fracture -S6292XB Unspecified fracture of left wrist and hand, initial encounter for open fracture -S6292XD Unspecified fracture of left wrist and hand, subsequent encounter for fracture with routine healing -S6292XG Unspecified fracture of left wrist and hand, subsequent encounter for fracture with delayed healing -S6292XK Unspecified fracture of left wrist and hand, subsequent encounter for fracture with nonunion -S6292XP Unspecified fracture of left wrist and hand, subsequent encounter for fracture with malunion -S6292XS Unspecified fracture of left wrist and hand, sequela -S63001A Unspecified subluxation of right wrist and hand, initial encounter -S63001D Unspecified subluxation of right wrist and hand, subsequent encounter -S63001S Unspecified subluxation of right wrist and hand, sequela -S63002A Unspecified subluxation of left wrist and hand, initial encounter -S63002D Unspecified subluxation of left wrist and hand, subsequent encounter -S63002S Unspecified subluxation of left wrist and hand, sequela -S63003A Unspecified subluxation of unspecified wrist and hand, initial encounter -S63003D Unspecified subluxation of unspecified wrist and hand, subsequent encounter -S63003S Unspecified subluxation of unspecified wrist and hand, sequela -S63004A Unspecified dislocation of right wrist and hand, initial encounter -S63004D Unspecified dislocation of right wrist and hand, subsequent encounter -S63004S Unspecified dislocation of right wrist and hand, sequela -S63005A Unspecified dislocation of left wrist and hand, initial encounter -S63005D Unspecified dislocation of left wrist and hand, subsequent encounter -S63005S Unspecified dislocation of left wrist and hand, sequela -S63006A Unspecified dislocation of unspecified wrist and hand, initial encounter -S63006D Unspecified dislocation of unspecified wrist and hand, subsequent encounter -S63006S Unspecified dislocation of unspecified wrist and hand, sequela -S63011A Subluxation of distal radioulnar joint of right wrist, initial encounter -S63011D Subluxation of distal radioulnar joint of right wrist, subsequent encounter -S63011S Subluxation of distal radioulnar joint of right wrist, sequela -S63012A Subluxation of distal radioulnar joint of left wrist, initial encounter -S63012D Subluxation of distal radioulnar joint of left wrist, subsequent encounter -S63012S Subluxation of distal radioulnar joint of left wrist, sequela -S63013A Subluxation of distal radioulnar joint of unspecified wrist, initial encounter -S63013D Subluxation of distal radioulnar joint of unspecified wrist, subsequent encounter -S63013S Subluxation of distal radioulnar joint of unspecified wrist, sequela -S63014A Dislocation of distal radioulnar joint of right wrist, initial encounter -S63014D Dislocation of distal radioulnar joint of right wrist, subsequent encounter -S63014S Dislocation of distal radioulnar joint of right wrist, sequela -S63015A Dislocation of distal radioulnar joint of left wrist, initial encounter -S63015D Dislocation of distal radioulnar joint of left wrist, subsequent encounter -S63015S Dislocation of distal radioulnar joint of left wrist, sequela -S63016A Dislocation of distal radioulnar joint of unspecified wrist, initial encounter -S63016D Dislocation of distal radioulnar joint of unspecified wrist, subsequent encounter -S63016S Dislocation of distal radioulnar joint of unspecified wrist, sequela -S63021A Subluxation of radiocarpal joint of right wrist, initial encounter -S63021D Subluxation of radiocarpal joint of right wrist, subsequent encounter -S63021S Subluxation of radiocarpal joint of right wrist, sequela -S63022A Subluxation of radiocarpal joint of left wrist, initial encounter -S63022D Subluxation of radiocarpal joint of left wrist, subsequent encounter -S63022S Subluxation of radiocarpal joint of left wrist, sequela -S63023A Subluxation of radiocarpal joint of unspecified wrist, initial encounter -S63023D Subluxation of radiocarpal joint of unspecified wrist, subsequent encounter -S63023S Subluxation of radiocarpal joint of unspecified wrist, sequela -S63024A Dislocation of radiocarpal joint of right wrist, initial encounter -S63024D Dislocation of radiocarpal joint of right wrist, subsequent encounter -S63024S Dislocation of radiocarpal joint of right wrist, sequela -S63025A Dislocation of radiocarpal joint of left wrist, initial encounter -S63025D Dislocation of radiocarpal joint of left wrist, subsequent encounter -S63025S Dislocation of radiocarpal joint of left wrist, sequela -S63026A Dislocation of radiocarpal joint of unspecified wrist, initial encounter -S63026D Dislocation of radiocarpal joint of unspecified wrist, subsequent encounter -S63026S Dislocation of radiocarpal joint of unspecified wrist, sequela -S63031A Subluxation of midcarpal joint of right wrist, initial encounter -S63031D Subluxation of midcarpal joint of right wrist, subsequent encounter -S63031S Subluxation of midcarpal joint of right wrist, sequela -S63032A Subluxation of midcarpal joint of left wrist, initial encounter -S63032D Subluxation of midcarpal joint of left wrist, subsequent encounter -S63032S Subluxation of midcarpal joint of left wrist, sequela -S63033A Subluxation of midcarpal joint of unspecified wrist, initial encounter -S63033D Subluxation of midcarpal joint of unspecified wrist, subsequent encounter -S63033S Subluxation of midcarpal joint of unspecified wrist, sequela -S63034A Dislocation of midcarpal joint of right wrist, initial encounter -S63034D Dislocation of midcarpal joint of right wrist, subsequent encounter -S63034S Dislocation of midcarpal joint of right wrist, sequela -S63035A Dislocation of midcarpal joint of left wrist, initial encounter -S63035D Dislocation of midcarpal joint of left wrist, subsequent encounter -S63035S Dislocation of midcarpal joint of left wrist, sequela -S63036A Dislocation of midcarpal joint of unspecified wrist, initial encounter -S63036D Dislocation of midcarpal joint of unspecified wrist, subsequent encounter -S63036S Dislocation of midcarpal joint of unspecified wrist, sequela -S63041A Subluxation of carpometacarpal joint of right thumb, initial encounter -S63041D Subluxation of carpometacarpal joint of right thumb, subsequent encounter -S63041S Subluxation of carpometacarpal joint of right thumb, sequela -S63042A Subluxation of carpometacarpal joint of left thumb, initial encounter -S63042D Subluxation of carpometacarpal joint of left thumb, subsequent encounter -S63042S Subluxation of carpometacarpal joint of left thumb, sequela -S63043A Subluxation of carpometacarpal joint of unspecified thumb, initial encounter -S63043D Subluxation of carpometacarpal joint of unspecified thumb, subsequent encounter -S63043S Subluxation of carpometacarpal joint of unspecified thumb, sequela -S63044A Dislocation of carpometacarpal joint of right thumb, initial encounter -S63044D Dislocation of carpometacarpal joint of right thumb, subsequent encounter -S63044S Dislocation of carpometacarpal joint of right thumb, sequela -S63045A Dislocation of carpometacarpal joint of left thumb, initial encounter -S63045D Dislocation of carpometacarpal joint of left thumb, subsequent encounter -S63045S Dislocation of carpometacarpal joint of left thumb, sequela -S63046A Dislocation of carpometacarpal joint of unspecified thumb, initial encounter -S63046D Dislocation of carpometacarpal joint of unspecified thumb, subsequent encounter -S63046S Dislocation of carpometacarpal joint of unspecified thumb, sequela -S63051A Subluxation of other carpometacarpal joint of right hand, initial encounter -S63051D Subluxation of other carpometacarpal joint of right hand, subsequent encounter -S63051S Subluxation of other carpometacarpal joint of right hand, sequela -S63052A Subluxation of other carpometacarpal joint of left hand, initial encounter -S63052D Subluxation of other carpometacarpal joint of left hand, subsequent encounter -S63052S Subluxation of other carpometacarpal joint of left hand, sequela -S63053A Subluxation of other carpometacarpal joint of unspecified hand, initial encounter -S63053D Subluxation of other carpometacarpal joint of unspecified hand, subsequent encounter -S63053S Subluxation of other carpometacarpal joint of unspecified hand, sequela -S63054A Dislocation of other carpometacarpal joint of right hand, initial encounter -S63054D Dislocation of other carpometacarpal joint of right hand, subsequent encounter -S63054S Dislocation of other carpometacarpal joint of right hand, sequela -S63055A Dislocation of other carpometacarpal joint of left hand, initial encounter -S63055D Dislocation of other carpometacarpal joint of left hand, subsequent encounter -S63055S Dislocation of other carpometacarpal joint of left hand, sequela -S63056A Dislocation of other carpometacarpal joint of unspecified hand, initial encounter -S63056D Dislocation of other carpometacarpal joint of unspecified hand, subsequent encounter -S63056S Dislocation of other carpometacarpal joint of unspecified hand, sequela -S63061A Subluxation of metacarpal (bone), proximal end of right hand, initial encounter -S63061D Subluxation of metacarpal (bone), proximal end of right hand, subsequent encounter -S63061S Subluxation of metacarpal (bone), proximal end of right hand, sequela -S63062A Subluxation of metacarpal (bone), proximal end of left hand, initial encounter -S63062D Subluxation of metacarpal (bone), proximal end of left hand, subsequent encounter -S63062S Subluxation of metacarpal (bone), proximal end of left hand, sequela -S63063A Subluxation of metacarpal (bone), proximal end of unspecified hand, initial encounter -S63063D Subluxation of metacarpal (bone), proximal end of unspecified hand, subsequent encounter -S63063S Subluxation of metacarpal (bone), proximal end of unspecified hand, sequela -S63064A Dislocation of metacarpal (bone), proximal end of right hand, initial encounter -S63064D Dislocation of metacarpal (bone), proximal end of right hand, subsequent encounter -S63064S Dislocation of metacarpal (bone), proximal end of right hand, sequela -S63065A Dislocation of metacarpal (bone), proximal end of left hand, initial encounter -S63065D Dislocation of metacarpal (bone), proximal end of left hand, subsequent encounter -S63065S Dislocation of metacarpal (bone), proximal end of left hand, sequela -S63066A Dislocation of metacarpal (bone), proximal end of unspecified hand, initial encounter -S63066D Dislocation of metacarpal (bone), proximal end of unspecified hand, subsequent encounter -S63066S Dislocation of metacarpal (bone), proximal end of unspecified hand, sequela -S63071A Subluxation of distal end of right ulna, initial encounter -S63071D Subluxation of distal end of right ulna, subsequent encounter -S63071S Subluxation of distal end of right ulna, sequela -S63072A Subluxation of distal end of left ulna, initial encounter -S63072D Subluxation of distal end of left ulna, subsequent encounter -S63072S Subluxation of distal end of left ulna, sequela -S63073A Subluxation of distal end of unspecified ulna, initial encounter -S63073D Subluxation of distal end of unspecified ulna, subsequent encounter -S63073S Subluxation of distal end of unspecified ulna, sequela -S63074A Dislocation of distal end of right ulna, initial encounter -S63074D Dislocation of distal end of right ulna, subsequent encounter -S63074S Dislocation of distal end of right ulna, sequela -S63075A Dislocation of distal end of left ulna, initial encounter -S63075D Dislocation of distal end of left ulna, subsequent encounter -S63075S Dislocation of distal end of left ulna, sequela -S63076A Dislocation of distal end of unspecified ulna, initial encounter -S63076D Dislocation of distal end of unspecified ulna, subsequent encounter -S63076S Dislocation of distal end of unspecified ulna, sequela -S63091A Other subluxation of right wrist and hand, initial encounter -S63091D Other subluxation of right wrist and hand, subsequent encounter -S63091S Other subluxation of right wrist and hand, sequela -S63092A Other subluxation of left wrist and hand, initial encounter -S63092D Other subluxation of left wrist and hand, subsequent encounter -S63092S Other subluxation of left wrist and hand, sequela -S63093A Other subluxation of unspecified wrist and hand, initial encounter -S63093D Other subluxation of unspecified wrist and hand, subsequent encounter -S63093S Other subluxation of unspecified wrist and hand, sequela -S63094A Other dislocation of right wrist and hand, initial encounter -S63094D Other dislocation of right wrist and hand, subsequent encounter -S63094S Other dislocation of right wrist and hand, sequela -S63095A Other dislocation of left wrist and hand, initial encounter -S63095D Other dislocation of left wrist and hand, subsequent encounter -S63095S Other dislocation of left wrist and hand, sequela -S63096A Other dislocation of unspecified wrist and hand, initial encounter -S63096D Other dislocation of unspecified wrist and hand, subsequent encounter -S63096S Other dislocation of unspecified wrist and hand, sequela -S63101A Unspecified subluxation of right thumb, initial encounter -S63101D Unspecified subluxation of right thumb, subsequent encounter -S63101S Unspecified subluxation of right thumb, sequela -S63102A Unspecified subluxation of left thumb, initial encounter -S63102D Unspecified subluxation of left thumb, subsequent encounter -S63102S Unspecified subluxation of left thumb, sequela -S63103A Unspecified subluxation of unspecified thumb, initial encounter -S63103D Unspecified subluxation of unspecified thumb, subsequent encounter -S63103S Unspecified subluxation of unspecified thumb, sequela -S63104A Unspecified dislocation of right thumb, initial encounter -S63104D Unspecified dislocation of right thumb, subsequent encounter -S63104S Unspecified dislocation of right thumb, sequela -S63105A Unspecified dislocation of left thumb, initial encounter -S63105D Unspecified dislocation of left thumb, subsequent encounter -S63105S Unspecified dislocation of left thumb, sequela -S63106A Unspecified dislocation of unspecified thumb, initial encounter -S63106D Unspecified dislocation of unspecified thumb, subsequent encounter -S63106S Unspecified dislocation of unspecified thumb, sequela -S63111A Subluxation of metacarpophalangeal joint of right thumb, initial encounter -S63111D Subluxation of metacarpophalangeal joint of right thumb, subsequent encounter -S63111S Subluxation of metacarpophalangeal joint of right thumb, sequela -S63112A Subluxation of metacarpophalangeal joint of left thumb, initial encounter -S63112D Subluxation of metacarpophalangeal joint of left thumb, subsequent encounter -S63112S Subluxation of metacarpophalangeal joint of left thumb, sequela -S63113A Subluxation of metacarpophalangeal joint of unspecified thumb, initial encounter -S63113D Subluxation of metacarpophalangeal joint of unspecified thumb, subsequent encounter -S63113S Subluxation of metacarpophalangeal joint of unspecified thumb, sequela -S63114A Dislocation of metacarpophalangeal joint of right thumb, initial encounter -S63114D Dislocation of metacarpophalangeal joint of right thumb, subsequent encounter -S63114S Dislocation of metacarpophalangeal joint of right thumb, sequela -S63115A Dislocation of metacarpophalangeal joint of left thumb, initial encounter -S63115D Dislocation of metacarpophalangeal joint of left thumb, subsequent encounter -S63115S Dislocation of metacarpophalangeal joint of left thumb, sequela -S63116A Dislocation of metacarpophalangeal joint of unspecified thumb, initial encounter -S63116D Dislocation of metacarpophalangeal joint of unspecified thumb, subsequent encounter -S63116S Dislocation of metacarpophalangeal joint of unspecified thumb, sequela -S63121A Subluxation of unspecified interphalangeal joint of right thumb, initial encounter -S63121D Subluxation of unspecified interphalangeal joint of right thumb, subsequent encounter -S63121S Subluxation of unspecified interphalangeal joint of right thumb, sequela -S63122A Subluxation of unspecified interphalangeal joint of left thumb, initial encounter -S63122D Subluxation of unspecified interphalangeal joint of left thumb, subsequent encounter -S63122S Subluxation of unspecified interphalangeal joint of left thumb, sequela -S63123A Subluxation of unspecified interphalangeal joint of unspecified thumb, initial encounter -S63123D Subluxation of unspecified interphalangeal joint of unspecified thumb, subsequent encounter -S63123S Subluxation of unspecified interphalangeal joint of unspecified thumb, sequela -S63124A Dislocation of unspecified interphalangeal joint of right thumb, initial encounter -S63124D Dislocation of unspecified interphalangeal joint of right thumb, subsequent encounter -S63124S Dislocation of unspecified interphalangeal joint of right thumb, sequela -S63125A Dislocation of unspecified interphalangeal joint of left thumb, initial encounter -S63125D Dislocation of unspecified interphalangeal joint of left thumb, subsequent encounter -S63125S Dislocation of unspecified interphalangeal joint of left thumb, sequela -S63126A Dislocation of unspecified interphalangeal joint of unspecified thumb, initial encounter -S63126D Dislocation of unspecified interphalangeal joint of unspecified thumb, subsequent encounter -S63126S Dislocation of unspecified interphalangeal joint of unspecified thumb, sequela -S63131A Subluxation of proximal interphalangeal joint of right thumb, initial encounter -S63131D Subluxation of proximal interphalangeal joint of right thumb, subsequent encounter -S63131S Subluxation of proximal interphalangeal joint of right thumb, sequela -S63132A Subluxation of proximal interphalangeal joint of left thumb, initial encounter -S63132D Subluxation of proximal interphalangeal joint of left thumb, subsequent encounter -S63132S Subluxation of proximal interphalangeal joint of left thumb, sequela -S63133A Subluxation of proximal interphalangeal joint of unspecified thumb, initial encounter -S63133D Subluxation of proximal interphalangeal joint of unspecified thumb, subsequent encounter -S63133S Subluxation of proximal interphalangeal joint of unspecified thumb, sequela -S63134A Dislocation of proximal interphalangeal joint of right thumb, initial encounter -S63134D Dislocation of proximal interphalangeal joint of right thumb, subsequent encounter -S63134S Dislocation of proximal interphalangeal joint of right thumb, sequela -S63135A Dislocation of proximal interphalangeal joint of left thumb, initial encounter -S63135D Dislocation of proximal interphalangeal joint of left thumb, subsequent encounter -S63135S Dislocation of proximal interphalangeal joint of left thumb, sequela -S63136A Dislocation of proximal interphalangeal joint of unspecified thumb, initial encounter -S63136D Dislocation of proximal interphalangeal joint of unspecified thumb, subsequent encounter -S63136S Dislocation of proximal interphalangeal joint of unspecified thumb, sequela -S63141A Subluxation of distal interphalangeal joint of right thumb, initial encounter -S63141D Subluxation of distal interphalangeal joint of right thumb, subsequent encounter -S63141S Subluxation of distal interphalangeal joint of right thumb, sequela -S63142A Subluxation of distal interphalangeal joint of left thumb, initial encounter -S63142D Subluxation of distal interphalangeal joint of left thumb, subsequent encounter -S63142S Subluxation of distal interphalangeal joint of left thumb, sequela -S63143A Subluxation of distal interphalangeal joint of unspecified thumb, initial encounter -S63143D Subluxation of distal interphalangeal joint of unspecified thumb, subsequent encounter -S63143S Subluxation of distal interphalangeal joint of unspecified thumb, sequela -S63144A Dislocation of distal interphalangeal joint of right thumb, initial encounter -S63144D Dislocation of distal interphalangeal joint of right thumb, subsequent encounter -S63144S Dislocation of distal interphalangeal joint of right thumb, sequela -S63145A Dislocation of distal interphalangeal joint of left thumb, initial encounter -S63145D Dislocation of distal interphalangeal joint of left thumb, subsequent encounter -S63145S Dislocation of distal interphalangeal joint of left thumb, sequela -S63146A Dislocation of distal interphalangeal joint of unspecified thumb, initial encounter -S63146D Dislocation of distal interphalangeal joint of unspecified thumb, subsequent encounter -S63146S Dislocation of distal interphalangeal joint of unspecified thumb, sequela -S63200A Unspecified subluxation of right index finger, initial encounter -S63200D Unspecified subluxation of right index finger, subsequent encounter -S63200S Unspecified subluxation of right index finger, sequela -S63201A Unspecified subluxation of left index finger, initial encounter -S63201D Unspecified subluxation of left index finger, subsequent encounter -S63201S Unspecified subluxation of left index finger, sequela -S63202A Unspecified subluxation of right middle finger, initial encounter -S63202D Unspecified subluxation of right middle finger, subsequent encounter -S63202S Unspecified subluxation of right middle finger, sequela -S63203A Unspecified subluxation of left middle finger, initial encounter -S63203D Unspecified subluxation of left middle finger, subsequent encounter -S63203S Unspecified subluxation of left middle finger, sequela -S63204A Unspecified subluxation of right ring finger, initial encounter -S63204D Unspecified subluxation of right ring finger, subsequent encounter -S63204S Unspecified subluxation of right ring finger, sequela -S63205A Unspecified subluxation of left ring finger, initial encounter -S63205D Unspecified subluxation of left ring finger, subsequent encounter -S63205S Unspecified subluxation of left ring finger, sequela -S63206A Unspecified subluxation of right little finger, initial encounter -S63206D Unspecified subluxation of right little finger, subsequent encounter -S63206S Unspecified subluxation of right little finger, sequela -S63207A Unspecified subluxation of left little finger, initial encounter -S63207D Unspecified subluxation of left little finger, subsequent encounter -S63207S Unspecified subluxation of left little finger, sequela -S63208A Unspecified subluxation of other finger, initial encounter -S63208D Unspecified subluxation of other finger, subsequent encounter -S63208S Unspecified subluxation of other finger, sequela -S63209A Unspecified subluxation of unspecified finger, initial encounter -S63209D Unspecified subluxation of unspecified finger, subsequent encounter -S63209S Unspecified subluxation of unspecified finger, sequela -S63210A Subluxation of metacarpophalangeal joint of right index finger, initial encounter -S63210D Subluxation of metacarpophalangeal joint of right index finger, subsequent encounter -S63210S Subluxation of metacarpophalangeal joint of right index finger, sequela -S63211A Subluxation of metacarpophalangeal joint of left index finger, initial encounter -S63211D Subluxation of metacarpophalangeal joint of left index finger, subsequent encounter -S63211S Subluxation of metacarpophalangeal joint of left index finger, sequela -S63212A Subluxation of metacarpophalangeal joint of right middle finger, initial encounter -S63212D Subluxation of metacarpophalangeal joint of right middle finger, subsequent encounter -S63212S Subluxation of metacarpophalangeal joint of right middle finger, sequela -S63213A Subluxation of metacarpophalangeal joint of left middle finger, initial encounter -S63213D Subluxation of metacarpophalangeal joint of left middle finger, subsequent encounter -S63213S Subluxation of metacarpophalangeal joint of left middle finger, sequela -S63214A Subluxation of metacarpophalangeal joint of right ring finger, initial encounter -S63214D Subluxation of metacarpophalangeal joint of right ring finger, subsequent encounter -S63214S Subluxation of metacarpophalangeal joint of right ring finger, sequela -S63215A Subluxation of metacarpophalangeal joint of left ring finger, initial encounter -S63215D Subluxation of metacarpophalangeal joint of left ring finger, subsequent encounter -S63215S Subluxation of metacarpophalangeal joint of left ring finger, sequela -S63216A Subluxation of metacarpophalangeal joint of right little finger, initial encounter -S63216D Subluxation of metacarpophalangeal joint of right little finger, subsequent encounter -S63216S Subluxation of metacarpophalangeal joint of right little finger, sequela -S63217A Subluxation of metacarpophalangeal joint of left little finger, initial encounter -S63217D Subluxation of metacarpophalangeal joint of left little finger, subsequent encounter -S63217S Subluxation of metacarpophalangeal joint of left little finger, sequela -S63218A Subluxation of metacarpophalangeal joint of other finger, initial encounter -S63218D Subluxation of metacarpophalangeal joint of other finger, subsequent encounter -S63218S Subluxation of metacarpophalangeal joint of other finger, sequela -S63219A Subluxation of metacarpophalangeal joint of unspecified finger, initial encounter -S63219D Subluxation of metacarpophalangeal joint of unspecified finger, subsequent encounter -S63219S Subluxation of metacarpophalangeal joint of unspecified finger, sequela -S63220A Subluxation of unspecified interphalangeal joint of right index finger, initial encounter -S63220D Subluxation of unspecified interphalangeal joint of right index finger, subsequent encounter -S63220S Subluxation of unspecified interphalangeal joint of right index finger, sequela -S63221A Subluxation of unspecified interphalangeal joint of left index finger, initial encounter -S63221D Subluxation of unspecified interphalangeal joint of left index finger, subsequent encounter -S63221S Subluxation of unspecified interphalangeal joint of left index finger, sequela -S63222A Subluxation of unspecified interphalangeal joint of right middle finger, initial encounter -S63222D Subluxation of unspecified interphalangeal joint of right middle finger, subsequent encounter -S63222S Subluxation of unspecified interphalangeal joint of right middle finger, sequela -S63223A Subluxation of unspecified interphalangeal joint of left middle finger, initial encounter -S63223D Subluxation of unspecified interphalangeal joint of left middle finger, subsequent encounter -S63223S Subluxation of unspecified interphalangeal joint of left middle finger, sequela -S63224A Subluxation of unspecified interphalangeal joint of right ring finger, initial encounter -S63224D Subluxation of unspecified interphalangeal joint of right ring finger, subsequent encounter -S63224S Subluxation of unspecified interphalangeal joint of right ring finger, sequela -S63225A Subluxation of unspecified interphalangeal joint of left ring finger, initial encounter -S63225D Subluxation of unspecified interphalangeal joint of left ring finger, subsequent encounter -S63225S Subluxation of unspecified interphalangeal joint of left ring finger, sequela -S63226A Subluxation of unspecified interphalangeal joint of right little finger, initial encounter -S63226D Subluxation of unspecified interphalangeal joint of right little finger, subsequent encounter -S63226S Subluxation of unspecified interphalangeal joint of right little finger, sequela -S63227A Subluxation of unspecified interphalangeal joint of left little finger, initial encounter -S63227D Subluxation of unspecified interphalangeal joint of left little finger, subsequent encounter -S63227S Subluxation of unspecified interphalangeal joint of left little finger, sequela -S63228A Subluxation of unspecified interphalangeal joint of other finger, initial encounter -S63228D Subluxation of unspecified interphalangeal joint of other finger, subsequent encounter -S63228S Subluxation of unspecified interphalangeal joint of other finger, sequela -S63229A Subluxation of unspecified interphalangeal joint of unspecified finger, initial encounter -S63229D Subluxation of unspecified interphalangeal joint of unspecified finger, subsequent encounter -S63229S Subluxation of unspecified interphalangeal joint of unspecified finger, sequela -S63230A Subluxation of proximal interphalangeal joint of right index finger, initial encounter -S63230D Subluxation of proximal interphalangeal joint of right index finger, subsequent encounter -S63230S Subluxation of proximal interphalangeal joint of right index finger, sequela -S63231A Subluxation of proximal interphalangeal joint of left index finger, initial encounter -S63231D Subluxation of proximal interphalangeal joint of left index finger, subsequent encounter -S63231S Subluxation of proximal interphalangeal joint of left index finger, sequela -S63232A Subluxation of proximal interphalangeal joint of right middle finger, initial encounter -S63232D Subluxation of proximal interphalangeal joint of right middle finger, subsequent encounter -S63232S Subluxation of proximal interphalangeal joint of right middle finger, sequela -S63233A Subluxation of proximal interphalangeal joint of left middle finger, initial encounter -S63233D Subluxation of proximal interphalangeal joint of left middle finger, subsequent encounter -S63233S Subluxation of proximal interphalangeal joint of left middle finger, sequela -S63234A Subluxation of proximal interphalangeal joint of right ring finger, initial encounter -S63234D Subluxation of proximal interphalangeal joint of right ring finger, subsequent encounter -S63234S Subluxation of proximal interphalangeal joint of right ring finger, sequela -S63235A Subluxation of proximal interphalangeal joint of left ring finger, initial encounter -S63235D Subluxation of proximal interphalangeal joint of left ring finger, subsequent encounter -S63235S Subluxation of proximal interphalangeal joint of left ring finger, sequela -S63236A Subluxation of proximal interphalangeal joint of right little finger, initial encounter -S63236D Subluxation of proximal interphalangeal joint of right little finger, subsequent encounter -S63236S Subluxation of proximal interphalangeal joint of right little finger, sequela -S63237A Subluxation of proximal interphalangeal joint of left little finger, initial encounter -S63237D Subluxation of proximal interphalangeal joint of left little finger, subsequent encounter -S63237S Subluxation of proximal interphalangeal joint of left little finger, sequela -S63238A Subluxation of proximal interphalangeal joint of other finger, initial encounter -S63238D Subluxation of proximal interphalangeal joint of other finger, subsequent encounter -S63238S Subluxation of proximal interphalangeal joint of other finger, sequela -S63239A Subluxation of proximal interphalangeal joint of unspecified finger, initial encounter -S63239D Subluxation of proximal interphalangeal joint of unspecified finger, subsequent encounter -S63239S Subluxation of proximal interphalangeal joint of unspecified finger, sequela -S63240A Subluxation of distal interphalangeal joint of right index finger, initial encounter -S63240D Subluxation of distal interphalangeal joint of right index finger, subsequent encounter -S63240S Subluxation of distal interphalangeal joint of right index finger, sequela -S63241A Subluxation of distal interphalangeal joint of left index finger, initial encounter -S63241D Subluxation of distal interphalangeal joint of left index finger, subsequent encounter -S63241S Subluxation of distal interphalangeal joint of left index finger, sequela -S63242A Subluxation of distal interphalangeal joint of right middle finger, initial encounter -S63242D Subluxation of distal interphalangeal joint of right middle finger, subsequent encounter -S63242S Subluxation of distal interphalangeal joint of right middle finger, sequela -S63243A Subluxation of distal interphalangeal joint of left middle finger, initial encounter -S63243D Subluxation of distal interphalangeal joint of left middle finger, subsequent encounter -S63243S Subluxation of distal interphalangeal joint of left middle finger, sequela -S63244A Subluxation of distal interphalangeal joint of right ring finger, initial encounter -S63244D Subluxation of distal interphalangeal joint of right ring finger, subsequent encounter -S63244S Subluxation of distal interphalangeal joint of right ring finger, sequela -S63245A Subluxation of distal interphalangeal joint of left ring finger, initial encounter -S63245D Subluxation of distal interphalangeal joint of left ring finger, subsequent encounter -S63245S Subluxation of distal interphalangeal joint of left ring finger, sequela -S63246A Subluxation of distal interphalangeal joint of right little finger, initial encounter -S63246D Subluxation of distal interphalangeal joint of right little finger, subsequent encounter -S63246S Subluxation of distal interphalangeal joint of right little finger, sequela -S63247A Subluxation of distal interphalangeal joint of left little finger, initial encounter -S63247D Subluxation of distal interphalangeal joint of left little finger, subsequent encounter -S63247S Subluxation of distal interphalangeal joint of left little finger, sequela -S63248A Subluxation of distal interphalangeal joint of other finger, initial encounter -S63248D Subluxation of distal interphalangeal joint of other finger, subsequent encounter -S63248S Subluxation of distal interphalangeal joint of other finger, sequela -S63249A Subluxation of distal interphalangeal joint of unspecified finger, initial encounter -S63249D Subluxation of distal interphalangeal joint of unspecified finger, subsequent encounter -S63249S Subluxation of distal interphalangeal joint of unspecified finger, sequela -S63250A Unspecified dislocation of right index finger, initial encounter -S63250D Unspecified dislocation of right index finger, subsequent encounter -S63250S Unspecified dislocation of right index finger, sequela -S63251A Unspecified dislocation of left index finger, initial encounter -S63251D Unspecified dislocation of left index finger, subsequent encounter -S63251S Unspecified dislocation of left index finger, sequela -S63252A Unspecified dislocation of right middle finger, initial encounter -S63252D Unspecified dislocation of right middle finger, subsequent encounter -S63252S Unspecified dislocation of right middle finger, sequela -S63253A Unspecified dislocation of left middle finger, initial encounter -S63253D Unspecified dislocation of left middle finger, subsequent encounter -S63253S Unspecified dislocation of left middle finger, sequela -S63254A Unspecified dislocation of right ring finger, initial encounter -S63254D Unspecified dislocation of right ring finger, subsequent encounter -S63254S Unspecified dislocation of right ring finger, sequela -S63255A Unspecified dislocation of left ring finger, initial encounter -S63255D Unspecified dislocation of left ring finger, subsequent encounter -S63255S Unspecified dislocation of left ring finger, sequela -S63256A Unspecified dislocation of right little finger, initial encounter -S63256D Unspecified dislocation of right little finger, subsequent encounter -S63256S Unspecified dislocation of right little finger, sequela -S63257A Unspecified dislocation of left little finger, initial encounter -S63257D Unspecified dislocation of left little finger, subsequent encounter -S63257S Unspecified dislocation of left little finger, sequela -S63258A Unspecified dislocation of other finger, initial encounter -S63258D Unspecified dislocation of other finger, subsequent encounter -S63258S Unspecified dislocation of other finger, sequela -S63259A Unspecified dislocation of unspecified finger, initial encounter -S63259D Unspecified dislocation of unspecified finger, subsequent encounter -S63259S Unspecified dislocation of unspecified finger, sequela -S63260A Dislocation of metacarpophalangeal joint of right index finger, initial encounter -S63260D Dislocation of metacarpophalangeal joint of right index finger, subsequent encounter -S63260S Dislocation of metacarpophalangeal joint of right index finger, sequela -S63261A Dislocation of metacarpophalangeal joint of left index finger, initial encounter -S63261D Dislocation of metacarpophalangeal joint of left index finger, subsequent encounter -S63261S Dislocation of metacarpophalangeal joint of left index finger, sequela -S63262A Dislocation of metacarpophalangeal joint of right middle finger, initial encounter -S63262D Dislocation of metacarpophalangeal joint of right middle finger, subsequent encounter -S63262S Dislocation of metacarpophalangeal joint of right middle finger, sequela -S63263A Dislocation of metacarpophalangeal joint of left middle finger, initial encounter -S63263D Dislocation of metacarpophalangeal joint of left middle finger, subsequent encounter -S63263S Dislocation of metacarpophalangeal joint of left middle finger, sequela -S63264A Dislocation of metacarpophalangeal joint of right ring finger, initial encounter -S63264D Dislocation of metacarpophalangeal joint of right ring finger, subsequent encounter -S63264S Dislocation of metacarpophalangeal joint of right ring finger, sequela -S63265A Dislocation of metacarpophalangeal joint of left ring finger, initial encounter -S63265D Dislocation of metacarpophalangeal joint of left ring finger, subsequent encounter -S63265S Dislocation of metacarpophalangeal joint of left ring finger, sequela -S63266A Dislocation of metacarpophalangeal joint of right little finger, initial encounter -S63266D Dislocation of metacarpophalangeal joint of right little finger, subsequent encounter -S63266S Dislocation of metacarpophalangeal joint of right little finger, sequela -S63267A Dislocation of metacarpophalangeal joint of left little finger, initial encounter -S63267D Dislocation of metacarpophalangeal joint of left little finger, subsequent encounter -S63267S Dislocation of metacarpophalangeal joint of left little finger, sequela -S63268A Dislocation of metacarpophalangeal joint of other finger, initial encounter -S63268D Dislocation of metacarpophalangeal joint of other finger, subsequent encounter -S63268S Dislocation of metacarpophalangeal joint of other finger, sequela -S63269A Dislocation of metacarpophalangeal joint of unspecified finger, initial encounter -S63269D Dislocation of metacarpophalangeal joint of unspecified finger, subsequent encounter -S63269S Dislocation of metacarpophalangeal joint of unspecified finger, sequela -S63270A Dislocation of unspecified interphalangeal joint of right index finger, initial encounter -S63270D Dislocation of unspecified interphalangeal joint of right index finger, subsequent encounter -S63270S Dislocation of unspecified interphalangeal joint of right index finger, sequela -S63271A Dislocation of unspecified interphalangeal joint of left index finger, initial encounter -S63271D Dislocation of unspecified interphalangeal joint of left index finger, subsequent encounter -S63271S Dislocation of unspecified interphalangeal joint of left index finger, sequela -S63272A Dislocation of unspecified interphalangeal joint of right middle finger, initial encounter -S63272D Dislocation of unspecified interphalangeal joint of right middle finger, subsequent encounter -S63272S Dislocation of unspecified interphalangeal joint of right middle finger, sequela -S63273A Dislocation of unspecified interphalangeal joint of left middle finger, initial encounter -S63273D Dislocation of unspecified interphalangeal joint of left middle finger, subsequent encounter -S63273S Dislocation of unspecified interphalangeal joint of left middle finger, sequela -S63274A Dislocation of unspecified interphalangeal joint of right ring finger, initial encounter -S63274D Dislocation of unspecified interphalangeal joint of right ring finger, subsequent encounter -S63274S Dislocation of unspecified interphalangeal joint of right ring finger, sequela -S63275A Dislocation of unspecified interphalangeal joint of left ring finger, initial encounter -S63275D Dislocation of unspecified interphalangeal joint of left ring finger, subsequent encounter -S63275S Dislocation of unspecified interphalangeal joint of left ring finger, sequela -S63276A Dislocation of unspecified interphalangeal joint of right little finger, initial encounter -S63276D Dislocation of unspecified interphalangeal joint of right little finger, subsequent encounter -S63276S Dislocation of unspecified interphalangeal joint of right little finger, sequela -S63277A Dislocation of unspecified interphalangeal joint of left little finger, initial encounter -S63277D Dislocation of unspecified interphalangeal joint of left little finger, subsequent encounter -S63277S Dislocation of unspecified interphalangeal joint of left little finger, sequela -S63278A Dislocation of unspecified interphalangeal joint of other finger, initial encounter -S63278D Dislocation of unspecified interphalangeal joint of other finger, subsequent encounter -S63278S Dislocation of unspecified interphalangeal joint of other finger, sequela -S63279A Dislocation of unspecified interphalangeal joint of unspecified finger, initial encounter -S63279D Dislocation of unspecified interphalangeal joint of unspecified finger, subsequent encounter -S63279S Dislocation of unspecified interphalangeal joint of unspecified finger, sequela -S63280A Dislocation of proximal interphalangeal joint of right index finger, initial encounter -S63280D Dislocation of proximal interphalangeal joint of right index finger, subsequent encounter -S63280S Dislocation of proximal interphalangeal joint of right index finger, sequela -S63281A Dislocation of proximal interphalangeal joint of left index finger, initial encounter -S63281D Dislocation of proximal interphalangeal joint of left index finger, subsequent encounter -S63281S Dislocation of proximal interphalangeal joint of left index finger, sequela -S63282A Dislocation of proximal interphalangeal joint of right middle finger, initial encounter -S63282D Dislocation of proximal interphalangeal joint of right middle finger, subsequent encounter -S63282S Dislocation of proximal interphalangeal joint of right middle finger, sequela -S63283A Dislocation of proximal interphalangeal joint of left middle finger, initial encounter -S63283D Dislocation of proximal interphalangeal joint of left middle finger, subsequent encounter -S63283S Dislocation of proximal interphalangeal joint of left middle finger, sequela -S63284A Dislocation of proximal interphalangeal joint of right ring finger, initial encounter -S63284D Dislocation of proximal interphalangeal joint of right ring finger, subsequent encounter -S63284S Dislocation of proximal interphalangeal joint of right ring finger, sequela -S63285A Dislocation of proximal interphalangeal joint of left ring finger, initial encounter -S63285D Dislocation of proximal interphalangeal joint of left ring finger, subsequent encounter -S63285S Dislocation of proximal interphalangeal joint of left ring finger, sequela -S63286A Dislocation of proximal interphalangeal joint of right little finger, initial encounter -S63286D Dislocation of proximal interphalangeal joint of right little finger, subsequent encounter -S63286S Dislocation of proximal interphalangeal joint of right little finger, sequela -S63287A Dislocation of proximal interphalangeal joint of left little finger, initial encounter -S63287D Dislocation of proximal interphalangeal joint of left little finger, subsequent encounter -S63287S Dislocation of proximal interphalangeal joint of left little finger, sequela -S63288A Dislocation of proximal interphalangeal joint of other finger, initial encounter -S63288D Dislocation of proximal interphalangeal joint of other finger, subsequent encounter -S63288S Dislocation of proximal interphalangeal joint of other finger, sequela -S63289A Dislocation of proximal interphalangeal joint of unspecified finger, initial encounter -S63289D Dislocation of proximal interphalangeal joint of unspecified finger, subsequent encounter -S63289S Dislocation of proximal interphalangeal joint of unspecified finger, sequela -S63290A Dislocation of distal interphalangeal joint of right index finger, initial encounter -S63290D Dislocation of distal interphalangeal joint of right index finger, subsequent encounter -S63290S Dislocation of distal interphalangeal joint of right index finger, sequela -S63291A Dislocation of distal interphalangeal joint of left index finger, initial encounter -S63291D Dislocation of distal interphalangeal joint of left index finger, subsequent encounter -S63291S Dislocation of distal interphalangeal joint of left index finger, sequela -S63292A Dislocation of distal interphalangeal joint of right middle finger, initial encounter -S63292D Dislocation of distal interphalangeal joint of right middle finger, subsequent encounter -S63292S Dislocation of distal interphalangeal joint of right middle finger, sequela -S63293A Dislocation of distal interphalangeal joint of left middle finger, initial encounter -S63293D Dislocation of distal interphalangeal joint of left middle finger, subsequent encounter -S63293S Dislocation of distal interphalangeal joint of left middle finger, sequela -S63294A Dislocation of distal interphalangeal joint of right ring finger, initial encounter -S63294D Dislocation of distal interphalangeal joint of right ring finger, subsequent encounter -S63294S Dislocation of distal interphalangeal joint of right ring finger, sequela -S63295A Dislocation of distal interphalangeal joint of left ring finger, initial encounter -S63295D Dislocation of distal interphalangeal joint of left ring finger, subsequent encounter -S63295S Dislocation of distal interphalangeal joint of left ring finger, sequela -S63296A Dislocation of distal interphalangeal joint of right little finger, initial encounter -S63296D Dislocation of distal interphalangeal joint of right little finger, subsequent encounter -S63296S Dislocation of distal interphalangeal joint of right little finger, sequela -S63297A Dislocation of distal interphalangeal joint of left little finger, initial encounter -S63297D Dislocation of distal interphalangeal joint of left little finger, subsequent encounter -S63297S Dislocation of distal interphalangeal joint of left little finger, sequela -S63298A Dislocation of distal interphalangeal joint of other finger, initial encounter -S63298D Dislocation of distal interphalangeal joint of other finger, subsequent encounter -S63298S Dislocation of distal interphalangeal joint of other finger, sequela -S63299A Dislocation of distal interphalangeal joint of unspecified finger, initial encounter -S63299D Dislocation of distal interphalangeal joint of unspecified finger, subsequent encounter -S63299S Dislocation of distal interphalangeal joint of unspecified finger, sequela -S63301A Traumatic rupture of unspecified ligament of right wrist, initial encounter -S63301D Traumatic rupture of unspecified ligament of right wrist, subsequent encounter -S63301S Traumatic rupture of unspecified ligament of right wrist, sequela -S63302A Traumatic rupture of unspecified ligament of left wrist, initial encounter -S63302D Traumatic rupture of unspecified ligament of left wrist, subsequent encounter -S63302S Traumatic rupture of unspecified ligament of left wrist, sequela -S63309A Traumatic rupture of unspecified ligament of unspecified wrist, initial encounter -S63309D Traumatic rupture of unspecified ligament of unspecified wrist, subsequent encounter -S63309S Traumatic rupture of unspecified ligament of unspecified wrist, sequela -S63311A Traumatic rupture of collateral ligament of right wrist, initial encounter -S63311D Traumatic rupture of collateral ligament of right wrist, subsequent encounter -S63311S Traumatic rupture of collateral ligament of right wrist, sequela -S63312A Traumatic rupture of collateral ligament of left wrist, initial encounter -S63312D Traumatic rupture of collateral ligament of left wrist, subsequent encounter -S63312S Traumatic rupture of collateral ligament of left wrist, sequela -S63319A Traumatic rupture of collateral ligament of unspecified wrist, initial encounter -S63319D Traumatic rupture of collateral ligament of unspecified wrist, subsequent encounter -S63319S Traumatic rupture of collateral ligament of unspecified wrist, sequela -S63321A Traumatic rupture of right radiocarpal ligament, initial encounter -S63321D Traumatic rupture of right radiocarpal ligament, subsequent encounter -S63321S Traumatic rupture of right radiocarpal ligament, sequela -S63322A Traumatic rupture of left radiocarpal ligament, initial encounter -S63322D Traumatic rupture of left radiocarpal ligament, subsequent encounter -S63322S Traumatic rupture of left radiocarpal ligament, sequela -S63329A Traumatic rupture of unspecified radiocarpal ligament, initial encounter -S63329D Traumatic rupture of unspecified radiocarpal ligament, subsequent encounter -S63329S Traumatic rupture of unspecified radiocarpal ligament, sequela -S63331A Traumatic rupture of right ulnocarpal (palmar) ligament, initial encounter -S63331D Traumatic rupture of right ulnocarpal (palmar) ligament, subsequent encounter -S63331S Traumatic rupture of right ulnocarpal (palmar) ligament, sequela -S63332A Traumatic rupture of left ulnocarpal (palmar) ligament, initial encounter -S63332D Traumatic rupture of left ulnocarpal (palmar) ligament, subsequent encounter -S63332S Traumatic rupture of left ulnocarpal (palmar) ligament, sequela -S63339A Traumatic rupture of unspecified ulnocarpal (palmar) ligament, initial encounter -S63339D Traumatic rupture of unspecified ulnocarpal (palmar) ligament, subsequent encounter -S63339S Traumatic rupture of unspecified ulnocarpal (palmar) ligament, sequela -S63391A Traumatic rupture of other ligament of right wrist, initial encounter -S63391D Traumatic rupture of other ligament of right wrist, subsequent encounter -S63391S Traumatic rupture of other ligament of right wrist, sequela -S63392A Traumatic rupture of other ligament of left wrist, initial encounter -S63392D Traumatic rupture of other ligament of left wrist, subsequent encounter -S63392S Traumatic rupture of other ligament of left wrist, sequela -S63399A Traumatic rupture of other ligament of unspecified wrist, initial encounter -S63399D Traumatic rupture of other ligament of unspecified wrist, subsequent encounter -S63399S Traumatic rupture of other ligament of unspecified wrist, sequela -S63400A Traumatic rupture of unspecified ligament of right index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63400D Traumatic rupture of unspecified ligament of right index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63400S Traumatic rupture of unspecified ligament of right index finger at metacarpophalangeal and interphalangeal joint, sequela -S63401A Traumatic rupture of unspecified ligament of left index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63401D Traumatic rupture of unspecified ligament of left index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63401S Traumatic rupture of unspecified ligament of left index finger at metacarpophalangeal and interphalangeal joint, sequela -S63402A Traumatic rupture of unspecified ligament of right middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63402D Traumatic rupture of unspecified ligament of right middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63402S Traumatic rupture of unspecified ligament of right middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63403A Traumatic rupture of unspecified ligament of left middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63403D Traumatic rupture of unspecified ligament of left middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63403S Traumatic rupture of unspecified ligament of left middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63404A Traumatic rupture of unspecified ligament of right ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63404D Traumatic rupture of unspecified ligament of right ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63404S Traumatic rupture of unspecified ligament of right ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63405A Traumatic rupture of unspecified ligament of left ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63405D Traumatic rupture of unspecified ligament of left ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63405S Traumatic rupture of unspecified ligament of left ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63406A Traumatic rupture of unspecified ligament of right little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63406D Traumatic rupture of unspecified ligament of right little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63406S Traumatic rupture of unspecified ligament of right little finger at metacarpophalangeal and interphalangeal joint, sequela -S63407A Traumatic rupture of unspecified ligament of left little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63407D Traumatic rupture of unspecified ligament of left little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63407S Traumatic rupture of unspecified ligament of left little finger at metacarpophalangeal and interphalangeal joint, sequela -S63408A Traumatic rupture of unspecified ligament of other finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63408D Traumatic rupture of unspecified ligament of other finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63408S Traumatic rupture of unspecified ligament of other finger at metacarpophalangeal and interphalangeal joint, sequela -S63409A Traumatic rupture of unspecified ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63409D Traumatic rupture of unspecified ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63409S Traumatic rupture of unspecified ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, sequela -S63410A Traumatic rupture of collateral ligament of right index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63410D Traumatic rupture of collateral ligament of right index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63410S Traumatic rupture of collateral ligament of right index finger at metacarpophalangeal and interphalangeal joint, sequela -S63411A Traumatic rupture of collateral ligament of left index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63411D Traumatic rupture of collateral ligament of left index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63411S Traumatic rupture of collateral ligament of left index finger at metacarpophalangeal and interphalangeal joint, sequela -S63412A Traumatic rupture of collateral ligament of right middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63412D Traumatic rupture of collateral ligament of right middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63412S Traumatic rupture of collateral ligament of right middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63413A Traumatic rupture of collateral ligament of left middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63413D Traumatic rupture of collateral ligament of left middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63413S Traumatic rupture of collateral ligament of left middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63414A Traumatic rupture of collateral ligament of right ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63414D Traumatic rupture of collateral ligament of right ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63414S Traumatic rupture of collateral ligament of right ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63415A Traumatic rupture of collateral ligament of left ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63415D Traumatic rupture of collateral ligament of left ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63415S Traumatic rupture of collateral ligament of left ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63416A Traumatic rupture of collateral ligament of right little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63416D Traumatic rupture of collateral ligament of right little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63416S Traumatic rupture of collateral ligament of right little finger at metacarpophalangeal and interphalangeal joint, sequela -S63417A Traumatic rupture of collateral ligament of left little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63417D Traumatic rupture of collateral ligament of left little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63417S Traumatic rupture of collateral ligament of left little finger at metacarpophalangeal and interphalangeal joint, sequela -S63418A Traumatic rupture of collateral ligament of other finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63418D Traumatic rupture of collateral ligament of other finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63418S Traumatic rupture of collateral ligament of other finger at metacarpophalangeal and interphalangeal joint, sequela -S63419A Traumatic rupture of collateral ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63419D Traumatic rupture of collateral ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63419S Traumatic rupture of collateral ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, sequela -S63420A Traumatic rupture of palmar ligament of right index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63420D Traumatic rupture of palmar ligament of right index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63420S Traumatic rupture of palmar ligament of right index finger at metacarpophalangeal and interphalangeal joint, sequela -S63421A Traumatic rupture of palmar ligament of left index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63421D Traumatic rupture of palmar ligament of left index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63421S Traumatic rupture of palmar ligament of left index finger at metacarpophalangeal and interphalangeal joint, sequela -S63422A Traumatic rupture of palmar ligament of right middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63422D Traumatic rupture of palmar ligament of right middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63422S Traumatic rupture of palmar ligament of right middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63423A Traumatic rupture of palmar ligament of left middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63423D Traumatic rupture of palmar ligament of left middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63423S Traumatic rupture of palmar ligament of left middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63424A Traumatic rupture of palmar ligament of right ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63424D Traumatic rupture of palmar ligament of right ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63424S Traumatic rupture of palmar ligament of right ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63425A Traumatic rupture of palmar ligament of left ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63425D Traumatic rupture of palmar ligament of left ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63425S Traumatic rupture of palmar ligament of left ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63426A Traumatic rupture of palmar ligament of right little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63426D Traumatic rupture of palmar ligament of right little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63426S Traumatic rupture of palmar ligament of right little finger at metacarpophalangeal and interphalangeal joint, sequela -S63427A Traumatic rupture of palmar ligament of left little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63427D Traumatic rupture of palmar ligament of left little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63427S Traumatic rupture of palmar ligament of left little finger at metacarpophalangeal and interphalangeal joint, sequela -S63428A Traumatic rupture of palmar ligament of other finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63428D Traumatic rupture of palmar ligament of other finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63428S Traumatic rupture of palmar ligament of other finger at metacarpophalangeal and interphalangeal joint, sequela -S63429A Traumatic rupture of palmar ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63429D Traumatic rupture of palmar ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63429S Traumatic rupture of palmar ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, sequela -S63430A Traumatic rupture of volar plate of right index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63430D Traumatic rupture of volar plate of right index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63430S Traumatic rupture of volar plate of right index finger at metacarpophalangeal and interphalangeal joint, sequela -S63431A Traumatic rupture of volar plate of left index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63431D Traumatic rupture of volar plate of left index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63431S Traumatic rupture of volar plate of left index finger at metacarpophalangeal and interphalangeal joint, sequela -S63432A Traumatic rupture of volar plate of right middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63432D Traumatic rupture of volar plate of right middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63432S Traumatic rupture of volar plate of right middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63433A Traumatic rupture of volar plate of left middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63433D Traumatic rupture of volar plate of left middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63433S Traumatic rupture of volar plate of left middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63434A Traumatic rupture of volar plate of right ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63434D Traumatic rupture of volar plate of right ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63434S Traumatic rupture of volar plate of right ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63435A Traumatic rupture of volar plate of left ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63435D Traumatic rupture of volar plate of left ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63435S Traumatic rupture of volar plate of left ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63436A Traumatic rupture of volar plate of right little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63436D Traumatic rupture of volar plate of right little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63436S Traumatic rupture of volar plate of right little finger at metacarpophalangeal and interphalangeal joint, sequela -S63437A Traumatic rupture of volar plate of left little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63437D Traumatic rupture of volar plate of left little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63437S Traumatic rupture of volar plate of left little finger at metacarpophalangeal and interphalangeal joint, sequela -S63438A Traumatic rupture of volar plate of other finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63438D Traumatic rupture of volar plate of other finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63438S Traumatic rupture of volar plate of other finger at metacarpophalangeal and interphalangeal joint, sequela -S63439A Traumatic rupture of volar plate of unspecified finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63439D Traumatic rupture of volar plate of unspecified finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63439S Traumatic rupture of volar plate of unspecified finger at metacarpophalangeal and interphalangeal joint, sequela -S63490A Traumatic rupture of other ligament of right index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63490D Traumatic rupture of other ligament of right index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63490S Traumatic rupture of other ligament of right index finger at metacarpophalangeal and interphalangeal joint, sequela -S63491A Traumatic rupture of other ligament of left index finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63491D Traumatic rupture of other ligament of left index finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63491S Traumatic rupture of other ligament of left index finger at metacarpophalangeal and interphalangeal joint, sequela -S63492A Traumatic rupture of other ligament of right middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63492D Traumatic rupture of other ligament of right middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63492S Traumatic rupture of other ligament of right middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63493A Traumatic rupture of other ligament of left middle finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63493D Traumatic rupture of other ligament of left middle finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63493S Traumatic rupture of other ligament of left middle finger at metacarpophalangeal and interphalangeal joint, sequela -S63494A Traumatic rupture of other ligament of right ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63494D Traumatic rupture of other ligament of right ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63494S Traumatic rupture of other ligament of right ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63495A Traumatic rupture of other ligament of left ring finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63495D Traumatic rupture of other ligament of left ring finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63495S Traumatic rupture of other ligament of left ring finger at metacarpophalangeal and interphalangeal joint, sequela -S63496A Traumatic rupture of other ligament of right little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63496D Traumatic rupture of other ligament of right little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63496S Traumatic rupture of other ligament of right little finger at metacarpophalangeal and interphalangeal joint, sequela -S63497A Traumatic rupture of other ligament of left little finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63497D Traumatic rupture of other ligament of left little finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63497S Traumatic rupture of other ligament of left little finger at metacarpophalangeal and interphalangeal joint, sequela -S63498A Traumatic rupture of other ligament of other finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63498D Traumatic rupture of other ligament of other finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63498S Traumatic rupture of other ligament of other finger at metacarpophalangeal and interphalangeal joint, sequela -S63499A Traumatic rupture of other ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, initial encounter -S63499D Traumatic rupture of other ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, subsequent encounter -S63499S Traumatic rupture of other ligament of unspecified finger at metacarpophalangeal and interphalangeal joint, sequela -S63501A Unspecified sprain of right wrist, initial encounter -S63501D Unspecified sprain of right wrist, subsequent encounter -S63501S Unspecified sprain of right wrist, sequela -S63502A Unspecified sprain of left wrist, initial encounter -S63502D Unspecified sprain of left wrist, subsequent encounter -S63502S Unspecified sprain of left wrist, sequela -S63509A Unspecified sprain of unspecified wrist, initial encounter -S63509D Unspecified sprain of unspecified wrist, subsequent encounter -S63509S Unspecified sprain of unspecified wrist, sequela -S63511A Sprain of carpal joint of right wrist, initial encounter -S63511D Sprain of carpal joint of right wrist, subsequent encounter -S63511S Sprain of carpal joint of right wrist, sequela -S63512A Sprain of carpal joint of left wrist, initial encounter -S63512D Sprain of carpal joint of left wrist, subsequent encounter -S63512S Sprain of carpal joint of left wrist, sequela -S63519A Sprain of carpal joint of unspecified wrist, initial encounter -S63519D Sprain of carpal joint of unspecified wrist, subsequent encounter -S63519S Sprain of carpal joint of unspecified wrist, sequela -S63521A Sprain of radiocarpal joint of right wrist, initial encounter -S63521D Sprain of radiocarpal joint of right wrist, subsequent encounter -S63521S Sprain of radiocarpal joint of right wrist, sequela -S63522A Sprain of radiocarpal joint of left wrist, initial encounter -S63522D Sprain of radiocarpal joint of left wrist, subsequent encounter -S63522S Sprain of radiocarpal joint of left wrist, sequela -S63529A Sprain of radiocarpal joint of unspecified wrist, initial encounter -S63529D Sprain of radiocarpal joint of unspecified wrist, subsequent encounter -S63529S Sprain of radiocarpal joint of unspecified wrist, sequela -S63591A Other specified sprain of right wrist, initial encounter -S63591D Other specified sprain of right wrist, subsequent encounter -S63591S Other specified sprain of right wrist, sequela -S63592A Other specified sprain of left wrist, initial encounter -S63592D Other specified sprain of left wrist, subsequent encounter -S63592S Other specified sprain of left wrist, sequela -S63599A Other specified sprain of unspecified wrist, initial encounter -S63599D Other specified sprain of unspecified wrist, subsequent encounter -S63599S Other specified sprain of unspecified wrist, sequela -S63601A Unspecified sprain of right thumb, initial encounter -S63601D Unspecified sprain of right thumb, subsequent encounter -S63601S Unspecified sprain of right thumb, sequela -S63602A Unspecified sprain of left thumb, initial encounter -S63602D Unspecified sprain of left thumb, subsequent encounter -S63602S Unspecified sprain of left thumb, sequela -S63609A Unspecified sprain of unspecified thumb, initial encounter -S63609D Unspecified sprain of unspecified thumb, subsequent encounter -S63609S Unspecified sprain of unspecified thumb, sequela -S63610A Unspecified sprain of right index finger, initial encounter -S63610D Unspecified sprain of right index finger, subsequent encounter -S63610S Unspecified sprain of right index finger, sequela -S63611A Unspecified sprain of left index finger, initial encounter -S63611D Unspecified sprain of left index finger, subsequent encounter -S63611S Unspecified sprain of left index finger, sequela -S63612A Unspecified sprain of right middle finger, initial encounter -S63612D Unspecified sprain of right middle finger, subsequent encounter -S63612S Unspecified sprain of right middle finger, sequela -S63613A Unspecified sprain of left middle finger, initial encounter -S63613D Unspecified sprain of left middle finger, subsequent encounter -S63613S Unspecified sprain of left middle finger, sequela -S63614A Unspecified sprain of right ring finger, initial encounter -S63614D Unspecified sprain of right ring finger, subsequent encounter -S63614S Unspecified sprain of right ring finger, sequela -S63615A Unspecified sprain of left ring finger, initial encounter -S63615D Unspecified sprain of left ring finger, subsequent encounter -S63615S Unspecified sprain of left ring finger, sequela -S63616A Unspecified sprain of right little finger, initial encounter -S63616D Unspecified sprain of right little finger, subsequent encounter -S63616S Unspecified sprain of right little finger, sequela -S63617A Unspecified sprain of left little finger, initial encounter -S63617D Unspecified sprain of left little finger, subsequent encounter -S63617S Unspecified sprain of left little finger, sequela -S63618A Unspecified sprain of other finger, initial encounter -S63618D Unspecified sprain of other finger, subsequent encounter -S63618S Unspecified sprain of other finger, sequela -S63619A Unspecified sprain of unspecified finger, initial encounter -S63619D Unspecified sprain of unspecified finger, subsequent encounter -S63619S Unspecified sprain of unspecified finger, sequela -S63621A Sprain of interphalangeal joint of right thumb, initial encounter -S63621D Sprain of interphalangeal joint of right thumb, subsequent encounter -S63621S Sprain of interphalangeal joint of right thumb, sequela -S63622A Sprain of interphalangeal joint of left thumb, initial encounter -S63622D Sprain of interphalangeal joint of left thumb, subsequent encounter -S63622S Sprain of interphalangeal joint of left thumb, sequela -S63629A Sprain of interphalangeal joint of unspecified thumb, initial encounter -S63629D Sprain of interphalangeal joint of unspecified thumb, subsequent encounter -S63629S Sprain of interphalangeal joint of unspecified thumb, sequela -S63630A Sprain of interphalangeal joint of right index finger, initial encounter -S63630D Sprain of interphalangeal joint of right index finger, subsequent encounter -S63630S Sprain of interphalangeal joint of right index finger, sequela -S63631A Sprain of interphalangeal joint of left index finger, initial encounter -S63631D Sprain of interphalangeal joint of left index finger, subsequent encounter -S63631S Sprain of interphalangeal joint of left index finger, sequela -S63632A Sprain of interphalangeal joint of right middle finger, initial encounter -S63632D Sprain of interphalangeal joint of right middle finger, subsequent encounter -S63632S Sprain of interphalangeal joint of right middle finger, sequela -S63633A Sprain of interphalangeal joint of left middle finger, initial encounter -S63633D Sprain of interphalangeal joint of left middle finger, subsequent encounter -S63633S Sprain of interphalangeal joint of left middle finger, sequela -S63634A Sprain of interphalangeal joint of right ring finger, initial encounter -S63634D Sprain of interphalangeal joint of right ring finger, subsequent encounter -S63634S Sprain of interphalangeal joint of right ring finger, sequela -S63635A Sprain of interphalangeal joint of left ring finger, initial encounter -S63635D Sprain of interphalangeal joint of left ring finger, subsequent encounter -S63635S Sprain of interphalangeal joint of left ring finger, sequela -S63636A Sprain of interphalangeal joint of right little finger, initial encounter -S63636D Sprain of interphalangeal joint of right little finger, subsequent encounter -S63636S Sprain of interphalangeal joint of right little finger, sequela -S63637A Sprain of interphalangeal joint of left little finger, initial encounter -S63637D Sprain of interphalangeal joint of left little finger, subsequent encounter -S63637S Sprain of interphalangeal joint of left little finger, sequela -S63638A Sprain of interphalangeal joint of other finger, initial encounter -S63638D Sprain of interphalangeal joint of other finger, subsequent encounter -S63638S Sprain of interphalangeal joint of other finger, sequela -S63639A Sprain of interphalangeal joint of unspecified finger, initial encounter -S63639D Sprain of interphalangeal joint of unspecified finger, subsequent encounter -S63639S Sprain of interphalangeal joint of unspecified finger, sequela -S63641A Sprain of metacarpophalangeal joint of right thumb, initial encounter -S63641D Sprain of metacarpophalangeal joint of right thumb, subsequent encounter -S63641S Sprain of metacarpophalangeal joint of right thumb, sequela -S63642A Sprain of metacarpophalangeal joint of left thumb, initial encounter -S63642D Sprain of metacarpophalangeal joint of left thumb, subsequent encounter -S63642S Sprain of metacarpophalangeal joint of left thumb, sequela -S63649A Sprain of metacarpophalangeal joint of unspecified thumb, initial encounter -S63649D Sprain of metacarpophalangeal joint of unspecified thumb, subsequent encounter -S63649S Sprain of metacarpophalangeal joint of unspecified thumb, sequela -S63650A Sprain of metacarpophalangeal joint of right index finger, initial encounter -S63650D Sprain of metacarpophalangeal joint of right index finger, subsequent encounter -S63650S Sprain of metacarpophalangeal joint of right index finger, sequela -S63651A Sprain of metacarpophalangeal joint of left index finger, initial encounter -S63651D Sprain of metacarpophalangeal joint of left index finger, subsequent encounter -S63651S Sprain of metacarpophalangeal joint of left index finger, sequela -S63652A Sprain of metacarpophalangeal joint of right middle finger, initial encounter -S63652D Sprain of metacarpophalangeal joint of right middle finger, subsequent encounter -S63652S Sprain of metacarpophalangeal joint of right middle finger, sequela -S63653A Sprain of metacarpophalangeal joint of left middle finger, initial encounter -S63653D Sprain of metacarpophalangeal joint of left middle finger, subsequent encounter -S63653S Sprain of metacarpophalangeal joint of left middle finger, sequela -S63654A Sprain of metacarpophalangeal joint of right ring finger, initial encounter -S63654D Sprain of metacarpophalangeal joint of right ring finger, subsequent encounter -S63654S Sprain of metacarpophalangeal joint of right ring finger, sequela -S63655A Sprain of metacarpophalangeal joint of left ring finger, initial encounter -S63655D Sprain of metacarpophalangeal joint of left ring finger, subsequent encounter -S63655S Sprain of metacarpophalangeal joint of left ring finger, sequela -S63656A Sprain of metacarpophalangeal joint of right little finger, initial encounter -S63656D Sprain of metacarpophalangeal joint of right little finger, subsequent encounter -S63656S Sprain of metacarpophalangeal joint of right little finger, sequela -S63657A Sprain of metacarpophalangeal joint of left little finger, initial encounter -S63657D Sprain of metacarpophalangeal joint of left little finger, subsequent encounter -S63657S Sprain of metacarpophalangeal joint of left little finger, sequela -S63658A Sprain of metacarpophalangeal joint of other finger, initial encounter -S63658D Sprain of metacarpophalangeal joint of other finger, subsequent encounter -S63658S Sprain of metacarpophalangeal joint of other finger, sequela -S63659A Sprain of metacarpophalangeal joint of unspecified finger, initial encounter -S63659D Sprain of metacarpophalangeal joint of unspecified finger, subsequent encounter -S63659S Sprain of metacarpophalangeal joint of unspecified finger, sequela -S63681A Other sprain of right thumb, initial encounter -S63681D Other sprain of right thumb, subsequent encounter -S63681S Other sprain of right thumb, sequela -S63682A Other sprain of left thumb, initial encounter -S63682D Other sprain of left thumb, subsequent encounter -S63682S Other sprain of left thumb, sequela -S63689A Other sprain of unspecified thumb, initial encounter -S63689D Other sprain of unspecified thumb, subsequent encounter -S63689S Other sprain of unspecified thumb, sequela -S63690A Other sprain of right index finger, initial encounter -S63690D Other sprain of right index finger, subsequent encounter -S63690S Other sprain of right index finger, sequela -S63691A Other sprain of left index finger, initial encounter -S63691D Other sprain of left index finger, subsequent encounter -S63691S Other sprain of left index finger, sequela -S63692A Other sprain of right middle finger, initial encounter -S63692D Other sprain of right middle finger, subsequent encounter -S63692S Other sprain of right middle finger, sequela -S63693A Other sprain of left middle finger, initial encounter -S63693D Other sprain of left middle finger, subsequent encounter -S63693S Other sprain of left middle finger, sequela -S63694A Other sprain of right ring finger, initial encounter -S63694D Other sprain of right ring finger, subsequent encounter -S63694S Other sprain of right ring finger, sequela -S63695A Other sprain of left ring finger, initial encounter -S63695D Other sprain of left ring finger, subsequent encounter -S63695S Other sprain of left ring finger, sequela -S63696A Other sprain of right little finger, initial encounter -S63696D Other sprain of right little finger, subsequent encounter -S63696S Other sprain of right little finger, sequela -S63697A Other sprain of left little finger, initial encounter -S63697D Other sprain of left little finger, subsequent encounter -S63697S Other sprain of left little finger, sequela -S63698A Other sprain of other finger, initial encounter -S63698D Other sprain of other finger, subsequent encounter -S63698S Other sprain of other finger, sequela -S63699A Other sprain of unspecified finger, initial encounter -S63699D Other sprain of unspecified finger, subsequent encounter -S63699S Other sprain of unspecified finger, sequela -S638X1A Sprain of other part of right wrist and hand, initial encounter -S638X1D Sprain of other part of right wrist and hand, subsequent encounter -S638X1S Sprain of other part of right wrist and hand, sequela -S638X2A Sprain of other part of left wrist and hand, initial encounter -S638X2D Sprain of other part of left wrist and hand, subsequent encounter -S638X2S Sprain of other part of left wrist and hand, sequela -S638X9A Sprain of other part of unspecified wrist and hand, initial encounter -S638X9D Sprain of other part of unspecified wrist and hand, subsequent encounter -S638X9S Sprain of other part of unspecified wrist and hand, sequela -S6390XA Sprain of unspecified part of unspecified wrist and hand, initial encounter -S6390XD Sprain of unspecified part of unspecified wrist and hand, subsequent encounter -S6390XS Sprain of unspecified part of unspecified wrist and hand, sequela -S6391XA Sprain of unspecified part of right wrist and hand, initial encounter -S6391XD Sprain of unspecified part of right wrist and hand, subsequent encounter -S6391XS Sprain of unspecified part of right wrist and hand, sequela -S6392XA Sprain of unspecified part of left wrist and hand, initial encounter -S6392XD Sprain of unspecified part of left wrist and hand, subsequent encounter -S6392XS Sprain of unspecified part of left wrist and hand, sequela -S6400XA Injury of ulnar nerve at wrist and hand level of unspecified arm, initial encounter -S6400XD Injury of ulnar nerve at wrist and hand level of unspecified arm, subsequent encounter -S6400XS Injury of ulnar nerve at wrist and hand level of unspecified arm, sequela -S6401XA Injury of ulnar nerve at wrist and hand level of right arm, initial encounter -S6401XD Injury of ulnar nerve at wrist and hand level of right arm, subsequent encounter -S6401XS Injury of ulnar nerve at wrist and hand level of right arm, sequela -S6402XA Injury of ulnar nerve at wrist and hand level of left arm, initial encounter -S6402XD Injury of ulnar nerve at wrist and hand level of left arm, subsequent encounter -S6402XS Injury of ulnar nerve at wrist and hand level of left arm, sequela -S6410XA Injury of median nerve at wrist and hand level of unspecified arm, initial encounter -S6410XD Injury of median nerve at wrist and hand level of unspecified arm, subsequent encounter -S6410XS Injury of median nerve at wrist and hand level of unspecified arm, sequela -S6411XA Injury of median nerve at wrist and hand level of right arm, initial encounter -S6411XD Injury of median nerve at wrist and hand level of right arm, subsequent encounter -S6411XS Injury of median nerve at wrist and hand level of right arm, sequela -S6412XA Injury of median nerve at wrist and hand level of left arm, initial encounter -S6412XD Injury of median nerve at wrist and hand level of left arm, subsequent encounter -S6412XS Injury of median nerve at wrist and hand level of left arm, sequela -S6420XA Injury of radial nerve at wrist and hand level of unspecified arm, initial encounter -S6420XD Injury of radial nerve at wrist and hand level of unspecified arm, subsequent encounter -S6420XS Injury of radial nerve at wrist and hand level of unspecified arm, sequela -S6421XA Injury of radial nerve at wrist and hand level of right arm, initial encounter -S6421XD Injury of radial nerve at wrist and hand level of right arm, subsequent encounter -S6421XS Injury of radial nerve at wrist and hand level of right arm, sequela -S6422XA Injury of radial nerve at wrist and hand level of left arm, initial encounter -S6422XD Injury of radial nerve at wrist and hand level of left arm, subsequent encounter -S6422XS Injury of radial nerve at wrist and hand level of left arm, sequela -S6430XA Injury of digital nerve of unspecified thumb, initial encounter -S6430XD Injury of digital nerve of unspecified thumb, subsequent encounter -S6430XS Injury of digital nerve of unspecified thumb, sequela -S6431XA Injury of digital nerve of right thumb, initial encounter -S6431XD Injury of digital nerve of right thumb, subsequent encounter -S6431XS Injury of digital nerve of right thumb, sequela -S6432XA Injury of digital nerve of left thumb, initial encounter -S6432XD Injury of digital nerve of left thumb, subsequent encounter -S6432XS Injury of digital nerve of left thumb, sequela -S6440XA Injury of digital nerve of unspecified finger, initial encounter -S6440XD Injury of digital nerve of unspecified finger, subsequent encounter -S6440XS Injury of digital nerve of unspecified finger, sequela -S64490A Injury of digital nerve of right index finger, initial encounter -S64490D Injury of digital nerve of right index finger, subsequent encounter -S64490S Injury of digital nerve of right index finger, sequela -S64491A Injury of digital nerve of left index finger, initial encounter -S64491D Injury of digital nerve of left index finger, subsequent encounter -S64491S Injury of digital nerve of left index finger, sequela -S64492A Injury of digital nerve of right middle finger, initial encounter -S64492D Injury of digital nerve of right middle finger, subsequent encounter -S64492S Injury of digital nerve of right middle finger, sequela -S64493A Injury of digital nerve of left middle finger, initial encounter -S64493D Injury of digital nerve of left middle finger, subsequent encounter -S64493S Injury of digital nerve of left middle finger, sequela -S64494A Injury of digital nerve of right ring finger, initial encounter -S64494D Injury of digital nerve of right ring finger, subsequent encounter -S64494S Injury of digital nerve of right ring finger, sequela -S64495A Injury of digital nerve of left ring finger, initial encounter -S64495D Injury of digital nerve of left ring finger, subsequent encounter -S64495S Injury of digital nerve of left ring finger, sequela -S64496A Injury of digital nerve of right little finger, initial encounter -S64496D Injury of digital nerve of right little finger, subsequent encounter -S64496S Injury of digital nerve of right little finger, sequela -S64497A Injury of digital nerve of left little finger, initial encounter -S64497D Injury of digital nerve of left little finger, subsequent encounter -S64497S Injury of digital nerve of left little finger, sequela -S64498A Injury of digital nerve of other finger, initial encounter -S64498D Injury of digital nerve of other finger, subsequent encounter -S64498S Injury of digital nerve of other finger, sequela -S648X1A Injury of other nerves at wrist and hand level of right arm, initial encounter -S648X1D Injury of other nerves at wrist and hand level of right arm, subsequent encounter -S648X1S Injury of other nerves at wrist and hand level of right arm, sequela -S648X2A Injury of other nerves at wrist and hand level of left arm, initial encounter -S648X2D Injury of other nerves at wrist and hand level of left arm, subsequent encounter -S648X2S Injury of other nerves at wrist and hand level of left arm, sequela -S648X9A Injury of other nerves at wrist and hand level of unspecified arm, initial encounter -S648X9D Injury of other nerves at wrist and hand level of unspecified arm, subsequent encounter -S648X9S Injury of other nerves at wrist and hand level of unspecified arm, sequela -S6490XA Injury of unspecified nerve at wrist and hand level of unspecified arm, initial encounter -S6490XD Injury of unspecified nerve at wrist and hand level of unspecified arm, subsequent encounter -S6490XS Injury of unspecified nerve at wrist and hand level of unspecified arm, sequela -S6491XA Injury of unspecified nerve at wrist and hand level of right arm, initial encounter -S6491XD Injury of unspecified nerve at wrist and hand level of right arm, subsequent encounter -S6491XS Injury of unspecified nerve at wrist and hand level of right arm, sequela -S6492XA Injury of unspecified nerve at wrist and hand level of left arm, initial encounter -S6492XD Injury of unspecified nerve at wrist and hand level of left arm, subsequent encounter -S6492XS Injury of unspecified nerve at wrist and hand level of left arm, sequela -S65001A Unspecified injury of ulnar artery at wrist and hand level of right arm, initial encounter -S65001D Unspecified injury of ulnar artery at wrist and hand level of right arm, subsequent encounter -S65001S Unspecified injury of ulnar artery at wrist and hand level of right arm, sequela -S65002A Unspecified injury of ulnar artery at wrist and hand level of left arm, initial encounter -S65002D Unspecified injury of ulnar artery at wrist and hand level of left arm, subsequent encounter -S65002S Unspecified injury of ulnar artery at wrist and hand level of left arm, sequela -S65009A Unspecified injury of ulnar artery at wrist and hand level of unspecified arm, initial encounter -S65009D Unspecified injury of ulnar artery at wrist and hand level of unspecified arm, subsequent encounter -S65009S Unspecified injury of ulnar artery at wrist and hand level of unspecified arm, sequela -S65011A Laceration of ulnar artery at wrist and hand level of right arm, initial encounter -S65011D Laceration of ulnar artery at wrist and hand level of right arm, subsequent encounter -S65011S Laceration of ulnar artery at wrist and hand level of right arm, sequela -S65012A Laceration of ulnar artery at wrist and hand level of left arm, initial encounter -S65012D Laceration of ulnar artery at wrist and hand level of left arm, subsequent encounter -S65012S Laceration of ulnar artery at wrist and hand level of left arm, sequela -S65019A Laceration of ulnar artery at wrist and hand level of unspecified arm, initial encounter -S65019D Laceration of ulnar artery at wrist and hand level of unspecified arm, subsequent encounter -S65019S Laceration of ulnar artery at wrist and hand level of unspecified arm, sequela -S65091A Other specified injury of ulnar artery at wrist and hand level of right arm, initial encounter -S65091D Other specified injury of ulnar artery at wrist and hand level of right arm, subsequent encounter -S65091S Other specified injury of ulnar artery at wrist and hand level of right arm, sequela -S65092A Other specified injury of ulnar artery at wrist and hand level of left arm, initial encounter -S65092D Other specified injury of ulnar artery at wrist and hand level of left arm, subsequent encounter -S65092S Other specified injury of ulnar artery at wrist and hand level of left arm, sequela -S65099A Other specified injury of ulnar artery at wrist and hand level of unspecified arm, initial encounter -S65099D Other specified injury of ulnar artery at wrist and hand level of unspecified arm, subsequent encounter -S65099S Other specified injury of ulnar artery at wrist and hand level of unspecified arm, sequela -S65101A Unspecified injury of radial artery at wrist and hand level of right arm, initial encounter -S65101D Unspecified injury of radial artery at wrist and hand level of right arm, subsequent encounter -S65101S Unspecified injury of radial artery at wrist and hand level of right arm, sequela -S65102A Unspecified injury of radial artery at wrist and hand level of left arm, initial encounter -S65102D Unspecified injury of radial artery at wrist and hand level of left arm, subsequent encounter -S65102S Unspecified injury of radial artery at wrist and hand level of left arm, sequela -S65109A Unspecified injury of radial artery at wrist and hand level of unspecified arm, initial encounter -S65109D Unspecified injury of radial artery at wrist and hand level of unspecified arm, subsequent encounter -S65109S Unspecified injury of radial artery at wrist and hand level of unspecified arm, sequela -S65111A Laceration of radial artery at wrist and hand level of right arm, initial encounter -S65111D Laceration of radial artery at wrist and hand level of right arm, subsequent encounter -S65111S Laceration of radial artery at wrist and hand level of right arm, sequela -S65112A Laceration of radial artery at wrist and hand level of left arm, initial encounter -S65112D Laceration of radial artery at wrist and hand level of left arm, subsequent encounter -S65112S Laceration of radial artery at wrist and hand level of left arm, sequela -S65119A Laceration of radial artery at wrist and hand level of unspecified arm, initial encounter -S65119D Laceration of radial artery at wrist and hand level of unspecified arm, subsequent encounter -S65119S Laceration of radial artery at wrist and hand level of unspecified arm, sequela -S65191A Other specified injury of radial artery at wrist and hand level of right arm, initial encounter -S65191D Other specified injury of radial artery at wrist and hand level of right arm, subsequent encounter -S65191S Other specified injury of radial artery at wrist and hand level of right arm, sequela -S65192A Other specified injury of radial artery at wrist and hand level of left arm, initial encounter -S65192D Other specified injury of radial artery at wrist and hand level of left arm, subsequent encounter -S65192S Other specified injury of radial artery at wrist and hand level of left arm, sequela -S65199A Other specified injury of radial artery at wrist and hand level of unspecified arm, initial encounter -S65199D Other specified injury of radial artery at wrist and hand level of unspecified arm, subsequent encounter -S65199S Other specified injury of radial artery at wrist and hand level of unspecified arm, sequela -S65201A Unspecified injury of superficial palmar arch of right hand, initial encounter -S65201D Unspecified injury of superficial palmar arch of right hand, subsequent encounter -S65201S Unspecified injury of superficial palmar arch of right hand, sequela -S65202A Unspecified injury of superficial palmar arch of left hand, initial encounter -S65202D Unspecified injury of superficial palmar arch of left hand, subsequent encounter -S65202S Unspecified injury of superficial palmar arch of left hand, sequela -S65209A Unspecified injury of superficial palmar arch of unspecified hand, initial encounter -S65209D Unspecified injury of superficial palmar arch of unspecified hand, subsequent encounter -S65209S Unspecified injury of superficial palmar arch of unspecified hand, sequela -S65211A Laceration of superficial palmar arch of right hand, initial encounter -S65211D Laceration of superficial palmar arch of right hand, subsequent encounter -S65211S Laceration of superficial palmar arch of right hand, sequela -S65212A Laceration of superficial palmar arch of left hand, initial encounter -S65212D Laceration of superficial palmar arch of left hand, subsequent encounter -S65212S Laceration of superficial palmar arch of left hand, sequela -S65219A Laceration of superficial palmar arch of unspecified hand, initial encounter -S65219D Laceration of superficial palmar arch of unspecified hand, subsequent encounter -S65219S Laceration of superficial palmar arch of unspecified hand, sequela -S65291A Other specified injury of superficial palmar arch of right hand, initial encounter -S65291D Other specified injury of superficial palmar arch of right hand, subsequent encounter -S65291S Other specified injury of superficial palmar arch of right hand, sequela -S65292A Other specified injury of superficial palmar arch of left hand, initial encounter -S65292D Other specified injury of superficial palmar arch of left hand, subsequent encounter -S65292S Other specified injury of superficial palmar arch of left hand, sequela -S65299A Other specified injury of superficial palmar arch of unspecified hand, initial encounter -S65299D Other specified injury of superficial palmar arch of unspecified hand, subsequent encounter -S65299S Other specified injury of superficial palmar arch of unspecified hand, sequela -S65301A Unspecified injury of deep palmar arch of right hand, initial encounter -S65301D Unspecified injury of deep palmar arch of right hand, subsequent encounter -S65301S Unspecified injury of deep palmar arch of right hand, sequela -S65302A Unspecified injury of deep palmar arch of left hand, initial encounter -S65302D Unspecified injury of deep palmar arch of left hand, subsequent encounter -S65302S Unspecified injury of deep palmar arch of left hand, sequela -S65309A Unspecified injury of deep palmar arch of unspecified hand, initial encounter -S65309D Unspecified injury of deep palmar arch of unspecified hand, subsequent encounter -S65309S Unspecified injury of deep palmar arch of unspecified hand, sequela -S65311A Laceration of deep palmar arch of right hand, initial encounter -S65311D Laceration of deep palmar arch of right hand, subsequent encounter -S65311S Laceration of deep palmar arch of right hand, sequela -S65312A Laceration of deep palmar arch of left hand, initial encounter -S65312D Laceration of deep palmar arch of left hand, subsequent encounter -S65312S Laceration of deep palmar arch of left hand, sequela -S65319A Laceration of deep palmar arch of unspecified hand, initial encounter -S65319D Laceration of deep palmar arch of unspecified hand, subsequent encounter -S65319S Laceration of deep palmar arch of unspecified hand, sequela -S65391A Other specified injury of deep palmar arch of right hand, initial encounter -S65391D Other specified injury of deep palmar arch of right hand, subsequent encounter -S65391S Other specified injury of deep palmar arch of right hand, sequela -S65392A Other specified injury of deep palmar arch of left hand, initial encounter -S65392D Other specified injury of deep palmar arch of left hand, subsequent encounter -S65392S Other specified injury of deep palmar arch of left hand, sequela -S65399A Other specified injury of deep palmar arch of unspecified hand, initial encounter -S65399D Other specified injury of deep palmar arch of unspecified hand, subsequent encounter -S65399S Other specified injury of deep palmar arch of unspecified hand, sequela -S65401A Unspecified injury of blood vessel of right thumb, initial encounter -S65401D Unspecified injury of blood vessel of right thumb, subsequent encounter -S65401S Unspecified injury of blood vessel of right thumb, sequela -S65402A Unspecified injury of blood vessel of left thumb, initial encounter -S65402D Unspecified injury of blood vessel of left thumb, subsequent encounter -S65402S Unspecified injury of blood vessel of left thumb, sequela -S65409A Unspecified injury of blood vessel of unspecified thumb, initial encounter -S65409D Unspecified injury of blood vessel of unspecified thumb, subsequent encounter -S65409S Unspecified injury of blood vessel of unspecified thumb, sequela -S65411A Laceration of blood vessel of right thumb, initial encounter -S65411D Laceration of blood vessel of right thumb, subsequent encounter -S65411S Laceration of blood vessel of right thumb, sequela -S65412A Laceration of blood vessel of left thumb, initial encounter -S65412D Laceration of blood vessel of left thumb, subsequent encounter -S65412S Laceration of blood vessel of left thumb, sequela -S65419A Laceration of blood vessel of unspecified thumb, initial encounter -S65419D Laceration of blood vessel of unspecified thumb, subsequent encounter -S65419S Laceration of blood vessel of unspecified thumb, sequela -S65491A Other specified injury of blood vessel of right thumb, initial encounter -S65491D Other specified injury of blood vessel of right thumb, subsequent encounter -S65491S Other specified injury of blood vessel of right thumb, sequela -S65492A Other specified injury of blood vessel of left thumb, initial encounter -S65492D Other specified injury of blood vessel of left thumb, subsequent encounter -S65492S Other specified injury of blood vessel of left thumb, sequela -S65499A Other specified injury of blood vessel of unspecified thumb, initial encounter -S65499D Other specified injury of blood vessel of unspecified thumb, subsequent encounter -S65499S Other specified injury of blood vessel of unspecified thumb, sequela -S65500A Unspecified injury of blood vessel of right index finger, initial encounter -S65500D Unspecified injury of blood vessel of right index finger, subsequent encounter -S65500S Unspecified injury of blood vessel of right index finger, sequela -S65501A Unspecified injury of blood vessel of left index finger, initial encounter -S65501D Unspecified injury of blood vessel of left index finger, subsequent encounter -S65501S Unspecified injury of blood vessel of left index finger, sequela -S65502A Unspecified injury of blood vessel of right middle finger, initial encounter -S65502D Unspecified injury of blood vessel of right middle finger, subsequent encounter -S65502S Unspecified injury of blood vessel of right middle finger, sequela -S65503A Unspecified injury of blood vessel of left middle finger, initial encounter -S65503D Unspecified injury of blood vessel of left middle finger, subsequent encounter -S65503S Unspecified injury of blood vessel of left middle finger, sequela -S65504A Unspecified injury of blood vessel of right ring finger, initial encounter -S65504D Unspecified injury of blood vessel of right ring finger, subsequent encounter -S65504S Unspecified injury of blood vessel of right ring finger, sequela -S65505A Unspecified injury of blood vessel of left ring finger, initial encounter -S65505D Unspecified injury of blood vessel of left ring finger, subsequent encounter -S65505S Unspecified injury of blood vessel of left ring finger, sequela -S65506A Unspecified injury of blood vessel of right little finger, initial encounter -S65506D Unspecified injury of blood vessel of right little finger, subsequent encounter -S65506S Unspecified injury of blood vessel of right little finger, sequela -S65507A Unspecified injury of blood vessel of left little finger, initial encounter -S65507D Unspecified injury of blood vessel of left little finger, subsequent encounter -S65507S Unspecified injury of blood vessel of left little finger, sequela -S65508A Unspecified injury of blood vessel of other finger, initial encounter -S65508D Unspecified injury of blood vessel of other finger, subsequent encounter -S65508S Unspecified injury of blood vessel of other finger, sequela -S65509A Unspecified injury of blood vessel of unspecified finger, initial encounter -S65509D Unspecified injury of blood vessel of unspecified finger, subsequent encounter -S65509S Unspecified injury of blood vessel of unspecified finger, sequela -S65510A Laceration of blood vessel of right index finger, initial encounter -S65510D Laceration of blood vessel of right index finger, subsequent encounter -S65510S Laceration of blood vessel of right index finger, sequela -S65511A Laceration of blood vessel of left index finger, initial encounter -S65511D Laceration of blood vessel of left index finger, subsequent encounter -S65511S Laceration of blood vessel of left index finger, sequela -S65512A Laceration of blood vessel of right middle finger, initial encounter -S65512D Laceration of blood vessel of right middle finger, subsequent encounter -S65512S Laceration of blood vessel of right middle finger, sequela -S65513A Laceration of blood vessel of left middle finger, initial encounter -S65513D Laceration of blood vessel of left middle finger, subsequent encounter -S65513S Laceration of blood vessel of left middle finger, sequela -S65514A Laceration of blood vessel of right ring finger, initial encounter -S65514D Laceration of blood vessel of right ring finger, subsequent encounter -S65514S Laceration of blood vessel of right ring finger, sequela -S65515A Laceration of blood vessel of left ring finger, initial encounter -S65515D Laceration of blood vessel of left ring finger, subsequent encounter -S65515S Laceration of blood vessel of left ring finger, sequela -S65516A Laceration of blood vessel of right little finger, initial encounter -S65516D Laceration of blood vessel of right little finger, subsequent encounter -S65516S Laceration of blood vessel of right little finger, sequela -S65517A Laceration of blood vessel of left little finger, initial encounter -S65517D Laceration of blood vessel of left little finger, subsequent encounter -S65517S Laceration of blood vessel of left little finger, sequela -S65518A Laceration of blood vessel of other finger, initial encounter -S65518D Laceration of blood vessel of other finger, subsequent encounter -S65518S Laceration of blood vessel of other finger, sequela -S65519A Laceration of blood vessel of unspecified finger, initial encounter -S65519D Laceration of blood vessel of unspecified finger, subsequent encounter -S65519S Laceration of blood vessel of unspecified finger, sequela -S65590A Other specified injury of blood vessel of right index finger, initial encounter -S65590D Other specified injury of blood vessel of right index finger, subsequent encounter -S65590S Other specified injury of blood vessel of right index finger, sequela -S65591A Other specified injury of blood vessel of left index finger, initial encounter -S65591D Other specified injury of blood vessel of left index finger, subsequent encounter -S65591S Other specified injury of blood vessel of left index finger, sequela -S65592A Other specified injury of blood vessel of right middle finger, initial encounter -S65592D Other specified injury of blood vessel of right middle finger, subsequent encounter -S65592S Other specified injury of blood vessel of right middle finger, sequela -S65593A Other specified injury of blood vessel of left middle finger, initial encounter -S65593D Other specified injury of blood vessel of left middle finger, subsequent encounter -S65593S Other specified injury of blood vessel of left middle finger, sequela -S65594A Other specified injury of blood vessel of right ring finger, initial encounter -S65594D Other specified injury of blood vessel of right ring finger, subsequent encounter -S65594S Other specified injury of blood vessel of right ring finger, sequela -S65595A Other specified injury of blood vessel of left ring finger, initial encounter -S65595D Other specified injury of blood vessel of left ring finger, subsequent encounter -S65595S Other specified injury of blood vessel of left ring finger, sequela -S65596A Other specified injury of blood vessel of right little finger, initial encounter -S65596D Other specified injury of blood vessel of right little finger, subsequent encounter -S65596S Other specified injury of blood vessel of right little finger, sequela -S65597A Other specified injury of blood vessel of left little finger, initial encounter -S65597D Other specified injury of blood vessel of left little finger, subsequent encounter -S65597S Other specified injury of blood vessel of left little finger, sequela -S65598A Other specified injury of blood vessel of other finger, initial encounter -S65598D Other specified injury of blood vessel of other finger, subsequent encounter -S65598S Other specified injury of blood vessel of other finger, sequela -S65599A Other specified injury of blood vessel of unspecified finger, initial encounter -S65599D Other specified injury of blood vessel of unspecified finger, subsequent encounter -S65599S Other specified injury of blood vessel of unspecified finger, sequela -S65801A Unspecified injury of other blood vessels at wrist and hand level of right arm, initial encounter -S65801D Unspecified injury of other blood vessels at wrist and hand level of right arm, subsequent encounter -S65801S Unspecified injury of other blood vessels at wrist and hand level of right arm, sequela -S65802A Unspecified injury of other blood vessels at wrist and hand level of left arm, initial encounter -S65802D Unspecified injury of other blood vessels at wrist and hand level of left arm, subsequent encounter -S65802S Unspecified injury of other blood vessels at wrist and hand level of left arm, sequela -S65809A Unspecified injury of other blood vessels at wrist and hand level of unspecified arm, initial encounter -S65809D Unspecified injury of other blood vessels at wrist and hand level of unspecified arm, subsequent encounter -S65809S Unspecified injury of other blood vessels at wrist and hand level of unspecified arm, sequela -S65811A Laceration of other blood vessels at wrist and hand level of right arm, initial encounter -S65811D Laceration of other blood vessels at wrist and hand level of right arm, subsequent encounter -S65811S Laceration of other blood vessels at wrist and hand level of right arm, sequela -S65812A Laceration of other blood vessels at wrist and hand level of left arm, initial encounter -S65812D Laceration of other blood vessels at wrist and hand level of left arm, subsequent encounter -S65812S Laceration of other blood vessels at wrist and hand level of left arm, sequela -S65819A Laceration of other blood vessels at wrist and hand level of unspecified arm, initial encounter -S65819D Laceration of other blood vessels at wrist and hand level of unspecified arm, subsequent encounter -S65819S Laceration of other blood vessels at wrist and hand level of unspecified arm, sequela -S65891A Other specified injury of other blood vessels at wrist and hand level of right arm, initial encounter -S65891D Other specified injury of other blood vessels at wrist and hand level of right arm, subsequent encounter -S65891S Other specified injury of other blood vessels at wrist and hand level of right arm, sequela -S65892A Other specified injury of other blood vessels at wrist and hand level of left arm, initial encounter -S65892D Other specified injury of other blood vessels at wrist and hand level of left arm, subsequent encounter -S65892S Other specified injury of other blood vessels at wrist and hand level of left arm, sequela -S65899A Other specified injury of other blood vessels at wrist and hand level of unspecified arm, initial encounter -S65899D Other specified injury of other blood vessels at wrist and hand level of unspecified arm, subsequent encounter -S65899S Other specified injury of other blood vessels at wrist and hand level of unspecified arm, sequela -S65901A Unspecified injury of unspecified blood vessel at wrist and hand level of right arm, initial encounter -S65901D Unspecified injury of unspecified blood vessel at wrist and hand level of right arm, subsequent encounter -S65901S Unspecified injury of unspecified blood vessel at wrist and hand level of right arm, sequela -S65902A Unspecified injury of unspecified blood vessel at wrist and hand level of left arm, initial encounter -S65902D Unspecified injury of unspecified blood vessel at wrist and hand level of left arm, subsequent encounter -S65902S Unspecified injury of unspecified blood vessel at wrist and hand level of left arm, sequela -S65909A Unspecified injury of unspecified blood vessel at wrist and hand level of unspecified arm, initial encounter -S65909D Unspecified injury of unspecified blood vessel at wrist and hand level of unspecified arm, subsequent encounter -S65909S Unspecified injury of unspecified blood vessel at wrist and hand level of unspecified arm, sequela -S65911A Laceration of unspecified blood vessel at wrist and hand level of right arm, initial encounter -S65911D Laceration of unspecified blood vessel at wrist and hand level of right arm, subsequent encounter -S65911S Laceration of unspecified blood vessel at wrist and hand level of right arm, sequela -S65912A Laceration of unspecified blood vessel at wrist and hand level of left arm, initial encounter -S65912D Laceration of unspecified blood vessel at wrist and hand level of left arm, subsequent encounter -S65912S Laceration of unspecified blood vessel at wrist and hand level of left arm, sequela -S65919A Laceration of unspecified blood vessel at wrist and hand level of unspecified arm, initial encounter -S65919D Laceration of unspecified blood vessel at wrist and hand level of unspecified arm, subsequent encounter -S65919S Laceration of unspecified blood vessel at wrist and hand level of unspecified arm, sequela -S65991A Other specified injury of unspecified blood vessel at wrist and hand of right arm, initial encounter -S65991D Other specified injury of unspecified blood vessel at wrist and hand of right arm, subsequent encounter -S65991S Other specified injury of unspecified blood vessel at wrist and hand of right arm, sequela -S65992A Other specified injury of unspecified blood vessel at wrist and hand of left arm, initial encounter -S65992D Other specified injury of unspecified blood vessel at wrist and hand of left arm, subsequent encounter -S65992S Other specified injury of unspecified blood vessel at wrist and hand of left arm, sequela -S65999A Other specified injury of unspecified blood vessel at wrist and hand of unspecified arm, initial encounter -S65999D Other specified injury of unspecified blood vessel at wrist and hand of unspecified arm, subsequent encounter -S65999S Other specified injury of unspecified blood vessel at wrist and hand of unspecified arm, sequela -S66001A Unspecified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66001D Unspecified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66001S Unspecified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66002A Unspecified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66002D Unspecified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66002S Unspecified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66009A Unspecified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66009D Unspecified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66009S Unspecified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66011A Strain of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66011D Strain of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66011S Strain of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66012A Strain of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66012D Strain of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66012S Strain of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66019A Strain of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66019D Strain of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66019S Strain of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66021A Laceration of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66021D Laceration of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66021S Laceration of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66022A Laceration of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66022D Laceration of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66022S Laceration of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66029A Laceration of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66029D Laceration of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66029S Laceration of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66091A Other specified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66091D Other specified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66091S Other specified injury of long flexor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66092A Other specified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66092D Other specified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66092S Other specified injury of long flexor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66099A Other specified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66099D Other specified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66099S Other specified injury of long flexor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66100A Unspecified injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66100D Unspecified injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66100S Unspecified injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66101A Unspecified injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66101D Unspecified injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66101S Unspecified injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66102A Unspecified injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66102D Unspecified injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66102S Unspecified injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66103A Unspecified injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66103D Unspecified injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66103S Unspecified injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66104A Unspecified injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66104D Unspecified injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66104S Unspecified injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66105A Unspecified injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66105D Unspecified injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66105S Unspecified injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66106A Unspecified injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66106D Unspecified injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66106S Unspecified injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66107A Unspecified injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66107D Unspecified injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66107S Unspecified injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66108A Unspecified injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66108D Unspecified injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66108S Unspecified injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66109A Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66109D Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66109S Unspecified injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66110A Strain of flexor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66110D Strain of flexor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66110S Strain of flexor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66111A Strain of flexor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66111D Strain of flexor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66111S Strain of flexor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66112A Strain of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66112D Strain of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66112S Strain of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66113A Strain of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66113D Strain of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66113S Strain of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66114A Strain of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66114D Strain of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66114S Strain of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66115A Strain of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66115D Strain of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66115S Strain of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66116A Strain of flexor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66116D Strain of flexor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66116S Strain of flexor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66117A Strain of flexor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66117D Strain of flexor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66117S Strain of flexor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66118A Strain of flexor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66118D Strain of flexor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66118S Strain of flexor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66119A Strain of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66119D Strain of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66119S Strain of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66120A Laceration of flexor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66120D Laceration of flexor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66120S Laceration of flexor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66121A Laceration of flexor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66121D Laceration of flexor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66121S Laceration of flexor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66122A Laceration of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66122D Laceration of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66122S Laceration of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66123A Laceration of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66123D Laceration of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66123S Laceration of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66124A Laceration of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66124D Laceration of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66124S Laceration of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66125A Laceration of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66125D Laceration of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66125S Laceration of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66126A Laceration of flexor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66126D Laceration of flexor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66126S Laceration of flexor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66127A Laceration of flexor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66127D Laceration of flexor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66127S Laceration of flexor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66128A Laceration of flexor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66128D Laceration of flexor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66128S Laceration of flexor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66129A Laceration of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66129D Laceration of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66129S Laceration of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66190A Other injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66190D Other injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66190S Other injury of flexor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66191A Other injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66191D Other injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66191S Other injury of flexor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66192A Other injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66192D Other injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66192S Other injury of flexor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66193A Other injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66193D Other injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66193S Other injury of flexor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66194A Other injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66194D Other injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66194S Other injury of flexor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66195A Other injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66195D Other injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66195S Other injury of flexor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66196A Other injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66196D Other injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66196S Other injury of flexor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66197A Other injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66197D Other injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66197S Other injury of flexor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66198A Other injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66198D Other injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66198S Other injury of flexor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66199A Other injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66199D Other injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66199S Other injury of flexor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66201A Unspecified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66201D Unspecified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66201S Unspecified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66202A Unspecified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66202D Unspecified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66202S Unspecified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66209A Unspecified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66209D Unspecified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66209S Unspecified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66211A Strain of extensor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66211D Strain of extensor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66211S Strain of extensor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66212A Strain of extensor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66212D Strain of extensor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66212S Strain of extensor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66219A Strain of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66219D Strain of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66219S Strain of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66221A Laceration of extensor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66221D Laceration of extensor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66221S Laceration of extensor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66222A Laceration of extensor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66222D Laceration of extensor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66222S Laceration of extensor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66229A Laceration of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66229D Laceration of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66229S Laceration of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66291A Other specified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66291D Other specified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66291S Other specified injury of extensor muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66292A Other specified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66292D Other specified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66292S Other specified injury of extensor muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66299A Other specified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66299D Other specified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66299S Other specified injury of extensor muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66300A Unspecified injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66300D Unspecified injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66300S Unspecified injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66301A Unspecified injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66301D Unspecified injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66301S Unspecified injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66302A Unspecified injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66302D Unspecified injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66302S Unspecified injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66303A Unspecified injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66303D Unspecified injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66303S Unspecified injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66304A Unspecified injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66304D Unspecified injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66304S Unspecified injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66305A Unspecified injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66305D Unspecified injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66305S Unspecified injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66306A Unspecified injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66306D Unspecified injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66306S Unspecified injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66307A Unspecified injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66307D Unspecified injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66307S Unspecified injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66308A Unspecified injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66308D Unspecified injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66308S Unspecified injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66309A Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66309D Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66309S Unspecified injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66310A Strain of extensor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66310D Strain of extensor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66310S Strain of extensor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66311A Strain of extensor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66311D Strain of extensor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66311S Strain of extensor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66312A Strain of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66312D Strain of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66312S Strain of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66313A Strain of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66313D Strain of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66313S Strain of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66314A Strain of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66314D Strain of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66314S Strain of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66315A Strain of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66315D Strain of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66315S Strain of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66316A Strain of extensor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66316D Strain of extensor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66316S Strain of extensor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66317A Strain of extensor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66317D Strain of extensor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66317S Strain of extensor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66318A Strain of extensor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66318D Strain of extensor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66318S Strain of extensor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66319A Strain of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66319D Strain of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66319S Strain of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66320A Laceration of extensor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66320D Laceration of extensor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66320S Laceration of extensor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66321A Laceration of extensor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66321D Laceration of extensor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66321S Laceration of extensor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66322A Laceration of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66322D Laceration of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66322S Laceration of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66323A Laceration of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66323D Laceration of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66323S Laceration of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66324A Laceration of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66324D Laceration of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66324S Laceration of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66325A Laceration of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66325D Laceration of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66325S Laceration of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66326A Laceration of extensor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66326D Laceration of extensor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66326S Laceration of extensor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66327A Laceration of extensor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66327D Laceration of extensor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66327S Laceration of extensor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66328A Laceration of extensor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66328D Laceration of extensor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66328S Laceration of extensor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66329A Laceration of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66329D Laceration of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66329S Laceration of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66390A Other injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66390D Other injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66390S Other injury of extensor muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66391A Other injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66391D Other injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66391S Other injury of extensor muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66392A Other injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66392D Other injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66392S Other injury of extensor muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66393A Other injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66393D Other injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66393S Other injury of extensor muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66394A Other injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66394D Other injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66394S Other injury of extensor muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66395A Other injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66395D Other injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66395S Other injury of extensor muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66396A Other injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66396D Other injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66396S Other injury of extensor muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66397A Other injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66397D Other injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66397S Other injury of extensor muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66398A Other injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66398D Other injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66398S Other injury of extensor muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66399A Other injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66399D Other injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66399S Other injury of extensor muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66401A Unspecified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66401D Unspecified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66401S Unspecified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66402A Unspecified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66402D Unspecified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66402S Unspecified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66409A Unspecified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66409D Unspecified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66409S Unspecified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66411A Strain of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66411D Strain of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66411S Strain of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66412A Strain of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66412D Strain of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66412S Strain of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66419A Strain of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66419D Strain of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66419S Strain of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66421A Laceration of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66421D Laceration of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66421S Laceration of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66422A Laceration of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66422D Laceration of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66422S Laceration of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66429A Laceration of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66429D Laceration of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66429S Laceration of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66491A Other specified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, initial encounter -S66491D Other specified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, subsequent encounter -S66491S Other specified injury of intrinsic muscle, fascia and tendon of right thumb at wrist and hand level, sequela -S66492A Other specified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, initial encounter -S66492D Other specified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, subsequent encounter -S66492S Other specified injury of intrinsic muscle, fascia and tendon of left thumb at wrist and hand level, sequela -S66499A Other specified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, initial encounter -S66499D Other specified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, subsequent encounter -S66499S Other specified injury of intrinsic muscle, fascia and tendon of unspecified thumb at wrist and hand level, sequela -S66500A Unspecified injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66500D Unspecified injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66500S Unspecified injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66501A Unspecified injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66501D Unspecified injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66501S Unspecified injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66502A Unspecified injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66502D Unspecified injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66502S Unspecified injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66503A Unspecified injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66503D Unspecified injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66503S Unspecified injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66504A Unspecified injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66504D Unspecified injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66504S Unspecified injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66505A Unspecified injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66505D Unspecified injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66505S Unspecified injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66506A Unspecified injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66506D Unspecified injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66506S Unspecified injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66507A Unspecified injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66507D Unspecified injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66507S Unspecified injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66508A Unspecified injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66508D Unspecified injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66508S Unspecified injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66509A Unspecified injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66509D Unspecified injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66509S Unspecified injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66510A Strain of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66510D Strain of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66510S Strain of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66511A Strain of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66511D Strain of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66511S Strain of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66512A Strain of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66512D Strain of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66512S Strain of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66513A Strain of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66513D Strain of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66513S Strain of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66514A Strain of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66514D Strain of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66514S Strain of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66515A Strain of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66515D Strain of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66515S Strain of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66516A Strain of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66516D Strain of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66516S Strain of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66517A Strain of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66517D Strain of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66517S Strain of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66518A Strain of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66518D Strain of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66518S Strain of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66519A Strain of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66519D Strain of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66519S Strain of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66520A Laceration of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66520D Laceration of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66520S Laceration of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66521A Laceration of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66521D Laceration of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66521S Laceration of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66522A Laceration of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66522D Laceration of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66522S Laceration of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66523A Laceration of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66523D Laceration of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66523S Laceration of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66524A Laceration of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66524D Laceration of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66524S Laceration of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66525A Laceration of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66525D Laceration of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66525S Laceration of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66526A Laceration of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66526D Laceration of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66526S Laceration of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66527A Laceration of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66527D Laceration of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66527S Laceration of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66528A Laceration of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66528D Laceration of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66528S Laceration of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66529A Laceration of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66529D Laceration of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66529S Laceration of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66590A Other injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, initial encounter -S66590D Other injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, subsequent encounter -S66590S Other injury of intrinsic muscle, fascia and tendon of right index finger at wrist and hand level, sequela -S66591A Other injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, initial encounter -S66591D Other injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, subsequent encounter -S66591S Other injury of intrinsic muscle, fascia and tendon of left index finger at wrist and hand level, sequela -S66592A Other injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, initial encounter -S66592D Other injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, subsequent encounter -S66592S Other injury of intrinsic muscle, fascia and tendon of right middle finger at wrist and hand level, sequela -S66593A Other injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, initial encounter -S66593D Other injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, subsequent encounter -S66593S Other injury of intrinsic muscle, fascia and tendon of left middle finger at wrist and hand level, sequela -S66594A Other injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, initial encounter -S66594D Other injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, subsequent encounter -S66594S Other injury of intrinsic muscle, fascia and tendon of right ring finger at wrist and hand level, sequela -S66595A Other injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, initial encounter -S66595D Other injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, subsequent encounter -S66595S Other injury of intrinsic muscle, fascia and tendon of left ring finger at wrist and hand level, sequela -S66596A Other injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, initial encounter -S66596D Other injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, subsequent encounter -S66596S Other injury of intrinsic muscle, fascia and tendon of right little finger at wrist and hand level, sequela -S66597A Other injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, initial encounter -S66597D Other injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, subsequent encounter -S66597S Other injury of intrinsic muscle, fascia and tendon of left little finger at wrist and hand level, sequela -S66598A Other injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, initial encounter -S66598D Other injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, subsequent encounter -S66598S Other injury of intrinsic muscle, fascia and tendon of other finger at wrist and hand level, sequela -S66599A Other injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, initial encounter -S66599D Other injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, subsequent encounter -S66599S Other injury of intrinsic muscle, fascia and tendon of unspecified finger at wrist and hand level, sequela -S66801A Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, initial encounter -S66801D Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, subsequent encounter -S66801S Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, sequela -S66802A Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, initial encounter -S66802D Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, subsequent encounter -S66802S Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, sequela -S66809A Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, initial encounter -S66809D Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, subsequent encounter -S66809S Unspecified injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, sequela -S66811A Strain of other specified muscles, fascia and tendons at wrist and hand level, right hand, initial encounter -S66811D Strain of other specified muscles, fascia and tendons at wrist and hand level, right hand, subsequent encounter -S66811S Strain of other specified muscles, fascia and tendons at wrist and hand level, right hand, sequela -S66812A Strain of other specified muscles, fascia and tendons at wrist and hand level, left hand, initial encounter -S66812D Strain of other specified muscles, fascia and tendons at wrist and hand level, left hand, subsequent encounter -S66812S Strain of other specified muscles, fascia and tendons at wrist and hand level, left hand, sequela -S66819A Strain of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, initial encounter -S66819D Strain of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, subsequent encounter -S66819S Strain of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, sequela -S66821A Laceration of other specified muscles, fascia and tendons at wrist and hand level, right hand, initial encounter -S66821D Laceration of other specified muscles, fascia and tendons at wrist and hand level, right hand, subsequent encounter -S66821S Laceration of other specified muscles, fascia and tendons at wrist and hand level, right hand, sequela -S66822A Laceration of other specified muscles, fascia and tendons at wrist and hand level, left hand, initial encounter -S66822D Laceration of other specified muscles, fascia and tendons at wrist and hand level, left hand, subsequent encounter -S66822S Laceration of other specified muscles, fascia and tendons at wrist and hand level, left hand, sequela -S66829A Laceration of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, initial encounter -S66829D Laceration of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, subsequent encounter -S66829S Laceration of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, sequela -S66891A Other injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, initial encounter -S66891D Other injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, subsequent encounter -S66891S Other injury of other specified muscles, fascia and tendons at wrist and hand level, right hand, sequela -S66892A Other injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, initial encounter -S66892D Other injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, subsequent encounter -S66892S Other injury of other specified muscles, fascia and tendons at wrist and hand level, left hand, sequela -S66899A Other injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, initial encounter -S66899D Other injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, subsequent encounter -S66899S Other injury of other specified muscles, fascia and tendons at wrist and hand level, unspecified hand, sequela -S66901A Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, initial encounter -S66901D Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, subsequent encounter -S66901S Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, sequela -S66902A Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, initial encounter -S66902D Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, subsequent encounter -S66902S Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, sequela -S66909A Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, initial encounter -S66909D Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, subsequent encounter -S66909S Unspecified injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, sequela -S66911A Strain of unspecified muscle, fascia and tendon at wrist and hand level, right hand, initial encounter -S66911D Strain of unspecified muscle, fascia and tendon at wrist and hand level, right hand, subsequent encounter -S66911S Strain of unspecified muscle, fascia and tendon at wrist and hand level, right hand, sequela -S66912A Strain of unspecified muscle, fascia and tendon at wrist and hand level, left hand, initial encounter -S66912D Strain of unspecified muscle, fascia and tendon at wrist and hand level, left hand, subsequent encounter -S66912S Strain of unspecified muscle, fascia and tendon at wrist and hand level, left hand, sequela -S66919A Strain of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, initial encounter -S66919D Strain of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, subsequent encounter -S66919S Strain of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, sequela -S66921A Laceration of unspecified muscle, fascia and tendon at wrist and hand level, right hand, initial encounter -S66921D Laceration of unspecified muscle, fascia and tendon at wrist and hand level, right hand, subsequent encounter -S66921S Laceration of unspecified muscle, fascia and tendon at wrist and hand level, right hand, sequela -S66922A Laceration of unspecified muscle, fascia and tendon at wrist and hand level, left hand, initial encounter -S66922D Laceration of unspecified muscle, fascia and tendon at wrist and hand level, left hand, subsequent encounter -S66922S Laceration of unspecified muscle, fascia and tendon at wrist and hand level, left hand, sequela -S66929A Laceration of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, initial encounter -S66929D Laceration of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, subsequent encounter -S66929S Laceration of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, sequela -S66991A Other injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, initial encounter -S66991D Other injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, subsequent encounter -S66991S Other injury of unspecified muscle, fascia and tendon at wrist and hand level, right hand, sequela -S66992A Other injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, initial encounter -S66992D Other injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, subsequent encounter -S66992S Other injury of unspecified muscle, fascia and tendon at wrist and hand level, left hand, sequela -S66999A Other injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, initial encounter -S66999D Other injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, subsequent encounter -S66999S Other injury of unspecified muscle, fascia and tendon at wrist and hand level, unspecified hand, sequela -S6700XA Crushing injury of unspecified thumb, initial encounter -S6700XD Crushing injury of unspecified thumb, subsequent encounter -S6700XS Crushing injury of unspecified thumb, sequela -S6701XA Crushing injury of right thumb, initial encounter -S6701XD Crushing injury of right thumb, subsequent encounter -S6701XS Crushing injury of right thumb, sequela -S6702XA Crushing injury of left thumb, initial encounter -S6702XD Crushing injury of left thumb, subsequent encounter -S6702XS Crushing injury of left thumb, sequela -S6710XA Crushing injury of unspecified finger(s), initial encounter -S6710XD Crushing injury of unspecified finger(s), subsequent encounter -S6710XS Crushing injury of unspecified finger(s), sequela -S67190A Crushing injury of right index finger, initial encounter -S67190D Crushing injury of right index finger, subsequent encounter -S67190S Crushing injury of right index finger, sequela -S67191A Crushing injury of left index finger, initial encounter -S67191D Crushing injury of left index finger, subsequent encounter -S67191S Crushing injury of left index finger, sequela -S67192A Crushing injury of right middle finger, initial encounter -S67192D Crushing injury of right middle finger, subsequent encounter -S67192S Crushing injury of right middle finger, sequela -S67193A Crushing injury of left middle finger, initial encounter -S67193D Crushing injury of left middle finger, subsequent encounter -S67193S Crushing injury of left middle finger, sequela -S67194A Crushing injury of right ring finger, initial encounter -S67194D Crushing injury of right ring finger, subsequent encounter -S67194S Crushing injury of right ring finger, sequela -S67195A Crushing injury of left ring finger, initial encounter -S67195D Crushing injury of left ring finger, subsequent encounter -S67195S Crushing injury of left ring finger, sequela -S67196A Crushing injury of right little finger, initial encounter -S67196D Crushing injury of right little finger, subsequent encounter -S67196S Crushing injury of right little finger, sequela -S67197A Crushing injury of left little finger, initial encounter -S67197D Crushing injury of left little finger, subsequent encounter -S67197S Crushing injury of left little finger, sequela -S67198A Crushing injury of other finger, initial encounter -S67198D Crushing injury of other finger, subsequent encounter -S67198S Crushing injury of other finger, sequela -S6720XA Crushing injury of unspecified hand, initial encounter -S6720XD Crushing injury of unspecified hand, subsequent encounter -S6720XS Crushing injury of unspecified hand, sequela -S6721XA Crushing injury of right hand, initial encounter -S6721XD Crushing injury of right hand, subsequent encounter -S6721XS Crushing injury of right hand, sequela -S6722XA Crushing injury of left hand, initial encounter -S6722XD Crushing injury of left hand, subsequent encounter -S6722XS Crushing injury of left hand, sequela -S6730XA Crushing injury of unspecified wrist, initial encounter -S6730XD Crushing injury of unspecified wrist, subsequent encounter -S6730XS Crushing injury of unspecified wrist, sequela -S6731XA Crushing injury of right wrist, initial encounter -S6731XD Crushing injury of right wrist, subsequent encounter -S6731XS Crushing injury of right wrist, sequela -S6732XA Crushing injury of left wrist, initial encounter -S6732XD Crushing injury of left wrist, subsequent encounter -S6732XS Crushing injury of left wrist, sequela -S6740XA Crushing injury of unspecified wrist and hand, initial encounter -S6740XD Crushing injury of unspecified wrist and hand, subsequent encounter -S6740XS Crushing injury of unspecified wrist and hand, sequela -S6741XA Crushing injury of right wrist and hand, initial encounter -S6741XD Crushing injury of right wrist and hand, subsequent encounter -S6741XS Crushing injury of right wrist and hand, sequela -S6742XA Crushing injury of left wrist and hand, initial encounter -S6742XD Crushing injury of left wrist and hand, subsequent encounter -S6742XS Crushing injury of left wrist and hand, sequela -S6790XA Crushing injury of unspecified part(s) of unspecified wrist, hand and fingers, initial encounter -S6790XD Crushing injury of unspecified part(s) of unspecified wrist, hand and fingers, subsequent encounter -S6790XS Crushing injury of unspecified part(s) of unspecified wrist, hand and fingers, sequela -S6791XA Crushing injury of unspecified part(s) of right wrist, hand and fingers, initial encounter -S6791XD Crushing injury of unspecified part(s) of right wrist, hand and fingers, subsequent encounter -S6791XS Crushing injury of unspecified part(s) of right wrist, hand and fingers, sequela -S6792XA Crushing injury of unspecified part(s) of left wrist, hand and fingers, initial encounter -S6792XD Crushing injury of unspecified part(s) of left wrist, hand and fingers, subsequent encounter -S6792XS Crushing injury of unspecified part(s) of left wrist, hand and fingers, sequela -S68011A Complete traumatic metacarpophalangeal amputation of right thumb, initial encounter -S68011D Complete traumatic metacarpophalangeal amputation of right thumb, subsequent encounter -S68011S Complete traumatic metacarpophalangeal amputation of right thumb, sequela -S68012A Complete traumatic metacarpophalangeal amputation of left thumb, initial encounter -S68012D Complete traumatic metacarpophalangeal amputation of left thumb, subsequent encounter -S68012S Complete traumatic metacarpophalangeal amputation of left thumb, sequela -S68019A Complete traumatic metacarpophalangeal amputation of unspecified thumb, initial encounter -S68019D Complete traumatic metacarpophalangeal amputation of unspecified thumb, subsequent encounter -S68019S Complete traumatic metacarpophalangeal amputation of unspecified thumb, sequela -S68021A Partial traumatic metacarpophalangeal amputation of right thumb, initial encounter -S68021D Partial traumatic metacarpophalangeal amputation of right thumb, subsequent encounter -S68021S Partial traumatic metacarpophalangeal amputation of right thumb, sequela -S68022A Partial traumatic metacarpophalangeal amputation of left thumb, initial encounter -S68022D Partial traumatic metacarpophalangeal amputation of left thumb, subsequent encounter -S68022S Partial traumatic metacarpophalangeal amputation of left thumb, sequela -S68029A Partial traumatic metacarpophalangeal amputation of unspecified thumb, initial encounter -S68029D Partial traumatic metacarpophalangeal amputation of unspecified thumb, subsequent encounter -S68029S Partial traumatic metacarpophalangeal amputation of unspecified thumb, sequela -S68110A Complete traumatic metacarpophalangeal amputation of right index finger, initial encounter -S68110D Complete traumatic metacarpophalangeal amputation of right index finger, subsequent encounter -S68110S Complete traumatic metacarpophalangeal amputation of right index finger, sequela -S68111A Complete traumatic metacarpophalangeal amputation of left index finger, initial encounter -S68111D Complete traumatic metacarpophalangeal amputation of left index finger, subsequent encounter -S68111S Complete traumatic metacarpophalangeal amputation of left index finger, sequela -S68112A Complete traumatic metacarpophalangeal amputation of right middle finger, initial encounter -S68112D Complete traumatic metacarpophalangeal amputation of right middle finger, subsequent encounter -S68112S Complete traumatic metacarpophalangeal amputation of right middle finger, sequela -S68113A Complete traumatic metacarpophalangeal amputation of left middle finger, initial encounter -S68113D Complete traumatic metacarpophalangeal amputation of left middle finger, subsequent encounter -S68113S Complete traumatic metacarpophalangeal amputation of left middle finger, sequela -S68114A Complete traumatic metacarpophalangeal amputation of right ring finger, initial encounter -S68114D Complete traumatic metacarpophalangeal amputation of right ring finger, subsequent encounter -S68114S Complete traumatic metacarpophalangeal amputation of right ring finger, sequela -S68115A Complete traumatic metacarpophalangeal amputation of left ring finger, initial encounter -S68115D Complete traumatic metacarpophalangeal amputation of left ring finger, subsequent encounter -S68115S Complete traumatic metacarpophalangeal amputation of left ring finger, sequela -S68116A Complete traumatic metacarpophalangeal amputation of right little finger, initial encounter -S68116D Complete traumatic metacarpophalangeal amputation of right little finger, subsequent encounter -S68116S Complete traumatic metacarpophalangeal amputation of right little finger, sequela -S68117A Complete traumatic metacarpophalangeal amputation of left little finger, initial encounter -S68117D Complete traumatic metacarpophalangeal amputation of left little finger, subsequent encounter -S68117S Complete traumatic metacarpophalangeal amputation of left little finger, sequela -S68118A Complete traumatic metacarpophalangeal amputation of other finger, initial encounter -S68118D Complete traumatic metacarpophalangeal amputation of other finger, subsequent encounter -S68118S Complete traumatic metacarpophalangeal amputation of other finger, sequela -S68119A Complete traumatic metacarpophalangeal amputation of unspecified finger, initial encounter -S68119D Complete traumatic metacarpophalangeal amputation of unspecified finger, subsequent encounter -S68119S Complete traumatic metacarpophalangeal amputation of unspecified finger, sequela -S68120A Partial traumatic metacarpophalangeal amputation of right index finger, initial encounter -S68120D Partial traumatic metacarpophalangeal amputation of right index finger, subsequent encounter -S68120S Partial traumatic metacarpophalangeal amputation of right index finger, sequela -S68121A Partial traumatic metacarpophalangeal amputation of left index finger, initial encounter -S68121D Partial traumatic metacarpophalangeal amputation of left index finger, subsequent encounter -S68121S Partial traumatic metacarpophalangeal amputation of left index finger, sequela -S68122A Partial traumatic metacarpophalangeal amputation of right middle finger, initial encounter -S68122D Partial traumatic metacarpophalangeal amputation of right middle finger, subsequent encounter -S68122S Partial traumatic metacarpophalangeal amputation of right middle finger, sequela -S68123A Partial traumatic metacarpophalangeal amputation of left middle finger, initial encounter -S68123D Partial traumatic metacarpophalangeal amputation of left middle finger, subsequent encounter -S68123S Partial traumatic metacarpophalangeal amputation of left middle finger, sequela -S68124A Partial traumatic metacarpophalangeal amputation of right ring finger, initial encounter -S68124D Partial traumatic metacarpophalangeal amputation of right ring finger, subsequent encounter -S68124S Partial traumatic metacarpophalangeal amputation of right ring finger, sequela -S68125A Partial traumatic metacarpophalangeal amputation of left ring finger, initial encounter -S68125D Partial traumatic metacarpophalangeal amputation of left ring finger, subsequent encounter -S68125S Partial traumatic metacarpophalangeal amputation of left ring finger, sequela -S68126A Partial traumatic metacarpophalangeal amputation of right little finger, initial encounter -S68126D Partial traumatic metacarpophalangeal amputation of right little finger, subsequent encounter -S68126S Partial traumatic metacarpophalangeal amputation of right little finger, sequela -S68127A Partial traumatic metacarpophalangeal amputation of left little finger, initial encounter -S68127D Partial traumatic metacarpophalangeal amputation of left little finger, subsequent encounter -S68127S Partial traumatic metacarpophalangeal amputation of left little finger, sequela -S68128A Partial traumatic metacarpophalangeal amputation of other finger, initial encounter -S68128D Partial traumatic metacarpophalangeal amputation of other finger, subsequent encounter -S68128S Partial traumatic metacarpophalangeal amputation of other finger, sequela -S68129A Partial traumatic metacarpophalangeal amputation of unspecified finger, initial encounter -S68129D Partial traumatic metacarpophalangeal amputation of unspecified finger, subsequent encounter -S68129S Partial traumatic metacarpophalangeal amputation of unspecified finger, sequela -S68411A Complete traumatic amputation of right hand at wrist level, initial encounter -S68411D Complete traumatic amputation of right hand at wrist level, subsequent encounter -S68411S Complete traumatic amputation of right hand at wrist level, sequela -S68412A Complete traumatic amputation of left hand at wrist level, initial encounter -S68412D Complete traumatic amputation of left hand at wrist level, subsequent encounter -S68412S Complete traumatic amputation of left hand at wrist level, sequela -S68419A Complete traumatic amputation of unspecified hand at wrist level, initial encounter -S68419D Complete traumatic amputation of unspecified hand at wrist level, subsequent encounter -S68419S Complete traumatic amputation of unspecified hand at wrist level, sequela -S68421A Partial traumatic amputation of right hand at wrist level, initial encounter -S68421D Partial traumatic amputation of right hand at wrist level, subsequent encounter -S68421S Partial traumatic amputation of right hand at wrist level, sequela -S68422A Partial traumatic amputation of left hand at wrist level, initial encounter -S68422D Partial traumatic amputation of left hand at wrist level, subsequent encounter -S68422S Partial traumatic amputation of left hand at wrist level, sequela -S68429A Partial traumatic amputation of unspecified hand at wrist level, initial encounter -S68429D Partial traumatic amputation of unspecified hand at wrist level, subsequent encounter -S68429S Partial traumatic amputation of unspecified hand at wrist level, sequela -S68511A Complete traumatic transphalangeal amputation of right thumb, initial encounter -S68511D Complete traumatic transphalangeal amputation of right thumb, subsequent encounter -S68511S Complete traumatic transphalangeal amputation of right thumb, sequela -S68512A Complete traumatic transphalangeal amputation of left thumb, initial encounter -S68512D Complete traumatic transphalangeal amputation of left thumb, subsequent encounter -S68512S Complete traumatic transphalangeal amputation of left thumb, sequela -S68519A Complete traumatic transphalangeal amputation of unspecified thumb, initial encounter -S68519D Complete traumatic transphalangeal amputation of unspecified thumb, subsequent encounter -S68519S Complete traumatic transphalangeal amputation of unspecified thumb, sequela -S68521A Partial traumatic transphalangeal amputation of right thumb, initial encounter -S68521D Partial traumatic transphalangeal amputation of right thumb, subsequent encounter -S68521S Partial traumatic transphalangeal amputation of right thumb, sequela -S68522A Partial traumatic transphalangeal amputation of left thumb, initial encounter -S68522D Partial traumatic transphalangeal amputation of left thumb, subsequent encounter -S68522S Partial traumatic transphalangeal amputation of left thumb, sequela -S68529A Partial traumatic transphalangeal amputation of unspecified thumb, initial encounter -S68529D Partial traumatic transphalangeal amputation of unspecified thumb, subsequent encounter -S68529S Partial traumatic transphalangeal amputation of unspecified thumb, sequela -S68610A Complete traumatic transphalangeal amputation of right index finger, initial encounter -S68610D Complete traumatic transphalangeal amputation of right index finger, subsequent encounter -S68610S Complete traumatic transphalangeal amputation of right index finger, sequela -S68611A Complete traumatic transphalangeal amputation of left index finger, initial encounter -S68611D Complete traumatic transphalangeal amputation of left index finger, subsequent encounter -S68611S Complete traumatic transphalangeal amputation of left index finger, sequela -S68612A Complete traumatic transphalangeal amputation of right middle finger, initial encounter -S68612D Complete traumatic transphalangeal amputation of right middle finger, subsequent encounter -S68612S Complete traumatic transphalangeal amputation of right middle finger, sequela -S68613A Complete traumatic transphalangeal amputation of left middle finger, initial encounter -S68613D Complete traumatic transphalangeal amputation of left middle finger, subsequent encounter -S68613S Complete traumatic transphalangeal amputation of left middle finger, sequela -S68614A Complete traumatic transphalangeal amputation of right ring finger, initial encounter -S68614D Complete traumatic transphalangeal amputation of right ring finger, subsequent encounter -S68614S Complete traumatic transphalangeal amputation of right ring finger, sequela -S68615A Complete traumatic transphalangeal amputation of left ring finger, initial encounter -S68615D Complete traumatic transphalangeal amputation of left ring finger, subsequent encounter -S68615S Complete traumatic transphalangeal amputation of left ring finger, sequela -S68616A Complete traumatic transphalangeal amputation of right little finger, initial encounter -S68616D Complete traumatic transphalangeal amputation of right little finger, subsequent encounter -S68616S Complete traumatic transphalangeal amputation of right little finger, sequela -S68617A Complete traumatic transphalangeal amputation of left little finger, initial encounter -S68617D Complete traumatic transphalangeal amputation of left little finger, subsequent encounter -S68617S Complete traumatic transphalangeal amputation of left little finger, sequela -S68618A Complete traumatic transphalangeal amputation of other finger, initial encounter -S68618D Complete traumatic transphalangeal amputation of other finger, subsequent encounter -S68618S Complete traumatic transphalangeal amputation of other finger, sequela -S68619A Complete traumatic transphalangeal amputation of unspecified finger, initial encounter -S68619D Complete traumatic transphalangeal amputation of unspecified finger, subsequent encounter -S68619S Complete traumatic transphalangeal amputation of unspecified finger, sequela -S68620A Partial traumatic transphalangeal amputation of right index finger, initial encounter -S68620D Partial traumatic transphalangeal amputation of right index finger, subsequent encounter -S68620S Partial traumatic transphalangeal amputation of right index finger, sequela -S68621A Partial traumatic transphalangeal amputation of left index finger, initial encounter -S68621D Partial traumatic transphalangeal amputation of left index finger, subsequent encounter -S68621S Partial traumatic transphalangeal amputation of left index finger, sequela -S68622A Partial traumatic transphalangeal amputation of right middle finger, initial encounter -S68622D Partial traumatic transphalangeal amputation of right middle finger, subsequent encounter -S68622S Partial traumatic transphalangeal amputation of right middle finger, sequela -S68623A Partial traumatic transphalangeal amputation of left middle finger, initial encounter -S68623D Partial traumatic transphalangeal amputation of left middle finger, subsequent encounter -S68623S Partial traumatic transphalangeal amputation of left middle finger, sequela -S68624A Partial traumatic transphalangeal amputation of right ring finger, initial encounter -S68624D Partial traumatic transphalangeal amputation of right ring finger, subsequent encounter -S68624S Partial traumatic transphalangeal amputation of right ring finger, sequela -S68625A Partial traumatic transphalangeal amputation of left ring finger, initial encounter -S68625D Partial traumatic transphalangeal amputation of left ring finger, subsequent encounter -S68625S Partial traumatic transphalangeal amputation of left ring finger, sequela -S68626A Partial traumatic transphalangeal amputation of right little finger, initial encounter -S68626D Partial traumatic transphalangeal amputation of right little finger, subsequent encounter -S68626S Partial traumatic transphalangeal amputation of right little finger, sequela -S68627A Partial traumatic transphalangeal amputation of left little finger, initial encounter -S68627D Partial traumatic transphalangeal amputation of left little finger, subsequent encounter -S68627S Partial traumatic transphalangeal amputation of left little finger, sequela -S68628A Partial traumatic transphalangeal amputation of other finger, initial encounter -S68628D Partial traumatic transphalangeal amputation of other finger, subsequent encounter -S68628S Partial traumatic transphalangeal amputation of other finger, sequela -S68629A Partial traumatic transphalangeal amputation of unspecified finger, initial encounter -S68629D Partial traumatic transphalangeal amputation of unspecified finger, subsequent encounter -S68629S Partial traumatic transphalangeal amputation of unspecified finger, sequela -S68711A Complete traumatic transmetacarpal amputation of right hand, initial encounter -S68711D Complete traumatic transmetacarpal amputation of right hand, subsequent encounter -S68711S Complete traumatic transmetacarpal amputation of right hand, sequela -S68712A Complete traumatic transmetacarpal amputation of left hand, initial encounter -S68712D Complete traumatic transmetacarpal amputation of left hand, subsequent encounter -S68712S Complete traumatic transmetacarpal amputation of left hand, sequela -S68719A Complete traumatic transmetacarpal amputation of unspecified hand, initial encounter -S68719D Complete traumatic transmetacarpal amputation of unspecified hand, subsequent encounter -S68719S Complete traumatic transmetacarpal amputation of unspecified hand, sequela -S68721A Partial traumatic transmetacarpal amputation of right hand, initial encounter -S68721D Partial traumatic transmetacarpal amputation of right hand, subsequent encounter -S68721S Partial traumatic transmetacarpal amputation of right hand, sequela -S68722A Partial traumatic transmetacarpal amputation of left hand, initial encounter -S68722D Partial traumatic transmetacarpal amputation of left hand, subsequent encounter -S68722S Partial traumatic transmetacarpal amputation of left hand, sequela -S68729A Partial traumatic transmetacarpal amputation of unspecified hand, initial encounter -S68729D Partial traumatic transmetacarpal amputation of unspecified hand, subsequent encounter -S68729S Partial traumatic transmetacarpal amputation of unspecified hand, sequela -S6980XA Other specified injuries of unspecified wrist, hand and finger(s), initial encounter -S6980XD Other specified injuries of unspecified wrist, hand and finger(s), subsequent encounter -S6980XS Other specified injuries of unspecified wrist, hand and finger(s), sequela -S6981XA Other specified injuries of right wrist, hand and finger(s), initial encounter -S6981XD Other specified injuries of right wrist, hand and finger(s), subsequent encounter -S6981XS Other specified injuries of right wrist, hand and finger(s), sequela -S6982XA Other specified injuries of left wrist, hand and finger(s), initial encounter -S6982XD Other specified injuries of left wrist, hand and finger(s), subsequent encounter -S6982XS Other specified injuries of left wrist, hand and finger(s), sequela -S6990XA Unspecified injury of unspecified wrist, hand and finger(s), initial encounter -S6990XD Unspecified injury of unspecified wrist, hand and finger(s), subsequent encounter -S6990XS Unspecified injury of unspecified wrist, hand and finger(s), sequela -S6991XA Unspecified injury of right wrist, hand and finger(s), initial encounter -S6991XD Unspecified injury of right wrist, hand and finger(s), subsequent encounter -S6991XS Unspecified injury of right wrist, hand and finger(s), sequela -S6992XA Unspecified injury of left wrist, hand and finger(s), initial encounter -S6992XD Unspecified injury of left wrist, hand and finger(s), subsequent encounter -S6992XS Unspecified injury of left wrist, hand and finger(s), sequela -S7000XA Contusion of unspecified hip, initial encounter -S7000XD Contusion of unspecified hip, subsequent encounter -S7000XS Contusion of unspecified hip, sequela -S7001XA Contusion of right hip, initial encounter -S7001XD Contusion of right hip, subsequent encounter -S7001XS Contusion of right hip, sequela -S7002XA Contusion of left hip, initial encounter -S7002XD Contusion of left hip, subsequent encounter -S7002XS Contusion of left hip, sequela -S7010XA Contusion of unspecified thigh, initial encounter -S7010XD Contusion of unspecified thigh, subsequent encounter -S7010XS Contusion of unspecified thigh, sequela -S7011XA Contusion of right thigh, initial encounter -S7011XD Contusion of right thigh, subsequent encounter -S7011XS Contusion of right thigh, sequela -S7012XA Contusion of left thigh, initial encounter -S7012XD Contusion of left thigh, subsequent encounter -S7012XS Contusion of left thigh, sequela -S70211A Abrasion, right hip, initial encounter -S70211D Abrasion, right hip, subsequent encounter -S70211S Abrasion, right hip, sequela -S70212A Abrasion, left hip, initial encounter -S70212D Abrasion, left hip, subsequent encounter -S70212S Abrasion, left hip, sequela -S70219A Abrasion, unspecified hip, initial encounter -S70219D Abrasion, unspecified hip, subsequent encounter -S70219S Abrasion, unspecified hip, sequela -S70221A Blister (nonthermal), right hip, initial encounter -S70221D Blister (nonthermal), right hip, subsequent encounter -S70221S Blister (nonthermal), right hip, sequela -S70222A Blister (nonthermal), left hip, initial encounter -S70222D Blister (nonthermal), left hip, subsequent encounter -S70222S Blister (nonthermal), left hip, sequela -S70229A Blister (nonthermal), unspecified hip, initial encounter -S70229D Blister (nonthermal), unspecified hip, subsequent encounter -S70229S Blister (nonthermal), unspecified hip, sequela -S70241A External constriction, right hip, initial encounter -S70241D External constriction, right hip, subsequent encounter -S70241S External constriction, right hip, sequela -S70242A External constriction, left hip, initial encounter -S70242D External constriction, left hip, subsequent encounter -S70242S External constriction, left hip, sequela -S70249A External constriction, unspecified hip, initial encounter -S70249D External constriction, unspecified hip, subsequent encounter -S70249S External constriction, unspecified hip, sequela -S70251A Superficial foreign body, right hip, initial encounter -S70251D Superficial foreign body, right hip, subsequent encounter -S70251S Superficial foreign body, right hip, sequela -S70252A Superficial foreign body, left hip, initial encounter -S70252D Superficial foreign body, left hip, subsequent encounter -S70252S Superficial foreign body, left hip, sequela -S70259A Superficial foreign body, unspecified hip, initial encounter -S70259D Superficial foreign body, unspecified hip, subsequent encounter -S70259S Superficial foreign body, unspecified hip, sequela -S70261A Insect bite (nonvenomous), right hip, initial encounter -S70261D Insect bite (nonvenomous), right hip, subsequent encounter -S70261S Insect bite (nonvenomous), right hip, sequela -S70262A Insect bite (nonvenomous), left hip, initial encounter -S70262D Insect bite (nonvenomous), left hip, subsequent encounter -S70262S Insect bite (nonvenomous), left hip, sequela -S70269A Insect bite (nonvenomous), unspecified hip, initial encounter -S70269D Insect bite (nonvenomous), unspecified hip, subsequent encounter -S70269S Insect bite (nonvenomous), unspecified hip, sequela -S70271A Other superficial bite of hip, right hip, initial encounter -S70271D Other superficial bite of hip, right hip, subsequent encounter -S70271S Other superficial bite of hip, right hip, sequela -S70272A Other superficial bite of hip, left hip, initial encounter -S70272D Other superficial bite of hip, left hip, subsequent encounter -S70272S Other superficial bite of hip, left hip, sequela -S70279A Other superficial bite of hip, unspecified hip, initial encounter -S70279D Other superficial bite of hip, unspecified hip, subsequent encounter -S70279S Other superficial bite of hip, unspecified hip, sequela -S70311A Abrasion, right thigh, initial encounter -S70311D Abrasion, right thigh, subsequent encounter -S70311S Abrasion, right thigh, sequela -S70312A Abrasion, left thigh, initial encounter -S70312D Abrasion, left thigh, subsequent encounter -S70312S Abrasion, left thigh, sequela -S70319A Abrasion, unspecified thigh, initial encounter -S70319D Abrasion, unspecified thigh, subsequent encounter -S70319S Abrasion, unspecified thigh, sequela -S70321A Blister (nonthermal), right thigh, initial encounter -S70321D Blister (nonthermal), right thigh, subsequent encounter -S70321S Blister (nonthermal), right thigh, sequela -S70322A Blister (nonthermal), left thigh, initial encounter -S70322D Blister (nonthermal), left thigh, subsequent encounter -S70322S Blister (nonthermal), left thigh, sequela -S70329A Blister (nonthermal), unspecified thigh, initial encounter -S70329D Blister (nonthermal), unspecified thigh, subsequent encounter -S70329S Blister (nonthermal), unspecified thigh, sequela -S70341A External constriction, right thigh, initial encounter -S70341D External constriction, right thigh, subsequent encounter -S70341S External constriction, right thigh, sequela -S70342A External constriction, left thigh, initial encounter -S70342D External constriction, left thigh, subsequent encounter -S70342S External constriction, left thigh, sequela -S70349A External constriction, unspecified thigh, initial encounter -S70349D External constriction, unspecified thigh, subsequent encounter -S70349S External constriction, unspecified thigh, sequela -S70351A Superficial foreign body, right thigh, initial encounter -S70351D Superficial foreign body, right thigh, subsequent encounter -S70351S Superficial foreign body, right thigh, sequela -S70352A Superficial foreign body, left thigh, initial encounter -S70352D Superficial foreign body, left thigh, subsequent encounter -S70352S Superficial foreign body, left thigh, sequela -S70359A Superficial foreign body, unspecified thigh, initial encounter -S70359D Superficial foreign body, unspecified thigh, subsequent encounter -S70359S Superficial foreign body, unspecified thigh, sequela -S70361A Insect bite (nonvenomous), right thigh, initial encounter -S70361D Insect bite (nonvenomous), right thigh, subsequent encounter -S70361S Insect bite (nonvenomous), right thigh, sequela -S70362A Insect bite (nonvenomous), left thigh, initial encounter -S70362D Insect bite (nonvenomous), left thigh, subsequent encounter -S70362S Insect bite (nonvenomous), left thigh, sequela -S70369A Insect bite (nonvenomous), unspecified thigh, initial encounter -S70369D Insect bite (nonvenomous), unspecified thigh, subsequent encounter -S70369S Insect bite (nonvenomous), unspecified thigh, sequela -S70371A Other superficial bite of right thigh, initial encounter -S70371D Other superficial bite of right thigh, subsequent encounter -S70371S Other superficial bite of right thigh, sequela -S70372A Other superficial bite of left thigh, initial encounter -S70372D Other superficial bite of left thigh, subsequent encounter -S70372S Other superficial bite of left thigh, sequela -S70379A Other superficial bite of unspecified thigh, initial encounter -S70379D Other superficial bite of unspecified thigh, subsequent encounter -S70379S Other superficial bite of unspecified thigh, sequela -S70911A Unspecified superficial injury of right hip, initial encounter -S70911D Unspecified superficial injury of right hip, subsequent encounter -S70911S Unspecified superficial injury of right hip, sequela -S70912A Unspecified superficial injury of left hip, initial encounter -S70912D Unspecified superficial injury of left hip, subsequent encounter -S70912S Unspecified superficial injury of left hip, sequela -S70919A Unspecified superficial injury of unspecified hip, initial encounter -S70919D Unspecified superficial injury of unspecified hip, subsequent encounter -S70919S Unspecified superficial injury of unspecified hip, sequela -S70921A Unspecified superficial injury of right thigh, initial encounter -S70921D Unspecified superficial injury of right thigh, subsequent encounter -S70921S Unspecified superficial injury of right thigh, sequela -S70922A Unspecified superficial injury of left thigh, initial encounter -S70922D Unspecified superficial injury of left thigh, subsequent encounter -S70922S Unspecified superficial injury of left thigh, sequela -S70929A Unspecified superficial injury of unspecified thigh, initial encounter -S70929D Unspecified superficial injury of unspecified thigh, subsequent encounter -S70929S Unspecified superficial injury of unspecified thigh, sequela -S71001A Unspecified open wound, right hip, initial encounter -S71001D Unspecified open wound, right hip, subsequent encounter -S71001S Unspecified open wound, right hip, sequela -S71002A Unspecified open wound, left hip, initial encounter -S71002D Unspecified open wound, left hip, subsequent encounter -S71002S Unspecified open wound, left hip, sequela -S71009A Unspecified open wound, unspecified hip, initial encounter -S71009D Unspecified open wound, unspecified hip, subsequent encounter -S71009S Unspecified open wound, unspecified hip, sequela -S71011A Laceration without foreign body, right hip, initial encounter -S71011D Laceration without foreign body, right hip, subsequent encounter -S71011S Laceration without foreign body, right hip, sequela -S71012A Laceration without foreign body, left hip, initial encounter -S71012D Laceration without foreign body, left hip, subsequent encounter -S71012S Laceration without foreign body, left hip, sequela -S71019A Laceration without foreign body, unspecified hip, initial encounter -S71019D Laceration without foreign body, unspecified hip, subsequent encounter -S71019S Laceration without foreign body, unspecified hip, sequela -S71021A Laceration with foreign body, right hip, initial encounter -S71021D Laceration with foreign body, right hip, subsequent encounter -S71021S Laceration with foreign body, right hip, sequela -S71022A Laceration with foreign body, left hip, initial encounter -S71022D Laceration with foreign body, left hip, subsequent encounter -S71022S Laceration with foreign body, left hip, sequela -S71029A Laceration with foreign body, unspecified hip, initial encounter -S71029D Laceration with foreign body, unspecified hip, subsequent encounter -S71029S Laceration with foreign body, unspecified hip, sequela -S71031A Puncture wound without foreign body, right hip, initial encounter -S71031D Puncture wound without foreign body, right hip, subsequent encounter -S71031S Puncture wound without foreign body, right hip, sequela -S71032A Puncture wound without foreign body, left hip, initial encounter -S71032D Puncture wound without foreign body, left hip, subsequent encounter -S71032S Puncture wound without foreign body, left hip, sequela -S71039A Puncture wound without foreign body, unspecified hip, initial encounter -S71039D Puncture wound without foreign body, unspecified hip, subsequent encounter -S71039S Puncture wound without foreign body, unspecified hip, sequela -S71041A Puncture wound with foreign body, right hip, initial encounter -S71041D Puncture wound with foreign body, right hip, subsequent encounter -S71041S Puncture wound with foreign body, right hip, sequela -S71042A Puncture wound with foreign body, left hip, initial encounter -S71042D Puncture wound with foreign body, left hip, subsequent encounter -S71042S Puncture wound with foreign body, left hip, sequela -S71049A Puncture wound with foreign body, unspecified hip, initial encounter -S71049D Puncture wound with foreign body, unspecified hip, subsequent encounter -S71049S Puncture wound with foreign body, unspecified hip, sequela -S71051A Open bite, right hip, initial encounter -S71051D Open bite, right hip, subsequent encounter -S71051S Open bite, right hip, sequela -S71052A Open bite, left hip, initial encounter -S71052D Open bite, left hip, subsequent encounter -S71052S Open bite, left hip, sequela -S71059A Open bite, unspecified hip, initial encounter -S71059D Open bite, unspecified hip, subsequent encounter -S71059S Open bite, unspecified hip, sequela -S71101A Unspecified open wound, right thigh, initial encounter -S71101D Unspecified open wound, right thigh, subsequent encounter -S71101S Unspecified open wound, right thigh, sequela -S71102A Unspecified open wound, left thigh, initial encounter -S71102D Unspecified open wound, left thigh, subsequent encounter -S71102S Unspecified open wound, left thigh, sequela -S71109A Unspecified open wound, unspecified thigh, initial encounter -S71109D Unspecified open wound, unspecified thigh, subsequent encounter -S71109S Unspecified open wound, unspecified thigh, sequela -S71111A Laceration without foreign body, right thigh, initial encounter -S71111D Laceration without foreign body, right thigh, subsequent encounter -S71111S Laceration without foreign body, right thigh, sequela -S71112A Laceration without foreign body, left thigh, initial encounter -S71112D Laceration without foreign body, left thigh, subsequent encounter -S71112S Laceration without foreign body, left thigh, sequela -S71119A Laceration without foreign body, unspecified thigh, initial encounter -S71119D Laceration without foreign body, unspecified thigh, subsequent encounter -S71119S Laceration without foreign body, unspecified thigh, sequela -S71121A Laceration with foreign body, right thigh, initial encounter -S71121D Laceration with foreign body, right thigh, subsequent encounter -S71121S Laceration with foreign body, right thigh, sequela -S71122A Laceration with foreign body, left thigh, initial encounter -S71122D Laceration with foreign body, left thigh, subsequent encounter -S71122S Laceration with foreign body, left thigh, sequela -S71129A Laceration with foreign body, unspecified thigh, initial encounter -S71129D Laceration with foreign body, unspecified thigh, subsequent encounter -S71129S Laceration with foreign body, unspecified thigh, sequela -S71131A Puncture wound without foreign body, right thigh, initial encounter -S71131D Puncture wound without foreign body, right thigh, subsequent encounter -S71131S Puncture wound without foreign body, right thigh, sequela -S71132A Puncture wound without foreign body, left thigh, initial encounter -S71132D Puncture wound without foreign body, left thigh, subsequent encounter -S71132S Puncture wound without foreign body, left thigh, sequela -S71139A Puncture wound without foreign body, unspecified thigh, initial encounter -S71139D Puncture wound without foreign body, unspecified thigh, subsequent encounter -S71139S Puncture wound without foreign body, unspecified thigh, sequela -S71141A Puncture wound with foreign body, right thigh, initial encounter -S71141D Puncture wound with foreign body, right thigh, subsequent encounter -S71141S Puncture wound with foreign body, right thigh, sequela -S71142A Puncture wound with foreign body, left thigh, initial encounter -S71142D Puncture wound with foreign body, left thigh, subsequent encounter -S71142S Puncture wound with foreign body, left thigh, sequela -S71149A Puncture wound with foreign body, unspecified thigh, initial encounter -S71149D Puncture wound with foreign body, unspecified thigh, subsequent encounter -S71149S Puncture wound with foreign body, unspecified thigh, sequela -S71151A Open bite, right thigh, initial encounter -S71151D Open bite, right thigh, subsequent encounter -S71151S Open bite, right thigh, sequela -S71152A Open bite, left thigh, initial encounter -S71152D Open bite, left thigh, subsequent encounter -S71152S Open bite, left thigh, sequela -S71159A Open bite, unspecified thigh, initial encounter -S71159D Open bite, unspecified thigh, subsequent encounter -S71159S Open bite, unspecified thigh, sequela -S72001A Fracture of unspecified part of neck of right femur, initial encounter for closed fracture -S72001B Fracture of unspecified part of neck of right femur, initial encounter for open fracture type I or II -S72001C Fracture of unspecified part of neck of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72001D Fracture of unspecified part of neck of right femur, subsequent encounter for closed fracture with routine healing -S72001E Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type I or II with routine healing -S72001F Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72001G Fracture of unspecified part of neck of right femur, subsequent encounter for closed fracture with delayed healing -S72001H Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72001J Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72001K Fracture of unspecified part of neck of right femur, subsequent encounter for closed fracture with nonunion -S72001M Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type I or II with nonunion -S72001N Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72001P Fracture of unspecified part of neck of right femur, subsequent encounter for closed fracture with malunion -S72001Q Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type I or II with malunion -S72001R Fracture of unspecified part of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72001S Fracture of unspecified part of neck of right femur, sequela -S72002A Fracture of unspecified part of neck of left femur, initial encounter for closed fracture -S72002B Fracture of unspecified part of neck of left femur, initial encounter for open fracture type I or II -S72002C Fracture of unspecified part of neck of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72002D Fracture of unspecified part of neck of left femur, subsequent encounter for closed fracture with routine healing -S72002E Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type I or II with routine healing -S72002F Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72002G Fracture of unspecified part of neck of left femur, subsequent encounter for closed fracture with delayed healing -S72002H Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72002J Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72002K Fracture of unspecified part of neck of left femur, subsequent encounter for closed fracture with nonunion -S72002M Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type I or II with nonunion -S72002N Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72002P Fracture of unspecified part of neck of left femur, subsequent encounter for closed fracture with malunion -S72002Q Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type I or II with malunion -S72002R Fracture of unspecified part of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72002S Fracture of unspecified part of neck of left femur, sequela -S72009A Fracture of unspecified part of neck of unspecified femur, initial encounter for closed fracture -S72009B Fracture of unspecified part of neck of unspecified femur, initial encounter for open fracture type I or II -S72009C Fracture of unspecified part of neck of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72009D Fracture of unspecified part of neck of unspecified femur, subsequent encounter for closed fracture with routine healing -S72009E Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72009F Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72009G Fracture of unspecified part of neck of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72009H Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72009J Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72009K Fracture of unspecified part of neck of unspecified femur, subsequent encounter for closed fracture with nonunion -S72009M Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72009N Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72009P Fracture of unspecified part of neck of unspecified femur, subsequent encounter for closed fracture with malunion -S72009Q Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72009R Fracture of unspecified part of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72009S Fracture of unspecified part of neck of unspecified femur, sequela -S72011A Unspecified intracapsular fracture of right femur, initial encounter for closed fracture -S72011B Unspecified intracapsular fracture of right femur, initial encounter for open fracture type I or II -S72011C Unspecified intracapsular fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72011D Unspecified intracapsular fracture of right femur, subsequent encounter for closed fracture with routine healing -S72011E Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72011F Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72011G Unspecified intracapsular fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72011H Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72011J Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72011K Unspecified intracapsular fracture of right femur, subsequent encounter for closed fracture with nonunion -S72011M Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72011N Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72011P Unspecified intracapsular fracture of right femur, subsequent encounter for closed fracture with malunion -S72011Q Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72011R Unspecified intracapsular fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72011S Unspecified intracapsular fracture of right femur, sequela -S72012A Unspecified intracapsular fracture of left femur, initial encounter for closed fracture -S72012B Unspecified intracapsular fracture of left femur, initial encounter for open fracture type I or II -S72012C Unspecified intracapsular fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72012D Unspecified intracapsular fracture of left femur, subsequent encounter for closed fracture with routine healing -S72012E Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72012F Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72012G Unspecified intracapsular fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72012H Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72012J Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72012K Unspecified intracapsular fracture of left femur, subsequent encounter for closed fracture with nonunion -S72012M Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72012N Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72012P Unspecified intracapsular fracture of left femur, subsequent encounter for closed fracture with malunion -S72012Q Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72012R Unspecified intracapsular fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72012S Unspecified intracapsular fracture of left femur, sequela -S72019A Unspecified intracapsular fracture of unspecified femur, initial encounter for closed fracture -S72019B Unspecified intracapsular fracture of unspecified femur, initial encounter for open fracture type I or II -S72019C Unspecified intracapsular fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72019D Unspecified intracapsular fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72019E Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72019F Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72019G Unspecified intracapsular fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72019H Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72019J Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72019K Unspecified intracapsular fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72019M Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72019N Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72019P Unspecified intracapsular fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72019Q Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72019R Unspecified intracapsular fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72019S Unspecified intracapsular fracture of unspecified femur, sequela -S72021A Displaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for closed fracture -S72021B Displaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for open fracture type I or II -S72021C Displaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72021D Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with routine healing -S72021E Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with routine healing -S72021F Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72021G Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with delayed healing -S72021H Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72021J Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72021K Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with nonunion -S72021M Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with nonunion -S72021N Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72021P Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with malunion -S72021Q Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with malunion -S72021R Displaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72021S Displaced fracture of epiphysis (separation) (upper) of right femur, sequela -S72022A Displaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for closed fracture -S72022B Displaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for open fracture type I or II -S72022C Displaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72022D Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with routine healing -S72022E Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with routine healing -S72022F Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72022G Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with delayed healing -S72022H Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72022J Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72022K Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with nonunion -S72022M Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with nonunion -S72022N Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72022P Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with malunion -S72022Q Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with malunion -S72022R Displaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72022S Displaced fracture of epiphysis (separation) (upper) of left femur, sequela -S72023A Displaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for closed fracture -S72023B Displaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for open fracture type I or II -S72023C Displaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72023D Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with routine healing -S72023E Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72023F Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72023G Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72023H Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72023J Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72023K Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with nonunion -S72023M Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72023N Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72023P Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with malunion -S72023Q Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72023R Displaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72023S Displaced fracture of epiphysis (separation) (upper) of unspecified femur, sequela -S72024A Nondisplaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for closed fracture -S72024B Nondisplaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for open fracture type I or II -S72024C Nondisplaced fracture of epiphysis (separation) (upper) of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72024D Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with routine healing -S72024E Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with routine healing -S72024F Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72024G Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with delayed healing -S72024H Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72024J Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72024K Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with nonunion -S72024M Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with nonunion -S72024N Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72024P Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for closed fracture with malunion -S72024Q Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type I or II with malunion -S72024R Nondisplaced fracture of epiphysis (separation) (upper) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72024S Nondisplaced fracture of epiphysis (separation) (upper) of right femur, sequela -S72025A Nondisplaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for closed fracture -S72025B Nondisplaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for open fracture type I or II -S72025C Nondisplaced fracture of epiphysis (separation) (upper) of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72025D Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with routine healing -S72025E Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with routine healing -S72025F Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72025G Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with delayed healing -S72025H Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72025J Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72025K Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with nonunion -S72025M Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with nonunion -S72025N Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72025P Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for closed fracture with malunion -S72025Q Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type I or II with malunion -S72025R Nondisplaced fracture of epiphysis (separation) (upper) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72025S Nondisplaced fracture of epiphysis (separation) (upper) of left femur, sequela -S72026A Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for closed fracture -S72026B Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for open fracture type I or II -S72026C Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72026D Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with routine healing -S72026E Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72026F Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72026G Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72026H Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72026J Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72026K Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with nonunion -S72026M Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72026N Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72026P Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for closed fracture with malunion -S72026Q Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72026R Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72026S Nondisplaced fracture of epiphysis (separation) (upper) of unspecified femur, sequela -S72031A Displaced midcervical fracture of right femur, initial encounter for closed fracture -S72031B Displaced midcervical fracture of right femur, initial encounter for open fracture type I or II -S72031C Displaced midcervical fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72031D Displaced midcervical fracture of right femur, subsequent encounter for closed fracture with routine healing -S72031E Displaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72031F Displaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72031G Displaced midcervical fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72031H Displaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72031J Displaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72031K Displaced midcervical fracture of right femur, subsequent encounter for closed fracture with nonunion -S72031M Displaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72031N Displaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72031P Displaced midcervical fracture of right femur, subsequent encounter for closed fracture with malunion -S72031Q Displaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72031R Displaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72031S Displaced midcervical fracture of right femur, sequela -S72032A Displaced midcervical fracture of left femur, initial encounter for closed fracture -S72032B Displaced midcervical fracture of left femur, initial encounter for open fracture type I or II -S72032C Displaced midcervical fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72032D Displaced midcervical fracture of left femur, subsequent encounter for closed fracture with routine healing -S72032E Displaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72032F Displaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72032G Displaced midcervical fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72032H Displaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72032J Displaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72032K Displaced midcervical fracture of left femur, subsequent encounter for closed fracture with nonunion -S72032M Displaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72032N Displaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72032P Displaced midcervical fracture of left femur, subsequent encounter for closed fracture with malunion -S72032Q Displaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72032R Displaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72032S Displaced midcervical fracture of left femur, sequela -S72033A Displaced midcervical fracture of unspecified femur, initial encounter for closed fracture -S72033B Displaced midcervical fracture of unspecified femur, initial encounter for open fracture type I or II -S72033C Displaced midcervical fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72033D Displaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72033E Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72033F Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72033G Displaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72033H Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72033J Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72033K Displaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72033M Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72033N Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72033P Displaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72033Q Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72033R Displaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72033S Displaced midcervical fracture of unspecified femur, sequela -S72034A Nondisplaced midcervical fracture of right femur, initial encounter for closed fracture -S72034B Nondisplaced midcervical fracture of right femur, initial encounter for open fracture type I or II -S72034C Nondisplaced midcervical fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72034D Nondisplaced midcervical fracture of right femur, subsequent encounter for closed fracture with routine healing -S72034E Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72034F Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72034G Nondisplaced midcervical fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72034H Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72034J Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72034K Nondisplaced midcervical fracture of right femur, subsequent encounter for closed fracture with nonunion -S72034M Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72034N Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72034P Nondisplaced midcervical fracture of right femur, subsequent encounter for closed fracture with malunion -S72034Q Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72034R Nondisplaced midcervical fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72034S Nondisplaced midcervical fracture of right femur, sequela -S72035A Nondisplaced midcervical fracture of left femur, initial encounter for closed fracture -S72035B Nondisplaced midcervical fracture of left femur, initial encounter for open fracture type I or II -S72035C Nondisplaced midcervical fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72035D Nondisplaced midcervical fracture of left femur, subsequent encounter for closed fracture with routine healing -S72035E Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72035F Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72035G Nondisplaced midcervical fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72035H Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72035J Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72035K Nondisplaced midcervical fracture of left femur, subsequent encounter for closed fracture with nonunion -S72035M Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72035N Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72035P Nondisplaced midcervical fracture of left femur, subsequent encounter for closed fracture with malunion -S72035Q Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72035R Nondisplaced midcervical fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72035S Nondisplaced midcervical fracture of left femur, sequela -S72036A Nondisplaced midcervical fracture of unspecified femur, initial encounter for closed fracture -S72036B Nondisplaced midcervical fracture of unspecified femur, initial encounter for open fracture type I or II -S72036C Nondisplaced midcervical fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72036D Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72036E Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72036F Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72036G Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72036H Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72036J Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72036K Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72036M Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72036N Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72036P Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72036Q Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72036R Nondisplaced midcervical fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72036S Nondisplaced midcervical fracture of unspecified femur, sequela -S72041A Displaced fracture of base of neck of right femur, initial encounter for closed fracture -S72041B Displaced fracture of base of neck of right femur, initial encounter for open fracture type I or II -S72041C Displaced fracture of base of neck of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72041D Displaced fracture of base of neck of right femur, subsequent encounter for closed fracture with routine healing -S72041E Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with routine healing -S72041F Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72041G Displaced fracture of base of neck of right femur, subsequent encounter for closed fracture with delayed healing -S72041H Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72041J Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72041K Displaced fracture of base of neck of right femur, subsequent encounter for closed fracture with nonunion -S72041M Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with nonunion -S72041N Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72041P Displaced fracture of base of neck of right femur, subsequent encounter for closed fracture with malunion -S72041Q Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with malunion -S72041R Displaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72041S Displaced fracture of base of neck of right femur, sequela -S72042A Displaced fracture of base of neck of left femur, initial encounter for closed fracture -S72042B Displaced fracture of base of neck of left femur, initial encounter for open fracture type I or II -S72042C Displaced fracture of base of neck of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72042D Displaced fracture of base of neck of left femur, subsequent encounter for closed fracture with routine healing -S72042E Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with routine healing -S72042F Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72042G Displaced fracture of base of neck of left femur, subsequent encounter for closed fracture with delayed healing -S72042H Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72042J Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72042K Displaced fracture of base of neck of left femur, subsequent encounter for closed fracture with nonunion -S72042M Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with nonunion -S72042N Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72042P Displaced fracture of base of neck of left femur, subsequent encounter for closed fracture with malunion -S72042Q Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with malunion -S72042R Displaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72042S Displaced fracture of base of neck of left femur, sequela -S72043A Displaced fracture of base of neck of unspecified femur, initial encounter for closed fracture -S72043B Displaced fracture of base of neck of unspecified femur, initial encounter for open fracture type I or II -S72043C Displaced fracture of base of neck of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72043D Displaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with routine healing -S72043E Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72043F Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72043G Displaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72043H Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72043J Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72043K Displaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with nonunion -S72043M Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72043N Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72043P Displaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with malunion -S72043Q Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72043R Displaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72043S Displaced fracture of base of neck of unspecified femur, sequela -S72044A Nondisplaced fracture of base of neck of right femur, initial encounter for closed fracture -S72044B Nondisplaced fracture of base of neck of right femur, initial encounter for open fracture type I or II -S72044C Nondisplaced fracture of base of neck of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72044D Nondisplaced fracture of base of neck of right femur, subsequent encounter for closed fracture with routine healing -S72044E Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with routine healing -S72044F Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72044G Nondisplaced fracture of base of neck of right femur, subsequent encounter for closed fracture with delayed healing -S72044H Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72044J Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72044K Nondisplaced fracture of base of neck of right femur, subsequent encounter for closed fracture with nonunion -S72044M Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with nonunion -S72044N Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72044P Nondisplaced fracture of base of neck of right femur, subsequent encounter for closed fracture with malunion -S72044Q Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type I or II with malunion -S72044R Nondisplaced fracture of base of neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72044S Nondisplaced fracture of base of neck of right femur, sequela -S72045A Nondisplaced fracture of base of neck of left femur, initial encounter for closed fracture -S72045B Nondisplaced fracture of base of neck of left femur, initial encounter for open fracture type I or II -S72045C Nondisplaced fracture of base of neck of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72045D Nondisplaced fracture of base of neck of left femur, subsequent encounter for closed fracture with routine healing -S72045E Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with routine healing -S72045F Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72045G Nondisplaced fracture of base of neck of left femur, subsequent encounter for closed fracture with delayed healing -S72045H Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72045J Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72045K Nondisplaced fracture of base of neck of left femur, subsequent encounter for closed fracture with nonunion -S72045M Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with nonunion -S72045N Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72045P Nondisplaced fracture of base of neck of left femur, subsequent encounter for closed fracture with malunion -S72045Q Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type I or II with malunion -S72045R Nondisplaced fracture of base of neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72045S Nondisplaced fracture of base of neck of left femur, sequela -S72046A Nondisplaced fracture of base of neck of unspecified femur, initial encounter for closed fracture -S72046B Nondisplaced fracture of base of neck of unspecified femur, initial encounter for open fracture type I or II -S72046C Nondisplaced fracture of base of neck of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72046D Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with routine healing -S72046E Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72046F Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72046G Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72046H Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72046J Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72046K Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with nonunion -S72046M Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72046N Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72046P Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for closed fracture with malunion -S72046Q Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72046R Nondisplaced fracture of base of neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72046S Nondisplaced fracture of base of neck of unspecified femur, sequela -S72051A Unspecified fracture of head of right femur, initial encounter for closed fracture -S72051B Unspecified fracture of head of right femur, initial encounter for open fracture type I or II -S72051C Unspecified fracture of head of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72051D Unspecified fracture of head of right femur, subsequent encounter for closed fracture with routine healing -S72051E Unspecified fracture of head of right femur, subsequent encounter for open fracture type I or II with routine healing -S72051F Unspecified fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72051G Unspecified fracture of head of right femur, subsequent encounter for closed fracture with delayed healing -S72051H Unspecified fracture of head of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72051J Unspecified fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72051K Unspecified fracture of head of right femur, subsequent encounter for closed fracture with nonunion -S72051M Unspecified fracture of head of right femur, subsequent encounter for open fracture type I or II with nonunion -S72051N Unspecified fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72051P Unspecified fracture of head of right femur, subsequent encounter for closed fracture with malunion -S72051Q Unspecified fracture of head of right femur, subsequent encounter for open fracture type I or II with malunion -S72051R Unspecified fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72051S Unspecified fracture of head of right femur, sequela -S72052A Unspecified fracture of head of left femur, initial encounter for closed fracture -S72052B Unspecified fracture of head of left femur, initial encounter for open fracture type I or II -S72052C Unspecified fracture of head of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72052D Unspecified fracture of head of left femur, subsequent encounter for closed fracture with routine healing -S72052E Unspecified fracture of head of left femur, subsequent encounter for open fracture type I or II with routine healing -S72052F Unspecified fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72052G Unspecified fracture of head of left femur, subsequent encounter for closed fracture with delayed healing -S72052H Unspecified fracture of head of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72052J Unspecified fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72052K Unspecified fracture of head of left femur, subsequent encounter for closed fracture with nonunion -S72052M Unspecified fracture of head of left femur, subsequent encounter for open fracture type I or II with nonunion -S72052N Unspecified fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72052P Unspecified fracture of head of left femur, subsequent encounter for closed fracture with malunion -S72052Q Unspecified fracture of head of left femur, subsequent encounter for open fracture type I or II with malunion -S72052R Unspecified fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72052S Unspecified fracture of head of left femur, sequela -S72059A Unspecified fracture of head of unspecified femur, initial encounter for closed fracture -S72059B Unspecified fracture of head of unspecified femur, initial encounter for open fracture type I or II -S72059C Unspecified fracture of head of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72059D Unspecified fracture of head of unspecified femur, subsequent encounter for closed fracture with routine healing -S72059E Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72059F Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72059G Unspecified fracture of head of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72059H Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72059J Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72059K Unspecified fracture of head of unspecified femur, subsequent encounter for closed fracture with nonunion -S72059M Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72059N Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72059P Unspecified fracture of head of unspecified femur, subsequent encounter for closed fracture with malunion -S72059Q Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72059R Unspecified fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72059S Unspecified fracture of head of unspecified femur, sequela -S72061A Displaced articular fracture of head of right femur, initial encounter for closed fracture -S72061B Displaced articular fracture of head of right femur, initial encounter for open fracture type I or II -S72061C Displaced articular fracture of head of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72061D Displaced articular fracture of head of right femur, subsequent encounter for closed fracture with routine healing -S72061E Displaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with routine healing -S72061F Displaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72061G Displaced articular fracture of head of right femur, subsequent encounter for closed fracture with delayed healing -S72061H Displaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72061J Displaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72061K Displaced articular fracture of head of right femur, subsequent encounter for closed fracture with nonunion -S72061M Displaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with nonunion -S72061N Displaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72061P Displaced articular fracture of head of right femur, subsequent encounter for closed fracture with malunion -S72061Q Displaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with malunion -S72061R Displaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72061S Displaced articular fracture of head of right femur, sequela -S72062A Displaced articular fracture of head of left femur, initial encounter for closed fracture -S72062B Displaced articular fracture of head of left femur, initial encounter for open fracture type I or II -S72062C Displaced articular fracture of head of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72062D Displaced articular fracture of head of left femur, subsequent encounter for closed fracture with routine healing -S72062E Displaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with routine healing -S72062F Displaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72062G Displaced articular fracture of head of left femur, subsequent encounter for closed fracture with delayed healing -S72062H Displaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72062J Displaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72062K Displaced articular fracture of head of left femur, subsequent encounter for closed fracture with nonunion -S72062M Displaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with nonunion -S72062N Displaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72062P Displaced articular fracture of head of left femur, subsequent encounter for closed fracture with malunion -S72062Q Displaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with malunion -S72062R Displaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72062S Displaced articular fracture of head of left femur, sequela -S72063A Displaced articular fracture of head of unspecified femur, initial encounter for closed fracture -S72063B Displaced articular fracture of head of unspecified femur, initial encounter for open fracture type I or II -S72063C Displaced articular fracture of head of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72063D Displaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with routine healing -S72063E Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72063F Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72063G Displaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72063H Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72063J Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72063K Displaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with nonunion -S72063M Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72063N Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72063P Displaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with malunion -S72063Q Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72063R Displaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72063S Displaced articular fracture of head of unspecified femur, sequela -S72064A Nondisplaced articular fracture of head of right femur, initial encounter for closed fracture -S72064B Nondisplaced articular fracture of head of right femur, initial encounter for open fracture type I or II -S72064C Nondisplaced articular fracture of head of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72064D Nondisplaced articular fracture of head of right femur, subsequent encounter for closed fracture with routine healing -S72064E Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with routine healing -S72064F Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72064G Nondisplaced articular fracture of head of right femur, subsequent encounter for closed fracture with delayed healing -S72064H Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72064J Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72064K Nondisplaced articular fracture of head of right femur, subsequent encounter for closed fracture with nonunion -S72064M Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with nonunion -S72064N Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72064P Nondisplaced articular fracture of head of right femur, subsequent encounter for closed fracture with malunion -S72064Q Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type I or II with malunion -S72064R Nondisplaced articular fracture of head of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72064S Nondisplaced articular fracture of head of right femur, sequela -S72065A Nondisplaced articular fracture of head of left femur, initial encounter for closed fracture -S72065B Nondisplaced articular fracture of head of left femur, initial encounter for open fracture type I or II -S72065C Nondisplaced articular fracture of head of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72065D Nondisplaced articular fracture of head of left femur, subsequent encounter for closed fracture with routine healing -S72065E Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with routine healing -S72065F Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72065G Nondisplaced articular fracture of head of left femur, subsequent encounter for closed fracture with delayed healing -S72065H Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72065J Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72065K Nondisplaced articular fracture of head of left femur, subsequent encounter for closed fracture with nonunion -S72065M Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with nonunion -S72065N Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72065P Nondisplaced articular fracture of head of left femur, subsequent encounter for closed fracture with malunion -S72065Q Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type I or II with malunion -S72065R Nondisplaced articular fracture of head of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72065S Nondisplaced articular fracture of head of left femur, sequela -S72066A Nondisplaced articular fracture of head of unspecified femur, initial encounter for closed fracture -S72066B Nondisplaced articular fracture of head of unspecified femur, initial encounter for open fracture type I or II -S72066C Nondisplaced articular fracture of head of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72066D Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with routine healing -S72066E Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72066F Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72066G Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72066H Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72066J Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72066K Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with nonunion -S72066M Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72066N Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72066P Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for closed fracture with malunion -S72066Q Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72066R Nondisplaced articular fracture of head of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72066S Nondisplaced articular fracture of head of unspecified femur, sequela -S72091A Other fracture of head and neck of right femur, initial encounter for closed fracture -S72091B Other fracture of head and neck of right femur, initial encounter for open fracture type I or II -S72091C Other fracture of head and neck of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72091D Other fracture of head and neck of right femur, subsequent encounter for closed fracture with routine healing -S72091E Other fracture of head and neck of right femur, subsequent encounter for open fracture type I or II with routine healing -S72091F Other fracture of head and neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72091G Other fracture of head and neck of right femur, subsequent encounter for closed fracture with delayed healing -S72091H Other fracture of head and neck of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72091J Other fracture of head and neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72091K Other fracture of head and neck of right femur, subsequent encounter for closed fracture with nonunion -S72091M Other fracture of head and neck of right femur, subsequent encounter for open fracture type I or II with nonunion -S72091N Other fracture of head and neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72091P Other fracture of head and neck of right femur, subsequent encounter for closed fracture with malunion -S72091Q Other fracture of head and neck of right femur, subsequent encounter for open fracture type I or II with malunion -S72091R Other fracture of head and neck of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72091S Other fracture of head and neck of right femur, sequela -S72092A Other fracture of head and neck of left femur, initial encounter for closed fracture -S72092B Other fracture of head and neck of left femur, initial encounter for open fracture type I or II -S72092C Other fracture of head and neck of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72092D Other fracture of head and neck of left femur, subsequent encounter for closed fracture with routine healing -S72092E Other fracture of head and neck of left femur, subsequent encounter for open fracture type I or II with routine healing -S72092F Other fracture of head and neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72092G Other fracture of head and neck of left femur, subsequent encounter for closed fracture with delayed healing -S72092H Other fracture of head and neck of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72092J Other fracture of head and neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72092K Other fracture of head and neck of left femur, subsequent encounter for closed fracture with nonunion -S72092M Other fracture of head and neck of left femur, subsequent encounter for open fracture type I or II with nonunion -S72092N Other fracture of head and neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72092P Other fracture of head and neck of left femur, subsequent encounter for closed fracture with malunion -S72092Q Other fracture of head and neck of left femur, subsequent encounter for open fracture type I or II with malunion -S72092R Other fracture of head and neck of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72092S Other fracture of head and neck of left femur, sequela -S72099A Other fracture of head and neck of unspecified femur, initial encounter for closed fracture -S72099B Other fracture of head and neck of unspecified femur, initial encounter for open fracture type I or II -S72099C Other fracture of head and neck of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72099D Other fracture of head and neck of unspecified femur, subsequent encounter for closed fracture with routine healing -S72099E Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72099F Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72099G Other fracture of head and neck of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72099H Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72099J Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72099K Other fracture of head and neck of unspecified femur, subsequent encounter for closed fracture with nonunion -S72099M Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72099N Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72099P Other fracture of head and neck of unspecified femur, subsequent encounter for closed fracture with malunion -S72099Q Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72099R Other fracture of head and neck of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72099S Other fracture of head and neck of unspecified femur, sequela -S72101A Unspecified trochanteric fracture of right femur, initial encounter for closed fracture -S72101B Unspecified trochanteric fracture of right femur, initial encounter for open fracture type I or II -S72101C Unspecified trochanteric fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72101D Unspecified trochanteric fracture of right femur, subsequent encounter for closed fracture with routine healing -S72101E Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72101F Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72101G Unspecified trochanteric fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72101H Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72101J Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72101K Unspecified trochanteric fracture of right femur, subsequent encounter for closed fracture with nonunion -S72101M Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72101N Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72101P Unspecified trochanteric fracture of right femur, subsequent encounter for closed fracture with malunion -S72101Q Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72101R Unspecified trochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72101S Unspecified trochanteric fracture of right femur, sequela -S72102A Unspecified trochanteric fracture of left femur, initial encounter for closed fracture -S72102B Unspecified trochanteric fracture of left femur, initial encounter for open fracture type I or II -S72102C Unspecified trochanteric fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72102D Unspecified trochanteric fracture of left femur, subsequent encounter for closed fracture with routine healing -S72102E Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72102F Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72102G Unspecified trochanteric fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72102H Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72102J Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72102K Unspecified trochanteric fracture of left femur, subsequent encounter for closed fracture with nonunion -S72102M Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72102N Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72102P Unspecified trochanteric fracture of left femur, subsequent encounter for closed fracture with malunion -S72102Q Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72102R Unspecified trochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72102S Unspecified trochanteric fracture of left femur, sequela -S72109A Unspecified trochanteric fracture of unspecified femur, initial encounter for closed fracture -S72109B Unspecified trochanteric fracture of unspecified femur, initial encounter for open fracture type I or II -S72109C Unspecified trochanteric fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72109D Unspecified trochanteric fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72109E Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72109F Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72109G Unspecified trochanteric fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72109H Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72109J Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72109K Unspecified trochanteric fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72109M Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72109N Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72109P Unspecified trochanteric fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72109Q Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72109R Unspecified trochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72109S Unspecified trochanteric fracture of unspecified femur, sequela -S72111A Displaced fracture of greater trochanter of right femur, initial encounter for closed fracture -S72111B Displaced fracture of greater trochanter of right femur, initial encounter for open fracture type I or II -S72111C Displaced fracture of greater trochanter of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72111D Displaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with routine healing -S72111E Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with routine healing -S72111F Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72111G Displaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with delayed healing -S72111H Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72111J Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72111K Displaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with nonunion -S72111M Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with nonunion -S72111N Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72111P Displaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with malunion -S72111Q Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with malunion -S72111R Displaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72111S Displaced fracture of greater trochanter of right femur, sequela -S72112A Displaced fracture of greater trochanter of left femur, initial encounter for closed fracture -S72112B Displaced fracture of greater trochanter of left femur, initial encounter for open fracture type I or II -S72112C Displaced fracture of greater trochanter of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72112D Displaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with routine healing -S72112E Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with routine healing -S72112F Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72112G Displaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with delayed healing -S72112H Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72112J Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72112K Displaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with nonunion -S72112M Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with nonunion -S72112N Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72112P Displaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with malunion -S72112Q Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with malunion -S72112R Displaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72112S Displaced fracture of greater trochanter of left femur, sequela -S72113A Displaced fracture of greater trochanter of unspecified femur, initial encounter for closed fracture -S72113B Displaced fracture of greater trochanter of unspecified femur, initial encounter for open fracture type I or II -S72113C Displaced fracture of greater trochanter of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72113D Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with routine healing -S72113E Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72113F Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72113G Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72113H Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72113J Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72113K Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with nonunion -S72113M Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72113N Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72113P Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with malunion -S72113Q Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72113R Displaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72113S Displaced fracture of greater trochanter of unspecified femur, sequela -S72114A Nondisplaced fracture of greater trochanter of right femur, initial encounter for closed fracture -S72114B Nondisplaced fracture of greater trochanter of right femur, initial encounter for open fracture type I or II -S72114C Nondisplaced fracture of greater trochanter of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72114D Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with routine healing -S72114E Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with routine healing -S72114F Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72114G Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with delayed healing -S72114H Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72114J Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72114K Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with nonunion -S72114M Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with nonunion -S72114N Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72114P Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for closed fracture with malunion -S72114Q Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type I or II with malunion -S72114R Nondisplaced fracture of greater trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72114S Nondisplaced fracture of greater trochanter of right femur, sequela -S72115A Nondisplaced fracture of greater trochanter of left femur, initial encounter for closed fracture -S72115B Nondisplaced fracture of greater trochanter of left femur, initial encounter for open fracture type I or II -S72115C Nondisplaced fracture of greater trochanter of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72115D Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with routine healing -S72115E Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with routine healing -S72115F Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72115G Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with delayed healing -S72115H Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72115J Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72115K Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with nonunion -S72115M Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with nonunion -S72115N Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72115P Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for closed fracture with malunion -S72115Q Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type I or II with malunion -S72115R Nondisplaced fracture of greater trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72115S Nondisplaced fracture of greater trochanter of left femur, sequela -S72116A Nondisplaced fracture of greater trochanter of unspecified femur, initial encounter for closed fracture -S72116B Nondisplaced fracture of greater trochanter of unspecified femur, initial encounter for open fracture type I or II -S72116C Nondisplaced fracture of greater trochanter of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72116D Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with routine healing -S72116E Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72116F Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72116G Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72116H Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72116J Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72116K Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with nonunion -S72116M Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72116N Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72116P Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for closed fracture with malunion -S72116Q Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72116R Nondisplaced fracture of greater trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72116S Nondisplaced fracture of greater trochanter of unspecified femur, sequela -S72121A Displaced fracture of lesser trochanter of right femur, initial encounter for closed fracture -S72121B Displaced fracture of lesser trochanter of right femur, initial encounter for open fracture type I or II -S72121C Displaced fracture of lesser trochanter of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72121D Displaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with routine healing -S72121E Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with routine healing -S72121F Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72121G Displaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with delayed healing -S72121H Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72121J Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72121K Displaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with nonunion -S72121M Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with nonunion -S72121N Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72121P Displaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with malunion -S72121Q Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with malunion -S72121R Displaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72121S Displaced fracture of lesser trochanter of right femur, sequela -S72122A Displaced fracture of lesser trochanter of left femur, initial encounter for closed fracture -S72122B Displaced fracture of lesser trochanter of left femur, initial encounter for open fracture type I or II -S72122C Displaced fracture of lesser trochanter of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72122D Displaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with routine healing -S72122E Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with routine healing -S72122F Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72122G Displaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with delayed healing -S72122H Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72122J Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72122K Displaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with nonunion -S72122M Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with nonunion -S72122N Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72122P Displaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with malunion -S72122Q Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with malunion -S72122R Displaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72122S Displaced fracture of lesser trochanter of left femur, sequela -S72123A Displaced fracture of lesser trochanter of unspecified femur, initial encounter for closed fracture -S72123B Displaced fracture of lesser trochanter of unspecified femur, initial encounter for open fracture type I or II -S72123C Displaced fracture of lesser trochanter of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72123D Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with routine healing -S72123E Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72123F Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72123G Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72123H Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72123J Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72123K Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with nonunion -S72123M Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72123N Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72123P Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with malunion -S72123Q Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72123R Displaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72123S Displaced fracture of lesser trochanter of unspecified femur, sequela -S72124A Nondisplaced fracture of lesser trochanter of right femur, initial encounter for closed fracture -S72124B Nondisplaced fracture of lesser trochanter of right femur, initial encounter for open fracture type I or II -S72124C Nondisplaced fracture of lesser trochanter of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72124D Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with routine healing -S72124E Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with routine healing -S72124F Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72124G Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with delayed healing -S72124H Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72124J Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72124K Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with nonunion -S72124M Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with nonunion -S72124N Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72124P Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for closed fracture with malunion -S72124Q Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type I or II with malunion -S72124R Nondisplaced fracture of lesser trochanter of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72124S Nondisplaced fracture of lesser trochanter of right femur, sequela -S72125A Nondisplaced fracture of lesser trochanter of left femur, initial encounter for closed fracture -S72125B Nondisplaced fracture of lesser trochanter of left femur, initial encounter for open fracture type I or II -S72125C Nondisplaced fracture of lesser trochanter of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72125D Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with routine healing -S72125E Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with routine healing -S72125F Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72125G Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with delayed healing -S72125H Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72125J Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72125K Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with nonunion -S72125M Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with nonunion -S72125N Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72125P Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for closed fracture with malunion -S72125Q Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type I or II with malunion -S72125R Nondisplaced fracture of lesser trochanter of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72125S Nondisplaced fracture of lesser trochanter of left femur, sequela -S72126A Nondisplaced fracture of lesser trochanter of unspecified femur, initial encounter for closed fracture -S72126B Nondisplaced fracture of lesser trochanter of unspecified femur, initial encounter for open fracture type I or II -S72126C Nondisplaced fracture of lesser trochanter of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72126D Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with routine healing -S72126E Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72126F Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72126G Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72126H Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72126J Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72126K Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with nonunion -S72126M Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72126N Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72126P Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for closed fracture with malunion -S72126Q Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72126R Nondisplaced fracture of lesser trochanter of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72126S Nondisplaced fracture of lesser trochanter of unspecified femur, sequela -S72131A Displaced apophyseal fracture of right femur, initial encounter for closed fracture -S72131B Displaced apophyseal fracture of right femur, initial encounter for open fracture type I or II -S72131C Displaced apophyseal fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72131D Displaced apophyseal fracture of right femur, subsequent encounter for closed fracture with routine healing -S72131E Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72131F Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72131G Displaced apophyseal fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72131H Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72131J Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72131K Displaced apophyseal fracture of right femur, subsequent encounter for closed fracture with nonunion -S72131M Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72131N Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72131P Displaced apophyseal fracture of right femur, subsequent encounter for closed fracture with malunion -S72131Q Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72131R Displaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72131S Displaced apophyseal fracture of right femur, sequela -S72132A Displaced apophyseal fracture of left femur, initial encounter for closed fracture -S72132B Displaced apophyseal fracture of left femur, initial encounter for open fracture type I or II -S72132C Displaced apophyseal fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72132D Displaced apophyseal fracture of left femur, subsequent encounter for closed fracture with routine healing -S72132E Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72132F Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72132G Displaced apophyseal fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72132H Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72132J Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72132K Displaced apophyseal fracture of left femur, subsequent encounter for closed fracture with nonunion -S72132M Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72132N Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72132P Displaced apophyseal fracture of left femur, subsequent encounter for closed fracture with malunion -S72132Q Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72132R Displaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72132S Displaced apophyseal fracture of left femur, sequela -S72133A Displaced apophyseal fracture of unspecified femur, initial encounter for closed fracture -S72133B Displaced apophyseal fracture of unspecified femur, initial encounter for open fracture type I or II -S72133C Displaced apophyseal fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72133D Displaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72133E Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72133F Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72133G Displaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72133H Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72133J Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72133K Displaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72133M Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72133N Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72133P Displaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72133Q Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72133R Displaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72133S Displaced apophyseal fracture of unspecified femur, sequela -S72134A Nondisplaced apophyseal fracture of right femur, initial encounter for closed fracture -S72134B Nondisplaced apophyseal fracture of right femur, initial encounter for open fracture type I or II -S72134C Nondisplaced apophyseal fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72134D Nondisplaced apophyseal fracture of right femur, subsequent encounter for closed fracture with routine healing -S72134E Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72134F Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72134G Nondisplaced apophyseal fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72134H Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72134J Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72134K Nondisplaced apophyseal fracture of right femur, subsequent encounter for closed fracture with nonunion -S72134M Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72134N Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72134P Nondisplaced apophyseal fracture of right femur, subsequent encounter for closed fracture with malunion -S72134Q Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72134R Nondisplaced apophyseal fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72134S Nondisplaced apophyseal fracture of right femur, sequela -S72135A Nondisplaced apophyseal fracture of left femur, initial encounter for closed fracture -S72135B Nondisplaced apophyseal fracture of left femur, initial encounter for open fracture type I or II -S72135C Nondisplaced apophyseal fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72135D Nondisplaced apophyseal fracture of left femur, subsequent encounter for closed fracture with routine healing -S72135E Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72135F Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72135G Nondisplaced apophyseal fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72135H Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72135J Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72135K Nondisplaced apophyseal fracture of left femur, subsequent encounter for closed fracture with nonunion -S72135M Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72135N Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72135P Nondisplaced apophyseal fracture of left femur, subsequent encounter for closed fracture with malunion -S72135Q Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72135R Nondisplaced apophyseal fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72135S Nondisplaced apophyseal fracture of left femur, sequela -S72136A Nondisplaced apophyseal fracture of unspecified femur, initial encounter for closed fracture -S72136B Nondisplaced apophyseal fracture of unspecified femur, initial encounter for open fracture type I or II -S72136C Nondisplaced apophyseal fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72136D Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72136E Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72136F Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72136G Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72136H Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72136J Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72136K Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72136M Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72136N Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72136P Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72136Q Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72136R Nondisplaced apophyseal fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72136S Nondisplaced apophyseal fracture of unspecified femur, sequela -S72141A Displaced intertrochanteric fracture of right femur, initial encounter for closed fracture -S72141B Displaced intertrochanteric fracture of right femur, initial encounter for open fracture type I or II -S72141C Displaced intertrochanteric fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72141D Displaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with routine healing -S72141E Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72141F Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72141G Displaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72141H Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72141J Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72141K Displaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with nonunion -S72141M Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72141N Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72141P Displaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with malunion -S72141Q Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72141R Displaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72141S Displaced intertrochanteric fracture of right femur, sequela -S72142A Displaced intertrochanteric fracture of left femur, initial encounter for closed fracture -S72142B Displaced intertrochanteric fracture of left femur, initial encounter for open fracture type I or II -S72142C Displaced intertrochanteric fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72142D Displaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with routine healing -S72142E Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72142F Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72142G Displaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72142H Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72142J Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72142K Displaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with nonunion -S72142M Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72142N Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72142P Displaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with malunion -S72142Q Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72142R Displaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72142S Displaced intertrochanteric fracture of left femur, sequela -S72143A Displaced intertrochanteric fracture of unspecified femur, initial encounter for closed fracture -S72143B Displaced intertrochanteric fracture of unspecified femur, initial encounter for open fracture type I or II -S72143C Displaced intertrochanteric fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72143D Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72143E Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72143F Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72143G Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72143H Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72143J Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72143K Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72143M Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72143N Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72143P Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72143Q Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72143R Displaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72143S Displaced intertrochanteric fracture of unspecified femur, sequela -S72144A Nondisplaced intertrochanteric fracture of right femur, initial encounter for closed fracture -S72144B Nondisplaced intertrochanteric fracture of right femur, initial encounter for open fracture type I or II -S72144C Nondisplaced intertrochanteric fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72144D Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with routine healing -S72144E Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S72144F Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72144G Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with delayed healing -S72144H Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72144J Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72144K Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with nonunion -S72144M Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S72144N Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72144P Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for closed fracture with malunion -S72144Q Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S72144R Nondisplaced intertrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72144S Nondisplaced intertrochanteric fracture of right femur, sequela -S72145A Nondisplaced intertrochanteric fracture of left femur, initial encounter for closed fracture -S72145B Nondisplaced intertrochanteric fracture of left femur, initial encounter for open fracture type I or II -S72145C Nondisplaced intertrochanteric fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72145D Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with routine healing -S72145E Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S72145F Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72145G Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with delayed healing -S72145H Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72145J Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72145K Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with nonunion -S72145M Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S72145N Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72145P Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for closed fracture with malunion -S72145Q Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S72145R Nondisplaced intertrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72145S Nondisplaced intertrochanteric fracture of left femur, sequela -S72146A Nondisplaced intertrochanteric fracture of unspecified femur, initial encounter for closed fracture -S72146B Nondisplaced intertrochanteric fracture of unspecified femur, initial encounter for open fracture type I or II -S72146C Nondisplaced intertrochanteric fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72146D Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S72146E Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72146F Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72146G Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72146H Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72146J Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72146K Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S72146M Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72146N Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72146P Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S72146Q Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72146R Nondisplaced intertrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72146S Nondisplaced intertrochanteric fracture of unspecified femur, sequela -S7221XA Displaced subtrochanteric fracture of right femur, initial encounter for closed fracture -S7221XB Displaced subtrochanteric fracture of right femur, initial encounter for open fracture type I or II -S7221XC Displaced subtrochanteric fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7221XD Displaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with routine healing -S7221XE Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S7221XF Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7221XG Displaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with delayed healing -S7221XH Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S7221XJ Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7221XK Displaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with nonunion -S7221XM Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S7221XN Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7221XP Displaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with malunion -S7221XQ Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S7221XR Displaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7221XS Displaced subtrochanteric fracture of right femur, sequela -S7222XA Displaced subtrochanteric fracture of left femur, initial encounter for closed fracture -S7222XB Displaced subtrochanteric fracture of left femur, initial encounter for open fracture type I or II -S7222XC Displaced subtrochanteric fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7222XD Displaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with routine healing -S7222XE Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S7222XF Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7222XG Displaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with delayed healing -S7222XH Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S7222XJ Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7222XK Displaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with nonunion -S7222XM Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S7222XN Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7222XP Displaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with malunion -S7222XQ Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S7222XR Displaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7222XS Displaced subtrochanteric fracture of left femur, sequela -S7223XA Displaced subtrochanteric fracture of unspecified femur, initial encounter for closed fracture -S7223XB Displaced subtrochanteric fracture of unspecified femur, initial encounter for open fracture type I or II -S7223XC Displaced subtrochanteric fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7223XD Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S7223XE Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S7223XF Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7223XG Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S7223XH Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S7223XJ Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7223XK Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S7223XM Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S7223XN Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7223XP Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S7223XQ Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S7223XR Displaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7223XS Displaced subtrochanteric fracture of unspecified femur, sequela -S7224XA Nondisplaced subtrochanteric fracture of right femur, initial encounter for closed fracture -S7224XB Nondisplaced subtrochanteric fracture of right femur, initial encounter for open fracture type I or II -S7224XC Nondisplaced subtrochanteric fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7224XD Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with routine healing -S7224XE Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S7224XF Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7224XG Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with delayed healing -S7224XH Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S7224XJ Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7224XK Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with nonunion -S7224XM Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S7224XN Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7224XP Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for closed fracture with malunion -S7224XQ Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S7224XR Nondisplaced subtrochanteric fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7224XS Nondisplaced subtrochanteric fracture of right femur, sequela -S7225XA Nondisplaced subtrochanteric fracture of left femur, initial encounter for closed fracture -S7225XB Nondisplaced subtrochanteric fracture of left femur, initial encounter for open fracture type I or II -S7225XC Nondisplaced subtrochanteric fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7225XD Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with routine healing -S7225XE Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S7225XF Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7225XG Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with delayed healing -S7225XH Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S7225XJ Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7225XK Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with nonunion -S7225XM Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S7225XN Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7225XP Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for closed fracture with malunion -S7225XQ Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S7225XR Nondisplaced subtrochanteric fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7225XS Nondisplaced subtrochanteric fracture of left femur, sequela -S7226XA Nondisplaced subtrochanteric fracture of unspecified femur, initial encounter for closed fracture -S7226XB Nondisplaced subtrochanteric fracture of unspecified femur, initial encounter for open fracture type I or II -S7226XC Nondisplaced subtrochanteric fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7226XD Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S7226XE Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S7226XF Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7226XG Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S7226XH Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S7226XJ Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7226XK Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S7226XM Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S7226XN Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7226XP Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S7226XQ Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S7226XR Nondisplaced subtrochanteric fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7226XS Nondisplaced subtrochanteric fracture of unspecified femur, sequela -S72301A Unspecified fracture of shaft of right femur, initial encounter for closed fracture -S72301B Unspecified fracture of shaft of right femur, initial encounter for open fracture type I or II -S72301C Unspecified fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72301D Unspecified fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72301E Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72301F Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72301G Unspecified fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72301H Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72301J Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72301K Unspecified fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72301M Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72301N Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72301P Unspecified fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72301Q Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72301R Unspecified fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72301S Unspecified fracture of shaft of right femur, sequela -S72302A Unspecified fracture of shaft of left femur, initial encounter for closed fracture -S72302B Unspecified fracture of shaft of left femur, initial encounter for open fracture type I or II -S72302C Unspecified fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72302D Unspecified fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72302E Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72302F Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72302G Unspecified fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72302H Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72302J Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72302K Unspecified fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72302M Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72302N Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72302P Unspecified fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72302Q Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72302R Unspecified fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72302S Unspecified fracture of shaft of left femur, sequela -S72309A Unspecified fracture of shaft of unspecified femur, initial encounter for closed fracture -S72309B Unspecified fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72309C Unspecified fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72309D Unspecified fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72309E Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72309F Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72309G Unspecified fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72309H Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72309J Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72309K Unspecified fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72309M Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72309N Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72309P Unspecified fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72309Q Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72309R Unspecified fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72309S Unspecified fracture of shaft of unspecified femur, sequela -S72321A Displaced transverse fracture of shaft of right femur, initial encounter for closed fracture -S72321B Displaced transverse fracture of shaft of right femur, initial encounter for open fracture type I or II -S72321C Displaced transverse fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72321D Displaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72321E Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72321F Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72321G Displaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72321H Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72321J Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72321K Displaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72321M Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72321N Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72321P Displaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72321Q Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72321R Displaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72321S Displaced transverse fracture of shaft of right femur, sequela -S72322A Displaced transverse fracture of shaft of left femur, initial encounter for closed fracture -S72322B Displaced transverse fracture of shaft of left femur, initial encounter for open fracture type I or II -S72322C Displaced transverse fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72322D Displaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72322E Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72322F Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72322G Displaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72322H Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72322J Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72322K Displaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72322M Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72322N Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72322P Displaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72322Q Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72322R Displaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72322S Displaced transverse fracture of shaft of left femur, sequela -S72323A Displaced transverse fracture of shaft of unspecified femur, initial encounter for closed fracture -S72323B Displaced transverse fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72323C Displaced transverse fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72323D Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72323E Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72323F Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72323G Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72323H Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72323J Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72323K Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72323M Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72323N Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72323P Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72323Q Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72323R Displaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72323S Displaced transverse fracture of shaft of unspecified femur, sequela -S72324A Nondisplaced transverse fracture of shaft of right femur, initial encounter for closed fracture -S72324B Nondisplaced transverse fracture of shaft of right femur, initial encounter for open fracture type I or II -S72324C Nondisplaced transverse fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72324D Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72324E Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72324F Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72324G Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72324H Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72324J Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72324K Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72324M Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72324N Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72324P Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72324Q Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72324R Nondisplaced transverse fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72324S Nondisplaced transverse fracture of shaft of right femur, sequela -S72325A Nondisplaced transverse fracture of shaft of left femur, initial encounter for closed fracture -S72325B Nondisplaced transverse fracture of shaft of left femur, initial encounter for open fracture type I or II -S72325C Nondisplaced transverse fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72325D Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72325E Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72325F Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72325G Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72325H Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72325J Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72325K Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72325M Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72325N Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72325P Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72325Q Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72325R Nondisplaced transverse fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72325S Nondisplaced transverse fracture of shaft of left femur, sequela -S72326A Nondisplaced transverse fracture of shaft of unspecified femur, initial encounter for closed fracture -S72326B Nondisplaced transverse fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72326C Nondisplaced transverse fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72326D Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72326E Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72326F Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72326G Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72326H Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72326J Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72326K Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72326M Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72326N Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72326P Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72326Q Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72326R Nondisplaced transverse fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72326S Nondisplaced transverse fracture of shaft of unspecified femur, sequela -S72331A Displaced oblique fracture of shaft of right femur, initial encounter for closed fracture -S72331B Displaced oblique fracture of shaft of right femur, initial encounter for open fracture type I or II -S72331C Displaced oblique fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72331D Displaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72331E Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72331F Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72331G Displaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72331H Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72331J Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72331K Displaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72331M Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72331N Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72331P Displaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72331Q Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72331R Displaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72331S Displaced oblique fracture of shaft of right femur, sequela -S72332A Displaced oblique fracture of shaft of left femur, initial encounter for closed fracture -S72332B Displaced oblique fracture of shaft of left femur, initial encounter for open fracture type I or II -S72332C Displaced oblique fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72332D Displaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72332E Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72332F Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72332G Displaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72332H Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72332J Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72332K Displaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72332M Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72332N Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72332P Displaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72332Q Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72332R Displaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72332S Displaced oblique fracture of shaft of left femur, sequela -S72333A Displaced oblique fracture of shaft of unspecified femur, initial encounter for closed fracture -S72333B Displaced oblique fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72333C Displaced oblique fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72333D Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72333E Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72333F Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72333G Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72333H Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72333J Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72333K Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72333M Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72333N Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72333P Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72333Q Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72333R Displaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72333S Displaced oblique fracture of shaft of unspecified femur, sequela -S72334A Nondisplaced oblique fracture of shaft of right femur, initial encounter for closed fracture -S72334B Nondisplaced oblique fracture of shaft of right femur, initial encounter for open fracture type I or II -S72334C Nondisplaced oblique fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72334D Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72334E Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72334F Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72334G Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72334H Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72334J Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72334K Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72334M Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72334N Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72334P Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72334Q Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72334R Nondisplaced oblique fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72334S Nondisplaced oblique fracture of shaft of right femur, sequela -S72335A Nondisplaced oblique fracture of shaft of left femur, initial encounter for closed fracture -S72335B Nondisplaced oblique fracture of shaft of left femur, initial encounter for open fracture type I or II -S72335C Nondisplaced oblique fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72335D Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72335E Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72335F Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72335G Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72335H Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72335J Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72335K Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72335M Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72335N Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72335P Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72335Q Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72335R Nondisplaced oblique fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72335S Nondisplaced oblique fracture of shaft of left femur, sequela -S72336A Nondisplaced oblique fracture of shaft of unspecified femur, initial encounter for closed fracture -S72336B Nondisplaced oblique fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72336C Nondisplaced oblique fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72336D Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72336E Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72336F Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72336G Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72336H Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72336J Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72336K Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72336M Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72336N Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72336P Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72336Q Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72336R Nondisplaced oblique fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72336S Nondisplaced oblique fracture of shaft of unspecified femur, sequela -S72341A Displaced spiral fracture of shaft of right femur, initial encounter for closed fracture -S72341B Displaced spiral fracture of shaft of right femur, initial encounter for open fracture type I or II -S72341C Displaced spiral fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72341D Displaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72341E Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72341F Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72341G Displaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72341H Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72341J Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72341K Displaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72341M Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72341N Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72341P Displaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72341Q Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72341R Displaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72341S Displaced spiral fracture of shaft of right femur, sequela -S72342A Displaced spiral fracture of shaft of left femur, initial encounter for closed fracture -S72342B Displaced spiral fracture of shaft of left femur, initial encounter for open fracture type I or II -S72342C Displaced spiral fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72342D Displaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72342E Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72342F Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72342G Displaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72342H Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72342J Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72342K Displaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72342M Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72342N Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72342P Displaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72342Q Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72342R Displaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72342S Displaced spiral fracture of shaft of left femur, sequela -S72343A Displaced spiral fracture of shaft of unspecified femur, initial encounter for closed fracture -S72343B Displaced spiral fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72343C Displaced spiral fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72343D Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72343E Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72343F Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72343G Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72343H Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72343J Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72343K Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72343M Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72343N Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72343P Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72343Q Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72343R Displaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72343S Displaced spiral fracture of shaft of unspecified femur, sequela -S72344A Nondisplaced spiral fracture of shaft of right femur, initial encounter for closed fracture -S72344B Nondisplaced spiral fracture of shaft of right femur, initial encounter for open fracture type I or II -S72344C Nondisplaced spiral fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72344D Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72344E Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72344F Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72344G Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72344H Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72344J Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72344K Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72344M Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72344N Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72344P Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72344Q Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72344R Nondisplaced spiral fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72344S Nondisplaced spiral fracture of shaft of right femur, sequela -S72345A Nondisplaced spiral fracture of shaft of left femur, initial encounter for closed fracture -S72345B Nondisplaced spiral fracture of shaft of left femur, initial encounter for open fracture type I or II -S72345C Nondisplaced spiral fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72345D Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72345E Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72345F Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72345G Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72345H Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72345J Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72345K Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72345M Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72345N Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72345P Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72345Q Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72345R Nondisplaced spiral fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72345S Nondisplaced spiral fracture of shaft of left femur, sequela -S72346A Nondisplaced spiral fracture of shaft of unspecified femur, initial encounter for closed fracture -S72346B Nondisplaced spiral fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72346C Nondisplaced spiral fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72346D Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72346E Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72346F Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72346G Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72346H Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72346J Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72346K Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72346M Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72346N Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72346P Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72346Q Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72346R Nondisplaced spiral fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72346S Nondisplaced spiral fracture of shaft of unspecified femur, sequela -S72351A Displaced comminuted fracture of shaft of right femur, initial encounter for closed fracture -S72351B Displaced comminuted fracture of shaft of right femur, initial encounter for open fracture type I or II -S72351C Displaced comminuted fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72351D Displaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72351E Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72351F Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72351G Displaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72351H Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72351J Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72351K Displaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72351M Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72351N Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72351P Displaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72351Q Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72351R Displaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72351S Displaced comminuted fracture of shaft of right femur, sequela -S72352A Displaced comminuted fracture of shaft of left femur, initial encounter for closed fracture -S72352B Displaced comminuted fracture of shaft of left femur, initial encounter for open fracture type I or II -S72352C Displaced comminuted fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72352D Displaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72352E Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72352F Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72352G Displaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72352H Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72352J Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72352K Displaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72352M Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72352N Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72352P Displaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72352Q Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72352R Displaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72352S Displaced comminuted fracture of shaft of left femur, sequela -S72353A Displaced comminuted fracture of shaft of unspecified femur, initial encounter for closed fracture -S72353B Displaced comminuted fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72353C Displaced comminuted fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72353D Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72353E Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72353F Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72353G Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72353H Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72353J Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72353K Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72353M Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72353N Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72353P Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72353Q Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72353R Displaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72353S Displaced comminuted fracture of shaft of unspecified femur, sequela -S72354A Nondisplaced comminuted fracture of shaft of right femur, initial encounter for closed fracture -S72354B Nondisplaced comminuted fracture of shaft of right femur, initial encounter for open fracture type I or II -S72354C Nondisplaced comminuted fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72354D Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72354E Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72354F Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72354G Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72354H Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72354J Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72354K Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72354M Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72354N Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72354P Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72354Q Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72354R Nondisplaced comminuted fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72354S Nondisplaced comminuted fracture of shaft of right femur, sequela -S72355A Nondisplaced comminuted fracture of shaft of left femur, initial encounter for closed fracture -S72355B Nondisplaced comminuted fracture of shaft of left femur, initial encounter for open fracture type I or II -S72355C Nondisplaced comminuted fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72355D Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72355E Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72355F Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72355G Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72355H Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72355J Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72355K Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72355M Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72355N Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72355P Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72355Q Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72355R Nondisplaced comminuted fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72355S Nondisplaced comminuted fracture of shaft of left femur, sequela -S72356A Nondisplaced comminuted fracture of shaft of unspecified femur, initial encounter for closed fracture -S72356B Nondisplaced comminuted fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72356C Nondisplaced comminuted fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72356D Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72356E Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72356F Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72356G Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72356H Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72356J Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72356K Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72356M Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72356N Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72356P Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72356Q Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72356R Nondisplaced comminuted fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72356S Nondisplaced comminuted fracture of shaft of unspecified femur, sequela -S72361A Displaced segmental fracture of shaft of right femur, initial encounter for closed fracture -S72361B Displaced segmental fracture of shaft of right femur, initial encounter for open fracture type I or II -S72361C Displaced segmental fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72361D Displaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72361E Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72361F Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72361G Displaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72361H Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72361J Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72361K Displaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72361M Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72361N Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72361P Displaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72361Q Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72361R Displaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72361S Displaced segmental fracture of shaft of right femur, sequela -S72362A Displaced segmental fracture of shaft of left femur, initial encounter for closed fracture -S72362B Displaced segmental fracture of shaft of left femur, initial encounter for open fracture type I or II -S72362C Displaced segmental fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72362D Displaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72362E Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72362F Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72362G Displaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72362H Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72362J Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72362K Displaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72362M Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72362N Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72362P Displaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72362Q Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72362R Displaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72362S Displaced segmental fracture of shaft of left femur, sequela -S72363A Displaced segmental fracture of shaft of unspecified femur, initial encounter for closed fracture -S72363B Displaced segmental fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72363C Displaced segmental fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72363D Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72363E Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72363F Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72363G Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72363H Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72363J Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72363K Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72363M Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72363N Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72363P Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72363Q Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72363R Displaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72363S Displaced segmental fracture of shaft of unspecified femur, sequela -S72364A Nondisplaced segmental fracture of shaft of right femur, initial encounter for closed fracture -S72364B Nondisplaced segmental fracture of shaft of right femur, initial encounter for open fracture type I or II -S72364C Nondisplaced segmental fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72364D Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72364E Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72364F Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72364G Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72364H Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72364J Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72364K Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72364M Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72364N Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72364P Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72364Q Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72364R Nondisplaced segmental fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72364S Nondisplaced segmental fracture of shaft of right femur, sequela -S72365A Nondisplaced segmental fracture of shaft of left femur, initial encounter for closed fracture -S72365B Nondisplaced segmental fracture of shaft of left femur, initial encounter for open fracture type I or II -S72365C Nondisplaced segmental fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72365D Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72365E Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72365F Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72365G Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72365H Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72365J Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72365K Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72365M Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72365N Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72365P Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72365Q Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72365R Nondisplaced segmental fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72365S Nondisplaced segmental fracture of shaft of left femur, sequela -S72366A Nondisplaced segmental fracture of shaft of unspecified femur, initial encounter for closed fracture -S72366B Nondisplaced segmental fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72366C Nondisplaced segmental fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72366D Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72366E Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72366F Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72366G Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72366H Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72366J Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72366K Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72366M Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72366N Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72366P Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72366Q Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72366R Nondisplaced segmental fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72366S Nondisplaced segmental fracture of shaft of unspecified femur, sequela -S72391A Other fracture of shaft of right femur, initial encounter for closed fracture -S72391B Other fracture of shaft of right femur, initial encounter for open fracture type I or II -S72391C Other fracture of shaft of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72391D Other fracture of shaft of right femur, subsequent encounter for closed fracture with routine healing -S72391E Other fracture of shaft of right femur, subsequent encounter for open fracture type I or II with routine healing -S72391F Other fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72391G Other fracture of shaft of right femur, subsequent encounter for closed fracture with delayed healing -S72391H Other fracture of shaft of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72391J Other fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72391K Other fracture of shaft of right femur, subsequent encounter for closed fracture with nonunion -S72391M Other fracture of shaft of right femur, subsequent encounter for open fracture type I or II with nonunion -S72391N Other fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72391P Other fracture of shaft of right femur, subsequent encounter for closed fracture with malunion -S72391Q Other fracture of shaft of right femur, subsequent encounter for open fracture type I or II with malunion -S72391R Other fracture of shaft of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72391S Other fracture of shaft of right femur, sequela -S72392A Other fracture of shaft of left femur, initial encounter for closed fracture -S72392B Other fracture of shaft of left femur, initial encounter for open fracture type I or II -S72392C Other fracture of shaft of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72392D Other fracture of shaft of left femur, subsequent encounter for closed fracture with routine healing -S72392E Other fracture of shaft of left femur, subsequent encounter for open fracture type I or II with routine healing -S72392F Other fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72392G Other fracture of shaft of left femur, subsequent encounter for closed fracture with delayed healing -S72392H Other fracture of shaft of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72392J Other fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72392K Other fracture of shaft of left femur, subsequent encounter for closed fracture with nonunion -S72392M Other fracture of shaft of left femur, subsequent encounter for open fracture type I or II with nonunion -S72392N Other fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72392P Other fracture of shaft of left femur, subsequent encounter for closed fracture with malunion -S72392Q Other fracture of shaft of left femur, subsequent encounter for open fracture type I or II with malunion -S72392R Other fracture of shaft of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72392S Other fracture of shaft of left femur, sequela -S72399A Other fracture of shaft of unspecified femur, initial encounter for closed fracture -S72399B Other fracture of shaft of unspecified femur, initial encounter for open fracture type I or II -S72399C Other fracture of shaft of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72399D Other fracture of shaft of unspecified femur, subsequent encounter for closed fracture with routine healing -S72399E Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72399F Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72399G Other fracture of shaft of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72399H Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72399J Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72399K Other fracture of shaft of unspecified femur, subsequent encounter for closed fracture with nonunion -S72399M Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72399N Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72399P Other fracture of shaft of unspecified femur, subsequent encounter for closed fracture with malunion -S72399Q Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72399R Other fracture of shaft of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72399S Other fracture of shaft of unspecified femur, sequela -S72401A Unspecified fracture of lower end of right femur, initial encounter for closed fracture -S72401B Unspecified fracture of lower end of right femur, initial encounter for open fracture type I or II -S72401C Unspecified fracture of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72401D Unspecified fracture of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72401E Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72401F Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72401G Unspecified fracture of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72401H Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72401J Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72401K Unspecified fracture of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72401M Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72401N Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72401P Unspecified fracture of lower end of right femur, subsequent encounter for closed fracture with malunion -S72401Q Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72401R Unspecified fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72401S Unspecified fracture of lower end of right femur, sequela -S72402A Unspecified fracture of lower end of left femur, initial encounter for closed fracture -S72402B Unspecified fracture of lower end of left femur, initial encounter for open fracture type I or II -S72402C Unspecified fracture of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72402D Unspecified fracture of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72402E Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72402F Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72402G Unspecified fracture of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72402H Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72402J Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72402K Unspecified fracture of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72402M Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72402N Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72402P Unspecified fracture of lower end of left femur, subsequent encounter for closed fracture with malunion -S72402Q Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72402R Unspecified fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72402S Unspecified fracture of lower end of left femur, sequela -S72409A Unspecified fracture of lower end of unspecified femur, initial encounter for closed fracture -S72409B Unspecified fracture of lower end of unspecified femur, initial encounter for open fracture type I or II -S72409C Unspecified fracture of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72409D Unspecified fracture of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72409E Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72409F Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72409G Unspecified fracture of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72409H Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72409J Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72409K Unspecified fracture of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72409M Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72409N Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72409P Unspecified fracture of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72409Q Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72409R Unspecified fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72409S Unspecified fracture of lower end of unspecified femur, sequela -S72411A Displaced unspecified condyle fracture of lower end of right femur, initial encounter for closed fracture -S72411B Displaced unspecified condyle fracture of lower end of right femur, initial encounter for open fracture type I or II -S72411C Displaced unspecified condyle fracture of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72411D Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72411E Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72411F Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72411G Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72411H Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72411J Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72411K Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72411M Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72411N Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72411P Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with malunion -S72411Q Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72411R Displaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72411S Displaced unspecified condyle fracture of lower end of right femur, sequela -S72412A Displaced unspecified condyle fracture of lower end of left femur, initial encounter for closed fracture -S72412B Displaced unspecified condyle fracture of lower end of left femur, initial encounter for open fracture type I or II -S72412C Displaced unspecified condyle fracture of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72412D Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72412E Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72412F Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72412G Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72412H Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72412J Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72412K Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72412M Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72412N Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72412P Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with malunion -S72412Q Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72412R Displaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72412S Displaced unspecified condyle fracture of lower end of left femur, sequela -S72413A Displaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for closed fracture -S72413B Displaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for open fracture type I or II -S72413C Displaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72413D Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72413E Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72413F Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72413G Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72413H Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72413J Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72413K Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72413M Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72413N Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72413P Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72413Q Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72413R Displaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72413S Displaced unspecified condyle fracture of lower end of unspecified femur, sequela -S72414A Nondisplaced unspecified condyle fracture of lower end of right femur, initial encounter for closed fracture -S72414B Nondisplaced unspecified condyle fracture of lower end of right femur, initial encounter for open fracture type I or II -S72414C Nondisplaced unspecified condyle fracture of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72414D Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72414E Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72414F Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72414G Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72414H Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72414J Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72414K Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72414M Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72414N Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72414P Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for closed fracture with malunion -S72414Q Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72414R Nondisplaced unspecified condyle fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72414S Nondisplaced unspecified condyle fracture of lower end of right femur, sequela -S72415A Nondisplaced unspecified condyle fracture of lower end of left femur, initial encounter for closed fracture -S72415B Nondisplaced unspecified condyle fracture of lower end of left femur, initial encounter for open fracture type I or II -S72415C Nondisplaced unspecified condyle fracture of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72415D Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72415E Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72415F Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72415G Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72415H Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72415J Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72415K Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72415M Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72415N Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72415P Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for closed fracture with malunion -S72415Q Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72415R Nondisplaced unspecified condyle fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72415S Nondisplaced unspecified condyle fracture of lower end of left femur, sequela -S72416A Nondisplaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for closed fracture -S72416B Nondisplaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for open fracture type I or II -S72416C Nondisplaced unspecified condyle fracture of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72416D Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72416E Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72416F Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72416G Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72416H Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72416J Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72416K Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72416M Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72416N Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72416P Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72416Q Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72416R Nondisplaced unspecified condyle fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72416S Nondisplaced unspecified condyle fracture of lower end of unspecified femur, sequela -S72421A Displaced fracture of lateral condyle of right femur, initial encounter for closed fracture -S72421B Displaced fracture of lateral condyle of right femur, initial encounter for open fracture type I or II -S72421C Displaced fracture of lateral condyle of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72421D Displaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with routine healing -S72421E Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with routine healing -S72421F Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72421G Displaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with delayed healing -S72421H Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72421J Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72421K Displaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with nonunion -S72421M Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with nonunion -S72421N Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72421P Displaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with malunion -S72421Q Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with malunion -S72421R Displaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72421S Displaced fracture of lateral condyle of right femur, sequela -S72422A Displaced fracture of lateral condyle of left femur, initial encounter for closed fracture -S72422B Displaced fracture of lateral condyle of left femur, initial encounter for open fracture type I or II -S72422C Displaced fracture of lateral condyle of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72422D Displaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with routine healing -S72422E Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with routine healing -S72422F Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72422G Displaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with delayed healing -S72422H Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72422J Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72422K Displaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with nonunion -S72422M Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with nonunion -S72422N Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72422P Displaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with malunion -S72422Q Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with malunion -S72422R Displaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72422S Displaced fracture of lateral condyle of left femur, sequela -S72423A Displaced fracture of lateral condyle of unspecified femur, initial encounter for closed fracture -S72423B Displaced fracture of lateral condyle of unspecified femur, initial encounter for open fracture type I or II -S72423C Displaced fracture of lateral condyle of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72423D Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with routine healing -S72423E Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72423F Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72423G Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72423H Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72423J Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72423K Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with nonunion -S72423M Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72423N Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72423P Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with malunion -S72423Q Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72423R Displaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72423S Displaced fracture of lateral condyle of unspecified femur, sequela -S72424A Nondisplaced fracture of lateral condyle of right femur, initial encounter for closed fracture -S72424B Nondisplaced fracture of lateral condyle of right femur, initial encounter for open fracture type I or II -S72424C Nondisplaced fracture of lateral condyle of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72424D Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with routine healing -S72424E Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with routine healing -S72424F Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72424G Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with delayed healing -S72424H Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72424J Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72424K Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with nonunion -S72424M Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with nonunion -S72424N Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72424P Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for closed fracture with malunion -S72424Q Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type I or II with malunion -S72424R Nondisplaced fracture of lateral condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72424S Nondisplaced fracture of lateral condyle of right femur, sequela -S72425A Nondisplaced fracture of lateral condyle of left femur, initial encounter for closed fracture -S72425B Nondisplaced fracture of lateral condyle of left femur, initial encounter for open fracture type I or II -S72425C Nondisplaced fracture of lateral condyle of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72425D Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with routine healing -S72425E Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with routine healing -S72425F Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72425G Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with delayed healing -S72425H Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72425J Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72425K Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with nonunion -S72425M Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with nonunion -S72425N Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72425P Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for closed fracture with malunion -S72425Q Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type I or II with malunion -S72425R Nondisplaced fracture of lateral condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72425S Nondisplaced fracture of lateral condyle of left femur, sequela -S72426A Nondisplaced fracture of lateral condyle of unspecified femur, initial encounter for closed fracture -S72426B Nondisplaced fracture of lateral condyle of unspecified femur, initial encounter for open fracture type I or II -S72426C Nondisplaced fracture of lateral condyle of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72426D Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with routine healing -S72426E Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72426F Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72426G Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72426H Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72426J Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72426K Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with nonunion -S72426M Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72426N Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72426P Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for closed fracture with malunion -S72426Q Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72426R Nondisplaced fracture of lateral condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72426S Nondisplaced fracture of lateral condyle of unspecified femur, sequela -S72431A Displaced fracture of medial condyle of right femur, initial encounter for closed fracture -S72431B Displaced fracture of medial condyle of right femur, initial encounter for open fracture type I or II -S72431C Displaced fracture of medial condyle of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72431D Displaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with routine healing -S72431E Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with routine healing -S72431F Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72431G Displaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with delayed healing -S72431H Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72431J Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72431K Displaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with nonunion -S72431M Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with nonunion -S72431N Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72431P Displaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with malunion -S72431Q Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with malunion -S72431R Displaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72431S Displaced fracture of medial condyle of right femur, sequela -S72432A Displaced fracture of medial condyle of left femur, initial encounter for closed fracture -S72432B Displaced fracture of medial condyle of left femur, initial encounter for open fracture type I or II -S72432C Displaced fracture of medial condyle of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72432D Displaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with routine healing -S72432E Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with routine healing -S72432F Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72432G Displaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with delayed healing -S72432H Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72432J Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72432K Displaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with nonunion -S72432M Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with nonunion -S72432N Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72432P Displaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with malunion -S72432Q Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with malunion -S72432R Displaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72432S Displaced fracture of medial condyle of left femur, sequela -S72433A Displaced fracture of medial condyle of unspecified femur, initial encounter for closed fracture -S72433B Displaced fracture of medial condyle of unspecified femur, initial encounter for open fracture type I or II -S72433C Displaced fracture of medial condyle of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72433D Displaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with routine healing -S72433E Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72433F Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72433G Displaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72433H Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72433J Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72433K Displaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with nonunion -S72433M Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72433N Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72433P Displaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with malunion -S72433Q Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72433R Displaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72433S Displaced fracture of medial condyle of unspecified femur, sequela -S72434A Nondisplaced fracture of medial condyle of right femur, initial encounter for closed fracture -S72434B Nondisplaced fracture of medial condyle of right femur, initial encounter for open fracture type I or II -S72434C Nondisplaced fracture of medial condyle of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72434D Nondisplaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with routine healing -S72434E Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with routine healing -S72434F Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72434G Nondisplaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with delayed healing -S72434H Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72434J Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72434K Nondisplaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with nonunion -S72434M Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with nonunion -S72434N Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72434P Nondisplaced fracture of medial condyle of right femur, subsequent encounter for closed fracture with malunion -S72434Q Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type I or II with malunion -S72434R Nondisplaced fracture of medial condyle of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72434S Nondisplaced fracture of medial condyle of right femur, sequela -S72435A Nondisplaced fracture of medial condyle of left femur, initial encounter for closed fracture -S72435B Nondisplaced fracture of medial condyle of left femur, initial encounter for open fracture type I or II -S72435C Nondisplaced fracture of medial condyle of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72435D Nondisplaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with routine healing -S72435E Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with routine healing -S72435F Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72435G Nondisplaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with delayed healing -S72435H Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72435J Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72435K Nondisplaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with nonunion -S72435M Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with nonunion -S72435N Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72435P Nondisplaced fracture of medial condyle of left femur, subsequent encounter for closed fracture with malunion -S72435Q Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type I or II with malunion -S72435R Nondisplaced fracture of medial condyle of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72435S Nondisplaced fracture of medial condyle of left femur, sequela -S72436A Nondisplaced fracture of medial condyle of unspecified femur, initial encounter for closed fracture -S72436B Nondisplaced fracture of medial condyle of unspecified femur, initial encounter for open fracture type I or II -S72436C Nondisplaced fracture of medial condyle of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72436D Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with routine healing -S72436E Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72436F Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72436G Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72436H Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72436J Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72436K Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with nonunion -S72436M Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72436N Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72436P Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for closed fracture with malunion -S72436Q Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72436R Nondisplaced fracture of medial condyle of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72436S Nondisplaced fracture of medial condyle of unspecified femur, sequela -S72441A Displaced fracture of lower epiphysis (separation) of right femur, initial encounter for closed fracture -S72441B Displaced fracture of lower epiphysis (separation) of right femur, initial encounter for open fracture type I or II -S72441C Displaced fracture of lower epiphysis (separation) of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72441D Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with routine healing -S72441E Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with routine healing -S72441F Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72441G Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with delayed healing -S72441H Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72441J Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72441K Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with nonunion -S72441M Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with nonunion -S72441N Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72441P Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with malunion -S72441Q Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with malunion -S72441R Displaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72441S Displaced fracture of lower epiphysis (separation) of right femur, sequela -S72442A Displaced fracture of lower epiphysis (separation) of left femur, initial encounter for closed fracture -S72442B Displaced fracture of lower epiphysis (separation) of left femur, initial encounter for open fracture type I or II -S72442C Displaced fracture of lower epiphysis (separation) of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72442D Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with routine healing -S72442E Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with routine healing -S72442F Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72442G Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with delayed healing -S72442H Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72442J Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72442K Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with nonunion -S72442M Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with nonunion -S72442N Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72442P Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with malunion -S72442Q Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with malunion -S72442R Displaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72442S Displaced fracture of lower epiphysis (separation) of left femur, sequela -S72443A Displaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for closed fracture -S72443B Displaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for open fracture type I or II -S72443C Displaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72443D Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with routine healing -S72443E Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72443F Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72443G Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72443H Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72443J Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72443K Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with nonunion -S72443M Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72443N Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72443P Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with malunion -S72443Q Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72443R Displaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72443S Displaced fracture of lower epiphysis (separation) of unspecified femur, sequela -S72444A Nondisplaced fracture of lower epiphysis (separation) of right femur, initial encounter for closed fracture -S72444B Nondisplaced fracture of lower epiphysis (separation) of right femur, initial encounter for open fracture type I or II -S72444C Nondisplaced fracture of lower epiphysis (separation) of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72444D Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with routine healing -S72444E Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with routine healing -S72444F Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72444G Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with delayed healing -S72444H Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72444J Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72444K Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with nonunion -S72444M Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with nonunion -S72444N Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72444P Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for closed fracture with malunion -S72444Q Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type I or II with malunion -S72444R Nondisplaced fracture of lower epiphysis (separation) of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72444S Nondisplaced fracture of lower epiphysis (separation) of right femur, sequela -S72445A Nondisplaced fracture of lower epiphysis (separation) of left femur, initial encounter for closed fracture -S72445B Nondisplaced fracture of lower epiphysis (separation) of left femur, initial encounter for open fracture type I or II -S72445C Nondisplaced fracture of lower epiphysis (separation) of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72445D Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with routine healing -S72445E Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with routine healing -S72445F Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72445G Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with delayed healing -S72445H Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72445J Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72445K Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with nonunion -S72445M Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with nonunion -S72445N Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72445P Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for closed fracture with malunion -S72445Q Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type I or II with malunion -S72445R Nondisplaced fracture of lower epiphysis (separation) of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72445S Nondisplaced fracture of lower epiphysis (separation) of left femur, sequela -S72446A Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for closed fracture -S72446B Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for open fracture type I or II -S72446C Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72446D Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with routine healing -S72446E Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72446F Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72446G Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72446H Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72446J Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72446K Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with nonunion -S72446M Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72446N Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72446P Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for closed fracture with malunion -S72446Q Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72446R Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72446S Nondisplaced fracture of lower epiphysis (separation) of unspecified femur, sequela -S72451A Displaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for closed fracture -S72451B Displaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for open fracture type I or II -S72451C Displaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72451D Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72451E Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72451F Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72451G Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72451H Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72451J Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72451K Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72451M Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72451N Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72451P Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with malunion -S72451Q Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72451R Displaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72451S Displaced supracondylar fracture without intracondylar extension of lower end of right femur, sequela -S72452A Displaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for closed fracture -S72452B Displaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for open fracture type I or II -S72452C Displaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72452D Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72452E Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72452F Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72452G Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72452H Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72452J Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72452K Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72452M Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72452N Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72452P Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with malunion -S72452Q Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72452R Displaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72452S Displaced supracondylar fracture without intracondylar extension of lower end of left femur, sequela -S72453A Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for closed fracture -S72453B Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type I or II -S72453C Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72453D Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72453E Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72453F Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72453G Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72453H Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72453J Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72453K Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72453M Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72453N Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72453P Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72453Q Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72453R Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72453S Displaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, sequela -S72454A Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for closed fracture -S72454B Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for open fracture type I or II -S72454C Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72454D Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72454E Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72454F Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72454G Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72454H Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72454J Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72454K Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72454M Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72454N Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72454P Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with malunion -S72454Q Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72454R Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72454S Nondisplaced supracondylar fracture without intracondylar extension of lower end of right femur, sequela -S72455A Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for closed fracture -S72455B Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for open fracture type I or II -S72455C Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72455D Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72455E Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72455F Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72455G Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72455H Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72455J Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72455K Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72455M Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72455N Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72455P Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with malunion -S72455Q Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72455R Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72455S Nondisplaced supracondylar fracture without intracondylar extension of lower end of left femur, sequela -S72456A Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for closed fracture -S72456B Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type I or II -S72456C Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72456D Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72456E Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72456F Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72456G Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72456H Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72456J Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72456K Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72456M Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72456N Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72456P Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72456Q Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72456R Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72456S Nondisplaced supracondylar fracture without intracondylar extension of lower end of unspecified femur, sequela -S72461A Displaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for closed fracture -S72461B Displaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for open fracture type I or II -S72461C Displaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72461D Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72461E Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72461F Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72461G Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72461H Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72461J Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72461K Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72461M Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72461N Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72461P Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with malunion -S72461Q Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72461R Displaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72461S Displaced supracondylar fracture with intracondylar extension of lower end of right femur, sequela -S72462A Displaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for closed fracture -S72462B Displaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for open fracture type I or II -S72462C Displaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72462D Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72462E Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72462F Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72462G Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72462H Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72462J Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72462K Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72462M Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72462N Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72462P Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with malunion -S72462Q Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72462R Displaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72462S Displaced supracondylar fracture with intracondylar extension of lower end of left femur, sequela -S72463A Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for closed fracture -S72463B Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type I or II -S72463C Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72463D Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72463E Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72463F Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72463G Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72463H Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72463J Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72463K Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72463M Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72463N Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72463P Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72463Q Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72463R Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72463S Displaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, sequela -S72464A Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for closed fracture -S72464B Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for open fracture type I or II -S72464C Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72464D Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72464E Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72464F Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72464G Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72464H Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72464J Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72464K Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72464M Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72464N Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72464P Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for closed fracture with malunion -S72464Q Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72464R Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72464S Nondisplaced supracondylar fracture with intracondylar extension of lower end of right femur, sequela -S72465A Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for closed fracture -S72465B Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for open fracture type I or II -S72465C Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72465D Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72465E Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72465F Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72465G Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72465H Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72465J Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72465K Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72465M Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72465N Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72465P Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for closed fracture with malunion -S72465Q Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72465R Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72465S Nondisplaced supracondylar fracture with intracondylar extension of lower end of left femur, sequela -S72466A Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for closed fracture -S72466B Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type I or II -S72466C Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72466D Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72466E Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72466F Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72466G Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72466H Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72466J Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72466K Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72466M Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72466N Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72466P Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72466Q Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72466R Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72466S Nondisplaced supracondylar fracture with intracondylar extension of lower end of unspecified femur, sequela -S72471A Torus fracture of lower end of right femur, initial encounter for closed fracture -S72471D Torus fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S72471G Torus fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S72471K Torus fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S72471P Torus fracture of lower end of right femur, subsequent encounter for fracture with malunion -S72471S Torus fracture of lower end of right femur, sequela -S72472A Torus fracture of lower end of left femur, initial encounter for closed fracture -S72472D Torus fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S72472G Torus fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S72472K Torus fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S72472P Torus fracture of lower end of left femur, subsequent encounter for fracture with malunion -S72472S Torus fracture of lower end of left femur, sequela -S72479A Torus fracture of lower end of unspecified femur, initial encounter for closed fracture -S72479D Torus fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S72479G Torus fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S72479K Torus fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S72479P Torus fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S72479S Torus fracture of lower end of unspecified femur, sequela -S72491A Other fracture of lower end of right femur, initial encounter for closed fracture -S72491B Other fracture of lower end of right femur, initial encounter for open fracture type I or II -S72491C Other fracture of lower end of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72491D Other fracture of lower end of right femur, subsequent encounter for closed fracture with routine healing -S72491E Other fracture of lower end of right femur, subsequent encounter for open fracture type I or II with routine healing -S72491F Other fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72491G Other fracture of lower end of right femur, subsequent encounter for closed fracture with delayed healing -S72491H Other fracture of lower end of right femur, subsequent encounter for open fracture type I or II with delayed healing -S72491J Other fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72491K Other fracture of lower end of right femur, subsequent encounter for closed fracture with nonunion -S72491M Other fracture of lower end of right femur, subsequent encounter for open fracture type I or II with nonunion -S72491N Other fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72491P Other fracture of lower end of right femur, subsequent encounter for closed fracture with malunion -S72491Q Other fracture of lower end of right femur, subsequent encounter for open fracture type I or II with malunion -S72491R Other fracture of lower end of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72491S Other fracture of lower end of right femur, sequela -S72492A Other fracture of lower end of left femur, initial encounter for closed fracture -S72492B Other fracture of lower end of left femur, initial encounter for open fracture type I or II -S72492C Other fracture of lower end of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72492D Other fracture of lower end of left femur, subsequent encounter for closed fracture with routine healing -S72492E Other fracture of lower end of left femur, subsequent encounter for open fracture type I or II with routine healing -S72492F Other fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72492G Other fracture of lower end of left femur, subsequent encounter for closed fracture with delayed healing -S72492H Other fracture of lower end of left femur, subsequent encounter for open fracture type I or II with delayed healing -S72492J Other fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72492K Other fracture of lower end of left femur, subsequent encounter for closed fracture with nonunion -S72492M Other fracture of lower end of left femur, subsequent encounter for open fracture type I or II with nonunion -S72492N Other fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72492P Other fracture of lower end of left femur, subsequent encounter for closed fracture with malunion -S72492Q Other fracture of lower end of left femur, subsequent encounter for open fracture type I or II with malunion -S72492R Other fracture of lower end of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72492S Other fracture of lower end of left femur, sequela -S72499A Other fracture of lower end of unspecified femur, initial encounter for closed fracture -S72499B Other fracture of lower end of unspecified femur, initial encounter for open fracture type I or II -S72499C Other fracture of lower end of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S72499D Other fracture of lower end of unspecified femur, subsequent encounter for closed fracture with routine healing -S72499E Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S72499F Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S72499G Other fracture of lower end of unspecified femur, subsequent encounter for closed fracture with delayed healing -S72499H Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S72499J Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S72499K Other fracture of lower end of unspecified femur, subsequent encounter for closed fracture with nonunion -S72499M Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S72499N Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S72499P Other fracture of lower end of unspecified femur, subsequent encounter for closed fracture with malunion -S72499Q Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S72499R Other fracture of lower end of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S72499S Other fracture of lower end of unspecified femur, sequela -S728X1A Other fracture of right femur, initial encounter for closed fracture -S728X1B Other fracture of right femur, initial encounter for open fracture type I or II -S728X1C Other fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S728X1D Other fracture of right femur, subsequent encounter for closed fracture with routine healing -S728X1E Other fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S728X1F Other fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S728X1G Other fracture of right femur, subsequent encounter for closed fracture with delayed healing -S728X1H Other fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S728X1J Other fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S728X1K Other fracture of right femur, subsequent encounter for closed fracture with nonunion -S728X1M Other fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S728X1N Other fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S728X1P Other fracture of right femur, subsequent encounter for closed fracture with malunion -S728X1Q Other fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S728X1R Other fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S728X1S Other fracture of right femur, sequela -S728X2A Other fracture of left femur, initial encounter for closed fracture -S728X2B Other fracture of left femur, initial encounter for open fracture type I or II -S728X2C Other fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S728X2D Other fracture of left femur, subsequent encounter for closed fracture with routine healing -S728X2E Other fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S728X2F Other fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S728X2G Other fracture of left femur, subsequent encounter for closed fracture with delayed healing -S728X2H Other fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S728X2J Other fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S728X2K Other fracture of left femur, subsequent encounter for closed fracture with nonunion -S728X2M Other fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S728X2N Other fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S728X2P Other fracture of left femur, subsequent encounter for closed fracture with malunion -S728X2Q Other fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S728X2R Other fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S728X2S Other fracture of left femur, sequela -S728X9A Other fracture of unspecified femur, initial encounter for closed fracture -S728X9B Other fracture of unspecified femur, initial encounter for open fracture type I or II -S728X9C Other fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S728X9D Other fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S728X9E Other fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S728X9F Other fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S728X9G Other fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S728X9H Other fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S728X9J Other fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S728X9K Other fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S728X9M Other fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S728X9N Other fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S728X9P Other fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S728X9Q Other fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S728X9R Other fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S728X9S Other fracture of unspecified femur, sequela -S7290XA Unspecified fracture of unspecified femur, initial encounter for closed fracture -S7290XB Unspecified fracture of unspecified femur, initial encounter for open fracture type I or II -S7290XC Unspecified fracture of unspecified femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7290XD Unspecified fracture of unspecified femur, subsequent encounter for closed fracture with routine healing -S7290XE Unspecified fracture of unspecified femur, subsequent encounter for open fracture type I or II with routine healing -S7290XF Unspecified fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7290XG Unspecified fracture of unspecified femur, subsequent encounter for closed fracture with delayed healing -S7290XH Unspecified fracture of unspecified femur, subsequent encounter for open fracture type I or II with delayed healing -S7290XJ Unspecified fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7290XK Unspecified fracture of unspecified femur, subsequent encounter for closed fracture with nonunion -S7290XM Unspecified fracture of unspecified femur, subsequent encounter for open fracture type I or II with nonunion -S7290XN Unspecified fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7290XP Unspecified fracture of unspecified femur, subsequent encounter for closed fracture with malunion -S7290XQ Unspecified fracture of unspecified femur, subsequent encounter for open fracture type I or II with malunion -S7290XR Unspecified fracture of unspecified femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7290XS Unspecified fracture of unspecified femur, sequela -S7291XA Unspecified fracture of right femur, initial encounter for closed fracture -S7291XB Unspecified fracture of right femur, initial encounter for open fracture type I or II -S7291XC Unspecified fracture of right femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7291XD Unspecified fracture of right femur, subsequent encounter for closed fracture with routine healing -S7291XE Unspecified fracture of right femur, subsequent encounter for open fracture type I or II with routine healing -S7291XF Unspecified fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7291XG Unspecified fracture of right femur, subsequent encounter for closed fracture with delayed healing -S7291XH Unspecified fracture of right femur, subsequent encounter for open fracture type I or II with delayed healing -S7291XJ Unspecified fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7291XK Unspecified fracture of right femur, subsequent encounter for closed fracture with nonunion -S7291XM Unspecified fracture of right femur, subsequent encounter for open fracture type I or II with nonunion -S7291XN Unspecified fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7291XP Unspecified fracture of right femur, subsequent encounter for closed fracture with malunion -S7291XQ Unspecified fracture of right femur, subsequent encounter for open fracture type I or II with malunion -S7291XR Unspecified fracture of right femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7291XS Unspecified fracture of right femur, sequela -S7292XA Unspecified fracture of left femur, initial encounter for closed fracture -S7292XB Unspecified fracture of left femur, initial encounter for open fracture type I or II -S7292XC Unspecified fracture of left femur, initial encounter for open fracture type IIIA, IIIB, or IIIC -S7292XD Unspecified fracture of left femur, subsequent encounter for closed fracture with routine healing -S7292XE Unspecified fracture of left femur, subsequent encounter for open fracture type I or II with routine healing -S7292XF Unspecified fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S7292XG Unspecified fracture of left femur, subsequent encounter for closed fracture with delayed healing -S7292XH Unspecified fracture of left femur, subsequent encounter for open fracture type I or II with delayed healing -S7292XJ Unspecified fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S7292XK Unspecified fracture of left femur, subsequent encounter for closed fracture with nonunion -S7292XM Unspecified fracture of left femur, subsequent encounter for open fracture type I or II with nonunion -S7292XN Unspecified fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S7292XP Unspecified fracture of left femur, subsequent encounter for closed fracture with malunion -S7292XQ Unspecified fracture of left femur, subsequent encounter for open fracture type I or II with malunion -S7292XR Unspecified fracture of left femur, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S7292XS Unspecified fracture of left femur, sequela -S73001A Unspecified subluxation of right hip, initial encounter -S73001D Unspecified subluxation of right hip, subsequent encounter -S73001S Unspecified subluxation of right hip, sequela -S73002A Unspecified subluxation of left hip, initial encounter -S73002D Unspecified subluxation of left hip, subsequent encounter -S73002S Unspecified subluxation of left hip, sequela -S73003A Unspecified subluxation of unspecified hip, initial encounter -S73003D Unspecified subluxation of unspecified hip, subsequent encounter -S73003S Unspecified subluxation of unspecified hip, sequela -S73004A Unspecified dislocation of right hip, initial encounter -S73004D Unspecified dislocation of right hip, subsequent encounter -S73004S Unspecified dislocation of right hip, sequela -S73005A Unspecified dislocation of left hip, initial encounter -S73005D Unspecified dislocation of left hip, subsequent encounter -S73005S Unspecified dislocation of left hip, sequela -S73006A Unspecified dislocation of unspecified hip, initial encounter -S73006D Unspecified dislocation of unspecified hip, subsequent encounter -S73006S Unspecified dislocation of unspecified hip, sequela -S73011A Posterior subluxation of right hip, initial encounter -S73011D Posterior subluxation of right hip, subsequent encounter -S73011S Posterior subluxation of right hip, sequela -S73012A Posterior subluxation of left hip, initial encounter -S73012D Posterior subluxation of left hip, subsequent encounter -S73012S Posterior subluxation of left hip, sequela -S73013A Posterior subluxation of unspecified hip, initial encounter -S73013D Posterior subluxation of unspecified hip, subsequent encounter -S73013S Posterior subluxation of unspecified hip, sequela -S73014A Posterior dislocation of right hip, initial encounter -S73014D Posterior dislocation of right hip, subsequent encounter -S73014S Posterior dislocation of right hip, sequela -S73015A Posterior dislocation of left hip, initial encounter -S73015D Posterior dislocation of left hip, subsequent encounter -S73015S Posterior dislocation of left hip, sequela -S73016A Posterior dislocation of unspecified hip, initial encounter -S73016D Posterior dislocation of unspecified hip, subsequent encounter -S73016S Posterior dislocation of unspecified hip, sequela -S73021A Obturator subluxation of right hip, initial encounter -S73021D Obturator subluxation of right hip, subsequent encounter -S73021S Obturator subluxation of right hip, sequela -S73022A Obturator subluxation of left hip, initial encounter -S73022D Obturator subluxation of left hip, subsequent encounter -S73022S Obturator subluxation of left hip, sequela -S73023A Obturator subluxation of unspecified hip, initial encounter -S73023D Obturator subluxation of unspecified hip, subsequent encounter -S73023S Obturator subluxation of unspecified hip, sequela -S73024A Obturator dislocation of right hip, initial encounter -S73024D Obturator dislocation of right hip, subsequent encounter -S73024S Obturator dislocation of right hip, sequela -S73025A Obturator dislocation of left hip, initial encounter -S73025D Obturator dislocation of left hip, subsequent encounter -S73025S Obturator dislocation of left hip, sequela -S73026A Obturator dislocation of unspecified hip, initial encounter -S73026D Obturator dislocation of unspecified hip, subsequent encounter -S73026S Obturator dislocation of unspecified hip, sequela -S73031A Other anterior subluxation of right hip, initial encounter -S73031D Other anterior subluxation of right hip, subsequent encounter -S73031S Other anterior subluxation of right hip, sequela -S73032A Other anterior subluxation of left hip, initial encounter -S73032D Other anterior subluxation of left hip, subsequent encounter -S73032S Other anterior subluxation of left hip, sequela -S73033A Other anterior subluxation of unspecified hip, initial encounter -S73033D Other anterior subluxation of unspecified hip, subsequent encounter -S73033S Other anterior subluxation of unspecified hip, sequela -S73034A Other anterior dislocation of right hip, initial encounter -S73034D Other anterior dislocation of right hip, subsequent encounter -S73034S Other anterior dislocation of right hip, sequela -S73035A Other anterior dislocation of left hip, initial encounter -S73035D Other anterior dislocation of left hip, subsequent encounter -S73035S Other anterior dislocation of left hip, sequela -S73036A Other anterior dislocation of unspecified hip, initial encounter -S73036D Other anterior dislocation of unspecified hip, subsequent encounter -S73036S Other anterior dislocation of unspecified hip, sequela -S73041A Central subluxation of right hip, initial encounter -S73041D Central subluxation of right hip, subsequent encounter -S73041S Central subluxation of right hip, sequela -S73042A Central subluxation of left hip, initial encounter -S73042D Central subluxation of left hip, subsequent encounter -S73042S Central subluxation of left hip, sequela -S73043A Central subluxation of unspecified hip, initial encounter -S73043D Central subluxation of unspecified hip, subsequent encounter -S73043S Central subluxation of unspecified hip, sequela -S73044A Central dislocation of right hip, initial encounter -S73044D Central dislocation of right hip, subsequent encounter -S73044S Central dislocation of right hip, sequela -S73045A Central dislocation of left hip, initial encounter -S73045D Central dislocation of left hip, subsequent encounter -S73045S Central dislocation of left hip, sequela -S73046A Central dislocation of unspecified hip, initial encounter -S73046D Central dislocation of unspecified hip, subsequent encounter -S73046S Central dislocation of unspecified hip, sequela -S73101A Unspecified sprain of right hip, initial encounter -S73101D Unspecified sprain of right hip, subsequent encounter -S73101S Unspecified sprain of right hip, sequela -S73102A Unspecified sprain of left hip, initial encounter -S73102D Unspecified sprain of left hip, subsequent encounter -S73102S Unspecified sprain of left hip, sequela -S73109A Unspecified sprain of unspecified hip, initial encounter -S73109D Unspecified sprain of unspecified hip, subsequent encounter -S73109S Unspecified sprain of unspecified hip, sequela -S73111A Iliofemoral ligament sprain of right hip, initial encounter -S73111D Iliofemoral ligament sprain of right hip, subsequent encounter -S73111S Iliofemoral ligament sprain of right hip, sequela -S73112A Iliofemoral ligament sprain of left hip, initial encounter -S73112D Iliofemoral ligament sprain of left hip, subsequent encounter -S73112S Iliofemoral ligament sprain of left hip, sequela -S73119A Iliofemoral ligament sprain of unspecified hip, initial encounter -S73119D Iliofemoral ligament sprain of unspecified hip, subsequent encounter -S73119S Iliofemoral ligament sprain of unspecified hip, sequela -S73121A Ischiocapsular ligament sprain of right hip, initial encounter -S73121D Ischiocapsular ligament sprain of right hip, subsequent encounter -S73121S Ischiocapsular ligament sprain of right hip, sequela -S73122A Ischiocapsular ligament sprain of left hip, initial encounter -S73122D Ischiocapsular ligament sprain of left hip, subsequent encounter -S73122S Ischiocapsular ligament sprain of left hip, sequela -S73129A Ischiocapsular ligament sprain of unspecified hip, initial encounter -S73129D Ischiocapsular ligament sprain of unspecified hip, subsequent encounter -S73129S Ischiocapsular ligament sprain of unspecified hip, sequela -S73191A Other sprain of right hip, initial encounter -S73191D Other sprain of right hip, subsequent encounter -S73191S Other sprain of right hip, sequela -S73192A Other sprain of left hip, initial encounter -S73192D Other sprain of left hip, subsequent encounter -S73192S Other sprain of left hip, sequela -S73199A Other sprain of unspecified hip, initial encounter -S73199D Other sprain of unspecified hip, subsequent encounter -S73199S Other sprain of unspecified hip, sequela -S7400XA Injury of sciatic nerve at hip and thigh level, unspecified leg, initial encounter -S7400XD Injury of sciatic nerve at hip and thigh level, unspecified leg, subsequent encounter -S7400XS Injury of sciatic nerve at hip and thigh level, unspecified leg, sequela -S7401XA Injury of sciatic nerve at hip and thigh level, right leg, initial encounter -S7401XD Injury of sciatic nerve at hip and thigh level, right leg, subsequent encounter -S7401XS Injury of sciatic nerve at hip and thigh level, right leg, sequela -S7402XA Injury of sciatic nerve at hip and thigh level, left leg, initial encounter -S7402XD Injury of sciatic nerve at hip and thigh level, left leg, subsequent encounter -S7402XS Injury of sciatic nerve at hip and thigh level, left leg, sequela -S7410XA Injury of femoral nerve at hip and thigh level, unspecified leg, initial encounter -S7410XD Injury of femoral nerve at hip and thigh level, unspecified leg, subsequent encounter -S7410XS Injury of femoral nerve at hip and thigh level, unspecified leg, sequela -S7411XA Injury of femoral nerve at hip and thigh level, right leg, initial encounter -S7411XD Injury of femoral nerve at hip and thigh level, right leg, subsequent encounter -S7411XS Injury of femoral nerve at hip and thigh level, right leg, sequela -S7412XA Injury of femoral nerve at hip and thigh level, left leg, initial encounter -S7412XD Injury of femoral nerve at hip and thigh level, left leg, subsequent encounter -S7412XS Injury of femoral nerve at hip and thigh level, left leg, sequela -S7420XA Injury of cutaneous sensory nerve at hip and thigh level, unspecified leg, initial encounter -S7420XD Injury of cutaneous sensory nerve at hip and thigh level, unspecified leg, subsequent encounter -S7420XS Injury of cutaneous sensory nerve at hip and thigh level, unspecified leg, sequela -S7421XA Injury of cutaneous sensory nerve at hip and high level, right leg, initial encounter -S7421XD Injury of cutaneous sensory nerve at hip and high level, right leg, subsequent encounter -S7421XS Injury of cutaneous sensory nerve at hip and high level, right leg, sequela -S7422XA Injury of cutaneous sensory nerve at hip and thigh level, left leg, initial encounter -S7422XD Injury of cutaneous sensory nerve at hip and thigh level, left leg, subsequent encounter -S7422XS Injury of cutaneous sensory nerve at hip and thigh level, left leg, sequela -S748X1A Injury of other nerves at hip and thigh level, right leg, initial encounter -S748X1D Injury of other nerves at hip and thigh level, right leg, subsequent encounter -S748X1S Injury of other nerves at hip and thigh level, right leg, sequela -S748X2A Injury of other nerves at hip and thigh level, left leg, initial encounter -S748X2D Injury of other nerves at hip and thigh level, left leg, subsequent encounter -S748X2S Injury of other nerves at hip and thigh level, left leg, sequela -S748X9A Injury of other nerves at hip and thigh level, unspecified leg, initial encounter -S748X9D Injury of other nerves at hip and thigh level, unspecified leg, subsequent encounter -S748X9S Injury of other nerves at hip and thigh level, unspecified leg, sequela -S7490XA Injury of unspecified nerve at hip and thigh level, unspecified leg, initial encounter -S7490XD Injury of unspecified nerve at hip and thigh level, unspecified leg, subsequent encounter -S7490XS Injury of unspecified nerve at hip and thigh level, unspecified leg, sequela -S7491XA Injury of unspecified nerve at hip and thigh level, right leg, initial encounter -S7491XD Injury of unspecified nerve at hip and thigh level, right leg, subsequent encounter -S7491XS Injury of unspecified nerve at hip and thigh level, right leg, sequela -S7492XA Injury of unspecified nerve at hip and thigh level, left leg, initial encounter -S7492XD Injury of unspecified nerve at hip and thigh level, left leg, subsequent encounter -S7492XS Injury of unspecified nerve at hip and thigh level, left leg, sequela -S75001A Unspecified injury of femoral artery, right leg, initial encounter -S75001D Unspecified injury of femoral artery, right leg, subsequent encounter -S75001S Unspecified injury of femoral artery, right leg, sequela -S75002A Unspecified injury of femoral artery, left leg, initial encounter -S75002D Unspecified injury of femoral artery, left leg, subsequent encounter -S75002S Unspecified injury of femoral artery, left leg, sequela -S75009A Unspecified injury of femoral artery, unspecified leg, initial encounter -S75009D Unspecified injury of femoral artery, unspecified leg, subsequent encounter -S75009S Unspecified injury of femoral artery, unspecified leg, sequela -S75011A Minor laceration of femoral artery, right leg, initial encounter -S75011D Minor laceration of femoral artery, right leg, subsequent encounter -S75011S Minor laceration of femoral artery, right leg, sequela -S75012A Minor laceration of femoral artery, left leg, initial encounter -S75012D Minor laceration of femoral artery, left leg, subsequent encounter -S75012S Minor laceration of femoral artery, left leg, sequela -S75019A Minor laceration of femoral artery, unspecified leg, initial encounter -S75019D Minor laceration of femoral artery, unspecified leg, subsequent encounter -S75019S Minor laceration of femoral artery, unspecified leg, sequela -S75021A Major laceration of femoral artery, right leg, initial encounter -S75021D Major laceration of femoral artery, right leg, subsequent encounter -S75021S Major laceration of femoral artery, right leg, sequela -S75022A Major laceration of femoral artery, left leg, initial encounter -S75022D Major laceration of femoral artery, left leg, subsequent encounter -S75022S Major laceration of femoral artery, left leg, sequela -S75029A Major laceration of femoral artery, unspecified leg, initial encounter -S75029D Major laceration of femoral artery, unspecified leg, subsequent encounter -S75029S Major laceration of femoral artery, unspecified leg, sequela -S75091A Other specified injury of femoral artery, right leg, initial encounter -S75091D Other specified injury of femoral artery, right leg, subsequent encounter -S75091S Other specified injury of femoral artery, right leg, sequela -S75092A Other specified injury of femoral artery, left leg, initial encounter -S75092D Other specified injury of femoral artery, left leg, subsequent encounter -S75092S Other specified injury of femoral artery, left leg, sequela -S75099A Other specified injury of femoral artery, unspecified leg, initial encounter -S75099D Other specified injury of femoral artery, unspecified leg, subsequent encounter -S75099S Other specified injury of femoral artery, unspecified leg, sequela -S75101A Unspecified injury of femoral vein at hip and thigh level, right leg, initial encounter -S75101D Unspecified injury of femoral vein at hip and thigh level, right leg, subsequent encounter -S75101S Unspecified injury of femoral vein at hip and thigh level, right leg, sequela -S75102A Unspecified injury of femoral vein at hip and thigh level, left leg, initial encounter -S75102D Unspecified injury of femoral vein at hip and thigh level, left leg, subsequent encounter -S75102S Unspecified injury of femoral vein at hip and thigh level, left leg, sequela -S75109A Unspecified injury of femoral vein at hip and thigh level, unspecified leg, initial encounter -S75109D Unspecified injury of femoral vein at hip and thigh level, unspecified leg, subsequent encounter -S75109S Unspecified injury of femoral vein at hip and thigh level, unspecified leg, sequela -S75111A Minor laceration of femoral vein at hip and thigh level, right leg, initial encounter -S75111D Minor laceration of femoral vein at hip and thigh level, right leg, subsequent encounter -S75111S Minor laceration of femoral vein at hip and thigh level, right leg, sequela -S75112A Minor laceration of femoral vein at hip and thigh level, left leg, initial encounter -S75112D Minor laceration of femoral vein at hip and thigh level, left leg, subsequent encounter -S75112S Minor laceration of femoral vein at hip and thigh level, left leg, sequela -S75119A Minor laceration of femoral vein at hip and thigh level, unspecified leg, initial encounter -S75119D Minor laceration of femoral vein at hip and thigh level, unspecified leg, subsequent encounter -S75119S Minor laceration of femoral vein at hip and thigh level, unspecified leg, sequela -S75121A Major laceration of femoral vein at hip and thigh level, right leg, initial encounter -S75121D Major laceration of femoral vein at hip and thigh level, right leg, subsequent encounter -S75121S Major laceration of femoral vein at hip and thigh level, right leg, sequela -S75122A Major laceration of femoral vein at hip and thigh level, left leg, initial encounter -S75122D Major laceration of femoral vein at hip and thigh level, left leg, subsequent encounter -S75122S Major laceration of femoral vein at hip and thigh level, left leg, sequela -S75129A Major laceration of femoral vein at hip and thigh level, unspecified leg, initial encounter -S75129D Major laceration of femoral vein at hip and thigh level, unspecified leg, subsequent encounter -S75129S Major laceration of femoral vein at hip and thigh level, unspecified leg, sequela -S75191A Other specified injury of femoral vein at hip and thigh level, right leg, initial encounter -S75191D Other specified injury of femoral vein at hip and thigh level, right leg, subsequent encounter -S75191S Other specified injury of femoral vein at hip and thigh level, right leg, sequela -S75192A Other specified injury of femoral vein at hip and thigh level, left leg, initial encounter -S75192D Other specified injury of femoral vein at hip and thigh level, left leg, subsequent encounter -S75192S Other specified injury of femoral vein at hip and thigh level, left leg, sequela -S75199A Other specified injury of femoral vein at hip and thigh level, unspecified leg, initial encounter -S75199D Other specified injury of femoral vein at hip and thigh level, unspecified leg, subsequent encounter -S75199S Other specified injury of femoral vein at hip and thigh level, unspecified leg, sequela -S75201A Unspecified injury of greater saphenous vein at hip and thigh level, right leg, initial encounter -S75201D Unspecified injury of greater saphenous vein at hip and thigh level, right leg, subsequent encounter -S75201S Unspecified injury of greater saphenous vein at hip and thigh level, right leg, sequela -S75202A Unspecified injury of greater saphenous vein at hip and thigh level, left leg, initial encounter -S75202D Unspecified injury of greater saphenous vein at hip and thigh level, left leg, subsequent encounter -S75202S Unspecified injury of greater saphenous vein at hip and thigh level, left leg, sequela -S75209A Unspecified injury of greater saphenous vein at hip and thigh level, unspecified leg, initial encounter -S75209D Unspecified injury of greater saphenous vein at hip and thigh level, unspecified leg, subsequent encounter -S75209S Unspecified injury of greater saphenous vein at hip and thigh level, unspecified leg, sequela -S75211A Minor laceration of greater saphenous vein at hip and thigh level, right leg, initial encounter -S75211D Minor laceration of greater saphenous vein at hip and thigh level, right leg, subsequent encounter -S75211S Minor laceration of greater saphenous vein at hip and thigh level, right leg, sequela -S75212A Minor laceration of greater saphenous vein at hip and thigh level, left leg, initial encounter -S75212D Minor laceration of greater saphenous vein at hip and thigh level, left leg, subsequent encounter -S75212S Minor laceration of greater saphenous vein at hip and thigh level, left leg, sequela -S75219A Minor laceration of greater saphenous vein at hip and thigh level, unspecified leg, initial encounter -S75219D Minor laceration of greater saphenous vein at hip and thigh level, unspecified leg, subsequent encounter -S75219S Minor laceration of greater saphenous vein at hip and thigh level, unspecified leg, sequela -S75221A Major laceration of greater saphenous vein at hip and thigh level, right leg, initial encounter -S75221D Major laceration of greater saphenous vein at hip and thigh level, right leg, subsequent encounter -S75221S Major laceration of greater saphenous vein at hip and thigh level, right leg, sequela -S75222A Major laceration of greater saphenous vein at hip and thigh level, left leg, initial encounter -S75222D Major laceration of greater saphenous vein at hip and thigh level, left leg, subsequent encounter -S75222S Major laceration of greater saphenous vein at hip and thigh level, left leg, sequela -S75229A Major laceration of greater saphenous vein at hip and thigh level, unspecified leg, initial encounter -S75229D Major laceration of greater saphenous vein at hip and thigh level, unspecified leg, subsequent encounter -S75229S Major laceration of greater saphenous vein at hip and thigh level, unspecified leg, sequela -S75291A Other specified injury of greater saphenous vein at hip and thigh level, right leg, initial encounter -S75291D Other specified injury of greater saphenous vein at hip and thigh level, right leg, subsequent encounter -S75291S Other specified injury of greater saphenous vein at hip and thigh level, right leg, sequela -S75292A Other specified injury of greater saphenous vein at hip and thigh level, left leg, initial encounter -S75292D Other specified injury of greater saphenous vein at hip and thigh level, left leg, subsequent encounter -S75292S Other specified injury of greater saphenous vein at hip and thigh level, left leg, sequela -S75299A Other specified injury of greater saphenous vein at hip and thigh level, unspecified leg, initial encounter -S75299D Other specified injury of greater saphenous vein at hip and thigh level, unspecified leg, subsequent encounter -S75299S Other specified injury of greater saphenous vein at hip and thigh level, unspecified leg, sequela -S75801A Unspecified injury of other blood vessels at hip and thigh level, right leg, initial encounter -S75801D Unspecified injury of other blood vessels at hip and thigh level, right leg, subsequent encounter -S75801S Unspecified injury of other blood vessels at hip and thigh level, right leg, sequela -S75802A Unspecified injury of other blood vessels at hip and thigh level, left leg, initial encounter -S75802D Unspecified injury of other blood vessels at hip and thigh level, left leg, subsequent encounter -S75802S Unspecified injury of other blood vessels at hip and thigh level, left leg, sequela -S75809A Unspecified injury of other blood vessels at hip and thigh level, unspecified leg, initial encounter -S75809D Unspecified injury of other blood vessels at hip and thigh level, unspecified leg, subsequent encounter -S75809S Unspecified injury of other blood vessels at hip and thigh level, unspecified leg, sequela -S75811A Laceration of other blood vessels at hip and thigh level, right leg, initial encounter -S75811D Laceration of other blood vessels at hip and thigh level, right leg, subsequent encounter -S75811S Laceration of other blood vessels at hip and thigh level, right leg, sequela -S75812A Laceration of other blood vessels at hip and thigh level, left leg, initial encounter -S75812D Laceration of other blood vessels at hip and thigh level, left leg, subsequent encounter -S75812S Laceration of other blood vessels at hip and thigh level, left leg, sequela -S75819A Laceration of other blood vessels at hip and thigh level, unspecified leg, initial encounter -S75819D Laceration of other blood vessels at hip and thigh level, unspecified leg, subsequent encounter -S75819S Laceration of other blood vessels at hip and thigh level, unspecified leg, sequela -S75891A Other specified injury of other blood vessels at hip and thigh level, right leg, initial encounter -S75891D Other specified injury of other blood vessels at hip and thigh level, right leg, subsequent encounter -S75891S Other specified injury of other blood vessels at hip and thigh level, right leg, sequela -S75892A Other specified injury of other blood vessels at hip and thigh level, left leg, initial encounter -S75892D Other specified injury of other blood vessels at hip and thigh level, left leg, subsequent encounter -S75892S Other specified injury of other blood vessels at hip and thigh level, left leg, sequela -S75899A Other specified injury of other blood vessels at hip and thigh level, unspecified leg, initial encounter -S75899D Other specified injury of other blood vessels at hip and thigh level, unspecified leg, subsequent encounter -S75899S Other specified injury of other blood vessels at hip and thigh level, unspecified leg, sequela -S75901A Unspecified injury of unspecified blood vessel at hip and thigh level, right leg, initial encounter -S75901D Unspecified injury of unspecified blood vessel at hip and thigh level, right leg, subsequent encounter -S75901S Unspecified injury of unspecified blood vessel at hip and thigh level, right leg, sequela -S75902A Unspecified injury of unspecified blood vessel at hip and thigh level, left leg, initial encounter -S75902D Unspecified injury of unspecified blood vessel at hip and thigh level, left leg, subsequent encounter -S75902S Unspecified injury of unspecified blood vessel at hip and thigh level, left leg, sequela -S75909A Unspecified injury of unspecified blood vessel at hip and thigh level, unspecified leg, initial encounter -S75909D Unspecified injury of unspecified blood vessel at hip and thigh level, unspecified leg, subsequent encounter -S75909S Unspecified injury of unspecified blood vessel at hip and thigh level, unspecified leg, sequela -S75911A Laceration of unspecified blood vessel at hip and thigh level, right leg, initial encounter -S75911D Laceration of unspecified blood vessel at hip and thigh level, right leg, subsequent encounter -S75911S Laceration of unspecified blood vessel at hip and thigh level, right leg, sequela -S75912A Laceration of unspecified blood vessel at hip and thigh level, left leg, initial encounter -S75912D Laceration of unspecified blood vessel at hip and thigh level, left leg, subsequent encounter -S75912S Laceration of unspecified blood vessel at hip and thigh level, left leg, sequela -S75919A Laceration of unspecified blood vessel at hip and thigh level, unspecified leg, initial encounter -S75919D Laceration of unspecified blood vessel at hip and thigh level, unspecified leg, subsequent encounter -S75919S Laceration of unspecified blood vessel at hip and thigh level, unspecified leg, sequela -S75991A Other specified injury of unspecified blood vessel at hip and thigh level, right leg, initial encounter -S75991D Other specified injury of unspecified blood vessel at hip and thigh level, right leg, subsequent encounter -S75991S Other specified injury of unspecified blood vessel at hip and thigh level, right leg, sequela -S75992A Other specified injury of unspecified blood vessel at hip and thigh level, left leg, initial encounter -S75992D Other specified injury of unspecified blood vessel at hip and thigh level, left leg, subsequent encounter -S75992S Other specified injury of unspecified blood vessel at hip and thigh level, left leg, sequela -S75999A Other specified injury of unspecified blood vessel at hip and thigh level, unspecified leg, initial encounter -S75999D Other specified injury of unspecified blood vessel at hip and thigh level, unspecified leg, subsequent encounter -S75999S Other specified injury of unspecified blood vessel at hip and thigh level, unspecified leg, sequela -S76001A Unspecified injury of muscle, fascia and tendon of right hip, initial encounter -S76001D Unspecified injury of muscle, fascia and tendon of right hip, subsequent encounter -S76001S Unspecified injury of muscle, fascia and tendon of right hip, sequela -S76002A Unspecified injury of muscle, fascia and tendon of left hip, initial encounter -S76002D Unspecified injury of muscle, fascia and tendon of left hip, subsequent encounter -S76002S Unspecified injury of muscle, fascia and tendon of left hip, sequela -S76009A Unspecified injury of muscle, fascia and tendon of unspecified hip, initial encounter -S76009D Unspecified injury of muscle, fascia and tendon of unspecified hip, subsequent encounter -S76009S Unspecified injury of muscle, fascia and tendon of unspecified hip, sequela -S76011A Strain of muscle, fascia and tendon of right hip, initial encounter -S76011D Strain of muscle, fascia and tendon of right hip, subsequent encounter -S76011S Strain of muscle, fascia and tendon of right hip, sequela -S76012A Strain of muscle, fascia and tendon of left hip, initial encounter -S76012D Strain of muscle, fascia and tendon of left hip, subsequent encounter -S76012S Strain of muscle, fascia and tendon of left hip, sequela -S76019A Strain of muscle, fascia and tendon of unspecified hip, initial encounter -S76019D Strain of muscle, fascia and tendon of unspecified hip, subsequent encounter -S76019S Strain of muscle, fascia and tendon of unspecified hip, sequela -S76021A Laceration of muscle, fascia and tendon of right hip, initial encounter -S76021D Laceration of muscle, fascia and tendon of right hip, subsequent encounter -S76021S Laceration of muscle, fascia and tendon of right hip, sequela -S76022A Laceration of muscle, fascia and tendon of left hip, initial encounter -S76022D Laceration of muscle, fascia and tendon of left hip, subsequent encounter -S76022S Laceration of muscle, fascia and tendon of left hip, sequela -S76029A Laceration of muscle, fascia and tendon of unspecified hip, initial encounter -S76029D Laceration of muscle, fascia and tendon of unspecified hip, subsequent encounter -S76029S Laceration of muscle, fascia and tendon of unspecified hip, sequela -S76091A Other specified injury of muscle, fascia and tendon of right hip, initial encounter -S76091D Other specified injury of muscle, fascia and tendon of right hip, subsequent encounter -S76091S Other specified injury of muscle, fascia and tendon of right hip, sequela -S76092A Other specified injury of muscle, fascia and tendon of left hip, initial encounter -S76092D Other specified injury of muscle, fascia and tendon of left hip, subsequent encounter -S76092S Other specified injury of muscle, fascia and tendon of left hip, sequela -S76099A Other specified injury of muscle, fascia and tendon of unspecified hip, initial encounter -S76099D Other specified injury of muscle, fascia and tendon of unspecified hip, subsequent encounter -S76099S Other specified injury of muscle, fascia and tendon of unspecified hip, sequela -S76101A Unspecified injury of right quadriceps muscle, fascia and tendon, initial encounter -S76101D Unspecified injury of right quadriceps muscle, fascia and tendon, subsequent encounter -S76101S Unspecified injury of right quadriceps muscle, fascia and tendon, sequela -S76102A Unspecified injury of left quadriceps muscle, fascia and tendon, initial encounter -S76102D Unspecified injury of left quadriceps muscle, fascia and tendon, subsequent encounter -S76102S Unspecified injury of left quadriceps muscle, fascia and tendon, sequela -S76109A Unspecified injury of unspecified quadriceps muscle, fascia and tendon, initial encounter -S76109D Unspecified injury of unspecified quadriceps muscle, fascia and tendon, subsequent encounter -S76109S Unspecified injury of unspecified quadriceps muscle, fascia and tendon, sequela -S76111A Strain of right quadriceps muscle, fascia and tendon, initial encounter -S76111D Strain of right quadriceps muscle, fascia and tendon, subsequent encounter -S76111S Strain of right quadriceps muscle, fascia and tendon, sequela -S76112A Strain of left quadriceps muscle, fascia and tendon, initial encounter -S76112D Strain of left quadriceps muscle, fascia and tendon, subsequent encounter -S76112S Strain of left quadriceps muscle, fascia and tendon, sequela -S76119A Strain of unspecified quadriceps muscle, fascia and tendon, initial encounter -S76119D Strain of unspecified quadriceps muscle, fascia and tendon, subsequent encounter -S76119S Strain of unspecified quadriceps muscle, fascia and tendon, sequela -S76121A Laceration of right quadriceps muscle, fascia and tendon, initial encounter -S76121D Laceration of right quadriceps muscle, fascia and tendon, subsequent encounter -S76121S Laceration of right quadriceps muscle, fascia and tendon, sequela -S76122A Laceration of left quadriceps muscle, fascia and tendon, initial encounter -S76122D Laceration of left quadriceps muscle, fascia and tendon, subsequent encounter -S76122S Laceration of left quadriceps muscle, fascia and tendon, sequela -S76129A Laceration of unspecified quadriceps muscle, fascia and tendon, initial encounter -S76129D Laceration of unspecified quadriceps muscle, fascia and tendon, subsequent encounter -S76129S Laceration of unspecified quadriceps muscle, fascia and tendon, sequela -S76191A Other specified injury of right quadriceps muscle, fascia and tendon, initial encounter -S76191D Other specified injury of right quadriceps muscle, fascia and tendon, subsequent encounter -S76191S Other specified injury of right quadriceps muscle, fascia and tendon, sequela -S76192A Other specified injury of left quadriceps muscle, fascia and tendon, initial encounter -S76192D Other specified injury of left quadriceps muscle, fascia and tendon, subsequent encounter -S76192S Other specified injury of left quadriceps muscle, fascia and tendon, sequela -S76199A Other specified injury of unspecified quadriceps muscle, fascia and tendon, initial encounter -S76199D Other specified injury of unspecified quadriceps muscle, fascia and tendon, subsequent encounter -S76199S Other specified injury of unspecified quadriceps muscle, fascia and tendon, sequela -S76201A Unspecified injury of adductor muscle, fascia and tendon of right thigh, initial encounter -S76201D Unspecified injury of adductor muscle, fascia and tendon of right thigh, subsequent encounter -S76201S Unspecified injury of adductor muscle, fascia and tendon of right thigh, sequela -S76202A Unspecified injury of adductor muscle, fascia and tendon of left thigh, initial encounter -S76202D Unspecified injury of adductor muscle, fascia and tendon of left thigh, subsequent encounter -S76202S Unspecified injury of adductor muscle, fascia and tendon of left thigh, sequela -S76209A Unspecified injury of adductor muscle, fascia and tendon of unspecified thigh, initial encounter -S76209D Unspecified injury of adductor muscle, fascia and tendon of unspecified thigh, subsequent encounter -S76209S Unspecified injury of adductor muscle, fascia and tendon of unspecified thigh, sequela -S76211A Strain of adductor muscle, fascia and tendon of right thigh, initial encounter -S76211D Strain of adductor muscle, fascia and tendon of right thigh, subsequent encounter -S76211S Strain of adductor muscle, fascia and tendon of right thigh, sequela -S76212A Strain of adductor muscle, fascia and tendon of left thigh, initial encounter -S76212D Strain of adductor muscle, fascia and tendon of left thigh, subsequent encounter -S76212S Strain of adductor muscle, fascia and tendon of left thigh, sequela -S76219A Strain of adductor muscle, fascia and tendon of unspecified thigh, initial encounter -S76219D Strain of adductor muscle, fascia and tendon of unspecified thigh, subsequent encounter -S76219S Strain of adductor muscle, fascia and tendon of unspecified thigh, sequela -S76221A Laceration of adductor muscle, fascia and tendon of right thigh, initial encounter -S76221D Laceration of adductor muscle, fascia and tendon of right thigh, subsequent encounter -S76221S Laceration of adductor muscle, fascia and tendon of right thigh, sequela -S76222A Laceration of adductor muscle, fascia and tendon of left thigh, initial encounter -S76222D Laceration of adductor muscle, fascia and tendon of left thigh, subsequent encounter -S76222S Laceration of adductor muscle, fascia and tendon of left thigh, sequela -S76229A Laceration of adductor muscle, fascia and tendon of unspecified thigh, initial encounter -S76229D Laceration of adductor muscle, fascia and tendon of unspecified thigh, subsequent encounter -S76229S Laceration of adductor muscle, fascia and tendon of unspecified thigh, sequela -S76291A Other injury of adductor muscle, fascia and tendon of right thigh, initial encounter -S76291D Other injury of adductor muscle, fascia and tendon of right thigh, subsequent encounter -S76291S Other injury of adductor muscle, fascia and tendon of right thigh, sequela -S76292A Other injury of adductor muscle, fascia and tendon of left thigh, initial encounter -S76292D Other injury of adductor muscle, fascia and tendon of left thigh, subsequent encounter -S76292S Other injury of adductor muscle, fascia and tendon of left thigh, sequela -S76299A Other injury of adductor muscle, fascia and tendon of unspecified thigh, initial encounter -S76299D Other injury of adductor muscle, fascia and tendon of unspecified thigh, subsequent encounter -S76299S Other injury of adductor muscle, fascia and tendon of unspecified thigh, sequela -S76301A Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, initial encounter -S76301D Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, subsequent encounter -S76301S Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, sequela -S76302A Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, initial encounter -S76302D Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, subsequent encounter -S76302S Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, sequela -S76309A Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, initial encounter -S76309D Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, subsequent encounter -S76309S Unspecified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, sequela -S76311A Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, initial encounter -S76311D Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, subsequent encounter -S76311S Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, sequela -S76312A Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, initial encounter -S76312D Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, subsequent encounter -S76312S Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, sequela -S76319A Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, initial encounter -S76319D Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, subsequent encounter -S76319S Strain of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, sequela -S76321A Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, initial encounter -S76321D Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, subsequent encounter -S76321S Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, sequela -S76322A Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, initial encounter -S76322D Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, subsequent encounter -S76322S Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, sequela -S76329A Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, initial encounter -S76329D Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, subsequent encounter -S76329S Laceration of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, sequela -S76391A Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, initial encounter -S76391D Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, subsequent encounter -S76391S Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, right thigh, sequela -S76392A Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, initial encounter -S76392D Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, subsequent encounter -S76392S Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, left thigh, sequela -S76399A Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, initial encounter -S76399D Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, subsequent encounter -S76399S Other specified injury of muscle, fascia and tendon of the posterior muscle group at thigh level, unspecified thigh, sequela -S76801A Unspecified injury of other specified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76801D Unspecified injury of other specified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76801S Unspecified injury of other specified muscles, fascia and tendons at thigh level, right thigh, sequela -S76802A Unspecified injury of other specified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76802D Unspecified injury of other specified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76802S Unspecified injury of other specified muscles, fascia and tendons at thigh level, left thigh, sequela -S76809A Unspecified injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76809D Unspecified injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76809S Unspecified injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76811A Strain of other specified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76811D Strain of other specified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76811S Strain of other specified muscles, fascia and tendons at thigh level, right thigh, sequela -S76812A Strain of other specified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76812D Strain of other specified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76812S Strain of other specified muscles, fascia and tendons at thigh level, left thigh, sequela -S76819A Strain of other specified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76819D Strain of other specified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76819S Strain of other specified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76821A Laceration of other specified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76821D Laceration of other specified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76821S Laceration of other specified muscles, fascia and tendons at thigh level, right thigh, sequela -S76822A Laceration of other specified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76822D Laceration of other specified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76822S Laceration of other specified muscles, fascia and tendons at thigh level, left thigh, sequela -S76829A Laceration of other specified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76829D Laceration of other specified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76829S Laceration of other specified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76891A Other injury of other specified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76891D Other injury of other specified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76891S Other injury of other specified muscles, fascia and tendons at thigh level, right thigh, sequela -S76892A Other injury of other specified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76892D Other injury of other specified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76892S Other injury of other specified muscles, fascia and tendons at thigh level, left thigh, sequela -S76899A Other injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76899D Other injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76899S Other injury of other specified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76901A Unspecified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76901D Unspecified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76901S Unspecified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, sequela -S76902A Unspecified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76902D Unspecified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76902S Unspecified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, sequela -S76909A Unspecified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76909D Unspecified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76909S Unspecified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76911A Strain of unspecified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76911D Strain of unspecified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76911S Strain of unspecified muscles, fascia and tendons at thigh level, right thigh, sequela -S76912A Strain of unspecified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76912D Strain of unspecified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76912S Strain of unspecified muscles, fascia and tendons at thigh level, left thigh, sequela -S76919A Strain of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76919D Strain of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76919S Strain of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76921A Laceration of unspecified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76921D Laceration of unspecified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76921S Laceration of unspecified muscles, fascia and tendons at thigh level, right thigh, sequela -S76922A Laceration of unspecified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76922D Laceration of unspecified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76922S Laceration of unspecified muscles, fascia and tendons at thigh level, left thigh, sequela -S76929A Laceration of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76929D Laceration of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76929S Laceration of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S76991A Other specified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, initial encounter -S76991D Other specified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, subsequent encounter -S76991S Other specified injury of unspecified muscles, fascia and tendons at thigh level, right thigh, sequela -S76992A Other specified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, initial encounter -S76992D Other specified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, subsequent encounter -S76992S Other specified injury of unspecified muscles, fascia and tendons at thigh level, left thigh, sequela -S76999A Other specified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, initial encounter -S76999D Other specified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, subsequent encounter -S76999S Other specified injury of unspecified muscles, fascia and tendons at thigh level, unspecified thigh, sequela -S7700XA Crushing injury of unspecified hip, initial encounter -S7700XD Crushing injury of unspecified hip, subsequent encounter -S7700XS Crushing injury of unspecified hip, sequela -S7701XA Crushing injury of right hip, initial encounter -S7701XD Crushing injury of right hip, subsequent encounter -S7701XS Crushing injury of right hip, sequela -S7702XA Crushing injury of left hip, initial encounter -S7702XD Crushing injury of left hip, subsequent encounter -S7702XS Crushing injury of left hip, sequela -S7710XA Crushing injury of unspecified thigh, initial encounter -S7710XD Crushing injury of unspecified thigh, subsequent encounter -S7710XS Crushing injury of unspecified thigh, sequela -S7711XA Crushing injury of right thigh, initial encounter -S7711XD Crushing injury of right thigh, subsequent encounter -S7711XS Crushing injury of right thigh, sequela -S7712XA Crushing injury of left thigh, initial encounter -S7712XD Crushing injury of left thigh, subsequent encounter -S7712XS Crushing injury of left thigh, sequela -S7720XA Crushing injury of unspecified hip with thigh, initial encounter -S7720XD Crushing injury of unspecified hip with thigh, subsequent encounter -S7720XS Crushing injury of unspecified hip with thigh, sequela -S7721XA Crushing injury of right hip with thigh, initial encounter -S7721XD Crushing injury of right hip with thigh, subsequent encounter -S7721XS Crushing injury of right hip with thigh, sequela -S7722XA Crushing injury of left hip with thigh, initial encounter -S7722XD Crushing injury of left hip with thigh, subsequent encounter -S7722XS Crushing injury of left hip with thigh, sequela -S78011A Complete traumatic amputation at right hip joint, initial encounter -S78011D Complete traumatic amputation at right hip joint, subsequent encounter -S78011S Complete traumatic amputation at right hip joint, sequela -S78012A Complete traumatic amputation at left hip joint, initial encounter -S78012D Complete traumatic amputation at left hip joint, subsequent encounter -S78012S Complete traumatic amputation at left hip joint, sequela -S78019A Complete traumatic amputation at unspecified hip joint, initial encounter -S78019D Complete traumatic amputation at unspecified hip joint, subsequent encounter -S78019S Complete traumatic amputation at unspecified hip joint, sequela -S78021A Partial traumatic amputation at right hip joint, initial encounter -S78021D Partial traumatic amputation at right hip joint, subsequent encounter -S78021S Partial traumatic amputation at right hip joint, sequela -S78022A Partial traumatic amputation at left hip joint, initial encounter -S78022D Partial traumatic amputation at left hip joint, subsequent encounter -S78022S Partial traumatic amputation at left hip joint, sequela -S78029A Partial traumatic amputation at unspecified hip joint, initial encounter -S78029D Partial traumatic amputation at unspecified hip joint, subsequent encounter -S78029S Partial traumatic amputation at unspecified hip joint, sequela -S78111A Complete traumatic amputation at level between right hip and knee, initial encounter -S78111D Complete traumatic amputation at level between right hip and knee, subsequent encounter -S78111S Complete traumatic amputation at level between right hip and knee, sequela -S78112A Complete traumatic amputation at level between left hip and knee, initial encounter -S78112D Complete traumatic amputation at level between left hip and knee, subsequent encounter -S78112S Complete traumatic amputation at level between left hip and knee, sequela -S78119A Complete traumatic amputation at level between unspecified hip and knee, initial encounter -S78119D Complete traumatic amputation at level between unspecified hip and knee, subsequent encounter -S78119S Complete traumatic amputation at level between unspecified hip and knee, sequela -S78121A Partial traumatic amputation at level between right hip and knee, initial encounter -S78121D Partial traumatic amputation at level between right hip and knee, subsequent encounter -S78121S Partial traumatic amputation at level between right hip and knee, sequela -S78122A Partial traumatic amputation at level between left hip and knee, initial encounter -S78122D Partial traumatic amputation at level between left hip and knee, subsequent encounter -S78122S Partial traumatic amputation at level between left hip and knee, sequela -S78129A Partial traumatic amputation at level between unspecified hip and knee, initial encounter -S78129D Partial traumatic amputation at level between unspecified hip and knee, subsequent encounter -S78129S Partial traumatic amputation at level between unspecified hip and knee, sequela -S78911A Complete traumatic amputation of right hip and thigh, level unspecified, initial encounter -S78911D Complete traumatic amputation of right hip and thigh, level unspecified, subsequent encounter -S78911S Complete traumatic amputation of right hip and thigh, level unspecified, sequela -S78912A Complete traumatic amputation of left hip and thigh, level unspecified, initial encounter -S78912D Complete traumatic amputation of left hip and thigh, level unspecified, subsequent encounter -S78912S Complete traumatic amputation of left hip and thigh, level unspecified, sequela -S78919A Complete traumatic amputation of unspecified hip and thigh, level unspecified, initial encounter -S78919D Complete traumatic amputation of unspecified hip and thigh, level unspecified, subsequent encounter -S78919S Complete traumatic amputation of unspecified hip and thigh, level unspecified, sequela -S78921A Partial traumatic amputation of right hip and thigh, level unspecified, initial encounter -S78921D Partial traumatic amputation of right hip and thigh, level unspecified, subsequent encounter -S78921S Partial traumatic amputation of right hip and thigh, level unspecified, sequela -S78922A Partial traumatic amputation of left hip and thigh, level unspecified, initial encounter -S78922D Partial traumatic amputation of left hip and thigh, level unspecified, subsequent encounter -S78922S Partial traumatic amputation of left hip and thigh, level unspecified, sequela -S78929A Partial traumatic amputation of unspecified hip and thigh, level unspecified, initial encounter -S78929D Partial traumatic amputation of unspecified hip and thigh, level unspecified, subsequent encounter -S78929S Partial traumatic amputation of unspecified hip and thigh, level unspecified, sequela -S79001A Unspecified physeal fracture of upper end of right femur, initial encounter for closed fracture -S79001D Unspecified physeal fracture of upper end of right femur, subsequent encounter for fracture with routine healing -S79001G Unspecified physeal fracture of upper end of right femur, subsequent encounter for fracture with delayed healing -S79001K Unspecified physeal fracture of upper end of right femur, subsequent encounter for fracture with nonunion -S79001P Unspecified physeal fracture of upper end of right femur, subsequent encounter for fracture with malunion -S79001S Unspecified physeal fracture of upper end of right femur, sequela -S79002A Unspecified physeal fracture of upper end of left femur, initial encounter for closed fracture -S79002D Unspecified physeal fracture of upper end of left femur, subsequent encounter for fracture with routine healing -S79002G Unspecified physeal fracture of upper end of left femur, subsequent encounter for fracture with delayed healing -S79002K Unspecified physeal fracture of upper end of left femur, subsequent encounter for fracture with nonunion -S79002P Unspecified physeal fracture of upper end of left femur, subsequent encounter for fracture with malunion -S79002S Unspecified physeal fracture of upper end of left femur, sequela -S79009A Unspecified physeal fracture of upper end of unspecified femur, initial encounter for closed fracture -S79009D Unspecified physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with routine healing -S79009G Unspecified physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with delayed healing -S79009K Unspecified physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with nonunion -S79009P Unspecified physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with malunion -S79009S Unspecified physeal fracture of upper end of unspecified femur, sequela -S79011A Salter-Harris Type I physeal fracture of upper end of right femur, initial encounter for closed fracture -S79011D Salter-Harris Type I physeal fracture of upper end of right femur, subsequent encounter for fracture with routine healing -S79011G Salter-Harris Type I physeal fracture of upper end of right femur, subsequent encounter for fracture with delayed healing -S79011K Salter-Harris Type I physeal fracture of upper end of right femur, subsequent encounter for fracture with nonunion -S79011P Salter-Harris Type I physeal fracture of upper end of right femur, subsequent encounter for fracture with malunion -S79011S Salter-Harris Type I physeal fracture of upper end of right femur, sequela -S79012A Salter-Harris Type I physeal fracture of upper end of left femur, initial encounter for closed fracture -S79012D Salter-Harris Type I physeal fracture of upper end of left femur, subsequent encounter for fracture with routine healing -S79012G Salter-Harris Type I physeal fracture of upper end of left femur, subsequent encounter for fracture with delayed healing -S79012K Salter-Harris Type I physeal fracture of upper end of left femur, subsequent encounter for fracture with nonunion -S79012P Salter-Harris Type I physeal fracture of upper end of left femur, subsequent encounter for fracture with malunion -S79012S Salter-Harris Type I physeal fracture of upper end of left femur, sequela -S79019A Salter-Harris Type I physeal fracture of upper end of unspecified femur, initial encounter for closed fracture -S79019D Salter-Harris Type I physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with routine healing -S79019G Salter-Harris Type I physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with delayed healing -S79019K Salter-Harris Type I physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with nonunion -S79019P Salter-Harris Type I physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with malunion -S79019S Salter-Harris Type I physeal fracture of upper end of unspecified femur, sequela -S79091A Other physeal fracture of upper end of right femur, initial encounter for closed fracture -S79091D Other physeal fracture of upper end of right femur, subsequent encounter for fracture with routine healing -S79091G Other physeal fracture of upper end of right femur, subsequent encounter for fracture with delayed healing -S79091K Other physeal fracture of upper end of right femur, subsequent encounter for fracture with nonunion -S79091P Other physeal fracture of upper end of right femur, subsequent encounter for fracture with malunion -S79091S Other physeal fracture of upper end of right femur, sequela -S79092A Other physeal fracture of upper end of left femur, initial encounter for closed fracture -S79092D Other physeal fracture of upper end of left femur, subsequent encounter for fracture with routine healing -S79092G Other physeal fracture of upper end of left femur, subsequent encounter for fracture with delayed healing -S79092K Other physeal fracture of upper end of left femur, subsequent encounter for fracture with nonunion -S79092P Other physeal fracture of upper end of left femur, subsequent encounter for fracture with malunion -S79092S Other physeal fracture of upper end of left femur, sequela -S79099A Other physeal fracture of upper end of unspecified femur, initial encounter for closed fracture -S79099D Other physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with routine healing -S79099G Other physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with delayed healing -S79099K Other physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with nonunion -S79099P Other physeal fracture of upper end of unspecified femur, subsequent encounter for fracture with malunion -S79099S Other physeal fracture of upper end of unspecified femur, sequela -S79101A Unspecified physeal fracture of lower end of right femur, initial encounter for closed fracture -S79101D Unspecified physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79101G Unspecified physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79101K Unspecified physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79101P Unspecified physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79101S Unspecified physeal fracture of lower end of right femur, sequela -S79102A Unspecified physeal fracture of lower end of left femur, initial encounter for closed fracture -S79102D Unspecified physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79102G Unspecified physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79102K Unspecified physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79102P Unspecified physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79102S Unspecified physeal fracture of lower end of left femur, sequela -S79109A Unspecified physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79109D Unspecified physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79109G Unspecified physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79109K Unspecified physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79109P Unspecified physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79109S Unspecified physeal fracture of lower end of unspecified femur, sequela -S79111A Salter-Harris Type I physeal fracture of lower end of right femur, initial encounter for closed fracture -S79111D Salter-Harris Type I physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79111G Salter-Harris Type I physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79111K Salter-Harris Type I physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79111P Salter-Harris Type I physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79111S Salter-Harris Type I physeal fracture of lower end of right femur, sequela -S79112A Salter-Harris Type I physeal fracture of lower end of left femur, initial encounter for closed fracture -S79112D Salter-Harris Type I physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79112G Salter-Harris Type I physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79112K Salter-Harris Type I physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79112P Salter-Harris Type I physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79112S Salter-Harris Type I physeal fracture of lower end of left femur, sequela -S79119A Salter-Harris Type I physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79119D Salter-Harris Type I physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79119G Salter-Harris Type I physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79119K Salter-Harris Type I physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79119P Salter-Harris Type I physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79119S Salter-Harris Type I physeal fracture of lower end of unspecified femur, sequela -S79121A Salter-Harris Type II physeal fracture of lower end of right femur, initial encounter for closed fracture -S79121D Salter-Harris Type II physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79121G Salter-Harris Type II physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79121K Salter-Harris Type II physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79121P Salter-Harris Type II physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79121S Salter-Harris Type II physeal fracture of lower end of right femur, sequela -S79122A Salter-Harris Type II physeal fracture of lower end of left femur, initial encounter for closed fracture -S79122D Salter-Harris Type II physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79122G Salter-Harris Type II physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79122K Salter-Harris Type II physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79122P Salter-Harris Type II physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79122S Salter-Harris Type II physeal fracture of lower end of left femur, sequela -S79129A Salter-Harris Type II physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79129D Salter-Harris Type II physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79129G Salter-Harris Type II physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79129K Salter-Harris Type II physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79129P Salter-Harris Type II physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79129S Salter-Harris Type II physeal fracture of lower end of unspecified femur, sequela -S79131A Salter-Harris Type III physeal fracture of lower end of right femur, initial encounter for closed fracture -S79131D Salter-Harris Type III physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79131G Salter-Harris Type III physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79131K Salter-Harris Type III physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79131P Salter-Harris Type III physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79131S Salter-Harris Type III physeal fracture of lower end of right femur, sequela -S79132A Salter-Harris Type III physeal fracture of lower end of left femur, initial encounter for closed fracture -S79132D Salter-Harris Type III physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79132G Salter-Harris Type III physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79132K Salter-Harris Type III physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79132P Salter-Harris Type III physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79132S Salter-Harris Type III physeal fracture of lower end of left femur, sequela -S79139A Salter-Harris Type III physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79139D Salter-Harris Type III physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79139G Salter-Harris Type III physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79139K Salter-Harris Type III physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79139P Salter-Harris Type III physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79139S Salter-Harris Type III physeal fracture of lower end of unspecified femur, sequela -S79141A Salter-Harris Type IV physeal fracture of lower end of right femur, initial encounter for closed fracture -S79141D Salter-Harris Type IV physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79141G Salter-Harris Type IV physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79141K Salter-Harris Type IV physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79141P Salter-Harris Type IV physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79141S Salter-Harris Type IV physeal fracture of lower end of right femur, sequela -S79142A Salter-Harris Type IV physeal fracture of lower end of left femur, initial encounter for closed fracture -S79142D Salter-Harris Type IV physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79142G Salter-Harris Type IV physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79142K Salter-Harris Type IV physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79142P Salter-Harris Type IV physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79142S Salter-Harris Type IV physeal fracture of lower end of left femur, sequela -S79149A Salter-Harris Type IV physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79149D Salter-Harris Type IV physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79149G Salter-Harris Type IV physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79149K Salter-Harris Type IV physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79149P Salter-Harris Type IV physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79149S Salter-Harris Type IV physeal fracture of lower end of unspecified femur, sequela -S79191A Other physeal fracture of lower end of right femur, initial encounter for closed fracture -S79191D Other physeal fracture of lower end of right femur, subsequent encounter for fracture with routine healing -S79191G Other physeal fracture of lower end of right femur, subsequent encounter for fracture with delayed healing -S79191K Other physeal fracture of lower end of right femur, subsequent encounter for fracture with nonunion -S79191P Other physeal fracture of lower end of right femur, subsequent encounter for fracture with malunion -S79191S Other physeal fracture of lower end of right femur, sequela -S79192A Other physeal fracture of lower end of left femur, initial encounter for closed fracture -S79192D Other physeal fracture of lower end of left femur, subsequent encounter for fracture with routine healing -S79192G Other physeal fracture of lower end of left femur, subsequent encounter for fracture with delayed healing -S79192K Other physeal fracture of lower end of left femur, subsequent encounter for fracture with nonunion -S79192P Other physeal fracture of lower end of left femur, subsequent encounter for fracture with malunion -S79192S Other physeal fracture of lower end of left femur, sequela -S79199A Other physeal fracture of lower end of unspecified femur, initial encounter for closed fracture -S79199D Other physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with routine healing -S79199G Other physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with delayed healing -S79199K Other physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with nonunion -S79199P Other physeal fracture of lower end of unspecified femur, subsequent encounter for fracture with malunion -S79199S Other physeal fracture of lower end of unspecified femur, sequela -S79811A Other specified injuries of right hip, initial encounter -S79811D Other specified injuries of right hip, subsequent encounter -S79811S Other specified injuries of right hip, sequela -S79812A Other specified injuries of left hip, initial encounter -S79812D Other specified injuries of left hip, subsequent encounter -S79812S Other specified injuries of left hip, sequela -S79819A Other specified injuries of unspecified hip, initial encounter -S79819D Other specified injuries of unspecified hip, subsequent encounter -S79819S Other specified injuries of unspecified hip, sequela -S79821A Other specified injuries of right thigh, initial encounter -S79821D Other specified injuries of right thigh, subsequent encounter -S79821S Other specified injuries of right thigh, sequela -S79822A Other specified injuries of left thigh, initial encounter -S79822D Other specified injuries of left thigh, subsequent encounter -S79822S Other specified injuries of left thigh, sequela -S79829A Other specified injuries of unspecified thigh, initial encounter -S79829D Other specified injuries of unspecified thigh, subsequent encounter -S79829S Other specified injuries of unspecified thigh, sequela -S79911A Unspecified injury of right hip, initial encounter -S79911D Unspecified injury of right hip, subsequent encounter -S79911S Unspecified injury of right hip, sequela -S79912A Unspecified injury of left hip, initial encounter -S79912D Unspecified injury of left hip, subsequent encounter -S79912S Unspecified injury of left hip, sequela -S79919A Unspecified injury of unspecified hip, initial encounter -S79919D Unspecified injury of unspecified hip, subsequent encounter -S79919S Unspecified injury of unspecified hip, sequela -S79921A Unspecified injury of right thigh, initial encounter -S79921D Unspecified injury of right thigh, subsequent encounter -S79921S Unspecified injury of right thigh, sequela -S79922A Unspecified injury of left thigh, initial encounter -S79922D Unspecified injury of left thigh, subsequent encounter -S79922S Unspecified injury of left thigh, sequela -S79929A Unspecified injury of unspecified thigh, initial encounter -S79929D Unspecified injury of unspecified thigh, subsequent encounter -S79929S Unspecified injury of unspecified thigh, sequela -S8000XA Contusion of unspecified knee, initial encounter -S8000XD Contusion of unspecified knee, subsequent encounter -S8000XS Contusion of unspecified knee, sequela -S8001XA Contusion of right knee, initial encounter -S8001XD Contusion of right knee, subsequent encounter -S8001XS Contusion of right knee, sequela -S8002XA Contusion of left knee, initial encounter -S8002XD Contusion of left knee, subsequent encounter -S8002XS Contusion of left knee, sequela -S8010XA Contusion of unspecified lower leg, initial encounter -S8010XD Contusion of unspecified lower leg, subsequent encounter -S8010XS Contusion of unspecified lower leg, sequela -S8011XA Contusion of right lower leg, initial encounter -S8011XD Contusion of right lower leg, subsequent encounter -S8011XS Contusion of right lower leg, sequela -S8012XA Contusion of left lower leg, initial encounter -S8012XD Contusion of left lower leg, subsequent encounter -S8012XS Contusion of left lower leg, sequela -S80211A Abrasion, right knee, initial encounter -S80211D Abrasion, right knee, subsequent encounter -S80211S Abrasion, right knee, sequela -S80212A Abrasion, left knee, initial encounter -S80212D Abrasion, left knee, subsequent encounter -S80212S Abrasion, left knee, sequela -S80219A Abrasion, unspecified knee, initial encounter -S80219D Abrasion, unspecified knee, subsequent encounter -S80219S Abrasion, unspecified knee, sequela -S80221A Blister (nonthermal), right knee, initial encounter -S80221D Blister (nonthermal), right knee, subsequent encounter -S80221S Blister (nonthermal), right knee, sequela -S80222A Blister (nonthermal), left knee, initial encounter -S80222D Blister (nonthermal), left knee, subsequent encounter -S80222S Blister (nonthermal), left knee, sequela -S80229A Blister (nonthermal), unspecified knee, initial encounter -S80229D Blister (nonthermal), unspecified knee, subsequent encounter -S80229S Blister (nonthermal), unspecified knee, sequela -S80241A External constriction, right knee, initial encounter -S80241D External constriction, right knee, subsequent encounter -S80241S External constriction, right knee, sequela -S80242A External constriction, left knee, initial encounter -S80242D External constriction, left knee, subsequent encounter -S80242S External constriction, left knee, sequela -S80249A External constriction, unspecified knee, initial encounter -S80249D External constriction, unspecified knee, subsequent encounter -S80249S External constriction, unspecified knee, sequela -S80251A Superficial foreign body, right knee, initial encounter -S80251D Superficial foreign body, right knee, subsequent encounter -S80251S Superficial foreign body, right knee, sequela -S80252A Superficial foreign body, left knee, initial encounter -S80252D Superficial foreign body, left knee, subsequent encounter -S80252S Superficial foreign body, left knee, sequela -S80259A Superficial foreign body, unspecified knee, initial encounter -S80259D Superficial foreign body, unspecified knee, subsequent encounter -S80259S Superficial foreign body, unspecified knee, sequela -S80261A Insect bite (nonvenomous), right knee, initial encounter -S80261D Insect bite (nonvenomous), right knee, subsequent encounter -S80261S Insect bite (nonvenomous), right knee, sequela -S80262A Insect bite (nonvenomous), left knee, initial encounter -S80262D Insect bite (nonvenomous), left knee, subsequent encounter -S80262S Insect bite (nonvenomous), left knee, sequela -S80269A Insect bite (nonvenomous), unspecified knee, initial encounter -S80269D Insect bite (nonvenomous), unspecified knee, subsequent encounter -S80269S Insect bite (nonvenomous), unspecified knee, sequela -S80271A Other superficial bite of right knee, initial encounter -S80271D Other superficial bite of right knee, subsequent encounter -S80271S Other superficial bite of right knee, sequela -S80272A Other superficial bite of left knee, initial encounter -S80272D Other superficial bite of left knee, subsequent encounter -S80272S Other superficial bite of left knee, sequela -S80279A Other superficial bite of unspecified knee, initial encounter -S80279D Other superficial bite of unspecified knee, subsequent encounter -S80279S Other superficial bite of unspecified knee, sequela -S80811A Abrasion, right lower leg, initial encounter -S80811D Abrasion, right lower leg, subsequent encounter -S80811S Abrasion, right lower leg, sequela -S80812A Abrasion, left lower leg, initial encounter -S80812D Abrasion, left lower leg, subsequent encounter -S80812S Abrasion, left lower leg, sequela -S80819A Abrasion, unspecified lower leg, initial encounter -S80819D Abrasion, unspecified lower leg, subsequent encounter -S80819S Abrasion, unspecified lower leg, sequela -S80821A Blister (nonthermal), right lower leg, initial encounter -S80821D Blister (nonthermal), right lower leg, subsequent encounter -S80821S Blister (nonthermal), right lower leg, sequela -S80822A Blister (nonthermal), left lower leg, initial encounter -S80822D Blister (nonthermal), left lower leg, subsequent encounter -S80822S Blister (nonthermal), left lower leg, sequela -S80829A Blister (nonthermal), unspecified lower leg, initial encounter -S80829D Blister (nonthermal), unspecified lower leg, subsequent encounter -S80829S Blister (nonthermal), unspecified lower leg, sequela -S80841A External constriction, right lower leg, initial encounter -S80841D External constriction, right lower leg, subsequent encounter -S80841S External constriction, right lower leg, sequela -S80842A External constriction, left lower leg, initial encounter -S80842D External constriction, left lower leg, subsequent encounter -S80842S External constriction, left lower leg, sequela -S80849A External constriction, unspecified lower leg, initial encounter -S80849D External constriction, unspecified lower leg, subsequent encounter -S80849S External constriction, unspecified lower leg, sequela -S80851A Superficial foreign body, right lower leg, initial encounter -S80851D Superficial foreign body, right lower leg, subsequent encounter -S80851S Superficial foreign body, right lower leg, sequela -S80852A Superficial foreign body, left lower leg, initial encounter -S80852D Superficial foreign body, left lower leg, subsequent encounter -S80852S Superficial foreign body, left lower leg, sequela -S80859A Superficial foreign body, unspecified lower leg, initial encounter -S80859D Superficial foreign body, unspecified lower leg, subsequent encounter -S80859S Superficial foreign body, unspecified lower leg, sequela -S80861A Insect bite (nonvenomous), right lower leg, initial encounter -S80861D Insect bite (nonvenomous), right lower leg, subsequent encounter -S80861S Insect bite (nonvenomous), right lower leg, sequela -S80862A Insect bite (nonvenomous), left lower leg, initial encounter -S80862D Insect bite (nonvenomous), left lower leg, subsequent encounter -S80862S Insect bite (nonvenomous), left lower leg, sequela -S80869A Insect bite (nonvenomous), unspecified lower leg, initial encounter -S80869D Insect bite (nonvenomous), unspecified lower leg, subsequent encounter -S80869S Insect bite (nonvenomous), unspecified lower leg, sequela -S80871A Other superficial bite, right lower leg, initial encounter -S80871D Other superficial bite, right lower leg, subsequent encounter -S80871S Other superficial bite, right lower leg, sequela -S80872A Other superficial bite, left lower leg, initial encounter -S80872D Other superficial bite, left lower leg, subsequent encounter -S80872S Other superficial bite, left lower leg, sequela -S80879A Other superficial bite, unspecified lower leg, initial encounter -S80879D Other superficial bite, unspecified lower leg, subsequent encounter -S80879S Other superficial bite, unspecified lower leg, sequela -S80911A Unspecified superficial injury of right knee, initial encounter -S80911D Unspecified superficial injury of right knee, subsequent encounter -S80911S Unspecified superficial injury of right knee, sequela -S80912A Unspecified superficial injury of left knee, initial encounter -S80912D Unspecified superficial injury of left knee, subsequent encounter -S80912S Unspecified superficial injury of left knee, sequela -S80919A Unspecified superficial injury of unspecified knee, initial encounter -S80919D Unspecified superficial injury of unspecified knee, subsequent encounter -S80919S Unspecified superficial injury of unspecified knee, sequela -S80921A Unspecified superficial injury of right lower leg, initial encounter -S80921D Unspecified superficial injury of right lower leg, subsequent encounter -S80921S Unspecified superficial injury of right lower leg, sequela -S80922A Unspecified superficial injury of left lower leg, initial encounter -S80922D Unspecified superficial injury of left lower leg, subsequent encounter -S80922S Unspecified superficial injury of left lower leg, sequela -S80929A Unspecified superficial injury of unspecified lower leg, initial encounter -S80929D Unspecified superficial injury of unspecified lower leg, subsequent encounter -S80929S Unspecified superficial injury of unspecified lower leg, sequela -S81001A Unspecified open wound, right knee, initial encounter -S81001D Unspecified open wound, right knee, subsequent encounter -S81001S Unspecified open wound, right knee, sequela -S81002A Unspecified open wound, left knee, initial encounter -S81002D Unspecified open wound, left knee, subsequent encounter -S81002S Unspecified open wound, left knee, sequela -S81009A Unspecified open wound, unspecified knee, initial encounter -S81009D Unspecified open wound, unspecified knee, subsequent encounter -S81009S Unspecified open wound, unspecified knee, sequela -S81011A Laceration without foreign body, right knee, initial encounter -S81011D Laceration without foreign body, right knee, subsequent encounter -S81011S Laceration without foreign body, right knee, sequela -S81012A Laceration without foreign body, left knee, initial encounter -S81012D Laceration without foreign body, left knee, subsequent encounter -S81012S Laceration without foreign body, left knee, sequela -S81019A Laceration without foreign body, unspecified knee, initial encounter -S81019D Laceration without foreign body, unspecified knee, subsequent encounter -S81019S Laceration without foreign body, unspecified knee, sequela -S81021A Laceration with foreign body, right knee, initial encounter -S81021D Laceration with foreign body, right knee, subsequent encounter -S81021S Laceration with foreign body, right knee, sequela -S81022A Laceration with foreign body, left knee, initial encounter -S81022D Laceration with foreign body, left knee, subsequent encounter -S81022S Laceration with foreign body, left knee, sequela -S81029A Laceration with foreign body, unspecified knee, initial encounter -S81029D Laceration with foreign body, unspecified knee, subsequent encounter -S81029S Laceration with foreign body, unspecified knee, sequela -S81031A Puncture wound without foreign body, right knee, initial encounter -S81031D Puncture wound without foreign body, right knee, subsequent encounter -S81031S Puncture wound without foreign body, right knee, sequela -S81032A Puncture wound without foreign body, left knee, initial encounter -S81032D Puncture wound without foreign body, left knee, subsequent encounter -S81032S Puncture wound without foreign body, left knee, sequela -S81039A Puncture wound without foreign body, unspecified knee, initial encounter -S81039D Puncture wound without foreign body, unspecified knee, subsequent encounter -S81039S Puncture wound without foreign body, unspecified knee, sequela -S81041A Puncture wound with foreign body, right knee, initial encounter -S81041D Puncture wound with foreign body, right knee, subsequent encounter -S81041S Puncture wound with foreign body, right knee, sequela -S81042A Puncture wound with foreign body, left knee, initial encounter -S81042D Puncture wound with foreign body, left knee, subsequent encounter -S81042S Puncture wound with foreign body, left knee, sequela -S81049A Puncture wound with foreign body, unspecified knee, initial encounter -S81049D Puncture wound with foreign body, unspecified knee, subsequent encounter -S81049S Puncture wound with foreign body, unspecified knee, sequela -S81051A Open bite, right knee, initial encounter -S81051D Open bite, right knee, subsequent encounter -S81051S Open bite, right knee, sequela -S81052A Open bite, left knee, initial encounter -S81052D Open bite, left knee, subsequent encounter -S81052S Open bite, left knee, sequela -S81059A Open bite, unspecified knee, initial encounter -S81059D Open bite, unspecified knee, subsequent encounter -S81059S Open bite, unspecified knee, sequela -S81801A Unspecified open wound, right lower leg, initial encounter -S81801D Unspecified open wound, right lower leg, subsequent encounter -S81801S Unspecified open wound, right lower leg, sequela -S81802A Unspecified open wound, left lower leg, initial encounter -S81802D Unspecified open wound, left lower leg, subsequent encounter -S81802S Unspecified open wound, left lower leg, sequela -S81809A Unspecified open wound, unspecified lower leg, initial encounter -S81809D Unspecified open wound, unspecified lower leg, subsequent encounter -S81809S Unspecified open wound, unspecified lower leg, sequela -S81811A Laceration without foreign body, right lower leg, initial encounter -S81811D Laceration without foreign body, right lower leg, subsequent encounter -S81811S Laceration without foreign body, right lower leg, sequela -S81812A Laceration without foreign body, left lower leg, initial encounter -S81812D Laceration without foreign body, left lower leg, subsequent encounter -S81812S Laceration without foreign body, left lower leg, sequela -S81819A Laceration without foreign body, unspecified lower leg, initial encounter -S81819D Laceration without foreign body, unspecified lower leg, subsequent encounter -S81819S Laceration without foreign body, unspecified lower leg, sequela -S81821A Laceration with foreign body, right lower leg, initial encounter -S81821D Laceration with foreign body, right lower leg, subsequent encounter -S81821S Laceration with foreign body, right lower leg, sequela -S81822A Laceration with foreign body, left lower leg, initial encounter -S81822D Laceration with foreign body, left lower leg, subsequent encounter -S81822S Laceration with foreign body, left lower leg, sequela -S81829A Laceration with foreign body, unspecified lower leg, initial encounter -S81829D Laceration with foreign body, unspecified lower leg, subsequent encounter -S81829S Laceration with foreign body, unspecified lower leg, sequela -S81831A Puncture wound without foreign body, right lower leg, initial encounter -S81831D Puncture wound without foreign body, right lower leg, subsequent encounter -S81831S Puncture wound without foreign body, right lower leg, sequela -S81832A Puncture wound without foreign body, left lower leg, initial encounter -S81832D Puncture wound without foreign body, left lower leg, subsequent encounter -S81832S Puncture wound without foreign body, left lower leg, sequela -S81839A Puncture wound without foreign body, unspecified lower leg, initial encounter -S81839D Puncture wound without foreign body, unspecified lower leg, subsequent encounter -S81839S Puncture wound without foreign body, unspecified lower leg, sequela -S81841A Puncture wound with foreign body, right lower leg, initial encounter -S81841D Puncture wound with foreign body, right lower leg, subsequent encounter -S81841S Puncture wound with foreign body, right lower leg, sequela -S81842A Puncture wound with foreign body, left lower leg, initial encounter -S81842D Puncture wound with foreign body, left lower leg, subsequent encounter -S81842S Puncture wound with foreign body, left lower leg, sequela -S81849A Puncture wound with foreign body, unspecified lower leg, initial encounter -S81849D Puncture wound with foreign body, unspecified lower leg, subsequent encounter -S81849S Puncture wound with foreign body, unspecified lower leg, sequela -S81851A Open bite, right lower leg, initial encounter -S81851D Open bite, right lower leg, subsequent encounter -S81851S Open bite, right lower leg, sequela -S81852A Open bite, left lower leg, initial encounter -S81852D Open bite, left lower leg, subsequent encounter -S81852S Open bite, left lower leg, sequela -S81859A Open bite, unspecified lower leg, initial encounter -S81859D Open bite, unspecified lower leg, subsequent encounter -S81859S Open bite, unspecified lower leg, sequela -S82001A Unspecified fracture of right patella, initial encounter for closed fracture -S82001B Unspecified fracture of right patella, initial encounter for open fracture type I or II -S82001C Unspecified fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82001D Unspecified fracture of right patella, subsequent encounter for closed fracture with routine healing -S82001E Unspecified fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82001F Unspecified fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82001G Unspecified fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82001H Unspecified fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82001J Unspecified fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82001K Unspecified fracture of right patella, subsequent encounter for closed fracture with nonunion -S82001M Unspecified fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82001N Unspecified fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82001P Unspecified fracture of right patella, subsequent encounter for closed fracture with malunion -S82001Q Unspecified fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82001R Unspecified fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82001S Unspecified fracture of right patella, sequela -S82002A Unspecified fracture of left patella, initial encounter for closed fracture -S82002B Unspecified fracture of left patella, initial encounter for open fracture type I or II -S82002C Unspecified fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82002D Unspecified fracture of left patella, subsequent encounter for closed fracture with routine healing -S82002E Unspecified fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82002F Unspecified fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82002G Unspecified fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82002H Unspecified fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82002J Unspecified fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82002K Unspecified fracture of left patella, subsequent encounter for closed fracture with nonunion -S82002M Unspecified fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82002N Unspecified fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82002P Unspecified fracture of left patella, subsequent encounter for closed fracture with malunion -S82002Q Unspecified fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82002R Unspecified fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82002S Unspecified fracture of left patella, sequela -S82009A Unspecified fracture of unspecified patella, initial encounter for closed fracture -S82009B Unspecified fracture of unspecified patella, initial encounter for open fracture type I or II -S82009C Unspecified fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82009D Unspecified fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82009E Unspecified fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82009F Unspecified fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82009G Unspecified fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82009H Unspecified fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82009J Unspecified fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82009K Unspecified fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82009M Unspecified fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82009N Unspecified fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82009P Unspecified fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82009Q Unspecified fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82009R Unspecified fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82009S Unspecified fracture of unspecified patella, sequela -S82011A Displaced osteochondral fracture of right patella, initial encounter for closed fracture -S82011B Displaced osteochondral fracture of right patella, initial encounter for open fracture type I or II -S82011C Displaced osteochondral fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82011D Displaced osteochondral fracture of right patella, subsequent encounter for closed fracture with routine healing -S82011E Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82011F Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82011G Displaced osteochondral fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82011H Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82011J Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82011K Displaced osteochondral fracture of right patella, subsequent encounter for closed fracture with nonunion -S82011M Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82011N Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82011P Displaced osteochondral fracture of right patella, subsequent encounter for closed fracture with malunion -S82011Q Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82011R Displaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82011S Displaced osteochondral fracture of right patella, sequela -S82012A Displaced osteochondral fracture of left patella, initial encounter for closed fracture -S82012B Displaced osteochondral fracture of left patella, initial encounter for open fracture type I or II -S82012C Displaced osteochondral fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82012D Displaced osteochondral fracture of left patella, subsequent encounter for closed fracture with routine healing -S82012E Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82012F Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82012G Displaced osteochondral fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82012H Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82012J Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82012K Displaced osteochondral fracture of left patella, subsequent encounter for closed fracture with nonunion -S82012M Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82012N Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82012P Displaced osteochondral fracture of left patella, subsequent encounter for closed fracture with malunion -S82012Q Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82012R Displaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82012S Displaced osteochondral fracture of left patella, sequela -S82013A Displaced osteochondral fracture of unspecified patella, initial encounter for closed fracture -S82013B Displaced osteochondral fracture of unspecified patella, initial encounter for open fracture type I or II -S82013C Displaced osteochondral fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82013D Displaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82013E Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82013F Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82013G Displaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82013H Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82013J Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82013K Displaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82013M Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82013N Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82013P Displaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82013Q Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82013R Displaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82013S Displaced osteochondral fracture of unspecified patella, sequela -S82014A Nondisplaced osteochondral fracture of right patella, initial encounter for closed fracture -S82014B Nondisplaced osteochondral fracture of right patella, initial encounter for open fracture type I or II -S82014C Nondisplaced osteochondral fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82014D Nondisplaced osteochondral fracture of right patella, subsequent encounter for closed fracture with routine healing -S82014E Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82014F Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82014G Nondisplaced osteochondral fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82014H Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82014J Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82014K Nondisplaced osteochondral fracture of right patella, subsequent encounter for closed fracture with nonunion -S82014M Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82014N Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82014P Nondisplaced osteochondral fracture of right patella, subsequent encounter for closed fracture with malunion -S82014Q Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82014R Nondisplaced osteochondral fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82014S Nondisplaced osteochondral fracture of right patella, sequela -S82015A Nondisplaced osteochondral fracture of left patella, initial encounter for closed fracture -S82015B Nondisplaced osteochondral fracture of left patella, initial encounter for open fracture type I or II -S82015C Nondisplaced osteochondral fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82015D Nondisplaced osteochondral fracture of left patella, subsequent encounter for closed fracture with routine healing -S82015E Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82015F Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82015G Nondisplaced osteochondral fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82015H Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82015J Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82015K Nondisplaced osteochondral fracture of left patella, subsequent encounter for closed fracture with nonunion -S82015M Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82015N Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82015P Nondisplaced osteochondral fracture of left patella, subsequent encounter for closed fracture with malunion -S82015Q Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82015R Nondisplaced osteochondral fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82015S Nondisplaced osteochondral fracture of left patella, sequela -S82016A Nondisplaced osteochondral fracture of unspecified patella, initial encounter for closed fracture -S82016B Nondisplaced osteochondral fracture of unspecified patella, initial encounter for open fracture type I or II -S82016C Nondisplaced osteochondral fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82016D Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82016E Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82016F Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82016G Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82016H Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82016J Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82016K Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82016M Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82016N Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82016P Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82016Q Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82016R Nondisplaced osteochondral fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82016S Nondisplaced osteochondral fracture of unspecified patella, sequela -S82021A Displaced longitudinal fracture of right patella, initial encounter for closed fracture -S82021B Displaced longitudinal fracture of right patella, initial encounter for open fracture type I or II -S82021C Displaced longitudinal fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82021D Displaced longitudinal fracture of right patella, subsequent encounter for closed fracture with routine healing -S82021E Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82021F Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82021G Displaced longitudinal fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82021H Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82021J Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82021K Displaced longitudinal fracture of right patella, subsequent encounter for closed fracture with nonunion -S82021M Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82021N Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82021P Displaced longitudinal fracture of right patella, subsequent encounter for closed fracture with malunion -S82021Q Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82021R Displaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82021S Displaced longitudinal fracture of right patella, sequela -S82022A Displaced longitudinal fracture of left patella, initial encounter for closed fracture -S82022B Displaced longitudinal fracture of left patella, initial encounter for open fracture type I or II -S82022C Displaced longitudinal fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82022D Displaced longitudinal fracture of left patella, subsequent encounter for closed fracture with routine healing -S82022E Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82022F Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82022G Displaced longitudinal fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82022H Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82022J Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82022K Displaced longitudinal fracture of left patella, subsequent encounter for closed fracture with nonunion -S82022M Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82022N Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82022P Displaced longitudinal fracture of left patella, subsequent encounter for closed fracture with malunion -S82022Q Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82022R Displaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82022S Displaced longitudinal fracture of left patella, sequela -S82023A Displaced longitudinal fracture of unspecified patella, initial encounter for closed fracture -S82023B Displaced longitudinal fracture of unspecified patella, initial encounter for open fracture type I or II -S82023C Displaced longitudinal fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82023D Displaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82023E Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82023F Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82023G Displaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82023H Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82023J Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82023K Displaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82023M Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82023N Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82023P Displaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82023Q Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82023R Displaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82023S Displaced longitudinal fracture of unspecified patella, sequela -S82024A Nondisplaced longitudinal fracture of right patella, initial encounter for closed fracture -S82024B Nondisplaced longitudinal fracture of right patella, initial encounter for open fracture type I or II -S82024C Nondisplaced longitudinal fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82024D Nondisplaced longitudinal fracture of right patella, subsequent encounter for closed fracture with routine healing -S82024E Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82024F Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82024G Nondisplaced longitudinal fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82024H Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82024J Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82024K Nondisplaced longitudinal fracture of right patella, subsequent encounter for closed fracture with nonunion -S82024M Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82024N Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82024P Nondisplaced longitudinal fracture of right patella, subsequent encounter for closed fracture with malunion -S82024Q Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82024R Nondisplaced longitudinal fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82024S Nondisplaced longitudinal fracture of right patella, sequela -S82025A Nondisplaced longitudinal fracture of left patella, initial encounter for closed fracture -S82025B Nondisplaced longitudinal fracture of left patella, initial encounter for open fracture type I or II -S82025C Nondisplaced longitudinal fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82025D Nondisplaced longitudinal fracture of left patella, subsequent encounter for closed fracture with routine healing -S82025E Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82025F Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82025G Nondisplaced longitudinal fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82025H Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82025J Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82025K Nondisplaced longitudinal fracture of left patella, subsequent encounter for closed fracture with nonunion -S82025M Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82025N Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82025P Nondisplaced longitudinal fracture of left patella, subsequent encounter for closed fracture with malunion -S82025Q Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82025R Nondisplaced longitudinal fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82025S Nondisplaced longitudinal fracture of left patella, sequela -S82026A Nondisplaced longitudinal fracture of unspecified patella, initial encounter for closed fracture -S82026B Nondisplaced longitudinal fracture of unspecified patella, initial encounter for open fracture type I or II -S82026C Nondisplaced longitudinal fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82026D Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82026E Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82026F Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82026G Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82026H Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82026J Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82026K Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82026M Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82026N Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82026P Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82026Q Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82026R Nondisplaced longitudinal fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82026S Nondisplaced longitudinal fracture of unspecified patella, sequela -S82031A Displaced transverse fracture of right patella, initial encounter for closed fracture -S82031B Displaced transverse fracture of right patella, initial encounter for open fracture type I or II -S82031C Displaced transverse fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82031D Displaced transverse fracture of right patella, subsequent encounter for closed fracture with routine healing -S82031E Displaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82031F Displaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82031G Displaced transverse fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82031H Displaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82031J Displaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82031K Displaced transverse fracture of right patella, subsequent encounter for closed fracture with nonunion -S82031M Displaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82031N Displaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82031P Displaced transverse fracture of right patella, subsequent encounter for closed fracture with malunion -S82031Q Displaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82031R Displaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82031S Displaced transverse fracture of right patella, sequela -S82032A Displaced transverse fracture of left patella, initial encounter for closed fracture -S82032B Displaced transverse fracture of left patella, initial encounter for open fracture type I or II -S82032C Displaced transverse fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82032D Displaced transverse fracture of left patella, subsequent encounter for closed fracture with routine healing -S82032E Displaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82032F Displaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82032G Displaced transverse fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82032H Displaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82032J Displaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82032K Displaced transverse fracture of left patella, subsequent encounter for closed fracture with nonunion -S82032M Displaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82032N Displaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82032P Displaced transverse fracture of left patella, subsequent encounter for closed fracture with malunion -S82032Q Displaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82032R Displaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82032S Displaced transverse fracture of left patella, sequela -S82033A Displaced transverse fracture of unspecified patella, initial encounter for closed fracture -S82033B Displaced transverse fracture of unspecified patella, initial encounter for open fracture type I or II -S82033C Displaced transverse fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82033D Displaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82033E Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82033F Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82033G Displaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82033H Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82033J Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82033K Displaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82033M Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82033N Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82033P Displaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82033Q Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82033R Displaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82033S Displaced transverse fracture of unspecified patella, sequela -S82034A Nondisplaced transverse fracture of right patella, initial encounter for closed fracture -S82034B Nondisplaced transverse fracture of right patella, initial encounter for open fracture type I or II -S82034C Nondisplaced transverse fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82034D Nondisplaced transverse fracture of right patella, subsequent encounter for closed fracture with routine healing -S82034E Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82034F Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82034G Nondisplaced transverse fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82034H Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82034J Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82034K Nondisplaced transverse fracture of right patella, subsequent encounter for closed fracture with nonunion -S82034M Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82034N Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82034P Nondisplaced transverse fracture of right patella, subsequent encounter for closed fracture with malunion -S82034Q Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82034R Nondisplaced transverse fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82034S Nondisplaced transverse fracture of right patella, sequela -S82035A Nondisplaced transverse fracture of left patella, initial encounter for closed fracture -S82035B Nondisplaced transverse fracture of left patella, initial encounter for open fracture type I or II -S82035C Nondisplaced transverse fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82035D Nondisplaced transverse fracture of left patella, subsequent encounter for closed fracture with routine healing -S82035E Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82035F Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82035G Nondisplaced transverse fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82035H Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82035J Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82035K Nondisplaced transverse fracture of left patella, subsequent encounter for closed fracture with nonunion -S82035M Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82035N Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82035P Nondisplaced transverse fracture of left patella, subsequent encounter for closed fracture with malunion -S82035Q Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82035R Nondisplaced transverse fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82035S Nondisplaced transverse fracture of left patella, sequela -S82036A Nondisplaced transverse fracture of unspecified patella, initial encounter for closed fracture -S82036B Nondisplaced transverse fracture of unspecified patella, initial encounter for open fracture type I or II -S82036C Nondisplaced transverse fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82036D Nondisplaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82036E Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82036F Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82036G Nondisplaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82036H Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82036J Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82036K Nondisplaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82036M Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82036N Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82036P Nondisplaced transverse fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82036Q Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82036R Nondisplaced transverse fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82036S Nondisplaced transverse fracture of unspecified patella, sequela -S82041A Displaced comminuted fracture of right patella, initial encounter for closed fracture -S82041B Displaced comminuted fracture of right patella, initial encounter for open fracture type I or II -S82041C Displaced comminuted fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82041D Displaced comminuted fracture of right patella, subsequent encounter for closed fracture with routine healing -S82041E Displaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82041F Displaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82041G Displaced comminuted fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82041H Displaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82041J Displaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82041K Displaced comminuted fracture of right patella, subsequent encounter for closed fracture with nonunion -S82041M Displaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82041N Displaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82041P Displaced comminuted fracture of right patella, subsequent encounter for closed fracture with malunion -S82041Q Displaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82041R Displaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82041S Displaced comminuted fracture of right patella, sequela -S82042A Displaced comminuted fracture of left patella, initial encounter for closed fracture -S82042B Displaced comminuted fracture of left patella, initial encounter for open fracture type I or II -S82042C Displaced comminuted fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82042D Displaced comminuted fracture of left patella, subsequent encounter for closed fracture with routine healing -S82042E Displaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82042F Displaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82042G Displaced comminuted fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82042H Displaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82042J Displaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82042K Displaced comminuted fracture of left patella, subsequent encounter for closed fracture with nonunion -S82042M Displaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82042N Displaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82042P Displaced comminuted fracture of left patella, subsequent encounter for closed fracture with malunion -S82042Q Displaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82042R Displaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82042S Displaced comminuted fracture of left patella, sequela -S82043A Displaced comminuted fracture of unspecified patella, initial encounter for closed fracture -S82043B Displaced comminuted fracture of unspecified patella, initial encounter for open fracture type I or II -S82043C Displaced comminuted fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82043D Displaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82043E Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82043F Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82043G Displaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82043H Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82043J Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82043K Displaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82043M Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82043N Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82043P Displaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82043Q Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82043R Displaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82043S Displaced comminuted fracture of unspecified patella, sequela -S82044A Nondisplaced comminuted fracture of right patella, initial encounter for closed fracture -S82044B Nondisplaced comminuted fracture of right patella, initial encounter for open fracture type I or II -S82044C Nondisplaced comminuted fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82044D Nondisplaced comminuted fracture of right patella, subsequent encounter for closed fracture with routine healing -S82044E Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82044F Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82044G Nondisplaced comminuted fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82044H Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82044J Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82044K Nondisplaced comminuted fracture of right patella, subsequent encounter for closed fracture with nonunion -S82044M Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82044N Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82044P Nondisplaced comminuted fracture of right patella, subsequent encounter for closed fracture with malunion -S82044Q Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82044R Nondisplaced comminuted fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82044S Nondisplaced comminuted fracture of right patella, sequela -S82045A Nondisplaced comminuted fracture of left patella, initial encounter for closed fracture -S82045B Nondisplaced comminuted fracture of left patella, initial encounter for open fracture type I or II -S82045C Nondisplaced comminuted fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82045D Nondisplaced comminuted fracture of left patella, subsequent encounter for closed fracture with routine healing -S82045E Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82045F Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82045G Nondisplaced comminuted fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82045H Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82045J Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82045K Nondisplaced comminuted fracture of left patella, subsequent encounter for closed fracture with nonunion -S82045M Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82045N Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82045P Nondisplaced comminuted fracture of left patella, subsequent encounter for closed fracture with malunion -S82045Q Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82045R Nondisplaced comminuted fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82045S Nondisplaced comminuted fracture of left patella, sequela -S82046A Nondisplaced comminuted fracture of unspecified patella, initial encounter for closed fracture -S82046B Nondisplaced comminuted fracture of unspecified patella, initial encounter for open fracture type I or II -S82046C Nondisplaced comminuted fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82046D Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82046E Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82046F Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82046G Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82046H Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82046J Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82046K Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82046M Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82046N Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82046P Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82046Q Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82046R Nondisplaced comminuted fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82046S Nondisplaced comminuted fracture of unspecified patella, sequela -S82091A Other fracture of right patella, initial encounter for closed fracture -S82091B Other fracture of right patella, initial encounter for open fracture type I or II -S82091C Other fracture of right patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82091D Other fracture of right patella, subsequent encounter for closed fracture with routine healing -S82091E Other fracture of right patella, subsequent encounter for open fracture type I or II with routine healing -S82091F Other fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82091G Other fracture of right patella, subsequent encounter for closed fracture with delayed healing -S82091H Other fracture of right patella, subsequent encounter for open fracture type I or II with delayed healing -S82091J Other fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82091K Other fracture of right patella, subsequent encounter for closed fracture with nonunion -S82091M Other fracture of right patella, subsequent encounter for open fracture type I or II with nonunion -S82091N Other fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82091P Other fracture of right patella, subsequent encounter for closed fracture with malunion -S82091Q Other fracture of right patella, subsequent encounter for open fracture type I or II with malunion -S82091R Other fracture of right patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82091S Other fracture of right patella, sequela -S82092A Other fracture of left patella, initial encounter for closed fracture -S82092B Other fracture of left patella, initial encounter for open fracture type I or II -S82092C Other fracture of left patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82092D Other fracture of left patella, subsequent encounter for closed fracture with routine healing -S82092E Other fracture of left patella, subsequent encounter for open fracture type I or II with routine healing -S82092F Other fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82092G Other fracture of left patella, subsequent encounter for closed fracture with delayed healing -S82092H Other fracture of left patella, subsequent encounter for open fracture type I or II with delayed healing -S82092J Other fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82092K Other fracture of left patella, subsequent encounter for closed fracture with nonunion -S82092M Other fracture of left patella, subsequent encounter for open fracture type I or II with nonunion -S82092N Other fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82092P Other fracture of left patella, subsequent encounter for closed fracture with malunion -S82092Q Other fracture of left patella, subsequent encounter for open fracture type I or II with malunion -S82092R Other fracture of left patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82092S Other fracture of left patella, sequela -S82099A Other fracture of unspecified patella, initial encounter for closed fracture -S82099B Other fracture of unspecified patella, initial encounter for open fracture type I or II -S82099C Other fracture of unspecified patella, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82099D Other fracture of unspecified patella, subsequent encounter for closed fracture with routine healing -S82099E Other fracture of unspecified patella, subsequent encounter for open fracture type I or II with routine healing -S82099F Other fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82099G Other fracture of unspecified patella, subsequent encounter for closed fracture with delayed healing -S82099H Other fracture of unspecified patella, subsequent encounter for open fracture type I or II with delayed healing -S82099J Other fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82099K Other fracture of unspecified patella, subsequent encounter for closed fracture with nonunion -S82099M Other fracture of unspecified patella, subsequent encounter for open fracture type I or II with nonunion -S82099N Other fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82099P Other fracture of unspecified patella, subsequent encounter for closed fracture with malunion -S82099Q Other fracture of unspecified patella, subsequent encounter for open fracture type I or II with malunion -S82099R Other fracture of unspecified patella, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82099S Other fracture of unspecified patella, sequela -S82101A Unspecified fracture of upper end of right tibia, initial encounter for closed fracture -S82101B Unspecified fracture of upper end of right tibia, initial encounter for open fracture type I or II -S82101C Unspecified fracture of upper end of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82101D Unspecified fracture of upper end of right tibia, subsequent encounter for closed fracture with routine healing -S82101E Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82101F Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82101G Unspecified fracture of upper end of right tibia, subsequent encounter for closed fracture with delayed healing -S82101H Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82101J Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82101K Unspecified fracture of upper end of right tibia, subsequent encounter for closed fracture with nonunion -S82101M Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82101N Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82101P Unspecified fracture of upper end of right tibia, subsequent encounter for closed fracture with malunion -S82101Q Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with malunion -S82101R Unspecified fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82101S Unspecified fracture of upper end of right tibia, sequela -S82102A Unspecified fracture of upper end of left tibia, initial encounter for closed fracture -S82102B Unspecified fracture of upper end of left tibia, initial encounter for open fracture type I or II -S82102C Unspecified fracture of upper end of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82102D Unspecified fracture of upper end of left tibia, subsequent encounter for closed fracture with routine healing -S82102E Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82102F Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82102G Unspecified fracture of upper end of left tibia, subsequent encounter for closed fracture with delayed healing -S82102H Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82102J Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82102K Unspecified fracture of upper end of left tibia, subsequent encounter for closed fracture with nonunion -S82102M Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82102N Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82102P Unspecified fracture of upper end of left tibia, subsequent encounter for closed fracture with malunion -S82102Q Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with malunion -S82102R Unspecified fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82102S Unspecified fracture of upper end of left tibia, sequela -S82109A Unspecified fracture of upper end of unspecified tibia, initial encounter for closed fracture -S82109B Unspecified fracture of upper end of unspecified tibia, initial encounter for open fracture type I or II -S82109C Unspecified fracture of upper end of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82109D Unspecified fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82109E Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82109F Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82109G Unspecified fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82109H Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82109J Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82109K Unspecified fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82109M Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82109N Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82109P Unspecified fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with malunion -S82109Q Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82109R Unspecified fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82109S Unspecified fracture of upper end of unspecified tibia, sequela -S82111A Displaced fracture of right tibial spine, initial encounter for closed fracture -S82111B Displaced fracture of right tibial spine, initial encounter for open fracture type I or II -S82111C Displaced fracture of right tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82111D Displaced fracture of right tibial spine, subsequent encounter for closed fracture with routine healing -S82111E Displaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82111F Displaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82111G Displaced fracture of right tibial spine, subsequent encounter for closed fracture with delayed healing -S82111H Displaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82111J Displaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82111K Displaced fracture of right tibial spine, subsequent encounter for closed fracture with nonunion -S82111M Displaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82111N Displaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82111P Displaced fracture of right tibial spine, subsequent encounter for closed fracture with malunion -S82111Q Displaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with malunion -S82111R Displaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82111S Displaced fracture of right tibial spine, sequela -S82112A Displaced fracture of left tibial spine, initial encounter for closed fracture -S82112B Displaced fracture of left tibial spine, initial encounter for open fracture type I or II -S82112C Displaced fracture of left tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82112D Displaced fracture of left tibial spine, subsequent encounter for closed fracture with routine healing -S82112E Displaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82112F Displaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82112G Displaced fracture of left tibial spine, subsequent encounter for closed fracture with delayed healing -S82112H Displaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82112J Displaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82112K Displaced fracture of left tibial spine, subsequent encounter for closed fracture with nonunion -S82112M Displaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82112N Displaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82112P Displaced fracture of left tibial spine, subsequent encounter for closed fracture with malunion -S82112Q Displaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with malunion -S82112R Displaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82112S Displaced fracture of left tibial spine, sequela -S82113A Displaced fracture of unspecified tibial spine, initial encounter for closed fracture -S82113B Displaced fracture of unspecified tibial spine, initial encounter for open fracture type I or II -S82113C Displaced fracture of unspecified tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82113D Displaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with routine healing -S82113E Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82113F Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82113G Displaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with delayed healing -S82113H Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82113J Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82113K Displaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with nonunion -S82113M Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82113N Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82113P Displaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with malunion -S82113Q Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with malunion -S82113R Displaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82113S Displaced fracture of unspecified tibial spine, sequela -S82114A Nondisplaced fracture of right tibial spine, initial encounter for closed fracture -S82114B Nondisplaced fracture of right tibial spine, initial encounter for open fracture type I or II -S82114C Nondisplaced fracture of right tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82114D Nondisplaced fracture of right tibial spine, subsequent encounter for closed fracture with routine healing -S82114E Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82114F Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82114G Nondisplaced fracture of right tibial spine, subsequent encounter for closed fracture with delayed healing -S82114H Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82114J Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82114K Nondisplaced fracture of right tibial spine, subsequent encounter for closed fracture with nonunion -S82114M Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82114N Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82114P Nondisplaced fracture of right tibial spine, subsequent encounter for closed fracture with malunion -S82114Q Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type I or II with malunion -S82114R Nondisplaced fracture of right tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82114S Nondisplaced fracture of right tibial spine, sequela -S82115A Nondisplaced fracture of left tibial spine, initial encounter for closed fracture -S82115B Nondisplaced fracture of left tibial spine, initial encounter for open fracture type I or II -S82115C Nondisplaced fracture of left tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82115D Nondisplaced fracture of left tibial spine, subsequent encounter for closed fracture with routine healing -S82115E Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82115F Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82115G Nondisplaced fracture of left tibial spine, subsequent encounter for closed fracture with delayed healing -S82115H Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82115J Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82115K Nondisplaced fracture of left tibial spine, subsequent encounter for closed fracture with nonunion -S82115M Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82115N Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82115P Nondisplaced fracture of left tibial spine, subsequent encounter for closed fracture with malunion -S82115Q Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type I or II with malunion -S82115R Nondisplaced fracture of left tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82115S Nondisplaced fracture of left tibial spine, sequela -S82116A Nondisplaced fracture of unspecified tibial spine, initial encounter for closed fracture -S82116B Nondisplaced fracture of unspecified tibial spine, initial encounter for open fracture type I or II -S82116C Nondisplaced fracture of unspecified tibial spine, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82116D Nondisplaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with routine healing -S82116E Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with routine healing -S82116F Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82116G Nondisplaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with delayed healing -S82116H Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with delayed healing -S82116J Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82116K Nondisplaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with nonunion -S82116M Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with nonunion -S82116N Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82116P Nondisplaced fracture of unspecified tibial spine, subsequent encounter for closed fracture with malunion -S82116Q Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type I or II with malunion -S82116R Nondisplaced fracture of unspecified tibial spine, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82116S Nondisplaced fracture of unspecified tibial spine, sequela -S82121A Displaced fracture of lateral condyle of right tibia, initial encounter for closed fracture -S82121B Displaced fracture of lateral condyle of right tibia, initial encounter for open fracture type I or II -S82121C Displaced fracture of lateral condyle of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82121D Displaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with routine healing -S82121E Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82121F Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82121G Displaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with delayed healing -S82121H Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82121J Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82121K Displaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with nonunion -S82121M Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82121N Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82121P Displaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with malunion -S82121Q Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with malunion -S82121R Displaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82121S Displaced fracture of lateral condyle of right tibia, sequela -S82122A Displaced fracture of lateral condyle of left tibia, initial encounter for closed fracture -S82122B Displaced fracture of lateral condyle of left tibia, initial encounter for open fracture type I or II -S82122C Displaced fracture of lateral condyle of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82122D Displaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with routine healing -S82122E Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82122F Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82122G Displaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with delayed healing -S82122H Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82122J Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82122K Displaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with nonunion -S82122M Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82122N Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82122P Displaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with malunion -S82122Q Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with malunion -S82122R Displaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82122S Displaced fracture of lateral condyle of left tibia, sequela -S82123A Displaced fracture of lateral condyle of unspecified tibia, initial encounter for closed fracture -S82123B Displaced fracture of lateral condyle of unspecified tibia, initial encounter for open fracture type I or II -S82123C Displaced fracture of lateral condyle of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82123D Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82123E Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82123F Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82123G Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82123H Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82123J Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82123K Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82123M Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82123N Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82123P Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with malunion -S82123Q Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82123R Displaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82123S Displaced fracture of lateral condyle of unspecified tibia, sequela -S82124A Nondisplaced fracture of lateral condyle of right tibia, initial encounter for closed fracture -S82124B Nondisplaced fracture of lateral condyle of right tibia, initial encounter for open fracture type I or II -S82124C Nondisplaced fracture of lateral condyle of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82124D Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with routine healing -S82124E Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82124F Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82124G Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with delayed healing -S82124H Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82124J Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82124K Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with nonunion -S82124M Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82124N Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82124P Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for closed fracture with malunion -S82124Q Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type I or II with malunion -S82124R Nondisplaced fracture of lateral condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82124S Nondisplaced fracture of lateral condyle of right tibia, sequela -S82125A Nondisplaced fracture of lateral condyle of left tibia, initial encounter for closed fracture -S82125B Nondisplaced fracture of lateral condyle of left tibia, initial encounter for open fracture type I or II -S82125C Nondisplaced fracture of lateral condyle of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82125D Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with routine healing -S82125E Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82125F Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82125G Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with delayed healing -S82125H Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82125J Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82125K Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with nonunion -S82125M Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82125N Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82125P Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for closed fracture with malunion -S82125Q Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type I or II with malunion -S82125R Nondisplaced fracture of lateral condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82125S Nondisplaced fracture of lateral condyle of left tibia, sequela -S82126A Nondisplaced fracture of lateral condyle of unspecified tibia, initial encounter for closed fracture -S82126B Nondisplaced fracture of lateral condyle of unspecified tibia, initial encounter for open fracture type I or II -S82126C Nondisplaced fracture of lateral condyle of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82126D Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82126E Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82126F Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82126G Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82126H Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82126J Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82126K Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82126M Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82126N Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82126P Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for closed fracture with malunion -S82126Q Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82126R Nondisplaced fracture of lateral condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82126S Nondisplaced fracture of lateral condyle of unspecified tibia, sequela -S82131A Displaced fracture of medial condyle of right tibia, initial encounter for closed fracture -S82131B Displaced fracture of medial condyle of right tibia, initial encounter for open fracture type I or II -S82131C Displaced fracture of medial condyle of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82131D Displaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with routine healing -S82131E Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82131F Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82131G Displaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with delayed healing -S82131H Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82131J Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82131K Displaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with nonunion -S82131M Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82131N Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82131P Displaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with malunion -S82131Q Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with malunion -S82131R Displaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82131S Displaced fracture of medial condyle of right tibia, sequela -S82132A Displaced fracture of medial condyle of left tibia, initial encounter for closed fracture -S82132B Displaced fracture of medial condyle of left tibia, initial encounter for open fracture type I or II -S82132C Displaced fracture of medial condyle of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82132D Displaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with routine healing -S82132E Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82132F Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82132G Displaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with delayed healing -S82132H Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82132J Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82132K Displaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with nonunion -S82132M Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82132N Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82132P Displaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with malunion -S82132Q Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with malunion -S82132R Displaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82132S Displaced fracture of medial condyle of left tibia, sequela -S82133A Displaced fracture of medial condyle of unspecified tibia, initial encounter for closed fracture -S82133B Displaced fracture of medial condyle of unspecified tibia, initial encounter for open fracture type I or II -S82133C Displaced fracture of medial condyle of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82133D Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82133E Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82133F Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82133G Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82133H Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82133J Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82133K Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82133M Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82133N Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82133P Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with malunion -S82133Q Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82133R Displaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82133S Displaced fracture of medial condyle of unspecified tibia, sequela -S82134A Nondisplaced fracture of medial condyle of right tibia, initial encounter for closed fracture -S82134B Nondisplaced fracture of medial condyle of right tibia, initial encounter for open fracture type I or II -S82134C Nondisplaced fracture of medial condyle of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82134D Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with routine healing -S82134E Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82134F Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82134G Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with delayed healing -S82134H Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82134J Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82134K Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with nonunion -S82134M Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82134N Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82134P Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for closed fracture with malunion -S82134Q Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type I or II with malunion -S82134R Nondisplaced fracture of medial condyle of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82134S Nondisplaced fracture of medial condyle of right tibia, sequela -S82135A Nondisplaced fracture of medial condyle of left tibia, initial encounter for closed fracture -S82135B Nondisplaced fracture of medial condyle of left tibia, initial encounter for open fracture type I or II -S82135C Nondisplaced fracture of medial condyle of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82135D Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with routine healing -S82135E Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82135F Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82135G Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with delayed healing -S82135H Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82135J Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82135K Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with nonunion -S82135M Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82135N Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82135P Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for closed fracture with malunion -S82135Q Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type I or II with malunion -S82135R Nondisplaced fracture of medial condyle of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82135S Nondisplaced fracture of medial condyle of left tibia, sequela -S82136A Nondisplaced fracture of medial condyle of unspecified tibia, initial encounter for closed fracture -S82136B Nondisplaced fracture of medial condyle of unspecified tibia, initial encounter for open fracture type I or II -S82136C Nondisplaced fracture of medial condyle of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82136D Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82136E Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82136F Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82136G Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82136H Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82136J Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82136K Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82136M Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82136N Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82136P Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for closed fracture with malunion -S82136Q Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82136R Nondisplaced fracture of medial condyle of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82136S Nondisplaced fracture of medial condyle of unspecified tibia, sequela -S82141A Displaced bicondylar fracture of right tibia, initial encounter for closed fracture -S82141B Displaced bicondylar fracture of right tibia, initial encounter for open fracture type I or II -S82141C Displaced bicondylar fracture of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82141D Displaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with routine healing -S82141E Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82141F Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82141G Displaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with delayed healing -S82141H Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82141J Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82141K Displaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with nonunion -S82141M Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82141N Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82141P Displaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with malunion -S82141Q Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with malunion -S82141R Displaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82141S Displaced bicondylar fracture of right tibia, sequela -S82142A Displaced bicondylar fracture of left tibia, initial encounter for closed fracture -S82142B Displaced bicondylar fracture of left tibia, initial encounter for open fracture type I or II -S82142C Displaced bicondylar fracture of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82142D Displaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with routine healing -S82142E Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82142F Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82142G Displaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with delayed healing -S82142H Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82142J Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82142K Displaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with nonunion -S82142M Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82142N Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82142P Displaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with malunion -S82142Q Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with malunion -S82142R Displaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82142S Displaced bicondylar fracture of left tibia, sequela -S82143A Displaced bicondylar fracture of unspecified tibia, initial encounter for closed fracture -S82143B Displaced bicondylar fracture of unspecified tibia, initial encounter for open fracture type I or II -S82143C Displaced bicondylar fracture of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82143D Displaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82143E Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82143F Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82143G Displaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82143H Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82143J Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82143K Displaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82143M Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82143N Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82143P Displaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with malunion -S82143Q Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82143R Displaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82143S Displaced bicondylar fracture of unspecified tibia, sequela -S82144A Nondisplaced bicondylar fracture of right tibia, initial encounter for closed fracture -S82144B Nondisplaced bicondylar fracture of right tibia, initial encounter for open fracture type I or II -S82144C Nondisplaced bicondylar fracture of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82144D Nondisplaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with routine healing -S82144E Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82144F Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82144G Nondisplaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with delayed healing -S82144H Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82144J Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82144K Nondisplaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with nonunion -S82144M Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82144N Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82144P Nondisplaced bicondylar fracture of right tibia, subsequent encounter for closed fracture with malunion -S82144Q Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type I or II with malunion -S82144R Nondisplaced bicondylar fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82144S Nondisplaced bicondylar fracture of right tibia, sequela -S82145A Nondisplaced bicondylar fracture of left tibia, initial encounter for closed fracture -S82145B Nondisplaced bicondylar fracture of left tibia, initial encounter for open fracture type I or II -S82145C Nondisplaced bicondylar fracture of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82145D Nondisplaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with routine healing -S82145E Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82145F Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82145G Nondisplaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with delayed healing -S82145H Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82145J Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82145K Nondisplaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with nonunion -S82145M Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82145N Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82145P Nondisplaced bicondylar fracture of left tibia, subsequent encounter for closed fracture with malunion -S82145Q Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type I or II with malunion -S82145R Nondisplaced bicondylar fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82145S Nondisplaced bicondylar fracture of left tibia, sequela -S82146A Nondisplaced bicondylar fracture of unspecified tibia, initial encounter for closed fracture -S82146B Nondisplaced bicondylar fracture of unspecified tibia, initial encounter for open fracture type I or II -S82146C Nondisplaced bicondylar fracture of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82146D Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82146E Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82146F Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82146G Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82146H Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82146J Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82146K Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82146M Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82146N Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82146P Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for closed fracture with malunion -S82146Q Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82146R Nondisplaced bicondylar fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82146S Nondisplaced bicondylar fracture of unspecified tibia, sequela -S82151A Displaced fracture of right tibial tuberosity, initial encounter for closed fracture -S82151B Displaced fracture of right tibial tuberosity, initial encounter for open fracture type I or II -S82151C Displaced fracture of right tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82151D Displaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82151E Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82151F Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82151G Displaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82151H Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82151J Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82151K Displaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82151M Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82151N Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82151P Displaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with malunion -S82151Q Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82151R Displaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82151S Displaced fracture of right tibial tuberosity, sequela -S82152A Displaced fracture of left tibial tuberosity, initial encounter for closed fracture -S82152B Displaced fracture of left tibial tuberosity, initial encounter for open fracture type I or II -S82152C Displaced fracture of left tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82152D Displaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82152E Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82152F Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82152G Displaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82152H Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82152J Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82152K Displaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82152M Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82152N Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82152P Displaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with malunion -S82152Q Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82152R Displaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82152S Displaced fracture of left tibial tuberosity, sequela -S82153A Displaced fracture of unspecified tibial tuberosity, initial encounter for closed fracture -S82153B Displaced fracture of unspecified tibial tuberosity, initial encounter for open fracture type I or II -S82153C Displaced fracture of unspecified tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82153D Displaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82153E Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82153F Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82153G Displaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82153H Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82153J Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82153K Displaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82153M Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82153N Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82153P Displaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with malunion -S82153Q Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82153R Displaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82153S Displaced fracture of unspecified tibial tuberosity, sequela -S82154A Nondisplaced fracture of right tibial tuberosity, initial encounter for closed fracture -S82154B Nondisplaced fracture of right tibial tuberosity, initial encounter for open fracture type I or II -S82154C Nondisplaced fracture of right tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82154D Nondisplaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82154E Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82154F Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82154G Nondisplaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82154H Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82154J Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82154K Nondisplaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82154M Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82154N Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82154P Nondisplaced fracture of right tibial tuberosity, subsequent encounter for closed fracture with malunion -S82154Q Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82154R Nondisplaced fracture of right tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82154S Nondisplaced fracture of right tibial tuberosity, sequela -S82155A Nondisplaced fracture of left tibial tuberosity, initial encounter for closed fracture -S82155B Nondisplaced fracture of left tibial tuberosity, initial encounter for open fracture type I or II -S82155C Nondisplaced fracture of left tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82155D Nondisplaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82155E Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82155F Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82155G Nondisplaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82155H Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82155J Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82155K Nondisplaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82155M Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82155N Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82155P Nondisplaced fracture of left tibial tuberosity, subsequent encounter for closed fracture with malunion -S82155Q Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82155R Nondisplaced fracture of left tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82155S Nondisplaced fracture of left tibial tuberosity, sequela -S82156A Nondisplaced fracture of unspecified tibial tuberosity, initial encounter for closed fracture -S82156B Nondisplaced fracture of unspecified tibial tuberosity, initial encounter for open fracture type I or II -S82156C Nondisplaced fracture of unspecified tibial tuberosity, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82156D Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with routine healing -S82156E Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with routine healing -S82156F Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82156G Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with delayed healing -S82156H Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with delayed healing -S82156J Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82156K Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with nonunion -S82156M Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with nonunion -S82156N Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82156P Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for closed fracture with malunion -S82156Q Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type I or II with malunion -S82156R Nondisplaced fracture of unspecified tibial tuberosity, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82156S Nondisplaced fracture of unspecified tibial tuberosity, sequela -S82161A Torus fracture of upper end of right tibia, initial encounter for closed fracture -S82161D Torus fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S82161G Torus fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S82161K Torus fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S82161P Torus fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S82161S Torus fracture of upper end of right tibia, sequela -S82162A Torus fracture of upper end of left tibia, initial encounter for closed fracture -S82162D Torus fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S82162G Torus fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S82162K Torus fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S82162P Torus fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S82162S Torus fracture of upper end of left tibia, sequela -S82169A Torus fracture of upper end of unspecified tibia, initial encounter for closed fracture -S82169D Torus fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S82169G Torus fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S82169K Torus fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S82169P Torus fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S82169S Torus fracture of upper end of unspecified tibia, sequela -S82191A Other fracture of upper end of right tibia, initial encounter for closed fracture -S82191B Other fracture of upper end of right tibia, initial encounter for open fracture type I or II -S82191C Other fracture of upper end of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82191D Other fracture of upper end of right tibia, subsequent encounter for closed fracture with routine healing -S82191E Other fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82191F Other fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82191G Other fracture of upper end of right tibia, subsequent encounter for closed fracture with delayed healing -S82191H Other fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82191J Other fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82191K Other fracture of upper end of right tibia, subsequent encounter for closed fracture with nonunion -S82191M Other fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82191N Other fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82191P Other fracture of upper end of right tibia, subsequent encounter for closed fracture with malunion -S82191Q Other fracture of upper end of right tibia, subsequent encounter for open fracture type I or II with malunion -S82191R Other fracture of upper end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82191S Other fracture of upper end of right tibia, sequela -S82192A Other fracture of upper end of left tibia, initial encounter for closed fracture -S82192B Other fracture of upper end of left tibia, initial encounter for open fracture type I or II -S82192C Other fracture of upper end of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82192D Other fracture of upper end of left tibia, subsequent encounter for closed fracture with routine healing -S82192E Other fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82192F Other fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82192G Other fracture of upper end of left tibia, subsequent encounter for closed fracture with delayed healing -S82192H Other fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82192J Other fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82192K Other fracture of upper end of left tibia, subsequent encounter for closed fracture with nonunion -S82192M Other fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82192N Other fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82192P Other fracture of upper end of left tibia, subsequent encounter for closed fracture with malunion -S82192Q Other fracture of upper end of left tibia, subsequent encounter for open fracture type I or II with malunion -S82192R Other fracture of upper end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82192S Other fracture of upper end of left tibia, sequela -S82199A Other fracture of upper end of unspecified tibia, initial encounter for closed fracture -S82199B Other fracture of upper end of unspecified tibia, initial encounter for open fracture type I or II -S82199C Other fracture of upper end of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82199D Other fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82199E Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82199F Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82199G Other fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82199H Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82199J Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82199K Other fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82199M Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82199N Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82199P Other fracture of upper end of unspecified tibia, subsequent encounter for closed fracture with malunion -S82199Q Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82199R Other fracture of upper end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82199S Other fracture of upper end of unspecified tibia, sequela -S82201A Unspecified fracture of shaft of right tibia, initial encounter for closed fracture -S82201B Unspecified fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82201C Unspecified fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82201D Unspecified fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82201E Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82201F Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82201G Unspecified fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82201H Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82201J Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82201K Unspecified fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82201M Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82201N Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82201P Unspecified fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82201Q Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82201R Unspecified fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82201S Unspecified fracture of shaft of right tibia, sequela -S82202A Unspecified fracture of shaft of left tibia, initial encounter for closed fracture -S82202B Unspecified fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82202C Unspecified fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82202D Unspecified fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82202E Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82202F Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82202G Unspecified fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82202H Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82202J Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82202K Unspecified fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82202M Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82202N Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82202P Unspecified fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82202Q Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82202R Unspecified fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82202S Unspecified fracture of shaft of left tibia, sequela -S82209A Unspecified fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82209B Unspecified fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82209C Unspecified fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82209D Unspecified fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82209E Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82209F Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82209G Unspecified fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82209H Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82209J Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82209K Unspecified fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82209M Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82209N Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82209P Unspecified fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82209Q Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82209R Unspecified fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82209S Unspecified fracture of shaft of unspecified tibia, sequela -S82221A Displaced transverse fracture of shaft of right tibia, initial encounter for closed fracture -S82221B Displaced transverse fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82221C Displaced transverse fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82221D Displaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82221E Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82221F Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82221G Displaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82221H Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82221J Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82221K Displaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82221M Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82221N Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82221P Displaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82221Q Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82221R Displaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82221S Displaced transverse fracture of shaft of right tibia, sequela -S82222A Displaced transverse fracture of shaft of left tibia, initial encounter for closed fracture -S82222B Displaced transverse fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82222C Displaced transverse fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82222D Displaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82222E Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82222F Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82222G Displaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82222H Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82222J Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82222K Displaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82222M Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82222N Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82222P Displaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82222Q Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82222R Displaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82222S Displaced transverse fracture of shaft of left tibia, sequela -S82223A Displaced transverse fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82223B Displaced transverse fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82223C Displaced transverse fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82223D Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82223E Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82223F Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82223G Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82223H Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82223J Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82223K Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82223M Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82223N Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82223P Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82223Q Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82223R Displaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82223S Displaced transverse fracture of shaft of unspecified tibia, sequela -S82224A Nondisplaced transverse fracture of shaft of right tibia, initial encounter for closed fracture -S82224B Nondisplaced transverse fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82224C Nondisplaced transverse fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82224D Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82224E Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82224F Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82224G Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82224H Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82224J Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82224K Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82224M Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82224N Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82224P Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82224Q Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82224R Nondisplaced transverse fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82224S Nondisplaced transverse fracture of shaft of right tibia, sequela -S82225A Nondisplaced transverse fracture of shaft of left tibia, initial encounter for closed fracture -S82225B Nondisplaced transverse fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82225C Nondisplaced transverse fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82225D Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82225E Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82225F Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82225G Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82225H Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82225J Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82225K Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82225M Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82225N Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82225P Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82225Q Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82225R Nondisplaced transverse fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82225S Nondisplaced transverse fracture of shaft of left tibia, sequela -S82226A Nondisplaced transverse fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82226B Nondisplaced transverse fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82226C Nondisplaced transverse fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82226D Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82226E Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82226F Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82226G Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82226H Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82226J Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82226K Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82226M Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82226N Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82226P Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82226Q Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82226R Nondisplaced transverse fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82226S Nondisplaced transverse fracture of shaft of unspecified tibia, sequela -S82231A Displaced oblique fracture of shaft of right tibia, initial encounter for closed fracture -S82231B Displaced oblique fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82231C Displaced oblique fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82231D Displaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82231E Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82231F Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82231G Displaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82231H Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82231J Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82231K Displaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82231M Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82231N Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82231P Displaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82231Q Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82231R Displaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82231S Displaced oblique fracture of shaft of right tibia, sequela -S82232A Displaced oblique fracture of shaft of left tibia, initial encounter for closed fracture -S82232B Displaced oblique fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82232C Displaced oblique fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82232D Displaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82232E Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82232F Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82232G Displaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82232H Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82232J Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82232K Displaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82232M Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82232N Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82232P Displaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82232Q Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82232R Displaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82232S Displaced oblique fracture of shaft of left tibia, sequela -S82233A Displaced oblique fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82233B Displaced oblique fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82233C Displaced oblique fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82233D Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82233E Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82233F Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82233G Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82233H Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82233J Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82233K Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82233M Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82233N Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82233P Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82233Q Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82233R Displaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82233S Displaced oblique fracture of shaft of unspecified tibia, sequela -S82234A Nondisplaced oblique fracture of shaft of right tibia, initial encounter for closed fracture -S82234B Nondisplaced oblique fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82234C Nondisplaced oblique fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82234D Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82234E Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82234F Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82234G Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82234H Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82234J Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82234K Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82234M Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82234N Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82234P Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82234Q Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82234R Nondisplaced oblique fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82234S Nondisplaced oblique fracture of shaft of right tibia, sequela -S82235A Nondisplaced oblique fracture of shaft of left tibia, initial encounter for closed fracture -S82235B Nondisplaced oblique fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82235C Nondisplaced oblique fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82235D Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82235E Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82235F Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82235G Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82235H Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82235J Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82235K Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82235M Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82235N Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82235P Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82235Q Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82235R Nondisplaced oblique fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82235S Nondisplaced oblique fracture of shaft of left tibia, sequela -S82236A Nondisplaced oblique fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82236B Nondisplaced oblique fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82236C Nondisplaced oblique fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82236D Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82236E Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82236F Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82236G Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82236H Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82236J Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82236K Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82236M Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82236N Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82236P Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82236Q Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82236R Nondisplaced oblique fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82236S Nondisplaced oblique fracture of shaft of unspecified tibia, sequela -S82241A Displaced spiral fracture of shaft of right tibia, initial encounter for closed fracture -S82241B Displaced spiral fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82241C Displaced spiral fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82241D Displaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82241E Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82241F Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82241G Displaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82241H Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82241J Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82241K Displaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82241M Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82241N Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82241P Displaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82241Q Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82241R Displaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82241S Displaced spiral fracture of shaft of right tibia, sequela -S82242A Displaced spiral fracture of shaft of left tibia, initial encounter for closed fracture -S82242B Displaced spiral fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82242C Displaced spiral fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82242D Displaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82242E Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82242F Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82242G Displaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82242H Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82242J Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82242K Displaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82242M Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82242N Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82242P Displaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82242Q Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82242R Displaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82242S Displaced spiral fracture of shaft of left tibia, sequela -S82243A Displaced spiral fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82243B Displaced spiral fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82243C Displaced spiral fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82243D Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82243E Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82243F Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82243G Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82243H Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82243J Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82243K Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82243M Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82243N Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82243P Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82243Q Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82243R Displaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82243S Displaced spiral fracture of shaft of unspecified tibia, sequela -S82244A Nondisplaced spiral fracture of shaft of right tibia, initial encounter for closed fracture -S82244B Nondisplaced spiral fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82244C Nondisplaced spiral fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82244D Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82244E Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82244F Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82244G Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82244H Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82244J Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82244K Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82244M Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82244N Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82244P Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82244Q Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82244R Nondisplaced spiral fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82244S Nondisplaced spiral fracture of shaft of right tibia, sequela -S82245A Nondisplaced spiral fracture of shaft of left tibia, initial encounter for closed fracture -S82245B Nondisplaced spiral fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82245C Nondisplaced spiral fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82245D Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82245E Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82245F Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82245G Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82245H Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82245J Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82245K Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82245M Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82245N Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82245P Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82245Q Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82245R Nondisplaced spiral fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82245S Nondisplaced spiral fracture of shaft of left tibia, sequela -S82246A Nondisplaced spiral fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82246B Nondisplaced spiral fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82246C Nondisplaced spiral fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82246D Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82246E Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82246F Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82246G Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82246H Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82246J Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82246K Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82246M Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82246N Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82246P Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82246Q Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82246R Nondisplaced spiral fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82246S Nondisplaced spiral fracture of shaft of unspecified tibia, sequela -S82251A Displaced comminuted fracture of shaft of right tibia, initial encounter for closed fracture -S82251B Displaced comminuted fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82251C Displaced comminuted fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82251D Displaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82251E Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82251F Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82251G Displaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82251H Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82251J Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82251K Displaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82251M Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82251N Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82251P Displaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82251Q Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82251R Displaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82251S Displaced comminuted fracture of shaft of right tibia, sequela -S82252A Displaced comminuted fracture of shaft of left tibia, initial encounter for closed fracture -S82252B Displaced comminuted fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82252C Displaced comminuted fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82252D Displaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82252E Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82252F Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82252G Displaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82252H Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82252J Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82252K Displaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82252M Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82252N Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82252P Displaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82252Q Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82252R Displaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82252S Displaced comminuted fracture of shaft of left tibia, sequela -S82253A Displaced comminuted fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82253B Displaced comminuted fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82253C Displaced comminuted fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82253D Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82253E Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82253F Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82253G Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82253H Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82253J Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82253K Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82253M Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82253N Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82253P Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82253Q Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82253R Displaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82253S Displaced comminuted fracture of shaft of unspecified tibia, sequela -S82254A Nondisplaced comminuted fracture of shaft of right tibia, initial encounter for closed fracture -S82254B Nondisplaced comminuted fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82254C Nondisplaced comminuted fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82254D Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82254E Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82254F Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82254G Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82254H Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82254J Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82254K Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82254M Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82254N Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82254P Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82254Q Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82254R Nondisplaced comminuted fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82254S Nondisplaced comminuted fracture of shaft of right tibia, sequela -S82255A Nondisplaced comminuted fracture of shaft of left tibia, initial encounter for closed fracture -S82255B Nondisplaced comminuted fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82255C Nondisplaced comminuted fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82255D Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82255E Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82255F Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82255G Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82255H Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82255J Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82255K Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82255M Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82255N Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82255P Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82255Q Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82255R Nondisplaced comminuted fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82255S Nondisplaced comminuted fracture of shaft of left tibia, sequela -S82256A Nondisplaced comminuted fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82256B Nondisplaced comminuted fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82256C Nondisplaced comminuted fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82256D Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82256E Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82256F Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82256G Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82256H Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82256J Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82256K Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82256M Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82256N Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82256P Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82256Q Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82256R Nondisplaced comminuted fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82256S Nondisplaced comminuted fracture of shaft of unspecified tibia, sequela -S82261A Displaced segmental fracture of shaft of right tibia, initial encounter for closed fracture -S82261B Displaced segmental fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82261C Displaced segmental fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82261D Displaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82261E Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82261F Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82261G Displaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82261H Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82261J Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82261K Displaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82261M Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82261N Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82261P Displaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82261Q Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82261R Displaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82261S Displaced segmental fracture of shaft of right tibia, sequela -S82262A Displaced segmental fracture of shaft of left tibia, initial encounter for closed fracture -S82262B Displaced segmental fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82262C Displaced segmental fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82262D Displaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82262E Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82262F Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82262G Displaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82262H Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82262J Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82262K Displaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82262M Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82262N Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82262P Displaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82262Q Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82262R Displaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82262S Displaced segmental fracture of shaft of left tibia, sequela -S82263A Displaced segmental fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82263B Displaced segmental fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82263C Displaced segmental fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82263D Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82263E Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82263F Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82263G Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82263H Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82263J Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82263K Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82263M Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82263N Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82263P Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82263Q Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82263R Displaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82263S Displaced segmental fracture of shaft of unspecified tibia, sequela -S82264A Nondisplaced segmental fracture of shaft of right tibia, initial encounter for closed fracture -S82264B Nondisplaced segmental fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82264C Nondisplaced segmental fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82264D Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82264E Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82264F Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82264G Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82264H Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82264J Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82264K Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82264M Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82264N Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82264P Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82264Q Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82264R Nondisplaced segmental fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82264S Nondisplaced segmental fracture of shaft of right tibia, sequela -S82265A Nondisplaced segmental fracture of shaft of left tibia, initial encounter for closed fracture -S82265B Nondisplaced segmental fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82265C Nondisplaced segmental fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82265D Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82265E Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82265F Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82265G Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82265H Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82265J Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82265K Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82265M Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82265N Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82265P Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82265Q Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82265R Nondisplaced segmental fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82265S Nondisplaced segmental fracture of shaft of left tibia, sequela -S82266A Nondisplaced segmental fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82266B Nondisplaced segmental fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82266C Nondisplaced segmental fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82266D Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82266E Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82266F Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82266G Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82266H Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82266J Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82266K Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82266M Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82266N Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82266P Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82266Q Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82266R Nondisplaced segmental fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82266S Nondisplaced segmental fracture of shaft of unspecified tibia, sequela -S82291A Other fracture of shaft of right tibia, initial encounter for closed fracture -S82291B Other fracture of shaft of right tibia, initial encounter for open fracture type I or II -S82291C Other fracture of shaft of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82291D Other fracture of shaft of right tibia, subsequent encounter for closed fracture with routine healing -S82291E Other fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82291F Other fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82291G Other fracture of shaft of right tibia, subsequent encounter for closed fracture with delayed healing -S82291H Other fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82291J Other fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82291K Other fracture of shaft of right tibia, subsequent encounter for closed fracture with nonunion -S82291M Other fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82291N Other fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82291P Other fracture of shaft of right tibia, subsequent encounter for closed fracture with malunion -S82291Q Other fracture of shaft of right tibia, subsequent encounter for open fracture type I or II with malunion -S82291R Other fracture of shaft of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82291S Other fracture of shaft of right tibia, sequela -S82292A Other fracture of shaft of left tibia, initial encounter for closed fracture -S82292B Other fracture of shaft of left tibia, initial encounter for open fracture type I or II -S82292C Other fracture of shaft of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82292D Other fracture of shaft of left tibia, subsequent encounter for closed fracture with routine healing -S82292E Other fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82292F Other fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82292G Other fracture of shaft of left tibia, subsequent encounter for closed fracture with delayed healing -S82292H Other fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82292J Other fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82292K Other fracture of shaft of left tibia, subsequent encounter for closed fracture with nonunion -S82292M Other fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82292N Other fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82292P Other fracture of shaft of left tibia, subsequent encounter for closed fracture with malunion -S82292Q Other fracture of shaft of left tibia, subsequent encounter for open fracture type I or II with malunion -S82292R Other fracture of shaft of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82292S Other fracture of shaft of left tibia, sequela -S82299A Other fracture of shaft of unspecified tibia, initial encounter for closed fracture -S82299B Other fracture of shaft of unspecified tibia, initial encounter for open fracture type I or II -S82299C Other fracture of shaft of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82299D Other fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82299E Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82299F Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82299G Other fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82299H Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82299J Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82299K Other fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82299M Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82299N Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82299P Other fracture of shaft of unspecified tibia, subsequent encounter for closed fracture with malunion -S82299Q Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82299R Other fracture of shaft of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82299S Other fracture of shaft of unspecified tibia, sequela -S82301A Unspecified fracture of lower end of right tibia, initial encounter for closed fracture -S82301B Unspecified fracture of lower end of right tibia, initial encounter for open fracture type I or II -S82301C Unspecified fracture of lower end of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82301D Unspecified fracture of lower end of right tibia, subsequent encounter for closed fracture with routine healing -S82301E Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82301F Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82301G Unspecified fracture of lower end of right tibia, subsequent encounter for closed fracture with delayed healing -S82301H Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82301J Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82301K Unspecified fracture of lower end of right tibia, subsequent encounter for closed fracture with nonunion -S82301M Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82301N Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82301P Unspecified fracture of lower end of right tibia, subsequent encounter for closed fracture with malunion -S82301Q Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with malunion -S82301R Unspecified fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82301S Unspecified fracture of lower end of right tibia, sequela -S82302A Unspecified fracture of lower end of left tibia, initial encounter for closed fracture -S82302B Unspecified fracture of lower end of left tibia, initial encounter for open fracture type I or II -S82302C Unspecified fracture of lower end of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82302D Unspecified fracture of lower end of left tibia, subsequent encounter for closed fracture with routine healing -S82302E Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82302F Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82302G Unspecified fracture of lower end of left tibia, subsequent encounter for closed fracture with delayed healing -S82302H Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82302J Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82302K Unspecified fracture of lower end of left tibia, subsequent encounter for closed fracture with nonunion -S82302M Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82302N Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82302P Unspecified fracture of lower end of left tibia, subsequent encounter for closed fracture with malunion -S82302Q Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with malunion -S82302R Unspecified fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82302S Unspecified fracture of lower end of left tibia, sequela -S82309A Unspecified fracture of lower end of unspecified tibia, initial encounter for closed fracture -S82309B Unspecified fracture of lower end of unspecified tibia, initial encounter for open fracture type I or II -S82309C Unspecified fracture of lower end of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82309D Unspecified fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82309E Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82309F Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82309G Unspecified fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82309H Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82309J Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82309K Unspecified fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82309M Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82309N Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82309P Unspecified fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with malunion -S82309Q Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82309R Unspecified fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82309S Unspecified fracture of lower end of unspecified tibia, sequela -S82311A Torus fracture of lower end of right tibia, initial encounter for closed fracture -S82311D Torus fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S82311G Torus fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S82311K Torus fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S82311P Torus fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S82311S Torus fracture of lower end of right tibia, sequela -S82312A Torus fracture of lower end of left tibia, initial encounter for closed fracture -S82312D Torus fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S82312G Torus fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S82312K Torus fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S82312P Torus fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S82312S Torus fracture of lower end of left tibia, sequela -S82319A Torus fracture of lower end of unspecified tibia, initial encounter for closed fracture -S82319D Torus fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S82319G Torus fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S82319K Torus fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S82319P Torus fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S82319S Torus fracture of lower end of unspecified tibia, sequela -S82391A Other fracture of lower end of right tibia, initial encounter for closed fracture -S82391B Other fracture of lower end of right tibia, initial encounter for open fracture type I or II -S82391C Other fracture of lower end of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82391D Other fracture of lower end of right tibia, subsequent encounter for closed fracture with routine healing -S82391E Other fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82391F Other fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82391G Other fracture of lower end of right tibia, subsequent encounter for closed fracture with delayed healing -S82391H Other fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82391J Other fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82391K Other fracture of lower end of right tibia, subsequent encounter for closed fracture with nonunion -S82391M Other fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82391N Other fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82391P Other fracture of lower end of right tibia, subsequent encounter for closed fracture with malunion -S82391Q Other fracture of lower end of right tibia, subsequent encounter for open fracture type I or II with malunion -S82391R Other fracture of lower end of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82391S Other fracture of lower end of right tibia, sequela -S82392A Other fracture of lower end of left tibia, initial encounter for closed fracture -S82392B Other fracture of lower end of left tibia, initial encounter for open fracture type I or II -S82392C Other fracture of lower end of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82392D Other fracture of lower end of left tibia, subsequent encounter for closed fracture with routine healing -S82392E Other fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82392F Other fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82392G Other fracture of lower end of left tibia, subsequent encounter for closed fracture with delayed healing -S82392H Other fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82392J Other fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82392K Other fracture of lower end of left tibia, subsequent encounter for closed fracture with nonunion -S82392M Other fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82392N Other fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82392P Other fracture of lower end of left tibia, subsequent encounter for closed fracture with malunion -S82392Q Other fracture of lower end of left tibia, subsequent encounter for open fracture type I or II with malunion -S82392R Other fracture of lower end of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82392S Other fracture of lower end of left tibia, sequela -S82399A Other fracture of lower end of unspecified tibia, initial encounter for closed fracture -S82399B Other fracture of lower end of unspecified tibia, initial encounter for open fracture type I or II -S82399C Other fracture of lower end of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82399D Other fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82399E Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82399F Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82399G Other fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82399H Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82399J Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82399K Other fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82399M Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82399N Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82399P Other fracture of lower end of unspecified tibia, subsequent encounter for closed fracture with malunion -S82399Q Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82399R Other fracture of lower end of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82399S Other fracture of lower end of unspecified tibia, sequela -S82401A Unspecified fracture of shaft of right fibula, initial encounter for closed fracture -S82401B Unspecified fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82401C Unspecified fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82401D Unspecified fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82401E Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82401F Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82401G Unspecified fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82401H Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82401J Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82401K Unspecified fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82401M Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82401N Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82401P Unspecified fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82401Q Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82401R Unspecified fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82401S Unspecified fracture of shaft of right fibula, sequela -S82402A Unspecified fracture of shaft of left fibula, initial encounter for closed fracture -S82402B Unspecified fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82402C Unspecified fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82402D Unspecified fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82402E Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82402F Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82402G Unspecified fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82402H Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82402J Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82402K Unspecified fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82402M Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82402N Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82402P Unspecified fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82402Q Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82402R Unspecified fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82402S Unspecified fracture of shaft of left fibula, sequela -S82409A Unspecified fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82409B Unspecified fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82409C Unspecified fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82409D Unspecified fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82409E Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82409F Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82409G Unspecified fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82409H Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82409J Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82409K Unspecified fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82409M Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82409N Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82409P Unspecified fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82409Q Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82409R Unspecified fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82409S Unspecified fracture of shaft of unspecified fibula, sequela -S82421A Displaced transverse fracture of shaft of right fibula, initial encounter for closed fracture -S82421B Displaced transverse fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82421C Displaced transverse fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82421D Displaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82421E Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82421F Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82421G Displaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82421H Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82421J Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82421K Displaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82421M Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82421N Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82421P Displaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82421Q Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82421R Displaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82421S Displaced transverse fracture of shaft of right fibula, sequela -S82422A Displaced transverse fracture of shaft of left fibula, initial encounter for closed fracture -S82422B Displaced transverse fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82422C Displaced transverse fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82422D Displaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82422E Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82422F Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82422G Displaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82422H Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82422J Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82422K Displaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82422M Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82422N Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82422P Displaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82422Q Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82422R Displaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82422S Displaced transverse fracture of shaft of left fibula, sequela -S82423A Displaced transverse fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82423B Displaced transverse fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82423C Displaced transverse fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82423D Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82423E Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82423F Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82423G Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82423H Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82423J Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82423K Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82423M Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82423N Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82423P Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82423Q Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82423R Displaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82423S Displaced transverse fracture of shaft of unspecified fibula, sequela -S82424A Nondisplaced transverse fracture of shaft of right fibula, initial encounter for closed fracture -S82424B Nondisplaced transverse fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82424C Nondisplaced transverse fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82424D Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82424E Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82424F Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82424G Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82424H Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82424J Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82424K Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82424M Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82424N Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82424P Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82424Q Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82424R Nondisplaced transverse fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82424S Nondisplaced transverse fracture of shaft of right fibula, sequela -S82425A Nondisplaced transverse fracture of shaft of left fibula, initial encounter for closed fracture -S82425B Nondisplaced transverse fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82425C Nondisplaced transverse fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82425D Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82425E Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82425F Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82425G Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82425H Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82425J Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82425K Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82425M Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82425N Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82425P Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82425Q Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82425R Nondisplaced transverse fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82425S Nondisplaced transverse fracture of shaft of left fibula, sequela -S82426A Nondisplaced transverse fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82426B Nondisplaced transverse fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82426C Nondisplaced transverse fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82426D Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82426E Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82426F Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82426G Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82426H Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82426J Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82426K Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82426M Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82426N Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82426P Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82426Q Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82426R Nondisplaced transverse fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82426S Nondisplaced transverse fracture of shaft of unspecified fibula, sequela -S82431A Displaced oblique fracture of shaft of right fibula, initial encounter for closed fracture -S82431B Displaced oblique fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82431C Displaced oblique fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82431D Displaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82431E Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82431F Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82431G Displaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82431H Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82431J Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82431K Displaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82431M Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82431N Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82431P Displaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82431Q Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82431R Displaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82431S Displaced oblique fracture of shaft of right fibula, sequela -S82432A Displaced oblique fracture of shaft of left fibula, initial encounter for closed fracture -S82432B Displaced oblique fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82432C Displaced oblique fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82432D Displaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82432E Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82432F Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82432G Displaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82432H Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82432J Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82432K Displaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82432M Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82432N Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82432P Displaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82432Q Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82432R Displaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82432S Displaced oblique fracture of shaft of left fibula, sequela -S82433A Displaced oblique fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82433B Displaced oblique fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82433C Displaced oblique fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82433D Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82433E Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82433F Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82433G Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82433H Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82433J Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82433K Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82433M Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82433N Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82433P Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82433Q Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82433R Displaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82433S Displaced oblique fracture of shaft of unspecified fibula, sequela -S82434A Nondisplaced oblique fracture of shaft of right fibula, initial encounter for closed fracture -S82434B Nondisplaced oblique fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82434C Nondisplaced oblique fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82434D Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82434E Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82434F Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82434G Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82434H Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82434J Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82434K Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82434M Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82434N Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82434P Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82434Q Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82434R Nondisplaced oblique fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82434S Nondisplaced oblique fracture of shaft of right fibula, sequela -S82435A Nondisplaced oblique fracture of shaft of left fibula, initial encounter for closed fracture -S82435B Nondisplaced oblique fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82435C Nondisplaced oblique fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82435D Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82435E Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82435F Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82435G Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82435H Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82435J Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82435K Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82435M Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82435N Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82435P Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82435Q Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82435R Nondisplaced oblique fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82435S Nondisplaced oblique fracture of shaft of left fibula, sequela -S82436A Nondisplaced oblique fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82436B Nondisplaced oblique fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82436C Nondisplaced oblique fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82436D Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82436E Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82436F Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82436G Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82436H Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82436J Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82436K Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82436M Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82436N Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82436P Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82436Q Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82436R Nondisplaced oblique fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82436S Nondisplaced oblique fracture of shaft of unspecified fibula, sequela -S82441A Displaced spiral fracture of shaft of right fibula, initial encounter for closed fracture -S82441B Displaced spiral fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82441C Displaced spiral fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82441D Displaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82441E Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82441F Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82441G Displaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82441H Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82441J Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82441K Displaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82441M Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82441N Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82441P Displaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82441Q Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82441R Displaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82441S Displaced spiral fracture of shaft of right fibula, sequela -S82442A Displaced spiral fracture of shaft of left fibula, initial encounter for closed fracture -S82442B Displaced spiral fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82442C Displaced spiral fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82442D Displaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82442E Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82442F Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82442G Displaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82442H Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82442J Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82442K Displaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82442M Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82442N Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82442P Displaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82442Q Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82442R Displaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82442S Displaced spiral fracture of shaft of left fibula, sequela -S82443A Displaced spiral fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82443B Displaced spiral fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82443C Displaced spiral fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82443D Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82443E Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82443F Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82443G Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82443H Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82443J Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82443K Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82443M Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82443N Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82443P Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82443Q Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82443R Displaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82443S Displaced spiral fracture of shaft of unspecified fibula, sequela -S82444A Nondisplaced spiral fracture of shaft of right fibula, initial encounter for closed fracture -S82444B Nondisplaced spiral fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82444C Nondisplaced spiral fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82444D Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82444E Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82444F Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82444G Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82444H Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82444J Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82444K Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82444M Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82444N Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82444P Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82444Q Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82444R Nondisplaced spiral fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82444S Nondisplaced spiral fracture of shaft of right fibula, sequela -S82445A Nondisplaced spiral fracture of shaft of left fibula, initial encounter for closed fracture -S82445B Nondisplaced spiral fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82445C Nondisplaced spiral fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82445D Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82445E Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82445F Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82445G Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82445H Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82445J Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82445K Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82445M Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82445N Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82445P Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82445Q Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82445R Nondisplaced spiral fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82445S Nondisplaced spiral fracture of shaft of left fibula, sequela -S82446A Nondisplaced spiral fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82446B Nondisplaced spiral fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82446C Nondisplaced spiral fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82446D Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82446E Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82446F Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82446G Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82446H Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82446J Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82446K Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82446M Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82446N Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82446P Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82446Q Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82446R Nondisplaced spiral fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82446S Nondisplaced spiral fracture of shaft of unspecified fibula, sequela -S82451A Displaced comminuted fracture of shaft of right fibula, initial encounter for closed fracture -S82451B Displaced comminuted fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82451C Displaced comminuted fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82451D Displaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82451E Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82451F Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82451G Displaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82451H Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82451J Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82451K Displaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82451M Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82451N Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82451P Displaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82451Q Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82451R Displaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82451S Displaced comminuted fracture of shaft of right fibula, sequela -S82452A Displaced comminuted fracture of shaft of left fibula, initial encounter for closed fracture -S82452B Displaced comminuted fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82452C Displaced comminuted fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82452D Displaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82452E Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82452F Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82452G Displaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82452H Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82452J Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82452K Displaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82452M Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82452N Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82452P Displaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82452Q Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82452R Displaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82452S Displaced comminuted fracture of shaft of left fibula, sequela -S82453A Displaced comminuted fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82453B Displaced comminuted fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82453C Displaced comminuted fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82453D Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82453E Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82453F Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82453G Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82453H Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82453J Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82453K Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82453M Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82453N Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82453P Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82453Q Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82453R Displaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82453S Displaced comminuted fracture of shaft of unspecified fibula, sequela -S82454A Nondisplaced comminuted fracture of shaft of right fibula, initial encounter for closed fracture -S82454B Nondisplaced comminuted fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82454C Nondisplaced comminuted fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82454D Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82454E Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82454F Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82454G Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82454H Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82454J Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82454K Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82454M Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82454N Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82454P Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82454Q Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82454R Nondisplaced comminuted fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82454S Nondisplaced comminuted fracture of shaft of right fibula, sequela -S82455A Nondisplaced comminuted fracture of shaft of left fibula, initial encounter for closed fracture -S82455B Nondisplaced comminuted fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82455C Nondisplaced comminuted fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82455D Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82455E Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82455F Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82455G Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82455H Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82455J Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82455K Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82455M Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82455N Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82455P Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82455Q Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82455R Nondisplaced comminuted fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82455S Nondisplaced comminuted fracture of shaft of left fibula, sequela -S82456A Nondisplaced comminuted fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82456B Nondisplaced comminuted fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82456C Nondisplaced comminuted fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82456D Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82456E Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82456F Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82456G Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82456H Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82456J Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82456K Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82456M Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82456N Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82456P Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82456Q Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82456R Nondisplaced comminuted fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82456S Nondisplaced comminuted fracture of shaft of unspecified fibula, sequela -S82461A Displaced segmental fracture of shaft of right fibula, initial encounter for closed fracture -S82461B Displaced segmental fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82461C Displaced segmental fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82461D Displaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82461E Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82461F Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82461G Displaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82461H Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82461J Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82461K Displaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82461M Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82461N Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82461P Displaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82461Q Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82461R Displaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82461S Displaced segmental fracture of shaft of right fibula, sequela -S82462A Displaced segmental fracture of shaft of left fibula, initial encounter for closed fracture -S82462B Displaced segmental fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82462C Displaced segmental fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82462D Displaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82462E Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82462F Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82462G Displaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82462H Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82462J Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82462K Displaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82462M Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82462N Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82462P Displaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82462Q Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82462R Displaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82462S Displaced segmental fracture of shaft of left fibula, sequela -S82463A Displaced segmental fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82463B Displaced segmental fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82463C Displaced segmental fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82463D Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82463E Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82463F Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82463G Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82463H Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82463J Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82463K Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82463M Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82463N Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82463P Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82463Q Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82463R Displaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82463S Displaced segmental fracture of shaft of unspecified fibula, sequela -S82464A Nondisplaced segmental fracture of shaft of right fibula, initial encounter for closed fracture -S82464B Nondisplaced segmental fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82464C Nondisplaced segmental fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82464D Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82464E Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82464F Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82464G Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82464H Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82464J Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82464K Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82464M Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82464N Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82464P Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82464Q Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82464R Nondisplaced segmental fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82464S Nondisplaced segmental fracture of shaft of right fibula, sequela -S82465A Nondisplaced segmental fracture of shaft of left fibula, initial encounter for closed fracture -S82465B Nondisplaced segmental fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82465C Nondisplaced segmental fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82465D Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82465E Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82465F Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82465G Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82465H Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82465J Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82465K Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82465M Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82465N Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82465P Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82465Q Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82465R Nondisplaced segmental fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82465S Nondisplaced segmental fracture of shaft of left fibula, sequela -S82466A Nondisplaced segmental fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82466B Nondisplaced segmental fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82466C Nondisplaced segmental fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82466D Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82466E Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82466F Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82466G Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82466H Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82466J Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82466K Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82466M Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82466N Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82466P Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82466Q Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82466R Nondisplaced segmental fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82466S Nondisplaced segmental fracture of shaft of unspecified fibula, sequela -S82491A Other fracture of shaft of right fibula, initial encounter for closed fracture -S82491B Other fracture of shaft of right fibula, initial encounter for open fracture type I or II -S82491C Other fracture of shaft of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82491D Other fracture of shaft of right fibula, subsequent encounter for closed fracture with routine healing -S82491E Other fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82491F Other fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82491G Other fracture of shaft of right fibula, subsequent encounter for closed fracture with delayed healing -S82491H Other fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82491J Other fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82491K Other fracture of shaft of right fibula, subsequent encounter for closed fracture with nonunion -S82491M Other fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82491N Other fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82491P Other fracture of shaft of right fibula, subsequent encounter for closed fracture with malunion -S82491Q Other fracture of shaft of right fibula, subsequent encounter for open fracture type I or II with malunion -S82491R Other fracture of shaft of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82491S Other fracture of shaft of right fibula, sequela -S82492A Other fracture of shaft of left fibula, initial encounter for closed fracture -S82492B Other fracture of shaft of left fibula, initial encounter for open fracture type I or II -S82492C Other fracture of shaft of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82492D Other fracture of shaft of left fibula, subsequent encounter for closed fracture with routine healing -S82492E Other fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82492F Other fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82492G Other fracture of shaft of left fibula, subsequent encounter for closed fracture with delayed healing -S82492H Other fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82492J Other fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82492K Other fracture of shaft of left fibula, subsequent encounter for closed fracture with nonunion -S82492M Other fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82492N Other fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82492P Other fracture of shaft of left fibula, subsequent encounter for closed fracture with malunion -S82492Q Other fracture of shaft of left fibula, subsequent encounter for open fracture type I or II with malunion -S82492R Other fracture of shaft of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82492S Other fracture of shaft of left fibula, sequela -S82499A Other fracture of shaft of unspecified fibula, initial encounter for closed fracture -S82499B Other fracture of shaft of unspecified fibula, initial encounter for open fracture type I or II -S82499C Other fracture of shaft of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82499D Other fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82499E Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82499F Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82499G Other fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82499H Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82499J Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82499K Other fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82499M Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82499N Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82499P Other fracture of shaft of unspecified fibula, subsequent encounter for closed fracture with malunion -S82499Q Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82499R Other fracture of shaft of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82499S Other fracture of shaft of unspecified fibula, sequela -S8251XA Displaced fracture of medial malleolus of right tibia, initial encounter for closed fracture -S8251XB Displaced fracture of medial malleolus of right tibia, initial encounter for open fracture type I or II -S8251XC Displaced fracture of medial malleolus of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8251XD Displaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with routine healing -S8251XE Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with routine healing -S8251XF Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8251XG Displaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with delayed healing -S8251XH Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S8251XJ Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8251XK Displaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with nonunion -S8251XM Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with nonunion -S8251XN Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8251XP Displaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with malunion -S8251XQ Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with malunion -S8251XR Displaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8251XS Displaced fracture of medial malleolus of right tibia, sequela -S8252XA Displaced fracture of medial malleolus of left tibia, initial encounter for closed fracture -S8252XB Displaced fracture of medial malleolus of left tibia, initial encounter for open fracture type I or II -S8252XC Displaced fracture of medial malleolus of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8252XD Displaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with routine healing -S8252XE Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with routine healing -S8252XF Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8252XG Displaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with delayed healing -S8252XH Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S8252XJ Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8252XK Displaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with nonunion -S8252XM Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with nonunion -S8252XN Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8252XP Displaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with malunion -S8252XQ Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with malunion -S8252XR Displaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8252XS Displaced fracture of medial malleolus of left tibia, sequela -S8253XA Displaced fracture of medial malleolus of unspecified tibia, initial encounter for closed fracture -S8253XB Displaced fracture of medial malleolus of unspecified tibia, initial encounter for open fracture type I or II -S8253XC Displaced fracture of medial malleolus of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8253XD Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with routine healing -S8253XE Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S8253XF Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8253XG Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S8253XH Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S8253XJ Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8253XK Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with nonunion -S8253XM Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S8253XN Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8253XP Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with malunion -S8253XQ Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S8253XR Displaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8253XS Displaced fracture of medial malleolus of unspecified tibia, sequela -S8254XA Nondisplaced fracture of medial malleolus of right tibia, initial encounter for closed fracture -S8254XB Nondisplaced fracture of medial malleolus of right tibia, initial encounter for open fracture type I or II -S8254XC Nondisplaced fracture of medial malleolus of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8254XD Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with routine healing -S8254XE Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with routine healing -S8254XF Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8254XG Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with delayed healing -S8254XH Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S8254XJ Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8254XK Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with nonunion -S8254XM Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with nonunion -S8254XN Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8254XP Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for closed fracture with malunion -S8254XQ Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type I or II with malunion -S8254XR Nondisplaced fracture of medial malleolus of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8254XS Nondisplaced fracture of medial malleolus of right tibia, sequela -S8255XA Nondisplaced fracture of medial malleolus of left tibia, initial encounter for closed fracture -S8255XB Nondisplaced fracture of medial malleolus of left tibia, initial encounter for open fracture type I or II -S8255XC Nondisplaced fracture of medial malleolus of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8255XD Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with routine healing -S8255XE Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with routine healing -S8255XF Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8255XG Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with delayed healing -S8255XH Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S8255XJ Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8255XK Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with nonunion -S8255XM Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with nonunion -S8255XN Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8255XP Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for closed fracture with malunion -S8255XQ Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type I or II with malunion -S8255XR Nondisplaced fracture of medial malleolus of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8255XS Nondisplaced fracture of medial malleolus of left tibia, sequela -S8256XA Nondisplaced fracture of medial malleolus of unspecified tibia, initial encounter for closed fracture -S8256XB Nondisplaced fracture of medial malleolus of unspecified tibia, initial encounter for open fracture type I or II -S8256XC Nondisplaced fracture of medial malleolus of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8256XD Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with routine healing -S8256XE Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S8256XF Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8256XG Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S8256XH Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S8256XJ Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8256XK Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with nonunion -S8256XM Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S8256XN Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8256XP Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for closed fracture with malunion -S8256XQ Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S8256XR Nondisplaced fracture of medial malleolus of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8256XS Nondisplaced fracture of medial malleolus of unspecified tibia, sequela -S8261XA Displaced fracture of lateral malleolus of right fibula, initial encounter for closed fracture -S8261XB Displaced fracture of lateral malleolus of right fibula, initial encounter for open fracture type I or II -S8261XC Displaced fracture of lateral malleolus of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8261XD Displaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with routine healing -S8261XE Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with routine healing -S8261XF Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8261XG Displaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with delayed healing -S8261XH Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S8261XJ Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8261XK Displaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with nonunion -S8261XM Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with nonunion -S8261XN Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8261XP Displaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with malunion -S8261XQ Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with malunion -S8261XR Displaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8261XS Displaced fracture of lateral malleolus of right fibula, sequela -S8262XA Displaced fracture of lateral malleolus of left fibula, initial encounter for closed fracture -S8262XB Displaced fracture of lateral malleolus of left fibula, initial encounter for open fracture type I or II -S8262XC Displaced fracture of lateral malleolus of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8262XD Displaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with routine healing -S8262XE Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with routine healing -S8262XF Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8262XG Displaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with delayed healing -S8262XH Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S8262XJ Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8262XK Displaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with nonunion -S8262XM Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with nonunion -S8262XN Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8262XP Displaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with malunion -S8262XQ Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with malunion -S8262XR Displaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8262XS Displaced fracture of lateral malleolus of left fibula, sequela -S8263XA Displaced fracture of lateral malleolus of unspecified fibula, initial encounter for closed fracture -S8263XB Displaced fracture of lateral malleolus of unspecified fibula, initial encounter for open fracture type I or II -S8263XC Displaced fracture of lateral malleolus of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8263XD Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with routine healing -S8263XE Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S8263XF Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8263XG Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S8263XH Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S8263XJ Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8263XK Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with nonunion -S8263XM Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S8263XN Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8263XP Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with malunion -S8263XQ Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S8263XR Displaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8263XS Displaced fracture of lateral malleolus of unspecified fibula, sequela -S8264XA Nondisplaced fracture of lateral malleolus of right fibula, initial encounter for closed fracture -S8264XB Nondisplaced fracture of lateral malleolus of right fibula, initial encounter for open fracture type I or II -S8264XC Nondisplaced fracture of lateral malleolus of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8264XD Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with routine healing -S8264XE Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with routine healing -S8264XF Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8264XG Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with delayed healing -S8264XH Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S8264XJ Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8264XK Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with nonunion -S8264XM Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with nonunion -S8264XN Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8264XP Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for closed fracture with malunion -S8264XQ Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type I or II with malunion -S8264XR Nondisplaced fracture of lateral malleolus of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8264XS Nondisplaced fracture of lateral malleolus of right fibula, sequela -S8265XA Nondisplaced fracture of lateral malleolus of left fibula, initial encounter for closed fracture -S8265XB Nondisplaced fracture of lateral malleolus of left fibula, initial encounter for open fracture type I or II -S8265XC Nondisplaced fracture of lateral malleolus of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8265XD Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with routine healing -S8265XE Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with routine healing -S8265XF Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8265XG Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with delayed healing -S8265XH Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S8265XJ Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8265XK Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with nonunion -S8265XM Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with nonunion -S8265XN Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8265XP Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for closed fracture with malunion -S8265XQ Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type I or II with malunion -S8265XR Nondisplaced fracture of lateral malleolus of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8265XS Nondisplaced fracture of lateral malleolus of left fibula, sequela -S8266XA Nondisplaced fracture of lateral malleolus of unspecified fibula, initial encounter for closed fracture -S8266XB Nondisplaced fracture of lateral malleolus of unspecified fibula, initial encounter for open fracture type I or II -S8266XC Nondisplaced fracture of lateral malleolus of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8266XD Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with routine healing -S8266XE Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S8266XF Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8266XG Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S8266XH Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S8266XJ Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8266XK Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with nonunion -S8266XM Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S8266XN Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8266XP Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for closed fracture with malunion -S8266XQ Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S8266XR Nondisplaced fracture of lateral malleolus of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8266XS Nondisplaced fracture of lateral malleolus of unspecified fibula, sequela -S82811A Torus fracture of upper end of right fibula, initial encounter for closed fracture -S82811D Torus fracture of upper end of right fibula, subsequent encounter for fracture with routine healing -S82811G Torus fracture of upper end of right fibula, subsequent encounter for fracture with delayed healing -S82811K Torus fracture of upper end of right fibula, subsequent encounter for fracture with nonunion -S82811P Torus fracture of upper end of right fibula, subsequent encounter for fracture with malunion -S82811S Torus fracture of upper end of right fibula, sequela -S82812A Torus fracture of upper end of left fibula, initial encounter for closed fracture -S82812D Torus fracture of upper end of left fibula, subsequent encounter for fracture with routine healing -S82812G Torus fracture of upper end of left fibula, subsequent encounter for fracture with delayed healing -S82812K Torus fracture of upper end of left fibula, subsequent encounter for fracture with nonunion -S82812P Torus fracture of upper end of left fibula, subsequent encounter for fracture with malunion -S82812S Torus fracture of upper end of left fibula, sequela -S82819A Torus fracture of upper end of unspecified fibula, initial encounter for closed fracture -S82819D Torus fracture of upper end of unspecified fibula, subsequent encounter for fracture with routine healing -S82819G Torus fracture of upper end of unspecified fibula, subsequent encounter for fracture with delayed healing -S82819K Torus fracture of upper end of unspecified fibula, subsequent encounter for fracture with nonunion -S82819P Torus fracture of upper end of unspecified fibula, subsequent encounter for fracture with malunion -S82819S Torus fracture of upper end of unspecified fibula, sequela -S82821A Torus fracture of lower end of right fibula, initial encounter for closed fracture -S82821D Torus fracture of lower end of right fibula, subsequent encounter for fracture with routine healing -S82821G Torus fracture of lower end of right fibula, subsequent encounter for fracture with delayed healing -S82821K Torus fracture of lower end of right fibula, subsequent encounter for fracture with nonunion -S82821P Torus fracture of lower end of right fibula, subsequent encounter for fracture with malunion -S82821S Torus fracture of lower end of right fibula, sequela -S82822A Torus fracture of lower end of left fibula, initial encounter for closed fracture -S82822D Torus fracture of lower end of left fibula, subsequent encounter for fracture with routine healing -S82822G Torus fracture of lower end of left fibula, subsequent encounter for fracture with delayed healing -S82822K Torus fracture of lower end of left fibula, subsequent encounter for fracture with nonunion -S82822P Torus fracture of lower end of left fibula, subsequent encounter for fracture with malunion -S82822S Torus fracture of lower end of left fibula, sequela -S82829A Torus fracture of lower end of unspecified fibula, initial encounter for closed fracture -S82829D Torus fracture of lower end of unspecified fibula, subsequent encounter for fracture with routine healing -S82829G Torus fracture of lower end of unspecified fibula, subsequent encounter for fracture with delayed healing -S82829K Torus fracture of lower end of unspecified fibula, subsequent encounter for fracture with nonunion -S82829P Torus fracture of lower end of unspecified fibula, subsequent encounter for fracture with malunion -S82829S Torus fracture of lower end of unspecified fibula, sequela -S82831A Other fracture of upper and lower end of right fibula, initial encounter for closed fracture -S82831B Other fracture of upper and lower end of right fibula, initial encounter for open fracture type I or II -S82831C Other fracture of upper and lower end of right fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82831D Other fracture of upper and lower end of right fibula, subsequent encounter for closed fracture with routine healing -S82831E Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type I or II with routine healing -S82831F Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82831G Other fracture of upper and lower end of right fibula, subsequent encounter for closed fracture with delayed healing -S82831H Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type I or II with delayed healing -S82831J Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82831K Other fracture of upper and lower end of right fibula, subsequent encounter for closed fracture with nonunion -S82831M Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type I or II with nonunion -S82831N Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82831P Other fracture of upper and lower end of right fibula, subsequent encounter for closed fracture with malunion -S82831Q Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type I or II with malunion -S82831R Other fracture of upper and lower end of right fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82831S Other fracture of upper and lower end of right fibula, sequela -S82832A Other fracture of upper and lower end of left fibula, initial encounter for closed fracture -S82832B Other fracture of upper and lower end of left fibula, initial encounter for open fracture type I or II -S82832C Other fracture of upper and lower end of left fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82832D Other fracture of upper and lower end of left fibula, subsequent encounter for closed fracture with routine healing -S82832E Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type I or II with routine healing -S82832F Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82832G Other fracture of upper and lower end of left fibula, subsequent encounter for closed fracture with delayed healing -S82832H Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type I or II with delayed healing -S82832J Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82832K Other fracture of upper and lower end of left fibula, subsequent encounter for closed fracture with nonunion -S82832M Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type I or II with nonunion -S82832N Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82832P Other fracture of upper and lower end of left fibula, subsequent encounter for closed fracture with malunion -S82832Q Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type I or II with malunion -S82832R Other fracture of upper and lower end of left fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82832S Other fracture of upper and lower end of left fibula, sequela -S82839A Other fracture of upper and lower end of unspecified fibula, initial encounter for closed fracture -S82839B Other fracture of upper and lower end of unspecified fibula, initial encounter for open fracture type I or II -S82839C Other fracture of upper and lower end of unspecified fibula, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82839D Other fracture of upper and lower end of unspecified fibula, subsequent encounter for closed fracture with routine healing -S82839E Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type I or II with routine healing -S82839F Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82839G Other fracture of upper and lower end of unspecified fibula, subsequent encounter for closed fracture with delayed healing -S82839H Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type I or II with delayed healing -S82839J Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82839K Other fracture of upper and lower end of unspecified fibula, subsequent encounter for closed fracture with nonunion -S82839M Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type I or II with nonunion -S82839N Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82839P Other fracture of upper and lower end of unspecified fibula, subsequent encounter for closed fracture with malunion -S82839Q Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type I or II with malunion -S82839R Other fracture of upper and lower end of unspecified fibula, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82839S Other fracture of upper and lower end of unspecified fibula, sequela -S82841A Displaced bimalleolar fracture of right lower leg, initial encounter for closed fracture -S82841B Displaced bimalleolar fracture of right lower leg, initial encounter for open fracture type I or II -S82841C Displaced bimalleolar fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82841D Displaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S82841E Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S82841F Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82841G Displaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S82841H Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82841J Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82841K Displaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S82841M Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S82841N Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82841P Displaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with malunion -S82841Q Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S82841R Displaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82841S Displaced bimalleolar fracture of right lower leg, sequela -S82842A Displaced bimalleolar fracture of left lower leg, initial encounter for closed fracture -S82842B Displaced bimalleolar fracture of left lower leg, initial encounter for open fracture type I or II -S82842C Displaced bimalleolar fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82842D Displaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S82842E Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S82842F Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82842G Displaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S82842H Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82842J Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82842K Displaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S82842M Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S82842N Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82842P Displaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with malunion -S82842Q Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S82842R Displaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82842S Displaced bimalleolar fracture of left lower leg, sequela -S82843A Displaced bimalleolar fracture of unspecified lower leg, initial encounter for closed fracture -S82843B Displaced bimalleolar fracture of unspecified lower leg, initial encounter for open fracture type I or II -S82843C Displaced bimalleolar fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82843D Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S82843E Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S82843F Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82843G Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S82843H Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82843J Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82843K Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S82843M Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S82843N Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82843P Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S82843Q Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S82843R Displaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82843S Displaced bimalleolar fracture of unspecified lower leg, sequela -S82844A Nondisplaced bimalleolar fracture of right lower leg, initial encounter for closed fracture -S82844B Nondisplaced bimalleolar fracture of right lower leg, initial encounter for open fracture type I or II -S82844C Nondisplaced bimalleolar fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82844D Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S82844E Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S82844F Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82844G Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S82844H Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82844J Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82844K Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S82844M Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S82844N Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82844P Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for closed fracture with malunion -S82844Q Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S82844R Nondisplaced bimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82844S Nondisplaced bimalleolar fracture of right lower leg, sequela -S82845A Nondisplaced bimalleolar fracture of left lower leg, initial encounter for closed fracture -S82845B Nondisplaced bimalleolar fracture of left lower leg, initial encounter for open fracture type I or II -S82845C Nondisplaced bimalleolar fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82845D Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S82845E Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S82845F Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82845G Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S82845H Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82845J Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82845K Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S82845M Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S82845N Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82845P Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for closed fracture with malunion -S82845Q Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S82845R Nondisplaced bimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82845S Nondisplaced bimalleolar fracture of left lower leg, sequela -S82846A Nondisplaced bimalleolar fracture of unspecified lower leg, initial encounter for closed fracture -S82846B Nondisplaced bimalleolar fracture of unspecified lower leg, initial encounter for open fracture type I or II -S82846C Nondisplaced bimalleolar fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82846D Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S82846E Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S82846F Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82846G Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S82846H Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82846J Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82846K Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S82846M Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S82846N Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82846P Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S82846Q Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S82846R Nondisplaced bimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82846S Nondisplaced bimalleolar fracture of unspecified lower leg, sequela -S82851A Displaced trimalleolar fracture of right lower leg, initial encounter for closed fracture -S82851B Displaced trimalleolar fracture of right lower leg, initial encounter for open fracture type I or II -S82851C Displaced trimalleolar fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82851D Displaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S82851E Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S82851F Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82851G Displaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S82851H Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82851J Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82851K Displaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S82851M Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S82851N Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82851P Displaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with malunion -S82851Q Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S82851R Displaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82851S Displaced trimalleolar fracture of right lower leg, sequela -S82852A Displaced trimalleolar fracture of left lower leg, initial encounter for closed fracture -S82852B Displaced trimalleolar fracture of left lower leg, initial encounter for open fracture type I or II -S82852C Displaced trimalleolar fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82852D Displaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S82852E Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S82852F Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82852G Displaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S82852H Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82852J Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82852K Displaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S82852M Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S82852N Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82852P Displaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with malunion -S82852Q Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S82852R Displaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82852S Displaced trimalleolar fracture of left lower leg, sequela -S82853A Displaced trimalleolar fracture of unspecified lower leg, initial encounter for closed fracture -S82853B Displaced trimalleolar fracture of unspecified lower leg, initial encounter for open fracture type I or II -S82853C Displaced trimalleolar fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82853D Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S82853E Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S82853F Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82853G Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S82853H Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82853J Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82853K Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S82853M Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S82853N Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82853P Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S82853Q Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S82853R Displaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82853S Displaced trimalleolar fracture of unspecified lower leg, sequela -S82854A Nondisplaced trimalleolar fracture of right lower leg, initial encounter for closed fracture -S82854B Nondisplaced trimalleolar fracture of right lower leg, initial encounter for open fracture type I or II -S82854C Nondisplaced trimalleolar fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82854D Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S82854E Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S82854F Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82854G Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S82854H Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82854J Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82854K Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S82854M Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S82854N Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82854P Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for closed fracture with malunion -S82854Q Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S82854R Nondisplaced trimalleolar fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82854S Nondisplaced trimalleolar fracture of right lower leg, sequela -S82855A Nondisplaced trimalleolar fracture of left lower leg, initial encounter for closed fracture -S82855B Nondisplaced trimalleolar fracture of left lower leg, initial encounter for open fracture type I or II -S82855C Nondisplaced trimalleolar fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82855D Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S82855E Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S82855F Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82855G Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S82855H Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82855J Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82855K Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S82855M Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S82855N Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82855P Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for closed fracture with malunion -S82855Q Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S82855R Nondisplaced trimalleolar fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82855S Nondisplaced trimalleolar fracture of left lower leg, sequela -S82856A Nondisplaced trimalleolar fracture of unspecified lower leg, initial encounter for closed fracture -S82856B Nondisplaced trimalleolar fracture of unspecified lower leg, initial encounter for open fracture type I or II -S82856C Nondisplaced trimalleolar fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82856D Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S82856E Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S82856F Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82856G Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S82856H Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82856J Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82856K Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S82856M Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S82856N Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82856P Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S82856Q Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S82856R Nondisplaced trimalleolar fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82856S Nondisplaced trimalleolar fracture of unspecified lower leg, sequela -S82861A Displaced Maisonneuve's fracture of right leg, initial encounter for closed fracture -S82861B Displaced Maisonneuve's fracture of right leg, initial encounter for open fracture type I or II -S82861C Displaced Maisonneuve's fracture of right leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82861D Displaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with routine healing -S82861E Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with routine healing -S82861F Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82861G Displaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with delayed healing -S82861H Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with delayed healing -S82861J Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82861K Displaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with nonunion -S82861M Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with nonunion -S82861N Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82861P Displaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with malunion -S82861Q Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with malunion -S82861R Displaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82861S Displaced Maisonneuve's fracture of right leg, sequela -S82862A Displaced Maisonneuve's fracture of left leg, initial encounter for closed fracture -S82862B Displaced Maisonneuve's fracture of left leg, initial encounter for open fracture type I or II -S82862C Displaced Maisonneuve's fracture of left leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82862D Displaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with routine healing -S82862E Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with routine healing -S82862F Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82862G Displaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with delayed healing -S82862H Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with delayed healing -S82862J Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82862K Displaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with nonunion -S82862M Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with nonunion -S82862N Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82862P Displaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with malunion -S82862Q Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with malunion -S82862R Displaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82862S Displaced Maisonneuve's fracture of left leg, sequela -S82863A Displaced Maisonneuve's fracture of unspecified leg, initial encounter for closed fracture -S82863B Displaced Maisonneuve's fracture of unspecified leg, initial encounter for open fracture type I or II -S82863C Displaced Maisonneuve's fracture of unspecified leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82863D Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with routine healing -S82863E Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with routine healing -S82863F Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82863G Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with delayed healing -S82863H Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with delayed healing -S82863J Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82863K Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with nonunion -S82863M Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with nonunion -S82863N Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82863P Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with malunion -S82863Q Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with malunion -S82863R Displaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82863S Displaced Maisonneuve's fracture of unspecified leg, sequela -S82864A Nondisplaced Maisonneuve's fracture of right leg, initial encounter for closed fracture -S82864B Nondisplaced Maisonneuve's fracture of right leg, initial encounter for open fracture type I or II -S82864C Nondisplaced Maisonneuve's fracture of right leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82864D Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with routine healing -S82864E Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with routine healing -S82864F Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82864G Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with delayed healing -S82864H Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with delayed healing -S82864J Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82864K Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with nonunion -S82864M Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with nonunion -S82864N Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82864P Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for closed fracture with malunion -S82864Q Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type I or II with malunion -S82864R Nondisplaced Maisonneuve's fracture of right leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82864S Nondisplaced Maisonneuve's fracture of right leg, sequela -S82865A Nondisplaced Maisonneuve's fracture of left leg, initial encounter for closed fracture -S82865B Nondisplaced Maisonneuve's fracture of left leg, initial encounter for open fracture type I or II -S82865C Nondisplaced Maisonneuve's fracture of left leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82865D Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with routine healing -S82865E Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with routine healing -S82865F Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82865G Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with delayed healing -S82865H Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with delayed healing -S82865J Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82865K Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with nonunion -S82865M Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with nonunion -S82865N Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82865P Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for closed fracture with malunion -S82865Q Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type I or II with malunion -S82865R Nondisplaced Maisonneuve's fracture of left leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82865S Nondisplaced Maisonneuve's fracture of left leg, sequela -S82866A Nondisplaced Maisonneuve's fracture of unspecified leg, initial encounter for closed fracture -S82866B Nondisplaced Maisonneuve's fracture of unspecified leg, initial encounter for open fracture type I or II -S82866C Nondisplaced Maisonneuve's fracture of unspecified leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82866D Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with routine healing -S82866E Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with routine healing -S82866F Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82866G Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with delayed healing -S82866H Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with delayed healing -S82866J Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82866K Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with nonunion -S82866M Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with nonunion -S82866N Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82866P Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for closed fracture with malunion -S82866Q Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type I or II with malunion -S82866R Nondisplaced Maisonneuve's fracture of unspecified leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82866S Nondisplaced Maisonneuve's fracture of unspecified leg, sequela -S82871A Displaced pilon fracture of right tibia, initial encounter for closed fracture -S82871B Displaced pilon fracture of right tibia, initial encounter for open fracture type I or II -S82871C Displaced pilon fracture of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82871D Displaced pilon fracture of right tibia, subsequent encounter for closed fracture with routine healing -S82871E Displaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82871F Displaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82871G Displaced pilon fracture of right tibia, subsequent encounter for closed fracture with delayed healing -S82871H Displaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82871J Displaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82871K Displaced pilon fracture of right tibia, subsequent encounter for closed fracture with nonunion -S82871M Displaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82871N Displaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82871P Displaced pilon fracture of right tibia, subsequent encounter for closed fracture with malunion -S82871Q Displaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with malunion -S82871R Displaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82871S Displaced pilon fracture of right tibia, sequela -S82872A Displaced pilon fracture of left tibia, initial encounter for closed fracture -S82872B Displaced pilon fracture of left tibia, initial encounter for open fracture type I or II -S82872C Displaced pilon fracture of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82872D Displaced pilon fracture of left tibia, subsequent encounter for closed fracture with routine healing -S82872E Displaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82872F Displaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82872G Displaced pilon fracture of left tibia, subsequent encounter for closed fracture with delayed healing -S82872H Displaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82872J Displaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82872K Displaced pilon fracture of left tibia, subsequent encounter for closed fracture with nonunion -S82872M Displaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82872N Displaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82872P Displaced pilon fracture of left tibia, subsequent encounter for closed fracture with malunion -S82872Q Displaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with malunion -S82872R Displaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82872S Displaced pilon fracture of left tibia, sequela -S82873A Displaced pilon fracture of unspecified tibia, initial encounter for closed fracture -S82873B Displaced pilon fracture of unspecified tibia, initial encounter for open fracture type I or II -S82873C Displaced pilon fracture of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82873D Displaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82873E Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82873F Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82873G Displaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82873H Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82873J Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82873K Displaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82873M Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82873N Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82873P Displaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with malunion -S82873Q Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82873R Displaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82873S Displaced pilon fracture of unspecified tibia, sequela -S82874A Nondisplaced pilon fracture of right tibia, initial encounter for closed fracture -S82874B Nondisplaced pilon fracture of right tibia, initial encounter for open fracture type I or II -S82874C Nondisplaced pilon fracture of right tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82874D Nondisplaced pilon fracture of right tibia, subsequent encounter for closed fracture with routine healing -S82874E Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with routine healing -S82874F Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82874G Nondisplaced pilon fracture of right tibia, subsequent encounter for closed fracture with delayed healing -S82874H Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with delayed healing -S82874J Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82874K Nondisplaced pilon fracture of right tibia, subsequent encounter for closed fracture with nonunion -S82874M Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with nonunion -S82874N Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82874P Nondisplaced pilon fracture of right tibia, subsequent encounter for closed fracture with malunion -S82874Q Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type I or II with malunion -S82874R Nondisplaced pilon fracture of right tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82874S Nondisplaced pilon fracture of right tibia, sequela -S82875A Nondisplaced pilon fracture of left tibia, initial encounter for closed fracture -S82875B Nondisplaced pilon fracture of left tibia, initial encounter for open fracture type I or II -S82875C Nondisplaced pilon fracture of left tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82875D Nondisplaced pilon fracture of left tibia, subsequent encounter for closed fracture with routine healing -S82875E Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with routine healing -S82875F Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82875G Nondisplaced pilon fracture of left tibia, subsequent encounter for closed fracture with delayed healing -S82875H Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with delayed healing -S82875J Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82875K Nondisplaced pilon fracture of left tibia, subsequent encounter for closed fracture with nonunion -S82875M Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with nonunion -S82875N Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82875P Nondisplaced pilon fracture of left tibia, subsequent encounter for closed fracture with malunion -S82875Q Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type I or II with malunion -S82875R Nondisplaced pilon fracture of left tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82875S Nondisplaced pilon fracture of left tibia, sequela -S82876A Nondisplaced pilon fracture of unspecified tibia, initial encounter for closed fracture -S82876B Nondisplaced pilon fracture of unspecified tibia, initial encounter for open fracture type I or II -S82876C Nondisplaced pilon fracture of unspecified tibia, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82876D Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with routine healing -S82876E Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with routine healing -S82876F Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82876G Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with delayed healing -S82876H Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with delayed healing -S82876J Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82876K Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with nonunion -S82876M Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with nonunion -S82876N Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82876P Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for closed fracture with malunion -S82876Q Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type I or II with malunion -S82876R Nondisplaced pilon fracture of unspecified tibia, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82876S Nondisplaced pilon fracture of unspecified tibia, sequela -S82891A Other fracture of right lower leg, initial encounter for closed fracture -S82891B Other fracture of right lower leg, initial encounter for open fracture type I or II -S82891C Other fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82891D Other fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S82891E Other fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S82891F Other fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82891G Other fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S82891H Other fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82891J Other fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82891K Other fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S82891M Other fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S82891N Other fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82891P Other fracture of right lower leg, subsequent encounter for closed fracture with malunion -S82891Q Other fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S82891R Other fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82891S Other fracture of right lower leg, sequela -S82892A Other fracture of left lower leg, initial encounter for closed fracture -S82892B Other fracture of left lower leg, initial encounter for open fracture type I or II -S82892C Other fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82892D Other fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S82892E Other fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S82892F Other fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82892G Other fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S82892H Other fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82892J Other fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82892K Other fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S82892M Other fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S82892N Other fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82892P Other fracture of left lower leg, subsequent encounter for closed fracture with malunion -S82892Q Other fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S82892R Other fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82892S Other fracture of left lower leg, sequela -S82899A Other fracture of unspecified lower leg, initial encounter for closed fracture -S82899B Other fracture of unspecified lower leg, initial encounter for open fracture type I or II -S82899C Other fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S82899D Other fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S82899E Other fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S82899F Other fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S82899G Other fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S82899H Other fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S82899J Other fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S82899K Other fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S82899M Other fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S82899N Other fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S82899P Other fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S82899Q Other fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S82899R Other fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S82899S Other fracture of unspecified lower leg, sequela -S8290XA Unspecified fracture of unspecified lower leg, initial encounter for closed fracture -S8290XB Unspecified fracture of unspecified lower leg, initial encounter for open fracture type I or II -S8290XC Unspecified fracture of unspecified lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8290XD Unspecified fracture of unspecified lower leg, subsequent encounter for closed fracture with routine healing -S8290XE Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with routine healing -S8290XF Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8290XG Unspecified fracture of unspecified lower leg, subsequent encounter for closed fracture with delayed healing -S8290XH Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with delayed healing -S8290XJ Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8290XK Unspecified fracture of unspecified lower leg, subsequent encounter for closed fracture with nonunion -S8290XM Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with nonunion -S8290XN Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8290XP Unspecified fracture of unspecified lower leg, subsequent encounter for closed fracture with malunion -S8290XQ Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type I or II with malunion -S8290XR Unspecified fracture of unspecified lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8290XS Unspecified fracture of unspecified lower leg, sequela -S8291XA Unspecified fracture of right lower leg, initial encounter for closed fracture -S8291XB Unspecified fracture of right lower leg, initial encounter for open fracture type I or II -S8291XC Unspecified fracture of right lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8291XD Unspecified fracture of right lower leg, subsequent encounter for closed fracture with routine healing -S8291XE Unspecified fracture of right lower leg, subsequent encounter for open fracture type I or II with routine healing -S8291XF Unspecified fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8291XG Unspecified fracture of right lower leg, subsequent encounter for closed fracture with delayed healing -S8291XH Unspecified fracture of right lower leg, subsequent encounter for open fracture type I or II with delayed healing -S8291XJ Unspecified fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8291XK Unspecified fracture of right lower leg, subsequent encounter for closed fracture with nonunion -S8291XM Unspecified fracture of right lower leg, subsequent encounter for open fracture type I or II with nonunion -S8291XN Unspecified fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8291XP Unspecified fracture of right lower leg, subsequent encounter for closed fracture with malunion -S8291XQ Unspecified fracture of right lower leg, subsequent encounter for open fracture type I or II with malunion -S8291XR Unspecified fracture of right lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8291XS Unspecified fracture of right lower leg, sequela -S8292XA Unspecified fracture of left lower leg, initial encounter for closed fracture -S8292XB Unspecified fracture of left lower leg, initial encounter for open fracture type I or II -S8292XC Unspecified fracture of left lower leg, initial encounter for open fracture type IIIA, IIIB, or IIIC -S8292XD Unspecified fracture of left lower leg, subsequent encounter for closed fracture with routine healing -S8292XE Unspecified fracture of left lower leg, subsequent encounter for open fracture type I or II with routine healing -S8292XF Unspecified fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with routine healing -S8292XG Unspecified fracture of left lower leg, subsequent encounter for closed fracture with delayed healing -S8292XH Unspecified fracture of left lower leg, subsequent encounter for open fracture type I or II with delayed healing -S8292XJ Unspecified fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with delayed healing -S8292XK Unspecified fracture of left lower leg, subsequent encounter for closed fracture with nonunion -S8292XM Unspecified fracture of left lower leg, subsequent encounter for open fracture type I or II with nonunion -S8292XN Unspecified fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with nonunion -S8292XP Unspecified fracture of left lower leg, subsequent encounter for closed fracture with malunion -S8292XQ Unspecified fracture of left lower leg, subsequent encounter for open fracture type I or II with malunion -S8292XR Unspecified fracture of left lower leg, subsequent encounter for open fracture type IIIA, IIIB, or IIIC with malunion -S8292XS Unspecified fracture of left lower leg, sequela -S83001A Unspecified subluxation of right patella, initial encounter -S83001D Unspecified subluxation of right patella, subsequent encounter -S83001S Unspecified subluxation of right patella, sequela -S83002A Unspecified subluxation of left patella, initial encounter -S83002D Unspecified subluxation of left patella, subsequent encounter -S83002S Unspecified subluxation of left patella, sequela -S83003A Unspecified subluxation of unspecified patella, initial encounter -S83003D Unspecified subluxation of unspecified patella, subsequent encounter -S83003S Unspecified subluxation of unspecified patella, sequela -S83004A Unspecified dislocation of right patella, initial encounter -S83004D Unspecified dislocation of right patella, subsequent encounter -S83004S Unspecified dislocation of right patella, sequela -S83005A Unspecified dislocation of left patella, initial encounter -S83005D Unspecified dislocation of left patella, subsequent encounter -S83005S Unspecified dislocation of left patella, sequela -S83006A Unspecified dislocation of unspecified patella, initial encounter -S83006D Unspecified dislocation of unspecified patella, subsequent encounter -S83006S Unspecified dislocation of unspecified patella, sequela -S83011A Lateral subluxation of right patella, initial encounter -S83011D Lateral subluxation of right patella, subsequent encounter -S83011S Lateral subluxation of right patella, sequela -S83012A Lateral subluxation of left patella, initial encounter -S83012D Lateral subluxation of left patella, subsequent encounter -S83012S Lateral subluxation of left patella, sequela -S83013A Lateral subluxation of unspecified patella, initial encounter -S83013D Lateral subluxation of unspecified patella, subsequent encounter -S83013S Lateral subluxation of unspecified patella, sequela -S83014A Lateral dislocation of right patella, initial encounter -S83014D Lateral dislocation of right patella, subsequent encounter -S83014S Lateral dislocation of right patella, sequela -S83015A Lateral dislocation of left patella, initial encounter -S83015D Lateral dislocation of left patella, subsequent encounter -S83015S Lateral dislocation of left patella, sequela -S83016A Lateral dislocation of unspecified patella, initial encounter -S83016D Lateral dislocation of unspecified patella, subsequent encounter -S83016S Lateral dislocation of unspecified patella, sequela -S83091A Other subluxation of right patella, initial encounter -S83091D Other subluxation of right patella, subsequent encounter -S83091S Other subluxation of right patella, sequela -S83092A Other subluxation of left patella, initial encounter -S83092D Other subluxation of left patella, subsequent encounter -S83092S Other subluxation of left patella, sequela -S83093A Other subluxation of unspecified patella, initial encounter -S83093D Other subluxation of unspecified patella, subsequent encounter -S83093S Other subluxation of unspecified patella, sequela -S83094A Other dislocation of right patella, initial encounter -S83094D Other dislocation of right patella, subsequent encounter -S83094S Other dislocation of right patella, sequela -S83095A Other dislocation of left patella, initial encounter -S83095D Other dislocation of left patella, subsequent encounter -S83095S Other dislocation of left patella, sequela -S83096A Other dislocation of unspecified patella, initial encounter -S83096D Other dislocation of unspecified patella, subsequent encounter -S83096S Other dislocation of unspecified patella, sequela -S83101A Unspecified subluxation of right knee, initial encounter -S83101D Unspecified subluxation of right knee, subsequent encounter -S83101S Unspecified subluxation of right knee, sequela -S83102A Unspecified subluxation of left knee, initial encounter -S83102D Unspecified subluxation of left knee, subsequent encounter -S83102S Unspecified subluxation of left knee, sequela -S83103A Unspecified subluxation of unspecified knee, initial encounter -S83103D Unspecified subluxation of unspecified knee, subsequent encounter -S83103S Unspecified subluxation of unspecified knee, sequela -S83104A Unspecified dislocation of right knee, initial encounter -S83104D Unspecified dislocation of right knee, subsequent encounter -S83104S Unspecified dislocation of right knee, sequela -S83105A Unspecified dislocation of left knee, initial encounter -S83105D Unspecified dislocation of left knee, subsequent encounter -S83105S Unspecified dislocation of left knee, sequela -S83106A Unspecified dislocation of unspecified knee, initial encounter -S83106D Unspecified dislocation of unspecified knee, subsequent encounter -S83106S Unspecified dislocation of unspecified knee, sequela -S83111A Anterior subluxation of proximal end of tibia, right knee, initial encounter -S83111D Anterior subluxation of proximal end of tibia, right knee, subsequent encounter -S83111S Anterior subluxation of proximal end of tibia, right knee, sequela -S83112A Anterior subluxation of proximal end of tibia, left knee, initial encounter -S83112D Anterior subluxation of proximal end of tibia, left knee, subsequent encounter -S83112S Anterior subluxation of proximal end of tibia, left knee, sequela -S83113A Anterior subluxation of proximal end of tibia, unspecified knee, initial encounter -S83113D Anterior subluxation of proximal end of tibia, unspecified knee, subsequent encounter -S83113S Anterior subluxation of proximal end of tibia, unspecified knee, sequela -S83114A Anterior dislocation of proximal end of tibia, right knee, initial encounter -S83114D Anterior dislocation of proximal end of tibia, right knee, subsequent encounter -S83114S Anterior dislocation of proximal end of tibia, right knee, sequela -S83115A Anterior dislocation of proximal end of tibia, left knee, initial encounter -S83115D Anterior dislocation of proximal end of tibia, left knee, subsequent encounter -S83115S Anterior dislocation of proximal end of tibia, left knee, sequela -S83116A Anterior dislocation of proximal end of tibia, unspecified knee, initial encounter -S83116D Anterior dislocation of proximal end of tibia, unspecified knee, subsequent encounter -S83116S Anterior dislocation of proximal end of tibia, unspecified knee, sequela -S83121A Posterior subluxation of proximal end of tibia, right knee, initial encounter -S83121D Posterior subluxation of proximal end of tibia, right knee, subsequent encounter -S83121S Posterior subluxation of proximal end of tibia, right knee, sequela -S83122A Posterior subluxation of proximal end of tibia, left knee, initial encounter -S83122D Posterior subluxation of proximal end of tibia, left knee, subsequent encounter -S83122S Posterior subluxation of proximal end of tibia, left knee, sequela -S83123A Posterior subluxation of proximal end of tibia, unspecified knee, initial encounter -S83123D Posterior subluxation of proximal end of tibia, unspecified knee, subsequent encounter -S83123S Posterior subluxation of proximal end of tibia, unspecified knee, sequela -S83124A Posterior dislocation of proximal end of tibia, right knee, initial encounter -S83124D Posterior dislocation of proximal end of tibia, right knee, subsequent encounter -S83124S Posterior dislocation of proximal end of tibia, right knee, sequela -S83125A Posterior dislocation of proximal end of tibia, left knee, initial encounter -S83125D Posterior dislocation of proximal end of tibia, left knee, subsequent encounter -S83125S Posterior dislocation of proximal end of tibia, left knee, sequela -S83126A Posterior dislocation of proximal end of tibia, unspecified knee, initial encounter -S83126D Posterior dislocation of proximal end of tibia, unspecified knee, subsequent encounter -S83126S Posterior dislocation of proximal end of tibia, unspecified knee, sequela -S83131A Medial subluxation of proximal end of tibia, right knee, initial encounter -S83131D Medial subluxation of proximal end of tibia, right knee, subsequent encounter -S83131S Medial subluxation of proximal end of tibia, right knee, sequela -S83132A Medial subluxation of proximal end of tibia, left knee, initial encounter -S83132D Medial subluxation of proximal end of tibia, left knee, subsequent encounter -S83132S Medial subluxation of proximal end of tibia, left knee, sequela -S83133A Medial subluxation of proximal end of tibia, unspecified knee, initial encounter -S83133D Medial subluxation of proximal end of tibia, unspecified knee, subsequent encounter -S83133S Medial subluxation of proximal end of tibia, unspecified knee, sequela -S83134A Medial dislocation of proximal end of tibia, right knee, initial encounter -S83134D Medial dislocation of proximal end of tibia, right knee, subsequent encounter -S83134S Medial dislocation of proximal end of tibia, right knee, sequela -S83135A Medial dislocation of proximal end of tibia, left knee, initial encounter -S83135D Medial dislocation of proximal end of tibia, left knee, subsequent encounter -S83135S Medial dislocation of proximal end of tibia, left knee, sequela -S83136A Medial dislocation of proximal end of tibia, unspecified knee, initial encounter -S83136D Medial dislocation of proximal end of tibia, unspecified knee, subsequent encounter -S83136S Medial dislocation of proximal end of tibia, unspecified knee, sequela -S83141A Lateral subluxation of proximal end of tibia, right knee, initial encounter -S83141D Lateral subluxation of proximal end of tibia, right knee, subsequent encounter -S83141S Lateral subluxation of proximal end of tibia, right knee, sequela -S83142A Lateral subluxation of proximal end of tibia, left knee, initial encounter -S83142D Lateral subluxation of proximal end of tibia, left knee, subsequent encounter -S83142S Lateral subluxation of proximal end of tibia, left knee, sequela -S83143A Lateral subluxation of proximal end of tibia, unspecified knee, initial encounter -S83143D Lateral subluxation of proximal end of tibia, unspecified knee, subsequent encounter -S83143S Lateral subluxation of proximal end of tibia, unspecified knee, sequela -S83144A Lateral dislocation of proximal end of tibia, right knee, initial encounter -S83144D Lateral dislocation of proximal end of tibia, right knee, subsequent encounter -S83144S Lateral dislocation of proximal end of tibia, right knee, sequela -S83145A Lateral dislocation of proximal end of tibia, left knee, initial encounter -S83145D Lateral dislocation of proximal end of tibia, left knee, subsequent encounter -S83145S Lateral dislocation of proximal end of tibia, left knee, sequela -S83146A Lateral dislocation of proximal end of tibia, unspecified knee, initial encounter -S83146D Lateral dislocation of proximal end of tibia, unspecified knee, subsequent encounter -S83146S Lateral dislocation of proximal end of tibia, unspecified knee, sequela -S83191A Other subluxation of right knee, initial encounter -S83191D Other subluxation of right knee, subsequent encounter -S83191S Other subluxation of right knee, sequela -S83192A Other subluxation of left knee, initial encounter -S83192D Other subluxation of left knee, subsequent encounter -S83192S Other subluxation of left knee, sequela -S83193A Other subluxation of unspecified knee, initial encounter -S83193D Other subluxation of unspecified knee, subsequent encounter -S83193S Other subluxation of unspecified knee, sequela -S83194A Other dislocation of right knee, initial encounter -S83194D Other dislocation of right knee, subsequent encounter -S83194S Other dislocation of right knee, sequela -S83195A Other dislocation of left knee, initial encounter -S83195D Other dislocation of left knee, subsequent encounter -S83195S Other dislocation of left knee, sequela -S83196A Other dislocation of unspecified knee, initial encounter -S83196D Other dislocation of unspecified knee, subsequent encounter -S83196S Other dislocation of unspecified knee, sequela -S83200A Bucket-handle tear of unspecified meniscus, current injury, right knee, initial encounter -S83200D Bucket-handle tear of unspecified meniscus, current injury, right knee, subsequent encounter -S83200S Bucket-handle tear of unspecified meniscus, current injury, right knee, sequela -S83201A Bucket-handle tear of unspecified meniscus, current injury, left knee, initial encounter -S83201D Bucket-handle tear of unspecified meniscus, current injury, left knee, subsequent encounter -S83201S Bucket-handle tear of unspecified meniscus, current injury, left knee, sequela -S83202A Bucket-handle tear of unspecified meniscus, current injury, unspecified knee, initial encounter -S83202D Bucket-handle tear of unspecified meniscus, current injury, unspecified knee, subsequent encounter -S83202S Bucket-handle tear of unspecified meniscus, current injury, unspecified knee, sequela -S83203A Other tear of unspecified meniscus, current injury, right knee, initial encounter -S83203D Other tear of unspecified meniscus, current injury, right knee, subsequent encounter -S83203S Other tear of unspecified meniscus, current injury, right knee, sequela -S83204A Other tear of unspecified meniscus, current injury, left knee, initial encounter -S83204D Other tear of unspecified meniscus, current injury, left knee, subsequent encounter -S83204S Other tear of unspecified meniscus, current injury, left knee, sequela -S83205A Other tear of unspecified meniscus, current injury, unspecified knee, initial encounter -S83205D Other tear of unspecified meniscus, current injury, unspecified knee, subsequent encounter -S83205S Other tear of unspecified meniscus, current injury, unspecified knee, sequela -S83206A Unspecified tear of unspecified meniscus, current injury, right knee, initial encounter -S83206D Unspecified tear of unspecified meniscus, current injury, right knee, subsequent encounter -S83206S Unspecified tear of unspecified meniscus, current injury, right knee, sequela -S83207A Unspecified tear of unspecified meniscus, current injury, left knee, initial encounter -S83207D Unspecified tear of unspecified meniscus, current injury, left knee, subsequent encounter -S83207S Unspecified tear of unspecified meniscus, current injury, left knee, sequela -S83209A Unspecified tear of unspecified meniscus, current injury, unspecified knee, initial encounter -S83209D Unspecified tear of unspecified meniscus, current injury, unspecified knee, subsequent encounter -S83209S Unspecified tear of unspecified meniscus, current injury, unspecified knee, sequela -S83211A Bucket-handle tear of medial meniscus, current injury, right knee, initial encounter -S83211D Bucket-handle tear of medial meniscus, current injury, right knee, subsequent encounter -S83211S Bucket-handle tear of medial meniscus, current injury, right knee, sequela -S83212A Bucket-handle tear of medial meniscus, current injury, left knee, initial encounter -S83212D Bucket-handle tear of medial meniscus, current injury, left knee, subsequent encounter -S83212S Bucket-handle tear of medial meniscus, current injury, left knee, sequela -S83219A Bucket-handle tear of medial meniscus, current injury, unspecified knee, initial encounter -S83219D Bucket-handle tear of medial meniscus, current injury, unspecified knee, subsequent encounter -S83219S Bucket-handle tear of medial meniscus, current injury, unspecified knee, sequela -S83221A Peripheral tear of medial meniscus, current injury, right knee, initial encounter -S83221D Peripheral tear of medial meniscus, current injury, right knee, subsequent encounter -S83221S Peripheral tear of medial meniscus, current injury, right knee, sequela -S83222A Peripheral tear of medial meniscus, current injury, left knee, initial encounter -S83222D Peripheral tear of medial meniscus, current injury, left knee, subsequent encounter -S83222S Peripheral tear of medial meniscus, current injury, left knee, sequela -S83229A Peripheral tear of medial meniscus, current injury, unspecified knee, initial encounter -S83229D Peripheral tear of medial meniscus, current injury, unspecified knee, subsequent encounter -S83229S Peripheral tear of medial meniscus, current injury, unspecified knee, sequela -S83231A Complex tear of medial meniscus, current injury, right knee, initial encounter -S83231D Complex tear of medial meniscus, current injury, right knee, subsequent encounter -S83231S Complex tear of medial meniscus, current injury, right knee, sequela -S83232A Complex tear of medial meniscus, current injury, left knee, initial encounter -S83232D Complex tear of medial meniscus, current injury, left knee, subsequent encounter -S83232S Complex tear of medial meniscus, current injury, left knee, sequela -S83239A Complex tear of medial meniscus, current injury, unspecified knee, initial encounter -S83239D Complex tear of medial meniscus, current injury, unspecified knee, subsequent encounter -S83239S Complex tear of medial meniscus, current injury, unspecified knee, sequela -S83241A Other tear of medial meniscus, current injury, right knee, initial encounter -S83241D Other tear of medial meniscus, current injury, right knee, subsequent encounter -S83241S Other tear of medial meniscus, current injury, right knee, sequela -S83242A Other tear of medial meniscus, current injury, left knee, initial encounter -S83242D Other tear of medial meniscus, current injury, left knee, subsequent encounter -S83242S Other tear of medial meniscus, current injury, left knee, sequela -S83249A Other tear of medial meniscus, current injury, unspecified knee, initial encounter -S83249D Other tear of medial meniscus, current injury, unspecified knee, subsequent encounter -S83249S Other tear of medial meniscus, current injury, unspecified knee, sequela -S83251A Bucket-handle tear of lateral meniscus, current injury, right knee, initial encounter -S83251D Bucket-handle tear of lateral meniscus, current injury, right knee, subsequent encounter -S83251S Bucket-handle tear of lateral meniscus, current injury, right knee, sequela -S83252A Bucket-handle tear of lateral meniscus, current injury, left knee, initial encounter -S83252D Bucket-handle tear of lateral meniscus, current injury, left knee, subsequent encounter -S83252S Bucket-handle tear of lateral meniscus, current injury, left knee, sequela -S83259A Bucket-handle tear of lateral meniscus, current injury, unspecified knee, initial encounter -S83259D Bucket-handle tear of lateral meniscus, current injury, unspecified knee, subsequent encounter -S83259S Bucket-handle tear of lateral meniscus, current injury, unspecified knee, sequela -S83261A Peripheral tear of lateral meniscus, current injury, right knee, initial encounter -S83261D Peripheral tear of lateral meniscus, current injury, right knee, subsequent encounter -S83261S Peripheral tear of lateral meniscus, current injury, right knee, sequela -S83262A Peripheral tear of lateral meniscus, current injury, left knee, initial encounter -S83262D Peripheral tear of lateral meniscus, current injury, left knee, subsequent encounter -S83262S Peripheral tear of lateral meniscus, current injury, left knee, sequela -S83269A Peripheral tear of lateral meniscus, current injury, unspecified knee, initial encounter -S83269D Peripheral tear of lateral meniscus, current injury, unspecified knee, subsequent encounter -S83269S Peripheral tear of lateral meniscus, current injury, unspecified knee, sequela -S83271A Complex tear of lateral meniscus, current injury, right knee, initial encounter -S83271D Complex tear of lateral meniscus, current injury, right knee, subsequent encounter -S83271S Complex tear of lateral meniscus, current injury, right knee, sequela -S83272A Complex tear of lateral meniscus, current injury, left knee, initial encounter -S83272D Complex tear of lateral meniscus, current injury, left knee, subsequent encounter -S83272S Complex tear of lateral meniscus, current injury, left knee, sequela -S83279A Complex tear of lateral meniscus, current injury, unspecified knee, initial encounter -S83279D Complex tear of lateral meniscus, current injury, unspecified knee, subsequent encounter -S83279S Complex tear of lateral meniscus, current injury, unspecified knee, sequela -S83281A Other tear of lateral meniscus, current injury, right knee, initial encounter -S83281D Other tear of lateral meniscus, current injury, right knee, subsequent encounter -S83281S Other tear of lateral meniscus, current injury, right knee, sequela -S83282A Other tear of lateral meniscus, current injury, left knee, initial encounter -S83282D Other tear of lateral meniscus, current injury, left knee, subsequent encounter -S83282S Other tear of lateral meniscus, current injury, left knee, sequela -S83289A Other tear of lateral meniscus, current injury, unspecified knee, initial encounter -S83289D Other tear of lateral meniscus, current injury, unspecified knee, subsequent encounter -S83289S Other tear of lateral meniscus, current injury, unspecified knee, sequela -S8330XA Tear of articular cartilage of unspecified knee, current, initial encounter -S8330XD Tear of articular cartilage of unspecified knee, current, subsequent encounter -S8330XS Tear of articular cartilage of unspecified knee, current, sequela -S8331XA Tear of articular cartilage of right knee, current, initial encounter -S8331XD Tear of articular cartilage of right knee, current, subsequent encounter -S8331XS Tear of articular cartilage of right knee, current, sequela -S8332XA Tear of articular cartilage of left knee, current, initial encounter -S8332XD Tear of articular cartilage of left knee, current, subsequent encounter -S8332XS Tear of articular cartilage of left knee, current, sequela -S83401A Sprain of unspecified collateral ligament of right knee, initial encounter -S83401D Sprain of unspecified collateral ligament of right knee, subsequent encounter -S83401S Sprain of unspecified collateral ligament of right knee, sequela -S83402A Sprain of unspecified collateral ligament of left knee, initial encounter -S83402D Sprain of unspecified collateral ligament of left knee, subsequent encounter -S83402S Sprain of unspecified collateral ligament of left knee, sequela -S83409A Sprain of unspecified collateral ligament of unspecified knee, initial encounter -S83409D Sprain of unspecified collateral ligament of unspecified knee, subsequent encounter -S83409S Sprain of unspecified collateral ligament of unspecified knee, sequela -S83411A Sprain of medial collateral ligament of right knee, initial encounter -S83411D Sprain of medial collateral ligament of right knee, subsequent encounter -S83411S Sprain of medial collateral ligament of right knee, sequela -S83412A Sprain of medial collateral ligament of left knee, initial encounter -S83412D Sprain of medial collateral ligament of left knee, subsequent encounter -S83412S Sprain of medial collateral ligament of left knee, sequela -S83419A Sprain of medial collateral ligament of unspecified knee, initial encounter -S83419D Sprain of medial collateral ligament of unspecified knee, subsequent encounter -S83419S Sprain of medial collateral ligament of unspecified knee, sequela -S83421A Sprain of lateral collateral ligament of right knee, initial encounter -S83421D Sprain of lateral collateral ligament of right knee, subsequent encounter -S83421S Sprain of lateral collateral ligament of right knee, sequela -S83422A Sprain of lateral collateral ligament of left knee, initial encounter -S83422D Sprain of lateral collateral ligament of left knee, subsequent encounter -S83422S Sprain of lateral collateral ligament of left knee, sequela -S83429A Sprain of lateral collateral ligament of unspecified knee, initial encounter -S83429D Sprain of lateral collateral ligament of unspecified knee, subsequent encounter -S83429S Sprain of lateral collateral ligament of unspecified knee, sequela -S83501A Sprain of unspecified cruciate ligament of right knee, initial encounter -S83501D Sprain of unspecified cruciate ligament of right knee, subsequent encounter -S83501S Sprain of unspecified cruciate ligament of right knee, sequela -S83502A Sprain of unspecified cruciate ligament of left knee, initial encounter -S83502D Sprain of unspecified cruciate ligament of left knee, subsequent encounter -S83502S Sprain of unspecified cruciate ligament of left knee, sequela -S83509A Sprain of unspecified cruciate ligament of unspecified knee, initial encounter -S83509D Sprain of unspecified cruciate ligament of unspecified knee, subsequent encounter -S83509S Sprain of unspecified cruciate ligament of unspecified knee, sequela -S83511A Sprain of anterior cruciate ligament of right knee, initial encounter -S83511D Sprain of anterior cruciate ligament of right knee, subsequent encounter -S83511S Sprain of anterior cruciate ligament of right knee, sequela -S83512A Sprain of anterior cruciate ligament of left knee, initial encounter -S83512D Sprain of anterior cruciate ligament of left knee, subsequent encounter -S83512S Sprain of anterior cruciate ligament of left knee, sequela -S83519A Sprain of anterior cruciate ligament of unspecified knee, initial encounter -S83519D Sprain of anterior cruciate ligament of unspecified knee, subsequent encounter -S83519S Sprain of anterior cruciate ligament of unspecified knee, sequela -S83521A Sprain of posterior cruciate ligament of right knee, initial encounter -S83521D Sprain of posterior cruciate ligament of right knee, subsequent encounter -S83521S Sprain of posterior cruciate ligament of right knee, sequela -S83522A Sprain of posterior cruciate ligament of left knee, initial encounter -S83522D Sprain of posterior cruciate ligament of left knee, subsequent encounter -S83522S Sprain of posterior cruciate ligament of left knee, sequela -S83529A Sprain of posterior cruciate ligament of unspecified knee, initial encounter -S83529D Sprain of posterior cruciate ligament of unspecified knee, subsequent encounter -S83529S Sprain of posterior cruciate ligament of unspecified knee, sequela -S8360XA Sprain of the superior tibiofibular joint and ligament, unspecified knee, initial encounter -S8360XD Sprain of the superior tibiofibular joint and ligament, unspecified knee, subsequent encounter -S8360XS Sprain of the superior tibiofibular joint and ligament, unspecified knee, sequela -S8361XA Sprain of the superior tibiofibular joint and ligament, right knee, initial encounter -S8361XD Sprain of the superior tibiofibular joint and ligament, right knee, subsequent encounter -S8361XS Sprain of the superior tibiofibular joint and ligament, right knee, sequela -S8362XA Sprain of the superior tibiofibular joint and ligament, left knee, initial encounter -S8362XD Sprain of the superior tibiofibular joint and ligament, left knee, subsequent encounter -S8362XS Sprain of the superior tibiofibular joint and ligament, left knee, sequela -S838X1A Sprain of other specified parts of right knee, initial encounter -S838X1D Sprain of other specified parts of right knee, subsequent encounter -S838X1S Sprain of other specified parts of right knee, sequela -S838X2A Sprain of other specified parts of left knee, initial encounter -S838X2D Sprain of other specified parts of left knee, subsequent encounter -S838X2S Sprain of other specified parts of left knee, sequela -S838X9A Sprain of other specified parts of unspecified knee, initial encounter -S838X9D Sprain of other specified parts of unspecified knee, subsequent encounter -S838X9S Sprain of other specified parts of unspecified knee, sequela -S8390XA Sprain of unspecified site of unspecified knee, initial encounter -S8390XD Sprain of unspecified site of unspecified knee, subsequent encounter -S8390XS Sprain of unspecified site of unspecified knee, sequela -S8391XA Sprain of unspecified site of right knee, initial encounter -S8391XD Sprain of unspecified site of right knee, subsequent encounter -S8391XS Sprain of unspecified site of right knee, sequela -S8392XA Sprain of unspecified site of left knee, initial encounter -S8392XD Sprain of unspecified site of left knee, subsequent encounter -S8392XS Sprain of unspecified site of left knee, sequela -S8400XA Injury of tibial nerve at lower leg level, unspecified leg, initial encounter -S8400XD Injury of tibial nerve at lower leg level, unspecified leg, subsequent encounter -S8400XS Injury of tibial nerve at lower leg level, unspecified leg, sequela -S8401XA Injury of tibial nerve at lower leg level, right leg, initial encounter -S8401XD Injury of tibial nerve at lower leg level, right leg, subsequent encounter -S8401XS Injury of tibial nerve at lower leg level, right leg, sequela -S8402XA Injury of tibial nerve at lower leg level, left leg, initial encounter -S8402XD Injury of tibial nerve at lower leg level, left leg, subsequent encounter -S8402XS Injury of tibial nerve at lower leg level, left leg, sequela -S8410XA Injury of peroneal nerve at lower leg level, unspecified leg, initial encounter -S8410XD Injury of peroneal nerve at lower leg level, unspecified leg, subsequent encounter -S8410XS Injury of peroneal nerve at lower leg level, unspecified leg, sequela -S8411XA Injury of peroneal nerve at lower leg level, right leg, initial encounter -S8411XD Injury of peroneal nerve at lower leg level, right leg, subsequent encounter -S8411XS Injury of peroneal nerve at lower leg level, right leg, sequela -S8412XA Injury of peroneal nerve at lower leg level, left leg, initial encounter -S8412XD Injury of peroneal nerve at lower leg level, left leg, subsequent encounter -S8412XS Injury of peroneal nerve at lower leg level, left leg, sequela -S8420XA Injury of cutaneous sensory nerve at lower leg level, unspecified leg, initial encounter -S8420XD Injury of cutaneous sensory nerve at lower leg level, unspecified leg, subsequent encounter -S8420XS Injury of cutaneous sensory nerve at lower leg level, unspecified leg, sequela -S8421XA Injury of cutaneous sensory nerve at lower leg level, right leg, initial encounter -S8421XD Injury of cutaneous sensory nerve at lower leg level, right leg, subsequent encounter -S8421XS Injury of cutaneous sensory nerve at lower leg level, right leg, sequela -S8422XA Injury of cutaneous sensory nerve at lower leg level, left leg, initial encounter -S8422XD Injury of cutaneous sensory nerve at lower leg level, left leg, subsequent encounter -S8422XS Injury of cutaneous sensory nerve at lower leg level, left leg, sequela -S84801A Injury of other nerves at lower leg level, right leg, initial encounter -S84801D Injury of other nerves at lower leg level, right leg, subsequent encounter -S84801S Injury of other nerves at lower leg level, right leg, sequela -S84802A Injury of other nerves at lower leg level, left leg, initial encounter -S84802D Injury of other nerves at lower leg level, left leg, subsequent encounter -S84802S Injury of other nerves at lower leg level, left leg, sequela -S84809A Injury of other nerves at lower leg level, unspecified leg, initial encounter -S84809D Injury of other nerves at lower leg level, unspecified leg, subsequent encounter -S84809S Injury of other nerves at lower leg level, unspecified leg, sequela -S8490XA Injury of unspecified nerve at lower leg level, unspecified leg, initial encounter -S8490XD Injury of unspecified nerve at lower leg level, unspecified leg, subsequent encounter -S8490XS Injury of unspecified nerve at lower leg level, unspecified leg, sequela -S8491XA Injury of unspecified nerve at lower leg level, right leg, initial encounter -S8491XD Injury of unspecified nerve at lower leg level, right leg, subsequent encounter -S8491XS Injury of unspecified nerve at lower leg level, right leg, sequela -S8492XA Injury of unspecified nerve at lower leg level, left leg, initial encounter -S8492XD Injury of unspecified nerve at lower leg level, left leg, subsequent encounter -S8492XS Injury of unspecified nerve at lower leg level, left leg, sequela -S85001A Unspecified injury of popliteal artery, right leg, initial encounter -S85001D Unspecified injury of popliteal artery, right leg, subsequent encounter -S85001S Unspecified injury of popliteal artery, right leg, sequela -S85002A Unspecified injury of popliteal artery, left leg, initial encounter -S85002D Unspecified injury of popliteal artery, left leg, subsequent encounter -S85002S Unspecified injury of popliteal artery, left leg, sequela -S85009A Unspecified injury of popliteal artery, unspecified leg, initial encounter -S85009D Unspecified injury of popliteal artery, unspecified leg, subsequent encounter -S85009S Unspecified injury of popliteal artery, unspecified leg, sequela -S85011A Laceration of popliteal artery, right leg, initial encounter -S85011D Laceration of popliteal artery, right leg, subsequent encounter -S85011S Laceration of popliteal artery, right leg, sequela -S85012A Laceration of popliteal artery, left leg, initial encounter -S85012D Laceration of popliteal artery, left leg, subsequent encounter -S85012S Laceration of popliteal artery, left leg, sequela -S85019A Laceration of popliteal artery, unspecified leg, initial encounter -S85019D Laceration of popliteal artery, unspecified leg, subsequent encounter -S85019S Laceration of popliteal artery, unspecified leg, sequela -S85091A Other specified injury of popliteal artery, right leg, initial encounter -S85091D Other specified injury of popliteal artery, right leg, subsequent encounter -S85091S Other specified injury of popliteal artery, right leg, sequela -S85092A Other specified injury of popliteal artery, left leg, initial encounter -S85092D Other specified injury of popliteal artery, left leg, subsequent encounter -S85092S Other specified injury of popliteal artery, left leg, sequela -S85099A Other specified injury of popliteal artery, unspecified leg, initial encounter -S85099D Other specified injury of popliteal artery, unspecified leg, subsequent encounter -S85099S Other specified injury of popliteal artery, unspecified leg, sequela -S85101A Unspecified injury of unspecified tibial artery, right leg, initial encounter -S85101D Unspecified injury of unspecified tibial artery, right leg, subsequent encounter -S85101S Unspecified injury of unspecified tibial artery, right leg, sequela -S85102A Unspecified injury of unspecified tibial artery, left leg, initial encounter -S85102D Unspecified injury of unspecified tibial artery, left leg, subsequent encounter -S85102S Unspecified injury of unspecified tibial artery, left leg, sequela -S85109A Unspecified injury of unspecified tibial artery, unspecified leg, initial encounter -S85109D Unspecified injury of unspecified tibial artery, unspecified leg, subsequent encounter -S85109S Unspecified injury of unspecified tibial artery, unspecified leg, sequela -S85111A Laceration of unspecified tibial artery, right leg, initial encounter -S85111D Laceration of unspecified tibial artery, right leg, subsequent encounter -S85111S Laceration of unspecified tibial artery, right leg, sequela -S85112A Laceration of unspecified tibial artery, left leg, initial encounter -S85112D Laceration of unspecified tibial artery, left leg, subsequent encounter -S85112S Laceration of unspecified tibial artery, left leg, sequela -S85119A Laceration of unspecified tibial artery, unspecified leg, initial encounter -S85119D Laceration of unspecified tibial artery, unspecified leg, subsequent encounter -S85119S Laceration of unspecified tibial artery, unspecified leg, sequela -S85121A Other specified injury of unspecified tibial artery, right leg, initial encounter -S85121D Other specified injury of unspecified tibial artery, right leg, subsequent encounter -S85121S Other specified injury of unspecified tibial artery, right leg, sequela -S85122A Other specified injury of unspecified tibial artery, left leg, initial encounter -S85122D Other specified injury of unspecified tibial artery, left leg, subsequent encounter -S85122S Other specified injury of unspecified tibial artery, left leg, sequela -S85129A Other specified injury of unspecified tibial artery, unspecified leg, initial encounter -S85129D Other specified injury of unspecified tibial artery, unspecified leg, subsequent encounter -S85129S Other specified injury of unspecified tibial artery, unspecified leg, sequela -S85131A Unspecified injury of anterior tibial artery, right leg, initial encounter -S85131D Unspecified injury of anterior tibial artery, right leg, subsequent encounter -S85131S Unspecified injury of anterior tibial artery, right leg, sequela -S85132A Unspecified injury of anterior tibial artery, left leg, initial encounter -S85132D Unspecified injury of anterior tibial artery, left leg, subsequent encounter -S85132S Unspecified injury of anterior tibial artery, left leg, sequela -S85139A Unspecified injury of anterior tibial artery, unspecified leg, initial encounter -S85139D Unspecified injury of anterior tibial artery, unspecified leg, subsequent encounter -S85139S Unspecified injury of anterior tibial artery, unspecified leg, sequela -S85141A Laceration of anterior tibial artery, right leg, initial encounter -S85141D Laceration of anterior tibial artery, right leg, subsequent encounter -S85141S Laceration of anterior tibial artery, right leg, sequela -S85142A Laceration of anterior tibial artery, left leg, initial encounter -S85142D Laceration of anterior tibial artery, left leg, subsequent encounter -S85142S Laceration of anterior tibial artery, left leg, sequela -S85149A Laceration of anterior tibial artery, unspecified leg, initial encounter -S85149D Laceration of anterior tibial artery, unspecified leg, subsequent encounter -S85149S Laceration of anterior tibial artery, unspecified leg, sequela -S85151A Other specified injury of anterior tibial artery, right leg, initial encounter -S85151D Other specified injury of anterior tibial artery, right leg, subsequent encounter -S85151S Other specified injury of anterior tibial artery, right leg, sequela -S85152A Other specified injury of anterior tibial artery, left leg, initial encounter -S85152D Other specified injury of anterior tibial artery, left leg, subsequent encounter -S85152S Other specified injury of anterior tibial artery, left leg, sequela -S85159A Other specified injury of anterior tibial artery, unspecified leg, initial encounter -S85159D Other specified injury of anterior tibial artery, unspecified leg, subsequent encounter -S85159S Other specified injury of anterior tibial artery, unspecified leg, sequela -S85161A Unspecified injury of posterior tibial artery, right leg, initial encounter -S85161D Unspecified injury of posterior tibial artery, right leg, subsequent encounter -S85161S Unspecified injury of posterior tibial artery, right leg, sequela -S85162A Unspecified injury of posterior tibial artery, left leg, initial encounter -S85162D Unspecified injury of posterior tibial artery, left leg, subsequent encounter -S85162S Unspecified injury of posterior tibial artery, left leg, sequela -S85169A Unspecified injury of posterior tibial artery, unspecified leg, initial encounter -S85169D Unspecified injury of posterior tibial artery, unspecified leg, subsequent encounter -S85169S Unspecified injury of posterior tibial artery, unspecified leg, sequela -S85171A Laceration of posterior tibial artery, right leg, initial encounter -S85171D Laceration of posterior tibial artery, right leg, subsequent encounter -S85171S Laceration of posterior tibial artery, right leg, sequela -S85172A Laceration of posterior tibial artery, left leg, initial encounter -S85172D Laceration of posterior tibial artery, left leg, subsequent encounter -S85172S Laceration of posterior tibial artery, left leg, sequela -S85179A Laceration of posterior tibial artery, unspecified leg, initial encounter -S85179D Laceration of posterior tibial artery, unspecified leg, subsequent encounter -S85179S Laceration of posterior tibial artery, unspecified leg, sequela -S85181A Other specified injury of posterior tibial artery, right leg, initial encounter -S85181D Other specified injury of posterior tibial artery, right leg, subsequent encounter -S85181S Other specified injury of posterior tibial artery, right leg, sequela -S85182A Other specified injury of posterior tibial artery, left leg, initial encounter -S85182D Other specified injury of posterior tibial artery, left leg, subsequent encounter -S85182S Other specified injury of posterior tibial artery, left leg, sequela -S85189A Other specified injury of posterior tibial artery, unspecified leg, initial encounter -S85189D Other specified injury of posterior tibial artery, unspecified leg, subsequent encounter -S85189S Other specified injury of posterior tibial artery, unspecified leg, sequela -S85201A Unspecified injury of peroneal artery, right leg, initial encounter -S85201D Unspecified injury of peroneal artery, right leg, subsequent encounter -S85201S Unspecified injury of peroneal artery, right leg, sequela -S85202A Unspecified injury of peroneal artery, left leg, initial encounter -S85202D Unspecified injury of peroneal artery, left leg, subsequent encounter -S85202S Unspecified injury of peroneal artery, left leg, sequela -S85209A Unspecified injury of peroneal artery, unspecified leg, initial encounter -S85209D Unspecified injury of peroneal artery, unspecified leg, subsequent encounter -S85209S Unspecified injury of peroneal artery, unspecified leg, sequela -S85211A Laceration of peroneal artery, right leg, initial encounter -S85211D Laceration of peroneal artery, right leg, subsequent encounter -S85211S Laceration of peroneal artery, right leg, sequela -S85212A Laceration of peroneal artery, left leg, initial encounter -S85212D Laceration of peroneal artery, left leg, subsequent encounter -S85212S Laceration of peroneal artery, left leg, sequela -S85219A Laceration of peroneal artery, unspecified leg, initial encounter -S85219D Laceration of peroneal artery, unspecified leg, subsequent encounter -S85219S Laceration of peroneal artery, unspecified leg, sequela -S85291A Other specified injury of peroneal artery, right leg, initial encounter -S85291D Other specified injury of peroneal artery, right leg, subsequent encounter -S85291S Other specified injury of peroneal artery, right leg, sequela -S85292A Other specified injury of peroneal artery, left leg, initial encounter -S85292D Other specified injury of peroneal artery, left leg, subsequent encounter -S85292S Other specified injury of peroneal artery, left leg, sequela -S85299A Other specified injury of peroneal artery, unspecified leg, initial encounter -S85299D Other specified injury of peroneal artery, unspecified leg, subsequent encounter -S85299S Other specified injury of peroneal artery, unspecified leg, sequela -S85301A Unspecified injury of greater saphenous vein at lower leg level, right leg, initial encounter -S85301D Unspecified injury of greater saphenous vein at lower leg level, right leg, subsequent encounter -S85301S Unspecified injury of greater saphenous vein at lower leg level, right leg, sequela -S85302A Unspecified injury of greater saphenous vein at lower leg level, left leg, initial encounter -S85302D Unspecified injury of greater saphenous vein at lower leg level, left leg, subsequent encounter -S85302S Unspecified injury of greater saphenous vein at lower leg level, left leg, sequela -S85309A Unspecified injury of greater saphenous vein at lower leg level, unspecified leg, initial encounter -S85309D Unspecified injury of greater saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85309S Unspecified injury of greater saphenous vein at lower leg level, unspecified leg, sequela -S85311A Laceration of greater saphenous vein at lower leg level, right leg, initial encounter -S85311D Laceration of greater saphenous vein at lower leg level, right leg, subsequent encounter -S85311S Laceration of greater saphenous vein at lower leg level, right leg, sequela -S85312A Laceration of greater saphenous vein at lower leg level, left leg, initial encounter -S85312D Laceration of greater saphenous vein at lower leg level, left leg, subsequent encounter -S85312S Laceration of greater saphenous vein at lower leg level, left leg, sequela -S85319A Laceration of greater saphenous vein at lower leg level, unspecified leg, initial encounter -S85319D Laceration of greater saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85319S Laceration of greater saphenous vein at lower leg level, unspecified leg, sequela -S85391A Other specified injury of greater saphenous vein at lower leg level, right leg, initial encounter -S85391D Other specified injury of greater saphenous vein at lower leg level, right leg, subsequent encounter -S85391S Other specified injury of greater saphenous vein at lower leg level, right leg, sequela -S85392A Other specified injury of greater saphenous vein at lower leg level, left leg, initial encounter -S85392D Other specified injury of greater saphenous vein at lower leg level, left leg, subsequent encounter -S85392S Other specified injury of greater saphenous vein at lower leg level, left leg, sequela -S85399A Other specified injury of greater saphenous vein at lower leg level, unspecified leg, initial encounter -S85399D Other specified injury of greater saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85399S Other specified injury of greater saphenous vein at lower leg level, unspecified leg, sequela -S85401A Unspecified injury of lesser saphenous vein at lower leg level, right leg, initial encounter -S85401D Unspecified injury of lesser saphenous vein at lower leg level, right leg, subsequent encounter -S85401S Unspecified injury of lesser saphenous vein at lower leg level, right leg, sequela -S85402A Unspecified injury of lesser saphenous vein at lower leg level, left leg, initial encounter -S85402D Unspecified injury of lesser saphenous vein at lower leg level, left leg, subsequent encounter -S85402S Unspecified injury of lesser saphenous vein at lower leg level, left leg, sequela -S85409A Unspecified injury of lesser saphenous vein at lower leg level, unspecified leg, initial encounter -S85409D Unspecified injury of lesser saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85409S Unspecified injury of lesser saphenous vein at lower leg level, unspecified leg, sequela -S85411A Laceration of lesser saphenous vein at lower leg level, right leg, initial encounter -S85411D Laceration of lesser saphenous vein at lower leg level, right leg, subsequent encounter -S85411S Laceration of lesser saphenous vein at lower leg level, right leg, sequela -S85412A Laceration of lesser saphenous vein at lower leg level, left leg, initial encounter -S85412D Laceration of lesser saphenous vein at lower leg level, left leg, subsequent encounter -S85412S Laceration of lesser saphenous vein at lower leg level, left leg, sequela -S85419A Laceration of lesser saphenous vein at lower leg level, unspecified leg, initial encounter -S85419D Laceration of lesser saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85419S Laceration of lesser saphenous vein at lower leg level, unspecified leg, sequela -S85491A Other specified injury of lesser saphenous vein at lower leg level, right leg, initial encounter -S85491D Other specified injury of lesser saphenous vein at lower leg level, right leg, subsequent encounter -S85491S Other specified injury of lesser saphenous vein at lower leg level, right leg, sequela -S85492A Other specified injury of lesser saphenous vein at lower leg level, left leg, initial encounter -S85492D Other specified injury of lesser saphenous vein at lower leg level, left leg, subsequent encounter -S85492S Other specified injury of lesser saphenous vein at lower leg level, left leg, sequela -S85499A Other specified injury of lesser saphenous vein at lower leg level, unspecified leg, initial encounter -S85499D Other specified injury of lesser saphenous vein at lower leg level, unspecified leg, subsequent encounter -S85499S Other specified injury of lesser saphenous vein at lower leg level, unspecified leg, sequela -S85501A Unspecified injury of popliteal vein, right leg, initial encounter -S85501D Unspecified injury of popliteal vein, right leg, subsequent encounter -S85501S Unspecified injury of popliteal vein, right leg, sequela -S85502A Unspecified injury of popliteal vein, left leg, initial encounter -S85502D Unspecified injury of popliteal vein, left leg, subsequent encounter -S85502S Unspecified injury of popliteal vein, left leg, sequela -S85509A Unspecified injury of popliteal vein, unspecified leg, initial encounter -S85509D Unspecified injury of popliteal vein, unspecified leg, subsequent encounter -S85509S Unspecified injury of popliteal vein, unspecified leg, sequela -S85511A Laceration of popliteal vein, right leg, initial encounter -S85511D Laceration of popliteal vein, right leg, subsequent encounter -S85511S Laceration of popliteal vein, right leg, sequela -S85512A Laceration of popliteal vein, left leg, initial encounter -S85512D Laceration of popliteal vein, left leg, subsequent encounter -S85512S Laceration of popliteal vein, left leg, sequela -S85519A Laceration of popliteal vein, unspecified leg, initial encounter -S85519D Laceration of popliteal vein, unspecified leg, subsequent encounter -S85519S Laceration of popliteal vein, unspecified leg, sequela -S85591A Other specified injury of popliteal vein, right leg, initial encounter -S85591D Other specified injury of popliteal vein, right leg, subsequent encounter -S85591S Other specified injury of popliteal vein, right leg, sequela -S85592A Other specified injury of popliteal vein, left leg, initial encounter -S85592D Other specified injury of popliteal vein, left leg, subsequent encounter -S85592S Other specified injury of popliteal vein, left leg, sequela -S85599A Other specified injury of popliteal vein, unspecified leg, initial encounter -S85599D Other specified injury of popliteal vein, unspecified leg, subsequent encounter -S85599S Other specified injury of popliteal vein, unspecified leg, sequela -S85801A Unspecified injury of other blood vessels at lower leg level, right leg, initial encounter -S85801D Unspecified injury of other blood vessels at lower leg level, right leg, subsequent encounter -S85801S Unspecified injury of other blood vessels at lower leg level, right leg, sequela -S85802A Unspecified injury of other blood vessels at lower leg level, left leg, initial encounter -S85802D Unspecified injury of other blood vessels at lower leg level, left leg, subsequent encounter -S85802S Unspecified injury of other blood vessels at lower leg level, left leg, sequela -S85809A Unspecified injury of other blood vessels at lower leg level, unspecified leg, initial encounter -S85809D Unspecified injury of other blood vessels at lower leg level, unspecified leg, subsequent encounter -S85809S Unspecified injury of other blood vessels at lower leg level, unspecified leg, sequela -S85811A Laceration of other blood vessels at lower leg level, right leg, initial encounter -S85811D Laceration of other blood vessels at lower leg level, right leg, subsequent encounter -S85811S Laceration of other blood vessels at lower leg level, right leg, sequela -S85812A Laceration of other blood vessels at lower leg level, left leg, initial encounter -S85812D Laceration of other blood vessels at lower leg level, left leg, subsequent encounter -S85812S Laceration of other blood vessels at lower leg level, left leg, sequela -S85819A Laceration of other blood vessels at lower leg level, unspecified leg, initial encounter -S85819D Laceration of other blood vessels at lower leg level, unspecified leg, subsequent encounter -S85819S Laceration of other blood vessels at lower leg level, unspecified leg, sequela -S85891A Other specified injury of other blood vessels at lower leg level, right leg, initial encounter -S85891D Other specified injury of other blood vessels at lower leg level, right leg, subsequent encounter -S85891S Other specified injury of other blood vessels at lower leg level, right leg, sequela -S85892A Other specified injury of other blood vessels at lower leg level, left leg, initial encounter -S85892D Other specified injury of other blood vessels at lower leg level, left leg, subsequent encounter -S85892S Other specified injury of other blood vessels at lower leg level, left leg, sequela -S85899A Other specified injury of other blood vessels at lower leg level, unspecified leg, initial encounter -S85899D Other specified injury of other blood vessels at lower leg level, unspecified leg, subsequent encounter -S85899S Other specified injury of other blood vessels at lower leg level, unspecified leg, sequela -S85901A Unspecified injury of unspecified blood vessel at lower leg level, right leg, initial encounter -S85901D Unspecified injury of unspecified blood vessel at lower leg level, right leg, subsequent encounter -S85901S Unspecified injury of unspecified blood vessel at lower leg level, right leg, sequela -S85902A Unspecified injury of unspecified blood vessel at lower leg level, left leg, initial encounter -S85902D Unspecified injury of unspecified blood vessel at lower leg level, left leg, subsequent encounter -S85902S Unspecified injury of unspecified blood vessel at lower leg level, left leg, sequela -S85909A Unspecified injury of unspecified blood vessel at lower leg level, unspecified leg, initial encounter -S85909D Unspecified injury of unspecified blood vessel at lower leg level, unspecified leg, subsequent encounter -S85909S Unspecified injury of unspecified blood vessel at lower leg level, unspecified leg, sequela -S85911A Laceration of unspecified blood vessel at lower leg level, right leg, initial encounter -S85911D Laceration of unspecified blood vessel at lower leg level, right leg, subsequent encounter -S85911S Laceration of unspecified blood vessel at lower leg level, right leg, sequela -S85912A Laceration of unspecified blood vessel at lower leg level, left leg, initial encounter -S85912D Laceration of unspecified blood vessel at lower leg level, left leg, subsequent encounter -S85912S Laceration of unspecified blood vessel at lower leg level, left leg, sequela -S85919A Laceration of unspecified blood vessel at lower leg level, unspecified leg, initial encounter -S85919D Laceration of unspecified blood vessel at lower leg level, unspecified leg, subsequent encounter -S85919S Laceration of unspecified blood vessel at lower leg level, unspecified leg, sequela -S85991A Other specified injury of unspecified blood vessel at lower leg level, right leg, initial encounter -S85991D Other specified injury of unspecified blood vessel at lower leg level, right leg, subsequent encounter -S85991S Other specified injury of unspecified blood vessel at lower leg level, right leg, sequela -S85992A Other specified injury of unspecified blood vessel at lower leg level, left leg, initial encounter -S85992D Other specified injury of unspecified blood vessel at lower leg level, left leg, subsequent encounter -S85992S Other specified injury of unspecified blood vessel at lower leg level, left leg, sequela -S85999A Other specified injury of unspecified blood vessel at lower leg level, unspecified leg, initial encounter -S85999D Other specified injury of unspecified blood vessel at lower leg level, unspecified leg, subsequent encounter -S85999S Other specified injury of unspecified blood vessel at lower leg level, unspecified leg, sequela -S86001A Unspecified injury of right Achilles tendon, initial encounter -S86001D Unspecified injury of right Achilles tendon, subsequent encounter -S86001S Unspecified injury of right Achilles tendon, sequela -S86002A Unspecified injury of left Achilles tendon, initial encounter -S86002D Unspecified injury of left Achilles tendon, subsequent encounter -S86002S Unspecified injury of left Achilles tendon, sequela -S86009A Unspecified injury of unspecified Achilles tendon, initial encounter -S86009D Unspecified injury of unspecified Achilles tendon, subsequent encounter -S86009S Unspecified injury of unspecified Achilles tendon, sequela -S86011A Strain of right Achilles tendon, initial encounter -S86011D Strain of right Achilles tendon, subsequent encounter -S86011S Strain of right Achilles tendon, sequela -S86012A Strain of left Achilles tendon, initial encounter -S86012D Strain of left Achilles tendon, subsequent encounter -S86012S Strain of left Achilles tendon, sequela -S86019A Strain of unspecified Achilles tendon, initial encounter -S86019D Strain of unspecified Achilles tendon, subsequent encounter -S86019S Strain of unspecified Achilles tendon, sequela -S86021A Laceration of right Achilles tendon, initial encounter -S86021D Laceration of right Achilles tendon, subsequent encounter -S86021S Laceration of right Achilles tendon, sequela -S86022A Laceration of left Achilles tendon, initial encounter -S86022D Laceration of left Achilles tendon, subsequent encounter -S86022S Laceration of left Achilles tendon, sequela -S86029A Laceration of unspecified Achilles tendon, initial encounter -S86029D Laceration of unspecified Achilles tendon, subsequent encounter -S86029S Laceration of unspecified Achilles tendon, sequela -S86091A Other specified injury of right Achilles tendon, initial encounter -S86091D Other specified injury of right Achilles tendon, subsequent encounter -S86091S Other specified injury of right Achilles tendon, sequela -S86092A Other specified injury of left Achilles tendon, initial encounter -S86092D Other specified injury of left Achilles tendon, subsequent encounter -S86092S Other specified injury of left Achilles tendon, sequela -S86099A Other specified injury of unspecified Achilles tendon, initial encounter -S86099D Other specified injury of unspecified Achilles tendon, subsequent encounter -S86099S Other specified injury of unspecified Achilles tendon, sequela -S86101A Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, initial encounter -S86101D Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, subsequent encounter -S86101S Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, sequela -S86102A Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, initial encounter -S86102D Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, subsequent encounter -S86102S Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, sequela -S86109A Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, initial encounter -S86109D Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86109S Unspecified injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, sequela -S86111A Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, initial encounter -S86111D Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, subsequent encounter -S86111S Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, sequela -S86112A Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, initial encounter -S86112D Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, subsequent encounter -S86112S Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, sequela -S86119A Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, initial encounter -S86119D Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86119S Strain of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, sequela -S86121A Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, initial encounter -S86121D Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, subsequent encounter -S86121S Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, sequela -S86122A Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, initial encounter -S86122D Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, subsequent encounter -S86122S Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, sequela -S86129A Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, initial encounter -S86129D Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86129S Laceration of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, sequela -S86191A Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, initial encounter -S86191D Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, subsequent encounter -S86191S Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, right leg, sequela -S86192A Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, initial encounter -S86192D Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, subsequent encounter -S86192S Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, left leg, sequela -S86199A Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, initial encounter -S86199D Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86199S Other injury of other muscle(s) and tendon(s) of posterior muscle group at lower leg level, unspecified leg, sequela -S86201A Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, initial encounter -S86201D Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, subsequent encounter -S86201S Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, sequela -S86202A Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, initial encounter -S86202D Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, subsequent encounter -S86202S Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, sequela -S86209A Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, initial encounter -S86209D Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86209S Unspecified injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, sequela -S86211A Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, initial encounter -S86211D Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, subsequent encounter -S86211S Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, sequela -S86212A Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, initial encounter -S86212D Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, subsequent encounter -S86212S Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, sequela -S86219A Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, initial encounter -S86219D Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86219S Strain of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, sequela -S86221A Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, initial encounter -S86221D Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, subsequent encounter -S86221S Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, sequela -S86222A Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, initial encounter -S86222D Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, subsequent encounter -S86222S Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, sequela -S86229A Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, initial encounter -S86229D Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86229S Laceration of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, sequela -S86291A Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, initial encounter -S86291D Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, subsequent encounter -S86291S Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, right leg, sequela -S86292A Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, initial encounter -S86292D Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, subsequent encounter -S86292S Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, left leg, sequela -S86299A Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, initial encounter -S86299D Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, subsequent encounter -S86299S Other injury of muscle(s) and tendon(s) of anterior muscle group at lower leg level, unspecified leg, sequela -S86301A Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, initial encounter -S86301D Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, subsequent encounter -S86301S Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, sequela -S86302A Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, initial encounter -S86302D Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, subsequent encounter -S86302S Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, sequela -S86309A Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, initial encounter -S86309D Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, subsequent encounter -S86309S Unspecified injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, sequela -S86311A Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, initial encounter -S86311D Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, subsequent encounter -S86311S Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, sequela -S86312A Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, initial encounter -S86312D Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, subsequent encounter -S86312S Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, sequela -S86319A Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, initial encounter -S86319D Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, subsequent encounter -S86319S Strain of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, sequela -S86321A Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, initial encounter -S86321D Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, subsequent encounter -S86321S Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, sequela -S86322A Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, initial encounter -S86322D Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, subsequent encounter -S86322S Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, sequela -S86329A Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, initial encounter -S86329D Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, subsequent encounter -S86329S Laceration of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, sequela -S86391A Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, initial encounter -S86391D Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, subsequent encounter -S86391S Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, right leg, sequela -S86392A Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, initial encounter -S86392D Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, subsequent encounter -S86392S Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, left leg, sequela -S86399A Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, initial encounter -S86399D Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, subsequent encounter -S86399S Other injury of muscle(s) and tendon(s) of peroneal muscle group at lower leg level, unspecified leg, sequela -S86801A Unspecified injury of other muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86801D Unspecified injury of other muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86801S Unspecified injury of other muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86802A Unspecified injury of other muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86802D Unspecified injury of other muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86802S Unspecified injury of other muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86809A Unspecified injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86809D Unspecified injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86809S Unspecified injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86811A Strain of other muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86811D Strain of other muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86811S Strain of other muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86812A Strain of other muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86812D Strain of other muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86812S Strain of other muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86819A Strain of other muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86819D Strain of other muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86819S Strain of other muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86821A Laceration of other muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86821D Laceration of other muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86821S Laceration of other muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86822A Laceration of other muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86822D Laceration of other muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86822S Laceration of other muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86829A Laceration of other muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86829D Laceration of other muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86829S Laceration of other muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86891A Other injury of other muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86891D Other injury of other muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86891S Other injury of other muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86892A Other injury of other muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86892D Other injury of other muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86892S Other injury of other muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86899A Other injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86899D Other injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86899S Other injury of other muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86901A Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86901D Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86901S Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86902A Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86902D Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86902S Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86909A Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86909D Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86909S Unspecified injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86911A Strain of unspecified muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86911D Strain of unspecified muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86911S Strain of unspecified muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86912A Strain of unspecified muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86912D Strain of unspecified muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86912S Strain of unspecified muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86919A Strain of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86919D Strain of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86919S Strain of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86921A Laceration of unspecified muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86921D Laceration of unspecified muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86921S Laceration of unspecified muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86922A Laceration of unspecified muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86922D Laceration of unspecified muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86922S Laceration of unspecified muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86929A Laceration of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86929D Laceration of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86929S Laceration of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S86991A Other injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, initial encounter -S86991D Other injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, subsequent encounter -S86991S Other injury of unspecified muscle(s) and tendon(s) at lower leg level, right leg, sequela -S86992A Other injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, initial encounter -S86992D Other injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, subsequent encounter -S86992S Other injury of unspecified muscle(s) and tendon(s) at lower leg level, left leg, sequela -S86999A Other injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, initial encounter -S86999D Other injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, subsequent encounter -S86999S Other injury of unspecified muscle(s) and tendon(s) at lower leg level, unspecified leg, sequela -S8700XA Crushing injury of unspecified knee, initial encounter -S8700XD Crushing injury of unspecified knee, subsequent encounter -S8700XS Crushing injury of unspecified knee, sequela -S8701XA Crushing injury of right knee, initial encounter -S8701XD Crushing injury of right knee, subsequent encounter -S8701XS Crushing injury of right knee, sequela -S8702XA Crushing injury of left knee, initial encounter -S8702XD Crushing injury of left knee, subsequent encounter -S8702XS Crushing injury of left knee, sequela -S8780XA Crushing injury of unspecified lower leg, initial encounter -S8780XD Crushing injury of unspecified lower leg, subsequent encounter -S8780XS Crushing injury of unspecified lower leg, sequela -S8781XA Crushing injury of right lower leg, initial encounter -S8781XD Crushing injury of right lower leg, subsequent encounter -S8781XS Crushing injury of right lower leg, sequela -S8782XA Crushing injury of left lower leg, initial encounter -S8782XD Crushing injury of left lower leg, subsequent encounter -S8782XS Crushing injury of left lower leg, sequela -S88011A Complete traumatic amputation at knee level, right lower leg, initial encounter -S88011D Complete traumatic amputation at knee level, right lower leg, subsequent encounter -S88011S Complete traumatic amputation at knee level, right lower leg, sequela -S88012A Complete traumatic amputation at knee level, left lower leg, initial encounter -S88012D Complete traumatic amputation at knee level, left lower leg, subsequent encounter -S88012S Complete traumatic amputation at knee level, left lower leg, sequela -S88019A Complete traumatic amputation at knee level, unspecified lower leg, initial encounter -S88019D Complete traumatic amputation at knee level, unspecified lower leg, subsequent encounter -S88019S Complete traumatic amputation at knee level, unspecified lower leg, sequela -S88021A Partial traumatic amputation at knee level, right lower leg, initial encounter -S88021D Partial traumatic amputation at knee level, right lower leg, subsequent encounter -S88021S Partial traumatic amputation at knee level, right lower leg, sequela -S88022A Partial traumatic amputation at knee level, left lower leg, initial encounter -S88022D Partial traumatic amputation at knee level, left lower leg, subsequent encounter -S88022S Partial traumatic amputation at knee level, left lower leg, sequela -S88029A Partial traumatic amputation at knee level, unspecified lower leg, initial encounter -S88029D Partial traumatic amputation at knee level, unspecified lower leg, subsequent encounter -S88029S Partial traumatic amputation at knee level, unspecified lower leg, sequela -S88111A Complete traumatic amputation at level between knee and ankle, right lower leg, initial encounter -S88111D Complete traumatic amputation at level between knee and ankle, right lower leg, subsequent encounter -S88111S Complete traumatic amputation at level between knee and ankle, right lower leg, sequela -S88112A Complete traumatic amputation at level between knee and ankle, left lower leg, initial encounter -S88112D Complete traumatic amputation at level between knee and ankle, left lower leg, subsequent encounter -S88112S Complete traumatic amputation at level between knee and ankle, left lower leg, sequela -S88119A Complete traumatic amputation at level between knee and ankle, unspecified lower leg, initial encounter -S88119D Complete traumatic amputation at level between knee and ankle, unspecified lower leg, subsequent encounter -S88119S Complete traumatic amputation at level between knee and ankle, unspecified lower leg, sequela -S88121A Partial traumatic amputation at level between knee and ankle, right lower leg, initial encounter -S88121D Partial traumatic amputation at level between knee and ankle, right lower leg, subsequent encounter -S88121S Partial traumatic amputation at level between knee and ankle, right lower leg, sequela -S88122A Partial traumatic amputation at level between knee and ankle, left lower leg, initial encounter -S88122D Partial traumatic amputation at level between knee and ankle, left lower leg, subsequent encounter -S88122S Partial traumatic amputation at level between knee and ankle, left lower leg, sequela -S88129A Partial traumatic amputation at level between knee and ankle, unspecified lower leg, initial encounter -S88129D Partial traumatic amputation at level between knee and ankle, unspecified lower leg, subsequent encounter -S88129S Partial traumatic amputation at level between knee and ankle, unspecified lower leg, sequela -S88911A Complete traumatic amputation of right lower leg, level unspecified, initial encounter -S88911D Complete traumatic amputation of right lower leg, level unspecified, subsequent encounter -S88911S Complete traumatic amputation of right lower leg, level unspecified, sequela -S88912A Complete traumatic amputation of left lower leg, level unspecified, initial encounter -S88912D Complete traumatic amputation of left lower leg, level unspecified, subsequent encounter -S88912S Complete traumatic amputation of left lower leg, level unspecified, sequela -S88919A Complete traumatic amputation of unspecified lower leg, level unspecified, initial encounter -S88919D Complete traumatic amputation of unspecified lower leg, level unspecified, subsequent encounter -S88919S Complete traumatic amputation of unspecified lower leg, level unspecified, sequela -S88921A Partial traumatic amputation of right lower leg, level unspecified, initial encounter -S88921D Partial traumatic amputation of right lower leg, level unspecified, subsequent encounter -S88921S Partial traumatic amputation of right lower leg, level unspecified, sequela -S88922A Partial traumatic amputation of left lower leg, level unspecified, initial encounter -S88922D Partial traumatic amputation of left lower leg, level unspecified, subsequent encounter -S88922S Partial traumatic amputation of left lower leg, level unspecified, sequela -S88929A Partial traumatic amputation of unspecified lower leg, level unspecified, initial encounter -S88929D Partial traumatic amputation of unspecified lower leg, level unspecified, subsequent encounter -S88929S Partial traumatic amputation of unspecified lower leg, level unspecified, sequela -S89001A Unspecified physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89001D Unspecified physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89001G Unspecified physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89001K Unspecified physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89001P Unspecified physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89001S Unspecified physeal fracture of upper end of right tibia, sequela -S89002A Unspecified physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89002D Unspecified physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89002G Unspecified physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89002K Unspecified physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89002P Unspecified physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89002S Unspecified physeal fracture of upper end of left tibia, sequela -S89009A Unspecified physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89009D Unspecified physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89009G Unspecified physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89009K Unspecified physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89009P Unspecified physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89009S Unspecified physeal fracture of upper end of unspecified tibia, sequela -S89011A Salter-Harris Type I physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89011D Salter-Harris Type I physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89011G Salter-Harris Type I physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89011K Salter-Harris Type I physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89011P Salter-Harris Type I physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89011S Salter-Harris Type I physeal fracture of upper end of right tibia, sequela -S89012A Salter-Harris Type I physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89012D Salter-Harris Type I physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89012G Salter-Harris Type I physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89012K Salter-Harris Type I physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89012P Salter-Harris Type I physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89012S Salter-Harris Type I physeal fracture of upper end of left tibia, sequela -S89019A Salter-Harris Type I physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89019D Salter-Harris Type I physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89019G Salter-Harris Type I physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89019K Salter-Harris Type I physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89019P Salter-Harris Type I physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89019S Salter-Harris Type I physeal fracture of upper end of unspecified tibia, sequela -S89021A Salter-Harris Type II physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89021D Salter-Harris Type II physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89021G Salter-Harris Type II physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89021K Salter-Harris Type II physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89021P Salter-Harris Type II physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89021S Salter-Harris Type II physeal fracture of upper end of right tibia, sequela -S89022A Salter-Harris Type II physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89022D Salter-Harris Type II physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89022G Salter-Harris Type II physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89022K Salter-Harris Type II physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89022P Salter-Harris Type II physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89022S Salter-Harris Type II physeal fracture of upper end of left tibia, sequela -S89029A Salter-Harris Type II physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89029D Salter-Harris Type II physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89029G Salter-Harris Type II physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89029K Salter-Harris Type II physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89029P Salter-Harris Type II physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89029S Salter-Harris Type II physeal fracture of upper end of unspecified tibia, sequela -S89031A Salter-Harris Type III physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89031D Salter-Harris Type III physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89031G Salter-Harris Type III physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89031K Salter-Harris Type III physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89031P Salter-Harris Type III physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89031S Salter-Harris Type III physeal fracture of upper end of right tibia, sequela -S89032A Salter-Harris Type III physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89032D Salter-Harris Type III physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89032G Salter-Harris Type III physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89032K Salter-Harris Type III physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89032P Salter-Harris Type III physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89032S Salter-Harris Type III physeal fracture of upper end of left tibia, sequela -S89039A Salter-Harris Type III physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89039D Salter-Harris Type III physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89039G Salter-Harris Type III physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89039K Salter-Harris Type III physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89039P Salter-Harris Type III physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89039S Salter-Harris Type III physeal fracture of upper end of unspecified tibia, sequela -S89041A Salter-Harris Type IV physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89041D Salter-Harris Type IV physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89041G Salter-Harris Type IV physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89041K Salter-Harris Type IV physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89041P Salter-Harris Type IV physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89041S Salter-Harris Type IV physeal fracture of upper end of right tibia, sequela -S89042A Salter-Harris Type IV physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89042D Salter-Harris Type IV physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89042G Salter-Harris Type IV physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89042K Salter-Harris Type IV physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89042P Salter-Harris Type IV physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89042S Salter-Harris Type IV physeal fracture of upper end of left tibia, sequela -S89049A Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89049D Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89049G Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89049K Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89049P Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89049S Salter-Harris Type IV physeal fracture of upper end of unspecified tibia, sequela -S89091A Other physeal fracture of upper end of right tibia, initial encounter for closed fracture -S89091D Other physeal fracture of upper end of right tibia, subsequent encounter for fracture with routine healing -S89091G Other physeal fracture of upper end of right tibia, subsequent encounter for fracture with delayed healing -S89091K Other physeal fracture of upper end of right tibia, subsequent encounter for fracture with nonunion -S89091P Other physeal fracture of upper end of right tibia, subsequent encounter for fracture with malunion -S89091S Other physeal fracture of upper end of right tibia, sequela -S89092A Other physeal fracture of upper end of left tibia, initial encounter for closed fracture -S89092D Other physeal fracture of upper end of left tibia, subsequent encounter for fracture with routine healing -S89092G Other physeal fracture of upper end of left tibia, subsequent encounter for fracture with delayed healing -S89092K Other physeal fracture of upper end of left tibia, subsequent encounter for fracture with nonunion -S89092P Other physeal fracture of upper end of left tibia, subsequent encounter for fracture with malunion -S89092S Other physeal fracture of upper end of left tibia, sequela -S89099A Other physeal fracture of upper end of unspecified tibia, initial encounter for closed fracture -S89099D Other physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with routine healing -S89099G Other physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89099K Other physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with nonunion -S89099P Other physeal fracture of upper end of unspecified tibia, subsequent encounter for fracture with malunion -S89099S Other physeal fracture of upper end of unspecified tibia, sequela -S89101A Unspecified physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89101D Unspecified physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89101G Unspecified physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89101K Unspecified physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89101P Unspecified physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89101S Unspecified physeal fracture of lower end of right tibia, sequela -S89102A Unspecified physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89102D Unspecified physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89102G Unspecified physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89102K Unspecified physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89102P Unspecified physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89102S Unspecified physeal fracture of lower end of left tibia, sequela -S89109A Unspecified physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89109D Unspecified physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89109G Unspecified physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89109K Unspecified physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89109P Unspecified physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89109S Unspecified physeal fracture of lower end of unspecified tibia, sequela -S89111A Salter-Harris Type I physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89111D Salter-Harris Type I physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89111G Salter-Harris Type I physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89111K Salter-Harris Type I physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89111P Salter-Harris Type I physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89111S Salter-Harris Type I physeal fracture of lower end of right tibia, sequela -S89112A Salter-Harris Type I physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89112D Salter-Harris Type I physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89112G Salter-Harris Type I physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89112K Salter-Harris Type I physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89112P Salter-Harris Type I physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89112S Salter-Harris Type I physeal fracture of lower end of left tibia, sequela -S89119A Salter-Harris Type I physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89119D Salter-Harris Type I physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89119G Salter-Harris Type I physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89119K Salter-Harris Type I physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89119P Salter-Harris Type I physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89119S Salter-Harris Type I physeal fracture of lower end of unspecified tibia, sequela -S89121A Salter-Harris Type II physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89121D Salter-Harris Type II physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89121G Salter-Harris Type II physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89121K Salter-Harris Type II physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89121P Salter-Harris Type II physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89121S Salter-Harris Type II physeal fracture of lower end of right tibia, sequela -S89122A Salter-Harris Type II physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89122D Salter-Harris Type II physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89122G Salter-Harris Type II physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89122K Salter-Harris Type II physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89122P Salter-Harris Type II physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89122S Salter-Harris Type II physeal fracture of lower end of left tibia, sequela -S89129A Salter-Harris Type II physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89129D Salter-Harris Type II physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89129G Salter-Harris Type II physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89129K Salter-Harris Type II physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89129P Salter-Harris Type II physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89129S Salter-Harris Type II physeal fracture of lower end of unspecified tibia, sequela -S89131A Salter-Harris Type III physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89131D Salter-Harris Type III physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89131G Salter-Harris Type III physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89131K Salter-Harris Type III physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89131P Salter-Harris Type III physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89131S Salter-Harris Type III physeal fracture of lower end of right tibia, sequela -S89132A Salter-Harris Type III physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89132D Salter-Harris Type III physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89132G Salter-Harris Type III physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89132K Salter-Harris Type III physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89132P Salter-Harris Type III physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89132S Salter-Harris Type III physeal fracture of lower end of left tibia, sequela -S89139A Salter-Harris Type III physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89139D Salter-Harris Type III physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89139G Salter-Harris Type III physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89139K Salter-Harris Type III physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89139P Salter-Harris Type III physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89139S Salter-Harris Type III physeal fracture of lower end of unspecified tibia, sequela -S89141A Salter-Harris Type IV physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89141D Salter-Harris Type IV physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89141G Salter-Harris Type IV physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89141K Salter-Harris Type IV physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89141P Salter-Harris Type IV physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89141S Salter-Harris Type IV physeal fracture of lower end of right tibia, sequela -S89142A Salter-Harris Type IV physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89142D Salter-Harris Type IV physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89142G Salter-Harris Type IV physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89142K Salter-Harris Type IV physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89142P Salter-Harris Type IV physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89142S Salter-Harris Type IV physeal fracture of lower end of left tibia, sequela -S89149A Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89149D Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89149G Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89149K Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89149P Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89149S Salter-Harris Type IV physeal fracture of lower end of unspecified tibia, sequela -S89191A Other physeal fracture of lower end of right tibia, initial encounter for closed fracture -S89191D Other physeal fracture of lower end of right tibia, subsequent encounter for fracture with routine healing -S89191G Other physeal fracture of lower end of right tibia, subsequent encounter for fracture with delayed healing -S89191K Other physeal fracture of lower end of right tibia, subsequent encounter for fracture with nonunion -S89191P Other physeal fracture of lower end of right tibia, subsequent encounter for fracture with malunion -S89191S Other physeal fracture of lower end of right tibia, sequela -S89192A Other physeal fracture of lower end of left tibia, initial encounter for closed fracture -S89192D Other physeal fracture of lower end of left tibia, subsequent encounter for fracture with routine healing -S89192G Other physeal fracture of lower end of left tibia, subsequent encounter for fracture with delayed healing -S89192K Other physeal fracture of lower end of left tibia, subsequent encounter for fracture with nonunion -S89192P Other physeal fracture of lower end of left tibia, subsequent encounter for fracture with malunion -S89192S Other physeal fracture of lower end of left tibia, sequela -S89199A Other physeal fracture of lower end of unspecified tibia, initial encounter for closed fracture -S89199D Other physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with routine healing -S89199G Other physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with delayed healing -S89199K Other physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with nonunion -S89199P Other physeal fracture of lower end of unspecified tibia, subsequent encounter for fracture with malunion -S89199S Other physeal fracture of lower end of unspecified tibia, sequela -S89201A Unspecified physeal fracture of upper end of right fibula, initial encounter for closed fracture -S89201D Unspecified physeal fracture of upper end of right fibula, subsequent encounter for fracture with routine healing -S89201G Unspecified physeal fracture of upper end of right fibula, subsequent encounter for fracture with delayed healing -S89201K Unspecified physeal fracture of upper end of right fibula, subsequent encounter for fracture with nonunion -S89201P Unspecified physeal fracture of upper end of right fibula, subsequent encounter for fracture with malunion -S89201S Unspecified physeal fracture of upper end of right fibula, sequela -S89202A Unspecified physeal fracture of upper end of left fibula, initial encounter for closed fracture -S89202D Unspecified physeal fracture of upper end of left fibula, subsequent encounter for fracture with routine healing -S89202G Unspecified physeal fracture of upper end of left fibula, subsequent encounter for fracture with delayed healing -S89202K Unspecified physeal fracture of upper end of left fibula, subsequent encounter for fracture with nonunion -S89202P Unspecified physeal fracture of upper end of left fibula, subsequent encounter for fracture with malunion -S89202S Unspecified physeal fracture of upper end of left fibula, sequela -S89209A Unspecified physeal fracture of upper end of unspecified fibula, initial encounter for closed fracture -S89209D Unspecified physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with routine healing -S89209G Unspecified physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89209K Unspecified physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with nonunion -S89209P Unspecified physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with malunion -S89209S Unspecified physeal fracture of upper end of unspecified fibula, sequela -S89211A Salter-Harris Type I physeal fracture of upper end of right fibula, initial encounter for closed fracture -S89211D Salter-Harris Type I physeal fracture of upper end of right fibula, subsequent encounter for fracture with routine healing -S89211G Salter-Harris Type I physeal fracture of upper end of right fibula, subsequent encounter for fracture with delayed healing -S89211K Salter-Harris Type I physeal fracture of upper end of right fibula, subsequent encounter for fracture with nonunion -S89211P Salter-Harris Type I physeal fracture of upper end of right fibula, subsequent encounter for fracture with malunion -S89211S Salter-Harris Type I physeal fracture of upper end of right fibula, sequela -S89212A Salter-Harris Type I physeal fracture of upper end of left fibula, initial encounter for closed fracture -S89212D Salter-Harris Type I physeal fracture of upper end of left fibula, subsequent encounter for fracture with routine healing -S89212G Salter-Harris Type I physeal fracture of upper end of left fibula, subsequent encounter for fracture with delayed healing -S89212K Salter-Harris Type I physeal fracture of upper end of left fibula, subsequent encounter for fracture with nonunion -S89212P Salter-Harris Type I physeal fracture of upper end of left fibula, subsequent encounter for fracture with malunion -S89212S Salter-Harris Type I physeal fracture of upper end of left fibula, sequela -S89219A Salter-Harris Type I physeal fracture of upper end of unspecified fibula, initial encounter for closed fracture -S89219D Salter-Harris Type I physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with routine healing -S89219G Salter-Harris Type I physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89219K Salter-Harris Type I physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with nonunion -S89219P Salter-Harris Type I physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with malunion -S89219S Salter-Harris Type I physeal fracture of upper end of unspecified fibula, sequela -S89221A Salter-Harris Type II physeal fracture of upper end of right fibula, initial encounter for closed fracture -S89221D Salter-Harris Type II physeal fracture of upper end of right fibula, subsequent encounter for fracture with routine healing -S89221G Salter-Harris Type II physeal fracture of upper end of right fibula, subsequent encounter for fracture with delayed healing -S89221K Salter-Harris Type II physeal fracture of upper end of right fibula, subsequent encounter for fracture with nonunion -S89221P Salter-Harris Type II physeal fracture of upper end of right fibula, subsequent encounter for fracture with malunion -S89221S Salter-Harris Type II physeal fracture of upper end of right fibula, sequela -S89222A Salter-Harris Type II physeal fracture of upper end of left fibula, initial encounter for closed fracture -S89222D Salter-Harris Type II physeal fracture of upper end of left fibula, subsequent encounter for fracture with routine healing -S89222G Salter-Harris Type II physeal fracture of upper end of left fibula, subsequent encounter for fracture with delayed healing -S89222K Salter-Harris Type II physeal fracture of upper end of left fibula, subsequent encounter for fracture with nonunion -S89222P Salter-Harris Type II physeal fracture of upper end of left fibula, subsequent encounter for fracture with malunion -S89222S Salter-Harris Type II physeal fracture of upper end of left fibula, sequela -S89229A Salter-Harris Type II physeal fracture of upper end of unspecified fibula, initial encounter for closed fracture -S89229D Salter-Harris Type II physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with routine healing -S89229G Salter-Harris Type II physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89229K Salter-Harris Type II physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with nonunion -S89229P Salter-Harris Type II physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with malunion -S89229S Salter-Harris Type II physeal fracture of upper end of unspecified fibula, sequela -S89291A Other physeal fracture of upper end of right fibula, initial encounter for closed fracture -S89291D Other physeal fracture of upper end of right fibula, subsequent encounter for fracture with routine healing -S89291G Other physeal fracture of upper end of right fibula, subsequent encounter for fracture with delayed healing -S89291K Other physeal fracture of upper end of right fibula, subsequent encounter for fracture with nonunion -S89291P Other physeal fracture of upper end of right fibula, subsequent encounter for fracture with malunion -S89291S Other physeal fracture of upper end of right fibula, sequela -S89292A Other physeal fracture of upper end of left fibula, initial encounter for closed fracture -S89292D Other physeal fracture of upper end of left fibula, subsequent encounter for fracture with routine healing -S89292G Other physeal fracture of upper end of left fibula, subsequent encounter for fracture with delayed healing -S89292K Other physeal fracture of upper end of left fibula, subsequent encounter for fracture with nonunion -S89292P Other physeal fracture of upper end of left fibula, subsequent encounter for fracture with malunion -S89292S Other physeal fracture of upper end of left fibula, sequela -S89299A Other physeal fracture of upper end of unspecified fibula, initial encounter for closed fracture -S89299D Other physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with routine healing -S89299G Other physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89299K Other physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with nonunion -S89299P Other physeal fracture of upper end of unspecified fibula, subsequent encounter for fracture with malunion -S89299S Other physeal fracture of upper end of unspecified fibula, sequela -S89301A Unspecified physeal fracture of lower end of right fibula, initial encounter for closed fracture -S89301D Unspecified physeal fracture of lower end of right fibula, subsequent encounter for fracture with routine healing -S89301G Unspecified physeal fracture of lower end of right fibula, subsequent encounter for fracture with delayed healing -S89301K Unspecified physeal fracture of lower end of right fibula, subsequent encounter for fracture with nonunion -S89301P Unspecified physeal fracture of lower end of right fibula, subsequent encounter for fracture with malunion -S89301S Unspecified physeal fracture of lower end of right fibula, sequela -S89302A Unspecified physeal fracture of lower end of left fibula, initial encounter for closed fracture -S89302D Unspecified physeal fracture of lower end of left fibula, subsequent encounter for fracture with routine healing -S89302G Unspecified physeal fracture of lower end of left fibula, subsequent encounter for fracture with delayed healing -S89302K Unspecified physeal fracture of lower end of left fibula, subsequent encounter for fracture with nonunion -S89302P Unspecified physeal fracture of lower end of left fibula, subsequent encounter for fracture with malunion -S89302S Unspecified physeal fracture of lower end of left fibula, sequela -S89309A Unspecified physeal fracture of lower end of unspecified fibula, initial encounter for closed fracture -S89309D Unspecified physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with routine healing -S89309G Unspecified physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89309K Unspecified physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with nonunion -S89309P Unspecified physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with malunion -S89309S Unspecified physeal fracture of lower end of unspecified fibula, sequela -S89311A Salter-Harris Type I physeal fracture of lower end of right fibula, initial encounter for closed fracture -S89311D Salter-Harris Type I physeal fracture of lower end of right fibula, subsequent encounter for fracture with routine healing -S89311G Salter-Harris Type I physeal fracture of lower end of right fibula, subsequent encounter for fracture with delayed healing -S89311K Salter-Harris Type I physeal fracture of lower end of right fibula, subsequent encounter for fracture with nonunion -S89311P Salter-Harris Type I physeal fracture of lower end of right fibula, subsequent encounter for fracture with malunion -S89311S Salter-Harris Type I physeal fracture of lower end of right fibula, sequela -S89312A Salter-Harris Type I physeal fracture of lower end of left fibula, initial encounter for closed fracture -S89312D Salter-Harris Type I physeal fracture of lower end of left fibula, subsequent encounter for fracture with routine healing -S89312G Salter-Harris Type I physeal fracture of lower end of left fibula, subsequent encounter for fracture with delayed healing -S89312K Salter-Harris Type I physeal fracture of lower end of left fibula, subsequent encounter for fracture with nonunion -S89312P Salter-Harris Type I physeal fracture of lower end of left fibula, subsequent encounter for fracture with malunion -S89312S Salter-Harris Type I physeal fracture of lower end of left fibula, sequela -S89319A Salter-Harris Type I physeal fracture of lower end of unspecified fibula, initial encounter for closed fracture -S89319D Salter-Harris Type I physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with routine healing -S89319G Salter-Harris Type I physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89319K Salter-Harris Type I physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with nonunion -S89319P Salter-Harris Type I physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with malunion -S89319S Salter-Harris Type I physeal fracture of lower end of unspecified fibula, sequela -S89321A Salter-Harris Type II physeal fracture of lower end of right fibula, initial encounter for closed fracture -S89321D Salter-Harris Type II physeal fracture of lower end of right fibula, subsequent encounter for fracture with routine healing -S89321G Salter-Harris Type II physeal fracture of lower end of right fibula, subsequent encounter for fracture with delayed healing -S89321K Salter-Harris Type II physeal fracture of lower end of right fibula, subsequent encounter for fracture with nonunion -S89321P Salter-Harris Type II physeal fracture of lower end of right fibula, subsequent encounter for fracture with malunion -S89321S Salter-Harris Type II physeal fracture of lower end of right fibula, sequela -S89322A Salter-Harris Type II physeal fracture of lower end of left fibula, initial encounter for closed fracture -S89322D Salter-Harris Type II physeal fracture of lower end of left fibula, subsequent encounter for fracture with routine healing -S89322G Salter-Harris Type II physeal fracture of lower end of left fibula, subsequent encounter for fracture with delayed healing -S89322K Salter-Harris Type II physeal fracture of lower end of left fibula, subsequent encounter for fracture with nonunion -S89322P Salter-Harris Type II physeal fracture of lower end of left fibula, subsequent encounter for fracture with malunion -S89322S Salter-Harris Type II physeal fracture of lower end of left fibula, sequela -S89329A Salter-Harris Type II physeal fracture of lower end of unspecified fibula, initial encounter for closed fracture -S89329D Salter-Harris Type II physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with routine healing -S89329G Salter-Harris Type II physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89329K Salter-Harris Type II physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with nonunion -S89329P Salter-Harris Type II physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with malunion -S89329S Salter-Harris Type II physeal fracture of lower end of unspecified fibula, sequela -S89391A Other physeal fracture of lower end of right fibula, initial encounter for closed fracture -S89391D Other physeal fracture of lower end of right fibula, subsequent encounter for fracture with routine healing -S89391G Other physeal fracture of lower end of right fibula, subsequent encounter for fracture with delayed healing -S89391K Other physeal fracture of lower end of right fibula, subsequent encounter for fracture with nonunion -S89391P Other physeal fracture of lower end of right fibula, subsequent encounter for fracture with malunion -S89391S Other physeal fracture of lower end of right fibula, sequela -S89392A Other physeal fracture of lower end of left fibula, initial encounter for closed fracture -S89392D Other physeal fracture of lower end of left fibula, subsequent encounter for fracture with routine healing -S89392G Other physeal fracture of lower end of left fibula, subsequent encounter for fracture with delayed healing -S89392K Other physeal fracture of lower end of left fibula, subsequent encounter for fracture with nonunion -S89392P Other physeal fracture of lower end of left fibula, subsequent encounter for fracture with malunion -S89392S Other physeal fracture of lower end of left fibula, sequela -S89399A Other physeal fracture of lower end of unspecified fibula, initial encounter for closed fracture -S89399D Other physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with routine healing -S89399G Other physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with delayed healing -S89399K Other physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with nonunion -S89399P Other physeal fracture of lower end of unspecified fibula, subsequent encounter for fracture with malunion -S89399S Other physeal fracture of lower end of unspecified fibula, sequela -S8980XA Other specified injuries of unspecified lower leg, initial encounter -S8980XD Other specified injuries of unspecified lower leg, subsequent encounter -S8980XS Other specified injuries of unspecified lower leg, sequela -S8981XA Other specified injuries of right lower leg, initial encounter -S8981XD Other specified injuries of right lower leg, subsequent encounter -S8981XS Other specified injuries of right lower leg, sequela -S8982XA Other specified injuries of left lower leg, initial encounter -S8982XD Other specified injuries of left lower leg, subsequent encounter -S8982XS Other specified injuries of left lower leg, sequela -S8990XA Unspecified injury of unspecified lower leg, initial encounter -S8990XD Unspecified injury of unspecified lower leg, subsequent encounter -S8990XS Unspecified injury of unspecified lower leg, sequela -S8991XA Unspecified injury of right lower leg, initial encounter -S8991XD Unspecified injury of right lower leg, subsequent encounter -S8991XS Unspecified injury of right lower leg, sequela -S8992XA Unspecified injury of left lower leg, initial encounter -S8992XD Unspecified injury of left lower leg, subsequent encounter -S8992XS Unspecified injury of left lower leg, sequela -S9000XA Contusion of unspecified ankle, initial encounter -S9000XD Contusion of unspecified ankle, subsequent encounter -S9000XS Contusion of unspecified ankle, sequela -S9001XA Contusion of right ankle, initial encounter -S9001XD Contusion of right ankle, subsequent encounter -S9001XS Contusion of right ankle, sequela -S9002XA Contusion of left ankle, initial encounter -S9002XD Contusion of left ankle, subsequent encounter -S9002XS Contusion of left ankle, sequela -S90111A Contusion of right great toe without damage to nail, initial encounter -S90111D Contusion of right great toe without damage to nail, subsequent encounter -S90111S Contusion of right great toe without damage to nail, sequela -S90112A Contusion of left great toe without damage to nail, initial encounter -S90112D Contusion of left great toe without damage to nail, subsequent encounter -S90112S Contusion of left great toe without damage to nail, sequela -S90119A Contusion of unspecified great toe without damage to nail, initial encounter -S90119D Contusion of unspecified great toe without damage to nail, subsequent encounter -S90119S Contusion of unspecified great toe without damage to nail, sequela -S90121A Contusion of right lesser toe(s) without damage to nail, initial encounter -S90121D Contusion of right lesser toe(s) without damage to nail, subsequent encounter -S90121S Contusion of right lesser toe(s) without damage to nail, sequela -S90122A Contusion of left lesser toe(s) without damage to nail, initial encounter -S90122D Contusion of left lesser toe(s) without damage to nail, subsequent encounter -S90122S Contusion of left lesser toe(s) without damage to nail, sequela -S90129A Contusion of unspecified lesser toe(s) without damage to nail, initial encounter -S90129D Contusion of unspecified lesser toe(s) without damage to nail, subsequent encounter -S90129S Contusion of unspecified lesser toe(s) without damage to nail, sequela -S90211A Contusion of right great toe with damage to nail, initial encounter -S90211D Contusion of right great toe with damage to nail, subsequent encounter -S90211S Contusion of right great toe with damage to nail, sequela -S90212A Contusion of left great toe with damage to nail, initial encounter -S90212D Contusion of left great toe with damage to nail, subsequent encounter -S90212S Contusion of left great toe with damage to nail, sequela -S90219A Contusion of unspecified great toe with damage to nail, initial encounter -S90219D Contusion of unspecified great toe with damage to nail, subsequent encounter -S90219S Contusion of unspecified great toe with damage to nail, sequela -S90221A Contusion of right lesser toe(s) with damage to nail, initial encounter -S90221D Contusion of right lesser toe(s) with damage to nail, subsequent encounter -S90221S Contusion of right lesser toe(s) with damage to nail, sequela -S90222A Contusion of left lesser toe(s) with damage to nail, initial encounter -S90222D Contusion of left lesser toe(s) with damage to nail, subsequent encounter -S90222S Contusion of left lesser toe(s) with damage to nail, sequela -S90229A Contusion of unspecified lesser toe(s) with damage to nail, initial encounter -S90229D Contusion of unspecified lesser toe(s) with damage to nail, subsequent encounter -S90229S Contusion of unspecified lesser toe(s) with damage to nail, sequela -S9030XA Contusion of unspecified foot, initial encounter -S9030XD Contusion of unspecified foot, subsequent encounter -S9030XS Contusion of unspecified foot, sequela -S9031XA Contusion of right foot, initial encounter -S9031XD Contusion of right foot, subsequent encounter -S9031XS Contusion of right foot, sequela -S9032XA Contusion of left foot, initial encounter -S9032XD Contusion of left foot, subsequent encounter -S9032XS Contusion of left foot, sequela -S90411A Abrasion, right great toe, initial encounter -S90411D Abrasion, right great toe, subsequent encounter -S90411S Abrasion, right great toe, sequela -S90412A Abrasion, left great toe, initial encounter -S90412D Abrasion, left great toe, subsequent encounter -S90412S Abrasion, left great toe, sequela -S90413A Abrasion, unspecified great toe, initial encounter -S90413D Abrasion, unspecified great toe, subsequent encounter -S90413S Abrasion, unspecified great toe, sequela -S90414A Abrasion, right lesser toe(s), initial encounter -S90414D Abrasion, right lesser toe(s), subsequent encounter -S90414S Abrasion, right lesser toe(s), sequela -S90415A Abrasion, left lesser toe(s), initial encounter -S90415D Abrasion, left lesser toe(s), subsequent encounter -S90415S Abrasion, left lesser toe(s), sequela -S90416A Abrasion, unspecified lesser toe(s), initial encounter -S90416D Abrasion, unspecified lesser toe(s), subsequent encounter -S90416S Abrasion, unspecified lesser toe(s), sequela -S90421A Blister (nonthermal), right great toe, initial encounter -S90421D Blister (nonthermal), right great toe, subsequent encounter -S90421S Blister (nonthermal), right great toe, sequela -S90422A Blister (nonthermal), left great toe, initial encounter -S90422D Blister (nonthermal), left great toe, subsequent encounter -S90422S Blister (nonthermal), left great toe, sequela -S90423A Blister (nonthermal), unspecified great toe, initial encounter -S90423D Blister (nonthermal), unspecified great toe, subsequent encounter -S90423S Blister (nonthermal), unspecified great toe, sequela -S90424A Blister (nonthermal), right lesser toe(s), initial encounter -S90424D Blister (nonthermal), right lesser toe(s), subsequent encounter -S90424S Blister (nonthermal), right lesser toe(s), sequela -S90425A Blister (nonthermal), left lesser toe(s), initial encounter -S90425D Blister (nonthermal), left lesser toe(s), subsequent encounter -S90425S Blister (nonthermal), left lesser toe(s), sequela -S90426A Blister (nonthermal), unspecified lesser toe(s), initial encounter -S90426D Blister (nonthermal), unspecified lesser toe(s), subsequent encounter -S90426S Blister (nonthermal), unspecified lesser toe(s), sequela -S90441A External constriction, right great toe, initial encounter -S90441D External constriction, right great toe, subsequent encounter -S90441S External constriction, right great toe, sequela -S90442A External constriction, left great toe, initial encounter -S90442D External constriction, left great toe, subsequent encounter -S90442S External constriction, left great toe, sequela -S90443A External constriction, unspecified great toe, initial encounter -S90443D External constriction, unspecified great toe, subsequent encounter -S90443S External constriction, unspecified great toe, sequela -S90444A External constriction, right lesser toe(s), initial encounter -S90444D External constriction, right lesser toe(s), subsequent encounter -S90444S External constriction, right lesser toe(s), sequela -S90445A External constriction, left lesser toe(s), initial encounter -S90445D External constriction, left lesser toe(s), subsequent encounter -S90445S External constriction, left lesser toe(s), sequela -S90446A External constriction, unspecified lesser toe(s), initial encounter -S90446D External constriction, unspecified lesser toe(s), subsequent encounter -S90446S External constriction, unspecified lesser toe(s), sequela -S90451A Superficial foreign body, right great toe, initial encounter -S90451D Superficial foreign body, right great toe, subsequent encounter -S90451S Superficial foreign body, right great toe, sequela -S90452A Superficial foreign body, left great toe, initial encounter -S90452D Superficial foreign body, left great toe, subsequent encounter -S90452S Superficial foreign body, left great toe, sequela -S90453A Superficial foreign body, unspecified great toe, initial encounter -S90453D Superficial foreign body, unspecified great toe, subsequent encounter -S90453S Superficial foreign body, unspecified great toe, sequela -S90454A Superficial foreign body, right lesser toe(s), initial encounter -S90454D Superficial foreign body, right lesser toe(s), subsequent encounter -S90454S Superficial foreign body, right lesser toe(s), sequela -S90455A Superficial foreign body, left lesser toe(s), initial encounter -S90455D Superficial foreign body, left lesser toe(s), subsequent encounter -S90455S Superficial foreign body, left lesser toe(s), sequela -S90456A Superficial foreign body, unspecified lesser toe(s), initial encounter -S90456D Superficial foreign body, unspecified lesser toe(s), subsequent encounter -S90456S Superficial foreign body, unspecified lesser toe(s), sequela -S90461A Insect bite (nonvenomous), right great toe, initial encounter -S90461D Insect bite (nonvenomous), right great toe, subsequent encounter -S90461S Insect bite (nonvenomous), right great toe, sequela -S90462A Insect bite (nonvenomous), left great toe, initial encounter -S90462D Insect bite (nonvenomous), left great toe, subsequent encounter -S90462S Insect bite (nonvenomous), left great toe, sequela -S90463A Insect bite (nonvenomous), unspecified great toe, initial encounter -S90463D Insect bite (nonvenomous), unspecified great toe, subsequent encounter -S90463S Insect bite (nonvenomous), unspecified great toe, sequela -S90464A Insect bite (nonvenomous), right lesser toe(s), initial encounter -S90464D Insect bite (nonvenomous), right lesser toe(s), subsequent encounter -S90464S Insect bite (nonvenomous), right lesser toe(s), sequela -S90465A Insect bite (nonvenomous), left lesser toe(s), initial encounter -S90465D Insect bite (nonvenomous), left lesser toe(s), subsequent encounter -S90465S Insect bite (nonvenomous), left lesser toe(s), sequela -S90466A Insect bite (nonvenomous), unspecified lesser toe(s), initial encounter -S90466D Insect bite (nonvenomous), unspecified lesser toe(s), subsequent encounter -S90466S Insect bite (nonvenomous), unspecified lesser toe(s), sequela -S90471A Other superficial bite of right great toe, initial encounter -S90471D Other superficial bite of right great toe, subsequent encounter -S90471S Other superficial bite of right great toe, sequela -S90472A Other superficial bite of left great toe, initial encounter -S90472D Other superficial bite of left great toe, subsequent encounter -S90472S Other superficial bite of left great toe, sequela -S90473A Other superficial bite of unspecified great toe, initial encounter -S90473D Other superficial bite of unspecified great toe, subsequent encounter -S90473S Other superficial bite of unspecified great toe, sequela -S90474A Other superficial bite of right lesser toe(s), initial encounter -S90474D Other superficial bite of right lesser toe(s), subsequent encounter -S90474S Other superficial bite of right lesser toe(s), sequela -S90475A Other superficial bite of left lesser toe(s), initial encounter -S90475D Other superficial bite of left lesser toe(s), subsequent encounter -S90475S Other superficial bite of left lesser toe(s), sequela -S90476A Other superficial bite of unspecified lesser toe(s), initial encounter -S90476D Other superficial bite of unspecified lesser toe(s), subsequent encounter -S90476S Other superficial bite of unspecified lesser toe(s), sequela -S90511A Abrasion, right ankle, initial encounter -S90511D Abrasion, right ankle, subsequent encounter -S90511S Abrasion, right ankle, sequela -S90512A Abrasion, left ankle, initial encounter -S90512D Abrasion, left ankle, subsequent encounter -S90512S Abrasion, left ankle, sequela -S90519A Abrasion, unspecified ankle, initial encounter -S90519D Abrasion, unspecified ankle, subsequent encounter -S90519S Abrasion, unspecified ankle, sequela -S90521A Blister (nonthermal), right ankle, initial encounter -S90521D Blister (nonthermal), right ankle, subsequent encounter -S90521S Blister (nonthermal), right ankle, sequela -S90522A Blister (nonthermal), left ankle, initial encounter -S90522D Blister (nonthermal), left ankle, subsequent encounter -S90522S Blister (nonthermal), left ankle, sequela -S90529A Blister (nonthermal), unspecified ankle, initial encounter -S90529D Blister (nonthermal), unspecified ankle, subsequent encounter -S90529S Blister (nonthermal), unspecified ankle, sequela -S90541A External constriction, right ankle, initial encounter -S90541D External constriction, right ankle, subsequent encounter -S90541S External constriction, right ankle, sequela -S90542A External constriction, left ankle, initial encounter -S90542D External constriction, left ankle, subsequent encounter -S90542S External constriction, left ankle, sequela -S90549A External constriction, unspecified ankle, initial encounter -S90549D External constriction, unspecified ankle, subsequent encounter -S90549S External constriction, unspecified ankle, sequela -S90551A Superficial foreign body, right ankle, initial encounter -S90551D Superficial foreign body, right ankle, subsequent encounter -S90551S Superficial foreign body, right ankle, sequela -S90552A Superficial foreign body, left ankle, initial encounter -S90552D Superficial foreign body, left ankle, subsequent encounter -S90552S Superficial foreign body, left ankle, sequela -S90559A Superficial foreign body, unspecified ankle, initial encounter -S90559D Superficial foreign body, unspecified ankle, subsequent encounter -S90559S Superficial foreign body, unspecified ankle, sequela -S90561A Insect bite (nonvenomous), right ankle, initial encounter -S90561D Insect bite (nonvenomous), right ankle, subsequent encounter -S90561S Insect bite (nonvenomous), right ankle, sequela -S90562A Insect bite (nonvenomous), left ankle, initial encounter -S90562D Insect bite (nonvenomous), left ankle, subsequent encounter -S90562S Insect bite (nonvenomous), left ankle, sequela -S90569A Insect bite (nonvenomous), unspecified ankle, initial encounter -S90569D Insect bite (nonvenomous), unspecified ankle, subsequent encounter -S90569S Insect bite (nonvenomous), unspecified ankle, sequela -S90571A Other superficial bite of ankle, right ankle, initial encounter -S90571D Other superficial bite of ankle, right ankle, subsequent encounter -S90571S Other superficial bite of ankle, right ankle, sequela -S90572A Other superficial bite of ankle, left ankle, initial encounter -S90572D Other superficial bite of ankle, left ankle, subsequent encounter -S90572S Other superficial bite of ankle, left ankle, sequela -S90579A Other superficial bite of ankle, unspecified ankle, initial encounter -S90579D Other superficial bite of ankle, unspecified ankle, subsequent encounter -S90579S Other superficial bite of ankle, unspecified ankle, sequela -S90811A Abrasion, right foot, initial encounter -S90811D Abrasion, right foot, subsequent encounter -S90811S Abrasion, right foot, sequela -S90812A Abrasion, left foot, initial encounter -S90812D Abrasion, left foot, subsequent encounter -S90812S Abrasion, left foot, sequela -S90819A Abrasion, unspecified foot, initial encounter -S90819D Abrasion, unspecified foot, subsequent encounter -S90819S Abrasion, unspecified foot, sequela -S90821A Blister (nonthermal), right foot, initial encounter -S90821D Blister (nonthermal), right foot, subsequent encounter -S90821S Blister (nonthermal), right foot, sequela -S90822A Blister (nonthermal), left foot, initial encounter -S90822D Blister (nonthermal), left foot, subsequent encounter -S90822S Blister (nonthermal), left foot, sequela -S90829A Blister (nonthermal), unspecified foot, initial encounter -S90829D Blister (nonthermal), unspecified foot, subsequent encounter -S90829S Blister (nonthermal), unspecified foot, sequela -S90841A External constriction, right foot, initial encounter -S90841D External constriction, right foot, subsequent encounter -S90841S External constriction, right foot, sequela -S90842A External constriction, left foot, initial encounter -S90842D External constriction, left foot, subsequent encounter -S90842S External constriction, left foot, sequela -S90849A External constriction, unspecified foot, initial encounter -S90849D External constriction, unspecified foot, subsequent encounter -S90849S External constriction, unspecified foot, sequela -S90851A Superficial foreign body, right foot, initial encounter -S90851D Superficial foreign body, right foot, subsequent encounter -S90851S Superficial foreign body, right foot, sequela -S90852A Superficial foreign body, left foot, initial encounter -S90852D Superficial foreign body, left foot, subsequent encounter -S90852S Superficial foreign body, left foot, sequela -S90859A Superficial foreign body, unspecified foot, initial encounter -S90859D Superficial foreign body, unspecified foot, subsequent encounter -S90859S Superficial foreign body, unspecified foot, sequela -S90861A Insect bite (nonvenomous), right foot, initial encounter -S90861D Insect bite (nonvenomous), right foot, subsequent encounter -S90861S Insect bite (nonvenomous), right foot, sequela -S90862A Insect bite (nonvenomous), left foot, initial encounter -S90862D Insect bite (nonvenomous), left foot, subsequent encounter -S90862S Insect bite (nonvenomous), left foot, sequela -S90869A Insect bite (nonvenomous), unspecified foot, initial encounter -S90869D Insect bite (nonvenomous), unspecified foot, subsequent encounter -S90869S Insect bite (nonvenomous), unspecified foot, sequela -S90871A Other superficial bite of right foot, initial encounter -S90871D Other superficial bite of right foot, subsequent encounter -S90871S Other superficial bite of right foot, sequela -S90872A Other superficial bite of left foot, initial encounter -S90872D Other superficial bite of left foot, subsequent encounter -S90872S Other superficial bite of left foot, sequela -S90879A Other superficial bite of unspecified foot, initial encounter -S90879D Other superficial bite of unspecified foot, subsequent encounter -S90879S Other superficial bite of unspecified foot, sequela -S90911A Unspecified superficial injury of right ankle, initial encounter -S90911D Unspecified superficial injury of right ankle, subsequent encounter -S90911S Unspecified superficial injury of right ankle, sequela -S90912A Unspecified superficial injury of left ankle, initial encounter -S90912D Unspecified superficial injury of left ankle, subsequent encounter -S90912S Unspecified superficial injury of left ankle, sequela -S90919A Unspecified superficial injury of unspecified ankle, initial encounter -S90919D Unspecified superficial injury of unspecified ankle, subsequent encounter -S90919S Unspecified superficial injury of unspecified ankle, sequela -S90921A Unspecified superficial injury of right foot, initial encounter -S90921D Unspecified superficial injury of right foot, subsequent encounter -S90921S Unspecified superficial injury of right foot, sequela -S90922A Unspecified superficial injury of left foot, initial encounter -S90922D Unspecified superficial injury of left foot, subsequent encounter -S90922S Unspecified superficial injury of left foot, sequela -S90929A Unspecified superficial injury of unspecified foot, initial encounter -S90929D Unspecified superficial injury of unspecified foot, subsequent encounter -S90929S Unspecified superficial injury of unspecified foot, sequela -S90931A Unspecified superficial injury of right great toe, initial encounter -S90931D Unspecified superficial injury of right great toe, subsequent encounter -S90931S Unspecified superficial injury of right great toe, sequela -S90932A Unspecified superficial injury of left great toe, initial encounter -S90932D Unspecified superficial injury of left great toe, subsequent encounter -S90932S Unspecified superficial injury of left great toe, sequela -S90933A Unspecified superficial injury of unspecified great toe, initial encounter -S90933D Unspecified superficial injury of unspecified great toe, subsequent encounter -S90933S Unspecified superficial injury of unspecified great toe, sequela -S90934A Unspecified superficial injury of right lesser toe(s), initial encounter -S90934D Unspecified superficial injury of right lesser toe(s), subsequent encounter -S90934S Unspecified superficial injury of right lesser toe(s), sequela -S90935A Unspecified superficial injury of left lesser toe(s), initial encounter -S90935D Unspecified superficial injury of left lesser toe(s), subsequent encounter -S90935S Unspecified superficial injury of left lesser toe(s), sequela -S90936A Unspecified superficial injury of unspecified lesser toe(s), initial encounter -S90936D Unspecified superficial injury of unspecified lesser toe(s), subsequent encounter -S90936S Unspecified superficial injury of unspecified lesser toe(s), sequela -S91001A Unspecified open wound, right ankle, initial encounter -S91001D Unspecified open wound, right ankle, subsequent encounter -S91001S Unspecified open wound, right ankle, sequela -S91002A Unspecified open wound, left ankle, initial encounter -S91002D Unspecified open wound, left ankle, subsequent encounter -S91002S Unspecified open wound, left ankle, sequela -S91009A Unspecified open wound, unspecified ankle, initial encounter -S91009D Unspecified open wound, unspecified ankle, subsequent encounter -S91009S Unspecified open wound, unspecified ankle, sequela -S91011A Laceration without foreign body, right ankle, initial encounter -S91011D Laceration without foreign body, right ankle, subsequent encounter -S91011S Laceration without foreign body, right ankle, sequela -S91012A Laceration without foreign body, left ankle, initial encounter -S91012D Laceration without foreign body, left ankle, subsequent encounter -S91012S Laceration without foreign body, left ankle, sequela -S91019A Laceration without foreign body, unspecified ankle, initial encounter -S91019D Laceration without foreign body, unspecified ankle, subsequent encounter -S91019S Laceration without foreign body, unspecified ankle, sequela -S91021A Laceration with foreign body, right ankle, initial encounter -S91021D Laceration with foreign body, right ankle, subsequent encounter -S91021S Laceration with foreign body, right ankle, sequela -S91022A Laceration with foreign body, left ankle, initial encounter -S91022D Laceration with foreign body, left ankle, subsequent encounter -S91022S Laceration with foreign body, left ankle, sequela -S91029A Laceration with foreign body, unspecified ankle, initial encounter -S91029D Laceration with foreign body, unspecified ankle, subsequent encounter -S91029S Laceration with foreign body, unspecified ankle, sequela -S91031A Puncture wound without foreign body, right ankle, initial encounter -S91031D Puncture wound without foreign body, right ankle, subsequent encounter -S91031S Puncture wound without foreign body, right ankle, sequela -S91032A Puncture wound without foreign body, left ankle, initial encounter -S91032D Puncture wound without foreign body, left ankle, subsequent encounter -S91032S Puncture wound without foreign body, left ankle, sequela -S91039A Puncture wound without foreign body, unspecified ankle, initial encounter -S91039D Puncture wound without foreign body, unspecified ankle, subsequent encounter -S91039S Puncture wound without foreign body, unspecified ankle, sequela -S91041A Puncture wound with foreign body, right ankle, initial encounter -S91041D Puncture wound with foreign body, right ankle, subsequent encounter -S91041S Puncture wound with foreign body, right ankle, sequela -S91042A Puncture wound with foreign body, left ankle, initial encounter -S91042D Puncture wound with foreign body, left ankle, subsequent encounter -S91042S Puncture wound with foreign body, left ankle, sequela -S91049A Puncture wound with foreign body, unspecified ankle, initial encounter -S91049D Puncture wound with foreign body, unspecified ankle, subsequent encounter -S91049S Puncture wound with foreign body, unspecified ankle, sequela -S91051A Open bite, right ankle, initial encounter -S91051D Open bite, right ankle, subsequent encounter -S91051S Open bite, right ankle, sequela -S91052A Open bite, left ankle, initial encounter -S91052D Open bite, left ankle, subsequent encounter -S91052S Open bite, left ankle, sequela -S91059A Open bite, unspecified ankle, initial encounter -S91059D Open bite, unspecified ankle, subsequent encounter -S91059S Open bite, unspecified ankle, sequela -S91101A Unspecified open wound of right great toe without damage to nail, initial encounter -S91101D Unspecified open wound of right great toe without damage to nail, subsequent encounter -S91101S Unspecified open wound of right great toe without damage to nail, sequela -S91102A Unspecified open wound of left great toe without damage to nail, initial encounter -S91102D Unspecified open wound of left great toe without damage to nail, subsequent encounter -S91102S Unspecified open wound of left great toe without damage to nail, sequela -S91103A Unspecified open wound of unspecified great toe without damage to nail, initial encounter -S91103D Unspecified open wound of unspecified great toe without damage to nail, subsequent encounter -S91103S Unspecified open wound of unspecified great toe without damage to nail, sequela -S91104A Unspecified open wound of right lesser toe(s) without damage to nail, initial encounter -S91104D Unspecified open wound of right lesser toe(s) without damage to nail, subsequent encounter -S91104S Unspecified open wound of right lesser toe(s) without damage to nail, sequela -S91105A Unspecified open wound of left lesser toe(s) without damage to nail, initial encounter -S91105D Unspecified open wound of left lesser toe(s) without damage to nail, subsequent encounter -S91105S Unspecified open wound of left lesser toe(s) without damage to nail, sequela -S91106A Unspecified open wound of unspecified lesser toe(s) without damage to nail, initial encounter -S91106D Unspecified open wound of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91106S Unspecified open wound of unspecified lesser toe(s) without damage to nail, sequela -S91109A Unspecified open wound of unspecified toe(s) without damage to nail, initial encounter -S91109D Unspecified open wound of unspecified toe(s) without damage to nail, subsequent encounter -S91109S Unspecified open wound of unspecified toe(s) without damage to nail, sequela -S91111A Laceration without foreign body of right great toe without damage to nail, initial encounter -S91111D Laceration without foreign body of right great toe without damage to nail, subsequent encounter -S91111S Laceration without foreign body of right great toe without damage to nail, sequela -S91112A Laceration without foreign body of left great toe without damage to nail, initial encounter -S91112D Laceration without foreign body of left great toe without damage to nail, subsequent encounter -S91112S Laceration without foreign body of left great toe without damage to nail, sequela -S91113A Laceration without foreign body of unspecified great toe without damage to nail, initial encounter -S91113D Laceration without foreign body of unspecified great toe without damage to nail, subsequent encounter -S91113S Laceration without foreign body of unspecified great toe without damage to nail, sequela -S91114A Laceration without foreign body of right lesser toe(s) without damage to nail, initial encounter -S91114D Laceration without foreign body of right lesser toe(s) without damage to nail, subsequent encounter -S91114S Laceration without foreign body of right lesser toe(s) without damage to nail, sequela -S91115A Laceration without foreign body of left lesser toe(s) without damage to nail, initial encounter -S91115D Laceration without foreign body of left lesser toe(s) without damage to nail, subsequent encounter -S91115S Laceration without foreign body of left lesser toe(s) without damage to nail, sequela -S91116A Laceration without foreign body of unspecified lesser toe(s) without damage to nail, initial encounter -S91116D Laceration without foreign body of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91116S Laceration without foreign body of unspecified lesser toe(s) without damage to nail, sequela -S91119A Laceration without foreign body of unspecified toe without damage to nail, initial encounter -S91119D Laceration without foreign body of unspecified toe without damage to nail, subsequent encounter -S91119S Laceration without foreign body of unspecified toe without damage to nail, sequela -S91121A Laceration with foreign body of right great toe without damage to nail, initial encounter -S91121D Laceration with foreign body of right great toe without damage to nail, subsequent encounter -S91121S Laceration with foreign body of right great toe without damage to nail, sequela -S91122A Laceration with foreign body of left great toe without damage to nail, initial encounter -S91122D Laceration with foreign body of left great toe without damage to nail, subsequent encounter -S91122S Laceration with foreign body of left great toe without damage to nail, sequela -S91123A Laceration with foreign body of unspecified great toe without damage to nail, initial encounter -S91123D Laceration with foreign body of unspecified great toe without damage to nail, subsequent encounter -S91123S Laceration with foreign body of unspecified great toe without damage to nail, sequela -S91124A Laceration with foreign body of right lesser toe(s) without damage to nail, initial encounter -S91124D Laceration with foreign body of right lesser toe(s) without damage to nail, subsequent encounter -S91124S Laceration with foreign body of right lesser toe(s) without damage to nail, sequela -S91125A Laceration with foreign body of left lesser toe(s) without damage to nail, initial encounter -S91125D Laceration with foreign body of left lesser toe(s) without damage to nail, subsequent encounter -S91125S Laceration with foreign body of left lesser toe(s) without damage to nail, sequela -S91126A Laceration with foreign body of unspecified lesser toe(s) without damage to nail, initial encounter -S91126D Laceration with foreign body of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91126S Laceration with foreign body of unspecified lesser toe(s) without damage to nail, sequela -S91129A Laceration with foreign body of unspecified toe(s) without damage to nail, initial encounter -S91129D Laceration with foreign body of unspecified toe(s) without damage to nail, subsequent encounter -S91129S Laceration with foreign body of unspecified toe(s) without damage to nail, sequela -S91131A Puncture wound without foreign body of right great toe without damage to nail, initial encounter -S91131D Puncture wound without foreign body of right great toe without damage to nail, subsequent encounter -S91131S Puncture wound without foreign body of right great toe without damage to nail, sequela -S91132A Puncture wound without foreign body of left great toe without damage to nail, initial encounter -S91132D Puncture wound without foreign body of left great toe without damage to nail, subsequent encounter -S91132S Puncture wound without foreign body of left great toe without damage to nail, sequela -S91133A Puncture wound without foreign body of unspecified great toe without damage to nail, initial encounter -S91133D Puncture wound without foreign body of unspecified great toe without damage to nail, subsequent encounter -S91133S Puncture wound without foreign body of unspecified great toe without damage to nail, sequela -S91134A Puncture wound without foreign body of right lesser toe(s) without damage to nail, initial encounter -S91134D Puncture wound without foreign body of right lesser toe(s) without damage to nail, subsequent encounter -S91134S Puncture wound without foreign body of right lesser toe(s) without damage to nail, sequela -S91135A Puncture wound without foreign body of left lesser toe(s) without damage to nail, initial encounter -S91135D Puncture wound without foreign body of left lesser toe(s) without damage to nail, subsequent encounter -S91135S Puncture wound without foreign body of left lesser toe(s) without damage to nail, sequela -S91136A Puncture wound without foreign body of unspecified lesser toe(s) without damage to nail, initial encounter -S91136D Puncture wound without foreign body of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91136S Puncture wound without foreign body of unspecified lesser toe(s) without damage to nail, sequela -S91139A Puncture wound without foreign body of unspecified toe(s) without damage to nail, initial encounter -S91139D Puncture wound without foreign body of unspecified toe(s) without damage to nail, subsequent encounter -S91139S Puncture wound without foreign body of unspecified toe(s) without damage to nail, sequela -S91141A Puncture wound with foreign body of right great toe without damage to nail, initial encounter -S91141D Puncture wound with foreign body of right great toe without damage to nail, subsequent encounter -S91141S Puncture wound with foreign body of right great toe without damage to nail, sequela -S91142A Puncture wound with foreign body of left great toe without damage to nail, initial encounter -S91142D Puncture wound with foreign body of left great toe without damage to nail, subsequent encounter -S91142S Puncture wound with foreign body of left great toe without damage to nail, sequela -S91143A Puncture wound with foreign body of unspecified great toe without damage to nail, initial encounter -S91143D Puncture wound with foreign body of unspecified great toe without damage to nail, subsequent encounter -S91143S Puncture wound with foreign body of unspecified great toe without damage to nail, sequela -S91144A Puncture wound with foreign body of right lesser toe(s) without damage to nail, initial encounter -S91144D Puncture wound with foreign body of right lesser toe(s) without damage to nail, subsequent encounter -S91144S Puncture wound with foreign body of right lesser toe(s) without damage to nail, sequela -S91145A Puncture wound with foreign body of left lesser toe(s) without damage to nail, initial encounter -S91145D Puncture wound with foreign body of left lesser toe(s) without damage to nail, subsequent encounter -S91145S Puncture wound with foreign body of left lesser toe(s) without damage to nail, sequela -S91146A Puncture wound with foreign body of unspecified lesser toe(s) without damage to nail, initial encounter -S91146D Puncture wound with foreign body of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91146S Puncture wound with foreign body of unspecified lesser toe(s) without damage to nail, sequela -S91149A Puncture wound with foreign body of unspecified toe(s) without damage to nail, initial encounter -S91149D Puncture wound with foreign body of unspecified toe(s) without damage to nail, subsequent encounter -S91149S Puncture wound with foreign body of unspecified toe(s) without damage to nail, sequela -S91151A Open bite of right great toe without damage to nail, initial encounter -S91151D Open bite of right great toe without damage to nail, subsequent encounter -S91151S Open bite of right great toe without damage to nail, sequela -S91152A Open bite of left great toe without damage to nail, initial encounter -S91152D Open bite of left great toe without damage to nail, subsequent encounter -S91152S Open bite of left great toe without damage to nail, sequela -S91153A Open bite of unspecified great toe without damage to nail, initial encounter -S91153D Open bite of unspecified great toe without damage to nail, subsequent encounter -S91153S Open bite of unspecified great toe without damage to nail, sequela -S91154A Open bite of right lesser toe(s) without damage to nail, initial encounter -S91154D Open bite of right lesser toe(s) without damage to nail, subsequent encounter -S91154S Open bite of right lesser toe(s) without damage to nail, sequela -S91155A Open bite of left lesser toe(s) without damage to nail, initial encounter -S91155D Open bite of left lesser toe(s) without damage to nail, subsequent encounter -S91155S Open bite of left lesser toe(s) without damage to nail, sequela -S91156A Open bite of unspecified lesser toe(s) without damage to nail, initial encounter -S91156D Open bite of unspecified lesser toe(s) without damage to nail, subsequent encounter -S91156S Open bite of unspecified lesser toe(s) without damage to nail, sequela -S91159A Open bite of unspecified toe(s) without damage to nail, initial encounter -S91159D Open bite of unspecified toe(s) without damage to nail, subsequent encounter -S91159S Open bite of unspecified toe(s) without damage to nail, sequela -S91201A Unspecified open wound of right great toe with damage to nail, initial encounter -S91201D Unspecified open wound of right great toe with damage to nail, subsequent encounter -S91201S Unspecified open wound of right great toe with damage to nail, sequela -S91202A Unspecified open wound of left great toe with damage to nail, initial encounter -S91202D Unspecified open wound of left great toe with damage to nail, subsequent encounter -S91202S Unspecified open wound of left great toe with damage to nail, sequela -S91203A Unspecified open wound of unspecified great toe with damage to nail, initial encounter -S91203D Unspecified open wound of unspecified great toe with damage to nail, subsequent encounter -S91203S Unspecified open wound of unspecified great toe with damage to nail, sequela -S91204A Unspecified open wound of right lesser toe(s) with damage to nail, initial encounter -S91204D Unspecified open wound of right lesser toe(s) with damage to nail, subsequent encounter -S91204S Unspecified open wound of right lesser toe(s) with damage to nail, sequela -S91205A Unspecified open wound of left lesser toe(s) with damage to nail, initial encounter -S91205D Unspecified open wound of left lesser toe(s) with damage to nail, subsequent encounter -S91205S Unspecified open wound of left lesser toe(s) with damage to nail, sequela -S91206A Unspecified open wound of unspecified lesser toe(s) with damage to nail, initial encounter -S91206D Unspecified open wound of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91206S Unspecified open wound of unspecified lesser toe(s) with damage to nail, sequela -S91209A Unspecified open wound of unspecified toe(s) with damage to nail, initial encounter -S91209D Unspecified open wound of unspecified toe(s) with damage to nail, subsequent encounter -S91209S Unspecified open wound of unspecified toe(s) with damage to nail, sequela -S91211A Laceration without foreign body of right great toe with damage to nail, initial encounter -S91211D Laceration without foreign body of right great toe with damage to nail, subsequent encounter -S91211S Laceration without foreign body of right great toe with damage to nail, sequela -S91212A Laceration without foreign body of left great toe with damage to nail, initial encounter -S91212D Laceration without foreign body of left great toe with damage to nail, subsequent encounter -S91212S Laceration without foreign body of left great toe with damage to nail, sequela -S91213A Laceration without foreign body of unspecified great toe with damage to nail, initial encounter -S91213D Laceration without foreign body of unspecified great toe with damage to nail, subsequent encounter -S91213S Laceration without foreign body of unspecified great toe with damage to nail, sequela -S91214A Laceration without foreign body of right lesser toe(s) with damage to nail, initial encounter -S91214D Laceration without foreign body of right lesser toe(s) with damage to nail, subsequent encounter -S91214S Laceration without foreign body of right lesser toe(s) with damage to nail, sequela -S91215A Laceration without foreign body of left lesser toe(s) with damage to nail, initial encounter -S91215D Laceration without foreign body of left lesser toe(s) with damage to nail, subsequent encounter -S91215S Laceration without foreign body of left lesser toe(s) with damage to nail, sequela -S91216A Laceration without foreign body of unspecified lesser toe(s) with damage to nail, initial encounter -S91216D Laceration without foreign body of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91216S Laceration without foreign body of unspecified lesser toe(s) with damage to nail, sequela -S91219A Laceration without foreign body of unspecified toe(s) with damage to nail, initial encounter -S91219D Laceration without foreign body of unspecified toe(s) with damage to nail, subsequent encounter -S91219S Laceration without foreign body of unspecified toe(s) with damage to nail, sequela -S91221A Laceration with foreign body of right great toe with damage to nail, initial encounter -S91221D Laceration with foreign body of right great toe with damage to nail, subsequent encounter -S91221S Laceration with foreign body of right great toe with damage to nail, sequela -S91222A Laceration with foreign body of left great toe with damage to nail, initial encounter -S91222D Laceration with foreign body of left great toe with damage to nail, subsequent encounter -S91222S Laceration with foreign body of left great toe with damage to nail, sequela -S91223A Laceration with foreign body of unspecified great toe with damage to nail, initial encounter -S91223D Laceration with foreign body of unspecified great toe with damage to nail, subsequent encounter -S91223S Laceration with foreign body of unspecified great toe with damage to nail, sequela -S91224A Laceration with foreign body of right lesser toe(s) with damage to nail, initial encounter -S91224D Laceration with foreign body of right lesser toe(s) with damage to nail, subsequent encounter -S91224S Laceration with foreign body of right lesser toe(s) with damage to nail, sequela -S91225A Laceration with foreign body of left lesser toe(s) with damage to nail, initial encounter -S91225D Laceration with foreign body of left lesser toe(s) with damage to nail, subsequent encounter -S91225S Laceration with foreign body of left lesser toe(s) with damage to nail, sequela -S91226A Laceration with foreign body of unspecified lesser toe(s) with damage to nail, initial encounter -S91226D Laceration with foreign body of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91226S Laceration with foreign body of unspecified lesser toe(s) with damage to nail, sequela -S91229A Laceration with foreign body of unspecified toe(s) with damage to nail, initial encounter -S91229D Laceration with foreign body of unspecified toe(s) with damage to nail, subsequent encounter -S91229S Laceration with foreign body of unspecified toe(s) with damage to nail, sequela -S91231A Puncture wound without foreign body of right great toe with damage to nail, initial encounter -S91231D Puncture wound without foreign body of right great toe with damage to nail, subsequent encounter -S91231S Puncture wound without foreign body of right great toe with damage to nail, sequela -S91232A Puncture wound without foreign body of left great toe with damage to nail, initial encounter -S91232D Puncture wound without foreign body of left great toe with damage to nail, subsequent encounter -S91232S Puncture wound without foreign body of left great toe with damage to nail, sequela -S91233A Puncture wound without foreign body of unspecified great toe with damage to nail, initial encounter -S91233D Puncture wound without foreign body of unspecified great toe with damage to nail, subsequent encounter -S91233S Puncture wound without foreign body of unspecified great toe with damage to nail, sequela -S91234A Puncture wound without foreign body of right lesser toe(s) with damage to nail, initial encounter -S91234D Puncture wound without foreign body of right lesser toe(s) with damage to nail, subsequent encounter -S91234S Puncture wound without foreign body of right lesser toe(s) with damage to nail, sequela -S91235A Puncture wound without foreign body of left lesser toe(s) with damage to nail, initial encounter -S91235D Puncture wound without foreign body of left lesser toe(s) with damage to nail, subsequent encounter -S91235S Puncture wound without foreign body of left lesser toe(s) with damage to nail, sequela -S91236A Puncture wound without foreign body of unspecified lesser toe(s) with damage to nail, initial encounter -S91236D Puncture wound without foreign body of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91236S Puncture wound without foreign body of unspecified lesser toe(s) with damage to nail, sequela -S91239A Puncture wound without foreign body of unspecified toe(s) with damage to nail, initial encounter -S91239D Puncture wound without foreign body of unspecified toe(s) with damage to nail, subsequent encounter -S91239S Puncture wound without foreign body of unspecified toe(s) with damage to nail, sequela -S91241A Puncture wound with foreign body of right great toe with damage to nail, initial encounter -S91241D Puncture wound with foreign body of right great toe with damage to nail, subsequent encounter -S91241S Puncture wound with foreign body of right great toe with damage to nail, sequela -S91242A Puncture wound with foreign body of left great toe with damage to nail, initial encounter -S91242D Puncture wound with foreign body of left great toe with damage to nail, subsequent encounter -S91242S Puncture wound with foreign body of left great toe with damage to nail, sequela -S91243A Puncture wound with foreign body of unspecified great toe with damage to nail, initial encounter -S91243D Puncture wound with foreign body of unspecified great toe with damage to nail, subsequent encounter -S91243S Puncture wound with foreign body of unspecified great toe with damage to nail, sequela -S91244A Puncture wound with foreign body of right lesser toe(s) with damage to nail, initial encounter -S91244D Puncture wound with foreign body of right lesser toe(s) with damage to nail, subsequent encounter -S91244S Puncture wound with foreign body of right lesser toe(s) with damage to nail, sequela -S91245A Puncture wound with foreign body of left lesser toe(s) with damage to nail, initial encounter -S91245D Puncture wound with foreign body of left lesser toe(s) with damage to nail, subsequent encounter -S91245S Puncture wound with foreign body of left lesser toe(s) with damage to nail, sequela -S91246A Puncture wound with foreign body of unspecified lesser toe(s) with damage to nail, initial encounter -S91246D Puncture wound with foreign body of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91246S Puncture wound with foreign body of unspecified lesser toe(s) with damage to nail, sequela -S91249A Puncture wound with foreign body of unspecified toe(s) with damage to nail, initial encounter -S91249D Puncture wound with foreign body of unspecified toe(s) with damage to nail, subsequent encounter -S91249S Puncture wound with foreign body of unspecified toe(s) with damage to nail, sequela -S91251A Open bite of right great toe with damage to nail, initial encounter -S91251D Open bite of right great toe with damage to nail, subsequent encounter -S91251S Open bite of right great toe with damage to nail, sequela -S91252A Open bite of left great toe with damage to nail, initial encounter -S91252D Open bite of left great toe with damage to nail, subsequent encounter -S91252S Open bite of left great toe with damage to nail, sequela -S91253A Open bite of unspecified great toe with damage to nail, initial encounter -S91253D Open bite of unspecified great toe with damage to nail, subsequent encounter -S91253S Open bite of unspecified great toe with damage to nail, sequela -S91254A Open bite of right lesser toe(s) with damage to nail, initial encounter -S91254D Open bite of right lesser toe(s) with damage to nail, subsequent encounter -S91254S Open bite of right lesser toe(s) with damage to nail, sequela -S91255A Open bite of left lesser toe(s) with damage to nail, initial encounter -S91255D Open bite of left lesser toe(s) with damage to nail, subsequent encounter -S91255S Open bite of left lesser toe(s) with damage to nail, sequela -S91256A Open bite of unspecified lesser toe(s) with damage to nail, initial encounter -S91256D Open bite of unspecified lesser toe(s) with damage to nail, subsequent encounter -S91256S Open bite of unspecified lesser toe(s) with damage to nail, sequela -S91259A Open bite of unspecified toe(s) with damage to nail, initial encounter -S91259D Open bite of unspecified toe(s) with damage to nail, subsequent encounter -S91259S Open bite of unspecified toe(s) with damage to nail, sequela -S91301A Unspecified open wound, right foot, initial encounter -S91301D Unspecified open wound, right foot, subsequent encounter -S91301S Unspecified open wound, right foot, sequela -S91302A Unspecified open wound, left foot, initial encounter -S91302D Unspecified open wound, left foot, subsequent encounter -S91302S Unspecified open wound, left foot, sequela -S91309A Unspecified open wound, unspecified foot, initial encounter -S91309D Unspecified open wound, unspecified foot, subsequent encounter -S91309S Unspecified open wound, unspecified foot, sequela -S91311A Laceration without foreign body, right foot, initial encounter -S91311D Laceration without foreign body, right foot, subsequent encounter -S91311S Laceration without foreign body, right foot, sequela -S91312A Laceration without foreign body, left foot, initial encounter -S91312D Laceration without foreign body, left foot, subsequent encounter -S91312S Laceration without foreign body, left foot, sequela -S91319A Laceration without foreign body, unspecified foot, initial encounter -S91319D Laceration without foreign body, unspecified foot, subsequent encounter -S91319S Laceration without foreign body, unspecified foot, sequela -S91321A Laceration with foreign body, right foot, initial encounter -S91321D Laceration with foreign body, right foot, subsequent encounter -S91321S Laceration with foreign body, right foot, sequela -S91322A Laceration with foreign body, left foot, initial encounter -S91322D Laceration with foreign body, left foot, subsequent encounter -S91322S Laceration with foreign body, left foot, sequela -S91329A Laceration with foreign body, unspecified foot, initial encounter -S91329D Laceration with foreign body, unspecified foot, subsequent encounter -S91329S Laceration with foreign body, unspecified foot, sequela -S91331A Puncture wound without foreign body, right foot, initial encounter -S91331D Puncture wound without foreign body, right foot, subsequent encounter -S91331S Puncture wound without foreign body, right foot, sequela -S91332A Puncture wound without foreign body, left foot, initial encounter -S91332D Puncture wound without foreign body, left foot, subsequent encounter -S91332S Puncture wound without foreign body, left foot, sequela -S91339A Puncture wound without foreign body, unspecified foot, initial encounter -S91339D Puncture wound without foreign body, unspecified foot, subsequent encounter -S91339S Puncture wound without foreign body, unspecified foot, sequela -S91341A Puncture wound with foreign body, right foot, initial encounter -S91341D Puncture wound with foreign body, right foot, subsequent encounter -S91341S Puncture wound with foreign body, right foot, sequela -S91342A Puncture wound with foreign body, left foot, initial encounter -S91342D Puncture wound with foreign body, left foot, subsequent encounter -S91342S Puncture wound with foreign body, left foot, sequela -S91349A Puncture wound with foreign body, unspecified foot, initial encounter -S91349D Puncture wound with foreign body, unspecified foot, subsequent encounter -S91349S Puncture wound with foreign body, unspecified foot, sequela -S91351A Open bite, right foot, initial encounter -S91351D Open bite, right foot, subsequent encounter -S91351S Open bite, right foot, sequela -S91352A Open bite, left foot, initial encounter -S91352D Open bite, left foot, subsequent encounter -S91352S Open bite, left foot, sequela -S91359A Open bite, unspecified foot, initial encounter -S91359D Open bite, unspecified foot, subsequent encounter -S91359S Open bite, unspecified foot, sequela -S92001A Unspecified fracture of right calcaneus, initial encounter for closed fracture -S92001B Unspecified fracture of right calcaneus, initial encounter for open fracture -S92001D Unspecified fracture of right calcaneus, subsequent encounter for fracture with routine healing -S92001G Unspecified fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S92001K Unspecified fracture of right calcaneus, subsequent encounter for fracture with nonunion -S92001P Unspecified fracture of right calcaneus, subsequent encounter for fracture with malunion -S92001S Unspecified fracture of right calcaneus, sequela -S92002A Unspecified fracture of left calcaneus, initial encounter for closed fracture -S92002B Unspecified fracture of left calcaneus, initial encounter for open fracture -S92002D Unspecified fracture of left calcaneus, subsequent encounter for fracture with routine healing -S92002G Unspecified fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S92002K Unspecified fracture of left calcaneus, subsequent encounter for fracture with nonunion -S92002P Unspecified fracture of left calcaneus, subsequent encounter for fracture with malunion -S92002S Unspecified fracture of left calcaneus, sequela -S92009A Unspecified fracture of unspecified calcaneus, initial encounter for closed fracture -S92009B Unspecified fracture of unspecified calcaneus, initial encounter for open fracture -S92009D Unspecified fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92009G Unspecified fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92009K Unspecified fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92009P Unspecified fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S92009S Unspecified fracture of unspecified calcaneus, sequela -S92011A Displaced fracture of body of right calcaneus, initial encounter for closed fracture -S92011B Displaced fracture of body of right calcaneus, initial encounter for open fracture -S92011D Displaced fracture of body of right calcaneus, subsequent encounter for fracture with routine healing -S92011G Displaced fracture of body of right calcaneus, subsequent encounter for fracture with delayed healing -S92011K Displaced fracture of body of right calcaneus, subsequent encounter for fracture with nonunion -S92011P Displaced fracture of body of right calcaneus, subsequent encounter for fracture with malunion -S92011S Displaced fracture of body of right calcaneus, sequela -S92012A Displaced fracture of body of left calcaneus, initial encounter for closed fracture -S92012B Displaced fracture of body of left calcaneus, initial encounter for open fracture -S92012D Displaced fracture of body of left calcaneus, subsequent encounter for fracture with routine healing -S92012G Displaced fracture of body of left calcaneus, subsequent encounter for fracture with delayed healing -S92012K Displaced fracture of body of left calcaneus, subsequent encounter for fracture with nonunion -S92012P Displaced fracture of body of left calcaneus, subsequent encounter for fracture with malunion -S92012S Displaced fracture of body of left calcaneus, sequela -S92013A Displaced fracture of body of unspecified calcaneus, initial encounter for closed fracture -S92013B Displaced fracture of body of unspecified calcaneus, initial encounter for open fracture -S92013D Displaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92013G Displaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92013K Displaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92013P Displaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with malunion -S92013S Displaced fracture of body of unspecified calcaneus, sequela -S92014A Nondisplaced fracture of body of right calcaneus, initial encounter for closed fracture -S92014B Nondisplaced fracture of body of right calcaneus, initial encounter for open fracture -S92014D Nondisplaced fracture of body of right calcaneus, subsequent encounter for fracture with routine healing -S92014G Nondisplaced fracture of body of right calcaneus, subsequent encounter for fracture with delayed healing -S92014K Nondisplaced fracture of body of right calcaneus, subsequent encounter for fracture with nonunion -S92014P Nondisplaced fracture of body of right calcaneus, subsequent encounter for fracture with malunion -S92014S Nondisplaced fracture of body of right calcaneus, sequela -S92015A Nondisplaced fracture of body of left calcaneus, initial encounter for closed fracture -S92015B Nondisplaced fracture of body of left calcaneus, initial encounter for open fracture -S92015D Nondisplaced fracture of body of left calcaneus, subsequent encounter for fracture with routine healing -S92015G Nondisplaced fracture of body of left calcaneus, subsequent encounter for fracture with delayed healing -S92015K Nondisplaced fracture of body of left calcaneus, subsequent encounter for fracture with nonunion -S92015P Nondisplaced fracture of body of left calcaneus, subsequent encounter for fracture with malunion -S92015S Nondisplaced fracture of body of left calcaneus, sequela -S92016A Nondisplaced fracture of body of unspecified calcaneus, initial encounter for closed fracture -S92016B Nondisplaced fracture of body of unspecified calcaneus, initial encounter for open fracture -S92016D Nondisplaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92016G Nondisplaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92016K Nondisplaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92016P Nondisplaced fracture of body of unspecified calcaneus, subsequent encounter for fracture with malunion -S92016S Nondisplaced fracture of body of unspecified calcaneus, sequela -S92021A Displaced fracture of anterior process of right calcaneus, initial encounter for closed fracture -S92021B Displaced fracture of anterior process of right calcaneus, initial encounter for open fracture -S92021D Displaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with routine healing -S92021G Displaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with delayed healing -S92021K Displaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with nonunion -S92021P Displaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with malunion -S92021S Displaced fracture of anterior process of right calcaneus, sequela -S92022A Displaced fracture of anterior process of left calcaneus, initial encounter for closed fracture -S92022B Displaced fracture of anterior process of left calcaneus, initial encounter for open fracture -S92022D Displaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with routine healing -S92022G Displaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with delayed healing -S92022K Displaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with nonunion -S92022P Displaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with malunion -S92022S Displaced fracture of anterior process of left calcaneus, sequela -S92023A Displaced fracture of anterior process of unspecified calcaneus, initial encounter for closed fracture -S92023B Displaced fracture of anterior process of unspecified calcaneus, initial encounter for open fracture -S92023D Displaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92023G Displaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92023K Displaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92023P Displaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with malunion -S92023S Displaced fracture of anterior process of unspecified calcaneus, sequela -S92024A Nondisplaced fracture of anterior process of right calcaneus, initial encounter for closed fracture -S92024B Nondisplaced fracture of anterior process of right calcaneus, initial encounter for open fracture -S92024D Nondisplaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with routine healing -S92024G Nondisplaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with delayed healing -S92024K Nondisplaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with nonunion -S92024P Nondisplaced fracture of anterior process of right calcaneus, subsequent encounter for fracture with malunion -S92024S Nondisplaced fracture of anterior process of right calcaneus, sequela -S92025A Nondisplaced fracture of anterior process of left calcaneus, initial encounter for closed fracture -S92025B Nondisplaced fracture of anterior process of left calcaneus, initial encounter for open fracture -S92025D Nondisplaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with routine healing -S92025G Nondisplaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with delayed healing -S92025K Nondisplaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with nonunion -S92025P Nondisplaced fracture of anterior process of left calcaneus, subsequent encounter for fracture with malunion -S92025S Nondisplaced fracture of anterior process of left calcaneus, sequela -S92026A Nondisplaced fracture of anterior process of unspecified calcaneus, initial encounter for closed fracture -S92026B Nondisplaced fracture of anterior process of unspecified calcaneus, initial encounter for open fracture -S92026D Nondisplaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92026G Nondisplaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92026K Nondisplaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92026P Nondisplaced fracture of anterior process of unspecified calcaneus, subsequent encounter for fracture with malunion -S92026S Nondisplaced fracture of anterior process of unspecified calcaneus, sequela -S92031A Displaced avulsion fracture of tuberosity of right calcaneus, initial encounter for closed fracture -S92031B Displaced avulsion fracture of tuberosity of right calcaneus, initial encounter for open fracture -S92031D Displaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with routine healing -S92031G Displaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with delayed healing -S92031K Displaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with nonunion -S92031P Displaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with malunion -S92031S Displaced avulsion fracture of tuberosity of right calcaneus, sequela -S92032A Displaced avulsion fracture of tuberosity of left calcaneus, initial encounter for closed fracture -S92032B Displaced avulsion fracture of tuberosity of left calcaneus, initial encounter for open fracture -S92032D Displaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with routine healing -S92032G Displaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with delayed healing -S92032K Displaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with nonunion -S92032P Displaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with malunion -S92032S Displaced avulsion fracture of tuberosity of left calcaneus, sequela -S92033A Displaced avulsion fracture of tuberosity of unspecified calcaneus, initial encounter for closed fracture -S92033B Displaced avulsion fracture of tuberosity of unspecified calcaneus, initial encounter for open fracture -S92033D Displaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92033G Displaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92033K Displaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92033P Displaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with malunion -S92033S Displaced avulsion fracture of tuberosity of unspecified calcaneus, sequela -S92034A Nondisplaced avulsion fracture of tuberosity of right calcaneus, initial encounter for closed fracture -S92034B Nondisplaced avulsion fracture of tuberosity of right calcaneus, initial encounter for open fracture -S92034D Nondisplaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with routine healing -S92034G Nondisplaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with delayed healing -S92034K Nondisplaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with nonunion -S92034P Nondisplaced avulsion fracture of tuberosity of right calcaneus, subsequent encounter for fracture with malunion -S92034S Nondisplaced avulsion fracture of tuberosity of right calcaneus, sequela -S92035A Nondisplaced avulsion fracture of tuberosity of left calcaneus, initial encounter for closed fracture -S92035B Nondisplaced avulsion fracture of tuberosity of left calcaneus, initial encounter for open fracture -S92035D Nondisplaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with routine healing -S92035G Nondisplaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with delayed healing -S92035K Nondisplaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with nonunion -S92035P Nondisplaced avulsion fracture of tuberosity of left calcaneus, subsequent encounter for fracture with malunion -S92035S Nondisplaced avulsion fracture of tuberosity of left calcaneus, sequela -S92036A Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, initial encounter for closed fracture -S92036B Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, initial encounter for open fracture -S92036D Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92036G Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92036K Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92036P Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with malunion -S92036S Nondisplaced avulsion fracture of tuberosity of unspecified calcaneus, sequela -S92041A Displaced other fracture of tuberosity of right calcaneus, initial encounter for closed fracture -S92041B Displaced other fracture of tuberosity of right calcaneus, initial encounter for open fracture -S92041D Displaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with routine healing -S92041G Displaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with delayed healing -S92041K Displaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with nonunion -S92041P Displaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with malunion -S92041S Displaced other fracture of tuberosity of right calcaneus, sequela -S92042A Displaced other fracture of tuberosity of left calcaneus, initial encounter for closed fracture -S92042B Displaced other fracture of tuberosity of left calcaneus, initial encounter for open fracture -S92042D Displaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with routine healing -S92042G Displaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with delayed healing -S92042K Displaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with nonunion -S92042P Displaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with malunion -S92042S Displaced other fracture of tuberosity of left calcaneus, sequela -S92043A Displaced other fracture of tuberosity of unspecified calcaneus, initial encounter for closed fracture -S92043B Displaced other fracture of tuberosity of unspecified calcaneus, initial encounter for open fracture -S92043D Displaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92043G Displaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92043K Displaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92043P Displaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with malunion -S92043S Displaced other fracture of tuberosity of unspecified calcaneus, sequela -S92044A Nondisplaced other fracture of tuberosity of right calcaneus, initial encounter for closed fracture -S92044B Nondisplaced other fracture of tuberosity of right calcaneus, initial encounter for open fracture -S92044D Nondisplaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with routine healing -S92044G Nondisplaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with delayed healing -S92044K Nondisplaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with nonunion -S92044P Nondisplaced other fracture of tuberosity of right calcaneus, subsequent encounter for fracture with malunion -S92044S Nondisplaced other fracture of tuberosity of right calcaneus, sequela -S92045A Nondisplaced other fracture of tuberosity of left calcaneus, initial encounter for closed fracture -S92045B Nondisplaced other fracture of tuberosity of left calcaneus, initial encounter for open fracture -S92045D Nondisplaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with routine healing -S92045G Nondisplaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with delayed healing -S92045K Nondisplaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with nonunion -S92045P Nondisplaced other fracture of tuberosity of left calcaneus, subsequent encounter for fracture with malunion -S92045S Nondisplaced other fracture of tuberosity of left calcaneus, sequela -S92046A Nondisplaced other fracture of tuberosity of unspecified calcaneus, initial encounter for closed fracture -S92046B Nondisplaced other fracture of tuberosity of unspecified calcaneus, initial encounter for open fracture -S92046D Nondisplaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92046G Nondisplaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92046K Nondisplaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92046P Nondisplaced other fracture of tuberosity of unspecified calcaneus, subsequent encounter for fracture with malunion -S92046S Nondisplaced other fracture of tuberosity of unspecified calcaneus, sequela -S92051A Displaced other extraarticular fracture of right calcaneus, initial encounter for closed fracture -S92051B Displaced other extraarticular fracture of right calcaneus, initial encounter for open fracture -S92051D Displaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with routine healing -S92051G Displaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S92051K Displaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with nonunion -S92051P Displaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with malunion -S92051S Displaced other extraarticular fracture of right calcaneus, sequela -S92052A Displaced other extraarticular fracture of left calcaneus, initial encounter for closed fracture -S92052B Displaced other extraarticular fracture of left calcaneus, initial encounter for open fracture -S92052D Displaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with routine healing -S92052G Displaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S92052K Displaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with nonunion -S92052P Displaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with malunion -S92052S Displaced other extraarticular fracture of left calcaneus, sequela -S92053A Displaced other extraarticular fracture of unspecified calcaneus, initial encounter for closed fracture -S92053B Displaced other extraarticular fracture of unspecified calcaneus, initial encounter for open fracture -S92053D Displaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92053G Displaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92053K Displaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92053P Displaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S92053S Displaced other extraarticular fracture of unspecified calcaneus, sequela -S92054A Nondisplaced other extraarticular fracture of right calcaneus, initial encounter for closed fracture -S92054B Nondisplaced other extraarticular fracture of right calcaneus, initial encounter for open fracture -S92054D Nondisplaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with routine healing -S92054G Nondisplaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S92054K Nondisplaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with nonunion -S92054P Nondisplaced other extraarticular fracture of right calcaneus, subsequent encounter for fracture with malunion -S92054S Nondisplaced other extraarticular fracture of right calcaneus, sequela -S92055A Nondisplaced other extraarticular fracture of left calcaneus, initial encounter for closed fracture -S92055B Nondisplaced other extraarticular fracture of left calcaneus, initial encounter for open fracture -S92055D Nondisplaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with routine healing -S92055G Nondisplaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S92055K Nondisplaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with nonunion -S92055P Nondisplaced other extraarticular fracture of left calcaneus, subsequent encounter for fracture with malunion -S92055S Nondisplaced other extraarticular fracture of left calcaneus, sequela -S92056A Nondisplaced other extraarticular fracture of unspecified calcaneus, initial encounter for closed fracture -S92056B Nondisplaced other extraarticular fracture of unspecified calcaneus, initial encounter for open fracture -S92056D Nondisplaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92056G Nondisplaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92056K Nondisplaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92056P Nondisplaced other extraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S92056S Nondisplaced other extraarticular fracture of unspecified calcaneus, sequela -S92061A Displaced intraarticular fracture of right calcaneus, initial encounter for closed fracture -S92061B Displaced intraarticular fracture of right calcaneus, initial encounter for open fracture -S92061D Displaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with routine healing -S92061G Displaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S92061K Displaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with nonunion -S92061P Displaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with malunion -S92061S Displaced intraarticular fracture of right calcaneus, sequela -S92062A Displaced intraarticular fracture of left calcaneus, initial encounter for closed fracture -S92062B Displaced intraarticular fracture of left calcaneus, initial encounter for open fracture -S92062D Displaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with routine healing -S92062G Displaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S92062K Displaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with nonunion -S92062P Displaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with malunion -S92062S Displaced intraarticular fracture of left calcaneus, sequela -S92063A Displaced intraarticular fracture of unspecified calcaneus, initial encounter for closed fracture -S92063B Displaced intraarticular fracture of unspecified calcaneus, initial encounter for open fracture -S92063D Displaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92063G Displaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92063K Displaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92063P Displaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S92063S Displaced intraarticular fracture of unspecified calcaneus, sequela -S92064A Nondisplaced intraarticular fracture of right calcaneus, initial encounter for closed fracture -S92064B Nondisplaced intraarticular fracture of right calcaneus, initial encounter for open fracture -S92064D Nondisplaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with routine healing -S92064G Nondisplaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S92064K Nondisplaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with nonunion -S92064P Nondisplaced intraarticular fracture of right calcaneus, subsequent encounter for fracture with malunion -S92064S Nondisplaced intraarticular fracture of right calcaneus, sequela -S92065A Nondisplaced intraarticular fracture of left calcaneus, initial encounter for closed fracture -S92065B Nondisplaced intraarticular fracture of left calcaneus, initial encounter for open fracture -S92065D Nondisplaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with routine healing -S92065G Nondisplaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S92065K Nondisplaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with nonunion -S92065P Nondisplaced intraarticular fracture of left calcaneus, subsequent encounter for fracture with malunion -S92065S Nondisplaced intraarticular fracture of left calcaneus, sequela -S92066A Nondisplaced intraarticular fracture of unspecified calcaneus, initial encounter for closed fracture -S92066B Nondisplaced intraarticular fracture of unspecified calcaneus, initial encounter for open fracture -S92066D Nondisplaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S92066G Nondisplaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S92066K Nondisplaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S92066P Nondisplaced intraarticular fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S92066S Nondisplaced intraarticular fracture of unspecified calcaneus, sequela -S92101A Unspecified fracture of right talus, initial encounter for closed fracture -S92101B Unspecified fracture of right talus, initial encounter for open fracture -S92101D Unspecified fracture of right talus, subsequent encounter for fracture with routine healing -S92101G Unspecified fracture of right talus, subsequent encounter for fracture with delayed healing -S92101K Unspecified fracture of right talus, subsequent encounter for fracture with nonunion -S92101P Unspecified fracture of right talus, subsequent encounter for fracture with malunion -S92101S Unspecified fracture of right talus, sequela -S92102A Unspecified fracture of left talus, initial encounter for closed fracture -S92102B Unspecified fracture of left talus, initial encounter for open fracture -S92102D Unspecified fracture of left talus, subsequent encounter for fracture with routine healing -S92102G Unspecified fracture of left talus, subsequent encounter for fracture with delayed healing -S92102K Unspecified fracture of left talus, subsequent encounter for fracture with nonunion -S92102P Unspecified fracture of left talus, subsequent encounter for fracture with malunion -S92102S Unspecified fracture of left talus, sequela -S92109A Unspecified fracture of unspecified talus, initial encounter for closed fracture -S92109B Unspecified fracture of unspecified talus, initial encounter for open fracture -S92109D Unspecified fracture of unspecified talus, subsequent encounter for fracture with routine healing -S92109G Unspecified fracture of unspecified talus, subsequent encounter for fracture with delayed healing -S92109K Unspecified fracture of unspecified talus, subsequent encounter for fracture with nonunion -S92109P Unspecified fracture of unspecified talus, subsequent encounter for fracture with malunion -S92109S Unspecified fracture of unspecified talus, sequela -S92111A Displaced fracture of neck of right talus, initial encounter for closed fracture -S92111B Displaced fracture of neck of right talus, initial encounter for open fracture -S92111D Displaced fracture of neck of right talus, subsequent encounter for fracture with routine healing -S92111G Displaced fracture of neck of right talus, subsequent encounter for fracture with delayed healing -S92111K Displaced fracture of neck of right talus, subsequent encounter for fracture with nonunion -S92111P Displaced fracture of neck of right talus, subsequent encounter for fracture with malunion -S92111S Displaced fracture of neck of right talus, sequela -S92112A Displaced fracture of neck of left talus, initial encounter for closed fracture -S92112B Displaced fracture of neck of left talus, initial encounter for open fracture -S92112D Displaced fracture of neck of left talus, subsequent encounter for fracture with routine healing -S92112G Displaced fracture of neck of left talus, subsequent encounter for fracture with delayed healing -S92112K Displaced fracture of neck of left talus, subsequent encounter for fracture with nonunion -S92112P Displaced fracture of neck of left talus, subsequent encounter for fracture with malunion -S92112S Displaced fracture of neck of left talus, sequela -S92113A Displaced fracture of neck of unspecified talus, initial encounter for closed fracture -S92113B Displaced fracture of neck of unspecified talus, initial encounter for open fracture -S92113D Displaced fracture of neck of unspecified talus, subsequent encounter for fracture with routine healing -S92113G Displaced fracture of neck of unspecified talus, subsequent encounter for fracture with delayed healing -S92113K Displaced fracture of neck of unspecified talus, subsequent encounter for fracture with nonunion -S92113P Displaced fracture of neck of unspecified talus, subsequent encounter for fracture with malunion -S92113S Displaced fracture of neck of unspecified talus, sequela -S92114A Nondisplaced fracture of neck of right talus, initial encounter for closed fracture -S92114B Nondisplaced fracture of neck of right talus, initial encounter for open fracture -S92114D Nondisplaced fracture of neck of right talus, subsequent encounter for fracture with routine healing -S92114G Nondisplaced fracture of neck of right talus, subsequent encounter for fracture with delayed healing -S92114K Nondisplaced fracture of neck of right talus, subsequent encounter for fracture with nonunion -S92114P Nondisplaced fracture of neck of right talus, subsequent encounter for fracture with malunion -S92114S Nondisplaced fracture of neck of right talus, sequela -S92115A Nondisplaced fracture of neck of left talus, initial encounter for closed fracture -S92115B Nondisplaced fracture of neck of left talus, initial encounter for open fracture -S92115D Nondisplaced fracture of neck of left talus, subsequent encounter for fracture with routine healing -S92115G Nondisplaced fracture of neck of left talus, subsequent encounter for fracture with delayed healing -S92115K Nondisplaced fracture of neck of left talus, subsequent encounter for fracture with nonunion -S92115P Nondisplaced fracture of neck of left talus, subsequent encounter for fracture with malunion -S92115S Nondisplaced fracture of neck of left talus, sequela -S92116A Nondisplaced fracture of neck of unspecified talus, initial encounter for closed fracture -S92116B Nondisplaced fracture of neck of unspecified talus, initial encounter for open fracture -S92116D Nondisplaced fracture of neck of unspecified talus, subsequent encounter for fracture with routine healing -S92116G Nondisplaced fracture of neck of unspecified talus, subsequent encounter for fracture with delayed healing -S92116K Nondisplaced fracture of neck of unspecified talus, subsequent encounter for fracture with nonunion -S92116P Nondisplaced fracture of neck of unspecified talus, subsequent encounter for fracture with malunion -S92116S Nondisplaced fracture of neck of unspecified talus, sequela -S92121A Displaced fracture of body of right talus, initial encounter for closed fracture -S92121B Displaced fracture of body of right talus, initial encounter for open fracture -S92121D Displaced fracture of body of right talus, subsequent encounter for fracture with routine healing -S92121G Displaced fracture of body of right talus, subsequent encounter for fracture with delayed healing -S92121K Displaced fracture of body of right talus, subsequent encounter for fracture with nonunion -S92121P Displaced fracture of body of right talus, subsequent encounter for fracture with malunion -S92121S Displaced fracture of body of right talus, sequela -S92122A Displaced fracture of body of left talus, initial encounter for closed fracture -S92122B Displaced fracture of body of left talus, initial encounter for open fracture -S92122D Displaced fracture of body of left talus, subsequent encounter for fracture with routine healing -S92122G Displaced fracture of body of left talus, subsequent encounter for fracture with delayed healing -S92122K Displaced fracture of body of left talus, subsequent encounter for fracture with nonunion -S92122P Displaced fracture of body of left talus, subsequent encounter for fracture with malunion -S92122S Displaced fracture of body of left talus, sequela -S92123A Displaced fracture of body of unspecified talus, initial encounter for closed fracture -S92123B Displaced fracture of body of unspecified talus, initial encounter for open fracture -S92123D Displaced fracture of body of unspecified talus, subsequent encounter for fracture with routine healing -S92123G Displaced fracture of body of unspecified talus, subsequent encounter for fracture with delayed healing -S92123K Displaced fracture of body of unspecified talus, subsequent encounter for fracture with nonunion -S92123P Displaced fracture of body of unspecified talus, subsequent encounter for fracture with malunion -S92123S Displaced fracture of body of unspecified talus, sequela -S92124A Nondisplaced fracture of body of right talus, initial encounter for closed fracture -S92124B Nondisplaced fracture of body of right talus, initial encounter for open fracture -S92124D Nondisplaced fracture of body of right talus, subsequent encounter for fracture with routine healing -S92124G Nondisplaced fracture of body of right talus, subsequent encounter for fracture with delayed healing -S92124K Nondisplaced fracture of body of right talus, subsequent encounter for fracture with nonunion -S92124P Nondisplaced fracture of body of right talus, subsequent encounter for fracture with malunion -S92124S Nondisplaced fracture of body of right talus, sequela -S92125A Nondisplaced fracture of body of left talus, initial encounter for closed fracture -S92125B Nondisplaced fracture of body of left talus, initial encounter for open fracture -S92125D Nondisplaced fracture of body of left talus, subsequent encounter for fracture with routine healing -S92125G Nondisplaced fracture of body of left talus, subsequent encounter for fracture with delayed healing -S92125K Nondisplaced fracture of body of left talus, subsequent encounter for fracture with nonunion -S92125P Nondisplaced fracture of body of left talus, subsequent encounter for fracture with malunion -S92125S Nondisplaced fracture of body of left talus, sequela -S92126A Nondisplaced fracture of body of unspecified talus, initial encounter for closed fracture -S92126B Nondisplaced fracture of body of unspecified talus, initial encounter for open fracture -S92126D Nondisplaced fracture of body of unspecified talus, subsequent encounter for fracture with routine healing -S92126G Nondisplaced fracture of body of unspecified talus, subsequent encounter for fracture with delayed healing -S92126K Nondisplaced fracture of body of unspecified talus, subsequent encounter for fracture with nonunion -S92126P Nondisplaced fracture of body of unspecified talus, subsequent encounter for fracture with malunion -S92126S Nondisplaced fracture of body of unspecified talus, sequela -S92131A Displaced fracture of posterior process of right talus, initial encounter for closed fracture -S92131B Displaced fracture of posterior process of right talus, initial encounter for open fracture -S92131D Displaced fracture of posterior process of right talus, subsequent encounter for fracture with routine healing -S92131G Displaced fracture of posterior process of right talus, subsequent encounter for fracture with delayed healing -S92131K Displaced fracture of posterior process of right talus, subsequent encounter for fracture with nonunion -S92131P Displaced fracture of posterior process of right talus, subsequent encounter for fracture with malunion -S92131S Displaced fracture of posterior process of right talus, sequela -S92132A Displaced fracture of posterior process of left talus, initial encounter for closed fracture -S92132B Displaced fracture of posterior process of left talus, initial encounter for open fracture -S92132D Displaced fracture of posterior process of left talus, subsequent encounter for fracture with routine healing -S92132G Displaced fracture of posterior process of left talus, subsequent encounter for fracture with delayed healing -S92132K Displaced fracture of posterior process of left talus, subsequent encounter for fracture with nonunion -S92132P Displaced fracture of posterior process of left talus, subsequent encounter for fracture with malunion -S92132S Displaced fracture of posterior process of left talus, sequela -S92133A Displaced fracture of posterior process of unspecified talus, initial encounter for closed fracture -S92133B Displaced fracture of posterior process of unspecified talus, initial encounter for open fracture -S92133D Displaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with routine healing -S92133G Displaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with delayed healing -S92133K Displaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with nonunion -S92133P Displaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with malunion -S92133S Displaced fracture of posterior process of unspecified talus, sequela -S92134A Nondisplaced fracture of posterior process of right talus, initial encounter for closed fracture -S92134B Nondisplaced fracture of posterior process of right talus, initial encounter for open fracture -S92134D Nondisplaced fracture of posterior process of right talus, subsequent encounter for fracture with routine healing -S92134G Nondisplaced fracture of posterior process of right talus, subsequent encounter for fracture with delayed healing -S92134K Nondisplaced fracture of posterior process of right talus, subsequent encounter for fracture with nonunion -S92134P Nondisplaced fracture of posterior process of right talus, subsequent encounter for fracture with malunion -S92134S Nondisplaced fracture of posterior process of right talus, sequela -S92135A Nondisplaced fracture of posterior process of left talus, initial encounter for closed fracture -S92135B Nondisplaced fracture of posterior process of left talus, initial encounter for open fracture -S92135D Nondisplaced fracture of posterior process of left talus, subsequent encounter for fracture with routine healing -S92135G Nondisplaced fracture of posterior process of left talus, subsequent encounter for fracture with delayed healing -S92135K Nondisplaced fracture of posterior process of left talus, subsequent encounter for fracture with nonunion -S92135P Nondisplaced fracture of posterior process of left talus, subsequent encounter for fracture with malunion -S92135S Nondisplaced fracture of posterior process of left talus, sequela -S92136A Nondisplaced fracture of posterior process of unspecified talus, initial encounter for closed fracture -S92136B Nondisplaced fracture of posterior process of unspecified talus, initial encounter for open fracture -S92136D Nondisplaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with routine healing -S92136G Nondisplaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with delayed healing -S92136K Nondisplaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with nonunion -S92136P Nondisplaced fracture of posterior process of unspecified talus, subsequent encounter for fracture with malunion -S92136S Nondisplaced fracture of posterior process of unspecified talus, sequela -S92141A Displaced dome fracture of right talus, initial encounter for closed fracture -S92141B Displaced dome fracture of right talus, initial encounter for open fracture -S92141D Displaced dome fracture of right talus, subsequent encounter for fracture with routine healing -S92141G Displaced dome fracture of right talus, subsequent encounter for fracture with delayed healing -S92141K Displaced dome fracture of right talus, subsequent encounter for fracture with nonunion -S92141P Displaced dome fracture of right talus, subsequent encounter for fracture with malunion -S92141S Displaced dome fracture of right talus, sequela -S92142A Displaced dome fracture of left talus, initial encounter for closed fracture -S92142B Displaced dome fracture of left talus, initial encounter for open fracture -S92142D Displaced dome fracture of left talus, subsequent encounter for fracture with routine healing -S92142G Displaced dome fracture of left talus, subsequent encounter for fracture with delayed healing -S92142K Displaced dome fracture of left talus, subsequent encounter for fracture with nonunion -S92142P Displaced dome fracture of left talus, subsequent encounter for fracture with malunion -S92142S Displaced dome fracture of left talus, sequela -S92143A Displaced dome fracture of unspecified talus, initial encounter for closed fracture -S92143B Displaced dome fracture of unspecified talus, initial encounter for open fracture -S92143D Displaced dome fracture of unspecified talus, subsequent encounter for fracture with routine healing -S92143G Displaced dome fracture of unspecified talus, subsequent encounter for fracture with delayed healing -S92143K Displaced dome fracture of unspecified talus, subsequent encounter for fracture with nonunion -S92143P Displaced dome fracture of unspecified talus, subsequent encounter for fracture with malunion -S92143S Displaced dome fracture of unspecified talus, sequela -S92144A Nondisplaced dome fracture of right talus, initial encounter for closed fracture -S92144B Nondisplaced dome fracture of right talus, initial encounter for open fracture -S92144D Nondisplaced dome fracture of right talus, subsequent encounter for fracture with routine healing -S92144G Nondisplaced dome fracture of right talus, subsequent encounter for fracture with delayed healing -S92144K Nondisplaced dome fracture of right talus, subsequent encounter for fracture with nonunion -S92144P Nondisplaced dome fracture of right talus, subsequent encounter for fracture with malunion -S92144S Nondisplaced dome fracture of right talus, sequela -S92145A Nondisplaced dome fracture of left talus, initial encounter for closed fracture -S92145B Nondisplaced dome fracture of left talus, initial encounter for open fracture -S92145D Nondisplaced dome fracture of left talus, subsequent encounter for fracture with routine healing -S92145G Nondisplaced dome fracture of left talus, subsequent encounter for fracture with delayed healing -S92145K Nondisplaced dome fracture of left talus, subsequent encounter for fracture with nonunion -S92145P Nondisplaced dome fracture of left talus, subsequent encounter for fracture with malunion -S92145S Nondisplaced dome fracture of left talus, sequela -S92146A Nondisplaced dome fracture of unspecified talus, initial encounter for closed fracture -S92146B Nondisplaced dome fracture of unspecified talus, initial encounter for open fracture -S92146D Nondisplaced dome fracture of unspecified talus, subsequent encounter for fracture with routine healing -S92146G Nondisplaced dome fracture of unspecified talus, subsequent encounter for fracture with delayed healing -S92146K Nondisplaced dome fracture of unspecified talus, subsequent encounter for fracture with nonunion -S92146P Nondisplaced dome fracture of unspecified talus, subsequent encounter for fracture with malunion -S92146S Nondisplaced dome fracture of unspecified talus, sequela -S92151A Displaced avulsion fracture (chip fracture) of right talus, initial encounter for closed fracture -S92151B Displaced avulsion fracture (chip fracture) of right talus, initial encounter for open fracture -S92151D Displaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with routine healing -S92151G Displaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with delayed healing -S92151K Displaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with nonunion -S92151P Displaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with malunion -S92151S Displaced avulsion fracture (chip fracture) of right talus, sequela -S92152A Displaced avulsion fracture (chip fracture) of left talus, initial encounter for closed fracture -S92152B Displaced avulsion fracture (chip fracture) of left talus, initial encounter for open fracture -S92152D Displaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with routine healing -S92152G Displaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with delayed healing -S92152K Displaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with nonunion -S92152P Displaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with malunion -S92152S Displaced avulsion fracture (chip fracture) of left talus, sequela -S92153A Displaced avulsion fracture (chip fracture) of unspecified talus, initial encounter for closed fracture -S92153B Displaced avulsion fracture (chip fracture) of unspecified talus, initial encounter for open fracture -S92153D Displaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with routine healing -S92153G Displaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with delayed healing -S92153K Displaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with nonunion -S92153P Displaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with malunion -S92153S Displaced avulsion fracture (chip fracture) of unspecified talus, sequela -S92154A Nondisplaced avulsion fracture (chip fracture) of right talus, initial encounter for closed fracture -S92154B Nondisplaced avulsion fracture (chip fracture) of right talus, initial encounter for open fracture -S92154D Nondisplaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with routine healing -S92154G Nondisplaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with delayed healing -S92154K Nondisplaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with nonunion -S92154P Nondisplaced avulsion fracture (chip fracture) of right talus, subsequent encounter for fracture with malunion -S92154S Nondisplaced avulsion fracture (chip fracture) of right talus, sequela -S92155A Nondisplaced avulsion fracture (chip fracture) of left talus, initial encounter for closed fracture -S92155B Nondisplaced avulsion fracture (chip fracture) of left talus, initial encounter for open fracture -S92155D Nondisplaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with routine healing -S92155G Nondisplaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with delayed healing -S92155K Nondisplaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with nonunion -S92155P Nondisplaced avulsion fracture (chip fracture) of left talus, subsequent encounter for fracture with malunion -S92155S Nondisplaced avulsion fracture (chip fracture) of left talus, sequela -S92156A Nondisplaced avulsion fracture (chip fracture) of unspecified talus, initial encounter for closed fracture -S92156B Nondisplaced avulsion fracture (chip fracture) of unspecified talus, initial encounter for open fracture -S92156D Nondisplaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with routine healing -S92156G Nondisplaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with delayed healing -S92156K Nondisplaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with nonunion -S92156P Nondisplaced avulsion fracture (chip fracture) of unspecified talus, subsequent encounter for fracture with malunion -S92156S Nondisplaced avulsion fracture (chip fracture) of unspecified talus, sequela -S92191A Other fracture of right talus, initial encounter for closed fracture -S92191B Other fracture of right talus, initial encounter for open fracture -S92191D Other fracture of right talus, subsequent encounter for fracture with routine healing -S92191G Other fracture of right talus, subsequent encounter for fracture with delayed healing -S92191K Other fracture of right talus, subsequent encounter for fracture with nonunion -S92191P Other fracture of right talus, subsequent encounter for fracture with malunion -S92191S Other fracture of right talus, sequela -S92192A Other fracture of left talus, initial encounter for closed fracture -S92192B Other fracture of left talus, initial encounter for open fracture -S92192D Other fracture of left talus, subsequent encounter for fracture with routine healing -S92192G Other fracture of left talus, subsequent encounter for fracture with delayed healing -S92192K Other fracture of left talus, subsequent encounter for fracture with nonunion -S92192P Other fracture of left talus, subsequent encounter for fracture with malunion -S92192S Other fracture of left talus, sequela -S92199A Other fracture of unspecified talus, initial encounter for closed fracture -S92199B Other fracture of unspecified talus, initial encounter for open fracture -S92199D Other fracture of unspecified talus, subsequent encounter for fracture with routine healing -S92199G Other fracture of unspecified talus, subsequent encounter for fracture with delayed healing -S92199K Other fracture of unspecified talus, subsequent encounter for fracture with nonunion -S92199P Other fracture of unspecified talus, subsequent encounter for fracture with malunion -S92199S Other fracture of unspecified talus, sequela -S92201A Fracture of unspecified tarsal bone(s) of right foot, initial encounter for closed fracture -S92201B Fracture of unspecified tarsal bone(s) of right foot, initial encounter for open fracture -S92201D Fracture of unspecified tarsal bone(s) of right foot, subsequent encounter for fracture with routine healing -S92201G Fracture of unspecified tarsal bone(s) of right foot, subsequent encounter for fracture with delayed healing -S92201K Fracture of unspecified tarsal bone(s) of right foot, subsequent encounter for fracture with nonunion -S92201P Fracture of unspecified tarsal bone(s) of right foot, subsequent encounter for fracture with malunion -S92201S Fracture of unspecified tarsal bone(s) of right foot, sequela -S92202A Fracture of unspecified tarsal bone(s) of left foot, initial encounter for closed fracture -S92202B Fracture of unspecified tarsal bone(s) of left foot, initial encounter for open fracture -S92202D Fracture of unspecified tarsal bone(s) of left foot, subsequent encounter for fracture with routine healing -S92202G Fracture of unspecified tarsal bone(s) of left foot, subsequent encounter for fracture with delayed healing -S92202K Fracture of unspecified tarsal bone(s) of left foot, subsequent encounter for fracture with nonunion -S92202P Fracture of unspecified tarsal bone(s) of left foot, subsequent encounter for fracture with malunion -S92202S Fracture of unspecified tarsal bone(s) of left foot, sequela -S92209A Fracture of unspecified tarsal bone(s) of unspecified foot, initial encounter for closed fracture -S92209B Fracture of unspecified tarsal bone(s) of unspecified foot, initial encounter for open fracture -S92209D Fracture of unspecified tarsal bone(s) of unspecified foot, subsequent encounter for fracture with routine healing -S92209G Fracture of unspecified tarsal bone(s) of unspecified foot, subsequent encounter for fracture with delayed healing -S92209K Fracture of unspecified tarsal bone(s) of unspecified foot, subsequent encounter for fracture with nonunion -S92209P Fracture of unspecified tarsal bone(s) of unspecified foot, subsequent encounter for fracture with malunion -S92209S Fracture of unspecified tarsal bone(s) of unspecified foot, sequela -S92211A Displaced fracture of cuboid bone of right foot, initial encounter for closed fracture -S92211B Displaced fracture of cuboid bone of right foot, initial encounter for open fracture -S92211D Displaced fracture of cuboid bone of right foot, subsequent encounter for fracture with routine healing -S92211G Displaced fracture of cuboid bone of right foot, subsequent encounter for fracture with delayed healing -S92211K Displaced fracture of cuboid bone of right foot, subsequent encounter for fracture with nonunion -S92211P Displaced fracture of cuboid bone of right foot, subsequent encounter for fracture with malunion -S92211S Displaced fracture of cuboid bone of right foot, sequela -S92212A Displaced fracture of cuboid bone of left foot, initial encounter for closed fracture -S92212B Displaced fracture of cuboid bone of left foot, initial encounter for open fracture -S92212D Displaced fracture of cuboid bone of left foot, subsequent encounter for fracture with routine healing -S92212G Displaced fracture of cuboid bone of left foot, subsequent encounter for fracture with delayed healing -S92212K Displaced fracture of cuboid bone of left foot, subsequent encounter for fracture with nonunion -S92212P Displaced fracture of cuboid bone of left foot, subsequent encounter for fracture with malunion -S92212S Displaced fracture of cuboid bone of left foot, sequela -S92213A Displaced fracture of cuboid bone of unspecified foot, initial encounter for closed fracture -S92213B Displaced fracture of cuboid bone of unspecified foot, initial encounter for open fracture -S92213D Displaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with routine healing -S92213G Displaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with delayed healing -S92213K Displaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with nonunion -S92213P Displaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with malunion -S92213S Displaced fracture of cuboid bone of unspecified foot, sequela -S92214A Nondisplaced fracture of cuboid bone of right foot, initial encounter for closed fracture -S92214B Nondisplaced fracture of cuboid bone of right foot, initial encounter for open fracture -S92214D Nondisplaced fracture of cuboid bone of right foot, subsequent encounter for fracture with routine healing -S92214G Nondisplaced fracture of cuboid bone of right foot, subsequent encounter for fracture with delayed healing -S92214K Nondisplaced fracture of cuboid bone of right foot, subsequent encounter for fracture with nonunion -S92214P Nondisplaced fracture of cuboid bone of right foot, subsequent encounter for fracture with malunion -S92214S Nondisplaced fracture of cuboid bone of right foot, sequela -S92215A Nondisplaced fracture of cuboid bone of left foot, initial encounter for closed fracture -S92215B Nondisplaced fracture of cuboid bone of left foot, initial encounter for open fracture -S92215D Nondisplaced fracture of cuboid bone of left foot, subsequent encounter for fracture with routine healing -S92215G Nondisplaced fracture of cuboid bone of left foot, subsequent encounter for fracture with delayed healing -S92215K Nondisplaced fracture of cuboid bone of left foot, subsequent encounter for fracture with nonunion -S92215P Nondisplaced fracture of cuboid bone of left foot, subsequent encounter for fracture with malunion -S92215S Nondisplaced fracture of cuboid bone of left foot, sequela -S92216A Nondisplaced fracture of cuboid bone of unspecified foot, initial encounter for closed fracture -S92216B Nondisplaced fracture of cuboid bone of unspecified foot, initial encounter for open fracture -S92216D Nondisplaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with routine healing -S92216G Nondisplaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with delayed healing -S92216K Nondisplaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with nonunion -S92216P Nondisplaced fracture of cuboid bone of unspecified foot, subsequent encounter for fracture with malunion -S92216S Nondisplaced fracture of cuboid bone of unspecified foot, sequela -S92221A Displaced fracture of lateral cuneiform of right foot, initial encounter for closed fracture -S92221B Displaced fracture of lateral cuneiform of right foot, initial encounter for open fracture -S92221D Displaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with routine healing -S92221G Displaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92221K Displaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with nonunion -S92221P Displaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with malunion -S92221S Displaced fracture of lateral cuneiform of right foot, sequela -S92222A Displaced fracture of lateral cuneiform of left foot, initial encounter for closed fracture -S92222B Displaced fracture of lateral cuneiform of left foot, initial encounter for open fracture -S92222D Displaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with routine healing -S92222G Displaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92222K Displaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with nonunion -S92222P Displaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with malunion -S92222S Displaced fracture of lateral cuneiform of left foot, sequela -S92223A Displaced fracture of lateral cuneiform of unspecified foot, initial encounter for closed fracture -S92223B Displaced fracture of lateral cuneiform of unspecified foot, initial encounter for open fracture -S92223D Displaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92223G Displaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92223K Displaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92223P Displaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92223S Displaced fracture of lateral cuneiform of unspecified foot, sequela -S92224A Nondisplaced fracture of lateral cuneiform of right foot, initial encounter for closed fracture -S92224B Nondisplaced fracture of lateral cuneiform of right foot, initial encounter for open fracture -S92224D Nondisplaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with routine healing -S92224G Nondisplaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92224K Nondisplaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with nonunion -S92224P Nondisplaced fracture of lateral cuneiform of right foot, subsequent encounter for fracture with malunion -S92224S Nondisplaced fracture of lateral cuneiform of right foot, sequela -S92225A Nondisplaced fracture of lateral cuneiform of left foot, initial encounter for closed fracture -S92225B Nondisplaced fracture of lateral cuneiform of left foot, initial encounter for open fracture -S92225D Nondisplaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with routine healing -S92225G Nondisplaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92225K Nondisplaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with nonunion -S92225P Nondisplaced fracture of lateral cuneiform of left foot, subsequent encounter for fracture with malunion -S92225S Nondisplaced fracture of lateral cuneiform of left foot, sequela -S92226A Nondisplaced fracture of lateral cuneiform of unspecified foot, initial encounter for closed fracture -S92226B Nondisplaced fracture of lateral cuneiform of unspecified foot, initial encounter for open fracture -S92226D Nondisplaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92226G Nondisplaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92226K Nondisplaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92226P Nondisplaced fracture of lateral cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92226S Nondisplaced fracture of lateral cuneiform of unspecified foot, sequela -S92231A Displaced fracture of intermediate cuneiform of right foot, initial encounter for closed fracture -S92231B Displaced fracture of intermediate cuneiform of right foot, initial encounter for open fracture -S92231D Displaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with routine healing -S92231G Displaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92231K Displaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with nonunion -S92231P Displaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with malunion -S92231S Displaced fracture of intermediate cuneiform of right foot, sequela -S92232A Displaced fracture of intermediate cuneiform of left foot, initial encounter for closed fracture -S92232B Displaced fracture of intermediate cuneiform of left foot, initial encounter for open fracture -S92232D Displaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with routine healing -S92232G Displaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92232K Displaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with nonunion -S92232P Displaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with malunion -S92232S Displaced fracture of intermediate cuneiform of left foot, sequela -S92233A Displaced fracture of intermediate cuneiform of unspecified foot, initial encounter for closed fracture -S92233B Displaced fracture of intermediate cuneiform of unspecified foot, initial encounter for open fracture -S92233D Displaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92233G Displaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92233K Displaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92233P Displaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92233S Displaced fracture of intermediate cuneiform of unspecified foot, sequela -S92234A Nondisplaced fracture of intermediate cuneiform of right foot, initial encounter for closed fracture -S92234B Nondisplaced fracture of intermediate cuneiform of right foot, initial encounter for open fracture -S92234D Nondisplaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with routine healing -S92234G Nondisplaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92234K Nondisplaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with nonunion -S92234P Nondisplaced fracture of intermediate cuneiform of right foot, subsequent encounter for fracture with malunion -S92234S Nondisplaced fracture of intermediate cuneiform of right foot, sequela -S92235A Nondisplaced fracture of intermediate cuneiform of left foot, initial encounter for closed fracture -S92235B Nondisplaced fracture of intermediate cuneiform of left foot, initial encounter for open fracture -S92235D Nondisplaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with routine healing -S92235G Nondisplaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92235K Nondisplaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with nonunion -S92235P Nondisplaced fracture of intermediate cuneiform of left foot, subsequent encounter for fracture with malunion -S92235S Nondisplaced fracture of intermediate cuneiform of left foot, sequela -S92236A Nondisplaced fracture of intermediate cuneiform of unspecified foot, initial encounter for closed fracture -S92236B Nondisplaced fracture of intermediate cuneiform of unspecified foot, initial encounter for open fracture -S92236D Nondisplaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92236G Nondisplaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92236K Nondisplaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92236P Nondisplaced fracture of intermediate cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92236S Nondisplaced fracture of intermediate cuneiform of unspecified foot, sequela -S92241A Displaced fracture of medial cuneiform of right foot, initial encounter for closed fracture -S92241B Displaced fracture of medial cuneiform of right foot, initial encounter for open fracture -S92241D Displaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with routine healing -S92241G Displaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92241K Displaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with nonunion -S92241P Displaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with malunion -S92241S Displaced fracture of medial cuneiform of right foot, sequela -S92242A Displaced fracture of medial cuneiform of left foot, initial encounter for closed fracture -S92242B Displaced fracture of medial cuneiform of left foot, initial encounter for open fracture -S92242D Displaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with routine healing -S92242G Displaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92242K Displaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with nonunion -S92242P Displaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with malunion -S92242S Displaced fracture of medial cuneiform of left foot, sequela -S92243A Displaced fracture of medial cuneiform of unspecified foot, initial encounter for closed fracture -S92243B Displaced fracture of medial cuneiform of unspecified foot, initial encounter for open fracture -S92243D Displaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92243G Displaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92243K Displaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92243P Displaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92243S Displaced fracture of medial cuneiform of unspecified foot, sequela -S92244A Nondisplaced fracture of medial cuneiform of right foot, initial encounter for closed fracture -S92244B Nondisplaced fracture of medial cuneiform of right foot, initial encounter for open fracture -S92244D Nondisplaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with routine healing -S92244G Nondisplaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with delayed healing -S92244K Nondisplaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with nonunion -S92244P Nondisplaced fracture of medial cuneiform of right foot, subsequent encounter for fracture with malunion -S92244S Nondisplaced fracture of medial cuneiform of right foot, sequela -S92245A Nondisplaced fracture of medial cuneiform of left foot, initial encounter for closed fracture -S92245B Nondisplaced fracture of medial cuneiform of left foot, initial encounter for open fracture -S92245D Nondisplaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with routine healing -S92245G Nondisplaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with delayed healing -S92245K Nondisplaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with nonunion -S92245P Nondisplaced fracture of medial cuneiform of left foot, subsequent encounter for fracture with malunion -S92245S Nondisplaced fracture of medial cuneiform of left foot, sequela -S92246A Nondisplaced fracture of medial cuneiform of unspecified foot, initial encounter for closed fracture -S92246B Nondisplaced fracture of medial cuneiform of unspecified foot, initial encounter for open fracture -S92246D Nondisplaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with routine healing -S92246G Nondisplaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with delayed healing -S92246K Nondisplaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with nonunion -S92246P Nondisplaced fracture of medial cuneiform of unspecified foot, subsequent encounter for fracture with malunion -S92246S Nondisplaced fracture of medial cuneiform of unspecified foot, sequela -S92251A Displaced fracture of navicular [scaphoid] of right foot, initial encounter for closed fracture -S92251B Displaced fracture of navicular [scaphoid] of right foot, initial encounter for open fracture -S92251D Displaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with routine healing -S92251G Displaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with delayed healing -S92251K Displaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with nonunion -S92251P Displaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with malunion -S92251S Displaced fracture of navicular [scaphoid] of right foot, sequela -S92252A Displaced fracture of navicular [scaphoid] of left foot, initial encounter for closed fracture -S92252B Displaced fracture of navicular [scaphoid] of left foot, initial encounter for open fracture -S92252D Displaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with routine healing -S92252G Displaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with delayed healing -S92252K Displaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with nonunion -S92252P Displaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with malunion -S92252S Displaced fracture of navicular [scaphoid] of left foot, sequela -S92253A Displaced fracture of navicular [scaphoid] of unspecified foot, initial encounter for closed fracture -S92253B Displaced fracture of navicular [scaphoid] of unspecified foot, initial encounter for open fracture -S92253D Displaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with routine healing -S92253G Displaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with delayed healing -S92253K Displaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with nonunion -S92253P Displaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with malunion -S92253S Displaced fracture of navicular [scaphoid] of unspecified foot, sequela -S92254A Nondisplaced fracture of navicular [scaphoid] of right foot, initial encounter for closed fracture -S92254B Nondisplaced fracture of navicular [scaphoid] of right foot, initial encounter for open fracture -S92254D Nondisplaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with routine healing -S92254G Nondisplaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with delayed healing -S92254K Nondisplaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with nonunion -S92254P Nondisplaced fracture of navicular [scaphoid] of right foot, subsequent encounter for fracture with malunion -S92254S Nondisplaced fracture of navicular [scaphoid] of right foot, sequela -S92255A Nondisplaced fracture of navicular [scaphoid] of left foot, initial encounter for closed fracture -S92255B Nondisplaced fracture of navicular [scaphoid] of left foot, initial encounter for open fracture -S92255D Nondisplaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with routine healing -S92255G Nondisplaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with delayed healing -S92255K Nondisplaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with nonunion -S92255P Nondisplaced fracture of navicular [scaphoid] of left foot, subsequent encounter for fracture with malunion -S92255S Nondisplaced fracture of navicular [scaphoid] of left foot, sequela -S92256A Nondisplaced fracture of navicular [scaphoid] of unspecified foot, initial encounter for closed fracture -S92256B Nondisplaced fracture of navicular [scaphoid] of unspecified foot, initial encounter for open fracture -S92256D Nondisplaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with routine healing -S92256G Nondisplaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with delayed healing -S92256K Nondisplaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with nonunion -S92256P Nondisplaced fracture of navicular [scaphoid] of unspecified foot, subsequent encounter for fracture with malunion -S92256S Nondisplaced fracture of navicular [scaphoid] of unspecified foot, sequela -S92301A Fracture of unspecified metatarsal bone(s), right foot, initial encounter for closed fracture -S92301B Fracture of unspecified metatarsal bone(s), right foot, initial encounter for open fracture -S92301D Fracture of unspecified metatarsal bone(s), right foot, subsequent encounter for fracture with routine healing -S92301G Fracture of unspecified metatarsal bone(s), right foot, subsequent encounter for fracture with delayed healing -S92301K Fracture of unspecified metatarsal bone(s), right foot, subsequent encounter for fracture with nonunion -S92301P Fracture of unspecified metatarsal bone(s), right foot, subsequent encounter for fracture with malunion -S92301S Fracture of unspecified metatarsal bone(s), right foot, sequela -S92302A Fracture of unspecified metatarsal bone(s), left foot, initial encounter for closed fracture -S92302B Fracture of unspecified metatarsal bone(s), left foot, initial encounter for open fracture -S92302D Fracture of unspecified metatarsal bone(s), left foot, subsequent encounter for fracture with routine healing -S92302G Fracture of unspecified metatarsal bone(s), left foot, subsequent encounter for fracture with delayed healing -S92302K Fracture of unspecified metatarsal bone(s), left foot, subsequent encounter for fracture with nonunion -S92302P Fracture of unspecified metatarsal bone(s), left foot, subsequent encounter for fracture with malunion -S92302S Fracture of unspecified metatarsal bone(s), left foot, sequela -S92309A Fracture of unspecified metatarsal bone(s), unspecified foot, initial encounter for closed fracture -S92309B Fracture of unspecified metatarsal bone(s), unspecified foot, initial encounter for open fracture -S92309D Fracture of unspecified metatarsal bone(s), unspecified foot, subsequent encounter for fracture with routine healing -S92309G Fracture of unspecified metatarsal bone(s), unspecified foot, subsequent encounter for fracture with delayed healing -S92309K Fracture of unspecified metatarsal bone(s), unspecified foot, subsequent encounter for fracture with nonunion -S92309P Fracture of unspecified metatarsal bone(s), unspecified foot, subsequent encounter for fracture with malunion -S92309S Fracture of unspecified metatarsal bone(s), unspecified foot, sequela -S92311A Displaced fracture of first metatarsal bone, right foot, initial encounter for closed fracture -S92311B Displaced fracture of first metatarsal bone, right foot, initial encounter for open fracture -S92311D Displaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92311G Displaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92311K Displaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92311P Displaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92311S Displaced fracture of first metatarsal bone, right foot, sequela -S92312A Displaced fracture of first metatarsal bone, left foot, initial encounter for closed fracture -S92312B Displaced fracture of first metatarsal bone, left foot, initial encounter for open fracture -S92312D Displaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92312G Displaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92312K Displaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92312P Displaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92312S Displaced fracture of first metatarsal bone, left foot, sequela -S92313A Displaced fracture of first metatarsal bone, unspecified foot, initial encounter for closed fracture -S92313B Displaced fracture of first metatarsal bone, unspecified foot, initial encounter for open fracture -S92313D Displaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92313G Displaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92313K Displaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92313P Displaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92313S Displaced fracture of first metatarsal bone, unspecified foot, sequela -S92314A Nondisplaced fracture of first metatarsal bone, right foot, initial encounter for closed fracture -S92314B Nondisplaced fracture of first metatarsal bone, right foot, initial encounter for open fracture -S92314D Nondisplaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92314G Nondisplaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92314K Nondisplaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92314P Nondisplaced fracture of first metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92314S Nondisplaced fracture of first metatarsal bone, right foot, sequela -S92315A Nondisplaced fracture of first metatarsal bone, left foot, initial encounter for closed fracture -S92315B Nondisplaced fracture of first metatarsal bone, left foot, initial encounter for open fracture -S92315D Nondisplaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92315G Nondisplaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92315K Nondisplaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92315P Nondisplaced fracture of first metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92315S Nondisplaced fracture of first metatarsal bone, left foot, sequela -S92316A Nondisplaced fracture of first metatarsal bone, unspecified foot, initial encounter for closed fracture -S92316B Nondisplaced fracture of first metatarsal bone, unspecified foot, initial encounter for open fracture -S92316D Nondisplaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92316G Nondisplaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92316K Nondisplaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92316P Nondisplaced fracture of first metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92316S Nondisplaced fracture of first metatarsal bone, unspecified foot, sequela -S92321A Displaced fracture of second metatarsal bone, right foot, initial encounter for closed fracture -S92321B Displaced fracture of second metatarsal bone, right foot, initial encounter for open fracture -S92321D Displaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92321G Displaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92321K Displaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92321P Displaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92321S Displaced fracture of second metatarsal bone, right foot, sequela -S92322A Displaced fracture of second metatarsal bone, left foot, initial encounter for closed fracture -S92322B Displaced fracture of second metatarsal bone, left foot, initial encounter for open fracture -S92322D Displaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92322G Displaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92322K Displaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92322P Displaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92322S Displaced fracture of second metatarsal bone, left foot, sequela -S92323A Displaced fracture of second metatarsal bone, unspecified foot, initial encounter for closed fracture -S92323B Displaced fracture of second metatarsal bone, unspecified foot, initial encounter for open fracture -S92323D Displaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92323G Displaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92323K Displaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92323P Displaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92323S Displaced fracture of second metatarsal bone, unspecified foot, sequela -S92324A Nondisplaced fracture of second metatarsal bone, right foot, initial encounter for closed fracture -S92324B Nondisplaced fracture of second metatarsal bone, right foot, initial encounter for open fracture -S92324D Nondisplaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92324G Nondisplaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92324K Nondisplaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92324P Nondisplaced fracture of second metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92324S Nondisplaced fracture of second metatarsal bone, right foot, sequela -S92325A Nondisplaced fracture of second metatarsal bone, left foot, initial encounter for closed fracture -S92325B Nondisplaced fracture of second metatarsal bone, left foot, initial encounter for open fracture -S92325D Nondisplaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92325G Nondisplaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92325K Nondisplaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92325P Nondisplaced fracture of second metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92325S Nondisplaced fracture of second metatarsal bone, left foot, sequela -S92326A Nondisplaced fracture of second metatarsal bone, unspecified foot, initial encounter for closed fracture -S92326B Nondisplaced fracture of second metatarsal bone, unspecified foot, initial encounter for open fracture -S92326D Nondisplaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92326G Nondisplaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92326K Nondisplaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92326P Nondisplaced fracture of second metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92326S Nondisplaced fracture of second metatarsal bone, unspecified foot, sequela -S92331A Displaced fracture of third metatarsal bone, right foot, initial encounter for closed fracture -S92331B Displaced fracture of third metatarsal bone, right foot, initial encounter for open fracture -S92331D Displaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92331G Displaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92331K Displaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92331P Displaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92331S Displaced fracture of third metatarsal bone, right foot, sequela -S92332A Displaced fracture of third metatarsal bone, left foot, initial encounter for closed fracture -S92332B Displaced fracture of third metatarsal bone, left foot, initial encounter for open fracture -S92332D Displaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92332G Displaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92332K Displaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92332P Displaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92332S Displaced fracture of third metatarsal bone, left foot, sequela -S92333A Displaced fracture of third metatarsal bone, unspecified foot, initial encounter for closed fracture -S92333B Displaced fracture of third metatarsal bone, unspecified foot, initial encounter for open fracture -S92333D Displaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92333G Displaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92333K Displaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92333P Displaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92333S Displaced fracture of third metatarsal bone, unspecified foot, sequela -S92334A Nondisplaced fracture of third metatarsal bone, right foot, initial encounter for closed fracture -S92334B Nondisplaced fracture of third metatarsal bone, right foot, initial encounter for open fracture -S92334D Nondisplaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92334G Nondisplaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92334K Nondisplaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92334P Nondisplaced fracture of third metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92334S Nondisplaced fracture of third metatarsal bone, right foot, sequela -S92335A Nondisplaced fracture of third metatarsal bone, left foot, initial encounter for closed fracture -S92335B Nondisplaced fracture of third metatarsal bone, left foot, initial encounter for open fracture -S92335D Nondisplaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92335G Nondisplaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92335K Nondisplaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92335P Nondisplaced fracture of third metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92335S Nondisplaced fracture of third metatarsal bone, left foot, sequela -S92336A Nondisplaced fracture of third metatarsal bone, unspecified foot, initial encounter for closed fracture -S92336B Nondisplaced fracture of third metatarsal bone, unspecified foot, initial encounter for open fracture -S92336D Nondisplaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92336G Nondisplaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92336K Nondisplaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92336P Nondisplaced fracture of third metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92336S Nondisplaced fracture of third metatarsal bone, unspecified foot, sequela -S92341A Displaced fracture of fourth metatarsal bone, right foot, initial encounter for closed fracture -S92341B Displaced fracture of fourth metatarsal bone, right foot, initial encounter for open fracture -S92341D Displaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92341G Displaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92341K Displaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92341P Displaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92341S Displaced fracture of fourth metatarsal bone, right foot, sequela -S92342A Displaced fracture of fourth metatarsal bone, left foot, initial encounter for closed fracture -S92342B Displaced fracture of fourth metatarsal bone, left foot, initial encounter for open fracture -S92342D Displaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92342G Displaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92342K Displaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92342P Displaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92342S Displaced fracture of fourth metatarsal bone, left foot, sequela -S92343A Displaced fracture of fourth metatarsal bone, unspecified foot, initial encounter for closed fracture -S92343B Displaced fracture of fourth metatarsal bone, unspecified foot, initial encounter for open fracture -S92343D Displaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92343G Displaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92343K Displaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92343P Displaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92343S Displaced fracture of fourth metatarsal bone, unspecified foot, sequela -S92344A Nondisplaced fracture of fourth metatarsal bone, right foot, initial encounter for closed fracture -S92344B Nondisplaced fracture of fourth metatarsal bone, right foot, initial encounter for open fracture -S92344D Nondisplaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92344G Nondisplaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92344K Nondisplaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92344P Nondisplaced fracture of fourth metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92344S Nondisplaced fracture of fourth metatarsal bone, right foot, sequela -S92345A Nondisplaced fracture of fourth metatarsal bone, left foot, initial encounter for closed fracture -S92345B Nondisplaced fracture of fourth metatarsal bone, left foot, initial encounter for open fracture -S92345D Nondisplaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92345G Nondisplaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92345K Nondisplaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92345P Nondisplaced fracture of fourth metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92345S Nondisplaced fracture of fourth metatarsal bone, left foot, sequela -S92346A Nondisplaced fracture of fourth metatarsal bone, unspecified foot, initial encounter for closed fracture -S92346B Nondisplaced fracture of fourth metatarsal bone, unspecified foot, initial encounter for open fracture -S92346D Nondisplaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92346G Nondisplaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92346K Nondisplaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92346P Nondisplaced fracture of fourth metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92346S Nondisplaced fracture of fourth metatarsal bone, unspecified foot, sequela -S92351A Displaced fracture of fifth metatarsal bone, right foot, initial encounter for closed fracture -S92351B Displaced fracture of fifth metatarsal bone, right foot, initial encounter for open fracture -S92351D Displaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92351G Displaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92351K Displaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92351P Displaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92351S Displaced fracture of fifth metatarsal bone, right foot, sequela -S92352A Displaced fracture of fifth metatarsal bone, left foot, initial encounter for closed fracture -S92352B Displaced fracture of fifth metatarsal bone, left foot, initial encounter for open fracture -S92352D Displaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92352G Displaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92352K Displaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92352P Displaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92352S Displaced fracture of fifth metatarsal bone, left foot, sequela -S92353A Displaced fracture of fifth metatarsal bone, unspecified foot, initial encounter for closed fracture -S92353B Displaced fracture of fifth metatarsal bone, unspecified foot, initial encounter for open fracture -S92353D Displaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92353G Displaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92353K Displaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92353P Displaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92353S Displaced fracture of fifth metatarsal bone, unspecified foot, sequela -S92354A Nondisplaced fracture of fifth metatarsal bone, right foot, initial encounter for closed fracture -S92354B Nondisplaced fracture of fifth metatarsal bone, right foot, initial encounter for open fracture -S92354D Nondisplaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with routine healing -S92354G Nondisplaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with delayed healing -S92354K Nondisplaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with nonunion -S92354P Nondisplaced fracture of fifth metatarsal bone, right foot, subsequent encounter for fracture with malunion -S92354S Nondisplaced fracture of fifth metatarsal bone, right foot, sequela -S92355A Nondisplaced fracture of fifth metatarsal bone, left foot, initial encounter for closed fracture -S92355B Nondisplaced fracture of fifth metatarsal bone, left foot, initial encounter for open fracture -S92355D Nondisplaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with routine healing -S92355G Nondisplaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with delayed healing -S92355K Nondisplaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with nonunion -S92355P Nondisplaced fracture of fifth metatarsal bone, left foot, subsequent encounter for fracture with malunion -S92355S Nondisplaced fracture of fifth metatarsal bone, left foot, sequela -S92356A Nondisplaced fracture of fifth metatarsal bone, unspecified foot, initial encounter for closed fracture -S92356B Nondisplaced fracture of fifth metatarsal bone, unspecified foot, initial encounter for open fracture -S92356D Nondisplaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with routine healing -S92356G Nondisplaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with delayed healing -S92356K Nondisplaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with nonunion -S92356P Nondisplaced fracture of fifth metatarsal bone, unspecified foot, subsequent encounter for fracture with malunion -S92356S Nondisplaced fracture of fifth metatarsal bone, unspecified foot, sequela -S92401A Displaced unspecified fracture of right great toe, initial encounter for closed fracture -S92401B Displaced unspecified fracture of right great toe, initial encounter for open fracture -S92401D Displaced unspecified fracture of right great toe, subsequent encounter for fracture with routine healing -S92401G Displaced unspecified fracture of right great toe, subsequent encounter for fracture with delayed healing -S92401K Displaced unspecified fracture of right great toe, subsequent encounter for fracture with nonunion -S92401P Displaced unspecified fracture of right great toe, subsequent encounter for fracture with malunion -S92401S Displaced unspecified fracture of right great toe, sequela -S92402A Displaced unspecified fracture of left great toe, initial encounter for closed fracture -S92402B Displaced unspecified fracture of left great toe, initial encounter for open fracture -S92402D Displaced unspecified fracture of left great toe, subsequent encounter for fracture with routine healing -S92402G Displaced unspecified fracture of left great toe, subsequent encounter for fracture with delayed healing -S92402K Displaced unspecified fracture of left great toe, subsequent encounter for fracture with nonunion -S92402P Displaced unspecified fracture of left great toe, subsequent encounter for fracture with malunion -S92402S Displaced unspecified fracture of left great toe, sequela -S92403A Displaced unspecified fracture of unspecified great toe, initial encounter for closed fracture -S92403B Displaced unspecified fracture of unspecified great toe, initial encounter for open fracture -S92403D Displaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with routine healing -S92403G Displaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with delayed healing -S92403K Displaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with nonunion -S92403P Displaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with malunion -S92403S Displaced unspecified fracture of unspecified great toe, sequela -S92404A Nondisplaced unspecified fracture of right great toe, initial encounter for closed fracture -S92404B Nondisplaced unspecified fracture of right great toe, initial encounter for open fracture -S92404D Nondisplaced unspecified fracture of right great toe, subsequent encounter for fracture with routine healing -S92404G Nondisplaced unspecified fracture of right great toe, subsequent encounter for fracture with delayed healing -S92404K Nondisplaced unspecified fracture of right great toe, subsequent encounter for fracture with nonunion -S92404P Nondisplaced unspecified fracture of right great toe, subsequent encounter for fracture with malunion -S92404S Nondisplaced unspecified fracture of right great toe, sequela -S92405A Nondisplaced unspecified fracture of left great toe, initial encounter for closed fracture -S92405B Nondisplaced unspecified fracture of left great toe, initial encounter for open fracture -S92405D Nondisplaced unspecified fracture of left great toe, subsequent encounter for fracture with routine healing -S92405G Nondisplaced unspecified fracture of left great toe, subsequent encounter for fracture with delayed healing -S92405K Nondisplaced unspecified fracture of left great toe, subsequent encounter for fracture with nonunion -S92405P Nondisplaced unspecified fracture of left great toe, subsequent encounter for fracture with malunion -S92405S Nondisplaced unspecified fracture of left great toe, sequela -S92406A Nondisplaced unspecified fracture of unspecified great toe, initial encounter for closed fracture -S92406B Nondisplaced unspecified fracture of unspecified great toe, initial encounter for open fracture -S92406D Nondisplaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with routine healing -S92406G Nondisplaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with delayed healing -S92406K Nondisplaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with nonunion -S92406P Nondisplaced unspecified fracture of unspecified great toe, subsequent encounter for fracture with malunion -S92406S Nondisplaced unspecified fracture of unspecified great toe, sequela -S92411A Displaced fracture of proximal phalanx of right great toe, initial encounter for closed fracture -S92411B Displaced fracture of proximal phalanx of right great toe, initial encounter for open fracture -S92411D Displaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with routine healing -S92411G Displaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with delayed healing -S92411K Displaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with nonunion -S92411P Displaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with malunion -S92411S Displaced fracture of proximal phalanx of right great toe, sequela -S92412A Displaced fracture of proximal phalanx of left great toe, initial encounter for closed fracture -S92412B Displaced fracture of proximal phalanx of left great toe, initial encounter for open fracture -S92412D Displaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with routine healing -S92412G Displaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with delayed healing -S92412K Displaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with nonunion -S92412P Displaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with malunion -S92412S Displaced fracture of proximal phalanx of left great toe, sequela -S92413A Displaced fracture of proximal phalanx of unspecified great toe, initial encounter for closed fracture -S92413B Displaced fracture of proximal phalanx of unspecified great toe, initial encounter for open fracture -S92413D Displaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with routine healing -S92413G Displaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with delayed healing -S92413K Displaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with nonunion -S92413P Displaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with malunion -S92413S Displaced fracture of proximal phalanx of unspecified great toe, sequela -S92414A Nondisplaced fracture of proximal phalanx of right great toe, initial encounter for closed fracture -S92414B Nondisplaced fracture of proximal phalanx of right great toe, initial encounter for open fracture -S92414D Nondisplaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with routine healing -S92414G Nondisplaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with delayed healing -S92414K Nondisplaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with nonunion -S92414P Nondisplaced fracture of proximal phalanx of right great toe, subsequent encounter for fracture with malunion -S92414S Nondisplaced fracture of proximal phalanx of right great toe, sequela -S92415A Nondisplaced fracture of proximal phalanx of left great toe, initial encounter for closed fracture -S92415B Nondisplaced fracture of proximal phalanx of left great toe, initial encounter for open fracture -S92415D Nondisplaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with routine healing -S92415G Nondisplaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with delayed healing -S92415K Nondisplaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with nonunion -S92415P Nondisplaced fracture of proximal phalanx of left great toe, subsequent encounter for fracture with malunion -S92415S Nondisplaced fracture of proximal phalanx of left great toe, sequela -S92416A Nondisplaced fracture of proximal phalanx of unspecified great toe, initial encounter for closed fracture -S92416B Nondisplaced fracture of proximal phalanx of unspecified great toe, initial encounter for open fracture -S92416D Nondisplaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with routine healing -S92416G Nondisplaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with delayed healing -S92416K Nondisplaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with nonunion -S92416P Nondisplaced fracture of proximal phalanx of unspecified great toe, subsequent encounter for fracture with malunion -S92416S Nondisplaced fracture of proximal phalanx of unspecified great toe, sequela -S92421A Displaced fracture of distal phalanx of right great toe, initial encounter for closed fracture -S92421B Displaced fracture of distal phalanx of right great toe, initial encounter for open fracture -S92421D Displaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with routine healing -S92421G Displaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with delayed healing -S92421K Displaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with nonunion -S92421P Displaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with malunion -S92421S Displaced fracture of distal phalanx of right great toe, sequela -S92422A Displaced fracture of distal phalanx of left great toe, initial encounter for closed fracture -S92422B Displaced fracture of distal phalanx of left great toe, initial encounter for open fracture -S92422D Displaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with routine healing -S92422G Displaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with delayed healing -S92422K Displaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with nonunion -S92422P Displaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with malunion -S92422S Displaced fracture of distal phalanx of left great toe, sequela -S92423A Displaced fracture of distal phalanx of unspecified great toe, initial encounter for closed fracture -S92423B Displaced fracture of distal phalanx of unspecified great toe, initial encounter for open fracture -S92423D Displaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with routine healing -S92423G Displaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with delayed healing -S92423K Displaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with nonunion -S92423P Displaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with malunion -S92423S Displaced fracture of distal phalanx of unspecified great toe, sequela -S92424A Nondisplaced fracture of distal phalanx of right great toe, initial encounter for closed fracture -S92424B Nondisplaced fracture of distal phalanx of right great toe, initial encounter for open fracture -S92424D Nondisplaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with routine healing -S92424G Nondisplaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with delayed healing -S92424K Nondisplaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with nonunion -S92424P Nondisplaced fracture of distal phalanx of right great toe, subsequent encounter for fracture with malunion -S92424S Nondisplaced fracture of distal phalanx of right great toe, sequela -S92425A Nondisplaced fracture of distal phalanx of left great toe, initial encounter for closed fracture -S92425B Nondisplaced fracture of distal phalanx of left great toe, initial encounter for open fracture -S92425D Nondisplaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with routine healing -S92425G Nondisplaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with delayed healing -S92425K Nondisplaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with nonunion -S92425P Nondisplaced fracture of distal phalanx of left great toe, subsequent encounter for fracture with malunion -S92425S Nondisplaced fracture of distal phalanx of left great toe, sequela -S92426A Nondisplaced fracture of distal phalanx of unspecified great toe, initial encounter for closed fracture -S92426B Nondisplaced fracture of distal phalanx of unspecified great toe, initial encounter for open fracture -S92426D Nondisplaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with routine healing -S92426G Nondisplaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with delayed healing -S92426K Nondisplaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with nonunion -S92426P Nondisplaced fracture of distal phalanx of unspecified great toe, subsequent encounter for fracture with malunion -S92426S Nondisplaced fracture of distal phalanx of unspecified great toe, sequela -S92491A Other fracture of right great toe, initial encounter for closed fracture -S92491B Other fracture of right great toe, initial encounter for open fracture -S92491D Other fracture of right great toe, subsequent encounter for fracture with routine healing -S92491G Other fracture of right great toe, subsequent encounter for fracture with delayed healing -S92491K Other fracture of right great toe, subsequent encounter for fracture with nonunion -S92491P Other fracture of right great toe, subsequent encounter for fracture with malunion -S92491S Other fracture of right great toe, sequela -S92492A Other fracture of left great toe, initial encounter for closed fracture -S92492B Other fracture of left great toe, initial encounter for open fracture -S92492D Other fracture of left great toe, subsequent encounter for fracture with routine healing -S92492G Other fracture of left great toe, subsequent encounter for fracture with delayed healing -S92492K Other fracture of left great toe, subsequent encounter for fracture with nonunion -S92492P Other fracture of left great toe, subsequent encounter for fracture with malunion -S92492S Other fracture of left great toe, sequela -S92499A Other fracture of unspecified great toe, initial encounter for closed fracture -S92499B Other fracture of unspecified great toe, initial encounter for open fracture -S92499D Other fracture of unspecified great toe, subsequent encounter for fracture with routine healing -S92499G Other fracture of unspecified great toe, subsequent encounter for fracture with delayed healing -S92499K Other fracture of unspecified great toe, subsequent encounter for fracture with nonunion -S92499P Other fracture of unspecified great toe, subsequent encounter for fracture with malunion -S92499S Other fracture of unspecified great toe, sequela -S92501A Displaced unspecified fracture of right lesser toe(s), initial encounter for closed fracture -S92501B Displaced unspecified fracture of right lesser toe(s), initial encounter for open fracture -S92501D Displaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with routine healing -S92501G Displaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92501K Displaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with nonunion -S92501P Displaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with malunion -S92501S Displaced unspecified fracture of right lesser toe(s), sequela -S92502A Displaced unspecified fracture of left lesser toe(s), initial encounter for closed fracture -S92502B Displaced unspecified fracture of left lesser toe(s), initial encounter for open fracture -S92502D Displaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with routine healing -S92502G Displaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92502K Displaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with nonunion -S92502P Displaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with malunion -S92502S Displaced unspecified fracture of left lesser toe(s), sequela -S92503A Displaced unspecified fracture of unspecified lesser toe(s), initial encounter for closed fracture -S92503B Displaced unspecified fracture of unspecified lesser toe(s), initial encounter for open fracture -S92503D Displaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92503G Displaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92503K Displaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92503P Displaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92503S Displaced unspecified fracture of unspecified lesser toe(s), sequela -S92504A Nondisplaced unspecified fracture of right lesser toe(s), initial encounter for closed fracture -S92504B Nondisplaced unspecified fracture of right lesser toe(s), initial encounter for open fracture -S92504D Nondisplaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with routine healing -S92504G Nondisplaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92504K Nondisplaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with nonunion -S92504P Nondisplaced unspecified fracture of right lesser toe(s), subsequent encounter for fracture with malunion -S92504S Nondisplaced unspecified fracture of right lesser toe(s), sequela -S92505A Nondisplaced unspecified fracture of left lesser toe(s), initial encounter for closed fracture -S92505B Nondisplaced unspecified fracture of left lesser toe(s), initial encounter for open fracture -S92505D Nondisplaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with routine healing -S92505G Nondisplaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92505K Nondisplaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with nonunion -S92505P Nondisplaced unspecified fracture of left lesser toe(s), subsequent encounter for fracture with malunion -S92505S Nondisplaced unspecified fracture of left lesser toe(s), sequela -S92506A Nondisplaced unspecified fracture of unspecified lesser toe(s), initial encounter for closed fracture -S92506B Nondisplaced unspecified fracture of unspecified lesser toe(s), initial encounter for open fracture -S92506D Nondisplaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92506G Nondisplaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92506K Nondisplaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92506P Nondisplaced unspecified fracture of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92506S Nondisplaced unspecified fracture of unspecified lesser toe(s), sequela -S92511A Displaced fracture of proximal phalanx of right lesser toe(s), initial encounter for closed fracture -S92511B Displaced fracture of proximal phalanx of right lesser toe(s), initial encounter for open fracture -S92511D Displaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92511G Displaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92511K Displaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92511P Displaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92511S Displaced fracture of proximal phalanx of right lesser toe(s), sequela -S92512A Displaced fracture of proximal phalanx of left lesser toe(s), initial encounter for closed fracture -S92512B Displaced fracture of proximal phalanx of left lesser toe(s), initial encounter for open fracture -S92512D Displaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92512G Displaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92512K Displaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92512P Displaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92512S Displaced fracture of proximal phalanx of left lesser toe(s), sequela -S92513A Displaced fracture of proximal phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92513B Displaced fracture of proximal phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92513D Displaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92513G Displaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92513K Displaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92513P Displaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92513S Displaced fracture of proximal phalanx of unspecified lesser toe(s), sequela -S92514A Nondisplaced fracture of proximal phalanx of right lesser toe(s), initial encounter for closed fracture -S92514B Nondisplaced fracture of proximal phalanx of right lesser toe(s), initial encounter for open fracture -S92514D Nondisplaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92514G Nondisplaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92514K Nondisplaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92514P Nondisplaced fracture of proximal phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92514S Nondisplaced fracture of proximal phalanx of right lesser toe(s), sequela -S92515A Nondisplaced fracture of proximal phalanx of left lesser toe(s), initial encounter for closed fracture -S92515B Nondisplaced fracture of proximal phalanx of left lesser toe(s), initial encounter for open fracture -S92515D Nondisplaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92515G Nondisplaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92515K Nondisplaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92515P Nondisplaced fracture of proximal phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92515S Nondisplaced fracture of proximal phalanx of left lesser toe(s), sequela -S92516A Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92516B Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92516D Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92516G Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92516K Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92516P Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92516S Nondisplaced fracture of proximal phalanx of unspecified lesser toe(s), sequela -S92521A Displaced fracture of medial phalanx of right lesser toe(s), initial encounter for closed fracture -S92521B Displaced fracture of medial phalanx of right lesser toe(s), initial encounter for open fracture -S92521D Displaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92521G Displaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92521K Displaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92521P Displaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92521S Displaced fracture of medial phalanx of right lesser toe(s), sequela -S92522A Displaced fracture of medial phalanx of left lesser toe(s), initial encounter for closed fracture -S92522B Displaced fracture of medial phalanx of left lesser toe(s), initial encounter for open fracture -S92522D Displaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92522G Displaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92522K Displaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92522P Displaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92522S Displaced fracture of medial phalanx of left lesser toe(s), sequela -S92523A Displaced fracture of medial phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92523B Displaced fracture of medial phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92523D Displaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92523G Displaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92523K Displaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92523P Displaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92523S Displaced fracture of medial phalanx of unspecified lesser toe(s), sequela -S92524A Nondisplaced fracture of medial phalanx of right lesser toe(s), initial encounter for closed fracture -S92524B Nondisplaced fracture of medial phalanx of right lesser toe(s), initial encounter for open fracture -S92524D Nondisplaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92524G Nondisplaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92524K Nondisplaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92524P Nondisplaced fracture of medial phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92524S Nondisplaced fracture of medial phalanx of right lesser toe(s), sequela -S92525A Nondisplaced fracture of medial phalanx of left lesser toe(s), initial encounter for closed fracture -S92525B Nondisplaced fracture of medial phalanx of left lesser toe(s), initial encounter for open fracture -S92525D Nondisplaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92525G Nondisplaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92525K Nondisplaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92525P Nondisplaced fracture of medial phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92525S Nondisplaced fracture of medial phalanx of left lesser toe(s), sequela -S92526A Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92526B Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92526D Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92526G Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92526K Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92526P Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92526S Nondisplaced fracture of medial phalanx of unspecified lesser toe(s), sequela -S92531A Displaced fracture of distal phalanx of right lesser toe(s), initial encounter for closed fracture -S92531B Displaced fracture of distal phalanx of right lesser toe(s), initial encounter for open fracture -S92531D Displaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92531G Displaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92531K Displaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92531P Displaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92531S Displaced fracture of distal phalanx of right lesser toe(s), sequela -S92532A Displaced fracture of distal phalanx of left lesser toe(s), initial encounter for closed fracture -S92532B Displaced fracture of distal phalanx of left lesser toe(s), initial encounter for open fracture -S92532D Displaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92532G Displaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92532K Displaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92532P Displaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92532S Displaced fracture of distal phalanx of left lesser toe(s), sequela -S92533A Displaced fracture of distal phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92533B Displaced fracture of distal phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92533D Displaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92533G Displaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92533K Displaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92533P Displaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92533S Displaced fracture of distal phalanx of unspecified lesser toe(s), sequela -S92534A Nondisplaced fracture of distal phalanx of right lesser toe(s), initial encounter for closed fracture -S92534B Nondisplaced fracture of distal phalanx of right lesser toe(s), initial encounter for open fracture -S92534D Nondisplaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with routine healing -S92534G Nondisplaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92534K Nondisplaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with nonunion -S92534P Nondisplaced fracture of distal phalanx of right lesser toe(s), subsequent encounter for fracture with malunion -S92534S Nondisplaced fracture of distal phalanx of right lesser toe(s), sequela -S92535A Nondisplaced fracture of distal phalanx of left lesser toe(s), initial encounter for closed fracture -S92535B Nondisplaced fracture of distal phalanx of left lesser toe(s), initial encounter for open fracture -S92535D Nondisplaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with routine healing -S92535G Nondisplaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92535K Nondisplaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with nonunion -S92535P Nondisplaced fracture of distal phalanx of left lesser toe(s), subsequent encounter for fracture with malunion -S92535S Nondisplaced fracture of distal phalanx of left lesser toe(s), sequela -S92536A Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), initial encounter for closed fracture -S92536B Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), initial encounter for open fracture -S92536D Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92536G Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92536K Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92536P Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92536S Nondisplaced fracture of distal phalanx of unspecified lesser toe(s), sequela -S92591A Other fracture of right lesser toe(s), initial encounter for closed fracture -S92591B Other fracture of right lesser toe(s), initial encounter for open fracture -S92591D Other fracture of right lesser toe(s), subsequent encounter for fracture with routine healing -S92591G Other fracture of right lesser toe(s), subsequent encounter for fracture with delayed healing -S92591K Other fracture of right lesser toe(s), subsequent encounter for fracture with nonunion -S92591P Other fracture of right lesser toe(s), subsequent encounter for fracture with malunion -S92591S Other fracture of right lesser toe(s), sequela -S92592A Other fracture of left lesser toe(s), initial encounter for closed fracture -S92592B Other fracture of left lesser toe(s), initial encounter for open fracture -S92592D Other fracture of left lesser toe(s), subsequent encounter for fracture with routine healing -S92592G Other fracture of left lesser toe(s), subsequent encounter for fracture with delayed healing -S92592K Other fracture of left lesser toe(s), subsequent encounter for fracture with nonunion -S92592P Other fracture of left lesser toe(s), subsequent encounter for fracture with malunion -S92592S Other fracture of left lesser toe(s), sequela -S92599A Other fracture of unspecified lesser toe(s), initial encounter for closed fracture -S92599B Other fracture of unspecified lesser toe(s), initial encounter for open fracture -S92599D Other fracture of unspecified lesser toe(s), subsequent encounter for fracture with routine healing -S92599G Other fracture of unspecified lesser toe(s), subsequent encounter for fracture with delayed healing -S92599K Other fracture of unspecified lesser toe(s), subsequent encounter for fracture with nonunion -S92599P Other fracture of unspecified lesser toe(s), subsequent encounter for fracture with malunion -S92599S Other fracture of unspecified lesser toe(s), sequela -S92811A Other fracture of right foot, initial encounter for closed fracture -S92811B Other fracture of right foot, initial encounter for open fracture -S92811D Other fracture of right foot, subsequent encounter for fracture with routine healing -S92811G Other fracture of right foot, subsequent encounter for fracture with delayed healing -S92811K Other fracture of right foot, subsequent encounter for fracture with nonunion -S92811P Other fracture of right foot, subsequent encounter for fracture with malunion -S92811S Other fracture of right foot, sequela -S92812A Other fracture of left foot, initial encounter for closed fracture -S92812B Other fracture of left foot, initial encounter for open fracture -S92812D Other fracture of left foot, subsequent encounter for fracture with routine healing -S92812G Other fracture of left foot, subsequent encounter for fracture with delayed healing -S92812K Other fracture of left foot, subsequent encounter for fracture with nonunion -S92812P Other fracture of left foot, subsequent encounter for fracture with malunion -S92812S Other fracture of left foot, sequela -S92819A Other fracture of unspecified foot, initial encounter for closed fracture -S92819B Other fracture of unspecified foot, initial encounter for open fracture -S92819D Other fracture of unspecified foot, subsequent encounter for fracture with routine healing -S92819G Other fracture of unspecified foot, subsequent encounter for fracture with delayed healing -S92819K Other fracture of unspecified foot, subsequent encounter for fracture with nonunion -S92819P Other fracture of unspecified foot, subsequent encounter for fracture with malunion -S92819S Other fracture of unspecified foot, sequela -S92901A Unspecified fracture of right foot, initial encounter for closed fracture -S92901B Unspecified fracture of right foot, initial encounter for open fracture -S92901D Unspecified fracture of right foot, subsequent encounter for fracture with routine healing -S92901G Unspecified fracture of right foot, subsequent encounter for fracture with delayed healing -S92901K Unspecified fracture of right foot, subsequent encounter for fracture with nonunion -S92901P Unspecified fracture of right foot, subsequent encounter for fracture with malunion -S92901S Unspecified fracture of right foot, sequela -S92902A Unspecified fracture of left foot, initial encounter for closed fracture -S92902B Unspecified fracture of left foot, initial encounter for open fracture -S92902D Unspecified fracture of left foot, subsequent encounter for fracture with routine healing -S92902G Unspecified fracture of left foot, subsequent encounter for fracture with delayed healing -S92902K Unspecified fracture of left foot, subsequent encounter for fracture with nonunion -S92902P Unspecified fracture of left foot, subsequent encounter for fracture with malunion -S92902S Unspecified fracture of left foot, sequela -S92909A Unspecified fracture of unspecified foot, initial encounter for closed fracture -S92909B Unspecified fracture of unspecified foot, initial encounter for open fracture -S92909D Unspecified fracture of unspecified foot, subsequent encounter for fracture with routine healing -S92909G Unspecified fracture of unspecified foot, subsequent encounter for fracture with delayed healing -S92909K Unspecified fracture of unspecified foot, subsequent encounter for fracture with nonunion -S92909P Unspecified fracture of unspecified foot, subsequent encounter for fracture with malunion -S92909S Unspecified fracture of unspecified foot, sequela -S92911A Unspecified fracture of right toe(s), initial encounter for closed fracture -S92911B Unspecified fracture of right toe(s), initial encounter for open fracture -S92911D Unspecified fracture of right toe(s), subsequent encounter for fracture with routine healing -S92911G Unspecified fracture of right toe(s), subsequent encounter for fracture with delayed healing -S92911K Unspecified fracture of right toe(s), subsequent encounter for fracture with nonunion -S92911P Unspecified fracture of right toe(s), subsequent encounter for fracture with malunion -S92911S Unspecified fracture of right toe(s), sequela -S92912A Unspecified fracture of left toe(s), initial encounter for closed fracture -S92912B Unspecified fracture of left toe(s), initial encounter for open fracture -S92912D Unspecified fracture of left toe(s), subsequent encounter for fracture with routine healing -S92912G Unspecified fracture of left toe(s), subsequent encounter for fracture with delayed healing -S92912K Unspecified fracture of left toe(s), subsequent encounter for fracture with nonunion -S92912P Unspecified fracture of left toe(s), subsequent encounter for fracture with malunion -S92912S Unspecified fracture of left toe(s), sequela -S92919A Unspecified fracture of unspecified toe(s), initial encounter for closed fracture -S92919B Unspecified fracture of unspecified toe(s), initial encounter for open fracture -S92919D Unspecified fracture of unspecified toe(s), subsequent encounter for fracture with routine healing -S92919G Unspecified fracture of unspecified toe(s), subsequent encounter for fracture with delayed healing -S92919K Unspecified fracture of unspecified toe(s), subsequent encounter for fracture with nonunion -S92919P Unspecified fracture of unspecified toe(s), subsequent encounter for fracture with malunion -S92919S Unspecified fracture of unspecified toe(s), sequela -S9301XA Subluxation of right ankle joint, initial encounter -S9301XD Subluxation of right ankle joint, subsequent encounter -S9301XS Subluxation of right ankle joint, sequela -S9302XA Subluxation of left ankle joint, initial encounter -S9302XD Subluxation of left ankle joint, subsequent encounter -S9302XS Subluxation of left ankle joint, sequela -S9303XA Subluxation of unspecified ankle joint, initial encounter -S9303XD Subluxation of unspecified ankle joint, subsequent encounter -S9303XS Subluxation of unspecified ankle joint, sequela -S9304XA Dislocation of right ankle joint, initial encounter -S9304XD Dislocation of right ankle joint, subsequent encounter -S9304XS Dislocation of right ankle joint, sequela -S9305XA Dislocation of left ankle joint, initial encounter -S9305XD Dislocation of left ankle joint, subsequent encounter -S9305XS Dislocation of left ankle joint, sequela -S9306XA Dislocation of unspecified ankle joint, initial encounter -S9306XD Dislocation of unspecified ankle joint, subsequent encounter -S9306XS Dislocation of unspecified ankle joint, sequela -S93101A Unspecified subluxation of right toe(s), initial encounter -S93101D Unspecified subluxation of right toe(s), subsequent encounter -S93101S Unspecified subluxation of right toe(s), sequela -S93102A Unspecified subluxation of left toe(s), initial encounter -S93102D Unspecified subluxation of left toe(s), subsequent encounter -S93102S Unspecified subluxation of left toe(s), sequela -S93103A Unspecified subluxation of unspecified toe(s), initial encounter -S93103D Unspecified subluxation of unspecified toe(s), subsequent encounter -S93103S Unspecified subluxation of unspecified toe(s), sequela -S93104A Unspecified dislocation of right toe(s), initial encounter -S93104D Unspecified dislocation of right toe(s), subsequent encounter -S93104S Unspecified dislocation of right toe(s), sequela -S93105A Unspecified dislocation of left toe(s), initial encounter -S93105D Unspecified dislocation of left toe(s), subsequent encounter -S93105S Unspecified dislocation of left toe(s), sequela -S93106A Unspecified dislocation of unspecified toe(s), initial encounter -S93106D Unspecified dislocation of unspecified toe(s), subsequent encounter -S93106S Unspecified dislocation of unspecified toe(s), sequela -S93111A Dislocation of interphalangeal joint of right great toe, initial encounter -S93111D Dislocation of interphalangeal joint of right great toe, subsequent encounter -S93111S Dislocation of interphalangeal joint of right great toe, sequela -S93112A Dislocation of interphalangeal joint of left great toe, initial encounter -S93112D Dislocation of interphalangeal joint of left great toe, subsequent encounter -S93112S Dislocation of interphalangeal joint of left great toe, sequela -S93113A Dislocation of interphalangeal joint of unspecified great toe, initial encounter -S93113D Dislocation of interphalangeal joint of unspecified great toe, subsequent encounter -S93113S Dislocation of interphalangeal joint of unspecified great toe, sequela -S93114A Dislocation of interphalangeal joint of right lesser toe(s), initial encounter -S93114D Dislocation of interphalangeal joint of right lesser toe(s), subsequent encounter -S93114S Dislocation of interphalangeal joint of right lesser toe(s), sequela -S93115A Dislocation of interphalangeal joint of left lesser toe(s), initial encounter -S93115D Dislocation of interphalangeal joint of left lesser toe(s), subsequent encounter -S93115S Dislocation of interphalangeal joint of left lesser toe(s), sequela -S93116A Dislocation of interphalangeal joint of unspecified lesser toe(s), initial encounter -S93116D Dislocation of interphalangeal joint of unspecified lesser toe(s), subsequent encounter -S93116S Dislocation of interphalangeal joint of unspecified lesser toe(s), sequela -S93119A Dislocation of interphalangeal joint of unspecified toe(s), initial encounter -S93119D Dislocation of interphalangeal joint of unspecified toe(s), subsequent encounter -S93119S Dislocation of interphalangeal joint of unspecified toe(s), sequela -S93121A Dislocation of metatarsophalangeal joint of right great toe, initial encounter -S93121D Dislocation of metatarsophalangeal joint of right great toe, subsequent encounter -S93121S Dislocation of metatarsophalangeal joint of right great toe, sequela -S93122A Dislocation of metatarsophalangeal joint of left great toe, initial encounter -S93122D Dislocation of metatarsophalangeal joint of left great toe, subsequent encounter -S93122S Dislocation of metatarsophalangeal joint of left great toe, sequela -S93123A Dislocation of metatarsophalangeal joint of unspecified great toe, initial encounter -S93123D Dislocation of metatarsophalangeal joint of unspecified great toe, subsequent encounter -S93123S Dislocation of metatarsophalangeal joint of unspecified great toe, sequela -S93124A Dislocation of metatarsophalangeal joint of right lesser toe(s), initial encounter -S93124D Dislocation of metatarsophalangeal joint of right lesser toe(s), subsequent encounter -S93124S Dislocation of metatarsophalangeal joint of right lesser toe(s), sequela -S93125A Dislocation of metatarsophalangeal joint of left lesser toe(s), initial encounter -S93125D Dislocation of metatarsophalangeal joint of left lesser toe(s), subsequent encounter -S93125S Dislocation of metatarsophalangeal joint of left lesser toe(s), sequela -S93126A Dislocation of metatarsophalangeal joint of unspecified lesser toe(s), initial encounter -S93126D Dislocation of metatarsophalangeal joint of unspecified lesser toe(s), subsequent encounter -S93126S Dislocation of metatarsophalangeal joint of unspecified lesser toe(s), sequela -S93129A Dislocation of metatarsophalangeal joint of unspecified toe(s), initial encounter -S93129D Dislocation of metatarsophalangeal joint of unspecified toe(s), subsequent encounter -S93129S Dislocation of metatarsophalangeal joint of unspecified toe(s), sequela -S93131A Subluxation of interphalangeal joint of right great toe, initial encounter -S93131D Subluxation of interphalangeal joint of right great toe, subsequent encounter -S93131S Subluxation of interphalangeal joint of right great toe, sequela -S93132A Subluxation of interphalangeal joint of left great toe, initial encounter -S93132D Subluxation of interphalangeal joint of left great toe, subsequent encounter -S93132S Subluxation of interphalangeal joint of left great toe, sequela -S93133A Subluxation of interphalangeal joint of unspecified great toe, initial encounter -S93133D Subluxation of interphalangeal joint of unspecified great toe, subsequent encounter -S93133S Subluxation of interphalangeal joint of unspecified great toe, sequela -S93134A Subluxation of interphalangeal joint of right lesser toe(s), initial encounter -S93134D Subluxation of interphalangeal joint of right lesser toe(s), subsequent encounter -S93134S Subluxation of interphalangeal joint of right lesser toe(s), sequela -S93135A Subluxation of interphalangeal joint of left lesser toe(s), initial encounter -S93135D Subluxation of interphalangeal joint of left lesser toe(s), subsequent encounter -S93135S Subluxation of interphalangeal joint of left lesser toe(s), sequela -S93136A Subluxation of interphalangeal joint of unspecified lesser toe(s), initial encounter -S93136D Subluxation of interphalangeal joint of unspecified lesser toe(s), subsequent encounter -S93136S Subluxation of interphalangeal joint of unspecified lesser toe(s), sequela -S93139A Subluxation of interphalangeal joint of unspecified toe(s), initial encounter -S93139D Subluxation of interphalangeal joint of unspecified toe(s), subsequent encounter -S93139S Subluxation of interphalangeal joint of unspecified toe(s), sequela -S93141A Subluxation of metatarsophalangeal joint of right great toe, initial encounter -S93141D Subluxation of metatarsophalangeal joint of right great toe, subsequent encounter -S93141S Subluxation of metatarsophalangeal joint of right great toe, sequela -S93142A Subluxation of metatarsophalangeal joint of left great toe, initial encounter -S93142D Subluxation of metatarsophalangeal joint of left great toe, subsequent encounter -S93142S Subluxation of metatarsophalangeal joint of left great toe, sequela -S93143A Subluxation of metatarsophalangeal joint of unspecified great toe, initial encounter -S93143D Subluxation of metatarsophalangeal joint of unspecified great toe, subsequent encounter -S93143S Subluxation of metatarsophalangeal joint of unspecified great toe, sequela -S93144A Subluxation of metatarsophalangeal joint of right lesser toe(s), initial encounter -S93144D Subluxation of metatarsophalangeal joint of right lesser toe(s), subsequent encounter -S93144S Subluxation of metatarsophalangeal joint of right lesser toe(s), sequela -S93145A Subluxation of metatarsophalangeal joint of left lesser toe(s), initial encounter -S93145D Subluxation of metatarsophalangeal joint of left lesser toe(s), subsequent encounter -S93145S Subluxation of metatarsophalangeal joint of left lesser toe(s), sequela -S93146A Subluxation of metatarsophalangeal joint of unspecified lesser toe(s), initial encounter -S93146D Subluxation of metatarsophalangeal joint of unspecified lesser toe(s), subsequent encounter -S93146S Subluxation of metatarsophalangeal joint of unspecified lesser toe(s), sequela -S93149A Subluxation of metatarsophalangeal joint of unspecified toe(s), initial encounter -S93149D Subluxation of metatarsophalangeal joint of unspecified toe(s), subsequent encounter -S93149S Subluxation of metatarsophalangeal joint of unspecified toe(s), sequela -S93301A Unspecified subluxation of right foot, initial encounter -S93301D Unspecified subluxation of right foot, subsequent encounter -S93301S Unspecified subluxation of right foot, sequela -S93302A Unspecified subluxation of left foot, initial encounter -S93302D Unspecified subluxation of left foot, subsequent encounter -S93302S Unspecified subluxation of left foot, sequela -S93303A Unspecified subluxation of unspecified foot, initial encounter -S93303D Unspecified subluxation of unspecified foot, subsequent encounter -S93303S Unspecified subluxation of unspecified foot, sequela -S93304A Unspecified dislocation of right foot, initial encounter -S93304D Unspecified dislocation of right foot, subsequent encounter -S93304S Unspecified dislocation of right foot, sequela -S93305A Unspecified dislocation of left foot, initial encounter -S93305D Unspecified dislocation of left foot, subsequent encounter -S93305S Unspecified dislocation of left foot, sequela -S93306A Unspecified dislocation of unspecified foot, initial encounter -S93306D Unspecified dislocation of unspecified foot, subsequent encounter -S93306S Unspecified dislocation of unspecified foot, sequela -S93311A Subluxation of tarsal joint of right foot, initial encounter -S93311D Subluxation of tarsal joint of right foot, subsequent encounter -S93311S Subluxation of tarsal joint of right foot, sequela -S93312A Subluxation of tarsal joint of left foot, initial encounter -S93312D Subluxation of tarsal joint of left foot, subsequent encounter -S93312S Subluxation of tarsal joint of left foot, sequela -S93313A Subluxation of tarsal joint of unspecified foot, initial encounter -S93313D Subluxation of tarsal joint of unspecified foot, subsequent encounter -S93313S Subluxation of tarsal joint of unspecified foot, sequela -S93314A Dislocation of tarsal joint of right foot, initial encounter -S93314D Dislocation of tarsal joint of right foot, subsequent encounter -S93314S Dislocation of tarsal joint of right foot, sequela -S93315A Dislocation of tarsal joint of left foot, initial encounter -S93315D Dislocation of tarsal joint of left foot, subsequent encounter -S93315S Dislocation of tarsal joint of left foot, sequela -S93316A Dislocation of tarsal joint of unspecified foot, initial encounter -S93316D Dislocation of tarsal joint of unspecified foot, subsequent encounter -S93316S Dislocation of tarsal joint of unspecified foot, sequela -S93321A Subluxation of tarsometatarsal joint of right foot, initial encounter -S93321D Subluxation of tarsometatarsal joint of right foot, subsequent encounter -S93321S Subluxation of tarsometatarsal joint of right foot, sequela -S93322A Subluxation of tarsometatarsal joint of left foot, initial encounter -S93322D Subluxation of tarsometatarsal joint of left foot, subsequent encounter -S93322S Subluxation of tarsometatarsal joint of left foot, sequela -S93323A Subluxation of tarsometatarsal joint of unspecified foot, initial encounter -S93323D Subluxation of tarsometatarsal joint of unspecified foot, subsequent encounter -S93323S Subluxation of tarsometatarsal joint of unspecified foot, sequela -S93324A Dislocation of tarsometatarsal joint of right foot, initial encounter -S93324D Dislocation of tarsometatarsal joint of right foot, subsequent encounter -S93324S Dislocation of tarsometatarsal joint of right foot, sequela -S93325A Dislocation of tarsometatarsal joint of left foot, initial encounter -S93325D Dislocation of tarsometatarsal joint of left foot, subsequent encounter -S93325S Dislocation of tarsometatarsal joint of left foot, sequela -S93326A Dislocation of tarsometatarsal joint of unspecified foot, initial encounter -S93326D Dislocation of tarsometatarsal joint of unspecified foot, subsequent encounter -S93326S Dislocation of tarsometatarsal joint of unspecified foot, sequela -S93331A Other subluxation of right foot, initial encounter -S93331D Other subluxation of right foot, subsequent encounter -S93331S Other subluxation of right foot, sequela -S93332A Other subluxation of left foot, initial encounter -S93332D Other subluxation of left foot, subsequent encounter -S93332S Other subluxation of left foot, sequela -S93333A Other subluxation of unspecified foot, initial encounter -S93333D Other subluxation of unspecified foot, subsequent encounter -S93333S Other subluxation of unspecified foot, sequela -S93334A Other dislocation of right foot, initial encounter -S93334D Other dislocation of right foot, subsequent encounter -S93334S Other dislocation of right foot, sequela -S93335A Other dislocation of left foot, initial encounter -S93335D Other dislocation of left foot, subsequent encounter -S93335S Other dislocation of left foot, sequela -S93336A Other dislocation of unspecified foot, initial encounter -S93336D Other dislocation of unspecified foot, subsequent encounter -S93336S Other dislocation of unspecified foot, sequela -S93401A Sprain of unspecified ligament of right ankle, initial encounter -S93401D Sprain of unspecified ligament of right ankle, subsequent encounter -S93401S Sprain of unspecified ligament of right ankle, sequela -S93402A Sprain of unspecified ligament of left ankle, initial encounter -S93402D Sprain of unspecified ligament of left ankle, subsequent encounter -S93402S Sprain of unspecified ligament of left ankle, sequela -S93409A Sprain of unspecified ligament of unspecified ankle, initial encounter -S93409D Sprain of unspecified ligament of unspecified ankle, subsequent encounter -S93409S Sprain of unspecified ligament of unspecified ankle, sequela -S93411A Sprain of calcaneofibular ligament of right ankle, initial encounter -S93411D Sprain of calcaneofibular ligament of right ankle, subsequent encounter -S93411S Sprain of calcaneofibular ligament of right ankle, sequela -S93412A Sprain of calcaneofibular ligament of left ankle, initial encounter -S93412D Sprain of calcaneofibular ligament of left ankle, subsequent encounter -S93412S Sprain of calcaneofibular ligament of left ankle, sequela -S93419A Sprain of calcaneofibular ligament of unspecified ankle, initial encounter -S93419D Sprain of calcaneofibular ligament of unspecified ankle, subsequent encounter -S93419S Sprain of calcaneofibular ligament of unspecified ankle, sequela -S93421A Sprain of deltoid ligament of right ankle, initial encounter -S93421D Sprain of deltoid ligament of right ankle, subsequent encounter -S93421S Sprain of deltoid ligament of right ankle, sequela -S93422A Sprain of deltoid ligament of left ankle, initial encounter -S93422D Sprain of deltoid ligament of left ankle, subsequent encounter -S93422S Sprain of deltoid ligament of left ankle, sequela -S93429A Sprain of deltoid ligament of unspecified ankle, initial encounter -S93429D Sprain of deltoid ligament of unspecified ankle, subsequent encounter -S93429S Sprain of deltoid ligament of unspecified ankle, sequela -S93431A Sprain of tibiofibular ligament of right ankle, initial encounter -S93431D Sprain of tibiofibular ligament of right ankle, subsequent encounter -S93431S Sprain of tibiofibular ligament of right ankle, sequela -S93432A Sprain of tibiofibular ligament of left ankle, initial encounter -S93432D Sprain of tibiofibular ligament of left ankle, subsequent encounter -S93432S Sprain of tibiofibular ligament of left ankle, sequela -S93439A Sprain of tibiofibular ligament of unspecified ankle, initial encounter -S93439D Sprain of tibiofibular ligament of unspecified ankle, subsequent encounter -S93439S Sprain of tibiofibular ligament of unspecified ankle, sequela -S93491A Sprain of other ligament of right ankle, initial encounter -S93491D Sprain of other ligament of right ankle, subsequent encounter -S93491S Sprain of other ligament of right ankle, sequela -S93492A Sprain of other ligament of left ankle, initial encounter -S93492D Sprain of other ligament of left ankle, subsequent encounter -S93492S Sprain of other ligament of left ankle, sequela -S93499A Sprain of other ligament of unspecified ankle, initial encounter -S93499D Sprain of other ligament of unspecified ankle, subsequent encounter -S93499S Sprain of other ligament of unspecified ankle, sequela -S93501A Unspecified sprain of right great toe, initial encounter -S93501D Unspecified sprain of right great toe, subsequent encounter -S93501S Unspecified sprain of right great toe, sequela -S93502A Unspecified sprain of left great toe, initial encounter -S93502D Unspecified sprain of left great toe, subsequent encounter -S93502S Unspecified sprain of left great toe, sequela -S93503A Unspecified sprain of unspecified great toe, initial encounter -S93503D Unspecified sprain of unspecified great toe, subsequent encounter -S93503S Unspecified sprain of unspecified great toe, sequela -S93504A Unspecified sprain of right lesser toe(s), initial encounter -S93504D Unspecified sprain of right lesser toe(s), subsequent encounter -S93504S Unspecified sprain of right lesser toe(s), sequela -S93505A Unspecified sprain of left lesser toe(s), initial encounter -S93505D Unspecified sprain of left lesser toe(s), subsequent encounter -S93505S Unspecified sprain of left lesser toe(s), sequela -S93506A Unspecified sprain of unspecified lesser toe(s), initial encounter -S93506D Unspecified sprain of unspecified lesser toe(s), subsequent encounter -S93506S Unspecified sprain of unspecified lesser toe(s), sequela -S93509A Unspecified sprain of unspecified toe(s), initial encounter -S93509D Unspecified sprain of unspecified toe(s), subsequent encounter -S93509S Unspecified sprain of unspecified toe(s), sequela -S93511A Sprain of interphalangeal joint of right great toe, initial encounter -S93511D Sprain of interphalangeal joint of right great toe, subsequent encounter -S93511S Sprain of interphalangeal joint of right great toe, sequela -S93512A Sprain of interphalangeal joint of left great toe, initial encounter -S93512D Sprain of interphalangeal joint of left great toe, subsequent encounter -S93512S Sprain of interphalangeal joint of left great toe, sequela -S93513A Sprain of interphalangeal joint of unspecified great toe, initial encounter -S93513D Sprain of interphalangeal joint of unspecified great toe, subsequent encounter -S93513S Sprain of interphalangeal joint of unspecified great toe, sequela -S93514A Sprain of interphalangeal joint of right lesser toe(s), initial encounter -S93514D Sprain of interphalangeal joint of right lesser toe(s), subsequent encounter -S93514S Sprain of interphalangeal joint of right lesser toe(s), sequela -S93515A Sprain of interphalangeal joint of left lesser toe(s), initial encounter -S93515D Sprain of interphalangeal joint of left lesser toe(s), subsequent encounter -S93515S Sprain of interphalangeal joint of left lesser toe(s), sequela -S93516A Sprain of interphalangeal joint of unspecified lesser toe(s), initial encounter -S93516D Sprain of interphalangeal joint of unspecified lesser toe(s), subsequent encounter -S93516S Sprain of interphalangeal joint of unspecified lesser toe(s), sequela -S93519A Sprain of interphalangeal joint of unspecified toe(s), initial encounter -S93519D Sprain of interphalangeal joint of unspecified toe(s), subsequent encounter -S93519S Sprain of interphalangeal joint of unspecified toe(s), sequela -S93521A Sprain of metatarsophalangeal joint of right great toe, initial encounter -S93521D Sprain of metatarsophalangeal joint of right great toe, subsequent encounter -S93521S Sprain of metatarsophalangeal joint of right great toe, sequela -S93522A Sprain of metatarsophalangeal joint of left great toe, initial encounter -S93522D Sprain of metatarsophalangeal joint of left great toe, subsequent encounter -S93522S Sprain of metatarsophalangeal joint of left great toe, sequela -S93523A Sprain of metatarsophalangeal joint of unspecified great toe, initial encounter -S93523D Sprain of metatarsophalangeal joint of unspecified great toe, subsequent encounter -S93523S Sprain of metatarsophalangeal joint of unspecified great toe, sequela -S93524A Sprain of metatarsophalangeal joint of right lesser toe(s), initial encounter -S93524D Sprain of metatarsophalangeal joint of right lesser toe(s), subsequent encounter -S93524S Sprain of metatarsophalangeal joint of right lesser toe(s), sequela -S93525A Sprain of metatarsophalangeal joint of left lesser toe(s), initial encounter -S93525D Sprain of metatarsophalangeal joint of left lesser toe(s), subsequent encounter -S93525S Sprain of metatarsophalangeal joint of left lesser toe(s), sequela -S93526A Sprain of metatarsophalangeal joint of unspecified lesser toe(s), initial encounter -S93526D Sprain of metatarsophalangeal joint of unspecified lesser toe(s), subsequent encounter -S93526S Sprain of metatarsophalangeal joint of unspecified lesser toe(s), sequela -S93529A Sprain of metatarsophalangeal joint of unspecified toe(s), initial encounter -S93529D Sprain of metatarsophalangeal joint of unspecified toe(s), subsequent encounter -S93529S Sprain of metatarsophalangeal joint of unspecified toe(s), sequela -S93601A Unspecified sprain of right foot, initial encounter -S93601D Unspecified sprain of right foot, subsequent encounter -S93601S Unspecified sprain of right foot, sequela -S93602A Unspecified sprain of left foot, initial encounter -S93602D Unspecified sprain of left foot, subsequent encounter -S93602S Unspecified sprain of left foot, sequela -S93609A Unspecified sprain of unspecified foot, initial encounter -S93609D Unspecified sprain of unspecified foot, subsequent encounter -S93609S Unspecified sprain of unspecified foot, sequela -S93611A Sprain of tarsal ligament of right foot, initial encounter -S93611D Sprain of tarsal ligament of right foot, subsequent encounter -S93611S Sprain of tarsal ligament of right foot, sequela -S93612A Sprain of tarsal ligament of left foot, initial encounter -S93612D Sprain of tarsal ligament of left foot, subsequent encounter -S93612S Sprain of tarsal ligament of left foot, sequela -S93619A Sprain of tarsal ligament of unspecified foot, initial encounter -S93619D Sprain of tarsal ligament of unspecified foot, subsequent encounter -S93619S Sprain of tarsal ligament of unspecified foot, sequela -S93621A Sprain of tarsometatarsal ligament of right foot, initial encounter -S93621D Sprain of tarsometatarsal ligament of right foot, subsequent encounter -S93621S Sprain of tarsometatarsal ligament of right foot, sequela -S93622A Sprain of tarsometatarsal ligament of left foot, initial encounter -S93622D Sprain of tarsometatarsal ligament of left foot, subsequent encounter -S93622S Sprain of tarsometatarsal ligament of left foot, sequela -S93629A Sprain of tarsometatarsal ligament of unspecified foot, initial encounter -S93629D Sprain of tarsometatarsal ligament of unspecified foot, subsequent encounter -S93629S Sprain of tarsometatarsal ligament of unspecified foot, sequela -S93691A Other sprain of right foot, initial encounter -S93691D Other sprain of right foot, subsequent encounter -S93691S Other sprain of right foot, sequela -S93692A Other sprain of left foot, initial encounter -S93692D Other sprain of left foot, subsequent encounter -S93692S Other sprain of left foot, sequela -S93699A Other sprain of unspecified foot, initial encounter -S93699D Other sprain of unspecified foot, subsequent encounter -S93699S Other sprain of unspecified foot, sequela -S9400XA Injury of lateral plantar nerve, unspecified leg, initial encounter -S9400XD Injury of lateral plantar nerve, unspecified leg, subsequent encounter -S9400XS Injury of lateral plantar nerve, unspecified leg, sequela -S9401XA Injury of lateral plantar nerve, right leg, initial encounter -S9401XD Injury of lateral plantar nerve, right leg, subsequent encounter -S9401XS Injury of lateral plantar nerve, right leg, sequela -S9402XA Injury of lateral plantar nerve, left leg, initial encounter -S9402XD Injury of lateral plantar nerve, left leg, subsequent encounter -S9402XS Injury of lateral plantar nerve, left leg, sequela -S9410XA Injury of medial plantar nerve, unspecified leg, initial encounter -S9410XD Injury of medial plantar nerve, unspecified leg, subsequent encounter -S9410XS Injury of medial plantar nerve, unspecified leg, sequela -S9411XA Injury of medial plantar nerve, right leg, initial encounter -S9411XD Injury of medial plantar nerve, right leg, subsequent encounter -S9411XS Injury of medial plantar nerve, right leg, sequela -S9412XA Injury of medial plantar nerve, left leg, initial encounter -S9412XD Injury of medial plantar nerve, left leg, subsequent encounter -S9412XS Injury of medial plantar nerve, left leg, sequela -S9420XA Injury of deep peroneal nerve at ankle and foot level, unspecified leg, initial encounter -S9420XD Injury of deep peroneal nerve at ankle and foot level, unspecified leg, subsequent encounter -S9420XS Injury of deep peroneal nerve at ankle and foot level, unspecified leg, sequela -S9421XA Injury of deep peroneal nerve at ankle and foot level, right leg, initial encounter -S9421XD Injury of deep peroneal nerve at ankle and foot level, right leg, subsequent encounter -S9421XS Injury of deep peroneal nerve at ankle and foot level, right leg, sequela -S9422XA Injury of deep peroneal nerve at ankle and foot level, left leg, initial encounter -S9422XD Injury of deep peroneal nerve at ankle and foot level, left leg, subsequent encounter -S9422XS Injury of deep peroneal nerve at ankle and foot level, left leg, sequela -S9430XA Injury of cutaneous sensory nerve at ankle and foot level, unspecified leg, initial encounter -S9430XD Injury of cutaneous sensory nerve at ankle and foot level, unspecified leg, subsequent encounter -S9430XS Injury of cutaneous sensory nerve at ankle and foot level, unspecified leg, sequela -S9431XA Injury of cutaneous sensory nerve at ankle and foot level, right leg, initial encounter -S9431XD Injury of cutaneous sensory nerve at ankle and foot level, right leg, subsequent encounter -S9431XS Injury of cutaneous sensory nerve at ankle and foot level, right leg, sequela -S9432XA Injury of cutaneous sensory nerve at ankle and foot level, left leg, initial encounter -S9432XD Injury of cutaneous sensory nerve at ankle and foot level, left leg, subsequent encounter -S9432XS Injury of cutaneous sensory nerve at ankle and foot level, left leg, sequela -S948X1A Injury of other nerves at ankle and foot level, right leg, initial encounter -S948X1D Injury of other nerves at ankle and foot level, right leg, subsequent encounter -S948X1S Injury of other nerves at ankle and foot level, right leg, sequela -S948X2A Injury of other nerves at ankle and foot level, left leg, initial encounter -S948X2D Injury of other nerves at ankle and foot level, left leg, subsequent encounter -S948X2S Injury of other nerves at ankle and foot level, left leg, sequela -S948X9A Injury of other nerves at ankle and foot level, unspecified leg, initial encounter -S948X9D Injury of other nerves at ankle and foot level, unspecified leg, subsequent encounter -S948X9S Injury of other nerves at ankle and foot level, unspecified leg, sequela -S9490XA Injury of unspecified nerve at ankle and foot level, unspecified leg, initial encounter -S9490XD Injury of unspecified nerve at ankle and foot level, unspecified leg, subsequent encounter -S9490XS Injury of unspecified nerve at ankle and foot level, unspecified leg, sequela -S9491XA Injury of unspecified nerve at ankle and foot level, right leg, initial encounter -S9491XD Injury of unspecified nerve at ankle and foot level, right leg, subsequent encounter -S9491XS Injury of unspecified nerve at ankle and foot level, right leg, sequela -S9492XA Injury of unspecified nerve at ankle and foot level, left leg, initial encounter -S9492XD Injury of unspecified nerve at ankle and foot level, left leg, subsequent encounter -S9492XS Injury of unspecified nerve at ankle and foot level, left leg, sequela -S95001A Unspecified injury of dorsal artery of right foot, initial encounter -S95001D Unspecified injury of dorsal artery of right foot, subsequent encounter -S95001S Unspecified injury of dorsal artery of right foot, sequela -S95002A Unspecified injury of dorsal artery of left foot, initial encounter -S95002D Unspecified injury of dorsal artery of left foot, subsequent encounter -S95002S Unspecified injury of dorsal artery of left foot, sequela -S95009A Unspecified injury of dorsal artery of unspecified foot, initial encounter -S95009D Unspecified injury of dorsal artery of unspecified foot, subsequent encounter -S95009S Unspecified injury of dorsal artery of unspecified foot, sequela -S95011A Laceration of dorsal artery of right foot, initial encounter -S95011D Laceration of dorsal artery of right foot, subsequent encounter -S95011S Laceration of dorsal artery of right foot, sequela -S95012A Laceration of dorsal artery of left foot, initial encounter -S95012D Laceration of dorsal artery of left foot, subsequent encounter -S95012S Laceration of dorsal artery of left foot, sequela -S95019A Laceration of dorsal artery of unspecified foot, initial encounter -S95019D Laceration of dorsal artery of unspecified foot, subsequent encounter -S95019S Laceration of dorsal artery of unspecified foot, sequela -S95091A Other specified injury of dorsal artery of right foot, initial encounter -S95091D Other specified injury of dorsal artery of right foot, subsequent encounter -S95091S Other specified injury of dorsal artery of right foot, sequela -S95092A Other specified injury of dorsal artery of left foot, initial encounter -S95092D Other specified injury of dorsal artery of left foot, subsequent encounter -S95092S Other specified injury of dorsal artery of left foot, sequela -S95099A Other specified injury of dorsal artery of unspecified foot, initial encounter -S95099D Other specified injury of dorsal artery of unspecified foot, subsequent encounter -S95099S Other specified injury of dorsal artery of unspecified foot, sequela -S95101A Unspecified injury of plantar artery of right foot, initial encounter -S95101D Unspecified injury of plantar artery of right foot, subsequent encounter -S95101S Unspecified injury of plantar artery of right foot, sequela -S95102A Unspecified injury of plantar artery of left foot, initial encounter -S95102D Unspecified injury of plantar artery of left foot, subsequent encounter -S95102S Unspecified injury of plantar artery of left foot, sequela -S95109A Unspecified injury of plantar artery of unspecified foot, initial encounter -S95109D Unspecified injury of plantar artery of unspecified foot, subsequent encounter -S95109S Unspecified injury of plantar artery of unspecified foot, sequela -S95111A Laceration of plantar artery of right foot, initial encounter -S95111D Laceration of plantar artery of right foot, subsequent encounter -S95111S Laceration of plantar artery of right foot, sequela -S95112A Laceration of plantar artery of left foot, initial encounter -S95112D Laceration of plantar artery of left foot, subsequent encounter -S95112S Laceration of plantar artery of left foot, sequela -S95119A Laceration of plantar artery of unspecified foot, initial encounter -S95119D Laceration of plantar artery of unspecified foot, subsequent encounter -S95119S Laceration of plantar artery of unspecified foot, sequela -S95191A Other specified injury of plantar artery of right foot, initial encounter -S95191D Other specified injury of plantar artery of right foot, subsequent encounter -S95191S Other specified injury of plantar artery of right foot, sequela -S95192A Other specified injury of plantar artery of left foot, initial encounter -S95192D Other specified injury of plantar artery of left foot, subsequent encounter -S95192S Other specified injury of plantar artery of left foot, sequela -S95199A Other specified injury of plantar artery of unspecified foot, initial encounter -S95199D Other specified injury of plantar artery of unspecified foot, subsequent encounter -S95199S Other specified injury of plantar artery of unspecified foot, sequela -S95201A Unspecified injury of dorsal vein of right foot, initial encounter -S95201D Unspecified injury of dorsal vein of right foot, subsequent encounter -S95201S Unspecified injury of dorsal vein of right foot, sequela -S95202A Unspecified injury of dorsal vein of left foot, initial encounter -S95202D Unspecified injury of dorsal vein of left foot, subsequent encounter -S95202S Unspecified injury of dorsal vein of left foot, sequela -S95209A Unspecified injury of dorsal vein of unspecified foot, initial encounter -S95209D Unspecified injury of dorsal vein of unspecified foot, subsequent encounter -S95209S Unspecified injury of dorsal vein of unspecified foot, sequela -S95211A Laceration of dorsal vein of right foot, initial encounter -S95211D Laceration of dorsal vein of right foot, subsequent encounter -S95211S Laceration of dorsal vein of right foot, sequela -S95212A Laceration of dorsal vein of left foot, initial encounter -S95212D Laceration of dorsal vein of left foot, subsequent encounter -S95212S Laceration of dorsal vein of left foot, sequela -S95219A Laceration of dorsal vein of unspecified foot, initial encounter -S95219D Laceration of dorsal vein of unspecified foot, subsequent encounter -S95219S Laceration of dorsal vein of unspecified foot, sequela -S95291A Other specified injury of dorsal vein of right foot, initial encounter -S95291D Other specified injury of dorsal vein of right foot, subsequent encounter -S95291S Other specified injury of dorsal vein of right foot, sequela -S95292A Other specified injury of dorsal vein of left foot, initial encounter -S95292D Other specified injury of dorsal vein of left foot, subsequent encounter -S95292S Other specified injury of dorsal vein of left foot, sequela -S95299A Other specified injury of dorsal vein of unspecified foot, initial encounter -S95299D Other specified injury of dorsal vein of unspecified foot, subsequent encounter -S95299S Other specified injury of dorsal vein of unspecified foot, sequela -S95801A Unspecified injury of other blood vessels at ankle and foot level, right leg, initial encounter -S95801D Unspecified injury of other blood vessels at ankle and foot level, right leg, subsequent encounter -S95801S Unspecified injury of other blood vessels at ankle and foot level, right leg, sequela -S95802A Unspecified injury of other blood vessels at ankle and foot level, left leg, initial encounter -S95802D Unspecified injury of other blood vessels at ankle and foot level, left leg, subsequent encounter -S95802S Unspecified injury of other blood vessels at ankle and foot level, left leg, sequela -S95809A Unspecified injury of other blood vessels at ankle and foot level, unspecified leg, initial encounter -S95809D Unspecified injury of other blood vessels at ankle and foot level, unspecified leg, subsequent encounter -S95809S Unspecified injury of other blood vessels at ankle and foot level, unspecified leg, sequela -S95811A Laceration of other blood vessels at ankle and foot level, right leg, initial encounter -S95811D Laceration of other blood vessels at ankle and foot level, right leg, subsequent encounter -S95811S Laceration of other blood vessels at ankle and foot level, right leg, sequela -S95812A Laceration of other blood vessels at ankle and foot level, left leg, initial encounter -S95812D Laceration of other blood vessels at ankle and foot level, left leg, subsequent encounter -S95812S Laceration of other blood vessels at ankle and foot level, left leg, sequela -S95819A Laceration of other blood vessels at ankle and foot level, unspecified leg, initial encounter -S95819D Laceration of other blood vessels at ankle and foot level, unspecified leg, subsequent encounter -S95819S Laceration of other blood vessels at ankle and foot level, unspecified leg, sequela -S95891A Other specified injury of other blood vessels at ankle and foot level, right leg, initial encounter -S95891D Other specified injury of other blood vessels at ankle and foot level, right leg, subsequent encounter -S95891S Other specified injury of other blood vessels at ankle and foot level, right leg, sequela -S95892A Other specified injury of other blood vessels at ankle and foot level, left leg, initial encounter -S95892D Other specified injury of other blood vessels at ankle and foot level, left leg, subsequent encounter -S95892S Other specified injury of other blood vessels at ankle and foot level, left leg, sequela -S95899A Other specified injury of other blood vessels at ankle and foot level, unspecified leg, initial encounter -S95899D Other specified injury of other blood vessels at ankle and foot level, unspecified leg, subsequent encounter -S95899S Other specified injury of other blood vessels at ankle and foot level, unspecified leg, sequela -S95901A Unspecified injury of unspecified blood vessel at ankle and foot level, right leg, initial encounter -S95901D Unspecified injury of unspecified blood vessel at ankle and foot level, right leg, subsequent encounter -S95901S Unspecified injury of unspecified blood vessel at ankle and foot level, right leg, sequela -S95902A Unspecified injury of unspecified blood vessel at ankle and foot level, left leg, initial encounter -S95902D Unspecified injury of unspecified blood vessel at ankle and foot level, left leg, subsequent encounter -S95902S Unspecified injury of unspecified blood vessel at ankle and foot level, left leg, sequela -S95909A Unspecified injury of unspecified blood vessel at ankle and foot level, unspecified leg, initial encounter -S95909D Unspecified injury of unspecified blood vessel at ankle and foot level, unspecified leg, subsequent encounter -S95909S Unspecified injury of unspecified blood vessel at ankle and foot level, unspecified leg, sequela -S95911A Laceration of unspecified blood vessel at ankle and foot level, right leg, initial encounter -S95911D Laceration of unspecified blood vessel at ankle and foot level, right leg, subsequent encounter -S95911S Laceration of unspecified blood vessel at ankle and foot level, right leg, sequela -S95912A Laceration of unspecified blood vessel at ankle and foot level, left leg, initial encounter -S95912D Laceration of unspecified blood vessel at ankle and foot level, left leg, subsequent encounter -S95912S Laceration of unspecified blood vessel at ankle and foot level, left leg, sequela -S95919A Laceration of unspecified blood vessel at ankle and foot level, unspecified leg, initial encounter -S95919D Laceration of unspecified blood vessel at ankle and foot level, unspecified leg, subsequent encounter -S95919S Laceration of unspecified blood vessel at ankle and foot level, unspecified leg, sequela -S95991A Other specified injury of unspecified blood vessel at ankle and foot level, right leg, initial encounter -S95991D Other specified injury of unspecified blood vessel at ankle and foot level, right leg, subsequent encounter -S95991S Other specified injury of unspecified blood vessel at ankle and foot level, right leg, sequela -S95992A Other specified injury of unspecified blood vessel at ankle and foot level, left leg, initial encounter -S95992D Other specified injury of unspecified blood vessel at ankle and foot level, left leg, subsequent encounter -S95992S Other specified injury of unspecified blood vessel at ankle and foot level, left leg, sequela -S95999A Other specified injury of unspecified blood vessel at ankle and foot level, unspecified leg, initial encounter -S95999D Other specified injury of unspecified blood vessel at ankle and foot level, unspecified leg, subsequent encounter -S95999S Other specified injury of unspecified blood vessel at ankle and foot level, unspecified leg, sequela -S96001A Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, initial encounter -S96001D Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96001S Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, sequela -S96002A Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, initial encounter -S96002D Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96002S Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, sequela -S96009A Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96009D Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96009S Unspecified injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, sequela -S96011A Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, initial encounter -S96011D Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96011S Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, sequela -S96012A Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, initial encounter -S96012D Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96012S Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, sequela -S96019A Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96019D Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96019S Strain of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, sequela -S96021A Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, initial encounter -S96021D Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96021S Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, sequela -S96022A Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, initial encounter -S96022D Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96022S Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, sequela -S96029A Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96029D Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96029S Laceration of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, sequela -S96091A Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, initial encounter -S96091D Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96091S Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, right foot, sequela -S96092A Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, initial encounter -S96092D Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96092S Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, left foot, sequela -S96099A Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96099D Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96099S Other injury of muscle and tendon of long flexor muscle of toe at ankle and foot level, unspecified foot, sequela -S96101A Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, initial encounter -S96101D Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96101S Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, sequela -S96102A Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, initial encounter -S96102D Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96102S Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, sequela -S96109A Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96109D Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96109S Unspecified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, sequela -S96111A Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, initial encounter -S96111D Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96111S Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, sequela -S96112A Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, initial encounter -S96112D Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96112S Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, sequela -S96119A Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96119D Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96119S Strain of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, sequela -S96121A Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, initial encounter -S96121D Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96121S Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, sequela -S96122A Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, initial encounter -S96122D Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96122S Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, sequela -S96129A Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96129D Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96129S Laceration of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, sequela -S96191A Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, initial encounter -S96191D Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, subsequent encounter -S96191S Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, right foot, sequela -S96192A Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, initial encounter -S96192D Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, subsequent encounter -S96192S Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, left foot, sequela -S96199A Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, initial encounter -S96199D Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, subsequent encounter -S96199S Other specified injury of muscle and tendon of long extensor muscle of toe at ankle and foot level, unspecified foot, sequela -S96201A Unspecified injury of intrinsic muscle and tendon at ankle and foot level, right foot, initial encounter -S96201D Unspecified injury of intrinsic muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96201S Unspecified injury of intrinsic muscle and tendon at ankle and foot level, right foot, sequela -S96202A Unspecified injury of intrinsic muscle and tendon at ankle and foot level, left foot, initial encounter -S96202D Unspecified injury of intrinsic muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96202S Unspecified injury of intrinsic muscle and tendon at ankle and foot level, left foot, sequela -S96209A Unspecified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96209D Unspecified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96209S Unspecified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, sequela -S96211A Strain of intrinsic muscle and tendon at ankle and foot level, right foot, initial encounter -S96211D Strain of intrinsic muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96211S Strain of intrinsic muscle and tendon at ankle and foot level, right foot, sequela -S96212A Strain of intrinsic muscle and tendon at ankle and foot level, left foot, initial encounter -S96212D Strain of intrinsic muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96212S Strain of intrinsic muscle and tendon at ankle and foot level, left foot, sequela -S96219A Strain of intrinsic muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96219D Strain of intrinsic muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96219S Strain of intrinsic muscle and tendon at ankle and foot level, unspecified foot, sequela -S96221A Laceration of intrinsic muscle and tendon at ankle and foot level, right foot, initial encounter -S96221D Laceration of intrinsic muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96221S Laceration of intrinsic muscle and tendon at ankle and foot level, right foot, sequela -S96222A Laceration of intrinsic muscle and tendon at ankle and foot level, left foot, initial encounter -S96222D Laceration of intrinsic muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96222S Laceration of intrinsic muscle and tendon at ankle and foot level, left foot, sequela -S96229A Laceration of intrinsic muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96229D Laceration of intrinsic muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96229S Laceration of intrinsic muscle and tendon at ankle and foot level, unspecified foot, sequela -S96291A Other specified injury of intrinsic muscle and tendon at ankle and foot level, right foot, initial encounter -S96291D Other specified injury of intrinsic muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96291S Other specified injury of intrinsic muscle and tendon at ankle and foot level, right foot, sequela -S96292A Other specified injury of intrinsic muscle and tendon at ankle and foot level, left foot, initial encounter -S96292D Other specified injury of intrinsic muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96292S Other specified injury of intrinsic muscle and tendon at ankle and foot level, left foot, sequela -S96299A Other specified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96299D Other specified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96299S Other specified injury of intrinsic muscle and tendon at ankle and foot level, unspecified foot, sequela -S96801A Unspecified injury of other specified muscles and tendons at ankle and foot level, right foot, initial encounter -S96801D Unspecified injury of other specified muscles and tendons at ankle and foot level, right foot, subsequent encounter -S96801S Unspecified injury of other specified muscles and tendons at ankle and foot level, right foot, sequela -S96802A Unspecified injury of other specified muscles and tendons at ankle and foot level, left foot, initial encounter -S96802D Unspecified injury of other specified muscles and tendons at ankle and foot level, left foot, subsequent encounter -S96802S Unspecified injury of other specified muscles and tendons at ankle and foot level, left foot, sequela -S96809A Unspecified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, initial encounter -S96809D Unspecified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, subsequent encounter -S96809S Unspecified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, sequela -S96811A Strain of other specified muscles and tendons at ankle and foot level, right foot, initial encounter -S96811D Strain of other specified muscles and tendons at ankle and foot level, right foot, subsequent encounter -S96811S Strain of other specified muscles and tendons at ankle and foot level, right foot, sequela -S96812A Strain of other specified muscles and tendons at ankle and foot level, left foot, initial encounter -S96812D Strain of other specified muscles and tendons at ankle and foot level, left foot, subsequent encounter -S96812S Strain of other specified muscles and tendons at ankle and foot level, left foot, sequela -S96819A Strain of other specified muscles and tendons at ankle and foot level, unspecified foot, initial encounter -S96819D Strain of other specified muscles and tendons at ankle and foot level, unspecified foot, subsequent encounter -S96819S Strain of other specified muscles and tendons at ankle and foot level, unspecified foot, sequela -S96821A Laceration of other specified muscles and tendons at ankle and foot level, right foot, initial encounter -S96821D Laceration of other specified muscles and tendons at ankle and foot level, right foot, subsequent encounter -S96821S Laceration of other specified muscles and tendons at ankle and foot level, right foot, sequela -S96822A Laceration of other specified muscles and tendons at ankle and foot level, left foot, initial encounter -S96822D Laceration of other specified muscles and tendons at ankle and foot level, left foot, subsequent encounter -S96822S Laceration of other specified muscles and tendons at ankle and foot level, left foot, sequela -S96829A Laceration of other specified muscles and tendons at ankle and foot level, unspecified foot, initial encounter -S96829D Laceration of other specified muscles and tendons at ankle and foot level, unspecified foot, subsequent encounter -S96829S Laceration of other specified muscles and tendons at ankle and foot level, unspecified foot, sequela -S96891A Other specified injury of other specified muscles and tendons at ankle and foot level, right foot, initial encounter -S96891D Other specified injury of other specified muscles and tendons at ankle and foot level, right foot, subsequent encounter -S96891S Other specified injury of other specified muscles and tendons at ankle and foot level, right foot, sequela -S96892A Other specified injury of other specified muscles and tendons at ankle and foot level, left foot, initial encounter -S96892D Other specified injury of other specified muscles and tendons at ankle and foot level, left foot, subsequent encounter -S96892S Other specified injury of other specified muscles and tendons at ankle and foot level, left foot, sequela -S96899A Other specified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, initial encounter -S96899D Other specified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, subsequent encounter -S96899S Other specified injury of other specified muscles and tendons at ankle and foot level, unspecified foot, sequela -S96901A Unspecified injury of unspecified muscle and tendon at ankle and foot level, right foot, initial encounter -S96901D Unspecified injury of unspecified muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96901S Unspecified injury of unspecified muscle and tendon at ankle and foot level, right foot, sequela -S96902A Unspecified injury of unspecified muscle and tendon at ankle and foot level, left foot, initial encounter -S96902D Unspecified injury of unspecified muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96902S Unspecified injury of unspecified muscle and tendon at ankle and foot level, left foot, sequela -S96909A Unspecified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96909D Unspecified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96909S Unspecified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, sequela -S96911A Strain of unspecified muscle and tendon at ankle and foot level, right foot, initial encounter -S96911D Strain of unspecified muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96911S Strain of unspecified muscle and tendon at ankle and foot level, right foot, sequela -S96912A Strain of unspecified muscle and tendon at ankle and foot level, left foot, initial encounter -S96912D Strain of unspecified muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96912S Strain of unspecified muscle and tendon at ankle and foot level, left foot, sequela -S96919A Strain of unspecified muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96919D Strain of unspecified muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96919S Strain of unspecified muscle and tendon at ankle and foot level, unspecified foot, sequela -S96921A Laceration of unspecified muscle and tendon at ankle and foot level, right foot, initial encounter -S96921D Laceration of unspecified muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96921S Laceration of unspecified muscle and tendon at ankle and foot level, right foot, sequela -S96922A Laceration of unspecified muscle and tendon at ankle and foot level, left foot, initial encounter -S96922D Laceration of unspecified muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96922S Laceration of unspecified muscle and tendon at ankle and foot level, left foot, sequela -S96929A Laceration of unspecified muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96929D Laceration of unspecified muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96929S Laceration of unspecified muscle and tendon at ankle and foot level, unspecified foot, sequela -S96991A Other specified injury of unspecified muscle and tendon at ankle and foot level, right foot, initial encounter -S96991D Other specified injury of unspecified muscle and tendon at ankle and foot level, right foot, subsequent encounter -S96991S Other specified injury of unspecified muscle and tendon at ankle and foot level, right foot, sequela -S96992A Other specified injury of unspecified muscle and tendon at ankle and foot level, left foot, initial encounter -S96992D Other specified injury of unspecified muscle and tendon at ankle and foot level, left foot, subsequent encounter -S96992S Other specified injury of unspecified muscle and tendon at ankle and foot level, left foot, sequela -S96999A Other specified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, initial encounter -S96999D Other specified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, subsequent encounter -S96999S Other specified injury of unspecified muscle and tendon at ankle and foot level, unspecified foot, sequela -S9700XA Crushing injury of unspecified ankle, initial encounter -S9700XD Crushing injury of unspecified ankle, subsequent encounter -S9700XS Crushing injury of unspecified ankle, sequela -S9701XA Crushing injury of right ankle, initial encounter -S9701XD Crushing injury of right ankle, subsequent encounter -S9701XS Crushing injury of right ankle, sequela -S9702XA Crushing injury of left ankle, initial encounter -S9702XD Crushing injury of left ankle, subsequent encounter -S9702XS Crushing injury of left ankle, sequela -S97101A Crushing injury of unspecified right toe(s), initial encounter -S97101D Crushing injury of unspecified right toe(s), subsequent encounter -S97101S Crushing injury of unspecified right toe(s), sequela -S97102A Crushing injury of unspecified left toe(s), initial encounter -S97102D Crushing injury of unspecified left toe(s), subsequent encounter -S97102S Crushing injury of unspecified left toe(s), sequela -S97109A Crushing injury of unspecified toe(s), initial encounter -S97109D Crushing injury of unspecified toe(s), subsequent encounter -S97109S Crushing injury of unspecified toe(s), sequela -S97111A Crushing injury of right great toe, initial encounter -S97111D Crushing injury of right great toe, subsequent encounter -S97111S Crushing injury of right great toe, sequela -S97112A Crushing injury of left great toe, initial encounter -S97112D Crushing injury of left great toe, subsequent encounter -S97112S Crushing injury of left great toe, sequela -S97119A Crushing injury of unspecified great toe, initial encounter -S97119D Crushing injury of unspecified great toe, subsequent encounter -S97119S Crushing injury of unspecified great toe, sequela -S97121A Crushing injury of right lesser toe(s), initial encounter -S97121D Crushing injury of right lesser toe(s), subsequent encounter -S97121S Crushing injury of right lesser toe(s), sequela -S97122A Crushing injury of left lesser toe(s), initial encounter -S97122D Crushing injury of left lesser toe(s), subsequent encounter -S97122S Crushing injury of left lesser toe(s), sequela -S97129A Crushing injury of unspecified lesser toe(s), initial encounter -S97129D Crushing injury of unspecified lesser toe(s), subsequent encounter -S97129S Crushing injury of unspecified lesser toe(s), sequela -S9780XA Crushing injury of unspecified foot, initial encounter -S9780XD Crushing injury of unspecified foot, subsequent encounter -S9780XS Crushing injury of unspecified foot, sequela -S9781XA Crushing injury of right foot, initial encounter -S9781XD Crushing injury of right foot, subsequent encounter -S9781XS Crushing injury of right foot, sequela -S9782XA Crushing injury of left foot, initial encounter -S9782XD Crushing injury of left foot, subsequent encounter -S9782XS Crushing injury of left foot, sequela -S98011A Complete traumatic amputation of right foot at ankle level, initial encounter -S98011D Complete traumatic amputation of right foot at ankle level, subsequent encounter -S98011S Complete traumatic amputation of right foot at ankle level, sequela -S98012A Complete traumatic amputation of left foot at ankle level, initial encounter -S98012D Complete traumatic amputation of left foot at ankle level, subsequent encounter -S98012S Complete traumatic amputation of left foot at ankle level, sequela -S98019A Complete traumatic amputation of unspecified foot at ankle level, initial encounter -S98019D Complete traumatic amputation of unspecified foot at ankle level, subsequent encounter -S98019S Complete traumatic amputation of unspecified foot at ankle level, sequela -S98021A Partial traumatic amputation of right foot at ankle level, initial encounter -S98021D Partial traumatic amputation of right foot at ankle level, subsequent encounter -S98021S Partial traumatic amputation of right foot at ankle level, sequela -S98022A Partial traumatic amputation of left foot at ankle level, initial encounter -S98022D Partial traumatic amputation of left foot at ankle level, subsequent encounter -S98022S Partial traumatic amputation of left foot at ankle level, sequela -S98029A Partial traumatic amputation of unspecified foot at ankle level, initial encounter -S98029D Partial traumatic amputation of unspecified foot at ankle level, subsequent encounter -S98029S Partial traumatic amputation of unspecified foot at ankle level, sequela -S98111A Complete traumatic amputation of right great toe, initial encounter -S98111D Complete traumatic amputation of right great toe, subsequent encounter -S98111S Complete traumatic amputation of right great toe, sequela -S98112A Complete traumatic amputation of left great toe, initial encounter -S98112D Complete traumatic amputation of left great toe, subsequent encounter -S98112S Complete traumatic amputation of left great toe, sequela -S98119A Complete traumatic amputation of unspecified great toe, initial encounter -S98119D Complete traumatic amputation of unspecified great toe, subsequent encounter -S98119S Complete traumatic amputation of unspecified great toe, sequela -S98121A Partial traumatic amputation of right great toe, initial encounter -S98121D Partial traumatic amputation of right great toe, subsequent encounter -S98121S Partial traumatic amputation of right great toe, sequela -S98122A Partial traumatic amputation of left great toe, initial encounter -S98122D Partial traumatic amputation of left great toe, subsequent encounter -S98122S Partial traumatic amputation of left great toe, sequela -S98129A Partial traumatic amputation of unspecified great toe, initial encounter -S98129D Partial traumatic amputation of unspecified great toe, subsequent encounter -S98129S Partial traumatic amputation of unspecified great toe, sequela -S98131A Complete traumatic amputation of one right lesser toe, initial encounter -S98131D Complete traumatic amputation of one right lesser toe, subsequent encounter -S98131S Complete traumatic amputation of one right lesser toe, sequela -S98132A Complete traumatic amputation of one left lesser toe, initial encounter -S98132D Complete traumatic amputation of one left lesser toe, subsequent encounter -S98132S Complete traumatic amputation of one left lesser toe, sequela -S98139A Complete traumatic amputation of one unspecified lesser toe, initial encounter -S98139D Complete traumatic amputation of one unspecified lesser toe, subsequent encounter -S98139S Complete traumatic amputation of one unspecified lesser toe, sequela -S98141A Partial traumatic amputation of one right lesser toe, initial encounter -S98141D Partial traumatic amputation of one right lesser toe, subsequent encounter -S98141S Partial traumatic amputation of one right lesser toe, sequela -S98142A Partial traumatic amputation of one left lesser toe, initial encounter -S98142D Partial traumatic amputation of one left lesser toe, subsequent encounter -S98142S Partial traumatic amputation of one left lesser toe, sequela -S98149A Partial traumatic amputation of one unspecified lesser toe, initial encounter -S98149D Partial traumatic amputation of one unspecified lesser toe, subsequent encounter -S98149S Partial traumatic amputation of one unspecified lesser toe, sequela -S98211A Complete traumatic amputation of two or more right lesser toes, initial encounter -S98211D Complete traumatic amputation of two or more right lesser toes, subsequent encounter -S98211S Complete traumatic amputation of two or more right lesser toes, sequela -S98212A Complete traumatic amputation of two or more left lesser toes, initial encounter -S98212D Complete traumatic amputation of two or more left lesser toes, subsequent encounter -S98212S Complete traumatic amputation of two or more left lesser toes, sequela -S98219A Complete traumatic amputation of two or more unspecified lesser toes, initial encounter -S98219D Complete traumatic amputation of two or more unspecified lesser toes, subsequent encounter -S98219S Complete traumatic amputation of two or more unspecified lesser toes, sequela -S98221A Partial traumatic amputation of two or more right lesser toes, initial encounter -S98221D Partial traumatic amputation of two or more right lesser toes, subsequent encounter -S98221S Partial traumatic amputation of two or more right lesser toes, sequela -S98222A Partial traumatic amputation of two or more left lesser toes, initial encounter -S98222D Partial traumatic amputation of two or more left lesser toes, subsequent encounter -S98222S Partial traumatic amputation of two or more left lesser toes, sequela -S98229A Partial traumatic amputation of two or more unspecified lesser toes, initial encounter -S98229D Partial traumatic amputation of two or more unspecified lesser toes, subsequent encounter -S98229S Partial traumatic amputation of two or more unspecified lesser toes, sequela -S98311A Complete traumatic amputation of right midfoot, initial encounter -S98311D Complete traumatic amputation of right midfoot, subsequent encounter -S98311S Complete traumatic amputation of right midfoot, sequela -S98312A Complete traumatic amputation of left midfoot, initial encounter -S98312D Complete traumatic amputation of left midfoot, subsequent encounter -S98312S Complete traumatic amputation of left midfoot, sequela -S98319A Complete traumatic amputation of unspecified midfoot, initial encounter -S98319D Complete traumatic amputation of unspecified midfoot, subsequent encounter -S98319S Complete traumatic amputation of unspecified midfoot, sequela -S98321A Partial traumatic amputation of right midfoot, initial encounter -S98321D Partial traumatic amputation of right midfoot, subsequent encounter -S98321S Partial traumatic amputation of right midfoot, sequela -S98322A Partial traumatic amputation of left midfoot, initial encounter -S98322D Partial traumatic amputation of left midfoot, subsequent encounter -S98322S Partial traumatic amputation of left midfoot, sequela -S98329A Partial traumatic amputation of unspecified midfoot, initial encounter -S98329D Partial traumatic amputation of unspecified midfoot, subsequent encounter -S98329S Partial traumatic amputation of unspecified midfoot, sequela -S98911A Complete traumatic amputation of right foot, level unspecified, initial encounter -S98911D Complete traumatic amputation of right foot, level unspecified, subsequent encounter -S98911S Complete traumatic amputation of right foot, level unspecified, sequela -S98912A Complete traumatic amputation of left foot, level unspecified, initial encounter -S98912D Complete traumatic amputation of left foot, level unspecified, subsequent encounter -S98912S Complete traumatic amputation of left foot, level unspecified, sequela -S98919A Complete traumatic amputation of unspecified foot, level unspecified, initial encounter -S98919D Complete traumatic amputation of unspecified foot, level unspecified, subsequent encounter -S98919S Complete traumatic amputation of unspecified foot, level unspecified, sequela -S98921A Partial traumatic amputation of right foot, level unspecified, initial encounter -S98921D Partial traumatic amputation of right foot, level unspecified, subsequent encounter -S98921S Partial traumatic amputation of right foot, level unspecified, sequela -S98922A Partial traumatic amputation of left foot, level unspecified, initial encounter -S98922D Partial traumatic amputation of left foot, level unspecified, subsequent encounter -S98922S Partial traumatic amputation of left foot, level unspecified, sequela -S98929A Partial traumatic amputation of unspecified foot, level unspecified, initial encounter -S98929D Partial traumatic amputation of unspecified foot, level unspecified, subsequent encounter -S98929S Partial traumatic amputation of unspecified foot, level unspecified, sequela -S99001A Unspecified physeal fracture of right calcaneus, initial encounter for closed fracture -S99001B Unspecified physeal fracture of right calcaneus, initial encounter for open fracture -S99001D Unspecified physeal fracture of right calcaneus, subsequent encounter for fracture with routine healing -S99001G Unspecified physeal fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S99001K Unspecified physeal fracture of right calcaneus, subsequent encounter for fracture with nonunion -S99001P Unspecified physeal fracture of right calcaneus, subsequent encounter for fracture with malunion -S99001S Unspecified physeal fracture of right calcaneus, sequela -S99002A Unspecified physeal fracture of left calcaneus, initial encounter for closed fracture -S99002B Unspecified physeal fracture of left calcaneus, initial encounter for open fracture -S99002D Unspecified physeal fracture of left calcaneus, subsequent encounter for fracture with routine healing -S99002G Unspecified physeal fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S99002K Unspecified physeal fracture of left calcaneus, subsequent encounter for fracture with nonunion -S99002P Unspecified physeal fracture of left calcaneus, subsequent encounter for fracture with malunion -S99002S Unspecified physeal fracture of left calcaneus, sequela -S99009A Unspecified physeal fracture of unspecified calcaneus, initial encounter for closed fracture -S99009B Unspecified physeal fracture of unspecified calcaneus, initial encounter for open fracture -S99009D Unspecified physeal fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S99009G Unspecified physeal fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S99009K Unspecified physeal fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S99009P Unspecified physeal fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S99009S Unspecified physeal fracture of unspecified calcaneus, sequela -S99011A Salter-Harris Type I physeal fracture of right calcaneus, initial encounter for closed fracture -S99011B Salter-Harris Type I physeal fracture of right calcaneus, initial encounter for open fracture -S99011D Salter-Harris Type I physeal fracture of right calcaneus, subsequent encounter for fracture with routine healing -S99011G Salter-Harris Type I physeal fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S99011K Salter-Harris Type I physeal fracture of right calcaneus, subsequent encounter for fracture with nonunion -S99011P Salter-Harris Type I physeal fracture of right calcaneus, subsequent encounter for fracture with malunion -S99011S Salter-Harris Type I physeal fracture of right calcaneus, sequela -S99012A Salter-Harris Type I physeal fracture of left calcaneus, initial encounter for closed fracture -S99012B Salter-Harris Type I physeal fracture of left calcaneus, initial encounter for open fracture -S99012D Salter-Harris Type I physeal fracture of left calcaneus, subsequent encounter for fracture with routine healing -S99012G Salter-Harris Type I physeal fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S99012K Salter-Harris Type I physeal fracture of left calcaneus, subsequent encounter for fracture with nonunion -S99012P Salter-Harris Type I physeal fracture of left calcaneus, subsequent encounter for fracture with malunion -S99012S Salter-Harris Type I physeal fracture of left calcaneus, sequela -S99019A Salter-Harris Type I physeal fracture of unspecified calcaneus, initial encounter for closed fracture -S99019B Salter-Harris Type I physeal fracture of unspecified calcaneus, initial encounter for open fracture -S99019D Salter-Harris Type I physeal fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S99019G Salter-Harris Type I physeal fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S99019K Salter-Harris Type I physeal fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S99019P Salter-Harris Type I physeal fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S99019S Salter-Harris Type I physeal fracture of unspecified calcaneus, sequela -S99021A Salter-Harris Type II physeal fracture of right calcaneus, initial encounter for closed fracture -S99021B Salter-Harris Type II physeal fracture of right calcaneus, initial encounter for open fracture -S99021D Salter-Harris Type II physeal fracture of right calcaneus, subsequent encounter for fracture with routine healing -S99021G Salter-Harris Type II physeal fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S99021K Salter-Harris Type II physeal fracture of right calcaneus, subsequent encounter for fracture with nonunion -S99021P Salter-Harris Type II physeal fracture of right calcaneus, subsequent encounter for fracture with malunion -S99021S Salter-Harris Type II physeal fracture of right calcaneus, sequela -S99022A Salter-Harris Type II physeal fracture of left calcaneus, initial encounter for closed fracture -S99022B Salter-Harris Type II physeal fracture of left calcaneus, initial encounter for open fracture -S99022D Salter-Harris Type II physeal fracture of left calcaneus, subsequent encounter for fracture with routine healing -S99022G Salter-Harris Type II physeal fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S99022K Salter-Harris Type II physeal fracture of left calcaneus, subsequent encounter for fracture with nonunion -S99022P Salter-Harris Type II physeal fracture of left calcaneus, subsequent encounter for fracture with malunion -S99022S Salter-Harris Type II physeal fracture of left calcaneus, sequela -S99029A Salter-Harris Type II physeal fracture of unspecified calcaneus, initial encounter for closed fracture -S99029B Salter-Harris Type II physeal fracture of unspecified calcaneus, initial encounter for open fracture -S99029D Salter-Harris Type II physeal fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S99029G Salter-Harris Type II physeal fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S99029K Salter-Harris Type II physeal fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S99029P Salter-Harris Type II physeal fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S99029S Salter-Harris Type II physeal fracture of unspecified calcaneus, sequela -S99031A Salter-Harris Type III physeal fracture of right calcaneus, initial encounter for closed fracture -S99031B Salter-Harris Type III physeal fracture of right calcaneus, initial encounter for open fracture -S99031D Salter-Harris Type III physeal fracture of right calcaneus, subsequent encounter for fracture with routine healing -S99031G Salter-Harris Type III physeal fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S99031K Salter-Harris Type III physeal fracture of right calcaneus, subsequent encounter for fracture with nonunion -S99031P Salter-Harris Type III physeal fracture of right calcaneus, subsequent encounter for fracture with malunion -S99031S Salter-Harris Type III physeal fracture of right calcaneus, sequela -S99032A Salter-Harris Type III physeal fracture of left calcaneus, initial encounter for closed fracture -S99032B Salter-Harris Type III physeal fracture of left calcaneus, initial encounter for open fracture -S99032D Salter-Harris Type III physeal fracture of left calcaneus, subsequent encounter for fracture with routine healing -S99032G Salter-Harris Type III physeal fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S99032K Salter-Harris Type III physeal fracture of left calcaneus, subsequent encounter for fracture with nonunion -S99032P Salter-Harris Type III physeal fracture of left calcaneus, subsequent encounter for fracture with malunion -S99032S Salter-Harris Type III physeal fracture of left calcaneus, sequela -S99039A Salter-Harris Type III physeal fracture of unspecified calcaneus, initial encounter for closed fracture -S99039B Salter-Harris Type III physeal fracture of unspecified calcaneus, initial encounter for open fracture -S99039D Salter-Harris Type III physeal fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S99039G Salter-Harris Type III physeal fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S99039K Salter-Harris Type III physeal fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S99039P Salter-Harris Type III physeal fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S99039S Salter-Harris Type III physeal fracture of unspecified calcaneus, sequela -S99041A Salter-Harris Type IV physeal fracture of right calcaneus, initial encounter for closed fracture -S99041B Salter-Harris Type IV physeal fracture of right calcaneus, initial encounter for open fracture -S99041D Salter-Harris Type IV physeal fracture of right calcaneus, subsequent encounter for fracture with routine healing -S99041G Salter-Harris Type IV physeal fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S99041K Salter-Harris Type IV physeal fracture of right calcaneus, subsequent encounter for fracture with nonunion -S99041P Salter-Harris Type IV physeal fracture of right calcaneus, subsequent encounter for fracture with malunion -S99041S Salter-Harris Type IV physeal fracture of right calcaneus, sequela -S99042A Salter-Harris Type IV physeal fracture of left calcaneus, initial encounter for closed fracture -S99042B Salter-Harris Type IV physeal fracture of left calcaneus, initial encounter for open fracture -S99042D Salter-Harris Type IV physeal fracture of left calcaneus, subsequent encounter for fracture with routine healing -S99042G Salter-Harris Type IV physeal fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S99042K Salter-Harris Type IV physeal fracture of left calcaneus, subsequent encounter for fracture with nonunion -S99042P Salter-Harris Type IV physeal fracture of left calcaneus, subsequent encounter for fracture with malunion -S99042S Salter-Harris Type IV physeal fracture of left calcaneus, sequela -S99049A Salter-Harris Type IV physeal fracture of unspecified calcaneus, initial encounter for closed fracture -S99049B Salter-Harris Type IV physeal fracture of unspecified calcaneus, initial encounter for open fracture -S99049D Salter-Harris Type IV physeal fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S99049G Salter-Harris Type IV physeal fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S99049K Salter-Harris Type IV physeal fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S99049P Salter-Harris Type IV physeal fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S99049S Salter-Harris Type IV physeal fracture of unspecified calcaneus, sequela -S99091A Other physeal fracture of right calcaneus, initial encounter for closed fracture -S99091B Other physeal fracture of right calcaneus, initial encounter for open fracture -S99091D Other physeal fracture of right calcaneus, subsequent encounter for fracture with routine healing -S99091G Other physeal fracture of right calcaneus, subsequent encounter for fracture with delayed healing -S99091K Other physeal fracture of right calcaneus, subsequent encounter for fracture with nonunion -S99091P Other physeal fracture of right calcaneus, subsequent encounter for fracture with malunion -S99091S Other physeal fracture of right calcaneus, sequela -S99092A Other physeal fracture of left calcaneus, initial encounter for closed fracture -S99092B Other physeal fracture of left calcaneus, initial encounter for open fracture -S99092D Other physeal fracture of left calcaneus, subsequent encounter for fracture with routine healing -S99092G Other physeal fracture of left calcaneus, subsequent encounter for fracture with delayed healing -S99092K Other physeal fracture of left calcaneus, subsequent encounter for fracture with nonunion -S99092P Other physeal fracture of left calcaneus, subsequent encounter for fracture with malunion -S99092S Other physeal fracture of left calcaneus, sequela -S99099A Other physeal fracture of unspecified calcaneus, initial encounter for closed fracture -S99099B Other physeal fracture of unspecified calcaneus, initial encounter for open fracture -S99099D Other physeal fracture of unspecified calcaneus, subsequent encounter for fracture with routine healing -S99099G Other physeal fracture of unspecified calcaneus, subsequent encounter for fracture with delayed healing -S99099K Other physeal fracture of unspecified calcaneus, subsequent encounter for fracture with nonunion -S99099P Other physeal fracture of unspecified calcaneus, subsequent encounter for fracture with malunion -S99099S Other physeal fracture of unspecified calcaneus, sequela -S99101A Unspecified physeal fracture of right metatarsal, initial encounter for closed fracture -S99101B Unspecified physeal fracture of right metatarsal, initial encounter for open fracture -S99101D Unspecified physeal fracture of right metatarsal, subsequent encounter for fracture with routine healing -S99101G Unspecified physeal fracture of right metatarsal, subsequent encounter for fracture with delayed healing -S99101K Unspecified physeal fracture of right metatarsal, subsequent encounter for fracture with nonunion -S99101P Unspecified physeal fracture of right metatarsal, subsequent encounter for fracture with malunion -S99101S Unspecified physeal fracture of right metatarsal, sequela -S99102A Unspecified physeal fracture of left metatarsal, initial encounter for closed fracture -S99102B Unspecified physeal fracture of left metatarsal, initial encounter for open fracture -S99102D Unspecified physeal fracture of left metatarsal, subsequent encounter for fracture with routine healing -S99102G Unspecified physeal fracture of left metatarsal, subsequent encounter for fracture with delayed healing -S99102K Unspecified physeal fracture of left metatarsal, subsequent encounter for fracture with nonunion -S99102P Unspecified physeal fracture of left metatarsal, subsequent encounter for fracture with malunion -S99102S Unspecified physeal fracture of left metatarsal, sequela -S99109A Unspecified physeal fracture of unspecified metatarsal, initial encounter for closed fracture -S99109B Unspecified physeal fracture of unspecified metatarsal, initial encounter for open fracture -S99109D Unspecified physeal fracture of unspecified metatarsal, subsequent encounter for fracture with routine healing -S99109G Unspecified physeal fracture of unspecified metatarsal, subsequent encounter for fracture with delayed healing -S99109K Unspecified physeal fracture of unspecified metatarsal, subsequent encounter for fracture with nonunion -S99109P Unspecified physeal fracture of unspecified metatarsal, subsequent encounter for fracture with malunion -S99109S Unspecified physeal fracture of unspecified metatarsal, sequela -S99111A Salter-Harris Type I physeal fracture of right metatarsal, initial encounter for closed fracture -S99111B Salter-Harris Type I physeal fracture of right metatarsal, initial encounter for open fracture -S99111D Salter-Harris Type I physeal fracture of right metatarsal, subsequent encounter for fracture with routine healing -S99111G Salter-Harris Type I physeal fracture of right metatarsal, subsequent encounter for fracture with delayed healing -S99111K Salter-Harris Type I physeal fracture of right metatarsal, subsequent encounter for fracture with nonunion -S99111P Salter-Harris Type I physeal fracture of right metatarsal, subsequent encounter for fracture with malunion -S99111S Salter-Harris Type I physeal fracture of right metatarsal, sequela -S99112A Salter-Harris Type I physeal fracture of left metatarsal, initial encounter for closed fracture -S99112B Salter-Harris Type I physeal fracture of left metatarsal, initial encounter for open fracture -S99112D Salter-Harris Type I physeal fracture of left metatarsal, subsequent encounter for fracture with routine healing -S99112G Salter-Harris Type I physeal fracture of left metatarsal, subsequent encounter for fracture with delayed healing -S99112K Salter-Harris Type I physeal fracture of left metatarsal, subsequent encounter for fracture with nonunion -S99112P Salter-Harris Type I physeal fracture of left metatarsal, subsequent encounter for fracture with malunion -S99112S Salter-Harris Type I physeal fracture of left metatarsal, sequela -S99119A Salter-Harris Type I physeal fracture of unspecified metatarsal, initial encounter for closed fracture -S99119B Salter-Harris Type I physeal fracture of unspecified metatarsal, initial encounter for open fracture -S99119D Salter-Harris Type I physeal fracture of unspecified metatarsal, subsequent encounter for fracture with routine healing -S99119G Salter-Harris Type I physeal fracture of unspecified metatarsal, subsequent encounter for fracture with delayed healing -S99119K Salter-Harris Type I physeal fracture of unspecified metatarsal, subsequent encounter for fracture with nonunion -S99119P Salter-Harris Type I physeal fracture of unspecified metatarsal, subsequent encounter for fracture with malunion -S99119S Salter-Harris Type I physeal fracture of unspecified metatarsal, sequela -S99121A Salter-Harris Type II physeal fracture of right metatarsal, initial encounter for closed fracture -S99121B Salter-Harris Type II physeal fracture of right metatarsal, initial encounter for open fracture -S99121D Salter-Harris Type II physeal fracture of right metatarsal, subsequent encounter for fracture with routine healing -S99121G Salter-Harris Type II physeal fracture of right metatarsal, subsequent encounter for fracture with delayed healing -S99121K Salter-Harris Type II physeal fracture of right metatarsal, subsequent encounter for fracture with nonunion -S99121P Salter-Harris Type II physeal fracture of right metatarsal, subsequent encounter for fracture with malunion -S99121S Salter-Harris Type II physeal fracture of right metatarsal, sequela -S99122A Salter-Harris Type II physeal fracture of left metatarsal, initial encounter for closed fracture -S99122B Salter-Harris Type II physeal fracture of left metatarsal, initial encounter for open fracture -S99122D Salter-Harris Type II physeal fracture of left metatarsal, subsequent encounter for fracture with routine healing -S99122G Salter-Harris Type II physeal fracture of left metatarsal, subsequent encounter for fracture with delayed healing -S99122K Salter-Harris Type II physeal fracture of left metatarsal, subsequent encounter for fracture with nonunion -S99122P Salter-Harris Type II physeal fracture of left metatarsal, subsequent encounter for fracture with malunion -S99122S Salter-Harris Type II physeal fracture of left metatarsal, sequela -S99129A Salter-Harris Type II physeal fracture of unspecified metatarsal, initial encounter for closed fracture -S99129B Salter-Harris Type II physeal fracture of unspecified metatarsal, initial encounter for open fracture -S99129D Salter-Harris Type II physeal fracture of unspecified metatarsal, subsequent encounter for fracture with routine healing -S99129G Salter-Harris Type II physeal fracture of unspecified metatarsal, subsequent encounter for fracture with delayed healing -S99129K Salter-Harris Type II physeal fracture of unspecified metatarsal, subsequent encounter for fracture with nonunion -S99129P Salter-Harris Type II physeal fracture of unspecified metatarsal, subsequent encounter for fracture with malunion -S99129S Salter-Harris Type II physeal fracture of unspecified metatarsal, sequela -S99131A Salter-Harris Type III physeal fracture of right metatarsal, initial encounter for closed fracture -S99131B Salter-Harris Type III physeal fracture of right metatarsal, initial encounter for open fracture -S99131D Salter-Harris Type III physeal fracture of right metatarsal, subsequent encounter for fracture with routine healing -S99131G Salter-Harris Type III physeal fracture of right metatarsal, subsequent encounter for fracture with delayed healing -S99131K Salter-Harris Type III physeal fracture of right metatarsal, subsequent encounter for fracture with nonunion -S99131P Salter-Harris Type III physeal fracture of right metatarsal, subsequent encounter for fracture with malunion -S99131S Salter-Harris Type III physeal fracture of right metatarsal, sequela -S99132A Salter-Harris Type III physeal fracture of left metatarsal, initial encounter for closed fracture -S99132B Salter-Harris Type III physeal fracture of left metatarsal, initial encounter for open fracture -S99132D Salter-Harris Type III physeal fracture of left metatarsal, subsequent encounter for fracture with routine healing -S99132G Salter-Harris Type III physeal fracture of left metatarsal, subsequent encounter for fracture with delayed healing -S99132K Salter-Harris Type III physeal fracture of left metatarsal, subsequent encounter for fracture with nonunion -S99132P Salter-Harris Type III physeal fracture of left metatarsal, subsequent encounter for fracture with malunion -S99132S Salter-Harris Type III physeal fracture of left metatarsal, sequela -S99139A Salter-Harris Type III physeal fracture of unspecified metatarsal, initial encounter for closed fracture -S99139B Salter-Harris Type III physeal fracture of unspecified metatarsal, initial encounter for open fracture -S99139D Salter-Harris Type III physeal fracture of unspecified metatarsal, subsequent encounter for fracture with routine healing -S99139G Salter-Harris Type III physeal fracture of unspecified metatarsal, subsequent encounter for fracture with delayed healing -S99139K Salter-Harris Type III physeal fracture of unspecified metatarsal, subsequent encounter for fracture with nonunion -S99139P Salter-Harris Type III physeal fracture of unspecified metatarsal, subsequent encounter for fracture with malunion -S99139S Salter-Harris Type III physeal fracture of unspecified metatarsal, sequela -S99141A Salter-Harris Type IV physeal fracture of right metatarsal, initial encounter for closed fracture -S99141B Salter-Harris Type IV physeal fracture of right metatarsal, initial encounter for open fracture -S99141D Salter-Harris Type IV physeal fracture of right metatarsal, subsequent encounter for fracture with routine healing -S99141G Salter-Harris Type IV physeal fracture of right metatarsal, subsequent encounter for fracture with delayed healing -S99141K Salter-Harris Type IV physeal fracture of right metatarsal, subsequent encounter for fracture with nonunion -S99141P Salter-Harris Type IV physeal fracture of right metatarsal, subsequent encounter for fracture with malunion -S99141S Salter-Harris Type IV physeal fracture of right metatarsal, sequela -S99142A Salter-Harris Type IV physeal fracture of left metatarsal, initial encounter for closed fracture -S99142B Salter-Harris Type IV physeal fracture of left metatarsal, initial encounter for open fracture -S99142D Salter-Harris Type IV physeal fracture of left metatarsal, subsequent encounter for fracture with routine healing -S99142G Salter-Harris Type IV physeal fracture of left metatarsal, subsequent encounter for fracture with delayed healing -S99142K Salter-Harris Type IV physeal fracture of left metatarsal, subsequent encounter for fracture with nonunion -S99142P Salter-Harris Type IV physeal fracture of left metatarsal, subsequent encounter for fracture with malunion -S99142S Salter-Harris Type IV physeal fracture of left metatarsal, sequela -S99149A Salter-Harris Type IV physeal fracture of unspecified metatarsal, initial encounter for closed fracture -S99149B Salter-Harris Type IV physeal fracture of unspecified metatarsal, initial encounter for open fracture -S99149D Salter-Harris Type IV physeal fracture of unspecified metatarsal, subsequent encounter for fracture with routine healing -S99149G Salter-Harris Type IV physeal fracture of unspecified metatarsal, subsequent encounter for fracture with delayed healing -S99149K Salter-Harris Type IV physeal fracture of unspecified metatarsal, subsequent encounter for fracture with nonunion -S99149P Salter-Harris Type IV physeal fracture of unspecified metatarsal, subsequent encounter for fracture with malunion -S99149S Salter-Harris Type IV physeal fracture of unspecified metatarsal, sequela -S99191A Other physeal fracture of right metatarsal, initial encounter for closed fracture -S99191B Other physeal fracture of right metatarsal, initial encounter for open fracture -S99191D Other physeal fracture of right metatarsal, subsequent encounter for fracture with routine healing -S99191G Other physeal fracture of right metatarsal, subsequent encounter for fracture with delayed healing -S99191K Other physeal fracture of right metatarsal, subsequent encounter for fracture with nonunion -S99191P Other physeal fracture of right metatarsal, subsequent encounter for fracture with malunion -S99191S Other physeal fracture of right metatarsal, sequela -S99192A Other physeal fracture of left metatarsal, initial encounter for closed fracture -S99192B Other physeal fracture of left metatarsal, initial encounter for open fracture -S99192D Other physeal fracture of left metatarsal, subsequent encounter for fracture with routine healing -S99192G Other physeal fracture of left metatarsal, subsequent encounter for fracture with delayed healing -S99192K Other physeal fracture of left metatarsal, subsequent encounter for fracture with nonunion -S99192P Other physeal fracture of left metatarsal, subsequent encounter for fracture with malunion -S99192S Other physeal fracture of left metatarsal, sequela -S99199A Other physeal fracture of unspecified metatarsal, initial encounter for closed fracture -S99199B Other physeal fracture of unspecified metatarsal, initial encounter for open fracture -S99199D Other physeal fracture of unspecified metatarsal, subsequent encounter for fracture with routine healing -S99199G Other physeal fracture of unspecified metatarsal, subsequent encounter for fracture with delayed healing -S99199K Other physeal fracture of unspecified metatarsal, subsequent encounter for fracture with nonunion -S99199P Other physeal fracture of unspecified metatarsal, subsequent encounter for fracture with malunion -S99199S Other physeal fracture of unspecified metatarsal, sequela -S99201A Unspecified physeal fracture of phalanx of right toe, initial encounter for closed fracture -S99201B Unspecified physeal fracture of phalanx of right toe, initial encounter for open fracture -S99201D Unspecified physeal fracture of phalanx of right toe, subsequent encounter for fracture with routine healing -S99201G Unspecified physeal fracture of phalanx of right toe, subsequent encounter for fracture with delayed healing -S99201K Unspecified physeal fracture of phalanx of right toe, subsequent encounter for fracture with nonunion -S99201P Unspecified physeal fracture of phalanx of right toe, subsequent encounter for fracture with malunion -S99201S Unspecified physeal fracture of phalanx of right toe, sequela -S99202A Unspecified physeal fracture of phalanx of left toe, initial encounter for closed fracture -S99202B Unspecified physeal fracture of phalanx of left toe, initial encounter for open fracture -S99202D Unspecified physeal fracture of phalanx of left toe, subsequent encounter for fracture with routine healing -S99202G Unspecified physeal fracture of phalanx of left toe, subsequent encounter for fracture with delayed healing -S99202K Unspecified physeal fracture of phalanx of left toe, subsequent encounter for fracture with nonunion -S99202P Unspecified physeal fracture of phalanx of left toe, subsequent encounter for fracture with malunion -S99202S Unspecified physeal fracture of phalanx of left toe, sequela -S99209A Unspecified physeal fracture of phalanx of unspecified toe, initial encounter for closed fracture -S99209B Unspecified physeal fracture of phalanx of unspecified toe, initial encounter for open fracture -S99209D Unspecified physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with routine healing -S99209G Unspecified physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with delayed healing -S99209K Unspecified physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with nonunion -S99209P Unspecified physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with malunion -S99209S Unspecified physeal fracture of phalanx of unspecified toe, sequela -S99211A Salter-Harris Type I physeal fracture of phalanx of right toe, initial encounter for closed fracture -S99211B Salter-Harris Type I physeal fracture of phalanx of right toe, initial encounter for open fracture -S99211D Salter-Harris Type I physeal fracture of phalanx of right toe, subsequent encounter for fracture with routine healing -S99211G Salter-Harris Type I physeal fracture of phalanx of right toe, subsequent encounter for fracture with delayed healing -S99211K Salter-Harris Type I physeal fracture of phalanx of right toe, subsequent encounter for fracture with nonunion -S99211P Salter-Harris Type I physeal fracture of phalanx of right toe, subsequent encounter for fracture with malunion -S99211S Salter-Harris Type I physeal fracture of phalanx of right toe, sequela -S99212A Salter-Harris Type I physeal fracture of phalanx of left toe, initial encounter for closed fracture -S99212B Salter-Harris Type I physeal fracture of phalanx of left toe, initial encounter for open fracture -S99212D Salter-Harris Type I physeal fracture of phalanx of left toe, subsequent encounter for fracture with routine healing -S99212G Salter-Harris Type I physeal fracture of phalanx of left toe, subsequent encounter for fracture with delayed healing -S99212K Salter-Harris Type I physeal fracture of phalanx of left toe, subsequent encounter for fracture with nonunion -S99212P Salter-Harris Type I physeal fracture of phalanx of left toe, subsequent encounter for fracture with malunion -S99212S Salter-Harris Type I physeal fracture of phalanx of left toe, sequela -S99219A Salter-Harris Type I physeal fracture of phalanx of unspecified toe, initial encounter for closed fracture -S99219B Salter-Harris Type I physeal fracture of phalanx of unspecified toe, initial encounter for open fracture -S99219D Salter-Harris Type I physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with routine healing -S99219G Salter-Harris Type I physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with delayed healing -S99219K Salter-Harris Type I physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with nonunion -S99219P Salter-Harris Type I physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with malunion -S99219S Salter-Harris Type I physeal fracture of phalanx of unspecified toe, sequela -S99221A Salter-Harris Type II physeal fracture of phalanx of right toe, initial encounter for closed fracture -S99221B Salter-Harris Type II physeal fracture of phalanx of right toe, initial encounter for open fracture -S99221D Salter-Harris Type II physeal fracture of phalanx of right toe, subsequent encounter for fracture with routine healing -S99221G Salter-Harris Type II physeal fracture of phalanx of right toe, subsequent encounter for fracture with delayed healing -S99221K Salter-Harris Type II physeal fracture of phalanx of right toe, subsequent encounter for fracture with nonunion -S99221P Salter-Harris Type II physeal fracture of phalanx of right toe, subsequent encounter for fracture with malunion -S99221S Salter-Harris Type II physeal fracture of phalanx of right toe, sequela -S99222A Salter-Harris Type II physeal fracture of phalanx of left toe, initial encounter for closed fracture -S99222B Salter-Harris Type II physeal fracture of phalanx of left toe, initial encounter for open fracture -S99222D Salter-Harris Type II physeal fracture of phalanx of left toe, subsequent encounter for fracture with routine healing -S99222G Salter-Harris Type II physeal fracture of phalanx of left toe, subsequent encounter for fracture with delayed healing -S99222K Salter-Harris Type II physeal fracture of phalanx of left toe, subsequent encounter for fracture with nonunion -S99222P Salter-Harris Type II physeal fracture of phalanx of left toe, subsequent encounter for fracture with malunion -S99222S Salter-Harris Type II physeal fracture of phalanx of left toe, sequela -S99229A Salter-Harris Type II physeal fracture of phalanx of unspecified toe, initial encounter for closed fracture -S99229B Salter-Harris Type II physeal fracture of phalanx of unspecified toe, initial encounter for open fracture -S99229D Salter-Harris Type II physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with routine healing -S99229G Salter-Harris Type II physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with delayed healing -S99229K Salter-Harris Type II physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with nonunion -S99229P Salter-Harris Type II physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with malunion -S99229S Salter-Harris Type II physeal fracture of phalanx of unspecified toe, sequela -S99231A Salter-Harris Type III physeal fracture of phalanx of right toe, initial encounter for closed fracture -S99231B Salter-Harris Type III physeal fracture of phalanx of right toe, initial encounter for open fracture -S99231D Salter-Harris Type III physeal fracture of phalanx of right toe, subsequent encounter for fracture with routine healing -S99231G Salter-Harris Type III physeal fracture of phalanx of right toe, subsequent encounter for fracture with delayed healing -S99231K Salter-Harris Type III physeal fracture of phalanx of right toe, subsequent encounter for fracture with nonunion -S99231P Salter-Harris Type III physeal fracture of phalanx of right toe, subsequent encounter for fracture with malunion -S99231S Salter-Harris Type III physeal fracture of phalanx of right toe, sequela -S99232A Salter-Harris Type III physeal fracture of phalanx of left toe, initial encounter for closed fracture -S99232B Salter-Harris Type III physeal fracture of phalanx of left toe, initial encounter for open fracture -S99232D Salter-Harris Type III physeal fracture of phalanx of left toe, subsequent encounter for fracture with routine healing -S99232G Salter-Harris Type III physeal fracture of phalanx of left toe, subsequent encounter for fracture with delayed healing -S99232K Salter-Harris Type III physeal fracture of phalanx of left toe, subsequent encounter for fracture with nonunion -S99232P Salter-Harris Type III physeal fracture of phalanx of left toe, subsequent encounter for fracture with malunion -S99232S Salter-Harris Type III physeal fracture of phalanx of left toe, sequela -S99239A Salter-Harris Type III physeal fracture of phalanx of unspecified toe, initial encounter for closed fracture -S99239B Salter-Harris Type III physeal fracture of phalanx of unspecified toe, initial encounter for open fracture -S99239D Salter-Harris Type III physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with routine healing -S99239G Salter-Harris Type III physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with delayed healing -S99239K Salter-Harris Type III physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with nonunion -S99239P Salter-Harris Type III physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with malunion -S99239S Salter-Harris Type III physeal fracture of phalanx of unspecified toe, sequela -S99241A Salter-Harris Type IV physeal fracture of phalanx of right toe, initial encounter for closed fracture -S99241B Salter-Harris Type IV physeal fracture of phalanx of right toe, initial encounter for open fracture -S99241D Salter-Harris Type IV physeal fracture of phalanx of right toe, subsequent encounter for fracture with routine healing -S99241G Salter-Harris Type IV physeal fracture of phalanx of right toe, subsequent encounter for fracture with delayed healing -S99241K Salter-Harris Type IV physeal fracture of phalanx of right toe, subsequent encounter for fracture with nonunion -S99241P Salter-Harris Type IV physeal fracture of phalanx of right toe, subsequent encounter for fracture with malunion -S99241S Salter-Harris Type IV physeal fracture of phalanx of right toe, sequela -S99242A Salter-Harris Type IV physeal fracture of phalanx of left toe, initial encounter for closed fracture -S99242B Salter-Harris Type IV physeal fracture of phalanx of left toe, initial encounter for open fracture -S99242D Salter-Harris Type IV physeal fracture of phalanx of left toe, subsequent encounter for fracture with routine healing -S99242G Salter-Harris Type IV physeal fracture of phalanx of left toe, subsequent encounter for fracture with delayed healing -S99242K Salter-Harris Type IV physeal fracture of phalanx of left toe, subsequent encounter for fracture with nonunion -S99242P Salter-Harris Type IV physeal fracture of phalanx of left toe, subsequent encounter for fracture with malunion -S99242S Salter-Harris Type IV physeal fracture of phalanx of left toe, sequela -S99249A Salter-Harris Type IV physeal fracture of phalanx of unspecified toe, initial encounter for closed fracture -S99249B Salter-Harris Type IV physeal fracture of phalanx of unspecified toe, initial encounter for open fracture -S99249D Salter-Harris Type IV physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with routine healing -S99249G Salter-Harris Type IV physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with delayed healing -S99249K Salter-Harris Type IV physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with nonunion -S99249P Salter-Harris Type IV physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with malunion -S99249S Salter-Harris Type IV physeal fracture of phalanx of unspecified toe, sequela -S99291A Other physeal fracture of phalanx of right toe, initial encounter for closed fracture -S99291B Other physeal fracture of phalanx of right toe, initial encounter for open fracture -S99291D Other physeal fracture of phalanx of right toe, subsequent encounter for fracture with routine healing -S99291G Other physeal fracture of phalanx of right toe, subsequent encounter for fracture with delayed healing -S99291K Other physeal fracture of phalanx of right toe, subsequent encounter for fracture with nonunion -S99291P Other physeal fracture of phalanx of right toe, subsequent encounter for fracture with malunion -S99291S Other physeal fracture of phalanx of right toe, sequela -S99292A Other physeal fracture of phalanx of left toe, initial encounter for closed fracture -S99292B Other physeal fracture of phalanx of left toe, initial encounter for open fracture -S99292D Other physeal fracture of phalanx of left toe, subsequent encounter for fracture with routine healing -S99292G Other physeal fracture of phalanx of left toe, subsequent encounter for fracture with delayed healing -S99292K Other physeal fracture of phalanx of left toe, subsequent encounter for fracture with nonunion -S99292P Other physeal fracture of phalanx of left toe, subsequent encounter for fracture with malunion -S99292S Other physeal fracture of phalanx of left toe, sequela -S99299A Other physeal fracture of phalanx of unspecified toe, initial encounter for closed fracture -S99299B Other physeal fracture of phalanx of unspecified toe, initial encounter for open fracture -S99299D Other physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with routine healing -S99299G Other physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with delayed healing -S99299K Other physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with nonunion -S99299P Other physeal fracture of phalanx of unspecified toe, subsequent encounter for fracture with malunion -S99299S Other physeal fracture of phalanx of unspecified toe, sequela -S99811A Other specified injuries of right ankle, initial encounter -S99811D Other specified injuries of right ankle, subsequent encounter -S99811S Other specified injuries of right ankle, sequela -S99812A Other specified injuries of left ankle, initial encounter -S99812D Other specified injuries of left ankle, subsequent encounter -S99812S Other specified injuries of left ankle, sequela -S99819A Other specified injuries of unspecified ankle, initial encounter -S99819D Other specified injuries of unspecified ankle, subsequent encounter -S99819S Other specified injuries of unspecified ankle, sequela -S99821A Other specified injuries of right foot, initial encounter -S99821D Other specified injuries of right foot, subsequent encounter -S99821S Other specified injuries of right foot, sequela -S99822A Other specified injuries of left foot, initial encounter -S99822D Other specified injuries of left foot, subsequent encounter -S99822S Other specified injuries of left foot, sequela -S99829A Other specified injuries of unspecified foot, initial encounter -S99829D Other specified injuries of unspecified foot, subsequent encounter -S99829S Other specified injuries of unspecified foot, sequela -S99911A Unspecified injury of right ankle, initial encounter -S99911D Unspecified injury of right ankle, subsequent encounter -S99911S Unspecified injury of right ankle, sequela -S99912A Unspecified injury of left ankle, initial encounter -S99912D Unspecified injury of left ankle, subsequent encounter -S99912S Unspecified injury of left ankle, sequela -S99919A Unspecified injury of unspecified ankle, initial encounter -S99919D Unspecified injury of unspecified ankle, subsequent encounter -S99919S Unspecified injury of unspecified ankle, sequela -S99921A Unspecified injury of right foot, initial encounter -S99921D Unspecified injury of right foot, subsequent encounter -S99921S Unspecified injury of right foot, sequela -S99922A Unspecified injury of left foot, initial encounter -S99922D Unspecified injury of left foot, subsequent encounter -S99922S Unspecified injury of left foot, sequela -S99929A Unspecified injury of unspecified foot, initial encounter -S99929D Unspecified injury of unspecified foot, subsequent encounter -S99929S Unspecified injury of unspecified foot, sequela -T07 Unspecified multiple injuries -T148 Other injury of unspecified body region -T1490 Injury, unspecified -T1491 Suicide attempt -T1500XA Foreign body in cornea, unspecified eye, initial encounter -T1500XD Foreign body in cornea, unspecified eye, subsequent encounter -T1500XS Foreign body in cornea, unspecified eye, sequela -T1501XA Foreign body in cornea, right eye, initial encounter -T1501XD Foreign body in cornea, right eye, subsequent encounter -T1501XS Foreign body in cornea, right eye, sequela -T1502XA Foreign body in cornea, left eye, initial encounter -T1502XD Foreign body in cornea, left eye, subsequent encounter -T1502XS Foreign body in cornea, left eye, sequela -T1510XA Foreign body in conjunctival sac, unspecified eye, initial encounter -T1510XD Foreign body in conjunctival sac, unspecified eye, subsequent encounter -T1510XS Foreign body in conjunctival sac, unspecified eye, sequela -T1511XA Foreign body in conjunctival sac, right eye, initial encounter -T1511XD Foreign body in conjunctival sac, right eye, subsequent encounter -T1511XS Foreign body in conjunctival sac, right eye, sequela -T1512XA Foreign body in conjunctival sac, left eye, initial encounter -T1512XD Foreign body in conjunctival sac, left eye, subsequent encounter -T1512XS Foreign body in conjunctival sac, left eye, sequela -T1580XA Foreign body in other and multiple parts of external eye, unspecified eye, initial encounter -T1580XD Foreign body in other and multiple parts of external eye, unspecified eye, subsequent encounter -T1580XS Foreign body in other and multiple parts of external eye, unspecified eye, sequela -T1581XA Foreign body in other and multiple parts of external eye, right eye, initial encounter -T1581XD Foreign body in other and multiple parts of external eye, right eye, subsequent encounter -T1581XS Foreign body in other and multiple parts of external eye, right eye, sequela -T1582XA Foreign body in other and multiple parts of external eye, left eye, initial encounter -T1582XD Foreign body in other and multiple parts of external eye, left eye, subsequent encounter -T1582XS Foreign body in other and multiple parts of external eye, left eye, sequela -T1590XA Foreign body on external eye, part unspecified, unspecified eye, initial encounter -T1590XD Foreign body on external eye, part unspecified, unspecified eye, subsequent encounter -T1590XS Foreign body on external eye, part unspecified, unspecified eye, sequela -T1591XA Foreign body on external eye, part unspecified, right eye, initial encounter -T1591XD Foreign body on external eye, part unspecified, right eye, subsequent encounter -T1591XS Foreign body on external eye, part unspecified, right eye, sequela -T1592XA Foreign body on external eye, part unspecified, left eye, initial encounter -T1592XD Foreign body on external eye, part unspecified, left eye, subsequent encounter -T1592XS Foreign body on external eye, part unspecified, left eye, sequela -T161XXA Foreign body in right ear, initial encounter -T161XXD Foreign body in right ear, subsequent encounter -T161XXS Foreign body in right ear, sequela -T162XXA Foreign body in left ear, initial encounter -T162XXD Foreign body in left ear, subsequent encounter -T162XXS Foreign body in left ear, sequela -T169XXA Foreign body in ear, unspecified ear, initial encounter -T169XXD Foreign body in ear, unspecified ear, subsequent encounter -T169XXS Foreign body in ear, unspecified ear, sequela -T170XXA Foreign body in nasal sinus, initial encounter -T170XXD Foreign body in nasal sinus, subsequent encounter -T170XXS Foreign body in nasal sinus, sequela -T171XXA Foreign body in nostril, initial encounter -T171XXD Foreign body in nostril, subsequent encounter -T171XXS Foreign body in nostril, sequela -T17200A Unspecified foreign body in pharynx causing asphyxiation, initial encounter -T17200D Unspecified foreign body in pharynx causing asphyxiation, subsequent encounter -T17200S Unspecified foreign body in pharynx causing asphyxiation, sequela -T17208A Unspecified foreign body in pharynx causing other injury, initial encounter -T17208D Unspecified foreign body in pharynx causing other injury, subsequent encounter -T17208S Unspecified foreign body in pharynx causing other injury, sequela -T17210A Gastric contents in pharynx causing asphyxiation, initial encounter -T17210D Gastric contents in pharynx causing asphyxiation, subsequent encounter -T17210S Gastric contents in pharynx causing asphyxiation, sequela -T17218A Gastric contents in pharynx causing other injury, initial encounter -T17218D Gastric contents in pharynx causing other injury, subsequent encounter -T17218S Gastric contents in pharynx causing other injury, sequela -T17220A Food in pharynx causing asphyxiation, initial encounter -T17220D Food in pharynx causing asphyxiation, subsequent encounter -T17220S Food in pharynx causing asphyxiation, sequela -T17228A Food in pharynx causing other injury, initial encounter -T17228D Food in pharynx causing other injury, subsequent encounter -T17228S Food in pharynx causing other injury, sequela -T17290A Other foreign object in pharynx causing asphyxiation, initial encounter -T17290D Other foreign object in pharynx causing asphyxiation, subsequent encounter -T17290S Other foreign object in pharynx causing asphyxiation, sequela -T17298A Other foreign object in pharynx causing other injury, initial encounter -T17298D Other foreign object in pharynx causing other injury, subsequent encounter -T17298S Other foreign object in pharynx causing other injury, sequela -T17300A Unspecified foreign body in larynx causing asphyxiation, initial encounter -T17300D Unspecified foreign body in larynx causing asphyxiation, subsequent encounter -T17300S Unspecified foreign body in larynx causing asphyxiation, sequela -T17308A Unspecified foreign body in larynx causing other injury, initial encounter -T17308D Unspecified foreign body in larynx causing other injury, subsequent encounter -T17308S Unspecified foreign body in larynx causing other injury, sequela -T17310A Gastric contents in larynx causing asphyxiation, initial encounter -T17310D Gastric contents in larynx causing asphyxiation, subsequent encounter -T17310S Gastric contents in larynx causing asphyxiation, sequela -T17318A Gastric contents in larynx causing other injury, initial encounter -T17318D Gastric contents in larynx causing other injury, subsequent encounter -T17318S Gastric contents in larynx causing other injury, sequela -T17320A Food in larynx causing asphyxiation, initial encounter -T17320D Food in larynx causing asphyxiation, subsequent encounter -T17320S Food in larynx causing asphyxiation, sequela -T17328A Food in larynx causing other injury, initial encounter -T17328D Food in larynx causing other injury, subsequent encounter -T17328S Food in larynx causing other injury, sequela -T17390A Other foreign object in larynx causing asphyxiation, initial encounter -T17390D Other foreign object in larynx causing asphyxiation, subsequent encounter -T17390S Other foreign object in larynx causing asphyxiation, sequela -T17398A Other foreign object in larynx causing other injury, initial encounter -T17398D Other foreign object in larynx causing other injury, subsequent encounter -T17398S Other foreign object in larynx causing other injury, sequela -T17400A Unspecified foreign body in trachea causing asphyxiation, initial encounter -T17400D Unspecified foreign body in trachea causing asphyxiation, subsequent encounter -T17400S Unspecified foreign body in trachea causing asphyxiation, sequela -T17408A Unspecified foreign body in trachea causing other injury, initial encounter -T17408D Unspecified foreign body in trachea causing other injury, subsequent encounter -T17408S Unspecified foreign body in trachea causing other injury, sequela -T17410A Gastric contents in trachea causing asphyxiation, initial encounter -T17410D Gastric contents in trachea causing asphyxiation, subsequent encounter -T17410S Gastric contents in trachea causing asphyxiation, sequela -T17418A Gastric contents in trachea causing other injury, initial encounter -T17418D Gastric contents in trachea causing other injury, subsequent encounter -T17418S Gastric contents in trachea causing other injury, sequela -T17420A Food in trachea causing asphyxiation, initial encounter -T17420D Food in trachea causing asphyxiation, subsequent encounter -T17420S Food in trachea causing asphyxiation, sequela -T17428A Food in trachea causing other injury, initial encounter -T17428D Food in trachea causing other injury, subsequent encounter -T17428S Food in trachea causing other injury, sequela -T17490A Other foreign object in trachea causing asphyxiation, initial encounter -T17490D Other foreign object in trachea causing asphyxiation, subsequent encounter -T17490S Other foreign object in trachea causing asphyxiation, sequela -T17498A Other foreign object in trachea causing other injury, initial encounter -T17498D Other foreign object in trachea causing other injury, subsequent encounter -T17498S Other foreign object in trachea causing other injury, sequela -T17500A Unspecified foreign body in bronchus causing asphyxiation, initial encounter -T17500D Unspecified foreign body in bronchus causing asphyxiation, subsequent encounter -T17500S Unspecified foreign body in bronchus causing asphyxiation, sequela -T17508A Unspecified foreign body in bronchus causing other injury, initial encounter -T17508D Unspecified foreign body in bronchus causing other injury, subsequent encounter -T17508S Unspecified foreign body in bronchus causing other injury, sequela -T17510A Gastric contents in bronchus causing asphyxiation, initial encounter -T17510D Gastric contents in bronchus causing asphyxiation, subsequent encounter -T17510S Gastric contents in bronchus causing asphyxiation, sequela -T17518A Gastric contents in bronchus causing other injury, initial encounter -T17518D Gastric contents in bronchus causing other injury, subsequent encounter -T17518S Gastric contents in bronchus causing other injury, sequela -T17520A Food in bronchus causing asphyxiation, initial encounter -T17520D Food in bronchus causing asphyxiation, subsequent encounter -T17520S Food in bronchus causing asphyxiation, sequela -T17528A Food in bronchus causing other injury, initial encounter -T17528D Food in bronchus causing other injury, subsequent encounter -T17528S Food in bronchus causing other injury, sequela -T17590A Other foreign object in bronchus causing asphyxiation, initial encounter -T17590D Other foreign object in bronchus causing asphyxiation, subsequent encounter -T17590S Other foreign object in bronchus causing asphyxiation, sequela -T17598A Other foreign object in bronchus causing other injury, initial encounter -T17598D Other foreign object in bronchus causing other injury, subsequent encounter -T17598S Other foreign object in bronchus causing other injury, sequela -T17800A Unspecified foreign body in other parts of respiratory tract causing asphyxiation, initial encounter -T17800D Unspecified foreign body in other parts of respiratory tract causing asphyxiation, subsequent encounter -T17800S Unspecified foreign body in other parts of respiratory tract causing asphyxiation, sequela -T17808A Unspecified foreign body in other parts of respiratory tract causing other injury, initial encounter -T17808D Unspecified foreign body in other parts of respiratory tract causing other injury, subsequent encounter -T17808S Unspecified foreign body in other parts of respiratory tract causing other injury, sequela -T17810A Gastric contents in other parts of respiratory tract causing asphyxiation, initial encounter -T17810D Gastric contents in other parts of respiratory tract causing asphyxiation, subsequent encounter -T17810S Gastric contents in other parts of respiratory tract causing asphyxiation, sequela -T17818A Gastric contents in other parts of respiratory tract causing other injury, initial encounter -T17818D Gastric contents in other parts of respiratory tract causing other injury, subsequent encounter -T17818S Gastric contents in other parts of respiratory tract causing other injury, sequela -T17820A Food in other parts of respiratory tract causing asphyxiation, initial encounter -T17820D Food in other parts of respiratory tract causing asphyxiation, subsequent encounter -T17820S Food in other parts of respiratory tract causing asphyxiation, sequela -T17828A Food in other parts of respiratory tract causing other injury, initial encounter -T17828D Food in other parts of respiratory tract causing other injury, subsequent encounter -T17828S Food in other parts of respiratory tract causing other injury, sequela -T17890A Other foreign object in other parts of respiratory tract causing asphyxiation, initial encounter -T17890D Other foreign object in other parts of respiratory tract causing asphyxiation, subsequent encounter -T17890S Other foreign object in other parts of respiratory tract causing asphyxiation, sequela -T17898A Other foreign object in other parts of respiratory tract causing other injury, initial encounter -T17898D Other foreign object in other parts of respiratory tract causing other injury, subsequent encounter -T17898S Other foreign object in other parts of respiratory tract causing other injury, sequela -T17900A Unspecified foreign body in respiratory tract, part unspecified causing asphyxiation, initial encounter -T17900D Unspecified foreign body in respiratory tract, part unspecified causing asphyxiation, subsequent encounter -T17900S Unspecified foreign body in respiratory tract, part unspecified causing asphyxiation, sequela -T17908A Unspecified foreign body in respiratory tract, part unspecified causing other injury, initial encounter -T17908D Unspecified foreign body in respiratory tract, part unspecified causing other injury, subsequent encounter -T17908S Unspecified foreign body in respiratory tract, part unspecified causing other injury, sequela -T17910A Gastric contents in respiratory tract, part unspecified causing asphyxiation, initial encounter -T17910D Gastric contents in respiratory tract, part unspecified causing asphyxiation, subsequent encounter -T17910S Gastric contents in respiratory tract, part unspecified causing asphyxiation, sequela -T17918A Gastric contents in respiratory tract, part unspecified causing other injury, initial encounter -T17918D Gastric contents in respiratory tract, part unspecified causing other injury, subsequent encounter -T17918S Gastric contents in respiratory tract, part unspecified causing other injury, sequela -T17920A Food in respiratory tract, part unspecified causing asphyxiation, initial encounter -T17920D Food in respiratory tract, part unspecified causing asphyxiation, subsequent encounter -T17920S Food in respiratory tract, part unspecified causing asphyxiation, sequela -T17928A Food in respiratory tract, part unspecified causing other injury, initial encounter -T17928D Food in respiratory tract, part unspecified causing other injury, subsequent encounter -T17928S Food in respiratory tract, part unspecified causing other injury, sequela -T17990A Other foreign object in respiratory tract, part unspecified in causing asphyxiation, initial encounter -T17990D Other foreign object in respiratory tract, part unspecified in causing asphyxiation, subsequent encounter -T17990S Other foreign object in respiratory tract, part unspecified in causing asphyxiation, sequela -T17998A Other foreign object in respiratory tract, part unspecified causing other injury, initial encounter -T17998D Other foreign object in respiratory tract, part unspecified causing other injury, subsequent encounter -T17998S Other foreign object in respiratory tract, part unspecified causing other injury, sequela -T180XXA Foreign body in mouth, initial encounter -T180XXD Foreign body in mouth, subsequent encounter -T180XXS Foreign body in mouth, sequela -T18100A Unspecified foreign body in esophagus causing compression of trachea, initial encounter -T18100D Unspecified foreign body in esophagus causing compression of trachea, subsequent encounter -T18100S Unspecified foreign body in esophagus causing compression of trachea, sequela -T18108A Unspecified foreign body in esophagus causing other injury, initial encounter -T18108D Unspecified foreign body in esophagus causing other injury, subsequent encounter -T18108S Unspecified foreign body in esophagus causing other injury, sequela -T18110A Gastric contents in esophagus causing compression of trachea, initial encounter -T18110D Gastric contents in esophagus causing compression of trachea, subsequent encounter -T18110S Gastric contents in esophagus causing compression of trachea, sequela -T18118A Gastric contents in esophagus causing other injury, initial encounter -T18118D Gastric contents in esophagus causing other injury, subsequent encounter -T18118S Gastric contents in esophagus causing other injury, sequela -T18120A Food in esophagus causing compression of trachea, initial encounter -T18120D Food in esophagus causing compression of trachea, subsequent encounter -T18120S Food in esophagus causing compression of trachea, sequela -T18128A Food in esophagus causing other injury, initial encounter -T18128D Food in esophagus causing other injury, subsequent encounter -T18128S Food in esophagus causing other injury, sequela -T18190A Other foreign object in esophagus causing compression of trachea, initial encounter -T18190D Other foreign object in esophagus causing compression of trachea, subsequent encounter -T18190S Other foreign object in esophagus causing compression of trachea, sequela -T18198A Other foreign object in esophagus causing other injury, initial encounter -T18198D Other foreign object in esophagus causing other injury, subsequent encounter -T18198S Other foreign object in esophagus causing other injury, sequela -T182XXA Foreign body in stomach, initial encounter -T182XXD Foreign body in stomach, subsequent encounter -T182XXS Foreign body in stomach, sequela -T183XXA Foreign body in small intestine, initial encounter -T183XXD Foreign body in small intestine, subsequent encounter -T183XXS Foreign body in small intestine, sequela -T184XXA Foreign body in colon, initial encounter -T184XXD Foreign body in colon, subsequent encounter -T184XXS Foreign body in colon, sequela -T185XXA Foreign body in anus and rectum, initial encounter -T185XXD Foreign body in anus and rectum, subsequent encounter -T185XXS Foreign body in anus and rectum, sequela -T188XXA Foreign body in other parts of alimentary tract, initial encounter -T188XXD Foreign body in other parts of alimentary tract, subsequent encounter -T188XXS Foreign body in other parts of alimentary tract, sequela -T189XXA Foreign body of alimentary tract, part unspecified, initial encounter -T189XXD Foreign body of alimentary tract, part unspecified, subsequent encounter -T189XXS Foreign body of alimentary tract, part unspecified, sequela -T190XXA Foreign body in urethra, initial encounter -T190XXD Foreign body in urethra, subsequent encounter -T190XXS Foreign body in urethra, sequela -T191XXA Foreign body in bladder, initial encounter -T191XXD Foreign body in bladder, subsequent encounter -T191XXS Foreign body in bladder, sequela -T192XXA Foreign body in vulva and vagina, initial encounter -T192XXD Foreign body in vulva and vagina, subsequent encounter -T192XXS Foreign body in vulva and vagina, sequela -T193XXA Foreign body in uterus, initial encounter -T193XXD Foreign body in uterus, subsequent encounter -T193XXS Foreign body in uterus, sequela -T194XXA Foreign body in penis, initial encounter -T194XXD Foreign body in penis, subsequent encounter -T194XXS Foreign body in penis, sequela -T198XXA Foreign body in other parts of genitourinary tract, initial encounter -T198XXD Foreign body in other parts of genitourinary tract, subsequent encounter -T198XXS Foreign body in other parts of genitourinary tract, sequela -T199XXA Foreign body in genitourinary tract, part unspecified, initial encounter -T199XXD Foreign body in genitourinary tract, part unspecified, subsequent encounter -T199XXS Foreign body in genitourinary tract, part unspecified, sequela -T2000XA Burn of unspecified degree of head, face, and neck, unspecified site, initial encounter -T2000XD Burn of unspecified degree of head, face, and neck, unspecified site, subsequent encounter -T2000XS Burn of unspecified degree of head, face, and neck, unspecified site, sequela -T20011A Burn of unspecified degree of right ear [any part, except ear drum], initial encounter -T20011D Burn of unspecified degree of right ear [any part, except ear drum], subsequent encounter -T20011S Burn of unspecified degree of right ear [any part, except ear drum], sequela -T20012A Burn of unspecified degree of left ear [any part, except ear drum], initial encounter -T20012D Burn of unspecified degree of left ear [any part, except ear drum], subsequent encounter -T20012S Burn of unspecified degree of left ear [any part, except ear drum], sequela -T20019A Burn of unspecified degree of unspecified ear [any part, except ear drum], initial encounter -T20019D Burn of unspecified degree of unspecified ear [any part, except ear drum], subsequent encounter -T20019S Burn of unspecified degree of unspecified ear [any part, except ear drum], sequela -T2002XA Burn of unspecified degree of lip(s), initial encounter -T2002XD Burn of unspecified degree of lip(s), subsequent encounter -T2002XS Burn of unspecified degree of lip(s), sequela -T2003XA Burn of unspecified degree of chin, initial encounter -T2003XD Burn of unspecified degree of chin, subsequent encounter -T2003XS Burn of unspecified degree of chin, sequela -T2004XA Burn of unspecified degree of nose (septum), initial encounter -T2004XD Burn of unspecified degree of nose (septum), subsequent encounter -T2004XS Burn of unspecified degree of nose (septum), sequela -T2005XA Burn of unspecified degree of scalp [any part], initial encounter -T2005XD Burn of unspecified degree of scalp [any part], subsequent encounter -T2005XS Burn of unspecified degree of scalp [any part], sequela -T2006XA Burn of unspecified degree of forehead and cheek, initial encounter -T2006XD Burn of unspecified degree of forehead and cheek, subsequent encounter -T2006XS Burn of unspecified degree of forehead and cheek, sequela -T2007XA Burn of unspecified degree of neck, initial encounter -T2007XD Burn of unspecified degree of neck, subsequent encounter -T2007XS Burn of unspecified degree of neck, sequela -T2009XA Burn of unspecified degree of multiple sites of head, face, and neck, initial encounter -T2009XD Burn of unspecified degree of multiple sites of head, face, and neck, subsequent encounter -T2009XS Burn of unspecified degree of multiple sites of head, face, and neck, sequela -T2010XA Burn of first degree of head, face, and neck, unspecified site, initial encounter -T2010XD Burn of first degree of head, face, and neck, unspecified site, subsequent encounter -T2010XS Burn of first degree of head, face, and neck, unspecified site, sequela -T20111A Burn of first degree of right ear [any part, except ear drum], initial encounter -T20111D Burn of first degree of right ear [any part, except ear drum], subsequent encounter -T20111S Burn of first degree of right ear [any part, except ear drum], sequela -T20112A Burn of first degree of left ear [any part, except ear drum], initial encounter -T20112D Burn of first degree of left ear [any part, except ear drum], subsequent encounter -T20112S Burn of first degree of left ear [any part, except ear drum], sequela -T20119A Burn of first degree of unspecified ear [any part, except ear drum], initial encounter -T20119D Burn of first degree of unspecified ear [any part, except ear drum], subsequent encounter -T20119S Burn of first degree of unspecified ear [any part, except ear drum], sequela -T2012XA Burn of first degree of lip(s), initial encounter -T2012XD Burn of first degree of lip(s), subsequent encounter -T2012XS Burn of first degree of lip(s), sequela -T2013XA Burn of first degree of chin, initial encounter -T2013XD Burn of first degree of chin, subsequent encounter -T2013XS Burn of first degree of chin, sequela -T2014XA Burn of first degree of nose (septum), initial encounter -T2014XD Burn of first degree of nose (septum), subsequent encounter -T2014XS Burn of first degree of nose (septum), sequela -T2015XA Burn of first degree of scalp [any part], initial encounter -T2015XD Burn of first degree of scalp [any part], subsequent encounter -T2015XS Burn of first degree of scalp [any part], sequela -T2016XA Burn of first degree of forehead and cheek, initial encounter -T2016XD Burn of first degree of forehead and cheek, subsequent encounter -T2016XS Burn of first degree of forehead and cheek, sequela -T2017XA Burn of first degree of neck, initial encounter -T2017XD Burn of first degree of neck, subsequent encounter -T2017XS Burn of first degree of neck, sequela -T2019XA Burn of first degree of multiple sites of head, face, and neck, initial encounter -T2019XD Burn of first degree of multiple sites of head, face, and neck, subsequent encounter -T2019XS Burn of first degree of multiple sites of head, face, and neck, sequela -T2020XA Burn of second degree of head, face, and neck, unspecified site, initial encounter -T2020XD Burn of second degree of head, face, and neck, unspecified site, subsequent encounter -T2020XS Burn of second degree of head, face, and neck, unspecified site, sequela -T20211A Burn of second degree of right ear [any part, except ear drum], initial encounter -T20211D Burn of second degree of right ear [any part, except ear drum], subsequent encounter -T20211S Burn of second degree of right ear [any part, except ear drum], sequela -T20212A Burn of second degree of left ear [any part, except ear drum], initial encounter -T20212D Burn of second degree of left ear [any part, except ear drum], subsequent encounter -T20212S Burn of second degree of left ear [any part, except ear drum], sequela -T20219A Burn of second degree of unspecified ear [any part, except ear drum], initial encounter -T20219D Burn of second degree of unspecified ear [any part, except ear drum], subsequent encounter -T20219S Burn of second degree of unspecified ear [any part, except ear drum], sequela -T2022XA Burn of second degree of lip(s), initial encounter -T2022XD Burn of second degree of lip(s), subsequent encounter -T2022XS Burn of second degree of lip(s), sequela -T2023XA Burn of second degree of chin, initial encounter -T2023XD Burn of second degree of chin, subsequent encounter -T2023XS Burn of second degree of chin, sequela -T2024XA Burn of second degree of nose (septum), initial encounter -T2024XD Burn of second degree of nose (septum), subsequent encounter -T2024XS Burn of second degree of nose (septum), sequela -T2025XA Burn of second degree of scalp [any part], initial encounter -T2025XD Burn of second degree of scalp [any part], subsequent encounter -T2025XS Burn of second degree of scalp [any part], sequela -T2026XA Burn of second degree of forehead and cheek, initial encounter -T2026XD Burn of second degree of forehead and cheek, subsequent encounter -T2026XS Burn of second degree of forehead and cheek, sequela -T2027XA Burn of second degree of neck, initial encounter -T2027XD Burn of second degree of neck, subsequent encounter -T2027XS Burn of second degree of neck, sequela -T2029XA Burn of second degree of multiple sites of head, face, and neck, initial encounter -T2029XD Burn of second degree of multiple sites of head, face, and neck, subsequent encounter -T2029XS Burn of second degree of multiple sites of head, face, and neck, sequela -T2030XA Burn of third degree of head, face, and neck, unspecified site, initial encounter -T2030XD Burn of third degree of head, face, and neck, unspecified site, subsequent encounter -T2030XS Burn of third degree of head, face, and neck, unspecified site, sequela -T20311A Burn of third degree of right ear [any part, except ear drum], initial encounter -T20311D Burn of third degree of right ear [any part, except ear drum], subsequent encounter -T20311S Burn of third degree of right ear [any part, except ear drum], sequela -T20312A Burn of third degree of left ear [any part, except ear drum], initial encounter -T20312D Burn of third degree of left ear [any part, except ear drum], subsequent encounter -T20312S Burn of third degree of left ear [any part, except ear drum], sequela -T20319A Burn of third degree of unspecified ear [any part, except ear drum], initial encounter -T20319D Burn of third degree of unspecified ear [any part, except ear drum], subsequent encounter -T20319S Burn of third degree of unspecified ear [any part, except ear drum], sequela -T2032XA Burn of third degree of lip(s), initial encounter -T2032XD Burn of third degree of lip(s), subsequent encounter -T2032XS Burn of third degree of lip(s), sequela -T2033XA Burn of third degree of chin, initial encounter -T2033XD Burn of third degree of chin, subsequent encounter -T2033XS Burn of third degree of chin, sequela -T2034XA Burn of third degree of nose (septum), initial encounter -T2034XD Burn of third degree of nose (septum), subsequent encounter -T2034XS Burn of third degree of nose (septum), sequela -T2035XA Burn of third degree of scalp [any part], initial encounter -T2035XD Burn of third degree of scalp [any part], subsequent encounter -T2035XS Burn of third degree of scalp [any part], sequela -T2036XA Burn of third degree of forehead and cheek, initial encounter -T2036XD Burn of third degree of forehead and cheek, subsequent encounter -T2036XS Burn of third degree of forehead and cheek, sequela -T2037XA Burn of third degree of neck, initial encounter -T2037XD Burn of third degree of neck, subsequent encounter -T2037XS Burn of third degree of neck, sequela -T2039XA Burn of third degree of multiple sites of head, face, and neck, initial encounter -T2039XD Burn of third degree of multiple sites of head, face, and neck, subsequent encounter -T2039XS Burn of third degree of multiple sites of head, face, and neck, sequela -T2040XA Corrosion of unspecified degree of head, face, and neck, unspecified site, initial encounter -T2040XD Corrosion of unspecified degree of head, face, and neck, unspecified site, subsequent encounter -T2040XS Corrosion of unspecified degree of head, face, and neck, unspecified site, sequela -T20411A Corrosion of unspecified degree of right ear [any part, except ear drum], initial encounter -T20411D Corrosion of unspecified degree of right ear [any part, except ear drum], subsequent encounter -T20411S Corrosion of unspecified degree of right ear [any part, except ear drum], sequela -T20412A Corrosion of unspecified degree of left ear [any part, except ear drum], initial encounter -T20412D Corrosion of unspecified degree of left ear [any part, except ear drum], subsequent encounter -T20412S Corrosion of unspecified degree of left ear [any part, except ear drum], sequela -T20419A Corrosion of unspecified degree of unspecified ear [any part, except ear drum], initial encounter -T20419D Corrosion of unspecified degree of unspecified ear [any part, except ear drum], subsequent encounter -T20419S Corrosion of unspecified degree of unspecified ear [any part, except ear drum], sequela -T2042XA Corrosion of unspecified degree of lip(s), initial encounter -T2042XD Corrosion of unspecified degree of lip(s), subsequent encounter -T2042XS Corrosion of unspecified degree of lip(s), sequela -T2043XA Corrosion of unspecified degree of chin, initial encounter -T2043XD Corrosion of unspecified degree of chin, subsequent encounter -T2043XS Corrosion of unspecified degree of chin, sequela -T2044XA Corrosion of unspecified degree of nose (septum), initial encounter -T2044XD Corrosion of unspecified degree of nose (septum), subsequent encounter -T2044XS Corrosion of unspecified degree of nose (septum), sequela -T2045XA Corrosion of unspecified degree of scalp [any part], initial encounter -T2045XD Corrosion of unspecified degree of scalp [any part], subsequent encounter -T2045XS Corrosion of unspecified degree of scalp [any part], sequela -T2046XA Corrosion of unspecified degree of forehead and cheek, initial encounter -T2046XD Corrosion of unspecified degree of forehead and cheek, subsequent encounter -T2046XS Corrosion of unspecified degree of forehead and cheek, sequela -T2047XA Corrosion of unspecified degree of neck, initial encounter -T2047XD Corrosion of unspecified degree of neck, subsequent encounter -T2047XS Corrosion of unspecified degree of neck, sequela -T2049XA Corrosion of unspecified degree of multiple sites of head, face, and neck, initial encounter -T2049XD Corrosion of unspecified degree of multiple sites of head, face, and neck, subsequent encounter -T2049XS Corrosion of unspecified degree of multiple sites of head, face, and neck, sequela -T2050XA Corrosion of first degree of head, face, and neck, unspecified site, initial encounter -T2050XD Corrosion of first degree of head, face, and neck, unspecified site, subsequent encounter -T2050XS Corrosion of first degree of head, face, and neck, unspecified site, sequela -T20511A Corrosion of first degree of right ear [any part, except ear drum], initial encounter -T20511D Corrosion of first degree of right ear [any part, except ear drum], subsequent encounter -T20511S Corrosion of first degree of right ear [any part, except ear drum], sequela -T20512A Corrosion of first degree of left ear [any part, except ear drum], initial encounter -T20512D Corrosion of first degree of left ear [any part, except ear drum], subsequent encounter -T20512S Corrosion of first degree of left ear [any part, except ear drum], sequela -T20519A Corrosion of first degree of unspecified ear [any part, except ear drum], initial encounter -T20519D Corrosion of first degree of unspecified ear [any part, except ear drum], subsequent encounter -T20519S Corrosion of first degree of unspecified ear [any part, except ear drum], sequela -T2052XA Corrosion of first degree of lip(s), initial encounter -T2052XD Corrosion of first degree of lip(s), subsequent encounter -T2052XS Corrosion of first degree of lip(s), sequela -T2053XA Corrosion of first degree of chin, initial encounter -T2053XD Corrosion of first degree of chin, subsequent encounter -T2053XS Corrosion of first degree of chin, sequela -T2054XA Corrosion of first degree of nose (septum), initial encounter -T2054XD Corrosion of first degree of nose (septum), subsequent encounter -T2054XS Corrosion of first degree of nose (septum), sequela -T2055XA Corrosion of first degree of scalp [any part], initial encounter -T2055XD Corrosion of first degree of scalp [any part], subsequent encounter -T2055XS Corrosion of first degree of scalp [any part], sequela -T2056XA Corrosion of first degree of forehead and cheek, initial encounter -T2056XD Corrosion of first degree of forehead and cheek, subsequent encounter -T2056XS Corrosion of first degree of forehead and cheek, sequela -T2057XA Corrosion of first degree of neck, initial encounter -T2057XD Corrosion of first degree of neck, subsequent encounter -T2057XS Corrosion of first degree of neck, sequela -T2059XA Corrosion of first degree of multiple sites of head, face, and neck, initial encounter -T2059XD Corrosion of first degree of multiple sites of head, face, and neck, subsequent encounter -T2059XS Corrosion of first degree of multiple sites of head, face, and neck, sequela -T2060XA Corrosion of second degree of head, face, and neck, unspecified site, initial encounter -T2060XD Corrosion of second degree of head, face, and neck, unspecified site, subsequent encounter -T2060XS Corrosion of second degree of head, face, and neck, unspecified site, sequela -T20611A Corrosion of second degree of right ear [any part, except ear drum], initial encounter -T20611D Corrosion of second degree of right ear [any part, except ear drum], subsequent encounter -T20611S Corrosion of second degree of right ear [any part, except ear drum], sequela -T20612A Corrosion of second degree of left ear [any part, except ear drum], initial encounter -T20612D Corrosion of second degree of left ear [any part, except ear drum], subsequent encounter -T20612S Corrosion of second degree of left ear [any part, except ear drum], sequela -T20619A Corrosion of second degree of unspecified ear [any part, except ear drum], initial encounter -T20619D Corrosion of second degree of unspecified ear [any part, except ear drum], subsequent encounter -T20619S Corrosion of second degree of unspecified ear [any part, except ear drum], sequela -T2062XA Corrosion of second degree of lip(s), initial encounter -T2062XD Corrosion of second degree of lip(s), subsequent encounter -T2062XS Corrosion of second degree of lip(s), sequela -T2063XA Corrosion of second degree of chin, initial encounter -T2063XD Corrosion of second degree of chin, subsequent encounter -T2063XS Corrosion of second degree of chin, sequela -T2064XA Corrosion of second degree of nose (septum), initial encounter -T2064XD Corrosion of second degree of nose (septum), subsequent encounter -T2064XS Corrosion of second degree of nose (septum), sequela -T2065XA Corrosion of second degree of scalp [any part], initial encounter -T2065XD Corrosion of second degree of scalp [any part], subsequent encounter -T2065XS Corrosion of second degree of scalp [any part], sequela -T2066XA Corrosion of second degree of forehead and cheek, initial encounter -T2066XD Corrosion of second degree of forehead and cheek, subsequent encounter -T2066XS Corrosion of second degree of forehead and cheek, sequela -T2067XA Corrosion of second degree of neck, initial encounter -T2067XD Corrosion of second degree of neck, subsequent encounter -T2067XS Corrosion of second degree of neck, sequela -T2069XA Corrosion of second degree of multiple sites of head, face, and neck, initial encounter -T2069XD Corrosion of second degree of multiple sites of head, face, and neck, subsequent encounter -T2069XS Corrosion of second degree of multiple sites of head, face, and neck, sequela -T2070XA Corrosion of third degree of head, face, and neck, unspecified site, initial encounter -T2070XD Corrosion of third degree of head, face, and neck, unspecified site, subsequent encounter -T2070XS Corrosion of third degree of head, face, and neck, unspecified site, sequela -T20711A Corrosion of third degree of right ear [any part, except ear drum], initial encounter -T20711D Corrosion of third degree of right ear [any part, except ear drum], subsequent encounter -T20711S Corrosion of third degree of right ear [any part, except ear drum], sequela -T20712A Corrosion of third degree of left ear [any part, except ear drum], initial encounter -T20712D Corrosion of third degree of left ear [any part, except ear drum], subsequent encounter -T20712S Corrosion of third degree of left ear [any part, except ear drum], sequela -T20719A Corrosion of third degree of unspecified ear [any part, except ear drum], initial encounter -T20719D Corrosion of third degree of unspecified ear [any part, except ear drum], subsequent encounter -T20719S Corrosion of third degree of unspecified ear [any part, except ear drum], sequela -T2072XA Corrosion of third degree of lip(s), initial encounter -T2072XD Corrosion of third degree of lip(s), subsequent encounter -T2072XS Corrosion of third degree of lip(s), sequela -T2073XA Corrosion of third degree of chin, initial encounter -T2073XD Corrosion of third degree of chin, subsequent encounter -T2073XS Corrosion of third degree of chin, sequela -T2074XA Corrosion of third degree of nose (septum), initial encounter -T2074XD Corrosion of third degree of nose (septum), subsequent encounter -T2074XS Corrosion of third degree of nose (septum), sequela -T2075XA Corrosion of third degree of scalp [any part], initial encounter -T2075XD Corrosion of third degree of scalp [any part], subsequent encounter -T2075XS Corrosion of third degree of scalp [any part], sequela -T2076XA Corrosion of third degree of forehead and cheek, initial encounter -T2076XD Corrosion of third degree of forehead and cheek, subsequent encounter -T2076XS Corrosion of third degree of forehead and cheek, sequela -T2077XA Corrosion of third degree of neck, initial encounter -T2077XD Corrosion of third degree of neck, subsequent encounter -T2077XS Corrosion of third degree of neck, sequela -T2079XA Corrosion of third degree of multiple sites of head, face, and neck, initial encounter -T2079XD Corrosion of third degree of multiple sites of head, face, and neck, subsequent encounter -T2079XS Corrosion of third degree of multiple sites of head, face, and neck, sequela -T2100XA Burn of unspecified degree of trunk, unspecified site, initial encounter -T2100XD Burn of unspecified degree of trunk, unspecified site, subsequent encounter -T2100XS Burn of unspecified degree of trunk, unspecified site, sequela -T2101XA Burn of unspecified degree of chest wall, initial encounter -T2101XD Burn of unspecified degree of chest wall, subsequent encounter -T2101XS Burn of unspecified degree of chest wall, sequela -T2102XA Burn of unspecified degree of abdominal wall, initial encounter -T2102XD Burn of unspecified degree of abdominal wall, subsequent encounter -T2102XS Burn of unspecified degree of abdominal wall, sequela -T2103XA Burn of unspecified degree of upper back, initial encounter -T2103XD Burn of unspecified degree of upper back, subsequent encounter -T2103XS Burn of unspecified degree of upper back, sequela -T2104XA Burn of unspecified degree of lower back, initial encounter -T2104XD Burn of unspecified degree of lower back, subsequent encounter -T2104XS Burn of unspecified degree of lower back, sequela -T2105XA Burn of unspecified degree of buttock, initial encounter -T2105XD Burn of unspecified degree of buttock, subsequent encounter -T2105XS Burn of unspecified degree of buttock, sequela -T2106XA Burn of unspecified degree of male genital region, initial encounter -T2106XD Burn of unspecified degree of male genital region, subsequent encounter -T2106XS Burn of unspecified degree of male genital region, sequela -T2107XA Burn of unspecified degree of female genital region, initial encounter -T2107XD Burn of unspecified degree of female genital region, subsequent encounter -T2107XS Burn of unspecified degree of female genital region, sequela -T2109XA Burn of unspecified degree of other site of trunk, initial encounter -T2109XD Burn of unspecified degree of other site of trunk, subsequent encounter -T2109XS Burn of unspecified degree of other site of trunk, sequela -T2110XA Burn of first degree of trunk, unspecified site, initial encounter -T2110XD Burn of first degree of trunk, unspecified site, subsequent encounter -T2110XS Burn of first degree of trunk, unspecified site, sequela -T2111XA Burn of first degree of chest wall, initial encounter -T2111XD Burn of first degree of chest wall, subsequent encounter -T2111XS Burn of first degree of chest wall, sequela -T2112XA Burn of first degree of abdominal wall, initial encounter -T2112XD Burn of first degree of abdominal wall, subsequent encounter -T2112XS Burn of first degree of abdominal wall, sequela -T2113XA Burn of first degree of upper back, initial encounter -T2113XD Burn of first degree of upper back, subsequent encounter -T2113XS Burn of first degree of upper back, sequela -T2114XA Burn of first degree of lower back, initial encounter -T2114XD Burn of first degree of lower back, subsequent encounter -T2114XS Burn of first degree of lower back, sequela -T2115XA Burn of first degree of buttock, initial encounter -T2115XD Burn of first degree of buttock, subsequent encounter -T2115XS Burn of first degree of buttock, sequela -T2116XA Burn of first degree of male genital region, initial encounter -T2116XD Burn of first degree of male genital region, subsequent encounter -T2116XS Burn of first degree of male genital region, sequela -T2117XA Burn of first degree of female genital region, initial encounter -T2117XD Burn of first degree of female genital region, subsequent encounter -T2117XS Burn of first degree of female genital region, sequela -T2119XA Burn of first degree of other site of trunk, initial encounter -T2119XD Burn of first degree of other site of trunk, subsequent encounter -T2119XS Burn of first degree of other site of trunk, sequela -T2120XA Burn of second degree of trunk, unspecified site, initial encounter -T2120XD Burn of second degree of trunk, unspecified site, subsequent encounter -T2120XS Burn of second degree of trunk, unspecified site, sequela -T2121XA Burn of second degree of chest wall, initial encounter -T2121XD Burn of second degree of chest wall, subsequent encounter -T2121XS Burn of second degree of chest wall, sequela -T2122XA Burn of second degree of abdominal wall, initial encounter -T2122XD Burn of second degree of abdominal wall, subsequent encounter -T2122XS Burn of second degree of abdominal wall, sequela -T2123XA Burn of second degree of upper back, initial encounter -T2123XD Burn of second degree of upper back, subsequent encounter -T2123XS Burn of second degree of upper back, sequela -T2124XA Burn of second degree of lower back, initial encounter -T2124XD Burn of second degree of lower back, subsequent encounter -T2124XS Burn of second degree of lower back, sequela -T2125XA Burn of second degree of buttock, initial encounter -T2125XD Burn of second degree of buttock, subsequent encounter -T2125XS Burn of second degree of buttock, sequela -T2126XA Burn of second degree of male genital region, initial encounter -T2126XD Burn of second degree of male genital region, subsequent encounter -T2126XS Burn of second degree of male genital region, sequela -T2127XA Burn of second degree of female genital region, initial encounter -T2127XD Burn of second degree of female genital region, subsequent encounter -T2127XS Burn of second degree of female genital region, sequela -T2129XA Burn of second degree of other site of trunk, initial encounter -T2129XD Burn of second degree of other site of trunk, subsequent encounter -T2129XS Burn of second degree of other site of trunk, sequela -T2130XA Burn of third degree of trunk, unspecified site, initial encounter -T2130XD Burn of third degree of trunk, unspecified site, subsequent encounter -T2130XS Burn of third degree of trunk, unspecified site, sequela -T2131XA Burn of third degree of chest wall, initial encounter -T2131XD Burn of third degree of chest wall, subsequent encounter -T2131XS Burn of third degree of chest wall, sequela -T2132XA Burn of third degree of abdominal wall, initial encounter -T2132XD Burn of third degree of abdominal wall, subsequent encounter -T2132XS Burn of third degree of abdominal wall, sequela -T2133XA Burn of third degree of upper back, initial encounter -T2133XD Burn of third degree of upper back, subsequent encounter -T2133XS Burn of third degree of upper back, sequela -T2134XA Burn of third degree of lower back, initial encounter -T2134XD Burn of third degree of lower back, subsequent encounter -T2134XS Burn of third degree of lower back, sequela -T2135XA Burn of third degree of buttock, initial encounter -T2135XD Burn of third degree of buttock, subsequent encounter -T2135XS Burn of third degree of buttock, sequela -T2136XA Burn of third degree of male genital region, initial encounter -T2136XD Burn of third degree of male genital region, subsequent encounter -T2136XS Burn of third degree of male genital region, sequela -T2137XA Burn of third degree of female genital region, initial encounter -T2137XD Burn of third degree of female genital region, subsequent encounter -T2137XS Burn of third degree of female genital region, sequela -T2139XA Burn of third degree of other site of trunk, initial encounter -T2139XD Burn of third degree of other site of trunk, subsequent encounter -T2139XS Burn of third degree of other site of trunk, sequela -T2140XA Corrosion of unspecified degree of trunk, unspecified site, initial encounter -T2140XD Corrosion of unspecified degree of trunk, unspecified site, subsequent encounter -T2140XS Corrosion of unspecified degree of trunk, unspecified site, sequela -T2141XA Corrosion of unspecified degree of chest wall, initial encounter -T2141XD Corrosion of unspecified degree of chest wall, subsequent encounter -T2141XS Corrosion of unspecified degree of chest wall, sequela -T2142XA Corrosion of unspecified degree of abdominal wall, initial encounter -T2142XD Corrosion of unspecified degree of abdominal wall, subsequent encounter -T2142XS Corrosion of unspecified degree of abdominal wall, sequela -T2143XA Corrosion of unspecified degree of upper back, initial encounter -T2143XD Corrosion of unspecified degree of upper back, subsequent encounter -T2143XS Corrosion of unspecified degree of upper back, sequela -T2144XA Corrosion of unspecified degree of lower back, initial encounter -T2144XD Corrosion of unspecified degree of lower back, subsequent encounter -T2144XS Corrosion of unspecified degree of lower back, sequela -T2145XA Corrosion of unspecified degree of buttock, initial encounter -T2145XD Corrosion of unspecified degree of buttock, subsequent encounter -T2145XS Corrosion of unspecified degree of buttock, sequela -T2146XA Corrosion of unspecified degree of male genital region, initial encounter -T2146XD Corrosion of unspecified degree of male genital region, subsequent encounter -T2146XS Corrosion of unspecified degree of male genital region, sequela -T2147XA Corrosion of unspecified degree of female genital region, initial encounter -T2147XD Corrosion of unspecified degree of female genital region, subsequent encounter -T2147XS Corrosion of unspecified degree of female genital region, sequela -T2149XA Corrosion of unspecified degree of other site of trunk, initial encounter -T2149XD Corrosion of unspecified degree of other site of trunk, subsequent encounter -T2149XS Corrosion of unspecified degree of other site of trunk, sequela -T2150XA Corrosion of first degree of trunk, unspecified site, initial encounter -T2150XD Corrosion of first degree of trunk, unspecified site, subsequent encounter -T2150XS Corrosion of first degree of trunk, unspecified site, sequela -T2151XA Corrosion of first degree of chest wall, initial encounter -T2151XD Corrosion of first degree of chest wall, subsequent encounter -T2151XS Corrosion of first degree of chest wall, sequela -T2152XA Corrosion of first degree of abdominal wall, initial encounter -T2152XD Corrosion of first degree of abdominal wall, subsequent encounter -T2152XS Corrosion of first degree of abdominal wall, sequela -T2153XA Corrosion of first degree of upper back, initial encounter -T2153XD Corrosion of first degree of upper back, subsequent encounter -T2153XS Corrosion of first degree of upper back, sequela -T2154XA Corrosion of first degree of lower back, initial encounter -T2154XD Corrosion of first degree of lower back, subsequent encounter -T2154XS Corrosion of first degree of lower back, sequela -T2155XA Corrosion of first degree of buttock, initial encounter -T2155XD Corrosion of first degree of buttock, subsequent encounter -T2155XS Corrosion of first degree of buttock, sequela -T2156XA Corrosion of first degree of male genital region, initial encounter -T2156XD Corrosion of first degree of male genital region, subsequent encounter -T2156XS Corrosion of first degree of male genital region, sequela -T2157XA Corrosion of first degree of female genital region, initial encounter -T2157XD Corrosion of first degree of female genital region, subsequent encounter -T2157XS Corrosion of first degree of female genital region, sequela -T2159XA Corrosion of first degree of other site of trunk, initial encounter -T2159XD Corrosion of first degree of other site of trunk, subsequent encounter -T2159XS Corrosion of first degree of other site of trunk, sequela -T2160XA Corrosion of second degree of trunk, unspecified site, initial encounter -T2160XD Corrosion of second degree of trunk, unspecified site, subsequent encounter -T2160XS Corrosion of second degree of trunk, unspecified site, sequela -T2161XA Corrosion of second degree of chest wall, initial encounter -T2161XD Corrosion of second degree of chest wall, subsequent encounter -T2161XS Corrosion of second degree of chest wall, sequela -T2162XA Corrosion of second degree of abdominal wall, initial encounter -T2162XD Corrosion of second degree of abdominal wall, subsequent encounter -T2162XS Corrosion of second degree of abdominal wall, sequela -T2163XA Corrosion of second degree of upper back, initial encounter -T2163XD Corrosion of second degree of upper back, subsequent encounter -T2163XS Corrosion of second degree of upper back, sequela -T2164XA Corrosion of second degree of lower back, initial encounter -T2164XD Corrosion of second degree of lower back, subsequent encounter -T2164XS Corrosion of second degree of lower back, sequela -T2165XA Corrosion of second degree of buttock, initial encounter -T2165XD Corrosion of second degree of buttock, subsequent encounter -T2165XS Corrosion of second degree of buttock, sequela -T2166XA Corrosion of second degree of male genital region, initial encounter -T2166XD Corrosion of second degree of male genital region, subsequent encounter -T2166XS Corrosion of second degree of male genital region, sequela -T2167XA Corrosion of second degree of female genital region, initial encounter -T2167XD Corrosion of second degree of female genital region, subsequent encounter -T2167XS Corrosion of second degree of female genital region, sequela -T2169XA Corrosion of second degree of other site of trunk, initial encounter -T2169XD Corrosion of second degree of other site of trunk, subsequent encounter -T2169XS Corrosion of second degree of other site of trunk, sequela -T2170XA Corrosion of third degree of trunk, unspecified site, initial encounter -T2170XD Corrosion of third degree of trunk, unspecified site, subsequent encounter -T2170XS Corrosion of third degree of trunk, unspecified site, sequela -T2171XA Corrosion of third degree of chest wall, initial encounter -T2171XD Corrosion of third degree of chest wall, subsequent encounter -T2171XS Corrosion of third degree of chest wall, sequela -T2172XA Corrosion of third degree of abdominal wall, initial encounter -T2172XD Corrosion of third degree of abdominal wall, subsequent encounter -T2172XS Corrosion of third degree of abdominal wall, sequela -T2173XA Corrosion of third degree of upper back, initial encounter -T2173XD Corrosion of third degree of upper back, subsequent encounter -T2173XS Corrosion of third degree of upper back, sequela -T2174XA Corrosion of third degree of lower back, initial encounter -T2174XD Corrosion of third degree of lower back, subsequent encounter -T2174XS Corrosion of third degree of lower back, sequela -T2175XA Corrosion of third degree of buttock, initial encounter -T2175XD Corrosion of third degree of buttock, subsequent encounter -T2175XS Corrosion of third degree of buttock, sequela -T2176XA Corrosion of third degree of male genital region, initial encounter -T2176XD Corrosion of third degree of male genital region, subsequent encounter -T2176XS Corrosion of third degree of male genital region, sequela -T2177XA Corrosion of third degree of female genital region, initial encounter -T2177XD Corrosion of third degree of female genital region, subsequent encounter -T2177XS Corrosion of third degree of female genital region, sequela -T2179XA Corrosion of third degree of other site of trunk, initial encounter -T2179XD Corrosion of third degree of other site of trunk, subsequent encounter -T2179XS Corrosion of third degree of other site of trunk, sequela -T2200XA Burn of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2200XD Burn of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2200XS Burn of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22011A Burn of unspecified degree of right forearm, initial encounter -T22011D Burn of unspecified degree of right forearm, subsequent encounter -T22011S Burn of unspecified degree of right forearm, sequela -T22012A Burn of unspecified degree of left forearm, initial encounter -T22012D Burn of unspecified degree of left forearm, subsequent encounter -T22012S Burn of unspecified degree of left forearm, sequela -T22019A Burn of unspecified degree of unspecified forearm, initial encounter -T22019D Burn of unspecified degree of unspecified forearm, subsequent encounter -T22019S Burn of unspecified degree of unspecified forearm, sequela -T22021A Burn of unspecified degree of right elbow, initial encounter -T22021D Burn of unspecified degree of right elbow, subsequent encounter -T22021S Burn of unspecified degree of right elbow, sequela -T22022A Burn of unspecified degree of left elbow, initial encounter -T22022D Burn of unspecified degree of left elbow, subsequent encounter -T22022S Burn of unspecified degree of left elbow, sequela -T22029A Burn of unspecified degree of unspecified elbow, initial encounter -T22029D Burn of unspecified degree of unspecified elbow, subsequent encounter -T22029S Burn of unspecified degree of unspecified elbow, sequela -T22031A Burn of unspecified degree of right upper arm, initial encounter -T22031D Burn of unspecified degree of right upper arm, subsequent encounter -T22031S Burn of unspecified degree of right upper arm, sequela -T22032A Burn of unspecified degree of left upper arm, initial encounter -T22032D Burn of unspecified degree of left upper arm, subsequent encounter -T22032S Burn of unspecified degree of left upper arm, sequela -T22039A Burn of unspecified degree of unspecified upper arm, initial encounter -T22039D Burn of unspecified degree of unspecified upper arm, subsequent encounter -T22039S Burn of unspecified degree of unspecified upper arm, sequela -T22041A Burn of unspecified degree of right axilla, initial encounter -T22041D Burn of unspecified degree of right axilla, subsequent encounter -T22041S Burn of unspecified degree of right axilla, sequela -T22042A Burn of unspecified degree of left axilla, initial encounter -T22042D Burn of unspecified degree of left axilla, subsequent encounter -T22042S Burn of unspecified degree of left axilla, sequela -T22049A Burn of unspecified degree of unspecified axilla, initial encounter -T22049D Burn of unspecified degree of unspecified axilla, subsequent encounter -T22049S Burn of unspecified degree of unspecified axilla, sequela -T22051A Burn of unspecified degree of right shoulder, initial encounter -T22051D Burn of unspecified degree of right shoulder, subsequent encounter -T22051S Burn of unspecified degree of right shoulder, sequela -T22052A Burn of unspecified degree of left shoulder, initial encounter -T22052D Burn of unspecified degree of left shoulder, subsequent encounter -T22052S Burn of unspecified degree of left shoulder, sequela -T22059A Burn of unspecified degree of unspecified shoulder, initial encounter -T22059D Burn of unspecified degree of unspecified shoulder, subsequent encounter -T22059S Burn of unspecified degree of unspecified shoulder, sequela -T22061A Burn of unspecified degree of right scapular region, initial encounter -T22061D Burn of unspecified degree of right scapular region, subsequent encounter -T22061S Burn of unspecified degree of right scapular region, sequela -T22062A Burn of unspecified degree of left scapular region, initial encounter -T22062D Burn of unspecified degree of left scapular region, subsequent encounter -T22062S Burn of unspecified degree of left scapular region, sequela -T22069A Burn of unspecified degree of unspecified scapular region, initial encounter -T22069D Burn of unspecified degree of unspecified scapular region, subsequent encounter -T22069S Burn of unspecified degree of unspecified scapular region, sequela -T22091A Burn of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22091D Burn of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22091S Burn of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22092A Burn of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22092D Burn of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22092S Burn of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22099A Burn of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22099D Burn of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22099S Burn of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2210XA Burn of first degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2210XD Burn of first degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2210XS Burn of first degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22111A Burn of first degree of right forearm, initial encounter -T22111D Burn of first degree of right forearm, subsequent encounter -T22111S Burn of first degree of right forearm, sequela -T22112A Burn of first degree of left forearm, initial encounter -T22112D Burn of first degree of left forearm, subsequent encounter -T22112S Burn of first degree of left forearm, sequela -T22119A Burn of first degree of unspecified forearm, initial encounter -T22119D Burn of first degree of unspecified forearm, subsequent encounter -T22119S Burn of first degree of unspecified forearm, sequela -T22121A Burn of first degree of right elbow, initial encounter -T22121D Burn of first degree of right elbow, subsequent encounter -T22121S Burn of first degree of right elbow, sequela -T22122A Burn of first degree of left elbow, initial encounter -T22122D Burn of first degree of left elbow, subsequent encounter -T22122S Burn of first degree of left elbow, sequela -T22129A Burn of first degree of unspecified elbow, initial encounter -T22129D Burn of first degree of unspecified elbow, subsequent encounter -T22129S Burn of first degree of unspecified elbow, sequela -T22131A Burn of first degree of right upper arm, initial encounter -T22131D Burn of first degree of right upper arm, subsequent encounter -T22131S Burn of first degree of right upper arm, sequela -T22132A Burn of first degree of left upper arm, initial encounter -T22132D Burn of first degree of left upper arm, subsequent encounter -T22132S Burn of first degree of left upper arm, sequela -T22139A Burn of first degree of unspecified upper arm, initial encounter -T22139D Burn of first degree of unspecified upper arm, subsequent encounter -T22139S Burn of first degree of unspecified upper arm, sequela -T22141A Burn of first degree of right axilla, initial encounter -T22141D Burn of first degree of right axilla, subsequent encounter -T22141S Burn of first degree of right axilla, sequela -T22142A Burn of first degree of left axilla, initial encounter -T22142D Burn of first degree of left axilla, subsequent encounter -T22142S Burn of first degree of left axilla, sequela -T22149A Burn of first degree of unspecified axilla, initial encounter -T22149D Burn of first degree of unspecified axilla, subsequent encounter -T22149S Burn of first degree of unspecified axilla, sequela -T22151A Burn of first degree of right shoulder, initial encounter -T22151D Burn of first degree of right shoulder, subsequent encounter -T22151S Burn of first degree of right shoulder, sequela -T22152A Burn of first degree of left shoulder, initial encounter -T22152D Burn of first degree of left shoulder, subsequent encounter -T22152S Burn of first degree of left shoulder, sequela -T22159A Burn of first degree of unspecified shoulder, initial encounter -T22159D Burn of first degree of unspecified shoulder, subsequent encounter -T22159S Burn of first degree of unspecified shoulder, sequela -T22161A Burn of first degree of right scapular region, initial encounter -T22161D Burn of first degree of right scapular region, subsequent encounter -T22161S Burn of first degree of right scapular region, sequela -T22162A Burn of first degree of left scapular region, initial encounter -T22162D Burn of first degree of left scapular region, subsequent encounter -T22162S Burn of first degree of left scapular region, sequela -T22169A Burn of first degree of unspecified scapular region, initial encounter -T22169D Burn of first degree of unspecified scapular region, subsequent encounter -T22169S Burn of first degree of unspecified scapular region, sequela -T22191A Burn of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22191D Burn of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22191S Burn of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22192A Burn of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22192D Burn of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22192S Burn of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22199A Burn of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22199D Burn of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22199S Burn of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2220XA Burn of second degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2220XD Burn of second degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2220XS Burn of second degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22211A Burn of second degree of right forearm, initial encounter -T22211D Burn of second degree of right forearm, subsequent encounter -T22211S Burn of second degree of right forearm, sequela -T22212A Burn of second degree of left forearm, initial encounter -T22212D Burn of second degree of left forearm, subsequent encounter -T22212S Burn of second degree of left forearm, sequela -T22219A Burn of second degree of unspecified forearm, initial encounter -T22219D Burn of second degree of unspecified forearm, subsequent encounter -T22219S Burn of second degree of unspecified forearm, sequela -T22221A Burn of second degree of right elbow, initial encounter -T22221D Burn of second degree of right elbow, subsequent encounter -T22221S Burn of second degree of right elbow, sequela -T22222A Burn of second degree of left elbow, initial encounter -T22222D Burn of second degree of left elbow, subsequent encounter -T22222S Burn of second degree of left elbow, sequela -T22229A Burn of second degree of unspecified elbow, initial encounter -T22229D Burn of second degree of unspecified elbow, subsequent encounter -T22229S Burn of second degree of unspecified elbow, sequela -T22231A Burn of second degree of right upper arm, initial encounter -T22231D Burn of second degree of right upper arm, subsequent encounter -T22231S Burn of second degree of right upper arm, sequela -T22232A Burn of second degree of left upper arm, initial encounter -T22232D Burn of second degree of left upper arm, subsequent encounter -T22232S Burn of second degree of left upper arm, sequela -T22239A Burn of second degree of unspecified upper arm, initial encounter -T22239D Burn of second degree of unspecified upper arm, subsequent encounter -T22239S Burn of second degree of unspecified upper arm, sequela -T22241A Burn of second degree of right axilla, initial encounter -T22241D Burn of second degree of right axilla, subsequent encounter -T22241S Burn of second degree of right axilla, sequela -T22242A Burn of second degree of left axilla, initial encounter -T22242D Burn of second degree of left axilla, subsequent encounter -T22242S Burn of second degree of left axilla, sequela -T22249A Burn of second degree of unspecified axilla, initial encounter -T22249D Burn of second degree of unspecified axilla, subsequent encounter -T22249S Burn of second degree of unspecified axilla, sequela -T22251A Burn of second degree of right shoulder, initial encounter -T22251D Burn of second degree of right shoulder, subsequent encounter -T22251S Burn of second degree of right shoulder, sequela -T22252A Burn of second degree of left shoulder, initial encounter -T22252D Burn of second degree of left shoulder, subsequent encounter -T22252S Burn of second degree of left shoulder, sequela -T22259A Burn of second degree of unspecified shoulder, initial encounter -T22259D Burn of second degree of unspecified shoulder, subsequent encounter -T22259S Burn of second degree of unspecified shoulder, sequela -T22261A Burn of second degree of right scapular region, initial encounter -T22261D Burn of second degree of right scapular region, subsequent encounter -T22261S Burn of second degree of right scapular region, sequela -T22262A Burn of second degree of left scapular region, initial encounter -T22262D Burn of second degree of left scapular region, subsequent encounter -T22262S Burn of second degree of left scapular region, sequela -T22269A Burn of second degree of unspecified scapular region, initial encounter -T22269D Burn of second degree of unspecified scapular region, subsequent encounter -T22269S Burn of second degree of unspecified scapular region, sequela -T22291A Burn of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22291D Burn of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22291S Burn of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22292A Burn of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22292D Burn of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22292S Burn of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22299A Burn of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22299D Burn of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22299S Burn of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2230XA Burn of third degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2230XD Burn of third degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2230XS Burn of third degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22311A Burn of third degree of right forearm, initial encounter -T22311D Burn of third degree of right forearm, subsequent encounter -T22311S Burn of third degree of right forearm, sequela -T22312A Burn of third degree of left forearm, initial encounter -T22312D Burn of third degree of left forearm, subsequent encounter -T22312S Burn of third degree of left forearm, sequela -T22319A Burn of third degree of unspecified forearm, initial encounter -T22319D Burn of third degree of unspecified forearm, subsequent encounter -T22319S Burn of third degree of unspecified forearm, sequela -T22321A Burn of third degree of right elbow, initial encounter -T22321D Burn of third degree of right elbow, subsequent encounter -T22321S Burn of third degree of right elbow, sequela -T22322A Burn of third degree of left elbow, initial encounter -T22322D Burn of third degree of left elbow, subsequent encounter -T22322S Burn of third degree of left elbow, sequela -T22329A Burn of third degree of unspecified elbow, initial encounter -T22329D Burn of third degree of unspecified elbow, subsequent encounter -T22329S Burn of third degree of unspecified elbow, sequela -T22331A Burn of third degree of right upper arm, initial encounter -T22331D Burn of third degree of right upper arm, subsequent encounter -T22331S Burn of third degree of right upper arm, sequela -T22332A Burn of third degree of left upper arm, initial encounter -T22332D Burn of third degree of left upper arm, subsequent encounter -T22332S Burn of third degree of left upper arm, sequela -T22339A Burn of third degree of unspecified upper arm, initial encounter -T22339D Burn of third degree of unspecified upper arm, subsequent encounter -T22339S Burn of third degree of unspecified upper arm, sequela -T22341A Burn of third degree of right axilla, initial encounter -T22341D Burn of third degree of right axilla, subsequent encounter -T22341S Burn of third degree of right axilla, sequela -T22342A Burn of third degree of left axilla, initial encounter -T22342D Burn of third degree of left axilla, subsequent encounter -T22342S Burn of third degree of left axilla, sequela -T22349A Burn of third degree of unspecified axilla, initial encounter -T22349D Burn of third degree of unspecified axilla, subsequent encounter -T22349S Burn of third degree of unspecified axilla, sequela -T22351A Burn of third degree of right shoulder, initial encounter -T22351D Burn of third degree of right shoulder, subsequent encounter -T22351S Burn of third degree of right shoulder, sequela -T22352A Burn of third degree of left shoulder, initial encounter -T22352D Burn of third degree of left shoulder, subsequent encounter -T22352S Burn of third degree of left shoulder, sequela -T22359A Burn of third degree of unspecified shoulder, initial encounter -T22359D Burn of third degree of unspecified shoulder, subsequent encounter -T22359S Burn of third degree of unspecified shoulder, sequela -T22361A Burn of third degree of right scapular region, initial encounter -T22361D Burn of third degree of right scapular region, subsequent encounter -T22361S Burn of third degree of right scapular region, sequela -T22362A Burn of third degree of left scapular region, initial encounter -T22362D Burn of third degree of left scapular region, subsequent encounter -T22362S Burn of third degree of left scapular region, sequela -T22369A Burn of third degree of unspecified scapular region, initial encounter -T22369D Burn of third degree of unspecified scapular region, subsequent encounter -T22369S Burn of third degree of unspecified scapular region, sequela -T22391A Burn of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22391D Burn of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22391S Burn of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22392A Burn of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22392D Burn of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22392S Burn of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22399A Burn of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22399D Burn of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22399S Burn of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2240XA Corrosion of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2240XD Corrosion of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2240XS Corrosion of unspecified degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22411A Corrosion of unspecified degree of right forearm, initial encounter -T22411D Corrosion of unspecified degree of right forearm, subsequent encounter -T22411S Corrosion of unspecified degree of right forearm, sequela -T22412A Corrosion of unspecified degree of left forearm, initial encounter -T22412D Corrosion of unspecified degree of left forearm, subsequent encounter -T22412S Corrosion of unspecified degree of left forearm, sequela -T22419A Corrosion of unspecified degree of unspecified forearm, initial encounter -T22419D Corrosion of unspecified degree of unspecified forearm, subsequent encounter -T22419S Corrosion of unspecified degree of unspecified forearm, sequela -T22421A Corrosion of unspecified degree of right elbow, initial encounter -T22421D Corrosion of unspecified degree of right elbow, subsequent encounter -T22421S Corrosion of unspecified degree of right elbow, sequela -T22422A Corrosion of unspecified degree of left elbow, initial encounter -T22422D Corrosion of unspecified degree of left elbow, subsequent encounter -T22422S Corrosion of unspecified degree of left elbow, sequela -T22429A Corrosion of unspecified degree of unspecified elbow, initial encounter -T22429D Corrosion of unspecified degree of unspecified elbow, subsequent encounter -T22429S Corrosion of unspecified degree of unspecified elbow, sequela -T22431A Corrosion of unspecified degree of right upper arm, initial encounter -T22431D Corrosion of unspecified degree of right upper arm, subsequent encounter -T22431S Corrosion of unspecified degree of right upper arm, sequela -T22432A Corrosion of unspecified degree of left upper arm, initial encounter -T22432D Corrosion of unspecified degree of left upper arm, subsequent encounter -T22432S Corrosion of unspecified degree of left upper arm, sequela -T22439A Corrosion of unspecified degree of unspecified upper arm, initial encounter -T22439D Corrosion of unspecified degree of unspecified upper arm, subsequent encounter -T22439S Corrosion of unspecified degree of unspecified upper arm, sequela -T22441A Corrosion of unspecified degree of right axilla, initial encounter -T22441D Corrosion of unspecified degree of right axilla, subsequent encounter -T22441S Corrosion of unspecified degree of right axilla, sequela -T22442A Corrosion of unspecified degree of left axilla, initial encounter -T22442D Corrosion of unspecified degree of left axilla, subsequent encounter -T22442S Corrosion of unspecified degree of left axilla, sequela -T22449A Corrosion of unspecified degree of unspecified axilla, initial encounter -T22449D Corrosion of unspecified degree of unspecified axilla, subsequent encounter -T22449S Corrosion of unspecified degree of unspecified axilla, sequela -T22451A Corrosion of unspecified degree of right shoulder, initial encounter -T22451D Corrosion of unspecified degree of right shoulder, subsequent encounter -T22451S Corrosion of unspecified degree of right shoulder, sequela -T22452A Corrosion of unspecified degree of left shoulder, initial encounter -T22452D Corrosion of unspecified degree of left shoulder, subsequent encounter -T22452S Corrosion of unspecified degree of left shoulder, sequela -T22459A Corrosion of unspecified degree of unspecified shoulder, initial encounter -T22459D Corrosion of unspecified degree of unspecified shoulder, subsequent encounter -T22459S Corrosion of unspecified degree of unspecified shoulder, sequela -T22461A Corrosion of unspecified degree of right scapular region, initial encounter -T22461D Corrosion of unspecified degree of right scapular region, subsequent encounter -T22461S Corrosion of unspecified degree of right scapular region, sequela -T22462A Corrosion of unspecified degree of left scapular region, initial encounter -T22462D Corrosion of unspecified degree of left scapular region, subsequent encounter -T22462S Corrosion of unspecified degree of left scapular region, sequela -T22469A Corrosion of unspecified degree of unspecified scapular region, initial encounter -T22469D Corrosion of unspecified degree of unspecified scapular region, subsequent encounter -T22469S Corrosion of unspecified degree of unspecified scapular region, sequela -T22491A Corrosion of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22491D Corrosion of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22491S Corrosion of unspecified degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22492A Corrosion of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22492D Corrosion of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22492S Corrosion of unspecified degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22499A Corrosion of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22499D Corrosion of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22499S Corrosion of unspecified degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2250XA Corrosion of first degree of shoulder and upper limb, except wrist and hand unspecified site, initial encounter -T2250XD Corrosion of first degree of shoulder and upper limb, except wrist and hand unspecified site, subsequent encounter -T2250XS Corrosion of first degree of shoulder and upper limb, except wrist and hand unspecified site, sequela -T22511A Corrosion of first degree of right forearm, initial encounter -T22511D Corrosion of first degree of right forearm, subsequent encounter -T22511S Corrosion of first degree of right forearm, sequela -T22512A Corrosion of first degree of left forearm, initial encounter -T22512D Corrosion of first degree of left forearm, subsequent encounter -T22512S Corrosion of first degree of left forearm, sequela -T22519A Corrosion of first degree of unspecified forearm, initial encounter -T22519D Corrosion of first degree of unspecified forearm, subsequent encounter -T22519S Corrosion of first degree of unspecified forearm, sequela -T22521A Corrosion of first degree of right elbow, initial encounter -T22521D Corrosion of first degree of right elbow, subsequent encounter -T22521S Corrosion of first degree of right elbow, sequela -T22522A Corrosion of first degree of left elbow, initial encounter -T22522D Corrosion of first degree of left elbow, subsequent encounter -T22522S Corrosion of first degree of left elbow, sequela -T22529A Corrosion of first degree of unspecified elbow, initial encounter -T22529D Corrosion of first degree of unspecified elbow, subsequent encounter -T22529S Corrosion of first degree of unspecified elbow, sequela -T22531A Corrosion of first degree of right upper arm, initial encounter -T22531D Corrosion of first degree of right upper arm, subsequent encounter -T22531S Corrosion of first degree of right upper arm, sequela -T22532A Corrosion of first degree of left upper arm, initial encounter -T22532D Corrosion of first degree of left upper arm, subsequent encounter -T22532S Corrosion of first degree of left upper arm, sequela -T22539A Corrosion of first degree of unspecified upper arm, initial encounter -T22539D Corrosion of first degree of unspecified upper arm, subsequent encounter -T22539S Corrosion of first degree of unspecified upper arm, sequela -T22541A Corrosion of first degree of right axilla, initial encounter -T22541D Corrosion of first degree of right axilla, subsequent encounter -T22541S Corrosion of first degree of right axilla, sequela -T22542A Corrosion of first degree of left axilla, initial encounter -T22542D Corrosion of first degree of left axilla, subsequent encounter -T22542S Corrosion of first degree of left axilla, sequela -T22549A Corrosion of first degree of unspecified axilla, initial encounter -T22549D Corrosion of first degree of unspecified axilla, subsequent encounter -T22549S Corrosion of first degree of unspecified axilla, sequela -T22551A Corrosion of first degree of right shoulder, initial encounter -T22551D Corrosion of first degree of right shoulder, subsequent encounter -T22551S Corrosion of first degree of right shoulder, sequela -T22552A Corrosion of first degree of left shoulder, initial encounter -T22552D Corrosion of first degree of left shoulder, subsequent encounter -T22552S Corrosion of first degree of left shoulder, sequela -T22559A Corrosion of first degree of unspecified shoulder, initial encounter -T22559D Corrosion of first degree of unspecified shoulder, subsequent encounter -T22559S Corrosion of first degree of unspecified shoulder, sequela -T22561A Corrosion of first degree of right scapular region, initial encounter -T22561D Corrosion of first degree of right scapular region, subsequent encounter -T22561S Corrosion of first degree of right scapular region, sequela -T22562A Corrosion of first degree of left scapular region, initial encounter -T22562D Corrosion of first degree of left scapular region, subsequent encounter -T22562S Corrosion of first degree of left scapular region, sequela -T22569A Corrosion of first degree of unspecified scapular region, initial encounter -T22569D Corrosion of first degree of unspecified scapular region, subsequent encounter -T22569S Corrosion of first degree of unspecified scapular region, sequela -T22591A Corrosion of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22591D Corrosion of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22591S Corrosion of first degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22592A Corrosion of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22592D Corrosion of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22592S Corrosion of first degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22599A Corrosion of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22599D Corrosion of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22599S Corrosion of first degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2260XA Corrosion of second degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2260XD Corrosion of second degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2260XS Corrosion of second degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22611A Corrosion of second degree of right forearm, initial encounter -T22611D Corrosion of second degree of right forearm, subsequent encounter -T22611S Corrosion of second degree of right forearm, sequela -T22612A Corrosion of second degree of left forearm, initial encounter -T22612D Corrosion of second degree of left forearm, subsequent encounter -T22612S Corrosion of second degree of left forearm, sequela -T22619A Corrosion of second degree of unspecified forearm, initial encounter -T22619D Corrosion of second degree of unspecified forearm, subsequent encounter -T22619S Corrosion of second degree of unspecified forearm, sequela -T22621A Corrosion of second degree of right elbow, initial encounter -T22621D Corrosion of second degree of right elbow, subsequent encounter -T22621S Corrosion of second degree of right elbow, sequela -T22622A Corrosion of second degree of left elbow, initial encounter -T22622D Corrosion of second degree of left elbow, subsequent encounter -T22622S Corrosion of second degree of left elbow, sequela -T22629A Corrosion of second degree of unspecified elbow, initial encounter -T22629D Corrosion of second degree of unspecified elbow, subsequent encounter -T22629S Corrosion of second degree of unspecified elbow, sequela -T22631A Corrosion of second degree of right upper arm, initial encounter -T22631D Corrosion of second degree of right upper arm, subsequent encounter -T22631S Corrosion of second degree of right upper arm, sequela -T22632A Corrosion of second degree of left upper arm, initial encounter -T22632D Corrosion of second degree of left upper arm, subsequent encounter -T22632S Corrosion of second degree of left upper arm, sequela -T22639A Corrosion of second degree of unspecified upper arm, initial encounter -T22639D Corrosion of second degree of unspecified upper arm, subsequent encounter -T22639S Corrosion of second degree of unspecified upper arm, sequela -T22641A Corrosion of second degree of right axilla, initial encounter -T22641D Corrosion of second degree of right axilla, subsequent encounter -T22641S Corrosion of second degree of right axilla, sequela -T22642A Corrosion of second degree of left axilla, initial encounter -T22642D Corrosion of second degree of left axilla, subsequent encounter -T22642S Corrosion of second degree of left axilla, sequela -T22649A Corrosion of second degree of unspecified axilla, initial encounter -T22649D Corrosion of second degree of unspecified axilla, subsequent encounter -T22649S Corrosion of second degree of unspecified axilla, sequela -T22651A Corrosion of second degree of right shoulder, initial encounter -T22651D Corrosion of second degree of right shoulder, subsequent encounter -T22651S Corrosion of second degree of right shoulder, sequela -T22652A Corrosion of second degree of left shoulder, initial encounter -T22652D Corrosion of second degree of left shoulder, subsequent encounter -T22652S Corrosion of second degree of left shoulder, sequela -T22659A Corrosion of second degree of unspecified shoulder, initial encounter -T22659D Corrosion of second degree of unspecified shoulder, subsequent encounter -T22659S Corrosion of second degree of unspecified shoulder, sequela -T22661A Corrosion of second degree of right scapular region, initial encounter -T22661D Corrosion of second degree of right scapular region, subsequent encounter -T22661S Corrosion of second degree of right scapular region, sequela -T22662A Corrosion of second degree of left scapular region, initial encounter -T22662D Corrosion of second degree of left scapular region, subsequent encounter -T22662S Corrosion of second degree of left scapular region, sequela -T22669A Corrosion of second degree of unspecified scapular region, initial encounter -T22669D Corrosion of second degree of unspecified scapular region, subsequent encounter -T22669S Corrosion of second degree of unspecified scapular region, sequela -T22691A Corrosion of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22691D Corrosion of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22691S Corrosion of second degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22692A Corrosion of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22692D Corrosion of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22692S Corrosion of second degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22699A Corrosion of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22699D Corrosion of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22699S Corrosion of second degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T2270XA Corrosion of third degree of shoulder and upper limb, except wrist and hand, unspecified site, initial encounter -T2270XD Corrosion of third degree of shoulder and upper limb, except wrist and hand, unspecified site, subsequent encounter -T2270XS Corrosion of third degree of shoulder and upper limb, except wrist and hand, unspecified site, sequela -T22711A Corrosion of third degree of right forearm, initial encounter -T22711D Corrosion of third degree of right forearm, subsequent encounter -T22711S Corrosion of third degree of right forearm, sequela -T22712A Corrosion of third degree of left forearm, initial encounter -T22712D Corrosion of third degree of left forearm, subsequent encounter -T22712S Corrosion of third degree of left forearm, sequela -T22719A Corrosion of third degree of unspecified forearm, initial encounter -T22719D Corrosion of third degree of unspecified forearm, subsequent encounter -T22719S Corrosion of third degree of unspecified forearm, sequela -T22721A Corrosion of third degree of right elbow, initial encounter -T22721D Corrosion of third degree of right elbow, subsequent encounter -T22721S Corrosion of third degree of right elbow, sequela -T22722A Corrosion of third degree of left elbow, initial encounter -T22722D Corrosion of third degree of left elbow, subsequent encounter -T22722S Corrosion of third degree of left elbow, sequela -T22729A Corrosion of third degree of unspecified elbow, initial encounter -T22729D Corrosion of third degree of unspecified elbow, subsequent encounter -T22729S Corrosion of third degree of unspecified elbow, sequela -T22731A Corrosion of third degree of right upper arm, initial encounter -T22731D Corrosion of third degree of right upper arm, subsequent encounter -T22731S Corrosion of third degree of right upper arm, sequela -T22732A Corrosion of third degree of left upper arm, initial encounter -T22732D Corrosion of third degree of left upper arm, subsequent encounter -T22732S Corrosion of third degree of left upper arm, sequela -T22739A Corrosion of third degree of unspecified upper arm, initial encounter -T22739D Corrosion of third degree of unspecified upper arm, subsequent encounter -T22739S Corrosion of third degree of unspecified upper arm, sequela -T22741A Corrosion of third degree of right axilla, initial encounter -T22741D Corrosion of third degree of right axilla, subsequent encounter -T22741S Corrosion of third degree of right axilla, sequela -T22742A Corrosion of third degree of left axilla, initial encounter -T22742D Corrosion of third degree of left axilla, subsequent encounter -T22742S Corrosion of third degree of left axilla, sequela -T22749A Corrosion of third degree of unspecified axilla, initial encounter -T22749D Corrosion of third degree of unspecified axilla, subsequent encounter -T22749S Corrosion of third degree of unspecified axilla, sequela -T22751A Corrosion of third degree of right shoulder, initial encounter -T22751D Corrosion of third degree of right shoulder, subsequent encounter -T22751S Corrosion of third degree of right shoulder, sequela -T22752A Corrosion of third degree of left shoulder, initial encounter -T22752D Corrosion of third degree of left shoulder, subsequent encounter -T22752S Corrosion of third degree of left shoulder, sequela -T22759A Corrosion of third degree of unspecified shoulder, initial encounter -T22759D Corrosion of third degree of unspecified shoulder, subsequent encounter -T22759S Corrosion of third degree of unspecified shoulder, sequela -T22761A Corrosion of third degree of right scapular region, initial encounter -T22761D Corrosion of third degree of right scapular region, subsequent encounter -T22761S Corrosion of third degree of right scapular region, sequela -T22762A Corrosion of third degree of left scapular region, initial encounter -T22762D Corrosion of third degree of left scapular region, subsequent encounter -T22762S Corrosion of third degree of left scapular region, sequela -T22769A Corrosion of third degree of unspecified scapular region, initial encounter -T22769D Corrosion of third degree of unspecified scapular region, subsequent encounter -T22769S Corrosion of third degree of unspecified scapular region, sequela -T22791A Corrosion of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, initial encounter -T22791D Corrosion of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, subsequent encounter -T22791S Corrosion of third degree of multiple sites of right shoulder and upper limb, except wrist and hand, sequela -T22792A Corrosion of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, initial encounter -T22792D Corrosion of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, subsequent encounter -T22792S Corrosion of third degree of multiple sites of left shoulder and upper limb, except wrist and hand, sequela -T22799A Corrosion of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, initial encounter -T22799D Corrosion of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, subsequent encounter -T22799S Corrosion of third degree of multiple sites of unspecified shoulder and upper limb, except wrist and hand, sequela -T23001A Burn of unspecified degree of right hand, unspecified site, initial encounter -T23001D Burn of unspecified degree of right hand, unspecified site, subsequent encounter -T23001S Burn of unspecified degree of right hand, unspecified site, sequela -T23002A Burn of unspecified degree of left hand, unspecified site, initial encounter -T23002D Burn of unspecified degree of left hand, unspecified site, subsequent encounter -T23002S Burn of unspecified degree of left hand, unspecified site, sequela -T23009A Burn of unspecified degree of unspecified hand, unspecified site, initial encounter -T23009D Burn of unspecified degree of unspecified hand, unspecified site, subsequent encounter -T23009S Burn of unspecified degree of unspecified hand, unspecified site, sequela -T23011A Burn of unspecified degree of right thumb (nail), initial encounter -T23011D Burn of unspecified degree of right thumb (nail), subsequent encounter -T23011S Burn of unspecified degree of right thumb (nail), sequela -T23012A Burn of unspecified degree of left thumb (nail), initial encounter -T23012D Burn of unspecified degree of left thumb (nail), subsequent encounter -T23012S Burn of unspecified degree of left thumb (nail), sequela -T23019A Burn of unspecified degree of unspecified thumb (nail), initial encounter -T23019D Burn of unspecified degree of unspecified thumb (nail), subsequent encounter -T23019S Burn of unspecified degree of unspecified thumb (nail), sequela -T23021A Burn of unspecified degree of single right finger (nail) except thumb, initial encounter -T23021D Burn of unspecified degree of single right finger (nail) except thumb, subsequent encounter -T23021S Burn of unspecified degree of single right finger (nail) except thumb, sequela -T23022A Burn of unspecified degree of single left finger (nail) except thumb, initial encounter -T23022D Burn of unspecified degree of single left finger (nail) except thumb, subsequent encounter -T23022S Burn of unspecified degree of single left finger (nail) except thumb, sequela -T23029A Burn of unspecified degree of unspecified single finger (nail) except thumb, initial encounter -T23029D Burn of unspecified degree of unspecified single finger (nail) except thumb, subsequent encounter -T23029S Burn of unspecified degree of unspecified single finger (nail) except thumb, sequela -T23031A Burn of unspecified degree of multiple right fingers (nail), not including thumb, initial encounter -T23031D Burn of unspecified degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23031S Burn of unspecified degree of multiple right fingers (nail), not including thumb, sequela -T23032A Burn of unspecified degree of multiple left fingers (nail), not including thumb, initial encounter -T23032D Burn of unspecified degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23032S Burn of unspecified degree of multiple left fingers (nail), not including thumb, sequela -T23039A Burn of unspecified degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23039D Burn of unspecified degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23039S Burn of unspecified degree of unspecified multiple fingers (nail), not including thumb, sequela -T23041A Burn of unspecified degree of multiple right fingers (nail), including thumb, initial encounter -T23041D Burn of unspecified degree of multiple right fingers (nail), including thumb, subsequent encounter -T23041S Burn of unspecified degree of multiple right fingers (nail), including thumb, sequela -T23042A Burn of unspecified degree of multiple left fingers (nail), including thumb, initial encounter -T23042D Burn of unspecified degree of multiple left fingers (nail), including thumb, subsequent encounter -T23042S Burn of unspecified degree of multiple left fingers (nail), including thumb, sequela -T23049A Burn of unspecified degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23049D Burn of unspecified degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23049S Burn of unspecified degree of unspecified multiple fingers (nail), including thumb, sequela -T23051A Burn of unspecified degree of right palm, initial encounter -T23051D Burn of unspecified degree of right palm, subsequent encounter -T23051S Burn of unspecified degree of right palm, sequela -T23052A Burn of unspecified degree of left palm, initial encounter -T23052D Burn of unspecified degree of left palm, subsequent encounter -T23052S Burn of unspecified degree of left palm, sequela -T23059A Burn of unspecified degree of unspecified palm, initial encounter -T23059D Burn of unspecified degree of unspecified palm, subsequent encounter -T23059S Burn of unspecified degree of unspecified palm, sequela -T23061A Burn of unspecified degree of back of right hand, initial encounter -T23061D Burn of unspecified degree of back of right hand, subsequent encounter -T23061S Burn of unspecified degree of back of right hand, sequela -T23062A Burn of unspecified degree of back of left hand, initial encounter -T23062D Burn of unspecified degree of back of left hand, subsequent encounter -T23062S Burn of unspecified degree of back of left hand, sequela -T23069A Burn of unspecified degree of back of unspecified hand, initial encounter -T23069D Burn of unspecified degree of back of unspecified hand, subsequent encounter -T23069S Burn of unspecified degree of back of unspecified hand, sequela -T23071A Burn of unspecified degree of right wrist, initial encounter -T23071D Burn of unspecified degree of right wrist, subsequent encounter -T23071S Burn of unspecified degree of right wrist, sequela -T23072A Burn of unspecified degree of left wrist, initial encounter -T23072D Burn of unspecified degree of left wrist, subsequent encounter -T23072S Burn of unspecified degree of left wrist, sequela -T23079A Burn of unspecified degree of unspecified wrist, initial encounter -T23079D Burn of unspecified degree of unspecified wrist, subsequent encounter -T23079S Burn of unspecified degree of unspecified wrist, sequela -T23091A Burn of unspecified degree of multiple sites of right wrist and hand, initial encounter -T23091D Burn of unspecified degree of multiple sites of right wrist and hand, subsequent encounter -T23091S Burn of unspecified degree of multiple sites of right wrist and hand, sequela -T23092A Burn of unspecified degree of multiple sites of left wrist and hand, initial encounter -T23092D Burn of unspecified degree of multiple sites of left wrist and hand, subsequent encounter -T23092S Burn of unspecified degree of multiple sites of left wrist and hand, sequela -T23099A Burn of unspecified degree of multiple sites of unspecified wrist and hand, initial encounter -T23099D Burn of unspecified degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23099S Burn of unspecified degree of multiple sites of unspecified wrist and hand, sequela -T23101A Burn of first degree of right hand, unspecified site, initial encounter -T23101D Burn of first degree of right hand, unspecified site, subsequent encounter -T23101S Burn of first degree of right hand, unspecified site, sequela -T23102A Burn of first degree of left hand, unspecified site, initial encounter -T23102D Burn of first degree of left hand, unspecified site, subsequent encounter -T23102S Burn of first degree of left hand, unspecified site, sequela -T23109A Burn of first degree of unspecified hand, unspecified site, initial encounter -T23109D Burn of first degree of unspecified hand, unspecified site, subsequent encounter -T23109S Burn of first degree of unspecified hand, unspecified site, sequela -T23111A Burn of first degree of right thumb (nail), initial encounter -T23111D Burn of first degree of right thumb (nail), subsequent encounter -T23111S Burn of first degree of right thumb (nail), sequela -T23112A Burn of first degree of left thumb (nail), initial encounter -T23112D Burn of first degree of left thumb (nail), subsequent encounter -T23112S Burn of first degree of left thumb (nail), sequela -T23119A Burn of first degree of unspecified thumb (nail), initial encounter -T23119D Burn of first degree of unspecified thumb (nail), subsequent encounter -T23119S Burn of first degree of unspecified thumb (nail), sequela -T23121A Burn of first degree of single right finger (nail) except thumb, initial encounter -T23121D Burn of first degree of single right finger (nail) except thumb, subsequent encounter -T23121S Burn of first degree of single right finger (nail) except thumb, sequela -T23122A Burn of first degree of single left finger (nail) except thumb, initial encounter -T23122D Burn of first degree of single left finger (nail) except thumb, subsequent encounter -T23122S Burn of first degree of single left finger (nail) except thumb, sequela -T23129A Burn of first degree of unspecified single finger (nail) except thumb, initial encounter -T23129D Burn of first degree of unspecified single finger (nail) except thumb, subsequent encounter -T23129S Burn of first degree of unspecified single finger (nail) except thumb, sequela -T23131A Burn of first degree of multiple right fingers (nail), not including thumb, initial encounter -T23131D Burn of first degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23131S Burn of first degree of multiple right fingers (nail), not including thumb, sequela -T23132A Burn of first degree of multiple left fingers (nail), not including thumb, initial encounter -T23132D Burn of first degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23132S Burn of first degree of multiple left fingers (nail), not including thumb, sequela -T23139A Burn of first degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23139D Burn of first degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23139S Burn of first degree of unspecified multiple fingers (nail), not including thumb, sequela -T23141A Burn of first degree of multiple right fingers (nail), including thumb, initial encounter -T23141D Burn of first degree of multiple right fingers (nail), including thumb, subsequent encounter -T23141S Burn of first degree of multiple right fingers (nail), including thumb, sequela -T23142A Burn of first degree of multiple left fingers (nail), including thumb, initial encounter -T23142D Burn of first degree of multiple left fingers (nail), including thumb, subsequent encounter -T23142S Burn of first degree of multiple left fingers (nail), including thumb, sequela -T23149A Burn of first degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23149D Burn of first degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23149S Burn of first degree of unspecified multiple fingers (nail), including thumb, sequela -T23151A Burn of first degree of right palm, initial encounter -T23151D Burn of first degree of right palm, subsequent encounter -T23151S Burn of first degree of right palm, sequela -T23152A Burn of first degree of left palm, initial encounter -T23152D Burn of first degree of left palm, subsequent encounter -T23152S Burn of first degree of left palm, sequela -T23159A Burn of first degree of unspecified palm, initial encounter -T23159D Burn of first degree of unspecified palm, subsequent encounter -T23159S Burn of first degree of unspecified palm, sequela -T23161A Burn of first degree of back of right hand, initial encounter -T23161D Burn of first degree of back of right hand, subsequent encounter -T23161S Burn of first degree of back of right hand, sequela -T23162A Burn of first degree of back of left hand, initial encounter -T23162D Burn of first degree of back of left hand, subsequent encounter -T23162S Burn of first degree of back of left hand, sequela -T23169A Burn of first degree of back of unspecified hand, initial encounter -T23169D Burn of first degree of back of unspecified hand, subsequent encounter -T23169S Burn of first degree of back of unspecified hand, sequela -T23171A Burn of first degree of right wrist, initial encounter -T23171D Burn of first degree of right wrist, subsequent encounter -T23171S Burn of first degree of right wrist, sequela -T23172A Burn of first degree of left wrist, initial encounter -T23172D Burn of first degree of left wrist, subsequent encounter -T23172S Burn of first degree of left wrist, sequela -T23179A Burn of first degree of unspecified wrist, initial encounter -T23179D Burn of first degree of unspecified wrist, subsequent encounter -T23179S Burn of first degree of unspecified wrist, sequela -T23191A Burn of first degree of multiple sites of right wrist and hand, initial encounter -T23191D Burn of first degree of multiple sites of right wrist and hand, subsequent encounter -T23191S Burn of first degree of multiple sites of right wrist and hand, sequela -T23192A Burn of first degree of multiple sites of left wrist and hand, initial encounter -T23192D Burn of first degree of multiple sites of left wrist and hand, subsequent encounter -T23192S Burn of first degree of multiple sites of left wrist and hand, sequela -T23199A Burn of first degree of multiple sites of unspecified wrist and hand, initial encounter -T23199D Burn of first degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23199S Burn of first degree of multiple sites of unspecified wrist and hand, sequela -T23201A Burn of second degree of right hand, unspecified site, initial encounter -T23201D Burn of second degree of right hand, unspecified site, subsequent encounter -T23201S Burn of second degree of right hand, unspecified site, sequela -T23202A Burn of second degree of left hand, unspecified site, initial encounter -T23202D Burn of second degree of left hand, unspecified site, subsequent encounter -T23202S Burn of second degree of left hand, unspecified site, sequela -T23209A Burn of second degree of unspecified hand, unspecified site, initial encounter -T23209D Burn of second degree of unspecified hand, unspecified site, subsequent encounter -T23209S Burn of second degree of unspecified hand, unspecified site, sequela -T23211A Burn of second degree of right thumb (nail), initial encounter -T23211D Burn of second degree of right thumb (nail), subsequent encounter -T23211S Burn of second degree of right thumb (nail), sequela -T23212A Burn of second degree of left thumb (nail), initial encounter -T23212D Burn of second degree of left thumb (nail), subsequent encounter -T23212S Burn of second degree of left thumb (nail), sequela -T23219A Burn of second degree of unspecified thumb (nail), initial encounter -T23219D Burn of second degree of unspecified thumb (nail), subsequent encounter -T23219S Burn of second degree of unspecified thumb (nail), sequela -T23221A Burn of second degree of single right finger (nail) except thumb, initial encounter -T23221D Burn of second degree of single right finger (nail) except thumb, subsequent encounter -T23221S Burn of second degree of single right finger (nail) except thumb, sequela -T23222A Burn of second degree of single left finger (nail) except thumb, initial encounter -T23222D Burn of second degree of single left finger (nail) except thumb, subsequent encounter -T23222S Burn of second degree of single left finger (nail) except thumb, sequela -T23229A Burn of second degree of unspecified single finger (nail) except thumb, initial encounter -T23229D Burn of second degree of unspecified single finger (nail) except thumb, subsequent encounter -T23229S Burn of second degree of unspecified single finger (nail) except thumb, sequela -T23231A Burn of second degree of multiple right fingers (nail), not including thumb, initial encounter -T23231D Burn of second degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23231S Burn of second degree of multiple right fingers (nail), not including thumb, sequela -T23232A Burn of second degree of multiple left fingers (nail), not including thumb, initial encounter -T23232D Burn of second degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23232S Burn of second degree of multiple left fingers (nail), not including thumb, sequela -T23239A Burn of second degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23239D Burn of second degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23239S Burn of second degree of unspecified multiple fingers (nail), not including thumb, sequela -T23241A Burn of second degree of multiple right fingers (nail), including thumb, initial encounter -T23241D Burn of second degree of multiple right fingers (nail), including thumb, subsequent encounter -T23241S Burn of second degree of multiple right fingers (nail), including thumb, sequela -T23242A Burn of second degree of multiple left fingers (nail), including thumb, initial encounter -T23242D Burn of second degree of multiple left fingers (nail), including thumb, subsequent encounter -T23242S Burn of second degree of multiple left fingers (nail), including thumb, sequela -T23249A Burn of second degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23249D Burn of second degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23249S Burn of second degree of unspecified multiple fingers (nail), including thumb, sequela -T23251A Burn of second degree of right palm, initial encounter -T23251D Burn of second degree of right palm, subsequent encounter -T23251S Burn of second degree of right palm, sequela -T23252A Burn of second degree of left palm, initial encounter -T23252D Burn of second degree of left palm, subsequent encounter -T23252S Burn of second degree of left palm, sequela -T23259A Burn of second degree of unspecified palm, initial encounter -T23259D Burn of second degree of unspecified palm, subsequent encounter -T23259S Burn of second degree of unspecified palm, sequela -T23261A Burn of second degree of back of right hand, initial encounter -T23261D Burn of second degree of back of right hand, subsequent encounter -T23261S Burn of second degree of back of right hand, sequela -T23262A Burn of second degree of back of left hand, initial encounter -T23262D Burn of second degree of back of left hand, subsequent encounter -T23262S Burn of second degree of back of left hand, sequela -T23269A Burn of second degree of back of unspecified hand, initial encounter -T23269D Burn of second degree of back of unspecified hand, subsequent encounter -T23269S Burn of second degree of back of unspecified hand, sequela -T23271A Burn of second degree of right wrist, initial encounter -T23271D Burn of second degree of right wrist, subsequent encounter -T23271S Burn of second degree of right wrist, sequela -T23272A Burn of second degree of left wrist, initial encounter -T23272D Burn of second degree of left wrist, subsequent encounter -T23272S Burn of second degree of left wrist, sequela -T23279A Burn of second degree of unspecified wrist, initial encounter -T23279D Burn of second degree of unspecified wrist, subsequent encounter -T23279S Burn of second degree of unspecified wrist, sequela -T23291A Burn of second degree of multiple sites of right wrist and hand, initial encounter -T23291D Burn of second degree of multiple sites of right wrist and hand, subsequent encounter -T23291S Burn of second degree of multiple sites of right wrist and hand, sequela -T23292A Burn of second degree of multiple sites of left wrist and hand, initial encounter -T23292D Burn of second degree of multiple sites of left wrist and hand, subsequent encounter -T23292S Burn of second degree of multiple sites of left wrist and hand, sequela -T23299A Burn of second degree of multiple sites of unspecified wrist and hand, initial encounter -T23299D Burn of second degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23299S Burn of second degree of multiple sites of unspecified wrist and hand, sequela -T23301A Burn of third degree of right hand, unspecified site, initial encounter -T23301D Burn of third degree of right hand, unspecified site, subsequent encounter -T23301S Burn of third degree of right hand, unspecified site, sequela -T23302A Burn of third degree of left hand, unspecified site, initial encounter -T23302D Burn of third degree of left hand, unspecified site, subsequent encounter -T23302S Burn of third degree of left hand, unspecified site, sequela -T23309A Burn of third degree of unspecified hand, unspecified site, initial encounter -T23309D Burn of third degree of unspecified hand, unspecified site, subsequent encounter -T23309S Burn of third degree of unspecified hand, unspecified site, sequela -T23311A Burn of third degree of right thumb (nail), initial encounter -T23311D Burn of third degree of right thumb (nail), subsequent encounter -T23311S Burn of third degree of right thumb (nail), sequela -T23312A Burn of third degree of left thumb (nail), initial encounter -T23312D Burn of third degree of left thumb (nail), subsequent encounter -T23312S Burn of third degree of left thumb (nail), sequela -T23319A Burn of third degree of unspecified thumb (nail), initial encounter -T23319D Burn of third degree of unspecified thumb (nail), subsequent encounter -T23319S Burn of third degree of unspecified thumb (nail), sequela -T23321A Burn of third degree of single right finger (nail) except thumb, initial encounter -T23321D Burn of third degree of single right finger (nail) except thumb, subsequent encounter -T23321S Burn of third degree of single right finger (nail) except thumb, sequela -T23322A Burn of third degree of single left finger (nail) except thumb, initial encounter -T23322D Burn of third degree of single left finger (nail) except thumb, subsequent encounter -T23322S Burn of third degree of single left finger (nail) except thumb, sequela -T23329A Burn of third degree of unspecified single finger (nail) except thumb, initial encounter -T23329D Burn of third degree of unspecified single finger (nail) except thumb, subsequent encounter -T23329S Burn of third degree of unspecified single finger (nail) except thumb, sequela -T23331A Burn of third degree of multiple right fingers (nail), not including thumb, initial encounter -T23331D Burn of third degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23331S Burn of third degree of multiple right fingers (nail), not including thumb, sequela -T23332A Burn of third degree of multiple left fingers (nail), not including thumb, initial encounter -T23332D Burn of third degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23332S Burn of third degree of multiple left fingers (nail), not including thumb, sequela -T23339A Burn of third degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23339D Burn of third degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23339S Burn of third degree of unspecified multiple fingers (nail), not including thumb, sequela -T23341A Burn of third degree of multiple right fingers (nail), including thumb, initial encounter -T23341D Burn of third degree of multiple right fingers (nail), including thumb, subsequent encounter -T23341S Burn of third degree of multiple right fingers (nail), including thumb, sequela -T23342A Burn of third degree of multiple left fingers (nail), including thumb, initial encounter -T23342D Burn of third degree of multiple left fingers (nail), including thumb, subsequent encounter -T23342S Burn of third degree of multiple left fingers (nail), including thumb, sequela -T23349A Burn of third degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23349D Burn of third degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23349S Burn of third degree of unspecified multiple fingers (nail), including thumb, sequela -T23351A Burn of third degree of right palm, initial encounter -T23351D Burn of third degree of right palm, subsequent encounter -T23351S Burn of third degree of right palm, sequela -T23352A Burn of third degree of left palm, initial encounter -T23352D Burn of third degree of left palm, subsequent encounter -T23352S Burn of third degree of left palm, sequela -T23359A Burn of third degree of unspecified palm, initial encounter -T23359D Burn of third degree of unspecified palm, subsequent encounter -T23359S Burn of third degree of unspecified palm, sequela -T23361A Burn of third degree of back of right hand, initial encounter -T23361D Burn of third degree of back of right hand, subsequent encounter -T23361S Burn of third degree of back of right hand, sequela -T23362A Burn of third degree of back of left hand, initial encounter -T23362D Burn of third degree of back of left hand, subsequent encounter -T23362S Burn of third degree of back of left hand, sequela -T23369A Burn of third degree of back of unspecified hand, initial encounter -T23369D Burn of third degree of back of unspecified hand, subsequent encounter -T23369S Burn of third degree of back of unspecified hand, sequela -T23371A Burn of third degree of right wrist, initial encounter -T23371D Burn of third degree of right wrist, subsequent encounter -T23371S Burn of third degree of right wrist, sequela -T23372A Burn of third degree of left wrist, initial encounter -T23372D Burn of third degree of left wrist, subsequent encounter -T23372S Burn of third degree of left wrist, sequela -T23379A Burn of third degree of unspecified wrist, initial encounter -T23379D Burn of third degree of unspecified wrist, subsequent encounter -T23379S Burn of third degree of unspecified wrist, sequela -T23391A Burn of third degree of multiple sites of right wrist and hand, initial encounter -T23391D Burn of third degree of multiple sites of right wrist and hand, subsequent encounter -T23391S Burn of third degree of multiple sites of right wrist and hand, sequela -T23392A Burn of third degree of multiple sites of left wrist and hand, initial encounter -T23392D Burn of third degree of multiple sites of left wrist and hand, subsequent encounter -T23392S Burn of third degree of multiple sites of left wrist and hand, sequela -T23399A Burn of third degree of multiple sites of unspecified wrist and hand, initial encounter -T23399D Burn of third degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23399S Burn of third degree of multiple sites of unspecified wrist and hand, sequela -T23401A Corrosion of unspecified degree of right hand, unspecified site, initial encounter -T23401D Corrosion of unspecified degree of right hand, unspecified site, subsequent encounter -T23401S Corrosion of unspecified degree of right hand, unspecified site, sequela -T23402A Corrosion of unspecified degree of left hand, unspecified site, initial encounter -T23402D Corrosion of unspecified degree of left hand, unspecified site, subsequent encounter -T23402S Corrosion of unspecified degree of left hand, unspecified site, sequela -T23409A Corrosion of unspecified degree of unspecified hand, unspecified site, initial encounter -T23409D Corrosion of unspecified degree of unspecified hand, unspecified site, subsequent encounter -T23409S Corrosion of unspecified degree of unspecified hand, unspecified site, sequela -T23411A Corrosion of unspecified degree of right thumb (nail), initial encounter -T23411D Corrosion of unspecified degree of right thumb (nail), subsequent encounter -T23411S Corrosion of unspecified degree of right thumb (nail), sequela -T23412A Corrosion of unspecified degree of left thumb (nail), initial encounter -T23412D Corrosion of unspecified degree of left thumb (nail), subsequent encounter -T23412S Corrosion of unspecified degree of left thumb (nail), sequela -T23419A Corrosion of unspecified degree of unspecified thumb (nail), initial encounter -T23419D Corrosion of unspecified degree of unspecified thumb (nail), subsequent encounter -T23419S Corrosion of unspecified degree of unspecified thumb (nail), sequela -T23421A Corrosion of unspecified degree of single right finger (nail) except thumb, initial encounter -T23421D Corrosion of unspecified degree of single right finger (nail) except thumb, subsequent encounter -T23421S Corrosion of unspecified degree of single right finger (nail) except thumb, sequela -T23422A Corrosion of unspecified degree of single left finger (nail) except thumb, initial encounter -T23422D Corrosion of unspecified degree of single left finger (nail) except thumb, subsequent encounter -T23422S Corrosion of unspecified degree of single left finger (nail) except thumb, sequela -T23429A Corrosion of unspecified degree of unspecified single finger (nail) except thumb, initial encounter -T23429D Corrosion of unspecified degree of unspecified single finger (nail) except thumb, subsequent encounter -T23429S Corrosion of unspecified degree of unspecified single finger (nail) except thumb, sequela -T23431A Corrosion of unspecified degree of multiple right fingers (nail), not including thumb, initial encounter -T23431D Corrosion of unspecified degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23431S Corrosion of unspecified degree of multiple right fingers (nail), not including thumb, sequela -T23432A Corrosion of unspecified degree of multiple left fingers (nail), not including thumb, initial encounter -T23432D Corrosion of unspecified degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23432S Corrosion of unspecified degree of multiple left fingers (nail), not including thumb, sequela -T23439A Corrosion of unspecified degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23439D Corrosion of unspecified degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23439S Corrosion of unspecified degree of unspecified multiple fingers (nail), not including thumb, sequela -T23441A Corrosion of unspecified degree of multiple right fingers (nail), including thumb, initial encounter -T23441D Corrosion of unspecified degree of multiple right fingers (nail), including thumb, subsequent encounter -T23441S Corrosion of unspecified degree of multiple right fingers (nail), including thumb, sequela -T23442A Corrosion of unspecified degree of multiple left fingers (nail), including thumb, initial encounter -T23442D Corrosion of unspecified degree of multiple left fingers (nail), including thumb, subsequent encounter -T23442S Corrosion of unspecified degree of multiple left fingers (nail), including thumb, sequela -T23449A Corrosion of unspecified degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23449D Corrosion of unspecified degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23449S Corrosion of unspecified degree of unspecified multiple fingers (nail), including thumb, sequela -T23451A Corrosion of unspecified degree of right palm, initial encounter -T23451D Corrosion of unspecified degree of right palm, subsequent encounter -T23451S Corrosion of unspecified degree of right palm, sequela -T23452A Corrosion of unspecified degree of left palm, initial encounter -T23452D Corrosion of unspecified degree of left palm, subsequent encounter -T23452S Corrosion of unspecified degree of left palm, sequela -T23459A Corrosion of unspecified degree of unspecified palm, initial encounter -T23459D Corrosion of unspecified degree of unspecified palm, subsequent encounter -T23459S Corrosion of unspecified degree of unspecified palm, sequela -T23461A Corrosion of unspecified degree of back of right hand, initial encounter -T23461D Corrosion of unspecified degree of back of right hand, subsequent encounter -T23461S Corrosion of unspecified degree of back of right hand, sequela -T23462A Corrosion of unspecified degree of back of left hand, initial encounter -T23462D Corrosion of unspecified degree of back of left hand, subsequent encounter -T23462S Corrosion of unspecified degree of back of left hand, sequela -T23469A Corrosion of unspecified degree of back of unspecified hand, initial encounter -T23469D Corrosion of unspecified degree of back of unspecified hand, subsequent encounter -T23469S Corrosion of unspecified degree of back of unspecified hand, sequela -T23471A Corrosion of unspecified degree of right wrist, initial encounter -T23471D Corrosion of unspecified degree of right wrist, subsequent encounter -T23471S Corrosion of unspecified degree of right wrist, sequela -T23472A Corrosion of unspecified degree of left wrist, initial encounter -T23472D Corrosion of unspecified degree of left wrist, subsequent encounter -T23472S Corrosion of unspecified degree of left wrist, sequela -T23479A Corrosion of unspecified degree of unspecified wrist, initial encounter -T23479D Corrosion of unspecified degree of unspecified wrist, subsequent encounter -T23479S Corrosion of unspecified degree of unspecified wrist, sequela -T23491A Corrosion of unspecified degree of multiple sites of right wrist and hand, initial encounter -T23491D Corrosion of unspecified degree of multiple sites of right wrist and hand, subsequent encounter -T23491S Corrosion of unspecified degree of multiple sites of right wrist and hand, sequela -T23492A Corrosion of unspecified degree of multiple sites of left wrist and hand, initial encounter -T23492D Corrosion of unspecified degree of multiple sites of left wrist and hand, subsequent encounter -T23492S Corrosion of unspecified degree of multiple sites of left wrist and hand, sequela -T23499A Corrosion of unspecified degree of multiple sites of unspecified wrist and hand, initial encounter -T23499D Corrosion of unspecified degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23499S Corrosion of unspecified degree of multiple sites of unspecified wrist and hand, sequela -T23501A Corrosion of first degree of right hand, unspecified site, initial encounter -T23501D Corrosion of first degree of right hand, unspecified site, subsequent encounter -T23501S Corrosion of first degree of right hand, unspecified site, sequela -T23502A Corrosion of first degree of left hand, unspecified site, initial encounter -T23502D Corrosion of first degree of left hand, unspecified site, subsequent encounter -T23502S Corrosion of first degree of left hand, unspecified site, sequela -T23509A Corrosion of first degree of unspecified hand, unspecified site, initial encounter -T23509D Corrosion of first degree of unspecified hand, unspecified site, subsequent encounter -T23509S Corrosion of first degree of unspecified hand, unspecified site, sequela -T23511A Corrosion of first degree of right thumb (nail), initial encounter -T23511D Corrosion of first degree of right thumb (nail), subsequent encounter -T23511S Corrosion of first degree of right thumb (nail), sequela -T23512A Corrosion of first degree of left thumb (nail), initial encounter -T23512D Corrosion of first degree of left thumb (nail), subsequent encounter -T23512S Corrosion of first degree of left thumb (nail), sequela -T23519A Corrosion of first degree of unspecified thumb (nail), initial encounter -T23519D Corrosion of first degree of unspecified thumb (nail), subsequent encounter -T23519S Corrosion of first degree of unspecified thumb (nail), sequela -T23521A Corrosion of first degree of single right finger (nail) except thumb, initial encounter -T23521D Corrosion of first degree of single right finger (nail) except thumb, subsequent encounter -T23521S Corrosion of first degree of single right finger (nail) except thumb, sequela -T23522A Corrosion of first degree of single left finger (nail) except thumb, initial encounter -T23522D Corrosion of first degree of single left finger (nail) except thumb, subsequent encounter -T23522S Corrosion of first degree of single left finger (nail) except thumb, sequela -T23529A Corrosion of first degree of unspecified single finger (nail) except thumb, initial encounter -T23529D Corrosion of first degree of unspecified single finger (nail) except thumb, subsequent encounter -T23529S Corrosion of first degree of unspecified single finger (nail) except thumb, sequela -T23531A Corrosion of first degree of multiple right fingers (nail), not including thumb, initial encounter -T23531D Corrosion of first degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23531S Corrosion of first degree of multiple right fingers (nail), not including thumb, sequela -T23532A Corrosion of first degree of multiple left fingers (nail), not including thumb, initial encounter -T23532D Corrosion of first degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23532S Corrosion of first degree of multiple left fingers (nail), not including thumb, sequela -T23539A Corrosion of first degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23539D Corrosion of first degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23539S Corrosion of first degree of unspecified multiple fingers (nail), not including thumb, sequela -T23541A Corrosion of first degree of multiple right fingers (nail), including thumb, initial encounter -T23541D Corrosion of first degree of multiple right fingers (nail), including thumb, subsequent encounter -T23541S Corrosion of first degree of multiple right fingers (nail), including thumb, sequela -T23542A Corrosion of first degree of multiple left fingers (nail), including thumb, initial encounter -T23542D Corrosion of first degree of multiple left fingers (nail), including thumb, subsequent encounter -T23542S Corrosion of first degree of multiple left fingers (nail), including thumb, sequela -T23549A Corrosion of first degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23549D Corrosion of first degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23549S Corrosion of first degree of unspecified multiple fingers (nail), including thumb, sequela -T23551A Corrosion of first degree of right palm, initial encounter -T23551D Corrosion of first degree of right palm, subsequent encounter -T23551S Corrosion of first degree of right palm, sequela -T23552A Corrosion of first degree of left palm, initial encounter -T23552D Corrosion of first degree of left palm, subsequent encounter -T23552S Corrosion of first degree of left palm, sequela -T23559A Corrosion of first degree of unspecified palm, initial encounter -T23559D Corrosion of first degree of unspecified palm, subsequent encounter -T23559S Corrosion of first degree of unspecified palm, sequela -T23561A Corrosion of first degree of back of right hand, initial encounter -T23561D Corrosion of first degree of back of right hand, subsequent encounter -T23561S Corrosion of first degree of back of right hand, sequela -T23562A Corrosion of first degree of back of left hand, initial encounter -T23562D Corrosion of first degree of back of left hand, subsequent encounter -T23562S Corrosion of first degree of back of left hand, sequela -T23569A Corrosion of first degree of back of unspecified hand, initial encounter -T23569D Corrosion of first degree of back of unspecified hand, subsequent encounter -T23569S Corrosion of first degree of back of unspecified hand, sequela -T23571A Corrosion of first degree of right wrist, initial encounter -T23571D Corrosion of first degree of right wrist, subsequent encounter -T23571S Corrosion of first degree of right wrist, sequela -T23572A Corrosion of first degree of left wrist, initial encounter -T23572D Corrosion of first degree of left wrist, subsequent encounter -T23572S Corrosion of first degree of left wrist, sequela -T23579A Corrosion of first degree of unspecified wrist, initial encounter -T23579D Corrosion of first degree of unspecified wrist, subsequent encounter -T23579S Corrosion of first degree of unspecified wrist, sequela -T23591A Corrosion of first degree of multiple sites of right wrist and hand, initial encounter -T23591D Corrosion of first degree of multiple sites of right wrist and hand, subsequent encounter -T23591S Corrosion of first degree of multiple sites of right wrist and hand, sequela -T23592A Corrosion of first degree of multiple sites of left wrist and hand, initial encounter -T23592D Corrosion of first degree of multiple sites of left wrist and hand, subsequent encounter -T23592S Corrosion of first degree of multiple sites of left wrist and hand, sequela -T23599A Corrosion of first degree of multiple sites of unspecified wrist and hand, initial encounter -T23599D Corrosion of first degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23599S Corrosion of first degree of multiple sites of unspecified wrist and hand, sequela -T23601A Corrosion of second degree of right hand, unspecified site, initial encounter -T23601D Corrosion of second degree of right hand, unspecified site, subsequent encounter -T23601S Corrosion of second degree of right hand, unspecified site, sequela -T23602A Corrosion of second degree of left hand, unspecified site, initial encounter -T23602D Corrosion of second degree of left hand, unspecified site, subsequent encounter -T23602S Corrosion of second degree of left hand, unspecified site, sequela -T23609A Corrosion of second degree of unspecified hand, unspecified site, initial encounter -T23609D Corrosion of second degree of unspecified hand, unspecified site, subsequent encounter -T23609S Corrosion of second degree of unspecified hand, unspecified site, sequela -T23611A Corrosion of second degree of right thumb (nail), initial encounter -T23611D Corrosion of second degree of right thumb (nail), subsequent encounter -T23611S Corrosion of second degree of right thumb (nail), sequela -T23612A Corrosion of second degree of left thumb (nail), initial encounter -T23612D Corrosion of second degree of left thumb (nail), subsequent encounter -T23612S Corrosion of second degree of left thumb (nail), sequela -T23619A Corrosion of second degree of unspecified thumb (nail), initial encounter -T23619D Corrosion of second degree of unspecified thumb (nail), subsequent encounter -T23619S Corrosion of second degree of unspecified thumb (nail), sequela -T23621A Corrosion of second degree of single right finger (nail) except thumb, initial encounter -T23621D Corrosion of second degree of single right finger (nail) except thumb, subsequent encounter -T23621S Corrosion of second degree of single right finger (nail) except thumb, sequela -T23622A Corrosion of second degree of single left finger (nail) except thumb, initial encounter -T23622D Corrosion of second degree of single left finger (nail) except thumb, subsequent encounter -T23622S Corrosion of second degree of single left finger (nail) except thumb, sequela -T23629A Corrosion of second degree of unspecified single finger (nail) except thumb, initial encounter -T23629D Corrosion of second degree of unspecified single finger (nail) except thumb, subsequent encounter -T23629S Corrosion of second degree of unspecified single finger (nail) except thumb, sequela -T23631A Corrosion of second degree of multiple right fingers (nail), not including thumb, initial encounter -T23631D Corrosion of second degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23631S Corrosion of second degree of multiple right fingers (nail), not including thumb, sequela -T23632A Corrosion of second degree of multiple left fingers (nail), not including thumb, initial encounter -T23632D Corrosion of second degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23632S Corrosion of second degree of multiple left fingers (nail), not including thumb, sequela -T23639A Corrosion of second degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23639D Corrosion of second degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23639S Corrosion of second degree of unspecified multiple fingers (nail), not including thumb, sequela -T23641A Corrosion of second degree of multiple right fingers (nail), including thumb, initial encounter -T23641D Corrosion of second degree of multiple right fingers (nail), including thumb, subsequent encounter -T23641S Corrosion of second degree of multiple right fingers (nail), including thumb, sequela -T23642A Corrosion of second degree of multiple left fingers (nail), including thumb, initial encounter -T23642D Corrosion of second degree of multiple left fingers (nail), including thumb, subsequent encounter -T23642S Corrosion of second degree of multiple left fingers (nail), including thumb, sequela -T23649A Corrosion of second degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23649D Corrosion of second degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23649S Corrosion of second degree of unspecified multiple fingers (nail), including thumb, sequela -T23651A Corrosion of second degree of right palm, initial encounter -T23651D Corrosion of second degree of right palm, subsequent encounter -T23651S Corrosion of second degree of right palm, sequela -T23652A Corrosion of second degree of left palm, initial encounter -T23652D Corrosion of second degree of left palm, subsequent encounter -T23652S Corrosion of second degree of left palm, sequela -T23659A Corrosion of second degree of unspecified palm, initial encounter -T23659D Corrosion of second degree of unspecified palm, subsequent encounter -T23659S Corrosion of second degree of unspecified palm, sequela -T23661A Corrosion of second degree back of right hand, initial encounter -T23661D Corrosion of second degree back of right hand, subsequent encounter -T23661S Corrosion of second degree back of right hand, sequela -T23662A Corrosion of second degree back of left hand, initial encounter -T23662D Corrosion of second degree back of left hand, subsequent encounter -T23662S Corrosion of second degree back of left hand, sequela -T23669A Corrosion of second degree back of unspecified hand, initial encounter -T23669D Corrosion of second degree back of unspecified hand, subsequent encounter -T23669S Corrosion of second degree back of unspecified hand, sequela -T23671A Corrosion of second degree of right wrist, initial encounter -T23671D Corrosion of second degree of right wrist, subsequent encounter -T23671S Corrosion of second degree of right wrist, sequela -T23672A Corrosion of second degree of left wrist, initial encounter -T23672D Corrosion of second degree of left wrist, subsequent encounter -T23672S Corrosion of second degree of left wrist, sequela -T23679A Corrosion of second degree of unspecified wrist, initial encounter -T23679D Corrosion of second degree of unspecified wrist, subsequent encounter -T23679S Corrosion of second degree of unspecified wrist, sequela -T23691A Corrosion of second degree of multiple sites of right wrist and hand, initial encounter -T23691D Corrosion of second degree of multiple sites of right wrist and hand, subsequent encounter -T23691S Corrosion of second degree of multiple sites of right wrist and hand, sequela -T23692A Corrosion of second degree of multiple sites of left wrist and hand, initial encounter -T23692D Corrosion of second degree of multiple sites of left wrist and hand, subsequent encounter -T23692S Corrosion of second degree of multiple sites of left wrist and hand, sequela -T23699A Corrosion of second degree of multiple sites of unspecified wrist and hand, initial encounter -T23699D Corrosion of second degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23699S Corrosion of second degree of multiple sites of unspecified wrist and hand, sequela -T23701A Corrosion of third degree of right hand, unspecified site, initial encounter -T23701D Corrosion of third degree of right hand, unspecified site, subsequent encounter -T23701S Corrosion of third degree of right hand, unspecified site, sequela -T23702A Corrosion of third degree of left hand, unspecified site, initial encounter -T23702D Corrosion of third degree of left hand, unspecified site, subsequent encounter -T23702S Corrosion of third degree of left hand, unspecified site, sequela -T23709A Corrosion of third degree of unspecified hand, unspecified site, initial encounter -T23709D Corrosion of third degree of unspecified hand, unspecified site, subsequent encounter -T23709S Corrosion of third degree of unspecified hand, unspecified site, sequela -T23711A Corrosion of third degree of right thumb (nail), initial encounter -T23711D Corrosion of third degree of right thumb (nail), subsequent encounter -T23711S Corrosion of third degree of right thumb (nail), sequela -T23712A Corrosion of third degree of left thumb (nail), initial encounter -T23712D Corrosion of third degree of left thumb (nail), subsequent encounter -T23712S Corrosion of third degree of left thumb (nail), sequela -T23719A Corrosion of third degree of unspecified thumb (nail), initial encounter -T23719D Corrosion of third degree of unspecified thumb (nail), subsequent encounter -T23719S Corrosion of third degree of unspecified thumb (nail), sequela -T23721A Corrosion of third degree of single right finger (nail) except thumb, initial encounter -T23721D Corrosion of third degree of single right finger (nail) except thumb, subsequent encounter -T23721S Corrosion of third degree of single right finger (nail) except thumb, sequela -T23722A Corrosion of third degree of single left finger (nail) except thumb, initial encounter -T23722D Corrosion of third degree of single left finger (nail) except thumb, subsequent encounter -T23722S Corrosion of third degree of single left finger (nail) except thumb, sequela -T23729A Corrosion of third degree of unspecified single finger (nail) except thumb, initial encounter -T23729D Corrosion of third degree of unspecified single finger (nail) except thumb, subsequent encounter -T23729S Corrosion of third degree of unspecified single finger (nail) except thumb, sequela -T23731A Corrosion of third degree of multiple right fingers (nail), not including thumb, initial encounter -T23731D Corrosion of third degree of multiple right fingers (nail), not including thumb, subsequent encounter -T23731S Corrosion of third degree of multiple right fingers (nail), not including thumb, sequela -T23732A Corrosion of third degree of multiple left fingers (nail), not including thumb, initial encounter -T23732D Corrosion of third degree of multiple left fingers (nail), not including thumb, subsequent encounter -T23732S Corrosion of third degree of multiple left fingers (nail), not including thumb, sequela -T23739A Corrosion of third degree of unspecified multiple fingers (nail), not including thumb, initial encounter -T23739D Corrosion of third degree of unspecified multiple fingers (nail), not including thumb, subsequent encounter -T23739S Corrosion of third degree of unspecified multiple fingers (nail), not including thumb, sequela -T23741A Corrosion of third degree of multiple right fingers (nail), including thumb, initial encounter -T23741D Corrosion of third degree of multiple right fingers (nail), including thumb, subsequent encounter -T23741S Corrosion of third degree of multiple right fingers (nail), including thumb, sequela -T23742A Corrosion of third degree of multiple left fingers (nail), including thumb, initial encounter -T23742D Corrosion of third degree of multiple left fingers (nail), including thumb, subsequent encounter -T23742S Corrosion of third degree of multiple left fingers (nail), including thumb, sequela -T23749A Corrosion of third degree of unspecified multiple fingers (nail), including thumb, initial encounter -T23749D Corrosion of third degree of unspecified multiple fingers (nail), including thumb, subsequent encounter -T23749S Corrosion of third degree of unspecified multiple fingers (nail), including thumb, sequela -T23751A Corrosion of third degree of right palm, initial encounter -T23751D Corrosion of third degree of right palm, subsequent encounter -T23751S Corrosion of third degree of right palm, sequela -T23752A Corrosion of third degree of left palm, initial encounter -T23752D Corrosion of third degree of left palm, subsequent encounter -T23752S Corrosion of third degree of left palm, sequela -T23759A Corrosion of third degree of unspecified palm, initial encounter -T23759D Corrosion of third degree of unspecified palm, subsequent encounter -T23759S Corrosion of third degree of unspecified palm, sequela -T23761A Corrosion of third degree of back of right hand, initial encounter -T23761D Corrosion of third degree of back of right hand, subsequent encounter -T23761S Corrosion of third degree of back of right hand, sequela -T23762A Corrosion of third degree of back of left hand, initial encounter -T23762D Corrosion of third degree of back of left hand, subsequent encounter -T23762S Corrosion of third degree of back of left hand, sequela -T23769A Corrosion of third degree back of unspecified hand, initial encounter -T23769D Corrosion of third degree back of unspecified hand, subsequent encounter -T23769S Corrosion of third degree back of unspecified hand, sequela -T23771A Corrosion of third degree of right wrist, initial encounter -T23771D Corrosion of third degree of right wrist, subsequent encounter -T23771S Corrosion of third degree of right wrist, sequela -T23772A Corrosion of third degree of left wrist, initial encounter -T23772D Corrosion of third degree of left wrist, subsequent encounter -T23772S Corrosion of third degree of left wrist, sequela -T23779A Corrosion of third degree of unspecified wrist, initial encounter -T23779D Corrosion of third degree of unspecified wrist, subsequent encounter -T23779S Corrosion of third degree of unspecified wrist, sequela -T23791A Corrosion of third degree of multiple sites of right wrist and hand, initial encounter -T23791D Corrosion of third degree of multiple sites of right wrist and hand, subsequent encounter -T23791S Corrosion of third degree of multiple sites of right wrist and hand, sequela -T23792A Corrosion of third degree of multiple sites of left wrist and hand, initial encounter -T23792D Corrosion of third degree of multiple sites of left wrist and hand, subsequent encounter -T23792S Corrosion of third degree of multiple sites of left wrist and hand, sequela -T23799A Corrosion of third degree of multiple sites of unspecified wrist and hand, initial encounter -T23799D Corrosion of third degree of multiple sites of unspecified wrist and hand, subsequent encounter -T23799S Corrosion of third degree of multiple sites of unspecified wrist and hand, sequela -T24001A Burn of unspecified degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24001D Burn of unspecified degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24001S Burn of unspecified degree of unspecified site of right lower limb, except ankle and foot, sequela -T24002A Burn of unspecified degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24002D Burn of unspecified degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24002S Burn of unspecified degree of unspecified site of left lower limb, except ankle and foot, sequela -T24009A Burn of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24009D Burn of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24009S Burn of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24011A Burn of unspecified degree of right thigh, initial encounter -T24011D Burn of unspecified degree of right thigh, subsequent encounter -T24011S Burn of unspecified degree of right thigh, sequela -T24012A Burn of unspecified degree of left thigh, initial encounter -T24012D Burn of unspecified degree of left thigh, subsequent encounter -T24012S Burn of unspecified degree of left thigh, sequela -T24019A Burn of unspecified degree of unspecified thigh, initial encounter -T24019D Burn of unspecified degree of unspecified thigh, subsequent encounter -T24019S Burn of unspecified degree of unspecified thigh, sequela -T24021A Burn of unspecified degree of right knee, initial encounter -T24021D Burn of unspecified degree of right knee, subsequent encounter -T24021S Burn of unspecified degree of right knee, sequela -T24022A Burn of unspecified degree of left knee, initial encounter -T24022D Burn of unspecified degree of left knee, subsequent encounter -T24022S Burn of unspecified degree of left knee, sequela -T24029A Burn of unspecified degree of unspecified knee, initial encounter -T24029D Burn of unspecified degree of unspecified knee, subsequent encounter -T24029S Burn of unspecified degree of unspecified knee, sequela -T24031A Burn of unspecified degree of right lower leg, initial encounter -T24031D Burn of unspecified degree of right lower leg, subsequent encounter -T24031S Burn of unspecified degree of right lower leg, sequela -T24032A Burn of unspecified degree of left lower leg, initial encounter -T24032D Burn of unspecified degree of left lower leg, subsequent encounter -T24032S Burn of unspecified degree of left lower leg, sequela -T24039A Burn of unspecified degree of unspecified lower leg, initial encounter -T24039D Burn of unspecified degree of unspecified lower leg, subsequent encounter -T24039S Burn of unspecified degree of unspecified lower leg, sequela -T24091A Burn of unspecified degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24091D Burn of unspecified degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24091S Burn of unspecified degree of multiple sites of right lower limb, except ankle and foot, sequela -T24092A Burn of unspecified degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24092D Burn of unspecified degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24092S Burn of unspecified degree of multiple sites of left lower limb, except ankle and foot, sequela -T24099A Burn of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24099D Burn of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24099S Burn of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24101A Burn of first degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24101D Burn of first degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24101S Burn of first degree of unspecified site of right lower limb, except ankle and foot, sequela -T24102A Burn of first degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24102D Burn of first degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24102S Burn of first degree of unspecified site of left lower limb, except ankle and foot, sequela -T24109A Burn of first degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24109D Burn of first degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24109S Burn of first degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24111A Burn of first degree of right thigh, initial encounter -T24111D Burn of first degree of right thigh, subsequent encounter -T24111S Burn of first degree of right thigh, sequela -T24112A Burn of first degree of left thigh, initial encounter -T24112D Burn of first degree of left thigh, subsequent encounter -T24112S Burn of first degree of left thigh, sequela -T24119A Burn of first degree of unspecified thigh, initial encounter -T24119D Burn of first degree of unspecified thigh, subsequent encounter -T24119S Burn of first degree of unspecified thigh, sequela -T24121A Burn of first degree of right knee, initial encounter -T24121D Burn of first degree of right knee, subsequent encounter -T24121S Burn of first degree of right knee, sequela -T24122A Burn of first degree of left knee, initial encounter -T24122D Burn of first degree of left knee, subsequent encounter -T24122S Burn of first degree of left knee, sequela -T24129A Burn of first degree of unspecified knee, initial encounter -T24129D Burn of first degree of unspecified knee, subsequent encounter -T24129S Burn of first degree of unspecified knee, sequela -T24131A Burn of first degree of right lower leg, initial encounter -T24131D Burn of first degree of right lower leg, subsequent encounter -T24131S Burn of first degree of right lower leg, sequela -T24132A Burn of first degree of left lower leg, initial encounter -T24132D Burn of first degree of left lower leg, subsequent encounter -T24132S Burn of first degree of left lower leg, sequela -T24139A Burn of first degree of unspecified lower leg, initial encounter -T24139D Burn of first degree of unspecified lower leg, subsequent encounter -T24139S Burn of first degree of unspecified lower leg, sequela -T24191A Burn of first degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24191D Burn of first degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24191S Burn of first degree of multiple sites of right lower limb, except ankle and foot, sequela -T24192A Burn of first degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24192D Burn of first degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24192S Burn of first degree of multiple sites of left lower limb, except ankle and foot, sequela -T24199A Burn of first degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24199D Burn of first degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24199S Burn of first degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24201A Burn of second degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24201D Burn of second degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24201S Burn of second degree of unspecified site of right lower limb, except ankle and foot, sequela -T24202A Burn of second degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24202D Burn of second degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24202S Burn of second degree of unspecified site of left lower limb, except ankle and foot, sequela -T24209A Burn of second degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24209D Burn of second degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24209S Burn of second degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24211A Burn of second degree of right thigh, initial encounter -T24211D Burn of second degree of right thigh, subsequent encounter -T24211S Burn of second degree of right thigh, sequela -T24212A Burn of second degree of left thigh, initial encounter -T24212D Burn of second degree of left thigh, subsequent encounter -T24212S Burn of second degree of left thigh, sequela -T24219A Burn of second degree of unspecified thigh, initial encounter -T24219D Burn of second degree of unspecified thigh, subsequent encounter -T24219S Burn of second degree of unspecified thigh, sequela -T24221A Burn of second degree of right knee, initial encounter -T24221D Burn of second degree of right knee, subsequent encounter -T24221S Burn of second degree of right knee, sequela -T24222A Burn of second degree of left knee, initial encounter -T24222D Burn of second degree of left knee, subsequent encounter -T24222S Burn of second degree of left knee, sequela -T24229A Burn of second degree of unspecified knee, initial encounter -T24229D Burn of second degree of unspecified knee, subsequent encounter -T24229S Burn of second degree of unspecified knee, sequela -T24231A Burn of second degree of right lower leg, initial encounter -T24231D Burn of second degree of right lower leg, subsequent encounter -T24231S Burn of second degree of right lower leg, sequela -T24232A Burn of second degree of left lower leg, initial encounter -T24232D Burn of second degree of left lower leg, subsequent encounter -T24232S Burn of second degree of left lower leg, sequela -T24239A Burn of second degree of unspecified lower leg, initial encounter -T24239D Burn of second degree of unspecified lower leg, subsequent encounter -T24239S Burn of second degree of unspecified lower leg, sequela -T24291A Burn of second degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24291D Burn of second degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24291S Burn of second degree of multiple sites of right lower limb, except ankle and foot, sequela -T24292A Burn of second degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24292D Burn of second degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24292S Burn of second degree of multiple sites of left lower limb, except ankle and foot, sequela -T24299A Burn of second degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24299D Burn of second degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24299S Burn of second degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24301A Burn of third degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24301D Burn of third degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24301S Burn of third degree of unspecified site of right lower limb, except ankle and foot, sequela -T24302A Burn of third degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24302D Burn of third degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24302S Burn of third degree of unspecified site of left lower limb, except ankle and foot, sequela -T24309A Burn of third degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24309D Burn of third degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24309S Burn of third degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24311A Burn of third degree of right thigh, initial encounter -T24311D Burn of third degree of right thigh, subsequent encounter -T24311S Burn of third degree of right thigh, sequela -T24312A Burn of third degree of left thigh, initial encounter -T24312D Burn of third degree of left thigh, subsequent encounter -T24312S Burn of third degree of left thigh, sequela -T24319A Burn of third degree of unspecified thigh, initial encounter -T24319D Burn of third degree of unspecified thigh, subsequent encounter -T24319S Burn of third degree of unspecified thigh, sequela -T24321A Burn of third degree of right knee, initial encounter -T24321D Burn of third degree of right knee, subsequent encounter -T24321S Burn of third degree of right knee, sequela -T24322A Burn of third degree of left knee, initial encounter -T24322D Burn of third degree of left knee, subsequent encounter -T24322S Burn of third degree of left knee, sequela -T24329A Burn of third degree of unspecified knee, initial encounter -T24329D Burn of third degree of unspecified knee, subsequent encounter -T24329S Burn of third degree of unspecified knee, sequela -T24331A Burn of third degree of right lower leg, initial encounter -T24331D Burn of third degree of right lower leg, subsequent encounter -T24331S Burn of third degree of right lower leg, sequela -T24332A Burn of third degree of left lower leg, initial encounter -T24332D Burn of third degree of left lower leg, subsequent encounter -T24332S Burn of third degree of left lower leg, sequela -T24339A Burn of third degree of unspecified lower leg, initial encounter -T24339D Burn of third degree of unspecified lower leg, subsequent encounter -T24339S Burn of third degree of unspecified lower leg, sequela -T24391A Burn of third degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24391D Burn of third degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24391S Burn of third degree of multiple sites of right lower limb, except ankle and foot, sequela -T24392A Burn of third degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24392D Burn of third degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24392S Burn of third degree of multiple sites of left lower limb, except ankle and foot, sequela -T24399A Burn of third degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24399D Burn of third degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24399S Burn of third degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24401A Corrosion of unspecified degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24401D Corrosion of unspecified degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24401S Corrosion of unspecified degree of unspecified site of right lower limb, except ankle and foot, sequela -T24402A Corrosion of unspecified degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24402D Corrosion of unspecified degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24402S Corrosion of unspecified degree of unspecified site of left lower limb, except ankle and foot, sequela -T24409A Corrosion of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24409D Corrosion of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24409S Corrosion of unspecified degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24411A Corrosion of unspecified degree of right thigh, initial encounter -T24411D Corrosion of unspecified degree of right thigh, subsequent encounter -T24411S Corrosion of unspecified degree of right thigh, sequela -T24412A Corrosion of unspecified degree of left thigh, initial encounter -T24412D Corrosion of unspecified degree of left thigh, subsequent encounter -T24412S Corrosion of unspecified degree of left thigh, sequela -T24419A Corrosion of unspecified degree of unspecified thigh, initial encounter -T24419D Corrosion of unspecified degree of unspecified thigh, subsequent encounter -T24419S Corrosion of unspecified degree of unspecified thigh, sequela -T24421A Corrosion of unspecified degree of right knee, initial encounter -T24421D Corrosion of unspecified degree of right knee, subsequent encounter -T24421S Corrosion of unspecified degree of right knee, sequela -T24422A Corrosion of unspecified degree of left knee, initial encounter -T24422D Corrosion of unspecified degree of left knee, subsequent encounter -T24422S Corrosion of unspecified degree of left knee, sequela -T24429A Corrosion of unspecified degree of unspecified knee, initial encounter -T24429D Corrosion of unspecified degree of unspecified knee, subsequent encounter -T24429S Corrosion of unspecified degree of unspecified knee, sequela -T24431A Corrosion of unspecified degree of right lower leg, initial encounter -T24431D Corrosion of unspecified degree of right lower leg, subsequent encounter -T24431S Corrosion of unspecified degree of right lower leg, sequela -T24432A Corrosion of unspecified degree of left lower leg, initial encounter -T24432D Corrosion of unspecified degree of left lower leg, subsequent encounter -T24432S Corrosion of unspecified degree of left lower leg, sequela -T24439A Corrosion of unspecified degree of unspecified lower leg, initial encounter -T24439D Corrosion of unspecified degree of unspecified lower leg, subsequent encounter -T24439S Corrosion of unspecified degree of unspecified lower leg, sequela -T24491A Corrosion of unspecified degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24491D Corrosion of unspecified degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24491S Corrosion of unspecified degree of multiple sites of right lower limb, except ankle and foot, sequela -T24492A Corrosion of unspecified degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24492D Corrosion of unspecified degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24492S Corrosion of unspecified degree of multiple sites of left lower limb, except ankle and foot, sequela -T24499A Corrosion of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24499D Corrosion of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24499S Corrosion of unspecified degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24501A Corrosion of first degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24501D Corrosion of first degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24501S Corrosion of first degree of unspecified site of right lower limb, except ankle and foot, sequela -T24502A Corrosion of first degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24502D Corrosion of first degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24502S Corrosion of first degree of unspecified site of left lower limb, except ankle and foot, sequela -T24509A Corrosion of first degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24509D Corrosion of first degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24509S Corrosion of first degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24511A Corrosion of first degree of right thigh, initial encounter -T24511D Corrosion of first degree of right thigh, subsequent encounter -T24511S Corrosion of first degree of right thigh, sequela -T24512A Corrosion of first degree of left thigh, initial encounter -T24512D Corrosion of first degree of left thigh, subsequent encounter -T24512S Corrosion of first degree of left thigh, sequela -T24519A Corrosion of first degree of unspecified thigh, initial encounter -T24519D Corrosion of first degree of unspecified thigh, subsequent encounter -T24519S Corrosion of first degree of unspecified thigh, sequela -T24521A Corrosion of first degree of right knee, initial encounter -T24521D Corrosion of first degree of right knee, subsequent encounter -T24521S Corrosion of first degree of right knee, sequela -T24522A Corrosion of first degree of left knee, initial encounter -T24522D Corrosion of first degree of left knee, subsequent encounter -T24522S Corrosion of first degree of left knee, sequela -T24529A Corrosion of first degree of unspecified knee, initial encounter -T24529D Corrosion of first degree of unspecified knee, subsequent encounter -T24529S Corrosion of first degree of unspecified knee, sequela -T24531A Corrosion of first degree of right lower leg, initial encounter -T24531D Corrosion of first degree of right lower leg, subsequent encounter -T24531S Corrosion of first degree of right lower leg, sequela -T24532A Corrosion of first degree of left lower leg, initial encounter -T24532D Corrosion of first degree of left lower leg, subsequent encounter -T24532S Corrosion of first degree of left lower leg, sequela -T24539A Corrosion of first degree of unspecified lower leg, initial encounter -T24539D Corrosion of first degree of unspecified lower leg, subsequent encounter -T24539S Corrosion of first degree of unspecified lower leg, sequela -T24591A Corrosion of first degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24591D Corrosion of first degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24591S Corrosion of first degree of multiple sites of right lower limb, except ankle and foot, sequela -T24592A Corrosion of first degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24592D Corrosion of first degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24592S Corrosion of first degree of multiple sites of left lower limb, except ankle and foot, sequela -T24599A Corrosion of first degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24599D Corrosion of first degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24599S Corrosion of first degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24601A Corrosion of second degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24601D Corrosion of second degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24601S Corrosion of second degree of unspecified site of right lower limb, except ankle and foot, sequela -T24602A Corrosion of second degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24602D Corrosion of second degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24602S Corrosion of second degree of unspecified site of left lower limb, except ankle and foot, sequela -T24609A Corrosion of second degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24609D Corrosion of second degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24609S Corrosion of second degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24611A Corrosion of second degree of right thigh, initial encounter -T24611D Corrosion of second degree of right thigh, subsequent encounter -T24611S Corrosion of second degree of right thigh, sequela -T24612A Corrosion of second degree of left thigh, initial encounter -T24612D Corrosion of second degree of left thigh, subsequent encounter -T24612S Corrosion of second degree of left thigh, sequela -T24619A Corrosion of second degree of unspecified thigh, initial encounter -T24619D Corrosion of second degree of unspecified thigh, subsequent encounter -T24619S Corrosion of second degree of unspecified thigh, sequela -T24621A Corrosion of second degree of right knee, initial encounter -T24621D Corrosion of second degree of right knee, subsequent encounter -T24621S Corrosion of second degree of right knee, sequela -T24622A Corrosion of second degree of left knee, initial encounter -T24622D Corrosion of second degree of left knee, subsequent encounter -T24622S Corrosion of second degree of left knee, sequela -T24629A Corrosion of second degree of unspecified knee, initial encounter -T24629D Corrosion of second degree of unspecified knee, subsequent encounter -T24629S Corrosion of second degree of unspecified knee, sequela -T24631A Corrosion of second degree of right lower leg, initial encounter -T24631D Corrosion of second degree of right lower leg, subsequent encounter -T24631S Corrosion of second degree of right lower leg, sequela -T24632A Corrosion of second degree of left lower leg, initial encounter -T24632D Corrosion of second degree of left lower leg, subsequent encounter -T24632S Corrosion of second degree of left lower leg, sequela -T24639A Corrosion of second degree of unspecified lower leg, initial encounter -T24639D Corrosion of second degree of unspecified lower leg, subsequent encounter -T24639S Corrosion of second degree of unspecified lower leg, sequela -T24691A Corrosion of second degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24691D Corrosion of second degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24691S Corrosion of second degree of multiple sites of right lower limb, except ankle and foot, sequela -T24692A Corrosion of second degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24692D Corrosion of second degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24692S Corrosion of second degree of multiple sites of left lower limb, except ankle and foot, sequela -T24699A Corrosion of second degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24699D Corrosion of second degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24699S Corrosion of second degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T24701A Corrosion of third degree of unspecified site of right lower limb, except ankle and foot, initial encounter -T24701D Corrosion of third degree of unspecified site of right lower limb, except ankle and foot, subsequent encounter -T24701S Corrosion of third degree of unspecified site of right lower limb, except ankle and foot, sequela -T24702A Corrosion of third degree of unspecified site of left lower limb, except ankle and foot, initial encounter -T24702D Corrosion of third degree of unspecified site of left lower limb, except ankle and foot, subsequent encounter -T24702S Corrosion of third degree of unspecified site of left lower limb, except ankle and foot, sequela -T24709A Corrosion of third degree of unspecified site of unspecified lower limb, except ankle and foot, initial encounter -T24709D Corrosion of third degree of unspecified site of unspecified lower limb, except ankle and foot, subsequent encounter -T24709S Corrosion of third degree of unspecified site of unspecified lower limb, except ankle and foot, sequela -T24711A Corrosion of third degree of right thigh, initial encounter -T24711D Corrosion of third degree of right thigh, subsequent encounter -T24711S Corrosion of third degree of right thigh, sequela -T24712A Corrosion of third degree of left thigh, initial encounter -T24712D Corrosion of third degree of left thigh, subsequent encounter -T24712S Corrosion of third degree of left thigh, sequela -T24719A Corrosion of third degree of unspecified thigh, initial encounter -T24719D Corrosion of third degree of unspecified thigh, subsequent encounter -T24719S Corrosion of third degree of unspecified thigh, sequela -T24721A Corrosion of third degree of right knee, initial encounter -T24721D Corrosion of third degree of right knee, subsequent encounter -T24721S Corrosion of third degree of right knee, sequela -T24722A Corrosion of third degree of left knee, initial encounter -T24722D Corrosion of third degree of left knee, subsequent encounter -T24722S Corrosion of third degree of left knee, sequela -T24729A Corrosion of third degree of unspecified knee, initial encounter -T24729D Corrosion of third degree of unspecified knee, subsequent encounter -T24729S Corrosion of third degree of unspecified knee, sequela -T24731A Corrosion of third degree of right lower leg, initial encounter -T24731D Corrosion of third degree of right lower leg, subsequent encounter -T24731S Corrosion of third degree of right lower leg, sequela -T24732A Corrosion of third degree of left lower leg, initial encounter -T24732D Corrosion of third degree of left lower leg, subsequent encounter -T24732S Corrosion of third degree of left lower leg, sequela -T24739A Corrosion of third degree of unspecified lower leg, initial encounter -T24739D Corrosion of third degree of unspecified lower leg, subsequent encounter -T24739S Corrosion of third degree of unspecified lower leg, sequela -T24791A Corrosion of third degree of multiple sites of right lower limb, except ankle and foot, initial encounter -T24791D Corrosion of third degree of multiple sites of right lower limb, except ankle and foot, subsequent encounter -T24791S Corrosion of third degree of multiple sites of right lower limb, except ankle and foot, sequela -T24792A Corrosion of third degree of multiple sites of left lower limb, except ankle and foot, initial encounter -T24792D Corrosion of third degree of multiple sites of left lower limb, except ankle and foot, subsequent encounter -T24792S Corrosion of third degree of multiple sites of left lower limb, except ankle and foot, sequela -T24799A Corrosion of third degree of multiple sites of unspecified lower limb, except ankle and foot, initial encounter -T24799D Corrosion of third degree of multiple sites of unspecified lower limb, except ankle and foot, subsequent encounter -T24799S Corrosion of third degree of multiple sites of unspecified lower limb, except ankle and foot, sequela -T25011A Burn of unspecified degree of right ankle, initial encounter -T25011D Burn of unspecified degree of right ankle, subsequent encounter -T25011S Burn of unspecified degree of right ankle, sequela -T25012A Burn of unspecified degree of left ankle, initial encounter -T25012D Burn of unspecified degree of left ankle, subsequent encounter -T25012S Burn of unspecified degree of left ankle, sequela -T25019A Burn of unspecified degree of unspecified ankle, initial encounter -T25019D Burn of unspecified degree of unspecified ankle, subsequent encounter -T25019S Burn of unspecified degree of unspecified ankle, sequela -T25021A Burn of unspecified degree of right foot, initial encounter -T25021D Burn of unspecified degree of right foot, subsequent encounter -T25021S Burn of unspecified degree of right foot, sequela -T25022A Burn of unspecified degree of left foot, initial encounter -T25022D Burn of unspecified degree of left foot, subsequent encounter -T25022S Burn of unspecified degree of left foot, sequela -T25029A Burn of unspecified degree of unspecified foot, initial encounter -T25029D Burn of unspecified degree of unspecified foot, subsequent encounter -T25029S Burn of unspecified degree of unspecified foot, sequela -T25031A Burn of unspecified degree of right toe(s) (nail), initial encounter -T25031D Burn of unspecified degree of right toe(s) (nail), subsequent encounter -T25031S Burn of unspecified degree of right toe(s) (nail), sequela -T25032A Burn of unspecified degree of left toe(s) (nail), initial encounter -T25032D Burn of unspecified degree of left toe(s) (nail), subsequent encounter -T25032S Burn of unspecified degree of left toe(s) (nail), sequela -T25039A Burn of unspecified degree of unspecified toe(s) (nail), initial encounter -T25039D Burn of unspecified degree of unspecified toe(s) (nail), subsequent encounter -T25039S Burn of unspecified degree of unspecified toe(s) (nail), sequela -T25091A Burn of unspecified degree of multiple sites of right ankle and foot, initial encounter -T25091D Burn of unspecified degree of multiple sites of right ankle and foot, subsequent encounter -T25091S Burn of unspecified degree of multiple sites of right ankle and foot, sequela -T25092A Burn of unspecified degree of multiple sites of left ankle and foot, initial encounter -T25092D Burn of unspecified degree of multiple sites of left ankle and foot, subsequent encounter -T25092S Burn of unspecified degree of multiple sites of left ankle and foot, sequela -T25099A Burn of unspecified degree of multiple sites of unspecified ankle and foot, initial encounter -T25099D Burn of unspecified degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25099S Burn of unspecified degree of multiple sites of unspecified ankle and foot, sequela -T25111A Burn of first degree of right ankle, initial encounter -T25111D Burn of first degree of right ankle, subsequent encounter -T25111S Burn of first degree of right ankle, sequela -T25112A Burn of first degree of left ankle, initial encounter -T25112D Burn of first degree of left ankle, subsequent encounter -T25112S Burn of first degree of left ankle, sequela -T25119A Burn of first degree of unspecified ankle, initial encounter -T25119D Burn of first degree of unspecified ankle, subsequent encounter -T25119S Burn of first degree of unspecified ankle, sequela -T25121A Burn of first degree of right foot, initial encounter -T25121D Burn of first degree of right foot, subsequent encounter -T25121S Burn of first degree of right foot, sequela -T25122A Burn of first degree of left foot, initial encounter -T25122D Burn of first degree of left foot, subsequent encounter -T25122S Burn of first degree of left foot, sequela -T25129A Burn of first degree of unspecified foot, initial encounter -T25129D Burn of first degree of unspecified foot, subsequent encounter -T25129S Burn of first degree of unspecified foot, sequela -T25131A Burn of first degree of right toe(s) (nail), initial encounter -T25131D Burn of first degree of right toe(s) (nail), subsequent encounter -T25131S Burn of first degree of right toe(s) (nail), sequela -T25132A Burn of first degree of left toe(s) (nail), initial encounter -T25132D Burn of first degree of left toe(s) (nail), subsequent encounter -T25132S Burn of first degree of left toe(s) (nail), sequela -T25139A Burn of first degree of unspecified toe(s) (nail), initial encounter -T25139D Burn of first degree of unspecified toe(s) (nail), subsequent encounter -T25139S Burn of first degree of unspecified toe(s) (nail), sequela -T25191A Burn of first degree of multiple sites of right ankle and foot, initial encounter -T25191D Burn of first degree of multiple sites of right ankle and foot, subsequent encounter -T25191S Burn of first degree of multiple sites of right ankle and foot, sequela -T25192A Burn of first degree of multiple sites of left ankle and foot, initial encounter -T25192D Burn of first degree of multiple sites of left ankle and foot, subsequent encounter -T25192S Burn of first degree of multiple sites of left ankle and foot, sequela -T25199A Burn of first degree of multiple sites of unspecified ankle and foot, initial encounter -T25199D Burn of first degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25199S Burn of first degree of multiple sites of unspecified ankle and foot, sequela -T25211A Burn of second degree of right ankle, initial encounter -T25211D Burn of second degree of right ankle, subsequent encounter -T25211S Burn of second degree of right ankle, sequela -T25212A Burn of second degree of left ankle, initial encounter -T25212D Burn of second degree of left ankle, subsequent encounter -T25212S Burn of second degree of left ankle, sequela -T25219A Burn of second degree of unspecified ankle, initial encounter -T25219D Burn of second degree of unspecified ankle, subsequent encounter -T25219S Burn of second degree of unspecified ankle, sequela -T25221A Burn of second degree of right foot, initial encounter -T25221D Burn of second degree of right foot, subsequent encounter -T25221S Burn of second degree of right foot, sequela -T25222A Burn of second degree of left foot, initial encounter -T25222D Burn of second degree of left foot, subsequent encounter -T25222S Burn of second degree of left foot, sequela -T25229A Burn of second degree of unspecified foot, initial encounter -T25229D Burn of second degree of unspecified foot, subsequent encounter -T25229S Burn of second degree of unspecified foot, sequela -T25231A Burn of second degree of right toe(s) (nail), initial encounter -T25231D Burn of second degree of right toe(s) (nail), subsequent encounter -T25231S Burn of second degree of right toe(s) (nail), sequela -T25232A Burn of second degree of left toe(s) (nail), initial encounter -T25232D Burn of second degree of left toe(s) (nail), subsequent encounter -T25232S Burn of second degree of left toe(s) (nail), sequela -T25239A Burn of second degree of unspecified toe(s) (nail), initial encounter -T25239D Burn of second degree of unspecified toe(s) (nail), subsequent encounter -T25239S Burn of second degree of unspecified toe(s) (nail), sequela -T25291A Burn of second degree of multiple sites of right ankle and foot, initial encounter -T25291D Burn of second degree of multiple sites of right ankle and foot, subsequent encounter -T25291S Burn of second degree of multiple sites of right ankle and foot, sequela -T25292A Burn of second degree of multiple sites of left ankle and foot, initial encounter -T25292D Burn of second degree of multiple sites of left ankle and foot, subsequent encounter -T25292S Burn of second degree of multiple sites of left ankle and foot, sequela -T25299A Burn of second degree of multiple sites of unspecified ankle and foot, initial encounter -T25299D Burn of second degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25299S Burn of second degree of multiple sites of unspecified ankle and foot, sequela -T25311A Burn of third degree of right ankle, initial encounter -T25311D Burn of third degree of right ankle, subsequent encounter -T25311S Burn of third degree of right ankle, sequela -T25312A Burn of third degree of left ankle, initial encounter -T25312D Burn of third degree of left ankle, subsequent encounter -T25312S Burn of third degree of left ankle, sequela -T25319A Burn of third degree of unspecified ankle, initial encounter -T25319D Burn of third degree of unspecified ankle, subsequent encounter -T25319S Burn of third degree of unspecified ankle, sequela -T25321A Burn of third degree of right foot, initial encounter -T25321D Burn of third degree of right foot, subsequent encounter -T25321S Burn of third degree of right foot, sequela -T25322A Burn of third degree of left foot, initial encounter -T25322D Burn of third degree of left foot, subsequent encounter -T25322S Burn of third degree of left foot, sequela -T25329A Burn of third degree of unspecified foot, initial encounter -T25329D Burn of third degree of unspecified foot, subsequent encounter -T25329S Burn of third degree of unspecified foot, sequela -T25331A Burn of third degree of right toe(s) (nail), initial encounter -T25331D Burn of third degree of right toe(s) (nail), subsequent encounter -T25331S Burn of third degree of right toe(s) (nail), sequela -T25332A Burn of third degree of left toe(s) (nail), initial encounter -T25332D Burn of third degree of left toe(s) (nail), subsequent encounter -T25332S Burn of third degree of left toe(s) (nail), sequela -T25339A Burn of third degree of unspecified toe(s) (nail), initial encounter -T25339D Burn of third degree of unspecified toe(s) (nail), subsequent encounter -T25339S Burn of third degree of unspecified toe(s) (nail), sequela -T25391A Burn of third degree of multiple sites of right ankle and foot, initial encounter -T25391D Burn of third degree of multiple sites of right ankle and foot, subsequent encounter -T25391S Burn of third degree of multiple sites of right ankle and foot, sequela -T25392A Burn of third degree of multiple sites of left ankle and foot, initial encounter -T25392D Burn of third degree of multiple sites of left ankle and foot, subsequent encounter -T25392S Burn of third degree of multiple sites of left ankle and foot, sequela -T25399A Burn of third degree of multiple sites of unspecified ankle and foot, initial encounter -T25399D Burn of third degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25399S Burn of third degree of multiple sites of unspecified ankle and foot, sequela -T25411A Corrosion of unspecified degree of right ankle, initial encounter -T25411D Corrosion of unspecified degree of right ankle, subsequent encounter -T25411S Corrosion of unspecified degree of right ankle, sequela -T25412A Corrosion of unspecified degree of left ankle, initial encounter -T25412D Corrosion of unspecified degree of left ankle, subsequent encounter -T25412S Corrosion of unspecified degree of left ankle, sequela -T25419A Corrosion of unspecified degree of unspecified ankle, initial encounter -T25419D Corrosion of unspecified degree of unspecified ankle, subsequent encounter -T25419S Corrosion of unspecified degree of unspecified ankle, sequela -T25421A Corrosion of unspecified degree of right foot, initial encounter -T25421D Corrosion of unspecified degree of right foot, subsequent encounter -T25421S Corrosion of unspecified degree of right foot, sequela -T25422A Corrosion of unspecified degree of left foot, initial encounter -T25422D Corrosion of unspecified degree of left foot, subsequent encounter -T25422S Corrosion of unspecified degree of left foot, sequela -T25429A Corrosion of unspecified degree of unspecified foot, initial encounter -T25429D Corrosion of unspecified degree of unspecified foot, subsequent encounter -T25429S Corrosion of unspecified degree of unspecified foot, sequela -T25431A Corrosion of unspecified degree of right toe(s) (nail), initial encounter -T25431D Corrosion of unspecified degree of right toe(s) (nail), subsequent encounter -T25431S Corrosion of unspecified degree of right toe(s) (nail), sequela -T25432A Corrosion of unspecified degree of left toe(s) (nail), initial encounter -T25432D Corrosion of unspecified degree of left toe(s) (nail), subsequent encounter -T25432S Corrosion of unspecified degree of left toe(s) (nail), sequela -T25439A Corrosion of unspecified degree of unspecified toe(s) (nail), initial encounter -T25439D Corrosion of unspecified degree of unspecified toe(s) (nail), subsequent encounter -T25439S Corrosion of unspecified degree of unspecified toe(s) (nail), sequela -T25491A Corrosion of unspecified degree of multiple sites of right ankle and foot, initial encounter -T25491D Corrosion of unspecified degree of multiple sites of right ankle and foot, subsequent encounter -T25491S Corrosion of unspecified degree of multiple sites of right ankle and foot, sequela -T25492A Corrosion of unspecified degree of multiple sites of left ankle and foot, initial encounter -T25492D Corrosion of unspecified degree of multiple sites of left ankle and foot, subsequent encounter -T25492S Corrosion of unspecified degree of multiple sites of left ankle and foot, sequela -T25499A Corrosion of unspecified degree of multiple sites of unspecified ankle and foot, initial encounter -T25499D Corrosion of unspecified degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25499S Corrosion of unspecified degree of multiple sites of unspecified ankle and foot, sequela -T25511A Corrosion of first degree of right ankle, initial encounter -T25511D Corrosion of first degree of right ankle, subsequent encounter -T25511S Corrosion of first degree of right ankle, sequela -T25512A Corrosion of first degree of left ankle, initial encounter -T25512D Corrosion of first degree of left ankle, subsequent encounter -T25512S Corrosion of first degree of left ankle, sequela -T25519A Corrosion of first degree of unspecified ankle, initial encounter -T25519D Corrosion of first degree of unspecified ankle, subsequent encounter -T25519S Corrosion of first degree of unspecified ankle, sequela -T25521A Corrosion of first degree of right foot, initial encounter -T25521D Corrosion of first degree of right foot, subsequent encounter -T25521S Corrosion of first degree of right foot, sequela -T25522A Corrosion of first degree of left foot, initial encounter -T25522D Corrosion of first degree of left foot, subsequent encounter -T25522S Corrosion of first degree of left foot, sequela -T25529A Corrosion of first degree of unspecified foot, initial encounter -T25529D Corrosion of first degree of unspecified foot, subsequent encounter -T25529S Corrosion of first degree of unspecified foot, sequela -T25531A Corrosion of first degree of right toe(s) (nail), initial encounter -T25531D Corrosion of first degree of right toe(s) (nail), subsequent encounter -T25531S Corrosion of first degree of right toe(s) (nail), sequela -T25532A Corrosion of first degree of left toe(s) (nail), initial encounter -T25532D Corrosion of first degree of left toe(s) (nail), subsequent encounter -T25532S Corrosion of first degree of left toe(s) (nail), sequela -T25539A Corrosion of first degree of unspecified toe(s) (nail), initial encounter -T25539D Corrosion of first degree of unspecified toe(s) (nail), subsequent encounter -T25539S Corrosion of first degree of unspecified toe(s) (nail), sequela -T25591A Corrosion of first degree of multiple sites of right ankle and foot, initial encounter -T25591D Corrosion of first degree of multiple sites of right ankle and foot, subsequent encounter -T25591S Corrosion of first degree of multiple sites of right ankle and foot, sequela -T25592A Corrosion of first degree of multiple sites of left ankle and foot, initial encounter -T25592D Corrosion of first degree of multiple sites of left ankle and foot, subsequent encounter -T25592S Corrosion of first degree of multiple sites of left ankle and foot, sequela -T25599A Corrosion of first degree of multiple sites of unspecified ankle and foot, initial encounter -T25599D Corrosion of first degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25599S Corrosion of first degree of multiple sites of unspecified ankle and foot, sequela -T25611A Corrosion of second degree of right ankle, initial encounter -T25611D Corrosion of second degree of right ankle, subsequent encounter -T25611S Corrosion of second degree of right ankle, sequela -T25612A Corrosion of second degree of left ankle, initial encounter -T25612D Corrosion of second degree of left ankle, subsequent encounter -T25612S Corrosion of second degree of left ankle, sequela -T25619A Corrosion of second degree of unspecified ankle, initial encounter -T25619D Corrosion of second degree of unspecified ankle, subsequent encounter -T25619S Corrosion of second degree of unspecified ankle, sequela -T25621A Corrosion of second degree of right foot, initial encounter -T25621D Corrosion of second degree of right foot, subsequent encounter -T25621S Corrosion of second degree of right foot, sequela -T25622A Corrosion of second degree of left foot, initial encounter -T25622D Corrosion of second degree of left foot, subsequent encounter -T25622S Corrosion of second degree of left foot, sequela -T25629A Corrosion of second degree of unspecified foot, initial encounter -T25629D Corrosion of second degree of unspecified foot, subsequent encounter -T25629S Corrosion of second degree of unspecified foot, sequela -T25631A Corrosion of second degree of right toe(s) (nail), initial encounter -T25631D Corrosion of second degree of right toe(s) (nail), subsequent encounter -T25631S Corrosion of second degree of right toe(s) (nail), sequela -T25632A Corrosion of second degree of left toe(s) (nail), initial encounter -T25632D Corrosion of second degree of left toe(s) (nail), subsequent encounter -T25632S Corrosion of second degree of left toe(s) (nail), sequela -T25639A Corrosion of second degree of unspecified toe(s) (nail), initial encounter -T25639D Corrosion of second degree of unspecified toe(s) (nail), subsequent encounter -T25639S Corrosion of second degree of unspecified toe(s) (nail), sequela -T25691A Corrosion of second degree of right ankle and foot, initial encounter -T25691D Corrosion of second degree of right ankle and foot, subsequent encounter -T25691S Corrosion of second degree of right ankle and foot, sequela -T25692A Corrosion of second degree of left ankle and foot, initial encounter -T25692D Corrosion of second degree of left ankle and foot, subsequent encounter -T25692S Corrosion of second degree of left ankle and foot, sequela -T25699A Corrosion of second degree of unspecified ankle and foot, initial encounter -T25699D Corrosion of second degree of unspecified ankle and foot, subsequent encounter -T25699S Corrosion of second degree of unspecified ankle and foot, sequela -T25711A Corrosion of third degree of right ankle, initial encounter -T25711D Corrosion of third degree of right ankle, subsequent encounter -T25711S Corrosion of third degree of right ankle, sequela -T25712A Corrosion of third degree of left ankle, initial encounter -T25712D Corrosion of third degree of left ankle, subsequent encounter -T25712S Corrosion of third degree of left ankle, sequela -T25719A Corrosion of third degree of unspecified ankle, initial encounter -T25719D Corrosion of third degree of unspecified ankle, subsequent encounter -T25719S Corrosion of third degree of unspecified ankle, sequela -T25721A Corrosion of third degree of right foot, initial encounter -T25721D Corrosion of third degree of right foot, subsequent encounter -T25721S Corrosion of third degree of right foot, sequela -T25722A Corrosion of third degree of left foot, initial encounter -T25722D Corrosion of third degree of left foot, subsequent encounter -T25722S Corrosion of third degree of left foot, sequela -T25729A Corrosion of third degree of unspecified foot, initial encounter -T25729D Corrosion of third degree of unspecified foot, subsequent encounter -T25729S Corrosion of third degree of unspecified foot, sequela -T25731A Corrosion of third degree of right toe(s) (nail), initial encounter -T25731D Corrosion of third degree of right toe(s) (nail), subsequent encounter -T25731S Corrosion of third degree of right toe(s) (nail), sequela -T25732A Corrosion of third degree of left toe(s) (nail), initial encounter -T25732D Corrosion of third degree of left toe(s) (nail), subsequent encounter -T25732S Corrosion of third degree of left toe(s) (nail), sequela -T25739A Corrosion of third degree of unspecified toe(s) (nail), initial encounter -T25739D Corrosion of third degree of unspecified toe(s) (nail), subsequent encounter -T25739S Corrosion of third degree of unspecified toe(s) (nail), sequela -T25791A Corrosion of third degree of multiple sites of right ankle and foot, initial encounter -T25791D Corrosion of third degree of multiple sites of right ankle and foot, subsequent encounter -T25791S Corrosion of third degree of multiple sites of right ankle and foot, sequela -T25792A Corrosion of third degree of multiple sites of left ankle and foot, initial encounter -T25792D Corrosion of third degree of multiple sites of left ankle and foot, subsequent encounter -T25792S Corrosion of third degree of multiple sites of left ankle and foot, sequela -T25799A Corrosion of third degree of multiple sites of unspecified ankle and foot, initial encounter -T25799D Corrosion of third degree of multiple sites of unspecified ankle and foot, subsequent encounter -T25799S Corrosion of third degree of multiple sites of unspecified ankle and foot, sequela -T2600XA Burn of unspecified eyelid and periocular area, initial encounter -T2600XD Burn of unspecified eyelid and periocular area, subsequent encounter -T2600XS Burn of unspecified eyelid and periocular area, sequela -T2601XA Burn of right eyelid and periocular area, initial encounter -T2601XD Burn of right eyelid and periocular area, subsequent encounter -T2601XS Burn of right eyelid and periocular area, sequela -T2602XA Burn of left eyelid and periocular area, initial encounter -T2602XD Burn of left eyelid and periocular area, subsequent encounter -T2602XS Burn of left eyelid and periocular area, sequela -T2610XA Burn of cornea and conjunctival sac, unspecified eye, initial encounter -T2610XD Burn of cornea and conjunctival sac, unspecified eye, subsequent encounter -T2610XS Burn of cornea and conjunctival sac, unspecified eye, sequela -T2611XA Burn of cornea and conjunctival sac, right eye, initial encounter -T2611XD Burn of cornea and conjunctival sac, right eye, subsequent encounter -T2611XS Burn of cornea and conjunctival sac, right eye, sequela -T2612XA Burn of cornea and conjunctival sac, left eye, initial encounter -T2612XD Burn of cornea and conjunctival sac, left eye, subsequent encounter -T2612XS Burn of cornea and conjunctival sac, left eye, sequela -T2620XA Burn with resulting rupture and destruction of unspecified eyeball, initial encounter -T2620XD Burn with resulting rupture and destruction of unspecified eyeball, subsequent encounter -T2620XS Burn with resulting rupture and destruction of unspecified eyeball, sequela -T2621XA Burn with resulting rupture and destruction of right eyeball, initial encounter -T2621XD Burn with resulting rupture and destruction of right eyeball, subsequent encounter -T2621XS Burn with resulting rupture and destruction of right eyeball, sequela -T2622XA Burn with resulting rupture and destruction of left eyeball, initial encounter -T2622XD Burn with resulting rupture and destruction of left eyeball, subsequent encounter -T2622XS Burn with resulting rupture and destruction of left eyeball, sequela -T2630XA Burns of other specified parts of unspecified eye and adnexa, initial encounter -T2630XD Burns of other specified parts of unspecified eye and adnexa, subsequent encounter -T2630XS Burns of other specified parts of unspecified eye and adnexa, sequela -T2631XA Burns of other specified parts of right eye and adnexa, initial encounter -T2631XD Burns of other specified parts of right eye and adnexa, subsequent encounter -T2631XS Burns of other specified parts of right eye and adnexa, sequela -T2632XA Burns of other specified parts of left eye and adnexa, initial encounter -T2632XD Burns of other specified parts of left eye and adnexa, subsequent encounter -T2632XS Burns of other specified parts of left eye and adnexa, sequela -T2640XA Burn of unspecified eye and adnexa, part unspecified, initial encounter -T2640XD Burn of unspecified eye and adnexa, part unspecified, subsequent encounter -T2640XS Burn of unspecified eye and adnexa, part unspecified, sequela -T2641XA Burn of right eye and adnexa, part unspecified, initial encounter -T2641XD Burn of right eye and adnexa, part unspecified, subsequent encounter -T2641XS Burn of right eye and adnexa, part unspecified, sequela -T2642XA Burn of left eye and adnexa, part unspecified, initial encounter -T2642XD Burn of left eye and adnexa, part unspecified, subsequent encounter -T2642XS Burn of left eye and adnexa, part unspecified, sequela -T2650XA Corrosion of unspecified eyelid and periocular area, initial encounter -T2650XD Corrosion of unspecified eyelid and periocular area, subsequent encounter -T2650XS Corrosion of unspecified eyelid and periocular area, sequela -T2651XA Corrosion of right eyelid and periocular area, initial encounter -T2651XD Corrosion of right eyelid and periocular area, subsequent encounter -T2651XS Corrosion of right eyelid and periocular area, sequela -T2652XA Corrosion of left eyelid and periocular area, initial encounter -T2652XD Corrosion of left eyelid and periocular area, subsequent encounter -T2652XS Corrosion of left eyelid and periocular area, sequela -T2660XA Corrosion of cornea and conjunctival sac, unspecified eye, initial encounter -T2660XD Corrosion of cornea and conjunctival sac, unspecified eye, subsequent encounter -T2660XS Corrosion of cornea and conjunctival sac, unspecified eye, sequela -T2661XA Corrosion of cornea and conjunctival sac, right eye, initial encounter -T2661XD Corrosion of cornea and conjunctival sac, right eye, subsequent encounter -T2661XS Corrosion of cornea and conjunctival sac, right eye, sequela -T2662XA Corrosion of cornea and conjunctival sac, left eye, initial encounter -T2662XD Corrosion of cornea and conjunctival sac, left eye, subsequent encounter -T2662XS Corrosion of cornea and conjunctival sac, left eye, sequela -T2670XA Corrosion with resulting rupture and destruction of unspecified eyeball, initial encounter -T2670XD Corrosion with resulting rupture and destruction of unspecified eyeball, subsequent encounter -T2670XS Corrosion with resulting rupture and destruction of unspecified eyeball, sequela -T2671XA Corrosion with resulting rupture and destruction of right eyeball, initial encounter -T2671XD Corrosion with resulting rupture and destruction of right eyeball, subsequent encounter -T2671XS Corrosion with resulting rupture and destruction of right eyeball, sequela -T2672XA Corrosion with resulting rupture and destruction of left eyeball, initial encounter -T2672XD Corrosion with resulting rupture and destruction of left eyeball, subsequent encounter -T2672XS Corrosion with resulting rupture and destruction of left eyeball, sequela -T2680XA Corrosions of other specified parts of unspecified eye and adnexa, initial encounter -T2680XD Corrosions of other specified parts of unspecified eye and adnexa, subsequent encounter -T2680XS Corrosions of other specified parts of unspecified eye and adnexa, sequela -T2681XA Corrosions of other specified parts of right eye and adnexa, initial encounter -T2681XD Corrosions of other specified parts of right eye and adnexa, subsequent encounter -T2681XS Corrosions of other specified parts of right eye and adnexa, sequela -T2682XA Corrosions of other specified parts of left eye and adnexa, initial encounter -T2682XD Corrosions of other specified parts of left eye and adnexa, subsequent encounter -T2682XS Corrosions of other specified parts of left eye and adnexa, sequela -T2690XA Corrosion of unspecified eye and adnexa, part unspecified, initial encounter -T2690XD Corrosion of unspecified eye and adnexa, part unspecified, subsequent encounter -T2690XS Corrosion of unspecified eye and adnexa, part unspecified, sequela -T2691XA Corrosion of right eye and adnexa, part unspecified, initial encounter -T2691XD Corrosion of right eye and adnexa, part unspecified, subsequent encounter -T2691XS Corrosion of right eye and adnexa, part unspecified, sequela -T2692XA Corrosion of left eye and adnexa, part unspecified, initial encounter -T2692XD Corrosion of left eye and adnexa, part unspecified, subsequent encounter -T2692XS Corrosion of left eye and adnexa, part unspecified, sequela -T270XXA Burn of larynx and trachea, initial encounter -T270XXD Burn of larynx and trachea, subsequent encounter -T270XXS Burn of larynx and trachea, sequela -T271XXA Burn involving larynx and trachea with lung, initial encounter -T271XXD Burn involving larynx and trachea with lung, subsequent encounter -T271XXS Burn involving larynx and trachea with lung, sequela -T272XXA Burn of other parts of respiratory tract, initial encounter -T272XXD Burn of other parts of respiratory tract, subsequent encounter -T272XXS Burn of other parts of respiratory tract, sequela -T273XXA Burn of respiratory tract, part unspecified, initial encounter -T273XXD Burn of respiratory tract, part unspecified, subsequent encounter -T273XXS Burn of respiratory tract, part unspecified, sequela -T274XXA Corrosion of larynx and trachea, initial encounter -T274XXD Corrosion of larynx and trachea, subsequent encounter -T274XXS Corrosion of larynx and trachea, sequela -T275XXA Corrosion involving larynx and trachea with lung, initial encounter -T275XXD Corrosion involving larynx and trachea with lung, subsequent encounter -T275XXS Corrosion involving larynx and trachea with lung, sequela -T276XXA Corrosion of other parts of respiratory tract, initial encounter -T276XXD Corrosion of other parts of respiratory tract, subsequent encounter -T276XXS Corrosion of other parts of respiratory tract, sequela -T277XXA Corrosion of respiratory tract, part unspecified, initial encounter -T277XXD Corrosion of respiratory tract, part unspecified, subsequent encounter -T277XXS Corrosion of respiratory tract, part unspecified, sequela -T280XXA Burn of mouth and pharynx, initial encounter -T280XXD Burn of mouth and pharynx, subsequent encounter -T280XXS Burn of mouth and pharynx, sequela -T281XXA Burn of esophagus, initial encounter -T281XXD Burn of esophagus, subsequent encounter -T281XXS Burn of esophagus, sequela -T282XXA Burn of other parts of alimentary tract, initial encounter -T282XXD Burn of other parts of alimentary tract, subsequent encounter -T282XXS Burn of other parts of alimentary tract, sequela -T283XXA Burn of internal genitourinary organs, initial encounter -T283XXD Burn of internal genitourinary organs, subsequent encounter -T283XXS Burn of internal genitourinary organs, sequela -T2840XA Burn of unspecified internal organ, initial encounter -T2840XD Burn of unspecified internal organ, subsequent encounter -T2840XS Burn of unspecified internal organ, sequela -T28411A Burn of right ear drum, initial encounter -T28411D Burn of right ear drum, subsequent encounter -T28411S Burn of right ear drum, sequela -T28412A Burn of left ear drum, initial encounter -T28412D Burn of left ear drum, subsequent encounter -T28412S Burn of left ear drum, sequela -T28419A Burn of unspecified ear drum, initial encounter -T28419D Burn of unspecified ear drum, subsequent encounter -T28419S Burn of unspecified ear drum, sequela -T2849XA Burn of other internal organ, initial encounter -T2849XD Burn of other internal organ, subsequent encounter -T2849XS Burn of other internal organ, sequela -T285XXA Corrosion of mouth and pharynx, initial encounter -T285XXD Corrosion of mouth and pharynx, subsequent encounter -T285XXS Corrosion of mouth and pharynx, sequela -T286XXA Corrosion of esophagus, initial encounter -T286XXD Corrosion of esophagus, subsequent encounter -T286XXS Corrosion of esophagus, sequela -T287XXA Corrosion of other parts of alimentary tract, initial encounter -T287XXD Corrosion of other parts of alimentary tract, subsequent encounter -T287XXS Corrosion of other parts of alimentary tract, sequela -T288XXA Corrosion of internal genitourinary organs, initial encounter -T288XXD Corrosion of internal genitourinary organs, subsequent encounter -T288XXS Corrosion of internal genitourinary organs, sequela -T2890XA Corrosions of unspecified internal organs, initial encounter -T2890XD Corrosions of unspecified internal organs, subsequent encounter -T2890XS Corrosions of unspecified internal organs, sequela -T28911A Corrosions of right ear drum, initial encounter -T28911D Corrosions of right ear drum, subsequent encounter -T28911S Corrosions of right ear drum, sequela -T28912A Corrosions of left ear drum, initial encounter -T28912D Corrosions of left ear drum, subsequent encounter -T28912S Corrosions of left ear drum, sequela -T28919A Corrosions of unspecified ear drum, initial encounter -T28919D Corrosions of unspecified ear drum, subsequent encounter -T28919S Corrosions of unspecified ear drum, sequela -T2899XA Corrosions of other internal organs, initial encounter -T2899XD Corrosions of other internal organs, subsequent encounter -T2899XS Corrosions of other internal organs, sequela -T300 Burn of unspecified body region, unspecified degree -T304 Corrosion of unspecified body region, unspecified degree -T310 Burns involving less than 10% of body surface -T3110 Burns involving 10-19% of body surface with 0% to 9% third degree burns -T3111 Burns involving 10-19% of body surface with 10-19% third degree burns -T3120 Burns involving 20-29% of body surface with 0% to 9% third degree burns -T3121 Burns involving 20-29% of body surface with 10-19% third degree burns -T3122 Burns involving 20-29% of body surface with 20-29% third degree burns -T3130 Burns involving 30-39% of body surface with 0% to 9% third degree burns -T3131 Burns involving 30-39% of body surface with 10-19% third degree burns -T3132 Burns involving 30-39% of body surface with 20-29% third degree burns -T3133 Burns involving 30-39% of body surface with 30-39% third degree burns -T3140 Burns involving 40-49% of body surface with 0% to 9% third degree burns -T3141 Burns involving 40-49% of body surface with 10-19% third degree burns -T3142 Burns involving 40-49% of body surface with 20-29% third degree burns -T3143 Burns involving 40-49% of body surface with 30-39% third degree burns -T3144 Burns involving 40-49% of body surface with 40-49% third degree burns -T3150 Burns involving 50-59% of body surface with 0% to 9% third degree burns -T3151 Burns involving 50-59% of body surface with 10-19% third degree burns -T3152 Burns involving 50-59% of body surface with 20-29% third degree burns -T3153 Burns involving 50-59% of body surface with 30-39% third degree burns -T3154 Burns involving 50-59% of body surface with 40-49% third degree burns -T3155 Burns involving 50-59% of body surface with 50-59% third degree burns -T3160 Burns involving 60-69% of body surface with 0% to 9% third degree burns -T3161 Burns involving 60-69% of body surface with 10-19% third degree burns -T3162 Burns involving 60-69% of body surface with 20-29% third degree burns -T3163 Burns involving 60-69% of body surface with 30-39% third degree burns -T3164 Burns involving 60-69% of body surface with 40-49% third degree burns -T3165 Burns involving 60-69% of body surface with 50-59% third degree burns -T3166 Burns involving 60-69% of body surface with 60-69% third degree burns -T3170 Burns involving 70-79% of body surface with 0% to 9% third degree burns -T3171 Burns involving 70-79% of body surface with 10-19% third degree burns -T3172 Burns involving 70-79% of body surface with 20-29% third degree burns -T3173 Burns involving 70-79% of body surface with 30-39% third degree burns -T3174 Burns involving 70-79% of body surface with 40-49% third degree burns -T3175 Burns involving 70-79% of body surface with 50-59% third degree burns -T3176 Burns involving 70-79% of body surface with 60-69% third degree burns -T3177 Burns involving 70-79% of body surface with 70-79% third degree burns -T3180 Burns involving 80-89% of body surface with 0% to 9% third degree burns -T3181 Burns involving 80-89% of body surface with 10-19% third degree burns -T3182 Burns involving 80-89% of body surface with 20-29% third degree burns -T3183 Burns involving 80-89% of body surface with 30-39% third degree burns -T3184 Burns involving 80-89% of body surface with 40-49% third degree burns -T3185 Burns involving 80-89% of body surface with 50-59% third degree burns -T3186 Burns involving 80-89% of body surface with 60-69% third degree burns -T3187 Burns involving 80-89% of body surface with 70-79% third degree burns -T3188 Burns involving 80-89% of body surface with 80-89% third degree burns -T3190 Burns involving 90% or more of body surface with 0% to 9% third degree burns -T3191 Burns involving 90% or more of body surface with 10-19% third degree burns -T3192 Burns involving 90% or more of body surface with 20-29% third degree burns -T3193 Burns involving 90% or more of body surface with 30-39% third degree burns -T3194 Burns involving 90% or more of body surface with 40-49% third degree burns -T3195 Burns involving 90% or more of body surface with 50-59% third degree burns -T3196 Burns involving 90% or more of body surface with 60-69% third degree burns -T3197 Burns involving 90% or more of body surface with 70-79% third degree burns -T3198 Burns involving 90% or more of body surface with 80-89% third degree burns -T3199 Burns involving 90% or more of body surface with 90% or more third degree burns -T320 Corrosions involving less than 10% of body surface -T3210 Corrosions involving 10-19% of body surface with 0% to 9% third degree corrosion -T3211 Corrosions involving 10-19% of body surface with 10-19% third degree corrosion -T3220 Corrosions involving 20-29% of body surface with 0% to 9% third degree corrosion -T3221 Corrosions involving 20-29% of body surface with 10-19% third degree corrosion -T3222 Corrosions involving 20-29% of body surface with 20-29% third degree corrosion -T3230 Corrosions involving 30-39% of body surface with 0% to 9% third degree corrosion -T3231 Corrosions involving 30-39% of body surface with 10-19% third degree corrosion -T3232 Corrosions involving 30-39% of body surface with 20-29% third degree corrosion -T3233 Corrosions involving 30-39% of body surface with 30-39% third degree corrosion -T3240 Corrosions involving 40-49% of body surface with 0% to 9% third degree corrosion -T3241 Corrosions involving 40-49% of body surface with 10-19% third degree corrosion -T3242 Corrosions involving 40-49% of body surface with 20-29% third degree corrosion -T3243 Corrosions involving 40-49% of body surface with 30-39% third degree corrosion -T3244 Corrosions involving 40-49% of body surface with 40-49% third degree corrosion -T3250 Corrosions involving 50-59% of body surface with 0% to 9% third degree corrosion -T3251 Corrosions involving 50-59% of body surface with 10-19% third degree corrosion -T3252 Corrosions involving 50-59% of body surface with 20-29% third degree corrosion -T3253 Corrosions involving 50-59% of body surface with 30-39% third degree corrosion -T3254 Corrosions involving 50-59% of body surface with 40-49% third degree corrosion -T3255 Corrosions involving 50-59% of body surface with 50-59% third degree corrosion -T3260 Corrosions involving 60-69% of body surface with 0% to 9% third degree corrosion -T3261 Corrosions involving 60-69% of body surface with 10-19% third degree corrosion -T3262 Corrosions involving 60-69% of body surface with 20-29% third degree corrosion -T3263 Corrosions involving 60-69% of body surface with 30-39% third degree corrosion -T3264 Corrosions involving 60-69% of body surface with 40-49% third degree corrosion -T3265 Corrosions involving 60-69% of body surface with 50-59% third degree corrosion -T3266 Corrosions involving 60-69% of body surface with 60-69% third degree corrosion -T3270 Corrosions involving 70-79% of body surface with 0% to 9% third degree corrosion -T3271 Corrosions involving 70-79% of body surface with 10-19% third degree corrosion -T3272 Corrosions involving 70-79% of body surface with 20-29% third degree corrosion -T3273 Corrosions involving 70-79% of body surface with 30-39% third degree corrosion -T3274 Corrosions involving 70-79% of body surface with 40-49% third degree corrosion -T3275 Corrosions involving 70-79% of body surface with 50-59% third degree corrosion -T3276 Corrosions involving 70-79% of body surface with 60-69% third degree corrosion -T3277 Corrosions involving 70-79% of body surface with 70-79% third degree corrosion -T3280 Corrosions involving 80-89% of body surface with 0% to 9% third degree corrosion -T3281 Corrosions involving 80-89% of body surface with 10-19% third degree corrosion -T3282 Corrosions involving 80-89% of body surface with 20-29% third degree corrosion -T3283 Corrosions involving 80-89% of body surface with 30-39% third degree corrosion -T3284 Corrosions involving 80-89% of body surface with 40-49% third degree corrosion -T3285 Corrosions involving 80-89% of body surface with 50-59% third degree corrosion -T3286 Corrosions involving 80-89% of body surface with 60-69% third degree corrosion -T3287 Corrosions involving 80-89% of body surface with 70-79% third degree corrosion -T3288 Corrosions involving 80-89% of body surface with 80-89% third degree corrosion -T3290 Corrosions involving 90% or more of body surface with 0% to 9% third degree corrosion -T3291 Corrosions involving 90% or more of body surface with 10-19% third degree corrosion -T3292 Corrosions involving 90% or more of body surface with 20-29% third degree corrosion -T3293 Corrosions involving 90% or more of body surface with 30-39% third degree corrosion -T3294 Corrosions involving 90% or more of body surface with 40-49% third degree corrosion -T3295 Corrosions involving 90% or more of body surface with 50-59% third degree corrosion -T3296 Corrosions involving 90% or more of body surface with 60-69% third degree corrosion -T3297 Corrosions involving 90% or more of body surface with 70-79% third degree corrosion -T3298 Corrosions involving 90% or more of body surface with 80-89% third degree corrosion -T3299 Corrosions involving 90% or more of body surface with 90% or more third degree corrosion -T33011A Superficial frostbite of right ear, initial encounter -T33011D Superficial frostbite of right ear, subsequent encounter -T33011S Superficial frostbite of right ear, sequela -T33012A Superficial frostbite of left ear, initial encounter -T33012D Superficial frostbite of left ear, subsequent encounter -T33012S Superficial frostbite of left ear, sequela -T33019A Superficial frostbite of unspecified ear, initial encounter -T33019D Superficial frostbite of unspecified ear, subsequent encounter -T33019S Superficial frostbite of unspecified ear, sequela -T3302XA Superficial frostbite of nose, initial encounter -T3302XD Superficial frostbite of nose, subsequent encounter -T3302XS Superficial frostbite of nose, sequela -T3309XA Superficial frostbite of other part of head, initial encounter -T3309XD Superficial frostbite of other part of head, subsequent encounter -T3309XS Superficial frostbite of other part of head, sequela -T331XXA Superficial frostbite of neck, initial encounter -T331XXD Superficial frostbite of neck, subsequent encounter -T331XXS Superficial frostbite of neck, sequela -T332XXA Superficial frostbite of thorax, initial encounter -T332XXD Superficial frostbite of thorax, subsequent encounter -T332XXS Superficial frostbite of thorax, sequela -T333XXA Superficial frostbite of abdominal wall, lower back and pelvis, initial encounter -T333XXD Superficial frostbite of abdominal wall, lower back and pelvis, subsequent encounter -T333XXS Superficial frostbite of abdominal wall, lower back and pelvis, sequela -T3340XA Superficial frostbite of unspecified arm, initial encounter -T3340XD Superficial frostbite of unspecified arm, subsequent encounter -T3340XS Superficial frostbite of unspecified arm, sequela -T3341XA Superficial frostbite of right arm, initial encounter -T3341XD Superficial frostbite of right arm, subsequent encounter -T3341XS Superficial frostbite of right arm, sequela -T3342XA Superficial frostbite of left arm, initial encounter -T3342XD Superficial frostbite of left arm, subsequent encounter -T3342XS Superficial frostbite of left arm, sequela -T33511A Superficial frostbite of right wrist, initial encounter -T33511D Superficial frostbite of right wrist, subsequent encounter -T33511S Superficial frostbite of right wrist, sequela -T33512A Superficial frostbite of left wrist, initial encounter -T33512D Superficial frostbite of left wrist, subsequent encounter -T33512S Superficial frostbite of left wrist, sequela -T33519A Superficial frostbite of unspecified wrist, initial encounter -T33519D Superficial frostbite of unspecified wrist, subsequent encounter -T33519S Superficial frostbite of unspecified wrist, sequela -T33521A Superficial frostbite of right hand, initial encounter -T33521D Superficial frostbite of right hand, subsequent encounter -T33521S Superficial frostbite of right hand, sequela -T33522A Superficial frostbite of left hand, initial encounter -T33522D Superficial frostbite of left hand, subsequent encounter -T33522S Superficial frostbite of left hand, sequela -T33529A Superficial frostbite of unspecified hand, initial encounter -T33529D Superficial frostbite of unspecified hand, subsequent encounter -T33529S Superficial frostbite of unspecified hand, sequela -T33531A Superficial frostbite of right finger(s), initial encounter -T33531D Superficial frostbite of right finger(s), subsequent encounter -T33531S Superficial frostbite of right finger(s), sequela -T33532A Superficial frostbite of left finger(s), initial encounter -T33532D Superficial frostbite of left finger(s), subsequent encounter -T33532S Superficial frostbite of left finger(s), sequela -T33539A Superficial frostbite of unspecified finger(s), initial encounter -T33539D Superficial frostbite of unspecified finger(s), subsequent encounter -T33539S Superficial frostbite of unspecified finger(s), sequela -T3360XA Superficial frostbite of unspecified hip and thigh, initial encounter -T3360XD Superficial frostbite of unspecified hip and thigh, subsequent encounter -T3360XS Superficial frostbite of unspecified hip and thigh, sequela -T3361XA Superficial frostbite of right hip and thigh, initial encounter -T3361XD Superficial frostbite of right hip and thigh, subsequent encounter -T3361XS Superficial frostbite of right hip and thigh, sequela -T3362XA Superficial frostbite of left hip and thigh, initial encounter -T3362XD Superficial frostbite of left hip and thigh, subsequent encounter -T3362XS Superficial frostbite of left hip and thigh, sequela -T3370XA Superficial frostbite of unspecified knee and lower leg, initial encounter -T3370XD Superficial frostbite of unspecified knee and lower leg, subsequent encounter -T3370XS Superficial frostbite of unspecified knee and lower leg, sequela -T3371XA Superficial frostbite of right knee and lower leg, initial encounter -T3371XD Superficial frostbite of right knee and lower leg, subsequent encounter -T3371XS Superficial frostbite of right knee and lower leg, sequela -T3372XA Superficial frostbite of left knee and lower leg, initial encounter -T3372XD Superficial frostbite of left knee and lower leg, subsequent encounter -T3372XS Superficial frostbite of left knee and lower leg, sequela -T33811A Superficial frostbite of right ankle, initial encounter -T33811D Superficial frostbite of right ankle, subsequent encounter -T33811S Superficial frostbite of right ankle, sequela -T33812A Superficial frostbite of left ankle, initial encounter -T33812D Superficial frostbite of left ankle, subsequent encounter -T33812S Superficial frostbite of left ankle, sequela -T33819A Superficial frostbite of unspecified ankle, initial encounter -T33819D Superficial frostbite of unspecified ankle, subsequent encounter -T33819S Superficial frostbite of unspecified ankle, sequela -T33821A Superficial frostbite of right foot, initial encounter -T33821D Superficial frostbite of right foot, subsequent encounter -T33821S Superficial frostbite of right foot, sequela -T33822A Superficial frostbite of left foot, initial encounter -T33822D Superficial frostbite of left foot, subsequent encounter -T33822S Superficial frostbite of left foot, sequela -T33829A Superficial frostbite of unspecified foot, initial encounter -T33829D Superficial frostbite of unspecified foot, subsequent encounter -T33829S Superficial frostbite of unspecified foot, sequela -T33831A Superficial frostbite of right toe(s), initial encounter -T33831D Superficial frostbite of right toe(s), subsequent encounter -T33831S Superficial frostbite of right toe(s), sequela -T33832A Superficial frostbite of left toe(s), initial encounter -T33832D Superficial frostbite of left toe(s), subsequent encounter -T33832S Superficial frostbite of left toe(s), sequela -T33839A Superficial frostbite of unspecified toe(s), initial encounter -T33839D Superficial frostbite of unspecified toe(s), subsequent encounter -T33839S Superficial frostbite of unspecified toe(s), sequela -T3390XA Superficial frostbite of unspecified sites, initial encounter -T3390XD Superficial frostbite of unspecified sites, subsequent encounter -T3390XS Superficial frostbite of unspecified sites, sequela -T3399XA Superficial frostbite of other sites, initial encounter -T3399XD Superficial frostbite of other sites, subsequent encounter -T3399XS Superficial frostbite of other sites, sequela -T34011A Frostbite with tissue necrosis of right ear, initial encounter -T34011D Frostbite with tissue necrosis of right ear, subsequent encounter -T34011S Frostbite with tissue necrosis of right ear, sequela -T34012A Frostbite with tissue necrosis of left ear, initial encounter -T34012D Frostbite with tissue necrosis of left ear, subsequent encounter -T34012S Frostbite with tissue necrosis of left ear, sequela -T34019A Frostbite with tissue necrosis of unspecified ear, initial encounter -T34019D Frostbite with tissue necrosis of unspecified ear, subsequent encounter -T34019S Frostbite with tissue necrosis of unspecified ear, sequela -T3402XA Frostbite with tissue necrosis of nose, initial encounter -T3402XD Frostbite with tissue necrosis of nose, subsequent encounter -T3402XS Frostbite with tissue necrosis of nose, sequela -T3409XA Frostbite with tissue necrosis of other part of head, initial encounter -T3409XD Frostbite with tissue necrosis of other part of head, subsequent encounter -T3409XS Frostbite with tissue necrosis of other part of head, sequela -T341XXA Frostbite with tissue necrosis of neck, initial encounter -T341XXD Frostbite with tissue necrosis of neck, subsequent encounter -T341XXS Frostbite with tissue necrosis of neck, sequela -T342XXA Frostbite with tissue necrosis of thorax, initial encounter -T342XXD Frostbite with tissue necrosis of thorax, subsequent encounter -T342XXS Frostbite with tissue necrosis of thorax, sequela -T343XXA Frostbite with tissue necrosis of abdominal wall, lower back and pelvis, initial encounter -T343XXD Frostbite with tissue necrosis of abdominal wall, lower back and pelvis, subsequent encounter -T343XXS Frostbite with tissue necrosis of abdominal wall, lower back and pelvis, sequela -T3440XA Frostbite with tissue necrosis of unspecified arm, initial encounter -T3440XD Frostbite with tissue necrosis of unspecified arm, subsequent encounter -T3440XS Frostbite with tissue necrosis of unspecified arm, sequela -T3441XA Frostbite with tissue necrosis of right arm, initial encounter -T3441XD Frostbite with tissue necrosis of right arm, subsequent encounter -T3441XS Frostbite with tissue necrosis of right arm, sequela -T3442XA Frostbite with tissue necrosis of left arm, initial encounter -T3442XD Frostbite with tissue necrosis of left arm, subsequent encounter -T3442XS Frostbite with tissue necrosis of left arm, sequela -T34511A Frostbite with tissue necrosis of right wrist, initial encounter -T34511D Frostbite with tissue necrosis of right wrist, subsequent encounter -T34511S Frostbite with tissue necrosis of right wrist, sequela -T34512A Frostbite with tissue necrosis of left wrist, initial encounter -T34512D Frostbite with tissue necrosis of left wrist, subsequent encounter -T34512S Frostbite with tissue necrosis of left wrist, sequela -T34519A Frostbite with tissue necrosis of unspecified wrist, initial encounter -T34519D Frostbite with tissue necrosis of unspecified wrist, subsequent encounter -T34519S Frostbite with tissue necrosis of unspecified wrist, sequela -T34521A Frostbite with tissue necrosis of right hand, initial encounter -T34521D Frostbite with tissue necrosis of right hand, subsequent encounter -T34521S Frostbite with tissue necrosis of right hand, sequela -T34522A Frostbite with tissue necrosis of left hand, initial encounter -T34522D Frostbite with tissue necrosis of left hand, subsequent encounter -T34522S Frostbite with tissue necrosis of left hand, sequela -T34529A Frostbite with tissue necrosis of unspecified hand, initial encounter -T34529D Frostbite with tissue necrosis of unspecified hand, subsequent encounter -T34529S Frostbite with tissue necrosis of unspecified hand, sequela -T34531A Frostbite with tissue necrosis of right finger(s), initial encounter -T34531D Frostbite with tissue necrosis of right finger(s), subsequent encounter -T34531S Frostbite with tissue necrosis of right finger(s), sequela -T34532A Frostbite with tissue necrosis of left finger(s), initial encounter -T34532D Frostbite with tissue necrosis of left finger(s), subsequent encounter -T34532S Frostbite with tissue necrosis of left finger(s), sequela -T34539A Frostbite with tissue necrosis of unspecified finger(s), initial encounter -T34539D Frostbite with tissue necrosis of unspecified finger(s), subsequent encounter -T34539S Frostbite with tissue necrosis of unspecified finger(s), sequela -T3460XA Frostbite with tissue necrosis of unspecified hip and thigh, initial encounter -T3460XD Frostbite with tissue necrosis of unspecified hip and thigh, subsequent encounter -T3460XS Frostbite with tissue necrosis of unspecified hip and thigh, sequela -T3461XA Frostbite with tissue necrosis of right hip and thigh, initial encounter -T3461XD Frostbite with tissue necrosis of right hip and thigh, subsequent encounter -T3461XS Frostbite with tissue necrosis of right hip and thigh, sequela -T3462XA Frostbite with tissue necrosis of left hip and thigh, initial encounter -T3462XD Frostbite with tissue necrosis of left hip and thigh, subsequent encounter -T3462XS Frostbite with tissue necrosis of left hip and thigh, sequela -T3470XA Frostbite with tissue necrosis of unspecified knee and lower leg, initial encounter -T3470XD Frostbite with tissue necrosis of unspecified knee and lower leg, subsequent encounter -T3470XS Frostbite with tissue necrosis of unspecified knee and lower leg, sequela -T3471XA Frostbite with tissue necrosis of right knee and lower leg, initial encounter -T3471XD Frostbite with tissue necrosis of right knee and lower leg, subsequent encounter -T3471XS Frostbite with tissue necrosis of right knee and lower leg, sequela -T3472XA Frostbite with tissue necrosis of left knee and lower leg, initial encounter -T3472XD Frostbite with tissue necrosis of left knee and lower leg, subsequent encounter -T3472XS Frostbite with tissue necrosis of left knee and lower leg, sequela -T34811A Frostbite with tissue necrosis of right ankle, initial encounter -T34811D Frostbite with tissue necrosis of right ankle, subsequent encounter -T34811S Frostbite with tissue necrosis of right ankle, sequela -T34812A Frostbite with tissue necrosis of left ankle, initial encounter -T34812D Frostbite with tissue necrosis of left ankle, subsequent encounter -T34812S Frostbite with tissue necrosis of left ankle, sequela -T34819A Frostbite with tissue necrosis of unspecified ankle, initial encounter -T34819D Frostbite with tissue necrosis of unspecified ankle, subsequent encounter -T34819S Frostbite with tissue necrosis of unspecified ankle, sequela -T34821A Frostbite with tissue necrosis of right foot, initial encounter -T34821D Frostbite with tissue necrosis of right foot, subsequent encounter -T34821S Frostbite with tissue necrosis of right foot, sequela -T34822A Frostbite with tissue necrosis of left foot, initial encounter -T34822D Frostbite with tissue necrosis of left foot, subsequent encounter -T34822S Frostbite with tissue necrosis of left foot, sequela -T34829A Frostbite with tissue necrosis of unspecified foot, initial encounter -T34829D Frostbite with tissue necrosis of unspecified foot, subsequent encounter -T34829S Frostbite with tissue necrosis of unspecified foot, sequela -T34831A Frostbite with tissue necrosis of right toe(s), initial encounter -T34831D Frostbite with tissue necrosis of right toe(s), subsequent encounter -T34831S Frostbite with tissue necrosis of right toe(s), sequela -T34832A Frostbite with tissue necrosis of left toe(s), initial encounter -T34832D Frostbite with tissue necrosis of left toe(s), subsequent encounter -T34832S Frostbite with tissue necrosis of left toe(s), sequela -T34839A Frostbite with tissue necrosis of unspecified toe(s), initial encounter -T34839D Frostbite with tissue necrosis of unspecified toe(s), subsequent encounter -T34839S Frostbite with tissue necrosis of unspecified toe(s), sequela -T3490XA Frostbite with tissue necrosis of unspecified sites, initial encounter -T3490XD Frostbite with tissue necrosis of unspecified sites, subsequent encounter -T3490XS Frostbite with tissue necrosis of unspecified sites, sequela -T3499XA Frostbite with tissue necrosis of other sites, initial encounter -T3499XD Frostbite with tissue necrosis of other sites, subsequent encounter -T3499XS Frostbite with tissue necrosis of other sites, sequela -T360X1A Poisoning by penicillins, accidental (unintentional), initial encounter -T360X1D Poisoning by penicillins, accidental (unintentional), subsequent encounter -T360X1S Poisoning by penicillins, accidental (unintentional), sequela -T360X2A Poisoning by penicillins, intentional self-harm, initial encounter -T360X2D Poisoning by penicillins, intentional self-harm, subsequent encounter -T360X2S Poisoning by penicillins, intentional self-harm, sequela -T360X3A Poisoning by penicillins, assault, initial encounter -T360X3D Poisoning by penicillins, assault, subsequent encounter -T360X3S Poisoning by penicillins, assault, sequela -T360X4A Poisoning by penicillins, undetermined, initial encounter -T360X4D Poisoning by penicillins, undetermined, subsequent encounter -T360X4S Poisoning by penicillins, undetermined, sequela -T360X5A Adverse effect of penicillins, initial encounter -T360X5D Adverse effect of penicillins, subsequent encounter -T360X5S Adverse effect of penicillins, sequela -T360X6A Underdosing of penicillins, initial encounter -T360X6D Underdosing of penicillins, subsequent encounter -T360X6S Underdosing of penicillins, sequela -T361X1A Poisoning by cephalosporins and other beta-lactam antibiotics, accidental (unintentional), initial encounter -T361X1D Poisoning by cephalosporins and other beta-lactam antibiotics, accidental (unintentional), subsequent encounter -T361X1S Poisoning by cephalosporins and other beta-lactam antibiotics, accidental (unintentional), sequela -T361X2A Poisoning by cephalosporins and other beta-lactam antibiotics, intentional self-harm, initial encounter -T361X2D Poisoning by cephalosporins and other beta-lactam antibiotics, intentional self-harm, subsequent encounter -T361X2S Poisoning by cephalosporins and other beta-lactam antibiotics, intentional self-harm, sequela -T361X3A Poisoning by cephalosporins and other beta-lactam antibiotics, assault, initial encounter -T361X3D Poisoning by cephalosporins and other beta-lactam antibiotics, assault, subsequent encounter -T361X3S Poisoning by cephalosporins and other beta-lactam antibiotics, assault, sequela -T361X4A Poisoning by cephalosporins and other beta-lactam antibiotics, undetermined, initial encounter -T361X4D Poisoning by cephalosporins and other beta-lactam antibiotics, undetermined, subsequent encounter -T361X4S Poisoning by cephalosporins and other beta-lactam antibiotics, undetermined, sequela -T361X5A Adverse effect of cephalosporins and other beta-lactam antibiotics, initial encounter -T361X5D Adverse effect of cephalosporins and other beta-lactam antibiotics, subsequent encounter -T361X5S Adverse effect of cephalosporins and other beta-lactam antibiotics, sequela -T361X6A Underdosing of cephalosporins and other beta-lactam antibiotics, initial encounter -T361X6D Underdosing of cephalosporins and other beta-lactam antibiotics, subsequent encounter -T361X6S Underdosing of cephalosporins and other beta-lactam antibiotics, sequela -T362X1A Poisoning by chloramphenicol group, accidental (unintentional), initial encounter -T362X1D Poisoning by chloramphenicol group, accidental (unintentional), subsequent encounter -T362X1S Poisoning by chloramphenicol group, accidental (unintentional), sequela -T362X2A Poisoning by chloramphenicol group, intentional self-harm, initial encounter -T362X2D Poisoning by chloramphenicol group, intentional self-harm, subsequent encounter -T362X2S Poisoning by chloramphenicol group, intentional self-harm, sequela -T362X3A Poisoning by chloramphenicol group, assault, initial encounter -T362X3D Poisoning by chloramphenicol group, assault, subsequent encounter -T362X3S Poisoning by chloramphenicol group, assault, sequela -T362X4A Poisoning by chloramphenicol group, undetermined, initial encounter -T362X4D Poisoning by chloramphenicol group, undetermined, subsequent encounter -T362X4S Poisoning by chloramphenicol group, undetermined, sequela -T362X5A Adverse effect of chloramphenicol group, initial encounter -T362X5D Adverse effect of chloramphenicol group, subsequent encounter -T362X5S Adverse effect of chloramphenicol group, sequela -T362X6A Underdosing of chloramphenicol group, initial encounter -T362X6D Underdosing of chloramphenicol group, subsequent encounter -T362X6S Underdosing of chloramphenicol group, sequela -T363X1A Poisoning by macrolides, accidental (unintentional), initial encounter -T363X1D Poisoning by macrolides, accidental (unintentional), subsequent encounter -T363X1S Poisoning by macrolides, accidental (unintentional), sequela -T363X2A Poisoning by macrolides, intentional self-harm, initial encounter -T363X2D Poisoning by macrolides, intentional self-harm, subsequent encounter -T363X2S Poisoning by macrolides, intentional self-harm, sequela -T363X3A Poisoning by macrolides, assault, initial encounter -T363X3D Poisoning by macrolides, assault, subsequent encounter -T363X3S Poisoning by macrolides, assault, sequela -T363X4A Poisoning by macrolides, undetermined, initial encounter -T363X4D Poisoning by macrolides, undetermined, subsequent encounter -T363X4S Poisoning by macrolides, undetermined, sequela -T363X5A Adverse effect of macrolides, initial encounter -T363X5D Adverse effect of macrolides, subsequent encounter -T363X5S Adverse effect of macrolides, sequela -T363X6A Underdosing of macrolides, initial encounter -T363X6D Underdosing of macrolides, subsequent encounter -T363X6S Underdosing of macrolides, sequela -T364X1A Poisoning by tetracyclines, accidental (unintentional), initial encounter -T364X1D Poisoning by tetracyclines, accidental (unintentional), subsequent encounter -T364X1S Poisoning by tetracyclines, accidental (unintentional), sequela -T364X2A Poisoning by tetracyclines, intentional self-harm, initial encounter -T364X2D Poisoning by tetracyclines, intentional self-harm, subsequent encounter -T364X2S Poisoning by tetracyclines, intentional self-harm, sequela -T364X3A Poisoning by tetracyclines, assault, initial encounter -T364X3D Poisoning by tetracyclines, assault, subsequent encounter -T364X3S Poisoning by tetracyclines, assault, sequela -T364X4A Poisoning by tetracyclines, undetermined, initial encounter -T364X4D Poisoning by tetracyclines, undetermined, subsequent encounter -T364X4S Poisoning by tetracyclines, undetermined, sequela -T364X5A Adverse effect of tetracyclines, initial encounter -T364X5D Adverse effect of tetracyclines, subsequent encounter -T364X5S Adverse effect of tetracyclines, sequela -T364X6A Underdosing of tetracyclines, initial encounter -T364X6D Underdosing of tetracyclines, subsequent encounter -T364X6S Underdosing of tetracyclines, sequela -T365X1A Poisoning by aminoglycosides, accidental (unintentional), initial encounter -T365X1D Poisoning by aminoglycosides, accidental (unintentional), subsequent encounter -T365X1S Poisoning by aminoglycosides, accidental (unintentional), sequela -T365X2A Poisoning by aminoglycosides, intentional self-harm, initial encounter -T365X2D Poisoning by aminoglycosides, intentional self-harm, subsequent encounter -T365X2S Poisoning by aminoglycosides, intentional self-harm, sequela -T365X3A Poisoning by aminoglycosides, assault, initial encounter -T365X3D Poisoning by aminoglycosides, assault, subsequent encounter -T365X3S Poisoning by aminoglycosides, assault, sequela -T365X4A Poisoning by aminoglycosides, undetermined, initial encounter -T365X4D Poisoning by aminoglycosides, undetermined, subsequent encounter -T365X4S Poisoning by aminoglycosides, undetermined, sequela -T365X5A Adverse effect of aminoglycosides, initial encounter -T365X5D Adverse effect of aminoglycosides, subsequent encounter -T365X5S Adverse effect of aminoglycosides, sequela -T365X6A Underdosing of aminoglycosides, initial encounter -T365X6D Underdosing of aminoglycosides, subsequent encounter -T365X6S Underdosing of aminoglycosides, sequela -T366X1A Poisoning by rifampicins, accidental (unintentional), initial encounter -T366X1D Poisoning by rifampicins, accidental (unintentional), subsequent encounter -T366X1S Poisoning by rifampicins, accidental (unintentional), sequela -T366X2A Poisoning by rifampicins, intentional self-harm, initial encounter -T366X2D Poisoning by rifampicins, intentional self-harm, subsequent encounter -T366X2S Poisoning by rifampicins, intentional self-harm, sequela -T366X3A Poisoning by rifampicins, assault, initial encounter -T366X3D Poisoning by rifampicins, assault, subsequent encounter -T366X3S Poisoning by rifampicins, assault, sequela -T366X4A Poisoning by rifampicins, undetermined, initial encounter -T366X4D Poisoning by rifampicins, undetermined, subsequent encounter -T366X4S Poisoning by rifampicins, undetermined, sequela -T366X5A Adverse effect of rifampicins, initial encounter -T366X5D Adverse effect of rifampicins, subsequent encounter -T366X5S Adverse effect of rifampicins, sequela -T366X6A Underdosing of rifampicins, initial encounter -T366X6D Underdosing of rifampicins, subsequent encounter -T366X6S Underdosing of rifampicins, sequela -T367X1A Poisoning by antifungal antibiotics, systemically used, accidental (unintentional), initial encounter -T367X1D Poisoning by antifungal antibiotics, systemically used, accidental (unintentional), subsequent encounter -T367X1S Poisoning by antifungal antibiotics, systemically used, accidental (unintentional), sequela -T367X2A Poisoning by antifungal antibiotics, systemically used, intentional self-harm, initial encounter -T367X2D Poisoning by antifungal antibiotics, systemically used, intentional self-harm, subsequent encounter -T367X2S Poisoning by antifungal antibiotics, systemically used, intentional self-harm, sequela -T367X3A Poisoning by antifungal antibiotics, systemically used, assault, initial encounter -T367X3D Poisoning by antifungal antibiotics, systemically used, assault, subsequent encounter -T367X3S Poisoning by antifungal antibiotics, systemically used, assault, sequela -T367X4A Poisoning by antifungal antibiotics, systemically used, undetermined, initial encounter -T367X4D Poisoning by antifungal antibiotics, systemically used, undetermined, subsequent encounter -T367X4S Poisoning by antifungal antibiotics, systemically used, undetermined, sequela -T367X5A Adverse effect of antifungal antibiotics, systemically used, initial encounter -T367X5D Adverse effect of antifungal antibiotics, systemically used, subsequent encounter -T367X5S Adverse effect of antifungal antibiotics, systemically used, sequela -T367X6A Underdosing of antifungal antibiotics, systemically used, initial encounter -T367X6D Underdosing of antifungal antibiotics, systemically used, subsequent encounter -T367X6S Underdosing of antifungal antibiotics, systemically used, sequela -T368X1A Poisoning by other systemic antibiotics, accidental (unintentional), initial encounter -T368X1D Poisoning by other systemic antibiotics, accidental (unintentional), subsequent encounter -T368X1S Poisoning by other systemic antibiotics, accidental (unintentional), sequela -T368X2A Poisoning by other systemic antibiotics, intentional self-harm, initial encounter -T368X2D Poisoning by other systemic antibiotics, intentional self-harm, subsequent encounter -T368X2S Poisoning by other systemic antibiotics, intentional self-harm, sequela -T368X3A Poisoning by other systemic antibiotics, assault, initial encounter -T368X3D Poisoning by other systemic antibiotics, assault, subsequent encounter -T368X3S Poisoning by other systemic antibiotics, assault, sequela -T368X4A Poisoning by other systemic antibiotics, undetermined, initial encounter -T368X4D Poisoning by other systemic antibiotics, undetermined, subsequent encounter -T368X4S Poisoning by other systemic antibiotics, undetermined, sequela -T368X5A Adverse effect of other systemic antibiotics, initial encounter -T368X5D Adverse effect of other systemic antibiotics, subsequent encounter -T368X5S Adverse effect of other systemic antibiotics, sequela -T368X6A Underdosing of other systemic antibiotics, initial encounter -T368X6D Underdosing of other systemic antibiotics, subsequent encounter -T368X6S Underdosing of other systemic antibiotics, sequela -T3691XA Poisoning by unspecified systemic antibiotic, accidental (unintentional), initial encounter -T3691XD Poisoning by unspecified systemic antibiotic, accidental (unintentional), subsequent encounter -T3691XS Poisoning by unspecified systemic antibiotic, accidental (unintentional), sequela -T3692XA Poisoning by unspecified systemic antibiotic, intentional self-harm, initial encounter -T3692XD Poisoning by unspecified systemic antibiotic, intentional self-harm, subsequent encounter -T3692XS Poisoning by unspecified systemic antibiotic, intentional self-harm, sequela -T3693XA Poisoning by unspecified systemic antibiotic, assault, initial encounter -T3693XD Poisoning by unspecified systemic antibiotic, assault, subsequent encounter -T3693XS Poisoning by unspecified systemic antibiotic, assault, sequela -T3694XA Poisoning by unspecified systemic antibiotic, undetermined, initial encounter -T3694XD Poisoning by unspecified systemic antibiotic, undetermined, subsequent encounter -T3694XS Poisoning by unspecified systemic antibiotic, undetermined, sequela -T3695XA Adverse effect of unspecified systemic antibiotic, initial encounter -T3695XD Adverse effect of unspecified systemic antibiotic, subsequent encounter -T3695XS Adverse effect of unspecified systemic antibiotic, sequela -T3696XA Underdosing of unspecified systemic antibiotic, initial encounter -T3696XD Underdosing of unspecified systemic antibiotic, subsequent encounter -T3696XS Underdosing of unspecified systemic antibiotic, sequela -T370X1A Poisoning by sulfonamides, accidental (unintentional), initial encounter -T370X1D Poisoning by sulfonamides, accidental (unintentional), subsequent encounter -T370X1S Poisoning by sulfonamides, accidental (unintentional), sequela -T370X2A Poisoning by sulfonamides, intentional self-harm, initial encounter -T370X2D Poisoning by sulfonamides, intentional self-harm, subsequent encounter -T370X2S Poisoning by sulfonamides, intentional self-harm, sequela -T370X3A Poisoning by sulfonamides, assault, initial encounter -T370X3D Poisoning by sulfonamides, assault, subsequent encounter -T370X3S Poisoning by sulfonamides, assault, sequela -T370X4A Poisoning by sulfonamides, undetermined, initial encounter -T370X4D Poisoning by sulfonamides, undetermined, subsequent encounter -T370X4S Poisoning by sulfonamides, undetermined, sequela -T370X5A Adverse effect of sulfonamides, initial encounter -T370X5D Adverse effect of sulfonamides, subsequent encounter -T370X5S Adverse effect of sulfonamides, sequela -T370X6A Underdosing of sulfonamides, initial encounter -T370X6D Underdosing of sulfonamides, subsequent encounter -T370X6S Underdosing of sulfonamides, sequela -T371X1A Poisoning by antimycobacterial drugs, accidental (unintentional), initial encounter -T371X1D Poisoning by antimycobacterial drugs, accidental (unintentional), subsequent encounter -T371X1S Poisoning by antimycobacterial drugs, accidental (unintentional), sequela -T371X2A Poisoning by antimycobacterial drugs, intentional self-harm, initial encounter -T371X2D Poisoning by antimycobacterial drugs, intentional self-harm, subsequent encounter -T371X2S Poisoning by antimycobacterial drugs, intentional self-harm, sequela -T371X3A Poisoning by antimycobacterial drugs, assault, initial encounter -T371X3D Poisoning by antimycobacterial drugs, assault, subsequent encounter -T371X3S Poisoning by antimycobacterial drugs, assault, sequela -T371X4A Poisoning by antimycobacterial drugs, undetermined, initial encounter -T371X4D Poisoning by antimycobacterial drugs, undetermined, subsequent encounter -T371X4S Poisoning by antimycobacterial drugs, undetermined, sequela -T371X5A Adverse effect of antimycobacterial drugs, initial encounter -T371X5D Adverse effect of antimycobacterial drugs, subsequent encounter -T371X5S Adverse effect of antimycobacterial drugs, sequela -T371X6A Underdosing of antimycobacterial drugs, initial encounter -T371X6D Underdosing of antimycobacterial drugs, subsequent encounter -T371X6S Underdosing of antimycobacterial drugs, sequela -T372X1A Poisoning by antimalarials and drugs acting on other blood protozoa, accidental (unintentional), initial encounter -T372X1D Poisoning by antimalarials and drugs acting on other blood protozoa, accidental (unintentional), subsequent encounter -T372X1S Poisoning by antimalarials and drugs acting on other blood protozoa, accidental (unintentional), sequela -T372X2A Poisoning by antimalarials and drugs acting on other blood protozoa, intentional self-harm, initial encounter -T372X2D Poisoning by antimalarials and drugs acting on other blood protozoa, intentional self-harm, subsequent encounter -T372X2S Poisoning by antimalarials and drugs acting on other blood protozoa, intentional self-harm, sequela -T372X3A Poisoning by antimalarials and drugs acting on other blood protozoa, assault, initial encounter -T372X3D Poisoning by antimalarials and drugs acting on other blood protozoa, assault, subsequent encounter -T372X3S Poisoning by antimalarials and drugs acting on other blood protozoa, assault, sequela -T372X4A Poisoning by antimalarials and drugs acting on other blood protozoa, undetermined, initial encounter -T372X4D Poisoning by antimalarials and drugs acting on other blood protozoa, undetermined, subsequent encounter -T372X4S Poisoning by antimalarials and drugs acting on other blood protozoa, undetermined, sequela -T372X5A Adverse effect of antimalarials and drugs acting on other blood protozoa, initial encounter -T372X5D Adverse effect of antimalarials and drugs acting on other blood protozoa, subsequent encounter -T372X5S Adverse effect of antimalarials and drugs acting on other blood protozoa, sequela -T372X6A Underdosing of antimalarials and drugs acting on other blood protozoa, initial encounter -T372X6D Underdosing of antimalarials and drugs acting on other blood protozoa, subsequent encounter -T372X6S Underdosing of antimalarials and drugs acting on other blood protozoa, sequela -T373X1A Poisoning by other antiprotozoal drugs, accidental (unintentional), initial encounter -T373X1D Poisoning by other antiprotozoal drugs, accidental (unintentional), subsequent encounter -T373X1S Poisoning by other antiprotozoal drugs, accidental (unintentional), sequela -T373X2A Poisoning by other antiprotozoal drugs, intentional self-harm, initial encounter -T373X2D Poisoning by other antiprotozoal drugs, intentional self-harm, subsequent encounter -T373X2S Poisoning by other antiprotozoal drugs, intentional self-harm, sequela -T373X3A Poisoning by other antiprotozoal drugs, assault, initial encounter -T373X3D Poisoning by other antiprotozoal drugs, assault, subsequent encounter -T373X3S Poisoning by other antiprotozoal drugs, assault, sequela -T373X4A Poisoning by other antiprotozoal drugs, undetermined, initial encounter -T373X4D Poisoning by other antiprotozoal drugs, undetermined, subsequent encounter -T373X4S Poisoning by other antiprotozoal drugs, undetermined, sequela -T373X5A Adverse effect of other antiprotozoal drugs, initial encounter -T373X5D Adverse effect of other antiprotozoal drugs, subsequent encounter -T373X5S Adverse effect of other antiprotozoal drugs, sequela -T373X6A Underdosing of other antiprotozoal drugs, initial encounter -T373X6D Underdosing of other antiprotozoal drugs, subsequent encounter -T373X6S Underdosing of other antiprotozoal drugs, sequela -T374X1A Poisoning by anthelminthics, accidental (unintentional), initial encounter -T374X1D Poisoning by anthelminthics, accidental (unintentional), subsequent encounter -T374X1S Poisoning by anthelminthics, accidental (unintentional), sequela -T374X2A Poisoning by anthelminthics, intentional self-harm, initial encounter -T374X2D Poisoning by anthelminthics, intentional self-harm, subsequent encounter -T374X2S Poisoning by anthelminthics, intentional self-harm, sequela -T374X3A Poisoning by anthelminthics, assault, initial encounter -T374X3D Poisoning by anthelminthics, assault, subsequent encounter -T374X3S Poisoning by anthelminthics, assault, sequela -T374X4A Poisoning by anthelminthics, undetermined, initial encounter -T374X4D Poisoning by anthelminthics, undetermined, subsequent encounter -T374X4S Poisoning by anthelminthics, undetermined, sequela -T374X5A Adverse effect of anthelminthics, initial encounter -T374X5D Adverse effect of anthelminthics, subsequent encounter -T374X5S Adverse effect of anthelminthics, sequela -T374X6A Underdosing of anthelminthics, initial encounter -T374X6D Underdosing of anthelminthics, subsequent encounter -T374X6S Underdosing of anthelminthics, sequela -T375X1A Poisoning by antiviral drugs, accidental (unintentional), initial encounter -T375X1D Poisoning by antiviral drugs, accidental (unintentional), subsequent encounter -T375X1S Poisoning by antiviral drugs, accidental (unintentional), sequela -T375X2A Poisoning by antiviral drugs, intentional self-harm, initial encounter -T375X2D Poisoning by antiviral drugs, intentional self-harm, subsequent encounter -T375X2S Poisoning by antiviral drugs, intentional self-harm, sequela -T375X3A Poisoning by antiviral drugs, assault, initial encounter -T375X3D Poisoning by antiviral drugs, assault, subsequent encounter -T375X3S Poisoning by antiviral drugs, assault, sequela -T375X4A Poisoning by antiviral drugs, undetermined, initial encounter -T375X4D Poisoning by antiviral drugs, undetermined, subsequent encounter -T375X4S Poisoning by antiviral drugs, undetermined, sequela -T375X5A Adverse effect of antiviral drugs, initial encounter -T375X5D Adverse effect of antiviral drugs, subsequent encounter -T375X5S Adverse effect of antiviral drugs, sequela -T375X6A Underdosing of antiviral drugs, initial encounter -T375X6D Underdosing of antiviral drugs, subsequent encounter -T375X6S Underdosing of antiviral drugs, sequela -T378X1A Poisoning by other specified systemic anti-infectives and antiparasitics, accidental (unintentional), initial encounter -T378X1D Poisoning by other specified systemic anti-infectives and antiparasitics, accidental (unintentional), subsequent encounter -T378X1S Poisoning by other specified systemic anti-infectives and antiparasitics, accidental (unintentional), sequela -T378X2A Poisoning by other specified systemic anti-infectives and antiparasitics, intentional self-harm, initial encounter -T378X2D Poisoning by other specified systemic anti-infectives and antiparasitics, intentional self-harm, subsequent encounter -T378X2S Poisoning by other specified systemic anti-infectives and antiparasitics, intentional self-harm, sequela -T378X3A Poisoning by other specified systemic anti-infectives and antiparasitics, assault, initial encounter -T378X3D Poisoning by other specified systemic anti-infectives and antiparasitics, assault, subsequent encounter -T378X3S Poisoning by other specified systemic anti-infectives and antiparasitics, assault, sequela -T378X4A Poisoning by other specified systemic anti-infectives and antiparasitics, undetermined, initial encounter -T378X4D Poisoning by other specified systemic anti-infectives and antiparasitics, undetermined, subsequent encounter -T378X4S Poisoning by other specified systemic anti-infectives and antiparasitics, undetermined, sequela -T378X5A Adverse effect of other specified systemic anti-infectives and antiparasitics, initial encounter -T378X5D Adverse effect of other specified systemic anti-infectives and antiparasitics, subsequent encounter -T378X5S Adverse effect of other specified systemic anti-infectives and antiparasitics, sequela -T378X6A Underdosing of other specified systemic anti-infectives and antiparasitics, initial encounter -T378X6D Underdosing of other specified systemic anti-infectives and antiparasitics, subsequent encounter -T378X6S Underdosing of other specified systemic anti-infectives and antiparasitics, sequela -T3791XA Poisoning by unspecified systemic anti-infective and antiparasitics, accidental (unintentional), initial encounter -T3791XD Poisoning by unspecified systemic anti-infective and antiparasitics, accidental (unintentional), subsequent encounter -T3791XS Poisoning by unspecified systemic anti-infective and antiparasitics, accidental (unintentional), sequela -T3792XA Poisoning by unspecified systemic anti-infective and antiparasitics, intentional self-harm, initial encounter -T3792XD Poisoning by unspecified systemic anti-infective and antiparasitics, intentional self-harm, subsequent encounter -T3792XS Poisoning by unspecified systemic anti-infective and antiparasitics, intentional self-harm, sequela -T3793XA Poisoning by unspecified systemic anti-infective and antiparasitics, assault, initial encounter -T3793XD Poisoning by unspecified systemic anti-infective and antiparasitics, assault, subsequent encounter -T3793XS Poisoning by unspecified systemic anti-infective and antiparasitics, assault, sequela -T3794XA Poisoning by unspecified systemic anti-infective and antiparasitics, undetermined, initial encounter -T3794XD Poisoning by unspecified systemic anti-infective and antiparasitics, undetermined, subsequent encounter -T3794XS Poisoning by unspecified systemic anti-infective and antiparasitics, undetermined, sequela -T3795XA Adverse effect of unspecified systemic anti-infective and antiparasitic, initial encounter -T3795XD Adverse effect of unspecified systemic anti-infective and antiparasitic, subsequent encounter -T3795XS Adverse effect of unspecified systemic anti-infective and antiparasitic, sequela -T3796XA Underdosing of unspecified systemic anti-infectives and antiparasitics, initial encounter -T3796XD Underdosing of unspecified systemic anti-infectives and antiparasitics, subsequent encounter -T3796XS Underdosing of unspecified systemic anti-infectives and antiparasitics, sequela -T380X1A Poisoning by glucocorticoids and synthetic analogues, accidental (unintentional), initial encounter -T380X1D Poisoning by glucocorticoids and synthetic analogues, accidental (unintentional), subsequent encounter -T380X1S Poisoning by glucocorticoids and synthetic analogues, accidental (unintentional), sequela -T380X2A Poisoning by glucocorticoids and synthetic analogues, intentional self-harm, initial encounter -T380X2D Poisoning by glucocorticoids and synthetic analogues, intentional self-harm, subsequent encounter -T380X2S Poisoning by glucocorticoids and synthetic analogues, intentional self-harm, sequela -T380X3A Poisoning by glucocorticoids and synthetic analogues, assault, initial encounter -T380X3D Poisoning by glucocorticoids and synthetic analogues, assault, subsequent encounter -T380X3S Poisoning by glucocorticoids and synthetic analogues, assault, sequela -T380X4A Poisoning by glucocorticoids and synthetic analogues, undetermined, initial encounter -T380X4D Poisoning by glucocorticoids and synthetic analogues, undetermined, subsequent encounter -T380X4S Poisoning by glucocorticoids and synthetic analogues, undetermined, sequela -T380X5A Adverse effect of glucocorticoids and synthetic analogues, initial encounter -T380X5D Adverse effect of glucocorticoids and synthetic analogues, subsequent encounter -T380X5S Adverse effect of glucocorticoids and synthetic analogues, sequela -T380X6A Underdosing of glucocorticoids and synthetic analogues, initial encounter -T380X6D Underdosing of glucocorticoids and synthetic analogues, subsequent encounter -T380X6S Underdosing of glucocorticoids and synthetic analogues, sequela -T381X1A Poisoning by thyroid hormones and substitutes, accidental (unintentional), initial encounter -T381X1D Poisoning by thyroid hormones and substitutes, accidental (unintentional), subsequent encounter -T381X1S Poisoning by thyroid hormones and substitutes, accidental (unintentional), sequela -T381X2A Poisoning by thyroid hormones and substitutes, intentional self-harm, initial encounter -T381X2D Poisoning by thyroid hormones and substitutes, intentional self-harm, subsequent encounter -T381X2S Poisoning by thyroid hormones and substitutes, intentional self-harm, sequela -T381X3A Poisoning by thyroid hormones and substitutes, assault, initial encounter -T381X3D Poisoning by thyroid hormones and substitutes, assault, subsequent encounter -T381X3S Poisoning by thyroid hormones and substitutes, assault, sequela -T381X4A Poisoning by thyroid hormones and substitutes, undetermined, initial encounter -T381X4D Poisoning by thyroid hormones and substitutes, undetermined, subsequent encounter -T381X4S Poisoning by thyroid hormones and substitutes, undetermined, sequela -T381X5A Adverse effect of thyroid hormones and substitutes, initial encounter -T381X5D Adverse effect of thyroid hormones and substitutes, subsequent encounter -T381X5S Adverse effect of thyroid hormones and substitutes, sequela -T381X6A Underdosing of thyroid hormones and substitutes, initial encounter -T381X6D Underdosing of thyroid hormones and substitutes, subsequent encounter -T381X6S Underdosing of thyroid hormones and substitutes, sequela -T382X1A Poisoning by antithyroid drugs, accidental (unintentional), initial encounter -T382X1D Poisoning by antithyroid drugs, accidental (unintentional), subsequent encounter -T382X1S Poisoning by antithyroid drugs, accidental (unintentional), sequela -T382X2A Poisoning by antithyroid drugs, intentional self-harm, initial encounter -T382X2D Poisoning by antithyroid drugs, intentional self-harm, subsequent encounter -T382X2S Poisoning by antithyroid drugs, intentional self-harm, sequela -T382X3A Poisoning by antithyroid drugs, assault, initial encounter -T382X3D Poisoning by antithyroid drugs, assault, subsequent encounter -T382X3S Poisoning by antithyroid drugs, assault, sequela -T382X4A Poisoning by antithyroid drugs, undetermined, initial encounter -T382X4D Poisoning by antithyroid drugs, undetermined, subsequent encounter -T382X4S Poisoning by antithyroid drugs, undetermined, sequela -T382X5A Adverse effect of antithyroid drugs, initial encounter -T382X5D Adverse effect of antithyroid drugs, subsequent encounter -T382X5S Adverse effect of antithyroid drugs, sequela -T382X6A Underdosing of antithyroid drugs, initial encounter -T382X6D Underdosing of antithyroid drugs, subsequent encounter -T382X6S Underdosing of antithyroid drugs, sequela -T383X1A Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, accidental (unintentional), initial encounter -T383X1D Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, accidental (unintentional), subsequent encounter -T383X1S Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, accidental (unintentional), sequela -T383X2A Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, intentional self-harm, initial encounter -T383X2D Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, intentional self-harm, subsequent encounter -T383X2S Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, intentional self-harm, sequela -T383X3A Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, assault, initial encounter -T383X3D Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, assault, subsequent encounter -T383X3S Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, assault, sequela -T383X4A Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, undetermined, initial encounter -T383X4D Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, undetermined, subsequent encounter -T383X4S Poisoning by insulin and oral hypoglycemic [antidiabetic] drugs, undetermined, sequela -T383X5A Adverse effect of insulin and oral hypoglycemic [antidiabetic] drugs, initial encounter -T383X5D Adverse effect of insulin and oral hypoglycemic [antidiabetic] drugs, subsequent encounter -T383X5S Adverse effect of insulin and oral hypoglycemic [antidiabetic] drugs, sequela -T383X6A Underdosing of insulin and oral hypoglycemic [antidiabetic] drugs, initial encounter -T383X6D Underdosing of insulin and oral hypoglycemic [antidiabetic] drugs, subsequent encounter -T383X6S Underdosing of insulin and oral hypoglycemic [antidiabetic] drugs, sequela -T384X1A Poisoning by oral contraceptives, accidental (unintentional), initial encounter -T384X1D Poisoning by oral contraceptives, accidental (unintentional), subsequent encounter -T384X1S Poisoning by oral contraceptives, accidental (unintentional), sequela -T384X2A Poisoning by oral contraceptives, intentional self-harm, initial encounter -T384X2D Poisoning by oral contraceptives, intentional self-harm, subsequent encounter -T384X2S Poisoning by oral contraceptives, intentional self-harm, sequela -T384X3A Poisoning by oral contraceptives, assault, initial encounter -T384X3D Poisoning by oral contraceptives, assault, subsequent encounter -T384X3S Poisoning by oral contraceptives, assault, sequela -T384X4A Poisoning by oral contraceptives, undetermined, initial encounter -T384X4D Poisoning by oral contraceptives, undetermined, subsequent encounter -T384X4S Poisoning by oral contraceptives, undetermined, sequela -T384X5A Adverse effect of oral contraceptives, initial encounter -T384X5D Adverse effect of oral contraceptives, subsequent encounter -T384X5S Adverse effect of oral contraceptives, sequela -T384X6A Underdosing of oral contraceptives, initial encounter -T384X6D Underdosing of oral contraceptives, subsequent encounter -T384X6S Underdosing of oral contraceptives, sequela -T385X1A Poisoning by other estrogens and progestogens, accidental (unintentional), initial encounter -T385X1D Poisoning by other estrogens and progestogens, accidental (unintentional), subsequent encounter -T385X1S Poisoning by other estrogens and progestogens, accidental (unintentional), sequela -T385X2A Poisoning by other estrogens and progestogens, intentional self-harm, initial encounter -T385X2D Poisoning by other estrogens and progestogens, intentional self-harm, subsequent encounter -T385X2S Poisoning by other estrogens and progestogens, intentional self-harm, sequela -T385X3A Poisoning by other estrogens and progestogens, assault, initial encounter -T385X3D Poisoning by other estrogens and progestogens, assault, subsequent encounter -T385X3S Poisoning by other estrogens and progestogens, assault, sequela -T385X4A Poisoning by other estrogens and progestogens, undetermined, initial encounter -T385X4D Poisoning by other estrogens and progestogens, undetermined, subsequent encounter -T385X4S Poisoning by other estrogens and progestogens, undetermined, sequela -T385X5A Adverse effect of other estrogens and progestogens, initial encounter -T385X5D Adverse effect of other estrogens and progestogens, subsequent encounter -T385X5S Adverse effect of other estrogens and progestogens, sequela -T385X6A Underdosing of other estrogens and progestogens, initial encounter -T385X6D Underdosing of other estrogens and progestogens, subsequent encounter -T385X6S Underdosing of other estrogens and progestogens, sequela -T386X1A Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, accidental (unintentional), initial encounter -T386X1D Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, accidental (unintentional), subsequent encounter -T386X1S Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, accidental (unintentional), sequela -T386X2A Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, intentional self-harm, initial encounter -T386X2D Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, intentional self-harm, subsequent encounter -T386X2S Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, intentional self-harm, sequela -T386X3A Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, assault, initial encounter -T386X3D Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, assault, subsequent encounter -T386X3S Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, assault, sequela -T386X4A Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, undetermined, initial encounter -T386X4D Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, undetermined, subsequent encounter -T386X4S Poisoning by antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, undetermined, sequela -T386X5A Adverse effect of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, initial encounter -T386X5D Adverse effect of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, subsequent encounter -T386X5S Adverse effect of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, sequela -T386X6A Underdosing of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, initial encounter -T386X6D Underdosing of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, subsequent encounter -T386X6S Underdosing of antigonadotrophins, antiestrogens, antiandrogens, not elsewhere classified, sequela -T387X1A Poisoning by androgens and anabolic congeners, accidental (unintentional), initial encounter -T387X1D Poisoning by androgens and anabolic congeners, accidental (unintentional), subsequent encounter -T387X1S Poisoning by androgens and anabolic congeners, accidental (unintentional), sequela -T387X2A Poisoning by androgens and anabolic congeners, intentional self-harm, initial encounter -T387X2D Poisoning by androgens and anabolic congeners, intentional self-harm, subsequent encounter -T387X2S Poisoning by androgens and anabolic congeners, intentional self-harm, sequela -T387X3A Poisoning by androgens and anabolic congeners, assault, initial encounter -T387X3D Poisoning by androgens and anabolic congeners, assault, subsequent encounter -T387X3S Poisoning by androgens and anabolic congeners, assault, sequela -T387X4A Poisoning by androgens and anabolic congeners, undetermined, initial encounter -T387X4D Poisoning by androgens and anabolic congeners, undetermined, subsequent encounter -T387X4S Poisoning by androgens and anabolic congeners, undetermined, sequela -T387X5A Adverse effect of androgens and anabolic congeners, initial encounter -T387X5D Adverse effect of androgens and anabolic congeners, subsequent encounter -T387X5S Adverse effect of androgens and anabolic congeners, sequela -T387X6A Underdosing of androgens and anabolic congeners, initial encounter -T387X6D Underdosing of androgens and anabolic congeners, subsequent encounter -T387X6S Underdosing of androgens and anabolic congeners, sequela -T38801A Poisoning by unspecified hormones and synthetic substitutes, accidental (unintentional), initial encounter -T38801D Poisoning by unspecified hormones and synthetic substitutes, accidental (unintentional), subsequent encounter -T38801S Poisoning by unspecified hormones and synthetic substitutes, accidental (unintentional), sequela -T38802A Poisoning by unspecified hormones and synthetic substitutes, intentional self-harm, initial encounter -T38802D Poisoning by unspecified hormones and synthetic substitutes, intentional self-harm, subsequent encounter -T38802S Poisoning by unspecified hormones and synthetic substitutes, intentional self-harm, sequela -T38803A Poisoning by unspecified hormones and synthetic substitutes, assault, initial encounter -T38803D Poisoning by unspecified hormones and synthetic substitutes, assault, subsequent encounter -T38803S Poisoning by unspecified hormones and synthetic substitutes, assault, sequela -T38804A Poisoning by unspecified hormones and synthetic substitutes, undetermined, initial encounter -T38804D Poisoning by unspecified hormones and synthetic substitutes, undetermined, subsequent encounter -T38804S Poisoning by unspecified hormones and synthetic substitutes, undetermined, sequela -T38805A Adverse effect of unspecified hormones and synthetic substitutes, initial encounter -T38805D Adverse effect of unspecified hormones and synthetic substitutes, subsequent encounter -T38805S Adverse effect of unspecified hormones and synthetic substitutes, sequela -T38806A Underdosing of unspecified hormones and synthetic substitutes, initial encounter -T38806D Underdosing of unspecified hormones and synthetic substitutes, subsequent encounter -T38806S Underdosing of unspecified hormones and synthetic substitutes, sequela -T38811A Poisoning by anterior pituitary [adenohypophyseal] hormones, accidental (unintentional), initial encounter -T38811D Poisoning by anterior pituitary [adenohypophyseal] hormones, accidental (unintentional), subsequent encounter -T38811S Poisoning by anterior pituitary [adenohypophyseal] hormones, accidental (unintentional), sequela -T38812A Poisoning by anterior pituitary [adenohypophyseal] hormones, intentional self-harm, initial encounter -T38812D Poisoning by anterior pituitary [adenohypophyseal] hormones, intentional self-harm, subsequent encounter -T38812S Poisoning by anterior pituitary [adenohypophyseal] hormones, intentional self-harm, sequela -T38813A Poisoning by anterior pituitary [adenohypophyseal] hormones, assault, initial encounter -T38813D Poisoning by anterior pituitary [adenohypophyseal] hormones, assault, subsequent encounter -T38813S Poisoning by anterior pituitary [adenohypophyseal] hormones, assault, sequela -T38814A Poisoning by anterior pituitary [adenohypophyseal] hormones, undetermined, initial encounter -T38814D Poisoning by anterior pituitary [adenohypophyseal] hormones, undetermined, subsequent encounter -T38814S Poisoning by anterior pituitary [adenohypophyseal] hormones, undetermined, sequela -T38815A Adverse effect of anterior pituitary [adenohypophyseal] hormones, initial encounter -T38815D Adverse effect of anterior pituitary [adenohypophyseal] hormones, subsequent encounter -T38815S Adverse effect of anterior pituitary [adenohypophyseal] hormones, sequela -T38816A Underdosing of anterior pituitary [adenohypophyseal] hormones, initial encounter -T38816D Underdosing of anterior pituitary [adenohypophyseal] hormones, subsequent encounter -T38816S Underdosing of anterior pituitary [adenohypophyseal] hormones, sequela -T38891A Poisoning by other hormones and synthetic substitutes, accidental (unintentional), initial encounter -T38891D Poisoning by other hormones and synthetic substitutes, accidental (unintentional), subsequent encounter -T38891S Poisoning by other hormones and synthetic substitutes, accidental (unintentional), sequela -T38892A Poisoning by other hormones and synthetic substitutes, intentional self-harm, initial encounter -T38892D Poisoning by other hormones and synthetic substitutes, intentional self-harm, subsequent encounter -T38892S Poisoning by other hormones and synthetic substitutes, intentional self-harm, sequela -T38893A Poisoning by other hormones and synthetic substitutes, assault, initial encounter -T38893D Poisoning by other hormones and synthetic substitutes, assault, subsequent encounter -T38893S Poisoning by other hormones and synthetic substitutes, assault, sequela -T38894A Poisoning by other hormones and synthetic substitutes, undetermined, initial encounter -T38894D Poisoning by other hormones and synthetic substitutes, undetermined, subsequent encounter -T38894S Poisoning by other hormones and synthetic substitutes, undetermined, sequela -T38895A Adverse effect of other hormones and synthetic substitutes, initial encounter -T38895D Adverse effect of other hormones and synthetic substitutes, subsequent encounter -T38895S Adverse effect of other hormones and synthetic substitutes, sequela -T38896A Underdosing of other hormones and synthetic substitutes, initial encounter -T38896D Underdosing of other hormones and synthetic substitutes, subsequent encounter -T38896S Underdosing of other hormones and synthetic substitutes, sequela -T38901A Poisoning by unspecified hormone antagonists, accidental (unintentional), initial encounter -T38901D Poisoning by unspecified hormone antagonists, accidental (unintentional), subsequent encounter -T38901S Poisoning by unspecified hormone antagonists, accidental (unintentional), sequela -T38902A Poisoning by unspecified hormone antagonists, intentional self-harm, initial encounter -T38902D Poisoning by unspecified hormone antagonists, intentional self-harm, subsequent encounter -T38902S Poisoning by unspecified hormone antagonists, intentional self-harm, sequela -T38903A Poisoning by unspecified hormone antagonists, assault, initial encounter -T38903D Poisoning by unspecified hormone antagonists, assault, subsequent encounter -T38903S Poisoning by unspecified hormone antagonists, assault, sequela -T38904A Poisoning by unspecified hormone antagonists, undetermined, initial encounter -T38904D Poisoning by unspecified hormone antagonists, undetermined, subsequent encounter -T38904S Poisoning by unspecified hormone antagonists, undetermined, sequela -T38905A Adverse effect of unspecified hormone antagonists, initial encounter -T38905D Adverse effect of unspecified hormone antagonists, subsequent encounter -T38905S Adverse effect of unspecified hormone antagonists, sequela -T38906A Underdosing of unspecified hormone antagonists, initial encounter -T38906D Underdosing of unspecified hormone antagonists, subsequent encounter -T38906S Underdosing of unspecified hormone antagonists, sequela -T38991A Poisoning by other hormone antagonists, accidental (unintentional), initial encounter -T38991D Poisoning by other hormone antagonists, accidental (unintentional), subsequent encounter -T38991S Poisoning by other hormone antagonists, accidental (unintentional), sequela -T38992A Poisoning by other hormone antagonists, intentional self-harm, initial encounter -T38992D Poisoning by other hormone antagonists, intentional self-harm, subsequent encounter -T38992S Poisoning by other hormone antagonists, intentional self-harm, sequela -T38993A Poisoning by other hormone antagonists, assault, initial encounter -T38993D Poisoning by other hormone antagonists, assault, subsequent encounter -T38993S Poisoning by other hormone antagonists, assault, sequela -T38994A Poisoning by other hormone antagonists, undetermined, initial encounter -T38994D Poisoning by other hormone antagonists, undetermined, subsequent encounter -T38994S Poisoning by other hormone antagonists, undetermined, sequela -T38995A Adverse effect of other hormone antagonists, initial encounter -T38995D Adverse effect of other hormone antagonists, subsequent encounter -T38995S Adverse effect of other hormone antagonists, sequela -T38996A Underdosing of other hormone antagonists, initial encounter -T38996D Underdosing of other hormone antagonists, subsequent encounter -T38996S Underdosing of other hormone antagonists, sequela -T39011A Poisoning by aspirin, accidental (unintentional), initial encounter -T39011D Poisoning by aspirin, accidental (unintentional), subsequent encounter -T39011S Poisoning by aspirin, accidental (unintentional), sequela -T39012A Poisoning by aspirin, intentional self-harm, initial encounter -T39012D Poisoning by aspirin, intentional self-harm, subsequent encounter -T39012S Poisoning by aspirin, intentional self-harm, sequela -T39013A Poisoning by aspirin, assault, initial encounter -T39013D Poisoning by aspirin, assault, subsequent encounter -T39013S Poisoning by aspirin, assault, sequela -T39014A Poisoning by aspirin, undetermined, initial encounter -T39014D Poisoning by aspirin, undetermined, subsequent encounter -T39014S Poisoning by aspirin, undetermined, sequela -T39015A Adverse effect of aspirin, initial encounter -T39015D Adverse effect of aspirin, subsequent encounter -T39015S Adverse effect of aspirin, sequela -T39016A Underdosing of aspirin, initial encounter -T39016D Underdosing of aspirin, subsequent encounter -T39016S Underdosing of aspirin, sequela -T39091A Poisoning by salicylates, accidental (unintentional), initial encounter -T39091D Poisoning by salicylates, accidental (unintentional), subsequent encounter -T39091S Poisoning by salicylates, accidental (unintentional), sequela -T39092A Poisoning by salicylates, intentional self-harm, initial encounter -T39092D Poisoning by salicylates, intentional self-harm, subsequent encounter -T39092S Poisoning by salicylates, intentional self-harm, sequela -T39093A Poisoning by salicylates, assault, initial encounter -T39093D Poisoning by salicylates, assault, subsequent encounter -T39093S Poisoning by salicylates, assault, sequela -T39094A Poisoning by salicylates, undetermined, initial encounter -T39094D Poisoning by salicylates, undetermined, subsequent encounter -T39094S Poisoning by salicylates, undetermined, sequela -T39095A Adverse effect of salicylates, initial encounter -T39095D Adverse effect of salicylates, subsequent encounter -T39095S Adverse effect of salicylates, sequela -T39096A Underdosing of salicylates, initial encounter -T39096D Underdosing of salicylates, subsequent encounter -T39096S Underdosing of salicylates, sequela -T391X1A Poisoning by 4-Aminophenol derivatives, accidental (unintentional), initial encounter -T391X1D Poisoning by 4-Aminophenol derivatives, accidental (unintentional), subsequent encounter -T391X1S Poisoning by 4-Aminophenol derivatives, accidental (unintentional), sequela -T391X2A Poisoning by 4-Aminophenol derivatives, intentional self-harm, initial encounter -T391X2D Poisoning by 4-Aminophenol derivatives, intentional self-harm, subsequent encounter -T391X2S Poisoning by 4-Aminophenol derivatives, intentional self-harm, sequela -T391X3A Poisoning by 4-Aminophenol derivatives, assault, initial encounter -T391X3D Poisoning by 4-Aminophenol derivatives, assault, subsequent encounter -T391X3S Poisoning by 4-Aminophenol derivatives, assault, sequela -T391X4A Poisoning by 4-Aminophenol derivatives, undetermined, initial encounter -T391X4D Poisoning by 4-Aminophenol derivatives, undetermined, subsequent encounter -T391X4S Poisoning by 4-Aminophenol derivatives, undetermined, sequela -T391X5A Adverse effect of 4-Aminophenol derivatives, initial encounter -T391X5D Adverse effect of 4-Aminophenol derivatives, subsequent encounter -T391X5S Adverse effect of 4-Aminophenol derivatives, sequela -T391X6A Underdosing of 4-Aminophenol derivatives, initial encounter -T391X6D Underdosing of 4-Aminophenol derivatives, subsequent encounter -T391X6S Underdosing of 4-Aminophenol derivatives, sequela -T392X1A Poisoning by pyrazolone derivatives, accidental (unintentional), initial encounter -T392X1D Poisoning by pyrazolone derivatives, accidental (unintentional), subsequent encounter -T392X1S Poisoning by pyrazolone derivatives, accidental (unintentional), sequela -T392X2A Poisoning by pyrazolone derivatives, intentional self-harm, initial encounter -T392X2D Poisoning by pyrazolone derivatives, intentional self-harm, subsequent encounter -T392X2S Poisoning by pyrazolone derivatives, intentional self-harm, sequela -T392X3A Poisoning by pyrazolone derivatives, assault, initial encounter -T392X3D Poisoning by pyrazolone derivatives, assault, subsequent encounter -T392X3S Poisoning by pyrazolone derivatives, assault, sequela -T392X4A Poisoning by pyrazolone derivatives, undetermined, initial encounter -T392X4D Poisoning by pyrazolone derivatives, undetermined, subsequent encounter -T392X4S Poisoning by pyrazolone derivatives, undetermined, sequela -T392X5A Adverse effect of pyrazolone derivatives, initial encounter -T392X5D Adverse effect of pyrazolone derivatives, subsequent encounter -T392X5S Adverse effect of pyrazolone derivatives, sequela -T392X6A Underdosing of pyrazolone derivatives, initial encounter -T392X6D Underdosing of pyrazolone derivatives, subsequent encounter -T392X6S Underdosing of pyrazolone derivatives, sequela -T39311A Poisoning by propionic acid derivatives, accidental (unintentional), initial encounter -T39311D Poisoning by propionic acid derivatives, accidental (unintentional), subsequent encounter -T39311S Poisoning by propionic acid derivatives, accidental (unintentional), sequela -T39312A Poisoning by propionic acid derivatives, intentional self-harm, initial encounter -T39312D Poisoning by propionic acid derivatives, intentional self-harm, subsequent encounter -T39312S Poisoning by propionic acid derivatives, intentional self-harm, sequela -T39313A Poisoning by propionic acid derivatives, assault, initial encounter -T39313D Poisoning by propionic acid derivatives, assault, subsequent encounter -T39313S Poisoning by propionic acid derivatives, assault, sequela -T39314A Poisoning by propionic acid derivatives, undetermined, initial encounter -T39314D Poisoning by propionic acid derivatives, undetermined, subsequent encounter -T39314S Poisoning by propionic acid derivatives, undetermined, sequela -T39315A Adverse effect of propionic acid derivatives, initial encounter -T39315D Adverse effect of propionic acid derivatives, subsequent encounter -T39315S Adverse effect of propionic acid derivatives, sequela -T39316A Underdosing of propionic acid derivatives, initial encounter -T39316D Underdosing of propionic acid derivatives, subsequent encounter -T39316S Underdosing of propionic acid derivatives, sequela -T39391A Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], accidental (unintentional), initial encounter -T39391D Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], accidental (unintentional), subsequent encounter -T39391S Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], accidental (unintentional), sequela -T39392A Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], intentional self-harm, initial encounter -T39392D Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], intentional self-harm, subsequent encounter -T39392S Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], intentional self-harm, sequela -T39393A Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], assault, initial encounter -T39393D Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], assault, subsequent encounter -T39393S Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], assault, sequela -T39394A Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], undetermined, initial encounter -T39394D Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], undetermined, subsequent encounter -T39394S Poisoning by other nonsteroidal anti-inflammatory drugs [NSAID], undetermined, sequela -T39395A Adverse effect of other nonsteroidal anti-inflammatory drugs [NSAID], initial encounter -T39395D Adverse effect of other nonsteroidal anti-inflammatory drugs [NSAID], subsequent encounter -T39395S Adverse effect of other nonsteroidal anti-inflammatory drugs [NSAID], sequela -T39396A Underdosing of other nonsteroidal anti-inflammatory drugs [NSAID], initial encounter -T39396D Underdosing of other nonsteroidal anti-inflammatory drugs [NSAID], subsequent encounter -T39396S Underdosing of other nonsteroidal anti-inflammatory drugs [NSAID], sequela -T394X1A Poisoning by antirheumatics, not elsewhere classified, accidental (unintentional), initial encounter -T394X1D Poisoning by antirheumatics, not elsewhere classified, accidental (unintentional), subsequent encounter -T394X1S Poisoning by antirheumatics, not elsewhere classified, accidental (unintentional), sequela -T394X2A Poisoning by antirheumatics, not elsewhere classified, intentional self-harm, initial encounter -T394X2D Poisoning by antirheumatics, not elsewhere classified, intentional self-harm, subsequent encounter -T394X2S Poisoning by antirheumatics, not elsewhere classified, intentional self-harm, sequela -T394X3A Poisoning by antirheumatics, not elsewhere classified, assault, initial encounter -T394X3D Poisoning by antirheumatics, not elsewhere classified, assault, subsequent encounter -T394X3S Poisoning by antirheumatics, not elsewhere classified, assault, sequela -T394X4A Poisoning by antirheumatics, not elsewhere classified, undetermined, initial encounter -T394X4D Poisoning by antirheumatics, not elsewhere classified, undetermined, subsequent encounter -T394X4S Poisoning by antirheumatics, not elsewhere classified, undetermined, sequela -T394X5A Adverse effect of antirheumatics, not elsewhere classified, initial encounter -T394X5D Adverse effect of antirheumatics, not elsewhere classified, subsequent encounter -T394X5S Adverse effect of antirheumatics, not elsewhere classified, sequela -T394X6A Underdosing of antirheumatics, not elsewhere classified, initial encounter -T394X6D Underdosing of antirheumatics, not elsewhere classified, subsequent encounter -T394X6S Underdosing of antirheumatics, not elsewhere classified, sequela -T398X1A Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, accidental (unintentional), initial encounter -T398X1D Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, accidental (unintentional), subsequent encounter -T398X1S Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, accidental (unintentional), sequela -T398X2A Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, intentional self-harm, initial encounter -T398X2D Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, intentional self-harm, subsequent encounter -T398X2S Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, intentional self-harm, sequela -T398X3A Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, assault, initial encounter -T398X3D Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, assault, subsequent encounter -T398X3S Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, assault, sequela -T398X4A Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, undetermined, initial encounter -T398X4D Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, undetermined, subsequent encounter -T398X4S Poisoning by other nonopioid analgesics and antipyretics, not elsewhere classified, undetermined, sequela -T398X5A Adverse effect of other nonopioid analgesics and antipyretics, not elsewhere classified, initial encounter -T398X5D Adverse effect of other nonopioid analgesics and antipyretics, not elsewhere classified, subsequent encounter -T398X5S Adverse effect of other nonopioid analgesics and antipyretics, not elsewhere classified, sequela -T398X6A Underdosing of other nonopioid analgesics and antipyretics, not elsewhere classified, initial encounter -T398X6D Underdosing of other nonopioid analgesics and antipyretics, not elsewhere classified, subsequent encounter -T398X6S Underdosing of other nonopioid analgesics and antipyretics, not elsewhere classified, sequela -T3991XA Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, accidental (unintentional), initial encounter -T3991XD Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, accidental (unintentional), subsequent encounter -T3991XS Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, accidental (unintentional), sequela -T3992XA Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, intentional self-harm, initial encounter -T3992XD Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, intentional self-harm, subsequent encounter -T3992XS Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, intentional self-harm, sequela -T3993XA Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, assault, initial encounter -T3993XD Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, assault, subsequent encounter -T3993XS Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, assault, sequela -T3994XA Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, undetermined, initial encounter -T3994XD Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, undetermined, subsequent encounter -T3994XS Poisoning by unspecified nonopioid analgesic, antipyretic and antirheumatic, undetermined, sequela -T3995XA Adverse effect of unspecified nonopioid analgesic, antipyretic and antirheumatic, initial encounter -T3995XD Adverse effect of unspecified nonopioid analgesic, antipyretic and antirheumatic, subsequent encounter -T3995XS Adverse effect of unspecified nonopioid analgesic, antipyretic and antirheumatic, sequela -T3996XA Underdosing of unspecified nonopioid analgesic, antipyretic and antirheumatic, initial encounter -T3996XD Underdosing of unspecified nonopioid analgesic, antipyretic and antirheumatic, subsequent encounter -T3996XS Underdosing of unspecified nonopioid analgesic, antipyretic and antirheumatic, sequela -T400X1A Poisoning by opium, accidental (unintentional), initial encounter -T400X1D Poisoning by opium, accidental (unintentional), subsequent encounter -T400X1S Poisoning by opium, accidental (unintentional), sequela -T400X2A Poisoning by opium, intentional self-harm, initial encounter -T400X2D Poisoning by opium, intentional self-harm, subsequent encounter -T400X2S Poisoning by opium, intentional self-harm, sequela -T400X3A Poisoning by opium, assault, initial encounter -T400X3D Poisoning by opium, assault, subsequent encounter -T400X3S Poisoning by opium, assault, sequela -T400X4A Poisoning by opium, undetermined, initial encounter -T400X4D Poisoning by opium, undetermined, subsequent encounter -T400X4S Poisoning by opium, undetermined, sequela -T400X5A Adverse effect of opium, initial encounter -T400X5D Adverse effect of opium, subsequent encounter -T400X5S Adverse effect of opium, sequela -T400X6A Underdosing of opium, initial encounter -T400X6D Underdosing of opium, subsequent encounter -T400X6S Underdosing of opium, sequela -T401X1A Poisoning by heroin, accidental (unintentional), initial encounter -T401X1D Poisoning by heroin, accidental (unintentional), subsequent encounter -T401X1S Poisoning by heroin, accidental (unintentional), sequela -T401X2A Poisoning by heroin, intentional self-harm, initial encounter -T401X2D Poisoning by heroin, intentional self-harm, subsequent encounter -T401X2S Poisoning by heroin, intentional self-harm, sequela -T401X3A Poisoning by heroin, assault, initial encounter -T401X3D Poisoning by heroin, assault, subsequent encounter -T401X3S Poisoning by heroin, assault, sequela -T401X4A Poisoning by heroin, undetermined, initial encounter -T401X4D Poisoning by heroin, undetermined, subsequent encounter -T401X4S Poisoning by heroin, undetermined, sequela -T402X1A Poisoning by other opioids, accidental (unintentional), initial encounter -T402X1D Poisoning by other opioids, accidental (unintentional), subsequent encounter -T402X1S Poisoning by other opioids, accidental (unintentional), sequela -T402X2A Poisoning by other opioids, intentional self-harm, initial encounter -T402X2D Poisoning by other opioids, intentional self-harm, subsequent encounter -T402X2S Poisoning by other opioids, intentional self-harm, sequela -T402X3A Poisoning by other opioids, assault, initial encounter -T402X3D Poisoning by other opioids, assault, subsequent encounter -T402X3S Poisoning by other opioids, assault, sequela -T402X4A Poisoning by other opioids, undetermined, initial encounter -T402X4D Poisoning by other opioids, undetermined, subsequent encounter -T402X4S Poisoning by other opioids, undetermined, sequela -T402X5A Adverse effect of other opioids, initial encounter -T402X5D Adverse effect of other opioids, subsequent encounter -T402X5S Adverse effect of other opioids, sequela -T402X6A Underdosing of other opioids, initial encounter -T402X6D Underdosing of other opioids, subsequent encounter -T402X6S Underdosing of other opioids, sequela -T403X1A Poisoning by methadone, accidental (unintentional), initial encounter -T403X1D Poisoning by methadone, accidental (unintentional), subsequent encounter -T403X1S Poisoning by methadone, accidental (unintentional), sequela -T403X2A Poisoning by methadone, intentional self-harm, initial encounter -T403X2D Poisoning by methadone, intentional self-harm, subsequent encounter -T403X2S Poisoning by methadone, intentional self-harm, sequela -T403X3A Poisoning by methadone, assault, initial encounter -T403X3D Poisoning by methadone, assault, subsequent encounter -T403X3S Poisoning by methadone, assault, sequela -T403X4A Poisoning by methadone, undetermined, initial encounter -T403X4D Poisoning by methadone, undetermined, subsequent encounter -T403X4S Poisoning by methadone, undetermined, sequela -T403X5A Adverse effect of methadone, initial encounter -T403X5D Adverse effect of methadone, subsequent encounter -T403X5S Adverse effect of methadone, sequela -T403X6A Underdosing of methadone, initial encounter -T403X6D Underdosing of methadone, subsequent encounter -T403X6S Underdosing of methadone, sequela -T404X1A Poisoning by other synthetic narcotics, accidental (unintentional), initial encounter -T404X1D Poisoning by other synthetic narcotics, accidental (unintentional), subsequent encounter -T404X1S Poisoning by other synthetic narcotics, accidental (unintentional), sequela -T404X2A Poisoning by other synthetic narcotics, intentional self-harm, initial encounter -T404X2D Poisoning by other synthetic narcotics, intentional self-harm, subsequent encounter -T404X2S Poisoning by other synthetic narcotics, intentional self-harm, sequela -T404X3A Poisoning by other synthetic narcotics, assault, initial encounter -T404X3D Poisoning by other synthetic narcotics, assault, subsequent encounter -T404X3S Poisoning by other synthetic narcotics, assault, sequela -T404X4A Poisoning by other synthetic narcotics, undetermined, initial encounter -T404X4D Poisoning by other synthetic narcotics, undetermined, subsequent encounter -T404X4S Poisoning by other synthetic narcotics, undetermined, sequela -T404X5A Adverse effect of other synthetic narcotics, initial encounter -T404X5D Adverse effect of other synthetic narcotics, subsequent encounter -T404X5S Adverse effect of other synthetic narcotics, sequela -T404X6A Underdosing of other synthetic narcotics, initial encounter -T404X6D Underdosing of other synthetic narcotics, subsequent encounter -T404X6S Underdosing of other synthetic narcotics, sequela -T405X1A Poisoning by cocaine, accidental (unintentional), initial encounter -T405X1D Poisoning by cocaine, accidental (unintentional), subsequent encounter -T405X1S Poisoning by cocaine, accidental (unintentional), sequela -T405X2A Poisoning by cocaine, intentional self-harm, initial encounter -T405X2D Poisoning by cocaine, intentional self-harm, subsequent encounter -T405X2S Poisoning by cocaine, intentional self-harm, sequela -T405X3A Poisoning by cocaine, assault, initial encounter -T405X3D Poisoning by cocaine, assault, subsequent encounter -T405X3S Poisoning by cocaine, assault, sequela -T405X4A Poisoning by cocaine, undetermined, initial encounter -T405X4D Poisoning by cocaine, undetermined, subsequent encounter -T405X4S Poisoning by cocaine, undetermined, sequela -T405X5A Adverse effect of cocaine, initial encounter -T405X5D Adverse effect of cocaine, subsequent encounter -T405X5S Adverse effect of cocaine, sequela -T405X6A Underdosing of cocaine, initial encounter -T405X6D Underdosing of cocaine, subsequent encounter -T405X6S Underdosing of cocaine, sequela -T40601A Poisoning by unspecified narcotics, accidental (unintentional), initial encounter -T40601D Poisoning by unspecified narcotics, accidental (unintentional), subsequent encounter -T40601S Poisoning by unspecified narcotics, accidental (unintentional), sequela -T40602A Poisoning by unspecified narcotics, intentional self-harm, initial encounter -T40602D Poisoning by unspecified narcotics, intentional self-harm, subsequent encounter -T40602S Poisoning by unspecified narcotics, intentional self-harm, sequela -T40603A Poisoning by unspecified narcotics, assault, initial encounter -T40603D Poisoning by unspecified narcotics, assault, subsequent encounter -T40603S Poisoning by unspecified narcotics, assault, sequela -T40604A Poisoning by unspecified narcotics, undetermined, initial encounter -T40604D Poisoning by unspecified narcotics, undetermined, subsequent encounter -T40604S Poisoning by unspecified narcotics, undetermined, sequela -T40605A Adverse effect of unspecified narcotics, initial encounter -T40605D Adverse effect of unspecified narcotics, subsequent encounter -T40605S Adverse effect of unspecified narcotics, sequela -T40606A Underdosing of unspecified narcotics, initial encounter -T40606D Underdosing of unspecified narcotics, subsequent encounter -T40606S Underdosing of unspecified narcotics, sequela -T40691A Poisoning by other narcotics, accidental (unintentional), initial encounter -T40691D Poisoning by other narcotics, accidental (unintentional), subsequent encounter -T40691S Poisoning by other narcotics, accidental (unintentional), sequela -T40692A Poisoning by other narcotics, intentional self-harm, initial encounter -T40692D Poisoning by other narcotics, intentional self-harm, subsequent encounter -T40692S Poisoning by other narcotics, intentional self-harm, sequela -T40693A Poisoning by other narcotics, assault, initial encounter -T40693D Poisoning by other narcotics, assault, subsequent encounter -T40693S Poisoning by other narcotics, assault, sequela -T40694A Poisoning by other narcotics, undetermined, initial encounter -T40694D Poisoning by other narcotics, undetermined, subsequent encounter -T40694S Poisoning by other narcotics, undetermined, sequela -T40695A Adverse effect of other narcotics, initial encounter -T40695D Adverse effect of other narcotics, subsequent encounter -T40695S Adverse effect of other narcotics, sequela -T40696A Underdosing of other narcotics, initial encounter -T40696D Underdosing of other narcotics, subsequent encounter -T40696S Underdosing of other narcotics, sequela -T407X1A Poisoning by cannabis (derivatives), accidental (unintentional), initial encounter -T407X1D Poisoning by cannabis (derivatives), accidental (unintentional), subsequent encounter -T407X1S Poisoning by cannabis (derivatives), accidental (unintentional), sequela -T407X2A Poisoning by cannabis (derivatives), intentional self-harm, initial encounter -T407X2D Poisoning by cannabis (derivatives), intentional self-harm, subsequent encounter -T407X2S Poisoning by cannabis (derivatives), intentional self-harm, sequela -T407X3A Poisoning by cannabis (derivatives), assault, initial encounter -T407X3D Poisoning by cannabis (derivatives), assault, subsequent encounter -T407X3S Poisoning by cannabis (derivatives), assault, sequela -T407X4A Poisoning by cannabis (derivatives), undetermined, initial encounter -T407X4D Poisoning by cannabis (derivatives), undetermined, subsequent encounter -T407X4S Poisoning by cannabis (derivatives), undetermined, sequela -T407X5A Adverse effect of cannabis (derivatives), initial encounter -T407X5D Adverse effect of cannabis (derivatives), subsequent encounter -T407X5S Adverse effect of cannabis (derivatives), sequela -T407X6A Underdosing of cannabis (derivatives), initial encounter -T407X6D Underdosing of cannabis (derivatives), subsequent encounter -T407X6S Underdosing of cannabis (derivatives), sequela -T408X1A Poisoning by lysergide [LSD], accidental (unintentional), initial encounter -T408X1D Poisoning by lysergide [LSD], accidental (unintentional), subsequent encounter -T408X1S Poisoning by lysergide [LSD], accidental (unintentional), sequela -T408X2A Poisoning by lysergide [LSD], intentional self-harm, initial encounter -T408X2D Poisoning by lysergide [LSD], intentional self-harm, subsequent encounter -T408X2S Poisoning by lysergide [LSD], intentional self-harm, sequela -T408X3A Poisoning by lysergide [LSD], assault, initial encounter -T408X3D Poisoning by lysergide [LSD], assault, subsequent encounter -T408X3S Poisoning by lysergide [LSD], assault, sequela -T408X4A Poisoning by lysergide [LSD], undetermined, initial encounter -T408X4D Poisoning by lysergide [LSD], undetermined, subsequent encounter -T408X4S Poisoning by lysergide [LSD], undetermined, sequela -T40901A Poisoning by unspecified psychodysleptics [hallucinogens], accidental (unintentional), initial encounter -T40901D Poisoning by unspecified psychodysleptics [hallucinogens], accidental (unintentional), subsequent encounter -T40901S Poisoning by unspecified psychodysleptics [hallucinogens], accidental (unintentional), sequela -T40902A Poisoning by unspecified psychodysleptics [hallucinogens], intentional self-harm, initial encounter -T40902D Poisoning by unspecified psychodysleptics [hallucinogens], intentional self-harm, subsequent encounter -T40902S Poisoning by unspecified psychodysleptics [hallucinogens], intentional self-harm, sequela -T40903A Poisoning by unspecified psychodysleptics [hallucinogens], assault, initial encounter -T40903D Poisoning by unspecified psychodysleptics [hallucinogens], assault, subsequent encounter -T40903S Poisoning by unspecified psychodysleptics [hallucinogens], assault, sequela -T40904A Poisoning by unspecified psychodysleptics [hallucinogens], undetermined, initial encounter -T40904D Poisoning by unspecified psychodysleptics [hallucinogens], undetermined, subsequent encounter -T40904S Poisoning by unspecified psychodysleptics [hallucinogens], undetermined, sequela -T40905A Adverse effect of unspecified psychodysleptics [hallucinogens], initial encounter -T40905D Adverse effect of unspecified psychodysleptics [hallucinogens], subsequent encounter -T40905S Adverse effect of unspecified psychodysleptics [hallucinogens], sequela -T40906A Underdosing of unspecified psychodysleptics, initial encounter -T40906D Underdosing of unspecified psychodysleptics, subsequent encounter -T40906S Underdosing of unspecified psychodysleptics, sequela -T40991A Poisoning by other psychodysleptics [hallucinogens], accidental (unintentional), initial encounter -T40991D Poisoning by other psychodysleptics [hallucinogens], accidental (unintentional), subsequent encounter -T40991S Poisoning by other psychodysleptics [hallucinogens], accidental (unintentional), sequela -T40992A Poisoning by other psychodysleptics [hallucinogens], intentional self-harm, initial encounter -T40992D Poisoning by other psychodysleptics [hallucinogens], intentional self-harm, subsequent encounter -T40992S Poisoning by other psychodysleptics [hallucinogens], intentional self-harm, sequela -T40993A Poisoning by other psychodysleptics [hallucinogens], assault, initial encounter -T40993D Poisoning by other psychodysleptics [hallucinogens], assault, subsequent encounter -T40993S Poisoning by other psychodysleptics [hallucinogens], assault, sequela -T40994A Poisoning by other psychodysleptics [hallucinogens], undetermined, initial encounter -T40994D Poisoning by other psychodysleptics [hallucinogens], undetermined, subsequent encounter -T40994S Poisoning by other psychodysleptics [hallucinogens], undetermined, sequela -T40995A Adverse effect of other psychodysleptics [hallucinogens], initial encounter -T40995D Adverse effect of other psychodysleptics [hallucinogens], subsequent encounter -T40995S Adverse effect of other psychodysleptics [hallucinogens], sequela -T40996A Underdosing of other psychodysleptics, initial encounter -T40996D Underdosing of other psychodysleptics, subsequent encounter -T40996S Underdosing of other psychodysleptics, sequela -T410X1A Poisoning by inhaled anesthetics, accidental (unintentional), initial encounter -T410X1D Poisoning by inhaled anesthetics, accidental (unintentional), subsequent encounter -T410X1S Poisoning by inhaled anesthetics, accidental (unintentional), sequela -T410X2A Poisoning by inhaled anesthetics, intentional self-harm, initial encounter -T410X2D Poisoning by inhaled anesthetics, intentional self-harm, subsequent encounter -T410X2S Poisoning by inhaled anesthetics, intentional self-harm, sequela -T410X3A Poisoning by inhaled anesthetics, assault, initial encounter -T410X3D Poisoning by inhaled anesthetics, assault, subsequent encounter -T410X3S Poisoning by inhaled anesthetics, assault, sequela -T410X4A Poisoning by inhaled anesthetics, undetermined, initial encounter -T410X4D Poisoning by inhaled anesthetics, undetermined, subsequent encounter -T410X4S Poisoning by inhaled anesthetics, undetermined, sequela -T410X5A Adverse effect of inhaled anesthetics, initial encounter -T410X5D Adverse effect of inhaled anesthetics, subsequent encounter -T410X5S Adverse effect of inhaled anesthetics, sequela -T410X6A Underdosing of inhaled anesthetics, initial encounter -T410X6D Underdosing of inhaled anesthetics, subsequent encounter -T410X6S Underdosing of inhaled anesthetics, sequela -T411X1A Poisoning by intravenous anesthetics, accidental (unintentional), initial encounter -T411X1D Poisoning by intravenous anesthetics, accidental (unintentional), subsequent encounter -T411X1S Poisoning by intravenous anesthetics, accidental (unintentional), sequela -T411X2A Poisoning by intravenous anesthetics, intentional self-harm, initial encounter -T411X2D Poisoning by intravenous anesthetics, intentional self-harm, subsequent encounter -T411X2S Poisoning by intravenous anesthetics, intentional self-harm, sequela -T411X3A Poisoning by intravenous anesthetics, assault, initial encounter -T411X3D Poisoning by intravenous anesthetics, assault, subsequent encounter -T411X3S Poisoning by intravenous anesthetics, assault, sequela -T411X4A Poisoning by intravenous anesthetics, undetermined, initial encounter -T411X4D Poisoning by intravenous anesthetics, undetermined, subsequent encounter -T411X4S Poisoning by intravenous anesthetics, undetermined, sequela -T411X5A Adverse effect of intravenous anesthetics, initial encounter -T411X5D Adverse effect of intravenous anesthetics, subsequent encounter -T411X5S Adverse effect of intravenous anesthetics, sequela -T411X6A Underdosing of intravenous anesthetics, initial encounter -T411X6D Underdosing of intravenous anesthetics, subsequent encounter -T411X6S Underdosing of intravenous anesthetics, sequela -T41201A Poisoning by unspecified general anesthetics, accidental (unintentional), initial encounter -T41201D Poisoning by unspecified general anesthetics, accidental (unintentional), subsequent encounter -T41201S Poisoning by unspecified general anesthetics, accidental (unintentional), sequela -T41202A Poisoning by unspecified general anesthetics, intentional self-harm, initial encounter -T41202D Poisoning by unspecified general anesthetics, intentional self-harm, subsequent encounter -T41202S Poisoning by unspecified general anesthetics, intentional self-harm, sequela -T41203A Poisoning by unspecified general anesthetics, assault, initial encounter -T41203D Poisoning by unspecified general anesthetics, assault, subsequent encounter -T41203S Poisoning by unspecified general anesthetics, assault, sequela -T41204A Poisoning by unspecified general anesthetics, undetermined, initial encounter -T41204D Poisoning by unspecified general anesthetics, undetermined, subsequent encounter -T41204S Poisoning by unspecified general anesthetics, undetermined, sequela -T41205A Adverse effect of unspecified general anesthetics, initial encounter -T41205D Adverse effect of unspecified general anesthetics, subsequent encounter -T41205S Adverse effect of unspecified general anesthetics, sequela -T41206A Underdosing of unspecified general anesthetics, initial encounter -T41206D Underdosing of unspecified general anesthetics, subsequent encounter -T41206S Underdosing of unspecified general anesthetics, sequela -T41291A Poisoning by other general anesthetics, accidental (unintentional), initial encounter -T41291D Poisoning by other general anesthetics, accidental (unintentional), subsequent encounter -T41291S Poisoning by other general anesthetics, accidental (unintentional), sequela -T41292A Poisoning by other general anesthetics, intentional self-harm, initial encounter -T41292D Poisoning by other general anesthetics, intentional self-harm, subsequent encounter -T41292S Poisoning by other general anesthetics, intentional self-harm, sequela -T41293A Poisoning by other general anesthetics, assault, initial encounter -T41293D Poisoning by other general anesthetics, assault, subsequent encounter -T41293S Poisoning by other general anesthetics, assault, sequela -T41294A Poisoning by other general anesthetics, undetermined, initial encounter -T41294D Poisoning by other general anesthetics, undetermined, subsequent encounter -T41294S Poisoning by other general anesthetics, undetermined, sequela -T41295A Adverse effect of other general anesthetics, initial encounter -T41295D Adverse effect of other general anesthetics, subsequent encounter -T41295S Adverse effect of other general anesthetics, sequela -T41296A Underdosing of other general anesthetics, initial encounter -T41296D Underdosing of other general anesthetics, subsequent encounter -T41296S Underdosing of other general anesthetics, sequela -T413X1A Poisoning by local anesthetics, accidental (unintentional), initial encounter -T413X1D Poisoning by local anesthetics, accidental (unintentional), subsequent encounter -T413X1S Poisoning by local anesthetics, accidental (unintentional), sequela -T413X2A Poisoning by local anesthetics, intentional self-harm, initial encounter -T413X2D Poisoning by local anesthetics, intentional self-harm, subsequent encounter -T413X2S Poisoning by local anesthetics, intentional self-harm, sequela -T413X3A Poisoning by local anesthetics, assault, initial encounter -T413X3D Poisoning by local anesthetics, assault, subsequent encounter -T413X3S Poisoning by local anesthetics, assault, sequela -T413X4A Poisoning by local anesthetics, undetermined, initial encounter -T413X4D Poisoning by local anesthetics, undetermined, subsequent encounter -T413X4S Poisoning by local anesthetics, undetermined, sequela -T413X5A Adverse effect of local anesthetics, initial encounter -T413X5D Adverse effect of local anesthetics, subsequent encounter -T413X5S Adverse effect of local anesthetics, sequela -T413X6A Underdosing of local anesthetics, initial encounter -T413X6D Underdosing of local anesthetics, subsequent encounter -T413X6S Underdosing of local anesthetics, sequela -T4141XA Poisoning by unspecified anesthetic, accidental (unintentional), initial encounter -T4141XD Poisoning by unspecified anesthetic, accidental (unintentional), subsequent encounter -T4141XS Poisoning by unspecified anesthetic, accidental (unintentional), sequela -T4142XA Poisoning by unspecified anesthetic, intentional self-harm, initial encounter -T4142XD Poisoning by unspecified anesthetic, intentional self-harm, subsequent encounter -T4142XS Poisoning by unspecified anesthetic, intentional self-harm, sequela -T4143XA Poisoning by unspecified anesthetic, assault, initial encounter -T4143XD Poisoning by unspecified anesthetic, assault, subsequent encounter -T4143XS Poisoning by unspecified anesthetic, assault, sequela -T4144XA Poisoning by unspecified anesthetic, undetermined, initial encounter -T4144XD Poisoning by unspecified anesthetic, undetermined, subsequent encounter -T4144XS Poisoning by unspecified anesthetic, undetermined, sequela -T4145XA Adverse effect of unspecified anesthetic, initial encounter -T4145XD Adverse effect of unspecified anesthetic, subsequent encounter -T4145XS Adverse effect of unspecified anesthetic, sequela -T4146XA Underdosing of unspecified anesthetics, initial encounter -T4146XD Underdosing of unspecified anesthetics, subsequent encounter -T4146XS Underdosing of unspecified anesthetics, sequela -T415X1A Poisoning by therapeutic gases, accidental (unintentional), initial encounter -T415X1D Poisoning by therapeutic gases, accidental (unintentional), subsequent encounter -T415X1S Poisoning by therapeutic gases, accidental (unintentional), sequela -T415X2A Poisoning by therapeutic gases, intentional self-harm, initial encounter -T415X2D Poisoning by therapeutic gases, intentional self-harm, subsequent encounter -T415X2S Poisoning by therapeutic gases, intentional self-harm, sequela -T415X3A Poisoning by therapeutic gases, assault, initial encounter -T415X3D Poisoning by therapeutic gases, assault, subsequent encounter -T415X3S Poisoning by therapeutic gases, assault, sequela -T415X4A Poisoning by therapeutic gases, undetermined, initial encounter -T415X4D Poisoning by therapeutic gases, undetermined, subsequent encounter -T415X4S Poisoning by therapeutic gases, undetermined, sequela -T415X5A Adverse effect of therapeutic gases, initial encounter -T415X5D Adverse effect of therapeutic gases, subsequent encounter -T415X5S Adverse effect of therapeutic gases, sequela -T415X6A Underdosing of therapeutic gases, initial encounter -T415X6D Underdosing of therapeutic gases, subsequent encounter -T415X6S Underdosing of therapeutic gases, sequela -T420X1A Poisoning by hydantoin derivatives, accidental (unintentional), initial encounter -T420X1D Poisoning by hydantoin derivatives, accidental (unintentional), subsequent encounter -T420X1S Poisoning by hydantoin derivatives, accidental (unintentional), sequela -T420X2A Poisoning by hydantoin derivatives, intentional self-harm, initial encounter -T420X2D Poisoning by hydantoin derivatives, intentional self-harm, subsequent encounter -T420X2S Poisoning by hydantoin derivatives, intentional self-harm, sequela -T420X3A Poisoning by hydantoin derivatives, assault, initial encounter -T420X3D Poisoning by hydantoin derivatives, assault, subsequent encounter -T420X3S Poisoning by hydantoin derivatives, assault, sequela -T420X4A Poisoning by hydantoin derivatives, undetermined, initial encounter -T420X4D Poisoning by hydantoin derivatives, undetermined, subsequent encounter -T420X4S Poisoning by hydantoin derivatives, undetermined, sequela -T420X5A Adverse effect of hydantoin derivatives, initial encounter -T420X5D Adverse effect of hydantoin derivatives, subsequent encounter -T420X5S Adverse effect of hydantoin derivatives, sequela -T420X6A Underdosing of hydantoin derivatives, initial encounter -T420X6D Underdosing of hydantoin derivatives, subsequent encounter -T420X6S Underdosing of hydantoin derivatives, sequela -T421X1A Poisoning by iminostilbenes, accidental (unintentional), initial encounter -T421X1D Poisoning by iminostilbenes, accidental (unintentional), subsequent encounter -T421X1S Poisoning by iminostilbenes, accidental (unintentional), sequela -T421X2A Poisoning by iminostilbenes, intentional self-harm, initial encounter -T421X2D Poisoning by iminostilbenes, intentional self-harm, subsequent encounter -T421X2S Poisoning by iminostilbenes, intentional self-harm, sequela -T421X3A Poisoning by iminostilbenes, assault, initial encounter -T421X3D Poisoning by iminostilbenes, assault, subsequent encounter -T421X3S Poisoning by iminostilbenes, assault, sequela -T421X4A Poisoning by iminostilbenes, undetermined, initial encounter -T421X4D Poisoning by iminostilbenes, undetermined, subsequent encounter -T421X4S Poisoning by iminostilbenes, undetermined, sequela -T421X5A Adverse effect of iminostilbenes, initial encounter -T421X5D Adverse effect of iminostilbenes, subsequent encounter -T421X5S Adverse effect of iminostilbenes, sequela -T421X6A Underdosing of iminostilbenes, initial encounter -T421X6D Underdosing of iminostilbenes, subsequent encounter -T421X6S Underdosing of iminostilbenes, sequela -T422X1A Poisoning by succinimides and oxazolidinediones, accidental (unintentional), initial encounter -T422X1D Poisoning by succinimides and oxazolidinediones, accidental (unintentional), subsequent encounter -T422X1S Poisoning by succinimides and oxazolidinediones, accidental (unintentional), sequela -T422X2A Poisoning by succinimides and oxazolidinediones, intentional self-harm, initial encounter -T422X2D Poisoning by succinimides and oxazolidinediones, intentional self-harm, subsequent encounter -T422X2S Poisoning by succinimides and oxazolidinediones, intentional self-harm, sequela -T422X3A Poisoning by succinimides and oxazolidinediones, assault, initial encounter -T422X3D Poisoning by succinimides and oxazolidinediones, assault, subsequent encounter -T422X3S Poisoning by succinimides and oxazolidinediones, assault, sequela -T422X4A Poisoning by succinimides and oxazolidinediones, undetermined, initial encounter -T422X4D Poisoning by succinimides and oxazolidinediones, undetermined, subsequent encounter -T422X4S Poisoning by succinimides and oxazolidinediones, undetermined, sequela -T422X5A Adverse effect of succinimides and oxazolidinediones, initial encounter -T422X5D Adverse effect of succinimides and oxazolidinediones, subsequent encounter -T422X5S Adverse effect of succinimides and oxazolidinediones, sequela -T422X6A Underdosing of succinimides and oxazolidinediones, initial encounter -T422X6D Underdosing of succinimides and oxazolidinediones, subsequent encounter -T422X6S Underdosing of succinimides and oxazolidinediones, sequela -T423X1A Poisoning by barbiturates, accidental (unintentional), initial encounter -T423X1D Poisoning by barbiturates, accidental (unintentional), subsequent encounter -T423X1S Poisoning by barbiturates, accidental (unintentional), sequela -T423X2A Poisoning by barbiturates, intentional self-harm, initial encounter -T423X2D Poisoning by barbiturates, intentional self-harm, subsequent encounter -T423X2S Poisoning by barbiturates, intentional self-harm, sequela -T423X3A Poisoning by barbiturates, assault, initial encounter -T423X3D Poisoning by barbiturates, assault, subsequent encounter -T423X3S Poisoning by barbiturates, assault, sequela -T423X4A Poisoning by barbiturates, undetermined, initial encounter -T423X4D Poisoning by barbiturates, undetermined, subsequent encounter -T423X4S Poisoning by barbiturates, undetermined, sequela -T423X5A Adverse effect of barbiturates, initial encounter -T423X5D Adverse effect of barbiturates, subsequent encounter -T423X5S Adverse effect of barbiturates, sequela -T423X6A Underdosing of barbiturates, initial encounter -T423X6D Underdosing of barbiturates, subsequent encounter -T423X6S Underdosing of barbiturates, sequela -T424X1A Poisoning by benzodiazepines, accidental (unintentional), initial encounter -T424X1D Poisoning by benzodiazepines, accidental (unintentional), subsequent encounter -T424X1S Poisoning by benzodiazepines, accidental (unintentional), sequela -T424X2A Poisoning by benzodiazepines, intentional self-harm, initial encounter -T424X2D Poisoning by benzodiazepines, intentional self-harm, subsequent encounter -T424X2S Poisoning by benzodiazepines, intentional self-harm, sequela -T424X3A Poisoning by benzodiazepines, assault, initial encounter -T424X3D Poisoning by benzodiazepines, assault, subsequent encounter -T424X3S Poisoning by benzodiazepines, assault, sequela -T424X4A Poisoning by benzodiazepines, undetermined, initial encounter -T424X4D Poisoning by benzodiazepines, undetermined, subsequent encounter -T424X4S Poisoning by benzodiazepines, undetermined, sequela -T424X5A Adverse effect of benzodiazepines, initial encounter -T424X5D Adverse effect of benzodiazepines, subsequent encounter -T424X5S Adverse effect of benzodiazepines, sequela -T424X6A Underdosing of benzodiazepines, initial encounter -T424X6D Underdosing of benzodiazepines, subsequent encounter -T424X6S Underdosing of benzodiazepines, sequela -T425X1A Poisoning by mixed antiepileptics, accidental (unintentional), initial encounter -T425X1D Poisoning by mixed antiepileptics, accidental (unintentional), subsequent encounter -T425X1S Poisoning by mixed antiepileptics, accidental (unintentional), sequela -T425X2A Poisoning by mixed antiepileptics, intentional self-harm, initial encounter -T425X2D Poisoning by mixed antiepileptics, intentional self-harm, subsequent encounter -T425X2S Poisoning by mixed antiepileptics, intentional self-harm, sequela -T425X3A Poisoning by mixed antiepileptics, assault, initial encounter -T425X3D Poisoning by mixed antiepileptics, assault, subsequent encounter -T425X3S Poisoning by mixed antiepileptics, assault, sequela -T425X4A Poisoning by mixed antiepileptics, undetermined, initial encounter -T425X4D Poisoning by mixed antiepileptics, undetermined, subsequent encounter -T425X4S Poisoning by mixed antiepileptics, undetermined, sequela -T425X5A Adverse effect of mixed antiepileptics, initial encounter -T425X5D Adverse effect of mixed antiepileptics, subsequent encounter -T425X5S Adverse effect of mixed antiepileptics, sequela -T425X6A Underdosing of mixed antiepileptics, initial encounter -T425X6D Underdosing of mixed antiepileptics, subsequent encounter -T425X6S Underdosing of mixed antiepileptics, sequela -T426X1A Poisoning by other antiepileptic and sedative-hypnotic drugs, accidental (unintentional), initial encounter -T426X1D Poisoning by other antiepileptic and sedative-hypnotic drugs, accidental (unintentional), subsequent encounter -T426X1S Poisoning by other antiepileptic and sedative-hypnotic drugs, accidental (unintentional), sequela -T426X2A Poisoning by other antiepileptic and sedative-hypnotic drugs, intentional self-harm, initial encounter -T426X2D Poisoning by other antiepileptic and sedative-hypnotic drugs, intentional self-harm, subsequent encounter -T426X2S Poisoning by other antiepileptic and sedative-hypnotic drugs, intentional self-harm, sequela -T426X3A Poisoning by other antiepileptic and sedative-hypnotic drugs, assault, initial encounter -T426X3D Poisoning by other antiepileptic and sedative-hypnotic drugs, assault, subsequent encounter -T426X3S Poisoning by other antiepileptic and sedative-hypnotic drugs, assault, sequela -T426X4A Poisoning by other antiepileptic and sedative-hypnotic drugs, undetermined, initial encounter -T426X4D Poisoning by other antiepileptic and sedative-hypnotic drugs, undetermined, subsequent encounter -T426X4S Poisoning by other antiepileptic and sedative-hypnotic drugs, undetermined, sequela -T426X5A Adverse effect of other antiepileptic and sedative-hypnotic drugs, initial encounter -T426X5D Adverse effect of other antiepileptic and sedative-hypnotic drugs, subsequent encounter -T426X5S Adverse effect of other antiepileptic and sedative-hypnotic drugs, sequela -T426X6A Underdosing of other antiepileptic and sedative-hypnotic drugs, initial encounter -T426X6D Underdosing of other antiepileptic and sedative-hypnotic drugs, subsequent encounter -T426X6S Underdosing of other antiepileptic and sedative-hypnotic drugs, sequela -T4271XA Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, accidental (unintentional), initial encounter -T4271XD Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, accidental (unintentional), subsequent encounter -T4271XS Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, accidental (unintentional), sequela -T4272XA Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, intentional self-harm, initial encounter -T4272XD Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, intentional self-harm, subsequent encounter -T4272XS Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, intentional self-harm, sequela -T4273XA Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, assault, initial encounter -T4273XD Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, assault, subsequent encounter -T4273XS Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, assault, sequela -T4274XA Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, undetermined, initial encounter -T4274XD Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, undetermined, subsequent encounter -T4274XS Poisoning by unspecified antiepileptic and sedative-hypnotic drugs, undetermined, sequela -T4275XA Adverse effect of unspecified antiepileptic and sedative-hypnotic drugs, initial encounter -T4275XD Adverse effect of unspecified antiepileptic and sedative-hypnotic drugs, subsequent encounter -T4275XS Adverse effect of unspecified antiepileptic and sedative-hypnotic drugs, sequela -T4276XA Underdosing of unspecified antiepileptic and sedative-hypnotic drugs, initial encounter -T4276XD Underdosing of unspecified antiepileptic and sedative-hypnotic drugs, subsequent encounter -T4276XS Underdosing of unspecified antiepileptic and sedative-hypnotic drugs, sequela -T428X1A Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, accidental (unintentional), initial encounter -T428X1D Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, accidental (unintentional), subsequent encounter -T428X1S Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, accidental (unintentional), sequela -T428X2A Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, intentional self-harm, initial encounter -T428X2D Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, intentional self-harm, subsequent encounter -T428X2S Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, intentional self-harm, sequela -T428X3A Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, assault, initial encounter -T428X3D Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, assault, subsequent encounter -T428X3S Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, assault, sequela -T428X4A Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, undetermined, initial encounter -T428X4D Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, undetermined, subsequent encounter -T428X4S Poisoning by antiparkinsonism drugs and other central muscle-tone depressants, undetermined, sequela -T428X5A Adverse effect of antiparkinsonism drugs and other central muscle-tone depressants, initial encounter -T428X5D Adverse effect of antiparkinsonism drugs and other central muscle-tone depressants, subsequent encounter -T428X5S Adverse effect of antiparkinsonism drugs and other central muscle-tone depressants, sequela -T428X6A Underdosing of antiparkinsonism drugs and other central muscle-tone depressants, initial encounter -T428X6D Underdosing of antiparkinsonism drugs and other central muscle-tone depressants, subsequent encounter -T428X6S Underdosing of antiparkinsonism drugs and other central muscle-tone depressants, sequela -T43011A Poisoning by tricyclic antidepressants, accidental (unintentional), initial encounter -T43011D Poisoning by tricyclic antidepressants, accidental (unintentional), subsequent encounter -T43011S Poisoning by tricyclic antidepressants, accidental (unintentional), sequela -T43012A Poisoning by tricyclic antidepressants, intentional self-harm, initial encounter -T43012D Poisoning by tricyclic antidepressants, intentional self-harm, subsequent encounter -T43012S Poisoning by tricyclic antidepressants, intentional self-harm, sequela -T43013A Poisoning by tricyclic antidepressants, assault, initial encounter -T43013D Poisoning by tricyclic antidepressants, assault, subsequent encounter -T43013S Poisoning by tricyclic antidepressants, assault, sequela -T43014A Poisoning by tricyclic antidepressants, undetermined, initial encounter -T43014D Poisoning by tricyclic antidepressants, undetermined, subsequent encounter -T43014S Poisoning by tricyclic antidepressants, undetermined, sequela -T43015A Adverse effect of tricyclic antidepressants, initial encounter -T43015D Adverse effect of tricyclic antidepressants, subsequent encounter -T43015S Adverse effect of tricyclic antidepressants, sequela -T43016A Underdosing of tricyclic antidepressants, initial encounter -T43016D Underdosing of tricyclic antidepressants, subsequent encounter -T43016S Underdosing of tricyclic antidepressants, sequela -T43021A Poisoning by tetracyclic antidepressants, accidental (unintentional), initial encounter -T43021D Poisoning by tetracyclic antidepressants, accidental (unintentional), subsequent encounter -T43021S Poisoning by tetracyclic antidepressants, accidental (unintentional), sequela -T43022A Poisoning by tetracyclic antidepressants, intentional self-harm, initial encounter -T43022D Poisoning by tetracyclic antidepressants, intentional self-harm, subsequent encounter -T43022S Poisoning by tetracyclic antidepressants, intentional self-harm, sequela -T43023A Poisoning by tetracyclic antidepressants, assault, initial encounter -T43023D Poisoning by tetracyclic antidepressants, assault, subsequent encounter -T43023S Poisoning by tetracyclic antidepressants, assault, sequela -T43024A Poisoning by tetracyclic antidepressants, undetermined, initial encounter -T43024D Poisoning by tetracyclic antidepressants, undetermined, subsequent encounter -T43024S Poisoning by tetracyclic antidepressants, undetermined, sequela -T43025A Adverse effect of tetracyclic antidepressants, initial encounter -T43025D Adverse effect of tetracyclic antidepressants, subsequent encounter -T43025S Adverse effect of tetracyclic antidepressants, sequela -T43026A Underdosing of tetracyclic antidepressants, initial encounter -T43026D Underdosing of tetracyclic antidepressants, subsequent encounter -T43026S Underdosing of tetracyclic antidepressants, sequela -T431X1A Poisoning by monoamine-oxidase-inhibitor antidepressants, accidental (unintentional), initial encounter -T431X1D Poisoning by monoamine-oxidase-inhibitor antidepressants, accidental (unintentional), subsequent encounter -T431X1S Poisoning by monoamine-oxidase-inhibitor antidepressants, accidental (unintentional), sequela -T431X2A Poisoning by monoamine-oxidase-inhibitor antidepressants, intentional self-harm, initial encounter -T431X2D Poisoning by monoamine-oxidase-inhibitor antidepressants, intentional self-harm, subsequent encounter -T431X2S Poisoning by monoamine-oxidase-inhibitor antidepressants, intentional self-harm, sequela -T431X3A Poisoning by monoamine-oxidase-inhibitor antidepressants, assault, initial encounter -T431X3D Poisoning by monoamine-oxidase-inhibitor antidepressants, assault, subsequent encounter -T431X3S Poisoning by monoamine-oxidase-inhibitor antidepressants, assault, sequela -T431X4A Poisoning by monoamine-oxidase-inhibitor antidepressants, undetermined, initial encounter -T431X4D Poisoning by monoamine-oxidase-inhibitor antidepressants, undetermined, subsequent encounter -T431X4S Poisoning by monoamine-oxidase-inhibitor antidepressants, undetermined, sequela -T431X5A Adverse effect of monoamine-oxidase-inhibitor antidepressants, initial encounter -T431X5D Adverse effect of monoamine-oxidase-inhibitor antidepressants, subsequent encounter -T431X5S Adverse effect of monoamine-oxidase-inhibitor antidepressants, sequela -T431X6A Underdosing of monoamine-oxidase-inhibitor antidepressants, initial encounter -T431X6D Underdosing of monoamine-oxidase-inhibitor antidepressants, subsequent encounter -T431X6S Underdosing of monoamine-oxidase-inhibitor antidepressants, sequela -T43201A Poisoning by unspecified antidepressants, accidental (unintentional), initial encounter -T43201D Poisoning by unspecified antidepressants, accidental (unintentional), subsequent encounter -T43201S Poisoning by unspecified antidepressants, accidental (unintentional), sequela -T43202A Poisoning by unspecified antidepressants, intentional self-harm, initial encounter -T43202D Poisoning by unspecified antidepressants, intentional self-harm, subsequent encounter -T43202S Poisoning by unspecified antidepressants, intentional self-harm, sequela -T43203A Poisoning by unspecified antidepressants, assault, initial encounter -T43203D Poisoning by unspecified antidepressants, assault, subsequent encounter -T43203S Poisoning by unspecified antidepressants, assault, sequela -T43204A Poisoning by unspecified antidepressants, undetermined, initial encounter -T43204D Poisoning by unspecified antidepressants, undetermined, subsequent encounter -T43204S Poisoning by unspecified antidepressants, undetermined, sequela -T43205A Adverse effect of unspecified antidepressants, initial encounter -T43205D Adverse effect of unspecified antidepressants, subsequent encounter -T43205S Adverse effect of unspecified antidepressants, sequela -T43206A Underdosing of unspecified antidepressants, initial encounter -T43206D Underdosing of unspecified antidepressants, subsequent encounter -T43206S Underdosing of unspecified antidepressants, sequela -T43211A Poisoning by selective serotonin and norepinephrine reuptake inhibitors, accidental (unintentional), initial encounter -T43211D Poisoning by selective serotonin and norepinephrine reuptake inhibitors, accidental (unintentional), subsequent encounter -T43211S Poisoning by selective serotonin and norepinephrine reuptake inhibitors, accidental (unintentional), sequela -T43212A Poisoning by selective serotonin and norepinephrine reuptake inhibitors, intentional self-harm, initial encounter -T43212D Poisoning by selective serotonin and norepinephrine reuptake inhibitors, intentional self-harm, subsequent encounter -T43212S Poisoning by selective serotonin and norepinephrine reuptake inhibitors, intentional self-harm, sequela -T43213A Poisoning by selective serotonin and norepinephrine reuptake inhibitors, assault, initial encounter -T43213D Poisoning by selective serotonin and norepinephrine reuptake inhibitors, assault, subsequent encounter -T43213S Poisoning by selective serotonin and norepinephrine reuptake inhibitors, assault, sequela -T43214A Poisoning by selective serotonin and norepinephrine reuptake inhibitors, undetermined, initial encounter -T43214D Poisoning by selective serotonin and norepinephrine reuptake inhibitors, undetermined, subsequent encounter -T43214S Poisoning by selective serotonin and norepinephrine reuptake inhibitors, undetermined, sequela -T43215A Adverse effect of selective serotonin and norepinephrine reuptake inhibitors, initial encounter -T43215D Adverse effect of selective serotonin and norepinephrine reuptake inhibitors, subsequent encounter -T43215S Adverse effect of selective serotonin and norepinephrine reuptake inhibitors, sequela -T43216A Underdosing of selective serotonin and norepinephrine reuptake inhibitors, initial encounter -T43216D Underdosing of selective serotonin and norepinephrine reuptake inhibitors, subsequent encounter -T43216S Underdosing of selective serotonin and norepinephrine reuptake inhibitors, sequela -T43221A Poisoning by selective serotonin reuptake inhibitors, accidental (unintentional), initial encounter -T43221D Poisoning by selective serotonin reuptake inhibitors, accidental (unintentional), subsequent encounter -T43221S Poisoning by selective serotonin reuptake inhibitors, accidental (unintentional), sequela -T43222A Poisoning by selective serotonin reuptake inhibitors, intentional self-harm, initial encounter -T43222D Poisoning by selective serotonin reuptake inhibitors, intentional self-harm, subsequent encounter -T43222S Poisoning by selective serotonin reuptake inhibitors, intentional self-harm, sequela -T43223A Poisoning by selective serotonin reuptake inhibitors, assault, initial encounter -T43223D Poisoning by selective serotonin reuptake inhibitors, assault, subsequent encounter -T43223S Poisoning by selective serotonin reuptake inhibitors, assault, sequela -T43224A Poisoning by selective serotonin reuptake inhibitors, undetermined, initial encounter -T43224D Poisoning by selective serotonin reuptake inhibitors, undetermined, subsequent encounter -T43224S Poisoning by selective serotonin reuptake inhibitors, undetermined, sequela -T43225A Adverse effect of selective serotonin reuptake inhibitors, initial encounter -T43225D Adverse effect of selective serotonin reuptake inhibitors, subsequent encounter -T43225S Adverse effect of selective serotonin reuptake inhibitors, sequela -T43226A Underdosing of selective serotonin reuptake inhibitors, initial encounter -T43226D Underdosing of selective serotonin reuptake inhibitors, subsequent encounter -T43226S Underdosing of selective serotonin reuptake inhibitors, sequela -T43291A Poisoning by other antidepressants, accidental (unintentional), initial encounter -T43291D Poisoning by other antidepressants, accidental (unintentional), subsequent encounter -T43291S Poisoning by other antidepressants, accidental (unintentional), sequela -T43292A Poisoning by other antidepressants, intentional self-harm, initial encounter -T43292D Poisoning by other antidepressants, intentional self-harm, subsequent encounter -T43292S Poisoning by other antidepressants, intentional self-harm, sequela -T43293A Poisoning by other antidepressants, assault, initial encounter -T43293D Poisoning by other antidepressants, assault, subsequent encounter -T43293S Poisoning by other antidepressants, assault, sequela -T43294A Poisoning by other antidepressants, undetermined, initial encounter -T43294D Poisoning by other antidepressants, undetermined, subsequent encounter -T43294S Poisoning by other antidepressants, undetermined, sequela -T43295A Adverse effect of other antidepressants, initial encounter -T43295D Adverse effect of other antidepressants, subsequent encounter -T43295S Adverse effect of other antidepressants, sequela -T43296A Underdosing of other antidepressants, initial encounter -T43296D Underdosing of other antidepressants, subsequent encounter -T43296S Underdosing of other antidepressants, sequela -T433X1A Poisoning by phenothiazine antipsychotics and neuroleptics, accidental (unintentional), initial encounter -T433X1D Poisoning by phenothiazine antipsychotics and neuroleptics, accidental (unintentional), subsequent encounter -T433X1S Poisoning by phenothiazine antipsychotics and neuroleptics, accidental (unintentional), sequela -T433X2A Poisoning by phenothiazine antipsychotics and neuroleptics, intentional self-harm, initial encounter -T433X2D Poisoning by phenothiazine antipsychotics and neuroleptics, intentional self-harm, subsequent encounter -T433X2S Poisoning by phenothiazine antipsychotics and neuroleptics, intentional self-harm, sequela -T433X3A Poisoning by phenothiazine antipsychotics and neuroleptics, assault, initial encounter -T433X3D Poisoning by phenothiazine antipsychotics and neuroleptics, assault, subsequent encounter -T433X3S Poisoning by phenothiazine antipsychotics and neuroleptics, assault, sequela -T433X4A Poisoning by phenothiazine antipsychotics and neuroleptics, undetermined, initial encounter -T433X4D Poisoning by phenothiazine antipsychotics and neuroleptics, undetermined, subsequent encounter -T433X4S Poisoning by phenothiazine antipsychotics and neuroleptics, undetermined, sequela -T433X5A Adverse effect of phenothiazine antipsychotics and neuroleptics, initial encounter -T433X5D Adverse effect of phenothiazine antipsychotics and neuroleptics, subsequent encounter -T433X5S Adverse effect of phenothiazine antipsychotics and neuroleptics, sequela -T433X6A Underdosing of phenothiazine antipsychotics and neuroleptics, initial encounter -T433X6D Underdosing of phenothiazine antipsychotics and neuroleptics, subsequent encounter -T433X6S Underdosing of phenothiazine antipsychotics and neuroleptics, sequela -T434X1A Poisoning by butyrophenone and thiothixene neuroleptics, accidental (unintentional), initial encounter -T434X1D Poisoning by butyrophenone and thiothixene neuroleptics, accidental (unintentional), subsequent encounter -T434X1S Poisoning by butyrophenone and thiothixene neuroleptics, accidental (unintentional), sequela -T434X2A Poisoning by butyrophenone and thiothixene neuroleptics, intentional self-harm, initial encounter -T434X2D Poisoning by butyrophenone and thiothixene neuroleptics, intentional self-harm, subsequent encounter -T434X2S Poisoning by butyrophenone and thiothixene neuroleptics, intentional self-harm, sequela -T434X3A Poisoning by butyrophenone and thiothixene neuroleptics, assault, initial encounter -T434X3D Poisoning by butyrophenone and thiothixene neuroleptics, assault, subsequent encounter -T434X3S Poisoning by butyrophenone and thiothixene neuroleptics, assault, sequela -T434X4A Poisoning by butyrophenone and thiothixene neuroleptics, undetermined, initial encounter -T434X4D Poisoning by butyrophenone and thiothixene neuroleptics, undetermined, subsequent encounter -T434X4S Poisoning by butyrophenone and thiothixene neuroleptics, undetermined, sequela -T434X5A Adverse effect of butyrophenone and thiothixene neuroleptics, initial encounter -T434X5D Adverse effect of butyrophenone and thiothixene neuroleptics, subsequent encounter -T434X5S Adverse effect of butyrophenone and thiothixene neuroleptics, sequela -T434X6A Underdosing of butyrophenone and thiothixene neuroleptics, initial encounter -T434X6D Underdosing of butyrophenone and thiothixene neuroleptics, subsequent encounter -T434X6S Underdosing of butyrophenone and thiothixene neuroleptics, sequela -T43501A Poisoning by unspecified antipsychotics and neuroleptics, accidental (unintentional), initial encounter -T43501D Poisoning by unspecified antipsychotics and neuroleptics, accidental (unintentional), subsequent encounter -T43501S Poisoning by unspecified antipsychotics and neuroleptics, accidental (unintentional), sequela -T43502A Poisoning by unspecified antipsychotics and neuroleptics, intentional self-harm, initial encounter -T43502D Poisoning by unspecified antipsychotics and neuroleptics, intentional self-harm, subsequent encounter -T43502S Poisoning by unspecified antipsychotics and neuroleptics, intentional self-harm, sequela -T43503A Poisoning by unspecified antipsychotics and neuroleptics, assault, initial encounter -T43503D Poisoning by unspecified antipsychotics and neuroleptics, assault, subsequent encounter -T43503S Poisoning by unspecified antipsychotics and neuroleptics, assault, sequela -T43504A Poisoning by unspecified antipsychotics and neuroleptics, undetermined, initial encounter -T43504D Poisoning by unspecified antipsychotics and neuroleptics, undetermined, subsequent encounter -T43504S Poisoning by unspecified antipsychotics and neuroleptics, undetermined, sequela -T43505A Adverse effect of unspecified antipsychotics and neuroleptics, initial encounter -T43505D Adverse effect of unspecified antipsychotics and neuroleptics, subsequent encounter -T43505S Adverse effect of unspecified antipsychotics and neuroleptics, sequela -T43506A Underdosing of unspecified antipsychotics and neuroleptics, initial encounter -T43506D Underdosing of unspecified antipsychotics and neuroleptics, subsequent encounter -T43506S Underdosing of unspecified antipsychotics and neuroleptics, sequela -T43591A Poisoning by other antipsychotics and neuroleptics, accidental (unintentional), initial encounter -T43591D Poisoning by other antipsychotics and neuroleptics, accidental (unintentional), subsequent encounter -T43591S Poisoning by other antipsychotics and neuroleptics, accidental (unintentional), sequela -T43592A Poisoning by other antipsychotics and neuroleptics, intentional self-harm, initial encounter -T43592D Poisoning by other antipsychotics and neuroleptics, intentional self-harm, subsequent encounter -T43592S Poisoning by other antipsychotics and neuroleptics, intentional self-harm, sequela -T43593A Poisoning by other antipsychotics and neuroleptics, assault, initial encounter -T43593D Poisoning by other antipsychotics and neuroleptics, assault, subsequent encounter -T43593S Poisoning by other antipsychotics and neuroleptics, assault, sequela -T43594A Poisoning by other antipsychotics and neuroleptics, undetermined, initial encounter -T43594D Poisoning by other antipsychotics and neuroleptics, undetermined, subsequent encounter -T43594S Poisoning by other antipsychotics and neuroleptics, undetermined, sequela -T43595A Adverse effect of other antipsychotics and neuroleptics, initial encounter -T43595D Adverse effect of other antipsychotics and neuroleptics, subsequent encounter -T43595S Adverse effect of other antipsychotics and neuroleptics, sequela -T43596A Underdosing of other antipsychotics and neuroleptics, initial encounter -T43596D Underdosing of other antipsychotics and neuroleptics, subsequent encounter -T43596S Underdosing of other antipsychotics and neuroleptics, sequela -T43601A Poisoning by unspecified psychostimulants, accidental (unintentional), initial encounter -T43601D Poisoning by unspecified psychostimulants, accidental (unintentional), subsequent encounter -T43601S Poisoning by unspecified psychostimulants, accidental (unintentional), sequela -T43602A Poisoning by unspecified psychostimulants, intentional self-harm, initial encounter -T43602D Poisoning by unspecified psychostimulants, intentional self-harm, subsequent encounter -T43602S Poisoning by unspecified psychostimulants, intentional self-harm, sequela -T43603A Poisoning by unspecified psychostimulants, assault, initial encounter -T43603D Poisoning by unspecified psychostimulants, assault, subsequent encounter -T43603S Poisoning by unspecified psychostimulants, assault, sequela -T43604A Poisoning by unspecified psychostimulants, undetermined, initial encounter -T43604D Poisoning by unspecified psychostimulants, undetermined, subsequent encounter -T43604S Poisoning by unspecified psychostimulants, undetermined, sequela -T43605A Adverse effect of unspecified psychostimulants, initial encounter -T43605D Adverse effect of unspecified psychostimulants, subsequent encounter -T43605S Adverse effect of unspecified psychostimulants, sequela -T43606A Underdosing of unspecified psychostimulants, initial encounter -T43606D Underdosing of unspecified psychostimulants, subsequent encounter -T43606S Underdosing of unspecified psychostimulants, sequela -T43611A Poisoning by caffeine, accidental (unintentional), initial encounter -T43611D Poisoning by caffeine, accidental (unintentional), subsequent encounter -T43611S Poisoning by caffeine, accidental (unintentional), sequela -T43612A Poisoning by caffeine, intentional self-harm, initial encounter -T43612D Poisoning by caffeine, intentional self-harm, subsequent encounter -T43612S Poisoning by caffeine, intentional self-harm, sequela -T43613A Poisoning by caffeine, assault, initial encounter -T43613D Poisoning by caffeine, assault, subsequent encounter -T43613S Poisoning by caffeine, assault, sequela -T43614A Poisoning by caffeine, undetermined, initial encounter -T43614D Poisoning by caffeine, undetermined, subsequent encounter -T43614S Poisoning by caffeine, undetermined, sequela -T43615A Adverse effect of caffeine, initial encounter -T43615D Adverse effect of caffeine, subsequent encounter -T43615S Adverse effect of caffeine, sequela -T43616A Underdosing of caffeine, initial encounter -T43616D Underdosing of caffeine, subsequent encounter -T43616S Underdosing of caffeine, sequela -T43621A Poisoning by amphetamines, accidental (unintentional), initial encounter -T43621D Poisoning by amphetamines, accidental (unintentional), subsequent encounter -T43621S Poisoning by amphetamines, accidental (unintentional), sequela -T43622A Poisoning by amphetamines, intentional self-harm, initial encounter -T43622D Poisoning by amphetamines, intentional self-harm, subsequent encounter -T43622S Poisoning by amphetamines, intentional self-harm, sequela -T43623A Poisoning by amphetamines, assault, initial encounter -T43623D Poisoning by amphetamines, assault, subsequent encounter -T43623S Poisoning by amphetamines, assault, sequela -T43624A Poisoning by amphetamines, undetermined, initial encounter -T43624D Poisoning by amphetamines, undetermined, subsequent encounter -T43624S Poisoning by amphetamines, undetermined, sequela -T43625A Adverse effect of amphetamines, initial encounter -T43625D Adverse effect of amphetamines, subsequent encounter -T43625S Adverse effect of amphetamines, sequela -T43626A Underdosing of amphetamines, initial encounter -T43626D Underdosing of amphetamines, subsequent encounter -T43626S Underdosing of amphetamines, sequela -T43631A Poisoning by methylphenidate, accidental (unintentional), initial encounter -T43631D Poisoning by methylphenidate, accidental (unintentional), subsequent encounter -T43631S Poisoning by methylphenidate, accidental (unintentional), sequela -T43632A Poisoning by methylphenidate, intentional self-harm, initial encounter -T43632D Poisoning by methylphenidate, intentional self-harm, subsequent encounter -T43632S Poisoning by methylphenidate, intentional self-harm, sequela -T43633A Poisoning by methylphenidate, assault, initial encounter -T43633D Poisoning by methylphenidate, assault, subsequent encounter -T43633S Poisoning by methylphenidate, assault, sequela -T43634A Poisoning by methylphenidate, undetermined, initial encounter -T43634D Poisoning by methylphenidate, undetermined, subsequent encounter -T43634S Poisoning by methylphenidate, undetermined, sequela -T43635A Adverse effect of methylphenidate, initial encounter -T43635D Adverse effect of methylphenidate, subsequent encounter -T43635S Adverse effect of methylphenidate, sequela -T43636A Underdosing of methylphenidate, initial encounter -T43636D Underdosing of methylphenidate, subsequent encounter -T43636S Underdosing of methylphenidate, sequela -T43691A Poisoning by other psychostimulants, accidental (unintentional), initial encounter -T43691D Poisoning by other psychostimulants, accidental (unintentional), subsequent encounter -T43691S Poisoning by other psychostimulants, accidental (unintentional), sequela -T43692A Poisoning by other psychostimulants, intentional self-harm, initial encounter -T43692D Poisoning by other psychostimulants, intentional self-harm, subsequent encounter -T43692S Poisoning by other psychostimulants, intentional self-harm, sequela -T43693A Poisoning by other psychostimulants, assault, initial encounter -T43693D Poisoning by other psychostimulants, assault, subsequent encounter -T43693S Poisoning by other psychostimulants, assault, sequela -T43694A Poisoning by other psychostimulants, undetermined, initial encounter -T43694D Poisoning by other psychostimulants, undetermined, subsequent encounter -T43694S Poisoning by other psychostimulants, undetermined, sequela -T43695A Adverse effect of other psychostimulants, initial encounter -T43695D Adverse effect of other psychostimulants, subsequent encounter -T43695S Adverse effect of other psychostimulants, sequela -T43696A Underdosing of other psychostimulants, initial encounter -T43696D Underdosing of other psychostimulants, subsequent encounter -T43696S Underdosing of other psychostimulants, sequela -T438X1A Poisoning by other psychotropic drugs, accidental (unintentional), initial encounter -T438X1D Poisoning by other psychotropic drugs, accidental (unintentional), subsequent encounter -T438X1S Poisoning by other psychotropic drugs, accidental (unintentional), sequela -T438X2A Poisoning by other psychotropic drugs, intentional self-harm, initial encounter -T438X2D Poisoning by other psychotropic drugs, intentional self-harm, subsequent encounter -T438X2S Poisoning by other psychotropic drugs, intentional self-harm, sequela -T438X3A Poisoning by other psychotropic drugs, assault, initial encounter -T438X3D Poisoning by other psychotropic drugs, assault, subsequent encounter -T438X3S Poisoning by other psychotropic drugs, assault, sequela -T438X4A Poisoning by other psychotropic drugs, undetermined, initial encounter -T438X4D Poisoning by other psychotropic drugs, undetermined, subsequent encounter -T438X4S Poisoning by other psychotropic drugs, undetermined, sequela -T438X5A Adverse effect of other psychotropic drugs, initial encounter -T438X5D Adverse effect of other psychotropic drugs, subsequent encounter -T438X5S Adverse effect of other psychotropic drugs, sequela -T438X6A Underdosing of other psychotropic drugs, initial encounter -T438X6D Underdosing of other psychotropic drugs, subsequent encounter -T438X6S Underdosing of other psychotropic drugs, sequela -T4391XA Poisoning by unspecified psychotropic drug, accidental (unintentional), initial encounter -T4391XD Poisoning by unspecified psychotropic drug, accidental (unintentional), subsequent encounter -T4391XS Poisoning by unspecified psychotropic drug, accidental (unintentional), sequela -T4392XA Poisoning by unspecified psychotropic drug, intentional self-harm, initial encounter -T4392XD Poisoning by unspecified psychotropic drug, intentional self-harm, subsequent encounter -T4392XS Poisoning by unspecified psychotropic drug, intentional self-harm, sequela -T4393XA Poisoning by unspecified psychotropic drug, assault, initial encounter -T4393XD Poisoning by unspecified psychotropic drug, assault, subsequent encounter -T4393XS Poisoning by unspecified psychotropic drug, assault, sequela -T4394XA Poisoning by unspecified psychotropic drug, undetermined, initial encounter -T4394XD Poisoning by unspecified psychotropic drug, undetermined, subsequent encounter -T4394XS Poisoning by unspecified psychotropic drug, undetermined, sequela -T4395XA Adverse effect of unspecified psychotropic drug, initial encounter -T4395XD Adverse effect of unspecified psychotropic drug, subsequent encounter -T4395XS Adverse effect of unspecified psychotropic drug, sequela -T4396XA Underdosing of unspecified psychotropic drug, initial encounter -T4396XD Underdosing of unspecified psychotropic drug, subsequent encounter -T4396XS Underdosing of unspecified psychotropic drug, sequela -T440X1A Poisoning by anticholinesterase agents, accidental (unintentional), initial encounter -T440X1D Poisoning by anticholinesterase agents, accidental (unintentional), subsequent encounter -T440X1S Poisoning by anticholinesterase agents, accidental (unintentional), sequela -T440X2A Poisoning by anticholinesterase agents, intentional self-harm, initial encounter -T440X2D Poisoning by anticholinesterase agents, intentional self-harm, subsequent encounter -T440X2S Poisoning by anticholinesterase agents, intentional self-harm, sequela -T440X3A Poisoning by anticholinesterase agents, assault, initial encounter -T440X3D Poisoning by anticholinesterase agents, assault, subsequent encounter -T440X3S Poisoning by anticholinesterase agents, assault, sequela -T440X4A Poisoning by anticholinesterase agents, undetermined, initial encounter -T440X4D Poisoning by anticholinesterase agents, undetermined, subsequent encounter -T440X4S Poisoning by anticholinesterase agents, undetermined, sequela -T440X5A Adverse effect of anticholinesterase agents, initial encounter -T440X5D Adverse effect of anticholinesterase agents, subsequent encounter -T440X5S Adverse effect of anticholinesterase agents, sequela -T440X6A Underdosing of anticholinesterase agents, initial encounter -T440X6D Underdosing of anticholinesterase agents, subsequent encounter -T440X6S Underdosing of anticholinesterase agents, sequela -T441X1A Poisoning by other parasympathomimetics [cholinergics], accidental (unintentional), initial encounter -T441X1D Poisoning by other parasympathomimetics [cholinergics], accidental (unintentional), subsequent encounter -T441X1S Poisoning by other parasympathomimetics [cholinergics], accidental (unintentional), sequela -T441X2A Poisoning by other parasympathomimetics [cholinergics], intentional self-harm, initial encounter -T441X2D Poisoning by other parasympathomimetics [cholinergics], intentional self-harm, subsequent encounter -T441X2S Poisoning by other parasympathomimetics [cholinergics], intentional self-harm, sequela -T441X3A Poisoning by other parasympathomimetics [cholinergics], assault, initial encounter -T441X3D Poisoning by other parasympathomimetics [cholinergics], assault, subsequent encounter -T441X3S Poisoning by other parasympathomimetics [cholinergics], assault, sequela -T441X4A Poisoning by other parasympathomimetics [cholinergics], undetermined, initial encounter -T441X4D Poisoning by other parasympathomimetics [cholinergics], undetermined, subsequent encounter -T441X4S Poisoning by other parasympathomimetics [cholinergics], undetermined, sequela -T441X5A Adverse effect of other parasympathomimetics [cholinergics], initial encounter -T441X5D Adverse effect of other parasympathomimetics [cholinergics], subsequent encounter -T441X5S Adverse effect of other parasympathomimetics [cholinergics], sequela -T441X6A Underdosing of other parasympathomimetics, initial encounter -T441X6D Underdosing of other parasympathomimetics, subsequent encounter -T441X6S Underdosing of other parasympathomimetics, sequela -T442X1A Poisoning by ganglionic blocking drugs, accidental (unintentional), initial encounter -T442X1D Poisoning by ganglionic blocking drugs, accidental (unintentional), subsequent encounter -T442X1S Poisoning by ganglionic blocking drugs, accidental (unintentional), sequela -T442X2A Poisoning by ganglionic blocking drugs, intentional self-harm, initial encounter -T442X2D Poisoning by ganglionic blocking drugs, intentional self-harm, subsequent encounter -T442X2S Poisoning by ganglionic blocking drugs, intentional self-harm, sequela -T442X3A Poisoning by ganglionic blocking drugs, assault, initial encounter -T442X3D Poisoning by ganglionic blocking drugs, assault, subsequent encounter -T442X3S Poisoning by ganglionic blocking drugs, assault, sequela -T442X4A Poisoning by ganglionic blocking drugs, undetermined, initial encounter -T442X4D Poisoning by ganglionic blocking drugs, undetermined, subsequent encounter -T442X4S Poisoning by ganglionic blocking drugs, undetermined, sequela -T442X5A Adverse effect of ganglionic blocking drugs, initial encounter -T442X5D Adverse effect of ganglionic blocking drugs, subsequent encounter -T442X5S Adverse effect of ganglionic blocking drugs, sequela -T442X6A Underdosing of ganglionic blocking drugs, initial encounter -T442X6D Underdosing of ganglionic blocking drugs, subsequent encounter -T442X6S Underdosing of ganglionic blocking drugs, sequela -T443X1A Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, accidental (unintentional), initial encounter -T443X1D Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, accidental (unintentional), subsequent encounter -T443X1S Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, accidental (unintentional), sequela -T443X2A Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, intentional self-harm, initial encounter -T443X2D Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, intentional self-harm, subsequent encounter -T443X2S Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, intentional self-harm, sequela -T443X3A Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, assault, initial encounter -T443X3D Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, assault, subsequent encounter -T443X3S Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, assault, sequela -T443X4A Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, undetermined, initial encounter -T443X4D Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, undetermined, subsequent encounter -T443X4S Poisoning by other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, undetermined, sequela -T443X5A Adverse effect of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, initial encounter -T443X5D Adverse effect of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, subsequent encounter -T443X5S Adverse effect of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, sequela -T443X6A Underdosing of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, initial encounter -T443X6D Underdosing of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, subsequent encounter -T443X6S Underdosing of other parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics, sequela -T444X1A Poisoning by predominantly alpha-adrenoreceptor agonists, accidental (unintentional), initial encounter -T444X1D Poisoning by predominantly alpha-adrenoreceptor agonists, accidental (unintentional), subsequent encounter -T444X1S Poisoning by predominantly alpha-adrenoreceptor agonists, accidental (unintentional), sequela -T444X2A Poisoning by predominantly alpha-adrenoreceptor agonists, intentional self-harm, initial encounter -T444X2D Poisoning by predominantly alpha-adrenoreceptor agonists, intentional self-harm, subsequent encounter -T444X2S Poisoning by predominantly alpha-adrenoreceptor agonists, intentional self-harm, sequela -T444X3A Poisoning by predominantly alpha-adrenoreceptor agonists, assault, initial encounter -T444X3D Poisoning by predominantly alpha-adrenoreceptor agonists, assault, subsequent encounter -T444X3S Poisoning by predominantly alpha-adrenoreceptor agonists, assault, sequela -T444X4A Poisoning by predominantly alpha-adrenoreceptor agonists, undetermined, initial encounter -T444X4D Poisoning by predominantly alpha-adrenoreceptor agonists, undetermined, subsequent encounter -T444X4S Poisoning by predominantly alpha-adrenoreceptor agonists, undetermined, sequela -T444X5A Adverse effect of predominantly alpha-adrenoreceptor agonists, initial encounter -T444X5D Adverse effect of predominantly alpha-adrenoreceptor agonists, subsequent encounter -T444X5S Adverse effect of predominantly alpha-adrenoreceptor agonists, sequela -T444X6A Underdosing of predominantly alpha-adrenoreceptor agonists, initial encounter -T444X6D Underdosing of predominantly alpha-adrenoreceptor agonists, subsequent encounter -T444X6S Underdosing of predominantly alpha-adrenoreceptor agonists, sequela -T445X1A Poisoning by predominantly beta-adrenoreceptor agonists, accidental (unintentional), initial encounter -T445X1D Poisoning by predominantly beta-adrenoreceptor agonists, accidental (unintentional), subsequent encounter -T445X1S Poisoning by predominantly beta-adrenoreceptor agonists, accidental (unintentional), sequela -T445X2A Poisoning by predominantly beta-adrenoreceptor agonists, intentional self-harm, initial encounter -T445X2D Poisoning by predominantly beta-adrenoreceptor agonists, intentional self-harm, subsequent encounter -T445X2S Poisoning by predominantly beta-adrenoreceptor agonists, intentional self-harm, sequela -T445X3A Poisoning by predominantly beta-adrenoreceptor agonists, assault, initial encounter -T445X3D Poisoning by predominantly beta-adrenoreceptor agonists, assault, subsequent encounter -T445X3S Poisoning by predominantly beta-adrenoreceptor agonists, assault, sequela -T445X4A Poisoning by predominantly beta-adrenoreceptor agonists, undetermined, initial encounter -T445X4D Poisoning by predominantly beta-adrenoreceptor agonists, undetermined, subsequent encounter -T445X4S Poisoning by predominantly beta-adrenoreceptor agonists, undetermined, sequela -T445X5A Adverse effect of predominantly beta-adrenoreceptor agonists, initial encounter -T445X5D Adverse effect of predominantly beta-adrenoreceptor agonists, subsequent encounter -T445X5S Adverse effect of predominantly beta-adrenoreceptor agonists, sequela -T445X6A Underdosing of predominantly beta-adrenoreceptor agonists, initial encounter -T445X6D Underdosing of predominantly beta-adrenoreceptor agonists, subsequent encounter -T445X6S Underdosing of predominantly beta-adrenoreceptor agonists, sequela -T446X1A Poisoning by alpha-adrenoreceptor antagonists, accidental (unintentional), initial encounter -T446X1D Poisoning by alpha-adrenoreceptor antagonists, accidental (unintentional), subsequent encounter -T446X1S Poisoning by alpha-adrenoreceptor antagonists, accidental (unintentional), sequela -T446X2A Poisoning by alpha-adrenoreceptor antagonists, intentional self-harm, initial encounter -T446X2D Poisoning by alpha-adrenoreceptor antagonists, intentional self-harm, subsequent encounter -T446X2S Poisoning by alpha-adrenoreceptor antagonists, intentional self-harm, sequela -T446X3A Poisoning by alpha-adrenoreceptor antagonists, assault, initial encounter -T446X3D Poisoning by alpha-adrenoreceptor antagonists, assault, subsequent encounter -T446X3S Poisoning by alpha-adrenoreceptor antagonists, assault, sequela -T446X4A Poisoning by alpha-adrenoreceptor antagonists, undetermined, initial encounter -T446X4D Poisoning by alpha-adrenoreceptor antagonists, undetermined, subsequent encounter -T446X4S Poisoning by alpha-adrenoreceptor antagonists, undetermined, sequela -T446X5A Adverse effect of alpha-adrenoreceptor antagonists, initial encounter -T446X5D Adverse effect of alpha-adrenoreceptor antagonists, subsequent encounter -T446X5S Adverse effect of alpha-adrenoreceptor antagonists, sequela -T446X6A Underdosing of alpha-adrenoreceptor antagonists, initial encounter -T446X6D Underdosing of alpha-adrenoreceptor antagonists, subsequent encounter -T446X6S Underdosing of alpha-adrenoreceptor antagonists, sequela -T447X1A Poisoning by beta-adrenoreceptor antagonists, accidental (unintentional), initial encounter -T447X1D Poisoning by beta-adrenoreceptor antagonists, accidental (unintentional), subsequent encounter -T447X1S Poisoning by beta-adrenoreceptor antagonists, accidental (unintentional), sequela -T447X2A Poisoning by beta-adrenoreceptor antagonists, intentional self-harm, initial encounter -T447X2D Poisoning by beta-adrenoreceptor antagonists, intentional self-harm, subsequent encounter -T447X2S Poisoning by beta-adrenoreceptor antagonists, intentional self-harm, sequela -T447X3A Poisoning by beta-adrenoreceptor antagonists, assault, initial encounter -T447X3D Poisoning by beta-adrenoreceptor antagonists, assault, subsequent encounter -T447X3S Poisoning by beta-adrenoreceptor antagonists, assault, sequela -T447X4A Poisoning by beta-adrenoreceptor antagonists, undetermined, initial encounter -T447X4D Poisoning by beta-adrenoreceptor antagonists, undetermined, subsequent encounter -T447X4S Poisoning by beta-adrenoreceptor antagonists, undetermined, sequela -T447X5A Adverse effect of beta-adrenoreceptor antagonists, initial encounter -T447X5D Adverse effect of beta-adrenoreceptor antagonists, subsequent encounter -T447X5S Adverse effect of beta-adrenoreceptor antagonists, sequela -T447X6A Underdosing of beta-adrenoreceptor antagonists, initial encounter -T447X6D Underdosing of beta-adrenoreceptor antagonists, subsequent encounter -T447X6S Underdosing of beta-adrenoreceptor antagonists, sequela -T448X1A Poisoning by centrally-acting and adrenergic-neuron-blocking agents, accidental (unintentional), initial encounter -T448X1D Poisoning by centrally-acting and adrenergic-neuron-blocking agents, accidental (unintentional), subsequent encounter -T448X1S Poisoning by centrally-acting and adrenergic-neuron-blocking agents, accidental (unintentional), sequela -T448X2A Poisoning by centrally-acting and adrenergic-neuron-blocking agents, intentional self-harm, initial encounter -T448X2D Poisoning by centrally-acting and adrenergic-neuron-blocking agents, intentional self-harm, subsequent encounter -T448X2S Poisoning by centrally-acting and adrenergic-neuron-blocking agents, intentional self-harm, sequela -T448X3A Poisoning by centrally-acting and adrenergic-neuron-blocking agents, assault, initial encounter -T448X3D Poisoning by centrally-acting and adrenergic-neuron-blocking agents, assault, subsequent encounter -T448X3S Poisoning by centrally-acting and adrenergic-neuron-blocking agents, assault, sequela -T448X4A Poisoning by centrally-acting and adrenergic-neuron-blocking agents, undetermined, initial encounter -T448X4D Poisoning by centrally-acting and adrenergic-neuron-blocking agents, undetermined, subsequent encounter -T448X4S Poisoning by centrally-acting and adrenergic-neuron-blocking agents, undetermined, sequela -T448X5A Adverse effect of centrally-acting and adrenergic-neuron-blocking agents, initial encounter -T448X5D Adverse effect of centrally-acting and adrenergic-neuron-blocking agents, subsequent encounter -T448X5S Adverse effect of centrally-acting and adrenergic-neuron-blocking agents, sequela -T448X6A Underdosing of centrally-acting and adrenergic-neuron-blocking agents, initial encounter -T448X6D Underdosing of centrally-acting and adrenergic-neuron-blocking agents, subsequent encounter -T448X6S Underdosing of centrally-acting and adrenergic-neuron-blocking agents, sequela -T44901A Poisoning by unspecified drugs primarily affecting the autonomic nervous system, accidental (unintentional), initial encounter -T44901D Poisoning by unspecified drugs primarily affecting the autonomic nervous system, accidental (unintentional), subsequent encounter -T44901S Poisoning by unspecified drugs primarily affecting the autonomic nervous system, accidental (unintentional), sequela -T44902A Poisoning by unspecified drugs primarily affecting the autonomic nervous system, intentional self-harm, initial encounter -T44902D Poisoning by unspecified drugs primarily affecting the autonomic nervous system, intentional self-harm, subsequent encounter -T44902S Poisoning by unspecified drugs primarily affecting the autonomic nervous system, intentional self-harm, sequela -T44903A Poisoning by unspecified drugs primarily affecting the autonomic nervous system, assault, initial encounter -T44903D Poisoning by unspecified drugs primarily affecting the autonomic nervous system, assault, subsequent encounter -T44903S Poisoning by unspecified drugs primarily affecting the autonomic nervous system, assault, sequela -T44904A Poisoning by unspecified drugs primarily affecting the autonomic nervous system, undetermined, initial encounter -T44904D Poisoning by unspecified drugs primarily affecting the autonomic nervous system, undetermined, subsequent encounter -T44904S Poisoning by unspecified drugs primarily affecting the autonomic nervous system, undetermined, sequela -T44905A Adverse effect of unspecified drugs primarily affecting the autonomic nervous system, initial encounter -T44905D Adverse effect of unspecified drugs primarily affecting the autonomic nervous system, subsequent encounter -T44905S Adverse effect of unspecified drugs primarily affecting the autonomic nervous system, sequela -T44906A Underdosing of unspecified drugs primarily affecting the autonomic nervous system, initial encounter -T44906D Underdosing of unspecified drugs primarily affecting the autonomic nervous system, subsequent encounter -T44906S Underdosing of unspecified drugs primarily affecting the autonomic nervous system, sequela -T44991A Poisoning by other drug primarily affecting the autonomic nervous system, accidental (unintentional), initial encounter -T44991D Poisoning by other drug primarily affecting the autonomic nervous system, accidental (unintentional), subsequent encounter -T44991S Poisoning by other drug primarily affecting the autonomic nervous system, accidental (unintentional), sequela -T44992A Poisoning by other drug primarily affecting the autonomic nervous system, intentional self-harm, initial encounter -T44992D Poisoning by other drug primarily affecting the autonomic nervous system, intentional self-harm, subsequent encounter -T44992S Poisoning by other drug primarily affecting the autonomic nervous system, intentional self-harm, sequela -T44993A Poisoning by other drug primarily affecting the autonomic nervous system, assault, initial encounter -T44993D Poisoning by other drug primarily affecting the autonomic nervous system, assault, subsequent encounter -T44993S Poisoning by other drug primarily affecting the autonomic nervous system, assault, sequela -T44994A Poisoning by other drug primarily affecting the autonomic nervous system, undetermined, initial encounter -T44994D Poisoning by other drug primarily affecting the autonomic nervous system, undetermined, subsequent encounter -T44994S Poisoning by other drug primarily affecting the autonomic nervous system, undetermined, sequela -T44995A Adverse effect of other drug primarily affecting the autonomic nervous system, initial encounter -T44995D Adverse effect of other drug primarily affecting the autonomic nervous system, subsequent encounter -T44995S Adverse effect of other drug primarily affecting the autonomic nervous system, sequela -T44996A Underdosing of other drug primarily affecting the autonomic nervous system, initial encounter -T44996D Underdosing of other drug primarily affecting the autonomic nervous system, subsequent encounter -T44996S Underdosing of other drug primarily affecting the autonomic nervous system, sequela -T450X1A Poisoning by antiallergic and antiemetic drugs, accidental (unintentional), initial encounter -T450X1D Poisoning by antiallergic and antiemetic drugs, accidental (unintentional), subsequent encounter -T450X1S Poisoning by antiallergic and antiemetic drugs, accidental (unintentional), sequela -T450X2A Poisoning by antiallergic and antiemetic drugs, intentional self-harm, initial encounter -T450X2D Poisoning by antiallergic and antiemetic drugs, intentional self-harm, subsequent encounter -T450X2S Poisoning by antiallergic and antiemetic drugs, intentional self-harm, sequela -T450X3A Poisoning by antiallergic and antiemetic drugs, assault, initial encounter -T450X3D Poisoning by antiallergic and antiemetic drugs, assault, subsequent encounter -T450X3S Poisoning by antiallergic and antiemetic drugs, assault, sequela -T450X4A Poisoning by antiallergic and antiemetic drugs, undetermined, initial encounter -T450X4D Poisoning by antiallergic and antiemetic drugs, undetermined, subsequent encounter -T450X4S Poisoning by antiallergic and antiemetic drugs, undetermined, sequela -T450X5A Adverse effect of antiallergic and antiemetic drugs, initial encounter -T450X5D Adverse effect of antiallergic and antiemetic drugs, subsequent encounter -T450X5S Adverse effect of antiallergic and antiemetic drugs, sequela -T450X6A Underdosing of antiallergic and antiemetic drugs, initial encounter -T450X6D Underdosing of antiallergic and antiemetic drugs, subsequent encounter -T450X6S Underdosing of antiallergic and antiemetic drugs, sequela -T451X1A Poisoning by antineoplastic and immunosuppressive drugs, accidental (unintentional), initial encounter -T451X1D Poisoning by antineoplastic and immunosuppressive drugs, accidental (unintentional), subsequent encounter -T451X1S Poisoning by antineoplastic and immunosuppressive drugs, accidental (unintentional), sequela -T451X2A Poisoning by antineoplastic and immunosuppressive drugs, intentional self-harm, initial encounter -T451X2D Poisoning by antineoplastic and immunosuppressive drugs, intentional self-harm, subsequent encounter -T451X2S Poisoning by antineoplastic and immunosuppressive drugs, intentional self-harm, sequela -T451X3A Poisoning by antineoplastic and immunosuppressive drugs, assault, initial encounter -T451X3D Poisoning by antineoplastic and immunosuppressive drugs, assault, subsequent encounter -T451X3S Poisoning by antineoplastic and immunosuppressive drugs, assault, sequela -T451X4A Poisoning by antineoplastic and immunosuppressive drugs, undetermined, initial encounter -T451X4D Poisoning by antineoplastic and immunosuppressive drugs, undetermined, subsequent encounter -T451X4S Poisoning by antineoplastic and immunosuppressive drugs, undetermined, sequela -T451X5A Adverse effect of antineoplastic and immunosuppressive drugs, initial encounter -T451X5D Adverse effect of antineoplastic and immunosuppressive drugs, subsequent encounter -T451X5S Adverse effect of antineoplastic and immunosuppressive drugs, sequela -T451X6A Underdosing of antineoplastic and immunosuppressive drugs, initial encounter -T451X6D Underdosing of antineoplastic and immunosuppressive drugs, subsequent encounter -T451X6S Underdosing of antineoplastic and immunosuppressive drugs, sequela -T452X1A Poisoning by vitamins, accidental (unintentional), initial encounter -T452X1D Poisoning by vitamins, accidental (unintentional), subsequent encounter -T452X1S Poisoning by vitamins, accidental (unintentional), sequela -T452X2A Poisoning by vitamins, intentional self-harm, initial encounter -T452X2D Poisoning by vitamins, intentional self-harm, subsequent encounter -T452X2S Poisoning by vitamins, intentional self-harm, sequela -T452X3A Poisoning by vitamins, assault, initial encounter -T452X3D Poisoning by vitamins, assault, subsequent encounter -T452X3S Poisoning by vitamins, assault, sequela -T452X4A Poisoning by vitamins, undetermined, initial encounter -T452X4D Poisoning by vitamins, undetermined, subsequent encounter -T452X4S Poisoning by vitamins, undetermined, sequela -T452X5A Adverse effect of vitamins, initial encounter -T452X5D Adverse effect of vitamins, subsequent encounter -T452X5S Adverse effect of vitamins, sequela -T452X6A Underdosing of vitamins, initial encounter -T452X6D Underdosing of vitamins, subsequent encounter -T452X6S Underdosing of vitamins, sequela -T453X1A Poisoning by enzymes, accidental (unintentional), initial encounter -T453X1D Poisoning by enzymes, accidental (unintentional), subsequent encounter -T453X1S Poisoning by enzymes, accidental (unintentional), sequela -T453X2A Poisoning by enzymes, intentional self-harm, initial encounter -T453X2D Poisoning by enzymes, intentional self-harm, subsequent encounter -T453X2S Poisoning by enzymes, intentional self-harm, sequela -T453X3A Poisoning by enzymes, assault, initial encounter -T453X3D Poisoning by enzymes, assault, subsequent encounter -T453X3S Poisoning by enzymes, assault, sequela -T453X4A Poisoning by enzymes, undetermined, initial encounter -T453X4D Poisoning by enzymes, undetermined, subsequent encounter -T453X4S Poisoning by enzymes, undetermined, sequela -T453X5A Adverse effect of enzymes, initial encounter -T453X5D Adverse effect of enzymes, subsequent encounter -T453X5S Adverse effect of enzymes, sequela -T453X6A Underdosing of enzymes, initial encounter -T453X6D Underdosing of enzymes, subsequent encounter -T453X6S Underdosing of enzymes, sequela -T454X1A Poisoning by iron and its compounds, accidental (unintentional), initial encounter -T454X1D Poisoning by iron and its compounds, accidental (unintentional), subsequent encounter -T454X1S Poisoning by iron and its compounds, accidental (unintentional), sequela -T454X2A Poisoning by iron and its compounds, intentional self-harm, initial encounter -T454X2D Poisoning by iron and its compounds, intentional self-harm, subsequent encounter -T454X2S Poisoning by iron and its compounds, intentional self-harm, sequela -T454X3A Poisoning by iron and its compounds, assault, initial encounter -T454X3D Poisoning by iron and its compounds, assault, subsequent encounter -T454X3S Poisoning by iron and its compounds, assault, sequela -T454X4A Poisoning by iron and its compounds, undetermined, initial encounter -T454X4D Poisoning by iron and its compounds, undetermined, subsequent encounter -T454X4S Poisoning by iron and its compounds, undetermined, sequela -T454X5A Adverse effect of iron and its compounds, initial encounter -T454X5D Adverse effect of iron and its compounds, subsequent encounter -T454X5S Adverse effect of iron and its compounds, sequela -T454X6A Underdosing of iron and its compounds, initial encounter -T454X6D Underdosing of iron and its compounds, subsequent encounter -T454X6S Underdosing of iron and its compounds, sequela -T45511A Poisoning by anticoagulants, accidental (unintentional), initial encounter -T45511D Poisoning by anticoagulants, accidental (unintentional), subsequent encounter -T45511S Poisoning by anticoagulants, accidental (unintentional), sequela -T45512A Poisoning by anticoagulants, intentional self-harm, initial encounter -T45512D Poisoning by anticoagulants, intentional self-harm, subsequent encounter -T45512S Poisoning by anticoagulants, intentional self-harm, sequela -T45513A Poisoning by anticoagulants, assault, initial encounter -T45513D Poisoning by anticoagulants, assault, subsequent encounter -T45513S Poisoning by anticoagulants, assault, sequela -T45514A Poisoning by anticoagulants, undetermined, initial encounter -T45514D Poisoning by anticoagulants, undetermined, subsequent encounter -T45514S Poisoning by anticoagulants, undetermined, sequela -T45515A Adverse effect of anticoagulants, initial encounter -T45515D Adverse effect of anticoagulants, subsequent encounter -T45515S Adverse effect of anticoagulants, sequela -T45516A Underdosing of anticoagulants, initial encounter -T45516D Underdosing of anticoagulants, subsequent encounter -T45516S Underdosing of anticoagulants, sequela -T45521A Poisoning by antithrombotic drugs, accidental (unintentional), initial encounter -T45521D Poisoning by antithrombotic drugs, accidental (unintentional), subsequent encounter -T45521S Poisoning by antithrombotic drugs, accidental (unintentional), sequela -T45522A Poisoning by antithrombotic drugs, intentional self-harm, initial encounter -T45522D Poisoning by antithrombotic drugs, intentional self-harm, subsequent encounter -T45522S Poisoning by antithrombotic drugs, intentional self-harm, sequela -T45523A Poisoning by antithrombotic drugs, assault, initial encounter -T45523D Poisoning by antithrombotic drugs, assault, subsequent encounter -T45523S Poisoning by antithrombotic drugs, assault, sequela -T45524A Poisoning by antithrombotic drugs, undetermined, initial encounter -T45524D Poisoning by antithrombotic drugs, undetermined, subsequent encounter -T45524S Poisoning by antithrombotic drugs, undetermined, sequela -T45525A Adverse effect of antithrombotic drugs, initial encounter -T45525D Adverse effect of antithrombotic drugs, subsequent encounter -T45525S Adverse effect of antithrombotic drugs, sequela -T45526A Underdosing of antithrombotic drugs, initial encounter -T45526D Underdosing of antithrombotic drugs, subsequent encounter -T45526S Underdosing of antithrombotic drugs, sequela -T45601A Poisoning by unspecified fibrinolysis-affecting drugs, accidental (unintentional), initial encounter -T45601D Poisoning by unspecified fibrinolysis-affecting drugs, accidental (unintentional), subsequent encounter -T45601S Poisoning by unspecified fibrinolysis-affecting drugs, accidental (unintentional), sequela -T45602A Poisoning by unspecified fibrinolysis-affecting drugs, intentional self-harm, initial encounter -T45602D Poisoning by unspecified fibrinolysis-affecting drugs, intentional self-harm, subsequent encounter -T45602S Poisoning by unspecified fibrinolysis-affecting drugs, intentional self-harm, sequela -T45603A Poisoning by unspecified fibrinolysis-affecting drugs, assault, initial encounter -T45603D Poisoning by unspecified fibrinolysis-affecting drugs, assault, subsequent encounter -T45603S Poisoning by unspecified fibrinolysis-affecting drugs, assault, sequela -T45604A Poisoning by unspecified fibrinolysis-affecting drugs, undetermined, initial encounter -T45604D Poisoning by unspecified fibrinolysis-affecting drugs, undetermined, subsequent encounter -T45604S Poisoning by unspecified fibrinolysis-affecting drugs, undetermined, sequela -T45605A Adverse effect of unspecified fibrinolysis-affecting drugs, initial encounter -T45605D Adverse effect of unspecified fibrinolysis-affecting drugs, subsequent encounter -T45605S Adverse effect of unspecified fibrinolysis-affecting drugs, sequela -T45606A Underdosing of unspecified fibrinolysis-affecting drugs, initial encounter -T45606D Underdosing of unspecified fibrinolysis-affecting drugs, subsequent encounter -T45606S Underdosing of unspecified fibrinolysis-affecting drugs, sequela -T45611A Poisoning by thrombolytic drug, accidental (unintentional), initial encounter -T45611D Poisoning by thrombolytic drug, accidental (unintentional), subsequent encounter -T45611S Poisoning by thrombolytic drug, accidental (unintentional), sequela -T45612A Poisoning by thrombolytic drug, intentional self-harm, initial encounter -T45612D Poisoning by thrombolytic drug, intentional self-harm, subsequent encounter -T45612S Poisoning by thrombolytic drug, intentional self-harm, sequela -T45613A Poisoning by thrombolytic drug, assault, initial encounter -T45613D Poisoning by thrombolytic drug, assault, subsequent encounter -T45613S Poisoning by thrombolytic drug, assault, sequela -T45614A Poisoning by thrombolytic drug, undetermined, initial encounter -T45614D Poisoning by thrombolytic drug, undetermined, subsequent encounter -T45614S Poisoning by thrombolytic drug, undetermined, sequela -T45615A Adverse effect of thrombolytic drugs, initial encounter -T45615D Adverse effect of thrombolytic drugs, subsequent encounter -T45615S Adverse effect of thrombolytic drugs, sequela -T45616A Underdosing of thrombolytic drugs, initial encounter -T45616D Underdosing of thrombolytic drugs, subsequent encounter -T45616S Underdosing of thrombolytic drugs, sequela -T45621A Poisoning by hemostatic drug, accidental (unintentional), initial encounter -T45621D Poisoning by hemostatic drug, accidental (unintentional), subsequent encounter -T45621S Poisoning by hemostatic drug, accidental (unintentional), sequela -T45622A Poisoning by hemostatic drug, intentional self-harm, initial encounter -T45622D Poisoning by hemostatic drug, intentional self-harm, subsequent encounter -T45622S Poisoning by hemostatic drug, intentional self-harm, sequela -T45623A Poisoning by hemostatic drug, assault, initial encounter -T45623D Poisoning by hemostatic drug, assault, subsequent encounter -T45623S Poisoning by hemostatic drug, assault, sequela -T45624A Poisoning by hemostatic drug, undetermined, initial encounter -T45624D Poisoning by hemostatic drug, undetermined, subsequent encounter -T45624S Poisoning by hemostatic drug, undetermined, sequela -T45625A Adverse effect of hemostatic drug, initial encounter -T45625D Adverse effect of hemostatic drug, subsequent encounter -T45625S Adverse effect of hemostatic drug, sequela -T45626A Underdosing of hemostatic drugs, initial encounter -T45626D Underdosing of hemostatic drugs, subsequent encounter -T45626S Underdosing of hemostatic drugs, sequela -T45691A Poisoning by other fibrinolysis-affecting drugs, accidental (unintentional), initial encounter -T45691D Poisoning by other fibrinolysis-affecting drugs, accidental (unintentional), subsequent encounter -T45691S Poisoning by other fibrinolysis-affecting drugs, accidental (unintentional), sequela -T45692A Poisoning by other fibrinolysis-affecting drugs, intentional self-harm, initial encounter -T45692D Poisoning by other fibrinolysis-affecting drugs, intentional self-harm, subsequent encounter -T45692S Poisoning by other fibrinolysis-affecting drugs, intentional self-harm, sequela -T45693A Poisoning by other fibrinolysis-affecting drugs, assault, initial encounter -T45693D Poisoning by other fibrinolysis-affecting drugs, assault, subsequent encounter -T45693S Poisoning by other fibrinolysis-affecting drugs, assault, sequela -T45694A Poisoning by other fibrinolysis-affecting drugs, undetermined, initial encounter -T45694D Poisoning by other fibrinolysis-affecting drugs, undetermined, subsequent encounter -T45694S Poisoning by other fibrinolysis-affecting drugs, undetermined, sequela -T45695A Adverse effect of other fibrinolysis-affecting drugs, initial encounter -T45695D Adverse effect of other fibrinolysis-affecting drugs, subsequent encounter -T45695S Adverse effect of other fibrinolysis-affecting drugs, sequela -T45696A Underdosing of other fibrinolysis-affecting drugs, initial encounter -T45696D Underdosing of other fibrinolysis-affecting drugs, subsequent encounter -T45696S Underdosing of other fibrinolysis-affecting drugs, sequela -T457X1A Poisoning by anticoagulant antagonists, vitamin K and other coagulants, accidental (unintentional), initial encounter -T457X1D Poisoning by anticoagulant antagonists, vitamin K and other coagulants, accidental (unintentional), subsequent encounter -T457X1S Poisoning by anticoagulant antagonists, vitamin K and other coagulants, accidental (unintentional), sequela -T457X2A Poisoning by anticoagulant antagonists, vitamin K and other coagulants, intentional self-harm, initial encounter -T457X2D Poisoning by anticoagulant antagonists, vitamin K and other coagulants, intentional self-harm, subsequent encounter -T457X2S Poisoning by anticoagulant antagonists, vitamin K and other coagulants, intentional self-harm, sequela -T457X3A Poisoning by anticoagulant antagonists, vitamin K and other coagulants, assault, initial encounter -T457X3D Poisoning by anticoagulant antagonists, vitamin K and other coagulants, assault, subsequent encounter -T457X3S Poisoning by anticoagulant antagonists, vitamin K and other coagulants, assault, sequela -T457X4A Poisoning by anticoagulant antagonists, vitamin K and other coagulants, undetermined, initial encounter -T457X4D Poisoning by anticoagulant antagonists, vitamin K and other coagulants, undetermined, subsequent encounter -T457X4S Poisoning by anticoagulant antagonists, vitamin K and other coagulants, undetermined, sequela -T457X5A Adverse effect of anticoagulant antagonists, vitamin K and other coagulants, initial encounter -T457X5D Adverse effect of anticoagulant antagonists, vitamin K and other coagulants, subsequent encounter -T457X5S Adverse effect of anticoagulant antagonists, vitamin K and other coagulants, sequela -T457X6A Underdosing of anticoagulant antagonist, vitamin K and other coagulants, initial encounter -T457X6D Underdosing of anticoagulant antagonist, vitamin K and other coagulants, subsequent encounter -T457X6S Underdosing of anticoagulant antagonist, vitamin K and other coagulants, sequela -T458X1A Poisoning by other primarily systemic and hematological agents, accidental (unintentional), initial encounter -T458X1D Poisoning by other primarily systemic and hematological agents, accidental (unintentional), subsequent encounter -T458X1S Poisoning by other primarily systemic and hematological agents, accidental (unintentional), sequela -T458X2A Poisoning by other primarily systemic and hematological agents, intentional self-harm, initial encounter -T458X2D Poisoning by other primarily systemic and hematological agents, intentional self-harm, subsequent encounter -T458X2S Poisoning by other primarily systemic and hematological agents, intentional self-harm, sequela -T458X3A Poisoning by other primarily systemic and hematological agents, assault, initial encounter -T458X3D Poisoning by other primarily systemic and hematological agents, assault, subsequent encounter -T458X3S Poisoning by other primarily systemic and hematological agents, assault, sequela -T458X4A Poisoning by other primarily systemic and hematological agents, undetermined, initial encounter -T458X4D Poisoning by other primarily systemic and hematological agents, undetermined, subsequent encounter -T458X4S Poisoning by other primarily systemic and hematological agents, undetermined, sequela -T458X5A Adverse effect of other primarily systemic and hematological agents, initial encounter -T458X5D Adverse effect of other primarily systemic and hematological agents, subsequent encounter -T458X5S Adverse effect of other primarily systemic and hematological agents, sequela -T458X6A Underdosing of other primarily systemic and hematological agents, initial encounter -T458X6D Underdosing of other primarily systemic and hematological agents, subsequent encounter -T458X6S Underdosing of other primarily systemic and hematological agents, sequela -T4591XA Poisoning by unspecified primarily systemic and hematological agent, accidental (unintentional), initial encounter -T4591XD Poisoning by unspecified primarily systemic and hematological agent, accidental (unintentional), subsequent encounter -T4591XS Poisoning by unspecified primarily systemic and hematological agent, accidental (unintentional), sequela -T4592XA Poisoning by unspecified primarily systemic and hematological agent, intentional self-harm, initial encounter -T4592XD Poisoning by unspecified primarily systemic and hematological agent, intentional self-harm, subsequent encounter -T4592XS Poisoning by unspecified primarily systemic and hematological agent, intentional self-harm, sequela -T4593XA Poisoning by unspecified primarily systemic and hematological agent, assault, initial encounter -T4593XD Poisoning by unspecified primarily systemic and hematological agent, assault, subsequent encounter -T4593XS Poisoning by unspecified primarily systemic and hematological agent, assault, sequela -T4594XA Poisoning by unspecified primarily systemic and hematological agent, undetermined, initial encounter -T4594XD Poisoning by unspecified primarily systemic and hematological agent, undetermined, subsequent encounter -T4594XS Poisoning by unspecified primarily systemic and hematological agent, undetermined, sequela -T4595XA Adverse effect of unspecified primarily systemic and hematological agent, initial encounter -T4595XD Adverse effect of unspecified primarily systemic and hematological agent, subsequent encounter -T4595XS Adverse effect of unspecified primarily systemic and hematological agent, sequela -T4596XA Underdosing of unspecified primarily systemic and hematological agent, initial encounter -T4596XD Underdosing of unspecified primarily systemic and hematological agent, subsequent encounter -T4596XS Underdosing of unspecified primarily systemic and hematological agent, sequela -T460X1A Poisoning by cardiac-stimulant glycosides and drugs of similar action, accidental (unintentional), initial encounter -T460X1D Poisoning by cardiac-stimulant glycosides and drugs of similar action, accidental (unintentional), subsequent encounter -T460X1S Poisoning by cardiac-stimulant glycosides and drugs of similar action, accidental (unintentional), sequela -T460X2A Poisoning by cardiac-stimulant glycosides and drugs of similar action, intentional self-harm, initial encounter -T460X2D Poisoning by cardiac-stimulant glycosides and drugs of similar action, intentional self-harm, subsequent encounter -T460X2S Poisoning by cardiac-stimulant glycosides and drugs of similar action, intentional self-harm, sequela -T460X3A Poisoning by cardiac-stimulant glycosides and drugs of similar action, assault, initial encounter -T460X3D Poisoning by cardiac-stimulant glycosides and drugs of similar action, assault, subsequent encounter -T460X3S Poisoning by cardiac-stimulant glycosides and drugs of similar action, assault, sequela -T460X4A Poisoning by cardiac-stimulant glycosides and drugs of similar action, undetermined, initial encounter -T460X4D Poisoning by cardiac-stimulant glycosides and drugs of similar action, undetermined, subsequent encounter -T460X4S Poisoning by cardiac-stimulant glycosides and drugs of similar action, undetermined, sequela -T460X5A Adverse effect of cardiac-stimulant glycosides and drugs of similar action, initial encounter -T460X5D Adverse effect of cardiac-stimulant glycosides and drugs of similar action, subsequent encounter -T460X5S Adverse effect of cardiac-stimulant glycosides and drugs of similar action, sequela -T460X6A Underdosing of cardiac-stimulant glycosides and drugs of similar action, initial encounter -T460X6D Underdosing of cardiac-stimulant glycosides and drugs of similar action, subsequent encounter -T460X6S Underdosing of cardiac-stimulant glycosides and drugs of similar action, sequela -T461X1A Poisoning by calcium-channel blockers, accidental (unintentional), initial encounter -T461X1D Poisoning by calcium-channel blockers, accidental (unintentional), subsequent encounter -T461X1S Poisoning by calcium-channel blockers, accidental (unintentional), sequela -T461X2A Poisoning by calcium-channel blockers, intentional self-harm, initial encounter -T461X2D Poisoning by calcium-channel blockers, intentional self-harm, subsequent encounter -T461X2S Poisoning by calcium-channel blockers, intentional self-harm, sequela -T461X3A Poisoning by calcium-channel blockers, assault, initial encounter -T461X3D Poisoning by calcium-channel blockers, assault, subsequent encounter -T461X3S Poisoning by calcium-channel blockers, assault, sequela -T461X4A Poisoning by calcium-channel blockers, undetermined, initial encounter -T461X4D Poisoning by calcium-channel blockers, undetermined, subsequent encounter -T461X4S Poisoning by calcium-channel blockers, undetermined, sequela -T461X5A Adverse effect of calcium-channel blockers, initial encounter -T461X5D Adverse effect of calcium-channel blockers, subsequent encounter -T461X5S Adverse effect of calcium-channel blockers, sequela -T461X6A Underdosing of calcium-channel blockers, initial encounter -T461X6D Underdosing of calcium-channel blockers, subsequent encounter -T461X6S Underdosing of calcium-channel blockers, sequela -T462X1A Poisoning by other antidysrhythmic drugs, accidental (unintentional), initial encounter -T462X1D Poisoning by other antidysrhythmic drugs, accidental (unintentional), subsequent encounter -T462X1S Poisoning by other antidysrhythmic drugs, accidental (unintentional), sequela -T462X2A Poisoning by other antidysrhythmic drugs, intentional self-harm, initial encounter -T462X2D Poisoning by other antidysrhythmic drugs, intentional self-harm, subsequent encounter -T462X2S Poisoning by other antidysrhythmic drugs, intentional self-harm, sequela -T462X3A Poisoning by other antidysrhythmic drugs, assault, initial encounter -T462X3D Poisoning by other antidysrhythmic drugs, assault, subsequent encounter -T462X3S Poisoning by other antidysrhythmic drugs, assault, sequela -T462X4A Poisoning by other antidysrhythmic drugs, undetermined, initial encounter -T462X4D Poisoning by other antidysrhythmic drugs, undetermined, subsequent encounter -T462X4S Poisoning by other antidysrhythmic drugs, undetermined, sequela -T462X5A Adverse effect of other antidysrhythmic drugs, initial encounter -T462X5D Adverse effect of other antidysrhythmic drugs, subsequent encounter -T462X5S Adverse effect of other antidysrhythmic drugs, sequela -T462X6A Underdosing of other antidysrhythmic drugs, initial encounter -T462X6D Underdosing of other antidysrhythmic drugs, subsequent encounter -T462X6S Underdosing of other antidysrhythmic drugs, sequela -T463X1A Poisoning by coronary vasodilators, accidental (unintentional), initial encounter -T463X1D Poisoning by coronary vasodilators, accidental (unintentional), subsequent encounter -T463X1S Poisoning by coronary vasodilators, accidental (unintentional), sequela -T463X2A Poisoning by coronary vasodilators, intentional self-harm, initial encounter -T463X2D Poisoning by coronary vasodilators, intentional self-harm, subsequent encounter -T463X2S Poisoning by coronary vasodilators, intentional self-harm, sequela -T463X3A Poisoning by coronary vasodilators, assault, initial encounter -T463X3D Poisoning by coronary vasodilators, assault, subsequent encounter -T463X3S Poisoning by coronary vasodilators, assault, sequela -T463X4A Poisoning by coronary vasodilators, undetermined, initial encounter -T463X4D Poisoning by coronary vasodilators, undetermined, subsequent encounter -T463X4S Poisoning by coronary vasodilators, undetermined, sequela -T463X5A Adverse effect of coronary vasodilators, initial encounter -T463X5D Adverse effect of coronary vasodilators, subsequent encounter -T463X5S Adverse effect of coronary vasodilators, sequela -T463X6A Underdosing of coronary vasodilators, initial encounter -T463X6D Underdosing of coronary vasodilators, subsequent encounter -T463X6S Underdosing of coronary vasodilators, sequela -T464X1A Poisoning by angiotensin-converting-enzyme inhibitors, accidental (unintentional), initial encounter -T464X1D Poisoning by angiotensin-converting-enzyme inhibitors, accidental (unintentional), subsequent encounter -T464X1S Poisoning by angiotensin-converting-enzyme inhibitors, accidental (unintentional), sequela -T464X2A Poisoning by angiotensin-converting-enzyme inhibitors, intentional self-harm, initial encounter -T464X2D Poisoning by angiotensin-converting-enzyme inhibitors, intentional self-harm, subsequent encounter -T464X2S Poisoning by angiotensin-converting-enzyme inhibitors, intentional self-harm, sequela -T464X3A Poisoning by angiotensin-converting-enzyme inhibitors, assault, initial encounter -T464X3D Poisoning by angiotensin-converting-enzyme inhibitors, assault, subsequent encounter -T464X3S Poisoning by angiotensin-converting-enzyme inhibitors, assault, sequela -T464X4A Poisoning by angiotensin-converting-enzyme inhibitors, undetermined, initial encounter -T464X4D Poisoning by angiotensin-converting-enzyme inhibitors, undetermined, subsequent encounter -T464X4S Poisoning by angiotensin-converting-enzyme inhibitors, undetermined, sequela -T464X5A Adverse effect of angiotensin-converting-enzyme inhibitors, initial encounter -T464X5D Adverse effect of angiotensin-converting-enzyme inhibitors, subsequent encounter -T464X5S Adverse effect of angiotensin-converting-enzyme inhibitors, sequela -T464X6A Underdosing of angiotensin-converting-enzyme inhibitors, initial encounter -T464X6D Underdosing of angiotensin-converting-enzyme inhibitors, subsequent encounter -T464X6S Underdosing of angiotensin-converting-enzyme inhibitors, sequela -T465X1A Poisoning by other antihypertensive drugs, accidental (unintentional), initial encounter -T465X1D Poisoning by other antihypertensive drugs, accidental (unintentional), subsequent encounter -T465X1S Poisoning by other antihypertensive drugs, accidental (unintentional), sequela -T465X2A Poisoning by other antihypertensive drugs, intentional self-harm, initial encounter -T465X2D Poisoning by other antihypertensive drugs, intentional self-harm, subsequent encounter -T465X2S Poisoning by other antihypertensive drugs, intentional self-harm, sequela -T465X3A Poisoning by other antihypertensive drugs, assault, initial encounter -T465X3D Poisoning by other antihypertensive drugs, assault, subsequent encounter -T465X3S Poisoning by other antihypertensive drugs, assault, sequela -T465X4A Poisoning by other antihypertensive drugs, undetermined, initial encounter -T465X4D Poisoning by other antihypertensive drugs, undetermined, subsequent encounter -T465X4S Poisoning by other antihypertensive drugs, undetermined, sequela -T465X5A Adverse effect of other antihypertensive drugs, initial encounter -T465X5D Adverse effect of other antihypertensive drugs, subsequent encounter -T465X5S Adverse effect of other antihypertensive drugs, sequela -T465X6A Underdosing of other antihypertensive drugs, initial encounter -T465X6D Underdosing of other antihypertensive drugs, subsequent encounter -T465X6S Underdosing of other antihypertensive drugs, sequela -T466X1A Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, accidental (unintentional), initial encounter -T466X1D Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, accidental (unintentional), subsequent encounter -T466X1S Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, accidental (unintentional), sequela -T466X2A Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, intentional self-harm, initial encounter -T466X2D Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, intentional self-harm, subsequent encounter -T466X2S Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, intentional self-harm, sequela -T466X3A Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, assault, initial encounter -T466X3D Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, assault, subsequent encounter -T466X3S Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, assault, sequela -T466X4A Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, undetermined, initial encounter -T466X4D Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, undetermined, subsequent encounter -T466X4S Poisoning by antihyperlipidemic and antiarteriosclerotic drugs, undetermined, sequela -T466X5A Adverse effect of antihyperlipidemic and antiarteriosclerotic drugs, initial encounter -T466X5D Adverse effect of antihyperlipidemic and antiarteriosclerotic drugs, subsequent encounter -T466X5S Adverse effect of antihyperlipidemic and antiarteriosclerotic drugs, sequela -T466X6A Underdosing of antihyperlipidemic and antiarteriosclerotic drugs, initial encounter -T466X6D Underdosing of antihyperlipidemic and antiarteriosclerotic drugs, subsequent encounter -T466X6S Underdosing of antihyperlipidemic and antiarteriosclerotic drugs, sequela -T467X1A Poisoning by peripheral vasodilators, accidental (unintentional), initial encounter -T467X1D Poisoning by peripheral vasodilators, accidental (unintentional), subsequent encounter -T467X1S Poisoning by peripheral vasodilators, accidental (unintentional), sequela -T467X2A Poisoning by peripheral vasodilators, intentional self-harm, initial encounter -T467X2D Poisoning by peripheral vasodilators, intentional self-harm, subsequent encounter -T467X2S Poisoning by peripheral vasodilators, intentional self-harm, sequela -T467X3A Poisoning by peripheral vasodilators, assault, initial encounter -T467X3D Poisoning by peripheral vasodilators, assault, subsequent encounter -T467X3S Poisoning by peripheral vasodilators, assault, sequela -T467X4A Poisoning by peripheral vasodilators, undetermined, initial encounter -T467X4D Poisoning by peripheral vasodilators, undetermined, subsequent encounter -T467X4S Poisoning by peripheral vasodilators, undetermined, sequela -T467X5A Adverse effect of peripheral vasodilators, initial encounter -T467X5D Adverse effect of peripheral vasodilators, subsequent encounter -T467X5S Adverse effect of peripheral vasodilators, sequela -T467X6A Underdosing of peripheral vasodilators, initial encounter -T467X6D Underdosing of peripheral vasodilators, subsequent encounter -T467X6S Underdosing of peripheral vasodilators, sequela -T468X1A Poisoning by antivaricose drugs, including sclerosing agents, accidental (unintentional), initial encounter -T468X1D Poisoning by antivaricose drugs, including sclerosing agents, accidental (unintentional), subsequent encounter -T468X1S Poisoning by antivaricose drugs, including sclerosing agents, accidental (unintentional), sequela -T468X2A Poisoning by antivaricose drugs, including sclerosing agents, intentional self-harm, initial encounter -T468X2D Poisoning by antivaricose drugs, including sclerosing agents, intentional self-harm, subsequent encounter -T468X2S Poisoning by antivaricose drugs, including sclerosing agents, intentional self-harm, sequela -T468X3A Poisoning by antivaricose drugs, including sclerosing agents, assault, initial encounter -T468X3D Poisoning by antivaricose drugs, including sclerosing agents, assault, subsequent encounter -T468X3S Poisoning by antivaricose drugs, including sclerosing agents, assault, sequela -T468X4A Poisoning by antivaricose drugs, including sclerosing agents, undetermined, initial encounter -T468X4D Poisoning by antivaricose drugs, including sclerosing agents, undetermined, subsequent encounter -T468X4S Poisoning by antivaricose drugs, including sclerosing agents, undetermined, sequela -T468X5A Adverse effect of antivaricose drugs, including sclerosing agents, initial encounter -T468X5D Adverse effect of antivaricose drugs, including sclerosing agents, subsequent encounter -T468X5S Adverse effect of antivaricose drugs, including sclerosing agents, sequela -T468X6A Underdosing of antivaricose drugs, including sclerosing agents, initial encounter -T468X6D Underdosing of antivaricose drugs, including sclerosing agents, subsequent encounter -T468X6S Underdosing of antivaricose drugs, including sclerosing agents, sequela -T46901A Poisoning by unspecified agents primarily affecting the cardiovascular system, accidental (unintentional), initial encounter -T46901D Poisoning by unspecified agents primarily affecting the cardiovascular system, accidental (unintentional), subsequent encounter -T46901S Poisoning by unspecified agents primarily affecting the cardiovascular system, accidental (unintentional), sequela -T46902A Poisoning by unspecified agents primarily affecting the cardiovascular system, intentional self-harm, initial encounter -T46902D Poisoning by unspecified agents primarily affecting the cardiovascular system, intentional self-harm, subsequent encounter -T46902S Poisoning by unspecified agents primarily affecting the cardiovascular system, intentional self-harm, sequela -T46903A Poisoning by unspecified agents primarily affecting the cardiovascular system, assault, initial encounter -T46903D Poisoning by unspecified agents primarily affecting the cardiovascular system, assault, subsequent encounter -T46903S Poisoning by unspecified agents primarily affecting the cardiovascular system, assault, sequela -T46904A Poisoning by unspecified agents primarily affecting the cardiovascular system, undetermined, initial encounter -T46904D Poisoning by unspecified agents primarily affecting the cardiovascular system, undetermined, subsequent encounter -T46904S Poisoning by unspecified agents primarily affecting the cardiovascular system, undetermined, sequela -T46905A Adverse effect of unspecified agents primarily affecting the cardiovascular system, initial encounter -T46905D Adverse effect of unspecified agents primarily affecting the cardiovascular system, subsequent encounter -T46905S Adverse effect of unspecified agents primarily affecting the cardiovascular system, sequela -T46906A Underdosing of unspecified agents primarily affecting the cardiovascular system, initial encounter -T46906D Underdosing of unspecified agents primarily affecting the cardiovascular system, subsequent encounter -T46906S Underdosing of unspecified agents primarily affecting the cardiovascular system, sequela -T46991A Poisoning by other agents primarily affecting the cardiovascular system, accidental (unintentional), initial encounter -T46991D Poisoning by other agents primarily affecting the cardiovascular system, accidental (unintentional), subsequent encounter -T46991S Poisoning by other agents primarily affecting the cardiovascular system, accidental (unintentional), sequela -T46992A Poisoning by other agents primarily affecting the cardiovascular system, intentional self-harm, initial encounter -T46992D Poisoning by other agents primarily affecting the cardiovascular system, intentional self-harm, subsequent encounter -T46992S Poisoning by other agents primarily affecting the cardiovascular system, intentional self-harm, sequela -T46993A Poisoning by other agents primarily affecting the cardiovascular system, assault, initial encounter -T46993D Poisoning by other agents primarily affecting the cardiovascular system, assault, subsequent encounter -T46993S Poisoning by other agents primarily affecting the cardiovascular system, assault, sequela -T46994A Poisoning by other agents primarily affecting the cardiovascular system, undetermined, initial encounter -T46994D Poisoning by other agents primarily affecting the cardiovascular system, undetermined, subsequent encounter -T46994S Poisoning by other agents primarily affecting the cardiovascular system, undetermined, sequela -T46995A Adverse effect of other agents primarily affecting the cardiovascular system, initial encounter -T46995D Adverse effect of other agents primarily affecting the cardiovascular system, subsequent encounter -T46995S Adverse effect of other agents primarily affecting the cardiovascular system, sequela -T46996A Underdosing of other agents primarily affecting the cardiovascular system, initial encounter -T46996D Underdosing of other agents primarily affecting the cardiovascular system, subsequent encounter -T46996S Underdosing of other agents primarily affecting the cardiovascular system, sequela -T470X1A Poisoning by histamine H2-receptor blockers, accidental (unintentional), initial encounter -T470X1D Poisoning by histamine H2-receptor blockers, accidental (unintentional), subsequent encounter -T470X1S Poisoning by histamine H2-receptor blockers, accidental (unintentional), sequela -T470X2A Poisoning by histamine H2-receptor blockers, intentional self-harm, initial encounter -T470X2D Poisoning by histamine H2-receptor blockers, intentional self-harm, subsequent encounter -T470X2S Poisoning by histamine H2-receptor blockers, intentional self-harm, sequela -T470X3A Poisoning by histamine H2-receptor blockers, assault, initial encounter -T470X3D Poisoning by histamine H2-receptor blockers, assault, subsequent encounter -T470X3S Poisoning by histamine H2-receptor blockers, assault, sequela -T470X4A Poisoning by histamine H2-receptor blockers, undetermined, initial encounter -T470X4D Poisoning by histamine H2-receptor blockers, undetermined, subsequent encounter -T470X4S Poisoning by histamine H2-receptor blockers, undetermined, sequela -T470X5A Adverse effect of histamine H2-receptor blockers, initial encounter -T470X5D Adverse effect of histamine H2-receptor blockers, subsequent encounter -T470X5S Adverse effect of histamine H2-receptor blockers, sequela -T470X6A Underdosing of histamine H2-receptor blockers, initial encounter -T470X6D Underdosing of histamine H2-receptor blockers, subsequent encounter -T470X6S Underdosing of histamine H2-receptor blockers, sequela -T471X1A Poisoning by other antacids and anti-gastric-secretion drugs, accidental (unintentional), initial encounter -T471X1D Poisoning by other antacids and anti-gastric-secretion drugs, accidental (unintentional), subsequent encounter -T471X1S Poisoning by other antacids and anti-gastric-secretion drugs, accidental (unintentional), sequela -T471X2A Poisoning by other antacids and anti-gastric-secretion drugs, intentional self-harm, initial encounter -T471X2D Poisoning by other antacids and anti-gastric-secretion drugs, intentional self-harm, subsequent encounter -T471X2S Poisoning by other antacids and anti-gastric-secretion drugs, intentional self-harm, sequela -T471X3A Poisoning by other antacids and anti-gastric-secretion drugs, assault, initial encounter -T471X3D Poisoning by other antacids and anti-gastric-secretion drugs, assault, subsequent encounter -T471X3S Poisoning by other antacids and anti-gastric-secretion drugs, assault, sequela -T471X4A Poisoning by other antacids and anti-gastric-secretion drugs, undetermined, initial encounter -T471X4D Poisoning by other antacids and anti-gastric-secretion drugs, undetermined, subsequent encounter -T471X4S Poisoning by other antacids and anti-gastric-secretion drugs, undetermined, sequela -T471X5A Adverse effect of other antacids and anti-gastric-secretion drugs, initial encounter -T471X5D Adverse effect of other antacids and anti-gastric-secretion drugs, subsequent encounter -T471X5S Adverse effect of other antacids and anti-gastric-secretion drugs, sequela -T471X6A Underdosing of other antacids and anti-gastric-secretion drugs, initial encounter -T471X6D Underdosing of other antacids and anti-gastric-secretion drugs, subsequent encounter -T471X6S Underdosing of other antacids and anti-gastric-secretion drugs, sequela -T472X1A Poisoning by stimulant laxatives, accidental (unintentional), initial encounter -T472X1D Poisoning by stimulant laxatives, accidental (unintentional), subsequent encounter -T472X1S Poisoning by stimulant laxatives, accidental (unintentional), sequela -T472X2A Poisoning by stimulant laxatives, intentional self-harm, initial encounter -T472X2D Poisoning by stimulant laxatives, intentional self-harm, subsequent encounter -T472X2S Poisoning by stimulant laxatives, intentional self-harm, sequela -T472X3A Poisoning by stimulant laxatives, assault, initial encounter -T472X3D Poisoning by stimulant laxatives, assault, subsequent encounter -T472X3S Poisoning by stimulant laxatives, assault, sequela -T472X4A Poisoning by stimulant laxatives, undetermined, initial encounter -T472X4D Poisoning by stimulant laxatives, undetermined, subsequent encounter -T472X4S Poisoning by stimulant laxatives, undetermined, sequela -T472X5A Adverse effect of stimulant laxatives, initial encounter -T472X5D Adverse effect of stimulant laxatives, subsequent encounter -T472X5S Adverse effect of stimulant laxatives, sequela -T472X6A Underdosing of stimulant laxatives, initial encounter -T472X6D Underdosing of stimulant laxatives, subsequent encounter -T472X6S Underdosing of stimulant laxatives, sequela -T473X1A Poisoning by saline and osmotic laxatives, accidental (unintentional), initial encounter -T473X1D Poisoning by saline and osmotic laxatives, accidental (unintentional), subsequent encounter -T473X1S Poisoning by saline and osmotic laxatives, accidental (unintentional), sequela -T473X2A Poisoning by saline and osmotic laxatives, intentional self-harm, initial encounter -T473X2D Poisoning by saline and osmotic laxatives, intentional self-harm, subsequent encounter -T473X2S Poisoning by saline and osmotic laxatives, intentional self-harm, sequela -T473X3A Poisoning by saline and osmotic laxatives, assault, initial encounter -T473X3D Poisoning by saline and osmotic laxatives, assault, subsequent encounter -T473X3S Poisoning by saline and osmotic laxatives, assault, sequela -T473X4A Poisoning by saline and osmotic laxatives, undetermined, initial encounter -T473X4D Poisoning by saline and osmotic laxatives, undetermined, subsequent encounter -T473X4S Poisoning by saline and osmotic laxatives, undetermined, sequela -T473X5A Adverse effect of saline and osmotic laxatives, initial encounter -T473X5D Adverse effect of saline and osmotic laxatives, subsequent encounter -T473X5S Adverse effect of saline and osmotic laxatives, sequela -T473X6A Underdosing of saline and osmotic laxatives, initial encounter -T473X6D Underdosing of saline and osmotic laxatives, subsequent encounter -T473X6S Underdosing of saline and osmotic laxatives, sequela -T474X1A Poisoning by other laxatives, accidental (unintentional), initial encounter -T474X1D Poisoning by other laxatives, accidental (unintentional), subsequent encounter -T474X1S Poisoning by other laxatives, accidental (unintentional), sequela -T474X2A Poisoning by other laxatives, intentional self-harm, initial encounter -T474X2D Poisoning by other laxatives, intentional self-harm, subsequent encounter -T474X2S Poisoning by other laxatives, intentional self-harm, sequela -T474X3A Poisoning by other laxatives, assault, initial encounter -T474X3D Poisoning by other laxatives, assault, subsequent encounter -T474X3S Poisoning by other laxatives, assault, sequela -T474X4A Poisoning by other laxatives, undetermined, initial encounter -T474X4D Poisoning by other laxatives, undetermined, subsequent encounter -T474X4S Poisoning by other laxatives, undetermined, sequela -T474X5A Adverse effect of other laxatives, initial encounter -T474X5D Adverse effect of other laxatives, subsequent encounter -T474X5S Adverse effect of other laxatives, sequela -T474X6A Underdosing of other laxatives, initial encounter -T474X6D Underdosing of other laxatives, subsequent encounter -T474X6S Underdosing of other laxatives, sequela -T475X1A Poisoning by digestants, accidental (unintentional), initial encounter -T475X1D Poisoning by digestants, accidental (unintentional), subsequent encounter -T475X1S Poisoning by digestants, accidental (unintentional), sequela -T475X2A Poisoning by digestants, intentional self-harm, initial encounter -T475X2D Poisoning by digestants, intentional self-harm, subsequent encounter -T475X2S Poisoning by digestants, intentional self-harm, sequela -T475X3A Poisoning by digestants, assault, initial encounter -T475X3D Poisoning by digestants, assault, subsequent encounter -T475X3S Poisoning by digestants, assault, sequela -T475X4A Poisoning by digestants, undetermined, initial encounter -T475X4D Poisoning by digestants, undetermined, subsequent encounter -T475X4S Poisoning by digestants, undetermined, sequela -T475X5A Adverse effect of digestants, initial encounter -T475X5D Adverse effect of digestants, subsequent encounter -T475X5S Adverse effect of digestants, sequela -T475X6A Underdosing of digestants, initial encounter -T475X6D Underdosing of digestants, subsequent encounter -T475X6S Underdosing of digestants, sequela -T476X1A Poisoning by antidiarrheal drugs, accidental (unintentional), initial encounter -T476X1D Poisoning by antidiarrheal drugs, accidental (unintentional), subsequent encounter -T476X1S Poisoning by antidiarrheal drugs, accidental (unintentional), sequela -T476X2A Poisoning by antidiarrheal drugs, intentional self-harm, initial encounter -T476X2D Poisoning by antidiarrheal drugs, intentional self-harm, subsequent encounter -T476X2S Poisoning by antidiarrheal drugs, intentional self-harm, sequela -T476X3A Poisoning by antidiarrheal drugs, assault, initial encounter -T476X3D Poisoning by antidiarrheal drugs, assault, subsequent encounter -T476X3S Poisoning by antidiarrheal drugs, assault, sequela -T476X4A Poisoning by antidiarrheal drugs, undetermined, initial encounter -T476X4D Poisoning by antidiarrheal drugs, undetermined, subsequent encounter -T476X4S Poisoning by antidiarrheal drugs, undetermined, sequela -T476X5A Adverse effect of antidiarrheal drugs, initial encounter -T476X5D Adverse effect of antidiarrheal drugs, subsequent encounter -T476X5S Adverse effect of antidiarrheal drugs, sequela -T476X6A Underdosing of antidiarrheal drugs, initial encounter -T476X6D Underdosing of antidiarrheal drugs, subsequent encounter -T476X6S Underdosing of antidiarrheal drugs, sequela -T477X1A Poisoning by emetics, accidental (unintentional), initial encounter -T477X1D Poisoning by emetics, accidental (unintentional), subsequent encounter -T477X1S Poisoning by emetics, accidental (unintentional), sequela -T477X2A Poisoning by emetics, intentional self-harm, initial encounter -T477X2D Poisoning by emetics, intentional self-harm, subsequent encounter -T477X2S Poisoning by emetics, intentional self-harm, sequela -T477X3A Poisoning by emetics, assault, initial encounter -T477X3D Poisoning by emetics, assault, subsequent encounter -T477X3S Poisoning by emetics, assault, sequela -T477X4A Poisoning by emetics, undetermined, initial encounter -T477X4D Poisoning by emetics, undetermined, subsequent encounter -T477X4S Poisoning by emetics, undetermined, sequela -T477X5A Adverse effect of emetics, initial encounter -T477X5D Adverse effect of emetics, subsequent encounter -T477X5S Adverse effect of emetics, sequela -T477X6A Underdosing of emetics, initial encounter -T477X6D Underdosing of emetics, subsequent encounter -T477X6S Underdosing of emetics, sequela -T478X1A Poisoning by other agents primarily affecting gastrointestinal system, accidental (unintentional), initial encounter -T478X1D Poisoning by other agents primarily affecting gastrointestinal system, accidental (unintentional), subsequent encounter -T478X1S Poisoning by other agents primarily affecting gastrointestinal system, accidental (unintentional), sequela -T478X2A Poisoning by other agents primarily affecting gastrointestinal system, intentional self-harm, initial encounter -T478X2D Poisoning by other agents primarily affecting gastrointestinal system, intentional self-harm, subsequent encounter -T478X2S Poisoning by other agents primarily affecting gastrointestinal system, intentional self-harm, sequela -T478X3A Poisoning by other agents primarily affecting gastrointestinal system, assault, initial encounter -T478X3D Poisoning by other agents primarily affecting gastrointestinal system, assault, subsequent encounter -T478X3S Poisoning by other agents primarily affecting gastrointestinal system, assault, sequela -T478X4A Poisoning by other agents primarily affecting gastrointestinal system, undetermined, initial encounter -T478X4D Poisoning by other agents primarily affecting gastrointestinal system, undetermined, subsequent encounter -T478X4S Poisoning by other agents primarily affecting gastrointestinal system, undetermined, sequela -T478X5A Adverse effect of other agents primarily affecting gastrointestinal system, initial encounter -T478X5D Adverse effect of other agents primarily affecting gastrointestinal system, subsequent encounter -T478X5S Adverse effect of other agents primarily affecting gastrointestinal system, sequela -T478X6A Underdosing of other agents primarily affecting gastrointestinal system, initial encounter -T478X6D Underdosing of other agents primarily affecting gastrointestinal system, subsequent encounter -T478X6S Underdosing of other agents primarily affecting gastrointestinal system, sequela -T4791XA Poisoning by unspecified agents primarily affecting the gastrointestinal system, accidental (unintentional), initial encounter -T4791XD Poisoning by unspecified agents primarily affecting the gastrointestinal system, accidental (unintentional), subsequent encounter -T4791XS Poisoning by unspecified agents primarily affecting the gastrointestinal system, accidental (unintentional), sequela -T4792XA Poisoning by unspecified agents primarily affecting the gastrointestinal system, intentional self-harm, initial encounter -T4792XD Poisoning by unspecified agents primarily affecting the gastrointestinal system, intentional self-harm, subsequent encounter -T4792XS Poisoning by unspecified agents primarily affecting the gastrointestinal system, intentional self-harm, sequela -T4793XA Poisoning by unspecified agents primarily affecting the gastrointestinal system, assault, initial encounter -T4793XD Poisoning by unspecified agents primarily affecting the gastrointestinal system, assault, subsequent encounter -T4793XS Poisoning by unspecified agents primarily affecting the gastrointestinal system, assault, sequela -T4794XA Poisoning by unspecified agents primarily affecting the gastrointestinal system, undetermined, initial encounter -T4794XD Poisoning by unspecified agents primarily affecting the gastrointestinal system, undetermined, subsequent encounter -T4794XS Poisoning by unspecified agents primarily affecting the gastrointestinal system, undetermined, sequela -T4795XA Adverse effect of unspecified agents primarily affecting the gastrointestinal system, initial encounter -T4795XD Adverse effect of unspecified agents primarily affecting the gastrointestinal system, subsequent encounter -T4795XS Adverse effect of unspecified agents primarily affecting the gastrointestinal system, sequela -T4796XA Underdosing of unspecified agents primarily affecting the gastrointestinal system, initial encounter -T4796XD Underdosing of unspecified agents primarily affecting the gastrointestinal system, subsequent encounter -T4796XS Underdosing of unspecified agents primarily affecting the gastrointestinal system, sequela -T480X1A Poisoning by oxytocic drugs, accidental (unintentional), initial encounter -T480X1D Poisoning by oxytocic drugs, accidental (unintentional), subsequent encounter -T480X1S Poisoning by oxytocic drugs, accidental (unintentional), sequela -T480X2A Poisoning by oxytocic drugs, intentional self-harm, initial encounter -T480X2D Poisoning by oxytocic drugs, intentional self-harm, subsequent encounter -T480X2S Poisoning by oxytocic drugs, intentional self-harm, sequela -T480X3A Poisoning by oxytocic drugs, assault, initial encounter -T480X3D Poisoning by oxytocic drugs, assault, subsequent encounter -T480X3S Poisoning by oxytocic drugs, assault, sequela -T480X4A Poisoning by oxytocic drugs, undetermined, initial encounter -T480X4D Poisoning by oxytocic drugs, undetermined, subsequent encounter -T480X4S Poisoning by oxytocic drugs, undetermined, sequela -T480X5A Adverse effect of oxytocic drugs, initial encounter -T480X5D Adverse effect of oxytocic drugs, subsequent encounter -T480X5S Adverse effect of oxytocic drugs, sequela -T480X6A Underdosing of oxytocic drugs, initial encounter -T480X6D Underdosing of oxytocic drugs, subsequent encounter -T480X6S Underdosing of oxytocic drugs, sequela -T481X1A Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], accidental (unintentional), initial encounter -T481X1D Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], accidental (unintentional), subsequent encounter -T481X1S Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], accidental (unintentional), sequela -T481X2A Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], intentional self-harm, initial encounter -T481X2D Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], intentional self-harm, subsequent encounter -T481X2S Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], intentional self-harm, sequela -T481X3A Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], assault, initial encounter -T481X3D Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], assault, subsequent encounter -T481X3S Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], assault, sequela -T481X4A Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], undetermined, initial encounter -T481X4D Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], undetermined, subsequent encounter -T481X4S Poisoning by skeletal muscle relaxants [neuromuscular blocking agents], undetermined, sequela -T481X5A Adverse effect of skeletal muscle relaxants [neuromuscular blocking agents], initial encounter -T481X5D Adverse effect of skeletal muscle relaxants [neuromuscular blocking agents], subsequent encounter -T481X5S Adverse effect of skeletal muscle relaxants [neuromuscular blocking agents], sequela -T481X6A Underdosing of skeletal muscle relaxants [neuromuscular blocking agents], initial encounter -T481X6D Underdosing of skeletal muscle relaxants [neuromuscular blocking agents], subsequent encounter -T481X6S Underdosing of skeletal muscle relaxants [neuromuscular blocking agents], sequela -T48201A Poisoning by unspecified drugs acting on muscles, accidental (unintentional), initial encounter -T48201D Poisoning by unspecified drugs acting on muscles, accidental (unintentional), subsequent encounter -T48201S Poisoning by unspecified drugs acting on muscles, accidental (unintentional), sequela -T48202A Poisoning by unspecified drugs acting on muscles, intentional self-harm, initial encounter -T48202D Poisoning by unspecified drugs acting on muscles, intentional self-harm, subsequent encounter -T48202S Poisoning by unspecified drugs acting on muscles, intentional self-harm, sequela -T48203A Poisoning by unspecified drugs acting on muscles, assault, initial encounter -T48203D Poisoning by unspecified drugs acting on muscles, assault, subsequent encounter -T48203S Poisoning by unspecified drugs acting on muscles, assault, sequela -T48204A Poisoning by unspecified drugs acting on muscles, undetermined, initial encounter -T48204D Poisoning by unspecified drugs acting on muscles, undetermined, subsequent encounter -T48204S Poisoning by unspecified drugs acting on muscles, undetermined, sequela -T48205A Adverse effect of unspecified drugs acting on muscles, initial encounter -T48205D Adverse effect of unspecified drugs acting on muscles, subsequent encounter -T48205S Adverse effect of unspecified drugs acting on muscles, sequela -T48206A Underdosing of unspecified drugs acting on muscles, initial encounter -T48206D Underdosing of unspecified drugs acting on muscles, subsequent encounter -T48206S Underdosing of unspecified drugs acting on muscles, sequela -T48291A Poisoning by other drugs acting on muscles, accidental (unintentional), initial encounter -T48291D Poisoning by other drugs acting on muscles, accidental (unintentional), subsequent encounter -T48291S Poisoning by other drugs acting on muscles, accidental (unintentional), sequela -T48292A Poisoning by other drugs acting on muscles, intentional self-harm, initial encounter -T48292D Poisoning by other drugs acting on muscles, intentional self-harm, subsequent encounter -T48292S Poisoning by other drugs acting on muscles, intentional self-harm, sequela -T48293A Poisoning by other drugs acting on muscles, assault, initial encounter -T48293D Poisoning by other drugs acting on muscles, assault, subsequent encounter -T48293S Poisoning by other drugs acting on muscles, assault, sequela -T48294A Poisoning by other drugs acting on muscles, undetermined, initial encounter -T48294D Poisoning by other drugs acting on muscles, undetermined, subsequent encounter -T48294S Poisoning by other drugs acting on muscles, undetermined, sequela -T48295A Adverse effect of other drugs acting on muscles, initial encounter -T48295D Adverse effect of other drugs acting on muscles, subsequent encounter -T48295S Adverse effect of other drugs acting on muscles, sequela -T48296A Underdosing of other drugs acting on muscles, initial encounter -T48296D Underdosing of other drugs acting on muscles, subsequent encounter -T48296S Underdosing of other drugs acting on muscles, sequela -T483X1A Poisoning by antitussives, accidental (unintentional), initial encounter -T483X1D Poisoning by antitussives, accidental (unintentional), subsequent encounter -T483X1S Poisoning by antitussives, accidental (unintentional), sequela -T483X2A Poisoning by antitussives, intentional self-harm, initial encounter -T483X2D Poisoning by antitussives, intentional self-harm, subsequent encounter -T483X2S Poisoning by antitussives, intentional self-harm, sequela -T483X3A Poisoning by antitussives, assault, initial encounter -T483X3D Poisoning by antitussives, assault, subsequent encounter -T483X3S Poisoning by antitussives, assault, sequela -T483X4A Poisoning by antitussives, undetermined, initial encounter -T483X4D Poisoning by antitussives, undetermined, subsequent encounter -T483X4S Poisoning by antitussives, undetermined, sequela -T483X5A Adverse effect of antitussives, initial encounter -T483X5D Adverse effect of antitussives, subsequent encounter -T483X5S Adverse effect of antitussives, sequela -T483X6A Underdosing of antitussives, initial encounter -T483X6D Underdosing of antitussives, subsequent encounter -T483X6S Underdosing of antitussives, sequela -T484X1A Poisoning by expectorants, accidental (unintentional), initial encounter -T484X1D Poisoning by expectorants, accidental (unintentional), subsequent encounter -T484X1S Poisoning by expectorants, accidental (unintentional), sequela -T484X2A Poisoning by expectorants, intentional self-harm, initial encounter -T484X2D Poisoning by expectorants, intentional self-harm, subsequent encounter -T484X2S Poisoning by expectorants, intentional self-harm, sequela -T484X3A Poisoning by expectorants, assault, initial encounter -T484X3D Poisoning by expectorants, assault, subsequent encounter -T484X3S Poisoning by expectorants, assault, sequela -T484X4A Poisoning by expectorants, undetermined, initial encounter -T484X4D Poisoning by expectorants, undetermined, subsequent encounter -T484X4S Poisoning by expectorants, undetermined, sequela -T484X5A Adverse effect of expectorants, initial encounter -T484X5D Adverse effect of expectorants, subsequent encounter -T484X5S Adverse effect of expectorants, sequela -T484X6A Underdosing of expectorants, initial encounter -T484X6D Underdosing of expectorants, subsequent encounter -T484X6S Underdosing of expectorants, sequela -T485X1A Poisoning by other anti-common-cold drugs, accidental (unintentional), initial encounter -T485X1D Poisoning by other anti-common-cold drugs, accidental (unintentional), subsequent encounter -T485X1S Poisoning by other anti-common-cold drugs, accidental (unintentional), sequela -T485X2A Poisoning by other anti-common-cold drugs, intentional self-harm, initial encounter -T485X2D Poisoning by other anti-common-cold drugs, intentional self-harm, subsequent encounter -T485X2S Poisoning by other anti-common-cold drugs, intentional self-harm, sequela -T485X3A Poisoning by other anti-common-cold drugs, assault, initial encounter -T485X3D Poisoning by other anti-common-cold drugs, assault, subsequent encounter -T485X3S Poisoning by other anti-common-cold drugs, assault, sequela -T485X4A Poisoning by other anti-common-cold drugs, undetermined, initial encounter -T485X4D Poisoning by other anti-common-cold drugs, undetermined, subsequent encounter -T485X4S Poisoning by other anti-common-cold drugs, undetermined, sequela -T485X5A Adverse effect of other anti-common-cold drugs, initial encounter -T485X5D Adverse effect of other anti-common-cold drugs, subsequent encounter -T485X5S Adverse effect of other anti-common-cold drugs, sequela -T485X6A Underdosing of other anti-common-cold drugs, initial encounter -T485X6D Underdosing of other anti-common-cold drugs, subsequent encounter -T485X6S Underdosing of other anti-common-cold drugs, sequela -T486X1A Poisoning by antiasthmatics, accidental (unintentional), initial encounter -T486X1D Poisoning by antiasthmatics, accidental (unintentional), subsequent encounter -T486X1S Poisoning by antiasthmatics, accidental (unintentional), sequela -T486X2A Poisoning by antiasthmatics, intentional self-harm, initial encounter -T486X2D Poisoning by antiasthmatics, intentional self-harm, subsequent encounter -T486X2S Poisoning by antiasthmatics, intentional self-harm, sequela -T486X3A Poisoning by antiasthmatics, assault, initial encounter -T486X3D Poisoning by antiasthmatics, assault, subsequent encounter -T486X3S Poisoning by antiasthmatics, assault, sequela -T486X4A Poisoning by antiasthmatics, undetermined, initial encounter -T486X4D Poisoning by antiasthmatics, undetermined, subsequent encounter -T486X4S Poisoning by antiasthmatics, undetermined, sequela -T486X5A Adverse effect of antiasthmatics, initial encounter -T486X5D Adverse effect of antiasthmatics, subsequent encounter -T486X5S Adverse effect of antiasthmatics, sequela -T486X6A Underdosing of antiasthmatics, initial encounter -T486X6D Underdosing of antiasthmatics, subsequent encounter -T486X6S Underdosing of antiasthmatics, sequela -T48901A Poisoning by unspecified agents primarily acting on the respiratory system, accidental (unintentional), initial encounter -T48901D Poisoning by unspecified agents primarily acting on the respiratory system, accidental (unintentional), subsequent encounter -T48901S Poisoning by unspecified agents primarily acting on the respiratory system, accidental (unintentional), sequela -T48902A Poisoning by unspecified agents primarily acting on the respiratory system, intentional self-harm, initial encounter -T48902D Poisoning by unspecified agents primarily acting on the respiratory system, intentional self-harm, subsequent encounter -T48902S Poisoning by unspecified agents primarily acting on the respiratory system, intentional self-harm, sequela -T48903A Poisoning by unspecified agents primarily acting on the respiratory system, assault, initial encounter -T48903D Poisoning by unspecified agents primarily acting on the respiratory system, assault, subsequent encounter -T48903S Poisoning by unspecified agents primarily acting on the respiratory system, assault, sequela -T48904A Poisoning by unspecified agents primarily acting on the respiratory system, undetermined, initial encounter -T48904D Poisoning by unspecified agents primarily acting on the respiratory system, undetermined, subsequent encounter -T48904S Poisoning by unspecified agents primarily acting on the respiratory system, undetermined, sequela -T48905A Adverse effect of unspecified agents primarily acting on the respiratory system, initial encounter -T48905D Adverse effect of unspecified agents primarily acting on the respiratory system, subsequent encounter -T48905S Adverse effect of unspecified agents primarily acting on the respiratory system, sequela -T48906A Underdosing of unspecified agents primarily acting on the respiratory system, initial encounter -T48906D Underdosing of unspecified agents primarily acting on the respiratory system, subsequent encounter -T48906S Underdosing of unspecified agents primarily acting on the respiratory system, sequela -T48991A Poisoning by other agents primarily acting on the respiratory system, accidental (unintentional), initial encounter -T48991D Poisoning by other agents primarily acting on the respiratory system, accidental (unintentional), subsequent encounter -T48991S Poisoning by other agents primarily acting on the respiratory system, accidental (unintentional), sequela -T48992A Poisoning by other agents primarily acting on the respiratory system, intentional self-harm, initial encounter -T48992D Poisoning by other agents primarily acting on the respiratory system, intentional self-harm, subsequent encounter -T48992S Poisoning by other agents primarily acting on the respiratory system, intentional self-harm, sequela -T48993A Poisoning by other agents primarily acting on the respiratory system, assault, initial encounter -T48993D Poisoning by other agents primarily acting on the respiratory system, assault, subsequent encounter -T48993S Poisoning by other agents primarily acting on the respiratory system, assault, sequela -T48994A Poisoning by other agents primarily acting on the respiratory system, undetermined, initial encounter -T48994D Poisoning by other agents primarily acting on the respiratory system, undetermined, subsequent encounter -T48994S Poisoning by other agents primarily acting on the respiratory system, undetermined, sequela -T48995A Adverse effect of other agents primarily acting on the respiratory system, initial encounter -T48995D Adverse effect of other agents primarily acting on the respiratory system, subsequent encounter -T48995S Adverse effect of other agents primarily acting on the respiratory system, sequela -T48996A Underdosing of other agents primarily acting on the respiratory system, initial encounter -T48996D Underdosing of other agents primarily acting on the respiratory system, subsequent encounter -T48996S Underdosing of other agents primarily acting on the respiratory system, sequela -T490X1A Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, accidental (unintentional), initial encounter -T490X1D Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, accidental (unintentional), subsequent encounter -T490X1S Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, accidental (unintentional), sequela -T490X2A Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, intentional self-harm, initial encounter -T490X2D Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, intentional self-harm, subsequent encounter -T490X2S Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, intentional self-harm, sequela -T490X3A Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, assault, initial encounter -T490X3D Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, assault, subsequent encounter -T490X3S Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, assault, sequela -T490X4A Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, undetermined, initial encounter -T490X4D Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, undetermined, subsequent encounter -T490X4S Poisoning by local antifungal, anti-infective and anti-inflammatory drugs, undetermined, sequela -T490X5A Adverse effect of local antifungal, anti-infective and anti-inflammatory drugs, initial encounter -T490X5D Adverse effect of local antifungal, anti-infective and anti-inflammatory drugs, subsequent encounter -T490X5S Adverse effect of local antifungal, anti-infective and anti-inflammatory drugs, sequela -T490X6A Underdosing of local antifungal, anti-infective and anti-inflammatory drugs, initial encounter -T490X6D Underdosing of local antifungal, anti-infective and anti-inflammatory drugs, subsequent encounter -T490X6S Underdosing of local antifungal, anti-infective and anti-inflammatory drugs, sequela -T491X1A Poisoning by antipruritics, accidental (unintentional), initial encounter -T491X1D Poisoning by antipruritics, accidental (unintentional), subsequent encounter -T491X1S Poisoning by antipruritics, accidental (unintentional), sequela -T491X2A Poisoning by antipruritics, intentional self-harm, initial encounter -T491X2D Poisoning by antipruritics, intentional self-harm, subsequent encounter -T491X2S Poisoning by antipruritics, intentional self-harm, sequela -T491X3A Poisoning by antipruritics, assault, initial encounter -T491X3D Poisoning by antipruritics, assault, subsequent encounter -T491X3S Poisoning by antipruritics, assault, sequela -T491X4A Poisoning by antipruritics, undetermined, initial encounter -T491X4D Poisoning by antipruritics, undetermined, subsequent encounter -T491X4S Poisoning by antipruritics, undetermined, sequela -T491X5A Adverse effect of antipruritics, initial encounter -T491X5D Adverse effect of antipruritics, subsequent encounter -T491X5S Adverse effect of antipruritics, sequela -T491X6A Underdosing of antipruritics, initial encounter -T491X6D Underdosing of antipruritics, subsequent encounter -T491X6S Underdosing of antipruritics, sequela -T492X1A Poisoning by local astringents and local detergents, accidental (unintentional), initial encounter -T492X1D Poisoning by local astringents and local detergents, accidental (unintentional), subsequent encounter -T492X1S Poisoning by local astringents and local detergents, accidental (unintentional), sequela -T492X2A Poisoning by local astringents and local detergents, intentional self-harm, initial encounter -T492X2D Poisoning by local astringents and local detergents, intentional self-harm, subsequent encounter -T492X2S Poisoning by local astringents and local detergents, intentional self-harm, sequela -T492X3A Poisoning by local astringents and local detergents, assault, initial encounter -T492X3D Poisoning by local astringents and local detergents, assault, subsequent encounter -T492X3S Poisoning by local astringents and local detergents, assault, sequela -T492X4A Poisoning by local astringents and local detergents, undetermined, initial encounter -T492X4D Poisoning by local astringents and local detergents, undetermined, subsequent encounter -T492X4S Poisoning by local astringents and local detergents, undetermined, sequela -T492X5A Adverse effect of local astringents and local detergents, initial encounter -T492X5D Adverse effect of local astringents and local detergents, subsequent encounter -T492X5S Adverse effect of local astringents and local detergents, sequela -T492X6A Underdosing of local astringents and local detergents, initial encounter -T492X6D Underdosing of local astringents and local detergents, subsequent encounter -T492X6S Underdosing of local astringents and local detergents, sequela -T493X1A Poisoning by emollients, demulcents and protectants, accidental (unintentional), initial encounter -T493X1D Poisoning by emollients, demulcents and protectants, accidental (unintentional), subsequent encounter -T493X1S Poisoning by emollients, demulcents and protectants, accidental (unintentional), sequela -T493X2A Poisoning by emollients, demulcents and protectants, intentional self-harm, initial encounter -T493X2D Poisoning by emollients, demulcents and protectants, intentional self-harm, subsequent encounter -T493X2S Poisoning by emollients, demulcents and protectants, intentional self-harm, sequela -T493X3A Poisoning by emollients, demulcents and protectants, assault, initial encounter -T493X3D Poisoning by emollients, demulcents and protectants, assault, subsequent encounter -T493X3S Poisoning by emollients, demulcents and protectants, assault, sequela -T493X4A Poisoning by emollients, demulcents and protectants, undetermined, initial encounter -T493X4D Poisoning by emollients, demulcents and protectants, undetermined, subsequent encounter -T493X4S Poisoning by emollients, demulcents and protectants, undetermined, sequela -T493X5A Adverse effect of emollients, demulcents and protectants, initial encounter -T493X5D Adverse effect of emollients, demulcents and protectants, subsequent encounter -T493X5S Adverse effect of emollients, demulcents and protectants, sequela -T493X6A Underdosing of emollients, demulcents and protectants, initial encounter -T493X6D Underdosing of emollients, demulcents and protectants, subsequent encounter -T493X6S Underdosing of emollients, demulcents and protectants, sequela -T494X1A Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, accidental (unintentional), initial encounter -T494X1D Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, accidental (unintentional), subsequent encounter -T494X1S Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, accidental (unintentional), sequela -T494X2A Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, intentional self-harm, initial encounter -T494X2D Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, intentional self-harm, subsequent encounter -T494X2S Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, intentional self-harm, sequela -T494X3A Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, assault, initial encounter -T494X3D Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, assault, subsequent encounter -T494X3S Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, assault, sequela -T494X4A Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, undetermined, initial encounter -T494X4D Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, undetermined, subsequent encounter -T494X4S Poisoning by keratolytics, keratoplastics, and other hair treatment drugs and preparations, undetermined, sequela -T494X5A Adverse effect of keratolytics, keratoplastics, and other hair treatment drugs and preparations, initial encounter -T494X5D Adverse effect of keratolytics, keratoplastics, and other hair treatment drugs and preparations, subsequent encounter -T494X5S Adverse effect of keratolytics, keratoplastics, and other hair treatment drugs and preparations, sequela -T494X6A Underdosing of keratolytics, keratoplastics, and other hair treatment drugs and preparations, initial encounter -T494X6D Underdosing of keratolytics, keratoplastics, and other hair treatment drugs and preparations, subsequent encounter -T494X6S Underdosing of keratolytics, keratoplastics, and other hair treatment drugs and preparations, sequela -T495X1A Poisoning by ophthalmological drugs and preparations, accidental (unintentional), initial encounter -T495X1D Poisoning by ophthalmological drugs and preparations, accidental (unintentional), subsequent encounter -T495X1S Poisoning by ophthalmological drugs and preparations, accidental (unintentional), sequela -T495X2A Poisoning by ophthalmological drugs and preparations, intentional self-harm, initial encounter -T495X2D Poisoning by ophthalmological drugs and preparations, intentional self-harm, subsequent encounter -T495X2S Poisoning by ophthalmological drugs and preparations, intentional self-harm, sequela -T495X3A Poisoning by ophthalmological drugs and preparations, assault, initial encounter -T495X3D Poisoning by ophthalmological drugs and preparations, assault, subsequent encounter -T495X3S Poisoning by ophthalmological drugs and preparations, assault, sequela -T495X4A Poisoning by ophthalmological drugs and preparations, undetermined, initial encounter -T495X4D Poisoning by ophthalmological drugs and preparations, undetermined, subsequent encounter -T495X4S Poisoning by ophthalmological drugs and preparations, undetermined, sequela -T495X5A Adverse effect of ophthalmological drugs and preparations, initial encounter -T495X5D Adverse effect of ophthalmological drugs and preparations, subsequent encounter -T495X5S Adverse effect of ophthalmological drugs and preparations, sequela -T495X6A Underdosing of ophthalmological drugs and preparations, initial encounter -T495X6D Underdosing of ophthalmological drugs and preparations, subsequent encounter -T495X6S Underdosing of ophthalmological drugs and preparations, sequela -T496X1A Poisoning by otorhinolaryngological drugs and preparations, accidental (unintentional), initial encounter -T496X1D Poisoning by otorhinolaryngological drugs and preparations, accidental (unintentional), subsequent encounter -T496X1S Poisoning by otorhinolaryngological drugs and preparations, accidental (unintentional), sequela -T496X2A Poisoning by otorhinolaryngological drugs and preparations, intentional self-harm, initial encounter -T496X2D Poisoning by otorhinolaryngological drugs and preparations, intentional self-harm, subsequent encounter -T496X2S Poisoning by otorhinolaryngological drugs and preparations, intentional self-harm, sequela -T496X3A Poisoning by otorhinolaryngological drugs and preparations, assault, initial encounter -T496X3D Poisoning by otorhinolaryngological drugs and preparations, assault, subsequent encounter -T496X3S Poisoning by otorhinolaryngological drugs and preparations, assault, sequela -T496X4A Poisoning by otorhinolaryngological drugs and preparations, undetermined, initial encounter -T496X4D Poisoning by otorhinolaryngological drugs and preparations, undetermined, subsequent encounter -T496X4S Poisoning by otorhinolaryngological drugs and preparations, undetermined, sequela -T496X5A Adverse effect of otorhinolaryngological drugs and preparations, initial encounter -T496X5D Adverse effect of otorhinolaryngological drugs and preparations, subsequent encounter -T496X5S Adverse effect of otorhinolaryngological drugs and preparations, sequela -T496X6A Underdosing of otorhinolaryngological drugs and preparations, initial encounter -T496X6D Underdosing of otorhinolaryngological drugs and preparations, subsequent encounter -T496X6S Underdosing of otorhinolaryngological drugs and preparations, sequela -T497X1A Poisoning by dental drugs, topically applied, accidental (unintentional), initial encounter -T497X1D Poisoning by dental drugs, topically applied, accidental (unintentional), subsequent encounter -T497X1S Poisoning by dental drugs, topically applied, accidental (unintentional), sequela -T497X2A Poisoning by dental drugs, topically applied, intentional self-harm, initial encounter -T497X2D Poisoning by dental drugs, topically applied, intentional self-harm, subsequent encounter -T497X2S Poisoning by dental drugs, topically applied, intentional self-harm, sequela -T497X3A Poisoning by dental drugs, topically applied, assault, initial encounter -T497X3D Poisoning by dental drugs, topically applied, assault, subsequent encounter -T497X3S Poisoning by dental drugs, topically applied, assault, sequela -T497X4A Poisoning by dental drugs, topically applied, undetermined, initial encounter -T497X4D Poisoning by dental drugs, topically applied, undetermined, subsequent encounter -T497X4S Poisoning by dental drugs, topically applied, undetermined, sequela -T497X5A Adverse effect of dental drugs, topically applied, initial encounter -T497X5D Adverse effect of dental drugs, topically applied, subsequent encounter -T497X5S Adverse effect of dental drugs, topically applied, sequela -T497X6A Underdosing of dental drugs, topically applied, initial encounter -T497X6D Underdosing of dental drugs, topically applied, subsequent encounter -T497X6S Underdosing of dental drugs, topically applied, sequela -T498X1A Poisoning by other topical agents, accidental (unintentional), initial encounter -T498X1D Poisoning by other topical agents, accidental (unintentional), subsequent encounter -T498X1S Poisoning by other topical agents, accidental (unintentional), sequela -T498X2A Poisoning by other topical agents, intentional self-harm, initial encounter -T498X2D Poisoning by other topical agents, intentional self-harm, subsequent encounter -T498X2S Poisoning by other topical agents, intentional self-harm, sequela -T498X3A Poisoning by other topical agents, assault, initial encounter -T498X3D Poisoning by other topical agents, assault, subsequent encounter -T498X3S Poisoning by other topical agents, assault, sequela -T498X4A Poisoning by other topical agents, undetermined, initial encounter -T498X4D Poisoning by other topical agents, undetermined, subsequent encounter -T498X4S Poisoning by other topical agents, undetermined, sequela -T498X5A Adverse effect of other topical agents, initial encounter -T498X5D Adverse effect of other topical agents, subsequent encounter -T498X5S Adverse effect of other topical agents, sequela -T498X6A Underdosing of other topical agents, initial encounter -T498X6D Underdosing of other topical agents, subsequent encounter -T498X6S Underdosing of other topical agents, sequela -T4991XA Poisoning by unspecified topical agent, accidental (unintentional), initial encounter -T4991XD Poisoning by unspecified topical agent, accidental (unintentional), subsequent encounter -T4991XS Poisoning by unspecified topical agent, accidental (unintentional), sequela -T4992XA Poisoning by unspecified topical agent, intentional self-harm, initial encounter -T4992XD Poisoning by unspecified topical agent, intentional self-harm, subsequent encounter -T4992XS Poisoning by unspecified topical agent, intentional self-harm, sequela -T4993XA Poisoning by unspecified topical agent, assault, initial encounter -T4993XD Poisoning by unspecified topical agent, assault, subsequent encounter -T4993XS Poisoning by unspecified topical agent, assault, sequela -T4994XA Poisoning by unspecified topical agent, undetermined, initial encounter -T4994XD Poisoning by unspecified topical agent, undetermined, subsequent encounter -T4994XS Poisoning by unspecified topical agent, undetermined, sequela -T4995XA Adverse effect of unspecified topical agent, initial encounter -T4995XD Adverse effect of unspecified topical agent, subsequent encounter -T4995XS Adverse effect of unspecified topical agent, sequela -T4996XA Underdosing of unspecified topical agent, initial encounter -T4996XD Underdosing of unspecified topical agent, subsequent encounter -T4996XS Underdosing of unspecified topical agent, sequela -T500X1A Poisoning by mineralocorticoids and their antagonists, accidental (unintentional), initial encounter -T500X1D Poisoning by mineralocorticoids and their antagonists, accidental (unintentional), subsequent encounter -T500X1S Poisoning by mineralocorticoids and their antagonists, accidental (unintentional), sequela -T500X2A Poisoning by mineralocorticoids and their antagonists, intentional self-harm, initial encounter -T500X2D Poisoning by mineralocorticoids and their antagonists, intentional self-harm, subsequent encounter -T500X2S Poisoning by mineralocorticoids and their antagonists, intentional self-harm, sequela -T500X3A Poisoning by mineralocorticoids and their antagonists, assault, initial encounter -T500X3D Poisoning by mineralocorticoids and their antagonists, assault, subsequent encounter -T500X3S Poisoning by mineralocorticoids and their antagonists, assault, sequela -T500X4A Poisoning by mineralocorticoids and their antagonists, undetermined, initial encounter -T500X4D Poisoning by mineralocorticoids and their antagonists, undetermined, subsequent encounter -T500X4S Poisoning by mineralocorticoids and their antagonists, undetermined, sequela -T500X5A Adverse effect of mineralocorticoids and their antagonists, initial encounter -T500X5D Adverse effect of mineralocorticoids and their antagonists, subsequent encounter -T500X5S Adverse effect of mineralocorticoids and their antagonists, sequela -T500X6A Underdosing of mineralocorticoids and their antagonists, initial encounter -T500X6D Underdosing of mineralocorticoids and their antagonists, subsequent encounter -T500X6S Underdosing of mineralocorticoids and their antagonists, sequela -T501X1A Poisoning by loop [high-ceiling] diuretics, accidental (unintentional), initial encounter -T501X1D Poisoning by loop [high-ceiling] diuretics, accidental (unintentional), subsequent encounter -T501X1S Poisoning by loop [high-ceiling] diuretics, accidental (unintentional), sequela -T501X2A Poisoning by loop [high-ceiling] diuretics, intentional self-harm, initial encounter -T501X2D Poisoning by loop [high-ceiling] diuretics, intentional self-harm, subsequent encounter -T501X2S Poisoning by loop [high-ceiling] diuretics, intentional self-harm, sequela -T501X3A Poisoning by loop [high-ceiling] diuretics, assault, initial encounter -T501X3D Poisoning by loop [high-ceiling] diuretics, assault, subsequent encounter -T501X3S Poisoning by loop [high-ceiling] diuretics, assault, sequela -T501X4A Poisoning by loop [high-ceiling] diuretics, undetermined, initial encounter -T501X4D Poisoning by loop [high-ceiling] diuretics, undetermined, subsequent encounter -T501X4S Poisoning by loop [high-ceiling] diuretics, undetermined, sequela -T501X5A Adverse effect of loop [high-ceiling] diuretics, initial encounter -T501X5D Adverse effect of loop [high-ceiling] diuretics, subsequent encounter -T501X5S Adverse effect of loop [high-ceiling] diuretics, sequela -T501X6A Underdosing of loop [high-ceiling] diuretics, initial encounter -T501X6D Underdosing of loop [high-ceiling] diuretics, subsequent encounter -T501X6S Underdosing of loop [high-ceiling] diuretics, sequela -T502X1A Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, accidental (unintentional), initial encounter -T502X1D Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, accidental (unintentional), subsequent encounter -T502X1S Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, accidental (unintentional), sequela -T502X2A Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, intentional self-harm, initial encounter -T502X2D Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, intentional self-harm, subsequent encounter -T502X2S Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, intentional self-harm, sequela -T502X3A Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, assault, initial encounter -T502X3D Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, assault, subsequent encounter -T502X3S Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, assault, sequela -T502X4A Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, undetermined, initial encounter -T502X4D Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, undetermined, subsequent encounter -T502X4S Poisoning by carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, undetermined, sequela -T502X5A Adverse effect of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, initial encounter -T502X5D Adverse effect of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, subsequent encounter -T502X5S Adverse effect of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, sequela -T502X6A Underdosing of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, initial encounter -T502X6D Underdosing of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, subsequent encounter -T502X6S Underdosing of carbonic-anhydrase inhibitors, benzothiadiazides and other diuretics, sequela -T503X1A Poisoning by electrolytic, caloric and water-balance agents, accidental (unintentional), initial encounter -T503X1D Poisoning by electrolytic, caloric and water-balance agents, accidental (unintentional), subsequent encounter -T503X1S Poisoning by electrolytic, caloric and water-balance agents, accidental (unintentional), sequela -T503X2A Poisoning by electrolytic, caloric and water-balance agents, intentional self-harm, initial encounter -T503X2D Poisoning by electrolytic, caloric and water-balance agents, intentional self-harm, subsequent encounter -T503X2S Poisoning by electrolytic, caloric and water-balance agents, intentional self-harm, sequela -T503X3A Poisoning by electrolytic, caloric and water-balance agents, assault, initial encounter -T503X3D Poisoning by electrolytic, caloric and water-balance agents, assault, subsequent encounter -T503X3S Poisoning by electrolytic, caloric and water-balance agents, assault, sequela -T503X4A Poisoning by electrolytic, caloric and water-balance agents, undetermined, initial encounter -T503X4D Poisoning by electrolytic, caloric and water-balance agents, undetermined, subsequent encounter -T503X4S Poisoning by electrolytic, caloric and water-balance agents, undetermined, sequela -T503X5A Adverse effect of electrolytic, caloric and water-balance agents, initial encounter -T503X5D Adverse effect of electrolytic, caloric and water-balance agents, subsequent encounter -T503X5S Adverse effect of electrolytic, caloric and water-balance agents, sequela -T503X6A Underdosing of electrolytic, caloric and water-balance agents, initial encounter -T503X6D Underdosing of electrolytic, caloric and water-balance agents, subsequent encounter -T503X6S Underdosing of electrolytic, caloric and water-balance agents, sequela -T504X1A Poisoning by drugs affecting uric acid metabolism, accidental (unintentional), initial encounter -T504X1D Poisoning by drugs affecting uric acid metabolism, accidental (unintentional), subsequent encounter -T504X1S Poisoning by drugs affecting uric acid metabolism, accidental (unintentional), sequela -T504X2A Poisoning by drugs affecting uric acid metabolism, intentional self-harm, initial encounter -T504X2D Poisoning by drugs affecting uric acid metabolism, intentional self-harm, subsequent encounter -T504X2S Poisoning by drugs affecting uric acid metabolism, intentional self-harm, sequela -T504X3A Poisoning by drugs affecting uric acid metabolism, assault, initial encounter -T504X3D Poisoning by drugs affecting uric acid metabolism, assault, subsequent encounter -T504X3S Poisoning by drugs affecting uric acid metabolism, assault, sequela -T504X4A Poisoning by drugs affecting uric acid metabolism, undetermined, initial encounter -T504X4D Poisoning by drugs affecting uric acid metabolism, undetermined, subsequent encounter -T504X4S Poisoning by drugs affecting uric acid metabolism, undetermined, sequela -T504X5A Adverse effect of drugs affecting uric acid metabolism, initial encounter -T504X5D Adverse effect of drugs affecting uric acid metabolism, subsequent encounter -T504X5S Adverse effect of drugs affecting uric acid metabolism, sequela -T504X6A Underdosing of drugs affecting uric acid metabolism, initial encounter -T504X6D Underdosing of drugs affecting uric acid metabolism, subsequent encounter -T504X6S Underdosing of drugs affecting uric acid metabolism, sequela -T505X1A Poisoning by appetite depressants, accidental (unintentional), initial encounter -T505X1D Poisoning by appetite depressants, accidental (unintentional), subsequent encounter -T505X1S Poisoning by appetite depressants, accidental (unintentional), sequela -T505X2A Poisoning by appetite depressants, intentional self-harm, initial encounter -T505X2D Poisoning by appetite depressants, intentional self-harm, subsequent encounter -T505X2S Poisoning by appetite depressants, intentional self-harm, sequela -T505X3A Poisoning by appetite depressants, assault, initial encounter -T505X3D Poisoning by appetite depressants, assault, subsequent encounter -T505X3S Poisoning by appetite depressants, assault, sequela -T505X4A Poisoning by appetite depressants, undetermined, initial encounter -T505X4D Poisoning by appetite depressants, undetermined, subsequent encounter -T505X4S Poisoning by appetite depressants, undetermined, sequela -T505X5A Adverse effect of appetite depressants, initial encounter -T505X5D Adverse effect of appetite depressants, subsequent encounter -T505X5S Adverse effect of appetite depressants, sequela -T505X6A Underdosing of appetite depressants, initial encounter -T505X6D Underdosing of appetite depressants, subsequent encounter -T505X6S Underdosing of appetite depressants, sequela -T506X1A Poisoning by antidotes and chelating agents, accidental (unintentional), initial encounter -T506X1D Poisoning by antidotes and chelating agents, accidental (unintentional), subsequent encounter -T506X1S Poisoning by antidotes and chelating agents, accidental (unintentional), sequela -T506X2A Poisoning by antidotes and chelating agents, intentional self-harm, initial encounter -T506X2D Poisoning by antidotes and chelating agents, intentional self-harm, subsequent encounter -T506X2S Poisoning by antidotes and chelating agents, intentional self-harm, sequela -T506X3A Poisoning by antidotes and chelating agents, assault, initial encounter -T506X3D Poisoning by antidotes and chelating agents, assault, subsequent encounter -T506X3S Poisoning by antidotes and chelating agents, assault, sequela -T506X4A Poisoning by antidotes and chelating agents, undetermined, initial encounter -T506X4D Poisoning by antidotes and chelating agents, undetermined, subsequent encounter -T506X4S Poisoning by antidotes and chelating agents, undetermined, sequela -T506X5A Adverse effect of antidotes and chelating agents, initial encounter -T506X5D Adverse effect of antidotes and chelating agents, subsequent encounter -T506X5S Adverse effect of antidotes and chelating agents, sequela -T506X6A Underdosing of antidotes and chelating agents, initial encounter -T506X6D Underdosing of antidotes and chelating agents, subsequent encounter -T506X6S Underdosing of antidotes and chelating agents, sequela -T507X1A Poisoning by analeptics and opioid receptor antagonists, accidental (unintentional), initial encounter -T507X1D Poisoning by analeptics and opioid receptor antagonists, accidental (unintentional), subsequent encounter -T507X1S Poisoning by analeptics and opioid receptor antagonists, accidental (unintentional), sequela -T507X2A Poisoning by analeptics and opioid receptor antagonists, intentional self-harm, initial encounter -T507X2D Poisoning by analeptics and opioid receptor antagonists, intentional self-harm, subsequent encounter -T507X2S Poisoning by analeptics and opioid receptor antagonists, intentional self-harm, sequela -T507X3A Poisoning by analeptics and opioid receptor antagonists, assault, initial encounter -T507X3D Poisoning by analeptics and opioid receptor antagonists, assault, subsequent encounter -T507X3S Poisoning by analeptics and opioid receptor antagonists, assault, sequela -T507X4A Poisoning by analeptics and opioid receptor antagonists, undetermined, initial encounter -T507X4D Poisoning by analeptics and opioid receptor antagonists, undetermined, subsequent encounter -T507X4S Poisoning by analeptics and opioid receptor antagonists, undetermined, sequela -T507X5A Adverse effect of analeptics and opioid receptor antagonists, initial encounter -T507X5D Adverse effect of analeptics and opioid receptor antagonists, subsequent encounter -T507X5S Adverse effect of analeptics and opioid receptor antagonists, sequela -T507X6A Underdosing of analeptics and opioid receptor antagonists, initial encounter -T507X6D Underdosing of analeptics and opioid receptor antagonists, subsequent encounter -T507X6S Underdosing of analeptics and opioid receptor antagonists, sequela -T508X1A Poisoning by diagnostic agents, accidental (unintentional), initial encounter -T508X1D Poisoning by diagnostic agents, accidental (unintentional), subsequent encounter -T508X1S Poisoning by diagnostic agents, accidental (unintentional), sequela -T508X2A Poisoning by diagnostic agents, intentional self-harm, initial encounter -T508X2D Poisoning by diagnostic agents, intentional self-harm, subsequent encounter -T508X2S Poisoning by diagnostic agents, intentional self-harm, sequela -T508X3A Poisoning by diagnostic agents, assault, initial encounter -T508X3D Poisoning by diagnostic agents, assault, subsequent encounter -T508X3S Poisoning by diagnostic agents, assault, sequela -T508X4A Poisoning by diagnostic agents, undetermined, initial encounter -T508X4D Poisoning by diagnostic agents, undetermined, subsequent encounter -T508X4S Poisoning by diagnostic agents, undetermined, sequela -T508X5A Adverse effect of diagnostic agents, initial encounter -T508X5D Adverse effect of diagnostic agents, subsequent encounter -T508X5S Adverse effect of diagnostic agents, sequela -T508X6A Underdosing of diagnostic agents, initial encounter -T508X6D Underdosing of diagnostic agents, subsequent encounter -T508X6S Underdosing of diagnostic agents, sequela -T50A11A Poisoning by pertussis vaccine, including combinations with a pertussis component, accidental (unintentional), initial encounter -T50A11D Poisoning by pertussis vaccine, including combinations with a pertussis component, accidental (unintentional), subsequent encounter -T50A11S Poisoning by pertussis vaccine, including combinations with a pertussis component, accidental (unintentional), sequela -T50A12A Poisoning by pertussis vaccine, including combinations with a pertussis component, intentional self-harm, initial encounter -T50A12D Poisoning by pertussis vaccine, including combinations with a pertussis component, intentional self-harm, subsequent encounter -T50A12S Poisoning by pertussis vaccine, including combinations with a pertussis component, intentional self-harm, sequela -T50A13A Poisoning by pertussis vaccine, including combinations with a pertussis component, assault, initial encounter -T50A13D Poisoning by pertussis vaccine, including combinations with a pertussis component, assault, subsequent encounter -T50A13S Poisoning by pertussis vaccine, including combinations with a pertussis component, assault, sequela -T50A14A Poisoning by pertussis vaccine, including combinations with a pertussis component, undetermined, initial encounter -T50A14D Poisoning by pertussis vaccine, including combinations with a pertussis component, undetermined, subsequent encounter -T50A14S Poisoning by pertussis vaccine, including combinations with a pertussis component, undetermined, sequela -T50A15A Adverse effect of pertussis vaccine, including combinations with a pertussis component, initial encounter -T50A15D Adverse effect of pertussis vaccine, including combinations with a pertussis component, subsequent encounter -T50A15S Adverse effect of pertussis vaccine, including combinations with a pertussis component, sequela -T50A16A Underdosing of pertussis vaccine, including combinations with a pertussis component, initial encounter -T50A16D Underdosing of pertussis vaccine, including combinations with a pertussis component, subsequent encounter -T50A16S Underdosing of pertussis vaccine, including combinations with a pertussis component, sequela -T50A21A Poisoning by mixed bacterial vaccines without a pertussis component, accidental (unintentional), initial encounter -T50A21D Poisoning by mixed bacterial vaccines without a pertussis component, accidental (unintentional), subsequent encounter -T50A21S Poisoning by mixed bacterial vaccines without a pertussis component, accidental (unintentional), sequela -T50A22A Poisoning by mixed bacterial vaccines without a pertussis component, intentional self-harm, initial encounter -T50A22D Poisoning by mixed bacterial vaccines without a pertussis component, intentional self-harm, subsequent encounter -T50A22S Poisoning by mixed bacterial vaccines without a pertussis component, intentional self-harm, sequela -T50A23A Poisoning by mixed bacterial vaccines without a pertussis component, assault, initial encounter -T50A23D Poisoning by mixed bacterial vaccines without a pertussis component, assault, subsequent encounter -T50A23S Poisoning by mixed bacterial vaccines without a pertussis component, assault, sequela -T50A24A Poisoning by mixed bacterial vaccines without a pertussis component, undetermined, initial encounter -T50A24D Poisoning by mixed bacterial vaccines without a pertussis component, undetermined, subsequent encounter -T50A24S Poisoning by mixed bacterial vaccines without a pertussis component, undetermined, sequela -T50A25A Adverse effect of mixed bacterial vaccines without a pertussis component, initial encounter -T50A25D Adverse effect of mixed bacterial vaccines without a pertussis component, subsequent encounter -T50A25S Adverse effect of mixed bacterial vaccines without a pertussis component, sequela -T50A26A Underdosing of mixed bacterial vaccines without a pertussis component, initial encounter -T50A26D Underdosing of mixed bacterial vaccines without a pertussis component, subsequent encounter -T50A26S Underdosing of mixed bacterial vaccines without a pertussis component, sequela -T50A91A Poisoning by other bacterial vaccines, accidental (unintentional), initial encounter -T50A91D Poisoning by other bacterial vaccines, accidental (unintentional), subsequent encounter -T50A91S Poisoning by other bacterial vaccines, accidental (unintentional), sequela -T50A92A Poisoning by other bacterial vaccines, intentional self-harm, initial encounter -T50A92D Poisoning by other bacterial vaccines, intentional self-harm, subsequent encounter -T50A92S Poisoning by other bacterial vaccines, intentional self-harm, sequela -T50A93A Poisoning by other bacterial vaccines, assault, initial encounter -T50A93D Poisoning by other bacterial vaccines, assault, subsequent encounter -T50A93S Poisoning by other bacterial vaccines, assault, sequela -T50A94A Poisoning by other bacterial vaccines, undetermined, initial encounter -T50A94D Poisoning by other bacterial vaccines, undetermined, subsequent encounter -T50A94S Poisoning by other bacterial vaccines, undetermined, sequela -T50A95A Adverse effect of other bacterial vaccines, initial encounter -T50A95D Adverse effect of other bacterial vaccines, subsequent encounter -T50A95S Adverse effect of other bacterial vaccines, sequela -T50A96A Underdosing of other bacterial vaccines, initial encounter -T50A96D Underdosing of other bacterial vaccines, subsequent encounter -T50A96S Underdosing of other bacterial vaccines, sequela -T50B11A Poisoning by smallpox vaccines, accidental (unintentional), initial encounter -T50B11D Poisoning by smallpox vaccines, accidental (unintentional), subsequent encounter -T50B11S Poisoning by smallpox vaccines, accidental (unintentional), sequela -T50B12A Poisoning by smallpox vaccines, intentional self-harm, initial encounter -T50B12D Poisoning by smallpox vaccines, intentional self-harm, subsequent encounter -T50B12S Poisoning by smallpox vaccines, intentional self-harm, sequela -T50B13A Poisoning by smallpox vaccines, assault, initial encounter -T50B13D Poisoning by smallpox vaccines, assault, subsequent encounter -T50B13S Poisoning by smallpox vaccines, assault, sequela -T50B14A Poisoning by smallpox vaccines, undetermined, initial encounter -T50B14D Poisoning by smallpox vaccines, undetermined, subsequent encounter -T50B14S Poisoning by smallpox vaccines, undetermined, sequela -T50B15A Adverse effect of smallpox vaccines, initial encounter -T50B15D Adverse effect of smallpox vaccines, subsequent encounter -T50B15S Adverse effect of smallpox vaccines, sequela -T50B16A Underdosing of smallpox vaccines, initial encounter -T50B16D Underdosing of smallpox vaccines, subsequent encounter -T50B16S Underdosing of smallpox vaccines, sequela -T50B91A Poisoning by other viral vaccines, accidental (unintentional), initial encounter -T50B91D Poisoning by other viral vaccines, accidental (unintentional), subsequent encounter -T50B91S Poisoning by other viral vaccines, accidental (unintentional), sequela -T50B92A Poisoning by other viral vaccines, intentional self-harm, initial encounter -T50B92D Poisoning by other viral vaccines, intentional self-harm, subsequent encounter -T50B92S Poisoning by other viral vaccines, intentional self-harm, sequela -T50B93A Poisoning by other viral vaccines, assault, initial encounter -T50B93D Poisoning by other viral vaccines, assault, subsequent encounter -T50B93S Poisoning by other viral vaccines, assault, sequela -T50B94A Poisoning by other viral vaccines, undetermined, initial encounter -T50B94D Poisoning by other viral vaccines, undetermined, subsequent encounter -T50B94S Poisoning by other viral vaccines, undetermined, sequela -T50B95A Adverse effect of other viral vaccines, initial encounter -T50B95D Adverse effect of other viral vaccines, subsequent encounter -T50B95S Adverse effect of other viral vaccines, sequela -T50B96A Underdosing of other viral vaccines, initial encounter -T50B96D Underdosing of other viral vaccines, subsequent encounter -T50B96S Underdosing of other viral vaccines, sequela -T50Z11A Poisoning by immunoglobulin, accidental (unintentional), initial encounter -T50Z11D Poisoning by immunoglobulin, accidental (unintentional), subsequent encounter -T50Z11S Poisoning by immunoglobulin, accidental (unintentional), sequela -T50Z12A Poisoning by immunoglobulin, intentional self-harm, initial encounter -T50Z12D Poisoning by immunoglobulin, intentional self-harm, subsequent encounter -T50Z12S Poisoning by immunoglobulin, intentional self-harm, sequela -T50Z13A Poisoning by immunoglobulin, assault, initial encounter -T50Z13D Poisoning by immunoglobulin, assault, subsequent encounter -T50Z13S Poisoning by immunoglobulin, assault, sequela -T50Z14A Poisoning by immunoglobulin, undetermined, initial encounter -T50Z14D Poisoning by immunoglobulin, undetermined, subsequent encounter -T50Z14S Poisoning by immunoglobulin, undetermined, sequela -T50Z15A Adverse effect of immunoglobulin, initial encounter -T50Z15D Adverse effect of immunoglobulin, subsequent encounter -T50Z15S Adverse effect of immunoglobulin, sequela -T50Z16A Underdosing of immunoglobulin, initial encounter -T50Z16D Underdosing of immunoglobulin, subsequent encounter -T50Z16S Underdosing of immunoglobulin, sequela -T50Z91A Poisoning by other vaccines and biological substances, accidental (unintentional), initial encounter -T50Z91D Poisoning by other vaccines and biological substances, accidental (unintentional), subsequent encounter -T50Z91S Poisoning by other vaccines and biological substances, accidental (unintentional), sequela -T50Z92A Poisoning by other vaccines and biological substances, intentional self-harm, initial encounter -T50Z92D Poisoning by other vaccines and biological substances, intentional self-harm, subsequent encounter -T50Z92S Poisoning by other vaccines and biological substances, intentional self-harm, sequela -T50Z93A Poisoning by other vaccines and biological substances, assault, initial encounter -T50Z93D Poisoning by other vaccines and biological substances, assault, subsequent encounter -T50Z93S Poisoning by other vaccines and biological substances, assault, sequela -T50Z94A Poisoning by other vaccines and biological substances, undetermined, initial encounter -T50Z94D Poisoning by other vaccines and biological substances, undetermined, subsequent encounter -T50Z94S Poisoning by other vaccines and biological substances, undetermined, sequela -T50Z95A Adverse effect of other vaccines and biological substances, initial encounter -T50Z95D Adverse effect of other vaccines and biological substances, subsequent encounter -T50Z95S Adverse effect of other vaccines and biological substances, sequela -T50Z96A Underdosing of other vaccines and biological substances, initial encounter -T50Z96D Underdosing of other vaccines and biological substances, subsequent encounter -T50Z96S Underdosing of other vaccines and biological substances, sequela -T50901A Poisoning by unspecified drugs, medicaments and biological substances, accidental (unintentional), initial encounter -T50901D Poisoning by unspecified drugs, medicaments and biological substances, accidental (unintentional), subsequent encounter -T50901S Poisoning by unspecified drugs, medicaments and biological substances, accidental (unintentional), sequela -T50902A Poisoning by unspecified drugs, medicaments and biological substances, intentional self-harm, initial encounter -T50902D Poisoning by unspecified drugs, medicaments and biological substances, intentional self-harm, subsequent encounter -T50902S Poisoning by unspecified drugs, medicaments and biological substances, intentional self-harm, sequela -T50903A Poisoning by unspecified drugs, medicaments and biological substances, assault, initial encounter -T50903D Poisoning by unspecified drugs, medicaments and biological substances, assault, subsequent encounter -T50903S Poisoning by unspecified drugs, medicaments and biological substances, assault, sequela -T50904A Poisoning by unspecified drugs, medicaments and biological substances, undetermined, initial encounter -T50904D Poisoning by unspecified drugs, medicaments and biological substances, undetermined, subsequent encounter -T50904S Poisoning by unspecified drugs, medicaments and biological substances, undetermined, sequela -T50905A Adverse effect of unspecified drugs, medicaments and biological substances, initial encounter -T50905D Adverse effect of unspecified drugs, medicaments and biological substances, subsequent encounter -T50905S Adverse effect of unspecified drugs, medicaments and biological substances, sequela -T50906A Underdosing of unspecified drugs, medicaments and biological substances, initial encounter -T50906D Underdosing of unspecified drugs, medicaments and biological substances, subsequent encounter -T50906S Underdosing of unspecified drugs, medicaments and biological substances, sequela -T50991A Poisoning by other drugs, medicaments and biological substances, accidental (unintentional), initial encounter -T50991D Poisoning by other drugs, medicaments and biological substances, accidental (unintentional), subsequent encounter -T50991S Poisoning by other drugs, medicaments and biological substances, accidental (unintentional), sequela -T50992A Poisoning by other drugs, medicaments and biological substances, intentional self-harm, initial encounter -T50992D Poisoning by other drugs, medicaments and biological substances, intentional self-harm, subsequent encounter -T50992S Poisoning by other drugs, medicaments and biological substances, intentional self-harm, sequela -T50993A Poisoning by other drugs, medicaments and biological substances, assault, initial encounter -T50993D Poisoning by other drugs, medicaments and biological substances, assault, subsequent encounter -T50993S Poisoning by other drugs, medicaments and biological substances, assault, sequela -T50994A Poisoning by other drugs, medicaments and biological substances, undetermined, initial encounter -T50994D Poisoning by other drugs, medicaments and biological substances, undetermined, subsequent encounter -T50994S Poisoning by other drugs, medicaments and biological substances, undetermined, sequela -T50995A Adverse effect of other drugs, medicaments and biological substances, initial encounter -T50995D Adverse effect of other drugs, medicaments and biological substances, subsequent encounter -T50995S Adverse effect of other drugs, medicaments and biological substances, sequela -T50996A Underdosing of other drugs, medicaments and biological substances, initial encounter -T50996D Underdosing of other drugs, medicaments and biological substances, subsequent encounter -T50996S Underdosing of other drugs, medicaments and biological substances, sequela -T510X1A Toxic effect of ethanol, accidental (unintentional), initial encounter -T510X1D Toxic effect of ethanol, accidental (unintentional), subsequent encounter -T510X1S Toxic effect of ethanol, accidental (unintentional), sequela -T510X2A Toxic effect of ethanol, intentional self-harm, initial encounter -T510X2D Toxic effect of ethanol, intentional self-harm, subsequent encounter -T510X2S Toxic effect of ethanol, intentional self-harm, sequela -T510X3A Toxic effect of ethanol, assault, initial encounter -T510X3D Toxic effect of ethanol, assault, subsequent encounter -T510X3S Toxic effect of ethanol, assault, sequela -T510X4A Toxic effect of ethanol, undetermined, initial encounter -T510X4D Toxic effect of ethanol, undetermined, subsequent encounter -T510X4S Toxic effect of ethanol, undetermined, sequela -T511X1A Toxic effect of methanol, accidental (unintentional), initial encounter -T511X1D Toxic effect of methanol, accidental (unintentional), subsequent encounter -T511X1S Toxic effect of methanol, accidental (unintentional), sequela -T511X2A Toxic effect of methanol, intentional self-harm, initial encounter -T511X2D Toxic effect of methanol, intentional self-harm, subsequent encounter -T511X2S Toxic effect of methanol, intentional self-harm, sequela -T511X3A Toxic effect of methanol, assault, initial encounter -T511X3D Toxic effect of methanol, assault, subsequent encounter -T511X3S Toxic effect of methanol, assault, sequela -T511X4A Toxic effect of methanol, undetermined, initial encounter -T511X4D Toxic effect of methanol, undetermined, subsequent encounter -T511X4S Toxic effect of methanol, undetermined, sequela -T512X1A Toxic effect of 2-Propanol, accidental (unintentional), initial encounter -T512X1D Toxic effect of 2-Propanol, accidental (unintentional), subsequent encounter -T512X1S Toxic effect of 2-Propanol, accidental (unintentional), sequela -T512X2A Toxic effect of 2-Propanol, intentional self-harm, initial encounter -T512X2D Toxic effect of 2-Propanol, intentional self-harm, subsequent encounter -T512X2S Toxic effect of 2-Propanol, intentional self-harm, sequela -T512X3A Toxic effect of 2-Propanol, assault, initial encounter -T512X3D Toxic effect of 2-Propanol, assault, subsequent encounter -T512X3S Toxic effect of 2-Propanol, assault, sequela -T512X4A Toxic effect of 2-Propanol, undetermined, initial encounter -T512X4D Toxic effect of 2-Propanol, undetermined, subsequent encounter -T512X4S Toxic effect of 2-Propanol, undetermined, sequela -T513X1A Toxic effect of fusel oil, accidental (unintentional), initial encounter -T513X1D Toxic effect of fusel oil, accidental (unintentional), subsequent encounter -T513X1S Toxic effect of fusel oil, accidental (unintentional), sequela -T513X2A Toxic effect of fusel oil, intentional self-harm, initial encounter -T513X2D Toxic effect of fusel oil, intentional self-harm, subsequent encounter -T513X2S Toxic effect of fusel oil, intentional self-harm, sequela -T513X3A Toxic effect of fusel oil, assault, initial encounter -T513X3D Toxic effect of fusel oil, assault, subsequent encounter -T513X3S Toxic effect of fusel oil, assault, sequela -T513X4A Toxic effect of fusel oil, undetermined, initial encounter -T513X4D Toxic effect of fusel oil, undetermined, subsequent encounter -T513X4S Toxic effect of fusel oil, undetermined, sequela -T518X1A Toxic effect of other alcohols, accidental (unintentional), initial encounter -T518X1D Toxic effect of other alcohols, accidental (unintentional), subsequent encounter -T518X1S Toxic effect of other alcohols, accidental (unintentional), sequela -T518X2A Toxic effect of other alcohols, intentional self-harm, initial encounter -T518X2D Toxic effect of other alcohols, intentional self-harm, subsequent encounter -T518X2S Toxic effect of other alcohols, intentional self-harm, sequela -T518X3A Toxic effect of other alcohols, assault, initial encounter -T518X3D Toxic effect of other alcohols, assault, subsequent encounter -T518X3S Toxic effect of other alcohols, assault, sequela -T518X4A Toxic effect of other alcohols, undetermined, initial encounter -T518X4D Toxic effect of other alcohols, undetermined, subsequent encounter -T518X4S Toxic effect of other alcohols, undetermined, sequela -T5191XA Toxic effect of unspecified alcohol, accidental (unintentional), initial encounter -T5191XD Toxic effect of unspecified alcohol, accidental (unintentional), subsequent encounter -T5191XS Toxic effect of unspecified alcohol, accidental (unintentional), sequela -T5192XA Toxic effect of unspecified alcohol, intentional self-harm, initial encounter -T5192XD Toxic effect of unspecified alcohol, intentional self-harm, subsequent encounter -T5192XS Toxic effect of unspecified alcohol, intentional self-harm, sequela -T5193XA Toxic effect of unspecified alcohol, assault, initial encounter -T5193XD Toxic effect of unspecified alcohol, assault, subsequent encounter -T5193XS Toxic effect of unspecified alcohol, assault, sequela -T5194XA Toxic effect of unspecified alcohol, undetermined, initial encounter -T5194XD Toxic effect of unspecified alcohol, undetermined, subsequent encounter -T5194XS Toxic effect of unspecified alcohol, undetermined, sequela -T520X1A Toxic effect of petroleum products, accidental (unintentional), initial encounter -T520X1D Toxic effect of petroleum products, accidental (unintentional), subsequent encounter -T520X1S Toxic effect of petroleum products, accidental (unintentional), sequela -T520X2A Toxic effect of petroleum products, intentional self-harm, initial encounter -T520X2D Toxic effect of petroleum products, intentional self-harm, subsequent encounter -T520X2S Toxic effect of petroleum products, intentional self-harm, sequela -T520X3A Toxic effect of petroleum products, assault, initial encounter -T520X3D Toxic effect of petroleum products, assault, subsequent encounter -T520X3S Toxic effect of petroleum products, assault, sequela -T520X4A Toxic effect of petroleum products, undetermined, initial encounter -T520X4D Toxic effect of petroleum products, undetermined, subsequent encounter -T520X4S Toxic effect of petroleum products, undetermined, sequela -T521X1A Toxic effect of benzene, accidental (unintentional), initial encounter -T521X1D Toxic effect of benzene, accidental (unintentional), subsequent encounter -T521X1S Toxic effect of benzene, accidental (unintentional), sequela -T521X2A Toxic effect of benzene, intentional self-harm, initial encounter -T521X2D Toxic effect of benzene, intentional self-harm, subsequent encounter -T521X2S Toxic effect of benzene, intentional self-harm, sequela -T521X3A Toxic effect of benzene, assault, initial encounter -T521X3D Toxic effect of benzene, assault, subsequent encounter -T521X3S Toxic effect of benzene, assault, sequela -T521X4A Toxic effect of benzene, undetermined, initial encounter -T521X4D Toxic effect of benzene, undetermined, subsequent encounter -T521X4S Toxic effect of benzene, undetermined, sequela -T522X1A Toxic effect of homologues of benzene, accidental (unintentional), initial encounter -T522X1D Toxic effect of homologues of benzene, accidental (unintentional), subsequent encounter -T522X1S Toxic effect of homologues of benzene, accidental (unintentional), sequela -T522X2A Toxic effect of homologues of benzene, intentional self-harm, initial encounter -T522X2D Toxic effect of homologues of benzene, intentional self-harm, subsequent encounter -T522X2S Toxic effect of homologues of benzene, intentional self-harm, sequela -T522X3A Toxic effect of homologues of benzene, assault, initial encounter -T522X3D Toxic effect of homologues of benzene, assault, subsequent encounter -T522X3S Toxic effect of homologues of benzene, assault, sequela -T522X4A Toxic effect of homologues of benzene, undetermined, initial encounter -T522X4D Toxic effect of homologues of benzene, undetermined, subsequent encounter -T522X4S Toxic effect of homologues of benzene, undetermined, sequela -T523X1A Toxic effect of glycols, accidental (unintentional), initial encounter -T523X1D Toxic effect of glycols, accidental (unintentional), subsequent encounter -T523X1S Toxic effect of glycols, accidental (unintentional), sequela -T523X2A Toxic effect of glycols, intentional self-harm, initial encounter -T523X2D Toxic effect of glycols, intentional self-harm, subsequent encounter -T523X2S Toxic effect of glycols, intentional self-harm, sequela -T523X3A Toxic effect of glycols, assault, initial encounter -T523X3D Toxic effect of glycols, assault, subsequent encounter -T523X3S Toxic effect of glycols, assault, sequela -T523X4A Toxic effect of glycols, undetermined, initial encounter -T523X4D Toxic effect of glycols, undetermined, subsequent encounter -T523X4S Toxic effect of glycols, undetermined, sequela -T524X1A Toxic effect of ketones, accidental (unintentional), initial encounter -T524X1D Toxic effect of ketones, accidental (unintentional), subsequent encounter -T524X1S Toxic effect of ketones, accidental (unintentional), sequela -T524X2A Toxic effect of ketones, intentional self-harm, initial encounter -T524X2D Toxic effect of ketones, intentional self-harm, subsequent encounter -T524X2S Toxic effect of ketones, intentional self-harm, sequela -T524X3A Toxic effect of ketones, assault, initial encounter -T524X3D Toxic effect of ketones, assault, subsequent encounter -T524X3S Toxic effect of ketones, assault, sequela -T524X4A Toxic effect of ketones, undetermined, initial encounter -T524X4D Toxic effect of ketones, undetermined, subsequent encounter -T524X4S Toxic effect of ketones, undetermined, sequela -T528X1A Toxic effect of other organic solvents, accidental (unintentional), initial encounter -T528X1D Toxic effect of other organic solvents, accidental (unintentional), subsequent encounter -T528X1S Toxic effect of other organic solvents, accidental (unintentional), sequela -T528X2A Toxic effect of other organic solvents, intentional self-harm, initial encounter -T528X2D Toxic effect of other organic solvents, intentional self-harm, subsequent encounter -T528X2S Toxic effect of other organic solvents, intentional self-harm, sequela -T528X3A Toxic effect of other organic solvents, assault, initial encounter -T528X3D Toxic effect of other organic solvents, assault, subsequent encounter -T528X3S Toxic effect of other organic solvents, assault, sequela -T528X4A Toxic effect of other organic solvents, undetermined, initial encounter -T528X4D Toxic effect of other organic solvents, undetermined, subsequent encounter -T528X4S Toxic effect of other organic solvents, undetermined, sequela -T5291XA Toxic effect of unspecified organic solvent, accidental (unintentional), initial encounter -T5291XD Toxic effect of unspecified organic solvent, accidental (unintentional), subsequent encounter -T5291XS Toxic effect of unspecified organic solvent, accidental (unintentional), sequela -T5292XA Toxic effect of unspecified organic solvent, intentional self-harm, initial encounter -T5292XD Toxic effect of unspecified organic solvent, intentional self-harm, subsequent encounter -T5292XS Toxic effect of unspecified organic solvent, intentional self-harm, sequela -T5293XA Toxic effect of unspecified organic solvent, assault, initial encounter -T5293XD Toxic effect of unspecified organic solvent, assault, subsequent encounter -T5293XS Toxic effect of unspecified organic solvent, assault, sequela -T5294XA Toxic effect of unspecified organic solvent, undetermined, initial encounter -T5294XD Toxic effect of unspecified organic solvent, undetermined, subsequent encounter -T5294XS Toxic effect of unspecified organic solvent, undetermined, sequela -T530X1A Toxic effect of carbon tetrachloride, accidental (unintentional), initial encounter -T530X1D Toxic effect of carbon tetrachloride, accidental (unintentional), subsequent encounter -T530X1S Toxic effect of carbon tetrachloride, accidental (unintentional), sequela -T530X2A Toxic effect of carbon tetrachloride, intentional self-harm, initial encounter -T530X2D Toxic effect of carbon tetrachloride, intentional self-harm, subsequent encounter -T530X2S Toxic effect of carbon tetrachloride, intentional self-harm, sequela -T530X3A Toxic effect of carbon tetrachloride, assault, initial encounter -T530X3D Toxic effect of carbon tetrachloride, assault, subsequent encounter -T530X3S Toxic effect of carbon tetrachloride, assault, sequela -T530X4A Toxic effect of carbon tetrachloride, undetermined, initial encounter -T530X4D Toxic effect of carbon tetrachloride, undetermined, subsequent encounter -T530X4S Toxic effect of carbon tetrachloride, undetermined, sequela -T531X1A Toxic effect of chloroform, accidental (unintentional), initial encounter -T531X1D Toxic effect of chloroform, accidental (unintentional), subsequent encounter -T531X1S Toxic effect of chloroform, accidental (unintentional), sequela -T531X2A Toxic effect of chloroform, intentional self-harm, initial encounter -T531X2D Toxic effect of chloroform, intentional self-harm, subsequent encounter -T531X2S Toxic effect of chloroform, intentional self-harm, sequela -T531X3A Toxic effect of chloroform, assault, initial encounter -T531X3D Toxic effect of chloroform, assault, subsequent encounter -T531X3S Toxic effect of chloroform, assault, sequela -T531X4A Toxic effect of chloroform, undetermined, initial encounter -T531X4D Toxic effect of chloroform, undetermined, subsequent encounter -T531X4S Toxic effect of chloroform, undetermined, sequela -T532X1A Toxic effect of trichloroethylene, accidental (unintentional), initial encounter -T532X1D Toxic effect of trichloroethylene, accidental (unintentional), subsequent encounter -T532X1S Toxic effect of trichloroethylene, accidental (unintentional), sequela -T532X2A Toxic effect of trichloroethylene, intentional self-harm, initial encounter -T532X2D Toxic effect of trichloroethylene, intentional self-harm, subsequent encounter -T532X2S Toxic effect of trichloroethylene, intentional self-harm, sequela -T532X3A Toxic effect of trichloroethylene, assault, initial encounter -T532X3D Toxic effect of trichloroethylene, assault, subsequent encounter -T532X3S Toxic effect of trichloroethylene, assault, sequela -T532X4A Toxic effect of trichloroethylene, undetermined, initial encounter -T532X4D Toxic effect of trichloroethylene, undetermined, subsequent encounter -T532X4S Toxic effect of trichloroethylene, undetermined, sequela -T533X1A Toxic effect of tetrachloroethylene, accidental (unintentional), initial encounter -T533X1D Toxic effect of tetrachloroethylene, accidental (unintentional), subsequent encounter -T533X1S Toxic effect of tetrachloroethylene, accidental (unintentional), sequela -T533X2A Toxic effect of tetrachloroethylene, intentional self-harm, initial encounter -T533X2D Toxic effect of tetrachloroethylene, intentional self-harm, subsequent encounter -T533X2S Toxic effect of tetrachloroethylene, intentional self-harm, sequela -T533X3A Toxic effect of tetrachloroethylene, assault, initial encounter -T533X3D Toxic effect of tetrachloroethylene, assault, subsequent encounter -T533X3S Toxic effect of tetrachloroethylene, assault, sequela -T533X4A Toxic effect of tetrachloroethylene, undetermined, initial encounter -T533X4D Toxic effect of tetrachloroethylene, undetermined, subsequent encounter -T533X4S Toxic effect of tetrachloroethylene, undetermined, sequela -T534X1A Toxic effect of dichloromethane, accidental (unintentional), initial encounter -T534X1D Toxic effect of dichloromethane, accidental (unintentional), subsequent encounter -T534X1S Toxic effect of dichloromethane, accidental (unintentional), sequela -T534X2A Toxic effect of dichloromethane, intentional self-harm, initial encounter -T534X2D Toxic effect of dichloromethane, intentional self-harm, subsequent encounter -T534X2S Toxic effect of dichloromethane, intentional self-harm, sequela -T534X3A Toxic effect of dichloromethane, assault, initial encounter -T534X3D Toxic effect of dichloromethane, assault, subsequent encounter -T534X3S Toxic effect of dichloromethane, assault, sequela -T534X4A Toxic effect of dichloromethane, undetermined, initial encounter -T534X4D Toxic effect of dichloromethane, undetermined, subsequent encounter -T534X4S Toxic effect of dichloromethane, undetermined, sequela -T535X1A Toxic effect of chlorofluorocarbons, accidental (unintentional), initial encounter -T535X1D Toxic effect of chlorofluorocarbons, accidental (unintentional), subsequent encounter -T535X1S Toxic effect of chlorofluorocarbons, accidental (unintentional), sequela -T535X2A Toxic effect of chlorofluorocarbons, intentional self-harm, initial encounter -T535X2D Toxic effect of chlorofluorocarbons, intentional self-harm, subsequent encounter -T535X2S Toxic effect of chlorofluorocarbons, intentional self-harm, sequela -T535X3A Toxic effect of chlorofluorocarbons, assault, initial encounter -T535X3D Toxic effect of chlorofluorocarbons, assault, subsequent encounter -T535X3S Toxic effect of chlorofluorocarbons, assault, sequela -T535X4A Toxic effect of chlorofluorocarbons, undetermined, initial encounter -T535X4D Toxic effect of chlorofluorocarbons, undetermined, subsequent encounter -T535X4S Toxic effect of chlorofluorocarbons, undetermined, sequela -T536X1A Toxic effect of other halogen derivatives of aliphatic hydrocarbons, accidental (unintentional), initial encounter -T536X1D Toxic effect of other halogen derivatives of aliphatic hydrocarbons, accidental (unintentional), subsequent encounter -T536X1S Toxic effect of other halogen derivatives of aliphatic hydrocarbons, accidental (unintentional), sequela -T536X2A Toxic effect of other halogen derivatives of aliphatic hydrocarbons, intentional self-harm, initial encounter -T536X2D Toxic effect of other halogen derivatives of aliphatic hydrocarbons, intentional self-harm, subsequent encounter -T536X2S Toxic effect of other halogen derivatives of aliphatic hydrocarbons, intentional self-harm, sequela -T536X3A Toxic effect of other halogen derivatives of aliphatic hydrocarbons, assault, initial encounter -T536X3D Toxic effect of other halogen derivatives of aliphatic hydrocarbons, assault, subsequent encounter -T536X3S Toxic effect of other halogen derivatives of aliphatic hydrocarbons, assault, sequela -T536X4A Toxic effect of other halogen derivatives of aliphatic hydrocarbons, undetermined, initial encounter -T536X4D Toxic effect of other halogen derivatives of aliphatic hydrocarbons, undetermined, subsequent encounter -T536X4S Toxic effect of other halogen derivatives of aliphatic hydrocarbons, undetermined, sequela -T537X1A Toxic effect of other halogen derivatives of aromatic hydrocarbons, accidental (unintentional), initial encounter -T537X1D Toxic effect of other halogen derivatives of aromatic hydrocarbons, accidental (unintentional), subsequent encounter -T537X1S Toxic effect of other halogen derivatives of aromatic hydrocarbons, accidental (unintentional), sequela -T537X2A Toxic effect of other halogen derivatives of aromatic hydrocarbons, intentional self-harm, initial encounter -T537X2D Toxic effect of other halogen derivatives of aromatic hydrocarbons, intentional self-harm, subsequent encounter -T537X2S Toxic effect of other halogen derivatives of aromatic hydrocarbons, intentional self-harm, sequela -T537X3A Toxic effect of other halogen derivatives of aromatic hydrocarbons, assault, initial encounter -T537X3D Toxic effect of other halogen derivatives of aromatic hydrocarbons, assault, subsequent encounter -T537X3S Toxic effect of other halogen derivatives of aromatic hydrocarbons, assault, sequela -T537X4A Toxic effect of other halogen derivatives of aromatic hydrocarbons, undetermined, initial encounter -T537X4D Toxic effect of other halogen derivatives of aromatic hydrocarbons, undetermined, subsequent encounter -T537X4S Toxic effect of other halogen derivatives of aromatic hydrocarbons, undetermined, sequela -T5391XA Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, accidental (unintentional), initial encounter -T5391XD Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, accidental (unintentional), subsequent encounter -T5391XS Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, accidental (unintentional), sequela -T5392XA Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, intentional self-harm, initial encounter -T5392XD Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, intentional self-harm, subsequent encounter -T5392XS Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, intentional self-harm, sequela -T5393XA Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, assault, initial encounter -T5393XD Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, assault, subsequent encounter -T5393XS Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, assault, sequela -T5394XA Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, undetermined, initial encounter -T5394XD Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, undetermined, subsequent encounter -T5394XS Toxic effect of unspecified halogen derivatives of aliphatic and aromatic hydrocarbons, undetermined, sequela -T540X1A Toxic effect of phenol and phenol homologues, accidental (unintentional), initial encounter -T540X1D Toxic effect of phenol and phenol homologues, accidental (unintentional), subsequent encounter -T540X1S Toxic effect of phenol and phenol homologues, accidental (unintentional), sequela -T540X2A Toxic effect of phenol and phenol homologues, intentional self-harm, initial encounter -T540X2D Toxic effect of phenol and phenol homologues, intentional self-harm, subsequent encounter -T540X2S Toxic effect of phenol and phenol homologues, intentional self-harm, sequela -T540X3A Toxic effect of phenol and phenol homologues, assault, initial encounter -T540X3D Toxic effect of phenol and phenol homologues, assault, subsequent encounter -T540X3S Toxic effect of phenol and phenol homologues, assault, sequela -T540X4A Toxic effect of phenol and phenol homologues, undetermined, initial encounter -T540X4D Toxic effect of phenol and phenol homologues, undetermined, subsequent encounter -T540X4S Toxic effect of phenol and phenol homologues, undetermined, sequela -T541X1A Toxic effect of other corrosive organic compounds, accidental (unintentional), initial encounter -T541X1D Toxic effect of other corrosive organic compounds, accidental (unintentional), subsequent encounter -T541X1S Toxic effect of other corrosive organic compounds, accidental (unintentional), sequela -T541X2A Toxic effect of other corrosive organic compounds, intentional self-harm, initial encounter -T541X2D Toxic effect of other corrosive organic compounds, intentional self-harm, subsequent encounter -T541X2S Toxic effect of other corrosive organic compounds, intentional self-harm, sequela -T541X3A Toxic effect of other corrosive organic compounds, assault, initial encounter -T541X3D Toxic effect of other corrosive organic compounds, assault, subsequent encounter -T541X3S Toxic effect of other corrosive organic compounds, assault, sequela -T541X4A Toxic effect of other corrosive organic compounds, undetermined, initial encounter -T541X4D Toxic effect of other corrosive organic compounds, undetermined, subsequent encounter -T541X4S Toxic effect of other corrosive organic compounds, undetermined, sequela -T542X1A Toxic effect of corrosive acids and acid-like substances, accidental (unintentional), initial encounter -T542X1D Toxic effect of corrosive acids and acid-like substances, accidental (unintentional), subsequent encounter -T542X1S Toxic effect of corrosive acids and acid-like substances, accidental (unintentional), sequela -T542X2A Toxic effect of corrosive acids and acid-like substances, intentional self-harm, initial encounter -T542X2D Toxic effect of corrosive acids and acid-like substances, intentional self-harm, subsequent encounter -T542X2S Toxic effect of corrosive acids and acid-like substances, intentional self-harm, sequela -T542X3A Toxic effect of corrosive acids and acid-like substances, assault, initial encounter -T542X3D Toxic effect of corrosive acids and acid-like substances, assault, subsequent encounter -T542X3S Toxic effect of corrosive acids and acid-like substances, assault, sequela -T542X4A Toxic effect of corrosive acids and acid-like substances, undetermined, initial encounter -T542X4D Toxic effect of corrosive acids and acid-like substances, undetermined, subsequent encounter -T542X4S Toxic effect of corrosive acids and acid-like substances, undetermined, sequela -T543X1A Toxic effect of corrosive alkalis and alkali-like substances, accidental (unintentional), initial encounter -T543X1D Toxic effect of corrosive alkalis and alkali-like substances, accidental (unintentional), subsequent encounter -T543X1S Toxic effect of corrosive alkalis and alkali-like substances, accidental (unintentional), sequela -T543X2A Toxic effect of corrosive alkalis and alkali-like substances, intentional self-harm, initial encounter -T543X2D Toxic effect of corrosive alkalis and alkali-like substances, intentional self-harm, subsequent encounter -T543X2S Toxic effect of corrosive alkalis and alkali-like substances, intentional self-harm, sequela -T543X3A Toxic effect of corrosive alkalis and alkali-like substances, assault, initial encounter -T543X3D Toxic effect of corrosive alkalis and alkali-like substances, assault, subsequent encounter -T543X3S Toxic effect of corrosive alkalis and alkali-like substances, assault, sequela -T543X4A Toxic effect of corrosive alkalis and alkali-like substances, undetermined, initial encounter -T543X4D Toxic effect of corrosive alkalis and alkali-like substances, undetermined, subsequent encounter -T543X4S Toxic effect of corrosive alkalis and alkali-like substances, undetermined, sequela -T5491XA Toxic effect of unspecified corrosive substance, accidental (unintentional), initial encounter -T5491XD Toxic effect of unspecified corrosive substance, accidental (unintentional), subsequent encounter -T5491XS Toxic effect of unspecified corrosive substance, accidental (unintentional), sequela -T5492XA Toxic effect of unspecified corrosive substance, intentional self-harm, initial encounter -T5492XD Toxic effect of unspecified corrosive substance, intentional self-harm, subsequent encounter -T5492XS Toxic effect of unspecified corrosive substance, intentional self-harm, sequela -T5493XA Toxic effect of unspecified corrosive substance, assault, initial encounter -T5493XD Toxic effect of unspecified corrosive substance, assault, subsequent encounter -T5493XS Toxic effect of unspecified corrosive substance, assault, sequela -T5494XA Toxic effect of unspecified corrosive substance, undetermined, initial encounter -T5494XD Toxic effect of unspecified corrosive substance, undetermined, subsequent encounter -T5494XS Toxic effect of unspecified corrosive substance, undetermined, sequela -T550X1A Toxic effect of soaps, accidental (unintentional), initial encounter -T550X1D Toxic effect of soaps, accidental (unintentional), subsequent encounter -T550X1S Toxic effect of soaps, accidental (unintentional), sequela -T550X2A Toxic effect of soaps, intentional self-harm, initial encounter -T550X2D Toxic effect of soaps, intentional self-harm, subsequent encounter -T550X2S Toxic effect of soaps, intentional self-harm, sequela -T550X3A Toxic effect of soaps, assault, initial encounter -T550X3D Toxic effect of soaps, assault, subsequent encounter -T550X3S Toxic effect of soaps, assault, sequela -T550X4A Toxic effect of soaps, undetermined, initial encounter -T550X4D Toxic effect of soaps, undetermined, subsequent encounter -T550X4S Toxic effect of soaps, undetermined, sequela -T551X1A Toxic effect of detergents, accidental (unintentional), initial encounter -T551X1D Toxic effect of detergents, accidental (unintentional), subsequent encounter -T551X1S Toxic effect of detergents, accidental (unintentional), sequela -T551X2A Toxic effect of detergents, intentional self-harm, initial encounter -T551X2D Toxic effect of detergents, intentional self-harm, subsequent encounter -T551X2S Toxic effect of detergents, intentional self-harm, sequela -T551X3A Toxic effect of detergents, assault, initial encounter -T551X3D Toxic effect of detergents, assault, subsequent encounter -T551X3S Toxic effect of detergents, assault, sequela -T551X4A Toxic effect of detergents, undetermined, initial encounter -T551X4D Toxic effect of detergents, undetermined, subsequent encounter -T551X4S Toxic effect of detergents, undetermined, sequela -T560X1A Toxic effect of lead and its compounds, accidental (unintentional), initial encounter -T560X1D Toxic effect of lead and its compounds, accidental (unintentional), subsequent encounter -T560X1S Toxic effect of lead and its compounds, accidental (unintentional), sequela -T560X2A Toxic effect of lead and its compounds, intentional self-harm, initial encounter -T560X2D Toxic effect of lead and its compounds, intentional self-harm, subsequent encounter -T560X2S Toxic effect of lead and its compounds, intentional self-harm, sequela -T560X3A Toxic effect of lead and its compounds, assault, initial encounter -T560X3D Toxic effect of lead and its compounds, assault, subsequent encounter -T560X3S Toxic effect of lead and its compounds, assault, sequela -T560X4A Toxic effect of lead and its compounds, undetermined, initial encounter -T560X4D Toxic effect of lead and its compounds, undetermined, subsequent encounter -T560X4S Toxic effect of lead and its compounds, undetermined, sequela -T561X1A Toxic effect of mercury and its compounds, accidental (unintentional), initial encounter -T561X1D Toxic effect of mercury and its compounds, accidental (unintentional), subsequent encounter -T561X1S Toxic effect of mercury and its compounds, accidental (unintentional), sequela -T561X2A Toxic effect of mercury and its compounds, intentional self-harm, initial encounter -T561X2D Toxic effect of mercury and its compounds, intentional self-harm, subsequent encounter -T561X2S Toxic effect of mercury and its compounds, intentional self-harm, sequela -T561X3A Toxic effect of mercury and its compounds, assault, initial encounter -T561X3D Toxic effect of mercury and its compounds, assault, subsequent encounter -T561X3S Toxic effect of mercury and its compounds, assault, sequela -T561X4A Toxic effect of mercury and its compounds, undetermined, initial encounter -T561X4D Toxic effect of mercury and its compounds, undetermined, subsequent encounter -T561X4S Toxic effect of mercury and its compounds, undetermined, sequela -T562X1A Toxic effect of chromium and its compounds, accidental (unintentional), initial encounter -T562X1D Toxic effect of chromium and its compounds, accidental (unintentional), subsequent encounter -T562X1S Toxic effect of chromium and its compounds, accidental (unintentional), sequela -T562X2A Toxic effect of chromium and its compounds, intentional self-harm, initial encounter -T562X2D Toxic effect of chromium and its compounds, intentional self-harm, subsequent encounter -T562X2S Toxic effect of chromium and its compounds, intentional self-harm, sequela -T562X3A Toxic effect of chromium and its compounds, assault, initial encounter -T562X3D Toxic effect of chromium and its compounds, assault, subsequent encounter -T562X3S Toxic effect of chromium and its compounds, assault, sequela -T562X4A Toxic effect of chromium and its compounds, undetermined, initial encounter -T562X4D Toxic effect of chromium and its compounds, undetermined, subsequent encounter -T562X4S Toxic effect of chromium and its compounds, undetermined, sequela -T563X1A Toxic effect of cadmium and its compounds, accidental (unintentional), initial encounter -T563X1D Toxic effect of cadmium and its compounds, accidental (unintentional), subsequent encounter -T563X1S Toxic effect of cadmium and its compounds, accidental (unintentional), sequela -T563X2A Toxic effect of cadmium and its compounds, intentional self-harm, initial encounter -T563X2D Toxic effect of cadmium and its compounds, intentional self-harm, subsequent encounter -T563X2S Toxic effect of cadmium and its compounds, intentional self-harm, sequela -T563X3A Toxic effect of cadmium and its compounds, assault, initial encounter -T563X3D Toxic effect of cadmium and its compounds, assault, subsequent encounter -T563X3S Toxic effect of cadmium and its compounds, assault, sequela -T563X4A Toxic effect of cadmium and its compounds, undetermined, initial encounter -T563X4D Toxic effect of cadmium and its compounds, undetermined, subsequent encounter -T563X4S Toxic effect of cadmium and its compounds, undetermined, sequela -T564X1A Toxic effect of copper and its compounds, accidental (unintentional), initial encounter -T564X1D Toxic effect of copper and its compounds, accidental (unintentional), subsequent encounter -T564X1S Toxic effect of copper and its compounds, accidental (unintentional), sequela -T564X2A Toxic effect of copper and its compounds, intentional self-harm, initial encounter -T564X2D Toxic effect of copper and its compounds, intentional self-harm, subsequent encounter -T564X2S Toxic effect of copper and its compounds, intentional self-harm, sequela -T564X3A Toxic effect of copper and its compounds, assault, initial encounter -T564X3D Toxic effect of copper and its compounds, assault, subsequent encounter -T564X3S Toxic effect of copper and its compounds, assault, sequela -T564X4A Toxic effect of copper and its compounds, undetermined, initial encounter -T564X4D Toxic effect of copper and its compounds, undetermined, subsequent encounter -T564X4S Toxic effect of copper and its compounds, undetermined, sequela -T565X1A Toxic effect of zinc and its compounds, accidental (unintentional), initial encounter -T565X1D Toxic effect of zinc and its compounds, accidental (unintentional), subsequent encounter -T565X1S Toxic effect of zinc and its compounds, accidental (unintentional), sequela -T565X2A Toxic effect of zinc and its compounds, intentional self-harm, initial encounter -T565X2D Toxic effect of zinc and its compounds, intentional self-harm, subsequent encounter -T565X2S Toxic effect of zinc and its compounds, intentional self-harm, sequela -T565X3A Toxic effect of zinc and its compounds, assault, initial encounter -T565X3D Toxic effect of zinc and its compounds, assault, subsequent encounter -T565X3S Toxic effect of zinc and its compounds, assault, sequela -T565X4A Toxic effect of zinc and its compounds, undetermined, initial encounter -T565X4D Toxic effect of zinc and its compounds, undetermined, subsequent encounter -T565X4S Toxic effect of zinc and its compounds, undetermined, sequela -T566X1A Toxic effect of tin and its compounds, accidental (unintentional), initial encounter -T566X1D Toxic effect of tin and its compounds, accidental (unintentional), subsequent encounter -T566X1S Toxic effect of tin and its compounds, accidental (unintentional), sequela -T566X2A Toxic effect of tin and its compounds, intentional self-harm, initial encounter -T566X2D Toxic effect of tin and its compounds, intentional self-harm, subsequent encounter -T566X2S Toxic effect of tin and its compounds, intentional self-harm, sequela -T566X3A Toxic effect of tin and its compounds, assault, initial encounter -T566X3D Toxic effect of tin and its compounds, assault, subsequent encounter -T566X3S Toxic effect of tin and its compounds, assault, sequela -T566X4A Toxic effect of tin and its compounds, undetermined, initial encounter -T566X4D Toxic effect of tin and its compounds, undetermined, subsequent encounter -T566X4S Toxic effect of tin and its compounds, undetermined, sequela -T567X1A Toxic effect of beryllium and its compounds, accidental (unintentional), initial encounter -T567X1D Toxic effect of beryllium and its compounds, accidental (unintentional), subsequent encounter -T567X1S Toxic effect of beryllium and its compounds, accidental (unintentional), sequela -T567X2A Toxic effect of beryllium and its compounds, intentional self-harm, initial encounter -T567X2D Toxic effect of beryllium and its compounds, intentional self-harm, subsequent encounter -T567X2S Toxic effect of beryllium and its compounds, intentional self-harm, sequela -T567X3A Toxic effect of beryllium and its compounds, assault, initial encounter -T567X3D Toxic effect of beryllium and its compounds, assault, subsequent encounter -T567X3S Toxic effect of beryllium and its compounds, assault, sequela -T567X4A Toxic effect of beryllium and its compounds, undetermined, initial encounter -T567X4D Toxic effect of beryllium and its compounds, undetermined, subsequent encounter -T567X4S Toxic effect of beryllium and its compounds, undetermined, sequela -T56811A Toxic effect of thallium, accidental (unintentional), initial encounter -T56811D Toxic effect of thallium, accidental (unintentional), subsequent encounter -T56811S Toxic effect of thallium, accidental (unintentional), sequela -T56812A Toxic effect of thallium, intentional self-harm, initial encounter -T56812D Toxic effect of thallium, intentional self-harm, subsequent encounter -T56812S Toxic effect of thallium, intentional self-harm, sequela -T56813A Toxic effect of thallium, assault, initial encounter -T56813D Toxic effect of thallium, assault, subsequent encounter -T56813S Toxic effect of thallium, assault, sequela -T56814A Toxic effect of thallium, undetermined, initial encounter -T56814D Toxic effect of thallium, undetermined, subsequent encounter -T56814S Toxic effect of thallium, undetermined, sequela -T56891A Toxic effect of other metals, accidental (unintentional), initial encounter -T56891D Toxic effect of other metals, accidental (unintentional), subsequent encounter -T56891S Toxic effect of other metals, accidental (unintentional), sequela -T56892A Toxic effect of other metals, intentional self-harm, initial encounter -T56892D Toxic effect of other metals, intentional self-harm, subsequent encounter -T56892S Toxic effect of other metals, intentional self-harm, sequela -T56893A Toxic effect of other metals, assault, initial encounter -T56893D Toxic effect of other metals, assault, subsequent encounter -T56893S Toxic effect of other metals, assault, sequela -T56894A Toxic effect of other metals, undetermined, initial encounter -T56894D Toxic effect of other metals, undetermined, subsequent encounter -T56894S Toxic effect of other metals, undetermined, sequela -T5691XA Toxic effect of unspecified metal, accidental (unintentional), initial encounter -T5691XD Toxic effect of unspecified metal, accidental (unintentional), subsequent encounter -T5691XS Toxic effect of unspecified metal, accidental (unintentional), sequela -T5692XA Toxic effect of unspecified metal, intentional self-harm, initial encounter -T5692XD Toxic effect of unspecified metal, intentional self-harm, subsequent encounter -T5692XS Toxic effect of unspecified metal, intentional self-harm, sequela -T5693XA Toxic effect of unspecified metal, assault, initial encounter -T5693XD Toxic effect of unspecified metal, assault, subsequent encounter -T5693XS Toxic effect of unspecified metal, assault, sequela -T5694XA Toxic effect of unspecified metal, undetermined, initial encounter -T5694XD Toxic effect of unspecified metal, undetermined, subsequent encounter -T5694XS Toxic effect of unspecified metal, undetermined, sequela -T570X1A Toxic effect of arsenic and its compounds, accidental (unintentional), initial encounter -T570X1D Toxic effect of arsenic and its compounds, accidental (unintentional), subsequent encounter -T570X1S Toxic effect of arsenic and its compounds, accidental (unintentional), sequela -T570X2A Toxic effect of arsenic and its compounds, intentional self-harm, initial encounter -T570X2D Toxic effect of arsenic and its compounds, intentional self-harm, subsequent encounter -T570X2S Toxic effect of arsenic and its compounds, intentional self-harm, sequela -T570X3A Toxic effect of arsenic and its compounds, assault, initial encounter -T570X3D Toxic effect of arsenic and its compounds, assault, subsequent encounter -T570X3S Toxic effect of arsenic and its compounds, assault, sequela -T570X4A Toxic effect of arsenic and its compounds, undetermined, initial encounter -T570X4D Toxic effect of arsenic and its compounds, undetermined, subsequent encounter -T570X4S Toxic effect of arsenic and its compounds, undetermined, sequela -T571X1A Toxic effect of phosphorus and its compounds, accidental (unintentional), initial encounter -T571X1D Toxic effect of phosphorus and its compounds, accidental (unintentional), subsequent encounter -T571X1S Toxic effect of phosphorus and its compounds, accidental (unintentional), sequela -T571X2A Toxic effect of phosphorus and its compounds, intentional self-harm, initial encounter -T571X2D Toxic effect of phosphorus and its compounds, intentional self-harm, subsequent encounter -T571X2S Toxic effect of phosphorus and its compounds, intentional self-harm, sequela -T571X3A Toxic effect of phosphorus and its compounds, assault, initial encounter -T571X3D Toxic effect of phosphorus and its compounds, assault, subsequent encounter -T571X3S Toxic effect of phosphorus and its compounds, assault, sequela -T571X4A Toxic effect of phosphorus and its compounds, undetermined, initial encounter -T571X4D Toxic effect of phosphorus and its compounds, undetermined, subsequent encounter -T571X4S Toxic effect of phosphorus and its compounds, undetermined, sequela -T572X1A Toxic effect of manganese and its compounds, accidental (unintentional), initial encounter -T572X1D Toxic effect of manganese and its compounds, accidental (unintentional), subsequent encounter -T572X1S Toxic effect of manganese and its compounds, accidental (unintentional), sequela -T572X2A Toxic effect of manganese and its compounds, intentional self-harm, initial encounter -T572X2D Toxic effect of manganese and its compounds, intentional self-harm, subsequent encounter -T572X2S Toxic effect of manganese and its compounds, intentional self-harm, sequela -T572X3A Toxic effect of manganese and its compounds, assault, initial encounter -T572X3D Toxic effect of manganese and its compounds, assault, subsequent encounter -T572X3S Toxic effect of manganese and its compounds, assault, sequela -T572X4A Toxic effect of manganese and its compounds, undetermined, initial encounter -T572X4D Toxic effect of manganese and its compounds, undetermined, subsequent encounter -T572X4S Toxic effect of manganese and its compounds, undetermined, sequela -T573X1A Toxic effect of hydrogen cyanide, accidental (unintentional), initial encounter -T573X1D Toxic effect of hydrogen cyanide, accidental (unintentional), subsequent encounter -T573X1S Toxic effect of hydrogen cyanide, accidental (unintentional), sequela -T573X2A Toxic effect of hydrogen cyanide, intentional self-harm, initial encounter -T573X2D Toxic effect of hydrogen cyanide, intentional self-harm, subsequent encounter -T573X2S Toxic effect of hydrogen cyanide, intentional self-harm, sequela -T573X3A Toxic effect of hydrogen cyanide, assault, initial encounter -T573X3D Toxic effect of hydrogen cyanide, assault, subsequent encounter -T573X3S Toxic effect of hydrogen cyanide, assault, sequela -T573X4A Toxic effect of hydrogen cyanide, undetermined, initial encounter -T573X4D Toxic effect of hydrogen cyanide, undetermined, subsequent encounter -T573X4S Toxic effect of hydrogen cyanide, undetermined, sequela -T578X1A Toxic effect of other specified inorganic substances, accidental (unintentional), initial encounter -T578X1D Toxic effect of other specified inorganic substances, accidental (unintentional), subsequent encounter -T578X1S Toxic effect of other specified inorganic substances, accidental (unintentional), sequela -T578X2A Toxic effect of other specified inorganic substances, intentional self-harm, initial encounter -T578X2D Toxic effect of other specified inorganic substances, intentional self-harm, subsequent encounter -T578X2S Toxic effect of other specified inorganic substances, intentional self-harm, sequela -T578X3A Toxic effect of other specified inorganic substances, assault, initial encounter -T578X3D Toxic effect of other specified inorganic substances, assault, subsequent encounter -T578X3S Toxic effect of other specified inorganic substances, assault, sequela -T578X4A Toxic effect of other specified inorganic substances, undetermined, initial encounter -T578X4D Toxic effect of other specified inorganic substances, undetermined, subsequent encounter -T578X4S Toxic effect of other specified inorganic substances, undetermined, sequela -T5791XA Toxic effect of unspecified inorganic substance, accidental (unintentional), initial encounter -T5791XD Toxic effect of unspecified inorganic substance, accidental (unintentional), subsequent encounter -T5791XS Toxic effect of unspecified inorganic substance, accidental (unintentional), sequela -T5792XA Toxic effect of unspecified inorganic substance, intentional self-harm, initial encounter -T5792XD Toxic effect of unspecified inorganic substance, intentional self-harm, subsequent encounter -T5792XS Toxic effect of unspecified inorganic substance, intentional self-harm, sequela -T5793XA Toxic effect of unspecified inorganic substance, assault, initial encounter -T5793XD Toxic effect of unspecified inorganic substance, assault, subsequent encounter -T5793XS Toxic effect of unspecified inorganic substance, assault, sequela -T5794XA Toxic effect of unspecified inorganic substance, undetermined, initial encounter -T5794XD Toxic effect of unspecified inorganic substance, undetermined, subsequent encounter -T5794XS Toxic effect of unspecified inorganic substance, undetermined, sequela -T5801XA Toxic effect of carbon monoxide from motor vehicle exhaust, accidental (unintentional), initial encounter -T5801XD Toxic effect of carbon monoxide from motor vehicle exhaust, accidental (unintentional), subsequent encounter -T5801XS Toxic effect of carbon monoxide from motor vehicle exhaust, accidental (unintentional), sequela -T5802XA Toxic effect of carbon monoxide from motor vehicle exhaust, intentional self-harm, initial encounter -T5802XD Toxic effect of carbon monoxide from motor vehicle exhaust, intentional self-harm, subsequent encounter -T5802XS Toxic effect of carbon monoxide from motor vehicle exhaust, intentional self-harm, sequela -T5803XA Toxic effect of carbon monoxide from motor vehicle exhaust, assault, initial encounter -T5803XD Toxic effect of carbon monoxide from motor vehicle exhaust, assault, subsequent encounter -T5803XS Toxic effect of carbon monoxide from motor vehicle exhaust, assault, sequela -T5804XA Toxic effect of carbon monoxide from motor vehicle exhaust, undetermined, initial encounter -T5804XD Toxic effect of carbon monoxide from motor vehicle exhaust, undetermined, subsequent encounter -T5804XS Toxic effect of carbon monoxide from motor vehicle exhaust, undetermined, sequela -T5811XA Toxic effect of carbon monoxide from utility gas, accidental (unintentional), initial encounter -T5811XD Toxic effect of carbon monoxide from utility gas, accidental (unintentional), subsequent encounter -T5811XS Toxic effect of carbon monoxide from utility gas, accidental (unintentional), sequela -T5812XA Toxic effect of carbon monoxide from utility gas, intentional self-harm, initial encounter -T5812XD Toxic effect of carbon monoxide from utility gas, intentional self-harm, subsequent encounter -T5812XS Toxic effect of carbon monoxide from utility gas, intentional self-harm, sequela -T5813XA Toxic effect of carbon monoxide from utility gas, assault, initial encounter -T5813XD Toxic effect of carbon monoxide from utility gas, assault, subsequent encounter -T5813XS Toxic effect of carbon monoxide from utility gas, assault, sequela -T5814XA Toxic effect of carbon monoxide from utility gas, undetermined, initial encounter -T5814XD Toxic effect of carbon monoxide from utility gas, undetermined, subsequent encounter -T5814XS Toxic effect of carbon monoxide from utility gas, undetermined, sequela -T582X1A Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, accidental (unintentional), initial encounter -T582X1D Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, accidental (unintentional), subsequent encounter -T582X1S Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, accidental (unintentional), sequela -T582X2A Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, intentional self-harm, initial encounter -T582X2D Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, intentional self-harm, subsequent encounter -T582X2S Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, intentional self-harm, sequela -T582X3A Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, assault, initial encounter -T582X3D Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, assault, subsequent encounter -T582X3S Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, assault, sequela -T582X4A Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, undetermined, initial encounter -T582X4D Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, undetermined, subsequent encounter -T582X4S Toxic effect of carbon monoxide from incomplete combustion of other domestic fuels, undetermined, sequela -T588X1A Toxic effect of carbon monoxide from other source, accidental (unintentional), initial encounter -T588X1D Toxic effect of carbon monoxide from other source, accidental (unintentional), subsequent encounter -T588X1S Toxic effect of carbon monoxide from other source, accidental (unintentional), sequela -T588X2A Toxic effect of carbon monoxide from other source, intentional self-harm, initial encounter -T588X2D Toxic effect of carbon monoxide from other source, intentional self-harm, subsequent encounter -T588X2S Toxic effect of carbon monoxide from other source, intentional self-harm, sequela -T588X3A Toxic effect of carbon monoxide from other source, assault, initial encounter -T588X3D Toxic effect of carbon monoxide from other source, assault, subsequent encounter -T588X3S Toxic effect of carbon monoxide from other source, assault, sequela -T588X4A Toxic effect of carbon monoxide from other source, undetermined, initial encounter -T588X4D Toxic effect of carbon monoxide from other source, undetermined, subsequent encounter -T588X4S Toxic effect of carbon monoxide from other source, undetermined, sequela -T5891XA Toxic effect of carbon monoxide from unspecified source, accidental (unintentional), initial encounter -T5891XD Toxic effect of carbon monoxide from unspecified source, accidental (unintentional), subsequent encounter -T5891XS Toxic effect of carbon monoxide from unspecified source, accidental (unintentional), sequela -T5892XA Toxic effect of carbon monoxide from unspecified source, intentional self-harm, initial encounter -T5892XD Toxic effect of carbon monoxide from unspecified source, intentional self-harm, subsequent encounter -T5892XS Toxic effect of carbon monoxide from unspecified source, intentional self-harm, sequela -T5893XA Toxic effect of carbon monoxide from unspecified source, assault, initial encounter -T5893XD Toxic effect of carbon monoxide from unspecified source, assault, subsequent encounter -T5893XS Toxic effect of carbon monoxide from unspecified source, assault, sequela -T5894XA Toxic effect of carbon monoxide from unspecified source, undetermined, initial encounter -T5894XD Toxic effect of carbon monoxide from unspecified source, undetermined, subsequent encounter -T5894XS Toxic effect of carbon monoxide from unspecified source, undetermined, sequela -T590X1A Toxic effect of nitrogen oxides, accidental (unintentional), initial encounter -T590X1D Toxic effect of nitrogen oxides, accidental (unintentional), subsequent encounter -T590X1S Toxic effect of nitrogen oxides, accidental (unintentional), sequela -T590X2A Toxic effect of nitrogen oxides, intentional self-harm, initial encounter -T590X2D Toxic effect of nitrogen oxides, intentional self-harm, subsequent encounter -T590X2S Toxic effect of nitrogen oxides, intentional self-harm, sequela -T590X3A Toxic effect of nitrogen oxides, assault, initial encounter -T590X3D Toxic effect of nitrogen oxides, assault, subsequent encounter -T590X3S Toxic effect of nitrogen oxides, assault, sequela -T590X4A Toxic effect of nitrogen oxides, undetermined, initial encounter -T590X4D Toxic effect of nitrogen oxides, undetermined, subsequent encounter -T590X4S Toxic effect of nitrogen oxides, undetermined, sequela -T591X1A Toxic effect of sulfur dioxide, accidental (unintentional), initial encounter -T591X1D Toxic effect of sulfur dioxide, accidental (unintentional), subsequent encounter -T591X1S Toxic effect of sulfur dioxide, accidental (unintentional), sequela -T591X2A Toxic effect of sulfur dioxide, intentional self-harm, initial encounter -T591X2D Toxic effect of sulfur dioxide, intentional self-harm, subsequent encounter -T591X2S Toxic effect of sulfur dioxide, intentional self-harm, sequela -T591X3A Toxic effect of sulfur dioxide, assault, initial encounter -T591X3D Toxic effect of sulfur dioxide, assault, subsequent encounter -T591X3S Toxic effect of sulfur dioxide, assault, sequela -T591X4A Toxic effect of sulfur dioxide, undetermined, initial encounter -T591X4D Toxic effect of sulfur dioxide, undetermined, subsequent encounter -T591X4S Toxic effect of sulfur dioxide, undetermined, sequela -T592X1A Toxic effect of formaldehyde, accidental (unintentional), initial encounter -T592X1D Toxic effect of formaldehyde, accidental (unintentional), subsequent encounter -T592X1S Toxic effect of formaldehyde, accidental (unintentional), sequela -T592X2A Toxic effect of formaldehyde, intentional self-harm, initial encounter -T592X2D Toxic effect of formaldehyde, intentional self-harm, subsequent encounter -T592X2S Toxic effect of formaldehyde, intentional self-harm, sequela -T592X3A Toxic effect of formaldehyde, assault, initial encounter -T592X3D Toxic effect of formaldehyde, assault, subsequent encounter -T592X3S Toxic effect of formaldehyde, assault, sequela -T592X4A Toxic effect of formaldehyde, undetermined, initial encounter -T592X4D Toxic effect of formaldehyde, undetermined, subsequent encounter -T592X4S Toxic effect of formaldehyde, undetermined, sequela -T593X1A Toxic effect of lacrimogenic gas, accidental (unintentional), initial encounter -T593X1D Toxic effect of lacrimogenic gas, accidental (unintentional), subsequent encounter -T593X1S Toxic effect of lacrimogenic gas, accidental (unintentional), sequela -T593X2A Toxic effect of lacrimogenic gas, intentional self-harm, initial encounter -T593X2D Toxic effect of lacrimogenic gas, intentional self-harm, subsequent encounter -T593X2S Toxic effect of lacrimogenic gas, intentional self-harm, sequela -T593X3A Toxic effect of lacrimogenic gas, assault, initial encounter -T593X3D Toxic effect of lacrimogenic gas, assault, subsequent encounter -T593X3S Toxic effect of lacrimogenic gas, assault, sequela -T593X4A Toxic effect of lacrimogenic gas, undetermined, initial encounter -T593X4D Toxic effect of lacrimogenic gas, undetermined, subsequent encounter -T593X4S Toxic effect of lacrimogenic gas, undetermined, sequela -T594X1A Toxic effect of chlorine gas, accidental (unintentional), initial encounter -T594X1D Toxic effect of chlorine gas, accidental (unintentional), subsequent encounter -T594X1S Toxic effect of chlorine gas, accidental (unintentional), sequela -T594X2A Toxic effect of chlorine gas, intentional self-harm, initial encounter -T594X2D Toxic effect of chlorine gas, intentional self-harm, subsequent encounter -T594X2S Toxic effect of chlorine gas, intentional self-harm, sequela -T594X3A Toxic effect of chlorine gas, assault, initial encounter -T594X3D Toxic effect of chlorine gas, assault, subsequent encounter -T594X3S Toxic effect of chlorine gas, assault, sequela -T594X4A Toxic effect of chlorine gas, undetermined, initial encounter -T594X4D Toxic effect of chlorine gas, undetermined, subsequent encounter -T594X4S Toxic effect of chlorine gas, undetermined, sequela -T595X1A Toxic effect of fluorine gas and hydrogen fluoride, accidental (unintentional), initial encounter -T595X1D Toxic effect of fluorine gas and hydrogen fluoride, accidental (unintentional), subsequent encounter -T595X1S Toxic effect of fluorine gas and hydrogen fluoride, accidental (unintentional), sequela -T595X2A Toxic effect of fluorine gas and hydrogen fluoride, intentional self-harm, initial encounter -T595X2D Toxic effect of fluorine gas and hydrogen fluoride, intentional self-harm, subsequent encounter -T595X2S Toxic effect of fluorine gas and hydrogen fluoride, intentional self-harm, sequela -T595X3A Toxic effect of fluorine gas and hydrogen fluoride, assault, initial encounter -T595X3D Toxic effect of fluorine gas and hydrogen fluoride, assault, subsequent encounter -T595X3S Toxic effect of fluorine gas and hydrogen fluoride, assault, sequela -T595X4A Toxic effect of fluorine gas and hydrogen fluoride, undetermined, initial encounter -T595X4D Toxic effect of fluorine gas and hydrogen fluoride, undetermined, subsequent encounter -T595X4S Toxic effect of fluorine gas and hydrogen fluoride, undetermined, sequela -T596X1A Toxic effect of hydrogen sulfide, accidental (unintentional), initial encounter -T596X1D Toxic effect of hydrogen sulfide, accidental (unintentional), subsequent encounter -T596X1S Toxic effect of hydrogen sulfide, accidental (unintentional), sequela -T596X2A Toxic effect of hydrogen sulfide, intentional self-harm, initial encounter -T596X2D Toxic effect of hydrogen sulfide, intentional self-harm, subsequent encounter -T596X2S Toxic effect of hydrogen sulfide, intentional self-harm, sequela -T596X3A Toxic effect of hydrogen sulfide, assault, initial encounter -T596X3D Toxic effect of hydrogen sulfide, assault, subsequent encounter -T596X3S Toxic effect of hydrogen sulfide, assault, sequela -T596X4A Toxic effect of hydrogen sulfide, undetermined, initial encounter -T596X4D Toxic effect of hydrogen sulfide, undetermined, subsequent encounter -T596X4S Toxic effect of hydrogen sulfide, undetermined, sequela -T597X1A Toxic effect of carbon dioxide, accidental (unintentional), initial encounter -T597X1D Toxic effect of carbon dioxide, accidental (unintentional), subsequent encounter -T597X1S Toxic effect of carbon dioxide, accidental (unintentional), sequela -T597X2A Toxic effect of carbon dioxide, intentional self-harm, initial encounter -T597X2D Toxic effect of carbon dioxide, intentional self-harm, subsequent encounter -T597X2S Toxic effect of carbon dioxide, intentional self-harm, sequela -T597X3A Toxic effect of carbon dioxide, assault, initial encounter -T597X3D Toxic effect of carbon dioxide, assault, subsequent encounter -T597X3S Toxic effect of carbon dioxide, assault, sequela -T597X4A Toxic effect of carbon dioxide, undetermined, initial encounter -T597X4D Toxic effect of carbon dioxide, undetermined, subsequent encounter -T597X4S Toxic effect of carbon dioxide, undetermined, sequela -T59811A Toxic effect of smoke, accidental (unintentional), initial encounter -T59811D Toxic effect of smoke, accidental (unintentional), subsequent encounter -T59811S Toxic effect of smoke, accidental (unintentional), sequela -T59812A Toxic effect of smoke, intentional self-harm, initial encounter -T59812D Toxic effect of smoke, intentional self-harm, subsequent encounter -T59812S Toxic effect of smoke, intentional self-harm, sequela -T59813A Toxic effect of smoke, assault, initial encounter -T59813D Toxic effect of smoke, assault, subsequent encounter -T59813S Toxic effect of smoke, assault, sequela -T59814A Toxic effect of smoke, undetermined, initial encounter -T59814D Toxic effect of smoke, undetermined, subsequent encounter -T59814S Toxic effect of smoke, undetermined, sequela -T59891A Toxic effect of other specified gases, fumes and vapors, accidental (unintentional), initial encounter -T59891D Toxic effect of other specified gases, fumes and vapors, accidental (unintentional), subsequent encounter -T59891S Toxic effect of other specified gases, fumes and vapors, accidental (unintentional), sequela -T59892A Toxic effect of other specified gases, fumes and vapors, intentional self-harm, initial encounter -T59892D Toxic effect of other specified gases, fumes and vapors, intentional self-harm, subsequent encounter -T59892S Toxic effect of other specified gases, fumes and vapors, intentional self-harm, sequela -T59893A Toxic effect of other specified gases, fumes and vapors, assault, initial encounter -T59893D Toxic effect of other specified gases, fumes and vapors, assault, subsequent encounter -T59893S Toxic effect of other specified gases, fumes and vapors, assault, sequela -T59894A Toxic effect of other specified gases, fumes and vapors, undetermined, initial encounter -T59894D Toxic effect of other specified gases, fumes and vapors, undetermined, subsequent encounter -T59894S Toxic effect of other specified gases, fumes and vapors, undetermined, sequela -T5991XA Toxic effect of unspecified gases, fumes and vapors, accidental (unintentional), initial encounter -T5991XD Toxic effect of unspecified gases, fumes and vapors, accidental (unintentional), subsequent encounter -T5991XS Toxic effect of unspecified gases, fumes and vapors, accidental (unintentional), sequela -T5992XA Toxic effect of unspecified gases, fumes and vapors, intentional self-harm, initial encounter -T5992XD Toxic effect of unspecified gases, fumes and vapors, intentional self-harm, subsequent encounter -T5992XS Toxic effect of unspecified gases, fumes and vapors, intentional self-harm, sequela -T5993XA Toxic effect of unspecified gases, fumes and vapors, assault, initial encounter -T5993XD Toxic effect of unspecified gases, fumes and vapors, assault, subsequent encounter -T5993XS Toxic effect of unspecified gases, fumes and vapors, assault, sequela -T5994XA Toxic effect of unspecified gases, fumes and vapors, undetermined, initial encounter -T5994XD Toxic effect of unspecified gases, fumes and vapors, undetermined, subsequent encounter -T5994XS Toxic effect of unspecified gases, fumes and vapors, undetermined, sequela -T600X1A Toxic effect of organophosphate and carbamate insecticides, accidental (unintentional), initial encounter -T600X1D Toxic effect of organophosphate and carbamate insecticides, accidental (unintentional), subsequent encounter -T600X1S Toxic effect of organophosphate and carbamate insecticides, accidental (unintentional), sequela -T600X2A Toxic effect of organophosphate and carbamate insecticides, intentional self-harm, initial encounter -T600X2D Toxic effect of organophosphate and carbamate insecticides, intentional self-harm, subsequent encounter -T600X2S Toxic effect of organophosphate and carbamate insecticides, intentional self-harm, sequela -T600X3A Toxic effect of organophosphate and carbamate insecticides, assault, initial encounter -T600X3D Toxic effect of organophosphate and carbamate insecticides, assault, subsequent encounter -T600X3S Toxic effect of organophosphate and carbamate insecticides, assault, sequela -T600X4A Toxic effect of organophosphate and carbamate insecticides, undetermined, initial encounter -T600X4D Toxic effect of organophosphate and carbamate insecticides, undetermined, subsequent encounter -T600X4S Toxic effect of organophosphate and carbamate insecticides, undetermined, sequela -T601X1A Toxic effect of halogenated insecticides, accidental (unintentional), initial encounter -T601X1D Toxic effect of halogenated insecticides, accidental (unintentional), subsequent encounter -T601X1S Toxic effect of halogenated insecticides, accidental (unintentional), sequela -T601X2A Toxic effect of halogenated insecticides, intentional self-harm, initial encounter -T601X2D Toxic effect of halogenated insecticides, intentional self-harm, subsequent encounter -T601X2S Toxic effect of halogenated insecticides, intentional self-harm, sequela -T601X3A Toxic effect of halogenated insecticides, assault, initial encounter -T601X3D Toxic effect of halogenated insecticides, assault, subsequent encounter -T601X3S Toxic effect of halogenated insecticides, assault, sequela -T601X4A Toxic effect of halogenated insecticides, undetermined, initial encounter -T601X4D Toxic effect of halogenated insecticides, undetermined, subsequent encounter -T601X4S Toxic effect of halogenated insecticides, undetermined, sequela -T602X1A Toxic effect of other insecticides, accidental (unintentional), initial encounter -T602X1D Toxic effect of other insecticides, accidental (unintentional), subsequent encounter -T602X1S Toxic effect of other insecticides, accidental (unintentional), sequela -T602X2A Toxic effect of other insecticides, intentional self-harm, initial encounter -T602X2D Toxic effect of other insecticides, intentional self-harm, subsequent encounter -T602X2S Toxic effect of other insecticides, intentional self-harm, sequela -T602X3A Toxic effect of other insecticides, assault, initial encounter -T602X3D Toxic effect of other insecticides, assault, subsequent encounter -T602X3S Toxic effect of other insecticides, assault, sequela -T602X4A Toxic effect of other insecticides, undetermined, initial encounter -T602X4D Toxic effect of other insecticides, undetermined, subsequent encounter -T602X4S Toxic effect of other insecticides, undetermined, sequela -T603X1A Toxic effect of herbicides and fungicides, accidental (unintentional), initial encounter -T603X1D Toxic effect of herbicides and fungicides, accidental (unintentional), subsequent encounter -T603X1S Toxic effect of herbicides and fungicides, accidental (unintentional), sequela -T603X2A Toxic effect of herbicides and fungicides, intentional self-harm, initial encounter -T603X2D Toxic effect of herbicides and fungicides, intentional self-harm, subsequent encounter -T603X2S Toxic effect of herbicides and fungicides, intentional self-harm, sequela -T603X3A Toxic effect of herbicides and fungicides, assault, initial encounter -T603X3D Toxic effect of herbicides and fungicides, assault, subsequent encounter -T603X3S Toxic effect of herbicides and fungicides, assault, sequela -T603X4A Toxic effect of herbicides and fungicides, undetermined, initial encounter -T603X4D Toxic effect of herbicides and fungicides, undetermined, subsequent encounter -T603X4S Toxic effect of herbicides and fungicides, undetermined, sequela -T604X1A Toxic effect of rodenticides, accidental (unintentional), initial encounter -T604X1D Toxic effect of rodenticides, accidental (unintentional), subsequent encounter -T604X1S Toxic effect of rodenticides, accidental (unintentional), sequela -T604X2A Toxic effect of rodenticides, intentional self-harm, initial encounter -T604X2D Toxic effect of rodenticides, intentional self-harm, subsequent encounter -T604X2S Toxic effect of rodenticides, intentional self-harm, sequela -T604X3A Toxic effect of rodenticides, assault, initial encounter -T604X3D Toxic effect of rodenticides, assault, subsequent encounter -T604X3S Toxic effect of rodenticides, assault, sequela -T604X4A Toxic effect of rodenticides, undetermined, initial encounter -T604X4D Toxic effect of rodenticides, undetermined, subsequent encounter -T604X4S Toxic effect of rodenticides, undetermined, sequela -T608X1A Toxic effect of other pesticides, accidental (unintentional), initial encounter -T608X1D Toxic effect of other pesticides, accidental (unintentional), subsequent encounter -T608X1S Toxic effect of other pesticides, accidental (unintentional), sequela -T608X2A Toxic effect of other pesticides, intentional self-harm, initial encounter -T608X2D Toxic effect of other pesticides, intentional self-harm, subsequent encounter -T608X2S Toxic effect of other pesticides, intentional self-harm, sequela -T608X3A Toxic effect of other pesticides, assault, initial encounter -T608X3D Toxic effect of other pesticides, assault, subsequent encounter -T608X3S Toxic effect of other pesticides, assault, sequela -T608X4A Toxic effect of other pesticides, undetermined, initial encounter -T608X4D Toxic effect of other pesticides, undetermined, subsequent encounter -T608X4S Toxic effect of other pesticides, undetermined, sequela -T6091XA Toxic effect of unspecified pesticide, accidental (unintentional), initial encounter -T6091XD Toxic effect of unspecified pesticide, accidental (unintentional), subsequent encounter -T6091XS Toxic effect of unspecified pesticide, accidental (unintentional), sequela -T6092XA Toxic effect of unspecified pesticide, intentional self-harm, initial encounter -T6092XD Toxic effect of unspecified pesticide, intentional self-harm, subsequent encounter -T6092XS Toxic effect of unspecified pesticide, intentional self-harm, sequela -T6093XA Toxic effect of unspecified pesticide, assault, initial encounter -T6093XD Toxic effect of unspecified pesticide, assault, subsequent encounter -T6093XS Toxic effect of unspecified pesticide, assault, sequela -T6094XA Toxic effect of unspecified pesticide, undetermined, initial encounter -T6094XD Toxic effect of unspecified pesticide, undetermined, subsequent encounter -T6094XS Toxic effect of unspecified pesticide, undetermined, sequela -T6101XA Ciguatera fish poisoning, accidental (unintentional), initial encounter -T6101XD Ciguatera fish poisoning, accidental (unintentional), subsequent encounter -T6101XS Ciguatera fish poisoning, accidental (unintentional), sequela -T6102XA Ciguatera fish poisoning, intentional self-harm, initial encounter -T6102XD Ciguatera fish poisoning, intentional self-harm, subsequent encounter -T6102XS Ciguatera fish poisoning, intentional self-harm, sequela -T6103XA Ciguatera fish poisoning, assault, initial encounter -T6103XD Ciguatera fish poisoning, assault, subsequent encounter -T6103XS Ciguatera fish poisoning, assault, sequela -T6104XA Ciguatera fish poisoning, undetermined, initial encounter -T6104XD Ciguatera fish poisoning, undetermined, subsequent encounter -T6104XS Ciguatera fish poisoning, undetermined, sequela -T6111XA Scombroid fish poisoning, accidental (unintentional), initial encounter -T6111XD Scombroid fish poisoning, accidental (unintentional), subsequent encounter -T6111XS Scombroid fish poisoning, accidental (unintentional), sequela -T6112XA Scombroid fish poisoning, intentional self-harm, initial encounter -T6112XD Scombroid fish poisoning, intentional self-harm, subsequent encounter -T6112XS Scombroid fish poisoning, intentional self-harm, sequela -T6113XA Scombroid fish poisoning, assault, initial encounter -T6113XD Scombroid fish poisoning, assault, subsequent encounter -T6113XS Scombroid fish poisoning, assault, sequela -T6114XA Scombroid fish poisoning, undetermined, initial encounter -T6114XD Scombroid fish poisoning, undetermined, subsequent encounter -T6114XS Scombroid fish poisoning, undetermined, sequela -T61771A Other fish poisoning, accidental (unintentional), initial encounter -T61771D Other fish poisoning, accidental (unintentional), subsequent encounter -T61771S Other fish poisoning, accidental (unintentional), sequela -T61772A Other fish poisoning, intentional self-harm, initial encounter -T61772D Other fish poisoning, intentional self-harm, subsequent encounter -T61772S Other fish poisoning, intentional self-harm, sequela -T61773A Other fish poisoning, assault, initial encounter -T61773D Other fish poisoning, assault, subsequent encounter -T61773S Other fish poisoning, assault, sequela -T61774A Other fish poisoning, undetermined, initial encounter -T61774D Other fish poisoning, undetermined, subsequent encounter -T61774S Other fish poisoning, undetermined, sequela -T61781A Other shellfish poisoning, accidental (unintentional), initial encounter -T61781D Other shellfish poisoning, accidental (unintentional), subsequent encounter -T61781S Other shellfish poisoning, accidental (unintentional), sequela -T61782A Other shellfish poisoning, intentional self-harm, initial encounter -T61782D Other shellfish poisoning, intentional self-harm, subsequent encounter -T61782S Other shellfish poisoning, intentional self-harm, sequela -T61783A Other shellfish poisoning, assault, initial encounter -T61783D Other shellfish poisoning, assault, subsequent encounter -T61783S Other shellfish poisoning, assault, sequela -T61784A Other shellfish poisoning, undetermined, initial encounter -T61784D Other shellfish poisoning, undetermined, subsequent encounter -T61784S Other shellfish poisoning, undetermined, sequela -T618X1A Toxic effect of other seafood, accidental (unintentional), initial encounter -T618X1D Toxic effect of other seafood, accidental (unintentional), subsequent encounter -T618X1S Toxic effect of other seafood, accidental (unintentional), sequela -T618X2A Toxic effect of other seafood, intentional self-harm, initial encounter -T618X2D Toxic effect of other seafood, intentional self-harm, subsequent encounter -T618X2S Toxic effect of other seafood, intentional self-harm, sequela -T618X3A Toxic effect of other seafood, assault, initial encounter -T618X3D Toxic effect of other seafood, assault, subsequent encounter -T618X3S Toxic effect of other seafood, assault, sequela -T618X4A Toxic effect of other seafood, undetermined, initial encounter -T618X4D Toxic effect of other seafood, undetermined, subsequent encounter -T618X4S Toxic effect of other seafood, undetermined, sequela -T6191XA Toxic effect of unspecified seafood, accidental (unintentional), initial encounter -T6191XD Toxic effect of unspecified seafood, accidental (unintentional), subsequent encounter -T6191XS Toxic effect of unspecified seafood, accidental (unintentional), sequela -T6192XA Toxic effect of unspecified seafood, intentional self-harm, initial encounter -T6192XD Toxic effect of unspecified seafood, intentional self-harm, subsequent encounter -T6192XS Toxic effect of unspecified seafood, intentional self-harm, sequela -T6193XA Toxic effect of unspecified seafood, assault, initial encounter -T6193XD Toxic effect of unspecified seafood, assault, subsequent encounter -T6193XS Toxic effect of unspecified seafood, assault, sequela -T6194XA Toxic effect of unspecified seafood, undetermined, initial encounter -T6194XD Toxic effect of unspecified seafood, undetermined, subsequent encounter -T6194XS Toxic effect of unspecified seafood, undetermined, sequela -T620X1A Toxic effect of ingested mushrooms, accidental (unintentional), initial encounter -T620X1D Toxic effect of ingested mushrooms, accidental (unintentional), subsequent encounter -T620X1S Toxic effect of ingested mushrooms, accidental (unintentional), sequela -T620X2A Toxic effect of ingested mushrooms, intentional self-harm, initial encounter -T620X2D Toxic effect of ingested mushrooms, intentional self-harm, subsequent encounter -T620X2S Toxic effect of ingested mushrooms, intentional self-harm, sequela -T620X3A Toxic effect of ingested mushrooms, assault, initial encounter -T620X3D Toxic effect of ingested mushrooms, assault, subsequent encounter -T620X3S Toxic effect of ingested mushrooms, assault, sequela -T620X4A Toxic effect of ingested mushrooms, undetermined, initial encounter -T620X4D Toxic effect of ingested mushrooms, undetermined, subsequent encounter -T620X4S Toxic effect of ingested mushrooms, undetermined, sequela -T621X1A Toxic effect of ingested berries, accidental (unintentional), initial encounter -T621X1D Toxic effect of ingested berries, accidental (unintentional), subsequent encounter -T621X1S Toxic effect of ingested berries, accidental (unintentional), sequela -T621X2A Toxic effect of ingested berries, intentional self-harm, initial encounter -T621X2D Toxic effect of ingested berries, intentional self-harm, subsequent encounter -T621X2S Toxic effect of ingested berries, intentional self-harm, sequela -T621X3A Toxic effect of ingested berries, assault, initial encounter -T621X3D Toxic effect of ingested berries, assault, subsequent encounter -T621X3S Toxic effect of ingested berries, assault, sequela -T621X4A Toxic effect of ingested berries, undetermined, initial encounter -T621X4D Toxic effect of ingested berries, undetermined, subsequent encounter -T621X4S Toxic effect of ingested berries, undetermined, sequela -T622X1A Toxic effect of other ingested (parts of) plant(s), accidental (unintentional), initial encounter -T622X1D Toxic effect of other ingested (parts of) plant(s), accidental (unintentional), subsequent encounter -T622X1S Toxic effect of other ingested (parts of) plant(s), accidental (unintentional), sequela -T622X2A Toxic effect of other ingested (parts of) plant(s), intentional self-harm, initial encounter -T622X2D Toxic effect of other ingested (parts of) plant(s), intentional self-harm, subsequent encounter -T622X2S Toxic effect of other ingested (parts of) plant(s), intentional self-harm, sequela -T622X3A Toxic effect of other ingested (parts of) plant(s), assault, initial encounter -T622X3D Toxic effect of other ingested (parts of) plant(s), assault, subsequent encounter -T622X3S Toxic effect of other ingested (parts of) plant(s), assault, sequela -T622X4A Toxic effect of other ingested (parts of) plant(s), undetermined, initial encounter -T622X4D Toxic effect of other ingested (parts of) plant(s), undetermined, subsequent encounter -T622X4S Toxic effect of other ingested (parts of) plant(s), undetermined, sequela -T628X1A Toxic effect of other specified noxious substances eaten as food, accidental (unintentional), initial encounter -T628X1D Toxic effect of other specified noxious substances eaten as food, accidental (unintentional), subsequent encounter -T628X1S Toxic effect of other specified noxious substances eaten as food, accidental (unintentional), sequela -T628X2A Toxic effect of other specified noxious substances eaten as food, intentional self-harm, initial encounter -T628X2D Toxic effect of other specified noxious substances eaten as food, intentional self-harm, subsequent encounter -T628X2S Toxic effect of other specified noxious substances eaten as food, intentional self-harm, sequela -T628X3A Toxic effect of other specified noxious substances eaten as food, assault, initial encounter -T628X3D Toxic effect of other specified noxious substances eaten as food, assault, subsequent encounter -T628X3S Toxic effect of other specified noxious substances eaten as food, assault, sequela -T628X4A Toxic effect of other specified noxious substances eaten as food, undetermined, initial encounter -T628X4D Toxic effect of other specified noxious substances eaten as food, undetermined, subsequent encounter -T628X4S Toxic effect of other specified noxious substances eaten as food, undetermined, sequela -T6291XA Toxic effect of unspecified noxious substance eaten as food, accidental (unintentional), initial encounter -T6291XD Toxic effect of unspecified noxious substance eaten as food, accidental (unintentional), subsequent encounter -T6291XS Toxic effect of unspecified noxious substance eaten as food, accidental (unintentional), sequela -T6292XA Toxic effect of unspecified noxious substance eaten as food, intentional self-harm, initial encounter -T6292XD Toxic effect of unspecified noxious substance eaten as food, intentional self-harm, subsequent encounter -T6292XS Toxic effect of unspecified noxious substance eaten as food, intentional self-harm, sequela -T6293XA Toxic effect of unspecified noxious substance eaten as food, assault, initial encounter -T6293XD Toxic effect of unspecified noxious substance eaten as food, assault, subsequent encounter -T6293XS Toxic effect of unspecified noxious substance eaten as food, assault, sequela -T6294XA Toxic effect of unspecified noxious substance eaten as food, undetermined, initial encounter -T6294XD Toxic effect of unspecified noxious substance eaten as food, undetermined, subsequent encounter -T6294XS Toxic effect of unspecified noxious substance eaten as food, undetermined, sequela -T63001A Toxic effect of unspecified snake venom, accidental (unintentional), initial encounter -T63001D Toxic effect of unspecified snake venom, accidental (unintentional), subsequent encounter -T63001S Toxic effect of unspecified snake venom, accidental (unintentional), sequela -T63002A Toxic effect of unspecified snake venom, intentional self-harm, initial encounter -T63002D Toxic effect of unspecified snake venom, intentional self-harm, subsequent encounter -T63002S Toxic effect of unspecified snake venom, intentional self-harm, sequela -T63003A Toxic effect of unspecified snake venom, assault, initial encounter -T63003D Toxic effect of unspecified snake venom, assault, subsequent encounter -T63003S Toxic effect of unspecified snake venom, assault, sequela -T63004A Toxic effect of unspecified snake venom, undetermined, initial encounter -T63004D Toxic effect of unspecified snake venom, undetermined, subsequent encounter -T63004S Toxic effect of unspecified snake venom, undetermined, sequela -T63011A Toxic effect of rattlesnake venom, accidental (unintentional), initial encounter -T63011D Toxic effect of rattlesnake venom, accidental (unintentional), subsequent encounter -T63011S Toxic effect of rattlesnake venom, accidental (unintentional), sequela -T63012A Toxic effect of rattlesnake venom, intentional self-harm, initial encounter -T63012D Toxic effect of rattlesnake venom, intentional self-harm, subsequent encounter -T63012S Toxic effect of rattlesnake venom, intentional self-harm, sequela -T63013A Toxic effect of rattlesnake venom, assault, initial encounter -T63013D Toxic effect of rattlesnake venom, assault, subsequent encounter -T63013S Toxic effect of rattlesnake venom, assault, sequela -T63014A Toxic effect of rattlesnake venom, undetermined, initial encounter -T63014D Toxic effect of rattlesnake venom, undetermined, subsequent encounter -T63014S Toxic effect of rattlesnake venom, undetermined, sequela -T63021A Toxic effect of coral snake venom, accidental (unintentional), initial encounter -T63021D Toxic effect of coral snake venom, accidental (unintentional), subsequent encounter -T63021S Toxic effect of coral snake venom, accidental (unintentional), sequela -T63022A Toxic effect of coral snake venom, intentional self-harm, initial encounter -T63022D Toxic effect of coral snake venom, intentional self-harm, subsequent encounter -T63022S Toxic effect of coral snake venom, intentional self-harm, sequela -T63023A Toxic effect of coral snake venom, assault, initial encounter -T63023D Toxic effect of coral snake venom, assault, subsequent encounter -T63023S Toxic effect of coral snake venom, assault, sequela -T63024A Toxic effect of coral snake venom, undetermined, initial encounter -T63024D Toxic effect of coral snake venom, undetermined, subsequent encounter -T63024S Toxic effect of coral snake venom, undetermined, sequela -T63031A Toxic effect of taipan venom, accidental (unintentional), initial encounter -T63031D Toxic effect of taipan venom, accidental (unintentional), subsequent encounter -T63031S Toxic effect of taipan venom, accidental (unintentional), sequela -T63032A Toxic effect of taipan venom, intentional self-harm, initial encounter -T63032D Toxic effect of taipan venom, intentional self-harm, subsequent encounter -T63032S Toxic effect of taipan venom, intentional self-harm, sequela -T63033A Toxic effect of taipan venom, assault, initial encounter -T63033D Toxic effect of taipan venom, assault, subsequent encounter -T63033S Toxic effect of taipan venom, assault, sequela -T63034A Toxic effect of taipan venom, undetermined, initial encounter -T63034D Toxic effect of taipan venom, undetermined, subsequent encounter -T63034S Toxic effect of taipan venom, undetermined, sequela -T63041A Toxic effect of cobra venom, accidental (unintentional), initial encounter -T63041D Toxic effect of cobra venom, accidental (unintentional), subsequent encounter -T63041S Toxic effect of cobra venom, accidental (unintentional), sequela -T63042A Toxic effect of cobra venom, intentional self-harm, initial encounter -T63042D Toxic effect of cobra venom, intentional self-harm, subsequent encounter -T63042S Toxic effect of cobra venom, intentional self-harm, sequela -T63043A Toxic effect of cobra venom, assault, initial encounter -T63043D Toxic effect of cobra venom, assault, subsequent encounter -T63043S Toxic effect of cobra venom, assault, sequela -T63044A Toxic effect of cobra venom, undetermined, initial encounter -T63044D Toxic effect of cobra venom, undetermined, subsequent encounter -T63044S Toxic effect of cobra venom, undetermined, sequela -T63061A Toxic effect of venom of other North and South American snake, accidental (unintentional), initial encounter -T63061D Toxic effect of venom of other North and South American snake, accidental (unintentional), subsequent encounter -T63061S Toxic effect of venom of other North and South American snake, accidental (unintentional), sequela -T63062A Toxic effect of venom of other North and South American snake, intentional self-harm, initial encounter -T63062D Toxic effect of venom of other North and South American snake, intentional self-harm, subsequent encounter -T63062S Toxic effect of venom of other North and South American snake, intentional self-harm, sequela -T63063A Toxic effect of venom of other North and South American snake, assault, initial encounter -T63063D Toxic effect of venom of other North and South American snake, assault, subsequent encounter -T63063S Toxic effect of venom of other North and South American snake, assault, sequela -T63064A Toxic effect of venom of other North and South American snake, undetermined, initial encounter -T63064D Toxic effect of venom of other North and South American snake, undetermined, subsequent encounter -T63064S Toxic effect of venom of other North and South American snake, undetermined, sequela -T63071A Toxic effect of venom of other Australian snake, accidental (unintentional), initial encounter -T63071D Toxic effect of venom of other Australian snake, accidental (unintentional), subsequent encounter -T63071S Toxic effect of venom of other Australian snake, accidental (unintentional), sequela -T63072A Toxic effect of venom of other Australian snake, intentional self-harm, initial encounter -T63072D Toxic effect of venom of other Australian snake, intentional self-harm, subsequent encounter -T63072S Toxic effect of venom of other Australian snake, intentional self-harm, sequela -T63073A Toxic effect of venom of other Australian snake, assault, initial encounter -T63073D Toxic effect of venom of other Australian snake, assault, subsequent encounter -T63073S Toxic effect of venom of other Australian snake, assault, sequela -T63074A Toxic effect of venom of other Australian snake, undetermined, initial encounter -T63074D Toxic effect of venom of other Australian snake, undetermined, subsequent encounter -T63074S Toxic effect of venom of other Australian snake, undetermined, sequela -T63081A Toxic effect of venom of other African and Asian snake, accidental (unintentional), initial encounter -T63081D Toxic effect of venom of other African and Asian snake, accidental (unintentional), subsequent encounter -T63081S Toxic effect of venom of other African and Asian snake, accidental (unintentional), sequela -T63082A Toxic effect of venom of other African and Asian snake, intentional self-harm, initial encounter -T63082D Toxic effect of venom of other African and Asian snake, intentional self-harm, subsequent encounter -T63082S Toxic effect of venom of other African and Asian snake, intentional self-harm, sequela -T63083A Toxic effect of venom of other African and Asian snake, assault, initial encounter -T63083D Toxic effect of venom of other African and Asian snake, assault, subsequent encounter -T63083S Toxic effect of venom of other African and Asian snake, assault, sequela -T63084A Toxic effect of venom of other African and Asian snake, undetermined, initial encounter -T63084D Toxic effect of venom of other African and Asian snake, undetermined, subsequent encounter -T63084S Toxic effect of venom of other African and Asian snake, undetermined, sequela -T63091A Toxic effect of venom of other snake, accidental (unintentional), initial encounter -T63091D Toxic effect of venom of other snake, accidental (unintentional), subsequent encounter -T63091S Toxic effect of venom of other snake, accidental (unintentional), sequela -T63092A Toxic effect of venom of other snake, intentional self-harm, initial encounter -T63092D Toxic effect of venom of other snake, intentional self-harm, subsequent encounter -T63092S Toxic effect of venom of other snake, intentional self-harm, sequela -T63093A Toxic effect of venom of other snake, assault, initial encounter -T63093D Toxic effect of venom of other snake, assault, subsequent encounter -T63093S Toxic effect of venom of other snake, assault, sequela -T63094A Toxic effect of venom of other snake, undetermined, initial encounter -T63094D Toxic effect of venom of other snake, undetermined, subsequent encounter -T63094S Toxic effect of venom of other snake, undetermined, sequela -T63111A Toxic effect of venom of gila monster, accidental (unintentional), initial encounter -T63111D Toxic effect of venom of gila monster, accidental (unintentional), subsequent encounter -T63111S Toxic effect of venom of gila monster, accidental (unintentional), sequela -T63112A Toxic effect of venom of gila monster, intentional self-harm, initial encounter -T63112D Toxic effect of venom of gila monster, intentional self-harm, subsequent encounter -T63112S Toxic effect of venom of gila monster, intentional self-harm, sequela -T63113A Toxic effect of venom of gila monster, assault, initial encounter -T63113D Toxic effect of venom of gila monster, assault, subsequent encounter -T63113S Toxic effect of venom of gila monster, assault, sequela -T63114A Toxic effect of venom of gila monster, undetermined, initial encounter -T63114D Toxic effect of venom of gila monster, undetermined, subsequent encounter -T63114S Toxic effect of venom of gila monster, undetermined, sequela -T63121A Toxic effect of venom of other venomous lizard, accidental (unintentional), initial encounter -T63121D Toxic effect of venom of other venomous lizard, accidental (unintentional), subsequent encounter -T63121S Toxic effect of venom of other venomous lizard, accidental (unintentional), sequela -T63122A Toxic effect of venom of other venomous lizard, intentional self-harm, initial encounter -T63122D Toxic effect of venom of other venomous lizard, intentional self-harm, subsequent encounter -T63122S Toxic effect of venom of other venomous lizard, intentional self-harm, sequela -T63123A Toxic effect of venom of other venomous lizard, assault, initial encounter -T63123D Toxic effect of venom of other venomous lizard, assault, subsequent encounter -T63123S Toxic effect of venom of other venomous lizard, assault, sequela -T63124A Toxic effect of venom of other venomous lizard, undetermined, initial encounter -T63124D Toxic effect of venom of other venomous lizard, undetermined, subsequent encounter -T63124S Toxic effect of venom of other venomous lizard, undetermined, sequela -T63191A Toxic effect of venom of other reptiles, accidental (unintentional), initial encounter -T63191D Toxic effect of venom of other reptiles, accidental (unintentional), subsequent encounter -T63191S Toxic effect of venom of other reptiles, accidental (unintentional), sequela -T63192A Toxic effect of venom of other reptiles, intentional self-harm, initial encounter -T63192D Toxic effect of venom of other reptiles, intentional self-harm, subsequent encounter -T63192S Toxic effect of venom of other reptiles, intentional self-harm, sequela -T63193A Toxic effect of venom of other reptiles, assault, initial encounter -T63193D Toxic effect of venom of other reptiles, assault, subsequent encounter -T63193S Toxic effect of venom of other reptiles, assault, sequela -T63194A Toxic effect of venom of other reptiles, undetermined, initial encounter -T63194D Toxic effect of venom of other reptiles, undetermined, subsequent encounter -T63194S Toxic effect of venom of other reptiles, undetermined, sequela -T632X1A Toxic effect of venom of scorpion, accidental (unintentional), initial encounter -T632X1D Toxic effect of venom of scorpion, accidental (unintentional), subsequent encounter -T632X1S Toxic effect of venom of scorpion, accidental (unintentional), sequela -T632X2A Toxic effect of venom of scorpion, intentional self-harm, initial encounter -T632X2D Toxic effect of venom of scorpion, intentional self-harm, subsequent encounter -T632X2S Toxic effect of venom of scorpion, intentional self-harm, sequela -T632X3A Toxic effect of venom of scorpion, assault, initial encounter -T632X3D Toxic effect of venom of scorpion, assault, subsequent encounter -T632X3S Toxic effect of venom of scorpion, assault, sequela -T632X4A Toxic effect of venom of scorpion, undetermined, initial encounter -T632X4D Toxic effect of venom of scorpion, undetermined, subsequent encounter -T632X4S Toxic effect of venom of scorpion, undetermined, sequela -T63301A Toxic effect of unspecified spider venom, accidental (unintentional), initial encounter -T63301D Toxic effect of unspecified spider venom, accidental (unintentional), subsequent encounter -T63301S Toxic effect of unspecified spider venom, accidental (unintentional), sequela -T63302A Toxic effect of unspecified spider venom, intentional self-harm, initial encounter -T63302D Toxic effect of unspecified spider venom, intentional self-harm, subsequent encounter -T63302S Toxic effect of unspecified spider venom, intentional self-harm, sequela -T63303A Toxic effect of unspecified spider venom, assault, initial encounter -T63303D Toxic effect of unspecified spider venom, assault, subsequent encounter -T63303S Toxic effect of unspecified spider venom, assault, sequela -T63304A Toxic effect of unspecified spider venom, undetermined, initial encounter -T63304D Toxic effect of unspecified spider venom, undetermined, subsequent encounter -T63304S Toxic effect of unspecified spider venom, undetermined, sequela -T63311A Toxic effect of venom of black widow spider, accidental (unintentional), initial encounter -T63311D Toxic effect of venom of black widow spider, accidental (unintentional), subsequent encounter -T63311S Toxic effect of venom of black widow spider, accidental (unintentional), sequela -T63312A Toxic effect of venom of black widow spider, intentional self-harm, initial encounter -T63312D Toxic effect of venom of black widow spider, intentional self-harm, subsequent encounter -T63312S Toxic effect of venom of black widow spider, intentional self-harm, sequela -T63313A Toxic effect of venom of black widow spider, assault, initial encounter -T63313D Toxic effect of venom of black widow spider, assault, subsequent encounter -T63313S Toxic effect of venom of black widow spider, assault, sequela -T63314A Toxic effect of venom of black widow spider, undetermined, initial encounter -T63314D Toxic effect of venom of black widow spider, undetermined, subsequent encounter -T63314S Toxic effect of venom of black widow spider, undetermined, sequela -T63321A Toxic effect of venom of tarantula, accidental (unintentional), initial encounter -T63321D Toxic effect of venom of tarantula, accidental (unintentional), subsequent encounter -T63321S Toxic effect of venom of tarantula, accidental (unintentional), sequela -T63322A Toxic effect of venom of tarantula, intentional self-harm, initial encounter -T63322D Toxic effect of venom of tarantula, intentional self-harm, subsequent encounter -T63322S Toxic effect of venom of tarantula, intentional self-harm, sequela -T63323A Toxic effect of venom of tarantula, assault, initial encounter -T63323D Toxic effect of venom of tarantula, assault, subsequent encounter -T63323S Toxic effect of venom of tarantula, assault, sequela -T63324A Toxic effect of venom of tarantula, undetermined, initial encounter -T63324D Toxic effect of venom of tarantula, undetermined, subsequent encounter -T63324S Toxic effect of venom of tarantula, undetermined, sequela -T63331A Toxic effect of venom of brown recluse spider, accidental (unintentional), initial encounter -T63331D Toxic effect of venom of brown recluse spider, accidental (unintentional), subsequent encounter -T63331S Toxic effect of venom of brown recluse spider, accidental (unintentional), sequela -T63332A Toxic effect of venom of brown recluse spider, intentional self-harm, initial encounter -T63332D Toxic effect of venom of brown recluse spider, intentional self-harm, subsequent encounter -T63332S Toxic effect of venom of brown recluse spider, intentional self-harm, sequela -T63333A Toxic effect of venom of brown recluse spider, assault, initial encounter -T63333D Toxic effect of venom of brown recluse spider, assault, subsequent encounter -T63333S Toxic effect of venom of brown recluse spider, assault, sequela -T63334A Toxic effect of venom of brown recluse spider, undetermined, initial encounter -T63334D Toxic effect of venom of brown recluse spider, undetermined, subsequent encounter -T63334S Toxic effect of venom of brown recluse spider, undetermined, sequela -T63391A Toxic effect of venom of other spider, accidental (unintentional), initial encounter -T63391D Toxic effect of venom of other spider, accidental (unintentional), subsequent encounter -T63391S Toxic effect of venom of other spider, accidental (unintentional), sequela -T63392A Toxic effect of venom of other spider, intentional self-harm, initial encounter -T63392D Toxic effect of venom of other spider, intentional self-harm, subsequent encounter -T63392S Toxic effect of venom of other spider, intentional self-harm, sequela -T63393A Toxic effect of venom of other spider, assault, initial encounter -T63393D Toxic effect of venom of other spider, assault, subsequent encounter -T63393S Toxic effect of venom of other spider, assault, sequela -T63394A Toxic effect of venom of other spider, undetermined, initial encounter -T63394D Toxic effect of venom of other spider, undetermined, subsequent encounter -T63394S Toxic effect of venom of other spider, undetermined, sequela -T63411A Toxic effect of venom of centipedes and venomous millipedes, accidental (unintentional), initial encounter -T63411D Toxic effect of venom of centipedes and venomous millipedes, accidental (unintentional), subsequent encounter -T63411S Toxic effect of venom of centipedes and venomous millipedes, accidental (unintentional), sequela -T63412A Toxic effect of venom of centipedes and venomous millipedes, intentional self-harm, initial encounter -T63412D Toxic effect of venom of centipedes and venomous millipedes, intentional self-harm, subsequent encounter -T63412S Toxic effect of venom of centipedes and venomous millipedes, intentional self-harm, sequela -T63413A Toxic effect of venom of centipedes and venomous millipedes, assault, initial encounter -T63413D Toxic effect of venom of centipedes and venomous millipedes, assault, subsequent encounter -T63413S Toxic effect of venom of centipedes and venomous millipedes, assault, sequela -T63414A Toxic effect of venom of centipedes and venomous millipedes, undetermined, initial encounter -T63414D Toxic effect of venom of centipedes and venomous millipedes, undetermined, subsequent encounter -T63414S Toxic effect of venom of centipedes and venomous millipedes, undetermined, sequela -T63421A Toxic effect of venom of ants, accidental (unintentional), initial encounter -T63421D Toxic effect of venom of ants, accidental (unintentional), subsequent encounter -T63421S Toxic effect of venom of ants, accidental (unintentional), sequela -T63422A Toxic effect of venom of ants, intentional self-harm, initial encounter -T63422D Toxic effect of venom of ants, intentional self-harm, subsequent encounter -T63422S Toxic effect of venom of ants, intentional self-harm, sequela -T63423A Toxic effect of venom of ants, assault, initial encounter -T63423D Toxic effect of venom of ants, assault, subsequent encounter -T63423S Toxic effect of venom of ants, assault, sequela -T63424A Toxic effect of venom of ants, undetermined, initial encounter -T63424D Toxic effect of venom of ants, undetermined, subsequent encounter -T63424S Toxic effect of venom of ants, undetermined, sequela -T63431A Toxic effect of venom of caterpillars, accidental (unintentional), initial encounter -T63431D Toxic effect of venom of caterpillars, accidental (unintentional), subsequent encounter -T63431S Toxic effect of venom of caterpillars, accidental (unintentional), sequela -T63432A Toxic effect of venom of caterpillars, intentional self-harm, initial encounter -T63432D Toxic effect of venom of caterpillars, intentional self-harm, subsequent encounter -T63432S Toxic effect of venom of caterpillars, intentional self-harm, sequela -T63433A Toxic effect of venom of caterpillars, assault, initial encounter -T63433D Toxic effect of venom of caterpillars, assault, subsequent encounter -T63433S Toxic effect of venom of caterpillars, assault, sequela -T63434A Toxic effect of venom of caterpillars, undetermined, initial encounter -T63434D Toxic effect of venom of caterpillars, undetermined, subsequent encounter -T63434S Toxic effect of venom of caterpillars, undetermined, sequela -T63441A Toxic effect of venom of bees, accidental (unintentional), initial encounter -T63441D Toxic effect of venom of bees, accidental (unintentional), subsequent encounter -T63441S Toxic effect of venom of bees, accidental (unintentional), sequela -T63442A Toxic effect of venom of bees, intentional self-harm, initial encounter -T63442D Toxic effect of venom of bees, intentional self-harm, subsequent encounter -T63442S Toxic effect of venom of bees, intentional self-harm, sequela -T63443A Toxic effect of venom of bees, assault, initial encounter -T63443D Toxic effect of venom of bees, assault, subsequent encounter -T63443S Toxic effect of venom of bees, assault, sequela -T63444A Toxic effect of venom of bees, undetermined, initial encounter -T63444D Toxic effect of venom of bees, undetermined, subsequent encounter -T63444S Toxic effect of venom of bees, undetermined, sequela -T63451A Toxic effect of venom of hornets, accidental (unintentional), initial encounter -T63451D Toxic effect of venom of hornets, accidental (unintentional), subsequent encounter -T63451S Toxic effect of venom of hornets, accidental (unintentional), sequela -T63452A Toxic effect of venom of hornets, intentional self-harm, initial encounter -T63452D Toxic effect of venom of hornets, intentional self-harm, subsequent encounter -T63452S Toxic effect of venom of hornets, intentional self-harm, sequela -T63453A Toxic effect of venom of hornets, assault, initial encounter -T63453D Toxic effect of venom of hornets, assault, subsequent encounter -T63453S Toxic effect of venom of hornets, assault, sequela -T63454A Toxic effect of venom of hornets, undetermined, initial encounter -T63454D Toxic effect of venom of hornets, undetermined, subsequent encounter -T63454S Toxic effect of venom of hornets, undetermined, sequela -T63461A Toxic effect of venom of wasps, accidental (unintentional), initial encounter -T63461D Toxic effect of venom of wasps, accidental (unintentional), subsequent encounter -T63461S Toxic effect of venom of wasps, accidental (unintentional), sequela -T63462A Toxic effect of venom of wasps, intentional self-harm, initial encounter -T63462D Toxic effect of venom of wasps, intentional self-harm, subsequent encounter -T63462S Toxic effect of venom of wasps, intentional self-harm, sequela -T63463A Toxic effect of venom of wasps, assault, initial encounter -T63463D Toxic effect of venom of wasps, assault, subsequent encounter -T63463S Toxic effect of venom of wasps, assault, sequela -T63464A Toxic effect of venom of wasps, undetermined, initial encounter -T63464D Toxic effect of venom of wasps, undetermined, subsequent encounter -T63464S Toxic effect of venom of wasps, undetermined, sequela -T63481A Toxic effect of venom of other arthropod, accidental (unintentional), initial encounter -T63481D Toxic effect of venom of other arthropod, accidental (unintentional), subsequent encounter -T63481S Toxic effect of venom of other arthropod, accidental (unintentional), sequela -T63482A Toxic effect of venom of other arthropod, intentional self-harm, initial encounter -T63482D Toxic effect of venom of other arthropod, intentional self-harm, subsequent encounter -T63482S Toxic effect of venom of other arthropod, intentional self-harm, sequela -T63483A Toxic effect of venom of other arthropod, assault, initial encounter -T63483D Toxic effect of venom of other arthropod, assault, subsequent encounter -T63483S Toxic effect of venom of other arthropod, assault, sequela -T63484A Toxic effect of venom of other arthropod, undetermined, initial encounter -T63484D Toxic effect of venom of other arthropod, undetermined, subsequent encounter -T63484S Toxic effect of venom of other arthropod, undetermined, sequela -T63511A Toxic effect of contact with stingray, accidental (unintentional), initial encounter -T63511D Toxic effect of contact with stingray, accidental (unintentional), subsequent encounter -T63511S Toxic effect of contact with stingray, accidental (unintentional), sequela -T63512A Toxic effect of contact with stingray, intentional self-harm, initial encounter -T63512D Toxic effect of contact with stingray, intentional self-harm, subsequent encounter -T63512S Toxic effect of contact with stingray, intentional self-harm, sequela -T63513A Toxic effect of contact with stingray, assault, initial encounter -T63513D Toxic effect of contact with stingray, assault, subsequent encounter -T63513S Toxic effect of contact with stingray, assault, sequela -T63514A Toxic effect of contact with stingray, undetermined, initial encounter -T63514D Toxic effect of contact with stingray, undetermined, subsequent encounter -T63514S Toxic effect of contact with stingray, undetermined, sequela -T63591A Toxic effect of contact with other venomous fish, accidental (unintentional), initial encounter -T63591D Toxic effect of contact with other venomous fish, accidental (unintentional), subsequent encounter -T63591S Toxic effect of contact with other venomous fish, accidental (unintentional), sequela -T63592A Toxic effect of contact with other venomous fish, intentional self-harm, initial encounter -T63592D Toxic effect of contact with other venomous fish, intentional self-harm, subsequent encounter -T63592S Toxic effect of contact with other venomous fish, intentional self-harm, sequela -T63593A Toxic effect of contact with other venomous fish, assault, initial encounter -T63593D Toxic effect of contact with other venomous fish, assault, subsequent encounter -T63593S Toxic effect of contact with other venomous fish, assault, sequela -T63594A Toxic effect of contact with other venomous fish, undetermined, initial encounter -T63594D Toxic effect of contact with other venomous fish, undetermined, subsequent encounter -T63594S Toxic effect of contact with other venomous fish, undetermined, sequela -T63611A Toxic effect of contact with Portugese Man-o-war, accidental (unintentional), initial encounter -T63611D Toxic effect of contact with Portugese Man-o-war, accidental (unintentional), subsequent encounter -T63611S Toxic effect of contact with Portugese Man-o-war, accidental (unintentional), sequela -T63612A Toxic effect of contact with Portugese Man-o-war, intentional self-harm, initial encounter -T63612D Toxic effect of contact with Portugese Man-o-war, intentional self-harm, subsequent encounter -T63612S Toxic effect of contact with Portugese Man-o-war, intentional self-harm, sequela -T63613A Toxic effect of contact with Portugese Man-o-war, assault, initial encounter -T63613D Toxic effect of contact with Portugese Man-o-war, assault, subsequent encounter -T63613S Toxic effect of contact with Portugese Man-o-war, assault, sequela -T63614A Toxic effect of contact with Portugese Man-o-war, undetermined, initial encounter -T63614D Toxic effect of contact with Portugese Man-o-war, undetermined, subsequent encounter -T63614S Toxic effect of contact with Portugese Man-o-war, undetermined, sequela -T63621A Toxic effect of contact with other jellyfish, accidental (unintentional), initial encounter -T63621D Toxic effect of contact with other jellyfish, accidental (unintentional), subsequent encounter -T63621S Toxic effect of contact with other jellyfish, accidental (unintentional), sequela -T63622A Toxic effect of contact with other jellyfish, intentional self-harm, initial encounter -T63622D Toxic effect of contact with other jellyfish, intentional self-harm, subsequent encounter -T63622S Toxic effect of contact with other jellyfish, intentional self-harm, sequela -T63623A Toxic effect of contact with other jellyfish, assault, initial encounter -T63623D Toxic effect of contact with other jellyfish, assault, subsequent encounter -T63623S Toxic effect of contact with other jellyfish, assault, sequela -T63624A Toxic effect of contact with other jellyfish, undetermined, initial encounter -T63624D Toxic effect of contact with other jellyfish, undetermined, subsequent encounter -T63624S Toxic effect of contact with other jellyfish, undetermined, sequela -T63631A Toxic effect of contact with sea anemone, accidental (unintentional), initial encounter -T63631D Toxic effect of contact with sea anemone, accidental (unintentional), subsequent encounter -T63631S Toxic effect of contact with sea anemone, accidental (unintentional), sequela -T63632A Toxic effect of contact with sea anemone, intentional self-harm, initial encounter -T63632D Toxic effect of contact with sea anemone, intentional self-harm, subsequent encounter -T63632S Toxic effect of contact with sea anemone, intentional self-harm, sequela -T63633A Toxic effect of contact with sea anemone, assault, initial encounter -T63633D Toxic effect of contact with sea anemone, assault, subsequent encounter -T63633S Toxic effect of contact with sea anemone, assault, sequela -T63634A Toxic effect of contact with sea anemone, undetermined, initial encounter -T63634D Toxic effect of contact with sea anemone, undetermined, subsequent encounter -T63634S Toxic effect of contact with sea anemone, undetermined, sequela -T63691A Toxic effect of contact with other venomous marine animals, accidental (unintentional), initial encounter -T63691D Toxic effect of contact with other venomous marine animals, accidental (unintentional), subsequent encounter -T63691S Toxic effect of contact with other venomous marine animals, accidental (unintentional), sequela -T63692A Toxic effect of contact with other venomous marine animals, intentional self-harm, initial encounter -T63692D Toxic effect of contact with other venomous marine animals, intentional self-harm, subsequent encounter -T63692S Toxic effect of contact with other venomous marine animals, intentional self-harm, sequela -T63693A Toxic effect of contact with other venomous marine animals, assault, initial encounter -T63693D Toxic effect of contact with other venomous marine animals, assault, subsequent encounter -T63693S Toxic effect of contact with other venomous marine animals, assault, sequela -T63694A Toxic effect of contact with other venomous marine animals, undetermined, initial encounter -T63694D Toxic effect of contact with other venomous marine animals, undetermined, subsequent encounter -T63694S Toxic effect of contact with other venomous marine animals, undetermined, sequela -T63711A Toxic effect of contact with venomous marine plant, accidental (unintentional), initial encounter -T63711D Toxic effect of contact with venomous marine plant, accidental (unintentional), subsequent encounter -T63711S Toxic effect of contact with venomous marine plant, accidental (unintentional), sequela -T63712A Toxic effect of contact with venomous marine plant, intentional self-harm, initial encounter -T63712D Toxic effect of contact with venomous marine plant, intentional self-harm, subsequent encounter -T63712S Toxic effect of contact with venomous marine plant, intentional self-harm, sequela -T63713A Toxic effect of contact with venomous marine plant, assault, initial encounter -T63713D Toxic effect of contact with venomous marine plant, assault, subsequent encounter -T63713S Toxic effect of contact with venomous marine plant, assault, sequela -T63714A Toxic effect of contact with venomous marine plant, undetermined, initial encounter -T63714D Toxic effect of contact with venomous marine plant, undetermined, subsequent encounter -T63714S Toxic effect of contact with venomous marine plant, undetermined, sequela -T63791A Toxic effect of contact with other venomous plant, accidental (unintentional), initial encounter -T63791D Toxic effect of contact with other venomous plant, accidental (unintentional), subsequent encounter -T63791S Toxic effect of contact with other venomous plant, accidental (unintentional), sequela -T63792A Toxic effect of contact with other venomous plant, intentional self-harm, initial encounter -T63792D Toxic effect of contact with other venomous plant, intentional self-harm, subsequent encounter -T63792S Toxic effect of contact with other venomous plant, intentional self-harm, sequela -T63793A Toxic effect of contact with other venomous plant, assault, initial encounter -T63793D Toxic effect of contact with other venomous plant, assault, subsequent encounter -T63793S Toxic effect of contact with other venomous plant, assault, sequela -T63794A Toxic effect of contact with other venomous plant, undetermined, initial encounter -T63794D Toxic effect of contact with other venomous plant, undetermined, subsequent encounter -T63794S Toxic effect of contact with other venomous plant, undetermined, sequela -T63811A Toxic effect of contact with venomous frog, accidental (unintentional), initial encounter -T63811D Toxic effect of contact with venomous frog, accidental (unintentional), subsequent encounter -T63811S Toxic effect of contact with venomous frog, accidental (unintentional), sequela -T63812A Toxic effect of contact with venomous frog, intentional self-harm, initial encounter -T63812D Toxic effect of contact with venomous frog, intentional self-harm, subsequent encounter -T63812S Toxic effect of contact with venomous frog, intentional self-harm, sequela -T63813A Toxic effect of contact with venomous frog, assault, initial encounter -T63813D Toxic effect of contact with venomous frog, assault, subsequent encounter -T63813S Toxic effect of contact with venomous frog, assault, sequela -T63814A Toxic effect of contact with venomous frog, undetermined, initial encounter -T63814D Toxic effect of contact with venomous frog, undetermined, subsequent encounter -T63814S Toxic effect of contact with venomous frog, undetermined, sequela -T63821A Toxic effect of contact with venomous toad, accidental (unintentional), initial encounter -T63821D Toxic effect of contact with venomous toad, accidental (unintentional), subsequent encounter -T63821S Toxic effect of contact with venomous toad, accidental (unintentional), sequela -T63822A Toxic effect of contact with venomous toad, intentional self-harm, initial encounter -T63822D Toxic effect of contact with venomous toad, intentional self-harm, subsequent encounter -T63822S Toxic effect of contact with venomous toad, intentional self-harm, sequela -T63823A Toxic effect of contact with venomous toad, assault, initial encounter -T63823D Toxic effect of contact with venomous toad, assault, subsequent encounter -T63823S Toxic effect of contact with venomous toad, assault, sequela -T63824A Toxic effect of contact with venomous toad, undetermined, initial encounter -T63824D Toxic effect of contact with venomous toad, undetermined, subsequent encounter -T63824S Toxic effect of contact with venomous toad, undetermined, sequela -T63831A Toxic effect of contact with other venomous amphibian, accidental (unintentional), initial encounter -T63831D Toxic effect of contact with other venomous amphibian, accidental (unintentional), subsequent encounter -T63831S Toxic effect of contact with other venomous amphibian, accidental (unintentional), sequela -T63832A Toxic effect of contact with other venomous amphibian, intentional self-harm, initial encounter -T63832D Toxic effect of contact with other venomous amphibian, intentional self-harm, subsequent encounter -T63832S Toxic effect of contact with other venomous amphibian, intentional self-harm, sequela -T63833A Toxic effect of contact with other venomous amphibian, assault, initial encounter -T63833D Toxic effect of contact with other venomous amphibian, assault, subsequent encounter -T63833S Toxic effect of contact with other venomous amphibian, assault, sequela -T63834A Toxic effect of contact with other venomous amphibian, undetermined, initial encounter -T63834D Toxic effect of contact with other venomous amphibian, undetermined, subsequent encounter -T63834S Toxic effect of contact with other venomous amphibian, undetermined, sequela -T63891A Toxic effect of contact with other venomous animals, accidental (unintentional), initial encounter -T63891D Toxic effect of contact with other venomous animals, accidental (unintentional), subsequent encounter -T63891S Toxic effect of contact with other venomous animals, accidental (unintentional), sequela -T63892A Toxic effect of contact with other venomous animals, intentional self-harm, initial encounter -T63892D Toxic effect of contact with other venomous animals, intentional self-harm, subsequent encounter -T63892S Toxic effect of contact with other venomous animals, intentional self-harm, sequela -T63893A Toxic effect of contact with other venomous animals, assault, initial encounter -T63893D Toxic effect of contact with other venomous animals, assault, subsequent encounter -T63893S Toxic effect of contact with other venomous animals, assault, sequela -T63894A Toxic effect of contact with other venomous animals, undetermined, initial encounter -T63894D Toxic effect of contact with other venomous animals, undetermined, subsequent encounter -T63894S Toxic effect of contact with other venomous animals, undetermined, sequela -T6391XA Toxic effect of contact with unspecified venomous animal, accidental (unintentional), initial encounter -T6391XD Toxic effect of contact with unspecified venomous animal, accidental (unintentional), subsequent encounter -T6391XS Toxic effect of contact with unspecified venomous animal, accidental (unintentional), sequela -T6392XA Toxic effect of contact with unspecified venomous animal, intentional self-harm, initial encounter -T6392XD Toxic effect of contact with unspecified venomous animal, intentional self-harm, subsequent encounter -T6392XS Toxic effect of contact with unspecified venomous animal, intentional self-harm, sequela -T6393XA Toxic effect of contact with unspecified venomous animal, assault, initial encounter -T6393XD Toxic effect of contact with unspecified venomous animal, assault, subsequent encounter -T6393XS Toxic effect of contact with unspecified venomous animal, assault, sequela -T6394XA Toxic effect of contact with unspecified venomous animal, undetermined, initial encounter -T6394XD Toxic effect of contact with unspecified venomous animal, undetermined, subsequent encounter -T6394XS Toxic effect of contact with unspecified venomous animal, undetermined, sequela -T6401XA Toxic effect of aflatoxin, accidental (unintentional), initial encounter -T6401XD Toxic effect of aflatoxin, accidental (unintentional), subsequent encounter -T6401XS Toxic effect of aflatoxin, accidental (unintentional), sequela -T6402XA Toxic effect of aflatoxin, intentional self-harm, initial encounter -T6402XD Toxic effect of aflatoxin, intentional self-harm, subsequent encounter -T6402XS Toxic effect of aflatoxin, intentional self-harm, sequela -T6403XA Toxic effect of aflatoxin, assault, initial encounter -T6403XD Toxic effect of aflatoxin, assault, subsequent encounter -T6403XS Toxic effect of aflatoxin, assault, sequela -T6404XA Toxic effect of aflatoxin, undetermined, initial encounter -T6404XD Toxic effect of aflatoxin, undetermined, subsequent encounter -T6404XS Toxic effect of aflatoxin, undetermined, sequela -T6481XA Toxic effect of other mycotoxin food contaminants, accidental (unintentional), initial encounter -T6481XD Toxic effect of other mycotoxin food contaminants, accidental (unintentional), subsequent encounter -T6481XS Toxic effect of other mycotoxin food contaminants, accidental (unintentional), sequela -T6482XA Toxic effect of other mycotoxin food contaminants, intentional self-harm, initial encounter -T6482XD Toxic effect of other mycotoxin food contaminants, intentional self-harm, subsequent encounter -T6482XS Toxic effect of other mycotoxin food contaminants, intentional self-harm, sequela -T6483XA Toxic effect of other mycotoxin food contaminants, assault, initial encounter -T6483XD Toxic effect of other mycotoxin food contaminants, assault, subsequent encounter -T6483XS Toxic effect of other mycotoxin food contaminants, assault, sequela -T6484XA Toxic effect of other mycotoxin food contaminants, undetermined, initial encounter -T6484XD Toxic effect of other mycotoxin food contaminants, undetermined, subsequent encounter -T6484XS Toxic effect of other mycotoxin food contaminants, undetermined, sequela -T650X1A Toxic effect of cyanides, accidental (unintentional), initial encounter -T650X1D Toxic effect of cyanides, accidental (unintentional), subsequent encounter -T650X1S Toxic effect of cyanides, accidental (unintentional), sequela -T650X2A Toxic effect of cyanides, intentional self-harm, initial encounter -T650X2D Toxic effect of cyanides, intentional self-harm, subsequent encounter -T650X2S Toxic effect of cyanides, intentional self-harm, sequela -T650X3A Toxic effect of cyanides, assault, initial encounter -T650X3D Toxic effect of cyanides, assault, subsequent encounter -T650X3S Toxic effect of cyanides, assault, sequela -T650X4A Toxic effect of cyanides, undetermined, initial encounter -T650X4D Toxic effect of cyanides, undetermined, subsequent encounter -T650X4S Toxic effect of cyanides, undetermined, sequela -T651X1A Toxic effect of strychnine and its salts, accidental (unintentional), initial encounter -T651X1D Toxic effect of strychnine and its salts, accidental (unintentional), subsequent encounter -T651X1S Toxic effect of strychnine and its salts, accidental (unintentional), sequela -T651X2A Toxic effect of strychnine and its salts, intentional self-harm, initial encounter -T651X2D Toxic effect of strychnine and its salts, intentional self-harm, subsequent encounter -T651X2S Toxic effect of strychnine and its salts, intentional self-harm, sequela -T651X3A Toxic effect of strychnine and its salts, assault, initial encounter -T651X3D Toxic effect of strychnine and its salts, assault, subsequent encounter -T651X3S Toxic effect of strychnine and its salts, assault, sequela -T651X4A Toxic effect of strychnine and its salts, undetermined, initial encounter -T651X4D Toxic effect of strychnine and its salts, undetermined, subsequent encounter -T651X4S Toxic effect of strychnine and its salts, undetermined, sequela -T65211A Toxic effect of chewing tobacco, accidental (unintentional), initial encounter -T65211D Toxic effect of chewing tobacco, accidental (unintentional), subsequent encounter -T65211S Toxic effect of chewing tobacco, accidental (unintentional), sequela -T65212A Toxic effect of chewing tobacco, intentional self-harm, initial encounter -T65212D Toxic effect of chewing tobacco, intentional self-harm, subsequent encounter -T65212S Toxic effect of chewing tobacco, intentional self-harm, sequela -T65213A Toxic effect of chewing tobacco, assault, initial encounter -T65213D Toxic effect of chewing tobacco, assault, subsequent encounter -T65213S Toxic effect of chewing tobacco, assault, sequela -T65214A Toxic effect of chewing tobacco, undetermined, initial encounter -T65214D Toxic effect of chewing tobacco, undetermined, subsequent encounter -T65214S Toxic effect of chewing tobacco, undetermined, sequela -T65221A Toxic effect of tobacco cigarettes, accidental (unintentional), initial encounter -T65221D Toxic effect of tobacco cigarettes, accidental (unintentional), subsequent encounter -T65221S Toxic effect of tobacco cigarettes, accidental (unintentional), sequela -T65222A Toxic effect of tobacco cigarettes, intentional self-harm, initial encounter -T65222D Toxic effect of tobacco cigarettes, intentional self-harm, subsequent encounter -T65222S Toxic effect of tobacco cigarettes, intentional self-harm, sequela -T65223A Toxic effect of tobacco cigarettes, assault, initial encounter -T65223D Toxic effect of tobacco cigarettes, assault, subsequent encounter -T65223S Toxic effect of tobacco cigarettes, assault, sequela -T65224A Toxic effect of tobacco cigarettes, undetermined, initial encounter -T65224D Toxic effect of tobacco cigarettes, undetermined, subsequent encounter -T65224S Toxic effect of tobacco cigarettes, undetermined, sequela -T65291A Toxic effect of other tobacco and nicotine, accidental (unintentional), initial encounter -T65291D Toxic effect of other tobacco and nicotine, accidental (unintentional), subsequent encounter -T65291S Toxic effect of other tobacco and nicotine, accidental (unintentional), sequela -T65292A Toxic effect of other tobacco and nicotine, intentional self-harm, initial encounter -T65292D Toxic effect of other tobacco and nicotine, intentional self-harm, subsequent encounter -T65292S Toxic effect of other tobacco and nicotine, intentional self-harm, sequela -T65293A Toxic effect of other tobacco and nicotine, assault, initial encounter -T65293D Toxic effect of other tobacco and nicotine, assault, subsequent encounter -T65293S Toxic effect of other tobacco and nicotine, assault, sequela -T65294A Toxic effect of other tobacco and nicotine, undetermined, initial encounter -T65294D Toxic effect of other tobacco and nicotine, undetermined, subsequent encounter -T65294S Toxic effect of other tobacco and nicotine, undetermined, sequela -T653X1A Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, accidental (unintentional), initial encounter -T653X1D Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, accidental (unintentional), subsequent encounter -T653X1S Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, accidental (unintentional), sequela -T653X2A Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, intentional self-harm, initial encounter -T653X2D Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, intentional self-harm, subsequent encounter -T653X2S Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, intentional self-harm, sequela -T653X3A Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, assault, initial encounter -T653X3D Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, assault, subsequent encounter -T653X3S Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, assault, sequela -T653X4A Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, undetermined, initial encounter -T653X4D Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, undetermined, subsequent encounter -T653X4S Toxic effect of nitroderivatives and aminoderivatives of benzene and its homologues, undetermined, sequela -T654X1A Toxic effect of carbon disulfide, accidental (unintentional), initial encounter -T654X1D Toxic effect of carbon disulfide, accidental (unintentional), subsequent encounter -T654X1S Toxic effect of carbon disulfide, accidental (unintentional), sequela -T654X2A Toxic effect of carbon disulfide, intentional self-harm, initial encounter -T654X2D Toxic effect of carbon disulfide, intentional self-harm, subsequent encounter -T654X2S Toxic effect of carbon disulfide, intentional self-harm, sequela -T654X3A Toxic effect of carbon disulfide, assault, initial encounter -T654X3D Toxic effect of carbon disulfide, assault, subsequent encounter -T654X3S Toxic effect of carbon disulfide, assault, sequela -T654X4A Toxic effect of carbon disulfide, undetermined, initial encounter -T654X4D Toxic effect of carbon disulfide, undetermined, subsequent encounter -T654X4S Toxic effect of carbon disulfide, undetermined, sequela -T655X1A Toxic effect of nitroglycerin and other nitric acids and esters, accidental (unintentional), initial encounter -T655X1D Toxic effect of nitroglycerin and other nitric acids and esters, accidental (unintentional), subsequent encounter -T655X1S Toxic effect of nitroglycerin and other nitric acids and esters, accidental (unintentional), sequela -T655X2A Toxic effect of nitroglycerin and other nitric acids and esters, intentional self-harm, initial encounter -T655X2D Toxic effect of nitroglycerin and other nitric acids and esters, intentional self-harm, subsequent encounter -T655X2S Toxic effect of nitroglycerin and other nitric acids and esters, intentional self-harm, sequela -T655X3A Toxic effect of nitroglycerin and other nitric acids and esters, assault, initial encounter -T655X3D Toxic effect of nitroglycerin and other nitric acids and esters, assault, subsequent encounter -T655X3S Toxic effect of nitroglycerin and other nitric acids and esters, assault, sequela -T655X4A Toxic effect of nitroglycerin and other nitric acids and esters, undetermined, initial encounter -T655X4D Toxic effect of nitroglycerin and other nitric acids and esters, undetermined, subsequent encounter -T655X4S Toxic effect of nitroglycerin and other nitric acids and esters, undetermined, sequela -T656X1A Toxic effect of paints and dyes, not elsewhere classified, accidental (unintentional), initial encounter -T656X1D Toxic effect of paints and dyes, not elsewhere classified, accidental (unintentional), subsequent encounter -T656X1S Toxic effect of paints and dyes, not elsewhere classified, accidental (unintentional), sequela -T656X2A Toxic effect of paints and dyes, not elsewhere classified, intentional self-harm, initial encounter -T656X2D Toxic effect of paints and dyes, not elsewhere classified, intentional self-harm, subsequent encounter -T656X2S Toxic effect of paints and dyes, not elsewhere classified, intentional self-harm, sequela -T656X3A Toxic effect of paints and dyes, not elsewhere classified, assault, initial encounter -T656X3D Toxic effect of paints and dyes, not elsewhere classified, assault, subsequent encounter -T656X3S Toxic effect of paints and dyes, not elsewhere classified, assault, sequela -T656X4A Toxic effect of paints and dyes, not elsewhere classified, undetermined, initial encounter -T656X4D Toxic effect of paints and dyes, not elsewhere classified, undetermined, subsequent encounter -T656X4S Toxic effect of paints and dyes, not elsewhere classified, undetermined, sequela -T65811A Toxic effect of latex, accidental (unintentional), initial encounter -T65811D Toxic effect of latex, accidental (unintentional), subsequent encounter -T65811S Toxic effect of latex, accidental (unintentional), sequela -T65812A Toxic effect of latex, intentional self-harm, initial encounter -T65812D Toxic effect of latex, intentional self-harm, subsequent encounter -T65812S Toxic effect of latex, intentional self-harm, sequela -T65813A Toxic effect of latex, assault, initial encounter -T65813D Toxic effect of latex, assault, subsequent encounter -T65813S Toxic effect of latex, assault, sequela -T65814A Toxic effect of latex, undetermined, initial encounter -T65814D Toxic effect of latex, undetermined, subsequent encounter -T65814S Toxic effect of latex, undetermined, sequela -T65821A Toxic effect of harmful algae and algae toxins, accidental (unintentional), initial encounter -T65821D Toxic effect of harmful algae and algae toxins, accidental (unintentional), subsequent encounter -T65821S Toxic effect of harmful algae and algae toxins, accidental (unintentional), sequela -T65822A Toxic effect of harmful algae and algae toxins, intentional self-harm, initial encounter -T65822D Toxic effect of harmful algae and algae toxins, intentional self-harm, subsequent encounter -T65822S Toxic effect of harmful algae and algae toxins, intentional self-harm, sequela -T65823A Toxic effect of harmful algae and algae toxins, assault, initial encounter -T65823D Toxic effect of harmful algae and algae toxins, assault, subsequent encounter -T65823S Toxic effect of harmful algae and algae toxins, assault, sequela -T65824A Toxic effect of harmful algae and algae toxins, undetermined, initial encounter -T65824D Toxic effect of harmful algae and algae toxins, undetermined, subsequent encounter -T65824S Toxic effect of harmful algae and algae toxins, undetermined, sequela -T65831A Toxic effect of fiberglass, accidental (unintentional), initial encounter -T65831D Toxic effect of fiberglass, accidental (unintentional), subsequent encounter -T65831S Toxic effect of fiberglass, accidental (unintentional), sequela -T65832A Toxic effect of fiberglass, intentional self-harm, initial encounter -T65832D Toxic effect of fiberglass, intentional self-harm, subsequent encounter -T65832S Toxic effect of fiberglass, intentional self-harm, sequela -T65833A Toxic effect of fiberglass, assault, initial encounter -T65833D Toxic effect of fiberglass, assault, subsequent encounter -T65833S Toxic effect of fiberglass, assault, sequela -T65834A Toxic effect of fiberglass, undetermined, initial encounter -T65834D Toxic effect of fiberglass, undetermined, subsequent encounter -T65834S Toxic effect of fiberglass, undetermined, sequela -T65891A Toxic effect of other specified substances, accidental (unintentional), initial encounter -T65891D Toxic effect of other specified substances, accidental (unintentional), subsequent encounter -T65891S Toxic effect of other specified substances, accidental (unintentional), sequela -T65892A Toxic effect of other specified substances, intentional self-harm, initial encounter -T65892D Toxic effect of other specified substances, intentional self-harm, subsequent encounter -T65892S Toxic effect of other specified substances, intentional self-harm, sequela -T65893A Toxic effect of other specified substances, assault, initial encounter -T65893D Toxic effect of other specified substances, assault, subsequent encounter -T65893S Toxic effect of other specified substances, assault, sequela -T65894A Toxic effect of other specified substances, undetermined, initial encounter -T65894D Toxic effect of other specified substances, undetermined, subsequent encounter -T65894S Toxic effect of other specified substances, undetermined, sequela -T6591XA Toxic effect of unspecified substance, accidental (unintentional), initial encounter -T6591XD Toxic effect of unspecified substance, accidental (unintentional), subsequent encounter -T6591XS Toxic effect of unspecified substance, accidental (unintentional), sequela -T6592XA Toxic effect of unspecified substance, intentional self-harm, initial encounter -T6592XD Toxic effect of unspecified substance, intentional self-harm, subsequent encounter -T6592XS Toxic effect of unspecified substance, intentional self-harm, sequela -T6593XA Toxic effect of unspecified substance, assault, initial encounter -T6593XD Toxic effect of unspecified substance, assault, subsequent encounter -T6593XS Toxic effect of unspecified substance, assault, sequela -T6594XA Toxic effect of unspecified substance, undetermined, initial encounter -T6594XD Toxic effect of unspecified substance, undetermined, subsequent encounter -T6594XS Toxic effect of unspecified substance, undetermined, sequela -T66XXXA Radiation sickness, unspecified, initial encounter -T66XXXD Radiation sickness, unspecified, subsequent encounter -T66XXXS Radiation sickness, unspecified, sequela -T670XXA Heatstroke and sunstroke, initial encounter -T670XXD Heatstroke and sunstroke, subsequent encounter -T670XXS Heatstroke and sunstroke, sequela -T671XXA Heat syncope, initial encounter -T671XXD Heat syncope, subsequent encounter -T671XXS Heat syncope, sequela -T672XXA Heat cramp, initial encounter -T672XXD Heat cramp, subsequent encounter -T672XXS Heat cramp, sequela -T673XXA Heat exhaustion, anhydrotic, initial encounter -T673XXD Heat exhaustion, anhydrotic, subsequent encounter -T673XXS Heat exhaustion, anhydrotic, sequela -T674XXA Heat exhaustion due to salt depletion, initial encounter -T674XXD Heat exhaustion due to salt depletion, subsequent encounter -T674XXS Heat exhaustion due to salt depletion, sequela -T675XXA Heat exhaustion, unspecified, initial encounter -T675XXD Heat exhaustion, unspecified, subsequent encounter -T675XXS Heat exhaustion, unspecified, sequela -T676XXA Heat fatigue, transient, initial encounter -T676XXD Heat fatigue, transient, subsequent encounter -T676XXS Heat fatigue, transient, sequela -T677XXA Heat edema, initial encounter -T677XXD Heat edema, subsequent encounter -T677XXS Heat edema, sequela -T678XXA Other effects of heat and light, initial encounter -T678XXD Other effects of heat and light, subsequent encounter -T678XXS Other effects of heat and light, sequela -T679XXA Effect of heat and light, unspecified, initial encounter -T679XXD Effect of heat and light, unspecified, subsequent encounter -T679XXS Effect of heat and light, unspecified, sequela -T68XXXA Hypothermia, initial encounter -T68XXXD Hypothermia, subsequent encounter -T68XXXS Hypothermia, sequela -T69011A Immersion hand, right hand, initial encounter -T69011D Immersion hand, right hand, subsequent encounter -T69011S Immersion hand, right hand, sequela -T69012A Immersion hand, left hand, initial encounter -T69012D Immersion hand, left hand, subsequent encounter -T69012S Immersion hand, left hand, sequela -T69019A Immersion hand, unspecified hand, initial encounter -T69019D Immersion hand, unspecified hand, subsequent encounter -T69019S Immersion hand, unspecified hand, sequela -T69021A Immersion foot, right foot, initial encounter -T69021D Immersion foot, right foot, subsequent encounter -T69021S Immersion foot, right foot, sequela -T69022A Immersion foot, left foot, initial encounter -T69022D Immersion foot, left foot, subsequent encounter -T69022S Immersion foot, left foot, sequela -T69029A Immersion foot, unspecified foot, initial encounter -T69029D Immersion foot, unspecified foot, subsequent encounter -T69029S Immersion foot, unspecified foot, sequela -T691XXA Chilblains, initial encounter -T691XXD Chilblains, subsequent encounter -T691XXS Chilblains, sequela -T698XXA Other specified effects of reduced temperature, initial encounter -T698XXD Other specified effects of reduced temperature, subsequent encounter -T698XXS Other specified effects of reduced temperature, sequela -T699XXA Effect of reduced temperature, unspecified, initial encounter -T699XXD Effect of reduced temperature, unspecified, subsequent encounter -T699XXS Effect of reduced temperature, unspecified, sequela -T700XXA Otitic barotrauma, initial encounter -T700XXD Otitic barotrauma, subsequent encounter -T700XXS Otitic barotrauma, sequela -T701XXA Sinus barotrauma, initial encounter -T701XXD Sinus barotrauma, subsequent encounter -T701XXS Sinus barotrauma, sequela -T7020XA Unspecified effects of high altitude, initial encounter -T7020XD Unspecified effects of high altitude, subsequent encounter -T7020XS Unspecified effects of high altitude, sequela -T7029XA Other effects of high altitude, initial encounter -T7029XD Other effects of high altitude, subsequent encounter -T7029XS Other effects of high altitude, sequela -T703XXA Caisson disease [decompression sickness], initial encounter -T703XXD Caisson disease [decompression sickness], subsequent encounter -T703XXS Caisson disease [decompression sickness], sequela -T704XXA Effects of high-pressure fluids, initial encounter -T704XXD Effects of high-pressure fluids, subsequent encounter -T704XXS Effects of high-pressure fluids, sequela -T708XXA Other effects of air pressure and water pressure, initial encounter -T708XXD Other effects of air pressure and water pressure, subsequent encounter -T708XXS Other effects of air pressure and water pressure, sequela -T709XXA Effect of air pressure and water pressure, unspecified, initial encounter -T709XXD Effect of air pressure and water pressure, unspecified, subsequent encounter -T709XXS Effect of air pressure and water pressure, unspecified, sequela -T71111A Asphyxiation due to smothering under pillow, accidental, initial encounter -T71111D Asphyxiation due to smothering under pillow, accidental, subsequent encounter -T71111S Asphyxiation due to smothering under pillow, accidental, sequela -T71112A Asphyxiation due to smothering under pillow, intentional self-harm, initial encounter -T71112D Asphyxiation due to smothering under pillow, intentional self-harm, subsequent encounter -T71112S Asphyxiation due to smothering under pillow, intentional self-harm, sequela -T71113A Asphyxiation due to smothering under pillow, assault, initial encounter -T71113D Asphyxiation due to smothering under pillow, assault, subsequent encounter -T71113S Asphyxiation due to smothering under pillow, assault, sequela -T71114A Asphyxiation due to smothering under pillow, undetermined, initial encounter -T71114D Asphyxiation due to smothering under pillow, undetermined, subsequent encounter -T71114S Asphyxiation due to smothering under pillow, undetermined, sequela -T71121A Asphyxiation due to plastic bag, accidental, initial encounter -T71121D Asphyxiation due to plastic bag, accidental, subsequent encounter -T71121S Asphyxiation due to plastic bag, accidental, sequela -T71122A Asphyxiation due to plastic bag, intentional self-harm, initial encounter -T71122D Asphyxiation due to plastic bag, intentional self-harm, subsequent encounter -T71122S Asphyxiation due to plastic bag, intentional self-harm, sequela -T71123A Asphyxiation due to plastic bag, assault, initial encounter -T71123D Asphyxiation due to plastic bag, assault, subsequent encounter -T71123S Asphyxiation due to plastic bag, assault, sequela -T71124A Asphyxiation due to plastic bag, undetermined, initial encounter -T71124D Asphyxiation due to plastic bag, undetermined, subsequent encounter -T71124S Asphyxiation due to plastic bag, undetermined, sequela -T71131A Asphyxiation due to being trapped in bed linens, accidental, initial encounter -T71131D Asphyxiation due to being trapped in bed linens, accidental, subsequent encounter -T71131S Asphyxiation due to being trapped in bed linens, accidental, sequela -T71132A Asphyxiation due to being trapped in bed linens, intentional self-harm, initial encounter -T71132D Asphyxiation due to being trapped in bed linens, intentional self-harm, subsequent encounter -T71132S Asphyxiation due to being trapped in bed linens, intentional self-harm, sequela -T71133A Asphyxiation due to being trapped in bed linens, assault, initial encounter -T71133D Asphyxiation due to being trapped in bed linens, assault, subsequent encounter -T71133S Asphyxiation due to being trapped in bed linens, assault, sequela -T71134A Asphyxiation due to being trapped in bed linens, undetermined, initial encounter -T71134D Asphyxiation due to being trapped in bed linens, undetermined, subsequent encounter -T71134S Asphyxiation due to being trapped in bed linens, undetermined, sequela -T71141A Asphyxiation due to smothering under another person's body (in bed), accidental, initial encounter -T71141D Asphyxiation due to smothering under another person's body (in bed), accidental, subsequent encounter -T71141S Asphyxiation due to smothering under another person's body (in bed), accidental, sequela -T71143A Asphyxiation due to smothering under another person's body (in bed), assault, initial encounter -T71143D Asphyxiation due to smothering under another person's body (in bed), assault, subsequent encounter -T71143S Asphyxiation due to smothering under another person's body (in bed), assault, sequela -T71144A Asphyxiation due to smothering under another person's body (in bed), undetermined, initial encounter -T71144D Asphyxiation due to smothering under another person's body (in bed), undetermined, subsequent encounter -T71144S Asphyxiation due to smothering under another person's body (in bed), undetermined, sequela -T71151A Asphyxiation due to smothering in furniture, accidental, initial encounter -T71151D Asphyxiation due to smothering in furniture, accidental, subsequent encounter -T71151S Asphyxiation due to smothering in furniture, accidental, sequela -T71152A Asphyxiation due to smothering in furniture, intentional self-harm, initial encounter -T71152D Asphyxiation due to smothering in furniture, intentional self-harm, subsequent encounter -T71152S Asphyxiation due to smothering in furniture, intentional self-harm, sequela -T71153A Asphyxiation due to smothering in furniture, assault, initial encounter -T71153D Asphyxiation due to smothering in furniture, assault, subsequent encounter -T71153S Asphyxiation due to smothering in furniture, assault, sequela -T71154A Asphyxiation due to smothering in furniture, undetermined, initial encounter -T71154D Asphyxiation due to smothering in furniture, undetermined, subsequent encounter -T71154S Asphyxiation due to smothering in furniture, undetermined, sequela -T71161A Asphyxiation due to hanging, accidental, initial encounter -T71161D Asphyxiation due to hanging, accidental, subsequent encounter -T71161S Asphyxiation due to hanging, accidental, sequela -T71162A Asphyxiation due to hanging, intentional self-harm, initial encounter -T71162D Asphyxiation due to hanging, intentional self-harm, subsequent encounter -T71162S Asphyxiation due to hanging, intentional self-harm, sequela -T71163A Asphyxiation due to hanging, assault, initial encounter -T71163D Asphyxiation due to hanging, assault, subsequent encounter -T71163S Asphyxiation due to hanging, assault, sequela -T71164A Asphyxiation due to hanging, undetermined, initial encounter -T71164D Asphyxiation due to hanging, undetermined, subsequent encounter -T71164S Asphyxiation due to hanging, undetermined, sequela -T71191A Asphyxiation due to mechanical threat to breathing due to other causes, accidental, initial encounter -T71191D Asphyxiation due to mechanical threat to breathing due to other causes, accidental, subsequent encounter -T71191S Asphyxiation due to mechanical threat to breathing due to other causes, accidental, sequela -T71192A Asphyxiation due to mechanical threat to breathing due to other causes, intentional self-harm, initial encounter -T71192D Asphyxiation due to mechanical threat to breathing due to other causes, intentional self-harm, subsequent encounter -T71192S Asphyxiation due to mechanical threat to breathing due to other causes, intentional self-harm, sequela -T71193A Asphyxiation due to mechanical threat to breathing due to other causes, assault, initial encounter -T71193D Asphyxiation due to mechanical threat to breathing due to other causes, assault, subsequent encounter -T71193S Asphyxiation due to mechanical threat to breathing due to other causes, assault, sequela -T71194A Asphyxiation due to mechanical threat to breathing due to other causes, undetermined, initial encounter -T71194D Asphyxiation due to mechanical threat to breathing due to other causes, undetermined, subsequent encounter -T71194S Asphyxiation due to mechanical threat to breathing due to other causes, undetermined, sequela -T7120XA Asphyxiation due to systemic oxygen deficiency due to low oxygen content in ambient air due to unspecified cause, initial encounter -T7120XD Asphyxiation due to systemic oxygen deficiency due to low oxygen content in ambient air due to unspecified cause, subsequent encounter -T7120XS Asphyxiation due to systemic oxygen deficiency due to low oxygen content in ambient air due to unspecified cause, sequela -T7121XA Asphyxiation due to cave-in or falling earth, initial encounter -T7121XD Asphyxiation due to cave-in or falling earth, subsequent encounter -T7121XS Asphyxiation due to cave-in or falling earth, sequela -T71221A Asphyxiation due to being trapped in a car trunk, accidental, initial encounter -T71221D Asphyxiation due to being trapped in a car trunk, accidental, subsequent encounter -T71221S Asphyxiation due to being trapped in a car trunk, accidental, sequela -T71222A Asphyxiation due to being trapped in a car trunk, intentional self-harm, initial encounter -T71222D Asphyxiation due to being trapped in a car trunk, intentional self-harm, subsequent encounter -T71222S Asphyxiation due to being trapped in a car trunk, intentional self-harm, sequela -T71223A Asphyxiation due to being trapped in a car trunk, assault, initial encounter -T71223D Asphyxiation due to being trapped in a car trunk, assault, subsequent encounter -T71223S Asphyxiation due to being trapped in a car trunk, assault, sequela -T71224A Asphyxiation due to being trapped in a car trunk, undetermined, initial encounter -T71224D Asphyxiation due to being trapped in a car trunk, undetermined, subsequent encounter -T71224S Asphyxiation due to being trapped in a car trunk, undetermined, sequela -T71231A Asphyxiation due to being trapped in a (discarded) refrigerator, accidental, initial encounter -T71231D Asphyxiation due to being trapped in a (discarded) refrigerator, accidental, subsequent encounter -T71231S Asphyxiation due to being trapped in a (discarded) refrigerator, accidental, sequela -T71232A Asphyxiation due to being trapped in a (discarded) refrigerator, intentional self-harm, initial encounter -T71232D Asphyxiation due to being trapped in a (discarded) refrigerator, intentional self-harm, subsequent encounter -T71232S Asphyxiation due to being trapped in a (discarded) refrigerator, intentional self-harm, sequela -T71233A Asphyxiation due to being trapped in a (discarded) refrigerator, assault, initial encounter -T71233D Asphyxiation due to being trapped in a (discarded) refrigerator, assault, subsequent encounter -T71233S Asphyxiation due to being trapped in a (discarded) refrigerator, assault, sequela -T71234A Asphyxiation due to being trapped in a (discarded) refrigerator, undetermined, initial encounter -T71234D Asphyxiation due to being trapped in a (discarded) refrigerator, undetermined, subsequent encounter -T71234S Asphyxiation due to being trapped in a (discarded) refrigerator, undetermined, sequela -T7129XA Asphyxiation due to being trapped in other low oxygen environment, initial encounter -T7129XD Asphyxiation due to being trapped in other low oxygen environment, subsequent encounter -T7129XS Asphyxiation due to being trapped in other low oxygen environment, sequela -T719XXA Asphyxiation due to unspecified cause, initial encounter -T719XXD Asphyxiation due to unspecified cause, subsequent encounter -T719XXS Asphyxiation due to unspecified cause, sequela -T730XXA Starvation, initial encounter -T730XXD Starvation, subsequent encounter -T730XXS Starvation, sequela -T731XXA Deprivation of water, initial encounter -T731XXD Deprivation of water, subsequent encounter -T731XXS Deprivation of water, sequela -T732XXA Exhaustion due to exposure, initial encounter -T732XXD Exhaustion due to exposure, subsequent encounter -T732XXS Exhaustion due to exposure, sequela -T733XXA Exhaustion due to excessive exertion, initial encounter -T733XXD Exhaustion due to excessive exertion, subsequent encounter -T733XXS Exhaustion due to excessive exertion, sequela -T738XXA Other effects of deprivation, initial encounter -T738XXD Other effects of deprivation, subsequent encounter -T738XXS Other effects of deprivation, sequela -T739XXA Effect of deprivation, unspecified, initial encounter -T739XXD Effect of deprivation, unspecified, subsequent encounter -T739XXS Effect of deprivation, unspecified, sequela -T7401XA Adult neglect or abandonment, confirmed, initial encounter -T7401XD Adult neglect or abandonment, confirmed, subsequent encounter -T7401XS Adult neglect or abandonment, confirmed, sequela -T7402XA Child neglect or abandonment, confirmed, initial encounter -T7402XD Child neglect or abandonment, confirmed, subsequent encounter -T7402XS Child neglect or abandonment, confirmed, sequela -T7411XA Adult physical abuse, confirmed, initial encounter -T7411XD Adult physical abuse, confirmed, subsequent encounter -T7411XS Adult physical abuse, confirmed, sequela -T7412XA Child physical abuse, confirmed, initial encounter -T7412XD Child physical abuse, confirmed, subsequent encounter -T7412XS Child physical abuse, confirmed, sequela -T7421XA Adult sexual abuse, confirmed, initial encounter -T7421XD Adult sexual abuse, confirmed, subsequent encounter -T7421XS Adult sexual abuse, confirmed, sequela -T7422XA Child sexual abuse, confirmed, initial encounter -T7422XD Child sexual abuse, confirmed, subsequent encounter -T7422XS Child sexual abuse, confirmed, sequela -T7431XA Adult psychological abuse, confirmed, initial encounter -T7431XD Adult psychological abuse, confirmed, subsequent encounter -T7431XS Adult psychological abuse, confirmed, sequela -T7432XA Child psychological abuse, confirmed, initial encounter -T7432XD Child psychological abuse, confirmed, subsequent encounter -T7432XS Child psychological abuse, confirmed, sequela -T744XXA Shaken infant syndrome, initial encounter -T744XXD Shaken infant syndrome, subsequent encounter -T744XXS Shaken infant syndrome, sequela -T7491XA Unspecified adult maltreatment, confirmed, initial encounter -T7491XD Unspecified adult maltreatment, confirmed, subsequent encounter -T7491XS Unspecified adult maltreatment, confirmed, sequela -T7492XA Unspecified child maltreatment, confirmed, initial encounter -T7492XD Unspecified child maltreatment, confirmed, subsequent encounter -T7492XS Unspecified child maltreatment, confirmed, sequela -T7500XA Unspecified effects of lightning, initial encounter -T7500XD Unspecified effects of lightning, subsequent encounter -T7500XS Unspecified effects of lightning, sequela -T7501XA Shock due to being struck by lightning, initial encounter -T7501XD Shock due to being struck by lightning, subsequent encounter -T7501XS Shock due to being struck by lightning, sequela -T7509XA Other effects of lightning, initial encounter -T7509XD Other effects of lightning, subsequent encounter -T7509XS Other effects of lightning, sequela -T751XXA Unspecified effects of drowning and nonfatal submersion, initial encounter -T751XXD Unspecified effects of drowning and nonfatal submersion, subsequent encounter -T751XXS Unspecified effects of drowning and nonfatal submersion, sequela -T7520XA Unspecified effects of vibration, initial encounter -T7520XD Unspecified effects of vibration, subsequent encounter -T7520XS Unspecified effects of vibration, sequela -T7521XA Pneumatic hammer syndrome, initial encounter -T7521XD Pneumatic hammer syndrome, subsequent encounter -T7521XS Pneumatic hammer syndrome, sequela -T7522XA Traumatic vasospastic syndrome, initial encounter -T7522XD Traumatic vasospastic syndrome, subsequent encounter -T7522XS Traumatic vasospastic syndrome, sequela -T7523XA Vertigo from infrasound, initial encounter -T7523XD Vertigo from infrasound, subsequent encounter -T7523XS Vertigo from infrasound, sequela -T7529XA Other effects of vibration, initial encounter -T7529XD Other effects of vibration, subsequent encounter -T7529XS Other effects of vibration, sequela -T753XXA Motion sickness, initial encounter -T753XXD Motion sickness, subsequent encounter -T753XXS Motion sickness, sequela -T754XXA Electrocution, initial encounter -T754XXD Electrocution, subsequent encounter -T754XXS Electrocution, sequela -T7581XA Effects of abnormal gravitation [G] forces, initial encounter -T7581XD Effects of abnormal gravitation [G] forces, subsequent encounter -T7581XS Effects of abnormal gravitation [G] forces, sequela -T7582XA Effects of weightlessness, initial encounter -T7582XD Effects of weightlessness, subsequent encounter -T7582XS Effects of weightlessness, sequela -T7589XA Other specified effects of external causes, initial encounter -T7589XD Other specified effects of external causes, subsequent encounter -T7589XS Other specified effects of external causes, sequela -T7601XA Adult neglect or abandonment, suspected, initial encounter -T7601XD Adult neglect or abandonment, suspected, subsequent encounter -T7601XS Adult neglect or abandonment, suspected, sequela -T7602XA Child neglect or abandonment, suspected, initial encounter -T7602XD Child neglect or abandonment, suspected, subsequent encounter -T7602XS Child neglect or abandonment, suspected, sequela -T7611XA Adult physical abuse, suspected, initial encounter -T7611XD Adult physical abuse, suspected, subsequent encounter -T7611XS Adult physical abuse, suspected, sequela -T7612XA Child physical abuse, suspected, initial encounter -T7612XD Child physical abuse, suspected, subsequent encounter -T7612XS Child physical abuse, suspected, sequela -T7621XA Adult sexual abuse, suspected, initial encounter -T7621XD Adult sexual abuse, suspected, subsequent encounter -T7621XS Adult sexual abuse, suspected, sequela -T7622XA Child sexual abuse, suspected, initial encounter -T7622XD Child sexual abuse, suspected, subsequent encounter -T7622XS Child sexual abuse, suspected, sequela -T7631XA Adult psychological abuse, suspected, initial encounter -T7631XD Adult psychological abuse, suspected, subsequent encounter -T7631XS Adult psychological abuse, suspected, sequela -T7632XA Child psychological abuse, suspected, initial encounter -T7632XD Child psychological abuse, suspected, subsequent encounter -T7632XS Child psychological abuse, suspected, sequela -T7691XA Unspecified adult maltreatment, suspected, initial encounter -T7691XD Unspecified adult maltreatment, suspected, subsequent encounter -T7691XS Unspecified adult maltreatment, suspected, sequela -T7692XA Unspecified child maltreatment, suspected, initial encounter -T7692XD Unspecified child maltreatment, suspected, subsequent encounter -T7692XS Unspecified child maltreatment, suspected, sequela -T7800XA Anaphylactic reaction due to unspecified food, initial encounter -T7800XD Anaphylactic reaction due to unspecified food, subsequent encounter -T7800XS Anaphylactic reaction due to unspecified food, sequela -T7801XA Anaphylactic reaction due to peanuts, initial encounter -T7801XD Anaphylactic reaction due to peanuts, subsequent encounter -T7801XS Anaphylactic reaction due to peanuts, sequela -T7802XA Anaphylactic reaction due to shellfish (crustaceans), initial encounter -T7802XD Anaphylactic reaction due to shellfish (crustaceans), subsequent encounter -T7802XS Anaphylactic reaction due to shellfish (crustaceans), sequela -T7803XA Anaphylactic reaction due to other fish, initial encounter -T7803XD Anaphylactic reaction due to other fish, subsequent encounter -T7803XS Anaphylactic reaction due to other fish, sequela -T7804XA Anaphylactic reaction due to fruits and vegetables, initial encounter -T7804XD Anaphylactic reaction due to fruits and vegetables, subsequent encounter -T7804XS Anaphylactic reaction due to fruits and vegetables, sequela -T7805XA Anaphylactic reaction due to tree nuts and seeds, initial encounter -T7805XD Anaphylactic reaction due to tree nuts and seeds, subsequent encounter -T7805XS Anaphylactic reaction due to tree nuts and seeds, sequela -T7806XA Anaphylactic reaction due to food additives, initial encounter -T7806XD Anaphylactic reaction due to food additives, subsequent encounter -T7806XS Anaphylactic reaction due to food additives, sequela -T7807XA Anaphylactic reaction due to milk and dairy products, initial encounter -T7807XD Anaphylactic reaction due to milk and dairy products, subsequent encounter -T7807XS Anaphylactic reaction due to milk and dairy products, sequela -T7808XA Anaphylactic reaction due to eggs, initial encounter -T7808XD Anaphylactic reaction due to eggs, subsequent encounter -T7808XS Anaphylactic reaction due to eggs, sequela -T7809XA Anaphylactic reaction due to other food products, initial encounter -T7809XD Anaphylactic reaction due to other food products, subsequent encounter -T7809XS Anaphylactic reaction due to other food products, sequela -T781XXA Other adverse food reactions, not elsewhere classified, initial encounter -T781XXD Other adverse food reactions, not elsewhere classified, subsequent encounter -T781XXS Other adverse food reactions, not elsewhere classified, sequela -T782XXA Anaphylactic shock, unspecified, initial encounter -T782XXD Anaphylactic shock, unspecified, subsequent encounter -T782XXS Anaphylactic shock, unspecified, sequela -T783XXA Angioneurotic edema, initial encounter -T783XXD Angioneurotic edema, subsequent encounter -T783XXS Angioneurotic edema, sequela -T7840XA Allergy, unspecified, initial encounter -T7840XD Allergy, unspecified, subsequent encounter -T7840XS Allergy, unspecified, sequela -T7841XA Arthus phenomenon, initial encounter -T7841XD Arthus phenomenon, subsequent encounter -T7841XS Arthus phenomenon, sequela -T7849XA Other allergy, initial encounter -T7849XD Other allergy, subsequent encounter -T7849XS Other allergy, sequela -T788XXA Other adverse effects, not elsewhere classified, initial encounter -T788XXD Other adverse effects, not elsewhere classified, subsequent encounter -T788XXS Other adverse effects, not elsewhere classified, sequela -T790XXA Air embolism (traumatic), initial encounter -T790XXD Air embolism (traumatic), subsequent encounter -T790XXS Air embolism (traumatic), sequela -T791XXA Fat embolism (traumatic), initial encounter -T791XXD Fat embolism (traumatic), subsequent encounter -T791XXS Fat embolism (traumatic), sequela -T792XXA Traumatic secondary and recurrent hemorrhage and seroma, initial encounter -T792XXD Traumatic secondary and recurrent hemorrhage and seroma, subsequent encounter -T792XXS Traumatic secondary and recurrent hemorrhage and seroma, sequela -T794XXA Traumatic shock, initial encounter -T794XXD Traumatic shock, subsequent encounter -T794XXS Traumatic shock, sequela -T795XXA Traumatic anuria, initial encounter -T795XXD Traumatic anuria, subsequent encounter -T795XXS Traumatic anuria, sequela -T796XXA Traumatic ischemia of muscle, initial encounter -T796XXD Traumatic ischemia of muscle, subsequent encounter -T796XXS Traumatic ischemia of muscle, sequela -T797XXA Traumatic subcutaneous emphysema, initial encounter -T797XXD Traumatic subcutaneous emphysema, subsequent encounter -T797XXS Traumatic subcutaneous emphysema, sequela -T79A0XA Compartment syndrome, unspecified, initial encounter -T79A0XD Compartment syndrome, unspecified, subsequent encounter -T79A0XS Compartment syndrome, unspecified, sequela -T79A11A Traumatic compartment syndrome of right upper extremity, initial encounter -T79A11D Traumatic compartment syndrome of right upper extremity, subsequent encounter -T79A11S Traumatic compartment syndrome of right upper extremity, sequela -T79A12A Traumatic compartment syndrome of left upper extremity, initial encounter -T79A12D Traumatic compartment syndrome of left upper extremity, subsequent encounter -T79A12S Traumatic compartment syndrome of left upper extremity, sequela -T79A19A Traumatic compartment syndrome of unspecified upper extremity, initial encounter -T79A19D Traumatic compartment syndrome of unspecified upper extremity, subsequent encounter -T79A19S Traumatic compartment syndrome of unspecified upper extremity, sequela -T79A21A Traumatic compartment syndrome of right lower extremity, initial encounter -T79A21D Traumatic compartment syndrome of right lower extremity, subsequent encounter -T79A21S Traumatic compartment syndrome of right lower extremity, sequela -T79A22A Traumatic compartment syndrome of left lower extremity, initial encounter -T79A22D Traumatic compartment syndrome of left lower extremity, subsequent encounter -T79A22S Traumatic compartment syndrome of left lower extremity, sequela -T79A29A Traumatic compartment syndrome of unspecified lower extremity, initial encounter -T79A29D Traumatic compartment syndrome of unspecified lower extremity, subsequent encounter -T79A29S Traumatic compartment syndrome of unspecified lower extremity, sequela -T79A3XA Traumatic compartment syndrome of abdomen, initial encounter -T79A3XD Traumatic compartment syndrome of abdomen, subsequent encounter -T79A3XS Traumatic compartment syndrome of abdomen, sequela -T79A9XA Traumatic compartment syndrome of other sites, initial encounter -T79A9XD Traumatic compartment syndrome of other sites, subsequent encounter -T79A9XS Traumatic compartment syndrome of other sites, sequela -T798XXA Other early complications of trauma, initial encounter -T798XXD Other early complications of trauma, subsequent encounter -T798XXS Other early complications of trauma, sequela -T799XXA Unspecified early complication of trauma, initial encounter -T799XXD Unspecified early complication of trauma, subsequent encounter -T799XXS Unspecified early complication of trauma, sequela -T800XXA Air embolism following infusion, transfusion and therapeutic injection, initial encounter -T800XXD Air embolism following infusion, transfusion and therapeutic injection, subsequent encounter -T800XXS Air embolism following infusion, transfusion and therapeutic injection, sequela -T801XXA Vascular complications following infusion, transfusion and therapeutic injection, initial encounter -T801XXD Vascular complications following infusion, transfusion and therapeutic injection, subsequent encounter -T801XXS Vascular complications following infusion, transfusion and therapeutic injection, sequela -T80211A Bloodstream infection due to central venous catheter, initial encounter -T80211D Bloodstream infection due to central venous catheter, subsequent encounter -T80211S Bloodstream infection due to central venous catheter, sequela -T80212A Local infection due to central venous catheter, initial encounter -T80212D Local infection due to central venous catheter, subsequent encounter -T80212S Local infection due to central venous catheter, sequela -T80218A Other infection due to central venous catheter, initial encounter -T80218D Other infection due to central venous catheter, subsequent encounter -T80218S Other infection due to central venous catheter, sequela -T80219A Unspecified infection due to central venous catheter, initial encounter -T80219D Unspecified infection due to central venous catheter, subsequent encounter -T80219S Unspecified infection due to central venous catheter, sequela -T8022XA Acute infection following transfusion, infusion, or injection of blood and blood products, initial encounter -T8022XD Acute infection following transfusion, infusion, or injection of blood and blood products, subsequent encounter -T8022XS Acute infection following transfusion, infusion, or injection of blood and blood products, sequela -T8029XA Infection following other infusion, transfusion and therapeutic injection, initial encounter -T8029XD Infection following other infusion, transfusion and therapeutic injection, subsequent encounter -T8029XS Infection following other infusion, transfusion and therapeutic injection, sequela -T8030XA ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, initial encounter -T8030XD ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, subsequent encounter -T8030XS ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, sequela -T80310A ABO incompatibility with acute hemolytic transfusion reaction, initial encounter -T80310D ABO incompatibility with acute hemolytic transfusion reaction, subsequent encounter -T80310S ABO incompatibility with acute hemolytic transfusion reaction, sequela -T80311A ABO incompatibility with delayed hemolytic transfusion reaction, initial encounter -T80311D ABO incompatibility with delayed hemolytic transfusion reaction, subsequent encounter -T80311S ABO incompatibility with delayed hemolytic transfusion reaction, sequela -T80319A ABO incompatibility with hemolytic transfusion reaction, unspecified, initial encounter -T80319D ABO incompatibility with hemolytic transfusion reaction, unspecified, subsequent encounter -T80319S ABO incompatibility with hemolytic transfusion reaction, unspecified, sequela -T8039XA Other ABO incompatibility reaction due to transfusion of blood or blood products, initial encounter -T8039XD Other ABO incompatibility reaction due to transfusion of blood or blood products, subsequent encounter -T8039XS Other ABO incompatibility reaction due to transfusion of blood or blood products, sequela -T8040XA Rh incompatibility reaction due to transfusion of blood or blood products, unspecified, initial encounter -T8040XD Rh incompatibility reaction due to transfusion of blood or blood products, unspecified, subsequent encounter -T8040XS Rh incompatibility reaction due to transfusion of blood or blood products, unspecified, sequela -T80410A Rh incompatibility with acute hemolytic transfusion reaction, initial encounter -T80410D Rh incompatibility with acute hemolytic transfusion reaction, subsequent encounter -T80410S Rh incompatibility with acute hemolytic transfusion reaction, sequela -T80411A Rh incompatibility with delayed hemolytic transfusion reaction, initial encounter -T80411D Rh incompatibility with delayed hemolytic transfusion reaction, subsequent encounter -T80411S Rh incompatibility with delayed hemolytic transfusion reaction, sequela -T80419A Rh incompatibility with hemolytic transfusion reaction, unspecified, initial encounter -T80419D Rh incompatibility with hemolytic transfusion reaction, unspecified, subsequent encounter -T80419S Rh incompatibility with hemolytic transfusion reaction, unspecified, sequela -T8049XA Other Rh incompatibility reaction due to transfusion of blood or blood products, initial encounter -T8049XD Other Rh incompatibility reaction due to transfusion of blood or blood products, subsequent encounter -T8049XS Other Rh incompatibility reaction due to transfusion of blood or blood products, sequela -T80A0XA Non-ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, initial encounter -T80A0XD Non-ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, subsequent encounter -T80A0XS Non-ABO incompatibility reaction due to transfusion of blood or blood products, unspecified, sequela -T80A10A Non-ABO incompatibility with acute hemolytic transfusion reaction, initial encounter -T80A10D Non-ABO incompatibility with acute hemolytic transfusion reaction, subsequent encounter -T80A10S Non-ABO incompatibility with acute hemolytic transfusion reaction, sequela -T80A11A Non-ABO incompatibility with delayed hemolytic transfusion reaction, initial encounter -T80A11D Non-ABO incompatibility with delayed hemolytic transfusion reaction, subsequent encounter -T80A11S Non-ABO incompatibility with delayed hemolytic transfusion reaction, sequela -T80A19A Non-ABO incompatibility with hemolytic transfusion reaction, unspecified, initial encounter -T80A19D Non-ABO incompatibility with hemolytic transfusion reaction, unspecified, subsequent encounter -T80A19S Non-ABO incompatibility with hemolytic transfusion reaction, unspecified, sequela -T80A9XA Other non-ABO incompatibility reaction due to transfusion of blood or blood products, initial encounter -T80A9XD Other non-ABO incompatibility reaction due to transfusion of blood or blood products, subsequent encounter -T80A9XS Other non-ABO incompatibility reaction due to transfusion of blood or blood products, sequela -T8051XA Anaphylactic reaction due to administration of blood and blood products, initial encounter -T8051XD Anaphylactic reaction due to administration of blood and blood products, subsequent encounter -T8051XS Anaphylactic reaction due to administration of blood and blood products, sequela -T8052XA Anaphylactic reaction due to vaccination, initial encounter -T8052XD Anaphylactic reaction due to vaccination, subsequent encounter -T8052XS Anaphylactic reaction due to vaccination, sequela -T8059XA Anaphylactic reaction due to other serum, initial encounter -T8059XD Anaphylactic reaction due to other serum, subsequent encounter -T8059XS Anaphylactic reaction due to other serum, sequela -T8061XA Other serum reaction due to administration of blood and blood products, initial encounter -T8061XD Other serum reaction due to administration of blood and blood products, subsequent encounter -T8061XS Other serum reaction due to administration of blood and blood products, sequela -T8062XA Other serum reaction due to vaccination, initial encounter -T8062XD Other serum reaction due to vaccination, subsequent encounter -T8062XS Other serum reaction due to vaccination, sequela -T8069XA Other serum reaction due to other serum, initial encounter -T8069XD Other serum reaction due to other serum, subsequent encounter -T8069XS Other serum reaction due to other serum, sequela -T80810A Extravasation of vesicant antineoplastic chemotherapy, initial encounter -T80810D Extravasation of vesicant antineoplastic chemotherapy, subsequent encounter -T80810S Extravasation of vesicant antineoplastic chemotherapy, sequela -T80818A Extravasation of other vesicant agent, initial encounter -T80818D Extravasation of other vesicant agent, subsequent encounter -T80818S Extravasation of other vesicant agent, sequela -T8089XA Other complications following infusion, transfusion and therapeutic injection, initial encounter -T8089XD Other complications following infusion, transfusion and therapeutic injection, subsequent encounter -T8089XS Other complications following infusion, transfusion and therapeutic injection, sequela -T8090XA Unspecified complication following infusion and therapeutic injection, initial encounter -T8090XD Unspecified complication following infusion and therapeutic injection, subsequent encounter -T8090XS Unspecified complication following infusion and therapeutic injection, sequela -T80910A Acute hemolytic transfusion reaction, unspecified incompatibility, initial encounter -T80910D Acute hemolytic transfusion reaction, unspecified incompatibility, subsequent encounter -T80910S Acute hemolytic transfusion reaction, unspecified incompatibility, sequela -T80911A Delayed hemolytic transfusion reaction, unspecified incompatibility, initial encounter -T80911D Delayed hemolytic transfusion reaction, unspecified incompatibility, subsequent encounter -T80911S Delayed hemolytic transfusion reaction, unspecified incompatibility, sequela -T80919A Hemolytic transfusion reaction, unspecified incompatibility, unspecified as acute or delayed, initial encounter -T80919D Hemolytic transfusion reaction, unspecified incompatibility, unspecified as acute or delayed, subsequent encounter -T80919S Hemolytic transfusion reaction, unspecified incompatibility, unspecified as acute or delayed, sequela -T8092XA Unspecified transfusion reaction, initial encounter -T8092XD Unspecified transfusion reaction, subsequent encounter -T8092XS Unspecified transfusion reaction, sequela -T8110XA Postprocedural shock unspecified, initial encounter -T8110XD Postprocedural shock unspecified, subsequent encounter -T8110XS Postprocedural shock unspecified, sequela -T8111XA Postprocedural cardiogenic shock, initial encounter -T8111XD Postprocedural cardiogenic shock, subsequent encounter -T8111XS Postprocedural cardiogenic shock, sequela -T8112XA Postprocedural septic shock, initial encounter -T8112XD Postprocedural septic shock, subsequent encounter -T8112XS Postprocedural septic shock, sequela -T8119XA Other postprocedural shock, initial encounter -T8119XD Other postprocedural shock, subsequent encounter -T8119XS Other postprocedural shock, sequela -T8130XA Disruption of wound, unspecified, initial encounter -T8130XD Disruption of wound, unspecified, subsequent encounter -T8130XS Disruption of wound, unspecified, sequela -T8131XA Disruption of external operation (surgical) wound, not elsewhere classified, initial encounter -T8131XD Disruption of external operation (surgical) wound, not elsewhere classified, subsequent encounter -T8131XS Disruption of external operation (surgical) wound, not elsewhere classified, sequela -T8132XA Disruption of internal operation (surgical) wound, not elsewhere classified, initial encounter -T8132XD Disruption of internal operation (surgical) wound, not elsewhere classified, subsequent encounter -T8132XS Disruption of internal operation (surgical) wound, not elsewhere classified, sequela -T8133XA Disruption of traumatic injury wound repair, initial encounter -T8133XD Disruption of traumatic injury wound repair, subsequent encounter -T8133XS Disruption of traumatic injury wound repair, sequela -T814XXA Infection following a procedure, initial encounter -T814XXD Infection following a procedure, subsequent encounter -T814XXS Infection following a procedure, sequela -T81500A Unspecified complication of foreign body accidentally left in body following surgical operation, initial encounter -T81500D Unspecified complication of foreign body accidentally left in body following surgical operation, subsequent encounter -T81500S Unspecified complication of foreign body accidentally left in body following surgical operation, sequela -T81501A Unspecified complication of foreign body accidentally left in body following infusion or transfusion, initial encounter -T81501D Unspecified complication of foreign body accidentally left in body following infusion or transfusion, subsequent encounter -T81501S Unspecified complication of foreign body accidentally left in body following infusion or transfusion, sequela -T81502A Unspecified complication of foreign body accidentally left in body following kidney dialysis, initial encounter -T81502D Unspecified complication of foreign body accidentally left in body following kidney dialysis, subsequent encounter -T81502S Unspecified complication of foreign body accidentally left in body following kidney dialysis, sequela -T81503A Unspecified complication of foreign body accidentally left in body following injection or immunization, initial encounter -T81503D Unspecified complication of foreign body accidentally left in body following injection or immunization, subsequent encounter -T81503S Unspecified complication of foreign body accidentally left in body following injection or immunization, sequela -T81504A Unspecified complication of foreign body accidentally left in body following endoscopic examination, initial encounter -T81504D Unspecified complication of foreign body accidentally left in body following endoscopic examination, subsequent encounter -T81504S Unspecified complication of foreign body accidentally left in body following endoscopic examination, sequela -T81505A Unspecified complication of foreign body accidentally left in body following heart catheterization, initial encounter -T81505D Unspecified complication of foreign body accidentally left in body following heart catheterization, subsequent encounter -T81505S Unspecified complication of foreign body accidentally left in body following heart catheterization, sequela -T81506A Unspecified complication of foreign body accidentally left in body following aspiration, puncture or other catheterization, initial encounter -T81506D Unspecified complication of foreign body accidentally left in body following aspiration, puncture or other catheterization, subsequent encounter -T81506S Unspecified complication of foreign body accidentally left in body following aspiration, puncture or other catheterization, sequela -T81507A Unspecified complication of foreign body accidentally left in body following removal of catheter or packing, initial encounter -T81507D Unspecified complication of foreign body accidentally left in body following removal of catheter or packing, subsequent encounter -T81507S Unspecified complication of foreign body accidentally left in body following removal of catheter or packing, sequela -T81508A Unspecified complication of foreign body accidentally left in body following other procedure, initial encounter -T81508D Unspecified complication of foreign body accidentally left in body following other procedure, subsequent encounter -T81508S Unspecified complication of foreign body accidentally left in body following other procedure, sequela -T81509A Unspecified complication of foreign body accidentally left in body following unspecified procedure, initial encounter -T81509D Unspecified complication of foreign body accidentally left in body following unspecified procedure, subsequent encounter -T81509S Unspecified complication of foreign body accidentally left in body following unspecified procedure, sequela -T81510A Adhesions due to foreign body accidentally left in body following surgical operation, initial encounter -T81510D Adhesions due to foreign body accidentally left in body following surgical operation, subsequent encounter -T81510S Adhesions due to foreign body accidentally left in body following surgical operation, sequela -T81511A Adhesions due to foreign body accidentally left in body following infusion or transfusion, initial encounter -T81511D Adhesions due to foreign body accidentally left in body following infusion or transfusion, subsequent encounter -T81511S Adhesions due to foreign body accidentally left in body following infusion or transfusion, sequela -T81512A Adhesions due to foreign body accidentally left in body following kidney dialysis, initial encounter -T81512D Adhesions due to foreign body accidentally left in body following kidney dialysis, subsequent encounter -T81512S Adhesions due to foreign body accidentally left in body following kidney dialysis, sequela -T81513A Adhesions due to foreign body accidentally left in body following injection or immunization, initial encounter -T81513D Adhesions due to foreign body accidentally left in body following injection or immunization, subsequent encounter -T81513S Adhesions due to foreign body accidentally left in body following injection or immunization, sequela -T81514A Adhesions due to foreign body accidentally left in body following endoscopic examination, initial encounter -T81514D Adhesions due to foreign body accidentally left in body following endoscopic examination, subsequent encounter -T81514S Adhesions due to foreign body accidentally left in body following endoscopic examination, sequela -T81515A Adhesions due to foreign body accidentally left in body following heart catheterization, initial encounter -T81515D Adhesions due to foreign body accidentally left in body following heart catheterization, subsequent encounter -T81515S Adhesions due to foreign body accidentally left in body following heart catheterization, sequela -T81516A Adhesions due to foreign body accidentally left in body following aspiration, puncture or other catheterization, initial encounter -T81516D Adhesions due to foreign body accidentally left in body following aspiration, puncture or other catheterization, subsequent encounter -T81516S Adhesions due to foreign body accidentally left in body following aspiration, puncture or other catheterization, sequela -T81517A Adhesions due to foreign body accidentally left in body following removal of catheter or packing, initial encounter -T81517D Adhesions due to foreign body accidentally left in body following removal of catheter or packing, subsequent encounter -T81517S Adhesions due to foreign body accidentally left in body following removal of catheter or packing, sequela -T81518A Adhesions due to foreign body accidentally left in body following other procedure, initial encounter -T81518D Adhesions due to foreign body accidentally left in body following other procedure, subsequent encounter -T81518S Adhesions due to foreign body accidentally left in body following other procedure, sequela -T81519A Adhesions due to foreign body accidentally left in body following unspecified procedure, initial encounter -T81519D Adhesions due to foreign body accidentally left in body following unspecified procedure, subsequent encounter -T81519S Adhesions due to foreign body accidentally left in body following unspecified procedure, sequela -T81520A Obstruction due to foreign body accidentally left in body following surgical operation, initial encounter -T81520D Obstruction due to foreign body accidentally left in body following surgical operation, subsequent encounter -T81520S Obstruction due to foreign body accidentally left in body following surgical operation, sequela -T81521A Obstruction due to foreign body accidentally left in body following infusion or transfusion, initial encounter -T81521D Obstruction due to foreign body accidentally left in body following infusion or transfusion, subsequent encounter -T81521S Obstruction due to foreign body accidentally left in body following infusion or transfusion, sequela -T81522A Obstruction due to foreign body accidentally left in body following kidney dialysis, initial encounter -T81522D Obstruction due to foreign body accidentally left in body following kidney dialysis, subsequent encounter -T81522S Obstruction due to foreign body accidentally left in body following kidney dialysis, sequela -T81523A Obstruction due to foreign body accidentally left in body following injection or immunization, initial encounter -T81523D Obstruction due to foreign body accidentally left in body following injection or immunization, subsequent encounter -T81523S Obstruction due to foreign body accidentally left in body following injection or immunization, sequela -T81524A Obstruction due to foreign body accidentally left in body following endoscopic examination, initial encounter -T81524D Obstruction due to foreign body accidentally left in body following endoscopic examination, subsequent encounter -T81524S Obstruction due to foreign body accidentally left in body following endoscopic examination, sequela -T81525A Obstruction due to foreign body accidentally left in body following heart catheterization, initial encounter -T81525D Obstruction due to foreign body accidentally left in body following heart catheterization, subsequent encounter -T81525S Obstruction due to foreign body accidentally left in body following heart catheterization, sequela -T81526A Obstruction due to foreign body accidentally left in body following aspiration, puncture or other catheterization, initial encounter -T81526D Obstruction due to foreign body accidentally left in body following aspiration, puncture or other catheterization, subsequent encounter -T81526S Obstruction due to foreign body accidentally left in body following aspiration, puncture or other catheterization, sequela -T81527A Obstruction due to foreign body accidentally left in body following removal of catheter or packing, initial encounter -T81527D Obstruction due to foreign body accidentally left in body following removal of catheter or packing, subsequent encounter -T81527S Obstruction due to foreign body accidentally left in body following removal of catheter or packing, sequela -T81528A Obstruction due to foreign body accidentally left in body following other procedure, initial encounter -T81528D Obstruction due to foreign body accidentally left in body following other procedure, subsequent encounter -T81528S Obstruction due to foreign body accidentally left in body following other procedure, sequela -T81529A Obstruction due to foreign body accidentally left in body following unspecified procedure, initial encounter -T81529D Obstruction due to foreign body accidentally left in body following unspecified procedure, subsequent encounter -T81529S Obstruction due to foreign body accidentally left in body following unspecified procedure, sequela -T81530A Perforation due to foreign body accidentally left in body following surgical operation, initial encounter -T81530D Perforation due to foreign body accidentally left in body following surgical operation, subsequent encounter -T81530S Perforation due to foreign body accidentally left in body following surgical operation, sequela -T81531A Perforation due to foreign body accidentally left in body following infusion or transfusion, initial encounter -T81531D Perforation due to foreign body accidentally left in body following infusion or transfusion, subsequent encounter -T81531S Perforation due to foreign body accidentally left in body following infusion or transfusion, sequela -T81532A Perforation due to foreign body accidentally left in body following kidney dialysis, initial encounter -T81532D Perforation due to foreign body accidentally left in body following kidney dialysis, subsequent encounter -T81532S Perforation due to foreign body accidentally left in body following kidney dialysis, sequela -T81533A Perforation due to foreign body accidentally left in body following injection or immunization, initial encounter -T81533D Perforation due to foreign body accidentally left in body following injection or immunization, subsequent encounter -T81533S Perforation due to foreign body accidentally left in body following injection or immunization, sequela -T81534A Perforation due to foreign body accidentally left in body following endoscopic examination, initial encounter -T81534D Perforation due to foreign body accidentally left in body following endoscopic examination, subsequent encounter -T81534S Perforation due to foreign body accidentally left in body following endoscopic examination, sequela -T81535A Perforation due to foreign body accidentally left in body following heart catheterization, initial encounter -T81535D Perforation due to foreign body accidentally left in body following heart catheterization, subsequent encounter -T81535S Perforation due to foreign body accidentally left in body following heart catheterization, sequela -T81536A Perforation due to foreign body accidentally left in body following aspiration, puncture or other catheterization, initial encounter -T81536D Perforation due to foreign body accidentally left in body following aspiration, puncture or other catheterization, subsequent encounter -T81536S Perforation due to foreign body accidentally left in body following aspiration, puncture or other catheterization, sequela -T81537A Perforation due to foreign body accidentally left in body following removal of catheter or packing, initial encounter -T81537D Perforation due to foreign body accidentally left in body following removal of catheter or packing, subsequent encounter -T81537S Perforation due to foreign body accidentally left in body following removal of catheter or packing, sequela -T81538A Perforation due to foreign body accidentally left in body following other procedure, initial encounter -T81538D Perforation due to foreign body accidentally left in body following other procedure, subsequent encounter -T81538S Perforation due to foreign body accidentally left in body following other procedure, sequela -T81539A Perforation due to foreign body accidentally left in body following unspecified procedure, initial encounter -T81539D Perforation due to foreign body accidentally left in body following unspecified procedure, subsequent encounter -T81539S Perforation due to foreign body accidentally left in body following unspecified procedure, sequela -T81590A Other complications of foreign body accidentally left in body following surgical operation, initial encounter -T81590D Other complications of foreign body accidentally left in body following surgical operation, subsequent encounter -T81590S Other complications of foreign body accidentally left in body following surgical operation, sequela -T81591A Other complications of foreign body accidentally left in body following infusion or transfusion, initial encounter -T81591D Other complications of foreign body accidentally left in body following infusion or transfusion, subsequent encounter -T81591S Other complications of foreign body accidentally left in body following infusion or transfusion, sequela -T81592A Other complications of foreign body accidentally left in body following kidney dialysis, initial encounter -T81592D Other complications of foreign body accidentally left in body following kidney dialysis, subsequent encounter -T81592S Other complications of foreign body accidentally left in body following kidney dialysis, sequela -T81593A Other complications of foreign body accidentally left in body following injection or immunization, initial encounter -T81593D Other complications of foreign body accidentally left in body following injection or immunization, subsequent encounter -T81593S Other complications of foreign body accidentally left in body following injection or immunization, sequela -T81594A Other complications of foreign body accidentally left in body following endoscopic examination, initial encounter -T81594D Other complications of foreign body accidentally left in body following endoscopic examination, subsequent encounter -T81594S Other complications of foreign body accidentally left in body following endoscopic examination, sequela -T81595A Other complications of foreign body accidentally left in body following heart catheterization, initial encounter -T81595D Other complications of foreign body accidentally left in body following heart catheterization, subsequent encounter -T81595S Other complications of foreign body accidentally left in body following heart catheterization, sequela -T81596A Other complications of foreign body accidentally left in body following aspiration, puncture or other catheterization, initial encounter -T81596D Other complications of foreign body accidentally left in body following aspiration, puncture or other catheterization, subsequent encounter -T81596S Other complications of foreign body accidentally left in body following aspiration, puncture or other catheterization, sequela -T81597A Other complications of foreign body accidentally left in body following removal of catheter or packing, initial encounter -T81597D Other complications of foreign body accidentally left in body following removal of catheter or packing, subsequent encounter -T81597S Other complications of foreign body accidentally left in body following removal of catheter or packing, sequela -T81598A Other complications of foreign body accidentally left in body following other procedure, initial encounter -T81598D Other complications of foreign body accidentally left in body following other procedure, subsequent encounter -T81598S Other complications of foreign body accidentally left in body following other procedure, sequela -T81599A Other complications of foreign body accidentally left in body following unspecified procedure, initial encounter -T81599D Other complications of foreign body accidentally left in body following unspecified procedure, subsequent encounter -T81599S Other complications of foreign body accidentally left in body following unspecified procedure, sequela -T8160XA Unspecified acute reaction to foreign substance accidentally left during a procedure, initial encounter -T8160XD Unspecified acute reaction to foreign substance accidentally left during a procedure, subsequent encounter -T8160XS Unspecified acute reaction to foreign substance accidentally left during a procedure, sequela -T8161XA Aseptic peritonitis due to foreign substance accidentally left during a procedure, initial encounter -T8161XD Aseptic peritonitis due to foreign substance accidentally left during a procedure, subsequent encounter -T8161XS Aseptic peritonitis due to foreign substance accidentally left during a procedure, sequela -T8169XA Other acute reaction to foreign substance accidentally left during a procedure, initial encounter -T8169XD Other acute reaction to foreign substance accidentally left during a procedure, subsequent encounter -T8169XS Other acute reaction to foreign substance accidentally left during a procedure, sequela -T81710A Complication of mesenteric artery following a procedure, not elsewhere classified, initial encounter -T81710D Complication of mesenteric artery following a procedure, not elsewhere classified, subsequent encounter -T81710S Complication of mesenteric artery following a procedure, not elsewhere classified, sequela -T81711A Complication of renal artery following a procedure, not elsewhere classified, initial encounter -T81711D Complication of renal artery following a procedure, not elsewhere classified, subsequent encounter -T81711S Complication of renal artery following a procedure, not elsewhere classified, sequela -T81718A Complication of other artery following a procedure, not elsewhere classified, initial encounter -T81718D Complication of other artery following a procedure, not elsewhere classified, subsequent encounter -T81718S Complication of other artery following a procedure, not elsewhere classified, sequela -T81719A Complication of unspecified artery following a procedure, not elsewhere classified, initial encounter -T81719D Complication of unspecified artery following a procedure, not elsewhere classified, subsequent encounter -T81719S Complication of unspecified artery following a procedure, not elsewhere classified, sequela -T8172XA Complication of vein following a procedure, not elsewhere classified, initial encounter -T8172XD Complication of vein following a procedure, not elsewhere classified, subsequent encounter -T8172XS Complication of vein following a procedure, not elsewhere classified, sequela -T8181XA Complication of inhalation therapy, initial encounter -T8181XD Complication of inhalation therapy, subsequent encounter -T8181XS Complication of inhalation therapy, sequela -T8182XA Emphysema (subcutaneous) resulting from a procedure, initial encounter -T8182XD Emphysema (subcutaneous) resulting from a procedure, subsequent encounter -T8182XS Emphysema (subcutaneous) resulting from a procedure, sequela -T8183XA Persistent postprocedural fistula, initial encounter -T8183XD Persistent postprocedural fistula, subsequent encounter -T8183XS Persistent postprocedural fistula, sequela -T8189XA Other complications of procedures, not elsewhere classified, initial encounter -T8189XD Other complications of procedures, not elsewhere classified, subsequent encounter -T8189XS Other complications of procedures, not elsewhere classified, sequela -T819XXA Unspecified complication of procedure, initial encounter -T819XXD Unspecified complication of procedure, subsequent encounter -T819XXS Unspecified complication of procedure, sequela -T8201XA Breakdown (mechanical) of heart valve prosthesis, initial encounter -T8201XD Breakdown (mechanical) of heart valve prosthesis, subsequent encounter -T8201XS Breakdown (mechanical) of heart valve prosthesis, sequela -T8202XA Displacement of heart valve prosthesis, initial encounter -T8202XD Displacement of heart valve prosthesis, subsequent encounter -T8202XS Displacement of heart valve prosthesis, sequela -T8203XA Leakage of heart valve prosthesis, initial encounter -T8203XD Leakage of heart valve prosthesis, subsequent encounter -T8203XS Leakage of heart valve prosthesis, sequela -T8209XA Other mechanical complication of heart valve prosthesis, initial encounter -T8209XD Other mechanical complication of heart valve prosthesis, subsequent encounter -T8209XS Other mechanical complication of heart valve prosthesis, sequela -T82110A Breakdown (mechanical) of cardiac electrode, initial encounter -T82110D Breakdown (mechanical) of cardiac electrode, subsequent encounter -T82110S Breakdown (mechanical) of cardiac electrode, sequela -T82111A Breakdown (mechanical) of cardiac pulse generator (battery), initial encounter -T82111D Breakdown (mechanical) of cardiac pulse generator (battery), subsequent encounter -T82111S Breakdown (mechanical) of cardiac pulse generator (battery), sequela -T82118A Breakdown (mechanical) of other cardiac electronic device, initial encounter -T82118D Breakdown (mechanical) of other cardiac electronic device, subsequent encounter -T82118S Breakdown (mechanical) of other cardiac electronic device, sequela -T82119A Breakdown (mechanical) of unspecified cardiac electronic device, initial encounter -T82119D Breakdown (mechanical) of unspecified cardiac electronic device, subsequent encounter -T82119S Breakdown (mechanical) of unspecified cardiac electronic device, sequela -T82120A Displacement of cardiac electrode, initial encounter -T82120D Displacement of cardiac electrode, subsequent encounter -T82120S Displacement of cardiac electrode, sequela -T82121A Displacement of cardiac pulse generator (battery), initial encounter -T82121D Displacement of cardiac pulse generator (battery), subsequent encounter -T82121S Displacement of cardiac pulse generator (battery), sequela -T82128A Displacement of other cardiac electronic device, initial encounter -T82128D Displacement of other cardiac electronic device, subsequent encounter -T82128S Displacement of other cardiac electronic device, sequela -T82129A Displacement of unspecified cardiac electronic device, initial encounter -T82129D Displacement of unspecified cardiac electronic device, subsequent encounter -T82129S Displacement of unspecified cardiac electronic device, sequela -T82190A Other mechanical complication of cardiac electrode, initial encounter -T82190D Other mechanical complication of cardiac electrode, subsequent encounter -T82190S Other mechanical complication of cardiac electrode, sequela -T82191A Other mechanical complication of cardiac pulse generator (battery), initial encounter -T82191D Other mechanical complication of cardiac pulse generator (battery), subsequent encounter -T82191S Other mechanical complication of cardiac pulse generator (battery), sequela -T82198A Other mechanical complication of other cardiac electronic device, initial encounter -T82198D Other mechanical complication of other cardiac electronic device, subsequent encounter -T82198S Other mechanical complication of other cardiac electronic device, sequela -T82199A Other mechanical complication of unspecified cardiac device, initial encounter -T82199D Other mechanical complication of unspecified cardiac device, subsequent encounter -T82199S Other mechanical complication of unspecified cardiac device, sequela -T82211A Breakdown (mechanical) of coronary artery bypass graft, initial encounter -T82211D Breakdown (mechanical) of coronary artery bypass graft, subsequent encounter -T82211S Breakdown (mechanical) of coronary artery bypass graft, sequela -T82212A Displacement of coronary artery bypass graft, initial encounter -T82212D Displacement of coronary artery bypass graft, subsequent encounter -T82212S Displacement of coronary artery bypass graft, sequela -T82213A Leakage of coronary artery bypass graft, initial encounter -T82213D Leakage of coronary artery bypass graft, subsequent encounter -T82213S Leakage of coronary artery bypass graft, sequela -T82218A Other mechanical complication of coronary artery bypass graft, initial encounter -T82218D Other mechanical complication of coronary artery bypass graft, subsequent encounter -T82218S Other mechanical complication of coronary artery bypass graft, sequela -T82221A Breakdown (mechanical) of biological heart valve graft, initial encounter -T82221D Breakdown (mechanical) of biological heart valve graft, subsequent encounter -T82221S Breakdown (mechanical) of biological heart valve graft, sequela -T82222A Displacement of biological heart valve graft, initial encounter -T82222D Displacement of biological heart valve graft, subsequent encounter -T82222S Displacement of biological heart valve graft, sequela -T82223A Leakage of biological heart valve graft, initial encounter -T82223D Leakage of biological heart valve graft, subsequent encounter -T82223S Leakage of biological heart valve graft, sequela -T82228A Other mechanical complication of biological heart valve graft, initial encounter -T82228D Other mechanical complication of biological heart valve graft, subsequent encounter -T82228S Other mechanical complication of biological heart valve graft, sequela -T82310A Breakdown (mechanical) of aortic (bifurcation) graft (replacement), initial encounter -T82310D Breakdown (mechanical) of aortic (bifurcation) graft (replacement), subsequent encounter -T82310S Breakdown (mechanical) of aortic (bifurcation) graft (replacement), sequela -T82311A Breakdown (mechanical) of carotid arterial graft (bypass), initial encounter -T82311D Breakdown (mechanical) of carotid arterial graft (bypass), subsequent encounter -T82311S Breakdown (mechanical) of carotid arterial graft (bypass), sequela -T82312A Breakdown (mechanical) of femoral arterial graft (bypass), initial encounter -T82312D Breakdown (mechanical) of femoral arterial graft (bypass), subsequent encounter -T82312S Breakdown (mechanical) of femoral arterial graft (bypass), sequela -T82318A Breakdown (mechanical) of other vascular grafts, initial encounter -T82318D Breakdown (mechanical) of other vascular grafts, subsequent encounter -T82318S Breakdown (mechanical) of other vascular grafts, sequela -T82319A Breakdown (mechanical) of unspecified vascular grafts, initial encounter -T82319D Breakdown (mechanical) of unspecified vascular grafts, subsequent encounter -T82319S Breakdown (mechanical) of unspecified vascular grafts, sequela -T82320A Displacement of aortic (bifurcation) graft (replacement), initial encounter -T82320D Displacement of aortic (bifurcation) graft (replacement), subsequent encounter -T82320S Displacement of aortic (bifurcation) graft (replacement), sequela -T82321A Displacement of carotid arterial graft (bypass), initial encounter -T82321D Displacement of carotid arterial graft (bypass), subsequent encounter -T82321S Displacement of carotid arterial graft (bypass), sequela -T82322A Displacement of femoral arterial graft (bypass), initial encounter -T82322D Displacement of femoral arterial graft (bypass), subsequent encounter -T82322S Displacement of femoral arterial graft (bypass), sequela -T82328A Displacement of other vascular grafts, initial encounter -T82328D Displacement of other vascular grafts, subsequent encounter -T82328S Displacement of other vascular grafts, sequela -T82329A Displacement of unspecified vascular grafts, initial encounter -T82329D Displacement of unspecified vascular grafts, subsequent encounter -T82329S Displacement of unspecified vascular grafts, sequela -T82330A Leakage of aortic (bifurcation) graft (replacement), initial encounter -T82330D Leakage of aortic (bifurcation) graft (replacement), subsequent encounter -T82330S Leakage of aortic (bifurcation) graft (replacement), sequela -T82331A Leakage of carotid arterial graft (bypass), initial encounter -T82331D Leakage of carotid arterial graft (bypass), subsequent encounter -T82331S Leakage of carotid arterial graft (bypass), sequela -T82332A Leakage of femoral arterial graft (bypass), initial encounter -T82332D Leakage of femoral arterial graft (bypass), subsequent encounter -T82332S Leakage of femoral arterial graft (bypass), sequela -T82338A Leakage of other vascular grafts, initial encounter -T82338D Leakage of other vascular grafts, subsequent encounter -T82338S Leakage of other vascular grafts, sequela -T82339A Leakage of unspecified vascular graft, initial encounter -T82339D Leakage of unspecified vascular graft, subsequent encounter -T82339S Leakage of unspecified vascular graft, sequela -T82390A Other mechanical complication of aortic (bifurcation) graft (replacement), initial encounter -T82390D Other mechanical complication of aortic (bifurcation) graft (replacement), subsequent encounter -T82390S Other mechanical complication of aortic (bifurcation) graft (replacement), sequela -T82391A Other mechanical complication of carotid arterial graft (bypass), initial encounter -T82391D Other mechanical complication of carotid arterial graft (bypass), subsequent encounter -T82391S Other mechanical complication of carotid arterial graft (bypass), sequela -T82392A Other mechanical complication of femoral arterial graft (bypass), initial encounter -T82392D Other mechanical complication of femoral arterial graft (bypass), subsequent encounter -T82392S Other mechanical complication of femoral arterial graft (bypass), sequela -T82398A Other mechanical complication of other vascular grafts, initial encounter -T82398D Other mechanical complication of other vascular grafts, subsequent encounter -T82398S Other mechanical complication of other vascular grafts, sequela -T82399A Other mechanical complication of unspecified vascular grafts, initial encounter -T82399D Other mechanical complication of unspecified vascular grafts, subsequent encounter -T82399S Other mechanical complication of unspecified vascular grafts, sequela -T8241XA Breakdown (mechanical) of vascular dialysis catheter, initial encounter -T8241XD Breakdown (mechanical) of vascular dialysis catheter, subsequent encounter -T8241XS Breakdown (mechanical) of vascular dialysis catheter, sequela -T8242XA Displacement of vascular dialysis catheter, initial encounter -T8242XD Displacement of vascular dialysis catheter, subsequent encounter -T8242XS Displacement of vascular dialysis catheter, sequela -T8243XA Leakage of vascular dialysis catheter, initial encounter -T8243XD Leakage of vascular dialysis catheter, subsequent encounter -T8243XS Leakage of vascular dialysis catheter, sequela -T8249XA Other complication of vascular dialysis catheter, initial encounter -T8249XD Other complication of vascular dialysis catheter, subsequent encounter -T8249XS Other complication of vascular dialysis catheter, sequela -T82510A Breakdown (mechanical) of surgically created arteriovenous fistula, initial encounter -T82510D Breakdown (mechanical) of surgically created arteriovenous fistula, subsequent encounter -T82510S Breakdown (mechanical) of surgically created arteriovenous fistula, sequela -T82511A Breakdown (mechanical) of surgically created arteriovenous shunt, initial encounter -T82511D Breakdown (mechanical) of surgically created arteriovenous shunt, subsequent encounter -T82511S Breakdown (mechanical) of surgically created arteriovenous shunt, sequela -T82512A Breakdown (mechanical) of artificial heart, initial encounter -T82512D Breakdown (mechanical) of artificial heart, subsequent encounter -T82512S Breakdown (mechanical) of artificial heart, sequela -T82513A Breakdown (mechanical) of balloon (counterpulsation) device, initial encounter -T82513D Breakdown (mechanical) of balloon (counterpulsation) device, subsequent encounter -T82513S Breakdown (mechanical) of balloon (counterpulsation) device, sequela -T82514A Breakdown (mechanical) of infusion catheter, initial encounter -T82514D Breakdown (mechanical) of infusion catheter, subsequent encounter -T82514S Breakdown (mechanical) of infusion catheter, sequela -T82515A Breakdown (mechanical) of umbrella device, initial encounter -T82515D Breakdown (mechanical) of umbrella device, subsequent encounter -T82515S Breakdown (mechanical) of umbrella device, sequela -T82518A Breakdown (mechanical) of other cardiac and vascular devices and implants, initial encounter -T82518D Breakdown (mechanical) of other cardiac and vascular devices and implants, subsequent encounter -T82518S Breakdown (mechanical) of other cardiac and vascular devices and implants, sequela -T82519A Breakdown (mechanical) of unspecified cardiac and vascular devices and implants, initial encounter -T82519D Breakdown (mechanical) of unspecified cardiac and vascular devices and implants, subsequent encounter -T82519S Breakdown (mechanical) of unspecified cardiac and vascular devices and implants, sequela -T82520A Displacement of surgically created arteriovenous fistula, initial encounter -T82520D Displacement of surgically created arteriovenous fistula, subsequent encounter -T82520S Displacement of surgically created arteriovenous fistula, sequela -T82521A Displacement of surgically created arteriovenous shunt, initial encounter -T82521D Displacement of surgically created arteriovenous shunt, subsequent encounter -T82521S Displacement of surgically created arteriovenous shunt, sequela -T82522A Displacement of artificial heart, initial encounter -T82522D Displacement of artificial heart, subsequent encounter -T82522S Displacement of artificial heart, sequela -T82523A Displacement of balloon (counterpulsation) device, initial encounter -T82523D Displacement of balloon (counterpulsation) device, subsequent encounter -T82523S Displacement of balloon (counterpulsation) device, sequela -T82524A Displacement of infusion catheter, initial encounter -T82524D Displacement of infusion catheter, subsequent encounter -T82524S Displacement of infusion catheter, sequela -T82525A Displacement of umbrella device, initial encounter -T82525D Displacement of umbrella device, subsequent encounter -T82525S Displacement of umbrella device, sequela -T82528A Displacement of other cardiac and vascular devices and implants, initial encounter -T82528D Displacement of other cardiac and vascular devices and implants, subsequent encounter -T82528S Displacement of other cardiac and vascular devices and implants, sequela -T82529A Displacement of unspecified cardiac and vascular devices and implants, initial encounter -T82529D Displacement of unspecified cardiac and vascular devices and implants, subsequent encounter -T82529S Displacement of unspecified cardiac and vascular devices and implants, sequela -T82530A Leakage of surgically created arteriovenous fistula, initial encounter -T82530D Leakage of surgically created arteriovenous fistula, subsequent encounter -T82530S Leakage of surgically created arteriovenous fistula, sequela -T82531A Leakage of surgically created arteriovenous shunt, initial encounter -T82531D Leakage of surgically created arteriovenous shunt, subsequent encounter -T82531S Leakage of surgically created arteriovenous shunt, sequela -T82532A Leakage of artificial heart, initial encounter -T82532D Leakage of artificial heart, subsequent encounter -T82532S Leakage of artificial heart, sequela -T82533A Leakage of balloon (counterpulsation) device, initial encounter -T82533D Leakage of balloon (counterpulsation) device, subsequent encounter -T82533S Leakage of balloon (counterpulsation) device, sequela -T82534A Leakage of infusion catheter, initial encounter -T82534D Leakage of infusion catheter, subsequent encounter -T82534S Leakage of infusion catheter, sequela -T82535A Leakage of umbrella device, initial encounter -T82535D Leakage of umbrella device, subsequent encounter -T82535S Leakage of umbrella device, sequela -T82538A Leakage of other cardiac and vascular devices and implants, initial encounter -T82538D Leakage of other cardiac and vascular devices and implants, subsequent encounter -T82538S Leakage of other cardiac and vascular devices and implants, sequela -T82539A Leakage of unspecified cardiac and vascular devices and implants, initial encounter -T82539D Leakage of unspecified cardiac and vascular devices and implants, subsequent encounter -T82539S Leakage of unspecified cardiac and vascular devices and implants, sequela -T82590A Other mechanical complication of surgically created arteriovenous fistula, initial encounter -T82590D Other mechanical complication of surgically created arteriovenous fistula, subsequent encounter -T82590S Other mechanical complication of surgically created arteriovenous fistula, sequela -T82591A Other mechanical complication of surgically created arteriovenous shunt, initial encounter -T82591D Other mechanical complication of surgically created arteriovenous shunt, subsequent encounter -T82591S Other mechanical complication of surgically created arteriovenous shunt, sequela -T82592A Other mechanical complication of artificial heart, initial encounter -T82592D Other mechanical complication of artificial heart, subsequent encounter -T82592S Other mechanical complication of artificial heart, sequela -T82593A Other mechanical complication of balloon (counterpulsation) device, initial encounter -T82593D Other mechanical complication of balloon (counterpulsation) device, subsequent encounter -T82593S Other mechanical complication of balloon (counterpulsation) device, sequela -T82594A Other mechanical complication of infusion catheter, initial encounter -T82594D Other mechanical complication of infusion catheter, subsequent encounter -T82594S Other mechanical complication of infusion catheter, sequela -T82595A Other mechanical complication of umbrella device, initial encounter -T82595D Other mechanical complication of umbrella device, subsequent encounter -T82595S Other mechanical complication of umbrella device, sequela -T82598A Other mechanical complication of other cardiac and vascular devices and implants, initial encounter -T82598D Other mechanical complication of other cardiac and vascular devices and implants, subsequent encounter -T82598S Other mechanical complication of other cardiac and vascular devices and implants, sequela -T82599A Other mechanical complication of unspecified cardiac and vascular devices and implants, initial encounter -T82599D Other mechanical complication of unspecified cardiac and vascular devices and implants, subsequent encounter -T82599S Other mechanical complication of unspecified cardiac and vascular devices and implants, sequela -T826XXA Infection and inflammatory reaction due to cardiac valve prosthesis, initial encounter -T826XXD Infection and inflammatory reaction due to cardiac valve prosthesis, subsequent encounter -T826XXS Infection and inflammatory reaction due to cardiac valve prosthesis, sequela -T827XXA Infection and inflammatory reaction due to other cardiac and vascular devices, implants and grafts, initial encounter -T827XXD Infection and inflammatory reaction due to other cardiac and vascular devices, implants and grafts, subsequent encounter -T827XXS Infection and inflammatory reaction due to other cardiac and vascular devices, implants and grafts, sequela -T82817A Embolism due to cardiac prosthetic devices, implants and grafts, initial encounter -T82817D Embolism due to cardiac prosthetic devices, implants and grafts, subsequent encounter -T82817S Embolism due to cardiac prosthetic devices, implants and grafts, sequela -T82818A Embolism due to vascular prosthetic devices, implants and grafts, initial encounter -T82818D Embolism due to vascular prosthetic devices, implants and grafts, subsequent encounter -T82818S Embolism due to vascular prosthetic devices, implants and grafts, sequela -T82827A Fibrosis due to cardiac prosthetic devices, implants and grafts, initial encounter -T82827D Fibrosis due to cardiac prosthetic devices, implants and grafts, subsequent encounter -T82827S Fibrosis due to cardiac prosthetic devices, implants and grafts, sequela -T82828A Fibrosis due to vascular prosthetic devices, implants and grafts, initial encounter -T82828D Fibrosis due to vascular prosthetic devices, implants and grafts, subsequent encounter -T82828S Fibrosis due to vascular prosthetic devices, implants and grafts, sequela -T82837A Hemorrhage due to cardiac prosthetic devices, implants and grafts, initial encounter -T82837D Hemorrhage due to cardiac prosthetic devices, implants and grafts, subsequent encounter -T82837S Hemorrhage due to cardiac prosthetic devices, implants and grafts, sequela -T82838A Hemorrhage due to vascular prosthetic devices, implants and grafts, initial encounter -T82838D Hemorrhage due to vascular prosthetic devices, implants and grafts, subsequent encounter -T82838S Hemorrhage due to vascular prosthetic devices, implants and grafts, sequela -T82847A Pain due to cardiac prosthetic devices, implants and grafts, initial encounter -T82847D Pain due to cardiac prosthetic devices, implants and grafts, subsequent encounter -T82847S Pain due to cardiac prosthetic devices, implants and grafts, sequela -T82848A Pain due to vascular prosthetic devices, implants and grafts, initial encounter -T82848D Pain due to vascular prosthetic devices, implants and grafts, subsequent encounter -T82848S Pain due to vascular prosthetic devices, implants and grafts, sequela -T82855A Stenosis of coronary artery stent, initial encounter -T82855D Stenosis of coronary artery stent, subsequent encounter -T82855S Stenosis of coronary artery stent, sequela -T82856A Stenosis of peripheral vascular stent, initial encounter -T82856D Stenosis of peripheral vascular stent, subsequent encounter -T82856S Stenosis of peripheral vascular stent, sequela -T82857A Stenosis of other cardiac prosthetic devices, implants and grafts, initial encounter -T82857D Stenosis of other cardiac prosthetic devices, implants and grafts, subsequent encounter -T82857S Stenosis of other cardiac prosthetic devices, implants and grafts, sequela -T82858A Stenosis of other vascular prosthetic devices, implants and grafts, initial encounter -T82858D Stenosis of other vascular prosthetic devices, implants and grafts, subsequent encounter -T82858S Stenosis of other vascular prosthetic devices, implants and grafts, sequela -T82867A Thrombosis due to cardiac prosthetic devices, implants and grafts, initial encounter -T82867D Thrombosis due to cardiac prosthetic devices, implants and grafts, subsequent encounter -T82867S Thrombosis due to cardiac prosthetic devices, implants and grafts, sequela -T82868A Thrombosis due to vascular prosthetic devices, implants and grafts, initial encounter -T82868D Thrombosis due to vascular prosthetic devices, implants and grafts, subsequent encounter -T82868S Thrombosis due to vascular prosthetic devices, implants and grafts, sequela -T82897A Other specified complication of cardiac prosthetic devices, implants and grafts, initial encounter -T82897D Other specified complication of cardiac prosthetic devices, implants and grafts, subsequent encounter -T82897S Other specified complication of cardiac prosthetic devices, implants and grafts, sequela -T82898A Other specified complication of vascular prosthetic devices, implants and grafts, initial encounter -T82898D Other specified complication of vascular prosthetic devices, implants and grafts, subsequent encounter -T82898S Other specified complication of vascular prosthetic devices, implants and grafts, sequela -T829XXA Unspecified complication of cardiac and vascular prosthetic device, implant and graft, initial encounter -T829XXD Unspecified complication of cardiac and vascular prosthetic device, implant and graft, subsequent encounter -T829XXS Unspecified complication of cardiac and vascular prosthetic device, implant and graft, sequela -T83010A Breakdown (mechanical) of cystostomy catheter, initial encounter -T83010D Breakdown (mechanical) of cystostomy catheter, subsequent encounter -T83010S Breakdown (mechanical) of cystostomy catheter, sequela -T83011A Breakdown (mechanical) of indwelling urethral catheter, initial encounter -T83011D Breakdown (mechanical) of indwelling urethral catheter, subsequent encounter -T83011S Breakdown (mechanical) of indwelling urethral catheter, sequela -T83012A Breakdown (mechanical) of nephrostomy catheter, initial encounter -T83012D Breakdown (mechanical) of nephrostomy catheter, subsequent encounter -T83012S Breakdown (mechanical) of nephrostomy catheter, sequela -T83018A Breakdown (mechanical) of other urinary catheter, initial encounter -T83018D Breakdown (mechanical) of other urinary catheter, subsequent encounter -T83018S Breakdown (mechanical) of other urinary catheter, sequela -T83020A Displacement of cystostomy catheter, initial encounter -T83020D Displacement of cystostomy catheter, subsequent encounter -T83020S Displacement of cystostomy catheter, sequela -T83021A Displacement of indwelling urethral catheter, initial encounter -T83021D Displacement of indwelling urethral catheter, subsequent encounter -T83021S Displacement of indwelling urethral catheter, sequela -T83022A Displacement of nephrostomy catheter, initial encounter -T83022D Displacement of nephrostomy catheter, subsequent encounter -T83022S Displacement of nephrostomy catheter, sequela -T83028A Displacement of other urinary catheter, initial encounter -T83028D Displacement of other urinary catheter, subsequent encounter -T83028S Displacement of other urinary catheter, sequela -T83030A Leakage of cystostomy catheter, initial encounter -T83030D Leakage of cystostomy catheter, subsequent encounter -T83030S Leakage of cystostomy catheter, sequela -T83031A Leakage of indwelling urethral catheter, initial encounter -T83031D Leakage of indwelling urethral catheter, subsequent encounter -T83031S Leakage of indwelling urethral catheter, sequela -T83032A Leakage of nephrostomy catheter, initial encounter -T83032D Leakage of nephrostomy catheter, subsequent encounter -T83032S Leakage of nephrostomy catheter, sequela -T83038A Leakage of other urinary catheter, initial encounter -T83038D Leakage of other urinary catheter, subsequent encounter -T83038S Leakage of other urinary catheter, sequela -T83090A Other mechanical complication of cystostomy catheter, initial encounter -T83090D Other mechanical complication of cystostomy catheter, subsequent encounter -T83090S Other mechanical complication of cystostomy catheter, sequela -T83091A Other mechanical complication of indwelling urethral catheter, initial encounter -T83091D Other mechanical complication of indwelling urethral catheter, subsequent encounter -T83091S Other mechanical complication of indwelling urethral catheter, sequela -T83092A Other mechanical complication of nephrostomy catheter, initial encounter -T83092D Other mechanical complication of nephrostomy catheter, subsequent encounter -T83092S Other mechanical complication of nephrostomy catheter, sequela -T83098A Other mechanical complication of other urinary catheter, initial encounter -T83098D Other mechanical complication of other urinary catheter, subsequent encounter -T83098S Other mechanical complication of other urinary catheter, sequela -T83110A Breakdown (mechanical) of urinary electronic stimulator device, initial encounter -T83110D Breakdown (mechanical) of urinary electronic stimulator device, subsequent encounter -T83110S Breakdown (mechanical) of urinary electronic stimulator device, sequela -T83111A Breakdown (mechanical) of implanted urinary sphincter, initial encounter -T83111D Breakdown (mechanical) of implanted urinary sphincter, subsequent encounter -T83111S Breakdown (mechanical) of implanted urinary sphincter, sequela -T83112A Breakdown (mechanical) of indwelling ureteral stent, initial encounter -T83112D Breakdown (mechanical) of indwelling ureteral stent, subsequent encounter -T83112S Breakdown (mechanical) of indwelling ureteral stent, sequela -T83113A Breakdown (mechanical) of other urinary stents, initial encounter -T83113D Breakdown (mechanical) of other urinary stents, subsequent encounter -T83113S Breakdown (mechanical) of other urinary stents, sequela -T83118A Breakdown (mechanical) of other urinary devices and implants, initial encounter -T83118D Breakdown (mechanical) of other urinary devices and implants, subsequent encounter -T83118S Breakdown (mechanical) of other urinary devices and implants, sequela -T83120A Displacement of urinary electronic stimulator device, initial encounter -T83120D Displacement of urinary electronic stimulator device, subsequent encounter -T83120S Displacement of urinary electronic stimulator device, sequela -T83121A Displacement of implanted urinary sphincter, initial encounter -T83121D Displacement of implanted urinary sphincter, subsequent encounter -T83121S Displacement of implanted urinary sphincter, sequela -T83122A Displacement of indwelling ureteral stent, initial encounter -T83122D Displacement of indwelling ureteral stent, subsequent encounter -T83122S Displacement of indwelling ureteral stent, sequela -T83123A Displacement of other urinary stents, initial encounter -T83123D Displacement of other urinary stents, subsequent encounter -T83123S Displacement of other urinary stents, sequela -T83128A Displacement of other urinary devices and implants, initial encounter -T83128D Displacement of other urinary devices and implants, subsequent encounter -T83128S Displacement of other urinary devices and implants, sequela -T83190A Other mechanical complication of urinary electronic stimulator device, initial encounter -T83190D Other mechanical complication of urinary electronic stimulator device, subsequent encounter -T83190S Other mechanical complication of urinary electronic stimulator device, sequela -T83191A Other mechanical complication of implanted urinary sphincter, initial encounter -T83191D Other mechanical complication of implanted urinary sphincter, subsequent encounter -T83191S Other mechanical complication of implanted urinary sphincter, sequela -T83192A Other mechanical complication of indwelling ureteral stent, initial encounter -T83192D Other mechanical complication of indwelling ureteral stent, subsequent encounter -T83192S Other mechanical complication of indwelling ureteral stent, sequela -T83193A Other mechanical complication of other urinary stent, initial encounter -T83193D Other mechanical complication of other urinary stent, subsequent encounter -T83193S Other mechanical complication of other urinary stent, sequela -T83198A Other mechanical complication of other urinary devices and implants, initial encounter -T83198D Other mechanical complication of other urinary devices and implants, subsequent encounter -T83198S Other mechanical complication of other urinary devices and implants, sequela -T8321XA Breakdown (mechanical) of graft of urinary organ, initial encounter -T8321XD Breakdown (mechanical) of graft of urinary organ, subsequent encounter -T8321XS Breakdown (mechanical) of graft of urinary organ, sequela -T8322XA Displacement of graft of urinary organ, initial encounter -T8322XD Displacement of graft of urinary organ, subsequent encounter -T8322XS Displacement of graft of urinary organ, sequela -T8323XA Leakage of graft of urinary organ, initial encounter -T8323XD Leakage of graft of urinary organ, subsequent encounter -T8323XS Leakage of graft of urinary organ, sequela -T8324XA Erosion of graft of urinary organ, initial encounter -T8324XD Erosion of graft of urinary organ, subsequent encounter -T8324XS Erosion of graft of urinary organ, sequela -T8325XA Exposure of graft of urinary organ, initial encounter -T8325XD Exposure of graft of urinary organ, subsequent encounter -T8325XS Exposure of graft of urinary organ, sequela -T8329XA Other mechanical complication of graft of urinary organ, initial encounter -T8329XD Other mechanical complication of graft of urinary organ, subsequent encounter -T8329XS Other mechanical complication of graft of urinary organ, sequela -T8331XA Breakdown (mechanical) of intrauterine contraceptive device, initial encounter -T8331XD Breakdown (mechanical) of intrauterine contraceptive device, subsequent encounter -T8331XS Breakdown (mechanical) of intrauterine contraceptive device, sequela -T8332XA Displacement of intrauterine contraceptive device, initial encounter -T8332XD Displacement of intrauterine contraceptive device, subsequent encounter -T8332XS Displacement of intrauterine contraceptive device, sequela -T8339XA Other mechanical complication of intrauterine contraceptive device, initial encounter -T8339XD Other mechanical complication of intrauterine contraceptive device, subsequent encounter -T8339XS Other mechanical complication of intrauterine contraceptive device, sequela -T83410A Breakdown (mechanical) of implanted penile prosthesis, initial encounter -T83410D Breakdown (mechanical) of implanted penile prosthesis, subsequent encounter -T83410S Breakdown (mechanical) of implanted penile prosthesis, sequela -T83411A Breakdown (mechanical) of implanted testicular prosthesis, initial encounter -T83411D Breakdown (mechanical) of implanted testicular prosthesis, subsequent encounter -T83411S Breakdown (mechanical) of implanted testicular prosthesis, sequela -T83418A Breakdown (mechanical) of other prosthetic devices, implants and grafts of genital tract, initial encounter -T83418D Breakdown (mechanical) of other prosthetic devices, implants and grafts of genital tract, subsequent encounter -T83418S Breakdown (mechanical) of other prosthetic devices, implants and grafts of genital tract, sequela -T83420A Displacement of implanted penile prosthesis, initial encounter -T83420D Displacement of implanted penile prosthesis, subsequent encounter -T83420S Displacement of implanted penile prosthesis, sequela -T83421A Displacement of implanted testicular prosthesis, initial encounter -T83421D Displacement of implanted testicular prosthesis, subsequent encounter -T83421S Displacement of implanted testicular prosthesis, sequela -T83428A Displacement of other prosthetic devices, implants and grafts of genital tract, initial encounter -T83428D Displacement of other prosthetic devices, implants and grafts of genital tract, subsequent encounter -T83428S Displacement of other prosthetic devices, implants and grafts of genital tract, sequela -T83490A Other mechanical complication of implanted penile prosthesis, initial encounter -T83490D Other mechanical complication of implanted penile prosthesis, subsequent encounter -T83490S Other mechanical complication of implanted penile prosthesis, sequela -T83491A Other mechanical complication of implanted testicular prosthesis, initial encounter -T83491D Other mechanical complication of implanted testicular prosthesis, subsequent encounter -T83491S Other mechanical complication of implanted testicular prosthesis, sequela -T83498A Other mechanical complication of other prosthetic devices, implants and grafts of genital tract, initial encounter -T83498D Other mechanical complication of other prosthetic devices, implants and grafts of genital tract, subsequent encounter -T83498S Other mechanical complication of other prosthetic devices, implants and grafts of genital tract, sequela -T83510A Infection and inflammatory reaction due to cystostomy catheter, initial encounter -T83510D Infection and inflammatory reaction due to cystostomy catheter, subsequent encounter -T83510S Infection and inflammatory reaction due to cystostomy catheter, sequela -T83511A Infection and inflammatory reaction due to indwelling urethral catheter, initial encounter -T83511D Infection and inflammatory reaction due to indwelling urethral catheter, subsequent encounter -T83511S Infection and inflammatory reaction due to indwelling urethral catheter, sequela -T83512A Infection and inflammatory reaction due to nephrostomy catheter, initial encounter -T83512D Infection and inflammatory reaction due to nephrostomy catheter, subsequent encounter -T83512S Infection and inflammatory reaction due to nephrostomy catheter, sequela -T83518A Infection and inflammatory reaction due to other urinary catheter, initial encounter -T83518D Infection and inflammatory reaction due to other urinary catheter, subsequent encounter -T83518S Infection and inflammatory reaction due to other urinary catheter, sequela -T83590A Infection and inflammatory reaction due to implanted urinary neurostimulation device, initial encounter -T83590D Infection and inflammatory reaction due to implanted urinary neurostimulation device, subsequent encounter -T83590S Infection and inflammatory reaction due to implanted urinary neurostimulation device, sequela -T83591A Infection and inflammatory reaction due to implanted urinary sphincter, initial encounter -T83591D Infection and inflammatory reaction due to implanted urinary sphincter, subsequent encounter -T83591S Infection and inflammatory reaction due to implanted urinary sphincter, sequela -T83592A Infection and inflammatory reaction due to indwelling ureteral stent, initial encounter -T83592D Infection and inflammatory reaction due to indwelling ureteral stent, subsequent encounter -T83592S Infection and inflammatory reaction due to indwelling ureteral stent, sequela -T83593A Infection and inflammatory reaction due to other urinary stents, initial encounter -T83593D Infection and inflammatory reaction due to other urinary stents, subsequent encounter -T83593S Infection and inflammatory reaction due to other urinary stents, sequela -T83598A Infection and inflammatory reaction due to other prosthetic device, implant and graft in urinary system, initial encounter -T83598D Infection and inflammatory reaction due to other prosthetic device, implant and graft in urinary system, subsequent encounter -T83598S Infection and inflammatory reaction due to other prosthetic device, implant and graft in urinary system, sequela -T8361XA Infection and inflammatory reaction due to implanted penile prosthesis, initial encounter -T8361XD Infection and inflammatory reaction due to implanted penile prosthesis, subsequent encounter -T8361XS Infection and inflammatory reaction due to implanted penile prosthesis, sequela -T8362XA Infection and inflammatory reaction due to implanted testicular prosthesis, initial encounter -T8362XD Infection and inflammatory reaction due to implanted testicular prosthesis, subsequent encounter -T8362XS Infection and inflammatory reaction due to implanted testicular prosthesis, sequela -T8369XA Infection and inflammatory reaction due to other prosthetic device, implant and graft in genital tract, initial encounter -T8369XD Infection and inflammatory reaction due to other prosthetic device, implant and graft in genital tract, subsequent encounter -T8369XS Infection and inflammatory reaction due to other prosthetic device, implant and graft in genital tract, sequela -T83711A Erosion of implanted vaginal mesh to surrounding organ or tissue, initial encounter -T83711D Erosion of implanted vaginal mesh to surrounding organ or tissue, subsequent encounter -T83711S Erosion of implanted vaginal mesh to surrounding organ or tissue, sequela -T83712A Erosion of implanted urethral mesh to surrounding organ or tissue, initial encounter -T83712D Erosion of implanted urethral mesh to surrounding organ or tissue, subsequent encounter -T83712S Erosion of implanted urethral mesh to surrounding organ or tissue, sequela -T83713A Erosion of implanted urethral bulking agent to surrounding organ or tissue, initial encounter -T83713D Erosion of implanted urethral bulking agent to surrounding organ or tissue, subsequent encounter -T83713S Erosion of implanted urethral bulking agent to surrounding organ or tissue, sequela -T83714A Erosion of implanted ureteral bulking agent to surrounding organ or tissue, initial encounter -T83714D Erosion of implanted ureteral bulking agent to surrounding organ or tissue, subsequent encounter -T83714S Erosion of implanted ureteral bulking agent to surrounding organ or tissue, sequela -T83718A Erosion of other implanted mesh to organ or tissue, initial encounter -T83718D Erosion of other implanted mesh to organ or tissue, subsequent encounter -T83718S Erosion of other implanted mesh to organ or tissue, sequela -T83719A Erosion of other prosthetic materials to surrounding organ or tissue, initial encounter -T83719D Erosion of other prosthetic materials to surrounding organ or tissue, subsequent encounter -T83719S Erosion of other prosthetic materials to surrounding organ or tissue, sequela -T83721A Exposure of implanted vaginal mesh into vagina, initial encounter -T83721D Exposure of implanted vaginal mesh into vagina, subsequent encounter -T83721S Exposure of implanted vaginal mesh into vagina, sequela -T83722A Exposure of implanted urethral mesh into urethra, initial encounter -T83722D Exposure of implanted urethral mesh into urethra, subsequent encounter -T83722S Exposure of implanted urethral mesh into urethra, sequela -T83723A Exposure of implanted urethral bulking agent into urethra, initial encounter -T83723D Exposure of implanted urethral bulking agent into urethra, subsequent encounter -T83723S Exposure of implanted urethral bulking agent into urethra, sequela -T83724A Exposure of implanted ureteral bulking agent into ureter, initial encounter -T83724D Exposure of implanted ureteral bulking agent into ureter, subsequent encounter -T83724S Exposure of implanted ureteral bulking agent into ureter, sequela -T83728A Exposure of other implanted mesh into organ or tissue, initial encounter -T83728D Exposure of other implanted mesh into organ or tissue, subsequent encounter -T83728S Exposure of other implanted mesh into organ or tissue, sequela -T83729A Exposure of other prosthetic materials into organ or tissue, initial encounter -T83729D Exposure of other prosthetic materials into organ or tissue, subsequent encounter -T83729S Exposure of other prosthetic materials into organ or tissue, sequela -T8379XA Other specified complications due to other genitourinary prosthetic materials, initial encounter -T8379XD Other specified complications due to other genitourinary prosthetic materials, subsequent encounter -T8379XS Other specified complications due to other genitourinary prosthetic materials, sequela -T8381XA Embolism due to genitourinary prosthetic devices, implants and grafts, initial encounter -T8381XD Embolism due to genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8381XS Embolism due to genitourinary prosthetic devices, implants and grafts, sequela -T8382XA Fibrosis due to genitourinary prosthetic devices, implants and grafts, initial encounter -T8382XD Fibrosis due to genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8382XS Fibrosis due to genitourinary prosthetic devices, implants and grafts, sequela -T8383XA Hemorrhage due to genitourinary prosthetic devices, implants and grafts, initial encounter -T8383XD Hemorrhage due to genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8383XS Hemorrhage due to genitourinary prosthetic devices, implants and grafts, sequela -T8384XA Pain due to genitourinary prosthetic devices, implants and grafts, initial encounter -T8384XD Pain due to genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8384XS Pain due to genitourinary prosthetic devices, implants and grafts, sequela -T8385XA Stenosis due to genitourinary prosthetic devices, implants and grafts, initial encounter -T8385XD Stenosis due to genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8385XS Stenosis due to genitourinary prosthetic devices, implants and grafts, sequela -T8386XA Thrombosis due to genitourinary prosthetic devices, implants and grafts, initial encounter -T8386XD Thrombosis due to genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8386XS Thrombosis due to genitourinary prosthetic devices, implants and grafts, sequela -T8389XA Other specified complication of genitourinary prosthetic devices, implants and grafts, initial encounter -T8389XD Other specified complication of genitourinary prosthetic devices, implants and grafts, subsequent encounter -T8389XS Other specified complication of genitourinary prosthetic devices, implants and grafts, sequela -T839XXA Unspecified complication of genitourinary prosthetic device, implant and graft, initial encounter -T839XXD Unspecified complication of genitourinary prosthetic device, implant and graft, subsequent encounter -T839XXS Unspecified complication of genitourinary prosthetic device, implant and graft, sequela -T84010A Broken internal right hip prosthesis, initial encounter -T84010D Broken internal right hip prosthesis, subsequent encounter -T84010S Broken internal right hip prosthesis, sequela -T84011A Broken internal left hip prosthesis, initial encounter -T84011D Broken internal left hip prosthesis, subsequent encounter -T84011S Broken internal left hip prosthesis, sequela -T84012A Broken internal right knee prosthesis, initial encounter -T84012D Broken internal right knee prosthesis, subsequent encounter -T84012S Broken internal right knee prosthesis, sequela -T84013A Broken internal left knee prosthesis, initial encounter -T84013D Broken internal left knee prosthesis, subsequent encounter -T84013S Broken internal left knee prosthesis, sequela -T84018A Broken internal joint prosthesis, other site, initial encounter -T84018D Broken internal joint prosthesis, other site, subsequent encounter -T84018S Broken internal joint prosthesis, other site, sequela -T84019A Broken internal joint prosthesis, unspecified site, initial encounter -T84019D Broken internal joint prosthesis, unspecified site, subsequent encounter -T84019S Broken internal joint prosthesis, unspecified site, sequela -T84020A Dislocation of internal right hip prosthesis, initial encounter -T84020D Dislocation of internal right hip prosthesis, subsequent encounter -T84020S Dislocation of internal right hip prosthesis, sequela -T84021A Dislocation of internal left hip prosthesis, initial encounter -T84021D Dislocation of internal left hip prosthesis, subsequent encounter -T84021S Dislocation of internal left hip prosthesis, sequela -T84022A Instability of internal right knee prosthesis, initial encounter -T84022D Instability of internal right knee prosthesis, subsequent encounter -T84022S Instability of internal right knee prosthesis, sequela -T84023A Instability of internal left knee prosthesis, initial encounter -T84023D Instability of internal left knee prosthesis, subsequent encounter -T84023S Instability of internal left knee prosthesis, sequela -T84028A Dislocation of other internal joint prosthesis, initial encounter -T84028D Dislocation of other internal joint prosthesis, subsequent encounter -T84028S Dislocation of other internal joint prosthesis, sequela -T84029A Dislocation of unspecified internal joint prosthesis, initial encounter -T84029D Dislocation of unspecified internal joint prosthesis, subsequent encounter -T84029S Dislocation of unspecified internal joint prosthesis, sequela -T84030A Mechanical loosening of internal right hip prosthetic joint, initial encounter -T84030D Mechanical loosening of internal right hip prosthetic joint, subsequent encounter -T84030S Mechanical loosening of internal right hip prosthetic joint, sequela -T84031A Mechanical loosening of internal left hip prosthetic joint, initial encounter -T84031D Mechanical loosening of internal left hip prosthetic joint, subsequent encounter -T84031S Mechanical loosening of internal left hip prosthetic joint, sequela -T84032A Mechanical loosening of internal right knee prosthetic joint, initial encounter -T84032D Mechanical loosening of internal right knee prosthetic joint, subsequent encounter -T84032S Mechanical loosening of internal right knee prosthetic joint, sequela -T84033A Mechanical loosening of internal left knee prosthetic joint, initial encounter -T84033D Mechanical loosening of internal left knee prosthetic joint, subsequent encounter -T84033S Mechanical loosening of internal left knee prosthetic joint, sequela -T84038A Mechanical loosening of other internal prosthetic joint, initial encounter -T84038D Mechanical loosening of other internal prosthetic joint, subsequent encounter -T84038S Mechanical loosening of other internal prosthetic joint, sequela -T84039A Mechanical loosening of unspecified internal prosthetic joint, initial encounter -T84039D Mechanical loosening of unspecified internal prosthetic joint, subsequent encounter -T84039S Mechanical loosening of unspecified internal prosthetic joint, sequela -T84050A Periprosthetic osteolysis of internal prosthetic right hip joint, initial encounter -T84050D Periprosthetic osteolysis of internal prosthetic right hip joint, subsequent encounter -T84050S Periprosthetic osteolysis of internal prosthetic right hip joint, sequela -T84051A Periprosthetic osteolysis of internal prosthetic left hip joint, initial encounter -T84051D Periprosthetic osteolysis of internal prosthetic left hip joint, subsequent encounter -T84051S Periprosthetic osteolysis of internal prosthetic left hip joint, sequela -T84052A Periprosthetic osteolysis of internal prosthetic right knee joint, initial encounter -T84052D Periprosthetic osteolysis of internal prosthetic right knee joint, subsequent encounter -T84052S Periprosthetic osteolysis of internal prosthetic right knee joint, sequela -T84053A Periprosthetic osteolysis of internal prosthetic left knee joint, initial encounter -T84053D Periprosthetic osteolysis of internal prosthetic left knee joint, subsequent encounter -T84053S Periprosthetic osteolysis of internal prosthetic left knee joint, sequela -T84058A Periprosthetic osteolysis of other internal prosthetic joint, initial encounter -T84058D Periprosthetic osteolysis of other internal prosthetic joint, subsequent encounter -T84058S Periprosthetic osteolysis of other internal prosthetic joint, sequela -T84059A Periprosthetic osteolysis of unspecified internal prosthetic joint, initial encounter -T84059D Periprosthetic osteolysis of unspecified internal prosthetic joint, subsequent encounter -T84059S Periprosthetic osteolysis of unspecified internal prosthetic joint, sequela -T84060A Wear of articular bearing surface of internal prosthetic right hip joint, initial encounter -T84060D Wear of articular bearing surface of internal prosthetic right hip joint, subsequent encounter -T84060S Wear of articular bearing surface of internal prosthetic right hip joint, sequela -T84061A Wear of articular bearing surface of internal prosthetic left hip joint, initial encounter -T84061D Wear of articular bearing surface of internal prosthetic left hip joint, subsequent encounter -T84061S Wear of articular bearing surface of internal prosthetic left hip joint, sequela -T84062A Wear of articular bearing surface of internal prosthetic right knee joint, initial encounter -T84062D Wear of articular bearing surface of internal prosthetic right knee joint, subsequent encounter -T84062S Wear of articular bearing surface of internal prosthetic right knee joint, sequela -T84063A Wear of articular bearing surface of internal prosthetic left knee joint, initial encounter -T84063D Wear of articular bearing surface of internal prosthetic left knee joint, subsequent encounter -T84063S Wear of articular bearing surface of internal prosthetic left knee joint, sequela -T84068A Wear of articular bearing surface of other internal prosthetic joint, initial encounter -T84068D Wear of articular bearing surface of other internal prosthetic joint, subsequent encounter -T84068S Wear of articular bearing surface of other internal prosthetic joint, sequela -T84069A Wear of articular bearing surface of unspecified internal prosthetic joint, initial encounter -T84069D Wear of articular bearing surface of unspecified internal prosthetic joint, subsequent encounter -T84069S Wear of articular bearing surface of unspecified internal prosthetic joint, sequela -T84090A Other mechanical complication of internal right hip prosthesis, initial encounter -T84090D Other mechanical complication of internal right hip prosthesis, subsequent encounter -T84090S Other mechanical complication of internal right hip prosthesis, sequela -T84091A Other mechanical complication of internal left hip prosthesis, initial encounter -T84091D Other mechanical complication of internal left hip prosthesis, subsequent encounter -T84091S Other mechanical complication of internal left hip prosthesis, sequela -T84092A Other mechanical complication of internal right knee prosthesis, initial encounter -T84092D Other mechanical complication of internal right knee prosthesis, subsequent encounter -T84092S Other mechanical complication of internal right knee prosthesis, sequela -T84093A Other mechanical complication of internal left knee prosthesis, initial encounter -T84093D Other mechanical complication of internal left knee prosthesis, subsequent encounter -T84093S Other mechanical complication of internal left knee prosthesis, sequela -T84098A Other mechanical complication of other internal joint prosthesis, initial encounter -T84098D Other mechanical complication of other internal joint prosthesis, subsequent encounter -T84098S Other mechanical complication of other internal joint prosthesis, sequela -T84099A Other mechanical complication of unspecified internal joint prosthesis, initial encounter -T84099D Other mechanical complication of unspecified internal joint prosthesis, subsequent encounter -T84099S Other mechanical complication of unspecified internal joint prosthesis, sequela -T84110A Breakdown (mechanical) of internal fixation device of right humerus, initial encounter -T84110D Breakdown (mechanical) of internal fixation device of right humerus, subsequent encounter -T84110S Breakdown (mechanical) of internal fixation device of right humerus, sequela -T84111A Breakdown (mechanical) of internal fixation device of left humerus, initial encounter -T84111D Breakdown (mechanical) of internal fixation device of left humerus, subsequent encounter -T84111S Breakdown (mechanical) of internal fixation device of left humerus, sequela -T84112A Breakdown (mechanical) of internal fixation device of bone of right forearm, initial encounter -T84112D Breakdown (mechanical) of internal fixation device of bone of right forearm, subsequent encounter -T84112S Breakdown (mechanical) of internal fixation device of bone of right forearm, sequela -T84113A Breakdown (mechanical) of internal fixation device of bone of left forearm, initial encounter -T84113D Breakdown (mechanical) of internal fixation device of bone of left forearm, subsequent encounter -T84113S Breakdown (mechanical) of internal fixation device of bone of left forearm, sequela -T84114A Breakdown (mechanical) of internal fixation device of right femur, initial encounter -T84114D Breakdown (mechanical) of internal fixation device of right femur, subsequent encounter -T84114S Breakdown (mechanical) of internal fixation device of right femur, sequela -T84115A Breakdown (mechanical) of internal fixation device of left femur, initial encounter -T84115D Breakdown (mechanical) of internal fixation device of left femur, subsequent encounter -T84115S Breakdown (mechanical) of internal fixation device of left femur, sequela -T84116A Breakdown (mechanical) of internal fixation device of bone of right lower leg, initial encounter -T84116D Breakdown (mechanical) of internal fixation device of bone of right lower leg, subsequent encounter -T84116S Breakdown (mechanical) of internal fixation device of bone of right lower leg, sequela -T84117A Breakdown (mechanical) of internal fixation device of bone of left lower leg, initial encounter -T84117D Breakdown (mechanical) of internal fixation device of bone of left lower leg, subsequent encounter -T84117S Breakdown (mechanical) of internal fixation device of bone of left lower leg, sequela -T84119A Breakdown (mechanical) of internal fixation device of unspecified bone of limb, initial encounter -T84119D Breakdown (mechanical) of internal fixation device of unspecified bone of limb, subsequent encounter -T84119S Breakdown (mechanical) of internal fixation device of unspecified bone of limb, sequela -T84120A Displacement of internal fixation device of right humerus, initial encounter -T84120D Displacement of internal fixation device of right humerus, subsequent encounter -T84120S Displacement of internal fixation device of right humerus, sequela -T84121A Displacement of internal fixation device of left humerus, initial encounter -T84121D Displacement of internal fixation device of left humerus, subsequent encounter -T84121S Displacement of internal fixation device of left humerus, sequela -T84122A Displacement of internal fixation device of bone of right forearm, initial encounter -T84122D Displacement of internal fixation device of bone of right forearm, subsequent encounter -T84122S Displacement of internal fixation device of bone of right forearm, sequela -T84123A Displacement of internal fixation device of bone of left forearm, initial encounter -T84123D Displacement of internal fixation device of bone of left forearm, subsequent encounter -T84123S Displacement of internal fixation device of bone of left forearm, sequela -T84124A Displacement of internal fixation device of right femur, initial encounter -T84124D Displacement of internal fixation device of right femur, subsequent encounter -T84124S Displacement of internal fixation device of right femur, sequela -T84125A Displacement of internal fixation device of left femur, initial encounter -T84125D Displacement of internal fixation device of left femur, subsequent encounter -T84125S Displacement of internal fixation device of left femur, sequela -T84126A Displacement of internal fixation device of bone of right lower leg, initial encounter -T84126D Displacement of internal fixation device of bone of right lower leg, subsequent encounter -T84126S Displacement of internal fixation device of bone of right lower leg, sequela -T84127A Displacement of internal fixation device of bone of left lower leg, initial encounter -T84127D Displacement of internal fixation device of bone of left lower leg, subsequent encounter -T84127S Displacement of internal fixation device of bone of left lower leg, sequela -T84129A Displacement of internal fixation device of unspecified bone of limb, initial encounter -T84129D Displacement of internal fixation device of unspecified bone of limb, subsequent encounter -T84129S Displacement of internal fixation device of unspecified bone of limb, sequela -T84190A Other mechanical complication of internal fixation device of right humerus, initial encounter -T84190D Other mechanical complication of internal fixation device of right humerus, subsequent encounter -T84190S Other mechanical complication of internal fixation device of right humerus, sequela -T84191A Other mechanical complication of internal fixation device of left humerus, initial encounter -T84191D Other mechanical complication of internal fixation device of left humerus, subsequent encounter -T84191S Other mechanical complication of internal fixation device of left humerus, sequela -T84192A Other mechanical complication of internal fixation device of bone of right forearm, initial encounter -T84192D Other mechanical complication of internal fixation device of bone of right forearm, subsequent encounter -T84192S Other mechanical complication of internal fixation device of bone of right forearm, sequela -T84193A Other mechanical complication of internal fixation device of bone of left forearm, initial encounter -T84193D Other mechanical complication of internal fixation device of bone of left forearm, subsequent encounter -T84193S Other mechanical complication of internal fixation device of bone of left forearm, sequela -T84194A Other mechanical complication of internal fixation device of right femur, initial encounter -T84194D Other mechanical complication of internal fixation device of right femur, subsequent encounter -T84194S Other mechanical complication of internal fixation device of right femur, sequela -T84195A Other mechanical complication of internal fixation device of left femur, initial encounter -T84195D Other mechanical complication of internal fixation device of left femur, subsequent encounter -T84195S Other mechanical complication of internal fixation device of left femur, sequela -T84196A Other mechanical complication of internal fixation device of bone of right lower leg, initial encounter -T84196D Other mechanical complication of internal fixation device of bone of right lower leg, subsequent encounter -T84196S Other mechanical complication of internal fixation device of bone of right lower leg, sequela -T84197A Other mechanical complication of internal fixation device of bone of left lower leg, initial encounter -T84197D Other mechanical complication of internal fixation device of bone of left lower leg, subsequent encounter -T84197S Other mechanical complication of internal fixation device of bone of left lower leg, sequela -T84199A Other mechanical complication of internal fixation device of unspecified bone of limb, initial encounter -T84199D Other mechanical complication of internal fixation device of unspecified bone of limb, subsequent encounter -T84199S Other mechanical complication of internal fixation device of unspecified bone of limb, sequela -T84210A Breakdown (mechanical) of internal fixation device of bones of hand and fingers, initial encounter -T84210D Breakdown (mechanical) of internal fixation device of bones of hand and fingers, subsequent encounter -T84210S Breakdown (mechanical) of internal fixation device of bones of hand and fingers, sequela -T84213A Breakdown (mechanical) of internal fixation device of bones of foot and toes, initial encounter -T84213D Breakdown (mechanical) of internal fixation device of bones of foot and toes, subsequent encounter -T84213S Breakdown (mechanical) of internal fixation device of bones of foot and toes, sequela -T84216A Breakdown (mechanical) of internal fixation device of vertebrae, initial encounter -T84216D Breakdown (mechanical) of internal fixation device of vertebrae, subsequent encounter -T84216S Breakdown (mechanical) of internal fixation device of vertebrae, sequela -T84218A Breakdown (mechanical) of internal fixation device of other bones, initial encounter -T84218D Breakdown (mechanical) of internal fixation device of other bones, subsequent encounter -T84218S Breakdown (mechanical) of internal fixation device of other bones, sequela -T84220A Displacement of internal fixation device of bones of hand and fingers, initial encounter -T84220D Displacement of internal fixation device of bones of hand and fingers, subsequent encounter -T84220S Displacement of internal fixation device of bones of hand and fingers, sequela -T84223A Displacement of internal fixation device of bones of foot and toes, initial encounter -T84223D Displacement of internal fixation device of bones of foot and toes, subsequent encounter -T84223S Displacement of internal fixation device of bones of foot and toes, sequela -T84226A Displacement of internal fixation device of vertebrae, initial encounter -T84226D Displacement of internal fixation device of vertebrae, subsequent encounter -T84226S Displacement of internal fixation device of vertebrae, sequela -T84228A Displacement of internal fixation device of other bones, initial encounter -T84228D Displacement of internal fixation device of other bones, subsequent encounter -T84228S Displacement of internal fixation device of other bones, sequela -T84290A Other mechanical complication of internal fixation device of bones of hand and fingers, initial encounter -T84290D Other mechanical complication of internal fixation device of bones of hand and fingers, subsequent encounter -T84290S Other mechanical complication of internal fixation device of bones of hand and fingers, sequela -T84293A Other mechanical complication of internal fixation device of bones of foot and toes, initial encounter -T84293D Other mechanical complication of internal fixation device of bones of foot and toes, subsequent encounter -T84293S Other mechanical complication of internal fixation device of bones of foot and toes, sequela -T84296A Other mechanical complication of internal fixation device of vertebrae, initial encounter -T84296D Other mechanical complication of internal fixation device of vertebrae, subsequent encounter -T84296S Other mechanical complication of internal fixation device of vertebrae, sequela -T84298A Other mechanical complication of internal fixation device of other bones, initial encounter -T84298D Other mechanical complication of internal fixation device of other bones, subsequent encounter -T84298S Other mechanical complication of internal fixation device of other bones, sequela -T84310A Breakdown (mechanical) of electronic bone stimulator, initial encounter -T84310D Breakdown (mechanical) of electronic bone stimulator, subsequent encounter -T84310S Breakdown (mechanical) of electronic bone stimulator, sequela -T84318A Breakdown (mechanical) of other bone devices, implants and grafts, initial encounter -T84318D Breakdown (mechanical) of other bone devices, implants and grafts, subsequent encounter -T84318S Breakdown (mechanical) of other bone devices, implants and grafts, sequela -T84320A Displacement of electronic bone stimulator, initial encounter -T84320D Displacement of electronic bone stimulator, subsequent encounter -T84320S Displacement of electronic bone stimulator, sequela -T84328A Displacement of other bone devices, implants and grafts, initial encounter -T84328D Displacement of other bone devices, implants and grafts, subsequent encounter -T84328S Displacement of other bone devices, implants and grafts, sequela -T84390A Other mechanical complication of electronic bone stimulator, initial encounter -T84390D Other mechanical complication of electronic bone stimulator, subsequent encounter -T84390S Other mechanical complication of electronic bone stimulator, sequela -T84398A Other mechanical complication of other bone devices, implants and grafts, initial encounter -T84398D Other mechanical complication of other bone devices, implants and grafts, subsequent encounter -T84398S Other mechanical complication of other bone devices, implants and grafts, sequela -T84410A Breakdown (mechanical) of muscle and tendon graft, initial encounter -T84410D Breakdown (mechanical) of muscle and tendon graft, subsequent encounter -T84410S Breakdown (mechanical) of muscle and tendon graft, sequela -T84418A Breakdown (mechanical) of other internal orthopedic devices, implants and grafts, initial encounter -T84418D Breakdown (mechanical) of other internal orthopedic devices, implants and grafts, subsequent encounter -T84418S Breakdown (mechanical) of other internal orthopedic devices, implants and grafts, sequela -T84420A Displacement of muscle and tendon graft, initial encounter -T84420D Displacement of muscle and tendon graft, subsequent encounter -T84420S Displacement of muscle and tendon graft, sequela -T84428A Displacement of other internal orthopedic devices, implants and grafts, initial encounter -T84428D Displacement of other internal orthopedic devices, implants and grafts, subsequent encounter -T84428S Displacement of other internal orthopedic devices, implants and grafts, sequela -T84490A Other mechanical complication of muscle and tendon graft, initial encounter -T84490D Other mechanical complication of muscle and tendon graft, subsequent encounter -T84490S Other mechanical complication of muscle and tendon graft, sequela -T84498A Other mechanical complication of other internal orthopedic devices, implants and grafts, initial encounter -T84498D Other mechanical complication of other internal orthopedic devices, implants and grafts, subsequent encounter -T84498S Other mechanical complication of other internal orthopedic devices, implants and grafts, sequela -T8450XA Infection and inflammatory reaction due to unspecified internal joint prosthesis, initial encounter -T8450XD Infection and inflammatory reaction due to unspecified internal joint prosthesis, subsequent encounter -T8450XS Infection and inflammatory reaction due to unspecified internal joint prosthesis, sequela -T8451XA Infection and inflammatory reaction due to internal right hip prosthesis, initial encounter -T8451XD Infection and inflammatory reaction due to internal right hip prosthesis, subsequent encounter -T8451XS Infection and inflammatory reaction due to internal right hip prosthesis, sequela -T8452XA Infection and inflammatory reaction due to internal left hip prosthesis, initial encounter -T8452XD Infection and inflammatory reaction due to internal left hip prosthesis, subsequent encounter -T8452XS Infection and inflammatory reaction due to internal left hip prosthesis, sequela -T8453XA Infection and inflammatory reaction due to internal right knee prosthesis, initial encounter -T8453XD Infection and inflammatory reaction due to internal right knee prosthesis, subsequent encounter -T8453XS Infection and inflammatory reaction due to internal right knee prosthesis, sequela -T8454XA Infection and inflammatory reaction due to internal left knee prosthesis, initial encounter -T8454XD Infection and inflammatory reaction due to internal left knee prosthesis, subsequent encounter -T8454XS Infection and inflammatory reaction due to internal left knee prosthesis, sequela -T8459XA Infection and inflammatory reaction due to other internal joint prosthesis, initial encounter -T8459XD Infection and inflammatory reaction due to other internal joint prosthesis, subsequent encounter -T8459XS Infection and inflammatory reaction due to other internal joint prosthesis, sequela -T8460XA Infection and inflammatory reaction due to internal fixation device of unspecified site, initial encounter -T8460XD Infection and inflammatory reaction due to internal fixation device of unspecified site, subsequent encounter -T8460XS Infection and inflammatory reaction due to internal fixation device of unspecified site, sequela -T84610A Infection and inflammatory reaction due to internal fixation device of right humerus, initial encounter -T84610D Infection and inflammatory reaction due to internal fixation device of right humerus, subsequent encounter -T84610S Infection and inflammatory reaction due to internal fixation device of right humerus, sequela -T84611A Infection and inflammatory reaction due to internal fixation device of left humerus, initial encounter -T84611D Infection and inflammatory reaction due to internal fixation device of left humerus, subsequent encounter -T84611S Infection and inflammatory reaction due to internal fixation device of left humerus, sequela -T84612A Infection and inflammatory reaction due to internal fixation device of right radius, initial encounter -T84612D Infection and inflammatory reaction due to internal fixation device of right radius, subsequent encounter -T84612S Infection and inflammatory reaction due to internal fixation device of right radius, sequela -T84613A Infection and inflammatory reaction due to internal fixation device of left radius, initial encounter -T84613D Infection and inflammatory reaction due to internal fixation device of left radius, subsequent encounter -T84613S Infection and inflammatory reaction due to internal fixation device of left radius, sequela -T84614A Infection and inflammatory reaction due to internal fixation device of right ulna, initial encounter -T84614D Infection and inflammatory reaction due to internal fixation device of right ulna, subsequent encounter -T84614S Infection and inflammatory reaction due to internal fixation device of right ulna, sequela -T84615A Infection and inflammatory reaction due to internal fixation device of left ulna, initial encounter -T84615D Infection and inflammatory reaction due to internal fixation device of left ulna, subsequent encounter -T84615S Infection and inflammatory reaction due to internal fixation device of left ulna, sequela -T84619A Infection and inflammatory reaction due to internal fixation device of unspecified bone of arm, initial encounter -T84619D Infection and inflammatory reaction due to internal fixation device of unspecified bone of arm, subsequent encounter -T84619S Infection and inflammatory reaction due to internal fixation device of unspecified bone of arm, sequela -T84620A Infection and inflammatory reaction due to internal fixation device of right femur, initial encounter -T84620D Infection and inflammatory reaction due to internal fixation device of right femur, subsequent encounter -T84620S Infection and inflammatory reaction due to internal fixation device of right femur, sequela -T84621A Infection and inflammatory reaction due to internal fixation device of left femur, initial encounter -T84621D Infection and inflammatory reaction due to internal fixation device of left femur, subsequent encounter -T84621S Infection and inflammatory reaction due to internal fixation device of left femur, sequela -T84622A Infection and inflammatory reaction due to internal fixation device of right tibia, initial encounter -T84622D Infection and inflammatory reaction due to internal fixation device of right tibia, subsequent encounter -T84622S Infection and inflammatory reaction due to internal fixation device of right tibia, sequela -T84623A Infection and inflammatory reaction due to internal fixation device of left tibia, initial encounter -T84623D Infection and inflammatory reaction due to internal fixation device of left tibia, subsequent encounter -T84623S Infection and inflammatory reaction due to internal fixation device of left tibia, sequela -T84624A Infection and inflammatory reaction due to internal fixation device of right fibula, initial encounter -T84624D Infection and inflammatory reaction due to internal fixation device of right fibula, subsequent encounter -T84624S Infection and inflammatory reaction due to internal fixation device of right fibula, sequela -T84625A Infection and inflammatory reaction due to internal fixation device of left fibula, initial encounter -T84625D Infection and inflammatory reaction due to internal fixation device of left fibula, subsequent encounter -T84625S Infection and inflammatory reaction due to internal fixation device of left fibula, sequela -T84629A Infection and inflammatory reaction due to internal fixation device of unspecified bone of leg, initial encounter -T84629D Infection and inflammatory reaction due to internal fixation device of unspecified bone of leg, subsequent encounter -T84629S Infection and inflammatory reaction due to internal fixation device of unspecified bone of leg, sequela -T8463XA Infection and inflammatory reaction due to internal fixation device of spine, initial encounter -T8463XD Infection and inflammatory reaction due to internal fixation device of spine, subsequent encounter -T8463XS Infection and inflammatory reaction due to internal fixation device of spine, sequela -T8469XA Infection and inflammatory reaction due to internal fixation device of other site, initial encounter -T8469XD Infection and inflammatory reaction due to internal fixation device of other site, subsequent encounter -T8469XS Infection and inflammatory reaction due to internal fixation device of other site, sequela -T847XXA Infection and inflammatory reaction due to other internal orthopedic prosthetic devices, implants and grafts, initial encounter -T847XXD Infection and inflammatory reaction due to other internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T847XXS Infection and inflammatory reaction due to other internal orthopedic prosthetic devices, implants and grafts, sequela -T8481XA Embolism due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8481XD Embolism due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8481XS Embolism due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8482XA Fibrosis due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8482XD Fibrosis due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8482XS Fibrosis due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8483XA Hemorrhage due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8483XD Hemorrhage due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8483XS Hemorrhage due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8484XA Pain due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8484XD Pain due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8484XS Pain due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8485XA Stenosis due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8485XD Stenosis due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8485XS Stenosis due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8486XA Thrombosis due to internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8486XD Thrombosis due to internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8486XS Thrombosis due to internal orthopedic prosthetic devices, implants and grafts, sequela -T8489XA Other specified complication of internal orthopedic prosthetic devices, implants and grafts, initial encounter -T8489XD Other specified complication of internal orthopedic prosthetic devices, implants and grafts, subsequent encounter -T8489XS Other specified complication of internal orthopedic prosthetic devices, implants and grafts, sequela -T849XXA Unspecified complication of internal orthopedic prosthetic device, implant and graft, initial encounter -T849XXD Unspecified complication of internal orthopedic prosthetic device, implant and graft, subsequent encounter -T849XXS Unspecified complication of internal orthopedic prosthetic device, implant and graft, sequela -T8501XA Breakdown (mechanical) of ventricular intracranial (communicating) shunt, initial encounter -T8501XD Breakdown (mechanical) of ventricular intracranial (communicating) shunt, subsequent encounter -T8501XS Breakdown (mechanical) of ventricular intracranial (communicating) shunt, sequela -T8502XA Displacement of ventricular intracranial (communicating) shunt, initial encounter -T8502XD Displacement of ventricular intracranial (communicating) shunt, subsequent encounter -T8502XS Displacement of ventricular intracranial (communicating) shunt, sequela -T8503XA Leakage of ventricular intracranial (communicating) shunt, initial encounter -T8503XD Leakage of ventricular intracranial (communicating) shunt, subsequent encounter -T8503XS Leakage of ventricular intracranial (communicating) shunt, sequela -T8509XA Other mechanical complication of ventricular intracranial (communicating) shunt, initial encounter -T8509XD Other mechanical complication of ventricular intracranial (communicating) shunt, subsequent encounter -T8509XS Other mechanical complication of ventricular intracranial (communicating) shunt, sequela -T85110A Breakdown (mechanical) of implanted electronic neurostimulator of brain electrode (lead), initial encounter -T85110D Breakdown (mechanical) of implanted electronic neurostimulator of brain electrode (lead), subsequent encounter -T85110S Breakdown (mechanical) of implanted electronic neurostimulator of brain electrode (lead), sequela -T85111A Breakdown (mechanical) of implanted electronic neurostimulator of peripheral nerve electrode (lead), initial encounter -T85111D Breakdown (mechanical) of implanted electronic neurostimulator of peripheral nerve electrode (lead), subsequent encounter -T85111S Breakdown (mechanical) of implanted electronic neurostimulator of peripheral nerve electrode (lead), sequela -T85112A Breakdown (mechanical) of implanted electronic neurostimulator of spinal cord electrode (lead), initial encounter -T85112D Breakdown (mechanical) of implanted electronic neurostimulator of spinal cord electrode (lead), subsequent encounter -T85112S Breakdown (mechanical) of implanted electronic neurostimulator of spinal cord electrode (lead), sequela -T85113A Breakdown (mechanical) of implanted electronic neurostimulator, generator, initial encounter -T85113D Breakdown (mechanical) of implanted electronic neurostimulator, generator, subsequent encounter -T85113S Breakdown (mechanical) of implanted electronic neurostimulator, generator, sequela -T85118A Breakdown (mechanical) of other implanted electronic stimulator of nervous system, initial encounter -T85118D Breakdown (mechanical) of other implanted electronic stimulator of nervous system, subsequent encounter -T85118S Breakdown (mechanical) of other implanted electronic stimulator of nervous system, sequela -T85120A Displacement of implanted electronic neurostimulator of brain electrode (lead), initial encounter -T85120D Displacement of implanted electronic neurostimulator of brain electrode (lead), subsequent encounter -T85120S Displacement of implanted electronic neurostimulator of brain electrode (lead), sequela -T85121A Displacement of implanted electronic neurostimulator of peripheral nerve electrode (lead), initial encounter -T85121D Displacement of implanted electronic neurostimulator of peripheral nerve electrode (lead), subsequent encounter -T85121S Displacement of implanted electronic neurostimulator of peripheral nerve electrode (lead), sequela -T85122A Displacement of implanted electronic neurostimulator of spinal cord electrode (lead), initial encounter -T85122D Displacement of implanted electronic neurostimulator of spinal cord electrode (lead), subsequent encounter -T85122S Displacement of implanted electronic neurostimulator of spinal cord electrode (lead), sequela -T85123A Displacement of implanted electronic neurostimulator, generator, initial encounter -T85123D Displacement of implanted electronic neurostimulator, generator, subsequent encounter -T85123S Displacement of implanted electronic neurostimulator, generator, sequela -T85128A Displacement of other implanted electronic stimulator of nervous system, initial encounter -T85128D Displacement of other implanted electronic stimulator of nervous system, subsequent encounter -T85128S Displacement of other implanted electronic stimulator of nervous system, sequela -T85190A Other mechanical complication of implanted electronic neurostimulator of brain electrode (lead), initial encounter -T85190D Other mechanical complication of implanted electronic neurostimulator of brain electrode (lead), subsequent encounter -T85190S Other mechanical complication of implanted electronic neurostimulator of brain electrode (lead), sequela -T85191A Other mechanical complication of implanted electronic neurostimulator of peripheral nerve electrode (lead), initial encounter -T85191D Other mechanical complication of implanted electronic neurostimulator of peripheral nerve electrode (lead), subsequent encounter -T85191S Other mechanical complication of implanted electronic neurostimulator of peripheral nerve electrode (lead), sequela -T85192A Other mechanical complication of implanted electronic neurostimulator of spinal cord electrode (lead), initial encounter -T85192D Other mechanical complication of implanted electronic neurostimulator of spinal cord electrode (lead), subsequent encounter -T85192S Other mechanical complication of implanted electronic neurostimulator of spinal cord electrode (lead), sequela -T85193A Other mechanical complication of implanted electronic neurostimulator, generator, initial encounter -T85193D Other mechanical complication of implanted electronic neurostimulator, generator, subsequent encounter -T85193S Other mechanical complication of implanted electronic neurostimulator, generator, sequela -T85199A Other mechanical complication of other implanted electronic stimulator of nervous system, initial encounter -T85199D Other mechanical complication of other implanted electronic stimulator of nervous system, subsequent encounter -T85199S Other mechanical complication of other implanted electronic stimulator of nervous system, sequela -T8521XA Breakdown (mechanical) of intraocular lens, initial encounter -T8521XD Breakdown (mechanical) of intraocular lens, subsequent encounter -T8521XS Breakdown (mechanical) of intraocular lens, sequela -T8522XA Displacement of intraocular lens, initial encounter -T8522XD Displacement of intraocular lens, subsequent encounter -T8522XS Displacement of intraocular lens, sequela -T8529XA Other mechanical complication of intraocular lens, initial encounter -T8529XD Other mechanical complication of intraocular lens, subsequent encounter -T8529XS Other mechanical complication of intraocular lens, sequela -T85310A Breakdown (mechanical) of prosthetic orbit of right eye, initial encounter -T85310D Breakdown (mechanical) of prosthetic orbit of right eye, subsequent encounter -T85310S Breakdown (mechanical) of prosthetic orbit of right eye, sequela -T85311A Breakdown (mechanical) of prosthetic orbit of left eye, initial encounter -T85311D Breakdown (mechanical) of prosthetic orbit of left eye, subsequent encounter -T85311S Breakdown (mechanical) of prosthetic orbit of left eye, sequela -T85318A Breakdown (mechanical) of other ocular prosthetic devices, implants and grafts, initial encounter -T85318D Breakdown (mechanical) of other ocular prosthetic devices, implants and grafts, subsequent encounter -T85318S Breakdown (mechanical) of other ocular prosthetic devices, implants and grafts, sequela -T85320A Displacement of prosthetic orbit of right eye, initial encounter -T85320D Displacement of prosthetic orbit of right eye, subsequent encounter -T85320S Displacement of prosthetic orbit of right eye, sequela -T85321A Displacement of prosthetic orbit of left eye, initial encounter -T85321D Displacement of prosthetic orbit of left eye, subsequent encounter -T85321S Displacement of prosthetic orbit of left eye, sequela -T85328A Displacement of other ocular prosthetic devices, implants and grafts, initial encounter -T85328D Displacement of other ocular prosthetic devices, implants and grafts, subsequent encounter -T85328S Displacement of other ocular prosthetic devices, implants and grafts, sequela -T85390A Other mechanical complication of prosthetic orbit of right eye, initial encounter -T85390D Other mechanical complication of prosthetic orbit of right eye, subsequent encounter -T85390S Other mechanical complication of prosthetic orbit of right eye, sequela -T85391A Other mechanical complication of prosthetic orbit of left eye, initial encounter -T85391D Other mechanical complication of prosthetic orbit of left eye, subsequent encounter -T85391S Other mechanical complication of prosthetic orbit of left eye, sequela -T85398A Other mechanical complication of other ocular prosthetic devices, implants and grafts, initial encounter -T85398D Other mechanical complication of other ocular prosthetic devices, implants and grafts, subsequent encounter -T85398S Other mechanical complication of other ocular prosthetic devices, implants and grafts, sequela -T8541XA Breakdown (mechanical) of breast prosthesis and implant, initial encounter -T8541XD Breakdown (mechanical) of breast prosthesis and implant, subsequent encounter -T8541XS Breakdown (mechanical) of breast prosthesis and implant, sequela -T8542XA Displacement of breast prosthesis and implant, initial encounter -T8542XD Displacement of breast prosthesis and implant, subsequent encounter -T8542XS Displacement of breast prosthesis and implant, sequela -T8543XA Leakage of breast prosthesis and implant, initial encounter -T8543XD Leakage of breast prosthesis and implant, subsequent encounter -T8543XS Leakage of breast prosthesis and implant, sequela -T8544XA Capsular contracture of breast implant, initial encounter -T8544XD Capsular contracture of breast implant, subsequent encounter -T8544XS Capsular contracture of breast implant, sequela -T8549XA Other mechanical complication of breast prosthesis and implant, initial encounter -T8549XD Other mechanical complication of breast prosthesis and implant, subsequent encounter -T8549XS Other mechanical complication of breast prosthesis and implant, sequela -T85510A Breakdown (mechanical) of bile duct prosthesis, initial encounter -T85510D Breakdown (mechanical) of bile duct prosthesis, subsequent encounter -T85510S Breakdown (mechanical) of bile duct prosthesis, sequela -T85511A Breakdown (mechanical) of esophageal anti-reflux device, initial encounter -T85511D Breakdown (mechanical) of esophageal anti-reflux device, subsequent encounter -T85511S Breakdown (mechanical) of esophageal anti-reflux device, sequela -T85518A Breakdown (mechanical) of other gastrointestinal prosthetic devices, implants and grafts, initial encounter -T85518D Breakdown (mechanical) of other gastrointestinal prosthetic devices, implants and grafts, subsequent encounter -T85518S Breakdown (mechanical) of other gastrointestinal prosthetic devices, implants and grafts, sequela -T85520A Displacement of bile duct prosthesis, initial encounter -T85520D Displacement of bile duct prosthesis, subsequent encounter -T85520S Displacement of bile duct prosthesis, sequela -T85521A Displacement of esophageal anti-reflux device, initial encounter -T85521D Displacement of esophageal anti-reflux device, subsequent encounter -T85521S Displacement of esophageal anti-reflux device, sequela -T85528A Displacement of other gastrointestinal prosthetic devices, implants and grafts, initial encounter -T85528D Displacement of other gastrointestinal prosthetic devices, implants and grafts, subsequent encounter -T85528S Displacement of other gastrointestinal prosthetic devices, implants and grafts, sequela -T85590A Other mechanical complication of bile duct prosthesis, initial encounter -T85590D Other mechanical complication of bile duct prosthesis, subsequent encounter -T85590S Other mechanical complication of bile duct prosthesis, sequela -T85591A Other mechanical complication of esophageal anti-reflux device, initial encounter -T85591D Other mechanical complication of esophageal anti-reflux device, subsequent encounter -T85591S Other mechanical complication of esophageal anti-reflux device, sequela -T85598A Other mechanical complication of other gastrointestinal prosthetic devices, implants and grafts, initial encounter -T85598D Other mechanical complication of other gastrointestinal prosthetic devices, implants and grafts, subsequent encounter -T85598S Other mechanical complication of other gastrointestinal prosthetic devices, implants and grafts, sequela -T85610A Breakdown (mechanical) of cranial or spinal infusion catheter, initial encounter -T85610D Breakdown (mechanical) of cranial or spinal infusion catheter, subsequent encounter -T85610S Breakdown (mechanical) of cranial or spinal infusion catheter, sequela -T85611A Breakdown (mechanical) of intraperitoneal dialysis catheter, initial encounter -T85611D Breakdown (mechanical) of intraperitoneal dialysis catheter, subsequent encounter -T85611S Breakdown (mechanical) of intraperitoneal dialysis catheter, sequela -T85612A Breakdown (mechanical) of permanent sutures, initial encounter -T85612D Breakdown (mechanical) of permanent sutures, subsequent encounter -T85612S Breakdown (mechanical) of permanent sutures, sequela -T85613A Breakdown (mechanical) of artificial skin graft and decellularized allodermis, initial encounter -T85613D Breakdown (mechanical) of artificial skin graft and decellularized allodermis, subsequent encounter -T85613S Breakdown (mechanical) of artificial skin graft and decellularized allodermis, sequela -T85614A Breakdown (mechanical) of insulin pump, initial encounter -T85614D Breakdown (mechanical) of insulin pump, subsequent encounter -T85614S Breakdown (mechanical) of insulin pump, sequela -T85615A Breakdown (mechanical) of other nervous system device, implant or graft, initial encounter -T85615D Breakdown (mechanical) of other nervous system device, implant or graft, subsequent encounter -T85615S Breakdown (mechanical) of other nervous system device, implant or graft, sequela -T85618A Breakdown (mechanical) of other specified internal prosthetic devices, implants and grafts, initial encounter -T85618D Breakdown (mechanical) of other specified internal prosthetic devices, implants and grafts, subsequent encounter -T85618S Breakdown (mechanical) of other specified internal prosthetic devices, implants and grafts, sequela -T85620A Displacement of cranial or spinal infusion catheter, initial encounter -T85620D Displacement of cranial or spinal infusion catheter, subsequent encounter -T85620S Displacement of cranial or spinal infusion catheter, sequela -T85621A Displacement of intraperitoneal dialysis catheter, initial encounter -T85621D Displacement of intraperitoneal dialysis catheter, subsequent encounter -T85621S Displacement of intraperitoneal dialysis catheter, sequela -T85622A Displacement of permanent sutures, initial encounter -T85622D Displacement of permanent sutures, subsequent encounter -T85622S Displacement of permanent sutures, sequela -T85623A Displacement of artificial skin graft and decellularized allodermis, initial encounter -T85623D Displacement of artificial skin graft and decellularized allodermis, subsequent encounter -T85623S Displacement of artificial skin graft and decellularized allodermis, sequela -T85624A Displacement of insulin pump, initial encounter -T85624D Displacement of insulin pump, subsequent encounter -T85624S Displacement of insulin pump, sequela -T85625A Displacement of other nervous system device, implant or graft, initial encounter -T85625D Displacement of other nervous system device, implant or graft, subsequent encounter -T85625S Displacement of other nervous system device, implant or graft, sequela -T85628A Displacement of other specified internal prosthetic devices, implants and grafts, initial encounter -T85628D Displacement of other specified internal prosthetic devices, implants and grafts, subsequent encounter -T85628S Displacement of other specified internal prosthetic devices, implants and grafts, sequela -T85630A Leakage of cranial or spinal infusion catheter, initial encounter -T85630D Leakage of cranial or spinal infusion catheter, subsequent encounter -T85630S Leakage of cranial or spinal infusion catheter, sequela -T85631A Leakage of intraperitoneal dialysis catheter, initial encounter -T85631D Leakage of intraperitoneal dialysis catheter, subsequent encounter -T85631S Leakage of intraperitoneal dialysis catheter, sequela -T85633A Leakage of insulin pump, initial encounter -T85633D Leakage of insulin pump, subsequent encounter -T85633S Leakage of insulin pump, sequela -T85635A Leakage of other nervous system device, implant or graft, initial encounter -T85635D Leakage of other nervous system device, implant or graft, subsequent encounter -T85635S Leakage of other nervous system device, implant or graft, sequela -T85638A Leakage of other specified internal prosthetic devices, implants and grafts, initial encounter -T85638D Leakage of other specified internal prosthetic devices, implants and grafts, subsequent encounter -T85638S Leakage of other specified internal prosthetic devices, implants and grafts, sequela -T85690A Other mechanical complication of cranial or spinal infusion catheter, initial encounter -T85690D Other mechanical complication of cranial or spinal infusion catheter, subsequent encounter -T85690S Other mechanical complication of cranial or spinal infusion catheter, sequela -T85691A Other mechanical complication of intraperitoneal dialysis catheter, initial encounter -T85691D Other mechanical complication of intraperitoneal dialysis catheter, subsequent encounter -T85691S Other mechanical complication of intraperitoneal dialysis catheter, sequela -T85692A Other mechanical complication of permanent sutures, initial encounter -T85692D Other mechanical complication of permanent sutures, subsequent encounter -T85692S Other mechanical complication of permanent sutures, sequela -T85693A Other mechanical complication of artificial skin graft and decellularized allodermis, initial encounter -T85693D Other mechanical complication of artificial skin graft and decellularized allodermis, subsequent encounter -T85693S Other mechanical complication of artificial skin graft and decellularized allodermis, sequela -T85694A Other mechanical complication of insulin pump, initial encounter -T85694D Other mechanical complication of insulin pump, subsequent encounter -T85694S Other mechanical complication of insulin pump, sequela -T85695A Other mechanical complication of other nervous system device, implant or graft, initial encounter -T85695D Other mechanical complication of other nervous system device, implant or graft, subsequent encounter -T85695S Other mechanical complication of other nervous system device, implant or graft, sequela -T85698A Other mechanical complication of other specified internal prosthetic devices, implants and grafts, initial encounter -T85698D Other mechanical complication of other specified internal prosthetic devices, implants and grafts, subsequent encounter -T85698S Other mechanical complication of other specified internal prosthetic devices, implants and grafts, sequela -T8571XA Infection and inflammatory reaction due to peritoneal dialysis catheter, initial encounter -T8571XD Infection and inflammatory reaction due to peritoneal dialysis catheter, subsequent encounter -T8571XS Infection and inflammatory reaction due to peritoneal dialysis catheter, sequela -T8572XA Infection and inflammatory reaction due to insulin pump, initial encounter -T8572XD Infection and inflammatory reaction due to insulin pump, subsequent encounter -T8572XS Infection and inflammatory reaction due to insulin pump, sequela -T85730A Infection and inflammatory reaction due to ventricular intracranial (communicating) shunt, initial encounter -T85730D Infection and inflammatory reaction due to ventricular intracranial (communicating) shunt, subsequent encounter -T85730S Infection and inflammatory reaction due to ventricular intracranial (communicating) shunt, sequela -T85731A Infection and inflammatory reaction due to implanted electronic neurostimulator of brain, electrode (lead), initial encounter -T85731D Infection and inflammatory reaction due to implanted electronic neurostimulator of brain, electrode (lead), subsequent encounter -T85731S Infection and inflammatory reaction due to implanted electronic neurostimulator of brain, electrode (lead), sequela -T85732A Infection and inflammatory reaction due to implanted electronic neurostimulator of peripheral nerve, electrode (lead), initial encounter -T85732D Infection and inflammatory reaction due to implanted electronic neurostimulator of peripheral nerve, electrode (lead), subsequent encounter -T85732S Infection and inflammatory reaction due to implanted electronic neurostimulator of peripheral nerve, electrode (lead), sequela -T85733A Infection and inflammatory reaction due to implanted electronic neurostimulator of spinal cord, electrode (lead), initial encounter -T85733D Infection and inflammatory reaction due to implanted electronic neurostimulator of spinal cord, electrode (lead), subsequent encounter -T85733S Infection and inflammatory reaction due to implanted electronic neurostimulator of spinal cord, electrode (lead), sequela -T85734A Infection and inflammatory reaction due to implanted electronic neurostimulator, generator, initial encounter -T85734D Infection and inflammatory reaction due to implanted electronic neurostimulator, generator, subsequent encounter -T85734S Infection and inflammatory reaction due to implanted electronic neurostimulator, generator, sequela -T85735A Infection and inflammatory reaction due to cranial or spinal infusion catheter, initial encounter -T85735D Infection and inflammatory reaction due to cranial or spinal infusion catheter, subsequent encounter -T85735S Infection and inflammatory reaction due to cranial or spinal infusion catheter, sequela -T85738A Infection and inflammatory reaction due to other nervous system device, implant or graft, initial encounter -T85738D Infection and inflammatory reaction due to other nervous system device, implant or graft, subsequent encounter -T85738S Infection and inflammatory reaction due to other nervous system device, implant or graft, sequela -T8579XA Infection and inflammatory reaction due to other internal prosthetic devices, implants and grafts, initial encounter -T8579XD Infection and inflammatory reaction due to other internal prosthetic devices, implants and grafts, subsequent encounter -T8579XS Infection and inflammatory reaction due to other internal prosthetic devices, implants and grafts, sequela -T85810A Embolism due to nervous system prosthetic devices, implants and grafts, initial encounter -T85810D Embolism due to nervous system prosthetic devices, implants and grafts, subsequent encounter -T85810S Embolism due to nervous system prosthetic devices, implants and grafts, sequela -T85818A Embolism due to other internal prosthetic devices, implants and grafts, initial encounter -T85818D Embolism due to other internal prosthetic devices, implants and grafts, subsequent encounter -T85818S Embolism due to other internal prosthetic devices, implants and grafts, sequela -T85820A Fibrosis due to nervous system prosthetic devices, implants and grafts, initial encounter -T85820D Fibrosis due to nervous system prosthetic devices, implants and grafts, subsequent encounter -T85820S Fibrosis due to nervous system prosthetic devices, implants and grafts, sequela -T85828A Fibrosis due to other internal prosthetic devices, implants and grafts, initial encounter -T85828D Fibrosis due to other internal prosthetic devices, implants and grafts, subsequent encounter -T85828S Fibrosis due to other internal prosthetic devices, implants and grafts, sequela -T85830A Hemorrhage due to nervous system prosthetic devices, implants and grafts, initial encounter -T85830D Hemorrhage due to nervous system prosthetic devices, implants and grafts, subsequent encounter -T85830S Hemorrhage due to nervous system prosthetic devices, implants and grafts, sequela -T85838A Hemorrhage due to other internal prosthetic devices, implants and grafts, initial encounter -T85838D Hemorrhage due to other internal prosthetic devices, implants and grafts, subsequent encounter -T85838S Hemorrhage due to other internal prosthetic devices, implants and grafts, sequela -T85840A Pain due to nervous system prosthetic devices, implants and grafts, initial encounter -T85840D Pain due to nervous system prosthetic devices, implants and grafts, subsequent encounter -T85840S Pain due to nervous system prosthetic devices, implants and grafts, sequela -T85848A Pain due to other internal prosthetic devices, implants and grafts, initial encounter -T85848D Pain due to other internal prosthetic devices, implants and grafts, subsequent encounter -T85848S Pain due to other internal prosthetic devices, implants and grafts, sequela -T85850A Stenosis due to nervous system prosthetic devices, implants and grafts, initial encounter -T85850D Stenosis due to nervous system prosthetic devices, implants and grafts, subsequent encounter -T85850S Stenosis due to nervous system prosthetic devices, implants and grafts, sequela -T85858A Stenosis due to other internal prosthetic devices, implants and grafts, initial encounter -T85858D Stenosis due to other internal prosthetic devices, implants and grafts, subsequent encounter -T85858S Stenosis due to other internal prosthetic devices, implants and grafts, sequela -T85860A Thrombosis due to nervous system prosthetic devices, implants and grafts, initial encounter -T85860D Thrombosis due to nervous system prosthetic devices, implants and grafts, subsequent encounter -T85860S Thrombosis due to nervous system prosthetic devices, implants and grafts, sequela -T85868A Thrombosis due to other internal prosthetic devices, implants and grafts, initial encounter -T85868D Thrombosis due to other internal prosthetic devices, implants and grafts, subsequent encounter -T85868S Thrombosis due to other internal prosthetic devices, implants and grafts, sequela -T85890A Other specified complication of nervous system prosthetic devices, implants and grafts, initial encounter -T85890D Other specified complication of nervous system prosthetic devices, implants and grafts, subsequent encounter -T85890S Other specified complication of nervous system prosthetic devices, implants and grafts, sequela -T85898A Other specified complication of other internal prosthetic devices, implants and grafts, initial encounter -T85898D Other specified complication of other internal prosthetic devices, implants and grafts, subsequent encounter -T85898S Other specified complication of other internal prosthetic devices, implants and grafts, sequela -T859XXA Unspecified complication of internal prosthetic device, implant and graft, initial encounter -T859XXD Unspecified complication of internal prosthetic device, implant and graft, subsequent encounter -T859XXS Unspecified complication of internal prosthetic device, implant and graft, sequela -T8600 Unspecified complication of bone marrow transplant -T8601 Bone marrow transplant rejection -T8602 Bone marrow transplant failure -T8603 Bone marrow transplant infection -T8609 Other complications of bone marrow transplant -T8610 Unspecified complication of kidney transplant -T8611 Kidney transplant rejection -T8612 Kidney transplant failure -T8613 Kidney transplant infection -T8619 Other complication of kidney transplant -T8620 Unspecified complication of heart transplant -T8621 Heart transplant rejection -T8622 Heart transplant failure -T8623 Heart transplant infection -T86290 Cardiac allograft vasculopathy -T86298 Other complications of heart transplant -T8630 Unspecified complication of heart-lung transplant -T8631 Heart-lung transplant rejection -T8632 Heart-lung transplant failure -T8633 Heart-lung transplant infection -T8639 Other complications of heart-lung transplant -T8640 Unspecified complication of liver transplant -T8641 Liver transplant rejection -T8642 Liver transplant failure -T8643 Liver transplant infection -T8649 Other complications of liver transplant -T865 Complications of stem cell transplant -T86810 Lung transplant rejection -T86811 Lung transplant failure -T86812 Lung transplant infection -T86818 Other complications of lung transplant -T86819 Unspecified complication of lung transplant -T86820 Skin graft (allograft) rejection -T86821 Skin graft (allograft) (autograft) failure -T86822 Skin graft (allograft) (autograft) infection -T86828 Other complications of skin graft (allograft) (autograft) -T86829 Unspecified complication of skin graft (allograft) (autograft) -T86830 Bone graft rejection -T86831 Bone graft failure -T86832 Bone graft infection -T86838 Other complications of bone graft -T86839 Unspecified complication of bone graft -T86840 Corneal transplant rejection -T86841 Corneal transplant failure -T86842 Corneal transplant infection -T86848 Other complications of corneal transplant -T86849 Unspecified complication of corneal transplant -T86850 Intestine transplant rejection -T86851 Intestine transplant failure -T86852 Intestine transplant infection -T86858 Other complications of intestine transplant -T86859 Unspecified complication of intestine transplant -T86890 Other transplanted tissue rejection -T86891 Other transplanted tissue failure -T86892 Other transplanted tissue infection -T86898 Other complications of other transplanted tissue -T86899 Unspecified complication of other transplanted tissue -T8690 Unspecified complication of unspecified transplanted organ and tissue -T8691 Unspecified transplanted organ and tissue rejection -T8692 Unspecified transplanted organ and tissue failure -T8693 Unspecified transplanted organ and tissue infection -T8699 Other complications of unspecified transplanted organ and tissue -T870X1 Complications of reattached (part of) right upper extremity -T870X2 Complications of reattached (part of) left upper extremity -T870X9 Complications of reattached (part of) unspecified upper extremity -T871X1 Complications of reattached (part of) right lower extremity -T871X2 Complications of reattached (part of) left lower extremity -T871X9 Complications of reattached (part of) unspecified lower extremity -T872 Complications of other reattached body part -T8730 Neuroma of amputation stump, unspecified extremity -T8731 Neuroma of amputation stump, right upper extremity -T8732 Neuroma of amputation stump, left upper extremity -T8733 Neuroma of amputation stump, right lower extremity -T8734 Neuroma of amputation stump, left lower extremity -T8740 Infection of amputation stump, unspecified extremity -T8741 Infection of amputation stump, right upper extremity -T8742 Infection of amputation stump, left upper extremity -T8743 Infection of amputation stump, right lower extremity -T8744 Infection of amputation stump, left lower extremity -T8750 Necrosis of amputation stump, unspecified extremity -T8751 Necrosis of amputation stump, right upper extremity -T8752 Necrosis of amputation stump, left upper extremity -T8753 Necrosis of amputation stump, right lower extremity -T8754 Necrosis of amputation stump, left lower extremity -T8781 Dehiscence of amputation stump -T8789 Other complications of amputation stump -T879 Unspecified complications of amputation stump -T880XXA Infection following immunization, initial encounter -T880XXD Infection following immunization, subsequent encounter -T880XXS Infection following immunization, sequela -T881XXA Other complications following immunization, not elsewhere classified, initial encounter -T881XXD Other complications following immunization, not elsewhere classified, subsequent encounter -T881XXS Other complications following immunization, not elsewhere classified, sequela -T882XXA Shock due to anesthesia, initial encounter -T882XXD Shock due to anesthesia, subsequent encounter -T882XXS Shock due to anesthesia, sequela -T883XXA Malignant hyperthermia due to anesthesia, initial encounter -T883XXD Malignant hyperthermia due to anesthesia, subsequent encounter -T883XXS Malignant hyperthermia due to anesthesia, sequela -T884XXA Failed or difficult intubation, initial encounter -T884XXD Failed or difficult intubation, subsequent encounter -T884XXS Failed or difficult intubation, sequela -T8851XA Hypothermia following anesthesia, initial encounter -T8851XD Hypothermia following anesthesia, subsequent encounter -T8851XS Hypothermia following anesthesia, sequela -T8852XA Failed moderate sedation during procedure, initial encounter -T8852XD Failed moderate sedation during procedure, subsequent encounter -T8852XS Failed moderate sedation during procedure, sequela -T8853XA Unintended awareness under general anesthesia during procedure, initial encounter -T8853XD Unintended awareness under general anesthesia during procedure, subsequent encounter -T8853XS Unintended awareness under general anesthesia during procedure, sequela -T8859XA Other complications of anesthesia, initial encounter -T8859XD Other complications of anesthesia, subsequent encounter -T8859XS Other complications of anesthesia, sequela -T886XXA Anaphylactic reaction due to adverse effect of correct drug or medicament properly administered, initial encounter -T886XXD Anaphylactic reaction due to adverse effect of correct drug or medicament properly administered, subsequent encounter -T886XXS Anaphylactic reaction due to adverse effect of correct drug or medicament properly administered, sequela -T887XXA Unspecified adverse effect of drug or medicament, initial encounter -T887XXD Unspecified adverse effect of drug or medicament, subsequent encounter -T887XXS Unspecified adverse effect of drug or medicament, sequela -T888XXA Other specified complications of surgical and medical care, not elsewhere classified, initial encounter -T888XXD Other specified complications of surgical and medical care, not elsewhere classified, subsequent encounter -T888XXS Other specified complications of surgical and medical care, not elsewhere classified, sequela -T889XXA Complication of surgical and medical care, unspecified, initial encounter -T889XXD Complication of surgical and medical care, unspecified, subsequent encounter -T889XXS Complication of surgical and medical care, unspecified, sequela -V0001XA Pedestrian on foot injured in collision with roller-skater, initial encounter -V0001XD Pedestrian on foot injured in collision with roller-skater, subsequent encounter -V0001XS Pedestrian on foot injured in collision with roller-skater, sequela -V0002XA Pedestrian on foot injured in collision with skateboarder, initial encounter -V0002XD Pedestrian on foot injured in collision with skateboarder, subsequent encounter -V0002XS Pedestrian on foot injured in collision with skateboarder, sequela -V0009XA Pedestrian on foot injured in collision with other pedestrian conveyance, initial encounter -V0009XD Pedestrian on foot injured in collision with other pedestrian conveyance, subsequent encounter -V0009XS Pedestrian on foot injured in collision with other pedestrian conveyance, sequela -V00111A Fall from in-line roller-skates, initial encounter -V00111D Fall from in-line roller-skates, subsequent encounter -V00111S Fall from in-line roller-skates, sequela -V00112A In-line roller-skater colliding with stationary object, initial encounter -V00112D In-line roller-skater colliding with stationary object, subsequent encounter -V00112S In-line roller-skater colliding with stationary object, sequela -V00118A Other in-line roller-skate accident, initial encounter -V00118D Other in-line roller-skate accident, subsequent encounter -V00118S Other in-line roller-skate accident, sequela -V00121A Fall from non-in-line roller-skates, initial encounter -V00121D Fall from non-in-line roller-skates, subsequent encounter -V00121S Fall from non-in-line roller-skates, sequela -V00122A Non-in-line roller-skater colliding with stationary object, initial encounter -V00122D Non-in-line roller-skater colliding with stationary object, subsequent encounter -V00122S Non-in-line roller-skater colliding with stationary object, sequela -V00128A Other non-in-line roller-skating accident, initial encounter -V00128D Other non-in-line roller-skating accident, subsequent encounter -V00128S Other non-in-line roller-skating accident, sequela -V00131A Fall from skateboard, initial encounter -V00131D Fall from skateboard, subsequent encounter -V00131S Fall from skateboard, sequela -V00132A Skateboarder colliding with stationary object, initial encounter -V00132D Skateboarder colliding with stationary object, subsequent encounter -V00132S Skateboarder colliding with stationary object, sequela -V00138A Other skateboard accident, initial encounter -V00138D Other skateboard accident, subsequent encounter -V00138S Other skateboard accident, sequela -V00141A Fall from scooter (nonmotorized), initial encounter -V00141D Fall from scooter (nonmotorized), subsequent encounter -V00141S Fall from scooter (nonmotorized), sequela -V00142A Scooter (nonmotorized) colliding with stationary object, initial encounter -V00142D Scooter (nonmotorized) colliding with stationary object, subsequent encounter -V00142S Scooter (nonmotorized) colliding with stationary object, sequela -V00148A Other scooter (nonmotorized) accident, initial encounter -V00148D Other scooter (nonmotorized) accident, subsequent encounter -V00148S Other scooter (nonmotorized) accident, sequela -V00151A Fall from heelies, initial encounter -V00151D Fall from heelies, subsequent encounter -V00151S Fall from heelies, sequela -V00152A Heelies colliding with stationary object, initial encounter -V00152D Heelies colliding with stationary object, subsequent encounter -V00152S Heelies colliding with stationary object, sequela -V00158A Other heelies accident, initial encounter -V00158D Other heelies accident, subsequent encounter -V00158S Other heelies accident, sequela -V00181A Fall from other rolling-type pedestrian conveyance, initial encounter -V00181D Fall from other rolling-type pedestrian conveyance, subsequent encounter -V00181S Fall from other rolling-type pedestrian conveyance, sequela -V00182A Pedestrian on other rolling-type pedestrian conveyance colliding with stationary object, initial encounter -V00182D Pedestrian on other rolling-type pedestrian conveyance colliding with stationary object, subsequent encounter -V00182S Pedestrian on other rolling-type pedestrian conveyance colliding with stationary object, sequela -V00188A Other accident on other rolling-type pedestrian conveyance, initial encounter -V00188D Other accident on other rolling-type pedestrian conveyance, subsequent encounter -V00188S Other accident on other rolling-type pedestrian conveyance, sequela -V00211A Fall from ice-skates, initial encounter -V00211D Fall from ice-skates, subsequent encounter -V00211S Fall from ice-skates, sequela -V00212A Ice-skater colliding with stationary object, initial encounter -V00212D Ice-skater colliding with stationary object, subsequent encounter -V00212S Ice-skater colliding with stationary object, sequela -V00218A Other ice-skates accident, initial encounter -V00218D Other ice-skates accident, subsequent encounter -V00218S Other ice-skates accident, sequela -V00221A Fall from sled, initial encounter -V00221D Fall from sled, subsequent encounter -V00221S Fall from sled, sequela -V00222A Sledder colliding with stationary object, initial encounter -V00222D Sledder colliding with stationary object, subsequent encounter -V00222S Sledder colliding with stationary object, sequela -V00228A Other sled accident, initial encounter -V00228D Other sled accident, subsequent encounter -V00228S Other sled accident, sequela -V00281A Fall from other gliding-type pedestrian conveyance, initial encounter -V00281D Fall from other gliding-type pedestrian conveyance, subsequent encounter -V00281S Fall from other gliding-type pedestrian conveyance, sequela -V00282A Pedestrian on other gliding-type pedestrian conveyance colliding with stationary object, initial encounter -V00282D Pedestrian on other gliding-type pedestrian conveyance colliding with stationary object, subsequent encounter -V00282S Pedestrian on other gliding-type pedestrian conveyance colliding with stationary object, sequela -V00288A Other accident on other gliding-type pedestrian conveyance, initial encounter -V00288D Other accident on other gliding-type pedestrian conveyance, subsequent encounter -V00288S Other accident on other gliding-type pedestrian conveyance, sequela -V00311A Fall from snowboard, initial encounter -V00311D Fall from snowboard, subsequent encounter -V00311S Fall from snowboard, sequela -V00312A Snowboarder colliding with stationary object, initial encounter -V00312D Snowboarder colliding with stationary object, subsequent encounter -V00312S Snowboarder colliding with stationary object, sequela -V00318A Other snowboard accident, initial encounter -V00318D Other snowboard accident, subsequent encounter -V00318S Other snowboard accident, sequela -V00321A Fall from snow-skis, initial encounter -V00321D Fall from snow-skis, subsequent encounter -V00321S Fall from snow-skis, sequela -V00322A Snow-skier colliding with stationary object, initial encounter -V00322D Snow-skier colliding with stationary object, subsequent encounter -V00322S Snow-skier colliding with stationary object, sequela -V00328A Other snow-ski accident, initial encounter -V00328D Other snow-ski accident, subsequent encounter -V00328S Other snow-ski accident, sequela -V00381A Fall from other flat-bottomed pedestrian conveyance, initial encounter -V00381D Fall from other flat-bottomed pedestrian conveyance, subsequent encounter -V00381S Fall from other flat-bottomed pedestrian conveyance, sequela -V00382A Pedestrian on other flat-bottomed pedestrian conveyance colliding with stationary object, initial encounter -V00382D Pedestrian on other flat-bottomed pedestrian conveyance colliding with stationary object, subsequent encounter -V00382S Pedestrian on other flat-bottomed pedestrian conveyance colliding with stationary object, sequela -V00388A Other accident on other flat-bottomed pedestrian conveyance, initial encounter -V00388D Other accident on other flat-bottomed pedestrian conveyance, subsequent encounter -V00388S Other accident on other flat-bottomed pedestrian conveyance, sequela -V00811A Fall from moving wheelchair (powered), initial encounter -V00811D Fall from moving wheelchair (powered), subsequent encounter -V00811S Fall from moving wheelchair (powered), sequela -V00812A Wheelchair (powered) colliding with stationary object, initial encounter -V00812D Wheelchair (powered) colliding with stationary object, subsequent encounter -V00812S Wheelchair (powered) colliding with stationary object, sequela -V00818A Other accident with wheelchair (powered), initial encounter -V00818D Other accident with wheelchair (powered), subsequent encounter -V00818S Other accident with wheelchair (powered), sequela -V00821A Fall from babystroller, initial encounter -V00821D Fall from babystroller, subsequent encounter -V00821S Fall from babystroller, sequela -V00822A Babystroller colliding with stationary object, initial encounter -V00822D Babystroller colliding with stationary object, subsequent encounter -V00822S Babystroller colliding with stationary object, sequela -V00828A Other accident with babystroller, initial encounter -V00828D Other accident with babystroller, subsequent encounter -V00828S Other accident with babystroller, sequela -V00831A Fall from motorized mobility scooter, initial encounter -V00831D Fall from motorized mobility scooter, subsequent encounter -V00831S Fall from motorized mobility scooter, sequela -V00832A Motorized mobility scooter colliding with stationary object, initial encounter -V00832D Motorized mobility scooter colliding with stationary object, subsequent encounter -V00832S Motorized mobility scooter colliding with stationary object, sequela -V00838A Other accident with motorized mobility scooter, initial encounter -V00838D Other accident with motorized mobility scooter, subsequent encounter -V00838S Other accident with motorized mobility scooter, sequela -V00891A Fall from other pedestrian conveyance, initial encounter -V00891D Fall from other pedestrian conveyance, subsequent encounter -V00891S Fall from other pedestrian conveyance, sequela -V00892A Pedestrian on other pedestrian conveyance colliding with stationary object, initial encounter -V00892D Pedestrian on other pedestrian conveyance colliding with stationary object, subsequent encounter -V00892S Pedestrian on other pedestrian conveyance colliding with stationary object, sequela -V00898A Other accident on other pedestrian conveyance, initial encounter -V00898D Other accident on other pedestrian conveyance, subsequent encounter -V00898S Other accident on other pedestrian conveyance, sequela -V0100XA Pedestrian on foot injured in collision with pedal cycle in nontraffic accident, initial encounter -V0100XD Pedestrian on foot injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V0100XS Pedestrian on foot injured in collision with pedal cycle in nontraffic accident, sequela -V0101XA Pedestrian on roller-skates injured in collision with pedal cycle in nontraffic accident, initial encounter -V0101XD Pedestrian on roller-skates injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V0101XS Pedestrian on roller-skates injured in collision with pedal cycle in nontraffic accident, sequela -V0102XA Pedestrian on skateboard injured in collision with pedal cycle in nontraffic accident, initial encounter -V0102XD Pedestrian on skateboard injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V0102XS Pedestrian on skateboard injured in collision with pedal cycle in nontraffic accident, sequela -V0109XA Pedestrian with other conveyance injured in collision with pedal cycle in nontraffic accident, initial encounter -V0109XD Pedestrian with other conveyance injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V0109XS Pedestrian with other conveyance injured in collision with pedal cycle in nontraffic accident, sequela -V0110XA Pedestrian on foot injured in collision with pedal cycle in traffic accident, initial encounter -V0110XD Pedestrian on foot injured in collision with pedal cycle in traffic accident, subsequent encounter -V0110XS Pedestrian on foot injured in collision with pedal cycle in traffic accident, sequela -V0111XA Pedestrian on roller-skates injured in collision with pedal cycle in traffic accident, initial encounter -V0111XD Pedestrian on roller-skates injured in collision with pedal cycle in traffic accident, subsequent encounter -V0111XS Pedestrian on roller-skates injured in collision with pedal cycle in traffic accident, sequela -V0112XA Pedestrian on skateboard injured in collision with pedal cycle in traffic accident, initial encounter -V0112XD Pedestrian on skateboard injured in collision with pedal cycle in traffic accident, subsequent encounter -V0112XS Pedestrian on skateboard injured in collision with pedal cycle in traffic accident, sequela -V0119XA Pedestrian with other conveyance injured in collision with pedal cycle in traffic accident, initial encounter -V0119XD Pedestrian with other conveyance injured in collision with pedal cycle in traffic accident, subsequent encounter -V0119XS Pedestrian with other conveyance injured in collision with pedal cycle in traffic accident, sequela -V0190XA Pedestrian on foot injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, initial encounter -V0190XD Pedestrian on foot injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0190XS Pedestrian on foot injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, sequela -V0191XA Pedestrian on roller-skates injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, initial encounter -V0191XD Pedestrian on roller-skates injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0191XS Pedestrian on roller-skates injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, sequela -V0192XA Pedestrian on skateboard injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, initial encounter -V0192XD Pedestrian on skateboard injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0192XS Pedestrian on skateboard injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, sequela -V0199XA Pedestrian with other conveyance injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, initial encounter -V0199XD Pedestrian with other conveyance injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0199XS Pedestrian with other conveyance injured in collision with pedal cycle, unspecified whether traffic or nontraffic accident, sequela -V0200XA Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V0200XD Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V0200XS Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V0201XA Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V0201XD Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V0201XS Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V0202XA Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V0202XD Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V0202XS Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V0209XA Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V0209XD Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V0209XS Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V0210XA Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V0210XD Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V0210XS Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V0211XA Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V0211XD Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V0211XS Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V0212XA Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V0212XD Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V0212XS Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V0219XA Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V0219XD Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V0219XS Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V0290XA Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0290XD Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0290XS Pedestrian on foot injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0291XA Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0291XD Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0291XS Pedestrian on roller-skates injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0292XA Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0292XD Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0292XS Pedestrian on skateboard injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0299XA Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0299XD Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0299XS Pedestrian with other conveyance injured in collision with two- or three-wheeled motor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0300XA Pedestrian on foot injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V0300XD Pedestrian on foot injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V0300XS Pedestrian on foot injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V0301XA Pedestrian on roller-skates injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V0301XD Pedestrian on roller-skates injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V0301XS Pedestrian on roller-skates injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V0302XA Pedestrian on skateboard injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V0302XD Pedestrian on skateboard injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V0302XS Pedestrian on skateboard injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V0309XA Pedestrian with other conveyance injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V0309XD Pedestrian with other conveyance injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V0309XS Pedestrian with other conveyance injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V0310XA Pedestrian on foot injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V0310XD Pedestrian on foot injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V0310XS Pedestrian on foot injured in collision with car, pick-up truck or van in traffic accident, sequela -V0311XA Pedestrian on roller-skates injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V0311XD Pedestrian on roller-skates injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V0311XS Pedestrian on roller-skates injured in collision with car, pick-up truck or van in traffic accident, sequela -V0312XA Pedestrian on skateboard injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V0312XD Pedestrian on skateboard injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V0312XS Pedestrian on skateboard injured in collision with car, pick-up truck or van in traffic accident, sequela -V0319XA Pedestrian with other conveyance injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V0319XD Pedestrian with other conveyance injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V0319XS Pedestrian with other conveyance injured in collision with car, pick-up truck or van in traffic accident, sequela -V0390XA Pedestrian on foot injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, initial encounter -V0390XD Pedestrian on foot injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, subsequent encounter -V0390XS Pedestrian on foot injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, sequela -V0391XA Pedestrian on roller-skates injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, initial encounter -V0391XD Pedestrian on roller-skates injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, subsequent encounter -V0391XS Pedestrian on roller-skates injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, sequela -V0392XA Pedestrian on skateboard injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, initial encounter -V0392XD Pedestrian on skateboard injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, subsequent encounter -V0392XS Pedestrian on skateboard injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, sequela -V0399XA Pedestrian with other conveyance injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, initial encounter -V0399XD Pedestrian with other conveyance injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, subsequent encounter -V0399XS Pedestrian with other conveyance injured in collision with car, pick-up truck or van, unspecified whether traffic or nontraffic accident, sequela -V0400XA Pedestrian on foot injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V0400XD Pedestrian on foot injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V0400XS Pedestrian on foot injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V0401XA Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V0401XD Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V0401XS Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V0402XA Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V0402XD Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V0402XS Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V0409XA Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V0409XD Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V0409XS Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V0410XA Pedestrian on foot injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V0410XD Pedestrian on foot injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V0410XS Pedestrian on foot injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V0411XA Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V0411XD Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V0411XS Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V0412XA Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V0412XD Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V0412XS Pedestrian on skateboard injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V0419XA Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V0419XD Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V0419XS Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V0490XA Pedestrian on foot injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, initial encounter -V0490XD Pedestrian on foot injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, subsequent encounter -V0490XS Pedestrian on foot injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, sequela -V0491XA Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, initial encounter -V0491XD Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, subsequent encounter -V0491XS Pedestrian on roller-skates injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, sequela -V0492XA Pedestrian on skateboard injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, initial encounter -V0492XD Pedestrian on skateboard injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, subsequent encounter -V0492XS Pedestrian on skateboard injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, sequela -V0499XA Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, initial encounter -V0499XD Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, subsequent encounter -V0499XS Pedestrian with other conveyance injured in collision with heavy transport vehicle or bus, unspecified whether traffic or nontraffic accident, sequela -V0500XA Pedestrian on foot injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V0500XD Pedestrian on foot injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V0500XS Pedestrian on foot injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V0501XA Pedestrian on roller-skates injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V0501XD Pedestrian on roller-skates injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V0501XS Pedestrian on roller-skates injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V0502XA Pedestrian on skateboard injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V0502XD Pedestrian on skateboard injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V0502XS Pedestrian on skateboard injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V0509XA Pedestrian with other conveyance injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V0509XD Pedestrian with other conveyance injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V0509XS Pedestrian with other conveyance injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V0510XA Pedestrian on foot injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V0510XD Pedestrian on foot injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V0510XS Pedestrian on foot injured in collision with railway train or railway vehicle in traffic accident, sequela -V0511XA Pedestrian on roller-skates injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V0511XD Pedestrian on roller-skates injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V0511XS Pedestrian on roller-skates injured in collision with railway train or railway vehicle in traffic accident, sequela -V0512XA Pedestrian on skateboard injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V0512XD Pedestrian on skateboard injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V0512XS Pedestrian on skateboard injured in collision with railway train or railway vehicle in traffic accident, sequela -V0519XA Pedestrian with other conveyance injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V0519XD Pedestrian with other conveyance injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V0519XS Pedestrian with other conveyance injured in collision with railway train or railway vehicle in traffic accident, sequela -V0590XA Pedestrian on foot injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0590XD Pedestrian on foot injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0590XS Pedestrian on foot injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, sequela -V0591XA Pedestrian on roller-skates injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0591XD Pedestrian on roller-skates injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0591XS Pedestrian on roller-skates injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, sequela -V0592XA Pedestrian on skateboard injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0592XD Pedestrian on skateboard injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0592XS Pedestrian on skateboard injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, sequela -V0599XA Pedestrian with other conveyance injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0599XD Pedestrian with other conveyance injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0599XS Pedestrian with other conveyance injured in collision with railway train or railway vehicle, unspecified whether traffic or nontraffic accident, sequela -V0600XA Pedestrian on foot injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V0600XD Pedestrian on foot injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V0600XS Pedestrian on foot injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V0601XA Pedestrian on roller-skates injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V0601XD Pedestrian on roller-skates injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V0601XS Pedestrian on roller-skates injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V0602XA Pedestrian on skateboard injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V0602XD Pedestrian on skateboard injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V0602XS Pedestrian on skateboard injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V0609XA Pedestrian with other conveyance injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V0609XD Pedestrian with other conveyance injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V0609XS Pedestrian with other conveyance injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V0610XA Pedestrian on foot injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V0610XD Pedestrian on foot injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V0610XS Pedestrian on foot injured in collision with other nonmotor vehicle in traffic accident, sequela -V0611XA Pedestrian on roller-skates injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V0611XD Pedestrian on roller-skates injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V0611XS Pedestrian on roller-skates injured in collision with other nonmotor vehicle in traffic accident, sequela -V0612XA Pedestrian on skateboard injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V0612XD Pedestrian on skateboard injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V0612XS Pedestrian on skateboard injured in collision with other nonmotor vehicle in traffic accident, sequela -V0619XA Pedestrian with other conveyance injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V0619XD Pedestrian with other conveyance injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V0619XS Pedestrian with other conveyance injured in collision with other nonmotor vehicle in traffic accident, sequela -V0690XA Pedestrian on foot injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0690XD Pedestrian on foot injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0690XS Pedestrian on foot injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0691XA Pedestrian on roller-skates injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0691XD Pedestrian on roller-skates injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0691XS Pedestrian on roller-skates injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0692XA Pedestrian on skateboard injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0692XD Pedestrian on skateboard injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0692XS Pedestrian on skateboard injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0699XA Pedestrian with other conveyance injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, initial encounter -V0699XD Pedestrian with other conveyance injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, subsequent encounter -V0699XS Pedestrian with other conveyance injured in collision with other nonmotor vehicle, unspecified whether traffic or nontraffic accident, sequela -V0900XA Pedestrian injured in nontraffic accident involving unspecified motor vehicles, initial encounter -V0900XD Pedestrian injured in nontraffic accident involving unspecified motor vehicles, subsequent encounter -V0900XS Pedestrian injured in nontraffic accident involving unspecified motor vehicles, sequela -V0901XA Pedestrian injured in nontraffic accident involving military vehicle, initial encounter -V0901XD Pedestrian injured in nontraffic accident involving military vehicle, subsequent encounter -V0901XS Pedestrian injured in nontraffic accident involving military vehicle, sequela -V0909XA Pedestrian injured in nontraffic accident involving other motor vehicles, initial encounter -V0909XD Pedestrian injured in nontraffic accident involving other motor vehicles, subsequent encounter -V0909XS Pedestrian injured in nontraffic accident involving other motor vehicles, sequela -V091XXA Pedestrian injured in unspecified nontraffic accident, initial encounter -V091XXD Pedestrian injured in unspecified nontraffic accident, subsequent encounter -V091XXS Pedestrian injured in unspecified nontraffic accident, sequela -V0920XA Pedestrian injured in traffic accident involving unspecified motor vehicles, initial encounter -V0920XD Pedestrian injured in traffic accident involving unspecified motor vehicles, subsequent encounter -V0920XS Pedestrian injured in traffic accident involving unspecified motor vehicles, sequela -V0921XA Pedestrian injured in traffic accident involving military vehicle, initial encounter -V0921XD Pedestrian injured in traffic accident involving military vehicle, subsequent encounter -V0921XS Pedestrian injured in traffic accident involving military vehicle, sequela -V0929XA Pedestrian injured in traffic accident involving other motor vehicles, initial encounter -V0929XD Pedestrian injured in traffic accident involving other motor vehicles, subsequent encounter -V0929XS Pedestrian injured in traffic accident involving other motor vehicles, sequela -V093XXA Pedestrian injured in unspecified traffic accident, initial encounter -V093XXD Pedestrian injured in unspecified traffic accident, subsequent encounter -V093XXS Pedestrian injured in unspecified traffic accident, sequela -V099XXA Pedestrian injured in unspecified transport accident, initial encounter -V099XXD Pedestrian injured in unspecified transport accident, subsequent encounter -V099XXS Pedestrian injured in unspecified transport accident, sequela -V100XXA Pedal cycle driver injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V100XXD Pedal cycle driver injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V100XXS Pedal cycle driver injured in collision with pedestrian or animal in nontraffic accident, sequela -V101XXA Pedal cycle passenger injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V101XXD Pedal cycle passenger injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V101XXS Pedal cycle passenger injured in collision with pedestrian or animal in nontraffic accident, sequela -V102XXA Unspecified pedal cyclist injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V102XXD Unspecified pedal cyclist injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V102XXS Unspecified pedal cyclist injured in collision with pedestrian or animal in nontraffic accident, sequela -V103XXA Person boarding or alighting a pedal cycle injured in collision with pedestrian or animal, initial encounter -V103XXD Person boarding or alighting a pedal cycle injured in collision with pedestrian or animal, subsequent encounter -V103XXS Person boarding or alighting a pedal cycle injured in collision with pedestrian or animal, sequela -V104XXA Pedal cycle driver injured in collision with pedestrian or animal in traffic accident, initial encounter -V104XXD Pedal cycle driver injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V104XXS Pedal cycle driver injured in collision with pedestrian or animal in traffic accident, sequela -V105XXA Pedal cycle passenger injured in collision with pedestrian or animal in traffic accident, initial encounter -V105XXD Pedal cycle passenger injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V105XXS Pedal cycle passenger injured in collision with pedestrian or animal in traffic accident, sequela -V109XXA Unspecified pedal cyclist injured in collision with pedestrian or animal in traffic accident, initial encounter -V109XXD Unspecified pedal cyclist injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V109XXS Unspecified pedal cyclist injured in collision with pedestrian or animal in traffic accident, sequela -V110XXA Pedal cycle driver injured in collision with other pedal cycle in nontraffic accident, initial encounter -V110XXD Pedal cycle driver injured in collision with other pedal cycle in nontraffic accident, subsequent encounter -V110XXS Pedal cycle driver injured in collision with other pedal cycle in nontraffic accident, sequela -V111XXA Pedal cycle passenger injured in collision with other pedal cycle in nontraffic accident, initial encounter -V111XXD Pedal cycle passenger injured in collision with other pedal cycle in nontraffic accident, subsequent encounter -V111XXS Pedal cycle passenger injured in collision with other pedal cycle in nontraffic accident, sequela -V112XXA Unspecified pedal cyclist injured in collision with other pedal cycle in nontraffic accident, initial encounter -V112XXD Unspecified pedal cyclist injured in collision with other pedal cycle in nontraffic accident, subsequent encounter -V112XXS Unspecified pedal cyclist injured in collision with other pedal cycle in nontraffic accident, sequela -V113XXA Person boarding or alighting a pedal cycle injured in collision with other pedal cycle, initial encounter -V113XXD Person boarding or alighting a pedal cycle injured in collision with other pedal cycle, subsequent encounter -V113XXS Person boarding or alighting a pedal cycle injured in collision with other pedal cycle, sequela -V114XXA Pedal cycle driver injured in collision with other pedal cycle in traffic accident, initial encounter -V114XXD Pedal cycle driver injured in collision with other pedal cycle in traffic accident, subsequent encounter -V114XXS Pedal cycle driver injured in collision with other pedal cycle in traffic accident, sequela -V115XXA Pedal cycle passenger injured in collision with other pedal cycle in traffic accident, initial encounter -V115XXD Pedal cycle passenger injured in collision with other pedal cycle in traffic accident, subsequent encounter -V115XXS Pedal cycle passenger injured in collision with other pedal cycle in traffic accident, sequela -V119XXA Unspecified pedal cyclist injured in collision with other pedal cycle in traffic accident, initial encounter -V119XXD Unspecified pedal cyclist injured in collision with other pedal cycle in traffic accident, subsequent encounter -V119XXS Unspecified pedal cyclist injured in collision with other pedal cycle in traffic accident, sequela -V120XXA Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V120XXD Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V120XXS Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V121XXA Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V121XXD Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V121XXS Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V122XXA Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V122XXD Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V122XXS Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V123XXA Person boarding or alighting a pedal cycle injured in collision with two- or three-wheeled motor vehicle, initial encounter -V123XXD Person boarding or alighting a pedal cycle injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V123XXS Person boarding or alighting a pedal cycle injured in collision with two- or three-wheeled motor vehicle, sequela -V124XXA Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V124XXD Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V124XXS Pedal cycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V125XXA Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V125XXD Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V125XXS Pedal cycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V129XXA Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V129XXD Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V129XXS Unspecified pedal cyclist injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V130XXA Pedal cycle driver injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V130XXD Pedal cycle driver injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V130XXS Pedal cycle driver injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V131XXA Pedal cycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V131XXD Pedal cycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V131XXS Pedal cycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V132XXA Unspecified pedal cyclist injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V132XXD Unspecified pedal cyclist injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V132XXS Unspecified pedal cyclist injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V133XXA Person boarding or alighting a pedal cycle injured in collision with car, pick-up truck or van, initial encounter -V133XXD Person boarding or alighting a pedal cycle injured in collision with car, pick-up truck or van, subsequent encounter -V133XXS Person boarding or alighting a pedal cycle injured in collision with car, pick-up truck or van, sequela -V134XXA Pedal cycle driver injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V134XXD Pedal cycle driver injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V134XXS Pedal cycle driver injured in collision with car, pick-up truck or van in traffic accident, sequela -V135XXA Pedal cycle passenger injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V135XXD Pedal cycle passenger injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V135XXS Pedal cycle passenger injured in collision with car, pick-up truck or van in traffic accident, sequela -V139XXA Unspecified pedal cyclist injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V139XXD Unspecified pedal cyclist injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V139XXS Unspecified pedal cyclist injured in collision with car, pick-up truck or van in traffic accident, sequela -V140XXA Pedal cycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V140XXD Pedal cycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V140XXS Pedal cycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V141XXA Pedal cycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V141XXD Pedal cycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V141XXS Pedal cycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V142XXA Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V142XXD Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V142XXS Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V143XXA Person boarding or alighting a pedal cycle injured in collision with heavy transport vehicle or bus, initial encounter -V143XXD Person boarding or alighting a pedal cycle injured in collision with heavy transport vehicle or bus, subsequent encounter -V143XXS Person boarding or alighting a pedal cycle injured in collision with heavy transport vehicle or bus, sequela -V144XXA Pedal cycle driver injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V144XXD Pedal cycle driver injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V144XXS Pedal cycle driver injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V145XXA Pedal cycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V145XXD Pedal cycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V145XXS Pedal cycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V149XXA Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V149XXD Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V149XXS Unspecified pedal cyclist injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V150XXA Pedal cycle driver injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V150XXD Pedal cycle driver injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V150XXS Pedal cycle driver injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V151XXA Pedal cycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V151XXD Pedal cycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V151XXS Pedal cycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V152XXA Unspecified pedal cyclist injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V152XXD Unspecified pedal cyclist injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V152XXS Unspecified pedal cyclist injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V153XXA Person boarding or alighting a pedal cycle injured in collision with railway train or railway vehicle, initial encounter -V153XXD Person boarding or alighting a pedal cycle injured in collision with railway train or railway vehicle, subsequent encounter -V153XXS Person boarding or alighting a pedal cycle injured in collision with railway train or railway vehicle, sequela -V154XXA Pedal cycle driver injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V154XXD Pedal cycle driver injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V154XXS Pedal cycle driver injured in collision with railway train or railway vehicle in traffic accident, sequela -V155XXA Pedal cycle passenger injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V155XXD Pedal cycle passenger injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V155XXS Pedal cycle passenger injured in collision with railway train or railway vehicle in traffic accident, sequela -V159XXA Unspecified pedal cyclist injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V159XXD Unspecified pedal cyclist injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V159XXS Unspecified pedal cyclist injured in collision with railway train or railway vehicle in traffic accident, sequela -V160XXA Pedal cycle driver injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V160XXD Pedal cycle driver injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V160XXS Pedal cycle driver injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V161XXA Pedal cycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V161XXD Pedal cycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V161XXS Pedal cycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V162XXA Unspecified pedal cyclist injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V162XXD Unspecified pedal cyclist injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V162XXS Unspecified pedal cyclist injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V163XXA Person boarding or alighting a pedal cycle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V163XXD Person boarding or alighting a pedal cycle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V163XXS Person boarding or alighting a pedal cycle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V164XXA Pedal cycle driver injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V164XXD Pedal cycle driver injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V164XXS Pedal cycle driver injured in collision with other nonmotor vehicle in traffic accident, sequela -V165XXA Pedal cycle passenger injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V165XXD Pedal cycle passenger injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V165XXS Pedal cycle passenger injured in collision with other nonmotor vehicle in traffic accident, sequela -V169XXA Unspecified pedal cyclist injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V169XXD Unspecified pedal cyclist injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V169XXS Unspecified pedal cyclist injured in collision with other nonmotor vehicle in traffic accident, sequela -V170XXA Pedal cycle driver injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V170XXD Pedal cycle driver injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V170XXS Pedal cycle driver injured in collision with fixed or stationary object in nontraffic accident, sequela -V171XXA Pedal cycle passenger injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V171XXD Pedal cycle passenger injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V171XXS Pedal cycle passenger injured in collision with fixed or stationary object in nontraffic accident, sequela -V172XXA Unspecified pedal cyclist injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V172XXD Unspecified pedal cyclist injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V172XXS Unspecified pedal cyclist injured in collision with fixed or stationary object in nontraffic accident, sequela -V173XXA Person boarding or alighting a pedal cycle injured in collision with fixed or stationary object, initial encounter -V173XXD Person boarding or alighting a pedal cycle injured in collision with fixed or stationary object, subsequent encounter -V173XXS Person boarding or alighting a pedal cycle injured in collision with fixed or stationary object, sequela -V174XXA Pedal cycle driver injured in collision with fixed or stationary object in traffic accident, initial encounter -V174XXD Pedal cycle driver injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V174XXS Pedal cycle driver injured in collision with fixed or stationary object in traffic accident, sequela -V175XXA Pedal cycle passenger injured in collision with fixed or stationary object in traffic accident, initial encounter -V175XXD Pedal cycle passenger injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V175XXS Pedal cycle passenger injured in collision with fixed or stationary object in traffic accident, sequela -V179XXA Unspecified pedal cyclist injured in collision with fixed or stationary object in traffic accident, initial encounter -V179XXD Unspecified pedal cyclist injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V179XXS Unspecified pedal cyclist injured in collision with fixed or stationary object in traffic accident, sequela -V180XXA Pedal cycle driver injured in noncollision transport accident in nontraffic accident, initial encounter -V180XXD Pedal cycle driver injured in noncollision transport accident in nontraffic accident, subsequent encounter -V180XXS Pedal cycle driver injured in noncollision transport accident in nontraffic accident, sequela -V181XXA Pedal cycle passenger injured in noncollision transport accident in nontraffic accident, initial encounter -V181XXD Pedal cycle passenger injured in noncollision transport accident in nontraffic accident, subsequent encounter -V181XXS Pedal cycle passenger injured in noncollision transport accident in nontraffic accident, sequela -V182XXA Unspecified pedal cyclist injured in noncollision transport accident in nontraffic accident, initial encounter -V182XXD Unspecified pedal cyclist injured in noncollision transport accident in nontraffic accident, subsequent encounter -V182XXS Unspecified pedal cyclist injured in noncollision transport accident in nontraffic accident, sequela -V183XXA Person boarding or alighting a pedal cycle injured in noncollision transport accident, initial encounter -V183XXD Person boarding or alighting a pedal cycle injured in noncollision transport accident, subsequent encounter -V183XXS Person boarding or alighting a pedal cycle injured in noncollision transport accident, sequela -V184XXA Pedal cycle driver injured in noncollision transport accident in traffic accident, initial encounter -V184XXD Pedal cycle driver injured in noncollision transport accident in traffic accident, subsequent encounter -V184XXS Pedal cycle driver injured in noncollision transport accident in traffic accident, sequela -V185XXA Pedal cycle passenger injured in noncollision transport accident in traffic accident, initial encounter -V185XXD Pedal cycle passenger injured in noncollision transport accident in traffic accident, subsequent encounter -V185XXS Pedal cycle passenger injured in noncollision transport accident in traffic accident, sequela -V189XXA Unspecified pedal cyclist injured in noncollision transport accident in traffic accident, initial encounter -V189XXD Unspecified pedal cyclist injured in noncollision transport accident in traffic accident, subsequent encounter -V189XXS Unspecified pedal cyclist injured in noncollision transport accident in traffic accident, sequela -V1900XA Pedal cycle driver injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V1900XD Pedal cycle driver injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V1900XS Pedal cycle driver injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V1909XA Pedal cycle driver injured in collision with other motor vehicles in nontraffic accident, initial encounter -V1909XD Pedal cycle driver injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V1909XS Pedal cycle driver injured in collision with other motor vehicles in nontraffic accident, sequela -V1910XA Pedal cycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V1910XD Pedal cycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V1910XS Pedal cycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V1919XA Pedal cycle passenger injured in collision with other motor vehicles in nontraffic accident, initial encounter -V1919XD Pedal cycle passenger injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V1919XS Pedal cycle passenger injured in collision with other motor vehicles in nontraffic accident, sequela -V1920XA Unspecified pedal cyclist injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V1920XD Unspecified pedal cyclist injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V1920XS Unspecified pedal cyclist injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V1929XA Unspecified pedal cyclist injured in collision with other motor vehicles in nontraffic accident, initial encounter -V1929XD Unspecified pedal cyclist injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V1929XS Unspecified pedal cyclist injured in collision with other motor vehicles in nontraffic accident, sequela -V193XXA Pedal cyclist (driver) (passenger) injured in unspecified nontraffic accident, initial encounter -V193XXD Pedal cyclist (driver) (passenger) injured in unspecified nontraffic accident, subsequent encounter -V193XXS Pedal cyclist (driver) (passenger) injured in unspecified nontraffic accident, sequela -V1940XA Pedal cycle driver injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V1940XD Pedal cycle driver injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V1940XS Pedal cycle driver injured in collision with unspecified motor vehicles in traffic accident, sequela -V1949XA Pedal cycle driver injured in collision with other motor vehicles in traffic accident, initial encounter -V1949XD Pedal cycle driver injured in collision with other motor vehicles in traffic accident, subsequent encounter -V1949XS Pedal cycle driver injured in collision with other motor vehicles in traffic accident, sequela -V1950XA Pedal cycle passenger injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V1950XD Pedal cycle passenger injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V1950XS Pedal cycle passenger injured in collision with unspecified motor vehicles in traffic accident, sequela -V1959XA Pedal cycle passenger injured in collision with other motor vehicles in traffic accident, initial encounter -V1959XD Pedal cycle passenger injured in collision with other motor vehicles in traffic accident, subsequent encounter -V1959XS Pedal cycle passenger injured in collision with other motor vehicles in traffic accident, sequela -V1960XA Unspecified pedal cyclist injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V1960XD Unspecified pedal cyclist injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V1960XS Unspecified pedal cyclist injured in collision with unspecified motor vehicles in traffic accident, sequela -V1969XA Unspecified pedal cyclist injured in collision with other motor vehicles in traffic accident, initial encounter -V1969XD Unspecified pedal cyclist injured in collision with other motor vehicles in traffic accident, subsequent encounter -V1969XS Unspecified pedal cyclist injured in collision with other motor vehicles in traffic accident, sequela -V1981XA Pedal cyclist (driver) (passenger) injured in transport accident with military vehicle, initial encounter -V1981XD Pedal cyclist (driver) (passenger) injured in transport accident with military vehicle, subsequent encounter -V1981XS Pedal cyclist (driver) (passenger) injured in transport accident with military vehicle, sequela -V1988XA Pedal cyclist (driver) (passenger) injured in other specified transport accidents, initial encounter -V1988XD Pedal cyclist (driver) (passenger) injured in other specified transport accidents, subsequent encounter -V1988XS Pedal cyclist (driver) (passenger) injured in other specified transport accidents, sequela -V199XXA Pedal cyclist (driver) (passenger) injured in unspecified traffic accident, initial encounter -V199XXD Pedal cyclist (driver) (passenger) injured in unspecified traffic accident, subsequent encounter -V199XXS Pedal cyclist (driver) (passenger) injured in unspecified traffic accident, sequela -V200XXA Motorcycle driver injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V200XXD Motorcycle driver injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V200XXS Motorcycle driver injured in collision with pedestrian or animal in nontraffic accident, sequela -V201XXA Motorcycle passenger injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V201XXD Motorcycle passenger injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V201XXS Motorcycle passenger injured in collision with pedestrian or animal in nontraffic accident, sequela -V202XXA Unspecified motorcycle rider injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V202XXD Unspecified motorcycle rider injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V202XXS Unspecified motorcycle rider injured in collision with pedestrian or animal in nontraffic accident, sequela -V203XXA Person boarding or alighting a motorcycle injured in collision with pedestrian or animal, initial encounter -V203XXD Person boarding or alighting a motorcycle injured in collision with pedestrian or animal, subsequent encounter -V203XXS Person boarding or alighting a motorcycle injured in collision with pedestrian or animal, sequela -V204XXA Motorcycle driver injured in collision with pedestrian or animal in traffic accident, initial encounter -V204XXD Motorcycle driver injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V204XXS Motorcycle driver injured in collision with pedestrian or animal in traffic accident, sequela -V205XXA Motorcycle passenger injured in collision with pedestrian or animal in traffic accident, initial encounter -V205XXD Motorcycle passenger injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V205XXS Motorcycle passenger injured in collision with pedestrian or animal in traffic accident, sequela -V209XXA Unspecified motorcycle rider injured in collision with pedestrian or animal in traffic accident, initial encounter -V209XXD Unspecified motorcycle rider injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V209XXS Unspecified motorcycle rider injured in collision with pedestrian or animal in traffic accident, sequela -V210XXA Motorcycle driver injured in collision with pedal cycle in nontraffic accident, initial encounter -V210XXD Motorcycle driver injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V210XXS Motorcycle driver injured in collision with pedal cycle in nontraffic accident, sequela -V211XXA Motorcycle passenger injured in collision with pedal cycle in nontraffic accident, initial encounter -V211XXD Motorcycle passenger injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V211XXS Motorcycle passenger injured in collision with pedal cycle in nontraffic accident, sequela -V212XXA Unspecified motorcycle rider injured in collision with pedal cycle in nontraffic accident, initial encounter -V212XXD Unspecified motorcycle rider injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V212XXS Unspecified motorcycle rider injured in collision with pedal cycle in nontraffic accident, sequela -V213XXA Person boarding or alighting a motorcycle injured in collision with pedal cycle, initial encounter -V213XXD Person boarding or alighting a motorcycle injured in collision with pedal cycle, subsequent encounter -V213XXS Person boarding or alighting a motorcycle injured in collision with pedal cycle, sequela -V214XXA Motorcycle driver injured in collision with pedal cycle in traffic accident, initial encounter -V214XXD Motorcycle driver injured in collision with pedal cycle in traffic accident, subsequent encounter -V214XXS Motorcycle driver injured in collision with pedal cycle in traffic accident, sequela -V215XXA Motorcycle passenger injured in collision with pedal cycle in traffic accident, initial encounter -V215XXD Motorcycle passenger injured in collision with pedal cycle in traffic accident, subsequent encounter -V215XXS Motorcycle passenger injured in collision with pedal cycle in traffic accident, sequela -V219XXA Unspecified motorcycle rider injured in collision with pedal cycle in traffic accident, initial encounter -V219XXD Unspecified motorcycle rider injured in collision with pedal cycle in traffic accident, subsequent encounter -V219XXS Unspecified motorcycle rider injured in collision with pedal cycle in traffic accident, sequela -V220XXA Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V220XXD Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V220XXS Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V221XXA Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V221XXD Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V221XXS Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V222XXA Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V222XXD Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V222XXS Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V223XXA Person boarding or alighting a motorcycle injured in collision with two- or three-wheeled motor vehicle, initial encounter -V223XXD Person boarding or alighting a motorcycle injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V223XXS Person boarding or alighting a motorcycle injured in collision with two- or three-wheeled motor vehicle, sequela -V224XXA Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V224XXD Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V224XXS Motorcycle driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V225XXA Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V225XXD Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V225XXS Motorcycle passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V229XXA Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V229XXD Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V229XXS Unspecified motorcycle rider injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V230XXA Motorcycle driver injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V230XXD Motorcycle driver injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V230XXS Motorcycle driver injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V231XXA Motorcycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V231XXD Motorcycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V231XXS Motorcycle passenger injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V232XXA Unspecified motorcycle rider injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V232XXD Unspecified motorcycle rider injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V232XXS Unspecified motorcycle rider injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V233XXA Person boarding or alighting a motorcycle injured in collision with car, pick-up truck or van, initial encounter -V233XXD Person boarding or alighting a motorcycle injured in collision with car, pick-up truck or van, subsequent encounter -V233XXS Person boarding or alighting a motorcycle injured in collision with car, pick-up truck or van, sequela -V234XXA Motorcycle driver injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V234XXD Motorcycle driver injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V234XXS Motorcycle driver injured in collision with car, pick-up truck or van in traffic accident, sequela -V235XXA Motorcycle passenger injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V235XXD Motorcycle passenger injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V235XXS Motorcycle passenger injured in collision with car, pick-up truck or van in traffic accident, sequela -V239XXA Unspecified motorcycle rider injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V239XXD Unspecified motorcycle rider injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V239XXS Unspecified motorcycle rider injured in collision with car, pick-up truck or van in traffic accident, sequela -V240XXA Motorcycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V240XXD Motorcycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V240XXS Motorcycle driver injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V241XXA Motorcycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V241XXD Motorcycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V241XXS Motorcycle passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V242XXA Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V242XXD Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V242XXS Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V243XXA Person boarding or alighting a motorcycle injured in collision with heavy transport vehicle or bus, initial encounter -V243XXD Person boarding or alighting a motorcycle injured in collision with heavy transport vehicle or bus, subsequent encounter -V243XXS Person boarding or alighting a motorcycle injured in collision with heavy transport vehicle or bus, sequela -V244XXA Motorcycle driver injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V244XXD Motorcycle driver injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V244XXS Motorcycle driver injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V245XXA Motorcycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V245XXD Motorcycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V245XXS Motorcycle passenger injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V249XXA Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V249XXD Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V249XXS Unspecified motorcycle rider injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V250XXA Motorcycle driver injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V250XXD Motorcycle driver injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V250XXS Motorcycle driver injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V251XXA Motorcycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V251XXD Motorcycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V251XXS Motorcycle passenger injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V252XXA Unspecified motorcycle rider injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V252XXD Unspecified motorcycle rider injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V252XXS Unspecified motorcycle rider injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V253XXA Person boarding or alighting a motorcycle injured in collision with railway train or railway vehicle, initial encounter -V253XXD Person boarding or alighting a motorcycle injured in collision with railway train or railway vehicle, subsequent encounter -V253XXS Person boarding or alighting a motorcycle injured in collision with railway train or railway vehicle, sequela -V254XXA Motorcycle driver injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V254XXD Motorcycle driver injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V254XXS Motorcycle driver injured in collision with railway train or railway vehicle in traffic accident, sequela -V255XXA Motorcycle passenger injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V255XXD Motorcycle passenger injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V255XXS Motorcycle passenger injured in collision with railway train or railway vehicle in traffic accident, sequela -V259XXA Unspecified motorcycle rider injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V259XXD Unspecified motorcycle rider injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V259XXS Unspecified motorcycle rider injured in collision with railway train or railway vehicle in traffic accident, sequela -V260XXA Motorcycle driver injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V260XXD Motorcycle driver injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V260XXS Motorcycle driver injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V261XXA Motorcycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V261XXD Motorcycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V261XXS Motorcycle passenger injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V262XXA Unspecified motorcycle rider injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V262XXD Unspecified motorcycle rider injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V262XXS Unspecified motorcycle rider injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V263XXA Person boarding or alighting a motorcycle injured in collision with other nonmotor vehicle, initial encounter -V263XXD Person boarding or alighting a motorcycle injured in collision with other nonmotor vehicle, subsequent encounter -V263XXS Person boarding or alighting a motorcycle injured in collision with other nonmotor vehicle, sequela -V264XXA Motorcycle driver injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V264XXD Motorcycle driver injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V264XXS Motorcycle driver injured in collision with other nonmotor vehicle in traffic accident, sequela -V265XXA Motorcycle passenger injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V265XXD Motorcycle passenger injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V265XXS Motorcycle passenger injured in collision with other nonmotor vehicle in traffic accident, sequela -V269XXA Unspecified motorcycle rider injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V269XXD Unspecified motorcycle rider injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V269XXS Unspecified motorcycle rider injured in collision with other nonmotor vehicle in traffic accident, sequela -V270XXA Motorcycle driver injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V270XXD Motorcycle driver injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V270XXS Motorcycle driver injured in collision with fixed or stationary object in nontraffic accident, sequela -V271XXA Motorcycle passenger injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V271XXD Motorcycle passenger injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V271XXS Motorcycle passenger injured in collision with fixed or stationary object in nontraffic accident, sequela -V272XXA Unspecified motorcycle rider injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V272XXD Unspecified motorcycle rider injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V272XXS Unspecified motorcycle rider injured in collision with fixed or stationary object in nontraffic accident, sequela -V273XXA Person boarding or alighting a motorcycle injured in collision with fixed or stationary object, initial encounter -V273XXD Person boarding or alighting a motorcycle injured in collision with fixed or stationary object, subsequent encounter -V273XXS Person boarding or alighting a motorcycle injured in collision with fixed or stationary object, sequela -V274XXA Motorcycle driver injured in collision with fixed or stationary object in traffic accident, initial encounter -V274XXD Motorcycle driver injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V274XXS Motorcycle driver injured in collision with fixed or stationary object in traffic accident, sequela -V275XXA Motorcycle passenger injured in collision with fixed or stationary object in traffic accident, initial encounter -V275XXD Motorcycle passenger injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V275XXS Motorcycle passenger injured in collision with fixed or stationary object in traffic accident, sequela -V279XXA Unspecified motorcycle rider injured in collision with fixed or stationary object in traffic accident, initial encounter -V279XXD Unspecified motorcycle rider injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V279XXS Unspecified motorcycle rider injured in collision with fixed or stationary object in traffic accident, sequela -V280XXA Motorcycle driver injured in noncollision transport accident in nontraffic accident, initial encounter -V280XXD Motorcycle driver injured in noncollision transport accident in nontraffic accident, subsequent encounter -V280XXS Motorcycle driver injured in noncollision transport accident in nontraffic accident, sequela -V281XXA Motorcycle passenger injured in noncollision transport accident in nontraffic accident, initial encounter -V281XXD Motorcycle passenger injured in noncollision transport accident in nontraffic accident, subsequent encounter -V281XXS Motorcycle passenger injured in noncollision transport accident in nontraffic accident, sequela -V282XXA Unspecified motorcycle rider injured in noncollision transport accident in nontraffic accident, initial encounter -V282XXD Unspecified motorcycle rider injured in noncollision transport accident in nontraffic accident, subsequent encounter -V282XXS Unspecified motorcycle rider injured in noncollision transport accident in nontraffic accident, sequela -V283XXA Person boarding or alighting a motorcycle injured in noncollision transport accident, initial encounter -V283XXD Person boarding or alighting a motorcycle injured in noncollision transport accident, subsequent encounter -V283XXS Person boarding or alighting a motorcycle injured in noncollision transport accident, sequela -V284XXA Motorcycle driver injured in noncollision transport accident in traffic accident, initial encounter -V284XXD Motorcycle driver injured in noncollision transport accident in traffic accident, subsequent encounter -V284XXS Motorcycle driver injured in noncollision transport accident in traffic accident, sequela -V285XXA Motorcycle passenger injured in noncollision transport accident in traffic accident, initial encounter -V285XXD Motorcycle passenger injured in noncollision transport accident in traffic accident, subsequent encounter -V285XXS Motorcycle passenger injured in noncollision transport accident in traffic accident, sequela -V289XXA Unspecified motorcycle rider injured in noncollision transport accident in traffic accident, initial encounter -V289XXD Unspecified motorcycle rider injured in noncollision transport accident in traffic accident, subsequent encounter -V289XXS Unspecified motorcycle rider injured in noncollision transport accident in traffic accident, sequela -V2900XA Motorcycle driver injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V2900XD Motorcycle driver injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V2900XS Motorcycle driver injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V2909XA Motorcycle driver injured in collision with other motor vehicles in nontraffic accident, initial encounter -V2909XD Motorcycle driver injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V2909XS Motorcycle driver injured in collision with other motor vehicles in nontraffic accident, sequela -V2910XA Motorcycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V2910XD Motorcycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V2910XS Motorcycle passenger injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V2919XA Motorcycle passenger injured in collision with other motor vehicles in nontraffic accident, initial encounter -V2919XD Motorcycle passenger injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V2919XS Motorcycle passenger injured in collision with other motor vehicles in nontraffic accident, sequela -V2920XA Unspecified motorcycle rider injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V2920XD Unspecified motorcycle rider injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V2920XS Unspecified motorcycle rider injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V2929XA Unspecified motorcycle rider injured in collision with other motor vehicles in nontraffic accident, initial encounter -V2929XD Unspecified motorcycle rider injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V2929XS Unspecified motorcycle rider injured in collision with other motor vehicles in nontraffic accident, sequela -V293XXA Motorcycle rider (driver) (passenger) injured in unspecified nontraffic accident, initial encounter -V293XXD Motorcycle rider (driver) (passenger) injured in unspecified nontraffic accident, subsequent encounter -V293XXS Motorcycle rider (driver) (passenger) injured in unspecified nontraffic accident, sequela -V2940XA Motorcycle driver injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V2940XD Motorcycle driver injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V2940XS Motorcycle driver injured in collision with unspecified motor vehicles in traffic accident, sequela -V2949XA Motorcycle driver injured in collision with other motor vehicles in traffic accident, initial encounter -V2949XD Motorcycle driver injured in collision with other motor vehicles in traffic accident, subsequent encounter -V2949XS Motorcycle driver injured in collision with other motor vehicles in traffic accident, sequela -V2950XA Motorcycle passenger injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V2950XD Motorcycle passenger injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V2950XS Motorcycle passenger injured in collision with unspecified motor vehicles in traffic accident, sequela -V2959XA Motorcycle passenger injured in collision with other motor vehicles in traffic accident, initial encounter -V2959XD Motorcycle passenger injured in collision with other motor vehicles in traffic accident, subsequent encounter -V2959XS Motorcycle passenger injured in collision with other motor vehicles in traffic accident, sequela -V2960XA Unspecified motorcycle rider injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V2960XD Unspecified motorcycle rider injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V2960XS Unspecified motorcycle rider injured in collision with unspecified motor vehicles in traffic accident, sequela -V2969XA Unspecified motorcycle rider injured in collision with other motor vehicles in traffic accident, initial encounter -V2969XD Unspecified motorcycle rider injured in collision with other motor vehicles in traffic accident, subsequent encounter -V2969XS Unspecified motorcycle rider injured in collision with other motor vehicles in traffic accident, sequela -V2981XA Motorcycle rider (driver) (passenger) injured in transport accident with military vehicle, initial encounter -V2981XD Motorcycle rider (driver) (passenger) injured in transport accident with military vehicle, subsequent encounter -V2981XS Motorcycle rider (driver) (passenger) injured in transport accident with military vehicle, sequela -V2988XA Motorcycle rider (driver) (passenger) injured in other specified transport accidents, initial encounter -V2988XD Motorcycle rider (driver) (passenger) injured in other specified transport accidents, subsequent encounter -V2988XS Motorcycle rider (driver) (passenger) injured in other specified transport accidents, sequela -V299XXA Motorcycle rider (driver) (passenger) injured in unspecified traffic accident, initial encounter -V299XXD Motorcycle rider (driver) (passenger) injured in unspecified traffic accident, subsequent encounter -V299XXS Motorcycle rider (driver) (passenger) injured in unspecified traffic accident, sequela -V300XXA Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V300XXD Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V300XXS Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V301XXA Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V301XXD Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V301XXS Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V302XXA Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V302XXD Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V302XXS Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V303XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V303XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V303XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V304XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedestrian or animal, initial encounter -V304XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedestrian or animal, subsequent encounter -V304XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedestrian or animal, sequela -V305XXA Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V305XXD Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V305XXS Driver of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V306XXA Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V306XXD Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V306XXS Passenger in three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V307XXA Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V307XXD Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V307XXS Person on outside of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V309XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V309XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V309XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V310XXA Driver of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V310XXD Driver of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V310XXS Driver of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V311XXA Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V311XXD Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V311XXS Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V312XXA Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V312XXD Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V312XXS Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V313XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V313XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V313XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V314XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedal cycle, initial encounter -V314XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedal cycle, subsequent encounter -V314XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with pedal cycle, sequela -V315XXA Driver of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V315XXD Driver of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V315XXS Driver of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, sequela -V316XXA Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V316XXD Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V316XXS Passenger in three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, sequela -V317XXA Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V317XXD Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V317XXS Person on outside of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, sequela -V319XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V319XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V319XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with pedal cycle in traffic accident, sequela -V320XXA Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V320XXD Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V320XXS Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V321XXA Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V321XXD Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V321XXS Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V322XXA Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V322XXD Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V322XXS Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V323XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V323XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V323XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V324XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle, initial encounter -V324XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V324XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle, sequela -V325XXA Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V325XXD Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V325XXS Driver of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V326XXA Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V326XXD Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V326XXS Passenger in three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V327XXA Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V327XXD Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V327XXS Person on outside of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V329XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V329XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V329XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V330XXA Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V330XXD Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V330XXS Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V331XXA Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V331XXD Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V331XXS Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V332XXA Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V332XXD Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V332XXS Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V333XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V333XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V333XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V334XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with car, pick-up truck or van, initial encounter -V334XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with car, pick-up truck or van, subsequent encounter -V334XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with car, pick-up truck or van, sequela -V335XXA Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V335XXD Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V335XXS Driver of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V336XXA Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V336XXD Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V336XXS Passenger in three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V337XXA Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V337XXD Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V337XXS Person on outside of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V339XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V339XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V339XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V340XXA Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V340XXD Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V340XXS Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V341XXA Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V341XXD Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V341XXS Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V342XXA Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V342XXD Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V342XXS Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V343XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V343XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V343XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V344XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus, initial encounter -V344XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus, subsequent encounter -V344XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus, sequela -V345XXA Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V345XXD Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V345XXS Driver of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V346XXA Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V346XXD Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V346XXS Passenger in three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V347XXA Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V347XXD Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V347XXS Person on outside of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V349XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V349XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V349XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V350XXA Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V350XXD Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V350XXS Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V351XXA Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V351XXD Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V351XXS Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V352XXA Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V352XXD Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V352XXS Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V353XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V353XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V353XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V354XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with railway train or railway vehicle, initial encounter -V354XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with railway train or railway vehicle, subsequent encounter -V354XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with railway train or railway vehicle, sequela -V355XXA Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V355XXD Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V355XXS Driver of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V356XXA Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V356XXD Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V356XXS Passenger in three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V357XXA Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V357XXD Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V357XXS Person on outside of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V359XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V359XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V359XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V360XXA Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V360XXD Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V360XXS Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V361XXA Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V361XXD Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V361XXS Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V362XXA Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V362XXD Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V362XXS Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V363XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V363XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V363XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V364XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with other nonmotor vehicle, initial encounter -V364XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with other nonmotor vehicle, subsequent encounter -V364XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with other nonmotor vehicle, sequela -V365XXA Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V365XXD Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V365XXS Driver of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V366XXA Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V366XXD Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V366XXS Passenger in three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V367XXA Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V367XXD Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V367XXS Person on outside of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V369XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V369XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V369XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V370XXA Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V370XXD Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V370XXS Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V371XXA Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V371XXD Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V371XXS Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V372XXA Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V372XXD Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V372XXS Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V373XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V373XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V373XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V374XXA Person boarding or alighting a three-wheeled motor vehicle injured in collision with fixed or stationary object, initial encounter -V374XXD Person boarding or alighting a three-wheeled motor vehicle injured in collision with fixed or stationary object, subsequent encounter -V374XXS Person boarding or alighting a three-wheeled motor vehicle injured in collision with fixed or stationary object, sequela -V375XXA Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V375XXD Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V375XXS Driver of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V376XXA Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V376XXD Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V376XXS Passenger in three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V377XXA Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V377XXD Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V377XXS Person on outside of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V379XXA Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V379XXD Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V379XXS Unspecified occupant of three-wheeled motor vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V380XXA Driver of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V380XXD Driver of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V380XXS Driver of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, sequela -V381XXA Passenger in three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V381XXD Passenger in three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V381XXS Passenger in three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, sequela -V382XXA Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V382XXD Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V382XXS Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, sequela -V383XXA Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V383XXD Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V383XXS Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in nontraffic accident, sequela -V384XXA Person boarding or alighting a three-wheeled motor vehicle injured in noncollision transport accident, initial encounter -V384XXD Person boarding or alighting a three-wheeled motor vehicle injured in noncollision transport accident, subsequent encounter -V384XXS Person boarding or alighting a three-wheeled motor vehicle injured in noncollision transport accident, sequela -V385XXA Driver of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, initial encounter -V385XXD Driver of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V385XXS Driver of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, sequela -V386XXA Passenger in three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, initial encounter -V386XXD Passenger in three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V386XXS Passenger in three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, sequela -V387XXA Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, initial encounter -V387XXD Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V387XXS Person on outside of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, sequela -V389XXA Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, initial encounter -V389XXD Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V389XXS Unspecified occupant of three-wheeled motor vehicle injured in noncollision transport accident in traffic accident, sequela -V3900XA Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V3900XD Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V3900XS Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V3909XA Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V3909XD Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V3909XS Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V3910XA Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V3910XD Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V3910XS Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V3919XA Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V3919XD Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V3919XS Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V3920XA Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V3920XD Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V3920XS Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V3929XA Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V3929XD Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V3929XS Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V393XXA Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified nontraffic accident, initial encounter -V393XXD Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified nontraffic accident, subsequent encounter -V393XXS Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified nontraffic accident, sequela -V3940XA Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V3940XD Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V3940XS Driver of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V3949XA Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V3949XD Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V3949XS Driver of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, sequela -V3950XA Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V3950XD Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V3950XS Passenger in three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V3959XA Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V3959XD Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V3959XS Passenger in three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, sequela -V3960XA Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V3960XD Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V3960XS Unspecified occupant of three-wheeled motor vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V3969XA Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V3969XD Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V3969XS Unspecified occupant of three-wheeled motor vehicle injured in collision with other motor vehicles in traffic accident, sequela -V3981XA Occupant (driver) (passenger) of three-wheeled motor vehicle injured in transport accident with military vehicle, initial encounter -V3981XD Occupant (driver) (passenger) of three-wheeled motor vehicle injured in transport accident with military vehicle, subsequent encounter -V3981XS Occupant (driver) (passenger) of three-wheeled motor vehicle injured in transport accident with military vehicle, sequela -V3989XA Occupant (driver) (passenger) of three-wheeled motor vehicle injured in other specified transport accidents, initial encounter -V3989XD Occupant (driver) (passenger) of three-wheeled motor vehicle injured in other specified transport accidents, subsequent encounter -V3989XS Occupant (driver) (passenger) of three-wheeled motor vehicle injured in other specified transport accidents, sequela -V399XXA Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified traffic accident, initial encounter -V399XXD Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified traffic accident, subsequent encounter -V399XXS Occupant (driver) (passenger) of three-wheeled motor vehicle injured in unspecified traffic accident, sequela -V400XXA Car driver injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V400XXD Car driver injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V400XXS Car driver injured in collision with pedestrian or animal in nontraffic accident, sequela -V401XXA Car passenger injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V401XXD Car passenger injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V401XXS Car passenger injured in collision with pedestrian or animal in nontraffic accident, sequela -V402XXA Person on outside of car injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V402XXD Person on outside of car injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V402XXS Person on outside of car injured in collision with pedestrian or animal in nontraffic accident, sequela -V403XXA Unspecified car occupant injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V403XXD Unspecified car occupant injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V403XXS Unspecified car occupant injured in collision with pedestrian or animal in nontraffic accident, sequela -V404XXA Person boarding or alighting a car injured in collision with pedestrian or animal, initial encounter -V404XXD Person boarding or alighting a car injured in collision with pedestrian or animal, subsequent encounter -V404XXS Person boarding or alighting a car injured in collision with pedestrian or animal, sequela -V405XXA Car driver injured in collision with pedestrian or animal in traffic accident, initial encounter -V405XXD Car driver injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V405XXS Car driver injured in collision with pedestrian or animal in traffic accident, sequela -V406XXA Car passenger injured in collision with pedestrian or animal in traffic accident, initial encounter -V406XXD Car passenger injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V406XXS Car passenger injured in collision with pedestrian or animal in traffic accident, sequela -V407XXA Person on outside of car injured in collision with pedestrian or animal in traffic accident, initial encounter -V407XXD Person on outside of car injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V407XXS Person on outside of car injured in collision with pedestrian or animal in traffic accident, sequela -V409XXA Unspecified car occupant injured in collision with pedestrian or animal in traffic accident, initial encounter -V409XXD Unspecified car occupant injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V409XXS Unspecified car occupant injured in collision with pedestrian or animal in traffic accident, sequela -V410XXA Car driver injured in collision with pedal cycle in nontraffic accident, initial encounter -V410XXD Car driver injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V410XXS Car driver injured in collision with pedal cycle in nontraffic accident, sequela -V411XXA Car passenger injured in collision with pedal cycle in nontraffic accident, initial encounter -V411XXD Car passenger injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V411XXS Car passenger injured in collision with pedal cycle in nontraffic accident, sequela -V412XXA Person on outside of car injured in collision with pedal cycle in nontraffic accident, initial encounter -V412XXD Person on outside of car injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V412XXS Person on outside of car injured in collision with pedal cycle in nontraffic accident, sequela -V413XXA Unspecified car occupant injured in collision with pedal cycle in nontraffic accident, initial encounter -V413XXD Unspecified car occupant injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V413XXS Unspecified car occupant injured in collision with pedal cycle in nontraffic accident, sequela -V414XXA Person boarding or alighting a car injured in collision with pedal cycle, initial encounter -V414XXD Person boarding or alighting a car injured in collision with pedal cycle, subsequent encounter -V414XXS Person boarding or alighting a car injured in collision with pedal cycle, sequela -V415XXA Car driver injured in collision with pedal cycle in traffic accident, initial encounter -V415XXD Car driver injured in collision with pedal cycle in traffic accident, subsequent encounter -V415XXS Car driver injured in collision with pedal cycle in traffic accident, sequela -V416XXA Car passenger injured in collision with pedal cycle in traffic accident, initial encounter -V416XXD Car passenger injured in collision with pedal cycle in traffic accident, subsequent encounter -V416XXS Car passenger injured in collision with pedal cycle in traffic accident, sequela -V417XXA Person on outside of car injured in collision with pedal cycle in traffic accident, initial encounter -V417XXD Person on outside of car injured in collision with pedal cycle in traffic accident, subsequent encounter -V417XXS Person on outside of car injured in collision with pedal cycle in traffic accident, sequela -V419XXA Unspecified car occupant injured in collision with pedal cycle in traffic accident, initial encounter -V419XXD Unspecified car occupant injured in collision with pedal cycle in traffic accident, subsequent encounter -V419XXS Unspecified car occupant injured in collision with pedal cycle in traffic accident, sequela -V420XXA Car driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V420XXD Car driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V420XXS Car driver injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V421XXA Car passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V421XXD Car passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V421XXS Car passenger injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V422XXA Person on outside of car injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V422XXD Person on outside of car injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V422XXS Person on outside of car injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V423XXA Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V423XXD Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V423XXS Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V424XXA Person boarding or alighting a car injured in collision with two- or three-wheeled motor vehicle, initial encounter -V424XXD Person boarding or alighting a car injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V424XXS Person boarding or alighting a car injured in collision with two- or three-wheeled motor vehicle, sequela -V425XXA Car driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V425XXD Car driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V425XXS Car driver injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V426XXA Car passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V426XXD Car passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V426XXS Car passenger injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V427XXA Person on outside of car injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V427XXD Person on outside of car injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V427XXS Person on outside of car injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V429XXA Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V429XXD Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V429XXS Unspecified car occupant injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V4301XA Car driver injured in collision with sport utility vehicle in nontraffic accident, initial encounter -V4301XD Car driver injured in collision with sport utility vehicle in nontraffic accident, subsequent encounter -V4301XS Car driver injured in collision with sport utility vehicle in nontraffic accident, sequela -V4302XA Car driver injured in collision with other type car in nontraffic accident, initial encounter -V4302XD Car driver injured in collision with other type car in nontraffic accident, subsequent encounter -V4302XS Car driver injured in collision with other type car in nontraffic accident, sequela -V4303XA Car driver injured in collision with pick-up truck in nontraffic accident, initial encounter -V4303XD Car driver injured in collision with pick-up truck in nontraffic accident, subsequent encounter -V4303XS Car driver injured in collision with pick-up truck in nontraffic accident, sequela -V4304XA Car driver injured in collision with van in nontraffic accident, initial encounter -V4304XD Car driver injured in collision with van in nontraffic accident, subsequent encounter -V4304XS Car driver injured in collision with van in nontraffic accident, sequela -V4311XA Car passenger injured in collision with sport utility vehicle in nontraffic accident, initial encounter -V4311XD Car passenger injured in collision with sport utility vehicle in nontraffic accident, subsequent encounter -V4311XS Car passenger injured in collision with sport utility vehicle in nontraffic accident, sequela -V4312XA Car passenger injured in collision with other type car in nontraffic accident, initial encounter -V4312XD Car passenger injured in collision with other type car in nontraffic accident, subsequent encounter -V4312XS Car passenger injured in collision with other type car in nontraffic accident, sequela -V4313XA Car passenger injured in collision with pick-up in nontraffic accident, initial encounter -V4313XD Car passenger injured in collision with pick-up in nontraffic accident, subsequent encounter -V4313XS Car passenger injured in collision with pick-up in nontraffic accident, sequela -V4314XA Car passenger injured in collision with van in nontraffic accident, initial encounter -V4314XD Car passenger injured in collision with van in nontraffic accident, subsequent encounter -V4314XS Car passenger injured in collision with van in nontraffic accident, sequela -V4321XA Person on outside of car injured in collision with sport utility vehicle in nontraffic accident, initial encounter -V4321XD Person on outside of car injured in collision with sport utility vehicle in nontraffic accident, subsequent encounter -V4321XS Person on outside of car injured in collision with sport utility vehicle in nontraffic accident, sequela -V4322XA Person on outside of car injured in collision with other type car in nontraffic accident, initial encounter -V4322XD Person on outside of car injured in collision with other type car in nontraffic accident, subsequent encounter -V4322XS Person on outside of car injured in collision with other type car in nontraffic accident, sequela -V4323XA Person on outside of car injured in collision with pick-up truck in nontraffic accident, initial encounter -V4323XD Person on outside of car injured in collision with pick-up truck in nontraffic accident, subsequent encounter -V4323XS Person on outside of car injured in collision with pick-up truck in nontraffic accident, sequela -V4324XA Person on outside of car injured in collision with van in nontraffic accident, initial encounter -V4324XD Person on outside of car injured in collision with van in nontraffic accident, subsequent encounter -V4324XS Person on outside of car injured in collision with van in nontraffic accident, sequela -V4331XA Unspecified car occupant injured in collision with sport utility vehicle in nontraffic accident, initial encounter -V4331XD Unspecified car occupant injured in collision with sport utility vehicle in nontraffic accident, subsequent encounter -V4331XS Unspecified car occupant injured in collision with sport utility vehicle in nontraffic accident, sequela -V4332XA Unspecified car occupant injured in collision with other type car in nontraffic accident, initial encounter -V4332XD Unspecified car occupant injured in collision with other type car in nontraffic accident, subsequent encounter -V4332XS Unspecified car occupant injured in collision with other type car in nontraffic accident, sequela -V4333XA Unspecified car occupant injured in collision with pick-up truck in nontraffic accident, initial encounter -V4333XD Unspecified car occupant injured in collision with pick-up truck in nontraffic accident, subsequent encounter -V4333XS Unspecified car occupant injured in collision with pick-up truck in nontraffic accident, sequela -V4334XA Unspecified car occupant injured in collision with van in nontraffic accident, initial encounter -V4334XD Unspecified car occupant injured in collision with van in nontraffic accident, subsequent encounter -V4334XS Unspecified car occupant injured in collision with van in nontraffic accident, sequela -V4341XA Person boarding or alighting a car injured in collision with sport utility vehicle, initial encounter -V4341XD Person boarding or alighting a car injured in collision with sport utility vehicle, subsequent encounter -V4341XS Person boarding or alighting a car injured in collision with sport utility vehicle, sequela -V4342XA Person boarding or alighting a car injured in collision with other type car, initial encounter -V4342XD Person boarding or alighting a car injured in collision with other type car, subsequent encounter -V4342XS Person boarding or alighting a car injured in collision with other type car, sequela -V4343XA Person boarding or alighting a car injured in collision with pick-up truck, initial encounter -V4343XD Person boarding or alighting a car injured in collision with pick-up truck, subsequent encounter -V4343XS Person boarding or alighting a car injured in collision with pick-up truck, sequela -V4344XA Person boarding or alighting a car injured in collision with van, initial encounter -V4344XD Person boarding or alighting a car injured in collision with van, subsequent encounter -V4344XS Person boarding or alighting a car injured in collision with van, sequela -V4351XA Car driver injured in collision with sport utility vehicle in traffic accident, initial encounter -V4351XD Car driver injured in collision with sport utility vehicle in traffic accident, subsequent encounter -V4351XS Car driver injured in collision with sport utility vehicle in traffic accident, sequela -V4352XA Car driver injured in collision with other type car in traffic accident, initial encounter -V4352XD Car driver injured in collision with other type car in traffic accident, subsequent encounter -V4352XS Car driver injured in collision with other type car in traffic accident, sequela -V4353XA Car driver injured in collision with pick-up truck in traffic accident, initial encounter -V4353XD Car driver injured in collision with pick-up truck in traffic accident, subsequent encounter -V4353XS Car driver injured in collision with pick-up truck in traffic accident, sequela -V4354XA Car driver injured in collision with van in traffic accident, initial encounter -V4354XD Car driver injured in collision with van in traffic accident, subsequent encounter -V4354XS Car driver injured in collision with van in traffic accident, sequela -V4361XA Car passenger injured in collision with sport utility vehicle in traffic accident, initial encounter -V4361XD Car passenger injured in collision with sport utility vehicle in traffic accident, subsequent encounter -V4361XS Car passenger injured in collision with sport utility vehicle in traffic accident, sequela -V4362XA Car passenger injured in collision with other type car in traffic accident, initial encounter -V4362XD Car passenger injured in collision with other type car in traffic accident, subsequent encounter -V4362XS Car passenger injured in collision with other type car in traffic accident, sequela -V4363XA Car passenger injured in collision with pick-up truck in traffic accident, initial encounter -V4363XD Car passenger injured in collision with pick-up truck in traffic accident, subsequent encounter -V4363XS Car passenger injured in collision with pick-up truck in traffic accident, sequela -V4364XA Car passenger injured in collision with van in traffic accident, initial encounter -V4364XD Car passenger injured in collision with van in traffic accident, subsequent encounter -V4364XS Car passenger injured in collision with van in traffic accident, sequela -V4371XA Person on outside of car injured in collision with sport utility vehicle in traffic accident, initial encounter -V4371XD Person on outside of car injured in collision with sport utility vehicle in traffic accident, subsequent encounter -V4371XS Person on outside of car injured in collision with sport utility vehicle in traffic accident, sequela -V4372XA Person on outside of car injured in collision with other type car in traffic accident, initial encounter -V4372XD Person on outside of car injured in collision with other type car in traffic accident, subsequent encounter -V4372XS Person on outside of car injured in collision with other type car in traffic accident, sequela -V4373XA Person on outside of car injured in collision with pick-up truck in traffic accident, initial encounter -V4373XD Person on outside of car injured in collision with pick-up truck in traffic accident, subsequent encounter -V4373XS Person on outside of car injured in collision with pick-up truck in traffic accident, sequela -V4374XA Person on outside of car injured in collision with van in traffic accident, initial encounter -V4374XD Person on outside of car injured in collision with van in traffic accident, subsequent encounter -V4374XS Person on outside of car injured in collision with van in traffic accident, sequela -V4391XA Unspecified car occupant injured in collision with sport utility vehicle in traffic accident, initial encounter -V4391XD Unspecified car occupant injured in collision with sport utility vehicle in traffic accident, subsequent encounter -V4391XS Unspecified car occupant injured in collision with sport utility vehicle in traffic accident, sequela -V4392XA Unspecified car occupant injured in collision with other type car in traffic accident, initial encounter -V4392XD Unspecified car occupant injured in collision with other type car in traffic accident, subsequent encounter -V4392XS Unspecified car occupant injured in collision with other type car in traffic accident, sequela -V4393XA Unspecified car occupant injured in collision with pick-up truck in traffic accident, initial encounter -V4393XD Unspecified car occupant injured in collision with pick-up truck in traffic accident, subsequent encounter -V4393XS Unspecified car occupant injured in collision with pick-up truck in traffic accident, sequela -V4394XA Unspecified car occupant injured in collision with van in traffic accident, initial encounter -V4394XD Unspecified car occupant injured in collision with van in traffic accident, subsequent encounter -V4394XS Unspecified car occupant injured in collision with van in traffic accident, sequela -V440XXA Car driver injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V440XXD Car driver injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V440XXS Car driver injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V441XXA Car passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V441XXD Car passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V441XXS Car passenger injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V442XXA Person on outside of car injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V442XXD Person on outside of car injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V442XXS Person on outside of car injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V443XXA Unspecified car occupant injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V443XXD Unspecified car occupant injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V443XXS Unspecified car occupant injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V444XXA Person boarding or alighting a car injured in collision with heavy transport vehicle or bus, initial encounter -V444XXD Person boarding or alighting a car injured in collision with heavy transport vehicle or bus, subsequent encounter -V444XXS Person boarding or alighting a car injured in collision with heavy transport vehicle or bus, sequela -V445XXA Car driver injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V445XXD Car driver injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V445XXS Car driver injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V446XXA Car passenger injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V446XXD Car passenger injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V446XXS Car passenger injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V447XXA Person on outside of car injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V447XXD Person on outside of car injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V447XXS Person on outside of car injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V449XXA Unspecified car occupant injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V449XXD Unspecified car occupant injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V449XXS Unspecified car occupant injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V450XXA Car driver injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V450XXD Car driver injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V450XXS Car driver injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V451XXA Car passenger injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V451XXD Car passenger injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V451XXS Car passenger injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V452XXA Person on outside of car injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V452XXD Person on outside of car injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V452XXS Person on outside of car injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V453XXA Unspecified car occupant injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V453XXD Unspecified car occupant injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V453XXS Unspecified car occupant injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V454XXA Person boarding or alighting a car injured in collision with railway train or railway vehicle, initial encounter -V454XXD Person boarding or alighting a car injured in collision with railway train or railway vehicle, subsequent encounter -V454XXS Person boarding or alighting a car injured in collision with railway train or railway vehicle, sequela -V455XXA Car driver injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V455XXD Car driver injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V455XXS Car driver injured in collision with railway train or railway vehicle in traffic accident, sequela -V456XXA Car passenger injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V456XXD Car passenger injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V456XXS Car passenger injured in collision with railway train or railway vehicle in traffic accident, sequela -V457XXA Person on outside of car injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V457XXD Person on outside of car injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V457XXS Person on outside of car injured in collision with railway train or railway vehicle in traffic accident, sequela -V459XXA Unspecified car occupant injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V459XXD Unspecified car occupant injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V459XXS Unspecified car occupant injured in collision with railway train or railway vehicle in traffic accident, sequela -V460XXA Car driver injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V460XXD Car driver injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V460XXS Car driver injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V461XXA Car passenger injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V461XXD Car passenger injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V461XXS Car passenger injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V462XXA Person on outside of car injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V462XXD Person on outside of car injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V462XXS Person on outside of car injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V463XXA Unspecified car occupant injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V463XXD Unspecified car occupant injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V463XXS Unspecified car occupant injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V464XXA Person boarding or alighting a car injured in collision with other nonmotor vehicle, initial encounter -V464XXD Person boarding or alighting a car injured in collision with other nonmotor vehicle, subsequent encounter -V464XXS Person boarding or alighting a car injured in collision with other nonmotor vehicle, sequela -V465XXA Car driver injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V465XXD Car driver injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V465XXS Car driver injured in collision with other nonmotor vehicle in traffic accident, sequela -V466XXA Car passenger injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V466XXD Car passenger injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V466XXS Car passenger injured in collision with other nonmotor vehicle in traffic accident, sequela -V467XXA Person on outside of car injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V467XXD Person on outside of car injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V467XXS Person on outside of car injured in collision with other nonmotor vehicle in traffic accident, sequela -V469XXA Unspecified car occupant injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V469XXD Unspecified car occupant injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V469XXS Unspecified car occupant injured in collision with other nonmotor vehicle in traffic accident, sequela -V470XXA Car driver injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V470XXD Car driver injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V470XXS Car driver injured in collision with fixed or stationary object in nontraffic accident, sequela -V471XXA Car passenger injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V471XXD Car passenger injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V471XXS Car passenger injured in collision with fixed or stationary object in nontraffic accident, sequela -V472XXA Person on outside of car injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V472XXD Person on outside of car injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V472XXS Person on outside of car injured in collision with fixed or stationary object in nontraffic accident, sequela -V473XXA Unspecified car occupant injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V473XXD Unspecified car occupant injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V473XXS Unspecified car occupant injured in collision with fixed or stationary object in nontraffic accident, sequela -V474XXA Person boarding or alighting a car injured in collision with fixed or stationary object, initial encounter -V474XXD Person boarding or alighting a car injured in collision with fixed or stationary object, subsequent encounter -V474XXS Person boarding or alighting a car injured in collision with fixed or stationary object, sequela -V475XXA Car driver injured in collision with fixed or stationary object in traffic accident, initial encounter -V475XXD Car driver injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V475XXS Car driver injured in collision with fixed or stationary object in traffic accident, sequela -V476XXA Car passenger injured in collision with fixed or stationary object in traffic accident, initial encounter -V476XXD Car passenger injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V476XXS Car passenger injured in collision with fixed or stationary object in traffic accident, sequela -V477XXA Person on outside of car injured in collision with fixed or stationary object in traffic accident, initial encounter -V477XXD Person on outside of car injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V477XXS Person on outside of car injured in collision with fixed or stationary object in traffic accident, sequela -V479XXA Unspecified car occupant injured in collision with fixed or stationary object in traffic accident, initial encounter -V479XXD Unspecified car occupant injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V479XXS Unspecified car occupant injured in collision with fixed or stationary object in traffic accident, sequela -V480XXA Car driver injured in noncollision transport accident in nontraffic accident, initial encounter -V480XXD Car driver injured in noncollision transport accident in nontraffic accident, subsequent encounter -V480XXS Car driver injured in noncollision transport accident in nontraffic accident, sequela -V481XXA Car passenger injured in noncollision transport accident in nontraffic accident, initial encounter -V481XXD Car passenger injured in noncollision transport accident in nontraffic accident, subsequent encounter -V481XXS Car passenger injured in noncollision transport accident in nontraffic accident, sequela -V482XXA Person on outside of car injured in noncollision transport accident in nontraffic accident, initial encounter -V482XXD Person on outside of car injured in noncollision transport accident in nontraffic accident, subsequent encounter -V482XXS Person on outside of car injured in noncollision transport accident in nontraffic accident, sequela -V483XXA Unspecified car occupant injured in noncollision transport accident in nontraffic accident, initial encounter -V483XXD Unspecified car occupant injured in noncollision transport accident in nontraffic accident, subsequent encounter -V483XXS Unspecified car occupant injured in noncollision transport accident in nontraffic accident, sequela -V484XXA Person boarding or alighting a car injured in noncollision transport accident, initial encounter -V484XXD Person boarding or alighting a car injured in noncollision transport accident, subsequent encounter -V484XXS Person boarding or alighting a car injured in noncollision transport accident, sequela -V485XXA Car driver injured in noncollision transport accident in traffic accident, initial encounter -V485XXD Car driver injured in noncollision transport accident in traffic accident, subsequent encounter -V485XXS Car driver injured in noncollision transport accident in traffic accident, sequela -V486XXA Car passenger injured in noncollision transport accident in traffic accident, initial encounter -V486XXD Car passenger injured in noncollision transport accident in traffic accident, subsequent encounter -V486XXS Car passenger injured in noncollision transport accident in traffic accident, sequela -V487XXA Person on outside of car injured in noncollision transport accident in traffic accident, initial encounter -V487XXD Person on outside of car injured in noncollision transport accident in traffic accident, subsequent encounter -V487XXS Person on outside of car injured in noncollision transport accident in traffic accident, sequela -V489XXA Unspecified car occupant injured in noncollision transport accident in traffic accident, initial encounter -V489XXD Unspecified car occupant injured in noncollision transport accident in traffic accident, subsequent encounter -V489XXS Unspecified car occupant injured in noncollision transport accident in traffic accident, sequela -V4900XA Driver injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V4900XD Driver injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V4900XS Driver injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V4909XA Driver injured in collision with other motor vehicles in nontraffic accident, initial encounter -V4909XD Driver injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V4909XS Driver injured in collision with other motor vehicles in nontraffic accident, sequela -V4910XA Passenger injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V4910XD Passenger injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V4910XS Passenger injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V4919XA Passenger injured in collision with other motor vehicles in nontraffic accident, initial encounter -V4919XD Passenger injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V4919XS Passenger injured in collision with other motor vehicles in nontraffic accident, sequela -V4920XA Unspecified car occupant injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V4920XD Unspecified car occupant injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V4920XS Unspecified car occupant injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V4929XA Unspecified car occupant injured in collision with other motor vehicles in nontraffic accident, initial encounter -V4929XD Unspecified car occupant injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V4929XS Unspecified car occupant injured in collision with other motor vehicles in nontraffic accident, sequela -V493XXA Car occupant (driver) (passenger) injured in unspecified nontraffic accident, initial encounter -V493XXD Car occupant (driver) (passenger) injured in unspecified nontraffic accident, subsequent encounter -V493XXS Car occupant (driver) (passenger) injured in unspecified nontraffic accident, sequela -V4940XA Driver injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V4940XD Driver injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V4940XS Driver injured in collision with unspecified motor vehicles in traffic accident, sequela -V4949XA Driver injured in collision with other motor vehicles in traffic accident, initial encounter -V4949XD Driver injured in collision with other motor vehicles in traffic accident, subsequent encounter -V4949XS Driver injured in collision with other motor vehicles in traffic accident, sequela -V4950XA Passenger injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V4950XD Passenger injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V4950XS Passenger injured in collision with unspecified motor vehicles in traffic accident, sequela -V4959XA Passenger injured in collision with other motor vehicles in traffic accident, initial encounter -V4959XD Passenger injured in collision with other motor vehicles in traffic accident, subsequent encounter -V4959XS Passenger injured in collision with other motor vehicles in traffic accident, sequela -V4960XA Unspecified car occupant injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V4960XD Unspecified car occupant injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V4960XS Unspecified car occupant injured in collision with unspecified motor vehicles in traffic accident, sequela -V4969XA Unspecified car occupant injured in collision with other motor vehicles in traffic accident, initial encounter -V4969XD Unspecified car occupant injured in collision with other motor vehicles in traffic accident, subsequent encounter -V4969XS Unspecified car occupant injured in collision with other motor vehicles in traffic accident, sequela -V4981XA Car occupant (driver) (passenger) injured in transport accident with military vehicle, initial encounter -V4981XD Car occupant (driver) (passenger) injured in transport accident with military vehicle, subsequent encounter -V4981XS Car occupant (driver) (passenger) injured in transport accident with military vehicle, sequela -V4988XA Car occupant (driver) (passenger) injured in other specified transport accidents, initial encounter -V4988XD Car occupant (driver) (passenger) injured in other specified transport accidents, subsequent encounter -V4988XS Car occupant (driver) (passenger) injured in other specified transport accidents, sequela -V499XXA Car occupant (driver) (passenger) injured in unspecified traffic accident, initial encounter -V499XXD Car occupant (driver) (passenger) injured in unspecified traffic accident, subsequent encounter -V499XXS Car occupant (driver) (passenger) injured in unspecified traffic accident, sequela -V500XXA Driver of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V500XXD Driver of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V500XXS Driver of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, sequela -V501XXA Passenger in pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V501XXD Passenger in pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V501XXS Passenger in pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, sequela -V502XXA Person on outside of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V502XXD Person on outside of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V502XXS Person on outside of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, sequela -V503XXA Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V503XXD Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V503XXS Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in nontraffic accident, sequela -V504XXA Person boarding or alighting a pick-up truck or van injured in collision with pedestrian or animal, initial encounter -V504XXD Person boarding or alighting a pick-up truck or van injured in collision with pedestrian or animal, subsequent encounter -V504XXS Person boarding or alighting a pick-up truck or van injured in collision with pedestrian or animal, sequela -V505XXA Driver of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, initial encounter -V505XXD Driver of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V505XXS Driver of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, sequela -V506XXA Passenger in pick-up truck or van injured in collision with pedestrian or animal in traffic accident, initial encounter -V506XXD Passenger in pick-up truck or van injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V506XXS Passenger in pick-up truck or van injured in collision with pedestrian or animal in traffic accident, sequela -V507XXA Person on outside of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, initial encounter -V507XXD Person on outside of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V507XXS Person on outside of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, sequela -V509XXA Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, initial encounter -V509XXD Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V509XXS Unspecified occupant of pick-up truck or van injured in collision with pedestrian or animal in traffic accident, sequela -V510XXA Driver of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, initial encounter -V510XXD Driver of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V510XXS Driver of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, sequela -V511XXA Passenger in pick-up truck or van injured in collision with pedal cycle in nontraffic accident, initial encounter -V511XXD Passenger in pick-up truck or van injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V511XXS Passenger in pick-up truck or van injured in collision with pedal cycle in nontraffic accident, sequela -V512XXA Person on outside of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, initial encounter -V512XXD Person on outside of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V512XXS Person on outside of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, sequela -V513XXA Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, initial encounter -V513XXD Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V513XXS Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in nontraffic accident, sequela -V514XXA Person boarding or alighting a pick-up truck or van injured in collision with pedal cycle, initial encounter -V514XXD Person boarding or alighting a pick-up truck or van injured in collision with pedal cycle, subsequent encounter -V514XXS Person boarding or alighting a pick-up truck or van injured in collision with pedal cycle, sequela -V515XXA Driver of pick-up truck or van injured in collision with pedal cycle in traffic accident, initial encounter -V515XXD Driver of pick-up truck or van injured in collision with pedal cycle in traffic accident, subsequent encounter -V515XXS Driver of pick-up truck or van injured in collision with pedal cycle in traffic accident, sequela -V516XXA Passenger in pick-up truck or van injured in collision with pedal cycle in traffic accident, initial encounter -V516XXD Passenger in pick-up truck or van injured in collision with pedal cycle in traffic accident, subsequent encounter -V516XXS Passenger in pick-up truck or van injured in collision with pedal cycle in traffic accident, sequela -V517XXA Person on outside of pick-up truck or van injured in collision with pedal cycle in traffic accident, initial encounter -V517XXD Person on outside of pick-up truck or van injured in collision with pedal cycle in traffic accident, subsequent encounter -V517XXS Person on outside of pick-up truck or van injured in collision with pedal cycle in traffic accident, sequela -V519XXA Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in traffic accident, initial encounter -V519XXD Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in traffic accident, subsequent encounter -V519XXS Unspecified occupant of pick-up truck or van injured in collision with pedal cycle in traffic accident, sequela -V520XXA Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V520XXD Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V520XXS Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V521XXA Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V521XXD Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V521XXS Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V522XXA Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V522XXD Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V522XXS Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V523XXA Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V523XXD Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V523XXS Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V524XXA Person boarding or alighting a pick-up truck or van injured in collision with two- or three-wheeled motor vehicle, initial encounter -V524XXD Person boarding or alighting a pick-up truck or van injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V524XXS Person boarding or alighting a pick-up truck or van injured in collision with two- or three-wheeled motor vehicle, sequela -V525XXA Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V525XXD Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V525XXS Driver of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V526XXA Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V526XXD Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V526XXS Passenger in pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V527XXA Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V527XXD Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V527XXS Person on outside of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V529XXA Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V529XXD Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V529XXS Unspecified occupant of pick-up truck or van injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V530XXA Driver of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V530XXD Driver of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V530XXS Driver of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V531XXA Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V531XXD Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V531XXS Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V532XXA Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V532XXD Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V532XXS Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V533XXA Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V533XXD Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V533XXS Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V534XXA Person boarding or alighting a pick-up truck or van injured in collision with car, pick-up truck or van, initial encounter -V534XXD Person boarding or alighting a pick-up truck or van injured in collision with car, pick-up truck or van, subsequent encounter -V534XXS Person boarding or alighting a pick-up truck or van injured in collision with car, pick-up truck or van, sequela -V535XXA Driver of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V535XXD Driver of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V535XXS Driver of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, sequela -V536XXA Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V536XXD Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V536XXS Passenger in pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, sequela -V537XXA Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V537XXD Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V537XXS Person on outside of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, sequela -V539XXA Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V539XXD Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V539XXS Unspecified occupant of pick-up truck or van injured in collision with car, pick-up truck or van in traffic accident, sequela -V540XXA Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V540XXD Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V540XXS Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V541XXA Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V541XXD Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V541XXS Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V542XXA Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V542XXD Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V542XXS Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V543XXA Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V543XXD Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V543XXS Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V544XXA Person boarding or alighting a pick-up truck or van injured in collision with heavy transport vehicle or bus, initial encounter -V544XXD Person boarding or alighting a pick-up truck or van injured in collision with heavy transport vehicle or bus, subsequent encounter -V544XXS Person boarding or alighting a pick-up truck or van injured in collision with heavy transport vehicle or bus, sequela -V545XXA Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V545XXD Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V545XXS Driver of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V546XXA Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V546XXD Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V546XXS Passenger in pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V547XXA Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V547XXD Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V547XXS Person on outside of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V549XXA Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V549XXD Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V549XXS Unspecified occupant of pick-up truck or van injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V550XXA Driver of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V550XXD Driver of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V550XXS Driver of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V551XXA Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V551XXD Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V551XXS Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V552XXA Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V552XXD Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V552XXS Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V553XXA Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V553XXD Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V553XXS Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V554XXA Person boarding or alighting a pick-up truck or van injured in collision with railway train or railway vehicle, initial encounter -V554XXD Person boarding or alighting a pick-up truck or van injured in collision with railway train or railway vehicle, subsequent encounter -V554XXS Person boarding or alighting a pick-up truck or van injured in collision with railway train or railway vehicle, sequela -V555XXA Driver of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V555XXD Driver of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V555XXS Driver of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, sequela -V556XXA Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V556XXD Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V556XXS Passenger in pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, sequela -V557XXA Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V557XXD Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V557XXS Person on outside of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, sequela -V559XXA Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V559XXD Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V559XXS Unspecified occupant of pick-up truck or van injured in collision with railway train or railway vehicle in traffic accident, sequela -V560XXA Driver of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V560XXD Driver of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V560XXS Driver of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V561XXA Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V561XXD Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V561XXS Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V562XXA Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V562XXD Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V562XXS Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V563XXA Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V563XXD Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V563XXS Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V564XXA Person boarding or alighting a pick-up truck or van injured in collision with other nonmotor vehicle, initial encounter -V564XXD Person boarding or alighting a pick-up truck or van injured in collision with other nonmotor vehicle, subsequent encounter -V564XXS Person boarding or alighting a pick-up truck or van injured in collision with other nonmotor vehicle, sequela -V565XXA Driver of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V565XXD Driver of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V565XXS Driver of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, sequela -V566XXA Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V566XXD Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V566XXS Passenger in pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, sequela -V567XXA Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V567XXD Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V567XXS Person on outside of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, sequela -V569XXA Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V569XXD Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V569XXS Unspecified occupant of pick-up truck or van injured in collision with other nonmotor vehicle in traffic accident, sequela -V570XXA Driver of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V570XXD Driver of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V570XXS Driver of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, sequela -V571XXA Passenger in pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V571XXD Passenger in pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V571XXS Passenger in pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, sequela -V572XXA Person on outside of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V572XXD Person on outside of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V572XXS Person on outside of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, sequela -V573XXA Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V573XXD Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V573XXS Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in nontraffic accident, sequela -V574XXA Person boarding or alighting a pick-up truck or van injured in collision with fixed or stationary object, initial encounter -V574XXD Person boarding or alighting a pick-up truck or van injured in collision with fixed or stationary object, subsequent encounter -V574XXS Person boarding or alighting a pick-up truck or van injured in collision with fixed or stationary object, sequela -V575XXA Driver of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, initial encounter -V575XXD Driver of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V575XXS Driver of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, sequela -V576XXA Passenger in pick-up truck or van injured in collision with fixed or stationary object in traffic accident, initial encounter -V576XXD Passenger in pick-up truck or van injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V576XXS Passenger in pick-up truck or van injured in collision with fixed or stationary object in traffic accident, sequela -V577XXA Person on outside of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, initial encounter -V577XXD Person on outside of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V577XXS Person on outside of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, sequela -V579XXA Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, initial encounter -V579XXD Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V579XXS Unspecified occupant of pick-up truck or van injured in collision with fixed or stationary object in traffic accident, sequela -V580XXA Driver of pick-up truck or van injured in noncollision transport accident in nontraffic accident, initial encounter -V580XXD Driver of pick-up truck or van injured in noncollision transport accident in nontraffic accident, subsequent encounter -V580XXS Driver of pick-up truck or van injured in noncollision transport accident in nontraffic accident, sequela -V581XXA Passenger in pick-up truck or van injured in noncollision transport accident in nontraffic accident, initial encounter -V581XXD Passenger in pick-up truck or van injured in noncollision transport accident in nontraffic accident, subsequent encounter -V581XXS Passenger in pick-up truck or van injured in noncollision transport accident in nontraffic accident, sequela -V582XXA Person on outside of pick-up truck or van injured in noncollision transport accident in nontraffic accident, initial encounter -V582XXD Person on outside of pick-up truck or van injured in noncollision transport accident in nontraffic accident, subsequent encounter -V582XXS Person on outside of pick-up truck or van injured in noncollision transport accident in nontraffic accident, sequela -V583XXA Unspecified occupant of pick-up truck or van injured in noncollision transport accident in nontraffic accident, initial encounter -V583XXD Unspecified occupant of pick-up truck or van injured in noncollision transport accident in nontraffic accident, subsequent encounter -V583XXS Unspecified occupant of pick-up truck or van injured in noncollision transport accident in nontraffic accident, sequela -V584XXA Person boarding or alighting a pick-up truck or van injured in noncollision transport accident, initial encounter -V584XXD Person boarding or alighting a pick-up truck or van injured in noncollision transport accident, subsequent encounter -V584XXS Person boarding or alighting a pick-up truck or van injured in noncollision transport accident, sequela -V585XXA Driver of pick-up truck or van injured in noncollision transport accident in traffic accident, initial encounter -V585XXD Driver of pick-up truck or van injured in noncollision transport accident in traffic accident, subsequent encounter -V585XXS Driver of pick-up truck or van injured in noncollision transport accident in traffic accident, sequela -V586XXA Passenger in pick-up truck or van injured in noncollision transport accident in traffic accident, initial encounter -V586XXD Passenger in pick-up truck or van injured in noncollision transport accident in traffic accident, subsequent encounter -V586XXS Passenger in pick-up truck or van injured in noncollision transport accident in traffic accident, sequela -V587XXA Person on outside of pick-up truck or van injured in noncollision transport accident in traffic accident, initial encounter -V587XXD Person on outside of pick-up truck or van injured in noncollision transport accident in traffic accident, subsequent encounter -V587XXS Person on outside of pick-up truck or van injured in noncollision transport accident in traffic accident, sequela -V589XXA Unspecified occupant of pick-up truck or van injured in noncollision transport accident in traffic accident, initial encounter -V589XXD Unspecified occupant of pick-up truck or van injured in noncollision transport accident in traffic accident, subsequent encounter -V589XXS Unspecified occupant of pick-up truck or van injured in noncollision transport accident in traffic accident, sequela -V5900XA Driver of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V5900XD Driver of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V5900XS Driver of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V5909XA Driver of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, initial encounter -V5909XD Driver of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V5909XS Driver of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, sequela -V5910XA Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V5910XD Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V5910XS Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V5919XA Passenger in pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, initial encounter -V5919XD Passenger in pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V5919XS Passenger in pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, sequela -V5920XA Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V5920XD Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V5920XS Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V5929XA Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, initial encounter -V5929XD Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V5929XS Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in nontraffic accident, sequela -V593XXA Occupant (driver) (passenger) of pick-up truck or van injured in unspecified nontraffic accident, initial encounter -V593XXD Occupant (driver) (passenger) of pick-up truck or van injured in unspecified nontraffic accident, subsequent encounter -V593XXS Occupant (driver) (passenger) of pick-up truck or van injured in unspecified nontraffic accident, sequela -V5940XA Driver of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V5940XD Driver of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V5940XS Driver of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, sequela -V5949XA Driver of pick-up truck or van injured in collision with other motor vehicles in traffic accident, initial encounter -V5949XD Driver of pick-up truck or van injured in collision with other motor vehicles in traffic accident, subsequent encounter -V5949XS Driver of pick-up truck or van injured in collision with other motor vehicles in traffic accident, sequela -V5950XA Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V5950XD Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V5950XS Passenger in pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, sequela -V5959XA Passenger in pick-up truck or van injured in collision with other motor vehicles in traffic accident, initial encounter -V5959XD Passenger in pick-up truck or van injured in collision with other motor vehicles in traffic accident, subsequent encounter -V5959XS Passenger in pick-up truck or van injured in collision with other motor vehicles in traffic accident, sequela -V5960XA Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V5960XD Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V5960XS Unspecified occupant of pick-up truck or van injured in collision with unspecified motor vehicles in traffic accident, sequela -V5969XA Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in traffic accident, initial encounter -V5969XD Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in traffic accident, subsequent encounter -V5969XS Unspecified occupant of pick-up truck or van injured in collision with other motor vehicles in traffic accident, sequela -V5981XA Occupant (driver) (passenger) of pick-up truck or van injured in transport accident with military vehicle, initial encounter -V5981XD Occupant (driver) (passenger) of pick-up truck or van injured in transport accident with military vehicle, subsequent encounter -V5981XS Occupant (driver) (passenger) of pick-up truck or van injured in transport accident with military vehicle, sequela -V5988XA Occupant (driver) (passenger) of pick-up truck or van injured in other specified transport accidents, initial encounter -V5988XD Occupant (driver) (passenger) of pick-up truck or van injured in other specified transport accidents, subsequent encounter -V5988XS Occupant (driver) (passenger) of pick-up truck or van injured in other specified transport accidents, sequela -V599XXA Occupant (driver) (passenger) of pick-up truck or van injured in unspecified traffic accident, initial encounter -V599XXD Occupant (driver) (passenger) of pick-up truck or van injured in unspecified traffic accident, subsequent encounter -V599XXS Occupant (driver) (passenger) of pick-up truck or van injured in unspecified traffic accident, sequela -V600XXA Driver of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V600XXD Driver of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V600XXS Driver of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V601XXA Passenger in heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V601XXD Passenger in heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V601XXS Passenger in heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V602XXA Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V602XXD Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V602XXS Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V603XXA Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V603XXD Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V603XXS Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in nontraffic accident, sequela -V604XXA Person boarding or alighting a heavy transport vehicle injured in collision with pedestrian or animal, initial encounter -V604XXD Person boarding or alighting a heavy transport vehicle injured in collision with pedestrian or animal, subsequent encounter -V604XXS Person boarding or alighting a heavy transport vehicle injured in collision with pedestrian or animal, sequela -V605XXA Driver of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V605XXD Driver of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V605XXS Driver of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V606XXA Passenger in heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V606XXD Passenger in heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V606XXS Passenger in heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V607XXA Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V607XXD Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V607XXS Person on outside of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V609XXA Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, initial encounter -V609XXD Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V609XXS Unspecified occupant of heavy transport vehicle injured in collision with pedestrian or animal in traffic accident, sequela -V610XXA Driver of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V610XXD Driver of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V610XXS Driver of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V611XXA Passenger in heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V611XXD Passenger in heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V611XXS Passenger in heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V612XXA Person on outside of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V612XXD Person on outside of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V612XXS Person on outside of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V613XXA Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, initial encounter -V613XXD Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V613XXS Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in nontraffic accident, sequela -V614XXA Person boarding or alighting a heavy transport vehicle injured in collision with pedal cycle while boarding or alighting, initial encounter -V614XXD Person boarding or alighting a heavy transport vehicle injured in collision with pedal cycle while boarding or alighting, subsequent encounter -V614XXS Person boarding or alighting a heavy transport vehicle injured in collision with pedal cycle while boarding or alighting, sequela -V615XXA Driver of heavy transport vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V615XXD Driver of heavy transport vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V615XXS Driver of heavy transport vehicle injured in collision with pedal cycle in traffic accident, sequela -V616XXA Passenger in heavy transport vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V616XXD Passenger in heavy transport vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V616XXS Passenger in heavy transport vehicle injured in collision with pedal cycle in traffic accident, sequela -V617XXA Person on outside of heavy transport vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V617XXD Person on outside of heavy transport vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V617XXS Person on outside of heavy transport vehicle injured in collision with pedal cycle in traffic accident, sequela -V619XXA Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in traffic accident, initial encounter -V619XXD Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in traffic accident, subsequent encounter -V619XXS Unspecified occupant of heavy transport vehicle injured in collision with pedal cycle in traffic accident, sequela -V620XXA Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V620XXD Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V620XXS Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V621XXA Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V621XXD Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V621XXS Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V622XXA Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V622XXD Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V622XXS Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V623XXA Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V623XXD Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V623XXS Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V624XXA Person boarding or alighting a heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle, initial encounter -V624XXD Person boarding or alighting a heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V624XXS Person boarding or alighting a heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle, sequela -V625XXA Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V625XXD Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V625XXS Driver of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V626XXA Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V626XXD Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V626XXS Passenger in heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V627XXA Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V627XXD Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V627XXS Person on outside of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V629XXA Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V629XXD Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V629XXS Unspecified occupant of heavy transport vehicle injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V630XXA Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V630XXD Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V630XXS Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V631XXA Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V631XXD Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V631XXS Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V632XXA Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V632XXD Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V632XXS Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V633XXA Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V633XXD Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V633XXS Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V634XXA Person boarding or alighting a heavy transport vehicle injured in collision with car, pick-up truck or van, initial encounter -V634XXD Person boarding or alighting a heavy transport vehicle injured in collision with car, pick-up truck or van, subsequent encounter -V634XXS Person boarding or alighting a heavy transport vehicle injured in collision with car, pick-up truck or van, sequela -V635XXA Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V635XXD Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V635XXS Driver of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V636XXA Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V636XXD Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V636XXS Passenger in heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V637XXA Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V637XXD Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V637XXS Person on outside of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V639XXA Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V639XXD Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V639XXS Unspecified occupant of heavy transport vehicle injured in collision with car, pick-up truck or van in traffic accident, sequela -V640XXA Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V640XXD Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V640XXS Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V641XXA Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V641XXD Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V641XXS Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V642XXA Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V642XXD Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V642XXS Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V643XXA Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V643XXD Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V643XXS Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V644XXA Person boarding or alighting a heavy transport vehicle injured in collision with heavy transport vehicle or bus while boarding or alighting, initial encounter -V644XXD Person boarding or alighting a heavy transport vehicle injured in collision with heavy transport vehicle or bus while boarding or alighting, subsequent encounter -V644XXS Person boarding or alighting a heavy transport vehicle injured in collision with heavy transport vehicle or bus while boarding or alighting, sequela -V645XXA Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V645XXD Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V645XXS Driver of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V646XXA Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V646XXD Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V646XXS Passenger in heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V647XXA Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V647XXD Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V647XXS Person on outside of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V649XXA Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V649XXD Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V649XXS Unspecified occupant of heavy transport vehicle injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V650XXA Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V650XXD Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V650XXS Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V651XXA Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V651XXD Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V651XXS Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V652XXA Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V652XXD Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V652XXS Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V653XXA Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V653XXD Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V653XXS Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V654XXA Person boarding or alighting a heavy transport vehicle injured in collision with railway train or railway vehicle, initial encounter -V654XXD Person boarding or alighting a heavy transport vehicle injured in collision with railway train or railway vehicle, subsequent encounter -V654XXS Person boarding or alighting a heavy transport vehicle injured in collision with railway train or railway vehicle, sequela -V655XXA Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V655XXD Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V655XXS Driver of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V656XXA Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V656XXD Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V656XXS Passenger in heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V657XXA Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V657XXD Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V657XXS Person on outside of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V659XXA Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V659XXD Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V659XXS Unspecified occupant of heavy transport vehicle injured in collision with railway train or railway vehicle in traffic accident, sequela -V660XXA Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V660XXD Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V660XXS Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V661XXA Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V661XXD Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V661XXS Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V662XXA Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V662XXD Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V662XXS Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V663XXA Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V663XXD Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V663XXS Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V664XXA Person boarding or alighting a heavy transport vehicle injured in collision with other nonmotor vehicle, initial encounter -V664XXD Person boarding or alighting a heavy transport vehicle injured in collision with other nonmotor vehicle, subsequent encounter -V664XXS Person boarding or alighting a heavy transport vehicle injured in collision with other nonmotor vehicle, sequela -V665XXA Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V665XXD Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V665XXS Driver of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V666XXA Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V666XXD Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V666XXS Passenger in heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V667XXA Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V667XXD Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V667XXS Person on outside of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V669XXA Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V669XXD Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V669XXS Unspecified occupant of heavy transport vehicle injured in collision with other nonmotor vehicle in traffic accident, sequela -V670XXA Driver of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V670XXD Driver of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V670XXS Driver of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V671XXA Passenger in heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V671XXD Passenger in heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V671XXS Passenger in heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V672XXA Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V672XXD Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V672XXS Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V673XXA Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V673XXD Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V673XXS Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in nontraffic accident, sequela -V674XXA Person boarding or alighting a heavy transport vehicle injured in collision with fixed or stationary object, initial encounter -V674XXD Person boarding or alighting a heavy transport vehicle injured in collision with fixed or stationary object, subsequent encounter -V674XXS Person boarding or alighting a heavy transport vehicle injured in collision with fixed or stationary object, sequela -V675XXA Driver of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V675XXD Driver of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V675XXS Driver of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V676XXA Passenger in heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V676XXD Passenger in heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V676XXS Passenger in heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V677XXA Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V677XXD Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V677XXS Person on outside of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V679XXA Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, initial encounter -V679XXD Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V679XXS Unspecified occupant of heavy transport vehicle injured in collision with fixed or stationary object in traffic accident, sequela -V680XXA Driver of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V680XXD Driver of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V680XXS Driver of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, sequela -V681XXA Passenger in heavy transport vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V681XXD Passenger in heavy transport vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V681XXS Passenger in heavy transport vehicle injured in noncollision transport accident in nontraffic accident, sequela -V682XXA Person on outside of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V682XXD Person on outside of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V682XXS Person on outside of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, sequela -V683XXA Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, initial encounter -V683XXD Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, subsequent encounter -V683XXS Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in nontraffic accident, sequela -V684XXA Person boarding or alighting a heavy transport vehicle injured in noncollision transport accident, initial encounter -V684XXD Person boarding or alighting a heavy transport vehicle injured in noncollision transport accident, subsequent encounter -V684XXS Person boarding or alighting a heavy transport vehicle injured in noncollision transport accident, sequela -V685XXA Driver of heavy transport vehicle injured in noncollision transport accident in traffic accident, initial encounter -V685XXD Driver of heavy transport vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V685XXS Driver of heavy transport vehicle injured in noncollision transport accident in traffic accident, sequela -V686XXA Passenger in heavy transport vehicle injured in noncollision transport accident in traffic accident, initial encounter -V686XXD Passenger in heavy transport vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V686XXS Passenger in heavy transport vehicle injured in noncollision transport accident in traffic accident, sequela -V687XXA Person on outside of heavy transport vehicle injured in noncollision transport accident in traffic accident, initial encounter -V687XXD Person on outside of heavy transport vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V687XXS Person on outside of heavy transport vehicle injured in noncollision transport accident in traffic accident, sequela -V689XXA Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in traffic accident, initial encounter -V689XXD Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in traffic accident, subsequent encounter -V689XXS Unspecified occupant of heavy transport vehicle injured in noncollision transport accident in traffic accident, sequela -V6900XA Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V6900XD Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V6900XS Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V6909XA Driver of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V6909XD Driver of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V6909XS Driver of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V6910XA Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V6910XD Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V6910XS Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V6919XA Passenger in heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V6919XD Passenger in heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V6919XS Passenger in heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V6920XA Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V6920XD Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V6920XS Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V6929XA Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, initial encounter -V6929XD Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V6929XS Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in nontraffic accident, sequela -V693XXA Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified nontraffic accident, initial encounter -V693XXD Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified nontraffic accident, subsequent encounter -V693XXS Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified nontraffic accident, sequela -V6940XA Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V6940XD Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V6940XS Driver of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V6949XA Driver of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V6949XD Driver of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V6949XS Driver of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, sequela -V6950XA Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V6950XD Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V6950XS Passenger in heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V6959XA Passenger in heavy transport vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V6959XD Passenger in heavy transport vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V6959XS Passenger in heavy transport vehicle injured in collision with other motor vehicles in traffic accident, sequela -V6960XA Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V6960XD Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V6960XS Unspecified occupant of heavy transport vehicle injured in collision with unspecified motor vehicles in traffic accident, sequela -V6969XA Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, initial encounter -V6969XD Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, subsequent encounter -V6969XS Unspecified occupant of heavy transport vehicle injured in collision with other motor vehicles in traffic accident, sequela -V6981XA Occupant (driver) (passenger) of heavy transport vehicle injured in transport accidents with military vehicle, initial encounter -V6981XD Occupant (driver) (passenger) of heavy transport vehicle injured in transport accidents with military vehicle, subsequent encounter -V6981XS Occupant (driver) (passenger) of heavy transport vehicle injured in transport accidents with military vehicle, sequela -V6988XA Occupant (driver) (passenger) of heavy transport vehicle injured in other specified transport accidents, initial encounter -V6988XD Occupant (driver) (passenger) of heavy transport vehicle injured in other specified transport accidents, subsequent encounter -V6988XS Occupant (driver) (passenger) of heavy transport vehicle injured in other specified transport accidents, sequela -V699XXA Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified traffic accident, initial encounter -V699XXD Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified traffic accident, subsequent encounter -V699XXS Occupant (driver) (passenger) of heavy transport vehicle injured in unspecified traffic accident, sequela -V700XXA Driver of bus injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V700XXD Driver of bus injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V700XXS Driver of bus injured in collision with pedestrian or animal in nontraffic accident, sequela -V701XXA Passenger on bus injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V701XXD Passenger on bus injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V701XXS Passenger on bus injured in collision with pedestrian or animal in nontraffic accident, sequela -V702XXA Person on outside of bus injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V702XXD Person on outside of bus injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V702XXS Person on outside of bus injured in collision with pedestrian or animal in nontraffic accident, sequela -V703XXA Unspecified occupant of bus injured in collision with pedestrian or animal in nontraffic accident, initial encounter -V703XXD Unspecified occupant of bus injured in collision with pedestrian or animal in nontraffic accident, subsequent encounter -V703XXS Unspecified occupant of bus injured in collision with pedestrian or animal in nontraffic accident, sequela -V704XXA Person boarding or alighting from bus injured in collision with pedestrian or animal, initial encounter -V704XXD Person boarding or alighting from bus injured in collision with pedestrian or animal, subsequent encounter -V704XXS Person boarding or alighting from bus injured in collision with pedestrian or animal, sequela -V705XXA Driver of bus injured in collision with pedestrian or animal in traffic accident, initial encounter -V705XXD Driver of bus injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V705XXS Driver of bus injured in collision with pedestrian or animal in traffic accident, sequela -V706XXA Passenger on bus injured in collision with pedestrian or animal in traffic accident, initial encounter -V706XXD Passenger on bus injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V706XXS Passenger on bus injured in collision with pedestrian or animal in traffic accident, sequela -V707XXA Person on outside of bus injured in collision with pedestrian or animal in traffic accident, initial encounter -V707XXD Person on outside of bus injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V707XXS Person on outside of bus injured in collision with pedestrian or animal in traffic accident, sequela -V709XXA Unspecified occupant of bus injured in collision with pedestrian or animal in traffic accident, initial encounter -V709XXD Unspecified occupant of bus injured in collision with pedestrian or animal in traffic accident, subsequent encounter -V709XXS Unspecified occupant of bus injured in collision with pedestrian or animal in traffic accident, sequela -V710XXA Driver of bus injured in collision with pedal cycle in nontraffic accident, initial encounter -V710XXD Driver of bus injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V710XXS Driver of bus injured in collision with pedal cycle in nontraffic accident, sequela -V711XXA Passenger on bus injured in collision with pedal cycle in nontraffic accident, initial encounter -V711XXD Passenger on bus injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V711XXS Passenger on bus injured in collision with pedal cycle in nontraffic accident, sequela -V712XXA Person on outside of bus injured in collision with pedal cycle in nontraffic accident, initial encounter -V712XXD Person on outside of bus injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V712XXS Person on outside of bus injured in collision with pedal cycle in nontraffic accident, sequela -V713XXA Unspecified occupant of bus injured in collision with pedal cycle in nontraffic accident, initial encounter -V713XXD Unspecified occupant of bus injured in collision with pedal cycle in nontraffic accident, subsequent encounter -V713XXS Unspecified occupant of bus injured in collision with pedal cycle in nontraffic accident, sequela -V714XXA Person boarding or alighting from bus injured in collision with pedal cycle, initial encounter -V714XXD Person boarding or alighting from bus injured in collision with pedal cycle, subsequent encounter -V714XXS Person boarding or alighting from bus injured in collision with pedal cycle, sequela -V715XXA Driver of bus injured in collision with pedal cycle in traffic accident, initial encounter -V715XXD Driver of bus injured in collision with pedal cycle in traffic accident, subsequent encounter -V715XXS Driver of bus injured in collision with pedal cycle in traffic accident, sequela -V716XXA Passenger on bus injured in collision with pedal cycle in traffic accident, initial encounter -V716XXD Passenger on bus injured in collision with pedal cycle in traffic accident, subsequent encounter -V716XXS Passenger on bus injured in collision with pedal cycle in traffic accident, sequela -V717XXA Person on outside of bus injured in collision with pedal cycle in traffic accident, initial encounter -V717XXD Person on outside of bus injured in collision with pedal cycle in traffic accident, subsequent encounter -V717XXS Person on outside of bus injured in collision with pedal cycle in traffic accident, sequela -V719XXA Unspecified occupant of bus injured in collision with pedal cycle in traffic accident, initial encounter -V719XXD Unspecified occupant of bus injured in collision with pedal cycle in traffic accident, subsequent encounter -V719XXS Unspecified occupant of bus injured in collision with pedal cycle in traffic accident, sequela -V720XXA Driver of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V720XXD Driver of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V720XXS Driver of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V721XXA Passenger on bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V721XXD Passenger on bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V721XXS Passenger on bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V722XXA Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V722XXD Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V722XXS Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V723XXA Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, initial encounter -V723XXD Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, subsequent encounter -V723XXS Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in nontraffic accident, sequela -V724XXA Person boarding or alighting from bus injured in collision with two- or three-wheeled motor vehicle, initial encounter -V724XXD Person boarding or alighting from bus injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V724XXS Person boarding or alighting from bus injured in collision with two- or three-wheeled motor vehicle, sequela -V725XXA Driver of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V725XXD Driver of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V725XXS Driver of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V726XXA Passenger on bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V726XXD Passenger on bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V726XXS Passenger on bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V727XXA Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V727XXD Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V727XXS Person on outside of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V729XXA Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, initial encounter -V729XXD Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, subsequent encounter -V729XXS Unspecified occupant of bus injured in collision with two- or three-wheeled motor vehicle in traffic accident, sequela -V730XXA Driver of bus injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V730XXD Driver of bus injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V730XXS Driver of bus injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V731XXA Passenger on bus injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V731XXD Passenger on bus injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V731XXS Passenger on bus injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V732XXA Person on outside of bus injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V732XXD Person on outside of bus injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V732XXS Person on outside of bus injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V733XXA Unspecified occupant of bus injured in collision with car, pick-up truck or van in nontraffic accident, initial encounter -V733XXD Unspecified occupant of bus injured in collision with car, pick-up truck or van in nontraffic accident, subsequent encounter -V733XXS Unspecified occupant of bus injured in collision with car, pick-up truck or van in nontraffic accident, sequela -V734XXA Person boarding or alighting from bus injured in collision with car, pick-up truck or van, initial encounter -V734XXD Person boarding or alighting from bus injured in collision with car, pick-up truck or van, subsequent encounter -V734XXS Person boarding or alighting from bus injured in collision with car, pick-up truck or van, sequela -V735XXA Driver of bus injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V735XXD Driver of bus injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V735XXS Driver of bus injured in collision with car, pick-up truck or van in traffic accident, sequela -V736XXA Passenger on bus injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V736XXD Passenger on bus injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V736XXS Passenger on bus injured in collision with car, pick-up truck or van in traffic accident, sequela -V737XXA Person on outside of bus injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V737XXD Person on outside of bus injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V737XXS Person on outside of bus injured in collision with car, pick-up truck or van in traffic accident, sequela -V739XXA Unspecified occupant of bus injured in collision with car, pick-up truck or van in traffic accident, initial encounter -V739XXD Unspecified occupant of bus injured in collision with car, pick-up truck or van in traffic accident, subsequent encounter -V739XXS Unspecified occupant of bus injured in collision with car, pick-up truck or van in traffic accident, sequela -V740XXA Driver of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V740XXD Driver of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V740XXS Driver of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V741XXA Passenger on bus injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V741XXD Passenger on bus injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V741XXS Passenger on bus injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V742XXA Person on outside of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V742XXD Person on outside of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V742XXS Person on outside of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V743XXA Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, initial encounter -V743XXD Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, subsequent encounter -V743XXS Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in nontraffic accident, sequela -V744XXA Person boarding or alighting from bus injured in collision with heavy transport vehicle or bus, initial encounter -V744XXD Person boarding or alighting from bus injured in collision with heavy transport vehicle or bus, subsequent encounter -V744XXS Person boarding or alighting from bus injured in collision with heavy transport vehicle or bus, sequela -V745XXA Driver of bus injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V745XXD Driver of bus injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V745XXS Driver of bus injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V746XXA Passenger on bus injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V746XXD Passenger on bus injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V746XXS Passenger on bus injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V747XXA Person on outside of bus injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V747XXD Person on outside of bus injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V747XXS Person on outside of bus injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V749XXA Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in traffic accident, initial encounter -V749XXD Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in traffic accident, subsequent encounter -V749XXS Unspecified occupant of bus injured in collision with heavy transport vehicle or bus in traffic accident, sequela -V750XXA Driver of bus injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V750XXD Driver of bus injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V750XXS Driver of bus injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V751XXA Passenger on bus injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V751XXD Passenger on bus injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V751XXS Passenger on bus injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V752XXA Person on outside of bus injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V752XXD Person on outside of bus injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V752XXS Person on outside of bus injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V753XXA Unspecified occupant of bus injured in collision with railway train or railway vehicle in nontraffic accident, initial encounter -V753XXD Unspecified occupant of bus injured in collision with railway train or railway vehicle in nontraffic accident, subsequent encounter -V753XXS Unspecified occupant of bus injured in collision with railway train or railway vehicle in nontraffic accident, sequela -V754XXA Person boarding or alighting from bus injured in collision with railway train or railway vehicle, initial encounter -V754XXD Person boarding or alighting from bus injured in collision with railway train or railway vehicle, subsequent encounter -V754XXS Person boarding or alighting from bus injured in collision with railway train or railway vehicle, sequela -V755XXA Driver of bus injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V755XXD Driver of bus injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V755XXS Driver of bus injured in collision with railway train or railway vehicle in traffic accident, sequela -V756XXA Passenger on bus injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V756XXD Passenger on bus injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V756XXS Passenger on bus injured in collision with railway train or railway vehicle in traffic accident, sequela -V757XXA Person on outside of bus injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V757XXD Person on outside of bus injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V757XXS Person on outside of bus injured in collision with railway train or railway vehicle in traffic accident, sequela -V759XXA Unspecified occupant of bus injured in collision with railway train or railway vehicle in traffic accident, initial encounter -V759XXD Unspecified occupant of bus injured in collision with railway train or railway vehicle in traffic accident, subsequent encounter -V759XXS Unspecified occupant of bus injured in collision with railway train or railway vehicle in traffic accident, sequela -V760XXA Driver of bus injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V760XXD Driver of bus injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V760XXS Driver of bus injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V761XXA Passenger on bus injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V761XXD Passenger on bus injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V761XXS Passenger on bus injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V762XXA Person on outside of bus injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V762XXD Person on outside of bus injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V762XXS Person on outside of bus injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V763XXA Unspecified occupant of bus injured in collision with other nonmotor vehicle in nontraffic accident, initial encounter -V763XXD Unspecified occupant of bus injured in collision with other nonmotor vehicle in nontraffic accident, subsequent encounter -V763XXS Unspecified occupant of bus injured in collision with other nonmotor vehicle in nontraffic accident, sequela -V764XXA Person boarding or alighting from bus injured in collision with other nonmotor vehicle, initial encounter -V764XXD Person boarding or alighting from bus injured in collision with other nonmotor vehicle, subsequent encounter -V764XXS Person boarding or alighting from bus injured in collision with other nonmotor vehicle, sequela -V765XXA Driver of bus injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V765XXD Driver of bus injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V765XXS Driver of bus injured in collision with other nonmotor vehicle in traffic accident, sequela -V766XXA Passenger on bus injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V766XXD Passenger on bus injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V766XXS Passenger on bus injured in collision with other nonmotor vehicle in traffic accident, sequela -V767XXA Person on outside of bus injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V767XXD Person on outside of bus injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V767XXS Person on outside of bus injured in collision with other nonmotor vehicle in traffic accident, sequela -V769XXA Unspecified occupant of bus injured in collision with other nonmotor vehicle in traffic accident, initial encounter -V769XXD Unspecified occupant of bus injured in collision with other nonmotor vehicle in traffic accident, subsequent encounter -V769XXS Unspecified occupant of bus injured in collision with other nonmotor vehicle in traffic accident, sequela -V770XXA Driver of bus injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V770XXD Driver of bus injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V770XXS Driver of bus injured in collision with fixed or stationary object in nontraffic accident, sequela -V771XXA Passenger on bus injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V771XXD Passenger on bus injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V771XXS Passenger on bus injured in collision with fixed or stationary object in nontraffic accident, sequela -V772XXA Person on outside of bus injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V772XXD Person on outside of bus injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V772XXS Person on outside of bus injured in collision with fixed or stationary object in nontraffic accident, sequela -V773XXA Unspecified occupant of bus injured in collision with fixed or stationary object in nontraffic accident, initial encounter -V773XXD Unspecified occupant of bus injured in collision with fixed or stationary object in nontraffic accident, subsequent encounter -V773XXS Unspecified occupant of bus injured in collision with fixed or stationary object in nontraffic accident, sequela -V774XXA Person boarding or alighting from bus injured in collision with fixed or stationary object, initial encounter -V774XXD Person boarding or alighting from bus injured in collision with fixed or stationary object, subsequent encounter -V774XXS Person boarding or alighting from bus injured in collision with fixed or stationary object, sequela -V775XXA Driver of bus injured in collision with fixed or stationary object in traffic accident, initial encounter -V775XXD Driver of bus injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V775XXS Driver of bus injured in collision with fixed or stationary object in traffic accident, sequela -V776XXA Passenger on bus injured in collision with fixed or stationary object in traffic accident, initial encounter -V776XXD Passenger on bus injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V776XXS Passenger on bus injured in collision with fixed or stationary object in traffic accident, sequela -V777XXA Person on outside of bus injured in collision with fixed or stationary object in traffic accident, initial encounter -V777XXD Person on outside of bus injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V777XXS Person on outside of bus injured in collision with fixed or stationary object in traffic accident, sequela -V779XXA Unspecified occupant of bus injured in collision with fixed or stationary object in traffic accident, initial encounter -V779XXD Unspecified occupant of bus injured in collision with fixed or stationary object in traffic accident, subsequent encounter -V779XXS Unspecified occupant of bus injured in collision with fixed or stationary object in traffic accident, sequela -V780XXA Driver of bus injured in noncollision transport accident in nontraffic accident, initial encounter -V780XXD Driver of bus injured in noncollision transport accident in nontraffic accident, subsequent encounter -V780XXS Driver of bus injured in noncollision transport accident in nontraffic accident, sequela -V781XXA Passenger on bus injured in noncollision transport accident in nontraffic accident, initial encounter -V781XXD Passenger on bus injured in noncollision transport accident in nontraffic accident, subsequent encounter -V781XXS Passenger on bus injured in noncollision transport accident in nontraffic accident, sequela -V782XXA Person on outside of bus injured in noncollision transport accident in nontraffic accident, initial encounter -V782XXD Person on outside of bus injured in noncollision transport accident in nontraffic accident, subsequent encounter -V782XXS Person on outside of bus injured in noncollision transport accident in nontraffic accident, sequela -V783XXA Unspecified occupant of bus injured in noncollision transport accident in nontraffic accident, initial encounter -V783XXD Unspecified occupant of bus injured in noncollision transport accident in nontraffic accident, subsequent encounter -V783XXS Unspecified occupant of bus injured in noncollision transport accident in nontraffic accident, sequela -V784XXA Person boarding or alighting from bus injured in noncollision transport accident, initial encounter -V784XXD Person boarding or alighting from bus injured in noncollision transport accident, subsequent encounter -V784XXS Person boarding or alighting from bus injured in noncollision transport accident, sequela -V785XXA Driver of bus injured in noncollision transport accident in traffic accident, initial encounter -V785XXD Driver of bus injured in noncollision transport accident in traffic accident, subsequent encounter -V785XXS Driver of bus injured in noncollision transport accident in traffic accident, sequela -V786XXA Passenger on bus injured in noncollision transport accident in traffic accident, initial encounter -V786XXD Passenger on bus injured in noncollision transport accident in traffic accident, subsequent encounter -V786XXS Passenger on bus injured in noncollision transport accident in traffic accident, sequela -V787XXA Person on outside of bus injured in noncollision transport accident in traffic accident, initial encounter -V787XXD Person on outside of bus injured in noncollision transport accident in traffic accident, subsequent encounter -V787XXS Person on outside of bus injured in noncollision transport accident in traffic accident, sequela -V789XXA Unspecified occupant of bus injured in noncollision transport accident in traffic accident, initial encounter -V789XXD Unspecified occupant of bus injured in noncollision transport accident in traffic accident, subsequent encounter -V789XXS Unspecified occupant of bus injured in noncollision transport accident in traffic accident, sequela -V7900XA Driver of bus injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V7900XD Driver of bus injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V7900XS Driver of bus injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V7909XA Driver of bus injured in collision with other motor vehicles in nontraffic accident, initial encounter -V7909XD Driver of bus injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V7909XS Driver of bus injured in collision with other motor vehicles in nontraffic accident, sequela -V7910XA Passenger on bus injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V7910XD Passenger on bus injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V7910XS Passenger on bus injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V7919XA Passenger on bus injured in collision with other motor vehicles in nontraffic accident, initial encounter -V7919XD Passenger on bus injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V7919XS Passenger on bus injured in collision with other motor vehicles in nontraffic accident, sequela -V7920XA Unspecified bus occupant injured in collision with unspecified motor vehicles in nontraffic accident, initial encounter -V7920XD Unspecified bus occupant injured in collision with unspecified motor vehicles in nontraffic accident, subsequent encounter -V7920XS Unspecified bus occupant injured in collision with unspecified motor vehicles in nontraffic accident, sequela -V7929XA Unspecified bus occupant injured in collision with other motor vehicles in nontraffic accident, initial encounter -V7929XD Unspecified bus occupant injured in collision with other motor vehicles in nontraffic accident, subsequent encounter -V7929XS Unspecified bus occupant injured in collision with other motor vehicles in nontraffic accident, sequela -V793XXA Bus occupant (driver) (passenger) injured in unspecified nontraffic accident, initial encounter -V793XXD Bus occupant (driver) (passenger) injured in unspecified nontraffic accident, subsequent encounter -V793XXS Bus occupant (driver) (passenger) injured in unspecified nontraffic accident, sequela -V7940XA Driver of bus injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V7940XD Driver of bus injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V7940XS Driver of bus injured in collision with unspecified motor vehicles in traffic accident, sequela -V7949XA Driver of bus injured in collision with other motor vehicles in traffic accident, initial encounter -V7949XD Driver of bus injured in collision with other motor vehicles in traffic accident, subsequent encounter -V7949XS Driver of bus injured in collision with other motor vehicles in traffic accident, sequela -V7950XA Passenger on bus injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V7950XD Passenger on bus injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V7950XS Passenger on bus injured in collision with unspecified motor vehicles in traffic accident, sequela -V7959XA Passenger on bus injured in collision with other motor vehicles in traffic accident, initial encounter -V7959XD Passenger on bus injured in collision with other motor vehicles in traffic accident, subsequent encounter -V7959XS Passenger on bus injured in collision with other motor vehicles in traffic accident, sequela -V7960XA Unspecified bus occupant injured in collision with unspecified motor vehicles in traffic accident, initial encounter -V7960XD Unspecified bus occupant injured in collision with unspecified motor vehicles in traffic accident, subsequent encounter -V7960XS Unspecified bus occupant injured in collision with unspecified motor vehicles in traffic accident, sequela -V7969XA Unspecified bus occupant injured in collision with other motor vehicles in traffic accident, initial encounter -V7969XD Unspecified bus occupant injured in collision with other motor vehicles in traffic accident, subsequent encounter -V7969XS Unspecified bus occupant injured in collision with other motor vehicles in traffic accident, sequela -V7981XA Bus occupant (driver) (passenger) injured in transport accidents with military vehicle, initial encounter -V7981XD Bus occupant (driver) (passenger) injured in transport accidents with military vehicle, subsequent encounter -V7981XS Bus occupant (driver) (passenger) injured in transport accidents with military vehicle, sequela -V7988XA Bus occupant (driver) (passenger) injured in other specified transport accidents, initial encounter -V7988XD Bus occupant (driver) (passenger) injured in other specified transport accidents, subsequent encounter -V7988XS Bus occupant (driver) (passenger) injured in other specified transport accidents, sequela -V799XXA Bus occupant (driver) (passenger) injured in unspecified traffic accident, initial encounter -V799XXD Bus occupant (driver) (passenger) injured in unspecified traffic accident, subsequent encounter -V799XXS Bus occupant (driver) (passenger) injured in unspecified traffic accident, sequela -V80010A Animal-rider injured by fall from or being thrown from horse in noncollision accident, initial encounter -V80010D Animal-rider injured by fall from or being thrown from horse in noncollision accident, subsequent encounter -V80010S Animal-rider injured by fall from or being thrown from horse in noncollision accident, sequela -V80018A Animal-rider injured by fall from or being thrown from other animal in noncollision accident, initial encounter -V80018D Animal-rider injured by fall from or being thrown from other animal in noncollision accident, subsequent encounter -V80018S Animal-rider injured by fall from or being thrown from other animal in noncollision accident, sequela -V8002XA Occupant of animal-drawn vehicle injured by fall from or being thrown from animal-drawn vehicle in noncollision accident, initial encounter -V8002XD Occupant of animal-drawn vehicle injured by fall from or being thrown from animal-drawn vehicle in noncollision accident, subsequent encounter -V8002XS Occupant of animal-drawn vehicle injured by fall from or being thrown from animal-drawn vehicle in noncollision accident, sequela -V8011XA Animal-rider injured in collision with pedestrian or animal, initial encounter -V8011XD Animal-rider injured in collision with pedestrian or animal, subsequent encounter -V8011XS Animal-rider injured in collision with pedestrian or animal, sequela -V8012XA Occupant of animal-drawn vehicle injured in collision with pedestrian or animal, initial encounter -V8012XD Occupant of animal-drawn vehicle injured in collision with pedestrian or animal, subsequent encounter -V8012XS Occupant of animal-drawn vehicle injured in collision with pedestrian or animal, sequela -V8021XA Animal-rider injured in collision with pedal cycle, initial encounter -V8021XD Animal-rider injured in collision with pedal cycle, subsequent encounter -V8021XS Animal-rider injured in collision with pedal cycle, sequela -V8022XA Occupant of animal-drawn vehicle injured in collision with pedal cycle, initial encounter -V8022XD Occupant of animal-drawn vehicle injured in collision with pedal cycle, subsequent encounter -V8022XS Occupant of animal-drawn vehicle injured in collision with pedal cycle, sequela -V8031XA Animal-rider injured in collision with two- or three-wheeled motor vehicle, initial encounter -V8031XD Animal-rider injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V8031XS Animal-rider injured in collision with two- or three-wheeled motor vehicle, sequela -V8032XA Occupant of animal-drawn vehicle injured in collision with two- or three-wheeled motor vehicle, initial encounter -V8032XD Occupant of animal-drawn vehicle injured in collision with two- or three-wheeled motor vehicle, subsequent encounter -V8032XS Occupant of animal-drawn vehicle injured in collision with two- or three-wheeled motor vehicle, sequela -V8041XA Animal-rider injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, initial encounter -V8041XD Animal-rider injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, subsequent encounter -V8041XS Animal-rider injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, sequela -V8042XA Occupant of animal-drawn vehicle injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, initial encounter -V8042XD Occupant of animal-drawn vehicle injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, subsequent encounter -V8042XS Occupant of animal-drawn vehicle injured in collision with car, pick-up truck, van, heavy transport vehicle or bus, sequela -V8051XA Animal-rider injured in collision with other specified motor vehicle, initial encounter -V8051XD Animal-rider injured in collision with other specified motor vehicle, subsequent encounter -V8051XS Animal-rider injured in collision with other specified motor vehicle, sequela -V8052XA Occupant of animal-drawn vehicle injured in collision with other specified motor vehicle, initial encounter -V8052XD Occupant of animal-drawn vehicle injured in collision with other specified motor vehicle, subsequent encounter -V8052XS Occupant of animal-drawn vehicle injured in collision with other specified motor vehicle, sequela -V8061XA Animal-rider injured in collision with railway train or railway vehicle, initial encounter -V8061XD Animal-rider injured in collision with railway train or railway vehicle, subsequent encounter -V8061XS Animal-rider injured in collision with railway train or railway vehicle, sequela -V8062XA Occupant of animal-drawn vehicle injured in collision with railway train or railway vehicle, initial encounter -V8062XD Occupant of animal-drawn vehicle injured in collision with railway train or railway vehicle, subsequent encounter -V8062XS Occupant of animal-drawn vehicle injured in collision with railway train or railway vehicle, sequela -V80710A Animal-rider injured in collision with other animal being ridden, initial encounter -V80710D Animal-rider injured in collision with other animal being ridden, subsequent encounter -V80710S Animal-rider injured in collision with other animal being ridden, sequela -V80711A Occupant of animal-drawn vehicle injured in collision with animal being ridden, initial encounter -V80711D Occupant of animal-drawn vehicle injured in collision with animal being ridden, subsequent encounter -V80711S Occupant of animal-drawn vehicle injured in collision with animal being ridden, sequela -V80720A Animal-rider injured in collision with animal-drawn vehicle, initial encounter -V80720D Animal-rider injured in collision with animal-drawn vehicle, subsequent encounter -V80720S Animal-rider injured in collision with animal-drawn vehicle, sequela -V80721A Occupant of animal-drawn vehicle injured in collision with other animal-drawn vehicle, initial encounter -V80721D Occupant of animal-drawn vehicle injured in collision with other animal-drawn vehicle, subsequent encounter -V80721S Occupant of animal-drawn vehicle injured in collision with other animal-drawn vehicle, sequela -V80730A Animal-rider injured in collision with streetcar, initial encounter -V80730D Animal-rider injured in collision with streetcar, subsequent encounter -V80730S Animal-rider injured in collision with streetcar, sequela -V80731A Occupant of animal-drawn vehicle injured in collision with streetcar, initial encounter -V80731D Occupant of animal-drawn vehicle injured in collision with streetcar, subsequent encounter -V80731S Occupant of animal-drawn vehicle injured in collision with streetcar, sequela -V80790A Animal-rider injured in collision with other nonmotor vehicles, initial encounter -V80790D Animal-rider injured in collision with other nonmotor vehicles, subsequent encounter -V80790S Animal-rider injured in collision with other nonmotor vehicles, sequela -V80791A Occupant of animal-drawn vehicle injured in collision with other nonmotor vehicles, initial encounter -V80791D Occupant of animal-drawn vehicle injured in collision with other nonmotor vehicles, subsequent encounter -V80791S Occupant of animal-drawn vehicle injured in collision with other nonmotor vehicles, sequela -V8081XA Animal-rider injured in collision with fixed or stationary object, initial encounter -V8081XD Animal-rider injured in collision with fixed or stationary object, subsequent encounter -V8081XS Animal-rider injured in collision with fixed or stationary object, sequela -V8082XA Occupant of animal-drawn vehicle injured in collision with fixed or stationary object, initial encounter -V8082XD Occupant of animal-drawn vehicle injured in collision with fixed or stationary object, subsequent encounter -V8082XS Occupant of animal-drawn vehicle injured in collision with fixed or stationary object, sequela -V80910A Animal-rider injured in transport accident with military vehicle, initial encounter -V80910D Animal-rider injured in transport accident with military vehicle, subsequent encounter -V80910S Animal-rider injured in transport accident with military vehicle, sequela -V80918A Animal-rider injured in other transport accident, initial encounter -V80918D Animal-rider injured in other transport accident, subsequent encounter -V80918S Animal-rider injured in other transport accident, sequela -V80919A Animal-rider injured in unspecified transport accident, initial encounter -V80919D Animal-rider injured in unspecified transport accident, subsequent encounter -V80919S Animal-rider injured in unspecified transport accident, sequela -V80920A Occupant of animal-drawn vehicle injured in transport accident with military vehicle, initial encounter -V80920D Occupant of animal-drawn vehicle injured in transport accident with military vehicle, subsequent encounter -V80920S Occupant of animal-drawn vehicle injured in transport accident with military vehicle, sequela -V80928A Occupant of animal-drawn vehicle injured in other transport accident, initial encounter -V80928D Occupant of animal-drawn vehicle injured in other transport accident, subsequent encounter -V80928S Occupant of animal-drawn vehicle injured in other transport accident, sequela -V80929A Occupant of animal-drawn vehicle injured in unspecified transport accident, initial encounter -V80929D Occupant of animal-drawn vehicle injured in unspecified transport accident, subsequent encounter -V80929S Occupant of animal-drawn vehicle injured in unspecified transport accident, sequela -V810XXA Occupant of railway train or railway vehicle injured in collision with motor vehicle in nontraffic accident, initial encounter -V810XXD Occupant of railway train or railway vehicle injured in collision with motor vehicle in nontraffic accident, subsequent encounter -V810XXS Occupant of railway train or railway vehicle injured in collision with motor vehicle in nontraffic accident, sequela -V811XXA Occupant of railway train or railway vehicle injured in collision with motor vehicle in traffic accident, initial encounter -V811XXD Occupant of railway train or railway vehicle injured in collision with motor vehicle in traffic accident, subsequent encounter -V811XXS Occupant of railway train or railway vehicle injured in collision with motor vehicle in traffic accident, sequela -V812XXA Occupant of railway train or railway vehicle injured in collision with or hit by rolling stock, initial encounter -V812XXD Occupant of railway train or railway vehicle injured in collision with or hit by rolling stock, subsequent encounter -V812XXS Occupant of railway train or railway vehicle injured in collision with or hit by rolling stock, sequela -V813XXA Occupant of railway train or railway vehicle injured in collision with other object, initial encounter -V813XXD Occupant of railway train or railway vehicle injured in collision with other object, subsequent encounter -V813XXS Occupant of railway train or railway vehicle injured in collision with other object, sequela -V814XXA Person injured while boarding or alighting from railway train or railway vehicle, initial encounter -V814XXD Person injured while boarding or alighting from railway train or railway vehicle, subsequent encounter -V814XXS Person injured while boarding or alighting from railway train or railway vehicle, sequela -V815XXA Occupant of railway train or railway vehicle injured by fall in railway train or railway vehicle, initial encounter -V815XXD Occupant of railway train or railway vehicle injured by fall in railway train or railway vehicle, subsequent encounter -V815XXS Occupant of railway train or railway vehicle injured by fall in railway train or railway vehicle, sequela -V816XXA Occupant of railway train or railway vehicle injured by fall from railway train or railway vehicle, initial encounter -V816XXD Occupant of railway train or railway vehicle injured by fall from railway train or railway vehicle, subsequent encounter -V816XXS Occupant of railway train or railway vehicle injured by fall from railway train or railway vehicle, sequela -V817XXA Occupant of railway train or railway vehicle injured in derailment without antecedent collision, initial encounter -V817XXD Occupant of railway train or railway vehicle injured in derailment without antecedent collision, subsequent encounter -V817XXS Occupant of railway train or railway vehicle injured in derailment without antecedent collision, sequela -V8181XA Occupant of railway train or railway vehicle injured due to explosion or fire on train, initial encounter -V8181XD Occupant of railway train or railway vehicle injured due to explosion or fire on train, subsequent encounter -V8181XS Occupant of railway train or railway vehicle injured due to explosion or fire on train, sequela -V8182XA Occupant of railway train or railway vehicle injured due to object falling onto train, initial encounter -V8182XD Occupant of railway train or railway vehicle injured due to object falling onto train, subsequent encounter -V8182XS Occupant of railway train or railway vehicle injured due to object falling onto train, sequela -V8183XA Occupant of railway train or railway vehicle injured due to collision with military vehicle, initial encounter -V8183XD Occupant of railway train or railway vehicle injured due to collision with military vehicle, subsequent encounter -V8183XS Occupant of railway train or railway vehicle injured due to collision with military vehicle, sequela -V8189XA Occupant of railway train or railway vehicle injured due to other specified railway accident, initial encounter -V8189XD Occupant of railway train or railway vehicle injured due to other specified railway accident, subsequent encounter -V8189XS Occupant of railway train or railway vehicle injured due to other specified railway accident, sequela -V819XXA Occupant of railway train or railway vehicle injured in unspecified railway accident, initial encounter -V819XXD Occupant of railway train or railway vehicle injured in unspecified railway accident, subsequent encounter -V819XXS Occupant of railway train or railway vehicle injured in unspecified railway accident, sequela -V820XXA Occupant of streetcar injured in collision with motor vehicle in nontraffic accident, initial encounter -V820XXD Occupant of streetcar injured in collision with motor vehicle in nontraffic accident, subsequent encounter -V820XXS Occupant of streetcar injured in collision with motor vehicle in nontraffic accident, sequela -V821XXA Occupant of streetcar injured in collision with motor vehicle in traffic accident, initial encounter -V821XXD Occupant of streetcar injured in collision with motor vehicle in traffic accident, subsequent encounter -V821XXS Occupant of streetcar injured in collision with motor vehicle in traffic accident, sequela -V822XXA Occupant of streetcar injured in collision with or hit by rolling stock, initial encounter -V822XXD Occupant of streetcar injured in collision with or hit by rolling stock, subsequent encounter -V822XXS Occupant of streetcar injured in collision with or hit by rolling stock, sequela -V823XXA Occupant of streetcar injured in collision with other object, initial encounter -V823XXD Occupant of streetcar injured in collision with other object, subsequent encounter -V823XXS Occupant of streetcar injured in collision with other object, sequela -V824XXA Person injured while boarding or alighting from streetcar, initial encounter -V824XXD Person injured while boarding or alighting from streetcar, subsequent encounter -V824XXS Person injured while boarding or alighting from streetcar, sequela -V825XXA Occupant of streetcar injured by fall in streetcar, initial encounter -V825XXD Occupant of streetcar injured by fall in streetcar, subsequent encounter -V825XXS Occupant of streetcar injured by fall in streetcar, sequela -V826XXA Occupant of streetcar injured by fall from streetcar, initial encounter -V826XXD Occupant of streetcar injured by fall from streetcar, subsequent encounter -V826XXS Occupant of streetcar injured by fall from streetcar, sequela -V827XXA Occupant of streetcar injured in derailment without antecedent collision, initial encounter -V827XXD Occupant of streetcar injured in derailment without antecedent collision, subsequent encounter -V827XXS Occupant of streetcar injured in derailment without antecedent collision, sequela -V828XXA Occupant of streetcar injured in other specified transport accidents, initial encounter -V828XXD Occupant of streetcar injured in other specified transport accidents, subsequent encounter -V828XXS Occupant of streetcar injured in other specified transport accidents, sequela -V829XXA Occupant of streetcar injured in unspecified traffic accident, initial encounter -V829XXD Occupant of streetcar injured in unspecified traffic accident, subsequent encounter -V829XXS Occupant of streetcar injured in unspecified traffic accident, sequela -V830XXA Driver of special industrial vehicle injured in traffic accident, initial encounter -V830XXD Driver of special industrial vehicle injured in traffic accident, subsequent encounter -V830XXS Driver of special industrial vehicle injured in traffic accident, sequela -V831XXA Passenger of special industrial vehicle injured in traffic accident, initial encounter -V831XXD Passenger of special industrial vehicle injured in traffic accident, subsequent encounter -V831XXS Passenger of special industrial vehicle injured in traffic accident, sequela -V832XXA Person on outside of special industrial vehicle injured in traffic accident, initial encounter -V832XXD Person on outside of special industrial vehicle injured in traffic accident, subsequent encounter -V832XXS Person on outside of special industrial vehicle injured in traffic accident, sequela -V833XXA Unspecified occupant of special industrial vehicle injured in traffic accident, initial encounter -V833XXD Unspecified occupant of special industrial vehicle injured in traffic accident, subsequent encounter -V833XXS Unspecified occupant of special industrial vehicle injured in traffic accident, sequela -V834XXA Person injured while boarding or alighting from special industrial vehicle, initial encounter -V834XXD Person injured while boarding or alighting from special industrial vehicle, subsequent encounter -V834XXS Person injured while boarding or alighting from special industrial vehicle, sequela -V835XXA Driver of special industrial vehicle injured in nontraffic accident, initial encounter -V835XXD Driver of special industrial vehicle injured in nontraffic accident, subsequent encounter -V835XXS Driver of special industrial vehicle injured in nontraffic accident, sequela -V836XXA Passenger of special industrial vehicle injured in nontraffic accident, initial encounter -V836XXD Passenger of special industrial vehicle injured in nontraffic accident, subsequent encounter -V836XXS Passenger of special industrial vehicle injured in nontraffic accident, sequela -V837XXA Person on outside of special industrial vehicle injured in nontraffic accident, initial encounter -V837XXD Person on outside of special industrial vehicle injured in nontraffic accident, subsequent encounter -V837XXS Person on outside of special industrial vehicle injured in nontraffic accident, sequela -V839XXA Unspecified occupant of special industrial vehicle injured in nontraffic accident, initial encounter -V839XXD Unspecified occupant of special industrial vehicle injured in nontraffic accident, subsequent encounter -V839XXS Unspecified occupant of special industrial vehicle injured in nontraffic accident, sequela -V840XXA Driver of special agricultural vehicle injured in traffic accident, initial encounter -V840XXD Driver of special agricultural vehicle injured in traffic accident, subsequent encounter -V840XXS Driver of special agricultural vehicle injured in traffic accident, sequela -V841XXA Passenger of special agricultural vehicle injured in traffic accident, initial encounter -V841XXD Passenger of special agricultural vehicle injured in traffic accident, subsequent encounter -V841XXS Passenger of special agricultural vehicle injured in traffic accident, sequela -V842XXA Person on outside of special agricultural vehicle injured in traffic accident, initial encounter -V842XXD Person on outside of special agricultural vehicle injured in traffic accident, subsequent encounter -V842XXS Person on outside of special agricultural vehicle injured in traffic accident, sequela -V843XXA Unspecified occupant of special agricultural vehicle injured in traffic accident, initial encounter -V843XXD Unspecified occupant of special agricultural vehicle injured in traffic accident, subsequent encounter -V843XXS Unspecified occupant of special agricultural vehicle injured in traffic accident, sequela -V844XXA Person injured while boarding or alighting from special agricultural vehicle, initial encounter -V844XXD Person injured while boarding or alighting from special agricultural vehicle, subsequent encounter -V844XXS Person injured while boarding or alighting from special agricultural vehicle, sequela -V845XXA Driver of special agricultural vehicle injured in nontraffic accident, initial encounter -V845XXD Driver of special agricultural vehicle injured in nontraffic accident, subsequent encounter -V845XXS Driver of special agricultural vehicle injured in nontraffic accident, sequela -V846XXA Passenger of special agricultural vehicle injured in nontraffic accident, initial encounter -V846XXD Passenger of special agricultural vehicle injured in nontraffic accident, subsequent encounter -V846XXS Passenger of special agricultural vehicle injured in nontraffic accident, sequela -V847XXA Person on outside of special agricultural vehicle injured in nontraffic accident, initial encounter -V847XXD Person on outside of special agricultural vehicle injured in nontraffic accident, subsequent encounter -V847XXS Person on outside of special agricultural vehicle injured in nontraffic accident, sequela -V849XXA Unspecified occupant of special agricultural vehicle injured in nontraffic accident, initial encounter -V849XXD Unspecified occupant of special agricultural vehicle injured in nontraffic accident, subsequent encounter -V849XXS Unspecified occupant of special agricultural vehicle injured in nontraffic accident, sequela -V850XXA Driver of special construction vehicle injured in traffic accident, initial encounter -V850XXD Driver of special construction vehicle injured in traffic accident, subsequent encounter -V850XXS Driver of special construction vehicle injured in traffic accident, sequela -V851XXA Passenger of special construction vehicle injured in traffic accident, initial encounter -V851XXD Passenger of special construction vehicle injured in traffic accident, subsequent encounter -V851XXS Passenger of special construction vehicle injured in traffic accident, sequela -V852XXA Person on outside of special construction vehicle injured in traffic accident, initial encounter -V852XXD Person on outside of special construction vehicle injured in traffic accident, subsequent encounter -V852XXS Person on outside of special construction vehicle injured in traffic accident, sequela -V853XXA Unspecified occupant of special construction vehicle injured in traffic accident, initial encounter -V853XXD Unspecified occupant of special construction vehicle injured in traffic accident, subsequent encounter -V853XXS Unspecified occupant of special construction vehicle injured in traffic accident, sequela -V854XXA Person injured while boarding or alighting from special construction vehicle, initial encounter -V854XXD Person injured while boarding or alighting from special construction vehicle, subsequent encounter -V854XXS Person injured while boarding or alighting from special construction vehicle, sequela -V855XXA Driver of special construction vehicle injured in nontraffic accident, initial encounter -V855XXD Driver of special construction vehicle injured in nontraffic accident, subsequent encounter -V855XXS Driver of special construction vehicle injured in nontraffic accident, sequela -V856XXA Passenger of special construction vehicle injured in nontraffic accident, initial encounter -V856XXD Passenger of special construction vehicle injured in nontraffic accident, subsequent encounter -V856XXS Passenger of special construction vehicle injured in nontraffic accident, sequela -V857XXA Person on outside of special construction vehicle injured in nontraffic accident, initial encounter -V857XXD Person on outside of special construction vehicle injured in nontraffic accident, subsequent encounter -V857XXS Person on outside of special construction vehicle injured in nontraffic accident, sequela -V859XXA Unspecified occupant of special construction vehicle injured in nontraffic accident, initial encounter -V859XXD Unspecified occupant of special construction vehicle injured in nontraffic accident, subsequent encounter -V859XXS Unspecified occupant of special construction vehicle injured in nontraffic accident, sequela -V8601XA Driver of ambulance or fire engine injured in traffic accident, initial encounter -V8601XD Driver of ambulance or fire engine injured in traffic accident, subsequent encounter -V8601XS Driver of ambulance or fire engine injured in traffic accident, sequela -V8602XA Driver of snowmobile injured in traffic accident, initial encounter -V8602XD Driver of snowmobile injured in traffic accident, subsequent encounter -V8602XS Driver of snowmobile injured in traffic accident, sequela -V8603XA Driver of dune buggy injured in traffic accident, initial encounter -V8603XD Driver of dune buggy injured in traffic accident, subsequent encounter -V8603XS Driver of dune buggy injured in traffic accident, sequela -V8604XA Driver of military vehicle injured in traffic accident, initial encounter -V8604XD Driver of military vehicle injured in traffic accident, subsequent encounter -V8604XS Driver of military vehicle injured in traffic accident, sequela -V8609XA Driver of other special all-terrain or other off-road motor vehicle injured in traffic accident, initial encounter -V8609XD Driver of other special all-terrain or other off-road motor vehicle injured in traffic accident, subsequent encounter -V8609XS Driver of other special all-terrain or other off-road motor vehicle injured in traffic accident, sequela -V8611XA Passenger of ambulance or fire engine injured in traffic accident, initial encounter -V8611XD Passenger of ambulance or fire engine injured in traffic accident, subsequent encounter -V8611XS Passenger of ambulance or fire engine injured in traffic accident, sequela -V8612XA Passenger of snowmobile injured in traffic accident, initial encounter -V8612XD Passenger of snowmobile injured in traffic accident, subsequent encounter -V8612XS Passenger of snowmobile injured in traffic accident, sequela -V8613XA Passenger of dune buggy injured in traffic accident, initial encounter -V8613XD Passenger of dune buggy injured in traffic accident, subsequent encounter -V8613XS Passenger of dune buggy injured in traffic accident, sequela -V8614XA Passenger of military vehicle injured in traffic accident, initial encounter -V8614XD Passenger of military vehicle injured in traffic accident, subsequent encounter -V8614XS Passenger of military vehicle injured in traffic accident, sequela -V8619XA Passenger of other special all-terrain or other off-road motor vehicle injured in traffic accident, initial encounter -V8619XD Passenger of other special all-terrain or other off-road motor vehicle injured in traffic accident, subsequent encounter -V8619XS Passenger of other special all-terrain or other off-road motor vehicle injured in traffic accident, sequela -V8621XA Person on outside of ambulance or fire engine injured in traffic accident, initial encounter -V8621XD Person on outside of ambulance or fire engine injured in traffic accident, subsequent encounter -V8621XS Person on outside of ambulance or fire engine injured in traffic accident, sequela -V8622XA Person on outside of snowmobile injured in traffic accident, initial encounter -V8622XD Person on outside of snowmobile injured in traffic accident, subsequent encounter -V8622XS Person on outside of snowmobile injured in traffic accident, sequela -V8623XA Person on outside of dune buggy injured in traffic accident, initial encounter -V8623XD Person on outside of dune buggy injured in traffic accident, subsequent encounter -V8623XS Person on outside of dune buggy injured in traffic accident, sequela -V8624XA Person on outside of military vehicle injured in traffic accident, initial encounter -V8624XD Person on outside of military vehicle injured in traffic accident, subsequent encounter -V8624XS Person on outside of military vehicle injured in traffic accident, sequela -V8629XA Person on outside of other special all-terrain or other off-road motor vehicle injured in traffic accident, initial encounter -V8629XD Person on outside of other special all-terrain or other off-road motor vehicle injured in traffic accident, subsequent encounter -V8629XS Person on outside of other special all-terrain or other off-road motor vehicle injured in traffic accident, sequela -V8631XA Unspecified occupant of ambulance or fire engine injured in traffic accident, initial encounter -V8631XD Unspecified occupant of ambulance or fire engine injured in traffic accident, subsequent encounter -V8631XS Unspecified occupant of ambulance or fire engine injured in traffic accident, sequela -V8632XA Unspecified occupant of snowmobile injured in traffic accident, initial encounter -V8632XD Unspecified occupant of snowmobile injured in traffic accident, subsequent encounter -V8632XS Unspecified occupant of snowmobile injured in traffic accident, sequela -V8633XA Unspecified occupant of dune buggy injured in traffic accident, initial encounter -V8633XD Unspecified occupant of dune buggy injured in traffic accident, subsequent encounter -V8633XS Unspecified occupant of dune buggy injured in traffic accident, sequela -V8634XA Unspecified occupant of military vehicle injured in traffic accident, initial encounter -V8634XD Unspecified occupant of military vehicle injured in traffic accident, subsequent encounter -V8634XS Unspecified occupant of military vehicle injured in traffic accident, sequela -V8639XA Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in traffic accident, initial encounter -V8639XD Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in traffic accident, subsequent encounter -V8639XS Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in traffic accident, sequela -V8641XA Person injured while boarding or alighting from ambulance or fire engine, initial encounter -V8641XD Person injured while boarding or alighting from ambulance or fire engine, subsequent encounter -V8641XS Person injured while boarding or alighting from ambulance or fire engine, sequela -V8642XA Person injured while boarding or alighting from snowmobile, initial encounter -V8642XD Person injured while boarding or alighting from snowmobile, subsequent encounter -V8642XS Person injured while boarding or alighting from snowmobile, sequela -V8643XA Person injured while boarding or alighting from dune buggy, initial encounter -V8643XD Person injured while boarding or alighting from dune buggy, subsequent encounter -V8643XS Person injured while boarding or alighting from dune buggy, sequela -V8644XA Person injured while boarding or alighting from military vehicle, initial encounter -V8644XD Person injured while boarding or alighting from military vehicle, subsequent encounter -V8644XS Person injured while boarding or alighting from military vehicle, sequela -V8649XA Person injured while boarding or alighting from other special all-terrain or other off-road motor vehicle, initial encounter -V8649XD Person injured while boarding or alighting from other special all-terrain or other off-road motor vehicle, subsequent encounter -V8649XS Person injured while boarding or alighting from other special all-terrain or other off-road motor vehicle, sequela -V8651XA Driver of ambulance or fire engine injured in nontraffic accident, initial encounter -V8651XD Driver of ambulance or fire engine injured in nontraffic accident, subsequent encounter -V8651XS Driver of ambulance or fire engine injured in nontraffic accident, sequela -V8652XA Driver of snowmobile injured in nontraffic accident, initial encounter -V8652XD Driver of snowmobile injured in nontraffic accident, subsequent encounter -V8652XS Driver of snowmobile injured in nontraffic accident, sequela -V8653XA Driver of dune buggy injured in nontraffic accident, initial encounter -V8653XD Driver of dune buggy injured in nontraffic accident, subsequent encounter -V8653XS Driver of dune buggy injured in nontraffic accident, sequela -V8654XA Driver of military vehicle injured in nontraffic accident, initial encounter -V8654XD Driver of military vehicle injured in nontraffic accident, subsequent encounter -V8654XS Driver of military vehicle injured in nontraffic accident, sequela -V8659XA Driver of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, initial encounter -V8659XD Driver of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, subsequent encounter -V8659XS Driver of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, sequela -V8661XA Passenger of ambulance or fire engine injured in nontraffic accident, initial encounter -V8661XD Passenger of ambulance or fire engine injured in nontraffic accident, subsequent encounter -V8661XS Passenger of ambulance or fire engine injured in nontraffic accident, sequela -V8662XA Passenger of snowmobile injured in nontraffic accident, initial encounter -V8662XD Passenger of snowmobile injured in nontraffic accident, subsequent encounter -V8662XS Passenger of snowmobile injured in nontraffic accident, sequela -V8663XA Passenger of dune buggy injured in nontraffic accident, initial encounter -V8663XD Passenger of dune buggy injured in nontraffic accident, subsequent encounter -V8663XS Passenger of dune buggy injured in nontraffic accident, sequela -V8664XA Passenger of military vehicle injured in nontraffic accident, initial encounter -V8664XD Passenger of military vehicle injured in nontraffic accident, subsequent encounter -V8664XS Passenger of military vehicle injured in nontraffic accident, sequela -V8669XA Passenger of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, initial encounter -V8669XD Passenger of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, subsequent encounter -V8669XS Passenger of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, sequela -V8671XA Person on outside of ambulance or fire engine injured in nontraffic accident, initial encounter -V8671XD Person on outside of ambulance or fire engine injured in nontraffic accident, subsequent encounter -V8671XS Person on outside of ambulance or fire engine injured in nontraffic accident, sequela -V8672XA Person on outside of snowmobile injured in nontraffic accident, initial encounter -V8672XD Person on outside of snowmobile injured in nontraffic accident, subsequent encounter -V8672XS Person on outside of snowmobile injured in nontraffic accident, sequela -V8673XA Person on outside of dune buggy injured in nontraffic accident, initial encounter -V8673XD Person on outside of dune buggy injured in nontraffic accident, subsequent encounter -V8673XS Person on outside of dune buggy injured in nontraffic accident, sequela -V8674XA Person on outside of military vehicle injured in nontraffic accident, initial encounter -V8674XD Person on outside of military vehicle injured in nontraffic accident, subsequent encounter -V8674XS Person on outside of military vehicle injured in nontraffic accident, sequela -V8679XA Person on outside of other special all-terrain or other off-road motor vehicles injured in nontraffic accident, initial encounter -V8679XD Person on outside of other special all-terrain or other off-road motor vehicles injured in nontraffic accident, subsequent encounter -V8679XS Person on outside of other special all-terrain or other off-road motor vehicles injured in nontraffic accident, sequela -V8691XA Unspecified occupant of ambulance or fire engine injured in nontraffic accident, initial encounter -V8691XD Unspecified occupant of ambulance or fire engine injured in nontraffic accident, subsequent encounter -V8691XS Unspecified occupant of ambulance or fire engine injured in nontraffic accident, sequela -V8692XA Unspecified occupant of snowmobile injured in nontraffic accident, initial encounter -V8692XD Unspecified occupant of snowmobile injured in nontraffic accident, subsequent encounter -V8692XS Unspecified occupant of snowmobile injured in nontraffic accident, sequela -V8693XA Unspecified occupant of dune buggy injured in nontraffic accident, initial encounter -V8693XD Unspecified occupant of dune buggy injured in nontraffic accident, subsequent encounter -V8693XS Unspecified occupant of dune buggy injured in nontraffic accident, sequela -V8694XA Unspecified occupant of military vehicle injured in nontraffic accident, initial encounter -V8694XD Unspecified occupant of military vehicle injured in nontraffic accident, subsequent encounter -V8694XS Unspecified occupant of military vehicle injured in nontraffic accident, sequela -V8699XA Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, initial encounter -V8699XD Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, subsequent encounter -V8699XS Unspecified occupant of other special all-terrain or other off-road motor vehicle injured in nontraffic accident, sequela -V870XXA Person injured in collision between car and two- or three-wheeled powered vehicle (traffic), initial encounter -V870XXD Person injured in collision between car and two- or three-wheeled powered vehicle (traffic), subsequent encounter -V870XXS Person injured in collision between car and two- or three-wheeled powered vehicle (traffic), sequela -V871XXA Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle (traffic), initial encounter -V871XXD Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle (traffic), subsequent encounter -V871XXS Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle (traffic), sequela -V872XXA Person injured in collision between car and pick-up truck or van (traffic), initial encounter -V872XXD Person injured in collision between car and pick-up truck or van (traffic), subsequent encounter -V872XXS Person injured in collision between car and pick-up truck or van (traffic), sequela -V873XXA Person injured in collision between car and bus (traffic), initial encounter -V873XXD Person injured in collision between car and bus (traffic), subsequent encounter -V873XXS Person injured in collision between car and bus (traffic), sequela -V874XXA Person injured in collision between car and heavy transport vehicle (traffic), initial encounter -V874XXD Person injured in collision between car and heavy transport vehicle (traffic), subsequent encounter -V874XXS Person injured in collision between car and heavy transport vehicle (traffic), sequela -V875XXA Person injured in collision between heavy transport vehicle and bus (traffic), initial encounter -V875XXD Person injured in collision between heavy transport vehicle and bus (traffic), subsequent encounter -V875XXS Person injured in collision between heavy transport vehicle and bus (traffic), sequela -V876XXA Person injured in collision between railway train or railway vehicle and car (traffic), initial encounter -V876XXD Person injured in collision between railway train or railway vehicle and car (traffic), subsequent encounter -V876XXS Person injured in collision between railway train or railway vehicle and car (traffic), sequela -V877XXA Person injured in collision between other specified motor vehicles (traffic), initial encounter -V877XXD Person injured in collision between other specified motor vehicles (traffic), subsequent encounter -V877XXS Person injured in collision between other specified motor vehicles (traffic), sequela -V878XXA Person injured in other specified noncollision transport accidents involving motor vehicle (traffic), initial encounter -V878XXD Person injured in other specified noncollision transport accidents involving motor vehicle (traffic), subsequent encounter -V878XXS Person injured in other specified noncollision transport accidents involving motor vehicle (traffic), sequela -V879XXA Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle (traffic), initial encounter -V879XXD Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle (traffic), subsequent encounter -V879XXS Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle (traffic), sequela -V880XXA Person injured in collision between car and two- or three-wheeled motor vehicle, nontraffic, initial encounter -V880XXD Person injured in collision between car and two- or three-wheeled motor vehicle, nontraffic, subsequent encounter -V880XXS Person injured in collision between car and two- or three-wheeled motor vehicle, nontraffic, sequela -V881XXA Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle, nontraffic, initial encounter -V881XXD Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle, nontraffic, subsequent encounter -V881XXS Person injured in collision between other motor vehicle and two- or three-wheeled motor vehicle, nontraffic, sequela -V882XXA Person injured in collision between car and pick-up truck or van, nontraffic, initial encounter -V882XXD Person injured in collision between car and pick-up truck or van, nontraffic, subsequent encounter -V882XXS Person injured in collision between car and pick-up truck or van, nontraffic, sequela -V883XXA Person injured in collision between car and bus, nontraffic, initial encounter -V883XXD Person injured in collision between car and bus, nontraffic, subsequent encounter -V883XXS Person injured in collision between car and bus, nontraffic, sequela -V884XXA Person injured in collision between car and heavy transport vehicle, nontraffic, initial encounter -V884XXD Person injured in collision between car and heavy transport vehicle, nontraffic, subsequent encounter -V884XXS Person injured in collision between car and heavy transport vehicle, nontraffic, sequela -V885XXA Person injured in collision between heavy transport vehicle and bus, nontraffic, initial encounter -V885XXD Person injured in collision between heavy transport vehicle and bus, nontraffic, subsequent encounter -V885XXS Person injured in collision between heavy transport vehicle and bus, nontraffic, sequela -V886XXA Person injured in collision between railway train or railway vehicle and car, nontraffic, initial encounter -V886XXD Person injured in collision between railway train or railway vehicle and car, nontraffic, subsequent encounter -V886XXS Person injured in collision between railway train or railway vehicle and car, nontraffic, sequela -V887XXA Person injured in collision between other specified motor vehicle, nontraffic, initial encounter -V887XXD Person injured in collision between other specified motor vehicle, nontraffic, subsequent encounter -V887XXS Person injured in collision between other specified motor vehicle, nontraffic, sequela -V888XXA Person injured in other specified noncollision transport accidents involving motor vehicle, nontraffic, initial encounter -V888XXD Person injured in other specified noncollision transport accidents involving motor vehicle, nontraffic, subsequent encounter -V888XXS Person injured in other specified noncollision transport accidents involving motor vehicle, nontraffic, sequela -V889XXA Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle, nontraffic, initial encounter -V889XXD Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle, nontraffic, subsequent encounter -V889XXS Person injured in other specified (collision)(noncollision) transport accidents involving nonmotor vehicle, nontraffic, sequela -V890XXA Person injured in unspecified motor-vehicle accident, nontraffic, initial encounter -V890XXD Person injured in unspecified motor-vehicle accident, nontraffic, subsequent encounter -V890XXS Person injured in unspecified motor-vehicle accident, nontraffic, sequela -V891XXA Person injured in unspecified nonmotor-vehicle accident, nontraffic, initial encounter -V891XXD Person injured in unspecified nonmotor-vehicle accident, nontraffic, subsequent encounter -V891XXS Person injured in unspecified nonmotor-vehicle accident, nontraffic, sequela -V892XXA Person injured in unspecified motor-vehicle accident, traffic, initial encounter -V892XXD Person injured in unspecified motor-vehicle accident, traffic, subsequent encounter -V892XXS Person injured in unspecified motor-vehicle accident, traffic, sequela -V893XXA Person injured in unspecified nonmotor-vehicle accident, traffic, initial encounter -V893XXD Person injured in unspecified nonmotor-vehicle accident, traffic, subsequent encounter -V893XXS Person injured in unspecified nonmotor-vehicle accident, traffic, sequela -V899XXA Person injured in unspecified vehicle accident, initial encounter -V899XXD Person injured in unspecified vehicle accident, subsequent encounter -V899XXS Person injured in unspecified vehicle accident, sequela -V9000XA Drowning and submersion due to merchant ship overturning, initial encounter -V9000XD Drowning and submersion due to merchant ship overturning, subsequent encounter -V9000XS Drowning and submersion due to merchant ship overturning, sequela -V9001XA Drowning and submersion due to passenger ship overturning, initial encounter -V9001XD Drowning and submersion due to passenger ship overturning, subsequent encounter -V9001XS Drowning and submersion due to passenger ship overturning, sequela -V9002XA Drowning and submersion due to fishing boat overturning, initial encounter -V9002XD Drowning and submersion due to fishing boat overturning, subsequent encounter -V9002XS Drowning and submersion due to fishing boat overturning, sequela -V9003XA Drowning and submersion due to other powered watercraft overturning, initial encounter -V9003XD Drowning and submersion due to other powered watercraft overturning, subsequent encounter -V9003XS Drowning and submersion due to other powered watercraft overturning, sequela -V9004XA Drowning and submersion due to sailboat overturning, initial encounter -V9004XD Drowning and submersion due to sailboat overturning, subsequent encounter -V9004XS Drowning and submersion due to sailboat overturning, sequela -V9005XA Drowning and submersion due to canoe or kayak overturning, initial encounter -V9005XD Drowning and submersion due to canoe or kayak overturning, subsequent encounter -V9005XS Drowning and submersion due to canoe or kayak overturning, sequela -V9006XA Drowning and submersion due to (nonpowered) inflatable craft overturning, initial encounter -V9006XD Drowning and submersion due to (nonpowered) inflatable craft overturning, subsequent encounter -V9006XS Drowning and submersion due to (nonpowered) inflatable craft overturning, sequela -V9008XA Drowning and submersion due to other unpowered watercraft overturning, initial encounter -V9008XD Drowning and submersion due to other unpowered watercraft overturning, subsequent encounter -V9008XS Drowning and submersion due to other unpowered watercraft overturning, sequela -V9009XA Drowning and submersion due to unspecified watercraft overturning, initial encounter -V9009XD Drowning and submersion due to unspecified watercraft overturning, subsequent encounter -V9009XS Drowning and submersion due to unspecified watercraft overturning, sequela -V9010XA Drowning and submersion due to merchant ship sinking, initial encounter -V9010XD Drowning and submersion due to merchant ship sinking, subsequent encounter -V9010XS Drowning and submersion due to merchant ship sinking, sequela -V9011XA Drowning and submersion due to passenger ship sinking, initial encounter -V9011XD Drowning and submersion due to passenger ship sinking, subsequent encounter -V9011XS Drowning and submersion due to passenger ship sinking, sequela -V9012XA Drowning and submersion due to fishing boat sinking, initial encounter -V9012XD Drowning and submersion due to fishing boat sinking, subsequent encounter -V9012XS Drowning and submersion due to fishing boat sinking, sequela -V9013XA Drowning and submersion due to other powered watercraft sinking, initial encounter -V9013XD Drowning and submersion due to other powered watercraft sinking, subsequent encounter -V9013XS Drowning and submersion due to other powered watercraft sinking, sequela -V9014XA Drowning and submersion due to sailboat sinking, initial encounter -V9014XD Drowning and submersion due to sailboat sinking, subsequent encounter -V9014XS Drowning and submersion due to sailboat sinking, sequela -V9015XA Drowning and submersion due to canoe or kayak sinking, initial encounter -V9015XD Drowning and submersion due to canoe or kayak sinking, subsequent encounter -V9015XS Drowning and submersion due to canoe or kayak sinking, sequela -V9016XA Drowning and submersion due to (nonpowered) inflatable craft sinking, initial encounter -V9016XD Drowning and submersion due to (nonpowered) inflatable craft sinking, subsequent encounter -V9016XS Drowning and submersion due to (nonpowered) inflatable craft sinking, sequela -V9018XA Drowning and submersion due to other unpowered watercraft sinking, initial encounter -V9018XD Drowning and submersion due to other unpowered watercraft sinking, subsequent encounter -V9018XS Drowning and submersion due to other unpowered watercraft sinking, sequela -V9019XA Drowning and submersion due to unspecified watercraft sinking, initial encounter -V9019XD Drowning and submersion due to unspecified watercraft sinking, subsequent encounter -V9019XS Drowning and submersion due to unspecified watercraft sinking, sequela -V9020XA Drowning and submersion due to falling or jumping from burning merchant ship, initial encounter -V9020XD Drowning and submersion due to falling or jumping from burning merchant ship, subsequent encounter -V9020XS Drowning and submersion due to falling or jumping from burning merchant ship, sequela -V9021XA Drowning and submersion due to falling or jumping from burning passenger ship, initial encounter -V9021XD Drowning and submersion due to falling or jumping from burning passenger ship, subsequent encounter -V9021XS Drowning and submersion due to falling or jumping from burning passenger ship, sequela -V9022XA Drowning and submersion due to falling or jumping from burning fishing boat, initial encounter -V9022XD Drowning and submersion due to falling or jumping from burning fishing boat, subsequent encounter -V9022XS Drowning and submersion due to falling or jumping from burning fishing boat, sequela -V9023XA Drowning and submersion due to falling or jumping from other burning powered watercraft, initial encounter -V9023XD Drowning and submersion due to falling or jumping from other burning powered watercraft, subsequent encounter -V9023XS Drowning and submersion due to falling or jumping from other burning powered watercraft, sequela -V9024XA Drowning and submersion due to falling or jumping from burning sailboat, initial encounter -V9024XD Drowning and submersion due to falling or jumping from burning sailboat, subsequent encounter -V9024XS Drowning and submersion due to falling or jumping from burning sailboat, sequela -V9025XA Drowning and submersion due to falling or jumping from burning canoe or kayak, initial encounter -V9025XD Drowning and submersion due to falling or jumping from burning canoe or kayak, subsequent encounter -V9025XS Drowning and submersion due to falling or jumping from burning canoe or kayak, sequela -V9026XA Drowning and submersion due to falling or jumping from burning (nonpowered) inflatable craft, initial encounter -V9026XD Drowning and submersion due to falling or jumping from burning (nonpowered) inflatable craft, subsequent encounter -V9026XS Drowning and submersion due to falling or jumping from burning (nonpowered) inflatable craft, sequela -V9027XA Drowning and submersion due to falling or jumping from burning water-skis, initial encounter -V9027XD Drowning and submersion due to falling or jumping from burning water-skis, subsequent encounter -V9027XS Drowning and submersion due to falling or jumping from burning water-skis, sequela -V9028XA Drowning and submersion due to falling or jumping from other burning unpowered watercraft, initial encounter -V9028XD Drowning and submersion due to falling or jumping from other burning unpowered watercraft, subsequent encounter -V9028XS Drowning and submersion due to falling or jumping from other burning unpowered watercraft, sequela -V9029XA Drowning and submersion due to falling or jumping from unspecified burning watercraft, initial encounter -V9029XD Drowning and submersion due to falling or jumping from unspecified burning watercraft, subsequent encounter -V9029XS Drowning and submersion due to falling or jumping from unspecified burning watercraft, sequela -V9030XA Drowning and submersion due to falling or jumping from crushed merchant ship, initial encounter -V9030XD Drowning and submersion due to falling or jumping from crushed merchant ship, subsequent encounter -V9030XS Drowning and submersion due to falling or jumping from crushed merchant ship, sequela -V9031XA Drowning and submersion due to falling or jumping from crushed passenger ship, initial encounter -V9031XD Drowning and submersion due to falling or jumping from crushed passenger ship, subsequent encounter -V9031XS Drowning and submersion due to falling or jumping from crushed passenger ship, sequela -V9032XA Drowning and submersion due to falling or jumping from crushed fishing boat, initial encounter -V9032XD Drowning and submersion due to falling or jumping from crushed fishing boat, subsequent encounter -V9032XS Drowning and submersion due to falling or jumping from crushed fishing boat, sequela -V9033XA Drowning and submersion due to falling or jumping from other crushed powered watercraft, initial encounter -V9033XD Drowning and submersion due to falling or jumping from other crushed powered watercraft, subsequent encounter -V9033XS Drowning and submersion due to falling or jumping from other crushed powered watercraft, sequela -V9034XA Drowning and submersion due to falling or jumping from crushed sailboat, initial encounter -V9034XD Drowning and submersion due to falling or jumping from crushed sailboat, subsequent encounter -V9034XS Drowning and submersion due to falling or jumping from crushed sailboat, sequela -V9035XA Drowning and submersion due to falling or jumping from crushed canoe or kayak, initial encounter -V9035XD Drowning and submersion due to falling or jumping from crushed canoe or kayak, subsequent encounter -V9035XS Drowning and submersion due to falling or jumping from crushed canoe or kayak, sequela -V9036XA Drowning and submersion due to falling or jumping from crushed (nonpowered) inflatable craft, initial encounter -V9036XD Drowning and submersion due to falling or jumping from crushed (nonpowered) inflatable craft, subsequent encounter -V9036XS Drowning and submersion due to falling or jumping from crushed (nonpowered) inflatable craft, sequela -V9037XA Drowning and submersion due to falling or jumping from crushed water-skis, initial encounter -V9037XD Drowning and submersion due to falling or jumping from crushed water-skis, subsequent encounter -V9037XS Drowning and submersion due to falling or jumping from crushed water-skis, sequela -V9038XA Drowning and submersion due to falling or jumping from other crushed unpowered watercraft, initial encounter -V9038XD Drowning and submersion due to falling or jumping from other crushed unpowered watercraft, subsequent encounter -V9038XS Drowning and submersion due to falling or jumping from other crushed unpowered watercraft, sequela -V9039XA Drowning and submersion due to falling or jumping from crushed unspecified watercraft, initial encounter -V9039XD Drowning and submersion due to falling or jumping from crushed unspecified watercraft, subsequent encounter -V9039XS Drowning and submersion due to falling or jumping from crushed unspecified watercraft, sequela -V9080XA Drowning and submersion due to other accident to merchant ship, initial encounter -V9080XD Drowning and submersion due to other accident to merchant ship, subsequent encounter -V9080XS Drowning and submersion due to other accident to merchant ship, sequela -V9081XA Drowning and submersion due to other accident to passenger ship, initial encounter -V9081XD Drowning and submersion due to other accident to passenger ship, subsequent encounter -V9081XS Drowning and submersion due to other accident to passenger ship, sequela -V9082XA Drowning and submersion due to other accident to fishing boat, initial encounter -V9082XD Drowning and submersion due to other accident to fishing boat, subsequent encounter -V9082XS Drowning and submersion due to other accident to fishing boat, sequela -V9083XA Drowning and submersion due to other accident to other powered watercraft, initial encounter -V9083XD Drowning and submersion due to other accident to other powered watercraft, subsequent encounter -V9083XS Drowning and submersion due to other accident to other powered watercraft, sequela -V9084XA Drowning and submersion due to other accident to sailboat, initial encounter -V9084XD Drowning and submersion due to other accident to sailboat, subsequent encounter -V9084XS Drowning and submersion due to other accident to sailboat, sequela -V9085XA Drowning and submersion due to other accident to canoe or kayak, initial encounter -V9085XD Drowning and submersion due to other accident to canoe or kayak, subsequent encounter -V9085XS Drowning and submersion due to other accident to canoe or kayak, sequela -V9086XA Drowning and submersion due to other accident to (nonpowered) inflatable craft, initial encounter -V9086XD Drowning and submersion due to other accident to (nonpowered) inflatable craft, subsequent encounter -V9086XS Drowning and submersion due to other accident to (nonpowered) inflatable craft, sequela -V9087XA Drowning and submersion due to other accident to water-skis, initial encounter -V9087XD Drowning and submersion due to other accident to water-skis, subsequent encounter -V9087XS Drowning and submersion due to other accident to water-skis, sequela -V9088XA Drowning and submersion due to other accident to other unpowered watercraft, initial encounter -V9088XD Drowning and submersion due to other accident to other unpowered watercraft, subsequent encounter -V9088XS Drowning and submersion due to other accident to other unpowered watercraft, sequela -V9089XA Drowning and submersion due to other accident to unspecified watercraft, initial encounter -V9089XD Drowning and submersion due to other accident to unspecified watercraft, subsequent encounter -V9089XS Drowning and submersion due to other accident to unspecified watercraft, sequela -V9100XA Burn due to merchant ship on fire, initial encounter -V9100XD Burn due to merchant ship on fire, subsequent encounter -V9100XS Burn due to merchant ship on fire, sequela -V9101XA Burn due to passenger ship on fire, initial encounter -V9101XD Burn due to passenger ship on fire, subsequent encounter -V9101XS Burn due to passenger ship on fire, sequela -V9102XA Burn due to fishing boat on fire, initial encounter -V9102XD Burn due to fishing boat on fire, subsequent encounter -V9102XS Burn due to fishing boat on fire, sequela -V9103XA Burn due to other powered watercraft on fire, initial encounter -V9103XD Burn due to other powered watercraft on fire, subsequent encounter -V9103XS Burn due to other powered watercraft on fire, sequela -V9104XA Burn due to sailboat on fire, initial encounter -V9104XD Burn due to sailboat on fire, subsequent encounter -V9104XS Burn due to sailboat on fire, sequela -V9105XA Burn due to canoe or kayak on fire, initial encounter -V9105XD Burn due to canoe or kayak on fire, subsequent encounter -V9105XS Burn due to canoe or kayak on fire, sequela -V9106XA Burn due to (nonpowered) inflatable craft on fire, initial encounter -V9106XD Burn due to (nonpowered) inflatable craft on fire, subsequent encounter -V9106XS Burn due to (nonpowered) inflatable craft on fire, sequela -V9107XA Burn due to water-skis on fire, initial encounter -V9107XD Burn due to water-skis on fire, subsequent encounter -V9107XS Burn due to water-skis on fire, sequela -V9108XA Burn due to other unpowered watercraft on fire, initial encounter -V9108XD Burn due to other unpowered watercraft on fire, subsequent encounter -V9108XS Burn due to other unpowered watercraft on fire, sequela -V9109XA Burn due to unspecified watercraft on fire, initial encounter -V9109XD Burn due to unspecified watercraft on fire, subsequent encounter -V9109XS Burn due to unspecified watercraft on fire, sequela -V9110XA Crushed between merchant ship and other watercraft or other object due to collision, initial encounter -V9110XD Crushed between merchant ship and other watercraft or other object due to collision, subsequent encounter -V9110XS Crushed between merchant ship and other watercraft or other object due to collision, sequela -V9111XA Crushed between passenger ship and other watercraft or other object due to collision, initial encounter -V9111XD Crushed between passenger ship and other watercraft or other object due to collision, subsequent encounter -V9111XS Crushed between passenger ship and other watercraft or other object due to collision, sequela -V9112XA Crushed between fishing boat and other watercraft or other object due to collision, initial encounter -V9112XD Crushed between fishing boat and other watercraft or other object due to collision, subsequent encounter -V9112XS Crushed between fishing boat and other watercraft or other object due to collision, sequela -V9113XA Crushed between other powered watercraft and other watercraft or other object due to collision, initial encounter -V9113XD Crushed between other powered watercraft and other watercraft or other object due to collision, subsequent encounter -V9113XS Crushed between other powered watercraft and other watercraft or other object due to collision, sequela -V9114XA Crushed between sailboat and other watercraft or other object due to collision, initial encounter -V9114XD Crushed between sailboat and other watercraft or other object due to collision, subsequent encounter -V9114XS Crushed between sailboat and other watercraft or other object due to collision, sequela -V9115XA Crushed between canoe or kayak and other watercraft or other object due to collision, initial encounter -V9115XD Crushed between canoe or kayak and other watercraft or other object due to collision, subsequent encounter -V9115XS Crushed between canoe or kayak and other watercraft or other object due to collision, sequela -V9116XA Crushed between (nonpowered) inflatable craft and other watercraft or other object due to collision, initial encounter -V9116XD Crushed between (nonpowered) inflatable craft and other watercraft or other object due to collision, subsequent encounter -V9116XS Crushed between (nonpowered) inflatable craft and other watercraft or other object due to collision, sequela -V9118XA Crushed between other unpowered watercraft and other watercraft or other object due to collision, initial encounter -V9118XD Crushed between other unpowered watercraft and other watercraft or other object due to collision, subsequent encounter -V9118XS Crushed between other unpowered watercraft and other watercraft or other object due to collision, sequela -V9119XA Crushed between unspecified watercraft and other watercraft or other object due to collision, initial encounter -V9119XD Crushed between unspecified watercraft and other watercraft or other object due to collision, subsequent encounter -V9119XS Crushed between unspecified watercraft and other watercraft or other object due to collision, sequela -V9120XA Fall due to collision between merchant ship and other watercraft or other object, initial encounter -V9120XD Fall due to collision between merchant ship and other watercraft or other object, subsequent encounter -V9120XS Fall due to collision between merchant ship and other watercraft or other object, sequela -V9121XA Fall due to collision between passenger ship and other watercraft or other object, initial encounter -V9121XD Fall due to collision between passenger ship and other watercraft or other object, subsequent encounter -V9121XS Fall due to collision between passenger ship and other watercraft or other object, sequela -V9122XA Fall due to collision between fishing boat and other watercraft or other object, initial encounter -V9122XD Fall due to collision between fishing boat and other watercraft or other object, subsequent encounter -V9122XS Fall due to collision between fishing boat and other watercraft or other object, sequela -V9123XA Fall due to collision between other powered watercraft and other watercraft or other object, initial encounter -V9123XD Fall due to collision between other powered watercraft and other watercraft or other object, subsequent encounter -V9123XS Fall due to collision between other powered watercraft and other watercraft or other object, sequela -V9124XA Fall due to collision between sailboat and other watercraft or other object, initial encounter -V9124XD Fall due to collision between sailboat and other watercraft or other object, subsequent encounter -V9124XS Fall due to collision between sailboat and other watercraft or other object, sequela -V9125XA Fall due to collision between canoe or kayak and other watercraft or other object, initial encounter -V9125XD Fall due to collision between canoe or kayak and other watercraft or other object, subsequent encounter -V9125XS Fall due to collision between canoe or kayak and other watercraft or other object, sequela -V9126XA Fall due to collision between (nonpowered) inflatable craft and other watercraft or other object, initial encounter -V9126XD Fall due to collision between (nonpowered) inflatable craft and other watercraft or other object, subsequent encounter -V9126XS Fall due to collision between (nonpowered) inflatable craft and other watercraft or other object, sequela -V9129XA Fall due to collision between unspecified watercraft and other watercraft or other object, initial encounter -V9129XD Fall due to collision between unspecified watercraft and other watercraft or other object, subsequent encounter -V9129XS Fall due to collision between unspecified watercraft and other watercraft or other object, sequela -V9130XA Hit or struck by falling object due to accident to merchant ship, initial encounter -V9130XD Hit or struck by falling object due to accident to merchant ship, subsequent encounter -V9130XS Hit or struck by falling object due to accident to merchant ship, sequela -V9131XA Hit or struck by falling object due to accident to passenger ship, initial encounter -V9131XD Hit or struck by falling object due to accident to passenger ship, subsequent encounter -V9131XS Hit or struck by falling object due to accident to passenger ship, sequela -V9132XA Hit or struck by falling object due to accident to fishing boat, initial encounter -V9132XD Hit or struck by falling object due to accident to fishing boat, subsequent encounter -V9132XS Hit or struck by falling object due to accident to fishing boat, sequela -V9133XA Hit or struck by falling object due to accident to other powered watercraft, initial encounter -V9133XD Hit or struck by falling object due to accident to other powered watercraft, subsequent encounter -V9133XS Hit or struck by falling object due to accident to other powered watercraft, sequela -V9134XA Hit or struck by falling object due to accident to sailboat, initial encounter -V9134XD Hit or struck by falling object due to accident to sailboat, subsequent encounter -V9134XS Hit or struck by falling object due to accident to sailboat, sequela -V9135XA Hit or struck by falling object due to accident to canoe or kayak, initial encounter -V9135XD Hit or struck by falling object due to accident to canoe or kayak, subsequent encounter -V9135XS Hit or struck by falling object due to accident to canoe or kayak, sequela -V9136XA Hit or struck by falling object due to accident to (nonpowered) inflatable craft, initial encounter -V9136XD Hit or struck by falling object due to accident to (nonpowered) inflatable craft, subsequent encounter -V9136XS Hit or struck by falling object due to accident to (nonpowered) inflatable craft, sequela -V9137XA Hit or struck by falling object due to accident to water-skis, initial encounter -V9137XD Hit or struck by falling object due to accident to water-skis, subsequent encounter -V9137XS Hit or struck by falling object due to accident to water-skis, sequela -V9138XA Hit or struck by falling object due to accident to other unpowered watercraft, initial encounter -V9138XD Hit or struck by falling object due to accident to other unpowered watercraft, subsequent encounter -V9138XS Hit or struck by falling object due to accident to other unpowered watercraft, sequela -V9139XA Hit or struck by falling object due to accident to unspecified watercraft, initial encounter -V9139XD Hit or struck by falling object due to accident to unspecified watercraft, subsequent encounter -V9139XS Hit or struck by falling object due to accident to unspecified watercraft, sequela -V9180XA Other injury due to other accident to merchant ship, initial encounter -V9180XD Other injury due to other accident to merchant ship, subsequent encounter -V9180XS Other injury due to other accident to merchant ship, sequela -V9181XA Other injury due to other accident to passenger ship, initial encounter -V9181XD Other injury due to other accident to passenger ship, subsequent encounter -V9181XS Other injury due to other accident to passenger ship, sequela -V9182XA Other injury due to other accident to fishing boat, initial encounter -V9182XD Other injury due to other accident to fishing boat, subsequent encounter -V9182XS Other injury due to other accident to fishing boat, sequela -V9183XA Other injury due to other accident to other powered watercraft, initial encounter -V9183XD Other injury due to other accident to other powered watercraft, subsequent encounter -V9183XS Other injury due to other accident to other powered watercraft, sequela -V9184XA Other injury due to other accident to sailboat, initial encounter -V9184XD Other injury due to other accident to sailboat, subsequent encounter -V9184XS Other injury due to other accident to sailboat, sequela -V9185XA Other injury due to other accident to canoe or kayak, initial encounter -V9185XD Other injury due to other accident to canoe or kayak, subsequent encounter -V9185XS Other injury due to other accident to canoe or kayak, sequela -V9186XA Other injury due to other accident to (nonpowered) inflatable craft, initial encounter -V9186XD Other injury due to other accident to (nonpowered) inflatable craft, subsequent encounter -V9186XS Other injury due to other accident to (nonpowered) inflatable craft, sequela -V9187XA Other injury due to other accident to water-skis, initial encounter -V9187XD Other injury due to other accident to water-skis, subsequent encounter -V9187XS Other injury due to other accident to water-skis, sequela -V9188XA Other injury due to other accident to other unpowered watercraft, initial encounter -V9188XD Other injury due to other accident to other unpowered watercraft, subsequent encounter -V9188XS Other injury due to other accident to other unpowered watercraft, sequela -V9189XA Other injury due to other accident to unspecified watercraft, initial encounter -V9189XD Other injury due to other accident to unspecified watercraft, subsequent encounter -V9189XS Other injury due to other accident to unspecified watercraft, sequela -V9200XA Drowning and submersion due to fall off merchant ship, initial encounter -V9200XD Drowning and submersion due to fall off merchant ship, subsequent encounter -V9200XS Drowning and submersion due to fall off merchant ship, sequela -V9201XA Drowning and submersion due to fall off passenger ship, initial encounter -V9201XD Drowning and submersion due to fall off passenger ship, subsequent encounter -V9201XS Drowning and submersion due to fall off passenger ship, sequela -V9202XA Drowning and submersion due to fall off fishing boat, initial encounter -V9202XD Drowning and submersion due to fall off fishing boat, subsequent encounter -V9202XS Drowning and submersion due to fall off fishing boat, sequela -V9203XA Drowning and submersion due to fall off other powered watercraft, initial encounter -V9203XD Drowning and submersion due to fall off other powered watercraft, subsequent encounter -V9203XS Drowning and submersion due to fall off other powered watercraft, sequela -V9204XA Drowning and submersion due to fall off sailboat, initial encounter -V9204XD Drowning and submersion due to fall off sailboat, subsequent encounter -V9204XS Drowning and submersion due to fall off sailboat, sequela -V9205XA Drowning and submersion due to fall off canoe or kayak, initial encounter -V9205XD Drowning and submersion due to fall off canoe or kayak, subsequent encounter -V9205XS Drowning and submersion due to fall off canoe or kayak, sequela -V9206XA Drowning and submersion due to fall off (nonpowered) inflatable craft, initial encounter -V9206XD Drowning and submersion due to fall off (nonpowered) inflatable craft, subsequent encounter -V9206XS Drowning and submersion due to fall off (nonpowered) inflatable craft, sequela -V9207XA Drowning and submersion due to fall off water-skis, initial encounter -V9207XD Drowning and submersion due to fall off water-skis, subsequent encounter -V9207XS Drowning and submersion due to fall off water-skis, sequela -V9208XA Drowning and submersion due to fall off other unpowered watercraft, initial encounter -V9208XD Drowning and submersion due to fall off other unpowered watercraft, subsequent encounter -V9208XS Drowning and submersion due to fall off other unpowered watercraft, sequela -V9209XA Drowning and submersion due to fall off unspecified watercraft, initial encounter -V9209XD Drowning and submersion due to fall off unspecified watercraft, subsequent encounter -V9209XS Drowning and submersion due to fall off unspecified watercraft, sequela -V9210XA Drowning and submersion due to being thrown overboard by motion of merchant ship, initial encounter -V9210XD Drowning and submersion due to being thrown overboard by motion of merchant ship, subsequent encounter -V9210XS Drowning and submersion due to being thrown overboard by motion of merchant ship, sequela -V9211XA Drowning and submersion due to being thrown overboard by motion of passenger ship, initial encounter -V9211XD Drowning and submersion due to being thrown overboard by motion of passenger ship, subsequent encounter -V9211XS Drowning and submersion due to being thrown overboard by motion of passenger ship, sequela -V9212XA Drowning and submersion due to being thrown overboard by motion of fishing boat, initial encounter -V9212XD Drowning and submersion due to being thrown overboard by motion of fishing boat, subsequent encounter -V9212XS Drowning and submersion due to being thrown overboard by motion of fishing boat, sequela -V9213XA Drowning and submersion due to being thrown overboard by motion of other powered watercraft, initial encounter -V9213XD Drowning and submersion due to being thrown overboard by motion of other powered watercraft, subsequent encounter -V9213XS Drowning and submersion due to being thrown overboard by motion of other powered watercraft, sequela -V9214XA Drowning and submersion due to being thrown overboard by motion of sailboat, initial encounter -V9214XD Drowning and submersion due to being thrown overboard by motion of sailboat, subsequent encounter -V9214XS Drowning and submersion due to being thrown overboard by motion of sailboat, sequela -V9215XA Drowning and submersion due to being thrown overboard by motion of canoe or kayak, initial encounter -V9215XD Drowning and submersion due to being thrown overboard by motion of canoe or kayak, subsequent encounter -V9215XS Drowning and submersion due to being thrown overboard by motion of canoe or kayak, sequela -V9216XA Drowning and submersion due to being thrown overboard by motion of (nonpowered) inflatable craft, initial encounter -V9216XD Drowning and submersion due to being thrown overboard by motion of (nonpowered) inflatable craft, subsequent encounter -V9216XS Drowning and submersion due to being thrown overboard by motion of (nonpowered) inflatable craft, sequela -V9219XA Drowning and submersion due to being thrown overboard by motion of unspecified watercraft, initial encounter -V9219XD Drowning and submersion due to being thrown overboard by motion of unspecified watercraft, subsequent encounter -V9219XS Drowning and submersion due to being thrown overboard by motion of unspecified watercraft, sequela -V9220XA Drowning and submersion due to being washed overboard from merchant ship, initial encounter -V9220XD Drowning and submersion due to being washed overboard from merchant ship, subsequent encounter -V9220XS Drowning and submersion due to being washed overboard from merchant ship, sequela -V9221XA Drowning and submersion due to being washed overboard from passenger ship, initial encounter -V9221XD Drowning and submersion due to being washed overboard from passenger ship, subsequent encounter -V9221XS Drowning and submersion due to being washed overboard from passenger ship, sequela -V9222XA Drowning and submersion due to being washed overboard from fishing boat, initial encounter -V9222XD Drowning and submersion due to being washed overboard from fishing boat, subsequent encounter -V9222XS Drowning and submersion due to being washed overboard from fishing boat, sequela -V9223XA Drowning and submersion due to being washed overboard from other powered watercraft, initial encounter -V9223XD Drowning and submersion due to being washed overboard from other powered watercraft, subsequent encounter -V9223XS Drowning and submersion due to being washed overboard from other powered watercraft, sequela -V9224XA Drowning and submersion due to being washed overboard from sailboat, initial encounter -V9224XD Drowning and submersion due to being washed overboard from sailboat, subsequent encounter -V9224XS Drowning and submersion due to being washed overboard from sailboat, sequela -V9225XA Drowning and submersion due to being washed overboard from canoe or kayak, initial encounter -V9225XD Drowning and submersion due to being washed overboard from canoe or kayak, subsequent encounter -V9225XS Drowning and submersion due to being washed overboard from canoe or kayak, sequela -V9226XA Drowning and submersion due to being washed overboard from (nonpowered) inflatable craft, initial encounter -V9226XD Drowning and submersion due to being washed overboard from (nonpowered) inflatable craft, subsequent encounter -V9226XS Drowning and submersion due to being washed overboard from (nonpowered) inflatable craft, sequela -V9227XA Drowning and submersion due to being washed overboard from water-skis, initial encounter -V9227XD Drowning and submersion due to being washed overboard from water-skis, subsequent encounter -V9227XS Drowning and submersion due to being washed overboard from water-skis, sequela -V9228XA Drowning and submersion due to being washed overboard from other unpowered watercraft, initial encounter -V9228XD Drowning and submersion due to being washed overboard from other unpowered watercraft, subsequent encounter -V9228XS Drowning and submersion due to being washed overboard from other unpowered watercraft, sequela -V9229XA Drowning and submersion due to being washed overboard from unspecified watercraft, initial encounter -V9229XD Drowning and submersion due to being washed overboard from unspecified watercraft, subsequent encounter -V9229XS Drowning and submersion due to being washed overboard from unspecified watercraft, sequela -V9300XA Burn due to localized fire on board merchant vessel, initial encounter -V9300XD Burn due to localized fire on board merchant vessel, subsequent encounter -V9300XS Burn due to localized fire on board merchant vessel, sequela -V9301XA Burn due to localized fire on board passenger vessel, initial encounter -V9301XD Burn due to localized fire on board passenger vessel, subsequent encounter -V9301XS Burn due to localized fire on board passenger vessel, sequela -V9302XA Burn due to localized fire on board fishing boat, initial encounter -V9302XD Burn due to localized fire on board fishing boat, subsequent encounter -V9302XS Burn due to localized fire on board fishing boat, sequela -V9303XA Burn due to localized fire on board other powered watercraft, initial encounter -V9303XD Burn due to localized fire on board other powered watercraft, subsequent encounter -V9303XS Burn due to localized fire on board other powered watercraft, sequela -V9304XA Burn due to localized fire on board sailboat, initial encounter -V9304XD Burn due to localized fire on board sailboat, subsequent encounter -V9304XS Burn due to localized fire on board sailboat, sequela -V9309XA Burn due to localized fire on board unspecified watercraft, initial encounter -V9309XD Burn due to localized fire on board unspecified watercraft, subsequent encounter -V9309XS Burn due to localized fire on board unspecified watercraft, sequela -V9310XA Other burn on board merchant vessel, initial encounter -V9310XD Other burn on board merchant vessel, subsequent encounter -V9310XS Other burn on board merchant vessel, sequela -V9311XA Other burn on board passenger vessel, initial encounter -V9311XD Other burn on board passenger vessel, subsequent encounter -V9311XS Other burn on board passenger vessel, sequela -V9312XA Other burn on board fishing boat, initial encounter -V9312XD Other burn on board fishing boat, subsequent encounter -V9312XS Other burn on board fishing boat, sequela -V9313XA Other burn on board other powered watercraft, initial encounter -V9313XD Other burn on board other powered watercraft, subsequent encounter -V9313XS Other burn on board other powered watercraft, sequela -V9314XA Other burn on board sailboat, initial encounter -V9314XD Other burn on board sailboat, subsequent encounter -V9314XS Other burn on board sailboat, sequela -V9319XA Other burn on board unspecified watercraft, initial encounter -V9319XD Other burn on board unspecified watercraft, subsequent encounter -V9319XS Other burn on board unspecified watercraft, sequela -V9320XA Heat exposure on board merchant ship, initial encounter -V9320XD Heat exposure on board merchant ship, subsequent encounter -V9320XS Heat exposure on board merchant ship, sequela -V9321XA Heat exposure on board passenger ship, initial encounter -V9321XD Heat exposure on board passenger ship, subsequent encounter -V9321XS Heat exposure on board passenger ship, sequela -V9322XA Heat exposure on board fishing boat, initial encounter -V9322XD Heat exposure on board fishing boat, subsequent encounter -V9322XS Heat exposure on board fishing boat, sequela -V9323XA Heat exposure on board other powered watercraft, initial encounter -V9323XD Heat exposure on board other powered watercraft, subsequent encounter -V9323XS Heat exposure on board other powered watercraft, sequela -V9324XA Heat exposure on board sailboat, initial encounter -V9324XD Heat exposure on board sailboat, subsequent encounter -V9324XS Heat exposure on board sailboat, sequela -V9329XA Heat exposure on board unspecified watercraft, initial encounter -V9329XD Heat exposure on board unspecified watercraft, subsequent encounter -V9329XS Heat exposure on board unspecified watercraft, sequela -V9330XA Fall on board merchant ship, initial encounter -V9330XD Fall on board merchant ship, subsequent encounter -V9330XS Fall on board merchant ship, sequela -V9331XA Fall on board passenger ship, initial encounter -V9331XD Fall on board passenger ship, subsequent encounter -V9331XS Fall on board passenger ship, sequela -V9332XA Fall on board fishing boat, initial encounter -V9332XD Fall on board fishing boat, subsequent encounter -V9332XS Fall on board fishing boat, sequela -V9333XA Fall on board other powered watercraft, initial encounter -V9333XD Fall on board other powered watercraft, subsequent encounter -V9333XS Fall on board other powered watercraft, sequela -V9334XA Fall on board sailboat, initial encounter -V9334XD Fall on board sailboat, subsequent encounter -V9334XS Fall on board sailboat, sequela -V9335XA Fall on board canoe or kayak, initial encounter -V9335XD Fall on board canoe or kayak, subsequent encounter -V9335XS Fall on board canoe or kayak, sequela -V9336XA Fall on board (nonpowered) inflatable craft, initial encounter -V9336XD Fall on board (nonpowered) inflatable craft, subsequent encounter -V9336XS Fall on board (nonpowered) inflatable craft, sequela -V9338XA Fall on board other unpowered watercraft, initial encounter -V9338XD Fall on board other unpowered watercraft, subsequent encounter -V9338XS Fall on board other unpowered watercraft, sequela -V9339XA Fall on board unspecified watercraft, initial encounter -V9339XD Fall on board unspecified watercraft, subsequent encounter -V9339XS Fall on board unspecified watercraft, sequela -V9340XA Struck by falling object on merchant ship, initial encounter -V9340XD Struck by falling object on merchant ship, subsequent encounter -V9340XS Struck by falling object on merchant ship, sequela -V9341XA Struck by falling object on passenger ship, initial encounter -V9341XD Struck by falling object on passenger ship, subsequent encounter -V9341XS Struck by falling object on passenger ship, sequela -V9342XA Struck by falling object on fishing boat, initial encounter -V9342XD Struck by falling object on fishing boat, subsequent encounter -V9342XS Struck by falling object on fishing boat, sequela -V9343XA Struck by falling object on other powered watercraft, initial encounter -V9343XD Struck by falling object on other powered watercraft, subsequent encounter -V9343XS Struck by falling object on other powered watercraft, sequela -V9344XA Struck by falling object on sailboat, initial encounter -V9344XD Struck by falling object on sailboat, subsequent encounter -V9344XS Struck by falling object on sailboat, sequela -V9348XA Struck by falling object on other unpowered watercraft, initial encounter -V9348XD Struck by falling object on other unpowered watercraft, subsequent encounter -V9348XS Struck by falling object on other unpowered watercraft, sequela -V9349XA Struck by falling object on unspecified watercraft, initial encounter -V9349XD Struck by falling object on unspecified watercraft, subsequent encounter -V9349XS Struck by falling object on unspecified watercraft, sequela -V9350XA Explosion on board merchant ship, initial encounter -V9350XD Explosion on board merchant ship, subsequent encounter -V9350XS Explosion on board merchant ship, sequela -V9351XA Explosion on board passenger ship, initial encounter -V9351XD Explosion on board passenger ship, subsequent encounter -V9351XS Explosion on board passenger ship, sequela -V9352XA Explosion on board fishing boat, initial encounter -V9352XD Explosion on board fishing boat, subsequent encounter -V9352XS Explosion on board fishing boat, sequela -V9353XA Explosion on board other powered watercraft, initial encounter -V9353XD Explosion on board other powered watercraft, subsequent encounter -V9353XS Explosion on board other powered watercraft, sequela -V9354XA Explosion on board sailboat, initial encounter -V9354XD Explosion on board sailboat, subsequent encounter -V9354XS Explosion on board sailboat, sequela -V9359XA Explosion on board unspecified watercraft, initial encounter -V9359XD Explosion on board unspecified watercraft, subsequent encounter -V9359XS Explosion on board unspecified watercraft, sequela -V9360XA Machinery accident on board merchant ship, initial encounter -V9360XD Machinery accident on board merchant ship, subsequent encounter -V9360XS Machinery accident on board merchant ship, sequela -V9361XA Machinery accident on board passenger ship, initial encounter -V9361XD Machinery accident on board passenger ship, subsequent encounter -V9361XS Machinery accident on board passenger ship, sequela -V9362XA Machinery accident on board fishing boat, initial encounter -V9362XD Machinery accident on board fishing boat, subsequent encounter -V9362XS Machinery accident on board fishing boat, sequela -V9363XA Machinery accident on board other powered watercraft, initial encounter -V9363XD Machinery accident on board other powered watercraft, subsequent encounter -V9363XS Machinery accident on board other powered watercraft, sequela -V9364XA Machinery accident on board sailboat, initial encounter -V9364XD Machinery accident on board sailboat, subsequent encounter -V9364XS Machinery accident on board sailboat, sequela -V9369XA Machinery accident on board unspecified watercraft, initial encounter -V9369XD Machinery accident on board unspecified watercraft, subsequent encounter -V9369XS Machinery accident on board unspecified watercraft, sequela -V9380XA Other injury due to other accident on board merchant ship, initial encounter -V9380XD Other injury due to other accident on board merchant ship, subsequent encounter -V9380XS Other injury due to other accident on board merchant ship, sequela -V9381XA Other injury due to other accident on board passenger ship, initial encounter -V9381XD Other injury due to other accident on board passenger ship, subsequent encounter -V9381XS Other injury due to other accident on board passenger ship, sequela -V9382XA Other injury due to other accident on board fishing boat, initial encounter -V9382XD Other injury due to other accident on board fishing boat, subsequent encounter -V9382XS Other injury due to other accident on board fishing boat, sequela -V9383XA Other injury due to other accident on board other powered watercraft, initial encounter -V9383XD Other injury due to other accident on board other powered watercraft, subsequent encounter -V9383XS Other injury due to other accident on board other powered watercraft, sequela -V9384XA Other injury due to other accident on board sailboat, initial encounter -V9384XD Other injury due to other accident on board sailboat, subsequent encounter -V9384XS Other injury due to other accident on board sailboat, sequela -V9385XA Other injury due to other accident on board canoe or kayak, initial encounter -V9385XD Other injury due to other accident on board canoe or kayak, subsequent encounter -V9385XS Other injury due to other accident on board canoe or kayak, sequela -V9386XA Other injury due to other accident on board (nonpowered) inflatable craft, initial encounter -V9386XD Other injury due to other accident on board (nonpowered) inflatable craft, subsequent encounter -V9386XS Other injury due to other accident on board (nonpowered) inflatable craft, sequela -V9387XA Other injury due to other accident on board water-skis, initial encounter -V9387XD Other injury due to other accident on board water-skis, subsequent encounter -V9387XS Other injury due to other accident on board water-skis, sequela -V9388XA Other injury due to other accident on board other unpowered watercraft, initial encounter -V9388XD Other injury due to other accident on board other unpowered watercraft, subsequent encounter -V9388XS Other injury due to other accident on board other unpowered watercraft, sequela -V9389XA Other injury due to other accident on board unspecified watercraft, initial encounter -V9389XD Other injury due to other accident on board unspecified watercraft, subsequent encounter -V9389XS Other injury due to other accident on board unspecified watercraft, sequela -V940XXA Hitting object or bottom of body of water due to fall from watercraft, initial encounter -V940XXD Hitting object or bottom of body of water due to fall from watercraft, subsequent encounter -V940XXS Hitting object or bottom of body of water due to fall from watercraft, sequela -V9411XA Bather struck by powered watercraft, initial encounter -V9411XD Bather struck by powered watercraft, subsequent encounter -V9411XS Bather struck by powered watercraft, sequela -V9412XA Bather struck by nonpowered watercraft, initial encounter -V9412XD Bather struck by nonpowered watercraft, subsequent encounter -V9412XS Bather struck by nonpowered watercraft, sequela -V9421XA Rider of nonpowered watercraft struck by other nonpowered watercraft, initial encounter -V9421XD Rider of nonpowered watercraft struck by other nonpowered watercraft, subsequent encounter -V9421XS Rider of nonpowered watercraft struck by other nonpowered watercraft, sequela -V9422XA Rider of nonpowered watercraft struck by powered watercraft, initial encounter -V9422XD Rider of nonpowered watercraft struck by powered watercraft, subsequent encounter -V9422XS Rider of nonpowered watercraft struck by powered watercraft, sequela -V9431XA Injury to rider of (inflatable) recreational watercraft being pulled behind other watercraft, initial encounter -V9431XD Injury to rider of (inflatable) recreational watercraft being pulled behind other watercraft, subsequent encounter -V9431XS Injury to rider of (inflatable) recreational watercraft being pulled behind other watercraft, sequela -V9432XA Injury to rider of non-recreational watercraft being pulled behind other watercraft, initial encounter -V9432XD Injury to rider of non-recreational watercraft being pulled behind other watercraft, subsequent encounter -V9432XS Injury to rider of non-recreational watercraft being pulled behind other watercraft, sequela -V944XXA Injury to barefoot water-skier, initial encounter -V944XXD Injury to barefoot water-skier, subsequent encounter -V944XXS Injury to barefoot water-skier, sequela -V94810A Civilian watercraft involved in water transport accident with military watercraft, initial encounter -V94810D Civilian watercraft involved in water transport accident with military watercraft, subsequent encounter -V94810S Civilian watercraft involved in water transport accident with military watercraft, sequela -V94811A Civilian in water injured by military watercraft, initial encounter -V94811D Civilian in water injured by military watercraft, subsequent encounter -V94811S Civilian in water injured by military watercraft, sequela -V94818A Other water transport accident involving military watercraft, initial encounter -V94818D Other water transport accident involving military watercraft, subsequent encounter -V94818S Other water transport accident involving military watercraft, sequela -V9489XA Other water transport accident, initial encounter -V9489XD Other water transport accident, subsequent encounter -V9489XS Other water transport accident, sequela -V949XXA Unspecified water transport accident, initial encounter -V949XXD Unspecified water transport accident, subsequent encounter -V949XXS Unspecified water transport accident, sequela -V9500XA Unspecified helicopter accident injuring occupant, initial encounter -V9500XD Unspecified helicopter accident injuring occupant, subsequent encounter -V9500XS Unspecified helicopter accident injuring occupant, sequela -V9501XA Helicopter crash injuring occupant, initial encounter -V9501XD Helicopter crash injuring occupant, subsequent encounter -V9501XS Helicopter crash injuring occupant, sequela -V9502XA Forced landing of helicopter injuring occupant, initial encounter -V9502XD Forced landing of helicopter injuring occupant, subsequent encounter -V9502XS Forced landing of helicopter injuring occupant, sequela -V9503XA Helicopter collision injuring occupant, initial encounter -V9503XD Helicopter collision injuring occupant, subsequent encounter -V9503XS Helicopter collision injuring occupant, sequela -V9504XA Helicopter fire injuring occupant, initial encounter -V9504XD Helicopter fire injuring occupant, subsequent encounter -V9504XS Helicopter fire injuring occupant, sequela -V9505XA Helicopter explosion injuring occupant, initial encounter -V9505XD Helicopter explosion injuring occupant, subsequent encounter -V9505XS Helicopter explosion injuring occupant, sequela -V9509XA Other helicopter accident injuring occupant, initial encounter -V9509XD Other helicopter accident injuring occupant, subsequent encounter -V9509XS Other helicopter accident injuring occupant, sequela -V9510XA Unspecified ultralight, microlight or powered-glider accident injuring occupant, initial encounter -V9510XD Unspecified ultralight, microlight or powered-glider accident injuring occupant, subsequent encounter -V9510XS Unspecified ultralight, microlight or powered-glider accident injuring occupant, sequela -V9511XA Ultralight, microlight or powered-glider crash injuring occupant, initial encounter -V9511XD Ultralight, microlight or powered-glider crash injuring occupant, subsequent encounter -V9511XS Ultralight, microlight or powered-glider crash injuring occupant, sequela -V9512XA Forced landing of ultralight, microlight or powered-glider injuring occupant, initial encounter -V9512XD Forced landing of ultralight, microlight or powered-glider injuring occupant, subsequent encounter -V9512XS Forced landing of ultralight, microlight or powered-glider injuring occupant, sequela -V9513XA Ultralight, microlight or powered-glider collision injuring occupant, initial encounter -V9513XD Ultralight, microlight or powered-glider collision injuring occupant, subsequent encounter -V9513XS Ultralight, microlight or powered-glider collision injuring occupant, sequela -V9514XA Ultralight, microlight or powered-glider fire injuring occupant, initial encounter -V9514XD Ultralight, microlight or powered-glider fire injuring occupant, subsequent encounter -V9514XS Ultralight, microlight or powered-glider fire injuring occupant, sequela -V9515XA Ultralight, microlight or powered-glider explosion injuring occupant, initial encounter -V9515XD Ultralight, microlight or powered-glider explosion injuring occupant, subsequent encounter -V9515XS Ultralight, microlight or powered-glider explosion injuring occupant, sequela -V9519XA Other ultralight, microlight or powered-glider accident injuring occupant, initial encounter -V9519XD Other ultralight, microlight or powered-glider accident injuring occupant, subsequent encounter -V9519XS Other ultralight, microlight or powered-glider accident injuring occupant, sequela -V9520XA Unspecified accident to other private fixed-wing aircraft, injuring occupant, initial encounter -V9520XD Unspecified accident to other private fixed-wing aircraft, injuring occupant, subsequent encounter -V9520XS Unspecified accident to other private fixed-wing aircraft, injuring occupant, sequela -V9521XA Other private fixed-wing aircraft crash injuring occupant, initial encounter -V9521XD Other private fixed-wing aircraft crash injuring occupant, subsequent encounter -V9521XS Other private fixed-wing aircraft crash injuring occupant, sequela -V9522XA Forced landing of other private fixed-wing aircraft injuring occupant, initial encounter -V9522XD Forced landing of other private fixed-wing aircraft injuring occupant, subsequent encounter -V9522XS Forced landing of other private fixed-wing aircraft injuring occupant, sequela -V9523XA Other private fixed-wing aircraft collision injuring occupant, initial encounter -V9523XD Other private fixed-wing aircraft collision injuring occupant, subsequent encounter -V9523XS Other private fixed-wing aircraft collision injuring occupant, sequela -V9524XA Other private fixed-wing aircraft fire injuring occupant, initial encounter -V9524XD Other private fixed-wing aircraft fire injuring occupant, subsequent encounter -V9524XS Other private fixed-wing aircraft fire injuring occupant, sequela -V9525XA Other private fixed-wing aircraft explosion injuring occupant, initial encounter -V9525XD Other private fixed-wing aircraft explosion injuring occupant, subsequent encounter -V9525XS Other private fixed-wing aircraft explosion injuring occupant, sequela -V9529XA Other accident to other private fixed-wing aircraft injuring occupant, initial encounter -V9529XD Other accident to other private fixed-wing aircraft injuring occupant, subsequent encounter -V9529XS Other accident to other private fixed-wing aircraft injuring occupant, sequela -V9530XA Unspecified accident to commercial fixed-wing aircraft injuring occupant, initial encounter -V9530XD Unspecified accident to commercial fixed-wing aircraft injuring occupant, subsequent encounter -V9530XS Unspecified accident to commercial fixed-wing aircraft injuring occupant, sequela -V9531XA Commercial fixed-wing aircraft crash injuring occupant, initial encounter -V9531XD Commercial fixed-wing aircraft crash injuring occupant, subsequent encounter -V9531XS Commercial fixed-wing aircraft crash injuring occupant, sequela -V9532XA Forced landing of commercial fixed-wing aircraft injuring occupant, initial encounter -V9532XD Forced landing of commercial fixed-wing aircraft injuring occupant, subsequent encounter -V9532XS Forced landing of commercial fixed-wing aircraft injuring occupant, sequela -V9533XA Commercial fixed-wing aircraft collision injuring occupant, initial encounter -V9533XD Commercial fixed-wing aircraft collision injuring occupant, subsequent encounter -V9533XS Commercial fixed-wing aircraft collision injuring occupant, sequela -V9534XA Commercial fixed-wing aircraft fire injuring occupant, initial encounter -V9534XD Commercial fixed-wing aircraft fire injuring occupant, subsequent encounter -V9534XS Commercial fixed-wing aircraft fire injuring occupant, sequela -V9535XA Commercial fixed-wing aircraft explosion injuring occupant, initial encounter -V9535XD Commercial fixed-wing aircraft explosion injuring occupant, subsequent encounter -V9535XS Commercial fixed-wing aircraft explosion injuring occupant, sequela -V9539XA Other accident to commercial fixed-wing aircraft injuring occupant, initial encounter -V9539XD Other accident to commercial fixed-wing aircraft injuring occupant, subsequent encounter -V9539XS Other accident to commercial fixed-wing aircraft injuring occupant, sequela -V9540XA Unspecified spacecraft accident injuring occupant, initial encounter -V9540XD Unspecified spacecraft accident injuring occupant, subsequent encounter -V9540XS Unspecified spacecraft accident injuring occupant, sequela -V9541XA Spacecraft crash injuring occupant, initial encounter -V9541XD Spacecraft crash injuring occupant, subsequent encounter -V9541XS Spacecraft crash injuring occupant, sequela -V9542XA Forced landing of spacecraft injuring occupant, initial encounter -V9542XD Forced landing of spacecraft injuring occupant, subsequent encounter -V9542XS Forced landing of spacecraft injuring occupant, sequela -V9543XA Spacecraft collision injuring occupant, initial encounter -V9543XD Spacecraft collision injuring occupant, subsequent encounter -V9543XS Spacecraft collision injuring occupant, sequela -V9544XA Spacecraft fire injuring occupant, initial encounter -V9544XD Spacecraft fire injuring occupant, subsequent encounter -V9544XS Spacecraft fire injuring occupant, sequela -V9545XA Spacecraft explosion injuring occupant, initial encounter -V9545XD Spacecraft explosion injuring occupant, subsequent encounter -V9545XS Spacecraft explosion injuring occupant, sequela -V9549XA Other spacecraft accident injuring occupant, initial encounter -V9549XD Other spacecraft accident injuring occupant, subsequent encounter -V9549XS Other spacecraft accident injuring occupant, sequela -V958XXA Other powered aircraft accidents injuring occupant, initial encounter -V958XXD Other powered aircraft accidents injuring occupant, subsequent encounter -V958XXS Other powered aircraft accidents injuring occupant, sequela -V959XXA Unspecified aircraft accident injuring occupant, initial encounter -V959XXD Unspecified aircraft accident injuring occupant, subsequent encounter -V959XXS Unspecified aircraft accident injuring occupant, sequela -V9600XA Unspecified balloon accident injuring occupant, initial encounter -V9600XD Unspecified balloon accident injuring occupant, subsequent encounter -V9600XS Unspecified balloon accident injuring occupant, sequela -V9601XA Balloon crash injuring occupant, initial encounter -V9601XD Balloon crash injuring occupant, subsequent encounter -V9601XS Balloon crash injuring occupant, sequela -V9602XA Forced landing of balloon injuring occupant, initial encounter -V9602XD Forced landing of balloon injuring occupant, subsequent encounter -V9602XS Forced landing of balloon injuring occupant, sequela -V9603XA Balloon collision injuring occupant, initial encounter -V9603XD Balloon collision injuring occupant, subsequent encounter -V9603XS Balloon collision injuring occupant, sequela -V9604XA Balloon fire injuring occupant, initial encounter -V9604XD Balloon fire injuring occupant, subsequent encounter -V9604XS Balloon fire injuring occupant, sequela -V9605XA Balloon explosion injuring occupant, initial encounter -V9605XD Balloon explosion injuring occupant, subsequent encounter -V9605XS Balloon explosion injuring occupant, sequela -V9609XA Other balloon accident injuring occupant, initial encounter -V9609XD Other balloon accident injuring occupant, subsequent encounter -V9609XS Other balloon accident injuring occupant, sequela -V9610XA Unspecified hang-glider accident injuring occupant, initial encounter -V9610XD Unspecified hang-glider accident injuring occupant, subsequent encounter -V9610XS Unspecified hang-glider accident injuring occupant, sequela -V9611XA Hang-glider crash injuring occupant, initial encounter -V9611XD Hang-glider crash injuring occupant, subsequent encounter -V9611XS Hang-glider crash injuring occupant, sequela -V9612XA Forced landing of hang-glider injuring occupant, initial encounter -V9612XD Forced landing of hang-glider injuring occupant, subsequent encounter -V9612XS Forced landing of hang-glider injuring occupant, sequela -V9613XA Hang-glider collision injuring occupant, initial encounter -V9613XD Hang-glider collision injuring occupant, subsequent encounter -V9613XS Hang-glider collision injuring occupant, sequela -V9614XA Hang-glider fire injuring occupant, initial encounter -V9614XD Hang-glider fire injuring occupant, subsequent encounter -V9614XS Hang-glider fire injuring occupant, sequela -V9615XA Hang-glider explosion injuring occupant, initial encounter -V9615XD Hang-glider explosion injuring occupant, subsequent encounter -V9615XS Hang-glider explosion injuring occupant, sequela -V9619XA Other hang-glider accident injuring occupant, initial encounter -V9619XD Other hang-glider accident injuring occupant, subsequent encounter -V9619XS Other hang-glider accident injuring occupant, sequela -V9620XA Unspecified glider (nonpowered) accident injuring occupant, initial encounter -V9620XD Unspecified glider (nonpowered) accident injuring occupant, subsequent encounter -V9620XS Unspecified glider (nonpowered) accident injuring occupant, sequela -V9621XA Glider (nonpowered) crash injuring occupant, initial encounter -V9621XD Glider (nonpowered) crash injuring occupant, subsequent encounter -V9621XS Glider (nonpowered) crash injuring occupant, sequela -V9622XA Forced landing of glider (nonpowered) injuring occupant, initial encounter -V9622XD Forced landing of glider (nonpowered) injuring occupant, subsequent encounter -V9622XS Forced landing of glider (nonpowered) injuring occupant, sequela -V9623XA Glider (nonpowered) collision injuring occupant, initial encounter -V9623XD Glider (nonpowered) collision injuring occupant, subsequent encounter -V9623XS Glider (nonpowered) collision injuring occupant, sequela -V9624XA Glider (nonpowered) fire injuring occupant, initial encounter -V9624XD Glider (nonpowered) fire injuring occupant, subsequent encounter -V9624XS Glider (nonpowered) fire injuring occupant, sequela -V9625XA Glider (nonpowered) explosion injuring occupant, initial encounter -V9625XD Glider (nonpowered) explosion injuring occupant, subsequent encounter -V9625XS Glider (nonpowered) explosion injuring occupant, sequela -V9629XA Other glider (nonpowered) accident injuring occupant, initial encounter -V9629XD Other glider (nonpowered) accident injuring occupant, subsequent encounter -V9629XS Other glider (nonpowered) accident injuring occupant, sequela -V968XXA Other nonpowered-aircraft accidents injuring occupant, initial encounter -V968XXD Other nonpowered-aircraft accidents injuring occupant, subsequent encounter -V968XXS Other nonpowered-aircraft accidents injuring occupant, sequela -V969XXA Unspecified nonpowered-aircraft accident injuring occupant, initial encounter -V969XXD Unspecified nonpowered-aircraft accident injuring occupant, subsequent encounter -V969XXS Unspecified nonpowered-aircraft accident injuring occupant, sequela -V970XXA Occupant of aircraft injured in other specified air transport accidents, initial encounter -V970XXD Occupant of aircraft injured in other specified air transport accidents, subsequent encounter -V970XXS Occupant of aircraft injured in other specified air transport accidents, sequela -V971XXA Person injured while boarding or alighting from aircraft, initial encounter -V971XXD Person injured while boarding or alighting from aircraft, subsequent encounter -V971XXS Person injured while boarding or alighting from aircraft, sequela -V9721XA Parachutist entangled in object, initial encounter -V9721XD Parachutist entangled in object, subsequent encounter -V9721XS Parachutist entangled in object, sequela -V9722XA Parachutist injured on landing, initial encounter -V9722XD Parachutist injured on landing, subsequent encounter -V9722XS Parachutist injured on landing, sequela -V9729XA Other parachutist accident, initial encounter -V9729XD Other parachutist accident, subsequent encounter -V9729XS Other parachutist accident, sequela -V9731XA Hit by object falling from aircraft, initial encounter -V9731XD Hit by object falling from aircraft, subsequent encounter -V9731XS Hit by object falling from aircraft, sequela -V9732XA Injured by rotating propeller, initial encounter -V9732XD Injured by rotating propeller, subsequent encounter -V9732XS Injured by rotating propeller, sequela -V9733XA Sucked into jet engine, initial encounter -V9733XD Sucked into jet engine, subsequent encounter -V9733XS Sucked into jet engine, sequela -V9739XA Other injury to person on ground due to air transport accident, initial encounter -V9739XD Other injury to person on ground due to air transport accident, subsequent encounter -V9739XS Other injury to person on ground due to air transport accident, sequela -V97810A Civilian aircraft involved in air transport accident with military aircraft, initial encounter -V97810D Civilian aircraft involved in air transport accident with military aircraft, subsequent encounter -V97810S Civilian aircraft involved in air transport accident with military aircraft, sequela -V97811A Civilian injured by military aircraft, initial encounter -V97811D Civilian injured by military aircraft, subsequent encounter -V97811S Civilian injured by military aircraft, sequela -V97818A Other air transport accident involving military aircraft, initial encounter -V97818D Other air transport accident involving military aircraft, subsequent encounter -V97818S Other air transport accident involving military aircraft, sequela -V9789XA Other air transport accidents, not elsewhere classified, initial encounter -V9789XD Other air transport accidents, not elsewhere classified, subsequent encounter -V9789XS Other air transport accidents, not elsewhere classified, sequela -V980XXA Accident to, on or involving cable-car, not on rails, initial encounter -V980XXD Accident to, on or involving cable-car, not on rails, subsequent encounter -V980XXS Accident to, on or involving cable-car, not on rails, sequela -V981XXA Accident to, on or involving land-yacht, initial encounter -V981XXD Accident to, on or involving land-yacht, subsequent encounter -V981XXS Accident to, on or involving land-yacht, sequela -V982XXA Accident to, on or involving ice yacht, initial encounter -V982XXD Accident to, on or involving ice yacht, subsequent encounter -V982XXS Accident to, on or involving ice yacht, sequela -V983XXA Accident to, on or involving ski lift, initial encounter -V983XXD Accident to, on or involving ski lift, subsequent encounter -V983XXS Accident to, on or involving ski lift, sequela -V988XXA Other specified transport accidents, initial encounter -V988XXD Other specified transport accidents, subsequent encounter -V988XXS Other specified transport accidents, sequela -V99XXXA Unspecified transport accident, initial encounter -V99XXXD Unspecified transport accident, subsequent encounter -V99XXXS Unspecified transport accident, sequela -W000XXA Fall on same level due to ice and snow, initial encounter -W000XXD Fall on same level due to ice and snow, subsequent encounter -W000XXS Fall on same level due to ice and snow, sequela -W001XXA Fall from stairs and steps due to ice and snow, initial encounter -W001XXD Fall from stairs and steps due to ice and snow, subsequent encounter -W001XXS Fall from stairs and steps due to ice and snow, sequela -W002XXA Other fall from one level to another due to ice and snow, initial encounter -W002XXD Other fall from one level to another due to ice and snow, subsequent encounter -W002XXS Other fall from one level to another due to ice and snow, sequela -W009XXA Unspecified fall due to ice and snow, initial encounter -W009XXD Unspecified fall due to ice and snow, subsequent encounter -W009XXS Unspecified fall due to ice and snow, sequela -W010XXA Fall on same level from slipping, tripping and stumbling without subsequent striking against object, initial encounter -W010XXD Fall on same level from slipping, tripping and stumbling without subsequent striking against object, subsequent encounter -W010XXS Fall on same level from slipping, tripping and stumbling without subsequent striking against object, sequela -W0110XA Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified object, initial encounter -W0110XD Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified object, subsequent encounter -W0110XS Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified object, sequela -W01110A Fall on same level from slipping, tripping and stumbling with subsequent striking against sharp glass, initial encounter -W01110D Fall on same level from slipping, tripping and stumbling with subsequent striking against sharp glass, subsequent encounter -W01110S Fall on same level from slipping, tripping and stumbling with subsequent striking against sharp glass, sequela -W01111A Fall on same level from slipping, tripping and stumbling with subsequent striking against power tool or machine, initial encounter -W01111D Fall on same level from slipping, tripping and stumbling with subsequent striking against power tool or machine, subsequent encounter -W01111S Fall on same level from slipping, tripping and stumbling with subsequent striking against power tool or machine, sequela -W01118A Fall on same level from slipping, tripping and stumbling with subsequent striking against other sharp object, initial encounter -W01118D Fall on same level from slipping, tripping and stumbling with subsequent striking against other sharp object, subsequent encounter -W01118S Fall on same level from slipping, tripping and stumbling with subsequent striking against other sharp object, sequela -W01119A Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified sharp object, initial encounter -W01119D Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified sharp object, subsequent encounter -W01119S Fall on same level from slipping, tripping and stumbling with subsequent striking against unspecified sharp object, sequela -W01190A Fall on same level from slipping, tripping and stumbling with subsequent striking against furniture, initial encounter -W01190D Fall on same level from slipping, tripping and stumbling with subsequent striking against furniture, subsequent encounter -W01190S Fall on same level from slipping, tripping and stumbling with subsequent striking against furniture, sequela -W01198A Fall on same level from slipping, tripping and stumbling with subsequent striking against other object, initial encounter -W01198D Fall on same level from slipping, tripping and stumbling with subsequent striking against other object, subsequent encounter -W01198S Fall on same level from slipping, tripping and stumbling with subsequent striking against other object, sequela -W03XXXA Other fall on same level due to collision with another person, initial encounter -W03XXXD Other fall on same level due to collision with another person, subsequent encounter -W03XXXS Other fall on same level due to collision with another person, sequela -W04XXXA Fall while being carried or supported by other persons, initial encounter -W04XXXD Fall while being carried or supported by other persons, subsequent encounter -W04XXXS Fall while being carried or supported by other persons, sequela -W050XXA Fall from non-moving wheelchair, initial encounter -W050XXD Fall from non-moving wheelchair, subsequent encounter -W050XXS Fall from non-moving wheelchair, sequela -W051XXA Fall from non-moving nonmotorized scooter, initial encounter -W051XXD Fall from non-moving nonmotorized scooter, subsequent encounter -W051XXS Fall from non-moving nonmotorized scooter, sequela -W052XXA Fall from non-moving motorized mobility scooter, initial encounter -W052XXD Fall from non-moving motorized mobility scooter, subsequent encounter -W052XXS Fall from non-moving motorized mobility scooter, sequela -W06XXXA Fall from bed, initial encounter -W06XXXD Fall from bed, subsequent encounter -W06XXXS Fall from bed, sequela -W07XXXA Fall from chair, initial encounter -W07XXXD Fall from chair, subsequent encounter -W07XXXS Fall from chair, sequela -W08XXXA Fall from other furniture, initial encounter -W08XXXD Fall from other furniture, subsequent encounter -W08XXXS Fall from other furniture, sequela -W090XXA Fall on or from playground slide, initial encounter -W090XXD Fall on or from playground slide, subsequent encounter -W090XXS Fall on or from playground slide, sequela -W091XXA Fall from playground swing, initial encounter -W091XXD Fall from playground swing, subsequent encounter -W091XXS Fall from playground swing, sequela -W092XXA Fall on or from jungle gym, initial encounter -W092XXD Fall on or from jungle gym, subsequent encounter -W092XXS Fall on or from jungle gym, sequela -W098XXA Fall on or from other playground equipment, initial encounter -W098XXD Fall on or from other playground equipment, subsequent encounter -W098XXS Fall on or from other playground equipment, sequela -W100XXA Fall (on)(from) escalator, initial encounter -W100XXD Fall (on)(from) escalator, subsequent encounter -W100XXS Fall (on)(from) escalator, sequela -W101XXA Fall (on)(from) sidewalk curb, initial encounter -W101XXD Fall (on)(from) sidewalk curb, subsequent encounter -W101XXS Fall (on)(from) sidewalk curb, sequela -W102XXA Fall (on)(from) incline, initial encounter -W102XXD Fall (on)(from) incline, subsequent encounter -W102XXS Fall (on)(from) incline, sequela -W108XXA Fall (on) (from) other stairs and steps, initial encounter -W108XXD Fall (on) (from) other stairs and steps, subsequent encounter -W108XXS Fall (on) (from) other stairs and steps, sequela -W109XXA Fall (on) (from) unspecified stairs and steps, initial encounter -W109XXD Fall (on) (from) unspecified stairs and steps, subsequent encounter -W109XXS Fall (on) (from) unspecified stairs and steps, sequela -W11XXXA Fall on and from ladder, initial encounter -W11XXXD Fall on and from ladder, subsequent encounter -W11XXXS Fall on and from ladder, sequela -W12XXXA Fall on and from scaffolding, initial encounter -W12XXXD Fall on and from scaffolding, subsequent encounter -W12XXXS Fall on and from scaffolding, sequela -W130XXA Fall from, out of or through balcony, initial encounter -W130XXD Fall from, out of or through balcony, subsequent encounter -W130XXS Fall from, out of or through balcony, sequela -W131XXA Fall from, out of or through bridge, initial encounter -W131XXD Fall from, out of or through bridge, subsequent encounter -W131XXS Fall from, out of or through bridge, sequela -W132XXA Fall from, out of or through roof, initial encounter -W132XXD Fall from, out of or through roof, subsequent encounter -W132XXS Fall from, out of or through roof, sequela -W133XXA Fall through floor, initial encounter -W133XXD Fall through floor, subsequent encounter -W133XXS Fall through floor, sequela -W134XXA Fall from, out of or through window, initial encounter -W134XXD Fall from, out of or through window, subsequent encounter -W134XXS Fall from, out of or through window, sequela -W138XXA Fall from, out of or through other building or structure, initial encounter -W138XXD Fall from, out of or through other building or structure, subsequent encounter -W138XXS Fall from, out of or through other building or structure, sequela -W139XXA Fall from, out of or through building, not otherwise specified, initial encounter -W139XXD Fall from, out of or through building, not otherwise specified, subsequent encounter -W139XXS Fall from, out of or through building, not otherwise specified, sequela -W14XXXA Fall from tree, initial encounter -W14XXXD Fall from tree, subsequent encounter -W14XXXS Fall from tree, sequela -W15XXXA Fall from cliff, initial encounter -W15XXXD Fall from cliff, subsequent encounter -W15XXXS Fall from cliff, sequela -W16011A Fall into swimming pool striking water surface causing drowning and submersion, initial encounter -W16011D Fall into swimming pool striking water surface causing drowning and submersion, subsequent encounter -W16011S Fall into swimming pool striking water surface causing drowning and submersion, sequela -W16012A Fall into swimming pool striking water surface causing other injury, initial encounter -W16012D Fall into swimming pool striking water surface causing other injury, subsequent encounter -W16012S Fall into swimming pool striking water surface causing other injury, sequela -W16021A Fall into swimming pool striking bottom causing drowning and submersion, initial encounter -W16021D Fall into swimming pool striking bottom causing drowning and submersion, subsequent encounter -W16021S Fall into swimming pool striking bottom causing drowning and submersion, sequela -W16022A Fall into swimming pool striking bottom causing other injury, initial encounter -W16022D Fall into swimming pool striking bottom causing other injury, subsequent encounter -W16022S Fall into swimming pool striking bottom causing other injury, sequela -W16031A Fall into swimming pool striking wall causing drowning and submersion, initial encounter -W16031D Fall into swimming pool striking wall causing drowning and submersion, subsequent encounter -W16031S Fall into swimming pool striking wall causing drowning and submersion, sequela -W16032A Fall into swimming pool striking wall causing other injury, initial encounter -W16032D Fall into swimming pool striking wall causing other injury, subsequent encounter -W16032S Fall into swimming pool striking wall causing other injury, sequela -W16111A Fall into natural body of water striking water surface causing drowning and submersion, initial encounter -W16111D Fall into natural body of water striking water surface causing drowning and submersion, subsequent encounter -W16111S Fall into natural body of water striking water surface causing drowning and submersion, sequela -W16112A Fall into natural body of water striking water surface causing other injury, initial encounter -W16112D Fall into natural body of water striking water surface causing other injury, subsequent encounter -W16112S Fall into natural body of water striking water surface causing other injury, sequela -W16121A Fall into natural body of water striking bottom causing drowning and submersion, initial encounter -W16121D Fall into natural body of water striking bottom causing drowning and submersion, subsequent encounter -W16121S Fall into natural body of water striking bottom causing drowning and submersion, sequela -W16122A Fall into natural body of water striking bottom causing other injury, initial encounter -W16122D Fall into natural body of water striking bottom causing other injury, subsequent encounter -W16122S Fall into natural body of water striking bottom causing other injury, sequela -W16131A Fall into natural body of water striking side causing drowning and submersion, initial encounter -W16131D Fall into natural body of water striking side causing drowning and submersion, subsequent encounter -W16131S Fall into natural body of water striking side causing drowning and submersion, sequela -W16132A Fall into natural body of water striking side causing other injury, initial encounter -W16132D Fall into natural body of water striking side causing other injury, subsequent encounter -W16132S Fall into natural body of water striking side causing other injury, sequela -W16211A Fall in (into) filled bathtub causing drowning and submersion, initial encounter -W16211D Fall in (into) filled bathtub causing drowning and submersion, subsequent encounter -W16211S Fall in (into) filled bathtub causing drowning and submersion, sequela -W16212A Fall in (into) filled bathtub causing other injury, initial encounter -W16212D Fall in (into) filled bathtub causing other injury, subsequent encounter -W16212S Fall in (into) filled bathtub causing other injury, sequela -W16221A Fall in (into) bucket of water causing drowning and submersion, initial encounter -W16221D Fall in (into) bucket of water causing drowning and submersion, subsequent encounter -W16221S Fall in (into) bucket of water causing drowning and submersion, sequela -W16222A Fall in (into) bucket of water causing other injury, initial encounter -W16222D Fall in (into) bucket of water causing other injury, subsequent encounter -W16222S Fall in (into) bucket of water causing other injury, sequela -W16311A Fall into other water striking water surface causing drowning and submersion, initial encounter -W16311D Fall into other water striking water surface causing drowning and submersion, subsequent encounter -W16311S Fall into other water striking water surface causing drowning and submersion, sequela -W16312A Fall into other water striking water surface causing other injury, initial encounter -W16312D Fall into other water striking water surface causing other injury, subsequent encounter -W16312S Fall into other water striking water surface causing other injury, sequela -W16321A Fall into other water striking bottom causing drowning and submersion, initial encounter -W16321D Fall into other water striking bottom causing drowning and submersion, subsequent encounter -W16321S Fall into other water striking bottom causing drowning and submersion, sequela -W16322A Fall into other water striking bottom causing other injury, initial encounter -W16322D Fall into other water striking bottom causing other injury, subsequent encounter -W16322S Fall into other water striking bottom causing other injury, sequela -W16331A Fall into other water striking wall causing drowning and submersion, initial encounter -W16331D Fall into other water striking wall causing drowning and submersion, subsequent encounter -W16331S Fall into other water striking wall causing drowning and submersion, sequela -W16332A Fall into other water striking wall causing other injury, initial encounter -W16332D Fall into other water striking wall causing other injury, subsequent encounter -W16332S Fall into other water striking wall causing other injury, sequela -W1641XA Fall into unspecified water causing drowning and submersion, initial encounter -W1641XD Fall into unspecified water causing drowning and submersion, subsequent encounter -W1641XS Fall into unspecified water causing drowning and submersion, sequela -W1642XA Fall into unspecified water causing other injury, initial encounter -W1642XD Fall into unspecified water causing other injury, subsequent encounter -W1642XS Fall into unspecified water causing other injury, sequela -W16511A Jumping or diving into swimming pool striking water surface causing drowning and submersion, initial encounter -W16511D Jumping or diving into swimming pool striking water surface causing drowning and submersion, subsequent encounter -W16511S Jumping or diving into swimming pool striking water surface causing drowning and submersion, sequela -W16512A Jumping or diving into swimming pool striking water surface causing other injury, initial encounter -W16512D Jumping or diving into swimming pool striking water surface causing other injury, subsequent encounter -W16512S Jumping or diving into swimming pool striking water surface causing other injury, sequela -W16521A Jumping or diving into swimming pool striking bottom causing drowning and submersion, initial encounter -W16521D Jumping or diving into swimming pool striking bottom causing drowning and submersion, subsequent encounter -W16521S Jumping or diving into swimming pool striking bottom causing drowning and submersion, sequela -W16522A Jumping or diving into swimming pool striking bottom causing other injury, initial encounter -W16522D Jumping or diving into swimming pool striking bottom causing other injury, subsequent encounter -W16522S Jumping or diving into swimming pool striking bottom causing other injury, sequela -W16531A Jumping or diving into swimming pool striking wall causing drowning and submersion, initial encounter -W16531D Jumping or diving into swimming pool striking wall causing drowning and submersion, subsequent encounter -W16531S Jumping or diving into swimming pool striking wall causing drowning and submersion, sequela -W16532A Jumping or diving into swimming pool striking wall causing other injury, initial encounter -W16532D Jumping or diving into swimming pool striking wall causing other injury, subsequent encounter -W16532S Jumping or diving into swimming pool striking wall causing other injury, sequela -W16611A Jumping or diving into natural body of water striking water surface causing drowning and submersion, initial encounter -W16611D Jumping or diving into natural body of water striking water surface causing drowning and submersion, subsequent encounter -W16611S Jumping or diving into natural body of water striking water surface causing drowning and submersion, sequela -W16612A Jumping or diving into natural body of water striking water surface causing other injury, initial encounter -W16612D Jumping or diving into natural body of water striking water surface causing other injury, subsequent encounter -W16612S Jumping or diving into natural body of water striking water surface causing other injury, sequela -W16621A Jumping or diving into natural body of water striking bottom causing drowning and submersion, initial encounter -W16621D Jumping or diving into natural body of water striking bottom causing drowning and submersion, subsequent encounter -W16621S Jumping or diving into natural body of water striking bottom causing drowning and submersion, sequela -W16622A Jumping or diving into natural body of water striking bottom causing other injury, initial encounter -W16622D Jumping or diving into natural body of water striking bottom causing other injury, subsequent encounter -W16622S Jumping or diving into natural body of water striking bottom causing other injury, sequela -W16711A Jumping or diving from boat striking water surface causing drowning and submersion, initial encounter -W16711D Jumping or diving from boat striking water surface causing drowning and submersion, subsequent encounter -W16711S Jumping or diving from boat striking water surface causing drowning and submersion, sequela -W16712A Jumping or diving from boat striking water surface causing other injury, initial encounter -W16712D Jumping or diving from boat striking water surface causing other injury, subsequent encounter -W16712S Jumping or diving from boat striking water surface causing other injury, sequela -W16721A Jumping or diving from boat striking bottom causing drowning and submersion, initial encounter -W16721D Jumping or diving from boat striking bottom causing drowning and submersion, subsequent encounter -W16721S Jumping or diving from boat striking bottom causing drowning and submersion, sequela -W16722A Jumping or diving from boat striking bottom causing other injury, initial encounter -W16722D Jumping or diving from boat striking bottom causing other injury, subsequent encounter -W16722S Jumping or diving from boat striking bottom causing other injury, sequela -W16811A Jumping or diving into other water striking water surface causing drowning and submersion, initial encounter -W16811D Jumping or diving into other water striking water surface causing drowning and submersion, subsequent encounter -W16811S Jumping or diving into other water striking water surface causing drowning and submersion, sequela -W16812A Jumping or diving into other water striking water surface causing other injury, initial encounter -W16812D Jumping or diving into other water striking water surface causing other injury, subsequent encounter -W16812S Jumping or diving into other water striking water surface causing other injury, sequela -W16821A Jumping or diving into other water striking bottom causing drowning and submersion, initial encounter -W16821D Jumping or diving into other water striking bottom causing drowning and submersion, subsequent encounter -W16821S Jumping or diving into other water striking bottom causing drowning and submersion, sequela -W16822A Jumping or diving into other water striking bottom causing other injury, initial encounter -W16822D Jumping or diving into other water striking bottom causing other injury, subsequent encounter -W16822S Jumping or diving into other water striking bottom causing other injury, sequela -W16831A Jumping or diving into other water striking wall causing drowning and submersion, initial encounter -W16831D Jumping or diving into other water striking wall causing drowning and submersion, subsequent encounter -W16831S Jumping or diving into other water striking wall causing drowning and submersion, sequela -W16832A Jumping or diving into other water striking wall causing other injury, initial encounter -W16832D Jumping or diving into other water striking wall causing other injury, subsequent encounter -W16832S Jumping or diving into other water striking wall causing other injury, sequela -W1691XA Jumping or diving into unspecified water causing drowning and submersion, initial encounter -W1691XD Jumping or diving into unspecified water causing drowning and submersion, subsequent encounter -W1691XS Jumping or diving into unspecified water causing drowning and submersion, sequela -W1692XA Jumping or diving into unspecified water causing other injury, initial encounter -W1692XD Jumping or diving into unspecified water causing other injury, subsequent encounter -W1692XS Jumping or diving into unspecified water causing other injury, sequela -W170XXA Fall into well, initial encounter -W170XXD Fall into well, subsequent encounter -W170XXS Fall into well, sequela -W171XXA Fall into storm drain or manhole, initial encounter -W171XXD Fall into storm drain or manhole, subsequent encounter -W171XXS Fall into storm drain or manhole, sequela -W172XXA Fall into hole, initial encounter -W172XXD Fall into hole, subsequent encounter -W172XXS Fall into hole, sequela -W173XXA Fall into empty swimming pool, initial encounter -W173XXD Fall into empty swimming pool, subsequent encounter -W173XXS Fall into empty swimming pool, sequela -W174XXA Fall from dock, initial encounter -W174XXD Fall from dock, subsequent encounter -W174XXS Fall from dock, sequela -W1781XA Fall down embankment (hill), initial encounter -W1781XD Fall down embankment (hill), subsequent encounter -W1781XS Fall down embankment (hill), sequela -W1782XA Fall from (out of) grocery cart, initial encounter -W1782XD Fall from (out of) grocery cart, subsequent encounter -W1782XS Fall from (out of) grocery cart, sequela -W1789XA Other fall from one level to another, initial encounter -W1789XD Other fall from one level to another, subsequent encounter -W1789XS Other fall from one level to another, sequela -W1800XA Striking against unspecified object with subsequent fall, initial encounter -W1800XD Striking against unspecified object with subsequent fall, subsequent encounter -W1800XS Striking against unspecified object with subsequent fall, sequela -W1801XA Striking against sports equipment with subsequent fall, initial encounter -W1801XD Striking against sports equipment with subsequent fall, subsequent encounter -W1801XS Striking against sports equipment with subsequent fall, sequela -W1802XA Striking against glass with subsequent fall, initial encounter -W1802XD Striking against glass with subsequent fall, subsequent encounter -W1802XS Striking against glass with subsequent fall, sequela -W1809XA Striking against other object with subsequent fall, initial encounter -W1809XD Striking against other object with subsequent fall, subsequent encounter -W1809XS Striking against other object with subsequent fall, sequela -W1811XA Fall from or off toilet without subsequent striking against object, initial encounter -W1811XD Fall from or off toilet without subsequent striking against object, subsequent encounter -W1811XS Fall from or off toilet without subsequent striking against object, sequela -W1812XA Fall from or off toilet with subsequent striking against object, initial encounter -W1812XD Fall from or off toilet with subsequent striking against object, subsequent encounter -W1812XS Fall from or off toilet with subsequent striking against object, sequela -W182XXA Fall in (into) shower or empty bathtub, initial encounter -W182XXD Fall in (into) shower or empty bathtub, subsequent encounter -W182XXS Fall in (into) shower or empty bathtub, sequela -W1830XA Fall on same level, unspecified, initial encounter -W1830XD Fall on same level, unspecified, subsequent encounter -W1830XS Fall on same level, unspecified, sequela -W1831XA Fall on same level due to stepping on an object, initial encounter -W1831XD Fall on same level due to stepping on an object, subsequent encounter -W1831XS Fall on same level due to stepping on an object, sequela -W1839XA Other fall on same level, initial encounter -W1839XD Other fall on same level, subsequent encounter -W1839XS Other fall on same level, sequela -W1840XA Slipping, tripping and stumbling without falling, unspecified, initial encounter -W1840XD Slipping, tripping and stumbling without falling, unspecified, subsequent encounter -W1840XS Slipping, tripping and stumbling without falling, unspecified, sequela -W1841XA Slipping, tripping and stumbling without falling due to stepping on object, initial encounter -W1841XD Slipping, tripping and stumbling without falling due to stepping on object, subsequent encounter -W1841XS Slipping, tripping and stumbling without falling due to stepping on object, sequela -W1842XA Slipping, tripping and stumbling without falling due to stepping into hole or opening, initial encounter -W1842XD Slipping, tripping and stumbling without falling due to stepping into hole or opening, subsequent encounter -W1842XS Slipping, tripping and stumbling without falling due to stepping into hole or opening, sequela -W1843XA Slipping, tripping and stumbling without falling due to stepping from one level to another, initial encounter -W1843XD Slipping, tripping and stumbling without falling due to stepping from one level to another, subsequent encounter -W1843XS Slipping, tripping and stumbling without falling due to stepping from one level to another, sequela -W1849XA Other slipping, tripping and stumbling without falling, initial encounter -W1849XD Other slipping, tripping and stumbling without falling, subsequent encounter -W1849XS Other slipping, tripping and stumbling without falling, sequela -W19XXXA Unspecified fall, initial encounter -W19XXXD Unspecified fall, subsequent encounter -W19XXXS Unspecified fall, sequela -W200XXA Struck by falling object in cave-in, initial encounter -W200XXD Struck by falling object in cave-in, subsequent encounter -W200XXS Struck by falling object in cave-in, sequela -W201XXA Struck by object due to collapse of building, initial encounter -W201XXD Struck by object due to collapse of building, subsequent encounter -W201XXS Struck by object due to collapse of building, sequela -W208XXA Other cause of strike by thrown, projected or falling object, initial encounter -W208XXD Other cause of strike by thrown, projected or falling object, subsequent encounter -W208XXS Other cause of strike by thrown, projected or falling object, sequela -W2100XA Struck by hit or thrown ball, unspecified type, initial encounter -W2100XD Struck by hit or thrown ball, unspecified type, subsequent encounter -W2100XS Struck by hit or thrown ball, unspecified type, sequela -W2101XA Struck by football, initial encounter -W2101XD Struck by football, subsequent encounter -W2101XS Struck by football, sequela -W2102XA Struck by soccer ball, initial encounter -W2102XD Struck by soccer ball, subsequent encounter -W2102XS Struck by soccer ball, sequela -W2103XA Struck by baseball, initial encounter -W2103XD Struck by baseball, subsequent encounter -W2103XS Struck by baseball, sequela -W2104XA Struck by golf ball, initial encounter -W2104XD Struck by golf ball, subsequent encounter -W2104XS Struck by golf ball, sequela -W2105XA Struck by basketball, initial encounter -W2105XD Struck by basketball, subsequent encounter -W2105XS Struck by basketball, sequela -W2106XA Struck by volleyball, initial encounter -W2106XD Struck by volleyball, subsequent encounter -W2106XS Struck by volleyball, sequela -W2107XA Struck by softball, initial encounter -W2107XD Struck by softball, subsequent encounter -W2107XS Struck by softball, sequela -W2109XA Struck by other hit or thrown ball, initial encounter -W2109XD Struck by other hit or thrown ball, subsequent encounter -W2109XS Struck by other hit or thrown ball, sequela -W2111XA Struck by baseball bat, initial encounter -W2111XD Struck by baseball bat, subsequent encounter -W2111XS Struck by baseball bat, sequela -W2112XA Struck by tennis racquet, initial encounter -W2112XD Struck by tennis racquet, subsequent encounter -W2112XS Struck by tennis racquet, sequela -W2113XA Struck by golf club, initial encounter -W2113XD Struck by golf club, subsequent encounter -W2113XS Struck by golf club, sequela -W2119XA Struck by other bat, racquet or club, initial encounter -W2119XD Struck by other bat, racquet or club, subsequent encounter -W2119XS Struck by other bat, racquet or club, sequela -W21210A Struck by ice hockey stick, initial encounter -W21210D Struck by ice hockey stick, subsequent encounter -W21210S Struck by ice hockey stick, sequela -W21211A Struck by field hockey stick, initial encounter -W21211D Struck by field hockey stick, subsequent encounter -W21211S Struck by field hockey stick, sequela -W21220A Struck by ice hockey puck, initial encounter -W21220D Struck by ice hockey puck, subsequent encounter -W21220S Struck by ice hockey puck, sequela -W21221A Struck by field hockey puck, initial encounter -W21221D Struck by field hockey puck, subsequent encounter -W21221S Struck by field hockey puck, sequela -W2131XA Struck by shoe cleats, initial encounter -W2131XD Struck by shoe cleats, subsequent encounter -W2131XS Struck by shoe cleats, sequela -W2132XA Struck by skate blades, initial encounter -W2132XD Struck by skate blades, subsequent encounter -W2132XS Struck by skate blades, sequela -W2139XA Struck by other sports foot wear, initial encounter -W2139XD Struck by other sports foot wear, subsequent encounter -W2139XS Struck by other sports foot wear, sequela -W214XXA Striking against diving board, initial encounter -W214XXD Striking against diving board, subsequent encounter -W214XXS Striking against diving board, sequela -W2181XA Striking against or struck by football helmet, initial encounter -W2181XD Striking against or struck by football helmet, subsequent encounter -W2181XS Striking against or struck by football helmet, sequela -W2189XA Striking against or struck by other sports equipment, initial encounter -W2189XD Striking against or struck by other sports equipment, subsequent encounter -W2189XS Striking against or struck by other sports equipment, sequela -W219XXA Striking against or struck by unspecified sports equipment, initial encounter -W219XXD Striking against or struck by unspecified sports equipment, subsequent encounter -W219XXS Striking against or struck by unspecified sports equipment, sequela -W2201XA Walked into wall, initial encounter -W2201XD Walked into wall, subsequent encounter -W2201XS Walked into wall, sequela -W2202XA Walked into lamppost, initial encounter -W2202XD Walked into lamppost, subsequent encounter -W2202XS Walked into lamppost, sequela -W2203XA Walked into furniture, initial encounter -W2203XD Walked into furniture, subsequent encounter -W2203XS Walked into furniture, sequela -W22041A Striking against wall of swimming pool causing drowning and submersion, initial encounter -W22041D Striking against wall of swimming pool causing drowning and submersion, subsequent encounter -W22041S Striking against wall of swimming pool causing drowning and submersion, sequela -W22042A Striking against wall of swimming pool causing other injury, initial encounter -W22042D Striking against wall of swimming pool causing other injury, subsequent encounter -W22042S Striking against wall of swimming pool causing other injury, sequela -W2209XA Striking against other stationary object, initial encounter -W2209XD Striking against other stationary object, subsequent encounter -W2209XS Striking against other stationary object, sequela -W2210XA Striking against or struck by unspecified automobile airbag, initial encounter -W2210XD Striking against or struck by unspecified automobile airbag, subsequent encounter -W2210XS Striking against or struck by unspecified automobile airbag, sequela -W2211XA Striking against or struck by driver side automobile airbag, initial encounter -W2211XD Striking against or struck by driver side automobile airbag, subsequent encounter -W2211XS Striking against or struck by driver side automobile airbag, sequela -W2212XA Striking against or struck by front passenger side automobile airbag, initial encounter -W2212XD Striking against or struck by front passenger side automobile airbag, subsequent encounter -W2212XS Striking against or struck by front passenger side automobile airbag, sequela -W2219XA Striking against or struck by other automobile airbag, initial encounter -W2219XD Striking against or struck by other automobile airbag, subsequent encounter -W2219XS Striking against or struck by other automobile airbag, sequela -W228XXA Striking against or struck by other objects, initial encounter -W228XXD Striking against or struck by other objects, subsequent encounter -W228XXS Striking against or struck by other objects, sequela -W230XXA Caught, crushed, jammed, or pinched between moving objects, initial encounter -W230XXD Caught, crushed, jammed, or pinched between moving objects, subsequent encounter -W230XXS Caught, crushed, jammed, or pinched between moving objects, sequela -W231XXA Caught, crushed, jammed, or pinched between stationary objects, initial encounter -W231XXD Caught, crushed, jammed, or pinched between stationary objects, subsequent encounter -W231XXS Caught, crushed, jammed, or pinched between stationary objects, sequela -W240XXA Contact with lifting devices, not elsewhere classified, initial encounter -W240XXD Contact with lifting devices, not elsewhere classified, subsequent encounter -W240XXS Contact with lifting devices, not elsewhere classified, sequela -W241XXA Contact with transmission devices, not elsewhere classified, initial encounter -W241XXD Contact with transmission devices, not elsewhere classified, subsequent encounter -W241XXS Contact with transmission devices, not elsewhere classified, sequela -W25XXXA Contact with sharp glass, initial encounter -W25XXXD Contact with sharp glass, subsequent encounter -W25XXXS Contact with sharp glass, sequela -W260XXA Contact with knife, initial encounter -W260XXD Contact with knife, subsequent encounter -W260XXS Contact with knife, sequela -W261XXA Contact with sword or dagger, initial encounter -W261XXD Contact with sword or dagger, subsequent encounter -W261XXS Contact with sword or dagger, sequela -W262XXA Contact with edge of stiff paper, initial encounter -W262XXD Contact with edge of stiff paper, subsequent encounter -W262XXS Contact with edge of stiff paper, sequela -W268XXA Contact with other sharp object(s), not elsewhere classified, initial encounter -W268XXD Contact with other sharp object(s), not elsewhere classified, subsequent encounter -W268XXS Contact with other sharp object(s), not elsewhere classified, sequela -W269XXA Contact with unspecified sharp object(s), initial encounter -W269XXD Contact with unspecified sharp object(s), subsequent encounter -W269XXS Contact with unspecified sharp object(s), sequela -W270XXA Contact with workbench tool, initial encounter -W270XXD Contact with workbench tool, subsequent encounter -W270XXS Contact with workbench tool, sequela -W271XXA Contact with garden tool, initial encounter -W271XXD Contact with garden tool, subsequent encounter -W271XXS Contact with garden tool, sequela -W272XXA Contact with scissors, initial encounter -W272XXD Contact with scissors, subsequent encounter -W272XXS Contact with scissors, sequela -W273XXA Contact with needle (sewing), initial encounter -W273XXD Contact with needle (sewing), subsequent encounter -W273XXS Contact with needle (sewing), sequela -W274XXA Contact with kitchen utensil, initial encounter -W274XXD Contact with kitchen utensil, subsequent encounter -W274XXS Contact with kitchen utensil, sequela -W275XXA Contact with paper-cutter, initial encounter -W275XXD Contact with paper-cutter, subsequent encounter -W275XXS Contact with paper-cutter, sequela -W278XXA Contact with other nonpowered hand tool, initial encounter -W278XXD Contact with other nonpowered hand tool, subsequent encounter -W278XXS Contact with other nonpowered hand tool, sequela -W28XXXA Contact with powered lawn mower, initial encounter -W28XXXD Contact with powered lawn mower, subsequent encounter -W28XXXS Contact with powered lawn mower, sequela -W290XXA Contact with powered kitchen appliance, initial encounter -W290XXD Contact with powered kitchen appliance, subsequent encounter -W290XXS Contact with powered kitchen appliance, sequela -W291XXA Contact with electric knife, initial encounter -W291XXD Contact with electric knife, subsequent encounter -W291XXS Contact with electric knife, sequela -W292XXA Contact with other powered household machinery, initial encounter -W292XXD Contact with other powered household machinery, subsequent encounter -W292XXS Contact with other powered household machinery, sequela -W293XXA Contact with powered garden and outdoor hand tools and machinery, initial encounter -W293XXD Contact with powered garden and outdoor hand tools and machinery, subsequent encounter -W293XXS Contact with powered garden and outdoor hand tools and machinery, sequela -W294XXA Contact with nail gun, initial encounter -W294XXD Contact with nail gun, subsequent encounter -W294XXS Contact with nail gun, sequela -W298XXA Contact with other powered powered hand tools and household machinery, initial encounter -W298XXD Contact with other powered powered hand tools and household machinery, subsequent encounter -W298XXS Contact with other powered powered hand tools and household machinery, sequela -W300XXA Contact with combine harvester, initial encounter -W300XXD Contact with combine harvester, subsequent encounter -W300XXS Contact with combine harvester, sequela -W301XXA Contact with power take-off devices (PTO), initial encounter -W301XXD Contact with power take-off devices (PTO), subsequent encounter -W301XXS Contact with power take-off devices (PTO), sequela -W302XXA Contact with hay derrick, initial encounter -W302XXD Contact with hay derrick, subsequent encounter -W302XXS Contact with hay derrick, sequela -W303XXA Contact with grain storage elevator, initial encounter -W303XXD Contact with grain storage elevator, subsequent encounter -W303XXS Contact with grain storage elevator, sequela -W3081XA Contact with agricultural transport vehicle in stationary use, initial encounter -W3081XD Contact with agricultural transport vehicle in stationary use, subsequent encounter -W3081XS Contact with agricultural transport vehicle in stationary use, sequela -W3089XA Contact with other specified agricultural machinery, initial encounter -W3089XD Contact with other specified agricultural machinery, subsequent encounter -W3089XS Contact with other specified agricultural machinery, sequela -W309XXA Contact with unspecified agricultural machinery, initial encounter -W309XXD Contact with unspecified agricultural machinery, subsequent encounter -W309XXS Contact with unspecified agricultural machinery, sequela -W310XXA Contact with mining and earth-drilling machinery, initial encounter -W310XXD Contact with mining and earth-drilling machinery, subsequent encounter -W310XXS Contact with mining and earth-drilling machinery, sequela -W311XXA Contact with metalworking machines, initial encounter -W311XXD Contact with metalworking machines, subsequent encounter -W311XXS Contact with metalworking machines, sequela -W312XXA Contact with powered woodworking and forming machines, initial encounter -W312XXD Contact with powered woodworking and forming machines, subsequent encounter -W312XXS Contact with powered woodworking and forming machines, sequela -W313XXA Contact with prime movers, initial encounter -W313XXD Contact with prime movers, subsequent encounter -W313XXS Contact with prime movers, sequela -W3181XA Contact with recreational machinery, initial encounter -W3181XD Contact with recreational machinery, subsequent encounter -W3181XS Contact with recreational machinery, sequela -W3182XA Contact with other commercial machinery, initial encounter -W3182XD Contact with other commercial machinery, subsequent encounter -W3182XS Contact with other commercial machinery, sequela -W3183XA Contact with special construction vehicle in stationary use, initial encounter -W3183XD Contact with special construction vehicle in stationary use, subsequent encounter -W3183XS Contact with special construction vehicle in stationary use, sequela -W3189XA Contact with other specified machinery, initial encounter -W3189XD Contact with other specified machinery, subsequent encounter -W3189XS Contact with other specified machinery, sequela -W319XXA Contact with unspecified machinery, initial encounter -W319XXD Contact with unspecified machinery, subsequent encounter -W319XXS Contact with unspecified machinery, sequela -W320XXA Accidental handgun discharge, initial encounter -W320XXD Accidental handgun discharge, subsequent encounter -W320XXS Accidental handgun discharge, sequela -W321XXA Accidental handgun malfunction, initial encounter -W321XXD Accidental handgun malfunction, subsequent encounter -W321XXS Accidental handgun malfunction, sequela -W3300XA Accidental discharge of unspecified larger firearm, initial encounter -W3300XD Accidental discharge of unspecified larger firearm, subsequent encounter -W3300XS Accidental discharge of unspecified larger firearm, sequela -W3301XA Accidental discharge of shotgun, initial encounter -W3301XD Accidental discharge of shotgun, subsequent encounter -W3301XS Accidental discharge of shotgun, sequela -W3302XA Accidental discharge of hunting rifle, initial encounter -W3302XD Accidental discharge of hunting rifle, subsequent encounter -W3302XS Accidental discharge of hunting rifle, sequela -W3303XA Accidental discharge of machine gun, initial encounter -W3303XD Accidental discharge of machine gun, subsequent encounter -W3303XS Accidental discharge of machine gun, sequela -W3309XA Accidental discharge of other larger firearm, initial encounter -W3309XD Accidental discharge of other larger firearm, subsequent encounter -W3309XS Accidental discharge of other larger firearm, sequela -W3310XA Accidental malfunction of unspecified larger firearm, initial encounter -W3310XD Accidental malfunction of unspecified larger firearm, subsequent encounter -W3310XS Accidental malfunction of unspecified larger firearm, sequela -W3311XA Accidental malfunction of shotgun, initial encounter -W3311XD Accidental malfunction of shotgun, subsequent encounter -W3311XS Accidental malfunction of shotgun, sequela -W3312XA Accidental malfunction of hunting rifle, initial encounter -W3312XD Accidental malfunction of hunting rifle, subsequent encounter -W3312XS Accidental malfunction of hunting rifle, sequela -W3313XA Accidental malfunction of machine gun, initial encounter -W3313XD Accidental malfunction of machine gun, subsequent encounter -W3313XS Accidental malfunction of machine gun, sequela -W3319XA Accidental malfunction of other larger firearm, initial encounter -W3319XD Accidental malfunction of other larger firearm, subsequent encounter -W3319XS Accidental malfunction of other larger firearm, sequela -W3400XA Accidental discharge from unspecified firearms or gun, initial encounter -W3400XD Accidental discharge from unspecified firearms or gun, subsequent encounter -W3400XS Accidental discharge from unspecified firearms or gun, sequela -W34010A Accidental discharge of airgun, initial encounter -W34010D Accidental discharge of airgun, subsequent encounter -W34010S Accidental discharge of airgun, sequela -W34011A Accidental discharge of paintball gun, initial encounter -W34011D Accidental discharge of paintball gun, subsequent encounter -W34011S Accidental discharge of paintball gun, sequela -W34018A Accidental discharge of other gas, air or spring-operated gun, initial encounter -W34018D Accidental discharge of other gas, air or spring-operated gun, subsequent encounter -W34018S Accidental discharge of other gas, air or spring-operated gun, sequela -W3409XA Accidental discharge from other specified firearms, initial encounter -W3409XD Accidental discharge from other specified firearms, subsequent encounter -W3409XS Accidental discharge from other specified firearms, sequela -W3410XA Accidental malfunction from unspecified firearms or gun, initial encounter -W3410XD Accidental malfunction from unspecified firearms or gun, subsequent encounter -W3410XS Accidental malfunction from unspecified firearms or gun, sequela -W34110A Accidental malfunction of airgun, initial encounter -W34110D Accidental malfunction of airgun, subsequent encounter -W34110S Accidental malfunction of airgun, sequela -W34111A Accidental malfunction of paintball gun, initial encounter -W34111D Accidental malfunction of paintball gun, subsequent encounter -W34111S Accidental malfunction of paintball gun, sequela -W34118A Accidental malfunction of other gas, air or spring-operated gun, initial encounter -W34118D Accidental malfunction of other gas, air or spring-operated gun, subsequent encounter -W34118S Accidental malfunction of other gas, air or spring-operated gun, sequela -W3419XA Accidental malfunction from other specified firearms, initial encounter -W3419XD Accidental malfunction from other specified firearms, subsequent encounter -W3419XS Accidental malfunction from other specified firearms, sequela -W35XXXA Explosion and rupture of boiler, initial encounter -W35XXXD Explosion and rupture of boiler, subsequent encounter -W35XXXS Explosion and rupture of boiler, sequela -W361XXA Explosion and rupture of aerosol can, initial encounter -W361XXD Explosion and rupture of aerosol can, subsequent encounter -W361XXS Explosion and rupture of aerosol can, sequela -W362XXA Explosion and rupture of air tank, initial encounter -W362XXD Explosion and rupture of air tank, subsequent encounter -W362XXS Explosion and rupture of air tank, sequela -W363XXA Explosion and rupture of pressurized-gas tank, initial encounter -W363XXD Explosion and rupture of pressurized-gas tank, subsequent encounter -W363XXS Explosion and rupture of pressurized-gas tank, sequela -W368XXA Explosion and rupture of other gas cylinder, initial encounter -W368XXD Explosion and rupture of other gas cylinder, subsequent encounter -W368XXS Explosion and rupture of other gas cylinder, sequela -W369XXA Explosion and rupture of unspecified gas cylinder, initial encounter -W369XXD Explosion and rupture of unspecified gas cylinder, subsequent encounter -W369XXS Explosion and rupture of unspecified gas cylinder, sequela -W370XXA Explosion of bicycle tire, initial encounter -W370XXD Explosion of bicycle tire, subsequent encounter -W370XXS Explosion of bicycle tire, sequela -W378XXA Explosion and rupture of other pressurized tire, pipe or hose, initial encounter -W378XXD Explosion and rupture of other pressurized tire, pipe or hose, subsequent encounter -W378XXS Explosion and rupture of other pressurized tire, pipe or hose, sequela -W38XXXA Explosion and rupture of other specified pressurized devices, initial encounter -W38XXXD Explosion and rupture of other specified pressurized devices, subsequent encounter -W38XXXS Explosion and rupture of other specified pressurized devices, sequela -W39XXXA Discharge of firework, initial encounter -W39XXXD Discharge of firework, subsequent encounter -W39XXXS Discharge of firework, sequela -W400XXA Explosion of blasting material, initial encounter -W400XXD Explosion of blasting material, subsequent encounter -W400XXS Explosion of blasting material, sequela -W401XXA Explosion of explosive gases, initial encounter -W401XXD Explosion of explosive gases, subsequent encounter -W401XXS Explosion of explosive gases, sequela -W408XXA Explosion of other specified explosive materials, initial encounter -W408XXD Explosion of other specified explosive materials, subsequent encounter -W408XXS Explosion of other specified explosive materials, sequela -W409XXA Explosion of unspecified explosive materials, initial encounter -W409XXD Explosion of unspecified explosive materials, subsequent encounter -W409XXS Explosion of unspecified explosive materials, sequela -W420XXA Exposure to supersonic waves, initial encounter -W420XXD Exposure to supersonic waves, subsequent encounter -W420XXS Exposure to supersonic waves, sequela -W429XXA Exposure to other noise, initial encounter -W429XXD Exposure to other noise, subsequent encounter -W429XXS Exposure to other noise, sequela -W450XXA Nail entering through skin, initial encounter -W450XXD Nail entering through skin, subsequent encounter -W450XXS Nail entering through skin, sequela -W458XXA Other foreign body or object entering through skin, initial encounter -W458XXD Other foreign body or object entering through skin, subsequent encounter -W458XXS Other foreign body or object entering through skin, sequela -W460XXA Contact with hypodermic needle, initial encounter -W460XXD Contact with hypodermic needle, subsequent encounter -W460XXS Contact with hypodermic needle, sequela -W461XXA Contact with contaminated hypodermic needle, initial encounter -W461XXD Contact with contaminated hypodermic needle, subsequent encounter -W461XXS Contact with contaminated hypodermic needle, sequela -W4901XA Hair causing external constriction, initial encounter -W4901XD Hair causing external constriction, subsequent encounter -W4901XS Hair causing external constriction, sequela -W4902XA String or thread causing external constriction, initial encounter -W4902XD String or thread causing external constriction, subsequent encounter -W4902XS String or thread causing external constriction, sequela -W4903XA Rubber band causing external constriction, initial encounter -W4903XD Rubber band causing external constriction, subsequent encounter -W4903XS Rubber band causing external constriction, sequela -W4904XA Ring or other jewelry causing external constriction, initial encounter -W4904XD Ring or other jewelry causing external constriction, subsequent encounter -W4904XS Ring or other jewelry causing external constriction, sequela -W4909XA Other specified item causing external constriction, initial encounter -W4909XD Other specified item causing external constriction, subsequent encounter -W4909XS Other specified item causing external constriction, sequela -W499XXA Exposure to other inanimate mechanical forces, initial encounter -W499XXD Exposure to other inanimate mechanical forces, subsequent encounter -W499XXS Exposure to other inanimate mechanical forces, sequela -W500XXA Accidental hit or strike by another person, initial encounter -W500XXD Accidental hit or strike by another person, subsequent encounter -W500XXS Accidental hit or strike by another person, sequela -W501XXA Accidental kick by another person, initial encounter -W501XXD Accidental kick by another person, subsequent encounter -W501XXS Accidental kick by another person, sequela -W502XXA Accidental twist by another person, initial encounter -W502XXD Accidental twist by another person, subsequent encounter -W502XXS Accidental twist by another person, sequela -W503XXA Accidental bite by another person, initial encounter -W503XXD Accidental bite by another person, subsequent encounter -W503XXS Accidental bite by another person, sequela -W504XXA Accidental scratch by another person, initial encounter -W504XXD Accidental scratch by another person, subsequent encounter -W504XXS Accidental scratch by another person, sequela -W51XXXA Accidental striking against or bumped into by another person, initial encounter -W51XXXD Accidental striking against or bumped into by another person, subsequent encounter -W51XXXS Accidental striking against or bumped into by another person, sequela -W52XXXA Crushed, pushed or stepped on by crowd or human stampede, initial encounter -W52XXXD Crushed, pushed or stepped on by crowd or human stampede, subsequent encounter -W52XXXS Crushed, pushed or stepped on by crowd or human stampede, sequela -W5301XA Bitten by mouse, initial encounter -W5301XD Bitten by mouse, subsequent encounter -W5301XS Bitten by mouse, sequela -W5309XA Other contact with mouse, initial encounter -W5309XD Other contact with mouse, subsequent encounter -W5309XS Other contact with mouse, sequela -W5311XA Bitten by rat, initial encounter -W5311XD Bitten by rat, subsequent encounter -W5311XS Bitten by rat, sequela -W5319XA Other contact with rat, initial encounter -W5319XD Other contact with rat, subsequent encounter -W5319XS Other contact with rat, sequela -W5321XA Bitten by squirrel, initial encounter -W5321XD Bitten by squirrel, subsequent encounter -W5321XS Bitten by squirrel, sequela -W5329XA Other contact with squirrel, initial encounter -W5329XD Other contact with squirrel, subsequent encounter -W5329XS Other contact with squirrel, sequela -W5381XA Bitten by other rodent, initial encounter -W5381XD Bitten by other rodent, subsequent encounter -W5381XS Bitten by other rodent, sequela -W5389XA Other contact with other rodent, initial encounter -W5389XD Other contact with other rodent, subsequent encounter -W5389XS Other contact with other rodent, sequela -W540XXA Bitten by dog, initial encounter -W540XXD Bitten by dog, subsequent encounter -W540XXS Bitten by dog, sequela -W541XXA Struck by dog, initial encounter -W541XXD Struck by dog, subsequent encounter -W541XXS Struck by dog, sequela -W548XXA Other contact with dog, initial encounter -W548XXD Other contact with dog, subsequent encounter -W548XXS Other contact with dog, sequela -W5501XA Bitten by cat, initial encounter -W5501XD Bitten by cat, subsequent encounter -W5501XS Bitten by cat, sequela -W5503XA Scratched by cat, initial encounter -W5503XD Scratched by cat, subsequent encounter -W5503XS Scratched by cat, sequela -W5509XA Other contact with cat, initial encounter -W5509XD Other contact with cat, subsequent encounter -W5509XS Other contact with cat, sequela -W5511XA Bitten by horse, initial encounter -W5511XD Bitten by horse, subsequent encounter -W5511XS Bitten by horse, sequela -W5512XA Struck by horse, initial encounter -W5512XD Struck by horse, subsequent encounter -W5512XS Struck by horse, sequela -W5519XA Other contact with horse, initial encounter -W5519XD Other contact with horse, subsequent encounter -W5519XS Other contact with horse, sequela -W5521XA Bitten by cow, initial encounter -W5521XD Bitten by cow, subsequent encounter -W5521XS Bitten by cow, sequela -W5522XA Struck by cow, initial encounter -W5522XD Struck by cow, subsequent encounter -W5522XS Struck by cow, sequela -W5529XA Other contact with cow, initial encounter -W5529XD Other contact with cow, subsequent encounter -W5529XS Other contact with cow, sequela -W5531XA Bitten by other hoof stock, initial encounter -W5531XD Bitten by other hoof stock, subsequent encounter -W5531XS Bitten by other hoof stock, sequela -W5532XA Struck by other hoof stock, initial encounter -W5532XD Struck by other hoof stock, subsequent encounter -W5532XS Struck by other hoof stock, sequela -W5539XA Other contact with other hoof stock, initial encounter -W5539XD Other contact with other hoof stock, subsequent encounter -W5539XS Other contact with other hoof stock, sequela -W5541XA Bitten by pig, initial encounter -W5541XD Bitten by pig, subsequent encounter -W5541XS Bitten by pig, sequela -W5542XA Struck by pig, initial encounter -W5542XD Struck by pig, subsequent encounter -W5542XS Struck by pig, sequela -W5549XA Other contact with pig, initial encounter -W5549XD Other contact with pig, subsequent encounter -W5549XS Other contact with pig, sequela -W5551XA Bitten by raccoon, initial encounter -W5551XD Bitten by raccoon, subsequent encounter -W5551XS Bitten by raccoon, sequela -W5552XA Struck by raccoon, initial encounter -W5552XD Struck by raccoon, subsequent encounter -W5552XS Struck by raccoon, sequela -W5559XA Other contact with raccoon, initial encounter -W5559XD Other contact with raccoon, subsequent encounter -W5559XS Other contact with raccoon, sequela -W5581XA Bitten by other mammals, initial encounter -W5581XD Bitten by other mammals, subsequent encounter -W5581XS Bitten by other mammals, sequela -W5582XA Struck by other mammals, initial encounter -W5582XD Struck by other mammals, subsequent encounter -W5582XS Struck by other mammals, sequela -W5589XA Other contact with other mammals, initial encounter -W5589XD Other contact with other mammals, subsequent encounter -W5589XS Other contact with other mammals, sequela -W5601XA Bitten by dolphin, initial encounter -W5601XD Bitten by dolphin, subsequent encounter -W5601XS Bitten by dolphin, sequela -W5602XA Struck by dolphin, initial encounter -W5602XD Struck by dolphin, subsequent encounter -W5602XS Struck by dolphin, sequela -W5609XA Other contact with dolphin, initial encounter -W5609XD Other contact with dolphin, subsequent encounter -W5609XS Other contact with dolphin, sequela -W5611XA Bitten by sea lion, initial encounter -W5611XD Bitten by sea lion, subsequent encounter -W5611XS Bitten by sea lion, sequela -W5612XA Struck by sea lion, initial encounter -W5612XD Struck by sea lion, subsequent encounter -W5612XS Struck by sea lion, sequela -W5619XA Other contact with sea lion, initial encounter -W5619XD Other contact with sea lion, subsequent encounter -W5619XS Other contact with sea lion, sequela -W5621XA Bitten by orca, initial encounter -W5621XD Bitten by orca, subsequent encounter -W5621XS Bitten by orca, sequela -W5622XA Struck by orca, initial encounter -W5622XD Struck by orca, subsequent encounter -W5622XS Struck by orca, sequela -W5629XA Other contact with orca, initial encounter -W5629XD Other contact with orca, subsequent encounter -W5629XS Other contact with orca, sequela -W5631XA Bitten by other marine mammals, initial encounter -W5631XD Bitten by other marine mammals, subsequent encounter -W5631XS Bitten by other marine mammals, sequela -W5632XA Struck by other marine mammals, initial encounter -W5632XD Struck by other marine mammals, subsequent encounter -W5632XS Struck by other marine mammals, sequela -W5639XA Other contact with other marine mammals, initial encounter -W5639XD Other contact with other marine mammals, subsequent encounter -W5639XS Other contact with other marine mammals, sequela -W5641XA Bitten by shark, initial encounter -W5641XD Bitten by shark, subsequent encounter -W5641XS Bitten by shark, sequela -W5642XA Struck by shark, initial encounter -W5642XD Struck by shark, subsequent encounter -W5642XS Struck by shark, sequela -W5649XA Other contact with shark, initial encounter -W5649XD Other contact with shark, subsequent encounter -W5649XS Other contact with shark, sequela -W5651XA Bitten by other fish, initial encounter -W5651XD Bitten by other fish, subsequent encounter -W5651XS Bitten by other fish, sequela -W5652XA Struck by other fish, initial encounter -W5652XD Struck by other fish, subsequent encounter -W5652XS Struck by other fish, sequela -W5659XA Other contact with other fish, initial encounter -W5659XD Other contact with other fish, subsequent encounter -W5659XS Other contact with other fish, sequela -W5681XA Bitten by other nonvenomous marine animals, initial encounter -W5681XD Bitten by other nonvenomous marine animals, subsequent encounter -W5681XS Bitten by other nonvenomous marine animals, sequela -W5682XA Struck by other nonvenomous marine animals, initial encounter -W5682XD Struck by other nonvenomous marine animals, subsequent encounter -W5682XS Struck by other nonvenomous marine animals, sequela -W5689XA Other contact with other nonvenomous marine animals, initial encounter -W5689XD Other contact with other nonvenomous marine animals, subsequent encounter -W5689XS Other contact with other nonvenomous marine animals, sequela -W57XXXA Bitten or stung by nonvenomous insect and other nonvenomous arthropods, initial encounter -W57XXXD Bitten or stung by nonvenomous insect and other nonvenomous arthropods, subsequent encounter -W57XXXS Bitten or stung by nonvenomous insect and other nonvenomous arthropods, sequela -W5801XA Bitten by alligator, initial encounter -W5801XD Bitten by alligator, subsequent encounter -W5801XS Bitten by alligator, sequela -W5802XA Struck by alligator, initial encounter -W5802XD Struck by alligator, subsequent encounter -W5802XS Struck by alligator, sequela -W5803XA Crushed by alligator, initial encounter -W5803XD Crushed by alligator, subsequent encounter -W5803XS Crushed by alligator, sequela -W5809XA Other contact with alligator, initial encounter -W5809XD Other contact with alligator, subsequent encounter -W5809XS Other contact with alligator, sequela -W5811XA Bitten by crocodile, initial encounter -W5811XD Bitten by crocodile, subsequent encounter -W5811XS Bitten by crocodile, sequela -W5812XA Struck by crocodile, initial encounter -W5812XD Struck by crocodile, subsequent encounter -W5812XS Struck by crocodile, sequela -W5813XA Crushed by crocodile, initial encounter -W5813XD Crushed by crocodile, subsequent encounter -W5813XS Crushed by crocodile, sequela -W5819XA Other contact with crocodile, initial encounter -W5819XD Other contact with crocodile, subsequent encounter -W5819XS Other contact with crocodile, sequela -W5901XA Bitten by nonvenomous lizards, initial encounter -W5901XD Bitten by nonvenomous lizards, subsequent encounter -W5901XS Bitten by nonvenomous lizards, sequela -W5902XA Struck by nonvenomous lizards, initial encounter -W5902XD Struck by nonvenomous lizards, subsequent encounter -W5902XS Struck by nonvenomous lizards, sequela -W5909XA Other contact with nonvenomous lizards, initial encounter -W5909XD Other contact with nonvenomous lizards, subsequent encounter -W5909XS Other contact with nonvenomous lizards, sequela -W5911XA Bitten by nonvenomous snake, initial encounter -W5911XD Bitten by nonvenomous snake, subsequent encounter -W5911XS Bitten by nonvenomous snake, sequela -W5912XA Struck by nonvenomous snake, initial encounter -W5912XD Struck by nonvenomous snake, subsequent encounter -W5912XS Struck by nonvenomous snake, sequela -W5913XA Crushed by nonvenomous snake, initial encounter -W5913XD Crushed by nonvenomous snake, subsequent encounter -W5913XS Crushed by nonvenomous snake, sequela -W5919XA Other contact with nonvenomous snake, initial encounter -W5919XD Other contact with nonvenomous snake, subsequent encounter -W5919XS Other contact with nonvenomous snake, sequela -W5921XA Bitten by turtle, initial encounter -W5921XD Bitten by turtle, subsequent encounter -W5921XS Bitten by turtle, sequela -W5922XA Struck by turtle, initial encounter -W5922XD Struck by turtle, subsequent encounter -W5922XS Struck by turtle, sequela -W5929XA Other contact with turtle, initial encounter -W5929XD Other contact with turtle, subsequent encounter -W5929XS Other contact with turtle, sequela -W5981XA Bitten by other nonvenomous reptiles, initial encounter -W5981XD Bitten by other nonvenomous reptiles, subsequent encounter -W5981XS Bitten by other nonvenomous reptiles, sequela -W5982XA Struck by other nonvenomous reptiles, initial encounter -W5982XD Struck by other nonvenomous reptiles, subsequent encounter -W5982XS Struck by other nonvenomous reptiles, sequela -W5983XA Crushed by other nonvenomous reptiles, initial encounter -W5983XD Crushed by other nonvenomous reptiles, subsequent encounter -W5983XS Crushed by other nonvenomous reptiles, sequela -W5989XA Other contact with other nonvenomous reptiles, initial encounter -W5989XD Other contact with other nonvenomous reptiles, subsequent encounter -W5989XS Other contact with other nonvenomous reptiles, sequela -W60XXXA Contact with nonvenomous plant thorns and spines and sharp leaves, initial encounter -W60XXXD Contact with nonvenomous plant thorns and spines and sharp leaves, subsequent encounter -W60XXXS Contact with nonvenomous plant thorns and spines and sharp leaves, sequela -W6101XA Bitten by parrot, initial encounter -W6101XD Bitten by parrot, subsequent encounter -W6101XS Bitten by parrot, sequela -W6102XA Struck by parrot, initial encounter -W6102XD Struck by parrot, subsequent encounter -W6102XS Struck by parrot, sequela -W6109XA Other contact with parrot, initial encounter -W6109XD Other contact with parrot, subsequent encounter -W6109XS Other contact with parrot, sequela -W6111XA Bitten by macaw, initial encounter -W6111XD Bitten by macaw, subsequent encounter -W6111XS Bitten by macaw, sequela -W6112XA Struck by macaw, initial encounter -W6112XD Struck by macaw, subsequent encounter -W6112XS Struck by macaw, sequela -W6119XA Other contact with macaw, initial encounter -W6119XD Other contact with macaw, subsequent encounter -W6119XS Other contact with macaw, sequela -W6121XA Bitten by other psittacines, initial encounter -W6121XD Bitten by other psittacines, subsequent encounter -W6121XS Bitten by other psittacines, sequela -W6122XA Struck by other psittacines, initial encounter -W6122XD Struck by other psittacines, subsequent encounter -W6122XS Struck by other psittacines, sequela -W6129XA Other contact with other psittacines, initial encounter -W6129XD Other contact with other psittacines, subsequent encounter -W6129XS Other contact with other psittacines, sequela -W6132XA Struck by chicken, initial encounter -W6132XD Struck by chicken, subsequent encounter -W6132XS Struck by chicken, sequela -W6133XA Pecked by chicken, initial encounter -W6133XD Pecked by chicken, subsequent encounter -W6133XS Pecked by chicken, sequela -W6139XA Other contact with chicken, initial encounter -W6139XD Other contact with chicken, subsequent encounter -W6139XS Other contact with chicken, sequela -W6142XA Struck by turkey, initial encounter -W6142XD Struck by turkey, subsequent encounter -W6142XS Struck by turkey, sequela -W6143XA Pecked by turkey, initial encounter -W6143XD Pecked by turkey, subsequent encounter -W6143XS Pecked by turkey, sequela -W6149XA Other contact with turkey, initial encounter -W6149XD Other contact with turkey, subsequent encounter -W6149XS Other contact with turkey, sequela -W6151XA Bitten by goose, initial encounter -W6151XD Bitten by goose, subsequent encounter -W6151XS Bitten by goose, sequela -W6152XA Struck by goose, initial encounter -W6152XD Struck by goose, subsequent encounter -W6152XS Struck by goose, sequela -W6159XA Other contact with goose, initial encounter -W6159XD Other contact with goose, subsequent encounter -W6159XS Other contact with goose, sequela -W6161XA Bitten by duck, initial encounter -W6161XD Bitten by duck, subsequent encounter -W6161XS Bitten by duck, sequela -W6162XA Struck by duck, initial encounter -W6162XD Struck by duck, subsequent encounter -W6162XS Struck by duck, sequela -W6169XA Other contact with duck, initial encounter -W6169XD Other contact with duck, subsequent encounter -W6169XS Other contact with duck, sequela -W6191XA Bitten by other birds, initial encounter -W6191XD Bitten by other birds, subsequent encounter -W6191XS Bitten by other birds, sequela -W6192XA Struck by other birds, initial encounter -W6192XD Struck by other birds, subsequent encounter -W6192XS Struck by other birds, sequela -W6199XA Other contact with other birds, initial encounter -W6199XD Other contact with other birds, subsequent encounter -W6199XS Other contact with other birds, sequela -W620XXA Contact with nonvenomous frogs, initial encounter -W620XXD Contact with nonvenomous frogs, subsequent encounter -W620XXS Contact with nonvenomous frogs, sequela -W621XXA Contact with nonvenomous toads, initial encounter -W621XXD Contact with nonvenomous toads, subsequent encounter -W621XXS Contact with nonvenomous toads, sequela -W629XXA Contact with other nonvenomous amphibians, initial encounter -W629XXD Contact with other nonvenomous amphibians, subsequent encounter -W629XXS Contact with other nonvenomous amphibians, sequela -W64XXXA Exposure to other animate mechanical forces, initial encounter -W64XXXD Exposure to other animate mechanical forces, subsequent encounter -W64XXXS Exposure to other animate mechanical forces, sequela -W65XXXA Accidental drowning and submersion while in bath-tub, initial encounter -W65XXXD Accidental drowning and submersion while in bath-tub, subsequent encounter -W65XXXS Accidental drowning and submersion while in bath-tub, sequela -W67XXXA Accidental drowning and submersion while in swimming-pool, initial encounter -W67XXXD Accidental drowning and submersion while in swimming-pool, subsequent encounter -W67XXXS Accidental drowning and submersion while in swimming-pool, sequela -W69XXXA Accidental drowning and submersion while in natural water, initial encounter -W69XXXD Accidental drowning and submersion while in natural water, subsequent encounter -W69XXXS Accidental drowning and submersion while in natural water, sequela -W73XXXA Other specified cause of accidental non-transport drowning and submersion, initial encounter -W73XXXD Other specified cause of accidental non-transport drowning and submersion, subsequent encounter -W73XXXS Other specified cause of accidental non-transport drowning and submersion, sequela -W74XXXA Unspecified cause of accidental drowning and submersion, initial encounter -W74XXXD Unspecified cause of accidental drowning and submersion, subsequent encounter -W74XXXS Unspecified cause of accidental drowning and submersion, sequela -W85XXXA Exposure to electric transmission lines, initial encounter -W85XXXD Exposure to electric transmission lines, subsequent encounter -W85XXXS Exposure to electric transmission lines, sequela -W860XXA Exposure to domestic wiring and appliances, initial encounter -W860XXD Exposure to domestic wiring and appliances, subsequent encounter -W860XXS Exposure to domestic wiring and appliances, sequela -W861XXA Exposure to industrial wiring, appliances and electrical machinery, initial encounter -W861XXD Exposure to industrial wiring, appliances and electrical machinery, subsequent encounter -W861XXS Exposure to industrial wiring, appliances and electrical machinery, sequela -W868XXA Exposure to other electric current, initial encounter -W868XXD Exposure to other electric current, subsequent encounter -W868XXS Exposure to other electric current, sequela -W880XXA Exposure to X-rays, initial encounter -W880XXD Exposure to X-rays, subsequent encounter -W880XXS Exposure to X-rays, sequela -W881XXA Exposure to radioactive isotopes, initial encounter -W881XXD Exposure to radioactive isotopes, subsequent encounter -W881XXS Exposure to radioactive isotopes, sequela -W888XXA Exposure to other ionizing radiation, initial encounter -W888XXD Exposure to other ionizing radiation, subsequent encounter -W888XXS Exposure to other ionizing radiation, sequela -W890XXA Exposure to welding light (arc), initial encounter -W890XXD Exposure to welding light (arc), subsequent encounter -W890XXS Exposure to welding light (arc), sequela -W891XXA Exposure to tanning bed, initial encounter -W891XXD Exposure to tanning bed, subsequent encounter -W891XXS Exposure to tanning bed, sequela -W898XXA Exposure to other man-made visible and ultraviolet light, initial encounter -W898XXD Exposure to other man-made visible and ultraviolet light, subsequent encounter -W898XXS Exposure to other man-made visible and ultraviolet light, sequela -W899XXA Exposure to unspecified man-made visible and ultraviolet light, initial encounter -W899XXD Exposure to unspecified man-made visible and ultraviolet light, subsequent encounter -W899XXS Exposure to unspecified man-made visible and ultraviolet light, sequela -W900XXA Exposure to radiofrequency, initial encounter -W900XXD Exposure to radiofrequency, subsequent encounter -W900XXS Exposure to radiofrequency, sequela -W901XXA Exposure to infrared radiation, initial encounter -W901XXD Exposure to infrared radiation, subsequent encounter -W901XXS Exposure to infrared radiation, sequela -W902XXA Exposure to laser radiation, initial encounter -W902XXD Exposure to laser radiation, subsequent encounter -W902XXS Exposure to laser radiation, sequela -W908XXA Exposure to other nonionizing radiation, initial encounter -W908XXD Exposure to other nonionizing radiation, subsequent encounter -W908XXS Exposure to other nonionizing radiation, sequela -W92XXXA Exposure to excessive heat of man-made origin, initial encounter -W92XXXD Exposure to excessive heat of man-made origin, subsequent encounter -W92XXXS Exposure to excessive heat of man-made origin, sequela -W9301XA Contact with dry ice, initial encounter -W9301XD Contact with dry ice, subsequent encounter -W9301XS Contact with dry ice, sequela -W9302XA Inhalation of dry ice, initial encounter -W9302XD Inhalation of dry ice, subsequent encounter -W9302XS Inhalation of dry ice, sequela -W9311XA Contact with liquid air, initial encounter -W9311XD Contact with liquid air, subsequent encounter -W9311XS Contact with liquid air, sequela -W9312XA Inhalation of liquid air, initial encounter -W9312XD Inhalation of liquid air, subsequent encounter -W9312XS Inhalation of liquid air, sequela -W932XXA Prolonged exposure in deep freeze unit or refrigerator, initial encounter -W932XXD Prolonged exposure in deep freeze unit or refrigerator, subsequent encounter -W932XXS Prolonged exposure in deep freeze unit or refrigerator, sequela -W938XXA Exposure to other excessive cold of man-made origin, initial encounter -W938XXD Exposure to other excessive cold of man-made origin, subsequent encounter -W938XXS Exposure to other excessive cold of man-made origin, sequela -W940XXA Exposure to prolonged high air pressure, initial encounter -W940XXD Exposure to prolonged high air pressure, subsequent encounter -W940XXS Exposure to prolonged high air pressure, sequela -W9411XA Exposure to residence or prolonged visit at high altitude, initial encounter -W9411XD Exposure to residence or prolonged visit at high altitude, subsequent encounter -W9411XS Exposure to residence or prolonged visit at high altitude, sequela -W9412XA Exposure to other prolonged low air pressure, initial encounter -W9412XD Exposure to other prolonged low air pressure, subsequent encounter -W9412XS Exposure to other prolonged low air pressure, sequela -W9421XA Exposure to reduction in atmospheric pressure while surfacing from deep-water diving, initial encounter -W9421XD Exposure to reduction in atmospheric pressure while surfacing from deep-water diving, subsequent encounter -W9421XS Exposure to reduction in atmospheric pressure while surfacing from deep-water diving, sequela -W9422XA Exposure to reduction in atmospheric pressure while surfacing from underground, initial encounter -W9422XD Exposure to reduction in atmospheric pressure while surfacing from underground, subsequent encounter -W9422XS Exposure to reduction in atmospheric pressure while surfacing from underground, sequela -W9423XA Exposure to sudden change in air pressure in aircraft during ascent, initial encounter -W9423XD Exposure to sudden change in air pressure in aircraft during ascent, subsequent encounter -W9423XS Exposure to sudden change in air pressure in aircraft during ascent, sequela -W9429XA Exposure to other rapid changes in air pressure during ascent, initial encounter -W9429XD Exposure to other rapid changes in air pressure during ascent, subsequent encounter -W9429XS Exposure to other rapid changes in air pressure during ascent, sequela -W9431XA Exposure to sudden change in air pressure in aircraft during descent, initial encounter -W9431XD Exposure to sudden change in air pressure in aircraft during descent, subsequent encounter -W9431XS Exposure to sudden change in air pressure in aircraft during descent, sequela -W9432XA Exposure to high air pressure from rapid descent in water, initial encounter -W9432XD Exposure to high air pressure from rapid descent in water, subsequent encounter -W9432XS Exposure to high air pressure from rapid descent in water, sequela -W9439XA Exposure to other rapid changes in air pressure during descent, initial encounter -W9439XD Exposure to other rapid changes in air pressure during descent, subsequent encounter -W9439XS Exposure to other rapid changes in air pressure during descent, sequela -W99XXXA Exposure to other man-made environmental factors, initial encounter -W99XXXD Exposure to other man-made environmental factors, subsequent encounter -W99XXXS Exposure to other man-made environmental factors, sequela -X000XXA Exposure to flames in uncontrolled fire in building or structure, initial encounter -X000XXD Exposure to flames in uncontrolled fire in building or structure, subsequent encounter -X000XXS Exposure to flames in uncontrolled fire in building or structure, sequela -X001XXA Exposure to smoke in uncontrolled fire in building or structure, initial encounter -X001XXD Exposure to smoke in uncontrolled fire in building or structure, subsequent encounter -X001XXS Exposure to smoke in uncontrolled fire in building or structure, sequela -X002XXA Injury due to collapse of burning building or structure in uncontrolled fire, initial encounter -X002XXD Injury due to collapse of burning building or structure in uncontrolled fire, subsequent encounter -X002XXS Injury due to collapse of burning building or structure in uncontrolled fire, sequela -X003XXA Fall from burning building or structure in uncontrolled fire, initial encounter -X003XXD Fall from burning building or structure in uncontrolled fire, subsequent encounter -X003XXS Fall from burning building or structure in uncontrolled fire, sequela -X004XXA Hit by object from burning building or structure in uncontrolled fire, initial encounter -X004XXD Hit by object from burning building or structure in uncontrolled fire, subsequent encounter -X004XXS Hit by object from burning building or structure in uncontrolled fire, sequela -X005XXA Jump from burning building or structure in uncontrolled fire, initial encounter -X005XXD Jump from burning building or structure in uncontrolled fire, subsequent encounter -X005XXS Jump from burning building or structure in uncontrolled fire, sequela -X008XXA Other exposure to uncontrolled fire in building or structure, initial encounter -X008XXD Other exposure to uncontrolled fire in building or structure, subsequent encounter -X008XXS Other exposure to uncontrolled fire in building or structure, sequela -X010XXA Exposure to flames in uncontrolled fire, not in building or structure, initial encounter -X010XXD Exposure to flames in uncontrolled fire, not in building or structure, subsequent encounter -X010XXS Exposure to flames in uncontrolled fire, not in building or structure, sequela -X011XXA Exposure to smoke in uncontrolled fire, not in building or structure, initial encounter -X011XXD Exposure to smoke in uncontrolled fire, not in building or structure, subsequent encounter -X011XXS Exposure to smoke in uncontrolled fire, not in building or structure, sequela -X013XXA Fall due to uncontrolled fire, not in building or structure, initial encounter -X013XXD Fall due to uncontrolled fire, not in building or structure, subsequent encounter -X013XXS Fall due to uncontrolled fire, not in building or structure, sequela -X014XXA Hit by object due to uncontrolled fire, not in building or structure, initial encounter -X014XXD Hit by object due to uncontrolled fire, not in building or structure, subsequent encounter -X014XXS Hit by object due to uncontrolled fire, not in building or structure, sequela -X018XXA Other exposure to uncontrolled fire, not in building or structure, initial encounter -X018XXD Other exposure to uncontrolled fire, not in building or structure, subsequent encounter -X018XXS Other exposure to uncontrolled fire, not in building or structure, sequela -X020XXA Exposure to flames in controlled fire in building or structure, initial encounter -X020XXD Exposure to flames in controlled fire in building or structure, subsequent encounter -X020XXS Exposure to flames in controlled fire in building or structure, sequela -X021XXA Exposure to smoke in controlled fire in building or structure, initial encounter -X021XXD Exposure to smoke in controlled fire in building or structure, subsequent encounter -X021XXS Exposure to smoke in controlled fire in building or structure, sequela -X022XXA Injury due to collapse of burning building or structure in controlled fire, initial encounter -X022XXD Injury due to collapse of burning building or structure in controlled fire, subsequent encounter -X022XXS Injury due to collapse of burning building or structure in controlled fire, sequela -X023XXA Fall from burning building or structure in controlled fire, initial encounter -X023XXD Fall from burning building or structure in controlled fire, subsequent encounter -X023XXS Fall from burning building or structure in controlled fire, sequela -X024XXA Hit by object from burning building or structure in controlled fire, initial encounter -X024XXD Hit by object from burning building or structure in controlled fire, subsequent encounter -X024XXS Hit by object from burning building or structure in controlled fire, sequela -X025XXA Jump from burning building or structure in controlled fire, initial encounter -X025XXD Jump from burning building or structure in controlled fire, subsequent encounter -X025XXS Jump from burning building or structure in controlled fire, sequela -X028XXA Other exposure to controlled fire in building or structure, initial encounter -X028XXD Other exposure to controlled fire in building or structure, subsequent encounter -X028XXS Other exposure to controlled fire in building or structure, sequela -X030XXA Exposure to flames in controlled fire, not in building or structure, initial encounter -X030XXD Exposure to flames in controlled fire, not in building or structure, subsequent encounter -X030XXS Exposure to flames in controlled fire, not in building or structure, sequela -X031XXA Exposure to smoke in controlled fire, not in building or structure, initial encounter -X031XXD Exposure to smoke in controlled fire, not in building or structure, subsequent encounter -X031XXS Exposure to smoke in controlled fire, not in building or structure, sequela -X033XXA Fall due to controlled fire, not in building or structure, initial encounter -X033XXD Fall due to controlled fire, not in building or structure, subsequent encounter -X033XXS Fall due to controlled fire, not in building or structure, sequela -X034XXA Hit by object due to controlled fire, not in building or structure, initial encounter -X034XXD Hit by object due to controlled fire, not in building or structure, subsequent encounter -X034XXS Hit by object due to controlled fire, not in building or structure, sequela -X038XXA Other exposure to controlled fire, not in building or structure, initial encounter -X038XXD Other exposure to controlled fire, not in building or structure, subsequent encounter -X038XXS Other exposure to controlled fire, not in building or structure, sequela -X04XXXA Exposure to ignition of highly flammable material, initial encounter -X04XXXD Exposure to ignition of highly flammable material, subsequent encounter -X04XXXS Exposure to ignition of highly flammable material, sequela -X05XXXA Exposure to ignition or melting of nightwear, initial encounter -X05XXXD Exposure to ignition or melting of nightwear, subsequent encounter -X05XXXS Exposure to ignition or melting of nightwear, sequela -X060XXA Exposure to ignition of plastic jewelry, initial encounter -X060XXD Exposure to ignition of plastic jewelry, subsequent encounter -X060XXS Exposure to ignition of plastic jewelry, sequela -X061XXA Exposure to melting of plastic jewelry, initial encounter -X061XXD Exposure to melting of plastic jewelry, subsequent encounter -X061XXS Exposure to melting of plastic jewelry, sequela -X062XXA Exposure to ignition of other clothing and apparel, initial encounter -X062XXD Exposure to ignition of other clothing and apparel, subsequent encounter -X062XXS Exposure to ignition of other clothing and apparel, sequela -X063XXA Exposure to melting of other clothing and apparel, initial encounter -X063XXD Exposure to melting of other clothing and apparel, subsequent encounter -X063XXS Exposure to melting of other clothing and apparel, sequela -X0800XA Exposure to bed fire due to unspecified burning material, initial encounter -X0800XD Exposure to bed fire due to unspecified burning material, subsequent encounter -X0800XS Exposure to bed fire due to unspecified burning material, sequela -X0801XA Exposure to bed fire due to burning cigarette, initial encounter -X0801XD Exposure to bed fire due to burning cigarette, subsequent encounter -X0801XS Exposure to bed fire due to burning cigarette, sequela -X0809XA Exposure to bed fire due to other burning material, initial encounter -X0809XD Exposure to bed fire due to other burning material, subsequent encounter -X0809XS Exposure to bed fire due to other burning material, sequela -X0810XA Exposure to sofa fire due to unspecified burning material, initial encounter -X0810XD Exposure to sofa fire due to unspecified burning material, subsequent encounter -X0810XS Exposure to sofa fire due to unspecified burning material, sequela -X0811XA Exposure to sofa fire due to burning cigarette, initial encounter -X0811XD Exposure to sofa fire due to burning cigarette, subsequent encounter -X0811XS Exposure to sofa fire due to burning cigarette, sequela -X0819XA Exposure to sofa fire due to other burning material, initial encounter -X0819XD Exposure to sofa fire due to other burning material, subsequent encounter -X0819XS Exposure to sofa fire due to other burning material, sequela -X0820XA Exposure to other furniture fire due to unspecified burning material, initial encounter -X0820XD Exposure to other furniture fire due to unspecified burning material, subsequent encounter -X0820XS Exposure to other furniture fire due to unspecified burning material, sequela -X0821XA Exposure to other furniture fire due to burning cigarette, initial encounter -X0821XD Exposure to other furniture fire due to burning cigarette, subsequent encounter -X0821XS Exposure to other furniture fire due to burning cigarette, sequela -X0829XA Exposure to other furniture fire due to other burning material, initial encounter -X0829XD Exposure to other furniture fire due to other burning material, subsequent encounter -X0829XS Exposure to other furniture fire due to other burning material, sequela -X088XXA Exposure to other specified smoke, fire and flames, initial encounter -X088XXD Exposure to other specified smoke, fire and flames, subsequent encounter -X088XXS Exposure to other specified smoke, fire and flames, sequela -X100XXA Contact with hot drinks, initial encounter -X100XXD Contact with hot drinks, subsequent encounter -X100XXS Contact with hot drinks, sequela -X101XXA Contact with hot food, initial encounter -X101XXD Contact with hot food, subsequent encounter -X101XXS Contact with hot food, sequela -X102XXA Contact with fats and cooking oils, initial encounter -X102XXD Contact with fats and cooking oils, subsequent encounter -X102XXS Contact with fats and cooking oils, sequela -X110XXA Contact with hot water in bath or tub, initial encounter -X110XXD Contact with hot water in bath or tub, subsequent encounter -X110XXS Contact with hot water in bath or tub, sequela -X111XXA Contact with running hot water, initial encounter -X111XXD Contact with running hot water, subsequent encounter -X111XXS Contact with running hot water, sequela -X118XXA Contact with other hot tap-water, initial encounter -X118XXD Contact with other hot tap-water, subsequent encounter -X118XXS Contact with other hot tap-water, sequela -X12XXXA Contact with other hot fluids, initial encounter -X12XXXD Contact with other hot fluids, subsequent encounter -X12XXXS Contact with other hot fluids, sequela -X130XXA Inhalation of steam and other hot vapors, initial encounter -X130XXD Inhalation of steam and other hot vapors, subsequent encounter -X130XXS Inhalation of steam and other hot vapors, sequela -X131XXA Other contact with steam and other hot vapors, initial encounter -X131XXD Other contact with steam and other hot vapors, subsequent encounter -X131XXS Other contact with steam and other hot vapors, sequela -X140XXA Inhalation of hot air and gases, initial encounter -X140XXD Inhalation of hot air and gases, subsequent encounter -X140XXS Inhalation of hot air and gases, sequela -X141XXA Other contact with hot air and other hot gases, initial encounter -X141XXD Other contact with hot air and other hot gases, subsequent encounter -X141XXS Other contact with hot air and other hot gases, sequela -X150XXA Contact with hot stove (kitchen), initial encounter -X150XXD Contact with hot stove (kitchen), subsequent encounter -X150XXS Contact with hot stove (kitchen), sequela -X151XXA Contact with hot toaster, initial encounter -X151XXD Contact with hot toaster, subsequent encounter -X151XXS Contact with hot toaster, sequela -X152XXA Contact with hotplate, initial encounter -X152XXD Contact with hotplate, subsequent encounter -X152XXS Contact with hotplate, sequela -X153XXA Contact with hot saucepan or skillet, initial encounter -X153XXD Contact with hot saucepan or skillet, subsequent encounter -X153XXS Contact with hot saucepan or skillet, sequela -X158XXA Contact with other hot household appliances, initial encounter -X158XXD Contact with other hot household appliances, subsequent encounter -X158XXS Contact with other hot household appliances, sequela -X16XXXA Contact with hot heating appliances, radiators and pipes, initial encounter -X16XXXD Contact with hot heating appliances, radiators and pipes, subsequent encounter -X16XXXS Contact with hot heating appliances, radiators and pipes, sequela -X17XXXA Contact with hot engines, machinery and tools, initial encounter -X17XXXD Contact with hot engines, machinery and tools, subsequent encounter -X17XXXS Contact with hot engines, machinery and tools, sequela -X18XXXA Contact with other hot metals, initial encounter -X18XXXD Contact with other hot metals, subsequent encounter -X18XXXS Contact with other hot metals, sequela -X19XXXA Contact with other heat and hot substances, initial encounter -X19XXXD Contact with other heat and hot substances, subsequent encounter -X19XXXS Contact with other heat and hot substances, sequela -X30XXXA Exposure to excessive natural heat, initial encounter -X30XXXD Exposure to excessive natural heat, subsequent encounter -X30XXXS Exposure to excessive natural heat, sequela -X31XXXA Exposure to excessive natural cold, initial encounter -X31XXXD Exposure to excessive natural cold, subsequent encounter -X31XXXS Exposure to excessive natural cold, sequela -X32XXXA Exposure to sunlight, initial encounter -X32XXXD Exposure to sunlight, subsequent encounter -X32XXXS Exposure to sunlight, sequela -X34XXXA Earthquake, initial encounter -X34XXXD Earthquake, subsequent encounter -X34XXXS Earthquake, sequela -X35XXXA Volcanic eruption, initial encounter -X35XXXD Volcanic eruption, subsequent encounter -X35XXXS Volcanic eruption, sequela -X360XXA Collapse of dam or man-made structure causing earth movement, initial encounter -X360XXD Collapse of dam or man-made structure causing earth movement, subsequent encounter -X360XXS Collapse of dam or man-made structure causing earth movement, sequela -X361XXA Avalanche, landslide, or mudslide, initial encounter -X361XXD Avalanche, landslide, or mudslide, subsequent encounter -X361XXS Avalanche, landslide, or mudslide, sequela -X370XXA Hurricane, initial encounter -X370XXD Hurricane, subsequent encounter -X370XXS Hurricane, sequela -X371XXA Tornado, initial encounter -X371XXD Tornado, subsequent encounter -X371XXS Tornado, sequela -X372XXA Blizzard (snow)(ice), initial encounter -X372XXD Blizzard (snow)(ice), subsequent encounter -X372XXS Blizzard (snow)(ice), sequela -X373XXA Dust storm, initial encounter -X373XXD Dust storm, subsequent encounter -X373XXS Dust storm, sequela -X3741XA Tidal wave due to earthquake or volcanic eruption, initial encounter -X3741XD Tidal wave due to earthquake or volcanic eruption, subsequent encounter -X3741XS Tidal wave due to earthquake or volcanic eruption, sequela -X3742XA Tidal wave due to storm, initial encounter -X3742XD Tidal wave due to storm, subsequent encounter -X3742XS Tidal wave due to storm, sequela -X3743XA Tidal wave due to landslide, initial encounter -X3743XD Tidal wave due to landslide, subsequent encounter -X3743XS Tidal wave due to landslide, sequela -X378XXA Other cataclysmic storms, initial encounter -X378XXD Other cataclysmic storms, subsequent encounter -X378XXS Other cataclysmic storms, sequela -X379XXA Unspecified cataclysmic storm, initial encounter -X379XXD Unspecified cataclysmic storm, subsequent encounter -X379XXS Unspecified cataclysmic storm, sequela -X38XXXA Flood, initial encounter -X38XXXD Flood, subsequent encounter -X38XXXS Flood, sequela -X3901XA Exposure to radon, initial encounter -X3901XD Exposure to radon, subsequent encounter -X3901XS Exposure to radon, sequela -X3908XA Exposure to other natural radiation, initial encounter -X3908XD Exposure to other natural radiation, subsequent encounter -X3908XS Exposure to other natural radiation, sequela -X398XXA Other exposure to forces of nature, initial encounter -X398XXD Other exposure to forces of nature, subsequent encounter -X398XXS Other exposure to forces of nature, sequela -X500XXA Overexertion from strenuous movement or load, initial encounter -X500XXD Overexertion from strenuous movement or load, subsequent encounter -X500XXS Overexertion from strenuous movement or load, sequela -X501XXA Overexertion from prolonged static or awkward postures, initial encounter -X501XXD Overexertion from prolonged static or awkward postures, subsequent encounter -X501XXS Overexertion from prolonged static or awkward postures, sequela -X503XXA Overexertion from repetitive movements, initial encounter -X503XXD Overexertion from repetitive movements, subsequent encounter -X503XXS Overexertion from repetitive movements, sequela -X509XXA Other and unspecified overexertion or strenuous movements or postures, initial encounter -X509XXD Other and unspecified overexertion or strenuous movements or postures, subsequent encounter -X509XXS Other and unspecified overexertion or strenuous movements or postures, sequela -X52XXXA Prolonged stay in weightless environment, initial encounter -X52XXXD Prolonged stay in weightless environment, subsequent encounter -X52XXXS Prolonged stay in weightless environment, sequela -X58XXXA Exposure to other specified factors, initial encounter -X58XXXD Exposure to other specified factors, subsequent encounter -X58XXXS Exposure to other specified factors, sequela -X710XXA Intentional self-harm by drowning and submersion while in bathtub, initial encounter -X710XXD Intentional self-harm by drowning and submersion while in bathtub, subsequent encounter -X710XXS Intentional self-harm by drowning and submersion while in bathtub, sequela -X711XXA Intentional self-harm by drowning and submersion while in swimming pool, initial encounter -X711XXD Intentional self-harm by drowning and submersion while in swimming pool, subsequent encounter -X711XXS Intentional self-harm by drowning and submersion while in swimming pool, sequela -X712XXA Intentional self-harm by drowning and submersion after jump into swimming pool, initial encounter -X712XXD Intentional self-harm by drowning and submersion after jump into swimming pool, subsequent encounter -X712XXS Intentional self-harm by drowning and submersion after jump into swimming pool, sequela -X713XXA Intentional self-harm by drowning and submersion in natural water, initial encounter -X713XXD Intentional self-harm by drowning and submersion in natural water, subsequent encounter -X713XXS Intentional self-harm by drowning and submersion in natural water, sequela -X718XXA Other intentional self-harm by drowning and submersion, initial encounter -X718XXD Other intentional self-harm by drowning and submersion, subsequent encounter -X718XXS Other intentional self-harm by drowning and submersion, sequela -X719XXA Intentional self-harm by drowning and submersion, unspecified, initial encounter -X719XXD Intentional self-harm by drowning and submersion, unspecified, subsequent encounter -X719XXS Intentional self-harm by drowning and submersion, unspecified, sequela -X72XXXA Intentional self-harm by handgun discharge, initial encounter -X72XXXD Intentional self-harm by handgun discharge, subsequent encounter -X72XXXS Intentional self-harm by handgun discharge, sequela -X730XXA Intentional self-harm by shotgun discharge, initial encounter -X730XXD Intentional self-harm by shotgun discharge, subsequent encounter -X730XXS Intentional self-harm by shotgun discharge, sequela -X731XXA Intentional self-harm by hunting rifle discharge, initial encounter -X731XXD Intentional self-harm by hunting rifle discharge, subsequent encounter -X731XXS Intentional self-harm by hunting rifle discharge, sequela -X732XXA Intentional self-harm by machine gun discharge, initial encounter -X732XXD Intentional self-harm by machine gun discharge, subsequent encounter -X732XXS Intentional self-harm by machine gun discharge, sequela -X738XXA Intentional self-harm by other larger firearm discharge, initial encounter -X738XXD Intentional self-harm by other larger firearm discharge, subsequent encounter -X738XXS Intentional self-harm by other larger firearm discharge, sequela -X739XXA Intentional self-harm by unspecified larger firearm discharge, initial encounter -X739XXD Intentional self-harm by unspecified larger firearm discharge, subsequent encounter -X739XXS Intentional self-harm by unspecified larger firearm discharge, sequela -X7401XA Intentional self-harm by airgun, initial encounter -X7401XD Intentional self-harm by airgun, subsequent encounter -X7401XS Intentional self-harm by airgun, sequela -X7402XA Intentional self-harm by paintball gun, initial encounter -X7402XD Intentional self-harm by paintball gun, subsequent encounter -X7402XS Intentional self-harm by paintball gun, sequela -X7409XA Intentional self-harm by other gas, air or spring-operated gun, initial encounter -X7409XD Intentional self-harm by other gas, air or spring-operated gun, subsequent encounter -X7409XS Intentional self-harm by other gas, air or spring-operated gun, sequela -X748XXA Intentional self-harm by other firearm discharge, initial encounter -X748XXD Intentional self-harm by other firearm discharge, subsequent encounter -X748XXS Intentional self-harm by other firearm discharge, sequela -X749XXA Intentional self-harm by unspecified firearm discharge, initial encounter -X749XXD Intentional self-harm by unspecified firearm discharge, subsequent encounter -X749XXS Intentional self-harm by unspecified firearm discharge, sequela -X75XXXA Intentional self-harm by explosive material, initial encounter -X75XXXD Intentional self-harm by explosive material, subsequent encounter -X75XXXS Intentional self-harm by explosive material, sequela -X76XXXA Intentional self-harm by smoke, fire and flames, initial encounter -X76XXXD Intentional self-harm by smoke, fire and flames, subsequent encounter -X76XXXS Intentional self-harm by smoke, fire and flames, sequela -X770XXA Intentional self-harm by steam or hot vapors, initial encounter -X770XXD Intentional self-harm by steam or hot vapors, subsequent encounter -X770XXS Intentional self-harm by steam or hot vapors, sequela -X771XXA Intentional self-harm by hot tap water, initial encounter -X771XXD Intentional self-harm by hot tap water, subsequent encounter -X771XXS Intentional self-harm by hot tap water, sequela -X772XXA Intentional self-harm by other hot fluids, initial encounter -X772XXD Intentional self-harm by other hot fluids, subsequent encounter -X772XXS Intentional self-harm by other hot fluids, sequela -X773XXA Intentional self-harm by hot household appliances, initial encounter -X773XXD Intentional self-harm by hot household appliances, subsequent encounter -X773XXS Intentional self-harm by hot household appliances, sequela -X778XXA Intentional self-harm by other hot objects, initial encounter -X778XXD Intentional self-harm by other hot objects, subsequent encounter -X778XXS Intentional self-harm by other hot objects, sequela -X779XXA Intentional self-harm by unspecified hot objects, initial encounter -X779XXD Intentional self-harm by unspecified hot objects, subsequent encounter -X779XXS Intentional self-harm by unspecified hot objects, sequela -X780XXA Intentional self-harm by sharp glass, initial encounter -X780XXD Intentional self-harm by sharp glass, subsequent encounter -X780XXS Intentional self-harm by sharp glass, sequela -X781XXA Intentional self-harm by knife, initial encounter -X781XXD Intentional self-harm by knife, subsequent encounter -X781XXS Intentional self-harm by knife, sequela -X782XXA Intentional self-harm by sword or dagger, initial encounter -X782XXD Intentional self-harm by sword or dagger, subsequent encounter -X782XXS Intentional self-harm by sword or dagger, sequela -X788XXA Intentional self-harm by other sharp object, initial encounter -X788XXD Intentional self-harm by other sharp object, subsequent encounter -X788XXS Intentional self-harm by other sharp object, sequela -X789XXA Intentional self-harm by unspecified sharp object, initial encounter -X789XXD Intentional self-harm by unspecified sharp object, subsequent encounter -X789XXS Intentional self-harm by unspecified sharp object, sequela -X79XXXA Intentional self-harm by blunt object, initial encounter -X79XXXD Intentional self-harm by blunt object, subsequent encounter -X79XXXS Intentional self-harm by blunt object, sequela -X80XXXA Intentional self-harm by jumping from a high place, initial encounter -X80XXXD Intentional self-harm by jumping from a high place, subsequent encounter -X80XXXS Intentional self-harm by jumping from a high place, sequela -X810XXA Intentional self-harm by jumping or lying in front of motor vehicle, initial encounter -X810XXD Intentional self-harm by jumping or lying in front of motor vehicle, subsequent encounter -X810XXS Intentional self-harm by jumping or lying in front of motor vehicle, sequela -X811XXA Intentional self-harm by jumping or lying in front of (subway) train, initial encounter -X811XXD Intentional self-harm by jumping or lying in front of (subway) train, subsequent encounter -X811XXS Intentional self-harm by jumping or lying in front of (subway) train, sequela -X818XXA Intentional self-harm by jumping or lying in front of other moving object, initial encounter -X818XXD Intentional self-harm by jumping or lying in front of other moving object, subsequent encounter -X818XXS Intentional self-harm by jumping or lying in front of other moving object, sequela -X820XXA Intentional collision of motor vehicle with other motor vehicle, initial encounter -X820XXD Intentional collision of motor vehicle with other motor vehicle, subsequent encounter -X820XXS Intentional collision of motor vehicle with other motor vehicle, sequela -X821XXA Intentional collision of motor vehicle with train, initial encounter -X821XXD Intentional collision of motor vehicle with train, subsequent encounter -X821XXS Intentional collision of motor vehicle with train, sequela -X822XXA Intentional collision of motor vehicle with tree, initial encounter -X822XXD Intentional collision of motor vehicle with tree, subsequent encounter -X822XXS Intentional collision of motor vehicle with tree, sequela -X828XXA Other intentional self-harm by crashing of motor vehicle, initial encounter -X828XXD Other intentional self-harm by crashing of motor vehicle, subsequent encounter -X828XXS Other intentional self-harm by crashing of motor vehicle, sequela -X830XXA Intentional self-harm by crashing of aircraft, initial encounter -X830XXD Intentional self-harm by crashing of aircraft, subsequent encounter -X830XXS Intentional self-harm by crashing of aircraft, sequela -X831XXA Intentional self-harm by electrocution, initial encounter -X831XXD Intentional self-harm by electrocution, subsequent encounter -X831XXS Intentional self-harm by electrocution, sequela -X832XXA Intentional self-harm by exposure to extremes of cold, initial encounter -X832XXD Intentional self-harm by exposure to extremes of cold, subsequent encounter -X832XXS Intentional self-harm by exposure to extremes of cold, sequela -X838XXA Intentional self-harm by other specified means, initial encounter -X838XXD Intentional self-harm by other specified means, subsequent encounter -X838XXS Intentional self-harm by other specified means, sequela -X920XXA Assault by drowning and submersion while in bathtub, initial encounter -X920XXD Assault by drowning and submersion while in bathtub, subsequent encounter -X920XXS Assault by drowning and submersion while in bathtub, sequela -X921XXA Assault by drowning and submersion while in swimming pool, initial encounter -X921XXD Assault by drowning and submersion while in swimming pool, subsequent encounter -X921XXS Assault by drowning and submersion while in swimming pool, sequela -X922XXA Assault by drowning and submersion after push into swimming pool, initial encounter -X922XXD Assault by drowning and submersion after push into swimming pool, subsequent encounter -X922XXS Assault by drowning and submersion after push into swimming pool, sequela -X923XXA Assault by drowning and submersion in natural water, initial encounter -X923XXD Assault by drowning and submersion in natural water, subsequent encounter -X923XXS Assault by drowning and submersion in natural water, sequela -X928XXA Other assault by drowning and submersion, initial encounter -X928XXD Other assault by drowning and submersion, subsequent encounter -X928XXS Other assault by drowning and submersion, sequela -X929XXA Assault by drowning and submersion, unspecified, initial encounter -X929XXD Assault by drowning and submersion, unspecified, subsequent encounter -X929XXS Assault by drowning and submersion, unspecified, sequela -X93XXXA Assault by handgun discharge, initial encounter -X93XXXD Assault by handgun discharge, subsequent encounter -X93XXXS Assault by handgun discharge, sequela -X940XXA Assault by shotgun, initial encounter -X940XXD Assault by shotgun, subsequent encounter -X940XXS Assault by shotgun, sequela -X941XXA Assault by hunting rifle, initial encounter -X941XXD Assault by hunting rifle, subsequent encounter -X941XXS Assault by hunting rifle, sequela -X942XXA Assault by machine gun, initial encounter -X942XXD Assault by machine gun, subsequent encounter -X942XXS Assault by machine gun, sequela -X948XXA Assault by other larger firearm discharge, initial encounter -X948XXD Assault by other larger firearm discharge, subsequent encounter -X948XXS Assault by other larger firearm discharge, sequela -X949XXA Assault by unspecified larger firearm discharge, initial encounter -X949XXD Assault by unspecified larger firearm discharge, subsequent encounter -X949XXS Assault by unspecified larger firearm discharge, sequela -X9501XA Assault by airgun discharge, initial encounter -X9501XD Assault by airgun discharge, subsequent encounter -X9501XS Assault by airgun discharge, sequela -X9502XA Assault by paintball gun discharge, initial encounter -X9502XD Assault by paintball gun discharge, subsequent encounter -X9502XS Assault by paintball gun discharge, sequela -X9509XA Assault by other gas, air or spring-operated gun, initial encounter -X9509XD Assault by other gas, air or spring-operated gun, subsequent encounter -X9509XS Assault by other gas, air or spring-operated gun, sequela -X958XXA Assault by other firearm discharge, initial encounter -X958XXD Assault by other firearm discharge, subsequent encounter -X958XXS Assault by other firearm discharge, sequela -X959XXA Assault by unspecified firearm discharge, initial encounter -X959XXD Assault by unspecified firearm discharge, subsequent encounter -X959XXS Assault by unspecified firearm discharge, sequela -X960XXA Assault by antipersonnel bomb, initial encounter -X960XXD Assault by antipersonnel bomb, subsequent encounter -X960XXS Assault by antipersonnel bomb, sequela -X961XXA Assault by gasoline bomb, initial encounter -X961XXD Assault by gasoline bomb, subsequent encounter -X961XXS Assault by gasoline bomb, sequela -X962XXA Assault by letter bomb, initial encounter -X962XXD Assault by letter bomb, subsequent encounter -X962XXS Assault by letter bomb, sequela -X963XXA Assault by fertilizer bomb, initial encounter -X963XXD Assault by fertilizer bomb, subsequent encounter -X963XXS Assault by fertilizer bomb, sequela -X964XXA Assault by pipe bomb, initial encounter -X964XXD Assault by pipe bomb, subsequent encounter -X964XXS Assault by pipe bomb, sequela -X968XXA Assault by other specified explosive, initial encounter -X968XXD Assault by other specified explosive, subsequent encounter -X968XXS Assault by other specified explosive, sequela -X969XXA Assault by unspecified explosive, initial encounter -X969XXD Assault by unspecified explosive, subsequent encounter -X969XXS Assault by unspecified explosive, sequela -X97XXXA Assault by smoke, fire and flames, initial encounter -X97XXXD Assault by smoke, fire and flames, subsequent encounter -X97XXXS Assault by smoke, fire and flames, sequela -X980XXA Assault by steam or hot vapors, initial encounter -X980XXD Assault by steam or hot vapors, subsequent encounter -X980XXS Assault by steam or hot vapors, sequela -X981XXA Assault by hot tap water, initial encounter -X981XXD Assault by hot tap water, subsequent encounter -X981XXS Assault by hot tap water, sequela -X982XXA Assault by hot fluids, initial encounter -X982XXD Assault by hot fluids, subsequent encounter -X982XXS Assault by hot fluids, sequela -X983XXA Assault by hot household appliances, initial encounter -X983XXD Assault by hot household appliances, subsequent encounter -X983XXS Assault by hot household appliances, sequela -X988XXA Assault by other hot objects, initial encounter -X988XXD Assault by other hot objects, subsequent encounter -X988XXS Assault by other hot objects, sequela -X989XXA Assault by unspecified hot objects, initial encounter -X989XXD Assault by unspecified hot objects, subsequent encounter -X989XXS Assault by unspecified hot objects, sequela -X990XXA Assault by sharp glass, initial encounter -X990XXD Assault by sharp glass, subsequent encounter -X990XXS Assault by sharp glass, sequela -X991XXA Assault by knife, initial encounter -X991XXD Assault by knife, subsequent encounter -X991XXS Assault by knife, sequela -X992XXA Assault by sword or dagger, initial encounter -X992XXD Assault by sword or dagger, subsequent encounter -X992XXS Assault by sword or dagger, sequela -X998XXA Assault by other sharp object, initial encounter -X998XXD Assault by other sharp object, subsequent encounter -X998XXS Assault by other sharp object, sequela -X999XXA Assault by unspecified sharp object, initial encounter -X999XXD Assault by unspecified sharp object, subsequent encounter -X999XXS Assault by unspecified sharp object, sequela -Y00XXXA Assault by blunt object, initial encounter -Y00XXXD Assault by blunt object, subsequent encounter -Y00XXXS Assault by blunt object, sequela -Y01XXXA Assault by pushing from high place, initial encounter -Y01XXXD Assault by pushing from high place, subsequent encounter -Y01XXXS Assault by pushing from high place, sequela -Y020XXA Assault by pushing or placing victim in front of motor vehicle, initial encounter -Y020XXD Assault by pushing or placing victim in front of motor vehicle, subsequent encounter -Y020XXS Assault by pushing or placing victim in front of motor vehicle, sequela -Y021XXA Assault by pushing or placing victim in front of (subway) train, initial encounter -Y021XXD Assault by pushing or placing victim in front of (subway) train, subsequent encounter -Y021XXS Assault by pushing or placing victim in front of (subway) train, sequela -Y028XXA Assault by pushing or placing victim in front of other moving object, initial encounter -Y028XXD Assault by pushing or placing victim in front of other moving object, subsequent encounter -Y028XXS Assault by pushing or placing victim in front of other moving object, sequela -Y030XXA Assault by being hit or run over by motor vehicle, initial encounter -Y030XXD Assault by being hit or run over by motor vehicle, subsequent encounter -Y030XXS Assault by being hit or run over by motor vehicle, sequela -Y038XXA Other assault by crashing of motor vehicle, initial encounter -Y038XXD Other assault by crashing of motor vehicle, subsequent encounter -Y038XXS Other assault by crashing of motor vehicle, sequela -Y040XXA Assault by unarmed brawl or fight, initial encounter -Y040XXD Assault by unarmed brawl or fight, subsequent encounter -Y040XXS Assault by unarmed brawl or fight, sequela -Y041XXA Assault by human bite, initial encounter -Y041XXD Assault by human bite, subsequent encounter -Y041XXS Assault by human bite, sequela -Y042XXA Assault by strike against or bumped into by another person, initial encounter -Y042XXD Assault by strike against or bumped into by another person, subsequent encounter -Y042XXS Assault by strike against or bumped into by another person, sequela -Y048XXA Assault by other bodily force, initial encounter -Y048XXD Assault by other bodily force, subsequent encounter -Y048XXS Assault by other bodily force, sequela -Y0701 Husband, perpetrator of maltreatment and neglect -Y0702 Wife, perpetrator of maltreatment and neglect -Y0703 Male partner, perpetrator of maltreatment and neglect -Y0704 Female partner, perpetrator of maltreatment and neglect -Y0711 Biological father, perpetrator of maltreatment and neglect -Y0712 Biological mother, perpetrator of maltreatment and neglect -Y0713 Adoptive father, perpetrator of maltreatment and neglect -Y0714 Adoptive mother, perpetrator of maltreatment and neglect -Y07410 Brother, perpetrator of maltreatment and neglect -Y07411 Sister, perpetrator of maltreatment and neglect -Y07420 Foster father, perpetrator of maltreatment and neglect -Y07421 Foster mother, perpetrator of maltreatment and neglect -Y07430 Stepfather, perpetrator of maltreatment and neglect -Y07432 Male friend of parent (co-residing in household), perpetrator of maltreatment and neglect -Y07433 Stepmother, perpetrator of maltreatment and neglect -Y07434 Female friend of parent (co-residing in household), perpetrator of maltreatment and neglect -Y07435 Stepbrother, perpetrator or maltreatment and neglect -Y07436 Stepsister, perpetrator of maltreatment and neglect -Y07490 Male cousin, perpetrator of maltreatment and neglect -Y07491 Female cousin, perpetrator of maltreatment and neglect -Y07499 Other family member, perpetrator of maltreatment and neglect -Y0750 Unspecified non-family member, perpetrator of maltreatment and neglect -Y07510 At-home childcare provider, perpetrator of maltreatment and neglect -Y07511 Daycare center childcare provider, perpetrator of maltreatment and neglect -Y07512 At-home adultcare provider, perpetrator of maltreatment and neglect -Y07513 Adultcare center provider, perpetrator of maltreatment and neglect -Y07519 Unspecified daycare provider, perpetrator of maltreatment and neglect -Y07521 Mental health provider, perpetrator of maltreatment and neglect -Y07528 Other therapist or healthcare provider, perpetrator of maltreatment and neglect -Y07529 Unspecified healthcare provider, perpetrator of maltreatment and neglect -Y0753 Teacher or instructor, perpetrator of maltreatment and neglect -Y0759 Other non-family member, perpetrator of maltreatment and neglect -Y079 Unspecified perpetrator of maltreatment and neglect -Y0801XA Assault by strike by hockey stick, initial encounter -Y0801XD Assault by strike by hockey stick, subsequent encounter -Y0801XS Assault by strike by hockey stick, sequela -Y0802XA Assault by strike by baseball bat, initial encounter -Y0802XD Assault by strike by baseball bat, subsequent encounter -Y0802XS Assault by strike by baseball bat, sequela -Y0809XA Assault by strike by other specified type of sport equipment, initial encounter -Y0809XD Assault by strike by other specified type of sport equipment, subsequent encounter -Y0809XS Assault by strike by other specified type of sport equipment, sequela -Y0881XA Assault by crashing of aircraft, initial encounter -Y0881XD Assault by crashing of aircraft, subsequent encounter -Y0881XS Assault by crashing of aircraft, sequela -Y0889XA Assault by other specified means, initial encounter -Y0889XD Assault by other specified means, subsequent encounter -Y0889XS Assault by other specified means, sequela -Y09 Assault by unspecified means -Y210XXA Drowning and submersion while in bathtub, undetermined intent, initial encounter -Y210XXD Drowning and submersion while in bathtub, undetermined intent, subsequent encounter -Y210XXS Drowning and submersion while in bathtub, undetermined intent, sequela -Y211XXA Drowning and submersion after fall into bathtub, undetermined intent, initial encounter -Y211XXD Drowning and submersion after fall into bathtub, undetermined intent, subsequent encounter -Y211XXS Drowning and submersion after fall into bathtub, undetermined intent, sequela -Y212XXA Drowning and submersion while in swimming pool, undetermined intent, initial encounter -Y212XXD Drowning and submersion while in swimming pool, undetermined intent, subsequent encounter -Y212XXS Drowning and submersion while in swimming pool, undetermined intent, sequela -Y213XXA Drowning and submersion after fall into swimming pool, undetermined intent, initial encounter -Y213XXD Drowning and submersion after fall into swimming pool, undetermined intent, subsequent encounter -Y213XXS Drowning and submersion after fall into swimming pool, undetermined intent, sequela -Y214XXA Drowning and submersion in natural water, undetermined intent, initial encounter -Y214XXD Drowning and submersion in natural water, undetermined intent, subsequent encounter -Y214XXS Drowning and submersion in natural water, undetermined intent, sequela -Y218XXA Other drowning and submersion, undetermined intent, initial encounter -Y218XXD Other drowning and submersion, undetermined intent, subsequent encounter -Y218XXS Other drowning and submersion, undetermined intent, sequela -Y219XXA Unspecified drowning and submersion, undetermined intent, initial encounter -Y219XXD Unspecified drowning and submersion, undetermined intent, subsequent encounter -Y219XXS Unspecified drowning and submersion, undetermined intent, sequela -Y22XXXA Handgun discharge, undetermined intent, initial encounter -Y22XXXD Handgun discharge, undetermined intent, subsequent encounter -Y22XXXS Handgun discharge, undetermined intent, sequela -Y230XXA Shotgun discharge, undetermined intent, initial encounter -Y230XXD Shotgun discharge, undetermined intent, subsequent encounter -Y230XXS Shotgun discharge, undetermined intent, sequela -Y231XXA Hunting rifle discharge, undetermined intent, initial encounter -Y231XXD Hunting rifle discharge, undetermined intent, subsequent encounter -Y231XXS Hunting rifle discharge, undetermined intent, sequela -Y232XXA Military firearm discharge, undetermined intent, initial encounter -Y232XXD Military firearm discharge, undetermined intent, subsequent encounter -Y232XXS Military firearm discharge, undetermined intent, sequela -Y233XXA Machine gun discharge, undetermined intent, initial encounter -Y233XXD Machine gun discharge, undetermined intent, subsequent encounter -Y233XXS Machine gun discharge, undetermined intent, sequela -Y238XXA Other larger firearm discharge, undetermined intent, initial encounter -Y238XXD Other larger firearm discharge, undetermined intent, subsequent encounter -Y238XXS Other larger firearm discharge, undetermined intent, sequela -Y239XXA Unspecified larger firearm discharge, undetermined intent, initial encounter -Y239XXD Unspecified larger firearm discharge, undetermined intent, subsequent encounter -Y239XXS Unspecified larger firearm discharge, undetermined intent, sequela -Y240XXA Airgun discharge, undetermined intent, initial encounter -Y240XXD Airgun discharge, undetermined intent, subsequent encounter -Y240XXS Airgun discharge, undetermined intent, sequela -Y248XXA Other firearm discharge, undetermined intent, initial encounter -Y248XXD Other firearm discharge, undetermined intent, subsequent encounter -Y248XXS Other firearm discharge, undetermined intent, sequela -Y249XXA Unspecified firearm discharge, undetermined intent, initial encounter -Y249XXD Unspecified firearm discharge, undetermined intent, subsequent encounter -Y249XXS Unspecified firearm discharge, undetermined intent, sequela -Y25XXXA Contact with explosive material, undetermined intent, initial encounter -Y25XXXD Contact with explosive material, undetermined intent, subsequent encounter -Y25XXXS Contact with explosive material, undetermined intent, sequela -Y26XXXA Exposure to smoke, fire and flames, undetermined intent, initial encounter -Y26XXXD Exposure to smoke, fire and flames, undetermined intent, subsequent encounter -Y26XXXS Exposure to smoke, fire and flames, undetermined intent, sequela -Y270XXA Contact with steam and hot vapors, undetermined intent, initial encounter -Y270XXD Contact with steam and hot vapors, undetermined intent, subsequent encounter -Y270XXS Contact with steam and hot vapors, undetermined intent, sequela -Y271XXA Contact with hot tap water, undetermined intent, initial encounter -Y271XXD Contact with hot tap water, undetermined intent, subsequent encounter -Y271XXS Contact with hot tap water, undetermined intent, sequela -Y272XXA Contact with hot fluids, undetermined intent, initial encounter -Y272XXD Contact with hot fluids, undetermined intent, subsequent encounter -Y272XXS Contact with hot fluids, undetermined intent, sequela -Y273XXA Contact with hot household appliance, undetermined intent, initial encounter -Y273XXD Contact with hot household appliance, undetermined intent, subsequent encounter -Y273XXS Contact with hot household appliance, undetermined intent, sequela -Y278XXA Contact with other hot objects, undetermined intent, initial encounter -Y278XXD Contact with other hot objects, undetermined intent, subsequent encounter -Y278XXS Contact with other hot objects, undetermined intent, sequela -Y279XXA Contact with unspecified hot objects, undetermined intent, initial encounter -Y279XXD Contact with unspecified hot objects, undetermined intent, subsequent encounter -Y279XXS Contact with unspecified hot objects, undetermined intent, sequela -Y280XXA Contact with sharp glass, undetermined intent, initial encounter -Y280XXD Contact with sharp glass, undetermined intent, subsequent encounter -Y280XXS Contact with sharp glass, undetermined intent, sequela -Y281XXA Contact with knife, undetermined intent, initial encounter -Y281XXD Contact with knife, undetermined intent, subsequent encounter -Y281XXS Contact with knife, undetermined intent, sequela -Y282XXA Contact with sword or dagger, undetermined intent, initial encounter -Y282XXD Contact with sword or dagger, undetermined intent, subsequent encounter -Y282XXS Contact with sword or dagger, undetermined intent, sequela -Y288XXA Contact with other sharp object, undetermined intent, initial encounter -Y288XXD Contact with other sharp object, undetermined intent, subsequent encounter -Y288XXS Contact with other sharp object, undetermined intent, sequela -Y289XXA Contact with unspecified sharp object, undetermined intent, initial encounter -Y289XXD Contact with unspecified sharp object, undetermined intent, subsequent encounter -Y289XXS Contact with unspecified sharp object, undetermined intent, sequela -Y29XXXA Contact with blunt object, undetermined intent, initial encounter -Y29XXXD Contact with blunt object, undetermined intent, subsequent encounter -Y29XXXS Contact with blunt object, undetermined intent, sequela -Y30XXXA Falling, jumping or pushed from a high place, undetermined intent, initial encounter -Y30XXXD Falling, jumping or pushed from a high place, undetermined intent, subsequent encounter -Y30XXXS Falling, jumping or pushed from a high place, undetermined intent, sequela -Y31XXXA Falling, lying or running before or into moving object, undetermined intent, initial encounter -Y31XXXD Falling, lying or running before or into moving object, undetermined intent, subsequent encounter -Y31XXXS Falling, lying or running before or into moving object, undetermined intent, sequela -Y32XXXA Crashing of motor vehicle, undetermined intent, initial encounter -Y32XXXD Crashing of motor vehicle, undetermined intent, subsequent encounter -Y32XXXS Crashing of motor vehicle, undetermined intent, sequela -Y33XXXA Other specified events, undetermined intent, initial encounter -Y33XXXD Other specified events, undetermined intent, subsequent encounter -Y33XXXS Other specified events, undetermined intent, sequela -Y35001A Legal intervention involving unspecified firearm discharge, law enforcement official injured, initial encounter -Y35001D Legal intervention involving unspecified firearm discharge, law enforcement official injured, subsequent encounter -Y35001S Legal intervention involving unspecified firearm discharge, law enforcement official injured, sequela -Y35002A Legal intervention involving unspecified firearm discharge, bystander injured, initial encounter -Y35002D Legal intervention involving unspecified firearm discharge, bystander injured, subsequent encounter -Y35002S Legal intervention involving unspecified firearm discharge, bystander injured, sequela -Y35003A Legal intervention involving unspecified firearm discharge, suspect injured, initial encounter -Y35003D Legal intervention involving unspecified firearm discharge, suspect injured, subsequent encounter -Y35003S Legal intervention involving unspecified firearm discharge, suspect injured, sequela -Y35011A Legal intervention involving injury by machine gun, law enforcement official injured, initial encounter -Y35011D Legal intervention involving injury by machine gun, law enforcement official injured, subsequent encounter -Y35011S Legal intervention involving injury by machine gun, law enforcement official injured, sequela -Y35012A Legal intervention involving injury by machine gun, bystander injured, initial encounter -Y35012D Legal intervention involving injury by machine gun, bystander injured, subsequent encounter -Y35012S Legal intervention involving injury by machine gun, bystander injured, sequela -Y35013A Legal intervention involving injury by machine gun, suspect injured, initial encounter -Y35013D Legal intervention involving injury by machine gun, suspect injured, subsequent encounter -Y35013S Legal intervention involving injury by machine gun, suspect injured, sequela -Y35021A Legal intervention involving injury by handgun, law enforcement official injured, initial encounter -Y35021D Legal intervention involving injury by handgun, law enforcement official injured, subsequent encounter -Y35021S Legal intervention involving injury by handgun, law enforcement official injured, sequela -Y35022A Legal intervention involving injury by handgun, bystander injured, initial encounter -Y35022D Legal intervention involving injury by handgun, bystander injured, subsequent encounter -Y35022S Legal intervention involving injury by handgun, bystander injured, sequela -Y35023A Legal intervention involving injury by handgun, suspect injured, initial encounter -Y35023D Legal intervention involving injury by handgun, suspect injured, subsequent encounter -Y35023S Legal intervention involving injury by handgun, suspect injured, sequela -Y35031A Legal intervention involving injury by rifle pellet, law enforcement official injured, initial encounter -Y35031D Legal intervention involving injury by rifle pellet, law enforcement official injured, subsequent encounter -Y35031S Legal intervention involving injury by rifle pellet, law enforcement official injured, sequela -Y35032A Legal intervention involving injury by rifle pellet, bystander injured, initial encounter -Y35032D Legal intervention involving injury by rifle pellet, bystander injured, subsequent encounter -Y35032S Legal intervention involving injury by rifle pellet, bystander injured, sequela -Y35033A Legal intervention involving injury by rifle pellet, suspect injured, initial encounter -Y35033D Legal intervention involving injury by rifle pellet, suspect injured, subsequent encounter -Y35033S Legal intervention involving injury by rifle pellet, suspect injured, sequela -Y35041A Legal intervention involving injury by rubber bullet, law enforcement official injured, initial encounter -Y35041D Legal intervention involving injury by rubber bullet, law enforcement official injured, subsequent encounter -Y35041S Legal intervention involving injury by rubber bullet, law enforcement official injured, sequela -Y35042A Legal intervention involving injury by rubber bullet, bystander injured, initial encounter -Y35042D Legal intervention involving injury by rubber bullet, bystander injured, subsequent encounter -Y35042S Legal intervention involving injury by rubber bullet, bystander injured, sequela -Y35043A Legal intervention involving injury by rubber bullet, suspect injured, initial encounter -Y35043D Legal intervention involving injury by rubber bullet, suspect injured, subsequent encounter -Y35043S Legal intervention involving injury by rubber bullet, suspect injured, sequela -Y35091A Legal intervention involving other firearm discharge, law enforcement official injured, initial encounter -Y35091D Legal intervention involving other firearm discharge, law enforcement official injured, subsequent encounter -Y35091S Legal intervention involving other firearm discharge, law enforcement official injured, sequela -Y35092A Legal intervention involving other firearm discharge, bystander injured, initial encounter -Y35092D Legal intervention involving other firearm discharge, bystander injured, subsequent encounter -Y35092S Legal intervention involving other firearm discharge, bystander injured, sequela -Y35093A Legal intervention involving other firearm discharge, suspect injured, initial encounter -Y35093D Legal intervention involving other firearm discharge, suspect injured, subsequent encounter -Y35093S Legal intervention involving other firearm discharge, suspect injured, sequela -Y35101A Legal intervention involving unspecified explosives, law enforcement official injured, initial encounter -Y35101D Legal intervention involving unspecified explosives, law enforcement official injured, subsequent encounter -Y35101S Legal intervention involving unspecified explosives, law enforcement official injured, sequela -Y35102A Legal intervention involving unspecified explosives, bystander injured, initial encounter -Y35102D Legal intervention involving unspecified explosives, bystander injured, subsequent encounter -Y35102S Legal intervention involving unspecified explosives, bystander injured, sequela -Y35103A Legal intervention involving unspecified explosives, suspect injured, initial encounter -Y35103D Legal intervention involving unspecified explosives, suspect injured, subsequent encounter -Y35103S Legal intervention involving unspecified explosives, suspect injured, sequela -Y35111A Legal intervention involving injury by dynamite, law enforcement official injured, initial encounter -Y35111D Legal intervention involving injury by dynamite, law enforcement official injured, subsequent encounter -Y35111S Legal intervention involving injury by dynamite, law enforcement official injured, sequela -Y35112A Legal intervention involving injury by dynamite, bystander injured, initial encounter -Y35112D Legal intervention involving injury by dynamite, bystander injured, subsequent encounter -Y35112S Legal intervention involving injury by dynamite, bystander injured, sequela -Y35113A Legal intervention involving injury by dynamite, suspect injured, initial encounter -Y35113D Legal intervention involving injury by dynamite, suspect injured, subsequent encounter -Y35113S Legal intervention involving injury by dynamite, suspect injured, sequela -Y35121A Legal intervention involving injury by explosive shell, law enforcement official injured, initial encounter -Y35121D Legal intervention involving injury by explosive shell, law enforcement official injured, subsequent encounter -Y35121S Legal intervention involving injury by explosive shell, law enforcement official injured, sequela -Y35122A Legal intervention involving injury by explosive shell, bystander injured, initial encounter -Y35122D Legal intervention involving injury by explosive shell, bystander injured, subsequent encounter -Y35122S Legal intervention involving injury by explosive shell, bystander injured, sequela -Y35123A Legal intervention involving injury by explosive shell, suspect injured, initial encounter -Y35123D Legal intervention involving injury by explosive shell, suspect injured, subsequent encounter -Y35123S Legal intervention involving injury by explosive shell, suspect injured, sequela -Y35191A Legal intervention involving other explosives, law enforcement official injured, initial encounter -Y35191D Legal intervention involving other explosives, law enforcement official injured, subsequent encounter -Y35191S Legal intervention involving other explosives, law enforcement official injured, sequela -Y35192A Legal intervention involving other explosives, bystander injured, initial encounter -Y35192D Legal intervention involving other explosives, bystander injured, subsequent encounter -Y35192S Legal intervention involving other explosives, bystander injured, sequela -Y35193A Legal intervention involving other explosives, suspect injured, initial encounter -Y35193D Legal intervention involving other explosives, suspect injured, subsequent encounter -Y35193S Legal intervention involving other explosives, suspect injured, sequela -Y35201A Legal intervention involving unspecified gas, law enforcement official injured, initial encounter -Y35201D Legal intervention involving unspecified gas, law enforcement official injured, subsequent encounter -Y35201S Legal intervention involving unspecified gas, law enforcement official injured, sequela -Y35202A Legal intervention involving unspecified gas, bystander injured, initial encounter -Y35202D Legal intervention involving unspecified gas, bystander injured, subsequent encounter -Y35202S Legal intervention involving unspecified gas, bystander injured, sequela -Y35203A Legal intervention involving unspecified gas, suspect injured, initial encounter -Y35203D Legal intervention involving unspecified gas, suspect injured, subsequent encounter -Y35203S Legal intervention involving unspecified gas, suspect injured, sequela -Y35211A Legal intervention involving injury by tear gas, law enforcement official injured, initial encounter -Y35211D Legal intervention involving injury by tear gas, law enforcement official injured, subsequent encounter -Y35211S Legal intervention involving injury by tear gas, law enforcement official injured, sequela -Y35212A Legal intervention involving injury by tear gas, bystander injured, initial encounter -Y35212D Legal intervention involving injury by tear gas, bystander injured, subsequent encounter -Y35212S Legal intervention involving injury by tear gas, bystander injured, sequela -Y35213A Legal intervention involving injury by tear gas, suspect injured, initial encounter -Y35213D Legal intervention involving injury by tear gas, suspect injured, subsequent encounter -Y35213S Legal intervention involving injury by tear gas, suspect injured, sequela -Y35291A Legal intervention involving other gas, law enforcement official injured, initial encounter -Y35291D Legal intervention involving other gas, law enforcement official injured, subsequent encounter -Y35291S Legal intervention involving other gas, law enforcement official injured, sequela -Y35292A Legal intervention involving other gas, bystander injured, initial encounter -Y35292D Legal intervention involving other gas, bystander injured, subsequent encounter -Y35292S Legal intervention involving other gas, bystander injured, sequela -Y35293A Legal intervention involving other gas, suspect injured, initial encounter -Y35293D Legal intervention involving other gas, suspect injured, subsequent encounter -Y35293S Legal intervention involving other gas, suspect injured, sequela -Y35301A Legal intervention involving unspecified blunt objects, law enforcement official injured, initial encounter -Y35301D Legal intervention involving unspecified blunt objects, law enforcement official injured, subsequent encounter -Y35301S Legal intervention involving unspecified blunt objects, law enforcement official injured, sequela -Y35302A Legal intervention involving unspecified blunt objects, bystander injured, initial encounter -Y35302D Legal intervention involving unspecified blunt objects, bystander injured, subsequent encounter -Y35302S Legal intervention involving unspecified blunt objects, bystander injured, sequela -Y35303A Legal intervention involving unspecified blunt objects, suspect injured, initial encounter -Y35303D Legal intervention involving unspecified blunt objects, suspect injured, subsequent encounter -Y35303S Legal intervention involving unspecified blunt objects, suspect injured, sequela -Y35311A Legal intervention involving baton, law enforcement official injured, initial encounter -Y35311D Legal intervention involving baton, law enforcement official injured, subsequent encounter -Y35311S Legal intervention involving baton, law enforcement official injured, sequela -Y35312A Legal intervention involving baton, bystander injured, initial encounter -Y35312D Legal intervention involving baton, bystander injured, subsequent encounter -Y35312S Legal intervention involving baton, bystander injured, sequela -Y35313A Legal intervention involving baton, suspect injured, initial encounter -Y35313D Legal intervention involving baton, suspect injured, subsequent encounter -Y35313S Legal intervention involving baton, suspect injured, sequela -Y35391A Legal intervention involving other blunt objects, law enforcement official injured, initial encounter -Y35391D Legal intervention involving other blunt objects, law enforcement official injured, subsequent encounter -Y35391S Legal intervention involving other blunt objects, law enforcement official injured, sequela -Y35392A Legal intervention involving other blunt objects, bystander injured, initial encounter -Y35392D Legal intervention involving other blunt objects, bystander injured, subsequent encounter -Y35392S Legal intervention involving other blunt objects, bystander injured, sequela -Y35393A Legal intervention involving other blunt objects, suspect injured, initial encounter -Y35393D Legal intervention involving other blunt objects, suspect injured, subsequent encounter -Y35393S Legal intervention involving other blunt objects, suspect injured, sequela -Y35401A Legal intervention involving unspecified sharp objects, law enforcement official injured, initial encounter -Y35401D Legal intervention involving unspecified sharp objects, law enforcement official injured, subsequent encounter -Y35401S Legal intervention involving unspecified sharp objects, law enforcement official injured, sequela -Y35402A Legal intervention involving unspecified sharp objects, bystander injured, initial encounter -Y35402D Legal intervention involving unspecified sharp objects, bystander injured, subsequent encounter -Y35402S Legal intervention involving unspecified sharp objects, bystander injured, sequela -Y35403A Legal intervention involving unspecified sharp objects, suspect injured, initial encounter -Y35403D Legal intervention involving unspecified sharp objects, suspect injured, subsequent encounter -Y35403S Legal intervention involving unspecified sharp objects, suspect injured, sequela -Y35411A Legal intervention involving bayonet, law enforcement official injured, initial encounter -Y35411D Legal intervention involving bayonet, law enforcement official injured, subsequent encounter -Y35411S Legal intervention involving bayonet, law enforcement official injured, sequela -Y35412A Legal intervention involving bayonet, bystander injured, initial encounter -Y35412D Legal intervention involving bayonet, bystander injured, subsequent encounter -Y35412S Legal intervention involving bayonet, bystander injured, sequela -Y35413A Legal intervention involving bayonet, suspect injured, initial encounter -Y35413D Legal intervention involving bayonet, suspect injured, subsequent encounter -Y35413S Legal intervention involving bayonet, suspect injured, sequela -Y35491A Legal intervention involving other sharp objects, law enforcement official injured, initial encounter -Y35491D Legal intervention involving other sharp objects, law enforcement official injured, subsequent encounter -Y35491S Legal intervention involving other sharp objects, law enforcement official injured, sequela -Y35492A Legal intervention involving other sharp objects, bystander injured, initial encounter -Y35492D Legal intervention involving other sharp objects, bystander injured, subsequent encounter -Y35492S Legal intervention involving other sharp objects, bystander injured, sequela -Y35493A Legal intervention involving other sharp objects, suspect injured, initial encounter -Y35493D Legal intervention involving other sharp objects, suspect injured, subsequent encounter -Y35493S Legal intervention involving other sharp objects, suspect injured, sequela -Y35811A Legal intervention involving manhandling, law enforcement official injured, initial encounter -Y35811D Legal intervention involving manhandling, law enforcement official injured, subsequent encounter -Y35811S Legal intervention involving manhandling, law enforcement official injured, sequela -Y35812A Legal intervention involving manhandling, bystander injured, initial encounter -Y35812D Legal intervention involving manhandling, bystander injured, subsequent encounter -Y35812S Legal intervention involving manhandling, bystander injured, sequela -Y35813A Legal intervention involving manhandling, suspect injured, initial encounter -Y35813D Legal intervention involving manhandling, suspect injured, subsequent encounter -Y35813S Legal intervention involving manhandling, suspect injured, sequela -Y35891A Legal intervention involving other specified means, law enforcement official injured, initial encounter -Y35891D Legal intervention involving other specified means, law enforcement official injured, subsequent encounter -Y35891S Legal intervention involving other specified means, law enforcement official injured, sequela -Y35892A Legal intervention involving other specified means, bystander injured, initial encounter -Y35892D Legal intervention involving other specified means, bystander injured, subsequent encounter -Y35892S Legal intervention involving other specified means, bystander injured, sequela -Y35893A Legal intervention involving other specified means, suspect injured, initial encounter -Y35893D Legal intervention involving other specified means, suspect injured, subsequent encounter -Y35893S Legal intervention involving other specified means, suspect injured, sequela -Y3591XA Legal intervention, means unspecified, law enforcement official injured, initial encounter -Y3591XD Legal intervention, means unspecified, law enforcement official injured, subsequent encounter -Y3591XS Legal intervention, means unspecified, law enforcement official injured, sequela -Y3592XA Legal intervention, means unspecified, bystander injured, initial encounter -Y3592XD Legal intervention, means unspecified, bystander injured, subsequent encounter -Y3592XS Legal intervention, means unspecified, bystander injured, sequela -Y3593XA Legal intervention, means unspecified, suspect injured, initial encounter -Y3593XD Legal intervention, means unspecified, suspect injured, subsequent encounter -Y3593XS Legal intervention, means unspecified, suspect injured, sequela -Y36000A War operations involving explosion of unspecified marine weapon, military personnel, initial encounter -Y36000D War operations involving explosion of unspecified marine weapon, military personnel, subsequent encounter -Y36000S War operations involving explosion of unspecified marine weapon, military personnel, sequela -Y36001A War operations involving explosion of unspecified marine weapon, civilian, initial encounter -Y36001D War operations involving explosion of unspecified marine weapon, civilian, subsequent encounter -Y36001S War operations involving explosion of unspecified marine weapon, civilian, sequela -Y36010A War operations involving explosion of depth-charge, military personnel, initial encounter -Y36010D War operations involving explosion of depth-charge, military personnel, subsequent encounter -Y36010S War operations involving explosion of depth-charge, military personnel, sequela -Y36011A War operations involving explosion of depth-charge, civilian, initial encounter -Y36011D War operations involving explosion of depth-charge, civilian, subsequent encounter -Y36011S War operations involving explosion of depth-charge, civilian, sequela -Y36020A War operations involving explosion of marine mine, military personnel, initial encounter -Y36020D War operations involving explosion of marine mine, military personnel, subsequent encounter -Y36020S War operations involving explosion of marine mine, military personnel, sequela -Y36021A War operations involving explosion of marine mine, civilian, initial encounter -Y36021D War operations involving explosion of marine mine, civilian, subsequent encounter -Y36021S War operations involving explosion of marine mine, civilian, sequela -Y36030A War operations involving explosion of sea-based artillery shell, military personnel, initial encounter -Y36030D War operations involving explosion of sea-based artillery shell, military personnel, subsequent encounter -Y36030S War operations involving explosion of sea-based artillery shell, military personnel, sequela -Y36031A War operations involving explosion of sea-based artillery shell, civilian, initial encounter -Y36031D War operations involving explosion of sea-based artillery shell, civilian, subsequent encounter -Y36031S War operations involving explosion of sea-based artillery shell, civilian, sequela -Y36040A War operations involving explosion of torpedo, military personnel, initial encounter -Y36040D War operations involving explosion of torpedo, military personnel, subsequent encounter -Y36040S War operations involving explosion of torpedo, military personnel, sequela -Y36041A War operations involving explosion of torpedo, civilian, initial encounter -Y36041D War operations involving explosion of torpedo, civilian, subsequent encounter -Y36041S War operations involving explosion of torpedo, civilian, sequela -Y36050A War operations involving accidental detonation of onboard marine weapons, military personnel, initial encounter -Y36050D War operations involving accidental detonation of onboard marine weapons, military personnel, subsequent encounter -Y36050S War operations involving accidental detonation of onboard marine weapons, military personnel, sequela -Y36051A War operations involving accidental detonation of onboard marine weapons, civilian, initial encounter -Y36051D War operations involving accidental detonation of onboard marine weapons, civilian, subsequent encounter -Y36051S War operations involving accidental detonation of onboard marine weapons, civilian, sequela -Y36090A War operations involving explosion of other marine weapons, military personnel, initial encounter -Y36090D War operations involving explosion of other marine weapons, military personnel, subsequent encounter -Y36090S War operations involving explosion of other marine weapons, military personnel, sequela -Y36091A War operations involving explosion of other marine weapons, civilian, initial encounter -Y36091D War operations involving explosion of other marine weapons, civilian, subsequent encounter -Y36091S War operations involving explosion of other marine weapons, civilian, sequela -Y36100A War operations involving unspecified destruction of aircraft, military personnel, initial encounter -Y36100D War operations involving unspecified destruction of aircraft, military personnel, subsequent encounter -Y36100S War operations involving unspecified destruction of aircraft, military personnel, sequela -Y36101A War operations involving unspecified destruction of aircraft, civilian, initial encounter -Y36101D War operations involving unspecified destruction of aircraft, civilian, subsequent encounter -Y36101S War operations involving unspecified destruction of aircraft, civilian, sequela -Y36110A War operations involving destruction of aircraft due to enemy fire or explosives, military personnel, initial encounter -Y36110D War operations involving destruction of aircraft due to enemy fire or explosives, military personnel, subsequent encounter -Y36110S War operations involving destruction of aircraft due to enemy fire or explosives, military personnel, sequela -Y36111A War operations involving destruction of aircraft due to enemy fire or explosives, civilian, initial encounter -Y36111D War operations involving destruction of aircraft due to enemy fire or explosives, civilian, subsequent encounter -Y36111S War operations involving destruction of aircraft due to enemy fire or explosives, civilian, sequela -Y36120A War operations involving destruction of aircraft due to collision with other aircraft, military personnel, initial encounter -Y36120D War operations involving destruction of aircraft due to collision with other aircraft, military personnel, subsequent encounter -Y36120S War operations involving destruction of aircraft due to collision with other aircraft, military personnel, sequela -Y36121A War operations involving destruction of aircraft due to collision with other aircraft, civilian, initial encounter -Y36121D War operations involving destruction of aircraft due to collision with other aircraft, civilian, subsequent encounter -Y36121S War operations involving destruction of aircraft due to collision with other aircraft, civilian, sequela -Y36130A War operations involving destruction of aircraft due to onboard fire, military personnel, initial encounter -Y36130D War operations involving destruction of aircraft due to onboard fire, military personnel, subsequent encounter -Y36130S War operations involving destruction of aircraft due to onboard fire, military personnel, sequela -Y36131A War operations involving destruction of aircraft due to onboard fire, civilian, initial encounter -Y36131D War operations involving destruction of aircraft due to onboard fire, civilian, subsequent encounter -Y36131S War operations involving destruction of aircraft due to onboard fire, civilian, sequela -Y36140A War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, initial encounter -Y36140D War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, subsequent encounter -Y36140S War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, sequela -Y36141A War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, initial encounter -Y36141D War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, subsequent encounter -Y36141S War operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, sequela -Y36190A War operations involving other destruction of aircraft, military personnel, initial encounter -Y36190D War operations involving other destruction of aircraft, military personnel, subsequent encounter -Y36190S War operations involving other destruction of aircraft, military personnel, sequela -Y36191A War operations involving other destruction of aircraft, civilian, initial encounter -Y36191D War operations involving other destruction of aircraft, civilian, subsequent encounter -Y36191S War operations involving other destruction of aircraft, civilian, sequela -Y36200A War operations involving unspecified explosion and fragments, military personnel, initial encounter -Y36200D War operations involving unspecified explosion and fragments, military personnel, subsequent encounter -Y36200S War operations involving unspecified explosion and fragments, military personnel, sequela -Y36201A War operations involving unspecified explosion and fragments, civilian, initial encounter -Y36201D War operations involving unspecified explosion and fragments, civilian, subsequent encounter -Y36201S War operations involving unspecified explosion and fragments, civilian, sequela -Y36210A War operations involving explosion of aerial bomb, military personnel, initial encounter -Y36210D War operations involving explosion of aerial bomb, military personnel, subsequent encounter -Y36210S War operations involving explosion of aerial bomb, military personnel, sequela -Y36211A War operations involving explosion of aerial bomb, civilian, initial encounter -Y36211D War operations involving explosion of aerial bomb, civilian, subsequent encounter -Y36211S War operations involving explosion of aerial bomb, civilian, sequela -Y36220A War operations involving explosion of guided missile, military personnel, initial encounter -Y36220D War operations involving explosion of guided missile, military personnel, subsequent encounter -Y36220S War operations involving explosion of guided missile, military personnel, sequela -Y36221A War operations involving explosion of guided missile, civilian, initial encounter -Y36221D War operations involving explosion of guided missile, civilian, subsequent encounter -Y36221S War operations involving explosion of guided missile, civilian, sequela -Y36230A War operations involving explosion of improvised explosive device [IED], military personnel, initial encounter -Y36230D War operations involving explosion of improvised explosive device [IED], military personnel, subsequent encounter -Y36230S War operations involving explosion of improvised explosive device [IED], military personnel, sequela -Y36231A War operations involving explosion of improvised explosive device [IED], civilian, initial encounter -Y36231D War operations involving explosion of improvised explosive device [IED], civilian, subsequent encounter -Y36231S War operations involving explosion of improvised explosive device [IED], civilian, sequela -Y36240A War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, initial encounter -Y36240D War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, subsequent encounter -Y36240S War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, sequela -Y36241A War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, initial encounter -Y36241D War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, subsequent encounter -Y36241S War operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, sequela -Y36250A War operations involving fragments from munitions, military personnel, initial encounter -Y36250D War operations involving fragments from munitions, military personnel, subsequent encounter -Y36250S War operations involving fragments from munitions, military personnel, sequela -Y36251A War operations involving fragments from munitions, civilian, initial encounter -Y36251D War operations involving fragments from munitions, civilian, subsequent encounter -Y36251S War operations involving fragments from munitions, civilian, sequela -Y36260A War operations involving fragments of improvised explosive device [IED], military personnel, initial encounter -Y36260D War operations involving fragments of improvised explosive device [IED], military personnel, subsequent encounter -Y36260S War operations involving fragments of improvised explosive device [IED], military personnel, sequela -Y36261A War operations involving fragments of improvised explosive device [IED], civilian, initial encounter -Y36261D War operations involving fragments of improvised explosive device [IED], civilian, subsequent encounter -Y36261S War operations involving fragments of improvised explosive device [IED], civilian, sequela -Y36270A War operations involving fragments from weapons, military personnel, initial encounter -Y36270D War operations involving fragments from weapons, military personnel, subsequent encounter -Y36270S War operations involving fragments from weapons, military personnel, sequela -Y36271A War operations involving fragments from weapons, civilian, initial encounter -Y36271D War operations involving fragments from weapons, civilian, subsequent encounter -Y36271S War operations involving fragments from weapons, civilian, sequela -Y36290A War operations involving other explosions and fragments, military personnel, initial encounter -Y36290D War operations involving other explosions and fragments, military personnel, subsequent encounter -Y36290S War operations involving other explosions and fragments, military personnel, sequela -Y36291A War operations involving other explosions and fragments, civilian, initial encounter -Y36291D War operations involving other explosions and fragments, civilian, subsequent encounter -Y36291S War operations involving other explosions and fragments, civilian, sequela -Y36300A War operations involving unspecified fire, conflagration and hot substance, military personnel, initial encounter -Y36300D War operations involving unspecified fire, conflagration and hot substance, military personnel, subsequent encounter -Y36300S War operations involving unspecified fire, conflagration and hot substance, military personnel, sequela -Y36301A War operations involving unspecified fire, conflagration and hot substance, civilian, initial encounter -Y36301D War operations involving unspecified fire, conflagration and hot substance, civilian, subsequent encounter -Y36301S War operations involving unspecified fire, conflagration and hot substance, civilian, sequela -Y36310A War operations involving gasoline bomb, military personnel, initial encounter -Y36310D War operations involving gasoline bomb, military personnel, subsequent encounter -Y36310S War operations involving gasoline bomb, military personnel, sequela -Y36311A War operations involving gasoline bomb, civilian, initial encounter -Y36311D War operations involving gasoline bomb, civilian, subsequent encounter -Y36311S War operations involving gasoline bomb, civilian, sequela -Y36320A War operations involving incendiary bullet, military personnel, initial encounter -Y36320D War operations involving incendiary bullet, military personnel, subsequent encounter -Y36320S War operations involving incendiary bullet, military personnel, sequela -Y36321A War operations involving incendiary bullet, civilian, initial encounter -Y36321D War operations involving incendiary bullet, civilian, subsequent encounter -Y36321S War operations involving incendiary bullet, civilian, sequela -Y36330A War operations involving flamethrower, military personnel, initial encounter -Y36330D War operations involving flamethrower, military personnel, subsequent encounter -Y36330S War operations involving flamethrower, military personnel, sequela -Y36331A War operations involving flamethrower, civilian, initial encounter -Y36331D War operations involving flamethrower, civilian, subsequent encounter -Y36331S War operations involving flamethrower, civilian, sequela -Y36390A War operations involving other fires, conflagrations and hot substances, military personnel, initial encounter -Y36390D War operations involving other fires, conflagrations and hot substances, military personnel, subsequent encounter -Y36390S War operations involving other fires, conflagrations and hot substances, military personnel, sequela -Y36391A War operations involving other fires, conflagrations and hot substances, civilian, initial encounter -Y36391D War operations involving other fires, conflagrations and hot substances, civilian, subsequent encounter -Y36391S War operations involving other fires, conflagrations and hot substances, civilian, sequela -Y36410A War operations involving rubber bullets, military personnel, initial encounter -Y36410D War operations involving rubber bullets, military personnel, subsequent encounter -Y36410S War operations involving rubber bullets, military personnel, sequela -Y36411A War operations involving rubber bullets, civilian, initial encounter -Y36411D War operations involving rubber bullets, civilian, subsequent encounter -Y36411S War operations involving rubber bullets, civilian, sequela -Y36420A War operations involving firearms pellets, military personnel, initial encounter -Y36420D War operations involving firearms pellets, military personnel, subsequent encounter -Y36420S War operations involving firearms pellets, military personnel, sequela -Y36421A War operations involving firearms pellets, civilian, initial encounter -Y36421D War operations involving firearms pellets, civilian, subsequent encounter -Y36421S War operations involving firearms pellets, civilian, sequela -Y36430A War operations involving other firearms discharge, military personnel, initial encounter -Y36430D War operations involving other firearms discharge, military personnel, subsequent encounter -Y36430S War operations involving other firearms discharge, military personnel, sequela -Y36431A War operations involving other firearms discharge, civilian, initial encounter -Y36431D War operations involving other firearms discharge, civilian, subsequent encounter -Y36431S War operations involving other firearms discharge, civilian, sequela -Y36440A War operations involving unarmed hand to hand combat, military personnel, initial encounter -Y36440D War operations involving unarmed hand to hand combat, military personnel, subsequent encounter -Y36440S War operations involving unarmed hand to hand combat, military personnel, sequela -Y36441A War operations involving unarmed hand to hand combat, civilian, initial encounter -Y36441D War operations involving unarmed hand to hand combat, civilian, subsequent encounter -Y36441S War operations involving unarmed hand to hand combat, civilian, sequela -Y36450A War operations involving combat using blunt or piercing object, military personnel, initial encounter -Y36450D War operations involving combat using blunt or piercing object, military personnel, subsequent encounter -Y36450S War operations involving combat using blunt or piercing object, military personnel, sequela -Y36451A War operations involving combat using blunt or piercing object, civilian, initial encounter -Y36451D War operations involving combat using blunt or piercing object, civilian, subsequent encounter -Y36451S War operations involving combat using blunt or piercing object, civilian, sequela -Y36460A War operations involving intentional restriction of air and airway, military personnel, initial encounter -Y36460D War operations involving intentional restriction of air and airway, military personnel, subsequent encounter -Y36460S War operations involving intentional restriction of air and airway, military personnel, sequela -Y36461A War operations involving intentional restriction of air and airway, civilian, initial encounter -Y36461D War operations involving intentional restriction of air and airway, civilian, subsequent encounter -Y36461S War operations involving intentional restriction of air and airway, civilian, sequela -Y36470A War operations involving unintentional restriction of air and airway, military personnel, initial encounter -Y36470D War operations involving unintentional restriction of air and airway, military personnel, subsequent encounter -Y36470S War operations involving unintentional restriction of air and airway, military personnel, sequela -Y36471A War operations involving unintentional restriction of air and airway, civilian, initial encounter -Y36471D War operations involving unintentional restriction of air and airway, civilian, subsequent encounter -Y36471S War operations involving unintentional restriction of air and airway, civilian, sequela -Y36490A War operations involving other forms of conventional warfare, military personnel, initial encounter -Y36490D War operations involving other forms of conventional warfare, military personnel, subsequent encounter -Y36490S War operations involving other forms of conventional warfare, military personnel, sequela -Y36491A War operations involving other forms of conventional warfare, civilian, initial encounter -Y36491D War operations involving other forms of conventional warfare, civilian, subsequent encounter -Y36491S War operations involving other forms of conventional warfare, civilian, sequela -Y36500A War operations involving unspecified effect of nuclear weapon, military personnel, initial encounter -Y36500D War operations involving unspecified effect of nuclear weapon, military personnel, subsequent encounter -Y36500S War operations involving unspecified effect of nuclear weapon, military personnel, sequela -Y36501A War operations involving unspecified effect of nuclear weapon, civilian, initial encounter -Y36501D War operations involving unspecified effect of nuclear weapon, civilian, subsequent encounter -Y36501S War operations involving unspecified effect of nuclear weapon, civilian, sequela -Y36510A War operations involving direct blast effect of nuclear weapon, military personnel, initial encounter -Y36510D War operations involving direct blast effect of nuclear weapon, military personnel, subsequent encounter -Y36510S War operations involving direct blast effect of nuclear weapon, military personnel, sequela -Y36511A War operations involving direct blast effect of nuclear weapon, civilian, initial encounter -Y36511D War operations involving direct blast effect of nuclear weapon, civilian, subsequent encounter -Y36511S War operations involving direct blast effect of nuclear weapon, civilian, sequela -Y36520A War operations involving indirect blast effect of nuclear weapon, military personnel, initial encounter -Y36520D War operations involving indirect blast effect of nuclear weapon, military personnel, subsequent encounter -Y36520S War operations involving indirect blast effect of nuclear weapon, military personnel, sequela -Y36521A War operations involving indirect blast effect of nuclear weapon, civilian, initial encounter -Y36521D War operations involving indirect blast effect of nuclear weapon, civilian, subsequent encounter -Y36521S War operations involving indirect blast effect of nuclear weapon, civilian, sequela -Y36530A War operations involving thermal radiation effect of nuclear weapon, military personnel, initial encounter -Y36530D War operations involving thermal radiation effect of nuclear weapon, military personnel, subsequent encounter -Y36530S War operations involving thermal radiation effect of nuclear weapon, military personnel, sequela -Y36531A War operations involving thermal radiation effect of nuclear weapon, civilian, initial encounter -Y36531D War operations involving thermal radiation effect of nuclear weapon, civilian, subsequent encounter -Y36531S War operations involving thermal radiation effect of nuclear weapon, civilian, sequela -Y36540A War operation involving nuclear radiation effects of nuclear weapon, military personnel, initial encounter -Y36540D War operation involving nuclear radiation effects of nuclear weapon, military personnel, subsequent encounter -Y36540S War operation involving nuclear radiation effects of nuclear weapon, military personnel, sequela -Y36541A War operation involving nuclear radiation effects of nuclear weapon, civilian, initial encounter -Y36541D War operation involving nuclear radiation effects of nuclear weapon, civilian, subsequent encounter -Y36541S War operation involving nuclear radiation effects of nuclear weapon, civilian, sequela -Y36590A War operation involving other effects of nuclear weapons, military personnel, initial encounter -Y36590D War operation involving other effects of nuclear weapons, military personnel, subsequent encounter -Y36590S War operation involving other effects of nuclear weapons, military personnel, sequela -Y36591A War operation involving other effects of nuclear weapons, civilian, initial encounter -Y36591D War operation involving other effects of nuclear weapons, civilian, subsequent encounter -Y36591S War operation involving other effects of nuclear weapons, civilian, sequela -Y366X0A War operations involving biological weapons, military personnel, initial encounter -Y366X0D War operations involving biological weapons, military personnel, subsequent encounter -Y366X0S War operations involving biological weapons, military personnel, sequela -Y366X1A War operations involving biological weapons, civilian, initial encounter -Y366X1D War operations involving biological weapons, civilian, subsequent encounter -Y366X1S War operations involving biological weapons, civilian, sequela -Y367X0A War operations involving chemical weapons and other forms of unconventional warfare, military personnel, initial encounter -Y367X0D War operations involving chemical weapons and other forms of unconventional warfare, military personnel, subsequent encounter -Y367X0S War operations involving chemical weapons and other forms of unconventional warfare, military personnel, sequela -Y367X1A War operations involving chemical weapons and other forms of unconventional warfare, civilian, initial encounter -Y367X1D War operations involving chemical weapons and other forms of unconventional warfare, civilian, subsequent encounter -Y367X1S War operations involving chemical weapons and other forms of unconventional warfare, civilian, sequela -Y36810A Explosion of mine placed during war operations but exploding after cessation of hostilities, military personnel, initial encounter -Y36810D Explosion of mine placed during war operations but exploding after cessation of hostilities, military personnel, subsequent encounter -Y36810S Explosion of mine placed during war operations but exploding after cessation of hostilities, military personnel, sequela -Y36811A Explosion of mine placed during war operations but exploding after cessation of hostilities, civilian, initial encounter -Y36811D Explosion of mine placed during war operations but exploding after cessation of hostilities, civilian, subsequent encounter -Y36811S Explosion of mine placed during war operations but exploding after cessation of hostilities, civilian, sequela -Y36820A Explosion of bomb placed during war operations but exploding after cessation of hostilities, military personnel, initial encounter -Y36820D Explosion of bomb placed during war operations but exploding after cessation of hostilities, military personnel, subsequent encounter -Y36820S Explosion of bomb placed during war operations but exploding after cessation of hostilities, military personnel, sequela -Y36821A Explosion of bomb placed during war operations but exploding after cessation of hostilities, civilian, initial encounter -Y36821D Explosion of bomb placed during war operations but exploding after cessation of hostilities, civilian, subsequent encounter -Y36821S Explosion of bomb placed during war operations but exploding after cessation of hostilities, civilian, sequela -Y36880A Other war operations occurring after cessation of hostilities, military personnel, initial encounter -Y36880D Other war operations occurring after cessation of hostilities, military personnel, subsequent encounter -Y36880S Other war operations occurring after cessation of hostilities, military personnel, sequela -Y36881A Other war operations occurring after cessation of hostilities, civilian, initial encounter -Y36881D Other war operations occurring after cessation of hostilities, civilian, subsequent encounter -Y36881S Other war operations occurring after cessation of hostilities, civilian, sequela -Y36890A Unspecified war operations occurring after cessation of hostilities, military personnel, initial encounter -Y36890D Unspecified war operations occurring after cessation of hostilities, military personnel, subsequent encounter -Y36890S Unspecified war operations occurring after cessation of hostilities, military personnel, sequela -Y36891A Unspecified war operations occurring after cessation of hostilities, civilian, initial encounter -Y36891D Unspecified war operations occurring after cessation of hostilities, civilian, subsequent encounter -Y36891S Unspecified war operations occurring after cessation of hostilities, civilian, sequela -Y3690XA War operations, unspecified, initial encounter -Y3690XD War operations, unspecified, subsequent encounter -Y3690XS War operations, unspecified, sequela -Y3691XA War operations involving unspecified weapon of mass destruction [WMD], initial encounter -Y3691XD War operations involving unspecified weapon of mass destruction [WMD], subsequent encounter -Y3691XS War operations involving unspecified weapon of mass destruction [WMD], sequela -Y3692XA War operations involving friendly fire, initial encounter -Y3692XD War operations involving friendly fire, subsequent encounter -Y3692XS War operations involving friendly fire, sequela -Y37000A Military operations involving explosion of unspecified marine weapon, military personnel, initial encounter -Y37000D Military operations involving explosion of unspecified marine weapon, military personnel, subsequent encounter -Y37000S Military operations involving explosion of unspecified marine weapon, military personnel, sequela -Y37001A Military operations involving explosion of unspecified marine weapon, civilian, initial encounter -Y37001D Military operations involving explosion of unspecified marine weapon, civilian, subsequent encounter -Y37001S Military operations involving explosion of unspecified marine weapon, civilian, sequela -Y37010A Military operations involving explosion of depth-charge, military personnel, initial encounter -Y37010D Military operations involving explosion of depth-charge, military personnel, subsequent encounter -Y37010S Military operations involving explosion of depth-charge, military personnel, sequela -Y37011A Military operations involving explosion of depth-charge, civilian, initial encounter -Y37011D Military operations involving explosion of depth-charge, civilian, subsequent encounter -Y37011S Military operations involving explosion of depth-charge, civilian, sequela -Y37020A Military operations involving explosion of marine mine, military personnel, initial encounter -Y37020D Military operations involving explosion of marine mine, military personnel, subsequent encounter -Y37020S Military operations involving explosion of marine mine, military personnel, sequela -Y37021A Military operations involving explosion of marine mine, civilian, initial encounter -Y37021D Military operations involving explosion of marine mine, civilian, subsequent encounter -Y37021S Military operations involving explosion of marine mine, civilian, sequela -Y37030A Military operations involving explosion of sea-based artillery shell, military personnel, initial encounter -Y37030D Military operations involving explosion of sea-based artillery shell, military personnel, subsequent encounter -Y37030S Military operations involving explosion of sea-based artillery shell, military personnel, sequela -Y37031A Military operations involving explosion of sea-based artillery shell, civilian, initial encounter -Y37031D Military operations involving explosion of sea-based artillery shell, civilian, subsequent encounter -Y37031S Military operations involving explosion of sea-based artillery shell, civilian, sequela -Y37040A Military operations involving explosion of torpedo, military personnel, initial encounter -Y37040D Military operations involving explosion of torpedo, military personnel, subsequent encounter -Y37040S Military operations involving explosion of torpedo, military personnel, sequela -Y37041A Military operations involving explosion of torpedo, civilian, initial encounter -Y37041D Military operations involving explosion of torpedo, civilian, subsequent encounter -Y37041S Military operations involving explosion of torpedo, civilian, sequela -Y37050A Military operations involving accidental detonation of onboard marine weapons, military personnel, initial encounter -Y37050D Military operations involving accidental detonation of onboard marine weapons, military personnel, subsequent encounter -Y37050S Military operations involving accidental detonation of onboard marine weapons, military personnel, sequela -Y37051A Military operations involving accidental detonation of onboard marine weapons, civilian, initial encounter -Y37051D Military operations involving accidental detonation of onboard marine weapons, civilian, subsequent encounter -Y37051S Military operations involving accidental detonation of onboard marine weapons, civilian, sequela -Y37090A Military operations involving explosion of other marine weapons, military personnel, initial encounter -Y37090D Military operations involving explosion of other marine weapons, military personnel, subsequent encounter -Y37090S Military operations involving explosion of other marine weapons, military personnel, sequela -Y37091A Military operations involving explosion of other marine weapons, civilian, initial encounter -Y37091D Military operations involving explosion of other marine weapons, civilian, subsequent encounter -Y37091S Military operations involving explosion of other marine weapons, civilian, sequela -Y37100A Military operations involving unspecified destruction of aircraft, military personnel, initial encounter -Y37100D Military operations involving unspecified destruction of aircraft, military personnel, subsequent encounter -Y37100S Military operations involving unspecified destruction of aircraft, military personnel, sequela -Y37101A Military operations involving unspecified destruction of aircraft, civilian, initial encounter -Y37101D Military operations involving unspecified destruction of aircraft, civilian, subsequent encounter -Y37101S Military operations involving unspecified destruction of aircraft, civilian, sequela -Y37110A Military operations involving destruction of aircraft due to enemy fire or explosives, military personnel, initial encounter -Y37110D Military operations involving destruction of aircraft due to enemy fire or explosives, military personnel, subsequent encounter -Y37110S Military operations involving destruction of aircraft due to enemy fire or explosives, military personnel, sequela -Y37111A Military operations involving destruction of aircraft due to enemy fire or explosives, civilian, initial encounter -Y37111D Military operations involving destruction of aircraft due to enemy fire or explosives, civilian, subsequent encounter -Y37111S Military operations involving destruction of aircraft due to enemy fire or explosives, civilian, sequela -Y37120A Military operations involving destruction of aircraft due to collision with other aircraft, military personnel, initial encounter -Y37120D Military operations involving destruction of aircraft due to collision with other aircraft, military personnel, subsequent encounter -Y37120S Military operations involving destruction of aircraft due to collision with other aircraft, military personnel, sequela -Y37121A Military operations involving destruction of aircraft due to collision with other aircraft, civilian, initial encounter -Y37121D Military operations involving destruction of aircraft due to collision with other aircraft, civilian, subsequent encounter -Y37121S Military operations involving destruction of aircraft due to collision with other aircraft, civilian, sequela -Y37130A Military operations involving destruction of aircraft due to onboard fire, military personnel, initial encounter -Y37130D Military operations involving destruction of aircraft due to onboard fire, military personnel, subsequent encounter -Y37130S Military operations involving destruction of aircraft due to onboard fire, military personnel, sequela -Y37131A Military operations involving destruction of aircraft due to onboard fire, civilian, initial encounter -Y37131D Military operations involving destruction of aircraft due to onboard fire, civilian, subsequent encounter -Y37131S Military operations involving destruction of aircraft due to onboard fire, civilian, sequela -Y37140A Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, initial encounter -Y37140D Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, subsequent encounter -Y37140S Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, military personnel, sequela -Y37141A Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, initial encounter -Y37141D Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, subsequent encounter -Y37141S Military operations involving destruction of aircraft due to accidental detonation of onboard munitions and explosives, civilian, sequela -Y37190A Military operations involving other destruction of aircraft, military personnel, initial encounter -Y37190D Military operations involving other destruction of aircraft, military personnel, subsequent encounter -Y37190S Military operations involving other destruction of aircraft, military personnel, sequela -Y37191A Military operations involving other destruction of aircraft, civilian, initial encounter -Y37191D Military operations involving other destruction of aircraft, civilian, subsequent encounter -Y37191S Military operations involving other destruction of aircraft, civilian, sequela -Y37200A Military operations involving unspecified explosion and fragments, military personnel, initial encounter -Y37200D Military operations involving unspecified explosion and fragments, military personnel, subsequent encounter -Y37200S Military operations involving unspecified explosion and fragments, military personnel, sequela -Y37201A Military operations involving unspecified explosion and fragments, civilian, initial encounter -Y37201D Military operations involving unspecified explosion and fragments, civilian, subsequent encounter -Y37201S Military operations involving unspecified explosion and fragments, civilian, sequela -Y37210A Military operations involving explosion of aerial bomb, military personnel, initial encounter -Y37210D Military operations involving explosion of aerial bomb, military personnel, subsequent encounter -Y37210S Military operations involving explosion of aerial bomb, military personnel, sequela -Y37211A Military operations involving explosion of aerial bomb, civilian, initial encounter -Y37211D Military operations involving explosion of aerial bomb, civilian, subsequent encounter -Y37211S Military operations involving explosion of aerial bomb, civilian, sequela -Y37220A Military operations involving explosion of guided missile, military personnel, initial encounter -Y37220D Military operations involving explosion of guided missile, military personnel, subsequent encounter -Y37220S Military operations involving explosion of guided missile, military personnel, sequela -Y37221A Military operations involving explosion of guided missile, civilian, initial encounter -Y37221D Military operations involving explosion of guided missile, civilian, subsequent encounter -Y37221S Military operations involving explosion of guided missile, civilian, sequela -Y37230A Military operations involving explosion of improvised explosive device [IED], military personnel, initial encounter -Y37230D Military operations involving explosion of improvised explosive device [IED], military personnel, subsequent encounter -Y37230S Military operations involving explosion of improvised explosive device [IED], military personnel, sequela -Y37231A Military operations involving explosion of improvised explosive device [IED], civilian, initial encounter -Y37231D Military operations involving explosion of improvised explosive device [IED], civilian, subsequent encounter -Y37231S Military operations involving explosion of improvised explosive device [IED], civilian, sequela -Y37240A Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, initial encounter -Y37240D Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, subsequent encounter -Y37240S Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, military personnel, sequela -Y37241A Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, initial encounter -Y37241D Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, subsequent encounter -Y37241S Military operations involving explosion due to accidental detonation and discharge of own munitions or munitions launch device, civilian, sequela -Y37250A Military operations involving fragments from munitions, military personnel, initial encounter -Y37250D Military operations involving fragments from munitions, military personnel, subsequent encounter -Y37250S Military operations involving fragments from munitions, military personnel, sequela -Y37251A Military operations involving fragments from munitions, civilian, initial encounter -Y37251D Military operations involving fragments from munitions, civilian, subsequent encounter -Y37251S Military operations involving fragments from munitions, civilian, sequela -Y37260A Military operations involving fragments of improvised explosive device [IED], military personnel, initial encounter -Y37260D Military operations involving fragments of improvised explosive device [IED], military personnel, subsequent encounter -Y37260S Military operations involving fragments of improvised explosive device [IED], military personnel, sequela -Y37261A Military operations involving fragments of improvised explosive device [IED], civilian, initial encounter -Y37261D Military operations involving fragments of improvised explosive device [IED], civilian, subsequent encounter -Y37261S Military operations involving fragments of improvised explosive device [IED], civilian, sequela -Y37270A Military operations involving fragments from weapons, military personnel, initial encounter -Y37270D Military operations involving fragments from weapons, military personnel, subsequent encounter -Y37270S Military operations involving fragments from weapons, military personnel, sequela -Y37271A Military operations involving fragments from weapons, civilian, initial encounter -Y37271D Military operations involving fragments from weapons, civilian, subsequent encounter -Y37271S Military operations involving fragments from weapons, civilian, sequela -Y37290A Military operations involving other explosions and fragments, military personnel, initial encounter -Y37290D Military operations involving other explosions and fragments, military personnel, subsequent encounter -Y37290S Military operations involving other explosions and fragments, military personnel, sequela -Y37291A Military operations involving other explosions and fragments, civilian, initial encounter -Y37291D Military operations involving other explosions and fragments, civilian, subsequent encounter -Y37291S Military operations involving other explosions and fragments, civilian, sequela -Y37300A Military operations involving unspecified fire, conflagration and hot substance, military personnel, initial encounter -Y37300D Military operations involving unspecified fire, conflagration and hot substance, military personnel, subsequent encounter -Y37300S Military operations involving unspecified fire, conflagration and hot substance, military personnel, sequela -Y37301A Military operations involving unspecified fire, conflagration and hot substance, civilian, initial encounter -Y37301D Military operations involving unspecified fire, conflagration and hot substance, civilian, subsequent encounter -Y37301S Military operations involving unspecified fire, conflagration and hot substance, civilian, sequela -Y37310A Military operations involving gasoline bomb, military personnel, initial encounter -Y37310D Military operations involving gasoline bomb, military personnel, subsequent encounter -Y37310S Military operations involving gasoline bomb, military personnel, sequela -Y37311A Military operations involving gasoline bomb, civilian, initial encounter -Y37311D Military operations involving gasoline bomb, civilian, subsequent encounter -Y37311S Military operations involving gasoline bomb, civilian, sequela -Y37320A Military operations involving incendiary bullet, military personnel, initial encounter -Y37320D Military operations involving incendiary bullet, military personnel, subsequent encounter -Y37320S Military operations involving incendiary bullet, military personnel, sequela -Y37321A Military operations involving incendiary bullet, civilian, initial encounter -Y37321D Military operations involving incendiary bullet, civilian, subsequent encounter -Y37321S Military operations involving incendiary bullet, civilian, sequela -Y37330A Military operations involving flamethrower, military personnel, initial encounter -Y37330D Military operations involving flamethrower, military personnel, subsequent encounter -Y37330S Military operations involving flamethrower, military personnel, sequela -Y37331A Military operations involving flamethrower, civilian, initial encounter -Y37331D Military operations involving flamethrower, civilian, subsequent encounter -Y37331S Military operations involving flamethrower, civilian, sequela -Y37390A Military operations involving other fires, conflagrations and hot substances, military personnel, initial encounter -Y37390D Military operations involving other fires, conflagrations and hot substances, military personnel, subsequent encounter -Y37390S Military operations involving other fires, conflagrations and hot substances, military personnel, sequela -Y37391A Military operations involving other fires, conflagrations and hot substances, civilian, initial encounter -Y37391D Military operations involving other fires, conflagrations and hot substances, civilian, subsequent encounter -Y37391S Military operations involving other fires, conflagrations and hot substances, civilian, sequela -Y37410A Military operations involving rubber bullets, military personnel, initial encounter -Y37410D Military operations involving rubber bullets, military personnel, subsequent encounter -Y37410S Military operations involving rubber bullets, military personnel, sequela -Y37411A Military operations involving rubber bullets, civilian, initial encounter -Y37411D Military operations involving rubber bullets, civilian, subsequent encounter -Y37411S Military operations involving rubber bullets, civilian, sequela -Y37420A Military operations involving firearms pellets, military personnel, initial encounter -Y37420D Military operations involving firearms pellets, military personnel, subsequent encounter -Y37420S Military operations involving firearms pellets, military personnel, sequela -Y37421A Military operations involving firearms pellets, civilian, initial encounter -Y37421D Military operations involving firearms pellets, civilian, subsequent encounter -Y37421S Military operations involving firearms pellets, civilian, sequela -Y37430A Military operations involving other firearms discharge, military personnel, initial encounter -Y37430D Military operations involving other firearms discharge, military personnel, subsequent encounter -Y37430S Military operations involving other firearms discharge, military personnel, sequela -Y37431A Military operations involving other firearms discharge, civilian, initial encounter -Y37431D Military operations involving other firearms discharge, civilian, subsequent encounter -Y37431S Military operations involving other firearms discharge, civilian, sequela -Y37440A Military operations involving unarmed hand to hand combat, military personnel, initial encounter -Y37440D Military operations involving unarmed hand to hand combat, military personnel, subsequent encounter -Y37440S Military operations involving unarmed hand to hand combat, military personnel, sequela -Y37441A Military operations involving unarmed hand to hand combat, civilian, initial encounter -Y37441D Military operations involving unarmed hand to hand combat, civilian, subsequent encounter -Y37441S Military operations involving unarmed hand to hand combat, civilian, sequela -Y37450A Military operations involving combat using blunt or piercing object, military personnel, initial encounter -Y37450D Military operations involving combat using blunt or piercing object, military personnel, subsequent encounter -Y37450S Military operations involving combat using blunt or piercing object, military personnel, sequela -Y37451A Military operations involving combat using blunt or piercing object, civilian, initial encounter -Y37451D Military operations involving combat using blunt or piercing object, civilian, subsequent encounter -Y37451S Military operations involving combat using blunt or piercing object, civilian, sequela -Y37460A Military operations involving intentional restriction of air and airway, military personnel, initial encounter -Y37460D Military operations involving intentional restriction of air and airway, military personnel, subsequent encounter -Y37460S Military operations involving intentional restriction of air and airway, military personnel, sequela -Y37461A Military operations involving intentional restriction of air and airway, civilian, initial encounter -Y37461D Military operations involving intentional restriction of air and airway, civilian, subsequent encounter -Y37461S Military operations involving intentional restriction of air and airway, civilian, sequela -Y37470A Military operations involving unintentional restriction of air and airway, military personnel, initial encounter -Y37470D Military operations involving unintentional restriction of air and airway, military personnel, subsequent encounter -Y37470S Military operations involving unintentional restriction of air and airway, military personnel, sequela -Y37471A Military operations involving unintentional restriction of air and airway, civilian, initial encounter -Y37471D Military operations involving unintentional restriction of air and airway, civilian, subsequent encounter -Y37471S Military operations involving unintentional restriction of air and airway, civilian, sequela -Y37490A Military operations involving other forms of conventional warfare, military personnel, initial encounter -Y37490D Military operations involving other forms of conventional warfare, military personnel, subsequent encounter -Y37490S Military operations involving other forms of conventional warfare, military personnel, sequela -Y37491A Military operations involving other forms of conventional warfare, civilian, initial encounter -Y37491D Military operations involving other forms of conventional warfare, civilian, subsequent encounter -Y37491S Military operations involving other forms of conventional warfare, civilian, sequela -Y37500A Military operations involving unspecified effect of nuclear weapon, military personnel, initial encounter -Y37500D Military operations involving unspecified effect of nuclear weapon, military personnel, subsequent encounter -Y37500S Military operations involving unspecified effect of nuclear weapon, military personnel, sequela -Y37501A Military operations involving unspecified effect of nuclear weapon, civilian, initial encounter -Y37501D Military operations involving unspecified effect of nuclear weapon, civilian, subsequent encounter -Y37501S Military operations involving unspecified effect of nuclear weapon, civilian, sequela -Y37510A Military operations involving direct blast effect of nuclear weapon, military personnel, initial encounter -Y37510D Military operations involving direct blast effect of nuclear weapon, military personnel, subsequent encounter -Y37510S Military operations involving direct blast effect of nuclear weapon, military personnel, sequela -Y37511A Military operations involving direct blast effect of nuclear weapon, civilian, initial encounter -Y37511D Military operations involving direct blast effect of nuclear weapon, civilian, subsequent encounter -Y37511S Military operations involving direct blast effect of nuclear weapon, civilian, sequela -Y37520A Military operations involving indirect blast effect of nuclear weapon, military personnel, initial encounter -Y37520D Military operations involving indirect blast effect of nuclear weapon, military personnel, subsequent encounter -Y37520S Military operations involving indirect blast effect of nuclear weapon, military personnel, sequela -Y37521A Military operations involving indirect blast effect of nuclear weapon, civilian, initial encounter -Y37521D Military operations involving indirect blast effect of nuclear weapon, civilian, subsequent encounter -Y37521S Military operations involving indirect blast effect of nuclear weapon, civilian, sequela -Y37530A Military operations involving thermal radiation effect of nuclear weapon, military personnel, initial encounter -Y37530D Military operations involving thermal radiation effect of nuclear weapon, military personnel, subsequent encounter -Y37530S Military operations involving thermal radiation effect of nuclear weapon, military personnel, sequela -Y37531A Military operations involving thermal radiation effect of nuclear weapon, civilian, initial encounter -Y37531D Military operations involving thermal radiation effect of nuclear weapon, civilian, subsequent encounter -Y37531S Military operations involving thermal radiation effect of nuclear weapon, civilian, sequela -Y37540A Military operation involving nuclear radiation effects of nuclear weapon, military personnel, initial encounter -Y37540D Military operation involving nuclear radiation effects of nuclear weapon, military personnel, subsequent encounter -Y37540S Military operation involving nuclear radiation effects of nuclear weapon, military personnel, sequela -Y37541A Military operation involving nuclear radiation effects of nuclear weapon, civilian, initial encounter -Y37541D Military operation involving nuclear radiation effects of nuclear weapon, civilian, subsequent encounter -Y37541S Military operation involving nuclear radiation effects of nuclear weapon, civilian, sequela -Y37590A Military operation involving other effects of nuclear weapons, military personnel, initial encounter -Y37590D Military operation involving other effects of nuclear weapons, military personnel, subsequent encounter -Y37590S Military operation involving other effects of nuclear weapons, military personnel, sequela -Y37591A Military operation involving other effects of nuclear weapons, civilian, initial encounter -Y37591D Military operation involving other effects of nuclear weapons, civilian, subsequent encounter -Y37591S Military operation involving other effects of nuclear weapons, civilian, sequela -Y376X0A Military operations involving biological weapons, military personnel, initial encounter -Y376X0D Military operations involving biological weapons, military personnel, subsequent encounter -Y376X0S Military operations involving biological weapons, military personnel, sequela -Y376X1A Military operations involving biological weapons, civilian, initial encounter -Y376X1D Military operations involving biological weapons, civilian, subsequent encounter -Y376X1S Military operations involving biological weapons, civilian, sequela -Y377X0A Military operations involving chemical weapons and other forms of unconventional warfare, military personnel, initial encounter -Y377X0D Military operations involving chemical weapons and other forms of unconventional warfare, military personnel, subsequent encounter -Y377X0S Military operations involving chemical weapons and other forms of unconventional warfare, military personnel, sequela -Y377X1A Military operations involving chemical weapons and other forms of unconventional warfare, civilian, initial encounter -Y377X1D Military operations involving chemical weapons and other forms of unconventional warfare, civilian, subsequent encounter -Y377X1S Military operations involving chemical weapons and other forms of unconventional warfare, civilian, sequela -Y3790XA Military operations, unspecified, initial encounter -Y3790XD Military operations, unspecified, subsequent encounter -Y3790XS Military operations, unspecified, sequela -Y3791XA Military operations involving unspecified weapon of mass destruction [WMD], initial encounter -Y3791XD Military operations involving unspecified weapon of mass destruction [WMD], subsequent encounter -Y3791XS Military operations involving unspecified weapon of mass destruction [WMD], sequela -Y3792XA Military operations involving friendly fire, initial encounter -Y3792XD Military operations involving friendly fire, subsequent encounter -Y3792XS Military operations involving friendly fire, sequela -Y380X1A Terrorism involving explosion of marine weapons, public safety official injured, initial encounter -Y380X1D Terrorism involving explosion of marine weapons, public safety official injured, subsequent encounter -Y380X1S Terrorism involving explosion of marine weapons, public safety official injured, sequela -Y380X2A Terrorism involving explosion of marine weapons, civilian injured, initial encounter -Y380X2D Terrorism involving explosion of marine weapons, civilian injured, subsequent encounter -Y380X2S Terrorism involving explosion of marine weapons, civilian injured, sequela -Y380X3A Terrorism involving explosion of marine weapons, terrorist injured, initial encounter -Y380X3D Terrorism involving explosion of marine weapons, terrorist injured, subsequent encounter -Y380X3S Terrorism involving explosion of marine weapons, terrorist injured, sequela -Y381X1A Terrorism involving destruction of aircraft, public safety official injured, initial encounter -Y381X1D Terrorism involving destruction of aircraft, public safety official injured, subsequent encounter -Y381X1S Terrorism involving destruction of aircraft, public safety official injured, sequela -Y381X2A Terrorism involving destruction of aircraft, civilian injured, initial encounter -Y381X2D Terrorism involving destruction of aircraft, civilian injured, subsequent encounter -Y381X2S Terrorism involving destruction of aircraft, civilian injured, sequela -Y381X3A Terrorism involving destruction of aircraft, terrorist injured, initial encounter -Y381X3D Terrorism involving destruction of aircraft, terrorist injured, subsequent encounter -Y381X3S Terrorism involving destruction of aircraft, terrorist injured, sequela -Y382X1A Terrorism involving other explosions and fragments, public safety official injured, initial encounter -Y382X1D Terrorism involving other explosions and fragments, public safety official injured, subsequent encounter -Y382X1S Terrorism involving other explosions and fragments, public safety official injured, sequela -Y382X2A Terrorism involving other explosions and fragments, civilian injured, initial encounter -Y382X2D Terrorism involving other explosions and fragments, civilian injured, subsequent encounter -Y382X2S Terrorism involving other explosions and fragments, civilian injured, sequela -Y382X3A Terrorism involving other explosions and fragments, terrorist injured, initial encounter -Y382X3D Terrorism involving other explosions and fragments, terrorist injured, subsequent encounter -Y382X3S Terrorism involving other explosions and fragments, terrorist injured, sequela -Y383X1A Terrorism involving fires, conflagration and hot substances, public safety official injured, initial encounter -Y383X1D Terrorism involving fires, conflagration and hot substances, public safety official injured, subsequent encounter -Y383X1S Terrorism involving fires, conflagration and hot substances, public safety official injured, sequela -Y383X2A Terrorism involving fires, conflagration and hot substances, civilian injured, initial encounter -Y383X2D Terrorism involving fires, conflagration and hot substances, civilian injured, subsequent encounter -Y383X2S Terrorism involving fires, conflagration and hot substances, civilian injured, sequela -Y383X3A Terrorism involving fires, conflagration and hot substances, terrorist injured, initial encounter -Y383X3D Terrorism involving fires, conflagration and hot substances, terrorist injured, subsequent encounter -Y383X3S Terrorism involving fires, conflagration and hot substances, terrorist injured, sequela -Y384X1A Terrorism involving firearms, public safety official injured, initial encounter -Y384X1D Terrorism involving firearms, public safety official injured, subsequent encounter -Y384X1S Terrorism involving firearms, public safety official injured, sequela -Y384X2A Terrorism involving firearms, civilian injured, initial encounter -Y384X2D Terrorism involving firearms, civilian injured, subsequent encounter -Y384X2S Terrorism involving firearms, civilian injured, sequela -Y384X3A Terrorism involving firearms, terrorist injured, initial encounter -Y384X3D Terrorism involving firearms, terrorist injured, subsequent encounter -Y384X3S Terrorism involving firearms, terrorist injured, sequela -Y385X1A Terrorism involving nuclear weapons, public safety official injured, initial encounter -Y385X1D Terrorism involving nuclear weapons, public safety official injured, subsequent encounter -Y385X1S Terrorism involving nuclear weapons, public safety official injured, sequela -Y385X2A Terrorism involving nuclear weapons, civilian injured, initial encounter -Y385X2D Terrorism involving nuclear weapons, civilian injured, subsequent encounter -Y385X2S Terrorism involving nuclear weapons, civilian injured, sequela -Y385X3A Terrorism involving nuclear weapons, terrorist injured, initial encounter -Y385X3D Terrorism involving nuclear weapons, terrorist injured, subsequent encounter -Y385X3S Terrorism involving nuclear weapons, terrorist injured, sequela -Y386X1A Terrorism involving biological weapons, public safety official injured, initial encounter -Y386X1D Terrorism involving biological weapons, public safety official injured, subsequent encounter -Y386X1S Terrorism involving biological weapons, public safety official injured, sequela -Y386X2A Terrorism involving biological weapons, civilian injured, initial encounter -Y386X2D Terrorism involving biological weapons, civilian injured, subsequent encounter -Y386X2S Terrorism involving biological weapons, civilian injured, sequela -Y386X3A Terrorism involving biological weapons, terrorist injured, initial encounter -Y386X3D Terrorism involving biological weapons, terrorist injured, subsequent encounter -Y386X3S Terrorism involving biological weapons, terrorist injured, sequela -Y387X1A Terrorism involving chemical weapons, public safety official injured, initial encounter -Y387X1D Terrorism involving chemical weapons, public safety official injured, subsequent encounter -Y387X1S Terrorism involving chemical weapons, public safety official injured, sequela -Y387X2A Terrorism involving chemical weapons, civilian injured, initial encounter -Y387X2D Terrorism involving chemical weapons, civilian injured, subsequent encounter -Y387X2S Terrorism involving chemical weapons, civilian injured, sequela -Y387X3A Terrorism involving chemical weapons, terrorist injured, initial encounter -Y387X3D Terrorism involving chemical weapons, terrorist injured, subsequent encounter -Y387X3S Terrorism involving chemical weapons, terrorist injured, sequela -Y3880XA Terrorism involving unspecified means, initial encounter -Y3880XD Terrorism involving unspecified means, subsequent encounter -Y3880XS Terrorism involving unspecified means, sequela -Y38811A Terrorism involving suicide bomber, public safety official injured, initial encounter -Y38811D Terrorism involving suicide bomber, public safety official injured, subsequent encounter -Y38811S Terrorism involving suicide bomber, public safety official injured, sequela -Y38812A Terrorism involving suicide bomber, civilian injured, initial encounter -Y38812D Terrorism involving suicide bomber, civilian injured, subsequent encounter -Y38812S Terrorism involving suicide bomber, civilian injured, sequela -Y38891A Terrorism involving other means, public safety official injured, initial encounter -Y38891D Terrorism involving other means, public safety official injured, subsequent encounter -Y38891S Terrorism involving other means, public safety official injured, sequela -Y38892A Terrorism involving other means, civilian injured, initial encounter -Y38892D Terrorism involving other means, civilian injured, subsequent encounter -Y38892S Terrorism involving other means, civilian injured, sequela -Y38893A Terrorism involving other means, terrorist injured, initial encounter -Y38893D Terrorism involving other means, terrorist injured, subsequent encounter -Y38893S Terrorism involving other means, terrorist injured, sequela -Y389X1A Terrorism, secondary effects, public safety official injured, initial encounter -Y389X1D Terrorism, secondary effects, public safety official injured, subsequent encounter -Y389X1S Terrorism, secondary effects, public safety official injured, sequela -Y389X2A Terrorism, secondary effects, civilian injured, initial encounter -Y389X2D Terrorism, secondary effects, civilian injured, subsequent encounter -Y389X2S Terrorism, secondary effects, civilian injured, sequela -Y620 Failure of sterile precautions during surgical operation -Y621 Failure of sterile precautions during infusion or transfusion -Y622 Failure of sterile precautions during kidney dialysis and other perfusion -Y623 Failure of sterile precautions during injection or immunization -Y624 Failure of sterile precautions during endoscopic examination -Y625 Failure of sterile precautions during heart catheterization -Y626 Failure of sterile precautions during aspiration, puncture and other catheterization -Y628 Failure of sterile precautions during other surgical and medical care -Y629 Failure of sterile precautions during unspecified surgical and medical care -Y630 Excessive amount of blood or other fluid given during transfusion or infusion -Y631 Incorrect dilution of fluid used during infusion -Y632 Overdose of radiation given during therapy -Y633 Inadvertent exposure of patient to radiation during medical care -Y634 Failure in dosage in electroshock or insulin-shock therapy -Y635 Inappropriate temperature in local application and packing -Y636 Underdosing and nonadministration of necessary drug, medicament or biological substance -Y638 Failure in dosage during other surgical and medical care -Y639 Failure in dosage during unspecified surgical and medical care -Y640 Contaminated medical or biological substance, transfused or infused -Y641 Contaminated medical or biological substance, injected or used for immunization -Y648 Contaminated medical or biological substance administered by other means -Y649 Contaminated medical or biological substance administered by unspecified means -Y650 Mismatched blood in transfusion -Y651 Wrong fluid used in infusion -Y652 Failure in suture or ligature during surgical operation -Y653 Endotracheal tube wrongly placed during anesthetic procedure -Y654 Failure to introduce or to remove other tube or instrument -Y6551 Performance of wrong procedure (operation) on correct patient -Y6552 Performance of procedure (operation) on patient not scheduled for surgery -Y6553 Performance of correct procedure (operation) on wrong side or body part -Y658 Other specified misadventures during surgical and medical care -Y66 Nonadministration of surgical and medical care -Y69 Unspecified misadventure during surgical and medical care -Y700 Diagnostic and monitoring anesthesiology devices associated with adverse incidents -Y701 Therapeutic (nonsurgical) and rehabilitative anesthesiology devices associated with adverse incidents -Y702 Prosthetic and other implants, materials and accessory anesthesiology devices associated with adverse incidents -Y703 Surgical instruments, materials and anesthesiology devices (including sutures) associated with adverse incidents -Y708 Miscellaneous anesthesiology devices associated with adverse incidents, not elsewhere classified -Y710 Diagnostic and monitoring cardiovascular devices associated with adverse incidents -Y711 Therapeutic (nonsurgical) and rehabilitative cardiovascular devices associated with adverse incidents -Y712 Prosthetic and other implants, materials and accessory cardiovascular devices associated with adverse incidents -Y713 Surgical instruments, materials and cardiovascular devices (including sutures) associated with adverse incidents -Y718 Miscellaneous cardiovascular devices associated with adverse incidents, not elsewhere classified -Y720 Diagnostic and monitoring otorhinolaryngological devices associated with adverse incidents -Y721 Therapeutic (nonsurgical) and rehabilitative otorhinolaryngological devices associated with adverse incidents -Y722 Prosthetic and other implants, materials and accessory otorhinolaryngological devices associated with adverse incidents -Y723 Surgical instruments, materials and otorhinolaryngological devices (including sutures) associated with adverse incidents -Y728 Miscellaneous otorhinolaryngological devices associated with adverse incidents, not elsewhere classified -Y730 Diagnostic and monitoring gastroenterology and urology devices associated with adverse incidents -Y731 Therapeutic (nonsurgical) and rehabilitative gastroenterology and urology devices associated with adverse incidents -Y732 Prosthetic and other implants, materials and accessory gastroenterology and urology devices associated with adverse incidents -Y733 Surgical instruments, materials and gastroenterology and urology devices (including sutures) associated with adverse incidents -Y738 Miscellaneous gastroenterology and urology devices associated with adverse incidents, not elsewhere classified -Y740 Diagnostic and monitoring general hospital and personal-use devices associated with adverse incidents -Y741 Therapeutic (nonsurgical) and rehabilitative general hospital and personal-use devices associated with adverse incidents -Y742 Prosthetic and other implants, materials and accessory general hospital and personal-use devices associated with adverse incidents -Y743 Surgical instruments, materials and general hospital and personal-use devices (including sutures) associated with adverse incidents -Y748 Miscellaneous general hospital and personal-use devices associated with adverse incidents, not elsewhere classified -Y750 Diagnostic and monitoring neurological devices associated with adverse incidents -Y751 Therapeutic (nonsurgical) and rehabilitative neurological devices associated with adverse incidents -Y752 Prosthetic and other implants, materials and neurological devices associated with adverse incidents -Y753 Surgical instruments, materials and neurological devices (including sutures) associated with adverse incidents -Y758 Miscellaneous neurological devices associated with adverse incidents, not elsewhere classified -Y760 Diagnostic and monitoring obstetric and gynecological devices associated with adverse incidents -Y761 Therapeutic (nonsurgical) and rehabilitative obstetric and gynecological devices associated with adverse incidents -Y762 Prosthetic and other implants, materials and accessory obstetric and gynecological devices associated with adverse incidents -Y763 Surgical instruments, materials and obstetric and gynecological devices (including sutures) associated with adverse incidents -Y768 Miscellaneous obstetric and gynecological devices associated with adverse incidents, not elsewhere classified -Y770 Diagnostic and monitoring ophthalmic devices associated with adverse incidents -Y771 Therapeutic (nonsurgical) and rehabilitative ophthalmic devices associated with adverse incidents -Y772 Prosthetic and other implants, materials and accessory ophthalmic devices associated with adverse incidents -Y773 Surgical instruments, materials and ophthalmic devices (including sutures) associated with adverse incidents -Y778 Miscellaneous ophthalmic devices associated with adverse incidents, not elsewhere classified -Y780 Diagnostic and monitoring radiological devices associated with adverse incidents -Y781 Therapeutic (nonsurgical) and rehabilitative radiological devices associated with adverse incidents -Y782 Prosthetic and other implants, materials and accessory radiological devices associated with adverse incidents -Y783 Surgical instruments, materials and radiological devices (including sutures) associated with adverse incidents -Y788 Miscellaneous radiological devices associated with adverse incidents, not elsewhere classified -Y790 Diagnostic and monitoring orthopedic devices associated with adverse incidents -Y791 Therapeutic (nonsurgical) and rehabilitative orthopedic devices associated with adverse incidents -Y792 Prosthetic and other implants, materials and accessory orthopedic devices associated with adverse incidents -Y793 Surgical instruments, materials and orthopedic devices (including sutures) associated with adverse incidents -Y798 Miscellaneous orthopedic devices associated with adverse incidents, not elsewhere classified -Y800 Diagnostic and monitoring physical medicine devices associated with adverse incidents -Y801 Therapeutic (nonsurgical) and rehabilitative physical medicine devices associated with adverse incidents -Y802 Prosthetic and other implants, materials and accessory physical medicine devices associated with adverse incidents -Y803 Surgical instruments, materials and physical medicine devices (including sutures) associated with adverse incidents -Y808 Miscellaneous physical medicine devices associated with adverse incidents, not elsewhere classified -Y810 Diagnostic and monitoring general- and plastic-surgery devices associated with adverse incidents -Y811 Therapeutic (nonsurgical) and rehabilitative general- and plastic-surgery devices associated with adverse incidents -Y812 Prosthetic and other implants, materials and accessory general- and plastic-surgery devices associated with adverse incidents -Y813 Surgical instruments, materials and general- and plastic-surgery devices (including sutures) associated with adverse incidents -Y818 Miscellaneous general- and plastic-surgery devices associated with adverse incidents, not elsewhere classified -Y828 Other medical devices associated with adverse incidents -Y829 Unspecified medical devices associated with adverse incidents -Y830 Surgical operation with transplant of whole organ as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y831 Surgical operation with implant of artificial internal device as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y832 Surgical operation with anastomosis, bypass or graft as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y833 Surgical operation with formation of external stoma as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y834 Other reconstructive surgery as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y835 Amputation of limb(s) as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y836 Removal of other organ (partial) (total) as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y838 Other surgical procedures as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y839 Surgical procedure, unspecified as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y840 Cardiac catheterization as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y841 Kidney dialysis as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y842 Radiological procedure and radiotherapy as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y843 Shock therapy as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y844 Aspiration of fluid as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y845 Insertion of gastric or duodenal sound as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y846 Urinary catheterization as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y847 Blood-sampling as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y848 Other medical procedures as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y849 Medical procedure, unspecified as the cause of abnormal reaction of the patient, or of later complication, without mention of misadventure at the time of the procedure -Y900 Blood alcohol level of less than 20 mg/100 ml -Y901 Blood alcohol level of 20-39 mg/100 ml -Y902 Blood alcohol level of 40-59 mg/100 ml -Y903 Blood alcohol level of 60-79 mg/100 ml -Y904 Blood alcohol level of 80-99 mg/100 ml -Y905 Blood alcohol level of 100-119 mg/100 ml -Y906 Blood alcohol level of 120-199 mg/100 ml -Y907 Blood alcohol level of 200-239 mg/100 ml -Y908 Blood alcohol level of 240 mg/100 ml or more -Y909 Presence of alcohol in blood, level not specified -Y92000 Kitchen of unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92001 Dining room of unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92002 Bathroom of unspecified non-institutional (private) residence single-family (private) house as the place of occurrence of the external cause -Y92003 Bedroom of unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92007 Garden or yard of unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92008 Other place in unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92009 Unspecified place in unspecified non-institutional (private) residence as the place of occurrence of the external cause -Y92010 Kitchen of single-family (private) house as the place of occurrence of the external cause -Y92011 Dining room of single-family (private) house as the place of occurrence of the external cause -Y92012 Bathroom of single-family (private) house as the place of occurrence of the external cause -Y92013 Bedroom of single-family (private) house as the place of occurrence of the external cause -Y92014 Private driveway to single-family (private) house as the place of occurrence of the external cause -Y92015 Private garage of single-family (private) house as the place of occurrence of the external cause -Y92016 Swimming-pool in single-family (private) house or garden as the place of occurrence of the external cause -Y92017 Garden or yard in single-family (private) house as the place of occurrence of the external cause -Y92018 Other place in single-family (private) house as the place of occurrence of the external cause -Y92019 Unspecified place in single-family (private) house as the place of occurrence of the external cause -Y92020 Kitchen in mobile home as the place of occurrence of the external cause -Y92021 Dining room in mobile home as the place of occurrence of the external cause -Y92022 Bathroom in mobile home as the place of occurrence of the external cause -Y92023 Bedroom in mobile home as the place of occurrence of the external cause -Y92024 Driveway of mobile home as the place of occurrence of the external cause -Y92025 Garage of mobile home as the place of occurrence of the external cause -Y92026 Swimming-pool of mobile home as the place of occurrence of the external cause -Y92027 Garden or yard of mobile home as the place of occurrence of the external cause -Y92028 Other place in mobile home as the place of occurrence of the external cause -Y92029 Unspecified place in mobile home as the place of occurrence of the external cause -Y92030 Kitchen in apartment as the place of occurrence of the external cause -Y92031 Bathroom in apartment as the place of occurrence of the external cause -Y92032 Bedroom in apartment as the place of occurrence of the external cause -Y92038 Other place in apartment as the place of occurrence of the external cause -Y92039 Unspecified place in apartment as the place of occurrence of the external cause -Y92040 Kitchen in boarding-house as the place of occurrence of the external cause -Y92041 Bathroom in boarding-house as the place of occurrence of the external cause -Y92042 Bedroom in boarding-house as the place of occurrence of the external cause -Y92043 Driveway of boarding-house as the place of occurrence of the external cause -Y92044 Garage of boarding-house as the place of occurrence of the external cause -Y92045 Swimming-pool of boarding-house as the place of occurrence of the external cause -Y92046 Garden or yard of boarding-house as the place of occurrence of the external cause -Y92048 Other place in boarding-house as the place of occurrence of the external cause -Y92049 Unspecified place in boarding-house as the place of occurrence of the external cause -Y92090 Kitchen in other non-institutional residence as the place of occurrence of the external cause -Y92091 Bathroom in other non-institutional residence as the place of occurrence of the external cause -Y92092 Bedroom in other non-institutional residence as the place of occurrence of the external cause -Y92093 Driveway of other non-institutional residence as the place of occurrence of the external cause -Y92094 Garage of other non-institutional residence as the place of occurrence of the external cause -Y92095 Swimming-pool of other non-institutional residence as the place of occurrence of the external cause -Y92096 Garden or yard of other non-institutional residence as the place of occurrence of the external cause -Y92098 Other place in other non-institutional residence as the place of occurrence of the external cause -Y92099 Unspecified place in other non-institutional residence as the place of occurrence of the external cause -Y9210 Unspecified residential institution as the place of occurrence of the external cause -Y92110 Kitchen in children's home and orphanage as the place of occurrence of the external cause -Y92111 Bathroom in children's home and orphanage as the place of occurrence of the external cause -Y92112 Bedroom in children's home and orphanage as the place of occurrence of the external cause -Y92113 Driveway of children's home and orphanage as the place of occurrence of the external cause -Y92114 Garage of children's home and orphanage as the place of occurrence of the external cause -Y92115 Swimming-pool of children's home and orphanage as the place of occurrence of the external cause -Y92116 Garden or yard of children's home and orphanage as the place of occurrence of the external cause -Y92118 Other place in children's home and orphanage as the place of occurrence of the external cause -Y92119 Unspecified place in children's home and orphanage as the place of occurrence of the external cause -Y92120 Kitchen in nursing home as the place of occurrence of the external cause -Y92121 Bathroom in nursing home as the place of occurrence of the external cause -Y92122 Bedroom in nursing home as the place of occurrence of the external cause -Y92123 Driveway of nursing home as the place of occurrence of the external cause -Y92124 Garage of nursing home as the place of occurrence of the external cause -Y92125 Swimming-pool of nursing home as the place of occurrence of the external cause -Y92126 Garden or yard of nursing home as the place of occurrence of the external cause -Y92128 Other place in nursing home as the place of occurrence of the external cause -Y92129 Unspecified place in nursing home as the place of occurrence of the external cause -Y92130 Kitchen on military base as the place of occurrence of the external cause -Y92131 Mess hall on military base as the place of occurrence of the external cause -Y92133 Barracks on military base as the place of occurrence of the external cause -Y92135 Garage on military base as the place of occurrence of the external cause -Y92136 Swimming-pool on military base as the place of occurrence of the external cause -Y92137 Garden or yard on military base as the place of occurrence of the external cause -Y92138 Other place on military base as the place of occurrence of the external cause -Y92139 Unspecified place military base as the place of occurrence of the external cause -Y92140 Kitchen in prison as the place of occurrence of the external cause -Y92141 Dining room in prison as the place of occurrence of the external cause -Y92142 Bathroom in prison as the place of occurrence of the external cause -Y92143 Cell of prison as the place of occurrence of the external cause -Y92146 Swimming-pool of prison as the place of occurrence of the external cause -Y92147 Courtyard of prison as the place of occurrence of the external cause -Y92148 Other place in prison as the place of occurrence of the external cause -Y92149 Unspecified place in prison as the place of occurrence of the external cause -Y92150 Kitchen in reform school as the place of occurrence of the external cause -Y92151 Dining room in reform school as the place of occurrence of the external cause -Y92152 Bathroom in reform school as the place of occurrence of the external cause -Y92153 Bedroom in reform school as the place of occurrence of the external cause -Y92154 Driveway of reform school as the place of occurrence of the external cause -Y92155 Garage of reform school as the place of occurrence of the external cause -Y92156 Swimming-pool of reform school as the place of occurrence of the external cause -Y92157 Garden or yard of reform school as the place of occurrence of the external cause -Y92158 Other place in reform school as the place of occurrence of the external cause -Y92159 Unspecified place in reform school as the place of occurrence of the external cause -Y92160 Kitchen in school dormitory as the place of occurrence of the external cause -Y92161 Dining room in school dormitory as the place of occurrence of the external cause -Y92162 Bathroom in school dormitory as the place of occurrence of the external cause -Y92163 Bedroom in school dormitory as the place of occurrence of the external cause -Y92168 Other place in school dormitory as the place of occurrence of the external cause -Y92169 Unspecified place in school dormitory as the place of occurrence of the external cause -Y92190 Kitchen in other specified residential institution as the place of occurrence of the external cause -Y92191 Dining room in other specified residential institution as the place of occurrence of the external cause -Y92192 Bathroom in other specified residential institution as the place of occurrence of the external cause -Y92193 Bedroom in other specified residential institution as the place of occurrence of the external cause -Y92194 Driveway of other specified residential institution as the place of occurrence of the external cause -Y92195 Garage of other specified residential institution as the place of occurrence of the external cause -Y92196 Pool of other specified residential institution as the place of occurrence of the external cause -Y92197 Garden or yard of other specified residential institution as the place of occurrence of the external cause -Y92198 Other place in other specified residential institution as the place of occurrence of the external cause -Y92199 Unspecified place in other specified residential institution as the place of occurrence of the external cause -Y92210 Daycare center as the place of occurrence of the external cause -Y92211 Elementary school as the place of occurrence of the external cause -Y92212 Middle school as the place of occurrence of the external cause -Y92213 High school as the place of occurrence of the external cause -Y92214 College as the place of occurrence of the external cause -Y92215 Trade school as the place of occurrence of the external cause -Y92218 Other school as the place of occurrence of the external cause -Y92219 Unspecified school as the place of occurrence of the external cause -Y9222 Religious institution as the place of occurrence of the external cause -Y92230 Patient room in hospital as the place of occurrence of the external cause -Y92231 Patient bathroom in hospital as the place of occurrence of the external cause -Y92232 Corridor of hospital as the place of occurrence of the external cause -Y92233 Cafeteria of hospital as the place of occurrence of the external cause -Y92234 Operating room of hospital as the place of occurrence of the external cause -Y92238 Other place in hospital as the place of occurrence of the external cause -Y92239 Unspecified place in hospital as the place of occurrence of the external cause -Y92240 Courthouse as the place of occurrence of the external cause -Y92241 Library as the place of occurrence of the external cause -Y92242 Post office as the place of occurrence of the external cause -Y92243 City hall as the place of occurrence of the external cause -Y92248 Other public administrative building as the place of occurrence of the external cause -Y92250 Art Gallery as the place of occurrence of the external cause -Y92251 Museum as the place of occurrence of the external cause -Y92252 Music hall as the place of occurrence of the external cause -Y92253 Opera house as the place of occurrence of the external cause -Y92254 Theater (live) as the place of occurrence of the external cause -Y92258 Other cultural public building as the place of occurrence of the external cause -Y9226 Movie house or cinema as the place of occurrence of the external cause -Y9229 Other specified public building as the place of occurrence of the external cause -Y92310 Basketball court as the place of occurrence of the external cause -Y92311 Squash court as the place of occurrence of the external cause -Y92312 Tennis court as the place of occurrence of the external cause -Y92318 Other athletic court as the place of occurrence of the external cause -Y92320 Baseball field as the place of occurrence of the external cause -Y92321 Football field as the place of occurrence of the external cause -Y92322 Soccer field as the place of occurrence of the external cause -Y92328 Other athletic field as the place of occurrence of the external cause -Y92330 Ice skating rink (indoor) (outdoor) as the place of occurrence of the external cause -Y92331 Roller skating rink as the place of occurrence of the external cause -Y9234 Swimming pool (public) as the place of occurrence of the external cause -Y9239 Other specified sports and athletic area as the place of occurrence of the external cause -Y92410 Unspecified street and highway as the place of occurrence of the external cause -Y92411 Interstate highway as the place of occurrence of the external cause -Y92412 Parkway as the place of occurrence of the external cause -Y92413 State road as the place of occurrence of the external cause -Y92414 Local residential or business street as the place of occurrence of the external cause -Y92415 Exit ramp or entrance ramp of street or highway as the place of occurrence of the external cause -Y92480 Sidewalk as the place of occurrence of the external cause -Y92481 Parking lot as the place of occurrence of the external cause -Y92482 Bike path as the place of occurrence of the external cause -Y92488 Other paved roadways as the place of occurrence of the external cause -Y92510 Bank as the place of occurrence of the external cause -Y92511 Restaurant or cafe as the place of occurrence of the external cause -Y92512 Supermarket, store or market as the place of occurrence of the external cause -Y92513 Shop (commercial) as the place of occurrence of the external cause -Y92520 Airport as the place of occurrence of the external cause -Y92521 Bus station as the place of occurrence of the external cause -Y92522 Railway station as the place of occurrence of the external cause -Y92523 Highway rest stop as the place of occurrence of the external cause -Y92524 Gas station as the place of occurrence of the external cause -Y92530 Ambulatory surgery center as the place of occurrence of the external cause -Y92531 Health care provider office as the place of occurrence of the external cause -Y92532 Urgent care center as the place of occurrence of the external cause -Y92538 Other ambulatory health services establishments as the place of occurrence of the external cause -Y9259 Other trade areas as the place of occurrence of the external cause -Y9261 Building [any] under construction as the place of occurrence of the external cause -Y9262 Dock or shipyard as the place of occurrence of the external cause -Y9263 Factory as the place of occurrence of the external cause -Y9264 Mine or pit as the place of occurrence of the external cause -Y9265 Oil rig as the place of occurrence of the external cause -Y9269 Other specified industrial and construction area as the place of occurrence of the external cause -Y9271 Barn as the place of occurrence of the external cause -Y9272 Chicken coop as the place of occurrence of the external cause -Y9273 Farm field as the place of occurrence of the external cause -Y9274 Orchard as the place of occurrence of the external cause -Y9279 Other farm location as the place of occurrence of the external cause -Y92810 Car as the place of occurrence of the external cause -Y92811 Bus as the place of occurrence of the external cause -Y92812 Truck as the place of occurrence of the external cause -Y92813 Airplane as the place of occurrence of the external cause -Y92814 Boat as the place of occurrence of the external cause -Y92815 Train as the place of occurrence of the external cause -Y92816 Subway car as the place of occurrence of the external cause -Y92818 Other transport vehicle as the place of occurrence of the external cause -Y92820 Desert as the place of occurrence of the external cause -Y92821 Forest as the place of occurrence of the external cause -Y92828 Other wilderness area as the place of occurrence of the external cause -Y92830 Public park as the place of occurrence of the external cause -Y92831 Amusement park as the place of occurrence of the external cause -Y92832 Beach as the place of occurrence of the external cause -Y92833 Campsite as the place of occurrence of the external cause -Y92834 Zoological garden (Zoo) as the place of occurrence of the external cause -Y92838 Other recreation area as the place of occurrence of the external cause -Y9284 Military training ground as the place of occurrence of the external cause -Y9285 Railroad track as the place of occurrence of the external cause -Y9286 Slaughter house as the place of occurrence of the external cause -Y9289 Other specified places as the place of occurrence of the external cause -Y929 Unspecified place or not applicable -Y9301 Activity, walking, marching and hiking -Y9302 Activity, running -Y9311 Activity, swimming -Y9312 Activity, springboard and platform diving -Y9313 Activity, water polo -Y9314 Activity, water aerobics and water exercise -Y9315 Activity, underwater diving and snorkeling -Y9316 Activity, rowing, canoeing, kayaking, rafting and tubing -Y9317 Activity, water skiing and wake boarding -Y9318 Activity, surfing, windsurfing and boogie boarding -Y9319 Activity, other involving water and watercraft -Y9321 Activity, ice skating -Y9322 Activity, ice hockey -Y9323 Activity, snow (alpine) (downhill) skiing, snow boarding, sledding, tobogganing and snow tubing -Y9324 Activity, cross country skiing -Y9329 Activity, other involving ice and snow -Y9331 Activity, mountain climbing, rock climbing and wall climbing -Y9332 Activity, rappelling -Y9333 Activity, BASE jumping -Y9334 Activity, bungee jumping -Y9335 Activity, hang gliding -Y9339 Activity, other involving climbing, rappelling and jumping off -Y9341 Activity, dancing -Y9342 Activity, yoga -Y9343 Activity, gymnastics -Y9344 Activity, trampolining -Y9345 Activity, cheerleading -Y9349 Activity, other involving dancing and other rhythmic movements -Y9351 Activity, roller skating (inline) and skateboarding -Y9352 Activity, horseback riding -Y9353 Activity, golf -Y9354 Activity, bowling -Y9355 Activity, bike riding -Y9356 Activity, jumping rope -Y9357 Activity, non-running track and field events -Y9359 Activity, other involving other sports and athletics played individually -Y9361 Activity, american tackle football -Y9362 Activity, american flag or touch football -Y9363 Activity, rugby -Y9364 Activity, baseball -Y9365 Activity, lacrosse and field hockey -Y9366 Activity, soccer -Y9367 Activity, basketball -Y9368 Activity, volleyball (beach) (court) -Y936A Activity, physical games generally associated with school recess, summer camp and children -Y9369 Activity, other involving other sports and athletics played as a team or group -Y9371 Activity, boxing -Y9372 Activity, wrestling -Y9373 Activity, racquet and hand sports -Y9374 Activity, frisbee -Y9375 Activity, martial arts -Y9379 Activity, other specified sports and athletics -Y93A1 Activity, exercise machines primarily for cardiorespiratory conditioning -Y93A2 Activity, calisthenics -Y93A3 Activity, aerobic and step exercise -Y93A4 Activity, circuit training -Y93A5 Activity, obstacle course -Y93A6 Activity, grass drills -Y93A9 Activity, other involving cardiorespiratory exercise -Y93B1 Activity, exercise machines primarily for muscle strengthening -Y93B2 Activity, push-ups, pull-ups, sit-ups -Y93B3 Activity, free weights -Y93B4 Activity, pilates -Y93B9 Activity, other involving muscle strengthening exercises -Y93C1 Activity, computer keyboarding -Y93C2 Activity, hand held interactive electronic device -Y93C9 Activity, other involving computer technology and electronic devices -Y93D1 Activity, knitting and crocheting -Y93D2 Activity, sewing -Y93D3 Activity, furniture building and finishing -Y93D9 Activity, other involving arts and handcrafts -Y93E1 Activity, personal bathing and showering -Y93E2 Activity, laundry -Y93E3 Activity, vacuuming -Y93E4 Activity, ironing -Y93E5 Activity, floor mopping and cleaning -Y93E6 Activity, residential relocation -Y93E8 Activity, other personal hygiene -Y93E9 Activity, other interior property and clothing maintenance -Y93F1 Activity, caregiving, bathing -Y93F2 Activity, caregiving, lifting -Y93F9 Activity, other caregiving -Y93G1 Activity, food preparation and clean up -Y93G2 Activity, grilling and smoking food -Y93G3 Activity, cooking and baking -Y93G9 Activity, other involving cooking and grilling -Y93H1 Activity, digging, shoveling and raking -Y93H2 Activity, gardening and landscaping -Y93H3 Activity, building and construction -Y93H9 Activity, other involving exterior property and land maintenance, building and construction -Y93I1 Activity, roller coaster riding -Y93I9 Activity, other involving external motion -Y93J1 Activity, piano playing -Y93J2 Activity, drum and other percussion instrument playing -Y93J3 Activity, string instrument playing -Y93J4 Activity, winds and brass instrument playing -Y93K1 Activity, walking an animal -Y93K2 Activity, milking an animal -Y93K3 Activity, grooming and shearing an animal -Y93K9 Activity, other involving animal care -Y9381 Activity, refereeing a sports activity -Y9382 Activity, spectator at an event -Y9383 Activity, rough housing and horseplay -Y9384 Activity, sleeping -Y9385 Activity, choking game -Y9389 Activity, other specified -Y939 Activity, unspecified -Y95 Nosocomial condition -Y990 Civilian activity done for income or pay -Y991 Military activity -Y992 Volunteer activity -Y998 Other external cause status -Y999 Unspecified external cause status -Z0000 Encounter for general adult medical examination without abnormal findings -Z0001 Encounter for general adult medical examination with abnormal findings -Z00110 Health examination for newborn under 8 days old -Z00111 Health examination for newborn 8 to 28 days old -Z00121 Encounter for routine child health examination with abnormal findings -Z00129 Encounter for routine child health examination without abnormal findings -Z002 Encounter for examination for period of rapid growth in childhood -Z003 Encounter for examination for adolescent development state -Z005 Encounter for examination of potential donor of organ and tissue -Z006 Encounter for examination for normal comparison and control in clinical research program -Z0070 Encounter for examination for period of delayed growth in childhood without abnormal findings -Z0071 Encounter for examination for period of delayed growth in childhood with abnormal findings -Z008 Encounter for other general examination -Z0100 Encounter for examination of eyes and vision without abnormal findings -Z0101 Encounter for examination of eyes and vision with abnormal findings -Z0110 Encounter for examination of ears and hearing without abnormal findings -Z01110 Encounter for hearing examination following failed hearing screening -Z01118 Encounter for examination of ears and hearing with other abnormal findings -Z0112 Encounter for hearing conservation and treatment -Z0120 Encounter for dental examination and cleaning without abnormal findings -Z0121 Encounter for dental examination and cleaning with abnormal findings -Z0130 Encounter for examination of blood pressure without abnormal findings -Z0131 Encounter for examination of blood pressure with abnormal findings -Z01411 Encounter for gynecological examination (general) (routine) with abnormal findings -Z01419 Encounter for gynecological examination (general) (routine) without abnormal findings -Z0142 Encounter for cervical smear to confirm findings of recent normal smear following initial abnormal smear -Z01810 Encounter for preprocedural cardiovascular examination -Z01811 Encounter for preprocedural respiratory examination -Z01812 Encounter for preprocedural laboratory examination -Z01818 Encounter for other preprocedural examination -Z0182 Encounter for allergy testing -Z0183 Encounter for blood typing -Z0184 Encounter for antibody response examination -Z0189 Encounter for other specified special examinations -Z020 Encounter for examination for admission to educational institution -Z021 Encounter for pre-employment examination -Z022 Encounter for examination for admission to residential institution -Z023 Encounter for examination for recruitment to armed forces -Z024 Encounter for examination for driving license -Z025 Encounter for examination for participation in sport -Z026 Encounter for examination for insurance purposes -Z0271 Encounter for disability determination -Z0279 Encounter for issue of other medical certificate -Z0281 Encounter for paternity testing -Z0282 Encounter for adoption services -Z0283 Encounter for blood-alcohol and blood-drug test -Z0289 Encounter for other administrative examinations -Z029 Encounter for administrative examinations, unspecified -Z036 Encounter for observation for suspected toxic effect from ingested substance ruled out -Z0371 Encounter for suspected problem with amniotic cavity and membrane ruled out -Z0372 Encounter for suspected placental problem ruled out -Z0373 Encounter for suspected fetal anomaly ruled out -Z0374 Encounter for suspected problem with fetal growth ruled out -Z0375 Encounter for suspected cervical shortening ruled out -Z0379 Encounter for other suspected maternal and fetal conditions ruled out -Z03810 Encounter for observation for suspected exposure to anthrax ruled out -Z03818 Encounter for observation for suspected exposure to other biological agents ruled out -Z0389 Encounter for observation for other suspected diseases and conditions ruled out -Z041 Encounter for examination and observation following transport accident -Z042 Encounter for examination and observation following work accident -Z043 Encounter for examination and observation following other accident -Z0441 Encounter for examination and observation following alleged adult rape -Z0442 Encounter for examination and observation following alleged child rape -Z046 Encounter for general psychiatric examination, requested by authority -Z0471 Encounter for examination and observation following alleged adult physical abuse -Z0472 Encounter for examination and observation following alleged child physical abuse -Z048 Encounter for examination and observation for other specified reasons -Z049 Encounter for examination and observation for unspecified reason -Z050 Observation and evaluation of newborn for suspected cardiac condition ruled out -Z051 Observation and evaluation of newborn for suspected infectious condition ruled out -Z052 Observation and evaluation of newborn for suspected neurological condition ruled out -Z053 Observation and evaluation of newborn for suspected respiratory condition ruled out -Z0541 Observation and evaluation of newborn for suspected genetic condition ruled out -Z0542 Observation and evaluation of newborn for suspected metabolic condition ruled out -Z0543 Observation and evaluation of newborn for suspected immunologic condition ruled out -Z055 Observation and evaluation of newborn for suspected gastrointestinal condition ruled out -Z056 Observation and evaluation of newborn for suspected genitourinary condition ruled out -Z0571 Observation and evaluation of newborn for suspected skin and subcutaneous tissue condition ruled out -Z0572 Observation and evaluation of newborn for suspected musculoskeletal condition ruled out -Z0573 Observation and evaluation of newborn for suspected connective tissue condition ruled out -Z058 Observation and evaluation of newborn for other specified suspected condition ruled out -Z059 Observation and evaluation of newborn for unspecified suspected condition ruled out -Z08 Encounter for follow-up examination after completed treatment for malignant neoplasm -Z09 Encounter for follow-up examination after completed treatment for conditions other than malignant neoplasm -Z110 Encounter for screening for intestinal infectious diseases -Z111 Encounter for screening for respiratory tuberculosis -Z112 Encounter for screening for other bacterial diseases -Z113 Encounter for screening for infections with a predominantly sexual mode of transmission -Z114 Encounter for screening for human immunodeficiency virus [HIV] -Z1151 Encounter for screening for human papillomavirus (HPV) -Z1159 Encounter for screening for other viral diseases -Z116 Encounter for screening for other protozoal diseases and helminthiases -Z118 Encounter for screening for other infectious and parasitic diseases -Z119 Encounter for screening for infectious and parasitic diseases, unspecified -Z120 Encounter for screening for malignant neoplasm of stomach -Z1210 Encounter for screening for malignant neoplasm of intestinal tract, unspecified -Z1211 Encounter for screening for malignant neoplasm of colon -Z1212 Encounter for screening for malignant neoplasm of rectum -Z1213 Encounter for screening for malignant neoplasm of small intestine -Z122 Encounter for screening for malignant neoplasm of respiratory organs -Z1231 Encounter for screening mammogram for malignant neoplasm of breast -Z1239 Encounter for other screening for malignant neoplasm of breast -Z124 Encounter for screening for malignant neoplasm of cervix -Z125 Encounter for screening for malignant neoplasm of prostate -Z126 Encounter for screening for malignant neoplasm of bladder -Z1271 Encounter for screening for malignant neoplasm of testis -Z1272 Encounter for screening for malignant neoplasm of vagina -Z1273 Encounter for screening for malignant neoplasm of ovary -Z1279 Encounter for screening for malignant neoplasm of other genitourinary organs -Z1281 Encounter for screening for malignant neoplasm of oral cavity -Z1282 Encounter for screening for malignant neoplasm of nervous system -Z1283 Encounter for screening for malignant neoplasm of skin -Z1289 Encounter for screening for malignant neoplasm of other sites -Z129 Encounter for screening for malignant neoplasm, site unspecified -Z130 Encounter for screening for diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism -Z131 Encounter for screening for diabetes mellitus -Z1321 Encounter for screening for nutritional disorder -Z13220 Encounter for screening for lipoid disorders -Z13228 Encounter for screening for other metabolic disorders -Z1329 Encounter for screening for other suspected endocrine disorder -Z134 Encounter for screening for certain developmental disorders in childhood -Z135 Encounter for screening for eye and ear disorders -Z136 Encounter for screening for cardiovascular disorders -Z1371 Encounter for nonprocreative screening for genetic disease carrier status -Z1379 Encounter for other screening for genetic and chromosomal anomalies -Z13810 Encounter for screening for upper gastrointestinal disorder -Z13811 Encounter for screening for lower gastrointestinal disorder -Z13818 Encounter for screening for other digestive system disorders -Z13820 Encounter for screening for osteoporosis -Z13828 Encounter for screening for other musculoskeletal disorder -Z1383 Encounter for screening for respiratory disorder NEC -Z1384 Encounter for screening for dental disorders -Z13850 Encounter for screening for traumatic brain injury -Z13858 Encounter for screening for other nervous system disorders -Z1388 Encounter for screening for disorder due to exposure to contaminants -Z1389 Encounter for screening for other disorder -Z139 Encounter for screening, unspecified -Z1401 Asymptomatic hemophilia A carrier -Z1402 Symptomatic hemophilia A carrier -Z141 Cystic fibrosis carrier -Z148 Genetic carrier of other disease -Z1501 Genetic susceptibility to malignant neoplasm of breast -Z1502 Genetic susceptibility to malignant neoplasm of ovary -Z1503 Genetic susceptibility to malignant neoplasm of prostate -Z1504 Genetic susceptibility to malignant neoplasm of endometrium -Z1509 Genetic susceptibility to other malignant neoplasm -Z1581 Genetic susceptibility to multiple endocrine neoplasia [MEN] -Z1589 Genetic susceptibility to other disease -Z1610 Resistance to unspecified beta lactam antibiotics -Z1611 Resistance to penicillins -Z1612 Extended spectrum beta lactamase (ESBL) resistance -Z1619 Resistance to other specified beta lactam antibiotics -Z1620 Resistance to unspecified antibiotic -Z1621 Resistance to vancomycin -Z1622 Resistance to vancomycin related antibiotics -Z1623 Resistance to quinolones and fluoroquinolones -Z1624 Resistance to multiple antibiotics -Z1629 Resistance to other single specified antibiotic -Z1630 Resistance to unspecified antimicrobial drugs -Z1631 Resistance to antiparasitic drug(s) -Z1632 Resistance to antifungal drug(s) -Z1633 Resistance to antiviral drug(s) -Z16341 Resistance to single antimycobacterial drug -Z16342 Resistance to multiple antimycobacterial drugs -Z1635 Resistance to multiple antimicrobial drugs -Z1639 Resistance to other specified antimicrobial drug -Z170 Estrogen receptor positive status [ER+] -Z171 Estrogen receptor negative status [ER-] -Z1801 Retained depleted uranium fragments -Z1809 Other retained radioactive fragments -Z1810 Retained metal fragments, unspecified -Z1811 Retained magnetic metal fragments -Z1812 Retained nonmagnetic metal fragments -Z182 Retained plastic fragments -Z1831 Retained animal quills or spines -Z1832 Retained tooth -Z1833 Retained wood fragments -Z1839 Other retained organic fragments -Z1881 Retained glass fragments -Z1883 Retained stone or crystalline fragments -Z1889 Other specified retained foreign body fragments -Z189 Retained foreign body fragments, unspecified material -Z191 Hormone sensitive malignancy status -Z192 Hormone resistant malignancy status -Z2001 Contact with and (suspected) exposure to intestinal infectious diseases due to Escherichia coli (E. coli) -Z2009 Contact with and (suspected) exposure to other intestinal infectious diseases -Z201 Contact with and (suspected) exposure to tuberculosis -Z202 Contact with and (suspected) exposure to infections with a predominantly sexual mode of transmission -Z203 Contact with and (suspected) exposure to rabies -Z204 Contact with and (suspected) exposure to rubella -Z205 Contact with and (suspected) exposure to viral hepatitis -Z206 Contact with and (suspected) exposure to human immunodeficiency virus [HIV] -Z207 Contact with and (suspected) exposure to pediculosis, acariasis and other infestations -Z20810 Contact with and (suspected) exposure to anthrax -Z20811 Contact with and (suspected) exposure to meningococcus -Z20818 Contact with and (suspected) exposure to other bacterial communicable diseases -Z20820 Contact with and (suspected) exposure to varicella -Z20828 Contact with and (suspected) exposure to other viral communicable diseases -Z2089 Contact with and (suspected) exposure to other communicable diseases -Z209 Contact with and (suspected) exposure to unspecified communicable disease -Z21 Asymptomatic human immunodeficiency virus [HIV] infection status -Z220 Carrier of typhoid -Z221 Carrier of other intestinal infectious diseases -Z222 Carrier of diphtheria -Z2231 Carrier of bacterial disease due to meningococci -Z22321 Carrier or suspected carrier of Methicillin susceptible Staphylococcus aureus -Z22322 Carrier or suspected carrier of Methicillin resistant Staphylococcus aureus -Z22330 Carrier of Group B streptococcus -Z22338 Carrier of other streptococcus -Z2239 Carrier of other specified bacterial diseases -Z224 Carrier of infections with a predominantly sexual mode of transmission -Z226 Carrier of human T-lymphotropic virus type-1 [HTLV-1] infection -Z228 Carrier of other infectious diseases -Z229 Carrier of infectious disease, unspecified -Z23 Encounter for immunization -Z2801 Immunization not carried out because of acute illness of patient -Z2802 Immunization not carried out because of chronic illness or condition of patient -Z2803 Immunization not carried out because of immune compromised state of patient -Z2804 Immunization not carried out because of patient allergy to vaccine or component -Z2809 Immunization not carried out because of other contraindication -Z281 Immunization not carried out because of patient decision for reasons of belief or group pressure -Z2820 Immunization not carried out because of patient decision for unspecified reason -Z2821 Immunization not carried out because of patient refusal -Z2829 Immunization not carried out because of patient decision for other reason -Z283 Underimmunization status -Z2881 Immunization not carried out due to patient having had the disease -Z2882 Immunization not carried out because of caregiver refusal -Z2889 Immunization not carried out for other reason -Z289 Immunization not carried out for unspecified reason -Z2911 Encounter for prophylactic immunotherapy for respiratory syncytial virus (RSV) -Z2912 Encounter for prophylactic antivenin -Z2913 Encounter for prophylactic Rho(D) immune globulin -Z2914 Encounter for prophylactic rabies immune globin -Z293 Encounter for prophylactic fluoride administration -Z298 Encounter for other specified prophylactic measures -Z299 Encounter for prophylactic measures, unspecified -Z30011 Encounter for initial prescription of contraceptive pills -Z30012 Encounter for prescription of emergency contraception -Z30013 Encounter for initial prescription of injectable contraceptive -Z30014 Encounter for initial prescription of intrauterine contraceptive device -Z30015 Encounter for initial prescription of vaginal ring hormonal contraceptive -Z30016 Encounter for initial prescription of transdermal patch hormonal contraceptive device -Z30017 Encounter for initial prescription of implantable subdermal contraceptive -Z30018 Encounter for initial prescription of other contraceptives -Z30019 Encounter for initial prescription of contraceptives, unspecified -Z3002 Counseling and instruction in natural family planning to avoid pregnancy -Z3009 Encounter for other general counseling and advice on contraception -Z302 Encounter for sterilization -Z3040 Encounter for surveillance of contraceptives, unspecified -Z3041 Encounter for surveillance of contraceptive pills -Z3042 Encounter for surveillance of injectable contraceptive -Z30430 Encounter for insertion of intrauterine contraceptive device -Z30431 Encounter for routine checking of intrauterine contraceptive device -Z30432 Encounter for removal of intrauterine contraceptive device -Z30433 Encounter for removal and reinsertion of intrauterine contraceptive device -Z3044 Encounter for surveillance of vaginal ring hormonal contraceptive device -Z3045 Encounter for surveillance of transdermal patch hormonal contraceptive device -Z3046 Encounter for surveillance of implantable subdermal contraceptive -Z3049 Encounter for surveillance of other contraceptives -Z308 Encounter for other contraceptive management -Z309 Encounter for contraceptive management, unspecified -Z310 Encounter for reversal of previous sterilization -Z3141 Encounter for fertility testing -Z3142 Aftercare following sterilization reversal -Z31430 Encounter of female for testing for genetic disease carrier status for procreative management -Z31438 Encounter for other genetic testing of female for procreative management -Z31440 Encounter of male for testing for genetic disease carrier status for procreative management -Z31441 Encounter for testing of male partner of patient with recurrent pregnancy loss -Z31448 Encounter for other genetic testing of male for procreative management -Z3149 Encounter for other procreative investigation and testing -Z315 Encounter for genetic counseling -Z3161 Procreative counseling and advice using natural family planning -Z3162 Encounter for fertility preservation counseling -Z3169 Encounter for other general counseling and advice on procreation -Z317 Encounter for procreative management and counseling for gestational carrier -Z3181 Encounter for male factor infertility in female patient -Z3182 Encounter for Rh incompatibility status -Z3183 Encounter for assisted reproductive fertility procedure cycle -Z3184 Encounter for fertility preservation procedure -Z3189 Encounter for other procreative management -Z319 Encounter for procreative management, unspecified -Z3200 Encounter for pregnancy test, result unknown -Z3201 Encounter for pregnancy test, result positive -Z3202 Encounter for pregnancy test, result negative -Z322 Encounter for childbirth instruction -Z323 Encounter for childcare instruction -Z331 Pregnant state, incidental -Z332 Encounter for elective termination of pregnancy -Z333 Pregnant state, gestational carrier -Z3400 Encounter for supervision of normal first pregnancy, unspecified trimester -Z3401 Encounter for supervision of normal first pregnancy, first trimester -Z3402 Encounter for supervision of normal first pregnancy, second trimester -Z3403 Encounter for supervision of normal first pregnancy, third trimester -Z3480 Encounter for supervision of other normal pregnancy, unspecified trimester -Z3481 Encounter for supervision of other normal pregnancy, first trimester -Z3482 Encounter for supervision of other normal pregnancy, second trimester -Z3483 Encounter for supervision of other normal pregnancy, third trimester -Z3490 Encounter for supervision of normal pregnancy, unspecified, unspecified trimester -Z3491 Encounter for supervision of normal pregnancy, unspecified, first trimester -Z3492 Encounter for supervision of normal pregnancy, unspecified, second trimester -Z3493 Encounter for supervision of normal pregnancy, unspecified, third trimester -Z36 Encounter for antenatal screening of mother -Z3A00 Weeks of gestation of pregnancy not specified -Z3A01 Less than 8 weeks gestation of pregnancy -Z3A08 8 weeks gestation of pregnancy -Z3A09 9 weeks gestation of pregnancy -Z3A10 10 weeks gestation of pregnancy -Z3A11 11 weeks gestation of pregnancy -Z3A12 12 weeks gestation of pregnancy -Z3A13 13 weeks gestation of pregnancy -Z3A14 14 weeks gestation of pregnancy -Z3A15 15 weeks gestation of pregnancy -Z3A16 16 weeks gestation of pregnancy -Z3A17 17 weeks gestation of pregnancy -Z3A18 18 weeks gestation of pregnancy -Z3A19 19 weeks gestation of pregnancy -Z3A20 20 weeks gestation of pregnancy -Z3A21 21 weeks gestation of pregnancy -Z3A22 22 weeks gestation of pregnancy -Z3A23 23 weeks gestation of pregnancy -Z3A24 24 weeks gestation of pregnancy -Z3A25 25 weeks gestation of pregnancy -Z3A26 26 weeks gestation of pregnancy -Z3A27 27 weeks gestation of pregnancy -Z3A28 28 weeks gestation of pregnancy -Z3A29 29 weeks gestation of pregnancy -Z3A30 30 weeks gestation of pregnancy -Z3A31 31 weeks gestation of pregnancy -Z3A32 32 weeks gestation of pregnancy -Z3A33 33 weeks gestation of pregnancy -Z3A34 34 weeks gestation of pregnancy -Z3A35 35 weeks gestation of pregnancy -Z3A36 36 weeks gestation of pregnancy -Z3A37 37 weeks gestation of pregnancy -Z3A38 38 weeks gestation of pregnancy -Z3A39 39 weeks gestation of pregnancy -Z3A40 40 weeks gestation of pregnancy -Z3A41 41 weeks gestation of pregnancy -Z3A42 42 weeks gestation of pregnancy -Z3A49 Greater than 42 weeks gestation of pregnancy -Z370 Single live birth -Z371 Single stillbirth -Z372 Twins, both liveborn -Z373 Twins, one liveborn and one stillborn -Z374 Twins, both stillborn -Z3750 Multiple births, unspecified, all liveborn -Z3751 Triplets, all liveborn -Z3752 Quadruplets, all liveborn -Z3753 Quintuplets, all liveborn -Z3754 Sextuplets, all liveborn -Z3759 Other multiple births, all liveborn -Z3760 Multiple births, unspecified, some liveborn -Z3761 Triplets, some liveborn -Z3762 Quadruplets, some liveborn -Z3763 Quintuplets, some liveborn -Z3764 Sextuplets, some liveborn -Z3769 Other multiple births, some liveborn -Z377 Other multiple births, all stillborn -Z379 Outcome of delivery, unspecified -Z3800 Single liveborn infant, delivered vaginally -Z3801 Single liveborn infant, delivered by cesarean -Z381 Single liveborn infant, born outside hospital -Z382 Single liveborn infant, unspecified as to place of birth -Z3830 Twin liveborn infant, delivered vaginally -Z3831 Twin liveborn infant, delivered by cesarean -Z384 Twin liveborn infant, born outside hospital -Z385 Twin liveborn infant, unspecified as to place of birth -Z3861 Triplet liveborn infant, delivered vaginally -Z3862 Triplet liveborn infant, delivered by cesarean -Z3863 Quadruplet liveborn infant, delivered vaginally -Z3864 Quadruplet liveborn infant, delivered by cesarean -Z3865 Quintuplet liveborn infant, delivered vaginally -Z3866 Quintuplet liveborn infant, delivered by cesarean -Z3868 Other multiple liveborn infant, delivered vaginally -Z3869 Other multiple liveborn infant, delivered by cesarean -Z387 Other multiple liveborn infant, born outside hospital -Z388 Other multiple liveborn infant, unspecified as to place of birth -Z390 Encounter for care and examination of mother immediately after delivery -Z391 Encounter for care and examination of lactating mother -Z392 Encounter for routine postpartum follow-up -Z4000 Encounter for prophylactic removal of unspecified organ -Z4001 Encounter for prophylactic removal of breast -Z4002 Encounter for prophylactic removal of ovary -Z4009 Encounter for prophylactic removal of other organ -Z408 Encounter for other prophylactic surgery -Z409 Encounter for prophylactic surgery, unspecified -Z411 Encounter for cosmetic surgery -Z412 Encounter for routine and ritual male circumcision -Z413 Encounter for ear piercing -Z418 Encounter for other procedures for purposes other than remedying health state -Z419 Encounter for procedure for purposes other than remedying health state, unspecified -Z421 Encounter for breast reconstruction following mastectomy -Z428 Encounter for other plastic and reconstructive surgery following medical procedure or healed injury -Z430 Encounter for attention to tracheostomy -Z431 Encounter for attention to gastrostomy -Z432 Encounter for attention to ileostomy -Z433 Encounter for attention to colostomy -Z434 Encounter for attention to other artificial openings of digestive tract -Z435 Encounter for attention to cystostomy -Z436 Encounter for attention to other artificial openings of urinary tract -Z437 Encounter for attention to artificial vagina -Z438 Encounter for attention to other artificial openings -Z439 Encounter for attention to unspecified artificial opening -Z44001 Encounter for fitting and adjustment of unspecified right artificial arm -Z44002 Encounter for fitting and adjustment of unspecified left artificial arm -Z44009 Encounter for fitting and adjustment of unspecified artificial arm, unspecified arm -Z44011 Encounter for fitting and adjustment of complete right artificial arm -Z44012 Encounter for fitting and adjustment of complete left artificial arm -Z44019 Encounter for fitting and adjustment of complete artificial arm, unspecified arm -Z44021 Encounter for fitting and adjustment of partial artificial right arm -Z44022 Encounter for fitting and adjustment of partial artificial left arm -Z44029 Encounter for fitting and adjustment of partial artificial arm, unspecified arm -Z44101 Encounter for fitting and adjustment of unspecified right artificial leg -Z44102 Encounter for fitting and adjustment of unspecified left artificial leg -Z44109 Encounter for fitting and adjustment of unspecified artificial leg, unspecified leg -Z44111 Encounter for fitting and adjustment of complete right artificial leg -Z44112 Encounter for fitting and adjustment of complete left artificial leg -Z44119 Encounter for fitting and adjustment of complete artificial leg, unspecified leg -Z44121 Encounter for fitting and adjustment of partial artificial right leg -Z44122 Encounter for fitting and adjustment of partial artificial left leg -Z44129 Encounter for fitting and adjustment of partial artificial leg, unspecified leg -Z4420 Encounter for fitting and adjustment of artificial eye, unspecified -Z4421 Encounter for fitting and adjustment of artificial right eye -Z4422 Encounter for fitting and adjustment of artificial left eye -Z4430 Encounter for fitting and adjustment of external breast prosthesis, unspecified breast -Z4431 Encounter for fitting and adjustment of external right breast prosthesis -Z4432 Encounter for fitting and adjustment of external left breast prosthesis -Z448 Encounter for fitting and adjustment of other external prosthetic devices -Z449 Encounter for fitting and adjustment of unspecified external prosthetic device -Z45010 Encounter for checking and testing of cardiac pacemaker pulse generator [battery] -Z45018 Encounter for adjustment and management of other part of cardiac pacemaker -Z4502 Encounter for adjustment and management of automatic implantable cardiac defibrillator -Z4509 Encounter for adjustment and management of other cardiac device -Z451 Encounter for adjustment and management of infusion pump -Z452 Encounter for adjustment and management of vascular access device -Z4531 Encounter for adjustment and management of implanted visual substitution device -Z45320 Encounter for adjustment and management of bone conduction device -Z45321 Encounter for adjustment and management of cochlear device -Z45328 Encounter for adjustment and management of other implanted hearing device -Z4541 Encounter for adjustment and management of cerebrospinal fluid drainage device -Z4542 Encounter for adjustment and management of neuropacemaker (brain) (peripheral nerve) (spinal cord) -Z4549 Encounter for adjustment and management of other implanted nervous system device -Z45811 Encounter for adjustment or removal of right breast implant -Z45812 Encounter for adjustment or removal of left breast implant -Z45819 Encounter for adjustment or removal of unspecified breast implant -Z4582 Encounter for adjustment or removal of myringotomy device (stent) (tube) -Z4589 Encounter for adjustment and management of other implanted devices -Z459 Encounter for adjustment and management of unspecified implanted device -Z460 Encounter for fitting and adjustment of spectacles and contact lenses -Z461 Encounter for fitting and adjustment of hearing aid -Z462 Encounter for fitting and adjustment of other devices related to nervous system and special senses -Z463 Encounter for fitting and adjustment of dental prosthetic device -Z464 Encounter for fitting and adjustment of orthodontic device -Z4651 Encounter for fitting and adjustment of gastric lap band -Z4659 Encounter for fitting and adjustment of other gastrointestinal appliance and device -Z466 Encounter for fitting and adjustment of urinary device -Z4681 Encounter for fitting and adjustment of insulin pump -Z4682 Encounter for fitting and adjustment of non-vascular catheter -Z4689 Encounter for fitting and adjustment of other specified devices -Z469 Encounter for fitting and adjustment of unspecified device -Z471 Aftercare following joint replacement surgery -Z472 Encounter for removal of internal fixation device -Z4731 Aftercare following explantation of shoulder joint prosthesis -Z4732 Aftercare following explantation of hip joint prosthesis -Z4733 Aftercare following explantation of knee joint prosthesis -Z4781 Encounter for orthopedic aftercare following surgical amputation -Z4782 Encounter for orthopedic aftercare following scoliosis surgery -Z4789 Encounter for other orthopedic aftercare -Z4800 Encounter for change or removal of nonsurgical wound dressing -Z4801 Encounter for change or removal of surgical wound dressing -Z4802 Encounter for removal of sutures -Z4803 Encounter for change or removal of drains -Z481 Encounter for planned postprocedural wound closure -Z4821 Encounter for aftercare following heart transplant -Z4822 Encounter for aftercare following kidney transplant -Z4823 Encounter for aftercare following liver transplant -Z4824 Encounter for aftercare following lung transplant -Z48280 Encounter for aftercare following heart-lung transplant -Z48288 Encounter for aftercare following multiple organ transplant -Z48290 Encounter for aftercare following bone marrow transplant -Z48298 Encounter for aftercare following other organ transplant -Z483 Aftercare following surgery for neoplasm -Z48810 Encounter for surgical aftercare following surgery on the sense organs -Z48811 Encounter for surgical aftercare following surgery on the nervous system -Z48812 Encounter for surgical aftercare following surgery on the circulatory system -Z48813 Encounter for surgical aftercare following surgery on the respiratory system -Z48814 Encounter for surgical aftercare following surgery on the teeth or oral cavity -Z48815 Encounter for surgical aftercare following surgery on the digestive system -Z48816 Encounter for surgical aftercare following surgery on the genitourinary system -Z48817 Encounter for surgical aftercare following surgery on the skin and subcutaneous tissue -Z4889 Encounter for other specified surgical aftercare -Z4901 Encounter for fitting and adjustment of extracorporeal dialysis catheter -Z4902 Encounter for fitting and adjustment of peritoneal dialysis catheter -Z4931 Encounter for adequacy testing for hemodialysis -Z4932 Encounter for adequacy testing for peritoneal dialysis -Z510 Encounter for antineoplastic radiation therapy -Z5111 Encounter for antineoplastic chemotherapy -Z5112 Encounter for antineoplastic immunotherapy -Z515 Encounter for palliative care -Z516 Encounter for desensitization to allergens -Z5181 Encounter for therapeutic drug level monitoring -Z5189 Encounter for other specified aftercare -Z52000 Unspecified donor, whole blood -Z52001 Unspecified donor, stem cells -Z52008 Unspecified donor, other blood -Z52010 Autologous donor, whole blood -Z52011 Autologous donor, stem cells -Z52018 Autologous donor, other blood -Z52090 Other blood donor, whole blood -Z52091 Other blood donor, stem cells -Z52098 Other blood donor, other blood -Z5210 Skin donor, unspecified -Z5211 Skin donor, autologous -Z5219 Skin donor, other -Z5220 Bone donor, unspecified -Z5221 Bone donor, autologous -Z5229 Bone donor, other -Z523 Bone marrow donor -Z524 Kidney donor -Z525 Cornea donor -Z526 Liver donor -Z52810 Egg (Oocyte) donor under age 35, anonymous recipient -Z52811 Egg (Oocyte) donor under age 35, designated recipient -Z52812 Egg (Oocyte) donor age 35 and over, anonymous recipient -Z52813 Egg (Oocyte) donor age 35 and over, designated recipient -Z52819 Egg (Oocyte) donor, unspecified -Z5289 Donor of other specified organs or tissues -Z529 Donor of unspecified organ or tissue -Z5301 Procedure and treatment not carried out due to patient smoking -Z5309 Procedure and treatment not carried out because of other contraindication -Z531 Procedure and treatment not carried out because of patient's decision for reasons of belief and group pressure -Z5320 Procedure and treatment not carried out because of patient's decision for unspecified reasons -Z5321 Procedure and treatment not carried out due to patient leaving prior to being seen by health care provider -Z5329 Procedure and treatment not carried out because of patient's decision for other reasons -Z5331 Laparoscopic surgical procedure converted to open procedure -Z5332 Thoracoscopic surgical procedure converted to open procedure -Z5333 Arthroscopic surgical procedure converted to open procedure -Z5339 Other specified procedure converted to open procedure -Z538 Procedure and treatment not carried out for other reasons -Z539 Procedure and treatment not carried out, unspecified reason -Z550 Illiteracy and low-level literacy -Z551 Schooling unavailable and unattainable -Z552 Failed school examinations -Z553 Underachievement in school -Z554 Educational maladjustment and discord with teachers and classmates -Z558 Other problems related to education and literacy -Z559 Problems related to education and literacy, unspecified -Z560 Unemployment, unspecified -Z561 Change of job -Z562 Threat of job loss -Z563 Stressful work schedule -Z564 Discord with boss and workmates -Z565 Uncongenial work environment -Z566 Other physical and mental strain related to work -Z5681 Sexual harassment on the job -Z5682 Military deployment status -Z5689 Other problems related to employment -Z569 Unspecified problems related to employment -Z570 Occupational exposure to noise -Z571 Occupational exposure to radiation -Z572 Occupational exposure to dust -Z5731 Occupational exposure to environmental tobacco smoke -Z5739 Occupational exposure to other air contaminants -Z574 Occupational exposure to toxic agents in agriculture -Z575 Occupational exposure to toxic agents in other industries -Z576 Occupational exposure to extreme temperature -Z577 Occupational exposure to vibration -Z578 Occupational exposure to other risk factors -Z579 Occupational exposure to unspecified risk factor -Z590 Homelessness -Z591 Inadequate housing -Z592 Discord with neighbors, lodgers and landlord -Z593 Problems related to living in residential institution -Z594 Lack of adequate food and safe drinking water -Z595 Extreme poverty -Z596 Low income -Z597 Insufficient social insurance and welfare support -Z598 Other problems related to housing and economic circumstances -Z599 Problem related to housing and economic circumstances, unspecified -Z600 Problems of adjustment to life-cycle transitions -Z602 Problems related to living alone -Z603 Acculturation difficulty -Z604 Social exclusion and rejection -Z605 Target of (perceived) adverse discrimination and persecution -Z608 Other problems related to social environment -Z609 Problem related to social environment, unspecified -Z620 Inadequate parental supervision and control -Z621 Parental overprotection -Z6221 Child in welfare custody -Z6222 Institutional upbringing -Z6229 Other upbringing away from parents -Z623 Hostility towards and scapegoating of child -Z626 Inappropriate (excessive) parental pressure -Z62810 Personal history of physical and sexual abuse in childhood -Z62811 Personal history of psychological abuse in childhood -Z62812 Personal history of neglect in childhood -Z62819 Personal history of unspecified abuse in childhood -Z62820 Parent-biological child conflict -Z62821 Parent-adopted child conflict -Z62822 Parent-foster child conflict -Z62890 Parent-child estrangement NEC -Z62891 Sibling rivalry -Z62898 Other specified problems related to upbringing -Z629 Problem related to upbringing, unspecified -Z630 Problems in relationship with spouse or partner -Z631 Problems in relationship with in-laws -Z6331 Absence of family member due to military deployment -Z6332 Other absence of family member -Z634 Disappearance and death of family member -Z635 Disruption of family by separation and divorce -Z636 Dependent relative needing care at home -Z6371 Stress on family due to return of family member from military deployment -Z6372 Alcoholism and drug addiction in family -Z6379 Other stressful life events affecting family and household -Z638 Other specified problems related to primary support group -Z639 Problem related to primary support group, unspecified -Z640 Problems related to unwanted pregnancy -Z641 Problems related to multiparity -Z644 Discord with counselors -Z650 Conviction in civil and criminal proceedings without imprisonment -Z651 Imprisonment and other incarceration -Z652 Problems related to release from prison -Z653 Problems related to other legal circumstances -Z654 Victim of crime and terrorism -Z655 Exposure to disaster, war and other hostilities -Z658 Other specified problems related to psychosocial circumstances -Z659 Problem related to unspecified psychosocial circumstances -Z66 Do not resuscitate -Z6710 Type A blood, Rh positive -Z6711 Type A blood, Rh negative -Z6720 Type B blood, Rh positive -Z6721 Type B blood, Rh negative -Z6730 Type AB blood, Rh positive -Z6731 Type AB blood, Rh negative -Z6740 Type O blood, Rh positive -Z6741 Type O blood, Rh negative -Z6790 Unspecified blood type, Rh positive -Z6791 Unspecified blood type, Rh negative -Z681 Body mass index (BMI) 19 or less, adult -Z6820 Body mass index (BMI) 20.0-20.9, adult -Z6821 Body mass index (BMI) 21.0-21.9, adult -Z6822 Body mass index (BMI) 22.0-22.9, adult -Z6823 Body mass index (BMI) 23.0-23.9, adult -Z6824 Body mass index (BMI) 24.0-24.9, adult -Z6825 Body mass index (BMI) 25.0-25.9, adult -Z6826 Body mass index (BMI) 26.0-26.9, adult -Z6827 Body mass index (BMI) 27.0-27.9, adult -Z6828 Body mass index (BMI) 28.0-28.9, adult -Z6829 Body mass index (BMI) 29.0-29.9, adult -Z6830 Body mass index (BMI) 30.0-30.9, adult -Z6831 Body mass index (BMI) 31.0-31.9, adult -Z6832 Body mass index (BMI) 32.0-32.9, adult -Z6833 Body mass index (BMI) 33.0-33.9, adult -Z6834 Body mass index (BMI) 34.0-34.9, adult -Z6835 Body mass index (BMI) 35.0-35.9, adult -Z6836 Body mass index (BMI) 36.0-36.9, adult -Z6837 Body mass index (BMI) 37.0-37.9, adult -Z6838 Body mass index (BMI) 38.0-38.9, adult -Z6839 Body mass index (BMI) 39.0-39.9, adult -Z6841 Body mass index (BMI) 40.0-44.9, adult -Z6842 Body mass index (BMI) 45.0-49.9, adult -Z6843 Body mass index (BMI) 50-59.9 , adult -Z6844 Body mass index (BMI) 60.0-69.9, adult -Z6845 Body mass index (BMI) 70 or greater, adult -Z6851 Body mass index (BMI) pediatric, less than 5th percentile for age -Z6852 Body mass index (BMI) pediatric, 5th percentile to less than 85th percentile for age -Z6853 Body mass index (BMI) pediatric, 85th percentile to less than 95th percentile for age -Z6854 Body mass index (BMI) pediatric, greater than or equal to 95th percentile for age -Z69010 Encounter for mental health services for victim of parental child abuse -Z69011 Encounter for mental health services for perpetrator of parental child abuse -Z69020 Encounter for mental health services for victim of non-parental child abuse -Z69021 Encounter for mental health services for perpetrator of non-parental child abuse -Z6911 Encounter for mental health services for victim of spousal or partner abuse -Z6912 Encounter for mental health services for perpetrator of spousal or partner abuse -Z6981 Encounter for mental health services for victim of other abuse -Z6982 Encounter for mental health services for perpetrator of other abuse -Z700 Counseling related to sexual attitude -Z701 Counseling related to patient's sexual behavior and orientation -Z702 Counseling related to sexual behavior and orientation of third party -Z703 Counseling related to combined concerns regarding sexual attitude, behavior and orientation -Z708 Other sex counseling -Z709 Sex counseling, unspecified -Z710 Person encountering health services to consult on behalf of another person -Z711 Person with feared health complaint in whom no diagnosis is made -Z712 Person consulting for explanation of examination or test findings -Z713 Dietary counseling and surveillance -Z7141 Alcohol abuse counseling and surveillance of alcoholic -Z7142 Counseling for family member of alcoholic -Z7151 Drug abuse counseling and surveillance of drug abuser -Z7152 Counseling for family member of drug abuser -Z716 Tobacco abuse counseling -Z717 Human immunodeficiency virus [HIV] counseling -Z7181 Spiritual or religious counseling -Z7189 Other specified counseling -Z719 Counseling, unspecified -Z720 Tobacco use -Z723 Lack of physical exercise -Z724 Inappropriate diet and eating habits -Z7251 High risk heterosexual behavior -Z7252 High risk homosexual behavior -Z7253 High risk bisexual behavior -Z726 Gambling and betting -Z72810 Child and adolescent antisocial behavior -Z72811 Adult antisocial behavior -Z72820 Sleep deprivation -Z72821 Inadequate sleep hygiene -Z7289 Other problems related to lifestyle -Z729 Problem related to lifestyle, unspecified -Z730 Burn-out -Z731 Type A behavior pattern -Z732 Lack of relaxation and leisure -Z733 Stress, not elsewhere classified -Z734 Inadequate social skills, not elsewhere classified -Z735 Social role conflict, not elsewhere classified -Z736 Limitation of activities due to disability -Z73810 Behavioral insomnia of childhood, sleep-onset association type -Z73811 Behavioral insomnia of childhood, limit setting type -Z73812 Behavioral insomnia of childhood, combined type -Z73819 Behavioral insomnia of childhood, unspecified type -Z7382 Dual sensory impairment -Z7389 Other problems related to life management difficulty -Z739 Problem related to life management difficulty, unspecified -Z7401 Bed confinement status -Z7409 Other reduced mobility -Z741 Need for assistance with personal care -Z742 Need for assistance at home and no other household member able to render care -Z743 Need for continuous supervision -Z748 Other problems related to care provider dependency -Z749 Problem related to care provider dependency, unspecified -Z750 Medical services not available in home -Z751 Person awaiting admission to adequate facility elsewhere -Z752 Other waiting period for investigation and treatment -Z753 Unavailability and inaccessibility of health-care facilities -Z754 Unavailability and inaccessibility of other helping agencies -Z755 Holiday relief care -Z758 Other problems related to medical facilities and other health care -Z759 Unspecified problem related to medical facilities and other health care -Z760 Encounter for issue of repeat prescription -Z761 Encounter for health supervision and care of foundling -Z762 Encounter for health supervision and care of other healthy infant and child -Z763 Healthy person accompanying sick person -Z764 Other boarder to healthcare facility -Z765 Malingerer [conscious simulation] -Z7681 Expectant parent(s) prebirth pediatrician visit -Z7682 Awaiting organ transplant status -Z7689 Persons encountering health services in other specified circumstances -Z77010 Contact with and (suspected) exposure to arsenic -Z77011 Contact with and (suspected) exposure to lead -Z77012 Contact with and (suspected) exposure to uranium -Z77018 Contact with and (suspected) exposure to other hazardous metals -Z77020 Contact with and (suspected) exposure to aromatic amines -Z77021 Contact with and (suspected) exposure to benzene -Z77028 Contact with and (suspected) exposure to other hazardous aromatic compounds -Z77090 Contact with and (suspected) exposure to asbestos -Z77098 Contact with and (suspected) exposure to other hazardous, chiefly nonmedicinal, chemicals -Z77110 Contact with and (suspected) exposure to air pollution -Z77111 Contact with and (suspected) exposure to water pollution -Z77112 Contact with and (suspected) exposure to soil pollution -Z77118 Contact with and (suspected) exposure to other environmental pollution -Z77120 Contact with and (suspected) exposure to mold (toxic) -Z77121 Contact with and (suspected) exposure to harmful algae and algae toxins -Z77122 Contact with and (suspected) exposure to noise -Z77123 Contact with and (suspected) exposure to radon and other naturally occuring radiation -Z77128 Contact with and (suspected) exposure to other hazards in the physical environment -Z7721 Contact with and (suspected) exposure to potentially hazardous body fluids -Z7722 Contact with and (suspected) exposure to environmental tobacco smoke (acute) (chronic) -Z7729 Contact with and (suspected ) exposure to other hazardous substances -Z779 Other contact with and (suspected) exposures hazardous to health -Z780 Asymptomatic menopausal state -Z781 Physical restraint status -Z789 Other specified health status -Z7901 Long term (current) use of anticoagulants -Z7902 Long term (current) use of antithrombotics/antiplatelets -Z791 Long term (current) use of non-steroidal anti-inflammatories (NSAID) -Z792 Long term (current) use of antibiotics -Z793 Long term (current) use of hormonal contraceptives -Z794 Long term (current) use of insulin -Z7951 Long term (current) use of inhaled steroids -Z7952 Long term (current) use of systemic steroids -Z79810 Long term (current) use of selective estrogen receptor modulators (SERMs) -Z79811 Long term (current) use of aromatase inhibitors -Z79818 Long term (current) use of other agents affecting estrogen receptors and estrogen levels -Z7982 Long term (current) use of aspirin -Z7983 Long term (current) use of bisphosphonates -Z7984 Long term (current) use of oral hypoglycemic drugs -Z79890 Hormone replacement therapy (postmenopausal) -Z79891 Long term (current) use of opiate analgesic -Z79899 Other long term (current) drug therapy -Z800 Family history of malignant neoplasm of digestive organs -Z801 Family history of malignant neoplasm of trachea, bronchus and lung -Z802 Family history of malignant neoplasm of other respiratory and intrathoracic organs -Z803 Family history of malignant neoplasm of breast -Z8041 Family history of malignant neoplasm of ovary -Z8042 Family history of malignant neoplasm of prostate -Z8043 Family history of malignant neoplasm of testis -Z8049 Family history of malignant neoplasm of other genital organs -Z8051 Family history of malignant neoplasm of kidney -Z8052 Family history of malignant neoplasm of bladder -Z8059 Family history of malignant neoplasm of other urinary tract organ -Z806 Family history of leukemia -Z807 Family history of other malignant neoplasms of lymphoid, hematopoietic and related tissues -Z808 Family history of malignant neoplasm of other organs or systems -Z809 Family history of malignant neoplasm, unspecified -Z810 Family history of intellectual disabilities -Z811 Family history of alcohol abuse and dependence -Z812 Family history of tobacco abuse and dependence -Z813 Family history of other psychoactive substance abuse and dependence -Z814 Family history of other substance abuse and dependence -Z818 Family history of other mental and behavioral disorders -Z820 Family history of epilepsy and other diseases of the nervous system -Z821 Family history of blindness and visual loss -Z822 Family history of deafness and hearing loss -Z823 Family history of stroke -Z8241 Family history of sudden cardiac death -Z8249 Family history of ischemic heart disease and other diseases of the circulatory system -Z825 Family history of asthma and other chronic lower respiratory diseases -Z8261 Family history of arthritis -Z8262 Family history of osteoporosis -Z8269 Family history of other diseases of the musculoskeletal system and connective tissue -Z8271 Family history of polycystic kidney -Z8279 Family history of other congenital malformations, deformations and chromosomal abnormalities -Z828 Family history of other disabilities and chronic diseases leading to disablement, not elsewhere classified -Z830 Family history of human immunodeficiency virus [HIV] disease -Z831 Family history of other infectious and parasitic diseases -Z832 Family history of diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism -Z833 Family history of diabetes mellitus -Z8341 Family history of multiple endocrine neoplasia [MEN] syndrome -Z8342 Family history of familial hypercholesterolemia -Z8349 Family history of other endocrine, nutritional and metabolic diseases -Z83511 Family history of glaucoma -Z83518 Family history of other specified eye disorder -Z8352 Family history of ear disorders -Z836 Family history of other diseases of the respiratory system -Z8371 Family history of colonic polyps -Z8379 Family history of other diseases of the digestive system -Z840 Family history of diseases of the skin and subcutaneous tissue -Z841 Family history of disorders of kidney and ureter -Z842 Family history of other diseases of the genitourinary system -Z843 Family history of consanguinity -Z8481 Family history of carrier of genetic disease -Z8482 Family history of sudden infant death syndrome -Z8489 Family history of other specified conditions -Z8500 Personal history of malignant neoplasm of unspecified digestive organ -Z8501 Personal history of malignant neoplasm of esophagus -Z85020 Personal history of malignant carcinoid tumor of stomach -Z85028 Personal history of other malignant neoplasm of stomach -Z85030 Personal history of malignant carcinoid tumor of large intestine -Z85038 Personal history of other malignant neoplasm of large intestine -Z85040 Personal history of malignant carcinoid tumor of rectum -Z85048 Personal history of other malignant neoplasm of rectum, rectosigmoid junction, and anus -Z8505 Personal history of malignant neoplasm of liver -Z85060 Personal history of malignant carcinoid tumor of small intestine -Z85068 Personal history of other malignant neoplasm of small intestine -Z8507 Personal history of malignant neoplasm of pancreas -Z8509 Personal history of malignant neoplasm of other digestive organs -Z85110 Personal history of malignant carcinoid tumor of bronchus and lung -Z85118 Personal history of other malignant neoplasm of bronchus and lung -Z8512 Personal history of malignant neoplasm of trachea -Z8520 Personal history of malignant neoplasm of unspecified respiratory organ -Z8521 Personal history of malignant neoplasm of larynx -Z8522 Personal history of malignant neoplasm of nasal cavities, middle ear, and accessory sinuses -Z85230 Personal history of malignant carcinoid tumor of thymus -Z85238 Personal history of other malignant neoplasm of thymus -Z8529 Personal history of malignant neoplasm of other respiratory and intrathoracic organs -Z853 Personal history of malignant neoplasm of breast -Z8540 Personal history of malignant neoplasm of unspecified female genital organ -Z8541 Personal history of malignant neoplasm of cervix uteri -Z8542 Personal history of malignant neoplasm of other parts of uterus -Z8543 Personal history of malignant neoplasm of ovary -Z8544 Personal history of malignant neoplasm of other female genital organs -Z8545 Personal history of malignant neoplasm of unspecified male genital organ -Z8546 Personal history of malignant neoplasm of prostate -Z8547 Personal history of malignant neoplasm of testis -Z8548 Personal history of malignant neoplasm of epididymis -Z8549 Personal history of malignant neoplasm of other male genital organs -Z8550 Personal history of malignant neoplasm of unspecified urinary tract organ -Z8551 Personal history of malignant neoplasm of bladder -Z85520 Personal history of malignant carcinoid tumor of kidney -Z85528 Personal history of other malignant neoplasm of kidney -Z8553 Personal history of malignant neoplasm of renal pelvis -Z8554 Personal history of malignant neoplasm of ureter -Z8559 Personal history of malignant neoplasm of other urinary tract organ -Z856 Personal history of leukemia -Z8571 Personal history of Hodgkin lymphoma -Z8572 Personal history of non-Hodgkin lymphomas -Z8579 Personal history of other malignant neoplasms of lymphoid, hematopoietic and related tissues -Z85810 Personal history of malignant neoplasm of tongue -Z85818 Personal history of malignant neoplasm of other sites of lip, oral cavity, and pharynx -Z85819 Personal history of malignant neoplasm of unspecified site of lip, oral cavity, and pharynx -Z85820 Personal history of malignant melanoma of skin -Z85821 Personal history of Merkel cell carcinoma -Z85828 Personal history of other malignant neoplasm of skin -Z85830 Personal history of malignant neoplasm of bone -Z85831 Personal history of malignant neoplasm of soft tissue -Z85840 Personal history of malignant neoplasm of eye -Z85841 Personal history of malignant neoplasm of brain -Z85848 Personal history of malignant neoplasm of other parts of nervous tissue -Z85850 Personal history of malignant neoplasm of thyroid -Z85858 Personal history of malignant neoplasm of other endocrine glands -Z8589 Personal history of malignant neoplasm of other organs and systems -Z859 Personal history of malignant neoplasm, unspecified -Z86000 Personal history of in-situ neoplasm of breast -Z86001 Personal history of in-situ neoplasm of cervix uteri -Z86008 Personal history of in-situ neoplasm of other site -Z86010 Personal history of colonic polyps -Z86011 Personal history of benign neoplasm of the brain -Z86012 Personal history of benign carcinoid tumor -Z86018 Personal history of other benign neoplasm -Z8603 Personal history of neoplasm of uncertain behavior -Z8611 Personal history of tuberculosis -Z8612 Personal history of poliomyelitis -Z8613 Personal history of malaria -Z8614 Personal history of Methicillin resistant Staphylococcus aureus infection -Z8619 Personal history of other infectious and parasitic diseases -Z862 Personal history of diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism -Z8631 Personal history of diabetic foot ulcer -Z8632 Personal history of gestational diabetes -Z8639 Personal history of other endocrine, nutritional and metabolic disease -Z8651 Personal history of combat and operational stress reaction -Z8659 Personal history of other mental and behavioral disorders -Z8661 Personal history of infections of the central nervous system -Z8669 Personal history of other diseases of the nervous system and sense organs -Z86711 Personal history of pulmonary embolism -Z86718 Personal history of other venous thrombosis and embolism -Z8672 Personal history of thrombophlebitis -Z8673 Personal history of transient ischemic attack (TIA), and cerebral infarction without residual deficits -Z8674 Personal history of sudden cardiac arrest -Z8679 Personal history of other diseases of the circulatory system -Z8701 Personal history of pneumonia (recurrent) -Z8709 Personal history of other diseases of the respiratory system -Z8711 Personal history of peptic ulcer disease -Z8719 Personal history of other diseases of the digestive system -Z872 Personal history of diseases of the skin and subcutaneous tissue -Z87310 Personal history of (healed) osteoporosis fracture -Z87311 Personal history of (healed) other pathological fracture -Z87312 Personal history of (healed) stress fracture -Z8739 Personal history of other diseases of the musculoskeletal system and connective tissue -Z87410 Personal history of cervical dysplasia -Z87411 Personal history of vaginal dysplasia -Z87412 Personal history of vulvar dysplasia -Z8742 Personal history of other diseases of the female genital tract -Z87430 Personal history of prostatic dysplasia -Z87438 Personal history of other diseases of male genital organs -Z87440 Personal history of urinary (tract) infections -Z87441 Personal history of nephrotic syndrome -Z87442 Personal history of urinary calculi -Z87448 Personal history of other diseases of urinary system -Z8751 Personal history of pre-term labor -Z8759 Personal history of other complications of pregnancy, childbirth and the puerperium -Z87710 Personal history of (corrected) hypospadias -Z87718 Personal history of other specified (corrected) congenital malformations of genitourinary system -Z87720 Personal history of (corrected) congenital malformations of eye -Z87721 Personal history of (corrected) congenital malformations of ear -Z87728 Personal history of other specified (corrected) congenital malformations of nervous system and sense organs -Z87730 Personal history of (corrected) cleft lip and palate -Z87738 Personal history of other specified (corrected) congenital malformations of digestive system -Z8774 Personal history of (corrected) congenital malformations of heart and circulatory system -Z8775 Personal history of (corrected) congenital malformations of respiratory system -Z8776 Personal history of (corrected) congenital malformations of integument, limbs and musculoskeletal system -Z87790 Personal history of (corrected) congenital malformations of face and neck -Z87798 Personal history of other (corrected) congenital malformations -Z8781 Personal history of (healed) traumatic fracture -Z87820 Personal history of traumatic brain injury -Z87821 Personal history of retained foreign body fully removed -Z87828 Personal history of other (healed) physical injury and trauma -Z87890 Personal history of sex reassignment -Z87891 Personal history of nicotine dependence -Z87892 Personal history of anaphylaxis -Z87898 Personal history of other specified conditions -Z880 Allergy status to penicillin -Z881 Allergy status to other antibiotic agents status -Z882 Allergy status to sulfonamides status -Z883 Allergy status to other anti-infective agents status -Z884 Allergy status to anesthetic agent status -Z885 Allergy status to narcotic agent status -Z886 Allergy status to analgesic agent status -Z887 Allergy status to serum and vaccine status -Z888 Allergy status to other drugs, medicaments and biological substances status -Z889 Allergy status to unspecified drugs, medicaments and biological substances status -Z89011 Acquired absence of right thumb -Z89012 Acquired absence of left thumb -Z89019 Acquired absence of unspecified thumb -Z89021 Acquired absence of right finger(s) -Z89022 Acquired absence of left finger(s) -Z89029 Acquired absence of unspecified finger(s) -Z89111 Acquired absence of right hand -Z89112 Acquired absence of left hand -Z89119 Acquired absence of unspecified hand -Z89121 Acquired absence of right wrist -Z89122 Acquired absence of left wrist -Z89129 Acquired absence of unspecified wrist -Z89201 Acquired absence of right upper limb, unspecified level -Z89202 Acquired absence of left upper limb, unspecified level -Z89209 Acquired absence of unspecified upper limb, unspecified level -Z89211 Acquired absence of right upper limb below elbow -Z89212 Acquired absence of left upper limb below elbow -Z89219 Acquired absence of unspecified upper limb below elbow -Z89221 Acquired absence of right upper limb above elbow -Z89222 Acquired absence of left upper limb above elbow -Z89229 Acquired absence of unspecified upper limb above elbow -Z89231 Acquired absence of right shoulder -Z89232 Acquired absence of left shoulder -Z89239 Acquired absence of unspecified shoulder -Z89411 Acquired absence of right great toe -Z89412 Acquired absence of left great toe -Z89419 Acquired absence of unspecified great toe -Z89421 Acquired absence of other right toe(s) -Z89422 Acquired absence of other left toe(s) -Z89429 Acquired absence of other toe(s), unspecified side -Z89431 Acquired absence of right foot -Z89432 Acquired absence of left foot -Z89439 Acquired absence of unspecified foot -Z89441 Acquired absence of right ankle -Z89442 Acquired absence of left ankle -Z89449 Acquired absence of unspecified ankle -Z89511 Acquired absence of right leg below knee -Z89512 Acquired absence of left leg below knee -Z89519 Acquired absence of unspecified leg below knee -Z89521 Acquired absence of right knee -Z89522 Acquired absence of left knee -Z89529 Acquired absence of unspecified knee -Z89611 Acquired absence of right leg above knee -Z89612 Acquired absence of left leg above knee -Z89619 Acquired absence of unspecified leg above knee -Z89621 Acquired absence of right hip joint -Z89622 Acquired absence of left hip joint -Z89629 Acquired absence of unspecified hip joint -Z899 Acquired absence of limb, unspecified -Z9001 Acquired absence of eye -Z9002 Acquired absence of larynx -Z9009 Acquired absence of other part of head and neck -Z9010 Acquired absence of unspecified breast and nipple -Z9011 Acquired absence of right breast and nipple -Z9012 Acquired absence of left breast and nipple -Z9013 Acquired absence of bilateral breasts and nipples -Z902 Acquired absence of lung [part of] -Z903 Acquired absence of stomach [part of] -Z90410 Acquired total absence of pancreas -Z90411 Acquired partial absence of pancreas -Z9049 Acquired absence of other specified parts of digestive tract -Z905 Acquired absence of kidney -Z906 Acquired absence of other parts of urinary tract -Z90710 Acquired absence of both cervix and uterus -Z90711 Acquired absence of uterus with remaining cervical stump -Z90712 Acquired absence of cervix with remaining uterus -Z90721 Acquired absence of ovaries, unilateral -Z90722 Acquired absence of ovaries, bilateral -Z9079 Acquired absence of other genital organ(s) -Z9081 Acquired absence of spleen -Z9089 Acquired absence of other organs -Z91010 Allergy to peanuts -Z91011 Allergy to milk products -Z91012 Allergy to eggs -Z91013 Allergy to seafood -Z91018 Allergy to other foods -Z9102 Food additives allergy status -Z91030 Bee allergy status -Z91038 Other insect allergy status -Z91040 Latex allergy status -Z91041 Radiographic dye allergy status -Z91048 Other nonmedicinal substance allergy status -Z9109 Other allergy status, other than to drugs and biological substances -Z9111 Patient's noncompliance with dietary regimen -Z91120 Patient's intentional underdosing of medication regimen due to financial hardship -Z91128 Patient's intentional underdosing of medication regimen for other reason -Z91130 Patient's unintentional underdosing of medication regimen due to age-related debility -Z91138 Patient's unintentional underdosing of medication regimen for other reason -Z9114 Patient's other noncompliance with medication regimen -Z9115 Patient's noncompliance with renal dialysis -Z9119 Patient's noncompliance with other medical treatment and regimen -Z91410 Personal history of adult physical and sexual abuse -Z91411 Personal history of adult psychological abuse -Z91412 Personal history of adult neglect -Z91419 Personal history of unspecified adult abuse -Z9149 Other personal history of psychological trauma, not elsewhere classified -Z915 Personal history of self-harm -Z9181 History of falling -Z9182 Personal history of military deployment -Z9183 Wandering in diseases classified elsewhere -Z9189 Other specified personal risk factors, not elsewhere classified -Z920 Personal history of contraception -Z9221 Personal history of antineoplastic chemotherapy -Z9222 Personal history of monoclonal drug therapy -Z9223 Personal history of estrogen therapy -Z92240 Personal history of inhaled steroid therapy -Z92241 Personal history of systemic steroid therapy -Z9225 Personal history of immunosupression therapy -Z9229 Personal history of other drug therapy -Z923 Personal history of irradiation -Z9281 Personal history of extracorporeal membrane oxygenation (ECMO) -Z9282 Status post administration of tPA (rtPA) in a different facility within the last 24 hours prior to admission to current facility -Z9283 Personal history of failed moderate sedation -Z9284 Personal history of unintended awareness under general anesthesia -Z9289 Personal history of other medical treatment -Z930 Tracheostomy status -Z931 Gastrostomy status -Z932 Ileostomy status -Z933 Colostomy status -Z934 Other artificial openings of gastrointestinal tract status -Z9350 Unspecified cystostomy status -Z9351 Cutaneous-vesicostomy status -Z9352 Appendico-vesicostomy status -Z9359 Other cystostomy status -Z936 Other artificial openings of urinary tract status -Z938 Other artificial opening status -Z939 Artificial opening status, unspecified -Z940 Kidney transplant status -Z941 Heart transplant status -Z942 Lung transplant status -Z943 Heart and lungs transplant status -Z944 Liver transplant status -Z945 Skin transplant status -Z946 Bone transplant status -Z947 Corneal transplant status -Z9481 Bone marrow transplant status -Z9482 Intestine transplant status -Z9483 Pancreas transplant status -Z9484 Stem cells transplant status -Z9489 Other transplanted organ and tissue status -Z949 Transplanted organ and tissue status, unspecified -Z950 Presence of cardiac pacemaker -Z951 Presence of aortocoronary bypass graft -Z952 Presence of prosthetic heart valve -Z953 Presence of xenogenic heart valve -Z954 Presence of other heart-valve replacement -Z955 Presence of coronary angioplasty implant and graft -Z95810 Presence of automatic (implantable) cardiac defibrillator -Z95811 Presence of heart assist device -Z95812 Presence of fully implantable artificial heart -Z95818 Presence of other cardiac implants and grafts -Z95820 Peripheral vascular angioplasty status with implants and grafts -Z95828 Presence of other vascular implants and grafts -Z959 Presence of cardiac and vascular implant and graft, unspecified -Z960 Presence of urogenital implants -Z961 Presence of intraocular lens -Z9620 Presence of otological and audiological implant, unspecified -Z9621 Cochlear implant status -Z9622 Myringotomy tube(s) status -Z9629 Presence of other otological and audiological implants -Z963 Presence of artificial larynx -Z9641 Presence of insulin pump (external) (internal) -Z9649 Presence of other endocrine implants -Z965 Presence of tooth-root and mandibular implants -Z9660 Presence of unspecified orthopedic joint implant -Z96611 Presence of right artificial shoulder joint -Z96612 Presence of left artificial shoulder joint -Z96619 Presence of unspecified artificial shoulder joint -Z96621 Presence of right artificial elbow joint -Z96622 Presence of left artificial elbow joint -Z96629 Presence of unspecified artificial elbow joint -Z96631 Presence of right artificial wrist joint -Z96632 Presence of left artificial wrist joint -Z96639 Presence of unspecified artificial wrist joint -Z96641 Presence of right artificial hip joint -Z96642 Presence of left artificial hip joint -Z96643 Presence of artificial hip joint, bilateral -Z96649 Presence of unspecified artificial hip joint -Z96651 Presence of right artificial knee joint -Z96652 Presence of left artificial knee joint -Z96653 Presence of artificial knee joint, bilateral -Z96659 Presence of unspecified artificial knee joint -Z96661 Presence of right artificial ankle joint -Z96662 Presence of left artificial ankle joint -Z96669 Presence of unspecified artificial ankle joint -Z96691 Finger-joint replacement of right hand -Z96692 Finger-joint replacement of left hand -Z96693 Finger-joint replacement, bilateral -Z96698 Presence of other orthopedic joint implants -Z967 Presence of other bone and tendon implants -Z9681 Presence of artificial skin -Z9689 Presence of other specified functional implants -Z969 Presence of functional implant, unspecified -Z970 Presence of artificial eye -Z9710 Presence of artificial limb (complete) (partial), unspecified -Z9711 Presence of artificial right arm (complete) (partial) -Z9712 Presence of artificial left arm (complete) (partial) -Z9713 Presence of artificial right leg (complete) (partial) -Z9714 Presence of artificial left leg (complete) (partial) -Z9715 Presence of artificial arms, bilateral (complete) (partial) -Z9716 Presence of artificial legs, bilateral (complete) (partial) -Z972 Presence of dental prosthetic device (complete) (partial) -Z973 Presence of spectacles and contact lenses -Z974 Presence of external hearing-aid -Z975 Presence of (intrauterine) contraceptive device -Z978 Presence of other specified devices -Z980 Intestinal bypass and anastomosis status -Z981 Arthrodesis status -Z982 Presence of cerebrospinal fluid drainage device -Z983 Post therapeutic collapse of lung status -Z9841 Cataract extraction status, right eye -Z9842 Cataract extraction status, left eye -Z9849 Cataract extraction status, unspecified eye -Z9851 Tubal ligation status -Z9852 Vasectomy status -Z9861 Coronary angioplasty status -Z9862 Peripheral vascular angioplasty status -Z98810 Dental sealant status -Z98811 Dental restoration status -Z98818 Other dental procedure status -Z9882 Breast implant status -Z9883 Filtering (vitreous) bleb after glaucoma surgery status -Z9884 Bariatric surgery status -Z9885 Transplanted organ removal status -Z9886 Personal history of breast implant removal -Z98870 Personal history of in utero procedure during pregnancy -Z98871 Personal history of in utero procedure while a fetus -Z98890 Other specified postprocedural states -Z98891 History of uterine scar from previous surgery -Z990 Dependence on aspirator -Z9911 Dependence on respirator [ventilator] status -Z9912 Encounter for respirator [ventilator] dependence during power failure -Z992 Dependence on renal dialysis -Z993 Dependence on wheelchair -Z9981 Dependence on supplemental oxygen -Z9989 Dependence on other enabling machines and devices diff --git a/wrangler-core/src/main/resources/icd-9_cm_codes.txt b/wrangler-core/src/main/resources/icd-9_cm_codes.txt deleted file mode 100644 index b30604d80..000000000 --- a/wrangler-core/src/main/resources/icd-9_cm_codes.txt +++ /dev/null @@ -1,14567 +0,0 @@ -0010 Cholera due to vibrio cholerae -0011 Cholera due to vibrio cholerae el tor -0019 Cholera, unspecified -0020 Typhoid fever -0021 Paratyphoid fever A -0022 Paratyphoid fever B -0023 Paratyphoid fever C -0029 Paratyphoid fever, unspecified -0030 Salmonella gastroenteritis -0031 Salmonella septicemia -00320 Localized salmonella infection, unspecified -00321 Salmonella meningitis -00322 Salmonella pneumonia -00323 Salmonella arthritis -00324 Salmonella osteomyelitis -00329 Other localized salmonella infections -0038 Other specified salmonella infections -0039 Salmonella infection, unspecified -0040 Shigella dysenteriae -0041 Shigella flexneri -0042 Shigella boydii -0043 Shigella sonnei -0048 Other specified shigella infections -0049 Shigellosis, unspecified -0050 Staphylococcal food poisoning -0051 Botulism food poisoning -0052 Food poisoning due to Clostridium perfringens (C. welchii) -0053 Food poisoning due to other Clostridia -0054 Food poisoning due to Vibrio parahaemolyticus -00581 Food poisoning due to Vibrio vulnificus -00589 Other bacterial food poisoning -0059 Food poisoning, unspecified -0060 Acute amebic dysentery without mention of abscess -0061 Chronic intestinal amebiasis without mention of abscess -0062 Amebic nondysenteric colitis -0063 Amebic liver abscess -0064 Amebic lung abscess -0065 Amebic brain abscess -0066 Amebic skin ulceration -0068 Amebic infection of other sites -0069 Amebiasis, unspecified -0070 Balantidiasis -0071 Giardiasis -0072 Coccidiosis -0073 Intestinal trichomoniasis -0074 Cryptosporidiosis -0075 Cyclosporiasis -0078 Other specified protozoal intestinal diseases -0079 Unspecified protozoal intestinal disease -00800 Intestinal infection due to E. coli, unspecified -00801 Intestinal infection due to enteropathogenic E. coli -00802 Intestinal infection due to enterotoxigenic E. coli -00803 Intestinal infection due to enteroinvasive E. coli -00804 Intestinal infection due to enterohemorrhagic E. coli -00809 Intestinal infection due to other intestinal E. coli infections -0081 Intestinal infection due to arizona group of paracolon bacilli -0082 Intestinal infection due to aerobacter aerogenes -0083 Intestinal infection due to proteus (mirabilis) (morganii) -00841 Intestinal infection due to staphylococcus -00842 Intestinal infection due to pseudomonas -00843 Intestinal infection due to campylobacter -00844 Intestinal infection due to yersinia enterocolitica -00845 Intestinal infection due to Clostridium difficile -00846 Intestinal infection due to other anaerobes -00847 Intestinal infection due to other gram-negative bacteria -00849 Intestinal infection due to other organisms -0085 Bacterial enteritis, unspecified -00861 Enteritis due to rotavirus -00862 Enteritis due to adenovirus -00863 Enteritis due to norwalk virus -00864 Enteritis due to other small round viruses [SRV's] -00865 Enteritis due to calicivirus -00866 Enteritis due to astrovirus -00867 Enteritis due to enterovirus nec -00869 Enteritis due to other viral enteritis -0088 Intestinal infection due to other organism, not elsewhere classified -0090 Infectious colitis, enteritis, and gastroenteritis -0091 Colitis, enteritis, and gastroenteritis of presumed infectious origin -0092 Infectious diarrhea -0093 Diarrhea of presumed infectious origin -01000 Primary tuberculous infection, unspecified -01001 Primary tuberculous infection, bacteriological or histological examination not done -01002 Primary tuberculous infection, bacteriological or histological examination unknown (at present) -01003 Primary tuberculous infection, tubercle bacilli found (in sputum) by microscopy -01004 Primary tuberculous infection, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01005 Primary tuberculous infection, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01006 Primary tuberculous infection, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01010 Tuberculous pleurisy in primary progressive tuberculosis, unspecified -01011 Tuberculous pleurisy in primary progressive tuberculosis, bacteriological or histological examination not done -01012 Tuberculous pleurisy in primary progressive tuberculosis, bacteriological or histological examination unknown (at present) -01013 Tuberculous pleurisy in primary progressive tuberculosis, tubercle bacilli found (in sputum) by microscopy -01014 Tuberculous pleurisy in primary progressive tuberculosis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01015 Tuberculous pleurisy in primary progressive tuberculosis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01016 Tuberculous pleurisy in primary progressive tuberculosis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01080 Other primary progressive tuberculosis, unspecified -01081 Other primary progressive tuberculosis, bacteriological or histological examination not done -01082 Other primary progressive tuberculosis, bacteriological or histological examination unknown (at present) -01083 Other primary progressive tuberculosis, tubercle bacilli found (in sputum) by microscopy -01084 Other primary progressive tuberculosis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01085 Other primary progressive tuberculosis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01086 Other primary progressive tuberculosis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01090 Primary tuberculous infection, unspecified, unspecified -01091 Primary tuberculous infection, unspecified, bacteriological or histological examination not done -01092 Primary tuberculous infection, unspecified, bacteriological or histological examination unknown (at present) -01093 Primary tuberculous infection, unspecified, tubercle bacilli found (in sputum) by microscopy -01094 Primary tuberculous infection, unspecified, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01095 Primary tuberculous infection, unspecified, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01096 Primary tuberculous infection, unspecified, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01100 Tuberculosis of lung, infiltrative, unspecified -01101 Tuberculosis of lung, infiltrative, bacteriological or histological examination not done -01102 Tuberculosis of lung, infiltrative, bacteriological or histological examination unknown (at present) -01103 Tuberculosis of lung, infiltrative, tubercle bacilli found (in sputum) by microscopy -01104 Tuberculosis of lung, infiltrative, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01105 Tuberculosis of lung, infiltrative, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01106 Tuberculosis of lung, infiltrative, tubercle bacilli not found bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01110 Tuberculosis of lung, nodular, unspecified -01111 Tuberculosis of lung, nodular, bacteriological or histological examination not done -01112 Tuberculosis of lung, nodular, bacteriological or histological examination unknown (at present) -01113 Tuberculosis of lung, nodular, tubercle bacilli found (in sputum) by microscopy -01114 Tuberculosis of lung, nodular, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01115 Tuberculosis of lung, nodular, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01116 Tuberculosis of lung, nodular, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01120 Tuberculosis of lung with cavitation, unspecified -01121 Tuberculosis of lung with cavitation, bacteriological or histological examination not done -01122 Tuberculosis of lung with cavitation, bacteriological or histological examination unknown (at present) -01123 Tuberculosis of lung with cavitation, tubercle bacilli found (in sputum) by microscopy -01124 Tuberculosis of lung with cavitation, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01125 Tuberculosis of lung with cavitation, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01126 Tuberculosis of lung with cavitation, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01130 Tuberculosis of bronchus, unspecified -01131 Tuberculosis of bronchus, bacteriological or histological examination not done -01132 Tuberculosis of bronchus, bacteriological or histological examination unknown (at present) -01133 Tuberculosis of bronchus, tubercle bacilli found (in sputum) by microscopy -01134 Tuberculosis of bronchus, tubercle bacilli not found (in sputum) by microscopy, but found in bacterial culture -01135 Tuberculosis of bronchus, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01136 Tuberculosis of bronchus, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01140 Tuberculous fibrosis of lung, unspecified -01141 Tuberculous fibrosis of lung, bacteriological or histological examination not done -01142 Tuberculous fibrosis of lung, bacteriological or histological examination unknown (at present) -01143 Tuberculous fibrosis of lung, tubercle bacilli found (in sputum) by microscopy -01144 Tuberculous fibrosis of lung, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01145 Tuberculous fibrosis of lung, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01146 Tuberculous fibrosis of lung, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01150 Tuberculous bronchiectasis, unspecified -01151 Tuberculous bronchiectasis, bacteriological or histological examination not done -01152 Tuberculous bronchiectasis, bacteriological or histological examination unknown (at present) -01153 Tuberculous bronchiectasis, tubercle bacilli found (in sputum) by microscopy -01154 Tuberculous bronchiectasis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01155 Tuberculous bronchiectasis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01156 Tuberculous bronchiectasis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01160 Tuberculous pneumonia [any form], unspecified -01161 Tuberculous pneumonia [any form], bacteriological or histological examination not done -01162 Tuberculous pneumonia [any form], bacteriological or histological examination unknown (at present) -01163 Tuberculous pneumonia [any form], tubercle bacilli found (in sputum) by microscopy -01164 Tuberculous pneumonia [any form], tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01165 Tuberculous pneumonia [any form], tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01166 Tuberculous pneumonia [any form], tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01170 Tuberculous pneumothorax, unspecified -01171 Tuberculous pneumothorax, bacteriological or histological examination not done -01172 Tuberculous pneumothorax, bacteriological or histological examination unknown (at present) -01173 Tuberculous pneumothorax, tubercle bacilli found (in sputum) by microscopy -01174 Tuberculous pneumothorax, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01175 Tuberculous pneumothorax, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01176 Tuberculous pneumothorax, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01180 Other specified pulmonary tuberculosis, unspecified -01181 Other specified pulmonary tuberculosis, bacteriological or histological examination not done -01182 Other specified pulmonary tuberculosis, bacteriological or histological examination unknown (at present) -01183 Other specified pulmonary tuberculosis, tubercle bacilli found (in sputum) by microscopy -01184 Other specified pulmonary tuberculosis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01185 Other specified pulmonary tuberculosis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01186 Other specified pulmonary tuberculosis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01190 Pulmonary tuberculosis, unspecified, unspecified -01191 Pulmonary tuberculosis, unspecified, bacteriological or histological examination not done -01192 Pulmonary tuberculosis, unspecified, bacteriological or histological examination unknown (at present) -01193 Pulmonary tuberculosis, unspecified, tubercle bacilli found (in sputum) by microscopy -01194 Pulmonary tuberculosis, unspecified, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01195 Pulmonary tuberculosis, unspecified, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01196 Pulmonary tuberculosis, unspecified, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01200 Tuberculous pleurisy, unspecified -01201 Tuberculous pleurisy, bacteriological or histological examination not done -01202 Tuberculous pleurisy, bacteriological or histological examination unknown (at present) -01203 Tuberculous pleurisy, tubercle bacilli found (in sputum) by microscopy -01204 Tuberculous pleurisy, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01205 Tuberculous pleurisy, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01206 Tuberculous pleurisy, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01210 Tuberculosis of intrathoracic lymph nodes, unspecified -01211 Tuberculosis of intrathoracic lymph nodes, bacteriological or histological examination not done -01212 Tuberculosis of intrathoracic lymph nodes, bacteriological or histological examination unknown (at present) -01213 Tuberculosis of intrathoracic lymph nodes, tubercle bacilli found (in sputum) by microscopy -01214 Tuberculosis of intrathoracic lymph nodes, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01215 Tuberculosis of intrathoracic lymph nodes, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01216 Tuberculosis of intrathoracic lymph nodes, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01220 Isolated tracheal or bronchial tuberculosis, unspecified -01221 Isolated tracheal or bronchial tuberculosis, bacteriological or histological examination not done -01222 Isolated tracheal or bronchial tuberculosis, bacteriological or histological examination unknown (at present) -01223 Isolated tracheal or bronchial tuberculosis, tubercle bacilli found (in sputum) by microscopy -01224 Isolated tracheal or bronchial tuberculosis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01225 Isolated tracheal or bronchial tuberculosis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01226 Isolated tracheal or bronchial tuberculosis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01230 Tuberculous laryngitis, unspecified -01231 Tuberculous laryngitis, bacteriological or histological examination not done -01232 Tuberculous laryngitis, bacteriological or histological examination unknown (at present) -01233 Tuberculous laryngitis, tubercle bacilli found (in sputum) by microscopy -01234 Tuberculous laryngitis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01235 Tuberculous laryngitis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01236 Tuberculous laryngitis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01280 Other specified respiratory tuberculosis, unspecified -01281 Other specified respiratory tuberculosis, bacteriological or histological examination not done -01282 Other specified respiratory tuberculosis, bacteriological or histological examination unknown (at present) -01283 Other specified respiratory tuberculosis, tubercle bacilli found (in sputum) by microscopy -01284 Other specified respiratory tuberculosis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01285 Other specified respiratory tuberculosis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01286 Other specified respiratory tuberculosis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01300 Tuberculous meningitis, unspecified -01301 Tuberculous meningitis, bacteriological or histological examination not done -01302 Tuberculous meningitis, bacteriological or histological examination unknown (at present) -01303 Tuberculous meningitis, tubercle bacilli found (in sputum) by microscopy -01304 Tuberculous meningitis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01305 Tuberculous meningitis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01306 Tuberculous meningitis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01310 Tuberculoma of meninges, unspecified -01311 Tuberculoma of meninges, bacteriological or histological examination not done -01312 Tuberculoma of meninges, bacteriological or histological examination unknown (at present) -01313 Tuberculoma of meninges, tubercle bacilli found (in sputum) by microscopy -01314 Tuberculoma of meninges, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01315 Tuberculoma of meninges, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01316 Tuberculoma of meninges, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01320 Tuberculoma of brain, unspecified -01321 Tuberculoma of brain, bacteriological or histological examination not done -01322 Tuberculoma of brain, bacteriological or histological examination unknown (at present) -01323 Tuberculoma of brain, tubercle bacilli found (in sputum) by microscopy -01324 Tuberculoma of brain, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01325 Tuberculoma of brain, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01326 Tuberculoma of brain, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01330 Tuberculous abscess of brain, unspecified -01331 Tuberculous abscess of brain, bacteriological or histological examination not done -01332 Tuberculous abscess of brain, bacteriological or histological examination unknown (at present) -01333 Tuberculous abscess of brain, tubercle bacilli found (in sputum) by microscopy -01334 Tuberculous abscess of brain, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01335 Tuberculous abscess of brain, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01336 Tuberculous abscess of brain, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01340 Tuberculoma of spinal cord, unspecified -01341 Tuberculoma of spinal cord, bacteriological or histological examination not done -01342 Tuberculoma of spinal cord, bacteriological or histological examination unknown (at present) -01343 Tuberculoma of spinal cord, tubercle bacilli found (in sputum) by microscopy -01344 Tuberculoma of spinal cord, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01345 Tuberculoma of spinal cord, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01346 Tuberculoma of spinal cord, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01350 Tuberculous abscess of spinal cord, unspecified -01351 Tuberculous abscess of spinal cord, bacteriological or histological examination not done -01352 Tuberculous abscess of spinal cord, bacteriological or histological examination unknown (at present) -01353 Tuberculous abscess of spinal cord, tubercle bacilli found (in sputum) by microscopy -01354 Tuberculous abscess of spinal cord, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01355 Tuberculous abscess of spinal cord, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01356 Tuberculous abscess of spinal cord, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01360 Tuberculous encephalitis or myelitis, unspecified -01361 Tuberculous encephalitis or myelitis, bacteriological or histological examination not done -01362 Tuberculous encephalitis or myelitis, bacteriological or histological examination unknown (at present) -01363 Tuberculous encephalitis or myelitis, tubercle bacilli found (in sputum) by microscopy -01364 Tuberculous encephalitis or myelitis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01365 Tuberculous encephalitis or myelitis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01366 Tuberculous encephalitis or myelitis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01380 Other specified tuberculosis of central nervous system, unspecified -01381 Other specified tuberculosis of central nervous system, bacteriological or histological examination not done -01382 Other specified tuberculosis of central nervous system, bacteriological or histological examination unknown (at present) -01383 Other specified tuberculosis of central nervous system, tubercle bacilli found (in sputum) by microscopy -01384 Other specified tuberculosis of central nervous system, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01385 Other specified tuberculosis of central nervous system, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01386 Other specified tuberculosis of central nervous system, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01390 Unspecified tuberculosis of central nervous system, unspecified -01391 Unspecified tuberculosis of central nervous system, bacteriological or histological examination not done -01392 Unspecified tuberculosis of central nervous system, bacteriological or histological examination unknown (at present) -01393 Unspecified tuberculosis of central nervous system, tubercle bacilli found (in sputum) by microscopy -01394 Unspecified tuberculosis of central nervous system, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01395 Unspecified tuberculosis of central nervous system, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01396 Unspecified tuberculosis of central nervous system, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01400 Tuberculous peritonitis, unspecified -01401 Tuberculous peritonitis, bacteriological or histological examination not done -01402 Tuberculous peritonitis, bacteriological or histological examination unknown (at present) -01403 Tuberculous peritonitis, tubercle bacilli found (in sputum) by microscopy -01404 Tuberculous peritonitis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01405 Tuberculous peritonitis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01406 Tuberculous peritonitis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01480 Other tuberculosis of intestines, peritoneum, and mesenteric glands, unspecified -01481 Other tuberculosis of intestines, peritoneum, and mesenteric glands, bacteriological or histological examination not done -01482 Other tuberculosis of intestines, peritoneum, and mesenteric glands, bacteriological or histological examination unknown (at present) -01483 Other tuberculosis of intestines, peritoneum, and mesenteric glands, tubercle bacilli found (in sputum) by microscopy -01484 Other tuberculosis of intestines, peritoneum, and mesenteric glands, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01485 Other tuberculosis of intestines, peritoneum, and mesenteric glands, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01486 Other tuberculosis of intestines, peritoneum, and mesenteric glands, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01500 Tuberculosis of vertebral column, unspecified -01501 Tuberculosis of vertebral column, bacteriological or histological examination not done -01502 Tuberculosis of vertebral column, bacteriological or histological examination unknown (at present) -01503 Tuberculosis of vertebral column, tubercle bacilli found (in sputum) by microscopy -01504 Tuberculosis of vertebral column, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01505 Tuberculosis of vertebral column, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01506 Tuberculosis of vertebral column, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01510 Tuberculosis of hip, unspecified -01511 Tuberculosis of hip, bacteriological or histological examination not done -01512 Tuberculosis of hip, bacteriological or histological examination unknown (at present) -01513 Tuberculosis of hip, tubercle bacilli found (in sputum) by microscopy -01514 Tuberculosis of hip, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01515 Tuberculosis of hip, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01516 Tuberculosis of hip, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01520 Tuberculosis of knee, unspecified -01521 Tuberculosis of knee, bacteriological or histological examination not done -01522 Tuberculosis of knee, bacteriological or histological examination unknown (at present) -01523 Tuberculosis of knee, tubercle bacilli found (in sputum) by microscopy -01524 Tuberculosis of knee, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01525 Tuberculosis of knee, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01526 Tuberculosis of knee, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01550 Tuberculosis of limb bones, unspecified -01551 Tuberculosis of limb bones, bacteriological or histological examination not done -01552 Tuberculosis of limb bones, bacteriological or histological examination unknown (at present) -01553 Tuberculosis of limb bones, tubercle bacilli found (in sputum) by microscopy -01554 Tuberculosis of limb bones, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01555 Tuberculosis of limb bones, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01556 Tuberculosis of limb bones, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01560 Tuberculosis of mastoid, unspecified -01561 Tuberculosis of mastoid, bacteriological or histological examination not done -01562 Tuberculosis of mastoid, bacteriological or histological examination unknown (at present) -01563 Tuberculosis of mastoid, tubercle bacilli found (in sputum) by microscopy -01564 Tuberculosis of mastoid, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01565 Tuberculosis of mastoid, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01566 Tuberculosis of mastoid, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01570 Tuberculosis of other specified bone, unspecified -01571 Tuberculosis of other specified bone, bacteriological or histological examination not done -01572 Tuberculosis of other specified bone, bacteriological or histological examination unknown (at present) -01573 Tuberculosis of other specified bone, tubercle bacilli found (in sputum) by microscopy -01574 Tuberculosis of other specified bone, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01575 Tuberculosis of other specified bone, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01576 Tuberculosis of other specified bone, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01580 Tuberculosis of other specified joint, unspecified -01581 Tuberculosis of other specified joint, bacteriological or histological examination not done -01582 Tuberculosis of other specified joint, bacteriological or histological examination unknown (at present) -01583 Tuberculosis of other specified joint, tubercle bacilli found (in sputum) by microscopy -01584 Tuberculosis of other specified joint, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01585 Tuberculosis of other specified joint, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01586 Tuberculosis of other specified joint, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01590 Tuberculosis of unspecified bones and joints, unspecified -01591 Tuberculosis of unspecified bones and joints, bacteriological or histological examination not done -01592 Tuberculosis of unspecified bones and joints, bacteriological or histological examination unknown (at present) -01593 Tuberculosis of unspecified bones and joints, tubercle bacilli found (in sputum) by microscopy -01594 Tuberculosis of unspecified bones and joints, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01595 Tuberculosis of unspecified bones and joints, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01596 Tuberculosis of unspecified bones and joints, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01600 Tuberculosis of kidney, unspecified -01601 Tuberculosis of kidney, bacteriological or histological examination not done -01602 Tuberculosis of kidney, bacteriological or histological examination unknown (at present) -01603 Tuberculosis of kidney, tubercle bacilli found (in sputum) by microscopy -01604 Tuberculosis of kidney, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01605 Tuberculosis of kidney, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01606 Tuberculosis of kidney, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01610 Tuberculosis of bladder, unspecified -01611 Tuberculosis of bladder, bacteriological or histological examination not done -01612 Tuberculosis of bladder, bacteriological or histological examination unknown (at present) -01613 Tuberculosis of bladder, tubercle bacilli found (in sputum) by microscopy -01614 Tuberculosis of bladder, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01615 Tuberculosis of bladder, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01616 Tuberculosis of bladder, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01620 Tuberculosis of ureter, unspecified -01621 Tuberculosis of ureter, bacteriological or histological examination not done -01622 Tuberculosis of ureter, bacteriological or histological examination unknown (at present) -01623 Tuberculosis of ureter, tubercle bacilli found (in sputum) by microscopy -01624 Tuberculosis of ureter, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01625 Tuberculosis of ureter, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01626 Tuberculosis of ureter, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01630 Tuberculosis of other urinary organs, unspecified -01631 Tuberculosis of other urinary organs, bacteriological or histological examination not done -01632 Tuberculosis of other urinary organs, bacteriological or histological examination unknown (at present) -01633 Tuberculosis of other urinary organs, tubercle bacilli found (in sputum) by microscopy -01634 Tuberculosis of other urinary organs, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01635 Tuberculosis of other urinary organs, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01636 Tuberculosis of other urinary organs, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01640 Tuberculosis of epididymis, unspecified -01641 Tuberculosis of epididymis, bacteriological or histological examination not done -01642 Tuberculosis of epididymis, bacteriological or histological examination unknown (at present) -01643 Tuberculosis of epididymis, tubercle bacilli found (in sputum) by microscopy -01644 Tuberculosis of epididymis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01645 Tuberculosis of epididymis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01646 Tuberculosis of epididymis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01650 Tuberculosis of other male genital organs, unspecified -01651 Tuberculosis of other male genital organs, bacteriological or histological examination not done -01652 Tuberculosis of other male genital organs, bacteriological or histological examination unknown (at present) -01653 Tuberculosis of other male genital organs, tubercle bacilli found (in sputum) by microscopy -01654 Tuberculosis of other male genital organs, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01655 Tuberculosis of other male genital organs, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01656 Tuberculosis of other male genital organs, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01660 Tuberculous oophoritis and salpingitis, unspecified -01661 Tuberculous oophoritis and salpingitis, bacteriological or histological examination not done -01662 Tuberculous oophoritis and salpingitis, bacteriological or histological examination unknown (at present) -01663 Tuberculous oophoritis and salpingitis, tubercle bacilli found (in sputum) by microscopy -01664 Tuberculous oophoritis and salpingitis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01665 Tuberculous oophoritis and salpingitis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01666 Tuberculous oophoritis and salpingitis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01670 Tuberculosis of other female genital organs, unspecified -01671 Tuberculosis of other female genital organs, bacteriological or histological examination not done -01672 Tuberculosis of other female genital organs, bacteriological or histological examination unknown (at present) -01673 Tuberculosis of other female genital organs, tubercle bacilli found (in sputum) by microscopy -01674 Tuberculosis of other female genital organs, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01675 Tuberculosis of other female genital organs, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01676 Tuberculosis of other female genital organs, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01690 Genitourinary tuberculosis, unspecified, unspecified -01691 Genitourinary tuberculosis, unspecified, bacteriological or histological examination not done -01692 Genitourinary tuberculosis, unspecified, bacteriological or histological examination unknown (at present) -01693 Genitourinary tuberculosis, unspecified, tubercle bacilli found (in sputum) by microscopy -01694 Genitourinary tuberculosis, unspecified, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01695 Genitourinary tuberculosis, unspecified, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01696 Genitourinary tuberculosis, unspecified, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01700 Tuberculosis of skin and subcutaneous cellular tissue, unspecified -01701 Tuberculosis of skin and subcutaneous cellular tissue, bacteriological or histological examination not done -01702 Tuberculosis of skin and subcutaneous cellular tissue, bacteriological or histological examination unknown (at present) -01703 Tuberculosis of skin and subcutaneous cellular tissue, tubercle bacilli found (in sputum) by microscopy -01704 Tuberculosis of skin and subcutaneous cellular tissue, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01705 Tuberculosis of skin and subcutaneous cellular tissue, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01706 Tuberculosis of skin and subcutaneous cellular tissue, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01710 Erythema nodosum with hypersensitivity reaction in tuberculosis, unspecified -01711 Erythema nodosum with hypersensitivity reaction in tuberculosis, bacteriological or histological examination not done -01712 Erythema nodosum with hypersensitivity reaction in tuberculosis, bacteriological or histological examination unknown (at present) -01713 Erythema nodosum with hypersensitivity reaction in tuberculosis, tubercle bacilli found (in sputum) by microscopy -01714 Erythema nodosum with hypersensitivity reaction in tuberculosis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01715 Erythema nodosum with hypersensitivity reaction in tuberculosis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01716 Erythema nodosum with hypersensitivity reaction in tuberculosis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01720 Tuberculosis of peripheral lymph nodes, unspecified -01721 Tuberculosis of peripheral lymph nodes, bacteriological or histological examination not done -01722 Tuberculosis of peripheral lymph nodes, bacteriological or histological examination unknown (at present) -01723 Tuberculosis of peripheral lymph nodes, tubercle bacilli found (in sputum) by microscopy -01724 Tuberculosis of peripheral lymph nodes, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01725 Tuberculosis of peripheral lymph nodes, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01726 Tuberculosis of peripheral lymph nodes, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01730 Tuberculosis of eye, unspecified -01731 Tuberculosis of eye, bacteriological or histological examination not done -01732 Tuberculosis of eye, bacteriological or histological examination unknown (at present) -01733 Tuberculosis of eye, tubercle bacilli found (in sputum) by microscopy -01734 Tuberculosis of eye, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01735 Tuberculosis of eye, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01736 Tuberculosis of eye, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01740 Tuberculosis of ear, unspecified -01741 Tuberculosis of ear, bacteriological or histological examination not done -01742 Tuberculosis of ear, bacteriological or histological examination unknown (at present) -01743 Tuberculosis of ear, tubercle bacilli found (in sputum) by microscopy -01744 Tuberculosis of ear, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01745 Tuberculosis of ear, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01746 Tuberculosis of ear, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01750 Tuberculosis of thyroid gland, unspecified -01751 Tuberculosis of thyroid gland, bacteriological or histological examination not done -01752 Tuberculosis of thyroid gland, bacteriological or histological examination unknown (at present) -01753 Tuberculosis of thyroid gland, tubercle bacilli found (in sputum) by microscopy -01754 Tuberculosis of thyroid gland, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01755 Tuberculosis of thyroid gland, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01756 Tuberculosis of thyroid gland, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01760 Tuberculosis of adrenal glands, unspecified -01761 Tuberculosis of adrenal glands, bacteriological or histological examination not done -01762 Tuberculosis of adrenal glands, bacteriological or histological examination unknown (at present) -01763 Tuberculosis of adrenal glands, tubercle bacilli found (in sputum) by microscopy -01764 Tuberculosis of adrenal glands, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01765 Tuberculosis of adrenal glands, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01766 Tuberculosis of adrenal glands, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01770 Tuberculosis of spleen, unspecified -01771 Tuberculosis of spleen, bacteriological or histological examination not done -01772 Tuberculosis of spleen, bacteriological or histological examination unknown (at present) -01773 Tuberculosis of spleen, tubercle bacilli found (in sputum) by microscopy -01774 Tuberculosis of spleen, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01775 Tuberculosis of spleen, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01776 Tuberculosis of spleen, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01780 Tuberculosis of esophagus, unspecified -01781 Tuberculosis of esophagus, bacteriological or histological examination not done -01782 Tuberculosis of esophagus, bacteriological or histological examination unknown (at present) -01783 Tuberculosis of esophagus, tubercle bacilli found (in sputum) by microscopy -01784 Tuberculosis of esophagus, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01785 Tuberculosis of esophagus, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01786 Tuberculosis of esophagus, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01790 Tuberculosis of other specified organs, unspecified -01791 Tuberculosis of other specified organs, bacteriological or histological examination not done -01792 Tuberculosis of other specified organs, bacteriological or histological examination unknown (at present) -01793 Tuberculosis of other specified organs, tubercle bacilli found (in sputum) by microscopy -01794 Tuberculosis of other specified organs, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01795 Tuberculosis of other specified organs, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01796 Tuberculosis of other specified organs, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01800 Acute miliary tuberculosis, unspecified -01801 Acute miliary tuberculosis, bacteriological or histological examination not done -01802 Acute miliary tuberculosis, bacteriological or histological examination unknown (at present) -01803 Acute miliary tuberculosis, tubercle bacilli found (in sputum) by microscopy -01804 Acute miliary tuberculosis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01805 Acute miliary tuberculosis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01806 Acute miliary tuberculosis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01880 Other specified miliary tuberculosis, unspecified -01881 Other specified miliary tuberculosis, bacteriological or histological examination not done -01882 Other specified miliary tuberculosis, bacteriological or histological examination unknown (at present) -01883 Other specified miliary tuberculosis, tubercle bacilli found (in sputum) by microscopy -01884 Other specified miliary tuberculosis, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01885 Other specified miliary tuberculosis, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01886 Other specified miliary tuberculosis, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -01890 Miliary tuberculosis, unspecified, unspecified -01891 Miliary tuberculosis, unspecified, bacteriological or histological examination not done -01892 Miliary tuberculosis, unspecified, bacteriological or histological examination unknown (at present) -01893 Miliary tuberculosis, unspecified, tubercle bacilli found (in sputum) by microscopy -01894 Miliary tuberculosis, unspecified, tubercle bacilli not found (in sputum) by microscopy, but found by bacterial culture -01895 Miliary tuberculosis, unspecified, tubercle bacilli not found by bacteriological examination, but tuberculosis confirmed histologically -01896 Miliary tuberculosis, unspecified, tubercle bacilli not found by bacteriological or histological examination, but tuberculosis confirmed by other methods [inoculation of animals] -0200 Bubonic plague -0201 Cellulocutaneous plague -0202 Septicemic plague -0203 Primary pneumonic plague -0204 Secondary pneumonic plague -0205 Pneumonic plague, unspecified -0208 Other specified types of plague -0209 Plague, unspecified -0210 Ulceroglandular tularemia -0211 Enteric tularemia -0212 Pulmonary tularemia -0213 Oculoglandular tularemia -0218 Other specified tularemia -0219 Unspecified tularemia -0220 Cutaneous anthrax -0221 Pulmonary anthrax -0222 Gastrointestinal anthrax -0223 Anthrax septicemia -0228 Other specified manifestations of anthrax -0229 Anthrax, unspecified -0230 Brucella melitensis -0231 Brucella abortus -0232 Brucella suis -0233 Brucella canis -0238 Other brucellosis -0239 Brucellosis, unspecified -024 Glanders -025 Melioidosis -0260 Spirillary fever -0261 Streptobacillary fever -0269 Unspecified rat-bite fever -0270 Listeriosis -0271 Erysipelothrix infection -0272 Pasteurellosis -0278 Other specified zoonotic bacterial diseases -0279 Unspecified zoonotic bacterial disease -0300 Lepromatous leprosy [type L] -0301 Tuberculoid leprosy [type T] -0302 Indeterminate leprosy [group I] -0303 Borderline leprosy [group B] -0308 Other specified leprosy -0309 Leprosy, unspecified -0310 Pulmonary diseases due to other mycobacteria -0311 Cutaneous diseases due to other mycobacteria -0312 Disseminated due to other mycobacteria -0318 Other specified mycobacterial diseases -0319 Unspecified diseases due to mycobacteria -0320 Faucial diphtheria -0321 Nasopharyngeal diphtheria -0322 Anterior nasal diphtheria -0323 Laryngeal diphtheria -03281 Conjunctival diphtheria -03282 Diphtheritic myocarditis -03283 Diphtheritic peritonitis -03284 Diphtheritic cystitis -03285 Cutaneous diphtheria -03289 Other specified diphtheria -0329 Diphtheria, unspecified -0330 Whooping cough due to bordetella pertussis [B. pertussis] -0331 Whooping cough due to bordetella parapertussis [B. parapertussis] -0338 Whooping cough due to other specified organism -0339 Whooping cough, unspecified organism -0340 Streptococcal sore throat -0341 Scarlet fever -035 Erysipelas -0360 Meningococcal meningitis -0361 Meningococcal encephalitis -0362 Meningococcemia -0363 Waterhouse-Friderichsen syndrome, meningococcal -03640 Meningococcal carditis, unspecified -03641 Meningococcal pericarditis -03642 Meningococcal endocarditis -03643 Meningococcal myocarditis -03681 Meningococcal optic neuritis -03682 Meningococcal arthropathy -03689 Other specified meningococcal infections -0369 Meningococcal infection, unspecified -037 Tetanus -0380 Streptococcal septicemia -03810 Staphylococcal septicemia, unspecified -03811 Methicillin susceptible Staphylococcus aureus septicemia -03812 Methicillin resistant Staphylococcus aureus septicemia -03819 Other staphylococcal septicemia -0382 Pneumococcal septicemia [Streptococcus pneumoniae septicemia] -0383 Septicemia due to anaerobes -03840 Septicemia due to gram-negative organism, unspecified -03841 Septicemia due to hemophilus influenzae [H. influenzae] -03842 Septicemia due to escherichia coli [E. coli] -03843 Septicemia due to pseudomonas -03844 Septicemia due to serratia -03849 Other septicemia due to gram-negative organisms -0388 Other specified septicemias -0389 Unspecified septicemia -0390 Cutaneous actinomycotic infection -0391 Pulmonary actinomycotic infection -0392 Abdominal actinomycotic infection -0393 Cervicofacial actinomycotic infection -0394 Madura foot -0398 Actinomycotic infection of other specified sites -0399 Actinomycotic infection of unspecified site -0400 Gas gangrene -0401 Rhinoscleroma -0402 Whipple's disease -0403 Necrobacillosis -04041 Infant botulism -04042 Wound botulism -04081 Tropical pyomyositis -04082 Toxic shock syndrome -04089 Other specified bacterial diseases -04100 Streptococcus infection in conditions classified elsewhere and of unspecified site, streptococcus, unspecified -04101 Streptococcus infection in conditions classified elsewhere and of unspecified site, streptococcus, group A -04102 Streptococcus infection in conditions classified elsewhere and of unspecified site, streptococcus, group B -04103 Streptococcus infection in conditions classified elsewhere and of unspecified site, streptococcus, group C -04104 Streptococcus infection in conditions classified elsewhere and of unspecified site, streptococcus, group D [Enterococcus] -04105 Streptococcus infection in conditions classified elsewhere and of unspecified site, streptococcus, group G -04109 Streptococcus infection in conditions classified elsewhere and of unspecified site, other streptococcus -04110 Staphylococcus infection in conditions classified elsewhere and of unspecified site, staphylococcus, unspecified -04111 Methicillin susceptible Staphylococcus aureus in conditions classified elsewhere and of unspecified site -04112 Methicillin resistant Staphylococcus aureus in conditions classified elsewhere and of unspecified site -04119 Staphylococcus infection in conditions classified elsewhere and of unspecified site, other staphylococcus -0412 Pneumococcus infection in conditions classified elsewhere and of unspecified site -0413 Friedl�nder's bacillus infection in conditions classified elsewhere and of unspecified site -04141 Shiga toxin-producing Escherichia coli [E. coli] (STEC) O157 -04142 Other specified Shiga toxin-producing Escherichia coli [E. coli] (STEC) -04143 Shiga toxin-producing Escherichia coli [E. coli] (STEC), unspecified -04149 Other and unspecified Escherichia coli [E. coli] -0415 Hemophilus influenzae [H. influenzae] infection in conditions classified elsewhere and of unspecified site -0416 Proteus (mirabilis) (morganii) infection in conditions classified elsewhere and of unspecified site -0417 Pseudomonas infection in conditions classified elsewhere and of unspecified site -04181 Other specified bacterial infections in conditions classified elsewhere and of unspecified site, mycoplasma -04182 Bacteroides fragilis -04183 Other specified bacterial infections in conditions classified elsewhere and of unspecified site, Clostridium perfringens -04184 Other specified bacterial infections in conditions classified elsewhere and of unspecified site, other anaerobes -04185 Other specified bacterial infections in conditions classified elsewhere and of unspecified site, other gram-negative organisms -04186 Helicobacter pylori [H. pylori] -04189 Other specified bacterial infections in conditions classified elsewhere and of unspecified site, other specified bacteria -0419 Bacterial infection, unspecified, in conditions classified elsewhere and of unspecified site -042 Human immunodeficiency virus [HIV] disease -04500 Acute paralytic poliomyelitis specified as bulbar, poliovirus, unspecified type -04501 Acute paralytic poliomyelitis specified as bulbar, poliovirus type I -04502 Acute paralytic poliomyelitis specified as bulbar, poliovirus type II -04503 Acute paralytic poliomyelitis specified as bulbar, poliovirus type III -04510 Acute poliomyelitis with other paralysis, poliovirus, unspecified type -04511 Acute poliomyelitis with other paralysis, poliovirus type I -04512 Acute poliomyelitis with other paralysis, poliovirus type II -04513 Acute poliomyelitis with other paralysis, poliovirus type III -04520 Acute nonparalytic poliomyelitis, poliovirus, unspecified type -04521 Acute nonparalytic poliomyelitis, poliovirus type I -04522 Acute nonparalytic poliomyelitis, poliovirus type II -04523 Acute nonparalytic poliomyelitis, poliovirus type III -04590 Acute poliomyelitis, unspecified, poliovirus, unspecified type -04591 Acute poliomyelitis, unspecified, poliovirus type I -04592 Acute poliomyelitis, unspecified, poliovirus type II -04593 Acute poliomyelitis, unspecified, poliovirus type III -0460 Kuru -04611 Variant Creutzfeldt-Jakob disease -04619 Other and unspecified Creutzfeldt-Jakob disease -0462 Subacute sclerosing panencephalitis -0463 Progressive multifocal leukoencephalopathy -04671 Gerstmann-Str�ussler-Scheinker syndrome -04672 Fatal familial insomnia -04679 Other and unspecified prion disease of central nervous system -0468 Other specified slow virus infection of central nervous system -0469 Unspecified slow virus infection of central nervous system -0470 Meningitis due to coxsackie virus -0471 Meningitis due to echo virus -0478 Other specified viral meningitis -0479 Unspecified viral meningitis -048 Other enterovirus diseases of central nervous system -0490 Lymphocytic choriomeningitis -0491 Meningitis due to adenovirus -0498 Other specified non-arthropod-borne viral diseases of central nervous system -0499 Unspecified non-arthropod-borne viral diseases of central nervous system -0500 Variola major -0501 Alastrim -0502 Modified smallpox -0509 Smallpox, unspecified -05101 Cowpox -05102 Vaccinia not from vaccination -0511 Pseudocowpox -0512 Contagious pustular dermatitis -0519 Paravaccinia, unspecified -0520 Postvaricella encephalitis -0521 Varicella (hemorrhagic) pneumonitis -0522 Postvaricella myelitis -0527 Chickenpox with other specified complications -0528 Chickenpox with unspecified complication -0529 Varicella without mention of complication -0530 Herpes zoster with meningitis -05310 Herpes zoster with unspecified nervous system complication -05311 Geniculate herpes zoster -05312 Postherpetic trigeminal neuralgia -05313 Postherpetic polyneuropathy -05314 Herpes zoster myelitis -05319 Herpes zoster with other nervous system complications -05320 Herpes zoster dermatitis of eyelid -05321 Herpes zoster keratoconjunctivitis -05322 Herpes zoster iridocyclitis -05329 Herpes zoster with other ophthalmic complications -05371 Otitis externa due to herpes zoster -05379 Herpes zoster with other specified complications -0538 Herpes zoster with unspecified complication -0539 Herpes zoster without mention of complication -0540 Eczema herpeticum -05410 Genital herpes, unspecified -05411 Herpetic vulvovaginitis -05412 Herpetic ulceration of vulva -05413 Herpetic infection of penis -05419 Other genital herpes -0542 Herpetic gingivostomatitis -0543 Herpetic meningoencephalitis -05440 Herpes simplex with unspecified ophthalmic complication -05441 Herpes simplex dermatitis of eyelid -05442 Dendritic keratitis -05443 Herpes simplex disciform keratitis -05444 Herpes simplex iridocyclitis -05449 Herpes simplex with other ophthalmic complications -0545 Herpetic septicemia -0546 Herpetic whitlow -05471 Visceral herpes simplex -05472 Herpes simplex meningitis -05473 Herpes simplex otitis externa -05474 Herpes simplex myelitis -05479 Herpes simplex with other specified complications -0548 Herpes simplex with unspecified complication -0549 Herpes simplex without mention of complication -0550 Postmeasles encephalitis -0551 Postmeasles pneumonia -0552 Postmeasles otitis media -05571 Measles keratoconjunctivitis -05579 Measles with other specified complications -0558 Measles with unspecified complication -0559 Measles without mention of complication -05600 Rubella with unspecified neurological complication -05601 Encephalomyelitis due to rubella -05609 Rubella with other neurological complications -05671 Arthritis due to rubella -05679 Rubella with other specified complications -0568 Rubella with unspecified complications -0569 Rubella without mention of complication -0570 Erythema infectiosum (fifth disease) -0578 Other specified viral exanthemata -0579 Viral exanthem, unspecified -05810 Roseola infantum, unspecified -05811 Roseola infantum due to human herpesvirus 6 -05812 Roseola infantum due to human herpesvirus 7 -05821 Human herpesvirus 6 encephalitis -05829 Other human herpesvirus encephalitis -05881 Human herpesvirus 6 infection -05882 Human herpesvirus 7 infection -05889 Other human herpesvirus infection -05900 Orthopoxvirus infection, unspecified -05901 Monkeypox -05909 Other orthopoxvirus infections -05910 Parapoxvirus infection, unspecified -05911 Bovine stomatitis -05912 Sealpox -05919 Other parapoxvirus infections -05920 Yatapoxvirus infection, unspecified -05921 Tanapox -05922 Yaba monkey tumor virus -0598 Other poxvirus infections -0599 Poxvirus infections, unspecified -0600 Sylvatic yellow fever -0601 Urban yellow fever -0609 Yellow fever, unspecified -061 Dengue -0620 Japanese encephalitis -0621 Western equine encephalitis -0622 Eastern equine encephalitis -0623 St. Louis encephalitis -0624 Australian encephalitis -0625 California virus encephalitis -0628 Other specified mosquito-borne viral encephalitis -0629 Mosquito-borne viral encephalitis, unspecified -0630 Russian spring-summer [taiga] encephalitis -0631 Louping ill -0632 Central european encephalitis -0638 Other specified tick-borne viral encephalitis -0639 Tick-borne viral encephalitis, unspecified -064 Viral encephalitis transmitted by other and unspecified arthropods -0650 Crimean hemorrhagic fever [CHF Congo virus] -0651 Omsk hemorrhagic fever -0652 Kyasanur forest disease -0653 Other tick-borne hemorrhagic fever -0654 Mosquito-borne hemorrhagic fever -0658 Other specified arthropod-borne hemorrhagic fever -0659 Arthropod-borne hemorrhagic fever, unspecified -0660 Phlebotomus fever -0661 Tick-borne fever -0662 Venezuelan equine fever -0663 Other mosquito-borne fever -06640 West Nile Fever, unspecified -06641 West Nile Fever with encephalitis -06642 West Nile Fever with other neurologic manifestation -06649 West Nile Fever with other complications -0668 Other specified arthropod-borne viral diseases -0669 Arthropod-borne viral disease, unspecified -0700 Viral hepatitis A with hepatic coma -0701 Viral hepatitis A without mention of hepatic coma -07020 Viral hepatitis B with hepatic coma, acute or unspecified, without mention of hepatitis delta -07021 Viral hepatitis B with hepatic coma, acute or unspecified, with hepatitis delta -07022 Chronic viral hepatitis B with hepatic coma without hepatitis delta -07023 Chronic viral hepatitis B with hepatic coma with hepatitis delta -07030 Viral hepatitis B without mention of hepatic coma, acute or unspecified, without mention of hepatitis delta -07031 Viral hepatitis B without mention of hepatic coma, acute or unspecified, with hepatitis delta -07032 Chronic viral hepatitis B without mention of hepatic coma without mention of hepatitis delta -07033 Chronic viral hepatitis B without mention of hepatic coma with hepatitis delta -07041 Acute hepatitis C with hepatic coma -07042 Hepatitis delta without mention of active hepatitis B disease with hepatic coma -07043 Hepatitis E with hepatic coma -07044 Chronic hepatitis C with hepatic coma -07049 Other specified viral hepatitis with hepatic coma -07051 Acute hepatitis C without mention of hepatic coma -07052 Hepatitis delta without mention of active hepatitis B disease or hepatic coma -07053 Hepatitis E without mention of hepatic coma -07054 Chronic hepatitis C without mention of hepatic coma -07059 Other specified viral hepatitis without mention of hepatic coma -0706 Unspecified viral hepatitis with hepatic coma -07070 Unspecified viral hepatitis C without hepatic coma -07071 Unspecified viral hepatitis C with hepatic coma -0709 Unspecified viral hepatitis without mention of hepatic coma -071 Rabies -0720 Mumps orchitis -0721 Mumps meningitis -0722 Mumps encephalitis -0723 Mumps pancreatitis -07271 Mumps hepatitis -07272 Mumps polyneuropathy -07279 Other mumps with other specified complications -0728 Mumps with unspecified complication -0729 Mumps without mention of complication -0730 Ornithosis with pneumonia -0737 Ornithosis with other specified complications -0738 Ornithosis with unspecified complication -0739 Ornithosis, unspecified -0740 Herpangina -0741 Epidemic pleurodynia -07420 Coxsackie carditis, unspecified -07421 Coxsackie pericarditis -07422 Coxsackie endocarditis -07423 Coxsackie myocarditis -0743 Hand, foot, and mouth disease -0748 Other specified diseases due to Coxsackie virus -075 Infectious mononucleosis -0760 Trachoma, initial stage -0761 Trachoma, active stage -0769 Trachoma, unspecified -0770 Inclusion conjunctivitis -0771 Epidemic keratoconjunctivitis -0772 Pharyngoconjunctival fever -0773 Other adenoviral conjunctivitis -0774 Epidemic hemorrhagic conjunctivitis -0778 Other viral conjunctivitis -07798 Unspecified diseases of conjunctiva due to chlamydiae -07799 Unspecified diseases of conjunctiva due to viruses -0780 Molluscum contagiosum -07810 Viral warts, unspecified -07811 Condyloma acuminatum -07812 Plantar wart -07819 Other specified viral warts -0782 Sweating fever -0783 Cat-scratch disease -0784 Foot and mouth disease -0785 Cytomegaloviral disease -0786 Hemorrhagic nephrosonephritis -0787 Arenaviral hemorrhagic fever -07881 Epidemic vertigo -07882 Epidemic vomiting syndrome -07888 Other specified diseases due to chlamydiae -07889 Other specified diseases due to viruses -0790 Adenovirus infection in conditions classified elsewhere and of unspecified site -0791 Echo virus infection in conditions classified elsewhere and of unspecified site -0792 Coxsackie virus infection in conditions classified elsewhere and of unspecified site -0793 Rhinovirus infection in conditions classified elsewhere and of unspecified site -0794 Human papillomavirus in conditions classified elsewhere and of unspecified site -07950 Retrovirus, unspecified -07951 Human T-cell lymphotrophic virus, type I [HTLV-I] -07952 Human T-cell lymphotrophic virus, type II [HTLV-II] -07953 Human immunodeficiency virus, type 2 [HIV-2] -07959 Other specified retrovirus -0796 Respiratory syncytial virus (RSV) -07981 Hantavirus infection -07982 SARS-associated coronavirus -07983 Parvovirus B19 -07988 Other specified chlamydial infection -07989 Other specified viral infection -07998 Unspecified chlamydial infection -07999 Unspecified viral infection -080 Louse-borne (epidemic) typhus -0810 Murine (endemic) typhus -0811 Brill's disease -0812 Scrub typhus -0819 Typhus, unspecified -0820 Spotted fevers -0821 Boutonneuse fever -0822 North Asian tick fever -0823 Queensland tick typhus -08240 Ehrlichiosis, unspecified -08241 Ehrlichiosis chafeensis [E. chafeensis] -08249 Other ehrlichiosis -0828 Other specified tick-borne rickettsioses -0829 Tick-borne rickettsiosis, unspecified -0830 Q fever -0831 Trench fever -0832 Rickettsialpox -0838 Other specified rickettsioses -0839 Rickettsiosis, unspecified -0840 Falciparum malaria [malignant tertian] -0841 Vivax malaria [benign tertian] -0842 Quartan malaria -0843 Ovale malaria -0844 Other malaria -0845 Mixed malaria -0846 Malaria, unspecified -0847 Induced malaria -0848 Blackwater fever -0849 Other pernicious complications of malaria -0850 Visceral [kala-azar] leishmaniasis -0851 Cutaneous leishmaniasis, urban -0852 Cutaneous leishmaniasis, Asian desert -0853 Cutaneous leishmaniasis, Ethiopian -0854 Cutaneous leishmaniasis, American -0855 Mucocutaneous leishmaniasis, (American) -0859 Leishmaniasis, unspecified -0860 Chagas' disease with heart involvement -0861 Chagas' disease with other organ involvement -0862 Chagas' disease without mention of organ involvement -0863 Gambian trypanosomiasis -0864 Rhodesian trypanosomiasis -0865 African trypanosomiasis, unspecified -0869 Trypanosomiasis, unspecified -0870 Relapsing fever, louse-borne -0871 Relapsing fever, tick-borne -0879 Relapsing fever, unspecified -0880 Bartonellosis -08881 Lyme Disease -08882 Babesiosis -08889 Other specified arthropod-borne diseases, other -0889 Arthropod-borne disease, unspecified -0900 Early congenital syphilis, symptomatic -0901 Early congenital syphilis, latent -0902 Early congenital syphilis, unspecified -0903 Syphilitic interstitial keratitis -09040 Juvenile neurosyphilis, unspecified -09041 Congenital syphilitic encephalitis -09042 Congenital syphilitic meningitis -09049 Other juvenile neurosyphilis -0905 Other late congenital syphilis, symptomatic -0906 Late congenital syphilis, latent -0907 Late congenital syphilis, unspecified -0909 Congenital syphilis, unspecified -0910 Genital syphilis (primary) -0911 Primary anal syphilis -0912 Other primary syphilis -0913 Secondary syphilis of skin or mucous membranes -0914 Adenopathy due to secondary syphilis -09150 Syphilitic uveitis, unspecified -09151 Syphilitic chorioretinitis (secondary) -09152 Syphilitic iridocyclitis (secondary) -09161 Secondary syphilitic periostitis -09162 Secondary syphilitic hepatitis -09169 Secondary syphilis of other viscera -0917 Secondary syphilis, relapse -09181 Acute syphilitic meningitis (secondary) -09182 Syphilitic alopecia -09189 Other forms of secondary syphilis -0919 Unspecified secondary syphilis -0920 Early syphilis, latent, serological relapse after treatment -0929 Early syphilis, latent, unspecified -0930 Aneurysm of aorta, specified as syphilitic -0931 Syphilitic aortitis -09320 Syphilitic endocarditis of valve, unspecified -09321 Syphilitic endocarditis of mitral valve -09322 Syphilitic endocarditis of aortic valve -09323 Syphilitic endocarditis of tricuspid valve -09324 Syphilitic endocarditis of pulmonary valve -09381 Syphilitic pericarditis -09382 Syphilitic myocarditis -09389 Other specified cardiovascular syphilis -0939 Cardiovascular syphilis, unspecified -0940 Tabes dorsalis -0941 General paresis -0942 Syphilitic meningitis -0943 Asymptomatic neurosyphilis -09481 Syphilitic encephalitis -09482 Syphilitic parkinsonism -09483 Syphilitic disseminated retinochoroiditis -09484 Syphilitic optic atrophy -09485 Syphilitic retrobulbar neuritis -09486 Syphilitic acoustic neuritis -09487 Syphilitic ruptured cerebral aneurysm -09489 Other specified neurosyphilis -0949 Neurosyphilis, unspecified -0950 Syphilitic episcleritis -0951 Syphilis of lung -0952 Syphilitic peritonitis -0953 Syphilis of liver -0954 Syphilis of kidney -0955 Syphilis of bone -0956 Syphilis of muscle -0957 Syphilis of synovium, tendon, and bursa -0958 Other specified forms of late symptomatic syphilis -0959 Late symptomatic syphilis, unspecified -096 Late syphilis, latent -0970 Late syphilis, unspecified -0971 Latent syphilis, unspecified -0979 Syphilis, unspecified -0980 Gonococcal infection (acute) of lower genitourinary tract -09810 Gonococcal infection (acute) of upper genitourinary tract, site unspecified -09811 Gonococcal cystitis (acute) -09812 Gonococcal prostatitis (acute) -09813 Gonococcal epididymo-orchitis (acute) -09814 Gonococcal seminal vesiculitis (acute) -09815 Gonococcal cervicitis (acute) -09816 Gonococcal endometritis (acute) -09817 Gonococcal salpingitis, specified as acute -09819 Other gonococcal infection (acute) of upper genitourinary tract -0982 Gonococcal infection, chronic, of lower genitourinary tract -09830 Chronic gonococcal infection of upper genitourinary tract, site unspecified -09831 Gonococcal cystitis, chronic -09832 Gonococcal prostatitis, chronic -09833 Gonococcal epididymo-orchitis, chronic -09834 Gonococcal seminal vesiculitis, chronic -09835 Gonococcal cervicitis, chronic -09836 Gonococcal endometritis, chronic -09837 Gonococcal salpingitis (chronic) -09839 Other chronic gonococcal infection of upper genitourinary tract -09840 Gonococcal conjunctivitis (neonatorum) -09841 Gonococcal iridocyclitis -09842 Gonococcal endophthalmia -09843 Gonococcal keratitis -09849 Other gonococcal infection of eye -09850 Gonococcal arthritis -09851 Gonococcal synovitis and tenosynovitis -09852 Gonococcal bursitis -09853 Gonococcal spondylitis -09859 Other gonococcal infection of joint -0986 Gonococcal infection of pharynx -0987 Gonococcal infection of anus and rectum -09881 Gonococcal keratosis (blennorrhagica) -09882 Gonococcal meningitis -09883 Gonococcal pericarditis -09884 Gonococcal endocarditis -09885 Other gonococcal heart disease -09886 Gonococcal peritonitis -09889 Gonococcal infection of other specified sites -0990 Chancroid -0991 Lymphogranuloma venereum -0992 Granuloma inguinale -0993 Reiter's disease -09940 Other nongonococcal urethritis, unspecified -09941 Other nongonococcal urethritis, chlamydia trachomatis -09949 Other nongonococcal urethritis, other specified organism -09950 Other venereal diseases due to chlamydia trachomatis, unspecified site -09951 Other venereal diseases due to chlamydia trachomatis, pharynx -09952 Other venereal diseases due to chlamydia trachomatis, anus and rectum -09953 Other venereal diseases due to chlamydia trachomatis, lower genitourinary sites -09954 Other venereal diseases due to chlamydia trachomatis, other genitourinary sites -09955 Other venereal diseases due to chlamydia trachomatis, unspecified genitourinary site -09956 Other venereal diseases due to chlamydia trachomatis, peritoneum -09959 Other venereal diseases due to chlamydia trachomatis, other specified site -0998 Other specified venereal diseases -0999 Venereal disease, unspecified -1000 Leptospirosis icterohemorrhagica -10081 Leptospiral meningitis (aseptic) -10089 Other specified leptospiral infections -1009 Leptospirosis, unspecified -101 Vincent's angina -1020 Initial lesions of yaws -1021 Multiple papillomata due to yaws and wet crab yaws -1022 Other early skin lesions of yaws -1023 Hyperkeratosis due to yaws -1024 Gummata and ulcers due to yaws -1025 Gangosa -1026 Bone and joint lesions due to yaws -1027 Other manifestations of yaws -1028 Latent yaws -1029 Yaws, unspecified -1030 Primary lesions of pinta -1031 Intermediate lesions of pinta -1032 Late lesions of pinta -1033 Mixed lesions of pinta -1039 Pinta, unspecified -1040 Nonvenereal endemic syphilis -1048 Other specified spirochetal infections -1049 Spirochetal infection, unspecified -1100 Dermatophytosis of scalp and beard -1101 Dermatophytosis of nail -1102 Dermatophytosis of hand -1103 Dermatophytosis of groin and perianal area -1104 Dermatophytosis of foot -1105 Dermatophytosis of the body -1106 Deep seated dermatophytosis -1108 Dermatophytosis of other specified sites -1109 Dermatophytosis of unspecified site -1110 Pityriasis versicolor -1111 Tinea nigra -1112 Tinea blanca -1113 Black piedra -1118 Other specified dermatomycoses -1119 Dermatomycosis, unspecified -1120 Candidiasis of mouth -1121 Candidiasis of vulva and vagina -1122 Candidiasis of other urogenital sites -1123 Candidiasis of skin and nails -1124 Candidiasis of lung -1125 Disseminated candidiasis -11281 Candidal endocarditis -11282 Candidal otitis externa -11283 Candidal meningitis -11284 Candidal esophagitis -11285 Candidal enteritis -11289 Other candidiasis of other specified sites -1129 Candidiasis of unspecified site -1140 Primary coccidioidomycosis (pulmonary) -1141 Primary extrapulmonary coccidioidomycosis -1142 Coccidioidal meningitis -1143 Other forms of progressive coccidioidomycosis -1144 Chronic pulmonary coccidioidomycosis -1145 Pulmonary coccidioidomycosis, unspecified -1149 Coccidioidomycosis, unspecified -11500 Infection by Histoplasma capsulatum, without mention of manifestation -11501 Infection by Histoplasma capsulatum, meningitis -11502 Infection by Histoplasma capsulatum, retinitis -11503 Infection by Histoplasma capsulatum, pericarditis -11504 Infection by Histoplasma capsulatum, endocarditis -11505 Infection by Histoplasma capsulatum, pneumonia -11509 Infection by Histoplasma capsulatum, other -11510 Infection by Histoplasma duboisii, without mention of manifestation -11511 Infection by Histoplasma duboisii, meningitis -11512 Infection by Histoplasma duboisii, retinitis -11513 Infection by Histoplasma duboisii, pericarditis -11514 Infection by Histoplasma duboisii, endocarditis -11515 Infection by Histoplasma duboisii, pneumonia -11519 Infection by Histoplasma duboisii, other -11590 Histoplasmosis, unspecified, without mention of manifestation -11591 Histoplasmosis, unspecified, meningitis -11592 Histoplasmosis, unspecified, retinitis -11593 Histoplasmosis, unspecified, pericarditis -11594 Histoplasmosis, unspecified, endocarditis -11595 Histoplasmosis, unspecified, pneumonia -11599 Histoplasmosis, unspecified, other -1160 Blastomycosis -1161 Paracoccidioidomycosis -1162 Lobomycosis -1170 Rhinosporidiosis -1171 Sporotrichosis -1172 Chromoblastomycosis -1173 Aspergillosis -1174 Mycotic mycetomas -1175 Cryptococcosis -1176 Allescheriosis [Petriellidosis] -1177 Zygomycosis [Phycomycosis or Mucormycosis] -1178 Infection by dematiacious fungi [Phaehyphomycosis] -1179 Other and unspecified mycoses -118 Opportunistic mycoses -1200 Schistosomiasis due to schistosoma haematobium -1201 Schistosomiasis due to schistosoma mansoni -1202 Schistosomiasis due to schistosoma japonicum -1203 Cutaneous schistosomiasis -1208 Other specified schistosomiasis -1209 Schistosomiasis, unspecified -1210 Opisthorchiasis -1211 Clonorchiasis -1212 Paragonimiasis -1213 Fascioliasis -1214 Fasciolopsiasis -1215 Metagonimiasis -1216 Heterophyiasis -1218 Other specified trematode infections -1219 Trematode infection, unspecified -1220 Echinococcus granulosus infection of liver -1221 Echinococcus granulosus infection of lung -1222 Echinococcus granulosus infection of thyroid -1223 Echinococcus granulosus infection, other -1224 Echinococcus granulosus infection, unspecified -1225 Echinococcus multilocularis infection of liver -1226 Echinococcus multilocularis infection, other -1227 Echinococcus multilocularis infection, unspecified -1228 Echinococcosis, unspecified, of liver -1229 Echinococcosis, other and unspecified -1230 Taenia solium infection, intestinal form -1231 Cysticercosis -1232 Taenia saginata infection -1233 Taeniasis, unspecified -1234 Diphyllobothriasis, intestinal -1235 Sparganosis [larval diphyllobothriasis] -1236 Hymenolepiasis -1238 Other specified cestode infection -1239 Cestode infection, unspecified -124 Trichinosis -1250 Bancroftian filariasis -1251 Malayan filariasis -1252 Loiasis -1253 Onchocerciasis -1254 Dipetalonemiasis -1255 Mansonella ozzardi infection -1256 Other specified filariasis -1257 Dracontiasis -1259 Unspecified filariasis -1260 Ancylostomiasis due to ancylostoma duodenale -1261 Necatoriasis due to necator americanus -1262 Ancylostomiasis due to ancylostoma braziliense -1263 Ancylostomiasis due to ancylostoma ceylanicum -1268 Other specified ancylostoma -1269 Ancylostomiasis and necatoriasis, unspecified -1270 Ascariasis -1271 Anisakiasis -1272 Strongyloidiasis -1273 Trichuriasis -1274 Enterobiasis -1275 Capillariasis -1276 Trichostrongyliasis -1277 Other specified intestinal helminthiasis -1278 Mixed intestinal helminthiasis -1279 Intestinal helminthiasis, unspecified -1280 Toxocariasis -1281 Gnathostomiasis -1288 Other specified helminthiasis -1289 Helminth infection, unspecified -129 Intestinal parasitism, unspecified -1300 Meningoencephalitis due to toxoplasmosis -1301 Conjunctivitis due to toxoplasmosis -1302 Chorioretinitis due to toxoplasmosis -1303 Myocarditis due to toxoplasmosis -1304 Pneumonitis due to toxoplasmosis -1305 Hepatitis due to toxoplasmosis -1307 Toxoplasmosis of other specified sites -1308 Multisystemic disseminated toxoplasmosis -1309 Toxoplasmosis, unspecified -13100 Urogenital trichomoniasis, unspecified -13101 Trichomonal vulvovaginitis -13102 Trichomonal urethritis -13103 Trichomonal prostatitis -13109 Other urogenital trichomoniasis -1318 Trichomoniasis of other specified sites -1319 Trichomoniasis, unspecified -1320 Pediculus capitis [head louse] -1321 Pediculus corporis [body louse] -1322 Phthirus pubis [pubic louse] -1323 Mixed pediculosis infestation -1329 Pediculosis, unspecified -1330 Scabies -1338 Other acariasis -1339 Acariasis, unspecified -1340 Myiasis -1341 Other arthropod infestation -1342 Hirudiniasis -1348 Other specified infestations -1349 Infestation, unspecified -135 Sarcoidosis -1360 Ainhum -1361 Behcet's syndrome -13621 Specific infection due to acanthamoeba -13629 Other specific infections by free-living amebae -1363 Pneumocystosis -1364 Psorospermiasis -1365 Sarcosporidiosis -1368 Other specified infectious and parasitic diseases -1369 Unspecified infectious and parasitic diseases -1370 Late effects of respiratory or unspecified tuberculosis -1371 Late effects of central nervous system tuberculosis -1372 Late effects of genitourinary tuberculosis -1373 Late effects of tuberculosis of bones and joints -1374 Late effects of tuberculosis of other specified organs -138 Late effects of acute poliomyelitis -1390 Late effects of viral encephalitis -1391 Late effects of trachoma -1398 Late effects of other and unspecified infectious and parasitic diseases -1400 Malignant neoplasm of upper lip, vermilion border -1401 Malignant neoplasm of lower lip, vermilion border -1403 Malignant neoplasm of upper lip, inner aspect -1404 Malignant neoplasm of lower lip, inner aspect -1405 Malignant neoplasm of lip, unspecified, inner aspect -1406 Malignant neoplasm of commissure of lip -1408 Malignant neoplasm of other sites of lip -1409 Malignant neoplasm of lip, unspecified, vermilion border -1410 Malignant neoplasm of base of tongue -1411 Malignant neoplasm of dorsal surface of tongue -1412 Malignant neoplasm of tip and lateral border of tongue -1413 Malignant neoplasm of ventral surface of tongue -1414 Malignant neoplasm of anterior two-thirds of tongue, part unspecified -1415 Malignant neoplasm of junctional zone of tongue -1416 Malignant neoplasm of lingual tonsil -1418 Malignant neoplasm of other sites of tongue -1419 Malignant neoplasm of tongue, unspecified -1420 Malignant neoplasm of parotid gland -1421 Malignant neoplasm of submandibular gland -1422 Malignant neoplasm of sublingual gland -1428 Malignant neoplasm of other major salivary glands -1429 Malignant neoplasm of salivary gland, unspecified -1430 Malignant neoplasm of upper gum -1431 Malignant neoplasm of lower gum -1438 Malignant neoplasm of other sites of gum -1439 Malignant neoplasm of gum, unspecified -1440 Malignant neoplasm of anterior portion of floor of mouth -1441 Malignant neoplasm of lateral portion of floor of mouth -1448 Malignant neoplasm of other sites of floor of mouth -1449 Malignant neoplasm of floor of mouth, part unspecified -1450 Malignant neoplasm of cheek mucosa -1451 Malignant neoplasm of vestibule of mouth -1452 Malignant neoplasm of hard palate -1453 Malignant neoplasm of soft palate -1454 Malignant neoplasm of uvula -1455 Malignant neoplasm of palate, unspecified -1456 Malignant neoplasm of retromolar area -1458 Malignant neoplasm of other specified parts of mouth -1459 Malignant neoplasm of mouth, unspecified -1460 Malignant neoplasm of tonsil -1461 Malignant neoplasm of tonsillar fossa -1462 Malignant neoplasm of tonsillar pillars (anterior) (posterior) -1463 Malignant neoplasm of vallecula epiglottica -1464 Malignant neoplasm of anterior aspect of epiglottis -1465 Malignant neoplasm of junctional region of oropharynx -1466 Malignant neoplasm of lateral wall of oropharynx -1467 Malignant neoplasm of posterior wall of oropharynx -1468 Malignant neoplasm of other specified sites of oropharynx -1469 Malignant neoplasm of oropharynx, unspecified site -1470 Malignant neoplasm of superior wall of nasopharynx -1471 Malignant neoplasm of posterior wall of nasopharynx -1472 Malignant neoplasm of lateral wall of nasopharynx -1473 Malignant neoplasm of anterior wall of nasopharynx -1478 Malignant neoplasm of other specified sites of nasopharynx -1479 Malignant neoplasm of nasopharynx, unspecified site -1480 Malignant neoplasm of postcricoid region of hypopharynx -1481 Malignant neoplasm of pyriform sinus -1482 Malignant neoplasm of aryepiglottic fold, hypopharyngeal aspect -1483 Malignant neoplasm of posterior hypopharyngeal wall -1488 Malignant neoplasm of other specified sites of hypopharynx -1489 Malignant neoplasm of hypopharynx, unspecified site -1490 Malignant neoplasm of pharynx, unspecified -1491 Malignant neoplasm of waldeyer's ring -1498 Malignant neoplasm of other sites within the lip and oral cavity -1499 Malignant neoplasm of ill-defined sites within the lip and oral cavity -1500 Malignant neoplasm of cervical esophagus -1501 Malignant neoplasm of thoracic esophagus -1502 Malignant neoplasm of abdominal esophagus -1503 Malignant neoplasm of upper third of esophagus -1504 Malignant neoplasm of middle third of esophagus -1505 Malignant neoplasm of lower third of esophagus -1508 Malignant neoplasm of other specified part of esophagus -1509 Malignant neoplasm of esophagus, unspecified site -1510 Malignant neoplasm of cardia -1511 Malignant neoplasm of pylorus -1512 Malignant neoplasm of pyloric antrum -1513 Malignant neoplasm of fundus of stomach -1514 Malignant neoplasm of body of stomach -1515 Malignant neoplasm of lesser curvature of stomach, unspecified -1516 Malignant neoplasm of greater curvature of stomach, unspecified -1518 Malignant neoplasm of other specified sites of stomach -1519 Malignant neoplasm of stomach, unspecified site -1520 Malignant neoplasm of duodenum -1521 Malignant neoplasm of jejunum -1522 Malignant neoplasm of ileum -1523 Malignant neoplasm of Meckel's diverticulum -1528 Malignant neoplasm of other specified sites of small intestine -1529 Malignant neoplasm of small intestine, unspecified site -1530 Malignant neoplasm of hepatic flexure -1531 Malignant neoplasm of transverse colon -1532 Malignant neoplasm of descending colon -1533 Malignant neoplasm of sigmoid colon -1534 Malignant neoplasm of cecum -1535 Malignant neoplasm of appendix vermiformis -1536 Malignant neoplasm of ascending colon -1537 Malignant neoplasm of splenic flexure -1538 Malignant neoplasm of other specified sites of large intestine -1539 Malignant neoplasm of colon, unspecified site -1540 Malignant neoplasm of rectosigmoid junction -1541 Malignant neoplasm of rectum -1542 Malignant neoplasm of anal canal -1543 Malignant neoplasm of anus, unspecified site -1548 Malignant neoplasm of other sites of rectum, rectosigmoid junction, and anus -1550 Malignant neoplasm of liver, primary -1551 Malignant neoplasm of intrahepatic bile ducts -1552 Malignant neoplasm of liver, not specified as primary or secondary -1560 Malignant neoplasm of gallbladder -1561 Malignant neoplasm of extrahepatic bile ducts -1562 Malignant neoplasm of ampulla of vater -1568 Malignant neoplasm of other specified sites of gallbladder and extrahepatic bile ducts -1569 Malignant neoplasm of biliary tract, part unspecified site -1570 Malignant neoplasm of head of pancreas -1571 Malignant neoplasm of body of pancreas -1572 Malignant neoplasm of tail of pancreas -1573 Malignant neoplasm of pancreatic duct -1574 Malignant neoplasm of islets of langerhans -1578 Malignant neoplasm of other specified sites of pancreas -1579 Malignant neoplasm of pancreas, part unspecified -1580 Malignant neoplasm of retroperitoneum -1588 Malignant neoplasm of specified parts of peritoneum -1589 Malignant neoplasm of peritoneum, unspecified -1590 Malignant neoplasm of intestinal tract, part unspecified -1591 Malignant neoplasm of spleen, not elsewhere classified -1598 Malignant neoplasm of other sites of digestive system and intra-abdominal organs -1599 Malignant neoplasm of ill-defined sites within the digestive organs and peritoneum -1600 Malignant neoplasm of nasal cavities -1601 Malignant neoplasm of auditory tube, middle ear, and mastoid air cells -1602 Malignant neoplasm of maxillary sinus -1603 Malignant neoplasm of ethmoidal sinus -1604 Malignant neoplasm of frontal sinus -1605 Malignant neoplasm of sphenoidal sinus -1608 Malignant neoplasm of other accessory sinuses -1609 Malignant neoplasm of accessory sinus, unspecified -1610 Malignant neoplasm of glottis -1611 Malignant neoplasm of supraglottis -1612 Malignant neoplasm of subglottis -1613 Malignant neoplasm of laryngeal cartilages -1618 Malignant neoplasm of other specified sites of larynx -1619 Malignant neoplasm of larynx, unspecified -1620 Malignant neoplasm of trachea -1622 Malignant neoplasm of main bronchus -1623 Malignant neoplasm of upper lobe, bronchus or lung -1624 Malignant neoplasm of middle lobe, bronchus or lung -1625 Malignant neoplasm of lower lobe, bronchus or lung -1628 Malignant neoplasm of other parts of bronchus or lung -1629 Malignant neoplasm of bronchus and lung, unspecified -1630 Malignant neoplasm of parietal pleura -1631 Malignant neoplasm of visceral pleura -1638 Malignant neoplasm of other specified sites of pleura -1639 Malignant neoplasm of pleura, unspecified -1640 Malignant neoplasm of thymus -1641 Malignant neoplasm of heart -1642 Malignant neoplasm of anterior mediastinum -1643 Malignant neoplasm of posterior mediastinum -1648 Malignant neoplasm of other parts of mediastinum -1649 Malignant neoplasm of mediastinum, part unspecified -1650 Malignant neoplasm of upper respiratory tract, part unspecified -1658 Malignant neoplasm of other sites within the respiratory system and intrathoracic organs -1659 Malignant neoplasm of ill-defined sites within the respiratory system -1700 Malignant neoplasm of bones of skull and face, except mandible -1701 Malignant neoplasm of mandible -1702 Malignant neoplasm of vertebral column, excluding sacrum and coccyx -1703 Malignant neoplasm of ribs, sternum, and clavicle -1704 Malignant neoplasm of scapula and long bones of upper limb -1705 Malignant neoplasm of short bones of upper limb -1706 Malignant neoplasm of pelvic bones, sacrum, and coccyx -1707 Malignant neoplasm of long bones of lower limb -1708 Malignant neoplasm of short bones of lower limb -1709 Malignant neoplasm of bone and articular cartilage, site unspecified -1710 Malignant neoplasm of connective and other soft tissue of head, face, and neck -1712 Malignant neoplasm of connective and other soft tissue of upper limb, including shoulder -1713 Malignant neoplasm of connective and other soft tissue of lower limb, including hip -1714 Malignant neoplasm of connective and other soft tissue of thorax -1715 Malignant neoplasm of connective and other soft tissue of abdomen -1716 Malignant neoplasm of connective and other soft tissue of pelvis -1717 Malignant neoplasm of connective and other soft tissue of trunk, unspecified -1718 Malignant neoplasm of other specified sites of connective and other soft tissue -1719 Malignant neoplasm of connective and other soft tissue, site unspecified -1720 Malignant melanoma of skin of lip -1721 Malignant melanoma of skin of eyelid, including canthus -1722 Malignant melanoma of skin of ear and external auditory canal -1723 Malignant melanoma of skin of other and unspecified parts of face -1724 Malignant melanoma of skin of scalp and neck -1725 Malignant melanoma of skin of trunk, except scrotum -1726 Malignant melanoma of skin of upper limb, including shoulder -1727 Malignant melanoma of skin of lower limb, including hip -1728 Malignant melanoma of other specified sites of skin -1729 Melanoma of skin, site unspecified -17300 Unspecified malignant neoplasm of skin of lip -17301 Basal cell carcinoma of skin of lip -17302 Squamous cell carcinoma of skin of lip -17309 Other specified malignant neoplasm of skin of lip -17310 Unspecified malignant neoplasm of eyelid, including canthus -17311 Basal cell carcinoma of eyelid, including canthus -17312 Squamous cell carcinoma of eyelid, including canthus -17319 Other specified malignant neoplasm of eyelid, including canthus -17320 Unspecified malignant neoplasm of skin of ear and external auditory canal -17321 Basal cell carcinoma of skin of ear and external auditory canal -17322 Squamous cell carcinoma of skin of ear and external auditory canal -17329 Other specified malignant neoplasm of skin of ear and external auditory canal -17330 Unspecified malignant neoplasm of skin of other and unspecified parts of face -17331 Basal cell carcinoma of skin of other and unspecified parts of face -17332 Squamous cell carcinoma of skin of other and unspecified parts of face -17339 Other specified malignant neoplasm of skin of other and unspecified parts of face -17340 Unspecified malignant neoplasm of scalp and skin of neck -17341 Basal cell carcinoma of scalp and skin of neck -17342 Squamous cell carcinoma of scalp and skin of neck -17349 Other specified malignant neoplasm of scalp and skin of neck -17350 Unspecified malignant neoplasm of skin of trunk, except scrotum -17351 Basal cell carcinoma of skin of trunk, except scrotum -17352 Squamous cell carcinoma of skin of trunk, except scrotum -17359 Other specified malignant neoplasm of skin of trunk, except scrotum -17360 Unspecified malignant neoplasm of skin of upper limb, including shoulder -17361 Basal cell carcinoma of skin of upper limb, including shoulder -17362 Squamous cell carcinoma of skin of upper limb, including shoulder -17369 Other specified malignant neoplasm of skin of upper limb, including shoulder -17370 Unspecified malignant neoplasm of skin of lower limb, including hip -17371 Basal cell carcinoma of skin of lower limb, including hip -17372 Squamous cell carcinoma of skin of lower limb, including hip -17379 Other specified malignant neoplasm of skin of lower limb, including hip -17380 Unspecified malignant neoplasm of other specified sites of skin -17381 Basal cell carcinoma of other specified sites of skin -17382 Squamous cell carcinoma of other specified sites of skin -17389 Other specified malignant neoplasm of other specified sites of skin -17390 Unspecified malignant neoplasm of skin, site unspecified -17391 Basal cell carcinoma of skin, site unspecified -17392 Squamous cell carcinoma of skin, site unspecified -17399 Other specified malignant neoplasm of skin, site unspecified -1740 Malignant neoplasm of nipple and areola of female breast -1741 Malignant neoplasm of central portion of female breast -1742 Malignant neoplasm of upper-inner quadrant of female breast -1743 Malignant neoplasm of lower-inner quadrant of female breast -1744 Malignant neoplasm of upper-outer quadrant of female breast -1745 Malignant neoplasm of lower-outer quadrant of female breast -1746 Malignant neoplasm of axillary tail of female breast -1748 Malignant neoplasm of other specified sites of female breast -1749 Malignant neoplasm of breast (female), unspecified -1750 Malignant neoplasm of nipple and areola of male breast -1759 Malignant neoplasm of other and unspecified sites of male breast -1760 Kaposi's sarcoma, skin -1761 Kaposi's sarcoma, soft tissue -1762 Kaposi's sarcoma, palate -1763 Kaposi's sarcoma, gastrointestinal sites -1764 Kaposi's sarcoma, lung -1765 Kaposi's sarcoma, lymph nodes -1768 Kaposi's sarcoma, other specified sites -1769 Kaposi's sarcoma, unspecified site -179 Malignant neoplasm of uterus, part unspecified -1800 Malignant neoplasm of endocervix -1801 Malignant neoplasm of exocervix -1808 Malignant neoplasm of other specified sites of cervix -1809 Malignant neoplasm of cervix uteri, unspecified site -181 Malignant neoplasm of placenta -1820 Malignant neoplasm of corpus uteri, except isthmus -1821 Malignant neoplasm of isthmus -1828 Malignant neoplasm of other specified sites of body of uterus -1830 Malignant neoplasm of ovary -1832 Malignant neoplasm of fallopian tube -1833 Malignant neoplasm of broad ligament of uterus -1834 Malignant neoplasm of parametrium -1835 Malignant neoplasm of round ligament of uterus -1838 Malignant neoplasm of other specified sites of uterine adnexa -1839 Malignant neoplasm of uterine adnexa, unspecified site -1840 Malignant neoplasm of vagina -1841 Malignant neoplasm of labia majora -1842 Malignant neoplasm of labia minora -1843 Malignant neoplasm of clitoris -1844 Malignant neoplasm of vulva, unspecified site -1848 Malignant neoplasm of other specified sites of female genital organs -1849 Malignant neoplasm of female genital organ, site unspecified -185 Malignant neoplasm of prostate -1860 Malignant neoplasm of undescended testis -1869 Malignant neoplasm of other and unspecified testis -1871 Malignant neoplasm of prepuce -1872 Malignant neoplasm of glans penis -1873 Malignant neoplasm of body of penis -1874 Malignant neoplasm of penis, part unspecified -1875 Malignant neoplasm of epididymis -1876 Malignant neoplasm of spermatic cord -1877 Malignant neoplasm of scrotum -1878 Malignant neoplasm of other specified sites of male genital organs -1879 Malignant neoplasm of male genital organ, site unspecified -1880 Malignant neoplasm of trigone of urinary bladder -1881 Malignant neoplasm of dome of urinary bladder -1882 Malignant neoplasm of lateral wall of urinary bladder -1883 Malignant neoplasm of anterior wall of urinary bladder -1884 Malignant neoplasm of posterior wall of urinary bladder -1885 Malignant neoplasm of bladder neck -1886 Malignant neoplasm of ureteric orifice -1887 Malignant neoplasm of urachus -1888 Malignant neoplasm of other specified sites of bladder -1889 Malignant neoplasm of bladder, part unspecified -1890 Malignant neoplasm of kidney, except pelvis -1891 Malignant neoplasm of renal pelvis -1892 Malignant neoplasm of ureter -1893 Malignant neoplasm of urethra -1894 Malignant neoplasm of paraurethral glands -1898 Malignant neoplasm of other specified sites of urinary organs -1899 Malignant neoplasm of urinary organ, site unspecified -1900 Malignant neoplasm of eyeball, except conjunctiva, cornea, retina, and choroid -1901 Malignant neoplasm of orbit -1902 Malignant neoplasm of lacrimal gland -1903 Malignant neoplasm of conjunctiva -1904 Malignant neoplasm of cornea -1905 Malignant neoplasm of retina -1906 Malignant neoplasm of choroid -1907 Malignant neoplasm of lacrimal duct -1908 Malignant neoplasm of other specified sites of eye -1909 Malignant neoplasm of eye, part unspecified -1910 Malignant neoplasm of cerebrum, except lobes and ventricles -1911 Malignant neoplasm of frontal lobe -1912 Malignant neoplasm of temporal lobe -1913 Malignant neoplasm of parietal lobe -1914 Malignant neoplasm of occipital lobe -1915 Malignant neoplasm of ventricles -1916 Malignant neoplasm of cerebellum nos -1917 Malignant neoplasm of brain stem -1918 Malignant neoplasm of other parts of brain -1919 Malignant neoplasm of brain, unspecified -1920 Malignant neoplasm of cranial nerves -1921 Malignant neoplasm of cerebral meninges -1922 Malignant neoplasm of spinal cord -1923 Malignant neoplasm of spinal meninges -1928 Malignant neoplasm of other specified sites of nervous system -1929 Malignant neoplasm of nervous system, part unspecified -193 Malignant neoplasm of thyroid gland -1940 Malignant neoplasm of adrenal gland -1941 Malignant neoplasm of parathyroid gland -1943 Malignant neoplasm of pituitary gland and craniopharyngeal duct -1944 Malignant neoplasm of pineal gland -1945 Malignant neoplasm of carotid body -1946 Malignant neoplasm of aortic body and other paraganglia -1948 Malignant neoplasm of other endocrine glands and related structures -1949 Malignant neoplasm of endocrine gland, site unspecified -1950 Malignant neoplasm of head, face, and neck -1951 Malignant neoplasm of thorax -1952 Malignant neoplasm of abdomen -1953 Malignant neoplasm of pelvis -1954 Malignant neoplasm of upper limb -1955 Malignant neoplasm of lower limb -1958 Malignant neoplasm of other specified sites -1960 Secondary and unspecified malignant neoplasm of lymph nodes of head, face, and neck -1961 Secondary and unspecified malignant neoplasm of intrathoracic lymph nodes -1962 Secondary and unspecified malignant neoplasm of intra-abdominal lymph nodes -1963 Secondary and unspecified malignant neoplasm of lymph nodes of axilla and upper limb -1965 Secondary and unspecified malignant neoplasm of lymph nodes of inguinal region and lower limb -1966 Secondary and unspecified malignant neoplasm of intrapelvic lymph nodes -1968 Secondary and unspecified malignant neoplasm of lymph nodes of multiple sites -1969 Secondary and unspecified malignant neoplasm of lymph nodes, site unspecified -1970 Secondary malignant neoplasm of lung -1971 Secondary malignant neoplasm of mediastinum -1972 Secondary malignant neoplasm of pleura -1973 Secondary malignant neoplasm of other respiratory organs -1974 Secondary malignant neoplasm of small intestine including duodenum -1975 Secondary malignant neoplasm of large intestine and rectum -1976 Secondary malignant neoplasm of retroperitoneum and peritoneum -1977 Malignant neoplasm of liver, secondary -1978 Secondary malignant neoplasm of other digestive organs and spleen -1980 Secondary malignant neoplasm of kidney -1981 Secondary malignant neoplasm of other urinary organs -1982 Secondary malignant neoplasm of skin -1983 Secondary malignant neoplasm of brain and spinal cord -1984 Secondary malignant neoplasm of other parts of nervous system -1985 Secondary malignant neoplasm of bone and bone marrow -1986 Secondary malignant neoplasm of ovary -1987 Secondary malignant neoplasm of adrenal gland -19881 Secondary malignant neoplasm of breast -19882 Secondary malignant neoplasm of genital organs -19889 Secondary malignant neoplasm of other specified sites -1990 Disseminated malignant neoplasm without specification of site -1991 Other malignant neoplasm without specification of site -1992 Malignant neoplasm associated with transplant organ -20000 Reticulosarcoma, unspecified site, extranodal and solid organ sites -20001 Reticulosarcoma, lymph nodes of head, face, and neck -20002 Reticulosarcoma, intrathoracic lymph nodes -20003 Reticulosarcoma, intra-abdominal lymph nodes -20004 Reticulosarcoma, lymph nodes of axilla and upper limb -20005 Reticulosarcoma, lymph nodes of inguinal region and lower limb -20006 Reticulosarcoma, intrapelvic lymph nodes -20007 Reticulosarcoma, spleen -20008 Reticulosarcoma, lymph nodes of multiple sites -20010 Lymphosarcoma, unspecified site, extranodal and solid organ sites -20011 Lymphosarcoma, lymph nodes of head, face, and neck -20012 Lymphosarcoma, intrathoracic lymph nodes -20013 Lymphosarcoma, intra-abdominal lymph nodes -20014 Lymphosarcoma, lymph nodes of axilla and upper limb -20015 Lymphosarcoma, lymph nodes of inguinal region and lower limb -20016 Lymphosarcoma, intrapelvic lymph nodes -20017 Lymphosarcoma, spleen -20018 Lymphosarcoma, lymph nodes of multiple sites -20020 Burkitt's tumor or lymphoma, unspecified site, extranodal and solid organ sites -20021 Burkitt's tumor or lymphoma, lymph nodes of head, face, and neck -20022 Burkitt's tumor or lymphoma, intrathoracic lymph nodes -20023 Burkitt's tumor or lymphoma, intra-abdominal lymph nodes -20024 Burkitt's tumor or lymphoma, lymph nodes of axilla and upper limb -20025 Burkitt's tumor or lymphoma, lymph nodes of inguinal region and lower limb -20026 Burkitt's tumor or lymphoma, intrapelvic lymph nodes -20027 Burkitt's tumor or lymphoma, spleen -20028 Burkitt's tumor or lymphoma, lymph nodes of multiple sites -20030 Marginal zone lymphoma, unspecified site, extranodal and solid organ sites -20031 Marginal zone lymphoma, lymph nodes of head, face, and neck -20032 Marginal zone lymphoma, intrathoracic lymph nodes -20033 Marginal zone lymphoma, intraabdominal lymph nodes -20034 Marginal zone lymphoma, lymph nodes of axilla and upper limb -20035 Marginal zone lymphoma, lymph nodes of inguinal region and lower limb -20036 Marginal zone lymphoma, intrapelvic lymph nodes -20037 Marginal zone lymphoma, spleen -20038 Marginal zone lymphoma, lymph nodes of multiple sites -20040 Mantle cell lymphoma, unspecified site, extranodal and solid organ sites -20041 Mantle cell lymphoma, lymph nodes of head, face, and neck -20042 Mantle cell lymphoma, intrathoracic lymph nodes -20043 Mantle cell lymphoma, intra-abdominal lymph nodes -20044 Mantle cell lymphoma, lymph nodes of axilla and upper limb -20045 Mantle cell lymphoma, lymph nodes of inguinal region and lower limb -20046 Mantle cell lymphoma, intrapelvic lymph nodes -20047 Mantle cell lymphoma, spleen -20048 Mantle cell lymphoma, lymph nodes of multiple sites -20050 Primary central nervous system lymphoma, unspecified site, extranodal and solid organ sites -20051 Primary central nervous system lymphoma, lymph nodes of head, face, and neck -20052 Primary central nervous system lymphoma, intrathoracic lymph nodes -20053 Primary central nervous system lymphoma, intra-abdominal lymph nodes -20054 Primary central nervous system lymphoma, lymph nodes of axilla and upper limb -20055 Primary central nervous system lymphoma, lymph nodes of inguinal region and lower limb -20056 Primary central nervous system lymphoma, intrapelvic lymph nodes -20057 Primary central nervous system lymphoma, spleen -20058 Primary central nervous system lymphoma, lymph nodes of multiple sites -20060 Anaplastic large cell lymphoma, unspecified site, extranodal and solid organ sites -20061 Anaplastic large cell lymphoma, lymph nodes of head, face, and neck -20062 Anaplastic large cell lymphoma, intrathoracic lymph nodes -20063 Anaplastic large cell lymphoma, intra-abdominal lymph nodes -20064 Anaplastic large cell lymphoma, lymph nodes of axilla and upper limb -20065 Anaplastic large cell lymphoma, lymph nodes of inguinal region and lower limb -20066 Anaplastic large cell lymphoma, intrapelvic lymph nodes -20067 Anaplastic large cell lymphoma, spleen -20068 Anaplastic large cell lymphoma, lymph nodes of multiple sites -20070 Large cell lymphoma, unspecified site, extranodal and solid organ sites -20071 Large cell lymphoma, lymph nodes of head, face, and neck -20072 Large cell lymphoma, intrathoracic lymph nodes -20073 Large cell lymphoma, intra-abdominal lymph nodes -20074 Large cell lymphoma, lymph nodes of axilla and upper limb -20075 Large cell lymphoma, lymph nodes of inguinal region and lower limb -20076 Large cell lymphoma, intrapelvic lymph nodes -20077 Large cell lymphoma, spleen -20078 Large cell lymphoma, lymph nodes of multiple sites -20080 Other named variants of lymphosarcoma and reticulosarcoma, unspecified site, extranodal and solid organ sites -20081 Other named variants of lymphosarcoma and reticulosarcoma, lymph nodes of head, face, and neck -20082 Other named variants of lymphosarcoma and reticulosarcoma,intrathoracic lymph nodes -20083 Other named variants of lymphosarcoma and reticulosarcoma, intra-abdominal lymph nodes -20084 Other named variants of lymphosarcoma and reticulosarcoma, lymph nodes of axilla and upper limb -20085 Other named variants of lymphosarcoma and reticulosarcoma, lymph nodes of inguinal region and lower limb -20086 Other named variants of lymphosarcoma and reticulosarcoma, intrapelvic lymph nodes -20087 Other named variants of lymphosarcoma and reticulosarcoma, spleen -20088 Other named variants of lymphosarcoma and reticulosarcoma, lymph nodes of multiple sites -20100 Hodgkin's paragranuloma, unspecified site, extranodal and solid organ sites -20101 Hodgkin's paragranuloma, lymph nodes of head, face, and neck -20102 Hodgkin's paragranuloma, intrathoracic lymph nodes -20103 Hodgkin's paragranuloma, intra-abdominal lymph nodes -20104 Hodgkin's paragranuloma, lymph nodes of axilla and upper limb -20105 Hodgkin's paragranuloma, lymph nodes of inguinal region and lower limb -20106 Hodgkin's paragranuloma, intrapelvic lymph nodes -20107 Hodgkin's paragranuloma, spleen -20108 Hodgkin's paragranuloma, lymph nodes of multiple sites -20110 Hodgkin's granuloma, unspecified site, extranodal and solid organ sites -20111 Hodgkin's granuloma, lymph nodes of head, face, and neck -20112 Hodgkin's granuloma, intrathoracic lymph nodes -20113 Hodgkin's granuloma, intra-abdominal lymph nodes -20114 Hodgkin's granuloma, lymph nodes of axilla and upper limb -20115 Hodgkin's granuloma, lymph nodes of inguinal region and lower limb -20116 Hodgkin's granuloma, intrapelvic lymph nodes -20117 Hodgkin's granuloma, spleen -20118 Hodgkin's granuloma, lymph nodes of multiple sites -20120 Hodgkin's sarcoma, unspecified site, extranodal and solid organ sites -20121 Hodgkin's sarcoma, lymph nodes of head, face, and neck -20122 Hodgkin's sarcoma, intrathoracic lymph nodes -20123 Hodgkin's sarcoma, intra-abdominal lymph nodes -20124 Hodgkin's sarcoma, lymph nodes of axilla and upper limb -20125 Hodgkin's sarcoma, lymph nodes of inguinal region and lower limb -20126 Hodgkin's sarcoma, intrapelvic lymph nodes -20127 Hodgkin's sarcoma, spleen -20128 Hodgkin's sarcoma, lymph nodes of multiple sites -20140 Hodgkin's disease, lymphocytic-histiocytic predominance, unspecified site, extranodal and solid organ sites -20141 Hodgkin's disease, lymphocytic-histiocytic predominance, lymph nodes of head, face, and neck -20142 Hodgkin's disease, lymphocytic-histiocytic predominance, intrathoracic lymph nodes -20143 Hodgkin's disease, lymphocytic-histiocytic predominance, intra-abdominal lymph nodes -20144 Hodgkin's disease, lymphocytic-histiocytic predominance, lymph nodes of axilla and upper limb -20145 Hodgkin's disease, lymphocytic-histiocytic predominance, lymph nodes of inguinal region and lower limb -20146 Hodgkin's disease, lymphocytic-histiocytic predominance, intrapelvic lymph nodes -20147 Hodgkin's disease, lymphocytic-histiocytic predominance, spleen -20148 Hodgkin's disease, lymphocytic-histiocytic predominance, lymph nodes of multiple sites -20150 Hodgkin's disease, nodular sclerosis, unspecified site, extranodal and solid organ sites -20151 Hodgkin's disease, nodular sclerosis, lymph nodes of head, face, and neck -20152 Hodgkin's disease, nodular sclerosis, intrathoracic lymph nodes -20153 Hodgkin's disease, nodular sclerosis, intra-abdominal lymph nodes -20154 Hodgkin's disease, nodular sclerosis, lymph nodes of axilla and upper limb -20155 Hodgkin's disease, nodular sclerosis, lymph nodes of inguinal region and lower limb -20156 Hodgkin's disease, nodular sclerosis, intrapelvic lymph nodes -20157 Hodgkin's disease, nodular sclerosis, spleen -20158 Hodgkin's disease, nodular sclerosis, lymph nodes of multiple sites -20160 Hodgkin's disease, mixed cellularity, unspecified site, extranodal and solid organ sites -20161 Hodgkin's disease, mixed cellularity, lymph nodes of head, face, and neck -20162 Hodgkin's disease, mixed cellularity, intrathoracic lymph nodes -20163 Hodgkin's disease, mixed cellularity, intra-abdominal lymph nodes -20164 Hodgkin's disease, mixed cellularity, lymph nodes of axilla and upper limb -20165 Hodgkin's disease, mixed cellularity, lymph nodes of inguinal region and lower limb -20166 Hodgkin's disease, mixed cellularity, intrapelvic lymph nodes -20167 Hodgkin's disease, mixed cellularity, spleen -20168 Hodgkin's disease, mixed cellularity, lymph nodes of multiple sites -20170 Hodgkin's disease, lymphocytic depletion, unspecified site, extranodal and solid organ sites -20171 Hodgkin's disease, lymphocytic depletion, lymph nodes of head, face, and neck -20172 Hodgkin's disease, lymphocytic depletion, intrathoracic lymph nodes -20173 Hodgkin's disease, lymphocytic depletion, intra-abdominal lymph nodes -20174 Hodgkin's disease, lymphocytic depletion, lymph nodes of axilla and upper limb -20175 Hodgkin's disease, lymphocytic depletion, lymph nodes of inguinal region and lower limb -20176 Hodgkin's disease, lymphocytic depletion, intrapelvic lymph nodes -20177 Hodgkin's disease, lymphocytic depletion, spleen -20178 Hodgkin's disease, lymphocytic depletion, lymph nodes of multiple sites -20190 Hodgkin's disease, unspecified type, unspecified site, extranodal and solid organ sites -20191 Hodgkin's disease, unspecified type, lymph nodes of head, face, and neck -20192 Hodgkin's disease, unspecified type, intrathoracic lymph nodes -20193 Hodgkin's disease, unspecified type, intra-abdominal lymph nodes -20194 Hodgkin's disease, unspecified type, lymph nodes of axilla and upper limb -20195 Hodgkin's disease, unspecified type, lymph nodes of inguinal region and lower limb -20196 Hodgkin's disease, unspecified type, intrapelvic lymph nodes -20197 Hodgkin's disease, unspecified type, spleen -20198 Hodgkin's disease, unspecified type, lymph nodes of multiple sites -20200 Nodular lymphoma, unspecified site, extranodal and solid organ sites -20201 Nodular lymphoma, lymph nodes of head, face, and neck -20202 Nodular lymphoma, intrathoracic lymph nodes -20203 Nodular lymphoma, intra-abdominal lymph nodes -20204 Nodular lymphoma, lymph nodes of axilla and upper limb -20205 Nodular lymphoma, lymph nodes of inguinal region and lower limb -20206 Nodular lymphoma, intrapelvic lymph nodes -20207 Nodular lymphoma, spleen -20208 Nodular lymphoma, lymph nodes of multiple sites -20210 Mycosis fungoides, unspecified site, extranodal and solid organ sites -20211 Mycosis fungoides, lymph nodes of head, face, and neck -20212 Mycosis fungoides, intrathoracic lymph nodes -20213 Mycosis fungoides, intra-abdominal lymph nodes -20214 Mycosis fungoides, lymph nodes of axilla and upper limb -20215 Mycosis fungoides, lymph nodes of inguinal region and lower limb -20216 Mycosis fungoides, intrapelvic lymph nodes -20217 Mycosis fungoides, spleen -20218 Mycosis fungoides, lymph nodes of multiple sites -20220 Sezary's disease, unspecified site, extranodal and solid organ sites -20221 Sezary's disease, lymph nodes of head, face, and neck -20222 Sezary's disease, intrathoracic lymph nodes -20223 Sezary's disease, intra-abdominal lymph nodes -20224 Sezary's disease, lymph nodes of axilla and upper limb -20225 Sezary's disease, lymph nodes of inguinal region and lower limb -20226 Sezary's disease, intrapelvic lymph nodes -20227 Sezary's disease, spleen -20228 Sezary's disease, lymph nodes of multiple sites -20230 Malignant histiocytosis, unspecified site, extranodal and solid organ sites -20231 Malignant histiocytosis, lymph nodes of head, face, and neck -20232 Malignant histiocytosis, intrathoracic lymph nodes -20233 Malignant histiocytosis, intra-abdominal lymph nodes -20234 Malignant histiocytosis, lymph nodes of axilla and upper limb -20235 Malignant histiocytosis, lymph nodes of inguinal region and lower limb -20236 Malignant histiocytosis, intrapelvic lymph nodes -20237 Malignant histiocytosis, spleen -20238 Malignant histiocytosis, lymph nodes of multiple sites -20240 Leukemic reticuloendotheliosis, unspecified site, extranodal and solid organ sites -20241 Leukemic reticuloendotheliosis, lymph nodes of head, face, and neck -20242 Leukemic reticuloendotheliosis, intrathoracic lymph nodes -20243 Leukemic reticuloendotheliosis, intra-abdominal lymph nodes -20244 Leukemic reticuloendotheliosis, lymph nodes of axilla and upper arm -20245 Leukemic reticuloendotheliosis, lymph nodes of inguinal region and lower limb -20246 Leukemic reticuloendotheliosis, intrapelvic lymph nodes -20247 Leukemic reticuloendotheliosis, spleen -20248 Leukemic reticuloendotheliosis, lymph nodes of multiple sites -20250 Letterer-siwe disease, unspecified site, extranodal and solid organ sites -20251 Letterer-siwe disease, lymph nodes of head, face, and neck -20252 Letterer-siwe disease, intrathoracic lymph nodes -20253 Letterer-siwe disease, intra-abdominal lymph nodes -20254 Letterer-siwe disease, lymph nodes of axilla and upper limb -20255 Letterer-siwe disease, lymph nodes of inguinal region and lower limb -20256 Letterer-siwe disease, intrapelvic lymph nodes -20257 Letterer-siwe disease, spleen -20258 Letterer-siwe disease, lymph nodes of multiple sites -20260 Malignant mast cell tumors, unspecified site, extranodal and solid organ sites -20261 Malignant mast cell tumors, lymph nodes of head, face, and neck -20262 Malignant mast cell tumors, intrathoracic lymph nodes -20263 Malignant mast cell tumors, intra-abdominal lymph nodes -20264 Malignant mast cell tumors, lymph nodes of axilla and upper limb -20265 Malignant mast cell tumors, lymph nodes of inguinal region and lower limb -20266 Malignant mast cell tumors, intrapelvic lymph nodes -20267 Malignant mast cell tumors, spleen -20268 Malignant mast cell tumors, lymph nodes of multiple sites -20270 Peripheral T cell lymphoma, unspecified site, extranodal and solid organ sites -20271 Peripheral T cell lymphoma, lymph nodes of head, face, and neck -20272 Peripheral T cell lymphoma, intrathoracic lymph nodes -20273 Peripheral T cell lymphoma, intra-abdominal lymph nodes -20274 Peripheral T cell lymphoma, lymph nodes of axilla and upper limb -20275 Peripheral T cell lymphoma, lymph nodes of inguinal region and lower limb -20276 Peripheral T cell lymphoma, intrapelvic lymph nodes -20277 Peripheral T cell lymphoma, spleen -20278 Peripheral T cell lymphoma, lymph nodes of multiple sites -20280 Other malignant lymphomas, unspecified site, extranodal and solid organ sites -20281 Other malignant lymphomas, lymph nodes of head, face, and neck -20282 Other malignant lymphomas, intrathoracic lymph nodes -20283 Other malignant lymphomas, intra-abdominal lymph nodes -20284 Other malignant lymphomas, lymph nodes of axilla and upper limb -20285 Other malignant lymphomas, lymph nodes of inguinal region and lower limb -20286 Other malignant lymphomas, intrapelvic lymph nodes -20287 Other malignant lymphomas, spleen -20288 Other malignant lymphomas, lymph nodes of multiple sites -20290 Other and unspecified malignant neoplasms of lymphoid and histiocytic tissue, unspecified site, extranodal and solid organ sites -20291 Other and unspecified malignant neoplasms of lymphoid and histiocytic tissue, lymph nodes of head, face, and neck -20292 Other and unspecified malignant neoplasms of lymphoid and histiocytic tissue, intrathoracic lymph nodes -20293 Other and unspecified malignant neoplasms of lymphoid and histiocytic tissue, intra-abdominal lymph nodes -20294 Other and unspecified malignant neoplasms of lymphoid and histiocytic tissue, lymph nodes of axilla and upper limb -20295 Other and unspecified malignant neoplasms of lymphoid and histiocytic tissue, lymph nodes of inguinal region and lower limb -20296 Other and unspecified malignant neoplasms of lymphoid and histiocytic tissue, intrapelvic lymph nodes -20297 Other and unspecified malignant neoplasms of lymphoid and histiocytic tissue, spleen -20298 Other and unspecified malignant neoplasms of lymphoid and histiocytic tissue, lymph nodes of multiple sites -20300 Multiple myeloma, without mention of having achieved remission -20301 Multiple myeloma, in remission -20302 Multiple myeloma, in relapse -20310 Plasma cell leukemia, without mention of having achieved remission -20311 Plasma cell leukemia, in remission -20312 Plasma cell leukemia, in relapse -20380 Other immunoproliferative neoplasms, without mention of having achieved remission -20381 Other immunoproliferative neoplasms, in remission -20382 Other immunoproliferative neoplasms, in relapse -20400 Acute lymphoid leukemia, without mention of having achieved remission -20401 Acute lymphoid leukemia, in remission -20402 Acute lymphoid leukemia, in relapse -20410 Chronic lymphoid leukemia, without mention of having achieved remission -20411 Chronic lymphoid leukemia, in remission -20412 Chronic lymphoid leukemia, in relapse -20420 Subacute lymphoid leukemia, without mention of having achieved remission -20421 Subacute lymphoid leukemia, in remission -20422 Subacute lymphoid leukemia, in relapse -20480 Other lymphoid leukemia, without mention of having achieved remission -20481 Other lymphoid leukemia, in remission -20482 Other lymphoid leukemia, in relapse -20490 Unspecified lymphoid leukemia, without mention of having achieved remission -20491 Unspecified lymphoid leukemia, in remission -20492 Unspecified lymphoid leukemia, in relapse -20500 Acute myeloid leukemia, without mention of having achieved remission -20501 Acute myeloid leukemia, in remission -20502 Acute myeloid leukemia, in relapse -20510 Chronic myeloid leukemia, without mention of having achieved remission -20511 Chronic myeloid leukemia, in remission -20512 Chronic myeloid leukemia, in relapse -20520 Subacute myeloid leukemia, without mention of having achieved remission -20521 Subacute myeloid leukemia,in remission -20522 Subacute myeloid leukemia, in relapse -20530 Myeloid sarcoma, without mention of having achieved remission -20531 Myeloid sarcoma, in remission -20532 Myeloid sarcoma, in relapse -20580 Other myeloid leukemia, without mention of having achieved remission -20581 Other myeloid leukemia, in remission -20582 Other myeloid leukemia, in relapse -20590 Unspecified myeloid leukemia, without mention of having achieved remission -20591 Unspecified myeloid leukemia, in remission -20592 Unspecified myeloid leukemia, in relapse -20600 Acute monocytic leukemia, without mention of having achieved remission -20601 Acute monocytic leukemia,in remission -20602 Acute monocytic leukemia, in relapse -20610 Chronic monocytic leukemia, without mention of having achieved remission -20611 Chronic monocytic leukemia, in remission -20612 Chronic monocytic leukemia, in relapse -20620 Subacute monocytic leukemia, without mention of having achieved remission -20621 Subacute monocytic leukemia, in remission -20622 Subacute monocytic leukemia, in relapse -20680 Other monocytic leukemia, without mention of having achieved remission -20681 Other monocytic leukemia, in remission -20682 Other monocytic leukemia, in relapse -20690 Unspecified monocytic leukemia, without mention of having achieved remission -20691 Unspecified monocytic leukemia, in remission -20692 Unspecified monocytic leukemia, in relapse -20700 Acute erythremia and erythroleukemia, without mention of having achieved remission -20701 Acute erythremia and erythroleukemia, in remission -20702 Acute erythremia and erythroleukemia, in relapse -20710 Chronic erythremia, without mention of having achieved remission -20711 Chronic erythremia, in remission -20712 Chronic erythremia, in relapse -20720 Megakaryocytic leukemia, without mention of having achieved remission -20721 Megakaryocytic leukemia, in remission -20722 Megakaryocytic leukemia, in relapse -20780 Other specified leukemia, without mention of having achieved remission -20781 Other specified leukemia, in remission -20782 Other specified leukemia, in relapse -20800 Acute leukemia of unspecified cell type, without mention of having achieved remission -20801 Acute leukemia of unspecified cell type, in remission -20802 Acute leukemia of unspecified cell type, in relapse -20810 Chronic leukemia of unspecified cell type, without mention of having achieved remission -20811 Chronic leukemia of unspecified cell type, in remission -20812 Chronic leukemia of unspecified cell type, in relapse -20820 Subacute leukemia of unspecified cell type, without mention of having achieved remission -20821 Subacute leukemia of unspecified cell type, in remission -20822 Subacute leukemia of unspecified cell type, in relapse -20880 Other leukemia of unspecified cell type, without mention of having achieved remission -20881 Other leukemia of unspecified cell type, in remission -20882 Other leukemia of unspecified cell type, in relapse -20890 Unspecified leukemia, without mention of having achieved remission -20891 Unspecified leukemia, in remission -20892 Unspecified leukemia, in relapse -20900 Malignant carcinoid tumor of the small intestine, unspecified portion -20901 Malignant carcinoid tumor of the duodenum -20902 Malignant carcinoid tumor of the jejunum -20903 Malignant carcinoid tumor of the ileum -20910 Malignant carcinoid tumor of the large intestine, unspecified portion -20911 Malignant carcinoid tumor of the appendix -20912 Malignant carcinoid tumor of the cecum -20913 Malignant carcinoid tumor of the ascending colon -20914 Malignant carcinoid tumor of the transverse colon -20915 Malignant carcinoid tumor of the descending colon -20916 Malignant carcinoid tumor of the sigmoid colon -20917 Malignant carcinoid tumor of the rectum -20920 Malignant carcinoid tumor of unknown primary site -20921 Malignant carcinoid tumor of the bronchus and lung -20922 Malignant carcinoid tumor of the thymus -20923 Malignant carcinoid tumor of the stomach -20924 Malignant carcinoid tumor of the kidney -20925 Malignant carcinoid tumor of foregut, not otherwise specified -20926 Malignant carcinoid tumor of midgut, not otherwise specified -20927 Malignant carcinoid tumor of hindgut, not otherwise specified -20929 Malignant carcinoid tumor of other sites -20930 Malignant poorly differentiated neuroendocrine carcinoma, any site -20931 Merkel cell carcinoma of the face -20932 Merkel cell carcinoma of the scalp and neck -20933 Merkel cell carcinoma of the upper limb -20934 Merkel cell carcinoma of the lower limb -20935 Merkel cell carcinoma of the trunk -20936 Merkel cell carcinoma of other sites -20940 Benign carcinoid tumor of the small intestine, unspecified portion -20941 Benign carcinoid tumor of the duodenum -20942 Benign carcinoid tumor of the jejunum -20943 Benign carcinoid tumor of the ileum -20950 Benign carcinoid tumor of the large intestine, unspecified portion -20951 Benign carcinoid tumor of the appendix -20952 Benign carcinoid tumor of the cecum -20953 Benign carcinoid tumor of the ascending colon -20954 Benign carcinoid tumor of the transverse colon -20955 Benign carcinoid tumor of the descending colon -20956 Benign carcinoid tumor of the sigmoid colon -20957 Benign carcinoid tumor of the rectum -20960 Benign carcinoid tumor of unknown primary site -20961 Benign carcinoid tumor of the bronchus and lung -20962 Benign carcinoid tumor of the thymus -20963 Benign carcinoid tumor of the stomach -20964 Benign carcinoid tumor of the kidney -20965 Benign carcinoid tumor of foregut, not otherwise specified -20966 Benign carcinoid tumor of midgut, not otherwise specified -20967 Benign carcinoid tumor of hindgut, not otherwise specified -20969 Benign carcinoid tumor of other sites -20970 Secondary neuroendocrine tumor, unspecified site -20971 Secondary neuroendocrine tumor of distant lymph nodes -20972 Secondary neuroendocrine tumor of liver -20973 Secondary neuroendocrine tumor of bone -20974 Secondary neuroendocrine tumor of peritoneum -20975 Secondary Merkel cell carcinoma -20979 Secondary neuroendocrine tumor of other sites -2100 Benign neoplasm of lip -2101 Benign neoplasm of tongue -2102 Benign neoplasm of major salivary glands -2103 Benign neoplasm of floor of mouth -2104 Benign neoplasm of other and unspecified parts of mouth -2105 Benign neoplasm of tonsil -2106 Benign neoplasm of other parts of oropharynx -2107 Benign neoplasm of nasopharynx -2108 Benign neoplasm of hypopharynx -2109 Benign neoplasm of pharynx, unspecified -2110 Benign neoplasm of esophagus -2111 Benign neoplasm of stomach -2112 Benign neoplasm of duodenum, jejunum, and ileum -2113 Benign neoplasm of colon -2114 Benign neoplasm of rectum and anal canal -2115 Benign neoplasm of liver and biliary passages -2116 Benign neoplasm of pancreas, except islets of Langerhans -2117 Benign neoplasm of islets of Langerhans -2118 Benign neoplasm of retroperitoneum and peritoneum -2119 Benign neoplasm of other and unspecified site in the digestive system -2120 Benign neoplasm of nasal cavities, middle ear, and accessory sinuses -2121 Benign neoplasm of larynx -2122 Benign neoplasm of trachea -2123 Benign neoplasm of bronchus and lung -2124 Benign neoplasm of pleura -2125 Benign neoplasm of mediastinum -2126 Benign neoplasm of thymus -2127 Benign neoplasm of heart -2128 Benign neoplasm of other specified sites of respiratory and intrathoracic organs -2129 Benign neoplasm of respiratory and intrathoracic organs, site unspecified -2130 Benign neoplasm of bones of skull and face -2131 Benign neoplasm of lower jaw bone -2132 Benign neoplasm of vertebral column, excluding sacrum and coccyx -2133 Benign neoplasm of ribs, sternum, and clavicle -2134 Benign neoplasm of scapula and long bones of upper limb -2135 Benign neoplasm of short bones of upper limb -2136 Benign neoplasm of pelvic bones, sacrum, and coccyx -2137 Benign neoplasm of long bones of lower limb -2138 Benign neoplasm of short bones of lower limb -2139 Benign neoplasm of bone and articular cartilage, site unspecified -2140 Lipoma of skin and subcutaneous tissue of face -2141 Lipoma of other skin and subcutaneous tissue -2142 Lipoma of intrathoracic organs -2143 Lipoma of intra-abdominal organs -2144 Lipoma of spermatic cord -2148 Lipoma of other specified sites -2149 Lipoma, unspecified site -2150 Other benign neoplasm of connective and other soft tissue of head, face, and neck -2152 Other benign neoplasm of connective and other soft tissue of upper limb, including shoulder -2153 Other benign neoplasm of connective and other soft tissue of lower limb, including hip -2154 Other benign neoplasm of connective and other soft tissue of thorax -2155 Other benign neoplasm of connective and other soft tissue of abdomen -2156 Other benign neoplasm of connective and other soft tissue of pelvis -2157 Other benign neoplasm of connective and other soft tissue of trunk, unspecified -2158 Other benign neoplasm of connective and other soft tissue of other specified sites -2159 Other benign neoplasm of connective and other soft tissue, site unspecified -2160 Benign neoplasm of skin of lip -2161 Benign neoplasm of eyelid, including canthus -2162 Benign neoplasm of ear and external auditory canal -2163 Benign neoplasm of skin of other and unspecified parts of face -2164 Benign neoplasm of scalp and skin of neck -2165 Benign neoplasm of skin of trunk, except scrotum -2166 Benign neoplasm of skin of upper limb, including shoulder -2167 Benign neoplasm of skin of lower limb, including hip -2168 Benign neoplasm of other specified sites of skin -2169 Benign neoplasm of skin, site unspecified -217 Benign neoplasm of breast -2180 Submucous leiomyoma of uterus -2181 Intramural leiomyoma of uterus -2182 Subserous leiomyoma of uterus -2189 Leiomyoma of uterus, unspecified -2190 Benign neoplasm of cervix uteri -2191 Benign neoplasm of corpus uteri -2198 Benign neoplasm of other specified parts of uterus -2199 Benign neoplasm of uterus, part unspecified -220 Benign neoplasm of ovary -2210 Benign neoplasm of fallopian tube and uterine ligaments -2211 Benign neoplasm of vagina -2212 Benign neoplasm of vulva -2218 Benign neoplasm of other specified sites of female genital organs -2219 Benign neoplasm of female genital organ, site unspecified -2220 Benign neoplasm of testis -2221 Benign neoplasm of penis -2222 Benign neoplasm of prostate -2223 Benign neoplasm of epididymis -2224 Benign neoplasm of scrotum -2228 Benign neoplasm of other specified sites of male genital organs -2229 Benign neoplasm of male genital organ, site unspecified -2230 Benign neoplasm of kidney, except pelvis -2231 Benign neoplasm of renal pelvis -2232 Benign neoplasm of ureter -2233 Benign neoplasm of bladder -22381 Benign neoplasm of urethra -22389 Benign neoplasm of other specified sites of urinary organs -2239 Benign neoplasm of urinary organ, site unspecified -2240 Benign neoplasm of eyeball, except conjunctiva, cornea, retina, and choroid -2241 Benign neoplasm of orbit -2242 Benign neoplasm of lacrimal gland -2243 Benign neoplasm of conjunctiva -2244 Benign neoplasm of cornea -2245 Benign neoplasm of retina -2246 Benign neoplasm of choroid -2247 Benign neoplasm of lacrimal duct -2248 Benign neoplasm of other specified parts of eye -2249 Benign neoplasm of eye, part unspecified -2250 Benign neoplasm of brain -2251 Benign neoplasm of cranial nerves -2252 Benign neoplasm of cerebral meninges -2253 Benign neoplasm of spinal cord -2254 Benign neoplasm of spinal meninges -2258 Benign neoplasm of other specified sites of nervous system -2259 Benign neoplasm of nervous system, part unspecified -226 Benign neoplasm of thyroid glands -2270 Benign neoplasm of adrenal gland -2271 Benign neoplasm of parathyroid gland -2273 Benign neoplasm of pituitary gland and craniopharyngeal duct -2274 Benign neoplasm of pineal gland -2275 Benign neoplasm of carotid body -2276 Benign neoplasm of aortic body and other paraganglia -2278 Benign neoplasm of other endocrine glands and related structures -2279 Benign neoplasm of endocrine gland, site unspecified -22800 Hemangioma of unspecified site -22801 Hemangioma of skin and subcutaneous tissue -22802 Hemangioma of intracranial structures -22803 Hemangioma of retina -22804 Hemangioma of intra-abdominal structures -22809 Hemangioma of other sites -2281 Lymphangioma, any site -2290 Benign neoplasm of lymph nodes -2298 Benign neoplasm of other specified sites -2299 Benign neoplasm of unspecified site -2300 Carcinoma in situ of lip, oral cavity, and pharynx -2301 Carcinoma in situ of esophagus -2302 Carcinoma in situ of stomach -2303 Carcinoma in situ of colon -2304 Carcinoma in situ of rectum -2305 Carcinoma in situ of anal canal -2306 Carcinoma in situ of anus, unspecified -2307 Carcinoma in situ of other and unspecified parts of intestine -2308 Carcinoma in situ of liver and biliary system -2309 Carcinoma in situ of other and unspecified digestive organs -2310 Carcinoma in situ of larynx -2311 Carcinoma in situ of trachea -2312 Carcinoma in situ of bronchus and lung -2318 Carcinoma in situ of other specified parts of respiratory system -2319 Carcinoma in situ of respiratory system, part unspecified -2320 Carcinoma in situ of skin of lip -2321 Carcinoma in situ of eyelid, including canthus -2322 Carcinoma in situ of skin of ear and external auditory canal -2323 Carcinoma in situ of skin of other and unspecified parts of face -2324 Carcinoma in situ of scalp and skin of neck -2325 Carcinoma in situ of skin of trunk, except scrotum -2326 Carcinoma in situ of skin of upper limb, including shoulder -2327 Carcinoma in situ of skin of lower limb, including hip -2328 Carcinoma in situ of other specified sites of skin -2329 Carcinoma in situ of skin, site unspecified -2330 Carcinoma in situ of breast -2331 Carcinoma in situ of cervix uteri -2332 Carcinoma in situ of other and unspecified parts of uterus -23330 Carcinoma in situ, unspecified female genital organ -23331 Carcinoma in situ, vagina -23332 Carcinoma in situ, vulva -23339 Carcinoma in situ, other female genital organ -2334 Carcinoma in situ of prostate -2335 Carcinoma in situ of penis -2336 Carcinoma in situ of other and unspecified male genital organs -2337 Carcinoma in situ of bladder -2339 Carcinoma in situ of other and unspecified urinary organs -2340 Carcinoma in situ of eye -2348 Carcinoma in situ of other specified sites -2349 Carcinoma in situ, site unspecified -2350 Neoplasm of uncertain behavior of major salivary glands -2351 Neoplasm of uncertain behavior of lip, oral cavity, and pharynx -2352 Neoplasm of uncertain behavior of stomach, intestines, and rectum -2353 Neoplasm of uncertain behavior of liver and biliary passages -2354 Neoplasm of uncertain behavior of retroperitoneum and peritoneum -2355 Neoplasm of uncertain behavior of other and unspecified digestive organs -2356 Neoplasm of uncertain behavior of larynx -2357 Neoplasm of uncertain behavior of trachea, bronchus, and lung -2358 Neoplasm of uncertain behavior of pleura, thymus, and mediastinum -2359 Neoplasm of uncertain behavior of other and unspecified respiratory organs -2360 Neoplasm of uncertain behavior of uterus -2361 Neoplasm of uncertain behavior of placenta -2362 Neoplasm of uncertain behavior of ovary -2363 Neoplasm of uncertain behavior of other and unspecified female genital organs -2364 Neoplasm of uncertain behavior of testis -2365 Neoplasm of uncertain behavior of prostate -2366 Neoplasm of uncertain behavior of other and unspecified male genital organs -2367 Neoplasm of uncertain behavior of bladder -23690 Neoplasm of uncertain behavior of urinary organ, unspecified -23691 Neoplasm of uncertain behavior of kidney and ureter -23699 Neoplasm of uncertain behavior of other and unspecified urinary organs -2370 Neoplasm of uncertain behavior of pituitary gland and craniopharyngeal duct -2371 Neoplasm of uncertain behavior of pineal gland -2372 Neoplasm of uncertain behavior of adrenal gland -2373 Neoplasm of uncertain behavior of paraganglia -2374 Neoplasm of uncertain behavior of other and unspecified endocrine glands -2375 Neoplasm of uncertain behavior of brain and spinal cord -2376 Neoplasm of uncertain behavior of meninges -23770 Neurofibromatosis, unspecified -23771 Neurofibromatosis, type 1 [von recklinghausen's disease] -23772 Neurofibromatosis, type 2 [acoustic neurofibromatosis] -23773 Schwannomatosis -23779 Other neurofibromatosis -2379 Neoplasm of uncertain behavior of other and unspecified parts of nervous system -2380 Neoplasm of uncertain behavior of bone and articular cartilage -2381 Neoplasm of uncertain behavior of connective and other soft tissue -2382 Neoplasm of uncertain behavior of skin -2383 Neoplasm of uncertain behavior of breast -2384 Polycythemia vera -2385 Neoplasm of uncertain behavior of histiocytic and mast cells -2386 Neoplasm of uncertain behavior of plasma cells -23871 Essential thrombocythemia -23872 Low grade myelodysplastic syndrome lesions -23873 High grade myelodysplastic syndrome lesions -23874 Myelodysplastic syndrome with 5q deletion -23875 Myelodysplastic syndrome, unspecified -23876 Myelofibrosis with myeloid metaplasia -23877 Post-transplant lymphoproliferative disorder (PTLD) -23879 Other lymphatic and hematopoietic tissues -2388 Neoplasm of uncertain behavior of other specified sites -2389 Neoplasm of uncertain behavior, site unspecified -2390 Neoplasm of unspecified nature of digestive system -2391 Neoplasm of unspecified nature of respiratory system -2392 Neoplasm of unspecified nature of bone, soft tissue, and skin -2393 Neoplasm of unspecified nature of breast -2394 Neoplasm of unspecified nature of bladder -2395 Neoplasm of unspecified nature of other genitourinary organs -2396 Neoplasm of unspecified nature of brain -2397 Neoplasm of unspecified nature of endocrine glands and other parts of nervous system -23981 Neoplasms of unspecified nature, retina and choroid -23989 Neoplasms of unspecified nature, other specified sites -2399 Neoplasm of unspecified nature, site unspecified -2400 Goiter, specified as simple -2409 Goiter, unspecified -2410 Nontoxic uninodular goiter -2411 Nontoxic multinodular goiter -2419 Unspecified nontoxic nodular goiter -24200 Toxic diffuse goiter without mention of thyrotoxic crisis or storm -24201 Toxic diffuse goiter with mention of thyrotoxic crisis or storm -24210 Toxic uninodular goiter without mention of thyrotoxic crisis or storm -24211 Toxic uninodular goiter with mention of thyrotoxic crisis or storm -24220 Toxic multinodular goiter without mention of thyrotoxic crisis or storm -24221 Toxic multinodular goiter with mention of thyrotoxic crisis or storm -24230 Toxic nodular goiter, unspecified type, without mention of thyrotoxic crisis or storm -24231 Toxic nodular goiter, unspecified type, with mention of thyrotoxic crisis or storm -24240 Thyrotoxicosis from ectopic thyroid nodule without mention of thyrotoxic crisis or storm -24241 Thyrotoxicosis from ectopic thyroid nodule with mention of thyrotoxic crisis or storm -24280 Thyrotoxicosis of other specified origin without mention of thyrotoxic crisis or storm -24281 Thyrotoxicosis of other specified origin with mention of thyrotoxic crisis or storm -24290 Thyrotoxicosis without mention of goiter or other cause, and without mention of thyrotoxic crisis or storm -24291 Thyrotoxicosis without mention of goiter or other cause, with mention of thyrotoxic crisis or storm -243 Congenital hypothyroidism -2440 Postsurgical hypothyroidism -2441 Other postablative hypothyroidism -2442 Iodine hypothyroidism -2443 Other iatrogenic hypothyroidism -2448 Other specified acquired hypothyroidism -2449 Unspecified acquired hypothyroidism -2450 Acute thyroiditis -2451 Subacute thyroiditis -2452 Chronic lymphocytic thyroiditis -2453 Chronic fibrous thyroiditis -2454 Iatrogenic thyroiditis -2458 Other and unspecified chronic thyroiditis -2459 Thyroiditis, unspecified -2460 Disorders of thyrocalcitonin secretion -2461 Dyshormonogenic goiter -2462 Cyst of thyroid -2463 Hemorrhage and infarction of thyroid -2468 Other specified disorders of thyroid -2469 Unspecified disorder of thyroid -24900 Secondary diabetes mellitus without mention of complication, not stated as uncontrolled, or unspecified -24901 Secondary diabetes mellitus without mention of complication, uncontrolled -24910 Secondary diabetes mellitus with ketoacidosis, not stated as uncontrolled, or unspecified -24911 Secondary diabetes mellitus with ketoacidosis, uncontrolled -24920 Secondary diabetes mellitus with hyperosmolarity, not stated as uncontrolled, or unspecified -24921 Secondary diabetes mellitus with hyperosmolarity, uncontrolled -24930 Secondary diabetes mellitus with other coma, not stated as uncontrolled, or unspecified -24931 Secondary diabetes mellitus with other coma, uncontrolled -24940 Secondary diabetes mellitus with renal manifestations, not stated as uncontrolled, or unspecified -24941 Secondary diabetes mellitus with renal manifestations, uncontrolled -24950 Secondary diabetes mellitus with ophthalmic manifestations, not stated as uncontrolled, or unspecified -24951 Secondary diabetes mellitus with ophthalmic manifestations, uncontrolled -24960 Secondary diabetes mellitus with neurological manifestations, not stated as uncontrolled, or unspecified -24961 Secondary diabetes mellitus with neurological manifestations, uncontrolled -24970 Secondary diabetes mellitus with peripheral circulatory disorders, not stated as uncontrolled, or unspecified -24971 Secondary diabetes mellitus with peripheral circulatory disorders, uncontrolled -24980 Secondary diabetes mellitus with other specified manifestations, not stated as uncontrolled, or unspecified -24981 Secondary diabetes mellitus with other specified manifestations, uncontrolled -24990 Secondary diabetes mellitus with unspecified complication, not stated as uncontrolled, or unspecified -24991 Secondary diabetes mellitus with unspecified complication, uncontrolled -25000 Diabetes mellitus without mention of complication, type II or unspecified type, not stated as uncontrolled -25001 Diabetes mellitus without mention of complication, type I [juvenile type], not stated as uncontrolled -25002 Diabetes mellitus without mention of complication, type II or unspecified type, uncontrolled -25003 Diabetes mellitus without mention of complication, type I [juvenile type], uncontrolled -25010 Diabetes with ketoacidosis, type II or unspecified type, not stated as uncontrolled -25011 Diabetes with ketoacidosis, type I [juvenile type], not stated as uncontrolled -25012 Diabetes with ketoacidosis, type II or unspecified type, uncontrolled -25013 Diabetes with ketoacidosis, type I [juvenile type], uncontrolled -25020 Diabetes with hyperosmolarity, type II or unspecified type, not stated as uncontrolled -25021 Diabetes with hyperosmolarity, type I [juvenile type], not stated as uncontrolled -25022 Diabetes with hyperosmolarity, type II or unspecified type, uncontrolled -25023 Diabetes with hyperosmolarity, type I [juvenile type], uncontrolled -25030 Diabetes with other coma, type II or unspecified type, not stated as uncontrolled -25031 Diabetes with other coma, type I [juvenile type], not stated as uncontrolled -25032 Diabetes with other coma, type II or unspecified type, uncontrolled -25033 Diabetes with other coma, type I [juvenile type], uncontrolled -25040 Diabetes with renal manifestations, type II or unspecified type, not stated as uncontrolled -25041 Diabetes with renal manifestations, type I [juvenile type], not stated as uncontrolled -25042 Diabetes with renal manifestations, type II or unspecified type, uncontrolled -25043 Diabetes with renal manifestations, type I [juvenile type], uncontrolled -25050 Diabetes with ophthalmic manifestations, type II or unspecified type, not stated as uncontrolled -25051 Diabetes with ophthalmic manifestations, type I [juvenile type], not stated as uncontrolled -25052 Diabetes with ophthalmic manifestations, type II or unspecified type, uncontrolled -25053 Diabetes with ophthalmic manifestations, type I [juvenile type], uncontrolled -25060 Diabetes with neurological manifestations, type II or unspecified type, not stated as uncontrolled -25061 Diabetes with neurological manifestations, type I [juvenile type], not stated as uncontrolled -25062 Diabetes with neurological manifestations, type II or unspecified type, uncontrolled -25063 Diabetes with neurological manifestations, type I [juvenile type], uncontrolled -25070 Diabetes with peripheral circulatory disorders, type II or unspecified type, not stated as uncontrolled -25071 Diabetes with peripheral circulatory disorders, type I [juvenile type], not stated as uncontrolled -25072 Diabetes with peripheral circulatory disorders, type II or unspecified type, uncontrolled -25073 Diabetes with peripheral circulatory disorders, type I [juvenile type], uncontrolled -25080 Diabetes with other specified manifestations, type II or unspecified type, not stated as uncontrolled -25081 Diabetes with other specified manifestations, type I [juvenile type], not stated as uncontrolled -25082 Diabetes with other specified manifestations, type II or unspecified type, uncontrolled -25083 Diabetes with other specified manifestations, type I [juvenile type], uncontrolled -25090 Diabetes with unspecified complication, type II or unspecified type, not stated as uncontrolled -25091 Diabetes with unspecified complication, type I [juvenile type], not stated as uncontrolled -25092 Diabetes with unspecified complication, type II or unspecified type, uncontrolled -25093 Diabetes with unspecified complication, type I [juvenile type], uncontrolled -2510 Hypoglycemic coma -2511 Other specified hypoglycemia -2512 Hypoglycemia, unspecified -2513 Postsurgical hypoinsulinemia -2514 Abnormality of secretion of glucagon -2515 Abnormality of secretion of gastrin -2518 Other specified disorders of pancreatic internal secretion -2519 Unspecified disorder of pancreatic internal secretion -25200 Hyperparathyroidism, unspecified -25201 Primary hyperparathyroidism -25202 Secondary hyperparathyroidism, non-renal -25208 Other hyperparathyroidism -2521 Hypoparathyroidism -2528 Other specified disorders of parathyroid gland -2529 Unspecified disorder of parathyroid gland -2530 Acromegaly and gigantism -2531 Other and unspecified anterior pituitary hyperfunction -2532 Panhypopituitarism -2533 Pituitary dwarfism -2534 Other anterior pituitary disorders -2535 Diabetes insipidus -2536 Other disorders of neurohypophysis -2537 Iatrogenic pituitary disorders -2538 Other disorders of the pituitary and other syndromes of diencephalohypophyseal origin -2539 Unspecified disorder of the pituitary gland and its hypothalamic control -2540 Persistent hyperplasia of thymus -2541 Abscess of thymus -2548 Other specified diseases of thymus gland -2549 Unspecified disease of thymus gland -2550 Cushing's syndrome -25510 Hyperaldosteronism, unspecified -25511 Glucocorticoid-remediable aldosteronism -25512 Conn's syndrome -25513 Bartter's syndrome -25514 Other secondary aldosteronism -2552 Adrenogenital disorders -2553 Other corticoadrenal overactivity -25541 Glucocorticoid deficiency -25542 Mineralocorticoid deficiency -2555 Other adrenal hypofunction -2556 Medulloadrenal hyperfunction -2558 Other specified disorders of adrenal glands -2559 Unspecified disorder of adrenal glands -2560 Hyperestrogenism -2561 Other ovarian hyperfunction -2562 Postablative ovarian failure -25631 Premature menopause -25639 Other ovarian failure -2564 Polycystic ovaries -2568 Other ovarian dysfunction -2569 Unspecified ovarian dysfunction -2570 Testicular hyperfunction -2571 Postablative testicular hypofunction -2572 Other testicular hypofunction -2578 Other testicular dysfunction -2579 Unspecified testicular dysfunction -25801 Multiple endocrine neoplasia [MEN] type I -25802 Multiple endocrine neoplasia [MEN] type IIA -25803 Multiple endocrine neoplasia [MEN] type IIB -2581 Other combinations of endocrine dysfunction -2588 Other specified polyglandular dysfunction -2589 Polyglandular dysfunction, unspecified -2590 Delay in sexual development and puberty, not elsewhere classified -2591 Precocious sexual development and puberty, not elsewhere classified -2592 Carcinoid syndrome -2593 Ectopic hormone secretion, not elsewhere classified -2594 Dwarfism, not elsewhere classified -25950 Androgen insensitivity, unspecified -25951 Androgen insensitivity syndrome -25952 Partial androgen insensitivity -2598 Other specified endocrine disorders -2599 Unspecified endocrine disorder -260 Kwashiorkor -261 Nutritional marasmus -262 Other severe protein-calorie malnutrition -2630 Malnutrition of moderate degree -2631 Malnutrition of mild degree -2632 Arrested development following protein-calorie malnutrition -2638 Other protein-calorie malnutrition -2639 Unspecified protein-calorie malnutrition -2640 Vitamin A deficiency with conjunctival xerosis -2641 Vitamin A deficiency with conjunctival xerosis and Bitot's spot -2642 Vitamin A deficiency with corneal xerosis -2643 Vitamin A deficiency with corneal ulceration and xerosis -2644 Vitamin A deficiency with keratomalacia -2645 Vitamin A deficiency with night blindness -2646 Vitamin A deficiency with xerophthalmic scars of cornea -2647 Other ocular manifestations of vitamin A deficiency -2648 Other manifestations of vitamin A deficiency -2649 Unspecified vitamin A deficiency -2650 Beriberi -2651 Other and unspecified manifestations of thiamine deficiency -2652 Pellagra -2660 Ariboflavinosis -2661 Vitamin B6 deficiency -2662 Other B-complex deficiencies -2669 Unspecified vitamin B deficiency -267 Ascorbic acid deficiency -2680 Rickets, active -2681 Rickets, late effect -2682 Osteomalacia, unspecified -2689 Unspecified vitamin D deficiency -2690 Deficiency of vitamin K -2691 Deficiency of other vitamins -2692 Unspecified vitamin deficiency -2693 Mineral deficiency, not elsewhere classified -2698 Other nutritional deficiency -2699 Unspecified nutritional deficiency -2700 Disturbances of amino-acid transport -2701 Phenylketonuria [PKU] -2702 Other disturbances of aromatic amino-acid metabolism -2703 Disturbances of branched-chain amino-acid metabolism -2704 Disturbances of sulphur-bearing amino-acid metabolism -2705 Disturbances of histidine metabolism -2706 Disorders of urea cycle metabolism -2707 Other disturbances of straight-chain amino-acid metabolism -2708 Other specified disorders of amino-acid metabolism -2709 Unspecified disorder of amino-acid metabolism -2710 Glycogenosis -2711 Galactosemia -2712 Hereditary fructose intolerance -2713 Intestinal disaccharidase deficiencies and disaccharide malabsorption -2714 Renal glycosuria -2718 Other specified disorders of carbohydrate transport and metabolism -2719 Unspecified disorder of carbohydrate transport and metabolism -2720 Pure hypercholesterolemia -2721 Pure hyperglyceridemia -2722 Mixed hyperlipidemia -2723 Hyperchylomicronemia -2724 Other and unspecified hyperlipidemia -2725 Lipoprotein deficiencies -2726 Lipodystrophy -2727 Lipidoses -2728 Other disorders of lipoid metabolism -2729 Unspecified disorder of lipoid metabolism -2730 Polyclonal hypergammaglobulinemia -2731 Monoclonal paraproteinemia -2732 Other paraproteinemias -2733 Macroglobulinemia -2734 Alpha-1-antitrypsin deficiency -2738 Other disorders of plasma protein metabolism -2739 Unspecified disorder of plasma protein metabolism -27400 Gouty arthropathy, unspecified -27401 Acute gouty arthropathy -27402 Chronic gouty arthropathy without mention of tophus (tophi) -27403 Chronic gouty arthropathy with tophus (tophi) -27410 Gouty nephropathy, unspecified -27411 Uric acid nephrolithiasis -27419 Other gouty nephropathy -27481 Gouty tophi of ear -27482 Gouty tophi of other sites, except ear -27489 Gout with other specified manifestations -2749 Gout, unspecified -27501 Hereditary hemochromatosis -27502 Hemochromatosis due to repeated red blood cell transfusions -27503 Other hemochromatosis -27509 Other disorders of iron metabolism -2751 Disorders of copper metabolism -2752 Disorders of magnesium metabolism -2753 Disorders of phosphorus metabolism -27540 Unspecified disorder of calcium metabolism -27541 Hypocalcemia -27542 Hypercalcemia -27549 Other disorders of calcium metabolism -2755 Hungry bone syndrome -2758 Other specified disorders of mineral metabolism -2759 Unspecified disorder of mineral metabolism -2760 Hyperosmolality and/or hypernatremia -2761 Hyposmolality and/or hyponatremia -2762 Acidosis -2763 Alkalosis -2764 Mixed acid-base balance disorder -27650 Volume depletion, unspecified -27651 Dehydration -27652 Hypovolemia -27661 Transfusion associated circulatory overload -27669 Other fluid overload -2767 Hyperpotassemia -2768 Hypopotassemia -2769 Electrolyte and fluid disorders not elsewhere classified -27700 Cystic fibrosis without mention of meconium ileus -27701 Cystic fibrosis with meconium ileus -27702 Cystic fibrosis with pulmonary manifestations -27703 Cystic fibrosis with gastrointestinal manifestations -27709 Cystic fibrosis with other manifestations -2771 Disorders of porphyrin metabolism -2772 Other disorders of purine and pyrimidine metabolism -27730 Amyloidosis, unspecified -27731 Familial Mediterranean fever -27739 Other amyloidosis -2774 Disorders of bilirubin excretion -2775 Mucopolysaccharidosis -2776 Other deficiencies of circulating enzymes -2777 Dysmetabolic syndrome X -27781 Primary carnitine deficiency -27782 Carnitine deficiency due to inborn errors of metabolism -27783 Iatrogenic carnitine deficiency -27784 Other secondary carnitine deficiency -27785 Disorders of fatty acid oxidation -27786 Peroxisomal disorders -27787 Disorders of mitochondrial metabolism -27788 Tumor lysis syndrome -27789 Other specified disorders of metabolism -2779 Unspecified disorder of metabolism -27800 Obesity, unspecified -27801 Morbid obesity -27802 Overweight -27803 Obesity hypoventilation syndrome -2781 Localized adiposity -2782 Hypervitaminosis A -2783 Hypercarotinemia -2784 Hypervitaminosis D -2788 Other hyperalimentation -27900 Hypogammaglobulinemia, unspecified -27901 Selective IgA immunodeficiency -27902 Selective IgM immunodeficiency -27903 Other selective immunoglobulin deficiencies -27904 Congenital hypogammaglobulinemia -27905 Immunodeficiency with increased IgM -27906 Common variable immunodeficiency -27909 Other deficiency of humoral immunity -27910 Immunodeficiency with predominant T-cell defect, unspecified -27911 Digeorge's syndrome -27912 Wiskott-aldrich syndrome -27913 Nezelof's syndrome -27919 Other deficiency of cell-mediated immunity -2792 Combined immunity deficiency -2793 Unspecified immunity deficiency -27941 Autoimmune lymphoproliferative syndrome -27949 Autoimmune disease, not elsewhere classified -27950 Graft-versus-host disease, unspecified -27951 Acute graft-versus-host disease -27952 Chronic graft-versus-host disease -27953 Acute on chronic graft-versus-host disease -2798 Other specified disorders involving the immune mechanism -2799 Unspecified disorder of immune mechanism -2800 Iron deficiency anemia secondary to blood loss (chronic) -2801 Iron deficiency anemia secondary to inadequate dietary iron intake -2808 Other specified iron deficiency anemias -2809 Iron deficiency anemia, unspecified -2810 Pernicious anemia -2811 Other vitamin B12 deficiency anemia -2812 Folate-deficiency anemia -2813 Other specified megaloblastic anemias not elsewhere classified -2814 Protein-deficiency anemia -2818 Anemia associated with other specified nutritional deficiency -2819 Unspecified deficiency anemia -2820 Hereditary spherocytosis -2821 Hereditary elliptocytosis -2822 Anemias due to disorders of glutathione metabolism -2823 Other hemolytic anemias due to enzyme deficiency -28240 Thalassemia, unspecified -28241 Sickle-cell thalassemia without crisis -28242 Sickle-cell thalassemia with crisis -28243 Alpha thalassemia -28244 Beta thalassemia -28245 Delta-beta thalassemia -28246 Thalassemia minor -28247 Hemoglobin E-beta thalassemia -28249 Other thalassemia -2825 Sickle-cell trait -28260 Sickle-cell disease, unspecified -28261 Hb-SS disease without crisis -28262 Hb-SS disease with crisis -28263 Sickle-cell/Hb-C disease without crisis -28264 Sickle-cell/Hb-C disease with crisis -28268 Other sickle-cell disease without crisis -28269 Other sickle-cell disease with crisis -2827 Other hemoglobinopathies -2828 Other specified hereditary hemolytic anemias -2829 Hereditary hemolytic anemia, unspecified -2830 Autoimmune hemolytic anemias -28310 Non-autoimmune hemolytic anemia, unspecified -28311 Hemolytic-uremic syndrome -28319 Other non-autoimmune hemolytic anemias -2832 Hemoglobinuria due to hemolysis from external causes -2839 Acquired hemolytic anemia, unspecified -28401 Constitutional red blood cell aplasia -28409 Other constitutional aplastic anemia -28411 Antineoplastic chemotherapy induced pancytopenia -28412 Other drug-induced pancytopenia -28419 Other pancytopenia -2842 Myelophthisis -28481 Red cell aplasia (acquired)(adult)(with thymoma) -28489 Other specified aplastic anemias -2849 Aplastic anemia, unspecified -2850 Sideroblastic anemia -2851 Acute posthemorrhagic anemia -28521 Anemia in chronic kidney disease -28522 Anemia in neoplastic disease -28529 Anemia of other chronic disease -2853 Antineoplastic chemotherapy induced anemia -2858 Other specified anemias -2859 Anemia, unspecified -2860 Congenital factor VIII disorder -2861 Congenital factor IX disorder -2862 Congenital factor XI deficiency -2863 Congenital deficiency of other clotting factors -2864 Von Willebrand's disease -28652 Acquired hemophilia -28653 Antiphospholipid antibody with hemorrhagic disorder -28659 Other hemorrhagic disorder due to intrinsic circulating anticoagulants, antibodies, or inhibitors -2866 Defibrination syndrome -2867 Acquired coagulation factor deficiency -2869 Other and unspecified coagulation defects -2870 Allergic purpura -2871 Qualitative platelet defects -2872 Other nonthrombocytopenic purpuras -28730 Primary thrombocytopenia,unspecified -28731 Immune thrombocytopenic purpura -28732 Evans' syndrome -28733 Congenital and hereditary thrombocytopenic purpura -28739 Other primary thrombocytopenia -28741 Posttransfusion purpura -28749 Other secondary thrombocytopenia -2875 Thrombocytopenia, unspecified -2878 Other specified hemorrhagic conditions -2879 Unspecified hemorrhagic conditions -28800 Neutropenia, unspecified -28801 Congenital neutropenia -28802 Cyclic neutropenia -28803 Drug induced neutropenia -28804 Neutropenia due to infection -28809 Other neutropenia -2881 Functional disorders of polymorphonuclear neutrophils -2882 Genetic anomalies of leukocytes -2883 Eosinophilia -2884 Hemophagocytic syndromes -28850 Leukocytopenia, unspecified -28851 Lymphocytopenia -28859 Other decreased white blood cell count -28860 Leukocytosis, unspecified -28861 Lymphocytosis (symptomatic) -28862 Leukemoid reaction -28863 Monocytosis (symptomatic) -28864 Plasmacytosis -28865 Basophilia -28866 Bandemia -28869 Other elevated white blood cell count -2888 Other specified disease of white blood cells -2889 Unspecified disease of white blood cells -2890 Polycythemia, secondary -2891 Chronic lymphadenitis -2892 Nonspecific mesenteric lymphadenitis -2893 Lymphadenitis, unspecified, except mesenteric -2894 Hypersplenism -28950 Disease of spleen, unspecified -28951 Chronic congestive splenomegaly -28952 Splenic sequestration -28953 Neutropenic splenomegaly -28959 Other diseases of spleen -2896 Familial polycythemia -2897 Methemoglobinemia -28981 Primary hypercoagulable state -28982 Secondary hypercoagulable state -28983 Myelofibrosis -28984 Heparin-induced thrombocytopenia (HIT) -28989 Other specified diseases of blood and blood-forming organs -2899 Unspecified diseases of blood and blood-forming organs -2900 Senile dementia, uncomplicated -29010 Presenile dementia, uncomplicated -29011 Presenile dementia with delirium -29012 Presenile dementia with delusional features -29013 Presenile dementia with depressive features -29020 Senile dementia with delusional features -29021 Senile dementia with depressive features -2903 Senile dementia with delirium -29040 Vascular dementia, uncomplicated -29041 Vascular dementia, with delirium -29042 Vascular dementia, with delusions -29043 Vascular dementia, with depressed mood -2908 Other specified senile psychotic conditions -2909 Unspecified senile psychotic condition -2910 Alcohol withdrawal delirium -2911 Alcohol-induced persisting amnestic disorder -2912 Alcohol-induced persisting dementia -2913 Alcohol-induced psychotic disorder with hallucinations -2914 Idiosyncratic alcohol intoxication -2915 Alcohol-induced psychotic disorder with delusions -29181 Alcohol withdrawal -29182 Alcohol induced sleep disorders -29189 Other alcohol-induced mental disorders -2919 Unspecified alcohol-induced mental disorders -2920 Drug withdrawal -29211 Drug-induced psychotic disorder with delusions -29212 Drug-induced psychotic disorder with hallucinations -2922 Pathological drug intoxication -29281 Drug-induced delirium -29282 Drug-induced persisting dementia -29283 Drug-induced persisting amnestic disorder -29284 Drug-induced mood disorder -29285 Drug induced sleep disorders -29289 Other specified drug-induced mental disorders -2929 Unspecified drug-induced mental disorder -2930 Delirium due to conditions classified elsewhere -2931 Subacute delirium -29381 Psychotic disorder with delusions in conditions classified elsewhere -29382 Psychotic disorder with hallucinations in conditions classified elsewhere -29383 Mood disorder in conditions classified elsewhere -29384 Anxiety disorder in conditions classified elsewhere -29389 Other specified transient mental disorders due to conditions classified elsewhere, other -2939 Unspecified transient mental disorder in conditions classified elsewhere -2940 Amnestic disorder in conditions classified elsewhere -29410 Dementia in conditions classified elsewhere without behavioral disturbance -29411 Dementia in conditions classified elsewhere with behavioral disturbance -29420 Dementia, unspecified, without behavioral disturbance -29421 Dementia, unspecified, with behavioral disturbance -2948 Other persistent mental disorders due to conditions classified elsewhere -2949 Unspecified persistent mental disorders due to conditions classified elsewhere -29500 Simple type schizophrenia, unspecified -29501 Simple type schizophrenia, subchronic -29502 Simple type schizophrenia, chronic -29503 Simple type schizophrenia, subchronic with acute exacerbation -29504 Simple type schizophrenia, chronic with acute exacerbation -29505 Simple type schizophrenia, in remission -29510 Disorganized type schizophrenia, unspecified -29511 Disorganized type schizophrenia, subchronic -29512 Disorganized type schizophrenia, chronic -29513 Disorganized type schizophrenia, subchronic with acute exacerbation -29514 Disorganized type schizophrenia, chronic with acute exacerbation -29515 Disorganized type schizophrenia, in remission -29520 Catatonic type schizophrenia, unspecified -29521 Catatonic type schizophrenia, subchronic -29522 Catatonic type schizophrenia, chronic -29523 Catatonic type schizophrenia, subchronic with acute exacerbation -29524 Catatonic type schizophrenia, chronic with acute exacerbation -29525 Catatonic type schizophrenia, in remission -29530 Paranoid type schizophrenia, unspecified -29531 Paranoid type schizophrenia, subchronic -29532 Paranoid type schizophrenia, chronic -29533 Paranoid type schizophrenia, subchronic with acute exacerbation -29534 Paranoid type schizophrenia, chronic with acute exacerbation -29535 Paranoid type schizophrenia, in remission -29540 Schizophreniform disorder, unspecified -29541 Schizophreniform disorder, subchronic -29542 Schizophreniform disorder, chronic -29543 Schizophreniform disorder, subchronic with acute exacerbation -29544 Schizophreniform disorder, chronic with acute exacerbation -29545 Schizophreniform disorder, in remission -29550 Latent schizophrenia, unspecified -29551 Latent schizophrenia, subchronic -29552 Latent schizophrenia, chronic -29553 Latent schizophrenia, subchronic with acute exacerbation -29554 Latent schizophrenia, chronic with acute exacerbation -29555 Latent schizophrenia, in remission -29560 Schizophrenic disorders, residual type, unspecified -29561 Schizophrenic disorders, residual type, subchronic -29562 Schizophrenic disorders, residual type, chronic -29563 Schizophrenic disorders, residual type, subchronic with acute exacerbation -29564 Schizophrenic disorders, residual type, chronic with acute exacerbation -29565 Schizophrenic disorders, residual type, in remission -29570 Schizoaffective disorder, unspecified -29571 Schizoaffective disorder, subchronic -29572 Schizoaffective disorder, chronic -29573 Schizoaffective disorder, subchronic with acute exacerbation -29574 Schizoaffective disorder, chronic with acute exacerbation -29575 Schizoaffective disorder, in remission -29580 Other specified types of schizophrenia, unspecified -29581 Other specified types of schizophrenia, subchronic -29582 Other specified types of schizophrenia, chronic -29583 Other specified types of schizophrenia, subchronic with acute exacerbation -29584 Other specified types of schizophrenia, chronic with acute exacerbation -29585 Other specified types of schizophrenia, in remission -29590 Unspecified schizophrenia, unspecified -29591 Unspecified schizophrenia, subchronic -29592 Unspecified schizophrenia, chronic -29593 Unspecified schizophrenia, subchronic with acute exacerbation -29594 Unspecified schizophrenia, chronic with acute exacerbation -29595 Unspecified schizophrenia, in remission -29600 Bipolar I disorder, single manic episode, unspecified -29601 Bipolar I disorder, single manic episode, mild -29602 Bipolar I disorder, single manic episode, moderate -29603 Bipolar I disorder, single manic episode, severe, without mention of psychotic behavior -29604 Bipolar I disorder, single manic episode, severe, specified as with psychotic behavior -29605 Bipolar I disorder, single manic episode, in partial or unspecified remission -29606 Bipolar I disorder, single manic episode, in full remission -29610 Manic affective disorder, recurrent episode, unspecified -29611 Manic affective disorder, recurrent episode, mild -29612 Manic affective disorder, recurrent episode, moderate -29613 Manic affective disorder, recurrent episode, severe, without mention of psychotic behavior -29614 Manic affective disorder, recurrent episode, severe, specified as with psychotic behavior -29615 Manic affective disorder, recurrent episode, in partial or unspecified remission -29616 Manic affective disorder, recurrent episode, in full remission -29620 Major depressive affective disorder, single episode, unspecified -29621 Major depressive affective disorder, single episode, mild -29622 Major depressive affective disorder, single episode, moderate -29623 Major depressive affective disorder, single episode, severe, without mention of psychotic behavior -29624 Major depressive affective disorder, single episode, severe, specified as with psychotic behavior -29625 Major depressive affective disorder, single episode, in partial or unspecified remission -29626 Major depressive affective disorder, single episode, in full remission -29630 Major depressive affective disorder, recurrent episode, unspecified -29631 Major depressive affective disorder, recurrent episode, mild -29632 Major depressive affective disorder, recurrent episode, moderate -29633 Major depressive affective disorder, recurrent episode, severe, without mention of psychotic behavior -29634 Major depressive affective disorder, recurrent episode, severe, specified as with psychotic behavior -29635 Major depressive affective disorder, recurrent episode, in partial or unspecified remission -29636 Major depressive affective disorder, recurrent episode, in full remission -29640 Bipolar I disorder, most recent episode (or current) manic, unspecified -29641 Bipolar I disorder, most recent episode (or current) manic, mild -29642 Bipolar I disorder, most recent episode (or current) manic, moderate -29643 Bipolar I disorder, most recent episode (or current) manic, severe, without mention of psychotic behavior -29644 Bipolar I disorder, most recent episode (or current) manic, severe, specified as with psychotic behavior -29645 Bipolar I disorder, most recent episode (or current) manic, in partial or unspecified remission -29646 Bipolar I disorder, most recent episode (or current) manic, in full remission -29650 Bipolar I disorder, most recent episode (or current) depressed, unspecified -29651 Bipolar I disorder, most recent episode (or current) depressed, mild -29652 Bipolar I disorder, most recent episode (or current) depressed, moderate -29653 Bipolar I disorder, most recent episode (or current) depressed, severe, without mention of psychotic behavior -29654 Bipolar I disorder, most recent episode (or current) depressed, severe, specified as with psychotic behavior -29655 Bipolar I disorder, most recent episode (or current) depressed, in partial or unspecified remission -29656 Bipolar I disorder, most recent episode (or current) depressed, in full remission -29660 Bipolar I disorder, most recent episode (or current) mixed, unspecified -29661 Bipolar I disorder, most recent episode (or current) mixed, mild -29662 Bipolar I disorder, most recent episode (or current) mixed, moderate -29663 Bipolar I disorder, most recent episode (or current) mixed, severe, without mention of psychotic behavior -29664 Bipolar I disorder, most recent episode (or current) mixed, severe, specified as with psychotic behavior -29665 Bipolar I disorder, most recent episode (or current) mixed, in partial or unspecified remission -29666 Bipolar I disorder, most recent episode (or current) mixed, in full remission -2967 Bipolar I disorder, most recent episode (or current) unspecified -29680 Bipolar disorder, unspecified -29681 Atypical manic disorder -29682 Atypical depressive disorder -29689 Other bipolar disorders -29690 Unspecified episodic mood disorder -29699 Other specified episodic mood disorder -2970 Paranoid state, simple -2971 Delusional disorder -2972 Paraphrenia -2973 Shared psychotic disorder -2978 Other specified paranoid states -2979 Unspecified paranoid state -2980 Depressive type psychosis -2981 Excitative type psychosis -2982 Reactive confusion -2983 Acute paranoid reaction -2984 Psychogenic paranoid psychosis -2988 Other and unspecified reactive psychosis -2989 Unspecified psychosis -29900 Autistic disorder, current or active state -29901 Autistic disorder, residual state -29910 Childhood disintegrative disorder, current or active state -29911 Childhood disintegrative disorder, residual state -29980 Other specified pervasive developmental disorders, current or active state -29981 Other specified pervasive developmental disorders, residual state -29990 Unspecified pervasive developmental disorder, current or active state -29991 Unspecified pervasive developmental disorder, residual state -30000 Anxiety state, unspecified -30001 Panic disorder without agoraphobia -30002 Generalized anxiety disorder -30009 Other anxiety states -30010 Hysteria, unspecified -30011 Conversion disorder -30012 Dissociative amnesia -30013 Dissociative fugue -30014 Dissociative identity disorder -30015 Dissociative disorder or reaction, unspecified -30016 Factitious disorder with predominantly psychological signs and symptoms -30019 Other and unspecified factitious illness -30020 Phobia, unspecified -30021 Agoraphobia with panic disorder -30022 Agoraphobia without mention of panic attacks -30023 Social phobia -30029 Other isolated or specific phobias -3003 Obsessive-compulsive disorders -3004 Dysthymic disorder -3005 Neurasthenia -3006 Depersonalization disorder -3007 Hypochondriasis -30081 Somatization disorder -30082 Undifferentiated somatoform disorder -30089 Other somatoform disorders -3009 Unspecified nonpsychotic mental disorder -3010 Paranoid personality disorder -30110 Affective personality disorder, unspecified -30111 Chronic hypomanic personality disorder -30112 Chronic depressive personality disorder -30113 Cyclothymic disorder -30120 Schizoid personality disorder, unspecified -30121 Introverted personality -30122 Schizotypal personality disorder -3013 Explosive personality disorder -3014 Obsessive-compulsive personality disorder -30150 Histrionic personality disorder, unspecified -30151 Chronic factitious illness with physical symptoms -30159 Other histrionic personality disorder -3016 Dependent personality disorder -3017 Antisocial personality disorder -30181 Narcissistic personality disorder -30182 Avoidant personality disorder -30183 Borderline personality disorder -30184 Passive-aggressive personality -30189 Other personality disorders -3019 Unspecified personality disorder -3020 Ego-dystonic sexual orientation -3021 Zoophilia -3022 Pedophilia -3023 Transvestic fetishism -3024 Exhibitionism -30250 Trans-sexualism with unspecified sexual history -30251 Trans-sexualism with asexual history -30252 Trans-sexualism with homosexual history -30253 Trans-sexualism with heterosexual history -3026 Gender identity disorder in children -30270 Psychosexual dysfunction, unspecified -30271 Hypoactive sexual desire disorder -30272 Psychosexual dysfunction with inhibited sexual excitement -30273 Female orgasmic disorder -30274 Male orgasmic disorder -30275 Premature ejaculation -30276 Dyspareunia, psychogenic -30279 Psychosexual dysfunction with other specified psychosexual dysfunctions -30281 Fetishism -30282 Voyeurism -30283 Sexual masochism -30284 Sexual sadism -30285 Gender identity disorder in adolescents or adults -30289 Other specified psychosexual disorders -3029 Unspecified psychosexual disorder -30300 Acute alcoholic intoxication in alcoholism, unspecified -30301 Acute alcoholic intoxication in alcoholism, continuous -30302 Acute alcoholic intoxication in alcoholism, episodic -30303 Acute alcoholic intoxication in alcoholism, in remission -30390 Other and unspecified alcohol dependence, unspecified -30391 Other and unspecified alcohol dependence, continuous -30392 Other and unspecified alcohol dependence, episodic -30393 Other and unspecified alcohol dependence, in remission -30400 Opioid type dependence, unspecified -30401 Opioid type dependence, continuous -30402 Opioid type dependence, episodic -30403 Opioid type dependence, in remission -30410 Sedative, hypnotic or anxiolytic dependence, unspecified -30411 Sedative, hypnotic or anxiolytic dependence, continuous -30412 Sedative, hypnotic or anxiolytic dependence, episodic -30413 Sedative, hypnotic or anxiolytic dependence, in remission -30420 Cocaine dependence, unspecified -30421 Cocaine dependence, continuous -30422 Cocaine dependence, episodic -30423 Cocaine dependence, in remission -30430 Cannabis dependence, unspecified -30431 Cannabis dependence, continuous -30432 Cannabis dependence, episodic -30433 Cannabis dependence, in remission -30440 Amphetamine and other psychostimulant dependence, unspecified -30441 Amphetamine and other psychostimulant dependence, continuous -30442 Amphetamine and other psychostimulant dependence, episodic -30443 Amphetamine and other psychostimulant dependence, in remission -30450 Hallucinogen dependence, unspecified -30451 Hallucinogen dependence, continuous -30452 Hallucinogen dependence, episodic -30453 Hallucinogen dependence, in remission -30460 Other specified drug dependence, unspecified -30461 Other specified drug dependence, continuous -30462 Other specified drug dependence, episodic -30463 Other specified drug dependence, in remission -30470 Combinations of opioid type drug with any other drug dependence, unspecified -30471 Combinations of opioid type drug with any other drug dependence, continuous -30472 Combinations of opioid type drug with any other drug dependence, episodic -30473 Combinations of opioid type drug with any other drug dependence, in remission -30480 Combinations of drug dependence excluding opioid type drug, unspecified -30481 Combinations of drug dependence excluding opioid type drug, continuous -30482 Combinations of drug dependence excluding opioid type drug, episodic -30483 Combinations of drug dependence excluding opioid type drug, in remission -30490 Unspecified drug dependence, unspecified -30491 Unspecified drug dependence, continuous -30492 Unspecified drug dependence, episodic -30493 Unspecified drug dependence, in remission -30500 Alcohol abuse, unspecified -30501 Alcohol abuse, continuous -30502 Alcohol abuse, episodic -30503 Alcohol abuse, in remission -3051 Tobacco use disorder -30520 Cannabis abuse, unspecified -30521 Cannabis abuse, continuous -30522 Cannabis abuse, episodic -30523 Cannabis abuse, in remission -30530 Hallucinogen abuse, unspecified -30531 Hallucinogen abuse, continuous -30532 Hallucinogen abuse, episodic -30533 Hallucinogen abuse, in remission -30540 Sedative, hypnotic or anxiolytic abuse, unspecified -30541 Sedative, hypnotic or anxiolytic abuse, continuous -30542 Sedative, hypnotic or anxiolytic abuse, episodic -30543 Sedative, hypnotic or anxiolytic abuse, in remission -30550 Opioid abuse, unspecified -30551 Opioid abuse, continuous -30552 Opioid abuse, episodic -30553 Opioid abuse, in remission -30560 Cocaine abuse, unspecified -30561 Cocaine abuse, continuous -30562 Cocaine abuse, episodic -30563 Cocaine abuse, in remission -30570 Amphetamine or related acting sympathomimetic abuse, unspecified -30571 Amphetamine or related acting sympathomimetic abuse, continuous -30572 Amphetamine or related acting sympathomimetic abuse, episodic -30573 Amphetamine or related acting sympathomimetic abuse, in remission -30580 Antidepressant type abuse, unspecified -30581 Antidepressant type abuse, continuous -30582 Antidepressant type abuse, episodic -30583 Antidepressant type abuse, in remission -30590 Other, mixed, or unspecified drug abuse, unspecified -30591 Other, mixed, or unspecified drug abuse, continuous -30592 Other, mixed, or unspecified drug abuse, episodic -30593 Other, mixed, or unspecified drug abuse, in remission -3060 Musculoskeletal malfunction arising from mental factors -3061 Respiratory malfunction arising from mental factors -3062 Cardiovascular malfunction arising from mental factors -3063 Skin disorder arising from mental factors -3064 Gastrointestinal malfunction arising from mental factors -30650 Psychogenic genitourinary malfunction, unspecified -30651 Psychogenic vaginismus -30652 Psychogenic dysmenorrhea -30653 Psychogenic dysuria -30659 Other genitourinary malfunction arising from mental factors -3066 Endocrine disorder arising from mental factors -3067 Disorder of organs of special sense arising from mental factors -3068 Other specified psychophysiological malfunction -3069 Unspecified psychophysiological malfunction -3070 Adult onset fluency disorder -3071 Anorexia nervosa -30720 Tic disorder, unspecified -30721 Transient tic disorder -30722 Chronic motor or vocal tic disorder -30723 Tourette's disorder -3073 Stereotypic movement disorder -30740 Nonorganic sleep disorder, unspecified -30741 Transient disorder of initiating or maintaining sleep -30742 Persistent disorder of initiating or maintaining sleep -30743 Transient disorder of initiating or maintaining wakefulness -30744 Persistent disorder of initiating or maintaining wakefulness -30745 Circadian rhythm sleep disorder of nonorganic origin -30746 Sleep arousal disorder -30747 Other dysfunctions of sleep stages or arousal from sleep -30748 Repetitive intrusions of sleep -30749 Other specific disorders of sleep of nonorganic origin -30750 Eating disorder, unspecified -30751 Bulimia nervosa -30752 Pica -30753 Rumination disorder -30754 Psychogenic vomiting -30759 Other disorders of eating -3076 Enuresis -3077 Encopresis -30780 Psychogenic pain, site unspecified -30781 Tension headache -30789 Other pain disorders related to psychological factors -3079 Other and unspecified special symptoms or syndromes, not elsewhere classified -3080 Predominant disturbance of emotions -3081 Predominant disturbance of consciousness -3082 Predominant psychomotor disturbance -3083 Other acute reactions to stress -3084 Mixed disorders as reaction to stress -3089 Unspecified acute reaction to stress -3090 Adjustment disorder with depressed mood -3091 Prolonged depressive reaction -30921 Separation anxiety disorder -30922 Emancipation disorder of adolescence and early adult life -30923 Specific academic or work inhibition -30924 Adjustment disorder with anxiety -30928 Adjustment disorder with mixed anxiety and depressed mood -30929 Other adjustment reactions with predominant disturbance of other emotions -3093 Adjustment disorder with disturbance of conduct -3094 Adjustment disorder with mixed disturbance of emotions and conduct -30981 Posttraumatic stress disorder -30982 Adjustment reaction with physical symptoms -30983 Adjustment reaction with withdrawal -30989 Other specified adjustment reactions -3099 Unspecified adjustment reaction -3100 Frontal lobe syndrome -3101 Personality change due to conditions classified elsewhere -3102 Postconcussion syndrome -31081 Pseudobulbar affect -31089 Other specified nonpsychotic mental disorders following organic brain damage -3109 Unspecified nonpsychotic mental disorder following organic brain damage -311 Depressive disorder, not elsewhere classified -31200 Undersocialized conduct disorder, aggressive type, unspecified -31201 Undersocialized conduct disorder, aggressive type, mild -31202 Undersocialized conduct disorder, aggressive type, moderate -31203 Undersocialized conduct disorder, aggressive type, severe -31210 Undersocialized conduct disorder, unaggressive type, unspecified -31211 Undersocialized conduct disorder, unaggressive type, mild -31212 Undersocialized conduct disorder, unaggressive type, moderate -31213 Undersocialized conduct disorder, unaggressive type, severe -31220 Socialized conduct disorder, unspecified -31221 Socialized conduct disorder, mild -31222 Socialized conduct disorder, moderate -31223 Socialized conduct disorder, severe -31230 Impulse control disorder, unspecified -31231 Pathological gambling -31232 Kleptomania -31233 Pyromania -31234 Intermittent explosive disorder -31235 Isolated explosive disorder -31239 Other disorders of impulse control -3124 Mixed disturbance of conduct and emotions -31281 Conduct disorder, childhood onset type -31282 Conduct disorder, adolescent onset type -31289 Other conduct disorder -3129 Unspecified disturbance of conduct -3130 Overanxious disorder specific to childhood and adolescence -3131 Misery and unhappiness disorder specific to childhood and adolescence -31321 Shyness disorder of childhood -31322 Introverted disorder of childhood -31323 Selective mutism -3133 Relationship problems specific to childhood and adolescence -31381 Oppositional defiant disorder -31382 Identity disorder of childhood or adolescence -31383 Academic underachievement disorder of childhood or adolescence -31389 Other emotional disturbances of childhood or adolescence -3139 Unspecified emotional disturbance of childhood or adolescence -31400 Attention deficit disorder without mention of hyperactivity -31401 Attention deficit disorder with hyperactivity -3141 Hyperkinesis with developmental delay -3142 Hyperkinetic conduct disorder -3148 Other specified manifestations of hyperkinetic syndrome -3149 Unspecified hyperkinetic syndrome -31500 Developmental reading disorder, unspecified -31501 Alexia -31502 Developmental dyslexia -31509 Other specific developmental reading disorder -3151 Mathematics disorder -3152 Other specific developmental learning difficulties -31531 Expressive language disorder -31532 Mixed receptive-expressive language disorder -31534 Speech and language developmental delay due to hearing loss -31535 Childhood onset fluency disorder -31539 Other developmental speech or language disorder -3154 Developmental coordination disorder -3155 Mixed development disorder -3158 Other specified delays in development -3159 Unspecified delay in development -316 Psychic factors associated with diseases classified elsewhere -317 Mild intellectual disabilities -3180 Moderate intellectual disabilities -3181 Severe intellectual disabilities -3182 Profound intellectual disabilities -319 Unspecified intellectual disabilities -3200 Hemophilus meningitis -3201 Pneumococcal meningitis -3202 Streptococcal meningitis -3203 Staphylococcal meningitis -3207 Meningitis in other bacterial diseases classified elsewhere -32081 Anaerobic meningitis -32082 Meningitis due to gram-negative bacteria, not elsewhere classified -32089 Meningitis due to other specified bacteria -3209 Meningitis due to unspecified bacterium -3210 Cryptococcal meningitis -3211 Meningitis in other fungal diseases -3212 Meningitis due to viruses not elsewhere classified -3213 Meningitis due to trypanosomiasis -3214 Meningitis in sarcoidosis -3218 Meningitis due to other nonbacterial organisms classified elsewhere -3220 Nonpyogenic meningitis -3221 Eosinophilic meningitis -3222 Chronic meningitis -3229 Meningitis, unspecified -32301 Encephalitis and encephalomyelitis in viral diseases classified elsewhere -32302 Myelitis in viral diseases classified elsewhere -3231 Encephalitis, myelitis, and encephalomyelitis in rickettsial diseases classified elsewhere -3232 Encephalitis, myelitis, and encephalomyelitis in protozoal diseases classified elsewhere -32341 Other encephalitis and encephalomyelitis due to other infections classified elsewhere -32342 Other myelitis due to other infections classified elsewhere -32351 Encephalitis and encephalomyelitis following immunization procedures -32352 Myelitis following immunization procedures -32361 Infectious acute disseminated encephalomyelitis (ADEM) -32362 Other postinfectious encephalitis and encephalomyelitis -32363 Postinfectious myelitis -32371 Toxic encephalitis and encephalomyelitis -32372 Toxic myelitis -32381 Other causes of encephalitis and encephalomyelitis -32382 Other causes of myelitis -3239 Unspecified causes of encephalitis, myelitis, and encephalomyelitis -3240 Intracranial abscess -3241 Intraspinal abscess -3249 Intracranial and intraspinal abscess of unspecified site -325 Phlebitis and thrombophlebitis of intracranial venous sinuses -326 Late effects of intracranial abscess or pyogenic infection -32700 Organic insomnia, unspecified -32701 Insomnia due to medical condition classified elsewhere -32702 Insomnia due to mental disorder -32709 Other organic insomnia -32710 Organic hypersomnia, unspecified -32711 Idiopathic hypersomnia with long sleep time -32712 Idiopathic hypersomnia without long sleep time -32713 Recurrent hypersomnia -32714 Hypersomnia due to medical condition classified elsewhere -32715 Hypersomnia due to mental disorder -32719 Other organic hypersomnia -32720 Organic sleep apnea, unspecified -32721 Primary central sleep apnea -32722 High altitude periodic breathing -32723 Obstructive sleep apnea (adult)(pediatric) -32724 Idiopathic sleep related non-obstructive alveolar hypoventilation -32725 Congenital central alveolar hypoventilation syndrome -32726 Sleep related hypoventilation/hypoxemia in conditions classifiable elsewhere -32727 Central sleep apnea in conditions classified elsewhere -32729 Other organic sleep apnea -32730 Circadian rhythm sleep disorder, unspecified -32731 Circadian rhythm sleep disorder, delayed sleep phase type -32732 Circadian rhythm sleep disorder, advanced sleep phase type -32733 Circadian rhythm sleep disorder, irregular sleep-wake type -32734 Circadian rhythm sleep disorder, free-running type -32735 Circadian rhythm sleep disorder, jet lag type -32736 Circadian rhythm sleep disorder, shift work type -32737 Circadian rhythm sleep disorder in conditions classified elsewhere -32739 Other circadian rhythm sleep disorder -32740 Organic parasomnia, unspecified -32741 Confusional arousals -32742 REM sleep behavior disorder -32743 Recurrent isolated sleep paralysis -32744 Parasomnia in conditions classified elsewhere -32749 Other organic parasomnia -32751 Periodic limb movement disorder -32752 Sleep related leg cramps -32753 Sleep related bruxism -32759 Other organic sleep related movement disorders -3278 Other organic sleep disorders -3300 Leukodystrophy -3301 Cerebral lipidoses -3302 Cerebral degeneration in generalized lipidoses -3303 Cerebral degeneration of childhood in other diseases classified elsewhere -3308 Other specified cerebral degenerations in childhood -3309 Unspecified cerebral degeneration in childhood -3310 Alzheimer's disease -33111 Pick's disease -33119 Other frontotemporal dementia -3312 Senile degeneration of brain -3313 Communicating hydrocephalus -3314 Obstructive hydrocephalus -3315 Idiopathic normal pressure hydrocephalus (INPH) -3316 Corticobasal degeneration -3317 Cerebral degeneration in diseases classified elsewhere -33181 Reye's syndrome -33182 Dementia with lewy bodies -33183 Mild cognitive impairment, so stated -33189 Other cerebral degeneration -3319 Cerebral degeneration, unspecified -3320 Paralysis agitans -3321 Secondary parkinsonism -3330 Other degenerative diseases of the basal ganglia -3331 Essential and other specified forms of tremor -3332 Myoclonus -3333 Tics of organic origin -3334 Huntington's chorea -3335 Other choreas -3336 Genetic torsion dystonia -33371 Athetoid cerebral palsy -33372 Acute dystonia due to drugs -33379 Other acquired torsion dystonia -33381 Blepharospasm -33382 Orofacial dyskinesia -33383 Spasmodic torticollis -33384 Organic writers' cramp -33385 Subacute dyskinesia due to drugs -33389 Other fragments of torsion dystonia -33390 Unspecified extrapyramidal disease and abnormal movement disorder -33391 Stiff-man syndrome -33392 Neuroleptic malignant syndrome -33393 Benign shuddering attacks -33394 Restless legs syndrome (RLS) -33399 Other extrapyramidal diseases and abnormal movement disorders -3340 Friedreich's ataxia -3341 Hereditary spastic paraplegia -3342 Primary cerebellar degeneration -3343 Other cerebellar ataxia -3344 Cerebellar ataxia in diseases classified elsewhere -3348 Other spinocerebellar diseases -3349 Spinocerebellar disease, unspecified -3350 Werdnig-Hoffmann disease -33510 Spinal muscular atrophy, unspecified -33511 Kugelberg-Welander disease -33519 Other spinal muscular atrophy -33520 Amyotrophic lateral sclerosis -33521 Progressive muscular atrophy -33522 Progressive bulbar palsy -33523 Pseudobulbar palsy -33524 Primary lateral sclerosis -33529 Other motor neuron disease -3358 Other anterior horn cell diseases -3359 Anterior horn cell disease, unspecified -3360 Syringomyelia and syringobulbia -3361 Vascular myelopathies -3362 Subacute combined degeneration of spinal cord in diseases classified elsewhere -3363 Myelopathy in other diseases classified elsewhere -3368 Other myelopathy -3369 Unspecified disease of spinal cord -33700 Idiopathic peripheral autonomic neuropathy, unspecified -33701 Carotid sinus syndrome -33709 Other idiopathic peripheral autonomic neuropathy -3371 Peripheral autonomic neuropathy in disorders classified elsewhere -33720 Reflex sympathetic dystrophy, unspecified -33721 Reflex sympathetic dystrophy of the upper limb -33722 Reflex sympathetic dystrophy of the lower limb -33729 Reflex sympathetic dystrophy of other specified site -3373 Autonomic dysreflexia -3379 Unspecified disorder of autonomic nervous system -3380 Central pain syndrome -33811 Acute pain due to trauma -33812 Acute post-thoracotomy pain -33818 Other acute postoperative pain -33819 Other acute pain -33821 Chronic pain due to trauma -33822 Chronic post-thoracotomy pain -33828 Other chronic postoperative pain -33829 Other chronic pain -3383 Neoplasm related pain (acute) (chronic) -3384 Chronic pain syndrome -33900 Cluster headache syndrome, unspecified -33901 Episodic cluster headache -33902 Chronic cluster headache -33903 Episodic paroxysmal hemicrania -33904 Chronic paroxysmal hemicrania -33905 Short lasting unilateral neuralgiform headache with conjunctival injection and tearing -33909 Other trigeminal autonomic cephalgias -33910 Tension type headache, unspecified -33911 Episodic tension type headache -33912 Chronic tension type headache -33920 Post-traumatic headache, unspecified -33921 Acute post-traumatic headache -33922 Chronic post-traumatic headache -3393 Drug induced headache, not elsewhere classified -33941 Hemicrania continua -33942 New daily persistent headache -33943 Primary thunderclap headache -33944 Other complicated headache syndrome -33981 Hypnic headache -33982 Headache associated with sexual activity -33983 Primary cough headache -33984 Primary exertional headache -33985 Primary stabbing headache -33989 Other headache syndromes -340 Multiple sclerosis -3410 Neuromyelitis optica -3411 Schilder's disease -34120 Acute (transverse) myelitis NOS -34121 Acute (transverse) myelitis in conditions classified elsewhere -34122 Idiopathic transverse myelitis -3418 Other demyelinating diseases of central nervous system -3419 Demyelinating disease of central nervous system, unspecified -34200 Flaccid hemiplegia and hemiparesis affecting unspecified side -34201 Flaccid hemiplegia and hemiparesis affecting dominant side -34202 Flaccid hemiplegia and hemiparesis affecting nondominant side -34210 Spastic hemiplegia and hemiparesis affecting unspecified side -34211 Spastic hemiplegia and hemiparesis affecting dominant side -34212 Spastic hemiplegia and hemiparesis affecting nondominant side -34280 Other specified hemiplegia and hemiparesis affecting unspecified side -34281 Other specified hemiplegia and hemiparesis affecting dominant side -34282 Other specified hemiplegia and hemiparesis affecting nondominant side -34290 Hemiplegia, unspecified, affecting unspecified side -34291 Hemiplegia, unspecified, affecting dominant side -34292 Hemiplegia, unspecified, affecting nondominant side -3430 Congenital diplegia -3431 Congenital hemiplegia -3432 Congenital quadriplegia -3433 Congenital monoplegia -3434 Infantile hemiplegia -3438 Other specified infantile cerebral palsy -3439 Infantile cerebral palsy, unspecified -34400 Quadriplegia, unspecified -34401 Quadriplegia, C1-C4, complete -34402 Quadriplegia, C1-C4, incomplete -34403 Quadriplegia, C5-C7, complete -34404 Quadriplegia, C5-C7, incomplete -34409 Other quadriplegia -3441 Paraplegia -3442 Diplegia of upper limbs -34430 Monoplegia of lower limb affecting unspecified side -34431 Monoplegia of lower limb affecting dominant side -34432 Monoplegia of lower limb affecting nondominant side -34440 Monoplegia of upper limb affecting unspecified side -34441 Monoplegia of upper limb affecting dominant side -34442 Monoplegia of upper limb affecting nondominant sde -3445 Unspecified monoplegia -34460 Cauda equina syndrome without mention of neurogenic bladder -34461 Cauda equina syndrome with neurogenic bladder -34481 Locked-in state -34489 Other specified paralytic syndrome -3449 Paralysis, unspecified -34500 Generalized nonconvulsive epilepsy, without mention of intractable epilepsy -34501 Generalized nonconvulsive epilepsy, with intractable epilepsy -34510 Generalized convulsive epilepsy, without mention of intractable epilepsy -34511 Generalized convulsive epilepsy, with intractable epilepsy -3452 Petit mal status -3453 Grand mal status -34540 Localization-related (focal) (partial) epilepsy and epileptic syndromes with complex partial seizures, without mention of intractable epilepsy -34541 Localization-related (focal) (partial) epilepsy and epileptic syndromes with complex partial seizures, with intractable epilepsy -34550 Localization-related (focal) (partial) epilepsy and epileptic syndromes with simple partial seizures, without mention of intractable epilepsy -34551 Localization-related (focal) (partial) epilepsy and epileptic syndromes with simple partial seizures, with intractable epilepsy -34560 Infantile spasms, without mention of intractable epilepsy -34561 Infantile spasms, with intractable epilepsy -34570 Epilepsia partialis continua, without mention of intractable epilepsy -34571 Epilepsia partialis continua, with intractable epilepsy -34580 Other forms of epilepsy and recurrent seizures, without mention of intractable epilepsy -34581 Other forms of epilepsy and recurrent seizures, with intractable epilepsy -34590 Epilepsy, unspecified, without mention of intractable epilepsy -34591 Epilepsy, unspecified, with intractable epilepsy -34600 Migraine with aura, without mention of intractable migraine without mention of status migrainosus -34601 Migraine with aura, with intractable migraine, so stated, without mention of status migrainosus -34602 Migraine with aura, without mention of intractable migraine with status migrainosus -34603 Migraine with aura, with intractable migraine, so stated, with status migrainosus -34610 Migraine without aura, without mention of intractable migraine without mention of status migrainosus -34611 Migraine without aura, with intractable migraine, so stated, without mention of status migrainosus -34612 Migraine without aura, without mention of intractable migraine with status migrainosus -34613 Migraine without aura, with intractable migraine, so stated, with status migrainosus -34620 Variants of migraine, not elsewhere classified, without mention of intractable migraine without mention of status migrainosus -34621 Variants of migraine, not elsewhere classified, with intractable migraine, so stated, without mention of status migrainosus -34622 Variants of migraine, not elsewhere classified, without mention of intractable migraine with status migrainosus -34623 Variants of migraine, not elsewhere classified, with intractable migraine, so stated, with status migrainosus -34630 Hemiplegic migraine, without mention of intractable migraine without mention of status migrainosus -34631 Hemiplegic migraine, with intractable migraine, so stated, without mention of status migrainosus -34632 Hemiplegic migraine, without mention of intractable migraine with status migrainosus -34633 Hemiplegic migraine, with intractable migraine, so stated, with status migrainosus -34640 Menstrual migraine, without mention of intractable migraine without mention of status migrainosus -34641 Menstrual migraine, with intractable migraine, so stated, without mention of status migrainosus -34642 Menstrual migraine, without mention of intractable migraine with status migrainosus -34643 Menstrual migraine, with intractable migraine, so stated, with status migrainosus -34650 Persistent migraine aura without cerebral infarction, without mention of intractable migraine without mention of status migrainosus -34651 Persistent migraine aura without cerebral infarction, with intractable migraine, so stated, without mention of status migrainosus -34652 Persistent migraine aura without cerebral infarction, without mention of intractable migraine with status migrainosus -34653 Persistent migraine aura without cerebral infarction, with intractable migraine, so stated, with status migrainosus -34660 Persistent migraine aura with cerebral infarction, without mention of intractable migraine without mention of status migrainosus -34661 Persistent migraine aura with cerebral infarction, with intractable migraine, so stated, without mention of status migrainosus -34662 Persistent migraine aura with cerebral infarction, without mention of intractable migraine with status migrainosus -34663 Persistent migraine aura with cerebral infarction, with intractable migraine, so stated, with status migrainosus -34670 Chronic migraine without aura, without mention of intractable migraine without mention of status migrainosus -34671 Chronic migraine without aura, with intractable migraine, so stated, without mention of status migrainosus -34672 Chronic migraine without aura, without mention of intractable migraine with status migrainosus -34673 Chronic migraine without aura, with intractable migraine, so stated, with status migrainosus -34680 Other forms of migraine, without mention of intractable migraine without mention of status migrainosus -34681 Other forms of migraine, with intractable migraine, so stated, without mention of status migrainosus -34682 Other forms of migraine, without mention of intractable migraine with status migrainosus -34683 Other forms of migraine, with intractable migraine, so stated, with status migrainosus -34690 Migraine, unspecified, without mention of intractable migraine without mention of status migrainosus -34691 Migraine, unspecified, with intractable migraine, so stated, without mention of status migrainosus -34692 Migraine, unspecified, without mention of intractable migraine with status migrainosus -34693 Migraine, unspecified, with intractable migraine, so stated, with status migrainosus -34700 Narcolepsy, without cataplexy -34701 Narcolepsy, with cataplexy -34710 Narcolepsy in conditions classified elsewhere, without cataplexy -34711 Narcolepsy in conditions classified elsewhere, with cataplexy -3480 Cerebral cysts -3481 Anoxic brain damage -3482 Benign intracranial hypertension -34830 Encephalopathy, unspecified -34831 Metabolic encephalopathy -34839 Other encephalopathy -3484 Compression of brain -3485 Cerebral edema -34881 Temporal sclerosis -34882 Brain death -34889 Other conditions of brain -3489 Unspecified condition of brain -3490 Reaction to spinal or lumbar puncture -3491 Nervous system complications from surgically implanted device -3492 Disorders of meninges, not elsewhere classified -34931 Accidental puncture or laceration of dura during a procedure -34939 Other dural tear -34981 Cerebrospinal fluid rhinorrhea -34982 Toxic encephalopathy -34989 Other specified disorders of nervous system -3499 Unspecified disorders of nervous system -3501 Trigeminal neuralgia -3502 Atypical face pain -3508 Other specified trigeminal nerve disorders -3509 Trigeminal nerve disorder, unspecified -3510 Bell's palsy -3511 Geniculate ganglionitis -3518 Other facial nerve disorders -3519 Facial nerve disorder, unspecified -3520 Disorders of olfactory (1st) nerve -3521 Glossopharyngeal neuralgia -3522 Other disorders of glossopharyngeal [9th] nerve -3523 Disorders of pneumogastric [10th] nerve -3524 Disorders of accessory [11th] nerve -3525 Disorders of hypoglossal [12th] nerve -3526 Multiple cranial nerve palsies -3529 Unspecified disorder of cranial nerves -3530 Brachial plexus lesions -3531 Lumbosacral plexus lesions -3532 Cervical root lesions, not elsewhere classified -3533 Thoracic root lesions, not elsewhere classified -3534 Lumbosacral root lesions, not elsewhere classified -3535 Neuralgic amyotrophy -3536 Phantom limb (syndrome) -3538 Other nerve root and plexus disorders -3539 Unspecified nerve root and plexus disorder -3540 Carpal tunnel syndrome -3541 Other lesion of median nerve -3542 Lesion of ulnar nerve -3543 Lesion of radial nerve -3544 Causalgia of upper limb -3545 Mononeuritis multiplex -3548 Other mononeuritis of upper limb -3549 Mononeuritis of upper limb, unspecified -3550 Lesion of sciatic nerve -3551 Meralgia paresthetica -3552 Other lesion of femoral nerve -3553 Lesion of lateral popliteal nerve -3554 Lesion of medial popliteal nerve -3555 Tarsal tunnel syndrome -3556 Lesion of plantar nerve -35571 Causalgia of lower limb -35579 Other mononeuritis of lower limb -3558 Mononeuritis of lower limb, unspecified -3559 Mononeuritis of unspecified site -3560 Hereditary peripheral neuropathy -3561 Peroneal muscular atrophy -3562 Hereditary sensory neuropathy -3563 Refsum's disease -3564 Idiopathic progressive polyneuropathy -3568 Other specified idiopathic peripheral neuropathy -3569 Unspecified hereditary and idiopathic peripheral neuropathy -3570 Acute infective polyneuritis -3571 Polyneuropathy in collagen vascular disease -3572 Polyneuropathy in diabetes -3573 Polyneuropathy in malignant disease -3574 Polyneuropathy in other diseases classified elsewhere -3575 Alcoholic polyneuropathy -3576 Polyneuropathy due to drugs -3577 Polyneuropathy due to other toxic agents -35781 Chronic inflammatory demyelinating polyneuritis -35782 Critical illness polyneuropathy -35789 Other inflammatory and toxic neuropathy -3579 Unspecified inflammatory and toxic neuropathy -35800 Myasthenia gravis without (acute) exacerbation -35801 Myasthenia gravis with (acute) exacerbation -3581 Myasthenic syndromes in diseases classified elsewhere -3582 Toxic myoneural disorders -35830 Lambert-Eaton syndrome, unspecified -35831 Lambert-Eaton syndrome in neoplastic disease -35839 Lambert-Eaton syndrome in other diseases classified elsewhere -3588 Other specified myoneural disorders -3589 Myoneural disorders, unspecified -3590 Congenital hereditary muscular dystrophy -3591 Hereditary progressive muscular dystrophy -35921 Myotonic muscular dystrophy -35922 Myotonia congenita -35923 Myotonic chondrodystrophy -35924 Drug- induced myotonia -35929 Other specified myotonic disorder -3593 Periodic paralysis -3594 Toxic myopathy -3595 Myopathy in endocrine diseases classified elsewhere -3596 Symptomatic inflammatory myopathy in diseases classified elsewhere -35971 Inclusion body myositis -35979 Other inflammatory and immune myopathies, NEC -35981 Critical illness myopathy -35989 Other myopathies -3599 Myopathy, unspecified -36000 Purulent endophthalmitis, unspecified -36001 Acute endophthalmitis -36002 Panophthalmitis -36003 Chronic endophthalmitis -36004 Vitreous abscess -36011 Sympathetic uveitis -36012 Panuveitis -36013 Parasitic endophthalmitis NOS -36014 Ophthalmia nodosa -36019 Other endophthalmitis -36020 Degenerative disorder of globe, unspecified -36021 Progressive high (degenerative) myopia -36023 Siderosis of globe -36024 Other metallosis of globe -36029 Other degenerative disorders of globe -36030 Hypotony of eye, unspecified -36031 Primary hypotony of eye -36032 Ocular fistula causing hypotony -36033 Hypotony associated with other ocular disorders -36034 Flat anterior chamber of eye -36040 Degenerated globe or eye, unspecified -36041 Blind hypotensive eye -36042 Blind hypertensive eye -36043 Hemophthalmos, except current injury -36044 Leucocoria -36050 Foreign body, magnetic, intraocular, unspecified -36051 Foreign body, magnetic, in anterior chamber of eye -36052 Foreign body, magnetic, in iris or ciliary body -36053 Foreign body, magnetic, in lens -36054 Foreign body, magnetic, in vitreous -36055 Foreign body, magnetic, in posterior wall -36059 Intraocular foreign body, magnetic, in other or multiple sites -36060 Foreign body, intraocular, unspecified -36061 Foreign body in anterior chamber -36062 Foreign body in iris or ciliary body -36063 Foreign body in lens -36064 Foreign body in vitreous -36065 Foreign body in posterior wall of eye -36069 Intraocular foreign body in other or multiple sites -36081 Luxation of globe -36089 Other disorders of globe -3609 Unspecified disorder of globe -36100 Retinal detachment with retinal defect, unspecified -36101 Recent retinal detachment, partial, with single defect -36102 Recent retinal detachment, partial, with multiple defects -36103 Recent retinal detachment, partial, with giant tear -36104 Recent retinal detachment, partial, with retinal dialysis -36105 Recent retinal detachment, total or subtotal -36106 Old retinal detachment, partial -36107 Old retinal detachment, total or subtotal -36110 Retinoschisis, unspecified -36111 Flat retinoschisis -36112 Bullous retinoschisis -36113 Primary retinal cysts -36114 Secondary retinal cysts -36119 Other retinoschisis and retinal cysts -3612 Serous retinal detachment -36130 Retinal defect, unspecified -36131 Round hole of retina without detachment -36132 Horseshoe tear of retina without detachment -36133 Multiple defects of retina without detachment -36181 Traction detachment of retina -36189 Other forms of retinal detachment -3619 Unspecified retinal detachment -36201 Background diabetic retinopathy -36202 Proliferative diabetic retinopathy -36203 Nonproliferative diabetic retinopathy NOS -36204 Mild nonproliferative diabetic retinopathy -36205 Moderate nonproliferative diabetic retinopathy -36206 Severe nonproliferative diabetic retinopathy -36207 Diabetic macular edema -36210 Background retinopathy, unspecified -36211 Hypertensive retinopathy -36212 Exudative retinopathy -36213 Changes in vascular appearance of retina -36214 Retinal microaneurysms NOS -36215 Retinal telangiectasia -36216 Retinal neovascularization NOS -36217 Other intraretinal microvascular abnormalities -36218 Retinal vasculitis -36220 Retinopathy of prematurity, unspecified -36221 Retrolental fibroplasia -36222 Retinopathy of prematurity, stage 0 -36223 Retinopathy of prematurity, stage 1 -36224 Retinopathy of prematurity, stage 2 -36225 Retinopathy of prematurity, stage 3 -36226 Retinopathy of prematurity, stage 4 -36227 Retinopathy of prematurity, stage 5 -36229 Other nondiabetic proliferative retinopathy -36230 Retinal vascular occlusion, unspecified -36231 Central retinal artery occlusion -36232 Retinal arterial branch occlusion -36233 Partial retinal arterial occlusion -36234 Transient retinal arterial occlusion -36235 Central retinal vein occlusion -36236 Venous tributary (branch) occlusion -36237 Venous engorgement -36240 Retinal layer separation, unspecified -36241 Central serous retinopathy -36242 Serous detachment of retinal pigment epithelium -36243 Hemorrhagic detachment of retinal pigment epithelium -36250 Macular degeneration (senile), unspecified -36251 Nonexudative senile macular degeneration -36252 Exudative senile macular degeneration -36253 Cystoid macular degeneration -36254 Macular cyst, hole, or pseudohole -36255 Toxic maculopathy -36256 Macular puckering -36257 Drusen (degenerative) -36260 Peripheral retinal degeneration, unspecified -36261 Paving stone degeneration -36262 Microcystoid degeneration -36263 Lattice degeneration -36264 Senile reticular degeneration -36265 Secondary pigmentary degeneration -36266 Secondary vitreoretinal degenerations -36270 Hereditary retinal dystrophy, unspecified -36271 Retinal dystrophy in systemic or cerebroretinal lipidoses -36272 Retinal dystrophy in other systemic disorders and syndromes -36273 Vitreoretinal dystrophies -36274 Pigmentary retinal dystrophy -36275 Other dystrophies primarily involving the sensory retina -36276 Dystrophies primarily involving the retinal pigment epithelium -36277 Dystrophies primarily involving Bruch's membrane -36281 Retinal hemorrhage -36282 Retinal exudates and deposits -36283 Retinal edema -36284 Retinal ischemia -36285 Retinal nerve fiber bundle defects -36289 Other retinal disorders -3629 Unspecified retinal disorder -36300 Focal chorioretinitis, unspecified -36301 Focal choroiditis and chorioretinitis, juxtapapillary -36303 Focal choroiditis and chorioretinitis of other posterior pole -36304 Focal choroiditis and chorioretinitis, peripheral -36305 Focal retinitis and retinochoroiditis, juxtapapillary -36306 Focal retinitis and retinochoroiditis, macular or paramacular -36307 Focal retinitis and retinochoroiditis of other posterior pole -36308 Focal retinitis and retinochoroiditis, peripheral -36310 Disseminated chorioretinitis, unspecified -36311 Disseminated choroiditis and chorioretinitis, posterior pole -36312 Disseminated choroiditis and chorioretinitis, peripheral -36313 Disseminated choroiditis and chorioretinitis, generalized -36314 Disseminated retinitis and retinochoroiditis, metastatic -36315 Disseminated retinitis and retinochoroiditis, pigment epitheliopathy -36320 Chorioretinitis, unspecified -36321 Pars planitis -36322 Harada's disease -36330 Chorioretinal scar, unspecified -36331 Solar retinopathy -36332 Other macular scars -36333 Other scars of posterior pole -36334 Peripheral scars -36335 Disseminated scars -36340 Choroidal degeneration, unspecified -36341 Senile atrophy of choroid -36342 Diffuse secondary atrophy of choroid -36343 Angioid streaks of choroid -36350 Hereditary choroidal dystrophy or atrophy, unspecified -36351 Circumpapillary dystrophy of choroid, partial -36352 Circumpapillary dystrophy of choroid, total -36353 Central dystrophy of choroid, partial -36354 Central choroidal atrophy, total -36355 Choroideremia -36356 Other diffuse or generalized dystrophy of choroid, partial -36357 Other diffuse or generalized dystrophy of choroid, total -36361 Choroidal hemorrhage, unspecified -36362 Expulsive choroidal hemorrhage -36363 Choroidal rupture -36370 Choroidal detachment, unspecified -36371 Serous choroidal detachment -36372 Hemorrhagic choroidal detachment -3638 Other disorders of choroid -3639 Unspecified disorder of choroid -36400 Acute and subacute iridocyclitis, unspecified -36401 Primary iridocyclitis -36402 Recurrent iridocyclitis -36403 Secondary iridocyclitis, infectious -36404 Secondary iridocyclitis, noninfectious -36405 Hypopyon -36410 Chronic iridocyclitis, unspecified -36411 Chronic iridocyclitis in diseases classified elsewhere -36421 Fuchs' heterochromic cyclitis -36422 Glaucomatocyclitic crises -36423 Lens-induced iridocyclitis -36424 Vogt-koyanagi syndrome -3643 Unspecified iridocyclitis -36441 Hyphema of iris and ciliary body -36442 Rubeosis iridis -36451 Essential or progressive iris atrophy -36452 Iridoschisis -36453 Pigmentary iris degeneration -36454 Degeneration of pupillary margin -36455 Miotic cysts of pupillary margin -36456 Degenerative changes of chamber angle -36457 Degenerative changes of ciliary body -36459 Other iris atrophy -36460 Idiopathic cysts of iris, ciliary body, and anterior chamber -36461 Implantation cysts of iris, ciliary body, and anterior chamber -36462 Exudative cysts of iris or anterior chamber -36463 Primary cyst of pars plana -36464 Exudative cyst of pars plana -36470 Adhesions of iris, unspecified -36471 Posterior synechiae of iris -36472 Anterior synechiae of iris -36473 Goniosynechiae -36474 Adhesions and disruptions of pupillary membranes -36475 Pupillary abnormalities -36476 Iridodialysis -36477 Recession of chamber angle of eye -36481 Floppy iris syndrome -36482 Plateau iris syndrome -36489 Other disorders of iris and ciliary body -3649 Unspecified disorder of iris and ciliary body -36500 Preglaucoma, unspecified -36501 Open angle with borderline findings, low risk -36502 Anatomical narrow angle borderline glaucoma -36503 Steroid responders borderline glaucoma -36504 Ocular hypertension -36505 Open angle with borderline findings, high risk -36506 Primary angle closure without glaucoma damage -36510 Open-angle glaucoma, unspecified -36511 Primary open angle glaucoma -36512 Low tension open-angle glaucoma -36513 Pigmentary open-angle glaucoma -36514 Glaucoma of childhood -36515 Residual stage of open angle glaucoma -36520 Primary angle-closure glaucoma, unspecified -36521 Intermittent angle-closure glaucoma -36522 Acute angle-closure glaucoma -36523 Chronic angle-closure glaucoma -36524 Residual stage of angle-closure glaucoma -36531 Corticosteroid-induced glaucoma, glaucomatous stage -36532 Corticosteroid-induced glaucoma, residual stage -36541 Glaucoma associated with chamber angle anomalies -36542 Glaucoma associated with anomalies of iris -36543 Glaucoma associated with other anterior segment anomalies -36544 Glaucoma associated with systemic syndromes -36551 Phacolytic glaucoma -36552 Pseudoexfoliation glaucoma -36559 Glaucoma associated with other lens disorders -36560 Glaucoma associated with unspecified ocular disorder -36561 Glaucoma associated with pupillary block -36562 Glaucoma associated with ocular inflammations -36563 Glaucoma associated with vascular disorders -36564 Glaucoma associated with tumors or cysts -36565 Glaucoma associated with ocular trauma -36570 Glaucoma stage, unspecified -36571 Mild stage glaucoma -36572 Moderate stage glaucoma -36573 Severe stage glaucoma -36574 Indeterminate stage glaucoma -36581 Hypersecretion glaucoma -36582 Glaucoma with increased episcleral venous pressure -36583 Aqueous misdirection -36589 Other specified glaucoma -3659 Unspecified glaucoma -36600 Nonsenile cataract, unspecified -36601 Anterior subcapsular polar cataract -36602 Posterior subcapsular polar cataract -36603 Cortical, lamellar, or zonular cataract -36604 Nuclear cataract -36609 Other and combined forms of nonsenile cataract -36610 Senile cataract, unspecified -36611 Pseudoexfoliation of lens capsule -36612 Incipient senile cataract -36613 Anterior subcapsular polar senile cataract -36614 Posterior subcapsular polar senile cataract -36615 Cortical senile cataract -36616 Senile nuclear sclerosis -36617 Total or mature cataract -36618 Hypermature cataract -36619 Other and combined forms of senile cataract -36620 Traumatic cataract, unspecified -36621 Localized traumatic opacities -36622 Total traumatic cataract -36623 Partially resolved traumatic cataract -36630 Cataracta complicata, unspecified -36631 Glaucomatous flecks (subcapsular) -36632 Cataract in inflammatory ocular disorders -36633 Cataract with neovascularization -36634 Cataract in degenerative ocular disorders -36641 Diabetic cataract -36642 Tetanic cataract -36643 Myotonic cataract -36644 Cataract associated with other syndromes -36645 Toxic cataract -36646 Cataract associated with radiation and other physical influences -36650 After-cataract, unspecified -36651 Soemmering's ring -36652 Other after-cataract, not obscuring vision -36653 After-cataract, obscuring vision -3668 Other cataract -3669 Unspecified cataract -3670 Hypermetropia -3671 Myopia -36720 Astigmatism, unspecified -36721 Regular astigmatism -36722 Irregular astigmatism -36731 Anisometropia -36732 Aniseikonia -3674 Presbyopia -36751 Paresis of accommodation -36752 Total or complete internal ophthalmoplegia -36753 Spasm of accommodation -36781 Transient refractive change -36789 Other disorders of refraction and accommodation -3679 Unspecified disorder of refraction and accommodation -36800 Amblyopia, unspecified -36801 Strabismic amblyopia -36802 Deprivation amblyopia -36803 Refractive amblyopia -36810 Subjective visual disturbance, unspecified -36811 Sudden visual loss -36812 Transient visual loss -36813 Visual discomfort -36814 Visual distortions of shape and size -36815 Other visual distortions and entoptic phenomena -36816 Psychophysical visual disturbances -3682 Diplopia -36830 Binocular vision disorder, unspecified -36831 Suppression of binocular vision -36832 Simultaneous visual perception without fusion -36833 Fusion with defective stereopsis -36834 Abnormal retinal correspondence -36840 Visual field defect, unspecified -36841 Scotoma involving central area -36842 Scotoma of blind spot area -36843 Sector or arcuate visual field defects -36844 Other localized visual field defect -36845 Generalized visual field contraction or constriction -36846 Homonymous bilateral field defects -36847 Heteronymous bilateral field defects -36851 Protan defect -36852 Deutan defect -36853 Tritan defect -36854 Achromatopsia -36855 Acquired color vision deficiencies -36859 Other color vision deficiencies -36860 Night blindness, unspecified -36861 Congenital night blindness -36862 Acquired night blindness -36863 Abnormal dark adaptation curve -36869 Other night blindness -3688 Other specified visual disturbances -3689 Unspecified visual disturbance -36900 Profound impairment, both eyes, impairment level not further specified -36901 Better eye: total vision impairment; lesser eye: total vision impairment -36902 Better eye: near-total vision impairment; lesser eye: not further specified -36903 Better eye: near-total vision impairment; lesser eye: total vision impairment -36904 Better eye: near-total vision impairment; lesser eye: near-total vision impairment -36905 Better eye: profound vision impairment; lesser eye: not further specified -36906 Better eye: profound vision impairment; lesser eye: total vision impairment -36907 Better eye: profound vision impairment; lesser eye: near-total vision impairment -36908 Better eye: profound vision impairment; lesser eye: profound vision impairment -36910 Moderate or severe impairment, better eye, impairment level not further specified -36911 Better eye: severe vision impairment; lesser eye: blind, not further specified -36912 Better eye: severe vision impairment; lesser eye: total vision impairment -36913 Better eye: severe vision impairment; lesser eye: near-total vision impairment -36914 Better eye: severe vision impairment; lesser eye: profound vision impairment -36915 Better eye: moderate vision impairment; lesser eye: blind, not further specified -36916 Better eye: moderate vision impairment; lesser eye: total vision impairment -36917 Better eye: moderate vision impairment; lesser eye: near-total vision impairment -36918 Better eye: moderate vision impairment; lesser eye: profound vision impairment -36920 Moderate or severe impairment, both eyes, impairment level not further specified -36921 Better eye: severe vision impairment; lesser eye; impairment not further specified -36922 Better eye: severe vision impairment; lesser eye: severe vision impairment -36923 Better eye: moderate vision impairment; lesser eye: impairment not further specified -36924 Better eye: moderate vision impairment; lesser eye: severe vision impairment -36925 Better eye: moderate vision impairment; lesser eye: moderate vision impairment -3693 Unqualified visual loss, both eyes -3694 Legal blindness, as defined in U.S.A. -36960 Profound impairment, one eye, impairment level not further specified -36961 One eye: total vision impairment; other eye: not specified -36962 One eye: total vision impairment; other eye: near-normal vision -36963 One eye: total vision impairment; other eye: normal vision -36964 One eye: near-total vision impairment; other eye: vision not specified -36965 One eye: near-total vision impairment; other eye: near-normal vision -36966 One eye: near-total vision impairment; other eye: normal vision -36967 One eye: profound vision impairment; other eye: vision not specified -36968 One eye: profound vision impairment; other eye: near-normal vision -36969 One eye: profound vision impairment; other eye: normal vision -36970 Moderate or severe impairment, one eye, impairment level not further specified -36971 One eye: severe vision impairment; other eye: vision not specified -36972 One eye: severe vision impairment; other eye: near-normal vision -36973 One eye: severe vision impairment; other eye: normal vision -36974 One eye: moderate vision impairment; other eye: vision not specified -36975 One eye: moderate vision impairment; other eye: near-normal vision -36976 One eye: moderate vision impairment; other eye: normal vision -3698 Unqualified visual loss, one eye -3699 Unspecified visual loss -37000 Corneal ulcer, unspecified -37001 Marginal corneal ulcer -37002 Ring corneal ulcer -37003 Central corneal ulcer -37004 Hypopyon ulcer -37005 Mycotic corneal ulcer -37006 Perforated corneal ulcer -37007 Mooren's ulcer -37020 Superficial keratitis, unspecified -37021 Punctate keratitis -37022 Macular keratitis -37023 Filamentary keratitis -37024 Photokeratitis -37031 Phlyctenular keratoconjunctivitis -37032 Limbar and corneal involvement in vernal conjunctivitis -37033 Keratoconjunctivitis sicca, not specified as Sjogren's -37034 Exposure keratoconjunctivitis -37035 Neurotrophic keratoconjunctivitis -37040 Keratoconjunctivitis, unspecified -37044 Keratitis or keratoconjunctivitis in exanthema -37049 Other keratoconjunctivitis -37050 Interstitial keratitis, unspecified -37052 Diffuse interstitial keratitis -37054 Sclerosing keratitis -37055 Corneal abscess -37059 Other interstitial and deep keratitis -37060 Corneal neovascularization, unspecified -37061 Localized vascularization of cornea -37062 Pannus (corneal) -37063 Deep vascularization of cornea -37064 Ghost vessels (corneal) -3708 Other forms of keratitis -3709 Unspecified keratitis -37100 Corneal opacity, unspecified -37101 Minor opacity of cornea -37102 Peripheral opacity of cornea -37103 Central opacity of cornea -37104 Adherent leucoma -37105 Phthisical cornea -37110 Corneal deposit, unspecified -37111 Anterior corneal pigmentations -37112 Stromal corneal pigmentations -37113 Posterior corneal pigmentations -37114 Kayser-Fleischer ring -37115 Other corneal deposits associated with metabolic disorders -37116 Argentous corneal deposits -37120 Corneal edema, unspecified -37121 Idiopathic corneal edema -37122 Secondary corneal edema -37123 Bullous keratopathy -37124 Corneal edema due to wearing of contact lenses -37130 Corneal membrane change, unspecified -37131 Folds and rupture of bowman's membrane -37132 Folds in descemet's membrane -37133 Rupture in descemet's membrane -37140 Corneal degeneration, unspecified -37141 Senile corneal changes -37142 Recurrent erosion of cornea -37143 Band-shaped keratopathy -37144 Other calcerous degenerations of cornea -37145 Keratomalacia NOS -37146 Nodular degeneration of cornea -37148 Peripheral degenerations of cornea -37149 Other corneal degenerations -37150 Hereditary corneal dystrophy, unspecified -37151 Juvenile epithelial corneal dystrophy -37152 Other anterior corneal dystrophies -37153 Granular corneal dystrophy -37154 Lattice corneal dystrophy -37155 Macular corneal dystrophy -37156 Other stromal corneal dystrophies -37157 Endothelial corneal dystrophy -37158 Other posterior corneal dystrophies -37160 Keratoconus, unspecified -37161 Keratoconus, stable condition -37162 Keratoconus, acute hydrops -37170 Corneal deformity, unspecified -37171 Corneal ectasia -37172 Descemetocele -37173 Corneal staphyloma -37181 Corneal anesthesia and hypoesthesia -37182 Corneal disorder due to contact lens -37189 Other corneal disorders -3719 Unspecified corneal disorder -37200 Acute conjunctivitis, unspecified -37201 Serous conjunctivitis, except viral -37202 Acute follicular conjunctivitis -37203 Other mucopurulent conjunctivitis -37204 Pseudomembranous conjunctivitis -37205 Acute atopic conjunctivitis -37206 Acute chemical conjunctivitis -37210 Chronic conjunctivitis, unspecified -37211 Simple chronic conjunctivitis -37212 Chronic follicular conjunctivitis -37213 Vernal conjunctivitis -37214 Other chronic allergic conjunctivitis -37215 Parasitic conjunctivitis -37220 Blepharoconjunctivitis, unspecified -37221 Angular blepharoconjunctivitis -37222 Contact blepharoconjunctivitis -37230 Conjunctivitis, unspecified -37231 Rosacea conjunctivitis -37233 Conjunctivitis in mucocutaneous disease -37234 Pingueculitis -37239 Other conjunctivitis -37240 Pterygium, unspecified -37241 Peripheral pterygium, stationary -37242 Peripheral pterygium, progressive -37243 Central pterygium -37244 Double pterygium -37245 Recurrent pterygium -37250 Conjunctival degeneration, unspecified -37251 Pinguecula -37252 Pseudopterygium -37253 Conjunctival xerosis -37254 Conjunctival concretions -37255 Conjunctival pigmentations -37256 Conjunctival deposits -37261 Granuloma of conjunctiva -37262 Localized adhesions and strands of conjunctiva -37263 Symblepharon -37264 Scarring of conjunctiva -37271 Hyperemia of conjunctiva -37272 Conjunctival hemorrhage -37273 Conjunctival edema -37274 Vascular abnormalities of conjunctiva -37275 Conjunctival cysts -37281 Conjunctivochalasis -37289 Other disorders of conjunctiva -3729 Unspecified disorder of conjunctiva -37300 Blepharitis, unspecified -37301 Ulcerative blepharitis -37302 Squamous blepharitis -37311 Hordeolum externum -37312 Hordeolum internum -37313 Abscess of eyelid -3732 Chalazion -37331 Eczematous dermatitis of eyelid -37332 Contact and allergic dermatitis of eyelid -37333 Xeroderma of eyelid -37334 Discoid lupus erythematosus of eyelid -3734 Infective dermatitis of eyelid of types resulting in deformity -3735 Other infective dermatitis of eyelid -3736 Parasitic infestation of eyelid -3738 Other inflammations of eyelids -3739 Unspecified inflammation of eyelid -37400 Entropion, unspecified -37401 Senile entropion -37402 Mechanical entropion -37403 Spastic entropion -37404 Cicatricial entropion -37405 Trichiasis of eyelid without entropion -37410 Ectropion, unspecified -37411 Senile ectropion -37412 Mechanical ectropion -37413 Spastic ectropion -37414 Cicatricial ectropion -37420 Lagophthalmos, unspecified -37421 Paralytic lagophthalmos -37422 Mechanical lagophthalmos -37423 Cicatricial lagophthalmos -37430 Ptosis of eyelid, unspecified -37431 Paralytic ptosis -37432 Myogenic ptosis -37433 Mechanical ptosis -37434 Blepharochalasis -37441 Lid retraction or lag -37443 Abnormal innervation syndrome of eyelid -37444 Sensory disorders of eyelid -37445 Other sensorimotor disorders of eyelid -37446 Blepharophimosis -37450 Degenerative disorder of eyelid, unspecified -37451 Xanthelasma of eyelid -37452 Hyperpigmentation of eyelid -37453 Hypopigmentation of eyelid -37454 Hypertrichosis of eyelid -37455 Hypotrichosis of eyelid -37456 Other degenerative disorders of skin affecting eyelid -37481 Hemorrhage of eyelid -37482 Edema of eyelid -37483 Elephantiasis of eyelid -37484 Cysts of eyelids -37485 Vascular anomalies of eyelid -37486 Retained foreign body of eyelid -37487 Dermatochalasis -37489 Other disorders of eyelid -3749 Unspecified disorder of eyelid -37500 Dacryoadenitis, unspecified -37501 Acute dacryoadenitis -37502 Chronic dacryoadenitis -37503 Chronic enlargement of lacrimal gland -37511 Dacryops -37512 Other lacrimal cysts and cystic degeneration -37513 Primary lacrimal atrophy -37514 Secondary lacrimal atrophy -37515 Tear film insufficiency, unspecified -37516 Dislocation of lacrimal gland -37520 Epiphora, unspecified as to cause -37521 Epiphora due to excess lacrimation -37522 Epiphora due to insufficient drainage -37530 Dacryocystitis, unspecified -37531 Acute canaliculitis, lacrimal -37532 Acute dacryocystitis -37533 Phlegmonous dacryocystitis -37541 Chronic canaliculitis -37542 Chronic dacryocystitis -37543 Lacrimal mucocele -37551 Eversion of lacrimal punctum -37552 Stenosis of lacrimal punctum -37553 Stenosis of lacrimal canaliculi -37554 Stenosis of lacrimal sac -37555 Obstruction of nasolacrimal duct, neonatal -37556 Stenosis of nasolacrimal duct, acquired -37557 Dacryolith -37561 Lacrimal fistula -37569 Other changes of lacrimal passages -37581 Granuloma of lacrimal passages -37589 Other disorders of lacrimal system -3759 Unspecified disorder of lacrimal system -37600 Acute inflammation of orbit, unspecified -37601 Orbital cellulitis -37602 Orbital periostitis -37603 Orbital osteomyelitis -37604 Orbital tenonitis -37610 Chronic inflammation of orbit, unspecified -37611 Orbital granuloma -37612 Orbital myositis -37613 Parasitic infestation of orbit -37621 Thyrotoxic exophthalmos -37622 Exophthalmic ophthalmoplegia -37630 Exophthalmos, unspecified -37631 Constant exophthalmos -37632 Orbital hemorrhage -37633 Orbital edema or congestion -37634 Intermittent exophthalmos -37635 Pulsating exophthalmos -37636 Lateral displacement of globe -37640 Deformity of orbit, unspecified -37641 Hypertelorism of orbit -37642 Exostosis of orbit -37643 Local deformities of orbit due to bone disease -37644 Orbital deformities associated with craniofacial deformities -37645 Atrophy of orbit -37646 Enlargement of orbit -37647 Deformity of orbit due to trauma or surgery -37650 Enophthalmos, unspecified as to cause -37651 Enophthalmos due to atrophy of orbital tissue -37652 Enophthalmos due to trauma or surgery -3766 Retained (old) foreign body following penetrating wound of orbit -37681 Orbital cysts -37682 Myopathy of extraocular muscles -37689 Other orbital disorders -3769 Unspecified disorder of orbit -37700 Papilledema, unspecified -37701 Papilledema associated with increased intracranial pressure -37702 Papilledema associated with decreased ocular pressure -37703 Papilledema associated with retinal disorder -37704 Foster-Kennedy syndrome -37710 Optic atrophy, unspecified -37711 Primary optic atrophy -37712 Postinflammatory optic atrophy -37713 Optic atrophy associated with retinal dystrophies -37714 Glaucomatous atrophy [cupping] of optic disc -37715 Partial optic atrophy -37716 Hereditary optic atrophy -37721 Drusen of optic disc -37722 Crater-like holes of optic disc -37723 Coloboma of optic disc -37724 Pseudopapilledema -37730 Optic neuritis, unspecified -37731 Optic papillitis -37732 Retrobulbar neuritis (acute) -37733 Nutritional optic neuropathy -37734 Toxic optic neuropathy -37739 Other optic neuritis -37741 Ischemic optic neuropathy -37742 Hemorrhage in optic nerve sheaths -37743 Optic nerve hypoplasia -37749 Other disorders of optic nerve -37751 Disorders of optic chiasm associated with pituitary neoplasms and disorders -37752 Disorders of optic chiasm associated with other neoplasms -37753 Disorders of optic chiasm associated with vascular disorders -37754 Disorders of optic chiasm associated with inflammatory disorders -37761 Disorders of other visual pathways associated with neoplasms -37762 Disorders of other visual pathways associated with vascular disorders -37763 Disorders of other visual pathways associated with inflammatory disorders -37771 Disorders of visual cortex associated with neoplasms -37772 Disorders of visual cortex associated with vascular disorders -37773 Disorders of visual cortex associated with inflammatory disorders -37775 Cortical blindness -3779 Unspecified disorder of optic nerve and visual pathways -37800 Esotropia, unspecified -37801 Monocular esotropia -37802 Monocular esotropia with A pattern -37803 Monocular esotropia with V pattern -37804 Monocular esotropia with other noncomitancies -37805 Alternating esotropia -37806 Alternating esotropia with A pattern -37807 Alternating esotropia with V pattern -37808 Alternating esotropia with other noncomitancies -37810 Exotropia, unspecified -37811 Monocular exotropia -37812 Monocular exotropia with A pattern -37813 Monocular exotropia with V pattern -37814 Monocular exotropia with other noncomitancies -37815 Alternating exotropia -37816 Alternating exotropia with A pattern -37817 Alternating exotropia with V pattern -37818 Alternating exotropia with other noncomitancies -37820 Intermittent heterotropia, unspecified -37821 Intermittent esotropia, monocular -37822 Intermittent esotropia, alternating -37823 Intermittent exotropia, monocular -37824 Intermittent exotropia, alternating -37830 Heterotropia, unspecified -37831 Hypertropia -37832 Hypotropia -37833 Cyclotropia -37834 Monofixation syndrome -37835 Accommodative component in esotropia -37840 Heterophoria, unspecified -37841 Esophoria -37842 Exophoria -37843 Vertical heterophoria -37844 Cyclophoria -37845 Alternating hyperphoria -37850 Paralytic strabismus, unspecified -37851 Third or oculomotor nerve palsy, partial -37852 Third or oculomotor nerve palsy, total -37853 Fourth or trochlear nerve palsy -37854 Sixth or abducens nerve palsy -37855 External ophthalmoplegia -37856 Total ophthalmoplegia -37860 Mechanical strabismus, unspecified -37861 Brown's (tendon) sheath syndrome -37862 Mechanical strabismus from other musculofascial disorders -37863 Limited duction associated with other conditions -37871 Duane's syndrome -37872 Progressive external ophthalmoplegia -37873 Strabismus in other neuromuscular disorders -37881 Palsy of conjugate gaze -37882 Spasm of conjugate gaze -37883 Convergence insufficiency or palsy -37884 Convergence excess or spasm -37885 Anomalies of divergence -37886 Internuclear ophthalmoplegia -37887 Other dissociated deviation of eye movements -3789 Unspecified disorder of eye movements -37900 Scleritis, unspecified -37901 Episcleritis periodica fugax -37902 Nodular episcleritis -37903 Anterior scleritis -37904 Scleromalacia perforans -37905 Scleritis with corneal involvement -37906 Brawny scleritis -37907 Posterior scleritis -37909 Other scleritis and episcleritis -37911 Scleral ectasia -37912 Staphyloma posticum -37913 Equatorial staphyloma -37914 Anterior staphyloma, localized -37915 Ring staphyloma -37916 Other degenerative disorders of sclera -37919 Other disorders of sclera -37921 Vitreous degeneration -37922 Crystalline deposits in vitreous -37923 Vitreous hemorrhage -37924 Other vitreous opacities -37925 Vitreous membranes and strands -37926 Vitreous prolapse -37927 Vitreomacular adhesion -37929 Other disorders of vitreous -37931 Aphakia -37932 Subluxation of lens -37933 Anterior dislocation of lens -37934 Posterior dislocation of lens -37939 Other disorders of lens -37940 Abnormal pupillary function, unspecified -37941 Anisocoria -37942 Miosis (persistent), not due to miotics -37943 Mydriasis (persistent), not due to mydriatics -37945 Argyll Robertson pupil, atypical -37946 Tonic pupillary reaction -37949 Other anomalies of pupillary function -37950 Nystagmus, unspecified -37951 Congenital nystagmus -37952 Latent nystagmus -37953 Visual deprivation nystagmus -37954 Nystagmus associated with disorders of the vestibular system -37955 Dissociated nystagmus -37956 Other forms of nystagmus -37957 Deficiencies of saccadic eye movements -37958 Deficiencies of smooth pursuit movements -37959 Other irregularities of eye movements -37960 Inflammation (infection) of postprocedural bleb, unspecified -37961 Inflammation (infection) of postprocedural bleb, stage 1 -37962 Inflammation (infection) of postprocedural bleb, stage 2 -37963 Inflammation (infection) of postprocedural bleb, stage 3 -3798 Other specified disorders of eye and adnexa -37990 Disorder of eye, unspecified -37991 Pain in or around eye -37992 Swelling or mass of eye -37993 Redness or discharge of eye -37999 Other ill-defined disorders of eye -38000 Perichondritis of pinna, unspecified -38001 Acute perichondritis of pinna -38002 Chronic perichondritis of pinna -38003 Chondritis of pinna -38010 Infective otitis externa, unspecified -38011 Acute infection of pinna -38012 Acute swimmers' ear -38013 Other acute infections of external ear -38014 Malignant otitis externa -38015 Chronic mycotic otitis externa -38016 Other chronic infective otitis externa -38021 Cholesteatoma of external ear -38022 Other acute otitis externa -38023 Other chronic otitis externa -38030 Disorder of pinna, unspecified -38031 Hematoma of auricle or pinna -38032 Acquired deformities of auricle or pinna -38039 Other noninfectious disorders of pinna -3804 Impacted cerumen -38050 Acquired stenosis of external ear canal, unspecified as to cause -38051 Acquired stenosis of external ear canal secondary to trauma -38052 Acquired stenosis of external ear canal secondary to surgery -38053 Acquired stenosis of external ear canal secondary to inflammation -38081 Exostosis of external ear canal -38089 Other disorders of external ear -3809 Unspecified disorder of external ear -38100 Acute nonsuppurative otitis media, unspecified -38101 Acute serous otitis media -38102 Acute mucoid otitis media -38103 Acute sanguinous otitis media -38104 Acute allergic serous otitis media -38105 Acute allergic mucoid otitis media -38106 Acute allergic sanguinous otitis media -38110 Chronic serous otitis media, simple or unspecified -38119 Other chronic serous otitis media -38120 Chronic mucoid otitis media, simple or unspecified -38129 Other chronic mucoid otitis media -3813 Other and unspecified chronic nonsuppurative otitis media -3814 Nonsuppurative otitis media, not specified as acute or chronic -38150 Eustachian salpingitis, unspecified -38151 Acute Eustachian salpingitis -38152 Chronic Eustachian salpingitis -38160 Obstruction of Eustachian tube, unspecified -38161 Osseous obstruction of Eustachian tube -38162 Intrinsic cartilagenous obstruction of Eustachian tube -38163 Extrinsic cartilagenous obstruction of Eustachian tube -3817 Patulous Eustachian tube -38181 Dysfunction of Eustachian tube -38189 Other disorders of Eustachian tube -3819 Unspecified Eustachian tube disorder -38200 Acute suppurative otitis media without spontaneous rupture of eardrum -38201 Acute suppurative otitis media with spontaneous rupture of eardrum -38202 Acute suppurative otitis media in diseases classified elsewhere -3821 Chronic tubotympanic suppurative otitis media -3822 Chronic atticoantral suppurative otitis media -3823 Unspecified chronic suppurative otitis media -3824 Unspecified suppurative otitis media -3829 Unspecified otitis media -38300 Acute mastoiditis without complications -38301 Subperiosteal abscess of mastoid -38302 Acute mastoiditis with other complications -3831 Chronic mastoiditis -38320 Petrositis, unspecified -38321 Acute petrositis -38322 Chronic petrositis -38330 Postmastoidectomy complication, unspecified -38331 Mucosal cyst of postmastoidectomy cavity -38332 Recurrent cholesteatoma of postmastoidectomy cavity -38333 Granulations of postmastoidectomy cavity -38381 Postauricular fistula -38389 Other disorders of mastoid -3839 Unspecified mastoiditis -38400 Acute myringitis, unspecified -38401 Bullous myringitis -38409 Other acute myringitis without mention of otitis media -3841 Chronic myringitis without mention of otitis media -38420 Perforation of tympanic membrane, unspecified -38421 Central perforation of tympanic membrane -38422 Attic perforation of tympanic membrane -38423 Other marginal perforation of tympanic membrane -38424 Multiple perforations of tympanic membrane -38425 Total perforation of tympanic membrane -38481 Atrophic flaccid tympanic membrane -38482 Atrophic nonflaccid tympanic membrane -3849 Unspecified disorder of tympanic membrane -38500 Tympanosclerosis, unspecified as to involvement -38501 Tympanosclerosis involving tympanic membrane only -38502 Tympanosclerosis involving tympanic membrane and ear ossicles -38503 Tympanosclerosis involving tympanic membrane, ear ossicles, and middle ear -38509 Tympanosclerosis involving other combination of structures -38510 Adhesive middle ear disease, unspecified as to involvement -38511 Adhesions of drum head to incus -38512 Adhesions of drum head to stapes -38513 Adhesions of drum head to promontorium -38519 Other middle ear adhesions and combinations -38521 Impaired mobility of malleus -38522 Impaired mobility of other ear ossicles -38523 Discontinuity or dislocation of ear ossicles -38524 Partial loss or necrosis of ear ossicles -38530 Cholesteatoma, unspecified -38531 Cholesteatoma of attic -38532 Cholesteatoma of middle ear -38533 Cholesteatoma of middle ear and mastoid -38535 Diffuse cholesteatosis of middle ear and mastoid -38582 Cholesterin granuloma of middle ear and mastoid -38583 Retained foreign body of middle ear -38589 Other disorders of middle ear and mastoid -3859 Unspecified disorder of middle ear and mastoid -38600 M�ni�re's disease, unspecified -38601 Active M�ni�re's disease, cochleovestibular -38602 Active M�ni�re's disease, cochlear -38603 Active M�ni�re's disease, vestibular -38604 Inactive M�ni�re's disease -38610 Peripheral vertigo, unspecified -38611 Benign paroxysmal positional vertigo -38612 Vestibular neuronitis -38619 Other peripheral vertigo -3862 Vertigo of central origin -38630 Labyrinthitis, unspecified -38631 Serous labyrinthitis -38632 Circumscribed labyrinthitis -38633 Suppurative labyrinthitis -38634 Toxic labyrinthitis -38635 Viral labyrinthitis -38640 Labyrinthine fistula, unspecified -38641 Round window fistula -38642 Oval window fistula -38643 Semicircular canal fistula -38648 Labyrinthine fistula of combined sites -38650 Labyrinthine dysfunction, unspecified -38651 Hyperactive labyrinth, unilateral -38652 Hyperactive labyrinth, bilateral -38653 Hypoactive labyrinth, unilateral -38654 Hypoactive labyrinth, bilateral -38655 Loss of labyrinthine reactivity, unilateral -38656 Loss of labyrinthine reactivity, bilateral -38658 Other forms and combinations of labyrinthine dysfunction -3868 Other disorders of labyrinth -3869 Unspecified vertiginous syndromes and labyrinthine disorders -3870 Otosclerosis involving oval window, nonobliterative -3871 Otosclerosis involving oval window, obliterative -3872 Cochlear otosclerosis -3878 Other otosclerosis -3879 Otosclerosis, unspecified -38800 Degenerative and vascular disorders, unspecified -38801 Presbyacusis -38802 Transient ischemic deafness -38810 Noise effects on inner ear, unspecified -38811 Acoustic trauma (explosive) to ear -38812 Noise-induced hearing loss -3882 Sudden hearing loss, unspecified -38830 Tinnitus, unspecified -38831 Subjective tinnitus -38832 Objective tinnitus -38840 Abnormal auditory perception, unspecified -38841 Diplacusis -38842 Hyperacusis -38843 Impairment of auditory discrimination -38844 Auditory recruitment -38845 Acquired auditory processing disorder -3885 Disorders of acoustic nerve -38860 Otorrhea, unspecified -38861 Cerebrospinal fluid otorrhea -38869 Other otorrhea -38870 Otalgia, unspecified -38871 Otogenic pain -38872 Referred otogenic pain -3888 Other disorders of ear -3889 Unspecified disorder of ear -38900 Conductive hearing loss, unspecified -38901 Conductive hearing loss, external ear -38902 Conductive hearing loss, tympanic membrane -38903 Conductive hearing loss, middle ear -38904 Conductive hearing loss, inner ear -38905 Conductive hearing loss, unilateral -38906 Conductive hearing loss, bilateral -38908 Conductive hearing loss of combined types -38910 Sensorineural hearing loss, unspecified -38911 Sensory hearing loss, bilateral -38912 Neural hearing loss, bilateral -38913 Neural hearing loss, unilateral -38914 Central hearing loss -38915 Sensorineural hearing loss, unilateral -38916 Sensorineural hearing loss, asymmetrical -38917 Sensory hearing loss, unilateral -38918 Sensorineural hearing loss, bilateral -38920 Mixed hearing loss, unspecified -38921 Mixed hearing loss, unilateral -38922 Mixed hearing loss, bilateral -3897 Deaf, nonspeaking, not elsewhere classifiable -3898 Other specified forms of hearing loss -3899 Unspecified hearing loss -390 Rheumatic fever without mention of heart involvement -3910 Acute rheumatic pericarditis -3911 Acute rheumatic endocarditis -3912 Acute rheumatic myocarditis -3918 Other acute rheumatic heart disease -3919 Acute rheumatic heart disease, unspecified -3920 Rheumatic chorea with heart involvement -3929 Rheumatic chorea without mention of heart involvement -393 Chronic rheumatic pericarditis -3940 Mitral stenosis -3941 Rheumatic mitral insufficiency -3942 Mitral stenosis with insufficiency -3949 Other and unspecified mitral valve diseases -3950 Rheumatic aortic stenosis -3951 Rheumatic aortic insufficiency -3952 Rheumatic aortic stenosis with insufficiency -3959 Other and unspecified rheumatic aortic diseases -3960 Mitral valve stenosis and aortic valve stenosis -3961 Mitral valve stenosis and aortic valve insufficiency -3962 Mitral valve insufficiency and aortic valve stenosis -3963 Mitral valve insufficiency and aortic valve insufficiency -3968 Multiple involvement of mitral and aortic valves -3969 Mitral and aortic valve diseases, unspecified -3970 Diseases of tricuspid valve -3971 Rheumatic diseases of pulmonary valve -3979 Rheumatic diseases of endocardium, valve unspecified -3980 Rheumatic myocarditis -39890 Rheumatic heart disease, unspecified -39891 Rheumatic heart failure (congestive) -39899 Other rheumatic heart diseases -4010 Malignant essential hypertension -4011 Benign essential hypertension -4019 Unspecified essential hypertension -40200 Malignant hypertensive heart disease without heart failure -40201 Malignant hypertensive heart disease with heart failure -40210 Benign hypertensive heart disease without heart failure -40211 Benign hypertensive heart disease with heart failure -40290 Unspecified hypertensive heart disease without heart failure -40291 Unspecified hypertensive heart disease with heart failure -40300 Hypertensive chronic kidney disease, malignant, with chronic kidney disease stage I through stage IV, or unspecified -40301 Hypertensive chronic kidney disease, malignant, with chronic kidney disease stage V or end stage renal disease -40310 Hypertensive chronic kidney disease, benign, with chronic kidney disease stage I through stage IV, or unspecified -40311 Hypertensive chronic kidney disease, benign, with chronic kidney disease stage V or end stage renal disease -40390 Hypertensive chronic kidney disease, unspecified, with chronic kidney disease stage I through stage IV, or unspecified -40391 Hypertensive chronic kidney disease, unspecified, with chronic kidney disease stage V or end stage renal disease -40400 Hypertensive heart and chronic kidney disease, malignant, without heart failure and with chronic kidney disease stage I through stage IV, or unspecified -40401 Hypertensive heart and chronic kidney disease, malignant, with heart failure and with chronic kidney disease stage I through stage IV, or unspecified -40402 Hypertensive heart and chronic kidney disease, malignant, without heart failure and with chronic kidney disease stage V or end stage renal disease -40403 Hypertensive heart and chronic kidney disease, malignant, with heart failure and with chronic kidney disease stage V or end stage renal disease -40410 Hypertensive heart and chronic kidney disease, benign, without heart failure and with chronic kidney disease stage I through stage IV, or unspecified -40411 Hypertensive heart and chronic kidney disease, benign, with heart failure and with chronic kidney disease stage I through stage IV, or unspecified -40412 Hypertensive heart and chronic kidney disease, benign, without heart failure and with chronic kidney disease stage V or end stage renal disease -40413 Hypertensive heart and chronic kidney disease, benign, with heart failure and chronic kidney disease stage V or end stage renal disease -40490 Hypertensive heart and chronic kidney disease, unspecified, without heart failure and with chronic kidney disease stage I through stage IV, or unspecified -40491 Hypertensive heart and chronic kidney disease, unspecified, with heart failure and with chronic kidney disease stage I through stage IV, or unspecified -40492 Hypertensive heart and chronic kidney disease, unspecified, without heart failure and with chronic kidney disease stage V or end stage renal disease -40493 Hypertensive heart and chronic kidney disease, unspecified, with heart failure and chronic kidney disease stage V or end stage renal disease -40501 Malignant renovascular hypertension -40509 Other malignant secondary hypertension -40511 Benign renovascular hypertension -40519 Other benign secondary hypertension -40591 Unspecified renovascular hypertension -40599 Other unspecified secondary hypertension -41000 Acute myocardial infarction of anterolateral wall, episode of care unspecified -41001 Acute myocardial infarction of anterolateral wall, initial episode of care -41002 Acute myocardial infarction of anterolateral wall, subsequent episode of care -41010 Acute myocardial infarction of other anterior wall, episode of care unspecified -41011 Acute myocardial infarction of other anterior wall, initial episode of care -41012 Acute myocardial infarction of other anterior wall, subsequent episode of care -41020 Acute myocardial infarction of inferolateral wall, episode of care unspecified -41021 Acute myocardial infarction of inferolateral wall, initial episode of care -41022 Acute myocardial infarction of inferolateral wall, subsequent episode of care -41030 Acute myocardial infarction of inferoposterior wall, episode of care unspecified -41031 Acute myocardial infarction of inferoposterior wall, initial episode of care -41032 Acute myocardial infarction of inferoposterior wall, subsequent episode of care -41040 Acute myocardial infarction of other inferior wall, episode of care unspecified -41041 Acute myocardial infarction of other inferior wall, initial episode of care -41042 Acute myocardial infarction of other inferior wall, subsequent episode of care -41050 Acute myocardial infarction of other lateral wall, episode of care unspecified -41051 Acute myocardial infarction of other lateral wall, initial episode of care -41052 Acute myocardial infarction of other lateral wall, subsequent episode of care -41060 True posterior wall infarction, episode of care unspecified -41061 True posterior wall infarction, initial episode of care -41062 True posterior wall infarction, subsequent episode of care -41070 Subendocardial infarction, episode of care unspecified -41071 Subendocardial infarction, initial episode of care -41072 Subendocardial infarction, subsequent episode of care -41080 Acute myocardial infarction of other specified sites, episode of care unspecified -41081 Acute myocardial infarction of other specified sites, initial episode of care -41082 Acute myocardial infarction of other specified sites, subsequent episode of care -41090 Acute myocardial infarction of unspecified site, episode of care unspecified -41091 Acute myocardial infarction of unspecified site, initial episode of care -41092 Acute myocardial infarction of unspecified site, subsequent episode of care -4110 Postmyocardial infarction syndrome -4111 Intermediate coronary syndrome -41181 Acute coronary occlusion without myocardial infarction -41189 Other acute and subacute forms of ischemic heart disease, other -412 Old myocardial infarction -4130 Angina decubitus -4131 Prinzmetal angina -4139 Other and unspecified angina pectoris -41400 Coronary atherosclerosis of unspecified type of vessel, native or graft -41401 Coronary atherosclerosis of native coronary artery -41402 Coronary atherosclerosis of autologous vein bypass graft -41403 Coronary atherosclerosis of nonautologous biological bypass graft -41404 Coronary atherosclerosis of artery bypass graft -41405 Coronary atherosclerosis of unspecified bypass graft -41406 Coronary atherosclerosis of native coronary artery of transplanted heart -41407 Coronary atherosclerosis of bypass graft (artery) (vein) of transplanted heart -41410 Aneurysm of heart (wall) -41411 Aneurysm of coronary vessels -41412 Dissection of coronary artery -41419 Other aneurysm of heart -4142 Chronic total occlusion of coronary artery -4143 Coronary atherosclerosis due to lipid rich plaque -4144 Coronary atherosclerosis due to calcified coronary lesion -4148 Other specified forms of chronic ischemic heart disease -4149 Chronic ischemic heart disease, unspecified -4150 Acute cor pulmonale -41511 Iatrogenic pulmonary embolism and infarction -41512 Septic pulmonary embolism -41513 Saddle embolus of pulmonary artery -41519 Other pulmonary embolism and infarction -4160 Primary pulmonary hypertension -4161 Kyphoscoliotic heart disease -4162 Chronic pulmonary embolism -4168 Other chronic pulmonary heart diseases -4169 Chronic pulmonary heart disease, unspecified -4170 Arteriovenous fistula of pulmonary vessels -4171 Aneurysm of pulmonary artery -4178 Other specified diseases of pulmonary circulation -4179 Unspecified disease of pulmonary circulation -4200 Acute pericarditis in diseases classified elsewhere -42090 Acute pericarditis, unspecified -42091 Acute idiopathic pericarditis -42099 Other acute pericarditis -4210 Acute and subacute bacterial endocarditis -4211 Acute and subacute infective endocarditis in diseases classified elsewhere -4219 Acute endocarditis, unspecified -4220 Acute myocarditis in diseases classified elsewhere -42290 Acute myocarditis, unspecified -42291 Idiopathic myocarditis -42292 Septic myocarditis -42293 Toxic myocarditis -42299 Other acute myocarditis -4230 Hemopericardium -4231 Adhesive pericarditis -4232 Constrictive pericarditis -4233 Cardiac tamponade -4238 Other specified diseases of pericardium -4239 Unspecified disease of pericardium -4240 Mitral valve disorders -4241 Aortic valve disorders -4242 Tricuspid valve disorders, specified as nonrheumatic -4243 Pulmonary valve disorders -42490 Endocarditis, valve unspecified, unspecified cause -42491 Endocarditis in diseases classified elsewhere -42499 Other endocarditis, valve unspecified -4250 Endomyocardial fibrosis -42511 Hypertrophic obstructive cardiomyopathy -42518 Other hypertrophic cardiomyopathy -4252 Obscure cardiomyopathy of Africa -4253 Endocardial fibroelastosis -4254 Other primary cardiomyopathies -4255 Alcoholic cardiomyopathy -4257 Nutritional and metabolic cardiomyopathy -4258 Cardiomyopathy in other diseases classified elsewhere -4259 Secondary cardiomyopathy, unspecified -4260 Atrioventricular block, complete -42610 Atrioventricular block, unspecified -42611 First degree atrioventricular block -42612 Mobitz (type) II atrioventricular block -42613 Other second degree atrioventricular block -4262 Left bundle branch hemiblock -4263 Other left bundle branch block -4264 Right bundle branch block -42650 Bundle branch block, unspecified -42651 Right bundle branch block and left posterior fascicular block -42652 Right bundle branch block and left anterior fascicular block -42653 Other bilateral bundle branch block -42654 Trifascicular block -4266 Other heart block -4267 Anomalous atrioventricular excitation -42681 Lown-Ganong-Levine syndrome -42682 Long QT syndrome -42689 Other specified conduction disorders -4269 Conduction disorder, unspecified -4270 Paroxysmal supraventricular tachycardia -4271 Paroxysmal ventricular tachycardia -4272 Paroxysmal tachycardia, unspecified -42731 Atrial fibrillation -42732 Atrial flutter -42741 Ventricular fibrillation -42742 Ventricular flutter -4275 Cardiac arrest -42760 Premature beats, unspecified -42761 Supraventricular premature beats -42769 Other premature beats -42781 Sinoatrial node dysfunction -42789 Other specified cardiac dysrhythmias -4279 Cardiac dysrhythmia, unspecified -4280 Congestive heart failure, unspecified -4281 Left heart failure -42820 Systolic heart failure, unspecified -42821 Acute systolic heart failure -42822 Chronic systolic heart failure -42823 Acute on chronic systolic heart failure -42830 Diastolic heart failure, unspecified -42831 Acute diastolic heart failure -42832 Chronic diastolic heart failure -42833 Acute on chronic diastolic heart failure -42840 Combined systolic and diastolic heart failure, unspecified -42841 Acute combined systolic and diastolic heart failure -42842 Chronic combined systolic and diastolic heart failure -42843 Acute on chronic combined systolic and diastolic heart failure -4289 Heart failure, unspecified -4290 Myocarditis, unspecified -4291 Myocardial degeneration -4292 Cardiovascular disease, unspecified -4293 Cardiomegaly -4294 Functional disturbances following cardiac surgery -4295 Rupture of chordae tendineae -4296 Rupture of papillary muscle -42971 Acquired cardiac septal defect -42979 Certain sequelae of myocardial infarction, not elsewhere classified, other -42981 Other disorders of papillary muscle -42982 Hyperkinetic heart disease -42983 Takotsubo syndrome -42989 Other ill-defined heart diseases -4299 Heart disease, unspecified -430 Subarachnoid hemorrhage -431 Intracerebral hemorrhage -4320 Nontraumatic extradural hemorrhage -4321 Subdural hemorrhage -4329 Unspecified intracranial hemorrhage -43300 Occlusion and stenosis of basilar artery without mention of cerebral infarction -43301 Occlusion and stenosis of basilar artery with cerebral infarction -43310 Occlusion and stenosis of carotid artery without mention of cerebral infarction -43311 Occlusion and stenosis of carotid artery with cerebral infarction -43320 Occlusion and stenosis of vertebral artery without mention of cerebral infarction -43321 Occlusion and stenosis of vertebral artery with cerebral infarction -43330 Occlusion and stenosis of multiple and bilateral precerebral arteries without mention of cerebral infarction -43331 Occlusion and stenosis of multiple and bilateral precerebral arteries with cerebral infarction -43380 Occlusion and stenosis of other specified precerebral artery without mention of cerebral infarction -43381 Occlusion and stenosis of other specified precerebral artery with cerebral infarction -43390 Occlusion and stenosis of unspecified precerebral artery without mention of cerebral infarction -43391 Occlusion and stenosis of unspecified precerebral artery with cerebral infarction -43400 Cerebral thrombosis without mention of cerebral infarction -43401 Cerebral thrombosis with cerebral infarction -43410 Cerebral embolism without mention of cerebral infarction -43411 Cerebral embolism with cerebral infarction -43490 Cerebral artery occlusion, unspecified without mention of cerebral infarction -43491 Cerebral artery occlusion, unspecified with cerebral infarction -4350 Basilar artery syndrome -4351 Vertebral artery syndrome -4352 Subclavian steal syndrome -4353 Vertebrobasilar artery syndrome -4358 Other specified transient cerebral ischemias -4359 Unspecified transient cerebral ischemia -436 Acute, but ill-defined, cerebrovascular disease -4370 Cerebral atherosclerosis -4371 Other generalized ischemic cerebrovascular disease -4372 Hypertensive encephalopathy -4373 Cerebral aneurysm, nonruptured -4374 Cerebral arteritis -4375 Moyamoya disease -4376 Nonpyogenic thrombosis of intracranial venous sinus -4377 Transient global amnesia -4378 Other ill-defined cerebrovascular disease -4379 Unspecified cerebrovascular disease -4380 Late effects of cerebrovascular disease, cognitive deficits -43810 Late effects of cerebrovascular disease, speech and language deficit, unspecified -43811 Late effects of cerebrovascular disease, aphasia -43812 Late effects of cerebrovascular disease, dysphasia -43813 Late effects of cerebrovascular disease, dysarthria -43814 Late effects of cerebrovascular disease, fluency disorder -43819 Late effects of cerebrovascular disease, other speech and language deficits -43820 Late effects of cerebrovascular disease, hemiplegia affecting unspecified side -43821 Late effects of cerebrovascular disease, hemiplegia affecting dominant side -43822 Late effects of cerebrovascular disease, hemiplegia affecting nondominant side -43830 Late effects of cerebrovascular disease, monoplegia of upper limb affecting unspecified side -43831 Late effects of cerebrovascular disease, monoplegia of upper limb affecting dominant side -43832 Late effects of cerebrovascular disease, monoplegia of upper limb affecting nondominant side -43840 Late effects of cerebrovascular disease, monoplegia of lower limb affecting unspecified side -43841 Late effects of cerebrovascular disease, monoplegia of lower limb affecting dominant side -43842 Late effects of cerebrovascular disease, monoplegia of lower limb affecting nondominant side -43850 Late effects of cerebrovascular disease, other paralytic syndrome affecting unspecified side -43851 Late effects of cerebrovascular disease, other paralytic syndrome affecting dominant side -43852 Late effects of cerebrovascular disease, other paralytic syndrome affecting nondominant side -43853 Late effects of cerebrovascular disease, other paralytic syndrome, bilateral -4386 Late effects of cerebrovascular disease, alterations of sensations -4387 Late effects of cerebrovascular disease, disturbances of vision -43881 Other late effects of cerebrovascular disease, apraxia -43882 Other late effects of cerebrovascular disease, dysphagia -43883 Other late effects of cerebrovascular disease, facial weakness -43884 Other late effects of cerebrovascular disease, ataxia -43885 Other late effects of cerebrovascular disease, vertigo -43889 Other late effects of cerebrovascular disease -4389 Unspecified late effects of cerebrovascular disease -4400 Atherosclerosis of aorta -4401 Atherosclerosis of renal artery -44020 Atherosclerosis of native arteries of the extremities, unspecified -44021 Atherosclerosis of native arteries of the extremities with intermittent claudication -44022 Atherosclerosis of native arteries of the extremities with rest pain -44023 Atherosclerosis of native arteries of the extremities with ulceration -44024 Atherosclerosis of native arteries of the extremities with gangrene -44029 Other atherosclerosis of native arteries of the extremities -44030 Atherosclerosis of unspecified bypass graft of the extremities -44031 Atherosclerosis of autologous vein bypass graft of the extremities -44032 Atherosclerosis of nonautologous biological bypass graft of the extremities -4404 Chronic total occlusion of artery of the extremities -4408 Atherosclerosis of other specified arteries -4409 Generalized and unspecified atherosclerosis -44100 Dissection of aorta, unspecified site -44101 Dissection of aorta, thoracic -44102 Dissection of aorta, abdominal -44103 Dissection of aorta, thoracoabdominal -4411 Thoracic aneurysm, ruptured -4412 Thoracic aneurysm without mention of rupture -4413 Abdominal aneurysm, ruptured -4414 Abdominal aneurysm without mention of rupture -4415 Aortic aneurysm of unspecified site, ruptured -4416 Thoracoabdominal aneurysm, ruptured -4417 Thoracoabdominal aneurysm, without mention of rupture -4419 Aortic aneurysm of unspecified site without mention of rupture -4420 Aneurysm of artery of upper extremity -4421 Aneurysm of renal artery -4422 Aneurysm of iliac artery -4423 Aneurysm of artery of lower extremity -44281 Aneurysm of artery of neck -44282 Aneurysm of subclavian artery -44283 Aneurysm of splenic artery -44284 Aneurysm of other visceral artery -44289 Aneurysm of other specified artery -4429 Aneurysm of unspecified site -4430 Raynaud's syndrome -4431 Thromboangiitis obliterans [Buerger's disease] -44321 Dissection of carotid artery -44322 Dissection of iliac artery -44323 Dissection of renal artery -44324 Dissection of vertebral artery -44329 Dissection of other artery -44381 Peripheral angiopathy in diseases classified elsewhere -44382 Erythromelalgia -44389 Other specified peripheral vascular diseases -4439 Peripheral vascular disease, unspecified -44401 Saddle embolus of abdominal aorta -44409 Other arterial embolism and thrombosis of abdominal aorta -4441 Embolism and thrombosis of thoracic aorta -44421 Arterial embolism and thrombosis of upper extremity -44422 Arterial embolism and thrombosis of lower extremity -44481 Embolism and thrombosis of iliac artery -44489 Embolism and thrombosis of other specified artery -4449 Embolism and thrombosis of unspecified artery -44501 Atheroembolism of upper extremity -44502 Atheroembolism of lower extremity -44581 Atheroembolism of kidney -44589 Atheroembolism of other site -4460 Polyarteritis nodosa -4461 Acute febrile mucocutaneous lymph node syndrome [MCLS] -44620 Hypersensitivity angiitis, unspecified -44621 Goodpasture's syndrome -44629 Other specified hypersensitivity angiitis -4463 Lethal midline granuloma -4464 Wegener's granulomatosis -4465 Giant cell arteritis -4466 Thrombotic microangiopathy -4467 Takayasu's disease -4470 Arteriovenous fistula, acquired -4471 Stricture of artery -4472 Rupture of artery -4473 Hyperplasia of renal artery -4474 Celiac artery compression syndrome -4475 Necrosis of artery -4476 Arteritis, unspecified -44770 Aortic ectasia, unspecified site -44771 Thoracic aortic ectasia -44772 Abdominal aortic ectasia -44773 Thoracoabdominal aortic ectasia -4478 Other specified disorders of arteries and arterioles -4479 Unspecified disorders of arteries and arterioles -4480 Hereditary hemorrhagic telangiectasia -4481 Nevus, non-neoplastic -4489 Other and unspecified capillary diseases -449 Septic arterial embolism -4510 Phlebitis and thrombophlebitis of superficial vessels of lower extremities -45111 Phlebitis and thrombophlebitis of femoral vein (deep) (superficial) -45119 Phlebitis and thrombophlebitis of deep veins of lower extremities, other -4512 Phlebitis and thrombophlebitis of lower extremities, unspecified -45181 Phlebitis and thrombophlebitis of iliac vein -45182 Phlebitis and thrombophlebitis of superficial veins of upper extremities -45183 Phlebitis and thrombophlebitis of deep veins of upper extremities -45184 Phlebitis and thrombophlebitis of upper extremities, unspecified -45189 Phlebitis and thrombophlebitis of other sites -4519 Phlebitis and thrombophlebitis of unspecified site -452 Portal vein thrombosis -4530 Budd-chiari syndrome -4531 Thrombophlebitis migrans -4532 Other venous embolism and thrombosis of inferior vena cava -4533 Other venous embolism and thrombosis of renal vein -45340 Acute venous embolism and thrombosis of unspecified deep vessels of lower extremity -45341 Acute venous embolism and thrombosis of deep vessels of proximal lower extremity -45342 Acute venous embolism and thrombosis of deep vessels of distal lower extremity -45350 Chronic venous embolism and thrombosis of unspecified deep vessels of lower extremity -45351 Chronic venous embolism and thrombosis of deep vessels of proximal lower extremity -45352 Chronic venous embolism and thrombosis of deep vessels of distal lower extremity -4536 Venous embolism and thrombosis of superficial vessels of lower extremity -45371 Chronic venous embolism and thrombosis of superficial veins of upper extremity -45372 Chronic venous embolism and thrombosis of deep veins of upper extremity -45373 Chronic venous embolism and thrombosis of upper extremity, unspecified -45374 Chronic venous embolism and thrombosis of axillary veins -45375 Chronic venous embolism and thrombosis of subclavian veins -45376 Chronic venous embolism and thrombosis of internal jugular veins -45377 Chronic venous embolism and thrombosis of other thoracic veins -45379 Chronic venous embolism and thrombosis of other specified veins -45381 Acute venous embolism and thrombosis of superficial veins of upper extremity -45382 Acute venous embolism and thrombosis of deep veins of upper extremity -45383 Acute venous embolism and thrombosis of upper extremity, unspecified -45384 Acute venous embolism and thrombosis of axillary veins -45385 Acute venous embolism and thrombosis of subclavian veins -45386 Acute venous embolism and thrombosis of internal jugular veins -45387 Acute venous embolism and thrombosis of other thoracic veins -45389 Acute venous embolism and thrombosis of other specified veins -4539 Other venous embolism and thrombosis of unspecified site -4540 Varicose veins of lower extremities with ulcer -4541 Varicose veins of lower extremities with inflammation -4542 Varicose veins of lower extremities with ulcer and inflammation -4548 Varicose veins of lower extremities with other complications -4549 Asymptomatic varicose veins -4550 Internal hemorrhoids without mention of complication -4551 Internal thrombosed hemorrhoids -4552 Internal hemorrhoids with other complication -4553 External hemorrhoids without mention of complication -4554 External thrombosed hemorrhoids -4555 External hemorrhoids with other complication -4556 Unspecified hemorrhoids without mention of complication -4557 Unspecified thrombosed hemorrhoids -4558 Unspecified hemorrhoids with other complication -4559 Residual hemorrhoidal skin tags -4560 Esophageal varices with bleeding -4561 Esophageal varices without mention of bleeding -45620 Esophageal varices in diseases classified elsewhere, with bleeding -45621 Esophageal varices in diseases classified elsewhere, without mention of bleeding -4563 Sublingual varices -4564 Scrotal varices -4565 Pelvic varices -4566 Vulval varices -4568 Varices of other sites -4570 Postmastectomy lymphedema syndrome -4571 Other lymphedema -4572 Lymphangitis -4578 Other noninfectious disorders of lymphatic channels -4579 Unspecified noninfectious disorder of lymphatic channels -4580 Orthostatic hypotension -4581 Chronic hypotension -45821 Hypotension of hemodialysis -45829 Other iatrogenic hypotension -4588 Other specified hypotension -4589 Hypotension, unspecified -4590 Hemorrhage, unspecified -45910 Postphlebetic syndrome without complications -45911 Postphlebetic syndrome with ulcer -45912 Postphlebetic syndrome with inflammation -45913 Postphlebetic syndrome with ulcer and inflammation -45919 Postphlebetic syndrome with other complication -4592 Compression of vein -45930 Chronic venous hypertension without complications -45931 Chronic venous hypertension with ulcer -45932 Chronic venous hypertension with inflammation -45933 Chronic venous hypertension with ulcer and inflammation -45939 Chronic venous hypertension with other complication -45981 Venous (peripheral) insufficiency, unspecified -45989 Other specified disorders of circulatory system -4599 Unspecified circulatory system disorder -460 Acute nasopharyngitis [common cold] -4610 Acute maxillary sinusitis -4611 Acute frontal sinusitis -4612 Acute ethmoidal sinusitis -4613 Acute sphenoidal sinusitis -4618 Other acute sinusitis -4619 Acute sinusitis, unspecified -462 Acute pharyngitis -463 Acute tonsillitis -46400 Acute laryngitis without mention of obstruction -46401 Acute laryngitis with obstruction -46410 Acute tracheitis without mention of obstruction -46411 Acute tracheitis with obstruction -46420 Acute laryngotracheitis without mention of obstruction -46421 Acute laryngotracheitis with obstruction -46430 Acute epiglottitis without mention of obstruction -46431 Acute epiglottitis with obstruction -4644 Croup -46450 Supraglottitis unspecified, without obstruction -46451 Supraglottitis unspecified, with obstruction -4650 Acute laryngopharyngitis -4658 Acute upper respiratory infections of other multiple sites -4659 Acute upper respiratory infections of unspecified site -4660 Acute bronchitis -46611 Acute bronchiolitis due to respiratory syncytial virus (RSV) -46619 Acute bronchiolitis due to other infectious organisms -470 Deviated nasal septum -4710 Polyp of nasal cavity -4711 Polypoid sinus degeneration -4718 Other polyp of sinus -4719 Unspecified nasal polyp -4720 Chronic rhinitis -4721 Chronic pharyngitis -4722 Chronic nasopharyngitis -4730 Chronic maxillary sinusitis -4731 Chronic frontal sinusitis -4732 Chronic ethmoidal sinusitis -4733 Chronic sphenoidal sinusitis -4738 Other chronic sinusitis -4739 Unspecified sinusitis (chronic) -47400 Chronic tonsillitis -47401 Chronic adenoiditis -47402 Chronic tonsillitis and adenoiditis -47410 Hypertrophy of tonsil with adenoids -47411 Hypertrophy of tonsils alone -47412 Hypertrophy of adenoids alone -4742 Adenoid vegetations -4748 Other chronic disease of tonsils and adenoids -4749 Unspecified chronic disease of tonsils and adenoids -475 Peritonsillar abscess -4760 Chronic laryngitis -4761 Chronic laryngotracheitis -4770 Allergic rhinitis due to pollen -4771 Allergic rhinitis due to food -4772 Allergic rhinitis due to animal (cat) (dog) hair and dander -4778 Allergic rhinitis due to other allergen -4779 Allergic rhinitis, cause unspecified -4780 Hypertrophy of nasal turbinates -47811 Nasal mucositis (ulcerative) -47819 Other disease of nasal cavity and sinuses -47820 Unspecified disease of pharynx -47821 Cellulitis of pharynx or nasopharynx -47822 Parapharyngeal abscess -47824 Retropharyngeal abscess -47825 Edema of pharynx or nasopharynx -47826 Cyst of pharynx or nasopharynx -47829 Other diseases of pharynx, not elsewhere classified -47830 Paralysis of vocal cords or larynx, unspecified -47831 Unilateral paralysis of vocal cords or larynx, partial -47832 Unilateral paralysis of vocal cords or larynx, complete -47833 Bilateral paralysis of vocal cords or larynx, partial -47834 Bilateral paralysis of vocal cords or larynx, complete -4784 Polyp of vocal cord or larynx -4785 Other diseases of vocal cords -4786 Edema of larynx -47870 Unspecified disease of larynx -47871 Cellulitis and perichondritis of larynx -47874 Stenosis of larynx -47875 Laryngeal spasm -47879 Other diseases of larynx, not elsewhere classified -4788 Upper respiratory tract hypersensitivity reaction, site unspecified -4789 Other and unspecified diseases of upper respiratory tract -4800 Pneumonia due to adenovirus -4801 Pneumonia due to respiratory syncytial virus -4802 Pneumonia due to parainfluenza virus -4803 Pneumonia due to SARS-associated coronavirus -4808 Pneumonia due to other virus not elsewhere classified -4809 Viral pneumonia, unspecified -481 Pneumococcal pneumonia [Streptococcus pneumoniae pneumonia] -4820 Pneumonia due to Klebsiella pneumoniae -4821 Pneumonia due to Pseudomonas -4822 Pneumonia due to Hemophilus influenzae [H. influenzae] -48230 Pneumonia due to Streptococcus, unspecified -48231 Pneumonia due to Streptococcus, group A -48232 Pneumonia due to Streptococcus, group B -48239 Pneumonia due to other Streptococcus -48240 Pneumonia due to Staphylococcus, unspecified -48241 Methicillin susceptible pneumonia due to Staphylococcus aureus -48242 Methicillin resistant pneumonia due to Staphylococcus aureus -48249 Other Staphylococcus pneumonia -48281 Pneumonia due to anaerobes -48282 Pneumonia due to escherichia coli [E. coli] -48283 Pneumonia due to other gram-negative bacteria -48284 Pneumonia due to Legionnaires' disease -48289 Pneumonia due to other specified bacteria -4829 Bacterial pneumonia, unspecified -4830 Pneumonia due to mycoplasma pneumoniae -4831 Pneumonia due to chlamydia -4838 Pneumonia due to other specified organism -4841 Pneumonia in cytomegalic inclusion disease -4843 Pneumonia in whooping cough -4845 Pneumonia in anthrax -4846 Pneumonia in aspergillosis -4847 Pneumonia in other systemic mycoses -4848 Pneumonia in other infectious diseases classified elsewhere -485 Bronchopneumonia, organism unspecified -486 Pneumonia, organism unspecified -4870 Influenza with pneumonia -4871 Influenza with other respiratory manifestations -4878 Influenza with other manifestations -48801 Influenza due to identified avian influenza virus with pneumonia -48802 Influenza due to identified avian influenza virus with other respiratory manifestations -48809 Influenza due to identified avian influenza virus with other manifestations -48811 Influenza due to identified 2009 H1N1 influenza virus with pneumonia -48812 Influenza due to identified 2009 H1N1 influenza virus with other respiratory manifestations -48819 Influenza due to identified 2009 H1N1 influenza virus with other manifestations -48881 Influenza due to identified novel influenza A virus with pneumonia -48882 Influenza due to identified novel influenza A virus with other respiratory manifestations -48889 Influenza due to identified novel influenza A virus with other manifestations -490 Bronchitis, not specified as acute or chronic -4910 Simple chronic bronchitis -4911 Mucopurulent chronic bronchitis -49120 Obstructive chronic bronchitis without exacerbation -49121 Obstructive chronic bronchitis with (acute) exacerbation -49122 Obstructive chronic bronchitis with acute bronchitis -4918 Other chronic bronchitis -4919 Unspecified chronic bronchitis -4920 Emphysematous bleb -4928 Other emphysema -49300 Extrinsic asthma, unspecified -49301 Extrinsic asthma with status asthmaticus -49302 Extrinsic asthma with (acute) exacerbation -49310 Intrinsic asthma, unspecified -49311 Intrinsic asthma with status asthmaticus -49312 Intrinsic asthma with (acute) exacerbation -49320 Chronic obstructive asthma, unspecified -49321 Chronic obstructive asthma with status asthmaticus -49322 Chronic obstructive asthma with (acute) exacerbation -49381 Exercise induced bronchospasm -49382 Cough variant asthma -49390 Asthma, unspecified type, unspecified -49391 Asthma, unspecified type, with status asthmaticus -49392 Asthma, unspecified type, with (acute) exacerbation -4940 Bronchiectasis without acute exacerbation -4941 Bronchiectasis with acute exacerbation -4950 Farmers' lung -4951 Bagassosis -4952 Bird-fanciers' lung -4953 Suberosis -4954 Malt workers' lung -4955 Mushroom workers' lung -4956 Maple bark-strippers' lung -4957 "Ventilation" pneumonitis -4958 Other specified allergic alveolitis and pneumonitis -4959 Unspecified allergic alveolitis and pneumonitis -496 Chronic airway obstruction, not elsewhere classified -500 Coal workers' pneumoconiosis -501 Asbestosis -502 Pneumoconiosis due to other silica or silicates -503 Pneumoconiosis due to other inorganic dust -504 Pneumonopathy due to inhalation of other dust -505 Pneumoconiosis, unspecified -5060 Bronchitis and pneumonitis due to fumes and vapors -5061 Acute pulmonary edema due to fumes and vapors -5062 Upper respiratory inflammation due to fumes and vapors -5063 Other acute and subacute respiratory conditions due to fumes and vapors -5064 Chronic respiratory conditions due to fumes and vapors -5069 Unspecified respiratory conditions due to fumes and vapors -5070 Pneumonitis due to inhalation of food or vomitus -5071 Pneumonitis due to inhalation of oils and essences -5078 Pneumonitis due to other solids and liquids -5080 Acute pulmonary manifestations due to radiation -5081 Chronic and other pulmonary manifestations due to radiation -5082 Respiratory conditions due to smoke inhalation -5088 Respiratory conditions due to other specified external agents -5089 Respiratory conditions due to unspecified external agent -5100 Empyema with fistula -5109 Empyema without mention of fistula -5110 Pleurisy without mention of effusion or current tuberculosis -5111 Pleurisy with effusion, with mention of a bacterial cause other than tuberculosis -51181 Malignant pleural effusion -51189 Other specified forms of effusion, except tuberculous -5119 Unspecified pleural effusion -5120 Spontaneous tension pneumothorax -5121 Iatrogenic pneumothorax -5122 Postoperative air leak -51281 Primary spontaneous pneumothorax -51282 Secondary spontaneous pneumothorax -51283 Chronic pneumothorax -51284 Other air leak -51289 Other pneumothorax -5130 Abscess of lung -5131 Abscess of mediastinum -514 Pulmonary congestion and hypostasis -515 Postinflammatory pulmonary fibrosis -5160 Pulmonary alveolar proteinosis -5161 Idiopathic pulmonary hemosiderosis -5162 Pulmonary alveolar microlithiasis -51630 Idiopathic interstitial pneumonia, not otherwise specified -51631 Idiopathic pulmonary fibrosis -51632 Idiopathic non-specific interstitial pneumonitis -51633 Acute interstitial pneumonitis -51634 Respiratory bronchiolitis interstitial lung disease -51635 Idiopathic lymphoid interstitial pneumonia -51636 Cryptogenic organizing pneumonia -51637 Desquamative interstitial pneumonia -5164 Lymphangioleiomyomatosis -5165 Adult pulmonary Langerhans cell histiocytosis -51661 Neuroendocrine cell hyperplasia of infancy -51662 Pulmonary interstitial glycogenosis -51663 Surfactant mutations of the lung -51664 Alveolar capillary dysplasia with vein misalignment -51669 Other interstitial lung diseases of childhood -5168 Other specified alveolar and parietoalveolar pneumonopathies -5169 Unspecified alveolar and parietoalveolar pneumonopathy -5171 Rheumatic pneumonia -5172 Lung involvement in systemic sclerosis -5173 Acute chest syndrome -5178 Lung involvement in other diseases classified elsewhere -5180 Pulmonary collapse -5181 Interstitial emphysema -5182 Compensatory emphysema -5183 Pulmonary eosinophilia -5184 Acute edema of lung, unspecified -51851 Acute respiratory failure following trauma and surgery -51852 Other pulmonary insufficiency, not elsewhere classified, following trauma and surgery -51853 Acute and chronic respiratory failure following trauma and surgery -5186 Allergic bronchopulmonary aspergillosis -5187 Transfusion related acute lung injury (TRALI) -51881 Acute respiratory failure -51882 Other pulmonary insufficiency, not elsewhere classified -51883 Chronic respiratory failure -51884 Acute and chronic respiratory failure -51889 Other diseases of lung, not elsewhere classified -51900 Tracheostomy complication, unspecified -51901 Infection of tracheostomy -51902 Mechanical complication of tracheostomy -51909 Other tracheostomy complications -51911 Acute bronchospasm -51919 Other diseases of trachea and bronchus -5192 Mediastinitis -5193 Other diseases of mediastinum, not elsewhere classified -5194 Disorders of diaphragm -5198 Other diseases of respiratory system, not elsewhere classified -5199 Unspecified disease of respiratory system -5200 Anodontia -5201 Supernumerary teeth -5202 Abnormalities of size and form of teeth -5203 Mottled teeth -5204 Disturbances of tooth formation -5205 Hereditary disturbances in tooth structure, not elsewhere classified -5206 Disturbances in tooth eruption -5207 Teething syndrome -5208 Other specified disorders of tooth development and eruption -5209 Unspecified disorder of tooth development and eruption -52100 Dental caries, unspecified -52101 Dental caries limited to enamel -52102 Dental caries extending into dentine -52103 Dental caries extending into pulp -52104 Arrested dental caries -52105 Odontoclasia -52106 Dental caries pit and fissure -52107 Dental caries of smooth surface -52108 Dental caries of root surface -52109 Other dental caries -52110 Excessive attrition, unspecified -52111 Excessive attrition, limited to enamel -52112 Excessive attrition, extending into dentine -52113 Excessive attrition, extending into pulp -52114 Excessive attrition, localized -52115 Excessive attrition, generalized -52120 Abrasion, unspecified -52121 Abrasion, limited to enamel -52122 Abrasion, extending into dentine -52123 Abrasion, extending into pulp -52124 Abrasion, localized -52125 Abrasion, generalized -52130 Erosion, unspecified -52131 Erosion, limited to enamel -52132 Erosion, extending into dentine -52133 Erosion, extending into pulp -52134 Erosion, localized -52135 Erosion, generalized -52140 Pathological resorption, unspecified -52141 Pathological resorption, internal -52142 Pathological resorption, external -52149 Other pathological resorption -5215 Hypercementosis -5216 Ankylosis of teeth -5217 Intrinsic posteruptive color changes -52181 Cracked tooth -52189 Other specific diseases of hard tissues of teeth -5219 Unspecified disease of hard tissues of teeth -5220 Pulpitis -5221 Necrosis of the pulp -5222 Pulp degeneration -5223 Abnormal hard tissue formation in pulp -5224 Acute apical periodontitis of pulpal origin -5225 Periapical abscess without sinus -5226 Chronic apical periodontitis -5227 Periapical abscess with sinus -5228 Radicular cyst -5229 Other and unspecified diseases of pulp and periapical tissues -52300 Acute gingivitis, plaque induced -52301 Acute gingivitis, non-plaque induced -52310 Chronic gingivitis, plaque induced -52311 Chronic gingivitis, non-plaque induced -52320 Gingival recession, unspecified -52321 Gingival recession, minimal -52322 Gingival recession, moderate -52323 Gingival recession, severe -52324 Gingival recession, localized -52325 Gingival recession, generalized -52330 Aggressive periodontitis, unspecified -52331 Aggressive periodontitis, localized -52332 Aggressive periodontitis, generalized -52333 Acute periodontitis -52340 Chronic periodontitis, unspecified -52341 Chronic periodontitis, localized -52342 Chronic periodontitis, generalized -5235 Periodontosis -5236 Accretions on teeth -5238 Other specified periodontal diseases -5239 Unspecified gingival and periodontal disease -52400 Major anomalies of jaw size, unspecified anomaly -52401 Major anomalies of jaw size, maxillary hyperplasia -52402 Major anomalies of jaw size, mandibular hyperplasia -52403 Major anomalies of jaw size, maxillary hypoplasia -52404 Major anomalies of jaw size, mandibular hypoplasia -52405 Major anomalies of jaw size, macrogenia -52406 Major anomalies of jaw size, microgenia -52407 Excessive tuberosity of jaw -52409 Major anomalies of jaw size, other specified anomaly -52410 Anomalies of relationship of jaw to cranial base, unspecified anomaly -52411 Anomalies of relationship of jaw to cranial base, maxillary asymmetry -52412 Anomalies of relationship of jaw to cranial base, other jaw asymmetry -52419 Anomalies of relationship of jaw to cranial base, other specified anomaly -52420 Unspecified anomaly of dental arch relationship -52421 Malocclusion, Angle's class I -52422 Malocclusion, Angle's class II -52423 Malocclusion, Angle's class III -52424 Open anterior occlusal relationship -52425 Open posterior occlusal relationship -52426 Excessive horizontal overlap -52427 Reverse articulation -52428 Anomalies of interarch distance -52429 Other anomalies of dental arch relationship -52430 Unspecified anomaly of tooth position -52431 Crowding of teeth -52432 Excessive spacing of teeth -52433 Horizontal displacement of teeth -52434 Vertical displacement of teeth -52435 Rotation of tooth/teeth -52436 Insufficient interocclusal distance of teeth (ridge) -52437 Excessive interocclusal distance of teeth -52439 Other anomalies of tooth position -5244 Malocclusion, unspecified -52450 Dentofacial functional abnormality, unspecified -52451 Abnormal jaw closure -52452 Limited mandibular range of motion -52453 Deviation in opening and closing of the mandible -52454 Insufficient anterior guidance -52455 Centric occlusion maximum intercuspation discrepancy -52456 Non-working side interference -52457 Lack of posterior occlusal support -52459 Other dentofacial functional abnormalities -52460 Temporomandibular joint disorders, unspecified -52461 Temporomandibular joint disorders, adhesions and ankylosis (bony or fibrous) -52462 Temporomandibular joint disorders, arthralgia of temporomandibular joint -52463 Temporomandibular joint disorders, articular disc disorder (reducing or non-reducing) -52464 Temporomandibular joint sounds on opening and/or closing the jaw -52469 Other specified temporomandibular joint disorders -52470 Dental alveolar anomalies, unspecified alveolar anomaly -52471 Alveolar maxillary hyperplasia -52472 Alveolar mandibular hyperplasia -52473 Alveolar maxillary hypoplasia -52474 Alveolar mandibular hypoplasia -52475 Vertical displacement of alveolus and teeth -52476 Occlusal plane deviation -52479 Other specified alveolar anomaly -52481 Anterior soft tissue impingement -52482 Posterior soft tissue impingement -52489 Other specified dentofacial anomalies -5249 Unspecified dentofacial anomalies -5250 Exfoliation of teeth due to systemic causes -52510 Acquired absence of teeth, unspecified -52511 Loss of teeth due to trauma -52512 Loss of teeth due to periodontal disease -52513 Loss of teeth due to caries -52519 Other loss of teeth -52520 Unspecified atrophy of edentulous alveolar ridge -52521 Minimal atrophy of the mandible -52522 Moderate atrophy of the mandible -52523 Severe atrophy of the mandible -52524 Minimal atrophy of the maxilla -52525 Moderate atrophy of the maxilla -52526 Severe atrophy of the maxilla -5253 Retained dental root -52540 Complete edentulism, unspecified -52541 Complete edentulism, class I -52542 Complete edentulism, class II -52543 Complete edentulism, class III -52544 Complete edentulism, class IV -52550 Partial edentulism, unspecified -52551 Partial edentulism, class I -52552 Partial edentulism, class II -52553 Partial edentulism, class III -52554 Partial edentulism, class IV -52560 Unspecified unsatisfactory restoration of tooth -52561 Open restoration margins -52562 Unrepairable overhanging of dental restorative materials -52563 Fractured dental restorative material without loss of material -52564 Fractured dental restorative material with loss of material -52565 Contour of existing restoration of tooth biologically incompatible with oral health -52566 Allergy to existing dental restorative material -52567 Poor aesthetics of existing restoration -52569 Other unsatisfactory restoration of existing tooth -52571 Osseointegration failure of dental implant -52572 Post-osseointegration biological failure of dental implant -52573 Post-osseointegration mechanical failure of dental implant -52579 Other endosseous dental implant failure -5258 Other specified disorders of the teeth and supporting structures -5259 Unspecified disorder of the teeth and supporting structures -5260 Developmental odontogenic cysts -5261 Fissural cysts of jaw -5262 Other cysts of jaws -5263 Central giant cell (reparative) granuloma -5264 Inflammatory conditions of jaw -5265 Alveolitis of jaw -52661 Perforation of root canal space -52662 Endodontic overfill -52663 Endodontic underfill -52669 Other periradicular pathology associated with previous endodontic treatment -52681 Exostosis of jaw -52689 Other specified diseases of the jaws -5269 Unspecified disease of the jaws -5270 Atrophy of salivary gland -5271 Hypertrophy of salivary gland -5272 Sialoadenitis -5273 Abscess of salivary gland -5274 Fistula of salivary gland -5275 Sialolithiasis -5276 Mucocele of salivary gland -5277 Disturbance of salivary secretion -5278 Other specified diseases of the salivary glands -5279 Unspecified disease of the salivary glands -52800 Stomatitis and mucositis, unspecified -52801 Mucositis (ulcerative) due to antineoplastic therapy -52802 Mucositis (ulcerative) due to other drugs -52809 Other stomatitis and mucositis (ulcerative) -5281 Cancrum oris -5282 Oral aphthae -5283 Cellulitis and abscess of oral soft tissues -5284 Cysts of oral soft tissues -5285 Diseases of lips -5286 Leukoplakia of oral mucosa, including tongue -52871 Minimal keratinized residual ridge mucosa -52872 Excessive keratinized residual ridge mucosa -52879 Other disturbances of oral epithelium, including tongue -5288 Oral submucosal fibrosis, including of tongue -5289 Other and unspecified diseases of the oral soft tissues -5290 Glossitis -5291 Geographic tongue -5292 Median rhomboid glossitis -5293 Hypertrophy of tongue papillae -5294 Atrophy of tongue papillae -5295 Plicated tongue -5296 Glossodynia -5298 Other specified conditions of the tongue -5299 Unspecified condition of the tongue -5300 Achalasia and cardiospasm -53010 Esophagitis, unspecified -53011 Reflux esophagitis -53012 Acute esophagitis -53013 Eosinophilic esophagitis -53019 Other esophagitis -53020 Ulcer of esophagus without bleeding -53021 Ulcer of esophagus with bleeding -5303 Stricture and stenosis of esophagus -5304 Perforation of esophagus -5305 Dyskinesia of esophagus -5306 Diverticulum of esophagus, acquired -5307 Gastroesophageal laceration-hemorrhage syndrome -53081 Esophageal reflux -53082 Esophageal hemorrhage -53083 Esophageal leukoplakia -53084 Tracheoesophageal fistula -53085 Barrett's esophagus -53086 Infection of esophagostomy -53087 Mechanical complication of esophagostomy -53089 Other specified disorders of esophagus -5309 Unspecified disorder of esophagus -53100 Acute gastric ulcer with hemorrhage, without mention of obstruction -53101 Acute gastric ulcer with hemorrhage, with obstruction -53110 Acute gastric ulcer with perforation, without mention of obstruction -53111 Acute gastric ulcer with perforation, with obstruction -53120 Acute gastric ulcer with hemorrhage and perforation, without mention of obstruction -53121 Acute gastric ulcer with hemorrhage and perforation, with obstruction -53130 Acute gastric ulcer without mention of hemorrhage or perforation, without mention of obstruction -53131 Acute gastric ulcer without mention of hemorrhage or perforation, with obstruction -53140 Chronic or unspecified gastric ulcer with hemorrhage, without mention of obstruction -53141 Chronic or unspecified gastric ulcer with hemorrhage, with obstruction -53150 Chronic or unspecified gastric ulcer with perforation, without mention of obstruction -53151 Chronic or unspecified gastric ulcer with perforation, with obstruction -53160 Chronic or unspecified gastric ulcer with hemorrhage and perforation, without mention of obstruction -53161 Chronic or unspecified gastric ulcer with hemorrhage and perforation, with obstruction -53170 Chronic gastric ulcer without mention of hemorrhage or perforation, without mention of obstruction -53171 Chronic gastric ulcer without mention of hemorrhage or perforation, with obstruction -53190 Gastric ulcer, unspecified as acute or chronic, without mention of hemorrhage or perforation, without mention of obstruction -53191 Gastric ulcer, unspecified as acute or chronic, without mention of hemorrhage or perforation, with obstruction -53200 Acute duodenal ulcer with hemorrhage, without mention of obstruction -53201 Acute duodenal ulcer with hemorrhage, with obstruction -53210 Acute duodenal ulcer with perforation, without mention of obstruction -53211 Acute duodenal ulcer with perforation, with obstruction -53220 Acute duodenal ulcer with hemorrhage and perforation, without mention of obstruction -53221 Acute duodenal ulcer with hemorrhage and perforation, with obstruction -53230 Acute duodenal ulcer without mention of hemorrhage or perforation, without mention of obstruction -53231 Acute duodenal ulcer without mention of hemorrhage or perforation, with obstruction -53240 Chronic or unspecified duodenal ulcer with hemorrhage, without mention of obstruction -53241 Chronic or unspecified duodenal ulcer with hemorrhage, with obstruction -53250 Chronic or unspecified duodenal ulcer with perforation, without mention of obstruction -53251 Chronic or unspecified duodenal ulcer with perforation, with obstruction -53260 Chronic or unspecified duodenal ulcer with hemorrhage and perforation, without mention of obstruction -53261 Chronic or unspecified duodenal ulcer with hemorrhage and perforation, with obstruction -53270 Chronic duodenal ulcer without mention of hemorrhage or perforation, without mention of obstruction -53271 Chronic duodenal ulcer without mention of hemorrhage or perforation, with obstruction -53290 Duodenal ulcer, unspecified as acute or chronic, without hemorrhage or perforation, without mention of obstruction -53291 Duodenal ulcer, unspecified as acute or chronic, without mention of hemorrhage or perforation, with obstruction -53300 Acute peptic ulcer of unspecified site with hemorrhage, without mention of obstruction -53301 Acute peptic ulcer of unspecified site with hemorrhage, with obstruction -53310 Acute peptic ulcer of unspecified site with perforation, without mention of obstruction -53311 Acute peptic ulcer of unspecified site with perforation, with obstruction -53320 Acute peptic ulcer of unspecified site with hemorrhage and perforation, without mention of obstruction -53321 Acute peptic ulcer of unspecified site with hemorrhage and perforation, with obstruction -53330 Acute peptic ulcer of unspecified site without mention of hemorrhage and perforation, without mention of obstruction -53331 Acute peptic ulcer of unspecified site without mention of hemorrhage and perforation, with obstruction -53340 Chronic or unspecified peptic ulcer of unspecified site with hemorrhage, without mention of obstruction -53341 Chronic or unspecified peptic ulcer of unspecified site with hemorrhage, with obstruction -53350 Chronic or unspecified peptic ulcer of unspecified site with perforation, without mention of obstruction -53351 Chronic or unspecified peptic ulcer of unspecified site with perforation, with obstruction -53360 Chronic or unspecified peptic ulcer of unspecified site with hemorrhage and perforation, without mention of obstruction -53361 Chronic or unspecified peptic ulcer of unspecified site with hemorrhage and perforation, with obstruction -53370 Chronic peptic ulcer of unspecified site without mention of hemorrhage or perforation, without mention of obstruction -53371 Chronic peptic ulcer of unspecified site without mention of hemorrhage or perforation, with obstruction -53390 Peptic ulcer of unspecified site, unspecified as acute or chronic, without mention of hemorrhage or perforation, without mention of obstruction -53391 Peptic ulcer of unspecified site, unspecified as acute or chronic, without mention of hemorrhage or perforation, with obstruction -53400 Acute gastrojejunal ulcer with hemorrhage, without mention of obstruction -53401 Acute gastrojejunal ulcer, with hemorrhage, with obstruction -53410 Acute gastrojejunal ulcer with perforation, without mention of obstruction -53411 Acute gastrojejunal ulcer with perforation, with obstruction -53420 Acute gastrojejunal ulcer with hemorrhage and perforation, without mention of obstruction -53421 Acute gastrojejunal ulcer with hemorrhage and perforation, with obstruction -53430 Acute gastrojejunal ulcer without mention of hemorrhage or perforation, without mention of obstruction -53431 Acute gastrojejunal ulcer without mention of hemorrhage or perforation, with obstruction -53440 Chronic or unspecified gastrojejunal ulcer with hemorrhage, without mention of obstruction -53441 Chronic or unspecified gastrojejunal ulcer, with hemorrhage, with obstruction -53450 Chronic or unspecified gastrojejunal ulcer with perforation, without mention of obstruction -53451 Chronic or unspecified gastrojejunal ulcer with perforation, with obstruction -53460 Chronic or unspecified gastrojejunal ulcer with hemorrhage and perforation, without mention of obstruction -53461 Chronic or unspecified gastrojejunal ulcer with hemorrhage and perforation, with obstruction -53470 Chronic gastrojejunal ulcer without mention of hemorrhage or perforation, without mention of obstruction -53471 Chronic gastrojejunal ulcer without mention of hemorrhage or perforation, with obstruction -53490 Gastrojejunal ulcer, unspecified as acute or chronic, without mention of hemorrhage or perforation, without mention of obstruction -53491 Gastrojejunal ulcer, unspecified as acute or chronic, without mention of hemorrhage or perforation, with obstruction -53500 Acute gastritis, without mention of hemorrhage -53501 Acute gastritis, with hemorrhage -53510 Atrophic gastritis, without mention of hemorrhage -53511 Atrophic gastritis, with hemorrhage -53520 Gastric mucosal hypertrophy, without mention of hemorrhage -53521 Gastric mucosal hypertrophy, with hemorrhage -53530 Alcoholic gastritis, without mention of hemorrhage -53531 Alcoholic gastritis, with hemorrhage -53540 Other specified gastritis, without mention of hemorrhage -53541 Other specified gastritis, with hemorrhage -53550 Unspecified gastritis and gastroduodenitis, without mention of hemorrhage -53551 Unspecified gastritis and gastroduodenitis, with hemorrhage -53560 Duodenitis, without mention of hemorrhage -53561 Duodenitis, with hemorrhage -53570 Eosinophilic gastritis, without mention of hemorrhage -53571 Eosinophilic gastritis, with hemorrhage -5360 Achlorhydria -5361 Acute dilatation of stomach -5362 Persistent vomiting -5363 Gastroparesis -53640 Gastrostomy complication, unspecified -53641 Infection of gastrostomy -53642 Mechanical complication of gastrostomy -53649 Other gastrostomy complications -5368 Dyspepsia and other specified disorders of function of stomach -5369 Unspecified functional disorder of stomach -5370 Acquired hypertrophic pyloric stenosis -5371 Gastric diverticulum -5372 Chronic duodenal ileus -5373 Other obstruction of duodenum -5374 Fistula of stomach or duodenum -5375 Gastroptosis -5376 Hourglass stricture or stenosis of stomach -53781 Pylorospasm -53782 Angiodysplasia of stomach and duodenum without mention of hemorrhage -53783 Angiodysplasia of stomach and duodenum with hemorrhage -53784 Dieulafoy lesion (hemorrhagic) of stomach and duodenum -53789 Other specified disorders of stomach and duodenum -5379 Unspecified disorder of stomach and duodenum -538 Gastrointestinal mucositis (ulcerative) -53901 Infection due to gastric band procedure -53909 Other complications of gastric band procedure -53981 Infection due to other bariatric procedure -53989 Other complications of other bariatric procedure -5400 Acute appendicitis with generalized peritonitis -5401 Acute appendicitis with peritoneal abscess -5409 Acute appendicitis without mention of peritonitis -541 Appendicitis, unqualified -542 Other appendicitis -5430 Hyperplasia of appendix (lymphoid) -5439 Other and unspecified diseases of appendix -55000 Inguinal hernia, with gangrene, unilateral or unspecified (not specified as recurrent) -55001 Inguinal hernia, with gangrene, unilateral or unspecified, recurrent -55002 Inguinal hernia, with gangrene, bilateral (not specified as recurrent) -55003 Inguinal hernia, with gangrene, bilateral, recurrent -55010 Inguinal hernia, with obstruction, without mention of gangrene, unilateral or unspecified (not specified as recurrent) -55011 Inguinal hernia, with obstruction, without mention of gangrene, unilateral or unspecified,recurrent -55012 Inguinal hernia, with obstruction, without mention of gangrene, bilateral (not specified as recurrent) -55013 Inguinal hernia, with obstruction, without mention of gangrene, bilateral, recurrent -55090 Inguinal hernia, without mention of obstruction or gangrene, unilateral or unspecified (not specified as recurrent) -55091 Inguinal hernia, without mention of obstruction or gangrene, unilateral or unspecified, recurrent -55092 Inguinal hernia, without mention of obstruction or gangrene, bilateral (not specified as recurrent) -55093 Inguinal hernia, without mention of obstruction or gangrene, bilateral, recurrent -55100 Femoral hernia with gangrene, unilateral or unspecified (not specified as recurrent) -55101 Femoral hernia with gangrene, unilateral or unspecified, recurrent -55102 Femoral hernia with gangrene, bilateral (not specified as recurrent) -55103 Femoral hernia with gangrene, bilateral, recurrent -5511 Umbilical hernia with gangrene -55120 Ventral hernia, unspecified, with gangrene -55121 Incisional ventral hernia, with gangrene -55129 Other ventral hernia with gangrene -5513 Diaphragmatic hernia with gangrene -5518 Hernia of other specified sites, with gangrene -5519 Hernia of unspecified site, with gangrene -55200 Femoral hernia with obstruction, unilateral or unspecified (not specified as recurrent) -55201 Femoral hernia with obstruction, unilateral or unspecified, recurrent -55202 Femoral hernia with obstruction, bilateral (not specified as recurrent) -55203 Femoral hernia with obstruction, bilateral, recurrent -5521 Umbilical hernia with obstruction -55220 Ventral, unspecified, hernia with obstruction -55221 Incisional ventral hernia with obstruction -55229 Other ventral hernia with obstruction -5523 Diaphragmatic hernia with obstruction -5528 Hernia of other specified sites, with obstruction -5529 Hernia of unspecified site, with obstruction -55300 Femoral hernia without mention of obstruction of gangrene, unilateral or unspecified(not specified as recurrent) -55301 Femoral hernia without mention of obstruction or gangrene, unilateral or unspecified, recurrent -55302 Femoral hernia without mention of obstruction or gangrene, bilateral (not specified as recurrent) -55303 Femoral hernia without mention of obstruction or gangrene, bilateral,recurrent -5531 Umbilical hernia without mention of obstruction or gangrene -55320 Ventral, unspecified, hernia without mention of obstruction or gangrene -55321 Incisional hernia without mention of obstruction or gangrene -55329 Other ventral hernia without mention of obstruction or gangrene -5533 Diaphragmatic hernia without mention of obstruction or gangrene -5538 Hernia of other specified sites without mention of obstruction or gangrene -5539 Hernia of unspecified site without mention of obstruction or gangrene -5550 Regional enteritis of small intestine -5551 Regional enteritis of large intestine -5552 Regional enteritis of small intestine with large intestine -5559 Regional enteritis of unspecified site -5560 Ulcerative (chronic) enterocolitis -5561 Ulcerative (chronic) ileocolitis -5562 Ulcerative (chronic) proctitis -5563 Ulcerative (chronic) proctosigmoiditis -5564 Pseudopolyposis of colon -5565 Left-sided ulcerative (chronic) colitis -5566 Universal ulcerative (chronic) colitis -5568 Other ulcerative colitis -5569 Ulcerative colitis, unspecified -5570 Acute vascular insufficiency of intestine -5571 Chronic vascular insufficiency of intestine -5579 Unspecified vascular insufficiency of intestine -5581 Gastroenteritis and colitis due to radiation -5582 Toxic gastroenteritis and colitis -5583 Allergic gastroenteritis and colitis -55841 Eosinophilic gastroenteritis -55842 Eosinophilic colitis -5589 Other and unspecified noninfectious gastroenteritis and colitis -5600 Intussusception -5601 Paralytic ileus -5602 Volvulus -56030 Impaction of intestine, unspecified -56031 Gallstone ileus -56032 Fecal impaction -56039 Other impaction of intestine -56081 Intestinal or peritoneal adhesions with obstruction (postoperative) (postinfection) -56089 Other specified intestinal obstruction -5609 Unspecified intestinal obstruction -56200 Diverticulosis of small intestine (without mention of hemorrhage) -56201 Diverticulitis of small intestine (without mention of hemorrhage) -56202 Diverticulosis of small intestine with hemorrhage -56203 Diverticulitis of small intestine with hemorrhage -56210 Diverticulosis of colon (without mention of hemorrhage) -56211 Diverticulitis of colon (without mention of hemorrhage) -56212 Diverticulosis of colon with hemorrhage -56213 Diverticulitis of colon with hemorrhage -56400 Constipation, unspecified -56401 Slow transit constipation -56402 Outlet dysfunction constipation -56409 Other constipation -5641 Irritable bowel syndrome -5642 Postgastric surgery syndromes -5643 Vomiting following gastrointestinal surgery -5644 Other postoperative functional disorders -5645 Functional diarrhea -5646 Anal spasm -5647 Megacolon, other than Hirschsprung's -56481 Neurogenic bowel -56489 Other functional disorders of intestine -5649 Unspecified functional disorder of intestine -5650 Anal fissure -5651 Anal fistula -566 Abscess of anal and rectal regions -5670 Peritonitis in infectious diseases classified elsewhere -5671 Pneumococcal peritonitis -56721 Peritonitis (acute) generalized -56722 Peritoneal abscess -56723 Spontaneous bacterial peritonitis -56729 Other suppurative peritonitis -56731 Psoas muscle abscess -56738 Other retroperitoneal abscess -56739 Other retroperitoneal infections -56781 Choleperitonitis -56782 Sclerosing mesenteritis -56789 Other specified peritonitis -5679 Unspecified peritonitis -5680 Peritoneal adhesions (postoperative) (postinfection) -56881 Hemoperitoneum (nontraumatic) -56882 Peritoneal effusion (chronic) -56889 Other specified disorders of peritoneum -5689 Unspecified disorder of peritoneum -5690 Anal and rectal polyp -5691 Rectal prolapse -5692 Stenosis of rectum and anus -5693 Hemorrhage of rectum and anus -56941 Ulcer of anus and rectum -56942 Anal or rectal pain -56943 Anal sphincter tear (healed) (old) -56944 Dysplasia of anus -56949 Other specified disorders of rectum and anus -5695 Abscess of intestine -56960 Colostomy and enterostomy complication, unspecified -56961 Infection of colostomy or enterostomy -56962 Mechanical complication of colostomy and enterostomy -56969 Other colostomy and enterostomy complication -56971 Pouchitis -56979 Other complications of intestinal pouch -56981 Fistula of intestine, excluding rectum and anus -56982 Ulceration of intestine -56983 Perforation of intestine -56984 Angiodysplasia of intestine (without mention of hemorrhage) -56985 Angiodysplasia of intestine with hemorrhage -56986 Dieulafoy lesion (hemorrhagic) of intestine -56987 Vomiting of fecal matter -56989 Other specified disorders of intestine -5699 Unspecified disorder of intestine -570 Acute and subacute necrosis of liver -5710 Alcoholic fatty liver -5711 Acute alcoholic hepatitis -5712 Alcoholic cirrhosis of liver -5713 Alcoholic liver damage, unspecified -57140 Chronic hepatitis, unspecified -57141 Chronic persistent hepatitis -57142 Autoimmune hepatitis -57149 Other chronic hepatitis -5715 Cirrhosis of liver without mention of alcohol -5716 Biliary cirrhosis -5718 Other chronic nonalcoholic liver disease -5719 Unspecified chronic liver disease without mention of alcohol -5720 Abscess of liver -5721 Portal pyemia -5722 Hepatic encephalopathy -5723 Portal hypertension -5724 Hepatorenal syndrome -5728 Other sequelae of chronic liver disease -5730 Chronic passive congestion of liver -5731 Hepatitis in viral diseases classified elsewhere -5732 Hepatitis in other infectious diseases classified elsewhere -5733 Hepatitis, unspecified -5734 Hepatic infarction -5735 Hepatopulmonary syndrome -5738 Other specified disorders of liver -5739 Unspecified disorder of liver -57400 Calculus of gallbladder with acute cholecystitis, without mention of obstruction -57401 Calculus of gallbladder with acute cholecystitis, with obstruction -57410 Calculus of gallbladder with other cholecystitis, without mention of obstruction -57411 Calculus of gallbladder with other cholecystitis, with obstruction -57420 Calculus of gallbladder without mention of cholecystitis, without mention of obstruction -57421 Calculus of gallbladder without mention of cholecystitis, with obstruction -57430 Calculus of bile duct with acute cholecystitis, without mention of obstruction -57431 Calculus of bile duct with acute cholecystitis, with obstruction -57440 Calculus of bile duct with other cholecystitis, without mention of obstruction -57441 Calculus of bile duct with other cholecystitis, with obstruction -57450 Calculus of bile duct without mention of cholecystitis, without mention of obstruction -57451 Calculus of bile duct without mention of cholecystitis, with obstruction -57460 Calculus of gallbladder and bile duct with acute cholecystitis, without mention of obstruction -57461 Calculus of gallbladder and bile duct with acute cholecystitis, with obstruction -57470 Calculus of gallbladder and bile duct with other cholecystitis, without mention of obstruction -57471 Calculus of gallbladder and bile duct with other cholecystitis, with obstruction -57480 Calculus of gallbladder and bile duct with acute and chronic cholecystitis, without mention of obstruction -57481 Calculus of gallbladder and bile duct with acute and chronic cholecystitis, with obstruction -57490 Calculus of gallbladder and bile duct without cholecystitis, without mention of obstruction -57491 Calculus of gallbladder and bile duct without cholecystitis, with obstruction -5750 Acute cholecystitis -57510 Cholecystitis, unspecified -57511 Chronic cholecystitis -57512 Acute and chronic cholecystitis -5752 Obstruction of gallbladder -5753 Hydrops of gallbladder -5754 Perforation of gallbladder -5755 Fistula of gallbladder -5756 Cholesterolosis of gallbladder -5758 Other specified disorders of gallbladder -5759 Unspecified disorder of gallbladder -5760 Postcholecystectomy syndrome -5761 Cholangitis -5762 Obstruction of bile duct -5763 Perforation of bile duct -5764 Fistula of bile duct -5765 Spasm of sphincter of Oddi -5768 Other specified disorders of biliary tract -5769 Unspecified disorder of biliary tract -5770 Acute pancreatitis -5771 Chronic pancreatitis -5772 Cyst and pseudocyst of pancreas -5778 Other specified diseases of pancreas -5779 Unspecified disease of pancreas -5780 Hematemesis -5781 Blood in stool -5789 Hemorrhage of gastrointestinal tract, unspecified -5790 Celiac disease -5791 Tropical sprue -5792 Blind loop syndrome -5793 Other and unspecified postsurgical nonabsorption -5794 Pancreatic steatorrhea -5798 Other specified intestinal malabsorption -5799 Unspecified intestinal malabsorption -5800 Acute glomerulonephritis with lesion of proliferative glomerulonephritis -5804 Acute glomerulonephritis with lesion of rapidly progressive glomerulonephritis -58081 Acute glomerulonephritis in diseases classified elsewhere -58089 Acute glomerulonephritis with other specified pathological lesion in kidney -5809 Acute glomerulonephritis with unspecified pathological lesion in kidney -5810 Nephrotic syndrome with lesion of proliferative glomerulonephritis -5811 Nephrotic syndrome with lesion of membranous glomerulonephritis -5812 Nephrotic syndrome with lesion of membranoproliferative glomerulonephritis -5813 Nephrotic syndrome with lesion of minimal change glomerulonephritis -58181 Nephrotic syndrome in diseases classified elsewhere -58189 Nephrotic syndrome with other specified pathological lesion in kidney -5819 Nephrotic syndrome with unspecified pathological lesion in kidney -5820 Chronic glomerulonephritis with lesion of proliferative glomerulonephritis -5821 Chronic glomerulonephritis with lesion of membranous glomerulonephritis -5822 Chronic glomerulonephritis with lesion of membranoproliferative glomerulonephritis -5824 Chronic glomerulonephritis with lesion of rapidly progressive glomerulonephritis -58281 Chronic glomerulonephritis in diseases classified elsewhere -58289 Chronic glomerulonephritis with other specified pathological lesion in kidney -5829 Chronic glomerulonephritis with unspecified pathological lesion in kidney -5830 Nephritis and nephropathy, not specified as acute or chronic, with lesion of proliferative glomerulonephritis -5831 Nephritis and nephropathy, not specified as acute or chronic, with lesion of membranous glomerulonephritis -5832 Nephritis and nephropathy, not specified as acute or chronic, with lesion of membranoproliferative glomerulonephritis -5834 Nephritis and nephropathy, not specified as acute or chronic, with lesion of rapidly progressive glomerulonephritis -5836 Nephritis and nephropathy, not specified as acute or chronic, with lesion of renal cortical necrosis -5837 Nephritis and nephropathy, not specified as acute or chronic, with lesion of renal medullary necrosis -58381 Nephritis and nephropathy, not specified as acute or chronic, in diseases classified elsewhere -58389 Nephritis and nephropathy, not specified as acute or chronic, with other specified pathological lesion in kidney -5839 Nephritis and nephropathy, not specified as acute or chronic, with unspecified pathological lesion in kidney -5845 Acute kidney failure with lesion of tubular necrosis -5846 Acute kidney failure with lesion of renal cortical necrosis -5847 Acute kidney failure with lesion of renal medullary [papillary] necrosis -5848 Acute kidney failure with other specified pathological lesion in kidney -5849 Acute kidney failure, unspecified -5851 Chronic kidney disease, Stage I -5852 Chronic kidney disease, Stage II (mild) -5853 Chronic kidney disease, Stage III (moderate) -5854 Chronic kidney disease, Stage IV (severe) -5855 Chronic kidney disease, Stage V -5856 End stage renal disease -5859 Chronic kidney disease, unspecified -586 Renal failure, unspecified -587 Renal sclerosis, unspecified -5880 Renal osteodystrophy -5881 Nephrogenic diabetes insipidus -58881 Secondary hyperparathyroidism (of renal origin) -58889 Other specified disorders resulting from impaired renal function -5889 Unspecified disorder resulting from impaired renal function -5890 Unilateral small kidney -5891 Bilateral small kidneys -5899 Small kidney, unspecified -59000 Chronic pyelonephritis without lesion of renal medullary necrosis -59001 Chronic pyelonephritis with lesion of renal medullary necrosis -59010 Acute pyelonephritis without lesion of renal medullary necrosis -59011 Acute pyelonephritis with lesion of renal medullary necrosis -5902 Renal and perinephric abscess -5903 Pyeloureteritis cystica -59080 Pyelonephritis, unspecified -59081 Pyelitis or pyelonephritis in diseases classified elsewhere -5909 Infection of kidney, unspecified -591 Hydronephrosis -5920 Calculus of kidney -5921 Calculus of ureter -5929 Urinary calculus, unspecified -5930 Nephroptosis -5931 Hypertrophy of kidney -5932 Cyst of kidney, acquired -5933 Stricture or kinking of ureter -5934 Other ureteric obstruction -5935 Hydroureter -5936 Postural proteinuria -59370 Vesicoureteral reflux unspecified or without reflux nephropathy -59371 Vesicoureteral reflux with reflux nephropathy, unilateral -59372 Vesicoureteral reflux with reflux nephropathy, bilateral -59373 Other vesicoureteral reflux with reflux nephropathy NOS -59381 Vascular disorders of kidney -59382 Ureteral fistula -59389 Other specified disorders of kidney and ureter -5939 Unspecified disorder of kidney and ureter -5940 Calculus in diverticulum of bladder -5941 Other calculus in bladder -5942 Calculus in urethra -5948 Other lower urinary tract calculus -5949 Calculus of lower urinary tract, unspecified -5950 Acute cystitis -5951 Chronic interstitial cystitis -5952 Other chronic cystitis -5953 Trigonitis -5954 Cystitis in diseases classified elsewhere -59581 Cystitis cystica -59582 Irradiation cystitis -59589 Other specified types of cystitis -5959 Cystitis, unspecified -5960 Bladder neck obstruction -5961 Intestinovesical fistula -5962 Vesical fistula, not elsewhere classified -5963 Diverticulum of bladder -5964 Atony of bladder -59651 Hypertonicity of bladder -59652 Low bladder compliance -59653 Paralysis of bladder -59654 Neurogenic bladder NOS -59655 Detrusor sphincter dyssynergia -59659 Other functional disorder of bladder -5966 Rupture of bladder, nontraumatic -5967 Hemorrhage into bladder wall -59681 Infection of cystostomy -59682 Mechanical complication of cystostomy -59683 Other complication of cystostomy -59689 Other specified disorders of bladder -5969 Unspecified disorder of bladder -5970 Urethral abscess -59780 Urethritis, unspecified -59781 Urethral syndrome NOS -59789 Other urethritis -59800 Urethral stricture due to unspecified infection -59801 Urethral stricture due to infective diseases classified elsewhere -5981 Traumatic urethral stricture -5982 Postoperative urethral stricture -5988 Other specified causes of urethral stricture -5989 Urethral stricture, unspecified -5990 Urinary tract infection, site not specified -5991 Urethral fistula -5992 Urethral diverticulum -5993 Urethral caruncle -5994 Urethral false passage -5995 Prolapsed urethral mucosa -59960 Urinary obstruction, unspecified -59969 Urinary obstruction, not elsewhere classified -59970 Hematuria, unspecified -59971 Gross hematuria -59972 Microscopic hematuria -59981 Urethral hypermobility -59982 Intrinsic (urethral) sphincter deficiency [ISD] -59983 Urethral instability -59984 Other specified disorders of urethra -59989 Other specified disorders of urinary tract -5999 Unspecified disorder of urethra and urinary tract -60000 Hypertrophy (benign) of prostate without urinary obstruction and other lower urinary tract symptom (LUTS) -60001 Hypertrophy (benign) of prostate with urinary obstruction and other lower urinary tract symptoms (LUTS) -60010 Nodular prostate without urinary obstruction -60011 Nodular prostate with urinary obstruction -60020 Benign localized hyperplasia of prostate without urinary obstruction and other lower urinary tract symptoms (LUTS) -60021 Benign localized hyperplasia of prostate with urinary obstruction and other lower urinary tract symptoms (LUTS) -6003 Cyst of prostate -60090 Hyperplasia of prostate, unspecified, without urinary obstruction and other lower urinary symptoms (LUTS) -60091 Hyperplasia of prostate, unspecified, with urinary obstruction and other lower urinary symptoms (LUTS) -6010 Acute prostatitis -6011 Chronic prostatitis -6012 Abscess of prostate -6013 Prostatocystitis -6014 Prostatitis in diseases classified elsewhere -6018 Other specified inflammatory diseases of prostate -6019 Prostatitis, unspecified -6020 Calculus of prostate -6021 Congestion or hemorrhage of prostate -6022 Atrophy of prostate -6023 Dysplasia of prostate -6028 Other specified disorders of prostate -6029 Unspecified disorder of prostate -6030 Encysted hydrocele -6031 Infected hydrocele -6038 Other specified types of hydrocele -6039 Hydrocele, unspecified -6040 Orchitis, epididymitis, and epididymo-orchitis, with abscess -60490 Orchitis and epididymitis, unspecified -60491 Orchitis and epididymitis in diseases classified elsewhere -60499 Other orchitis, epididymitis, and epididymo-orchitis, without mention of abscess -605 Redundant prepuce and phimosis -6060 Azoospermia -6061 Oligospermia -6068 Infertility due to extratesticular causes -6069 Male infertility, unspecified -6070 Leukoplakia of penis -6071 Balanoposthitis -6072 Other inflammatory disorders of penis -6073 Priapism -60781 Balanitis xerotica obliterans -60782 Vascular disorders of penis -60783 Edema of penis -60784 Impotence of organic origin -60785 Peyronie's disease -60789 Other specified disorders of penis -6079 Unspecified disorder of penis -6080 Seminal vesiculitis -6081 Spermatocele -60820 Torsion of testis, unspecified -60821 Extravaginal torsion of spermatic cord -60822 Intravaginal torsion of spermatic cord -60823 Torsion of appendix testis -60824 Torsion of appendix epididymis -6083 Atrophy of testis -6084 Other inflammatory disorders of male genital organs -60881 Disorders of male genital organs in diseases classified elsewhere -60882 Hematospermia -60883 Vascular disorders of male genital organs -60884 Chylocele of tunica vaginalis -60885 Stricture of male genital organs -60886 Edema of male genital organs -60887 Retrograde ejaculation -60889 Other specified disorders of male genital organs -6089 Unspecified disorder of male genital organs -6100 Solitary cyst of breast -6101 Diffuse cystic mastopathy -6102 Fibroadenosis of breast -6103 Fibrosclerosis of breast -6104 Mammary duct ectasia -6108 Other specified benign mammary dysplasias -6109 Benign mammary dysplasia, unspecified -6110 Inflammatory disease of breast -6111 Hypertrophy of breast -6112 Fissure of nipple -6113 Fat necrosis of breast -6114 Atrophy of breast -6115 Galactocele -6116 Galactorrhea not associated with childbirth -61171 Mastodynia -61172 Lump or mass in breast -61179 Other signs and symptoms in breast -61181 Ptosis of breast -61182 Hypoplasia of breast -61183 Capsular contracture of breast implant -61189 Other specified disorders of breast -6119 Unspecified breast disorder -6120 Deformity of reconstructed breast -6121 Disproportion of reconstructed breast -6140 Acute salpingitis and oophoritis -6141 Chronic salpingitis and oophoritis -6142 Salpingitis and oophoritis not specified as acute, subacute, or chronic -6143 Acute parametritis and pelvic cellulitis -6144 Chronic or unspecified parametritis and pelvic cellulitis -6145 Acute or unspecified pelvic peritonitis, female -6146 Pelvic peritoneal adhesions, female (postoperative) (postinfection) -6147 Other chronic pelvic peritonitis, female -6148 Other specified inflammatory disease of female pelvic organs and tissues -6149 Unspecified inflammatory disease of female pelvic organs and tissues -6150 Acute inflammatory diseases of uterus, except cervix -6151 Chronic inflammatory diseases of uterus, except cervix -6159 Unspecified inflammatory disease of uterus -6160 Cervicitis and endocervicitis -61610 Vaginitis and vulvovaginitis, unspecified -61611 Vaginitis and vulvovaginitis in diseases classified elsewhere -6162 Cyst of Bartholin's gland -6163 Abscess of Bartholin's gland -6164 Other abscess of vulva -61650 Ulceration of vulva, unspecified -61651 Ulceration of vulva in diseases classified elsewhere -61681 Mucositis (ulcerative) of cervix, vagina, and vulva -61689 Other inflammatory disease of cervix, vagina and vulva -6169 Unspecified inflammatory disease of cervix, vagina, and vulva -6170 Endometriosis of uterus -6171 Endometriosis of ovary -6172 Endometriosis of fallopian tube -6173 Endometriosis of pelvic peritoneum -6174 Endometriosis of rectovaginal septum and vagina -6175 Endometriosis of intestine -6176 Endometriosis in scar of skin -6178 Endometriosis of other specified sites -6179 Endometriosis, site unspecified -61800 Unspecified prolapse of vaginal walls -61801 Cystocele, midline -61802 Cystocele, lateral -61803 Urethrocele -61804 Rectocele -61805 Perineocele -61809 Other prolapse of vaginal walls without mention of uterine prolapse -6181 Uterine prolapse without mention of vaginal wall prolapse -6182 Uterovaginal prolapse, incomplete -6183 Uterovaginal prolapse, complete -6184 Uterovaginal prolapse, unspecified -6185 Prolapse of vaginal vault after hysterectomy -6186 Vaginal enterocele, congenital or acquired -6187 Old laceration of muscles of pelvic floor -61881 Incompetence or weakening of pubocervical tissue -61882 Incompetence or weakening of rectovaginal tissue -61883 Pelvic muscle wasting -61884 Cervical stump prolapse -61889 Other specified genital prolapse -6189 Unspecified genital prolapse -6190 Urinary-genital tract fistula, female -6191 Digestive-genital tract fistula, female -6192 Genital tract-skin fistula, female -6198 Other specified fistulas involving female genital tract -6199 Unspecified fistula involving female genital tract -6200 Follicular cyst of ovary -6201 Corpus luteum cyst or hematoma -6202 Other and unspecified ovarian cyst -6203 Acquired atrophy of ovary and fallopian tube -6204 Prolapse or hernia of ovary and fallopian tube -6205 Torsion of ovary, ovarian pedicle, or fallopian tube -6206 Broad ligament laceration syndrome -6207 Hematoma of broad ligament -6208 Other noninflammatory disorders of ovary, fallopian tube, and broad ligament -6209 Unspecified noninflammatory disorder of ovary, fallopian tube, and broad ligament -6210 Polyp of corpus uteri -6211 Chronic subinvolution of uterus -6212 Hypertrophy of uterus -62130 Endometrial hyperplasia, unspecified -62131 Simple endometrial hyperplasia without atypia -62132 Complex endometrial hyperplasia without atypia -62133 Endometrial hyperplasia with atypia -62134 Benign endometrial hyperplasia -62135 Endometrial intraepithelial neoplasia [EIN] -6214 Hematometra -6215 Intrauterine synechiae -6216 Malposition of uterus -6217 Chronic inversion of uterus -6218 Other specified disorders of uterus, not elsewhere classified -6219 Unspecified disorder of uterus -6220 Erosion and ectropion of cervix -62210 Dysplasia of cervix, unspecified -62211 Mild dysplasia of cervix -62212 Moderate dysplasia of cervix -6222 Leukoplakia of cervix (uteri) -6223 Old laceration of cervix -6224 Stricture and stenosis of cervix -6225 Incompetence of cervix -6226 Hypertrophic elongation of cervix -6227 Mucous polyp of cervix -6228 Other specified noninflammatory disorders of cervix -6229 Unspecified noninflammatory disorder of cervix -6230 Dysplasia of vagina -6231 Leukoplakia of vagina -6232 Stricture or atresia of vagina -6233 Tight hymenal ring -6234 Old vaginal laceration -6235 Leukorrhea, not specified as infective -6236 Vaginal hematoma -6237 Polyp of vagina -6238 Other specified noninflammatory disorders of vagina -6239 Unspecified noninflammatory disorder of vagina -62401 Vulvar intraepithelial neoplasia I [VIN I] -62402 Vulvar intraepithelial neoplasia II [VIN II] -62409 Other dystrophy of vulva -6241 Atrophy of vulva -6242 Hypertrophy of clitoris -6243 Hypertrophy of labia -6244 Old laceration or scarring of vulva -6245 Hematoma of vulva -6246 Polyp of labia and vulva -6248 Other specified noninflammatory disorders of vulva and perineum -6249 Unspecified noninflammatory disorder of vulva and perineum -6250 Dyspareunia -6251 Vaginismus -6252 Mittelschmerz -6253 Dysmenorrhea -6254 Premenstrual tension syndromes -6255 Pelvic congestion syndrome -6256 Stress incontinence, female -62570 Vulvodynia, unspecified -62571 Vulvar vestibulitis -62579 Other vulvodynia -6258 Other specified symptoms associated with female genital organs -6259 Unspecified symptom associated with female genital organs -6260 Absence of menstruation -6261 Scanty or infrequent menstruation -6262 Excessive or frequent menstruation -6263 Puberty bleeding -6264 Irregular menstrual cycle -6265 Ovulation bleeding -6266 Metrorrhagia -6267 Postcoital bleeding -6268 Other disorders of menstruation and other abnormal bleeding from female genital tract -6269 Unspecified disorders of menstruation and other abnormal bleeding from female genital tract -6270 Premenopausal menorrhagia -6271 Postmenopausal bleeding -6272 Symptomatic menopausal or female climacteric states -6273 Postmenopausal atrophic vaginitis -6274 Symptomatic states associated with artificial menopause -6278 Other specified menopausal and postmenopausal disorders -6279 Unspecified menopausal and postmenopausal disorder -6280 Infertility, female, associated with anovulation -6281 Infertility, female, of pituitary-hypothalamic origin -6282 Infertility, female, of tubal origin -6283 Infertility, female, of uterine origin -6284 Infertility, female, of cervical or vaginal origin -6288 Infertility, female, of other specified origin -6289 Infertility, female, of unspecified origin -6290 Hematocele, female, not elsewhere classified -6291 Hydrocele, canal of nuck -62920 Female genital mutilation status, unspecified -62921 Female genital mutilation Type I status -62922 Female genital mutilation Type II status -62923 Female genital mutilation Type III status -62929 Other female genital mutilation status -62931 Erosion of implanted vaginal mesh and other prosthetic materials to surrounding organ or tissue -62932 Exposure of implanted vaginal mesh and other prosthetic materials into vagina -62981 Recurrent pregnancy loss without current pregnancy -62989 Other specified disorders of female genital organs -6299 Unspecified disorder of female genital organs -630 Hydatidiform mole -6310 Inappropriate change in quantitative human chorionic gonadotropin (hCG) in early pregnancy -6318 Other abnormal products of conception -632 Missed abortion -63300 Abdominal pregnancy without intrauterine pregnancy -63301 Abdominal pregnancy with intrauterine pregnancy -63310 Tubal pregnancy without intrauterine pregnancy -63311 Tubal pregnancy with intrauterine pregnancy -63320 Ovarian pregnancy without intrauterine pregnancy -63321 Ovarian pregnancy with intrauterine pregnancy -63380 Other ectopic pregnancy without intrauterine pregnancy -63381 Other ectopic pregnancy with intrauterine pregnancy -63390 Unspecified ectopic pregnancy without intrauterine pregnancy -63391 Unspecified ectopic pregnancy with intrauterine pregnancy -63400 Spontaneous abortion, complicated by genital tract and pelvic infection, unspecified -63401 Spontaneous abortion, complicated by genital tract and pelvic infection, incomplete -63402 Spontaneous abortion, complicated by genital tract and pelvic infection, complete -63410 Spontaneous abortion, complicated by delayed or excessive hemorrhage, unspecified -63411 Spontaneous abortion, complicated by delayed or excessive hemorrhage, incomplete -63412 Spontaneous abortion, complicated by delayed or excessive hemorrhage, complete -63420 Spontaneous abortion, complicated by damage to pelvic organs or tissues, unspecified -63421 Spontaneous abortion, complicated by damage to pelvic organs or tissues, incomplete -63422 Spontaneous abortion, complicated by damage to pelvic organs or tissues, complete -63430 Spontaneous abortion, complicated by renal failure, unspecified -63431 Spontaneous abortion, complicated by renal failure, incomplete -63432 Spontaneous abortion, complicated by renal failure, complete -63440 Spontaneous abortion, complicated by metabolic disorder, unspecified -63441 Spontaneous abortion, complicated by metabolic disorder, incomplete -63442 Spontaneous abortion, complicated by metabolic disorder, complete -63450 Spontaneous abortion, complicated by shock, unspecified -63451 Spontaneous abortion, complicated by shock, incomplete -63452 Spontaneous abortion, complicated by shock, complete -63460 Spontaneous abortion, complicated by embolism, unspecified -63461 Spontaneous abortion, complicated by embolism, incomplete -63462 Spontaneous abortion, complicated by embolism, complete -63470 Spontaneous abortion, with other specified complications, unspecified -63471 Spontaneous abortion, with other specified complications, incomplete -63472 Spontaneous abortion, with other specified complications, complete -63480 Spontaneous abortion, with unspecified complication, unspecified -63481 Spontaneous abortion, with unspecified complication, incomplete -63482 Spontaneous abortion, with unspecified complication, complete -63490 Spontaneous abortion, without mention of complication, unspecified -63491 Spontaneous abortion, without mention of complication, incomplete -63492 Spontaneous abortion, without mention of complication, complete -63500 Legally induced abortion, complicated by genital tract and pelvic infection, unspecified -63501 Legally induced abortion, complicated by genital tract and pelvic infection, incomplete -63502 Legally induced abortion, complicated by genital tract and pelvic infection, complete -63510 Legally induced abortion, complicated by delayed or excessive hemorrhage, unspecified -63511 Legally induced abortion, complicated by delayed or excessive hemorrhage, incomplete -63512 Legally induced abortion, complicated by delayed or excessive hemorrhage, complete -63520 Legally induced abortion, complicated by damage to pelvic organs or tissues, unspecified -63521 Legally induced abortion, complicated by damage to pelvic organs or tissues, incomplete -63522 Legally induced abortion, complicated by damage to pelvic organs or tissues, complete -63530 Legally induced abortion, complicated by renal failure,unspecified -63531 Legally induced abortion, complicated by renal failure, incomplete -63532 Legally induced abortion, complicated by renal failure, complete -63540 Legally induced abortion, complicated by metabolic disorder, unspecified -63541 Legally induced abortion, complicated by metabolic disorder, incomplete -63542 Legally induced abortion, complicated by metabolic disorder, complete -63550 Legally induced abortion, complicated by shock, unspecified -63551 Legally induced abortion, complicated by shock, incomplete -63552 Legally induced abortion, complicated by shock, complete -63560 Legally induced abortion, complicated by embolism, unspecified -63561 Legally induced abortion, complicated by embolism, incomplete -63562 Legally induced abortion, complicated by embolism, complete -63570 Legally induced abortion, with other specified complications, unspecified -63571 Legally induced abortion, with other specified complications, incomplete -63572 Legally induced abortion, with other specified complications, complete -63580 Legally induced abortion, with unspecified complication, unspecified -63581 Legally induced abortion, with unspecified complication, incomplete -63582 Legally induced abortion, with unspecified complication, complete -63590 Legally induced abortion, without mention of complication, unspecified -63591 Legally induced abortion, without mention of complication, incomplete -63592 Legally induced abortion, without mention of complication, complete -63600 Illegally induced abortion, complicated by genital tract and pelvic infection, unspecified -63601 Illegally induced abortion, complicated by genital tract and pelvic infection, incomplete -63602 Illegally induced abortion, complicated by genital tract and pelvic infection, complete -63610 Illegally induced abortion, complicated by delayed or excessive hemorrhage, unspecified -63611 Illegally induced abortion, complicated by delayed or excessive hemorrhage, incomplete -63612 Illegally induced abortion, complicated by delayed or excessive hemorrhage, complete -63620 Illegally induced abortion, complicated by damage to pelvic organs or tissues, unspecified -63621 Illegally induced abortion, complicated by damage to pelvic organs or tissues, incomplete -63622 Illegally induced abortion, complicated by damage to pelvic organs or tissues, complete -63630 Illegally induced abortion, complicated by renal failure, unspecified -63631 Illegally induced abortion, complicated by renal failure, incomplete -63632 Illegally induced abortion, complicated by renal failure, complete -63640 Illegally induced abortion, complicated by metabolic disorder, unspecified -63641 Illegally induced abortion, complicated by metabolic disorder, incomplete -63642 Illegally induced abortion, complicated by metabolic disorder, complete -63650 Illegally induced abortion, complicated by shock, unspecified -63651 Illegally induced abortion, complicated by shock, incomplete -63652 Illegally induced abortion, complicated by shock, complete -63660 Illegally induced abortion, complicated by embolism, unspecified -63661 Illegally induced abortion, complicated by embolism, incomplete -63662 Illegally induced abortion, complicated by embolism, complete -63670 Illegally induced abortion, with other specified complications, unspecified -63671 Illegally induced abortion, with other specified complications, incomplete -63672 Illegally induced abortion, with other specified complications, complete -63680 Illegally induced abortion, with unspecified complication, unspecified -63681 Illegally induced abortion, with unspecified complication, incomplete -63682 Illegally induced abortion, with unspecified complication, complete -63690 Illegally induced abortion, without mention of complication, unspecified -63691 Illegally induced abortion, without mention of complication, incomplete -63692 Illegally induced abortion, without mention of complication, complete -63700 Unspecified abortion, complicated by genital tract and pelvic infection, unspecified -63701 Unspecified abortion, complicated by genital tract and pelvic infection, incomplete -63702 Unspecified abortion, complicated by genital tract and pelvic infection, complete -63710 Unspecified abortion, complicated by delayed or excessive hemorrhage, unspecified -63711 Unspecified abortion, complicated by delayed or excessive hemorrhage, incomplete -63712 Unspecified abortion, complicated by delayed or excessive hemorrhage, complete -63720 Unspecified abortion, complicated by damage to pelvic organs or tissues, unspecified -63721 Unspecified abortion, complicated by damage to pelvic organs or tissues, incomplete -63722 Unspecified abortion, complicated by damage to pelvic organs or tissues, complete -63730 Unspecified abortion, complicated by renal failure, unspecified -63731 Unspecified abortion, complicated by renal failure, incomplete -63732 Unspecified abortion, complicated by renal failure, complete -63740 Unspecified abortion, complicated by metabolic disorder, unspecified -63741 Unspecified abortion, complicated by metabolic disorder, incomplete -63742 Unspecified abortion, complicated by metabolic disorder, complete -63750 Unspecified abortion, complicated by shock, unspecified -63751 Unspecified abortion, complicated by shock, incomplete -63752 Unspecified abortion, complicated by shock, complete -63760 Unspecified abortion, complicated by embolism, unspecified -63761 Unspecified abortion, complicated by embolism, incomplete -63762 Unspecified abortion, complicated by embolism, complete -63770 Unspecified abortion, with other specified complications, unspecified -63771 Unspecified abortion, with other specified complications, incomplete -63772 Unspecified abortion, with other specified complications, complete -63780 Unspecified abortion, with unspecified complication, unspecified -63781 Unspecified abortion, with unspecified complication, incomplete -63782 Unspecified abortion, with unspecified complication, complete -63790 Unspecified abortion, without mention of complication, unspecified -63791 Unspecified abortion, without mention of complication, incomplete -63792 Unspecified abortion, without mention of complication, complete -6380 Failed attempted abortion complicated by genital tract and pelvic infection -6381 Failed attempted abortion complicated by delayed or excessive hemorrhage -6382 Failed attempted abortion complicated by damage to pelvic organs or tissues -6383 Failed attempted abortion complicated by renal failure -6384 Failed attempted abortion complicated by metabolic disorder -6385 Failed attempted abortion complicated by shock -6386 Failed attempted abortion complicated by embolism -6387 Failed attempted abortion with other specified complications -6388 Failed attempted abortion with unspecified complication -6389 Failed attempted abortion without mention of complication -6390 Genital tract and pelvic infection following abortion or ectopic and molar pregnancies -6391 Delayed or excessive hemorrhage following abortion or ectopic and molar pregnancies -6392 Damage to pelvic organs and tissues following abortion or ectopic and molar pregnancies -6393 Kidney failure following abortion and ectopic and molar pregnancies -6394 Metabolic disorders following abortion or ectopic and molar pregnancies -6395 Shock following abortion or ectopic and molar pregnancies -6396 Embolism following abortion or ectopic and molar pregnancies -6398 Other specified complications following abortion or ectopic and molar pregnancy -6399 Unspecified complication following abortion or ectopic and molar pregnancy -64000 Threatened abortion, unspecified as to episode of care or not applicable -64001 Threatened abortion, delivered, with or without mention of antepartum condition -64003 Threatened abortion, antepartum condition or complication -64080 Other specified hemorrhage in early pregnancy, unspecified as to episode of care or not applicable -64081 Other specified hemorrhage in early pregnancy, delivered, with or without mention of antepartum condition -64083 Other specified hemorrhage in early pregnancy, antepartum condition or complication -64090 Unspecified hemorrhage in early pregnancy, unspecified as to episode of care or not applicable -64091 Unspecified hemorrhage in early pregnancy, delivered, with or without mention of antepartum condition -64093 Unspecified hemorrhage in early pregnancy, antepartum condition or complication -64100 Placenta previa without hemorrhage, unspecified as to episode of care or not applicable -64101 Placenta previa without hemorrhage, delivered, with or without mention of antepartum condition -64103 Placenta previa without hemorrhage, antepartum condition or complication -64110 Hemorrhage from placenta previa, unspecified as to episode of care or not applicable -64111 Hemorrhage from placenta previa, delivered, with or without mention of antepartum condition -64113 Hemorrhage from placenta previa, antepartum condition or complication -64120 Premature separation of placenta, unspecified as to episode of care or not applicable -64121 Premature separation of placenta, delivered, with or without mention of antepartum condition -64123 Premature separation of placenta, antepartum condition or complication -64130 Antepartum hemorrhage associated with coagulation defects, unspecified as to episode of care or not applicable -64131 Antepartum hemorrhage associated with coagulation defects, delivered, with or without mention of antepartum condition -64133 Antepartum hemorrhage associated with coagulation defects, antepartum condition or complication -64180 Other antepartum hemorrhage, unspecified as to episode of care or not applicable -64181 Other antepartum hemorrhage, delivered, with or without mention of antepartum condition -64183 Other antepartum hemorrhage, antepartum condition or complication -64190 Unspecified antepartum hemorrhage, unspecified as to episode of care or not applicable -64191 Unspecified antepartum hemorrhage, delivered, with or without mention of antepartum condition -64193 Unspecified antepartum hemorrhage, antepartum condition or complication -64200 Benign essential hypertension complicating pregnancy, childbirth, and the puerperium, unspecified as to episode of care or not applicable -64201 Benign essential hypertension complicating pregnancy, childbirth, and the puerperium, delivered, with or without mention of antepartum condition -64202 Benign essential hypertension, complicating pregnancy, childbirth, and the puerperium, delivered, with mention of postpartum complication -64203 Benign essential hypertension complicating pregnancy, childbirth, and the puerperium, antepartum condition or complication -64204 Benign essential hypertension complicating pregnancy, childbirth, and the puerperium, postpartum condition or complication -64210 Hypertension secondary to renal disease, complicating pregnancy, childbirth, and the puerperium, unspecified as to episode of care or not applicable -64211 Hypertension secondary to renal disease, complicating pregnancy, childbirth, and the puerperium, delivered, with or without mention of antepartum condition -64212 Hypertension secondary to renal disease, complicating pregnancy, childbirth, and the puerperium, delivered, with mention of postpartum complication -64213 Hypertension secondary to renal disease, complicating pregnancy, childbirth, and the puerperium, antepartum condition or complication -64214 Hypertension secondary to renal disease, complicating pregnancy, childbirth, and the puerperium, postpartum condition or complication -64220 Other pre-existing hypertension complicating pregnancy, childbirth, and the puerperium, unspecified as to episode of care or not applicable -64221 Other pre-existing hypertension, complicating pregnancy, childbirth, and the puerperium, delivered, with or without mention of antepartum condition -64222 Other pre-existing hypertension, complicating pregnancy, childbirth, and the puerperium, delivered, with mention of postpartum complication -64223 Other pre-existing hypertension, complicating pregnancy, childbirth, and the puerperium, antepartum condition or complication -64224 Other pre-existing hypertension,complicating pregnancy, childbirth, and the puerperium, , postpartum condition or complication -64230 Transient hypertension of pregnancy, unspecified as to episode of care or not applicable -64231 Transient hypertension of pregnancy, delivered , with or without mention of antepartum condition -64232 Transient hypertension of pregnancy, delivered, with mention of postpartum complication -64233 Transient hypertension of pregnancy, antepartum condition or complication -64234 Transient hypertension of pregnancy, postpartum condition or complication -64240 Mild or unspecified pre-eclampsia, unspecified as to episode of care or not applicable -64241 Mild or unspecified pre-eclampsia, delivered, with or without mention of antepartum condition -64242 Mild or unspecified pre-eclampsia, delivered, with mention of postpartum complication -64243 Mild or unspecified pre-eclampsia, antepartum condition or complication -64244 Mild or unspecified pre-eclampsia, postpartum condition or complication -64250 Severe pre-eclampsia, unspecified as to episode of care or not applicable -64251 Severe pre-eclampsia, delivered, with or without mention of antepartum condition -64252 Severe pre-eclampsia, delivered, with mention of postpartum complication -64253 Severe pre-eclampsia, antepartum condition or complication -64254 Severe pre-eclampsia, postpartum condition or complication -64260 Eclampsia, unspecified as to episode of care or not applicable -64261 Eclampsia, delivered, with or without mention of antepartum condition -64262 Eclampsia, delivered, with mention of postpartum complication -64263 Eclampsia, antepartum condition or complication -64264 Eclampsia, postpartum condition or complication -64270 Pre-eclampsia or eclampsia superimposed on pre-existing hypertension, unspecified as to episode of care or not applicable -64271 Pre-eclampsia or eclampsia superimposed on pre-existing hypertension, delivered, with or without mention of antepartum condition -64272 Pre-eclampsia or eclampsia superimposed on pre-existing hypertension, delivered, with mention of postpartum complication -64273 Pre-eclampsia or eclampsia superimposed on pre-existing hypertension, antepartum condition or complication -64274 Pre-eclampsia or eclampsia superimposed on pre-existing hypertension, postpartum condition or complication -64290 Unspecified hypertension complicating pregnancy, childbirth, or the puerperium, unspecified as to episode of care or not applicable -64291 Unspecified hypertension complicating pregnancy, childbirth, or the puerperium, delivered, with or without mention of antepartum condition -64292 Unspecified hypertension complicating pregnancy, childbirth, or the puerperium, delivered, with mention of postpartum complication -64293 Unspecified hypertension complicating pregnancy, childbirth, or the puerperium, antepartum condition or complication -64294 Unspecified hypertension complicating pregnancy, childbirth, or the puerperium, postpartum condition or complication -64300 Mild hyperemesis gravidarum, unspecified as to episode of care or not applicable -64301 Mild hyperemesis gravidarum, delivered, with or without mention of antepartum condition -64303 Mild hyperemesis gravidarum, antepartum condition or complication -64310 Hyperemesis gravidarum with metabolic disturbance, unspecified as to episode of care or not applicable -64311 Hyperemesis gravidarum with metabolic disturbance, delivered, with or without mention of antepartum condition -64313 Hyperemesis gravidarum with metabolic disturbance, antepartum condition or complication -64320 Late vomiting of pregnancy, unspecified as to episode of care or not applicable -64321 Late vomiting of pregnancy, delivered, with or without mention of antepartum condition -64323 Late vomiting of pregnancy, antepartum condition or complication -64380 Other vomiting complicating pregnancy, unspecified as to episode of care or not applicable -64381 Other vomiting complicating pregnancy, delivered, with or without mention of antepartum condition -64383 Other vomiting complicating pregnancy, antepartum condition or complication -64390 Unspecified vomiting of pregnancy, unspecified as to episode of care or not applicable -64391 Unspecified vomiting of pregnancy, delivered, with or without mention of antepartum condition -64393 Unspecified vomiting of pregnancy, antepartum condition or complication -64400 Threatened premature labor, unspecified as to episode of care or not applicable -64403 Threatened premature labor, antepartum condition or complication -64410 Other threatened labor, unspecified as to episode of care or not applicable -64413 Other threatened labor, antepartum condition or complication -64420 Early onset of delivery, unspecified as to episode of care or not applicable -64421 Early onset of delivery, delivered, with or without mention of antepartum condition -64510 Post term pregnancy, unspecified as to episode of care or not applicable -64511 Post term pregnancy, delivered, with or without mention of antepartum condition -64513 Post term pregnancy, antepartum condition or complication -64520 Prolonged pregnancy, unspecified as to episode of care or not applicable -64521 Prolonged pregnancy, delivered, with or without mention of antepartum condition -64523 Prolonged pregnancy, antepartum condition or complication -64600 Papyraceous fetus, unspecified as to episode of care or not applicable -64601 Papyraceous fetus, delivered, with or without mention of antepartum condition -64603 Papyraceous fetus, antepartum condition or complication -64610 Edema or excessive weight gain in pregnancy, without mention of hypertension, unspecified as to episode of care or not applicable -64611 Edema or excessive weight gain in pregnancy, without mention of hypertension, delivered, with or without mention of antepartum complication -64612 Edema or excessive weight gain in pregnancy, without mention of hypertension, delivered, with mention of postpartum complication -64613 Edema or excessive weight gain in pregnancy, without mention of hypertension, antepartum condition or complication -64614 Edema or excessive weight gain in pregnancy, without mention of hypertension, postpartum condition or complication -64620 Unspecified renal disease in pregnancy, without mention of hypertension, unspecified as to episode of care or not applicable -64621 Unspecified renal disease in pregnancy, without mention of hypertension, delivered, with or without mention of antepartum condition -64622 Unspecified renal disease in pregnancy, without mention of hypertension, delivered, with mention of postpartum complication -64623 Unspecified renal disease in pregnancy, without mention of hypertension, antepartum condition or complication -64624 Unspecified renal disease in pregnancy, without mention of hypertension, postpartum condition or complication -64630 Recurrent pregnancy loss, unspecified as to episode of care or not applicable -64631 Recurrent pregnancy loss, delivered, with or without mention of antepartum condition -64633 Recurrent pregnancy loss, antepartum condition or complication -64640 Peripheral neuritis in pregnancy, unspecified as to episode of care or not applicable -64641 Peripheral neuritis in pregnancy, delivered, with or without mention of antepartum condition -64642 Peripheral neuritis in pregnancy, delivered, with mention of postpartum complication -64643 Peripheral neuritis in pregnancy, antepartum condition or complication -64644 Peripheral neuritis in pregnancy, postpartum condition or complication -64650 Asymptomatic bacteriuria in pregnancy, unspecified as to episode of care or not applicable -64651 Asymptomatic bacteriuria in pregnancy, delivered, with or without mention of antepartum condition -64652 Asymptomatic bacteriuria in pregnancy, delivered, with mention of postpartum complication -64653 Asymptomatic bacteriuria in pregnancy, antepartum condition or complication -64654 Asymptomatic bacteriuria in pregnancy, postpartum condition or complication -64660 Infections of genitourinary tract in pregnancy, unspecified as to episode of care or not applicable -64661 Infections of genitourinary tract in pregnancy, delivered, with or without mention of antepartum condition -64662 Infections of genitourinary tract in pregnancy, delivered, with mention of postpartum complication -64663 Infections of genitourinary tract in pregnancy, antepartum condition or complication -64664 Infections of genitourinary tract in pregnancy, postpartum condition or complication -64670 Liver and biliary tract disorders in pregnancy, unspecified as to episode of care or not applicable -64671 Liver and biliary tract disorders in pregnancy, delivered, with or without mention of antepartum condition -64673 Liver and biliary tract disorders in pregnancy, antepartum condition or complication -64680 Other specified complications of pregnancy, unspecified as to episode of care or not applicable -64681 Other specified complications of pregnancy, delivered, with or without mention of antepartum condition -64682 Other specified complications of pregnancy, delivered, with mention of postpartum complication -64683 Other specified complications of pregnancy, antepartum condition or complication -64684 Other specified complications of pregnancy, postpartum condition or complication -64690 Unspecified complication of pregnancy, unspecified as to episode of care or not applicable -64691 Unspecified complication of pregnancy, delivered, with or without mention of antepartum condition -64693 Unspecified complication of pregnancy, antepartum condition or complication -64700 Syphilis of mother, complicating pregnancy, childbirth, or the puerperium, unspecified as to episode of care or not applicable -64701 Syphilis of mother, complicating pregnancy, childbirth, or the puerperium, delivered, with or without mention of antepartum condition -64702 Syphilis of mother, complicating pregnancy, childbirth, or the puerperium, delivered, with mention of postpartum complication -64703 Syphilis of mother, complicating pregnancy, childbirth, or the puerperium, antepartum condition or complication -64704 Syphilis of mother, complicating pregnancy, childbirth, or the puerperium, postpartum condition or complication -64710 Gonorrhea of mother, complicating pregnancy, childbirth, or the puerperium, unspecified as to episode of care or not applicable -64711 Gonorrhea of mother, complicating pregnancy, childbirth, or the puerperium, delivered, with or without mention of antepartum condition -64712 Gonorrhea of mother, complicating pregnancy, childbirth, or the puerperium, delivered, with mention of postpartum complication -64713 Gonorrhea of mother, complicating pregnancy, childbirth, or the puerperium, antepartum condition or complication -64714 Gonorrhea of mother, complicating pregnancy, childbirth, or the puerperium, postpartum condition or complication -64720 Other venereal diseases of mother, complicating pregnancy, childbirth, or the puerperium, unspecified as to episode of care or not applicable -64721 Other venereal diseases of mother, complicating pregnancy, childbirth, or the puerperium, delivered, with or without mention of antepartum condition -64722 Other venereal diseases of mother, complicating pregnancy, childbirth, or the puerperium, delivered, with mention of postpartum complication -64723 Other venereal diseases of mother, complicating pregnancy, childbirth, or the puerperium, antepartum condition or complication -64724 Other venereal diseases of mother, complicating pregnancy, childbirth, or the puerperium,postpartum condition or complication -64730 Tuberculosis of mother, complicating pregnancy, childbirth, or the puerperium, unspecified as to episode of care or not applicable -64731 Tuberculosis of mother, complicating pregnancy, childbirth, or the puerperium, delivered, with or without mention of antepartum condition -64732 Tuberculosis of mother, complicating pregnancy, childbirth, or the puerperium, delivered, with mention of postpartum complication -64733 Tuberculosis of mother, complicating pregnancy, childbirth, or the puerperium, antepartum condition or complication -64734 Tuberculosis of mother, complicating pregnancy, childbirth, or the puerperium,postpartum condition or complication -64740 Malaria in the mother, unspecified as to episode of care or not applicable -64741 Malaria in the mother, delivered, with or without mention of antepartum condition -64742 Malaria in the mother, delivered, with mention of postpartum complication -64743 Malaria in the mother, antepartum condition or complication -64744 Malaria in the mother, postpartum condition or complication -64750 Rubella in the mother, unspecified as to episode of care or not applicable -64751 Rubella in the mother, delivered, with or without mention of antepartum condition -64752 Rubella in the mother, delivered, with mention of postpartum complication -64753 Rubella in the mother, antepartum condition or complication -64754 Rubella in the mother, postpartum condition or complication -64760 Other viral diseases in the mother, unspecified as to episode of care or not applicable -64761 Other viral diseases in the mother, delivered, with or without mention of antepartum condition -64762 Other viral diseases in the mother, delivered, with mention of postpartum complication -64763 Other viral diseases in the mother, antepartum condition or complication -64764 Other viral diseases in the mother, postpartum condition or complication -64780 Other specified infectious and parasitic diseases of mother, unspecified as to episode of care or not applicable -64781 Other specified infectious and parasitic diseases of mother, delivered, with or without mention of antepartum condition -64782 Other specified infectious and parasitic diseases of mother, delivered, with mention of postpartum complication -64783 Other specified infectious and parasitic diseases of mother, antepartum condition or complication -64784 Other specified infectious and parasitic diseases of mother, postpartum condition or complication -64790 Unspecified infection or infestation of mother, unspecified as to episode of care or not applicable -64791 Unspecified infection or infestation of mother, delivered, with or without mention of antepartum condition -64792 Unspecified infection or infestation of mother, delivered, with mention of postpartum complication -64793 Unspecified infection or infestation of mother, antepartum condition or complication -64794 Unspecified infection or infestation of mother, postpartum condition or complication -64800 Diabetes mellitus of mother, complicating pregnancy, childbirth, or the puerperium, unspecified as to episode of care or not applicable -64801 Diabetes mellitus of mother, complicating pregnancy, childbirth, or the puerperium, delivered, with or without mention of antepartum condition -64802 Diabetes mellitus of mother, complicating pregnancy, childbirth, or the puerperium, delivered, with mention of postpartum complication -64803 Diabetes mellitus of mother, complicating pregnancy, childbirth, or the puerperium, antepartum condition or complication -64804 Diabetes mellitus of mother, complicating pregnancy, childbirth, or the puerperium, postpartum condition or complication -64810 Thyroid dysfunction of mother, unspecified as to episode of care or not applicable -64811 Thyroid dysfunction of mother, delivered, with or without mention of antepartum condition -64812 Thyroid dysfunction of mother, delivered, with mention of postpartum complication -64813 Thyroid dysfunction of mother, antepartum condition or complication -64814 Thyroid dysfunction of mother, postpartum condition or complication -64820 Anemia of mother, unspecified as to episode of care or not applicable -64821 Anemia of mother, delivered, with or without mention of antepartum condition -64822 Anemia of mother, delivered, with mention of postpartum complication -64823 Anemia of mother, antepartum condition or complication -64824 Anemia of mother, postpartum condition or complication -64830 Drug dependence of mother, unspecified as to episode of care or not applicable -64831 Drug dependence of mother, delivered, with or without mention of antepartum condition -64832 Drug dependence of mother, delivered, with mention of postpartum complication -64833 Drug dependence of mother, antepartum condition or complication -64834 Drug dependence of mother, postpartum condition or complication -64840 Mental disorders of mother, unspecified as to episode of care or not applicable -64841 Mental disorders of mother, delivered, with or without mention of antepartum condition -64842 Mental disorders of mother, delivered, with mention of postpartum complication -64843 Mental disorders of mother, antepartum condition or complication -64844 Mental disorders of mother, postpartum condition or complication -64850 Congenital cardiovascular disorders of mother, unspecified as to episode of care or not applicable -64851 Congenital cardiovascular disorders of mother, delivered, with or without mention of antepartum condition -64852 Congenital cardiovascular disorders of mother, delivered, with mention of postpartum complication -64853 Congenital cardiovascular disorders of mother, antepartum condition or complication -64854 Congenital cardiovascular disorders of mother, postpartum condition or complication -64860 Other cardiovascular diseases of mother, unspecified as to episode of care or not applicable -64861 Other cardiovascular diseases of mother, delivered, with or without mention of antepartum condition -64862 Other cardiovascular diseases of mother, delivered, with mention of postpartum complication -64863 Other cardiovascular diseases of mother, antepartum condition or complication -64864 Other cardiovascular diseases of mother, postpartum condition or complication -64870 Bone and joint disorders of back, pelvis, and lower limbs of mother, unspecified as to episode of care or not applicable -64871 Bone and joint disorders of back, pelvis, and lower limbs of mother, delivered, with or without mention of antepartum condition -64872 Bone and joint disorders of back, pelvis, and lower limbs of mother, delivered, with mention of postpartum complication -64873 Bone and joint disorders of back, pelvis, and lower limbs of mother, antepartum condition or complication -64874 Bone and joint disorders of back, pelvis, and lower limbs of mother, postpartum condition or complication -64880 Abnormal glucose tolerance of mother, unspecified as to episode of care or not applicable -64881 Abnormal glucose tolerance of mother, delivered, with or without mention of antepartum condition -64882 Abnormal glucose tolerance of mother, delivered, with mention of postpartum complication -64883 Abnormal glucose tolerance of mother, antepartum condition or complication -64884 Abnormal glucose tolerance of mother, postpartum condition or complication -64890 Other current conditions classifiable elsewhere of mother, unspecified as to episode of care or not applicable -64891 Other current conditions classifiable elsewhere of mother, delivered, with or without mention of antepartum condition -64892 Other current conditions classifiable elsewhere of mother, delivered, with mention of postpartum complication -64893 Other current conditions classifiable elsewhere of mother, antepartum condition or complication -64894 Other current conditions classifiable elsewhere of mother, postpartum condition or complication -64900 Tobacco use disorder complicating pregnancy, childbirth, or the puerperium, unspecified as to episode of care or not applicable -64901 Tobacco use disorder complicating pregnancy, childbirth, or the puerperium, delivered, with or without mention of antepartum condition -64902 Tobacco use disorder complicating pregnancy, childbirth, or the puerperium, delivered, with mention of postpartum complication -64903 Tobacco use disorder complicating pregnancy, childbirth, or the puerperium, antepartum condition or complication -64904 Tobacco use disorder complicating pregnancy, childbirth, or the puerperium, postpartum condition or complication -64910 Obesity complicating pregnancy, childbirth, or the puerperium, unspecified as to episode of care or not applicable -64911 Obesity complicating pregnancy, childbirth, or the puerperium, delivered, with or without mention of antepartum condition -64912 Obesity complicating pregnancy, childbirth, or the puerperium, delivered, with mention of postpartum complication -64913 Obesity complicating pregnancy, childbirth, or the puerperium, antepartum condition or complication -64914 Obesity complicating pregnancy, childbirth, or the puerperium, postpartum condition or complication -64920 Bariatric surgery status complicating pregnancy, childbirth, or the puerperium, unspecified as to episode of care or not applicable -64921 Bariatric surgery status complicating pregnancy, childbirth, or the puerperium, delivered, with or without mention of antepartum condition -64922 Bariatric surgery status complicating pregnancy, childbirth, or the puerperium, delivered, with mention of postpartum complication -64923 Bariatric surgery status complicating pregnancy, childbirth, or the puerperium, antepartum condition or complication -64924 Bariatric surgery status complicating pregnancy, childbirth, or the puerperium, postpartum condition or complication -64930 Coagulation defects complicating pregnancy, childbirth, or the puerperium, unspecified as to episode of care or not applicable -64931 Coagulation defects complicating pregnancy, childbirth, or the puerperium, delivered, with or without mention of antepartum condition -64932 Coagulation defects complicating pregnancy, childbirth, or the puerperium, delivered, with mention of postpartum complication -64933 Coagulation defects complicating pregnancy, childbirth, or the puerperium, antepartum condition or complication -64934 Coagulation defects complicating pregnancy, childbirth, or the puerperium, postpartum condition or complication -64940 Epilepsy complicating pregnancy, childbirth, or the puerperium, unspecified as to episode of care or not applicable -64941 Epilepsy complicating pregnancy, childbirth, or the puerperium, delivered, with or without mention of antepartum condition -64942 Epilepsy complicating pregnancy, childbirth, or the puerperium, delivered, with mention of postpartum complication -64943 Epilepsy complicating pregnancy, childbirth, or the puerperium, antepartum condition or complication -64944 Epilepsy complicating pregnancy, childbirth, or the puerperium, postpartum condition or complication -64950 Spotting complicating pregnancy, unspecified as to episode of care or not applicable -64951 Spotting complicating pregnancy, delivered, with or without mention of antepartum condition -64953 Spotting complicating pregnancy, antepartum condition or complication -64960 Uterine size date discrepancy, unspecified as to episode of care or not applicable -64961 Uterine size date discrepancy, delivered, with or without mention of antepartum condition -64962 Uterine size date discrepancy, delivered, with mention of postpartum complication -64963 Uterine size date discrepancy, antepartum condition or complication -64964 Uterine size date discrepancy, postpartum condition or complication -64970 Cervical shortening, unspecified as to episode of care or not applicable -64971 Cervical shortening, delivered, with or without mention of antepartum condition -64973 Cervical shortening, antepartum condition or complication -64981 Onset (spontaneous) of labor after 37 completed weeks of gestation but before 39 completed weeks gestation, with delivery by (planned) cesarean section, delivered, with or without mention of antepartum condition -64982 Onset (spontaneous) of labor after 37 completed weeks of gestation but before 39 completed weeks gestation, with delivery by (planned) cesarean section, delivered, with mention of postpartum complication -650 Normal delivery -65100 Twin pregnancy, unspecified as to episode of care or not applicable -65101 Twin pregnancy, delivered, with or without mention of antepartum condition -65103 Twin pregnancy, antepartum condition or complication -65110 Triplet pregnancy, unspecified as to episode of care or not applicable -65111 Triplet pregnancy, delivered, with or without mention of antepartum condition -65113 Triplet pregnancy, antepartum condition or complication -65120 Quadruplet pregnancy, unspecified as to episode of care or not applicable -65121 Quadruplet pregnancy, delivered, with or without mention of antepartum condition -65123 Quadruplet pregnancy, antepartum condition or complication -65130 Twin pregnancy with fetal loss and retention of one fetus, unspecified as to episode of care or not applicable -65131 Twin pregnancy with fetal loss and retention of one fetus, delivered, with or without mention of antepartum condition -65133 Twin pregnancy with fetal loss and retention of one fetus, antepartum condition or complication -65140 Triplet pregnancy with fetal loss and retention of one or more fetus(es), unspecified as to episode of care or not applicable -65141 Triplet pregnancy with fetal loss and retention of one or more fetus(es), delivered, with or without mention of antepartum condition -65143 Triplet pregnancy with fetal loss and retention of one or more fetus(es), antepartum condition or complication -65150 Quadruplet pregnancy with fetal loss and retention of one or more fetus(es), unspecified as to episode of care or not applicable -65151 Quadruplet pregnancy with fetal loss and retention of one or more fetus(es), delivered, with or without mention of antepartum condition -65153 Quadruplet pregnancy with fetal loss and retention of one or more fetus(es), antepartum condition or complication -65160 Other multiple pregnancy with fetal loss and retention of one or more fetus(es), unspecified as to episode of care or not applicable -65161 Other multiple pregnancy with fetal loss and retention of one or more fetus(es), delivered, with or without mention of antepartum condition -65163 Other multiple pregnancy with fetal loss and retention of one or more fetus(es), antepartum condition or complication -65170 Multiple gestation following (elective) fetal reduction, unspecified as to episode of care or not applicable -65171 Multiple gestation following (elective) fetal reduction,delivered, with or without mention of antepartum condition -65173 Multiple gestation following (elective) fetal reduction, antepartum condition or complication -65180 Other specified multiple gestation, unspecified as to episode of care or not applicable -65181 Other specified multiple gestation, delivered, with or without mention of antepartum condition -65183 Other specified multiple gestation, antepartum condition or complication -65190 Unspecified multiple gestation, unspecified as to episode of care or not applicable -65191 Unspecified multiple gestation, delivered, with or without mention of antepartum condition -65193 Unspecified multiple gestation, antepartum condition or complication -65200 Unstable lie, unspecified as to episode of care or not applicable -65201 Unstable lie, delivered, with or without mention of antepartum condition -65203 Unstable lie, antepartum condition or complication -65210 Breech or other malpresentation successfully converted to cephalic presentation, unspecified as to episode of care or not applicable -65211 Breech or other malpresentation successfully converted to cephalic presentation, delivered, with or without mention of antepartum condition -65213 Breech or other malpresentation successfully converted to cephalic presentation, antepartum condition or complication -65220 Breech presentation without mention of version, unspecified as to episode of care or not applicable -65221 Breech presentation without mention of version, delivered, with or without mention of antepartum condition -65223 Breech presentation without mention of version, antepartum condition or complication -65230 Transverse or oblique presentation, unspecified as to episode of care or not applicable -65231 Transverse or oblique presentation, delivered, with or without mention of antepartum condition -65233 Transverse or oblique presentation, antepartum condition or complication -65240 Face or brow presentation, unspecified as to episode of care or not applicable -65241 Face or brow presentation, delivered, with or without mention of antepartum condition -65243 Face or brow presentation, antepartum condition or complication -65250 High head at term, unspecified as to episode of care or not applicable -65251 High head at term, delivered, with or without mention of antepartum condition -65253 High head at term, antepartum condition or complication -65260 Multiple gestation with malpresentation of one fetus or more, unspecified as to episode of care or not applicable -65261 Multiple gestation with malpresentation of one fetus or more, delivered, with or without mention of antepartum condition -65263 Multiple gestation with malpresentation of one fetus or more, antepartum condtion or complication -65270 Prolapsed arm of fetus, unspecified as to episode of care or not applicable -65271 Prolapsed arm of fetus, delivered, with or without mention of antepartum condition -65273 Prolapsed arm of fetus, antepartum condition or complication -65280 Other specified malposition or malpresentation, unspecified as to episode of care or not applicable -65281 Other specified malposition or malpresentation, delivered, with or without mention of antepartum condition -65283 Other specified malposition or malpresentation, antepartum condition or complication -65290 Unspecified malposition or malpresentation, unspecified as to episode of care or not applicable -65291 Unspecified malposition or malpresentation, delivered, with or without mention of antepartum condition -65293 Unspecified malposition or malpresentation, antepartum condition or complication -65300 Major abnormality of bony pelvis, not further specified, unspecified as to episode of care or not applicable -65301 Major abnormality of bony pelvis, not further specified, delivered, with or without mention of antepartum condition -65303 Major abnormality of bony pelvis, not further specified, antepartum condition or complication -65310 Generally contracted pelvis, unspecified as to episode of care or not applicable -65311 Generally contracted pelvis, delivered, with or without mention of antepartum condition -65313 Generally contracted pelvis, antepartum condition or complication -65320 Inlet contraction of pelvis, unspecified as to episode of care or not applicable -65321 Inlet contraction of pelvis, delivered, with or without mention of antepartum condition -65323 Inlet contraction of pelvis, antepartum condition or complication -65330 Outlet contraction of pelvis, unspecified as to episode of care or not applicable -65331 Outlet contraction of pelvis, delivered, with or without mention of antepartum condition -65333 Outlet contraction of pelvis, antepartum condition or complication -65340 Fetopelvic disproportion, unspecified as to episode of care or not applicable -65341 Fetopelvic disproportion, delivered, with or without mention of antepartum condition -65343 Fetopelvic disproportion, antepartum condition or complication -65350 Unusually large fetus causing disproportion, unspecified as to episode of care or not applicable -65351 Unusually large fetus causing disproportion, delivered, with or without mention of antepartum condition -65353 Unusually large fetus causing disproportion, antepartum condition or complication -65360 Hydrocephalic fetus causing disproportion, unspecified as to episode of care or not applicable -65361 Hydrocephalic fetus causing disproportion, delivered, with or without mention of antepartum condition -65363 Hydrocephalic fetus causing disproportion, antepartum condition or complication -65370 Other fetal abnormality causing disproportion, unspecified as to episode of care or not applicable -65371 Other fetal abnormality causing disproportion, delivered, with or without mention of antepartum condition -65373 Other fetal abnormality causing disproportion, antepartum condition or complication -65380 Disproportion of other origin, unspecified as to episode of care or not applicable -65381 Disproportion of other origin, delivered, with or without mention of antepartum condition -65383 Disproportion of other origin, antepartum condition or complication -65390 Unspecified disproportion, unspecified as to episode of care or not applicable -65391 Unspecified disproportion, delivered, with or without mention of antepartum condition -65393 Unspecified disproportion, antepartum condition or complication -65400 Congenital abnormalities of uterus, unspecified as to episode of care or not applicable -65401 Congenital abnormalities of uterus, delivered, with or without mention of antepartum condition -65402 Congenital abnormalities of uterus, delivered, with mention of postpartum complication -65403 Congenital abnormalities of uterus, antepartum condition or complication -65404 Congenital abnormalities of uterus, postpartum condition or complication -65410 Tumors of body of uterus, unspecified as to episode of care or not applicable -65411 Tumors of body of uterus, delivered, with or without mention of antepartum condition -65412 Tumors of body of uterus, delivered, with mention of postpartum complication -65413 Tumors of body of uterus, antepartum condition or complication -65414 Tumors of body of uterus, postpartum condition or complication -65420 Previous cesarean delivery, unspecified as to episode of care or not applicable -65421 Previous cesarean delivery, delivered, with or without mention of antepartum condition -65423 Previous cesarean delivery, antepartum condition or complication -65430 Retroverted and incarcerated gravid uterus, unspecified as to episode of care or not applicable -65431 Retroverted and incarcerated gravid uterus, delivered, with mention of antepartum condition -65432 Retroverted and incarcerated gravid uterus, delivered, with mention of postpartum complication -65433 Retroverted and incarcerated gravid uterus, antepartum condition or complication -65434 Retroverted and incarcerated gravid uterus, postpartum condition or complication -65440 Other abnormalities in shape or position of gravid uterus and of neighboring structures, unspecified as to episode of care or not applicable -65441 Other abnormalities in shape or position of gravid uterus and of neighboring structures, delivered, with or without mention of antepartum condition -65442 Other abnormalities in shape or position of gravid uterus and of neighboring structures, delivered, with mention of postpartum complication -65443 Other abnormalities in shape or position of gravid uterus and of neighboring structures, antepartum condition or complication -65444 Other abnormalities in shape or position of gravid uterus and of neighboring structures, postpartum condition or complication -65450 Cervical incompetence, unspecified as to episode of care or not applicable -65451 Cervical incompetence, delivered, with or without mention of antepartum condition -65452 Cervical incompetence, delivered, with mention of postpartum complication -65453 Cervical incompetence, antepartum condition or complication -65454 Cervical incompetence, postpartum condition or complication -65460 Other congenital or acquired abnormality of cervix, unspecified as to episode of care or not applicable -65461 Other congenital or acquired abnormality of cervix, delivered, with or without mention of antepartum condition -65462 Other congenital or acquired abnormality of cervix, delivered, with mention of postpartum complication -65463 Other congenital or acquired abnormality of cervix, antepartum condition or complication -65464 Other congenital or acquired abnormality of cervix, postpartum condition or complication -65470 Congenital or acquired abnormality of vagina, unspecified as to episode of care or not applicable -65471 Congenital or acquired abnormality of vagina, delivered, with or without mention of antepartum condition -65472 Congenital or acquired abnormality of vagina, delivered, with mention of postpartum complication -65473 Congenital or acquired abnormality of vagina, antepartum condition or complication -65474 Congenital or acquired abnormality of vagina, postpartum condition or complication -65480 Congenital or acquired abnormality of vulva, unspecified as to episode of care or not applicable -65481 Congenital or acquired abnormality of vulva, delivered, with or without mention of antepartum condition -65482 Congenital or acquired abnormality of vulva, delivered, with mention of postpartum complication -65483 Congenital or acquired abnormality of vulva, antepartum condition or complication -65484 Congenital or acquired abnormality of vulva, postpartum condition or complication -65490 Other and unspecified abnormality of organs and soft tissues of pelvis, unspecified as to episode of care or not applicable -65491 Other and unspecified abnormality of organs and soft tissues of pelvis, delivered, with or without mention of antepartum condition -65492 Other and unspecified abnormality of organs and soft tissues of pelvis, delivered, with mention of postpartum complication -65493 Other and unspecified abnormality of organs and soft tissues of pelvis, antepartum condition or complication -65494 Other and unspecified abnormality of organs and soft tissues of pelvis, postpartum condition or complication -65500 Central nervous system malformation in fetus, unspecified as to episode of care or not applicable -65501 Central nervous system malformation in fetus, delivered, with or without mention of antepartum condition -65503 Central nervous system malformation in fetus, antepartum condition or complication -65510 Chromosomal abnormality in fetus, affecting management of mother, unspecified as to episode of care or not applicable -65511 Chromosomal abnormality in fetus, affecting management of mother, delivered, with or without mention of antepartum condition -65513 Chromosomal abnormality in fetus, affecting management of mother, antepartum condition or complication -65520 Hereditary disease in family possibly affecting fetus, affecting management of mother, unspecified as to episode of care or not applicable -65521 Hereditary disease in family possibly affecting fetus, affecting management of mother, delivered, with or without mention of antepartum condition -65523 Hereditary disease in family possibly affecting fetus, affecting management of mother, antepartum condition or complication -65530 Suspected damage to fetus from viral disease in the mother, affecting management of mother, unspecified as to episode of care or not applicable -65531 Suspected damage to fetus from viral disease in the mother, affecting management of mother, delivered, with or without mention of antepartum condition -65533 Suspected damage to fetus from viral disease in the mother, affecting management of mother, antepartum condition or complication -65540 Suspected damage to fetus from other disease in the mother, affecting management of mother, unspecified as to episode of care or not applicable -65541 Suspected damage to fetus from other disease in the mother, affecting management of mother, delivered, with or without mention of antepartum condition -65543 Suspected damage to fetus from other disease in the mother, affecting management of mother, antepartum condition or complication -65550 Suspected damage to fetus from drugs, affecting management of mother, unspecified as to episode of care or not applicable -65551 Suspected damage to fetus from drugs, affecting management of mother, delivered, with or without mention of antepartum condition -65553 Suspected damage to fetus from drugs, affecting management of mother, antepartum condition or complication -65560 Suspected damage to fetus from radiation, affecting management of mother, unspecified as to episode of care or not applicable -65561 Suspected damage to fetus from radiation, affecting management of mother, delivered, -65563 Suspected damage to fetus from radiation, affecting management of mother, antepartum condition or complication -65570 Decreased fetal movements, affecting management of mother, unspecified as to episode of care -65571 Decreased fetal movements, affecting management of mother, delivered, with or without mention of antepartum condition -65573 Decreased fetal movements, affecting management of mother, antepartum condition or complication -65580 Other known or suspected fetal abnormality, not elsewhere classified, affecting management of mother, unspecified as to episode of care or not applicable -65581 Other known or suspected fetal abnormality, not elsewhere classified, affecting management of mother, delivered, with or without mention of antepartum condition -65583 Other known or suspected fetal abnormality, not elsewhere classified, affecting management of mother, antepartum condition or complication -65590 Unspecified suspected fetal abnormality, affecting management of mother, unspecified as to episode of care or not applicable -65591 Unspecified suspected fetal abnormality, affecting management of mother, delivered, with or without mention of antepartum condition -65593 Unspecified suspected fetal abnormality, affecting management of mother, antepartum condition or complication -65600 Fetal-maternal hemorrhage, unspecified as to episode of care or not applicable -65601 Fetal-maternal hemorrhage, delivered, with or without mention of antepartum condition -65603 Fetal-maternal hemorrhage, antepartum condition or complication -65610 Rhesus isoimmunization, unspecified as to episode of care or not applicable -65611 Rhesus isoimmunization, delivered, with or without mention of antepartum condition -65613 Rhesus isoimmunization, antepartum condition or complication -65620 Isoimmunization from other and unspecified blood-group incompatibility, unspecified as to episode of care or not applicable -65621 Isoimmunization from other and unspecified blood-group incompatibility, delivered, with or without mention of antepartum condition -65623 Isoimmunization from other and unspecified blood-group incompatibility, antepartum condition or complication -65630 Fetal distress, affecting management of mother, unspecified as to episode of care or not applicable -65631 Fetal distress, affecting management of mother, delivered, with or without mention of antepartum condition -65633 Fetal distress, affecting management of mother, antepartum condition or complication -65640 Intrauterine death, affecting management of mother, unspecified as to episode of care or not applicable -65641 Intrauterine death, affecting management of mother, delivered, with or without mention of antepartum condition -65643 Intrauterine death, affecting management of mother, antepartum condition or complication -65650 Poor fetal growth, affecting management of mother, unspecified as to episode of care or not applicable -65651 Poor fetal growth, affecting management of mother, delivered, with or without mention of antepartum condition -65653 Poor fetal growth, affecting management of mother, antepartum condition or complication -65660 Excessive fetal growth, affecting management of mother, unspecified as to episode of care or not applicable -65661 Excessive fetal growth, affecting management of mother, delivered, with or without mention of antepartum condition -65663 Excessive fetal growth, affecting management of mother, antepartum condition or complication -65670 Other placental conditions, affecting management of mother, unspecified as to episode of care or not applicable -65671 Other placental conditions, affecting management of mother, delivered, with or without mention of antepartum condition -65673 Other placental conditions, affecting management of mother, antepartum condition or complication -65680 Other specified fetal and placental problems, affecting management of mother, unspecified as to episode of care or not applicable -65681 Other specified fetal and placental problems, affecting management of mother, delivered, with or without mention of antepartum condition -65683 Other specified fetal and placental problems, affecting management of mother, antepartum condition or complication -65690 Unspecified fetal and placental problem, affecting management of mother, unspecified as to episode of care or not applicable -65691 Unspecified fetal and placental problem, affecting management of mother, delivered, with or without mention of antepartum condition -65693 Unspecified fetal and placental problem, affecting management of mother, antepartum condition or complication -65700 Polyhydramnios, unspecified as to episode of care or not applicable -65701 Polyhydramnios, delivered, with or without mention of antepartum condition -65703 Polyhydramnios, antepartum condition or complication -65800 Oligohydramnios, unspecified as to episode of care or not applicable -65801 Oligohydramnios, delivered, with or without mention of antepartum condition -65803 Oligohydramnios, antepartum condition or complication -65810 Premature rupture of membranes, unspecified as to episode of care or not applicable -65811 Premature rupture of membranes, delivered, with or without mention of antepartum condition -65813 Premature rupture of membranes, antepartum condition or complication -65820 Delayed delivery after spontaneous or unspecified rupture of membranes, unspecified as to episode of care or not applicable -65821 Delayed delivery after spontaneous or unspecified rupture of membranes, delivered, with or without mention of antepartum condition -65823 Delayed delivery after spontaneous or unspecified rupture of membranes, antepartum condition or complication -65830 Delayed delivery after artificial rupture of membranes, unspecified as to episode of care or not applicable -65831 Delayed delivery after artificial rupture of membranes, delivered, with or without mention of antepartum condition -65833 Delayed delivery after artificial rupture of membranes, antepartum condition or complication -65840 Infection of amniotic cavity, unspecified as to episode of care or not applicable -65841 Infection of amniotic cavity, delivered, with or without mention of antepartum condition -65843 Infection of amniotic cavity, antepartum condition or complication -65880 Other problems associated with amniotic cavity and membranes, unspecified as to episode of care or not applicable -65881 Other problems associated with amniotic cavity and membranes, delivered, with or without mention of antepartum condition -65883 Other problems associated with amniotic cavity and membranes, antepartum -65890 Unspecified problem associated with amniotic cavity and membranes, unspecified as to episode of care or not applicable -65891 Unspecified problem associated with amniotic cavity and membranes, delivered, with or without mention of antepartum condition -65893 Unspecified problem associated with amniotic cavity and membranes, antepartum condition or complication -65900 Failed mechanical induction of labor, unspecified as to episode of care or not applicable -65901 Failed mechanical induction of labor, delivered, with or without mention of antepartum condition -65903 Failed mechanical induction of labor, antepartum condition or complication -65910 Failed medical or unspecified induction of labor, unspecified as to episode of care or not applicable -65911 Failed medical or unspecified induction of labor, delivered, with or without mention of antepartum condition -65913 Failed medical or unspecified induction of labor, antepartum condition or complication -65920 Maternal pyrexia during labor, unspecified, unspecified as to episode of care or not applicable -65921 Maternal pyrexia during labor, unspecified, delivered, with or without mention of antepartum condition -65923 Maternal pyrexia during labor, unspecified, antepartum condition or complication -65930 Generalized infection during labor, unspecified as to episode of care or not applicable -65931 Generalized infection during labor, delivered, with or without mention of antepartum condition -65933 Generalized infection during labor, antepartum condition or complication -65940 Grand multiparity, unspecified as to episode of care or not applicable -65941 Grand multiparity, delivered, with or without mention of antepartum condition -65943 Grand multiparity, antepartum condition or complication -65950 Elderly primigravida, unspecified as to episode of care or not applicable -65951 Elderly primigravida, delivered, with or without mention of antepartum condition -65953 Elderly primigravida, antepartum condition or complication -65960 Elderly multigravida, unspecified as to episode of care or not applicable -65961 Elderly multigravida, delivered with or without mention of antepartum condition -65963 Elderly multigravida, antepartum condition or complication -65970 Abnormality in fetal heart rate or rhythm, unspecified as to episode of care or not applicable -65971 Abnormality in fetal heart rate or rhythm, delivered, with or without mention of antepartum condition -65973 Abnormality in fetal heart rate or rhythm, antepartum condition or complication -65980 Other specified indications for care or intervention related to labor and delivery, unspecified as to episode of care or not applicable -65981 Other specified indications for care or intervention related to labor and delivery, delivered, with or without mention of antepartum condition -65983 Other specified indications for care or intervention related to labor and delivery, antepartum condition or complication -65990 Unspecified indication for care or intervention related to labor and delivery, unspecified as to episode of care or not applicable -65991 Unspecified indication for care or intervention related to labor and delivery, delivered, with or without mention of antepartum condition -65993 Unspecified indication for care or intervention related to labor and delivery, antepartum condition or complication -66000 Obstruction caused by malposition of fetus at onset of labor, unspecified as to episode of care or not applicable -66001 Obstruction caused by malposition of fetus at onset of labor, delivered, with or without mention of antepartum condition -66003 Obstruction caused by malposition of fetus at onset of labor, antepartum condition or complication -66010 Obstruction by bony pelvis during labor, unspecified as to episode of care or not applicable -66011 Obstruction by bony pelvis during labor, delivered, with or without mention of antepartum condition -66013 Obstruction by bony pelvis during labor, antepartum condition or complication -66020 Obstruction by abnormal pelvic soft tissues during labor, unspecified as to episode of care or not applicable -66021 Obstruction by abnormal pelvic soft tissues during labor, delivered, with or without mention of antepartum condition -66023 Obstruction by abnormal pelvic soft tissues during labor, antepartum condition or complication -66030 Deep transverse arrest and persistent occipitoposterior position, unspecified as to episode of care or not applicable -66031 Deep transverse arrest and persistent occipitoposterior position, delivered, with or without mention of antepartum condition -66033 Deep transverse arrest and persistent occipitoposterior position, antepartum condition or complication -66040 Shoulder (girdle) dystocia, unspecified as to episode of care or not applicable -66041 Shoulder (girdle) dystocia, delivered, with or without mention of antepartum condition -66043 Shoulder (girdle) dystocia, antepartum condition or complication -66050 Locked twins, unspecified as to episode of care or not applicable -66051 Locked twins, delivered, with or without mention of antepartum condition -66053 Locked twins, antepartum condition or complication -66060 Unspecified failed trial of labor, unspecified as to episode of care or not applicable -66061 Unspecified failed trial of labor, delivered, with or without mention of antepartum condition -66063 Unspecified failed trial of labor, antepartum condition or complication -66070 Failed forceps or vacuum extractor, unspecified, unspecified as to episode of care or not applicable -66071 Failed forceps or vacuum extractor, unspecified, delivered, with or without mention of antepartum condition -66073 Failed forceps or vacuum extractor, unspecified, antepartum condition or complication -66080 Other causes of obstructed labor, unspecified as to episode of care or not applicable -66081 Other causes of obstructed labor, delivered, with or without mention of antepartum condition -66083 Other causes of obstructed labor, antepartum condition or complication -66090 Unspecified obstructed labor, unspecified as to episode of care or not applicable -66091 Unspecified obstructed labor, delivered, with or without mention of antepartum condition -66093 Unspecified obstructed labor, antepartum condition or complication -66100 Primary uterine inertia, unspecified as to episode of care or not applicable -66101 Primary uterine inertia, delivered, with or without mention of antepartum condition -66103 Primary uterine inertia, antepartum condition or complication -66110 Secondary uterine inertia, unspecified as to episode of care or not applicable -66111 Secondary uterine inertia, delivered, with or without mention of antepartum condition -66113 Secondary uterine inertia, antepartum condition or complication -66120 Other and unspecified uterine inertia, unspecified as to episode of care or not applicable -66121 Other and unspecified uterine inertia, delivered, with or without mention of antepartum condition -66123 Other and unspecified uterine inertia, antepartum condition or complication -66130 Precipitate labor, unspecified as to episode of care or not applicable -66131 Precipitate labor, delivered, with or without mention of antepartum condition -66133 Precipitate labor, antepartum condition or complication -66140 Hypertonic, incoordinate, or prolonged uterine contractions, unspecified as to episode of care or not applicable -66141 Hypertonic, incoordinate, or prolonged uterine contractions, delivered, with or without mention of antepartum condition -66143 Hypertonic, incoordinate, or prolonged uterine contractions, antepartum condition or complication -66190 Unspecified abnormality of labor, unspecified as to episode of care or not applicable -66191 Unspecified abnormality of labor, delivered, with or without mention of antepartum condition -66193 Unspecified abnormality of labor, antepartum condition or complication -66200 Prolonged first stage of labor, unspecified as to episode of care or not applicable -66201 Prolonged first stage of labor, delivered, with or without mention of antepartum condition -66203 Prolonged first stage of labor, antepartum condition or complication -66210 Unspecified prolonged labor, unspecified as to episode of care or not applicable -66211 Unspecified prolonged labor, delivered, with or without mention of antepartum condition -66213 Unspecified prolonged labor, antepartum condition or complication -66220 Prolonged second stage of labor, unspecified as to episode of care or not applicable -66221 Prolonged second stage of labor, delivered, with or without mention of antepartum condition -66223 Prolonged second stage of labor, antepartum condition or complication -66230 Delayed delivery of second twin, triplet, etc., unspecified as to episode of care or not applicable -66231 Delayed delivery of second twin, triplet, etc., delivered, with or without mention of antepartum condition -66233 Delayed delivery of second twin, triplet, etc., antepartum condition or complication -66300 Prolapse of cord complicating labor and delivery, unspecified as to episode of care or not applicable -66301 Prolapse of cord complicating labor and delivery, delivered, with or without mention of antepartum condition -66303 Prolapse of cord complicating labor and delivery, antepartum condition or complication -66310 Cord around neck with compression, complicating labor and delivery, unspecified as to episode of care or not applicable -66311 Cord around neck, with compression, complicating labor and delivery, delivered, with or without mention of antepartum condition -66313 Cord around neck, with compression, complicating labor and delivery, antepartum condition or complication -66320 Other and unspecified cord entanglement, with compression, complicating labor and delivery, unspecified as to episode of care or not applicable -66321 Other and unspecified cord entanglement, with compression, complicating labor and delivery, delivered, with or without mention of antepartum condition -66323 Other and unspecified cord entanglement, with compression, complicating labor and delivery, antepartum condition or complication -66330 Other and unspecified cord entanglement, without mention of compression, complicating labor and delivery, unspecified as to episode of care or not applicable -66331 Other and unspecified cord entanglement, without mention of compression, complicating labor and delivery, delivered, with or without mention of antepartum condition -66333 Other and unspecified cord entanglement, without mention of compression, complicating labor and delivery, antepartum condition or complication -66340 Short cord complicating labor and delivery, unspecified as to episode of care or not applicable -66341 Short cord complicating labor and delivery, delivered, with or without mention of antepartum condition -66343 Short cord complicating labor and delivery, antepartum condition or complication -66350 Vasa previa complicating labor and delivery, unspecified as to episode of care or not applicable -66351 Vasa previa complicating labor and delivery, delivered, with or without mention of antepartum condition -66353 Vasa previa complicating labor and delivery, antepartum condition or complication -66360 Vascular lesions of cord complicating labor and delivery, unspecified as to episode of care or not applicable -66361 Vascular lesions of cord complicating labor and delivery, delivered, with or without mention of antepartum condition -66363 Vascular lesions of cord complicating labor and delivery, antepartum condition or complication -66380 Other umbilical cord complications complicating labor and delivery, unspecified as to episode of care or not applicable -66381 Other umbilical cord complications complicating labor and delivery, delivered, with or without mention of antepartum condition -66383 Other umbilical cord complications complicating labor and delivery, antepartum condition or complication -66390 Unspecified umbilical cord complication complicating labor and delivery, unspecified as to episode of care or not applicable -66391 Unspecified umbilical cord complication complicating labor and delivery, delivered, with or without mention of antepartum condition -66393 Unspecified umbilical cord complication complicating labor and delivery, antepartum condition or complication -66400 First-degree perineal laceration, unspecified as to episode of care or not applicable -66401 First-degree perineal laceration, delivered, with or without mention of antepartum condition -66404 First-degree perineal laceration, postpartum condition or complication -66410 Second-degree perineal laceration, unspecified as to episode of care or not applicable -66411 Second-degree perineal laceration, delivered, with or without mention of antepartum condition -66414 Second-degree perineal laceration, postpartum condition or complication -66420 Third-degree perineal laceration, unspecified as to episode of care or not applicable -66421 Third-degree perineal laceration, delivered, with or without mention of antepartum condition -66424 Third-degree perineal laceration, postpartum condition or complication -66430 Fourth-degree perineal laceration, unspecified as to episode of care or not applicable -66431 Fourth-degree perineal laceration, delivered, with or without mention of antepartum condition -66434 Fourth-degree perineal laceration, postpartum condition or complication -66440 Unspecified perineal laceration, unspecified as to episode of care or not applicable -66441 Unspecified perineal laceration, delivered, with or without mention of antepartum condition -66444 Unspecified perineal laceration, postpartum condition or complication -66450 Vulvar and perineal hematoma, unspecified as to episode of care or not applicable -66451 Vulvar and perineal hematoma, delivered, with or without mention of antepartum condition -66454 Vulvar and perineal hematoma, postpartum condition or complication -66460 Anal sphincter tear complicating delivery, not associated with third-degree perineal laceration, unspecified as to episode of care or not applicable -66461 Anal sphincter tear complicating delivery, not associated with third-degree perineal laceration, delivered, with or without mention of antepartum condition -66464 Anal sphincter tear complicating delivery, not associated with third-degree perineal laceration, postpartum condition or complication -66480 Other specified trauma to perineum and vulva, unspecified as to episode of care or not applicable -66481 Other specified trauma to perineum and vulva, delivered, with or without mention of antepartum condition -66484 Other specified trauma to perineum and vulva, postpartum condition or complication -66490 Unspecified trauma to perineum and vulva, unspecified as to episode of care or not applicable -66491 Unspecified trauma to perineum and vulva, delivered, with or without mention of antepartum condition -66494 Unspecified trauma to perineum and vulva, postpartum condition or complication -66500 Rupture of uterus before onset of labor, unspecified as to episode of care or not applicable -66501 Rupture of uterus before onset of labor, delivered, with or without mention of antepartum condition -66503 Rupture of uterus before onset of labor, antepartum condition or complication -66510 Rupture of uterus during labor, unspecified as to episode of care or not applicable -66511 Rupture of uterus during labor, delivered, with or without mention of antepartum condition -66520 Inversion of uterus, unspecified as to episode of care or not applicable -66522 Inversion of uterus, delivered, with mention of postpartum complication -66524 Inversion of uterus, postpartum condition or complication -66530 Laceration of cervix, unspecified as to episode of care or not applicable -66531 Laceration of cervix, delivered, with or without mention of antepartum condition -66534 Laceration of cervix, postpartum condition or complication -66540 High vaginal laceration, unspecified as to episode of care or not applicable -66541 High vaginal laceration, delivered, with or without mention of antepartum condition -66544 High vaginal laceration, postpartum condition or complication -66550 Other injury to pelvic organs, unspecified as to episode of care or not applicable -66551 Other injury to pelvic organs, delivered, with or without mention of antepartum condition -66554 Other injury to pelvic organs, postpartum condition or complication -66560 Damage to pelvic joints and ligaments, unspecified as to episode of care or not applicable -66561 Damage to pelvic joints and ligaments, delivered, with or without mention of antepartum condition -66564 Damage to pelvic joints and ligaments, postpartum condition or complication -66570 Pelvic hematoma, unspecified as to episode of care or not applicable -66571 Pelvic hematoma, delivered, with or without mention of antepartum condition -66572 Pelvic hematoma, delivered with mention of postpartum complication -66574 Pelvic hematoma, postpartum condition or complication -66580 Other specified obstetrical trauma, unspecified as to episode of care or not applicable -66581 Other specified obstetrical trauma, delivered, with or without mention of antepartum condition -66582 Other specified obstetrical trauma, delivered, with mention of postpartum complication -66583 Other specified obstetrical trauma, antepartum condition or complication -66584 Other specified obstetrical trauma, postpartum condition or complication -66590 Unspecified obstetrical trauma, unspecified as to episode of care or not applicable -66591 Unspecified obstetrical trauma, delivered, with or without mention of antepartum condition -66592 Unspecified obstetrical trauma, delivered, with mention of postpartum complication -66593 Unspecified obstetrical trauma, antepartum condition or complication -66594 Unspecified obstetrical trauma, postpartum condition or complication -66600 Third-stage postpartum hemorrhage, unspecified as to episode of care or not applicable -66602 Third-stage postpartum hemorrhage, delivered, with mention of postpartum complication -66604 Third-stage postpartum hemorrhage, postpartum condition or complication -66610 Other immediate postpartum hemorrhage, unspecified as to episode of care or not applicable -66612 Other immediate postpartum hemorrhage, delivered, with mention of postpartum complication -66614 Other immediate postpartum hemorrhage, postpartum condition or complication -66620 Delayed and secondary postpartum hemorrhage, unspecified as to episode of care or not applicable -66622 Delayed and secondary postpartum hemorrhage, delivered, with mention of postpartum complication -66624 Delayed and secondary postpartum hemorrhage, postpartum condition or complication -66630 Postpartum coagulation defects, unspecified as to episode of care or not applicable -66632 Postpartum coagulation defects, delivered, with mention of postpartum complication -66634 Postpartum coagulation defects, postpartum condition or complication -66700 Retained placenta without hemorrhage, unspecified as to episode of care or not applicable -66702 Retained placenta without hemorrhage, delivered, with mention of postpartum complication -66704 Retained placenta without hemorrhage, postpartum condition or complication -66710 Retained portions of placenta or membranes, without hemorrhage, unspecified as to episode of care or not applicable -66712 Retained portions of placenta or membranes, without hemorrhage, delivered, with mention of postpartum complication -66714 Retained portions of placenta or membranes, without hemorrhage, postpartum condition or complication -66800 Pulmonary complications of anesthesia or other sedation in labor and delivery, unspecified as to episode of care or not applicable -66801 Pulmonary complications of anesthesia or other sedation in labor and delivery, delivered, with or without mention of antepartum condition -66802 Pulmonary complications of anesthesia or other sedation in labor and delivery, delivered, with mention of postpartum complication -66803 Pulmonary complications of anesthesia or other sedation in labor and delivery, antepartum condition or complication -66804 Pulmonary complications of anesthesia or other sedation in labor and delivery, postpartum condition or complication -66810 Cardiac complications of anesthesia or other sedation in labor and delivery, unspecified as to episode of care or not applicable -66811 Cardiac complications of anesthesia or other sedation in labor and delivery, delivered, with or without mention of antepartum condition -66812 Cardiac complications of anesthesia or other sedation in labor and delivery, delivered, with mention of postpartum complication -66813 Cardiac complications of anesthesia or other sedation in labor and delivery, antepartum condition or complication -66814 Cardiac complications of anesthesia or other sedation in labor and delivery, postpartum condition or complication -66820 Central nervous system complications of anesthesia or other sedation in labor and delivery, unspecified as to episode of care or not applicable -66821 Central nervous system complications of anesthesia or other sedation in labor and delivery, delivered, with or without mention of antepartum condition -66822 Central nervous system complications of anesthesia or other sedation in labor and delivery, delivered, with mention of postpartum complication -66823 Central nervous system complications of anesthesia or other sedation in labor and delivery, antepartum condition or complication -66824 Central nervous system complications of anesthesia or other sedation in labor and delivery, postpartum condition or complication -66880 Other complications of anesthesia or other sedation in labor and delivery, unspecified as to episode of care or not applicable -66881 Other complications of anesthesia or other sedation in labor and delivery, delivered, with or without mention of antepartum condition -66882 Other complications of anesthesia or other sedation in labor and delivery, delivered, with mention of postpartum complication -66883 Other complications of anesthesia or other sedation in labor and delivery, antepartum condition or complication -66884 Other complications of anesthesia or other sedation in labor and delivery, postpartum condition or complication -66890 Unspecified complication of anesthesia and other sedation in labor and delivery, unspecified as to episode of care or not applicable -66891 Unspecified complication of anesthesia and other sedation in labor and delivery, delivered, with or without mention of antepartum condition -66892 Unspecified complication of anesthesia and other sedation in labor and delivery, delivered, with mention of postpartum complication -66893 Unspecified complication of anesthesia and other sedation in labor and delivery, antepartum condition or complication -66894 Unspecified complication of anesthesia and other sedation in labor and delivery, postpartum condition or complication -66900 Maternal distress complicating labor and delivery, unspecified as to episode of care or not applicable -66901 Maternal distress complicating labor and delivery, delivered, with or without mention of antepartum condition -66902 Maternal distress complicating labor and delivery, delivered, with mention of postpartum complication -66903 Maternal distress complicating labor and delivery, antepartum condition or complication -66904 Maternal distress complicating labor and delivery, postpartum condition or complication -66910 Shock during or following labor and delivery, unspecified as to episode of care or not applicable -66911 Shock during or following labor and delivery, delivered, with or without mention of antepartum condition -66912 Shock during or following labor and delivery, delivered, with mention of postpartum complication -66913 Shock during or following labor and delivery, antepartum condition or complication -66914 Shock during or following labor and delivery, postpartum condition or complication -66920 Maternal hypotension syndrome, unspecified as to episode of care or not applicable -66921 Maternal hypotension syndrome, delivered, with or without mention of antepartum condition -66922 Maternal hypotension syndrome, delivered, with mention of postpartum complication -66923 Maternal hypotension syndrome, antepartum condition or complication -66924 Maternal hypotension syndrome, postpartum condition or complication -66930 Acute kidney failure following labor and delivery, unspecified as to episode of care or not applicable -66932 Acute kidney failure following labor and delivery, delivered, with mention of postpartum complication -66934 Acute kidney failure following labor and delivery, postpartum condition or complication -66940 Other complications of obstetrical surgery and procedures, unspecified as to episode of care or not applicable -66941 Other complications of obstetrical surgery and procedures, delivered, with or without mention of antepartum condition -66942 Other complications of obstetrical surgery and procedures, delivered, with mention of postpartum complication -66943 Other complications of obstetrical surgery and procedures, antepartum condition or complication -66944 Other complications of obstetrical surgery and procedures, postpartum condition or complication -66950 Forceps or vacuum extractor delivery without mention of indication, unspecified as to episode of care or not applicable -66951 Forceps or vacuum extractor delivery without mention of indication, delivered, with or without mention of antepartum condition -66960 Breech extraction, without mention of indication, unspecified as to episode of care or not applicable -66961 Breech extraction, without mention of indication, delivered, with or without mention of antepartum condition -66970 Cesarean delivery, without mention of indication, unspecified as to episode of care or not applicable -66971 Cesarean delivery, without mention of indication, delivered, with or without mention of antepartum condition -66980 Other complications of labor and delivery, unspecified as to episode of care or not applicable -66981 Other complications of labor and delivery, delivered, with or without mention of antepartum condition -66982 Other complications of labor and delivery, delivered, with mention of postpartum complication -66983 Other complications of labor and delivery, antepartum condition or complication -66984 Other complications of labor and delivery, postpartum condition or complication -66990 Unspecified complication of labor and delivery, unspecified as to episode of care or not applicable -66991 Unspecified complication of labor and delivery, delivered, with or without mention of antepartum condition -66992 Unspecified complication of labor and delivery, delivered, with mention of postpartum complication -66993 Unspecified complication of labor and delivery, antepartum condition or complication -66994 Unspecified complication of labor and delivery, postpartum condition or complication -67000 Major puerperal infection, unspecified as to episode of care or not applicable -67002 Major puerperal infection, delivered, with mention of postpartum complication -67004 Major puerperal infection, postpartum condition or complication -67010 Puerperal endometritis, unspecified as to episode of care or not applicable -67012 Puerperal endometritis, delivered, with mention of postpartum complication -67014 Puerperal endometritis, postpartum condition or complication -67020 Puerperal sepsis, unspecified as to episode of care or not applicable -67022 Puerperal sepsis, delivered, with mention of postpartum complication -67024 Puerperal sepsis, postpartum condition or complication -67030 Puerperal septic thrombophlebitis, unspecified as to episode of care or not applicable -67032 Puerperal septic thrombophlebitis, delivered, with mention of postpartum complication -67034 Puerperal septic thrombophlebitis, postpartum condition or complication -67080 Other major puerperal infection, unspecified as to episode of care or not applicable -67082 Other major puerperal infection, delivered, with mention of postpartum complication -67084 Other major puerperal infection, postpartum condition or complication -67100 Varicose veins of legs complicating pregnancy and the puerperium, unspecified as to episode of care or not applicable -67101 Varicose veins of legs complicating pregnancy and the puerperium, delivered, with or without mention of antepartum condition -67102 Varicose veins of legs complicating pregnancy and the puerperium, delivered, with mention of postpartum complication -67103 Varicose veins of legs complicating pregnancy and the puerperium, antepartum condition or complication -67104 Varicose veins of legs complicating pregnancy and the puerperium, postpartum condition or complication -67110 Varicose veins of vulva and perineum complicating pregnancy and the puerperium, unspecified as to episode of care or not applicable -67111 Varicose veins of vulva and perineum complicating pregnancy and the puerperium, delivered, with or without mention of antepartum condition -67112 Varicose veins of vulva and perineum complicating pregnancy and the puerperium, delivered, with mention of postpartum complication -67113 Varicose veins of vulva and perineum complicating pregnancy and the puerperium, antepartum condition or complication -67114 Varicose veins of vulva and perineum complicating pregnancy and the puerperium, postpartum condition or complication -67120 Superficial thrombophlebitis complicating pregnancy and the puerperium, unspecified as to episode of care or not applicable -67121 Superficial thrombophlebitis complicating pregnancy and the puerperium, delivered, with or without mention of antepartum condition -67122 Superficial thrombophlebitis complicating pregnancy and the puerperium, delivered, with mention of postpartum complication -67123 Superficial thrombophlebitis complicating pregnancy and the puerperium, antepartum condition or complication -67124 Superficial thrombophlebitis complicating pregnancy and the puerperium, postpartum condition or complication -67130 Deep phlebothrombosis, antepartum, unspecified as to episode of care or not applicable -67131 Deep phlebothrombosis, antepartum, delivered, with or without mention of antepartum condition -67133 Deep phlebothrombosis, antepartum, antepartum condition or complication -67140 Deep phlebothrombosis, postpartum, unspecified as to episode of care or not applicable -67142 Deep phlebothrombosis, postpartum, delivered, with mention of postpartum complication -67144 Deep phlebothrombosis, postpartum, postpartum condition or complication -67150 Other phlebitis and thrombosis complicating pregnancy and the puerperium, unspecified as to episode of care or not applicable -67151 Other phlebitis and thrombosis complicating pregnancy and the puerperium, delivered, with or without mention of antepartum condition -67152 Other phlebitis and thrombosis complicating pregnancy and the puerperium, delivered, with mention of postpartum complication -67153 Other phlebitis and thrombosis complicating pregnancy and the puerperium, antepartum condition or complication -67154 Other phlebitis and thrombosis complicating pregnancy and the puerperium, postpartum condition or complication -67180 Other venous complications of pregnancy and the puerperium, unspecified as to episode of care or not applicable -67181 Other venous complications of pregnancy and the puerperium, delivered, with or without mention of antepartum condition -67182 Other venous complications of pregnancy and the puerperium, delivered, with mention of postpartum complication -67183 Other venous complications of pregnancy and the puerperium, antepartum condition or complication -67184 Other venous complications of pregnancy and the puerperium, postpartum condition or complication -67190 Unspecified venous complication of pregnancy and the puerperium, unspecified as to episode of care or not applicable -67191 Unspecified venous complication of pregnancy and the puerperium, delivered, with or without mention of antepartum condition -67192 Unspecified venous complication of pregnancy and the puerperium, delivered, with mention of postpartum complication -67193 Unspecified venous complication of pregnancy and the puerperium, antepartum condition or complication -67194 Unspecified venous complication of pregnancy and the puerperium, postpartum condition or complication -67200 Pyrexia of unknown origin during the puerperium, unspecified as to episode of care or not applicable -67202 Pyrexia of unknown origin during the puerperium, delivered, with mention of postpartum complication -67204 Pyrexia of unknown origin during the puerperium, postpartum condition or complication -67300 Obstetrical air embolism, unspecified as to episode of care or not applicable -67301 Obstetrical air embolism, delivered, with or without mention of antepartum condition -67302 Obstetrical air embolism, delivered, with mention of postpartum complication -67303 Obstetrical air embolism, antepartum condition or complication -67304 Obstetrical air embolism, postpartum condition or complication -67310 Amniotic fluid embolism, unspecified as to episode of care or not applicable -67311 Amniotic fluid embolism, delivered, with or without mention of antepartum condition -67312 Amniotic fluid embolism, delivered, with mention of postpartum complication -67313 Amniotic fluid embolism, antepartum condition or complication -67314 Amniotic fluid embolism, postpartum condition or complication -67320 Obstetrical blood-clot embolism, unspecified as to episode of care or not applicable -67321 Obstetrical blood-clot embolism, delivered, with or without mention of antepartum condition -67322 Obstetrical blood-clot embolism, delivered, with mention of postpartum complication -67323 Obstetrical blood-clot embolism, antepartum condition or complication -67324 Obstetrical blood-clot embolism, postpartum condition or complication -67330 Obstetrical pyemic and septic embolism, unspecified as to episode of care or not applicable -67331 Obstetrical pyemic and septic embolism, delivered, with or without mention of antepartum condition -67332 Obstetrical pyemic and septic embolism, delivered, with mention of postpartum complication -67333 Obstetrical pyemic and septic embolism, antepartum condition or complication -67334 Obstetrical pyemic and septic embolism, postpartum condition or complication -67380 Other obstetrical pulmonary embolism, unspecified as to episode of care or not applicable -67381 Other obstetrical pulmonary embolism, delivered, with or without mention of antepartum condition -67382 Other obstetrical pulmonary embolism, delivered, with mention of postpartum complication -67383 Other obstetrical pulmonary embolism, antepartum condition or complication -67384 Other obstetrical pulmonary embolism, postpartum condition or complication -67400 Cerebrovascular disorders in the puerperium, unspecified as to episode of care or not applicable -67401 Cerebrovascular disorders in the puerperium, delivered, with or without mention of antepartum condition -67402 Cerebrovascular disorders in the puerperium, delivered, with mention of postpartum complication -67403 Cerebrovascular disorders in the puerperium, antepartum condition or complication -67404 Cerebrovascular disorders in the puerperium, postpartum condition or complication -67410 Disruption of cesarean wound, unspecified as to episode of care or not applicable -67412 Disruption of cesarean wound, delivered, with mention of postpartum complication -67414 Disruption of cesarean wound, postpartum condition or complication -67420 Disruption of perineal wound, unspecified as to episode of care or not applicable -67422 Disruption of perineal wound, delivered, with mention of postpartum complication -67424 Disruption of perineal wound, postpartum condition or complication -67430 Other complications of obstetrical surgical wounds, unspecified as to episode of care or not applicable -67432 Other complications of obstetrical surgical wounds, delivered, with mention of postpartum complication -67434 Other complications of obstetrical surgical wounds, postpartum condition or complication -67440 Placental polyp, unspecified as to episode of care or not applicable -67442 Placental polyp, delivered, with mention of postpartum complication -67444 Placental polyp, postpartum condition or complication -67450 Peripartum cardiomyopathy, unspecified as to episode of care or not applicable -67451 Peripartum cardiomyopathy, delivered, with or without mention of antepartum condition -67452 Peripartum cardiomyopathy, delivered, with mention of postpartum condition -67453 Peripartum cardiomyopathy, antepartum condition or complication -67454 Peripartum cardiomyopathy, postpartum condition or complication -67480 Other complications of puerperium, unspecified as to episode of care or not applicable -67482 Other complications of puerperium, delivered, with mention of postpartum complication -67484 Other complications of puerperium, postpartum condition or complication -67490 Unspecified complications of puerperium, unspecified as to episode of care or not applicable -67492 Unspecified complications of puerperium, delivered, with mention of postpartum complication -67494 Unspecified complications of puerperium, postpartum condition or complication -67500 Infections of nipple associated with childbirth, unspecified as to episode of care or not applicable -67501 Infections of nipple associated with childbirth, delivered, with or without mention of antepartum condition -67502 Infections of nipple associated with childbirth, delivered, with mention of postpartum complication -67503 Infections of nipple associated with childbirth, antepartum condition or complication -67504 Infections of nipple associated with childbirth, postpartum condition or complication -67510 Abscess of breast associated with childbirth, unspecified as to episode of care or not applicable -67511 Abscess of breast associated with childbirth, delivered, with or without mention of antepartum condition -67512 Abscess of breast associated with childbirth, delivered, with mention of postpartum complication -67513 Abscess of breast associated with childbirth, antepartum condition or complication -67514 Abscess of breast associated with childbirth, postpartum condition or complication -67520 Nonpurulent mastitis associated with childbirth, unspecified as to episode of care or not applicable -67521 Nonpurulent mastitis associated with childbirth, delivered, with or without mention of antepartum condition -67522 Nonpurulent mastitis associated with childbirth, delivered, with mention of postpartum complication -67523 Nonpurulent mastitis associated with childbirth, antepartum condition or complication -67524 Nonpurulent mastitis associated with childbirth, postpartum condition or complication -67580 Other specified infections of the breast and nipple associated with childbirth, unspecified as to episode of care or not applicable -67581 Other specified infections of the breast and nipple associated with childbirth, delivered, with or without mention of antepartum condition -67582 Other specified infections of the breast and nipple associated with childbirth, delivered, with mention of postpartum complication -67583 Other specified infections of the breast and nipple associated with childbirth, antepartum condition or complication -67584 Other specified infections of the breast and nipple associated with childbirth, postpartum condition or complication -67590 Unspecified infection of the breast and nipple associated with childbirth, unspecified as to episode of care or not applicable -67591 Unspecified infection of the breast and nipple associated with childbirth, delivered, with or without mention of antepartum condition -67592 Unspecified infection of the breast and nipple associated with childbirth, delivered, with mention of postpartum complication -67593 Unspecified infection of the breast and nipple associated with childbirth, antepartum condition or complication -67594 Unspecified infection of the breast and nipple associated with childbirth, postpartum condition or complication -67600 Retracted nipple associated with childbirth, unspecified as to episode of care or not applicable -67601 Retracted nipple associated with childbirth, delivered, with or without mention of antepartum condition -67602 Retracted nipple associated with childbirth, delivered, with mention of postpartum complication -67603 Retracted nipple associated with childbirth, antepartum condition or complication -67604 Retracted nipple associated with childbirth, postpartum condition or complication -67610 Cracked nipple associated with childbirth, unspecified as to episode of care or not applicable -67611 Cracked nipple associated with childbirth, delivered, with or without mention of antepartum condition -67612 Cracked nipple associated with childbirth, delivered, with mention of postpartum complication -67613 Cracked nipple associated with childbirth, antepartum condition or complication -67614 Cracked nipple associated with childbirth, postpartum condition or complication -67620 Engorgement of breasts associated with childbirth, unspecified as to episode of care or not applicable -67621 Engorgement of breasts associated with childbirth, delivered, with or without mention of antepartum condition -67622 Engorgement of breasts associated with childbirth, delivered, with mention of postpartum complication -67623 Engorgement of breasts associated with childbirth, antepartum condition or complication -67624 Engorgement of breasts associated with childbirth, postpartum condition or complication -67630 Other and unspecified disorder of breast associated with childbirth, unspecified as to episode of care or not applicable -67631 Other and unspecified disorder of breast associated with childbirth, delivered, with or without mention of antepartum condition -67632 Other and unspecified disorder of breast associated with childbirth, delivered, with mention of postpartum complication -67633 Other and unspecified disorder of breast associated with childbirth, antepartum condition or complication -67634 Other and unspecified disorder of breast associated with childbirth, postpartum condition or complication -67640 Failure of lactation, unspecified as to episode of care or not applicable -67641 Failure of lactation, delivered, with or without mention of antepartum condition -67642 Failure of lactation, delivered, with mention of postpartum complication -67643 Failure of lactation, antepartum condition or complication -67644 Failure of lactation, postpartum condition or complication -67650 Suppressed lactation, unspecified as to episode of care or not applicable -67651 Suppressed lactation, delivered, with or without mention of antepartum condition -67652 Suppressed lactation, delivered, with mention of postpartum complication -67653 Suppressed lactation, antepartum condition or complication -67654 Suppressed lactation, postpartum condition or complication -67660 Galactorrhea associated with childbirth, unspecified as to episode of care or not applicable -67661 Galactorrhea associated with childbirth, delivered, with or without mention of antepartum condition -67662 Galactorrhea associated with childbirth, delivered, with mention of postpartum complication -67663 Galactorrhea associated with childbirth, antepartum condition or complication -67664 Galactorrhea associated with childbirth, postpartum condition or complication -67680 Other disorders of lactation, unspecified as to episode of care or not applicable -67681 Other disorders of lactation, delivered, with or without mention of antepartum condition -67682 Other disorders of lactation, delivered, with mention of postpartum complication -67683 Other disorders of lactation, antepartum condition or complication -67684 Other disorders of lactation, postpartum condition or complication -67690 Unspecified disorder of lactation, unspecified as to episode of care or not applicable -67691 Unspecified disorder of lactation, delivered, with or without mention of antepartum condition -67692 Unspecified disorder of lactation, delivered, with mention of postpartum complication -67693 Unspecified disorder of lactation, antepartum condition or complication -67694 Unspecified disorder of lactation, postpartum condition or complication -677 Late effect of complication of pregnancy, childbirth, and the puerperium -67800 Fetal hematologic conditions, unspecified as to episode of care or not applicable -67801 Fetal hematologic conditions, delivered, with or without mention of antepartum condition -67803 Fetal hematologic conditions, antepartum condition or complication -67810 Fetal conjoined twins, unspecified as to episode of care or not applicable -67811 Fetal conjoined twins, delivered, with or without mention of antepartum condition -67813 Fetal conjoined twins, antepartum condition or complication -67900 Maternal complications from in utero procedure, unspecified as to episode of care or not applicable -67901 Maternal complications from in utero procedure, delivered, with or without mention of antepartum condition -67902 Maternal complications from in utero procedure, delivered, with mention of postpartum complication -67903 Maternal complications from in utero procedure, antepartum condition or complication -67904 Maternal complications from in utero procedure, postpartum condition or complication -67910 Fetal complications from in utero procedure, unspecified as to episode of care or not applicable -67911 Fetal complications from in utero procedure, delivered, with or without mention of antepartum condition -67912 Fetal complications from in utero procedure, delivered, with mention of postpartum complication -67913 Fetal complications from in utero procedure, antepartum condition or complication -67914 Fetal complications from in utero procedure, postpartum condition or complication -6800 Carbuncle and furuncle of face -6801 Carbuncle and furuncle of neck -6802 Carbuncle and furuncle of trunk -6803 Carbuncle and furuncle of upper arm and forearm -6804 Carbuncle and furuncle of hand -6805 Carbuncle and furuncle of buttock -6806 Carbuncle and furuncle of leg, except foot -6807 Carbuncle and furuncle of foot -6808 Carbuncle and furuncle of other specified sites -6809 Carbuncle and furuncle of unspecified site -68100 Cellulitis and abscess of finger, unspecified -68101 Felon -68102 Onychia and paronychia of finger -68110 Cellulitis and abscess of toe, unspecified -68111 Onychia and paronychia of toe -6819 Cellulitis and abscess of unspecified digit -6820 Cellulitis and abscess of face -6821 Cellulitis and abscess of neck -6822 Cellulitis and abscess of trunk -6823 Cellulitis and abscess of upper arm and forearm -6824 Cellulitis and abscess of hand, except fingers and thumb -6825 Cellulitis and abscess of buttock -6826 Cellulitis and abscess of leg, except foot -6827 Cellulitis and abscess of foot, except toes -6828 Cellulitis and abscess of other specified sites -6829 Cellulitis and abscess of unspecified sites -683 Acute lymphadenitis -684 Impetigo -6850 Pilonidal cyst with abscess -6851 Pilonidal cyst without mention of abscess -68600 Pyoderma, unspecified -68601 Pyoderma gangrenosum -68609 Other pyoderma -6861 Pyogenic granuloma of skin and subcutaneous tissue -6868 Other specified local infections of skin and subcutaneous tissue -6869 Unspecified local infection of skin and subcutaneous tissue -69010 Seborrheic dermatitis, unspecified -69011 Seborrhea capitis -69012 Seborrheic infantile dermatitis -69018 Other seborrheic dermatitis -6908 Other erythematosquamous dermatosis -6910 Diaper or napkin rash -6918 Other atopic dermatitis and related conditions -6920 Contact dermatitis and other eczema due to detergents -6921 Contact dermatitis and other eczema due to oils and greases -6922 Contact dermatitis and other eczema due to solvents -6923 Contact dermatitis and other eczema due to drugs and medicines in contact with skin -6924 Contact dermatitis and other eczema due to other chemical products -6925 Contact dermatitis and other eczema due to food in contact with skin -6926 Contact dermatitis and other eczema due to plants [except food] -69270 Unspecified dermatitis due to sun -69271 Sunburn -69272 Acute dermatitis due to solar radiation -69273 Actinic reticuloid and actinic granuloma -69274 Other chronic dermatitis due to solar radiation -69275 Disseminated superficial actinic porokeratosis (DSAP) -69276 Sunburn of second degree -69277 Sunburn of third degree -69279 Other dermatitis due to solar radiation -69281 Dermatitis due to cosmetics -69282 Dermatitis due to other radiation -69283 Dermatitis due to metals -69284 Contact dermatitis and other eczema due to animal (cat) (dog) dander -69289 Contact dermatitis and other eczema due to other specified agents -6929 Contact dermatitis and other eczema, unspecified cause -6930 Dermatitis due to drugs and medicines taken internally -6931 Dermatitis due to food taken internally -6938 Dermatitis due to other specified substances taken internally -6939 Dermatitis due to unspecified substance taken internally -6940 Dermatitis herpetiformis -6941 Subcorneal pustular dermatosis -6942 Juvenile dermatitis herpetiformis -6943 Impetigo herpetiformis -6944 Pemphigus -6945 Pemphigoid -69460 Benign mucous membrane pemphigoid without mention of ocular involvement -69461 Benign mucous membrane pemphigoid with ocular involvement -6948 Other specified bullous dermatoses -6949 Unspecified bullous dermatoses -6950 Toxic erythema -69510 Erythema multiforme, unspecified -69511 Erythema multiforme minor -69512 Erythema multiforme major -69513 Stevens-Johnson syndrome -69514 Stevens-Johnson syndrome-toxic epidermal necrolysis overlap syndrome -69515 Toxic epidermal necrolysis -69519 Other erythema multiforme -6952 Erythema nodosum -6953 Rosacea -6954 Lupus erythematosus -69550 Exfoliation due to erythematous condition involving less than 10 percent of body surface -69551 Exfoliation due to erythematous condition involving 10-19 percent of body surface -69552 Exfoliation due to erythematous condition involving 20-29 percent of body surface -69553 Exfoliation due to erythematous condition involving 30-39 percent of body surface -69554 Exfoliation due to erythematous condition involving 40-49 percent of body surface -69555 Exfoliation due to erythematous condition involving 50-59 percent of body surface -69556 Exfoliation due to erythematous condition involving 60-69 percent of body surface -69557 Exfoliation due to erythematous condition involving 70-79 percent of body surface -69558 Exfoliation due to erythematous condition involving 80-89 percent of body surface -69559 Exfoliation due to erythematous condition involving 90 percent or more of body surface -69581 Ritter's disease -69589 Other specified erythematous conditions -6959 Unspecified erythematous condition -6960 Psoriatic arthropathy -6961 Other psoriasis -6962 Parapsoriasis -6963 Pityriasis rosea -6964 Pityriasis rubra pilaris -6965 Other and unspecified pityriasis -6968 Other psoriasis and similar disorders -6970 Lichen planus -6971 Lichen nitidus -6978 Other lichen, not elsewhere classified -6979 Lichen, unspecified -6980 Pruritus ani -6981 Pruritus of genital organs -6982 Prurigo -6983 Lichenification and lichen simplex chronicus -6984 Dermatitis factitia [artefacta] -6988 Other specified pruritic conditions -6989 Unspecified pruritic disorder -700 Corns and callosities -7010 Circumscribed scleroderma -7011 Keratoderma, acquired -7012 Acquired acanthosis nigricans -7013 Striae atrophicae -7014 Keloid scar -7015 Other abnormal granulation tissue -7018 Other specified hypertrophic and atrophic conditions of skin -7019 Unspecified hypertrophic and atrophic conditions of skin -7020 Actinic keratosis -70211 Inflamed seborrheic keratosis -70219 Other seborrheic keratosis -7028 Other specified dermatoses -7030 Ingrowing nail -7038 Other specified diseases of nail -7039 Unspecified disease of nail -70400 Alopecia, unspecified -70401 Alopecia areata -70402 Telogen effluvium -70409 Other alopecia -7041 Hirsutism -7042 Abnormalities of the hair -7043 Variations in hair color -70441 Pilar cyst -70442 Trichilemmal cyst -7048 Other specified diseases of hair and hair follicles -7049 Unspecified disease of hair and hair follicles -7050 Anhidrosis -7051 Prickly heat -70521 Primary focal hyperhidrosis -70522 Secondary focal hyperhidrosis -70581 Dyshidrosis -70582 Fox-Fordyce disease -70583 Hidradenitis -70589 Other specified disorders of sweat glands -7059 Unspecified disorder of sweat glands -7060 Acne varioliformis -7061 Other acne -7062 Sebaceous cyst -7063 Seborrhea -7068 Other specified diseases of sebaceous glands -7069 Unspecified disease of sebaceous glands -70700 Pressure ulcer, unspecified site -70701 Pressure ulcer, elbow -70702 Pressure ulcer, upper back -70703 Pressure ulcer, lower back -70704 Pressure ulcer, hip -70705 Pressure ulcer, buttock -70706 Pressure ulcer, ankle -70707 Pressure ulcer, heel -70709 Pressure ulcer, other site -70710 Ulcer of lower limb, unspecified -70711 Ulcer of thigh -70712 Ulcer of calf -70713 Ulcer of ankle -70714 Ulcer of heel and midfoot -70715 Ulcer of other part of foot -70719 Ulcer of other part of lower limb -70720 Pressure ulcer, unspecified stage -70721 Pressure ulcer, stage I -70722 Pressure ulcer, stage II -70723 Pressure ulcer, stage III -70724 Pressure ulcer, stage IV -70725 Pressure ulcer, unstageable -7078 Chronic ulcer of other specified sites -7079 Chronic ulcer of unspecified site -7080 Allergic urticaria -7081 Idiopathic urticaria -7082 Urticaria due to cold and heat -7083 Dermatographic urticaria -7084 Vibratory urticaria -7085 Cholinergic urticaria -7088 Other specified urticaria -7089 Urticaria, unspecified -70900 Dyschromia, unspecified -70901 Vitiligo -70909 Other dyschromia -7091 Vascular disorders of skin -7092 Scar conditions and fibrosis of skin -7093 Degenerative skin disorders -7094 Foreign body granuloma of skin and subcutaneous tissue -7098 Other specified disorders of skin -7099 Unspecified disorder of skin and subcutaneous tissue -7100 Systemic lupus erythematosus -7101 Systemic sclerosis -7102 Sicca syndrome -7103 Dermatomyositis -7104 Polymyositis -7105 Eosinophilia myalgia syndrome -7108 Other specified diffuse diseases of connective tissue -7109 Unspecified diffuse connective tissue disease -71100 Pyogenic arthritis, site unspecified -71101 Pyogenic arthritis, shoulder region -71102 Pyogenic arthritis, upper arm -71103 Pyogenic arthritis, forearm -71104 Pyogenic arthritis, hand -71105 Pyogenic arthritis, pelvic region and thigh -71106 Pyogenic arthritis, lower leg -71107 Pyogenic arthritis, ankle and foot -71108 Pyogenic arthritis, other specified sites -71109 Pyogenic arthritis, multiple sites -71110 Arthropathy associated with Reiter's disease and nonspecific urethritis, site unspecified -71111 Arthropathy associated with Reiter's disease and nonspecific urethritis, shoulder region -71112 Arthropathy associated with Reiter's disease and nonspecific urethritis, upper arm -71113 Arthropathy associated with Reiter's disease and nonspecific urethritis, forearm -71114 Arthropathy associated with Reiter's disease and nonspecific urethritis, hand -71115 Arthropathy associated with Reiter's disease and nonspecific urethritis, pelvic region and thigh -71116 Arthropathy associated with Reiter's disease and nonspecific urethritis, lower leg -71117 Arthropathy associated with Reiter's disease and nonspecific urethritis, ankle and foot -71118 Arthropathy associated with Reiter's disease and nonspecific urethritis, other specified sites -71119 Arthropathy associated with Reiter's disease and nonspecific urethritis, multiple sites -71120 Arthropathy in Behcet's syndrome, site unspecified -71121 Arthropathy in Behcet's syndrome, shoulder region -71122 Arthropathy in Behcet's syndrome, upper arm -71123 Arthropathy in Behcet's syndrome, forearm -71124 Arthropathy in Behcet's syndrome, hand -71125 Arthropathy in Behcet's syndrome, pelvic region and thigh -71126 Arthropathy in Behcet's syndrome, lower leg -71127 Arthropathy in Behcet's syndrome, ankle and foot -71128 Arthropathy in Behcet's syndrome, other specified sites -71129 Arthropathy in Behcet's syndrome, multiple sites -71130 Postdysenteric arthropathy, site unspecified -71131 Postdysenteric arthropathy, shoulder region -71132 Postdysenteric arthropathy, upper arm -71133 Postdysenteric arthropathy, forearm -71134 Postdysenteric arthropathy, hand -71135 Postdysenteric arthropathy, pelvic region and thigh -71136 Postdysenteric arthropathy, lower leg -71137 Postdysenteric arthropathy, ankle and foot -71138 Postdysenteric arthropathy, other specified sites -71139 Postdysenteric arthropathy, multiple sites -71140 Arthropathy associated with other bacterial diseases, site unspecified -71141 Arthropathy associated with other bacterial diseases, shoulder region -71142 Arthropathy associated with other bacterial diseases, upper arm -71143 Arthropathy associated with other bacterial diseases, forearm -71144 Arthropathy associated with other bacterial diseases, hand -71145 Arthropathy associated with other bacterial diseases, pelvic region and thigh -71146 Arthropathy associated with other bacterial diseases, lower leg -71147 Arthropathy associated with other bacterial diseases, ankle and foot -71148 Arthropathy associated with other bacterial diseases, other specified sites -71149 Arthropathy associated with other bacterial diseases, multiple sites -71150 Arthropathy associated with other viral diseases, site unspecified -71151 Arthropathy associated with other viral diseases, shoulder region -71152 Arthropathy associated with other viral diseases, upper arm -71153 Arthropathy associated with other viral diseases, forearm -71154 Arthropathy associated with other viral diseases, hand -71155 Arthropathy associated with other viral diseases, pelvic region and thigh -71156 Arthropathy associated with other viral diseases, lower leg -71157 Arthropathy associated with other viral diseases, ankle and foot -71158 Arthropathy associated with other viral diseases, other specified sites -71159 Arthropathy associated with other viral diseases, multiple sites -71160 Arthropathy associated with mycoses, site unspecified -71161 Arthropathy associated with mycoses, shoulder region -71162 Arthropathy associated with mycoses, upper arm -71163 Arthropathy associated with mycoses, forearm -71164 Arthropathy associated with mycoses, hand -71165 Arthropathy associated with mycoses, pelvic region and thigh -71166 Arthropathy associated with mycoses, lower leg -71167 Arthropathy associated with mycoses, ankle and foot -71168 Arthropathy associated with mycoses, other specified sites -71169 Arthropathy associated with mycoses, involving multiple sites -71170 Arthropathy associated with helminthiasis, site unspecified -71171 Arthropathy associated with helminthiasis, shoulder region -71172 Arthropathy associated with helminthiasis, upper arm -71173 Arthropathy associated with helminthiasis, forearm -71174 Arthropathy associated with helminthiasis, hand -71175 Arthropathy associated with helminthiasis, pelvic region and thigh -71176 Arthropathy associated with helminthiasis, lower leg -71177 Arthropathy associated with helminthiasis, ankle and foot -71178 Arthropathy associated with helminthiasis, other specified sites -71179 Arthropathy associated with helminthiasis, multiple sites -71180 Arthropathy associated with other infectious and parasitic diseases, site unspecified -71181 Arthropathy associated with other infectious and parasitic diseases, shoulder region -71182 Arthropathy associated with other infectious and parasitic diseases, upper arm -71183 Arthropathy associated with other infectious and parasitic diseases, forearm -71184 Arthropathy associated with other infectious and parasitic diseases, hand -71185 Arthropathy associated with other infectious and parasitic diseases, pelvic region and thigh -71186 Arthropathy associated with other infectious and parasitic diseases, lower leg -71187 Arthropathy associated with other infectious and parasitic diseases, ankle and foot -71188 Arthropathy associated with other infectious and parasitic diseases, other specified sites -71189 Arthropathy associated with other infectious and parasitic diseases, multiple sites -71190 Unspecified infective arthritis, site unspecified -71191 Unspecified infective arthritis, shoulder region -71192 Unspecified infective arthritis, upper arm -71193 Unspecified infective arthritis, forearm -71194 Unspecified infective arthritis, hand -71195 Unspecified infective arthritis, pelvic region and thigh -71196 Unspecified infective arthritis, lower leg -71197 Unspecified infective arthritis, ankle and foot -71198 Unspecified infective arthritis, other specified sites -71199 Unspecified infective arthritis, multiple sites -71210 Chondrocalcinosis, due to dicalcium phosphate crystals, site unspecified -71211 Chondrocalcinosis, due to dicalcium phosphate crystals, shoulder region -71212 Chondrocalcinosis, due to dicalcium phosphate crystals, upper arm -71213 Chondrocalcinosis, due to dicalcium phosphate crystals, forearm -71214 Chondrocalcinosis, due to dicalcium phosphate crystals, hand -71215 Chondrocalcinosis, due to dicalcium phosphate crystals, pelvic region and thigh -71216 Chondrocalcinosis, due to dicalcium phosphate crystals, lower leg -71217 Chondrocalcinosis, due to dicalcium phosphate crystals, ankle and foot -71218 Chondrocalcinosis, due to dicalcium phosphate crystals, other specified sites -71219 Chondrocalcinosis, due to dicalcium phosphate crystals, multiple sites -71220 Chondrocalcinosis, due to pyrophosphate crystals, site unspecified -71221 Chondrocalcinosis, due to pyrophosphate crystals, shoulder region -71222 Chondrocalcinosis, due to pyrophosphate crystals, upper arm -71223 Chondrocalcinosis, due to pyrophosphate crystals, forearm -71224 Chondrocalcinosis, due to pyrophosphate crystals, hand -71225 Chondrocalcinosis, due to pyrophosphate crystals, pelvic region and thigh -71226 Chondrocalcinosis, due to pyrophosphate crystals, lower leg -71227 Chondrocalcinosis, due to pyrophosphate crystals, ankle and foot -71228 Chondrocalcinosis, due to pyrophosphate crystals, other specified sites -71229 Chondrocalcinosis, due to pyrophosphate crystals, multiple sites -71230 Chondrocalcinosis, unspecified, site unspecified -71231 Chondrocalcinosis, unspecified, shoulder region -71232 Chondrocalcinosis, unspecified, upper arm -71233 Chondrocalcinosis, unspecified, forearm -71234 Chondrocalcinosis, unspecified, hand -71235 Chondrocalcinosis, unspecified, pelvic region and thigh -71236 Chondrocalcinosis, unspecified, lower leg -71237 Chondrocalcinosis, unspecified, ankle and foot -71238 Chondrocalcinosis, unspecified, other specified sites -71239 Chondrocalcinosis, unspecified, multiple sites -71280 Other specified crystal arthropathies, site unspecified -71281 Other specified crystal arthropathies, shoulder region -71282 Other specified crystal arthropathies, upper arm -71283 Other specified crystal arthropathies, forearm -71284 Other specified crystal arthropathies, hand -71285 Other specified crystal arthropathies, pelvic region and thigh -71286 Other specified crystal arthropathies, lower leg -71287 Other specified crystal arthropathies, ankle and foot -71288 Other specified crystal arthropathies, other specified sites -71289 Other specified crystal arthropathies, multiple sites -71290 Unspecified crystal arthropathy, site unspecified -71291 Unspecified crystal arthropathy, shoulder region -71292 Unspecified crystal arthropathy, upper arm -71293 Unspecified crystal arthropathy, forearm -71294 Unspecified crystal arthropathy, hand -71295 Unspecified crystal arthropathy, pelvic region and thigh -71296 Unspecified crystal arthropathy, lower leg -71297 Unspecified crystal arthropathy, ankle and foot -71298 Unspecified crystal arthropathy, other specified sites -71299 Unspecified crystal arthropathy, multiple sites -7130 Arthropathy associated with other endocrine and metabolic disorders -7131 Arthropathy associated with gastrointestinal conditions other than infections -7132 Arthropathy associated with hematological disorders -7133 Arthropathy associated with dermatological disorders -7134 Arthropathy associated with respiratory disorders -7135 Arthropathy associated with neurological disorders -7136 Arthropathy associated with hypersensitivity reaction -7137 Other general diseases with articular involvement -7138 Arthropathy associated with other conditions classifiable elsewhere -7140 Rheumatoid arthritis -7141 Felty's syndrome -7142 Other rheumatoid arthritis with visceral or systemic involvement -71430 Polyarticular juvenile rheumatoid arthritis, chronic or unspecified -71431 Polyarticular juvenile rheumatoid arthritis, acute -71432 Pauciarticular juvenile rheumatoid arthritis -71433 Monoarticular juvenile rheumatoid arthritis -7144 Chronic postrheumatic arthropathy -71481 Rheumatoid lung -71489 Other specified inflammatory polyarthropathies -7149 Unspecified inflammatory polyarthropathy -71500 Osteoarthrosis, generalized, site unspecified -71504 Osteoarthrosis, generalized, hand -71509 Osteoarthrosis, generalized, multiple sites -71510 Osteoarthrosis, localized, primary, site unspecified -71511 Osteoarthrosis, localized, primary, shoulder region -71512 Osteoarthrosis, localized, primary, upper arm -71513 Osteoarthrosis, localized, primary, forearm -71514 Osteoarthrosis, localized, primary, hand -71515 Osteoarthrosis, localized, primary, pelvic region and thigh -71516 Osteoarthrosis, localized, primary, lower leg -71517 Osteoarthrosis, localized, primary, ankle and foot -71518 Osteoarthrosis, localized, primary, other specified sites -71520 Osteoarthrosis, localized, secondary, site unspecified -71521 Osteoarthrosis, localized, secondary, shoulder region -71522 Osteoarthrosis, localized, secondary, upper arm -71523 Osteoarthrosis, localized, secondary, forearm -71524 Osteoarthrosis, localized, secondary, hand -71525 Osteoarthrosis, localized, secondary, pelvic region and thigh -71526 Osteoarthrosis, localized, secondary, lower leg -71527 Osteoarthrosis, localized, secondary, ankle and foot -71528 Osteoarthrosis, localized, secondary, other specified sites -71530 Osteoarthrosis, localized, not specified whether primary or secondary, site unspecified -71531 Osteoarthrosis, localized, not specified whether primary or secondary, shoulder region -71532 Osteoarthrosis, localized, not specified whether primary or secondary, upper arm -71533 Osteoarthrosis, localized, not specified whether primary or secondary, forearm -71534 Osteoarthrosis, localized, not specified whether primary or secondary, hand -71535 Osteoarthrosis, localized, not specified whether primary or secondary, pelvic region and thigh -71536 Osteoarthrosis, localized, not specified whether primary or secondary, lower leg -71537 Osteoarthrosis, localized, not specified whether primary or secondary, ankle and foot -71538 Osteoarthrosis, localized, not specified whether primary or secondary, other specified sites -71580 Osteoarthrosis involving, or with mention of more than one site, but not specified as generalized, site unspecified -71589 Osteoarthrosis involving, or with mention of more than one site, but not specified as generalized, multiple sites -71590 Osteoarthrosis, unspecified whether generalized or localized, site unspecified -71591 Osteoarthrosis, unspecified whether generalized or localized, shoulder region -71592 Osteoarthrosis, unspecified whether generalized or localized, upper arm -71593 Osteoarthrosis, unspecified whether generalized or localized, forearm -71594 Osteoarthrosis, unspecified whether generalized or localized, hand -71595 Osteoarthrosis, unspecified whether generalized or localized, pelvic region and thigh -71596 Osteoarthrosis, unspecified whether generalized or localized, lower leg -71597 Osteoarthrosis, unspecified whether generalized or localized, ankle and foot -71598 Osteoarthrosis, unspecified whether generalized or localized, other specified sites -71600 Kaschin-Beck disease, site unspecified -71601 Kaschin-Beck disease, shoulder region -71602 Kaschin-Beck disease, upper arm -71603 Kaschin-Beck disease, forearm -71604 Kaschin-Beck disease, hand -71605 Kaschin-Beck disease, pelvic region and thigh -71606 Kaschin-Beck disease, lower leg -71607 Kaschin-Beck disease, ankle and foot -71608 Kaschin-Beck disease, other specified sites -71609 Kaschin-Beck disease, multiple sites -71610 Traumatic arthropathy, site unspecified -71611 Traumatic arthropathy, shoulder region -71612 Traumatic arthropathy, upper arm -71613 Traumatic arthropathy, forearm -71614 Traumatic arthropathy, hand -71615 Traumatic arthropathy, pelvic region and thigh -71616 Traumatic arthropathy, lower leg -71617 Traumatic arthropathy, ankle and foot -71618 Traumatic arthropathy, other specified sites -71619 Traumatic arthropathy, multiple sites -71620 Allergic arthritis, site unspecified -71621 Allergic arthritis, shoulder region -71622 Allergic arthritis, upper arm -71623 Allergic arthritis, forearm -71624 Allergic arthritis, hand -71625 Allergic arthritis, pelvic region and thigh -71626 Allergic arthritis, lower leg -71627 Allergic arthritis, ankle and foot -71628 Allergic arthritis, other specified sites -71629 Allergic arthritis, multiple sites -71630 Climacteric arthritis, site unspecified -71631 Climacteric arthritis, shoulder region -71632 Climacteric arthritis, upper arm -71633 Climacteric arthritis, forearm -71634 Climacteric arthritis, hand -71635 Climacteric arthritis, pelvic region and thigh -71636 Climacteric arthritis, lower leg -71637 Climacteric arthritis, ankle and foot -71638 Climacteric arthritis, other specified sites -71639 Climacteric arthritis, multiple sites -71640 Transient arthropathy, site unspecified -71641 Transient arthropathy, shoulder region -71642 Transient arthropathy, upper arm -71643 Transient arthropathy, forearm -71644 Transient arthropathy, hand -71645 Transient arthropathy, pelvic region and thigh -71646 Transient arthropathy, lower leg -71647 Transient arthropathy, ankle and foot -71648 Transient arthropathy, other specified sites -71649 Transient arthropathy, multiple sites -71650 Unspecified polyarthropathy or polyarthritis, site unspecified -71651 Unspecified polyarthropathy or polyarthritis, shoulder region -71652 Unspecified polyarthropathy or polyarthritis, upper arm -71653 Unspecified polyarthropathy or polyarthritis, forearm -71654 Unspecified polyarthropathy or polyarthritis, hand -71655 Unspecified polyarthropathy or polyarthritis, pelvic region and thigh -71656 Unspecified polyarthropathy or polyarthritis, lower leg -71657 Unspecified polyarthropathy or polyarthritis, ankle and foot -71658 Unspecified polyarthropathy or polyarthritis, other specified sites -71659 Unspecified polyarthropathy or polyarthritis, multiple sites -71660 Unspecified monoarthritis, site unspecified -71661 Unspecified monoarthritis, shoulder region -71662 Unspecified monoarthritis, upper arm -71663 Unspecified monoarthritis, forearm -71664 Unspecified monoarthritis, hand -71665 Unspecified monoarthritis, pelvic region and thigh -71666 Unspecified monoarthritis, lower leg -71667 Unspecified monoarthritis, ankle and foot -71668 Unspecified monoarthritis, other specified sites -71680 Other specified arthropathy, site unspecified -71681 Other specified arthropathy, shoulder region -71682 Other specified arthropathy, upper arm -71683 Other specified arthropathy, forearm -71684 Other specified arthropathy, hand -71685 Other specified arthropathy, pelvic region and thigh -71686 Other specified arthropathy, lower leg -71687 Other specified arthropathy, ankle and foot -71688 Other specified arthropathy, other specified sites -71689 Other specified arthropathy, multiple sites -71690 Arthropathy, unspecified, site unspecified -71691 Arthropathy, unspecified, shoulder region -71692 Arthropathy, unspecified, upper arm -71693 Arthropathy, unspecified, forearm -71694 Arthropathy, unspecified, hand -71695 Arthropathy, unspecified, pelvic region and thigh -71696 Arthropathy, unspecified, lower leg -71697 Arthropathy, unspecified, ankle and foot -71698 Arthropathy, unspecified, other specified sites -71699 Arthropathy, unspecified, multiple sites -7170 Old bucket handle tear of medial meniscus -7171 Derangement of anterior horn of medial meniscus -7172 Derangement of posterior horn of medial meniscus -7173 Other and unspecified derangement of medial meniscus -71740 Derangement of lateral meniscus, unspecified -71741 Bucket handle tear of lateral meniscus -71742 Derangement of anterior horn of lateral meniscus -71743 Derangement of posterior horn of lateral meniscus -71749 Other derangement of lateral meniscus -7175 Derangement of meniscus, not elsewhere classified -7176 Loose body in knee -7177 Chondromalacia of patella -71781 Old disruption of lateral collateral ligament -71782 Old disruption of medial collateral ligament -71783 Old disruption of anterior cruciate ligament -71784 Old disruption of posterior cruciate ligament -71785 Old disruption of other ligaments of knee -71789 Other internal derangement of knee -7179 Unspecified internal derangement of knee -71800 Articular cartilage disorder, site unspecified -71801 Articular cartilage disorder, shoulder region -71802 Articular cartilage disorder, upper arm -71803 Articular cartilage disorder, forearm -71804 Articular cartilage disorder, hand -71805 Articular cartilage disorder, pelvic region and thigh -71807 Articular cartilage disorder, ankle and foot -71808 Articular cartilage disorder, other specified sites -71809 Articular cartilage disorder, multiple sites -71810 Loose body in joint, site unspecified -71811 Loose body in joint, shoulder region -71812 Loose body in joint, upper arm -71813 Loose body in joint, forearm -71814 Loose body in joint, hand -71815 Loose body in joint, pelvic region and thigh -71817 Loose body in joint, ankle and foot -71818 Loose body in joint, other specified sites -71819 Loose body in joint, multiple sites -71820 Pathological dislocation of joint, site unspecified -71821 Pathological dislocation of joint, shoulder region -71822 Pathological dislocation of joint, upper arm -71823 Pathological dislocation of joint, forearm -71824 Pathological dislocation of joint, hand -71825 Pathological dislocation of joint, pelvic region and thigh -71826 Pathological dislocation of joint, lower leg -71827 Pathological dislocation of joint, ankle and foot -71828 Pathological dislocation of joint, other specified sites -71829 Pathological dislocation of joint, multiple sites -71830 Recurrent dislocation of joint, site unspecified -71831 Recurrent dislocation of joint, shoulder region -71832 Recurrent dislocation of joint, upper arm -71833 Recurrent dislocation of joint, forearm -71834 Recurrent dislocation of joint, hand -71835 Recurrent dislocation of joint, pelvic region and thigh -71836 Recurrent dislocation of joint, lower leg -71837 Recurrent dislocation of joint, ankle and foot -71838 Recurrent dislocation of joint, other specified sites -71839 Recurrent dislocation of joint, multiple sites -71840 Contracture of joint, site unspecified -71841 Contracture of joint, shoulder region -71842 Contracture of joint, upper arm -71843 Contracture of joint, forearm -71844 Contracture of joint, hand -71845 Contracture of joint, pelvic region and thigh -71846 Contracture of joint, lower leg -71847 Contracture of joint, ankle and foot -71848 Contracture of joint, other specified sites -71849 Contracture of joint, multiple sites -71850 Ankylosis of joint, site unspecified -71851 Ankylosis of joint, shoulder region -71852 Ankylosis of joint, upper arm -71853 Ankylosis of joint, forearm -71854 Ankylosis of joint, hand -71855 Ankylosis of joint, pelvic region and thigh -71856 Ankylosis of joint, lower leg -71857 Ankylosis of joint, ankle and foot -71858 Ankylosis of joint, other specified sites -71859 Ankylosis of joint, multiple sites -71865 Unspecified intrapelvic protrusion of acetabulum, pelvic region and thigh -71870 Developmental dislocation of joint, site unspecified -71871 Developmental dislocation of joint, shoulder region -71872 Developmental dislocation of joint, upper arm -71873 Developmental dislocation of joint, forearm -71874 Developmental dislocation of joint, hand -71875 Developmental dislocation of joint, pelvic region and thigh -71876 Developmental dislocation of joint, lower leg -71877 Developmental dislocation of joint, ankle and foot -71878 Developmental dislocation of joint, other specified sites -71879 Developmental dislocation of joint, multiple sites -71880 Other joint derangement, not elsewhere classified, site unspecified -71881 Other joint derangement, not elsewhere classified, shoulder region -71882 Other joint derangement, not elsewhere classified, upper arm -71883 Other joint derangement, not elsewhere classified, forearm -71884 Other joint derangement, not elsewhere classified, hand -71885 Other joint derangement, not elsewhere classified, pelvic region and thigh -71886 Other joint derangement, not elsewhere classified, lower leg -71887 Other joint derangement, not elsewhere classified, ankle and foot -71888 Other joint derangement, not elsewhere classified, other specified sites -71889 Other joint derangement, not elsewhere classified, multiple sites -71890 Unspecified derangement of joint, site unspecified -71891 Unspecified derangement of joint, shoulder region -71892 Unspecified derangement of joint, upper arm -71893 Unspecified derangement of joint, forearm -71894 Unspecified derangement of joint, hand -71895 Unspecified derangement of joint, pelvic region and thigh -71897 Unspecified derangement of joint, ankle and foot -71898 Unspecified derangement of joint, other specified sites -71899 Unspecified derangement of joint, multiple sites -71900 Effusion of joint, site unspecified -71901 Effusion of joint, shoulder region -71902 Effusion of joint, upper arm -71903 Effusion of joint, forearm -71904 Effusion of joint, hand -71905 Effusion of joint, pelvic region and thigh -71906 Effusion of joint, lower leg -71907 Effusion of joint, ankle and foot -71908 Effusion of joint, other specified sites -71909 Effusion of joint, multiple sites -71910 Hemarthrosis, site unspecified -71911 Hemarthrosis, shoulder region -71912 Hemarthrosis, upper arm -71913 Hemarthrosis, forearm -71914 Hemarthrosis, hand -71915 Hemarthrosis, pelvic region and thigh -71916 Hemarthrosis, lower leg -71917 Hemarthrosis, ankle and foot -71918 Hemarthrosis, other specified sites -71919 Hemarthrosis, multiple sites -71920 Villonodular synovitis, site unspecified -71921 Villonodular synovitis, shoulder region -71922 Villonodular synovitis, upper arm -71923 Villonodular synovitis, forearm -71924 Villonodular synovitis, hand -71925 Villonodular synovitis, pelvic region and thigh -71926 Villonodular synovitis, lower leg -71927 Villonodular synovitis, ankle and foot -71928 Villonodular synovitis, other specified sites -71929 Villonodular synovitis, multiple sites -71930 Palindromic rheumatism, site unspecified -71931 Palindromic rheumatism, shoulder region -71932 Palindromic rheumatism, upper arm -71933 Palindromic rheumatism, forearm -71934 Palindromic rheumatism, hand -71935 Palindromic rheumatism, pelvic region and thigh -71936 Palindromic rheumatism, lower leg -71937 Palindromic rheumatism, ankle and foot -71938 Palindromic rheumatism, other specified sites -71939 Palindromic rheumatism, multiple sites -71940 Pain in joint, site unspecified -71941 Pain in joint, shoulder region -71942 Pain in joint, upper arm -71943 Pain in joint, forearm -71944 Pain in joint, hand -71945 Pain in joint, pelvic region and thigh -71946 Pain in joint, lower leg -71947 Pain in joint, ankle and foot -71948 Pain in joint, other specified sites -71949 Pain in joint, multiple sites -71950 Stiffness of joint, not elsewhere classified, site unspecified -71951 Stiffness of joint, not elsewhere classified, shoulder region -71952 Stiffness of joint, not elsewhere classified, upper arm -71953 Stiffness of joint, not elsewhere classified, forearm -71954 Stiffness of joint, not elsewhere classified, hand -71955 Stiffness of joint, not elsewhere classified, pelvic region and thigh -71956 Stiffness of joint, not elsewhere classified, lower leg -71957 Stiffness of joint, not elsewhere classified, ankle and foot -71958 Stiffness of joint, not elsewhere classified, other specified sites -71959 Stiffness of joint, not elsewhere classified, multiple sites -71960 Other symptoms referable to joint, site unspecified -71961 Other symptoms referable to joint, shoulder region -71962 Other symptoms referable to joint, upper arm -71963 Other symptoms referable to joint, forearm -71964 Other symptoms referable to joint, hand -71965 Other symptoms referable to joint, pelvic region and thigh -71966 Other symptoms referable to joint, lower leg -71967 Other symptoms referable to joint, ankle and foot -71968 Other symptoms referable to joint, other specified sites -71969 Other symptoms referable to joint, multiple sites -7197 Difficulty in walking -71980 Other specified disorders of joint, site unspecified -71981 Other specified disorders of joint, shoulder region -71982 Other specified disorders of joint, upper arm -71983 Other specified disorders of joint, forearm -71984 Other specified disorders of joint, hand -71985 Other specified disorders of joint, pelvic region and thigh -71986 Other specified disorders of joint, lower leg -71987 Other specified disorders of joint, ankle and foot -71988 Other specified disorders of joint, other specified sites -71989 Other specified disorders of joint, multiple sites -71990 Unspecified disorder of joint, site unspecified -71991 Unspecified disorder of joint, shoulder region -71992 Unspecified disorder of joint, upper arm -71993 Unspecified disorder of joint, forearm -71994 Unspecified disorder of joint, hand -71995 Unspecified disorder of joint, pelvic region and thigh -71996 Unspecified disorder of joint, lower leg -71997 Unspecified disorder of joint, ankle and foot -71998 Unspecified disorder of joint, other specified sites -71999 Unspecified disorder of joint, multiple sites -7200 Ankylosing spondylitis -7201 Spinal enthesopathy -7202 Sacroiliitis, not elsewhere classified -72081 Inflammatory spondylopathies in diseases classified elsewhere -72089 Other inflammatory spondylopathies -7209 Unspecified inflammatory spondylopathy -7210 Cervical spondylosis without myelopathy -7211 Cervical spondylosis with myelopathy -7212 Thoracic spondylosis without myelopathy -7213 Lumbosacral spondylosis without myelopathy -72141 Spondylosis with myelopathy, thoracic region -72142 Spondylosis with myelopathy, lumbar region -7215 Kissing spine -7216 Ankylosing vertebral hyperostosis -7217 Traumatic spondylopathy -7218 Other allied disorders of spine -72190 Spondylosis of unspecified site, without mention of myelopathy -72191 Spondylosis of unspecified site, with myelopathy -7220 Displacement of cervical intervertebral disc without myelopathy -72210 Displacement of lumbar intervertebral disc without myelopathy -72211 Displacement of thoracic intervertebral disc without myelopathy -7222 Displacement of intervertebral disc, site unspecified, without myelopathy -72230 Schmorl's nodes, unspecified region -72231 Schmorl's nodes, thoracic region -72232 Schmorl's nodes, lumbar region -72239 Schmorl's nodes, other region -7224 Degeneration of cervical intervertebral disc -72251 Degeneration of thoracic or thoracolumbar intervertebral disc -72252 Degeneration of lumbar or lumbosacral intervertebral disc -7226 Degeneration of intervertebral disc, site unspecified -72270 Intervertebral disc disorder with myelopathy, unspecified region -72271 Intervertebral disc disorder with myelopathy, cervical region -72272 Intervertebral disc disorder with myelopathy, thoracic region -72273 Intervertebral disc disorder with myelopathy, lumbar region -72280 Postlaminectomy syndrome, unspecified region -72281 Postlaminectomy syndrome, cervical region -72282 Postlaminectomy syndrome, thoracic region -72283 Postlaminectomy syndrome, lumbar region -72290 Other and unspecified disc disorder, unspecified region -72291 Other and unspecified disc disorder, cervical region -72292 Other and unspecified disc disorder, thoracic region -72293 Other and unspecified disc disorder, lumbar region -7230 Spinal stenosis in cervical region -7231 Cervicalgia -7232 Cervicocranial syndrome -7233 Cervicobrachial syndrome (diffuse) -7234 Brachial neuritis or radiculitis NOS -7235 Torticollis, unspecified -7236 Panniculitis specified as affecting neck -7237 Ossification of posterior longitudinal ligament in cervical region -7238 Other syndromes affecting cervical region -7239 Unspecified musculoskeletal disorders and symptoms referable to neck -72400 Spinal stenosis, unspecified region -72401 Spinal stenosis, thoracic region -72402 Spinal stenosis, lumbar region, without neurogenic claudication -72403 Spinal stenosis, lumbar region, with neurogenic claudication -72409 Spinal stenosis, other region -7241 Pain in thoracic spine -7242 Lumbago -7243 Sciatica -7244 Thoracic or lumbosacral neuritis or radiculitis, unspecified -7245 Backache, unspecified -7246 Disorders of sacrum -72470 Unspecified disorder of coccyx -72471 Hypermobility of coccyx -72479 Other disorders of coccyx -7248 Other symptoms referable to back -7249 Other unspecified back disorders -725 Polymyalgia rheumatica -7260 Adhesive capsulitis of shoulder -72610 Disorders of bursae and tendons in shoulder region, unspecified -72611 Calcifying tendinitis of shoulder -72612 Bicipital tenosynovitis -72613 Partial tear of rotator cuff -72619 Other specified disorders of bursae and tendons in shoulder region -7262 Other affections of shoulder region, not elsewhere classified -72630 Enthesopathy of elbow, unspecified -72631 Medial epicondylitis -72632 Lateral epicondylitis -72633 Olecranon bursitis -72639 Other enthesopathy of elbow region -7264 Enthesopathy of wrist and carpus -7265 Enthesopathy of hip region -72660 Enthesopathy of knee, unspecified -72661 Pes anserinus tendinitis or bursitis -72662 Tibial collateral ligament bursitis -72663 Fibular collateral ligament bursitis -72664 Patellar tendinitis -72665 Prepatellar bursitis -72669 Other enthesopathy of knee -72670 Enthesopathy of ankle and tarsus, unspecified -72671 Achilles bursitis or tendinitis -72672 Tibialis tendinitis -72673 Calcaneal spur -72679 Other enthesopathy of ankle and tarsus -7268 Other peripheral enthesopathies -72690 Enthesopathy of unspecified site -72691 Exostosis of unspecified site -72700 Synovitis and tenosynovitis, unspecified -72701 Synovitis and tenosynovitis in diseases classified elsewhere -72702 Giant cell tumor of tendon sheath -72703 Trigger finger (acquired) -72704 Radial styloid tenosynovitis -72705 Other tenosynovitis of hand and wrist -72706 Tenosynovitis of foot and ankle -72709 Other synovitis and tenosynovitis -7271 Bunion -7272 Specific bursitides often of occupational origin -7273 Other bursitis -72740 Synovial cyst, unspecified -72741 Ganglion of joint -72742 Ganglion of tendon sheath -72743 Ganglion, unspecified -72749 Other ganglion and cyst of synovium, tendon, and bursa -72750 Rupture of synovium, unspecified -72751 Synovial cyst of popliteal space -72759 Other rupture of synovium -72760 Nontraumatic rupture of unspecified tendon -72761 Complete rupture of rotator cuff -72762 Nontraumatic rupture of tendons of biceps (long head) -72763 Nontraumatic rupture of extensor tendons of hand and wrist -72764 Nontraumatic rupture of flexor tendons of hand and wrist -72765 Nontraumatic rupture of quadriceps tendon -72766 Nontraumatic rupture of patellar tendon -72767 Nontraumatic rupture of achilles tendon -72768 Nontraumatic rupture of other tendons of foot and ankle -72769 Nontraumatic rupture of other tendon -72781 Contracture of tendon (sheath) -72782 Calcium deposits in tendon and bursa -72783 Plica syndrome -72789 Other disorders of synovium, tendon, and bursa -7279 Unspecified disorder of synovium, tendon, and bursa -7280 Infective myositis -72810 Calcification and ossification, unspecified -72811 Progressive myositis ossificans -72812 Traumatic myositis ossificans -72813 Postoperative heterotopic calcification -72819 Other muscular calcification and ossification -7282 Muscular wasting and disuse atrophy, not elsewhere classified -7283 Other specific muscle disorders -7284 Laxity of ligament -7285 Hypermobility syndrome -7286 Contracture of palmar fascia -72871 Plantar fascial fibromatosis -72879 Other fibromatoses of muscle, ligament, and fascia -72881 Interstitial myositis -72882 Foreign body granuloma of muscle -72883 Rupture of muscle, nontraumatic -72884 Diastasis of muscle -72885 Spasm of muscle -72886 Necrotizing fasciitis -72887 Muscle weakness (generalized) -72888 Rhabdomyolysis -72889 Other disorders of muscle, ligament, and fascia -7289 Unspecified disorder of muscle, ligament, and fascia -7290 Rheumatism, unspecified and fibrositis -7291 Myalgia and myositis, unspecified -7292 Neuralgia, neuritis, and radiculitis, unspecified -72930 Panniculitis, unspecified site -72931 Hypertrophy of fat pad, knee -72939 Panniculitis, other site -7294 Fasciitis, unspecified -7295 Pain in limb -7296 Residual foreign body in soft tissue -72971 Nontraumatic compartment syndrome of upper extremity -72972 Nontraumatic compartment syndrome of lower extremity -72973 Nontraumatic compartment syndrome of abdomen -72979 Nontraumatic compartment syndrome of other sites -72981 Swelling of limb -72982 Cramp of limb -72989 Other musculoskeletal symptoms referable to limbs -72990 Disorders of soft tissue, unspecified -72991 Post-traumatic seroma -72992 Nontraumatic hematoma of soft tissue -72999 Other disorders of soft tissue -73000 Acute osteomyelitis, site unspecified -73001 Acute osteomyelitis, shoulder region -73002 Acute osteomyelitis, upper arm -73003 Acute osteomyelitis, forearm -73004 Acute osteomyelitis, hand -73005 Acute osteomyelitis, pelvic region and thigh -73006 Acute osteomyelitis, lower leg -73007 Acute osteomyelitis, ankle and foot -73008 Acute osteomyelitis, other specified sites -73009 Acute osteomyelitis, multiple sites -73010 Chronic osteomyelitis, site unspecified -73011 Chronic osteomyelitis, shoulder region -73012 Chronic osteomyelitis, upper arm -73013 Chronic osteomyelitis, forearm -73014 Chronic osteomyelitis, hand -73015 Chronic osteomyelitis, pelvic region and thigh -73016 Chronic osteomyelitis, lower leg -73017 Chronic osteomyelitis, ankle and foot -73018 Chronic osteomyelitis, other specified sites -73019 Chronic osteomyelitis, multiple sites -73020 Unspecified osteomyelitis, site unspecified -73021 Unspecified osteomyelitis, shoulder region -73022 Unspecified osteomyelitis, upper arm -73023 Unspecified osteomyelitis, forearm -73024 Unspecified osteomyelitis, hand -73025 Unspecified osteomyelitis, pelvic region and thigh -73026 Unspecified osteomyelitis, lower leg -73027 Unspecified osteomyelitis, ankle and foot -73028 Unspecified osteomyelitis, other specified sites -73029 Unspecified osteomyelitis, multiple sites -73030 Periostitis, without mention of osteomyelitis, site unspecified -73031 Periostitis, without mention of osteomyelitis, shoulder region -73032 Periostitis, without mention of osteomyelitis, upper arm -73033 Periostitis, without mention of osteomyelitis, forearm -73034 Periostitis, without mention of osteomyelitis, hand -73035 Periostitis, without mention of osteomyelitis, pelvic region and thigh -73036 Periostitis, without mention of osteomyelitis, lower leg -73037 Periostitis, without mention of osteomyelitis, ankle and foot -73038 Periostitis, without mention of osteomyelitis, other specified sites -73039 Periostitis, without mention of osteomyelitis, multiple sites -73070 Osteopathy resulting from poliomyelitis, site unspecified -73071 Osteopathy resulting from poliomyelitis, shoulder region -73072 Osteopathy resulting from poliomyelitis, upper arm -73073 Osteopathy resulting from poliomyelitis, forearm -73074 Osteopathy resulting from poliomyelitis, hand -73075 Osteopathy resulting from poliomyelitis, pelvic region and thigh -73076 Osteopathy resulting from poliomyelitis, lower leg -73077 Osteopathy resulting from poliomyelitis, ankle and foot -73078 Osteopathy resulting from poliomyelitis, other specified sites -73079 Osteopathy resulting from poliomyelitis, multiple sites -73080 Other infections involving bone in diseases classified elsewhere, site unspecified -73081 Other infections involving bone in diseases classified elsewhere, shoulder region -73082 Other infections involving bone in diseases classified elsewhere, upper arm -73083 Other infections involving bone in diseases classified elsewhere, forearm -73084 Other infections involving bone in diseases classified elsewhere, hand -73085 Other infections involving bone in diseases classified elsewhere, pelvic region and thigh -73086 Other infections involving bone in diseases classified elsewhere, lower leg -73087 Other infections involving bone in diseases classified elsewhere, ankle and foot -73088 Other infections involving bone in diseases classified elsewhere, other specified sites -73089 Other infections involving bone in diseases classified elsewhere, multiple sites -73090 Unspecified infection of bone, site unspecified -73091 Unspecified infection of bone, shoulder region -73092 Unspecified infection of bone, upper arm -73093 Unspecified infection of bone, forearm -73094 Unspecified infection of bone, hand -73095 Unspecified infection of bone, pelvic region and thigh -73096 Unspecified infection of bone, lower leg -73097 Unspecified infection of bone, ankle and foot -73098 Unspecified infection of bone, other specified sites -73099 Unspecified infection of bone, multiple sites -7310 Osteitis deformans without mention of bone tumor -7311 Osteitis deformans in diseases classified elsewhere -7312 Hypertrophic pulmonary osteoarthropathy -7313 Major osseous defects -7318 Other bone involvement in diseases classified elsewhere -7320 Juvenile osteochondrosis of spine -7321 Juvenile osteochondrosis of hip and pelvis -7322 Nontraumatic slipped upper femoral epiphysis -7323 Juvenile osteochondrosis of upper extremity -7324 Juvenile osteochondrosis of lower extremity, excluding foot -7325 Juvenile osteochondrosis of foot -7326 Other juvenile osteochondrosis -7327 Osteochondritis dissecans -7328 Other specified forms of osteochondropathy -7329 Unspecified osteochondropathy -73300 Osteoporosis, unspecified -73301 Senile osteoporosis -73302 Idiopathic osteoporosis -73303 Disuse osteoporosis -73309 Other osteoporosis -73310 Pathologic fracture, unspecified site -73311 Pathologic fracture of humerus -73312 Pathologic fracture of distal radius and ulna -73313 Pathologic fracture of vertebrae -73314 Pathologic fracture of neck of femur -73315 Pathologic fracture of other specified part of femur -73316 Pathologic fracture of tibia or fibula -73319 Pathologic fracture of other specified site -73320 Cyst of bone (localized), unspecified -73321 Solitary bone cyst -73322 Aneurysmal bone cyst -73329 Other bone cyst -7333 Hyperostosis of skull -73340 Aseptic necrosis of bone, site unspecified -73341 Aseptic necrosis of head of humerus -73342 Aseptic necrosis of head and neck of femur -73343 Aseptic necrosis of medial femoral condyle -73344 Aseptic necrosis of talus -73345 Aseptic necrosis of bone, jaw -73349 Aseptic necrosis of bone, other -7335 Osteitis condensans -7336 Tietze's disease -7337 Algoneurodystrophy -73381 Malunion of fracture -73382 Nonunion of fracture -73390 Disorder of bone and cartilage, unspecified -73391 Arrest of bone development or growth -73392 Chondromalacia -73393 Stress fracture of tibia or fibula -73394 Stress fracture of the metatarsals -73395 Stress fracture of other bone -73396 Stress fracture of femoral neck -73397 Stress fracture of shaft of femur -73398 Stress fracture of pelvis -73399 Other disorders of bone and cartilage -734 Flat foot -7350 Hallux valgus (acquired) -7351 Hallux varus (acquired) -7352 Hallux rigidus -7353 Hallux malleus -7354 Other hammer toe (acquired) -7355 Claw toe (acquired) -7358 Other acquired deformities of toe -7359 Unspecified acquired deformity of toe -73600 Unspecified deformity of forearm, excluding fingers -73601 Cubitus valgus (acquired) -73602 Cubitus varus (acquired) -73603 Valgus deformity of wrist (acquired) -73604 Varus deformity of wrist (acquired) -73605 Wrist drop (acquired) -73606 Claw hand (acquired) -73607 Club hand, acquired -73609 Other acquired deformities of forearm, excluding fingers -7361 Mallet finger -73620 Unspecified deformity of finger -73621 Boutonniere deformity -73622 Swan-neck deformity -73629 Other acquired deformities of finger -73630 Unspecified acquired deformity of hip -73631 Coxa valga (acquired) -73632 Coxa vara (acquired) -73639 Other acquired deformities of hip -73641 Genu valgum (acquired) -73642 Genu varum (acquired) -7365 Genu recurvatum (acquired) -7366 Other acquired deformities of knee -73670 Unspecified deformity of ankle and foot, acquired -73671 Acquired equinovarus deformity -73672 Equinus deformity of foot, acquired -73673 Cavus deformity of foot, acquired -73674 Claw foot, acquired -73675 Cavovarus deformity of foot, acquired -73676 Other acquired calcaneus deformity -73679 Other acquired deformities of ankle and foot -73681 Unequal leg length (acquired) -73689 Other acquired deformity of other parts of limb -7369 Acquired deformity of limb, site unspecified -7370 Adolescent postural kyphosis -73710 Kyphosis (acquired) (postural) -73711 Kyphosis due to radiation -73712 Kyphosis, postlaminectomy -73719 Other kyphosis (acquired) -73720 Lordosis (acquired) (postural) -73721 Lordosis, postlaminectomy -73722 Other postsurgical lordosis -73729 Other lordosis (acquired) -73730 Scoliosis [and kyphoscoliosis], idiopathic -73731 Resolving infantile idiopathic scoliosis -73732 Progressive infantile idiopathic scoliosis -73733 Scoliosis due to radiation -73734 Thoracogenic scoliosis -73739 Other kyphoscoliosis and scoliosis -73740 Curvature of spine, unspecified, associated with other conditions -73741 Kyphosis associated with other conditions -73742 Lordosis associated with other conditions -73743 Scoliosis associated with other conditions -7378 Other curvatures of spine -7379 Unspecified curvature of spine -7380 Acquired deformity of nose -73810 Unspecified acquired deformity of head -73811 Zygomatic hyperplasia -73812 Zygomatic hypoplasia -73819 Other specified acquired deformity of head -7382 Acquired deformity of neck -7383 Acquired deformity of chest and rib -7384 Acquired spondylolisthesis -7385 Other acquired deformity of back or spine -7386 Acquired deformity of pelvis -7387 Cauliflower ear -7388 Acquired deformity of other specified site -7389 Acquired deformity of unspecified site -7390 Nonallopathic lesions, head region -7391 Nonallopathic lesions, cervical region -7392 Nonallopathic lesions, thoracic region -7393 Nonallopathic lesions, lumbar region -7394 Nonallopathic lesions, sacral region -7395 Nonallopathic lesions, pelvic region -7396 Nonallopathic lesions, lower extremities -7397 Nonallopathic lesions, upper extremities -7398 Nonallopathic lesions, rib cage -7399 Nonallopathic lesions, abdomen and other sites -7400 Anencephalus -7401 Craniorachischisis -7402 Iniencephaly -74100 Spina bifida with hydrocephalus, unspecified region -74101 Spina bifida with hydrocephalus, cervical region -74102 Spina bifida with hydrocephalus, dorsal (thoracic) region -74103 Spina bifida with hydrocephalus, lumbar region -74190 Spina bifida without mention of hydrocephalus, unspecified region -74191 Spina bifida without mention of hydrocephalus, cervical region -74192 Spina bifida without mention of hydrocephalus, dorsal (thoracic) region -74193 Spina bifida without mention of hydrocephalus, lumbar region -7420 Encephalocele -7421 Microcephalus -7422 Congenital reduction deformities of brain -7423 Congenital hydrocephalus -7424 Other specified congenital anomalies of brain -74251 Diastematomyelia -74253 Hydromyelia -74259 Other specified congenital anomalies of spinal cord -7428 Other specified congenital anomalies of nervous system -7429 Unspecified congenital anomaly of brain, spinal cord, and nervous system -74300 Clinical anophthalmos, unspecified -74303 Cystic eyeball, congenital -74306 Cryptophthalmos -74310 Microphthalmos, unspecified -74311 Simple microphthalmos -74312 Microphthalmos associated with other anomalies of eye and adnexa -74320 Buphthalmos, unspecified -74321 Simple buphthalmos -74322 Buphthalmos associated with other ocular anomalies -74330 Congenital cataract, unspecified -74331 Congenital capsular and subcapsular cataract -74332 Congenital cortical and zonular cataract -74333 Congenital nuclear cataract -74334 Total and subtotal cataract, congenital -74335 Congenital aphakia -74336 Congenital anomalies of lens shape -74337 Congenital ectopic lens -74339 Other congenital cataract and lens anomalies -74341 Congenital anomalies of corneal size and shape -74342 Corneal opacities, interfering with vision, congenital -74343 Other corneal opacities, congenital -74344 Specified congenital anomalies of anterior chamber, chamber angle, and related structures -74345 Aniridia -74346 Other specified congenital anomalies of iris and ciliary body -74347 Specified congenital anomalies of sclera -74348 Multiple and combined congenital anomalies of anterior segment -74349 Other congenital anomalies of anterior segment -74351 Vitreous anomalies -74352 Fundus coloboma -74353 Chorioretinal degeneration, congenital -74354 Congenital folds and cysts of posterior segment -74355 Congenital macular changes -74356 Other retinal changes, congenital -74357 Specified congenital anomalies of optic disc -74358 Vascular anomalies -74359 Other congenital anomalies of posterior segment -74361 Congenital ptosis -74362 Congenital deformities of eyelids -74363 Other specified congenital anomalies of eyelid -74364 Specified congenital anomalies of lacrimal gland -74365 Specified congenital anomalies of lacrimal passages -74366 Specified congenital anomalies of orbit -74369 Other congenital anomalies of eyelids, lacrimal system, and orbit -7438 Other specified anomalies of eye -7439 Unspecified anomaly of eye -74400 Unspecified anomaly of ear with impairment of hearing -74401 Absence of external ear -74402 Other anomalies of external ear with impairment of hearing -74403 Anomaly of middle ear, except ossicles -74404 Anomalies of ear ossicles -74405 Anomalies of inner ear -74409 Other anomalies of ear causing impairment of hearing -7441 Accessory auricle -74421 Absence of ear lobe, congenital -74422 Macrotia -74423 Microtia -74424 Specified anomalies of Eustachian tube -74429 Other specified anomalies of ear -7443 Unspecified anomaly of ear -74441 Branchial cleft sinus or fistula -74442 Branchial cleft cyst -74443 Cervical auricle -74446 Preauricular sinus or fistula -74447 Preauricular cyst -74449 Other branchial cleft cyst or fistula; preauricular sinus -7445 Webbing of neck -74481 Macrocheilia -74482 Microcheilia -74483 Macrostomia -74484 Microstomia -74489 Other specified congenital anomalies of face and neck -7449 Unspecified congenital anomalies of face and neck -7450 Common truncus -74510 Complete transposition of great vessels -74511 Double outlet right ventricle -74512 Corrected transposition of great vessels -74519 Other transposition of great vessels -7452 Tetralogy of fallot -7453 Common ventricle -7454 Ventricular septal defect -7455 Ostium secundum type atrial septal defect -74560 Endocardial cushion defect, unspecified type -74561 Ostium primum defect -74569 Other endocardial cushion defects -7457 Cor biloculare -7458 Other bulbus cordis anomalies and anomalies of cardiac septal closure -7459 Unspecified defect of septal closure -74600 Congenital pulmonary valve anomaly, unspecified -74601 Atresia of pulmonary valve, congenital -74602 Stenosis of pulmonary valve, congenital -74609 Other congenital anomalies of pulmonary valve -7461 Tricuspid atresia and stenosis, congenital -7462 Ebstein's anomaly -7463 Congenital stenosis of aortic valve -7464 Congenital insufficiency of aortic valve -7465 Congenital mitral stenosis -7466 Congenital mitral insufficiency -7467 Hypoplastic left heart syndrome -74681 Subaortic stenosis -74682 Cor triatriatum -74683 Infundibular pulmonic stenosis -74684 Obstructive anomalies of heart, not elsewhere classified -74685 Coronary artery anomaly -74686 Congenital heart block -74687 Malposition of heart and cardiac apex -74689 Other specified congenital anomalies of heart -7469 Unspecified congenital anomaly of heart -7470 Patent ductus arteriosus -74710 Coarctation of aorta (preductal) (postductal) -74711 Interruption of aortic arch -74720 Anomaly of aorta, unspecified -74721 Anomalies of aortic arch -74722 Atresia and stenosis of aorta -74729 Other anomalies of aorta -74731 Pulmonary artery coarctation and atresia -74732 Pulmonary arteriovenous malformation -74739 Other anomalies of pulmonary artery and pulmonary circulation -74740 Anomaly of great veins, unspecified -74741 Total anomalous pulmonary venous connection -74742 Partial anomalous pulmonary venous connection -74749 Other anomalies of great veins -7475 Absence or hypoplasia of umbilical artery -74760 Anomaly of the peripheral vascular system, unspecified site -74761 Gastrointestinal vessel anomaly -74762 Renal vessel anomaly -74763 Upper limb vessel anomaly -74764 Lower limb vessel anomaly -74769 Anomalies of other specified sites of peripheral vascular system -74781 Anomalies of cerebrovascular system -74782 Spinal vessel anomaly -74783 Persistent fetal circulation -74789 Other specified anomalies of circulatory system -7479 Unspecified anomaly of circulatory system -7480 Choanal atresia -7481 Other anomalies of nose -7482 Web of larynx -7483 Other anomalies of larynx, trachea, and bronchus -7484 Congenital cystic lung -7485 Agenesis, hypoplasia, and dysplasia of lung -74860 Anomaly of lung, unspecified -74861 Congenital bronchiectasis -74869 Other congenital anomalies of lung -7488 Other specified anomalies of respiratory system -7489 Unspecified anomaly of respiratory system -74900 Cleft palate, unspecified -74901 Cleft palate, unilateral, complete -74902 Cleft palate, unilateral, incomplete -74903 Cleft palate, bilateral, complete -74904 Cleft palate, bilateral, incomplete -74910 Cleft lip, unspecified -74911 Cleft lip, unilateral, complete -74912 Cleft lip, unilateral, incomplete -74913 Cleft lip, bilateral, complete -74914 Cleft lip, bilateral, incomplete -74920 Cleft palate with cleft lip, unspecified -74921 Cleft palate with cleft lip, unilateral, complete -74922 Cleft palate with cleft lip, unilateral, incomplete -74923 Cleft palate with cleft lip, bilateral, complete -74924 Cleft palate with cleft lip, bilateral, incomplete -74925 Other combinations of cleft palate with cleft lip -7500 Tongue tie -75010 Congenital anomaly of tongue, unspecified -75011 Aglossia -75012 Congenital adhesions of tongue -75013 Fissure of tongue -75015 Macroglossia -75016 Microglossia -75019 Other congenital anomalies of tongue -75021 Absence of salivary gland -75022 Accessory salivary gland -75023 Atresia, salivary duct -75024 Congenital fistula of salivary gland -75025 Congenital fistula of lip -75026 Other specified anomalies of mouth -75027 Diverticulum of pharynx -75029 Other specified anomalies of pharynx -7503 Tracheoesophageal fistula, esophageal atresia and stenosis -7504 Other specified anomalies of esophagus -7505 Congenital hypertrophic pyloric stenosis -7506 Congenital hiatus hernia -7507 Other specified anomalies of stomach -7508 Other specified anomalies of upper alimentary tract -7509 Unspecified anomaly of upper alimentary tract -7510 Meckel's diverticulum -7511 Atresia and stenosis of small intestine -7512 Atresia and stenosis of large intestine, rectum, and anal canal -7513 Hirschsprung's disease and other congenital functional disorders of colon -7514 Anomalies of intestinal fixation -7515 Other anomalies of intestine -75160 Unspecified anomaly of gallbladder, bile ducts, and liver -75161 Biliary atresia -75162 Congenital cystic disease of liver -75169 Other anomalies of gallbladder, bile ducts, and liver -7517 Anomalies of pancreas -7518 Other specified anomalies of digestive system -7519 Unspecified anomaly of digestive system -7520 Anomalies of ovaries -75210 Unspecified anomaly of fallopian tubes and broad ligaments -75211 Embryonic cyst of fallopian tubes and broad ligaments -75219 Other anomalies of fallopian tubes and broad ligaments -7522 Doubling of uterus -75231 Agenesis of uterus -75232 Hypoplasia of uterus -75233 Unicornuate uterus -75234 Bicornuate uterus -75235 Septate uterus -75236 Arcuate uterus -75239 Other anomalies of uterus -75240 Unspecified anomaly of cervix, vagina, and external female genitalia -75241 Embryonic cyst of cervix, vagina, and external female genitalia -75242 Imperforate hymen -75243 Cervical agenesis -75244 Cervical duplication -75245 Vaginal agenesis -75246 Transverse vaginal septum -75247 Longitudinal vaginal septum -75249 Other anomalies of cervix, vagina, and external female genitalia -75251 Undescended testis -75252 Retractile testis -75261 Hypospadias -75262 Epispadias -75263 Congenital chordee -75264 Micropenis -75265 Hidden penis -75269 Other penile anomalies -7527 Indeterminate sex and pseudohermaphroditism -75281 Scrotal transposition -75289 Other specified anomalies of genital organs -7529 Unspecified anomaly of genital organs -7530 Renal agenesis and dysgenesis -75310 Cystic kidney disease, unspecified -75311 Congenital single renal cyst -75312 Polycystic kidney, unspecified type -75313 Polycystic kidney, autosomal dominant -75314 Polycystic kidney, autosomal recessive -75315 Renal dysplasia -75316 Medullary cystic kidney -75317 Medullary sponge kidney -75319 Other specified cystic kidney disease -75320 Unspecified obstructive defect of renal pelvis and ureter -75321 Congenital obstruction of ureteropelvic junction -75322 Congenital obstruction of ureterovesical junction -75323 Congenital ureterocele -75329 Other obstructive defects of renal pelvis and ureter -7533 Other specified anomalies of kidney -7534 Other specified anomalies of ureter -7535 Exstrophy of urinary bladder -7536 Atresia and stenosis of urethra and bladder neck -7537 Anomalies of urachus -7538 Other specified anomalies of bladder and urethra -7539 Unspecified anomaly of urinary system -7540 Congenital musculoskeletal deformities of skull, face, and jaw -7541 Congenital musculoskeletal deformities of sternocleidomastoid muscle -7542 Congenital musculoskeletal deformities of spine -75430 Congenital dislocation of hip, unilateral -75431 Congenital dislocation of hip, bilateral -75432 Congenital subluxation of hip, unilateral -75433 Congenital subluxation of hip, bilateral -75435 Congenital dislocation of one hip with subluxation of other hip -75440 Genu recurvatum -75441 Congenital dislocation of knee (with genu recurvatum) -75442 Congenital bowing of femur -75443 Congenital bowing of tibia and fibula -75444 Congenital bowing of unspecified long bones of leg -75450 Talipes varus -75451 Talipes equinovarus -75452 Metatarsus primus varus -75453 Metatarsus varus -75459 Other varus deformities of feet -75460 Talipes valgus -75461 Congenital pes planus -75462 Talipes calcaneovalgus -75469 Other valgus deformities of feet -75470 Talipes, unspecified -75471 Talipes cavus -75479 Other deformities of feet -75481 Pectus excavatum -75482 Pectus carinatum -75489 Other specified nonteratogenic anomalies -75500 Polydactyly, unspecified digits -75501 Polydactyly of fingers -75502 Polydactyly of toes -75510 Syndactyly of multiple and unspecified sites -75511 Syndactyly of fingers without fusion of bone -75512 Syndactyly of fingers with fusion of bone -75513 Syndactyly of toes without fusion of bone -75514 Syndactyly of toes with fusion of bone -75520 Unspecified reduction deformity of upper limb -75521 Transverse deficiency of upper limb -75522 Longitudinal deficiency of upper limb, not elsewhere classified -75523 Longitudinal deficiency, combined, involving humerus, radius, and ulna (complete or incomplete) -75524 Longitudinal deficiency, humeral, complete or partial (with or without distal deficiencies, incomplete) -75525 Longitudinal deficiency, radioulnar, complete or partial (with or without distal deficiencies, incomplete) -75526 Longitudinal deficiency, radial, complete or partial (with or without distal deficiencies, incomplete) -75527 Longitudinal deficiency, ulnar, complete or partial (with or without distal deficiencies, incomplete) -75528 Longitudinal deficiency, carpals or metacarpals, complete or partial (with or without incomplete phalangeal deficiency) -75529 Longitudinal deficiency, phalanges, complete or partial -75530 Unspecified reduction deformity of lower limb -75531 Transverse deficiency of lower limb -75532 Longitudinal deficiency of lower limb, not elsewhere classified -75533 Longitudinal deficiency, combined, involving femur, tibia, and fibula (complete or incomplete) -75534 Longitudinal deficiency, femoral, complete or partial (with or without distal deficiencies, incomplete) -75535 Longitudinal deficiency, tibiofibular, complete or partial (with or without distal deficiencies, incomplete) -75536 Longitudinal deficiency, tibia, complete or partial (with or without distal deficiencies, incomplete) -75537 Longitudinal deficiency, fibular, complete or partial (with or without distal deficiencies, incomplete) -75538 Longitudinal deficiency, tarsals or metatarsals, complete or partial (with or without incomplete phalangeal deficiency) -75539 Longitudinal deficiency, phalanges, complete or partial -7554 Reduction deformities, unspecified limb -75550 Unspecified anomaly of upper limb -75551 Congenital deformity of clavicle -75552 Congenital elevation of scapula -75553 Radioulnar synostosis -75554 Madelung's deformity -75555 Acrocephalosyndactyly -75556 Accessory carpal bones -75557 Macrodactylia (fingers) -75558 Cleft hand, congenital -75559 Other anomalies of upper limb, including shoulder girdle -75560 Unspecified anomaly of lower limb -75561 Coxa valga, congenital -75562 Coxa vara, congenital -75563 Other congenital deformity of hip (joint) -75564 Congenital deformity of knee (joint) -75565 Macrodactylia of toes -75566 Other anomalies of toes -75567 Anomalies of foot, not elsewhere classified -75569 Other anomalies of lower limb, including pelvic girdle -7558 Other specified anomalies of unspecified limb -7559 Unspecified anomaly of unspecified limb -7560 Anomalies of skull and face bones -75610 Anomaly of spine, unspecified -75611 Spondylolysis, lumbosacral region -75612 Spondylolisthesis -75613 Absence of vertebra, congenital -75614 Hemivertebra -75615 Fusion of spine (vertebra), congenital -75616 Klippel-Feil syndrome -75617 Spina bifida occulta -75619 Other anomalies of spine -7562 Cervical rib -7563 Other anomalies of ribs and sternum -7564 Chondrodystrophy -75650 Congenital osteodystrophy, unspecified -75651 Osteogenesis imperfecta -75652 Osteopetrosis -75653 Osteopoikilosis -75654 Polyostotic fibrous dysplasia of bone -75655 Chondroectodermal dysplasia -75656 Multiple epiphyseal dysplasia -75659 Other osteodystrophies -7566 Anomalies of diaphragm -75670 Anomaly of abdominal wall, unspecified -75671 Prune belly syndrome -75672 Omphalocele -75673 Gastroschisis -75679 Other congenital anomalies of abdominal wall -75681 Absence of muscle and tendon -75682 Accessory muscle -75683 Ehlers-Danlos syndrome -75689 Other specified anomalies of muscle, tendon, fascia, and connective tissue -7569 Other and unspecified anomalies of musculoskeletal system -7570 Hereditary edema of legs -7571 Ichthyosis congenita -7572 Dermatoglyphic anomalies -75731 Congenital ectodermal dysplasia -75732 Vascular hamartomas -75733 Congenital pigmentary anomalies of skin -75739 Other specified anomalies of skin -7574 Specified anomalies of hair -7575 Specified anomalies of nails -7576 Specified congenital anomalies of breast -7578 Other specified anomalies of the integument -7579 Unspecified congenital anomaly of the integument -7580 Down's syndrome -7581 Patau's syndrome -7582 Edwards' syndrome -75831 Cri-du-chat syndrome -75832 Velo-cardio-facial syndrome -75833 Other microdeletions -75839 Other autosomal deletions -7584 Balanced autosomal translocation in normal individual -7585 Other conditions due to autosomal anomalies -7586 Gonadal dysgenesis -7587 Klinefelter's syndrome -75881 Other conditions due to sex chromosome anomalies -75889 Other conditions due to chromosome anomalies -7589 Conditions due to anomaly of unspecified chromosome -7590 Anomalies of spleen -7591 Anomalies of adrenal gland -7592 Anomalies of other endocrine glands -7593 Situs inversus -7594 Conjoined twins -7595 Tuberous sclerosis -7596 Other hamartoses, not elsewhere classified -7597 Multiple congenital anomalies, so described -75981 Prader-Willi syndrome -75982 Marfan syndrome -75983 Fragile X syndrome -75989 Other specified congenital anomalies -7599 Congenital anomaly, unspecified -7600 Maternal hypertensive disorders affecting fetus or newborn -7601 Maternal renal and urinary tract diseases affecting fetus or newborn -7602 Maternal infections affecting fetus or newborn -7603 Other chronic maternal circulatory and respiratory diseases affecting fetus or newborn -7604 Maternal nutritional disorders affecting fetus or newborn -7605 Maternal injury affecting fetus or newborn -76061 Newborn affected by amniocentesis -76062 Newborn affected by other in utero procedure -76063 Newborn affected by other surgical operations on mother during pregnancy -76064 Newborn affected by previous surgical procedure on mother not associated with pregnancy -76070 Unspecified noxious substance affecting fetus or newborn via placenta or breast milk -76071 Alcohol affecting fetus or newborn via placenta or breast milk -76072 Narcotics affecting fetus or newborn via placenta or breast milk -76073 Hallucinogenic agents affecting fetus or newborn via placenta or breast milk -76074 Anti-infectives affecting fetus or newborn via placenta or breast milk -76075 Cocaine affecting fetus or newborn via placenta or breast milk -76076 Diethylstilbestrol [DES] affecting fetus or newborn via placenta or breast milk -76077 Anticonvulsants affecting fetus or newborn via placenta or breast milk -76078 Antimetabolic agents affecting fetus or newborn via placenta or breast milk -76079 Other noxious influences affecting fetus or newborn via placenta or breast milk -7608 Other specified maternal conditions affecting fetus or newborn -7609 Unspecified maternal condition affecting fetus or newborn -7610 Incompetent cervix affecting fetus or newborn -7611 Premature rupture of membranes affecting fetus or newborn -7612 Oligohydramnios affecting fetus or newborn -7613 Polyhydramnios affecting fetus or newborn -7614 Ectopic pregnancy affecting fetus or newborn -7615 Multiple pregnancy affecting fetus or newborn -7616 Maternal death affecting fetus or newborn -7617 Malpresentation before labor affecting fetus or newborn -7618 Other specified maternal complications of pregnancy affecting fetus or newborn -7619 Unspecified maternal complication of pregnancy affecting fetus or newborn -7620 Placenta previa affecting fetus or newborn -7621 Other forms of placental separation and hemorrhage affecting fetus or newborn -7622 Other and unspecified morphological and functional abnormalities of placenta affecting fetus or newborn -7623 Placental transfusion syndromes affecting fetus or newborn -7624 Prolapsed umbilical cord affecting fetus or newborn -7625 Other compression of umbilical cord affecting fetus or newborn -7626 Other and unspecified conditions of umbilical cord affecting fetus or newborn -7627 Chorioamnionitis affecting fetus or newborn -7628 Other specified abnormalities of chorion and amnion affecting fetus or newborn -7629 Unspecified abnormality of chorion and amnion affecting fetus or newborn -7630 Breech delivery and extraction affecting fetus or newborn -7631 Other malpresentation, malposition, and disproportion during labor and delivery affecting fetus or newborn -7632 Forceps delivery affecting fetus or newborn -7633 Delivery by vacuum extractor affecting fetus or newborn -7634 Cesarean delivery affecting fetus or newborn -7635 Maternal anesthesia and analgesia affecting fetus or newborn -7636 Precipitate delivery affecting fetus or newborn -7637 Abnormal uterine contractions affecting fetus or newborn -76381 Abnormality in fetal heart rate or rhythm before the onset of labor -76382 Abnormality in fetal heart rate or rhythm during labor -76383 Abnormality in fetal heart rate or rhythm, unspecified as to time of onset -76384 Meconium passage during delivery -76389 Other specified complications of labor and delivery affecting fetus or newborn -7639 Unspecified complication of labor and delivery affecting fetus or newborn -76400 "Light-for-dates" without mention of fetal malnutrition, unspecified [weight] -76401 "Light-for-dates" without mention of fetal malnutrition, less than 500 grams -76402 "Light-for-dates" without mention of fetal malnutrition, 500-749 grams -76403 "Light-for-dates" without mention of fetal malnutrition, 750-999 grams -76404 "Light-for-dates" without mention of fetal malnutrition, 1,000- 1,249 grams -76405 "Light-for-dates"without mention of fetal malnutrition, 1,250- 1,499 grams -76406 "Light-for-dates" without mention of fetal malnutrition, 1,500- 1,749 grams -76407 "Light-for-dates" without mention of fetal malnutrition, 1,750- 1,999 grams -76408 "Light-for-dates" without mention of fetal malnutrition, 2,000- 2,499 grams -76409 "Light-for-dates" without mention of fetal malnutrition, 2,500 grams and over -76410 "Light-for-dates" with signs of fetal malnutrition, unspecified [weight] -76411 "Light-for-dates" with signs of fetal malnutrition, less than 500 grams -76412 "Light-for-dates"with signs of fetal malnutrition, 500-749 grams -76413 "Light-for-dates" with signs of fetal malnutrition, 750-999 grams -76414 "Light-for-dates" with signs of fetal malnutrition, 1,000-1,249 grams -76415 "Light-for-dates" with signs of fetal malnutrition, 1,250-1,499 grams -76416 "Light-for-dates" with signs of fetal malnutrition, 1,500-1,749 grams -76417 "Light-for-dates" with signs of fetal malnutrition, 1,750-1,999 grams -76418 "Light-for-dates"with signs of fetal malnutrition, 2,000-2,499 grams -76419 "Light-for-dates"with signs of fetal malnutrition, 2,500 grams and over -76420 Fetal malnutrition without mention of "light-for-dates", unspecified [weight] -76421 Fetal malnutrition without mention of "light-for-dates", less than 500 grams -76422 Fetal malnutrition without mention of "light-for-dates", 500-749 grams -76423 Fetal malnutrition without mention of "light-for-dates", 750-999 grams -76424 Fetal malnutrition without mention of "light-for-dates", 1,000-1,249 grams -76425 Fetal malnutrition without mention of "light-for-dates", 1,250-1,499 grams -76426 Fetal malnutrition without mention of "light-for-dates", 1,500-1,749 grams -76427 Fetal malnutrition without mention of "light-for-dates", 1,750-1,999 grams -76428 Fetal malnutrition without mention of "light-for-dates", 2,000-2,499 grams -76429 Fetal malnutrition without mention of "light-for-dates", 2,500 grams and over -76490 Fetal growth retardation, unspecified, unspecified [weight] -76491 Fetal growth retardation, unspecified, less than 500 grams -76492 Fetal growth retardation, unspecified, 500-749 grams -76493 Fetal growth retardation, unspecified, 750-999 grams -76494 Fetal growth retardation, unspecified, 1,000-1,249 grams -76495 Fetal growth retardation, unspecified, 1,250-1,499 grams -76496 Fetal growth retardation, unspecified, 1,500-1,749 grams -76497 Fetal growth retardation, unspecified, 1,750-1,999 grams -76498 Fetal growth retardation, unspecified, 2,000-2,499 grams -76499 Fetal growth retardation, unspecified, 2,500 grams and over -76500 Extreme immaturity, unspecified [weight] -76501 Extreme immaturity, less than 500 grams -76502 Extreme immaturity, 500-749 grams -76503 Extreme immaturity, 750-999 grams -76504 Extreme immaturity, 1,000-1,249 grams -76505 Extreme immaturity, 1,250-1,499 grams -76506 Extreme immaturity, 1,500-1,749 grams -76507 Extreme immaturity, 1,750-1,999 grams -76508 Extreme immaturity, 2,000-2,499 grams -76509 Extreme immaturity, 2,500 grams and over -76510 Other preterm infants, unspecified [weight] -76511 Other preterm infants, less than 500 grams -76512 Other preterm infants, 500-749 grams -76513 Other preterm infants, 750-999 grams -76514 Other preterm infants, 1,000-1,249 grams -76515 Other preterm infants, 1,250-1,499 grams -76516 Other preterm infants, 1,500-1,749 grams -76517 Other preterm infants, 1,750-1,999 grams -76518 Other preterm infants, 2,000-2,499 grams -76519 Other preterm infants, 2,500 grams and over -76520 Unspecified weeks of gestation -76521 Less than 24 completed weeks of gestation -76522 24 completed weeks of gestation -76523 25-26 completed weeks of gestation -76524 27-28 completed weeks of gestation -76525 29-30 completed weeks of gestation -76526 31-32 completed weeks of gestation -76527 33-34 completed weeks of gestation -76528 35-36 completed weeks of gestation -76529 37 or more completed weeks of gestation -7660 Exceptionally large baby -7661 Other "heavy-for-dates" infants -76621 Post-term infant -76622 Prolonged gestation of infant -7670 Subdural and cerebral hemorrhage -76711 Epicranial subaponeurotic hemorrhage (massive) -76719 Other injuries to scalp -7672 Fracture of clavicle due to birth trauma -7673 Other injuries to skeleton due to birth trauma -7674 Injury to spine and spinal cord due to birth trauma -7675 Facial nerve injury due to birth trauma -7676 Injury to brachial plexus due to birth trauma -7677 Other cranial and peripheral nerve injuries due to birth trauma -7678 Other specified birth trauma -7679 Birth trauma, unspecified -7680 Fetal death from asphyxia or anoxia before onset of labor or at unspecified time -7681 Fetal death from asphyxia or anoxia during labor -7682 Fetal distress before onset of labor, in liveborn infant -7683 Fetal distress first noted during labor and delivery, in liveborn infant -7684 Fetal distress, unspecified as to time of onset, in liveborn infant -7685 Severe birth asphyxia -7686 Mild or moderate birth asphyxia -76870 Hypoxic-ischemic encephalopathy, unspecified -76871 Mild hypoxic-ischemic encephalopathy -76872 Moderate hypoxic-ischemic encephalopathy -76873 Severe hypoxic-ischemic encephalopathy -7689 Unspecified severity of birth asphyxia in liveborn infant -769 Respiratory distress syndrome in newborn -7700 Congenital pneumonia -77010 Fetal and newborn aspiration, unspecified -77011 Meconium aspiration without respiratory symptoms -77012 Meconium aspiration with respiratory symptoms -77013 Aspiration of clear amniotic fluid without respiratory symptoms -77014 Aspiration of clear amniotic fluid with respiratory symptoms -77015 Aspiration of blood without respiratory symptoms -77016 Aspiration of blood with respiratory symptoms -77017 Other fetal and newborn aspiration without respiratory symptoms -77018 Other fetal and newborn aspiration with respiratory symptoms -7702 Interstitial emphysema and related conditions -7703 Pulmonary hemorrhage -7704 Primary atelectasis -7705 Other and unspecified atelectasis -7706 Transitory tachypnea of newborn -7707 Chronic respiratory disease arising in the perinatal period -77081 Primary apnea of newborn -77082 Other apnea of newborn -77083 Cyanotic attacks of newborn -77084 Respiratory failure of newborn -77085 Aspiration of postnatal stomach contents without respiratory symptoms -77086 Aspiration of postnatal stomach contents with respiratory symptoms -77087 Respiratory arrest of newborn -77088 Hypoxemia of newborn -77089 Other respiratory problems after birth -7709 Unspecified respiratory condition of fetus and newborn -7710 Congenital rubella -7711 Congenital cytomegalovirus infection -7712 Other congenital infections specific to the perinatal period -7713 Tetanus neonatorum -7714 Omphalitis of the newborn -7715 Neonatal infective mastitis -7716 Neonatal conjunctivitis and dacryocystitis -7717 Neonatal Candida infection -77181 Septicemia [sepsis] of newborn -77182 Urinary tract infection of newborn -77183 Bacteremia of newborn -77189 Other infections specific to the perinatal period -7720 Fetal blood loss -77210 Intraventricular hemorrhage unspecified grade -77211 Intraventricular hemorrhage, grade I -77212 Intraventricular hemorrhage, grade II -77213 Intraventricular hemorrhage, grade III -77214 Intraventricular hemorrhage, grade IV -7722 Subarachnoid hemorrhage of fetus or newborn -7723 Umbilical hemorrhage after birth -7724 Gastrointestinal hemorrhage of fetus or newborn -7725 Adrenal hemorrhage of fetus or newborn -7726 Cutaneous hemorrhage of fetus or newborn -7728 Other specified hemorrhage of fetus or newborn -7729 Unspecified hemorrhage of newborn -7730 Hemolytic disease of fetus or newborn due to Rh isoimmunization -7731 Hemolytic disease of fetus or newborn due to ABO isoimmunization -7732 Hemolytic disease of fetus or newborn due to other and unspecified isoimmunization -7733 Hydrops fetalis due to isoimmunization -7734 Kernicterus of fetus or newborn due to isoimmunization -7735 Late anemia of fetus or newborn due to isoimmunization -7740 Perinatal jaundice from hereditary hemolytic anemias -7741 Perinatal jaundice from other excessive hemolysis -7742 Neonatal jaundice associated with preterm delivery -77430 Neonatal jaundice due to delayed conjugation, cause unspecified -77431 Neonatal jaundice due to delayed conjugation in diseases classified elsewhere -77439 Other neonatal jaundice due to delayed conjugation from other causes -7744 Perinatal jaundice due to hepatocellular damage -7745 Perinatal jaundice from other causes -7746 Unspecified fetal and neonatal jaundice -7747 Kernicterus of fetus or newborn not due to isoimmunization -7750 Syndrome of "infant of a diabetic mother" -7751 Neonatal diabetes mellitus -7752 Neonatal myasthenia gravis -7753 Neonatal thyrotoxicosis -7754 Hypocalcemia and hypomagnesemia of newborn -7755 Other transitory neonatal electrolyte disturbances -7756 Neonatal hypoglycemia -7757 Late metabolic acidosis of newborn -77581 Other acidosis of newborn -77589 Other neonatal endocrine and metabolic disturbances -7759 Unspecified endocrine and metabolic disturbances specific to the fetus and newborn -7760 Hemorrhagic disease of newborn -7761 Transient neonatal thrombocytopenia -7762 Disseminated intravascular coagulation in newborn -7763 Other transient neonatal disorders of coagulation -7764 Polycythemia neonatorum -7765 Congenital anemia -7766 Anemia of prematurity -7767 Transient neonatal neutropenia -7768 Other specified transient hematological disorders of fetus or newborn -7769 Unspecified hematological disorder specific to newborn -7771 Meconium obstruction in fetus or newborn -7772 Intestinal obstruction in newborn due to inspissated milk -7773 Hematemesis and melena of newborn due to swallowed maternal blood -7774 Transitory ileus of newborn -77750 Necrotizing enterocolitis in newborn, unspecified -77751 Stage I necrotizing enterocolitis in newborn -77752 Stage II necrotizing enterocolitis in newborn -77753 Stage III necrotizing enterocolitis in newborn -7776 Perinatal intestinal perforation -7778 Other specified perinatal disorders of digestive system -7779 Unspecified perinatal disorder of digestive system -7780 Hydrops fetalis not due to isoimmunization -7781 Sclerema neonatorum -7782 Cold injury syndrome of newborn -7783 Other hypothermia of newborn -7784 Other disturbances of temperature regulation of newborn -7785 Other and unspecified edema of newborn -7786 Congenital hydrocele -7787 Breast engorgement in newborn -7788 Other specified conditions involving the integument of fetus and newborn -7789 Unspecified condition involving the integument and temperature regulation of fetus and newborn -7790 Convulsions in newborn -7791 Other and unspecified cerebral irritability in newborn -7792 Cerebral depression, coma, and other abnormal cerebral signs in fetus or newborn -77931 Feeding problems in newborn -77932 Bilious vomiting in newborn -77933 Other vomiting in newborn -77934 Failure to thrive in newborn -7794 Drug reactions and intoxications specific to newborn -7795 Drug withdrawal syndrome in newborn -7796 Termination of pregnancy (fetus) -7797 Periventricular leukomalacia -77981 Neonatal bradycardia -77982 Neonatal tachycardia -77983 Delayed separation of umbilical cord -77984 Meconium staining -77985 Cardiac arrest of newborn -77989 Other specified conditions originating in the perinatal period -7799 Unspecified condition originating in the perinatal period -78001 Coma -78002 Transient alteration of awareness -78003 Persistent vegetative state -78009 Other alteration of consciousness -7801 Hallucinations -7802 Syncope and collapse -78031 Febrile convulsions (simple), unspecified -78032 Complex febrile convulsions -78033 Post traumatic seizures -78039 Other convulsions -7804 Dizziness and giddiness -78050 Sleep disturbance, unspecified -78051 Insomnia with sleep apnea, unspecified -78052 Insomnia, unspecified -78053 Hypersomnia with sleep apnea, unspecified -78054 Hypersomnia, unspecified -78055 Disruption of 24 hour sleep wake cycle, unspecified -78056 Dysfunctions associated with sleep stages or arousal from sleep -78057 Unspecified sleep apnea -78058 Sleep related movement disorder, unspecified -78059 Other sleep disturbances -78060 Fever, unspecified -78061 Fever presenting with conditions classified elsewhere -78062 Postprocedural fever -78063 Postvaccination fever -78064 Chills (without fever) -78065 Hypothermia not associated with low environmental temperature -78066 Febrile nonhemolytic transfusion reaction -78071 Chronic fatigue syndrome -78072 Functional quadriplegia -78079 Other malaise and fatigue -7808 Generalized hyperhidrosis -78091 Fussy infant (baby) -78092 Excessive crying of infant (baby) -78093 Memory loss -78094 Early satiety -78095 Excessive crying of child, adolescent, or adult -78096 Generalized pain -78097 Altered mental status -78099 Other general symptoms -7810 Abnormal involuntary movements -7811 Disturbances of sensation of smell and taste -7812 Abnormality of gait -7813 Lack of coordination -7814 Transient paralysis of limb -7815 Clubbing of fingers -7816 Meningismus -7817 Tetany -7818 Neurologic neglect syndrome -78191 Loss of height -78192 Abnormal posture -78193 Ocular torticollis -78194 Facial weakness -78199 Other symptoms involving nervous and musculoskeletal systems -7820 Disturbance of skin sensation -7821 Rash and other nonspecific skin eruption -7822 Localized superficial swelling, mass, or lump -7823 Edema -7824 Jaundice, unspecified, not of newborn -7825 Cyanosis -78261 Pallor -78262 Flushing -7827 Spontaneous ecchymoses -7828 Changes in skin texture -7829 Other symptoms involving skin and integumentary tissues -7830 Anorexia -7831 Abnormal weight gain -78321 Loss of weight -78322 Underweight -7833 Feeding difficulties and mismanagement -78340 Lack of normal physiological development, unspecified -78341 Failure to thrive -78342 Delayed milestones -78343 Short stature -7835 Polydipsia -7836 Polyphagia -7837 Adult failure to thrive -7839 Other symptoms concerning nutrition, metabolism, and development -7840 Headache -7841 Throat pain -7842 Swelling, mass, or lump in head and neck -7843 Aphasia -78440 Voice and resonance disorder, unspecified -78441 Aphonia -78442 Dysphonia -78443 Hypernasality -78444 Hyponasality -78449 Other voice and resonance disorders -78451 Dysarthria -78452 Fluency disorder in conditions classified elsewhere -78459 Other speech disturbance -78460 Symbolic dysfunction, unspecified -78461 Alexia and dyslexia -78469 Other symbolic dysfunction -7847 Epistaxis -7848 Hemorrhage from throat -78491 Postnasal drip -78492 Jaw pain -78499 Other symptoms involving head and neck -7850 Tachycardia, unspecified -7851 Palpitations -7852 Undiagnosed cardiac murmurs -7853 Other abnormal heart sounds -7854 Gangrene -78550 Shock, unspecified -78551 Cardiogenic shock -78552 Septic shock -78559 Other shock without mention of trauma -7856 Enlargement of lymph nodes -7859 Other symptoms involving cardiovascular system -78600 Respiratory abnormality, unspecified -78601 Hyperventilation -78602 Orthopnea -78603 Apnea -78604 Cheyne-Stokes respiration -78605 Shortness of breath -78606 Tachypnea -78607 Wheezing -78609 Other respiratory abnormalities -7861 Stridor -7862 Cough -78630 Hemoptysis, unspecified -78631 Acute idiopathic pulmonary hemorrhage in infants [AIPHI] -78639 Other hemoptysis -7864 Abnormal sputum -78650 Chest pain, unspecified -78651 Precordial pain -78652 Painful respiration -78659 Other chest pain -7866 Swelling, mass, or lump in chest -7867 Abnormal chest sounds -7868 Hiccough -7869 Other symptoms involving respiratory system and chest -78701 Nausea with vomiting -78702 Nausea alone -78703 Vomiting alone -78704 Bilious emesis -7871 Heartburn -78720 Dysphagia, unspecified -78721 Dysphagia, oral phase -78722 Dysphagia, oropharyngeal phase -78723 Dysphagia, pharyngeal phase -78724 Dysphagia, pharyngoesophageal phase -78729 Other dysphagia -7873 Flatulence, eructation, and gas pain -7874 Visible peristalsis -7875 Abnormal bowel sounds -78760 Full incontinence of feces -78761 Incomplete defecation -78762 Fecal smearing -78763 Fecal urgency -7877 Abnormal feces -78791 Diarrhea -78799 Other symptoms involving digestive system -7880 Renal colic -7881 Dysuria -78820 Retention of urine, unspecified -78821 Incomplete bladder emptying -78829 Other specified retention of urine -78830 Urinary incontinence, unspecified -78831 Urge incontinence -78832 Stress incontinence, male -78833 Mixed incontinence (male) (female) -78834 Incontinence without sensory awareness -78835 Post-void dribbling -78836 Nocturnal enuresis -78837 Continuous leakage -78838 Overflow incontinence -78839 Other urinary incontinence -78841 Urinary frequency -78842 Polyuria -78843 Nocturia -7885 Oliguria and anuria -78861 Splitting of urinary stream -78862 Slowing of urinary stream -78863 Urgency of urination -78864 Urinary hesitancy -78865 Straining on urination -78869 Other abnormality of urination -7887 Urethral discharge -7888 Extravasation of urine -78891 Functional urinary incontinence -78899 Other symptoms involving urinary system -78900 Abdominal pain, unspecified site -78901 Abdominal pain, right upper quadrant -78902 Abdominal pain, left upper quadrant -78903 Abdominal pain, right lower quadrant -78904 Abdominal pain, left lower quadrant -78905 Abdominal pain, periumbilic -78906 Abdominal pain, epigastric -78907 Abdominal pain, generalized -78909 Abdominal pain, other specified site -7891 Hepatomegaly -7892 Splenomegaly -78930 Abdominal or pelvic swelling, mass, or lump, unspecified site -78931 Abdominal or pelvic swelling, mass, or lump, right upper quadrant -78932 Abdominal or pelvic swelling, mass, or lump, left upper quadrant -78933 Abdominal or pelvic swelling, mass, or lump, right lower quadrant -78934 Abdominal or pelvic swelling, mass, or lump, left lower quadrant -78935 Abdominal or pelvic swelling, mass, or lump, periumbilic -78936 Abdominal or pelvic swelling, mass, or lump, epigastric -78937 Abdominal or pelvic swelling, mass, or lump, generalized -78939 Abdominal or pelvic swelling, mass, or lump, other specified site -78940 Abdominal rigidity, unspecified site -78941 Abdominal rigidity, right upper quadrant -78942 Abdominal rigidity, left upper quadrant -78943 Abdominal rigidity, right lower quadrant -78944 Abdominal rigidity, left lower quadrant -78945 Abdominal rigidity, periumbilic -78946 Abdominal rigidity, epigastric -78947 Abdominal rigidity, generalized -78949 Abdominal rigidity, other specified site -78951 Malignant ascites -78959 Other ascites -78960 Abdominal tenderness, unspecified site -78961 Abdominal tenderness, right upper quadrant -78962 Abdominal tenderness, left upper quadrant -78963 Abdominal tenderness, right lower quadrant -78964 Abdominal tenderness, left lower quadrant -78965 Abdominal tenderness, periumbilic -78966 Abdominal tenderness, epigastric -78967 Abdominal tenderness, generalized -78969 Abdominal tenderness, other specified site -7897 Colic -7899 Other symptoms involving abdomen and pelvis -79001 Precipitous drop in hematocrit -79009 Other abnormality of red blood cells -7901 Elevated sedimentation rate -79021 Impaired fasting glucose -79022 Impaired glucose tolerance test (oral) -79029 Other abnormal glucose -7903 Excessive blood level of alcohol -7904 Nonspecific elevation of levels of transaminase or lactic acid dehydrogenase [LDH] -7905 Other nonspecific abnormal serum enzyme levels -7906 Other abnormal blood chemistry -7907 Bacteremia -7908 Viremia, unspecified -79091 Abnormal arterial blood gases -79092 Abnormal coagulation profile -79093 Elevated prostate specific antigen [PSA] -79094 Euthyroid sick syndrome -79095 Elevated C-reactive protein (CRP) -79099 Other nonspecific findings on examination of blood -7910 Proteinuria -7911 Chyluria -7912 Hemoglobinuria -7913 Myoglobinuria -7914 Biliuria -7915 Glycosuria -7916 Acetonuria -7917 Other cells and casts in urine -7919 Other nonspecific findings on examination of urine -7920 Nonspecific abnormal findings in cerebrospinal fluid -7921 Nonspecific abnormal findings in stool contents -7922 Nonspecific abnormal findings in semen -7923 Nonspecific abnormal findings in amniotic fluid -7924 Nonspecific abnormal findings in saliva -7925 Cloudy (hemodialysis) (peritoneal) dialysis effluent -7929 Other nonspecific abnormal findings in body substances -7930 Nonspecific (abnormal) findings on radiological and other examination of skull and head -79311 Solitary pulmonary nodule -79319 Other nonspecific abnormal finding of lung field -7932 Nonspecific (abnormal) findings on radiological and other examination of other intrathoracic organs -7933 Nonspecific (abnormal) findings on radiological and other examination of biliary tract -7934 Nonspecific (abnormal) findings on radiological and other examination of gastrointestinal tract -7935 Nonspecific (abnormal) findings on radiological and other examination of genitourinary organs -7936 Nonspecific (abnormal) findings on radiological and other examination of abdominal area, including retroperitoneum -7937 Nonspecific (abnormal) findings on radiological and other examination of musculoskeletal system -79380 Abnormal mammogram, unspecified -79381 Mammographic microcalcification -79382 Inconclusive mammogram -79389 Other (abnormal) findings on radiological examination of breast -79391 Image test inconclusive due to excess body fat -79399 Other nonspecific (abnormal) findings on radiological and other examinations of body structure -79400 Abnormal function study of brain and central nervous system, unspecified -79401 Nonspecific abnormal echoencephalogram -79402 Nonspecific abnormal electroencephalogram [EEG] -79409 Other nonspecific abnormal results of function study of brain and central nervous system -79410 Nonspecific abnormal response to nerve stimulation, unspecified -79411 Nonspecific abnormal retinal function studies -79412 Nonspecific abnormal electro-oculogram [EOG] -79413 Nonspecific abnormal visually evoked potential -79414 Nonspecific abnormal oculomotor studies -79415 Nonspecific abnormal auditory function studies -79416 Nonspecific abnormal vestibular function studies -79417 Nonspecific abnormal electromyogram [EMG] -79419 Other nonspecific abnormal results of function study of peripheral nervous system and special senses -7942 Nonspecific abnormal results of pulmonary function study -79430 Abnormal cardiovascular function study, unspecified -79431 Nonspecific abnormal electrocardiogram [ECG] [EKG] -79439 Other nonspecific abnormal results of function study of cardiovascular system -7944 Nonspecific abnormal results of function study of kidney -7945 Nonspecific abnormal results of function study of thyroid -7946 Nonspecific abnormal results of other endocrine function study -7947 Nonspecific abnormal results of function study of basal metabolism -7948 Nonspecific abnormal results of function study of liver -7949 Nonspecific abnormal results of other specified function study -79500 Abnormal glandular Papanicolaou smear of cervix -79501 Papanicolaou smear of cervix with atypical squamous cells of undetermined significance (ASC-US) -79502 Papanicolaou smear of cervix with atypical squamous cells cannot exclude high grade squamous intraepithelial lesion (ASC-H) -79503 Papanicolaou smear of cervix with low grade squamous intraepithelial lesion (LGSIL) -79504 Papanicolaou smear of cervix with high grade squamous intraepithelial lesion (HGSIL) -79505 Cervical high risk human papillomavirus (HPV) DNA test positive -79506 Papanicolaou smear of cervix with cytologic evidence of malignancy -79507 Satisfactory cervical smear but lacking transformation zone -79508 Unsatisfactory cervical cytology smear -79509 Other abnormal Papanicolaou smear of cervix and cervical HPV -79510 Abnormal glandular Papanicolaou smear of vagina -79511 Papanicolaou smear of vagina with atypical squamous cells of undetermined significance (ASC-US) -79512 Papanicolaou smear of vagina with atypical squamous cells cannot exclude high grade squamous intraepithelial lesion (ASC-H) -79513 Papanicolaou smear of vagina with low grade squamous intraepithelial lesion (LGSIL) -79514 Papanicolaou smear of vagina with high grade squamous intraepithelial lesion (HGSIL) -79515 Vaginal high risk human papillomavirus (HPV) DNA test positive -79516 Papanicolaou smear of vagina with cytologic evidence of malignancy -79518 Unsatisfactory vaginal cytology smear -79519 Other abnormal Papanicolaou smear of vagina and vaginal HPV -7952 Nonspecific abnormal findings on chromosomal analysis -79531 Nonspecific positive findings for anthrax -79539 Other nonspecific positive culture findings -7954 Other nonspecific abnormal histological findings -79551 Nonspecific reaction to tuberculin skin test without active tuberculosis -79552 Nonspecific reaction to cell mediated immunity measurement of gamma interferon antigen response without active tuberculosis -7956 False positive serological test for syphilis -79571 Nonspecific serologic evidence of human immunodeficiency virus [HIV] -79579 Other and unspecified nonspecific immunological findings -79581 Elevated carcinoembryonic antigen [CEA] -79582 Elevated cancer antigen 125 [CA 125] -79589 Other abnormal tumor markers -7960 Nonspecific abnormal toxicological findings -7961 Abnormal reflex -7962 Elevated blood pressure reading without diagnosis of hypertension -7963 Nonspecific low blood pressure reading -7964 Other abnormal clinical findings -7965 Abnormal finding on antenatal screening -7966 Abnormal findings on neonatal screening -79670 Abnormal glandular Papanicolaou smear of anus -79671 Papanicolaou smear of anus with atypical squamous cells of undetermined significance (ASC-US) -79672 Papanicolaou smear of anus with atypical squamous cells cannot exclude high grade squamous intraepithelial lesion (ASC-H) -79673 Papanicolaou smear of anus with low grade squamous intraepithelial lesion (LGSIL) -79674 Papanicolaou smear of anus with high grade squamous intraepithelial lesion (HGSIL) -79675 Anal high risk human papillomavirus (HPV) DNA test positive -79676 Papanicolaou smear of anus with cytologic evidence of malignancy -79677 Satisfactory anal smear but lacking transformation zone -79678 Unsatisfactory anal cytology smear -79679 Other abnormal Papanicolaou smear of anus and anal HPV -7969 Other nonspecific abnormal findings -797 Senility without mention of psychosis -7980 Sudden infant death syndrome -7981 Instantaneous death -7982 Death occurring in less than 24 hours from onset of symptoms, not otherwise explained -7989 Unattended death -79901 Asphyxia -79902 Hypoxemia -7991 Respiratory arrest -79921 Nervousness -79922 Irritability -79923 Impulsiveness -79924 Emotional lability -79925 Demoralization and apathy -79929 Other signs and symptoms involving emotional state -7993 Debility, unspecified -7994 Cachexia -79951 Attention or concentration deficit -79952 Cognitive communication deficit -79953 Visuospatial deficit -79954 Psychomotor deficit -79955 Frontal lobe and executive function deficit -79959 Other signs and symptoms involving cognition -79981 Decreased libido -79982 Apparent life threatening event in infant -79989 Other ill-defined conditions -7999 Other unknown and unspecified cause of morbidity and mortality -80000 Closed fracture of vault of skull without mention of intracranial injury, unspecified state of consciousness -80001 Closed fracture of vault of skull without mention of intracranial injury, with no loss of consciousness -80002 Closed fracture of vault of skull without mention of intracranial injury, with brief [less than one hour] loss of consciousness -80003 Closed fracture of vault of skull without mention of intracranial injury, with moderate [1-24 hours] loss of consciousness -80004 Closed fracture of vault of skull without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80005 Closed fracture of vault of skull without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80006 Closed fracture of vault of skull without mention of intracranial injury, with loss of consciousness of unspecified duration -80009 Closed fracture of vault of skull without mention of intracranial injury, with concussion, unspecified -80010 Closed fracture of vault of skull with cerebral laceration and contusion, unspecified state of consciousness -80011 Closed fracture of vault of skull with cerebral laceration and contusion, with no loss of consciousness -80012 Closed fracture of vault of skull with cerebral laceration and contusion, with brief [less than one hour] loss of consciousness -80013 Closed fracture of vault of skull with cerebral laceration and contusion, with moderate [1-24 hours] loss of consciousness -80014 Closed fracture of vault of skull with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80015 Closed fracture of vault of skull with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80016 Closed fracture of vault of skull with cerebral laceration and contusion, with loss of consciousness of unspecified duration -80019 Closed fracture of vault of skull with cerebral laceration and contusion, with concussion, unspecified -80020 Closed fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, unspecified state of consciousness -80021 Closed fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with no loss of consciousness -80022 Closed fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with brief [less than one hour] loss of consciousness -80023 Closed fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with moderate [1-24 hours] loss of consciousness -80024 Closed fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80025 Closed fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80026 Closed fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with loss of consciousness of unspecified duration -80029 Closed fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with concussion, unspecified -80030 Closed fracture of vault of skull with other and unspecified intracranial hemorrhage, unspecified state of consciousness -80031 Closed fracture of vault of skull with other and unspecified intracranial hemorrhage, with no loss of consciousness -80032 Closed fracture of vault of skull with other and unspecified intracranial hemorrhage, with brief [less than one hour] loss of consciousness -80033 Closed fracture of vault of skull with other and unspecified intracranial hemorrhage, with moderate [1-24 hours] loss of consciousness -80034 Closed fracture of vault of skull with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80035 Closed fracture of vault of skull with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80036 Closed fracture of vault of skull with other and unspecified intracranial hemorrhage, with loss of consciousness of unspecified duration -80039 Closed fracture of vault of skull with other and unspecified intracranial hemorrhage, with concussion, unspecified -80040 Closed fracture of vault of skull with intracranial injury of other and unspecified nature, unspecified state of consciousness -80041 Closed fracture of vault of skull with intracranial injury of other and unspecified nature, with no loss of consciousness -80042 Closed fracture of vault of skull with intracranial injury of other and unspecified nature, with brief [less than one hour] loss of consciousness -80043 Closed fracture of vault of skull with intracranial injury of other and unspecified nature, with moderate [1-24 hours] loss of consciousness -80044 Closed fracture of vault of skull with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80045 Closed fracture of vault of skull with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80046 Closed fracture of vault of skull with intracranial injury of other and unspecified nature, with loss of consciousness of unspecified duration -80049 Closed fracture of vault of skull with intracranial injury of other and unspecified nature, with concussion, unspecified -80050 Open fracture of vault of skull without mention of intracranial injury, unspecified state of consciousness -80051 Open fracture of vault of skull without mention of intracranial injury, with no loss of consciousness -80052 Open fracture of vault of skull without mention of intracranial injury, with brief [less than one hour] loss of consciousness -80053 Open fracture of vault of skull without mention of intracranial injury, with moderate [1-24 hours] loss of consciousness -80054 Open fracture of vault of skull without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80055 Open fracture of vault of skull without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80056 Open fracture of vault of skull without mention of intracranial injury, with loss of consciousness of unspecified duration -80059 Open fracture of vault of skull without mention of intracranial injury, with concussion, unspecified -80060 Open fracture of vault of skull with cerebral laceration and contusion, unspecified state of consciousness -80061 Open fracture of vault of skull with cerebral laceration and contusion, with no loss of consciousness -80062 Open fracture of vault of skull with cerebral laceration and contusion, with brief [less than one hour] loss of consciousness -80063 Open fracture of vault of skull with cerebral laceration and contusion, with moderate [1-24 hours] loss of consciousness -80064 Open fracture of vault of skull with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80065 Open fracture of vault of skull with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80066 Open fracture of vault of skull with cerebral laceration and contusion, with loss of consciousness of unspecified duration -80069 Open fracture of vault of skull with cerebral laceration and contusion, with concussion, unspecified -80070 Open fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, unspecified state of consciousness -80071 Open fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with no loss of consciousness -80072 Open fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with brief [less than one hour] loss of consciousness -80073 Open fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with moderate [1-24 hours] loss of consciousness -80074 Open fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80075 Open fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80076 Open fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with loss of consciousness of unspecified duration -80079 Open fracture of vault of skull with subarachnoid, subdural, and extradural hemorrhage, with concussion, unspecified -80080 Open fracture of vault of skull with other and unspecified intracranial hemorrhage, unspecified state of consciousness -80081 Open fracture of vault of skull with other and unspecified intracranial hemorrhage, with no loss of consciousness -80082 Open fracture of vault of skull with other and unspecified intracranial hemorrhage, with brief [less than one hour] loss of consciousness -80083 Open fracture of vault of skull with other and unspecified intracranial hemorrhage, with moderate [1-24 hours] loss of consciousness -80084 Open fracture of vault of skull with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80085 Open fracture of vault of skull with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80086 Open fracture of vault of skull with other and unspecified intracranial hemorrhage, with loss of consciousness of unspecified duration -80089 Open fracture of vault of skull with other and unspecified intracranial hemorrhage, with concussion, unspecified -80090 Open fracture of vault of skull with intracranial injury of other and unspecified nature, unspecified state of consciousness -80091 Open fracture of vault of skull with intracranial injury of other and unspecified nature, with no loss of consciousness -80092 Open fracture of vault of skull with intracranial injury of other and unspecified nature, with brief [less than one hour] loss of consciousness -80093 Open fracture of vault of skull with intracranial injury of other and unspecified nature, with moderate [1-24 hours] loss of consciousness -80094 Open fracture of vault of skull with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80095 Open fracture of vault of skull with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80096 Open fracture of vault of skull with intracranial injury of other and unspecified nature, with loss of consciousness of unspecified duration -80099 Open fracture of vault of skull with intracranial injury of other and unspecified nature, with concussion, unspecified -80100 Closed fracture of base of skull without mention of intra cranial injury, unspecified state of consciousness -80101 Closed fracture of base of skull without mention of intra cranial injury, with no loss of consciousness -80102 Closed fracture of base of skull without mention of intra cranial injury, with brief [less than one hour] loss of consciousness -80103 Closed fracture of base of skull without mention of intra cranial injury, with moderate [1-24 hours] loss of consciousness -80104 Closed fracture of base of skull without mention of intra cranial injury, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80105 Closed fracture of base of skull without mention of intra cranial injury, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80106 Closed fracture of base of skull without mention of intra cranial injury, with loss of consciousness of unspecified duration -80109 Closed fracture of base of skull without mention of intra cranial injury, with concussion, unspecified -80110 Closed fracture of base of skull with cerebral laceration and contusion, unspecified state of consciousness -80111 Closed fracture of base of skull with cerebral laceration and contusion, with no loss of consciousness -80112 Closed fracture of base of skull with cerebral laceration and contusion, with brief [less than one hour] loss of consciousness -80113 Closed fracture of base of skull with cerebral laceration and contusion, with moderate [1-24 hours] loss of consciousness -80114 Closed fracture of base of skull with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80115 Closed fracture of base of skull with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80116 Closed fracture of base of skull with cerebral laceration and contusion, with loss of consciousness of unspecified duration -80119 Closed fracture of base of skull with cerebral laceration and contusion, with concussion, unspecified -80120 Closed fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, unspecified state of consciousness -80121 Closed fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with no loss of consciousness -80122 Closed fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with brief [less than one hour] loss of consciousness -80123 Closed fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with moderate [1-24 hours] loss of consciousness -80124 Closed fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80125 Closed fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80126 Closed fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with loss of consciousness of unspecified duration -80129 Closed fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with concussion, unspecified -80130 Closed fracture of base of skull with other and unspecified intracranial hemorrhage, unspecified state of consciousness -80131 Closed fracture of base of skull with other and unspecified intracranial hemorrhage, with no loss of consciousness -80132 Closed fracture of base of skull with other and unspecified intracranial hemorrhage, with brief [less than one hour] loss of consciousness -80133 Closed fracture of base of skull with other and unspecified intracranial hemorrhage, with moderate [1-24 hours] loss of consciousness -80134 Closed fracture of base of skull with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80135 Closed fracture of base of skull with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80136 Closed fracture of base of skull with other and unspecified intracranial hemorrhage, with loss of consciousness of unspecified duration -80139 Closed fracture of base of skull with other and unspecified intracranial hemorrhage, with concussion, unspecified -80140 Closed fracture of base of skull with intracranial injury of other and unspecified nature, unspecified state of consciousness -80141 Closed fracture of base of skull with intracranial injury of other and unspecified nature, with no loss of consciousness -80142 Closed fracture of base of skull with intracranial injury of other and unspecified nature, with brief [less than one hour] loss of consciousness -80143 Closed fracture of base of skull with intracranial injury of other and unspecified nature, with moderate [1-24 hours] loss of consciousness -80144 Closed fracture of base of skull with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours) loss of consciousness and return to pre-existing conscious level -80145 Closed fracture of base of skull with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80146 Closed fracture of base of skull with intracranial injury of other and unspecified nature, with loss of consciousness of unspecified duration -80149 Closed fracture of base of skull with intracranial injury of other and unspecified nature, with concussion, unspecified -80150 Open fracture of base of skull without mention of intracranial injury, unspecified state of consciousness -80151 Open fracture of base of skull without mention of intracranial injury, with no loss of consciousness -80152 Open fracture of base of skull without mention of intracranial injury, with brief [less than one hour] loss of consciousness -80153 Open fracture of base of skull without mention of intracranial injury, with moderate [1-24 hours] loss of consciousness -80154 Open fracture of base of skull without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80155 Open fracture of base of skull without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80156 Open fracture of base of skull without mention of intracranial injury, with loss of consciousness of unspecified duration -80159 Open fracture of base of skull without mention of intracranial injury, with concussion, unspecified -80160 Open fracture of base of skull with cerebral laceration and contusion, unspecified state of consciousness -80161 Open fracture of base of skull with cerebral laceration and contusion, with no loss of consciousness -80162 Open fracture of base of skull with cerebral laceration and contusion, with brief [less than one hour] loss of consciousness -80163 Open fracture of base of skull with cerebral laceration and contusion, with moderate [1-24 hours] loss of consciousness -80164 Open fracture of base of skull with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80165 Open fracture of base of skull with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80166 Open fracture of base of skull with cerebral laceration and contusion, with loss of consciousness of unspecified duration -80169 Open fracture of base of skull with cerebral laceration and contusion, with concussion, unspecified -80170 Open fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, unspecified state of consciousness -80171 Open fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with no loss of consciousness -80172 Open fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with brief [less than one hour] loss of consciousness -80173 Open fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with moderate [1-24 hours] loss of consciousness -80174 Open fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80175 Open fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80176 Open fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with loss of consciousness of unspecified duration -80179 Open fracture of base of skull with subarachnoid, subdural, and extradural hemorrhage, with concussion, unspecified -80180 Open fracture of base of skull with other and unspecified intracranial hemorrhage, unspecified state of consciousness -80181 Open fracture of base of skull with other and unspecified intracranial hemorrhage, with no loss of consciousness -80182 Open fracture of base of skull with other and unspecified intracranial hemorrhage, with brief [less than one hour] loss of consciousness -80183 Open fracture of base of skull with other and unspecified intracranial hemorrhage, with moderate [1-24 hours] loss of consciousness -80184 Open fracture of base of skull with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80185 Open fracture of base of skull with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80186 Open fracture of base of skull with other and unspecified intracranial hemorrhage, with loss of consciousness of unspecified duration -80189 Open fracture of base of skull with other and unspecified intracranial hemorrhage, with concussion, unspecified -80190 Open fracture of base of skull with intracranial injury of other and unspecified nature, unspecified state of consciousness -80191 Open fracture of base of skull with intracranial injury of other and unspecified nature, with no loss of consciousness -80192 Open fracture of base of skull with intracranial injury of other and unspecified nature, with brief [less than one hour] loss of consciousness -80193 Open fracture of base of skull with intracranial injury of other and unspecified nature, with moderate [1-24 hours] loss of consciousness -80194 Open fracture of base of skull with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80195 Open fracture of base of skull with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80196 Open fracture of base of skull with intracranial injury of other and unspecified nature, with loss of consciousness of unspecified duration -80199 Open fracture of base of skull with intracranial injury of other and unspecified nature, with concussion, unspecified -8020 Closed fracture of nasal bones -8021 Open fracture of nasal bones -80220 Closed fracture of mandible, unspecified site -80221 Closed fracture of mandible, condylar process -80222 Closed fracture of mandible, subcondylar -80223 Closed fracture of mandible, coronoid process -80224 Closed fracture of mandible, ramus, unspecified -80225 Closed fracture of mandible, angle of jaw -80226 Closed fracture of mandible, symphysis of body -80227 Closed fracture of mandible, alveolar border of body -80228 Closed fracture of mandible, body, other and unspecified -80229 Closed fracture of mandible, multiple sites -80230 Open fracture of mandible, unspecified site -80231 Open fracture of mandible, condylar process -80232 Open fracture of mandible, subcondylar -80233 Open fracture of mandible, coronoid process -80234 Open fracture of mandible, ramus, unspecified -80235 Open fracture of mandible, angle of jaw -80236 Open fracture of mandible, symphysis of body -80237 Open fracture of mandible, alveolar border of body -80238 Open fracture of mandible, body, other and unspecified -80239 Open fracture of mandible, multiple sites -8024 Closed fracture of malar and maxillary bones -8025 Open fracture of malar and maxillary bones -8026 Closed fracture of orbital floor (blow-out) -8027 Open fracture of orbital floor (blow-out) -8028 Closed fracture of other facial bones -8029 Open fracture of other facial bones -80300 Other closed skull fracture without mention of intracranial injury, unspecified state of consciousness -80301 Other closed skull fracture without mention of intracranial injury, with no loss of consciousness -80302 Other closed skull fracture without mention of intracranial injury, with brief [less than one hour] loss of consciousness -80303 Other closed skull fracture without mention of intracranial injury, with moderate [1-24 hours] loss of consciousness -80304 Other closed skull fracture without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80305 Other closed skull fracture without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80306 Other closed skull fracture without mention of intracranial injury, with loss of consciousness of unspecified duration -80309 Other closed skull fracture without mention of intracranial injury, with concussion, unspecified -80310 Other closed skull fracture with cerebral laceration and contusion, unspecified state of consciousness -80311 Other closed skull fracture with cerebral laceration and contusion, with no loss of consciousness -80312 Other closed skull fracture with cerebral laceration and contusion, with brief [less than one hour] loss of consciousness -80313 Other closed skull fracture with cerebral laceration and contusion, with moderate [1-24 hours] loss of consciousness -80314 Other closed skull fracture with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80315 Other closed skull fracture with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80316 Other closed skull fracture with cerebral laceration and contusion, with loss of consciousness of unspecified duration -80319 Other closed skull fracture with cerebral laceration and contusion, with concussion, unspecified -80320 Other closed skull fracture with subarachnoid, subdural, and extradural hemorrhage, unspecified state of consciousness -80321 Other closed skull fracture with subarachnoid, subdural, and extradural hemorrhage, with no loss of consciousness -80322 Other closed skull fracture with subarachnoid, subdural, and extradural hemorrhage, with brief [less than one hour] loss of consciousness -80323 Other closed skull fracture with subarachnoid, subdural, and extradural hemorrhage, with moderate [1-24 hours] loss of consciousness -80324 Other closed skull fracture with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80325 Other closed skull fracture with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80326 Other closed skull fracture with subarachnoid, subdural, and extradural hemorrhage, with loss of consciousness of unspecified duration -80329 Other closed skull fracture with subarachnoid, subdural, and extradural hemorrhage, with concussion, unspecified -80330 Other closed skull fracture with other and unspecified intracranial hemorrhage, unspecified state of unconsciousness -80331 Other closed skull fracture with other and unspecified intracranial hemorrhage, with no loss of consciousness -80332 Other closed skull fracture with other and unspecified intracranial hemorrhage, with brief [less than one hour] loss of consciousness -80333 Other closed skull fracture with other and unspecified intracranial hemorrhage, with moderate [1-24 hours] loss of consciousness -80334 Other closed skull fracture with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80335 Other closed skull fracture with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80336 Other closed skull fracture with other and unspecified intracranial hemorrhage, with loss of consciousness of unspecified duration -80339 Other closed skull fracture with other and unspecified intracranial hemorrhage, with concussion, unspecified -80340 Other closed skull fracture with intracranial injury of other and unspecified nature, unspecified state of consciousness -80341 Other closed skull fracture with intracranial injury of other and unspecified nature, with no loss of consciousness -80342 Other closed skull fracture with intracranial injury of other and unspecified nature, with brief [less than one hour] loss of consciousness -80343 Other closed skull fracture with intracranial injury of other and unspecified nature, with moderate [1-24 hours] loss of consciousness -80344 Other closed skull fracture with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80345 Other closed skull fracture with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80346 Other closed skull fracture with intracranial injury of other and unspecified nature, with loss of consciousness of unspecified duration -80349 Other closed skull fracture with intracranial injury of other and unspecified nature, with concussion, unspecified -80350 Other open skull fracture without mention of injury, unspecified state of consciousness -80351 Other open skull fracture without mention of intracranial injury, with no loss of consciousness -80352 Other open skull fracture without mention of intracranial injury, with brief [less than one hour] loss of consciousness -80353 Other open skull fracture without mention of intracranial injury, with moderate [1-24 hours] loss of consciousness -80354 Other open skull fracture without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80355 Other open skull fracture without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80356 Other open skull fracture without mention of intracranial injury, with loss of consciousness of unspecified duration -80359 Other open skull fracture without mention of intracranial injury, with concussion, unspecified -80360 Other open skull fracture with cerebral laceration and contusion, unspecified state of consciousness -80361 Other open skull fracture with cerebral laceration and contusion, with no loss of consciousness -80362 Other open skull fracture with cerebral laceration and contusion, with brief [less than one hour] loss of consciousness -80363 Other open skull fracture with cerebral laceration and contusion, with moderate [1-24 hours] loss of consciousness -80364 Other open skull fracture with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80365 Other open skull fracture with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80366 Other open skull fracture with cerebral laceration and contusion, with loss of consciousness of unspecified duration -80369 Other open skull fracture with cerebral laceration and contusion, with concussion, unspecified -80370 Other open skull fracture with subarachnoid, subdural, and extradural hemorrhage, unspecified state of consciousness -80371 Other open skull fracture with subarachnoid, subdural, and extradural hemorrhage, with no loss of consciousness -80372 Other open skull fracture with subarachnoid, subdural, and extradural hemorrhage, with brief [less than one hour] loss of consciousness -80373 Other open skull fracture with subarachnoid, subdural, and extradural hemorrhage, with moderate [1-24 hours] loss of consciousness -80374 Other open skull fracture with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80375 Other open skull fracture with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80376 Other open skull fracture with subarachnoid, subdural, and extradural hemorrhage, with loss of consciousness of unspecified duration -80379 Other open skull fracture with subarachnoid, subdural, and extradural hemorrhage, with concussion, unspecified -80380 Other open skull fracture with other and unspecified intracranial hemorrhage, unspecified state of consciousness -80381 Other open skull fracture with other and unspecified intracranial hemorrhage, with no loss of consciousness -80382 Other open skull fracture with other and unspecified intracranial hemorrhage, with brief [less than one hour] loss of consciousness -80383 Other open skull fracture with other and unspecified intracranial hemorrhage, with moderate [1-24 hours] loss of consciousness -80384 Other open skull fracture with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80385 Other open skull fracture with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80386 Other open skull fracture with other and unspecified intracranial hemorrhage, with loss of consciousness of unspecified duration -80389 Other open skull fracture with other and unspecified intracranial hemorrhage, with concussion, unspecified -80390 Other open skull fracture with intracranial injury of other and unspecified nature, unspecified state of consciousness -80391 Other open skull fracture with intracranial injury of other and unspecified nature, with no loss of consciousness -80392 Other open skull fracture with intracranial injury of other and unspecified nature, with brief [less than one hour] loss of consciousness -80393 Other open skull fracture with intracranial injury of other and unspecified nature, with moderate [1-24 hours] loss of consciousness -80394 Other open skull fracture with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80395 Other open skull fracture with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80396 Other open skull fracture with intracranial injury of other and unspecified nature, with loss of consciousness of unspecified duration -80399 Other open skull fracture with intracranial injury of other and unspecified nature, with concussion, unspecified -80400 Closed fractures involving skull or face with other bones, without mention of intracranial injury, unspecified state of consciousness -80401 Closed fractures involving skull or face with other bones, without mention of intracranial injury, with no loss of consciousness -80402 Closed fractures involving skull or face with other bones, without mention of intracranial injury, with brief [less than one hour] loss of consciousness -80403 Closed fractures involving skull or face with other bones, without mention of intracranial injury, with moderate [1-24 hours] loss of consciousness -80404 Closed fractures involving skull or face with other bones, without mention or intracranial injury, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80405 Closed fractures involving skull of face with other bones, without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80406 Closed fractures involving skull of face with other bones, without mention of intracranial injury, with loss of consciousness of unspecified duration -80409 Closed fractures involving skull of face with other bones, without mention of intracranial injury, with concussion, unspecified -80410 Closed fractures involving skull or face with other bones, with cerebral laceration and contusion, unspecified state of consciousness -80411 Closed fractures involving skull or face with other bones, with cerebral laceration and contusion, with no loss of consciousness -80412 Closed fractures involving skull or face with other bones, with cerebral laceration and contusion, with brief [less than one hour] loss of consciousness -80413 Closed fractures involving skull or face with other bones, with cerebral laceration and contusion, with moderate [1-24 hours] loss of consciousness -80414 Closed fractures involving skull or face with other bones, with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80415 Closed fractures involving skull or face with other bones, with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80416 Closed fractures involving skull or face with other bones, with cerebral laceration and contusion, with loss of consciousness of unspecified duration -80419 Closed fractures involving skull or face with other bones, with cerebral laceration and contusion, with concussion, unspecified -80420 Closed fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, unspecified state of consciousness -80421 Closed fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with no loss of consciousness -80422 Closed fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with brief [less than one hour] loss of consciousness -80423 Closed fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with moderate [1-24 hours] loss of consciousness -80424 Closed fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80425 Closed fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80426 Closed fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with loss of consciousness of unspecified duration -80429 Closed fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with concussion, unspecified -80430 Closed fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, unspecified state of consciousness -80431 Closed fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with no loss of consciousness -80432 Closed fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with brief [less than one hour] loss of consciousness -80433 Closed fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with moderate [1-24 hours] loss of consciousness -80434 Closed fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre- existing conscious level -80435 Closed fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80436 Closed fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with loss of consciousness of unspecified duration -80439 Closed fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with concussion, unspecified -80440 Closed fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, unspecified state of consciousness -80441 Closed fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with no loss of consciousness -80442 Closed fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with brief [less than one hour] loss of consciousness -80443 Closed fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with moderate [1-24 hours] loss of consciousness -80444 Closed fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80445 Closed fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80446 Closed fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with loss of consciousness of unspecified duration -80449 Closed fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with concussion, unspecified -80450 Open fractures involving skull or face with other bones, without mention of intracranial injury, unspecified state of consciousness -80451 Open fractures involving skull or face with other bones, without mention of intracranial injury, with no loss of consciousness -80452 Open fractures involving skull or face with other bones, without mention of intracranial injury, with brief [less than one hour] loss of consciousness -80453 Open fractures involving skull or face with other bones, without mention of intracranial injury, with moderate [1-24 hours] loss of consciousness -80454 Open fractures involving skull or face with other bones, without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80455 Open fractures involving skull or face with other bones, without mention of intracranial injury, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80456 Open fractures involving skull or face with other bones, without mention of intracranial injury, with loss of consciousness of unspecified duration -80459 Open fractures involving skull or face with other bones, without mention of intracranial injury, with concussion, unspecified -80460 Open fractures involving skull or face with other bones, with cerebral laceration and contusion, unspecified state of consciousness -80461 Open fractures involving skull or face with other bones, with cerebral laceration and contusion, with no loss of consciousness -80462 Open fractures involving skull or face with other bones, with cerebral laceration and contusion, with brief [less than one hour] loss of consciousness -80463 Open fractures involving skull or face with other bones, with cerebral laceration and contusion, with moderate [1-24 hours] loss of consciousness -80464 Open fractures involving skull or face with other bones, with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80465 Open fractures involving skull or face with other bones, with cerebral laceration and contusion, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80466 Open fractures involving skull or face with other bones, with cerebral laceration and contusion, with loss of consciousness of unspecified duration -80469 Open fractures involving skull or face with other bones, with cerebral laceration and contusion, with concussion, unspecified -80470 Open fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, unspecified state of consciousness -80471 Open fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with no loss of consciousness -80472 Open fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with brief [less than one hour] loss of consciousness -80473 Open fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with moderate [1-24 hours] loss of consciousness -80474 Open fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80475 Open fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with prolonged [more than 24 hours] loss of consciousness, without return to pre-existing conscious level -80476 Open fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with loss of consciousness of unspecified duration -80479 Open fractures involving skull or face with other bones with subarachnoid, subdural, and extradural hemorrhage, with concussion, unspecified -80480 Open fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, unspecified state of consciousness -80481 Open fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with no loss of consciousness -80482 Open fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with brief [less than one hour] loss of consciousness -80483 Open fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with moderate [1-24 hours] loss of consciousness -80484 Open fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80485 Open fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with prolonged [more than 24 hours] loss consciousness, without return to pre-existing conscious level -80486 Open fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with loss of consciousness of unspecified duration -80489 Open fractures involving skull or face with other bones, with other and unspecified intracranial hemorrhage, with concussion, unspecified -80490 Open fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, unspecified state of consciousness -80491 Open fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with no loss of consciousness -80492 Open fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with brief [less than one hour] loss of consciousness -80493 Open fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with moderate [1-24 hours] loss of consciousness -80494 Open fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -80495 Open fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -80496 Open fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with loss of consciousness of unspecified duration -80499 Open fractures involving skull or face with other bones, with intracranial injury of other and unspecified nature, with concussion, unspecified -80500 Closed fracture of cervical vertebra, unspecified level -80501 Closed fracture of first cervical vertebra -80502 Closed fracture of second cervical vertebra -80503 Closed fracture of third cervical vertebra -80504 Closed fracture of fourth cervical vertebra -80505 Closed fracture of fifth cervical vertebra -80506 Closed fracture of sixth cervical vertebra -80507 Closed fracture of seventh cervical vertebra -80508 Closed fracture of multiple cervical vertebrae -80510 Open fracture of cervical vertebra, unspecified level -80511 Open fracture of first cervical vertebra -80512 Open fracture of second cervical vertebra -80513 Open fracture of third cervical vertebra -80514 Open fracture of fourth cervical vertebra -80515 Open fracture of fifth cervical vertebra -80516 Open fracture of sixth cervical vertebra -80517 Open fracture of seventh cervical vertebra -80518 Open fracture of multiple cervical vertebrae -8052 Closed fracture of dorsal [thoracic] vertebra without mention of spinal cord injury -8053 Open fracture of dorsal [thoracic] vertebra without mention of spinal cord injury -8054 Closed fracture of lumbar vertebra without mention of spinal cord injury -8055 Open fracture of lumbar vertebra without mention of spinal cord injury -8056 Closed fracture of sacrum and coccyx without mention of spinal cord injury -8057 Open fracture of sacrum and coccyx without mention of spinal cord injury -8058 Closed fracture of unspecified vertebral column without mention of spinal cord injury -8059 Open fracture of unspecified vertebral column without mention of spinal cord injury -80600 Closed fracture of C1-C4 level with unspecified spinal cord injury -80601 Closed fracture of C1-C4 level with complete lesion of cord -80602 Closed fracture of C1-C4 level with anterior cord syndrome -80603 Closed fracture of C1-C4 level with central cord syndrome -80604 Closed fracture of C1-C4 level with other specified spinal cord injury -80605 Closed fracture of C5-C7 level with unspecified spinal cord injury -80606 Closed fracture of C5-C7 level with complete lesion of cord -80607 Closed fracture of C5-C7 level with anterior cord syndrome -80608 Closed fracture of C5-C7 level with central cord syndrome -80609 Closed fracture of C5-C7 level with other specified spinal cord injury -80610 Open fracture of C1-C4 level with unspecified spinal cord injury -80611 Open fracture of C1-C4 level with complete lesion of cord -80612 Open fracture of C1-C4 level with anterior cord syndrome -80613 Open fracture of C1-C4 level with central cord syndrome -80614 Open fracture of C1-C4 level with other specified spinal cord injury -80615 Open fracture of C5-C7 level with unspecified spinal cord injury -80616 Open fracture of C5-C7 level with complete lesion of cord -80617 Open fracture of C5-C7 level with anterior cord syndrome -80618 Open fracture of C5-C7 level with central cord syndrome -80619 Open fracture of C5-C7 level with other specified spinal cord injury -80620 Closed fracture of T1-T6 level with unspecified spinal cord injury -80621 Closed fracture of T1-T6 level with complete lesion of cord -80622 Closed fracture of T1-T6 level with anterior cord syndrome -80623 Closed fracture of T1-T6 level with central cord syndrome -80624 Closed fracture of T1-T6 level with other specified spinal cord injury -80625 Closed fracture of T7-T12 level with unspecified spinal cord injury -80626 Closed fracture of T7-T12 level with complete lesion of cord -80627 Closed fracture of T7-T12 level with anterior cord syndrome -80628 Closed fracture of T7-T12 level with central cord syndrome -80629 Closed fracture of T7-T12 level with other specified spinal cord injury -80630 Open fracture of T1-T6 level with unspecified spinal cord injury -80631 Open fracture of T1-T6 level with complete lesion of cord -80632 Open fracture of T1-T6 level with anterior cord syndrome -80633 Open fracture of T1-T6 level with central cord syndrome -80634 Open fracture of T1-T6 level with other specified spinal cord injury -80635 Open fracture of T7-T12 level with unspecified spinal cord injury -80636 Open fracture of T7-T12 level with complete lesion of cord -80637 Open fracture of T7-T12 level with anterior cord syndrome -80638 Open fracture of T7-T12 level with central cord syndrome -80639 Open fracture of T7-T12 level with other specified spinal cord injury -8064 Closed fracture of lumbar spine with spinal cord injury -8065 Open fracture of lumbar spine with spinal cord injury -80660 Closed fracture of sacrum and coccyx with unspecified spinal cord injury -80661 Closed fracture of sacrum and coccyx with complete cauda equina lesion -80662 Closed fracture of sacrum and coccyx with other cauda equina injury -80669 Closed fracture of sacrum and coccyx with other spinal cord injury -80670 Open fracture of sacrum and coccyx with unspecified spinal cord injury -80671 Open fracture of sacrum and coccyx with complete cauda equina lesion -80672 Open fracture of sacrum and coccyx with other cauda equina injury -80679 Open fracture of sacrum and coccyx with other spinal cord injury -8068 Closed fracture of unspecified vertebral column with spinal cord injury -8069 Open fracture of unspecified vertebral column with spinal cord injury -80700 Closed fracture of rib(s), unspecified -80701 Closed fracture of one rib -80702 Closed fracture of two ribs -80703 Closed fracture of three ribs -80704 Closed fracture of four ribs -80705 Closed fracture of five ribs -80706 Closed fracture of six ribs -80707 Closed fracture of seven ribs -80708 Closed fracture of eight or more ribs -80709 Closed fracture of multiple ribs, unspecified -80710 Open fracture of rib(s), unspecified -80711 Open fracture of one rib -80712 Open fracture of two ribs -80713 Open fracture of three ribs -80714 Open fracture of four ribs -80715 Open fracture of five ribs -80716 Open fracture of six ribs -80717 Open fracture of seven ribs -80718 Open fracture of eight or more ribs -80719 Open fracture of multiple ribs, unspecified -8072 Closed fracture of sternum -8073 Open fracture of sternum -8074 Flail chest -8075 Closed fracture of larynx and trachea -8076 Open fracture of larynx and trachea -8080 Closed fracture of acetabulum -8081 Open fracture of acetabulum -8082 Closed fracture of pubis -8083 Open fracture of pubis -80841 Closed fracture of ilium -80842 Closed fracture of ischium -80843 Multiple closed pelvic fractures with disruption of pelvic circle -80844 Multiple closed pelvic fractures without disruption of pelvic circle -80849 Closed fracture of other specified part of pelvis -80851 Open fracture of ilium -80852 Open fracture of ischium -80853 Multiple open pelvic fractures with disruption of pelvic circle -80854 Multiple open pelvic fractures without disruption of pelvic circle -80859 Open fracture of other specified part of pelvis -8088 Closed unspecified fracture of pelvis -8089 Open unspecified fracture of pelvis -8090 Fracture of bones of trunk, closed -8091 Fracture of bones of trunk, open -81000 Closed fracture of clavicle, unspecified part -81001 Closed fracture of sternal end of clavicle -81002 Closed fracture of shaft of clavicle -81003 Closed fracture of acromial end of clavicle -81010 Open fracture of clavicle, unspecified part -81011 Open fracture of sternal end of clavicle -81012 Open fracture of shaft of clavicle -81013 Open fracture of acromial end of clavicle -81100 Closed fracture of scapula, unspecified part -81101 Closed fracture of acromial process of scapula -81102 Closed fracture of coracoid process of scapula -81103 Closed fracture of glenoid cavity and neck of scapula -81109 Closed fracture of scapula, other -81110 Open fracture of scapula, unspecified part -81111 Open fracture of acromial process of scapula -81112 Open fracture of coracoid process -81113 Open fracture of glenoid cavity and neck of scapula -81119 Open fracture of scapula, other -81200 Closed fracture of unspecified part of upper end of humerus -81201 Closed fracture of surgical neck of humerus -81202 Closed fracture of anatomical neck of humerus -81203 Closed fracture of greater tuberosity of humerus -81209 Other closed fracture of upper end of humerus -81210 Open fracture of unspecified part of upper end of humerus -81211 Open fracture of surgical neck of humerus -81212 Open fracture of anatomical neck of humerus -81213 Open fracture of greater tuberosity of humerus -81219 Other open fracture of upper end of humerus -81220 Closed fracture of unspecified part of humerus -81221 Closed fracture of shaft of humerus -81230 Open fracture of unspecified part of humerus -81231 Open fracture of shaft of humerus -81240 Closed fracture of unspecified part of lower end of humerus -81241 Closed supracondylar fracture of humerus -81242 Closed fracture of lateral condyle of humerus -81243 Closed fracture of medial condyle of humerus -81244 Closed fracture of unspecified condyle(s) of humerus -81249 Other closed fracture of lower end of humerus -81250 Open fracture of unspecified part of lower end of humerus -81251 Open supracondylar fracture of humerus -81252 Open fracture of lateral condyle of humerus -81253 Open fracture of medial condyle of humerus -81254 Open fracture of unspecified condyle(s) of humerus -81259 Other open fracture of lower end of humerus -81300 Closed fracture of upper end of forearm, unspecified -81301 Closed fracture of olecranon process of ulna -81302 Closed fracture of coronoid process of ulna -81303 Closed Monteggia's fracture -81304 Other and unspecified closed fractures of proximal end of ulna (alone) -81305 Closed fracture of head of radius -81306 Closed fracture of neck of radius -81307 Other and unspecified closed fractures of proximal end of radius (alone) -81308 Closed fracture of radius with ulna, upper end [any part] -81310 Open fracture of upper end of forearm, unspecified -81311 Open fracture of olecranon process of ulna -81312 Open fracture of coronoid process of ulna -81313 Open Monteggia's fracture -81314 Other and unspecified open fractures of proximal end of ulna (alone) -81315 Open fracture of head of radius -81316 Open fracture of neck of radius -81317 Other and unspecified open fractures of proximal end of radius (alone) -81318 Open fracture of radius with ulna, upper end (any part) -81320 Closed fracture of shaft of radius or ulna, unspecified -81321 Closed fracture of shaft of radius (alone) -81322 Closed fracture of shaft of ulna (alone) -81323 Closed fracture of shaft of radius with ulna -81330 Open fracture of shaft of radius or ulna, unspecified -81331 Open fracture of shaft of radius (alone) -81332 Open fracture of shaft of ulna (alone) -81333 Open fracture of shaft of radius with ulna -81340 Closed fracture of lower end of forearm, unspecified -81341 Closed Colles' fracture -81342 Other closed fractures of distal end of radius (alone) -81343 Closed fracture of distal end of ulna (alone) -81344 Closed fracture of lower end of radius with ulna -81345 Torus fracture of radius (alone) -81346 Torus fracture of ulna (alone) -81347 Torus fracture of radius and ulna -81350 Open fracture of lower end of forearm, unspecified -81351 Open Colles' fracture -81352 Other open fractures of distal end of radius (alone) -81353 Open fracture of distal end of ulna (alone) -81354 Open fracture of lower end of radius with ulna -81380 Closed fracture of unspecified part of forearm -81381 Closed fracture of unspecified part of radius (alone) -81382 Closed fracture of unspecified part of ulna (alone) -81383 Closed fracture of unspecified part of radius with ulna -81390 Open fracture of unspecified part of forearm -81391 Open fracture of unspecified part of radius (alone) -81392 Open fracture of unspecified part of ulna (alone) -81393 Open fracture of unspecified part of radius with ulna -81400 Closed fracture of carpal bone, unspecified -81401 Closed fracture of navicular [scaphoid] bone of wrist -81402 Closed fracture of lunate [semilunar] bone of wrist -81403 Closed fracture of triquetral [cuneiform] bone of wrist -81404 Closed fracture of pisiform bone of wrist -81405 Closed fracture of trapezium bone [larger multangular] of wrist -81406 Closed fracture of trapezoid bone [smaller multangular] of wrist -81407 Closed fracture of capitate bone [os magnum] of wrist -81408 Closed fracture of hamate [unciform] bone of wrist -81409 Closed fracture of other bone of wrist -81410 Open fracture of carpal bone, unspecified -81411 Open fracture of navicular [scaphoid] bone of wrist -81412 Open fracture of lunate [semilunar] bone of wrist -81413 Open fracture of triquetral [cuneiform] bone of wrist -81414 Open fracture of pisiform bone of wrist -81415 Open fracture of trapezium bone [larger multangular] of wrist -81416 Open fracture of trapezoid bone [smaller multangular] of wrist -81417 Open fracture of capitate bone [os magnum] of wrist -81418 Open fracture of hamate [unciform] bone of wrist -81419 Open fracture of other bone of wrist -81500 Closed fracture of metacarpal bone(s), site unspecified -81501 Closed fracture of base of thumb [first] metacarpal -81502 Closed fracture of base of other metacarpal bone(s) -81503 Closed fracture of shaft of metacarpal bone(s) -81504 Closed fracture of neck of metacarpal bone(s) -81509 Closed fracture of multiple sites of metacarpus -81510 Open fracture of metacarpal bone(s), site unspecified -81511 Open fracture of base of thumb [first] metacarpal -81512 Open fracture of base of other metacarpal bone(s) -81513 Open fracture of shaft of metacarpal bone(s) -81514 Open fracture of neck of metacarpal bone(s) -81519 Open fracture of multiple sites of metacarpus -81600 Closed fracture of phalanx or phalanges of hand, unspecified -81601 Closed fracture of middle or proximal phalanx or phalanges of hand -81602 Closed fracture of distal phalanx or phalanges of hand -81603 Closed fracture of multiple sites of phalanx or phalanges of hand -81610 Open fracture of phalanx or phalanges of hand, unspecified -81611 Open fracture of middle or proximal phalanx or phalanges of hand -81612 Open fracture of distal phalanx or phalanges of hand -81613 Open fracture of multiple sites of phalanx or phalanges of hand -8170 Multiple closed fractures of hand bones -8171 Multiple open fractures of hand bones -8180 Ill-defined closed fractures of upper limb -8181 Ill-defined open fractures of upper limb -8190 Multiple closed fractures involving both upper limbs, and upper limb with rib(s) and sternum -8191 Multiple open fractures involving both upper limbs, and upper limb with rib(s) and sternum -82000 Closed fracture of intracapsular section of neck of femur, unspecified -82001 Closed fracture of epiphysis (separation) (upper) of neck of femur -82002 Closed fracture of midcervical section of neck of femur -82003 Closed fracture of base of neck of femur -82009 Other closed transcervical fracture of neck of femur -82010 Open fracture of intracapsular section of neck of femur, unspecified -82011 Open fracture of epiphysis (separation) (upper) of neck of femur -82012 Open fracture of midcervical section of neck of femur -82013 Open fracture of base of neck of femur -82019 Other open transcervical fracture of neck of femur -82020 Closed fracture of trochanteric section of neck of femur -82021 Closed fracture of intertrochanteric section of neck of femur -82022 Closed fracture of subtrochanteric section of neck of femur -82030 Open fracture of trochanteric section of neck of femur, unspecified -82031 Open fracture of intertrochanteric section of neck of femur -82032 Open fracture of subtrochanteric section of neck of femur -8208 Closed fracture of unspecified part of neck of femur -8209 Open fracture of unspecified part of neck of femur -82100 Closed fracture of unspecified part of femur -82101 Closed fracture of shaft of femur -82110 Open fracture of unspecified part of femur -82111 Open fracture of shaft of femur -82120 Closed fracture of lower end of femur, unspecified part -82121 Closed fracture of condyle, femoral -82122 Closed fracture of epiphysis, lower (separation) of femur -82123 Closed supracondylar fracture of femur -82129 Other closed fracture of lower end of femur -82130 Open fracture of lower end of femur, unspecified part -82131 Open fracture of condyle, femoral -82132 Open fracture of epiphysis. Lower (separation) of femur -82133 Open supracondylar fracture of femur -82139 Other open fracture of lower end of femur -8220 Closed fracture of patella -8221 Open fracture of patella -82300 Closed fracture of upper end of tibia alone -82301 Closed fracture of upper end of fibula alone -82302 Closed fracture of upper end of fibula with tibia -82310 Open fracture of upper end of tibia alone -82311 Open fracture of upper end of fibula alone -82312 Open fracture of upper end of fibula with tibia -82320 Closed fracture of shaft of tibia alone -82321 Closed fracture of shaft of fibula alone -82322 Closed fracture of shaft of fibula with tibia -82330 Open fracture of shaft of tibia alone -82331 Open fracture of shaft of fibula alone -82332 Open fracture of shaft of fibula with tibia -82340 Torus fracture, tibia alone -82341 Torus fracture, fibula alone -82342 Torus fracture, fibula with tibia -82380 Closed fracture of unspecified part of tibia alone -82381 Closed fracture of unspecified part of fibula alone -82382 Closed fracture of unspecified part of fibula with tibia -82390 Open fracture of unspecified part of tibia alone -82391 Open fracture of unspecified part of fibula alone -82392 Open fracture of unspecified part of fibula with tibia -8240 Fracture of medial malleolus, closed -8241 Fracture of medial malleolus, open -8242 Fracture of lateral malleolus, closed -8243 Fracture of lateral malleolus, open -8244 Bimalleolar fracture, closed -8245 Bimalleolar fracture, open -8246 Trimalleolar fracture, closed -8247 Trimalleolar fracture, open -8248 Unspecified fracture of ankle, closed -8249 Unspecified fracture of ankle, open -8250 Fracture of calcaneus, closed -8251 Fracture of calcaneus, open -82520 Closed fracture of unspecified bone(s) of foot [except toes] -82521 Closed fracture of astragalus -82522 Closed fracture of navicular [scaphoid], foot -82523 Closed fracture of cuboid -82524 Closed fracture of cuneiform, foot -82525 Closed fracture of metatarsal bone(s) -82529 Other closed fracture of tarsal and metatarsal bones -82530 Open fracture of unspecified bone(s) of foot [except toes] -82531 Open fracture of astragalus -82532 Open fracture of navicular [scaphoid], foot -82533 Open fracture of cuboid -82534 Open fracture of cuneiform, foot -82535 Open fracture of metatarsal bone(s) -82539 Other open fracture of tarsal and metatarsal bones -8260 Closed fracture of one or more phalanges of foot -8261 Open fracture of one or more phalanges of foot -8270 Other, multiple and ill-defined fractures of lower limb, closed -8271 Other, multiple and ill-defined fractures of lower limb, open -8280 Closed multiple fractures involving both lower limbs, lower with upper limb, and lower limb(s) with rib(s) and sternum -8281 Open multiple fractures involving both lower limbs, lower with upper limb, and lower limb(s) with rib(s) and sternum -8290 Fracture of unspecified bone, closed -8291 Fracture of unspecified bone, open -8300 Closed dislocation of jaw -8301 Open dislocation of jaw -83100 Closed dislocation of shoulder, unspecified -83101 Closed anterior dislocation of humerus -83102 Closed posterior dislocation of humerus -83103 Closed inferior dislocation of humerus -83104 Closed dislocation of acromioclavicular (joint) -83109 Closed dislocation of shoulder, other -83110 Open dislocation of shoulder, unspecified -83111 Open anterior dislocation of humerus -83112 Open posterior dislocation of humerus -83113 Open inferior dislocation of humerus -83114 Open dislocation of acromioclavicular (joint) -83119 Open dislocation of shoulder, other -83200 Closed dislocation of elbow, unspecified -83201 Closed anterior dislocation of elbow -83202 Closed posterior dislocation of elbow -83203 Closed medial dislocation of elbow -83204 Closed lateral dislocation of elbow -83209 Closed dislocation of elbow, other -83210 Open dislocation of elbow, unspecified -83211 Open anterior dislocation of elbow -83212 Open posterior dislocation of elbow -83213 Open medial dislocation of elbow -83214 Open lateral dislocation of elbow -83219 Open dislocation of elbow, other -8322 Nursemaid's elbow -83300 Closed dislocation of wrist, unspecified part -83301 Closed dislocation of radioulnar (joint), distal -83302 Closed dislocation of radiocarpal (joint) -83303 Closed dislocation of midcarpal (joint) -83304 Closed dislocation of carpometacarpal (joint) -83305 Closed dislocation of metacarpal (bone), proximal end -83309 Closed dislocation of wrist, other -83310 Open dislocation of wrist, unspecified part -83311 Open dislocation of radioulnar (joint), distal -83312 Open dislocation of radiocarpal (joint) -83313 Open dislocation of midcarpal (joint) -83314 Open dislocation of carpometacarpal (joint) -83315 Open dislocation of metacarpal (bone), proximal end -83319 Open dislocation of wrist, other -83400 Closed dislocation of finger, unspecified part -83401 Closed dislocation of metacarpophalangeal (joint) -83402 Closed dislocation of interphalangeal (joint), hand -83410 Open dislocation of finger, unspecified part -83411 Open dislocation of metacarpophalangeal (joint) -83412 Open dislocation interphalangeal (joint), hand -83500 Closed dislocation of hip, unspecified site -83501 Closed posterior dislocation of hip -83502 Closed obturator dislocation of hip -83503 Other closed anterior dislocation of hip -83510 Open dislocation of hip, unspecified site -83511 Open posterior dislocation of hip -83512 Open obturator dislocation of hip -83513 Other open anterior dislocation of hip -8360 Tear of medial cartilage or meniscus of knee, current -8361 Tear of lateral cartilage or meniscus of knee, current -8362 Other tear of cartilage or meniscus of knee, current -8363 Dislocation of patella, closed -8364 Dislocation of patella, open -83650 Dislocation of knee, unspecified, closed -83651 Anterior dislocation of tibia, proximal end, closed -83652 Posterior dislocation of tibia, proximal end, closed -83653 Medial dislocation of tibia, proximal end, closed -83654 Lateral dislocation of tibia, proximal end, closed -83659 Other dislocation of knee, closed -83660 Dislocation of knee, unspecified, open -83661 Anterior dislocation of tibia, proximal end, open -83662 Posterior dislocation of tibia, proximal end, open -83663 Medial dislocation of tibia, proximal end, open -83664 Lateral dislocation of tibia, proximal end, open -83669 Other dislocation of knee, open -8370 Closed dislocation of ankle -8371 Open dislocation of ankle -83800 Closed dislocation of foot, unspecified -83801 Closed dislocation of tarsal (bone), joint unspecified -83802 Closed dislocation of midtarsal (joint) -83803 Closed dislocation of tarsometatarsal (joint) -83804 Closed dislocation of metatarsal (bone), joint unspecified -83805 Closed dislocation of metatarsophalangeal (joint) -83806 Closed dislocation of interphalangeal (joint), foot -83809 Closed dislocation of foot, other -83810 Open dislocation of foot, unspecified -83811 Open dislocation of tarsal (bone), joint unspecified -83812 Open dislocation of midtarsal (joint) -83813 Open dislocation of tarsometatarsal (joint) -83814 Open dislocation of metatarsal (bone), joint unspecified -83815 Open dislocation of metatarsophalangeal (joint) -83816 Open dislocation of interphalangeal (joint), foot -83819 Open dislocation of foot, other -83900 Closed dislocation, cervical vertebra, unspecified -83901 Closed dislocation, first cervical vertebra -83902 Closed dislocation, second cervical vertebra -83903 Closed dislocation, third cervical vertebra -83904 Closed dislocation, fourth cervical vertebra -83905 Closed dislocation, fifth cervical vertebra -83906 Closed dislocation, sixth cervical vertebra -83907 Closed dislocation, seventh cervical vertebra -83908 Closed dislocation, multiple cervical vertebrae -83910 Open dislocation, cervical vertebra, unspecified -83911 Open dislocation, first cervical vertebra -83912 Open dislocation, second cervical vertebra -83913 Open dislocation, third cervical vertebra -83914 Open dislocation, fourth cervical vertebra -83915 Open dislocation, fifth cervical vertebra -83916 Open dislocation, sixth cervical vertebra -83917 Open dislocation, seventh cervical vertebra -83918 Open dislocation, multiple cervical vertebrae -83920 Closed dislocation, lumbar vertebra -83921 Closed dislocation, thoracic vertebra -83930 Open dislocation, lumbar vertebra -83931 Open dislocation, thoracic vertebra -83940 Closed dislocation, vertebra, unspecified site -83941 Closed dislocation, coccyx -83942 Closed dislocation, sacrum -83949 Closed dislocation, vertebra, other -83950 Open dislocation, vertebra, unspecified site -83951 Open dislocation, coccyx -83952 Open dislocation, sacrum -83959 Open dislocation, vertebra,other -83961 Closed dislocation, sternum -83969 Closed dislocation, other location -83971 Open dislocation, sternum -83979 Open dislocation, other location -8398 Closed dislocation, multiple and ill-defined sites -8399 Open dislocation, multiple and ill-defined sites -8400 Acromioclavicular (joint) (ligament) sprain -8401 Coracoclavicular (ligament) sprain -8402 Coracohumeral (ligament) sprain -8403 Infraspinatus (muscle) (tendon) sprain -8404 Rotator cuff (capsule) sprain -8405 Subscapularis (muscle) sprain -8406 Supraspinatus (muscle) (tendon) sprain -8407 Superior glenoid labrum lesion -8408 Sprains and strains of other specified sites of shoulder and upper arm -8409 Sprains and strains of unspecified site of shoulder and upper arm -8410 Radial collateral ligament sprain -8411 Ulnar collateral ligament sprain -8412 Radiohumeral (joint) sprain -8413 Ulnohumeral (joint) sprain -8418 Sprains and strains of other specified sites of elbow and forearm -8419 Sprains and strains of unspecified site of elbow and forearm -84200 Sprain of wrist, unspecified site -84201 Sprain of carpal (joint) of wrist -84202 Sprain of radiocarpal (joint) (ligament) of wrist -84209 Other sprains and strains of wrist -84210 Sprain of hand, unspecified site -84211 Sprain of carpometacarpal (joint) of hand -84212 Sprain of metacarpophalangeal (joint) of hand -84213 Sprain of interphalangeal (joint) of hand -84219 Other sprains and strains of hand -8430 Iliofemoral (ligament) sprain -8431 Ischiocapsular (ligament) sprain -8438 Sprains and strains of other specified sites of hip and thigh -8439 Sprains and strains of unspecified site of hip and thigh -8440 Sprain of lateral collateral ligament of knee -8441 Sprain of medial collateral ligament of knee -8442 Sprain of cruciate ligament of knee -8443 Sprain of tibiofibular (joint) (ligament) superior, of knee -8448 Sprains and strains of other specified sites of knee and leg -8449 Sprains and strains of unspecified site of knee and leg -84500 Sprain of ankle, unspecified site -84501 Sprain of deltoid (ligament), ankle -84502 Sprain of calcaneofibular (ligament) of ankle -84503 Sprain of tibiofibular (ligament), distal of ankle -84509 Other sprains and strains of ankle -84510 Sprain of foot, unspecified site -84511 Sprain of tarsometatarsal (joint) (ligament) of foot -84512 Sprain of metatarsophalangeal (joint) of foot -84513 Sprain of interphalangeal (joint), toe -84519 Other sprain of foot -8460 Sprain of lumbosacral (joint) (ligament) -8461 Sprain of sacroiliac ligament -8462 Sprain of sacrospinatus (ligament) -8463 Sprain of sacrotuberous (ligament) -8468 Sprain of other specified sites of sacroiliac region -8469 Sprain of unspecified site of sacroiliac region -8470 Sprain of neck -8471 Sprain of thoracic -8472 Sprain of lumbar -8473 Sprain of sacrum -8474 Sprain of coccyx -8479 Sprain of unspecified site of back -8480 Sprain of septal cartilage of nose -8481 Sprain of jaw -8482 Sprain of thyroid region -8483 Sprain of ribs -84840 Sprain of sternum, unspecified site -84841 Sprain of sternoclavicular (joint) (ligament) -84842 Sprain of chondrosternal (joint) -84849 Sprain of sternum, other -8485 Sprain of pelvic -8488 Other specified sites of sprains and strains -8489 Unspecified site of sprain and strain -8500 Concussion with no loss of consciousness -85011 Concussion, with loss of consciousness of 30 minutes or less -85012 Concussion, with loss of consciousness from 31 to 59 minutes -8502 Concussion with moderate loss of consciousness -8503 Concussion with prolonged loss of consciousness and return to pre-existing conscious level -8504 Concussion with prolonged loss of consciousness, without return to pre-existing conscious level -8505 Concussion with loss of consciousness of unspecified duration -8509 Concussion, unspecified -85100 Cortex (cerebral) contusion without mention of open intracranial wound, unspecified state of consciousness -85101 Cortex (cerebral) contusion without mention of open intracranial wound, with no loss of consciousness -85102 Cortex (cerebral) contusion without mention of open intracranial wound, with brief [less than one hour] loss of consciousness -85103 Cortex (cerebral) contusion without mention of open intracranial wound, with moderate [1-24 hours] loss of consciousness -85104 Cortex (cerebral) contusion without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85105 Cortex (cerebral) contusion without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85106 Cortex (cerebral) contusion without mention of open intracranial wound, with loss of consciousness of unspecified duration -85109 Cortex (cerebral) contusion without mention of open intracranial wound, with concussion, unspecified -85110 Cortex (cerebral) contusion with open intracranial wound, unspecified state of consciousness -85111 Cortex (cerebral) contusion with open intracranial wound, with no loss of consciousness -85112 Cortex (cerebral) contusion with open intracranial wound, with brief [less than one hour] loss of consciousness -85113 Cortex (cerebral) contusion with open intracranial wound, with moderate [1-24 hours] loss of consciousness -85114 Cortex (cerebral) contusion with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85115 Cortex (cerebral) contusion with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85116 Cortex (cerebral) contusion with open intracranial wound, with loss of consciousness of unspecified duration -85119 Cortex (cerebral) contusion with open intracranial wound, with concussion, unspecified -85120 Cortex (cerebral) laceration without mention of open intracranial wound, unspecified state of consciousness -85121 Cortex (cerebral) laceration without mention of open intracranial wound, with no loss of consciousness -85122 Cortex (cerebral) laceration without mention of open intracranial wound, with brief [less than one hour] loss of consciousness -85123 Cortex (cerebral) laceration without mention of open intracranial wound, with moderate [1-24 hours] loss of consciousness -85124 Cortex (cerebral) laceration without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85125 Cortex (cerebral) laceration without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85126 Cortex (cerebral) laceration without mention of open intracranial wound, with loss of consciousness of unspecified duration -85129 Cortex (cerebral) laceration without mention of open intracranial wound, with concussion, unspecified -85130 Cortex (cerebral) laceration with open intracranial wound, unspecified state of consciousness -85131 Cortex (cerebral) laceration with open intracranial wound, with no loss of consciousness -85132 Cortex (cerebral) laceration with open intracranial wound, with brief [less than one hour] loss of consciousness -85133 Cortex (cerebral) laceration with open intracranial wound, with moderate [1-24 hours] loss of consciousness -85134 Cortex (cerebral) laceration with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85135 Cortex (cerebral) laceration with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85136 Cortex (cerebral) laceration with open intracranial wound, with loss of consciousness of unspecified duration -85139 Cortex (cerebral) laceration with open intracranial wound, with concussion, unspecified -85140 Cerebellar or brain stem contusion without mention of open intracranial wound, unspecified state of consciousness -85141 Cerebellar or brain stem contusion without mention of open intracranial wound, with no loss of consciousness -85142 Cerebellar or brain stem contusion without mention of open intracranial wound, with brief [less than one hour] loss of consciousness -85143 Cerebellar or brain stem contusion without mention of open intracranial wound, with moderate [1-24 hours] loss of consciousness -85144 Cerebellar or brain stem contusion without mention of open intracranial wound, with prolonged [more than 24 hours] loss consciousness and return to pre-existing conscious level -85145 Cerebellar or brain stem contusion without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85146 Cerebellar or brain stem contusion without mention of open intracranial wound, with loss of consciousness of unspecified duration -85149 Cerebellar or brain stem contusion without mention of open intracranial wound, with concussion, unspecified -85150 Cerebellar or brain stem contusion with open intracranial wound, unspecified state of consciousness -85151 Cerebellar or brain stem contusion with open intracranial wound, with no loss of consciousness -85152 Cerebellar or brain stem contusion with open intracranial wound, with brief [less than one hour] loss of consciousness -85153 Cerebellar or brain stem contusion with open intracranial wound, with moderate [1-24 hours] loss of consciousness -85154 Cerebellar or brain stem contusion with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85155 Cerebellar or brain stem contusion with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85156 Cerebellar or brain stem contusion with open intracranial wound, with loss of consciousness of unspecified duration -85159 Cerebellar or brain stem contusion with open intracranial wound, with concussion, unspecified -85160 Cerebellar or brain stem laceration without mention of open intracranial wound, unspecified state of consciousness -85161 Cerebellar or brain stem laceration without mention of open intracranial wound, with no loss of consciousness -85162 Cerebellar or brain stem laceration without mention of open intracranial wound, with brief [less than 1 hour] loss of consciousness -85163 Cerebellar or brain stem laceration without mention of open intracranial wound, with moderate [1-24 hours] loss of consciousness -85164 Cerebellar or brain stem laceration without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85165 Cerebellar or brain stem laceration without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85166 Cerebellar or brain stem laceration without mention of open intracranial wound, with loss of consciousness of unspecified duration -85169 Cerebellar or brain stem laceration without mention of open intracranial wound, with concussion, unspecified -85170 Cerebellar or brain stem laceration with open intracranial wound, unspecified state of consciousness -85171 Cerebellar or brain stem laceration with open intracranial wound, with no loss of consciousness -85172 Cerebellar or brain stem laceration with open intracranial wound, with brief [less than one hour] loss of consciousness -85173 Cerebellar or brain stem laceration with open intracranial wound, with moderate [1-24 hours] loss of consciousness -85174 Cerebellar or brain stem laceration with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85175 Cerebellar or brain stem laceration with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85176 Cerebellar or brain stem laceration with open intracranial wound, with loss of consciousness of unspecified duration -85179 Cerebellar or brain stem laceration with open intracranial wound, with concussion, unspecified -85180 Other and unspecified cerebral laceration and contusion, without mention of open intracranial wound, unspecified state of consciousness -85181 Other and unspecified cerebral laceration and contusion, without mention of open intracranial wound, with no loss of consciousness -85182 Other and unspecified cerebral laceration and contusion, without mention of open intracranial wound, with brief [less than one hour] loss of consciousness -85183 Other and unspecified cerebral laceration and contusion, without mention of open intracranial wound, with moderate [1-24 hours] loss of consciousness -85184 Other and unspecified cerebral laceration and contusion, without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre- existing conscious level -85185 Other and unspecified cerebral laceration and contusion, without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85186 Other and unspecified cerebral laceration and contusion, without mention of open intracranial wound, with loss of consciousness of unspecified duration -85189 Other and unspecified cerebral laceration and contusion, without mention of open intracranial wound, with concussion, unspecified -85190 Other and unspecified cerebral laceration and contusion, with open intracranial wound, unspecified state of consciousness -85191 Other and unspecified cerebral laceration and contusion, with open intracranial wound, with no loss of consciousness -85192 Other and unspecified cerebral laceration and contusion, with open intracranial wound, with brief [less than one hour] loss of consciousness -85193 Other and unspecified cerebral laceration and contusion, with open intracranial wound, with moderate [1-24 hours] loss of consciousness -85194 Other and unspecified cerebral laceration and contusion, with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85195 Other and unspecified cerebral laceration and contusion, with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85196 Other and unspecified cerebral laceration and contusion, with open intracranial wound, with loss of consciousness of unspecified duration -85199 Other and unspecified cerebral laceration and contusion, with open intracranial wound, with concussion, unspecified -85200 Subarachnoid hemorrhage following injury without mention of open intracranial wound, unspecified state of consciousness -85201 Subarachnoid hemorrhage following injury without mention of open intracranial wound, with no loss of consciousness -85202 Subarachnoid hemorrhage following injury without mention of open intracranial wound, with brief [less than one hour] loss of consciousness -85203 Subarachnoid hemorrhage following injury without mention of open intracranial wound, with moderate [1-24 hours] loss of consciousness -85204 Subarachnoid hemorrhage following injury without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85205 Subarachnoid hemorrhage following injury without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85206 Subarachnoid hemorrhage following injury without mention of open intracranial wound, with loss of consciousness of unspecified duration -85209 Subarachnoid hemorrhage following injury without mention of open intracranial wound, with concussion, unspecified -85210 Subarachnoid hemorrhage following injury with open intracranial wound, unspecified state of consciousness -85211 Subarachnoid hemorrhage following injury with open intracranial wound, with no loss of consciousness -85212 Subarachnoid hemorrhage following injury with open intracranial wound, with brief [less than one hour] loss of consciousness -85213 Subarachnoid hemorrhage following injury with open intracranial wound, with moderate [1-24 hours] loss of consciousness -85214 Subarachnoid hemorrhage following injury with open intracranial wound, with prolonged [more than 24 hours) loss of consciousness and return to pre-existing conscious level -85215 Subarachnoid hemorrhage following injury with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85216 Subarachnoid hemorrhage following injury with open intracranial wound, with loss of consciousness of unspecified duration -85219 Subarachnoid hemorrhage following injury with open intracranial wound, with concussion, unspecified -85220 Subdural hemorrhage following injury without mention of open intracranial wound, unspecified state of consciousness -85221 Subdural hemorrhage following injury without mention of open intracranial wound, with no loss of consciousness -85222 Subdural hemorrhage following injury without mention of open intracranial wound, with brief [less than one hour] loss of consciousness -85223 Subdural hemorrhage following injury without mention of open intracranial wound, with moderate [1-24 hours] loss of consciousness -85224 Subdural hemorrhage following injury without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85225 Subdural hemorrhage following injury without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85226 Subdural hemorrhage following injury without mention of open intracranial wound, with loss of consciousness of unspecified duration -85229 Subdural hemorrhage following injury without mention of open intracranial wound, with concussion, unspecified -85230 Subdural hemorrhage following injury with open intracranial wound, unspecified state of consciousness -85231 Subdural hemorrhage following injury with open intracranial wound, with no loss of consciousness -85232 Subdural hemorrhage following injury with open intracranial wound, with brief [less than one hour] loss of consciousness -85233 Subdural hemorrhage following injury with open intracranial wound, with moderate [1-24 hours] loss of consciousness -85234 Subdural hemorrhage following injury with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85235 Subdural hemorrhage following injury with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85236 Subdural hemorrhage following injury with open intracranial wound, with loss of consciousness of unspecified duration -85239 Subdural hemorrhage following injury with open intracranial wound, with concussion, unspecified -85240 Extradural hemorrhage following injury without mention of open intracranial wound, unspecified state of consciousness -85241 Extradural hemorrhage following injury without mention of open intracranial wound, with no loss of consciousness -85242 Extradural hemorrhage following injury without mention of open intracranial wound, with brief [less than 1 hour] loss of consciousness -85243 Extradural hemorrhage following injury without mention of open intracranial wound, with moderate [1-24 hours] loss of consciousness -85244 Extradural hemorrhage following injury without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85245 Extradural hemorrhage following injury without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85246 Extradural hemorrhage following injury without mention of open intracranial wound, with loss of consciousness of unspecified duration -85249 Extradural hemorrhage following injury without mention of open intracranial wound, with concussion, unspecified -85250 Extradural hemorrhage following injury with open intracranial wound, unspecified state of consciousness -85251 Extradural hemorrhage following injury with open intracranial wound, with no loss of consciousness -85252 Extradural hemorrhage following injury with open intracranial wound, with brief [less than one hour] loss of consciousness -85253 Extradural hemorrhage following injury with open intracranial wound, with moderate [1-24 hours] loss of consciousness -85254 Extradural hemorrhage following injury with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85255 Extradural hemorrhage following injury with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85256 Extradural hemorrhage following injury with open intracranial wound, with loss of consciousness of unspecified duration -85259 Extradural hemorrhage following injury with open intracranial wound, with concussion, unspecified -85300 Other and unspecified intracranial hemorrhage following injury without mention of open intracranial wound, unspecified state of consciousness -85301 Other and unspecified intracranial hemorrhage following injury without mention of open intracranial wound, with no loss of consciousness -85302 Other and unspecified intracranial hemorrhage following injury without mention of open intracranial wound, with brief [less than one hour] loss of consciousness -85303 Other and unspecified intracranial hemorrhage following injury without mention of open intracranial wound, with moderate [1-24 hours] loss of consciousness -85304 Other and unspecified intracranial hemorrhage following injury without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre- existing conscious level -85305 Other and unspecified intracranial hemorrhage following injury without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85306 Other and unspecified intracranial hemorrhage following injury without mention of open intracranial wound, with loss of consciousness of unspecified duration -85309 Other and unspecified intracranial hemorrhage following injury without mention of open intracranial wound, with concussion, unspecified -85310 Other and unspecified intracranial hemorrhage following injury with open intracranial wound, unspecified state of consciousness -85311 Other and unspecified intracranial hemorrhage following injury with open intracranial wound, with no loss of consciousness -85312 Other and unspecified intracranial hemorrhage following injury with open intracranial wound, with brief [less than one hour] loss of consciousness -85313 Other and unspecified intracranial hemorrhage following injury with open intracranial wound, with moderate [1-24 hours] loss of consciousness -85314 Other and unspecified intracranial hemorrhage following injury with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85315 Other and unspecified intracranial hemorrhage following injury with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85316 Other and unspecified intracranial hemorrhage following injury with open intracranial wound, with loss of consciousness of unspecified duration -85319 Other and unspecified intracranial hemorrhage following injury with open intracranial wound, with concussion, unspecified -85400 Intracranial injury of other and unspecified nature without mention of open intracranial wound, unspecified state of consciousness -85401 Intracranial injury of other and unspecified nature without mention of open intracranial wound, with no loss of consciousness -85402 Intracranial injury of other and unspecified nature without mention of open intracranial wound, with brief [less than one hour] loss of consciousness -85403 Intracranial injury of other and unspecified nature without mention of open intracranial wound, with moderate [1-24 hours] loss of consciousness -85404 Intracranial injury of other and unspecified nature without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85405 Intracranial injury of other and unspecified nature without mention of open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85406 Intracranial injury of other and unspecified nature without mention of open intracranial wound, with loss of consciousness of unspecified duration -85409 Intracranial injury of other and unspecified nature without mention of open intracranial wound, with concussion, unspecified -85410 Intracranial injury of other and unspecified nature with open intracranial wound, unspecified state of consciousness -85411 Intracranial injury of other and unspecified nature with open intracranial wound, with no loss of consciousness -85412 Intracranial injury of other and unspecified nature with open intracranial wound, with brief [less than one hour] loss of consciousness -85413 Intracranial injury of other and unspecified nature with open intracranial wound, with moderate [1-24 hours] loss of consciousness -85414 Intracranial injury of other and unspecified nature with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness and return to pre-existing conscious level -85415 Intracranial injury of other and unspecified nature with open intracranial wound, with prolonged [more than 24 hours] loss of consciousness without return to pre-existing conscious level -85416 Intracranial injury of other and unspecified nature with open intracranial wound, with loss of consciousness of unspecified duration -85419 Intracranial injury of other and unspecified nature with open intracranial wound, with concussion, unspecified -8600 Traumatic pneumothorax without mention of open wound into thorax -8601 Traumatic pneumothorax with open wound into thorax -8602 Traumatic hemothorax without mention of open wound into thorax -8603 Traumatic hemothorax with open wound into thorax -8604 Traumatic pneumohemothorax without mention of open wound into thorax -8605 Traumatic pneumohemothorax with open wound into thorax -86100 Unspecified injury of heart without mention of open wound into thorax -86101 Contusion of heart without mention of open wound into thorax -86102 Laceration of heart without penetration of heart chambers or without mention of open wound into thorax -86103 Laceration of heart with penetration of heart chambers without mention of open wound into thorax -86110 Unspecified injury of heart with open wound into thorax -86111 Contusion of heart with open wound into thorax -86112 Laceration of heart without penetration of heart chambers, with open wound into thorax -86113 Laceration of heart with penetration of heart chambers with open wound into thorax -86120 Unspecified injury of lung without mention of open wound into thorax -86121 Contusion of lung without mention of open wound into thorax -86122 Laceration of lung without mention of open wound into thorax -86130 Unspecified injury of lung with open wound into thorax -86131 Contusion of lung with open wound into thorax -86132 Laceration of lung with open wound into thorax -8620 Injury to diaphragm, without mention of open wound into cavity -8621 Injury to diaphragm, with open wound into cavity -86221 Injury to bronchus without mention of open wound into cavity -86222 Injury to esophagus without mention of open wound into cavity -86229 Injury to other specified intrathoracic organs without mention of open wound into cavity -86231 Injury to bronchus with open wound into cavity -86232 Injury to esophagus with open wound into cavity -86239 Injury to other specified intrathoracic organs with open wound into cavity -8628 Injury to multiple and unspecified intrathoracic organs, without mention of open wound into cavity -8629 Injury to multiple and unspecified intrathoracic organs, with open wound into cavity -8630 Injury to stomach, without mention of open wound into cavity -8631 Injury to stomach, with open wound into cavity -86320 Injury to small intestine, unspecified site, without open wound into cavity -86321 Injury to duodenum, without open wound into cavity -86329 Other injury to small intestine, without mention of open wound into cavity -86330 Injury to small intestine, unspecified site, with open wound into cavity -86331 Injury to duodenum, with open wound into cavity -86339 Other injury to small intestine, with open wound into cavity -86340 Injury to colon, unspecified site, without mention of open wound into cavity -86341 Injury to ascending [right] colon, without mention of open wound into cavity -86342 Injury to transverse colon, without mention of open wound into cavity -86343 Injury to descending [left] colon, without mention of open wound into cavity -86344 Injury to sigmoid colon, without mention of open wound into cavity -86345 Injury to rectum, without mention of open wound into cavity -86346 Injury to multiple sites in colon and rectum, without mention of open wound into cavity -86349 Other injury to colon or rectum, without mention of open wound into cavity -86350 Injury to colon, unspecified site, with open wound into cavity -86351 Injury to ascending [right] colon, with open wound into cavity -86352 Injury to transverse colon, with open wound into cavity -86353 Injury to descending [left] colon, with open wound into cavity -86354 Injury to sigmoid colon, with open wound into cavity -86355 Injury to rectum, with open wound into cavity -86356 Injury to multiple sites in colon and rectum, with open wound into cavity -86359 Other injury to colon or rectum, with open wound into cavity -86380 Injury to gastrointestinal tract, unspecified site, without mention of open wound into cavity -86381 Injury to pancreas, head, without mention of open wound into cavity -86382 Injury to pancreas, body, without mention of open wound into cavity -86383 Injury to pancreas, tail, without mention of open wound into cavity -86384 Injury to pancreas, multiple and unspecified sites, without mention of open wound into cavity -86385 Injury to appendix, without mention of open wound into cavity -86389 Injury to other gastrointestinal sites, without mention of open wound into cavity -86390 Injury to gastrointestinal tract, unspecified site, with open wound into cavity -86391 Injury to pancreas, head, with open wound into cavity -86392 Injury to pancreas, body, with open wound into cavity -86393 Injury to pancreas, tail, with open wound into cavity -86394 Injury to pancreas, multiple and unspecified sites, with open wound into cavity -86395 Injury to appendix, with open wound into cavity -86399 Injury to other gastrointestinal sites, with open wound into cavity -86400 Injury to liver without mention of open wound into cavity, unspecified injury -86401 Injury to liver without mention of open wound into cavity, hematoma and contusion -86402 Injury to liver without mention of open wound into cavity, laceration, minor -86403 Injury to liver without mention of open wound into cavity, laceration, moderate -86404 Injury to liver without mention of open wound into cavity, laceration, major -86405 Injury to liver without mention of open wound into cavity laceration, unspecified -86409 Other injury to liver without mention of open wound into cavity -86410 Injury to liver with open wound into cavity, unspecified injury -86411 Injury to liver with open wound into cavity, hematoma and contusion -86412 Injury to liver with open wound into cavity, laceration, minor -86413 Injury to liver with open wound into cavity, laceration, moderate -86414 Injury to liver with open wound into cavity, laceration, major -86415 Injury to liver with open wound into cavity, laceration, unspecified -86419 Other injury to liver with open wound into cavity -86500 Injury to spleen without mention of open wound into cavity, unspecified injury -86501 Injury to spleen without mention of open wound into cavity, hematoma without rupture of capsule -86502 Injury to spleen without mention of open wound into cavity, capsular tears, without major disruption of parenchyma -86503 Injury to spleen without mention of open wound into cavity, laceration extending into parenchyma -86504 Injury to spleen without mention of open wound into cavity, massive parenchymal disruption -86509 Other injury into spleen without mention of open wound into cavity -86510 Injury to spleen with open wound into cavity, unspecified injury -86511 Injury to spleen with open wound into cavity, hematoma without rupture of capsule -86512 Injury to spleen with open wound into cavity, capsular tears, without major disruption of parenchyma -86513 Injury to spleen with open wound into cavity, laceration extending into parenchyma -86514 Injury to spleen with open wound into cavity, massive parenchyma disruption -86519 Other injury to spleen with open wound into cavity -86600 Injury to kidney without mention of open wound into cavity, unspecified injury -86601 Injury to kidney without mention of open wound into cavity, hematoma without rupture of capsule -86602 Injury to kidney without mention of open wound into cavity, laceration -86603 Injury to kidney without mention of open wound into cavity, complete disruption of kidney parenchyma -86610 Injury to kidney with open wound into cavity, unspecified injury -86611 Injury to kidney with open wound into cavity, hematoma without rupture of capsule -86612 Injury to kidney with open wound into cavity, laceration -86613 Injury to kidney with open wound into cavity, complete disruption of kidney parenchyma -8670 Injury to bladder and urethra, without mention of open wound into cavity -8671 Injury to bladder and urethra, with open wound into cavity -8672 Injury to ureter, without mention of open wound into cavity -8673 Injury to ureter, with open wound into cavity -8674 Injury to uterus, without mention of open wound into cavity -8675 Injury to uterus, with open wound into cavity -8676 Injury to other specified pelvic organs, without mention of open wound into cavity -8677 Injury to other specified pelvic organs, with open wound into cavity -8678 Injury to unspecified pelvic organ, without mention of open wound into cavity -8679 Injury to unspecified pelvic organ, with open wound into cavity -86800 Injury to other intra-abdominal organs without mention of open wound into cavity, unspecified intra-abdominal organ -86801 Injury to other intra-abdominal organs without mention of open wound into cavity, adrenal gland -86802 Injury to other intra-abdominal organs without mention of open wound into cavity, bile duct and gallbladder -86803 Injury to other intra-abdominal organs without mention of open wound into cavity, peritoneum -86804 Injury to other intra-abdominal organs without mention of open wound into cavity, retroperitoneum -86809 Injury to other and multiple intra-abdominal organs without mention of open wound into cavity -86810 Injury to other intra-abdominal organs with open wound into cavity, unspecified intra-abdominal organ -86811 Injury to other intra-abdominal organs with open wound into cavity, adrenal gland -86812 Injury to other intra-abdominal organs with open wound into cavity, bile duct and gallbladder -86813 Injury to other intra-abdominal organs with open wound into cavity, peritoneum -86814 Injury to other intra-abdominal organs with open wound into cavity, retroperitoneum -86819 Injury to other and multiple intra-abdominal organs, with open wound into cavity -8690 Internal injury to unspecified or ill-defined organs without mention of open wound into cavity -8691 Internal injury to unspecified or ill-defined organs with open wound into cavity -8700 Laceration of skin of eyelid and periocular area -8701 Laceration of eyelid, full-thickness, not involving lacrimal passages -8702 Laceration of eyelid involving lacrimal passages -8703 Penetrating wound of orbit, without mention of foreign body -8704 Penetrating wound of orbit with foreign body -8708 Other specified open wounds of ocular adnexa -8709 Unspecified open wound of ocular adnexa -8710 Ocular laceration without prolapse of intraocular tissue -8711 Ocular laceration with prolapse or exposure of intraocular tissue -8712 Rupture of eye with partial loss of intraocular tissue -8713 Avulsion of eye -8714 Unspecified laceration of eye -8715 Penetration of eyeball with magnetic foreign body -8716 Penetration of eyeball with (nonmagnetic) foreign body -8717 Unspecified ocular penetration -8719 Unspecified open wound of eyeball -87200 Open wound of external ear, unspecified site, without mention of complication -87201 Open wound of auricle, ear, without mention of complication -87202 Open wound of auditory canal, without mention of complication -87210 Open wound of external ear, unspecified site, complicated -87211 Open wound of auricle, ear, complicated -87212 Open wound of auditory canal, complicated -87261 Open wound of ear drum, without mention of complication -87262 Open wound of ossicles, without mention of complication -87263 Open wound of eustachian tube, without mention of complication -87264 Open wound of cochlea, without mention of complication -87269 Open wound of other and multiple sites of ear, without mention of complication -87271 Open wound of ear drum, complicated -87272 Open wound of ossicles, complicated -87273 Open wound of eustachian tube, complicated -87274 Open wound of cochlea, complicated -87279 Open wound of other and multiple sites of ear, complicated -8728 Open wound of ear, part unspecified, without mention of complication -8729 Open wound of ear, part unspecified, complicated -8730 Open wound of scalp, without mention of complication -8731 Open wound of scalp, complicated -87320 Open wound of nose, unspecified site, without mention of complication -87321 Open wound of nasal septum, without mention of complication -87322 Open wound of nasal cavity, without mention of complication -87323 Open wound of nasal sinus, without mention of complication -87329 Open wound of multiple sites of nose, without mention of complication -87330 Open wound of nose, unspecified site, complicated -87331 Open wound of nasal septum, complicated -87332 Open wound of nasal cavity, complicated -87333 Open wound of nasal sinus, complicated -87339 Open wound of multiple sites of nose, complicated -87340 Open wound of face, unspecified site, without mention of complication -87341 Open wound of cheek, without mention of complication -87342 Open wound of forehead, without mention of complication -87343 Open wound of lip, without mention of complication -87344 Open wound of jaw, without mention of complication -87349 Open wound of other and multiple sites of face, without mention of complication -87350 Open wound of face, unspecified site, complicated -87351 Open wound of cheek, complicated -87352 Open wound of forehead, complicated -87353 Open wound of lip, complicated -87354 Open wound of jaw, complicated -87359 Open wound of other and multiple sites of face, complicated -87360 Open wound of mouth, unspecified site, without mention of complication -87361 Open wound of buccal mucosa, without mention of complication -87362 Open wound of gum (alveolar process), without mention of complication -87363 Open wound of tooth (broken) (fractured) (due to trauma), without mention of complication -87364 Open wound of tongue and floor of mouth, without mention of complication -87365 Open wound of palate, without mention of complication -87369 Open wound of other and multiple sites of mouth, without mention of complication -87370 Open wound of mouth, unspecified site, complicated -87371 Open wound of buccal mucosa, complicated -87372 Open wound of gum (alveolar process), complicated -87373 Open wound of tooth (broken) (fractured) (due to trauma), complicated -87374 Open wound of tongue and floor of mouth, complicated -87375 Open wound of palate, complicated -87379 Open wound of other and multiple sites of mouth, complicated -8738 Other and unspecified open wound of head without mention of complication -8739 Other and unspecified open wound of head, complicated -87400 Open wound of larynx with trachea, without mention of complication -87401 Open wound of larynx, without mention of complication -87402 Open wound of trachea, without mention of complication -87410 Open wound of larynx with trachea, complicated -87411 Open wound of larynx, complicated -87412 Open wound of trachea, complicated -8742 Open wound of thyroid gland, without mention of complication -8743 Open wound of thyroid gland, complicated -8744 Open wound of pharynx, without mention of complication -8745 Open wound of pharynx, complicated -8748 Open wound of other and unspecified parts of neck, without mention of complication -8749 Open wound of other and unspecified parts of neck, complicated -8750 Open wound of chest (wall), without mention of complication -8751 Open wound of chest (wall), complicated -8760 Open wound of back, without mention of complication -8761 Open wound of back, complicated -8770 Open wound of buttock, without mention of complication -8771 Open wound of buttock, complicated -8780 Open wound of penis, without mention of complication -8781 Open wound of penis, complicated -8782 Open wound of scrotum and testes, without mention of complication -8783 Open wound of scrotum and testes, complicated -8784 Open wound of vulva, without mention of complication -8785 Open wound of vulva, complicated -8786 Open wound of vagina, without mention of complication -8787 Open wound of vagina, complicated -8788 Open wound of other and unspecified parts of genital organs (external), without mention of complication -8789 Open wound of other and unspecified parts of genital organs (external), complicated -8790 Open wound of breast, without mention of complication -8791 Open wound of breast, complicated -8792 Open wound of abdominal wall, anterior, without mention of complication -8793 Open wound of abdominal wall, anterior, complicated -8794 Open wound of abdominal wall, lateral, without mention of complication -8795 Open wound of abdominal wall, lateral, complicated -8796 Open wound of other and unspecified parts of trunk, without mention of complication -8797 Open wound of other and unspecified parts of trunk, complicated -8798 Open wound(s) (multiple) of unspecified site(s), without mention of complication -8799 Open wound(s) (multiple) of unspecified site(s), complicated -88000 Open wound of shoulder region, without mention of complication -88001 Open wound of scapular region, without mention of complication -88002 Open wound of axillary region, without mention of complication -88003 Open wound of upper arm, without mention of complication -88009 Open wound of multiple sites of shoulder and upper arm, without mention of complication -88010 Open wound of shoulder region, complicated -88011 Open wound of scapular region, complicated -88012 Open wound of axillary region, complicated -88013 Open wound of upper arm, complicated -88019 Open wound of multiple sites of shoulder and upper arm, complicated -88020 Open wound of shoulder region, with tendon involvement -88021 Open wound of scapular region, with tendon involvement -88022 Open wound of axillary region, with tendon involvement -88023 Open wound of upper arm, with tendon involvement -88029 Open wound of multiple sites of shoulder and upper arm, with tendon involvement -88100 Open wound of forearm, without mention of complication -88101 Open wound of elbow, without mention of complication -88102 Open wound of wrist, without mention of complication -88110 Open wound of forearm, complicated -88111 Open wound of elbow, complicated -88112 Open wound of wrist, complicated -88120 Open wound of forearm, with tendon involvement -88121 Open wound of elbow, with tendon involvement -88122 Open wound of wrist, with tendon involvement -8820 Open wound of hand except finger(s) alone, without mention of complication -8821 Open wound of hand except finger(s) alone, complicated -8822 Open wound of hand except finger(s) alone, with tendon involvement -8830 Open wound of finger(s), without mention of complication -8831 Open wound of finger(s), complicated -8832 Open wound of finger(s), with tendon involvement -8840 Multiple and unspecified open wound of upper limb, without mention of complication -8841 Multiple and unspecified open wound of upper limb, complicated -8842 Multiple and unspecified open wound of upper limb, with tendon involvement -8850 Traumatic amputation of thumb (complete)(partial), without mention of complication -8851 Traumatic amputation of thumb (complete)(partial), complicated -8860 Traumatic amputation of other finger(s) (complete) (partial), without mention of complication -8861 Traumatic amputation of other finger(s) (complete) (partial), complicated -8870 Traumatic amputation of arm and hand (complete) (partial), unilateral, below elbow, without mention of complication -8871 Traumatic amputation of arm and hand (complete) (partial), unilateral, below elbow, complicated -8872 Traumatic amputation of arm and hand (complete) (partial), unilateral, at or above elbow, without mention of complication -8873 Traumatic amputation of arm and hand (complete) (partial), unilateral, at or above elbow, complicated -8874 Traumatic amputation of arm and hand (complete) (partial), unilateral, level not specified, without mention of complication -8875 Traumatic amputation of arm and hand (complete) (partial), unilateral, level not specified, complicated -8876 Traumatic amputation of arm and hand (complete) (partial), bilateral [any level], without mention of complication -8877 Traumatic amputation of arm and hand (complete) (partial), bilateral [any level], complicated -8900 Open wound of hip and thigh, without mention of complication -8901 Open wound of hip and thigh, complicated -8902 Open wound of hip and thigh, with tendon involvement -8910 Open wound of knee, leg [except thigh], and ankle, without mention of complication -8911 Open wound of knee, leg [except thigh], and ankle, complicated -8912 Open wound of knee, leg [except thigh], and ankle, with tendon involvement -8920 Open wound of foot except toe(s) alone, without mention of complication -8921 Open wound of foot except toe(s) alone, complicated -8922 Open wound of foot except toe(s) alone, with tendon involvement -8930 Open wound of toe(s), without mention of complication -8931 Open wound of toe(s), complicated -8932 Open wound of toe(s), with tendon involvement -8940 Multiple and unspecified open wound of lower limb, without mention of complication -8941 Multiple and unspecified open wound of lower limb, complicated -8942 Multiple and unspecified open wound of lower limb, with tendon involvement -8950 Traumatic amputation of toe(s) (complete) (partial), without mention of complication -8951 Traumatic amputation of toe(s) (complete) (partial), complicated -8960 Traumatic amputation of foot (complete) (partial), unilateral, without mention of complication -8961 Traumatic amputation of foot (complete) (partial), unilateral, complicated -8962 Traumatic amputation of foot (complete) (partial), bilateral, without mention of complication -8963 Traumatic amputation of foot (complete) (partial), bilateral, complicated -8970 Traumatic amputation of leg(s) (complete) (partial), unilateral, below knee, without mention of complication -8971 Traumatic amputation of leg(s) (complete) (partial), unilateral, below knee, complicated -8972 Traumatic amputation of leg(s) (complete) (partial), unilateral, at or above knee, without mention of complication -8973 Traumatic amputation of leg(s) (complete) (partial), unilateral, at or above knee, complicated -8974 Traumatic amputation of leg(s) (complete) (partial), unilateral, level not specified, without mention of complication -8975 Traumatic amputation of leg(s) (complete) (partial), unilateral, level not specified, complicated -8976 Traumatic amputation of leg(s) (complete) (partial), bilateral [any level]), without mention of complication -8977 Traumatic amputation of leg(s) (complete) (partial), bilateral [any level], complicated -90000 Injury to carotid artery, unspecified -90001 Injury to common carotid artery -90002 Injury to external carotid artery -90003 Injury to internal carotid artery -9001 Injury to internal jugular vein -90081 Injury to external jugular vein -90082 Injury to multiple blood vessels of head and neck -90089 Injury to other specified blood vessels of head and neck -9009 Injury to unspecified blood vessel of head and neck -9010 Injury to thoracic aorta -9011 Injury to innominate and subclavian arteries -9012 Injury to superior vena cava -9013 Injury to innominate and subclavian veins -90140 Injury to pulmonary vessel(s), unspecified -90141 Injury to pulmonary artery -90142 Injury to pulmonary vein -90181 Injury to intercostal artery or vein -90182 Injury to internal mammary artery or vein -90183 Injury to multiple blood vessels of thorax -90189 Injury to other specified blood vessels of thorax -9019 Injury to unspecified blood vessel of thorax -9020 Injury to abdominal aorta -90210 Injury to inferior vena cava, unspecified -90211 Injury to hepatic veins -90219 Injury to inferior vena cava, other -90220 Injury to celiac and mesenteric arteries, unspecified -90221 Injury to gastric artery -90222 Injury to hepatic artery -90223 Injury to splenic artery -90224 Injury to other specified branches of celiac axis -90225 Injury to superior mesenteric artery (trunk) -90226 Injury to primary branches of superior mesenteric artery -90227 Injury to inferior mesenteric artery -90229 Injury to celiac and mesenteric arteries, other -90231 Injury to superior mesenteric vein and primary subdivisions -90232 Injury to inferior mesenteric vein -90233 Injury to portal vein -90234 Injury to splenic vein -90239 Injury to portal and splenic veins, other -90240 Injury to renal vessel(s), unspecified -90241 Injury to renal artery -90242 Injury to renal vein -90249 Injury to renal blood vessels, other -90250 Injury to iliac vessel(s), unspecified -90251 Injury to hypogastric artery -90252 Injury to hypogastric vein -90253 Injury to iliac artery -90254 Injury to iliac vein -90255 Injury to uterine artery -90256 Injury to uterine vein -90259 Injury to iliac blood vessels, other -90281 Injury to ovarian artery -90282 Injury to ovarian vein -90287 Injury to multiple blood vessels of abdomen and pelvis -90289 Injury to other specified blood vessels of abdomen and pelvis -9029 Injury to unspecified blood vessel of abdomen and pelvis -90300 Injury to axillary vessel(s), unspecified -90301 Injury to axillary artery -90302 Injury to axillary vein -9031 Injury to brachial blood vessels -9032 Injury to radial blood vessels -9033 Injury to ulnar blood vessels -9034 Injury to palmar artery -9035 Injury to digital blood vessels -9038 Injury to other specified blood vessels of upper extremity -9039 Injury to unspecified blood vessel of upper extremity -9040 Injury to common femoral artery -9041 Injury to superficial femoral artery -9042 Injury to femoral veins -9043 Injury to saphenous veins -90440 Injury to popliteal vessel(s), unspecified -90441 Injury to popliteal artery -90442 Injury to popliteal vein -90450 Injury to tibial vessel(s), unspecified -90451 Injury to anterior tibial artery -90452 Injury to anterior tibial vein -90453 Injury to posterior tibial artery -90454 Injury to posterior tibial vein -9046 Injury to deep plantar blood vessels -9047 Injury to other specified blood vessels of lower extremity -9048 Injury to unspecified blood vessel of lower extremity -9049 Injury to blood vessels of unspecified site -9050 Late effect of fracture of skull and face bones -9051 Late effect of fracture of spine and trunk without mention of spinal cord lesion -9052 Late effect of fracture of upper extremities -9053 Late effect of fracture of neck of femur -9054 Late effect of fracture of lower extremities -9055 Late effect of fracture of multiple and unspecified bones -9056 Late effect of dislocation -9057 Late effect of sprain and strain without mention of tendon injury -9058 Late effect of tendon injury -9059 Late effect of traumatic amputation -9060 Late effect of open wound of head, neck, and trunk -9061 Late effect of open wound of extremities without mention of tendon injury -9062 Late effect of superficial injury -9063 Late effect of contusion -9064 Late effect of crushing -9065 Late effect of burn of eye, face, head, and neck -9066 Late effect of burn of wrist and hand -9067 Late effect of burn of other extremities -9068 Late effect of burns of other specified sites -9069 Late effect of burn of unspecified site -9070 Late effect of intracranial injury without mention of skull fracture -9071 Late effect of injury to cranial nerve -9072 Late effect of spinal cord injury -9073 Late effect of injury to nerve root(s), spinal plexus(es), and other nerves of trunk -9074 Late effect of injury to peripheral nerve of shoulder girdle and upper limb -9075 Late effect of injury to peripheral nerve of pelvic girdle and lower limb -9079 Late effect of injury to other and unspecified nerve -9080 Late effect of internal injury to chest -9081 Late effect of internal injury to intra-abdominal organs -9082 Late effect of internal injury to other internal organs -9083 Late effect of injury to blood vessel of head, neck, and extremities -9084 Late effect of injury to blood vessel of thorax, abdomen, and pelvis -9085 Late effect of foreign body in orifice -9086 Late effect of certain complications of trauma -9089 Late effect of unspecified injury -9090 Late effect of poisoning due to drug, medicinal or biological substance -9091 Late effect of toxic effects of nonmedical substances -9092 Late effect of radiation -9093 Late effect of complications of surgical and medical care -9094 Late effect of certain other external causes -9095 Late effect of adverse effect of drug, medicinal or biological substance -9099 Late effect of other and unspecified external causes -9100 Abrasion or friction burn of face, neck, and scalp except eye, without mention of infection -9101 Abrasion or friction burn of face, neck, and scalp except eye, infected -9102 Blister of face, neck, and scalp except eye, without mention of infection -9103 Blister of face, neck, and scalp except eye, infected -9104 Insect bite, nonvenomous of face, neck, and scalp except eye, without mention of infection -9105 Insect bite, nonvenomous of face, neck, and scalp except eye, infected -9106 Superficial foreign body (splinter) of face, neck, and scalp except eye, without major open wound and without mention of infection -9107 Superficial foreign body (splinter) of face, neck, and scalp except eye, without major open wound, infected -9108 Other and unspecified superficial injury of face, neck, and scalp, without mention of infection -9109 Other and unspecified superficial injury of face, neck, and scalp, infected -9110 Abrasion or friction burn of trunk, without mention of infection -9111 Abrasion or friction burn of trunk, infected -9112 Blister of trunk, without mention of infection -9113 Blister of trunk, infected -9114 Insect bite, nonvenomous of trunk, without mention of infection -9115 Insect bite, nonvenomous of trunk, infected -9116 Superficial foreign body (splinter) of trunk, without major open wound and without mention of infection -9117 Superficial foreign body (splinter) of trunk, without major open wound, infected -9118 Other and unspecified superficial injury of trunk, without mention of infection -9119 Other and unspecified superficial injury of trunk, infected -9120 Abrasion or friction burn of shoulder and upper arm, without mention of infection -9121 Abrasion or friction burn of shoulder and upper arm, infected -9122 Blister of shoulder and upper arm, without mention of infection -9123 Blister of shoulder and upper arm, infected -9124 Insect bite, nonvenomous of shoulder and upper arm, without mention of infection -9125 Insect bite, nonvenomous of shoulder and upper arm, infected -9126 Superficial foreign body (splinter) of shoulder and upper arm, without major open wound and without mention of infection -9127 Superficial foreign body (splinter) of shoulder and upper arm, without major open wound, infected -9128 Other and unspecified superficial injury of shoulder and upper arm, without mention of infection -9129 Other and unspecified superficial injury of shoulder and upper arm, infected -9130 Abrasion or friction burn of elbow, forearm, and wrist, without mention of infection -9131 Abrasion or friction burn of elbow, forearm, and wrist, infected -9132 Blister of elbow, forearm, and wrist, without mention of infection -9133 Blister of elbow, forearm, and wrist, infected -9134 Insect bite, nonvenomous of elbow, forearm, and wrist, without mention of infection -9135 Insect bite, nonvenomous, of elbow, forearm, and wrist, infected -9136 Superficial foreign body (splinter) of elbow, forearm, and wrist, without major open wound and without mention of infection -9137 Superficial foreign body (splinter) of elbow, forearm, and wrist, without major open wound, infected -9138 Other and unspecified superficial injury of elbow, forearm, and wrist, without mention of infection -9139 Other and unspecified superficial injury of elbow, forearm, and wrist, infected -9140 Abrasion or friction burn of hand(s) except finger(s) alone, without mention of infection -9141 Abrasion or friction burn of hand(s) except finger(s) alone, infected -9142 Blister of hand(s) except finger(s) alone, without mention of infection -9143 Blister of hand(s) except finger(s) alone, infected -9144 Insect bite, nonvenomous, of hand(s) except finger(s) alone, without mention of infection -9145 Insect bite, nonvenomous, of hand(s) except finger(s) alone, infected -9146 Superficial foreign body (splinter) of hand(s) except finger(s) alone, without major open wound and without mention of infection -9147 Superficial foreign body (splinter) of hand(s) except finger(s) alone, without major open wound, infected -9148 Other and unspecified superficial injury of hand(s) except finger(s) alone, without mention of infection -9149 Other and unspecified superficial injury of hand(s) except finger(s) alone, infected -9150 Abrasion or friction burn of finger(s), without mention of infection -9151 Abrasion or friction burn of finger(s), infected -9152 Blister of finger(s), without mention of infection -9153 Blister of finger(s), infected -9154 Insect bite, nonvenomous, of finger(s), without mention of infection -9155 Insect bite, nonvenomous of finger(s), infected -9156 Superficial foreign body (splinter) of finger(s), without major open wound and without mention of infection -9157 Superficial foreign body (splinter) of finger(s), without major open wound, infected -9158 Other and unspecified superficial injury of fingers without mention of infection -9159 Other and unspecified superficial injury of fingers, infected -9160 Abrasion or friction burn of hip, thigh, leg, and ankle, without mention of infection -9161 Abrasion or friction burn of hip, thigh, leg, and ankle, infected -9162 Blister of hip, thigh, leg, and ankle, without mention of infection -9163 Blister of hip, thigh, leg, and ankle, infected -9164 Insect bite, nonvenomous, of hip, thigh, leg, and ankle, without mention of infection -9165 Insect bite, nonvenomous of hip, thigh, leg, and ankle, infected -9166 Superficial foreign body (splinter) of hip, thigh, leg, and ankle, without major open wound and without mention of infection -9167 Superficial foreign body (splinter) of hip, thigh, leg, and ankle, without major open wound, infected -9168 Other and unspecified superficial injury of hip, thigh, leg, and ankle, without mention of infection -9169 Other and unspecified superficial injury of hip, thigh, leg, and ankle, infected -9170 Abrasion or friction burn of foot and toe(s), without mention of infection -9171 Abrasion or friction burn of foot and toe(s), infected -9172 Blister of foot and toe(s), without mention of infection -9173 Blister of foot and toe(s), infected -9174 Insect bite, nonvenomous, of foot and toe(s), without mention of infection -9175 Insect bite, nonvenomous, of foot and toe(s), infected -9176 Superficial foreign body (splinter) of foot and toe(s), without major open wound and without mention of infection -9177 Superficial foreign body (splinter) of foot and toe(s), without major open wound, infected -9178 Other and unspecified superficial injury of foot and toes, without mention of infection -9179 Other and unspecified superficial injury of foot and toes, infected -9180 Superficial injury of eyelids and periocular area -9181 Superficial injury of cornea -9182 Superficial injury of conjunctiva -9189 Other and unspecified superficial injuries of eye -9190 Abrasion or friction burn of other, multiple, and unspecified sites, without mention of infection -9191 Abrasion or friction burn of other, multiple, and unspecified sites, infected -9192 Blister of other, multiple, and unspecified sites, without mention of infection -9193 Blister of other, multiple, and unspecified sites, infected -9194 Insect bite, nonvenomous, of other, multiple, and unspecified sites, without mention of infection -9195 Insect bite, nonvenomous, of other, multiple, and unspecified sites, infected -9196 Superficial foreign body (splinter) of other, multiple, and unspecified sites, without major open wound and without mention of infection -9197 Superficial foreign body (splinter) of other, multiple, and unspecified sites, without major open wound, infected -9198 Other and unspecified superficial injury of other, multiple, and unspecified sites, without mention of infection -9199 Other and unspecified superficial injury of other, multiple, and unspecified sites, infected -920 Contusion of face, scalp, and neck except eye(s) -9210 Black eye, not otherwise specified -9211 Contusion of eyelids and periocular area -9212 Contusion of orbital tissues -9213 Contusion of eyeball -9219 Unspecified contusion of eye -9220 Contusion of breast -9221 Contusion of chest wall -9222 Contusion of abdominal wall -92231 Contusion of back -92232 Contusion of buttock -92233 Contusion of interscapular region -9224 Contusion of genital organs -9228 Contusion of multiple sites of trunk -9229 Contusion of unspecified part of trunk -92300 Contusion of shoulder region -92301 Contusion of scapular region -92302 Contusion of axillary region -92303 Contusion of upper arm -92309 Contusion of multiple sites of shoulder and upper arm -92310 Contusion of forearm -92311 Contusion of elbow -92320 Contusion of hand(s) -92321 Contusion of wrist -9233 Contusion of finger -9238 Contusion of multiple sites of upper limb -9239 Contusion of unspecified part of upper limb -92400 Contusion of thigh -92401 Contusion of hip -92410 Contusion of lower leg -92411 Contusion of knee -92420 Contusion of foot -92421 Contusion of ankle -9243 Contusion of toe -9244 Contusion of multiple sites of lower limb -9245 Contusion of unspecified part of lower limb -9248 Contusion of multiple sites, not elsewhere classified -9249 Contusion of unspecified site -9251 Crushing injury of face and scalp -9252 Crushing injury of neck -9260 Crushing injury of external genitalia -92611 Crushing injury of back -92612 Crushing injury of buttock -92619 Crushing injury of other specified sites of trunk -9268 Crushing injury of multiple sites of trunk -9269 Crushing injury of unspecified site of trunk -92700 Crushing injury of shoulder region -92701 Crushing injury of scapular region -92702 Crushing injury of axillary region -92703 Crushing injury of upper arm -92709 Crushing injury of multiple sites of upper arm -92710 Crushing injury of forearm -92711 Crushing injury of elbow -92720 Crushing injury of hand(s) -92721 Crushing injury of wrist -9273 Crushing injury of finger(s) -9278 Crushing injury of multiple sites of upper limb -9279 Crushing injury of unspecified site of upper limb -92800 Crushing injury of thigh -92801 Crushing injury of hip -92810 Crushing injury of lower leg -92811 Crushing injury of knee -92820 Crushing injury of foot -92821 Crushing injury of ankle -9283 Crushing injury of toe(s) -9288 Crushing injury of multiple sites of lower limb -9289 Crushing injury of unspecified site of lower limb -9290 Crushing injury of multiple sites, not elsewhere classified -9299 Crushing injury of unspecified site -9300 Corneal foreign body -9301 Foreign body in conjunctival sac -9302 Foreign body in lacrimal punctum -9308 Foreign body in other and combined sites on external eye -9309 Foreign body in unspecified site on external eye -931 Foreign body in ear -932 Foreign body in nose -9330 Foreign body in pharynx -9331 Foreign body in larynx -9340 Foreign body in trachea -9341 Foreign body in main bronchus -9348 Foreign body in other specified parts bronchus and lung -9349 Foreign body in respiratory tree, unspecified -9350 Foreign body in mouth -9351 Foreign body in esophagus -9352 Foreign body in stomach -936 Foreign body in intestine and colon -937 Foreign body in anus and rectum -938 Foreign body in digestive system, unspecified -9390 Foreign body in bladder and urethra -9391 Foreign body in uterus, any part -9392 Foreign body in vulva and vagina -9393 Foreign body in penis -9399 Foreign body in unspecified site in genitourinary tract -9400 Chemical burn of eyelids and periocular area -9401 Other burns of eyelids and periocular area -9402 Alkaline chemical burn of cornea and conjunctival sac -9403 Acid chemical burn of cornea and conjunctival sac -9404 Other burn of cornea and conjunctival sac -9405 Burn with resulting rupture and destruction of eyeball -9409 Unspecified burn of eye and adnexa -94100 Burn of unspecified degree of face and head, unspecified site -94101 Burn of unspecified degree of ear [any part] -94102 Burn of unspecified degree of eye (with other parts of face, head, and neck) -94103 Burn of unspecified degree of lip(s) -94104 Burn of unspecified degree of chin -94105 Burn of unspecified degree of nose (septum) -94106 Burn of unspecified degree of scalp [any part] -94107 Burn of unspecified degree of forehead and cheek -94108 Burn of unspecified degree of neck -94109 Burn of unspecified degree of multiple sites [except with eye] of face, head, and neck -94110 Erythema [first degree] of face and head, unspecified site -94111 Erythema [first degree] of ear [any part] -94112 Erythema [first degree] of eye (with other parts face, head, and neck) -94113 Erythema [first degree] of lip(s) -94114 Erythema [first degree] of chin -94115 Erythema [first degree] of nose (septum) -94116 Erythema [first degree] of scalp [any part] -94117 Erythema [first degree] of forehead and cheek -94118 Erythema [first degree] of neck -94119 Erythema [first degree] of multiple sites [except with eye] of face, head, and neck -94120 Blisters, epidermal loss [second degree] of face and head, unspecified site -94121 Blisters, epidermal loss [second degree] of ear [any part] -94122 Blisters, epidermal loss [second degree] of eye (with other parts of face, head, and neck) -94123 Blisters, epidermal loss [second degree] of lip(s) -94124 Blisters, epidermal loss [second degree] of chin -94125 Blisters, epidermal loss [second degree] of nose (septum) -94126 Blisters, epidermal loss [second degree] of scalp [any part] -94127 Blisters, epidermal loss [second degree] of forehead and cheek -94128 Blisters, epidermal loss [second degree] of neck -94129 Blisters, epidermal loss [second degree] of multiple sites [except with eye] of face, head, and neck -94130 Full-thickness skin loss [third degree, not otherwise specified] of face and head, unspecified site -94131 Full-thickness skin loss [third degree, not otherwise specified] of ear [any part] -94132 Full-thickness skin loss [third degree, not otherwise specified] of eye (with other parts of face, head, and neck) -94133 Full-thickness skin loss [third degree, not otherwise specified] of lip(s) -94134 Full-thickness skin loss [third degree, not otherwise specified] of chin -94135 Full-thickness skin loss [third degree, not otherwise specified] of nose (septum) -94136 Full-thickness skin loss [third degree, not otherwise specified] of scalp [any part] -94137 Full-thickness skin loss [third degree, not otherwise specified] of forehead and cheek -94138 Full-thickness skin loss [third degree, not otherwise specified] of neck -94139 Full-thickness skin loss [third degree, not otherwise specified] of multiple sites [except with eye] of face, head, and neck -94140 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, face and head, unspecified site -94141 Deep necrosis of underlying tissues [deep third degree]) without mention of loss of a body part, ear [any part] -94142 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of eye (with other parts of face, head, and neck) -94143 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of lip(s) -94144 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of chin -94145 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of nose (septum) -94146 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part of scalp [any part] -94147 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of forehead and cheek -94148 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of neck -94149 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of multiple sites [except with eye] of face, head, and neck -94150 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of face and head, unspecified site -94151 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of ear [any part] -94152 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of eye (with other parts of face, head, and neck) -94153 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of lip(s) -94154 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of chin -94155 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of nose (septum) -94156 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of scalp [any part] -94157 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of forehead and cheek -94158 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of neck -94159 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of multiple sites [except with eye] of face, head, and neck -94200 Burn of unspecified degree of trunk, unspecified site -94201 Burn of unspecified degree of breast -94202 Burn of unspecified degree of chest wall, excluding breast and nipple -94203 Burn of unspecified degree of abdominal wall -94204 Burn of unspecified degree of back [any part] -94205 Burn of unspecified degree of genitalia -94209 Burn of unspecified degree of other and multiple sites of trunk -94210 Erythema [first degree] of trunk, unspecified site -94211 Erythema [first degree] of breast -94212 Erythema [first degree] of chest wall, excluding breast and nipple -94213 Erythema [first degree] of abdominal wall -94214 Erythema [first degree] of back [any part] -94215 Erythema [first degree] of genitalia -94219 Erythema [first degree] of other and multiple sites of trunk -94220 Blisters, epidermal loss [second degree] of trunk, unspecified site -94221 Blisters, epidermal loss [second degree] of breast -94222 Blisters, epidermal loss [second degree] of chest wall, excluding breast and nipple -94223 Blisters, epidermal loss [second degree] of abdominal wall -94224 Blisters, epidermal loss [second degree] of back [any part] -94225 Blisters, epidermal loss [second degree] of genitalia -94229 Blisters, epidermal loss [second degree] of other and multiple sites of trunk -94230 Full-thickness skin loss [third degree, not otherwise specified] of trunk, unspecified site -94231 Full-thickness skin loss [third degree,not otherwise specified] of breast -94232 Full-thickness skin loss [third degree, not otherwise specified] of chest wall, excluding breast and nipple -94233 Full-thickness skin loss [third degree, not otherwise specified] of abdominal wall -94234 Full-thickness skin loss [third degree,not otherwise specified] of back [any part] -94235 Full-thickness skin loss [third degree, not otherwise specified] of genitalia -94239 Full-thickness skin loss [third degree, not otherwise specified] of other and multiple sites of trunk -94240 Deep necrosis of underlying tissues [deep third degree] ) without mention of loss of a body part, of trunk, unspecified site -94241 Deep necrosis of underlying tissues [deep third degree]) without mention of loss of a body part, of breast -94242 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of chest wall, excluding breast and nipple -94243 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of abdominal wall -94244 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of back [any part] -94245 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of genitalia -94249 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of other and multiple sites of trunk -94250 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, trunk, unspecified site -94251 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of breast -94252 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of chest wall, excluding breast and nipple -94253 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of abdominal wall -94254 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of back [any part] -94255 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of genitalia -94259 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of other and multiple sites of trunk, -94300 Burn of unspecified degree of upper limb, except wrist and hand, unspecified site -94301 Burn of unspecified degree of forearm -94302 Burn of unspecified degree of elbow -94303 Burn of unspecified degree of upper arm -94304 Burn of unspecified degree of axilla -94305 Burn of unspecified degree of shoulder -94306 Burn of unspecified degree of scapular region -94309 Burn of unspecified degree of multiple sites of upper limb, except wrist and hand -94310 Erythema [first degree] of upper limb, unspecified site -94311 Erythema [first degree] of forearm -94312 Erythema [first degree] of elbow -94313 Erythema [first degree] of upper arm -94314 Erythema [first degree] of axilla -94315 Erythema [first degree] of shoulder -94316 Erythema [first degree] of scapular region -94319 Erythema [first degree] of multiple sites of upper limb, except wrist and hand -94320 Blisters, epidermal loss [second degree] of upper limb, unspecified site -94321 Blisters, epidermal loss [second degree] of forearm -94322 Blisters, epidermal loss [second degree] of elbow -94323 Blisters, epidermal loss [second degree] of upper arm -94324 Blisters, epidermal loss [second degree] of axilla -94325 Blisters, epidermal loss [second degree] of shoulder -94326 Blisters, epidermal loss [second degree] of scapular region -94329 Blisters, epidermal loss [second degree] of multiple sites of upper limb, except wrist and hand -94330 Full-thickness skin [third degree, not otherwise specified] of upper limb, unspecified site -94331 Full-thickness skin loss [third degree, not otherwise specified] of forearm -94332 Full-thickness skin loss [third degree, not otherwise specified] of elbow -94333 Full-thickness skin loss [third degree, not otherwise specified] of upper arm -94334 Full-thickness skin loss [third degree, not otherwise specified] of axilla -94335 Full-thickness skin loss [third degree, not otherwise specified] of shoulder -94336 Full-thickness skin loss [third degree, not otherwise specified] of scapular region -94339 Full-thickness skin loss [third degree, not otherwise specified] of multiple sites of upper limb, except wrist and hand -94340 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of upper limb,unspecified site -94341 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of forearm -94342 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of elbow -94343 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of upper arm -94344 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of axilla -94345 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of shoulder -94346 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of scapular region -94349 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of multiple sites of upper limb, except wrist and hand -94350 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of upper limb, unspecified site -94351 Deep necrosis of underlying tissues [deep third degree) with loss of a body part, of forearm -94352 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of elbow -94353 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of upper arm -94354 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of axilla -94355 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of shoulder -94356 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of scapular region -94359 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of multiple sites of upper limb, except wrist and hand -94400 Burn of unspecified degree of hand, unspecified site -94401 Burn of unspecified degree of single digit (finger (nail) other than thumb -94402 Burn of unspecified degree of thumb (nail) -94403 Burn of unspecified degree of two or more digits of hand, not including thumb -94404 Burn of unspecified degree of two or more digits of hand, including thumb -94405 Burn of unspecified degree of palm -94406 Burn of unspecified degree of back of hand -94407 Burn of unspecified degree of wrist -94408 Burn of unspecified degree of multiple sites of wrist(s) and hand(s) -94410 Erythema [first degree] of hand, unspecified site -94411 Erythema [first degree] of single digit (finger (nail)) other than thumb -94412 Erythema [first degree] of thumb (nail) -94413 Erythema [first degree] of two or more digits of hand, not including thumb -94414 Erythema [first degree] of two or more digits of hand including thumb -94415 Erythema [first degree] of palm -94416 Erythema [first degree] of back of hand -94417 Erythema [first degree] of wrist -94418 Erythema [first degree] of multiple sites of wrist(s) and hand(s) -94420 Blisters, epidermal loss [second degree] of hand, unspecified site -94421 Blisters, epidermal loss [second degree] of single digit [finger (nail)] other than thumb -94422 Blisters, epidermal loss [second degree] of thumb (nail) -94423 Blisters, epidermal loss [second degree] of two or more digits of hand, not including thumb -94424 Blisters, epidermal loss [second degree] of two or more digits of hand including thumb -94425 Blisters, epidermal loss [second degree] of palm -94426 Blisters , epidermal loss [second degree] of back of hand -94427 Blisters, epidermal loss [second degree] of wrist -94428 Blisters, epidermal loss [second degree] of multiple sites of wrist(s) and hand(s) -94430 Full-thickness skin loss [third degree, not otherwise specified] of hand, unspecified site -94431 Full-thickness skin loss [third degree, not otherwise specified] of single digit [finger (nail)] other than thumb -94432 Full-thickness skin loss [third degree, not otherwise specified] of thumb (nail) -94433 Full-thickness skin loss [third degree, not otherwise specified]of two or more digits of hand, not including thumb -94434 Full-thickness skin loss [third degree, not otherwise specified] of two or more digits of hand including thumb -94435 Full-thickness skin loss [third degree, not otherwise specified] of palm of hand -94436 Full-thickness skin loss [third degree, not otherwise specified] of back of hand -94437 Full-thickness skin loss [third degree, not otherwise specified] of wrist -94438 Full-thickness skin loss [third degree, not otherwise specified] of multiple sites of wrist(s) and hand(s) -94440 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, hand, unspecified site -94441 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, single digit [finger (nail)] other than thumb -94442 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, thumb (nail) -94443 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, two or more digits of hand, not including thumb -94444 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, two or more digits of hand including thumb -94445 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of palm of hand -94446 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of back of hand -94447 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of wrist -94448 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of multiple sites of wrist(s) and hand(s) -94450 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of hand, unspecified site -94451 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of single digit [finger (nail)] other than thumb -94452 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of thumb (nail) -94453 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of two or more digits of hand, not including thumb -94454 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of two or more digits of hand including thumb -94455 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of palm of hand -94456 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of back of hand -94457 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of wrist -94458 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of multiple sites of wrist(s) and hand(s) -94500 Burn of unspecified degree of lower limb [leg], unspecified site -94501 Burn of unspecified degree of toe(s) (nail) -94502 Burn of unspecified degree of foot -94503 Burn of unspecified degree of ankle -94504 Burn of unspecified degree of lower leg -94505 Burn of unspecified degree of knee -94506 Burn of unspecified degree of thigh [any part] -94509 Burn of unspecified degree of multiple sites of lower limb(s) -94510 Erythema [first degree] of lower limb [leg], unspecified site -94511 Erythema [first degree] of toe(s) (nail) -94512 Erythema [first degree] of foot -94513 Erythema [first degree] of ankle -94514 Erythema [first degree] of lower leg -94515 Erythema [first degree] of knee -94516 Erythema [first degree] of thigh [any part] -94519 Erythema [first degree] of multiple sites of lower limb(s) -94520 Blisters, epidermal loss [second degree] of lower limb [leg], unspecified site -94521 Blisters, epidermal loss [second degree] of toe(s) (nail) -94522 Blisters, epidermal loss [second degree] of foot -94523 Blisters, epidermal loss [second degree] of ankle -94524 Blisters, epidermal loss [second degree] of lower leg -94525 Blisters, epidermal loss [second degree] of knee -94526 Blisters, epidermal loss [second degree] of thigh [any part] -94529 Blisters, epidermal loss [second degree] of multiple sites of lower limb(s) -94530 Full-thickness skin loss [third degree NOS] of lower limb [leg] unspecified site -94531 Full-thickness skin loss [third degree NOS] of toe(s) (nail) -94532 Full-thickness skin loss [third degree NOS] of foot -94533 Full-thickness skin loss [third degree NOS] of ankle -94534 Full-thickness skin loss [third degree nos] of lower leg -94535 Full-thickness skin loss [third degree NOS] of knee -94536 Full-thickness skin loss [third degree NOS] of thigh [any part] -94539 Full-thickness skin loss [third degree NOS] of multiple sites of lower limb(s) -94540 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, lower limb [leg], unspecified site -94541 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of toe(s)(nail) -94542 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of foot -94543 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of ankle -94544 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of lower leg -94545 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of knee -94546 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of thigh [any part] -94549 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of multiple sites of lower limb(s) -94550 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of lower limb [leg], unspecified site -94551 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of toe(s) (nail) -94552 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of foot -94553 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of ankle -94554 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of lower leg -94555 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of knee -94556 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of thigh [any part] -94559 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of multiple sites of lower limb(s) -9460 Burns of multiple specified sites, unspecified degree -9461 Erythema [first degree] of multiple specified sites -9462 Blisters, epidermal loss [second degree] of multiple specified sites -9463 Full-thickness skin loss [third degree NOS] of multiple specified sites -9464 Deep necrosis of underlying tissues [deep third degree] without mention of loss of a body part, of multiple specified sites -9465 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, of multiple specified sites -9470 Burn of mouth and pharynx -9471 Burn of larynx, trachea, and lung -9472 Burn of esophagus -9473 Burn of gastrointestinal tract -9474 Burn of vagina and uterus -9478 Burn of other specified sites of internal organs -9479 Burn of internal organs, unspecified site -94800 Burn [any degree] involving less than 10 percent of body surface with third degree burn, less than 10 percent or unspecified -94810 Burn [any degree] involving 10-19 percent of body surface with third degree burn, less than 10 percent or unspecified -94811 Burn [any degree] involving 10-19 percent of body surface with third degree burn, 10-19% -94820 Burn [any degree] involving 20-29 percent of body surface with third degree burn, less than 10 percent or unspecified -94821 Burn [any degree] involving 20-29 percent of body surface with third degree burn, 10-19% -94822 Burn [any degree] involving 20-29 percent of body surface with third degree burn, 20-29% -94830 Burn [any degree] involving 30-39 percent of body surface with third degree burn, less than 10 percent or unspecified -94831 Burn [any degree] involving 30-39 percent of body surface with third degree burn, 10-19% -94832 Burn [any degree] involving 30-39 percent of body surface with third degree burn, 20-29% -94833 Burn [any degree] involving 30-39 percent of body surface with third degree burn, 30-39% -94840 Burn [any degree] involving 40-49 percent of body surface with third degree burn, less than 10 percent or unspecified -94841 Burn [any degree] involving 40-49 percent of body surface with third degree burn, 10-19% -94842 Burn [any degree] involving 40-49 percent of body surface with third degree burn, 20-29% -94843 Burn [any degree] involving 40-49 percent of body surface with third degree burn, 30-39% -94844 Burn [any degree] involving 40-49 percent of body surface with third degree burn, 40-49% -94850 Burn [any degree] involving 50-59 percent of body surface with third degree burn, less than 10 percent or unspecified -94851 Burn [any degree] involving 50-59 percent of body surface with third degree burn, 10-19% -94852 Burn [any degree] involving 50-59 percent of body surface with third degree burn, 20-29% -94853 Burn [any degree] involving 50-59 percent of body surface with third degree burn, 30-39% -94854 Burn [any degree] involving 50-59 percent of body surface with third degree burn, 40-49% -94855 Burn [any degree] involving 50-59 percent of body surface with third degree burn, 50-59% -94860 Burn [any degree] involving 60-69 percent of body surface with third degree burn, less than 10 percent or unspecified -94861 Burn [any degree] involving 60-69 percent of body surface with third degree burn, 10-19% -94862 Burn [any degree] involving 60-69 percent of body surface with third degree burn, 20-29% -94863 Burn [any degree] involving 60-69 percent of body surface with third degree burn, 30-39% -94864 Burn [any degree] involving 60-69 percent of body surface with third degree burn, 40-49% -94865 Burn (any degree) involving 60-69 percent of body surface with third degree burn, 50-59% -94866 Burn [any degree] involving 60-69 percent of body surface with third degree burn, 60-69% -94870 Burn [any degree] involving 70-79 percent of body surface with third degree burn, less than 10 percent or unspecified -94871 Burn [any degree] involving 70-79 percent of body surface with third degree burn, 10-19% -94872 Burn [any degree] involving 70-79 percent of body surface with third degree burn, 20-29% -94873 Burn [any degree] involving 70-79 percent of body surface with third degree burn, 30-39% -94874 Burn [any degree] involving 70-79 percent of body surface with third degree burn, 40-49% -94875 Burn [any degree] involving 70-79 percent of body surface with third degree burn, 50-59% -94876 Burn [any degree] involving 70-79 percent of body surface with third degree burn, 60-69% -94877 Burn [any degree] involving 70-79 percent of body surface with third degree burn, 70-79% -94880 Burn [any degree] involving 80-89 percent of body surface with third degree burn, less than 10 percent or unspecified -94881 Burn [any degree] involving 80-89 percent of body surface with third degree burn, 10-19% -94882 Burn [any degree] involving 80-89 percent of body surface with third degree burn, 20-29% -94883 Burn [any degree] involving 80-89 percent of body surface with third degree burn, 30-39% -94884 Burn [any degree] involving 80-89 percent of body surface with third degree burn, 40-49% -94885 Burn [any degree] involving 80-89 percent of body surface with third degree burn, 50-59% -94886 Burn [any degree] involving 80-89 percent of body surface with third degree burn, 60-69% -94887 Burn [any degree] involving 80-89 percent of body surface with third degree burn, 70-79% -94888 Burn [any degree] involving 80-89 percent of body surface with third degree burn, 80-89% -94890 Burn [any degree] involving 90 percent or more of body surface with third degree burn, less than 10 percent or unspecified -94891 Burn [any degree] involving 90 percent or more of body surface with third degree burn, 10-19% -94892 Burn [any degree] involving 90 percent or more of body surface with third degree burn, 20-29% -94893 Burn [any degree] involving 90 percent or more of body surface with third degree burn, 30-39% -94894 Burn [any degree] involving 90 percent or more of body surface with third degree burn, 40-49% -94895 Burn [any degree] involving 90 percent or more of body surface with third degree burn, 50-59% -94896 Burn [any degree] involving 90 percent or more of body surface with third degree burn, 60-69% -94897 Burn [any degree] involving 90 percent or more of body surface with third degree burn, 70-79% -94898 Burn [any degree] involving 90 percent or more of body surface with third degree burn, 80-89% -94899 Burn [any degree] involving 90 percent or more of body surface with third degree burn, 90% or more of body surface -9490 Burn of unspecified site, unspecified degree -9491 Erythema [first degree], unspecified site -9492 Blisters, epidermal loss [second degree], unspecified site -9493 Full-thickness skin loss [third degree nos] -9494 Deep necrosis of underlying tissue [deep third degree] without mention of loss of a body part, unspecified -9495 Deep necrosis of underlying tissues [deep third degree] with loss of a body part, unspecified -9500 Optic nerve injury -9501 Injury to optic chiasm -9502 Injury to optic pathways -9503 Injury to visual cortex -9509 Injury to unspecified optic nerve and pathways -9510 Injury to oculomotor nerve -9511 Injury to trochlear nerve -9512 Injury to trigeminal nerve -9513 Injury to abducens nerve -9514 Injury to facial nerve -9515 Injury to acoustic nerve -9516 Injury to accessory nerve -9517 Injury to hypoglossal nerve -9518 Injury to other specified cranial nerves -9519 Injury to unspecified cranial nerve -95200 C1-C4 level with unspecified spinal cord injury -95201 C1-C4 level with complete lesion of spinal cord -95202 C1-C4 level with anterior cord syndrome -95203 C1-C4 level with central cord syndrome -95204 C1-C4 level with other specified spinal cord injury -95205 C5-C7 level with unspecified spinal cord injury -95206 C5-C7 level with complete lesion of spinal cord -95207 C5-C7 level with anterior cord syndrome -95208 C5-C7 level with central cord syndrome -95209 C5-C7 level with other specified spinal cord injury -95210 T1-T6 level with unspecified spinal cord injury -95211 T1-T6 level with complete lesion of spinal cord -95212 T1-T6 level with anterior cord syndrome -95213 T1-T6 level with central cord syndrome -95214 T1-T6 level with other specified spinal cord injury -95215 T7-T12 level with unspecified spinal cord injury -95216 T7-T12 level with complete lesion of spinal cord -95217 T7-T12 level with anterior cord syndrome -95218 T7-T12 level with central cord syndrome -95219 T7-T12 level with other specified spinal cord injury -9522 Lumbar spinal cord injury without evidence of spinal bone injury -9523 Sacral spinal cord injury without evidence of spinal bone injury -9524 Cauda equina spinal cord injury without evidence of spinal bone injury -9528 Multiple sites of spinal cord injury without evidence of spinal bone injury -9529 Unspecified site of spinal cord injury without evidence of spinal bone injury -9530 Injury to cervical nerve root -9531 Injury to dorsal nerve root -9532 Injury to lumbar nerve root -9533 Injury to sacral nerve root -9534 Injury to brachial plexus -9535 Injury to lumbosacral plexus -9538 Injury to multiple sites of nerve roots and spinal plexus -9539 Injury to unspecified site of nerve roots and spinal plexus -9540 Injury to cervical sympathetic nerve, excluding shoulder and pelvic girdles -9541 Injury to other sympathetic nerve, excluding shoulder and pelvic girdles -9548 Injury to other specified nerve(s) of trunk, excluding shoulder and pelvic girdles -9549 Injury to unspecified nerve of trunk, excluding shoulder and pelvic girdles -9550 Injury to axillary nerve -9551 Injury to median nerve -9552 Injury to ulnar nerve -9553 Injury to radial nerve -9554 Injury to musculocutaneous nerve -9555 Injury to cutaneous sensory nerve, upper limb -9556 Injury to digital nerve, upper limb -9557 Injury to other specified nerve(s) of shoulder girdle and upper limb -9558 Injury to multiple nerves of shoulder girdle and upper limb -9559 Injury to unspecified nerve of shoulder girdle and upper limb -9560 Injury to sciatic nerve -9561 Injury to femoral nerve -9562 Injury to posterior tibial nerve -9563 Injury to peroneal nerve -9564 Injury to cutaneous sensory nerve, lower limb -9565 Injury to other specified nerve(s) of pelvic girdle and lower limb -9568 Injury to multiple nerves of pelvic girdle and lower limb -9569 Injury to unspecified nerve of pelvic girdle and lower limb -9570 Injury to superficial nerves of head and neck -9571 Injury to other specified nerve(s) -9578 Injury to multiple nerves in several parts -9579 Injury to nerves, unspecified site -9580 Air embolism -9581 Fat embolism -9582 Secondary and recurrent hemorrhage -9583 Posttraumatic wound infection not elsewhere classified -9584 Traumatic shock -9585 Traumatic anuria -9586 Volkmann's ischemic contracture -9587 Traumatic subcutaneous emphysema -9588 Other early complications of trauma -95890 Compartment syndrome, unspecified -95891 Traumatic compartment syndrome of upper extremity -95892 Traumatic compartment syndrome of lower extremity -95893 Traumatic compartment syndrome of abdomen -95899 Traumatic compartment syndrome of other sites -95901 Head injury, unspecified -95909 Injury of face and neck -95911 Other injury of chest wall -95912 Other injury of abdomen -95913 Fracture of corpus cavernosum penis -95914 Other injury of external genitals -95919 Other injury of other sites of trunk -9592 Shoulder and upper arm injury -9593 Elbow, forearm, and wrist injury -9594 Hand, except finger injury -9595 Finger injury -9596 Hip and thigh injury -9597 Knee, leg, ankle, and foot injury -9598 Other specified sites, including multiple injury -9599 Unspecified site injury -9600 Poisoning by penicillins -9601 Poisoning by antifungal antibiotics -9602 Poisoning by chloramphenicol group -9603 Poisoning by erythromycin and other macrolides -9604 Poisoning by tetracycline group -9605 Poisoning of cephalosporin group -9606 Poisoning of antimycobacterial antibiotics -9607 Poisoning by antineoplastic antibiotics -9608 Poisoning by other specified antibiotics -9609 Poisoning by unspecified antibiotic -9610 Poisoning by sulfonamides -9611 Poisoning by arsenical anti-infectives -9612 Poisoning by heavy metal anti-infectives -9613 Poisoning by quinoline and hydroxyquinoline derivatives -9614 Poisoning by antimalarials and drugs acting on other blood protozoa -9615 Poisoning by other antiprotozoal drugs -9616 Poisoning by anthelmintics -9617 Poisoning by antiviral drugs -9618 Poisoning by other antimycobacterial drugs -9619 Poisoning by other and unspecified anti-infectives -9620 Poisoning by adrenal cortical steroids -9621 Poisoning by androgens and anabolic congeners -9622 Poisoning by ovarian hormones and synthetic substitutes -9623 Poisoning by insulins and antidiabetic agents -9624 Poisoning by anterior pituitary hormones -9625 Poisoning by posterior pituitary hormones -9626 Poisoning by parathyroid and parathyroid derivatives -9627 Poisoning by thyroid and thyroid derivatives -9628 Poisoning by antithyroid agents -9629 Poisoning by other and unspecified hormones and synthetic substitutes -9630 Poisoning by antiallergic and antiemetic drugs -9631 Poisoning by antineoplastic and immunosuppressive drugs -9632 Poisoning by acidifying agents -9633 Poisoning by alkalizing agents -9634 Poisoning by enzymes, not elsewhere classified -9635 Poisoning by vitamins, not elsewhere classified -9638 Poisoning by other specified systemic agents -9639 Poisoning by unspecified systemic agent -9640 Poisoning by iron and its compounds -9641 Poisoning by liver preparations and other antianemic agents -9642 Poisoning by anticoagulants -9643 Poisoning by vitamin K (phytonadione) -9644 Poisoning by fibrinolysis-affecting drugs -9645 Poisoning by anticoagulant antagonists and other coagulants -9646 Poisoning by gamma globulin -9647 Poisoning by natural blood and blood products -9648 Poisoning by other specified agents affecting blood constituents -9649 Poisoning by unspecified agent affecting blood constituents -96500 Poisoning by opium (alkaloids), unspecified -96501 Poisoning by heroin -96502 Poisoning by methadone -96509 Poisoning by other opiates and related narcotics -9651 Poisoning by salicylates -9654 Poisoning by aromatic analgesics, not elsewhere classified -9655 Poisoning by pyrazole derivatives -96561 Poisoning by propionic acid derivatives -96569 Poisoning by other antirheumatics -9657 Poisoning by other non-narcotic analgesics -9658 Poisoning by other specified analgesics and antipyretics -9659 Poisoning by unspecified analgesic and antipyretic -9660 Poisoning by oxazolidine derivatives -9661 Poisoning by hydantoin derivatives -9662 Poisoning by succinimides -9663 Poisoning by other and unspecified anticonvulsants -9664 Poisoning by anti-Parkinsonism drugs -9670 Poisoning by barbiturates -9671 Poisoning by chloral hydrate group -9672 Poisoning by paraldehyde -9673 Poisoning by bromine compounds -9674 Poisoning by methaqualone compounds -9675 Poisoning by glutethimide group -9676 Poisoning by mixed sedatives, not elsewhere classified -9678 Poisoning by other sedatives and hypnotics -9679 Poisoning by unspecified sedative or hypnotic -9680 Poisoning by central nervous system muscle-tone depressants -9681 Poisoning by halothane -9682 Poisoning by other gaseous anesthetics -9683 Poisoning by intravenous anesthetics -9684 Poisoning by other and unspecified general anesthetics -9685 Surface (topical) and infiltration anesthetics -9686 Poisoning by peripheral nerve- and plexus-blocking anesthetics -9687 Poisoning by spinal anesthetics -9689 Poisoning by other and unspecified local anesthetics -96900 Poisoning by antidepressant, unspecified -96901 Poisoning by monoamine oxidase inhibitors -96902 Poisoning by selective serotonin and norepinephrine reuptake inhibitors -96903 Poisoning by selective serotonin reuptake inhibitors -96904 Poisoning by tetracyclic antidepressants -96905 Poisoning by tricyclic antidepressants -96909 Poisoning by other antidepressants -9691 Poisoning by phenothiazine-based tranquilizers -9692 Poisoning by butyrophenone-based tranquilizers -9693 Poisoning by other antipsychotics, neuroleptics, and major tranquilizers -9694 Poisoning by benzodiazepine-based tranquilizers -9695 Poisoning by other tranquilizers -9696 Poisoning by psychodysleptics (hallucinogens) -96970 Poisoning by psychostimulant, unspecified -96971 Poisoning by caffeine -96972 Poisoning by amphetamines -96973 Poisoning by methylphenidate -96979 Poisoning by other psychostimulants -9698 Poisoning by other specified psychotropic agents -9699 Poisoning by unspecified psychotropic agent -9700 Poisoning by analeptics -9701 Poisoning by opiate antagonists -97081 Poisoning by cocaine -97089 Poisoning by other central nervous system stimulants -9709 Poisoning by unspecified central nervous system stimulant -9710 Poisoning by parasympathomimetics (cholinergics) -9711 Poisoning by parasympatholytics (anticholinergics and antimuscarinics) and spasmolytics -9712 Poisoning by sympathomimetics [adrenergics] -9713 Poisoning by sympatholytics [antiadrenergics] -9719 Poisoning by unspecified drug primarily affecting autonomic nervous system -9720 Poisoning by cardiac rhythm regulators -9721 Poisoning by cardiotonic glycosides and drugs of similar action -9722 Poisoning by antilipemic and antiarteriosclerotic drugs -9723 Poisoning by ganglion-blocking agents -9724 Poisoning by coronary vasodilators -9725 Poisoning by other vasodilators -9726 Poisoning by other antihypertensive agents -9727 Poisoning by antivaricose drugs, including sclerosing agents -9728 Poisoning by capillary-active drugs -9729 Poisoning by other and unspecified agents primarily affecting the cardiovascular system -9730 Poisoning by antacids and antigastric secretion drugs -9731 Poisoning by irritant cathartics -9732 Poisoning by emollient cathartics -9733 Poisoning by other cathartics, including intestinal atonia -9734 Poisoning by digestants -9735 Poisoning by antidiarrheal drugs -9736 Poisoning by emetics -9738 Poisoning by other specified agents primarily affecting the gastrointestinal system -9739 Poisoning by unspecified agent primarily affecting the gastrointestinal system -9740 Poisoning by mercurial diuretics -9741 Poisoning by purine derivative diuretics -9742 Poisoning by carbonic acid anhydrase inhibitors -9743 Poisoning by saluretics -9744 Poisoning by other diuretics -9745 Poisoning by electrolytic, caloric, and water-balance agents -9746 Poisoning by other mineral salts, not elsewhere classified -9747 Poisoning by uric acid metabolism drugs -9750 Poisoning by oxytocic agents -9751 Poisoning by smooth muscle relaxants -9752 Poisoning by skeletal muscle relaxants -9753 Poisoning by other and unspecified drugs acting on muscles -9754 Poisoning by antitussives -9755 Poisoning by expectorants -9756 Poisoning by anti-common cold drugs -9757 Poisoning by antiasthmatics -9758 Poisoning by other and unspecified respiratory drugs -9760 Poisoning by local anti-infectives and anti-inflammatory drugs -9761 Poisoning by antipruritics -9762 Poisoning by local astringents and local detergents -9763 Poisoning by emollients, demulcents, and protectants -9764 Poisoning by keratolytics, keratoplastics, other hair treatment drugs and preparations -9765 Poisoning by eye anti-infectives and other eye drugs -9766 Poisoning by anti-infectives and other drugs and preparations for ear, nose, and throat -9767 Poisoning by dental drugs topically applied -9768 Poisoning by other agents primarily affecting skin and mucous membrane -9769 Poisoning by unspecified agent primarily affecting skin and mucous membrane -9770 Poisoning by dietetics -9771 Poisoning by lipotropic drugs -9772 Poisoning by antidotes and chelating agents, not elsewhere classified -9773 Poisoning by alcohol deterrents -9774 Poisoning by pharmaceutical excipients -9778 Poisoning by other specified drugs and medicinal substances -9779 Poisoning by unspecified drug or medicinal substance -9780 Poisoning by BCG vaccine -9781 Poisoning by typhoid and paratyphoid vaccine -9782 Poisoning by cholera vaccine -9783 Poisoning by plague vaccine -9784 Poisoning by tetanus vaccine -9785 Poisoning by diphtheria vaccine -9786 Poisoning by pertussis vaccine, including combinations with a pertussis component -9788 Poisoning by other and unspecified bacterial vaccines -9789 Poisoning by mixed bacterial vaccines, except combinations with a pertussis component -9790 Poisoning by smallpox vaccine -9791 Poisoning by rabies vaccine -9792 Poisoning by typhus vaccine -9793 Poisoning by yellow fever vaccine -9794 Poisoning by measles vaccine -9795 Poisoning by poliomyelitis vaccine -9796 Poisoning by other and unspecified viral and rickettsial vaccines -9797 Poisoning by mixed viral-rickettsial and bacterial vaccines, except combinations with a pertussis component -9799 Poisoning by other and unspecified vaccines and biological substances -9800 Toxic effect of ethyl alcohol -9801 Toxic effect of methyl alcohol -9802 Toxic effect of isopropyl alcohol -9803 Toxic effect of fusel oil -9808 Toxic effect of other specified alcohols -9809 Toxic effect of unspecified alcohol -981 Toxic effect of petroleum products -9820 Toxic effect of benzene and homologues -9821 Toxic effect of carbon tetrachloride -9822 Toxic effect of carbon disulfide -9823 Toxic effect of other chlorinated hydrocarbon solvents -9824 Toxic effect of nitroglycol -9828 Toxic effect of other nonpetroleum-based solvents -9830 Toxic effect of corrosive aromatics -9831 Toxic effect of acids -9832 Toxic effect of caustic alkalis -9839 Toxic effect of caustic, unspecified -9840 Toxic effect of inorganic lead compounds -9841 Toxic effect of organic lead compounds -9848 Toxic effect of other lead compounds -9849 Toxic effect of unspecified lead compound -9850 Toxic effect of mercury and its compounds -9851 Toxic effect of arsenic and its compounds -9852 Toxic effect of manganese and its compounds -9853 Toxic effect of beryllium and its compounds -9854 Toxic effect of antimony and its compounds -9855 Toxic effect of cadmium and its compounds -9856 Toxic effect of chromium -9858 Toxic effect of other specified metals -9859 Toxic effect of unspecified metal -986 Toxic effect of carbon monoxide -9870 Toxic effect of liquefied petroleum gases -9871 Toxic effect of other hydrocarbon gas -9872 Toxic effect of nitrogen oxides -9873 Toxic effect of sulfur dioxide -9874 Toxic effect of freon -9875 Toxic effect of lacrimogenic gas -9876 Toxic effect of chlorine gas -9877 Toxic effect of hydrocyanic acid gas -9878 Toxic effect of other specified gases, fumes, or vapors -9879 Toxic effect of unspecified gas, fume, or vapor -9880 Toxic effect of fish and shellfish eaten as food -9881 Toxic effect of mushrooms eaten as food -9882 Toxic effect of berries and other plants eaten as food -9888 Toxic effect of other specified noxious substances eaten as food -9889 Toxic effect of unspecified noxious substance eaten as food -9890 Toxic effect of hydrocyanic acid and cyanides -9891 Toxic effect of strychnine and salts -9892 Toxic effect of chlorinated hydrocarbons -9893 Toxic effect of organophosphate and carbamate -9894 Toxic effect of other pesticides, not elsewhere classified -9895 Toxic effect of venom -9896 Toxic effect of soaps and detergents -9897 Toxic effect of aflatoxin and other mycotoxin (food contaminants) -98981 Toxic effect of asbestos -98982 Toxic effect of latex -98983 Toxic effect of silicone -98984 Toxic effect of tobacco -98989 Toxic effect of other substance, chiefly nonmedicinal as to source, not elsewhere classified -9899 Toxic effect of unspecified substance, chiefly nonmedicinal as to source -990 Effects of radiation, unspecified -9910 Frostbite of face -9911 Frostbite of hand -9912 Frostbite of foot -9913 Frostbite of other and unspecified sites -9914 Immersion foot -9915 Chilblains -9916 Hypothermia -9918 Other specified effects of reduced temperature -9919 Unspecified effect of reduced temperature -9920 Heat stroke and sunstroke -9921 Heat syncope -9922 Heat cramps -9923 Heat exhaustion, anhydrotic -9924 Heat exhaustion due to salt depletion -9925 Heat exhaustion, unspecified -9926 Heat fatigue, transient -9927 Heat edema -9928 Other specified heat effects -9929 Unspecified effects of heat and light -9930 Barotrauma, otitic -9931 Barotrauma, sinus -9932 Other and unspecified effects of high altitude -9933 Caisson disease -9934 Effects of air pressure caused by explosion -9938 Other specified effects of air pressure -9939 Unspecified effect of air pressure -9940 Effects of lightning -9941 Drowning and nonfatal submersion -9942 Effects of hunger -9943 Effects of thirst -9944 Exhaustion due to exposure -9945 Exhaustion due to excessive exertion -9946 Motion sickness -9947 Asphyxiation and strangulation -9948 Electrocution and nonfatal effects of electric current -9949 Other effects of external causes -9950 Other anaphylactic reaction -9951 Angioneurotic edema, not elsewhere classified -99520 Unspecified adverse effect of unspecified drug, medicinal and biological substance -99521 Arthus phenomenon -99522 Unspecified adverse effect of anesthesia -99523 Unspecified adverse effect of insulin -99524 Failed moderate sedation during procedure -99527 Other drug allergy -99529 Unspecified adverse effect of other drug, medicinal and biological substance -9953 Allergy, unspecified, not elsewhere classified -9954 Shock due to anesthesia, not elsewhere classified -99550 Child abuse, unspecified -99551 Child emotional/psychological abuse -99552 Child neglect (nutritional) -99553 Child sexual abuse -99554 Child physical abuse -99555 Shaken baby syndrome -99559 Other child abuse and neglect -99560 Anaphylactic reaction due to unspecified food -99561 Anaphylactic reaction due to peanuts -99562 Anaphylactic reaction due to crustaceans -99563 Anaphylactic reaction due to fruits and vegetables -99564 Anaphylactic reaction due to tree nuts and seeds -99565 Anaphylactic reaction due to fish -99566 Anaphylactic reaction due to food additives -99567 Anaphylactic reaction due to milk products -99568 Anaphylactic reaction due to eggs -99569 Anaphylactic reaction due to other specified food -9957 Other adverse food reactions, not elsewhere classified -99580 Adult maltreatment, unspecified -99581 Adult physical abuse -99582 Adult emotional/psychological abuse -99583 Adult sexual abuse -99584 Adult neglect (nutritional) -99585 Other adult abuse and neglect -99586 Malignant hyperthermia -99589 Other specified adverse effects, not elsewhere classified -99590 Systemic inflammatory response syndrome, unspecified -99591 Sepsis -99592 Severe sepsis -99593 Systemic inflammatory response syndrome due to noninfectious process without acute organ dysfunction -99594 Systemic inflammatory response syndrome due to noninfectious process with acute organ dysfunction -99600 Mechanical complication of unspecified cardiac device, implant, and graft -99601 Mechanical complication due to cardiac pacemaker (electrode) -99602 Mechanical complication due to heart valve prosthesis -99603 Mechanical complication due to coronary bypass graft -99604 Mechanical complication of automatic implantable cardiac defibrillator -99609 Other mechanical complication of cardiac device, implant, and graft -9961 Mechanical complication of other vascular device, implant, and graft -9962 Mechanical complication of nervous system device, implant, and graft -99630 Mechanical complication of unspecified genitourinary device, implant, and graft -99631 Mechanical complication due to urethral (indwelling) catheter -99632 Mechanical complication due to intrauterine contraceptive device -99639 Other mechanical complication of genitourinary device, implant, and graft -99640 Unspecified mechanical complication of internal orthopedic device, implant, and graft -99641 Mechanical loosening of prosthetic joint -99642 Dislocation of prosthetic joint -99643 Broken prosthetic joint implant -99644 Peri-prosthetic fracture around prosthetic joint -99645 Peri-prosthetic osteolysis -99646 Articular bearing surface wear of prosthetic joint -99647 Other mechanical complication of prosthetic joint implant -99649 Other mechanical complication of other internal orthopedic device, implant, and graft -99651 Mechanical complication due to corneal graft -99652 Mechanical complication due to graft of other tissue, not elsewhere classified -99653 Mechanical complication due to ocular lens prosthesis -99654 Mechanical complication due to breast prosthesis -99655 Mechanical complication due to artificial skin graft and decellularized allodermis -99656 Mechanical complication due to peritoneal dialysis catheter -99657 Mechanical complication due to insulin pump -99659 Mechanical complication due to other implant and internal device, not elsewhere classified -99660 Infection and inflammatory reaction due to unspecified device, implant, and graft -99661 Infection and inflammatory reaction due to cardiac device, implant, and graft -99662 Infection and inflammatory reaction due to other vascular device, implant, and graft -99663 Infection and inflammatory reaction due to nervous system device, implant, and graft -99664 Infection and inflammatory reaction due to indwelling urinary catheter -99665 Infection and inflammatory reaction due to other genitourinary device, implant, and graft -99666 Infection and inflammatory reaction due to internal joint prosthesis -99667 Infection and inflammatory reaction due to other internal orthopedic device, implant, and graft -99668 Infection and inflammatory reaction due to peritoneal dialysis catheter -99669 Infection and inflammatory reaction due to other internal prosthetic device, implant, and graft -99670 Other complications due to unspecified device, implant, and graft -99671 Other complications due to heart valve prosthesis -99672 Other complications due to other cardiac device, implant, and graft -99673 Other complications due to renal dialysis device, implant, and graft -99674 Other complications due to other vascular device, implant, and graft -99675 Other complications due to nervous system device, implant, and graft -99676 Other complications due to genitourinary device, implant, and graft -99677 Other complications due to internal joint prosthesis -99678 Other complications due to other internal orthopedic device, implant, and graft -99679 Other complications due to other internal prosthetic device, implant, and graft -99680 Complications of transplanted organ, unspecified -99681 Complications of transplanted kidney -99682 Complications of transplanted liver -99683 Complications of transplanted heart -99684 Complications of transplanted lung -99685 Complications of transplanted bone marrow -99686 Complications of transplanted pancreas -99687 Complications of transplanted intestine -99688 Complications of transplanted organ, stem cell -99689 Complications of other specified transplanted organ -99690 Complications of unspecified reattached extremity -99691 Complications of reattached forearm -99692 Complications of reattached hand -99693 Complications of reattached finger(s) -99694 Complications of reattached upper extremity, other and unspecified -99695 Complication of reattached foot and toe(s) -99696 Complication of reattached lower extremity, other and unspecified -99699 Complication of other specified reattached body part -99700 Nervous system complication, unspecified -99701 Central nervous system complication -99702 Iatrogenic cerebrovascular infarction or hemorrhage -99709 Other nervous system complications -9971 Cardiac complications, not elsewhere classified -9972 Peripheral vascular complications, not elsewhere classified -99731 Ventilator associated pneumonia -99732 Postprocedural aspiration pneumonia -99739 Other respiratory complications -99741 Retained cholelithiasis following cholecystectomy -99749 Other digestive system complications -9975 Urinary complications, not elsewhere classified -99760 Unspecified complication of amputation stump -99761 Neuroma of amputation stump -99762 Infection (chronic) of amputation stump -99769 Other amputation stump complication -99771 Vascular complications of mesenteric artery -99772 Vascular complications of renal artery -99779 Vascular complications of other vessels -99791 Complications affecting other specified body systems, not elsewhere classified, hypertension -99799 Complications affecting other specified body systems, not elsewhere classified -99800 Postoperative shock, unspecified -99801 Postoperative shock, cardiogenic -99802 Postoperative shock, septic -99809 Postoperative shock, other -99811 Hemorrhage complicating a procedure -99812 Hematoma complicating a procedure -99813 Seroma complicating a procedure -9982 Accidental puncture or laceration during a procedure, not elsewhere classified -99830 Disruption of wound, unspecified -99831 Disruption of internal operation (surgical) wound -99832 Disruption of external operation (surgical) wound -99833 Disruption of traumatic injury wound repair -9984 Foreign body accidentally left during a procedure -99851 Infected postoperative seroma -99859 Other postoperative infection -9986 Persistent postoperative fistula -9987 Acute reaction to foreign substance accidentally left during a procedure -99881 Emphysema (subcutaneous) (surgical) resulting from procedure -99882 Cataract fragments in eye following cataract surgery -99883 Non-healing surgical wound -99889 Other specified complications of procedures not elsewhere classified -9989 Unspecified complication of procedure, not elsewhere classified -9990 Generalized vaccinia as a complication of medical care, not elsewhere classified -9991 Air embolism as a complication of medical care, not elsewhere classified -9992 Other vascular complications of medical care, not elsewhere classified -99931 Other and unspecified infection due to central venous catheter -99932 Bloodstream infection due to central venous catheter -99933 Local infection due to central venous catheter -99934 Acute infection following transfusion, infusion, or injection of blood and blood products -99939 Infection following other infusion, injection, transfusion, or vaccination -99941 Anaphylactic reaction due to administration of blood and blood products -99942 Anaphylactic reaction due to vaccination -99949 Anaphylactic reaction due to other serum -99951 Other serum reaction due to administration of blood and blood products -99952 Other serum reaction due to vaccination -99959 Other serum reaction -99960 ABO incompatibility reaction, unspecified -99961 ABO incompatibility with hemolytic transfusion reaction not specified as acute or delayed -99962 ABO incompatibility with acute hemolytic transfusion reaction -99963 ABO incompatibility with delayed hemolytic transfusion reaction -99969 Other ABO incompatibility reaction -99970 Rh incompatibility reaction, unspecified -99971 Rh incompatibility with hemolytic transfusion reaction not specified as acute or delayed -99972 Rh incompatibility with acute hemolytic transfusion reaction -99973 Rh incompatibility with delayed hemolytic transfusion reaction -99974 Other Rh incompatibility reaction -99975 Non-ABO incompatibility reaction, unspecified -99976 Non-ABO incompatibility with hemolytic transfusion reaction not specified as acute or delayed -99977 Non-ABO incompatibility with acute hemolytic transfusion reaction -99978 Non-ABO incompatibility with delayed hemolytic transfusion reaction -99979 Other non-ABO incompatibility reaction -99980 Transfusion reaction, unspecified -99981 Extravasation of vesicant chemotherapy -99982 Extravasation of other vesicant agent -99983 Hemolytic transfusion reaction, incompatibility unspecified -99984 Acute hemolytic transfusion reaction, incompatibility unspecified -99985 Delayed hemolytic transfusion reaction, incompatibility unspecified -99988 Other infusion reaction -99989 Other transfusion reaction -9999 Other and unspecified complications of medical care, not elsewhere classified -E0000 Civilian activity done for income or pay -E0001 Military activity -E0002 Volunteer activity -E0008 Other external cause status -E0009 Unspecified external cause status -E0010 Activities involving walking, marching and hiking -E0011 Activities involving running -E0020 Activities involving swimming -E0021 Activities involving springboard and platform diving -E0022 Activities involving water polo -E0023 Activities involving water aerobics and water exercise -E0024 Activities involving underwater diving and snorkeling -E0025 Activities involving rowing, canoeing, kayaking, rafting and tubing -E0026 Activities involving water skiing and wake boarding -E0027 Activities involving surfing, windsurfing and boogie boarding -E0028 Activities involving water sliding -E0029 Other activity involving water and watercraft -E0030 Activities involving ice skating -E0031 Activities involving ice hockey -E0032 Activities involving snow (alpine) (downhill) skiing, snow boarding, sledding, tobogganing and snow tubing -E0033 Activities involving cross country skiing -E0039 Other activity involving ice and snow -E0040 Activities involving mountain climbing, rock climbing and wall climbing -E0041 Activities involving rappelling -E0042 Activities involving BASE jumping -E0043 Activities involving bungee jumping -E0044 Activities involving hang gliding -E0049 Other activity involving climbing, rappelling and jumping off -E0050 Activities involving dancing -E0051 Activities involving yoga -E0052 Activities involving gymnastics -E0053 Activities involving trampoline -E0054 Activities involving cheerleading -E0059 Other activity involving dancing and other rhythmic movements -E0060 Activities involving roller skating (inline) and skateboarding -E0061 Activities involving horseback riding -E0062 Activities involving golf -E0063 Activities involving bowling -E0064 Activities involving bike riding -E0065 Activities involving jumping rope -E0066 Activities involving non-running track and field events -E0069 Other activity involving other sports and athletics played individually -E0070 Activities involving american tackle football -E0071 Activities involving american flag or touch football -E0072 Activities involving rugby -E0073 Activities involving baseball -E0074 Activities involving lacrosse and field hockey -E0075 Activities involving soccer -E0076 Activities involving basketball -E0077 Activities involving volleyball (beach) (court) -E0078 Activities involving physical games generally associated with school recess, summer camp and children -E0079 Other activity involving other sports and athletes played as a team or group -E0080 Activities involving boxing -E0081 Activities involving wrestling -E0082 Activities involving racquet and hand sports -E0083 Activities involving frisbee -E0084 Activities involving martial arts -E0089 Other specified sports and athletics activity -E0090 Activity involving exercise machines primarily for cardiorespiratory conditioning -E0091 Activity involving calisthenics -E0092 Activity involving aerobic and directive exercise -E0093 Activity involving circuit training -E0094 Activity involving obstacle course -E0095 Activity involving grass drills -E0099 Other activity involving cardiorespiratory exercise -E0100 Activity involving exercise machines primarily for muscle strengthening -E0101 Activity involving push-ups, pull-ups, sit-ups -E0102 Activity involving free weights -E0103 Activity involving pilates -E0109 Other activity involving other muscle strengthening exercises -E0110 Activities involving computer keyboarding -E0111 Activities involving hand held interactive electronic device -E0119 Other activity involving computer technology and electronic devices -E0120 Activities involving knitting and crocheting -E0121 Activities involving sewing -E0122 Activities involving furniture building and finishing -E0129 Activity involving other arts and handcrafts -E0130 Activities involving personal bathing and showering -E0131 Activities involving laundry -E0132 Activities involving vacuuming -E0133 Activities involving ironing -E0134 Activities involving floor mopping and cleaning -E0135 Activities involving residential relocation -E0138 Other personal hygiene activity -E0139 Other household maintenance -E0140 Caregiving involving bathing -E0141 Caregiving involving lifting -E0149 Other activity involving person providing caregiving -E0150 Activities involving food preparation and clean up -E0151 Activities involving grilling and smoking food -E0152 Activities involving cooking and baking -E0159 Other activity involving cooking and grilling -E0160 Activities involving digging, shoveling and raking -E0161 Activities involving gardening and landscaping -E0162 Activities involving building and construction -E0169 Other activity involving property and land maintenance, building and construction -E0170 Roller coaster riding -E0179 Other activity involving external motion -E0180 Activities involving piano playing -E0181 Activities involving drum and other percussion instrument playing -E0182 Activities involving string instrument playing -E0183 Activities involving winds and brass instrument playing -E0190 Activities involving walking an animal -E0191 Activities involving milking an animal -E0192 Activities involving grooming and shearing an animal -E0199 Other activity involving animal care -E0290 Refereeing a sports activity -E0291 Spectator at an event -E0292 Rough housing and horseplay -E0299 Other activity -E030 Unspecified activity -E8000 Railway accident involving collision with rolling stock and injuring railway employee -E8001 Railway accident involving collision with rolling stock and injuring passenger on railway -E8002 Railway accident involving collision with rolling stock and injuring pedestrian -E8003 Railway accident involving collision with rolling stock and injuring pedal cyclist -E8008 Railway accident involving collision with rolling stock and injuring other specified person -E8009 Railway accident involving collision with rolling stock and injuring unspecified person -E8010 Railway accident involving collision with other object and injuring railway employee -E8011 Railway accident involving collision with other object and injuring passenger on railway -E8012 Railway accident involving collision with other object and injuring pedestrian -E8013 Railway accident involving collision with other object and injuring pedal cyclist -E8018 Railway accident involving collision with other object and injuring other specified person -E8019 Railway accident involving collision with other object and injuring unspecified person -E8020 Railway accident involving derailment without antecedent collision injuring railway employee -E8021 Railway accident involving derailment without antecedent collision injuring passenger on railway -E8022 Railway accident involving derailment without antecedent collision injuring pedestrian -E8023 Railway accident involving derailment without antecedent collision injuring pedal cyclist -E8028 Railway accident involving derailment without antecedent collision injuring other specified person -E8029 Railway accident involving derailment without antecedent collision injuring unspecified person -E8030 Railway accident involving explosion, fire, or burning injuring railway employee -E8031 Railway accident involving explosion, fire, or burning injuring passenger on railway -E8032 Railway accident involving explosion, fire, or burning injuring pedestrian -E8033 Railway accident involving explosion, fire, or burning injuring pedal cyclist -E8038 Railway accident involving explosion, fire, or burning injuring other specified person -E8039 Railway accident involving explosion, fire, or burning injuring unspecified person -E8040 Fall in, on, or from railway train injuring railway employee -E8041 Fall in, on, or from railway train injuring passenger on railway -E8042 Fall in, on, or from railway train injuring pedestrian -E8043 Fall in, on, or from railway train injuring pedal cyclist -E8048 Fall in, on, or from railway train injuring other specified person -E8049 Fall in, on, or from railway train injuring unspecified person -E8050 Railway employee hit by rolling stock -E8051 Passenger on railway hit by rolling stock -E8052 Pedestrian hit by rolling stock -E8053 Pedal cyclist hit by rolling stock -E8058 Other specified person hit by rolling stock -E8059 Unspecified person hit by rolling stock -E8060 Other specified railway accident injuring railway employee -E8061 Other specified railway accident injuring passenger on railway -E8062 Other specified railway accident injuring pedestrian -E8063 Other specified railway accident injuring pedal cyclist -E8068 Other specified railway accident injuring other specified person -E8069 Other specified railway accident injuring unspecified person -E8070 Railway accident of unspecified nature injuring railway employee -E8071 Railway accident of unspecified nature injuring passenger on railway -E8072 Railway accident of unspecified nature injuring pedestrian -E8073 Railway accident of unspecified nature injuring pedal cyclist -E8078 Railway accident of unspecified nature injuring other specified person -E8079 Railway accident of unspecified nature injuring unspecified person -E8100 Motor vehicle traffic accident involving collision with train injuring driver of motor vehicle other than motorcycle -E8101 Motor vehicle traffic accident involving collision with train injuring passenger in motor vehicle other than motorcycle -E8102 Motor vehicle traffic accident involving collision with train injuring motorcyclist -E8103 Motor vehicle traffic accident involving collision with train injuring passenger on motorcycle -E8104 Motor vehicle traffic accident involving collision with train injuring occupant of streetcar -E8105 Motor vehicle traffic accident involving collision with train injuring rider of animal; occupant of animal-drawn vehicle -E8106 Motor vehicle traffic accident involving collision with train injuring pedal cyclist -E8107 Motor vehicle traffic accident involving collision with train injuring pedestrian -E8108 Motor vehicle traffic accident involving collision with train injuring other specified person -E8109 Motor vehicle traffic accident involving collision with train injuring unspecified person -E8110 Motor vehicle traffic accident involving re-entrant collision with another motor vehicle injuring driver of motor vehicle other than motorcycle -E8111 Motor vehicle traffic accident involving re-entrant collision with another motor vehicle injuring passenger in motor vehicle other than motorcycle -E8112 Motor vehicle traffic accident involving re-entrant collision with another motor vehicle injuring motorcyclist -E8113 Motor vehicle traffic accident involving re-entrant collision with another motor vehicle injuring passenger on motorcycle -E8114 Motor vehicle traffic accident involving re-entrant collision with another motor vehicle injuring occupant of streetcar -E8115 Motor vehicle traffic accident involving re-entrant collision with another motor vehicle injuring rider of animal; occupant of animal-drawn vehicle -E8116 Motor vehicle traffic accident involving re-entrant collision with another motor vehicle injuring pedal cyclist -E8117 Motor vehicle traffic accident involving re-entrant collision with another motor vehicle injuring pedestrian -E8118 Motor vehicle traffic accident involving re-entrant collision with another motor vehicle injuring other specified person -E8119 Motor vehicle traffic accident involving re-entrant collision with another motor vehicle injuring unspecified person -E8120 Other motor vehicle traffic accident involving collision with motor vehicle injuring driver of motor vehicle other than motorcycle -E8121 Other motor vehicle traffic accident involving collision with motor vehicle injuring passenger in motor vehicle other than motorcycle -E8122 Other motor vehicle traffic accident involving collision with motor vehicle injuring motorcyclist -E8123 Other motor vehicle traffic accident involving collision with motor vehicle injuring passenger on motorcycle -E8124 Other motor vehicle traffic accident involving collision with motor vehicle injuring occupant of streetcar -E8125 Other motor vehicle traffic accident involving collision with motor vehicle injuring rider of animal; occupant of animal-drawn vehicle -E8126 Other motor vehicle traffic accident involving collision with motor vehicle injuring pedal cyclist -E8127 Other motor vehicle traffic accident involving collision with motor vehicle injuring pedestrian -E8128 Other motor vehicle traffic accident involving collision with motor vehicle injuring other specified person -E8129 Other motor vehicle traffic accident involving collision with motor vehicle injuring unspecified person -E8130 Motor vehicle traffic accident involving collision with other vehicle injuring driver of motor vehicle other than motorcycle -E8131 Motor vehicle traffic accident involving collision with other vehicle injuring passenger in motor vehicle other than motorcycle -E8132 Motor vehicle traffic accident involving collision with other vehicle injuring motorcyclist -E8133 Motor vehicle traffic accident involving collision with other vehicle injuring passenger on motorcycle -E8134 Motor vehicle traffic accident involving collision with other vehicle injuring occupant of streetcar -E8135 Motor vehicle traffic accident involving collision with other vehicle injuring rider of animal; occupant of animal-drawn vehicle -E8136 Motor vehicle traffic accident involving collision with other vehicle injuring pedal cyclist -E8137 Motor vehicle traffic accident involving collision with other vehicle injuring pedestrian -E8138 Motor vehicle traffic accident involving collision with other vehicle injuring other specified person -E8139 Motor vehicle traffic accident involving collision with other vehicle injuring unspecified person -E8140 Motor vehicle traffic accident involving collision with pedestrian injuring driver of motor vehicle other than motorcycle -E8141 Motor vehicle traffic accident involving collision with pedestrian injuring passenger in motor vehicle other than motorcycle -E8142 Motor vehicle traffic accident involving collision with pedestrian injuring motorcyclist -E8143 Motor vehicle traffic accident involving collision with pedestrian injuring passenger on motorcycle -E8144 Motor vehicle traffic accident involving collision with pedestrian injuring occupant of streetcar -E8145 Motor vehicle traffic accident involving collision with pedestrian injuring rider of animal; occupant of animal drawn vehicle -E8146 Motor vehicle traffic accident involving collision with pedestrian injuring pedal cyclist -E8147 Motor vehicle traffic accident involving collision with pedestrian injuring pedestrian -E8148 Motor vehicle traffic accident involving collision with pedestrian injuring other specified person -E8149 Motor vehicle traffic accident involving collision with pedestrian injuring unspecified person -E8150 Other motor vehicle traffic accident involving collision on the highway injuring driver of motor vehicle other than motorcycle -E8151 Other motor vehicle traffic accident involving collision on the highway injuring passenger in motor vehicle other than motorcycle -E8152 Other motor vehicle traffic accident involving collision on the highway injuring motorcyclist -E8153 Other motor vehicle traffic accident involving collision on the highway injuring passenger on motorcycle -E8154 Other motor vehicle traffic accident involving collision on the highway injuring occupant of streetcar -E8155 Other motor vehicle traffic accident involving collision on the highway injuring rider of animal; occupant of animal-drawn vehicle -E8156 Other motor vehicle traffic accident involving collision on the highway injuring pedal cyclist -E8157 Other motor vehicle traffic accident involving collision on the highway injuring pedestrian -E8158 Other motor vehicle traffic accident involving collision on the highway injuring other specified person -E8159 Other motor vehicle traffic accident involving collision on the highway injuring unspecified person -E8160 Motor vehicle traffic accident due to loss of control, without collision on the highway, injuring driver of motor vehicle other than motorcycle -E8161 Motor vehicle traffic accident due to loss of control, without collision on the highway, injuring passenger in motor vehicle other than motorcycle -E8162 Motor vehicle traffic accident due to loss of control, without collision on the highway, injuring motorcyclist -E8163 Motor vehicle traffic accident due to loss of control, without collision on the highway, injuring passenger on motorcycle -E8164 Motor vehicle traffic accident due to loss of control, without collision on the highway, injuring occupant of streetcar -E8165 Motor vehicle traffic accident due to loss of control, without collision on the highway, injuring rider of animal; occupant of animal-drawn vehicle -E8166 Motor vehicle traffic accident due to loss of control, without collision on the highway, injuring pedal cyclist -E8167 Motor vehicle traffic accident due to loss of control, without collision on the highway, injuring pedestrian -E8168 Motor vehicle traffic accident due to loss of control, without collision on the highway, injuring other specified person -E8169 Motor vehicle traffic accident due to loss of control, without collision on the highway, injuring unspecified person -E8170 Noncollision motor vehicle traffic accident while boarding or alighting injuring driver of motor vehicle other than motorcycle -E8171 Noncollision motor vehicle traffic accident while boarding or alighting injuring passenger in motor vehicle other than motorcycle -E8172 Noncollision motor vehicle traffic accident while boarding or alighting injuring motorcyclist -E8173 Noncollision motor vehicle traffic accident while boarding or alighting injuring passenger on motorcycle -E8174 Noncollision motor vehicle traffic accident while boarding or alighting injuring occupant of streetcar -E8175 Noncollision motor vehicle traffic accident while boarding or alighting injuring rider of animal; occupant of animal-drawn vehicle -E8176 Noncollision motor vehicle traffic accident while boarding or alighting injuring pedal cyclist -E8177 Noncollision motor vehicle traffic accident while boarding or alighting injuring pedestrian -E8178 Noncollision motor vehicle traffic accident while boarding or alighting injuring other specified person -E8179 Noncollision motor vehicle traffic accident while boarding or alighting injuring unspecified person -E8180 Other noncollision motor vehicle traffic accident injuring driver of motor vehicle other than motorcycle -E8181 Other noncollision motor vehicle traffic accident injuring passenger in motor vehicle other than motorcycle -E8182 Other noncollision motor vehicle traffic accident injuring motorcyclist -E8183 Other noncollision motor vehicle traffic accident injuring passenger on motorcycle -E8184 Other noncollision motor vehicle traffic accident injuring occupant of streetcar -E8185 Other noncollision motor vehicle traffic accident injuring rider of animal; occupant of animal-drawn vehicle -E8186 Other noncollision motor vehicle traffic accident injuring pedal cyclist -E8187 Other noncollision motor vehicle traffic accident injuring pedestrian -E8188 Other noncollision motor vehicle traffic accident injuring other specified person -E8189 Other noncollision motor vehicle traffic accident injuring unspecified person -E8190 Motor vehicle traffic accident of unspecified nature injuring driver of motor vehicle other than motorcycle -E8191 Motor vehicle traffic accident of unspecified nature injuring passenger in motor vehicle other than motorcycle -E8192 Motor vehicle traffic accident of unspecified nature injuring motorcyclist -E8193 Motor vehicle traffic accident of unspecified nature injuring passenger on motorcycle -E8194 Motor vehicle traffic accident of unspecified nature injuring occupant of streetcar -E8195 Motor vehicle traffic accident of unspecified nature injuring rider of animal; occupant of animal-drawn vehicle -E8196 Motor vehicle traffic accident of unspecified nature injuring pedal cyclist -E8197 Motor vehicle traffic accident of unspecified nature injuring pedestrian -E8198 Motor vehicle traffic accident of unspecified nature injuring other specified person -E8199 Motor vehicle traffic accident of unspecified nature injuring unspecified person -E8200 Nontraffic accident involving motor-driven snow vehicle injuring driver of motor vehicle other than motorcycle -E8201 Nontraffic accident involving motor-driven snow vehicle injuring passenger in motor vehicle other than motorcycle -E8202 Nontraffic accident involving motor-driven snow vehicle injuring motorcyclist -E8203 Nontraffic accident involving motor-driven snow vehicle injuring passenger on motorcycle -E8204 Nontraffic accident involving motor-driven snow vehicle injuring occupant of streetcar -E8205 Nontraffic accident involving motor-driven snow vehicle injuring rider of animal; occupant of animal-drawn vehicle -E8206 Nontraffic accident involving motor-driven snow vehicle injuring pedal cyclist -E8207 Nontraffic accident involving motor-driven snow vehicle injuring pedestrian -E8208 Nontraffic accident involving motor-driven snow vehicle injuring other specified person -E8209 Nontraffic accident involving motor-driven snow vehicle injuring unspecified person -E8210 Nontraffic accident involving other off-road motor vehicle injuring driver of motor vehicle other than motorcycle -E8211 Nontraffic accident involving other off-road motor vehicle injuring passenger in motor vehicle other than motorcycle -E8212 Nontraffic accident involving other off-road motor vehicle injuring motorcyclist -E8213 Nontraffic accident involving other off-road motor vehicle injuring passenger on motorcycle -E8214 Nontraffic accident involving other off-road motor vehicle injuring occupant of streetcar -E8215 Nontraffic accident involving other off-road motor vehicle injuring rider of animal; occupant of animal-drawn vehicle -E8216 Nontraffic accident involving other off-road motor vehicle injuring pedal cyclist -E8217 Nontraffic accident involving other off-road motor vehicle injuring pedestrian -E8218 Nontraffic accident involving other off-road motor vehicle injuring other specified person -E8219 Nontraffic accident involving other off-road motor vehicle injuring unspecified person -E8220 Other motor vehicle nontraffic accident involving collision with moving object injuring driver of motor vehicle other than motorcycle -E8221 Other motor vehicle nontraffic accident involving collision with moving object injuring passenger in motor vehicle other than motorcycle -E8222 Other motor vehicle nontraffic accident involving collision with moving object injuring motorcyclist -E8223 Other motor vehicle nontraffic accident involving collision with moving object injuring passenger on motorcycle -E8224 Other motor vehicle nontraffic accident involving collision with moving object injuring occupant of streetcar -E8225 Other motor vehicle nontraffic accident involving collision with moving object injuring rider of animal; occupant of animal-drawn vehicle -E8226 Other motor vehicle nontraffic accident involving collision with moving object injuring pedal cyclist -E8227 Other motor vehicle nontraffic accident involving collision with moving object injuring pedestrian -E8228 Other motor vehicle nontraffic accident involving collision with moving object injuring other specified person -E8229 Other motor vehicle nontraffic accident involving collision with moving object injuring unspecified person -E8230 Other motor vehicle nontraffic accident involving collision with stationary object injuring driver of motor vehicle other than motorcycle -E8231 Other motor vehicle nontraffic accident involving collision with stationary object injuring passenger in motor vehicle other than motorcycle -E8232 Other motor vehicle nontraffic accident involving collision with stationary object injuring motorcyclist -E8233 Other motor vehicle nontraffic accident involving collision with stationary object injuring passenger on motorcycle -E8234 Other motor vehicle nontraffic accident involving collision with stationary object injuring occupant of streetcar -E8235 Other motor vehicle nontraffic accident involving collision with stationary object injuring rider of animal; occupant of animal-drawn vehicle -E8236 Other motor vehicle nontraffic accident involving collision with stationary object injuring pedal cyclist -E8237 Other motor vehicle nontraffic accident involving collision with stationary object injuring pedestrian -E8238 Other motor vehicle nontraffic accident involving collision with stationary object injuring other specified person -E8239 Other motor vehicle nontraffic accident involving collision with stationary object injuring unspecified person -E8240 Other motor vehicle nontraffic accident while boarding and alighting injuring driver of motor vehicle other than motorcycle -E8241 Other motor vehicle nontraffic accident while boarding and alighting injuring passenger in motor vehicle other than motorcycle -E8242 Other motor vehicle nontraffic accident while boarding and alighting injuring motorcyclist -E8243 Other motor vehicle nontraffic accident while boarding and alighting injuring passenger on motorcycle -E8244 Other motor vehicle nontraffic accident while boarding and alighting injuring occupant of streetcar -E8245 Other motor vehicle nontraffic accident while boarding and alighting injuring rider of animal; occupant of animal-drawn vehicle -E8246 Other motor vehicle nontraffic accident while boarding and alighting injuring pedal cyclist -E8247 Other motor vehicle nontraffic accident while boarding and alighting injuring pedestrian -E8248 Other motor vehicle nontraffic accident while boarding and alighting injuring other specified person -E8249 Other motor vehicle nontraffic accident while boarding and alighting injuring unspecified person -E8250 Other motor vehicle nontraffic accident of other and unspecified nature injuring driver of motor vehicle other than motorcycle -E8251 Other motor vehicle nontraffic accident of other and unspecified nature injuring passenger in motor vehicle other than motorcycle -E8252 Other motor vehicle nontraffic accident of other and unspecified nature injuring motorcyclist -E8253 Other motor vehicle nontraffic accident of other and unspecified nature injuring passenger on motorcycle -E8254 Other motor vehicle nontraffic accident of other and unspecified nature injuring occupant of streetcar -E8255 Other motor vehicle nontraffic accident of other and unspecified nature injuring rider of animal; occupant of animal-drawn vehicle -E8256 Other motor vehicle nontraffic accident of other and unspecified nature injuring pedal cyclist -E8257 Other motor vehicle nontraffic accident of other and unspecified nature injuring pedestrian -E8258 Other motor vehicle nontraffic accident of other and unspecified nature injuring other specified person -E8259 Other motor vehicle nontraffic accident of other and unspecified nature injuring unspecified person -E8260 Pedal cycle accident injuring pedestrian -E8261 Pedal cycle accident injuring pedal cyclist -E8262 Pedal cycle accident injuring rider of animal -E8263 Pedal cycle accident injuring occupant of animal-drawn vehicle -E8264 Pedal cycle accident injuring occupant of streetcar -E8268 Pedal cycle accident injuring other specified person -E8269 Pedal cycle accident injuring unspecified person -E8270 Animal-drawn vehicle accident injuring pedestrian -E8272 Animal-drawn vehicle accident injuring rider of animal -E8273 Animal-drawn vehicle accident injuring occupant of animal drawn vehicle -E8274 Animal-drawn vehicle accident injuring occupant of streetcar -E8278 Animal-drawn vehicle accident injuring other specified person -E8279 Animal-drawn vehicle accident injuring unspecified person -E8280 Accident involving animal being ridden injuring pedestrian -E8282 Accident involving animal being ridden injuring rider of animal -E8284 Accident involving animal being ridden injuring occupant of streetcar -E8288 Accident involving animal being ridden injuring other specified person -E8289 Accident involving animal being ridden injuring unspecified person -E8290 Other road vehicle accidents injuring pedestrian -E8294 Other road vehicle accidents injuring occupant of streetcar -E8298 Other road vehicle accidents injuring other specified person -E8299 Other road vehicle accidents injuring unspecified person -E8300 Accident to watercraft causing submersion injuring occupant of small boat, unpowered -E8301 Accident to watercraft causing submersion injuring occupant of small boat, powered -E8302 Accident to watercraft causing submersion injuring occupant of other watercraft -- crew -E8303 Accident to watercraft causing submersion injuring occupant of other watercraft -- other than crew -E8304 Accident to watercraft causing submersion injuring water skier -E8305 Accident to watercraft causing submersion injuring swimmer -E8306 Accident to watercraft causing submersion injuring dockers, stevedores -E8307 Accident to watercraft causing submersion, occupant of military watercraft, any type -E8308 Accident to watercraft causing submersion injuring other specified person -E8309 Accident to watercraft causing submersion injuring unspecified person -E8310 Accident to watercraft causing other injury to occupant of small boat, unpowered -E8311 Accident to watercraft causing other injury to occupant of small boat, powered -E8312 Accident to watercraft causing other injury to occupant of other watercraft -- crew -E8313 Accident to watercraft causing other injury to occupant of other watercraft -- other than crew -E8314 Accident to watercraft causing other injury to water skier -E8315 Accident to watercraft causing other injury to swimmer -E8316 Accident to watercraft causing other injury to dockers, stevedores -E8317 Accident to watercraft causing other injury, occupant of military watercraft, any type -E8318 Accident to watercraft causing other injury to other specified person -E8319 Accident to watercraft causing other injury to unspecified person -E8320 Other accidental submersion or drowning in water transport accident injuring occupant of small boat, unpowered -E8321 Other accidental submersion or drowning in water transport accident injuring occupant of small boat, powered -E8322 Other accidental submersion or drowning in water transport accident injuring occupant of other watercraft -- crew -E8323 Other accidental submersion or drowning in water transport accident injuring occupant of other watercraft -- other than crew -E8324 Other accidental submersion or drowning in water transport accident injuring water skier -E8325 Other accidental submersion or drowning in water transport accident injuring swimmer -E8326 Other accidental submersion or drowning in water transport accident injuring dockers, stevedores -E8327 Other accidental submersion or drowning in water transport accident, occupant of military watercraft, any type -E8328 Other accidental submersion or drowning in water transport accident injuring other specified person -E8329 Other accidental submersion or drowning in water transport accident injuring unspecified person -E8330 Fall on stairs or ladders in water transport injuring occupant of small boat, unpowered -E8331 Fall on stairs or ladders in water transport injuring occupant of small boat, powered -E8332 Fall on stairs or ladders in water transport injuring occupant of other watercraft -- crew -E8333 Fall on stairs or ladders in water transport injuring occupant of other watercraft -- other than crew -E8334 Fall on stairs or ladders in water transport injuring water skier -E8335 Fall on stairs or ladders in water transport injuring swimmer -E8336 Fall on stairs or ladders in water transport injuring dockers, stevedores -E8337 Fall on stairs or ladders in water transport, occupant of military watercraft, any type -E8338 Fall on stairs or ladders in water transport injuring other specified person -E8339 Fall on stairs or ladders in water transport injuring unspecified person -E8340 Other fall from one level to another in water transport injuring occupant of small boat, unpowered -E8341 Other fall from one level to another in water transport injuring occupant of small boat, powered -E8342 Other fall from one level to another in water transport injuring occupant of other watercraft -- crew -E8343 Other fall from one level to another in water transport injuring occupant of other watercraft -- other than crew -E8344 Other fall from one level to another in water transport injuring water skier -E8345 Other fall from one level to another in water transport injuring swimmer -E8346 Other fall from one level to another in water transport injuring dockers, stevedores -E8347 Other fall from one level to another in water transport, occupant of military watercraft, any type -E8348 Other fall from one level to another in water transport injuring other specified person -E8349 Other fall from one level to another in water transport injuring unspecified person -E8350 Other and unspecified fall in water transport injuring occupant of small boat, unpowered -E8351 Other and unspecified fall in water transport injuring occupant of small boat, powered -E8352 Other and unspecified fall in water transport injuring occupant of other watercraft -- crew -E8353 Other and unspecified fall in water transport injuring occupant of other watercraft -- other than crew -E8354 Other and unspecified fall in water transport injuring water skier -E8355 Other and unspecified fall in water transport injuring swimmer -E8356 Other and unspecified fall in water transport injuring dockers, stevedores -E8357 Other and unspecified fall in water transport, occupant of military watercraft, any type -E8358 Other and unspecified fall in water transport injuring other specified person -E8359 Other and unspecified fall in water transport injuring unspecified person -E8360 Machinery accident in water transport injuring occupant of small boat, unpowered -E8361 Machinery accident in water transport injuring occupant of small boat, powered -E8362 Machinery accident in water transport injuring occupant of other watercraft -- crew -E8363 Machinery accident in water transport injuring occupant of other watercraft -- other than crew -E8364 Machinery accident in water transport injuring water skier -E8365 Machinery accident in water transport injuring swimmer -E8366 Machinery accident in water transport injuring dockers, stevedores -E8367 Machinery accident in water transport, occupant of military watercraft, any type -E8368 Machinery accident in water transport injuring other specified person -E8369 Machinery accident in water transport injuring unspecified person -E8370 Explosion, fire, or burning in watercraft injuring occupant of small boat, unpowered -E8371 Explosion, fire, or burning in watercraft injuring occupant of small boat, powered -E8372 Explosion, fire, or burning in watercraft injuring occupant of other watercraft -- crew -E8373 Explosion, fire, or burning in watercraft injuring occupant of other watercraft -- other than crew -E8374 Explosion, fire, or burning in watercraft injuring water skier -E8375 Explosion, fire, or burning in watercraft injuring swimmer -E8376 Explosion, fire, or burning in watercraft injuring dockers, stevedores -E8377 Explosion, fire, or burning in watercraft, occupant of military watercraft, any type -E8378 Explosion, fire, or burning in watercraft injuring other specified person -E8379 Explosion, fire, or burning in watercraft injuring unspecified person -E8380 Other and unspecified water transport accident injuring occupant of small boat, unpowered -E8381 Other and unspecified water transport accident injuring occupant of small boat, powered -E8382 Other and unspecified water transport accident injuring occupant of other watercraft -- crew -E8383 Other and unspecified water transport accident injuring occupant of other watercraft -- other than crew -E8384 Other and unspecified water transport accident injuring water skier -E8385 Other and unspecified water transport accident injuring swimmer -E8386 Other and unspecified water transport accident injuring dockers, stevedores -E8387 Other and unspecified water transport accident, occupant of military watercraft, any type -E8388 Other and unspecified water transport accident injuring other specified person -E8389 Other and unspecified water transport accident injuring unspecified person -E8400 Accident to powered aircraft at takeoff or landing injuring occupant of spacecraft -E8401 Accident to powered aircraft at takeoff or landing injuring occupant of military aircraft, any -E8402 Accident to powered aircraft at takeoff or landing injuring crew of commercial aircraft (powered) in surface to surface transport -E8403 Accident to powered aircraft at takeoff or landing injuring other occupant of commercial aircraft (powered) in surface to surface transport -E8404 Accident to powered aircraft at takeoff or landing injuring occupant of commercial aircraft (powered) in surface to air transport -E8405 Accident to powered aircraft at takeoff or landing injuring occupant of other powered aircraft -E8406 Accident to powered aircraft at takeoff or landing injuring occupant of unpowered aircraft, except parachutist -E8407 Accident to powered aircraft at takeoff or landing injuring parachutist (military) (other) -E8408 Accident to powered aircraft at takeoff or landing injuring ground crew, airline employee -E8409 Accident to powered aircraft at takeoff or landing injuring other person -E8410 Accident to powered aircraft, other and unspecified, injuring occupant of spacecraft -E8411 Accident to powered aircraft, other and unspecified, injuring occupant of military aircraft, any -E8412 Accident to powered aircraft, other and unspecified, injuring crew of commercial aircraft (powered) in surface to surface transport -E8413 Accident to powered aircraft, other and unspecified, injuring other occupant of commercial aircraft (powered) in surface to surface transport -E8414 Accident to powered aircraft, other and unspecified, injuring occupant of commercial aircraft (powered) in surface to air transport -E8415 Accident to powered aircraft, other and unspecified, injuring occupant of other powered aircraft -E8416 Accident to powered aircraft, other and unspecified, injuring occupant of unpowered aircraft, except parachutist -E8417 Accident to powered aircraft, other and unspecified, injuring parachutist (military) (other) -E8418 Accident to powered aircraft, other and unspecified, injuring ground crew, airline employee -E8419 Accident to powered aircraft, other and unspecified, injuring other person -E8426 Accident to unpowered aircraft injuring occupant of unpowered aircraft, except parachutist -E8427 Accident to unpowered aircraft injuring parachutist (military) (other) -E8428 Accident to unpowered aircraft injuring ground crew, airline employee -E8429 Accident to unpowered aircraft injuring other person -E8430 Fall in, on, or from aircraft injuring occupant of spacecraft -E8431 Fall in, on, or from aircraft injuring occupant of military aircraft, any -E8432 Fall in, on, or from aircraft injuring crew of commercial aircraft (powered) in surface to surface transport -E8433 Fall in, on, or from aircraft injuring other occupant of commercial aircraft (powered) in surface to surface transport -E8434 Fall in, on, or from aircraft injuring occupant of commercial aircraft (powered) in surface to air transport -E8435 Fall in, on, or from aircraft injuring occupant of other powered aircraft -E8436 Fall in, on, or from aircraft injuring occupant of unpowered aircraft, except parachutist -E8437 Fall in, on, or from aircraft injuring parachutist (military) (other) -E8438 Fall in, on, or from aircraft injuring ground crew, airline employee -E8439 Fall in, on, or from aircraft injuring other person -E8440 Other specified air transport accidents injuring occupant of spacecraft -E8441 Other specified air transport accidents injuring occupant of military aircraft, any -E8442 Other specified air transport accidents injuring crew of commercial aircraft (powered) in surface to surface transport -E8443 Other specified air transport accidents injuring other occupant of commercial aircraft (powered) in surface to surface transport -E8444 Other specified air transport accidents injuring occupant of commercial aircraft (powered) in surface to air transport -E8445 Other specified air transport accidents injuring occupant of other powered aircraft -E8446 Other specified air transport accidents injuring occupant of unpowered aircraft, except parachutist -E8447 Other specified air transport accidents injuring parachutist (military) (other) -E8448 Other specified air transport accidents injuring ground crew, airline employee -E8449 Other specified air transport accidents injuring other person -E8450 Accident involving spacecraft injuring occupant of spacecraft -E8458 Accident involving spacecraft injuring ground crew, airline employee -E8459 Accident involving spacecraft injuring other person -E846 Accidents involving powered vehicles used solely within the buildings and premises of industrial or commercial establishment -E847 Accidents involving cable cars not running on rails -E848 Accidents involving other vehicles, not elsewhere classifiable -E8490 Home accidents -E8491 Farm accidents -E8492 Mine and quarry accidents -E8493 Accidents occurring in industrial places and premises -E8494 Accidents occurring in place for recreation and sport -E8495 Street and highway accidents -E8496 Accidents occurring in public building -E8497 Accidents occurring in residential institution -E8498 Accidents occurring in other specified places -E8499 Accidents occurring in unspecified place -E8500 Accidental poisoning by heroin -E8501 Accidental poisoning by methadone -E8502 Accidental poisoning by other opiates and related narcotics -E8503 Accidental poisoning by salicylates -E8504 Accidental poisoning by aromatic analgesics, not elsewhere classified -E8505 Accidental poisoning by pyrazole derivatives -E8506 Accidental poisoning by antirheumatics (antiphlogistics) -E8507 Accidental poisoning by other non-narcotic analgesics -E8508 Accidental poisoning by other specified analgesics and antipyretics -E8509 Accidental poisoning by unspecified analgesic or antipyretic -E851 Accidental poisoning by barbiturates -E8520 Accidental poisoning by chloral hydrate group -E8521 Accidental poisoning by paraldehyde -E8522 Accidental poisoning by bromine compounds -E8523 Accidental poisoning by methaqualone compounds -E8524 Accidental poisoning by glutethimide group -E8525 Accidental poisoning by mixed sedatives, not elsewhere classified -E8528 Accidental poisoning by other specified sedatives and hypnotics -E8529 Accidental poisoning by unspecified sedative or hypnotic -E8530 Accidental poisoning by phenothiazine-based tranquilizers -E8531 Accidental poisoning by butyrophenone-based tranquilizers -E8532 Accidental poisoning by benzodiazepine-based tranquilizers -E8538 Accidental poisoning by other specified tranquilizers -E8539 Accidental poisoning by unspecified tranquilizer -E8540 Accidental poisoning by antidepressants -E8541 Accidental poisoning by psychodysleptics [hallucinogens] -E8542 Accidental poisoning by psychostimulants -E8543 Accidental poisoning by central nervous system stimulants -E8548 Accidental poisoning by other psychotropic agents -E8550 Accidental poisoning by anticonvulsant and anti-parkinsonism drugs -E8551 Accidental poisoning by other central nervous system depressants -E8552 Accidental poisoning by local anesthetics -E8553 Accidental poisoning by parasympathomimetics [cholinergics] -E8554 Accidental poisoning by parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics -E8555 Accidental poisoning by sympathomimetics [adrenergics] -E8556 Accidental poisoning by sympatholytics [antiadrenergics] -E8558 Accidental poisoning by other specified drugs acting on central and autonomic nervous systems -E8559 Accidental poisoning by unspecified drug acting on central and autonomic nervous systems -E856 Accidental poisoning by antibiotics -E857 Accidental poisoning by other anti-infectives -E8580 Accidental poisoning by hormones and synthetic substitutes -E8581 Accidental poisoning by primarily systemic agents -E8582 Accidental poisoning by agents primarily affecting blood constituents -E8583 Accidental poisoning by agents primarily affecting cardiovascular system -E8584 Accidental poisoning by agents primarily affecting gastrointestinal system -E8585 Accidental poisoning by water, mineral, and uric acid metabolism drugs -E8586 Accidental poisoning by agents primarily acting on the smooth and skeletal muscles and respiratory system -E8587 Accidental poisoning by agents primarily affecting skin and mucous membrane, ophthalmological, otorhinolaryngological, and dental drugs -E8588 Accidental poisoning by other specified drugs -E8589 Accidental poisoning by unspecified drug -E8600 Accidental poisoning by alcoholic beverages -E8601 Accidental poisoning by other and unspecified ethyl alcohol and its products -E8602 Accidental poisoning by methyl alcohol -E8603 Accidental poisoning by isopropyl alcohol -E8604 Accidental poisoning by fusel oil -E8608 Accidental poisoning by other specified alcohols -E8609 Accidental poisoning by unspecified alcohol -E8610 Accidental poisoning by synthetic detergents and shampoos -E8611 Accidental poisoning by soap products -E8612 Accidental poisoning by polishes -E8613 Accidental poisoning by other cleansing and polishing agents -E8614 Accidental poisoning by disinfectants -E8615 Accidental poisoning by lead paints -E8616 Accidental poisoning by other paints and varnishes -E8619 Accidental poisoning by unspecified cleansing and polishing agents, disinfectants, paints, and varnishes -E8620 Accidental poisoning by petroleum solvents -E8621 Accidental poisoning by petroleum fuels and cleaners -E8622 Accidental poisoning by lubricating oils -E8623 Accidental poisoning by petroleum solids -E8624 Accidental poisoning by other specified solvents, not elsewhere classified -E8629 Accidental poisoning by unspecified solvent, not elsewhere classified -E8630 Accidental poisoning by insecticides of organochlorine compounds -E8631 Accidental poisoning by insecticides of organophosphorus compounds -E8632 Accidental poisoning by carbamates -E8633 Accidental poisoning by mixtures of insecticides -E8634 Accidental poisoning by other and unspecified insecticides -E8635 Accidental poisoning by herbicides -E8636 Accidental poisoning by fungicides -E8637 Accidental poisoning by rodenticides -E8638 Accidental poisoning by fumigants -E8639 Accidental poisoning by other and unspecified agricultural and horticultural chemical and pharmaceutical preparations other than plant foods and fertilizers -E8640 Accidental poisoning by corrosive aromatics not elsewhere classified -E8641 Accidental poisoning by acids not elsewhere classified -E8642 Accidental poisoning by caustic alkalis not elsewhere classified -E8643 Accidental poisoning by other specified corrosives and caustics not elsewhere classified -E8644 Accidental poisoning by unspecified corrosives and caustics not elsewhere classified -E8650 Accidental poisoning by meat -E8651 Accidental poisoning by shellfish -E8652 Accidental poisoning from other fish -E8653 Accidental poisoning from berries and seeds -E8654 Accidental poisoning from other specified plants -E8655 Accidental poisoning from mushrooms and other fungi -E8658 Accidental poisoning from other specified foods -E8659 Accidental poisoning from unspecified foodstuff or poisonous plant -E8660 Accidental poisoning by lead and its compounds and fumes -E8661 Accidental poisoning by mercury and its compounds and fumes -E8662 Accidental poisoning by antimony and its compounds and fumes -E8663 Accidental poisoning by arsenic and its compounds and fumes -E8664 Accidental poisoning by other metals and their compounds and fumes -E8665 Accidental poisoning by plant foods and fertilizers -E8666 Accidental poisoning by glues and adhesives -E8667 Accidental poisoning by cosmetics -E8668 Accidental poisoning by other specified solid or liquid substances -E8669 Accidental poisoning by unspecified solid or liquid substance -E867 Accidental poisoning by gas distributed by pipeline -E8680 Accidental poisoning by liquefied petroleum gas distributed in mobile containers -E8681 Accidental poisoning by other and unspecified utility gas -E8682 Accidental poisoning by motor vehicle exhaust gas -E8683 Accidental poisoning by carbon monoxide from incomplete combustion of other domestic fuels -E8688 Accidental poisoning by carbon monoxide from other sources -E8689 Accidental poisoning by unspecified carbon monoxide -E8690 Accidental poisoning by nitrogen oxides -E8691 Accidental poisoning by sulfur dioxide -E8692 Accidental poisoning by freon -E8693 Accidental poisoning by lacrimogenic gas [tear gas] -E8694 Second hand tobacco smoke -E8698 Accidental poisoning by other specified gases and vapors -E8699 Accidental poisoning by unspecified gases and vapors -E8700 Accidental cut, puncture, perforation or hemorrhage during surgical operation -E8701 Accidental cut, puncture, perforation or hemorrhage during infusion or transfusion -E8702 Accidental cut, puncture, perforation or hemorrhage during kidney dialysis or other perfusion -E8703 Accidental cut, puncture, perforation or hemorrhage during injection or vaccination -E8704 Accidental cut, puncture, perforation or hemorrhage during endoscopic examination -E8705 Accidental cut, puncture, perforation or hemorrhage during aspiration of fluid or tissue, puncture, and catheterization -E8706 Accidental cut, puncture, perforation or hemorrhage during heart catheterization -E8707 Accidental cut, puncture, perforation or hemorrhage during administration of enema -E8708 Accidental cut, puncture, perforation or hemorrhage during other specified medical care -E8709 Accidental cut, puncture, perforation or hemorrhage during unspecified medical care -E8710 Foreign object left in body during surgical operation -E8711 Foreign object left in body during infusion or transfusion -E8712 Foreign object left in body during kidney dialysis or other perfusion -E8713 Foreign object left in body during injection or vaccination -E8714 Foreign object left in body during endoscopic examination -E8715 Foreign object left in body during aspiration of fluid or tissue, puncture, and catheterization -E8716 Foreign object left in body during heart catheterization -E8717 Foreign object left in body during removal of catheter or packing -E8718 Foreign object left in body during other specified procedures -E8719 Foreign object left in body during unspecified procedure -E8720 Failure of sterile precautions during surgical operation -E8721 Failure of sterile precautions during infusion or transfusion -E8722 Failure of sterile precautions during kidney dialysis and other perfusion -E8723 Failure of sterile precautions during injection or vaccination -E8724 Failure of sterile precautions during endoscopic examination -E8725 Failure of sterile precautions during aspiration of fluid or tissue, puncture, and catheterization -E8726 Failure of sterile precautions during heart catheterization -E8728 Failure of sterile precautions during other specified procedures -E8729 Failure of sterile precautions during unspecified procedure -E8730 Excessive amount of blood or other fluid during transfusion or infusion -E8731 Incorrect dilution of fluid during infusion -E8732 Overdose of radiation in therapy -E8733 Inadvertent exposure of patient to radiation during medical care -E8734 Failure in dosage in electroshock or insulin-shock therapy -E8735 Inappropriate [too hot or too cold] temperature in local application and packing -E8736 Nonadministration of necessary drug or medicinal substance -E8738 Other specified failure in dosage -E8739 Unspecified failure in dosage -E8740 Mechanical failure of instrument or apparatus during surgical operation -E8741 Mechanical failure of instrument or apparatus during infusion and transfusion -E8742 Mechanical failure of instrument or apparatus during kidney dialysis and other perfusion -E8743 Mechanical failure of instrument or apparatus during endoscopic examination -E8744 Mechanical failure of instrument or apparatus during aspiration of fluid or tissue, puncture, and catheterization -E8745 Mechanical failure of instrument or apparatus during heart catheterization -E8748 Mechanical failure of instrument or apparatus during other specified procedures -E8749 Mechanical failure of instrument or apparatus during unspecified procedure -E8750 Contaminated substance transfused or infused -E8751 Contaminated substance injected or used for vaccination -E8752 Contaminated drug or biological substance administered by other means -E8758 Misadventure to patient from other contamination -E8759 Misadventure to patient from unspecified contamination -E8760 Mismatched blood in transfusion -E8761 Wrong fluid in infusion -E8762 Failure in suture and ligature during surgical operation -E8763 Endotracheal tube wrongly placed during anesthetic procedure -E8764 Failure to introduce or to remove other tube or instrument -E8765 Performance of wrong operation (procedure) on correct patient -E8766 Performance of operation (procedure) on patient not scheduled for surgery -E8767 Performance of correct operation (procedure) on wrong side/body part -E8768 Other specified misadventures during medical care -E8769 Unspecified misadventure during medical care -E8780 Surgical operation with transplant of whole organ causing abnormal patient reaction, or later complication, without mention of misadventure at time of operation -E8781 Surgical operation with implant of artificial internal device causing abnormal patient reaction, or later complication,without mention of misadventure at time of operation -E8782 Surgical operation with anastomosis, bypass, or graft, with natural or artificial tissues used as implant causing abnormal patient reaction, or later complication, without mention of misadventure at time of operation -E8783 Surgical operation with formation of external stoma causing abnormal patient reaction, or later complication, without mention of misadventure at time of operation -E8784 Other restorative surgery causing abnormal patient reaction, or later complication, without mention of misadventure at time of operation -E8785 Amputation of limb(s) causing abnormal patient reaction, or later complication, without mention of misadventure at time of operation -E8786 Removal of other organ (partial) (total) causing abnormal patient reaction, or later complication, without mention of misadventure at time of operation -E8788 Other specified surgical operations and procedures causing abnormal patient reaction, or later complication, without mention of misadventure at time of operation -E8789 Unspecified surgical operations and procedures causing abnormal patient reaction, or later complication, without mention of misadventure at time of operation -E8790 Cardiac catheterization as the cause of abnormal reaction of patient, or of later complication, without mention of misadventure at time of procedure -E8791 Kidney dialysis as the cause of abnormal reaction of patient, or of later complication, without mention of misadventure at time of procedure -E8792 Radiological procedure and radiotherapy as the cause of abnormal reaction of patient, or of later complication, without mention of misadventure at time of procedure -E8793 Shock therapy as the cause of abnormal reaction of patient, or of later complication, without mention of misadventure at time of procedure -E8794 Aspiration of fluid as the cause of abnormal reaction of patient, or of later complication, without mention of misadventure at time of procedure -E8795 Insertion of gastric or duodenal sound as the cause of abnormal reaction of patient, or of later complication, without mention of misadventure of time of procedure -E8796 Urinary catheterization as the cause of abnormal reaction of patient, or of later complication, without mention of misadventure at time of procedure -E8797 Blood sampling as the cause of abnormal reaction of patient, or of later complication, without mention of misadventure at time of procedure -E8798 Other specified procedures as the cause of abnormal reaction of patient, or of later complication, without mention of misadventure at time of procedure -E8799 Unspecified procedure as the cause of abnormal reaction of patient, or of later complication, without mention of misadventure at time of procedure -E8800 Accidental fall on or from escalator -E8801 Accidental fall on or from sidewalk curb -E8809 Accidental fall on or from other stairs or directives -E8810 Accidental fall from ladder -E8811 Accidental fall from scaffolding -E882 Accidental fall from or out of building or other structure -E8830 Accident from diving or jumping into water [swimming pool] -E8831 Accidental fall into well -E8832 Accidental fall into storm drain or manhole -E8839 Accidental fall into other hole or other opening in surface -E8840 Accidental fall from playground equipment -E8841 Accidental fall from cliff -E8842 Accidental fall from chair -E8843 Accidental fall from wheelchair -E8844 Accidental fall from bed -E8845 Accidental fall from other furniture -E8846 Accidental fall from commode -E8849 Other accidental fall from one level to another -E8850 Fall from (nonmotorized) scooter -E8851 Fall from roller skates -E8852 Fall from skateboard -E8853 Fall from skis -E8854 Fall from snowboard -E8859 Fall from other slipping, tripping, or stumbling -E8860 Fall on same level from collision, pushing, or shoving, by or with other person in sports -E8869 Other and unspecified falls on same level from collision, pushing, or shoving, by or with other person -E887 Fracture, cause unspecified -E8880 Fall resulting in striking against sharp object -E8881 Fall resulting in striking against other object -E8888 Other fall -E8889 Unspecified fall -E8900 Explosion caused by conflagration in private dwelling -E8901 Fumes from combustion of polyvinylchloride [pvc] and similar material in conflagration in private dwelling -E8902 Other smoke and fumes from conflagration in private dwelling -E8903 Burning caused by conflagration in private dwelling -E8908 Other accident resulting from conflagration in private dwelling -E8909 Unspecified accident resulting from conflagration in private dwelling -E8910 Explosion caused by conflagration in other and unspecified building or structure -E8911 Fumes from combustion of polyvinylchloride [pvc] and similar material in conflagration in other and unspecified building or structure -E8912 Other smoke and fumes from conflagration in other and unspecified building or structure -E8913 Burning caused by conflagration in other and unspecified building or structure -E8918 Other accident resulting from conflagration in other and unspecified building or structure -E8919 Unspecified accident resulting from conflagration of other and unspecified building or structure -E892 Conflagration not in building or structure -E8930 Accident caused by ignition of clothing from controlled fire in private dwelling -E8931 Accident caused by ignition of clothing from controlled fire in other building or structure -E8932 Accident caused by ignition of clothing from controlled fire not in building or structure -E8938 Accident caused by ignition of clothing from other specified sources -E8939 Accident caused by ignition of clothing by unspecified source -E894 Ignition of highly inflammable material -E895 Accident caused by controlled fire in private dwelling -E896 Accident caused by controlled fire in other and unspecified building or structure -E897 Accident caused by controlled fire not in building or structure -E8980 Accident caused by burning bedclothes -E8981 Accident caused by other burning materials -E899 Accident caused by unspecified fire -E9000 Accident caused by excessive heat due to weather conditions -E9001 Accidents due to excessive heat of man-made origin -E9009 Accidents due to excessive heat of unspecified origin -E9010 Accident due to excessive cold due to weather conditions -E9011 Accident due to excessive cold of man-made origin -E9018 Accident due to excessive cold of other specified origin -E9019 Accident due to excessive cold of unspecified origin -E9020 Accident due to residence or prolonged visit at high altitude -E9021 Accident due to changes in air pressure in aircraft -E9022 Accident due to changes in air pressure due to diving -E9028 Accident due to changes in air pressure due to other specified causes -E9029 Accident due to changes in air pressure from unspecified cause -E903 Accident caused by travel and motion -E9040 Accident due to abandonment or neglect of infants and helpless persons -E9041 Accident due to lack of food -E9042 Accident due to lack of water -E9043 Accident due to exposure (to weather conditions), not elsewhere classifiable -E9049 Accident due to privation, unqualified -E9050 Venomous snakes and lizards causing poisoning and toxic reactions -E9051 Venomous spiders causing poisoning and toxic reactions -E9052 Scorpion sting causing poisoning and toxic reactions -E9053 Sting of hornets, wasps, and bees causing poisoning and toxic reactions -E9054 Centipede and venomous millipede (tropical) bite causing poisoning and toxic reactions -E9055 Other venomous arthropods causing poisoning and toxic reactions -E9056 Venomous marine animals and plants causing poisoning and toxic reactions -E9057 Poisoning and toxic reactions caused by other plants -E9058 Poisoning and toxic reactions caused by other specified animals and plants -E9059 Poisoning and toxic reactions caused by unspecified animals and plants -E9060 Dog bite -E9061 Rat bite -E9062 Bite of nonvenomous snakes and lizards -E9063 Bite of other animal except arthropod -E9064 Bite of nonvenomous arthropod -E9065 Bite by unspecified animal -E9068 Other specified injury caused by animal -E9069 Unspecified injury caused by animal -E907 Accident due to lightning -E9080 Hurricane -E9081 Tornado -E9082 Floods -E9083 Blizzard (snow) (ice) -E9084 Dust storm -E9088 Other cataclysmic storms -E9089 Unspecified cataclysmic storms, and floods resulting from storms -E9090 Earthquakes -E9091 Volcanic eruptions -E9092 Avalanche, landslide, or mudslide -E9093 Collapse of dam or man-made structure -E9094 Tidalwave caused by earthquake -E9098 Other cataclysmic earth surface movements and eruptions -E9099 Unspecified cataclysmic earth surface movements and eruptions -E9100 Accidental drowning and submersion while water-skiing -E9101 Accidental drowning and submersion while engaged in other sport or recreational activity with diving equipment -E9102 Accidental drowning and submersion while engaged in other sport or recreational activity without diving equipment -E9103 Accidental drowning and submersion while swimming or diving for purposes other than recreation or sport -E9104 Accidental drowning and submersion in bathtub -E9108 Other accidental drowning or submersion -E9109 Unspecified accidental drowning or submersion -E911 Inhalation and ingestion of food causing obstruction of respiratory tract or suffocation -E912 Inhalation and ingestion of other object causing obstruction of respiratory tract or suffocation -E9130 Accidental mechanical suffocation in bed or cradle -E9131 Accidental mechanical suffocation by plastic bag -E9132 Accidental mechanical suffocation due to lack of air (in closed place) -E9133 Accidental mechanical suffocation by falling earth or other substance -E9138 Accidental mechanical suffocation by other specified means -E9139 Accidental mechanical suffocation by unspecified means -E914 Foreign body accidentally entering eye and adnexa -E915 Foreign body accidentally entering other orifice -E916 Struck accidentally by falling object -E9170 Striking against or struck accidentally by objects or persons in sports -E9171 Striking against or struck accidentally by a crowd, by collective fear or panic -E9172 Striking against or struck accidentally in running water -E9173 Striking against or struck accidentally by furniture without subsequent fall -E9174 Striking against or struck accidentally by other stationary object without subsequent fall -E9175 Striking against or struck accidentally by object in sports with subsequent fall -E9176 Striking against or struck accidentally caused by a crowd, by collective fear or panic with subsequent fall -E9177 Striking against or struck accidentally by furniture with subsequent fall -E9178 Striking against or struck accidentally by other stationary object with subsequent fall -E9179 Other accident caused by striking against or being struck accidentally by objects or persons -E918 Caught accidentally in or between objects -E9190 Accidents caused by agricultural machines -E9191 Accidents caused by mining and earth-drilling machinery -E9192 Accidents caused by lifting machines and appliances -E9193 Accidents caused by metalworking machines -E9194 Accidents caused by woodworking and forming machines -E9195 Accidents caused by prime movers, except electrical motors -E9196 Accidents caused by transmission machinery -E9197 Accidents caused by earth moving, scraping, and other excavating machines -E9198 Accidents caused by other specified machinery -E9199 Accidents caused by unspecified machinery -E9200 Accidents caused by powered lawn mower -E9201 Accidents caused by other powered hand tools -E9202 Accidents caused by powered household appliances and implements -E9203 Accidents caused by knives, swords, and daggers -E9204 Accidents caused by other hand tools and implements -E9205 Accidents caused by hypodermic needle -E9208 Accidents caused by other specified cutting and piercing instruments or objects -E9209 Accidents caused by unspecified cutting and piercing instrument or object -E9210 Accident caused by explosion of boilers -E9211 Accident caused by explosion of gas cylinders -E9218 Accident caused by explosion of other specified pressure vessels -E9219 Accident caused by explosion of unspecified pressure vessel -E9220 Accident caused by handgun -E9221 Accident caused by shotgun (automatic) -E9222 Accident caused by hunting rifle -E9223 Accident caused by military firearms -E9224 Accident caused by air gun -E9225 Accident caused by paintball gun -E9228 Accident caused by other specified firearm missile -E9229 Accident caused by unspecified firearm missile -E9230 Accident caused by fireworks -E9231 Accident caused by blasting materials -E9232 Accident caused by explosive gases -E9238 Accident caused by other explosive materials -E9239 Accident caused by unspecified explosive material -E9240 Accident caused by hot liquids and vapors, including steam -E9241 Accident caused by caustic and corrosive substances -E9242 Accident caused by hot (boiling) tap water -E9248 Accident caused by other hot substance or object -E9249 Accident caused by unspecified hot substance or object -E9250 Accident caused by domestic wiring and appliances -E9251 Accident caused by electric current in electric power generating plants, distribution stations, transmission lines -E9252 Accident caused by industrial wiring, appliances, and electrical machinery -E9258 Accident caused by other electric current -E9259 Accident caused by unspecified electric current -E9260 Exposure to radiofrequency radiation -E9261 Exposure to infra-red radiation from heaters and lamps -E9262 Exposure to visible and ultraviolet light sources -E9263 Exposure to x-rays and other electromagnetic ionizing radiation -E9264 Exposure to lasers -E9265 Exposure to radioactive isotopes -E9268 Exposure to other specified radiation -E9269 Exposure to unspecified radiation -E9270 Overexertion from sudden strenuous movement -E9271 Overexertion from prolonged static position -E9272 Excessive physical exertion -E9273 Cumulative trauma from repetitive motion -E9274 Cumulative trauma from repetitive impact -E9278 Other overexertion and strenuous and repetitive movements or loads -E9279 Unspecified overexertion and strenuous and repetitive movements or loads -E9280 Prolonged stay in weightless environment -E9281 Exposure to noise -E9282 Vibration -E9283 Human bite -E9284 External constriction caused by hair -E9285 External constriction caused by other object -E9286 Environmental exposure to harmful algae and toxins -E9287 Environmental and accidental causes, mechanism or component of firearm and air gun -E9288 Other accidents -E9289 Unspecified accident -E9290 Late effects of motor vehicle accident -E9291 Late effects of other transport accident -E9292 Late effects of accidental poisoning -E9293 Late effects of accidental fall -E9294 Late effects of accident caused by fire -E9295 Late effects of accident due to natural and environmental factors -E9298 Late effects of other accidents -E9299 Late effects of unspecified accident -E9300 Penicillins causing adverse effects in therapeutic use -E9301 Antifungal antibiotics causing adverse effects in therapeutic use -E9302 Chloramphenicol group causing adverse effects in therapeutic use -E9303 Erythromycin and other macrolides causing adverse effects in therapeutic use -E9304 Tetracycline group causing adverse effects in therapeutic use -E9305 Cephalosporin group causing adverse effects in therapeutic use -E9306 Antimycobacterial antibiotics causing adverse effects in therapeutic use -E9307 Antineoplastic antibiotics causing adverse effects in therapeutic use -E9308 Other specified antibiotics causing adverse effects in therapeutic use -E9309 Unspecified antibiotic causing adverse effects in therapeutic use -E9310 Sulfonamides causing adverse effects in therapeutic use -E9311 Arsenical anti-infectives causing adverse effects in therapeutic use -E9312 Heavy metal anti-infectives causing adverse effects in therapeutic use -E9313 Quinoline and hydroxyquinoline derivatives causing adverse effects in therapeutic use -E9314 Antimalarials and drugs acting on other blood protozoa causing adverse effects in therapeutic use -E9315 Other antiprotozoal drugs causing adverse effects in therapeutic use -E9316 Anthelmintics causing adverse effects in therapeutic use -E9317 Antiviral drugs causing adverse effects in therapeutic use -E9318 Other antimycobacterial drugs causing adverse effects in therapeutic use -E9319 Other and unspecified anti-infectives causing adverse effects in therapeutic use -E9320 Adrenal cortical steroids causing adverse effects in therapeutic use -E9321 Androgens and anabolic congeners causing adverse effects in therapeutic use -E9322 Ovarian hormones and synthetic substitutes causing adverse effects in therapeutic use -E9323 Insulins and antidiabetic agents causing adverse effects in therapeutic use -E9324 Anterior pituitary hormones causing adverse effects in therapeutic use -E9325 Posterior pituitary hormones causing adverse effects in therapeutic use -E9326 Parathyroid and parathyroid derivatives causing adverse effects in therapeutic use -E9327 Thyroid and thyroid derivatives causing adverse effects in therapeutic use -E9328 Antithyroid agents causing adverse effects in therapeutic use -E9329 Other and unspecified hormones and synthetic substitutes causing adverse effects in therapeutic use -E9330 Antiallergic and antiemetic drugs causing adverse effects in therapeutic use -E9331 Antineoplastic and immunosuppressive drugs causing adverse effects in therapeutic use -E9332 Acidifying agents causing adverse effects in therapeutic use -E9333 Alkalizing agents causing adverse effects in therapeutic use -E9334 Enzymes, not elsewhere classified, causing adverse effects in therapeutic use -E9335 Vitamins, not elsewhere classified, causing adverse effects in therapeutic use -E9336 Oral bisphosphonates -E9337 Intravenous bisphosphonates -E9338 Other systemic agents, not elsewhere classified, causing adverse effects in therapeutic use -E9339 Unspecified systemic agent causing adverse effects in therapeutic use -E9340 Iron and its compounds causing adverse effects in therapeutic use -E9341 Liver preparations and other antianemic agents causing adverse effects in therapeutic use -E9342 Anticoagulants causing adverse effects in therapeutic use -E9343 Vitamin k [phytonadione] causing adverse effects in therapeutic use -E9344 Fibrinolysis-affecting drugs causing adverse effects in therapeutic use -E9345 Anticoagulant antagonists and other coagulants causing adverse effects in therapeutic use -E9346 Gamma globulin causing adverse effects in therapeutic use -E9347 Natural blood and blood products causing adverse effects in therapeutic use -E9348 Other agents affecting blood constituents causing adverse effects in therapeutic use -E9349 Unspecified agent affecting blood constituents causing adverse effects in therapeutic use -E9350 Heroin causing adverse effects in therapeutic use -E9351 Methadone causing averse effects in therapeutic use -E9352 Other opiates and related narcotics causing adverse effects in therapeutic use -E9353 Salicylates causing adverse effects in therapeutic use -E9354 Aromatic analgesics, not elsewhere classified, causing adverse effects in therapeutic use -E9355 Pyrazole derivatives causing adverse effects in therapeutic use -E9356 Antirheumatics [antiphlogistics] causing adverse effects in therapeutic use -E9357 Other non-narcotic analgesics causing adverse effects in therapeutic use -E9358 Other specified analgesics and antipyretics causing adverse effects in therapeutic use -E9359 Unspecified analgesic and antipyretic causing adverse effects in therapeutic use -E9360 Oxazolidine derivatives causing adverse effects in therapeutic use -E9361 Hydantoin derivatives causing adverse effects in therapeutic use -E9362 Succinimides causing adverse effects in therapeutic use -E9363 Other and unspecified anticonvulsants causing adverse effects in therapeutic use -E9364 Anti-parkinsonism drugs causing adverse effects in therapeutic use -E9370 Barbiturates causing adverse effects in therapeutic use -E9371 Chloral hydrate group causing adverse effects in therapeutic use -E9372 Paraldehyde causing adverse effects in therapeutic use -E9373 Bromine compounds causing adverse effects in therapeutic use -E9374 Methaqualone compounds causing adverse effects in therapeutic use -E9375 Glutethimide group causing adverse effects in therapeutic use -E9376 Mixed sedatives, not elsewhere classified, causing adverse effects in therapeutic use -E9378 Other sedatives and hypnotics causing adverse effects in therapeutic use -E9379 Unspecified sedatives and hypnotics causing adverse effects in therapeutic use -E9380 Central nervous system muscle-tone depressants causing adverse effects in therapeutic use -E9381 Halothane causing adverse effects in therapeutic use -E9382 Other gaseous anesthetics causing adverse effects in therapeutic use -E9383 Intravenous anesthetics causing adverse effects in therapeutic use -E9384 Other and unspecified general anesthetics causing adverse effects in therapeutic use -E9385 Surface and infiltration anesthetics causing adverse effects in therapeutic use -E9386 Peripheral nerve- and plexus-blocking anesthetics causing adverse effects in therapeutic use -E9387 Spinal anesthetics causing adverse effects in therapeutic use -E9389 Other and unspecified local anesthetics causing adverse effects in therapeutic use -E9390 Antidepressants causing adverse effects in therapeutic use -E9391 Phenothiazine-based tranquilizers causing adverse effects in therapeutic use -E9392 Butyrophenone-based tranquilizers causing adverse effects in therapeutic use -E9393 Other antipsychotics, neuroleptics, and major tranquilizers causing adverse effects in therapeutic use -E9394 Benzodiazepine-based tranquilizers causing adverse effects in therapeutic use -E9395 Other tranquilizers causing adverse effects in therapeutic use -E9396 Psychodysleptics [hallucinogens] causing adverse effects in therapeutic use -E9397 Psychostimulants causing adverse effects in therapeutic use -E9398 Other psychotropic agents causing adverse effects in therapeutic use -E9399 Unspecified psychotropic agent causing adverse effects in therapeutic use -E9400 Analeptics causing adverse effects in therapeutic use -E9401 Opiate antagonists causing adverse effects in therapeutic use -E9408 Other specified central nervous system stimulants causing adverse effects in therapeutic use -E9409 Unspecified central nervous system stimulant causing adverse effects in therapeutic use -E9410 Parasympathomimetics [cholinergics] causing adverse effects in therapeutic use -E9411 Parasympatholytics [anticholinergics and antimuscarinics] and spasmolytics causing adverse effects in therapeutic use -E9412 Sympathomimetics [adrenergics] causing adverse effects in therapeutic use -E9413 Sympatholytics [antiadrenergics] causing adverse effects in therapeutic use -E9419 Unspecified drug primarily affecting the autonomic nervous system causing adverse effects in therapeutic use -E9420 Cardiac rhythm regulators causing adverse effects in therapeutic use -E9421 Cardiotonic glycosides and drugs of similar action causing adverse effects in therapeutic use -E9422 Antilipemic and antiarteriosclerotic drugs causing adverse effects in therapeutic use -E9423 Ganglion-blocking agents causing adverse effects in therapeutic use -E9424 Coronary vasodilators causing adverse effects in therapeutic use -E9425 Other vasodilators causing adverse effects in therapeutic use -E9426 Other antihypertensive agents causing adverse effects in therapeutic use -E9427 Antivaricose drugs, including sclerosing agents, causing adverse effects in therapeutic use -E9428 Capillary-active drugs causing adverse effects in therapeutic use -E9429 Other and unspecified agents primarily affecting the cardiovascular system causing adverse effects in therapeutic use -E9430 Antacids and antigastric secretion drugs causing adverse effects in therapeutic use -E9431 Irritant cathartics causing adverse effects in therapeutic use -E9432 Emollient cathartics causing adverse effects in therapeutic use -E9433 Other cathartics, including intestinal atonia drugs, causing adverse effects in therapeutic use -E9434 Digestants causing adverse effects in therapeutic use -E9435 Antidiarrheal drugs causing adverse effects in therapeutic use -E9436 Emetics causing adverse effects in therapeutic use -E9438 Other specified agents primarily affecting the gastro-intestinal system causing adverse effects in therapeutic use -E9439 Unspecified agent primarily affecting the gastrointestinal system causing adverse effects in therapeutic use -E9440 Mercurial diuretics causing adverse effects in therapeutic use -E9441 Purine derivative diuretics causing adverse effects in therapeutic use -E9442 Carbonic acid anhydrase inhibitors causing adverse effects in therapeutic use -E9443 Saluretics causing adverse effects in therapeutic use -E9444 Other diuretics causing adverse effects in therapeutic use -E9445 Electrolytic, caloric, and water-balance agents causing adverse effects in therapeutic use -E9446 Other mineral salts, not elsewhere classified, causing adverse effects in therapeutic use -E9447 Uric acid metabolism drugs causing adverse effects in therapeutic use -E9450 Oxytocic agents causing adverse effects in therapeutic use -E9451 Smooth muscle relaxants causing adverse effects in therapeutic use -E9452 Skeletal muscle relaxants causing adverse effects in therapeutic use -E9453 Other and unspecified drugs acting on muscles causing adverse effects in therapeutic use -E9454 Antitussives causing adverse effects in therapeutic use -E9455 Expectorants causing adverse effects in therapeutic use -E9456 Anti-common cold drugs causing adverse effects in therapeutic use -E9457 Antiasthmatics causing adverse effects in therapeutic use -E9458 Other and unspecified respiratory drugs causing adverse effects in therapeutic use -E9460 Local anti-infectives and anti-inflammatory drugs causing adverse effects in therapeutic use -E9461 Antipruritics causing adverse effects in therapeutic use -E9462 Local astringents and local detergents causing adverse effects in therapeutic use -E9463 Emollients, demulcents, and protectants causing adverse effects in therapeutic use -E9464 Keratolytics, keratoplastics, other hair treatment drugs and preparations causing adverse effects in therapeutic use -E9465 Eye anti-infectives and other eye drugs causing adverse effects in therapeutic use -E9466 Anti-infectives and other drugs and preparations for ear, nose, and throat causing adverse effects in therapeutic use -E9467 Dental drugs topically applied causing adverse effects in therapeutic use -E9468 Other agents primarily affecting skin and mucous membrane causing adverse effects in therapeutic use -E9469 Unspecified agent primarily affecting skin and mucous membrane causing adverse effects in therapeutic use -E9470 Dietetics causing adverse effects in therapeutic use -E9471 Lipotropic drugs causing adverse effects in therapeutic use -E9472 Antidotes and chelating agents, not elsewhere classified, causing adverse effects in therapeutic use -E9473 Alcohol deterrents causing adverse effects in therapeutic use -E9474 Pharmaceutical excipients causing adverse effects in therapeutic use -E9478 Other drugs and medicinal substances causing adverse effects in therapeutic use -E9479 Unspecified drug or medicinal substance causing adverse effects in therapeutic use -E9480 Bcg vaccine causing adverse effects in therapeutic use -E9481 Typhoid and paratyphoid vaccines causing adverse effects in therapeutic use -E9482 Cholera vaccine causing adverse effects in therapeutic use -E9483 Plague vaccine causing adverse effects in therapeutic use -E9484 Tetanus vaccine causing adverse effects in therapeutic use -E9485 Diphtheria vaccine causing adverse effects in therapeutic use -E9486 Pertussis vaccine, including combinations with a pertussis component, causing adverse effects in therapeutic use -E9488 Other and unspecified bacterial vaccines causing adverse effects in therapeutic use -E9489 Mixed bacterial vaccines, except combinations with a pertussis component, causing adverse effects in therapeutic use -E9490 Smallpox vaccine causing adverse effects in therapeutic use -E9491 Rabies vaccine causing adverse effects in therapeutic use -E9492 Typhus vaccine causing adverse effects in therapeutic use -E9493 Yellow fever vaccine causing adverse effects in therapeutic use -E9494 Measles vaccine causing adverse effects in therapeutic use -E9495 Poliomyelitis vaccine causing adverse effects in therapeutic use -E9496 Other and unspecified viral and rickettsial vaccines causing adverse effects in therapeutic use -E9497 Mixed viral-rickettsial and bacterial vaccines, except combinations with a pertussis component, causing adverse effects in therapeutic use -E9499 Other and unspecified vaccines and biological substances causing adverse effects in therapeutic use -E9500 Suicide and self-inflicted poisoning by analgesics, antipyretics, and antirheumatics -E9501 Suicide and self-inflicted poisoning by barbiturates -E9502 Suicide and self-inflicted poisoning by other sedatives and hypnotics -E9503 Suicide and self-inflicted poisoning by tranquilizers and other psychotropic agents -E9504 Suicide and self-inflicted poisoning by other specified drugs and medicinal substances -E9505 Suicide and self-inflicted poisoning by unspecified drug or medicinal substance -E9506 Suicide and self-inflicted poisoning by agricultural and horticultural chemical and pharmaceutical preparations other than plant foods and fertilizers -E9507 Suicide and self-inflicted poisoning by corrosive and caustic substances -E9508 Suicide and self-inflicted poisoning by arsenic and its compounds -E9509 Suicide and self-inflicted poisoning by other and unspecified solid and liquid substances -E9510 Suicide and self-inflicted poisoning by gas distributed by pipeline -E9511 Suicide and self-inflicted poisoning by liquefied petroleum gas distributed in mobile containers -E9518 Suicide and self-inflicted poisoning by other utility gas -E9520 Suicide and self-inflicted poisoning by motor vehicle exhaust gas -E9521 Suicide and self-inflicted poisoning by other carbon monoxide -E9528 Suicide and self-inflicted poisoning by other specified gases and vapors -E9529 Suicide and self-inflicted poisoning by unspecified gases and vapors -E9530 Suicide and self-inflicted injury by hanging -E9531 Suicide and self-inflicted injury by suffocation by plastic bag -E9538 Suicide and self-inflicted injury by other specified means -E9539 Suicide and self-inflicted injury by unspecified means -E954 Suicide and self-inflicted injury by submersion [drowning] -E9550 Suicide and self-inflicted injury by handgun -E9551 Suicide and self-inflicted injury by shotgun -E9552 Suicide and self-inflicted injury by hunting rifle -E9553 Suicide and self-inflicted injury by military firearms -E9554 Suicide and self-inflicted injury by other and unspecified firearm -E9555 Suicide and self-inflicted injury by explosives -E9556 Suicide and self-inflicted injury by air gun -E9557 Suicide and self-inflicted injury by paintball gun -E9559 Suicide and self-inflicted injury by firearms and explosives, unspecified -E956 Suicide and self-inflicted injury by cutting and piercing instrument -E9570 Suicide and self-inflicted injuries by jumping from residential premises -E9571 Suicide and self-inflicted injuries by jumping from other man-made structures -E9572 Suicide and self-inflicted injuries by jumping from natural sites -E9579 Suicide and self-inflicted injuries by jumping from unspecified site -E9580 Suicide and self-inflicted injury by jumping or lying before moving object -E9581 Suicide and self-inflicted injury by burns, fire -E9582 Suicide and self-inflicted injury by scald -E9583 Suicide and self-inflicted injury by extremes of cold -E9584 Suicide and self-inflicted injury by electrocution -E9585 Suicide and self-inflicted injury by crashing of motor vehicle -E9586 Suicide and self-inflicted injury by crashing of aircraft -E9587 Suicide and self-inflicted injury by caustic substances, except poisoning -E9588 Suicide and self-inflicted injury by other specified means -E9589 Suicide and self-inflicted injury by unspecified means -E959 Late effects of self-inflicted injury -E9600 Unarmed fight or brawl -E9601 Rape -E961 Assault by corrosive or caustic substance, except poisoning -E9620 Assault by drugs and medicinal substances -E9621 Assault by other solid and liquid substances -E9622 Assault by other gases and vapors -E9629 Assault by unspecified poisoning -E963 Assault by hanging and strangulation -E964 Assault by submersion [drowning] -E9650 Assault by handgun -E9651 Assault by shotgun -E9652 Assault by hunting rifle -E9653 Assault by military firearms -E9654 Assault by other and unspecified firearm -E9655 Assault by antipersonnel bomb -E9656 Assault by gasoline bomb -E9657 Assault by letter bomb -E9658 Assault by other specified explosive -E9659 Assault by unspecified explosive -E966 Assault by cutting and piercing instrument -E9670 Perpetrator of child and adult abuse, by father, stepfather, or boyfriend -E9671 Perpetrator of child and adult abuse, by other specified person -E9672 Perpetrator of child and adult abuse, by mother, stepmother, or girlfriend -E9673 Perpetrator of child and adult abuse, by spouse or partner -E9674 Perpetrator of child and adult abuse, by child -E9675 Perpetrator of child and adult abuse, by sibling -E9676 Perpetrator of child and adult abuse, by grandparent -E9677 Perpetrator of child and adult abuse, by other relative -E9678 Perpetrator of child and adult abuse, by non-related caregiver -E9679 Perpetrator of child and adult abuse, by unspecified person -E9680 Assault by fire -E9681 Assault by pushing from a high place -E9682 Assault by striking by blunt or thrown object -E9683 Assault by hot liquid -E9684 Assault by criminal neglect -E9685 Assault by transport vehicle -E9686 Assault by air gun -E9687 Assault by human bite -E9688 Assault by other specified means -E9689 Assault by unspecified means -E969 Late effects of injury purposely inflicted by other person -E970 Injury due to legal intervention by firearms -E971 Injury due to legal intervention by explosives -E972 Injury due to legal intervention by gas -E973 Injury due to legal intervention by blunt object -E974 Injury due to legal intervention by cutting and piercing instrument -E975 Injury due to legal intervention by other specified means -E976 Injury due to legal intervention by unspecified means -E977 Late effects of injuries due to legal intervention -E978 Legal execution -E9790 Terrorism involving explosion of marine weapons -E9791 Terrorism involving destruction of aircraft -E9792 Terrorism involving other explosions and fragments -E9793 Terrorism involving fires -E9794 Terrorism involving firearms -E9795 Terrorism involving nuclear weapons -E9796 Terrorism involving biological weapons -E9797 Terrorism involving chemical weapons -E9798 Terrorism involving other means -E9799 Terrorism secondary effects -E9800 Poisoning by analgesics, antipyretics, and antirheumatics, undetermined whether accidentally or purposely inflicted -E9801 Poisoning by barbiturates, undetermined whether accidentally or purposely inflicted -E9802 Poisoning by other sedatives and hypnotics, undetermined whether accidentally or purposely inflicted -E9803 Poisoning by tranquilizers and other psychotropic agents, undetermined whether accidentally or purposely inflicted -E9804 Poisoning by other specified drugs and medicinal substances, undetermined whether accidentally or purposely inflicted -E9805 Poisoning by unspecified drug or medicinal substance, undetermined whether accidentally or purposely inflicted -E9806 Poisoning by corrosive and caustic substances, undetermined whether accidentally or purposely inflicted -E9807 Poisoning by agricultural and horticultural chemical and pharmaceutical preparations other than plant foods and fertilizers, undetermined whether accidentally or purposely inflicted -E9808 Poisoning by arsenic and its compounds, undetermined whether accidentally or purposely inflicted -E9809 Poisoning by other and unspecified solid and liquid substances, undetermined whether accidentally or purposely inflicted -E9810 Poisoning by gas distributed by pipeline, undetermined whether accidentally or purposely inflicted -E9811 Poisoning by liquefied petroleum gas distributed in mobile containers, undetermined whether accidentally or purposely inflicted -E9818 Poisoning by other utility gas, undetermined whether accidentally or purposely inflicted -E9820 Poisoning by motor vehicle exhaust gas, undetermined whether accidentally or purposely inflicted -E9821 Poisoning by other carbon monoxide, undetermined whether accidentally or purposely inflicted -E9828 Poisoning by other specified gases and vapors, undetermined whether accidentally or purposely inflicted -E9829 Poisoning by unspecified gases and vapors, undetermined whether accidentally or purposely inflicted -E9830 Hanging, undetermined whether accidentally or purposely inflicted -E9831 Suffocation by plastic bag, undetermined whether accidentally or purposely inflicted -E9838 Strangulation or suffocation by other specified means, undetermined whether accidentally or purposely inflicted -E9839 Strangulation or suffocation by unspecified means, undetermined whether accidentally or purposely inflicted -E984 Submersion (drowning), undetermined whether accidentally or purposely inflicted -E9850 Injury by handgun, undetermined whether accidentally or purposely inflicted -E9851 Injury by shotgun, undetermined whether accidentally or purposely inflicted -E9852 Injury by hunting rifle, undetermined whether accidentally or purposely inflicted -E9853 Injury by military firearms, undetermined whether accidentally or purposely inflicted -E9854 Injury by other and unspecified firearm, undetermined whether accidentally or purposely inflicted -E9855 Injury by explosives, undetermined whether accidentally or purposely inflicted -E9856 Injury by air gun, undetermined whether accidental or purposely inflicted -E9857 Injury by paintball gun, undetermined whether accidental or purposely inflicted -E986 Injury by cutting and piercing instruments, undetermined whether accidentally or purposely inflicted -E9870 Falling from residential premises, undetermined whether accidentally or purposely inflicted -E9871 Falling from other man-made structures, undetermined whether accidentally or purposely inflicted -E9872 Falling from natural sites, undetermined whether accidentally or purposely inflicted -E9879 Falling from unspecified site, undetermined whether accidentally or purposely inflicted -E9880 Injury by jumping or lying before moving object, undetermined whether accidentally or purposely inflicted -E9881 Injury by burns or fire, undetermined whether accidentally or purposely inflicted -E9882 Injury by scald, undetermined whether accidentally or purposely inflicted -E9883 Injury by extremes of cold, undetermined whether accidentally or purposely inflicted -E9884 Injury by electrocution, undetermined whether accidentally or purposely inflicted -E9885 Injury by crashing of motor vehicle, undetermined whether accidentally or purposely inflicted -E9886 Injury by crashing of aircraft, undetermined whether accidentally or purposely inflicted -E9887 Injury by caustic substances, except poisoning, undetermined whether accidentally or purposely inflicted -E9888 Injury by other specified means, undetermined whether accidentally or purposely inflicted -E9889 Injury by unspecified means, undetermined whether accidentally or purposely inflicted -E989 Late effects of injury, undetermined whether accidentally or purposely inflicted -E9900 Injury due to war operations from gasoline bomb -E9901 Injury due to war operations from flamethrower -E9902 Injury due to war operations from incendiary bullet -E9903 Injury due to war operations from fire caused indirectly from conventional weapon -E9909 Injury due to war operations from other and unspecified source -E9910 Injury due to war operations from rubber bullets (rifle) -E9911 Injury due to war operations from pellets (rifle) -E9912 Injury due to war operations from other bullets -E9913 Injury due to war operations from antipersonnel bomb (fragments) -E9914 Injury due to war operations by fragments from munitions -E9915 Injury due to war operations by fragments from person-borne improvised explosive device [IED] -E9916 Injury due to war operations by fragments from vehicle-borne improvised explosive device [IED] -E9917 Injury due to war operations by fragments from other improvised explosive device [IED] -E9918 Injury due to war operations by fragments from weapons -E9919 Injury due to war operations from other and unspecified fragments -E9920 Injury due to torpedo -E9921 Injury due to depth charge -E9922 Injury due to marine mines -E9923 Injury due to sea-based artillery shell -E9928 Injury due to war operations by other marine weapons -E9929 Injury due to war operations by unspecified marine weapon -E9930 Injury due to war operations by aerial bomb -E9931 Injury due to war operations by guided missile -E9932 Injury due to war operations by mortar -E9933 Injury due to war operations by person-borne improvised explosive device [IED] -E9934 Injury due to war operations by vehicle-borne improvised explosive device [IED] -E9935 Injury due to war operations by other improvised explosive device [IED] -E9936 Injury due to war operations by unintentional detonation of own munitions -E9937 Injury due to war operations by unintentional discharge of own munitions launch device -E9938 Injury due to war operations by other specified explosion -E9939 Injury due to war operations by unspecified explosion -E9940 Injury due to war operations by destruction of aircraft due to enemy fire or explosives -E9941 Injury due to war operations by unintentional destruction of aircraft due to own onboard explosives -E9942 Injury due to war operations by destruction of aircraft due to collision with other aircraft -E9943 Injury due to war operations by destruction of aircraft due to onboard fire -E9948 Injury due to war operations by other destruction of aircraft -E9949 Injury due to war operations by unspecified destruction of aircraft -E9950 Injury due to war operations by unarmed hand-to-hand combat -E9951 Injury due to war operations, struck by blunt object -E9952 Injury due to war operations by piercing object -E9953 Injury due to war operations by intentional restriction of air and airway -E9954 Injury due to war operations by unintentional drowning due to inability to surface or obtain air -E9958 Injury due to war operations by other forms of conventional warfare -E9959 Injury due to war operations by unspecified form of conventional warfare -E9960 Injury due to war operations by direct blast effect of nuclear weapon -E9961 Injury due to war operations by indirect blast effect of nuclear weapon -E9962 Injury due to war operations by thermal radiation effect of nuclear weapon -E9963 Injury due to war operations by nuclear radiation effects -E9968 Injury due to war operations by other effects of nuclear weapons -E9969 Injury due to war operations by unspecified effect of nuclear weapon -E9970 Injury due to war operations by lasers -E9971 Injury due to war operations by biological warfare -E9972 Injury due to war operations by gases, fumes, and chemicals -E9973 Injury due to war operations by weapon of mass destruction [WMD], unspecified -E9978 Injury due to other specified forms of unconventional warfare -E9979 Injury due to unspecified form of unconventional warfare -E9980 Injury due to war operations but occurring after cessation of hostilities by explosion of mines -E9981 Injury due to war operations but occurring after cessation of hostilities by explosion of bombs -E9988 Injury due to other war operations but occurring after cessation of hostilities -E9989 Injury due to unspecified war operations but occurring after cessation of hostilities -E9990 Late effect of injury due to war operations -E9991 Late effect of injury due to terrorism -V010 Contact with or exposure to cholera -V011 Contact with or exposure to tuberculosis -V012 Contact with or exposure to poliomyelitis -V013 Contact with or exposure to smallpox -V014 Contact with or exposure to rubella -V015 Contact with or exposure to rabies -V016 Contact with or exposure to venereal diseases -V0171 Contact with or exposure to varicella -V0179 Contact with or exposure to other viral diseases -V0181 Contact with or exposure to anthrax -V0182 Exposure to SARS-associated coronavirus -V0183 Contact with or exposure to escherichia coli (E. coli) -V0184 Contact with or exposure to meningococcus -V0189 Contact with or exposure to other communicable diseases -V019 Contact with or exposure to unspecified communicable disease -V020 Carrier or suspected carrier of cholera -V021 Carrier or suspected carrier of typhoid -V022 Carrier or suspected carrier of amebiasis -V023 Carrier or suspected carrier of other gastrointestinal pathogens -V024 Carrier or suspected carrier of diphtheria -V0251 Carrier or suspected carrier of group B streptococcus -V0252 Carrier or suspected carrier of other streptococcus -V0253 Carrier or suspected carrier of Methicillin susceptible Staphylococcus aureus -V0254 Carrier or suspected carrier of Methicillin resistant Staphylococcus aureus -V0259 Carrier or suspected carrier of other specified bacterial diseases -V0260 Viral hepatitis carrier, unspecified -V0261 Hepatitis B carrier -V0262 Hepatitis C carrier -V0269 Other viral hepatitis carrier -V027 Carrier or suspected carrier of gonorrhea -V028 Carrier or suspected carrier of other venereal diseases -V029 Carrier or suspected carrier of other specified infectious organism -V030 Need for prophylactic vaccination and inoculation against cholera alone -V031 Need for prophylactic vaccination and inoculation against typhoid-paratyphoid alone [TAB] -V032 Need for prophylactic vaccination and inoculation against tuberculosis [BCG] -V033 Need for prophylactic vaccination and inoculation against plague -V034 Need for prophylactic vaccination and inoculation against tularemia -V035 Need for prophylactic vaccination and inoculation against diphtheria alone -V036 Need for prophylactic vaccination and inoculation against pertussis alone -V037 Need for prophylactic vaccination and inoculation against tetanus toxoid alone -V0381 Other specified vaccinations against hemophilus influenza, type B [Hib] -V0382 Other specified vaccinations against streptococcus pneumoniae [pneumococcus] -V0389 Other specified vaccination -V039 Need for prophylactic vaccination and inoculation against unspecified single bacterial disease -V040 Need for prophylactic vaccination and inoculation against poliomyelitis -V041 Need for prophylactic vaccination and inoculation against smallpox -V042 Need for prophylactic vaccination and inoculation against measles alone -V043 Need for prophylactic vaccination and inoculation against rubella alone -V044 Need for prophylactic vaccination and inoculation against yellow fever -V045 Need for prophylactic vaccination and inoculation against rabies -V046 Need for prophylactic vaccination and inoculation against mumps alone -V047 Need for prophylactic vaccination and inoculation against common cold -V0481 Need for prophylactic vaccination and inoculation against influenza -V0482 Need for prophylactic vaccination and inoculation against respiratory syncytial virus (RSV) -V0489 Need for prophylactic vaccination and inoculation against other viral diseases -V050 Need for prophylactic vaccination and inoculation against arthropod-borne viral encephalitis -V051 Need for prophylactic vaccination and inoculation against other arthropod-borne viral diseases -V052 Need for prophylactic vaccination and inoculation against leishmaniasis -V053 Need for prophylactic vaccination and inoculation against viral hepatitis -V054 Need for prophylactic vaccination and inoculation against varicella -V058 Need for prophylactic vaccination and inoculation against other specified disease -V059 Need for prophylactic vaccination and inoculation against unspecified single disease -V060 Need for prophylactic vaccination and inoculation against cholera with typhoid-paratyphoid [cholera + TAB] -V061 Need for prophylactic vaccination and inoculation against diphtheria-tetanus-pertussis, combined [DTP] [DTaP] -V062 Need for prophylactic vaccination and inoculation against diptheria-tetanus- pertussis with typhoid-paratyphoid (DTP + TAB) -V063 Need for prophylactic vaccination and inoculation against diptheria-tetanus- pertussis with poliomyelitis [DTP + polio] -V064 Need for prophylactic vaccination and inoculation against measles-mumps-rubella (MMR) -V065 Need for prophylactic vaccination and inoculation against tetanus-diphtheria [Td] (DT) -V066 Need for prophylactic vaccination and inoculation against streptococcus pneumoniae [pneumococcus] and influenza -V068 Need for prophylactic vaccination and inoculation against other combinations of diseases -V069 Unspecified combined vaccine -V070 Need for isolation -V071 Need for desensitization to allergens -V072 Need for prophylactic immunotherapy -V0731 Need for prophylactic fluoride administration -V0739 Need for other prophylactic chemotherapy -V074 Hormone replacement therapy (postmenopausal) -V0751 Use of selective estrogen receptor modulators (SERMs) -V0752 Use of aromatase inhibitors -V0759 Use of other agents affecting estrogen receptors and estrogen levels -V078 Other specified prophylactic or treatment measure -V079 Unspecified prophylactic or treatment measure -V08 Asymptomatic human immunodeficiency virus [HIV] infection status -V090 Infection with microorganisms resistant to penicillins -V091 Infection with microorganisms resistant to cephalosporins and other B-lactam antibiotics -V092 Infection with microorganisms resistant to macrolides -V093 Infection with microorganisms resistant to tetracyclines -V094 Infection with microorganisms resistant to aminoglycosides -V0950 Infection with microorganisms without mention of resistance to multiple quinolones and fluroquinolones -V0951 Infection with microorganisms with resistance to multiple quinolones and fluroquinolones -V096 Infection with microorganisms resistant to sulfonamides -V0970 Infection with microorganisms without mention of resistance to multiple antimycobacterial agents -V0971 Infection with microorganisms with resistance to multiple antimycobacterial agents -V0980 Infection with microorganisms without mention of resistance to multiple drugs -V0981 Infection with microorganisms with resistance to multiple drugs -V0990 Infection with drug-resistant microorganisms, unspecified, without mention of multiple drug resistance -V0991 Infection with drug-resistant microorganisms, unspecified, with multiple drug resistance -V1000 Personal history of malignant neoplasm of gastrointestinal tract, unspecified -V1001 Personal history of malignant neoplasm of tongue -V1002 Personal history of malignant neoplasm of other and unspecified oral cavity and pharynx -V1003 Personal history of malignant neoplasm of esophagus -V1004 Personal history of malignant neoplasm of stomach -V1005 Personal history of malignant neoplasm of large intestine -V1006 Personal history of malignant neoplasm of rectum, rectosigmoid junction, and anus -V1007 Personal history of malignant neoplasm of liver -V1009 Personal history of malignant neoplasm of other gastrointestinal tract -V1011 Personal history of malignant neoplasm of bronchus and lung -V1012 Personal history of malignant neoplasm of trachea -V1020 Personal history of malignant neoplasm of respiratory organ, unspecified -V1021 Personal history of malignant neoplasm of larynx -V1022 Personal history of malignant neoplasm of nasal cavities, middle ear, and accessory sinuses -V1029 Personal history of malignant neoplasm of other respiratory and intrathoracic organs -V103 Personal history of malignant neoplasm of breast -V1040 Personal history of malignant neoplasm of female genital organ, unspecified -V1041 Personal history of malignant neoplasm of cervix uteri -V1042 Personal history of malignant neoplasm of other parts of uterus -V1043 Personal history of malignant neoplasm of ovary -V1044 Personal history of malignant neoplasm of other female genital organs -V1045 Personal history of malignant neoplasm of male genital organ, unspecified -V1046 Personal history of malignant neoplasm of prostate -V1047 Personal history of malignant neoplasm of testis -V1048 Personal history of malignant neoplasm of epididymis -V1049 Personal history of malignant neoplasm of other male genital organs -V1050 Personal history of malignant neoplasm of urinary organ, unspecified -V1051 Personal history of malignant neoplasm of bladder -V1052 Personal history of malignant neoplasm of kidney -V1053 Personal history of malignant neoplasm of renal pelvis -V1059 Personal history of malignant neoplasm of other urinary organs -V1060 Personal history of leukemia, unspecified -V1061 Personal history of lymphoid leukemia -V1062 Personal history of myeloid leukemia -V1063 Personal history of monocytic leukemia -V1069 Personal history of other leukemia -V1071 Personal history of lymphosarcoma and reticulosarcoma -V1072 Personal history of hodgkin's disease -V1079 Personal history of other lymphatic and hematopoietic neoplasms -V1081 Personal history of malignant neoplasm of bone -V1082 Personal history of malignant melanoma of skin -V1083 Personal history of other malignant neoplasm of skin -V1084 Personal history of malignant neoplasm of eye -V1085 Personal history of malignant neoplasm of brain -V1086 Personal history of malignant neoplasm of other parts of nervous system -V1087 Personal history of malignant neoplasm of thyroid -V1088 Personal history of malignant neoplasm of other endocrine glands and related structures -V1089 Personal history of malignant neoplasm of other sites -V1090 Personal history of unspecified malignant neoplasm -V1091 Personal history of malignant neuroendocrine tumor -V110 Personal history of schizophrenia -V111 Personal history of affective disorders -V112 Personal history of neurosis -V113 Personal history of alcoholism -V114 Personal history of combat and operational stress reaction -V118 Personal history of other mental disorders -V119 Personal history of unspecified mental disorder -V1200 Personal history of unspecified infectious and parasitic disease -V1201 Personal history of tuberculosis -V1202 Personal history of poliomyelitis -V1203 Personal history of malaria -V1204 Personal history of Methicillin resistant Staphylococcus aureus -V1209 Personal history of other infectious and parasitic diseases -V121 Personal history of nutritional deficiency -V1221 Personal history of gestational diabetes -V1229 Personal history of other endocrine, metabolic, and immunity disorders -V123 Personal history of diseases of blood and blood-forming organs -V1240 Personal history of unspecified disorder of nervous system and sense organs -V1241 Personal history of benign neoplasm of the brain -V1242 Personal history of infections of the central nervous system -V1249 Personal history of other disorders of nervous system and sense organs -V1250 Personal history of unspecified circulatory disease -V1251 Personal history of venous thrombosis and embolism -V1252 Personal history of thrombophlebitis -V1253 Personal history of sudden cardiac arrest -V1254 Personal history of transient ischemic attack (TIA), and cerebral infarction without residual deficits -V1255 Personal history of pulmonary embolism -V1259 Personal history of other diseases of circulatory system -V1260 Personal history of unspecified disease of respiratory system -V1261 Personal history of pneumonia (recurrent) -V1269 Personal history of other diseases of respiratory system -V1270 Personal history of unspecified digestive disease -V1271 Personal history of peptic ulcer disease -V1272 Personal history of colonic polyps -V1279 Personal history of other diseases of digestive system -V1300 Personal history of unspecified urinary disorder -V1301 Personal history of urinary calculi -V1302 Personal history, urinary (tract) infection -V1303 Personal history, nephrotic syndrome -V1309 Personal history of other specified urinary system disorders -V131 Personal history of trophoblastic disease -V1321 Personal history of pre-term labor -V1322 Personal history of cervical dysplasia -V1323 Personal history of vaginal dysplasia -V1324 Personal history of vulvar dysplasia -V1329 Personal history of other genital system and obstetric disorders -V133 Personal history of diseases of skin and subcutaneous tissue -V134 Personal history of arthritis -V1351 Personal history of pathologic fracture -V1352 Personal history of stress fracture -V1359 Personal history of other musculoskeletal disorders -V1361 Personal history of (corrected) hypospadias -V1362 Personal history of other (corrected) congenital malformations of genitourinary system -V1363 Personal history of (corrected) congenital malformations of nervous system -V1364 Personal history of (corrected) congenital malformations of eye, ear, face and neck -V1365 Personal history of (corrected) congenital malformations of heart and circulatory system -V1366 Personal history of (corrected) congenital malformations of respiratory system -V1367 Personal history of (corrected) congenital malformations of digestive system -V1368 Personal history of (corrected) congenital malformations of integument, limbs, and musculoskeletal systems -V1369 Personal history of other (corrected) congenital malformations -V137 Personal history of perinatal problems -V1381 Personal history of anaphylaxis -V1389 Personal history of other specified diseases -V139 Personal history of unspecified disease -V140 Personal history of allergy to penicillin -V141 Personal history of allergy to other antibiotic agent -V142 Personal history of allergy to sulfonamides -V143 Personal history of allergy to other anti-infective agent -V144 Personal history of allergy to anesthetic agent -V145 Personal history of allergy to narcotic agent -V146 Personal history of allergy to analgesic agent -V147 Personal history of allergy to serum or vaccine -V148 Personal history of allergy to other specified medicinal agents -V149 Personal history of allergy to unspecified medicinal agent -V1501 Allergy to peanuts -V1502 Allergy to milk products -V1503 Allergy to eggs -V1504 Allergy to seafood -V1505 Allergy to other foods -V1506 Allergy to insects and arachnids -V1507 Allergy to latex -V1508 Allergy to radiographic dye -V1509 Other allergy, other than to medicinal agents -V151 Personal history of surgery to heart and great vessels, presenting hazards to health -V1521 Personal history of undergoing in utero procedure during pregnancy -V1522 Personal history of undergoing in utero procedure while a fetus -V1529 Personal history of surgery to other organs -V153 Personal history of irradiation, presenting hazards to health -V1541 History of physical abuse -V1542 History of emotional abuse -V1549 Other psychological trauma -V1551 Personal history of traumatic fracture -V1552 Personal history of traumatic brain injury -V1553 Personal history of retained foreign body fully removed -V1559 Personal history of other injury -V156 Personal history of poisoning, presenting hazards to health -V157 Personal history of contraception, presenting hazards to health -V1580 Personal history of failed moderate sedation -V1581 Personal history of noncompliance with medical treatment, presenting hazards to health -V1582 Personal history of tobacco use -V1583 Personal history of underimmunization status -V1584 Personal history of contact with and (suspected) exposure to asbestos -V1585 Personal history of contact with and (suspected) exposure to potentially hazardous body fluids -V1586 Personal history of contact with and (suspected) exposure to lead -V1587 History of extracorporeal membrane oxygenation (ECMO) -V1588 History of fall -V1589 Other specified personal history presenting hazards to health -V159 Unspecified personal history presenting hazards to health -V160 Family history of malignant neoplasm of gastrointestinal tract -V161 Family history of malignant neoplasm of trachea, bronchus, and lung -V162 Family history of malignant neoplasm of other respiratory and intrathoracic organs -V163 Family history of malignant neoplasm of breast -V1640 Family history of malignant neoplasm of genital organ, unspecified -V1641 Family history of malignant neoplasm of ovary -V1642 Family history of malignant neoplasm of prostate -V1643 Family history of malignant neoplasm of testis -V1649 Family history of malignant neoplasm of other genital organs -V1651 Family history of malignant neoplasm of kidney -V1652 Family history of malignant neoplasm, bladder -V1659 Family history of malignant neoplasm of other urinary organs -V166 Family history of leukemia -V167 Family history of other lymphatic and hematopoietic neoplasms -V168 Family history of other specified malignant neoplasm -V169 Family history of unspecified malignant neoplasm -V170 Family history of psychiatric condition -V171 Family history of stroke (cerebrovascular) -V172 Family history of other neurological diseases -V173 Family history of ischemic heart disease -V1741 Family history of sudden cardiac death (SCD) -V1749 Family history of other cardiovascular diseases -V175 Family history of asthma -V176 Family history of other chronic respiratory conditions -V177 Family history of arthritis -V1781 Family history of osteoporosis -V1789 Family history of other musculoskeletal diseases -V180 Family history of diabetes mellitus -V1811 Family history of multiple endocrine neoplasia [MEN] syndrome -V1819 Family history of other endocrine and metabolic diseases -V182 Family history of anemia -V183 Family history of other blood disorders -V184 Family history of intellectual disabilities -V1851 Family history of colonic polyps -V1859 Family history of other digestive disorders -V1861 Family history of polycystic kidney -V1869 Family history of other kidney diseases -V187 Family history of other genitourinary diseases -V188 Family history of infectious and parasitic diseases -V189 Family history of genetic disease carrier -V190 Family history of blindness or visual loss -V1911 Family history of glaucoma -V1919 Family history of other specified eye disorder -V192 Family history of deafness or hearing loss -V193 Family history of other ear disorders -V194 Family history of skin conditions -V195 Family history of congenital anomalies -V196 Family history of allergic disorders -V197 Family history of consanguinity -V198 Family history of other condition -V200 Health supervision of foundling -V201 Other healthy infant or child receiving care -V202 Routine infant or child health check -V2031 Health supervision for newborn under 8 days old -V2032 Health supervision for newborn 8 to 28 days old -V210 Period of rapid growth in childhood -V211 Puberty -V212 Other development of adolescence -V2130 Low birth weight status, unspecified -V2131 Low birth weight status, less than 500 grams -V2132 Low birth weight status, 500-999 grams -V2133 Low birth weight status, 1000-1499 grams -V2134 Low birth weight status, 1500-1999 grams -V2135 Low birth weight status, 2000-2500 grams -V218 Other specified constitutional states in development -V219 Unspecified constitutional state in development -V220 Supervision of normal first pregnancy -V221 Supervision of other normal pregnancy -V222 Pregnant state, incidental -V230 Supervision of high-risk pregnancy with history of infertility -V231 Supervision of high-risk pregnancy with history of trophoblastic disease -V232 Supervision of high-risk pregnancy with history of abortion -V233 Supervision of high-risk pregnancy with grand multiparity -V2341 Pregnancy with history of pre-term labor -V2342 Pregnancy with history of ectopic pregnancy -V2349 Pregnancy with other poor obstetric history -V235 Supervision of high-risk pregnancy with other poor reproductive history -V237 Supervision of high-risk pregnancy with insufficient prenatal care -V2381 Supervision of high-risk pregnancy with elderly primigravida -V2382 Supervision of high-risk pregnancy with elderly multigravida -V2383 Supervision of high-risk pregnancy with young primigravida -V2384 Supervision of high-risk pregnancy with young multigravida -V2385 Pregnancy resulting from assisted reproductive technology -V2386 Pregnancy with history of in utero procedure during previous pregnancy -V2387 Pregnancy with inconclusive fetal viability -V2389 Supervision of other high-risk pregnancy -V239 Supervision of unspecified high-risk pregnancy -V240 Postpartum care and examination immediately after delivery -V241 Postpartum care and examination of lactating mother -V242 Routine postpartum follow-up -V2501 General counseling on prescription of oral contraceptives -V2502 General counseling on initiation of other contraceptive measures -V2503 Encounter for emergency contraceptive counseling and prescription -V2504 Counseling and instruction in natural family planning to avoid pregnancy -V2509 Other general counseling and advice on contraceptive management -V2511 Encounter for insertion of intrauterine contraceptive device -V2512 Encounter for removal of intrauterine contraceptive device -V2513 Encounter for removal and reinsertion of intrauterine contraceptive device -V252 Sterilization -V253 Menstrual extraction -V2540 Contraceptive surveillance, unspecified -V2541 Surveillance of contraceptive pill -V2542 Surveillance of intrauterine contraceptive device -V2543 Surveillance of implantable subdermal contraceptive -V2549 Surveillance of other contraceptive method -V255 Insertion of implantable subdermal contraceptive -V258 Other specified contraceptive management -V259 Unspecified contraceptive management -V260 Tuboplasty or vasoplasty after previous sterilization -V261 Artificial insemination -V2621 Fertility testing -V2622 Aftercare following sterilization reversal -V2629 Other investigation and testing -V2631 Testing of female for genetic disease carrier status -V2632 Other genetic testing of female -V2633 Genetic counseling -V2634 Testing of male for genetic disease carrier status -V2635 Encounter for testing of male partner of female with recurrent pregnancy loss -V2639 Other genetic testing of male -V2641 Procreative counseling and advice using natural family planning -V2642 Encounter for fertility preservation counseling -V2649 Other procreative management counseling and advice -V2651 Tubal ligation status -V2652 Vasectomy status -V2681 Encounter for assisted reproductive fertility procedure cycle -V2682 Encounter for fertility preservation procedure -V2689 Other specified procreative management -V269 Unspecified procreative management -V270 Outcome of delivery, single liveborn -V271 Outcome of delivery, single stillborn -V272 Outcome of delivery, twins, both liveborn -V273 Outcome of delivery, twins, one liveborn and one stillborn -V274 Outcome of delivery, twins, both stillborn -V275 Outcome of delivery, other multiple birth, all liveborn -V276 Outcome of delivery, other multiple birth, some liveborn -V277 Outcome of delivery, other multiple birth, all stillborn -V279 Outcome of delivery, unspecified outcome of delivery -V280 Antenatal screening for chromosomal anomalies by amniocentesis -V281 Antenatal screening for raised alpha-fetoprotein levels in amniotic fluid -V282 Other antenatal screening based on amniocentesis -V283 Encounter for routine screening for malformation using ultrasonics -V284 Antenatal screening for fetal growth retardation using ultrasonics -V285 Antenatal screening for isoimmunization -V286 Antenatal screening for Streptococcus B -V2881 Encounter for fetal anatomic survey -V2882 Encounter for screening for risk of pre-term labor -V2889 Other specified antenatal screening -V289 Unspecified antenatal screening -V290 Observation for suspected infectious condition -V291 Observation for suspected neurological conditions -V292 Observation and evaluation of newborn for suspected respiratory condition -V293 Observation for suspected genetic or metabolic condition -V298 Observation for other specified suspected conditions -V299 Observation for unspecified suspected conditions -V3000 Single liveborn, born in hospital, delivered without mention of cesarean section -V3001 Single liveborn, born in hospital, delivered by cesarean section -V301 Single liveborn, born before admission to hospital -V302 Single liveborn, born outside hospital and not hospitalized -V3100 Twin birth, mate liveborn, born in hospital, delivered without mention of cesarean section -V3101 Twin birth, mate liveborn, born in hospital, delivered by cesarean section -V311 Twin birth, mate liveborn, born before admission to hospital -V312 Twin birth, mate liveborn, born outside hospital and not hospitalized -V3200 Twin birth, mate stillborn, born in hospital, delivered without mention of cesarean section -V3201 Twin birth, mate stillborn, born in hospital, delivered by cesarean section -V321 Twin birth, mate stillborn, born before admission to hospital -V322 Twin birth, mate stillborn, born outside hospital and not hospitalized -V3300 Twin birth, unspecified whether mate liveborn or stillborn, born in hospital, delivered without mention of cesarean section -V3301 Twin birth, unspecified whether mate liveborn or stillborn, born in hospital, delivered by cesarean section -V331 Twin birth, unspecified whether mate liveborn or stillborn, born before admission to hospital -V332 Twin birth, unspecified whether mate liveborn or stillborn, born outside hospital and not hospitalized -V3400 Other multiple birth (three or more), mates all liveborn, born in hospital, delivered without mention of cesarean section -V3401 Other multiple birth (three or more), mates all liveborn, born in hospital, delivered by cesarean section -V341 Other multiple birth (three or more), mates all liveborn, born before admission to hospital -V342 Other multiple birth (three or more), mates all liveborn, born outside hospital and not hospitalized -V3500 Other multiple birth (three or more), mates all still born, born in hospital, delivered without mention of cesarean section -V3501 Other multiple birth (three or more), mates all still born, born in hospital, delivered by cesarean section -V351 Other multiple birth (three or more), mates all stillborn, born before admission to hospital -V352 Other multiple birth (three or more), mates all stillborn, born outside of hospital and not hospitalized -V3600 Other multiple birth (three or more), mates liveborn and stillborn, born in hospital, delivered without mention of cesarean section -V3601 Other multiple birth (three or more), mates liveborn and stillborn, born in hospital, delivered without mention of cesarean section -V361 Other multiple birth (three or more), mates liveborn and stillborn, born before admission to hospital -V362 Other multiple birth (three or more), mates liveborn and stillborn, born outside hospital and not hospitalized -V3700 Other multiple birth (three or more), unspecified whether mates liveborn or stillborn, born in hospital, delivered without mention of cesarean section -V3701 Other multiple birth (three or more), unspecified whether mates liveborn or stillborn, born in hospital, delivered by cesarean section -V371 Other multiple birth (three or more), unspecified whether mates liveborn or stillborn, born before admission to hospital -V372 Other multiple birth (three or more), unspecified whether mates liveborn or stillborn, born outside of hospital -V3900 Liveborn, unspecified whether single, twin or multiple, born in hospital, delivered without mention of cesarean section -V3901 Liveborn, unspecified whether single, twin or multiple, born in hospital, delivered by cesarean section -V391 Liveborn, unspecified whether single, twin or multiple, born before admission to hospital -V392 Liveborn, unspecified whether single, twin or multiple, born outside hospital and not hospitalized -V400 Mental and behavioral problems with learning -V401 Mental and behavioral problems with communication [including speech] -V402 Other mental problems -V4031 Wandering in diseases classified elsewhere -V4039 Other specified behavioral problem -V409 Unspecified mental or behavioral problem -V410 Problems with sight -V411 Other eye problems -V412 Problems with hearing -V413 Other ear problems -V414 Problems with voice production -V415 Problems with smell and taste -V416 Problems with swallowing and mastication -V417 Problems with sexual function -V418 Other problems with special functions -V419 Unspecified problem with special functions -V420 Kidney replaced by transplant -V421 Heart replaced by transplant -V422 Heart valve replaced by transplant -V423 Skin replaced by transplant -V424 Bone replaced by transplant -V425 Cornea replaced by transplant -V426 Lung replaced by transplant -V427 Liver replaced by transplant -V4281 Bone marrow replaced by transplant -V4282 Peripheral stem cells replaced by transplant -V4283 Pancreas replaced by transplant -V4284 Organ or tissue replaced by transplant, intestines -V4289 Other specified organ or tissue replaced by transplant -V429 Unspecified organ or tissue replaced by transplant -V430 Eye globe replaced by other means -V431 Lens replaced by other means -V4321 Organ or tissue replaced by other means, heart assist device -V4322 Organ or tissue replaced by other means, fully implantable artificial heart -V433 Heart valve replaced by other means -V434 Blood vessel replaced by other means -V435 Bladder replaced by other means -V4360 Unspecified joint replacement -V4361 Shoulder joint replacement -V4362 Elbow joint replacement -V4363 Wrist joint replacement -V4364 Hip joint replacement -V4365 Knee joint replacement -V4366 Ankle joint replacement -V4369 Other joint replacement -V437 Limb replaced by other means -V4381 Larynx replacement -V4382 Breast replacement -V4383 Artificial skin replacement -V4389 Other organ or tissue replaced by other means -V440 Tracheostomy status -V441 Gastrostomy status -V442 Ileostomy status -V443 Colostomy status -V444 Status of other artificial opening of gastrointestinal tract -V4450 Cystostomy, unspecified -V4451 Cutaneous-vesicostomy -V4452 Appendico-vesicostomy -V4459 Other cystostomy -V446 Other artificial opening of urinary tract status -V447 Artificial vagina status -V448 Other artificial opening status -V449 Unspecified artificial opening status -V4500 Unspecified cardiac device in situ -V4501 Cardiac pacemaker in situ -V4502 Automatic implantable cardiac defibrillator in situ -V4509 Other specified cardiac device in situ -V4511 Renal dialysis status -V4512 Noncompliance with renal dialysis -V452 Presence of cerebrospinal fluid drainage device -V453 Intestinal bypass or anastomosis status -V454 Arthrodesis status -V4551 Presence of intrauterine contraceptive device -V4552 Presence of subdermal contraceptive implant -V4559 Presence of other contraceptive device -V4561 Cataract extraction status -V4569 Other states following surgery of eye and adnexa -V4571 Acquired absence of breast and nipple -V4572 Acquired absence of intestine (large) (small) -V4573 Acquired absence of kidney -V4574 Acquired absence of organ, other parts of urinary tract -V4575 Acquired absence of organ, stomach -V4576 Acquired absence of organ, lung -V4577 Acquired absence of organ, genital organs -V4578 Acquired absence of organ, eye -V4579 Other acquired absence of organ -V4581 Aortocoronary bypass status -V4582 Percutaneous transluminal coronary angioplasty status -V4583 Breast implant removal status -V4584 Dental restoration status -V4585 Insulin pump status -V4586 Bariatric surgery status -V4587 Transplanted organ removal status -V4588 Status post administration of tPA (rtPA) in a different facility within the last 24 hours prior to admission to current facility -V4589 Other postprocedural status -V460 Dependence on aspirator -V4611 Dependence on respirator, status -V4612 Encounter for respirator dependence during power failure -V4613 Encounter for weaning from respirator [ventilator] -V4614 Mechanical complication of respirator [ventilator] -V462 Other dependence on machines, supplemental oxygen -V463 Wheelchair dependence -V468 Dependence on other enabling machines -V469 Unspecified machine dependence -V470 Deficiencies of internal organs -V471 Mechanical and motor problems with internal organs -V472 Other cardiorespiratory problems -V473 Other digestive problems -V474 Other urinary problems -V475 Other genital problems -V479 Unspecified problems with internal organs -V480 Deficiencies of head -V481 Deficiencies of neck and trunk -V482 Mechanical and motor problems with head -V483 Mechanical and motor problems with neck and trunk -V484 Sensory problem with head -V485 Sensory problem with neck and trunk -V486 Disfigurements of head -V487 Disfigurements of neck and trunk -V488 Other problems with head, neck, and trunk -V489 Unspecified problem with head, neck, or trunk -V490 Deficiencies of limbs -V491 Mechanical problems with limbs -V492 Motor problems with limbs -V493 Sensory problems with limbs -V494 Disfigurements of limbs -V495 Other problems of limbs -V4960 Unspecified level upper limb amputation status -V4961 Thumb amputation status -V4962 Other finger(s) amputation status -V4963 Hand amputation status -V4964 Wrist amputation status -V4965 Below elbow amputation status -V4966 Above elbow amputation status -V4967 Shoulder amputation status -V4970 Unspecified level lower limb amputation status -V4971 Great toe amputation status -V4972 Other toe(s) amputation status -V4973 Foot amputation status -V4974 Ankle amputation status -V4975 Below knee amputation status -V4976 Above knee amputation status -V4977 Hip amputation status -V4981 Asymptomatic postmenopausal status (age-related) (natural) -V4982 Dental sealant status -V4983 Awaiting organ transplant status -V4984 Bed confinement status -V4985 Dual sensory impairment -V4986 Do not resuscitate status -V4987 Physical restraints status -V4989 Other specified conditions influencing health status -V499 Unspecified problems with limbs and other problems -V500 Elective hair transplant for purposes other than remedying health states -V501 Other plastic surgery for unacceptable cosmetic appearance -V502 Routine or ritual circumcision -V503 Ear piercing -V5041 Prophylactic breast removal -V5042 Prophylactic ovary removal -V5049 Other prophylactic gland removal -V508 Other elective surgery for purposes other than remedying health states -V509 Unspecified elective surgery for purposes other than remedying health states -V510 Encounter for breast reconstruction following mastectomy -V518 Other aftercare involving the use of plastic surgery -V520 Fitting and adjustment of artificial arm (complete) (partial) -V521 Fitting and adjustment of artificial leg (complete) (partial) -V522 Fitting and adjustment of artificial eye -V523 Fitting and adjustment of dental prosthetic device -V524 Fitting and adjustment of breast prosthesis and implant -V528 Fitting and adjustment of other specified prosthetic device -V529 Fitting and adjustment of unspecified prosthetic device -V5301 Fitting and adjustment of cerebral ventricular (communicating) shunt -V5302 Fitting and adjustment of neuropacemaker (brain) (peripheral nerve) (spinal cord) -V5309 Fitting and adjustment of other devices related to nervous system and special senses -V531 Fitting and adjustment of spectacles and contact lenses -V532 Fitting and adjustment of hearing aid -V5331 Fitting and adjustment of cardiac pacemaker -V5332 Fitting and adjustment of automatic implantable cardiac defibrillator -V5339 Fitting and adjustment of other cardiac device -V534 Fitting and adjustment of orthodontic devices -V5350 Fitting and adjustment of intestinal appliance and device -V5351 Fitting and adjustment of gastric lap band -V5359 Fitting and adjustment of other gastrointestinal appliance and device -V536 Fitting and adjustment of urinary devices -V537 Fitting and adjustment of orthopedic devices -V538 Fitting and adjustment of wheelchair -V5390 Fitting and adjustment, unspecified device -V5391 Fitting and adjustment of insulin pump -V5399 Fitting and adjustment, other device -V5401 Encounter for removal of internal fixation device -V5402 Encounter for lengthening/adjustment of growth rod -V5409 Other aftercare involving internal fixation device -V5410 Aftercare for healing traumatic fracture of arm, unspecified -V5411 Aftercare for healing traumatic fracture of upper arm -V5412 Aftercare for healing traumatic fracture of lower arm -V5413 Aftercare for healing traumatic fracture of hip -V5414 Aftercare for healing traumatic fracture of leg, unspecified -V5415 Aftercare for healing traumatic fracture of upper leg -V5416 Aftercare for healing traumatic fracture of lower leg -V5417 Aftercare for healing traumatic fracture of vertebrae -V5419 Aftercare for healing traumatic fracture of other bone -V5420 Aftercare for healing pathologic fracture of arm, unspecified -V5421 Aftercare for healing pathologic fracture of upper arm -V5422 Aftercare for healing pathologic fracture of lower arm -V5423 Aftercare for healing pathologic fracture of hip -V5424 Aftercare for healing pathologic fracture of leg, unspecified -V5425 Aftercare for healing pathologic fracture of upper leg -V5426 Aftercare for healing pathologic fracture of lower leg -V5427 Aftercare for healing pathologic fracture of vertebrae -V5429 Aftercare for healing pathologic fracture of other bone -V5481 Aftercare following joint replacement -V5482 Aftercare following explantation of joint prosthesis -V5489 Other orthopedic aftercare -V549 Unspecified orthopedic aftercare -V550 Attention to tracheostomy -V551 Attention to gastrostomy -V552 Attention to ileostomy -V553 Attention to colostomy -V554 Attention to other artificial opening of digestive tract -V555 Attention to cystostomy -V556 Attention to other artificial opening of urinary tract -V557 Attention to artificial vagina -V558 Attention to other specified artificial opening -V559 Attention to unspecified artificial opening -V560 Encounter for extracorporeal dialysis -V561 Fitting and adjustment of extracorporeal dialysis catheter -V562 Fitting and adjustment of peritoneal dialysis catheter -V5631 Encounter for adequacy testing for hemodialysis -V5632 Encounter for adequacy testing for peritoneal dialysis -V568 Encounter for other dialysis -V570 Care involving breathing exercises -V571 Care involving other physical therapy -V5721 Encounter for occupational therapy -V5722 Encounter for vocational therapy -V573 Care involving speech-language therapy -V574 Care involving orthoptic training -V5781 Care involving orthotic training -V5789 Care involving other specified rehabilitation procedure -V579 Care involving unspecified rehabilitation procedure -V580 Encounter for radiotherapy -V5811 Encounter for antineoplastic chemotherapy -V5812 Encounter for antineoplastic immunotherapy -V582 Blood transfusion, without reported diagnosis -V5830 Encounter for change or removal of nonsurgical wound dressing -V5831 Encounter for change or removal of surgical wound dressing -V5832 Encounter for removal of sutures -V5841 Encounter for planned post-operative wound closure -V5842 Aftercare following surgery for neoplasm -V5843 Aftercare following surgery for injury and trauma -V5844 Aftercare following organ transplant -V5849 Other specified aftercare following surgery -V585 Orthodontics aftercare -V5861 Long-term (current) use of anticoagulants -V5862 Long-term (current) use of antibiotics -V5863 Long-term (current) use of antiplatelet/antithrombotic -V5864 Long-term (current) use of non-steroidal anti-inflammatories (NSAID) -V5865 Long-term (current) use of steroids -V5866 Long-term (current) use of aspirin -V5867 Long-term (current) use of insulin -V5868 Long term (current) use of bisphosphonates -V5869 Long-term (current) use of other medications -V5871 Aftercare following surgery of the sense organs, NEC -V5872 Aftercare following surgery of the nervous system, NEC -V5873 Aftercare following surgery of the circulatory system, NEC -V5874 Aftercare following surgery of the respiratory system, NEC -V5875 Aftercare following surgery of the teeth, oral cavity and digestive system, NEC -V5876 Aftercare following surgery of the genitourinary system, NEC -V5877 Aftercare following surgery of the skin and subcutaneous tissue, NEC -V5878 Aftercare following surgery of the musculoskeletal system, NEC -V5881 Fitting and adjustment of vascular catheter -V5882 Fitting and adjustment of nonvascular catheter, NEC -V5883 Encounter for therapeutic drug monitoring -V5889 Other specified aftercare -V589 Unspecified aftercare -V5901 Blood donors, whole blood -V5902 Blood donors, stem cells -V5909 Other blood donors -V591 Skin donors -V592 Bone donors -V593 Bone marrow donors -V594 Kidney donors -V595 Cornea donors -V596 Liver donors -V5970 Egg (oocyte) (ovum) donor, unspecified -V5971 Egg (oocyte) (ovum) donor, under age 35, anonymous recipient -V5972 Egg (oocyte) (ovum) donor, under age 35, designated recipient -V5973 Egg (oocyte) (ovum) donor, age 35 and over, anonymous recipient -V5974 Egg (oocyte) (ovum) donor, age 35 and over, designated recipient -V598 Donors of other specified organ or tissue -V599 Donors of unspecified organ or tissue -V600 Lack of housing -V601 Inadequate housing -V602 Inadequate material resources -V603 Person living alone -V604 No other household member able to render care -V605 Holiday relief care -V606 Person living in residential institution -V6081 Foster care (status) -V6089 Other specified housing or economic circumstances -V609 Unspecified housing or economic circumstance -V6101 Family disruption due to family member on military deployment -V6102 Family disruption due to return of family member from military deployment -V6103 Family disruption due to divorce or legal separation -V6104 Family disruption due to parent-child estrangement -V6105 Family disruption due to child in welfare custody -V6106 Family disruption due to child in foster care or in care of non-parental family member -V6107 Family disruption due to death of family member -V6108 Family disruption due to other extended absence of family member -V6109 Other family disruption -V6110 Counseling for marital and partner problems, unspecified -V6111 Counseling for victim of spousal and partner abuse -V6112 Counseling for perpetrator of spousal and partner abuse -V6120 Counseling for parent-child problem, unspecified -V6121 Counseling for victim of child abuse -V6122 Counseling for perpetrator of spousal and partner abuse -V6123 Counseling for parent-biological child problem -V6124 Counseling for parent-adopted child problem -V6125 Counseling for parent (guardian)-foster child problem -V6129 Other parent-child problems -V613 Problems with aged parents or in-laws -V6141 Alcoholism in family -V6142 Substance abuse in family -V6149 Other health problems within the family -V615 Multiparity -V616 Illegitimacy or illegitimate pregnancy -V617 Other unwanted pregnancy -V618 Other specified family circumstances -V619 Unspecified family circumstance -V620 Unemployment -V621 Adverse effects of work environment -V6221 Personal current military deployment status -V6222 Personal history of return from military deployment -V6229 Other occupational circumstances or maladjustment -V623 Educational circumstances -V624 Social maladjustment -V625 Legal circumstances -V626 Refusal of treatment for reasons of religion or conscience -V6281 Interpersonal problems, not elsewhere classified -V6282 Bereavement, uncomplicated -V6283 Counseling for perpetrator of physical/sexual abuse -V6284 Suicidal ideation -V6285 Homicidal ideation -V6289 Other psychological or physical stress, not elsewhere classified -V629 Unspecified psychosocial circumstance -V630 Residence remote from hospital or other health care facility -V631 Medical services in home not available -V632 Person awaiting admission to adequate facility elsewhere -V638 Other specified reasons for unavailability of medical facilities -V639 Unspecified reason for unavailability of medical facilities -V6400 Vaccination not carried out, unspecified reason -V6401 Vaccination not carried out because of acute illness -V6402 Vaccination not carried out because of chronic illness or condition -V6403 Vaccination not carried out because of immune compromised state -V6404 Vaccination not carried out because of allergy to vaccine or component -V6405 Vaccination not carried out because of caregiver refusal -V6406 Vaccination not carried out because of patient refusal -V6407 Vaccination not carried out for religious reasons -V6408 Vaccination not carried out because patient had disease being vaccinated against -V6409 Vaccination not carried out for other reason -V641 Surgical or other procedure not carried out because of contraindication -V642 Surgical or other procedure not carried out because of patient's decision -V643 Procedure not carried out for other reasons -V6441 Laparoscopic surgical procedure converted to open procedure -V6442 Thoracoscopic surgical procedure converted to open procedure -V6443 Arthroscopic surgical procedure converted to open procedure -V650 Healthy person accompanying sick person -V6511 Pediatric pre-birth visit for expectant parent(s) -V6519 Other person consulting on behalf of another person -V652 Person feigning illness -V653 Dietary surveillance and counseling -V6540 Counseling NOS -V6541 Exercise counseling -V6542 Counseling on substance use and abuse -V6543 Counseling on injury prevention -V6544 Human immunodeficiency virus (HIV) counseling -V6545 Counseling on other sexually transmitted diseases -V6546 Encounter for insulin pump training -V6549 Other specified counseling -V655 Person with feared complaint in whom no diagnosis was made -V658 Other reasons for seeking consultation -V659 Unspecified reason for consultation -V660 Convalescence following surgery -V661 Convalescence following radiotherapy -V662 Convalescence following chemotherapy -V663 Convalescence following psychotherapy and other treatment for mental disorder -V664 Convalescence following treatment of fracture -V665 Convalescence following other treatment -V666 Convalescence following combined treatment -V667 Encounter for palliative care -V669 Unspecified convalescence -V6700 Follow-up examination, following surgery, unspecified -V6701 Following surgery, follow-up vaginal pap smear -V6709 Follow-up examination, following other surgery -V671 Follow-up examination, following radiotherapy -V672 Follow-up examination, following chemotherapy -V673 Follow-up examination, following psychotherapy and other treatment for mental disorder -V674 Follow-up examination, following treatment of healed fracture -V6751 Follow-up examination, following completed treatment with high-risk medication, not elsewhere classified -V6759 Other follow-up examination -V676 Follow-up examination, following combined treatment -V679 Unspecified follow-up examination -V6801 Disability examination -V6809 Other issue of medical certificates -V681 Issue of repeat prescriptions -V682 Request for expert evidence -V6881 Referral of patient without examination or treatment -V6889 Encounters for other specified administrative purpose -V689 Encounters for unspecified administrative purpose -V690 Lack of physical exercise -V691 Inappropriate diet and eating habits -V692 High-risk sexual behavior -V693 Gambling and betting -V694 Lack of adequate sleep -V695 Behavioral insomnia of childhood -V698 Other problems related to lifestyle -V699 Unspecified problem related to lifestyle -V700 Routine general medical examination at a health care facility -V701 General psychiatric examination, requested by the authority -V702 General psychiatric examination, other and unspecified -V703 Other general medical examination for administrative purposes -V704 Examination for medicolegal reasons -V705 Health examination of defined subpopulations -V706 Health examination in population surveys -V707 Examination of participant in clinical trial -V708 Other specified general medical examinations -V709 Unspecified general medical examination -V7101 Observation for adult antisocial behavior -V7102 Observation for childhood or adolescent antisocial behavior -V7109 Observation for other suspected mental condition -V711 Observation for suspected malignant neoplasm -V712 Observation for suspected tuberculosis -V713 Observation following accident at work -V714 Observation following other accident -V715 Observation following alleged rape or seduction -V716 Observation following other inflicted injury -V717 Observation for suspected cardiovascular disease -V7181 Observation and evaluation for suspected abuse and neglect -V7182 Observation and evaluation for suspected exposure to anthrax -V7183 Observation and evaluation for suspected exposure to other biological agent -V7189 Observation and evaluation for other specified suspected conditions -V719 Observation for unspecified suspected condition -V720 Examination of eyes and vision -V7211 Encounter for hearing examination following failed hearing screening -V7212 Encounter for hearing conservation and treatment -V7219 Other examination of ears and hearing -V722 Dental examination -V7231 Routine gynecological examination -V7232 Encounter for Papanicolaou cervical smear to confirm findings of recent normal smear following initial abnormal smear -V7240 Pregnancy examination or test, pregnancy unconfirmed -V7241 Pregnancy examination or test, negative result -V7242 Pregnancy examination or test, positive result -V725 Radiological examination, not elsewhere classified -V7260 Laboratory examination, unspecified -V7261 Antibody response examination -V7262 Laboratory examination ordered as part of a routine general medical examination -V7263 Pre-procedural laboratory examination -V7269 Other laboratory examination -V727 Diagnostic skin and sensitization tests -V7281 Pre-operative cardiovascular examination -V7282 Pre-operative respiratory examination -V7283 Other specified pre-operative examination -V7284 Pre-operative examination, unspecified -V7285 Other specified examination -V7286 Encounter for blood typing -V729 Unspecified examination -V730 Screening examination for poliomyelitis -V731 Screening examination for smallpox -V732 Screening examination for measles -V733 Screening examination for rubella -V734 Screening examination for yellow fever -V735 Screening examination for other arthropod-borne viral diseases -V736 Screening examination for trachoma -V7381 Special screening examination for Human papillomavirus (HPV) -V7388 Special screening examination for other specified chlamydial diseases -V7389 Special screening examination for other specified viral diseases -V7398 Special screening examination for unspecified chlamydial disease -V7399 Special screening examination for unspecified viral disease -V740 Screening examination for cholera -V741 Screening examination for pulmonary tuberculosis -V742 Screening examination for leprosy (Hansen's disease) -V743 Screening examination for diphtheria -V744 Screening examination for bacterial conjunctivitis -V745 Screening examination for venereal disease -V746 Screening examination for yaws -V748 Screening examination for other specified bacterial and spirochetal diseases -V749 Screening examination for unspecified bacterial and spirochetal diseases -V750 Screening examination for rickettsial diseases -V751 Screening examination for malaria -V752 Screening examination for leishmaniasis -V753 Screening examination for trypanosomiasis -V754 Screening examination for mycotic infections -V755 Screening examination for schistosomiasis -V756 Screening examination for filariasis -V757 Screening examination for intestinal helminthiasis -V758 Screening examination for other specified parasitic infections -V759 Screening examination for unspecified infectious disease -V760 Special screening for malignant neoplasms of respiratory organs -V7610 Breast screening, unspecified -V7611 Screening mammogram for high-risk patient -V7612 Other screening mammogram -V7619 Other screening breast examination -V762 Screening for malignant neoplasms of cervix -V763 Screening for malignant neoplasms of bladder -V7641 Screening for malignant neoplasms of rectum -V7642 Screening for malignant neoplasms of oral cavity -V7643 Screening for malignant neoplasms of skin -V7644 Screening for malignant neoplasms of prostate -V7645 Screening for malignant neoplasms of testis -V7646 Special screening for malignant neoplasms of ovary -V7647 Special screening for malignant neoplasms of vagina -V7649 Special screening for malignant neoplasms of other sites -V7650 Special screening for malignant neoplasms for intestine, unspecified -V7651 Special screening for malignant neoplasms of colon -V7652 Special screening for malignant neoplasms of small intestine -V7681 Special screening for malignant neoplasms of nervous system -V7689 Special screening for other malignant neoplasms -V769 Special screening for unspecified malignant neoplasms -V770 Screening for thyroid disorders -V771 Screening for diabetes mellitus -V772 Screening for malnutrition -V773 Screening for phenylketonuria (PKU) -V774 Screening for galactosemia -V775 Screening for gout -V776 Screening for cystic fibrosis -V777 Screening for other inborn errors of metabolism -V778 Screening for obesity -V7791 Screening for lipoid disorders -V7799 Screening for other and unspecified endocrine, nutritional, metabolic, and immunity disorders -V780 Screening for iron deficiency anemia -V781 Screening for other and unspecified deficiency anemia -V782 Screening for sickle-cell disease or trait -V783 Screening for other hemoglobinopathies -V788 Screening for other disorders of blood and blood-forming organs -V789 Screening for unspecified disorder of blood and blood-forming organs -V790 Screening for depression -V791 Screening for alcoholism -V792 Special screening for intellectual disabilities -V793 Screening for developmental handicaps in early childhood -V798 Screening for other specified mental disorders and developmental handicaps -V799 Screening for unspecified mental disorder and developmental handicap -V8001 Special screening for traumatic brain injury -V8009 Special screening for other neurological conditions -V801 Screening for glaucoma -V802 Screening for other eye conditions -V803 Screening for ear diseases -V810 Screening for ischemic heart disease -V811 Screening for hypertension -V812 Screening for other and unspecified cardiovascular conditions -V813 Screening for chronic bronchitis and emphysema -V814 Screening for other and unspecified respiratory conditions -V815 Screening for nephropathy -V816 Screening for other and unspecified genitourinary conditions -V820 Screening for skin conditions -V821 Screening for rheumatoid arthritis -V822 Screening for other rheumatic disorders -V823 Screening for congenital dislocation of hip -V824 Maternal postnatal screening for chromosomal anomalies -V825 Screening for chemical poisoning and other contamination -V826 Multiphasic screening -V8271 Screening for genetic disease carrier status -V8279 Other genetic screening -V8281 Special screening for osteoporosis -V8289 Special screening for other specified conditions -V829 Screening for unspecified condition -V8301 Asymptomatic hemophilia A carrier -V8302 Symptomatic hemophilia A carrier -V8381 Cystic fibrosis gene carrier -V8389 Other genetic carrier status -V8401 Genetic susceptibility to malignant neoplasm of breast -V8402 Genetic susceptibility to malignant neoplasm of ovary -V8403 Genetic susceptibility to malignant neoplasm of prostate -V8404 Genetic susceptibility to malignant neoplasm of endometrium -V8409 Genetic susceptibility to other malignant neoplasm -V8481 Genetic susceptibility to multiple endocrine neoplasia [MEN] -V8489 Genetic susceptibility to other disease -V850 Body Mass Index less than 19, adult -V851 Body Mass Index between 19-24, adult -V8521 Body Mass Index 25.0-25.9, adult -V8522 Body Mass Index 26.0-26.9, adult -V8523 Body Mass Index 27.0-27.9, adult -V8524 Body Mass Index 28.0-28.9, adult -V8525 Body Mass Index 29.0-29.9, adult -V8530 Body Mass Index 30.0-30.9, adult -V8531 Body Mass Index 31.0-31.9, adult -V8532 Body Mass Index 32.0-32.9, adult -V8533 Body Mass Index 33.0-33.9, adult -V8534 Body Mass Index 34.0-34.9, adult -V8535 Body Mass Index 35.0-35.9, adult -V8536 Body Mass Index 36.0-36.9, adult -V8537 Body Mass Index 37.0-37.9, adult -V8538 Body Mass Index 38.0-38.9, adult -V8539 Body Mass Index 39.0-39.9, adult -V8541 Body Mass Index 40.0-44.9, adult -V8542 Body Mass Index 45.0-49.9, adult -V8543 Body Mass Index 50.0-59.9, adult -V8544 Body Mass Index 60.0-69.9, adult -V8545 Body Mass Index 70 and over, adult -V8551 Body Mass Index, pediatric, less than 5th percentile for age -V8552 Body Mass Index, pediatric, 5th percentile to less than 85th percentile for age -V8553 Body Mass Index, pediatric, 85th percentile to less than 95th percentile for age -V8554 Body Mass Index, pediatric, greater than or equal to 95th percentile for age -V860 Estrogen receptor positive status [ER+] -V861 Estrogen receptor negative status [ER-] -V8701 Contact with and (suspected) exposure to arsenic -V8702 Contact with and (suspected) exposure to uranium -V8709 Contact with and (suspected) exposure to other hazardous metals -V8711 Contact with and (suspected) exposure to aromatic amines -V8712 Contact with and (suspected) exposure to benzene -V8719 Contact with and (suspected) exposure to other hazardous aromatic compounds -V872 Contact with and (suspected) exposure to other potentially hazardous chemicals -V8731 Contact with and (suspected) exposure to mold -V8732 Contact with and (suspected) exposure to algae bloom -V8739 Contact with and (suspected) exposure to other potentially hazardous substances -V8741 Personal history of antineoplastic chemotherapy -V8742 Personal history of monoclonal drug therapy -V8743 Personal history of estrogen therapy -V8744 Personal history of inhaled steroid therapy -V8745 Personal history of systemic steroid therapy -V8746 Personal history of immunosuppressive therapy -V8749 Personal history of other drug therapy -V8801 Acquired absence of both cervix and uterus -V8802 Acquired absence of uterus with remaining cervical stump -V8803 Acquired absence of cervix with remaining uterus -V8811 Acquired total absence of pancreas -V8812 Acquired partial absence of pancreas -V8821 Acquired absence of hip joint -V8822 Acquired absence of knee joint -V8829 Acquired absence of other joint -V8901 Suspected problem with amniotic cavity and membrane not found -V8902 Suspected placental problem not found -V8903 Suspected fetal anomaly not found -V8904 Suspected problem with fetal growth not found -V8905 Suspected cervical shortening not found -V8909 Other suspected maternal and fetal condition not found -V9001 Retained depleted uranium fragments -V9009 Other retained radioactive fragments -V9010 Retained metal fragments, unspecified -V9011 Retained magnetic metal fragments -V9012 Retained nonmagnetic metal fragments -V902 Retained plastic fragments -V9031 Retained animal quills or spines -V9032 Retained tooth -V9033 Retained wood fragments -V9039 Other retained organic fragments -V9081 Retained glass fragments -V9083 Retained stone or crystalline fragments -V9089 Other specified retained foreign body -V909 Retained foreign body, unspecified material -V9100 Twin gestation, unspecified number of placenta, unspecified number of amniotic sacs -V9101 Twin gestation, monochorionic/monoamniotic (one placenta, one amniotic sac) -V9102 Twin gestation, monochorionic/diamniotic (one placenta, two amniotic sacs) -V9103 Twin gestation, dichorionic/diamniotic (two placentae, two amniotic sacs) -V9109 Twin gestation, unable to determine number of placenta and number of amniotic sacs -V9110 Triplet gestation, unspecified number of placenta and unspecified number of amniotic sacs -V9111 Triplet gestation, with two or more monochorionic fetuses -V9112 Triplet gestation, with two or more monoamniotic fetuses -V9119 Triplet gestation, unable to determine number of placenta and number of amniotic sacs -V9120 Quadruplet gestation, unspecified number of placenta and unspecified number of amniotic sacs -V9121 Quadruplet gestation, with two or more monochorionic fetuses -V9122 Quadruplet gestation, with two or more monoamniotic fetuses -V9129 Quadruplet gestation, unable to determine number of placenta and number of amniotic sacs -V9190 Other specified multiple gestation, unspecified number of placenta and unspecified number of amniotic sacs -V9191 Other specified multiple gestation, with two or more monochorionic fetuses -V9192 Other specified multiple gestation, with two or more monoamniotic fetuses -V9199 Other specified multiple gestation, unable to determine number of placenta and number of amniotic sacs diff --git a/wrangler-core/src/main/resources/reserved-column-names.txt b/wrangler-core/src/main/resources/reserved-column-names.txt deleted file mode 100644 index 1c20ae9fe..000000000 --- a/wrangler-core/src/main/resources/reserved-column-names.txt +++ /dev/null @@ -1,135 +0,0 @@ -all -alter -and -array -as -authorization -between -bigint -binary -boolean -both -by -case -cast -char -column -conf -create -cross -cube -current -current_date -current_timestamp -cursor -database -date -decimal -delete -describe -distinct -double -drop -else -end -exchange -exists -extended -external -false -fetch -float -following -for -from -full -function -grant -group -grouping -having -if -import -in -inner -insert -int -intersect -interval -into -is -join -lateral -left -less -like -local -macro -map -more -none -not -null -of -on -or -order -out -outer -over -partialscan -partition -percent -preceding -preserve -procedure -range -reads -reduce -revoke -right -rollup -row -rows -select -set -smallint -table -tablesample -then -timestamp -to -transform -trigger -true -truncate -unbounded -union -uniquejoin -update -user -using -utc_tmestamp -values -varchar -when -where -window -with -commit -only -regexp -rlike -rollback -start -cache -constraint -foreign -primary -references -dayofweek -extract -floor -integer -precision -views diff --git a/wrangler-core/src/main/resources/schemas/hl7-fhir-r4.json b/wrangler-core/src/main/resources/schemas/hl7-fhir-r4.json deleted file mode 100644 index 3ec9fdd1c..000000000 --- a/wrangler-core/src/main/resources/schemas/hl7-fhir-r4.json +++ /dev/null @@ -1,60732 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-06/schema#", - "id": "http://hl7.org/fhir/json-schema/4.0", - "description": "see http://hl7.org/fhir/json.html#schema for information about the FHIR Json Schemas", - "oneOf": [ - { - "$ref": "#/definitions/Account" - }, - { - "$ref": "#/definitions/ActivityDefinition" - }, - { - "$ref": "#/definitions/AdverseEvent" - }, - { - "$ref": "#/definitions/AllergyIntolerance" - }, - { - "$ref": "#/definitions/Appointment" - }, - { - "$ref": "#/definitions/AppointmentResponse" - }, - { - "$ref": "#/definitions/AuditEvent" - }, - { - "$ref": "#/definitions/Basic" - }, - { - "$ref": "#/definitions/Binary" - }, - { - "$ref": "#/definitions/BiologicallyDerivedProduct" - }, - { - "$ref": "#/definitions/BodyStructure" - }, - { - "$ref": "#/definitions/Bundle" - }, - { - "$ref": "#/definitions/CapabilityStatement" - }, - { - "$ref": "#/definitions/CarePlan" - }, - { - "$ref": "#/definitions/CareTeam" - }, - { - "$ref": "#/definitions/CatalogEntry" - }, - { - "$ref": "#/definitions/ChargeItem" - }, - { - "$ref": "#/definitions/ChargeItemDefinition" - }, - { - "$ref": "#/definitions/Claim" - }, - { - "$ref": "#/definitions/ClaimResponse" - }, - { - "$ref": "#/definitions/ClinicalImpression" - }, - { - "$ref": "#/definitions/CodeSystem" - }, - { - "$ref": "#/definitions/Communication" - }, - { - "$ref": "#/definitions/CommunicationRequest" - }, - { - "$ref": "#/definitions/CompartmentDefinition" - }, - { - "$ref": "#/definitions/Composition" - }, - { - "$ref": "#/definitions/ConceptMap" - }, - { - "$ref": "#/definitions/Condition" - }, - { - "$ref": "#/definitions/Consent" - }, - { - "$ref": "#/definitions/Contract" - }, - { - "$ref": "#/definitions/Coverage" - }, - { - "$ref": "#/definitions/CoverageEligibilityRequest" - }, - { - "$ref": "#/definitions/CoverageEligibilityResponse" - }, - { - "$ref": "#/definitions/DetectedIssue" - }, - { - "$ref": "#/definitions/Device" - }, - { - "$ref": "#/definitions/DeviceDefinition" - }, - { - "$ref": "#/definitions/DeviceMetric" - }, - { - "$ref": "#/definitions/DeviceRequest" - }, - { - "$ref": "#/definitions/DeviceUseStatement" - }, - { - "$ref": "#/definitions/DiagnosticReport" - }, - { - "$ref": "#/definitions/DocumentManifest" - }, - { - "$ref": "#/definitions/DocumentReference" - }, - { - "$ref": "#/definitions/EffectEvidenceSynthesis" - }, - { - "$ref": "#/definitions/Encounter" - }, - { - "$ref": "#/definitions/Endpoint" - }, - { - "$ref": "#/definitions/EnrollmentRequest" - }, - { - "$ref": "#/definitions/EnrollmentResponse" - }, - { - "$ref": "#/definitions/EpisodeOfCare" - }, - { - "$ref": "#/definitions/EventDefinition" - }, - { - "$ref": "#/definitions/Evidence" - }, - { - "$ref": "#/definitions/EvidenceVariable" - }, - { - "$ref": "#/definitions/ExampleScenario" - }, - { - "$ref": "#/definitions/ExplanationOfBenefit" - }, - { - "$ref": "#/definitions/FamilyMemberHistory" - }, - { - "$ref": "#/definitions/Flag" - }, - { - "$ref": "#/definitions/Goal" - }, - { - "$ref": "#/definitions/GraphDefinition" - }, - { - "$ref": "#/definitions/Group" - }, - { - "$ref": "#/definitions/GuidanceResponse" - }, - { - "$ref": "#/definitions/HealthcareService" - }, - { - "$ref": "#/definitions/ImagingStudy" - }, - { - "$ref": "#/definitions/Immunization" - }, - { - "$ref": "#/definitions/ImmunizationEvaluation" - }, - { - "$ref": "#/definitions/ImmunizationRecommendation" - }, - { - "$ref": "#/definitions/ImplementationGuide" - }, - { - "$ref": "#/definitions/InsurancePlan" - }, - { - "$ref": "#/definitions/Invoice" - }, - { - "$ref": "#/definitions/Library" - }, - { - "$ref": "#/definitions/Linkage" - }, - { - "$ref": "#/definitions/List" - }, - { - "$ref": "#/definitions/Location" - }, - { - "$ref": "#/definitions/Measure" - }, - { - "$ref": "#/definitions/MeasureReport" - }, - { - "$ref": "#/definitions/Media" - }, - { - "$ref": "#/definitions/Medication" - }, - { - "$ref": "#/definitions/MedicationAdministration" - }, - { - "$ref": "#/definitions/MedicationDispense" - }, - { - "$ref": "#/definitions/MedicationKnowledge" - }, - { - "$ref": "#/definitions/MedicationRequest" - }, - { - "$ref": "#/definitions/MedicationStatement" - }, - { - "$ref": "#/definitions/MedicinalProduct" - }, - { - "$ref": "#/definitions/MedicinalProductAuthorization" - }, - { - "$ref": "#/definitions/MedicinalProductContraindication" - }, - { - "$ref": "#/definitions/MedicinalProductIndication" - }, - { - "$ref": "#/definitions/MedicinalProductIngredient" - }, - { - "$ref": "#/definitions/MedicinalProductInteraction" - }, - { - "$ref": "#/definitions/MedicinalProductManufactured" - }, - { - "$ref": "#/definitions/MedicinalProductPackaged" - }, - { - "$ref": "#/definitions/MedicinalProductPharmaceutical" - }, - { - "$ref": "#/definitions/MedicinalProductUndesirableEffect" - }, - { - "$ref": "#/definitions/MessageDefinition" - }, - { - "$ref": "#/definitions/MessageHeader" - }, - { - "$ref": "#/definitions/MolecularSequence" - }, - { - "$ref": "#/definitions/NamingSystem" - }, - { - "$ref": "#/definitions/NutritionOrder" - }, - { - "$ref": "#/definitions/Observation" - }, - { - "$ref": "#/definitions/ObservationDefinition" - }, - { - "$ref": "#/definitions/OperationDefinition" - }, - { - "$ref": "#/definitions/OperationOutcome" - }, - { - "$ref": "#/definitions/Organization" - }, - { - "$ref": "#/definitions/OrganizationAffiliation" - }, - { - "$ref": "#/definitions/Parameters" - }, - { - "$ref": "#/definitions/Patient" - }, - { - "$ref": "#/definitions/PaymentNotice" - }, - { - "$ref": "#/definitions/PaymentReconciliation" - }, - { - "$ref": "#/definitions/Person" - }, - { - "$ref": "#/definitions/PlanDefinition" - }, - { - "$ref": "#/definitions/Practitioner" - }, - { - "$ref": "#/definitions/PractitionerRole" - }, - { - "$ref": "#/definitions/Procedure" - }, - { - "$ref": "#/definitions/Provenance" - }, - { - "$ref": "#/definitions/Questionnaire" - }, - { - "$ref": "#/definitions/QuestionnaireResponse" - }, - { - "$ref": "#/definitions/RelatedPerson" - }, - { - "$ref": "#/definitions/RequestGroup" - }, - { - "$ref": "#/definitions/ResearchDefinition" - }, - { - "$ref": "#/definitions/ResearchElementDefinition" - }, - { - "$ref": "#/definitions/ResearchStudy" - }, - { - "$ref": "#/definitions/ResearchSubject" - }, - { - "$ref": "#/definitions/RiskAssessment" - }, - { - "$ref": "#/definitions/RiskEvidenceSynthesis" - }, - { - "$ref": "#/definitions/Schedule" - }, - { - "$ref": "#/definitions/SearchParameter" - }, - { - "$ref": "#/definitions/ServiceRequest" - }, - { - "$ref": "#/definitions/Slot" - }, - { - "$ref": "#/definitions/Specimen" - }, - { - "$ref": "#/definitions/SpecimenDefinition" - }, - { - "$ref": "#/definitions/StructureDefinition" - }, - { - "$ref": "#/definitions/StructureMap" - }, - { - "$ref": "#/definitions/Subscription" - }, - { - "$ref": "#/definitions/Substance" - }, - { - "$ref": "#/definitions/SubstanceNucleicAcid" - }, - { - "$ref": "#/definitions/SubstancePolymer" - }, - { - "$ref": "#/definitions/SubstanceProtein" - }, - { - "$ref": "#/definitions/SubstanceReferenceInformation" - }, - { - "$ref": "#/definitions/SubstanceSourceMaterial" - }, - { - "$ref": "#/definitions/SubstanceSpecification" - }, - { - "$ref": "#/definitions/SupplyDelivery" - }, - { - "$ref": "#/definitions/SupplyRequest" - }, - { - "$ref": "#/definitions/Task" - }, - { - "$ref": "#/definitions/TerminologyCapabilities" - }, - { - "$ref": "#/definitions/TestReport" - }, - { - "$ref": "#/definitions/TestScript" - }, - { - "$ref": "#/definitions/ValueSet" - }, - { - "$ref": "#/definitions/VerificationResult" - }, - { - "$ref": "#/definitions/VisionPrescription" - } - ], - "definitions": { - "ResourceList": { - "oneOf": [ - { - "$ref": "#/definitions/Account" - }, - { - "$ref": "#/definitions/ActivityDefinition" - }, - { - "$ref": "#/definitions/AdverseEvent" - }, - { - "$ref": "#/definitions/AllergyIntolerance" - }, - { - "$ref": "#/definitions/Appointment" - }, - { - "$ref": "#/definitions/AppointmentResponse" - }, - { - "$ref": "#/definitions/AuditEvent" - }, - { - "$ref": "#/definitions/Basic" - }, - { - "$ref": "#/definitions/Binary" - }, - { - "$ref": "#/definitions/BiologicallyDerivedProduct" - }, - { - "$ref": "#/definitions/BodyStructure" - }, - { - "$ref": "#/definitions/Bundle" - }, - { - "$ref": "#/definitions/CapabilityStatement" - }, - { - "$ref": "#/definitions/CarePlan" - }, - { - "$ref": "#/definitions/CareTeam" - }, - { - "$ref": "#/definitions/CatalogEntry" - }, - { - "$ref": "#/definitions/ChargeItem" - }, - { - "$ref": "#/definitions/ChargeItemDefinition" - }, - { - "$ref": "#/definitions/Claim" - }, - { - "$ref": "#/definitions/ClaimResponse" - }, - { - "$ref": "#/definitions/ClinicalImpression" - }, - { - "$ref": "#/definitions/CodeSystem" - }, - { - "$ref": "#/definitions/Communication" - }, - { - "$ref": "#/definitions/CommunicationRequest" - }, - { - "$ref": "#/definitions/CompartmentDefinition" - }, - { - "$ref": "#/definitions/Composition" - }, - { - "$ref": "#/definitions/ConceptMap" - }, - { - "$ref": "#/definitions/Condition" - }, - { - "$ref": "#/definitions/Consent" - }, - { - "$ref": "#/definitions/Contract" - }, - { - "$ref": "#/definitions/Coverage" - }, - { - "$ref": "#/definitions/CoverageEligibilityRequest" - }, - { - "$ref": "#/definitions/CoverageEligibilityResponse" - }, - { - "$ref": "#/definitions/DetectedIssue" - }, - { - "$ref": "#/definitions/Device" - }, - { - "$ref": "#/definitions/DeviceDefinition" - }, - { - "$ref": "#/definitions/DeviceMetric" - }, - { - "$ref": "#/definitions/DeviceRequest" - }, - { - "$ref": "#/definitions/DeviceUseStatement" - }, - { - "$ref": "#/definitions/DiagnosticReport" - }, - { - "$ref": "#/definitions/DocumentManifest" - }, - { - "$ref": "#/definitions/DocumentReference" - }, - { - "$ref": "#/definitions/EffectEvidenceSynthesis" - }, - { - "$ref": "#/definitions/Encounter" - }, - { - "$ref": "#/definitions/Endpoint" - }, - { - "$ref": "#/definitions/EnrollmentRequest" - }, - { - "$ref": "#/definitions/EnrollmentResponse" - }, - { - "$ref": "#/definitions/EpisodeOfCare" - }, - { - "$ref": "#/definitions/EventDefinition" - }, - { - "$ref": "#/definitions/Evidence" - }, - { - "$ref": "#/definitions/EvidenceVariable" - }, - { - "$ref": "#/definitions/ExampleScenario" - }, - { - "$ref": "#/definitions/ExplanationOfBenefit" - }, - { - "$ref": "#/definitions/FamilyMemberHistory" - }, - { - "$ref": "#/definitions/Flag" - }, - { - "$ref": "#/definitions/Goal" - }, - { - "$ref": "#/definitions/GraphDefinition" - }, - { - "$ref": "#/definitions/Group" - }, - { - "$ref": "#/definitions/GuidanceResponse" - }, - { - "$ref": "#/definitions/HealthcareService" - }, - { - "$ref": "#/definitions/ImagingStudy" - }, - { - "$ref": "#/definitions/Immunization" - }, - { - "$ref": "#/definitions/ImmunizationEvaluation" - }, - { - "$ref": "#/definitions/ImmunizationRecommendation" - }, - { - "$ref": "#/definitions/ImplementationGuide" - }, - { - "$ref": "#/definitions/InsurancePlan" - }, - { - "$ref": "#/definitions/Invoice" - }, - { - "$ref": "#/definitions/Library" - }, - { - "$ref": "#/definitions/Linkage" - }, - { - "$ref": "#/definitions/List" - }, - { - "$ref": "#/definitions/Location" - }, - { - "$ref": "#/definitions/Measure" - }, - { - "$ref": "#/definitions/MeasureReport" - }, - { - "$ref": "#/definitions/Media" - }, - { - "$ref": "#/definitions/Medication" - }, - { - "$ref": "#/definitions/MedicationAdministration" - }, - { - "$ref": "#/definitions/MedicationDispense" - }, - { - "$ref": "#/definitions/MedicationKnowledge" - }, - { - "$ref": "#/definitions/MedicationRequest" - }, - { - "$ref": "#/definitions/MedicationStatement" - }, - { - "$ref": "#/definitions/MedicinalProduct" - }, - { - "$ref": "#/definitions/MedicinalProductAuthorization" - }, - { - "$ref": "#/definitions/MedicinalProductContraindication" - }, - { - "$ref": "#/definitions/MedicinalProductIndication" - }, - { - "$ref": "#/definitions/MedicinalProductIngredient" - }, - { - "$ref": "#/definitions/MedicinalProductInteraction" - }, - { - "$ref": "#/definitions/MedicinalProductManufactured" - }, - { - "$ref": "#/definitions/MedicinalProductPackaged" - }, - { - "$ref": "#/definitions/MedicinalProductPharmaceutical" - }, - { - "$ref": "#/definitions/MedicinalProductUndesirableEffect" - }, - { - "$ref": "#/definitions/MessageDefinition" - }, - { - "$ref": "#/definitions/MessageHeader" - }, - { - "$ref": "#/definitions/MolecularSequence" - }, - { - "$ref": "#/definitions/NamingSystem" - }, - { - "$ref": "#/definitions/NutritionOrder" - }, - { - "$ref": "#/definitions/Observation" - }, - { - "$ref": "#/definitions/ObservationDefinition" - }, - { - "$ref": "#/definitions/OperationDefinition" - }, - { - "$ref": "#/definitions/OperationOutcome" - }, - { - "$ref": "#/definitions/Organization" - }, - { - "$ref": "#/definitions/OrganizationAffiliation" - }, - { - "$ref": "#/definitions/Parameters" - }, - { - "$ref": "#/definitions/Patient" - }, - { - "$ref": "#/definitions/PaymentNotice" - }, - { - "$ref": "#/definitions/PaymentReconciliation" - }, - { - "$ref": "#/definitions/Person" - }, - { - "$ref": "#/definitions/PlanDefinition" - }, - { - "$ref": "#/definitions/Practitioner" - }, - { - "$ref": "#/definitions/PractitionerRole" - }, - { - "$ref": "#/definitions/Procedure" - }, - { - "$ref": "#/definitions/Provenance" - }, - { - "$ref": "#/definitions/Questionnaire" - }, - { - "$ref": "#/definitions/QuestionnaireResponse" - }, - { - "$ref": "#/definitions/RelatedPerson" - }, - { - "$ref": "#/definitions/RequestGroup" - }, - { - "$ref": "#/definitions/ResearchDefinition" - }, - { - "$ref": "#/definitions/ResearchElementDefinition" - }, - { - "$ref": "#/definitions/ResearchStudy" - }, - { - "$ref": "#/definitions/ResearchSubject" - }, - { - "$ref": "#/definitions/RiskAssessment" - }, - { - "$ref": "#/definitions/RiskEvidenceSynthesis" - }, - { - "$ref": "#/definitions/Schedule" - }, - { - "$ref": "#/definitions/SearchParameter" - }, - { - "$ref": "#/definitions/ServiceRequest" - }, - { - "$ref": "#/definitions/Slot" - }, - { - "$ref": "#/definitions/Specimen" - }, - { - "$ref": "#/definitions/SpecimenDefinition" - }, - { - "$ref": "#/definitions/StructureDefinition" - }, - { - "$ref": "#/definitions/StructureMap" - }, - { - "$ref": "#/definitions/Subscription" - }, - { - "$ref": "#/definitions/Substance" - }, - { - "$ref": "#/definitions/SubstanceNucleicAcid" - }, - { - "$ref": "#/definitions/SubstancePolymer" - }, - { - "$ref": "#/definitions/SubstanceProtein" - }, - { - "$ref": "#/definitions/SubstanceReferenceInformation" - }, - { - "$ref": "#/definitions/SubstanceSourceMaterial" - }, - { - "$ref": "#/definitions/SubstanceSpecification" - }, - { - "$ref": "#/definitions/SupplyDelivery" - }, - { - "$ref": "#/definitions/SupplyRequest" - }, - { - "$ref": "#/definitions/Task" - }, - { - "$ref": "#/definitions/TerminologyCapabilities" - }, - { - "$ref": "#/definitions/TestReport" - }, - { - "$ref": "#/definitions/TestScript" - }, - { - "$ref": "#/definitions/ValueSet" - }, - { - "$ref": "#/definitions/VerificationResult" - }, - { - "$ref": "#/definitions/VisionPrescription" - } - ] - }, - "base64Binary": { - "type": "string", - "description": "A stream of bytes" - }, - "boolean": { - "pattern": "^true|false$", - "type": "boolean", - "description": "Value of \"true\" or \"false\"" - }, - "canonical": { - "pattern": "^\\S*$", - "type": "string", - "description": "A URI that is a reference to a canonical URL on a FHIR resource" - }, - "code": { - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string", - "description": "A string which has at least one character and no leading or trailing whitespace and where there is no whitespace other than single spaces in the contents" - }, - "date": { - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string", - "description": "A date or partial date (e.g. just year or year + month). There is no time zone. The format is a union of the schema types gYear, gYearMonth and date. Dates SHALL be valid dates." - }, - "dateTime": { - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string", - "description": "A date, date-time or partial date (e.g. just year or year + month). If hours and minutes are specified, a time zone SHALL be populated. The format is a union of the schema types gYear, gYearMonth, date and dateTime. Seconds must be provided due to schema type constraints but may be zero-filled and may be ignored. Dates SHALL be valid dates." - }, - "decimal": { - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number", - "description": "A rational number with implicit precision" - }, - "id": { - "pattern": "^[A-Za-z0-9\\-\\.]{1,64}$", - "type": "string", - "description": "Any combination of letters, numerals, \"-\" and \".\", with a length limit of 64 characters. (This might be an integer, an unprefixed OID, UUID or any other identifier pattern that meets these constraints.) Ids are case-insensitive." - }, - "instant": { - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string", - "description": "An instant in time - known at least to the second" - }, - "integer": { - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number", - "description": "A whole number" - }, - "markdown": { - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string", - "description": "A string that may contain Github Flavored Markdown syntax for optional processing by a mark down presentation engine" - }, - "oid": { - "pattern": "^urn:oid:[0-2](\\.(0|[1-9][0-9]*))+$", - "type": "string", - "description": "An OID represented as a URI" - }, - "positiveInt": { - "pattern": "^[1-9][0-9]*$", - "type": "number", - "description": "An integer with a value that is positive (e.g. \u003e0)" - }, - "string": { - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string", - "description": "A sequence of Unicode characters" - }, - "time": { - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string", - "description": "A time during the day, with no date specified" - }, - "unsignedInt": { - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number", - "description": "An integer with a value that is not negative (e.g. \u003e\u003d 0)" - }, - "uri": { - "pattern": "^\\S*$", - "type": "string", - "description": "String of characters used to identify a name or a resource" - }, - "url": { - "pattern": "^\\S*$", - "type": "string", - "description": "A URI that is a literal reference" - }, - "uuid": { - "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", - "type": "string", - "description": "A UUID, represented as a URI" - }, - "xhtml": { - "description": "xhtml - escaped html (see specfication)" - }, - "Element": { - "description": "Base definition for all elements in a resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Extension": { - "description": "Optional Extension Element - found in all resources.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "Source of the definition for the extension code - a logical name or a URL.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "valueBase64Binary": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^(\\s*([0-9a-zA-Z\\+/\u003d]){4}\\s*)+$", - "type": "string" - }, - "_valueBase64Binary": { - "description": "Extensions for valueBase64Binary", - "$ref": "#/definitions/Element" - }, - "valueBoolean": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueCanonical": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueCanonical": { - "description": "Extensions for valueCanonical", - "$ref": "#/definitions/Element" - }, - "valueCode": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string" - }, - "_valueCode": { - "description": "Extensions for valueCode", - "$ref": "#/definitions/Element" - }, - "valueDate": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_valueDate": { - "description": "Extensions for valueDate", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valueDecimal": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_valueDecimal": { - "description": "Extensions for valueDecimal", - "$ref": "#/definitions/Element" - }, - "valueId": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^[A-Za-z0-9\\-\\.]{1,64}$", - "type": "string" - }, - "_valueId": { - "description": "Extensions for valueId", - "$ref": "#/definitions/Element" - }, - "valueInstant": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_valueInstant": { - "description": "Extensions for valueInstant", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueMarkdown": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueMarkdown": { - "description": "Extensions for valueMarkdown", - "$ref": "#/definitions/Element" - }, - "valueOid": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^urn:oid:[0-2](\\.(0|[1-9][0-9]*))+$", - "type": "string" - }, - "_valueOid": { - "description": "Extensions for valueOid", - "$ref": "#/definitions/Element" - }, - "valuePositiveInt": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_valuePositiveInt": { - "description": "Extensions for valuePositiveInt", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueTime": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_valueTime": { - "description": "Extensions for valueTime", - "$ref": "#/definitions/Element" - }, - "valueUnsignedInt": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_valueUnsignedInt": { - "description": "Extensions for valueUnsignedInt", - "$ref": "#/definitions/Element" - }, - "valueUri": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUri": { - "description": "Extensions for valueUri", - "$ref": "#/definitions/Element" - }, - "valueUrl": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUrl": { - "description": "Extensions for valueUrl", - "$ref": "#/definitions/Element" - }, - "valueUuid": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", - "type": "string" - }, - "_valueUuid": { - "description": "Extensions for valueUuid", - "$ref": "#/definitions/Element" - }, - "valueAddress": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Address" - }, - "valueAge": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Age" - }, - "valueAnnotation": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Annotation" - }, - "valueAttachment": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Attachment" - }, - "valueCodeableConcept": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/CodeableConcept" - }, - "valueCoding": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Coding" - }, - "valueContactPoint": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/ContactPoint" - }, - "valueCount": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Count" - }, - "valueDistance": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Distance" - }, - "valueDuration": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Duration" - }, - "valueHumanName": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/HumanName" - }, - "valueIdentifier": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Identifier" - }, - "valueMoney": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Money" - }, - "valuePeriod": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Period" - }, - "valueQuantity": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Quantity" - }, - "valueRange": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Range" - }, - "valueRatio": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Ratio" - }, - "valueReference": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Reference" - }, - "valueSampledData": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/SampledData" - }, - "valueSignature": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Signature" - }, - "valueTiming": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Timing" - }, - "valueContactDetail": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/ContactDetail" - }, - "valueContributor": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Contributor" - }, - "valueDataRequirement": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/DataRequirement" - }, - "valueExpression": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Expression" - }, - "valueParameterDefinition": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/ParameterDefinition" - }, - "valueRelatedArtifact": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/RelatedArtifact" - }, - "valueTriggerDefinition": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/TriggerDefinition" - }, - "valueUsageContext": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/UsageContext" - }, - "valueDosage": { - "description": "Value of extension - must be one of a constrained set of the data types (see [Extensibility](extensibility.html) for a list).", - "$ref": "#/definitions/Dosage" - } - }, - "additionalProperties": false - }, - "Narrative": { - "description": "A human-readable summary of the resource conveying the essential clinical and business information for the resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "status": { - "description": "The status of the narrative - whether it\u0027s entirely generated (from just the defined data or the extensions too), or whether a human authored it and it may contain additional data.", - "enum": [ - "generated", - "extensions", - "additional", - "empty" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "div": { - "description": "The actual narrative content, a stripped down version of XHTML.", - "$ref": "#/definitions/xhtml" - } - }, - "additionalProperties": false, - "required": [ - "div" - ] - }, - "Annotation": { - "description": "A text note which also contains information about who made the statement and when.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "authorReference": { - "description": "The individual responsible for making the annotation.", - "$ref": "#/definitions/Reference" - }, - "authorString": { - "description": "The individual responsible for making the annotation.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_authorString": { - "description": "Extensions for authorString", - "$ref": "#/definitions/Element" - }, - "time": { - "description": "Indicates when this particular annotation was made.", - "$ref": "#/definitions/dateTime" - }, - "_time": { - "description": "Extensions for time", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "The text of the annotation in markdown format.", - "$ref": "#/definitions/markdown" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Attachment": { - "description": "For referring to data content defined in other formats.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "contentType": { - "description": "Identifies the type of the data in the attachment and allows a method to be chosen to interpret or render the data. Includes mime type parameters such as charset where appropriate.", - "$ref": "#/definitions/code" - }, - "_contentType": { - "description": "Extensions for contentType", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The human language of the content. The value can be any valid value according to BCP 47.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "data": { - "description": "The actual data of the attachment - a sequence of bytes, base64 encoded.", - "$ref": "#/definitions/base64Binary" - }, - "_data": { - "description": "Extensions for data", - "$ref": "#/definitions/Element" - }, - "url": { - "description": "A location where the data can be accessed.", - "$ref": "#/definitions/url" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "size": { - "description": "The number of bytes of data that make up this attachment (before base64 encoding, if that is done).", - "$ref": "#/definitions/unsignedInt" - }, - "_size": { - "description": "Extensions for size", - "$ref": "#/definitions/Element" - }, - "hash": { - "description": "The calculated hash of the data using SHA-1. Represented using base64.", - "$ref": "#/definitions/base64Binary" - }, - "_hash": { - "description": "Extensions for hash", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A label or set of text to display in place of the data.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "creation": { - "description": "The date that the attachment was first created.", - "$ref": "#/definitions/dateTime" - }, - "_creation": { - "description": "Extensions for creation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Identifier": { - "description": "An identifier - identifies some entity uniquely and unambiguously. Typically this is used for business identifiers.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "use": { - "description": "The purpose of this identifier.", - "enum": [ - "usual", - "official", - "temp", - "secondary", - "old" - ] - }, - "_use": { - "description": "Extensions for use", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.", - "$ref": "#/definitions/CodeableConcept" - }, - "system": { - "description": "Establishes the namespace for the value - that is, a URL that describes a set values that are unique.", - "$ref": "#/definitions/uri" - }, - "_system": { - "description": "Extensions for system", - "$ref": "#/definitions/Element" - }, - "value": { - "description": "The portion of the identifier typically relevant to the user and which is unique within the context of the system.", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "Time period during which identifier is/was valid for use.", - "$ref": "#/definitions/Period" - }, - "assigner": { - "description": "Organization that issued/manages the identifier.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "CodeableConcept": { - "description": "A concept that may be defined by a formal reference to a terminology or ontology or may be provided by text.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "coding": { - "description": "A reference to a code defined by a terminology system.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "text": { - "description": "A human language representation of the concept as seen/selected/uttered by the user who entered the data and/or which represents the intended meaning of the user.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Coding": { - "description": "A reference to a code defined by a terminology system.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "system": { - "description": "The identification of the code system that defines the meaning of the symbol in the code.", - "$ref": "#/definitions/uri" - }, - "_system": { - "description": "Extensions for system", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The version of the code system which was used when choosing this code. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A symbol in syntax defined by the system. The symbol may be a predefined code or an expression in a syntax defined by the coding system (e.g. post-coordination).", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "display": { - "description": "A representation of the meaning of the code in the system, following the rules of the system.", - "$ref": "#/definitions/string" - }, - "_display": { - "description": "Extensions for display", - "$ref": "#/definitions/Element" - }, - "userSelected": { - "description": "Indicates that this coding was chosen by a user directly - e.g. off a pick list of available items (codes or displays).", - "$ref": "#/definitions/boolean" - }, - "_userSelected": { - "description": "Extensions for userSelected", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Quantity": { - "description": "A measured amount (or an amount that can potentially be measured). Note that measured amounts include amounts that are not precisely quantified, including amounts involving arbitrary units and floating currencies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "value": { - "description": "The value of the measured amount. The value includes an implicit precision in the presentation of the value.", - "$ref": "#/definitions/decimal" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "comparator": { - "description": "How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is \"\u003c\" , then the real value is \u003c stated value.", - "enum": [ - "\u003c", - "\u003c\u003d", - "\u003e\u003d", - "\u003e" - ] - }, - "_comparator": { - "description": "Extensions for comparator", - "$ref": "#/definitions/Element" - }, - "unit": { - "description": "A human-readable form of the unit.", - "$ref": "#/definitions/string" - }, - "_unit": { - "description": "Extensions for unit", - "$ref": "#/definitions/Element" - }, - "system": { - "description": "The identification of the system that provides the coded form of the unit.", - "$ref": "#/definitions/uri" - }, - "_system": { - "description": "Extensions for system", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A computer processable form of the unit in some unit representation system.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Duration": { - "description": "A length of time.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "value": { - "description": "The value of the measured amount. The value includes an implicit precision in the presentation of the value.", - "$ref": "#/definitions/decimal" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "comparator": { - "description": "How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is \"\u003c\" , then the real value is \u003c stated value.", - "enum": [ - "\u003c", - "\u003c\u003d", - "\u003e\u003d", - "\u003e" - ] - }, - "_comparator": { - "description": "Extensions for comparator", - "$ref": "#/definitions/Element" - }, - "unit": { - "description": "A human-readable form of the unit.", - "$ref": "#/definitions/string" - }, - "_unit": { - "description": "Extensions for unit", - "$ref": "#/definitions/Element" - }, - "system": { - "description": "The identification of the system that provides the coded form of the unit.", - "$ref": "#/definitions/uri" - }, - "_system": { - "description": "Extensions for system", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A computer processable form of the unit in some unit representation system.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Distance": { - "description": "A length - a value with a unit that is a physical distance.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "value": { - "description": "The value of the measured amount. The value includes an implicit precision in the presentation of the value.", - "$ref": "#/definitions/decimal" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "comparator": { - "description": "How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is \"\u003c\" , then the real value is \u003c stated value.", - "enum": [ - "\u003c", - "\u003c\u003d", - "\u003e\u003d", - "\u003e" - ] - }, - "_comparator": { - "description": "Extensions for comparator", - "$ref": "#/definitions/Element" - }, - "unit": { - "description": "A human-readable form of the unit.", - "$ref": "#/definitions/string" - }, - "_unit": { - "description": "Extensions for unit", - "$ref": "#/definitions/Element" - }, - "system": { - "description": "The identification of the system that provides the coded form of the unit.", - "$ref": "#/definitions/uri" - }, - "_system": { - "description": "Extensions for system", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A computer processable form of the unit in some unit representation system.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Count": { - "description": "A measured amount (or an amount that can potentially be measured). Note that measured amounts include amounts that are not precisely quantified, including amounts involving arbitrary units and floating currencies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "value": { - "description": "The value of the measured amount. The value includes an implicit precision in the presentation of the value.", - "$ref": "#/definitions/decimal" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "comparator": { - "description": "How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is \"\u003c\" , then the real value is \u003c stated value.", - "enum": [ - "\u003c", - "\u003c\u003d", - "\u003e\u003d", - "\u003e" - ] - }, - "_comparator": { - "description": "Extensions for comparator", - "$ref": "#/definitions/Element" - }, - "unit": { - "description": "A human-readable form of the unit.", - "$ref": "#/definitions/string" - }, - "_unit": { - "description": "Extensions for unit", - "$ref": "#/definitions/Element" - }, - "system": { - "description": "The identification of the system that provides the coded form of the unit.", - "$ref": "#/definitions/uri" - }, - "_system": { - "description": "Extensions for system", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A computer processable form of the unit in some unit representation system.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Money": { - "description": "An amount of economic utility in some recognized currency.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "value": { - "description": "Numerical value (with implicit precision).", - "$ref": "#/definitions/decimal" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "currency": { - "description": "ISO 4217 Currency Code.", - "$ref": "#/definitions/code" - }, - "_currency": { - "description": "Extensions for currency", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Age": { - "description": "A duration of time during which an organism (or a process) has existed.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "value": { - "description": "The value of the measured amount. The value includes an implicit precision in the presentation of the value.", - "$ref": "#/definitions/decimal" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "comparator": { - "description": "How the value should be understood and represented - whether the actual value is greater or less than the stated value due to measurement issues; e.g. if the comparator is \"\u003c\" , then the real value is \u003c stated value.", - "enum": [ - "\u003c", - "\u003c\u003d", - "\u003e\u003d", - "\u003e" - ] - }, - "_comparator": { - "description": "Extensions for comparator", - "$ref": "#/definitions/Element" - }, - "unit": { - "description": "A human-readable form of the unit.", - "$ref": "#/definitions/string" - }, - "_unit": { - "description": "Extensions for unit", - "$ref": "#/definitions/Element" - }, - "system": { - "description": "The identification of the system that provides the coded form of the unit.", - "$ref": "#/definitions/uri" - }, - "_system": { - "description": "Extensions for system", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A computer processable form of the unit in some unit representation system.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Range": { - "description": "A set of ordered Quantities defined by a low and high limit.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "low": { - "description": "The low limit. The boundary is inclusive.", - "$ref": "#/definitions/Quantity" - }, - "high": { - "description": "The high limit. The boundary is inclusive.", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false - }, - "Period": { - "description": "A time period defined by a start and end date and optionally time.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "start": { - "description": "The start of the period. The boundary is inclusive.", - "$ref": "#/definitions/dateTime" - }, - "_start": { - "description": "Extensions for start", - "$ref": "#/definitions/Element" - }, - "end": { - "description": "The end of the period. If the end of the period is missing, it means no end was known or planned at the time the instance was created. The start may be in the past, and the end date in the future, which means that period is expected/planned to end at that time.", - "$ref": "#/definitions/dateTime" - }, - "_end": { - "description": "Extensions for end", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Ratio": { - "description": "A relationship of two Quantity values - expressed as a numerator and a denominator.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "numerator": { - "description": "The value of the numerator.", - "$ref": "#/definitions/Quantity" - }, - "denominator": { - "description": "The value of the denominator.", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false - }, - "Reference": { - "description": "A reference from one resource to another.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "reference": { - "description": "A reference to a location at which the other resource is found. The reference may be a relative reference, in which case it is relative to the service base URL, or an absolute URL that resolves to the location where the resource is found. The reference may be version specific or not. If the reference is not to a FHIR RESTful server, then it should be assumed to be version specific. Internal fragment references (start with \u0027#\u0027) refer to contained resources.", - "$ref": "#/definitions/string" - }, - "_reference": { - "description": "Extensions for reference", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The expected type of the target of the reference. If both Reference.type and Reference.reference are populated and Reference.reference is a FHIR URL, both SHALL be consistent.\n\nThe type is the Canonical URL of Resource Definition that is the type this reference refers to. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition/ e.g. \"Patient\" is a reference to http://hl7.org/fhir/StructureDefinition/Patient. Absolute URLs are only allowed for logical models (and can only be used in references in logical models, not resources).", - "$ref": "#/definitions/uri" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "An identifier for the target resource. This is used when there is no way to reference the other resource directly, either because the entity it represents is not available through a FHIR server, or because there is no way for the author of the resource to convert a known identifier to an actual location. There is no requirement that a Reference.identifier point to something that is actually exposed as a FHIR instance, but it SHALL point to a business concept that would be expected to be exposed as a FHIR instance, and that instance would need to be of a FHIR resource type allowed by the reference.", - "$ref": "#/definitions/Identifier" - }, - "display": { - "description": "Plain text narrative that identifies the resource in addition to the resource reference.", - "$ref": "#/definitions/string" - }, - "_display": { - "description": "Extensions for display", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "SampledData": { - "description": "A series of measurements taken by a device, with upper and lower limits. There may be more than one dimension in the data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "origin": { - "description": "The base quantity that a measured value of zero represents. In addition, this provides the units of the entire measurement series.", - "$ref": "#/definitions/Quantity" - }, - "period": { - "description": "The length of time between sampling times, measured in milliseconds.", - "$ref": "#/definitions/decimal" - }, - "_period": { - "description": "Extensions for period", - "$ref": "#/definitions/Element" - }, - "factor": { - "description": "A correction factor that is applied to the sampled data points before they are added to the origin.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "lowerLimit": { - "description": "The lower limit of detection of the measured points. This is needed if any of the data points have the value \"L\" (lower than detection limit).", - "$ref": "#/definitions/decimal" - }, - "_lowerLimit": { - "description": "Extensions for lowerLimit", - "$ref": "#/definitions/Element" - }, - "upperLimit": { - "description": "The upper limit of detection of the measured points. This is needed if any of the data points have the value \"U\" (higher than detection limit).", - "$ref": "#/definitions/decimal" - }, - "_upperLimit": { - "description": "Extensions for upperLimit", - "$ref": "#/definitions/Element" - }, - "dimensions": { - "description": "The number of sample points at each time point. If this value is greater than one, then the dimensions will be interlaced - all the sample points for a point in time will be recorded at once.", - "$ref": "#/definitions/positiveInt" - }, - "_dimensions": { - "description": "Extensions for dimensions", - "$ref": "#/definitions/Element" - }, - "data": { - "description": "A series of data points which are decimal values separated by a single space (character u20). The special values \"E\" (error), \"L\" (below detection limit) and \"U\" (above detection limit) can also be used in place of a decimal value.", - "$ref": "#/definitions/string" - }, - "_data": { - "description": "Extensions for data", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "origin" - ] - }, - "Signature": { - "description": "A signature along with supporting context. The signature may be a digital signature that is cryptographic in nature, or some other signature acceptable to the domain. This other signature may be as simple as a graphical image representing a hand-written signature, or a signature ceremony Different signature approaches have different utilities.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "An indication of the reason that the entity signed this document. This may be explicitly included as part of the signature information and can be used when determining accountability for various actions concerning the document.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "when": { - "description": "When the digital signature was signed.", - "$ref": "#/definitions/instant" - }, - "_when": { - "description": "Extensions for when", - "$ref": "#/definitions/Element" - }, - "who": { - "description": "A reference to an application-usable description of the identity that signed (e.g. the signature used their private key).", - "$ref": "#/definitions/Reference" - }, - "onBehalfOf": { - "description": "A reference to an application-usable description of the identity that is represented by the signature.", - "$ref": "#/definitions/Reference" - }, - "targetFormat": { - "description": "A mime type that indicates the technical format of the target resources signed by the signature.", - "$ref": "#/definitions/code" - }, - "_targetFormat": { - "description": "Extensions for targetFormat", - "$ref": "#/definitions/Element" - }, - "sigFormat": { - "description": "A mime type that indicates the technical format of the signature. Important mime types are application/signature+xml for X ML DigSig, application/jose for JWS, and image/* for a graphical image of a signature, etc.", - "$ref": "#/definitions/code" - }, - "_sigFormat": { - "description": "Extensions for sigFormat", - "$ref": "#/definitions/Element" - }, - "data": { - "description": "The base64 encoding of the Signature content. When signature is not recorded electronically this element would be empty.", - "$ref": "#/definitions/base64Binary" - }, - "_data": { - "description": "Extensions for data", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "type", - "who" - ] - }, - "HumanName": { - "description": "A human\u0027s name with the ability to identify parts and usage.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "use": { - "description": "Identifies the purpose for this name.", - "enum": [ - "usual", - "official", - "temp", - "nickname", - "anonymous", - "old", - "maiden" - ] - }, - "_use": { - "description": "Extensions for use", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "Specifies the entire name as it should be displayed e.g. on an application UI. This may be provided instead of or as well as the specific parts.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - }, - "family": { - "description": "The part of a name that links to the genealogy. In some cultures (e.g. Eritrea) the family name of a son is the first name of his father.", - "$ref": "#/definitions/string" - }, - "_family": { - "description": "Extensions for family", - "$ref": "#/definitions/Element" - }, - "given": { - "description": "Given name.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_given": { - "description": "Extensions for given", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "prefix": { - "description": "Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the start of the name.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_prefix": { - "description": "Extensions for prefix", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "suffix": { - "description": "Part of the name that is acquired as a title due to academic, legal, employment or nobility status, etc. and that appears at the end of the name.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_suffix": { - "description": "Extensions for suffix", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "period": { - "description": "Indicates the period of time when this name was valid for the named person.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "Address": { - "description": "An address expressed using postal conventions (as opposed to GPS or other location definition formats). This data type may be used to convey addresses for use in delivering mail as well as for visiting locations which might not be valid for mail delivery. There are a variety of postal address formats defined around the world.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "use": { - "description": "The purpose of this address.", - "enum": [ - "home", - "work", - "temp", - "old", - "billing" - ] - }, - "_use": { - "description": "Extensions for use", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Distinguishes between physical addresses (those you can visit) and mailing addresses (e.g. PO Boxes and care-of addresses). Most addresses are both.", - "enum": [ - "postal", - "physical", - "both" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "Specifies the entire address as it should be displayed e.g. on a postal label. This may be provided instead of or as well as the specific parts.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - }, - "line": { - "description": "This component contains the house number, apartment number, street name, street direction, P.O. Box number, delivery hints, and similar address information.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_line": { - "description": "Extensions for line", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "city": { - "description": "The name of the city, town, suburb, village or other community or delivery center.", - "$ref": "#/definitions/string" - }, - "_city": { - "description": "Extensions for city", - "$ref": "#/definitions/Element" - }, - "district": { - "description": "The name of the administrative area (county).", - "$ref": "#/definitions/string" - }, - "_district": { - "description": "Extensions for district", - "$ref": "#/definitions/Element" - }, - "state": { - "description": "Sub-unit of a country with limited sovereignty in a federally organized country. A code may be used if codes are in common use (e.g. US 2 letter state codes).", - "$ref": "#/definitions/string" - }, - "_state": { - "description": "Extensions for state", - "$ref": "#/definitions/Element" - }, - "postalCode": { - "description": "A postal code designating a region defined by the postal service.", - "$ref": "#/definitions/string" - }, - "_postalCode": { - "description": "Extensions for postalCode", - "$ref": "#/definitions/Element" - }, - "country": { - "description": "Country - a nation as commonly understood or generally accepted.", - "$ref": "#/definitions/string" - }, - "_country": { - "description": "Extensions for country", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "Time period when address was/is in use.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "ContactPoint": { - "description": "Details for all kinds of technology mediated contact points for a person or organization, including telephone, email, etc.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "system": { - "description": "Telecommunications form for contact point - what communications system is required to make use of the contact.", - "enum": [ - "phone", - "fax", - "email", - "pager", - "url", - "sms", - "other" - ] - }, - "_system": { - "description": "Extensions for system", - "$ref": "#/definitions/Element" - }, - "value": { - "description": "The actual contact point details, in a form that is meaningful to the designated communication system (i.e. phone number or email address).", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "use": { - "description": "Identifies the purpose for the contact point.", - "enum": [ - "home", - "work", - "temp", - "old", - "mobile" - ] - }, - "_use": { - "description": "Extensions for use", - "$ref": "#/definitions/Element" - }, - "rank": { - "description": "Specifies a preferred order in which to use a set of contacts. ContactPoints with lower rank values are more preferred than those with higher rank values.", - "$ref": "#/definitions/positiveInt" - }, - "_rank": { - "description": "Extensions for rank", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "Time period when the contact point was/is in use.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "Timing": { - "description": "Specifies an event that may occur multiple times. Timing schedules are used to record when things are planned, expected or requested to occur. The most common usage is in dosage instructions for medications. They are also used when planning care of various kinds, and may be used for reporting the schedule to which past regular activities were carried out.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "event": { - "description": "Identifies specific times when the event occurs.", - "items": { - "$ref": "#/definitions/dateTime" - }, - "type": "array" - }, - "_event": { - "description": "Extensions for event", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "repeat": { - "description": "A set of rules that describe when the event is scheduled.", - "$ref": "#/definitions/Timing_Repeat" - }, - "code": { - "description": "A code for the timing schedule (or just text in code.text). Some codes such as BID are ubiquitous, but many institutions define their own additional codes. If a code is provided, the code is understood to be a complete statement of whatever is specified in the structured timing data, and either the code or the data may be used to interpret the Timing, with the exception that .repeat.bounds still applies over the code (and is not contained in the code).", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "Timing_Repeat": { - "description": "Specifies an event that may occur multiple times. Timing schedules are used to record when things are planned, expected or requested to occur. The most common usage is in dosage instructions for medications. They are also used when planning care of various kinds, and may be used for reporting the schedule to which past regular activities were carried out.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "boundsDuration": { - "description": "Either a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedule.", - "$ref": "#/definitions/Duration" - }, - "boundsRange": { - "description": "Either a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedule.", - "$ref": "#/definitions/Range" - }, - "boundsPeriod": { - "description": "Either a duration for the length of the timing schedule, a range of possible length, or outer bounds for start and/or end limits of the timing schedule.", - "$ref": "#/definitions/Period" - }, - "count": { - "description": "A total count of the desired number of repetitions across the duration of the entire timing specification. If countMax is present, this element indicates the lower bound of the allowed range of count values.", - "$ref": "#/definitions/positiveInt" - }, - "_count": { - "description": "Extensions for count", - "$ref": "#/definitions/Element" - }, - "countMax": { - "description": "If present, indicates that the count is a range - so to perform the action between [count] and [countMax] times.", - "$ref": "#/definitions/positiveInt" - }, - "_countMax": { - "description": "Extensions for countMax", - "$ref": "#/definitions/Element" - }, - "duration": { - "description": "How long this thing happens for when it happens. If durationMax is present, this element indicates the lower bound of the allowed range of the duration.", - "$ref": "#/definitions/decimal" - }, - "_duration": { - "description": "Extensions for duration", - "$ref": "#/definitions/Element" - }, - "durationMax": { - "description": "If present, indicates that the duration is a range - so to perform the action between [duration] and [durationMax] time length.", - "$ref": "#/definitions/decimal" - }, - "_durationMax": { - "description": "Extensions for durationMax", - "$ref": "#/definitions/Element" - }, - "durationUnit": { - "description": "The units of time for the duration, in UCUM units.", - "enum": [ - "s", - "min", - "h", - "d", - "wk", - "mo", - "a" - ] - }, - "_durationUnit": { - "description": "Extensions for durationUnit", - "$ref": "#/definitions/Element" - }, - "frequency": { - "description": "The number of times to repeat the action within the specified period. If frequencyMax is present, this element indicates the lower bound of the allowed range of the frequency.", - "$ref": "#/definitions/positiveInt" - }, - "_frequency": { - "description": "Extensions for frequency", - "$ref": "#/definitions/Element" - }, - "frequencyMax": { - "description": "If present, indicates that the frequency is a range - so to repeat between [frequency] and [frequencyMax] times within the period or period range.", - "$ref": "#/definitions/positiveInt" - }, - "_frequencyMax": { - "description": "Extensions for frequencyMax", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "Indicates the duration of time over which repetitions are to occur; e.g. to express \"3 times per day\", 3 would be the frequency and \"1 day\" would be the period. If periodMax is present, this element indicates the lower bound of the allowed range of the period length.", - "$ref": "#/definitions/decimal" - }, - "_period": { - "description": "Extensions for period", - "$ref": "#/definitions/Element" - }, - "periodMax": { - "description": "If present, indicates that the period is a range from [period] to [periodMax], allowing expressing concepts such as \"do this once every 3-5 days.", - "$ref": "#/definitions/decimal" - }, - "_periodMax": { - "description": "Extensions for periodMax", - "$ref": "#/definitions/Element" - }, - "periodUnit": { - "description": "The units of time for the period in UCUM units.", - "enum": [ - "s", - "min", - "h", - "d", - "wk", - "mo", - "a" - ] - }, - "_periodUnit": { - "description": "Extensions for periodUnit", - "$ref": "#/definitions/Element" - }, - "dayOfWeek": { - "description": "If one or more days of week is provided, then the action happens only on the specified day(s).", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_dayOfWeek": { - "description": "Extensions for dayOfWeek", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "timeOfDay": { - "description": "Specified time of day for action to take place.", - "items": { - "$ref": "#/definitions/time" - }, - "type": "array" - }, - "_timeOfDay": { - "description": "Extensions for timeOfDay", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "when": { - "description": "An approximate time period during the day, potentially linked to an event of daily living that indicates when the action should occur.", - "items": { - "enum": [ - "MORN", - "MORN.early", - "MORN.late", - "NOON", - "AFT", - "AFT.early", - "AFT.late", - "EVE", - "EVE.early", - "EVE.late", - "NIGHT", - "PHS", - "HS", - "WAKE", - "C", - "CM", - "CD", - "CV", - "AC", - "ACM", - "ACD", - "ACV", - "PC", - "PCM", - "PCD", - "PCV" - ] - }, - "type": "array" - }, - "_when": { - "description": "Extensions for when", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "offset": { - "description": "The number of minutes from the event. If the event code does not indicate whether the minutes is before or after the event, then the offset is assumed to be after the event.", - "$ref": "#/definitions/unsignedInt" - }, - "_offset": { - "description": "Extensions for offset", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Meta": { - "description": "The metadata about a resource. This is content in the resource that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "versionId": { - "description": "The version specific identifier, as it appears in the version portion of the URL. This value changes when the resource is created, updated, or deleted.", - "$ref": "#/definitions/id" - }, - "_versionId": { - "description": "Extensions for versionId", - "$ref": "#/definitions/Element" - }, - "lastUpdated": { - "description": "When the resource last changed - e.g. when the version changed.", - "$ref": "#/definitions/instant" - }, - "_lastUpdated": { - "description": "Extensions for lastUpdated", - "$ref": "#/definitions/Element" - }, - "source": { - "description": "A uri that identifies the source system of the resource. This provides a minimal amount of [[[Provenance]]] information that can be used to track or differentiate the source of information in the resource. The source may identify another FHIR server, document, message, database, etc.", - "$ref": "#/definitions/uri" - }, - "_source": { - "description": "Extensions for source", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "A list of profiles (references to [[[StructureDefinition]]] resources) that this resource claims to conform to. The URL is a reference to [[[StructureDefinition.url]]].", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "security": { - "description": "Security labels applied to this resource. These tags connect specific resources to the overall security policy and infrastructure.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "tag": { - "description": "Tags applied to this resource. Tags are intended to be used to identify and relate resources to process and workflow, and applications are not required to consider the tags when interpreting the meaning of a resource.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ContactDetail": { - "description": "Specifies contact information for a person or organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The name of an individual to contact.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "telecom": { - "description": "The contact details for the individual (if a name was provided) or the organization.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Contributor": { - "description": "A contributor to the content of a knowledge asset, including authors, editors, reviewers, and endorsers.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of contributor.", - "enum": [ - "author", - "editor", - "reviewer", - "endorser" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "The name of the individual or organization responsible for the contribution.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the contributor.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "DataRequirement": { - "description": "Describes a required data item for evaluation in terms of the type of data, and optional code or date-based filters of the data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of the required data, specified as the type name of a resource. For profiles, this value is set to the type of the base resource of the profile.", - "$ref": "#/definitions/code" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "The profile of the required data, specified as the uri of the profile definition.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "subjectCodeableConcept": { - "description": "The intended subjects of the data requirement. If this element is not provided, a Patient subject is assumed.", - "$ref": "#/definitions/CodeableConcept" - }, - "subjectReference": { - "description": "The intended subjects of the data requirement. If this element is not provided, a Patient subject is assumed.", - "$ref": "#/definitions/Reference" - }, - "mustSupport": { - "description": "Indicates that specific elements of the type are referenced by the knowledge module and must be supported by the consumer in order to obtain an effective evaluation. This does not mean that a value is required for this element, only that the consuming system must understand the element and be able to provide values for it if they are available. \n\nThe value of mustSupport SHALL be a FHIRPath resolveable on the type of the DataRequirement. The path SHALL consist only of identifiers, constant indexers, and .resolve() (see the [Simple FHIRPath Profile](fhirpath.html#simple) for full details).", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_mustSupport": { - "description": "Extensions for mustSupport", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "codeFilter": { - "description": "Code filters specify additional constraints on the data, specifying the value set of interest for a particular element of the data. Each code filter defines an additional constraint on the data, i.e. code filters are AND\u0027ed, not OR\u0027ed.", - "items": { - "$ref": "#/definitions/DataRequirement_CodeFilter" - }, - "type": "array" - }, - "dateFilter": { - "description": "Date filters specify additional constraints on the data in terms of the applicable date range for specific elements. Each date filter specifies an additional constraint on the data, i.e. date filters are AND\u0027ed, not OR\u0027ed.", - "items": { - "$ref": "#/definitions/DataRequirement_DateFilter" - }, - "type": "array" - }, - "limit": { - "description": "Specifies a maximum number of results that are required (uses the _count search parameter).", - "$ref": "#/definitions/positiveInt" - }, - "_limit": { - "description": "Extensions for limit", - "$ref": "#/definitions/Element" - }, - "sort": { - "description": "Specifies the order of the results to be returned.", - "items": { - "$ref": "#/definitions/DataRequirement_Sort" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "DataRequirement_CodeFilter": { - "description": "Describes a required data item for evaluation in terms of the type of data, and optional code or date-based filters of the data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "path": { - "description": "The code-valued attribute of the filter. The specified path SHALL be a FHIRPath resolveable on the specified type of the DataRequirement, and SHALL consist only of identifiers, constant indexers, and .resolve(). The path is allowed to contain qualifiers (.) to traverse sub-elements, as well as indexers ([x]) to traverse multiple-cardinality sub-elements (see the [Simple FHIRPath Profile](fhirpath.html#simple) for full details). Note that the index must be an integer constant. The path must resolve to an element of type code, Coding, or CodeableConcept.", - "$ref": "#/definitions/string" - }, - "_path": { - "description": "Extensions for path", - "$ref": "#/definitions/Element" - }, - "searchParam": { - "description": "A token parameter that refers to a search parameter defined on the specified type of the DataRequirement, and which searches on elements of type code, Coding, or CodeableConcept.", - "$ref": "#/definitions/string" - }, - "_searchParam": { - "description": "Extensions for searchParam", - "$ref": "#/definitions/Element" - }, - "valueSet": { - "description": "The valueset for the code filter. The valueSet and code elements are additive. If valueSet is specified, the filter will return only those data items for which the value of the code-valued element specified in the path is a member of the specified valueset.", - "$ref": "#/definitions/canonical" - }, - "code": { - "description": "The codes for the code filter. If values are given, the filter will return only those data items for which the code-valued attribute specified by the path has a value that is one of the specified codes. If codes are specified in addition to a value set, the filter returns items matching a code in the value set or one of the specified codes.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "DataRequirement_DateFilter": { - "description": "Describes a required data item for evaluation in terms of the type of data, and optional code or date-based filters of the data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "path": { - "description": "The date-valued attribute of the filter. The specified path SHALL be a FHIRPath resolveable on the specified type of the DataRequirement, and SHALL consist only of identifiers, constant indexers, and .resolve(). The path is allowed to contain qualifiers (.) to traverse sub-elements, as well as indexers ([x]) to traverse multiple-cardinality sub-elements (see the [Simple FHIRPath Profile](fhirpath.html#simple) for full details). Note that the index must be an integer constant. The path must resolve to an element of type date, dateTime, Period, Schedule, or Timing.", - "$ref": "#/definitions/string" - }, - "_path": { - "description": "Extensions for path", - "$ref": "#/definitions/Element" - }, - "searchParam": { - "description": "A date parameter that refers to a search parameter defined on the specified type of the DataRequirement, and which searches on elements of type date, dateTime, Period, Schedule, or Timing.", - "$ref": "#/definitions/string" - }, - "_searchParam": { - "description": "Extensions for searchParam", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "The value of the filter. If period is specified, the filter will return only those data items that fall within the bounds determined by the Period, inclusive of the period boundaries. If dateTime is specified, the filter will return only those data items that are equal to the specified dateTime. If a Duration is specified, the filter will return only those data items that fall within Duration before now.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valuePeriod": { - "description": "The value of the filter. If period is specified, the filter will return only those data items that fall within the bounds determined by the Period, inclusive of the period boundaries. If dateTime is specified, the filter will return only those data items that are equal to the specified dateTime. If a Duration is specified, the filter will return only those data items that fall within Duration before now.", - "$ref": "#/definitions/Period" - }, - "valueDuration": { - "description": "The value of the filter. If period is specified, the filter will return only those data items that fall within the bounds determined by the Period, inclusive of the period boundaries. If dateTime is specified, the filter will return only those data items that are equal to the specified dateTime. If a Duration is specified, the filter will return only those data items that fall within Duration before now.", - "$ref": "#/definitions/Duration" - } - }, - "additionalProperties": false - }, - "DataRequirement_Sort": { - "description": "Describes a required data item for evaluation in terms of the type of data, and optional code or date-based filters of the data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "path": { - "description": "The attribute of the sort. The specified path must be resolvable from the type of the required data. The path is allowed to contain qualifiers (.) to traverse sub-elements, as well as indexers ([x]) to traverse multiple-cardinality sub-elements. Note that the index must be an integer constant.", - "$ref": "#/definitions/string" - }, - "_path": { - "description": "Extensions for path", - "$ref": "#/definitions/Element" - }, - "direction": { - "description": "The direction of the sort, ascending or descending.", - "enum": [ - "ascending", - "descending" - ] - }, - "_direction": { - "description": "Extensions for direction", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ParameterDefinition": { - "description": "The parameters to the module. This collection specifies both the input and output parameters. Input parameters are provided by the caller as part of the $evaluate operation. Output parameters are included in the GuidanceResponse.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The name of the parameter used to allow access to the value of the parameter in evaluation contexts.", - "$ref": "#/definitions/code" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "use": { - "description": "Whether the parameter is input or output for the module.", - "$ref": "#/definitions/code" - }, - "_use": { - "description": "Extensions for use", - "$ref": "#/definitions/Element" - }, - "min": { - "description": "The minimum number of times this parameter SHALL appear in the request or response.", - "$ref": "#/definitions/integer" - }, - "_min": { - "description": "Extensions for min", - "$ref": "#/definitions/Element" - }, - "max": { - "description": "The maximum number of times this element is permitted to appear in the request or response.", - "$ref": "#/definitions/string" - }, - "_max": { - "description": "Extensions for max", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "A brief discussion of what the parameter is for and how it is used by the module.", - "$ref": "#/definitions/string" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type of the parameter.", - "$ref": "#/definitions/code" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "If specified, this indicates a profile that the input data must conform to, or that the output data will conform to.", - "$ref": "#/definitions/canonical" - } - }, - "additionalProperties": false - }, - "RelatedArtifact": { - "description": "Related artifacts such as additional documentation, justification, or bibliographic references.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of relationship to the related artifact.", - "enum": [ - "documentation", - "justification", - "citation", - "predecessor", - "successor", - "derived-from", - "depends-on", - "composed-of" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "label": { - "description": "A short label that can be used to reference the citation from elsewhere in the containing artifact, such as a footnote index.", - "$ref": "#/definitions/string" - }, - "_label": { - "description": "Extensions for label", - "$ref": "#/definitions/Element" - }, - "display": { - "description": "A brief description of the document or knowledge resource being referenced, suitable for display to a consumer.", - "$ref": "#/definitions/string" - }, - "_display": { - "description": "Extensions for display", - "$ref": "#/definitions/Element" - }, - "citation": { - "description": "A bibliographic citation for the related artifact. This text SHOULD be formatted according to an accepted citation format.", - "$ref": "#/definitions/markdown" - }, - "_citation": { - "description": "Extensions for citation", - "$ref": "#/definitions/Element" - }, - "url": { - "description": "A url for the artifact that can be followed to access the actual content.", - "$ref": "#/definitions/url" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "document": { - "description": "The document being referenced, represented as an attachment. This is exclusive with the resource element.", - "$ref": "#/definitions/Attachment" - }, - "resource": { - "description": "The related resource, such as a library, value set, profile, or other knowledge resource.", - "$ref": "#/definitions/canonical" - } - }, - "additionalProperties": false - }, - "TriggerDefinition": { - "description": "A description of a triggering event. Triggering events can be named events, data events, or periodic, as determined by the type element.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of triggering event.", - "enum": [ - "named-event", - "periodic", - "data-changed", - "data-added", - "data-modified", - "data-removed", - "data-accessed", - "data-access-ended" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A formal name for the event. This may be an absolute URI that identifies the event formally (e.g. from a trigger registry), or a simple relative URI that identifies the event in a local context.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "timingTiming": { - "description": "The timing of the event (if this is a periodic trigger).", - "$ref": "#/definitions/Timing" - }, - "timingReference": { - "description": "The timing of the event (if this is a periodic trigger).", - "$ref": "#/definitions/Reference" - }, - "timingDate": { - "description": "The timing of the event (if this is a periodic trigger).", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_timingDate": { - "description": "Extensions for timingDate", - "$ref": "#/definitions/Element" - }, - "timingDateTime": { - "description": "The timing of the event (if this is a periodic trigger).", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_timingDateTime": { - "description": "Extensions for timingDateTime", - "$ref": "#/definitions/Element" - }, - "data": { - "description": "The triggering data of the event (if this is a data trigger). If more than one data is requirement is specified, then all the data requirements must be true.", - "items": { - "$ref": "#/definitions/DataRequirement" - }, - "type": "array" - }, - "condition": { - "description": "A boolean-valued expression that is evaluated in the context of the container of the trigger definition and returns whether or not the trigger fires.", - "$ref": "#/definitions/Expression" - } - }, - "additionalProperties": false - }, - "UsageContext": { - "description": "Specifies clinical/business/etc. metadata that can be used to retrieve, index and/or categorize an artifact. This metadata can either be specific to the applicable population (e.g., age category, DRG) or the specific context of care (e.g., venue, care setting, provider of care).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A code that identifies the type of context being specified by this usage context.", - "$ref": "#/definitions/Coding" - }, - "valueCodeableConcept": { - "description": "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueQuantity": { - "description": "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", - "$ref": "#/definitions/Quantity" - }, - "valueRange": { - "description": "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", - "$ref": "#/definitions/Range" - }, - "valueReference": { - "description": "A value that defines the context specified in this context of use. The interpretation of the value is defined by the code.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "Dosage": { - "description": "Indicates how the medication is/was taken or should be taken by the patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "Indicates the order in which the dosage instructions should be applied or interpreted.", - "$ref": "#/definitions/integer" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "Free text dosage instructions e.g. SIG.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - }, - "additionalInstruction": { - "description": "Supplemental instructions to the patient on how to take the medication (e.g. \"with meals\" or\"take half to one hour before food\") or warnings for the patient about the medication (e.g. \"may cause drowsiness\" or \"avoid exposure of skin to direct sunlight or sunlamps\").", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "patientInstruction": { - "description": "Instructions in terms that are understood by the patient or consumer.", - "$ref": "#/definitions/string" - }, - "_patientInstruction": { - "description": "Extensions for patientInstruction", - "$ref": "#/definitions/Element" - }, - "timing": { - "description": "When medication should be administered.", - "$ref": "#/definitions/Timing" - }, - "asNeededBoolean": { - "description": "Indicates whether the Medication is only taken when needed within a specific dosing schedule (Boolean option), or it indicates the precondition for taking the Medication (CodeableConcept).", - "pattern": "^true|false$", - "type": "boolean" - }, - "_asNeededBoolean": { - "description": "Extensions for asNeededBoolean", - "$ref": "#/definitions/Element" - }, - "asNeededCodeableConcept": { - "description": "Indicates whether the Medication is only taken when needed within a specific dosing schedule (Boolean option), or it indicates the precondition for taking the Medication (CodeableConcept).", - "$ref": "#/definitions/CodeableConcept" - }, - "site": { - "description": "Body site to administer to.", - "$ref": "#/definitions/CodeableConcept" - }, - "route": { - "description": "How drug should enter body.", - "$ref": "#/definitions/CodeableConcept" - }, - "method": { - "description": "Technique for administering medication.", - "$ref": "#/definitions/CodeableConcept" - }, - "doseAndRate": { - "description": "The amount of medication administered.", - "items": { - "$ref": "#/definitions/Dosage_DoseAndRate" - }, - "type": "array" - }, - "maxDosePerPeriod": { - "description": "Upper limit on medication per unit of time.", - "$ref": "#/definitions/Ratio" - }, - "maxDosePerAdministration": { - "description": "Upper limit on medication per administration.", - "$ref": "#/definitions/Quantity" - }, - "maxDosePerLifetime": { - "description": "Upper limit on medication per lifetime of the patient.", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false - }, - "Dosage_DoseAndRate": { - "description": "Indicates how the medication is/was taken or should be taken by the patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The kind of dose or rate specified, for example, ordered or calculated.", - "$ref": "#/definitions/CodeableConcept" - }, - "doseRange": { - "description": "Amount of medication per dose.", - "$ref": "#/definitions/Range" - }, - "doseQuantity": { - "description": "Amount of medication per dose.", - "$ref": "#/definitions/Quantity" - }, - "rateRatio": { - "description": "Amount of medication per unit of time.", - "$ref": "#/definitions/Ratio" - }, - "rateRange": { - "description": "Amount of medication per unit of time.", - "$ref": "#/definitions/Range" - }, - "rateQuantity": { - "description": "Amount of medication per unit of time.", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false - }, - "Population": { - "description": "A populatioof people with some set of grouping criteria.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "ageRange": { - "description": "The age of the specific population.", - "$ref": "#/definitions/Range" - }, - "ageCodeableConcept": { - "description": "The age of the specific population.", - "$ref": "#/definitions/CodeableConcept" - }, - "gender": { - "description": "The gender of the specific population.", - "$ref": "#/definitions/CodeableConcept" - }, - "race": { - "description": "Race of the specific population.", - "$ref": "#/definitions/CodeableConcept" - }, - "physiologicalCondition": { - "description": "The existing physiological conditions of the specific population to which this applies.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "ProductShelfLife": { - "description": "The shelf-life and storage information for a medicinal product item or container can be described using this class.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique identifier for the packaged Medicinal Product.", - "$ref": "#/definitions/Identifier" - }, - "type": { - "description": "This describes the shelf life, taking into account various scenarios such as shelf life of the packaged Medicinal Product itself, shelf life after transformation where necessary and shelf life after the first opening of a bottle, etc. The shelf life type shall be specified using an appropriate controlled vocabulary The controlled term and the controlled term identifier shall be specified.", - "$ref": "#/definitions/CodeableConcept" - }, - "period": { - "description": "The shelf life time period can be specified using a numerical value for the period of time and its unit of time measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.", - "$ref": "#/definitions/Quantity" - }, - "specialPrecautionsForStorage": { - "description": "Special precautions for storage, if any, can be specified using an appropriate controlled vocabulary The controlled term and the controlled term identifier shall be specified.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "period", - "type" - ] - }, - "ProdCharacteristic": { - "description": "The marketing status describes the date when a medicinal product is actually put on the market or the date as of which it is no longer available.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "height": { - "description": "Where applicable, the height can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.", - "$ref": "#/definitions/Quantity" - }, - "width": { - "description": "Where applicable, the width can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.", - "$ref": "#/definitions/Quantity" - }, - "depth": { - "description": "Where applicable, the depth can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.", - "$ref": "#/definitions/Quantity" - }, - "weight": { - "description": "Where applicable, the weight can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.", - "$ref": "#/definitions/Quantity" - }, - "nominalVolume": { - "description": "Where applicable, the nominal volume can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.", - "$ref": "#/definitions/Quantity" - }, - "externalDiameter": { - "description": "Where applicable, the external diameter can be specified using a numerical value and its unit of measurement The unit of measurement shall be specified in accordance with ISO 11240 and the resulting terminology The symbol and the symbol identifier shall be used.", - "$ref": "#/definitions/Quantity" - }, - "shape": { - "description": "Where applicable, the shape can be specified An appropriate controlled vocabulary shall be used The term and the term identifier shall be used.", - "$ref": "#/definitions/string" - }, - "_shape": { - "description": "Extensions for shape", - "$ref": "#/definitions/Element" - }, - "color": { - "description": "Where applicable, the color can be specified An appropriate controlled vocabulary shall be used The term and the term identifier shall be used.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_color": { - "description": "Extensions for color", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "imprint": { - "description": "Where applicable, the imprint can be specified as text.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_imprint": { - "description": "Extensions for imprint", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "image": { - "description": "Where applicable, the image can be provided The format of the image attachment shall be specified by regional implementations.", - "items": { - "$ref": "#/definitions/Attachment" - }, - "type": "array" - }, - "scoring": { - "description": "Where applicable, the scoring can be specified An appropriate controlled vocabulary shall be used The term and the term identifier shall be used.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "MarketingStatus": { - "description": "The marketing status describes the date when a medicinal product is actually put on the market or the date as of which it is no longer available.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "country": { - "description": "The country in which the marketing authorisation has been granted shall be specified It should be specified using the ISO 3166 ‑ 1 alpha-2 code elements.", - "$ref": "#/definitions/CodeableConcept" - }, - "jurisdiction": { - "description": "Where a Medicines Regulatory Agency has granted a marketing authorisation for which specific provisions within a jurisdiction apply, the jurisdiction can be specified using an appropriate controlled terminology The controlled term and the controlled term identifier shall be specified.", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "This attribute provides information on the status of the marketing of the medicinal product See ISO/TS 20443 for more information and examples.", - "$ref": "#/definitions/CodeableConcept" - }, - "dateRange": { - "description": "The date when the Medicinal Product is placed on the market by the Marketing Authorisation Holder (or where applicable, the manufacturer/distributor) in a country and/or jurisdiction shall be provided A complete date consisting of day, month and year shall be specified using the ISO 8601 date format NOTE “Placed on the market” refers to the release of the Medicinal Product into the distribution chain.", - "$ref": "#/definitions/Period" - }, - "restoreDate": { - "description": "The date when the Medicinal Product is placed on the market by the Marketing Authorisation Holder (or where applicable, the manufacturer/distributor) in a country and/or jurisdiction shall be provided A complete date consisting of day, month and year shall be specified using the ISO 8601 date format NOTE “Placed on the market” refers to the release of the Medicinal Product into the distribution chain.", - "$ref": "#/definitions/dateTime" - }, - "_restoreDate": { - "description": "Extensions for restoreDate", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "country", - "dateRange", - "status" - ] - }, - "SubstanceAmount": { - "description": "Chemical substances are a single substance type whose primary defining element is the molecular structure. Chemical substances shall be defined on the basis of their complete covalent molecular structure; the presence of a salt (counter-ion) and/or solvates (water, alcohols) is also captured. Purity, grade, physical form or particle size are not taken into account in the definition of a chemical substance or in the assignment of a Substance ID.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "amountQuantity": { - "description": "Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field.", - "$ref": "#/definitions/Quantity" - }, - "amountRange": { - "description": "Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field.", - "$ref": "#/definitions/Range" - }, - "amountString": { - "description": "Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_amountString": { - "description": "Extensions for amountString", - "$ref": "#/definitions/Element" - }, - "amountType": { - "description": "Most elements that require a quantitative value will also have a field called amount type. Amount type should always be specified because the actual value of the amount is often dependent on it. EXAMPLE: In capturing the actual relative amounts of substances or molecular fragments it is essential to indicate whether the amount refers to a mole ratio or weight ratio. For any given element an effort should be made to use same the amount type for all related definitional elements.", - "$ref": "#/definitions/CodeableConcept" - }, - "amountText": { - "description": "A textual comment on a numeric value.", - "$ref": "#/definitions/string" - }, - "_amountText": { - "description": "Extensions for amountText", - "$ref": "#/definitions/Element" - }, - "referenceRange": { - "description": "Reference range of possible or expected values.", - "$ref": "#/definitions/SubstanceAmount_ReferenceRange" - } - }, - "additionalProperties": false - }, - "SubstanceAmount_ReferenceRange": { - "description": "Chemical substances are a single substance type whose primary defining element is the molecular structure. Chemical substances shall be defined on the basis of their complete covalent molecular structure; the presence of a salt (counter-ion) and/or solvates (water, alcohols) is also captured. Purity, grade, physical form or particle size are not taken into account in the definition of a chemical substance or in the assignment of a Substance ID.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "lowLimit": { - "description": "Lower limit possible or expected.", - "$ref": "#/definitions/Quantity" - }, - "highLimit": { - "description": "Upper limit possible or expected.", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false - }, - "Expression": { - "description": "A expression that is evaluated in a specified context and returns a value. The context of use of the expression must specify the context in which the expression is evaluated, and how the result of the expression is used.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "A brief, natural language description of the condition that effectively communicates the intended semantics.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A short name assigned to the expression to allow for multiple reuse of the expression in the context where it is defined.", - "$ref": "#/definitions/id" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The media type of the language for the expression.", - "enum": [ - "text/cql", - "text/fhirpath", - "application/x-fhir-query" - ] - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "An expression in the specified language that returns a value.", - "$ref": "#/definitions/string" - }, - "_expression": { - "description": "Extensions for expression", - "$ref": "#/definitions/Element" - }, - "reference": { - "description": "A URI that defines where the expression is found.", - "$ref": "#/definitions/uri" - }, - "_reference": { - "description": "Extensions for reference", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ElementDefinition": { - "description": "Captures constraints on each element within the resource, profile, or extension.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "path": { - "description": "The path identifies the element and is expressed as a \".\"-separated list of ancestor elements, beginning with the name of the resource or extension.", - "$ref": "#/definitions/string" - }, - "_path": { - "description": "Extensions for path", - "$ref": "#/definitions/Element" - }, - "representation": { - "description": "Codes that define how this element is represented in instances, when the deviation varies from the normal case.", - "items": { - "enum": [ - "xmlAttr", - "xmlText", - "typeAttr", - "cdaText", - "xhtml" - ] - }, - "type": "array" - }, - "_representation": { - "description": "Extensions for representation", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "sliceName": { - "description": "The name of this element definition slice, when slicing is working. The name must be a token with no dots or spaces. This is a unique name referring to a specific set of constraints applied to this element, used to provide a name to different slices of the same element.", - "$ref": "#/definitions/string" - }, - "_sliceName": { - "description": "Extensions for sliceName", - "$ref": "#/definitions/Element" - }, - "sliceIsConstraining": { - "description": "If true, indicates that this slice definition is constraining a slice definition with the same name in an inherited profile. If false, the slice is not overriding any slice in an inherited profile. If missing, the slice might or might not be overriding a slice in an inherited profile, depending on the sliceName.", - "$ref": "#/definitions/boolean" - }, - "_sliceIsConstraining": { - "description": "Extensions for sliceIsConstraining", - "$ref": "#/definitions/Element" - }, - "label": { - "description": "A single preferred label which is the text to display beside the element indicating its meaning or to use to prompt for the element in a user display or form.", - "$ref": "#/definitions/string" - }, - "_label": { - "description": "Extensions for label", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A code that has the same meaning as the element in a particular terminology.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "slicing": { - "description": "Indicates that the element is sliced into a set of alternative definitions (i.e. in a structure definition, there are multiple different constraints on a single element in the base resource). Slicing can be used in any resource that has cardinality ..* on the base resource, or any resource with a choice of types. The set of slices is any elements that come after this in the element sequence that have the same path, until a shorter path occurs (the shorter path terminates the set).", - "$ref": "#/definitions/ElementDefinition_Slicing" - }, - "short": { - "description": "A concise description of what this element means (e.g. for use in autogenerated summaries).", - "$ref": "#/definitions/string" - }, - "_short": { - "description": "Extensions for short", - "$ref": "#/definitions/Element" - }, - "definition": { - "description": "Provides a complete explanation of the meaning of the data element for human readability. For the case of elements derived from existing elements (e.g. constraints), the definition SHALL be consistent with the base definition, but convey the meaning of the element in the particular context of use of the resource. (Note: The text you are reading is specified in ElementDefinition.definition).", - "$ref": "#/definitions/markdown" - }, - "_definition": { - "description": "Extensions for definition", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "Explanatory notes and implementation guidance about the data element, including notes about how to use the data properly, exceptions to proper use, etc. (Note: The text you are reading is specified in ElementDefinition.comment).", - "$ref": "#/definitions/markdown" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - }, - "requirements": { - "description": "This element is for traceability of why the element was created and why the constraints exist as they do. This may be used to point to source materials or specifications that drove the structure of this element.", - "$ref": "#/definitions/markdown" - }, - "_requirements": { - "description": "Extensions for requirements", - "$ref": "#/definitions/Element" - }, - "alias": { - "description": "Identifies additional names by which this element might also be known.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_alias": { - "description": "Extensions for alias", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "min": { - "description": "The minimum number of times this element SHALL appear in the instance.", - "$ref": "#/definitions/unsignedInt" - }, - "_min": { - "description": "Extensions for min", - "$ref": "#/definitions/Element" - }, - "max": { - "description": "The maximum number of times this element is permitted to appear in the instance.", - "$ref": "#/definitions/string" - }, - "_max": { - "description": "Extensions for max", - "$ref": "#/definitions/Element" - }, - "base": { - "description": "Information about the base definition of the element, provided to make it unnecessary for tools to trace the deviation of the element through the derived and related profiles. When the element definition is not the original definition of an element - i.g. either in a constraint on another type, or for elements from a super type in a snap shot - then the information in provided in the element definition may be different to the base definition. On the original definition of the element, it will be same.", - "$ref": "#/definitions/ElementDefinition_Base" - }, - "contentReference": { - "description": "Identifies an element defined elsewhere in the definition whose content rules should be applied to the current element. ContentReferences bring across all the rules that are in the ElementDefinition for the element, including definitions, cardinality constraints, bindings, invariants etc.", - "$ref": "#/definitions/uri" - }, - "_contentReference": { - "description": "Extensions for contentReference", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The data type or resource that the value of this element is permitted to be.", - "items": { - "$ref": "#/definitions/ElementDefinition_Type" - }, - "type": "array" - }, - "defaultValueBase64Binary": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^(\\s*([0-9a-zA-Z\\+/\u003d]){4}\\s*)+$", - "type": "string" - }, - "_defaultValueBase64Binary": { - "description": "Extensions for defaultValueBase64Binary", - "$ref": "#/definitions/Element" - }, - "defaultValueBoolean": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^true|false$", - "type": "boolean" - }, - "_defaultValueBoolean": { - "description": "Extensions for defaultValueBoolean", - "$ref": "#/definitions/Element" - }, - "defaultValueCanonical": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^\\S*$", - "type": "string" - }, - "_defaultValueCanonical": { - "description": "Extensions for defaultValueCanonical", - "$ref": "#/definitions/Element" - }, - "defaultValueCode": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string" - }, - "_defaultValueCode": { - "description": "Extensions for defaultValueCode", - "$ref": "#/definitions/Element" - }, - "defaultValueDate": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_defaultValueDate": { - "description": "Extensions for defaultValueDate", - "$ref": "#/definitions/Element" - }, - "defaultValueDateTime": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_defaultValueDateTime": { - "description": "Extensions for defaultValueDateTime", - "$ref": "#/definitions/Element" - }, - "defaultValueDecimal": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_defaultValueDecimal": { - "description": "Extensions for defaultValueDecimal", - "$ref": "#/definitions/Element" - }, - "defaultValueId": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^[A-Za-z0-9\\-\\.]{1,64}$", - "type": "string" - }, - "_defaultValueId": { - "description": "Extensions for defaultValueId", - "$ref": "#/definitions/Element" - }, - "defaultValueInstant": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_defaultValueInstant": { - "description": "Extensions for defaultValueInstant", - "$ref": "#/definitions/Element" - }, - "defaultValueInteger": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_defaultValueInteger": { - "description": "Extensions for defaultValueInteger", - "$ref": "#/definitions/Element" - }, - "defaultValueMarkdown": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_defaultValueMarkdown": { - "description": "Extensions for defaultValueMarkdown", - "$ref": "#/definitions/Element" - }, - "defaultValueOid": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^urn:oid:[0-2](\\.(0|[1-9][0-9]*))+$", - "type": "string" - }, - "_defaultValueOid": { - "description": "Extensions for defaultValueOid", - "$ref": "#/definitions/Element" - }, - "defaultValuePositiveInt": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_defaultValuePositiveInt": { - "description": "Extensions for defaultValuePositiveInt", - "$ref": "#/definitions/Element" - }, - "defaultValueString": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_defaultValueString": { - "description": "Extensions for defaultValueString", - "$ref": "#/definitions/Element" - }, - "defaultValueTime": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_defaultValueTime": { - "description": "Extensions for defaultValueTime", - "$ref": "#/definitions/Element" - }, - "defaultValueUnsignedInt": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_defaultValueUnsignedInt": { - "description": "Extensions for defaultValueUnsignedInt", - "$ref": "#/definitions/Element" - }, - "defaultValueUri": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^\\S*$", - "type": "string" - }, - "_defaultValueUri": { - "description": "Extensions for defaultValueUri", - "$ref": "#/definitions/Element" - }, - "defaultValueUrl": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^\\S*$", - "type": "string" - }, - "_defaultValueUrl": { - "description": "Extensions for defaultValueUrl", - "$ref": "#/definitions/Element" - }, - "defaultValueUuid": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", - "type": "string" - }, - "_defaultValueUuid": { - "description": "Extensions for defaultValueUuid", - "$ref": "#/definitions/Element" - }, - "defaultValueAddress": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Address" - }, - "defaultValueAge": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Age" - }, - "defaultValueAnnotation": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Annotation" - }, - "defaultValueAttachment": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Attachment" - }, - "defaultValueCodeableConcept": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/CodeableConcept" - }, - "defaultValueCoding": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Coding" - }, - "defaultValueContactPoint": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/ContactPoint" - }, - "defaultValueCount": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Count" - }, - "defaultValueDistance": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Distance" - }, - "defaultValueDuration": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Duration" - }, - "defaultValueHumanName": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/HumanName" - }, - "defaultValueIdentifier": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Identifier" - }, - "defaultValueMoney": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Money" - }, - "defaultValuePeriod": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Period" - }, - "defaultValueQuantity": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Quantity" - }, - "defaultValueRange": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Range" - }, - "defaultValueRatio": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Ratio" - }, - "defaultValueReference": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Reference" - }, - "defaultValueSampledData": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/SampledData" - }, - "defaultValueSignature": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Signature" - }, - "defaultValueTiming": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Timing" - }, - "defaultValueContactDetail": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/ContactDetail" - }, - "defaultValueContributor": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Contributor" - }, - "defaultValueDataRequirement": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/DataRequirement" - }, - "defaultValueExpression": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Expression" - }, - "defaultValueParameterDefinition": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/ParameterDefinition" - }, - "defaultValueRelatedArtifact": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/RelatedArtifact" - }, - "defaultValueTriggerDefinition": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/TriggerDefinition" - }, - "defaultValueUsageContext": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/UsageContext" - }, - "defaultValueDosage": { - "description": "The value that should be used if there is no value stated in the instance (e.g. \u0027if not otherwise specified, the abstract is false\u0027).", - "$ref": "#/definitions/Dosage" - }, - "meaningWhenMissing": { - "description": "The Implicit meaning that is to be understood when this element is missing (e.g. \u0027when this element is missing, the period is ongoing\u0027).", - "$ref": "#/definitions/markdown" - }, - "_meaningWhenMissing": { - "description": "Extensions for meaningWhenMissing", - "$ref": "#/definitions/Element" - }, - "orderMeaning": { - "description": "If present, indicates that the order of the repeating element has meaning and describes what that meaning is. If absent, it means that the order of the element has no meaning.", - "$ref": "#/definitions/string" - }, - "_orderMeaning": { - "description": "Extensions for orderMeaning", - "$ref": "#/definitions/Element" - }, - "fixedBase64Binary": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^(\\s*([0-9a-zA-Z\\+/\u003d]){4}\\s*)+$", - "type": "string" - }, - "_fixedBase64Binary": { - "description": "Extensions for fixedBase64Binary", - "$ref": "#/definitions/Element" - }, - "fixedBoolean": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_fixedBoolean": { - "description": "Extensions for fixedBoolean", - "$ref": "#/definitions/Element" - }, - "fixedCanonical": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^\\S*$", - "type": "string" - }, - "_fixedCanonical": { - "description": "Extensions for fixedCanonical", - "$ref": "#/definitions/Element" - }, - "fixedCode": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string" - }, - "_fixedCode": { - "description": "Extensions for fixedCode", - "$ref": "#/definitions/Element" - }, - "fixedDate": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_fixedDate": { - "description": "Extensions for fixedDate", - "$ref": "#/definitions/Element" - }, - "fixedDateTime": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_fixedDateTime": { - "description": "Extensions for fixedDateTime", - "$ref": "#/definitions/Element" - }, - "fixedDecimal": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_fixedDecimal": { - "description": "Extensions for fixedDecimal", - "$ref": "#/definitions/Element" - }, - "fixedId": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^[A-Za-z0-9\\-\\.]{1,64}$", - "type": "string" - }, - "_fixedId": { - "description": "Extensions for fixedId", - "$ref": "#/definitions/Element" - }, - "fixedInstant": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_fixedInstant": { - "description": "Extensions for fixedInstant", - "$ref": "#/definitions/Element" - }, - "fixedInteger": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_fixedInteger": { - "description": "Extensions for fixedInteger", - "$ref": "#/definitions/Element" - }, - "fixedMarkdown": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_fixedMarkdown": { - "description": "Extensions for fixedMarkdown", - "$ref": "#/definitions/Element" - }, - "fixedOid": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^urn:oid:[0-2](\\.(0|[1-9][0-9]*))+$", - "type": "string" - }, - "_fixedOid": { - "description": "Extensions for fixedOid", - "$ref": "#/definitions/Element" - }, - "fixedPositiveInt": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_fixedPositiveInt": { - "description": "Extensions for fixedPositiveInt", - "$ref": "#/definitions/Element" - }, - "fixedString": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_fixedString": { - "description": "Extensions for fixedString", - "$ref": "#/definitions/Element" - }, - "fixedTime": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_fixedTime": { - "description": "Extensions for fixedTime", - "$ref": "#/definitions/Element" - }, - "fixedUnsignedInt": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_fixedUnsignedInt": { - "description": "Extensions for fixedUnsignedInt", - "$ref": "#/definitions/Element" - }, - "fixedUri": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^\\S*$", - "type": "string" - }, - "_fixedUri": { - "description": "Extensions for fixedUri", - "$ref": "#/definitions/Element" - }, - "fixedUrl": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^\\S*$", - "type": "string" - }, - "_fixedUrl": { - "description": "Extensions for fixedUrl", - "$ref": "#/definitions/Element" - }, - "fixedUuid": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", - "type": "string" - }, - "_fixedUuid": { - "description": "Extensions for fixedUuid", - "$ref": "#/definitions/Element" - }, - "fixedAddress": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Address" - }, - "fixedAge": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Age" - }, - "fixedAnnotation": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Annotation" - }, - "fixedAttachment": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Attachment" - }, - "fixedCodeableConcept": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/CodeableConcept" - }, - "fixedCoding": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Coding" - }, - "fixedContactPoint": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/ContactPoint" - }, - "fixedCount": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Count" - }, - "fixedDistance": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Distance" - }, - "fixedDuration": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Duration" - }, - "fixedHumanName": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/HumanName" - }, - "fixedIdentifier": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Identifier" - }, - "fixedMoney": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Money" - }, - "fixedPeriod": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Period" - }, - "fixedQuantity": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Quantity" - }, - "fixedRange": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Range" - }, - "fixedRatio": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Ratio" - }, - "fixedReference": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Reference" - }, - "fixedSampledData": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/SampledData" - }, - "fixedSignature": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Signature" - }, - "fixedTiming": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Timing" - }, - "fixedContactDetail": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/ContactDetail" - }, - "fixedContributor": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Contributor" - }, - "fixedDataRequirement": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/DataRequirement" - }, - "fixedExpression": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Expression" - }, - "fixedParameterDefinition": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/ParameterDefinition" - }, - "fixedRelatedArtifact": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/RelatedArtifact" - }, - "fixedTriggerDefinition": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/TriggerDefinition" - }, - "fixedUsageContext": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/UsageContext" - }, - "fixedDosage": { - "description": "Specifies a value that SHALL be exactly the value for this element in the instance. For purposes of comparison, non-significant whitespace is ignored, and all values must be an exact match (case and accent sensitive). Missing elements/attributes must also be missing.", - "$ref": "#/definitions/Dosage" - }, - "patternBase64Binary": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^(\\s*([0-9a-zA-Z\\+/\u003d]){4}\\s*)+$", - "type": "string" - }, - "_patternBase64Binary": { - "description": "Extensions for patternBase64Binary", - "$ref": "#/definitions/Element" - }, - "patternBoolean": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_patternBoolean": { - "description": "Extensions for patternBoolean", - "$ref": "#/definitions/Element" - }, - "patternCanonical": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^\\S*$", - "type": "string" - }, - "_patternCanonical": { - "description": "Extensions for patternCanonical", - "$ref": "#/definitions/Element" - }, - "patternCode": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string" - }, - "_patternCode": { - "description": "Extensions for patternCode", - "$ref": "#/definitions/Element" - }, - "patternDate": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_patternDate": { - "description": "Extensions for patternDate", - "$ref": "#/definitions/Element" - }, - "patternDateTime": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_patternDateTime": { - "description": "Extensions for patternDateTime", - "$ref": "#/definitions/Element" - }, - "patternDecimal": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_patternDecimal": { - "description": "Extensions for patternDecimal", - "$ref": "#/definitions/Element" - }, - "patternId": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^[A-Za-z0-9\\-\\.]{1,64}$", - "type": "string" - }, - "_patternId": { - "description": "Extensions for patternId", - "$ref": "#/definitions/Element" - }, - "patternInstant": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_patternInstant": { - "description": "Extensions for patternInstant", - "$ref": "#/definitions/Element" - }, - "patternInteger": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_patternInteger": { - "description": "Extensions for patternInteger", - "$ref": "#/definitions/Element" - }, - "patternMarkdown": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_patternMarkdown": { - "description": "Extensions for patternMarkdown", - "$ref": "#/definitions/Element" - }, - "patternOid": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^urn:oid:[0-2](\\.(0|[1-9][0-9]*))+$", - "type": "string" - }, - "_patternOid": { - "description": "Extensions for patternOid", - "$ref": "#/definitions/Element" - }, - "patternPositiveInt": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_patternPositiveInt": { - "description": "Extensions for patternPositiveInt", - "$ref": "#/definitions/Element" - }, - "patternString": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_patternString": { - "description": "Extensions for patternString", - "$ref": "#/definitions/Element" - }, - "patternTime": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_patternTime": { - "description": "Extensions for patternTime", - "$ref": "#/definitions/Element" - }, - "patternUnsignedInt": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_patternUnsignedInt": { - "description": "Extensions for patternUnsignedInt", - "$ref": "#/definitions/Element" - }, - "patternUri": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^\\S*$", - "type": "string" - }, - "_patternUri": { - "description": "Extensions for patternUri", - "$ref": "#/definitions/Element" - }, - "patternUrl": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^\\S*$", - "type": "string" - }, - "_patternUrl": { - "description": "Extensions for patternUrl", - "$ref": "#/definitions/Element" - }, - "patternUuid": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", - "type": "string" - }, - "_patternUuid": { - "description": "Extensions for patternUuid", - "$ref": "#/definitions/Element" - }, - "patternAddress": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Address" - }, - "patternAge": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Age" - }, - "patternAnnotation": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Annotation" - }, - "patternAttachment": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Attachment" - }, - "patternCodeableConcept": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/CodeableConcept" - }, - "patternCoding": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Coding" - }, - "patternContactPoint": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/ContactPoint" - }, - "patternCount": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Count" - }, - "patternDistance": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Distance" - }, - "patternDuration": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Duration" - }, - "patternHumanName": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/HumanName" - }, - "patternIdentifier": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Identifier" - }, - "patternMoney": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Money" - }, - "patternPeriod": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Period" - }, - "patternQuantity": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Quantity" - }, - "patternRange": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Range" - }, - "patternRatio": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Ratio" - }, - "patternReference": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Reference" - }, - "patternSampledData": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/SampledData" - }, - "patternSignature": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Signature" - }, - "patternTiming": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Timing" - }, - "patternContactDetail": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/ContactDetail" - }, - "patternContributor": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Contributor" - }, - "patternDataRequirement": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/DataRequirement" - }, - "patternExpression": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Expression" - }, - "patternParameterDefinition": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/ParameterDefinition" - }, - "patternRelatedArtifact": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/RelatedArtifact" - }, - "patternTriggerDefinition": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/TriggerDefinition" - }, - "patternUsageContext": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/UsageContext" - }, - "patternDosage": { - "description": "Specifies a value that the value in the instance SHALL follow - that is, any value in the pattern must be found in the instance. Other additional values may be found too. This is effectively constraint by example. \n\nWhen pattern[x] is used to constrain a primitive, it means that the value provided in the pattern[x] must match the instance value exactly.\n\nWhen pattern[x] is used to constrain an array, it means that each element provided in the pattern[x] array must (recursively) match at least one element from the instance array.\n\nWhen pattern[x] is used to constrain a complex object, it means that each property in the pattern must be present in the complex object, and its value must recursively match -- i.e.,\n\n1. If primitive: it must match exactly the pattern value\n2. If a complex object: it must match (recursively) the pattern value\n3. If an array: it must match (recursively) the pattern value.", - "$ref": "#/definitions/Dosage" - }, - "example": { - "description": "A sample value for this element demonstrating the type of information that would typically be found in the element.", - "items": { - "$ref": "#/definitions/ElementDefinition_Example" - }, - "type": "array" - }, - "minValueDate": { - "description": "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_minValueDate": { - "description": "Extensions for minValueDate", - "$ref": "#/definitions/Element" - }, - "minValueDateTime": { - "description": "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_minValueDateTime": { - "description": "Extensions for minValueDateTime", - "$ref": "#/definitions/Element" - }, - "minValueInstant": { - "description": "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_minValueInstant": { - "description": "Extensions for minValueInstant", - "$ref": "#/definitions/Element" - }, - "minValueTime": { - "description": "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_minValueTime": { - "description": "Extensions for minValueTime", - "$ref": "#/definitions/Element" - }, - "minValueDecimal": { - "description": "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_minValueDecimal": { - "description": "Extensions for minValueDecimal", - "$ref": "#/definitions/Element" - }, - "minValueInteger": { - "description": "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_minValueInteger": { - "description": "Extensions for minValueInteger", - "$ref": "#/definitions/Element" - }, - "minValuePositiveInt": { - "description": "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_minValuePositiveInt": { - "description": "Extensions for minValuePositiveInt", - "$ref": "#/definitions/Element" - }, - "minValueUnsignedInt": { - "description": "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_minValueUnsignedInt": { - "description": "Extensions for minValueUnsignedInt", - "$ref": "#/definitions/Element" - }, - "minValueQuantity": { - "description": "The minimum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "$ref": "#/definitions/Quantity" - }, - "maxValueDate": { - "description": "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_maxValueDate": { - "description": "Extensions for maxValueDate", - "$ref": "#/definitions/Element" - }, - "maxValueDateTime": { - "description": "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_maxValueDateTime": { - "description": "Extensions for maxValueDateTime", - "$ref": "#/definitions/Element" - }, - "maxValueInstant": { - "description": "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_maxValueInstant": { - "description": "Extensions for maxValueInstant", - "$ref": "#/definitions/Element" - }, - "maxValueTime": { - "description": "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_maxValueTime": { - "description": "Extensions for maxValueTime", - "$ref": "#/definitions/Element" - }, - "maxValueDecimal": { - "description": "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_maxValueDecimal": { - "description": "Extensions for maxValueDecimal", - "$ref": "#/definitions/Element" - }, - "maxValueInteger": { - "description": "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_maxValueInteger": { - "description": "Extensions for maxValueInteger", - "$ref": "#/definitions/Element" - }, - "maxValuePositiveInt": { - "description": "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_maxValuePositiveInt": { - "description": "Extensions for maxValuePositiveInt", - "$ref": "#/definitions/Element" - }, - "maxValueUnsignedInt": { - "description": "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_maxValueUnsignedInt": { - "description": "Extensions for maxValueUnsignedInt", - "$ref": "#/definitions/Element" - }, - "maxValueQuantity": { - "description": "The maximum allowed value for the element. The value is inclusive. This is allowed for the types date, dateTime, instant, time, decimal, integer, and Quantity.", - "$ref": "#/definitions/Quantity" - }, - "maxLength": { - "description": "Indicates the maximum length in characters that is permitted to be present in conformant instances and which is expected to be supported by conformant consumers that support the element.", - "$ref": "#/definitions/integer" - }, - "_maxLength": { - "description": "Extensions for maxLength", - "$ref": "#/definitions/Element" - }, - "condition": { - "description": "A reference to an invariant that may make additional statements about the cardinality or value in the instance.", - "items": { - "$ref": "#/definitions/id" - }, - "type": "array" - }, - "_condition": { - "description": "Extensions for condition", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "constraint": { - "description": "Formal constraints such as co-occurrence and other constraints that can be computationally evaluated within the context of the instance.", - "items": { - "$ref": "#/definitions/ElementDefinition_Constraint" - }, - "type": "array" - }, - "mustSupport": { - "description": "If true, implementations that produce or consume resources SHALL provide \"support\" for the element in some meaningful way. If false, the element may be ignored and not supported. If false, whether to populate or use the data element in any way is at the discretion of the implementation.", - "$ref": "#/definitions/boolean" - }, - "_mustSupport": { - "description": "Extensions for mustSupport", - "$ref": "#/definitions/Element" - }, - "isModifier": { - "description": "If true, the value of this element affects the interpretation of the element or resource that contains it, and the value of the element cannot be ignored. Typically, this is used for status, negation and qualification codes. The effect of this is that the element cannot be ignored by systems: they SHALL either recognize the element and process it, and/or a pre-determination has been made that it is not relevant to their particular system.", - "$ref": "#/definitions/boolean" - }, - "_isModifier": { - "description": "Extensions for isModifier", - "$ref": "#/definitions/Element" - }, - "isModifierReason": { - "description": "Explains how that element affects the interpretation of the resource or element that contains it.", - "$ref": "#/definitions/string" - }, - "_isModifierReason": { - "description": "Extensions for isModifierReason", - "$ref": "#/definitions/Element" - }, - "isSummary": { - "description": "Whether the element should be included if a client requests a search with the parameter _summary\u003dtrue.", - "$ref": "#/definitions/boolean" - }, - "_isSummary": { - "description": "Extensions for isSummary", - "$ref": "#/definitions/Element" - }, - "binding": { - "description": "Binds to a value set if this element is coded (code, Coding, CodeableConcept, Quantity), or the data types (string, uri).", - "$ref": "#/definitions/ElementDefinition_Binding" - }, - "mapping": { - "description": "Identifies a concept from an external specification that roughly corresponds to this element.", - "items": { - "$ref": "#/definitions/ElementDefinition_Mapping" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ElementDefinition_Slicing": { - "description": "Captures constraints on each element within the resource, profile, or extension.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "discriminator": { - "description": "Designates which child elements are used to discriminate between the slices when processing an instance. If one or more discriminators are provided, the value of the child elements in the instance data SHALL completely distinguish which slice the element in the resource matches based on the allowed values for those elements in each of the slices.", - "items": { - "$ref": "#/definitions/ElementDefinition_Discriminator" - }, - "type": "array" - }, - "description": { - "description": "A human-readable text description of how the slicing works. If there is no discriminator, this is required to be present to provide whatever information is possible about how the slices can be differentiated.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "ordered": { - "description": "If the matching elements have to occur in the same order as defined in the profile.", - "$ref": "#/definitions/boolean" - }, - "_ordered": { - "description": "Extensions for ordered", - "$ref": "#/definitions/Element" - }, - "rules": { - "description": "Whether additional slices are allowed or not. When the slices are ordered, profile authors can also say that additional slices are only allowed at the end.", - "enum": [ - "closed", - "open", - "openAtEnd" - ] - }, - "_rules": { - "description": "Extensions for rules", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ElementDefinition_Discriminator": { - "description": "Captures constraints on each element within the resource, profile, or extension.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "How the element value is interpreted when discrimination is evaluated.", - "enum": [ - "value", - "exists", - "pattern", - "type", - "profile" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "path": { - "description": "A FHIRPath expression, using [the simple subset of FHIRPath](fhirpath.html#simple), that is used to identify the element on which discrimination is based.", - "$ref": "#/definitions/string" - }, - "_path": { - "description": "Extensions for path", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ElementDefinition_Base": { - "description": "Captures constraints on each element within the resource, profile, or extension.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "path": { - "description": "The Path that identifies the base element - this matches the ElementDefinition.path for that element. Across FHIR, there is only one base definition of any element - that is, an element definition on a [[[StructureDefinition]]] without a StructureDefinition.base.", - "$ref": "#/definitions/string" - }, - "_path": { - "description": "Extensions for path", - "$ref": "#/definitions/Element" - }, - "min": { - "description": "Minimum cardinality of the base element identified by the path.", - "$ref": "#/definitions/unsignedInt" - }, - "_min": { - "description": "Extensions for min", - "$ref": "#/definitions/Element" - }, - "max": { - "description": "Maximum cardinality of the base element identified by the path.", - "$ref": "#/definitions/string" - }, - "_max": { - "description": "Extensions for max", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ElementDefinition_Type": { - "description": "Captures constraints on each element within the resource, profile, or extension.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "URL of Data type or Resource that is a(or the) type used for this element. References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. \"string\" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.", - "$ref": "#/definitions/uri" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "Identifies a profile structure or implementation Guide that applies to the datatype this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the type SHALL conform to at least one profile defined in the implementation guide.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "targetProfile": { - "description": "Used when the type is \"Reference\" or \"canonical\", and identifies a profile structure or implementation Guide that applies to the target of the reference this element refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "aggregation": { - "description": "If the type is a reference to another resource, how the resource is or can be aggregated - is it a contained resource, or a reference, and if the context is a bundle, is it included in the bundle.", - "items": { - "enum": [ - "contained", - "referenced", - "bundled" - ] - }, - "type": "array" - }, - "_aggregation": { - "description": "Extensions for aggregation", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "versioning": { - "description": "Whether this reference needs to be version specific or version independent, or whether either can be used.", - "enum": [ - "either", - "independent", - "specific" - ] - }, - "_versioning": { - "description": "Extensions for versioning", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ElementDefinition_Example": { - "description": "Captures constraints on each element within the resource, profile, or extension.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "label": { - "description": "Describes the purpose of this example amoung the set of examples.", - "$ref": "#/definitions/string" - }, - "_label": { - "description": "Extensions for label", - "$ref": "#/definitions/Element" - }, - "valueBase64Binary": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^(\\s*([0-9a-zA-Z\\+/\u003d]){4}\\s*)+$", - "type": "string" - }, - "_valueBase64Binary": { - "description": "Extensions for valueBase64Binary", - "$ref": "#/definitions/Element" - }, - "valueBoolean": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueCanonical": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueCanonical": { - "description": "Extensions for valueCanonical", - "$ref": "#/definitions/Element" - }, - "valueCode": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string" - }, - "_valueCode": { - "description": "Extensions for valueCode", - "$ref": "#/definitions/Element" - }, - "valueDate": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_valueDate": { - "description": "Extensions for valueDate", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valueDecimal": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_valueDecimal": { - "description": "Extensions for valueDecimal", - "$ref": "#/definitions/Element" - }, - "valueId": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^[A-Za-z0-9\\-\\.]{1,64}$", - "type": "string" - }, - "_valueId": { - "description": "Extensions for valueId", - "$ref": "#/definitions/Element" - }, - "valueInstant": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_valueInstant": { - "description": "Extensions for valueInstant", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueMarkdown": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueMarkdown": { - "description": "Extensions for valueMarkdown", - "$ref": "#/definitions/Element" - }, - "valueOid": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^urn:oid:[0-2](\\.(0|[1-9][0-9]*))+$", - "type": "string" - }, - "_valueOid": { - "description": "Extensions for valueOid", - "$ref": "#/definitions/Element" - }, - "valuePositiveInt": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_valuePositiveInt": { - "description": "Extensions for valuePositiveInt", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueTime": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_valueTime": { - "description": "Extensions for valueTime", - "$ref": "#/definitions/Element" - }, - "valueUnsignedInt": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_valueUnsignedInt": { - "description": "Extensions for valueUnsignedInt", - "$ref": "#/definitions/Element" - }, - "valueUri": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUri": { - "description": "Extensions for valueUri", - "$ref": "#/definitions/Element" - }, - "valueUrl": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUrl": { - "description": "Extensions for valueUrl", - "$ref": "#/definitions/Element" - }, - "valueUuid": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", - "type": "string" - }, - "_valueUuid": { - "description": "Extensions for valueUuid", - "$ref": "#/definitions/Element" - }, - "valueAddress": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Address" - }, - "valueAge": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Age" - }, - "valueAnnotation": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Annotation" - }, - "valueAttachment": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Attachment" - }, - "valueCodeableConcept": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueCoding": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Coding" - }, - "valueContactPoint": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/ContactPoint" - }, - "valueCount": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Count" - }, - "valueDistance": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Distance" - }, - "valueDuration": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Duration" - }, - "valueHumanName": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/HumanName" - }, - "valueIdentifier": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Identifier" - }, - "valueMoney": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Money" - }, - "valuePeriod": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Period" - }, - "valueQuantity": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Quantity" - }, - "valueRange": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Range" - }, - "valueRatio": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Ratio" - }, - "valueReference": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Reference" - }, - "valueSampledData": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/SampledData" - }, - "valueSignature": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Signature" - }, - "valueTiming": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Timing" - }, - "valueContactDetail": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/ContactDetail" - }, - "valueContributor": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Contributor" - }, - "valueDataRequirement": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/DataRequirement" - }, - "valueExpression": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Expression" - }, - "valueParameterDefinition": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/ParameterDefinition" - }, - "valueRelatedArtifact": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/RelatedArtifact" - }, - "valueTriggerDefinition": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/TriggerDefinition" - }, - "valueUsageContext": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/UsageContext" - }, - "valueDosage": { - "description": "The actual value for the element, which must be one of the types allowed for this element.", - "$ref": "#/definitions/Dosage" - } - }, - "additionalProperties": false - }, - "ElementDefinition_Constraint": { - "description": "Captures constraints on each element within the resource, profile, or extension.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "key": { - "description": "Allows identification of which elements have their cardinalities impacted by the constraint. Will not be referenced for constraints that do not affect cardinality.", - "$ref": "#/definitions/id" - }, - "_key": { - "description": "Extensions for key", - "$ref": "#/definitions/Element" - }, - "requirements": { - "description": "Description of why this constraint is necessary or appropriate.", - "$ref": "#/definitions/string" - }, - "_requirements": { - "description": "Extensions for requirements", - "$ref": "#/definitions/Element" - }, - "severity": { - "description": "Identifies the impact constraint violation has on the conformance of the instance.", - "enum": [ - "error", - "warning" - ] - }, - "_severity": { - "description": "Extensions for severity", - "$ref": "#/definitions/Element" - }, - "human": { - "description": "Text that can be used to describe the constraint in messages identifying that the constraint has been violated.", - "$ref": "#/definitions/string" - }, - "_human": { - "description": "Extensions for human", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "A [FHIRPath](fhirpath.html) expression of constraint that can be executed to see if this constraint is met.", - "$ref": "#/definitions/string" - }, - "_expression": { - "description": "Extensions for expression", - "$ref": "#/definitions/Element" - }, - "xpath": { - "description": "An XPath expression of constraint that can be executed to see if this constraint is met.", - "$ref": "#/definitions/string" - }, - "_xpath": { - "description": "Extensions for xpath", - "$ref": "#/definitions/Element" - }, - "source": { - "description": "A reference to the original source of the constraint, for traceability purposes.", - "$ref": "#/definitions/canonical" - } - }, - "additionalProperties": false - }, - "ElementDefinition_Binding": { - "description": "Captures constraints on each element within the resource, profile, or extension.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "strength": { - "description": "Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.", - "enum": [ - "required", - "extensible", - "preferred", - "example" - ] - }, - "_strength": { - "description": "Extensions for strength", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "Describes the intended use of this particular set of codes.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "valueSet": { - "description": "Refers to the value set that identifies the set of codes the binding refers to.", - "$ref": "#/definitions/canonical" - } - }, - "additionalProperties": false - }, - "ElementDefinition_Mapping": { - "description": "Captures constraints on each element within the resource, profile, or extension.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identity": { - "description": "An internal reference to the definition of a mapping.", - "$ref": "#/definitions/id" - }, - "_identity": { - "description": "Extensions for identity", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "Identifies the computable language in which mapping.map is expressed.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "map": { - "description": "Expresses what part of the target specification corresponds to this element.", - "$ref": "#/definitions/string" - }, - "_map": { - "description": "Extensions for map", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "Comments that provide information about the mapping or its use.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Account": { - "description": "A financial tool for tracking value accrued for a particular purpose. In the healthcare field, used to track charges for a patient, cost centers, etc.", - "properties": { - "resourceType": { - "description": "This is a Account resource", - "const": "Account" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique identifier used to reference the account. Might or might not be intended for human use (e.g. credit card number).", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "Indicates whether the account is presently used/usable or not.", - "enum": [ - "active", - "inactive", - "entered-in-error", - "on-hold", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Categorizes the account for reporting and searching purposes.", - "$ref": "#/definitions/CodeableConcept" - }, - "name": { - "description": "Name used for the account when displaying it to humans in reports, etc.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "subject": { - "description": "Identifies the entity which incurs the expenses. While the immediate recipients of services or goods might be entities related to the subject, the expenses were ultimately incurred by the subject of the Account.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "servicePeriod": { - "description": "The date range of services associated with this account.", - "$ref": "#/definitions/Period" - }, - "coverage": { - "description": "The party(s) that are responsible for covering the payment of this account, and what order should they be applied to the account.", - "items": { - "$ref": "#/definitions/Account_Coverage" - }, - "type": "array" - }, - "owner": { - "description": "Indicates the service area, hospital, department, etc. with responsibility for managing the Account.", - "$ref": "#/definitions/Reference" - }, - "description": { - "description": "Provides additional information about what the account tracks and how it is used.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "guarantor": { - "description": "The parties responsible for balancing the account if other payment options fall short.", - "items": { - "$ref": "#/definitions/Account_Guarantor" - }, - "type": "array" - }, - "partOf": { - "description": "Reference to a parent Account.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Account_Coverage": { - "description": "A financial tool for tracking value accrued for a particular purpose. In the healthcare field, used to track charges for a patient, cost centers, etc.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "coverage": { - "description": "The party(s) that contribute to payment (or part of) of the charges applied to this account (including self-pay).\n\nA coverage may only be responsible for specific types of charges, and the sequence of the coverages in the account could be important when processing billing.", - "$ref": "#/definitions/Reference" - }, - "priority": { - "description": "The priority of the coverage in the context of this account.", - "$ref": "#/definitions/positiveInt" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "coverage" - ] - }, - "Account_Guarantor": { - "description": "A financial tool for tracking value accrued for a particular purpose. In the healthcare field, used to track charges for a patient, cost centers, etc.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "party": { - "description": "The entity who is responsible.", - "$ref": "#/definitions/Reference" - }, - "onHold": { - "description": "A guarantor may be placed on credit hold or otherwise have their role temporarily suspended.", - "$ref": "#/definitions/boolean" - }, - "_onHold": { - "description": "Extensions for onHold", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "The timeframe during which the guarantor accepts responsibility for the account.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false, - "required": [ - "party" - ] - }, - "ActivityDefinition": { - "description": "This resource allows for the definition of some activity to be performed, independent of a particular patient, practitioner, or other performance context.", - "properties": { - "resourceType": { - "description": "This is a ActivityDefinition resource", - "const": "ActivityDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this activity definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this activity definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the activity definition is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this activity definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the activity definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the activity definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active assets.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the activity definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the activity definition.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "subtitle": { - "description": "An explanatory or alternate title for the activity definition giving additional information about its content.", - "$ref": "#/definitions/string" - }, - "_subtitle": { - "description": "Extensions for subtitle", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this activity definition. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this activity definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "subjectCodeableConcept": { - "description": "A code or group definition that describes the intended subject of the activity being defined.", - "$ref": "#/definitions/CodeableConcept" - }, - "subjectReference": { - "description": "A code or group definition that describes the intended subject of the activity being defined.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date (and optionally time) when the activity definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the activity definition changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the activity definition.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the activity definition from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate activity definition instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the activity definition is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this activity definition is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "usage": { - "description": "A detailed description of how the activity definition is used from a clinical perspective.", - "$ref": "#/definitions/string" - }, - "_usage": { - "description": "Extensions for usage", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the activity definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the activity definition.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the activity definition content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "topic": { - "description": "Descriptive topics related to the content of the activity. Topics provide a high-level categorization of the activity that can be useful for filtering and searching.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "author": { - "description": "An individiual or organization primarily involved in the creation and maintenance of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "editor": { - "description": "An individual or organization primarily responsible for internal coherence of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "reviewer": { - "description": "An individual or organization primarily responsible for review of some aspect of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "endorser": { - "description": "An individual or organization responsible for officially endorsing the content for use in some setting.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Related artifacts such as additional documentation, justification, or bibliographic references.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "library": { - "description": "A reference to a Library resource containing any formal logic used by the activity definition.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "kind": { - "description": "A description of the kind of resource the activity definition is representing. For example, a MedicationRequest, a ServiceRequest, or a CommunicationRequest. Typically, but not always, this is a Request resource.", - "$ref": "#/definitions/code" - }, - "_kind": { - "description": "Extensions for kind", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "A profile to which the target of the activity definition is expected to conform.", - "$ref": "#/definitions/canonical" - }, - "code": { - "description": "Detailed description of the type of activity; e.g. What lab test, what procedure, what kind of encounter.", - "$ref": "#/definitions/CodeableConcept" - }, - "intent": { - "description": "Indicates the level of authority/intentionality associated with the activity and where the request should fit into the workflow chain.", - "$ref": "#/definitions/code" - }, - "_intent": { - "description": "Extensions for intent", - "$ref": "#/definitions/Element" - }, - "priority": { - "description": "Indicates how quickly the activity should be addressed with respect to other requests.", - "$ref": "#/definitions/code" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "doNotPerform": { - "description": "Set this to true if the definition is to indicate that a particular activity should NOT be performed. If true, this element should be interpreted to reinforce a negative coding. For example NPO as a code with a doNotPerform of true would still indicate to NOT perform the action.", - "$ref": "#/definitions/boolean" - }, - "_doNotPerform": { - "description": "Extensions for doNotPerform", - "$ref": "#/definitions/Element" - }, - "timingTiming": { - "description": "The period, timing or frequency upon which the described activity is to occur.", - "$ref": "#/definitions/Timing" - }, - "timingDateTime": { - "description": "The period, timing or frequency upon which the described activity is to occur.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_timingDateTime": { - "description": "Extensions for timingDateTime", - "$ref": "#/definitions/Element" - }, - "timingAge": { - "description": "The period, timing or frequency upon which the described activity is to occur.", - "$ref": "#/definitions/Age" - }, - "timingPeriod": { - "description": "The period, timing or frequency upon which the described activity is to occur.", - "$ref": "#/definitions/Period" - }, - "timingRange": { - "description": "The period, timing or frequency upon which the described activity is to occur.", - "$ref": "#/definitions/Range" - }, - "timingDuration": { - "description": "The period, timing or frequency upon which the described activity is to occur.", - "$ref": "#/definitions/Duration" - }, - "location": { - "description": "Identifies the facility where the activity will occur; e.g. home, hospital, specific clinic, etc.", - "$ref": "#/definitions/Reference" - }, - "participant": { - "description": "Indicates who should participate in performing the action described.", - "items": { - "$ref": "#/definitions/ActivityDefinition_Participant" - }, - "type": "array" - }, - "productReference": { - "description": "Identifies the food, drug or other product being consumed or supplied in the activity.", - "$ref": "#/definitions/Reference" - }, - "productCodeableConcept": { - "description": "Identifies the food, drug or other product being consumed or supplied in the activity.", - "$ref": "#/definitions/CodeableConcept" - }, - "quantity": { - "description": "Identifies the quantity expected to be consumed at once (per dose, per meal, etc.).", - "$ref": "#/definitions/Quantity" - }, - "dosage": { - "description": "Provides detailed dosage instructions in the same way that they are described for MedicationRequest resources.", - "items": { - "$ref": "#/definitions/Dosage" - }, - "type": "array" - }, - "bodySite": { - "description": "Indicates the sites on the subject\u0027s body where the procedure should be performed (I.e. the target sites).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "specimenRequirement": { - "description": "Defines specimen requirements for the action to be performed, such as required specimens for a lab test.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "observationRequirement": { - "description": "Defines observation requirements for the action to be performed, such as body weight or surface area.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "observationResultRequirement": { - "description": "Defines the observations that are expected to be produced by the action.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "transform": { - "description": "A reference to a StructureMap resource that defines a transform that can be executed to produce the intent resource using the ActivityDefinition instance as the input.", - "$ref": "#/definitions/canonical" - }, - "dynamicValue": { - "description": "Dynamic values that will be evaluated to produce values for elements of the resulting resource. For example, if the dosage of a medication must be computed based on the patient\u0027s weight, a dynamic value would be used to specify an expression that calculated the weight, and the path on the request resource that would contain the result.", - "items": { - "$ref": "#/definitions/ActivityDefinition_DynamicValue" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "ActivityDefinition_Participant": { - "description": "This resource allows for the definition of some activity to be performed, independent of a particular patient, practitioner, or other performance context.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of participant in the action.", - "$ref": "#/definitions/code" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "role": { - "description": "The role the participant should play in performing the described action.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "ActivityDefinition_DynamicValue": { - "description": "This resource allows for the definition of some activity to be performed, independent of a particular patient, practitioner, or other performance context.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "path": { - "description": "The path to the element to be customized. This is the path on the resource that will hold the result of the calculation defined by the expression. The specified path SHALL be a FHIRPath resolveable on the specified target type of the ActivityDefinition, and SHALL consist only of identifiers, constant indexers, and a restricted subset of functions. The path is allowed to contain qualifiers (.) to traverse sub-elements, as well as indexers ([x]) to traverse multiple-cardinality sub-elements (see the [Simple FHIRPath Profile](fhirpath.html#simple) for full details).", - "$ref": "#/definitions/string" - }, - "_path": { - "description": "Extensions for path", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "An expression specifying the value of the customized element.", - "$ref": "#/definitions/Expression" - } - }, - "additionalProperties": false, - "required": [ - "expression" - ] - }, - "AdverseEvent": { - "description": "Actual or potential/avoided event causing unintended physical injury resulting from or contributed to by medical care, a research study or other healthcare setting factors that requires additional monitoring, treatment, or hospitalization, or that results in death.", - "properties": { - "resourceType": { - "description": "This is a AdverseEvent resource", - "const": "AdverseEvent" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this adverse event by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", - "$ref": "#/definitions/Identifier" - }, - "actuality": { - "description": "Whether the event actually happened, or just had the potential to. Note that this is independent of whether anyone was affected or harmed or how severely.", - "enum": [ - "actual", - "potential" - ] - }, - "_actuality": { - "description": "Extensions for actuality", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "The overall type of event, intended for search and filtering purposes.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "event": { - "description": "This element defines the specific type of event that occurred or that was prevented from occurring.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "This subject or group impacted by the event.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The Encounter during which AdverseEvent was created or to which the creation of this record is tightly associated.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date (and perhaps time) when the adverse event occurred.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "detected": { - "description": "Estimated or actual date the AdverseEvent began, in the opinion of the reporter.", - "$ref": "#/definitions/dateTime" - }, - "_detected": { - "description": "Extensions for detected", - "$ref": "#/definitions/Element" - }, - "recordedDate": { - "description": "The date on which the existence of the AdverseEvent was first recorded.", - "$ref": "#/definitions/dateTime" - }, - "_recordedDate": { - "description": "Extensions for recordedDate", - "$ref": "#/definitions/Element" - }, - "resultingCondition": { - "description": "Includes information about the reaction that occurred as a result of exposure to a substance (for example, a drug or a chemical).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "location": { - "description": "The information about where the adverse event occurred.", - "$ref": "#/definitions/Reference" - }, - "seriousness": { - "description": "Assessment whether this event was of real importance.", - "$ref": "#/definitions/CodeableConcept" - }, - "severity": { - "description": "Describes the severity of the adverse event, in relation to the subject. Contrast to AdverseEvent.seriousness - a severe rash might not be serious, but a mild heart problem is.", - "$ref": "#/definitions/CodeableConcept" - }, - "outcome": { - "description": "Describes the type of outcome from the adverse event.", - "$ref": "#/definitions/CodeableConcept" - }, - "recorder": { - "description": "Information on who recorded the adverse event. May be the patient or a practitioner.", - "$ref": "#/definitions/Reference" - }, - "contributor": { - "description": "Parties that may or should contribute or have contributed information to the adverse event, which can consist of one or more activities. Such information includes information leading to the decision to perform the activity and how to perform the activity (e.g. consultant), information that the activity itself seeks to reveal (e.g. informant of clinical history), or information about what activity was performed (e.g. informant witness).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "suspectEntity": { - "description": "Describes the entity that is suspected to have caused the adverse event.", - "items": { - "$ref": "#/definitions/AdverseEvent_SuspectEntity" - }, - "type": "array" - }, - "subjectMedicalHistory": { - "description": "AdverseEvent.subjectMedicalHistory.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "referenceDocument": { - "description": "AdverseEvent.referenceDocument.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "study": { - "description": "AdverseEvent.study.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "AdverseEvent_SuspectEntity": { - "description": "Actual or potential/avoided event causing unintended physical injury resulting from or contributed to by medical care, a research study or other healthcare setting factors that requires additional monitoring, treatment, or hospitalization, or that results in death.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "instance": { - "description": "Identifies the actual instance of what caused the adverse event. May be a substance, medication, medication administration, medication statement or a device.", - "$ref": "#/definitions/Reference" - }, - "causality": { - "description": "Information on the possible cause of the event.", - "items": { - "$ref": "#/definitions/AdverseEvent_Causality" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "instance" - ] - }, - "AdverseEvent_Causality": { - "description": "Actual or potential/avoided event causing unintended physical injury resulting from or contributed to by medical care, a research study or other healthcare setting factors that requires additional monitoring, treatment, or hospitalization, or that results in death.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "assessment": { - "description": "Assessment of if the entity caused the event.", - "$ref": "#/definitions/CodeableConcept" - }, - "productRelatedness": { - "description": "AdverseEvent.suspectEntity.causalityProductRelatedness.", - "$ref": "#/definitions/string" - }, - "_productRelatedness": { - "description": "Extensions for productRelatedness", - "$ref": "#/definitions/Element" - }, - "author": { - "description": "AdverseEvent.suspectEntity.causalityAuthor.", - "$ref": "#/definitions/Reference" - }, - "method": { - "description": "ProbabilityScale | Bayesian | Checklist.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "AllergyIntolerance": { - "description": "Risk of harmful or undesirable, physiological response which is unique to an individual and associated with exposure to a substance.", - "properties": { - "resourceType": { - "description": "This is a AllergyIntolerance resource", - "const": "AllergyIntolerance" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this AllergyIntolerance by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "clinicalStatus": { - "description": "The clinical status of the allergy or intolerance.", - "$ref": "#/definitions/CodeableConcept" - }, - "verificationStatus": { - "description": "Assertion about certainty associated with the propensity, or potential risk, of a reaction to the identified substance (including pharmaceutical product).", - "$ref": "#/definitions/CodeableConcept" - }, - "type": { - "description": "Identification of the underlying physiological mechanism for the reaction risk.", - "enum": [ - "allergy", - "intolerance" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "Category of the identified substance.", - "items": { - "enum": [ - "food", - "medication", - "environment", - "biologic" - ] - }, - "type": "array" - }, - "_category": { - "description": "Extensions for category", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "criticality": { - "description": "Estimate of the potential clinical harm, or seriousness, of the reaction to the identified substance.", - "enum": [ - "low", - "high", - "unable-to-assess" - ] - }, - "_criticality": { - "description": "Extensions for criticality", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "Code for an allergy or intolerance statement (either a positive or a negated/excluded statement). This may be a code for a substance or pharmaceutical product that is considered to be responsible for the adverse reaction risk (e.g., \"Latex\"), an allergy or intolerance condition (e.g., \"Latex allergy\"), or a negated/excluded code for a specific substance or class (e.g., \"No latex allergy\") or a general or categorical negated statement (e.g., \"No known allergy\", \"No known drug allergies\"). Note: the substance for a specific reaction may be different from the substance identified as the cause of the risk, but it must be consistent with it. For instance, it may be a more specific substance (e.g. a brand medication) or a composite product that includes the identified substance. It must be clinically safe to only process the \u0027code\u0027 and ignore the \u0027reaction.substance\u0027. If a receiving system is unable to confirm that AllergyIntolerance.reaction.substance falls within the semantic scope of AllergyIntolerance.code, then the receiving system should ignore AllergyIntolerance.reaction.substance.", - "$ref": "#/definitions/CodeableConcept" - }, - "patient": { - "description": "The patient who has the allergy or intolerance.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The encounter when the allergy or intolerance was asserted.", - "$ref": "#/definitions/Reference" - }, - "onsetDateTime": { - "description": "Estimated or actual date, date-time, or age when allergy or intolerance was identified.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_onsetDateTime": { - "description": "Extensions for onsetDateTime", - "$ref": "#/definitions/Element" - }, - "onsetAge": { - "description": "Estimated or actual date, date-time, or age when allergy or intolerance was identified.", - "$ref": "#/definitions/Age" - }, - "onsetPeriod": { - "description": "Estimated or actual date, date-time, or age when allergy or intolerance was identified.", - "$ref": "#/definitions/Period" - }, - "onsetRange": { - "description": "Estimated or actual date, date-time, or age when allergy or intolerance was identified.", - "$ref": "#/definitions/Range" - }, - "onsetString": { - "description": "Estimated or actual date, date-time, or age when allergy or intolerance was identified.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_onsetString": { - "description": "Extensions for onsetString", - "$ref": "#/definitions/Element" - }, - "recordedDate": { - "description": "The recordedDate represents when this particular AllergyIntolerance record was created in the system, which is often a system-generated date.", - "$ref": "#/definitions/dateTime" - }, - "_recordedDate": { - "description": "Extensions for recordedDate", - "$ref": "#/definitions/Element" - }, - "recorder": { - "description": "Individual who recorded the record and takes responsibility for its content.", - "$ref": "#/definitions/Reference" - }, - "asserter": { - "description": "The source of the information about the allergy that is recorded.", - "$ref": "#/definitions/Reference" - }, - "lastOccurrence": { - "description": "Represents the date and/or time of the last known occurrence of a reaction event.", - "$ref": "#/definitions/dateTime" - }, - "_lastOccurrence": { - "description": "Extensions for lastOccurrence", - "$ref": "#/definitions/Element" - }, - "note": { - "description": "Additional narrative about the propensity for the Adverse Reaction, not captured in other fields.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "reaction": { - "description": "Details about each adverse reaction event linked to exposure to the identified substance.", - "items": { - "$ref": "#/definitions/AllergyIntolerance_Reaction" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "patient", - "resourceType" - ] - }, - "AllergyIntolerance_Reaction": { - "description": "Risk of harmful or undesirable, physiological response which is unique to an individual and associated with exposure to a substance.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "substance": { - "description": "Identification of the specific substance (or pharmaceutical product) considered to be responsible for the Adverse Reaction event. Note: the substance for a specific reaction may be different from the substance identified as the cause of the risk, but it must be consistent with it. For instance, it may be a more specific substance (e.g. a brand medication) or a composite product that includes the identified substance. It must be clinically safe to only process the \u0027code\u0027 and ignore the \u0027reaction.substance\u0027. If a receiving system is unable to confirm that AllergyIntolerance.reaction.substance falls within the semantic scope of AllergyIntolerance.code, then the receiving system should ignore AllergyIntolerance.reaction.substance.", - "$ref": "#/definitions/CodeableConcept" - }, - "manifestation": { - "description": "Clinical symptoms and/or signs that are observed or associated with the adverse reaction event.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "description": { - "description": "Text description about the reaction as a whole, including details of the manifestation if required.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "onset": { - "description": "Record of the date and/or time of the onset of the Reaction.", - "$ref": "#/definitions/dateTime" - }, - "_onset": { - "description": "Extensions for onset", - "$ref": "#/definitions/Element" - }, - "severity": { - "description": "Clinical assessment of the severity of the reaction event as a whole, potentially considering multiple different manifestations.", - "enum": [ - "mild", - "moderate", - "severe" - ] - }, - "_severity": { - "description": "Extensions for severity", - "$ref": "#/definitions/Element" - }, - "exposureRoute": { - "description": "Identification of the route by which the subject was exposed to the substance.", - "$ref": "#/definitions/CodeableConcept" - }, - "note": { - "description": "Additional text about the adverse reaction event not captured in other fields.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "manifestation" - ] - }, - "Appointment": { - "description": "A booking of a healthcare event among patient(s), practitioner(s), related person(s) and/or device(s) for a specific date/time. This may result in one or more Encounter(s).", - "properties": { - "resourceType": { - "description": "This is a Appointment resource", - "const": "Appointment" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "This records identifiers associated with this appointment concern that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The overall status of the Appointment. Each of the participants has their own participation status which indicates their involvement in the process, however this status indicates the shared status.", - "enum": [ - "proposed", - "pending", - "booked", - "arrived", - "fulfilled", - "cancelled", - "noshow", - "entered-in-error", - "checked-in", - "waitlist" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "cancelationReason": { - "description": "The coded reason for the appointment being cancelled. This is often used in reporting/billing/futher processing to determine if further actions are required, or specific fees apply.", - "$ref": "#/definitions/CodeableConcept" - }, - "serviceCategory": { - "description": "A broad categorization of the service that is to be performed during this appointment.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "serviceType": { - "description": "The specific service that is to be performed during this appointment.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "specialty": { - "description": "The specialty of a practitioner that would be required to perform the service requested in this appointment.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "appointmentType": { - "description": "The style of appointment or patient that has been booked in the slot (not service type).", - "$ref": "#/definitions/CodeableConcept" - }, - "reasonCode": { - "description": "The coded reason that this appointment is being scheduled. This is more clinical than administrative.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Reason the appointment has been scheduled to take place, as specified using information from another resource. When the patient arrives and the encounter begins it may be used as the admission diagnosis. The indication will typically be a Condition (with other resources referenced in the evidence.detail), or a Procedure.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "priority": { - "description": "The priority of the appointment. Can be used to make informed decisions if needing to re-prioritize appointments. (The iCal Standard specifies 0 as undefined, 1 as highest, 9 as lowest priority).", - "$ref": "#/definitions/unsignedInt" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "The brief description of the appointment as would be shown on a subject line in a meeting request, or appointment list. Detailed or expanded information should be put in the comment field.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "supportingInformation": { - "description": "Additional information to support the appointment provided when making the appointment.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "start": { - "description": "Date/Time that the appointment is to take place.", - "$ref": "#/definitions/instant" - }, - "_start": { - "description": "Extensions for start", - "$ref": "#/definitions/Element" - }, - "end": { - "description": "Date/Time that the appointment is to conclude.", - "$ref": "#/definitions/instant" - }, - "_end": { - "description": "Extensions for end", - "$ref": "#/definitions/Element" - }, - "minutesDuration": { - "description": "Number of minutes that the appointment is to take. This can be less than the duration between the start and end times. For example, where the actual time of appointment is only an estimate or if a 30 minute appointment is being requested, but any time would work. Also, if there is, for example, a planned 15 minute break in the middle of a long appointment, the duration may be 15 minutes less than the difference between the start and end.", - "$ref": "#/definitions/positiveInt" - }, - "_minutesDuration": { - "description": "Extensions for minutesDuration", - "$ref": "#/definitions/Element" - }, - "slot": { - "description": "The slots from the participants\u0027 schedules that will be filled by the appointment.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "created": { - "description": "The date that this appointment was initially created. This could be different to the meta.lastModified value on the initial entry, as this could have been before the resource was created on the FHIR server, and should remain unchanged over the lifespan of the appointment.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "Additional comments about the appointment.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - }, - "patientInstruction": { - "description": "While Appointment.comment contains information for internal use, Appointment.patientInstructions is used to capture patient facing information about the Appointment (e.g. please bring your referral or fast from 8pm night before).", - "$ref": "#/definitions/string" - }, - "_patientInstruction": { - "description": "Extensions for patientInstruction", - "$ref": "#/definitions/Element" - }, - "basedOn": { - "description": "The service request this appointment is allocated to assess (e.g. incoming referral or procedure request).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "participant": { - "description": "List of participants involved in the appointment.", - "items": { - "$ref": "#/definitions/Appointment_Participant" - }, - "type": "array" - }, - "requestedPeriod": { - "description": "A set of date ranges (potentially including times) that the appointment is preferred to be scheduled within.\n\nThe duration (usually in minutes) could also be provided to indicate the length of the appointment to fill and populate the start/end times for the actual allocated time. However, in other situations the duration may be calculated by the scheduling system.", - "items": { - "$ref": "#/definitions/Period" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "participant", - "resourceType" - ] - }, - "Appointment_Participant": { - "description": "A booking of a healthcare event among patient(s), practitioner(s), related person(s) and/or device(s) for a specific date/time. This may result in one or more Encounter(s).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Role of participant in the appointment.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "actor": { - "description": "A Person, Location/HealthcareService or Device that is participating in the appointment.", - "$ref": "#/definitions/Reference" - }, - "required": { - "description": "Whether this participant is required to be present at the meeting. This covers a use-case where two doctors need to meet to discuss the results for a specific patient, and the patient is not required to be present.", - "enum": [ - "required", - "optional", - "information-only" - ] - }, - "_required": { - "description": "Extensions for required", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "Participation status of the actor.", - "enum": [ - "accepted", - "declined", - "tentative", - "needs-action" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "Participation period of the actor.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "AppointmentResponse": { - "description": "A reply to an appointment request for a patient and/or practitioner(s), such as a confirmation or rejection.", - "properties": { - "resourceType": { - "description": "This is a AppointmentResponse resource", - "const": "AppointmentResponse" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "This records identifiers associated with this appointment response concern that are defined by business processes and/ or used to refer to it when a direct URL reference to the resource itself is not appropriate.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "appointment": { - "description": "Appointment that this response is replying to.", - "$ref": "#/definitions/Reference" - }, - "start": { - "description": "Date/Time that the appointment is to take place, or requested new start time.", - "$ref": "#/definitions/instant" - }, - "_start": { - "description": "Extensions for start", - "$ref": "#/definitions/Element" - }, - "end": { - "description": "This may be either the same as the appointment request to confirm the details of the appointment, or alternately a new time to request a re-negotiation of the end time.", - "$ref": "#/definitions/instant" - }, - "_end": { - "description": "Extensions for end", - "$ref": "#/definitions/Element" - }, - "participantType": { - "description": "Role of participant in the appointment.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "actor": { - "description": "A Person, Location, HealthcareService, or Device that is participating in the appointment.", - "$ref": "#/definitions/Reference" - }, - "participantStatus": { - "description": "Participation status of the participant. When the status is declined or tentative if the start/end times are different to the appointment, then these times should be interpreted as a requested time change. When the status is accepted, the times can either be the time of the appointment (as a confirmation of the time) or can be empty.", - "$ref": "#/definitions/code" - }, - "_participantStatus": { - "description": "Extensions for participantStatus", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "Additional comments about the appointment.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "appointment", - "resourceType" - ] - }, - "AuditEvent": { - "description": "A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.", - "properties": { - "resourceType": { - "description": "This is a AuditEvent resource", - "const": "AuditEvent" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Identifier for a family of the event. For example, a menu item, program, rule, policy, function code, application name or URL. It identifies the performed function.", - "$ref": "#/definitions/Coding" - }, - "subtype": { - "description": "Identifier for the category of event.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "action": { - "description": "Indicator for type of action performed during the event that generated the audit.", - "enum": [ - "C", - "R", - "U", - "D", - "E" - ] - }, - "_action": { - "description": "Extensions for action", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "The period during which the activity occurred.", - "$ref": "#/definitions/Period" - }, - "recorded": { - "description": "The time when the event was recorded.", - "$ref": "#/definitions/instant" - }, - "_recorded": { - "description": "Extensions for recorded", - "$ref": "#/definitions/Element" - }, - "outcome": { - "description": "Indicates whether the event succeeded or failed.", - "enum": [ - "0", - "4", - "8", - "12" - ] - }, - "_outcome": { - "description": "Extensions for outcome", - "$ref": "#/definitions/Element" - }, - "outcomeDesc": { - "description": "A free text description of the outcome of the event.", - "$ref": "#/definitions/string" - }, - "_outcomeDesc": { - "description": "Extensions for outcomeDesc", - "$ref": "#/definitions/Element" - }, - "purposeOfEvent": { - "description": "The purposeOfUse (reason) that was used during the event being recorded.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "agent": { - "description": "An actor taking an active role in the event or activity that is logged.", - "items": { - "$ref": "#/definitions/AuditEvent_Agent" - }, - "type": "array" - }, - "source": { - "description": "The system that is reporting the event.", - "$ref": "#/definitions/AuditEvent_Source" - }, - "entity": { - "description": "Specific instances of data or objects that have been accessed.", - "items": { - "$ref": "#/definitions/AuditEvent_Entity" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "agent", - "source", - "type", - "resourceType" - ] - }, - "AuditEvent_Agent": { - "description": "A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Specification of the participation type the user plays when performing the event.", - "$ref": "#/definitions/CodeableConcept" - }, - "role": { - "description": "The security role that the user was acting under, that come from local codes defined by the access control security system (e.g. RBAC, ABAC) used in the local context.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "who": { - "description": "Reference to who this agent is that was involved in the event.", - "$ref": "#/definitions/Reference" - }, - "altId": { - "description": "Alternative agent Identifier. For a human, this should be a user identifier text string from authentication system. This identifier would be one known to a common authentication system (e.g. single sign-on), if available.", - "$ref": "#/definitions/string" - }, - "_altId": { - "description": "Extensions for altId", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "Human-meaningful name for the agent.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "requestor": { - "description": "Indicator that the user is or is not the requestor, or initiator, for the event being audited.", - "$ref": "#/definitions/boolean" - }, - "_requestor": { - "description": "Extensions for requestor", - "$ref": "#/definitions/Element" - }, - "location": { - "description": "Where the event occurred.", - "$ref": "#/definitions/Reference" - }, - "policy": { - "description": "The policy or plan that authorized the activity being recorded. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token used.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_policy": { - "description": "Extensions for policy", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "media": { - "description": "Type of media involved. Used when the event is about exporting/importing onto media.", - "$ref": "#/definitions/Coding" - }, - "network": { - "description": "Logical network location for application activity, if the activity has a network location.", - "$ref": "#/definitions/AuditEvent_Network" - }, - "purposeOfUse": { - "description": "The reason (purpose of use), specific to this agent, that was used during the event being recorded.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "AuditEvent_Network": { - "description": "A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "address": { - "description": "An identifier for the network access point of the user device for the audit event.", - "$ref": "#/definitions/string" - }, - "_address": { - "description": "Extensions for address", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "An identifier for the type of network access point that originated the audit event.", - "enum": [ - "1", - "2", - "3", - "4", - "5" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "AuditEvent_Source": { - "description": "A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "site": { - "description": "Logical source location within the healthcare enterprise network. For example, a hospital or other provider location within a multi-entity provider group.", - "$ref": "#/definitions/string" - }, - "_site": { - "description": "Extensions for site", - "$ref": "#/definitions/Element" - }, - "observer": { - "description": "Identifier of the source where the event was detected.", - "$ref": "#/definitions/Reference" - }, - "type": { - "description": "Code specifying the type of source where event originated.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "observer" - ] - }, - "AuditEvent_Entity": { - "description": "A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "what": { - "description": "Identifies a specific instance of the entity. The reference should be version specific.", - "$ref": "#/definitions/Reference" - }, - "type": { - "description": "The type of the object that was involved in this audit event.", - "$ref": "#/definitions/Coding" - }, - "role": { - "description": "Code representing the role the entity played in the event being audited.", - "$ref": "#/definitions/Coding" - }, - "lifecycle": { - "description": "Identifier for the data life-cycle stage for the entity.", - "$ref": "#/definitions/Coding" - }, - "securityLabel": { - "description": "Security labels for the identified entity.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "name": { - "description": "A name of the entity in the audit event.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "Text that describes the entity in more detail.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "query": { - "description": "The query parameters for a query-type entities.", - "$ref": "#/definitions/base64Binary" - }, - "_query": { - "description": "Extensions for query", - "$ref": "#/definitions/Element" - }, - "detail": { - "description": "Tagged value pairs for conveying additional information about the entity.", - "items": { - "$ref": "#/definitions/AuditEvent_Detail" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "AuditEvent_Detail": { - "description": "A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of extra detail provided in the value.", - "$ref": "#/definitions/string" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "The value of the extra detail.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueBase64Binary": { - "description": "The value of the extra detail.", - "pattern": "^(\\s*([0-9a-zA-Z\\+/\u003d]){4}\\s*)+$", - "type": "string" - }, - "_valueBase64Binary": { - "description": "Extensions for valueBase64Binary", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Basic": { - "description": "Basic is used for handling concepts not yet defined in FHIR, narrative-only resources that don\u0027t map to an existing resource, and custom resources not appropriate for inclusion in the FHIR specification.", - "properties": { - "resourceType": { - "description": "This is a Basic resource", - "const": "Basic" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier assigned to the resource for business purposes, outside the context of FHIR.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "code": { - "description": "Identifies the \u0027type\u0027 of resource - equivalent to the resource name for other resources.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "Identifies the patient, practitioner, device or any other resource that is the \"focus\" of this resource.", - "$ref": "#/definitions/Reference" - }, - "created": { - "description": "Identifies when the resource was first created.", - "$ref": "#/definitions/date" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "author": { - "description": "Indicates who was responsible for creating the resource instance.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "code", - "resourceType" - ] - }, - "Binary": { - "description": "A resource that represents the data of a single raw artifact as digital content accessible in its native format. A Binary resource can contain any content, whether text, image, pdf, zip archive, etc.", - "properties": { - "resourceType": { - "description": "This is a Binary resource", - "const": "Binary" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "contentType": { - "description": "MimeType of the binary content represented as a standard MimeType (BCP 13).", - "$ref": "#/definitions/code" - }, - "_contentType": { - "description": "Extensions for contentType", - "$ref": "#/definitions/Element" - }, - "securityContext": { - "description": "This element identifies another resource that can be used as a proxy of the security sensitivity to use when deciding and enforcing access control rules for the Binary resource. Given that the Binary resource contains very few elements that can be used to determine the sensitivity of the data and relationships to individuals, the referenced resource stands in as a proxy equivalent for this purpose. This referenced resource may be related to the Binary (e.g. Media, DocumentReference), or may be some non-related Resource purely as a security proxy. E.g. to identify that the binary resource relates to a patient, and access should only be granted to applications that have access to the patient.", - "$ref": "#/definitions/Reference" - }, - "data": { - "description": "The actual content, base64 encoded.", - "$ref": "#/definitions/base64Binary" - }, - "_data": { - "description": "Extensions for data", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "BiologicallyDerivedProduct": { - "description": "A material substance originating from a biological entity intended to be transplanted or infused\ninto another (possibly the same) biological entity.", - "properties": { - "resourceType": { - "description": "This is a BiologicallyDerivedProduct resource", - "const": "BiologicallyDerivedProduct" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "This records identifiers associated with this biologically derived product instance that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate (e.g. in CDA documents, or in written / printed documentation).", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "productCategory": { - "description": "Broad category of this product.", - "enum": [ - "organ", - "tissue", - "fluid", - "cells", - "biologicalAgent" - ] - }, - "_productCategory": { - "description": "Extensions for productCategory", - "$ref": "#/definitions/Element" - }, - "productCode": { - "description": "A code that identifies the kind of this biologically derived product (SNOMED Ctcode).", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "Whether the product is currently available.", - "enum": [ - "available", - "unavailable" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "request": { - "description": "Procedure request to obtain this biologically derived product.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "quantity": { - "description": "Number of discrete units within this product.", - "$ref": "#/definitions/integer" - }, - "_quantity": { - "description": "Extensions for quantity", - "$ref": "#/definitions/Element" - }, - "parent": { - "description": "Parent product (if any).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "collection": { - "description": "How this product was collected.", - "$ref": "#/definitions/BiologicallyDerivedProduct_Collection" - }, - "processing": { - "description": "Any processing of the product during collection that does not change the fundamental nature of the product. For example adding anti-coagulants during the collection of Peripheral Blood Stem Cells.", - "items": { - "$ref": "#/definitions/BiologicallyDerivedProduct_Processing" - }, - "type": "array" - }, - "manipulation": { - "description": "Any manipulation of product post-collection that is intended to alter the product. For example a buffy-coat enrichment or CD8 reduction of Peripheral Blood Stem Cells to make it more suitable for infusion.", - "$ref": "#/definitions/BiologicallyDerivedProduct_Manipulation" - }, - "storage": { - "description": "Product storage.", - "items": { - "$ref": "#/definitions/BiologicallyDerivedProduct_Storage" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "BiologicallyDerivedProduct_Collection": { - "description": "A material substance originating from a biological entity intended to be transplanted or infused\ninto another (possibly the same) biological entity.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "collector": { - "description": "Healthcare professional who is performing the collection.", - "$ref": "#/definitions/Reference" - }, - "source": { - "description": "The patient or entity, such as a hospital or vendor in the case of a processed/manipulated/manufactured product, providing the product.", - "$ref": "#/definitions/Reference" - }, - "collectedDateTime": { - "description": "Time of product collection.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_collectedDateTime": { - "description": "Extensions for collectedDateTime", - "$ref": "#/definitions/Element" - }, - "collectedPeriod": { - "description": "Time of product collection.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "BiologicallyDerivedProduct_Processing": { - "description": "A material substance originating from a biological entity intended to be transplanted or infused\ninto another (possibly the same) biological entity.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "Description of of processing.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "procedure": { - "description": "Procesing code.", - "$ref": "#/definitions/CodeableConcept" - }, - "additive": { - "description": "Substance added during processing.", - "$ref": "#/definitions/Reference" - }, - "timeDateTime": { - "description": "Time of processing.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_timeDateTime": { - "description": "Extensions for timeDateTime", - "$ref": "#/definitions/Element" - }, - "timePeriod": { - "description": "Time of processing.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "BiologicallyDerivedProduct_Manipulation": { - "description": "A material substance originating from a biological entity intended to be transplanted or infused\ninto another (possibly the same) biological entity.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "Description of manipulation.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "timeDateTime": { - "description": "Time of manipulation.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_timeDateTime": { - "description": "Extensions for timeDateTime", - "$ref": "#/definitions/Element" - }, - "timePeriod": { - "description": "Time of manipulation.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "BiologicallyDerivedProduct_Storage": { - "description": "A material substance originating from a biological entity intended to be transplanted or infused\ninto another (possibly the same) biological entity.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "Description of storage.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "temperature": { - "description": "Storage temperature.", - "$ref": "#/definitions/decimal" - }, - "_temperature": { - "description": "Extensions for temperature", - "$ref": "#/definitions/Element" - }, - "scale": { - "description": "Temperature scale used.", - "enum": [ - "farenheit", - "celsius", - "kelvin" - ] - }, - "_scale": { - "description": "Extensions for scale", - "$ref": "#/definitions/Element" - }, - "duration": { - "description": "Storage timeperiod.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "BodyStructure": { - "description": "Record details about an anatomical structure. This resource may be used when a coded concept does not provide the necessary detail needed for the use case.", - "properties": { - "resourceType": { - "description": "This is a BodyStructure resource", - "const": "BodyStructure" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier for this instance of the anatomical structure.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "active": { - "description": "Whether this body site is in active use.", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "morphology": { - "description": "The kind of structure being represented by the body structure at `BodyStructure.location`. This can define both normal and abnormal morphologies.", - "$ref": "#/definitions/CodeableConcept" - }, - "location": { - "description": "The anatomical location or region of the specimen, lesion, or body structure.", - "$ref": "#/definitions/CodeableConcept" - }, - "locationQualifier": { - "description": "Qualifier to refine the anatomical location. These include qualifiers for laterality, relative location, directionality, number, and plane.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "description": { - "description": "A summary, characterization or explanation of the body structure.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "image": { - "description": "Image or images used to identify a location.", - "items": { - "$ref": "#/definitions/Attachment" - }, - "type": "array" - }, - "patient": { - "description": "The person to which the body site belongs.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "patient", - "resourceType" - ] - }, - "Bundle": { - "description": "A container for a collection of resources.", - "properties": { - "resourceType": { - "description": "This is a Bundle resource", - "const": "Bundle" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A persistent identifier for the bundle that won\u0027t change as a bundle is copied from server to server.", - "$ref": "#/definitions/Identifier" - }, - "type": { - "description": "Indicates the purpose of this bundle - how it is intended to be used.", - "enum": [ - "document", - "message", - "transaction", - "transaction-response", - "batch", - "batch-response", - "history", - "searchset", - "collection" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "timestamp": { - "description": "The date/time that the bundle was assembled - i.e. when the resources were placed in the bundle.", - "$ref": "#/definitions/instant" - }, - "_timestamp": { - "description": "Extensions for timestamp", - "$ref": "#/definitions/Element" - }, - "total": { - "description": "If a set of search matches, this is the total number of entries of type \u0027match\u0027 across all pages in the search. It does not include search.mode \u003d \u0027include\u0027 or \u0027outcome\u0027 entries and it does not provide a count of the number of entries in the Bundle.", - "$ref": "#/definitions/unsignedInt" - }, - "_total": { - "description": "Extensions for total", - "$ref": "#/definitions/Element" - }, - "link": { - "description": "A series of links that provide context to this bundle.", - "items": { - "$ref": "#/definitions/Bundle_Link" - }, - "type": "array" - }, - "entry": { - "description": "An entry in a bundle resource - will either contain a resource or information about a resource (transactions and history only).", - "items": { - "$ref": "#/definitions/Bundle_Entry" - }, - "type": "array" - }, - "signature": { - "description": "Digital Signature - base64 encoded. XML-DSig or a JWT.", - "$ref": "#/definitions/Signature" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Bundle_Link": { - "description": "A container for a collection of resources.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "relation": { - "description": "A name which details the functional use for this link - see [http://www.iana.org/assignments/link-relations/link-relations.xhtml#link-relations-1](http://www.iana.org/assignments/link-relations/link-relations.xhtml#link-relations-1).", - "$ref": "#/definitions/string" - }, - "_relation": { - "description": "Extensions for relation", - "$ref": "#/definitions/Element" - }, - "url": { - "description": "The reference details for the link.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Bundle_Entry": { - "description": "A container for a collection of resources.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "link": { - "description": "A series of links that provide context to this entry.", - "items": { - "$ref": "#/definitions/Bundle_Link" - }, - "type": "array" - }, - "fullUrl": { - "description": "The Absolute URL for the resource. The fullUrl SHALL NOT disagree with the id in the resource - i.e. if the fullUrl is not a urn:uuid, the URL shall be version-independent URL consistent with the Resource.id. The fullUrl is a version independent reference to the resource. The fullUrl element SHALL have a value except that: \n* fullUrl can be empty on a POST (although it does not need to when specifying a temporary id for reference in the bundle)\n* Results from operations might involve resources that are not identified.", - "$ref": "#/definitions/uri" - }, - "_fullUrl": { - "description": "Extensions for fullUrl", - "$ref": "#/definitions/Element" - }, - "resource": { - "description": "The Resource for the entry. The purpose/meaning of the resource is determined by the Bundle.type.", - "$ref": "#/definitions/ResourceList" - }, - "search": { - "description": "Information about the search process that lead to the creation of this entry.", - "$ref": "#/definitions/Bundle_Search" - }, - "request": { - "description": "Additional information about how this entry should be processed as part of a transaction or batch. For history, it shows how the entry was processed to create the version contained in the entry.", - "$ref": "#/definitions/Bundle_Request" - }, - "response": { - "description": "Indicates the results of processing the corresponding \u0027request\u0027 entry in the batch or transaction being responded to or what the results of an operation where when returning history.", - "$ref": "#/definitions/Bundle_Response" - } - }, - "additionalProperties": false - }, - "Bundle_Search": { - "description": "A container for a collection of resources.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "mode": { - "description": "Why this entry is in the result set - whether it\u0027s included as a match or because of an _include requirement, or to convey information or warning information about the search process.", - "enum": [ - "match", - "include", - "outcome" - ] - }, - "_mode": { - "description": "Extensions for mode", - "$ref": "#/definitions/Element" - }, - "score": { - "description": "When searching, the server\u0027s search ranking score for the entry.", - "$ref": "#/definitions/decimal" - }, - "_score": { - "description": "Extensions for score", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Bundle_Request": { - "description": "A container for a collection of resources.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "method": { - "description": "In a transaction or batch, this is the HTTP action to be executed for this entry. In a history bundle, this indicates the HTTP action that occurred.", - "enum": [ - "GET", - "HEAD", - "POST", - "PUT", - "DELETE", - "PATCH" - ] - }, - "_method": { - "description": "Extensions for method", - "$ref": "#/definitions/Element" - }, - "url": { - "description": "The URL for this entry, relative to the root (the address to which the request is posted).", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "ifNoneMatch": { - "description": "If the ETag values match, return a 304 Not Modified status. See the API documentation for [\"Conditional Read\"](http.html#cread).", - "$ref": "#/definitions/string" - }, - "_ifNoneMatch": { - "description": "Extensions for ifNoneMatch", - "$ref": "#/definitions/Element" - }, - "ifModifiedSince": { - "description": "Only perform the operation if the last updated date matches. See the API documentation for [\"Conditional Read\"](http.html#cread).", - "$ref": "#/definitions/instant" - }, - "_ifModifiedSince": { - "description": "Extensions for ifModifiedSince", - "$ref": "#/definitions/Element" - }, - "ifMatch": { - "description": "Only perform the operation if the Etag value matches. For more information, see the API section [\"Managing Resource Contention\"](http.html#concurrency).", - "$ref": "#/definitions/string" - }, - "_ifMatch": { - "description": "Extensions for ifMatch", - "$ref": "#/definitions/Element" - }, - "ifNoneExist": { - "description": "Instruct the server not to perform the create if a specified resource already exists. For further information, see the API documentation for [\"Conditional Create\"](http.html#ccreate). This is just the query portion of the URL - what follows the \"?\" (not including the \"?\").", - "$ref": "#/definitions/string" - }, - "_ifNoneExist": { - "description": "Extensions for ifNoneExist", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Bundle_Response": { - "description": "A container for a collection of resources.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "status": { - "description": "The status code returned by processing this entry. The status SHALL start with a 3 digit HTTP code (e.g. 404) and may contain the standard HTTP description associated with the status code.", - "$ref": "#/definitions/string" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "location": { - "description": "The location header created by processing this operation, populated if the operation returns a location.", - "$ref": "#/definitions/uri" - }, - "_location": { - "description": "Extensions for location", - "$ref": "#/definitions/Element" - }, - "etag": { - "description": "The Etag for the resource, if the operation for the entry produced a versioned resource (see [Resource Metadata and Versioning](http.html#versioning) and [Managing Resource Contention](http.html#concurrency)).", - "$ref": "#/definitions/string" - }, - "_etag": { - "description": "Extensions for etag", - "$ref": "#/definitions/Element" - }, - "lastModified": { - "description": "The date/time that the resource was modified on the server.", - "$ref": "#/definitions/instant" - }, - "_lastModified": { - "description": "Extensions for lastModified", - "$ref": "#/definitions/Element" - }, - "outcome": { - "description": "An OperationOutcome containing hints and warnings produced as part of processing this entry in a batch or transaction.", - "$ref": "#/definitions/ResourceList" - } - }, - "additionalProperties": false - }, - "CapabilityStatement": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "resourceType": { - "description": "This is a CapabilityStatement resource", - "const": "CapabilityStatement" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this capability statement when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this capability statement is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the capability statement is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The identifier that is used to identify this version of the capability statement when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the capability statement author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the capability statement. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the capability statement.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this capability statement. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this capability statement is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the capability statement was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the capability statement changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the capability statement.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the capability statement from a consumer\u0027s perspective. Typically, this is used when the capability statement describes a desired rather than an actual solution, for example as a formal expression of requirements as part of an RFP.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate capability statement instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the capability statement is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this capability statement is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the capability statement and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the capability statement.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "kind": { - "description": "The way that this statement is intended to be used, to describe an actual running instance of software, a particular product (kind, not instance of software) or a class of implementation (e.g. a desired purchase).", - "enum": [ - "instance", - "capability", - "requirements" - ] - }, - "_kind": { - "description": "Extensions for kind", - "$ref": "#/definitions/Element" - }, - "instantiates": { - "description": "Reference to a canonical URL of another CapabilityStatement that this software implements. This capability statement is a published API description that corresponds to a business service. The server may actually implement a subset of the capability statement it claims to implement, so the capability statement must specify the full capability details.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "imports": { - "description": "Reference to a canonical URL of another CapabilityStatement that this software adds to. The capability statement automatically includes everything in the other statement, and it is not duplicated, though the server may repeat the same resources, interactions and operations to add additional details to them.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "software": { - "description": "Software that is covered by this capability statement. It is used when the capability statement describes the capabilities of a particular software version, independent of an installation.", - "$ref": "#/definitions/CapabilityStatement_Software" - }, - "implementation": { - "description": "Identifies a specific implementation instance that is described by the capability statement - i.e. a particular installation, rather than the capabilities of a software program.", - "$ref": "#/definitions/CapabilityStatement_Implementation" - }, - "fhirVersion": { - "description": "The version of the FHIR specification that this CapabilityStatement describes (which SHALL be the same as the FHIR version of the CapabilityStatement itself). There is no default value.", - "enum": [ - "0.01", - "0.05", - "0.06", - "0.11", - "0.0.80", - "0.0.81", - "0.0.82", - "0.4.0", - "0.5.0", - "1.0.0", - "1.0.1", - "1.0.2", - "1.1.0", - "1.4.0", - "1.6.0", - "1.8.0", - "3.0.0", - "3.0.1", - "3.3.0", - "3.5.0", - "4.0.0" - ] - }, - "_fhirVersion": { - "description": "Extensions for fhirVersion", - "$ref": "#/definitions/Element" - }, - "format": { - "description": "A list of the formats supported by this implementation using their content types.", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_format": { - "description": "Extensions for format", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "patchFormat": { - "description": "A list of the patch formats supported by this implementation using their content types.", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_patchFormat": { - "description": "Extensions for patchFormat", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "implementationGuide": { - "description": "A list of implementation guides that the server does (or should) support in their entirety.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "rest": { - "description": "A definition of the restful capabilities of the solution, if any.", - "items": { - "$ref": "#/definitions/CapabilityStatement_Rest" - }, - "type": "array" - }, - "messaging": { - "description": "A description of the messaging capabilities of the solution.", - "items": { - "$ref": "#/definitions/CapabilityStatement_Messaging" - }, - "type": "array" - }, - "document": { - "description": "A document definition.", - "items": { - "$ref": "#/definitions/CapabilityStatement_Document" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "CapabilityStatement_Software": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Name the software is known by.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The version identifier for the software covered by this statement.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "releaseDate": { - "description": "Date this version of the software was released.", - "$ref": "#/definitions/dateTime" - }, - "_releaseDate": { - "description": "Extensions for releaseDate", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "CapabilityStatement_Implementation": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "Information about the specific installation that this capability statement relates to.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "url": { - "description": "An absolute base URL for the implementation. This forms the base for REST interfaces as well as the mailbox and document interfaces.", - "$ref": "#/definitions/url" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "custodian": { - "description": "The organization responsible for the management of the instance and oversight of the data on the server at the specified URL.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "CapabilityStatement_Rest": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "mode": { - "description": "Identifies whether this portion of the statement is describing the ability to initiate or receive restful operations.", - "enum": [ - "client", - "server" - ] - }, - "_mode": { - "description": "Extensions for mode", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "Information about the system\u0027s restful capabilities that apply across all applications, such as security.", - "$ref": "#/definitions/markdown" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - }, - "security": { - "description": "Information about security implementation from an interface perspective - what a client needs to know.", - "$ref": "#/definitions/CapabilityStatement_Security" - }, - "resource": { - "description": "A specification of the restful capabilities of the solution for a specific resource type.", - "items": { - "$ref": "#/definitions/CapabilityStatement_Resource" - }, - "type": "array" - }, - "interaction": { - "description": "A specification of restful operations supported by the system.", - "items": { - "$ref": "#/definitions/CapabilityStatement_Interaction1" - }, - "type": "array" - }, - "searchParam": { - "description": "Search parameters that are supported for searching all resources for implementations to support and/or make use of - either references to ones defined in the specification, or additional ones defined for/by the implementation.", - "items": { - "$ref": "#/definitions/CapabilityStatement_SearchParam" - }, - "type": "array" - }, - "operation": { - "description": "Definition of an operation or a named query together with its parameters and their meaning and type.", - "items": { - "$ref": "#/definitions/CapabilityStatement_Operation" - }, - "type": "array" - }, - "compartment": { - "description": "An absolute URI which is a reference to the definition of a compartment that the system supports. The reference is to a CompartmentDefinition resource by its canonical URL .", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "CapabilityStatement_Security": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "cors": { - "description": "Server adds CORS headers when responding to requests - this enables Javascript applications to use the server.", - "$ref": "#/definitions/boolean" - }, - "_cors": { - "description": "Extensions for cors", - "$ref": "#/definitions/Element" - }, - "service": { - "description": "Types of security services that are supported/required by the system.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "description": { - "description": "General description of how security works.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "CapabilityStatement_Resource": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "A type of resource exposed via the restful interface.", - "$ref": "#/definitions/code" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "A specification of the profile that describes the solution\u0027s overall support for the resource, including any constraints on cardinality, bindings, lengths or other limitations. See further discussion in [Using Profiles](profiling.html#profile-uses).", - "$ref": "#/definitions/canonical" - }, - "supportedProfile": { - "description": "A list of profiles that represent different use cases supported by the system. For a server, \"supported by the system\" means the system hosts/produces a set of resources that are conformant to a particular profile, and allows clients that use its services to search using this profile and to find appropriate data. For a client, it means the system will search by this profile and process data according to the guidance implicit in the profile. See further discussion in [Using Profiles](profiling.html#profile-uses).", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "documentation": { - "description": "Additional information about the resource type used by the system.", - "$ref": "#/definitions/markdown" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - }, - "interaction": { - "description": "Identifies a restful operation supported by the solution.", - "items": { - "$ref": "#/definitions/CapabilityStatement_Interaction" - }, - "type": "array" - }, - "versioning": { - "description": "This field is set to no-version to specify that the system does not support (server) or use (client) versioning for this resource type. If this has some other value, the server must at least correctly track and populate the versionId meta-property on resources. If the value is \u0027versioned-update\u0027, then the server supports all the versioning features, including using e-tags for version integrity in the API.", - "enum": [ - "no-version", - "versioned", - "versioned-update" - ] - }, - "_versioning": { - "description": "Extensions for versioning", - "$ref": "#/definitions/Element" - }, - "readHistory": { - "description": "A flag for whether the server is able to return past versions as part of the vRead operation.", - "$ref": "#/definitions/boolean" - }, - "_readHistory": { - "description": "Extensions for readHistory", - "$ref": "#/definitions/Element" - }, - "updateCreate": { - "description": "A flag to indicate that the server allows or needs to allow the client to create new identities on the server (that is, the client PUTs to a location where there is no existing resource). Allowing this operation means that the server allows the client to create new identities on the server.", - "$ref": "#/definitions/boolean" - }, - "_updateCreate": { - "description": "Extensions for updateCreate", - "$ref": "#/definitions/Element" - }, - "conditionalCreate": { - "description": "A flag that indicates that the server supports conditional create.", - "$ref": "#/definitions/boolean" - }, - "_conditionalCreate": { - "description": "Extensions for conditionalCreate", - "$ref": "#/definitions/Element" - }, - "conditionalRead": { - "description": "A code that indicates how the server supports conditional read.", - "enum": [ - "not-supported", - "modified-since", - "not-match", - "full-support" - ] - }, - "_conditionalRead": { - "description": "Extensions for conditionalRead", - "$ref": "#/definitions/Element" - }, - "conditionalUpdate": { - "description": "A flag that indicates that the server supports conditional update.", - "$ref": "#/definitions/boolean" - }, - "_conditionalUpdate": { - "description": "Extensions for conditionalUpdate", - "$ref": "#/definitions/Element" - }, - "conditionalDelete": { - "description": "A code that indicates how the server supports conditional delete.", - "enum": [ - "not-supported", - "single", - "multiple" - ] - }, - "_conditionalDelete": { - "description": "Extensions for conditionalDelete", - "$ref": "#/definitions/Element" - }, - "referencePolicy": { - "description": "A set of flags that defines how references are supported.", - "items": { - "enum": [ - "literal", - "logical", - "resolves", - "enforced", - "local" - ] - }, - "type": "array" - }, - "_referencePolicy": { - "description": "Extensions for referencePolicy", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "searchInclude": { - "description": "A list of _include values supported by the server.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_searchInclude": { - "description": "Extensions for searchInclude", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "searchRevInclude": { - "description": "A list of _revinclude (reverse include) values supported by the server.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_searchRevInclude": { - "description": "Extensions for searchRevInclude", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "searchParam": { - "description": "Search parameters for implementations to support and/or make use of - either references to ones defined in the specification, or additional ones defined for/by the implementation.", - "items": { - "$ref": "#/definitions/CapabilityStatement_SearchParam" - }, - "type": "array" - }, - "operation": { - "description": "Definition of an operation or a named query together with its parameters and their meaning and type. Consult the definition of the operation for details about how to invoke the operation, and the parameters.", - "items": { - "$ref": "#/definitions/CapabilityStatement_Operation" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "CapabilityStatement_Interaction": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Coded identifier of the operation, supported by the system resource.", - "enum": [ - "read", - "vread", - "update", - "patch", - "delete", - "history-instance", - "history-type", - "create", - "search-type" - ] - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "Guidance specific to the implementation of this operation, such as \u0027delete is a logical delete\u0027 or \u0027updates are only allowed with version id\u0027 or \u0027creates permitted from pre-authorized certificates only\u0027.", - "$ref": "#/definitions/markdown" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "CapabilityStatement_SearchParam": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The name of the search parameter used in the interface.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "definition": { - "description": "An absolute URI that is a formal reference to where this parameter was first defined, so that a client can be confident of the meaning of the search parameter (a reference to [[[SearchParameter.url]]]). This element SHALL be populated if the search parameter refers to a SearchParameter defined by the FHIR core specification or externally defined IGs.", - "$ref": "#/definitions/canonical" - }, - "type": { - "description": "The type of value a search parameter refers to, and how the content is interpreted.", - "enum": [ - "number", - "date", - "string", - "token", - "reference", - "composite", - "quantity", - "uri", - "special" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "This allows documentation of any distinct behaviors about how the search parameter is used. For example, text matching algorithms.", - "$ref": "#/definitions/markdown" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "CapabilityStatement_Operation": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The name of the operation or query. For an operation, this is the name prefixed with $ and used in the URL. For a query, this is the name used in the _query parameter when the query is called.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "definition": { - "description": "Where the formal definition can be found. If a server references the base definition of an Operation (i.e. from the specification itself such as ```http://hl7.org/fhir/OperationDefinition/ValueSet-expand```), that means it supports the full capabilities of the operation - e.g. both GET and POST invocation. If it only supports a subset, it must define its own custom [[[OperationDefinition]]] with a \u0027base\u0027 of the original OperationDefinition. The custom definition would describe the specific subset of functionality supported.", - "$ref": "#/definitions/canonical" - }, - "documentation": { - "description": "Documentation that describes anything special about the operation behavior, possibly detailing different behavior for system, type and instance-level invocation of the operation.", - "$ref": "#/definitions/markdown" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "definition" - ] - }, - "CapabilityStatement_Interaction1": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A coded identifier of the operation, supported by the system.", - "enum": [ - "transaction", - "batch", - "search-system", - "history-system" - ] - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "Guidance specific to the implementation of this operation, such as limitations on the kind of transactions allowed, or information about system wide search is implemented.", - "$ref": "#/definitions/markdown" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "CapabilityStatement_Messaging": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "endpoint": { - "description": "An endpoint (network accessible address) to which messages and/or replies are to be sent.", - "items": { - "$ref": "#/definitions/CapabilityStatement_Endpoint" - }, - "type": "array" - }, - "reliableCache": { - "description": "Length if the receiver\u0027s reliable messaging cache in minutes (if a receiver) or how long the cache length on the receiver should be (if a sender).", - "$ref": "#/definitions/unsignedInt" - }, - "_reliableCache": { - "description": "Extensions for reliableCache", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "Documentation about the system\u0027s messaging capabilities for this endpoint not otherwise documented by the capability statement. For example, the process for becoming an authorized messaging exchange partner.", - "$ref": "#/definitions/markdown" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - }, - "supportedMessage": { - "description": "References to message definitions for messages this system can send or receive.", - "items": { - "$ref": "#/definitions/CapabilityStatement_SupportedMessage" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "CapabilityStatement_Endpoint": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "protocol": { - "description": "A list of the messaging transport protocol(s) identifiers, supported by this endpoint.", - "$ref": "#/definitions/Coding" - }, - "address": { - "description": "The network address of the endpoint. For solutions that do not use network addresses for routing, it can be just an identifier.", - "$ref": "#/definitions/url" - }, - "_address": { - "description": "Extensions for address", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "protocol" - ] - }, - "CapabilityStatement_SupportedMessage": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "mode": { - "description": "The mode of this event declaration - whether application is sender or receiver.", - "enum": [ - "sender", - "receiver" - ] - }, - "_mode": { - "description": "Extensions for mode", - "$ref": "#/definitions/Element" - }, - "definition": { - "description": "Points to a message definition that identifies the messaging event, message structure, allowed responses, etc.", - "$ref": "#/definitions/canonical" - } - }, - "additionalProperties": false, - "required": [ - "definition" - ] - }, - "CapabilityStatement_Document": { - "description": "A Capability Statement documents a set of capabilities (behaviors) of a FHIR Server for a particular version of FHIR that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "mode": { - "description": "Mode of this document declaration - whether an application is a producer or consumer.", - "enum": [ - "producer", - "consumer" - ] - }, - "_mode": { - "description": "Extensions for mode", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "A description of how the application supports or uses the specified document profile. For example, when documents are created, what action is taken with consumed documents, etc.", - "$ref": "#/definitions/markdown" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "A profile on the document Bundle that constrains which resources are present, and their contents.", - "$ref": "#/definitions/canonical" - } - }, - "additionalProperties": false, - "required": [ - "profile" - ] - }, - "CarePlan": { - "description": "Describes the intention of how one or more practitioners intend to deliver care for a particular patient, group or community for a period of time, possibly limited to care for a specific condition or set of conditions.", - "properties": { - "resourceType": { - "description": "This is a CarePlan resource", - "const": "CarePlan" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this care plan by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "instantiatesCanonical": { - "description": "The URL pointing to a FHIR-defined protocol, guideline, questionnaire or other definition that is adhered to in whole or in part by this CarePlan.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "instantiatesUri": { - "description": "The URL pointing to an externally maintained protocol, guideline, questionnaire or other definition that is adhered to in whole or in part by this CarePlan.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "basedOn": { - "description": "A care plan that is fulfilled in whole or in part by this care plan.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "replaces": { - "description": "Completed or terminated care plan whose function is taken by this new care plan.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "partOf": { - "description": "A larger care plan of which this particular care plan is a component or step.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "Indicates whether the plan is currently being acted upon, represents future intentions or is now a historical record.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "intent": { - "description": "Indicates the level of authority/intentionality associated with the care plan and where the care plan fits into the workflow chain.", - "$ref": "#/definitions/code" - }, - "_intent": { - "description": "Extensions for intent", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "Identifies what \"kind\" of plan this is to support differentiation between multiple co-existing plans; e.g. \"Home health\", \"psychiatric\", \"asthma\", \"disease management\", \"wellness plan\", etc.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "title": { - "description": "Human-friendly name for the care plan.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A description of the scope and nature of the plan.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "subject": { - "description": "Identifies the patient or group whose intended care is described by the plan.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The Encounter during which this CarePlan was created or to which the creation of this record is tightly associated.", - "$ref": "#/definitions/Reference" - }, - "period": { - "description": "Indicates when the plan did (or is intended to) come into effect and end.", - "$ref": "#/definitions/Period" - }, - "created": { - "description": "Represents when this particular CarePlan record was created in the system, which is often a system-generated date.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "author": { - "description": "When populated, the author is responsible for the care plan. The care plan is attributed to the author.", - "$ref": "#/definitions/Reference" - }, - "contributor": { - "description": "Identifies the individual(s) or organization who provided the contents of the care plan.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "careTeam": { - "description": "Identifies all people and organizations who are expected to be involved in the care envisioned by this plan.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "addresses": { - "description": "Identifies the conditions/problems/concerns/diagnoses/etc. whose management and/or mitigation are handled by this plan.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "supportingInfo": { - "description": "Identifies portions of the patient\u0027s record that specifically influenced the formation of the plan. These might include comorbidities, recent procedures, limitations, recent assessments, etc.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "goal": { - "description": "Describes the intended objective(s) of carrying out the care plan.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "activity": { - "description": "Identifies a planned action to occur as part of the plan. For example, a medication to be used, lab tests to perform, self-monitoring, education, etc.", - "items": { - "$ref": "#/definitions/CarePlan_Activity" - }, - "type": "array" - }, - "note": { - "description": "General notes about the care plan not covered elsewhere.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "CarePlan_Activity": { - "description": "Describes the intention of how one or more practitioners intend to deliver care for a particular patient, group or community for a period of time, possibly limited to care for a specific condition or set of conditions.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "outcomeCodeableConcept": { - "description": "Identifies the outcome at the point when the status of the activity is assessed. For example, the outcome of an education activity could be patient understands (or not).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "outcomeReference": { - "description": "Details of the outcome or action resulting from the activity. The reference to an \"event\" resource, such as Procedure or Encounter or Observation, is the result/outcome of the activity itself. The activity can be conveyed using CarePlan.activity.detail OR using the CarePlan.activity.reference (a reference to a “request” resource).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "progress": { - "description": "Notes about the adherence/status/progress of the activity.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "reference": { - "description": "The details of the proposed activity represented in a specific resource.", - "$ref": "#/definitions/Reference" - }, - "detail": { - "description": "A simple summary of a planned activity suitable for a general care plan system (e.g. form driven) that doesn\u0027t know about specific resources such as procedure etc.", - "$ref": "#/definitions/CarePlan_Detail" - } - }, - "additionalProperties": false - }, - "CarePlan_Detail": { - "description": "Describes the intention of how one or more practitioners intend to deliver care for a particular patient, group or community for a period of time, possibly limited to care for a specific condition or set of conditions.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "kind": { - "description": "A description of the kind of resource the in-line definition of a care plan activity is representing. The CarePlan.activity.detail is an in-line definition when a resource is not referenced using CarePlan.activity.reference. For example, a MedicationRequest, a ServiceRequest, or a CommunicationRequest.", - "$ref": "#/definitions/code" - }, - "_kind": { - "description": "Extensions for kind", - "$ref": "#/definitions/Element" - }, - "instantiatesCanonical": { - "description": "The URL pointing to a FHIR-defined protocol, guideline, questionnaire or other definition that is adhered to in whole or in part by this CarePlan activity.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "instantiatesUri": { - "description": "The URL pointing to an externally maintained protocol, guideline, questionnaire or other definition that is adhered to in whole or in part by this CarePlan activity.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "code": { - "description": "Detailed description of the type of planned activity; e.g. what lab test, what procedure, what kind of encounter.", - "$ref": "#/definitions/CodeableConcept" - }, - "reasonCode": { - "description": "Provides the rationale that drove the inclusion of this particular activity as part of the plan or the reason why the activity was prohibited.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Indicates another resource, such as the health condition(s), whose existence justifies this request and drove the inclusion of this particular activity as part of the plan.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "goal": { - "description": "Internal reference that identifies the goals that this activity is intended to contribute towards meeting.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "Identifies what progress is being made for the specific activity.", - "enum": [ - "not-started", - "scheduled", - "in-progress", - "on-hold", - "completed", - "cancelled", - "stopped", - "unknown", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "Provides reason why the activity isn\u0027t yet started, is on hold, was cancelled, etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "doNotPerform": { - "description": "If true, indicates that the described activity is one that must NOT be engaged in when following the plan. If false, or missing, indicates that the described activity is one that should be engaged in when following the plan.", - "$ref": "#/definitions/boolean" - }, - "_doNotPerform": { - "description": "Extensions for doNotPerform", - "$ref": "#/definitions/Element" - }, - "scheduledTiming": { - "description": "The period, timing or frequency upon which the described activity is to occur.", - "$ref": "#/definitions/Timing" - }, - "scheduledPeriod": { - "description": "The period, timing or frequency upon which the described activity is to occur.", - "$ref": "#/definitions/Period" - }, - "scheduledString": { - "description": "The period, timing or frequency upon which the described activity is to occur.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_scheduledString": { - "description": "Extensions for scheduledString", - "$ref": "#/definitions/Element" - }, - "location": { - "description": "Identifies the facility where the activity will occur; e.g. home, hospital, specific clinic, etc.", - "$ref": "#/definitions/Reference" - }, - "performer": { - "description": "Identifies who\u0027s expected to be involved in the activity.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "productCodeableConcept": { - "description": "Identifies the food, drug or other product to be consumed or supplied in the activity.", - "$ref": "#/definitions/CodeableConcept" - }, - "productReference": { - "description": "Identifies the food, drug or other product to be consumed or supplied in the activity.", - "$ref": "#/definitions/Reference" - }, - "dailyAmount": { - "description": "Identifies the quantity expected to be consumed in a given day.", - "$ref": "#/definitions/Quantity" - }, - "quantity": { - "description": "Identifies the quantity expected to be supplied, administered or consumed by the subject.", - "$ref": "#/definitions/Quantity" - }, - "description": { - "description": "This provides a textual description of constraints on the intended activity occurrence, including relation to other activities. It may also include objectives, pre-conditions and end-conditions. Finally, it may convey specifics about the activity such as body site, method, route, etc.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "CareTeam": { - "description": "The Care Team includes all the people and organizations who plan to participate in the coordination and delivery of care for a patient.", - "properties": { - "resourceType": { - "description": "This is a CareTeam resource", - "const": "CareTeam" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this care team by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "Indicates the current state of the care team.", - "enum": [ - "proposed", - "active", - "suspended", - "inactive", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "Identifies what kind of team. This is to support differentiation between multiple co-existing teams, such as care plan team, episode of care team, longitudinal care team.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "name": { - "description": "A label for human use intended to distinguish like teams. E.g. the \"red\" vs. \"green\" trauma teams.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "subject": { - "description": "Identifies the patient or group whose intended care is handled by the team.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The Encounter during which this CareTeam was created or to which the creation of this record is tightly associated.", - "$ref": "#/definitions/Reference" - }, - "period": { - "description": "Indicates when the team did (or is intended to) come into effect and end.", - "$ref": "#/definitions/Period" - }, - "participant": { - "description": "Identifies all people and organizations who are expected to be involved in the care team.", - "items": { - "$ref": "#/definitions/CareTeam_Participant" - }, - "type": "array" - }, - "reasonCode": { - "description": "Describes why the care team exists.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Condition(s) that this care team addresses.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "managingOrganization": { - "description": "The organization responsible for the care team.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "telecom": { - "description": "A central contact detail for the care team (that applies to all members).", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "note": { - "description": "Comments made about the CareTeam.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "CareTeam_Participant": { - "description": "The Care Team includes all the people and organizations who plan to participate in the coordination and delivery of care for a patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "role": { - "description": "Indicates specific responsibility of an individual within the care team, such as \"Primary care physician\", \"Trained social worker counselor\", \"Caregiver\", etc.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "member": { - "description": "The specific person or organization who is participating/expected to participate in the care team.", - "$ref": "#/definitions/Reference" - }, - "onBehalfOf": { - "description": "The organization of the practitioner.", - "$ref": "#/definitions/Reference" - }, - "period": { - "description": "Indicates when the specific member or organization did (or is intended to) come into effect and end.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "CatalogEntry": { - "description": "Catalog entries are wrappers that contextualize items included in a catalog.", - "properties": { - "resourceType": { - "description": "This is a CatalogEntry resource", - "const": "CatalogEntry" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Used in supporting different identifiers for the same product, e.g. manufacturer code and retailer code.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "type": { - "description": "The type of item - medication, device, service, protocol or other.", - "$ref": "#/definitions/CodeableConcept" - }, - "orderable": { - "description": "Whether the entry represents an orderable item.", - "$ref": "#/definitions/boolean" - }, - "_orderable": { - "description": "Extensions for orderable", - "$ref": "#/definitions/Element" - }, - "referencedItem": { - "description": "The item in a catalog or definition.", - "$ref": "#/definitions/Reference" - }, - "additionalIdentifier": { - "description": "Used in supporting related concepts, e.g. NDC to RxNorm.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "classification": { - "description": "Classes of devices, or ATC for medication.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "status": { - "description": "Used to support catalog exchange even for unsupported products, e.g. getting list of medications even if not prescribable.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "validityPeriod": { - "description": "The time period in which this catalog entry is expected to be active.", - "$ref": "#/definitions/Period" - }, - "validTo": { - "description": "The date until which this catalog entry is expected to be active.", - "$ref": "#/definitions/dateTime" - }, - "_validTo": { - "description": "Extensions for validTo", - "$ref": "#/definitions/Element" - }, - "lastUpdated": { - "description": "Typically date of issue is different from the beginning of the validity. This can be used to see when an item was last updated.", - "$ref": "#/definitions/dateTime" - }, - "_lastUpdated": { - "description": "Extensions for lastUpdated", - "$ref": "#/definitions/Element" - }, - "additionalCharacteristic": { - "description": "Used for examplefor Out of Formulary, or any specifics.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "additionalClassification": { - "description": "User for example for ATC classification, or.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "relatedEntry": { - "description": "Used for example, to point to a substance, or to a device used to administer a medication.", - "items": { - "$ref": "#/definitions/CatalogEntry_RelatedEntry" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType", - "referencedItem" - ] - }, - "CatalogEntry_RelatedEntry": { - "description": "Catalog entries are wrappers that contextualize items included in a catalog.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "relationtype": { - "description": "The type of relation to the related item: child, parent, packageContent, containerPackage, usedIn, uses, requires, etc.", - "enum": [ - "triggers", - "is-replaced-by" - ] - }, - "_relationtype": { - "description": "Extensions for relationtype", - "$ref": "#/definitions/Element" - }, - "item": { - "description": "The reference to the related item.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "item" - ] - }, - "ChargeItem": { - "description": "The resource ChargeItem describes the provision of healthcare provider products for a certain patient, therefore referring not only to the product, but containing in addition details of the provision, like date, time, amounts and participating organizations and persons. Main Usage of the ChargeItem is to enable the billing process and internal cost allocation.", - "properties": { - "resourceType": { - "description": "This is a ChargeItem resource", - "const": "ChargeItem" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers assigned to this event performer or other systems.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "definitionUri": { - "description": "References the (external) source of pricing information, rules of application for the code this ChargeItem uses.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_definitionUri": { - "description": "Extensions for definitionUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "definitionCanonical": { - "description": "References the source of pricing information, rules of application for the code this ChargeItem uses.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "status": { - "description": "The current state of the ChargeItem.", - "enum": [ - "planned", - "billable", - "not-billable", - "aborted", - "billed", - "entered-in-error", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "partOf": { - "description": "ChargeItems can be grouped to larger ChargeItems covering the whole set.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "code": { - "description": "A code that identifies the charge, like a billing code.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "The individual or set of individuals the action is being or was performed on.", - "$ref": "#/definitions/Reference" - }, - "context": { - "description": "The encounter or episode of care that establishes the context for this event.", - "$ref": "#/definitions/Reference" - }, - "occurrenceDateTime": { - "description": "Date/time(s) or duration when the charged service was applied.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_occurrenceDateTime": { - "description": "Extensions for occurrenceDateTime", - "$ref": "#/definitions/Element" - }, - "occurrencePeriod": { - "description": "Date/time(s) or duration when the charged service was applied.", - "$ref": "#/definitions/Period" - }, - "occurrenceTiming": { - "description": "Date/time(s) or duration when the charged service was applied.", - "$ref": "#/definitions/Timing" - }, - "performer": { - "description": "Indicates who or what performed or participated in the charged service.", - "items": { - "$ref": "#/definitions/ChargeItem_Performer" - }, - "type": "array" - }, - "performingOrganization": { - "description": "The organization requesting the service.", - "$ref": "#/definitions/Reference" - }, - "requestingOrganization": { - "description": "The organization performing the service.", - "$ref": "#/definitions/Reference" - }, - "costCenter": { - "description": "The financial cost center permits the tracking of charge attribution.", - "$ref": "#/definitions/Reference" - }, - "quantity": { - "description": "Quantity of which the charge item has been serviced.", - "$ref": "#/definitions/Quantity" - }, - "bodysite": { - "description": "The anatomical location where the related service has been applied.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "factorOverride": { - "description": "Factor overriding the factor determined by the rules associated with the code.", - "$ref": "#/definitions/decimal" - }, - "_factorOverride": { - "description": "Extensions for factorOverride", - "$ref": "#/definitions/Element" - }, - "priceOverride": { - "description": "Total price of the charge overriding the list price associated with the code.", - "$ref": "#/definitions/Money" - }, - "overrideReason": { - "description": "If the list price or the rule-based factor associated with the code is overridden, this attribute can capture a text to indicate the reason for this action.", - "$ref": "#/definitions/string" - }, - "_overrideReason": { - "description": "Extensions for overrideReason", - "$ref": "#/definitions/Element" - }, - "enterer": { - "description": "The device, practitioner, etc. who entered the charge item.", - "$ref": "#/definitions/Reference" - }, - "enteredDate": { - "description": "Date the charge item was entered.", - "$ref": "#/definitions/dateTime" - }, - "_enteredDate": { - "description": "Extensions for enteredDate", - "$ref": "#/definitions/Element" - }, - "reason": { - "description": "Describes why the event occurred in coded or textual form.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "service": { - "description": "Indicated the rendered service that caused this charge.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "productReference": { - "description": "Identifies the device, food, drug or other product being charged either by type code or reference to an instance.", - "$ref": "#/definitions/Reference" - }, - "productCodeableConcept": { - "description": "Identifies the device, food, drug or other product being charged either by type code or reference to an instance.", - "$ref": "#/definitions/CodeableConcept" - }, - "account": { - "description": "Account into which this ChargeItems belongs.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Comments made about the event by the performer, subject or other participants.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "supportingInformation": { - "description": "Further information supporting this charge.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "code", - "subject", - "resourceType" - ] - }, - "ChargeItem_Performer": { - "description": "The resource ChargeItem describes the provision of healthcare provider products for a certain patient, therefore referring not only to the product, but containing in addition details of the provision, like date, time, amounts and participating organizations and persons. Main Usage of the ChargeItem is to enable the billing process and internal cost allocation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "function": { - "description": "Describes the type of performance or participation(e.g. primary surgeon, anesthesiologiest, etc.).", - "$ref": "#/definitions/CodeableConcept" - }, - "actor": { - "description": "The device, practitioner, etc. who performed or participated in the service.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "actor" - ] - }, - "ChargeItemDefinition": { - "description": "The ChargeItemDefinition resource provides the properties that apply to the (billing) codes necessary to calculate costs and prices. The properties may differ largely depending on type and realm, therefore this resource gives only a rough structure and requires profiling for each type of billing code system.", - "properties": { - "resourceType": { - "description": "This is a ChargeItemDefinition resource", - "const": "ChargeItemDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this charge item definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this charge item definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the charge item definition is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this charge item definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the charge item definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the charge item definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active assets.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the charge item definition.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "derivedFromUri": { - "description": "The URL pointing to an externally-defined charge item definition that is adhered to in whole or in part by this definition.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_derivedFromUri": { - "description": "Extensions for derivedFromUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "partOf": { - "description": "A larger definition of which this particular definition is a component or step.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "replaces": { - "description": "As new versions of a protocol or guideline are defined, allows identification of what versions are replaced by a new instance.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "status": { - "description": "The current state of the ChargeItemDefinition.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this charge item definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the charge item definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the charge item definition changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the charge item definition.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the charge item definition from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate charge item definition instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the charge item definition is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "copyright": { - "description": "A copyright statement relating to the charge item definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the charge item definition.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the charge item definition content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "code": { - "description": "The defined billing details in this resource pertain to the given billing code.", - "$ref": "#/definitions/CodeableConcept" - }, - "instance": { - "description": "The defined billing details in this resource pertain to the given product instance(s).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "applicability": { - "description": "Expressions that describe applicability criteria for the billing code.", - "items": { - "$ref": "#/definitions/ChargeItemDefinition_Applicability" - }, - "type": "array" - }, - "propertyGroup": { - "description": "Group of properties which are applicable under the same conditions. If no applicability rules are established for the group, then all properties always apply.", - "items": { - "$ref": "#/definitions/ChargeItemDefinition_PropertyGroup" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "ChargeItemDefinition_Applicability": { - "description": "The ChargeItemDefinition resource provides the properties that apply to the (billing) codes necessary to calculate costs and prices. The properties may differ largely depending on type and realm, therefore this resource gives only a rough structure and requires profiling for each type of billing code system.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "A brief, natural language description of the condition that effectively communicates the intended semantics.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The media type of the language for the expression, e.g. \"text/cql\" for Clinical Query Language expressions or \"text/fhirpath\" for FHIRPath expressions.", - "$ref": "#/definitions/string" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "An expression that returns true or false, indicating whether the condition is satisfied. When using FHIRPath expressions, the %context environment variable must be replaced at runtime with the ChargeItem resource to which this definition is applied.", - "$ref": "#/definitions/string" - }, - "_expression": { - "description": "Extensions for expression", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ChargeItemDefinition_PropertyGroup": { - "description": "The ChargeItemDefinition resource provides the properties that apply to the (billing) codes necessary to calculate costs and prices. The properties may differ largely depending on type and realm, therefore this resource gives only a rough structure and requires profiling for each type of billing code system.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "applicability": { - "description": "Expressions that describe applicability criteria for the priceComponent.", - "items": { - "$ref": "#/definitions/ChargeItemDefinition_Applicability" - }, - "type": "array" - }, - "priceComponent": { - "description": "The price for a ChargeItem may be calculated as a base price with surcharges/deductions that apply in certain conditions. A ChargeItemDefinition resource that defines the prices, factors and conditions that apply to a billing code is currently under development. The priceComponent element can be used to offer transparency to the recipient of the Invoice of how the prices have been calculated.", - "items": { - "$ref": "#/definitions/ChargeItemDefinition_PriceComponent" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ChargeItemDefinition_PriceComponent": { - "description": "The ChargeItemDefinition resource provides the properties that apply to the (billing) codes necessary to calculate costs and prices. The properties may differ largely depending on type and realm, therefore this resource gives only a rough structure and requires profiling for each type of billing code system.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "This code identifies the type of the component.", - "$ref": "#/definitions/code" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A code that identifies the component. Codes may be used to differentiate between kinds of taxes, surcharges, discounts etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "factor": { - "description": "The factor that has been applied on the base price for calculating this component.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "amount": { - "description": "The amount calculated for this component.", - "$ref": "#/definitions/Money" - } - }, - "additionalProperties": false - }, - "Claim": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "resourceType": { - "description": "This is a Claim resource", - "const": "Claim" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this claim.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of the resource instance.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The category of claim, e.g. oral, pharmacy, vision, institutional, professional.", - "$ref": "#/definitions/CodeableConcept" - }, - "subType": { - "description": "A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.", - "$ref": "#/definitions/CodeableConcept" - }, - "use": { - "description": "A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.", - "enum": [ - "claim", - "preauthorization", - "predetermination" - ] - }, - "_use": { - "description": "Extensions for use", - "$ref": "#/definitions/Element" - }, - "patient": { - "description": "The party to whom the professional services and/or products have been supplied or are being considered and for whom actual or forecast reimbursement is sought.", - "$ref": "#/definitions/Reference" - }, - "billablePeriod": { - "description": "The period for which charges are being submitted.", - "$ref": "#/definitions/Period" - }, - "created": { - "description": "The date this resource was created.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "enterer": { - "description": "Individual who created the claim, predetermination or preauthorization.", - "$ref": "#/definitions/Reference" - }, - "insurer": { - "description": "The Insurer who is target of the request.", - "$ref": "#/definitions/Reference" - }, - "provider": { - "description": "The provider which is responsible for the claim, predetermination or preauthorization.", - "$ref": "#/definitions/Reference" - }, - "priority": { - "description": "The provider-required urgency of processing the request. Typical values include: stat, routine deferred.", - "$ref": "#/definitions/CodeableConcept" - }, - "fundsReserve": { - "description": "A code to indicate whether and for whom funds are to be reserved for future claims.", - "$ref": "#/definitions/CodeableConcept" - }, - "related": { - "description": "Other claims which are related to this claim such as prior submissions or claims for related services or for the same event.", - "items": { - "$ref": "#/definitions/Claim_Related" - }, - "type": "array" - }, - "prescription": { - "description": "Prescription to support the dispensing of pharmacy, device or vision products.", - "$ref": "#/definitions/Reference" - }, - "originalPrescription": { - "description": "Original prescription which has been superseded by this prescription to support the dispensing of pharmacy services, medications or products.", - "$ref": "#/definitions/Reference" - }, - "payee": { - "description": "The party to be reimbursed for cost of the products and services according to the terms of the policy.", - "$ref": "#/definitions/Claim_Payee" - }, - "referral": { - "description": "A reference to a referral resource.", - "$ref": "#/definitions/Reference" - }, - "facility": { - "description": "Facility where the services were provided.", - "$ref": "#/definitions/Reference" - }, - "careTeam": { - "description": "The members of the team who provided the products and services.", - "items": { - "$ref": "#/definitions/Claim_CareTeam" - }, - "type": "array" - }, - "supportingInfo": { - "description": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", - "items": { - "$ref": "#/definitions/Claim_SupportingInfo" - }, - "type": "array" - }, - "diagnosis": { - "description": "Information about diagnoses relevant to the claim items.", - "items": { - "$ref": "#/definitions/Claim_Diagnosis" - }, - "type": "array" - }, - "procedure": { - "description": "Procedures performed on the patient relevant to the billing items with the claim.", - "items": { - "$ref": "#/definitions/Claim_Procedure" - }, - "type": "array" - }, - "insurance": { - "description": "Financial instruments for reimbursement for the health care products and services specified on the claim.", - "items": { - "$ref": "#/definitions/Claim_Insurance" - }, - "type": "array" - }, - "accident": { - "description": "Details of an accident which resulted in injuries which required the products and services listed in the claim.", - "$ref": "#/definitions/Claim_Accident" - }, - "item": { - "description": "A claim line. Either a simple product or service or a \u0027group\u0027 of details which can each be a simple items or groups of sub-details.", - "items": { - "$ref": "#/definitions/Claim_Item" - }, - "type": "array" - }, - "total": { - "description": "The total value of the all the items in the claim.", - "$ref": "#/definitions/Money" - } - }, - "additionalProperties": false, - "required": [ - "insurance", - "provider", - "patient", - "type", - "priority", - "resourceType" - ] - }, - "Claim_Related": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "claim": { - "description": "Reference to a related claim.", - "$ref": "#/definitions/Reference" - }, - "relationship": { - "description": "A code to convey how the claims are related.", - "$ref": "#/definitions/CodeableConcept" - }, - "reference": { - "description": "An alternate organizational reference to the case or file to which this particular claim pertains.", - "$ref": "#/definitions/Identifier" - } - }, - "additionalProperties": false - }, - "Claim_Payee": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of Party to be reimbursed: subscriber, provider, other.", - "$ref": "#/definitions/CodeableConcept" - }, - "party": { - "description": "Reference to the individual or organization to whom any payment will be made.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "Claim_CareTeam": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify care team entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "provider": { - "description": "Member of the team who provided the product or service.", - "$ref": "#/definitions/Reference" - }, - "responsible": { - "description": "The party who is billing and/or responsible for the claimed products or services.", - "$ref": "#/definitions/boolean" - }, - "_responsible": { - "description": "Extensions for responsible", - "$ref": "#/definitions/Element" - }, - "role": { - "description": "The lead, assisting or supervising practitioner and their discipline if a multidisciplinary team.", - "$ref": "#/definitions/CodeableConcept" - }, - "qualification": { - "description": "The qualification of the practitioner which is applicable for this service.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "provider" - ] - }, - "Claim_SupportingInfo": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify supporting information entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "code": { - "description": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", - "$ref": "#/definitions/CodeableConcept" - }, - "timingDate": { - "description": "The date when or period to which this information refers.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_timingDate": { - "description": "Extensions for timingDate", - "$ref": "#/definitions/Element" - }, - "timingPeriod": { - "description": "The date when or period to which this information refers.", - "$ref": "#/definitions/Period" - }, - "valueBoolean": { - "description": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueQuantity": { - "description": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", - "$ref": "#/definitions/Quantity" - }, - "valueAttachment": { - "description": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", - "$ref": "#/definitions/Attachment" - }, - "valueReference": { - "description": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", - "$ref": "#/definitions/Reference" - }, - "reason": { - "description": "Provides the reason in the situation where a reason code is required in addition to the content.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "category" - ] - }, - "Claim_Diagnosis": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify diagnosis entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "diagnosisCodeableConcept": { - "description": "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", - "$ref": "#/definitions/CodeableConcept" - }, - "diagnosisReference": { - "description": "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", - "$ref": "#/definitions/Reference" - }, - "type": { - "description": "When the condition was observed or the relative ranking.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "onAdmission": { - "description": "Indication of whether the diagnosis was present on admission to a facility.", - "$ref": "#/definitions/CodeableConcept" - }, - "packageCode": { - "description": "A package billing code or bundle code used to group products and services to a particular health condition (such as heart attack) which is based on a predetermined grouping code system.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "Claim_Procedure": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify procedure entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "When the condition was observed or the relative ranking.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "date": { - "description": "Date and optionally time the procedure was performed.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "procedureCodeableConcept": { - "description": "The code or reference to a Procedure resource which identifies the clinical intervention performed.", - "$ref": "#/definitions/CodeableConcept" - }, - "procedureReference": { - "description": "The code or reference to a Procedure resource which identifies the clinical intervention performed.", - "$ref": "#/definitions/Reference" - }, - "udi": { - "description": "Unique Device Identifiers associated with this line item.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Claim_Insurance": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify insurance entries and provide a sequence of coverages to convey coordination of benefit order.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "focal": { - "description": "A flag to indicate that this Coverage is to be used for adjudication of this claim when set to true.", - "$ref": "#/definitions/boolean" - }, - "_focal": { - "description": "Extensions for focal", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "The business identifier to be used when the claim is sent for adjudication against this insurance policy.", - "$ref": "#/definitions/Identifier" - }, - "coverage": { - "description": "Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient\u0027s actual coverage within the insurer\u0027s information system.", - "$ref": "#/definitions/Reference" - }, - "businessArrangement": { - "description": "A business agreement number established between the provider and the insurer for special business processing purposes.", - "$ref": "#/definitions/string" - }, - "_businessArrangement": { - "description": "Extensions for businessArrangement", - "$ref": "#/definitions/Element" - }, - "preAuthRef": { - "description": "Reference numbers previously provided by the insurer to the provider to be quoted on subsequent claims containing services or products related to the prior authorization.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_preAuthRef": { - "description": "Extensions for preAuthRef", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "claimResponse": { - "description": "The result of the adjudication of the line items for the Coverage specified in this insurance.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "coverage" - ] - }, - "Claim_Accident": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "date": { - "description": "Date of an accident event related to the products and services contained in the claim.", - "$ref": "#/definitions/date" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type or context of the accident event for the purposes of selection of potential insurance coverages and determination of coordination between insurers.", - "$ref": "#/definitions/CodeableConcept" - }, - "locationAddress": { - "description": "The physical location of the accident event.", - "$ref": "#/definitions/Address" - }, - "locationReference": { - "description": "The physical location of the accident event.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "Claim_Item": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify item entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "careTeamSequence": { - "description": "CareTeam members related to this service or product.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_careTeamSequence": { - "description": "Extensions for careTeamSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "diagnosisSequence": { - "description": "Diagnosis applicable for this service or product.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_diagnosisSequence": { - "description": "Extensions for diagnosisSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "procedureSequence": { - "description": "Procedures applicable for this service or product.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_procedureSequence": { - "description": "Extensions for procedureSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "informationSequence": { - "description": "Exceptions, special conditions and supporting information applicable for this service or product.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_informationSequence": { - "description": "Extensions for informationSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "revenue": { - "description": "The type of revenue or cost center providing the product and/or service.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "Code to identify the general type of benefits under which products and services are provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "programCode": { - "description": "Identifies the program under which this may be recovered.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "servicedDate": { - "description": "The date or dates when the service or product was supplied, performed or completed.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_servicedDate": { - "description": "Extensions for servicedDate", - "$ref": "#/definitions/Element" - }, - "servicedPeriod": { - "description": "The date or dates when the service or product was supplied, performed or completed.", - "$ref": "#/definitions/Period" - }, - "locationCodeableConcept": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "locationAddress": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/Address" - }, - "locationReference": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/Reference" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "udi": { - "description": "Unique Device Identifiers associated with this line item.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "bodySite": { - "description": "Physical service site on the patient (limb, tooth, etc.).", - "$ref": "#/definitions/CodeableConcept" - }, - "subSite": { - "description": "A region or surface of the bodySite, e.g. limb region or tooth surface(s).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "encounter": { - "description": "The Encounters during which this Claim was created or to which the creation of this record is tightly associated.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "detail": { - "description": "A claim detail line. Either a simple (a product or service) or a \u0027group\u0027 of sub-details which are simple items.", - "items": { - "$ref": "#/definitions/Claim_Detail" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "productOrService" - ] - }, - "Claim_Detail": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify item entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "revenue": { - "description": "The type of revenue or cost center providing the product and/or service.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "Code to identify the general type of benefits under which products and services are provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "programCode": { - "description": "Identifies the program under which this may be recovered.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "udi": { - "description": "Unique Device Identifiers associated with this line item.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "subDetail": { - "description": "A claim detail line. Either a simple (a product or service) or a \u0027group\u0027 of sub-details which are simple items.", - "items": { - "$ref": "#/definitions/Claim_SubDetail" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "productOrService" - ] - }, - "Claim_SubDetail": { - "description": "A provider issued list of professional services and products which have been provided, or are to be provided, to a patient which is sent to an insurer for reimbursement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify item entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "revenue": { - "description": "The type of revenue or cost center providing the product and/or service.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "Code to identify the general type of benefits under which products and services are provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "programCode": { - "description": "Identifies the program under which this may be recovered.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "udi": { - "description": "Unique Device Identifiers associated with this line item.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "productOrService" - ] - }, - "ClaimResponse": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "resourceType": { - "description": "This is a ClaimResponse resource", - "const": "ClaimResponse" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this claim response.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of the resource instance.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.", - "$ref": "#/definitions/CodeableConcept" - }, - "subType": { - "description": "A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.", - "$ref": "#/definitions/CodeableConcept" - }, - "use": { - "description": "A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.", - "$ref": "#/definitions/code" - }, - "_use": { - "description": "Extensions for use", - "$ref": "#/definitions/Element" - }, - "patient": { - "description": "The party to whom the professional services and/or products have been supplied or are being considered and for whom actual for facast reimbursement is sought.", - "$ref": "#/definitions/Reference" - }, - "created": { - "description": "The date this resource was created.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "insurer": { - "description": "The party responsible for authorization, adjudication and reimbursement.", - "$ref": "#/definitions/Reference" - }, - "requestor": { - "description": "The provider which is responsible for the claim, predetermination or preauthorization.", - "$ref": "#/definitions/Reference" - }, - "request": { - "description": "Original request resource reference.", - "$ref": "#/definitions/Reference" - }, - "outcome": { - "description": "The outcome of the claim, predetermination, or preauthorization processing.", - "$ref": "#/definitions/code" - }, - "_outcome": { - "description": "Extensions for outcome", - "$ref": "#/definitions/Element" - }, - "disposition": { - "description": "A human readable description of the status of the adjudication.", - "$ref": "#/definitions/string" - }, - "_disposition": { - "description": "Extensions for disposition", - "$ref": "#/definitions/Element" - }, - "preAuthRef": { - "description": "Reference from the Insurer which is used in later communications which refers to this adjudication.", - "$ref": "#/definitions/string" - }, - "_preAuthRef": { - "description": "Extensions for preAuthRef", - "$ref": "#/definitions/Element" - }, - "preAuthPeriod": { - "description": "The time frame during which this authorization is effective.", - "$ref": "#/definitions/Period" - }, - "payeeType": { - "description": "Type of Party to be reimbursed: subscriber, provider, other.", - "$ref": "#/definitions/CodeableConcept" - }, - "item": { - "description": "A claim line. Either a simple (a product or service) or a \u0027group\u0027 of details which can also be a simple items or groups of sub-details.", - "items": { - "$ref": "#/definitions/ClaimResponse_Item" - }, - "type": "array" - }, - "addItem": { - "description": "The first-tier service adjudications for payor added product or service lines.", - "items": { - "$ref": "#/definitions/ClaimResponse_AddItem" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results which are presented at the header level rather than at the line-item or add-item levels.", - "items": { - "$ref": "#/definitions/ClaimResponse_Adjudication" - }, - "type": "array" - }, - "total": { - "description": "Categorized monetary totals for the adjudication.", - "items": { - "$ref": "#/definitions/ClaimResponse_Total" - }, - "type": "array" - }, - "payment": { - "description": "Payment details for the adjudication of the claim.", - "$ref": "#/definitions/ClaimResponse_Payment" - }, - "fundsReserve": { - "description": "A code, used only on a response to a preauthorization, to indicate whether the benefits payable have been reserved and for whom.", - "$ref": "#/definitions/CodeableConcept" - }, - "formCode": { - "description": "A code for the form to be used for printing the content.", - "$ref": "#/definitions/CodeableConcept" - }, - "form": { - "description": "The actual form, by reference or inclusion, for printing the content or an EOB.", - "$ref": "#/definitions/Attachment" - }, - "processNote": { - "description": "A note that describes or explains adjudication results in a human readable form.", - "items": { - "$ref": "#/definitions/ClaimResponse_ProcessNote" - }, - "type": "array" - }, - "communicationRequest": { - "description": "Request for additional supporting or authorizing information.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "insurance": { - "description": "Financial instruments for reimbursement for the health care products and services specified on the claim.", - "items": { - "$ref": "#/definitions/ClaimResponse_Insurance" - }, - "type": "array" - }, - "error": { - "description": "Errors encountered during the processing of the adjudication.", - "items": { - "$ref": "#/definitions/ClaimResponse_Error" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "patient", - "insurer", - "type", - "resourceType" - ] - }, - "ClaimResponse_Item": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "itemSequence": { - "description": "A number to uniquely reference the claim item entries.", - "$ref": "#/definitions/positiveInt" - }, - "_itemSequence": { - "description": "Extensions for itemSequence", - "$ref": "#/definitions/Element" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.", - "items": { - "$ref": "#/definitions/ClaimResponse_Adjudication" - }, - "type": "array" - }, - "detail": { - "description": "A claim detail. Either a simple (a product or service) or a \u0027group\u0027 of sub-details which are simple items.", - "items": { - "$ref": "#/definitions/ClaimResponse_Detail" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "adjudication" - ] - }, - "ClaimResponse_Adjudication": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "category": { - "description": "A code to indicate the information type of this adjudication record. Information types may include the value submitted, maximum values or percentages allowed or payable under the plan, amounts that: the patient is responsible for in aggregate or pertaining to this item; amounts paid by other coverages; and, the benefit payable for this item.", - "$ref": "#/definitions/CodeableConcept" - }, - "reason": { - "description": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", - "$ref": "#/definitions/CodeableConcept" - }, - "amount": { - "description": "Monetary amount associated with the category.", - "$ref": "#/definitions/Money" - }, - "value": { - "description": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", - "$ref": "#/definitions/decimal" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "category" - ] - }, - "ClaimResponse_Detail": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "detailSequence": { - "description": "A number to uniquely reference the claim detail entry.", - "$ref": "#/definitions/positiveInt" - }, - "_detailSequence": { - "description": "Extensions for detailSequence", - "$ref": "#/definitions/Element" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results.", - "items": { - "$ref": "#/definitions/ClaimResponse_Adjudication" - }, - "type": "array" - }, - "subDetail": { - "description": "A sub-detail adjudication of a simple product or service.", - "items": { - "$ref": "#/definitions/ClaimResponse_SubDetail" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "adjudication" - ] - }, - "ClaimResponse_SubDetail": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "subDetailSequence": { - "description": "A number to uniquely reference the claim sub-detail entry.", - "$ref": "#/definitions/positiveInt" - }, - "_subDetailSequence": { - "description": "Extensions for subDetailSequence", - "$ref": "#/definitions/Element" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results.", - "items": { - "$ref": "#/definitions/ClaimResponse_Adjudication" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ClaimResponse_AddItem": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "itemSequence": { - "description": "Claim items which this service line is intended to replace.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_itemSequence": { - "description": "Extensions for itemSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "detailSequence": { - "description": "The sequence number of the details within the claim item which this line is intended to replace.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_detailSequence": { - "description": "Extensions for detailSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "subdetailSequence": { - "description": "The sequence number of the sub-details within the details within the claim item which this line is intended to replace.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_subdetailSequence": { - "description": "Extensions for subdetailSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "provider": { - "description": "The providers who are authorized for the services rendered to the patient.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "programCode": { - "description": "Identifies the program under which this may be recovered.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "servicedDate": { - "description": "The date or dates when the service or product was supplied, performed or completed.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_servicedDate": { - "description": "Extensions for servicedDate", - "$ref": "#/definitions/Element" - }, - "servicedPeriod": { - "description": "The date or dates when the service or product was supplied, performed or completed.", - "$ref": "#/definitions/Period" - }, - "locationCodeableConcept": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "locationAddress": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/Address" - }, - "locationReference": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/Reference" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "bodySite": { - "description": "Physical service site on the patient (limb, tooth, etc.).", - "$ref": "#/definitions/CodeableConcept" - }, - "subSite": { - "description": "A region or surface of the bodySite, e.g. limb region or tooth surface(s).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results.", - "items": { - "$ref": "#/definitions/ClaimResponse_Adjudication" - }, - "type": "array" - }, - "detail": { - "description": "The second-tier service adjudications for payor added services.", - "items": { - "$ref": "#/definitions/ClaimResponse_Detail1" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "adjudication", - "productOrService" - ] - }, - "ClaimResponse_Detail1": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results.", - "items": { - "$ref": "#/definitions/ClaimResponse_Adjudication" - }, - "type": "array" - }, - "subDetail": { - "description": "The third-tier service adjudications for payor added services.", - "items": { - "$ref": "#/definitions/ClaimResponse_SubDetail1" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "adjudication", - "productOrService" - ] - }, - "ClaimResponse_SubDetail1": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results.", - "items": { - "$ref": "#/definitions/ClaimResponse_Adjudication" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "adjudication", - "productOrService" - ] - }, - "ClaimResponse_Total": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "category": { - "description": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", - "$ref": "#/definitions/CodeableConcept" - }, - "amount": { - "description": "Monetary total amount associated with the category.", - "$ref": "#/definitions/Money" - } - }, - "additionalProperties": false, - "required": [ - "amount", - "category" - ] - }, - "ClaimResponse_Payment": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Whether this represents partial or complete payment of the benefits payable.", - "$ref": "#/definitions/CodeableConcept" - }, - "adjustment": { - "description": "Total amount of all adjustments to this payment included in this transaction which are not related to this claim\u0027s adjudication.", - "$ref": "#/definitions/Money" - }, - "adjustmentReason": { - "description": "Reason for the payment adjustment.", - "$ref": "#/definitions/CodeableConcept" - }, - "date": { - "description": "Estimated date the payment will be issued or the actual issue date of payment.", - "$ref": "#/definitions/date" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "amount": { - "description": "Benefits payable less any payment adjustment.", - "$ref": "#/definitions/Money" - }, - "identifier": { - "description": "Issuer\u0027s unique identifier for the payment instrument.", - "$ref": "#/definitions/Identifier" - } - }, - "additionalProperties": false, - "required": [ - "amount", - "type" - ] - }, - "ClaimResponse_ProcessNote": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "number": { - "description": "A number to uniquely identify a note entry.", - "$ref": "#/definitions/positiveInt" - }, - "_number": { - "description": "Extensions for number", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The business purpose of the note text.", - "enum": [ - "display", - "print", - "printoper" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "The explanation or description associated with the processing.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "A code to define the language used in the text of the note.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "ClaimResponse_Insurance": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify insurance entries and provide a sequence of coverages to convey coordination of benefit order.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "focal": { - "description": "A flag to indicate that this Coverage is to be used for adjudication of this claim when set to true.", - "$ref": "#/definitions/boolean" - }, - "_focal": { - "description": "Extensions for focal", - "$ref": "#/definitions/Element" - }, - "coverage": { - "description": "Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient\u0027s actual coverage within the insurer\u0027s information system.", - "$ref": "#/definitions/Reference" - }, - "businessArrangement": { - "description": "A business agreement number established between the provider and the insurer for special business processing purposes.", - "$ref": "#/definitions/string" - }, - "_businessArrangement": { - "description": "Extensions for businessArrangement", - "$ref": "#/definitions/Element" - }, - "claimResponse": { - "description": "The result of the adjudication of the line items for the Coverage specified in this insurance.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "coverage" - ] - }, - "ClaimResponse_Error": { - "description": "This resource provides the adjudication details from the processing of a Claim resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "itemSequence": { - "description": "The sequence number of the line item submitted which contains the error. This value is omitted when the error occurs outside of the item structure.", - "$ref": "#/definitions/positiveInt" - }, - "_itemSequence": { - "description": "Extensions for itemSequence", - "$ref": "#/definitions/Element" - }, - "detailSequence": { - "description": "The sequence number of the detail within the line item submitted which contains the error. This value is omitted when the error occurs outside of the item structure.", - "$ref": "#/definitions/positiveInt" - }, - "_detailSequence": { - "description": "Extensions for detailSequence", - "$ref": "#/definitions/Element" - }, - "subDetailSequence": { - "description": "The sequence number of the sub-detail within the detail within the line item submitted which contains the error. This value is omitted when the error occurs outside of the item structure.", - "$ref": "#/definitions/positiveInt" - }, - "_subDetailSequence": { - "description": "Extensions for subDetailSequence", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "An error code, from a specified code system, which details why the claim could not be adjudicated.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "ClinicalImpression": { - "description": "A record of a clinical assessment performed to determine what problem(s) may affect the patient and before planning the treatments or management strategies that are best to manage a patient\u0027s condition. Assessments are often 1:1 with a clinical consultation / encounter, but this varies greatly depending on the clinical workflow. This resource is called \"ClinicalImpression\" rather than \"ClinicalAssessment\" to avoid confusion with the recording of assessment tools such as Apgar score.", - "properties": { - "resourceType": { - "description": "This is a ClinicalImpression resource", - "const": "ClinicalImpression" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this clinical impression by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "Identifies the workflow status of the assessment.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "Captures the reason for the current state of the ClinicalImpression.", - "$ref": "#/definitions/CodeableConcept" - }, - "code": { - "description": "Categorizes the type of clinical assessment performed.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "A summary of the context and/or cause of the assessment - why / where it was performed, and what patient events/status prompted it.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "subject": { - "description": "The patient or group of individuals assessed as part of this record.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The Encounter during which this ClinicalImpression was created or to which the creation of this record is tightly associated.", - "$ref": "#/definitions/Reference" - }, - "effectiveDateTime": { - "description": "The point in time or period over which the subject was assessed.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_effectiveDateTime": { - "description": "Extensions for effectiveDateTime", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The point in time or period over which the subject was assessed.", - "$ref": "#/definitions/Period" - }, - "date": { - "description": "Indicates when the documentation of the assessment was complete.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "assessor": { - "description": "The clinician performing the assessment.", - "$ref": "#/definitions/Reference" - }, - "previous": { - "description": "A reference to the last assessment that was conducted on this patient. Assessments are often/usually ongoing in nature; a care provider (practitioner or team) will make new assessments on an ongoing basis as new data arises or the patient\u0027s conditions changes.", - "$ref": "#/definitions/Reference" - }, - "problem": { - "description": "A list of the relevant problems/conditions for a patient.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "investigation": { - "description": "One or more sets of investigations (signs, symptoms, etc.). The actual grouping of investigations varies greatly depending on the type and context of the assessment. These investigations may include data generated during the assessment process, or data previously generated and recorded that is pertinent to the outcomes.", - "items": { - "$ref": "#/definitions/ClinicalImpression_Investigation" - }, - "type": "array" - }, - "protocol": { - "description": "Reference to a specific published clinical protocol that was followed during this assessment, and/or that provides evidence in support of the diagnosis.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_protocol": { - "description": "Extensions for protocol", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "summary": { - "description": "A text summary of the investigations and the diagnosis.", - "$ref": "#/definitions/string" - }, - "_summary": { - "description": "Extensions for summary", - "$ref": "#/definitions/Element" - }, - "finding": { - "description": "Specific findings or diagnoses that were considered likely or relevant to ongoing treatment.", - "items": { - "$ref": "#/definitions/ClinicalImpression_Finding" - }, - "type": "array" - }, - "prognosisCodeableConcept": { - "description": "Estimate of likely outcome.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "prognosisReference": { - "description": "RiskAssessment expressing likely outcome.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "supportingInfo": { - "description": "Information supporting the clinical impression.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Commentary about the impression, typically recorded after the impression itself was made, though supplemental notes by the original author could also appear.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "ClinicalImpression_Investigation": { - "description": "A record of a clinical assessment performed to determine what problem(s) may affect the patient and before planning the treatments or management strategies that are best to manage a patient\u0027s condition. Assessments are often 1:1 with a clinical consultation / encounter, but this varies greatly depending on the clinical workflow. This resource is called \"ClinicalImpression\" rather than \"ClinicalAssessment\" to avoid confusion with the recording of assessment tools such as Apgar score.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A name/code for the group (\"set\") of investigations. Typically, this will be something like \"signs\", \"symptoms\", \"clinical\", \"diagnostic\", but the list is not constrained, and others such groups such as (exposure|family|travel|nutritional) history may be used.", - "$ref": "#/definitions/CodeableConcept" - }, - "item": { - "description": "A record of a specific investigation that was undertaken.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "ClinicalImpression_Finding": { - "description": "A record of a clinical assessment performed to determine what problem(s) may affect the patient and before planning the treatments or management strategies that are best to manage a patient\u0027s condition. Assessments are often 1:1 with a clinical consultation / encounter, but this varies greatly depending on the clinical workflow. This resource is called \"ClinicalImpression\" rather than \"ClinicalAssessment\" to avoid confusion with the recording of assessment tools such as Apgar score.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "itemCodeableConcept": { - "description": "Specific text or code for finding or diagnosis, which may include ruled-out or resolved conditions.", - "$ref": "#/definitions/CodeableConcept" - }, - "itemReference": { - "description": "Specific reference for finding or diagnosis, which may include ruled-out or resolved conditions.", - "$ref": "#/definitions/Reference" - }, - "basis": { - "description": "Which investigations support finding or diagnosis.", - "$ref": "#/definitions/string" - }, - "_basis": { - "description": "Extensions for basis", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "CodeSystem": { - "description": "The CodeSystem resource is used to declare the existence of and describe a code system or code system supplement and its key properties, and optionally define a part or all of its content.", - "properties": { - "resourceType": { - "description": "This is a CodeSystem resource", - "const": "CodeSystem" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this code system when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this code system is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the code system is stored on different servers. This is used in [Coding](datatypes.html#Coding).system.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this code system when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the code system when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the code system author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. This is used in [Coding](datatypes.html#Coding).version.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the code system. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the code system.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The date (and optionally time) when the code system resource was created or revised.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this code system is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the code system was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the code system changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the code system.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the code system from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate code system instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the code system is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this code system is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the code system and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the code system.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "caseSensitive": { - "description": "If code comparison is case sensitive when codes within this system are compared to each other.", - "$ref": "#/definitions/boolean" - }, - "_caseSensitive": { - "description": "Extensions for caseSensitive", - "$ref": "#/definitions/Element" - }, - "valueSet": { - "description": "Canonical reference to the value set that contains the entire code system.", - "$ref": "#/definitions/canonical" - }, - "hierarchyMeaning": { - "description": "The meaning of the hierarchy of concepts as represented in this resource.", - "enum": [ - "grouped-by", - "is-a", - "part-of", - "classified-with" - ] - }, - "_hierarchyMeaning": { - "description": "Extensions for hierarchyMeaning", - "$ref": "#/definitions/Element" - }, - "compositional": { - "description": "The code system defines a compositional (post-coordination) grammar.", - "$ref": "#/definitions/boolean" - }, - "_compositional": { - "description": "Extensions for compositional", - "$ref": "#/definitions/Element" - }, - "versionNeeded": { - "description": "This flag is used to signify that the code system does not commit to concept permanence across versions. If true, a version must be specified when referencing this code system.", - "$ref": "#/definitions/boolean" - }, - "_versionNeeded": { - "description": "Extensions for versionNeeded", - "$ref": "#/definitions/Element" - }, - "content": { - "description": "The extent of the content of the code system (the concepts and codes it defines) are represented in this resource instance.", - "enum": [ - "not-present", - "example", - "fragment", - "complete", - "supplement" - ] - }, - "_content": { - "description": "Extensions for content", - "$ref": "#/definitions/Element" - }, - "supplements": { - "description": "The canonical URL of the code system that this code system supplement is adding designations and properties to.", - "$ref": "#/definitions/canonical" - }, - "count": { - "description": "The total number of concepts defined by the code system. Where the code system has a compositional grammar, the basis of this count is defined by the system steward.", - "$ref": "#/definitions/unsignedInt" - }, - "_count": { - "description": "Extensions for count", - "$ref": "#/definitions/Element" - }, - "filter": { - "description": "A filter that can be used in a value set compose statement when selecting concepts using a filter.", - "items": { - "$ref": "#/definitions/CodeSystem_Filter" - }, - "type": "array" - }, - "property": { - "description": "A property defines an additional slot through which additional information can be provided about a concept.", - "items": { - "$ref": "#/definitions/CodeSystem_Property" - }, - "type": "array" - }, - "concept": { - "description": "Concepts that are in the code system. The concept definitions are inherently hierarchical, but the definitions must be consulted to determine what the meanings of the hierarchical relationships are.", - "items": { - "$ref": "#/definitions/CodeSystem_Concept" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "CodeSystem_Filter": { - "description": "The CodeSystem resource is used to declare the existence of and describe a code system or code system supplement and its key properties, and optionally define a part or all of its content.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The code that identifies this filter when it is used as a filter in [[[ValueSet]]].compose.include.filter.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A description of how or why the filter is used.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "operator": { - "description": "A list of operators that can be used with the filter.", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_operator": { - "description": "Extensions for operator", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "value": { - "description": "A description of what the value for the filter should be.", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "CodeSystem_Property": { - "description": "The CodeSystem resource is used to declare the existence of and describe a code system or code system supplement and its key properties, and optionally define a part or all of its content.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A code that is used to identify the property. The code is used internally (in CodeSystem.concept.property.code) and also externally, such as in property filters.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "uri": { - "description": "Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code system.", - "$ref": "#/definitions/uri" - }, - "_uri": { - "description": "Extensions for uri", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A description of the property- why it is defined, and how its value might be used.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type of the property value. Properties of type \"code\" contain a code defined by the code system (e.g. a reference to another defined concept).", - "enum": [ - "code", - "Coding", - "string", - "integer", - "boolean", - "dateTime", - "decimal" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "CodeSystem_Concept": { - "description": "The CodeSystem resource is used to declare the existence of and describe a code system or code system supplement and its key properties, and optionally define a part or all of its content.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A code - a text symbol - that uniquely identifies the concept within the code system.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "display": { - "description": "A human readable string that is the recommended default way to present this concept to a user.", - "$ref": "#/definitions/string" - }, - "_display": { - "description": "Extensions for display", - "$ref": "#/definitions/Element" - }, - "definition": { - "description": "The formal definition of the concept. The code system resource does not make formal definitions required, because of the prevalence of legacy systems. However, they are highly recommended, as without them there is no formal meaning associated with the concept.", - "$ref": "#/definitions/string" - }, - "_definition": { - "description": "Extensions for definition", - "$ref": "#/definitions/Element" - }, - "designation": { - "description": "Additional representations for the concept - other languages, aliases, specialized purposes, used for particular purposes, etc.", - "items": { - "$ref": "#/definitions/CodeSystem_Designation" - }, - "type": "array" - }, - "property": { - "description": "A property value for this concept.", - "items": { - "$ref": "#/definitions/CodeSystem_Property1" - }, - "type": "array" - }, - "concept": { - "description": "Defines children of a concept to produce a hierarchy of concepts. The nature of the relationships is variable (is-a/contains/categorizes) - see hierarchyMeaning.", - "items": { - "$ref": "#/definitions/CodeSystem_Concept" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "CodeSystem_Designation": { - "description": "The CodeSystem resource is used to declare the existence of and describe a code system or code system supplement and its key properties, and optionally define a part or all of its content.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "language": { - "description": "The language this designation is defined for.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "use": { - "description": "A code that details how this designation would be used.", - "$ref": "#/definitions/Coding" - }, - "value": { - "description": "The text value for this designation.", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "CodeSystem_Property1": { - "description": "The CodeSystem resource is used to declare the existence of and describe a code system or code system supplement and its key properties, and optionally define a part or all of its content.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A code that is a reference to CodeSystem.property.code.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "valueCode": { - "description": "The value of this property.", - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string" - }, - "_valueCode": { - "description": "Extensions for valueCode", - "$ref": "#/definitions/Element" - }, - "valueCoding": { - "description": "The value of this property.", - "$ref": "#/definitions/Coding" - }, - "valueString": { - "description": "The value of this property.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "The value of this property.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueBoolean": { - "description": "The value of this property.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "The value of this property.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valueDecimal": { - "description": "The value of this property.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_valueDecimal": { - "description": "Extensions for valueDecimal", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Communication": { - "description": "An occurrence of information being transmitted; e.g. an alert that was sent to a responsible provider, a public health agency that was notified about a reportable condition.", - "properties": { - "resourceType": { - "description": "This is a Communication resource", - "const": "Communication" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this communication by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "instantiatesCanonical": { - "description": "The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Communication.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "instantiatesUri": { - "description": "The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Communication.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "basedOn": { - "description": "An order, proposal or plan fulfilled in whole or in part by this Communication.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "partOf": { - "description": "Part of this action.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "inResponseTo": { - "description": "Prior communication that this communication is in response to.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "The status of the transmission.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "Captures the reason for the current state of the Communication.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "The type of message conveyed such as alert, notification, reminder, instruction, etc.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "priority": { - "description": "Characterizes how quickly the planned or in progress communication must be addressed. Includes concepts such as stat, urgent, routine.", - "$ref": "#/definitions/code" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "medium": { - "description": "A channel that was used for this communication (e.g. email, fax).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "subject": { - "description": "The patient or group that was the focus of this communication.", - "$ref": "#/definitions/Reference" - }, - "topic": { - "description": "Description of the purpose/content, similar to a subject line in an email.", - "$ref": "#/definitions/CodeableConcept" - }, - "about": { - "description": "Other resources that pertain to this communication and to which this communication should be associated.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "encounter": { - "description": "The Encounter during which this Communication was created or to which the creation of this record is tightly associated.", - "$ref": "#/definitions/Reference" - }, - "sent": { - "description": "The time when this communication was sent.", - "$ref": "#/definitions/dateTime" - }, - "_sent": { - "description": "Extensions for sent", - "$ref": "#/definitions/Element" - }, - "received": { - "description": "The time when this communication arrived at the destination.", - "$ref": "#/definitions/dateTime" - }, - "_received": { - "description": "Extensions for received", - "$ref": "#/definitions/Element" - }, - "recipient": { - "description": "The entity (e.g. person, organization, clinical information system, care team or device) which was the target of the communication. If receipts need to be tracked by an individual, a separate resource instance will need to be created for each recipient. Multiple recipient communications are intended where either receipts are not tracked (e.g. a mass mail-out) or a receipt is captured in aggregate (all emails confirmed received by a particular time).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "sender": { - "description": "The entity (e.g. person, organization, clinical information system, or device) which was the source of the communication.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "The reason or justification for the communication.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Indicates another resource whose existence justifies this communication.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "payload": { - "description": "Text, attachment(s), or resource(s) that was communicated to the recipient.", - "items": { - "$ref": "#/definitions/Communication_Payload" - }, - "type": "array" - }, - "note": { - "description": "Additional notes or commentary about the communication by the sender, receiver or other interested parties.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Communication_Payload": { - "description": "An occurrence of information being transmitted; e.g. an alert that was sent to a responsible provider, a public health agency that was notified about a reportable condition.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "contentString": { - "description": "A communicated content (or for multi-part communications, one portion of the communication).", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_contentString": { - "description": "Extensions for contentString", - "$ref": "#/definitions/Element" - }, - "contentAttachment": { - "description": "A communicated content (or for multi-part communications, one portion of the communication).", - "$ref": "#/definitions/Attachment" - }, - "contentReference": { - "description": "A communicated content (or for multi-part communications, one portion of the communication).", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "CommunicationRequest": { - "description": "A request to convey information; e.g. the CDS system proposes that an alert be sent to a responsible provider, the CDS system proposes that the public health agency be notified about a reportable condition.", - "properties": { - "resourceType": { - "description": "This is a CommunicationRequest resource", - "const": "CommunicationRequest" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this communication request by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "basedOn": { - "description": "A plan or proposal that is fulfilled in whole or in part by this request.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "replaces": { - "description": "Completed or terminated request(s) whose function is taken by this new request.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "groupIdentifier": { - "description": "A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.", - "$ref": "#/definitions/Identifier" - }, - "status": { - "description": "The status of the proposal or order.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "Captures the reason for the current state of the CommunicationRequest.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "The type of message to be sent such as alert, notification, reminder, instruction, etc.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "priority": { - "description": "Characterizes how quickly the proposed act must be initiated. Includes concepts such as stat, urgent, routine.", - "$ref": "#/definitions/code" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "doNotPerform": { - "description": "If true indicates that the CommunicationRequest is asking for the specified action to *not* occur.", - "$ref": "#/definitions/boolean" - }, - "_doNotPerform": { - "description": "Extensions for doNotPerform", - "$ref": "#/definitions/Element" - }, - "medium": { - "description": "A channel that was used for this communication (e.g. email, fax).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "subject": { - "description": "The patient or group that is the focus of this communication request.", - "$ref": "#/definitions/Reference" - }, - "about": { - "description": "Other resources that pertain to this communication request and to which this communication request should be associated.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "encounter": { - "description": "The Encounter during which this CommunicationRequest was created or to which the creation of this record is tightly associated.", - "$ref": "#/definitions/Reference" - }, - "payload": { - "description": "Text, attachment(s), or resource(s) to be communicated to the recipient.", - "items": { - "$ref": "#/definitions/CommunicationRequest_Payload" - }, - "type": "array" - }, - "occurrenceDateTime": { - "description": "The time when this communication is to occur.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_occurrenceDateTime": { - "description": "Extensions for occurrenceDateTime", - "$ref": "#/definitions/Element" - }, - "occurrencePeriod": { - "description": "The time when this communication is to occur.", - "$ref": "#/definitions/Period" - }, - "authoredOn": { - "description": "For draft requests, indicates the date of initial creation. For requests with other statuses, indicates the date of activation.", - "$ref": "#/definitions/dateTime" - }, - "_authoredOn": { - "description": "Extensions for authoredOn", - "$ref": "#/definitions/Element" - }, - "requester": { - "description": "The device, individual, or organization who initiated the request and has responsibility for its activation.", - "$ref": "#/definitions/Reference" - }, - "recipient": { - "description": "The entity (e.g. person, organization, clinical information system, device, group, or care team) which is the intended target of the communication.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "sender": { - "description": "The entity (e.g. person, organization, clinical information system, or device) which is to be the source of the communication.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "Describes why the request is being made in coded or textual form.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Indicates another resource whose existence justifies this request.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Comments made about the request by the requester, sender, recipient, subject or other participants.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "CommunicationRequest_Payload": { - "description": "A request to convey information; e.g. the CDS system proposes that an alert be sent to a responsible provider, the CDS system proposes that the public health agency be notified about a reportable condition.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "contentString": { - "description": "The communicated content (or for multi-part communications, one portion of the communication).", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_contentString": { - "description": "Extensions for contentString", - "$ref": "#/definitions/Element" - }, - "contentAttachment": { - "description": "The communicated content (or for multi-part communications, one portion of the communication).", - "$ref": "#/definitions/Attachment" - }, - "contentReference": { - "description": "The communicated content (or for multi-part communications, one portion of the communication).", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "CompartmentDefinition": { - "description": "A compartment definition that defines how resources are accessed on a server.", - "properties": { - "resourceType": { - "description": "This is a CompartmentDefinition resource", - "const": "CompartmentDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this compartment definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this compartment definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the compartment definition is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The identifier that is used to identify this version of the compartment definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the compartment definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the compartment definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this compartment definition. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this compartment definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the compartment definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the compartment definition changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the compartment definition.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the compartment definition from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate compartment definition instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this compartment definition is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "Which compartment this definition describes.", - "enum": [ - "Patient", - "Encounter", - "RelatedPerson", - "Practitioner", - "Device" - ] - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "search": { - "description": "Whether the search syntax is supported,.", - "$ref": "#/definitions/boolean" - }, - "_search": { - "description": "Extensions for search", - "$ref": "#/definitions/Element" - }, - "resource": { - "description": "Information about how a resource is related to the compartment.", - "items": { - "$ref": "#/definitions/CompartmentDefinition_Resource" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "CompartmentDefinition_Resource": { - "description": "A compartment definition that defines how resources are accessed on a server.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The name of a resource supported by the server.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "param": { - "description": "The name of a search parameter that represents the link to the compartment. More than one may be listed because a resource may be linked to a compartment in more than one way,.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_param": { - "description": "Extensions for param", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "documentation": { - "description": "Additional documentation about the resource and compartment.", - "$ref": "#/definitions/string" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Composition": { - "description": "A set of healthcare-related information that is assembled together into a single logical package that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. A Composition defines the structure and narrative content necessary for a document. However, a Composition alone does not constitute a document. Rather, the Composition must be the first entry in a Bundle where Bundle.type\u003ddocument, and any other resources referenced from Composition must be included as subsequent entries in the Bundle (for example Patient, Practitioner, Encounter, etc.).", - "properties": { - "resourceType": { - "description": "This is a Composition resource", - "const": "Composition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A version-independent identifier for the Composition. This identifier stays constant as the composition is changed over time.", - "$ref": "#/definitions/Identifier" - }, - "status": { - "description": "The workflow/clinical status of this composition. The status is a marker for the clinical standing of the document.", - "enum": [ - "preliminary", - "final", - "amended", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Specifies the particular kind of composition (e.g. History and Physical, Discharge Summary, Progress Note). This usually equates to the purpose of making the composition.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "A categorization for the type of the composition - helps for indexing and searching. This may be implied by or derived from the code specified in the Composition Type.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "subject": { - "description": "Who or what the composition is about. The composition can be about a person, (patient or healthcare practitioner), a device (e.g. a machine) or even a group of subjects (such as a document about a herd of livestock, or a set of patients that share a common exposure).", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "Describes the clinical encounter or type of care this documentation is associated with.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The composition editing time, when the composition was last logically changed by the author.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "author": { - "description": "Identifies who is responsible for the information in the composition, not necessarily who typed it in.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "title": { - "description": "Official human-readable label for the composition.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "confidentiality": { - "description": "The code specifying the level of confidentiality of the Composition.", - "$ref": "#/definitions/code" - }, - "_confidentiality": { - "description": "Extensions for confidentiality", - "$ref": "#/definitions/Element" - }, - "attester": { - "description": "A participant who has attested to the accuracy of the composition/document.", - "items": { - "$ref": "#/definitions/Composition_Attester" - }, - "type": "array" - }, - "custodian": { - "description": "Identifies the organization or group who is responsible for ongoing maintenance of and access to the composition/document information.", - "$ref": "#/definitions/Reference" - }, - "relatesTo": { - "description": "Relationships that this composition has with other compositions or documents that already exist.", - "items": { - "$ref": "#/definitions/Composition_RelatesTo" - }, - "type": "array" - }, - "event": { - "description": "The clinical service, such as a colonoscopy or an appendectomy, being documented.", - "items": { - "$ref": "#/definitions/Composition_Event" - }, - "type": "array" - }, - "section": { - "description": "The root of the sections that make up the composition.", - "items": { - "$ref": "#/definitions/Composition_Section" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "author", - "type", - "resourceType" - ] - }, - "Composition_Attester": { - "description": "A set of healthcare-related information that is assembled together into a single logical package that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. A Composition defines the structure and narrative content necessary for a document. However, a Composition alone does not constitute a document. Rather, the Composition must be the first entry in a Bundle where Bundle.type\u003ddocument, and any other resources referenced from Composition must be included as subsequent entries in the Bundle (for example Patient, Practitioner, Encounter, etc.).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "mode": { - "description": "The type of attestation the authenticator offers.", - "enum": [ - "personal", - "professional", - "legal", - "official" - ] - }, - "_mode": { - "description": "Extensions for mode", - "$ref": "#/definitions/Element" - }, - "time": { - "description": "When the composition was attested by the party.", - "$ref": "#/definitions/dateTime" - }, - "_time": { - "description": "Extensions for time", - "$ref": "#/definitions/Element" - }, - "party": { - "description": "Who attested the composition in the specified way.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "Composition_RelatesTo": { - "description": "A set of healthcare-related information that is assembled together into a single logical package that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. A Composition defines the structure and narrative content necessary for a document. However, a Composition alone does not constitute a document. Rather, the Composition must be the first entry in a Bundle where Bundle.type\u003ddocument, and any other resources referenced from Composition must be included as subsequent entries in the Bundle (for example Patient, Practitioner, Encounter, etc.).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The type of relationship that this composition has with anther composition or document.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "targetIdentifier": { - "description": "The target composition/document of this relationship.", - "$ref": "#/definitions/Identifier" - }, - "targetReference": { - "description": "The target composition/document of this relationship.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "Composition_Event": { - "description": "A set of healthcare-related information that is assembled together into a single logical package that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. A Composition defines the structure and narrative content necessary for a document. However, a Composition alone does not constitute a document. Rather, the Composition must be the first entry in a Bundle where Bundle.type\u003ddocument, and any other resources referenced from Composition must be included as subsequent entries in the Bundle (for example Patient, Practitioner, Encounter, etc.).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "This list of codes represents the main clinical acts, such as a colonoscopy or an appendectomy, being documented. In some cases, the event is inherent in the typeCode, such as a \"History and Physical Report\" in which the procedure being documented is necessarily a \"History and Physical\" act.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "period": { - "description": "The period of time covered by the documentation. There is no assertion that the documentation is a complete representation for this period, only that it documents events during this time.", - "$ref": "#/definitions/Period" - }, - "detail": { - "description": "The description and/or reference of the event(s) being documented. For example, this could be used to document such a colonoscopy or an appendectomy.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Composition_Section": { - "description": "A set of healthcare-related information that is assembled together into a single logical package that provides a single coherent statement of meaning, establishes its own context and that has clinical attestation with regard to who is making the statement. A Composition defines the structure and narrative content necessary for a document. However, a Composition alone does not constitute a document. Rather, the Composition must be the first entry in a Bundle where Bundle.type\u003ddocument, and any other resources referenced from Composition must be included as subsequent entries in the Bundle (for example Patient, Practitioner, Encounter, etc.).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "title": { - "description": "The label for this particular section. This will be part of the rendered content for the document, and is often used to build a table of contents.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A code identifying the kind of content contained within the section. This must be consistent with the section title.", - "$ref": "#/definitions/CodeableConcept" - }, - "author": { - "description": "Identifies who is responsible for the information in this section, not necessarily who typed it in.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "focus": { - "description": "The actual focus of the section when it is not the subject of the composition, but instead represents something or someone associated with the subject such as (for a patient subject) a spouse, parent, fetus, or donor. If not focus is specified, the focus is assumed to be focus of the parent section, or, for a section in the Composition itself, the subject of the composition. Sections with a focus SHALL only include resources where the logical subject (patient, subject, focus, etc.) matches the section focus, or the resources have no logical subject (few resources).", - "$ref": "#/definitions/Reference" - }, - "text": { - "description": "A human-readable narrative that contains the attested content of the section, used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative.", - "$ref": "#/definitions/Narrative" - }, - "mode": { - "description": "How the entry list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.", - "$ref": "#/definitions/code" - }, - "_mode": { - "description": "Extensions for mode", - "$ref": "#/definitions/Element" - }, - "orderedBy": { - "description": "Specifies the order applied to the items in the section entries.", - "$ref": "#/definitions/CodeableConcept" - }, - "entry": { - "description": "A reference to the actual resource from which the narrative in the section is derived.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "emptyReason": { - "description": "If the section is empty, why the list is empty. An empty section typically has some text explaining the empty reason.", - "$ref": "#/definitions/CodeableConcept" - }, - "section": { - "description": "A nested sub-section within this section.", - "items": { - "$ref": "#/definitions/Composition_Section" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ConceptMap": { - "description": "A statement of relationships from one set of concepts to one or more other concepts - either concepts in code systems, or data element/data element concepts, or classes in class models.", - "properties": { - "resourceType": { - "description": "This is a ConceptMap resource", - "const": "ConceptMap" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this concept map when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this concept map is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the concept map is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this concept map when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "$ref": "#/definitions/Identifier" - }, - "version": { - "description": "The identifier that is used to identify this version of the concept map when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the concept map author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the concept map. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the concept map.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this concept map. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this concept map is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the concept map was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the concept map changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the concept map.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the concept map from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate concept map instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the concept map is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this concept map is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the concept map and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the concept map.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "sourceUri": { - "description": "Identifier for the source value set that contains the concepts that are being mapped and provides context for the mappings.", - "pattern": "^\\S*$", - "type": "string" - }, - "_sourceUri": { - "description": "Extensions for sourceUri", - "$ref": "#/definitions/Element" - }, - "sourceCanonical": { - "description": "Identifier for the source value set that contains the concepts that are being mapped and provides context for the mappings.", - "pattern": "^\\S*$", - "type": "string" - }, - "_sourceCanonical": { - "description": "Extensions for sourceCanonical", - "$ref": "#/definitions/Element" - }, - "targetUri": { - "description": "The target value set provides context for the mappings. Note that the mapping is made between concepts, not between value sets, but the value set provides important context about how the concept mapping choices are made.", - "pattern": "^\\S*$", - "type": "string" - }, - "_targetUri": { - "description": "Extensions for targetUri", - "$ref": "#/definitions/Element" - }, - "targetCanonical": { - "description": "The target value set provides context for the mappings. Note that the mapping is made between concepts, not between value sets, but the value set provides important context about how the concept mapping choices are made.", - "pattern": "^\\S*$", - "type": "string" - }, - "_targetCanonical": { - "description": "Extensions for targetCanonical", - "$ref": "#/definitions/Element" - }, - "group": { - "description": "A group of mappings that all have the same source and target system.", - "items": { - "$ref": "#/definitions/ConceptMap_Group" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "ConceptMap_Group": { - "description": "A statement of relationships from one set of concepts to one or more other concepts - either concepts in code systems, or data element/data element concepts, or classes in class models.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "source": { - "description": "An absolute URI that identifies the source system where the concepts to be mapped are defined.", - "$ref": "#/definitions/uri" - }, - "_source": { - "description": "Extensions for source", - "$ref": "#/definitions/Element" - }, - "sourceVersion": { - "description": "The specific version of the code system, as determined by the code system authority.", - "$ref": "#/definitions/string" - }, - "_sourceVersion": { - "description": "Extensions for sourceVersion", - "$ref": "#/definitions/Element" - }, - "target": { - "description": "An absolute URI that identifies the target system that the concepts will be mapped to.", - "$ref": "#/definitions/uri" - }, - "_target": { - "description": "Extensions for target", - "$ref": "#/definitions/Element" - }, - "targetVersion": { - "description": "The specific version of the code system, as determined by the code system authority.", - "$ref": "#/definitions/string" - }, - "_targetVersion": { - "description": "Extensions for targetVersion", - "$ref": "#/definitions/Element" - }, - "element": { - "description": "Mappings for an individual concept in the source to one or more concepts in the target.", - "items": { - "$ref": "#/definitions/ConceptMap_Element" - }, - "type": "array" - }, - "unmapped": { - "description": "What to do when there is no mapping for the source concept. \"Unmapped\" does not include codes that are unmatched, and the unmapped element is ignored in a code is specified to have equivalence \u003d unmatched.", - "$ref": "#/definitions/ConceptMap_Unmapped" - } - }, - "additionalProperties": false, - "required": [ - "element" - ] - }, - "ConceptMap_Element": { - "description": "A statement of relationships from one set of concepts to one or more other concepts - either concepts in code systems, or data element/data element concepts, or classes in class models.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Identity (code or path) or the element/item being mapped.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "display": { - "description": "The display for the code. The display is only provided to help editors when editing the concept map.", - "$ref": "#/definitions/string" - }, - "_display": { - "description": "Extensions for display", - "$ref": "#/definitions/Element" - }, - "target": { - "description": "A concept from the target value set that this concept maps to.", - "items": { - "$ref": "#/definitions/ConceptMap_Target" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ConceptMap_Target": { - "description": "A statement of relationships from one set of concepts to one or more other concepts - either concepts in code systems, or data element/data element concepts, or classes in class models.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Identity (code or path) or the element/item that the map refers to.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "display": { - "description": "The display for the code. The display is only provided to help editors when editing the concept map.", - "$ref": "#/definitions/string" - }, - "_display": { - "description": "Extensions for display", - "$ref": "#/definitions/Element" - }, - "equivalence": { - "description": "The equivalence between the source and target concepts (counting for the dependencies and products). The equivalence is read from target to source (e.g. the target is \u0027wider\u0027 than the source).", - "enum": [ - "relatedto", - "equivalent", - "equal", - "wider", - "subsumes", - "narrower", - "specializes", - "inexact", - "unmatched", - "disjoint" - ] - }, - "_equivalence": { - "description": "Extensions for equivalence", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "A description of status/issues in mapping that conveys additional information not represented in the structured data.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - }, - "dependsOn": { - "description": "A set of additional dependencies for this mapping to hold. This mapping is only applicable if the specified element can be resolved, and it has the specified value.", - "items": { - "$ref": "#/definitions/ConceptMap_DependsOn" - }, - "type": "array" - }, - "product": { - "description": "A set of additional outcomes from this mapping to other elements. To properly execute this mapping, the specified element must be mapped to some data element or source that is in context. The mapping may still be useful without a place for the additional data elements, but the equivalence cannot be relied on.", - "items": { - "$ref": "#/definitions/ConceptMap_DependsOn" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ConceptMap_DependsOn": { - "description": "A statement of relationships from one set of concepts to one or more other concepts - either concepts in code systems, or data element/data element concepts, or classes in class models.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "property": { - "description": "A reference to an element that holds a coded value that corresponds to a code system property. The idea is that the information model carries an element somewhere that is labeled to correspond with a code system property.", - "$ref": "#/definitions/uri" - }, - "_property": { - "description": "Extensions for property", - "$ref": "#/definitions/Element" - }, - "system": { - "description": "An absolute URI that identifies the code system of the dependency code (if the source/dependency is a value set that crosses code systems).", - "$ref": "#/definitions/canonical" - }, - "value": { - "description": "Identity (code or path) or the element/item/ValueSet/text that the map depends on / refers to.", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "display": { - "description": "The display for the code. The display is only provided to help editors when editing the concept map.", - "$ref": "#/definitions/string" - }, - "_display": { - "description": "Extensions for display", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ConceptMap_Unmapped": { - "description": "A statement of relationships from one set of concepts to one or more other concepts - either concepts in code systems, or data element/data element concepts, or classes in class models.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "mode": { - "description": "Defines which action to take if there is no match for the source concept in the target system designated for the group. One of 3 actions are possible: use the unmapped code (this is useful when doing a mapping between versions, and only a few codes have changed), use a fixed code (a default code), or alternatively, a reference to a different concept map can be provided (by canonical URL).", - "enum": [ - "provided", - "fixed", - "other-map" - ] - }, - "_mode": { - "description": "Extensions for mode", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "The fixed code to use when the mode \u003d \u0027fixed\u0027 - all unmapped codes are mapped to a single fixed code.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "display": { - "description": "The display for the code. The display is only provided to help editors when editing the concept map.", - "$ref": "#/definitions/string" - }, - "_display": { - "description": "Extensions for display", - "$ref": "#/definitions/Element" - }, - "url": { - "description": "The canonical reference to an additional ConceptMap resource instance to use for mapping if this ConceptMap resource contains no matching mapping for the source concept.", - "$ref": "#/definitions/canonical" - } - }, - "additionalProperties": false - }, - "Condition": { - "description": "A clinical condition, problem, diagnosis, or other event, situation, issue, or clinical concept that has risen to a level of concern.", - "properties": { - "resourceType": { - "description": "This is a Condition resource", - "const": "Condition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this condition by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "clinicalStatus": { - "description": "The clinical status of the condition.", - "$ref": "#/definitions/CodeableConcept" - }, - "verificationStatus": { - "description": "The verification status to support the clinical status of the condition.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "A category assigned to the condition.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "severity": { - "description": "A subjective assessment of the severity of the condition as evaluated by the clinician.", - "$ref": "#/definitions/CodeableConcept" - }, - "code": { - "description": "Identification of the condition, problem or diagnosis.", - "$ref": "#/definitions/CodeableConcept" - }, - "bodySite": { - "description": "The anatomical location where this condition manifests itself.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "subject": { - "description": "Indicates the patient or group who the condition record is associated with.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The Encounter during which this Condition was created or to which the creation of this record is tightly associated.", - "$ref": "#/definitions/Reference" - }, - "onsetDateTime": { - "description": "Estimated or actual date or date-time the condition began, in the opinion of the clinician.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_onsetDateTime": { - "description": "Extensions for onsetDateTime", - "$ref": "#/definitions/Element" - }, - "onsetAge": { - "description": "Estimated or actual date or date-time the condition began, in the opinion of the clinician.", - "$ref": "#/definitions/Age" - }, - "onsetPeriod": { - "description": "Estimated or actual date or date-time the condition began, in the opinion of the clinician.", - "$ref": "#/definitions/Period" - }, - "onsetRange": { - "description": "Estimated or actual date or date-time the condition began, in the opinion of the clinician.", - "$ref": "#/definitions/Range" - }, - "onsetString": { - "description": "Estimated or actual date or date-time the condition began, in the opinion of the clinician.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_onsetString": { - "description": "Extensions for onsetString", - "$ref": "#/definitions/Element" - }, - "abatementDateTime": { - "description": "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_abatementDateTime": { - "description": "Extensions for abatementDateTime", - "$ref": "#/definitions/Element" - }, - "abatementAge": { - "description": "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", - "$ref": "#/definitions/Age" - }, - "abatementPeriod": { - "description": "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", - "$ref": "#/definitions/Period" - }, - "abatementRange": { - "description": "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", - "$ref": "#/definitions/Range" - }, - "abatementString": { - "description": "The date or estimated date that the condition resolved or went into remission. This is called \"abatement\" because of the many overloaded connotations associated with \"remission\" or \"resolution\" - Conditions are never really resolved, but they can abate.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_abatementString": { - "description": "Extensions for abatementString", - "$ref": "#/definitions/Element" - }, - "recordedDate": { - "description": "The recordedDate represents when this particular Condition record was created in the system, which is often a system-generated date.", - "$ref": "#/definitions/dateTime" - }, - "_recordedDate": { - "description": "Extensions for recordedDate", - "$ref": "#/definitions/Element" - }, - "recorder": { - "description": "Individual who recorded the record and takes responsibility for its content.", - "$ref": "#/definitions/Reference" - }, - "asserter": { - "description": "Individual who is making the condition statement.", - "$ref": "#/definitions/Reference" - }, - "stage": { - "description": "Clinical stage or grade of a condition. May include formal severity assessments.", - "items": { - "$ref": "#/definitions/Condition_Stage" - }, - "type": "array" - }, - "evidence": { - "description": "Supporting evidence / manifestations that are the basis of the Condition\u0027s verification status, such as evidence that confirmed or refuted the condition.", - "items": { - "$ref": "#/definitions/Condition_Evidence" - }, - "type": "array" - }, - "note": { - "description": "Additional information about the Condition. This is a general notes/comments entry for description of the Condition, its diagnosis and prognosis.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "Condition_Stage": { - "description": "A clinical condition, problem, diagnosis, or other event, situation, issue, or clinical concept that has risen to a level of concern.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "summary": { - "description": "A simple summary of the stage such as \"Stage 3\". The determination of the stage is disease-specific.", - "$ref": "#/definitions/CodeableConcept" - }, - "assessment": { - "description": "Reference to a formal record of the evidence on which the staging assessment is based.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "type": { - "description": "The kind of staging, such as pathological or clinical staging.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "Condition_Evidence": { - "description": "A clinical condition, problem, diagnosis, or other event, situation, issue, or clinical concept that has risen to a level of concern.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A manifestation or symptom that led to the recording of this condition.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "detail": { - "description": "Links to other relevant information, including pathology reports.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Consent": { - "description": "A record of a healthcare consumer’s choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.", - "properties": { - "resourceType": { - "description": "This is a Consent resource", - "const": "Consent" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique identifier for this copy of the Consent Statement.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "Indicates the current state of this consent.", - "enum": [ - "draft", - "proposed", - "active", - "rejected", - "inactive", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "scope": { - "description": "A selector of the type of consent being presented: ADR, Privacy, Treatment, Research. This list is now extensible.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "A classification of the type of consents found in the statement. This element supports indexing and retrieval of consent statements.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "patient": { - "description": "The patient/healthcare consumer to whom this consent applies.", - "$ref": "#/definitions/Reference" - }, - "dateTime": { - "description": "When this Consent was issued / created / indexed.", - "$ref": "#/definitions/dateTime" - }, - "_dateTime": { - "description": "Extensions for dateTime", - "$ref": "#/definitions/Element" - }, - "performer": { - "description": "Either the Grantor, which is the entity responsible for granting the rights listed in a Consent Directive or the Grantee, which is the entity responsible for complying with the Consent Directive, including any obligations or limitations on authorizations and enforcement of prohibitions.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "organization": { - "description": "The organization that manages the consent, and the framework within which it is executed.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "sourceAttachment": { - "description": "The source on which this consent statement is based. The source might be a scanned original paper form, or a reference to a consent that links back to such a source, a reference to a document repository (e.g. XDS) that stores the original consent document.", - "$ref": "#/definitions/Attachment" - }, - "sourceReference": { - "description": "The source on which this consent statement is based. The source might be a scanned original paper form, or a reference to a consent that links back to such a source, a reference to a document repository (e.g. XDS) that stores the original consent document.", - "$ref": "#/definitions/Reference" - }, - "policy": { - "description": "The references to the policies that are included in this consent scope. Policies may be organizational, but are often defined jurisdictionally, or in law.", - "items": { - "$ref": "#/definitions/Consent_Policy" - }, - "type": "array" - }, - "policyRule": { - "description": "A reference to the specific base computable regulation or policy.", - "$ref": "#/definitions/CodeableConcept" - }, - "verification": { - "description": "Whether a treatment instruction (e.g. artificial respiration yes or no) was verified with the patient, his/her family or another authorized person.", - "items": { - "$ref": "#/definitions/Consent_Verification" - }, - "type": "array" - }, - "provision": { - "description": "An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.", - "$ref": "#/definitions/Consent_Provision" - } - }, - "additionalProperties": false, - "required": [ - "scope", - "category", - "resourceType" - ] - }, - "Consent_Policy": { - "description": "A record of a healthcare consumer’s choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "authority": { - "description": "Entity or Organization having regulatory jurisdiction or accountability for enforcing policies pertaining to Consent Directives.", - "$ref": "#/definitions/uri" - }, - "_authority": { - "description": "Extensions for authority", - "$ref": "#/definitions/Element" - }, - "uri": { - "description": "The references to the policies that are included in this consent scope. Policies may be organizational, but are often defined jurisdictionally, or in law.", - "$ref": "#/definitions/uri" - }, - "_uri": { - "description": "Extensions for uri", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Consent_Verification": { - "description": "A record of a healthcare consumer’s choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "verified": { - "description": "Has the instruction been verified.", - "$ref": "#/definitions/boolean" - }, - "_verified": { - "description": "Extensions for verified", - "$ref": "#/definitions/Element" - }, - "verifiedWith": { - "description": "Who verified the instruction (Patient, Relative or other Authorized Person).", - "$ref": "#/definitions/Reference" - }, - "verificationDate": { - "description": "Date verification was collected.", - "$ref": "#/definitions/dateTime" - }, - "_verificationDate": { - "description": "Extensions for verificationDate", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Consent_Provision": { - "description": "A record of a healthcare consumer’s choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Action to take - permit or deny - when the rule conditions are met. Not permitted in root rule, required in all nested rules.", - "enum": [ - "deny", - "permit" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "The timeframe in this rule is valid.", - "$ref": "#/definitions/Period" - }, - "actor": { - "description": "Who or what is controlled by this rule. Use group to identify a set of actors by some property they share (e.g. \u0027admitting officers\u0027).", - "items": { - "$ref": "#/definitions/Consent_Actor" - }, - "type": "array" - }, - "action": { - "description": "Actions controlled by this Rule.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "securityLabel": { - "description": "A security label, comprised of 0..* security label fields (Privacy tags), which define which resources are controlled by this exception.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "purpose": { - "description": "The context of the activities a user is taking - why the user is accessing the data - that are controlled by this rule.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "class": { - "description": "The class of information covered by this rule. The type can be a FHIR resource type, a profile on a type, or a CDA document, or some other type that indicates what sort of information the consent relates to.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "code": { - "description": "If this code is found in an instance, then the rule applies.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "dataPeriod": { - "description": "Clinical or Operational Relevant period of time that bounds the data controlled by this rule.", - "$ref": "#/definitions/Period" - }, - "data": { - "description": "The resources controlled by this rule if specific resources are referenced.", - "items": { - "$ref": "#/definitions/Consent_Data" - }, - "type": "array" - }, - "provision": { - "description": "Rules which provide exceptions to the base rule or subrules.", - "items": { - "$ref": "#/definitions/Consent_Provision" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Consent_Actor": { - "description": "A record of a healthcare consumer’s choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "role": { - "description": "How the individual is involved in the resources content that is described in the exception.", - "$ref": "#/definitions/CodeableConcept" - }, - "reference": { - "description": "The resource that identifies the actor. To identify actors by type, use group to identify a set of actors by some property they share (e.g. \u0027admitting officers\u0027).", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "reference", - "role" - ] - }, - "Consent_Data": { - "description": "A record of a healthcare consumer’s choices, which permits or denies identified recipient(s) or recipient role(s) to perform one or more actions within a given policy context, for specific purposes and periods of time.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "meaning": { - "description": "How the resource reference is interpreted when testing consent restrictions.", - "enum": [ - "instance", - "related", - "dependents", - "authoredby" - ] - }, - "_meaning": { - "description": "Extensions for meaning", - "$ref": "#/definitions/Element" - }, - "reference": { - "description": "A reference to a specific resource that defines which resources are covered by this consent.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "reference" - ] - }, - "Contract": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "resourceType": { - "description": "This is a Contract resource", - "const": "Contract" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique identifier for this Contract or a derivative that references a Source Contract.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "url": { - "description": "Canonical identifier for this contract, represented as a URI (globally unique).", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "An edition identifier used for business purposes to label business significant variants.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of the resource instance.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "legalState": { - "description": "Legal states of the formation of a legal instrument, which is a formally executed written document that can be formally attributed to its author, records and formally expresses a legally enforceable act, process, or contractual duty, obligation, or right, and therefore evidences that act, process, or agreement.", - "$ref": "#/definitions/CodeableConcept" - }, - "instantiatesCanonical": { - "description": "The URL pointing to a FHIR-defined Contract Definition that is adhered to in whole or part by this Contract.", - "$ref": "#/definitions/Reference" - }, - "instantiatesUri": { - "description": "The URL pointing to an externally maintained definition that is adhered to in whole or in part by this Contract.", - "$ref": "#/definitions/uri" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "$ref": "#/definitions/Element" - }, - "contentDerivative": { - "description": "The minimal content derived from the basal information source at a specific stage in its lifecycle.", - "$ref": "#/definitions/CodeableConcept" - }, - "issued": { - "description": "When this Contract was issued.", - "$ref": "#/definitions/dateTime" - }, - "_issued": { - "description": "Extensions for issued", - "$ref": "#/definitions/Element" - }, - "applies": { - "description": "Relevant time or time-period when this Contract is applicable.", - "$ref": "#/definitions/Period" - }, - "expirationType": { - "description": "Event resulting in discontinuation or termination of this Contract instance by one or more parties to the contract.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "The target entity impacted by or of interest to parties to the agreement.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "authority": { - "description": "A formally or informally recognized grouping of people, principals, organizations, or jurisdictions formed for the purpose of achieving some form of collective action such as the promulgation, administration and enforcement of contracts and policies.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "domain": { - "description": "Recognized governance framework or system operating with a circumscribed scope in accordance with specified principles, policies, processes or procedures for managing rights, actions, or behaviors of parties or principals relative to resources.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "site": { - "description": "Sites in which the contract is complied with, exercised, or in force.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "name": { - "description": "A natural language name identifying this Contract definition, derivative, or instance in any legal state. Provides additional information about its content. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for this Contract definition, derivative, or instance in any legal state.t giving additional information about its content.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "subtitle": { - "description": "An explanatory or alternate user-friendly title for this Contract definition, derivative, or instance in any legal state.t giving additional information about its content.", - "$ref": "#/definitions/string" - }, - "_subtitle": { - "description": "Extensions for subtitle", - "$ref": "#/definitions/Element" - }, - "alias": { - "description": "Alternative representation of the title for this Contract definition, derivative, or instance in any legal state., e.g., a domain specific contract number related to legislation.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_alias": { - "description": "Extensions for alias", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "author": { - "description": "The individual or organization that authored the Contract definition, derivative, or instance in any legal state.", - "$ref": "#/definitions/Reference" - }, - "scope": { - "description": "A selector of legal concerns for this Contract definition, derivative, or instance in any legal state.", - "$ref": "#/definitions/CodeableConcept" - }, - "topicCodeableConcept": { - "description": "Narrows the range of legal concerns to focus on the achievement of specific contractual objectives.", - "$ref": "#/definitions/CodeableConcept" - }, - "topicReference": { - "description": "Narrows the range of legal concerns to focus on the achievement of specific contractual objectives.", - "$ref": "#/definitions/Reference" - }, - "type": { - "description": "A high-level category for the legal instrument, whether constructed as a Contract definition, derivative, or instance in any legal state. Provides additional information about its content within the context of the Contract\u0027s scope to distinguish the kinds of systems that would be interested in the contract.", - "$ref": "#/definitions/CodeableConcept" - }, - "subType": { - "description": "Sub-category for the Contract that distinguishes the kinds of systems that would be interested in the Contract within the context of the Contract\u0027s scope.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "contentDefinition": { - "description": "Precusory content developed with a focus and intent of supporting the formation a Contract instance, which may be associated with and transformable into a Contract.", - "$ref": "#/definitions/Contract_ContentDefinition" - }, - "term": { - "description": "One or more Contract Provisions, which may be related and conveyed as a group, and may contain nested groups.", - "items": { - "$ref": "#/definitions/Contract_Term" - }, - "type": "array" - }, - "supportingInfo": { - "description": "Information that may be needed by/relevant to the performer in their execution of this term action.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "relevantHistory": { - "description": "Links to Provenance records for past versions of this Contract definition, derivative, or instance, which identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the Contract. The Provence.entity indicates the target that was changed in the update. http://build.fhir.org/provenance-definitions.html#Provenance.entity.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "signer": { - "description": "Parties with legal standing in the Contract, including the principal parties, the grantor(s) and grantee(s), which are any person or organization bound by the contract, and any ancillary parties, which facilitate the execution of the contract such as a notary or witness.", - "items": { - "$ref": "#/definitions/Contract_Signer" - }, - "type": "array" - }, - "friendly": { - "description": "The \"patient friendly language\" versionof the Contract in whole or in parts. \"Patient friendly language\" means the representation of the Contract and Contract Provisions in a manner that is readily accessible and understandable by a layperson in accordance with best practices for communication styles that ensure that those agreeing to or signing the Contract understand the roles, actions, obligations, responsibilities, and implication of the agreement.", - "items": { - "$ref": "#/definitions/Contract_Friendly" - }, - "type": "array" - }, - "legal": { - "description": "List of Legal expressions or representations of this Contract.", - "items": { - "$ref": "#/definitions/Contract_Legal" - }, - "type": "array" - }, - "rule": { - "description": "List of Computable Policy Rule Language Representations of this Contract.", - "items": { - "$ref": "#/definitions/Contract_Rule" - }, - "type": "array" - }, - "legallyBindingAttachment": { - "description": "Legally binding Contract: This is the signed and legally recognized representation of the Contract, which is considered the \"source of truth\" and which would be the basis for legal action related to enforcement of this Contract.", - "$ref": "#/definitions/Attachment" - }, - "legallyBindingReference": { - "description": "Legally binding Contract: This is the signed and legally recognized representation of the Contract, which is considered the \"source of truth\" and which would be the basis for legal action related to enforcement of this Contract.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Contract_ContentDefinition": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Precusory content structure and use, i.e., a boilerplate, template, application for a contract such as an insurance policy or benefits under a program, e.g., workers compensation.", - "$ref": "#/definitions/CodeableConcept" - }, - "subType": { - "description": "Detailed Precusory content type.", - "$ref": "#/definitions/CodeableConcept" - }, - "publisher": { - "description": "The individual or organization that published the Contract precursor content.", - "$ref": "#/definitions/Reference" - }, - "publicationDate": { - "description": "The date (and optionally time) when the contract was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the contract changes.", - "$ref": "#/definitions/dateTime" - }, - "_publicationDate": { - "description": "Extensions for publicationDate", - "$ref": "#/definitions/Element" - }, - "publicationStatus": { - "description": "draft | active | retired | unknown.", - "$ref": "#/definitions/code" - }, - "_publicationStatus": { - "description": "Extensions for publicationStatus", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to Contract precursor content. Copyright statements are generally legal restrictions on the use and publishing of the Contract precursor content.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "Contract_Term": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique identifier for this particular Contract Provision.", - "$ref": "#/definitions/Identifier" - }, - "issued": { - "description": "When this Contract Provision was issued.", - "$ref": "#/definitions/dateTime" - }, - "_issued": { - "description": "Extensions for issued", - "$ref": "#/definitions/Element" - }, - "applies": { - "description": "Relevant time or time-period when this Contract Provision is applicable.", - "$ref": "#/definitions/Period" - }, - "topicCodeableConcept": { - "description": "The entity that the term applies to.", - "$ref": "#/definitions/CodeableConcept" - }, - "topicReference": { - "description": "The entity that the term applies to.", - "$ref": "#/definitions/Reference" - }, - "type": { - "description": "A legal clause or condition contained within a contract that requires one or both parties to perform a particular requirement by some specified time or prevents one or both parties from performing a particular requirement by some specified time.", - "$ref": "#/definitions/CodeableConcept" - }, - "subType": { - "description": "A specialized legal clause or condition based on overarching contract type.", - "$ref": "#/definitions/CodeableConcept" - }, - "text": { - "description": "Statement of a provision in a policy or a contract.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - }, - "securityLabel": { - "description": "Security labels that protect the handling of information about the term and its elements, which may be specifically identified..", - "items": { - "$ref": "#/definitions/Contract_SecurityLabel" - }, - "type": "array" - }, - "offer": { - "description": "The matter of concern in the context of this provision of the agrement.", - "$ref": "#/definitions/Contract_Offer" - }, - "asset": { - "description": "Contract Term Asset List.", - "items": { - "$ref": "#/definitions/Contract_Asset" - }, - "type": "array" - }, - "action": { - "description": "An actor taking a role in an activity for which it can be assigned some degree of responsibility for the activity taking place.", - "items": { - "$ref": "#/definitions/Contract_Action" - }, - "type": "array" - }, - "group": { - "description": "Nested group of Contract Provisions.", - "items": { - "$ref": "#/definitions/Contract_Term" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "offer" - ] - }, - "Contract_SecurityLabel": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "number": { - "description": "Number used to link this term or term element to the applicable Security Label.", - "items": { - "$ref": "#/definitions/unsignedInt" - }, - "type": "array" - }, - "_number": { - "description": "Extensions for number", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "classification": { - "description": "Security label privacy tag that species the level of confidentiality protection required for this term and/or term elements.", - "$ref": "#/definitions/Coding" - }, - "category": { - "description": "Security label privacy tag that species the applicable privacy and security policies governing this term and/or term elements.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "control": { - "description": "Security label privacy tag that species the manner in which term and/or term elements are to be protected.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "classification" - ] - }, - "Contract_Offer": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique identifier for this particular Contract Provision.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "party": { - "description": "Offer Recipient.", - "items": { - "$ref": "#/definitions/Contract_Party" - }, - "type": "array" - }, - "topic": { - "description": "The owner of an asset has the residual control rights over the asset: the right to decide all usages of the asset in any way not inconsistent with a prior contract, custom, or law (Hart, 1995, p. 30).", - "$ref": "#/definitions/Reference" - }, - "type": { - "description": "Type of Contract Provision such as specific requirements, purposes for actions, obligations, prohibitions, e.g. life time maximum benefit.", - "$ref": "#/definitions/CodeableConcept" - }, - "decision": { - "description": "Type of choice made by accepting party with respect to an offer made by an offeror/ grantee.", - "$ref": "#/definitions/CodeableConcept" - }, - "decisionMode": { - "description": "How the decision about a Contract was conveyed.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "answer": { - "description": "Response to offer text.", - "items": { - "$ref": "#/definitions/Contract_Answer" - }, - "type": "array" - }, - "text": { - "description": "Human readable form of this Contract Offer.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - }, - "linkId": { - "description": "The id of the clause or question text of the offer in the referenced questionnaire/response.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_linkId": { - "description": "Extensions for linkId", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "securityLabelNumber": { - "description": "Security labels that protects the offer.", - "items": { - "$ref": "#/definitions/unsignedInt" - }, - "type": "array" - }, - "_securityLabelNumber": { - "description": "Extensions for securityLabelNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Contract_Party": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "reference": { - "description": "Participant in the offer.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "role": { - "description": "How the party participates in the offer.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "reference", - "role" - ] - }, - "Contract_Answer": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "valueBoolean": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueDecimal": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_valueDecimal": { - "description": "Extensions for valueDecimal", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueDate": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_valueDate": { - "description": "Extensions for valueDate", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valueTime": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_valueTime": { - "description": "Extensions for valueTime", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueUri": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUri": { - "description": "Extensions for valueUri", - "$ref": "#/definitions/Element" - }, - "valueAttachment": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "$ref": "#/definitions/Attachment" - }, - "valueCoding": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "$ref": "#/definitions/Coding" - }, - "valueQuantity": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "$ref": "#/definitions/Quantity" - }, - "valueReference": { - "description": "Response to an offer clause or question text, which enables selection of values to be agreed to, e.g., the period of participation, the date of occupancy of a rental, warrently duration, or whether biospecimen may be used for further research.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "Contract_Asset": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "scope": { - "description": "Differentiates the kind of the asset .", - "$ref": "#/definitions/CodeableConcept" - }, - "type": { - "description": "Target entity type about which the term may be concerned.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "typeReference": { - "description": "Associated entities.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "subtype": { - "description": "May be a subtype or part of an offered asset.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "relationship": { - "description": "Specifies the applicability of the term to an asset resource instance, and instances it refers to orinstances that refer to it, and/or are owned by the offeree.", - "$ref": "#/definitions/Coding" - }, - "context": { - "description": "Circumstance of the asset.", - "items": { - "$ref": "#/definitions/Contract_Context" - }, - "type": "array" - }, - "condition": { - "description": "Description of the quality and completeness of the asset that imay be a factor in its valuation.", - "$ref": "#/definitions/string" - }, - "_condition": { - "description": "Extensions for condition", - "$ref": "#/definitions/Element" - }, - "periodType": { - "description": "Type of Asset availability for use or ownership.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "period": { - "description": "Asset relevant contractual time period.", - "items": { - "$ref": "#/definitions/Period" - }, - "type": "array" - }, - "usePeriod": { - "description": "Time period of asset use.", - "items": { - "$ref": "#/definitions/Period" - }, - "type": "array" - }, - "text": { - "description": "Clause or question text (Prose Object) concerning the asset in a linked form, such as a QuestionnaireResponse used in the formation of the contract.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - }, - "linkId": { - "description": "Id [identifier??] of the clause or question text about the asset in the referenced form or QuestionnaireResponse.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_linkId": { - "description": "Extensions for linkId", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "answer": { - "description": "Response to assets.", - "items": { - "$ref": "#/definitions/Contract_Answer" - }, - "type": "array" - }, - "securityLabelNumber": { - "description": "Security labels that protects the asset.", - "items": { - "$ref": "#/definitions/unsignedInt" - }, - "type": "array" - }, - "_securityLabelNumber": { - "description": "Extensions for securityLabelNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "valuedItem": { - "description": "Contract Valued Item List.", - "items": { - "$ref": "#/definitions/Contract_ValuedItem" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Contract_Context": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "reference": { - "description": "Asset context reference may include the creator, custodian, or owning Person or Organization (e.g., bank, repository), location held, e.g., building, jurisdiction.", - "$ref": "#/definitions/Reference" - }, - "code": { - "description": "Coded representation of the context generally or of the Referenced entity, such as the asset holder type or location.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "text": { - "description": "Context description.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Contract_ValuedItem": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "entityCodeableConcept": { - "description": "Specific type of Contract Valued Item that may be priced.", - "$ref": "#/definitions/CodeableConcept" - }, - "entityReference": { - "description": "Specific type of Contract Valued Item that may be priced.", - "$ref": "#/definitions/Reference" - }, - "identifier": { - "description": "Identifies a Contract Valued Item instance.", - "$ref": "#/definitions/Identifier" - }, - "effectiveTime": { - "description": "Indicates the time during which this Contract ValuedItem information is effective.", - "$ref": "#/definitions/dateTime" - }, - "_effectiveTime": { - "description": "Extensions for effectiveTime", - "$ref": "#/definitions/Element" - }, - "quantity": { - "description": "Specifies the units by which the Contract Valued Item is measured or counted, and quantifies the countable or measurable Contract Valued Item instances.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "A Contract Valued Item unit valuation measure.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of the Contract Valued Item delivered. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "points": { - "description": "An amount that expresses the weighting (based on difficulty, cost and/or resource intensiveness) associated with the Contract Valued Item delivered. The concept of Points allows for assignment of point values for a Contract Valued Item, such that a monetary amount can be assigned to each point.", - "$ref": "#/definitions/decimal" - }, - "_points": { - "description": "Extensions for points", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "Expresses the product of the Contract Valued Item unitQuantity and the unitPriceAmt. For example, the formula: unit Quantity * unit Price (Cost per Point) * factor Number * points \u003d net Amount. Quantity, factor and points are assumed to be 1 if not supplied.", - "$ref": "#/definitions/Money" - }, - "payment": { - "description": "Terms of valuation.", - "$ref": "#/definitions/string" - }, - "_payment": { - "description": "Extensions for payment", - "$ref": "#/definitions/Element" - }, - "paymentDate": { - "description": "When payment is due.", - "$ref": "#/definitions/dateTime" - }, - "_paymentDate": { - "description": "Extensions for paymentDate", - "$ref": "#/definitions/Element" - }, - "responsible": { - "description": "Who will make payment.", - "$ref": "#/definitions/Reference" - }, - "recipient": { - "description": "Who will receive payment.", - "$ref": "#/definitions/Reference" - }, - "linkId": { - "description": "Id of the clause or question text related to the context of this valuedItem in the referenced form or QuestionnaireResponse.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_linkId": { - "description": "Extensions for linkId", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "securityLabelNumber": { - "description": "A set of security labels that define which terms are controlled by this condition.", - "items": { - "$ref": "#/definitions/unsignedInt" - }, - "type": "array" - }, - "_securityLabelNumber": { - "description": "Extensions for securityLabelNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Contract_Action": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "doNotPerform": { - "description": "True if the term prohibits the action.", - "$ref": "#/definitions/boolean" - }, - "_doNotPerform": { - "description": "Extensions for doNotPerform", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Activity or service obligation to be done or not done, performed or not performed, effectuated or not by this Contract term.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "Entity of the action.", - "items": { - "$ref": "#/definitions/Contract_Subject" - }, - "type": "array" - }, - "intent": { - "description": "Reason or purpose for the action stipulated by this Contract Provision.", - "$ref": "#/definitions/CodeableConcept" - }, - "linkId": { - "description": "Id [identifier??] of the clause or question text related to this action in the referenced form or QuestionnaireResponse.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_linkId": { - "description": "Extensions for linkId", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "status": { - "description": "Current state of the term action.", - "$ref": "#/definitions/CodeableConcept" - }, - "context": { - "description": "Encounter or Episode with primary association to specified term activity.", - "$ref": "#/definitions/Reference" - }, - "contextLinkId": { - "description": "Id [identifier??] of the clause or question text related to the requester of this action in the referenced form or QuestionnaireResponse.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_contextLinkId": { - "description": "Extensions for contextLinkId", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "occurrenceDateTime": { - "description": "When action happens.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_occurrenceDateTime": { - "description": "Extensions for occurrenceDateTime", - "$ref": "#/definitions/Element" - }, - "occurrencePeriod": { - "description": "When action happens.", - "$ref": "#/definitions/Period" - }, - "occurrenceTiming": { - "description": "When action happens.", - "$ref": "#/definitions/Timing" - }, - "requester": { - "description": "Who or what initiated the action and has responsibility for its activation.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "requesterLinkId": { - "description": "Id [identifier??] of the clause or question text related to the requester of this action in the referenced form or QuestionnaireResponse.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_requesterLinkId": { - "description": "Extensions for requesterLinkId", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "performerType": { - "description": "The type of individual that is desired or required to perform or not perform the action.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "performerRole": { - "description": "The type of role or competency of an individual desired or required to perform or not perform the action.", - "$ref": "#/definitions/CodeableConcept" - }, - "performer": { - "description": "Indicates who or what is being asked to perform (or not perform) the ction.", - "$ref": "#/definitions/Reference" - }, - "performerLinkId": { - "description": "Id [identifier??] of the clause or question text related to the reason type or reference of this action in the referenced form or QuestionnaireResponse.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_performerLinkId": { - "description": "Extensions for performerLinkId", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "reasonCode": { - "description": "Rationale for the action to be performed or not performed. Describes why the action is permitted or prohibited.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Indicates another resource whose existence justifies permitting or not permitting this action.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "reason": { - "description": "Describes why the action is to be performed or not performed in textual form.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_reason": { - "description": "Extensions for reason", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "reasonLinkId": { - "description": "Id [identifier??] of the clause or question text related to the reason type or reference of this action in the referenced form or QuestionnaireResponse.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_reasonLinkId": { - "description": "Extensions for reasonLinkId", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "note": { - "description": "Comments made about the term action made by the requester, performer, subject or other participants.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "securityLabelNumber": { - "description": "Security labels that protects the action.", - "items": { - "$ref": "#/definitions/unsignedInt" - }, - "type": "array" - }, - "_securityLabelNumber": { - "description": "Extensions for securityLabelNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "type", - "intent", - "status" - ] - }, - "Contract_Subject": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "reference": { - "description": "The entity the action is performed or not performed on or for.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "role": { - "description": "Role type of agent assigned roles in this Contract.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "reference" - ] - }, - "Contract_Signer": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Role of this Contract signer, e.g. notary, grantee.", - "$ref": "#/definitions/Coding" - }, - "party": { - "description": "Party which is a signator to this Contract.", - "$ref": "#/definitions/Reference" - }, - "signature": { - "description": "Legally binding Contract DSIG signature contents in Base64.", - "items": { - "$ref": "#/definitions/Signature" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "signature", - "type", - "party" - ] - }, - "Contract_Friendly": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "contentAttachment": { - "description": "Human readable rendering of this Contract in a format and representation intended to enhance comprehension and ensure understandability.", - "$ref": "#/definitions/Attachment" - }, - "contentReference": { - "description": "Human readable rendering of this Contract in a format and representation intended to enhance comprehension and ensure understandability.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "Contract_Legal": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "contentAttachment": { - "description": "Contract legal text in human renderable form.", - "$ref": "#/definitions/Attachment" - }, - "contentReference": { - "description": "Contract legal text in human renderable form.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "Contract_Rule": { - "description": "Legally enforceable, formally recorded unilateral or bilateral directive i.e., a policy or agreement.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "contentAttachment": { - "description": "Computable Contract conveyed using a policy rule language (e.g. XACML, DKAL, SecPal).", - "$ref": "#/definitions/Attachment" - }, - "contentReference": { - "description": "Computable Contract conveyed using a policy rule language (e.g. XACML, DKAL, SecPal).", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "Coverage": { - "description": "Financial instrument which may be used to reimburse or pay for health care products and services. Includes both insurance and self-payment.", - "properties": { - "resourceType": { - "description": "This is a Coverage resource", - "const": "Coverage" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this coverage.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of the resource instance.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type of coverage: social program, medical plan, accident coverage (workers compensation, auto), group health or payment by an individual or organization.", - "$ref": "#/definitions/CodeableConcept" - }, - "policyHolder": { - "description": "The party who \u0027owns\u0027 the insurance policy.", - "$ref": "#/definitions/Reference" - }, - "subscriber": { - "description": "The party who has signed-up for or \u0027owns\u0027 the contractual relationship to the policy or to whom the benefit of the policy for services rendered to them or their family is due.", - "$ref": "#/definitions/Reference" - }, - "subscriberId": { - "description": "The insurer assigned ID for the Subscriber.", - "$ref": "#/definitions/string" - }, - "_subscriberId": { - "description": "Extensions for subscriberId", - "$ref": "#/definitions/Element" - }, - "beneficiary": { - "description": "The party who benefits from the insurance coverage; the patient when products and/or services are provided.", - "$ref": "#/definitions/Reference" - }, - "dependent": { - "description": "A unique identifier for a dependent under the coverage.", - "$ref": "#/definitions/string" - }, - "_dependent": { - "description": "Extensions for dependent", - "$ref": "#/definitions/Element" - }, - "relationship": { - "description": "The relationship of beneficiary (patient) to the subscriber.", - "$ref": "#/definitions/CodeableConcept" - }, - "period": { - "description": "Time period during which the coverage is in force. A missing start date indicates the start date isn\u0027t known, a missing end date means the coverage is continuing to be in force.", - "$ref": "#/definitions/Period" - }, - "payor": { - "description": "The program or plan underwriter or payor including both insurance and non-insurance agreements, such as patient-pay agreements.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "class": { - "description": "A suite of underwriter specific classifiers.", - "items": { - "$ref": "#/definitions/Coverage_Class" - }, - "type": "array" - }, - "order": { - "description": "The order of applicability of this coverage relative to other coverages which are currently in force. Note, there may be gaps in the numbering and this does not imply primary, secondary etc. as the specific positioning of coverages depends upon the episode of care.", - "$ref": "#/definitions/positiveInt" - }, - "_order": { - "description": "Extensions for order", - "$ref": "#/definitions/Element" - }, - "network": { - "description": "The insurer-specific identifier for the insurer-defined network of providers to which the beneficiary may seek treatment which will be covered at the \u0027in-network\u0027 rate, otherwise \u0027out of network\u0027 terms and conditions apply.", - "$ref": "#/definitions/string" - }, - "_network": { - "description": "Extensions for network", - "$ref": "#/definitions/Element" - }, - "costToBeneficiary": { - "description": "A suite of codes indicating the cost category and associated amount which have been detailed in the policy and may have been included on the health card.", - "items": { - "$ref": "#/definitions/Coverage_CostToBeneficiary" - }, - "type": "array" - }, - "subrogation": { - "description": "When \u0027subrogation\u003dtrue\u0027 this insurance instance has been included not for adjudication but to provide insurers with the details to recover costs.", - "$ref": "#/definitions/boolean" - }, - "_subrogation": { - "description": "Extensions for subrogation", - "$ref": "#/definitions/Element" - }, - "contract": { - "description": "The policy(s) which constitute this insurance coverage.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "payor", - "beneficiary", - "resourceType" - ] - }, - "Coverage_Class": { - "description": "Financial instrument which may be used to reimburse or pay for health care products and services. Includes both insurance and self-payment.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of classification for which an insurer-specific class label or number and optional name is provided, for example may be used to identify a class of coverage or employer group, Policy, Plan.", - "$ref": "#/definitions/CodeableConcept" - }, - "value": { - "description": "The alphanumeric string value associated with the insurer issued label.", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A short description for the class.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "Coverage_CostToBeneficiary": { - "description": "Financial instrument which may be used to reimburse or pay for health care products and services. Includes both insurance and self-payment.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The category of patient centric costs associated with treatment.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueQuantity": { - "description": "The amount due from the patient for the cost category.", - "$ref": "#/definitions/Quantity" - }, - "valueMoney": { - "description": "The amount due from the patient for the cost category.", - "$ref": "#/definitions/Money" - }, - "exception": { - "description": "A suite of codes indicating exceptions or reductions to patient costs and their effective periods.", - "items": { - "$ref": "#/definitions/Coverage_Exception" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Coverage_Exception": { - "description": "Financial instrument which may be used to reimburse or pay for health care products and services. Includes both insurance and self-payment.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The code for the specific exception.", - "$ref": "#/definitions/CodeableConcept" - }, - "period": { - "description": "The timeframe during when the exception is in force.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "CoverageEligibilityRequest": { - "description": "The CoverageEligibilityRequest provides patient and insurance coverage information to an insurer for them to respond, in the form of an CoverageEligibilityResponse, with information regarding whether the stated coverage is valid and in-force and optionally to provide the insurance details of the policy.", - "properties": { - "resourceType": { - "description": "This is a CoverageEligibilityRequest resource", - "const": "CoverageEligibilityRequest" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this coverage eligiblity request.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of the resource instance.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "priority": { - "description": "When the requestor expects the processor to complete processing.", - "$ref": "#/definitions/CodeableConcept" - }, - "purpose": { - "description": "Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or \u0027now\u0027 if not specified.", - "items": { - "enum": [ - "auth-requirements", - "benefits", - "discovery", - "validation" - ] - }, - "type": "array" - }, - "_purpose": { - "description": "Extensions for purpose", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "patient": { - "description": "The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.", - "$ref": "#/definitions/Reference" - }, - "servicedDate": { - "description": "The date or dates when the enclosed suite of services were performed or completed.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_servicedDate": { - "description": "Extensions for servicedDate", - "$ref": "#/definitions/Element" - }, - "servicedPeriod": { - "description": "The date or dates when the enclosed suite of services were performed or completed.", - "$ref": "#/definitions/Period" - }, - "created": { - "description": "The date when this resource was created.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "enterer": { - "description": "Person who created the request.", - "$ref": "#/definitions/Reference" - }, - "provider": { - "description": "The provider which is responsible for the request.", - "$ref": "#/definitions/Reference" - }, - "insurer": { - "description": "The Insurer who issued the coverage in question and is the recipient of the request.", - "$ref": "#/definitions/Reference" - }, - "facility": { - "description": "Facility where the services are intended to be provided.", - "$ref": "#/definitions/Reference" - }, - "supportingInfo": { - "description": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", - "items": { - "$ref": "#/definitions/CoverageEligibilityRequest_SupportingInfo" - }, - "type": "array" - }, - "insurance": { - "description": "Financial instruments for reimbursement for the health care products and services.", - "items": { - "$ref": "#/definitions/CoverageEligibilityRequest_Insurance" - }, - "type": "array" - }, - "item": { - "description": "Service categories or billable services for which benefit details and/or an authorization prior to service delivery may be required by the payor.", - "items": { - "$ref": "#/definitions/CoverageEligibilityRequest_Item" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "patient", - "insurer", - "resourceType" - ] - }, - "CoverageEligibilityRequest_SupportingInfo": { - "description": "The CoverageEligibilityRequest provides patient and insurance coverage information to an insurer for them to respond, in the form of an CoverageEligibilityResponse, with information regarding whether the stated coverage is valid and in-force and optionally to provide the insurance details of the policy.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify supporting information entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "information": { - "description": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", - "$ref": "#/definitions/Reference" - }, - "appliesToAll": { - "description": "The supporting materials are applicable for all detail items, product/servce categories and specific billing codes.", - "$ref": "#/definitions/boolean" - }, - "_appliesToAll": { - "description": "Extensions for appliesToAll", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "information" - ] - }, - "CoverageEligibilityRequest_Insurance": { - "description": "The CoverageEligibilityRequest provides patient and insurance coverage information to an insurer for them to respond, in the form of an CoverageEligibilityResponse, with information regarding whether the stated coverage is valid and in-force and optionally to provide the insurance details of the policy.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "focal": { - "description": "A flag to indicate that this Coverage is to be used for evaluation of this request when set to true.", - "$ref": "#/definitions/boolean" - }, - "_focal": { - "description": "Extensions for focal", - "$ref": "#/definitions/Element" - }, - "coverage": { - "description": "Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient\u0027s actual coverage within the insurer\u0027s information system.", - "$ref": "#/definitions/Reference" - }, - "businessArrangement": { - "description": "A business agreement number established between the provider and the insurer for special business processing purposes.", - "$ref": "#/definitions/string" - }, - "_businessArrangement": { - "description": "Extensions for businessArrangement", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "coverage" - ] - }, - "CoverageEligibilityRequest_Item": { - "description": "The CoverageEligibilityRequest provides patient and insurance coverage information to an insurer for them to respond, in the form of an CoverageEligibilityResponse, with information regarding whether the stated coverage is valid and in-force and optionally to provide the insurance details of the policy.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "supportingInfoSequence": { - "description": "Exceptions, special conditions and supporting information applicable for this service or product line.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_supportingInfoSequence": { - "description": "Extensions for supportingInfoSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "category": { - "description": "Code to identify the general type of benefits under which products and services are provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "productOrService": { - "description": "This contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "provider": { - "description": "The practitioner who is responsible for the product or service to be rendered to the patient.", - "$ref": "#/definitions/Reference" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "The amount charged to the patient by the provider for a single unit.", - "$ref": "#/definitions/Money" - }, - "facility": { - "description": "Facility where the services will be provided.", - "$ref": "#/definitions/Reference" - }, - "diagnosis": { - "description": "Patient diagnosis for which care is sought.", - "items": { - "$ref": "#/definitions/CoverageEligibilityRequest_Diagnosis" - }, - "type": "array" - }, - "detail": { - "description": "The plan/proposal/order describing the proposed service in detail.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "CoverageEligibilityRequest_Diagnosis": { - "description": "The CoverageEligibilityRequest provides patient and insurance coverage information to an insurer for them to respond, in the form of an CoverageEligibilityResponse, with information regarding whether the stated coverage is valid and in-force and optionally to provide the insurance details of the policy.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "diagnosisCodeableConcept": { - "description": "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", - "$ref": "#/definitions/CodeableConcept" - }, - "diagnosisReference": { - "description": "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "CoverageEligibilityResponse": { - "description": "This resource provides eligibility and plan details from the processing of an CoverageEligibilityRequest resource.", - "properties": { - "resourceType": { - "description": "This is a CoverageEligibilityResponse resource", - "const": "CoverageEligibilityResponse" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this coverage eligiblity request.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of the resource instance.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "purpose": { - "description": "Code to specify whether requesting: prior authorization requirements for some service categories or billing codes; benefits for coverages specified or discovered; discovery and return of coverages for the patient; and/or validation that the specified coverage is in-force at the date/period specified or \u0027now\u0027 if not specified.", - "items": { - "enum": [ - "auth-requirements", - "benefits", - "discovery", - "validation" - ] - }, - "type": "array" - }, - "_purpose": { - "description": "Extensions for purpose", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "patient": { - "description": "The party who is the beneficiary of the supplied coverage and for whom eligibility is sought.", - "$ref": "#/definitions/Reference" - }, - "servicedDate": { - "description": "The date or dates when the enclosed suite of services were performed or completed.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_servicedDate": { - "description": "Extensions for servicedDate", - "$ref": "#/definitions/Element" - }, - "servicedPeriod": { - "description": "The date or dates when the enclosed suite of services were performed or completed.", - "$ref": "#/definitions/Period" - }, - "created": { - "description": "The date this resource was created.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "requestor": { - "description": "The provider which is responsible for the request.", - "$ref": "#/definitions/Reference" - }, - "request": { - "description": "Reference to the original request resource.", - "$ref": "#/definitions/Reference" - }, - "outcome": { - "description": "The outcome of the request processing.", - "enum": [ - "queued", - "complete", - "error", - "partial" - ] - }, - "_outcome": { - "description": "Extensions for outcome", - "$ref": "#/definitions/Element" - }, - "disposition": { - "description": "A human readable description of the status of the adjudication.", - "$ref": "#/definitions/string" - }, - "_disposition": { - "description": "Extensions for disposition", - "$ref": "#/definitions/Element" - }, - "insurer": { - "description": "The Insurer who issued the coverage in question and is the author of the response.", - "$ref": "#/definitions/Reference" - }, - "insurance": { - "description": "Financial instruments for reimbursement for the health care products and services.", - "items": { - "$ref": "#/definitions/CoverageEligibilityResponse_Insurance" - }, - "type": "array" - }, - "preAuthRef": { - "description": "A reference from the Insurer to which these services pertain to be used on further communication and as proof that the request occurred.", - "$ref": "#/definitions/string" - }, - "_preAuthRef": { - "description": "Extensions for preAuthRef", - "$ref": "#/definitions/Element" - }, - "form": { - "description": "A code for the form to be used for printing the content.", - "$ref": "#/definitions/CodeableConcept" - }, - "error": { - "description": "Errors encountered during the processing of the request.", - "items": { - "$ref": "#/definitions/CoverageEligibilityResponse_Error" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "request", - "patient", - "insurer", - "resourceType" - ] - }, - "CoverageEligibilityResponse_Insurance": { - "description": "This resource provides eligibility and plan details from the processing of an CoverageEligibilityRequest resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "coverage": { - "description": "Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient\u0027s actual coverage within the insurer\u0027s information system.", - "$ref": "#/definitions/Reference" - }, - "inforce": { - "description": "Flag indicating if the coverage provided is inforce currently if no service date(s) specified or for the whole duration of the service dates.", - "$ref": "#/definitions/boolean" - }, - "_inforce": { - "description": "Extensions for inforce", - "$ref": "#/definitions/Element" - }, - "benefitPeriod": { - "description": "The term of the benefits documented in this response.", - "$ref": "#/definitions/Period" - }, - "item": { - "description": "Benefits and optionally current balances, and authorization details by category or service.", - "items": { - "$ref": "#/definitions/CoverageEligibilityResponse_Item" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "coverage" - ] - }, - "CoverageEligibilityResponse_Item": { - "description": "This resource provides eligibility and plan details from the processing of an CoverageEligibilityRequest resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "category": { - "description": "Code to identify the general type of benefits under which products and services are provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "productOrService": { - "description": "This contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "provider": { - "description": "The practitioner who is eligible for the provision of the product or service.", - "$ref": "#/definitions/Reference" - }, - "excluded": { - "description": "True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.", - "$ref": "#/definitions/boolean" - }, - "_excluded": { - "description": "Extensions for excluded", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A short name or tag for the benefit.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A richer description of the benefit or services covered.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "network": { - "description": "Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.", - "$ref": "#/definitions/CodeableConcept" - }, - "unit": { - "description": "Indicates if the benefits apply to an individual or to the family.", - "$ref": "#/definitions/CodeableConcept" - }, - "term": { - "description": "The term or period of the values such as \u0027maximum lifetime benefit\u0027 or \u0027maximum annual visits\u0027.", - "$ref": "#/definitions/CodeableConcept" - }, - "benefit": { - "description": "Benefits used to date.", - "items": { - "$ref": "#/definitions/CoverageEligibilityResponse_Benefit" - }, - "type": "array" - }, - "authorizationRequired": { - "description": "A boolean flag indicating whether a preauthorization is required prior to actual service delivery.", - "$ref": "#/definitions/boolean" - }, - "_authorizationRequired": { - "description": "Extensions for authorizationRequired", - "$ref": "#/definitions/Element" - }, - "authorizationSupporting": { - "description": "Codes or comments regarding information or actions associated with the preauthorization.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "authorizationUrl": { - "description": "A web location for obtaining requirements or descriptive information regarding the preauthorization.", - "$ref": "#/definitions/uri" - }, - "_authorizationUrl": { - "description": "Extensions for authorizationUrl", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "CoverageEligibilityResponse_Benefit": { - "description": "This resource provides eligibility and plan details from the processing of an CoverageEligibilityRequest resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Classification of benefit being provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "allowedUnsignedInt": { - "description": "The quantity of the benefit which is permitted under the coverage.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_allowedUnsignedInt": { - "description": "Extensions for allowedUnsignedInt", - "$ref": "#/definitions/Element" - }, - "allowedString": { - "description": "The quantity of the benefit which is permitted under the coverage.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_allowedString": { - "description": "Extensions for allowedString", - "$ref": "#/definitions/Element" - }, - "allowedMoney": { - "description": "The quantity of the benefit which is permitted under the coverage.", - "$ref": "#/definitions/Money" - }, - "usedUnsignedInt": { - "description": "The quantity of the benefit which have been consumed to date.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_usedUnsignedInt": { - "description": "Extensions for usedUnsignedInt", - "$ref": "#/definitions/Element" - }, - "usedString": { - "description": "The quantity of the benefit which have been consumed to date.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_usedString": { - "description": "Extensions for usedString", - "$ref": "#/definitions/Element" - }, - "usedMoney": { - "description": "The quantity of the benefit which have been consumed to date.", - "$ref": "#/definitions/Money" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "CoverageEligibilityResponse_Error": { - "description": "This resource provides eligibility and plan details from the processing of an CoverageEligibilityRequest resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "An error code,from a specified code system, which details why the eligibility check could not be performed.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "DetectedIssue": { - "description": "Indicates an actual or potential clinical issue with or between one or more active or proposed clinical actions for a patient; e.g. Drug-drug interaction, Ineffective treatment frequency, Procedure-condition conflict, etc.", - "properties": { - "resourceType": { - "description": "This is a DetectedIssue resource", - "const": "DetectedIssue" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifier associated with the detected issue record.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "Indicates the status of the detected issue.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "Identifies the general type of issue identified.", - "$ref": "#/definitions/CodeableConcept" - }, - "severity": { - "description": "Indicates the degree of importance associated with the identified issue based on the potential impact on the patient.", - "enum": [ - "high", - "moderate", - "low" - ] - }, - "_severity": { - "description": "Extensions for severity", - "$ref": "#/definitions/Element" - }, - "patient": { - "description": "Indicates the patient whose record the detected issue is associated with.", - "$ref": "#/definitions/Reference" - }, - "identifiedDateTime": { - "description": "The date or period when the detected issue was initially identified.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_identifiedDateTime": { - "description": "Extensions for identifiedDateTime", - "$ref": "#/definitions/Element" - }, - "identifiedPeriod": { - "description": "The date or period when the detected issue was initially identified.", - "$ref": "#/definitions/Period" - }, - "author": { - "description": "Individual or device responsible for the issue being raised. For example, a decision support application or a pharmacist conducting a medication review.", - "$ref": "#/definitions/Reference" - }, - "implicated": { - "description": "Indicates the resource representing the current activity or proposed activity that is potentially problematic.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "evidence": { - "description": "Supporting evidence or manifestations that provide the basis for identifying the detected issue such as a GuidanceResponse or MeasureReport.", - "items": { - "$ref": "#/definitions/DetectedIssue_Evidence" - }, - "type": "array" - }, - "detail": { - "description": "A textual explanation of the detected issue.", - "$ref": "#/definitions/string" - }, - "_detail": { - "description": "Extensions for detail", - "$ref": "#/definitions/Element" - }, - "reference": { - "description": "The literature, knowledge-base or similar reference that describes the propensity for the detected issue identified.", - "$ref": "#/definitions/uri" - }, - "_reference": { - "description": "Extensions for reference", - "$ref": "#/definitions/Element" - }, - "mitigation": { - "description": "Indicates an action that has been taken or is committed to reduce or eliminate the likelihood of the risk identified by the detected issue from manifesting. Can also reflect an observation of known mitigating factors that may reduce/eliminate the need for any action.", - "items": { - "$ref": "#/definitions/DetectedIssue_Mitigation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "DetectedIssue_Evidence": { - "description": "Indicates an actual or potential clinical issue with or between one or more active or proposed clinical actions for a patient; e.g. Drug-drug interaction, Ineffective treatment frequency, Procedure-condition conflict, etc.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A manifestation that led to the recording of this detected issue.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "detail": { - "description": "Links to resources that constitute evidence for the detected issue such as a GuidanceResponse or MeasureReport.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "DetectedIssue_Mitigation": { - "description": "Indicates an actual or potential clinical issue with or between one or more active or proposed clinical actions for a patient; e.g. Drug-drug interaction, Ineffective treatment frequency, Procedure-condition conflict, etc.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "action": { - "description": "Describes the action that was taken or the observation that was made that reduces/eliminates the risk associated with the identified issue.", - "$ref": "#/definitions/CodeableConcept" - }, - "date": { - "description": "Indicates when the mitigating action was documented.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "author": { - "description": "Identifies the practitioner who determined the mitigation and takes responsibility for the mitigation step occurring.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "action" - ] - }, - "Device": { - "description": "A type of a manufactured item that is used in the provision of healthcare without being substantially changed through that activity. The device may be a medical or non-medical device.", - "properties": { - "resourceType": { - "description": "This is a Device resource", - "const": "Device" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique instance identifiers assigned to a device by manufacturers other organizations or owners.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "definition": { - "description": "The reference to the definition for the device.", - "$ref": "#/definitions/Reference" - }, - "udiCarrier": { - "description": "Unique device identifier (UDI) assigned to device label or package. Note that the Device may include multiple udiCarriers as it either may include just the udiCarrier for the jurisdiction it is sold, or for multiple jurisdictions it could have been sold.", - "items": { - "$ref": "#/definitions/Device_UdiCarrier" - }, - "type": "array" - }, - "status": { - "description": "Status of the Device availability.", - "enum": [ - "active", - "inactive", - "entered-in-error", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "Reason for the dtatus of the Device availability.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "distinctIdentifier": { - "description": "The distinct identification string as required by regulation for a human cell, tissue, or cellular and tissue-based product.", - "$ref": "#/definitions/string" - }, - "_distinctIdentifier": { - "description": "Extensions for distinctIdentifier", - "$ref": "#/definitions/Element" - }, - "manufacturer": { - "description": "A name of the manufacturer.", - "$ref": "#/definitions/string" - }, - "_manufacturer": { - "description": "Extensions for manufacturer", - "$ref": "#/definitions/Element" - }, - "manufactureDate": { - "description": "The date and time when the device was manufactured.", - "$ref": "#/definitions/dateTime" - }, - "_manufactureDate": { - "description": "Extensions for manufactureDate", - "$ref": "#/definitions/Element" - }, - "expirationDate": { - "description": "The date and time beyond which this device is no longer valid or should not be used (if applicable).", - "$ref": "#/definitions/dateTime" - }, - "_expirationDate": { - "description": "Extensions for expirationDate", - "$ref": "#/definitions/Element" - }, - "lotNumber": { - "description": "Lot number assigned by the manufacturer.", - "$ref": "#/definitions/string" - }, - "_lotNumber": { - "description": "Extensions for lotNumber", - "$ref": "#/definitions/Element" - }, - "serialNumber": { - "description": "The serial number assigned by the organization when the device was manufactured.", - "$ref": "#/definitions/string" - }, - "_serialNumber": { - "description": "Extensions for serialNumber", - "$ref": "#/definitions/Element" - }, - "deviceName": { - "description": "This represents the manufacturer\u0027s name of the device as provided by the device, from a UDI label, or by a person describing the Device. This typically would be used when a person provides the name(s) or when the device represents one of the names available from DeviceDefinition.", - "items": { - "$ref": "#/definitions/Device_DeviceName" - }, - "type": "array" - }, - "modelNumber": { - "description": "The model number for the device.", - "$ref": "#/definitions/string" - }, - "_modelNumber": { - "description": "Extensions for modelNumber", - "$ref": "#/definitions/Element" - }, - "partNumber": { - "description": "The part number of the device.", - "$ref": "#/definitions/string" - }, - "_partNumber": { - "description": "Extensions for partNumber", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The kind or type of device.", - "$ref": "#/definitions/CodeableConcept" - }, - "specialization": { - "description": "The capabilities supported on a device, the standards to which the device conforms for a particular purpose, and used for the communication.", - "items": { - "$ref": "#/definitions/Device_Specialization" - }, - "type": "array" - }, - "version": { - "description": "The actual design of the device or software version running on the device.", - "items": { - "$ref": "#/definitions/Device_Version" - }, - "type": "array" - }, - "property": { - "description": "The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties.", - "items": { - "$ref": "#/definitions/Device_Property" - }, - "type": "array" - }, - "patient": { - "description": "Patient information, If the device is affixed to a person.", - "$ref": "#/definitions/Reference" - }, - "owner": { - "description": "An organization that is responsible for the provision and ongoing maintenance of the device.", - "$ref": "#/definitions/Reference" - }, - "contact": { - "description": "Contact details for an organization or a particular human that is responsible for the device.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "location": { - "description": "The place where the device can be found.", - "$ref": "#/definitions/Reference" - }, - "url": { - "description": "A network address on which the device may be contacted directly.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "note": { - "description": "Descriptive information, usage information or implantation information that is not captured in an existing element.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "safety": { - "description": "Provides additional safety characteristics about a medical device. For example devices containing latex.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "parent": { - "description": "The parent device.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Device_UdiCarrier": { - "description": "A type of a manufactured item that is used in the provision of healthcare without being substantially changed through that activity. The device may be a medical or non-medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "deviceIdentifier": { - "description": "The device identifier (DI) is a mandatory, fixed portion of a UDI that identifies the labeler and the specific version or model of a device.", - "$ref": "#/definitions/string" - }, - "_deviceIdentifier": { - "description": "Extensions for deviceIdentifier", - "$ref": "#/definitions/Element" - }, - "issuer": { - "description": "Organization that is charged with issuing UDIs for devices. For example, the US FDA issuers include :\n1) GS1: \nhttp://hl7.org/fhir/NamingSystem/gs1-di, \n2) HIBCC:\nhttp://hl7.org/fhir/NamingSystem/hibcc-dI, \n3) ICCBBA for blood containers:\nhttp://hl7.org/fhir/NamingSystem/iccbba-blood-di, \n4) ICCBA for other devices:\nhttp://hl7.org/fhir/NamingSystem/iccbba-other-di.", - "$ref": "#/definitions/uri" - }, - "_issuer": { - "description": "Extensions for issuer", - "$ref": "#/definitions/Element" - }, - "jurisdiction": { - "description": "The identity of the authoritative source for UDI generation within a jurisdiction. All UDIs are globally unique within a single namespace with the appropriate repository uri as the system. For example, UDIs of devices managed in the U.S. by the FDA, the value is http://hl7.org/fhir/NamingSystem/fda-udi.", - "$ref": "#/definitions/uri" - }, - "_jurisdiction": { - "description": "Extensions for jurisdiction", - "$ref": "#/definitions/Element" - }, - "carrierAIDC": { - "description": "The full UDI carrier of the Automatic Identification and Data Capture (AIDC) technology representation of the barcode string as printed on the packaging of the device - e.g., a barcode or RFID. Because of limitations on character sets in XML and the need to round-trip JSON data through XML, AIDC Formats *SHALL* be base64 encoded.", - "$ref": "#/definitions/base64Binary" - }, - "_carrierAIDC": { - "description": "Extensions for carrierAIDC", - "$ref": "#/definitions/Element" - }, - "carrierHRF": { - "description": "The full UDI carrier as the human readable form (HRF) representation of the barcode string as printed on the packaging of the device.", - "$ref": "#/definitions/string" - }, - "_carrierHRF": { - "description": "Extensions for carrierHRF", - "$ref": "#/definitions/Element" - }, - "entryType": { - "description": "A coded entry to indicate how the data was entered.", - "enum": [ - "barcode", - "rfid", - "manual", - "card", - "self-reported", - "unknown" - ] - }, - "_entryType": { - "description": "Extensions for entryType", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Device_DeviceName": { - "description": "A type of a manufactured item that is used in the provision of healthcare without being substantially changed through that activity. The device may be a medical or non-medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The name of the device.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type of deviceName.\nUDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.", - "enum": [ - "udi-label-name", - "user-friendly-name", - "patient-reported-name", - "manufacturer-name", - "model-name", - "other" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Device_Specialization": { - "description": "A type of a manufactured item that is used in the provision of healthcare without being substantially changed through that activity. The device may be a medical or non-medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "systemType": { - "description": "The standard that is used to operate and communicate.", - "$ref": "#/definitions/CodeableConcept" - }, - "version": { - "description": "The version of the standard that is used to operate and communicate.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "systemType" - ] - }, - "Device_Version": { - "description": "A type of a manufactured item that is used in the provision of healthcare without being substantially changed through that activity. The device may be a medical or non-medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of the device version.", - "$ref": "#/definitions/CodeableConcept" - }, - "component": { - "description": "A single component of the device version.", - "$ref": "#/definitions/Identifier" - }, - "value": { - "description": "The version text.", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Device_Property": { - "description": "A type of a manufactured item that is used in the provision of healthcare without being substantially changed through that activity. The device may be a medical or non-medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Code that specifies the property DeviceDefinitionPropetyCode (Extensible).", - "$ref": "#/definitions/CodeableConcept" - }, - "valueQuantity": { - "description": "Property value as a quantity.", - "items": { - "$ref": "#/definitions/Quantity" - }, - "type": "array" - }, - "valueCode": { - "description": "Property value as a code, e.g., NTP4 (synced to NTP).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "DeviceDefinition": { - "description": "The characteristics, operational status and capabilities of a medical-related component of a medical device.", - "properties": { - "resourceType": { - "description": "This is a DeviceDefinition resource", - "const": "DeviceDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique instance identifiers assigned to a device by the software, manufacturers, other organizations or owners. For example: handle ID.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "udiDeviceIdentifier": { - "description": "Unique device identifier (UDI) assigned to device label or package. Note that the Device may include multiple udiCarriers as it either may include just the udiCarrier for the jurisdiction it is sold, or for multiple jurisdictions it could have been sold.", - "items": { - "$ref": "#/definitions/DeviceDefinition_UdiDeviceIdentifier" - }, - "type": "array" - }, - "manufacturerString": { - "description": "A name of the manufacturer.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_manufacturerString": { - "description": "Extensions for manufacturerString", - "$ref": "#/definitions/Element" - }, - "manufacturerReference": { - "description": "A name of the manufacturer.", - "$ref": "#/definitions/Reference" - }, - "deviceName": { - "description": "A name given to the device to identify it.", - "items": { - "$ref": "#/definitions/DeviceDefinition_DeviceName" - }, - "type": "array" - }, - "modelNumber": { - "description": "The model number for the device.", - "$ref": "#/definitions/string" - }, - "_modelNumber": { - "description": "Extensions for modelNumber", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "What kind of device or device system this is.", - "$ref": "#/definitions/CodeableConcept" - }, - "specialization": { - "description": "The capabilities supported on a device, the standards to which the device conforms for a particular purpose, and used for the communication.", - "items": { - "$ref": "#/definitions/DeviceDefinition_Specialization" - }, - "type": "array" - }, - "version": { - "description": "The available versions of the device, e.g., software versions.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_version": { - "description": "Extensions for version", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "safety": { - "description": "Safety characteristics of the device.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "shelfLifeStorage": { - "description": "Shelf Life and storage information.", - "items": { - "$ref": "#/definitions/ProductShelfLife" - }, - "type": "array" - }, - "physicalCharacteristics": { - "description": "Dimensions, color etc.", - "$ref": "#/definitions/ProdCharacteristic" - }, - "languageCode": { - "description": "Language code for the human-readable text strings produced by the device (all supported).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "capability": { - "description": "Device capabilities.", - "items": { - "$ref": "#/definitions/DeviceDefinition_Capability" - }, - "type": "array" - }, - "property": { - "description": "The actual configuration settings of a device as it actually operates, e.g., regulation status, time properties.", - "items": { - "$ref": "#/definitions/DeviceDefinition_Property" - }, - "type": "array" - }, - "owner": { - "description": "An organization that is responsible for the provision and ongoing maintenance of the device.", - "$ref": "#/definitions/Reference" - }, - "contact": { - "description": "Contact details for an organization or a particular human that is responsible for the device.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "url": { - "description": "A network address on which the device may be contacted directly.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "onlineInformation": { - "description": "Access to on-line information about the device.", - "$ref": "#/definitions/uri" - }, - "_onlineInformation": { - "description": "Extensions for onlineInformation", - "$ref": "#/definitions/Element" - }, - "note": { - "description": "Descriptive information, usage information or implantation information that is not captured in an existing element.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "quantity": { - "description": "The quantity of the device present in the packaging (e.g. the number of devices present in a pack, or the number of devices in the same package of the medicinal product).", - "$ref": "#/definitions/Quantity" - }, - "parentDevice": { - "description": "The parent device it can be part of.", - "$ref": "#/definitions/Reference" - }, - "material": { - "description": "A substance used to create the material(s) of which the device is made.", - "items": { - "$ref": "#/definitions/DeviceDefinition_Material" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "DeviceDefinition_UdiDeviceIdentifier": { - "description": "The characteristics, operational status and capabilities of a medical-related component of a medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "deviceIdentifier": { - "description": "The identifier that is to be associated with every Device that references this DeviceDefintiion for the issuer and jurisdication porvided in the DeviceDefinition.udiDeviceIdentifier.", - "$ref": "#/definitions/string" - }, - "_deviceIdentifier": { - "description": "Extensions for deviceIdentifier", - "$ref": "#/definitions/Element" - }, - "issuer": { - "description": "The organization that assigns the identifier algorithm.", - "$ref": "#/definitions/uri" - }, - "_issuer": { - "description": "Extensions for issuer", - "$ref": "#/definitions/Element" - }, - "jurisdiction": { - "description": "The jurisdiction to which the deviceIdentifier applies.", - "$ref": "#/definitions/uri" - }, - "_jurisdiction": { - "description": "Extensions for jurisdiction", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "DeviceDefinition_DeviceName": { - "description": "The characteristics, operational status and capabilities of a medical-related component of a medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The name of the device.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type of deviceName.\nUDILabelName | UserFriendlyName | PatientReportedName | ManufactureDeviceName | ModelName.", - "enum": [ - "udi-label-name", - "user-friendly-name", - "patient-reported-name", - "manufacturer-name", - "model-name", - "other" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "DeviceDefinition_Specialization": { - "description": "The characteristics, operational status and capabilities of a medical-related component of a medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "systemType": { - "description": "The standard that is used to operate and communicate.", - "$ref": "#/definitions/string" - }, - "_systemType": { - "description": "Extensions for systemType", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The version of the standard that is used to operate and communicate.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "DeviceDefinition_Capability": { - "description": "The characteristics, operational status and capabilities of a medical-related component of a medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of capability.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "Description of capability.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "DeviceDefinition_Property": { - "description": "The characteristics, operational status and capabilities of a medical-related component of a medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Code that specifies the property DeviceDefinitionPropetyCode (Extensible).", - "$ref": "#/definitions/CodeableConcept" - }, - "valueQuantity": { - "description": "Property value as a quantity.", - "items": { - "$ref": "#/definitions/Quantity" - }, - "type": "array" - }, - "valueCode": { - "description": "Property value as a code, e.g., NTP4 (synced to NTP).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "DeviceDefinition_Material": { - "description": "The characteristics, operational status and capabilities of a medical-related component of a medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "substance": { - "description": "The substance.", - "$ref": "#/definitions/CodeableConcept" - }, - "alternate": { - "description": "Indicates an alternative material of the device.", - "$ref": "#/definitions/boolean" - }, - "_alternate": { - "description": "Extensions for alternate", - "$ref": "#/definitions/Element" - }, - "allergenicIndicator": { - "description": "Whether the substance is a known or suspected allergen.", - "$ref": "#/definitions/boolean" - }, - "_allergenicIndicator": { - "description": "Extensions for allergenicIndicator", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "substance" - ] - }, - "DeviceMetric": { - "description": "Describes a measurement, calculation or setting capability of a medical device.", - "properties": { - "resourceType": { - "description": "This is a DeviceMetric resource", - "const": "DeviceMetric" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique instance identifiers assigned to a device by the device or gateway software, manufacturers, other organizations or owners. For example: handle ID.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "type": { - "description": "Describes the type of the metric. For example: Heart Rate, PEEP Setting, etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "unit": { - "description": "Describes the unit that an observed value determined for this metric will have. For example: Percent, Seconds, etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "source": { - "description": "Describes the link to the Device that this DeviceMetric belongs to and that contains administrative device information such as manufacturer, serial number, etc.", - "$ref": "#/definitions/Reference" - }, - "parent": { - "description": "Describes the link to the Device that this DeviceMetric belongs to and that provide information about the location of this DeviceMetric in the containment structure of the parent Device. An example would be a Device that represents a Channel. This reference can be used by a client application to distinguish DeviceMetrics that have the same type, but should be interpreted based on their containment location.", - "$ref": "#/definitions/Reference" - }, - "operationalStatus": { - "description": "Indicates current operational state of the device. For example: On, Off, Standby, etc.", - "enum": [ - "on", - "off", - "standby", - "entered-in-error" - ] - }, - "_operationalStatus": { - "description": "Extensions for operationalStatus", - "$ref": "#/definitions/Element" - }, - "color": { - "description": "Describes the color representation for the metric. This is often used to aid clinicians to track and identify parameter types by color. In practice, consider a Patient Monitor that has ECG/HR and Pleth for example; the parameters are displayed in different characteristic colors, such as HR-blue, BP-green, and PR and SpO2- magenta.", - "enum": [ - "black", - "red", - "green", - "yellow", - "blue", - "magenta", - "cyan", - "white" - ] - }, - "_color": { - "description": "Extensions for color", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "Indicates the category of the observation generation process. A DeviceMetric can be for example a setting, measurement, or calculation.", - "enum": [ - "measurement", - "setting", - "calculation", - "unspecified" - ] - }, - "_category": { - "description": "Extensions for category", - "$ref": "#/definitions/Element" - }, - "measurementPeriod": { - "description": "Describes the measurement repetition time. This is not necessarily the same as the update period. The measurement repetition time can range from milliseconds up to hours. An example for a measurement repetition time in the range of milliseconds is the sampling rate of an ECG. An example for a measurement repetition time in the range of hours is a NIBP that is triggered automatically every hour. The update period may be different than the measurement repetition time, if the device does not update the published observed value with the same frequency as it was measured.", - "$ref": "#/definitions/Timing" - }, - "calibration": { - "description": "Describes the calibrations that have been performed or that are required to be performed.", - "items": { - "$ref": "#/definitions/DeviceMetric_Calibration" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "type", - "resourceType" - ] - }, - "DeviceMetric_Calibration": { - "description": "Describes a measurement, calculation or setting capability of a medical device.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Describes the type of the calibration method.", - "enum": [ - "unspecified", - "offset", - "gain", - "two-point" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "state": { - "description": "Describes the state of the calibration.", - "enum": [ - "not-calibrated", - "calibration-required", - "calibrated", - "unspecified" - ] - }, - "_state": { - "description": "Extensions for state", - "$ref": "#/definitions/Element" - }, - "time": { - "description": "Describes the time last calibration has been performed.", - "$ref": "#/definitions/instant" - }, - "_time": { - "description": "Extensions for time", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "DeviceRequest": { - "description": "Represents a request for a patient to employ a medical device. The device may be an implantable device, or an external assistive device, such as a walker.", - "properties": { - "resourceType": { - "description": "This is a DeviceRequest resource", - "const": "DeviceRequest" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers assigned to this order by the orderer or by the receiver.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "instantiatesCanonical": { - "description": "The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this DeviceRequest.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "instantiatesUri": { - "description": "The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this DeviceRequest.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "basedOn": { - "description": "Plan/proposal/order fulfilled by this request.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "priorRequest": { - "description": "The request takes the place of the referenced completed or terminated request(s).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "groupIdentifier": { - "description": "Composite request this is part of.", - "$ref": "#/definitions/Identifier" - }, - "status": { - "description": "The status of the request.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "intent": { - "description": "Whether the request is a proposal, plan, an original order or a reflex order.", - "$ref": "#/definitions/code" - }, - "_intent": { - "description": "Extensions for intent", - "$ref": "#/definitions/Element" - }, - "priority": { - "description": "Indicates how quickly the {{title}} should be addressed with respect to other requests.", - "$ref": "#/definitions/code" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "codeReference": { - "description": "The details of the device to be used.", - "$ref": "#/definitions/Reference" - }, - "codeCodeableConcept": { - "description": "The details of the device to be used.", - "$ref": "#/definitions/CodeableConcept" - }, - "parameter": { - "description": "Specific parameters for the ordered item. For example, the prism value for lenses.", - "items": { - "$ref": "#/definitions/DeviceRequest_Parameter" - }, - "type": "array" - }, - "subject": { - "description": "The patient who will use the device.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "An encounter that provides additional context in which this request is made.", - "$ref": "#/definitions/Reference" - }, - "occurrenceDateTime": { - "description": "The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. \"Every 8 hours\"; \"Three times a day\"; \"1/2 an hour before breakfast for 10 days from 23-Dec 2011:\"; \"15 Oct 2013, 17 Oct 2013 and 1 Nov 2013\".", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_occurrenceDateTime": { - "description": "Extensions for occurrenceDateTime", - "$ref": "#/definitions/Element" - }, - "occurrencePeriod": { - "description": "The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. \"Every 8 hours\"; \"Three times a day\"; \"1/2 an hour before breakfast for 10 days from 23-Dec 2011:\"; \"15 Oct 2013, 17 Oct 2013 and 1 Nov 2013\".", - "$ref": "#/definitions/Period" - }, - "occurrenceTiming": { - "description": "The timing schedule for the use of the device. The Schedule data type allows many different expressions, for example. \"Every 8 hours\"; \"Three times a day\"; \"1/2 an hour before breakfast for 10 days from 23-Dec 2011:\"; \"15 Oct 2013, 17 Oct 2013 and 1 Nov 2013\".", - "$ref": "#/definitions/Timing" - }, - "authoredOn": { - "description": "When the request transitioned to being actionable.", - "$ref": "#/definitions/dateTime" - }, - "_authoredOn": { - "description": "Extensions for authoredOn", - "$ref": "#/definitions/Element" - }, - "requester": { - "description": "The individual who initiated the request and has responsibility for its activation.", - "$ref": "#/definitions/Reference" - }, - "performerType": { - "description": "Desired type of performer for doing the diagnostic testing.", - "$ref": "#/definitions/CodeableConcept" - }, - "performer": { - "description": "The desired performer for doing the diagnostic testing.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "Reason or justification for the use of this device.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Reason or justification for the use of this device.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "insurance": { - "description": "Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be required for delivering the requested service.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "supportingInfo": { - "description": "Additional clinical information about the patient that may influence the request fulfilment. For example, this may include where on the subject\u0027s body the device will be used (i.e. the target site).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Details about this request that were not represented at all or sufficiently in one of the attributes provided in a class. These may include for example a comment, an instruction, or a note associated with the statement.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "relevantHistory": { - "description": "Key events in the history of the request.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "DeviceRequest_Parameter": { - "description": "Represents a request for a patient to employ a medical device. The device may be an implantable device, or an external assistive device, such as a walker.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A code or string that identifies the device detail being asserted.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueCodeableConcept": { - "description": "The value of the device detail.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueQuantity": { - "description": "The value of the device detail.", - "$ref": "#/definitions/Quantity" - }, - "valueRange": { - "description": "The value of the device detail.", - "$ref": "#/definitions/Range" - }, - "valueBoolean": { - "description": "The value of the device detail.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "DeviceUseStatement": { - "description": "A record of a device being used by a patient where the record is the result of a report from the patient or another clinician.", - "properties": { - "resourceType": { - "description": "This is a DeviceUseStatement resource", - "const": "DeviceUseStatement" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "An external identifier for this statement such as an IRI.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "basedOn": { - "description": "A plan, proposal or order that is fulfilled in whole or in part by this DeviceUseStatement.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "A code representing the patient or other source\u0027s judgment about the state of the device used that this statement is about. Generally this will be active or completed.", - "enum": [ - "active", - "completed", - "entered-in-error", - "intended", - "stopped", - "on-hold" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "subject": { - "description": "The patient who used the device.", - "$ref": "#/definitions/Reference" - }, - "derivedFrom": { - "description": "Allows linking the DeviceUseStatement to the underlying Request, or to other information that supports or is used to derive the DeviceUseStatement.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "timingTiming": { - "description": "How often the device was used.", - "$ref": "#/definitions/Timing" - }, - "timingPeriod": { - "description": "How often the device was used.", - "$ref": "#/definitions/Period" - }, - "timingDateTime": { - "description": "How often the device was used.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_timingDateTime": { - "description": "Extensions for timingDateTime", - "$ref": "#/definitions/Element" - }, - "recordedOn": { - "description": "The time at which the statement was made/recorded.", - "$ref": "#/definitions/dateTime" - }, - "_recordedOn": { - "description": "Extensions for recordedOn", - "$ref": "#/definitions/Element" - }, - "source": { - "description": "Who reported the device was being used by the patient.", - "$ref": "#/definitions/Reference" - }, - "device": { - "description": "The details of the device used.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "Reason or justification for the use of the device.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Indicates another resource whose existence justifies this DeviceUseStatement.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "bodySite": { - "description": "Indicates the anotomic location on the subject\u0027s body where the device was used ( i.e. the target).", - "$ref": "#/definitions/CodeableConcept" - }, - "note": { - "description": "Details about the device statement that were not represented at all or sufficiently in one of the attributes provided in a class. These may include for example a comment, an instruction, or a note associated with the statement.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "device", - "resourceType" - ] - }, - "DiagnosticReport": { - "description": "The findings and interpretation of diagnostic tests performed on patients, groups of patients, devices, and locations, and/or specimens derived from these. The report includes clinical context such as requesting and provider information, and some mix of atomic results, images, textual and coded interpretations, and formatted representation of diagnostic reports.", - "properties": { - "resourceType": { - "description": "This is a DiagnosticReport resource", - "const": "DiagnosticReport" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers assigned to this report by the performer or other systems.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "basedOn": { - "description": "Details concerning a service requested.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "The status of the diagnostic report.", - "enum": [ - "registered", - "partial", - "preliminary", - "final", - "amended", - "corrected", - "appended", - "cancelled", - "entered-in-error", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "A code that classifies the clinical discipline, department or diagnostic service that created the report (e.g. cardiology, biochemistry, hematology, MRI). This is used for searching, sorting and display purposes.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "code": { - "description": "A code or name that describes this diagnostic report.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "The subject of the report. Usually, but not always, this is a patient. However, diagnostic services also perform analyses on specimens collected from a variety of other sources.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The healthcare event (e.g. a patient and healthcare provider interaction) which this DiagnosticReport is about.", - "$ref": "#/definitions/Reference" - }, - "effectiveDateTime": { - "description": "The time or time-period the observed values are related to. When the subject of the report is a patient, this is usually either the time of the procedure or of specimen collection(s), but very often the source of the date/time is not known, only the date/time itself.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_effectiveDateTime": { - "description": "Extensions for effectiveDateTime", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The time or time-period the observed values are related to. When the subject of the report is a patient, this is usually either the time of the procedure or of specimen collection(s), but very often the source of the date/time is not known, only the date/time itself.", - "$ref": "#/definitions/Period" - }, - "issued": { - "description": "The date and time that this version of the report was made available to providers, typically after the report was reviewed and verified.", - "$ref": "#/definitions/instant" - }, - "_issued": { - "description": "Extensions for issued", - "$ref": "#/definitions/Element" - }, - "performer": { - "description": "The diagnostic service that is responsible for issuing the report.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "resultsInterpreter": { - "description": "The practitioner or organization that is responsible for the report\u0027s conclusions and interpretations.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "specimen": { - "description": "Details about the specimens on which this diagnostic report is based.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "result": { - "description": "[Observations](observation.html) that are part of this diagnostic report.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "imagingStudy": { - "description": "One or more links to full details of any imaging performed during the diagnostic investigation. Typically, this is imaging performed by DICOM enabled modalities, but this is not required. A fully enabled PACS viewer can use this information to provide views of the source images.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "media": { - "description": "A list of key images associated with this report. The images are generally created during the diagnostic process, and may be directly of the patient, or of treated specimens (i.e. slides of interest).", - "items": { - "$ref": "#/definitions/DiagnosticReport_Media" - }, - "type": "array" - }, - "conclusion": { - "description": "Concise and clinically contextualized summary conclusion (interpretation/impression) of the diagnostic report.", - "$ref": "#/definitions/string" - }, - "_conclusion": { - "description": "Extensions for conclusion", - "$ref": "#/definitions/Element" - }, - "conclusionCode": { - "description": "One or more codes that represent the summary conclusion (interpretation/impression) of the diagnostic report.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "presentedForm": { - "description": "Rich text representation of the entire result as issued by the diagnostic service. Multiple formats are allowed but they SHALL be semantically equivalent.", - "items": { - "$ref": "#/definitions/Attachment" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "code", - "resourceType" - ] - }, - "DiagnosticReport_Media": { - "description": "The findings and interpretation of diagnostic tests performed on patients, groups of patients, devices, and locations, and/or specimens derived from these. The report includes clinical context such as requesting and provider information, and some mix of atomic results, images, textual and coded interpretations, and formatted representation of diagnostic reports.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "comment": { - "description": "A comment about the image. Typically, this is used to provide an explanation for why the image is included, or to draw the viewer\u0027s attention to important features.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - }, - "link": { - "description": "Reference to the image source.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "link" - ] - }, - "DocumentManifest": { - "description": "A collection of documents compiled for a purpose together with metadata that applies to the collection.", - "properties": { - "resourceType": { - "description": "This is a DocumentManifest resource", - "const": "DocumentManifest" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "masterIdentifier": { - "description": "A single identifier that uniquely identifies this manifest. Principally used to refer to the manifest in non-FHIR contexts.", - "$ref": "#/definitions/Identifier" - }, - "identifier": { - "description": "Other identifiers associated with the document manifest, including version independent identifiers.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of this document manifest.", - "enum": [ - "current", - "superseded", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The code specifying the type of clinical activity that resulted in placing the associated content into the DocumentManifest.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "Who or what the set of documents is about. The documents can be about a person, (patient or healthcare practitioner), a device (i.e. machine) or even a group of subjects (such as a document about a herd of farm animals, or a set of patients that share a common exposure). If the documents cross more than one subject, then more than one subject is allowed here (unusual use case).", - "$ref": "#/definitions/Reference" - }, - "created": { - "description": "When the document manifest was created for submission to the server (not necessarily the same thing as the actual resource last modified time, since it may be modified, replicated, etc.).", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "author": { - "description": "Identifies who is the author of the manifest. Manifest author is not necessarly the author of the references included.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "recipient": { - "description": "A patient, practitioner, or organization for which this set of documents is intended.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "source": { - "description": "Identifies the source system, application, or software that produced the document manifest.", - "$ref": "#/definitions/uri" - }, - "_source": { - "description": "Extensions for source", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "Human-readable description of the source document. This is sometimes known as the \"title\".", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "content": { - "description": "The list of Resources that consist of the parts of this manifest.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "related": { - "description": "Related identifiers or resources associated with the DocumentManifest.", - "items": { - "$ref": "#/definitions/DocumentManifest_Related" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "content", - "resourceType" - ] - }, - "DocumentManifest_Related": { - "description": "A collection of documents compiled for a purpose together with metadata that applies to the collection.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Related identifier to this DocumentManifest. For example, Order numbers, accession numbers, XDW workflow numbers.", - "$ref": "#/definitions/Identifier" - }, - "ref": { - "description": "Related Resource to this DocumentManifest. For example, Order, ServiceRequest, Procedure, EligibilityRequest, etc.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "DocumentReference": { - "description": "A reference to a document of any kind for any purpose. Provides metadata about the document so that the document can be discovered and managed. The scope of a document is any seralized object with a mime-type, so includes formal patient centric documents (CDA), cliical notes, scanned paper, and non-patient specific documents like policy text.", - "properties": { - "resourceType": { - "description": "This is a DocumentReference resource", - "const": "DocumentReference" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "masterIdentifier": { - "description": "Document identifier as assigned by the source of the document. This identifier is specific to this version of the document. This unique identifier may be used elsewhere to identify this version of the document.", - "$ref": "#/definitions/Identifier" - }, - "identifier": { - "description": "Other identifiers associated with the document, including version independent identifiers.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of this document reference.", - "enum": [ - "current", - "superseded", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "docStatus": { - "description": "The status of the underlying document.", - "$ref": "#/definitions/code" - }, - "_docStatus": { - "description": "Extensions for docStatus", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Specifies the particular kind of document referenced (e.g. History and Physical, Discharge Summary, Progress Note). This usually equates to the purpose of making the document referenced.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "A categorization for the type of document referenced - helps for indexing and searching. This may be implied by or derived from the code specified in the DocumentReference.type.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "subject": { - "description": "Who or what the document is about. The document can be about a person, (patient or healthcare practitioner), a device (e.g. a machine) or even a group of subjects (such as a document about a herd of farm animals, or a set of patients that share a common exposure).", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "When the document reference was created.", - "$ref": "#/definitions/instant" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "author": { - "description": "Identifies who is responsible for adding the information to the document.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "authenticator": { - "description": "Which person or organization authenticates that this document is valid.", - "$ref": "#/definitions/Reference" - }, - "custodian": { - "description": "Identifies the organization or group who is responsible for ongoing maintenance of and access to the document.", - "$ref": "#/definitions/Reference" - }, - "relatesTo": { - "description": "Relationships that this document has with other document references that already exist.", - "items": { - "$ref": "#/definitions/DocumentReference_RelatesTo" - }, - "type": "array" - }, - "description": { - "description": "Human-readable description of the source document.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "securityLabel": { - "description": "A set of Security-Tag codes specifying the level of privacy/security of the Document. Note that DocumentReference.meta.security contains the security labels of the \"reference\" to the document, while DocumentReference.securityLabel contains a snapshot of the security labels on the document the reference refers to.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "content": { - "description": "The document and format referenced. There may be multiple content element repetitions, each with a different format.", - "items": { - "$ref": "#/definitions/DocumentReference_Content" - }, - "type": "array" - }, - "context": { - "description": "The clinical context in which the document was prepared.", - "$ref": "#/definitions/DocumentReference_Context" - } - }, - "additionalProperties": false, - "required": [ - "content", - "resourceType" - ] - }, - "DocumentReference_RelatesTo": { - "description": "A reference to a document of any kind for any purpose. Provides metadata about the document so that the document can be discovered and managed. The scope of a document is any seralized object with a mime-type, so includes formal patient centric documents (CDA), cliical notes, scanned paper, and non-patient specific documents like policy text.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The type of relationship that this document has with anther document.", - "enum": [ - "replaces", - "transforms", - "signs", - "appends" - ] - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "target": { - "description": "The target document of this relationship.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "target" - ] - }, - "DocumentReference_Content": { - "description": "A reference to a document of any kind for any purpose. Provides metadata about the document so that the document can be discovered and managed. The scope of a document is any seralized object with a mime-type, so includes formal patient centric documents (CDA), cliical notes, scanned paper, and non-patient specific documents like policy text.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "attachment": { - "description": "The document or URL of the document along with critical metadata to prove content has integrity.", - "$ref": "#/definitions/Attachment" - }, - "format": { - "description": "An identifier of the document encoding, structure, and template that the document conforms to beyond the base format indicated in the mimeType.", - "$ref": "#/definitions/Coding" - } - }, - "additionalProperties": false, - "required": [ - "attachment" - ] - }, - "DocumentReference_Context": { - "description": "A reference to a document of any kind for any purpose. Provides metadata about the document so that the document can be discovered and managed. The scope of a document is any seralized object with a mime-type, so includes formal patient centric documents (CDA), cliical notes, scanned paper, and non-patient specific documents like policy text.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "encounter": { - "description": "Describes the clinical encounter or type of care that the document content is associated with.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "event": { - "description": "This list of codes represents the main clinical acts, such as a colonoscopy or an appendectomy, being documented. In some cases, the event is inherent in the type Code, such as a \"History and Physical Report\" in which the procedure being documented is necessarily a \"History and Physical\" act.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "period": { - "description": "The time period over which the service that is described by the document was provided.", - "$ref": "#/definitions/Period" - }, - "facilityType": { - "description": "The kind of facility where the patient was seen.", - "$ref": "#/definitions/CodeableConcept" - }, - "practiceSetting": { - "description": "This property may convey specifics about the practice setting where the content was created, often reflecting the clinical specialty.", - "$ref": "#/definitions/CodeableConcept" - }, - "sourcePatientInfo": { - "description": "The Patient Information as known when the document was published. May be a reference to a version specific, or contained.", - "$ref": "#/definitions/Reference" - }, - "related": { - "description": "Related identifiers or resources associated with the DocumentReference.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "EffectEvidenceSynthesis": { - "description": "The EffectEvidenceSynthesis resource describes the difference in an outcome between exposures states in a population where the effect estimate is derived from a combination of research studies.", - "properties": { - "resourceType": { - "description": "This is a EffectEvidenceSynthesis resource", - "const": "EffectEvidenceSynthesis" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this effect evidence synthesis when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this effect evidence synthesis is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the effect evidence synthesis is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this effect evidence synthesis when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the effect evidence synthesis when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the effect evidence synthesis author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the effect evidence synthesis. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the effect evidence synthesis.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this effect evidence synthesis. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the effect evidence synthesis was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the effect evidence synthesis changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the effect evidence synthesis.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the effect evidence synthesis from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "note": { - "description": "A human-readable string to clarify or explain concepts about the resource.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate effect evidence synthesis instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the effect evidence synthesis is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "copyright": { - "description": "A copyright statement relating to the effect evidence synthesis and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the effect evidence synthesis.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the effect evidence synthesis content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "topic": { - "description": "Descriptive topics related to the content of the EffectEvidenceSynthesis. Topics provide a high-level categorization grouping types of EffectEvidenceSynthesiss that can be useful for filtering and searching.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "author": { - "description": "An individiual or organization primarily involved in the creation and maintenance of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "editor": { - "description": "An individual or organization primarily responsible for internal coherence of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "reviewer": { - "description": "An individual or organization primarily responsible for review of some aspect of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "endorser": { - "description": "An individual or organization responsible for officially endorsing the content for use in some setting.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Related artifacts such as additional documentation, justification, or bibliographic references.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "synthesisType": { - "description": "Type of synthesis eg meta-analysis.", - "$ref": "#/definitions/CodeableConcept" - }, - "studyType": { - "description": "Type of study eg randomized trial.", - "$ref": "#/definitions/CodeableConcept" - }, - "population": { - "description": "A reference to a EvidenceVariable resource that defines the population for the research.", - "$ref": "#/definitions/Reference" - }, - "exposure": { - "description": "A reference to a EvidenceVariable resource that defines the exposure for the research.", - "$ref": "#/definitions/Reference" - }, - "exposureAlternative": { - "description": "A reference to a EvidenceVariable resource that defines the comparison exposure for the research.", - "$ref": "#/definitions/Reference" - }, - "outcome": { - "description": "A reference to a EvidenceVariable resomece that defines the outcome for the research.", - "$ref": "#/definitions/Reference" - }, - "sampleSize": { - "description": "A description of the size of the sample involved in the synthesis.", - "$ref": "#/definitions/EffectEvidenceSynthesis_SampleSize" - }, - "resultsByExposure": { - "description": "A description of the results for each exposure considered in the effect estimate.", - "items": { - "$ref": "#/definitions/EffectEvidenceSynthesis_ResultsByExposure" - }, - "type": "array" - }, - "effectEstimate": { - "description": "The estimated effect of the exposure variant.", - "items": { - "$ref": "#/definitions/EffectEvidenceSynthesis_EffectEstimate" - }, - "type": "array" - }, - "certainty": { - "description": "A description of the certainty of the effect estimate.", - "items": { - "$ref": "#/definitions/EffectEvidenceSynthesis_Certainty" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "exposureAlternative", - "exposure", - "outcome", - "resourceType", - "population" - ] - }, - "EffectEvidenceSynthesis_SampleSize": { - "description": "The EffectEvidenceSynthesis resource describes the difference in an outcome between exposures states in a population where the effect estimate is derived from a combination of research studies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "Human-readable summary of sample size.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "numberOfStudies": { - "description": "Number of studies included in this evidence synthesis.", - "$ref": "#/definitions/integer" - }, - "_numberOfStudies": { - "description": "Extensions for numberOfStudies", - "$ref": "#/definitions/Element" - }, - "numberOfParticipants": { - "description": "Number of participants included in this evidence synthesis.", - "$ref": "#/definitions/integer" - }, - "_numberOfParticipants": { - "description": "Extensions for numberOfParticipants", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "EffectEvidenceSynthesis_ResultsByExposure": { - "description": "The EffectEvidenceSynthesis resource describes the difference in an outcome between exposures states in a population where the effect estimate is derived from a combination of research studies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "Human-readable summary of results by exposure state.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "exposureState": { - "description": "Whether these results are for the exposure state or alternative exposure state.", - "enum": [ - "exposure", - "exposure-alternative" - ] - }, - "_exposureState": { - "description": "Extensions for exposureState", - "$ref": "#/definitions/Element" - }, - "variantState": { - "description": "Used to define variant exposure states such as low-risk state.", - "$ref": "#/definitions/CodeableConcept" - }, - "riskEvidenceSynthesis": { - "description": "Reference to a RiskEvidenceSynthesis resource.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "riskEvidenceSynthesis" - ] - }, - "EffectEvidenceSynthesis_EffectEstimate": { - "description": "The EffectEvidenceSynthesis resource describes the difference in an outcome between exposures states in a population where the effect estimate is derived from a combination of research studies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "Human-readable summary of effect estimate.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Examples include relative risk and mean difference.", - "$ref": "#/definitions/CodeableConcept" - }, - "variantState": { - "description": "Used to define variant exposure states such as low-risk state.", - "$ref": "#/definitions/CodeableConcept" - }, - "value": { - "description": "The point estimate of the effect estimate.", - "$ref": "#/definitions/decimal" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "unitOfMeasure": { - "description": "Specifies the UCUM unit for the outcome.", - "$ref": "#/definitions/CodeableConcept" - }, - "precisionEstimate": { - "description": "A description of the precision of the estimate for the effect.", - "items": { - "$ref": "#/definitions/EffectEvidenceSynthesis_PrecisionEstimate" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "EffectEvidenceSynthesis_PrecisionEstimate": { - "description": "The EffectEvidenceSynthesis resource describes the difference in an outcome between exposures states in a population where the effect estimate is derived from a combination of research studies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Examples include confidence interval and interquartile range.", - "$ref": "#/definitions/CodeableConcept" - }, - "level": { - "description": "Use 95 for a 95% confidence interval.", - "$ref": "#/definitions/decimal" - }, - "_level": { - "description": "Extensions for level", - "$ref": "#/definitions/Element" - }, - "from": { - "description": "Lower bound of confidence interval.", - "$ref": "#/definitions/decimal" - }, - "_from": { - "description": "Extensions for from", - "$ref": "#/definitions/Element" - }, - "to": { - "description": "Upper bound of confidence interval.", - "$ref": "#/definitions/decimal" - }, - "_to": { - "description": "Extensions for to", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "EffectEvidenceSynthesis_Certainty": { - "description": "The EffectEvidenceSynthesis resource describes the difference in an outcome between exposures states in a population where the effect estimate is derived from a combination of research studies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "rating": { - "description": "A rating of the certainty of the effect estimate.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "note": { - "description": "A human-readable string to clarify or explain concepts about the resource.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "certaintySubcomponent": { - "description": "A description of a component of the overall certainty.", - "items": { - "$ref": "#/definitions/EffectEvidenceSynthesis_CertaintySubcomponent" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "EffectEvidenceSynthesis_CertaintySubcomponent": { - "description": "The EffectEvidenceSynthesis resource describes the difference in an outcome between exposures states in a population where the effect estimate is derived from a combination of research studies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of subcomponent of certainty rating.", - "$ref": "#/definitions/CodeableConcept" - }, - "rating": { - "description": "A rating of a subcomponent of rating certainty.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "note": { - "description": "A human-readable string to clarify or explain concepts about the resource.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Encounter": { - "description": "An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.", - "properties": { - "resourceType": { - "description": "This is a Encounter resource", - "const": "Encounter" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier(s) by which this encounter is known.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "planned | arrived | triaged | in-progress | onleave | finished | cancelled +.", - "enum": [ - "planned", - "arrived", - "triaged", - "in-progress", - "onleave", - "finished", - "cancelled", - "entered-in-error", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusHistory": { - "description": "The status history permits the encounter resource to contain the status history without needing to read through the historical versions of the resource, or even have the server store them.", - "items": { - "$ref": "#/definitions/Encounter_StatusHistory" - }, - "type": "array" - }, - "class": { - "description": "Concepts representing classification of patient encounter such as ambulatory (outpatient), inpatient, emergency, home health or others due to local variations.", - "$ref": "#/definitions/Coding" - }, - "classHistory": { - "description": "The class history permits the tracking of the encounters transitions without needing to go through the resource history. This would be used for a case where an admission starts of as an emergency encounter, then transitions into an inpatient scenario. Doing this and not restarting a new encounter ensures that any lab/diagnostic results can more easily follow the patient and not require re-processing and not get lost or cancelled during a kind of discharge from emergency to inpatient.", - "items": { - "$ref": "#/definitions/Encounter_ClassHistory" - }, - "type": "array" - }, - "type": { - "description": "Specific type of encounter (e.g. e-mail consultation, surgical day-care, skilled nursing, rehabilitation).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "serviceType": { - "description": "Broad categorization of the service that is to be provided (e.g. cardiology).", - "$ref": "#/definitions/CodeableConcept" - }, - "priority": { - "description": "Indicates the urgency of the encounter.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "The patient or group present at the encounter.", - "$ref": "#/definitions/Reference" - }, - "episodeOfCare": { - "description": "Where a specific encounter should be classified as a part of a specific episode(s) of care this field should be used. This association can facilitate grouping of related encounters together for a specific purpose, such as government reporting, issue tracking, association via a common problem. The association is recorded on the encounter as these are typically created after the episode of care and grouped on entry rather than editing the episode of care to append another encounter to it (the episode of care could span years).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "basedOn": { - "description": "The request this encounter satisfies (e.g. incoming referral or procedure request).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "participant": { - "description": "The list of people responsible for providing the service.", - "items": { - "$ref": "#/definitions/Encounter_Participant" - }, - "type": "array" - }, - "appointment": { - "description": "The appointment that scheduled this encounter.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "period": { - "description": "The start and end time of the encounter.", - "$ref": "#/definitions/Period" - }, - "length": { - "description": "Quantity of time the encounter lasted. This excludes the time during leaves of absence.", - "$ref": "#/definitions/Duration" - }, - "reasonCode": { - "description": "Reason the encounter takes place, expressed as a code. For admissions, this can be used for a coded admission diagnosis.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Reason the encounter takes place, expressed as a code. For admissions, this can be used for a coded admission diagnosis.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "diagnosis": { - "description": "The list of diagnosis relevant to this encounter.", - "items": { - "$ref": "#/definitions/Encounter_Diagnosis" - }, - "type": "array" - }, - "account": { - "description": "The set of accounts that may be used for billing for this Encounter.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "hospitalization": { - "description": "Details about the admission to a healthcare service.", - "$ref": "#/definitions/Encounter_Hospitalization" - }, - "location": { - "description": "List of locations where the patient has been during this encounter.", - "items": { - "$ref": "#/definitions/Encounter_Location" - }, - "type": "array" - }, - "serviceProvider": { - "description": "The organization that is primarily responsible for this Encounter\u0027s services. This MAY be the same as the organization on the Patient record, however it could be different, such as if the actor performing the services was from an external organization (which may be billed seperately) for an external consultation. Refer to the example bundle showing an abbreviated set of Encounters for a colonoscopy.", - "$ref": "#/definitions/Reference" - }, - "partOf": { - "description": "Another Encounter of which this encounter is a part of (administratively or in time).", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "class", - "resourceType" - ] - }, - "Encounter_StatusHistory": { - "description": "An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "status": { - "description": "planned | arrived | triaged | in-progress | onleave | finished | cancelled +.", - "enum": [ - "planned", - "arrived", - "triaged", - "in-progress", - "onleave", - "finished", - "cancelled", - "entered-in-error", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "The time that the episode was in the specified status.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false, - "required": [ - "period" - ] - }, - "Encounter_ClassHistory": { - "description": "An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "class": { - "description": "inpatient | outpatient | ambulatory | emergency +.", - "$ref": "#/definitions/Coding" - }, - "period": { - "description": "The time that the episode was in the specified class.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false, - "required": [ - "period", - "class" - ] - }, - "Encounter_Participant": { - "description": "An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Role of participant in encounter.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "period": { - "description": "The period of time that the specified participant participated in the encounter. These can overlap or be sub-sets of the overall encounter\u0027s period.", - "$ref": "#/definitions/Period" - }, - "individual": { - "description": "Persons involved in the encounter other than the patient.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "Encounter_Diagnosis": { - "description": "An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "condition": { - "description": "Reason the encounter takes place, as specified using information from another resource. For admissions, this is the admission diagnosis. The indication will typically be a Condition (with other resources referenced in the evidence.detail), or a Procedure.", - "$ref": "#/definitions/Reference" - }, - "use": { - "description": "Role that this diagnosis has within the encounter (e.g. admission, billing, discharge …).", - "$ref": "#/definitions/CodeableConcept" - }, - "rank": { - "description": "Ranking of the diagnosis (for each role type).", - "$ref": "#/definitions/positiveInt" - }, - "_rank": { - "description": "Extensions for rank", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "condition" - ] - }, - "Encounter_Hospitalization": { - "description": "An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "preAdmissionIdentifier": { - "description": "Pre-admission identifier.", - "$ref": "#/definitions/Identifier" - }, - "origin": { - "description": "The location/organization from which the patient came before admission.", - "$ref": "#/definitions/Reference" - }, - "admitSource": { - "description": "From where patient was admitted (physician referral, transfer).", - "$ref": "#/definitions/CodeableConcept" - }, - "reAdmission": { - "description": "Whether this hospitalization is a readmission and why if known.", - "$ref": "#/definitions/CodeableConcept" - }, - "dietPreference": { - "description": "Diet preferences reported by the patient.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "specialCourtesy": { - "description": "Special courtesies (VIP, board member).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "specialArrangement": { - "description": "Any special requests that have been made for this hospitalization encounter, such as the provision of specific equipment or other things.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "destination": { - "description": "Location/organization to which the patient is discharged.", - "$ref": "#/definitions/Reference" - }, - "dischargeDisposition": { - "description": "Category or kind of location after discharge.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "Encounter_Location": { - "description": "An interaction between a patient and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "location": { - "description": "The location where the encounter takes place.", - "$ref": "#/definitions/Reference" - }, - "status": { - "description": "The status of the participants\u0027 presence at the specified location during the period specified. If the participant is no longer at the location, then the period will have an end date/time.", - "enum": [ - "planned", - "active", - "reserved", - "completed" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "physicalType": { - "description": "This will be used to specify the required levels (bed/ward/room/etc.) desired to be recorded to simplify either messaging or query.", - "$ref": "#/definitions/CodeableConcept" - }, - "period": { - "description": "Time period during which the patient was present at the location.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false, - "required": [ - "location" - ] - }, - "Endpoint": { - "description": "The technical details of an endpoint that can be used for electronic services, such as for web services providing XDS.b or a REST endpoint for another FHIR server. This may include any security context information.", - "properties": { - "resourceType": { - "description": "This is a Endpoint resource", - "const": "Endpoint" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier for the organization that is used to identify the endpoint across multiple disparate systems.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "active | suspended | error | off | test.", - "enum": [ - "active", - "suspended", - "error", - "off", - "entered-in-error", - "test" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "connectionType": { - "description": "A coded value that represents the technical details of the usage of this endpoint, such as what WSDLs should be used in what way. (e.g. XDS.b/DICOM/cds-hook).", - "$ref": "#/definitions/Coding" - }, - "name": { - "description": "A friendly name that this endpoint can be referred to with.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "managingOrganization": { - "description": "The organization that manages this endpoint (even if technically another organization is hosting this in the cloud, it is the organization associated with the data).", - "$ref": "#/definitions/Reference" - }, - "contact": { - "description": "Contact details for a human to contact about the subscription. The primary use of this for system administrator troubleshooting.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "period": { - "description": "The interval during which the endpoint is expected to be operational.", - "$ref": "#/definitions/Period" - }, - "payloadType": { - "description": "The payload type describes the acceptable content that can be communicated on the endpoint.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "payloadMimeType": { - "description": "The mime type to send the payload in - e.g. application/fhir+xml, application/fhir+json. If the mime type is not specified, then the sender could send any content (including no content depending on the connectionType).", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_payloadMimeType": { - "description": "Extensions for payloadMimeType", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "address": { - "description": "The uri that describes the actual end-point to connect to.", - "$ref": "#/definitions/url" - }, - "_address": { - "description": "Extensions for address", - "$ref": "#/definitions/Element" - }, - "header": { - "description": "Additional headers / information to send as part of the notification.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_header": { - "description": "Extensions for header", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "payloadType", - "connectionType", - "resourceType" - ] - }, - "EnrollmentRequest": { - "description": "This resource provides the insurance enrollment details to the insurer regarding a specified coverage.", - "properties": { - "resourceType": { - "description": "This is a EnrollmentRequest resource", - "const": "EnrollmentRequest" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "The Response business identifier.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of the resource instance.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "created": { - "description": "The date when this resource was created.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "insurer": { - "description": "The Insurer who is target of the request.", - "$ref": "#/definitions/Reference" - }, - "provider": { - "description": "The practitioner who is responsible for the services rendered to the patient.", - "$ref": "#/definitions/Reference" - }, - "candidate": { - "description": "Patient Resource.", - "$ref": "#/definitions/Reference" - }, - "coverage": { - "description": "Reference to the program or plan identification, underwriter or payor.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "EnrollmentResponse": { - "description": "This resource provides enrollment and plan details from the processing of an EnrollmentRequest resource.", - "properties": { - "resourceType": { - "description": "This is a EnrollmentResponse resource", - "const": "EnrollmentResponse" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "The Response business identifier.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of the resource instance.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "request": { - "description": "Original request resource reference.", - "$ref": "#/definitions/Reference" - }, - "outcome": { - "description": "Processing status: error, complete.", - "enum": [ - "queued", - "complete", - "error", - "partial" - ] - }, - "_outcome": { - "description": "Extensions for outcome", - "$ref": "#/definitions/Element" - }, - "disposition": { - "description": "A description of the status of the adjudication.", - "$ref": "#/definitions/string" - }, - "_disposition": { - "description": "Extensions for disposition", - "$ref": "#/definitions/Element" - }, - "created": { - "description": "The date when the enclosed suite of services were performed or completed.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "organization": { - "description": "The Insurer who produced this adjudicated response.", - "$ref": "#/definitions/Reference" - }, - "requestProvider": { - "description": "The practitioner who is responsible for the services rendered to the patient.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "EpisodeOfCare": { - "description": "An association between a patient and an organization / healthcare provider(s) during which time encounters may occur. The managing organization assumes a level of responsibility for the patient during this time.", - "properties": { - "resourceType": { - "description": "This is a EpisodeOfCare resource", - "const": "EpisodeOfCare" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "The EpisodeOfCare may be known by different identifiers for different contexts of use, such as when an external agency is tracking the Episode for funding purposes.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "planned | waitlist | active | onhold | finished | cancelled.", - "enum": [ - "planned", - "waitlist", - "active", - "onhold", - "finished", - "cancelled", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusHistory": { - "description": "The history of statuses that the EpisodeOfCare has been through (without requiring processing the history of the resource).", - "items": { - "$ref": "#/definitions/EpisodeOfCare_StatusHistory" - }, - "type": "array" - }, - "type": { - "description": "A classification of the type of episode of care; e.g. specialist referral, disease management, type of funded care.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "diagnosis": { - "description": "The list of diagnosis relevant to this episode of care.", - "items": { - "$ref": "#/definitions/EpisodeOfCare_Diagnosis" - }, - "type": "array" - }, - "patient": { - "description": "The patient who is the focus of this episode of care.", - "$ref": "#/definitions/Reference" - }, - "managingOrganization": { - "description": "The organization that has assumed the specific responsibilities for the specified duration.", - "$ref": "#/definitions/Reference" - }, - "period": { - "description": "The interval during which the managing organization assumes the defined responsibility.", - "$ref": "#/definitions/Period" - }, - "referralRequest": { - "description": "Referral Request(s) that are fulfilled by this EpisodeOfCare, incoming referrals.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "careManager": { - "description": "The practitioner that is the care manager/care coordinator for this patient.", - "$ref": "#/definitions/Reference" - }, - "team": { - "description": "The list of practitioners that may be facilitating this episode of care for specific purposes.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "account": { - "description": "The set of accounts that may be used for billing for this EpisodeOfCare.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "patient", - "resourceType" - ] - }, - "EpisodeOfCare_StatusHistory": { - "description": "An association between a patient and an organization / healthcare provider(s) during which time encounters may occur. The managing organization assumes a level of responsibility for the patient during this time.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "status": { - "description": "planned | waitlist | active | onhold | finished | cancelled.", - "enum": [ - "planned", - "waitlist", - "active", - "onhold", - "finished", - "cancelled", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "The period during this EpisodeOfCare that the specific status applied.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false, - "required": [ - "period" - ] - }, - "EpisodeOfCare_Diagnosis": { - "description": "An association between a patient and an organization / healthcare provider(s) during which time encounters may occur. The managing organization assumes a level of responsibility for the patient during this time.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "condition": { - "description": "A list of conditions/problems/diagnoses that this episode of care is intended to be providing care for.", - "$ref": "#/definitions/Reference" - }, - "role": { - "description": "Role that this diagnosis has within the episode of care (e.g. admission, billing, discharge …).", - "$ref": "#/definitions/CodeableConcept" - }, - "rank": { - "description": "Ranking of the diagnosis (for each role type).", - "$ref": "#/definitions/positiveInt" - }, - "_rank": { - "description": "Extensions for rank", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "condition" - ] - }, - "EventDefinition": { - "description": "The EventDefinition resource provides a reusable description of when a particular event can occur.", - "properties": { - "resourceType": { - "description": "This is a EventDefinition resource", - "const": "EventDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this event definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this event definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the event definition is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this event definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the event definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the event definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the event definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the event definition.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "subtitle": { - "description": "An explanatory or alternate title for the event definition giving additional information about its content.", - "$ref": "#/definitions/string" - }, - "_subtitle": { - "description": "Extensions for subtitle", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this event definition. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this event definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "subjectCodeableConcept": { - "description": "A code or group definition that describes the intended subject of the event definition.", - "$ref": "#/definitions/CodeableConcept" - }, - "subjectReference": { - "description": "A code or group definition that describes the intended subject of the event definition.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date (and optionally time) when the event definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the event definition changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the event definition.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the event definition from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate event definition instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the event definition is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this event definition is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "usage": { - "description": "A detailed description of how the event definition is used from a clinical perspective.", - "$ref": "#/definitions/string" - }, - "_usage": { - "description": "Extensions for usage", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the event definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the event definition.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the event definition content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "topic": { - "description": "Descriptive topics related to the module. Topics provide a high-level categorization of the module that can be useful for filtering and searching.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "author": { - "description": "An individiual or organization primarily involved in the creation and maintenance of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "editor": { - "description": "An individual or organization primarily responsible for internal coherence of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "reviewer": { - "description": "An individual or organization primarily responsible for review of some aspect of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "endorser": { - "description": "An individual or organization responsible for officially endorsing the content for use in some setting.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Related resources such as additional documentation, justification, or bibliographic references.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "trigger": { - "description": "The trigger element defines when the event occurs. If more than one trigger condition is specified, the event fires whenever any one of the trigger conditions is met.", - "items": { - "$ref": "#/definitions/TriggerDefinition" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "trigger", - "resourceType" - ] - }, - "Evidence": { - "description": "The Evidence resource describes the conditional state (population and any exposures being compared within the population) and outcome (if specified) that the knowledge (evidence, assertion, recommendation) is about.", - "properties": { - "resourceType": { - "description": "This is a Evidence resource", - "const": "Evidence" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this evidence when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this evidence is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the evidence is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this evidence when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the evidence when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the evidence author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the evidence. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the evidence.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "shortTitle": { - "description": "The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.", - "$ref": "#/definitions/string" - }, - "_shortTitle": { - "description": "Extensions for shortTitle", - "$ref": "#/definitions/Element" - }, - "subtitle": { - "description": "An explanatory or alternate title for the Evidence giving additional information about its content.", - "$ref": "#/definitions/string" - }, - "_subtitle": { - "description": "Extensions for subtitle", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this evidence. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the evidence was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the evidence changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the evidence.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the evidence from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "note": { - "description": "A human-readable string to clarify or explain concepts about the resource.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate evidence instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the evidence is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "copyright": { - "description": "A copyright statement relating to the evidence and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the evidence content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "topic": { - "description": "Descriptive topics related to the content of the Evidence. Topics provide a high-level categorization grouping types of Evidences that can be useful for filtering and searching.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "author": { - "description": "An individiual or organization primarily involved in the creation and maintenance of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "editor": { - "description": "An individual or organization primarily responsible for internal coherence of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "reviewer": { - "description": "An individual or organization primarily responsible for review of some aspect of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "endorser": { - "description": "An individual or organization responsible for officially endorsing the content for use in some setting.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Related artifacts such as additional documentation, justification, or bibliographic references.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "exposureBackground": { - "description": "A reference to a EvidenceVariable resource that defines the population for the research.", - "$ref": "#/definitions/Reference" - }, - "exposureVariant": { - "description": "A reference to a EvidenceVariable resource that defines the exposure for the research.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "outcome": { - "description": "A reference to a EvidenceVariable resomece that defines the outcome for the research.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "exposureBackground", - "resourceType" - ] - }, - "EvidenceVariable": { - "description": "The EvidenceVariable resource describes a \"PICO\" element that knowledge (evidence, assertion, recommendation) is about.", - "properties": { - "resourceType": { - "description": "This is a EvidenceVariable resource", - "const": "EvidenceVariable" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this evidence variable when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this evidence variable is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the evidence variable is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this evidence variable when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the evidence variable when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the evidence variable author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the evidence variable. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the evidence variable.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "shortTitle": { - "description": "The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.", - "$ref": "#/definitions/string" - }, - "_shortTitle": { - "description": "Extensions for shortTitle", - "$ref": "#/definitions/Element" - }, - "subtitle": { - "description": "An explanatory or alternate title for the EvidenceVariable giving additional information about its content.", - "$ref": "#/definitions/string" - }, - "_subtitle": { - "description": "Extensions for subtitle", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this evidence variable. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the evidence variable was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the evidence variable changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the evidence variable.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the evidence variable from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "note": { - "description": "A human-readable string to clarify or explain concepts about the resource.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate evidence variable instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the evidence variable is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "copyright": { - "description": "A copyright statement relating to the evidence variable and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the evidence variable.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the evidence variable content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "topic": { - "description": "Descriptive topics related to the content of the EvidenceVariable. Topics provide a high-level categorization grouping types of EvidenceVariables that can be useful for filtering and searching.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "author": { - "description": "An individiual or organization primarily involved in the creation and maintenance of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "editor": { - "description": "An individual or organization primarily responsible for internal coherence of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "reviewer": { - "description": "An individual or organization primarily responsible for review of some aspect of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "endorser": { - "description": "An individual or organization responsible for officially endorsing the content for use in some setting.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Related artifacts such as additional documentation, justification, or bibliographic references.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "type": { - "description": "The type of evidence element, a population, an exposure, or an outcome.", - "enum": [ - "dichotomous", - "continuous", - "descriptive" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "characteristic": { - "description": "A characteristic that defines the members of the evidence element. Multiple characteristics are applied with \"and\" semantics.", - "items": { - "$ref": "#/definitions/EvidenceVariable_Characteristic" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "characteristic", - "resourceType" - ] - }, - "EvidenceVariable_Characteristic": { - "description": "The EvidenceVariable resource describes a \"PICO\" element that knowledge (evidence, assertion, recommendation) is about.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "A short, natural language description of the characteristic that could be used to communicate the criteria to an end-user.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "definitionReference": { - "description": "Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).", - "$ref": "#/definitions/Reference" - }, - "definitionCanonical": { - "description": "Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).", - "pattern": "^\\S*$", - "type": "string" - }, - "_definitionCanonical": { - "description": "Extensions for definitionCanonical", - "$ref": "#/definitions/Element" - }, - "definitionCodeableConcept": { - "description": "Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).", - "$ref": "#/definitions/CodeableConcept" - }, - "definitionExpression": { - "description": "Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).", - "$ref": "#/definitions/Expression" - }, - "definitionDataRequirement": { - "description": "Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).", - "$ref": "#/definitions/DataRequirement" - }, - "definitionTriggerDefinition": { - "description": "Define members of the evidence element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).", - "$ref": "#/definitions/TriggerDefinition" - }, - "usageContext": { - "description": "Use UsageContext to define the members of the population, such as Age Ranges, Genders, Settings.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "exclude": { - "description": "When true, members with this characteristic are excluded from the element.", - "$ref": "#/definitions/boolean" - }, - "_exclude": { - "description": "Extensions for exclude", - "$ref": "#/definitions/Element" - }, - "participantEffectiveDateTime": { - "description": "Indicates what effective period the study covers.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_participantEffectiveDateTime": { - "description": "Extensions for participantEffectiveDateTime", - "$ref": "#/definitions/Element" - }, - "participantEffectivePeriod": { - "description": "Indicates what effective period the study covers.", - "$ref": "#/definitions/Period" - }, - "participantEffectiveDuration": { - "description": "Indicates what effective period the study covers.", - "$ref": "#/definitions/Duration" - }, - "participantEffectiveTiming": { - "description": "Indicates what effective period the study covers.", - "$ref": "#/definitions/Timing" - }, - "timeFromStart": { - "description": "Indicates duration from the participant\u0027s study entry.", - "$ref": "#/definitions/Duration" - }, - "groupMeasure": { - "description": "Indicates how elements are aggregated within the study effective period.", - "enum": [ - "mean", - "median", - "mean-of-mean", - "mean-of-median", - "median-of-mean", - "median-of-median" - ] - }, - "_groupMeasure": { - "description": "Extensions for groupMeasure", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ExampleScenario": { - "description": "Example of workflow instance.", - "properties": { - "resourceType": { - "description": "This is a ExampleScenario resource", - "const": "ExampleScenario" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this example scenario when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this example scenario is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the example scenario is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this example scenario when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the example scenario when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the example scenario author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the example scenario. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this example scenario. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this example scenario is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the example scenario was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the example scenario changes. (e.g. the \u0027content logical definition\u0027).", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the example scenario.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate example scenario instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the example scenario is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "copyright": { - "description": "A copyright statement relating to the example scenario and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the example scenario.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "purpose": { - "description": "What the example scenario resource is created for. This should not be used to show the business purpose of the scenario itself, but the purpose of documenting a scenario.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "actor": { - "description": "Actor participating in the resource.", - "items": { - "$ref": "#/definitions/ExampleScenario_Actor" - }, - "type": "array" - }, - "instance": { - "description": "Each resource and each version that is present in the workflow.", - "items": { - "$ref": "#/definitions/ExampleScenario_Instance" - }, - "type": "array" - }, - "process": { - "description": "Each major process - a group of operations.", - "items": { - "$ref": "#/definitions/ExampleScenario_Process" - }, - "type": "array" - }, - "workflow": { - "description": "Another nested workflow.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "ExampleScenario_Actor": { - "description": "Example of workflow instance.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "actorId": { - "description": "ID or acronym of actor.", - "$ref": "#/definitions/string" - }, - "_actorId": { - "description": "Extensions for actorId", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type of actor - person or system.", - "enum": [ - "person", - "entity" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "The name of the actor as shown in the page.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "The description of the actor.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ExampleScenario_Instance": { - "description": "Example of workflow instance.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "resourceId": { - "description": "The id of the resource for referencing.", - "$ref": "#/definitions/string" - }, - "_resourceId": { - "description": "Extensions for resourceId", - "$ref": "#/definitions/Element" - }, - "resourceType": { - "description": "The type of the resource.", - "$ref": "#/definitions/code" - }, - "_resourceType": { - "description": "Extensions for resourceType", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A short name for the resource instance.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "Human-friendly description of the resource instance.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "A specific version of the resource.", - "items": { - "$ref": "#/definitions/ExampleScenario_Version" - }, - "type": "array" - }, - "containedInstance": { - "description": "Resources contained in the instance (e.g. the observations contained in a bundle).", - "items": { - "$ref": "#/definitions/ExampleScenario_ContainedInstance" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ExampleScenario_Version": { - "description": "Example of workflow instance.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "versionId": { - "description": "The identifier of a specific version of a resource.", - "$ref": "#/definitions/string" - }, - "_versionId": { - "description": "Extensions for versionId", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "The description of the resource version.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ExampleScenario_ContainedInstance": { - "description": "Example of workflow instance.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "resourceId": { - "description": "Each resource contained in the instance.", - "$ref": "#/definitions/string" - }, - "_resourceId": { - "description": "Extensions for resourceId", - "$ref": "#/definitions/Element" - }, - "versionId": { - "description": "A specific version of a resource contained in the instance.", - "$ref": "#/definitions/string" - }, - "_versionId": { - "description": "Extensions for versionId", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ExampleScenario_Process": { - "description": "Example of workflow instance.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "title": { - "description": "The diagram title of the group of operations.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A longer description of the group of operations.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "preConditions": { - "description": "Description of initial status before the process starts.", - "$ref": "#/definitions/markdown" - }, - "_preConditions": { - "description": "Extensions for preConditions", - "$ref": "#/definitions/Element" - }, - "postConditions": { - "description": "Description of final status after the process ends.", - "$ref": "#/definitions/markdown" - }, - "_postConditions": { - "description": "Extensions for postConditions", - "$ref": "#/definitions/Element" - }, - "step": { - "description": "Each step of the process.", - "items": { - "$ref": "#/definitions/ExampleScenario_Step" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ExampleScenario_Step": { - "description": "Example of workflow instance.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "process": { - "description": "Nested process.", - "items": { - "$ref": "#/definitions/ExampleScenario_Process" - }, - "type": "array" - }, - "pause": { - "description": "If there is a pause in the flow.", - "$ref": "#/definitions/boolean" - }, - "_pause": { - "description": "Extensions for pause", - "$ref": "#/definitions/Element" - }, - "operation": { - "description": "Each interaction or action.", - "$ref": "#/definitions/ExampleScenario_Operation" - }, - "alternative": { - "description": "Indicates an alternative step that can be taken instead of the operations on the base step in exceptional/atypical circumstances.", - "items": { - "$ref": "#/definitions/ExampleScenario_Alternative" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ExampleScenario_Operation": { - "description": "Example of workflow instance.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "number": { - "description": "The sequential number of the interaction, e.g. 1.2.5.", - "$ref": "#/definitions/string" - }, - "_number": { - "description": "Extensions for number", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type of operation - CRUD.", - "$ref": "#/definitions/string" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "The human-friendly name of the interaction.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "initiator": { - "description": "Who starts the transaction.", - "$ref": "#/definitions/string" - }, - "_initiator": { - "description": "Extensions for initiator", - "$ref": "#/definitions/Element" - }, - "receiver": { - "description": "Who receives the transaction.", - "$ref": "#/definitions/string" - }, - "_receiver": { - "description": "Extensions for receiver", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A comment to be inserted in the diagram.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "initiatorActive": { - "description": "Whether the initiator is deactivated right after the transaction.", - "$ref": "#/definitions/boolean" - }, - "_initiatorActive": { - "description": "Extensions for initiatorActive", - "$ref": "#/definitions/Element" - }, - "receiverActive": { - "description": "Whether the receiver is deactivated right after the transaction.", - "$ref": "#/definitions/boolean" - }, - "_receiverActive": { - "description": "Extensions for receiverActive", - "$ref": "#/definitions/Element" - }, - "request": { - "description": "Each resource instance used by the initiator.", - "$ref": "#/definitions/ExampleScenario_ContainedInstance" - }, - "response": { - "description": "Each resource instance used by the responder.", - "$ref": "#/definitions/ExampleScenario_ContainedInstance" - } - }, - "additionalProperties": false - }, - "ExampleScenario_Alternative": { - "description": "Example of workflow instance.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "title": { - "description": "The label to display for the alternative that gives a sense of the circumstance in which the alternative should be invoked.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A human-readable description of the alternative explaining when the alternative should occur rather than the base step.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "step": { - "description": "What happens in each alternative option.", - "items": { - "$ref": "#/definitions/ExampleScenario_Step" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ExplanationOfBenefit": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "resourceType": { - "description": "This is a ExplanationOfBenefit resource", - "const": "ExplanationOfBenefit" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this explanation of benefit.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of the resource instance.", - "enum": [ - "active", - "cancelled", - "draft", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The category of claim, e.g. oral, pharmacy, vision, institutional, professional.", - "$ref": "#/definitions/CodeableConcept" - }, - "subType": { - "description": "A finer grained suite of claim type codes which may convey additional information such as Inpatient vs Outpatient and/or a specialty service.", - "$ref": "#/definitions/CodeableConcept" - }, - "use": { - "description": "A code to indicate whether the nature of the request is: to request adjudication of products and services previously rendered; or requesting authorization and adjudication for provision in the future; or requesting the non-binding adjudication of the listed products and services which could be provided in the future.", - "$ref": "#/definitions/code" - }, - "_use": { - "description": "Extensions for use", - "$ref": "#/definitions/Element" - }, - "patient": { - "description": "The party to whom the professional services and/or products have been supplied or are being considered and for whom actual for forecast reimbursement is sought.", - "$ref": "#/definitions/Reference" - }, - "billablePeriod": { - "description": "The period for which charges are being submitted.", - "$ref": "#/definitions/Period" - }, - "created": { - "description": "The date this resource was created.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "enterer": { - "description": "Individual who created the claim, predetermination or preauthorization.", - "$ref": "#/definitions/Reference" - }, - "insurer": { - "description": "The party responsible for authorization, adjudication and reimbursement.", - "$ref": "#/definitions/Reference" - }, - "provider": { - "description": "The provider which is responsible for the claim, predetermination or preauthorization.", - "$ref": "#/definitions/Reference" - }, - "priority": { - "description": "The provider-required urgency of processing the request. Typical values include: stat, routine deferred.", - "$ref": "#/definitions/CodeableConcept" - }, - "fundsReserveRequested": { - "description": "A code to indicate whether and for whom funds are to be reserved for future claims.", - "$ref": "#/definitions/CodeableConcept" - }, - "fundsReserve": { - "description": "A code, used only on a response to a preauthorization, to indicate whether the benefits payable have been reserved and for whom.", - "$ref": "#/definitions/CodeableConcept" - }, - "related": { - "description": "Other claims which are related to this claim such as prior submissions or claims for related services or for the same event.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Related" - }, - "type": "array" - }, - "prescription": { - "description": "Prescription to support the dispensing of pharmacy, device or vision products.", - "$ref": "#/definitions/Reference" - }, - "originalPrescription": { - "description": "Original prescription which has been superseded by this prescription to support the dispensing of pharmacy services, medications or products.", - "$ref": "#/definitions/Reference" - }, - "payee": { - "description": "The party to be reimbursed for cost of the products and services according to the terms of the policy.", - "$ref": "#/definitions/ExplanationOfBenefit_Payee" - }, - "referral": { - "description": "A reference to a referral resource.", - "$ref": "#/definitions/Reference" - }, - "facility": { - "description": "Facility where the services were provided.", - "$ref": "#/definitions/Reference" - }, - "claim": { - "description": "The business identifier for the instance of the adjudication request: claim predetermination or preauthorization.", - "$ref": "#/definitions/Reference" - }, - "claimResponse": { - "description": "The business identifier for the instance of the adjudication response: claim, predetermination or preauthorization response.", - "$ref": "#/definitions/Reference" - }, - "outcome": { - "description": "The outcome of the claim, predetermination, or preauthorization processing.", - "$ref": "#/definitions/code" - }, - "_outcome": { - "description": "Extensions for outcome", - "$ref": "#/definitions/Element" - }, - "disposition": { - "description": "A human readable description of the status of the adjudication.", - "$ref": "#/definitions/string" - }, - "_disposition": { - "description": "Extensions for disposition", - "$ref": "#/definitions/Element" - }, - "preAuthRef": { - "description": "Reference from the Insurer which is used in later communications which refers to this adjudication.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_preAuthRef": { - "description": "Extensions for preAuthRef", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "preAuthRefPeriod": { - "description": "The timeframe during which the supplied preauthorization reference may be quoted on claims to obtain the adjudication as provided.", - "items": { - "$ref": "#/definitions/Period" - }, - "type": "array" - }, - "careTeam": { - "description": "The members of the team who provided the products and services.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_CareTeam" - }, - "type": "array" - }, - "supportingInfo": { - "description": "Additional information codes regarding exceptions, special considerations, the condition, situation, prior or concurrent issues.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_SupportingInfo" - }, - "type": "array" - }, - "diagnosis": { - "description": "Information about diagnoses relevant to the claim items.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Diagnosis" - }, - "type": "array" - }, - "procedure": { - "description": "Procedures performed on the patient relevant to the billing items with the claim.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Procedure" - }, - "type": "array" - }, - "precedence": { - "description": "This indicates the relative order of a series of EOBs related to different coverages for the same suite of services.", - "$ref": "#/definitions/positiveInt" - }, - "_precedence": { - "description": "Extensions for precedence", - "$ref": "#/definitions/Element" - }, - "insurance": { - "description": "Financial instruments for reimbursement for the health care products and services specified on the claim.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Insurance" - }, - "type": "array" - }, - "accident": { - "description": "Details of a accident which resulted in injuries which required the products and services listed in the claim.", - "$ref": "#/definitions/ExplanationOfBenefit_Accident" - }, - "item": { - "description": "A claim line. Either a simple (a product or service) or a \u0027group\u0027 of details which can also be a simple items or groups of sub-details.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Item" - }, - "type": "array" - }, - "addItem": { - "description": "The first-tier service adjudications for payor added product or service lines.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_AddItem" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results which are presented at the header level rather than at the line-item or add-item levels.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Adjudication" - }, - "type": "array" - }, - "total": { - "description": "Categorized monetary totals for the adjudication.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Total" - }, - "type": "array" - }, - "payment": { - "description": "Payment details for the adjudication of the claim.", - "$ref": "#/definitions/ExplanationOfBenefit_Payment" - }, - "formCode": { - "description": "A code for the form to be used for printing the content.", - "$ref": "#/definitions/CodeableConcept" - }, - "form": { - "description": "The actual form, by reference or inclusion, for printing the content or an EOB.", - "$ref": "#/definitions/Attachment" - }, - "processNote": { - "description": "A note that describes or explains adjudication results in a human readable form.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_ProcessNote" - }, - "type": "array" - }, - "benefitPeriod": { - "description": "The term of the benefits documented in this response.", - "$ref": "#/definitions/Period" - }, - "benefitBalance": { - "description": "Balance by Benefit Category.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_BenefitBalance" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "insurance", - "provider", - "patient", - "insurer", - "type", - "resourceType" - ] - }, - "ExplanationOfBenefit_Related": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "claim": { - "description": "Reference to a related claim.", - "$ref": "#/definitions/Reference" - }, - "relationship": { - "description": "A code to convey how the claims are related.", - "$ref": "#/definitions/CodeableConcept" - }, - "reference": { - "description": "An alternate organizational reference to the case or file to which this particular claim pertains.", - "$ref": "#/definitions/Identifier" - } - }, - "additionalProperties": false - }, - "ExplanationOfBenefit_Payee": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of Party to be reimbursed: Subscriber, provider, other.", - "$ref": "#/definitions/CodeableConcept" - }, - "party": { - "description": "Reference to the individual or organization to whom any payment will be made.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "ExplanationOfBenefit_CareTeam": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify care team entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "provider": { - "description": "Member of the team who provided the product or service.", - "$ref": "#/definitions/Reference" - }, - "responsible": { - "description": "The party who is billing and/or responsible for the claimed products or services.", - "$ref": "#/definitions/boolean" - }, - "_responsible": { - "description": "Extensions for responsible", - "$ref": "#/definitions/Element" - }, - "role": { - "description": "The lead, assisting or supervising practitioner and their discipline if a multidisciplinary team.", - "$ref": "#/definitions/CodeableConcept" - }, - "qualification": { - "description": "The qualification of the practitioner which is applicable for this service.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "provider" - ] - }, - "ExplanationOfBenefit_SupportingInfo": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify supporting information entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "The general class of the information supplied: information; exception; accident, employment; onset, etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "code": { - "description": "System and code pertaining to the specific information regarding special conditions relating to the setting, treatment or patient for which care is sought.", - "$ref": "#/definitions/CodeableConcept" - }, - "timingDate": { - "description": "The date when or period to which this information refers.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_timingDate": { - "description": "Extensions for timingDate", - "$ref": "#/definitions/Element" - }, - "timingPeriod": { - "description": "The date when or period to which this information refers.", - "$ref": "#/definitions/Period" - }, - "valueBoolean": { - "description": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueQuantity": { - "description": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", - "$ref": "#/definitions/Quantity" - }, - "valueAttachment": { - "description": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", - "$ref": "#/definitions/Attachment" - }, - "valueReference": { - "description": "Additional data or information such as resources, documents, images etc. including references to the data or the actual inclusion of the data.", - "$ref": "#/definitions/Reference" - }, - "reason": { - "description": "Provides the reason in the situation where a reason code is required in addition to the content.", - "$ref": "#/definitions/Coding" - } - }, - "additionalProperties": false, - "required": [ - "category" - ] - }, - "ExplanationOfBenefit_Diagnosis": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify diagnosis entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "diagnosisCodeableConcept": { - "description": "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", - "$ref": "#/definitions/CodeableConcept" - }, - "diagnosisReference": { - "description": "The nature of illness or problem in a coded form or as a reference to an external defined Condition.", - "$ref": "#/definitions/Reference" - }, - "type": { - "description": "When the condition was observed or the relative ranking.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "onAdmission": { - "description": "Indication of whether the diagnosis was present on admission to a facility.", - "$ref": "#/definitions/CodeableConcept" - }, - "packageCode": { - "description": "A package billing code or bundle code used to group products and services to a particular health condition (such as heart attack) which is based on a predetermined grouping code system.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "ExplanationOfBenefit_Procedure": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify procedure entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "When the condition was observed or the relative ranking.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "date": { - "description": "Date and optionally time the procedure was performed.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "procedureCodeableConcept": { - "description": "The code or reference to a Procedure resource which identifies the clinical intervention performed.", - "$ref": "#/definitions/CodeableConcept" - }, - "procedureReference": { - "description": "The code or reference to a Procedure resource which identifies the clinical intervention performed.", - "$ref": "#/definitions/Reference" - }, - "udi": { - "description": "Unique Device Identifiers associated with this line item.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ExplanationOfBenefit_Insurance": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "focal": { - "description": "A flag to indicate that this Coverage is to be used for adjudication of this claim when set to true.", - "$ref": "#/definitions/boolean" - }, - "_focal": { - "description": "Extensions for focal", - "$ref": "#/definitions/Element" - }, - "coverage": { - "description": "Reference to the insurance card level information contained in the Coverage resource. The coverage issuing insurer will use these details to locate the patient\u0027s actual coverage within the insurer\u0027s information system.", - "$ref": "#/definitions/Reference" - }, - "preAuthRef": { - "description": "Reference numbers previously provided by the insurer to the provider to be quoted on subsequent claims containing services or products related to the prior authorization.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_preAuthRef": { - "description": "Extensions for preAuthRef", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "coverage" - ] - }, - "ExplanationOfBenefit_Accident": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "date": { - "description": "Date of an accident event related to the products and services contained in the claim.", - "$ref": "#/definitions/date" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type or context of the accident event for the purposes of selection of potential insurance coverages and determination of coordination between insurers.", - "$ref": "#/definitions/CodeableConcept" - }, - "locationAddress": { - "description": "The physical location of the accident event.", - "$ref": "#/definitions/Address" - }, - "locationReference": { - "description": "The physical location of the accident event.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "ExplanationOfBenefit_Item": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A number to uniquely identify item entries.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "careTeamSequence": { - "description": "Care team members related to this service or product.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_careTeamSequence": { - "description": "Extensions for careTeamSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "diagnosisSequence": { - "description": "Diagnoses applicable for this service or product.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_diagnosisSequence": { - "description": "Extensions for diagnosisSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "procedureSequence": { - "description": "Procedures applicable for this service or product.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_procedureSequence": { - "description": "Extensions for procedureSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "informationSequence": { - "description": "Exceptions, special conditions and supporting information applicable for this service or product.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_informationSequence": { - "description": "Extensions for informationSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "revenue": { - "description": "The type of revenue or cost center providing the product and/or service.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "Code to identify the general type of benefits under which products and services are provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "programCode": { - "description": "Identifies the program under which this may be recovered.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "servicedDate": { - "description": "The date or dates when the service or product was supplied, performed or completed.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_servicedDate": { - "description": "Extensions for servicedDate", - "$ref": "#/definitions/Element" - }, - "servicedPeriod": { - "description": "The date or dates when the service or product was supplied, performed or completed.", - "$ref": "#/definitions/Period" - }, - "locationCodeableConcept": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "locationAddress": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/Address" - }, - "locationReference": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/Reference" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "udi": { - "description": "Unique Device Identifiers associated with this line item.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "bodySite": { - "description": "Physical service site on the patient (limb, tooth, etc.).", - "$ref": "#/definitions/CodeableConcept" - }, - "subSite": { - "description": "A region or surface of the bodySite, e.g. limb region or tooth surface(s).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "encounter": { - "description": "A billed item may include goods or services provided in multiple encounters.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "If this item is a group then the values here are a summary of the adjudication of the detail items. If this item is a simple product or service then this is the result of the adjudication of this item.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Adjudication" - }, - "type": "array" - }, - "detail": { - "description": "Second-tier of goods and services.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Detail" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "productOrService" - ] - }, - "ExplanationOfBenefit_Adjudication": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "category": { - "description": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in-aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", - "$ref": "#/definitions/CodeableConcept" - }, - "reason": { - "description": "A code supporting the understanding of the adjudication result and explaining variance from expected amount.", - "$ref": "#/definitions/CodeableConcept" - }, - "amount": { - "description": "Monetary amount associated with the category.", - "$ref": "#/definitions/Money" - }, - "value": { - "description": "A non-monetary value associated with the category. Mutually exclusive to the amount element above.", - "$ref": "#/definitions/decimal" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "category" - ] - }, - "ExplanationOfBenefit_Detail": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A claim detail line. Either a simple (a product or service) or a \u0027group\u0027 of sub-details which are simple items.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "revenue": { - "description": "The type of revenue or cost center providing the product and/or service.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "Code to identify the general type of benefits under which products and services are provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "programCode": { - "description": "Identifies the program under which this may be recovered.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "udi": { - "description": "Unique Device Identifiers associated with this line item.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Adjudication" - }, - "type": "array" - }, - "subDetail": { - "description": "Third-tier of goods and services.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_SubDetail" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "productOrService" - ] - }, - "ExplanationOfBenefit_SubDetail": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "A claim detail line. Either a simple (a product or service) or a \u0027group\u0027 of sub-details which are simple items.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "revenue": { - "description": "The type of revenue or cost center providing the product and/or service.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "Code to identify the general type of benefits under which products and services are provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "programCode": { - "description": "Identifies the program under which this may be recovered.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "udi": { - "description": "Unique Device Identifiers associated with this line item.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Adjudication" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "productOrService" - ] - }, - "ExplanationOfBenefit_AddItem": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "itemSequence": { - "description": "Claim items which this service line is intended to replace.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_itemSequence": { - "description": "Extensions for itemSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "detailSequence": { - "description": "The sequence number of the details within the claim item which this line is intended to replace.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_detailSequence": { - "description": "Extensions for detailSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "subDetailSequence": { - "description": "The sequence number of the sub-details woithin the details within the claim item which this line is intended to replace.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_subDetailSequence": { - "description": "Extensions for subDetailSequence", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "provider": { - "description": "The providers who are authorized for the services rendered to the patient.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "programCode": { - "description": "Identifies the program under which this may be recovered.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "servicedDate": { - "description": "The date or dates when the service or product was supplied, performed or completed.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_servicedDate": { - "description": "Extensions for servicedDate", - "$ref": "#/definitions/Element" - }, - "servicedPeriod": { - "description": "The date or dates when the service or product was supplied, performed or completed.", - "$ref": "#/definitions/Period" - }, - "locationCodeableConcept": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "locationAddress": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/Address" - }, - "locationReference": { - "description": "Where the product or service was provided.", - "$ref": "#/definitions/Reference" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "bodySite": { - "description": "Physical service site on the patient (limb, tooth, etc.).", - "$ref": "#/definitions/CodeableConcept" - }, - "subSite": { - "description": "A region or surface of the bodySite, e.g. limb region or tooth surface(s).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Adjudication" - }, - "type": "array" - }, - "detail": { - "description": "The second-tier service adjudications for payor added services.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Detail1" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "productOrService" - ] - }, - "ExplanationOfBenefit_Detail1": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Adjudication" - }, - "type": "array" - }, - "subDetail": { - "description": "The third-tier service adjudications for payor added services.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_SubDetail1" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "productOrService" - ] - }, - "ExplanationOfBenefit_SubDetail1": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "productOrService": { - "description": "When the value is a group code then this item collects a set of related claim details, otherwise this contains the product, service, drug or other billing code for the item.", - "$ref": "#/definitions/CodeableConcept" - }, - "modifier": { - "description": "Item typification or modifiers codes to convey additional context for the product or service.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "quantity": { - "description": "The number of repetitions of a service or product.", - "$ref": "#/definitions/Quantity" - }, - "unitPrice": { - "description": "If the item is not a group then this is the fee for the product or service, otherwise this is the total of the fees for the details of the group.", - "$ref": "#/definitions/Money" - }, - "factor": { - "description": "A real number that represents a multiplier used in determining the overall value of services delivered and/or goods received. The concept of a Factor allows for a discount or surcharge multiplier to be applied to a monetary amount.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "net": { - "description": "The quantity times the unit price for an additional service or product or charge.", - "$ref": "#/definitions/Money" - }, - "noteNumber": { - "description": "The numbers associated with notes below which apply to the adjudication of this item.", - "items": { - "$ref": "#/definitions/positiveInt" - }, - "type": "array" - }, - "_noteNumber": { - "description": "Extensions for noteNumber", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "adjudication": { - "description": "The adjudication results.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Adjudication" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "productOrService" - ] - }, - "ExplanationOfBenefit_Total": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "category": { - "description": "A code to indicate the information type of this adjudication record. Information types may include: the value submitted, maximum values or percentages allowed or payable under the plan, amounts that the patient is responsible for in aggregate or pertaining to this item, amounts paid by other coverages, and the benefit payable for this item.", - "$ref": "#/definitions/CodeableConcept" - }, - "amount": { - "description": "Monetary total amount associated with the category.", - "$ref": "#/definitions/Money" - } - }, - "additionalProperties": false, - "required": [ - "amount", - "category" - ] - }, - "ExplanationOfBenefit_Payment": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Whether this represents partial or complete payment of the benefits payable.", - "$ref": "#/definitions/CodeableConcept" - }, - "adjustment": { - "description": "Total amount of all adjustments to this payment included in this transaction which are not related to this claim\u0027s adjudication.", - "$ref": "#/definitions/Money" - }, - "adjustmentReason": { - "description": "Reason for the payment adjustment.", - "$ref": "#/definitions/CodeableConcept" - }, - "date": { - "description": "Estimated date the payment will be issued or the actual issue date of payment.", - "$ref": "#/definitions/date" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "amount": { - "description": "Benefits payable less any payment adjustment.", - "$ref": "#/definitions/Money" - }, - "identifier": { - "description": "Issuer\u0027s unique identifier for the payment instrument.", - "$ref": "#/definitions/Identifier" - } - }, - "additionalProperties": false - }, - "ExplanationOfBenefit_ProcessNote": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "number": { - "description": "A number to uniquely identify a note entry.", - "$ref": "#/definitions/positiveInt" - }, - "_number": { - "description": "Extensions for number", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The business purpose of the note text.", - "enum": [ - "display", - "print", - "printoper" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "The explanation or description associated with the processing.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "A code to define the language used in the text of the note.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "ExplanationOfBenefit_BenefitBalance": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "category": { - "description": "Code to identify the general type of benefits under which products and services are provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "excluded": { - "description": "True if the indicated class of service is excluded from the plan, missing or False indicates the product or service is included in the coverage.", - "$ref": "#/definitions/boolean" - }, - "_excluded": { - "description": "Extensions for excluded", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A short name or tag for the benefit.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A richer description of the benefit or services covered.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "network": { - "description": "Is a flag to indicate whether the benefits refer to in-network providers or out-of-network providers.", - "$ref": "#/definitions/CodeableConcept" - }, - "unit": { - "description": "Indicates if the benefits apply to an individual or to the family.", - "$ref": "#/definitions/CodeableConcept" - }, - "term": { - "description": "The term or period of the values such as \u0027maximum lifetime benefit\u0027 or \u0027maximum annual visits\u0027.", - "$ref": "#/definitions/CodeableConcept" - }, - "financial": { - "description": "Benefits Used to date.", - "items": { - "$ref": "#/definitions/ExplanationOfBenefit_Financial" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "category" - ] - }, - "ExplanationOfBenefit_Financial": { - "description": "This resource provides: the claim details; adjudication details from the processing of a Claim; and optionally account balance information, for informing the subscriber of the benefits provided.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Classification of benefit being provided.", - "$ref": "#/definitions/CodeableConcept" - }, - "allowedUnsignedInt": { - "description": "The quantity of the benefit which is permitted under the coverage.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_allowedUnsignedInt": { - "description": "Extensions for allowedUnsignedInt", - "$ref": "#/definitions/Element" - }, - "allowedString": { - "description": "The quantity of the benefit which is permitted under the coverage.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_allowedString": { - "description": "Extensions for allowedString", - "$ref": "#/definitions/Element" - }, - "allowedMoney": { - "description": "The quantity of the benefit which is permitted under the coverage.", - "$ref": "#/definitions/Money" - }, - "usedUnsignedInt": { - "description": "The quantity of the benefit which have been consumed to date.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_usedUnsignedInt": { - "description": "Extensions for usedUnsignedInt", - "$ref": "#/definitions/Element" - }, - "usedMoney": { - "description": "The quantity of the benefit which have been consumed to date.", - "$ref": "#/definitions/Money" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "FamilyMemberHistory": { - "description": "Significant health conditions for a person related to the patient relevant in the context of care for the patient.", - "properties": { - "resourceType": { - "description": "This is a FamilyMemberHistory resource", - "const": "FamilyMemberHistory" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this family member history by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "instantiatesCanonical": { - "description": "The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "instantiatesUri": { - "description": "The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this FamilyMemberHistory.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "status": { - "description": "A code specifying the status of the record of the family history of a specific family member.", - "enum": [ - "partial", - "completed", - "entered-in-error", - "health-unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "dataAbsentReason": { - "description": "Describes why the family member\u0027s history is not available.", - "$ref": "#/definitions/CodeableConcept" - }, - "patient": { - "description": "The person who this history concerns.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date (and possibly time) when the family member history was recorded or last updated.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "This will either be a name or a description; e.g. \"Aunt Susan\", \"my cousin with the red hair\".", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "relationship": { - "description": "The type of relationship this person has to the patient (father, mother, brother etc.).", - "$ref": "#/definitions/CodeableConcept" - }, - "sex": { - "description": "The birth sex of the family member.", - "$ref": "#/definitions/CodeableConcept" - }, - "bornPeriod": { - "description": "The actual or approximate date of birth of the relative.", - "$ref": "#/definitions/Period" - }, - "bornDate": { - "description": "The actual or approximate date of birth of the relative.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_bornDate": { - "description": "Extensions for bornDate", - "$ref": "#/definitions/Element" - }, - "bornString": { - "description": "The actual or approximate date of birth of the relative.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_bornString": { - "description": "Extensions for bornString", - "$ref": "#/definitions/Element" - }, - "ageAge": { - "description": "The age of the relative at the time the family member history is recorded.", - "$ref": "#/definitions/Age" - }, - "ageRange": { - "description": "The age of the relative at the time the family member history is recorded.", - "$ref": "#/definitions/Range" - }, - "ageString": { - "description": "The age of the relative at the time the family member history is recorded.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_ageString": { - "description": "Extensions for ageString", - "$ref": "#/definitions/Element" - }, - "estimatedAge": { - "description": "If true, indicates that the age value specified is an estimated value.", - "$ref": "#/definitions/boolean" - }, - "_estimatedAge": { - "description": "Extensions for estimatedAge", - "$ref": "#/definitions/Element" - }, - "deceasedBoolean": { - "description": "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_deceasedBoolean": { - "description": "Extensions for deceasedBoolean", - "$ref": "#/definitions/Element" - }, - "deceasedAge": { - "description": "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", - "$ref": "#/definitions/Age" - }, - "deceasedRange": { - "description": "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", - "$ref": "#/definitions/Range" - }, - "deceasedDate": { - "description": "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_deceasedDate": { - "description": "Extensions for deceasedDate", - "$ref": "#/definitions/Element" - }, - "deceasedString": { - "description": "Deceased flag or the actual or approximate age of the relative at the time of death for the family member history record.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_deceasedString": { - "description": "Extensions for deceasedString", - "$ref": "#/definitions/Element" - }, - "reasonCode": { - "description": "Describes why the family member history occurred in coded or textual form.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Indicates a Condition, Observation, AllergyIntolerance, or QuestionnaireResponse that justifies this family member history event.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "This property allows a non condition-specific note to the made about the related person. Ideally, the note would be in the condition property, but this is not always possible.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "condition": { - "description": "The significant Conditions (or condition) that the family member had. This is a repeating section to allow a system to represent more than one condition per resource, though there is nothing stopping multiple resources - one per condition.", - "items": { - "$ref": "#/definitions/FamilyMemberHistory_Condition" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "patient", - "relationship", - "resourceType" - ] - }, - "FamilyMemberHistory_Condition": { - "description": "Significant health conditions for a person related to the patient relevant in the context of care for the patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The actual condition specified. Could be a coded condition (like MI or Diabetes) or a less specific string like \u0027cancer\u0027 depending on how much is known about the condition and the capabilities of the creating system.", - "$ref": "#/definitions/CodeableConcept" - }, - "outcome": { - "description": "Indicates what happened following the condition. If the condition resulted in death, deceased date is captured on the relation.", - "$ref": "#/definitions/CodeableConcept" - }, - "contributedToDeath": { - "description": "This condition contributed to the cause of death of the related person. If contributedToDeath is not populated, then it is unknown.", - "$ref": "#/definitions/boolean" - }, - "_contributedToDeath": { - "description": "Extensions for contributedToDeath", - "$ref": "#/definitions/Element" - }, - "onsetAge": { - "description": "Either the age of onset, range of approximate age or descriptive string can be recorded. For conditions with multiple occurrences, this describes the first known occurrence.", - "$ref": "#/definitions/Age" - }, - "onsetRange": { - "description": "Either the age of onset, range of approximate age or descriptive string can be recorded. For conditions with multiple occurrences, this describes the first known occurrence.", - "$ref": "#/definitions/Range" - }, - "onsetPeriod": { - "description": "Either the age of onset, range of approximate age or descriptive string can be recorded. For conditions with multiple occurrences, this describes the first known occurrence.", - "$ref": "#/definitions/Period" - }, - "onsetString": { - "description": "Either the age of onset, range of approximate age or descriptive string can be recorded. For conditions with multiple occurrences, this describes the first known occurrence.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_onsetString": { - "description": "Extensions for onsetString", - "$ref": "#/definitions/Element" - }, - "note": { - "description": "An area where general notes can be placed about this specific condition.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "Flag": { - "description": "Prospective warnings of potential issues when providing care to the patient.", - "properties": { - "resourceType": { - "description": "This is a Flag resource", - "const": "Flag" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this flag by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "Supports basic workflow.", - "enum": [ - "active", - "inactive", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "Allows a flag to be divided into different categories like clinical, administrative etc. Intended to be used as a means of filtering which flags are displayed to particular user or in a given context.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "code": { - "description": "The coded value or textual component of the flag to display to the user.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "The patient, location, group, organization, or practitioner etc. this is about record this flag is associated with.", - "$ref": "#/definitions/Reference" - }, - "period": { - "description": "The period of time from the activation of the flag to inactivation of the flag. If the flag is active, the end of the period should be unspecified.", - "$ref": "#/definitions/Period" - }, - "encounter": { - "description": "This alert is only relevant during the encounter.", - "$ref": "#/definitions/Reference" - }, - "author": { - "description": "The person, organization or device that created the flag.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "code", - "subject", - "resourceType" - ] - }, - "Goal": { - "description": "Describes the intended objective(s) for a patient, group or organization care, for example, weight loss, restoring an activity of daily living, obtaining herd immunity via immunization, meeting a process improvement objective, etc.", - "properties": { - "resourceType": { - "description": "This is a Goal resource", - "const": "Goal" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this goal by the performer or other systems which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "lifecycleStatus": { - "description": "The state of the goal throughout its lifecycle.", - "enum": [ - "proposed", - "planned", - "accepted", - "active", - "on-hold", - "completed", - "cancelled", - "entered-in-error", - "rejected" - ] - }, - "_lifecycleStatus": { - "description": "Extensions for lifecycleStatus", - "$ref": "#/definitions/Element" - }, - "achievementStatus": { - "description": "Describes the progression, or lack thereof, towards the goal against the target.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "Indicates a category the goal falls within.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "priority": { - "description": "Identifies the mutually agreed level of importance associated with reaching/sustaining the goal.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "Human-readable and/or coded description of a specific desired objective of care, such as \"control blood pressure\" or \"negotiate an obstacle course\" or \"dance with child at wedding\".", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "Identifies the patient, group or organization for whom the goal is being established.", - "$ref": "#/definitions/Reference" - }, - "startDate": { - "description": "The date or event after which the goal should begin being pursued.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_startDate": { - "description": "Extensions for startDate", - "$ref": "#/definitions/Element" - }, - "startCodeableConcept": { - "description": "The date or event after which the goal should begin being pursued.", - "$ref": "#/definitions/CodeableConcept" - }, - "target": { - "description": "Indicates what should be done by when.", - "items": { - "$ref": "#/definitions/Goal_Target" - }, - "type": "array" - }, - "statusDate": { - "description": "Identifies when the current status. I.e. When initially created, when achieved, when cancelled, etc.", - "$ref": "#/definitions/date" - }, - "_statusDate": { - "description": "Extensions for statusDate", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "Captures the reason for the current status.", - "$ref": "#/definitions/string" - }, - "_statusReason": { - "description": "Extensions for statusReason", - "$ref": "#/definitions/Element" - }, - "expressedBy": { - "description": "Indicates whose goal this is - patient goal, practitioner goal, etc.", - "$ref": "#/definitions/Reference" - }, - "addresses": { - "description": "The identified conditions and other health record elements that are intended to be addressed by the goal.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Any comments related to the goal.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "outcomeCode": { - "description": "Identifies the change (or lack of change) at the point when the status of the goal is assessed.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "outcomeReference": { - "description": "Details of what\u0027s changed (or not changed).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "description", - "resourceType" - ] - }, - "Goal_Target": { - "description": "Describes the intended objective(s) for a patient, group or organization care, for example, weight loss, restoring an activity of daily living, obtaining herd immunity via immunization, meeting a process improvement objective, etc.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "measure": { - "description": "The parameter whose value is being tracked, e.g. body weight, blood pressure, or hemoglobin A1c level.", - "$ref": "#/definitions/CodeableConcept" - }, - "detailQuantity": { - "description": "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", - "$ref": "#/definitions/Quantity" - }, - "detailRange": { - "description": "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", - "$ref": "#/definitions/Range" - }, - "detailCodeableConcept": { - "description": "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", - "$ref": "#/definitions/CodeableConcept" - }, - "detailString": { - "description": "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_detailString": { - "description": "Extensions for detailString", - "$ref": "#/definitions/Element" - }, - "detailBoolean": { - "description": "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_detailBoolean": { - "description": "Extensions for detailBoolean", - "$ref": "#/definitions/Element" - }, - "detailInteger": { - "description": "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_detailInteger": { - "description": "Extensions for detailInteger", - "$ref": "#/definitions/Element" - }, - "detailRatio": { - "description": "The target value of the focus to be achieved to signify the fulfillment of the goal, e.g. 150 pounds, 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any focus value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any focus value at or above the low value.", - "$ref": "#/definitions/Ratio" - }, - "dueDate": { - "description": "Indicates either the date or the duration after start by which the goal should be met.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_dueDate": { - "description": "Extensions for dueDate", - "$ref": "#/definitions/Element" - }, - "dueDuration": { - "description": "Indicates either the date or the duration after start by which the goal should be met.", - "$ref": "#/definitions/Duration" - } - }, - "additionalProperties": false - }, - "GraphDefinition": { - "description": "A formal computable definition of a graph of resources - that is, a coherent set of resources that form a graph by following references. The Graph Definition resource defines a set and makes rules about the set.", - "properties": { - "resourceType": { - "description": "This is a GraphDefinition resource", - "const": "GraphDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this graph definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this graph definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the graph definition is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The identifier that is used to identify this version of the graph definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the graph definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the graph definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this graph definition. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this graph definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the graph definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the graph definition changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the graph definition.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the graph definition from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate graph definition instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the graph definition is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this graph definition is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "start": { - "description": "The type of FHIR resource at which instances of this graph start.", - "$ref": "#/definitions/code" - }, - "_start": { - "description": "Extensions for start", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "The profile that describes the use of the base resource.", - "$ref": "#/definitions/canonical" - }, - "link": { - "description": "Links this graph makes rules about.", - "items": { - "$ref": "#/definitions/GraphDefinition_Link" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "GraphDefinition_Link": { - "description": "A formal computable definition of a graph of resources - that is, a coherent set of resources that form a graph by following references. The Graph Definition resource defines a set and makes rules about the set.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "path": { - "description": "A FHIR expression that identifies one of FHIR References to other resources.", - "$ref": "#/definitions/string" - }, - "_path": { - "description": "Extensions for path", - "$ref": "#/definitions/Element" - }, - "sliceName": { - "description": "Which slice (if profiled).", - "$ref": "#/definitions/string" - }, - "_sliceName": { - "description": "Extensions for sliceName", - "$ref": "#/definitions/Element" - }, - "min": { - "description": "Minimum occurrences for this link.", - "$ref": "#/definitions/integer" - }, - "_min": { - "description": "Extensions for min", - "$ref": "#/definitions/Element" - }, - "max": { - "description": "Maximum occurrences for this link.", - "$ref": "#/definitions/string" - }, - "_max": { - "description": "Extensions for max", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "Information about why this link is of interest in this graph definition.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "target": { - "description": "Potential target for the link.", - "items": { - "$ref": "#/definitions/GraphDefinition_Target" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "GraphDefinition_Target": { - "description": "A formal computable definition of a graph of resources - that is, a coherent set of resources that form a graph by following references. The Graph Definition resource defines a set and makes rules about the set.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of resource this link refers to.", - "$ref": "#/definitions/code" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "params": { - "description": "A set of parameters to look up.", - "$ref": "#/definitions/string" - }, - "_params": { - "description": "Extensions for params", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "Profile for the target resource.", - "$ref": "#/definitions/canonical" - }, - "compartment": { - "description": "Compartment Consistency Rules.", - "items": { - "$ref": "#/definitions/GraphDefinition_Compartment" - }, - "type": "array" - }, - "link": { - "description": "Additional links from target resource.", - "items": { - "$ref": "#/definitions/GraphDefinition_Link" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "GraphDefinition_Compartment": { - "description": "A formal computable definition of a graph of resources - that is, a coherent set of resources that form a graph by following references. The Graph Definition resource defines a set and makes rules about the set.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "use": { - "description": "Defines how the compartment rule is used - whether it it is used to test whether resources are subject to the rule, or whether it is a rule that must be followed.", - "enum": [ - "condition", - "requirement" - ] - }, - "_use": { - "description": "Extensions for use", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "Identifies the compartment.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "rule": { - "description": "identical | matching | different | no-rule | custom.", - "enum": [ - "identical", - "matching", - "different", - "custom" - ] - }, - "_rule": { - "description": "Extensions for rule", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "Custom rule, as a FHIRPath expression.", - "$ref": "#/definitions/string" - }, - "_expression": { - "description": "Extensions for expression", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "Documentation for FHIRPath expression.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Group": { - "description": "Represents a defined collection of entities that may be discussed or acted upon collectively but which are not expected to act collectively, and are not formally or legally recognized; i.e. a collection of entities that isn\u0027t an Organization.", - "properties": { - "resourceType": { - "description": "This is a Group resource", - "const": "Group" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique business identifier for this group.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "active": { - "description": "Indicates whether the record for the group is available for use or is merely being retained for historical purposes.", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Identifies the broad classification of the kind of resources the group includes.", - "enum": [ - "person", - "animal", - "practitioner", - "device", - "medication", - "substance" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "actual": { - "description": "If true, indicates that the resource refers to a specific group of real individuals. If false, the group defines a set of intended individuals.", - "$ref": "#/definitions/boolean" - }, - "_actual": { - "description": "Extensions for actual", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "Provides a specific type of resource the group includes; e.g. \"cow\", \"syringe\", etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "name": { - "description": "A label assigned to the group for human identification and communication.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "quantity": { - "description": "A count of the number of resource instances that are part of the group.", - "$ref": "#/definitions/unsignedInt" - }, - "_quantity": { - "description": "Extensions for quantity", - "$ref": "#/definitions/Element" - }, - "managingEntity": { - "description": "Entity responsible for defining and maintaining Group characteristics and/or registered members.", - "$ref": "#/definitions/Reference" - }, - "characteristic": { - "description": "Identifies traits whose presence r absence is shared by members of the group.", - "items": { - "$ref": "#/definitions/Group_Characteristic" - }, - "type": "array" - }, - "member": { - "description": "Identifies the resource instances that are members of the group.", - "items": { - "$ref": "#/definitions/Group_Member" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Group_Characteristic": { - "description": "Represents a defined collection of entities that may be discussed or acted upon collectively but which are not expected to act collectively, and are not formally or legally recognized; i.e. a collection of entities that isn\u0027t an Organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A code that identifies the kind of trait being asserted.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueCodeableConcept": { - "description": "The value of the trait that holds (or does not hold - see \u0027exclude\u0027) for members of the group.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueBoolean": { - "description": "The value of the trait that holds (or does not hold - see \u0027exclude\u0027) for members of the group.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueQuantity": { - "description": "The value of the trait that holds (or does not hold - see \u0027exclude\u0027) for members of the group.", - "$ref": "#/definitions/Quantity" - }, - "valueRange": { - "description": "The value of the trait that holds (or does not hold - see \u0027exclude\u0027) for members of the group.", - "$ref": "#/definitions/Range" - }, - "valueReference": { - "description": "The value of the trait that holds (or does not hold - see \u0027exclude\u0027) for members of the group.", - "$ref": "#/definitions/Reference" - }, - "exclude": { - "description": "If true, indicates the characteristic is one that is NOT held by members of the group.", - "$ref": "#/definitions/boolean" - }, - "_exclude": { - "description": "Extensions for exclude", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "The period over which the characteristic is tested; e.g. the patient had an operation during the month of June.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "Group_Member": { - "description": "Represents a defined collection of entities that may be discussed or acted upon collectively but which are not expected to act collectively, and are not formally or legally recognized; i.e. a collection of entities that isn\u0027t an Organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "entity": { - "description": "A reference to the entity that is a member of the group. Must be consistent with Group.type. If the entity is another group, then the type must be the same.", - "$ref": "#/definitions/Reference" - }, - "period": { - "description": "The period that the member was in the group, if known.", - "$ref": "#/definitions/Period" - }, - "inactive": { - "description": "A flag to indicate that the member is no longer in the group, but previously may have been a member.", - "$ref": "#/definitions/boolean" - }, - "_inactive": { - "description": "Extensions for inactive", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "entity" - ] - }, - "GuidanceResponse": { - "description": "A guidance response is the formal response to a guidance request, including any output parameters returned by the evaluation, as well as the description of any proposed actions to be taken.", - "properties": { - "resourceType": { - "description": "This is a GuidanceResponse resource", - "const": "GuidanceResponse" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "requestIdentifier": { - "description": "The identifier of the request associated with this response. If an identifier was given as part of the request, it will be reproduced here to enable the requester to more easily identify the response in a multi-request scenario.", - "$ref": "#/definitions/Identifier" - }, - "identifier": { - "description": "Allows a service to provide unique, business identifiers for the response.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "moduleUri": { - "description": "An identifier, CodeableConcept or canonical reference to the guidance that was requested.", - "pattern": "^\\S*$", - "type": "string" - }, - "_moduleUri": { - "description": "Extensions for moduleUri", - "$ref": "#/definitions/Element" - }, - "moduleCanonical": { - "description": "An identifier, CodeableConcept or canonical reference to the guidance that was requested.", - "pattern": "^\\S*$", - "type": "string" - }, - "_moduleCanonical": { - "description": "Extensions for moduleCanonical", - "$ref": "#/definitions/Element" - }, - "moduleCodeableConcept": { - "description": "An identifier, CodeableConcept or canonical reference to the guidance that was requested.", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "The status of the response. If the evaluation is completed successfully, the status will indicate success. However, in order to complete the evaluation, the engine may require more information. In this case, the status will be data-required, and the response will contain a description of the additional required information. If the evaluation completed successfully, but the engine determines that a potentially more accurate response could be provided if more data was available, the status will be data-requested, and the response will contain a description of the additional requested information.", - "enum": [ - "success", - "data-requested", - "data-required", - "in-progress", - "failure", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "subject": { - "description": "The patient for which the request was processed.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The encounter during which this response was created or to which the creation of this record is tightly associated.", - "$ref": "#/definitions/Reference" - }, - "occurrenceDateTime": { - "description": "Indicates when the guidance response was processed.", - "$ref": "#/definitions/dateTime" - }, - "_occurrenceDateTime": { - "description": "Extensions for occurrenceDateTime", - "$ref": "#/definitions/Element" - }, - "performer": { - "description": "Provides a reference to the device that performed the guidance.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "Describes the reason for the guidance response in coded or textual form.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Indicates the reason the request was initiated. This is typically provided as a parameter to the evaluation and echoed by the service, although for some use cases, such as subscription- or event-based scenarios, it may provide an indication of the cause for the response.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Provides a mechanism to communicate additional information about the response.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "evaluationMessage": { - "description": "Messages resulting from the evaluation of the artifact or artifacts. As part of evaluating the request, the engine may produce informational or warning messages. These messages will be provided by this element.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "outputParameters": { - "description": "The output parameters of the evaluation, if any. Many modules will result in the return of specific resources such as procedure or communication requests that are returned as part of the operation result. However, modules may define specific outputs that would be returned as the result of the evaluation, and these would be returned in this element.", - "$ref": "#/definitions/Reference" - }, - "result": { - "description": "The actions, if any, produced by the evaluation of the artifact.", - "$ref": "#/definitions/Reference" - }, - "dataRequirement": { - "description": "If the evaluation could not be completed due to lack of information, or additional information would potentially result in a more accurate response, this element will a description of the data required in order to proceed with the evaluation. A subsequent request to the service should include this data.", - "items": { - "$ref": "#/definitions/DataRequirement" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "HealthcareService": { - "description": "The details of a healthcare service available at a location.", - "properties": { - "resourceType": { - "description": "This is a HealthcareService resource", - "const": "HealthcareService" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "External identifiers for this item.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "active": { - "description": "This flag is used to mark the record to not be used. This is not used when a center is closed for maintenance, or for holidays, the notAvailable period is to be used for this.", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "providedBy": { - "description": "The organization that provides this healthcare service.", - "$ref": "#/definitions/Reference" - }, - "category": { - "description": "Identifies the broad category of service being performed or delivered.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "type": { - "description": "The specific type of service that may be delivered or performed.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "specialty": { - "description": "Collection of specialties handled by the service site. This is more of a medical term.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "location": { - "description": "The location(s) where this healthcare service may be provided.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "name": { - "description": "Further description of the service as it would be presented to a consumer while searching.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "Any additional description of the service and/or any specific issues not covered by the other attributes, which can be displayed as further detail under the serviceName.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - }, - "extraDetails": { - "description": "Extra details about the service that can\u0027t be placed in the other fields.", - "$ref": "#/definitions/markdown" - }, - "_extraDetails": { - "description": "Extensions for extraDetails", - "$ref": "#/definitions/Element" - }, - "photo": { - "description": "If there is a photo/symbol associated with this HealthcareService, it may be included here to facilitate quick identification of the service in a list.", - "$ref": "#/definitions/Attachment" - }, - "telecom": { - "description": "List of contacts related to this specific healthcare service.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "coverageArea": { - "description": "The location(s) that this service is available to (not where the service is provided).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "serviceProvisionCode": { - "description": "The code(s) that detail the conditions under which the healthcare service is available/offered.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "eligibility": { - "description": "Does this service have specific eligibility requirements that need to be met in order to use the service?", - "items": { - "$ref": "#/definitions/HealthcareService_Eligibility" - }, - "type": "array" - }, - "program": { - "description": "Programs that this service is applicable to.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "characteristic": { - "description": "Collection of characteristics (attributes).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "communication": { - "description": "Some services are specifically made available in multiple languages, this property permits a directory to declare the languages this is offered in. Typically this is only provided where a service operates in communities with mixed languages used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "referralMethod": { - "description": "Ways that the service accepts referrals, if this is not provided then it is implied that no referral is required.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "appointmentRequired": { - "description": "Indicates whether or not a prospective consumer will require an appointment for a particular service at a site to be provided by the Organization. Indicates if an appointment is required for access to this service.", - "$ref": "#/definitions/boolean" - }, - "_appointmentRequired": { - "description": "Extensions for appointmentRequired", - "$ref": "#/definitions/Element" - }, - "availableTime": { - "description": "A collection of times that the Service Site is available.", - "items": { - "$ref": "#/definitions/HealthcareService_AvailableTime" - }, - "type": "array" - }, - "notAvailable": { - "description": "The HealthcareService is not available during this period of time due to the provided reason.", - "items": { - "$ref": "#/definitions/HealthcareService_NotAvailable" - }, - "type": "array" - }, - "availabilityExceptions": { - "description": "A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.", - "$ref": "#/definitions/string" - }, - "_availabilityExceptions": { - "description": "Extensions for availabilityExceptions", - "$ref": "#/definitions/Element" - }, - "endpoint": { - "description": "Technical endpoints providing access to services operated for the specific healthcare services defined at this resource.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "HealthcareService_Eligibility": { - "description": "The details of a healthcare service available at a location.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Coded value for the eligibility.", - "$ref": "#/definitions/CodeableConcept" - }, - "comment": { - "description": "Describes the eligibility conditions for the service.", - "$ref": "#/definitions/markdown" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "HealthcareService_AvailableTime": { - "description": "The details of a healthcare service available at a location.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "daysOfWeek": { - "description": "Indicates which days of the week are available between the start and end Times.", - "items": { - "enum": [ - "mon", - "tue", - "wed", - "thu", - "fri", - "sat", - "sun" - ] - }, - "type": "array" - }, - "_daysOfWeek": { - "description": "Extensions for daysOfWeek", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "allDay": { - "description": "Is this always available? (hence times are irrelevant) e.g. 24 hour service.", - "$ref": "#/definitions/boolean" - }, - "_allDay": { - "description": "Extensions for allDay", - "$ref": "#/definitions/Element" - }, - "availableStartTime": { - "description": "The opening time of day. Note: If the AllDay flag is set, then this time is ignored.", - "$ref": "#/definitions/time" - }, - "_availableStartTime": { - "description": "Extensions for availableStartTime", - "$ref": "#/definitions/Element" - }, - "availableEndTime": { - "description": "The closing time of day. Note: If the AllDay flag is set, then this time is ignored.", - "$ref": "#/definitions/time" - }, - "_availableEndTime": { - "description": "Extensions for availableEndTime", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "HealthcareService_NotAvailable": { - "description": "The details of a healthcare service available at a location.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "The reason that can be presented to the user as to why this time is not available.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "during": { - "description": "Service is not available (seasonally or for a public holiday) from this date.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "ImagingStudy": { - "description": "Representation of the content produced in a DICOM imaging study. A study comprises a set of series, each of which includes a set of Service-Object Pair Instances (SOP Instances - images or other data) acquired or produced in a common context. A series is of only one modality (e.g. X-ray, CT, MR, ultrasound), but a study may have multiple series of different modalities.", - "properties": { - "resourceType": { - "description": "This is a ImagingStudy resource", - "const": "ImagingStudy" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers for the ImagingStudy such as DICOM Study Instance UID, and Accession Number.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The current state of the ImagingStudy.", - "enum": [ - "registered", - "available", - "cancelled", - "entered-in-error", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "modality": { - "description": "A list of all the series.modality values that are actual acquisition modalities, i.e. those in the DICOM Context Group 29 (value set OID 1.2.840.10008.6.1.19).", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "subject": { - "description": "The subject, typically a patient, of the imaging study.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The healthcare event (e.g. a patient and healthcare provider interaction) during which this ImagingStudy is made.", - "$ref": "#/definitions/Reference" - }, - "started": { - "description": "Date and time the study started.", - "$ref": "#/definitions/dateTime" - }, - "_started": { - "description": "Extensions for started", - "$ref": "#/definitions/Element" - }, - "basedOn": { - "description": "A list of the diagnostic requests that resulted in this imaging study being performed.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "referrer": { - "description": "The requesting/referring physician.", - "$ref": "#/definitions/Reference" - }, - "interpreter": { - "description": "Who read the study and interpreted the images or other content.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "endpoint": { - "description": "The network service providing access (e.g., query, view, or retrieval) for the study. See implementation notes for information about using DICOM endpoints. A study-level endpoint applies to each series in the study, unless overridden by a series-level endpoint with the same Endpoint.connectionType.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "numberOfSeries": { - "description": "Number of Series in the Study. This value given may be larger than the number of series elements this Resource contains due to resource availability, security, or other factors. This element should be present if any series elements are present.", - "$ref": "#/definitions/unsignedInt" - }, - "_numberOfSeries": { - "description": "Extensions for numberOfSeries", - "$ref": "#/definitions/Element" - }, - "numberOfInstances": { - "description": "Number of SOP Instances in Study. This value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.", - "$ref": "#/definitions/unsignedInt" - }, - "_numberOfInstances": { - "description": "Extensions for numberOfInstances", - "$ref": "#/definitions/Element" - }, - "procedureReference": { - "description": "The procedure which this ImagingStudy was part of.", - "$ref": "#/definitions/Reference" - }, - "procedureCode": { - "description": "The code for the performed procedure type.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "location": { - "description": "The principal physical location where the ImagingStudy was performed.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "Description of clinical condition indicating why the ImagingStudy was requested.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Indicates another resource whose existence justifies this Study.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Per the recommended DICOM mapping, this element is derived from the Study Description attribute (0008,1030). Observations or findings about the imaging study should be recorded in another resource, e.g. Observation, and not in this element.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "description": { - "description": "The Imaging Manager description of the study. Institution-generated description or classification of the Study (component) performed.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "series": { - "description": "Each study has one or more series of images or other content.", - "items": { - "$ref": "#/definitions/ImagingStudy_Series" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "ImagingStudy_Series": { - "description": "Representation of the content produced in a DICOM imaging study. A study comprises a set of series, each of which includes a set of Service-Object Pair Instances (SOP Instances - images or other data) acquired or produced in a common context. A series is of only one modality (e.g. X-ray, CT, MR, ultrasound), but a study may have multiple series of different modalities.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "uid": { - "description": "The DICOM Series Instance UID for the series.", - "$ref": "#/definitions/id" - }, - "_uid": { - "description": "Extensions for uid", - "$ref": "#/definitions/Element" - }, - "number": { - "description": "The numeric identifier of this series in the study.", - "$ref": "#/definitions/unsignedInt" - }, - "_number": { - "description": "Extensions for number", - "$ref": "#/definitions/Element" - }, - "modality": { - "description": "The modality of this series sequence.", - "$ref": "#/definitions/Coding" - }, - "description": { - "description": "A description of the series.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "numberOfInstances": { - "description": "Number of SOP Instances in the Study. The value given may be larger than the number of instance elements this resource contains due to resource availability, security, or other factors. This element should be present if any instance elements are present.", - "$ref": "#/definitions/unsignedInt" - }, - "_numberOfInstances": { - "description": "Extensions for numberOfInstances", - "$ref": "#/definitions/Element" - }, - "endpoint": { - "description": "The network service providing access (e.g., query, view, or retrieval) for this series. See implementation notes for information about using DICOM endpoints. A series-level endpoint, if present, has precedence over a study-level endpoint with the same Endpoint.connectionType.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "bodySite": { - "description": "The anatomic structures examined. See DICOM Part 16 Annex L (http://dicom.nema.org/medical/dicom/current/output/chtml/part16/chapter_L.html) for DICOM to SNOMED-CT mappings. The bodySite may indicate the laterality of body part imaged; if so, it shall be consistent with any content of ImagingStudy.series.laterality.", - "$ref": "#/definitions/Coding" - }, - "laterality": { - "description": "The laterality of the (possibly paired) anatomic structures examined. E.g., the left knee, both lungs, or unpaired abdomen. If present, shall be consistent with any laterality information indicated in ImagingStudy.series.bodySite.", - "$ref": "#/definitions/Coding" - }, - "specimen": { - "description": "The specimen imaged, e.g., for whole slide imaging of a biopsy.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "started": { - "description": "The date and time the series was started.", - "$ref": "#/definitions/dateTime" - }, - "_started": { - "description": "Extensions for started", - "$ref": "#/definitions/Element" - }, - "performer": { - "description": "Indicates who or what performed the series and how they were involved.", - "items": { - "$ref": "#/definitions/ImagingStudy_Performer" - }, - "type": "array" - }, - "instance": { - "description": "A single SOP instance within the series, e.g. an image, or presentation state.", - "items": { - "$ref": "#/definitions/ImagingStudy_Instance" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "modality" - ] - }, - "ImagingStudy_Performer": { - "description": "Representation of the content produced in a DICOM imaging study. A study comprises a set of series, each of which includes a set of Service-Object Pair Instances (SOP Instances - images or other data) acquired or produced in a common context. A series is of only one modality (e.g. X-ray, CT, MR, ultrasound), but a study may have multiple series of different modalities.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "function": { - "description": "Distinguishes the type of involvement of the performer in the series.", - "$ref": "#/definitions/CodeableConcept" - }, - "actor": { - "description": "Indicates who or what performed the series.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "actor" - ] - }, - "ImagingStudy_Instance": { - "description": "Representation of the content produced in a DICOM imaging study. A study comprises a set of series, each of which includes a set of Service-Object Pair Instances (SOP Instances - images or other data) acquired or produced in a common context. A series is of only one modality (e.g. X-ray, CT, MR, ultrasound), but a study may have multiple series of different modalities.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "uid": { - "description": "The DICOM SOP Instance UID for this image or other DICOM content.", - "$ref": "#/definitions/id" - }, - "_uid": { - "description": "Extensions for uid", - "$ref": "#/definitions/Element" - }, - "sopClass": { - "description": "DICOM instance type.", - "$ref": "#/definitions/Coding" - }, - "number": { - "description": "The number of instance in the series.", - "$ref": "#/definitions/unsignedInt" - }, - "_number": { - "description": "Extensions for number", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "The description of the instance.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "sopClass" - ] - }, - "Immunization": { - "description": "Describes the event of a patient being administered a vaccine or a record of an immunization as reported by a patient, a clinician or another party.", - "properties": { - "resourceType": { - "description": "This is a Immunization resource", - "const": "Immunization" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this immunization record.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "Indicates the current status of the immunization event.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "Indicates the reason the immunization event was not performed.", - "$ref": "#/definitions/CodeableConcept" - }, - "vaccineCode": { - "description": "Vaccine that was administered or was to be administered.", - "$ref": "#/definitions/CodeableConcept" - }, - "patient": { - "description": "The patient who either received or did not receive the immunization.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The visit or admission or other contact between patient and health care provider the immunization was performed as part of.", - "$ref": "#/definitions/Reference" - }, - "occurrenceDateTime": { - "description": "Date vaccine administered or was to be administered.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_occurrenceDateTime": { - "description": "Extensions for occurrenceDateTime", - "$ref": "#/definitions/Element" - }, - "occurrenceString": { - "description": "Date vaccine administered or was to be administered.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_occurrenceString": { - "description": "Extensions for occurrenceString", - "$ref": "#/definitions/Element" - }, - "recorded": { - "description": "The date the occurrence of the immunization was first captured in the record - potentially significantly after the occurrence of the event.", - "$ref": "#/definitions/dateTime" - }, - "_recorded": { - "description": "Extensions for recorded", - "$ref": "#/definitions/Element" - }, - "primarySource": { - "description": "An indication that the content of the record is based on information from the person who administered the vaccine. This reflects the context under which the data was originally recorded.", - "$ref": "#/definitions/boolean" - }, - "_primarySource": { - "description": "Extensions for primarySource", - "$ref": "#/definitions/Element" - }, - "reportOrigin": { - "description": "The source of the data when the report of the immunization event is not based on information from the person who administered the vaccine.", - "$ref": "#/definitions/CodeableConcept" - }, - "location": { - "description": "The service delivery location where the vaccine administration occurred.", - "$ref": "#/definitions/Reference" - }, - "manufacturer": { - "description": "Name of vaccine manufacturer.", - "$ref": "#/definitions/Reference" - }, - "lotNumber": { - "description": "Lot number of the vaccine product.", - "$ref": "#/definitions/string" - }, - "_lotNumber": { - "description": "Extensions for lotNumber", - "$ref": "#/definitions/Element" - }, - "expirationDate": { - "description": "Date vaccine batch expires.", - "$ref": "#/definitions/date" - }, - "_expirationDate": { - "description": "Extensions for expirationDate", - "$ref": "#/definitions/Element" - }, - "site": { - "description": "Body site where vaccine was administered.", - "$ref": "#/definitions/CodeableConcept" - }, - "route": { - "description": "The path by which the vaccine product is taken into the body.", - "$ref": "#/definitions/CodeableConcept" - }, - "doseQuantity": { - "description": "The quantity of vaccine product that was administered.", - "$ref": "#/definitions/Quantity" - }, - "performer": { - "description": "Indicates who performed the immunization event.", - "items": { - "$ref": "#/definitions/Immunization_Performer" - }, - "type": "array" - }, - "note": { - "description": "Extra information about the immunization that is not conveyed by the other attributes.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "reasonCode": { - "description": "Reasons why the vaccine was administered.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Condition, Observation or DiagnosticReport that supports why the immunization was administered.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "isSubpotent": { - "description": "Indication if a dose is considered to be subpotent. By default, a dose should be considered to be potent.", - "$ref": "#/definitions/boolean" - }, - "_isSubpotent": { - "description": "Extensions for isSubpotent", - "$ref": "#/definitions/Element" - }, - "subpotentReason": { - "description": "Reason why a dose is considered to be subpotent.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "education": { - "description": "Educational material presented to the patient (or guardian) at the time of vaccine administration.", - "items": { - "$ref": "#/definitions/Immunization_Education" - }, - "type": "array" - }, - "programEligibility": { - "description": "Indicates a patient\u0027s eligibility for a funding program.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "fundingSource": { - "description": "Indicates the source of the vaccine actually administered. This may be different than the patient eligibility (e.g. the patient may be eligible for a publically purchased vaccine but due to inventory issues, vaccine purchased with private funds was actually administered).", - "$ref": "#/definitions/CodeableConcept" - }, - "reaction": { - "description": "Categorical data indicating that an adverse event is associated in time to an immunization.", - "items": { - "$ref": "#/definitions/Immunization_Reaction" - }, - "type": "array" - }, - "protocolApplied": { - "description": "The protocol (set of recommendations) being followed by the provider who administered the dose.", - "items": { - "$ref": "#/definitions/Immunization_ProtocolApplied" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "patient", - "vaccineCode", - "resourceType" - ] - }, - "Immunization_Performer": { - "description": "Describes the event of a patient being administered a vaccine or a record of an immunization as reported by a patient, a clinician or another party.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "function": { - "description": "Describes the type of performance (e.g. ordering provider, administering provider, etc.).", - "$ref": "#/definitions/CodeableConcept" - }, - "actor": { - "description": "The practitioner or organization who performed the action.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "actor" - ] - }, - "Immunization_Education": { - "description": "Describes the event of a patient being administered a vaccine or a record of an immunization as reported by a patient, a clinician or another party.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "documentType": { - "description": "Identifier of the material presented to the patient.", - "$ref": "#/definitions/string" - }, - "_documentType": { - "description": "Extensions for documentType", - "$ref": "#/definitions/Element" - }, - "reference": { - "description": "Reference pointer to the educational material given to the patient if the information was on line.", - "$ref": "#/definitions/uri" - }, - "_reference": { - "description": "Extensions for reference", - "$ref": "#/definitions/Element" - }, - "publicationDate": { - "description": "Date the educational material was published.", - "$ref": "#/definitions/dateTime" - }, - "_publicationDate": { - "description": "Extensions for publicationDate", - "$ref": "#/definitions/Element" - }, - "presentationDate": { - "description": "Date the educational material was given to the patient.", - "$ref": "#/definitions/dateTime" - }, - "_presentationDate": { - "description": "Extensions for presentationDate", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Immunization_Reaction": { - "description": "Describes the event of a patient being administered a vaccine or a record of an immunization as reported by a patient, a clinician or another party.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "date": { - "description": "Date of reaction to the immunization.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "detail": { - "description": "Details of the reaction.", - "$ref": "#/definitions/Reference" - }, - "reported": { - "description": "Self-reported indicator.", - "$ref": "#/definitions/boolean" - }, - "_reported": { - "description": "Extensions for reported", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Immunization_ProtocolApplied": { - "description": "Describes the event of a patient being administered a vaccine or a record of an immunization as reported by a patient, a clinician or another party.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "series": { - "description": "One possible path to achieve presumed immunity against a disease - within the context of an authority.", - "$ref": "#/definitions/string" - }, - "_series": { - "description": "Extensions for series", - "$ref": "#/definitions/Element" - }, - "authority": { - "description": "Indicates the authority who published the protocol (e.g. ACIP) that is being followed.", - "$ref": "#/definitions/Reference" - }, - "targetDisease": { - "description": "The vaccine preventable disease the dose is being administered against.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "doseNumberPositiveInt": { - "description": "Nominal position in a series.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_doseNumberPositiveInt": { - "description": "Extensions for doseNumberPositiveInt", - "$ref": "#/definitions/Element" - }, - "doseNumberString": { - "description": "Nominal position in a series.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_doseNumberString": { - "description": "Extensions for doseNumberString", - "$ref": "#/definitions/Element" - }, - "seriesDosesPositiveInt": { - "description": "The recommended number of doses to achieve immunity.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_seriesDosesPositiveInt": { - "description": "Extensions for seriesDosesPositiveInt", - "$ref": "#/definitions/Element" - }, - "seriesDosesString": { - "description": "The recommended number of doses to achieve immunity.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_seriesDosesString": { - "description": "Extensions for seriesDosesString", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ImmunizationEvaluation": { - "description": "Describes a comparison of an immunization event against published recommendations to determine if the administration is \"valid\" in relation to those recommendations.", - "properties": { - "resourceType": { - "description": "This is a ImmunizationEvaluation resource", - "const": "ImmunizationEvaluation" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this immunization evaluation record.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "Indicates the current status of the evaluation of the vaccination administration event.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "patient": { - "description": "The individual for whom the evaluation is being done.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date the evaluation of the vaccine administration event was performed.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "authority": { - "description": "Indicates the authority who published the protocol (e.g. ACIP).", - "$ref": "#/definitions/Reference" - }, - "targetDisease": { - "description": "The vaccine preventable disease the dose is being evaluated against.", - "$ref": "#/definitions/CodeableConcept" - }, - "immunizationEvent": { - "description": "The vaccine administration event being evaluated.", - "$ref": "#/definitions/Reference" - }, - "doseStatus": { - "description": "Indicates if the dose is valid or not valid with respect to the published recommendations.", - "$ref": "#/definitions/CodeableConcept" - }, - "doseStatusReason": { - "description": "Provides an explanation as to why the vaccine administration event is valid or not relative to the published recommendations.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "description": { - "description": "Additional information about the evaluation.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "series": { - "description": "One possible path to achieve presumed immunity against a disease - within the context of an authority.", - "$ref": "#/definitions/string" - }, - "_series": { - "description": "Extensions for series", - "$ref": "#/definitions/Element" - }, - "doseNumberPositiveInt": { - "description": "Nominal position in a series.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_doseNumberPositiveInt": { - "description": "Extensions for doseNumberPositiveInt", - "$ref": "#/definitions/Element" - }, - "doseNumberString": { - "description": "Nominal position in a series.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_doseNumberString": { - "description": "Extensions for doseNumberString", - "$ref": "#/definitions/Element" - }, - "seriesDosesPositiveInt": { - "description": "The recommended number of doses to achieve immunity.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_seriesDosesPositiveInt": { - "description": "Extensions for seriesDosesPositiveInt", - "$ref": "#/definitions/Element" - }, - "seriesDosesString": { - "description": "The recommended number of doses to achieve immunity.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_seriesDosesString": { - "description": "Extensions for seriesDosesString", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "doseStatus", - "patient", - "targetDisease", - "immunizationEvent", - "resourceType" - ] - }, - "ImmunizationRecommendation": { - "description": "A patient\u0027s point-in-time set of recommendations (i.e. forecasting) according to a published schedule with optional supporting justification.", - "properties": { - "resourceType": { - "description": "This is a ImmunizationRecommendation resource", - "const": "ImmunizationRecommendation" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this particular recommendation record.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "patient": { - "description": "The patient the recommendation(s) are for.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date the immunization recommendation(s) were created.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "authority": { - "description": "Indicates the authority who published the protocol (e.g. ACIP).", - "$ref": "#/definitions/Reference" - }, - "recommendation": { - "description": "Vaccine administration recommendations.", - "items": { - "$ref": "#/definitions/ImmunizationRecommendation_Recommendation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "patient", - "recommendation", - "resourceType" - ] - }, - "ImmunizationRecommendation_Recommendation": { - "description": "A patient\u0027s point-in-time set of recommendations (i.e. forecasting) according to a published schedule with optional supporting justification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "vaccineCode": { - "description": "Vaccine(s) or vaccine group that pertain to the recommendation.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "targetDisease": { - "description": "The targeted disease for the recommendation.", - "$ref": "#/definitions/CodeableConcept" - }, - "contraindicatedVaccineCode": { - "description": "Vaccine(s) which should not be used to fulfill the recommendation.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "forecastStatus": { - "description": "Indicates the patient status with respect to the path to immunity for the target disease.", - "$ref": "#/definitions/CodeableConcept" - }, - "forecastReason": { - "description": "The reason for the assigned forecast status.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "dateCriterion": { - "description": "Vaccine date recommendations. For example, earliest date to administer, latest date to administer, etc.", - "items": { - "$ref": "#/definitions/ImmunizationRecommendation_DateCriterion" - }, - "type": "array" - }, - "description": { - "description": "Contains the description about the protocol under which the vaccine was administered.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "series": { - "description": "One possible path to achieve presumed immunity against a disease - within the context of an authority.", - "$ref": "#/definitions/string" - }, - "_series": { - "description": "Extensions for series", - "$ref": "#/definitions/Element" - }, - "doseNumberPositiveInt": { - "description": "Nominal position of the recommended dose in a series (e.g. dose 2 is the next recommended dose).", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_doseNumberPositiveInt": { - "description": "Extensions for doseNumberPositiveInt", - "$ref": "#/definitions/Element" - }, - "doseNumberString": { - "description": "Nominal position of the recommended dose in a series (e.g. dose 2 is the next recommended dose).", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_doseNumberString": { - "description": "Extensions for doseNumberString", - "$ref": "#/definitions/Element" - }, - "seriesDosesPositiveInt": { - "description": "The recommended number of doses to achieve immunity.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_seriesDosesPositiveInt": { - "description": "Extensions for seriesDosesPositiveInt", - "$ref": "#/definitions/Element" - }, - "seriesDosesString": { - "description": "The recommended number of doses to achieve immunity.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_seriesDosesString": { - "description": "Extensions for seriesDosesString", - "$ref": "#/definitions/Element" - }, - "supportingImmunization": { - "description": "Immunization event history and/or evaluation that supports the status and recommendation.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "supportingPatientInformation": { - "description": "Patient Information that supports the status and recommendation. This includes patient observations, adverse reactions and allergy/intolerance information.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "forecastStatus" - ] - }, - "ImmunizationRecommendation_DateCriterion": { - "description": "A patient\u0027s point-in-time set of recommendations (i.e. forecasting) according to a published schedule with optional supporting justification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Date classification of recommendation. For example, earliest date to give, latest date to give, etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "value": { - "description": "The date whose meaning is specified by dateCriterion.code.", - "$ref": "#/definitions/dateTime" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "ImplementationGuide": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "resourceType": { - "description": "This is a ImplementationGuide resource", - "const": "ImplementationGuide" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this implementation guide when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this implementation guide is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the implementation guide is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The identifier that is used to identify this version of the implementation guide when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the implementation guide author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the implementation guide. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the implementation guide.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this implementation guide. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this implementation guide is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the implementation guide was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the implementation guide changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the implementation guide.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the implementation guide from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate implementation guide instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the implementation guide is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "copyright": { - "description": "A copyright statement relating to the implementation guide and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the implementation guide.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "packageId": { - "description": "The NPM package name for this Implementation Guide, used in the NPM package distribution, which is the primary mechanism by which FHIR based tooling manages IG dependencies. This value must be globally unique, and should be assigned with care.", - "$ref": "#/definitions/id" - }, - "_packageId": { - "description": "Extensions for packageId", - "$ref": "#/definitions/Element" - }, - "license": { - "description": "The license that applies to this Implementation Guide, using an SPDX license code, or \u0027not-open-source\u0027.", - "enum": [ - "not-open-source", - "0BSD", - "AAL", - "Abstyles", - "Adobe-2006", - "Adobe-Glyph", - "ADSL", - "AFL-1.1", - "AFL-1.2", - "AFL-2.0", - "AFL-2.1", - "AFL-3.0", - "Afmparse", - "AGPL-1.0-only", - "AGPL-1.0-or-later", - "AGPL-3.0-only", - "AGPL-3.0-or-later", - "Aladdin", - "AMDPLPA", - "AML", - "AMPAS", - "ANTLR-PD", - "Apache-1.0", - "Apache-1.1", - "Apache-2.0", - "APAFML", - "APL-1.0", - "APSL-1.0", - "APSL-1.1", - "APSL-1.2", - "APSL-2.0", - "Artistic-1.0-cl8", - "Artistic-1.0-Perl", - "Artistic-1.0", - "Artistic-2.0", - "Bahyph", - "Barr", - "Beerware", - "BitTorrent-1.0", - "BitTorrent-1.1", - "Borceux", - "BSD-1-Clause", - "BSD-2-Clause-FreeBSD", - "BSD-2-Clause-NetBSD", - "BSD-2-Clause-Patent", - "BSD-2-Clause", - "BSD-3-Clause-Attribution", - "BSD-3-Clause-Clear", - "BSD-3-Clause-LBNL", - "BSD-3-Clause-No-Nuclear-License-2014", - "BSD-3-Clause-No-Nuclear-License", - "BSD-3-Clause-No-Nuclear-Warranty", - "BSD-3-Clause", - "BSD-4-Clause-UC", - "BSD-4-Clause", - "BSD-Protection", - "BSD-Source-Code", - "BSL-1.0", - "bzip2-1.0.5", - "bzip2-1.0.6", - "Caldera", - "CATOSL-1.1", - "CC-BY-1.0", - "CC-BY-2.0", - "CC-BY-2.5", - "CC-BY-3.0", - "CC-BY-4.0", - "CC-BY-NC-1.0", - "CC-BY-NC-2.0", - "CC-BY-NC-2.5", - "CC-BY-NC-3.0", - "CC-BY-NC-4.0", - "CC-BY-NC-ND-1.0", - "CC-BY-NC-ND-2.0", - "CC-BY-NC-ND-2.5", - "CC-BY-NC-ND-3.0", - "CC-BY-NC-ND-4.0", - "CC-BY-NC-SA-1.0", - "CC-BY-NC-SA-2.0", - "CC-BY-NC-SA-2.5", - "CC-BY-NC-SA-3.0", - "CC-BY-NC-SA-4.0", - "CC-BY-ND-1.0", - "CC-BY-ND-2.0", - "CC-BY-ND-2.5", - "CC-BY-ND-3.0", - "CC-BY-ND-4.0", - "CC-BY-SA-1.0", - "CC-BY-SA-2.0", - "CC-BY-SA-2.5", - "CC-BY-SA-3.0", - "CC-BY-SA-4.0", - "CC0-1.0", - "CDDL-1.0", - "CDDL-1.1", - "CDLA-Permissive-1.0", - "CDLA-Sharing-1.0", - "CECILL-1.0", - "CECILL-1.1", - "CECILL-2.0", - "CECILL-2.1", - "CECILL-B", - "CECILL-C", - "ClArtistic", - "CNRI-Jython", - "CNRI-Python-GPL-Compatible", - "CNRI-Python", - "Condor-1.1", - "CPAL-1.0", - "CPL-1.0", - "CPOL-1.02", - "Crossword", - "CrystalStacker", - "CUA-OPL-1.0", - "Cube", - "curl", - "D-FSL-1.0", - "diffmark", - "DOC", - "Dotseqn", - "DSDP", - "dvipdfm", - "ECL-1.0", - "ECL-2.0", - "EFL-1.0", - "EFL-2.0", - "eGenix", - "Entessa", - "EPL-1.0", - "EPL-2.0", - "ErlPL-1.1", - "EUDatagrid", - "EUPL-1.0", - "EUPL-1.1", - "EUPL-1.2", - "Eurosym", - "Fair", - "Frameworx-1.0", - "FreeImage", - "FSFAP", - "FSFUL", - "FSFULLR", - "FTL", - "GFDL-1.1-only", - "GFDL-1.1-or-later", - "GFDL-1.2-only", - "GFDL-1.2-or-later", - "GFDL-1.3-only", - "GFDL-1.3-or-later", - "Giftware", - "GL2PS", - "Glide", - "Glulxe", - "gnuplot", - "GPL-1.0-only", - "GPL-1.0-or-later", - "GPL-2.0-only", - "GPL-2.0-or-later", - "GPL-3.0-only", - "GPL-3.0-or-later", - "gSOAP-1.3b", - "HaskellReport", - "HPND", - "IBM-pibs", - "ICU", - "IJG", - "ImageMagick", - "iMatix", - "Imlib2", - "Info-ZIP", - "Intel-ACPI", - "Intel", - "Interbase-1.0", - "IPA", - "IPL-1.0", - "ISC", - "JasPer-2.0", - "JSON", - "LAL-1.2", - "LAL-1.3", - "Latex2e", - "Leptonica", - "LGPL-2.0-only", - "LGPL-2.0-or-later", - "LGPL-2.1-only", - "LGPL-2.1-or-later", - "LGPL-3.0-only", - "LGPL-3.0-or-later", - "LGPLLR", - "Libpng", - "libtiff", - "LiLiQ-P-1.1", - "LiLiQ-R-1.1", - "LiLiQ-Rplus-1.1", - "Linux-OpenIB", - "LPL-1.0", - "LPL-1.02", - "LPPL-1.0", - "LPPL-1.1", - "LPPL-1.2", - "LPPL-1.3a", - "LPPL-1.3c", - "MakeIndex", - "MirOS", - "MIT-0", - "MIT-advertising", - "MIT-CMU", - "MIT-enna", - "MIT-feh", - "MIT", - "MITNFA", - "Motosoto", - "mpich2", - "MPL-1.0", - "MPL-1.1", - "MPL-2.0-no-copyleft-exception", - "MPL-2.0", - "MS-PL", - "MS-RL", - "MTLL", - "Multics", - "Mup", - "NASA-1.3", - "Naumen", - "NBPL-1.0", - "NCSA", - "Net-SNMP", - "NetCDF", - "Newsletr", - "NGPL", - "NLOD-1.0", - "NLPL", - "Nokia", - "NOSL", - "Noweb", - "NPL-1.0", - "NPL-1.1", - "NPOSL-3.0", - "NRL", - "NTP", - "OCCT-PL", - "OCLC-2.0", - "ODbL-1.0", - "OFL-1.0", - "OFL-1.1", - "OGTSL", - "OLDAP-1.1", - "OLDAP-1.2", - "OLDAP-1.3", - "OLDAP-1.4", - "OLDAP-2.0.1", - "OLDAP-2.0", - "OLDAP-2.1", - "OLDAP-2.2.1", - "OLDAP-2.2.2", - "OLDAP-2.2", - "OLDAP-2.3", - "OLDAP-2.4", - "OLDAP-2.5", - "OLDAP-2.6", - "OLDAP-2.7", - "OLDAP-2.8", - "OML", - "OpenSSL", - "OPL-1.0", - "OSET-PL-2.1", - "OSL-1.0", - "OSL-1.1", - "OSL-2.0", - "OSL-2.1", - "OSL-3.0", - "PDDL-1.0", - "PHP-3.0", - "PHP-3.01", - "Plexus", - "PostgreSQL", - "psfrag", - "psutils", - "Python-2.0", - "Qhull", - "QPL-1.0", - "Rdisc", - "RHeCos-1.1", - "RPL-1.1", - "RPL-1.5", - "RPSL-1.0", - "RSA-MD", - "RSCPL", - "Ruby", - "SAX-PD", - "Saxpath", - "SCEA", - "Sendmail", - "SGI-B-1.0", - "SGI-B-1.1", - "SGI-B-2.0", - "SimPL-2.0", - "SISSL-1.2", - "SISSL", - "Sleepycat", - "SMLNJ", - "SMPPL", - "SNIA", - "Spencer-86", - "Spencer-94", - "Spencer-99", - "SPL-1.0", - "SugarCRM-1.1.3", - "SWL", - "TCL", - "TCP-wrappers", - "TMate", - "TORQUE-1.1", - "TOSL", - "Unicode-DFS-2015", - "Unicode-DFS-2016", - "Unicode-TOU", - "Unlicense", - "UPL-1.0", - "Vim", - "VOSTROM", - "VSL-1.0", - "W3C-19980720", - "W3C-20150513", - "W3C", - "Watcom-1.0", - "Wsuipa", - "WTFPL", - "X11", - "Xerox", - "XFree86-1.1", - "xinetd", - "Xnet", - "xpp", - "XSkat", - "YPL-1.0", - "YPL-1.1", - "Zed", - "Zend-2.0", - "Zimbra-1.3", - "Zimbra-1.4", - "zlib-acknowledgement", - "Zlib", - "ZPL-1.1", - "ZPL-2.0", - "ZPL-2.1" - ] - }, - "_license": { - "description": "Extensions for license", - "$ref": "#/definitions/Element" - }, - "fhirVersion": { - "description": "The version(s) of the FHIR specification that this ImplementationGuide targets - e.g. describes how to use. The value of this element is the formal version of the specification, without the revision number, e.g. [publication].[major].[minor], which is 4.0.0. for this version.", - "items": { - "enum": [ - "0.01", - "0.05", - "0.06", - "0.11", - "0.0.80", - "0.0.81", - "0.0.82", - "0.4.0", - "0.5.0", - "1.0.0", - "1.0.1", - "1.0.2", - "1.1.0", - "1.4.0", - "1.6.0", - "1.8.0", - "3.0.0", - "3.0.1", - "3.3.0", - "3.5.0", - "4.0.0" - ] - }, - "type": "array" - }, - "_fhirVersion": { - "description": "Extensions for fhirVersion", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "dependsOn": { - "description": "Another implementation guide that this implementation depends on. Typically, an implementation guide uses value sets, profiles etc.defined in other implementation guides.", - "items": { - "$ref": "#/definitions/ImplementationGuide_DependsOn" - }, - "type": "array" - }, - "global": { - "description": "A set of profiles that all resources covered by this implementation guide must conform to.", - "items": { - "$ref": "#/definitions/ImplementationGuide_Global" - }, - "type": "array" - }, - "definition": { - "description": "The information needed by an IG publisher tool to publish the whole implementation guide.", - "$ref": "#/definitions/ImplementationGuide_Definition" - }, - "manifest": { - "description": "Information about an assembled implementation guide, created by the publication tooling.", - "$ref": "#/definitions/ImplementationGuide_Manifest" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "ImplementationGuide_DependsOn": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "uri": { - "description": "A canonical reference to the Implementation guide for the dependency.", - "$ref": "#/definitions/canonical" - }, - "packageId": { - "description": "The NPM package name for the Implementation Guide that this IG depends on.", - "$ref": "#/definitions/id" - }, - "_packageId": { - "description": "Extensions for packageId", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The version of the IG that is depended on, when the correct version is required to understand the IG correctly.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "uri" - ] - }, - "ImplementationGuide_Global": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of resource that all instances must conform to.", - "$ref": "#/definitions/code" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "A reference to the profile that all instances must conform to.", - "$ref": "#/definitions/canonical" - } - }, - "additionalProperties": false, - "required": [ - "profile" - ] - }, - "ImplementationGuide_Definition": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "grouping": { - "description": "A logical group of resources. Logical groups can be used when building pages.", - "items": { - "$ref": "#/definitions/ImplementationGuide_Grouping" - }, - "type": "array" - }, - "resource": { - "description": "A resource that is part of the implementation guide. Conformance resources (value set, structure definition, capability statements etc.) are obvious candidates for inclusion, but any kind of resource can be included as an example resource.", - "items": { - "$ref": "#/definitions/ImplementationGuide_Resource" - }, - "type": "array" - }, - "page": { - "description": "A page / section in the implementation guide. The root page is the implementation guide home page.", - "$ref": "#/definitions/ImplementationGuide_Page" - }, - "parameter": { - "description": "Defines how IG is built by tools.", - "items": { - "$ref": "#/definitions/ImplementationGuide_Parameter" - }, - "type": "array" - }, - "template": { - "description": "A template for building resources.", - "items": { - "$ref": "#/definitions/ImplementationGuide_Template" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resource" - ] - }, - "ImplementationGuide_Grouping": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The human-readable title to display for the package of resources when rendering the implementation guide.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "Human readable text describing the package.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ImplementationGuide_Resource": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "reference": { - "description": "Where this resource is found.", - "$ref": "#/definitions/Reference" - }, - "fhirVersion": { - "description": "Indicates the FHIR Version(s) this artifact is intended to apply to. If no versions are specified, the resource is assumed to apply to all the versions stated in ImplementationGuide.fhirVersion.", - "items": { - "enum": [ - "0.01", - "0.05", - "0.06", - "0.11", - "0.0.80", - "0.0.81", - "0.0.82", - "0.4.0", - "0.5.0", - "1.0.0", - "1.0.1", - "1.0.2", - "1.1.0", - "1.4.0", - "1.6.0", - "1.8.0", - "3.0.0", - "3.0.1", - "3.3.0", - "3.5.0", - "4.0.0" - ] - }, - "type": "array" - }, - "_fhirVersion": { - "description": "Extensions for fhirVersion", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "name": { - "description": "A human assigned name for the resource. All resources SHOULD have a name, but the name may be extracted from the resource (e.g. ValueSet.name).", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A description of the reason that a resource has been included in the implementation guide.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "exampleBoolean": { - "description": "If true or a reference, indicates the resource is an example instance. If a reference is present, indicates that the example is an example of the specified profile.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_exampleBoolean": { - "description": "Extensions for exampleBoolean", - "$ref": "#/definitions/Element" - }, - "exampleCanonical": { - "description": "If true or a reference, indicates the resource is an example instance. If a reference is present, indicates that the example is an example of the specified profile.", - "pattern": "^\\S*$", - "type": "string" - }, - "_exampleCanonical": { - "description": "Extensions for exampleCanonical", - "$ref": "#/definitions/Element" - }, - "groupingId": { - "description": "Reference to the id of the grouping this resource appears in.", - "$ref": "#/definitions/id" - }, - "_groupingId": { - "description": "Extensions for groupingId", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "reference" - ] - }, - "ImplementationGuide_Page": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "nameUrl": { - "description": "The source address for the page.", - "pattern": "^\\S*$", - "type": "string" - }, - "_nameUrl": { - "description": "Extensions for nameUrl", - "$ref": "#/definitions/Element" - }, - "nameReference": { - "description": "The source address for the page.", - "$ref": "#/definitions/Reference" - }, - "title": { - "description": "A short title used to represent this page in navigational structures such as table of contents, bread crumbs, etc.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "generation": { - "description": "A code that indicates how the page is generated.", - "enum": [ - "html", - "markdown", - "xml", - "generated" - ] - }, - "_generation": { - "description": "Extensions for generation", - "$ref": "#/definitions/Element" - }, - "page": { - "description": "Nested Pages/Sections under this page.", - "items": { - "$ref": "#/definitions/ImplementationGuide_Page" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ImplementationGuide_Parameter": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "apply | path-resource | path-pages | path-tx-cache | expansion-parameter | rule-broken-links | generate-xml | generate-json | generate-turtle | html-template.", - "enum": [ - "apply", - "path-resource", - "path-pages", - "path-tx-cache", - "expansion-parameter", - "rule-broken-links", - "generate-xml", - "generate-json", - "generate-turtle", - "html-template" - ] - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "value": { - "description": "Value for named type.", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ImplementationGuide_Template": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Type of template specified.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "source": { - "description": "The source location for the template.", - "$ref": "#/definitions/string" - }, - "_source": { - "description": "Extensions for source", - "$ref": "#/definitions/Element" - }, - "scope": { - "description": "The scope in which the template applies.", - "$ref": "#/definitions/string" - }, - "_scope": { - "description": "Extensions for scope", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ImplementationGuide_Manifest": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "rendering": { - "description": "A pointer to official web page, PDF or other rendering of the implementation guide.", - "$ref": "#/definitions/url" - }, - "_rendering": { - "description": "Extensions for rendering", - "$ref": "#/definitions/Element" - }, - "resource": { - "description": "A resource that is part of the implementation guide. Conformance resources (value set, structure definition, capability statements etc.) are obvious candidates for inclusion, but any kind of resource can be included as an example resource.", - "items": { - "$ref": "#/definitions/ImplementationGuide_Resource1" - }, - "type": "array" - }, - "page": { - "description": "Information about a page within the IG.", - "items": { - "$ref": "#/definitions/ImplementationGuide_Page1" - }, - "type": "array" - }, - "image": { - "description": "Indicates a relative path to an image that exists within the IG.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_image": { - "description": "Extensions for image", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "other": { - "description": "Indicates the relative path of an additional non-page, non-image file that is part of the IG - e.g. zip, jar and similar files that could be the target of a hyperlink in a derived IG.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_other": { - "description": "Extensions for other", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resource" - ] - }, - "ImplementationGuide_Resource1": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "reference": { - "description": "Where this resource is found.", - "$ref": "#/definitions/Reference" - }, - "exampleBoolean": { - "description": "If true or a reference, indicates the resource is an example instance. If a reference is present, indicates that the example is an example of the specified profile.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_exampleBoolean": { - "description": "Extensions for exampleBoolean", - "$ref": "#/definitions/Element" - }, - "exampleCanonical": { - "description": "If true or a reference, indicates the resource is an example instance. If a reference is present, indicates that the example is an example of the specified profile.", - "pattern": "^\\S*$", - "type": "string" - }, - "_exampleCanonical": { - "description": "Extensions for exampleCanonical", - "$ref": "#/definitions/Element" - }, - "relativePath": { - "description": "The relative path for primary page for this resource within the IG.", - "$ref": "#/definitions/url" - }, - "_relativePath": { - "description": "Extensions for relativePath", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "reference" - ] - }, - "ImplementationGuide_Page1": { - "description": "A set of rules of how a particular interoperability or standards problem is solved - typically through the use of FHIR resources. This resource is used to gather all the parts of an implementation guide into a logical whole and to publish a computable definition of all the parts.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Relative path to the page.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "Label for the page intended for human display.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "anchor": { - "description": "The name of an anchor available on the page.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_anchor": { - "description": "Extensions for anchor", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "InsurancePlan": { - "description": "Details of a Health Insurance product/plan provided by an organization.", - "properties": { - "resourceType": { - "description": "This is a InsurancePlan resource", - "const": "InsurancePlan" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this health insurance product which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The current state of the health insurance product.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The kind of health insurance product.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "name": { - "description": "Official name of the health insurance product as designated by the owner.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "alias": { - "description": "A list of alternate names that the product is known as, or was known as in the past.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_alias": { - "description": "Extensions for alias", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "period": { - "description": "The period of time that the health insurance product is available.", - "$ref": "#/definitions/Period" - }, - "ownedBy": { - "description": "The entity that is providing the health insurance product and underwriting the risk. This is typically an insurance carriers, other third-party payers, or health plan sponsors comonly referred to as \u0027payers\u0027.", - "$ref": "#/definitions/Reference" - }, - "administeredBy": { - "description": "An organization which administer other services such as underwriting, customer service and/or claims processing on behalf of the health insurance product owner.", - "$ref": "#/definitions/Reference" - }, - "coverageArea": { - "description": "The geographic region in which a health insurance product\u0027s benefits apply.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "contact": { - "description": "The contact for the health insurance product for a certain purpose.", - "items": { - "$ref": "#/definitions/InsurancePlan_Contact" - }, - "type": "array" - }, - "endpoint": { - "description": "The technical endpoints providing access to services operated for the health insurance product.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "network": { - "description": "Reference to the network included in the health insurance product.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "coverage": { - "description": "Details about the coverage offered by the insurance product.", - "items": { - "$ref": "#/definitions/InsurancePlan_Coverage" - }, - "type": "array" - }, - "plan": { - "description": "Details about an insurance plan.", - "items": { - "$ref": "#/definitions/InsurancePlan_Plan" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "InsurancePlan_Contact": { - "description": "Details of a Health Insurance product/plan provided by an organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "purpose": { - "description": "Indicates a purpose for which the contact can be reached.", - "$ref": "#/definitions/CodeableConcept" - }, - "name": { - "description": "A name associated with the contact.", - "$ref": "#/definitions/HumanName" - }, - "telecom": { - "description": "A contact detail (e.g. a telephone number or an email address) by which the party may be contacted.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "address": { - "description": "Visiting or postal addresses for the contact.", - "$ref": "#/definitions/Address" - } - }, - "additionalProperties": false - }, - "InsurancePlan_Coverage": { - "description": "Details of a Health Insurance product/plan provided by an organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of coverage (Medical; Dental; Mental Health; Substance Abuse; Vision; Drug; Short Term; Long Term Care; Hospice; Home Health).", - "$ref": "#/definitions/CodeableConcept" - }, - "network": { - "description": "Reference to the network that providing the type of coverage.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "benefit": { - "description": "Specific benefits under this type of coverage.", - "items": { - "$ref": "#/definitions/InsurancePlan_Benefit" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "type", - "benefit" - ] - }, - "InsurancePlan_Benefit": { - "description": "Details of a Health Insurance product/plan provided by an organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of benefit (primary care; speciality care; inpatient; outpatient).", - "$ref": "#/definitions/CodeableConcept" - }, - "requirement": { - "description": "The referral requirements to have access/coverage for this benefit.", - "$ref": "#/definitions/string" - }, - "_requirement": { - "description": "Extensions for requirement", - "$ref": "#/definitions/Element" - }, - "limit": { - "description": "The specific limits on the benefit.", - "items": { - "$ref": "#/definitions/InsurancePlan_Limit" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "InsurancePlan_Limit": { - "description": "Details of a Health Insurance product/plan provided by an organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "value": { - "description": "The maximum amount of a service item a plan will pay for a covered benefit. For examples. wellness visits, or eyeglasses.", - "$ref": "#/definitions/Quantity" - }, - "code": { - "description": "The specific limit on the benefit.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "InsurancePlan_Plan": { - "description": "Details of a Health Insurance product/plan provided by an organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this health insurance plan which remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "type": { - "description": "Type of plan. For example, \"Platinum\" or \"High Deductable\".", - "$ref": "#/definitions/CodeableConcept" - }, - "coverageArea": { - "description": "The geographic region in which a health insurance plan\u0027s benefits apply.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "network": { - "description": "Reference to the network that providing the type of coverage.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "generalCost": { - "description": "Overall costs associated with the plan.", - "items": { - "$ref": "#/definitions/InsurancePlan_GeneralCost" - }, - "type": "array" - }, - "specificCost": { - "description": "Costs associated with the coverage provided by the product.", - "items": { - "$ref": "#/definitions/InsurancePlan_SpecificCost" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "InsurancePlan_GeneralCost": { - "description": "Details of a Health Insurance product/plan provided by an organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of cost.", - "$ref": "#/definitions/CodeableConcept" - }, - "groupSize": { - "description": "Number of participants enrolled in the plan.", - "$ref": "#/definitions/positiveInt" - }, - "_groupSize": { - "description": "Extensions for groupSize", - "$ref": "#/definitions/Element" - }, - "cost": { - "description": "Value of the cost.", - "$ref": "#/definitions/Money" - }, - "comment": { - "description": "Additional information about the general costs associated with this plan.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "InsurancePlan_SpecificCost": { - "description": "Details of a Health Insurance product/plan provided by an organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "category": { - "description": "General category of benefit (Medical; Dental; Vision; Drug; Mental Health; Substance Abuse; Hospice, Home Health).", - "$ref": "#/definitions/CodeableConcept" - }, - "benefit": { - "description": "List of the specific benefits under this category of benefit.", - "items": { - "$ref": "#/definitions/InsurancePlan_Benefit1" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "category" - ] - }, - "InsurancePlan_Benefit1": { - "description": "Details of a Health Insurance product/plan provided by an organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of specific benefit (preventative; primary care office visit; speciality office visit; hospitalization; emergency room; urgent care).", - "$ref": "#/definitions/CodeableConcept" - }, - "cost": { - "description": "List of the costs associated with a specific benefit.", - "items": { - "$ref": "#/definitions/InsurancePlan_Cost" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "InsurancePlan_Cost": { - "description": "Details of a Health Insurance product/plan provided by an organization.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of cost (copay; individual cap; family cap; coinsurance; deductible).", - "$ref": "#/definitions/CodeableConcept" - }, - "applicability": { - "description": "Whether the cost applies to in-network or out-of-network providers (in-network; out-of-network; other).", - "$ref": "#/definitions/CodeableConcept" - }, - "qualifiers": { - "description": "Additional information about the cost, such as information about funding sources (e.g. HSA, HRA, FSA, RRA).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "value": { - "description": "The actual cost value. (some of the costs may be represented as percentages rather than currency, e.g. 10% coinsurance).", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "Invoice": { - "description": "Invoice containing collected ChargeItems from an Account with calculated individual and total price for Billing purpose.", - "properties": { - "resourceType": { - "description": "This is a Invoice resource", - "const": "Invoice" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier of this Invoice, often used for reference in correspondence about this invoice or for tracking of payments.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The current state of the Invoice.", - "enum": [ - "draft", - "issued", - "balanced", - "cancelled", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "cancelledReason": { - "description": "In case of Invoice cancellation a reason must be given (entered in error, superseded by corrected invoice etc.).", - "$ref": "#/definitions/string" - }, - "_cancelledReason": { - "description": "Extensions for cancelledReason", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Type of Invoice depending on domain, realm an usage (e.g. internal/external, dental, preliminary).", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "The individual or set of individuals receiving the goods and services billed in this invoice.", - "$ref": "#/definitions/Reference" - }, - "recipient": { - "description": "The individual or Organization responsible for balancing of this invoice.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "Date/time(s) of when this Invoice was posted.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "participant": { - "description": "Indicates who or what performed or participated in the charged service.", - "items": { - "$ref": "#/definitions/Invoice_Participant" - }, - "type": "array" - }, - "issuer": { - "description": "The organizationissuing the Invoice.", - "$ref": "#/definitions/Reference" - }, - "account": { - "description": "Account which is supposed to be balanced with this Invoice.", - "$ref": "#/definitions/Reference" - }, - "lineItem": { - "description": "Each line item represents one charge for goods and services rendered. Details such as date, code and amount are found in the referenced ChargeItem resource.", - "items": { - "$ref": "#/definitions/Invoice_LineItem" - }, - "type": "array" - }, - "totalPriceComponent": { - "description": "The total amount for the Invoice may be calculated as the sum of the line items with surcharges/deductions that apply in certain conditions. The priceComponent element can be used to offer transparency to the recipient of the Invoice of how the total price was calculated.", - "items": { - "$ref": "#/definitions/Invoice_PriceComponent" - }, - "type": "array" - }, - "totalNet": { - "description": "Invoice total , taxes excluded.", - "$ref": "#/definitions/Money" - }, - "totalGross": { - "description": "Invoice total, tax included.", - "$ref": "#/definitions/Money" - }, - "paymentTerms": { - "description": "Payment details such as banking details, period of payment, deductibles, methods of payment.", - "$ref": "#/definitions/markdown" - }, - "_paymentTerms": { - "description": "Extensions for paymentTerms", - "$ref": "#/definitions/Element" - }, - "note": { - "description": "Comments made about the invoice by the issuer, subject, or other participants.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Invoice_Participant": { - "description": "Invoice containing collected ChargeItems from an Account with calculated individual and total price for Billing purpose.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "role": { - "description": "Describes the type of involvement (e.g. transcriptionist, creator etc.). If the invoice has been created automatically, the Participant may be a billing engine or another kind of device.", - "$ref": "#/definitions/CodeableConcept" - }, - "actor": { - "description": "The device, practitioner, etc. who performed or participated in the service.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "actor" - ] - }, - "Invoice_LineItem": { - "description": "Invoice containing collected ChargeItems from an Account with calculated individual and total price for Billing purpose.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequence": { - "description": "Sequence in which the items appear on the invoice.", - "$ref": "#/definitions/positiveInt" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "chargeItemReference": { - "description": "The ChargeItem contains information such as the billing code, date, amount etc. If no further details are required for the lineItem, inline billing codes can be added using the CodeableConcept data type instead of the Reference.", - "$ref": "#/definitions/Reference" - }, - "chargeItemCodeableConcept": { - "description": "The ChargeItem contains information such as the billing code, date, amount etc. If no further details are required for the lineItem, inline billing codes can be added using the CodeableConcept data type instead of the Reference.", - "$ref": "#/definitions/CodeableConcept" - }, - "priceComponent": { - "description": "The price for a ChargeItem may be calculated as a base price with surcharges/deductions that apply in certain conditions. A ChargeItemDefinition resource that defines the prices, factors and conditions that apply to a billing code is currently under development. The priceComponent element can be used to offer transparency to the recipient of the Invoice as to how the prices have been calculated.", - "items": { - "$ref": "#/definitions/Invoice_PriceComponent" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Invoice_PriceComponent": { - "description": "Invoice containing collected ChargeItems from an Account with calculated individual and total price for Billing purpose.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "This code identifies the type of the component.", - "enum": [ - "base", - "surcharge", - "deduction", - "discount", - "tax", - "informational" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A code that identifies the component. Codes may be used to differentiate between kinds of taxes, surcharges, discounts etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "factor": { - "description": "The factor that has been applied on the base price for calculating this component.", - "$ref": "#/definitions/decimal" - }, - "_factor": { - "description": "Extensions for factor", - "$ref": "#/definitions/Element" - }, - "amount": { - "description": "The amount calculated for this component.", - "$ref": "#/definitions/Money" - } - }, - "additionalProperties": false - }, - "Library": { - "description": "The Library resource is a general-purpose container for knowledge asset definitions. It can be used to describe and expose existing knowledge assets such as logic libraries and information model descriptions, as well as to describe a collection of knowledge assets.", - "properties": { - "resourceType": { - "description": "This is a Library resource", - "const": "Library" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this library when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this library is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the library is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this library when it is represented in other formats, or referenced in a specification, model, design or an instance. e.g. CMS or NQF identifiers for a measure artifact. Note that at least one identifier is required for non-experimental active artifacts.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the library when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the library author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the library. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the library.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "subtitle": { - "description": "An explanatory or alternate title for the library giving additional information about its content.", - "$ref": "#/definitions/string" - }, - "_subtitle": { - "description": "Extensions for subtitle", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this library. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this library is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Identifies the type of library such as a Logic Library, Model Definition, Asset Collection, or Module Definition.", - "$ref": "#/definitions/CodeableConcept" - }, - "subjectCodeableConcept": { - "description": "A code or group definition that describes the intended subject of the contents of the library.", - "$ref": "#/definitions/CodeableConcept" - }, - "subjectReference": { - "description": "A code or group definition that describes the intended subject of the contents of the library.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date (and optionally time) when the library was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the library changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the library.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the library from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate library instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the library is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this library is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "usage": { - "description": "A detailed description of how the library is used from a clinical perspective.", - "$ref": "#/definitions/string" - }, - "_usage": { - "description": "Extensions for usage", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the library and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the library.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the library content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "topic": { - "description": "Descriptive topics related to the content of the library. Topics provide a high-level categorization of the library that can be useful for filtering and searching.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "author": { - "description": "An individiual or organization primarily involved in the creation and maintenance of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "editor": { - "description": "An individual or organization primarily responsible for internal coherence of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "reviewer": { - "description": "An individual or organization primarily responsible for review of some aspect of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "endorser": { - "description": "An individual or organization responsible for officially endorsing the content for use in some setting.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Related artifacts such as additional documentation, justification, or bibliographic references.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "parameter": { - "description": "The parameter element defines parameters used by the library.", - "items": { - "$ref": "#/definitions/ParameterDefinition" - }, - "type": "array" - }, - "dataRequirement": { - "description": "Describes a set of data that must be provided in order to be able to successfully perform the computations defined by the library.", - "items": { - "$ref": "#/definitions/DataRequirement" - }, - "type": "array" - }, - "content": { - "description": "The content of the library as an Attachment. The content may be a reference to a url, or may be directly embedded as a base-64 string. Either way, the contentType of the attachment determines how to interpret the content.", - "items": { - "$ref": "#/definitions/Attachment" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "type", - "resourceType" - ] - }, - "Linkage": { - "description": "Identifies two or more records (resource instances) that refer to the same real-world \"occurrence\".", - "properties": { - "resourceType": { - "description": "This is a Linkage resource", - "const": "Linkage" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "active": { - "description": "Indicates whether the asserted set of linkages are considered to be \"in effect\".", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "author": { - "description": "Identifies the user or organization responsible for asserting the linkages as well as the user or organization who establishes the context in which the nature of each linkage is evaluated.", - "$ref": "#/definitions/Reference" - }, - "item": { - "description": "Identifies which record considered as the reference to the same real-world occurrence as well as how the items should be evaluated within the collection of linked items.", - "items": { - "$ref": "#/definitions/Linkage_Item" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "item", - "resourceType" - ] - }, - "Linkage_Item": { - "description": "Identifies two or more records (resource instances) that refer to the same real-world \"occurrence\".", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Distinguishes which item is \"source of truth\" (if any) and which items are no longer considered to be current representations.", - "enum": [ - "source", - "alternate", - "historical" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "resource": { - "description": "The resource instance being linked as part of the group.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "resource" - ] - }, - "List": { - "description": "A list is a curated collection of resources.", - "properties": { - "resourceType": { - "description": "This is a List resource", - "const": "List" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier for the List assigned for business purposes outside the context of FHIR.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "Indicates the current state of this list.", - "enum": [ - "current", - "retired", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "mode": { - "description": "How this list was prepared - whether it is a working list that is suitable for being maintained on an ongoing basis, or if it represents a snapshot of a list of items from another source, or whether it is a prepared list where items may be marked as added, modified or deleted.", - "enum": [ - "working", - "snapshot", - "changes" - ] - }, - "_mode": { - "description": "Extensions for mode", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A label for the list assigned by the author.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "This code defines the purpose of the list - why it was created.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "The common subject (or patient) of the resources that are in the list if there is one.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The encounter that is the context in which this list was created.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date that the list was prepared.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "source": { - "description": "The entity responsible for deciding what the contents of the list were. Where the list was created by a human, this is the same as the author of the list.", - "$ref": "#/definitions/Reference" - }, - "orderedBy": { - "description": "What order applies to the items in the list.", - "$ref": "#/definitions/CodeableConcept" - }, - "note": { - "description": "Comments that apply to the overall list.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "entry": { - "description": "Entries in this list.", - "items": { - "$ref": "#/definitions/List_Entry" - }, - "type": "array" - }, - "emptyReason": { - "description": "If the list is empty, why the list is empty.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "List_Entry": { - "description": "A list is a curated collection of resources.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "flag": { - "description": "The flag allows the system constructing the list to indicate the role and significance of the item in the list.", - "$ref": "#/definitions/CodeableConcept" - }, - "deleted": { - "description": "True if this item is marked as deleted in the list.", - "$ref": "#/definitions/boolean" - }, - "_deleted": { - "description": "Extensions for deleted", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "When this item was added to the list.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "item": { - "description": "A reference to the actual resource from which data was derived.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "item" - ] - }, - "Location": { - "description": "Details and position information for a physical place where services are provided and resources and participants may be stored, found, contained, or accommodated.", - "properties": { - "resourceType": { - "description": "This is a Location resource", - "const": "Location" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique code or number identifying the location to its users.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status property covers the general availability of the resource, not the current value which may be covered by the operationStatus, or by a schedule/slots if they are configured for the location.", - "enum": [ - "active", - "suspended", - "inactive" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "operationalStatus": { - "description": "The operational status covers operation values most relevant to beds (but can also apply to rooms/units/chairs/etc. such as an isolation unit/dialysis chair). This typically covers concepts such as contamination, housekeeping, and other activities like maintenance.", - "$ref": "#/definitions/Coding" - }, - "name": { - "description": "Name of the location as used by humans. Does not need to be unique.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "alias": { - "description": "A list of alternate names that the location is known as, or was known as, in the past.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_alias": { - "description": "Extensions for alias", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "description": { - "description": "Description of the Location, which helps in finding or referencing the place.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "mode": { - "description": "Indicates whether a resource instance represents a specific location or a class of locations.", - "enum": [ - "instance", - "kind" - ] - }, - "_mode": { - "description": "Extensions for mode", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Indicates the type of function performed at the location.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "telecom": { - "description": "The contact details of communication devices available at the location. This can include phone numbers, fax numbers, mobile numbers, email addresses and web sites.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "address": { - "description": "Physical location.", - "$ref": "#/definitions/Address" - }, - "physicalType": { - "description": "Physical form of the location, e.g. building, room, vehicle, road.", - "$ref": "#/definitions/CodeableConcept" - }, - "position": { - "description": "The absolute geographic location of the Location, expressed using the WGS84 datum (This is the same co-ordinate system used in KML).", - "$ref": "#/definitions/Location_Position" - }, - "managingOrganization": { - "description": "The organization responsible for the provisioning and upkeep of the location.", - "$ref": "#/definitions/Reference" - }, - "partOf": { - "description": "Another Location of which this Location is physically a part of.", - "$ref": "#/definitions/Reference" - }, - "hoursOfOperation": { - "description": "What days/times during a week is this location usually open.", - "items": { - "$ref": "#/definitions/Location_HoursOfOperation" - }, - "type": "array" - }, - "availabilityExceptions": { - "description": "A description of when the locations opening ours are different to normal, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as detailed in the opening hours Times.", - "$ref": "#/definitions/string" - }, - "_availabilityExceptions": { - "description": "Extensions for availabilityExceptions", - "$ref": "#/definitions/Element" - }, - "endpoint": { - "description": "Technical endpoints providing access to services operated for the location.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Location_Position": { - "description": "Details and position information for a physical place where services are provided and resources and participants may be stored, found, contained, or accommodated.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "longitude": { - "description": "Longitude. The value domain and the interpretation are the same as for the text of the longitude element in KML (see notes below).", - "$ref": "#/definitions/decimal" - }, - "_longitude": { - "description": "Extensions for longitude", - "$ref": "#/definitions/Element" - }, - "latitude": { - "description": "Latitude. The value domain and the interpretation are the same as for the text of the latitude element in KML (see notes below).", - "$ref": "#/definitions/decimal" - }, - "_latitude": { - "description": "Extensions for latitude", - "$ref": "#/definitions/Element" - }, - "altitude": { - "description": "Altitude. The value domain and the interpretation are the same as for the text of the altitude element in KML (see notes below).", - "$ref": "#/definitions/decimal" - }, - "_altitude": { - "description": "Extensions for altitude", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Location_HoursOfOperation": { - "description": "Details and position information for a physical place where services are provided and resources and participants may be stored, found, contained, or accommodated.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "daysOfWeek": { - "description": "Indicates which days of the week are available between the start and end Times.", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_daysOfWeek": { - "description": "Extensions for daysOfWeek", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "allDay": { - "description": "The Location is open all day.", - "$ref": "#/definitions/boolean" - }, - "_allDay": { - "description": "Extensions for allDay", - "$ref": "#/definitions/Element" - }, - "openingTime": { - "description": "Time that the Location opens.", - "$ref": "#/definitions/time" - }, - "_openingTime": { - "description": "Extensions for openingTime", - "$ref": "#/definitions/Element" - }, - "closingTime": { - "description": "Time that the Location closes.", - "$ref": "#/definitions/time" - }, - "_closingTime": { - "description": "Extensions for closingTime", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Measure": { - "description": "The Measure resource provides the definition of a quality measure.", - "properties": { - "resourceType": { - "description": "This is a Measure resource", - "const": "Measure" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this measure when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this measure is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the measure is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this measure when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the measure when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the measure author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the measure. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the measure.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "subtitle": { - "description": "An explanatory or alternate title for the measure giving additional information about its content.", - "$ref": "#/definitions/string" - }, - "_subtitle": { - "description": "Extensions for subtitle", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this measure. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this measure is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "subjectCodeableConcept": { - "description": "The intended subjects for the measure. If this element is not provided, a Patient subject is assumed, but the subject of the measure can be anything.", - "$ref": "#/definitions/CodeableConcept" - }, - "subjectReference": { - "description": "The intended subjects for the measure. If this element is not provided, a Patient subject is assumed, but the subject of the measure can be anything.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date (and optionally time) when the measure was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the measure changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the measure.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the measure from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate measure instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the measure is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this measure is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "usage": { - "description": "A detailed description, from a clinical perspective, of how the measure is used.", - "$ref": "#/definitions/string" - }, - "_usage": { - "description": "Extensions for usage", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the measure and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the measure.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the measure content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "topic": { - "description": "Descriptive topics related to the content of the measure. Topics provide a high-level categorization grouping types of measures that can be useful for filtering and searching.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "author": { - "description": "An individiual or organization primarily involved in the creation and maintenance of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "editor": { - "description": "An individual or organization primarily responsible for internal coherence of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "reviewer": { - "description": "An individual or organization primarily responsible for review of some aspect of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "endorser": { - "description": "An individual or organization responsible for officially endorsing the content for use in some setting.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Related artifacts such as additional documentation, justification, or bibliographic references.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "library": { - "description": "A reference to a Library resource containing the formal logic used by the measure.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "disclaimer": { - "description": "Notices and disclaimers regarding the use of the measure or related to intellectual property (such as code systems) referenced by the measure.", - "$ref": "#/definitions/markdown" - }, - "_disclaimer": { - "description": "Extensions for disclaimer", - "$ref": "#/definitions/Element" - }, - "scoring": { - "description": "Indicates how the calculation is performed for the measure, including proportion, ratio, continuous-variable, and cohort. The value set is extensible, allowing additional measure scoring types to be represented.", - "$ref": "#/definitions/CodeableConcept" - }, - "compositeScoring": { - "description": "If this is a composite measure, the scoring method used to combine the component measures to determine the composite score.", - "$ref": "#/definitions/CodeableConcept" - }, - "type": { - "description": "Indicates whether the measure is used to examine a process, an outcome over time, a patient-reported outcome, or a structure measure such as utilization.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "riskAdjustment": { - "description": "A description of the risk adjustment factors that may impact the resulting score for the measure and how they may be accounted for when computing and reporting measure results.", - "$ref": "#/definitions/string" - }, - "_riskAdjustment": { - "description": "Extensions for riskAdjustment", - "$ref": "#/definitions/Element" - }, - "rateAggregation": { - "description": "Describes how to combine the information calculated, based on logic in each of several populations, into one summarized result.", - "$ref": "#/definitions/string" - }, - "_rateAggregation": { - "description": "Extensions for rateAggregation", - "$ref": "#/definitions/Element" - }, - "rationale": { - "description": "Provides a succinct statement of the need for the measure. Usually includes statements pertaining to importance criterion: impact, gap in care, and evidence.", - "$ref": "#/definitions/markdown" - }, - "_rationale": { - "description": "Extensions for rationale", - "$ref": "#/definitions/Element" - }, - "clinicalRecommendationStatement": { - "description": "Provides a summary of relevant clinical guidelines or other clinical recommendations supporting the measure.", - "$ref": "#/definitions/markdown" - }, - "_clinicalRecommendationStatement": { - "description": "Extensions for clinicalRecommendationStatement", - "$ref": "#/definitions/Element" - }, - "improvementNotation": { - "description": "Information on whether an increase or decrease in score is the preferred result (e.g., a higher score indicates better quality OR a lower score indicates better quality OR quality is within a range).", - "$ref": "#/definitions/CodeableConcept" - }, - "definition": { - "description": "Provides a description of an individual term used within the measure.", - "items": { - "$ref": "#/definitions/markdown" - }, - "type": "array" - }, - "_definition": { - "description": "Extensions for definition", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "guidance": { - "description": "Additional guidance for the measure including how it can be used in a clinical context, and the intent of the measure.", - "$ref": "#/definitions/markdown" - }, - "_guidance": { - "description": "Extensions for guidance", - "$ref": "#/definitions/Element" - }, - "group": { - "description": "A group of population criteria for the measure.", - "items": { - "$ref": "#/definitions/Measure_Group" - }, - "type": "array" - }, - "supplementalData": { - "description": "The supplemental data criteria for the measure report, specified as either the name of a valid CQL expression within a referenced library, or a valid FHIR Resource Path.", - "items": { - "$ref": "#/definitions/Measure_SupplementalData" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Measure_Group": { - "description": "The Measure resource provides the definition of a quality measure.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Indicates a meaning for the group. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing groups to be correlated across measures.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "The human readable description of this population group.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "population": { - "description": "A population criteria for the measure.", - "items": { - "$ref": "#/definitions/Measure_Population" - }, - "type": "array" - }, - "stratifier": { - "description": "The stratifier criteria for the measure report, specified as either the name of a valid CQL expression defined within a referenced library or a valid FHIR Resource Path.", - "items": { - "$ref": "#/definitions/Measure_Stratifier" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Measure_Population": { - "description": "The Measure resource provides the definition of a quality measure.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The type of population criteria.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "The human readable description of this population criteria.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "criteria": { - "description": "An expression that specifies the criteria for the population, typically the name of an expression in a library.", - "$ref": "#/definitions/Expression" - } - }, - "additionalProperties": false, - "required": [ - "criteria" - ] - }, - "Measure_Stratifier": { - "description": "The Measure resource provides the definition of a quality measure.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Indicates a meaning for the stratifier. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing stratifiers to be correlated across measures.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "The human readable description of this stratifier criteria.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "criteria": { - "description": "An expression that specifies the criteria for the stratifier. This is typically the name of an expression defined within a referenced library, but it may also be a path to a stratifier element.", - "$ref": "#/definitions/Expression" - }, - "component": { - "description": "A component of the stratifier criteria for the measure report, specified as either the name of a valid CQL expression defined within a referenced library or a valid FHIR Resource Path.", - "items": { - "$ref": "#/definitions/Measure_Component" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Measure_Component": { - "description": "The Measure resource provides the definition of a quality measure.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Indicates a meaning for the stratifier component. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing stratifiers to be correlated across measures.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "The human readable description of this stratifier criteria component.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "criteria": { - "description": "An expression that specifies the criteria for this component of the stratifier. This is typically the name of an expression defined within a referenced library, but it may also be a path to a stratifier element.", - "$ref": "#/definitions/Expression" - } - }, - "additionalProperties": false, - "required": [ - "criteria" - ] - }, - "Measure_SupplementalData": { - "description": "The Measure resource provides the definition of a quality measure.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Indicates a meaning for the supplemental data. This can be as simple as a unique identifier, or it can establish meaning in a broader context by drawing from a terminology, allowing supplemental data to be correlated across measures.", - "$ref": "#/definitions/CodeableConcept" - }, - "usage": { - "description": "An indicator of the intended usage for the supplemental data element. Supplemental data indicates the data is additional information requested to augment the measure information. Risk adjustment factor indicates the data is additional information used to calculate risk adjustment factors when applying a risk model to the measure calculation.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "description": { - "description": "The human readable description of this supplemental data.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "criteria": { - "description": "The criteria for the supplemental data. This is typically the name of a valid expression defined within a referenced library, but it may also be a path to a specific data element. The criteria defines the data to be returned for this element.", - "$ref": "#/definitions/Expression" - } - }, - "additionalProperties": false, - "required": [ - "criteria" - ] - }, - "MeasureReport": { - "description": "The MeasureReport resource contains the results of the calculation of a measure; and optionally a reference to the resources involved in that calculation.", - "properties": { - "resourceType": { - "description": "This is a MeasureReport resource", - "const": "MeasureReport" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A formal identifier that is used to identify this MeasureReport when it is represented in other formats or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The MeasureReport status. No data will be available until the MeasureReport status is complete.", - "enum": [ - "complete", - "pending", - "error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type of measure report. This may be an individual report, which provides the score for the measure for an individual member of the population; a subject-listing, which returns the list of members that meet the various criteria in the measure; a summary report, which returns a population count for each of the criteria in the measure; or a data-collection, which enables the MeasureReport to be used to exchange the data-of-interest for a quality measure.", - "enum": [ - "individual", - "subject-list", - "summary", - "data-collection" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "measure": { - "description": "A reference to the Measure that was calculated to produce this report.", - "$ref": "#/definitions/canonical" - }, - "subject": { - "description": "Optional subject identifying the individual or individuals the report is for.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date this measure report was generated.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "reporter": { - "description": "The individual, location, or organization that is reporting the data.", - "$ref": "#/definitions/Reference" - }, - "period": { - "description": "The reporting period for which the report was calculated.", - "$ref": "#/definitions/Period" - }, - "improvementNotation": { - "description": "Whether improvement in the measure is noted by an increase or decrease in the measure score.", - "$ref": "#/definitions/CodeableConcept" - }, - "group": { - "description": "The results of the calculation, one for each population group in the measure.", - "items": { - "$ref": "#/definitions/MeasureReport_Group" - }, - "type": "array" - }, - "evaluatedResource": { - "description": "A reference to a Bundle containing the Resources that were used in the calculation of this measure.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "period", - "measure", - "resourceType" - ] - }, - "MeasureReport_Group": { - "description": "The MeasureReport resource contains the results of the calculation of a measure; and optionally a reference to the resources involved in that calculation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The meaning of the population group as defined in the measure definition.", - "$ref": "#/definitions/CodeableConcept" - }, - "population": { - "description": "The populations that make up the population group, one for each type of population appropriate for the measure.", - "items": { - "$ref": "#/definitions/MeasureReport_Population" - }, - "type": "array" - }, - "measureScore": { - "description": "The measure score for this population group, calculated as appropriate for the measure type and scoring method, and based on the contents of the populations defined in the group.", - "$ref": "#/definitions/Quantity" - }, - "stratifier": { - "description": "When a measure includes multiple stratifiers, there will be a stratifier group for each stratifier defined by the measure.", - "items": { - "$ref": "#/definitions/MeasureReport_Stratifier" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "MeasureReport_Population": { - "description": "The MeasureReport resource contains the results of the calculation of a measure; and optionally a reference to the resources involved in that calculation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The type of the population.", - "$ref": "#/definitions/CodeableConcept" - }, - "count": { - "description": "The number of members of the population.", - "$ref": "#/definitions/integer" - }, - "_count": { - "description": "Extensions for count", - "$ref": "#/definitions/Element" - }, - "subjectResults": { - "description": "This element refers to a List of subject level MeasureReport resources, one for each subject in this population.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "MeasureReport_Stratifier": { - "description": "The MeasureReport resource contains the results of the calculation of a measure; and optionally a reference to the resources involved in that calculation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The meaning of this stratifier, as defined in the measure definition.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "stratum": { - "description": "This element contains the results for a single stratum within the stratifier. For example, when stratifying on administrative gender, there will be four strata, one for each possible gender value.", - "items": { - "$ref": "#/definitions/MeasureReport_Stratum" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "MeasureReport_Stratum": { - "description": "The MeasureReport resource contains the results of the calculation of a measure; and optionally a reference to the resources involved in that calculation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "value": { - "description": "The value for this stratum, expressed as a CodeableConcept. When defining stratifiers on complex values, the value must be rendered such that the value for each stratum within the stratifier is unique.", - "$ref": "#/definitions/CodeableConcept" - }, - "component": { - "description": "A stratifier component value.", - "items": { - "$ref": "#/definitions/MeasureReport_Component" - }, - "type": "array" - }, - "population": { - "description": "The populations that make up the stratum, one for each type of population appropriate to the measure.", - "items": { - "$ref": "#/definitions/MeasureReport_Population1" - }, - "type": "array" - }, - "measureScore": { - "description": "The measure score for this stratum, calculated as appropriate for the measure type and scoring method, and based on only the members of this stratum.", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false - }, - "MeasureReport_Component": { - "description": "The MeasureReport resource contains the results of the calculation of a measure; and optionally a reference to the resources involved in that calculation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The code for the stratum component value.", - "$ref": "#/definitions/CodeableConcept" - }, - "value": { - "description": "The stratum component value.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "code", - "value" - ] - }, - "MeasureReport_Population1": { - "description": "The MeasureReport resource contains the results of the calculation of a measure; and optionally a reference to the resources involved in that calculation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The type of the population.", - "$ref": "#/definitions/CodeableConcept" - }, - "count": { - "description": "The number of members of the population in this stratum.", - "$ref": "#/definitions/integer" - }, - "_count": { - "description": "Extensions for count", - "$ref": "#/definitions/Element" - }, - "subjectResults": { - "description": "This element refers to a List of subject level MeasureReport resources, one for each subject in this population in this stratum.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "Media": { - "description": "A photo, video, or audio recording acquired or used in healthcare. The actual content may be inline or provided by direct reference.", - "properties": { - "resourceType": { - "description": "This is a Media resource", - "const": "Media" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers associated with the image - these may include identifiers for the image itself, identifiers for the context of its collection (e.g. series ids) and context ids such as accession numbers or other workflow identifiers.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "basedOn": { - "description": "A procedure that is fulfilled in whole or in part by the creation of this media.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "partOf": { - "description": "A larger event of which this particular event is a component or step.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "The current state of the {{title}}.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "A code that classifies whether the media is an image, video or audio recording or some other media category.", - "$ref": "#/definitions/CodeableConcept" - }, - "modality": { - "description": "Details of the type of the media - usually, how it was acquired (what type of device). If images sourced from a DICOM system, are wrapped in a Media resource, then this is the modality.", - "$ref": "#/definitions/CodeableConcept" - }, - "view": { - "description": "The name of the imaging view e.g. Lateral or Antero-posterior (AP).", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "Who/What this Media is a record of.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The encounter that establishes the context for this media.", - "$ref": "#/definitions/Reference" - }, - "createdDateTime": { - "description": "The date and time(s) at which the media was collected.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_createdDateTime": { - "description": "Extensions for createdDateTime", - "$ref": "#/definitions/Element" - }, - "createdPeriod": { - "description": "The date and time(s) at which the media was collected.", - "$ref": "#/definitions/Period" - }, - "issued": { - "description": "The date and time this version of the media was made available to providers, typically after having been reviewed.", - "$ref": "#/definitions/instant" - }, - "_issued": { - "description": "Extensions for issued", - "$ref": "#/definitions/Element" - }, - "operator": { - "description": "The person who administered the collection of the image.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "Describes why the event occurred in coded or textual form.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "bodySite": { - "description": "Indicates the site on the subject\u0027s body where the observation was made (i.e. the target site).", - "$ref": "#/definitions/CodeableConcept" - }, - "deviceName": { - "description": "The name of the device / manufacturer of the device that was used to make the recording.", - "$ref": "#/definitions/string" - }, - "_deviceName": { - "description": "Extensions for deviceName", - "$ref": "#/definitions/Element" - }, - "device": { - "description": "The device used to collect the media.", - "$ref": "#/definitions/Reference" - }, - "height": { - "description": "Height of the image in pixels (photo/video).", - "$ref": "#/definitions/positiveInt" - }, - "_height": { - "description": "Extensions for height", - "$ref": "#/definitions/Element" - }, - "width": { - "description": "Width of the image in pixels (photo/video).", - "$ref": "#/definitions/positiveInt" - }, - "_width": { - "description": "Extensions for width", - "$ref": "#/definitions/Element" - }, - "frames": { - "description": "The number of frames in a photo. This is used with a multi-page fax, or an imaging acquisition context that takes multiple slices in a single image, or an animated gif. If there is more than one frame, this SHALL have a value in order to alert interface software that a multi-frame capable rendering widget is required.", - "$ref": "#/definitions/positiveInt" - }, - "_frames": { - "description": "Extensions for frames", - "$ref": "#/definitions/Element" - }, - "duration": { - "description": "The duration of the recording in seconds - for audio and video.", - "$ref": "#/definitions/decimal" - }, - "_duration": { - "description": "Extensions for duration", - "$ref": "#/definitions/Element" - }, - "content": { - "description": "The actual content of the media - inline or by direct reference to the media source file.", - "$ref": "#/definitions/Attachment" - }, - "note": { - "description": "Comments made about the media by the performer, subject or other participants.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "content", - "resourceType" - ] - }, - "Medication": { - "description": "This resource is primarily used for the identification and definition of a medication for the purposes of prescribing, dispensing, and administering a medication as well as for making statements about medication use.", - "properties": { - "resourceType": { - "description": "This is a Medication resource", - "const": "Medication" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifier for this medication.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "code": { - "description": "A code (or set of codes) that specify this medication, or a textual description if no code is available. Usage note: This could be a standard medication code such as a code from RxNorm, SNOMED CT, IDMP etc. It could also be a national or local formulary code, optionally with translations to other code systems.", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "A code to indicate if the medication is in active use.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "manufacturer": { - "description": "Describes the details of the manufacturer of the medication product. This is not intended to represent the distributor of a medication product.", - "$ref": "#/definitions/Reference" - }, - "form": { - "description": "Describes the form of the item. Powder; tablets; capsule.", - "$ref": "#/definitions/CodeableConcept" - }, - "amount": { - "description": "Specific amount of the drug in the packaged product. For example, when specifying a product that has the same strength (For example, Insulin glargine 100 unit per mL solution for injection), this attribute provides additional clarification of the package amount (For example, 3 mL, 10mL, etc.).", - "$ref": "#/definitions/Ratio" - }, - "ingredient": { - "description": "Identifies a particular constituent of interest in the product.", - "items": { - "$ref": "#/definitions/Medication_Ingredient" - }, - "type": "array" - }, - "batch": { - "description": "Information that only applies to packages (not products).", - "$ref": "#/definitions/Medication_Batch" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Medication_Ingredient": { - "description": "This resource is primarily used for the identification and definition of a medication for the purposes of prescribing, dispensing, and administering a medication as well as for making statements about medication use.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "itemCodeableConcept": { - "description": "The actual ingredient - either a substance (simple ingredient) or another medication of a medication.", - "$ref": "#/definitions/CodeableConcept" - }, - "itemReference": { - "description": "The actual ingredient - either a substance (simple ingredient) or another medication of a medication.", - "$ref": "#/definitions/Reference" - }, - "isActive": { - "description": "Indication of whether this ingredient affects the therapeutic action of the drug.", - "$ref": "#/definitions/boolean" - }, - "_isActive": { - "description": "Extensions for isActive", - "$ref": "#/definitions/Element" - }, - "strength": { - "description": "Specifies how many (or how much) of the items there are in this Medication. For example, 250 mg per tablet. This is expressed as a ratio where the numerator is 250mg and the denominator is 1 tablet.", - "$ref": "#/definitions/Ratio" - } - }, - "additionalProperties": false - }, - "Medication_Batch": { - "description": "This resource is primarily used for the identification and definition of a medication for the purposes of prescribing, dispensing, and administering a medication as well as for making statements about medication use.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "lotNumber": { - "description": "The assigned lot number of a batch of the specified product.", - "$ref": "#/definitions/string" - }, - "_lotNumber": { - "description": "Extensions for lotNumber", - "$ref": "#/definitions/Element" - }, - "expirationDate": { - "description": "When this specific batch of product will expire.", - "$ref": "#/definitions/dateTime" - }, - "_expirationDate": { - "description": "Extensions for expirationDate", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "MedicationAdministration": { - "description": "Describes the event of a patient consuming or otherwise being administered a medication. This may be as simple as swallowing a tablet or it may be a long running infusion. Related resources tie this event to the authorizing prescription, and the specific encounter between patient and health care practitioner.", - "properties": { - "resourceType": { - "description": "This is a MedicationAdministration resource", - "const": "MedicationAdministration" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers associated with this Medication Administration that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate. They are business identifiers assigned to this resource by the performer or other systems and remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "instantiates": { - "description": "A protocol, guideline, orderset, or other definition that was adhered to in whole or in part by this event.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiates": { - "description": "Extensions for instantiates", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "partOf": { - "description": "A larger event of which this particular event is a component or step.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "Will generally be set to show that the administration has been completed. For some long running administrations such as infusions, it is possible for an administration to be started but not completed or it may be paused while some other process is under way.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "A code indicating why the administration was not performed.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "category": { - "description": "Indicates where the medication is expected to be consumed or administered.", - "$ref": "#/definitions/CodeableConcept" - }, - "medicationCodeableConcept": { - "description": "Identifies the medication that was administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.", - "$ref": "#/definitions/CodeableConcept" - }, - "medicationReference": { - "description": "Identifies the medication that was administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.", - "$ref": "#/definitions/Reference" - }, - "subject": { - "description": "The person or animal or group receiving the medication.", - "$ref": "#/definitions/Reference" - }, - "context": { - "description": "The visit, admission, or other contact between patient and health care provider during which the medication administration was performed.", - "$ref": "#/definitions/Reference" - }, - "supportingInformation": { - "description": "Additional information (for example, patient height and weight) that supports the administration of the medication.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "effectiveDateTime": { - "description": "A specific date/time or interval of time during which the administration took place (or did not take place, when the \u0027notGiven\u0027 attribute is true). For many administrations, such as swallowing a tablet the use of dateTime is more appropriate.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_effectiveDateTime": { - "description": "Extensions for effectiveDateTime", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "A specific date/time or interval of time during which the administration took place (or did not take place, when the \u0027notGiven\u0027 attribute is true). For many administrations, such as swallowing a tablet the use of dateTime is more appropriate.", - "$ref": "#/definitions/Period" - }, - "performer": { - "description": "Indicates who or what performed the medication administration and how they were involved.", - "items": { - "$ref": "#/definitions/MedicationAdministration_Performer" - }, - "type": "array" - }, - "reasonCode": { - "description": "A code indicating why the medication was given.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Condition or observation that supports why the medication was administered.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "request": { - "description": "The original request, instruction or authority to perform the administration.", - "$ref": "#/definitions/Reference" - }, - "device": { - "description": "The device used in administering the medication to the patient. For example, a particular infusion pump.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Extra information about the medication administration that is not conveyed by the other attributes.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "dosage": { - "description": "Describes the medication dosage information details e.g. dose, rate, site, route, etc.", - "$ref": "#/definitions/MedicationAdministration_Dosage" - }, - "eventHistory": { - "description": "A summary of the events of interest that have occurred, such as when the administration was verified.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "MedicationAdministration_Performer": { - "description": "Describes the event of a patient consuming or otherwise being administered a medication. This may be as simple as swallowing a tablet or it may be a long running infusion. Related resources tie this event to the authorizing prescription, and the specific encounter between patient and health care practitioner.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "function": { - "description": "Distinguishes the type of involvement of the performer in the medication administration.", - "$ref": "#/definitions/CodeableConcept" - }, - "actor": { - "description": "Indicates who or what performed the medication administration.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "actor" - ] - }, - "MedicationAdministration_Dosage": { - "description": "Describes the event of a patient consuming or otherwise being administered a medication. This may be as simple as swallowing a tablet or it may be a long running infusion. Related resources tie this event to the authorizing prescription, and the specific encounter between patient and health care practitioner.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "text": { - "description": "Free text dosage can be used for cases where the dosage administered is too complex to code. When coded dosage is present, the free text dosage may still be present for display to humans.\r\rThe dosage instructions should reflect the dosage of the medication that was administered.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - }, - "site": { - "description": "A coded specification of the anatomic site where the medication first entered the body. For example, \"left arm\".", - "$ref": "#/definitions/CodeableConcept" - }, - "route": { - "description": "A code specifying the route or physiological path of administration of a therapeutic agent into or onto the patient. For example, topical, intravenous, etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "method": { - "description": "A coded value indicating the method by which the medication is intended to be or was introduced into or on the body. This attribute will most often NOT be populated. It is most commonly used for injections. For example, Slow Push, Deep IV.", - "$ref": "#/definitions/CodeableConcept" - }, - "dose": { - "description": "The amount of the medication given at one administration event. Use this value when the administration is essentially an instantaneous event such as a swallowing a tablet or giving an injection.", - "$ref": "#/definitions/Quantity" - }, - "rateRatio": { - "description": "Identifies the speed with which the medication was or will be introduced into the patient. Typically, the rate for an infusion e.g. 100 ml per 1 hour or 100 ml/hr. May also be expressed as a rate per unit of time, e.g. 500 ml per 2 hours. Other examples: 200 mcg/min or 200 mcg/1 minute; 1 liter/8 hours.", - "$ref": "#/definitions/Ratio" - }, - "rateQuantity": { - "description": "Identifies the speed with which the medication was or will be introduced into the patient. Typically, the rate for an infusion e.g. 100 ml per 1 hour or 100 ml/hr. May also be expressed as a rate per unit of time, e.g. 500 ml per 2 hours. Other examples: 200 mcg/min or 200 mcg/1 minute; 1 liter/8 hours.", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false - }, - "MedicationDispense": { - "description": "Indicates that a medication product is to be or has been dispensed for a named person/patient. This includes a description of the medication product (supply) provided and the instructions for administering the medication. The medication dispense is the result of a pharmacy system responding to a medication order.", - "properties": { - "resourceType": { - "description": "This is a MedicationDispense resource", - "const": "MedicationDispense" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers associated with this Medication Dispense that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate. They are business identifiers assigned to this resource by the performer or other systems and remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "partOf": { - "description": "The procedure that trigger the dispense.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "A code specifying the state of the set of dispense events.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReasonCodeableConcept": { - "description": "Indicates the reason why a dispense was not performed.", - "$ref": "#/definitions/CodeableConcept" - }, - "statusReasonReference": { - "description": "Indicates the reason why a dispense was not performed.", - "$ref": "#/definitions/Reference" - }, - "category": { - "description": "Indicates the type of medication dispense (for example, where the medication is expected to be consumed or administered (i.e. inpatient or outpatient)).", - "$ref": "#/definitions/CodeableConcept" - }, - "medicationCodeableConcept": { - "description": "Identifies the medication being administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.", - "$ref": "#/definitions/CodeableConcept" - }, - "medicationReference": { - "description": "Identifies the medication being administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.", - "$ref": "#/definitions/Reference" - }, - "subject": { - "description": "A link to a resource representing the person or the group to whom the medication will be given.", - "$ref": "#/definitions/Reference" - }, - "context": { - "description": "The encounter or episode of care that establishes the context for this event.", - "$ref": "#/definitions/Reference" - }, - "supportingInformation": { - "description": "Additional information that supports the medication being dispensed.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "performer": { - "description": "Indicates who or what performed the event.", - "items": { - "$ref": "#/definitions/MedicationDispense_Performer" - }, - "type": "array" - }, - "location": { - "description": "The principal physical location where the dispense was performed.", - "$ref": "#/definitions/Reference" - }, - "authorizingPrescription": { - "description": "Indicates the medication order that is being dispensed against.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "type": { - "description": "Indicates the type of dispensing event that is performed. For example, Trial Fill, Completion of Trial, Partial Fill, Emergency Fill, Samples, etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "quantity": { - "description": "The amount of medication that has been dispensed. Includes unit of measure.", - "$ref": "#/definitions/Quantity" - }, - "daysSupply": { - "description": "The amount of medication expressed as a timing amount.", - "$ref": "#/definitions/Quantity" - }, - "whenPrepared": { - "description": "The time when the dispensed product was packaged and reviewed.", - "$ref": "#/definitions/dateTime" - }, - "_whenPrepared": { - "description": "Extensions for whenPrepared", - "$ref": "#/definitions/Element" - }, - "whenHandedOver": { - "description": "The time the dispensed product was provided to the patient or their representative.", - "$ref": "#/definitions/dateTime" - }, - "_whenHandedOver": { - "description": "Extensions for whenHandedOver", - "$ref": "#/definitions/Element" - }, - "destination": { - "description": "Identification of the facility/location where the medication was shipped to, as part of the dispense event.", - "$ref": "#/definitions/Reference" - }, - "receiver": { - "description": "Identifies the person who picked up the medication. This will usually be a patient or their caregiver, but some cases exist where it can be a healthcare professional.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Extra information about the dispense that could not be conveyed in the other attributes.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "dosageInstruction": { - "description": "Indicates how the medication is to be used by the patient.", - "items": { - "$ref": "#/definitions/Dosage" - }, - "type": "array" - }, - "substitution": { - "description": "Indicates whether or not substitution was made as part of the dispense. In some cases, substitution will be expected but does not happen, in other cases substitution is not expected but does happen. This block explains what substitution did or did not happen and why. If nothing is specified, substitution was not done.", - "$ref": "#/definitions/MedicationDispense_Substitution" - }, - "detectedIssue": { - "description": "Indicates an actual or potential clinical issue with or between one or more active or proposed clinical actions for a patient; e.g. drug-drug interaction, duplicate therapy, dosage alert etc.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "eventHistory": { - "description": "A summary of the events of interest that have occurred, such as when the dispense was verified.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "MedicationDispense_Performer": { - "description": "Indicates that a medication product is to be or has been dispensed for a named person/patient. This includes a description of the medication product (supply) provided and the instructions for administering the medication. The medication dispense is the result of a pharmacy system responding to a medication order.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "function": { - "description": "Distinguishes the type of performer in the dispense. For example, date enterer, packager, final checker.", - "$ref": "#/definitions/CodeableConcept" - }, - "actor": { - "description": "The device, practitioner, etc. who performed the action. It should be assumed that the actor is the dispenser of the medication.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "actor" - ] - }, - "MedicationDispense_Substitution": { - "description": "Indicates that a medication product is to be or has been dispensed for a named person/patient. This includes a description of the medication product (supply) provided and the instructions for administering the medication. The medication dispense is the result of a pharmacy system responding to a medication order.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "wasSubstituted": { - "description": "True if the dispenser dispensed a different drug or product from what was prescribed.", - "$ref": "#/definitions/boolean" - }, - "_wasSubstituted": { - "description": "Extensions for wasSubstituted", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "A code signifying whether a different drug was dispensed from what was prescribed.", - "$ref": "#/definitions/CodeableConcept" - }, - "reason": { - "description": "Indicates the reason for the substitution (or lack of substitution) from what was prescribed.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "responsibleParty": { - "description": "The person or organization that has primary responsibility for the substitution.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "MedicationKnowledge": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "resourceType": { - "description": "This is a MedicationKnowledge resource", - "const": "MedicationKnowledge" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A code that specifies this medication, or a textual description if no code is available. Usage note: This could be a standard medication code such as a code from RxNorm, SNOMED CT, IDMP etc. It could also be a national or local formulary code, optionally with translations to other code systems.", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "A code to indicate if the medication is in active use. The status refers to the validity about the information of the medication and not to its medicinal properties.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "manufacturer": { - "description": "Describes the details of the manufacturer of the medication product. This is not intended to represent the distributor of a medication product.", - "$ref": "#/definitions/Reference" - }, - "doseForm": { - "description": "Describes the form of the item. Powder; tablets; capsule.", - "$ref": "#/definitions/CodeableConcept" - }, - "amount": { - "description": "Specific amount of the drug in the packaged product. For example, when specifying a product that has the same strength (For example, Insulin glargine 100 unit per mL solution for injection), this attribute provides additional clarification of the package amount (For example, 3 mL, 10mL, etc.).", - "$ref": "#/definitions/Quantity" - }, - "synonym": { - "description": "Additional names for a medication, for example, the name(s) given to a medication in different countries. For example, acetaminophen and paracetamol or salbutamol and albuterol.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_synonym": { - "description": "Extensions for synonym", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "relatedMedicationKnowledge": { - "description": "Associated or related knowledge about a medication.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_RelatedMedicationKnowledge" - }, - "type": "array" - }, - "associatedMedication": { - "description": "Associated or related medications. For example, if the medication is a branded product (e.g. Crestor), this is the Therapeutic Moeity (e.g. Rosuvastatin) or if this is a generic medication (e.g. Rosuvastatin), this would link to a branded product (e.g. Crestor).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "productType": { - "description": "Category of the medication or product (e.g. branded product, therapeutic moeity, generic product, innovator product, etc.).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "monograph": { - "description": "Associated documentation about the medication.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_Monograph" - }, - "type": "array" - }, - "ingredient": { - "description": "Identifies a particular constituent of interest in the product.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_Ingredient" - }, - "type": "array" - }, - "preparationInstruction": { - "description": "The instructions for preparing the medication.", - "$ref": "#/definitions/markdown" - }, - "_preparationInstruction": { - "description": "Extensions for preparationInstruction", - "$ref": "#/definitions/Element" - }, - "intendedRoute": { - "description": "The intended or approved route of administration.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "cost": { - "description": "The price of the medication.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_Cost" - }, - "type": "array" - }, - "monitoringProgram": { - "description": "The program under which the medication is reviewed.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_MonitoringProgram" - }, - "type": "array" - }, - "administrationGuidelines": { - "description": "Guidelines for the administration of the medication.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_AdministrationGuidelines" - }, - "type": "array" - }, - "medicineClassification": { - "description": "Categorization of the medication within a formulary or classification system.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_MedicineClassification" - }, - "type": "array" - }, - "packaging": { - "description": "Information that only applies to packages (not products).", - "$ref": "#/definitions/MedicationKnowledge_Packaging" - }, - "drugCharacteristic": { - "description": "Specifies descriptive properties of the medicine, such as color, shape, imprints, etc.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_DrugCharacteristic" - }, - "type": "array" - }, - "contraindication": { - "description": "Potential clinical issue with or between medication(s) (for example, drug-drug interaction, drug-disease contraindication, drug-allergy interaction, etc.).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "regulatory": { - "description": "Regulatory information about a medication.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_Regulatory" - }, - "type": "array" - }, - "kinetics": { - "description": "The time course of drug absorption, distribution, metabolism and excretion of a medication from the body.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_Kinetics" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "MedicationKnowledge_RelatedMedicationKnowledge": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The category of the associated medication knowledge reference.", - "$ref": "#/definitions/CodeableConcept" - }, - "reference": { - "description": "Associated documentation about the associated medication knowledge.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "reference", - "type" - ] - }, - "MedicationKnowledge_Monograph": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The category of documentation about the medication. (e.g. professional monograph, patient education monograph).", - "$ref": "#/definitions/CodeableConcept" - }, - "source": { - "description": "Associated documentation about the medication.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "MedicationKnowledge_Ingredient": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "itemCodeableConcept": { - "description": "The actual ingredient - either a substance (simple ingredient) or another medication.", - "$ref": "#/definitions/CodeableConcept" - }, - "itemReference": { - "description": "The actual ingredient - either a substance (simple ingredient) or another medication.", - "$ref": "#/definitions/Reference" - }, - "isActive": { - "description": "Indication of whether this ingredient affects the therapeutic action of the drug.", - "$ref": "#/definitions/boolean" - }, - "_isActive": { - "description": "Extensions for isActive", - "$ref": "#/definitions/Element" - }, - "strength": { - "description": "Specifies how many (or how much) of the items there are in this Medication. For example, 250 mg per tablet. This is expressed as a ratio where the numerator is 250mg and the denominator is 1 tablet.", - "$ref": "#/definitions/Ratio" - } - }, - "additionalProperties": false - }, - "MedicationKnowledge_Cost": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The category of the cost information. For example, manufacturers\u0027 cost, patient cost, claim reimbursement cost, actual acquisition cost.", - "$ref": "#/definitions/CodeableConcept" - }, - "source": { - "description": "The source or owner that assigns the price to the medication.", - "$ref": "#/definitions/string" - }, - "_source": { - "description": "Extensions for source", - "$ref": "#/definitions/Element" - }, - "cost": { - "description": "The price of the medication.", - "$ref": "#/definitions/Money" - } - }, - "additionalProperties": false, - "required": [ - "cost", - "type" - ] - }, - "MedicationKnowledge_MonitoringProgram": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of program under which the medication is monitored.", - "$ref": "#/definitions/CodeableConcept" - }, - "name": { - "description": "Name of the reviewing program.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "MedicationKnowledge_AdministrationGuidelines": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "dosage": { - "description": "Dosage for the medication for the specific guidelines.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_Dosage" - }, - "type": "array" - }, - "indicationCodeableConcept": { - "description": "Indication for use that apply to the specific administration guidelines.", - "$ref": "#/definitions/CodeableConcept" - }, - "indicationReference": { - "description": "Indication for use that apply to the specific administration guidelines.", - "$ref": "#/definitions/Reference" - }, - "patientCharacteristics": { - "description": "Characteristics of the patient that are relevant to the administration guidelines (for example, height, weight, gender, etc.).", - "items": { - "$ref": "#/definitions/MedicationKnowledge_PatientCharacteristics" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "MedicationKnowledge_Dosage": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of dosage (for example, prophylaxis, maintenance, therapeutic, etc.).", - "$ref": "#/definitions/CodeableConcept" - }, - "dosage": { - "description": "Dosage for the medication for the specific guidelines.", - "items": { - "$ref": "#/definitions/Dosage" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "dosage", - "type" - ] - }, - "MedicationKnowledge_PatientCharacteristics": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "characteristicCodeableConcept": { - "description": "Specific characteristic that is relevant to the administration guideline (e.g. height, weight, gender).", - "$ref": "#/definitions/CodeableConcept" - }, - "characteristicQuantity": { - "description": "Specific characteristic that is relevant to the administration guideline (e.g. height, weight, gender).", - "$ref": "#/definitions/Quantity" - }, - "value": { - "description": "The specific characteristic (e.g. height, weight, gender, etc.).", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_value": { - "description": "Extensions for value", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "MedicationKnowledge_MedicineClassification": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of category for the medication (for example, therapeutic classification, therapeutic sub-classification).", - "$ref": "#/definitions/CodeableConcept" - }, - "classification": { - "description": "Specific category assigned to the medication (e.g. anti-infective, anti-hypertensive, antibiotic, etc.).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "MedicationKnowledge_Packaging": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "A code that defines the specific type of packaging that the medication can be found in (e.g. blister sleeve, tube, bottle).", - "$ref": "#/definitions/CodeableConcept" - }, - "quantity": { - "description": "The number of product units the package would contain if fully loaded.", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false - }, - "MedicationKnowledge_DrugCharacteristic": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "A code specifying which characteristic of the medicine is being described (for example, colour, shape, imprint).", - "$ref": "#/definitions/CodeableConcept" - }, - "valueCodeableConcept": { - "description": "Description of the characteristic.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueString": { - "description": "Description of the characteristic.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueQuantity": { - "description": "Description of the characteristic.", - "$ref": "#/definitions/Quantity" - }, - "valueBase64Binary": { - "description": "Description of the characteristic.", - "pattern": "^(\\s*([0-9a-zA-Z\\+/\u003d]){4}\\s*)+$", - "type": "string" - }, - "_valueBase64Binary": { - "description": "Extensions for valueBase64Binary", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "MedicationKnowledge_Regulatory": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "regulatoryAuthority": { - "description": "The authority that is specifying the regulations.", - "$ref": "#/definitions/Reference" - }, - "substitution": { - "description": "Specifies if changes are allowed when dispensing a medication from a regulatory perspective.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_Substitution" - }, - "type": "array" - }, - "schedule": { - "description": "Specifies the schedule of a medication in jurisdiction.", - "items": { - "$ref": "#/definitions/MedicationKnowledge_Schedule" - }, - "type": "array" - }, - "maxDispense": { - "description": "The maximum number of units of the medication that can be dispensed in a period.", - "$ref": "#/definitions/MedicationKnowledge_MaxDispense" - } - }, - "additionalProperties": false, - "required": [ - "regulatoryAuthority" - ] - }, - "MedicationKnowledge_Substitution": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Specifies the type of substitution allowed.", - "$ref": "#/definitions/CodeableConcept" - }, - "allowed": { - "description": "Specifies if regulation allows for changes in the medication when dispensing.", - "$ref": "#/definitions/boolean" - }, - "_allowed": { - "description": "Extensions for allowed", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "MedicationKnowledge_Schedule": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "schedule": { - "description": "Specifies the specific drug schedule.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "schedule" - ] - }, - "MedicationKnowledge_MaxDispense": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "quantity": { - "description": "The maximum number of units of the medication that can be dispensed.", - "$ref": "#/definitions/Quantity" - }, - "period": { - "description": "The period that applies to the maximum number of units.", - "$ref": "#/definitions/Duration" - } - }, - "additionalProperties": false, - "required": [ - "quantity" - ] - }, - "MedicationKnowledge_Kinetics": { - "description": "Information about a medication that is used to support knowledge.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "areaUnderCurve": { - "description": "The drug concentration measured at certain discrete points in time.", - "items": { - "$ref": "#/definitions/Quantity" - }, - "type": "array" - }, - "lethalDose50": { - "description": "The median lethal dose of a drug.", - "items": { - "$ref": "#/definitions/Quantity" - }, - "type": "array" - }, - "halfLifePeriod": { - "description": "The time required for any specified property (e.g., the concentration of a substance in the body) to decrease by half.", - "$ref": "#/definitions/Duration" - } - }, - "additionalProperties": false - }, - "MedicationRequest": { - "description": "An order or request for both supply of the medication and the instructions for administration of the medication to a patient. The resource is called \"MedicationRequest\" rather than \"MedicationPrescription\" or \"MedicationOrder\" to generalize the use across inpatient and outpatient settings, including care plans, etc., and to harmonize with workflow patterns.", - "properties": { - "resourceType": { - "description": "This is a MedicationRequest resource", - "const": "MedicationRequest" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers associated with this medication request that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate. They are business identifiers assigned to this resource by the performer or other systems and remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "A code specifying the current state of the order. Generally, this will be active or completed state.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "Captures the reason for the current state of the MedicationRequest.", - "$ref": "#/definitions/CodeableConcept" - }, - "intent": { - "description": "Whether the request is a proposal, plan, or an original order.", - "$ref": "#/definitions/code" - }, - "_intent": { - "description": "Extensions for intent", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "Indicates the type of medication request (for example, where the medication is expected to be consumed or administered (i.e. inpatient or outpatient)).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "priority": { - "description": "Indicates how quickly the Medication Request should be addressed with respect to other requests.", - "$ref": "#/definitions/code" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "doNotPerform": { - "description": "If true indicates that the provider is asking for the medication request not to occur.", - "$ref": "#/definitions/boolean" - }, - "_doNotPerform": { - "description": "Extensions for doNotPerform", - "$ref": "#/definitions/Element" - }, - "reportedBoolean": { - "description": "Indicates if this record was captured as a secondary \u0027reported\u0027 record rather than as an original primary source-of-truth record. It may also indicate the source of the report.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_reportedBoolean": { - "description": "Extensions for reportedBoolean", - "$ref": "#/definitions/Element" - }, - "reportedReference": { - "description": "Indicates if this record was captured as a secondary \u0027reported\u0027 record rather than as an original primary source-of-truth record. It may also indicate the source of the report.", - "$ref": "#/definitions/Reference" - }, - "medicationCodeableConcept": { - "description": "Identifies the medication being requested. This is a link to a resource that represents the medication which may be the details of the medication or simply an attribute carrying a code that identifies the medication from a known list of medications.", - "$ref": "#/definitions/CodeableConcept" - }, - "medicationReference": { - "description": "Identifies the medication being requested. This is a link to a resource that represents the medication which may be the details of the medication or simply an attribute carrying a code that identifies the medication from a known list of medications.", - "$ref": "#/definitions/Reference" - }, - "subject": { - "description": "A link to a resource representing the person or set of individuals to whom the medication will be given.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The Encounter during which this [x] was created or to which the creation of this record is tightly associated.", - "$ref": "#/definitions/Reference" - }, - "supportingInformation": { - "description": "Include additional information (for example, patient height and weight) that supports the ordering of the medication.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "authoredOn": { - "description": "The date (and perhaps time) when the prescription was initially written or authored on.", - "$ref": "#/definitions/dateTime" - }, - "_authoredOn": { - "description": "Extensions for authoredOn", - "$ref": "#/definitions/Element" - }, - "requester": { - "description": "The individual, organization, or device that initiated the request and has responsibility for its activation.", - "$ref": "#/definitions/Reference" - }, - "performer": { - "description": "The specified desired performer of the medication treatment (e.g. the performer of the medication administration).", - "$ref": "#/definitions/Reference" - }, - "performerType": { - "description": "Indicates the type of performer of the administration of the medication.", - "$ref": "#/definitions/CodeableConcept" - }, - "recorder": { - "description": "The person who entered the order on behalf of another individual for example in the case of a verbal or a telephone order.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "The reason or the indication for ordering or not ordering the medication.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Condition or observation that supports why the medication was ordered.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "instantiatesCanonical": { - "description": "The URL pointing to a protocol, guideline, orderset, or other definition that is adhered to in whole or in part by this MedicationRequest.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "_instantiatesCanonical": { - "description": "Extensions for instantiatesCanonical", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "instantiatesUri": { - "description": "The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this MedicationRequest.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "basedOn": { - "description": "A plan or request that is fulfilled in whole or in part by this medication request.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "groupIdentifier": { - "description": "A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition or prescription.", - "$ref": "#/definitions/Identifier" - }, - "courseOfTherapyType": { - "description": "The description of the overall patte3rn of the administration of the medication to the patient.", - "$ref": "#/definitions/CodeableConcept" - }, - "insurance": { - "description": "Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be required for delivering the requested service.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Extra information about the prescription that could not be conveyed by the other attributes.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "dosageInstruction": { - "description": "Indicates how the medication is to be used by the patient.", - "items": { - "$ref": "#/definitions/Dosage" - }, - "type": "array" - }, - "dispenseRequest": { - "description": "Indicates the specific details for the dispense or medication supply part of a medication request (also known as a Medication Prescription or Medication Order). Note that this information is not always sent with the order. There may be in some settings (e.g. hospitals) institutional or system support for completing the dispense details in the pharmacy department.", - "$ref": "#/definitions/MedicationRequest_DispenseRequest" - }, - "substitution": { - "description": "Indicates whether or not substitution can or should be part of the dispense. In some cases, substitution must happen, in other cases substitution must not happen. This block explains the prescriber\u0027s intent. If nothing is specified substitution may be done.", - "$ref": "#/definitions/MedicationRequest_Substitution" - }, - "priorPrescription": { - "description": "A link to a resource representing an earlier order related order or prescription.", - "$ref": "#/definitions/Reference" - }, - "detectedIssue": { - "description": "Indicates an actual or potential clinical issue with or between one or more active or proposed clinical actions for a patient; e.g. Drug-drug interaction, duplicate therapy, dosage alert etc.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "eventHistory": { - "description": "Links to Provenance records for past versions of this resource or fulfilling request or event resources that identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the resource.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "MedicationRequest_DispenseRequest": { - "description": "An order or request for both supply of the medication and the instructions for administration of the medication to a patient. The resource is called \"MedicationRequest\" rather than \"MedicationPrescription\" or \"MedicationOrder\" to generalize the use across inpatient and outpatient settings, including care plans, etc., and to harmonize with workflow patterns.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "initialFill": { - "description": "Indicates the quantity or duration for the first dispense of the medication.", - "$ref": "#/definitions/MedicationRequest_InitialFill" - }, - "dispenseInterval": { - "description": "The minimum period of time that must occur between dispenses of the medication.", - "$ref": "#/definitions/Duration" - }, - "validityPeriod": { - "description": "This indicates the validity period of a prescription (stale dating the Prescription).", - "$ref": "#/definitions/Period" - }, - "numberOfRepeatsAllowed": { - "description": "An integer indicating the number of times, in addition to the original dispense, (aka refills or repeats) that the patient can receive the prescribed medication. Usage Notes: This integer does not include the original order dispense. This means that if an order indicates dispense 30 tablets plus \"3 repeats\", then the order can be dispensed a total of 4 times and the patient can receive a total of 120 tablets. A prescriber may explicitly say that zero refills are permitted after the initial dispense.", - "$ref": "#/definitions/unsignedInt" - }, - "_numberOfRepeatsAllowed": { - "description": "Extensions for numberOfRepeatsAllowed", - "$ref": "#/definitions/Element" - }, - "quantity": { - "description": "The amount that is to be dispensed for one fill.", - "$ref": "#/definitions/Quantity" - }, - "expectedSupplyDuration": { - "description": "Identifies the period time over which the supplied product is expected to be used, or the length of time the dispense is expected to last.", - "$ref": "#/definitions/Duration" - }, - "performer": { - "description": "Indicates the intended dispensing Organization specified by the prescriber.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "MedicationRequest_InitialFill": { - "description": "An order or request for both supply of the medication and the instructions for administration of the medication to a patient. The resource is called \"MedicationRequest\" rather than \"MedicationPrescription\" or \"MedicationOrder\" to generalize the use across inpatient and outpatient settings, including care plans, etc., and to harmonize with workflow patterns.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "quantity": { - "description": "The amount or quantity to provide as part of the first dispense.", - "$ref": "#/definitions/Quantity" - }, - "duration": { - "description": "The length of time that the first dispense is expected to last.", - "$ref": "#/definitions/Duration" - } - }, - "additionalProperties": false - }, - "MedicationRequest_Substitution": { - "description": "An order or request for both supply of the medication and the instructions for administration of the medication to a patient. The resource is called \"MedicationRequest\" rather than \"MedicationPrescription\" or \"MedicationOrder\" to generalize the use across inpatient and outpatient settings, including care plans, etc., and to harmonize with workflow patterns.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "allowedBoolean": { - "description": "True if the prescriber allows a different drug to be dispensed from what was prescribed.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_allowedBoolean": { - "description": "Extensions for allowedBoolean", - "$ref": "#/definitions/Element" - }, - "allowedCodeableConcept": { - "description": "True if the prescriber allows a different drug to be dispensed from what was prescribed.", - "$ref": "#/definitions/CodeableConcept" - }, - "reason": { - "description": "Indicates the reason for the substitution, or why substitution must or must not be performed.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "MedicationStatement": { - "description": "A record of a medication that is being consumed by a patient. A MedicationStatement may indicate that the patient may be taking the medication now or has taken the medication in the past or will be taking the medication in the future. The source of this information can be the patient, significant other (such as a family member or spouse), or a clinician. A common scenario where this information is captured is during the history taking process during a patient visit or stay. The medication information may come from sources such as the patient\u0027s memory, from a prescription bottle, or from a list of medications the patient, clinician or other party maintains. \n\nThe primary difference between a medication statement and a medication administration is that the medication administration has complete administration information and is based on actual administration information from the person who administered the medication. A medication statement is often, if not always, less specific. There is no required date/time when the medication was administered, in fact we only know that a source has reported the patient is taking this medication, where details such as time, quantity, or rate or even medication product may be incomplete or missing or less precise. As stated earlier, the medication statement information may come from the patient\u0027s memory, from a prescription bottle or from a list of medications the patient, clinician or other party maintains. Medication administration is more formal and is not missing detailed information.", - "properties": { - "resourceType": { - "description": "This is a MedicationStatement resource", - "const": "MedicationStatement" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers associated with this Medication Statement that are defined by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate. They are business identifiers assigned to this resource by the performer or other systems and remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "basedOn": { - "description": "A plan, proposal or order that is fulfilled in whole or in part by this event.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "partOf": { - "description": "A larger event of which this particular event is a component or step.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "A code representing the patient or other source\u0027s judgment about the state of the medication used that this statement is about. Generally, this will be active or completed.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "Captures the reason for the current state of the MedicationStatement.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "category": { - "description": "Indicates where the medication is expected to be consumed or administered.", - "$ref": "#/definitions/CodeableConcept" - }, - "medicationCodeableConcept": { - "description": "Identifies the medication being administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.", - "$ref": "#/definitions/CodeableConcept" - }, - "medicationReference": { - "description": "Identifies the medication being administered. This is either a link to a resource representing the details of the medication or a simple attribute carrying a code that identifies the medication from a known list of medications.", - "$ref": "#/definitions/Reference" - }, - "subject": { - "description": "The person, animal or group who is/was taking the medication.", - "$ref": "#/definitions/Reference" - }, - "context": { - "description": "The encounter or episode of care that establishes the context for this MedicationStatement.", - "$ref": "#/definitions/Reference" - }, - "effectiveDateTime": { - "description": "The interval of time during which it is being asserted that the patient is/was/will be taking the medication (or was not taking, when the MedicationStatement.taken element is No).", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_effectiveDateTime": { - "description": "Extensions for effectiveDateTime", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The interval of time during which it is being asserted that the patient is/was/will be taking the medication (or was not taking, when the MedicationStatement.taken element is No).", - "$ref": "#/definitions/Period" - }, - "dateAsserted": { - "description": "The date when the medication statement was asserted by the information source.", - "$ref": "#/definitions/dateTime" - }, - "_dateAsserted": { - "description": "Extensions for dateAsserted", - "$ref": "#/definitions/Element" - }, - "informationSource": { - "description": "The person or organization that provided the information about the taking of this medication. Note: Use derivedFrom when a MedicationStatement is derived from other resources, e.g. Claim or MedicationRequest.", - "$ref": "#/definitions/Reference" - }, - "derivedFrom": { - "description": "Allows linking the MedicationStatement to the underlying MedicationRequest, or to other information that supports or is used to derive the MedicationStatement.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "reasonCode": { - "description": "A reason for why the medication is being/was taken.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Condition or observation that supports why the medication is being/was taken.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Provides extra information about the medication statement that is not conveyed by the other attributes.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "dosage": { - "description": "Indicates how the medication is/was or should be taken by the patient.", - "items": { - "$ref": "#/definitions/Dosage" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "MedicinalProduct": { - "description": "Detailed definition of a medicinal product, typically for uses other than direct patient care (e.g. regulatory use).", - "properties": { - "resourceType": { - "description": "This is a MedicinalProduct resource", - "const": "MedicinalProduct" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifier for this product. Could be an MPID.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "type": { - "description": "Regulatory type, e.g. Investigational or Authorized.", - "$ref": "#/definitions/CodeableConcept" - }, - "domain": { - "description": "If this medicine applies to human or veterinary uses.", - "$ref": "#/definitions/Coding" - }, - "combinedPharmaceuticalDoseForm": { - "description": "The dose form for a single part product, or combined form of a multiple part product.", - "$ref": "#/definitions/CodeableConcept" - }, - "legalStatusOfSupply": { - "description": "The legal status of supply of the medicinal product as classified by the regulator.", - "$ref": "#/definitions/CodeableConcept" - }, - "additionalMonitoringIndicator": { - "description": "Whether the Medicinal Product is subject to additional monitoring for regulatory reasons.", - "$ref": "#/definitions/CodeableConcept" - }, - "specialMeasures": { - "description": "Whether the Medicinal Product is subject to special measures for regulatory reasons.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_specialMeasures": { - "description": "Extensions for specialMeasures", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "paediatricUseIndicator": { - "description": "If authorised for use in children.", - "$ref": "#/definitions/CodeableConcept" - }, - "productClassification": { - "description": "Allows the product to be classified by various systems.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "marketingStatus": { - "description": "Marketing status of the medicinal product, in contrast to marketing authorizaton.", - "items": { - "$ref": "#/definitions/MarketingStatus" - }, - "type": "array" - }, - "pharmaceuticalProduct": { - "description": "Pharmaceutical aspects of product.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "packagedMedicinalProduct": { - "description": "Package representation for the product.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "attachedDocument": { - "description": "Supporting documentation, typically for regulatory submission.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "masterFile": { - "description": "A master file for to the medicinal product (e.g. Pharmacovigilance System Master File).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "contact": { - "description": "A product specific contact, person (in a role), or an organization.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "clinicalTrial": { - "description": "Clinical trials or studies that this product is involved in.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "name": { - "description": "The product\u0027s name, including full name and possibly coded parts.", - "items": { - "$ref": "#/definitions/MedicinalProduct_Name" - }, - "type": "array" - }, - "crossReference": { - "description": "Reference to another product, e.g. for linking authorised to investigational product.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "manufacturingBusinessOperation": { - "description": "An operation applied to the product, for manufacturing or adminsitrative purpose.", - "items": { - "$ref": "#/definitions/MedicinalProduct_ManufacturingBusinessOperation" - }, - "type": "array" - }, - "specialDesignation": { - "description": "Indicates if the medicinal product has an orphan designation for the treatment of a rare disease.", - "items": { - "$ref": "#/definitions/MedicinalProduct_SpecialDesignation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "name", - "resourceType" - ] - }, - "MedicinalProduct_Name": { - "description": "Detailed definition of a medicinal product, typically for uses other than direct patient care (e.g. regulatory use).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "productName": { - "description": "The full product name.", - "$ref": "#/definitions/string" - }, - "_productName": { - "description": "Extensions for productName", - "$ref": "#/definitions/Element" - }, - "namePart": { - "description": "Coding words or phrases of the name.", - "items": { - "$ref": "#/definitions/MedicinalProduct_NamePart" - }, - "type": "array" - }, - "countryLanguage": { - "description": "Country where the name applies.", - "items": { - "$ref": "#/definitions/MedicinalProduct_CountryLanguage" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "MedicinalProduct_NamePart": { - "description": "Detailed definition of a medicinal product, typically for uses other than direct patient care (e.g. regulatory use).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "part": { - "description": "A fragment of a product name.", - "$ref": "#/definitions/string" - }, - "_part": { - "description": "Extensions for part", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Idenifying type for this part of the name (e.g. strength part).", - "$ref": "#/definitions/Coding" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "MedicinalProduct_CountryLanguage": { - "description": "Detailed definition of a medicinal product, typically for uses other than direct patient care (e.g. regulatory use).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "country": { - "description": "Country code for where this name applies.", - "$ref": "#/definitions/CodeableConcept" - }, - "jurisdiction": { - "description": "Jurisdiction code for where this name applies.", - "$ref": "#/definitions/CodeableConcept" - }, - "language": { - "description": "Language code for this name.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "country", - "language" - ] - }, - "MedicinalProduct_ManufacturingBusinessOperation": { - "description": "Detailed definition of a medicinal product, typically for uses other than direct patient care (e.g. regulatory use).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "operationType": { - "description": "The type of manufacturing operation.", - "$ref": "#/definitions/CodeableConcept" - }, - "authorisationReferenceNumber": { - "description": "Regulatory authorization reference number.", - "$ref": "#/definitions/Identifier" - }, - "effectiveDate": { - "description": "Regulatory authorization date.", - "$ref": "#/definitions/dateTime" - }, - "_effectiveDate": { - "description": "Extensions for effectiveDate", - "$ref": "#/definitions/Element" - }, - "confidentialityIndicator": { - "description": "To indicate if this proces is commercially confidential.", - "$ref": "#/definitions/CodeableConcept" - }, - "manufacturer": { - "description": "The manufacturer or establishment associated with the process.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "regulator": { - "description": "A regulator which oversees the operation.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "MedicinalProduct_SpecialDesignation": { - "description": "Detailed definition of a medicinal product, typically for uses other than direct patient care (e.g. regulatory use).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier for the designation, or procedure number.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "type": { - "description": "The type of special designation, e.g. orphan drug, minor use.", - "$ref": "#/definitions/CodeableConcept" - }, - "intendedUse": { - "description": "The intended use of the product, e.g. prevention, treatment.", - "$ref": "#/definitions/CodeableConcept" - }, - "indicationCodeableConcept": { - "description": "Condition for which the medicinal use applies.", - "$ref": "#/definitions/CodeableConcept" - }, - "indicationReference": { - "description": "Condition for which the medicinal use applies.", - "$ref": "#/definitions/Reference" - }, - "status": { - "description": "For example granted, pending, expired or withdrawn.", - "$ref": "#/definitions/CodeableConcept" - }, - "date": { - "description": "Date when the designation was granted.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "species": { - "description": "Animal species for which this applies.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "MedicinalProductAuthorization": { - "description": "The regulatory authorization of a medicinal product.", - "properties": { - "resourceType": { - "description": "This is a MedicinalProductAuthorization resource", - "const": "MedicinalProductAuthorization" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifier for the marketing authorization, as assigned by a regulator.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "subject": { - "description": "The medicinal product that is being authorized.", - "$ref": "#/definitions/Reference" - }, - "country": { - "description": "The country in which the marketing authorization has been granted.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "jurisdiction": { - "description": "Jurisdiction within a country.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "status": { - "description": "The status of the marketing authorization.", - "$ref": "#/definitions/CodeableConcept" - }, - "statusDate": { - "description": "The date at which the given status has become applicable.", - "$ref": "#/definitions/dateTime" - }, - "_statusDate": { - "description": "Extensions for statusDate", - "$ref": "#/definitions/Element" - }, - "restoreDate": { - "description": "The date when a suspended the marketing or the marketing authorization of the product is anticipated to be restored.", - "$ref": "#/definitions/dateTime" - }, - "_restoreDate": { - "description": "Extensions for restoreDate", - "$ref": "#/definitions/Element" - }, - "validityPeriod": { - "description": "The beginning of the time period in which the marketing authorization is in the specific status shall be specified A complete date consisting of day, month and year shall be specified using the ISO 8601 date format.", - "$ref": "#/definitions/Period" - }, - "dataExclusivityPeriod": { - "description": "A period of time after authorization before generic product applicatiosn can be submitted.", - "$ref": "#/definitions/Period" - }, - "dateOfFirstAuthorization": { - "description": "The date when the first authorization was granted by a Medicines Regulatory Agency.", - "$ref": "#/definitions/dateTime" - }, - "_dateOfFirstAuthorization": { - "description": "Extensions for dateOfFirstAuthorization", - "$ref": "#/definitions/Element" - }, - "internationalBirthDate": { - "description": "Date of first marketing authorization for a company\u0027s new medicinal product in any country in the World.", - "$ref": "#/definitions/dateTime" - }, - "_internationalBirthDate": { - "description": "Extensions for internationalBirthDate", - "$ref": "#/definitions/Element" - }, - "legalBasis": { - "description": "The legal framework against which this authorization is granted.", - "$ref": "#/definitions/CodeableConcept" - }, - "jurisdictionalAuthorization": { - "description": "Authorization in areas within a country.", - "items": { - "$ref": "#/definitions/MedicinalProductAuthorization_JurisdictionalAuthorization" - }, - "type": "array" - }, - "holder": { - "description": "Marketing Authorization Holder.", - "$ref": "#/definitions/Reference" - }, - "regulator": { - "description": "Medicines Regulatory Agency.", - "$ref": "#/definitions/Reference" - }, - "procedure": { - "description": "The regulatory procedure for granting or amending a marketing authorization.", - "$ref": "#/definitions/MedicinalProductAuthorization_Procedure" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "MedicinalProductAuthorization_JurisdictionalAuthorization": { - "description": "The regulatory authorization of a medicinal product.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "The assigned number for the marketing authorization.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "country": { - "description": "Country of authorization.", - "$ref": "#/definitions/CodeableConcept" - }, - "jurisdiction": { - "description": "Jurisdiction within a country.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "legalStatusOfSupply": { - "description": "The legal status of supply in a jurisdiction or region.", - "$ref": "#/definitions/CodeableConcept" - }, - "validityPeriod": { - "description": "The start and expected end date of the authorization.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "MedicinalProductAuthorization_Procedure": { - "description": "The regulatory authorization of a medicinal product.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier for this procedure.", - "$ref": "#/definitions/Identifier" - }, - "type": { - "description": "Type of procedure.", - "$ref": "#/definitions/CodeableConcept" - }, - "datePeriod": { - "description": "Date of procedure.", - "$ref": "#/definitions/Period" - }, - "dateDateTime": { - "description": "Date of procedure.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_dateDateTime": { - "description": "Extensions for dateDateTime", - "$ref": "#/definitions/Element" - }, - "application": { - "description": "Applcations submitted to obtain a marketing authorization.", - "items": { - "$ref": "#/definitions/MedicinalProductAuthorization_Procedure" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "MedicinalProductContraindication": { - "description": "The clinical particulars - indications, contraindications etc. of a medicinal product, including for regulatory purposes.", - "properties": { - "resourceType": { - "description": "This is a MedicinalProductContraindication resource", - "const": "MedicinalProductContraindication" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "subject": { - "description": "The medication for which this is an indication.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "disease": { - "description": "The disease, symptom or procedure for the contraindication.", - "$ref": "#/definitions/CodeableConcept" - }, - "diseaseStatus": { - "description": "The status of the disease or symptom for the contraindication.", - "$ref": "#/definitions/CodeableConcept" - }, - "comorbidity": { - "description": "A comorbidity (concurrent condition) or coinfection.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "therapeuticIndication": { - "description": "Information about the use of the medicinal product in relation to other therapies as part of the indication.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "otherTherapy": { - "description": "Information about the use of the medicinal product in relation to other therapies described as part of the indication.", - "items": { - "$ref": "#/definitions/MedicinalProductContraindication_OtherTherapy" - }, - "type": "array" - }, - "population": { - "description": "The population group to which this applies.", - "items": { - "$ref": "#/definitions/Population" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "MedicinalProductContraindication_OtherTherapy": { - "description": "The clinical particulars - indications, contraindications etc. of a medicinal product, including for regulatory purposes.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "therapyRelationshipType": { - "description": "The type of relationship between the medicinal product indication or contraindication and another therapy.", - "$ref": "#/definitions/CodeableConcept" - }, - "medicationCodeableConcept": { - "description": "Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication.", - "$ref": "#/definitions/CodeableConcept" - }, - "medicationReference": { - "description": "Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "therapyRelationshipType" - ] - }, - "MedicinalProductIndication": { - "description": "Indication for the Medicinal Product.", - "properties": { - "resourceType": { - "description": "This is a MedicinalProductIndication resource", - "const": "MedicinalProductIndication" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "subject": { - "description": "The medication for which this is an indication.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "diseaseSymptomProcedure": { - "description": "The disease, symptom or procedure that is the indication for treatment.", - "$ref": "#/definitions/CodeableConcept" - }, - "diseaseStatus": { - "description": "The status of the disease or symptom for which the indication applies.", - "$ref": "#/definitions/CodeableConcept" - }, - "comorbidity": { - "description": "Comorbidity (concurrent condition) or co-infection as part of the indication.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "intendedEffect": { - "description": "The intended effect, aim or strategy to be achieved by the indication.", - "$ref": "#/definitions/CodeableConcept" - }, - "duration": { - "description": "Timing or duration information as part of the indication.", - "$ref": "#/definitions/Quantity" - }, - "otherTherapy": { - "description": "Information about the use of the medicinal product in relation to other therapies described as part of the indication.", - "items": { - "$ref": "#/definitions/MedicinalProductIndication_OtherTherapy" - }, - "type": "array" - }, - "undesirableEffect": { - "description": "Describe the undesirable effects of the medicinal product.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "population": { - "description": "The population group to which this applies.", - "items": { - "$ref": "#/definitions/Population" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "MedicinalProductIndication_OtherTherapy": { - "description": "Indication for the Medicinal Product.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "therapyRelationshipType": { - "description": "The type of relationship between the medicinal product indication or contraindication and another therapy.", - "$ref": "#/definitions/CodeableConcept" - }, - "medicationCodeableConcept": { - "description": "Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication.", - "$ref": "#/definitions/CodeableConcept" - }, - "medicationReference": { - "description": "Reference to a specific medication (active substance, medicinal product or class of products) as part of an indication or contraindication.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "therapyRelationshipType" - ] - }, - "MedicinalProductIngredient": { - "description": "An ingredient of a manufactured item or pharmaceutical product.", - "properties": { - "resourceType": { - "description": "This is a MedicinalProductIngredient resource", - "const": "MedicinalProductIngredient" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "The identifier(s) of this Ingredient that are assigned by business processes and/or used to refer to it when a direct URL reference to the resource itself is not appropriate.", - "$ref": "#/definitions/Identifier" - }, - "role": { - "description": "Ingredient role e.g. Active ingredient, excipient.", - "$ref": "#/definitions/CodeableConcept" - }, - "allergenicIndicator": { - "description": "If the ingredient is a known or suspected allergen.", - "$ref": "#/definitions/boolean" - }, - "_allergenicIndicator": { - "description": "Extensions for allergenicIndicator", - "$ref": "#/definitions/Element" - }, - "manufacturer": { - "description": "Manufacturer of this Ingredient.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "specifiedSubstance": { - "description": "A specified substance that comprises this ingredient.", - "items": { - "$ref": "#/definitions/MedicinalProductIngredient_SpecifiedSubstance" - }, - "type": "array" - }, - "substance": { - "description": "The ingredient substance.", - "$ref": "#/definitions/MedicinalProductIngredient_Substance" - } - }, - "additionalProperties": false, - "required": [ - "role", - "resourceType" - ] - }, - "MedicinalProductIngredient_SpecifiedSubstance": { - "description": "An ingredient of a manufactured item or pharmaceutical product.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The specified substance.", - "$ref": "#/definitions/CodeableConcept" - }, - "group": { - "description": "The group of specified substance, e.g. group 1 to 4.", - "$ref": "#/definitions/CodeableConcept" - }, - "confidentiality": { - "description": "Confidentiality level of the specified substance as the ingredient.", - "$ref": "#/definitions/CodeableConcept" - }, - "strength": { - "description": "Quantity of the substance or specified substance present in the manufactured item or pharmaceutical product.", - "items": { - "$ref": "#/definitions/MedicinalProductIngredient_Strength" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "code", - "group" - ] - }, - "MedicinalProductIngredient_Strength": { - "description": "An ingredient of a manufactured item or pharmaceutical product.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "presentation": { - "description": "The quantity of substance in the unit of presentation, or in the volume (or mass) of the single pharmaceutical product or manufactured item.", - "$ref": "#/definitions/Ratio" - }, - "presentationLowLimit": { - "description": "A lower limit for the quantity of substance in the unit of presentation. For use when there is a range of strengths, this is the lower limit, with the presentation attribute becoming the upper limit.", - "$ref": "#/definitions/Ratio" - }, - "concentration": { - "description": "The strength per unitary volume (or mass).", - "$ref": "#/definitions/Ratio" - }, - "concentrationLowLimit": { - "description": "A lower limit for the strength per unitary volume (or mass), for when there is a range. The concentration attribute then becomes the upper limit.", - "$ref": "#/definitions/Ratio" - }, - "measurementPoint": { - "description": "For when strength is measured at a particular point or distance.", - "$ref": "#/definitions/string" - }, - "_measurementPoint": { - "description": "Extensions for measurementPoint", - "$ref": "#/definitions/Element" - }, - "country": { - "description": "The country or countries for which the strength range applies.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "referenceStrength": { - "description": "Strength expressed in terms of a reference substance.", - "items": { - "$ref": "#/definitions/MedicinalProductIngredient_ReferenceStrength" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "presentation" - ] - }, - "MedicinalProductIngredient_ReferenceStrength": { - "description": "An ingredient of a manufactured item or pharmaceutical product.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "substance": { - "description": "Relevant reference substance.", - "$ref": "#/definitions/CodeableConcept" - }, - "strength": { - "description": "Strength expressed in terms of a reference substance.", - "$ref": "#/definitions/Ratio" - }, - "strengthLowLimit": { - "description": "Strength expressed in terms of a reference substance.", - "$ref": "#/definitions/Ratio" - }, - "measurementPoint": { - "description": "For when strength is measured at a particular point or distance.", - "$ref": "#/definitions/string" - }, - "_measurementPoint": { - "description": "Extensions for measurementPoint", - "$ref": "#/definitions/Element" - }, - "country": { - "description": "The country or countries for which the strength range applies.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "strength" - ] - }, - "MedicinalProductIngredient_Substance": { - "description": "An ingredient of a manufactured item or pharmaceutical product.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The ingredient substance.", - "$ref": "#/definitions/CodeableConcept" - }, - "strength": { - "description": "Quantity of the substance or specified substance present in the manufactured item or pharmaceutical product.", - "items": { - "$ref": "#/definitions/MedicinalProductIngredient_Strength" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "MedicinalProductInteraction": { - "description": "The interactions of the medicinal product with other medicinal products, or other forms of interactions.", - "properties": { - "resourceType": { - "description": "This is a MedicinalProductInteraction resource", - "const": "MedicinalProductInteraction" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "subject": { - "description": "The medication for which this is a described interaction.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "description": { - "description": "The interaction described.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "interactant": { - "description": "The specific medication, food or laboratory test that interacts.", - "items": { - "$ref": "#/definitions/MedicinalProductInteraction_Interactant" - }, - "type": "array" - }, - "type": { - "description": "The type of the interaction e.g. drug-drug interaction, drug-food interaction, drug-lab test interaction.", - "$ref": "#/definitions/CodeableConcept" - }, - "effect": { - "description": "The effect of the interaction, for example \"reduced gastric absorption of primary medication\".", - "$ref": "#/definitions/CodeableConcept" - }, - "incidence": { - "description": "The incidence of the interaction, e.g. theoretical, observed.", - "$ref": "#/definitions/CodeableConcept" - }, - "management": { - "description": "Actions for managing the interaction.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "MedicinalProductInteraction_Interactant": { - "description": "The interactions of the medicinal product with other medicinal products, or other forms of interactions.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "itemReference": { - "description": "The specific medication, food or laboratory test that interacts.", - "$ref": "#/definitions/Reference" - }, - "itemCodeableConcept": { - "description": "The specific medication, food or laboratory test that interacts.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "MedicinalProductManufactured": { - "description": "The manufactured item as contained in the packaged medicinal product.", - "properties": { - "resourceType": { - "description": "This is a MedicinalProductManufactured resource", - "const": "MedicinalProductManufactured" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "manufacturedDoseForm": { - "description": "Dose form as manufactured and before any transformation into the pharmaceutical product.", - "$ref": "#/definitions/CodeableConcept" - }, - "unitOfPresentation": { - "description": "The “real world” units in which the quantity of the manufactured item is described.", - "$ref": "#/definitions/CodeableConcept" - }, - "quantity": { - "description": "The quantity or \"count number\" of the manufactured item.", - "$ref": "#/definitions/Quantity" - }, - "manufacturer": { - "description": "Manufacturer of the item (Note that this should be named \"manufacturer\" but it currently causes technical issues).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "ingredient": { - "description": "Ingredient.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "physicalCharacteristics": { - "description": "Dimensions, color etc.", - "$ref": "#/definitions/ProdCharacteristic" - }, - "otherCharacteristics": { - "description": "Other codeable characteristics.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "quantity", - "manufacturedDoseForm", - "resourceType" - ] - }, - "MedicinalProductPackaged": { - "description": "A medicinal product in a container or package.", - "properties": { - "resourceType": { - "description": "This is a MedicinalProductPackaged resource", - "const": "MedicinalProductPackaged" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique identifier.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "subject": { - "description": "The product with this is a pack for.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "description": { - "description": "Textual description.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "legalStatusOfSupply": { - "description": "The legal status of supply of the medicinal product as classified by the regulator.", - "$ref": "#/definitions/CodeableConcept" - }, - "marketingStatus": { - "description": "Marketing information.", - "items": { - "$ref": "#/definitions/MarketingStatus" - }, - "type": "array" - }, - "marketingAuthorization": { - "description": "Manufacturer of this Package Item.", - "$ref": "#/definitions/Reference" - }, - "manufacturer": { - "description": "Manufacturer of this Package Item.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "batchIdentifier": { - "description": "Batch numbering.", - "items": { - "$ref": "#/definitions/MedicinalProductPackaged_BatchIdentifier" - }, - "type": "array" - }, - "packageItem": { - "description": "A packaging item, as a contained for medicine, possibly with other packaging items within.", - "items": { - "$ref": "#/definitions/MedicinalProductPackaged_PackageItem" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "packageItem", - "resourceType" - ] - }, - "MedicinalProductPackaged_BatchIdentifier": { - "description": "A medicinal product in a container or package.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "outerPackaging": { - "description": "A number appearing on the outer packaging of a specific batch.", - "$ref": "#/definitions/Identifier" - }, - "immediatePackaging": { - "description": "A number appearing on the immediate packaging (and not the outer packaging).", - "$ref": "#/definitions/Identifier" - } - }, - "additionalProperties": false, - "required": [ - "outerPackaging" - ] - }, - "MedicinalProductPackaged_PackageItem": { - "description": "A medicinal product in a container or package.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Including possibly Data Carrier Identifier.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "type": { - "description": "The physical type of the container of the medicine.", - "$ref": "#/definitions/CodeableConcept" - }, - "quantity": { - "description": "The quantity of this package in the medicinal product, at the current level of packaging. The outermost is always 1.", - "$ref": "#/definitions/Quantity" - }, - "material": { - "description": "Material type of the package item.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "alternateMaterial": { - "description": "A possible alternate material for the packaging.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "device": { - "description": "A device accompanying a medicinal product.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "manufacturedItem": { - "description": "The manufactured item as contained in the packaged medicinal product.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "packageItem": { - "description": "Allows containers within containers.", - "items": { - "$ref": "#/definitions/MedicinalProductPackaged_PackageItem" - }, - "type": "array" - }, - "physicalCharacteristics": { - "description": "Dimensions, color etc.", - "$ref": "#/definitions/ProdCharacteristic" - }, - "otherCharacteristics": { - "description": "Other codeable characteristics.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "shelfLifeStorage": { - "description": "Shelf Life and storage information.", - "items": { - "$ref": "#/definitions/ProductShelfLife" - }, - "type": "array" - }, - "manufacturer": { - "description": "Manufacturer of this Package Item.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "quantity", - "type" - ] - }, - "MedicinalProductPharmaceutical": { - "description": "A pharmaceutical product described in terms of its composition and dose form.", - "properties": { - "resourceType": { - "description": "This is a MedicinalProductPharmaceutical resource", - "const": "MedicinalProductPharmaceutical" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "An identifier for the pharmaceutical medicinal product.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "administrableDoseForm": { - "description": "The administrable dose form, after necessary reconstitution.", - "$ref": "#/definitions/CodeableConcept" - }, - "unitOfPresentation": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "ingredient": { - "description": "Ingredient.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "device": { - "description": "Accompanying device.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "characteristics": { - "description": "Characteristics e.g. a products onset of action.", - "items": { - "$ref": "#/definitions/MedicinalProductPharmaceutical_Characteristics" - }, - "type": "array" - }, - "routeOfAdministration": { - "description": "The path by which the pharmaceutical product is taken into or makes contact with the body.", - "items": { - "$ref": "#/definitions/MedicinalProductPharmaceutical_RouteOfAdministration" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "administrableDoseForm", - "routeOfAdministration", - "resourceType" - ] - }, - "MedicinalProductPharmaceutical_Characteristics": { - "description": "A pharmaceutical product described in terms of its composition and dose form.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A coded characteristic.", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "The status of characteristic e.g. assigned or pending.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "MedicinalProductPharmaceutical_RouteOfAdministration": { - "description": "A pharmaceutical product described in terms of its composition and dose form.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Coded expression for the route.", - "$ref": "#/definitions/CodeableConcept" - }, - "firstDose": { - "description": "The first dose (dose quantity) administered in humans can be specified, for a product under investigation, using a numerical value and its unit of measurement.", - "$ref": "#/definitions/Quantity" - }, - "maxSingleDose": { - "description": "The maximum single dose that can be administered as per the protocol of a clinical trial can be specified using a numerical value and its unit of measurement.", - "$ref": "#/definitions/Quantity" - }, - "maxDosePerDay": { - "description": "The maximum dose per day (maximum dose quantity to be administered in any one 24-h period) that can be administered as per the protocol referenced in the clinical trial authorisation.", - "$ref": "#/definitions/Quantity" - }, - "maxDosePerTreatmentPeriod": { - "description": "The maximum dose per treatment period that can be administered as per the protocol referenced in the clinical trial authorisation.", - "$ref": "#/definitions/Ratio" - }, - "maxTreatmentPeriod": { - "description": "The maximum treatment period during which an Investigational Medicinal Product can be administered as per the protocol referenced in the clinical trial authorisation.", - "$ref": "#/definitions/Duration" - }, - "targetSpecies": { - "description": "A species for which this route applies.", - "items": { - "$ref": "#/definitions/MedicinalProductPharmaceutical_TargetSpecies" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "MedicinalProductPharmaceutical_TargetSpecies": { - "description": "A pharmaceutical product described in terms of its composition and dose form.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Coded expression for the species.", - "$ref": "#/definitions/CodeableConcept" - }, - "withdrawalPeriod": { - "description": "A species specific time during which consumption of animal product is not appropriate.", - "items": { - "$ref": "#/definitions/MedicinalProductPharmaceutical_WithdrawalPeriod" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "MedicinalProductPharmaceutical_WithdrawalPeriod": { - "description": "A pharmaceutical product described in terms of its composition and dose form.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "tissue": { - "description": "Coded expression for the type of tissue for which the withdrawal period applues, e.g. meat, milk.", - "$ref": "#/definitions/CodeableConcept" - }, - "value": { - "description": "A value for the time.", - "$ref": "#/definitions/Quantity" - }, - "supportingInformation": { - "description": "Extra information about the withdrawal period.", - "$ref": "#/definitions/string" - }, - "_supportingInformation": { - "description": "Extensions for supportingInformation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "tissue", - "value" - ] - }, - "MedicinalProductUndesirableEffect": { - "description": "Describe the undesirable effects of the medicinal product.", - "properties": { - "resourceType": { - "description": "This is a MedicinalProductUndesirableEffect resource", - "const": "MedicinalProductUndesirableEffect" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "subject": { - "description": "The medication for which this is an indication.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "symptomConditionEffect": { - "description": "The symptom, condition or undesirable effect.", - "$ref": "#/definitions/CodeableConcept" - }, - "classification": { - "description": "Classification of the effect.", - "$ref": "#/definitions/CodeableConcept" - }, - "frequencyOfOccurrence": { - "description": "The frequency of occurrence of the effect.", - "$ref": "#/definitions/CodeableConcept" - }, - "population": { - "description": "The population group to which this applies.", - "items": { - "$ref": "#/definitions/Population" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "MessageDefinition": { - "description": "Defines the characteristics of a message that can be shared between systems, including the type of event that initiates the message, the content to be transmitted and what response(s), if any, are permitted.", - "properties": { - "resourceType": { - "description": "This is a MessageDefinition resource", - "const": "MessageDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "The business identifier that is used to reference the MessageDefinition and *is* expected to be consistent from server to server.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this message definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the message definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the message definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the message definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the message definition.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "replaces": { - "description": "A MessageDefinition that is superseded by this definition.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "status": { - "description": "The status of this message definition. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this message definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the message definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the message definition changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the message definition.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the message definition from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate message definition instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the message definition is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this message definition is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the message definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the message definition.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "base": { - "description": "The MessageDefinition that is the basis for the contents of this resource.", - "$ref": "#/definitions/canonical" - }, - "parent": { - "description": "Identifies a protocol or workflow that this MessageDefinition represents a step in.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "eventCoding": { - "description": "Event code or link to the EventDefinition.", - "$ref": "#/definitions/Coding" - }, - "eventUri": { - "description": "Event code or link to the EventDefinition.", - "pattern": "^\\S*$", - "type": "string" - }, - "_eventUri": { - "description": "Extensions for eventUri", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "The impact of the content of the message.", - "enum": [ - "consequence", - "currency", - "notification" - ] - }, - "_category": { - "description": "Extensions for category", - "$ref": "#/definitions/Element" - }, - "focus": { - "description": "Identifies the resource (or resources) that are being addressed by the event. For example, the Encounter for an admit message or two Account records for a merge.", - "items": { - "$ref": "#/definitions/MessageDefinition_Focus" - }, - "type": "array" - }, - "responseRequired": { - "description": "Declare at a message definition level whether a response is required or only upon error or success, or never.", - "enum": [ - "always", - "on-error", - "never", - "on-success" - ] - }, - "_responseRequired": { - "description": "Extensions for responseRequired", - "$ref": "#/definitions/Element" - }, - "allowedResponse": { - "description": "Indicates what types of messages may be sent as an application-level response to this message.", - "items": { - "$ref": "#/definitions/MessageDefinition_AllowedResponse" - }, - "type": "array" - }, - "graph": { - "description": "Canonical reference to a GraphDefinition. If a URL is provided, it is the canonical reference to a [[[GraphDefinition]]] that it controls what resources are to be added to the bundle when building the document. The GraphDefinition can also specify profiles that apply to the various resources.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "MessageDefinition_Focus": { - "description": "Defines the characteristics of a message that can be shared between systems, including the type of event that initiates the message, the content to be transmitted and what response(s), if any, are permitted.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The kind of resource that must be the focus for this message.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "A profile that reflects constraints for the focal resource (and potentially for related resources).", - "$ref": "#/definitions/canonical" - }, - "min": { - "description": "Identifies the minimum number of resources of this type that must be pointed to by a message in order for it to be valid against this MessageDefinition.", - "$ref": "#/definitions/unsignedInt" - }, - "_min": { - "description": "Extensions for min", - "$ref": "#/definitions/Element" - }, - "max": { - "description": "Identifies the maximum number of resources of this type that must be pointed to by a message in order for it to be valid against this MessageDefinition.", - "$ref": "#/definitions/string" - }, - "_max": { - "description": "Extensions for max", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "MessageDefinition_AllowedResponse": { - "description": "Defines the characteristics of a message that can be shared between systems, including the type of event that initiates the message, the content to be transmitted and what response(s), if any, are permitted.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "message": { - "description": "A reference to the message definition that must be adhered to by this supported response.", - "$ref": "#/definitions/canonical" - }, - "situation": { - "description": "Provides a description of the circumstances in which this response should be used (as opposed to one of the alternative responses).", - "$ref": "#/definitions/markdown" - }, - "_situation": { - "description": "Extensions for situation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "message" - ] - }, - "MessageHeader": { - "description": "The header for a message exchange that is either requesting or responding to an action. The reference(s) that are the subject of the action as well as other information related to the action are typically transmitted in a bundle in which the MessageHeader resource instance is the first resource in the bundle.", - "properties": { - "resourceType": { - "description": "This is a MessageHeader resource", - "const": "MessageHeader" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "eventCoding": { - "description": "Code that identifies the event this message represents and connects it with its definition. Events defined as part of the FHIR specification have the system value \"http://terminology.hl7.org/CodeSystem/message-events\". Alternatively uri to the EventDefinition.", - "$ref": "#/definitions/Coding" - }, - "eventUri": { - "description": "Code that identifies the event this message represents and connects it with its definition. Events defined as part of the FHIR specification have the system value \"http://terminology.hl7.org/CodeSystem/message-events\". Alternatively uri to the EventDefinition.", - "pattern": "^\\S*$", - "type": "string" - }, - "_eventUri": { - "description": "Extensions for eventUri", - "$ref": "#/definitions/Element" - }, - "destination": { - "description": "The destination application which the message is intended for.", - "items": { - "$ref": "#/definitions/MessageHeader_Destination" - }, - "type": "array" - }, - "sender": { - "description": "Identifies the sending system to allow the use of a trust relationship.", - "$ref": "#/definitions/Reference" - }, - "enterer": { - "description": "The person or device that performed the data entry leading to this message. When there is more than one candidate, pick the most proximal to the message. Can provide other enterers in extensions.", - "$ref": "#/definitions/Reference" - }, - "author": { - "description": "The logical author of the message - the person or device that decided the described event should happen. When there is more than one candidate, pick the most proximal to the MessageHeader. Can provide other authors in extensions.", - "$ref": "#/definitions/Reference" - }, - "source": { - "description": "The source application from which this message originated.", - "$ref": "#/definitions/MessageHeader_Source" - }, - "responsible": { - "description": "The person or organization that accepts overall responsibility for the contents of the message. The implication is that the message event happened under the policies of the responsible party.", - "$ref": "#/definitions/Reference" - }, - "reason": { - "description": "Coded indication of the cause for the event - indicates a reason for the occurrence of the event that is a focus of this message.", - "$ref": "#/definitions/CodeableConcept" - }, - "response": { - "description": "Information about the message that this message is a response to. Only present if this message is a response.", - "$ref": "#/definitions/MessageHeader_Response" - }, - "focus": { - "description": "The actual data of the message - a reference to the root/focus class of the event.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "definition": { - "description": "Permanent link to the MessageDefinition for this message.", - "$ref": "#/definitions/canonical" - } - }, - "additionalProperties": false, - "required": [ - "source", - "resourceType" - ] - }, - "MessageHeader_Destination": { - "description": "The header for a message exchange that is either requesting or responding to an action. The reference(s) that are the subject of the action as well as other information related to the action are typically transmitted in a bundle in which the MessageHeader resource instance is the first resource in the bundle.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Human-readable name for the target system.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "target": { - "description": "Identifies the target end system in situations where the initial message transmission is to an intermediary system.", - "$ref": "#/definitions/Reference" - }, - "endpoint": { - "description": "Indicates where the message should be routed to.", - "$ref": "#/definitions/url" - }, - "_endpoint": { - "description": "Extensions for endpoint", - "$ref": "#/definitions/Element" - }, - "receiver": { - "description": "Allows data conveyed by a message to be addressed to a particular person or department when routing to a specific application isn\u0027t sufficient.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "MessageHeader_Source": { - "description": "The header for a message exchange that is either requesting or responding to an action. The reference(s) that are the subject of the action as well as other information related to the action are typically transmitted in a bundle in which the MessageHeader resource instance is the first resource in the bundle.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Human-readable name for the source system.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "software": { - "description": "May include configuration or other information useful in debugging.", - "$ref": "#/definitions/string" - }, - "_software": { - "description": "Extensions for software", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "Can convey versions of multiple systems in situations where a message passes through multiple hands.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "An e-mail, phone, website or other contact point to use to resolve issues with message communications.", - "$ref": "#/definitions/ContactPoint" - }, - "endpoint": { - "description": "Identifies the routing target to send acknowledgements to.", - "$ref": "#/definitions/url" - }, - "_endpoint": { - "description": "Extensions for endpoint", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "MessageHeader_Response": { - "description": "The header for a message exchange that is either requesting or responding to an action. The reference(s) that are the subject of the action as well as other information related to the action are typically transmitted in a bundle in which the MessageHeader resource instance is the first resource in the bundle.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "The MessageHeader.id of the message to which this message is a response.", - "$ref": "#/definitions/id" - }, - "_identifier": { - "description": "Extensions for identifier", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "Code that identifies the type of response to the message - whether it was successful or not, and whether it should be resent or not.", - "enum": [ - "ok", - "transient-error", - "fatal-error" - ] - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "details": { - "description": "Full details of any issues found in the message.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "MolecularSequence": { - "description": "Raw data describing a biological sequence.", - "properties": { - "resourceType": { - "description": "This is a MolecularSequence resource", - "const": "MolecularSequence" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier for this particular sequence instance. This is a FHIR-defined id.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "type": { - "description": "Amino Acid Sequence/ DNA Sequence / RNA Sequence.", - "enum": [ - "aa", - "dna", - "rna" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "coordinateSystem": { - "description": "Whether the sequence is numbered starting at 0 (0-based numbering or coordinates, inclusive start, exclusive end) or starting at 1 (1-based numbering, inclusive start and inclusive end).", - "$ref": "#/definitions/integer" - }, - "_coordinateSystem": { - "description": "Extensions for coordinateSystem", - "$ref": "#/definitions/Element" - }, - "patient": { - "description": "The patient whose sequencing results are described by this resource.", - "$ref": "#/definitions/Reference" - }, - "specimen": { - "description": "Specimen used for sequencing.", - "$ref": "#/definitions/Reference" - }, - "device": { - "description": "The method for sequencing, for example, chip information.", - "$ref": "#/definitions/Reference" - }, - "performer": { - "description": "The organization or lab that should be responsible for this result.", - "$ref": "#/definitions/Reference" - }, - "quantity": { - "description": "The number of copies of the sequence of interest. (RNASeq).", - "$ref": "#/definitions/Quantity" - }, - "referenceSeq": { - "description": "A sequence that is used as a reference to describe variants that are present in a sequence analyzed.", - "$ref": "#/definitions/MolecularSequence_ReferenceSeq" - }, - "variant": { - "description": "The definition of variant here originates from Sequence ontology ([variant_of](http://www.sequenceontology.org/browser/current_svn/term/variant_of)). This element can represent amino acid or nucleic sequence change(including insertion,deletion,SNP,etc.) It can represent some complex mutation or segment variation with the assist of CIGAR string.", - "items": { - "$ref": "#/definitions/MolecularSequence_Variant" - }, - "type": "array" - }, - "observedSeq": { - "description": "Sequence that was observed. It is the result marked by referenceSeq along with variant records on referenceSeq. This shall start from referenceSeq.windowStart and end by referenceSeq.windowEnd.", - "$ref": "#/definitions/string" - }, - "_observedSeq": { - "description": "Extensions for observedSeq", - "$ref": "#/definitions/Element" - }, - "quality": { - "description": "An experimental feature attribute that defines the quality of the feature in a quantitative way, such as a phred quality score ([SO:0001686](http://www.sequenceontology.org/browser/current_svn/term/SO:0001686)).", - "items": { - "$ref": "#/definitions/MolecularSequence_Quality" - }, - "type": "array" - }, - "readCoverage": { - "description": "Coverage (read depth or depth) is the average number of reads representing a given nucleotide in the reconstructed sequence.", - "$ref": "#/definitions/integer" - }, - "_readCoverage": { - "description": "Extensions for readCoverage", - "$ref": "#/definitions/Element" - }, - "repository": { - "description": "Configurations of the external repository. The repository shall store target\u0027s observedSeq or records related with target\u0027s observedSeq.", - "items": { - "$ref": "#/definitions/MolecularSequence_Repository" - }, - "type": "array" - }, - "pointer": { - "description": "Pointer to next atomic sequence which at most contains one variant.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "structureVariant": { - "description": "Information about chromosome structure variation.", - "items": { - "$ref": "#/definitions/MolecularSequence_StructureVariant" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "MolecularSequence_ReferenceSeq": { - "description": "Raw data describing a biological sequence.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "chromosome": { - "description": "Structural unit composed of a nucleic acid molecule which controls its own replication through the interaction of specific proteins at one or more origins of replication ([SO:0000340](http://www.sequenceontology.org/browser/current_svn/term/SO:0000340)).", - "$ref": "#/definitions/CodeableConcept" - }, - "genomeBuild": { - "description": "The Genome Build used for reference, following GRCh build versions e.g. \u0027GRCh 37\u0027. Version number must be included if a versioned release of a primary build was used.", - "$ref": "#/definitions/string" - }, - "_genomeBuild": { - "description": "Extensions for genomeBuild", - "$ref": "#/definitions/Element" - }, - "orientation": { - "description": "A relative reference to a DNA strand based on gene orientation. The strand that contains the open reading frame of the gene is the \"sense\" strand, and the opposite complementary strand is the \"antisense\" strand.", - "enum": [ - "sense", - "antisense" - ] - }, - "_orientation": { - "description": "Extensions for orientation", - "$ref": "#/definitions/Element" - }, - "referenceSeqId": { - "description": "Reference identifier of reference sequence submitted to NCBI. It must match the type in the MolecularSequence.type field. For example, the prefix, “NG_” identifies reference sequence for genes, “NM_” for messenger RNA transcripts, and “NP_” for amino acid sequences.", - "$ref": "#/definitions/CodeableConcept" - }, - "referenceSeqPointer": { - "description": "A pointer to another MolecularSequence entity as reference sequence.", - "$ref": "#/definitions/Reference" - }, - "referenceSeqString": { - "description": "A string like \"ACGT\".", - "$ref": "#/definitions/string" - }, - "_referenceSeqString": { - "description": "Extensions for referenceSeqString", - "$ref": "#/definitions/Element" - }, - "strand": { - "description": "An absolute reference to a strand. The Watson strand is the strand whose 5\u0027-end is on the short arm of the chromosome, and the Crick strand as the one whose 5\u0027-end is on the long arm.", - "enum": [ - "watson", - "crick" - ] - }, - "_strand": { - "description": "Extensions for strand", - "$ref": "#/definitions/Element" - }, - "windowStart": { - "description": "Start position of the window on the reference sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.", - "$ref": "#/definitions/integer" - }, - "_windowStart": { - "description": "Extensions for windowStart", - "$ref": "#/definitions/Element" - }, - "windowEnd": { - "description": "End position of the window on the reference sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.", - "$ref": "#/definitions/integer" - }, - "_windowEnd": { - "description": "Extensions for windowEnd", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "MolecularSequence_Variant": { - "description": "Raw data describing a biological sequence.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "start": { - "description": "Start position of the variant on the reference sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.", - "$ref": "#/definitions/integer" - }, - "_start": { - "description": "Extensions for start", - "$ref": "#/definitions/Element" - }, - "end": { - "description": "End position of the variant on the reference sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.", - "$ref": "#/definitions/integer" - }, - "_end": { - "description": "Extensions for end", - "$ref": "#/definitions/Element" - }, - "observedAllele": { - "description": "An allele is one of a set of coexisting sequence variants of a gene ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)). Nucleotide(s)/amino acids from start position of sequence to stop position of sequence on the positive (+) strand of the observed sequence. When the sequence type is DNA, it should be the sequence on the positive (+) strand. This will lay in the range between variant.start and variant.end.", - "$ref": "#/definitions/string" - }, - "_observedAllele": { - "description": "Extensions for observedAllele", - "$ref": "#/definitions/Element" - }, - "referenceAllele": { - "description": "An allele is one of a set of coexisting sequence variants of a gene ([SO:0001023](http://www.sequenceontology.org/browser/current_svn/term/SO:0001023)). Nucleotide(s)/amino acids from start position of sequence to stop position of sequence on the positive (+) strand of the reference sequence. When the sequence type is DNA, it should be the sequence on the positive (+) strand. This will lay in the range between variant.start and variant.end.", - "$ref": "#/definitions/string" - }, - "_referenceAllele": { - "description": "Extensions for referenceAllele", - "$ref": "#/definitions/Element" - }, - "cigar": { - "description": "Extended CIGAR string for aligning the sequence with reference bases. See detailed documentation [here](http://support.illumina.com/help/SequencingAnalysisWorkflow/Content/Vault/Informatics/Sequencing_Analysis/CASAVA/swSEQ_mCA_ExtendedCIGARFormat.htm).", - "$ref": "#/definitions/string" - }, - "_cigar": { - "description": "Extensions for cigar", - "$ref": "#/definitions/Element" - }, - "variantPointer": { - "description": "A pointer to an Observation containing variant information.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "MolecularSequence_Quality": { - "description": "Raw data describing a biological sequence.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "INDEL / SNP / Undefined variant.", - "enum": [ - "indel", - "snp", - "unknown" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "standardSequence": { - "description": "Gold standard sequence used for comparing against.", - "$ref": "#/definitions/CodeableConcept" - }, - "start": { - "description": "Start position of the sequence. If the coordinate system is either 0-based or 1-based, then start position is inclusive.", - "$ref": "#/definitions/integer" - }, - "_start": { - "description": "Extensions for start", - "$ref": "#/definitions/Element" - }, - "end": { - "description": "End position of the sequence. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.", - "$ref": "#/definitions/integer" - }, - "_end": { - "description": "Extensions for end", - "$ref": "#/definitions/Element" - }, - "score": { - "description": "The score of an experimentally derived feature such as a p-value ([SO:0001685](http://www.sequenceontology.org/browser/current_svn/term/SO:0001685)).", - "$ref": "#/definitions/Quantity" - }, - "method": { - "description": "Which method is used to get sequence quality.", - "$ref": "#/definitions/CodeableConcept" - }, - "truthTP": { - "description": "True positives, from the perspective of the truth data, i.e. the number of sites in the Truth Call Set for which there are paths through the Query Call Set that are consistent with all of the alleles at this site, and for which there is an accurate genotype call for the event.", - "$ref": "#/definitions/decimal" - }, - "_truthTP": { - "description": "Extensions for truthTP", - "$ref": "#/definitions/Element" - }, - "queryTP": { - "description": "True positives, from the perspective of the query data, i.e. the number of sites in the Query Call Set for which there are paths through the Truth Call Set that are consistent with all of the alleles at this site, and for which there is an accurate genotype call for the event.", - "$ref": "#/definitions/decimal" - }, - "_queryTP": { - "description": "Extensions for queryTP", - "$ref": "#/definitions/Element" - }, - "truthFN": { - "description": "False negatives, i.e. the number of sites in the Truth Call Set for which there is no path through the Query Call Set that is consistent with all of the alleles at this site, or sites for which there is an inaccurate genotype call for the event. Sites with correct variant but incorrect genotype are counted here.", - "$ref": "#/definitions/decimal" - }, - "_truthFN": { - "description": "Extensions for truthFN", - "$ref": "#/definitions/Element" - }, - "queryFP": { - "description": "False positives, i.e. the number of sites in the Query Call Set for which there is no path through the Truth Call Set that is consistent with this site. Sites with correct variant but incorrect genotype are counted here.", - "$ref": "#/definitions/decimal" - }, - "_queryFP": { - "description": "Extensions for queryFP", - "$ref": "#/definitions/Element" - }, - "gtFP": { - "description": "The number of false positives where the non-REF alleles in the Truth and Query Call Sets match (i.e. cases where the truth is 1/1 and the query is 0/1 or similar).", - "$ref": "#/definitions/decimal" - }, - "_gtFP": { - "description": "Extensions for gtFP", - "$ref": "#/definitions/Element" - }, - "precision": { - "description": "QUERY.TP / (QUERY.TP + QUERY.FP).", - "$ref": "#/definitions/decimal" - }, - "_precision": { - "description": "Extensions for precision", - "$ref": "#/definitions/Element" - }, - "recall": { - "description": "TRUTH.TP / (TRUTH.TP + TRUTH.FN).", - "$ref": "#/definitions/decimal" - }, - "_recall": { - "description": "Extensions for recall", - "$ref": "#/definitions/Element" - }, - "fScore": { - "description": "Harmonic mean of Recall and Precision, computed as: 2 * precision * recall / (precision + recall).", - "$ref": "#/definitions/decimal" - }, - "_fScore": { - "description": "Extensions for fScore", - "$ref": "#/definitions/Element" - }, - "roc": { - "description": "Receiver Operator Characteristic (ROC) Curve to give sensitivity/specificity tradeoff.", - "$ref": "#/definitions/MolecularSequence_Roc" - } - }, - "additionalProperties": false - }, - "MolecularSequence_Roc": { - "description": "Raw data describing a biological sequence.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "score": { - "description": "Invidual data point representing the GQ (genotype quality) score threshold.", - "items": { - "$ref": "#/definitions/integer" - }, - "type": "array" - }, - "_score": { - "description": "Extensions for score", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "numTP": { - "description": "The number of true positives if the GQ score threshold was set to \"score\" field value.", - "items": { - "$ref": "#/definitions/integer" - }, - "type": "array" - }, - "_numTP": { - "description": "Extensions for numTP", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "numFP": { - "description": "The number of false positives if the GQ score threshold was set to \"score\" field value.", - "items": { - "$ref": "#/definitions/integer" - }, - "type": "array" - }, - "_numFP": { - "description": "Extensions for numFP", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "numFN": { - "description": "The number of false negatives if the GQ score threshold was set to \"score\" field value.", - "items": { - "$ref": "#/definitions/integer" - }, - "type": "array" - }, - "_numFN": { - "description": "Extensions for numFN", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "precision": { - "description": "Calculated precision if the GQ score threshold was set to \"score\" field value.", - "items": { - "$ref": "#/definitions/decimal" - }, - "type": "array" - }, - "_precision": { - "description": "Extensions for precision", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "sensitivity": { - "description": "Calculated sensitivity if the GQ score threshold was set to \"score\" field value.", - "items": { - "$ref": "#/definitions/decimal" - }, - "type": "array" - }, - "_sensitivity": { - "description": "Extensions for sensitivity", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "fMeasure": { - "description": "Calculated fScore if the GQ score threshold was set to \"score\" field value.", - "items": { - "$ref": "#/definitions/decimal" - }, - "type": "array" - }, - "_fMeasure": { - "description": "Extensions for fMeasure", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "MolecularSequence_Repository": { - "description": "Raw data describing a biological sequence.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Click and see / RESTful API / Need login to see / RESTful API with authentication / Other ways to see resource.", - "enum": [ - "directlink", - "openapi", - "login", - "oauth", - "other" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "url": { - "description": "URI of an external repository which contains further details about the genetics data.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "URI of an external repository which contains further details about the genetics data.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "datasetId": { - "description": "Id of the variant in this external repository. The server will understand how to use this id to call for more info about datasets in external repository.", - "$ref": "#/definitions/string" - }, - "_datasetId": { - "description": "Extensions for datasetId", - "$ref": "#/definitions/Element" - }, - "variantsetId": { - "description": "Id of the variantset in this external repository. The server will understand how to use this id to call for more info about variantsets in external repository.", - "$ref": "#/definitions/string" - }, - "_variantsetId": { - "description": "Extensions for variantsetId", - "$ref": "#/definitions/Element" - }, - "readsetId": { - "description": "Id of the read in this external repository.", - "$ref": "#/definitions/string" - }, - "_readsetId": { - "description": "Extensions for readsetId", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "MolecularSequence_StructureVariant": { - "description": "Raw data describing a biological sequence.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "variantType": { - "description": "Information about chromosome structure variation DNA change type.", - "$ref": "#/definitions/CodeableConcept" - }, - "exact": { - "description": "Used to indicate if the outer and inner start-end values have the same meaning.", - "$ref": "#/definitions/boolean" - }, - "_exact": { - "description": "Extensions for exact", - "$ref": "#/definitions/Element" - }, - "length": { - "description": "Length of the variant chromosome.", - "$ref": "#/definitions/integer" - }, - "_length": { - "description": "Extensions for length", - "$ref": "#/definitions/Element" - }, - "outer": { - "description": "Structural variant outer.", - "$ref": "#/definitions/MolecularSequence_Outer" - }, - "inner": { - "description": "Structural variant inner.", - "$ref": "#/definitions/MolecularSequence_Inner" - } - }, - "additionalProperties": false - }, - "MolecularSequence_Outer": { - "description": "Raw data describing a biological sequence.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "start": { - "description": "Structural variant outer start. If the coordinate system is either 0-based or 1-based, then start position is inclusive.", - "$ref": "#/definitions/integer" - }, - "_start": { - "description": "Extensions for start", - "$ref": "#/definitions/Element" - }, - "end": { - "description": "Structural variant outer end. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.", - "$ref": "#/definitions/integer" - }, - "_end": { - "description": "Extensions for end", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "MolecularSequence_Inner": { - "description": "Raw data describing a biological sequence.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "start": { - "description": "Structural variant inner start. If the coordinate system is either 0-based or 1-based, then start position is inclusive.", - "$ref": "#/definitions/integer" - }, - "_start": { - "description": "Extensions for start", - "$ref": "#/definitions/Element" - }, - "end": { - "description": "Structural variant inner end. If the coordinate system is 0-based then end is exclusive and does not include the last position. If the coordinate system is 1-base, then end is inclusive and includes the last position.", - "$ref": "#/definitions/integer" - }, - "_end": { - "description": "Extensions for end", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "NamingSystem": { - "description": "A curated namespace that issues unique symbols within that namespace for the identification of concepts, people, devices, etc. Represents a \"System\" used within the Identifier and Coding data types.", - "properties": { - "resourceType": { - "description": "This is a NamingSystem resource", - "const": "NamingSystem" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "A natural language name identifying the naming system. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this naming system. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "kind": { - "description": "Indicates the purpose for the naming system - what kinds of things does it make unique?", - "enum": [ - "codesystem", - "identifier", - "root" - ] - }, - "_kind": { - "description": "Extensions for kind", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the naming system was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the naming system changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the naming system.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "responsible": { - "description": "The name of the organization that is responsible for issuing identifiers or codes for this namespace and ensuring their non-collision.", - "$ref": "#/definitions/string" - }, - "_responsible": { - "description": "Extensions for responsible", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Categorizes a naming system for easier search by grouping related naming systems.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "A free text natural language description of the naming system from a consumer\u0027s perspective. Details about what the namespace identifies including scope, granularity, version labeling, etc.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate naming system instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the naming system is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "usage": { - "description": "Provides guidance on the use of the namespace, including the handling of formatting characters, use of upper vs. lower case, etc.", - "$ref": "#/definitions/string" - }, - "_usage": { - "description": "Extensions for usage", - "$ref": "#/definitions/Element" - }, - "uniqueId": { - "description": "Indicates how the system may be identified when referenced in electronic exchange.", - "items": { - "$ref": "#/definitions/NamingSystem_UniqueId" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "uniqueId", - "resourceType" - ] - }, - "NamingSystem_UniqueId": { - "description": "A curated namespace that issues unique symbols within that namespace for the identification of concepts, people, devices, etc. Represents a \"System\" used within the Identifier and Coding data types.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Identifies the unique identifier scheme used for this particular identifier.", - "enum": [ - "oid", - "uuid", - "uri", - "other" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "value": { - "description": "The string that should be sent over the wire to identify the code system or identifier system.", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "preferred": { - "description": "Indicates whether this identifier is the \"preferred\" identifier of this type.", - "$ref": "#/definitions/boolean" - }, - "_preferred": { - "description": "Extensions for preferred", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "Notes about the past or intended usage of this identifier.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "Identifies the period of time over which this identifier is considered appropriate to refer to the naming system. Outside of this window, the identifier might be non-deterministic.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "NutritionOrder": { - "description": "A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.", - "properties": { - "resourceType": { - "description": "This is a NutritionOrder resource", - "const": "NutritionOrder" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers assigned to this order by the order sender or by the order receiver.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "instantiatesCanonical": { - "description": "The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this NutritionOrder.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "instantiatesUri": { - "description": "The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this NutritionOrder.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "instantiates": { - "description": "The URL pointing to a protocol, guideline, orderset or other definition that is adhered to in whole or in part by this NutritionOrder.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiates": { - "description": "Extensions for instantiates", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "status": { - "description": "The workflow status of the nutrition order/request.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "intent": { - "description": "Indicates the level of authority/intentionality associated with the NutrionOrder and where the request fits into the workflow chain.", - "$ref": "#/definitions/code" - }, - "_intent": { - "description": "Extensions for intent", - "$ref": "#/definitions/Element" - }, - "patient": { - "description": "The person (patient) who needs the nutrition order for an oral diet, nutritional supplement and/or enteral or formula feeding.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "An encounter that provides additional information about the healthcare context in which this request is made.", - "$ref": "#/definitions/Reference" - }, - "dateTime": { - "description": "The date and time that this nutrition order was requested.", - "$ref": "#/definitions/dateTime" - }, - "_dateTime": { - "description": "Extensions for dateTime", - "$ref": "#/definitions/Element" - }, - "orderer": { - "description": "The practitioner that holds legal responsibility for ordering the diet, nutritional supplement, or formula feedings.", - "$ref": "#/definitions/Reference" - }, - "allergyIntolerance": { - "description": "A link to a record of allergies or intolerances which should be included in the nutrition order.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "foodPreferenceModifier": { - "description": "This modifier is used to convey order-specific modifiers about the type of food that should be given. These can be derived from patient allergies, intolerances, or preferences such as Halal, Vegan or Kosher. This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "excludeFoodModifier": { - "description": "This modifier is used to convey Order-specific modifier about the type of oral food or oral fluids that should not be given. These can be derived from patient allergies, intolerances, or preferences such as No Red Meat, No Soy or No Wheat or Gluten-Free. While it should not be necessary to repeat allergy or intolerance information captured in the referenced AllergyIntolerance resource in the excludeFoodModifier, this element may be used to convey additional specificity related to foods that should be eliminated from the patient’s diet for any reason. This modifier applies to the entire nutrition order inclusive of the oral diet, nutritional supplements and enteral formula feedings.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "oralDiet": { - "description": "Diet given orally in contrast to enteral (tube) feeding.", - "$ref": "#/definitions/NutritionOrder_OralDiet" - }, - "supplement": { - "description": "Oral nutritional products given in order to add further nutritional value to the patient\u0027s diet.", - "items": { - "$ref": "#/definitions/NutritionOrder_Supplement" - }, - "type": "array" - }, - "enteralFormula": { - "description": "Feeding provided through the gastrointestinal tract via a tube, catheter, or stoma that delivers nutrition distal to the oral cavity.", - "$ref": "#/definitions/NutritionOrder_EnteralFormula" - }, - "note": { - "description": "Comments made about the {{title}} by the requester, performer, subject or other participants.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "patient", - "resourceType" - ] - }, - "NutritionOrder_OralDiet": { - "description": "A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The kind of diet or dietary restriction such as fiber restricted diet or diabetic diet.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "schedule": { - "description": "The time period and frequency at which the diet should be given. The diet should be given for the combination of all schedules if more than one schedule is present.", - "items": { - "$ref": "#/definitions/Timing" - }, - "type": "array" - }, - "nutrient": { - "description": "Class that defines the quantity and type of nutrient modifications (for example carbohydrate, fiber or sodium) required for the oral diet.", - "items": { - "$ref": "#/definitions/NutritionOrder_Nutrient" - }, - "type": "array" - }, - "texture": { - "description": "Class that describes any texture modifications required for the patient to safely consume various types of solid foods.", - "items": { - "$ref": "#/definitions/NutritionOrder_Texture" - }, - "type": "array" - }, - "fluidConsistencyType": { - "description": "The required consistency (e.g. honey-thick, nectar-thick, thin, thickened.) of liquids or fluids served to the patient.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "instruction": { - "description": "Free text or additional instructions or information pertaining to the oral diet.", - "$ref": "#/definitions/string" - }, - "_instruction": { - "description": "Extensions for instruction", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "NutritionOrder_Nutrient": { - "description": "A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifier": { - "description": "The nutrient that is being modified such as carbohydrate or sodium.", - "$ref": "#/definitions/CodeableConcept" - }, - "amount": { - "description": "The quantity of the specified nutrient to include in diet.", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false - }, - "NutritionOrder_Texture": { - "description": "A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifier": { - "description": "Any texture modifications (for solid foods) that should be made, e.g. easy to chew, chopped, ground, and pureed.", - "$ref": "#/definitions/CodeableConcept" - }, - "foodType": { - "description": "The food type(s) (e.g. meats, all foods) that the texture modification applies to. This could be all foods types.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "NutritionOrder_Supplement": { - "description": "A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The kind of nutritional supplement product required such as a high protein or pediatric clear liquid supplement.", - "$ref": "#/definitions/CodeableConcept" - }, - "productName": { - "description": "The product or brand name of the nutritional supplement such as \"Acme Protein Shake\".", - "$ref": "#/definitions/string" - }, - "_productName": { - "description": "Extensions for productName", - "$ref": "#/definitions/Element" - }, - "schedule": { - "description": "The time period and frequency at which the supplement(s) should be given. The supplement should be given for the combination of all schedules if more than one schedule is present.", - "items": { - "$ref": "#/definitions/Timing" - }, - "type": "array" - }, - "quantity": { - "description": "The amount of the nutritional supplement to be given.", - "$ref": "#/definitions/Quantity" - }, - "instruction": { - "description": "Free text or additional instructions or information pertaining to the oral supplement.", - "$ref": "#/definitions/string" - }, - "_instruction": { - "description": "Extensions for instruction", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "NutritionOrder_EnteralFormula": { - "description": "A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "baseFormulaType": { - "description": "The type of enteral or infant formula such as an adult standard formula with fiber or a soy-based infant formula.", - "$ref": "#/definitions/CodeableConcept" - }, - "baseFormulaProductName": { - "description": "The product or brand name of the enteral or infant formula product such as \"ACME Adult Standard Formula\".", - "$ref": "#/definitions/string" - }, - "_baseFormulaProductName": { - "description": "Extensions for baseFormulaProductName", - "$ref": "#/definitions/Element" - }, - "additiveType": { - "description": "Indicates the type of modular component such as protein, carbohydrate, fat or fiber to be provided in addition to or mixed with the base formula.", - "$ref": "#/definitions/CodeableConcept" - }, - "additiveProductName": { - "description": "The product or brand name of the type of modular component to be added to the formula.", - "$ref": "#/definitions/string" - }, - "_additiveProductName": { - "description": "Extensions for additiveProductName", - "$ref": "#/definitions/Element" - }, - "caloricDensity": { - "description": "The amount of energy (calories) that the formula should provide per specified volume, typically per mL or fluid oz. For example, an infant may require a formula that provides 24 calories per fluid ounce or an adult may require an enteral formula that provides 1.5 calorie/mL.", - "$ref": "#/definitions/Quantity" - }, - "routeofAdministration": { - "description": "The route or physiological path of administration into the patient\u0027s gastrointestinal tract for purposes of providing the formula feeding, e.g. nasogastric tube.", - "$ref": "#/definitions/CodeableConcept" - }, - "administration": { - "description": "Formula administration instructions as structured data. This repeating structure allows for changing the administration rate or volume over time for both bolus and continuous feeding. An example of this would be an instruction to increase the rate of continuous feeding every 2 hours.", - "items": { - "$ref": "#/definitions/NutritionOrder_Administration" - }, - "type": "array" - }, - "maxVolumeToDeliver": { - "description": "The maximum total quantity of formula that may be administered to a subject over the period of time, e.g. 1440 mL over 24 hours.", - "$ref": "#/definitions/Quantity" - }, - "administrationInstruction": { - "description": "Free text formula administration, feeding instructions or additional instructions or information.", - "$ref": "#/definitions/string" - }, - "_administrationInstruction": { - "description": "Extensions for administrationInstruction", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "NutritionOrder_Administration": { - "description": "A request to supply a diet, formula feeding (enteral) or oral nutritional supplement to a patient/resident.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "schedule": { - "description": "The time period and frequency at which the enteral formula should be delivered to the patient.", - "$ref": "#/definitions/Timing" - }, - "quantity": { - "description": "The volume of formula to provide to the patient per the specified administration schedule.", - "$ref": "#/definitions/Quantity" - }, - "rateQuantity": { - "description": "The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.", - "$ref": "#/definitions/Quantity" - }, - "rateRatio": { - "description": "The rate of administration of formula via a feeding pump, e.g. 60 mL per hour, according to the specified schedule.", - "$ref": "#/definitions/Ratio" - } - }, - "additionalProperties": false - }, - "Observation": { - "description": "Measurements and simple assertions made about a patient, device or other subject.", - "properties": { - "resourceType": { - "description": "This is a Observation resource", - "const": "Observation" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this observation.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "basedOn": { - "description": "A plan, proposal or order that is fulfilled in whole or in part by this event. For example, a MedicationRequest may require a patient to have laboratory test performed before it is dispensed.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "partOf": { - "description": "A larger event of which this particular Observation is a component or step. For example, an observation as part of a procedure.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "The status of the result value.", - "enum": [ - "registered", - "preliminary", - "final", - "amended", - "corrected", - "cancelled", - "entered-in-error", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "A code that classifies the general type of observation being made.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "code": { - "description": "Describes what was observed. Sometimes this is called the observation \"name\".", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "The patient, or group of patients, location, or device this observation is about and into whose record the observation is placed. If the actual focus of the observation is different from the subject (or a sample of, part, or region of the subject), the `focus` element or the `code` itself specifies the actual focus of the observation.", - "$ref": "#/definitions/Reference" - }, - "focus": { - "description": "The actual focus of an observation when it is not the patient of record representing something or someone associated with the patient such as a spouse, parent, fetus, or donor. For example, fetus observations in a mother\u0027s record. The focus of an observation could also be an existing condition, an intervention, the subject\u0027s diet, another observation of the subject, or a body structure such as tumor or implanted device. An example use case would be using the Observation resource to capture whether the mother is trained to change her child\u0027s tracheostomy tube. In this example, the child is the patient of record and the mother is the focus.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "encounter": { - "description": "The healthcare event (e.g. a patient and healthcare provider interaction) during which this observation is made.", - "$ref": "#/definitions/Reference" - }, - "effectiveDateTime": { - "description": "The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the \"physiologically relevant time\". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_effectiveDateTime": { - "description": "Extensions for effectiveDateTime", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the \"physiologically relevant time\". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.", - "$ref": "#/definitions/Period" - }, - "effectiveTiming": { - "description": "The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the \"physiologically relevant time\". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.", - "$ref": "#/definitions/Timing" - }, - "effectiveInstant": { - "description": "The time or time-period the observed value is asserted as being true. For biological subjects - e.g. human patients - this is usually called the \"physiologically relevant time\". This is usually either the time of the procedure or of specimen collection, but very often the source of the date/time is not known, only the date/time itself.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_effectiveInstant": { - "description": "Extensions for effectiveInstant", - "$ref": "#/definitions/Element" - }, - "issued": { - "description": "The date and time this version of the observation was made available to providers, typically after the results have been reviewed and verified.", - "$ref": "#/definitions/instant" - }, - "_issued": { - "description": "Extensions for issued", - "$ref": "#/definitions/Element" - }, - "performer": { - "description": "Who was responsible for asserting the observed value as \"true\".", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "valueQuantity": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/Quantity" - }, - "valueCodeableConcept": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueString": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueBoolean": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueRange": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/Range" - }, - "valueRatio": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/Ratio" - }, - "valueSampledData": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/SampledData" - }, - "valueTime": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_valueTime": { - "description": "Extensions for valueTime", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valuePeriod": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/Period" - }, - "dataAbsentReason": { - "description": "Provides a reason why the expected value in the element Observation.value[x] is missing.", - "$ref": "#/definitions/CodeableConcept" - }, - "interpretation": { - "description": "A categorical assessment of an observation value. For example, high, low, normal.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "note": { - "description": "Comments about the observation or the results.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "bodySite": { - "description": "Indicates the site on the subject\u0027s body where the observation was made (i.e. the target site).", - "$ref": "#/definitions/CodeableConcept" - }, - "method": { - "description": "Indicates the mechanism used to perform the observation.", - "$ref": "#/definitions/CodeableConcept" - }, - "specimen": { - "description": "The specimen that was used when this observation was made.", - "$ref": "#/definitions/Reference" - }, - "device": { - "description": "The device used to generate the observation data.", - "$ref": "#/definitions/Reference" - }, - "referenceRange": { - "description": "Guidance on how to interpret the value by comparison to a normal or recommended range. Multiple reference ranges are interpreted as an \"OR\". In other words, to represent two distinct target populations, two `referenceRange` elements would be used.", - "items": { - "$ref": "#/definitions/Observation_ReferenceRange" - }, - "type": "array" - }, - "hasMember": { - "description": "This observation is a group observation (e.g. a battery, a panel of tests, a set of vital sign measurements) that includes the target as a member of the group.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "derivedFrom": { - "description": "The target resource that represents a measurement from which this observation value is derived. For example, a calculated anion gap or a fetal measurement based on an ultrasound image.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "component": { - "description": "Some observations have multiple component observations. These component observations are expressed as separate code value pairs that share the same attributes. Examples include systolic and diastolic component observations for blood pressure measurement and multiple component observations for genetics observations.", - "items": { - "$ref": "#/definitions/Observation_Component" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "code", - "resourceType" - ] - }, - "Observation_ReferenceRange": { - "description": "Measurements and simple assertions made about a patient, device or other subject.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "low": { - "description": "The value of the low bound of the reference range. The low bound of the reference range endpoint is inclusive of the value (e.g. reference range is \u003e\u003d5 - \u003c\u003d9). If the low bound is omitted, it is assumed to be meaningless (e.g. reference range is \u003c\u003d2.3).", - "$ref": "#/definitions/Quantity" - }, - "high": { - "description": "The value of the high bound of the reference range. The high bound of the reference range endpoint is inclusive of the value (e.g. reference range is \u003e\u003d5 - \u003c\u003d9). If the high bound is omitted, it is assumed to be meaningless (e.g. reference range is \u003e\u003d 2.3).", - "$ref": "#/definitions/Quantity" - }, - "type": { - "description": "Codes to indicate the what part of the targeted reference population it applies to. For example, the normal or therapeutic range.", - "$ref": "#/definitions/CodeableConcept" - }, - "appliesTo": { - "description": "Codes to indicate the target population this reference range applies to. For example, a reference range may be based on the normal population or a particular sex or race. Multiple `appliesTo` are interpreted as an \"AND\" of the target populations. For example, to represent a target population of African American females, both a code of female and a code for African American would be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "age": { - "description": "The age at which this reference range is applicable. This is a neonatal age (e.g. number of weeks at term) if the meaning says so.", - "$ref": "#/definitions/Range" - }, - "text": { - "description": "Text based reference range in an observation which may be used when a quantitative range is not appropriate for an observation. An example would be a reference value of \"Negative\" or a list or table of \"normals\".", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Observation_Component": { - "description": "Measurements and simple assertions made about a patient, device or other subject.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Describes what was observed. Sometimes this is called the observation \"code\".", - "$ref": "#/definitions/CodeableConcept" - }, - "valueQuantity": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/Quantity" - }, - "valueCodeableConcept": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueString": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueBoolean": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueRange": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/Range" - }, - "valueRatio": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/Ratio" - }, - "valueSampledData": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/SampledData" - }, - "valueTime": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_valueTime": { - "description": "Extensions for valueTime", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valuePeriod": { - "description": "The information determined as a result of making the observation, if the information has a simple value.", - "$ref": "#/definitions/Period" - }, - "dataAbsentReason": { - "description": "Provides a reason why the expected value in the element Observation.component.value[x] is missing.", - "$ref": "#/definitions/CodeableConcept" - }, - "interpretation": { - "description": "A categorical assessment of an observation value. For example, high, low, normal.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "referenceRange": { - "description": "Guidance on how to interpret the value by comparison to a normal or recommended range.", - "items": { - "$ref": "#/definitions/Observation_ReferenceRange" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "ObservationDefinition": { - "description": "Set of definitional characteristics for a kind of observation or measurement produced or consumed by an orderable health care service.", - "properties": { - "resourceType": { - "description": "This is a ObservationDefinition resource", - "const": "ObservationDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "category": { - "description": "A code that classifies the general type of observation.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "code": { - "description": "Describes what will be observed. Sometimes this is called the observation \"name\".", - "$ref": "#/definitions/CodeableConcept" - }, - "identifier": { - "description": "A unique identifier assigned to this ObservationDefinition artifact.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "permittedDataType": { - "description": "The data types allowed for the value element of the instance observations conforming to this ObservationDefinition.", - "items": { - "enum": [ - "Quantity", - "CodeableConcept", - "string", - "boolean", - "integer", - "Range", - "Ratio", - "SampledData", - "time", - "dateTime", - "Period" - ] - }, - "type": "array" - }, - "_permittedDataType": { - "description": "Extensions for permittedDataType", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "multipleResultsAllowed": { - "description": "Multiple results allowed for observations conforming to this ObservationDefinition.", - "$ref": "#/definitions/boolean" - }, - "_multipleResultsAllowed": { - "description": "Extensions for multipleResultsAllowed", - "$ref": "#/definitions/Element" - }, - "method": { - "description": "The method or technique used to perform the observation.", - "$ref": "#/definitions/CodeableConcept" - }, - "preferredReportName": { - "description": "The preferred name to be used when reporting the results of observations conforming to this ObservationDefinition.", - "$ref": "#/definitions/string" - }, - "_preferredReportName": { - "description": "Extensions for preferredReportName", - "$ref": "#/definitions/Element" - }, - "quantitativeDetails": { - "description": "Characteristics for quantitative results of this observation.", - "$ref": "#/definitions/ObservationDefinition_QuantitativeDetails" - }, - "qualifiedInterval": { - "description": "Multiple ranges of results qualified by different contexts for ordinal or continuous observations conforming to this ObservationDefinition.", - "items": { - "$ref": "#/definitions/ObservationDefinition_QualifiedInterval" - }, - "type": "array" - }, - "validCodedValueSet": { - "description": "The set of valid coded results for the observations conforming to this ObservationDefinition.", - "$ref": "#/definitions/Reference" - }, - "normalCodedValueSet": { - "description": "The set of normal coded results for the observations conforming to this ObservationDefinition.", - "$ref": "#/definitions/Reference" - }, - "abnormalCodedValueSet": { - "description": "The set of abnormal coded results for the observation conforming to this ObservationDefinition.", - "$ref": "#/definitions/Reference" - }, - "criticalCodedValueSet": { - "description": "The set of critical coded results for the observation conforming to this ObservationDefinition.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "code", - "resourceType" - ] - }, - "ObservationDefinition_QuantitativeDetails": { - "description": "Set of definitional characteristics for a kind of observation or measurement produced or consumed by an orderable health care service.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "customaryUnit": { - "description": "Customary unit used to report quantitative results of observations conforming to this ObservationDefinition.", - "$ref": "#/definitions/CodeableConcept" - }, - "unit": { - "description": "SI unit used to report quantitative results of observations conforming to this ObservationDefinition.", - "$ref": "#/definitions/CodeableConcept" - }, - "conversionFactor": { - "description": "Factor for converting value expressed with SI unit to value expressed with customary unit.", - "$ref": "#/definitions/decimal" - }, - "_conversionFactor": { - "description": "Extensions for conversionFactor", - "$ref": "#/definitions/Element" - }, - "decimalPrecision": { - "description": "Number of digits after decimal separator when the results of such observations are of type Quantity.", - "$ref": "#/definitions/integer" - }, - "_decimalPrecision": { - "description": "Extensions for decimalPrecision", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ObservationDefinition_QualifiedInterval": { - "description": "Set of definitional characteristics for a kind of observation or measurement produced or consumed by an orderable health care service.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "category": { - "description": "The category of interval of values for continuous or ordinal observations conforming to this ObservationDefinition.", - "enum": [ - "reference", - "critical", - "absolute" - ] - }, - "_category": { - "description": "Extensions for category", - "$ref": "#/definitions/Element" - }, - "range": { - "description": "The low and high values determining the interval. There may be only one of the two.", - "$ref": "#/definitions/Range" - }, - "context": { - "description": "Codes to indicate the health context the range applies to. For example, the normal or therapeutic range.", - "$ref": "#/definitions/CodeableConcept" - }, - "appliesTo": { - "description": "Codes to indicate the target population this reference range applies to.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "gender": { - "description": "Sex of the population the range applies to.", - "enum": [ - "male", - "female", - "other", - "unknown" - ] - }, - "_gender": { - "description": "Extensions for gender", - "$ref": "#/definitions/Element" - }, - "age": { - "description": "The age at which this reference range is applicable. This is a neonatal age (e.g. number of weeks at term) if the meaning says so.", - "$ref": "#/definitions/Range" - }, - "gestationalAge": { - "description": "The gestational age to which this reference range is applicable, in the context of pregnancy.", - "$ref": "#/definitions/Range" - }, - "condition": { - "description": "Text based condition for which the reference range is valid.", - "$ref": "#/definitions/string" - }, - "_condition": { - "description": "Extensions for condition", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "OperationDefinition": { - "description": "A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).", - "properties": { - "resourceType": { - "description": "This is a OperationDefinition resource", - "const": "OperationDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this operation definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this operation definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the operation definition is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The identifier that is used to identify this version of the operation definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the operation definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the operation definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the operation definition.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this operation definition. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "kind": { - "description": "Whether this is an operation or a named query.", - "enum": [ - "operation", - "query" - ] - }, - "_kind": { - "description": "Extensions for kind", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this operation definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the operation definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the operation definition changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the operation definition.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the operation definition from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate operation definition instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the operation definition is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this operation definition is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "affectsState": { - "description": "Whether the operation affects state. Side effects such as producing audit trail entries do not count as \u0027affecting state\u0027.", - "$ref": "#/definitions/boolean" - }, - "_affectsState": { - "description": "Extensions for affectsState", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "The name used to invoke the operation.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "Additional information about how to use this operation or named query.", - "$ref": "#/definitions/markdown" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - }, - "base": { - "description": "Indicates that this operation definition is a constraining profile on the base.", - "$ref": "#/definitions/canonical" - }, - "resource": { - "description": "The types on which this operation can be executed.", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_resource": { - "description": "Extensions for resource", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "system": { - "description": "Indicates whether this operation or named query can be invoked at the system level (e.g. without needing to choose a resource type for the context).", - "$ref": "#/definitions/boolean" - }, - "_system": { - "description": "Extensions for system", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Indicates whether this operation or named query can be invoked at the resource type level for any given resource type level (e.g. without needing to choose a specific resource id for the context).", - "$ref": "#/definitions/boolean" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "instance": { - "description": "Indicates whether this operation can be invoked on a particular instance of one of the given types.", - "$ref": "#/definitions/boolean" - }, - "_instance": { - "description": "Extensions for instance", - "$ref": "#/definitions/Element" - }, - "inputProfile": { - "description": "Additional validation information for the in parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource as a whole.", - "$ref": "#/definitions/canonical" - }, - "outputProfile": { - "description": "Additional validation information for the out parameters - a single profile that covers all the parameters. The profile is a constraint on the parameters resource.", - "$ref": "#/definitions/canonical" - }, - "parameter": { - "description": "The parameters for the operation/query.", - "items": { - "$ref": "#/definitions/OperationDefinition_Parameter" - }, - "type": "array" - }, - "overload": { - "description": "Defines an appropriate combination of parameters to use when invoking this operation, to help code generators when generating overloaded parameter sets for this operation.", - "items": { - "$ref": "#/definitions/OperationDefinition_Overload" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "OperationDefinition_Parameter": { - "description": "A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The name of used to identify the parameter.", - "$ref": "#/definitions/code" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "use": { - "description": "Whether this is an input or an output parameter.", - "enum": [ - "in", - "out" - ] - }, - "_use": { - "description": "Extensions for use", - "$ref": "#/definitions/Element" - }, - "min": { - "description": "The minimum number of times this parameter SHALL appear in the request or response.", - "$ref": "#/definitions/integer" - }, - "_min": { - "description": "Extensions for min", - "$ref": "#/definitions/Element" - }, - "max": { - "description": "The maximum number of times this element is permitted to appear in the request or response.", - "$ref": "#/definitions/string" - }, - "_max": { - "description": "Extensions for max", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "Describes the meaning or use of this parameter.", - "$ref": "#/definitions/string" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type for this parameter.", - "$ref": "#/definitions/code" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "targetProfile": { - "description": "Used when the type is \"Reference\" or \"canonical\", and identifies a profile structure or implementation Guide that applies to the target of the reference this parameter refers to. If any profiles are specified, then the content must conform to at least one of them. The URL can be a local reference - to a contained StructureDefinition, or a reference to another StructureDefinition or Implementation Guide by a canonical URL. When an implementation guide is specified, the target resource SHALL conform to at least one profile defined in the implementation guide.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "searchType": { - "description": "How the parameter is understood as a search parameter. This is only used if the parameter type is \u0027string\u0027.", - "enum": [ - "number", - "date", - "string", - "token", - "reference", - "composite", - "quantity", - "uri", - "special" - ] - }, - "_searchType": { - "description": "Extensions for searchType", - "$ref": "#/definitions/Element" - }, - "binding": { - "description": "Binds to a value set if this parameter is coded (code, Coding, CodeableConcept).", - "$ref": "#/definitions/OperationDefinition_Binding" - }, - "referencedFrom": { - "description": "Identifies other resource parameters within the operation invocation that are expected to resolve to this resource.", - "items": { - "$ref": "#/definitions/OperationDefinition_ReferencedFrom" - }, - "type": "array" - }, - "part": { - "description": "The parts of a nested Parameter.", - "items": { - "$ref": "#/definitions/OperationDefinition_Parameter" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "OperationDefinition_Binding": { - "description": "A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "strength": { - "description": "Indicates the degree of conformance expectations associated with this binding - that is, the degree to which the provided value set must be adhered to in the instances.", - "enum": [ - "required", - "extensible", - "preferred", - "example" - ] - }, - "_strength": { - "description": "Extensions for strength", - "$ref": "#/definitions/Element" - }, - "valueSet": { - "description": "Points to the value set or external definition (e.g. implicit value set) that identifies the set of codes to be used.", - "$ref": "#/definitions/canonical" - } - }, - "additionalProperties": false, - "required": [ - "valueSet" - ] - }, - "OperationDefinition_ReferencedFrom": { - "description": "A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "source": { - "description": "The name of the parameter or dot-separated path of parameter names pointing to the resource parameter that is expected to contain a reference to this resource.", - "$ref": "#/definitions/string" - }, - "_source": { - "description": "Extensions for source", - "$ref": "#/definitions/Element" - }, - "sourceId": { - "description": "The id of the element in the referencing resource that is expected to resolve to this resource.", - "$ref": "#/definitions/string" - }, - "_sourceId": { - "description": "Extensions for sourceId", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "OperationDefinition_Overload": { - "description": "A formal computable definition of an operation (on the RESTful interface) or a named query (using the search interaction).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "parameterName": { - "description": "Name of parameter to include in overload.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_parameterName": { - "description": "Extensions for parameterName", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "comment": { - "description": "Comments to go on overload.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "OperationOutcome": { - "description": "A collection of error, warning, or information messages that result from a system action.", - "properties": { - "resourceType": { - "description": "This is a OperationOutcome resource", - "const": "OperationOutcome" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "issue": { - "description": "An error, warning, or information message that results from a system action.", - "items": { - "$ref": "#/definitions/OperationOutcome_Issue" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "issue", - "resourceType" - ] - }, - "OperationOutcome_Issue": { - "description": "A collection of error, warning, or information messages that result from a system action.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "severity": { - "description": "Indicates whether the issue indicates a variation from successful processing.", - "enum": [ - "fatal", - "error", - "warning", - "information" - ] - }, - "_severity": { - "description": "Extensions for severity", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "Describes the type of the issue. The system that creates an OperationOutcome SHALL choose the most applicable code from the IssueType value set, and may additional provide its own code for the error in the details element.", - "enum": [ - "invalid", - "structure", - "required", - "value", - "invariant", - "security", - "login", - "unknown", - "expired", - "forbidden", - "suppressed", - "processing", - "not-supported", - "duplicate", - "multiple-matches", - "not-found", - "deleted", - "too-long", - "code-invalid", - "extension", - "too-costly", - "business-rule", - "conflict", - "transient", - "lock-error", - "no-store", - "exception", - "timeout", - "incomplete", - "throttled", - "informational" - ] - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "details": { - "description": "Additional details about the error. This may be a text description of the error or a system code that identifies the error.", - "$ref": "#/definitions/CodeableConcept" - }, - "diagnostics": { - "description": "Additional diagnostic information about the issue.", - "$ref": "#/definitions/string" - }, - "_diagnostics": { - "description": "Extensions for diagnostics", - "$ref": "#/definitions/Element" - }, - "location": { - "description": "This element is deprecated because it is XML specific. It is replaced by issue.expression, which is format independent, and simpler to parse. \n\nFor resource issues, this will be a simple XPath limited to element names, repetition indicators and the default child accessor that identifies one of the elements in the resource that caused this issue to be raised. For HTTP errors, will be \"http.\" + the parameter name.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_location": { - "description": "Extensions for location", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "expression": { - "description": "A [simple subset of FHIRPath](fhirpath.html#simple) limited to element names, repetition indicators and the default child accessor that identifies one of the elements in the resource that caused this issue to be raised.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_expression": { - "description": "Extensions for expression", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Organization": { - "description": "A formally or informally recognized grouping of people or organizations formed for the purpose of achieving some form of collective action. Includes companies, institutions, corporations, departments, community groups, healthcare practice groups, payer/insurer, etc.", - "properties": { - "resourceType": { - "description": "This is a Organization resource", - "const": "Organization" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier for the organization that is used to identify the organization across multiple disparate systems.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "active": { - "description": "Whether the organization\u0027s record is still in active use.", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The kind(s) of organization that this is.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "name": { - "description": "A name associated with the organization.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "alias": { - "description": "A list of alternate names that the organization is known as, or was known as in the past.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_alias": { - "description": "Extensions for alias", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "telecom": { - "description": "A contact detail for the organization.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "address": { - "description": "An address for the organization.", - "items": { - "$ref": "#/definitions/Address" - }, - "type": "array" - }, - "partOf": { - "description": "The organization of which this organization forms a part.", - "$ref": "#/definitions/Reference" - }, - "contact": { - "description": "Contact for the organization for a certain purpose.", - "items": { - "$ref": "#/definitions/Organization_Contact" - }, - "type": "array" - }, - "endpoint": { - "description": "Technical endpoints providing access to services operated for the organization.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Organization_Contact": { - "description": "A formally or informally recognized grouping of people or organizations formed for the purpose of achieving some form of collective action. Includes companies, institutions, corporations, departments, community groups, healthcare practice groups, payer/insurer, etc.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "purpose": { - "description": "Indicates a purpose for which the contact can be reached.", - "$ref": "#/definitions/CodeableConcept" - }, - "name": { - "description": "A name associated with the contact.", - "$ref": "#/definitions/HumanName" - }, - "telecom": { - "description": "A contact detail (e.g. a telephone number or an email address) by which the party may be contacted.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "address": { - "description": "Visiting or postal addresses for the contact.", - "$ref": "#/definitions/Address" - } - }, - "additionalProperties": false - }, - "OrganizationAffiliation": { - "description": "Defines an affiliation/assotiation/relationship between 2 distinct oganizations, that is not a part-of relationship/sub-division relationship.", - "properties": { - "resourceType": { - "description": "This is a OrganizationAffiliation resource", - "const": "OrganizationAffiliation" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers that are specific to this role.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "active": { - "description": "Whether this organization affiliation record is in active use.", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "The period during which the participatingOrganization is affiliated with the primary organization.", - "$ref": "#/definitions/Period" - }, - "organization": { - "description": "Organization where the role is available (primary organization/has members).", - "$ref": "#/definitions/Reference" - }, - "participatingOrganization": { - "description": "The Participating Organization provides/performs the role(s) defined by the code to the Primary Organization (e.g. providing services or is a member of).", - "$ref": "#/definitions/Reference" - }, - "network": { - "description": "Health insurance provider network in which the participatingOrganization provides the role\u0027s services (if defined) at the indicated locations (if defined).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "code": { - "description": "Definition of the role the participatingOrganization plays in the association.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "specialty": { - "description": "Specific specialty of the participatingOrganization in the context of the role.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "location": { - "description": "The location(s) at which the role occurs.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "healthcareService": { - "description": "Healthcare services provided through the role.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "telecom": { - "description": "Contact details at the participatingOrganization relevant to this Affiliation.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "endpoint": { - "description": "Technical endpoints providing access to services operated for this role.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Parameters": { - "description": "This resource is a non-persisted resource used to pass information into and back from an [operation](operations.html). It has no other use, and there is no RESTful endpoint associated with it.", - "properties": { - "resourceType": { - "description": "This is a Parameters resource", - "const": "Parameters" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "parameter": { - "description": "A parameter passed to or received from the operation.", - "items": { - "$ref": "#/definitions/Parameters_Parameter" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Parameters_Parameter": { - "description": "This resource is a non-persisted resource used to pass information into and back from an [operation](operations.html). It has no other use, and there is no RESTful endpoint associated with it.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The name of the parameter (reference to the operation definition).", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "valueBase64Binary": { - "description": "If the parameter is a data type.", - "pattern": "^(\\s*([0-9a-zA-Z\\+/\u003d]){4}\\s*)+$", - "type": "string" - }, - "_valueBase64Binary": { - "description": "Extensions for valueBase64Binary", - "$ref": "#/definitions/Element" - }, - "valueBoolean": { - "description": "If the parameter is a data type.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueCanonical": { - "description": "If the parameter is a data type.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueCanonical": { - "description": "Extensions for valueCanonical", - "$ref": "#/definitions/Element" - }, - "valueCode": { - "description": "If the parameter is a data type.", - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string" - }, - "_valueCode": { - "description": "Extensions for valueCode", - "$ref": "#/definitions/Element" - }, - "valueDate": { - "description": "If the parameter is a data type.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_valueDate": { - "description": "Extensions for valueDate", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "If the parameter is a data type.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valueDecimal": { - "description": "If the parameter is a data type.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_valueDecimal": { - "description": "Extensions for valueDecimal", - "$ref": "#/definitions/Element" - }, - "valueId": { - "description": "If the parameter is a data type.", - "pattern": "^[A-Za-z0-9\\-\\.]{1,64}$", - "type": "string" - }, - "_valueId": { - "description": "Extensions for valueId", - "$ref": "#/definitions/Element" - }, - "valueInstant": { - "description": "If the parameter is a data type.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_valueInstant": { - "description": "Extensions for valueInstant", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "If the parameter is a data type.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueMarkdown": { - "description": "If the parameter is a data type.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueMarkdown": { - "description": "Extensions for valueMarkdown", - "$ref": "#/definitions/Element" - }, - "valueOid": { - "description": "If the parameter is a data type.", - "pattern": "^urn:oid:[0-2](\\.(0|[1-9][0-9]*))+$", - "type": "string" - }, - "_valueOid": { - "description": "Extensions for valueOid", - "$ref": "#/definitions/Element" - }, - "valuePositiveInt": { - "description": "If the parameter is a data type.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_valuePositiveInt": { - "description": "Extensions for valuePositiveInt", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "If the parameter is a data type.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueTime": { - "description": "If the parameter is a data type.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_valueTime": { - "description": "Extensions for valueTime", - "$ref": "#/definitions/Element" - }, - "valueUnsignedInt": { - "description": "If the parameter is a data type.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_valueUnsignedInt": { - "description": "Extensions for valueUnsignedInt", - "$ref": "#/definitions/Element" - }, - "valueUri": { - "description": "If the parameter is a data type.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUri": { - "description": "Extensions for valueUri", - "$ref": "#/definitions/Element" - }, - "valueUrl": { - "description": "If the parameter is a data type.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUrl": { - "description": "Extensions for valueUrl", - "$ref": "#/definitions/Element" - }, - "valueUuid": { - "description": "If the parameter is a data type.", - "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", - "type": "string" - }, - "_valueUuid": { - "description": "Extensions for valueUuid", - "$ref": "#/definitions/Element" - }, - "valueAddress": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Address" - }, - "valueAge": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Age" - }, - "valueAnnotation": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Annotation" - }, - "valueAttachment": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Attachment" - }, - "valueCodeableConcept": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueCoding": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Coding" - }, - "valueContactPoint": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/ContactPoint" - }, - "valueCount": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Count" - }, - "valueDistance": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Distance" - }, - "valueDuration": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Duration" - }, - "valueHumanName": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/HumanName" - }, - "valueIdentifier": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Identifier" - }, - "valueMoney": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Money" - }, - "valuePeriod": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Period" - }, - "valueQuantity": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Quantity" - }, - "valueRange": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Range" - }, - "valueRatio": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Ratio" - }, - "valueReference": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Reference" - }, - "valueSampledData": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/SampledData" - }, - "valueSignature": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Signature" - }, - "valueTiming": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Timing" - }, - "valueContactDetail": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/ContactDetail" - }, - "valueContributor": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Contributor" - }, - "valueDataRequirement": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/DataRequirement" - }, - "valueExpression": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Expression" - }, - "valueParameterDefinition": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/ParameterDefinition" - }, - "valueRelatedArtifact": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/RelatedArtifact" - }, - "valueTriggerDefinition": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/TriggerDefinition" - }, - "valueUsageContext": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/UsageContext" - }, - "valueDosage": { - "description": "If the parameter is a data type.", - "$ref": "#/definitions/Dosage" - }, - "resource": { - "description": "If the parameter is a whole resource.", - "$ref": "#/definitions/ResourceList" - }, - "part": { - "description": "A named part of a multi-part parameter.", - "items": { - "$ref": "#/definitions/Parameters_Parameter" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Patient": { - "description": "Demographics and other administrative information about an individual or animal receiving care or other health-related services.", - "properties": { - "resourceType": { - "description": "This is a Patient resource", - "const": "Patient" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "An identifier for this patient.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "active": { - "description": "Whether this patient record is in active use. \nMany systems use this property to mark as non-current patients, such as those that have not been seen for a period of time based on an organization\u0027s business rules.\n\nIt is often used to filter patient lists to exclude inactive patients\n\nDeceased patients may also be marked as inactive for the same reasons, but may be active for some time after death.", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A name associated with the individual.", - "items": { - "$ref": "#/definitions/HumanName" - }, - "type": "array" - }, - "telecom": { - "description": "A contact detail (e.g. a telephone number or an email address) by which the individual may be contacted.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "gender": { - "description": "Administrative Gender - the gender that the patient is considered to have for administration and record keeping purposes.", - "enum": [ - "male", - "female", - "other", - "unknown" - ] - }, - "_gender": { - "description": "Extensions for gender", - "$ref": "#/definitions/Element" - }, - "birthDate": { - "description": "The date of birth for the individual.", - "$ref": "#/definitions/date" - }, - "_birthDate": { - "description": "Extensions for birthDate", - "$ref": "#/definitions/Element" - }, - "deceasedBoolean": { - "description": "Indicates if the individual is deceased or not.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_deceasedBoolean": { - "description": "Extensions for deceasedBoolean", - "$ref": "#/definitions/Element" - }, - "deceasedDateTime": { - "description": "Indicates if the individual is deceased or not.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_deceasedDateTime": { - "description": "Extensions for deceasedDateTime", - "$ref": "#/definitions/Element" - }, - "address": { - "description": "An address for the individual.", - "items": { - "$ref": "#/definitions/Address" - }, - "type": "array" - }, - "maritalStatus": { - "description": "This field contains a patient\u0027s most recent marital (civil) status.", - "$ref": "#/definitions/CodeableConcept" - }, - "multipleBirthBoolean": { - "description": "Indicates whether the patient is part of a multiple (boolean) or indicates the actual birth order (integer).", - "pattern": "^true|false$", - "type": "boolean" - }, - "_multipleBirthBoolean": { - "description": "Extensions for multipleBirthBoolean", - "$ref": "#/definitions/Element" - }, - "multipleBirthInteger": { - "description": "Indicates whether the patient is part of a multiple (boolean) or indicates the actual birth order (integer).", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_multipleBirthInteger": { - "description": "Extensions for multipleBirthInteger", - "$ref": "#/definitions/Element" - }, - "photo": { - "description": "Image of the patient.", - "items": { - "$ref": "#/definitions/Attachment" - }, - "type": "array" - }, - "contact": { - "description": "A contact party (e.g. guardian, partner, friend) for the patient.", - "items": { - "$ref": "#/definitions/Patient_Contact" - }, - "type": "array" - }, - "communication": { - "description": "A language which may be used to communicate with the patient about his or her health.", - "items": { - "$ref": "#/definitions/Patient_Communication" - }, - "type": "array" - }, - "generalPractitioner": { - "description": "Patient\u0027s nominated care provider.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "managingOrganization": { - "description": "Organization that is the custodian of the patient record.", - "$ref": "#/definitions/Reference" - }, - "link": { - "description": "Link to another patient resource that concerns the same actual patient.", - "items": { - "$ref": "#/definitions/Patient_Link" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Patient_Contact": { - "description": "Demographics and other administrative information about an individual or animal receiving care or other health-related services.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "relationship": { - "description": "The nature of the relationship between the patient and the contact person.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "name": { - "description": "A name associated with the contact person.", - "$ref": "#/definitions/HumanName" - }, - "telecom": { - "description": "A contact detail for the person, e.g. a telephone number or an email address.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "address": { - "description": "Address for the contact person.", - "$ref": "#/definitions/Address" - }, - "gender": { - "description": "Administrative Gender - the gender that the contact person is considered to have for administration and record keeping purposes.", - "enum": [ - "male", - "female", - "other", - "unknown" - ] - }, - "_gender": { - "description": "Extensions for gender", - "$ref": "#/definitions/Element" - }, - "organization": { - "description": "Organization on behalf of which the contact is acting or for which the contact is working.", - "$ref": "#/definitions/Reference" - }, - "period": { - "description": "The period during which this contact person or organization is valid to be contacted relating to this patient.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "Patient_Communication": { - "description": "Demographics and other administrative information about an individual or animal receiving care or other health-related services.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "language": { - "description": "The ISO-639-1 alpha 2 code in lower case for the language, optionally followed by a hyphen and the ISO-3166-1 alpha 2 code for the region in upper case; e.g. \"en\" for English, or \"en-US\" for American English versus \"en-EN\" for England English.", - "$ref": "#/definitions/CodeableConcept" - }, - "preferred": { - "description": "Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).", - "$ref": "#/definitions/boolean" - }, - "_preferred": { - "description": "Extensions for preferred", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "language" - ] - }, - "Patient_Link": { - "description": "Demographics and other administrative information about an individual or animal receiving care or other health-related services.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "other": { - "description": "The other patient resource that the link refers to.", - "$ref": "#/definitions/Reference" - }, - "type": { - "description": "The type of link between this patient resource and another patient resource.", - "enum": [ - "replaced-by", - "replaces", - "refer", - "seealso" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "other" - ] - }, - "PaymentNotice": { - "description": "This resource provides the status of the payment for goods and services rendered, and the request and response resource references.", - "properties": { - "resourceType": { - "description": "This is a PaymentNotice resource", - "const": "PaymentNotice" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this payment notice.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of the resource instance.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "request": { - "description": "Reference of resource for which payment is being made.", - "$ref": "#/definitions/Reference" - }, - "response": { - "description": "Reference of response to resource for which payment is being made.", - "$ref": "#/definitions/Reference" - }, - "created": { - "description": "The date when this resource was created.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "provider": { - "description": "The practitioner who is responsible for the services rendered to the patient.", - "$ref": "#/definitions/Reference" - }, - "payment": { - "description": "A reference to the payment which is the subject of this notice.", - "$ref": "#/definitions/Reference" - }, - "paymentDate": { - "description": "The date when the above payment action occurred.", - "$ref": "#/definitions/date" - }, - "_paymentDate": { - "description": "Extensions for paymentDate", - "$ref": "#/definitions/Element" - }, - "payee": { - "description": "The party who will receive or has received payment that is the subject of this notification.", - "$ref": "#/definitions/Reference" - }, - "recipient": { - "description": "The party who is notified of the payment status.", - "$ref": "#/definitions/Reference" - }, - "amount": { - "description": "The amount sent to the payee.", - "$ref": "#/definitions/Money" - }, - "paymentStatus": { - "description": "A code indicating whether payment has been sent or cleared.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false, - "required": [ - "amount", - "recipient", - "payment", - "resourceType" - ] - }, - "PaymentReconciliation": { - "description": "This resource provides the details including amount of a payment and allocates the payment items being paid.", - "properties": { - "resourceType": { - "description": "This is a PaymentReconciliation resource", - "const": "PaymentReconciliation" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this payment reconciliation.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of the resource instance.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "The period of time for which payments have been gathered into this bulk payment for settlement.", - "$ref": "#/definitions/Period" - }, - "created": { - "description": "The date when the resource was created.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "paymentIssuer": { - "description": "The party who generated the payment.", - "$ref": "#/definitions/Reference" - }, - "request": { - "description": "Original request resource reference.", - "$ref": "#/definitions/Reference" - }, - "requestor": { - "description": "The practitioner who is responsible for the services rendered to the patient.", - "$ref": "#/definitions/Reference" - }, - "outcome": { - "description": "The outcome of a request for a reconciliation.", - "enum": [ - "queued", - "complete", - "error", - "partial" - ] - }, - "_outcome": { - "description": "Extensions for outcome", - "$ref": "#/definitions/Element" - }, - "disposition": { - "description": "A human readable description of the status of the request for the reconciliation.", - "$ref": "#/definitions/string" - }, - "_disposition": { - "description": "Extensions for disposition", - "$ref": "#/definitions/Element" - }, - "paymentDate": { - "description": "The date of payment as indicated on the financial instrument.", - "$ref": "#/definitions/date" - }, - "_paymentDate": { - "description": "Extensions for paymentDate", - "$ref": "#/definitions/Element" - }, - "paymentAmount": { - "description": "Total payment amount as indicated on the financial instrument.", - "$ref": "#/definitions/Money" - }, - "paymentIdentifier": { - "description": "Issuer\u0027s unique identifier for the payment instrument.", - "$ref": "#/definitions/Identifier" - }, - "detail": { - "description": "Distribution of the payment amount for a previously acknowledged payable.", - "items": { - "$ref": "#/definitions/PaymentReconciliation_Detail" - }, - "type": "array" - }, - "formCode": { - "description": "A code for the form to be used for printing the content.", - "$ref": "#/definitions/CodeableConcept" - }, - "processNote": { - "description": "A note that describes or explains the processing in a human readable form.", - "items": { - "$ref": "#/definitions/PaymentReconciliation_ProcessNote" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "paymentAmount", - "resourceType" - ] - }, - "PaymentReconciliation_Detail": { - "description": "This resource provides the details including amount of a payment and allocates the payment items being paid.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique identifier for the current payment item for the referenced payable.", - "$ref": "#/definitions/Identifier" - }, - "predecessor": { - "description": "Unique identifier for the prior payment item for the referenced payable.", - "$ref": "#/definitions/Identifier" - }, - "type": { - "description": "Code to indicate the nature of the payment.", - "$ref": "#/definitions/CodeableConcept" - }, - "request": { - "description": "A resource, such as a Claim, the evaluation of which could lead to payment.", - "$ref": "#/definitions/Reference" - }, - "submitter": { - "description": "The party which submitted the claim or financial transaction.", - "$ref": "#/definitions/Reference" - }, - "response": { - "description": "A resource, such as a ClaimResponse, which contains a commitment to payment.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date from the response resource containing a commitment to pay.", - "$ref": "#/definitions/date" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "responsible": { - "description": "A reference to the individual who is responsible for inquiries regarding the response and its payment.", - "$ref": "#/definitions/Reference" - }, - "payee": { - "description": "The party which is receiving the payment.", - "$ref": "#/definitions/Reference" - }, - "amount": { - "description": "The monetary amount allocated from the total payment to the payable.", - "$ref": "#/definitions/Money" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "PaymentReconciliation_ProcessNote": { - "description": "This resource provides the details including amount of a payment and allocates the payment items being paid.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The business purpose of the note text.", - "enum": [ - "display", - "print", - "printoper" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "The explanation or description associated with the processing.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Person": { - "description": "Demographics and administrative information about a person independent of a specific health-related context.", - "properties": { - "resourceType": { - "description": "This is a Person resource", - "const": "Person" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier for a person within a particular scope.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "name": { - "description": "A name associated with the person.", - "items": { - "$ref": "#/definitions/HumanName" - }, - "type": "array" - }, - "telecom": { - "description": "A contact detail for the person, e.g. a telephone number or an email address.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "gender": { - "description": "Administrative Gender.", - "enum": [ - "male", - "female", - "other", - "unknown" - ] - }, - "_gender": { - "description": "Extensions for gender", - "$ref": "#/definitions/Element" - }, - "birthDate": { - "description": "The birth date for the person.", - "$ref": "#/definitions/date" - }, - "_birthDate": { - "description": "Extensions for birthDate", - "$ref": "#/definitions/Element" - }, - "address": { - "description": "One or more addresses for the person.", - "items": { - "$ref": "#/definitions/Address" - }, - "type": "array" - }, - "photo": { - "description": "An image that can be displayed as a thumbnail of the person to enhance the identification of the individual.", - "$ref": "#/definitions/Attachment" - }, - "managingOrganization": { - "description": "The organization that is the custodian of the person record.", - "$ref": "#/definitions/Reference" - }, - "active": { - "description": "Whether this person\u0027s record is in active use.", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "link": { - "description": "Link to a resource that concerns the same actual person.", - "items": { - "$ref": "#/definitions/Person_Link" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Person_Link": { - "description": "Demographics and administrative information about a person independent of a specific health-related context.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "target": { - "description": "The resource to which this actual person is associated.", - "$ref": "#/definitions/Reference" - }, - "assurance": { - "description": "Level of assurance that this link is associated with the target resource.", - "enum": [ - "level1", - "level2", - "level3", - "level4" - ] - }, - "_assurance": { - "description": "Extensions for assurance", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "target" - ] - }, - "PlanDefinition": { - "description": "This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.", - "properties": { - "resourceType": { - "description": "This is a PlanDefinition resource", - "const": "PlanDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this plan definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this plan definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the plan definition is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this plan definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the plan definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the plan definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the plan definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the plan definition.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "subtitle": { - "description": "An explanatory or alternate title for the plan definition giving additional information about its content.", - "$ref": "#/definitions/string" - }, - "_subtitle": { - "description": "Extensions for subtitle", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "A high-level category for the plan definition that distinguishes the kinds of systems that would be interested in the plan definition.", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "The status of this plan definition. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this plan definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "subjectCodeableConcept": { - "description": "A code or group definition that describes the intended subject of the plan definition.", - "$ref": "#/definitions/CodeableConcept" - }, - "subjectReference": { - "description": "A code or group definition that describes the intended subject of the plan definition.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date (and optionally time) when the plan definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the plan definition changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the plan definition.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the plan definition from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate plan definition instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the plan definition is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this plan definition is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "usage": { - "description": "A detailed description of how the plan definition is used from a clinical perspective.", - "$ref": "#/definitions/string" - }, - "_usage": { - "description": "Extensions for usage", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the plan definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the plan definition.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the plan definition content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "topic": { - "description": "Descriptive topics related to the content of the plan definition. Topics provide a high-level categorization of the definition that can be useful for filtering and searching.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "author": { - "description": "An individiual or organization primarily involved in the creation and maintenance of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "editor": { - "description": "An individual or organization primarily responsible for internal coherence of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "reviewer": { - "description": "An individual or organization primarily responsible for review of some aspect of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "endorser": { - "description": "An individual or organization responsible for officially endorsing the content for use in some setting.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Related artifacts such as additional documentation, justification, or bibliographic references.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "library": { - "description": "A reference to a Library resource containing any formal logic used by the plan definition.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "goal": { - "description": "Goals that describe what the activities within the plan are intended to achieve. For example, weight loss, restoring an activity of daily living, obtaining herd immunity via immunization, meeting a process improvement objective, etc.", - "items": { - "$ref": "#/definitions/PlanDefinition_Goal" - }, - "type": "array" - }, - "action": { - "description": "An action or group of actions to be taken as part of the plan.", - "items": { - "$ref": "#/definitions/PlanDefinition_Action" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "PlanDefinition_Goal": { - "description": "This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "category": { - "description": "Indicates a category the goal falls within.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "Human-readable and/or coded description of a specific desired objective of care, such as \"control blood pressure\" or \"negotiate an obstacle course\" or \"dance with child at wedding\".", - "$ref": "#/definitions/CodeableConcept" - }, - "priority": { - "description": "Identifies the expected level of importance associated with reaching/sustaining the defined goal.", - "$ref": "#/definitions/CodeableConcept" - }, - "start": { - "description": "The event after which the goal should begin being pursued.", - "$ref": "#/definitions/CodeableConcept" - }, - "addresses": { - "description": "Identifies problems, conditions, issues, or concerns the goal is intended to address.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "documentation": { - "description": "Didactic or other informational resources associated with the goal that provide further supporting information about the goal. Information resources can include inline text commentary and links to web resources.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "target": { - "description": "Indicates what should be done and within what timeframe.", - "items": { - "$ref": "#/definitions/PlanDefinition_Target" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "description" - ] - }, - "PlanDefinition_Target": { - "description": "This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "measure": { - "description": "The parameter whose value is to be tracked, e.g. body weight, blood pressure, or hemoglobin A1c level.", - "$ref": "#/definitions/CodeableConcept" - }, - "detailQuantity": { - "description": "The target value of the measure to be achieved to signify fulfillment of the goal, e.g. 150 pounds or 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any value at or above the low value.", - "$ref": "#/definitions/Quantity" - }, - "detailRange": { - "description": "The target value of the measure to be achieved to signify fulfillment of the goal, e.g. 150 pounds or 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any value at or above the low value.", - "$ref": "#/definitions/Range" - }, - "detailCodeableConcept": { - "description": "The target value of the measure to be achieved to signify fulfillment of the goal, e.g. 150 pounds or 7.0%. Either the high or low or both values of the range can be specified. When a low value is missing, it indicates that the goal is achieved at any value at or below the high value. Similarly, if the high value is missing, it indicates that the goal is achieved at any value at or above the low value.", - "$ref": "#/definitions/CodeableConcept" - }, - "due": { - "description": "Indicates the timeframe after the start of the goal in which the goal should be met.", - "$ref": "#/definitions/Duration" - } - }, - "additionalProperties": false - }, - "PlanDefinition_Action": { - "description": "This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "prefix": { - "description": "A user-visible prefix for the action.", - "$ref": "#/definitions/string" - }, - "_prefix": { - "description": "Extensions for prefix", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "The title of the action displayed to a user.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A brief description of the action used to provide a summary to display to the user.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "textEquivalent": { - "description": "A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that might not be capable of interpreting it dynamically.", - "$ref": "#/definitions/string" - }, - "_textEquivalent": { - "description": "Extensions for textEquivalent", - "$ref": "#/definitions/Element" - }, - "priority": { - "description": "Indicates how quickly the action should be addressed with respect to other actions.", - "$ref": "#/definitions/code" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A code that provides meaning for the action or action group. For example, a section may have a LOINC code for the section of a documentation template.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reason": { - "description": "A description of why this action is necessary or appropriate.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "documentation": { - "description": "Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "goalId": { - "description": "Identifies goals that this action supports. The reference must be to a goal element defined within this plan definition.", - "items": { - "$ref": "#/definitions/id" - }, - "type": "array" - }, - "_goalId": { - "description": "Extensions for goalId", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "subjectCodeableConcept": { - "description": "A code or group definition that describes the intended subject of the action and its children, if any.", - "$ref": "#/definitions/CodeableConcept" - }, - "subjectReference": { - "description": "A code or group definition that describes the intended subject of the action and its children, if any.", - "$ref": "#/definitions/Reference" - }, - "trigger": { - "description": "A description of when the action should be triggered.", - "items": { - "$ref": "#/definitions/TriggerDefinition" - }, - "type": "array" - }, - "condition": { - "description": "An expression that describes applicability criteria or start/stop conditions for the action.", - "items": { - "$ref": "#/definitions/PlanDefinition_Condition" - }, - "type": "array" - }, - "input": { - "description": "Defines input data requirements for the action.", - "items": { - "$ref": "#/definitions/DataRequirement" - }, - "type": "array" - }, - "output": { - "description": "Defines the outputs of the action, if any.", - "items": { - "$ref": "#/definitions/DataRequirement" - }, - "type": "array" - }, - "relatedAction": { - "description": "A relationship to another action such as \"before\" or \"30-60 minutes after start of\".", - "items": { - "$ref": "#/definitions/PlanDefinition_RelatedAction" - }, - "type": "array" - }, - "timingDateTime": { - "description": "An optional value describing when the action should be performed.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_timingDateTime": { - "description": "Extensions for timingDateTime", - "$ref": "#/definitions/Element" - }, - "timingAge": { - "description": "An optional value describing when the action should be performed.", - "$ref": "#/definitions/Age" - }, - "timingPeriod": { - "description": "An optional value describing when the action should be performed.", - "$ref": "#/definitions/Period" - }, - "timingDuration": { - "description": "An optional value describing when the action should be performed.", - "$ref": "#/definitions/Duration" - }, - "timingRange": { - "description": "An optional value describing when the action should be performed.", - "$ref": "#/definitions/Range" - }, - "timingTiming": { - "description": "An optional value describing when the action should be performed.", - "$ref": "#/definitions/Timing" - }, - "participant": { - "description": "Indicates who should participate in performing the action described.", - "items": { - "$ref": "#/definitions/PlanDefinition_Participant" - }, - "type": "array" - }, - "type": { - "description": "The type of action to perform (create, update, remove).", - "$ref": "#/definitions/CodeableConcept" - }, - "groupingBehavior": { - "description": "Defines the grouping behavior for the action and its children.", - "enum": [ - "visual-group", - "logical-group", - "sentence-group" - ] - }, - "_groupingBehavior": { - "description": "Extensions for groupingBehavior", - "$ref": "#/definitions/Element" - }, - "selectionBehavior": { - "description": "Defines the selection behavior for the action and its children.", - "enum": [ - "any", - "all", - "all-or-none", - "exactly-one", - "at-most-one", - "one-or-more" - ] - }, - "_selectionBehavior": { - "description": "Extensions for selectionBehavior", - "$ref": "#/definitions/Element" - }, - "requiredBehavior": { - "description": "Defines the required behavior for the action.", - "enum": [ - "must", - "could", - "must-unless-documented" - ] - }, - "_requiredBehavior": { - "description": "Extensions for requiredBehavior", - "$ref": "#/definitions/Element" - }, - "precheckBehavior": { - "description": "Defines whether the action should usually be preselected.", - "enum": [ - "yes", - "no" - ] - }, - "_precheckBehavior": { - "description": "Extensions for precheckBehavior", - "$ref": "#/definitions/Element" - }, - "cardinalityBehavior": { - "description": "Defines whether the action can be selected multiple times.", - "enum": [ - "single", - "multiple" - ] - }, - "_cardinalityBehavior": { - "description": "Extensions for cardinalityBehavior", - "$ref": "#/definitions/Element" - }, - "definitionCanonical": { - "description": "A reference to an ActivityDefinition that describes the action to be taken in detail, or a PlanDefinition that describes a series of actions to be taken.", - "pattern": "^\\S*$", - "type": "string" - }, - "_definitionCanonical": { - "description": "Extensions for definitionCanonical", - "$ref": "#/definitions/Element" - }, - "definitionUri": { - "description": "A reference to an ActivityDefinition that describes the action to be taken in detail, or a PlanDefinition that describes a series of actions to be taken.", - "pattern": "^\\S*$", - "type": "string" - }, - "_definitionUri": { - "description": "Extensions for definitionUri", - "$ref": "#/definitions/Element" - }, - "transform": { - "description": "A reference to a StructureMap resource that defines a transform that can be executed to produce the intent resource using the ActivityDefinition instance as the input.", - "$ref": "#/definitions/canonical" - }, - "dynamicValue": { - "description": "Customizations that should be applied to the statically defined resource. For example, if the dosage of a medication must be computed based on the patient\u0027s weight, a customization would be used to specify an expression that calculated the weight, and the path on the resource that would contain the result.", - "items": { - "$ref": "#/definitions/PlanDefinition_DynamicValue" - }, - "type": "array" - }, - "action": { - "description": "Sub actions that are contained within the action. The behavior of this action determines the functionality of the sub-actions. For example, a selection behavior of at-most-one indicates that of the sub-actions, at most one may be chosen as part of realizing the action definition.", - "items": { - "$ref": "#/definitions/PlanDefinition_Action" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "PlanDefinition_Condition": { - "description": "This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "kind": { - "description": "The kind of condition.", - "enum": [ - "applicability", - "start", - "stop" - ] - }, - "_kind": { - "description": "Extensions for kind", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "An expression that returns true or false, indicating whether the condition is satisfied.", - "$ref": "#/definitions/Expression" - } - }, - "additionalProperties": false - }, - "PlanDefinition_RelatedAction": { - "description": "This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "actionId": { - "description": "The element id of the related action.", - "$ref": "#/definitions/id" - }, - "_actionId": { - "description": "Extensions for actionId", - "$ref": "#/definitions/Element" - }, - "relationship": { - "description": "The relationship of this action to the related action.", - "enum": [ - "before-start", - "before", - "before-end", - "concurrent-with-start", - "concurrent", - "concurrent-with-end", - "after-start", - "after", - "after-end" - ] - }, - "_relationship": { - "description": "Extensions for relationship", - "$ref": "#/definitions/Element" - }, - "offsetDuration": { - "description": "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", - "$ref": "#/definitions/Duration" - }, - "offsetRange": { - "description": "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", - "$ref": "#/definitions/Range" - } - }, - "additionalProperties": false - }, - "PlanDefinition_Participant": { - "description": "This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of participant in the action.", - "enum": [ - "patient", - "practitioner", - "related-person", - "device" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "role": { - "description": "The role the participant should play in performing the described action.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "PlanDefinition_DynamicValue": { - "description": "This resource allows for the definition of various types of plans as a sharable, consumable, and executable artifact. The resource is general enough to support the description of a broad range of clinical artifacts such as clinical decision support rules, order sets and protocols.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "path": { - "description": "The path to the element to be customized. This is the path on the resource that will hold the result of the calculation defined by the expression. The specified path SHALL be a FHIRPath resolveable on the specified target type of the ActivityDefinition, and SHALL consist only of identifiers, constant indexers, and a restricted subset of functions. The path is allowed to contain qualifiers (.) to traverse sub-elements, as well as indexers ([x]) to traverse multiple-cardinality sub-elements (see the [Simple FHIRPath Profile](fhirpath.html#simple) for full details).", - "$ref": "#/definitions/string" - }, - "_path": { - "description": "Extensions for path", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "An expression specifying the value of the customized element.", - "$ref": "#/definitions/Expression" - } - }, - "additionalProperties": false - }, - "Practitioner": { - "description": "A person who is directly or indirectly involved in the provisioning of healthcare.", - "properties": { - "resourceType": { - "description": "This is a Practitioner resource", - "const": "Practitioner" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "An identifier that applies to this person in this role.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "active": { - "description": "Whether this practitioner\u0027s record is in active use.", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "The name(s) associated with the practitioner.", - "items": { - "$ref": "#/definitions/HumanName" - }, - "type": "array" - }, - "telecom": { - "description": "A contact detail for the practitioner, e.g. a telephone number or an email address.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "address": { - "description": "Address(es) of the practitioner that are not role specific (typically home address). \rWork addresses are not typically entered in this property as they are usually role dependent.", - "items": { - "$ref": "#/definitions/Address" - }, - "type": "array" - }, - "gender": { - "description": "Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.", - "enum": [ - "male", - "female", - "other", - "unknown" - ] - }, - "_gender": { - "description": "Extensions for gender", - "$ref": "#/definitions/Element" - }, - "birthDate": { - "description": "The date of birth for the practitioner.", - "$ref": "#/definitions/date" - }, - "_birthDate": { - "description": "Extensions for birthDate", - "$ref": "#/definitions/Element" - }, - "photo": { - "description": "Image of the person.", - "items": { - "$ref": "#/definitions/Attachment" - }, - "type": "array" - }, - "qualification": { - "description": "The official certifications, training, and licenses that authorize or otherwise pertain to the provision of care by the practitioner. For example, a medical license issued by a medical board authorizing the practitioner to practice medicine within a certian locality.", - "items": { - "$ref": "#/definitions/Practitioner_Qualification" - }, - "type": "array" - }, - "communication": { - "description": "A language the practitioner can use in patient communication.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Practitioner_Qualification": { - "description": "A person who is directly or indirectly involved in the provisioning of healthcare.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "An identifier that applies to this person\u0027s qualification in this role.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "code": { - "description": "Coded representation of the qualification.", - "$ref": "#/definitions/CodeableConcept" - }, - "period": { - "description": "Period during which the qualification is valid.", - "$ref": "#/definitions/Period" - }, - "issuer": { - "description": "Organization that regulates and issues the qualification.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "code" - ] - }, - "PractitionerRole": { - "description": "A specific set of Roles/Locations/specialties/services that a practitioner may perform at an organization for a period of time.", - "properties": { - "resourceType": { - "description": "This is a PractitionerRole resource", - "const": "PractitionerRole" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business Identifiers that are specific to a role/location.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "active": { - "description": "Whether this practitioner role record is in active use.", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "The period during which the person is authorized to act as a practitioner in these role(s) for the organization.", - "$ref": "#/definitions/Period" - }, - "practitioner": { - "description": "Practitioner that is able to provide the defined services for the organization.", - "$ref": "#/definitions/Reference" - }, - "organization": { - "description": "The organization where the Practitioner performs the roles associated.", - "$ref": "#/definitions/Reference" - }, - "code": { - "description": "Roles which this practitioner is authorized to perform for the organization.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "specialty": { - "description": "Specific specialty of the practitioner.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "location": { - "description": "The location(s) at which this practitioner provides care.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "healthcareService": { - "description": "The list of healthcare services that this worker provides for this role\u0027s Organization/Location(s).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "telecom": { - "description": "Contact details that are specific to the role/location/service.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "availableTime": { - "description": "A collection of times the practitioner is available or performing this role at the location and/or healthcareservice.", - "items": { - "$ref": "#/definitions/PractitionerRole_AvailableTime" - }, - "type": "array" - }, - "notAvailable": { - "description": "The practitioner is not available or performing this role during this period of time due to the provided reason.", - "items": { - "$ref": "#/definitions/PractitionerRole_NotAvailable" - }, - "type": "array" - }, - "availabilityExceptions": { - "description": "A description of site availability exceptions, e.g. public holiday availability. Succinctly describing all possible exceptions to normal site availability as details in the available Times and not available Times.", - "$ref": "#/definitions/string" - }, - "_availabilityExceptions": { - "description": "Extensions for availabilityExceptions", - "$ref": "#/definitions/Element" - }, - "endpoint": { - "description": "Technical endpoints providing access to services operated for the practitioner with this role.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "PractitionerRole_AvailableTime": { - "description": "A specific set of Roles/Locations/specialties/services that a practitioner may perform at an organization for a period of time.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "daysOfWeek": { - "description": "Indicates which days of the week are available between the start and end Times.", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_daysOfWeek": { - "description": "Extensions for daysOfWeek", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "allDay": { - "description": "Is this always available? (hence times are irrelevant) e.g. 24 hour service.", - "$ref": "#/definitions/boolean" - }, - "_allDay": { - "description": "Extensions for allDay", - "$ref": "#/definitions/Element" - }, - "availableStartTime": { - "description": "The opening time of day. Note: If the AllDay flag is set, then this time is ignored.", - "$ref": "#/definitions/time" - }, - "_availableStartTime": { - "description": "Extensions for availableStartTime", - "$ref": "#/definitions/Element" - }, - "availableEndTime": { - "description": "The closing time of day. Note: If the AllDay flag is set, then this time is ignored.", - "$ref": "#/definitions/time" - }, - "_availableEndTime": { - "description": "Extensions for availableEndTime", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "PractitionerRole_NotAvailable": { - "description": "A specific set of Roles/Locations/specialties/services that a practitioner may perform at an organization for a period of time.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "The reason that can be presented to the user as to why this time is not available.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "during": { - "description": "Service is not available (seasonally or for a public holiday) from this date.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "Procedure": { - "description": "An action that is or was performed on or for a patient. This can be a physical intervention like an operation, or less invasive like long term services, counseling, or hypnotherapy.", - "properties": { - "resourceType": { - "description": "This is a Procedure resource", - "const": "Procedure" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this procedure by the performer or other systems which remain constant as the resource is updated and is propagated from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "instantiatesCanonical": { - "description": "The URL pointing to a FHIR-defined protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "instantiatesUri": { - "description": "The URL pointing to an externally maintained protocol, guideline, order set or other definition that is adhered to in whole or in part by this Procedure.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "basedOn": { - "description": "A reference to a resource that contains details of the request for this procedure.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "partOf": { - "description": "A larger event of which this particular procedure is a component or step.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "A code specifying the state of the procedure. Generally, this will be the in-progress or completed state.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "Captures the reason for the current state of the procedure.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "A code that classifies the procedure for searching, sorting and display purposes (e.g. \"Surgical Procedure\").", - "$ref": "#/definitions/CodeableConcept" - }, - "code": { - "description": "The specific procedure that is performed. Use text if the exact nature of the procedure cannot be coded (e.g. \"Laparoscopic Appendectomy\").", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "The person, animal or group on which the procedure was performed.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The Encounter during which this Procedure was created or performed or to which the creation of this record is tightly associated.", - "$ref": "#/definitions/Reference" - }, - "performedDateTime": { - "description": "Estimated or actual date, date-time, period, or age when the procedure was performed. Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_performedDateTime": { - "description": "Extensions for performedDateTime", - "$ref": "#/definitions/Element" - }, - "performedPeriod": { - "description": "Estimated or actual date, date-time, period, or age when the procedure was performed. Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", - "$ref": "#/definitions/Period" - }, - "performedString": { - "description": "Estimated or actual date, date-time, period, or age when the procedure was performed. Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_performedString": { - "description": "Extensions for performedString", - "$ref": "#/definitions/Element" - }, - "performedAge": { - "description": "Estimated or actual date, date-time, period, or age when the procedure was performed. Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", - "$ref": "#/definitions/Age" - }, - "performedRange": { - "description": "Estimated or actual date, date-time, period, or age when the procedure was performed. Allows a period to support complex procedures that span more than one date, and also allows for the length of the procedure to be captured.", - "$ref": "#/definitions/Range" - }, - "recorder": { - "description": "Individual who recorded the record and takes responsibility for its content.", - "$ref": "#/definitions/Reference" - }, - "asserter": { - "description": "Individual who is making the procedure statement.", - "$ref": "#/definitions/Reference" - }, - "performer": { - "description": "Limited to \"real\" people rather than equipment.", - "items": { - "$ref": "#/definitions/Procedure_Performer" - }, - "type": "array" - }, - "location": { - "description": "The location where the procedure actually happened. E.g. a newborn at home, a tracheostomy at a restaurant.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "The coded reason why the procedure was performed. This may be a coded entity of some type, or may simply be present as text.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "The justification of why the procedure was performed.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "bodySite": { - "description": "Detailed and structured anatomical location information. Multiple locations are allowed - e.g. multiple punch biopsies of a lesion.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "outcome": { - "description": "The outcome of the procedure - did it resolve the reasons for the procedure being performed?", - "$ref": "#/definitions/CodeableConcept" - }, - "report": { - "description": "This could be a histology result, pathology report, surgical report, etc.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "complication": { - "description": "Any complications that occurred during the procedure, or in the immediate post-performance period. These are generally tracked separately from the notes, which will typically describe the procedure itself rather than any \u0027post procedure\u0027 issues.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "complicationDetail": { - "description": "Any complications that occurred during the procedure, or in the immediate post-performance period.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "followUp": { - "description": "If the procedure required specific follow up - e.g. removal of sutures. The follow up may be represented as a simple note or could potentially be more complex, in which case the CarePlan resource can be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "note": { - "description": "Any other notes and comments about the procedure.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "focalDevice": { - "description": "A device that is implanted, removed or otherwise manipulated (calibration, battery replacement, fitting a prosthesis, attaching a wound-vac, etc.) as a focal portion of the Procedure.", - "items": { - "$ref": "#/definitions/Procedure_FocalDevice" - }, - "type": "array" - }, - "usedReference": { - "description": "Identifies medications, devices and any other substance used as part of the procedure.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "usedCode": { - "description": "Identifies coded items that were used as part of the procedure.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "Procedure_Performer": { - "description": "An action that is or was performed on or for a patient. This can be a physical intervention like an operation, or less invasive like long term services, counseling, or hypnotherapy.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "function": { - "description": "Distinguishes the type of involvement of the performer in the procedure. For example, surgeon, anaesthetist, endoscopist.", - "$ref": "#/definitions/CodeableConcept" - }, - "actor": { - "description": "The practitioner who was involved in the procedure.", - "$ref": "#/definitions/Reference" - }, - "onBehalfOf": { - "description": "The organization the device or practitioner was acting on behalf of.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "actor" - ] - }, - "Procedure_FocalDevice": { - "description": "An action that is or was performed on or for a patient. This can be a physical intervention like an operation, or less invasive like long term services, counseling, or hypnotherapy.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "action": { - "description": "The kind of change that happened to the device during the procedure.", - "$ref": "#/definitions/CodeableConcept" - }, - "manipulated": { - "description": "The device that was manipulated (changed) during the procedure.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "manipulated" - ] - }, - "Provenance": { - "description": "Provenance of a resource is a record that describes entities and processes involved in producing and delivering or otherwise influencing that resource. Provenance provides a critical foundation for assessing authenticity, enabling trust, and allowing reproducibility. Provenance assertions are a form of contextual metadata and can themselves become important records with their own provenance. Provenance statement indicates clinical significance in terms of confidence in authenticity, reliability, and trustworthiness, integrity, and stage in lifecycle (e.g. Document Completion - has the artifact been legally authenticated), all of which may impact security, privacy, and trust policies.", - "properties": { - "resourceType": { - "description": "This is a Provenance resource", - "const": "Provenance" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "target": { - "description": "The Reference(s) that were generated or updated by the activity described in this resource. A provenance can point to more than one target if multiple resources were created/updated by the same activity.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "occurredPeriod": { - "description": "The period during which the activity occurred.", - "$ref": "#/definitions/Period" - }, - "occurredDateTime": { - "description": "The period during which the activity occurred.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_occurredDateTime": { - "description": "Extensions for occurredDateTime", - "$ref": "#/definitions/Element" - }, - "recorded": { - "description": "The instant of time at which the activity was recorded.", - "$ref": "#/definitions/instant" - }, - "_recorded": { - "description": "Extensions for recorded", - "$ref": "#/definitions/Element" - }, - "policy": { - "description": "Policy or plan the activity was defined by. Typically, a single activity may have multiple applicable policy documents, such as patient consent, guarantor funding, etc.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_policy": { - "description": "Extensions for policy", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "location": { - "description": "Where the activity occurred, if relevant.", - "$ref": "#/definitions/Reference" - }, - "reason": { - "description": "The reason that the activity was taking place.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "activity": { - "description": "An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.", - "$ref": "#/definitions/CodeableConcept" - }, - "agent": { - "description": "An actor taking a role in an activity for which it can be assigned some degree of responsibility for the activity taking place.", - "items": { - "$ref": "#/definitions/Provenance_Agent" - }, - "type": "array" - }, - "entity": { - "description": "An entity used in this activity.", - "items": { - "$ref": "#/definitions/Provenance_Entity" - }, - "type": "array" - }, - "signature": { - "description": "A digital signature on the target Reference(s). The signer should match a Provenance.agent. The purpose of the signature is indicated.", - "items": { - "$ref": "#/definitions/Signature" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "agent", - "resourceType", - "target" - ] - }, - "Provenance_Agent": { - "description": "Provenance of a resource is a record that describes entities and processes involved in producing and delivering or otherwise influencing that resource. Provenance provides a critical foundation for assessing authenticity, enabling trust, and allowing reproducibility. Provenance assertions are a form of contextual metadata and can themselves become important records with their own provenance. Provenance statement indicates clinical significance in terms of confidence in authenticity, reliability, and trustworthiness, integrity, and stage in lifecycle (e.g. Document Completion - has the artifact been legally authenticated), all of which may impact security, privacy, and trust policies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The participation the agent had with respect to the activity.", - "$ref": "#/definitions/CodeableConcept" - }, - "role": { - "description": "The function of the agent with respect to the activity. The security role enabling the agent with respect to the activity.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "who": { - "description": "The individual, device or organization that participated in the event.", - "$ref": "#/definitions/Reference" - }, - "onBehalfOf": { - "description": "The individual, device, or organization for whom the change was made.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "who" - ] - }, - "Provenance_Entity": { - "description": "Provenance of a resource is a record that describes entities and processes involved in producing and delivering or otherwise influencing that resource. Provenance provides a critical foundation for assessing authenticity, enabling trust, and allowing reproducibility. Provenance assertions are a form of contextual metadata and can themselves become important records with their own provenance. Provenance statement indicates clinical significance in terms of confidence in authenticity, reliability, and trustworthiness, integrity, and stage in lifecycle (e.g. Document Completion - has the artifact been legally authenticated), all of which may impact security, privacy, and trust policies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "role": { - "description": "How the entity was used during the activity.", - "enum": [ - "derivation", - "revision", - "quotation", - "source", - "removal" - ] - }, - "_role": { - "description": "Extensions for role", - "$ref": "#/definitions/Element" - }, - "what": { - "description": "Identity of the Entity used. May be a logical or physical uri and maybe absolute or relative.", - "$ref": "#/definitions/Reference" - }, - "agent": { - "description": "The entity is attributed to an agent to express the agent\u0027s responsibility for that entity, possibly along with other agents. This description can be understood as shorthand for saying that the agent was responsible for the activity which generated the entity.", - "items": { - "$ref": "#/definitions/Provenance_Agent" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "what" - ] - }, - "Questionnaire": { - "description": "A structured set of questions intended to guide the collection of answers from end-users. Questionnaires provide detailed control over order, presentation, phraseology and grouping to allow coherent, consistent data collection.", - "properties": { - "resourceType": { - "description": "This is a Questionnaire resource", - "const": "Questionnaire" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this questionnaire when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this questionnaire is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the questionnaire is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this questionnaire when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the questionnaire when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the questionnaire author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the questionnaire. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the questionnaire.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "derivedFrom": { - "description": "The URL of a Questionnaire that this Questionnaire is based on.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "status": { - "description": "The status of this questionnaire. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this questionnaire is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "subjectType": { - "description": "The types of subjects that can be the subject of responses created for the questionnaire.", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_subjectType": { - "description": "Extensions for subjectType", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "date": { - "description": "The date (and optionally time) when the questionnaire was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the questionnaire changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the questionnaire.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the questionnaire from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate questionnaire instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the questionnaire is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this questionnaire is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the questionnaire and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the questionnaire.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the questionnaire content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "code": { - "description": "An identifier for this question or group of questions in a particular terminology such as LOINC.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "item": { - "description": "A particular question, question grouping or display text that is part of the questionnaire.", - "items": { - "$ref": "#/definitions/Questionnaire_Item" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Questionnaire_Item": { - "description": "A structured set of questions intended to guide the collection of answers from end-users. Questionnaires provide detailed control over order, presentation, phraseology and grouping to allow coherent, consistent data collection.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "linkId": { - "description": "An identifier that is unique within the Questionnaire allowing linkage to the equivalent item in a QuestionnaireResponse resource.", - "$ref": "#/definitions/string" - }, - "_linkId": { - "description": "Extensions for linkId", - "$ref": "#/definitions/Element" - }, - "definition": { - "description": "This element is a URI that refers to an [[[ElementDefinition]]] that provides information about this item, including information that might otherwise be included in the instance of the Questionnaire resource. A detailed description of the construction of the URI is shown in Comments, below. If this element is present then the following element values MAY be derived from the Element Definition if the corresponding elements of this Questionnaire resource instance have no value:\n\n* code (ElementDefinition.code) \n* type (ElementDefinition.type) \n* required (ElementDefinition.min) \n* repeats (ElementDefinition.max) \n* maxLength (ElementDefinition.maxLength) \n* answerValueSet (ElementDefinition.binding)\n* options (ElementDefinition.binding).", - "$ref": "#/definitions/uri" - }, - "_definition": { - "description": "Extensions for definition", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A terminology code that corresponds to this group or question (e.g. a code from LOINC, which defines many questions and answers).", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "prefix": { - "description": "A short label for a particular group, question or set of display text within the questionnaire used for reference by the individual completing the questionnaire.", - "$ref": "#/definitions/string" - }, - "_prefix": { - "description": "Extensions for prefix", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "The name of a section, the text of a question or text content for a display item.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type of questionnaire item this is - whether text for display, a grouping of other items or a particular type of data to be captured (string, integer, coded choice, etc.).", - "enum": [ - "group", - "display", - "boolean", - "decimal", - "integer", - "date", - "dateTime", - "time", - "string", - "text", - "url", - "choice", - "open-choice", - "attachment", - "reference", - "quantity" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "enableWhen": { - "description": "A constraint indicating that this item should only be enabled (displayed/allow answers to be captured) when the specified condition is true.", - "items": { - "$ref": "#/definitions/Questionnaire_EnableWhen" - }, - "type": "array" - }, - "enableBehavior": { - "description": "Controls how multiple enableWhen values are interpreted - whether all or any must be true.", - "enum": [ - "all", - "any" - ] - }, - "_enableBehavior": { - "description": "Extensions for enableBehavior", - "$ref": "#/definitions/Element" - }, - "required": { - "description": "An indication, if true, that the item must be present in a \"completed\" QuestionnaireResponse. If false, the item may be skipped when answering the questionnaire.", - "$ref": "#/definitions/boolean" - }, - "_required": { - "description": "Extensions for required", - "$ref": "#/definitions/Element" - }, - "repeats": { - "description": "An indication, if true, that the item may occur multiple times in the response, collecting multiple answers for questions or multiple sets of answers for groups.", - "$ref": "#/definitions/boolean" - }, - "_repeats": { - "description": "Extensions for repeats", - "$ref": "#/definitions/Element" - }, - "readOnly": { - "description": "An indication, when true, that the value cannot be changed by a human respondent to the Questionnaire.", - "$ref": "#/definitions/boolean" - }, - "_readOnly": { - "description": "Extensions for readOnly", - "$ref": "#/definitions/Element" - }, - "maxLength": { - "description": "The maximum number of characters that are permitted in the answer to be considered a \"valid\" QuestionnaireResponse.", - "$ref": "#/definitions/integer" - }, - "_maxLength": { - "description": "Extensions for maxLength", - "$ref": "#/definitions/Element" - }, - "answerValueSet": { - "description": "A reference to a value set containing a list of codes representing permitted answers for a \"choice\" or \"open-choice\" question.", - "$ref": "#/definitions/canonical" - }, - "answerOption": { - "description": "One of the permitted answers for a \"choice\" or \"open-choice\" question.", - "items": { - "$ref": "#/definitions/Questionnaire_AnswerOption" - }, - "type": "array" - }, - "initial": { - "description": "One or more values that should be pre-populated in the answer when initially rendering the questionnaire for user input.", - "items": { - "$ref": "#/definitions/Questionnaire_Initial" - }, - "type": "array" - }, - "item": { - "description": "Text, questions and other groups to be nested beneath a question or group.", - "items": { - "$ref": "#/definitions/Questionnaire_Item" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Questionnaire_EnableWhen": { - "description": "A structured set of questions intended to guide the collection of answers from end-users. Questionnaires provide detailed control over order, presentation, phraseology and grouping to allow coherent, consistent data collection.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "question": { - "description": "The linkId for the question whose answer (or lack of answer) governs whether this item is enabled.", - "$ref": "#/definitions/string" - }, - "_question": { - "description": "Extensions for question", - "$ref": "#/definitions/Element" - }, - "operator": { - "description": "Specifies the criteria by which the question is enabled.", - "enum": [ - "exists", - "\u003d", - "!\u003d", - "\u003e", - "\u003c", - "\u003e\u003d", - "\u003c\u003d" - ] - }, - "_operator": { - "description": "Extensions for operator", - "$ref": "#/definitions/Element" - }, - "answerBoolean": { - "description": "A value that the referenced question is tested using the specified operator in order for the item to be enabled.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_answerBoolean": { - "description": "Extensions for answerBoolean", - "$ref": "#/definitions/Element" - }, - "answerDecimal": { - "description": "A value that the referenced question is tested using the specified operator in order for the item to be enabled.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_answerDecimal": { - "description": "Extensions for answerDecimal", - "$ref": "#/definitions/Element" - }, - "answerInteger": { - "description": "A value that the referenced question is tested using the specified operator in order for the item to be enabled.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_answerInteger": { - "description": "Extensions for answerInteger", - "$ref": "#/definitions/Element" - }, - "answerDate": { - "description": "A value that the referenced question is tested using the specified operator in order for the item to be enabled.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_answerDate": { - "description": "Extensions for answerDate", - "$ref": "#/definitions/Element" - }, - "answerDateTime": { - "description": "A value that the referenced question is tested using the specified operator in order for the item to be enabled.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_answerDateTime": { - "description": "Extensions for answerDateTime", - "$ref": "#/definitions/Element" - }, - "answerTime": { - "description": "A value that the referenced question is tested using the specified operator in order for the item to be enabled.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_answerTime": { - "description": "Extensions for answerTime", - "$ref": "#/definitions/Element" - }, - "answerString": { - "description": "A value that the referenced question is tested using the specified operator in order for the item to be enabled.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_answerString": { - "description": "Extensions for answerString", - "$ref": "#/definitions/Element" - }, - "answerCoding": { - "description": "A value that the referenced question is tested using the specified operator in order for the item to be enabled.", - "$ref": "#/definitions/Coding" - }, - "answerQuantity": { - "description": "A value that the referenced question is tested using the specified operator in order for the item to be enabled.", - "$ref": "#/definitions/Quantity" - }, - "answerReference": { - "description": "A value that the referenced question is tested using the specified operator in order for the item to be enabled.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "Questionnaire_AnswerOption": { - "description": "A structured set of questions intended to guide the collection of answers from end-users. Questionnaires provide detailed control over order, presentation, phraseology and grouping to allow coherent, consistent data collection.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "valueInteger": { - "description": "A potential answer that\u0027s allowed as the answer to this question.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueDate": { - "description": "A potential answer that\u0027s allowed as the answer to this question.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_valueDate": { - "description": "Extensions for valueDate", - "$ref": "#/definitions/Element" - }, - "valueTime": { - "description": "A potential answer that\u0027s allowed as the answer to this question.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_valueTime": { - "description": "Extensions for valueTime", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "A potential answer that\u0027s allowed as the answer to this question.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueCoding": { - "description": "A potential answer that\u0027s allowed as the answer to this question.", - "$ref": "#/definitions/Coding" - }, - "valueReference": { - "description": "A potential answer that\u0027s allowed as the answer to this question.", - "$ref": "#/definitions/Reference" - }, - "initialSelected": { - "description": "Indicates whether the answer value is selected when the list of possible answers is initially shown.", - "$ref": "#/definitions/boolean" - }, - "_initialSelected": { - "description": "Extensions for initialSelected", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Questionnaire_Initial": { - "description": "A structured set of questions intended to guide the collection of answers from end-users. Questionnaires provide detailed control over order, presentation, phraseology and grouping to allow coherent, consistent data collection.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "valueBoolean": { - "description": "The actual value to for an initial answer.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueDecimal": { - "description": "The actual value to for an initial answer.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_valueDecimal": { - "description": "Extensions for valueDecimal", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "The actual value to for an initial answer.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueDate": { - "description": "The actual value to for an initial answer.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_valueDate": { - "description": "Extensions for valueDate", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "The actual value to for an initial answer.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valueTime": { - "description": "The actual value to for an initial answer.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_valueTime": { - "description": "Extensions for valueTime", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "The actual value to for an initial answer.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueUri": { - "description": "The actual value to for an initial answer.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUri": { - "description": "Extensions for valueUri", - "$ref": "#/definitions/Element" - }, - "valueAttachment": { - "description": "The actual value to for an initial answer.", - "$ref": "#/definitions/Attachment" - }, - "valueCoding": { - "description": "The actual value to for an initial answer.", - "$ref": "#/definitions/Coding" - }, - "valueQuantity": { - "description": "The actual value to for an initial answer.", - "$ref": "#/definitions/Quantity" - }, - "valueReference": { - "description": "The actual value to for an initial answer.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "QuestionnaireResponse": { - "description": "A structured set of questions and their answers. The questions are ordered and grouped into coherent subsets, corresponding to the structure of the grouping of the questionnaire being responded to.", - "properties": { - "resourceType": { - "description": "This is a QuestionnaireResponse resource", - "const": "QuestionnaireResponse" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A business identifier assigned to a particular completed (or partially completed) questionnaire.", - "$ref": "#/definitions/Identifier" - }, - "basedOn": { - "description": "The order, proposal or plan that is fulfilled in whole or in part by this QuestionnaireResponse. For example, a ServiceRequest seeking an intake assessment or a decision support recommendation to assess for post-partum depression.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "partOf": { - "description": "A procedure or observation that this questionnaire was performed as part of the execution of. For example, the surgery a checklist was executed as part of.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "questionnaire": { - "description": "The Questionnaire that defines and organizes the questions for which answers are being provided.", - "$ref": "#/definitions/canonical" - }, - "status": { - "description": "The position of the questionnaire response within its overall lifecycle.", - "enum": [ - "in-progress", - "completed", - "amended", - "entered-in-error", - "stopped" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "subject": { - "description": "The subject of the questionnaire response. This could be a patient, organization, practitioner, device, etc. This is who/what the answers apply to, but is not necessarily the source of information.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The Encounter during which this questionnaire response was created or to which the creation of this record is tightly associated.", - "$ref": "#/definitions/Reference" - }, - "authored": { - "description": "The date and/or time that this set of answers were last changed.", - "$ref": "#/definitions/dateTime" - }, - "_authored": { - "description": "Extensions for authored", - "$ref": "#/definitions/Element" - }, - "author": { - "description": "Person who received the answers to the questions in the QuestionnaireResponse and recorded them in the system.", - "$ref": "#/definitions/Reference" - }, - "source": { - "description": "The person who answered the questions about the subject.", - "$ref": "#/definitions/Reference" - }, - "item": { - "description": "A group or question item from the original questionnaire for which answers are provided.", - "items": { - "$ref": "#/definitions/QuestionnaireResponse_Item" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "QuestionnaireResponse_Item": { - "description": "A structured set of questions and their answers. The questions are ordered and grouped into coherent subsets, corresponding to the structure of the grouping of the questionnaire being responded to.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "linkId": { - "description": "The item from the Questionnaire that corresponds to this item in the QuestionnaireResponse resource.", - "$ref": "#/definitions/string" - }, - "_linkId": { - "description": "Extensions for linkId", - "$ref": "#/definitions/Element" - }, - "definition": { - "description": "A reference to an [[[ElementDefinition]]] that provides the details for the item.", - "$ref": "#/definitions/uri" - }, - "_definition": { - "description": "Extensions for definition", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "Text that is displayed above the contents of the group or as the text of the question being answered.", - "$ref": "#/definitions/string" - }, - "_text": { - "description": "Extensions for text", - "$ref": "#/definitions/Element" - }, - "answer": { - "description": "The respondent\u0027s answer(s) to the question.", - "items": { - "$ref": "#/definitions/QuestionnaireResponse_Answer" - }, - "type": "array" - }, - "item": { - "description": "Questions or sub-groups nested beneath a question or group.", - "items": { - "$ref": "#/definitions/QuestionnaireResponse_Item" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "QuestionnaireResponse_Answer": { - "description": "A structured set of questions and their answers. The questions are ordered and grouped into coherent subsets, corresponding to the structure of the grouping of the questionnaire being responded to.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "valueBoolean": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueDecimal": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_valueDecimal": { - "description": "Extensions for valueDecimal", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueDate": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_valueDate": { - "description": "Extensions for valueDate", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valueTime": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_valueTime": { - "description": "Extensions for valueTime", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueUri": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUri": { - "description": "Extensions for valueUri", - "$ref": "#/definitions/Element" - }, - "valueAttachment": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "$ref": "#/definitions/Attachment" - }, - "valueCoding": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "$ref": "#/definitions/Coding" - }, - "valueQuantity": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "$ref": "#/definitions/Quantity" - }, - "valueReference": { - "description": "The answer (or one of the answers) provided by the respondent to the question.", - "$ref": "#/definitions/Reference" - }, - "item": { - "description": "Nested groups and/or questions found within this particular answer.", - "items": { - "$ref": "#/definitions/QuestionnaireResponse_Item" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "RelatedPerson": { - "description": "Information about a person that is involved in the care for a patient, but who is not the target of healthcare, nor has a formal responsibility in the care process.", - "properties": { - "resourceType": { - "description": "This is a RelatedPerson resource", - "const": "RelatedPerson" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier for a person within a particular scope.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "active": { - "description": "Whether this related person record is in active use.", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "patient": { - "description": "The patient this person is related to.", - "$ref": "#/definitions/Reference" - }, - "relationship": { - "description": "The nature of the relationship between a patient and the related person.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "name": { - "description": "A name associated with the person.", - "items": { - "$ref": "#/definitions/HumanName" - }, - "type": "array" - }, - "telecom": { - "description": "A contact detail for the person, e.g. a telephone number or an email address.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "gender": { - "description": "Administrative Gender - the gender that the person is considered to have for administration and record keeping purposes.", - "enum": [ - "male", - "female", - "other", - "unknown" - ] - }, - "_gender": { - "description": "Extensions for gender", - "$ref": "#/definitions/Element" - }, - "birthDate": { - "description": "The date on which the related person was born.", - "$ref": "#/definitions/date" - }, - "_birthDate": { - "description": "Extensions for birthDate", - "$ref": "#/definitions/Element" - }, - "address": { - "description": "Address where the related person can be contacted or visited.", - "items": { - "$ref": "#/definitions/Address" - }, - "type": "array" - }, - "photo": { - "description": "Image of the person.", - "items": { - "$ref": "#/definitions/Attachment" - }, - "type": "array" - }, - "period": { - "description": "The period of time during which this relationship is or was active. If there are no dates defined, then the interval is unknown.", - "$ref": "#/definitions/Period" - }, - "communication": { - "description": "A language which may be used to communicate with about the patient\u0027s health.", - "items": { - "$ref": "#/definitions/RelatedPerson_Communication" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "patient", - "resourceType" - ] - }, - "RelatedPerson_Communication": { - "description": "Information about a person that is involved in the care for a patient, but who is not the target of healthcare, nor has a formal responsibility in the care process.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "language": { - "description": "The ISO-639-1 alpha 2 code in lower case for the language, optionally followed by a hyphen and the ISO-3166-1 alpha 2 code for the region in upper case; e.g. \"en\" for English, or \"en-US\" for American English versus \"en-EN\" for England English.", - "$ref": "#/definitions/CodeableConcept" - }, - "preferred": { - "description": "Indicates whether or not the patient prefers this language (over other languages he masters up a certain level).", - "$ref": "#/definitions/boolean" - }, - "_preferred": { - "description": "Extensions for preferred", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "language" - ] - }, - "RequestGroup": { - "description": "A group of related requests that can be used to capture intended activities that have inter-dependencies such as \"give this medication after that one\".", - "properties": { - "resourceType": { - "description": "This is a RequestGroup resource", - "const": "RequestGroup" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Allows a service to provide a unique, business identifier for the request.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "instantiatesCanonical": { - "description": "A canonical URL referencing a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "_instantiatesCanonical": { - "description": "Extensions for instantiatesCanonical", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "instantiatesUri": { - "description": "A URL referencing an externally defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this request.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "basedOn": { - "description": "A plan, proposal or order that is fulfilled in whole or in part by this request.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "replaces": { - "description": "Completed or terminated request(s) whose function is taken by this new request.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "groupIdentifier": { - "description": "A shared identifier common to all requests that were authorized more or less simultaneously by a single author, representing the identifier of the requisition, prescription or similar form.", - "$ref": "#/definitions/Identifier" - }, - "status": { - "description": "The current state of the request. For request groups, the status reflects the status of all the requests in the group.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "intent": { - "description": "Indicates the level of authority/intentionality associated with the request and where the request fits into the workflow chain.", - "$ref": "#/definitions/code" - }, - "_intent": { - "description": "Extensions for intent", - "$ref": "#/definitions/Element" - }, - "priority": { - "description": "Indicates how quickly the request should be addressed with respect to other requests.", - "$ref": "#/definitions/code" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A code that identifies what the overall request group is.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "The subject for which the request group was created.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "Describes the context of the request group, if any.", - "$ref": "#/definitions/Reference" - }, - "authoredOn": { - "description": "Indicates when the request group was created.", - "$ref": "#/definitions/dateTime" - }, - "_authoredOn": { - "description": "Extensions for authoredOn", - "$ref": "#/definitions/Element" - }, - "author": { - "description": "Provides a reference to the author of the request group.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "Describes the reason for the request group in coded or textual form.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Indicates another resource whose existence justifies this request group.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Provides a mechanism to communicate additional information about the response.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "action": { - "description": "The actions, if any, produced by the evaluation of the artifact.", - "items": { - "$ref": "#/definitions/RequestGroup_Action" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "RequestGroup_Action": { - "description": "A group of related requests that can be used to capture intended activities that have inter-dependencies such as \"give this medication after that one\".", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "prefix": { - "description": "A user-visible prefix for the action.", - "$ref": "#/definitions/string" - }, - "_prefix": { - "description": "Extensions for prefix", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "The title of the action displayed to a user.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A short description of the action used to provide a summary to display to the user.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "textEquivalent": { - "description": "A text equivalent of the action to be performed. This provides a human-interpretable description of the action when the definition is consumed by a system that might not be capable of interpreting it dynamically.", - "$ref": "#/definitions/string" - }, - "_textEquivalent": { - "description": "Extensions for textEquivalent", - "$ref": "#/definitions/Element" - }, - "priority": { - "description": "Indicates how quickly the action should be addressed with respect to other actions.", - "$ref": "#/definitions/code" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A code that provides meaning for the action or action group. For example, a section may have a LOINC code for a section of a documentation template.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "documentation": { - "description": "Didactic or other informational resources associated with the action that can be provided to the CDS recipient. Information resources can include inline text commentary and links to web resources.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "condition": { - "description": "An expression that describes applicability criteria, or start/stop conditions for the action.", - "items": { - "$ref": "#/definitions/RequestGroup_Condition" - }, - "type": "array" - }, - "relatedAction": { - "description": "A relationship to another action such as \"before\" or \"30-60 minutes after start of\".", - "items": { - "$ref": "#/definitions/RequestGroup_RelatedAction" - }, - "type": "array" - }, - "timingDateTime": { - "description": "An optional value describing when the action should be performed.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_timingDateTime": { - "description": "Extensions for timingDateTime", - "$ref": "#/definitions/Element" - }, - "timingAge": { - "description": "An optional value describing when the action should be performed.", - "$ref": "#/definitions/Age" - }, - "timingPeriod": { - "description": "An optional value describing when the action should be performed.", - "$ref": "#/definitions/Period" - }, - "timingDuration": { - "description": "An optional value describing when the action should be performed.", - "$ref": "#/definitions/Duration" - }, - "timingRange": { - "description": "An optional value describing when the action should be performed.", - "$ref": "#/definitions/Range" - }, - "timingTiming": { - "description": "An optional value describing when the action should be performed.", - "$ref": "#/definitions/Timing" - }, - "participant": { - "description": "The participant that should perform or be responsible for this action.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "type": { - "description": "The type of action to perform (create, update, remove).", - "$ref": "#/definitions/CodeableConcept" - }, - "groupingBehavior": { - "description": "Defines the grouping behavior for the action and its children.", - "$ref": "#/definitions/code" - }, - "_groupingBehavior": { - "description": "Extensions for groupingBehavior", - "$ref": "#/definitions/Element" - }, - "selectionBehavior": { - "description": "Defines the selection behavior for the action and its children.", - "$ref": "#/definitions/code" - }, - "_selectionBehavior": { - "description": "Extensions for selectionBehavior", - "$ref": "#/definitions/Element" - }, - "requiredBehavior": { - "description": "Defines expectations around whether an action is required.", - "$ref": "#/definitions/code" - }, - "_requiredBehavior": { - "description": "Extensions for requiredBehavior", - "$ref": "#/definitions/Element" - }, - "precheckBehavior": { - "description": "Defines whether the action should usually be preselected.", - "$ref": "#/definitions/code" - }, - "_precheckBehavior": { - "description": "Extensions for precheckBehavior", - "$ref": "#/definitions/Element" - }, - "cardinalityBehavior": { - "description": "Defines whether the action can be selected multiple times.", - "$ref": "#/definitions/code" - }, - "_cardinalityBehavior": { - "description": "Extensions for cardinalityBehavior", - "$ref": "#/definitions/Element" - }, - "resource": { - "description": "The resource that is the target of the action (e.g. CommunicationRequest).", - "$ref": "#/definitions/Reference" - }, - "action": { - "description": "Sub actions.", - "items": { - "$ref": "#/definitions/RequestGroup_Action" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "RequestGroup_Condition": { - "description": "A group of related requests that can be used to capture intended activities that have inter-dependencies such as \"give this medication after that one\".", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "kind": { - "description": "The kind of condition.", - "$ref": "#/definitions/code" - }, - "_kind": { - "description": "Extensions for kind", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "An expression that returns true or false, indicating whether or not the condition is satisfied.", - "$ref": "#/definitions/Expression" - } - }, - "additionalProperties": false - }, - "RequestGroup_RelatedAction": { - "description": "A group of related requests that can be used to capture intended activities that have inter-dependencies such as \"give this medication after that one\".", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "actionId": { - "description": "The element id of the action this is related to.", - "$ref": "#/definitions/id" - }, - "_actionId": { - "description": "Extensions for actionId", - "$ref": "#/definitions/Element" - }, - "relationship": { - "description": "The relationship of this action to the related action.", - "$ref": "#/definitions/code" - }, - "_relationship": { - "description": "Extensions for relationship", - "$ref": "#/definitions/Element" - }, - "offsetDuration": { - "description": "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", - "$ref": "#/definitions/Duration" - }, - "offsetRange": { - "description": "A duration or range of durations to apply to the relationship. For example, 30-60 minutes before.", - "$ref": "#/definitions/Range" - } - }, - "additionalProperties": false - }, - "ResearchDefinition": { - "description": "The ResearchDefinition resource describes the conditional state (population and any exposures being compared within the population) and outcome (if specified) that the knowledge (evidence, assertion, recommendation) is about.", - "properties": { - "resourceType": { - "description": "This is a ResearchDefinition resource", - "const": "ResearchDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this research definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this research definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the research definition is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this research definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the research definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the research definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the research definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the research definition.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "shortTitle": { - "description": "The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.", - "$ref": "#/definitions/string" - }, - "_shortTitle": { - "description": "Extensions for shortTitle", - "$ref": "#/definitions/Element" - }, - "subtitle": { - "description": "An explanatory or alternate title for the ResearchDefinition giving additional information about its content.", - "$ref": "#/definitions/string" - }, - "_subtitle": { - "description": "Extensions for subtitle", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this research definition. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this research definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "subjectCodeableConcept": { - "description": "The intended subjects for the ResearchDefinition. If this element is not provided, a Patient subject is assumed, but the subject of the ResearchDefinition can be anything.", - "$ref": "#/definitions/CodeableConcept" - }, - "subjectReference": { - "description": "The intended subjects for the ResearchDefinition. If this element is not provided, a Patient subject is assumed, but the subject of the ResearchDefinition can be anything.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date (and optionally time) when the research definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the research definition changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the research definition.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the research definition from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "A human-readable string to clarify or explain concepts about the resource.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_comment": { - "description": "Extensions for comment", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate research definition instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the research definition is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this research definition is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "usage": { - "description": "A detailed description, from a clinical perspective, of how the ResearchDefinition is used.", - "$ref": "#/definitions/string" - }, - "_usage": { - "description": "Extensions for usage", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the research definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the research definition.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the research definition content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "topic": { - "description": "Descriptive topics related to the content of the ResearchDefinition. Topics provide a high-level categorization grouping types of ResearchDefinitions that can be useful for filtering and searching.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "author": { - "description": "An individiual or organization primarily involved in the creation and maintenance of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "editor": { - "description": "An individual or organization primarily responsible for internal coherence of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "reviewer": { - "description": "An individual or organization primarily responsible for review of some aspect of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "endorser": { - "description": "An individual or organization responsible for officially endorsing the content for use in some setting.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Related artifacts such as additional documentation, justification, or bibliographic references.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "library": { - "description": "A reference to a Library resource containing the formal logic used by the ResearchDefinition.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "population": { - "description": "A reference to a ResearchElementDefinition resource that defines the population for the research.", - "$ref": "#/definitions/Reference" - }, - "exposure": { - "description": "A reference to a ResearchElementDefinition resource that defines the exposure for the research.", - "$ref": "#/definitions/Reference" - }, - "exposureAlternative": { - "description": "A reference to a ResearchElementDefinition resource that defines the exposureAlternative for the research.", - "$ref": "#/definitions/Reference" - }, - "outcome": { - "description": "A reference to a ResearchElementDefinition resomece that defines the outcome for the research.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "resourceType", - "population" - ] - }, - "ResearchElementDefinition": { - "description": "The ResearchElementDefinition resource describes a \"PICO\" element that knowledge (evidence, assertion, recommendation) is about.", - "properties": { - "resourceType": { - "description": "This is a ResearchElementDefinition resource", - "const": "ResearchElementDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this research element definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this research element definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the research element definition is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this research element definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the research element definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the research element definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. To provide a version consistent with the Decision Support Service specification, use the format Major.Minor.Revision (e.g. 1.0.0). For more information on versioning knowledge assets, refer to the Decision Support Service specification. Note that a version is required for non-experimental active artifacts.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the research element definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the research element definition.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "shortTitle": { - "description": "The short title provides an alternate title for use in informal descriptive contexts where the full, formal title is not necessary.", - "$ref": "#/definitions/string" - }, - "_shortTitle": { - "description": "Extensions for shortTitle", - "$ref": "#/definitions/Element" - }, - "subtitle": { - "description": "An explanatory or alternate title for the ResearchElementDefinition giving additional information about its content.", - "$ref": "#/definitions/string" - }, - "_subtitle": { - "description": "Extensions for subtitle", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this research element definition. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this research element definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "subjectCodeableConcept": { - "description": "The intended subjects for the ResearchElementDefinition. If this element is not provided, a Patient subject is assumed, but the subject of the ResearchElementDefinition can be anything.", - "$ref": "#/definitions/CodeableConcept" - }, - "subjectReference": { - "description": "The intended subjects for the ResearchElementDefinition. If this element is not provided, a Patient subject is assumed, but the subject of the ResearchElementDefinition can be anything.", - "$ref": "#/definitions/Reference" - }, - "date": { - "description": "The date (and optionally time) when the research element definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the research element definition changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the research element definition.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the research element definition from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "A human-readable string to clarify or explain concepts about the resource.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_comment": { - "description": "Extensions for comment", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate research element definition instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the research element definition is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this research element definition is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "usage": { - "description": "A detailed description, from a clinical perspective, of how the ResearchElementDefinition is used.", - "$ref": "#/definitions/string" - }, - "_usage": { - "description": "Extensions for usage", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the research element definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the research element definition.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the research element definition content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "topic": { - "description": "Descriptive topics related to the content of the ResearchElementDefinition. Topics provide a high-level categorization grouping types of ResearchElementDefinitions that can be useful for filtering and searching.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "author": { - "description": "An individiual or organization primarily involved in the creation and maintenance of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "editor": { - "description": "An individual or organization primarily responsible for internal coherence of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "reviewer": { - "description": "An individual or organization primarily responsible for review of some aspect of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "endorser": { - "description": "An individual or organization responsible for officially endorsing the content for use in some setting.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Related artifacts such as additional documentation, justification, or bibliographic references.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "library": { - "description": "A reference to a Library resource containing the formal logic used by the ResearchElementDefinition.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "type": { - "description": "The type of research element, a population, an exposure, or an outcome.", - "enum": [ - "population", - "exposure", - "outcome" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "variableType": { - "description": "The type of the outcome (e.g. Dichotomous, Continuous, or Descriptive).", - "enum": [ - "dichotomous", - "continuous", - "descriptive" - ] - }, - "_variableType": { - "description": "Extensions for variableType", - "$ref": "#/definitions/Element" - }, - "characteristic": { - "description": "A characteristic that defines the members of the research element. Multiple characteristics are applied with \"and\" semantics.", - "items": { - "$ref": "#/definitions/ResearchElementDefinition_Characteristic" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "characteristic", - "resourceType" - ] - }, - "ResearchElementDefinition_Characteristic": { - "description": "The ResearchElementDefinition resource describes a \"PICO\" element that knowledge (evidence, assertion, recommendation) is about.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "definitionCodeableConcept": { - "description": "Define members of the research element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).", - "$ref": "#/definitions/CodeableConcept" - }, - "definitionCanonical": { - "description": "Define members of the research element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).", - "pattern": "^\\S*$", - "type": "string" - }, - "_definitionCanonical": { - "description": "Extensions for definitionCanonical", - "$ref": "#/definitions/Element" - }, - "definitionExpression": { - "description": "Define members of the research element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).", - "$ref": "#/definitions/Expression" - }, - "definitionDataRequirement": { - "description": "Define members of the research element using Codes (such as condition, medication, or observation), Expressions ( using an expression language such as FHIRPath or CQL) or DataRequirements (such as Diabetes diagnosis onset in the last year).", - "$ref": "#/definitions/DataRequirement" - }, - "usageContext": { - "description": "Use UsageContext to define the members of the population, such as Age Ranges, Genders, Settings.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "exclude": { - "description": "When true, members with this characteristic are excluded from the element.", - "$ref": "#/definitions/boolean" - }, - "_exclude": { - "description": "Extensions for exclude", - "$ref": "#/definitions/Element" - }, - "unitOfMeasure": { - "description": "Specifies the UCUM unit for the outcome.", - "$ref": "#/definitions/CodeableConcept" - }, - "studyEffectiveDescription": { - "description": "A narrative description of the time period the study covers.", - "$ref": "#/definitions/string" - }, - "_studyEffectiveDescription": { - "description": "Extensions for studyEffectiveDescription", - "$ref": "#/definitions/Element" - }, - "studyEffectiveDateTime": { - "description": "Indicates what effective period the study covers.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_studyEffectiveDateTime": { - "description": "Extensions for studyEffectiveDateTime", - "$ref": "#/definitions/Element" - }, - "studyEffectivePeriod": { - "description": "Indicates what effective period the study covers.", - "$ref": "#/definitions/Period" - }, - "studyEffectiveDuration": { - "description": "Indicates what effective period the study covers.", - "$ref": "#/definitions/Duration" - }, - "studyEffectiveTiming": { - "description": "Indicates what effective period the study covers.", - "$ref": "#/definitions/Timing" - }, - "studyEffectiveTimeFromStart": { - "description": "Indicates duration from the study initiation.", - "$ref": "#/definitions/Duration" - }, - "studyEffectiveGroupMeasure": { - "description": "Indicates how elements are aggregated within the study effective period.", - "enum": [ - "mean", - "median", - "mean-of-mean", - "mean-of-median", - "median-of-mean", - "median-of-median" - ] - }, - "_studyEffectiveGroupMeasure": { - "description": "Extensions for studyEffectiveGroupMeasure", - "$ref": "#/definitions/Element" - }, - "participantEffectiveDescription": { - "description": "A narrative description of the time period the study covers.", - "$ref": "#/definitions/string" - }, - "_participantEffectiveDescription": { - "description": "Extensions for participantEffectiveDescription", - "$ref": "#/definitions/Element" - }, - "participantEffectiveDateTime": { - "description": "Indicates what effective period the study covers.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_participantEffectiveDateTime": { - "description": "Extensions for participantEffectiveDateTime", - "$ref": "#/definitions/Element" - }, - "participantEffectivePeriod": { - "description": "Indicates what effective period the study covers.", - "$ref": "#/definitions/Period" - }, - "participantEffectiveDuration": { - "description": "Indicates what effective period the study covers.", - "$ref": "#/definitions/Duration" - }, - "participantEffectiveTiming": { - "description": "Indicates what effective period the study covers.", - "$ref": "#/definitions/Timing" - }, - "participantEffectiveTimeFromStart": { - "description": "Indicates duration from the participant\u0027s study entry.", - "$ref": "#/definitions/Duration" - }, - "participantEffectiveGroupMeasure": { - "description": "Indicates how elements are aggregated within the study effective period.", - "enum": [ - "mean", - "median", - "mean-of-mean", - "mean-of-median", - "median-of-mean", - "median-of-median" - ] - }, - "_participantEffectiveGroupMeasure": { - "description": "Extensions for participantEffectiveGroupMeasure", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ResearchStudy": { - "description": "A process where a researcher or organization plans and then executes a series of steps intended to increase the field of healthcare-related knowledge. This includes studies of safety, efficacy, comparative effectiveness and other information about medications, devices, therapies and other interventional and investigative techniques. A ResearchStudy involves the gathering of information about human or animal subjects.", - "properties": { - "resourceType": { - "description": "This is a ResearchStudy resource", - "const": "ResearchStudy" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers assigned to this research study by the sponsor or other systems.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "title": { - "description": "A short, descriptive user-friendly label for the study.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "protocol": { - "description": "The set of steps expected to be performed as part of the execution of the study.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "partOf": { - "description": "A larger research study of which this particular study is a component or step.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "The current state of the study.", - "enum": [ - "active", - "administratively-completed", - "approved", - "closed-to-accrual", - "closed-to-accrual-and-intervention", - "completed", - "disapproved", - "in-review", - "temporarily-closed-to-accrual", - "temporarily-closed-to-accrual-and-intervention", - "withdrawn" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "primaryPurposeType": { - "description": "The type of study based upon the intent of the study\u0027s activities. A classification of the intent of the study.", - "$ref": "#/definitions/CodeableConcept" - }, - "phase": { - "description": "The stage in the progression of a therapy from initial experimental use in humans in clinical trials to post-market evaluation.", - "$ref": "#/definitions/CodeableConcept" - }, - "category": { - "description": "Codes categorizing the type of study such as investigational vs. observational, type of blinding, type of randomization, safety vs. efficacy, etc.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "focus": { - "description": "The medication(s), food(s), therapy(ies), device(s) or other concerns or interventions that the study is seeking to gain more information about.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "condition": { - "description": "The condition that is the focus of the study. For example, In a study to examine risk factors for Lupus, might have as an inclusion criterion \"healthy volunteer\", but the target condition code would be a Lupus SNOMED code.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "contact": { - "description": "Contact details to assist a user in learning more about or engaging with the study.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Citations, references and other related documents.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "keyword": { - "description": "Key terms to aid in searching for or filtering the study.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "location": { - "description": "Indicates a country, state or other region where the study is taking place.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "description": { - "description": "A full description of how the study is being conducted.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "enrollment": { - "description": "Reference to a Group that defines the criteria for and quantity of subjects participating in the study. E.g. \" 200 female Europeans between the ages of 20 and 45 with early onset diabetes\".", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "period": { - "description": "Identifies the start date and the expected (or actual, depending on status) end date for the study.", - "$ref": "#/definitions/Period" - }, - "sponsor": { - "description": "An organization that initiates the investigation and is legally responsible for the study.", - "$ref": "#/definitions/Reference" - }, - "principalInvestigator": { - "description": "A researcher in a study who oversees multiple aspects of the study, such as concept development, protocol writing, protocol submission for IRB approval, participant recruitment, informed consent, data collection, analysis, interpretation and presentation.", - "$ref": "#/definitions/Reference" - }, - "site": { - "description": "A facility in which study activities are conducted.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "reasonStopped": { - "description": "A description and/or code explaining the premature termination of the study.", - "$ref": "#/definitions/CodeableConcept" - }, - "note": { - "description": "Comments made about the study by the performer, subject or other participants.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "arm": { - "description": "Describes an expected sequence of events for one of the participants of a study. E.g. Exposure to drug A, wash-out, exposure to drug B, wash-out, follow-up.", - "items": { - "$ref": "#/definitions/ResearchStudy_Arm" - }, - "type": "array" - }, - "objective": { - "description": "A goal that the study is aiming to achieve in terms of a scientific question to be answered by the analysis of data collected during the study.", - "items": { - "$ref": "#/definitions/ResearchStudy_Objective" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "ResearchStudy_Arm": { - "description": "A process where a researcher or organization plans and then executes a series of steps intended to increase the field of healthcare-related knowledge. This includes studies of safety, efficacy, comparative effectiveness and other information about medications, devices, therapies and other interventional and investigative techniques. A ResearchStudy involves the gathering of information about human or animal subjects.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Unique, human-readable label for this arm of the study.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Categorization of study arm, e.g. experimental, active comparator, placebo comparater.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "A succinct description of the path through the study that would be followed by a subject adhering to this arm.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ResearchStudy_Objective": { - "description": "A process where a researcher or organization plans and then executes a series of steps intended to increase the field of healthcare-related knowledge. This includes studies of safety, efficacy, comparative effectiveness and other information about medications, devices, therapies and other interventional and investigative techniques. A ResearchStudy involves the gathering of information about human or animal subjects.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Unique, human-readable label for this objective of the study.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The kind of study objective.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "ResearchSubject": { - "description": "A physical entity which is the primary unit of operational and/or administrative interest in a study.", - "properties": { - "resourceType": { - "description": "This is a ResearchSubject resource", - "const": "ResearchSubject" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers assigned to this research subject for a study.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The current state of the subject.", - "enum": [ - "candidate", - "eligible", - "follow-up", - "ineligible", - "not-registered", - "off-study", - "on-study", - "on-study-intervention", - "on-study-observation", - "pending-on-study", - "potential-candidate", - "screening", - "withdrawn" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "The dates the subject began and ended their participation in the study.", - "$ref": "#/definitions/Period" - }, - "study": { - "description": "Reference to the study the subject is participating in.", - "$ref": "#/definitions/Reference" - }, - "individual": { - "description": "The record of the person or animal who is involved in the study.", - "$ref": "#/definitions/Reference" - }, - "assignedArm": { - "description": "The name of the arm in the study the subject is expected to follow as part of this study.", - "$ref": "#/definitions/string" - }, - "_assignedArm": { - "description": "Extensions for assignedArm", - "$ref": "#/definitions/Element" - }, - "actualArm": { - "description": "The name of the arm in the study the subject actually followed as part of this study.", - "$ref": "#/definitions/string" - }, - "_actualArm": { - "description": "Extensions for actualArm", - "$ref": "#/definitions/Element" - }, - "consent": { - "description": "A record of the patient\u0027s informed agreement to participate in the study.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "study", - "individual", - "resourceType" - ] - }, - "RiskAssessment": { - "description": "An assessment of the likely outcome(s) for a patient or other subject as well as the likelihood of each outcome.", - "properties": { - "resourceType": { - "description": "This is a RiskAssessment resource", - "const": "RiskAssessment" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifier assigned to the risk assessment.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "basedOn": { - "description": "A reference to the request that is fulfilled by this risk assessment.", - "$ref": "#/definitions/Reference" - }, - "parent": { - "description": "A reference to a resource that this risk assessment is part of, such as a Procedure.", - "$ref": "#/definitions/Reference" - }, - "status": { - "description": "The status of the RiskAssessment, using the same statuses as an Observation.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "method": { - "description": "The algorithm, process or mechanism used to evaluate the risk.", - "$ref": "#/definitions/CodeableConcept" - }, - "code": { - "description": "The type of the risk assessment performed.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "The patient or group the risk assessment applies to.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The encounter where the assessment was performed.", - "$ref": "#/definitions/Reference" - }, - "occurrenceDateTime": { - "description": "The date (and possibly time) the risk assessment was performed.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_occurrenceDateTime": { - "description": "Extensions for occurrenceDateTime", - "$ref": "#/definitions/Element" - }, - "occurrencePeriod": { - "description": "The date (and possibly time) the risk assessment was performed.", - "$ref": "#/definitions/Period" - }, - "condition": { - "description": "For assessments or prognosis specific to a particular condition, indicates the condition being assessed.", - "$ref": "#/definitions/Reference" - }, - "performer": { - "description": "The provider or software application that performed the assessment.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "The reason the risk assessment was performed.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Resources supporting the reason the risk assessment was performed.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "basis": { - "description": "Indicates the source data considered as part of the assessment (for example, FamilyHistory, Observations, Procedures, Conditions, etc.).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "prediction": { - "description": "Describes the expected outcome for the subject.", - "items": { - "$ref": "#/definitions/RiskAssessment_Prediction" - }, - "type": "array" - }, - "mitigation": { - "description": "A description of the steps that might be taken to reduce the identified risk(s).", - "$ref": "#/definitions/string" - }, - "_mitigation": { - "description": "Extensions for mitigation", - "$ref": "#/definitions/Element" - }, - "note": { - "description": "Additional comments about the risk assessment.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "RiskAssessment_Prediction": { - "description": "An assessment of the likely outcome(s) for a patient or other subject as well as the likelihood of each outcome.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "outcome": { - "description": "One of the potential outcomes for the patient (e.g. remission, death, a particular condition).", - "$ref": "#/definitions/CodeableConcept" - }, - "probabilityDecimal": { - "description": "Indicates how likely the outcome is (in the specified timeframe).", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_probabilityDecimal": { - "description": "Extensions for probabilityDecimal", - "$ref": "#/definitions/Element" - }, - "probabilityRange": { - "description": "Indicates how likely the outcome is (in the specified timeframe).", - "$ref": "#/definitions/Range" - }, - "qualitativeRisk": { - "description": "Indicates how likely the outcome is (in the specified timeframe), expressed as a qualitative value (e.g. low, medium, or high).", - "$ref": "#/definitions/CodeableConcept" - }, - "relativeRisk": { - "description": "Indicates the risk for this particular subject (with their specific characteristics) divided by the risk of the population in general. (Numbers greater than 1 \u003d higher risk than the population, numbers less than 1 \u003d lower risk.).", - "$ref": "#/definitions/decimal" - }, - "_relativeRisk": { - "description": "Extensions for relativeRisk", - "$ref": "#/definitions/Element" - }, - "whenPeriod": { - "description": "Indicates the period of time or age range of the subject to which the specified probability applies.", - "$ref": "#/definitions/Period" - }, - "whenRange": { - "description": "Indicates the period of time or age range of the subject to which the specified probability applies.", - "$ref": "#/definitions/Range" - }, - "rationale": { - "description": "Additional information explaining the basis for the prediction.", - "$ref": "#/definitions/string" - }, - "_rationale": { - "description": "Extensions for rationale", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "RiskEvidenceSynthesis": { - "description": "The RiskEvidenceSynthesis resource describes the likelihood of an outcome in a population plus exposure state where the risk estimate is derived from a combination of research studies.", - "properties": { - "resourceType": { - "description": "This is a RiskEvidenceSynthesis resource", - "const": "RiskEvidenceSynthesis" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this risk evidence synthesis when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this risk evidence synthesis is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the risk evidence synthesis is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this risk evidence synthesis when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the risk evidence synthesis when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the risk evidence synthesis author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the risk evidence synthesis. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the risk evidence synthesis.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this risk evidence synthesis. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the risk evidence synthesis was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the risk evidence synthesis changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the risk evidence synthesis.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the risk evidence synthesis from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "note": { - "description": "A human-readable string to clarify or explain concepts about the resource.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate risk evidence synthesis instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the risk evidence synthesis is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "copyright": { - "description": "A copyright statement relating to the risk evidence synthesis and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the risk evidence synthesis.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "approvalDate": { - "description": "The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usage.", - "$ref": "#/definitions/date" - }, - "_approvalDate": { - "description": "Extensions for approvalDate", - "$ref": "#/definitions/Element" - }, - "lastReviewDate": { - "description": "The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval date.", - "$ref": "#/definitions/date" - }, - "_lastReviewDate": { - "description": "Extensions for lastReviewDate", - "$ref": "#/definitions/Element" - }, - "effectivePeriod": { - "description": "The period during which the risk evidence synthesis content was or is planned to be in active use.", - "$ref": "#/definitions/Period" - }, - "topic": { - "description": "Descriptive topics related to the content of the RiskEvidenceSynthesis. Topics provide a high-level categorization grouping types of EffectEvidenceSynthesiss that can be useful for filtering and searching.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "author": { - "description": "An individiual or organization primarily involved in the creation and maintenance of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "editor": { - "description": "An individual or organization primarily responsible for internal coherence of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "reviewer": { - "description": "An individual or organization primarily responsible for review of some aspect of the content.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "endorser": { - "description": "An individual or organization responsible for officially endorsing the content for use in some setting.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "relatedArtifact": { - "description": "Related artifacts such as additional documentation, justification, or bibliographic references.", - "items": { - "$ref": "#/definitions/RelatedArtifact" - }, - "type": "array" - }, - "synthesisType": { - "description": "Type of synthesis eg meta-analysis.", - "$ref": "#/definitions/CodeableConcept" - }, - "studyType": { - "description": "Type of study eg randomized trial.", - "$ref": "#/definitions/CodeableConcept" - }, - "population": { - "description": "A reference to a EvidenceVariable resource that defines the population for the research.", - "$ref": "#/definitions/Reference" - }, - "exposure": { - "description": "A reference to a EvidenceVariable resource that defines the exposure for the research.", - "$ref": "#/definitions/Reference" - }, - "outcome": { - "description": "A reference to a EvidenceVariable resomece that defines the outcome for the research.", - "$ref": "#/definitions/Reference" - }, - "sampleSize": { - "description": "A description of the size of the sample involved in the synthesis.", - "$ref": "#/definitions/RiskEvidenceSynthesis_SampleSize" - }, - "riskEstimate": { - "description": "The estimated risk of the outcome.", - "$ref": "#/definitions/RiskEvidenceSynthesis_RiskEstimate" - }, - "certainty": { - "description": "A description of the certainty of the risk estimate.", - "items": { - "$ref": "#/definitions/RiskEvidenceSynthesis_Certainty" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "outcome", - "resourceType", - "population" - ] - }, - "RiskEvidenceSynthesis_SampleSize": { - "description": "The RiskEvidenceSynthesis resource describes the likelihood of an outcome in a population plus exposure state where the risk estimate is derived from a combination of research studies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "Human-readable summary of sample size.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "numberOfStudies": { - "description": "Number of studies included in this evidence synthesis.", - "$ref": "#/definitions/integer" - }, - "_numberOfStudies": { - "description": "Extensions for numberOfStudies", - "$ref": "#/definitions/Element" - }, - "numberOfParticipants": { - "description": "Number of participants included in this evidence synthesis.", - "$ref": "#/definitions/integer" - }, - "_numberOfParticipants": { - "description": "Extensions for numberOfParticipants", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "RiskEvidenceSynthesis_RiskEstimate": { - "description": "The RiskEvidenceSynthesis resource describes the likelihood of an outcome in a population plus exposure state where the risk estimate is derived from a combination of research studies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "Human-readable summary of risk estimate.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Examples include proportion and mean.", - "$ref": "#/definitions/CodeableConcept" - }, - "value": { - "description": "The point estimate of the risk estimate.", - "$ref": "#/definitions/decimal" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "unitOfMeasure": { - "description": "Specifies the UCUM unit for the outcome.", - "$ref": "#/definitions/CodeableConcept" - }, - "denominatorCount": { - "description": "The sample size for the group that was measured for this risk estimate.", - "$ref": "#/definitions/integer" - }, - "_denominatorCount": { - "description": "Extensions for denominatorCount", - "$ref": "#/definitions/Element" - }, - "numeratorCount": { - "description": "The number of group members with the outcome of interest.", - "$ref": "#/definitions/integer" - }, - "_numeratorCount": { - "description": "Extensions for numeratorCount", - "$ref": "#/definitions/Element" - }, - "precisionEstimate": { - "description": "A description of the precision of the estimate for the effect.", - "items": { - "$ref": "#/definitions/RiskEvidenceSynthesis_PrecisionEstimate" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "RiskEvidenceSynthesis_PrecisionEstimate": { - "description": "The RiskEvidenceSynthesis resource describes the likelihood of an outcome in a population plus exposure state where the risk estimate is derived from a combination of research studies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Examples include confidence interval and interquartile range.", - "$ref": "#/definitions/CodeableConcept" - }, - "level": { - "description": "Use 95 for a 95% confidence interval.", - "$ref": "#/definitions/decimal" - }, - "_level": { - "description": "Extensions for level", - "$ref": "#/definitions/Element" - }, - "from": { - "description": "Lower bound of confidence interval.", - "$ref": "#/definitions/decimal" - }, - "_from": { - "description": "Extensions for from", - "$ref": "#/definitions/Element" - }, - "to": { - "description": "Upper bound of confidence interval.", - "$ref": "#/definitions/decimal" - }, - "_to": { - "description": "Extensions for to", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "RiskEvidenceSynthesis_Certainty": { - "description": "The RiskEvidenceSynthesis resource describes the likelihood of an outcome in a population plus exposure state where the risk estimate is derived from a combination of research studies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "rating": { - "description": "A rating of the certainty of the effect estimate.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "note": { - "description": "A human-readable string to clarify or explain concepts about the resource.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "certaintySubcomponent": { - "description": "A description of a component of the overall certainty.", - "items": { - "$ref": "#/definitions/RiskEvidenceSynthesis_CertaintySubcomponent" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "RiskEvidenceSynthesis_CertaintySubcomponent": { - "description": "The RiskEvidenceSynthesis resource describes the likelihood of an outcome in a population plus exposure state where the risk estimate is derived from a combination of research studies.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Type of subcomponent of certainty rating.", - "$ref": "#/definitions/CodeableConcept" - }, - "rating": { - "description": "A rating of a subcomponent of rating certainty.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "note": { - "description": "A human-readable string to clarify or explain concepts about the resource.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Schedule": { - "description": "A container for slots of time that may be available for booking appointments.", - "properties": { - "resourceType": { - "description": "This is a Schedule resource", - "const": "Schedule" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "External Ids for this item.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "active": { - "description": "Whether this schedule record is in active use or should not be used (such as was entered in error).", - "$ref": "#/definitions/boolean" - }, - "_active": { - "description": "Extensions for active", - "$ref": "#/definitions/Element" - }, - "serviceCategory": { - "description": "A broad categorization of the service that is to be performed during this appointment.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "serviceType": { - "description": "The specific service that is to be performed during this appointment.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "specialty": { - "description": "The specialty of a practitioner that would be required to perform the service requested in this appointment.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "actor": { - "description": "Slots that reference this schedule resource provide the availability details to these referenced resource(s).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "planningHorizon": { - "description": "The period of time that the slots that reference this Schedule resource cover (even if none exist). These cover the amount of time that an organization\u0027s planning horizon; the interval for which they are currently accepting appointments. This does not define a \"template\" for planning outside these dates.", - "$ref": "#/definitions/Period" - }, - "comment": { - "description": "Comments on the availability to describe any extended information. Such as custom constraints on the slots that may be associated.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "actor", - "resourceType" - ] - }, - "SearchParameter": { - "description": "A search parameter that defines a named search item that can be used to search/filter on a resource.", - "properties": { - "resourceType": { - "description": "This is a SearchParameter resource", - "const": "SearchParameter" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this search parameter when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this search parameter is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the search parameter is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The identifier that is used to identify this version of the search parameter when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the search parameter author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the search parameter. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "derivedFrom": { - "description": "Where this search parameter is originally defined. If a derivedFrom is provided, then the details in the search parameter must be consistent with the definition from which it is defined. i.e. the parameter should have the same meaning, and (usually) the functionality should be a proper subset of the underlying search parameter.", - "$ref": "#/definitions/canonical" - }, - "status": { - "description": "The status of this search parameter. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this search parameter is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the search parameter was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the search parameter changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the search parameter.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "And how it used.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate search parameter instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the search parameter is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this search parameter is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "The code used in the URL or the parameter name in a parameters resource for this search parameter.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "base": { - "description": "The base resource type(s) that this search parameter can be used against.", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_base": { - "description": "Extensions for base", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "type": { - "description": "The type of value that a search parameter may contain, and how the content is interpreted.", - "enum": [ - "number", - "date", - "string", - "token", - "reference", - "composite", - "quantity", - "uri", - "special" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "A FHIRPath expression that returns a set of elements for the search parameter.", - "$ref": "#/definitions/string" - }, - "_expression": { - "description": "Extensions for expression", - "$ref": "#/definitions/Element" - }, - "xpath": { - "description": "An XPath expression that returns a set of elements for the search parameter.", - "$ref": "#/definitions/string" - }, - "_xpath": { - "description": "Extensions for xpath", - "$ref": "#/definitions/Element" - }, - "xpathUsage": { - "description": "How the search parameter relates to the set of elements returned by evaluating the xpath query.", - "enum": [ - "normal", - "phonetic", - "nearby", - "distance", - "other" - ] - }, - "_xpathUsage": { - "description": "Extensions for xpathUsage", - "$ref": "#/definitions/Element" - }, - "target": { - "description": "Types of resource (if a resource is referenced).", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_target": { - "description": "Extensions for target", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "multipleOr": { - "description": "Whether multiple values are allowed for each time the parameter exists. Values are separated by commas, and the parameter matches if any of the values match.", - "$ref": "#/definitions/boolean" - }, - "_multipleOr": { - "description": "Extensions for multipleOr", - "$ref": "#/definitions/Element" - }, - "multipleAnd": { - "description": "Whether multiple parameters are allowed - e.g. more than one parameter with the same name. The search matches if all the parameters match.", - "$ref": "#/definitions/boolean" - }, - "_multipleAnd": { - "description": "Extensions for multipleAnd", - "$ref": "#/definitions/Element" - }, - "comparator": { - "description": "Comparators supported for the search parameter.", - "items": { - "enum": [ - "eq", - "ne", - "gt", - "lt", - "ge", - "le", - "sa", - "eb", - "ap" - ] - }, - "type": "array" - }, - "_comparator": { - "description": "Extensions for comparator", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "modifier": { - "description": "A modifier supported for the search parameter.", - "items": { - "enum": [ - "missing", - "exact", - "contains", - "not", - "text", - "in", - "not-in", - "below", - "above", - "type", - "identifier", - "ofType" - ] - }, - "type": "array" - }, - "_modifier": { - "description": "Extensions for modifier", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "chain": { - "description": "Contains the names of any search parameters which may be chained to the containing search parameter. Chained parameters may be added to search parameters of type reference and specify that resources will only be returned if they contain a reference to a resource which matches the chained parameter value. Values for this field should be drawn from SearchParameter.code for a parameter on the target resource type.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_chain": { - "description": "Extensions for chain", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "component": { - "description": "Used to define the parts of a composite search parameter.", - "items": { - "$ref": "#/definitions/SearchParameter_Component" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "SearchParameter_Component": { - "description": "A search parameter that defines a named search item that can be used to search/filter on a resource.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "definition": { - "description": "The definition of the search parameter that describes this part.", - "$ref": "#/definitions/canonical" - }, - "expression": { - "description": "A sub-expression that defines how to extract values for this component from the output of the main SearchParameter.expression.", - "$ref": "#/definitions/string" - }, - "_expression": { - "description": "Extensions for expression", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "definition" - ] - }, - "ServiceRequest": { - "description": "A record of a request for service such as diagnostic investigations, treatments, or operations to be performed.", - "properties": { - "resourceType": { - "description": "This is a ServiceRequest resource", - "const": "ServiceRequest" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifiers assigned to this order instance by the orderer and/or the receiver and/or order fulfiller.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "instantiatesCanonical": { - "description": "The URL pointing to a FHIR-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this ServiceRequest.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "instantiatesUri": { - "description": "The URL pointing to an externally maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this ServiceRequest.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "basedOn": { - "description": "Plan/proposal/order fulfilled by this request.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "replaces": { - "description": "The request takes the place of the referenced completed or terminated request(s).", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "requisition": { - "description": "A shared identifier common to all service requests that were authorized more or less simultaneously by a single author, representing the composite or group identifier.", - "$ref": "#/definitions/Identifier" - }, - "status": { - "description": "The status of the order.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "intent": { - "description": "Whether the request is a proposal, plan, an original order or a reflex order.", - "$ref": "#/definitions/code" - }, - "_intent": { - "description": "Extensions for intent", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "A code that classifies the service for searching, sorting and display purposes (e.g. \"Surgical Procedure\").", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "priority": { - "description": "Indicates how quickly the ServiceRequest should be addressed with respect to other requests.", - "$ref": "#/definitions/code" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "doNotPerform": { - "description": "Set this to true if the record is saying that the service/procedure should NOT be performed.", - "$ref": "#/definitions/boolean" - }, - "_doNotPerform": { - "description": "Extensions for doNotPerform", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A code that identifies a particular service (i.e., procedure, diagnostic investigation, or panel of investigations) that have been requested.", - "$ref": "#/definitions/CodeableConcept" - }, - "orderDetail": { - "description": "Additional details and instructions about the how the services are to be delivered. For example, and order for a urinary catheter may have an order detail for an external or indwelling catheter, or an order for a bandage may require additional instructions specifying how the bandage should be applied.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "quantityQuantity": { - "description": "An amount of service being requested which can be a quantity ( for example $1,500 home modification), a ratio ( for example, 20 half day visits per month), or a range (2.0 to 1.8 Gy per fraction).", - "$ref": "#/definitions/Quantity" - }, - "quantityRatio": { - "description": "An amount of service being requested which can be a quantity ( for example $1,500 home modification), a ratio ( for example, 20 half day visits per month), or a range (2.0 to 1.8 Gy per fraction).", - "$ref": "#/definitions/Ratio" - }, - "quantityRange": { - "description": "An amount of service being requested which can be a quantity ( for example $1,500 home modification), a ratio ( for example, 20 half day visits per month), or a range (2.0 to 1.8 Gy per fraction).", - "$ref": "#/definitions/Range" - }, - "subject": { - "description": "On whom or what the service is to be performed. This is usually a human patient, but can also be requested on animals, groups of humans or animals, devices such as dialysis machines, or even locations (typically for environmental scans).", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "An encounter that provides additional information about the healthcare context in which this request is made.", - "$ref": "#/definitions/Reference" - }, - "occurrenceDateTime": { - "description": "The date/time at which the requested service should occur.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_occurrenceDateTime": { - "description": "Extensions for occurrenceDateTime", - "$ref": "#/definitions/Element" - }, - "occurrencePeriod": { - "description": "The date/time at which the requested service should occur.", - "$ref": "#/definitions/Period" - }, - "occurrenceTiming": { - "description": "The date/time at which the requested service should occur.", - "$ref": "#/definitions/Timing" - }, - "asNeededBoolean": { - "description": "If a CodeableConcept is present, it indicates the pre-condition for performing the service. For example \"pain\", \"on flare-up\", etc.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_asNeededBoolean": { - "description": "Extensions for asNeededBoolean", - "$ref": "#/definitions/Element" - }, - "asNeededCodeableConcept": { - "description": "If a CodeableConcept is present, it indicates the pre-condition for performing the service. For example \"pain\", \"on flare-up\", etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "authoredOn": { - "description": "When the request transitioned to being actionable.", - "$ref": "#/definitions/dateTime" - }, - "_authoredOn": { - "description": "Extensions for authoredOn", - "$ref": "#/definitions/Element" - }, - "requester": { - "description": "The individual who initiated the request and has responsibility for its activation.", - "$ref": "#/definitions/Reference" - }, - "performerType": { - "description": "Desired type of performer for doing the requested service.", - "$ref": "#/definitions/CodeableConcept" - }, - "performer": { - "description": "The desired performer for doing the requested service. For example, the surgeon, dermatopathologist, endoscopist, etc.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "locationCode": { - "description": "The preferred location(s) where the procedure should actually happen in coded or free text form. E.g. at home or nursing day care center.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "locationReference": { - "description": "A reference to the the preferred location(s) where the procedure should actually happen. E.g. at home or nursing day care center.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "reasonCode": { - "description": "An explanation or justification for why this service is being requested in coded or textual form. This is often for billing purposes. May relate to the resources referred to in `supportingInfo`.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "Indicates another resource that provides a justification for why this service is being requested. May relate to the resources referred to in `supportingInfo`.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "insurance": { - "description": "Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be needed for delivering the requested service.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "supportingInfo": { - "description": "Additional clinical information about the patient or specimen that may influence the services or their interpretations. This information includes diagnosis, clinical findings and other observations. In laboratory ordering these are typically referred to as \"ask at order entry questions (AOEs)\". This includes observations explicitly requested by the producer (filler) to provide context or supporting information needed to complete the order. For example, reporting the amount of inspired oxygen for blood gas measurements.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "specimen": { - "description": "One or more specimens that the laboratory procedure will use.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "bodySite": { - "description": "Anatomic location where the procedure should be performed. This is the target site.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "note": { - "description": "Any other notes and comments made about the service request. For example, internal billing notes.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "patientInstruction": { - "description": "Instructions in terms that are understood by the patient or consumer.", - "$ref": "#/definitions/string" - }, - "_patientInstruction": { - "description": "Extensions for patientInstruction", - "$ref": "#/definitions/Element" - }, - "relevantHistory": { - "description": "Key events in the history of the request.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "subject", - "resourceType" - ] - }, - "Slot": { - "description": "A slot of time on a schedule that may be available for booking appointments.", - "properties": { - "resourceType": { - "description": "This is a Slot resource", - "const": "Slot" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "External Ids for this item.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "serviceCategory": { - "description": "A broad categorization of the service that is to be performed during this appointment.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "serviceType": { - "description": "The type of appointments that can be booked into this slot (ideally this would be an identifiable service - which is at a location, rather than the location itself). If provided then this overrides the value provided on the availability resource.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "specialty": { - "description": "The specialty of a practitioner that would be required to perform the service requested in this appointment.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "appointmentType": { - "description": "The style of appointment or patient that may be booked in the slot (not service type).", - "$ref": "#/definitions/CodeableConcept" - }, - "schedule": { - "description": "The schedule resource that this slot defines an interval of status information.", - "$ref": "#/definitions/Reference" - }, - "status": { - "description": "busy | free | busy-unavailable | busy-tentative | entered-in-error.", - "enum": [ - "busy", - "free", - "busy-unavailable", - "busy-tentative", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "start": { - "description": "Date/Time that the slot is to begin.", - "$ref": "#/definitions/instant" - }, - "_start": { - "description": "Extensions for start", - "$ref": "#/definitions/Element" - }, - "end": { - "description": "Date/Time that the slot is to conclude.", - "$ref": "#/definitions/instant" - }, - "_end": { - "description": "Extensions for end", - "$ref": "#/definitions/Element" - }, - "overbooked": { - "description": "This slot has already been overbooked, appointments are unlikely to be accepted for this time.", - "$ref": "#/definitions/boolean" - }, - "_overbooked": { - "description": "Extensions for overbooked", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "Comments on the slot to describe any extended information. Such as custom constraints on the slot.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "schedule", - "resourceType" - ] - }, - "Specimen": { - "description": "A sample to be used for analysis.", - "properties": { - "resourceType": { - "description": "This is a Specimen resource", - "const": "Specimen" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Id for specimen.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "accessionIdentifier": { - "description": "The identifier assigned by the lab when accessioning specimen(s). This is not necessarily the same as the specimen identifier, depending on local lab procedures.", - "$ref": "#/definitions/Identifier" - }, - "status": { - "description": "The availability of the specimen.", - "enum": [ - "available", - "unavailable", - "unsatisfactory", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The kind of material that forms the specimen.", - "$ref": "#/definitions/CodeableConcept" - }, - "subject": { - "description": "Where the specimen came from. This may be from patient(s), from a location (e.g., the source of an environmental sample), or a sampling of a substance or a device.", - "$ref": "#/definitions/Reference" - }, - "receivedTime": { - "description": "Time when specimen was received for processing or testing.", - "$ref": "#/definitions/dateTime" - }, - "_receivedTime": { - "description": "Extensions for receivedTime", - "$ref": "#/definitions/Element" - }, - "parent": { - "description": "Reference to the parent (source) specimen which is used when the specimen was either derived from or a component of another specimen.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "request": { - "description": "Details concerning a service request that required a specimen to be collected.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "collection": { - "description": "Details concerning the specimen collection.", - "$ref": "#/definitions/Specimen_Collection" - }, - "processing": { - "description": "Details concerning processing and processing steps for the specimen.", - "items": { - "$ref": "#/definitions/Specimen_Processing" - }, - "type": "array" - }, - "container": { - "description": "The container holding the specimen. The recursive nature of containers; i.e. blood in tube in tray in rack is not addressed here.", - "items": { - "$ref": "#/definitions/Specimen_Container" - }, - "type": "array" - }, - "condition": { - "description": "A mode or state of being that describes the nature of the specimen.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "note": { - "description": "To communicate any details or issues about the specimen or during the specimen collection. (for example: broken vial, sent with patient, frozen).", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Specimen_Collection": { - "description": "A sample to be used for analysis.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "collector": { - "description": "Person who collected the specimen.", - "$ref": "#/definitions/Reference" - }, - "collectedDateTime": { - "description": "Time when specimen was collected from subject - the physiologically relevant time.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_collectedDateTime": { - "description": "Extensions for collectedDateTime", - "$ref": "#/definitions/Element" - }, - "collectedPeriod": { - "description": "Time when specimen was collected from subject - the physiologically relevant time.", - "$ref": "#/definitions/Period" - }, - "duration": { - "description": "The span of time over which the collection of a specimen occurred.", - "$ref": "#/definitions/Duration" - }, - "quantity": { - "description": "The quantity of specimen collected; for instance the volume of a blood sample, or the physical measurement of an anatomic pathology sample.", - "$ref": "#/definitions/Quantity" - }, - "method": { - "description": "A coded value specifying the technique that is used to perform the procedure.", - "$ref": "#/definitions/CodeableConcept" - }, - "bodySite": { - "description": "Anatomical location from which the specimen was collected (if subject is a patient). This is the target site. This element is not used for environmental specimens.", - "$ref": "#/definitions/CodeableConcept" - }, - "fastingStatusCodeableConcept": { - "description": "Abstinence or reduction from some or all food, drink, or both, for a period of time prior to sample collection.", - "$ref": "#/definitions/CodeableConcept" - }, - "fastingStatusDuration": { - "description": "Abstinence or reduction from some or all food, drink, or both, for a period of time prior to sample collection.", - "$ref": "#/definitions/Duration" - } - }, - "additionalProperties": false - }, - "Specimen_Processing": { - "description": "A sample to be used for analysis.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "Textual description of procedure.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "procedure": { - "description": "A coded value specifying the procedure used to process the specimen.", - "$ref": "#/definitions/CodeableConcept" - }, - "additive": { - "description": "Material used in the processing step.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "timeDateTime": { - "description": "A record of the time or period when the specimen processing occurred. For example the time of sample fixation or the period of time the sample was in formalin.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_timeDateTime": { - "description": "Extensions for timeDateTime", - "$ref": "#/definitions/Element" - }, - "timePeriod": { - "description": "A record of the time or period when the specimen processing occurred. For example the time of sample fixation or the period of time the sample was in formalin.", - "$ref": "#/definitions/Period" - } - }, - "additionalProperties": false - }, - "Specimen_Container": { - "description": "A sample to be used for analysis.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Id for container. There may be multiple; a manufacturer\u0027s bar code, lab assigned identifier, etc. The container ID may differ from the specimen id in some circumstances.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "description": { - "description": "Textual description of the container.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The type of container associated with the specimen (e.g. slide, aliquot, etc.).", - "$ref": "#/definitions/CodeableConcept" - }, - "capacity": { - "description": "The capacity (volume or other measure) the container may contain.", - "$ref": "#/definitions/Quantity" - }, - "specimenQuantity": { - "description": "The quantity of specimen in the container; may be volume, dimensions, or other appropriate measurements, depending on the specimen type.", - "$ref": "#/definitions/Quantity" - }, - "additiveCodeableConcept": { - "description": "Introduced substance to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.", - "$ref": "#/definitions/CodeableConcept" - }, - "additiveReference": { - "description": "Introduced substance to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "SpecimenDefinition": { - "description": "A kind of specimen with associated set of requirements.", - "properties": { - "resourceType": { - "description": "This is a SpecimenDefinition resource", - "const": "SpecimenDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A business identifier associated with the kind of specimen.", - "$ref": "#/definitions/Identifier" - }, - "typeCollected": { - "description": "The kind of material to be collected.", - "$ref": "#/definitions/CodeableConcept" - }, - "patientPreparation": { - "description": "Preparation of the patient for specimen collection.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "timeAspect": { - "description": "Time aspect of specimen collection (duration or offset).", - "$ref": "#/definitions/string" - }, - "_timeAspect": { - "description": "Extensions for timeAspect", - "$ref": "#/definitions/Element" - }, - "collection": { - "description": "The action to be performed for collecting the specimen.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "typeTested": { - "description": "Specimen conditioned in a container as expected by the testing laboratory.", - "items": { - "$ref": "#/definitions/SpecimenDefinition_TypeTested" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "SpecimenDefinition_TypeTested": { - "description": "A kind of specimen with associated set of requirements.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "isDerived": { - "description": "Primary of secondary specimen.", - "$ref": "#/definitions/boolean" - }, - "_isDerived": { - "description": "Extensions for isDerived", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "The kind of specimen conditioned for testing expected by lab.", - "$ref": "#/definitions/CodeableConcept" - }, - "preference": { - "description": "The preference for this type of conditioned specimen.", - "enum": [ - "preferred", - "alternate" - ] - }, - "_preference": { - "description": "Extensions for preference", - "$ref": "#/definitions/Element" - }, - "container": { - "description": "The specimen\u0027s container.", - "$ref": "#/definitions/SpecimenDefinition_Container" - }, - "requirement": { - "description": "Requirements for delivery and special handling of this kind of conditioned specimen.", - "$ref": "#/definitions/string" - }, - "_requirement": { - "description": "Extensions for requirement", - "$ref": "#/definitions/Element" - }, - "retentionTime": { - "description": "The usual time that a specimen of this kind is retained after the ordered tests are completed, for the purpose of additional testing.", - "$ref": "#/definitions/Duration" - }, - "rejectionCriterion": { - "description": "Criterion for rejection of the specimen in its container by the laboratory.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "handling": { - "description": "Set of instructions for preservation/transport of the specimen at a defined temperature interval, prior the testing process.", - "items": { - "$ref": "#/definitions/SpecimenDefinition_Handling" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SpecimenDefinition_Container": { - "description": "A kind of specimen with associated set of requirements.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "material": { - "description": "The type of material of the container.", - "$ref": "#/definitions/CodeableConcept" - }, - "type": { - "description": "The type of container used to contain this kind of specimen.", - "$ref": "#/definitions/CodeableConcept" - }, - "cap": { - "description": "Color of container cap.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "The textual description of the kind of container.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "capacity": { - "description": "The capacity (volume or other measure) of this kind of container.", - "$ref": "#/definitions/Quantity" - }, - "minimumVolumeQuantity": { - "description": "The minimum volume to be conditioned in the container.", - "$ref": "#/definitions/Quantity" - }, - "minimumVolumeString": { - "description": "The minimum volume to be conditioned in the container.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_minimumVolumeString": { - "description": "Extensions for minimumVolumeString", - "$ref": "#/definitions/Element" - }, - "additive": { - "description": "Substance introduced in the kind of container to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.", - "items": { - "$ref": "#/definitions/SpecimenDefinition_Additive" - }, - "type": "array" - }, - "preparation": { - "description": "Special processing that should be applied to the container for this kind of specimen.", - "$ref": "#/definitions/string" - }, - "_preparation": { - "description": "Extensions for preparation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "SpecimenDefinition_Additive": { - "description": "A kind of specimen with associated set of requirements.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "additiveCodeableConcept": { - "description": "Substance introduced in the kind of container to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.", - "$ref": "#/definitions/CodeableConcept" - }, - "additiveReference": { - "description": "Substance introduced in the kind of container to preserve, maintain or enhance the specimen. Examples: Formalin, Citrate, EDTA.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "SpecimenDefinition_Handling": { - "description": "A kind of specimen with associated set of requirements.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "temperatureQualifier": { - "description": "It qualifies the interval of temperature, which characterizes an occurrence of handling. Conditions that are not related to temperature may be handled in the instruction element.", - "$ref": "#/definitions/CodeableConcept" - }, - "temperatureRange": { - "description": "The temperature interval for this set of handling instructions.", - "$ref": "#/definitions/Range" - }, - "maxDuration": { - "description": "The maximum time interval of preservation of the specimen with these conditions.", - "$ref": "#/definitions/Duration" - }, - "instruction": { - "description": "Additional textual instructions for the preservation or transport of the specimen. For instance, \u0027Protect from light exposure\u0027.", - "$ref": "#/definitions/string" - }, - "_instruction": { - "description": "Extensions for instruction", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "StructureDefinition": { - "description": "A definition of a FHIR structure. This resource is used to describe the underlying resources, data types defined in FHIR, and also for describing extensions and constraints on resources and data types.", - "properties": { - "resourceType": { - "description": "This is a StructureDefinition resource", - "const": "StructureDefinition" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this structure definition when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this structure definition is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure definition is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this structure definition when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the structure definition when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the structure definition author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the structure definition. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the structure definition.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this structure definition. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this structure definition is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the structure definition was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure definition changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the structure definition.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the structure definition from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate structure definition instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the structure definition is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this structure definition is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the structure definition and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the structure definition.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "keyword": { - "description": "A set of key words or terms from external terminologies that may be used to assist with indexing and searching of templates nby describing the use of this structure definition, or the content it describes.", - "items": { - "$ref": "#/definitions/Coding" - }, - "type": "array" - }, - "fhirVersion": { - "description": "The version of the FHIR specification on which this StructureDefinition is based - this is the formal version of the specification, without the revision number, e.g. [publication].[major].[minor], which is 4.0.0. for this version.", - "enum": [ - "0.01", - "0.05", - "0.06", - "0.11", - "0.0.80", - "0.0.81", - "0.0.82", - "0.4.0", - "0.5.0", - "1.0.0", - "1.0.1", - "1.0.2", - "1.1.0", - "1.4.0", - "1.6.0", - "1.8.0", - "3.0.0", - "3.0.1", - "3.3.0", - "3.5.0", - "4.0.0" - ] - }, - "_fhirVersion": { - "description": "Extensions for fhirVersion", - "$ref": "#/definitions/Element" - }, - "mapping": { - "description": "An external specification that the content is mapped to.", - "items": { - "$ref": "#/definitions/StructureDefinition_Mapping" - }, - "type": "array" - }, - "kind": { - "description": "Defines the kind of structure that this definition is describing.", - "enum": [ - "primitive-type", - "complex-type", - "resource", - "logical" - ] - }, - "_kind": { - "description": "Extensions for kind", - "$ref": "#/definitions/Element" - }, - "abstract": { - "description": "Whether structure this definition describes is abstract or not - that is, whether the structure is not intended to be instantiated. For Resources and Data types, abstract types will never be exchanged between systems.", - "$ref": "#/definitions/boolean" - }, - "_abstract": { - "description": "Extensions for abstract", - "$ref": "#/definitions/Element" - }, - "context": { - "description": "Identifies the types of resource or data type elements to which the extension can be applied.", - "items": { - "$ref": "#/definitions/StructureDefinition_Context" - }, - "type": "array" - }, - "contextInvariant": { - "description": "A set of rules as FHIRPath Invariants about when the extension can be used (e.g. co-occurrence variants for the extension). All the rules must be true.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_contextInvariant": { - "description": "Extensions for contextInvariant", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "type": { - "description": "The type this structure describes. If the derivation kind is \u0027specialization\u0027 then this is the master definition for a type, and there is always one of these (a data type, an extension, a resource, including abstract ones). Otherwise the structure definition is a constraint on the stated type (and in this case, the type cannot be an abstract type). References are URLs that are relative to http://hl7.org/fhir/StructureDefinition e.g. \"string\" is a reference to http://hl7.org/fhir/StructureDefinition/string. Absolute URLs are only allowed in logical models.", - "$ref": "#/definitions/uri" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "baseDefinition": { - "description": "An absolute URI that is the base structure from which this type is derived, either by specialization or constraint.", - "$ref": "#/definitions/canonical" - }, - "derivation": { - "description": "How the type relates to the baseDefinition.", - "enum": [ - "specialization", - "constraint" - ] - }, - "_derivation": { - "description": "Extensions for derivation", - "$ref": "#/definitions/Element" - }, - "snapshot": { - "description": "A snapshot view is expressed in a standalone form that can be used and interpreted without considering the base StructureDefinition.", - "$ref": "#/definitions/StructureDefinition_Snapshot" - }, - "differential": { - "description": "A differential view is expressed relative to the base StructureDefinition - a statement of differences that it applies.", - "$ref": "#/definitions/StructureDefinition_Differential" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "StructureDefinition_Mapping": { - "description": "A definition of a FHIR structure. This resource is used to describe the underlying resources, data types defined in FHIR, and also for describing extensions and constraints on resources and data types.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identity": { - "description": "An Internal id that is used to identify this mapping set when specific mappings are made.", - "$ref": "#/definitions/id" - }, - "_identity": { - "description": "Extensions for identity", - "$ref": "#/definitions/Element" - }, - "uri": { - "description": "An absolute URI that identifies the specification that this mapping is expressed to.", - "$ref": "#/definitions/uri" - }, - "_uri": { - "description": "Extensions for uri", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A name for the specification that is being mapped to.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "Comments about this mapping, including version notes, issues, scope limitations, and other important notes for usage.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "StructureDefinition_Context": { - "description": "A definition of a FHIR structure. This resource is used to describe the underlying resources, data types defined in FHIR, and also for describing extensions and constraints on resources and data types.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Defines how to interpret the expression that defines what the context of the extension is.", - "enum": [ - "fhirpath", - "element", - "extension" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "An expression that defines where an extension can be used in resources.", - "$ref": "#/definitions/string" - }, - "_expression": { - "description": "Extensions for expression", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "StructureDefinition_Snapshot": { - "description": "A definition of a FHIR structure. This resource is used to describe the underlying resources, data types defined in FHIR, and also for describing extensions and constraints on resources and data types.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "element": { - "description": "Captures constraints on each element within the resource.", - "items": { - "$ref": "#/definitions/ElementDefinition" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "element" - ] - }, - "StructureDefinition_Differential": { - "description": "A definition of a FHIR structure. This resource is used to describe the underlying resources, data types defined in FHIR, and also for describing extensions and constraints on resources and data types.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "element": { - "description": "Captures constraints on each element within the resource.", - "items": { - "$ref": "#/definitions/ElementDefinition" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "element" - ] - }, - "StructureMap": { - "description": "A Map of relationships between 2 structures that can be used to transform data.", - "properties": { - "resourceType": { - "description": "This is a StructureMap resource", - "const": "StructureMap" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this structure map when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this structure map is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the structure map is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this structure map when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the structure map when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the structure map author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the structure map. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the structure map.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this structure map. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this structure map is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the structure map was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the structure map changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the structure map.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the structure map from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate structure map instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the structure map is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this structure map is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the structure map and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the structure map.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "structure": { - "description": "A structure definition used by this map. The structure definition may describe instances that are converted, or the instances that are produced.", - "items": { - "$ref": "#/definitions/StructureMap_Structure" - }, - "type": "array" - }, - "import": { - "description": "Other maps used by this map (canonical URLs).", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - }, - "group": { - "description": "Organizes the mapping into manageable chunks for human review/ease of maintenance.", - "items": { - "$ref": "#/definitions/StructureMap_Group" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType", - "group" - ] - }, - "StructureMap_Structure": { - "description": "A Map of relationships between 2 structures that can be used to transform data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "The canonical reference to the structure.", - "$ref": "#/definitions/canonical" - }, - "mode": { - "description": "How the referenced structure is used in this mapping.", - "enum": [ - "source", - "queried", - "target", - "produced" - ] - }, - "_mode": { - "description": "Extensions for mode", - "$ref": "#/definitions/Element" - }, - "alias": { - "description": "The name used for this type in the map.", - "$ref": "#/definitions/string" - }, - "_alias": { - "description": "Extensions for alias", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "Documentation that describes how the structure is used in the mapping.", - "$ref": "#/definitions/string" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "url" - ] - }, - "StructureMap_Group": { - "description": "A Map of relationships between 2 structures that can be used to transform data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "A unique name for the group for the convenience of human readers.", - "$ref": "#/definitions/id" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "extends": { - "description": "Another group that this group adds rules to.", - "$ref": "#/definitions/id" - }, - "_extends": { - "description": "Extensions for extends", - "$ref": "#/definitions/Element" - }, - "typeMode": { - "description": "If this is the default rule set to apply for the source type or this combination of types.", - "enum": [ - "none", - "types", - "type-and-types" - ] - }, - "_typeMode": { - "description": "Extensions for typeMode", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "Additional supporting documentation that explains the purpose of the group and the types of mappings within it.", - "$ref": "#/definitions/string" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - }, - "input": { - "description": "A name assigned to an instance of data. The instance must be provided when the mapping is invoked.", - "items": { - "$ref": "#/definitions/StructureMap_Input" - }, - "type": "array" - }, - "rule": { - "description": "Transform Rule from source to target.", - "items": { - "$ref": "#/definitions/StructureMap_Rule" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "input", - "rule" - ] - }, - "StructureMap_Input": { - "description": "A Map of relationships between 2 structures that can be used to transform data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Name for this instance of data.", - "$ref": "#/definitions/id" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Type for this instance of data.", - "$ref": "#/definitions/string" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "mode": { - "description": "Mode for this instance of data.", - "enum": [ - "source", - "target" - ] - }, - "_mode": { - "description": "Extensions for mode", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "Documentation for this instance of data.", - "$ref": "#/definitions/string" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "StructureMap_Rule": { - "description": "A Map of relationships between 2 structures that can be used to transform data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Name of the rule for internal references.", - "$ref": "#/definitions/id" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "source": { - "description": "Source inputs to the mapping.", - "items": { - "$ref": "#/definitions/StructureMap_Source" - }, - "type": "array" - }, - "target": { - "description": "Content to create because of this mapping rule.", - "items": { - "$ref": "#/definitions/StructureMap_Target" - }, - "type": "array" - }, - "rule": { - "description": "Rules contained in this rule.", - "items": { - "$ref": "#/definitions/StructureMap_Rule" - }, - "type": "array" - }, - "dependent": { - "description": "Which other rules to apply in the context of this rule.", - "items": { - "$ref": "#/definitions/StructureMap_Dependent" - }, - "type": "array" - }, - "documentation": { - "description": "Documentation for this instance of data.", - "$ref": "#/definitions/string" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false, - "required": [ - "source" - ] - }, - "StructureMap_Source": { - "description": "A Map of relationships between 2 structures that can be used to transform data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "context": { - "description": "Type or variable this rule applies to.", - "$ref": "#/definitions/id" - }, - "_context": { - "description": "Extensions for context", - "$ref": "#/definitions/Element" - }, - "min": { - "description": "Specified minimum cardinality for the element. This is optional; if present, it acts an implicit check on the input content.", - "$ref": "#/definitions/integer" - }, - "_min": { - "description": "Extensions for min", - "$ref": "#/definitions/Element" - }, - "max": { - "description": "Specified maximum cardinality for the element - a number or a \"*\". This is optional; if present, it acts an implicit check on the input content (* just serves as documentation; it\u0027s the default value).", - "$ref": "#/definitions/string" - }, - "_max": { - "description": "Extensions for max", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Specified type for the element. This works as a condition on the mapping - use for polymorphic elements.", - "$ref": "#/definitions/string" - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "defaultValueBase64Binary": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^(\\s*([0-9a-zA-Z\\+/\u003d]){4}\\s*)+$", - "type": "string" - }, - "_defaultValueBase64Binary": { - "description": "Extensions for defaultValueBase64Binary", - "$ref": "#/definitions/Element" - }, - "defaultValueBoolean": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_defaultValueBoolean": { - "description": "Extensions for defaultValueBoolean", - "$ref": "#/definitions/Element" - }, - "defaultValueCanonical": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^\\S*$", - "type": "string" - }, - "_defaultValueCanonical": { - "description": "Extensions for defaultValueCanonical", - "$ref": "#/definitions/Element" - }, - "defaultValueCode": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string" - }, - "_defaultValueCode": { - "description": "Extensions for defaultValueCode", - "$ref": "#/definitions/Element" - }, - "defaultValueDate": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_defaultValueDate": { - "description": "Extensions for defaultValueDate", - "$ref": "#/definitions/Element" - }, - "defaultValueDateTime": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_defaultValueDateTime": { - "description": "Extensions for defaultValueDateTime", - "$ref": "#/definitions/Element" - }, - "defaultValueDecimal": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_defaultValueDecimal": { - "description": "Extensions for defaultValueDecimal", - "$ref": "#/definitions/Element" - }, - "defaultValueId": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^[A-Za-z0-9\\-\\.]{1,64}$", - "type": "string" - }, - "_defaultValueId": { - "description": "Extensions for defaultValueId", - "$ref": "#/definitions/Element" - }, - "defaultValueInstant": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_defaultValueInstant": { - "description": "Extensions for defaultValueInstant", - "$ref": "#/definitions/Element" - }, - "defaultValueInteger": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_defaultValueInteger": { - "description": "Extensions for defaultValueInteger", - "$ref": "#/definitions/Element" - }, - "defaultValueMarkdown": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_defaultValueMarkdown": { - "description": "Extensions for defaultValueMarkdown", - "$ref": "#/definitions/Element" - }, - "defaultValueOid": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^urn:oid:[0-2](\\.(0|[1-9][0-9]*))+$", - "type": "string" - }, - "_defaultValueOid": { - "description": "Extensions for defaultValueOid", - "$ref": "#/definitions/Element" - }, - "defaultValuePositiveInt": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_defaultValuePositiveInt": { - "description": "Extensions for defaultValuePositiveInt", - "$ref": "#/definitions/Element" - }, - "defaultValueString": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_defaultValueString": { - "description": "Extensions for defaultValueString", - "$ref": "#/definitions/Element" - }, - "defaultValueTime": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_defaultValueTime": { - "description": "Extensions for defaultValueTime", - "$ref": "#/definitions/Element" - }, - "defaultValueUnsignedInt": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_defaultValueUnsignedInt": { - "description": "Extensions for defaultValueUnsignedInt", - "$ref": "#/definitions/Element" - }, - "defaultValueUri": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^\\S*$", - "type": "string" - }, - "_defaultValueUri": { - "description": "Extensions for defaultValueUri", - "$ref": "#/definitions/Element" - }, - "defaultValueUrl": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^\\S*$", - "type": "string" - }, - "_defaultValueUrl": { - "description": "Extensions for defaultValueUrl", - "$ref": "#/definitions/Element" - }, - "defaultValueUuid": { - "description": "A value to use if there is no existing value in the source object.", - "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", - "type": "string" - }, - "_defaultValueUuid": { - "description": "Extensions for defaultValueUuid", - "$ref": "#/definitions/Element" - }, - "defaultValueAddress": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Address" - }, - "defaultValueAge": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Age" - }, - "defaultValueAnnotation": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Annotation" - }, - "defaultValueAttachment": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Attachment" - }, - "defaultValueCodeableConcept": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/CodeableConcept" - }, - "defaultValueCoding": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Coding" - }, - "defaultValueContactPoint": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/ContactPoint" - }, - "defaultValueCount": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Count" - }, - "defaultValueDistance": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Distance" - }, - "defaultValueDuration": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Duration" - }, - "defaultValueHumanName": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/HumanName" - }, - "defaultValueIdentifier": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Identifier" - }, - "defaultValueMoney": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Money" - }, - "defaultValuePeriod": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Period" - }, - "defaultValueQuantity": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Quantity" - }, - "defaultValueRange": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Range" - }, - "defaultValueRatio": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Ratio" - }, - "defaultValueReference": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Reference" - }, - "defaultValueSampledData": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/SampledData" - }, - "defaultValueSignature": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Signature" - }, - "defaultValueTiming": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Timing" - }, - "defaultValueContactDetail": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/ContactDetail" - }, - "defaultValueContributor": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Contributor" - }, - "defaultValueDataRequirement": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/DataRequirement" - }, - "defaultValueExpression": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Expression" - }, - "defaultValueParameterDefinition": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/ParameterDefinition" - }, - "defaultValueRelatedArtifact": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/RelatedArtifact" - }, - "defaultValueTriggerDefinition": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/TriggerDefinition" - }, - "defaultValueUsageContext": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/UsageContext" - }, - "defaultValueDosage": { - "description": "A value to use if there is no existing value in the source object.", - "$ref": "#/definitions/Dosage" - }, - "element": { - "description": "Optional field for this source.", - "$ref": "#/definitions/string" - }, - "_element": { - "description": "Extensions for element", - "$ref": "#/definitions/Element" - }, - "listMode": { - "description": "How to handle the list mode for this element.", - "enum": [ - "first", - "not_first", - "last", - "not_last", - "only_one" - ] - }, - "_listMode": { - "description": "Extensions for listMode", - "$ref": "#/definitions/Element" - }, - "variable": { - "description": "Named context for field, if a field is specified.", - "$ref": "#/definitions/id" - }, - "_variable": { - "description": "Extensions for variable", - "$ref": "#/definitions/Element" - }, - "condition": { - "description": "FHIRPath expression - must be true or the rule does not apply.", - "$ref": "#/definitions/string" - }, - "_condition": { - "description": "Extensions for condition", - "$ref": "#/definitions/Element" - }, - "check": { - "description": "FHIRPath expression - must be true or the mapping engine throws an error instead of completing.", - "$ref": "#/definitions/string" - }, - "_check": { - "description": "Extensions for check", - "$ref": "#/definitions/Element" - }, - "logMessage": { - "description": "A FHIRPath expression which specifies a message to put in the transform log when content matching the source rule is found.", - "$ref": "#/definitions/string" - }, - "_logMessage": { - "description": "Extensions for logMessage", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "StructureMap_Target": { - "description": "A Map of relationships between 2 structures that can be used to transform data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "context": { - "description": "Type or variable this rule applies to.", - "$ref": "#/definitions/id" - }, - "_context": { - "description": "Extensions for context", - "$ref": "#/definitions/Element" - }, - "contextType": { - "description": "How to interpret the context.", - "enum": [ - "type", - "variable" - ] - }, - "_contextType": { - "description": "Extensions for contextType", - "$ref": "#/definitions/Element" - }, - "element": { - "description": "Field to create in the context.", - "$ref": "#/definitions/string" - }, - "_element": { - "description": "Extensions for element", - "$ref": "#/definitions/Element" - }, - "variable": { - "description": "Named context for field, if desired, and a field is specified.", - "$ref": "#/definitions/id" - }, - "_variable": { - "description": "Extensions for variable", - "$ref": "#/definitions/Element" - }, - "listMode": { - "description": "If field is a list, how to manage the list.", - "items": { - "enum": [ - "first", - "share", - "last", - "collate" - ] - }, - "type": "array" - }, - "_listMode": { - "description": "Extensions for listMode", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "listRuleId": { - "description": "Internal rule reference for shared list items.", - "$ref": "#/definitions/id" - }, - "_listRuleId": { - "description": "Extensions for listRuleId", - "$ref": "#/definitions/Element" - }, - "transform": { - "description": "How the data is copied / created.", - "enum": [ - "create", - "copy", - "truncate", - "escape", - "cast", - "append", - "translate", - "reference", - "dateOp", - "uuid", - "pointer", - "evaluate", - "cc", - "c", - "qty", - "id", - "cp" - ] - }, - "_transform": { - "description": "Extensions for transform", - "$ref": "#/definitions/Element" - }, - "parameter": { - "description": "Parameters to the transform.", - "items": { - "$ref": "#/definitions/StructureMap_Parameter" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "StructureMap_Parameter": { - "description": "A Map of relationships between 2 structures that can be used to transform data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "valueId": { - "description": "Parameter value - variable or literal.", - "pattern": "^[A-Za-z0-9\\-\\.]{1,64}$", - "type": "string" - }, - "_valueId": { - "description": "Extensions for valueId", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "Parameter value - variable or literal.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueBoolean": { - "description": "Parameter value - variable or literal.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "Parameter value - variable or literal.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueDecimal": { - "description": "Parameter value - variable or literal.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_valueDecimal": { - "description": "Extensions for valueDecimal", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "StructureMap_Dependent": { - "description": "A Map of relationships between 2 structures that can be used to transform data.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Name of a rule or group to apply.", - "$ref": "#/definitions/id" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "variable": { - "description": "Variable to pass to the rule or group.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_variable": { - "description": "Extensions for variable", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Subscription": { - "description": "The subscription resource is used to define a push-based subscription from a server to another system. Once a subscription is registered with the server, the server checks every resource that is created or updated, and if the resource matches the given criteria, it sends a message on the defined \"channel\" so that another system can take an appropriate action.", - "properties": { - "resourceType": { - "description": "This is a Subscription resource", - "const": "Subscription" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "status": { - "description": "The status of the subscription, which marks the server state for managing the subscription.", - "enum": [ - "requested", - "active", - "error", - "off" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details for a human to contact about the subscription. The primary use of this for system administrator troubleshooting.", - "items": { - "$ref": "#/definitions/ContactPoint" - }, - "type": "array" - }, - "end": { - "description": "The time for the server to turn the subscription off.", - "$ref": "#/definitions/instant" - }, - "_end": { - "description": "Extensions for end", - "$ref": "#/definitions/Element" - }, - "reason": { - "description": "A description of why this subscription is defined.", - "$ref": "#/definitions/string" - }, - "_reason": { - "description": "Extensions for reason", - "$ref": "#/definitions/Element" - }, - "criteria": { - "description": "The rules that the server should use to determine when to generate notifications for this subscription.", - "$ref": "#/definitions/string" - }, - "_criteria": { - "description": "Extensions for criteria", - "$ref": "#/definitions/Element" - }, - "error": { - "description": "A record of the last error that occurred when the server processed a notification.", - "$ref": "#/definitions/string" - }, - "_error": { - "description": "Extensions for error", - "$ref": "#/definitions/Element" - }, - "channel": { - "description": "Details where to send notifications when resources are received that meet the criteria.", - "$ref": "#/definitions/Subscription_Channel" - } - }, - "additionalProperties": false, - "required": [ - "channel", - "resourceType" - ] - }, - "Subscription_Channel": { - "description": "The subscription resource is used to define a push-based subscription from a server to another system. Once a subscription is registered with the server, the server checks every resource that is created or updated, and if the resource matches the given criteria, it sends a message on the defined \"channel\" so that another system can take an appropriate action.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of channel to send notifications on.", - "enum": [ - "rest-hook", - "websocket", - "email", - "sms", - "message" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "endpoint": { - "description": "The url that describes the actual end-point to send messages to.", - "$ref": "#/definitions/url" - }, - "_endpoint": { - "description": "Extensions for endpoint", - "$ref": "#/definitions/Element" - }, - "payload": { - "description": "The mime type to send the payload in - either application/fhir+xml, or application/fhir+json. If the payload is not present, then there is no payload in the notification, just a notification. The mime type \"text/plain\" may also be used for Email and SMS subscriptions.", - "$ref": "#/definitions/code" - }, - "_payload": { - "description": "Extensions for payload", - "$ref": "#/definitions/Element" - }, - "header": { - "description": "Additional headers / information to send as part of the notification.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_header": { - "description": "Extensions for header", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Substance": { - "description": "A homogeneous material with a definite composition.", - "properties": { - "resourceType": { - "description": "This is a Substance resource", - "const": "Substance" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Unique identifier for the substance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "A code to indicate if the substance is actively used.", - "enum": [ - "active", - "inactive", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "A code that classifies the general type of substance. This is used for searching, sorting and display purposes.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "code": { - "description": "A code (or set of codes) that identify this substance.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "A description of the substance - its appearance, handling requirements, and other usage notes.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "instance": { - "description": "Substance may be used to describe a kind of substance, or a specific package/container of the substance: an instance.", - "items": { - "$ref": "#/definitions/Substance_Instance" - }, - "type": "array" - }, - "ingredient": { - "description": "A substance can be composed of other substances.", - "items": { - "$ref": "#/definitions/Substance_Ingredient" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "code", - "resourceType" - ] - }, - "Substance_Instance": { - "description": "A homogeneous material with a definite composition.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier associated with the package/container (usually a label affixed directly).", - "$ref": "#/definitions/Identifier" - }, - "expiry": { - "description": "When the substance is no longer valid to use. For some substances, a single arbitrary date is used for expiry.", - "$ref": "#/definitions/dateTime" - }, - "_expiry": { - "description": "Extensions for expiry", - "$ref": "#/definitions/Element" - }, - "quantity": { - "description": "The amount of the substance.", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false - }, - "Substance_Ingredient": { - "description": "A homogeneous material with a definite composition.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "quantity": { - "description": "The amount of the ingredient in the substance - a concentration ratio.", - "$ref": "#/definitions/Ratio" - }, - "substanceCodeableConcept": { - "description": "Another substance that is a component of this substance.", - "$ref": "#/definitions/CodeableConcept" - }, - "substanceReference": { - "description": "Another substance that is a component of this substance.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "SubstanceNucleicAcid": { - "description": "Nucleic acids are defined by three distinct elements: the base, sugar and linkage. Individual substance/moiety IDs will be created for each of these elements. The nucleotide sequence will be always entered in the 5’-3’ direction.", - "properties": { - "resourceType": { - "description": "This is a SubstanceNucleicAcid resource", - "const": "SubstanceNucleicAcid" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequenceType": { - "description": "The type of the sequence shall be specified based on a controlled vocabulary.", - "$ref": "#/definitions/CodeableConcept" - }, - "numberOfSubunits": { - "description": "The number of linear sequences of nucleotides linked through phosphodiester bonds shall be described. Subunits would be strands of nucleic acids that are tightly associated typically through Watson-Crick base pairing. NOTE: If not specified in the reference source, the assumption is that there is 1 subunit.", - "$ref": "#/definitions/integer" - }, - "_numberOfSubunits": { - "description": "Extensions for numberOfSubunits", - "$ref": "#/definitions/Element" - }, - "areaOfHybridisation": { - "description": "The area of hybridisation shall be described if applicable for double stranded RNA or DNA. The number associated with the subunit followed by the number associated to the residue shall be specified in increasing order. The underscore “” shall be used as separator as follows: “Subunitnumber Residue”.", - "$ref": "#/definitions/string" - }, - "_areaOfHybridisation": { - "description": "Extensions for areaOfHybridisation", - "$ref": "#/definitions/Element" - }, - "oligoNucleotideType": { - "description": "(TBC).", - "$ref": "#/definitions/CodeableConcept" - }, - "subunit": { - "description": "Subunits are listed in order of decreasing length; sequences of the same length will be ordered by molecular weight; subunits that have identical sequences will be repeated multiple times.", - "items": { - "$ref": "#/definitions/SubstanceNucleicAcid_Subunit" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "SubstanceNucleicAcid_Subunit": { - "description": "Nucleic acids are defined by three distinct elements: the base, sugar and linkage. Individual substance/moiety IDs will be created for each of these elements. The nucleotide sequence will be always entered in the 5’-3’ direction.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "subunit": { - "description": "Index of linear sequences of nucleic acids in order of decreasing length. Sequences of the same length will be ordered by molecular weight. Subunits that have identical sequences will be repeated and have sequential subscripts.", - "$ref": "#/definitions/integer" - }, - "_subunit": { - "description": "Extensions for subunit", - "$ref": "#/definitions/Element" - }, - "sequence": { - "description": "Actual nucleotide sequence notation from 5\u0027 to 3\u0027 end using standard single letter codes. In addition to the base sequence, sugar and type of phosphate or non-phosphate linkage should also be captured.", - "$ref": "#/definitions/string" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "length": { - "description": "The length of the sequence shall be captured.", - "$ref": "#/definitions/integer" - }, - "_length": { - "description": "Extensions for length", - "$ref": "#/definitions/Element" - }, - "sequenceAttachment": { - "description": "(TBC).", - "$ref": "#/definitions/Attachment" - }, - "fivePrime": { - "description": "The nucleotide present at the 5’ terminal shall be specified based on a controlled vocabulary. Since the sequence is represented from the 5\u0027 to the 3\u0027 end, the 5’ prime nucleotide is the letter at the first position in the sequence. A separate representation would be redundant.", - "$ref": "#/definitions/CodeableConcept" - }, - "threePrime": { - "description": "The nucleotide present at the 3’ terminal shall be specified based on a controlled vocabulary. Since the sequence is represented from the 5\u0027 to the 3\u0027 end, the 5’ prime nucleotide is the letter at the last position in the sequence. A separate representation would be redundant.", - "$ref": "#/definitions/CodeableConcept" - }, - "linkage": { - "description": "The linkages between sugar residues will also be captured.", - "items": { - "$ref": "#/definitions/SubstanceNucleicAcid_Linkage" - }, - "type": "array" - }, - "sugar": { - "description": "5.3.6.8.1 Sugar ID (Mandatory).", - "items": { - "$ref": "#/definitions/SubstanceNucleicAcid_Sugar" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SubstanceNucleicAcid_Linkage": { - "description": "Nucleic acids are defined by three distinct elements: the base, sugar and linkage. Individual substance/moiety IDs will be created for each of these elements. The nucleotide sequence will be always entered in the 5’-3’ direction.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "connectivity": { - "description": "The entity that links the sugar residues together should also be captured for nearly all naturally occurring nucleic acid the linkage is a phosphate group. For many synthetic oligonucleotides phosphorothioate linkages are often seen. Linkage connectivity is assumed to be 3’-5’. If the linkage is either 3’-3’ or 5’-5’ this should be specified.", - "$ref": "#/definitions/string" - }, - "_connectivity": { - "description": "Extensions for connectivity", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "Each linkage will be registered as a fragment and have an ID.", - "$ref": "#/definitions/Identifier" - }, - "name": { - "description": "Each linkage will be registered as a fragment and have at least one name. A single name shall be assigned to each linkage.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "residueSite": { - "description": "Residues shall be captured as described in 5.3.6.8.3.", - "$ref": "#/definitions/string" - }, - "_residueSite": { - "description": "Extensions for residueSite", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "SubstanceNucleicAcid_Sugar": { - "description": "Nucleic acids are defined by three distinct elements: the base, sugar and linkage. Individual substance/moiety IDs will be created for each of these elements. The nucleotide sequence will be always entered in the 5’-3’ direction.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "The Substance ID of the sugar or sugar-like component that make up the nucleotide.", - "$ref": "#/definitions/Identifier" - }, - "name": { - "description": "The name of the sugar or sugar-like component that make up the nucleotide.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "residueSite": { - "description": "The residues that contain a given sugar will be captured. The order of given residues will be captured in the 5‘-3‘direction consistent with the base sequences listed above.", - "$ref": "#/definitions/string" - }, - "_residueSite": { - "description": "Extensions for residueSite", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "SubstancePolymer": { - "description": "Todo.", - "properties": { - "resourceType": { - "description": "This is a SubstancePolymer resource", - "const": "SubstancePolymer" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "class": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "geometry": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "copolymerConnectivity": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "modification": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_modification": { - "description": "Extensions for modification", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "monomerSet": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/SubstancePolymer_MonomerSet" - }, - "type": "array" - }, - "repeat": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/SubstancePolymer_Repeat" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "SubstancePolymer_MonomerSet": { - "description": "Todo.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "ratioType": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "startingMaterial": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/SubstancePolymer_StartingMaterial" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SubstancePolymer_StartingMaterial": { - "description": "Todo.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "material": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "type": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "isDefining": { - "description": "Todo.", - "$ref": "#/definitions/boolean" - }, - "_isDefining": { - "description": "Extensions for isDefining", - "$ref": "#/definitions/Element" - }, - "amount": { - "description": "Todo.", - "$ref": "#/definitions/SubstanceAmount" - } - }, - "additionalProperties": false - }, - "SubstancePolymer_Repeat": { - "description": "Todo.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "numberOfUnits": { - "description": "Todo.", - "$ref": "#/definitions/integer" - }, - "_numberOfUnits": { - "description": "Extensions for numberOfUnits", - "$ref": "#/definitions/Element" - }, - "averageMolecularFormula": { - "description": "Todo.", - "$ref": "#/definitions/string" - }, - "_averageMolecularFormula": { - "description": "Extensions for averageMolecularFormula", - "$ref": "#/definitions/Element" - }, - "repeatUnitAmountType": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "repeatUnit": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/SubstancePolymer_RepeatUnit" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SubstancePolymer_RepeatUnit": { - "description": "Todo.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "orientationOfPolymerisation": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "repeatUnit": { - "description": "Todo.", - "$ref": "#/definitions/string" - }, - "_repeatUnit": { - "description": "Extensions for repeatUnit", - "$ref": "#/definitions/Element" - }, - "amount": { - "description": "Todo.", - "$ref": "#/definitions/SubstanceAmount" - }, - "degreeOfPolymerisation": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/SubstancePolymer_DegreeOfPolymerisation" - }, - "type": "array" - }, - "structuralRepresentation": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/SubstancePolymer_StructuralRepresentation" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SubstancePolymer_DegreeOfPolymerisation": { - "description": "Todo.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "degree": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "amount": { - "description": "Todo.", - "$ref": "#/definitions/SubstanceAmount" - } - }, - "additionalProperties": false - }, - "SubstancePolymer_StructuralRepresentation": { - "description": "Todo.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "representation": { - "description": "Todo.", - "$ref": "#/definitions/string" - }, - "_representation": { - "description": "Extensions for representation", - "$ref": "#/definitions/Element" - }, - "attachment": { - "description": "Todo.", - "$ref": "#/definitions/Attachment" - } - }, - "additionalProperties": false - }, - "SubstanceProtein": { - "description": "A SubstanceProtein is defined as a single unit of a linear amino acid sequence, or a combination of subunits that are either covalently linked or have a defined invariant stoichiometric relationship. This includes all synthetic, recombinant and purified SubstanceProteins of defined sequence, whether the use is therapeutic or prophylactic. This set of elements will be used to describe albumins, coagulation factors, cytokines, growth factors, peptide/SubstanceProtein hormones, enzymes, toxins, toxoids, recombinant vaccines, and immunomodulators.", - "properties": { - "resourceType": { - "description": "This is a SubstanceProtein resource", - "const": "SubstanceProtein" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sequenceType": { - "description": "The SubstanceProtein descriptive elements will only be used when a complete or partial amino acid sequence is available or derivable from a nucleic acid sequence.", - "$ref": "#/definitions/CodeableConcept" - }, - "numberOfSubunits": { - "description": "Number of linear sequences of amino acids linked through peptide bonds. The number of subunits constituting the SubstanceProtein shall be described. It is possible that the number of subunits can be variable.", - "$ref": "#/definitions/integer" - }, - "_numberOfSubunits": { - "description": "Extensions for numberOfSubunits", - "$ref": "#/definitions/Element" - }, - "disulfideLinkage": { - "description": "The disulphide bond between two cysteine residues either on the same subunit or on two different subunits shall be described. The position of the disulfide bonds in the SubstanceProtein shall be listed in increasing order of subunit number and position within subunit followed by the abbreviation of the amino acids involved. The disulfide linkage positions shall actually contain the amino acid Cysteine at the respective positions.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_disulfideLinkage": { - "description": "Extensions for disulfideLinkage", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "subunit": { - "description": "This subclause refers to the description of each subunit constituting the SubstanceProtein. A subunit is a linear sequence of amino acids linked through peptide bonds. The Subunit information shall be provided when the finished SubstanceProtein is a complex of multiple sequences; subunits are not used to delineate domains within a single sequence. Subunits are listed in order of decreasing length; sequences of the same length will be ordered by decreasing molecular weight; subunits that have identical sequences will be repeated multiple times.", - "items": { - "$ref": "#/definitions/SubstanceProtein_Subunit" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "SubstanceProtein_Subunit": { - "description": "A SubstanceProtein is defined as a single unit of a linear amino acid sequence, or a combination of subunits that are either covalently linked or have a defined invariant stoichiometric relationship. This includes all synthetic, recombinant and purified SubstanceProteins of defined sequence, whether the use is therapeutic or prophylactic. This set of elements will be used to describe albumins, coagulation factors, cytokines, growth factors, peptide/SubstanceProtein hormones, enzymes, toxins, toxoids, recombinant vaccines, and immunomodulators.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "subunit": { - "description": "Index of primary sequences of amino acids linked through peptide bonds in order of decreasing length. Sequences of the same length will be ordered by molecular weight. Subunits that have identical sequences will be repeated and have sequential subscripts.", - "$ref": "#/definitions/integer" - }, - "_subunit": { - "description": "Extensions for subunit", - "$ref": "#/definitions/Element" - }, - "sequence": { - "description": "The sequence information shall be provided enumerating the amino acids from N- to C-terminal end using standard single-letter amino acid codes. Uppercase shall be used for L-amino acids and lowercase for D-amino acids. Transcribed SubstanceProteins will always be described using the translated sequence; for synthetic peptide containing amino acids that are not represented with a single letter code an X should be used within the sequence. The modified amino acids will be distinguished by their position in the sequence.", - "$ref": "#/definitions/string" - }, - "_sequence": { - "description": "Extensions for sequence", - "$ref": "#/definitions/Element" - }, - "length": { - "description": "Length of linear sequences of amino acids contained in the subunit.", - "$ref": "#/definitions/integer" - }, - "_length": { - "description": "Extensions for length", - "$ref": "#/definitions/Element" - }, - "sequenceAttachment": { - "description": "The sequence information shall be provided enumerating the amino acids from N- to C-terminal end using standard single-letter amino acid codes. Uppercase shall be used for L-amino acids and lowercase for D-amino acids. Transcribed SubstanceProteins will always be described using the translated sequence; for synthetic peptide containing amino acids that are not represented with a single letter code an X should be used within the sequence. The modified amino acids will be distinguished by their position in the sequence.", - "$ref": "#/definitions/Attachment" - }, - "nTerminalModificationId": { - "description": "Unique identifier for molecular fragment modification based on the ISO 11238 Substance ID.", - "$ref": "#/definitions/Identifier" - }, - "nTerminalModification": { - "description": "The name of the fragment modified at the N-terminal of the SubstanceProtein shall be specified.", - "$ref": "#/definitions/string" - }, - "_nTerminalModification": { - "description": "Extensions for nTerminalModification", - "$ref": "#/definitions/Element" - }, - "cTerminalModificationId": { - "description": "Unique identifier for molecular fragment modification based on the ISO 11238 Substance ID.", - "$ref": "#/definitions/Identifier" - }, - "cTerminalModification": { - "description": "The modification at the C-terminal shall be specified.", - "$ref": "#/definitions/string" - }, - "_cTerminalModification": { - "description": "Extensions for cTerminalModification", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "SubstanceReferenceInformation": { - "description": "Todo.", - "properties": { - "resourceType": { - "description": "This is a SubstanceReferenceInformation resource", - "const": "SubstanceReferenceInformation" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "comment": { - "description": "Todo.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - }, - "gene": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/SubstanceReferenceInformation_Gene" - }, - "type": "array" - }, - "geneElement": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/SubstanceReferenceInformation_GeneElement" - }, - "type": "array" - }, - "classification": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/SubstanceReferenceInformation_Classification" - }, - "type": "array" - }, - "target": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/SubstanceReferenceInformation_Target" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "SubstanceReferenceInformation_Gene": { - "description": "Todo.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "geneSequenceOrigin": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "gene": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "source": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SubstanceReferenceInformation_GeneElement": { - "description": "Todo.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "element": { - "description": "Todo.", - "$ref": "#/definitions/Identifier" - }, - "source": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SubstanceReferenceInformation_Classification": { - "description": "Todo.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "domain": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "classification": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "subtype": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "source": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SubstanceReferenceInformation_Target": { - "description": "Todo.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "target": { - "description": "Todo.", - "$ref": "#/definitions/Identifier" - }, - "type": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "interaction": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "organism": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "organismType": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "amountQuantity": { - "description": "Todo.", - "$ref": "#/definitions/Quantity" - }, - "amountRange": { - "description": "Todo.", - "$ref": "#/definitions/Range" - }, - "amountString": { - "description": "Todo.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_amountString": { - "description": "Extensions for amountString", - "$ref": "#/definitions/Element" - }, - "amountType": { - "description": "Todo.", - "$ref": "#/definitions/CodeableConcept" - }, - "source": { - "description": "Todo.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SubstanceSourceMaterial": { - "description": "Source material shall capture information on the taxonomic and anatomical origins as well as the fraction of a material that can result in or can be modified to form a substance. This set of data elements shall be used to define polymer substances isolated from biological matrices. Taxonomic and anatomical origins shall be described using a controlled vocabulary as required. This information is captured for naturally derived polymers ( . starch) and structurally diverse substances. For Organisms belonging to the Kingdom Plantae the Substance level defines the fresh material of a single species or infraspecies, the Herbal Drug and the Herbal preparation. For Herbal preparations, the fraction information will be captured at the Substance information level and additional information for herbal extracts will be captured at the Specified Substance Group 1 information level. See for further explanation the Substance Class: Structurally Diverse and the herbal annex.", - "properties": { - "resourceType": { - "description": "This is a SubstanceSourceMaterial resource", - "const": "SubstanceSourceMaterial" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "sourceMaterialClass": { - "description": "General high level classification of the source material specific to the origin of the material.", - "$ref": "#/definitions/CodeableConcept" - }, - "sourceMaterialType": { - "description": "The type of the source material shall be specified based on a controlled vocabulary. For vaccines, this subclause refers to the class of infectious agent.", - "$ref": "#/definitions/CodeableConcept" - }, - "sourceMaterialState": { - "description": "The state of the source material when extracted.", - "$ref": "#/definitions/CodeableConcept" - }, - "organismId": { - "description": "The unique identifier associated with the source material parent organism shall be specified.", - "$ref": "#/definitions/Identifier" - }, - "organismName": { - "description": "The organism accepted Scientific name shall be provided based on the organism taxonomy.", - "$ref": "#/definitions/string" - }, - "_organismName": { - "description": "Extensions for organismName", - "$ref": "#/definitions/Element" - }, - "parentSubstanceId": { - "description": "The parent of the herbal drug Ginkgo biloba, Leaf is the substance ID of the substance (fresh) of Ginkgo biloba L. or Ginkgo biloba L. (Whole plant).", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "parentSubstanceName": { - "description": "The parent substance of the Herbal Drug, or Herbal preparation.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_parentSubstanceName": { - "description": "Extensions for parentSubstanceName", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "countryOfOrigin": { - "description": "The country where the plant material is harvested or the countries where the plasma is sourced from as laid down in accordance with the Plasma Master File. For “Plasma-derived substances” the attribute country of origin provides information about the countries used for the manufacturing of the Cryopoor plama or Crioprecipitate.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "geographicalLocation": { - "description": "The place/region where the plant is harvested or the places/regions where the animal source material has its habitat.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_geographicalLocation": { - "description": "Extensions for geographicalLocation", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "developmentStage": { - "description": "Stage of life for animals, plants, insects and microorganisms. This information shall be provided only when the substance is significantly different in these stages (e.g. foetal bovine serum).", - "$ref": "#/definitions/CodeableConcept" - }, - "fractionDescription": { - "description": "Many complex materials are fractions of parts of plants, animals, or minerals. Fraction elements are often necessary to define both Substances and Specified Group 1 Substances. For substances derived from Plants, fraction information will be captured at the Substance information level ( . Oils, Juices and Exudates). Additional information for Extracts, such as extraction solvent composition, will be captured at the Specified Substance Group 1 information level. For plasma-derived products fraction information will be captured at the Substance and the Specified Substance Group 1 levels.", - "items": { - "$ref": "#/definitions/SubstanceSourceMaterial_FractionDescription" - }, - "type": "array" - }, - "organism": { - "description": "This subclause describes the organism which the substance is derived from. For vaccines, the parent organism shall be specified based on these subclause elements. As an example, full taxonomy will be described for the Substance Name: ., Leaf.", - "$ref": "#/definitions/SubstanceSourceMaterial_Organism" - }, - "partDescription": { - "description": "To do.", - "items": { - "$ref": "#/definitions/SubstanceSourceMaterial_PartDescription" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "SubstanceSourceMaterial_FractionDescription": { - "description": "Source material shall capture information on the taxonomic and anatomical origins as well as the fraction of a material that can result in or can be modified to form a substance. This set of data elements shall be used to define polymer substances isolated from biological matrices. Taxonomic and anatomical origins shall be described using a controlled vocabulary as required. This information is captured for naturally derived polymers ( . starch) and structurally diverse substances. For Organisms belonging to the Kingdom Plantae the Substance level defines the fresh material of a single species or infraspecies, the Herbal Drug and the Herbal preparation. For Herbal preparations, the fraction information will be captured at the Substance information level and additional information for herbal extracts will be captured at the Specified Substance Group 1 information level. See for further explanation the Substance Class: Structurally Diverse and the herbal annex.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "fraction": { - "description": "This element is capturing information about the fraction of a plant part, or human plasma for fractionation.", - "$ref": "#/definitions/string" - }, - "_fraction": { - "description": "Extensions for fraction", - "$ref": "#/definitions/Element" - }, - "materialType": { - "description": "The specific type of the material constituting the component. For Herbal preparations the particulars of the extracts (liquid/dry) is described in Specified Substance Group 1.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "SubstanceSourceMaterial_Organism": { - "description": "Source material shall capture information on the taxonomic and anatomical origins as well as the fraction of a material that can result in or can be modified to form a substance. This set of data elements shall be used to define polymer substances isolated from biological matrices. Taxonomic and anatomical origins shall be described using a controlled vocabulary as required. This information is captured for naturally derived polymers ( . starch) and structurally diverse substances. For Organisms belonging to the Kingdom Plantae the Substance level defines the fresh material of a single species or infraspecies, the Herbal Drug and the Herbal preparation. For Herbal preparations, the fraction information will be captured at the Substance information level and additional information for herbal extracts will be captured at the Specified Substance Group 1 information level. See for further explanation the Substance Class: Structurally Diverse and the herbal annex.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "family": { - "description": "The family of an organism shall be specified.", - "$ref": "#/definitions/CodeableConcept" - }, - "genus": { - "description": "The genus of an organism shall be specified; refers to the Latin epithet of the genus element of the plant/animal scientific name; it is present in names for genera, species and infraspecies.", - "$ref": "#/definitions/CodeableConcept" - }, - "species": { - "description": "The species of an organism shall be specified; refers to the Latin epithet of the species of the plant/animal; it is present in names for species and infraspecies.", - "$ref": "#/definitions/CodeableConcept" - }, - "intraspecificType": { - "description": "The Intraspecific type of an organism shall be specified.", - "$ref": "#/definitions/CodeableConcept" - }, - "intraspecificDescription": { - "description": "The intraspecific description of an organism shall be specified based on a controlled vocabulary. For Influenza Vaccine, the intraspecific description shall contain the syntax of the antigen in line with the WHO convention.", - "$ref": "#/definitions/string" - }, - "_intraspecificDescription": { - "description": "Extensions for intraspecificDescription", - "$ref": "#/definitions/Element" - }, - "author": { - "description": "4.9.13.6.1 Author type (Conditional).", - "items": { - "$ref": "#/definitions/SubstanceSourceMaterial_Author" - }, - "type": "array" - }, - "hybrid": { - "description": "4.9.13.8.1 Hybrid species maternal organism ID (Optional).", - "$ref": "#/definitions/SubstanceSourceMaterial_Hybrid" - }, - "organismGeneral": { - "description": "4.9.13.7.1 Kingdom (Conditional).", - "$ref": "#/definitions/SubstanceSourceMaterial_OrganismGeneral" - } - }, - "additionalProperties": false - }, - "SubstanceSourceMaterial_Author": { - "description": "Source material shall capture information on the taxonomic and anatomical origins as well as the fraction of a material that can result in or can be modified to form a substance. This set of data elements shall be used to define polymer substances isolated from biological matrices. Taxonomic and anatomical origins shall be described using a controlled vocabulary as required. This information is captured for naturally derived polymers ( . starch) and structurally diverse substances. For Organisms belonging to the Kingdom Plantae the Substance level defines the fresh material of a single species or infraspecies, the Herbal Drug and the Herbal preparation. For Herbal preparations, the fraction information will be captured at the Substance information level and additional information for herbal extracts will be captured at the Specified Substance Group 1 information level. See for further explanation the Substance Class: Structurally Diverse and the herbal annex.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "authorType": { - "description": "The type of author of an organism species shall be specified. The parenthetical author of an organism species refers to the first author who published the plant/animal name (of any rank). The primary author of an organism species refers to the first author(s), who validly published the plant/animal name.", - "$ref": "#/definitions/CodeableConcept" - }, - "authorDescription": { - "description": "The author of an organism species shall be specified. The author year of an organism shall also be specified when applicable; refers to the year in which the first author(s) published the infraspecific plant/animal name (of any rank).", - "$ref": "#/definitions/string" - }, - "_authorDescription": { - "description": "Extensions for authorDescription", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "SubstanceSourceMaterial_Hybrid": { - "description": "Source material shall capture information on the taxonomic and anatomical origins as well as the fraction of a material that can result in or can be modified to form a substance. This set of data elements shall be used to define polymer substances isolated from biological matrices. Taxonomic and anatomical origins shall be described using a controlled vocabulary as required. This information is captured for naturally derived polymers ( . starch) and structurally diverse substances. For Organisms belonging to the Kingdom Plantae the Substance level defines the fresh material of a single species or infraspecies, the Herbal Drug and the Herbal preparation. For Herbal preparations, the fraction information will be captured at the Substance information level and additional information for herbal extracts will be captured at the Specified Substance Group 1 information level. See for further explanation the Substance Class: Structurally Diverse and the herbal annex.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "maternalOrganismId": { - "description": "The identifier of the maternal species constituting the hybrid organism shall be specified based on a controlled vocabulary. For plants, the parents aren’t always known, and it is unlikely that it will be known which is maternal and which is paternal.", - "$ref": "#/definitions/string" - }, - "_maternalOrganismId": { - "description": "Extensions for maternalOrganismId", - "$ref": "#/definitions/Element" - }, - "maternalOrganismName": { - "description": "The name of the maternal species constituting the hybrid organism shall be specified. For plants, the parents aren’t always known, and it is unlikely that it will be known which is maternal and which is paternal.", - "$ref": "#/definitions/string" - }, - "_maternalOrganismName": { - "description": "Extensions for maternalOrganismName", - "$ref": "#/definitions/Element" - }, - "paternalOrganismId": { - "description": "The identifier of the paternal species constituting the hybrid organism shall be specified based on a controlled vocabulary.", - "$ref": "#/definitions/string" - }, - "_paternalOrganismId": { - "description": "Extensions for paternalOrganismId", - "$ref": "#/definitions/Element" - }, - "paternalOrganismName": { - "description": "The name of the paternal species constituting the hybrid organism shall be specified.", - "$ref": "#/definitions/string" - }, - "_paternalOrganismName": { - "description": "Extensions for paternalOrganismName", - "$ref": "#/definitions/Element" - }, - "hybridType": { - "description": "The hybrid type of an organism shall be specified.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "SubstanceSourceMaterial_OrganismGeneral": { - "description": "Source material shall capture information on the taxonomic and anatomical origins as well as the fraction of a material that can result in or can be modified to form a substance. This set of data elements shall be used to define polymer substances isolated from biological matrices. Taxonomic and anatomical origins shall be described using a controlled vocabulary as required. This information is captured for naturally derived polymers ( . starch) and structurally diverse substances. For Organisms belonging to the Kingdom Plantae the Substance level defines the fresh material of a single species or infraspecies, the Herbal Drug and the Herbal preparation. For Herbal preparations, the fraction information will be captured at the Substance information level and additional information for herbal extracts will be captured at the Specified Substance Group 1 information level. See for further explanation the Substance Class: Structurally Diverse and the herbal annex.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "kingdom": { - "description": "The kingdom of an organism shall be specified.", - "$ref": "#/definitions/CodeableConcept" - }, - "phylum": { - "description": "The phylum of an organism shall be specified.", - "$ref": "#/definitions/CodeableConcept" - }, - "class": { - "description": "The class of an organism shall be specified.", - "$ref": "#/definitions/CodeableConcept" - }, - "order": { - "description": "The order of an organism shall be specified,.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "SubstanceSourceMaterial_PartDescription": { - "description": "Source material shall capture information on the taxonomic and anatomical origins as well as the fraction of a material that can result in or can be modified to form a substance. This set of data elements shall be used to define polymer substances isolated from biological matrices. Taxonomic and anatomical origins shall be described using a controlled vocabulary as required. This information is captured for naturally derived polymers ( . starch) and structurally diverse substances. For Organisms belonging to the Kingdom Plantae the Substance level defines the fresh material of a single species or infraspecies, the Herbal Drug and the Herbal preparation. For Herbal preparations, the fraction information will be captured at the Substance information level and additional information for herbal extracts will be captured at the Specified Substance Group 1 information level. See for further explanation the Substance Class: Structurally Diverse and the herbal annex.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "part": { - "description": "Entity of anatomical origin of source material within an organism.", - "$ref": "#/definitions/CodeableConcept" - }, - "partLocation": { - "description": "The detailed anatomic location when the part can be extracted from different anatomical locations of the organism. Multiple alternative locations may apply.", - "$ref": "#/definitions/CodeableConcept" - } - }, - "additionalProperties": false - }, - "SubstanceSpecification": { - "description": "The detailed description of a substance, typically at a level beyond what is used for prescribing.", - "properties": { - "resourceType": { - "description": "This is a SubstanceSpecification resource", - "const": "SubstanceSpecification" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier by which this substance is known.", - "$ref": "#/definitions/Identifier" - }, - "type": { - "description": "High level categorization, e.g. polymer or nucleic acid.", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "Status of substance within the catalogue e.g. approved.", - "$ref": "#/definitions/CodeableConcept" - }, - "domain": { - "description": "If the substance applies to only human or veterinary use.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "Textual description of the substance.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "source": { - "description": "Supporting literature.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "comment": { - "description": "Textual comment about this record of a substance.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - }, - "moiety": { - "description": "Moiety, for structural modifications.", - "items": { - "$ref": "#/definitions/SubstanceSpecification_Moiety" - }, - "type": "array" - }, - "property": { - "description": "General specifications for this substance, including how it is related to other substances.", - "items": { - "$ref": "#/definitions/SubstanceSpecification_Property" - }, - "type": "array" - }, - "referenceInformation": { - "description": "General information detailing this substance.", - "$ref": "#/definitions/Reference" - }, - "structure": { - "description": "Structural information.", - "$ref": "#/definitions/SubstanceSpecification_Structure" - }, - "code": { - "description": "Codes associated with the substance.", - "items": { - "$ref": "#/definitions/SubstanceSpecification_Code" - }, - "type": "array" - }, - "name": { - "description": "Names applicable to this substance.", - "items": { - "$ref": "#/definitions/SubstanceSpecification_Name" - }, - "type": "array" - }, - "molecularWeight": { - "description": "The molecular weight or weight range (for proteins, polymers or nucleic acids).", - "items": { - "$ref": "#/definitions/SubstanceSpecification_MolecularWeight" - }, - "type": "array" - }, - "relationship": { - "description": "A link between this substance and another, with details of the relationship.", - "items": { - "$ref": "#/definitions/SubstanceSpecification_Relationship" - }, - "type": "array" - }, - "nucleicAcid": { - "description": "Data items specific to nucleic acids.", - "$ref": "#/definitions/Reference" - }, - "polymer": { - "description": "Data items specific to polymers.", - "$ref": "#/definitions/Reference" - }, - "protein": { - "description": "Data items specific to proteins.", - "$ref": "#/definitions/Reference" - }, - "sourceMaterial": { - "description": "Material or taxonomic/anatomical source for the substance.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "SubstanceSpecification_Moiety": { - "description": "The detailed description of a substance, typically at a level beyond what is used for prescribing.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "role": { - "description": "Role that the moiety is playing.", - "$ref": "#/definitions/CodeableConcept" - }, - "identifier": { - "description": "Identifier by which this moiety substance is known.", - "$ref": "#/definitions/Identifier" - }, - "name": { - "description": "Textual name for this moiety substance.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "stereochemistry": { - "description": "Stereochemistry type.", - "$ref": "#/definitions/CodeableConcept" - }, - "opticalActivity": { - "description": "Optical activity type.", - "$ref": "#/definitions/CodeableConcept" - }, - "molecularFormula": { - "description": "Molecular formula.", - "$ref": "#/definitions/string" - }, - "_molecularFormula": { - "description": "Extensions for molecularFormula", - "$ref": "#/definitions/Element" - }, - "amountQuantity": { - "description": "Quantitative value for this moiety.", - "$ref": "#/definitions/Quantity" - }, - "amountString": { - "description": "Quantitative value for this moiety.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_amountString": { - "description": "Extensions for amountString", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "SubstanceSpecification_Property": { - "description": "The detailed description of a substance, typically at a level beyond what is used for prescribing.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "category": { - "description": "A category for this property, e.g. Physical, Chemical, Enzymatic.", - "$ref": "#/definitions/CodeableConcept" - }, - "code": { - "description": "Property type e.g. viscosity, pH, isoelectric point.", - "$ref": "#/definitions/CodeableConcept" - }, - "parameters": { - "description": "Parameters that were used in the measurement of a property (e.g. for viscosity: measured at 20C with a pH of 7.1).", - "$ref": "#/definitions/string" - }, - "_parameters": { - "description": "Extensions for parameters", - "$ref": "#/definitions/Element" - }, - "definingSubstanceReference": { - "description": "A substance upon which a defining property depends (e.g. for solubility: in water, in alcohol).", - "$ref": "#/definitions/Reference" - }, - "definingSubstanceCodeableConcept": { - "description": "A substance upon which a defining property depends (e.g. for solubility: in water, in alcohol).", - "$ref": "#/definitions/CodeableConcept" - }, - "amountQuantity": { - "description": "Quantitative value for this property.", - "$ref": "#/definitions/Quantity" - }, - "amountString": { - "description": "Quantitative value for this property.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_amountString": { - "description": "Extensions for amountString", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "SubstanceSpecification_Structure": { - "description": "The detailed description of a substance, typically at a level beyond what is used for prescribing.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "stereochemistry": { - "description": "Stereochemistry type.", - "$ref": "#/definitions/CodeableConcept" - }, - "opticalActivity": { - "description": "Optical activity type.", - "$ref": "#/definitions/CodeableConcept" - }, - "molecularFormula": { - "description": "Molecular formula.", - "$ref": "#/definitions/string" - }, - "_molecularFormula": { - "description": "Extensions for molecularFormula", - "$ref": "#/definitions/Element" - }, - "molecularFormulaByMoiety": { - "description": "Specified per moiety according to the Hill system, i.e. first C, then H, then alphabetical, each moiety separated by a dot.", - "$ref": "#/definitions/string" - }, - "_molecularFormulaByMoiety": { - "description": "Extensions for molecularFormulaByMoiety", - "$ref": "#/definitions/Element" - }, - "isotope": { - "description": "Applicable for single substances that contain a radionuclide or a non-natural isotopic ratio.", - "items": { - "$ref": "#/definitions/SubstanceSpecification_Isotope" - }, - "type": "array" - }, - "molecularWeight": { - "description": "The molecular weight or weight range (for proteins, polymers or nucleic acids).", - "$ref": "#/definitions/SubstanceSpecification_MolecularWeight" - }, - "source": { - "description": "Supporting literature.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "representation": { - "description": "Molecular structural representation.", - "items": { - "$ref": "#/definitions/SubstanceSpecification_Representation" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SubstanceSpecification_Isotope": { - "description": "The detailed description of a substance, typically at a level beyond what is used for prescribing.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Substance identifier for each non-natural or radioisotope.", - "$ref": "#/definitions/Identifier" - }, - "name": { - "description": "Substance name for each non-natural or radioisotope.", - "$ref": "#/definitions/CodeableConcept" - }, - "substitution": { - "description": "The type of isotopic substitution present in a single substance.", - "$ref": "#/definitions/CodeableConcept" - }, - "halfLife": { - "description": "Half life - for a non-natural nuclide.", - "$ref": "#/definitions/Quantity" - }, - "molecularWeight": { - "description": "The molecular weight or weight range (for proteins, polymers or nucleic acids).", - "$ref": "#/definitions/SubstanceSpecification_MolecularWeight" - } - }, - "additionalProperties": false - }, - "SubstanceSpecification_MolecularWeight": { - "description": "The detailed description of a substance, typically at a level beyond what is used for prescribing.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "method": { - "description": "The method by which the molecular weight was determined.", - "$ref": "#/definitions/CodeableConcept" - }, - "type": { - "description": "Type of molecular weight such as exact, average (also known as. number average), weight average.", - "$ref": "#/definitions/CodeableConcept" - }, - "amount": { - "description": "Used to capture quantitative values for a variety of elements. If only limits are given, the arithmetic mean would be the average. If only a single definite value for a given element is given, it would be captured in this field.", - "$ref": "#/definitions/Quantity" - } - }, - "additionalProperties": false - }, - "SubstanceSpecification_Representation": { - "description": "The detailed description of a substance, typically at a level beyond what is used for prescribing.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of structure (e.g. Full, Partial, Representative).", - "$ref": "#/definitions/CodeableConcept" - }, - "representation": { - "description": "The structural representation as text string in a format e.g. InChI, SMILES, MOLFILE, CDX.", - "$ref": "#/definitions/string" - }, - "_representation": { - "description": "Extensions for representation", - "$ref": "#/definitions/Element" - }, - "attachment": { - "description": "An attached file with the structural representation.", - "$ref": "#/definitions/Attachment" - } - }, - "additionalProperties": false - }, - "SubstanceSpecification_Code": { - "description": "The detailed description of a substance, typically at a level beyond what is used for prescribing.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "The specific code.", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "Status of the code assignment.", - "$ref": "#/definitions/CodeableConcept" - }, - "statusDate": { - "description": "The date at which the code status is changed as part of the terminology maintenance.", - "$ref": "#/definitions/dateTime" - }, - "_statusDate": { - "description": "Extensions for statusDate", - "$ref": "#/definitions/Element" - }, - "comment": { - "description": "Any comment can be provided in this field, if necessary.", - "$ref": "#/definitions/string" - }, - "_comment": { - "description": "Extensions for comment", - "$ref": "#/definitions/Element" - }, - "source": { - "description": "Supporting literature.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SubstanceSpecification_Name": { - "description": "The detailed description of a substance, typically at a level beyond what is used for prescribing.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The actual name.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "type": { - "description": "Name type.", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "The status of the name.", - "$ref": "#/definitions/CodeableConcept" - }, - "preferred": { - "description": "If this is the preferred name for this substance.", - "$ref": "#/definitions/boolean" - }, - "_preferred": { - "description": "Extensions for preferred", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "Language of the name.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "domain": { - "description": "The use context of this name for example if there is a different name a drug active ingredient as opposed to a food colour additive.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "jurisdiction": { - "description": "The jurisdiction where this name applies.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "synonym": { - "description": "A synonym of this name.", - "items": { - "$ref": "#/definitions/SubstanceSpecification_Name" - }, - "type": "array" - }, - "translation": { - "description": "A translation for this name.", - "items": { - "$ref": "#/definitions/SubstanceSpecification_Name" - }, - "type": "array" - }, - "official": { - "description": "Details of the official nature of this name.", - "items": { - "$ref": "#/definitions/SubstanceSpecification_Official" - }, - "type": "array" - }, - "source": { - "description": "Supporting literature.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SubstanceSpecification_Official": { - "description": "The detailed description of a substance, typically at a level beyond what is used for prescribing.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "authority": { - "description": "Which authority uses this official name.", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "The status of the official name.", - "$ref": "#/definitions/CodeableConcept" - }, - "date": { - "description": "Date of official name change.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "SubstanceSpecification_Relationship": { - "description": "The detailed description of a substance, typically at a level beyond what is used for prescribing.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "substanceReference": { - "description": "A pointer to another substance, as a resource or just a representational code.", - "$ref": "#/definitions/Reference" - }, - "substanceCodeableConcept": { - "description": "A pointer to another substance, as a resource or just a representational code.", - "$ref": "#/definitions/CodeableConcept" - }, - "relationship": { - "description": "For example \"salt to parent\", \"active moiety\", \"starting material\".", - "$ref": "#/definitions/CodeableConcept" - }, - "isDefining": { - "description": "For example where an enzyme strongly bonds with a particular substance, this is a defining relationship for that enzyme, out of several possible substance relationships.", - "$ref": "#/definitions/boolean" - }, - "_isDefining": { - "description": "Extensions for isDefining", - "$ref": "#/definitions/Element" - }, - "amountQuantity": { - "description": "A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other.", - "$ref": "#/definitions/Quantity" - }, - "amountRange": { - "description": "A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other.", - "$ref": "#/definitions/Range" - }, - "amountRatio": { - "description": "A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other.", - "$ref": "#/definitions/Ratio" - }, - "amountString": { - "description": "A numeric factor for the relationship, for instance to express that the salt of a substance has some percentage of the active substance in relation to some other.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_amountString": { - "description": "Extensions for amountString", - "$ref": "#/definitions/Element" - }, - "amountRatioLowLimit": { - "description": "For use when the numeric.", - "$ref": "#/definitions/Ratio" - }, - "amountType": { - "description": "An operator for the amount, for example \"average\", \"approximately\", \"less than\".", - "$ref": "#/definitions/CodeableConcept" - }, - "source": { - "description": "Supporting literature.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "SupplyDelivery": { - "description": "Record of delivery of what is supplied.", - "properties": { - "resourceType": { - "description": "This is a SupplyDelivery resource", - "const": "SupplyDelivery" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier for the supply delivery event that is used to identify it across multiple disparate systems.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "basedOn": { - "description": "A plan, proposal or order that is fulfilled in whole or in part by this event.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "partOf": { - "description": "A larger event of which this particular event is a component or step.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "A code specifying the state of the dispense event.", - "enum": [ - "in-progress", - "completed", - "abandoned", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "patient": { - "description": "A link to a resource representing the person whom the delivered item is for.", - "$ref": "#/definitions/Reference" - }, - "type": { - "description": "Indicates the type of dispensing event that is performed. Examples include: Trial Fill, Completion of Trial, Partial Fill, Emergency Fill, Samples, etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "suppliedItem": { - "description": "The item that is being delivered or has been supplied.", - "$ref": "#/definitions/SupplyDelivery_SuppliedItem" - }, - "occurrenceDateTime": { - "description": "The date or time(s) the activity occurred.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_occurrenceDateTime": { - "description": "Extensions for occurrenceDateTime", - "$ref": "#/definitions/Element" - }, - "occurrencePeriod": { - "description": "The date or time(s) the activity occurred.", - "$ref": "#/definitions/Period" - }, - "occurrenceTiming": { - "description": "The date or time(s) the activity occurred.", - "$ref": "#/definitions/Timing" - }, - "supplier": { - "description": "The individual responsible for dispensing the medication, supplier or device.", - "$ref": "#/definitions/Reference" - }, - "destination": { - "description": "Identification of the facility/location where the Supply was shipped to, as part of the dispense event.", - "$ref": "#/definitions/Reference" - }, - "receiver": { - "description": "Identifies the person who picked up the Supply.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "SupplyDelivery_SuppliedItem": { - "description": "Record of delivery of what is supplied.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "quantity": { - "description": "The amount of supply that has been dispensed. Includes unit of measure.", - "$ref": "#/definitions/Quantity" - }, - "itemCodeableConcept": { - "description": "Identifies the medication, substance or device being dispensed. This is either a link to a resource representing the details of the item or a code that identifies the item from a known list.", - "$ref": "#/definitions/CodeableConcept" - }, - "itemReference": { - "description": "Identifies the medication, substance or device being dispensed. This is either a link to a resource representing the details of the item or a code that identifies the item from a known list.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "SupplyRequest": { - "description": "A record of a request for a medication, substance or device used in the healthcare setting.", - "properties": { - "resourceType": { - "description": "This is a SupplyRequest resource", - "const": "SupplyRequest" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Business identifiers assigned to this SupplyRequest by the author and/or other systems. These identifiers remain constant as the resource is updated and propagates from server to server.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "Status of the supply request.", - "enum": [ - "draft", - "active", - "suspended", - "cancelled", - "completed", - "entered-in-error", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "category": { - "description": "Category of supply, e.g. central, non-stock, etc. This is used to support work flows associated with the supply process.", - "$ref": "#/definitions/CodeableConcept" - }, - "priority": { - "description": "Indicates how quickly this SupplyRequest should be addressed with respect to other requests.", - "$ref": "#/definitions/code" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "itemCodeableConcept": { - "description": "The item that is requested to be supplied. This is either a link to a resource representing the details of the item or a code that identifies the item from a known list.", - "$ref": "#/definitions/CodeableConcept" - }, - "itemReference": { - "description": "The item that is requested to be supplied. This is either a link to a resource representing the details of the item or a code that identifies the item from a known list.", - "$ref": "#/definitions/Reference" - }, - "quantity": { - "description": "The amount that is being ordered of the indicated item.", - "$ref": "#/definitions/Quantity" - }, - "parameter": { - "description": "Specific parameters for the ordered item. For example, the size of the indicated item.", - "items": { - "$ref": "#/definitions/SupplyRequest_Parameter" - }, - "type": "array" - }, - "occurrenceDateTime": { - "description": "When the request should be fulfilled.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_occurrenceDateTime": { - "description": "Extensions for occurrenceDateTime", - "$ref": "#/definitions/Element" - }, - "occurrencePeriod": { - "description": "When the request should be fulfilled.", - "$ref": "#/definitions/Period" - }, - "occurrenceTiming": { - "description": "When the request should be fulfilled.", - "$ref": "#/definitions/Timing" - }, - "authoredOn": { - "description": "When the request was made.", - "$ref": "#/definitions/dateTime" - }, - "_authoredOn": { - "description": "Extensions for authoredOn", - "$ref": "#/definitions/Element" - }, - "requester": { - "description": "The device, practitioner, etc. who initiated the request.", - "$ref": "#/definitions/Reference" - }, - "supplier": { - "description": "Who is intended to fulfill the request.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "reasonCode": { - "description": "The reason why the supply item was requested.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "reasonReference": { - "description": "The reason why the supply item was requested.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "deliverFrom": { - "description": "Where the supply is expected to come from.", - "$ref": "#/definitions/Reference" - }, - "deliverTo": { - "description": "Where the supply is destined to go.", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false, - "required": [ - "quantity", - "resourceType" - ] - }, - "SupplyRequest_Parameter": { - "description": "A record of a request for a medication, substance or device used in the healthcare setting.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "A code or string that identifies the device detail being asserted.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueCodeableConcept": { - "description": "The value of the device detail.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueQuantity": { - "description": "The value of the device detail.", - "$ref": "#/definitions/Quantity" - }, - "valueRange": { - "description": "The value of the device detail.", - "$ref": "#/definitions/Range" - }, - "valueBoolean": { - "description": "The value of the device detail.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "Task": { - "description": "A task to be performed.", - "properties": { - "resourceType": { - "description": "This is a Task resource", - "const": "Task" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "The business identifier for this task.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "instantiatesCanonical": { - "description": "The URL pointing to a *FHIR*-defined protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.", - "$ref": "#/definitions/canonical" - }, - "instantiatesUri": { - "description": "The URL pointing to an *externally* maintained protocol, guideline, orderset or other definition that is adhered to in whole or in part by this Task.", - "$ref": "#/definitions/uri" - }, - "_instantiatesUri": { - "description": "Extensions for instantiatesUri", - "$ref": "#/definitions/Element" - }, - "basedOn": { - "description": "BasedOn refers to a higher-level authorization that triggered the creation of the task. It references a \"request\" resource such as a ServiceRequest, MedicationRequest, ServiceRequest, CarePlan, etc. which is distinct from the \"request\" resource the task is seeking to fulfill. This latter resource is referenced by FocusOn. For example, based on a ServiceRequest (\u003d BasedOn), a task is created to fulfill a procedureRequest ( \u003d FocusOn ) to collect a specimen from a patient.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "groupIdentifier": { - "description": "An identifier that links together multiple tasks and other requests that were created in the same context.", - "$ref": "#/definitions/Identifier" - }, - "partOf": { - "description": "Task that this particular task is part of.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "status": { - "description": "The current status of the task.", - "enum": [ - "draft", - "requested", - "received", - "accepted", - "rejected", - "ready", - "cancelled", - "in-progress", - "on-hold", - "failed", - "completed", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusReason": { - "description": "An explanation as to why this task is held, failed, was refused, etc.", - "$ref": "#/definitions/CodeableConcept" - }, - "businessStatus": { - "description": "Contains business-specific nuances of the business state.", - "$ref": "#/definitions/CodeableConcept" - }, - "intent": { - "description": "Indicates the \"level\" of actionability associated with the Task, i.e. i+R[9]Cs this a proposed task, a planned task, an actionable task, etc.", - "enum": [ - "unknown", - "proposal", - "plan", - "order", - "original-order", - "reflex-order", - "filler-order", - "instance-order", - "option" - ] - }, - "_intent": { - "description": "Extensions for intent", - "$ref": "#/definitions/Element" - }, - "priority": { - "description": "Indicates how quickly the Task should be addressed with respect to other requests.", - "$ref": "#/definitions/code" - }, - "_priority": { - "description": "Extensions for priority", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "A name or code (or both) briefly describing what the task involves.", - "$ref": "#/definitions/CodeableConcept" - }, - "description": { - "description": "A free-text description of what is to be performed.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "focus": { - "description": "The request being actioned or the resource being manipulated by this task.", - "$ref": "#/definitions/Reference" - }, - "for": { - "description": "The entity who benefits from the performance of the service specified in the task (e.g., the patient).", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "The healthcare event (e.g. a patient and healthcare provider interaction) during which this task was created.", - "$ref": "#/definitions/Reference" - }, - "executionPeriod": { - "description": "Identifies the time action was first taken against the task (start) and/or the time final action was taken against the task prior to marking it as completed (end).", - "$ref": "#/definitions/Period" - }, - "authoredOn": { - "description": "The date and time this task was created.", - "$ref": "#/definitions/dateTime" - }, - "_authoredOn": { - "description": "Extensions for authoredOn", - "$ref": "#/definitions/Element" - }, - "lastModified": { - "description": "The date and time of last modification to this task.", - "$ref": "#/definitions/dateTime" - }, - "_lastModified": { - "description": "Extensions for lastModified", - "$ref": "#/definitions/Element" - }, - "requester": { - "description": "The creator of the task.", - "$ref": "#/definitions/Reference" - }, - "performerType": { - "description": "The kind of participant that should perform the task.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "owner": { - "description": "Individual organization or Device currently responsible for task execution.", - "$ref": "#/definitions/Reference" - }, - "location": { - "description": "Principal physical location where the this task is performed.", - "$ref": "#/definitions/Reference" - }, - "reasonCode": { - "description": "A description or code indicating why this task needs to be performed.", - "$ref": "#/definitions/CodeableConcept" - }, - "reasonReference": { - "description": "A resource reference indicating why this task needs to be performed.", - "$ref": "#/definitions/Reference" - }, - "insurance": { - "description": "Insurance plans, coverage extensions, pre-authorizations and/or pre-determinations that may be relevant to the Task.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "note": { - "description": "Free-text information captured about the task as it progresses.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - }, - "relevantHistory": { - "description": "Links to Provenance records for past versions of this Task that identify key state transitions or updates that are likely to be relevant to a user looking at the current version of the task.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "restriction": { - "description": "If the Task.focus is a request resource and the task is seeking fulfillment (i.e. is asking for the request to be actioned), this element identifies any limitations on what parts of the referenced request should be actioned.", - "$ref": "#/definitions/Task_Restriction" - }, - "input": { - "description": "Additional information that may be needed in the execution of the task.", - "items": { - "$ref": "#/definitions/Task_Input" - }, - "type": "array" - }, - "output": { - "description": "Outputs produced by the Task.", - "items": { - "$ref": "#/definitions/Task_Output" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "Task_Restriction": { - "description": "A task to be performed.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "repetitions": { - "description": "Indicates the number of times the requested action should occur.", - "$ref": "#/definitions/positiveInt" - }, - "_repetitions": { - "description": "Extensions for repetitions", - "$ref": "#/definitions/Element" - }, - "period": { - "description": "Over what time-period is fulfillment sought.", - "$ref": "#/definitions/Period" - }, - "recipient": { - "description": "For requests that are targeted to more than on potential recipient/target, for whom is fulfillment sought?", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "Task_Input": { - "description": "A task to be performed.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "A code or description indicating how the input is intended to be used as part of the task execution.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueBase64Binary": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^(\\s*([0-9a-zA-Z\\+/\u003d]){4}\\s*)+$", - "type": "string" - }, - "_valueBase64Binary": { - "description": "Extensions for valueBase64Binary", - "$ref": "#/definitions/Element" - }, - "valueBoolean": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueCanonical": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueCanonical": { - "description": "Extensions for valueCanonical", - "$ref": "#/definitions/Element" - }, - "valueCode": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string" - }, - "_valueCode": { - "description": "Extensions for valueCode", - "$ref": "#/definitions/Element" - }, - "valueDate": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_valueDate": { - "description": "Extensions for valueDate", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valueDecimal": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_valueDecimal": { - "description": "Extensions for valueDecimal", - "$ref": "#/definitions/Element" - }, - "valueId": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^[A-Za-z0-9\\-\\.]{1,64}$", - "type": "string" - }, - "_valueId": { - "description": "Extensions for valueId", - "$ref": "#/definitions/Element" - }, - "valueInstant": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_valueInstant": { - "description": "Extensions for valueInstant", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueMarkdown": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueMarkdown": { - "description": "Extensions for valueMarkdown", - "$ref": "#/definitions/Element" - }, - "valueOid": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^urn:oid:[0-2](\\.(0|[1-9][0-9]*))+$", - "type": "string" - }, - "_valueOid": { - "description": "Extensions for valueOid", - "$ref": "#/definitions/Element" - }, - "valuePositiveInt": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_valuePositiveInt": { - "description": "Extensions for valuePositiveInt", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueTime": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_valueTime": { - "description": "Extensions for valueTime", - "$ref": "#/definitions/Element" - }, - "valueUnsignedInt": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_valueUnsignedInt": { - "description": "Extensions for valueUnsignedInt", - "$ref": "#/definitions/Element" - }, - "valueUri": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUri": { - "description": "Extensions for valueUri", - "$ref": "#/definitions/Element" - }, - "valueUrl": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUrl": { - "description": "Extensions for valueUrl", - "$ref": "#/definitions/Element" - }, - "valueUuid": { - "description": "The value of the input parameter as a basic type.", - "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", - "type": "string" - }, - "_valueUuid": { - "description": "Extensions for valueUuid", - "$ref": "#/definitions/Element" - }, - "valueAddress": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Address" - }, - "valueAge": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Age" - }, - "valueAnnotation": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Annotation" - }, - "valueAttachment": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Attachment" - }, - "valueCodeableConcept": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueCoding": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Coding" - }, - "valueContactPoint": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/ContactPoint" - }, - "valueCount": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Count" - }, - "valueDistance": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Distance" - }, - "valueDuration": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Duration" - }, - "valueHumanName": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/HumanName" - }, - "valueIdentifier": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Identifier" - }, - "valueMoney": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Money" - }, - "valuePeriod": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Period" - }, - "valueQuantity": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Quantity" - }, - "valueRange": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Range" - }, - "valueRatio": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Ratio" - }, - "valueReference": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Reference" - }, - "valueSampledData": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/SampledData" - }, - "valueSignature": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Signature" - }, - "valueTiming": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Timing" - }, - "valueContactDetail": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/ContactDetail" - }, - "valueContributor": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Contributor" - }, - "valueDataRequirement": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/DataRequirement" - }, - "valueExpression": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Expression" - }, - "valueParameterDefinition": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/ParameterDefinition" - }, - "valueRelatedArtifact": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/RelatedArtifact" - }, - "valueTriggerDefinition": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/TriggerDefinition" - }, - "valueUsageContext": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/UsageContext" - }, - "valueDosage": { - "description": "The value of the input parameter as a basic type.", - "$ref": "#/definitions/Dosage" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "Task_Output": { - "description": "A task to be performed.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The name of the Output parameter.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueBase64Binary": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^(\\s*([0-9a-zA-Z\\+/\u003d]){4}\\s*)+$", - "type": "string" - }, - "_valueBase64Binary": { - "description": "Extensions for valueBase64Binary", - "$ref": "#/definitions/Element" - }, - "valueBoolean": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueCanonical": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueCanonical": { - "description": "Extensions for valueCanonical", - "$ref": "#/definitions/Element" - }, - "valueCode": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string" - }, - "_valueCode": { - "description": "Extensions for valueCode", - "$ref": "#/definitions/Element" - }, - "valueDate": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1]))?)?$", - "type": "string" - }, - "_valueDate": { - "description": "Extensions for valueDate", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - }, - "valueDecimal": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_valueDecimal": { - "description": "Extensions for valueDecimal", - "$ref": "#/definitions/Element" - }, - "valueId": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^[A-Za-z0-9\\-\\.]{1,64}$", - "type": "string" - }, - "_valueId": { - "description": "Extensions for valueId", - "$ref": "#/definitions/Element" - }, - "valueInstant": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))$", - "type": "string" - }, - "_valueInstant": { - "description": "Extensions for valueInstant", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueMarkdown": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueMarkdown": { - "description": "Extensions for valueMarkdown", - "$ref": "#/definitions/Element" - }, - "valueOid": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^urn:oid:[0-2](\\.(0|[1-9][0-9]*))+$", - "type": "string" - }, - "_valueOid": { - "description": "Extensions for valueOid", - "$ref": "#/definitions/Element" - }, - "valuePositiveInt": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^[1-9][0-9]*$", - "type": "number" - }, - "_valuePositiveInt": { - "description": "Extensions for valuePositiveInt", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueTime": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?$", - "type": "string" - }, - "_valueTime": { - "description": "Extensions for valueTime", - "$ref": "#/definitions/Element" - }, - "valueUnsignedInt": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^[0]|([1-9][0-9]*)$", - "type": "number" - }, - "_valueUnsignedInt": { - "description": "Extensions for valueUnsignedInt", - "$ref": "#/definitions/Element" - }, - "valueUri": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUri": { - "description": "Extensions for valueUri", - "$ref": "#/definitions/Element" - }, - "valueUrl": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUrl": { - "description": "Extensions for valueUrl", - "$ref": "#/definitions/Element" - }, - "valueUuid": { - "description": "The value of the Output parameter as a basic type.", - "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", - "type": "string" - }, - "_valueUuid": { - "description": "Extensions for valueUuid", - "$ref": "#/definitions/Element" - }, - "valueAddress": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Address" - }, - "valueAge": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Age" - }, - "valueAnnotation": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Annotation" - }, - "valueAttachment": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Attachment" - }, - "valueCodeableConcept": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/CodeableConcept" - }, - "valueCoding": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Coding" - }, - "valueContactPoint": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/ContactPoint" - }, - "valueCount": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Count" - }, - "valueDistance": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Distance" - }, - "valueDuration": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Duration" - }, - "valueHumanName": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/HumanName" - }, - "valueIdentifier": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Identifier" - }, - "valueMoney": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Money" - }, - "valuePeriod": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Period" - }, - "valueQuantity": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Quantity" - }, - "valueRange": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Range" - }, - "valueRatio": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Ratio" - }, - "valueReference": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Reference" - }, - "valueSampledData": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/SampledData" - }, - "valueSignature": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Signature" - }, - "valueTiming": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Timing" - }, - "valueContactDetail": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/ContactDetail" - }, - "valueContributor": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Contributor" - }, - "valueDataRequirement": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/DataRequirement" - }, - "valueExpression": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Expression" - }, - "valueParameterDefinition": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/ParameterDefinition" - }, - "valueRelatedArtifact": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/RelatedArtifact" - }, - "valueTriggerDefinition": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/TriggerDefinition" - }, - "valueUsageContext": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/UsageContext" - }, - "valueDosage": { - "description": "The value of the Output parameter as a basic type.", - "$ref": "#/definitions/Dosage" - } - }, - "additionalProperties": false, - "required": [ - "type" - ] - }, - "TerminologyCapabilities": { - "description": "A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "resourceType": { - "description": "This is a TerminologyCapabilities resource", - "const": "TerminologyCapabilities" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this terminology capabilities when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this terminology capabilities is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the terminology capabilities is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The identifier that is used to identify this version of the terminology capabilities when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the terminology capabilities author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the terminology capabilities. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the terminology capabilities.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this terminology capabilities. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this terminology capabilities is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the terminology capabilities was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the terminology capabilities changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the terminology capabilities.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the terminology capabilities from a consumer\u0027s perspective. Typically, this is used when the capability statement describes a desired rather than an actual solution, for example as a formal expression of requirements as part of an RFP.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate terminology capabilities instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the terminology capabilities is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this terminology capabilities is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the terminology capabilities and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the terminology capabilities.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "kind": { - "description": "The way that this statement is intended to be used, to describe an actual running instance of software, a particular product (kind, not instance of software) or a class of implementation (e.g. a desired purchase).", - "$ref": "#/definitions/code" - }, - "_kind": { - "description": "Extensions for kind", - "$ref": "#/definitions/Element" - }, - "software": { - "description": "Software that is covered by this terminology capability statement. It is used when the statement describes the capabilities of a particular software version, independent of an installation.", - "$ref": "#/definitions/TerminologyCapabilities_Software" - }, - "implementation": { - "description": "Identifies a specific implementation instance that is described by the terminology capability statement - i.e. a particular installation, rather than the capabilities of a software program.", - "$ref": "#/definitions/TerminologyCapabilities_Implementation" - }, - "lockedDate": { - "description": "Whether the server supports lockedDate.", - "$ref": "#/definitions/boolean" - }, - "_lockedDate": { - "description": "Extensions for lockedDate", - "$ref": "#/definitions/Element" - }, - "codeSystem": { - "description": "Identifies a code system that is supported by the server. If there is a no code system URL, then this declares the general assumptions a client can make about support for any CodeSystem resource.", - "items": { - "$ref": "#/definitions/TerminologyCapabilities_CodeSystem" - }, - "type": "array" - }, - "expansion": { - "description": "Information about the [ValueSet/$expand](valueset-operation-expand.html) operation.", - "$ref": "#/definitions/TerminologyCapabilities_Expansion" - }, - "codeSearch": { - "description": "The degree to which the server supports the code search parameter on ValueSet, if it is supported.", - "enum": [ - "explicit", - "all" - ] - }, - "_codeSearch": { - "description": "Extensions for codeSearch", - "$ref": "#/definitions/Element" - }, - "validateCode": { - "description": "Information about the [ValueSet/$validate-code](valueset-operation-validate-code.html) operation.", - "$ref": "#/definitions/TerminologyCapabilities_ValidateCode" - }, - "translation": { - "description": "Information about the [ConceptMap/$translate](conceptmap-operation-translate.html) operation.", - "$ref": "#/definitions/TerminologyCapabilities_Translation" - }, - "closure": { - "description": "Whether the $closure operation is supported.", - "$ref": "#/definitions/TerminologyCapabilities_Closure" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "TerminologyCapabilities_Software": { - "description": "A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Name the software is known by.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The version identifier for the software covered by this statement.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TerminologyCapabilities_Implementation": { - "description": "A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "description": { - "description": "Information about the specific installation that this terminology capability statement relates to.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "url": { - "description": "An absolute base URL for the implementation.", - "$ref": "#/definitions/url" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TerminologyCapabilities_CodeSystem": { - "description": "A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "uri": { - "description": "URI for the Code System.", - "$ref": "#/definitions/canonical" - }, - "version": { - "description": "For the code system, a list of versions that are supported by the server.", - "items": { - "$ref": "#/definitions/TerminologyCapabilities_Version" - }, - "type": "array" - }, - "subsumption": { - "description": "True if subsumption is supported for this version of the code system.", - "$ref": "#/definitions/boolean" - }, - "_subsumption": { - "description": "Extensions for subsumption", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TerminologyCapabilities_Version": { - "description": "A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "For version-less code systems, there should be a single version with no identifier.", - "$ref": "#/definitions/string" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "isDefault": { - "description": "If this is the default version for this code system.", - "$ref": "#/definitions/boolean" - }, - "_isDefault": { - "description": "Extensions for isDefault", - "$ref": "#/definitions/Element" - }, - "compositional": { - "description": "If the compositional grammar defined by the code system is supported.", - "$ref": "#/definitions/boolean" - }, - "_compositional": { - "description": "Extensions for compositional", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "Language Displays supported.", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_language": { - "description": "Extensions for language", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "filter": { - "description": "Filter Properties supported.", - "items": { - "$ref": "#/definitions/TerminologyCapabilities_Filter" - }, - "type": "array" - }, - "property": { - "description": "Properties supported for $lookup.", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_property": { - "description": "Extensions for property", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "TerminologyCapabilities_Filter": { - "description": "A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Code of the property supported.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "op": { - "description": "Operations supported for the property.", - "items": { - "$ref": "#/definitions/code" - }, - "type": "array" - }, - "_op": { - "description": "Extensions for op", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "TerminologyCapabilities_Expansion": { - "description": "A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "hierarchical": { - "description": "Whether the server can return nested value sets.", - "$ref": "#/definitions/boolean" - }, - "_hierarchical": { - "description": "Extensions for hierarchical", - "$ref": "#/definitions/Element" - }, - "paging": { - "description": "Whether the server supports paging on expansion.", - "$ref": "#/definitions/boolean" - }, - "_paging": { - "description": "Extensions for paging", - "$ref": "#/definitions/Element" - }, - "incomplete": { - "description": "Allow request for incomplete expansions?", - "$ref": "#/definitions/boolean" - }, - "_incomplete": { - "description": "Extensions for incomplete", - "$ref": "#/definitions/Element" - }, - "parameter": { - "description": "Supported expansion parameter.", - "items": { - "$ref": "#/definitions/TerminologyCapabilities_Parameter" - }, - "type": "array" - }, - "textFilter": { - "description": "Documentation about text searching works.", - "$ref": "#/definitions/markdown" - }, - "_textFilter": { - "description": "Extensions for textFilter", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TerminologyCapabilities_Parameter": { - "description": "A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Expansion Parameter name.", - "$ref": "#/definitions/code" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "documentation": { - "description": "Description of support for parameter.", - "$ref": "#/definitions/string" - }, - "_documentation": { - "description": "Extensions for documentation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TerminologyCapabilities_ValidateCode": { - "description": "A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "translations": { - "description": "Whether translations are validated.", - "$ref": "#/definitions/boolean" - }, - "_translations": { - "description": "Extensions for translations", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TerminologyCapabilities_Translation": { - "description": "A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "needsMap": { - "description": "Whether the client must identify the map.", - "$ref": "#/definitions/boolean" - }, - "_needsMap": { - "description": "Extensions for needsMap", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TerminologyCapabilities_Closure": { - "description": "A TerminologyCapabilities resource documents a set of capabilities (behaviors) of a FHIR Terminology Server that may be used as a statement of actual server functionality or a statement of required or desired server implementation.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "translation": { - "description": "If cross-system closure is supported.", - "$ref": "#/definitions/boolean" - }, - "_translation": { - "description": "Extensions for translation", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TestReport": { - "description": "A summary of information based on the results of executing a TestScript.", - "properties": { - "resourceType": { - "description": "This is a TestReport resource", - "const": "TestReport" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "Identifier for the TestScript assigned for external purposes outside the context of FHIR.", - "$ref": "#/definitions/Identifier" - }, - "name": { - "description": "A free text natural language name identifying the executed TestScript.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The current state of this test report.", - "enum": [ - "completed", - "in-progress", - "waiting", - "stopped", - "entered-in-error" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "testScript": { - "description": "Ideally this is an absolute URL that is used to identify the version-specific TestScript that was executed, matching the `TestScript.url`.", - "$ref": "#/definitions/Reference" - }, - "result": { - "description": "The overall result from the execution of the TestScript.", - "enum": [ - "pass", - "fail", - "pending" - ] - }, - "_result": { - "description": "Extensions for result", - "$ref": "#/definitions/Element" - }, - "score": { - "description": "The final score (percentage of tests passed) resulting from the execution of the TestScript.", - "$ref": "#/definitions/decimal" - }, - "_score": { - "description": "Extensions for score", - "$ref": "#/definitions/Element" - }, - "tester": { - "description": "Name of the tester producing this report (Organization or individual).", - "$ref": "#/definitions/string" - }, - "_tester": { - "description": "Extensions for tester", - "$ref": "#/definitions/Element" - }, - "issued": { - "description": "When the TestScript was executed and this TestReport was generated.", - "$ref": "#/definitions/dateTime" - }, - "_issued": { - "description": "Extensions for issued", - "$ref": "#/definitions/Element" - }, - "participant": { - "description": "A participant in the test execution, either the execution engine, a client, or a server.", - "items": { - "$ref": "#/definitions/TestReport_Participant" - }, - "type": "array" - }, - "setup": { - "description": "The results of the series of required setup operations before the tests were executed.", - "$ref": "#/definitions/TestReport_Setup" - }, - "test": { - "description": "A test executed from the test script.", - "items": { - "$ref": "#/definitions/TestReport_Test" - }, - "type": "array" - }, - "teardown": { - "description": "The results of the series of operations required to clean up after all the tests were executed (successfully or otherwise).", - "$ref": "#/definitions/TestReport_Teardown" - } - }, - "additionalProperties": false, - "required": [ - "testScript", - "resourceType" - ] - }, - "TestReport_Participant": { - "description": "A summary of information based on the results of executing a TestScript.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "The type of participant.", - "enum": [ - "test-engine", - "client", - "server" - ] - }, - "_type": { - "description": "Extensions for type", - "$ref": "#/definitions/Element" - }, - "uri": { - "description": "The uri of the participant. An absolute URL is preferred.", - "$ref": "#/definitions/uri" - }, - "_uri": { - "description": "Extensions for uri", - "$ref": "#/definitions/Element" - }, - "display": { - "description": "The display name of the participant.", - "$ref": "#/definitions/string" - }, - "_display": { - "description": "Extensions for display", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TestReport_Setup": { - "description": "A summary of information based on the results of executing a TestScript.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "action": { - "description": "Action would contain either an operation or an assertion.", - "items": { - "$ref": "#/definitions/TestReport_Action" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "action" - ] - }, - "TestReport_Action": { - "description": "A summary of information based on the results of executing a TestScript.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "operation": { - "description": "The operation performed.", - "$ref": "#/definitions/TestReport_Operation" - }, - "assert": { - "description": "The results of the assertion performed on the previous operations.", - "$ref": "#/definitions/TestReport_Assert" - } - }, - "additionalProperties": false - }, - "TestReport_Operation": { - "description": "A summary of information based on the results of executing a TestScript.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "result": { - "description": "The result of this operation.", - "enum": [ - "pass", - "skip", - "fail", - "warning", - "error" - ] - }, - "_result": { - "description": "Extensions for result", - "$ref": "#/definitions/Element" - }, - "message": { - "description": "An explanatory message associated with the result.", - "$ref": "#/definitions/markdown" - }, - "_message": { - "description": "Extensions for message", - "$ref": "#/definitions/Element" - }, - "detail": { - "description": "A link to further details on the result.", - "$ref": "#/definitions/uri" - }, - "_detail": { - "description": "Extensions for detail", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TestReport_Assert": { - "description": "A summary of information based on the results of executing a TestScript.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "result": { - "description": "The result of this assertion.", - "enum": [ - "pass", - "skip", - "fail", - "warning", - "error" - ] - }, - "_result": { - "description": "Extensions for result", - "$ref": "#/definitions/Element" - }, - "message": { - "description": "An explanatory message associated with the result.", - "$ref": "#/definitions/markdown" - }, - "_message": { - "description": "Extensions for message", - "$ref": "#/definitions/Element" - }, - "detail": { - "description": "A link to further details on the result.", - "$ref": "#/definitions/string" - }, - "_detail": { - "description": "Extensions for detail", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TestReport_Test": { - "description": "A summary of information based on the results of executing a TestScript.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The name of this test used for tracking/logging purposes by test engines.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A short description of the test used by test engines for tracking and reporting purposes.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "action": { - "description": "Action would contain either an operation or an assertion.", - "items": { - "$ref": "#/definitions/TestReport_Action1" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "action" - ] - }, - "TestReport_Action1": { - "description": "A summary of information based on the results of executing a TestScript.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "operation": { - "description": "An operation would involve a REST request to a server.", - "$ref": "#/definitions/TestReport_Operation" - }, - "assert": { - "description": "The results of the assertion performed on the previous operations.", - "$ref": "#/definitions/TestReport_Assert" - } - }, - "additionalProperties": false - }, - "TestReport_Teardown": { - "description": "A summary of information based on the results of executing a TestScript.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "action": { - "description": "The teardown action will only contain an operation.", - "items": { - "$ref": "#/definitions/TestReport_Action2" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "action" - ] - }, - "TestReport_Action2": { - "description": "A summary of information based on the results of executing a TestScript.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "operation": { - "description": "An operation would involve a REST request to a server.", - "$ref": "#/definitions/TestReport_Operation" - } - }, - "additionalProperties": false, - "required": [ - "operation" - ] - }, - "TestScript": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "resourceType": { - "description": "This is a TestScript resource", - "const": "TestScript" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this test script when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this test script is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the test script is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this test script when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "$ref": "#/definitions/Identifier" - }, - "version": { - "description": "The identifier that is used to identify this version of the test script when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the test script author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the test script. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the test script.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this test script. Enables tracking the life-cycle of the content.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this test script is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the test script was published. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the test script changes.", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the test script.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the test script from a consumer\u0027s perspective.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate test script instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the test script is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "purpose": { - "description": "Explanation of why this test script is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the test script and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the test script.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "origin": { - "description": "An abstract server used in operations within this test script in the origin element.", - "items": { - "$ref": "#/definitions/TestScript_Origin" - }, - "type": "array" - }, - "destination": { - "description": "An abstract server used in operations within this test script in the destination element.", - "items": { - "$ref": "#/definitions/TestScript_Destination" - }, - "type": "array" - }, - "metadata": { - "description": "The required capability must exist and are assumed to function correctly on the FHIR server being tested.", - "$ref": "#/definitions/TestScript_Metadata" - }, - "fixture": { - "description": "Fixture in the test script - by reference (uri). All fixtures are required for the test script to execute.", - "items": { - "$ref": "#/definitions/TestScript_Fixture" - }, - "type": "array" - }, - "profile": { - "description": "Reference to the profile to be used for validation.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "variable": { - "description": "Variable is set based either on element value in response body or on header field value in the response headers.", - "items": { - "$ref": "#/definitions/TestScript_Variable" - }, - "type": "array" - }, - "setup": { - "description": "A series of required setup operations before tests are executed.", - "$ref": "#/definitions/TestScript_Setup" - }, - "test": { - "description": "A test in this script.", - "items": { - "$ref": "#/definitions/TestScript_Test" - }, - "type": "array" - }, - "teardown": { - "description": "A series of operations required to clean up after all the tests are executed (successfully or otherwise).", - "$ref": "#/definitions/TestScript_Teardown" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "TestScript_Origin": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "index": { - "description": "Abstract name given to an origin server in this test script. The name is provided as a number starting at 1.", - "$ref": "#/definitions/integer" - }, - "_index": { - "description": "Extensions for index", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "The type of origin profile the test system supports.", - "$ref": "#/definitions/Coding" - } - }, - "additionalProperties": false, - "required": [ - "profile" - ] - }, - "TestScript_Destination": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "index": { - "description": "Abstract name given to a destination server in this test script. The name is provided as a number starting at 1.", - "$ref": "#/definitions/integer" - }, - "_index": { - "description": "Extensions for index", - "$ref": "#/definitions/Element" - }, - "profile": { - "description": "The type of destination profile the test system supports.", - "$ref": "#/definitions/Coding" - } - }, - "additionalProperties": false, - "required": [ - "profile" - ] - }, - "TestScript_Metadata": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "link": { - "description": "A link to the FHIR specification that this test is covering.", - "items": { - "$ref": "#/definitions/TestScript_Link" - }, - "type": "array" - }, - "capability": { - "description": "Capabilities that must exist and are assumed to function correctly on the FHIR server being tested.", - "items": { - "$ref": "#/definitions/TestScript_Capability" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "capability" - ] - }, - "TestScript_Link": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "URL to a particular requirement or feature within the FHIR specification.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "Short description of the link.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TestScript_Capability": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "required": { - "description": "Whether or not the test execution will require the given capabilities of the server in order for this test script to execute.", - "$ref": "#/definitions/boolean" - }, - "_required": { - "description": "Extensions for required", - "$ref": "#/definitions/Element" - }, - "validated": { - "description": "Whether or not the test execution will validate the given capabilities of the server in order for this test script to execute.", - "$ref": "#/definitions/boolean" - }, - "_validated": { - "description": "Extensions for validated", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "Description of the capabilities that this test script is requiring the server to support.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "origin": { - "description": "Which origin server these requirements apply to.", - "items": { - "$ref": "#/definitions/integer" - }, - "type": "array" - }, - "_origin": { - "description": "Extensions for origin", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "destination": { - "description": "Which server these requirements apply to.", - "$ref": "#/definitions/integer" - }, - "_destination": { - "description": "Extensions for destination", - "$ref": "#/definitions/Element" - }, - "link": { - "description": "Links to the FHIR specification that describes this interaction and the resources involved in more detail.", - "items": { - "$ref": "#/definitions/uri" - }, - "type": "array" - }, - "_link": { - "description": "Extensions for link", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "capabilities": { - "description": "Minimum capabilities required of server for test script to execute successfully. If server does not meet at a minimum the referenced capability statement, then all tests in this script are skipped.", - "$ref": "#/definitions/canonical" - } - }, - "additionalProperties": false, - "required": [ - "capabilities" - ] - }, - "TestScript_Fixture": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "autocreate": { - "description": "Whether or not to implicitly create the fixture during setup. If true, the fixture is automatically created on each server being tested during setup, therefore no create operation is required for this fixture in the TestScript.setup section.", - "$ref": "#/definitions/boolean" - }, - "_autocreate": { - "description": "Extensions for autocreate", - "$ref": "#/definitions/Element" - }, - "autodelete": { - "description": "Whether or not to implicitly delete the fixture during teardown. If true, the fixture is automatically deleted on each server being tested during teardown, therefore no delete operation is required for this fixture in the TestScript.teardown section.", - "$ref": "#/definitions/boolean" - }, - "_autodelete": { - "description": "Extensions for autodelete", - "$ref": "#/definitions/Element" - }, - "resource": { - "description": "Reference to the resource (containing the contents of the resource needed for operations).", - "$ref": "#/definitions/Reference" - } - }, - "additionalProperties": false - }, - "TestScript_Variable": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Descriptive name for this variable.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "defaultValue": { - "description": "A default, hard-coded, or user-defined value for this variable.", - "$ref": "#/definitions/string" - }, - "_defaultValue": { - "description": "Extensions for defaultValue", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A free text natural language description of the variable and its purpose.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "The FHIRPath expression to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified.", - "$ref": "#/definitions/string" - }, - "_expression": { - "description": "Extensions for expression", - "$ref": "#/definitions/Element" - }, - "headerField": { - "description": "Will be used to grab the HTTP header field value from the headers that sourceId is pointing to.", - "$ref": "#/definitions/string" - }, - "_headerField": { - "description": "Extensions for headerField", - "$ref": "#/definitions/Element" - }, - "hint": { - "description": "Displayable text string with hint help information to the user when entering a default value.", - "$ref": "#/definitions/string" - }, - "_hint": { - "description": "Extensions for hint", - "$ref": "#/definitions/Element" - }, - "path": { - "description": "XPath or JSONPath to evaluate against the fixture body. When variables are defined, only one of either expression, headerField or path must be specified.", - "$ref": "#/definitions/string" - }, - "_path": { - "description": "Extensions for path", - "$ref": "#/definitions/Element" - }, - "sourceId": { - "description": "Fixture to evaluate the XPath/JSONPath expression or the headerField against within this variable.", - "$ref": "#/definitions/id" - }, - "_sourceId": { - "description": "Extensions for sourceId", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TestScript_Setup": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "action": { - "description": "Action would contain either an operation or an assertion.", - "items": { - "$ref": "#/definitions/TestScript_Action" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "action" - ] - }, - "TestScript_Action": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "operation": { - "description": "The operation to perform.", - "$ref": "#/definitions/TestScript_Operation" - }, - "assert": { - "description": "Evaluates the results of previous operations to determine if the server under test behaves appropriately.", - "$ref": "#/definitions/TestScript_Assert" - } - }, - "additionalProperties": false - }, - "TestScript_Operation": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "type": { - "description": "Server interaction or operation type.", - "$ref": "#/definitions/Coding" - }, - "resource": { - "description": "The type of the resource. See http://build.fhir.org/resourcelist.html.", - "$ref": "#/definitions/code" - }, - "_resource": { - "description": "Extensions for resource", - "$ref": "#/definitions/Element" - }, - "label": { - "description": "The label would be used for tracking/logging purposes by test engines.", - "$ref": "#/definitions/string" - }, - "_label": { - "description": "Extensions for label", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "The description would be used by test engines for tracking and reporting purposes.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "accept": { - "description": "The mime-type to use for RESTful operation in the \u0027Accept\u0027 header.", - "$ref": "#/definitions/code" - }, - "_accept": { - "description": "Extensions for accept", - "$ref": "#/definitions/Element" - }, - "contentType": { - "description": "The mime-type to use for RESTful operation in the \u0027Content-Type\u0027 header.", - "$ref": "#/definitions/code" - }, - "_contentType": { - "description": "Extensions for contentType", - "$ref": "#/definitions/Element" - }, - "destination": { - "description": "The server where the request message is destined for. Must be one of the server numbers listed in TestScript.destination section.", - "$ref": "#/definitions/integer" - }, - "_destination": { - "description": "Extensions for destination", - "$ref": "#/definitions/Element" - }, - "encodeRequestUrl": { - "description": "Whether or not to implicitly send the request url in encoded format. The default is true to match the standard RESTful client behavior. Set to false when communicating with a server that does not support encoded url paths.", - "$ref": "#/definitions/boolean" - }, - "_encodeRequestUrl": { - "description": "Extensions for encodeRequestUrl", - "$ref": "#/definitions/Element" - }, - "method": { - "description": "The HTTP method the test engine MUST use for this operation regardless of any other operation details.", - "enum": [ - "delete", - "get", - "options", - "patch", - "post", - "put", - "head" - ] - }, - "_method": { - "description": "Extensions for method", - "$ref": "#/definitions/Element" - }, - "origin": { - "description": "The server where the request message originates from. Must be one of the server numbers listed in TestScript.origin section.", - "$ref": "#/definitions/integer" - }, - "_origin": { - "description": "Extensions for origin", - "$ref": "#/definitions/Element" - }, - "params": { - "description": "Path plus parameters after [type]. Used to set parts of the request URL explicitly.", - "$ref": "#/definitions/string" - }, - "_params": { - "description": "Extensions for params", - "$ref": "#/definitions/Element" - }, - "requestHeader": { - "description": "Header elements would be used to set HTTP headers.", - "items": { - "$ref": "#/definitions/TestScript_RequestHeader" - }, - "type": "array" - }, - "requestId": { - "description": "The fixture id (maybe new) to map to the request.", - "$ref": "#/definitions/id" - }, - "_requestId": { - "description": "Extensions for requestId", - "$ref": "#/definitions/Element" - }, - "responseId": { - "description": "The fixture id (maybe new) to map to the response.", - "$ref": "#/definitions/id" - }, - "_responseId": { - "description": "Extensions for responseId", - "$ref": "#/definitions/Element" - }, - "sourceId": { - "description": "The id of the fixture used as the body of a PUT or POST request.", - "$ref": "#/definitions/id" - }, - "_sourceId": { - "description": "Extensions for sourceId", - "$ref": "#/definitions/Element" - }, - "targetId": { - "description": "Id of fixture used for extracting the [id], [type], and [vid] for GET requests.", - "$ref": "#/definitions/id" - }, - "_targetId": { - "description": "Extensions for targetId", - "$ref": "#/definitions/Element" - }, - "url": { - "description": "Complete request URL.", - "$ref": "#/definitions/string" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TestScript_RequestHeader": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "field": { - "description": "The HTTP header field e.g. \"Accept\".", - "$ref": "#/definitions/string" - }, - "_field": { - "description": "Extensions for field", - "$ref": "#/definitions/Element" - }, - "value": { - "description": "The value of the header e.g. \"application/fhir+xml\".", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TestScript_Assert": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "label": { - "description": "The label would be used for tracking/logging purposes by test engines.", - "$ref": "#/definitions/string" - }, - "_label": { - "description": "Extensions for label", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "The description would be used by test engines for tracking and reporting purposes.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "direction": { - "description": "The direction to use for the assertion.", - "enum": [ - "response", - "request" - ] - }, - "_direction": { - "description": "Extensions for direction", - "$ref": "#/definitions/Element" - }, - "compareToSourceId": { - "description": "Id of the source fixture used as the contents to be evaluated by either the \"source/expression\" or \"sourceId/path\" definition.", - "$ref": "#/definitions/string" - }, - "_compareToSourceId": { - "description": "Extensions for compareToSourceId", - "$ref": "#/definitions/Element" - }, - "compareToSourceExpression": { - "description": "The FHIRPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.", - "$ref": "#/definitions/string" - }, - "_compareToSourceExpression": { - "description": "Extensions for compareToSourceExpression", - "$ref": "#/definitions/Element" - }, - "compareToSourcePath": { - "description": "XPath or JSONPath expression to evaluate against the source fixture. When compareToSourceId is defined, either compareToSourceExpression or compareToSourcePath must be defined, but not both.", - "$ref": "#/definitions/string" - }, - "_compareToSourcePath": { - "description": "Extensions for compareToSourcePath", - "$ref": "#/definitions/Element" - }, - "contentType": { - "description": "The mime-type contents to compare against the request or response message \u0027Content-Type\u0027 header.", - "$ref": "#/definitions/code" - }, - "_contentType": { - "description": "Extensions for contentType", - "$ref": "#/definitions/Element" - }, - "expression": { - "description": "The FHIRPath expression to be evaluated against the request or response message contents - HTTP headers and payload.", - "$ref": "#/definitions/string" - }, - "_expression": { - "description": "Extensions for expression", - "$ref": "#/definitions/Element" - }, - "headerField": { - "description": "The HTTP header field name e.g. \u0027Location\u0027.", - "$ref": "#/definitions/string" - }, - "_headerField": { - "description": "Extensions for headerField", - "$ref": "#/definitions/Element" - }, - "minimumId": { - "description": "The ID of a fixture. Asserts that the response contains at a minimum the fixture specified by minimumId.", - "$ref": "#/definitions/string" - }, - "_minimumId": { - "description": "Extensions for minimumId", - "$ref": "#/definitions/Element" - }, - "navigationLinks": { - "description": "Whether or not the test execution performs validation on the bundle navigation links.", - "$ref": "#/definitions/boolean" - }, - "_navigationLinks": { - "description": "Extensions for navigationLinks", - "$ref": "#/definitions/Element" - }, - "operator": { - "description": "The operator type defines the conditional behavior of the assert. If not defined, the default is equals.", - "enum": [ - "equals", - "notEquals", - "in", - "notIn", - "greaterThan", - "lessThan", - "empty", - "notEmpty", - "contains", - "notContains", - "eval" - ] - }, - "_operator": { - "description": "Extensions for operator", - "$ref": "#/definitions/Element" - }, - "path": { - "description": "The XPath or JSONPath expression to be evaluated against the fixture representing the response received from server.", - "$ref": "#/definitions/string" - }, - "_path": { - "description": "Extensions for path", - "$ref": "#/definitions/Element" - }, - "requestMethod": { - "description": "The request method or HTTP operation code to compare against that used by the client system under test.", - "enum": [ - "delete", - "get", - "options", - "patch", - "post", - "put", - "head" - ] - }, - "_requestMethod": { - "description": "Extensions for requestMethod", - "$ref": "#/definitions/Element" - }, - "requestURL": { - "description": "The value to use in a comparison against the request URL path string.", - "$ref": "#/definitions/string" - }, - "_requestURL": { - "description": "Extensions for requestURL", - "$ref": "#/definitions/Element" - }, - "resource": { - "description": "The type of the resource. See http://build.fhir.org/resourcelist.html.", - "$ref": "#/definitions/code" - }, - "_resource": { - "description": "Extensions for resource", - "$ref": "#/definitions/Element" - }, - "response": { - "description": "okay | created | noContent | notModified | bad | forbidden | notFound | methodNotAllowed | conflict | gone | preconditionFailed | unprocessable.", - "enum": [ - "okay", - "created", - "noContent", - "notModified", - "bad", - "forbidden", - "notFound", - "methodNotAllowed", - "conflict", - "gone", - "preconditionFailed", - "unprocessable" - ] - }, - "_response": { - "description": "Extensions for response", - "$ref": "#/definitions/Element" - }, - "responseCode": { - "description": "The value of the HTTP response code to be tested.", - "$ref": "#/definitions/string" - }, - "_responseCode": { - "description": "Extensions for responseCode", - "$ref": "#/definitions/Element" - }, - "sourceId": { - "description": "Fixture to evaluate the XPath/JSONPath expression or the headerField against.", - "$ref": "#/definitions/id" - }, - "_sourceId": { - "description": "Extensions for sourceId", - "$ref": "#/definitions/Element" - }, - "validateProfileId": { - "description": "The ID of the Profile to validate against.", - "$ref": "#/definitions/id" - }, - "_validateProfileId": { - "description": "Extensions for validateProfileId", - "$ref": "#/definitions/Element" - }, - "value": { - "description": "The value to compare to.", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - }, - "warningOnly": { - "description": "Whether or not the test execution will produce a warning only on error for this assert.", - "$ref": "#/definitions/boolean" - }, - "_warningOnly": { - "description": "Extensions for warningOnly", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "TestScript_Test": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "The name of this test used for tracking/logging purposes by test engines.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "description": { - "description": "A short description of the test used by test engines for tracking and reporting purposes.", - "$ref": "#/definitions/string" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "action": { - "description": "Action would contain either an operation or an assertion.", - "items": { - "$ref": "#/definitions/TestScript_Action1" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "action" - ] - }, - "TestScript_Action1": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "operation": { - "description": "An operation would involve a REST request to a server.", - "$ref": "#/definitions/TestScript_Operation" - }, - "assert": { - "description": "Evaluates the results of previous operations to determine if the server under test behaves appropriately.", - "$ref": "#/definitions/TestScript_Assert" - } - }, - "additionalProperties": false - }, - "TestScript_Teardown": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "action": { - "description": "The teardown action will only contain an operation.", - "items": { - "$ref": "#/definitions/TestScript_Action2" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "action" - ] - }, - "TestScript_Action2": { - "description": "A structured set of tests against a FHIR server or client implementation to determine compliance against the FHIR specification.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "operation": { - "description": "An operation would involve a REST request to a server.", - "$ref": "#/definitions/TestScript_Operation" - } - }, - "additionalProperties": false, - "required": [ - "operation" - ] - }, - "ValueSet": { - "description": "A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between [[[CodeSystem]]] definitions and their use in [coded elements](terminologies.html).", - "properties": { - "resourceType": { - "description": "This is a ValueSet resource", - "const": "ValueSet" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "url": { - "description": "An absolute URI that is used to identify this value set when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which at which an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers.", - "$ref": "#/definitions/uri" - }, - "_url": { - "description": "Extensions for url", - "$ref": "#/definitions/Element" - }, - "identifier": { - "description": "A formal identifier that is used to identify this value set when it is represented in other formats, or referenced in a specification, model, design or an instance.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "version": { - "description": "The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "name": { - "description": "A natural language name identifying the value set. This name should be usable as an identifier for the module by machine processing applications such as code generation.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "title": { - "description": "A short, descriptive, user-friendly title for the value set.", - "$ref": "#/definitions/string" - }, - "_title": { - "description": "Extensions for title", - "$ref": "#/definitions/Element" - }, - "status": { - "description": "The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state.", - "enum": [ - "draft", - "active", - "retired", - "unknown" - ] - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "experimental": { - "description": "A Boolean value to indicate that this value set is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage.", - "$ref": "#/definitions/boolean" - }, - "_experimental": { - "description": "Extensions for experimental", - "$ref": "#/definitions/Element" - }, - "date": { - "description": "The date (and optionally time) when the value set was created or revised (e.g. the \u0027content logical definition\u0027).", - "$ref": "#/definitions/dateTime" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "publisher": { - "description": "The name of the organization or individual that published the value set.", - "$ref": "#/definitions/string" - }, - "_publisher": { - "description": "Extensions for publisher", - "$ref": "#/definitions/Element" - }, - "contact": { - "description": "Contact details to assist a user in finding and communicating with the publisher.", - "items": { - "$ref": "#/definitions/ContactDetail" - }, - "type": "array" - }, - "description": { - "description": "A free text natural language description of the value set from a consumer\u0027s perspective. The textual description specifies the span of meanings for concepts to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set.", - "$ref": "#/definitions/markdown" - }, - "_description": { - "description": "Extensions for description", - "$ref": "#/definitions/Element" - }, - "useContext": { - "description": "The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate value set instances.", - "items": { - "$ref": "#/definitions/UsageContext" - }, - "type": "array" - }, - "jurisdiction": { - "description": "A legal or geographic region in which the value set is intended to be used.", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "immutable": { - "description": "If this is set to \u0027true\u0027, then no new versions of the content logical definition can be created. Note: Other metadata might still change.", - "$ref": "#/definitions/boolean" - }, - "_immutable": { - "description": "Extensions for immutable", - "$ref": "#/definitions/Element" - }, - "purpose": { - "description": "Explanation of why this value set is needed and why it has been designed as it has.", - "$ref": "#/definitions/markdown" - }, - "_purpose": { - "description": "Extensions for purpose", - "$ref": "#/definitions/Element" - }, - "copyright": { - "description": "A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set.", - "$ref": "#/definitions/markdown" - }, - "_copyright": { - "description": "Extensions for copyright", - "$ref": "#/definitions/Element" - }, - "compose": { - "description": "A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. This is also known as the Content Logical Definition (CLD).", - "$ref": "#/definitions/ValueSet_Compose" - }, - "expansion": { - "description": "A value set can also be \"expanded\", where the value set is turned into a simple collection of enumerated codes. This element holds the expansion, if it has been performed.", - "$ref": "#/definitions/ValueSet_Expansion" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "ValueSet_Compose": { - "description": "A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between [[[CodeSystem]]] definitions and their use in [coded elements](terminologies.html).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "lockedDate": { - "description": "The Locked Date is the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version.", - "$ref": "#/definitions/date" - }, - "_lockedDate": { - "description": "Extensions for lockedDate", - "$ref": "#/definitions/Element" - }, - "inactive": { - "description": "Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive \u003d true, inactive codes are to be included in the expansion, if inactive \u003d false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included).", - "$ref": "#/definitions/boolean" - }, - "_inactive": { - "description": "Extensions for inactive", - "$ref": "#/definitions/Element" - }, - "include": { - "description": "Include one or more codes from a code system or other value set(s).", - "items": { - "$ref": "#/definitions/ValueSet_Include" - }, - "type": "array" - }, - "exclude": { - "description": "Exclude one or more codes from the value set based on code system filters and/or other value sets.", - "items": { - "$ref": "#/definitions/ValueSet_Include" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "include" - ] - }, - "ValueSet_Include": { - "description": "A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between [[[CodeSystem]]] definitions and their use in [coded elements](terminologies.html).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "system": { - "description": "An absolute URI which is the code system from which the selected codes come from.", - "$ref": "#/definitions/uri" - }, - "_system": { - "description": "Extensions for system", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The version of the code system that the codes are selected from, or the special version \u0027*\u0027 for all versions.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "concept": { - "description": "Specifies a concept to be included or excluded.", - "items": { - "$ref": "#/definitions/ValueSet_Concept" - }, - "type": "array" - }, - "filter": { - "description": "Select concepts by specify a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If multiple filters are specified, they SHALL all be true.", - "items": { - "$ref": "#/definitions/ValueSet_Filter" - }, - "type": "array" - }, - "valueSet": { - "description": "Selects the concepts found in this value set (based on its value set definition). This is an absolute URI that is a reference to ValueSet.url. If multiple value sets are specified this includes the union of the contents of all of the referenced value sets.", - "items": { - "$ref": "#/definitions/canonical" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ValueSet_Concept": { - "description": "A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between [[[CodeSystem]]] definitions and their use in [coded elements](terminologies.html).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "code": { - "description": "Specifies a code for the concept to be included or excluded.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "display": { - "description": "The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system.", - "$ref": "#/definitions/string" - }, - "_display": { - "description": "Extensions for display", - "$ref": "#/definitions/Element" - }, - "designation": { - "description": "Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc.", - "items": { - "$ref": "#/definitions/ValueSet_Designation" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ValueSet_Designation": { - "description": "A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between [[[CodeSystem]]] definitions and their use in [coded elements](terminologies.html).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "language": { - "description": "The language this designation is defined for.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "use": { - "description": "A code that represents types of uses of designations.", - "$ref": "#/definitions/Coding" - }, - "value": { - "description": "The text value for this designation.", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ValueSet_Filter": { - "description": "A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between [[[CodeSystem]]] definitions and their use in [coded elements](terminologies.html).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "property": { - "description": "A code that identifies a property or a filter defined in the code system.", - "$ref": "#/definitions/code" - }, - "_property": { - "description": "Extensions for property", - "$ref": "#/definitions/Element" - }, - "op": { - "description": "The kind of operation to perform as a part of the filter criteria.", - "enum": [ - "\u003d", - "is-a", - "descendent-of", - "is-not-a", - "regex", - "in", - "not-in", - "generalizes", - "exists" - ] - }, - "_op": { - "description": "Extensions for op", - "$ref": "#/definitions/Element" - }, - "value": { - "description": "The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is \u0027regex\u0027, or one of the values (true and false), when the operation is \u0027exists\u0027.", - "$ref": "#/definitions/string" - }, - "_value": { - "description": "Extensions for value", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ValueSet_Expansion": { - "description": "A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between [[[CodeSystem]]] definitions and their use in [coded elements](terminologies.html).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier.", - "$ref": "#/definitions/uri" - }, - "_identifier": { - "description": "Extensions for identifier", - "$ref": "#/definitions/Element" - }, - "timestamp": { - "description": "The time at which the expansion was produced by the expanding system.", - "$ref": "#/definitions/dateTime" - }, - "_timestamp": { - "description": "Extensions for timestamp", - "$ref": "#/definitions/Element" - }, - "total": { - "description": "The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter.", - "$ref": "#/definitions/integer" - }, - "_total": { - "description": "Extensions for total", - "$ref": "#/definitions/Element" - }, - "offset": { - "description": "If paging is being used, the offset at which this resource starts. I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present.", - "$ref": "#/definitions/integer" - }, - "_offset": { - "description": "Extensions for offset", - "$ref": "#/definitions/Element" - }, - "parameter": { - "description": "A parameter that controlled the expansion process. These parameters may be used by users of expanded value sets to check whether the expansion is suitable for a particular purpose, or to pick the correct expansion.", - "items": { - "$ref": "#/definitions/ValueSet_Parameter" - }, - "type": "array" - }, - "contains": { - "description": "The codes that are contained in the value set expansion.", - "items": { - "$ref": "#/definitions/ValueSet_Contains" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "ValueSet_Parameter": { - "description": "A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between [[[CodeSystem]]] definitions and their use in [coded elements](terminologies.html).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "name": { - "description": "Name of the input parameter to the $expand operation; may be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process.", - "$ref": "#/definitions/string" - }, - "_name": { - "description": "Extensions for name", - "$ref": "#/definitions/Element" - }, - "valueString": { - "description": "The value of the parameter.", - "pattern": "^[ \\r\\n\\t\\S]+$", - "type": "string" - }, - "_valueString": { - "description": "Extensions for valueString", - "$ref": "#/definitions/Element" - }, - "valueBoolean": { - "description": "The value of the parameter.", - "pattern": "^true|false$", - "type": "boolean" - }, - "_valueBoolean": { - "description": "Extensions for valueBoolean", - "$ref": "#/definitions/Element" - }, - "valueInteger": { - "description": "The value of the parameter.", - "pattern": "^-?([0]|([1-9][0-9]*))$", - "type": "number" - }, - "_valueInteger": { - "description": "Extensions for valueInteger", - "$ref": "#/definitions/Element" - }, - "valueDecimal": { - "description": "The value of the parameter.", - "pattern": "^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?$", - "type": "number" - }, - "_valueDecimal": { - "description": "Extensions for valueDecimal", - "$ref": "#/definitions/Element" - }, - "valueUri": { - "description": "The value of the parameter.", - "pattern": "^\\S*$", - "type": "string" - }, - "_valueUri": { - "description": "Extensions for valueUri", - "$ref": "#/definitions/Element" - }, - "valueCode": { - "description": "The value of the parameter.", - "pattern": "^[^\\s]+(\\s[^\\s]+)*$", - "type": "string" - }, - "_valueCode": { - "description": "Extensions for valueCode", - "$ref": "#/definitions/Element" - }, - "valueDateTime": { - "description": "The value of the parameter.", - "pattern": "^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)))?)?)?$", - "type": "string" - }, - "_valueDateTime": { - "description": "Extensions for valueDateTime", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - }, - "ValueSet_Contains": { - "description": "A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between [[[CodeSystem]]] definitions and their use in [coded elements](terminologies.html).", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "system": { - "description": "An absolute URI which is the code system in which the code for this item in the expansion is defined.", - "$ref": "#/definitions/uri" - }, - "_system": { - "description": "Extensions for system", - "$ref": "#/definitions/Element" - }, - "abstract": { - "description": "If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value.", - "$ref": "#/definitions/boolean" - }, - "_abstract": { - "description": "Extensions for abstract", - "$ref": "#/definitions/Element" - }, - "inactive": { - "description": "If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified whether an concept is inactive (and it may depend on the context of use).", - "$ref": "#/definitions/boolean" - }, - "_inactive": { - "description": "Extensions for inactive", - "$ref": "#/definitions/Element" - }, - "version": { - "description": "The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged.", - "$ref": "#/definitions/string" - }, - "_version": { - "description": "Extensions for version", - "$ref": "#/definitions/Element" - }, - "code": { - "description": "The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set.", - "$ref": "#/definitions/code" - }, - "_code": { - "description": "Extensions for code", - "$ref": "#/definitions/Element" - }, - "display": { - "description": "The recommended display for this item in the expansion.", - "$ref": "#/definitions/string" - }, - "_display": { - "description": "Extensions for display", - "$ref": "#/definitions/Element" - }, - "designation": { - "description": "Additional representations for this item - other languages, aliases, specialized purposes, used for particular purposes, etc. These are relevant when the conditions of the expansion do not fix to a single correct representation.", - "items": { - "$ref": "#/definitions/ValueSet_Designation" - }, - "type": "array" - }, - "contains": { - "description": "Other codes and entries contained under this entry in the hierarchy.", - "items": { - "$ref": "#/definitions/ValueSet_Contains" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "VerificationResult": { - "description": "Describes validation requirements, source(s), status and dates for one or more elements.", - "properties": { - "resourceType": { - "description": "This is a VerificationResult resource", - "const": "VerificationResult" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "target": { - "description": "A resource that was validated.", - "items": { - "$ref": "#/definitions/Reference" - }, - "type": "array" - }, - "targetLocation": { - "description": "The fhirpath location(s) within the resource that was validated.", - "items": { - "$ref": "#/definitions/string" - }, - "type": "array" - }, - "_targetLocation": { - "description": "Extensions for targetLocation", - "items": { - "$ref": "#/definitions/Element" - }, - "type": "array" - }, - "need": { - "description": "The frequency with which the target must be validated (none; initial; periodic).", - "$ref": "#/definitions/CodeableConcept" - }, - "status": { - "description": "The validation status of the target (attested; validated; in process; requires revalidation; validation failed; revalidation failed).", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "statusDate": { - "description": "When the validation status was updated.", - "$ref": "#/definitions/dateTime" - }, - "_statusDate": { - "description": "Extensions for statusDate", - "$ref": "#/definitions/Element" - }, - "validationType": { - "description": "What the target is validated against (nothing; primary source; multiple sources).", - "$ref": "#/definitions/CodeableConcept" - }, - "validationProcess": { - "description": "The primary process by which the target is validated (edit check; value set; primary source; multiple sources; standalone; in context).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "frequency": { - "description": "Frequency of revalidation.", - "$ref": "#/definitions/Timing" - }, - "lastPerformed": { - "description": "The date/time validation was last completed (including failed validations).", - "$ref": "#/definitions/dateTime" - }, - "_lastPerformed": { - "description": "Extensions for lastPerformed", - "$ref": "#/definitions/Element" - }, - "nextScheduled": { - "description": "The date when target is next validated, if appropriate.", - "$ref": "#/definitions/date" - }, - "_nextScheduled": { - "description": "Extensions for nextScheduled", - "$ref": "#/definitions/Element" - }, - "failureAction": { - "description": "The result if validation fails (fatal; warning; record only; none).", - "$ref": "#/definitions/CodeableConcept" - }, - "primarySource": { - "description": "Information about the primary source(s) involved in validation.", - "items": { - "$ref": "#/definitions/VerificationResult_PrimarySource" - }, - "type": "array" - }, - "attestation": { - "description": "Information about the entity attesting to information.", - "$ref": "#/definitions/VerificationResult_Attestation" - }, - "validator": { - "description": "Information about the entity validating information.", - "items": { - "$ref": "#/definitions/VerificationResult_Validator" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "resourceType" - ] - }, - "VerificationResult_PrimarySource": { - "description": "Describes validation requirements, source(s), status and dates for one or more elements.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "who": { - "description": "Reference to the primary source.", - "$ref": "#/definitions/Reference" - }, - "type": { - "description": "Type of primary source (License Board; Primary Education; Continuing Education; Postal Service; Relationship owner; Registration Authority; legal source; issuing source; authoritative source).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "communicationMethod": { - "description": "Method for communicating with the primary source (manual; API; Push).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - }, - "validationStatus": { - "description": "Status of the validation of the target against the primary source (successful; failed; unknown).", - "$ref": "#/definitions/CodeableConcept" - }, - "validationDate": { - "description": "When the target was validated against the primary source.", - "$ref": "#/definitions/dateTime" - }, - "_validationDate": { - "description": "Extensions for validationDate", - "$ref": "#/definitions/Element" - }, - "canPushUpdates": { - "description": "Ability of the primary source to push updates/alerts (yes; no; undetermined).", - "$ref": "#/definitions/CodeableConcept" - }, - "pushTypeAvailable": { - "description": "Type of alerts/updates the primary source can send (specific requested changes; any changes; as defined by source).", - "items": { - "$ref": "#/definitions/CodeableConcept" - }, - "type": "array" - } - }, - "additionalProperties": false - }, - "VerificationResult_Attestation": { - "description": "Describes validation requirements, source(s), status and dates for one or more elements.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "who": { - "description": "The individual or organization attesting to information.", - "$ref": "#/definitions/Reference" - }, - "onBehalfOf": { - "description": "When the who is asserting on behalf of another (organization or individual).", - "$ref": "#/definitions/Reference" - }, - "communicationMethod": { - "description": "The method by which attested information was submitted/retrieved (manual; API; Push).", - "$ref": "#/definitions/CodeableConcept" - }, - "date": { - "description": "The date the information was attested to.", - "$ref": "#/definitions/date" - }, - "_date": { - "description": "Extensions for date", - "$ref": "#/definitions/Element" - }, - "sourceIdentityCertificate": { - "description": "A digital identity certificate associated with the attestation source.", - "$ref": "#/definitions/string" - }, - "_sourceIdentityCertificate": { - "description": "Extensions for sourceIdentityCertificate", - "$ref": "#/definitions/Element" - }, - "proxyIdentityCertificate": { - "description": "A digital identity certificate associated with the proxy entity submitting attested information on behalf of the attestation source.", - "$ref": "#/definitions/string" - }, - "_proxyIdentityCertificate": { - "description": "Extensions for proxyIdentityCertificate", - "$ref": "#/definitions/Element" - }, - "proxySignature": { - "description": "Signed assertion by the proxy entity indicating that they have the right to submit attested information on behalf of the attestation source.", - "$ref": "#/definitions/Signature" - }, - "sourceSignature": { - "description": "Signed assertion by the attestation source that they have attested to the information.", - "$ref": "#/definitions/Signature" - } - }, - "additionalProperties": false - }, - "VerificationResult_Validator": { - "description": "Describes validation requirements, source(s), status and dates for one or more elements.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "organization": { - "description": "Reference to the organization validating information.", - "$ref": "#/definitions/Reference" - }, - "identityCertificate": { - "description": "A digital identity certificate associated with the validator.", - "$ref": "#/definitions/string" - }, - "_identityCertificate": { - "description": "Extensions for identityCertificate", - "$ref": "#/definitions/Element" - }, - "attestationSignature": { - "description": "Signed assertion by the validator that they have validated the information.", - "$ref": "#/definitions/Signature" - } - }, - "additionalProperties": false, - "required": [ - "organization" - ] - }, - "VisionPrescription": { - "description": "An authorization for the provision of glasses and/or contact lenses to a patient.", - "properties": { - "resourceType": { - "description": "This is a VisionPrescription resource", - "const": "VisionPrescription" - }, - "id": { - "description": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.", - "$ref": "#/definitions/id" - }, - "meta": { - "description": "The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content might not always be associated with version changes to the resource.", - "$ref": "#/definitions/Meta" - }, - "implicitRules": { - "description": "A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content. Often, this is a reference to an implementation guide that defines the special rules along with other profiles etc.", - "$ref": "#/definitions/uri" - }, - "_implicitRules": { - "description": "Extensions for implicitRules", - "$ref": "#/definitions/Element" - }, - "language": { - "description": "The base language in which the resource is written.", - "$ref": "#/definitions/code" - }, - "_language": { - "description": "Extensions for language", - "$ref": "#/definitions/Element" - }, - "text": { - "description": "A human-readable narrative that contains a summary of the resource and can be used to represent the content of the resource to a human. The narrative need not encode all the structured data, but is required to contain sufficient detail to make it \"clinically safe\" for a human to just read the narrative. Resource definitions may define what content should be represented in the narrative to ensure clinical safety.", - "$ref": "#/definitions/Narrative" - }, - "contained": { - "description": "These resources do not have an independent existence apart from the resource that contains them - they cannot be identified independently, and nor can they have their own independent transaction scope.", - "items": { - "$ref": "#/definitions/ResourceList" - }, - "type": "array" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the resource and that modifies the understanding of the element that contains it and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer is allowed to define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "identifier": { - "description": "A unique identifier assigned to this vision prescription.", - "items": { - "$ref": "#/definitions/Identifier" - }, - "type": "array" - }, - "status": { - "description": "The status of the resource instance.", - "$ref": "#/definitions/code" - }, - "_status": { - "description": "Extensions for status", - "$ref": "#/definitions/Element" - }, - "created": { - "description": "The date this resource was created.", - "$ref": "#/definitions/dateTime" - }, - "_created": { - "description": "Extensions for created", - "$ref": "#/definitions/Element" - }, - "patient": { - "description": "A resource reference to the person to whom the vision prescription applies.", - "$ref": "#/definitions/Reference" - }, - "encounter": { - "description": "A reference to a resource that identifies the particular occurrence of contact between patient and health care provider during which the prescription was issued.", - "$ref": "#/definitions/Reference" - }, - "dateWritten": { - "description": "The date (and perhaps time) when the prescription was written.", - "$ref": "#/definitions/dateTime" - }, - "_dateWritten": { - "description": "Extensions for dateWritten", - "$ref": "#/definitions/Element" - }, - "prescriber": { - "description": "The healthcare professional responsible for authorizing the prescription.", - "$ref": "#/definitions/Reference" - }, - "lensSpecification": { - "description": "Contain the details of the individual lens specifications and serves as the authorization for the fullfillment by certified professionals.", - "items": { - "$ref": "#/definitions/VisionPrescription_LensSpecification" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "prescriber", - "patient", - "lensSpecification", - "resourceType" - ] - }, - "VisionPrescription_LensSpecification": { - "description": "An authorization for the provision of glasses and/or contact lenses to a patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "product": { - "description": "Identifies the type of vision correction product which is required for the patient.", - "$ref": "#/definitions/CodeableConcept" - }, - "eye": { - "description": "The eye for which the lens specification applies.", - "enum": [ - "right", - "left" - ] - }, - "_eye": { - "description": "Extensions for eye", - "$ref": "#/definitions/Element" - }, - "sphere": { - "description": "Lens power measured in dioptres (0.25 units).", - "$ref": "#/definitions/decimal" - }, - "_sphere": { - "description": "Extensions for sphere", - "$ref": "#/definitions/Element" - }, - "cylinder": { - "description": "Power adjustment for astigmatism measured in dioptres (0.25 units).", - "$ref": "#/definitions/decimal" - }, - "_cylinder": { - "description": "Extensions for cylinder", - "$ref": "#/definitions/Element" - }, - "axis": { - "description": "Adjustment for astigmatism measured in integer degrees.", - "$ref": "#/definitions/integer" - }, - "_axis": { - "description": "Extensions for axis", - "$ref": "#/definitions/Element" - }, - "prism": { - "description": "Allows for adjustment on two axis.", - "items": { - "$ref": "#/definitions/VisionPrescription_Prism" - }, - "type": "array" - }, - "add": { - "description": "Power adjustment for multifocal lenses measured in dioptres (0.25 units).", - "$ref": "#/definitions/decimal" - }, - "_add": { - "description": "Extensions for add", - "$ref": "#/definitions/Element" - }, - "power": { - "description": "Contact lens power measured in dioptres (0.25 units).", - "$ref": "#/definitions/decimal" - }, - "_power": { - "description": "Extensions for power", - "$ref": "#/definitions/Element" - }, - "backCurve": { - "description": "Back curvature measured in millimetres.", - "$ref": "#/definitions/decimal" - }, - "_backCurve": { - "description": "Extensions for backCurve", - "$ref": "#/definitions/Element" - }, - "diameter": { - "description": "Contact lens diameter measured in millimetres.", - "$ref": "#/definitions/decimal" - }, - "_diameter": { - "description": "Extensions for diameter", - "$ref": "#/definitions/Element" - }, - "duration": { - "description": "The recommended maximum wear period for the lens.", - "$ref": "#/definitions/Quantity" - }, - "color": { - "description": "Special color or pattern.", - "$ref": "#/definitions/string" - }, - "_color": { - "description": "Extensions for color", - "$ref": "#/definitions/Element" - }, - "brand": { - "description": "Brand recommendations or restrictions.", - "$ref": "#/definitions/string" - }, - "_brand": { - "description": "Extensions for brand", - "$ref": "#/definitions/Element" - }, - "note": { - "description": "Notes for special requirements such as coatings and lens materials.", - "items": { - "$ref": "#/definitions/Annotation" - }, - "type": "array" - } - }, - "additionalProperties": false, - "required": [ - "product" - ] - }, - "VisionPrescription_Prism": { - "description": "An authorization for the provision of glasses and/or contact lenses to a patient.", - "properties": { - "id": { - "description": "Unique id for the element within a resource (for internal references). This may be any string value that does not contain spaces.", - "$ref": "#/definitions/string" - }, - "extension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "modifierExtension": { - "description": "May be used to represent additional information that is not part of the basic definition of the element and that modifies the understanding of the element in which it is contained and/or the understanding of the containing element\u0027s descendants. Usually modifier elements provide negation or qualification. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension. Applications processing a resource are required to check for modifier extensions.\n\nModifier extensions SHALL NOT change the meaning of any elements on Resource or DomainResource (including cannot change the meaning of modifierExtension itself).", - "items": { - "$ref": "#/definitions/Extension" - }, - "type": "array" - }, - "amount": { - "description": "Amount of prism to compensate for eye alignment in fractional units.", - "$ref": "#/definitions/decimal" - }, - "_amount": { - "description": "Extensions for amount", - "$ref": "#/definitions/Element" - }, - "base": { - "description": "The relative base, or reference lens edge, for the prism.", - "enum": [ - "up", - "down", - "in", - "out" - ] - }, - "_base": { - "description": "Extensions for base", - "$ref": "#/definitions/Element" - } - }, - "additionalProperties": false - } - } -} \ No newline at end of file diff --git a/wrangler-core/src/main/resources/schemas/manifest.json b/wrangler-core/src/main/resources/schemas/manifest.json deleted file mode 100644 index 664b9600b..000000000 --- a/wrangler-core/src/main/resources/schemas/manifest.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "standards": { - "hl7-fhir-r4": { - "format": "json", - "hash": "2721123ac666b321ce9833627c8bb712c62b36d326934767fc6c9aea701ce549" - } - } -} diff --git a/wrangler-core/src/main/resources/stylesheet.xml b/wrangler-core/src/main/resources/stylesheet.xml deleted file mode 100644 index c07c14df5..000000000 --- a/wrangler-core/src/main/resources/stylesheet.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/wrangler-core/src/main/resources/user/messages_en.properties b/wrangler-core/src/main/resources/user/messages_en.properties deleted file mode 100644 index eba236bce..000000000 --- a/wrangler-core/src/main/resources/user/messages_en.properties +++ /dev/null @@ -1,9 +0,0 @@ -#-------------------------------------------------------------------------------- -# Column Related Errors -#-------------------------------------------------------------------------------- -column.not.found={0} column {1} does not exist in the row. - -#-------------------------------------------------------------------------------- -# Executor Data Conversion Errors -#-------------------------------------------------------------------------------- -byte.or.bytebuffer.notfound= diff --git a/wrangler-core/src/main/resources/wrangler-finder.xml b/wrangler-core/src/main/resources/wrangler-finder.xml deleted file mode 100644 index 9b9186341..000000000 --- a/wrangler-core/src/main/resources/wrangler-finder.xml +++ /dev/null @@ -1,232 +0,0 @@ - - - - URL - - true - - - France Postal Code - - true - - - Canadian Postal Code - - true - - - Email - - true - - - Email - - true - - - Email - - true - - - Date Time - - true - - - Mac Address - - true - - - io.dataapps.chlorine.pattern.CompositeCreditCardFinder - true - - - IPV4 - - true - - - Month - - - - true - - - US Postal Codes - - - - true - - - US State - - true - - - US State - - true - - - SSN - - true - - - SSN - - true - - - IPV6 - - true - - - Text - - true - - - Gender - - true - - - Boolean - - true - - - IBAN - - true - - - Credit Card - - true - - - Credit Card - - true - - - Credit Card - - true - - - Credit Card - - true - - - Credit Card - - true - - - Credit Card - - true - - - ISBN - - true - - - Integer - - true - - - Zip Code - - true - - - Time - - true - - - Time - - true - - - Month/Year - - true - - - Date - - true - - - Date - - true - - - Currency - - true - - - Email - - true - - - US Phone#Formatted - - true - - - IPV4 - - true - - - Street Address - - 10 - true - - - SSN-spaces - - true - - - SSN-dashes - - true - - - ZipCode - - true - - - URL - - true - - - IPV6 - - true - - \ No newline at end of file diff --git a/wrangler-core/src/test/java/com/example/tutorial/AddressBookProtos.java b/wrangler-core/src/test/java/com/example/tutorial/AddressBookProtos.java deleted file mode 100644 index 0ae24c7de..000000000 --- a/wrangler-core/src/test/java/com/example/tutorial/AddressBookProtos.java +++ /dev/null @@ -1,2633 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: addressbook.proto - -package com.example.tutorial; - -public final class AddressBookProtos { - private AddressBookProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - public interface PersonOrBuilder extends - // @@protoc_insertion_point(interface_extends:tutorial.Person) - com.google.protobuf.MessageOrBuilder { - - /** - * string name = 1; - */ - java.lang.String getName(); - /** - * string name = 1; - */ - com.google.protobuf.ByteString - getNameBytes(); - - /** - *
-     * Unique ID number for this person.
-     * 
- * - * int32 id = 2; - */ - int getId(); - - /** - * string email = 3; - */ - java.lang.String getEmail(); - /** - * string email = 3; - */ - com.google.protobuf.ByteString - getEmailBytes(); - - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - java.util.List - getPhonesList(); - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - com.example.tutorial.AddressBookProtos.Person.PhoneNumber getPhones(int index); - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - int getPhonesCount(); - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - java.util.List - getPhonesOrBuilderList(); - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder getPhonesOrBuilder( - int index); - } - /** - *
-   * [START messages]
-   * 
- * - * Protobuf type {@code tutorial.Person} - */ - public static final class Person extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:tutorial.Person) - PersonOrBuilder { - // Use Person.newBuilder() to construct. - private Person(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private Person() { - name_ = ""; - id_ = 0; - email_ = ""; - phones_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private Person( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 10: { - java.lang.String s = input.readStringRequireUtf8(); - - name_ = s; - break; - } - case 16: { - - id_ = input.readInt32(); - break; - } - case 26: { - java.lang.String s = input.readStringRequireUtf8(); - - email_ = s; - break; - } - case 34: { - if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) { - phones_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00000008; - } - phones_.add( - input.readMessage(com.example.tutorial.AddressBookProtos.Person.PhoneNumber.parser(), extensionRegistry)); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) { - phones_ = java.util.Collections.unmodifiableList(phones_); - } - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.example.tutorial.AddressBookProtos.Person.class, com.example.tutorial.AddressBookProtos.Person.Builder.class); - } - - /** - * Protobuf enum {@code tutorial.Person.PhoneType} - */ - public enum PhoneType - implements com.google.protobuf.ProtocolMessageEnum { - /** - * MOBILE = 0; - */ - MOBILE(0), - /** - * HOME = 1; - */ - HOME(1), - /** - * WORK = 2; - */ - WORK(2), - UNRECOGNIZED(-1), - ; - - /** - * MOBILE = 0; - */ - public static final int MOBILE_VALUE = 0; - /** - * HOME = 1; - */ - public static final int HOME_VALUE = 1; - /** - * WORK = 2; - */ - public static final int WORK_VALUE = 2; - - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't value the number of an unknown enum value."); - } - return value; - } - - /** - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static PhoneType valueOf(int value) { - return forNumber(value); - } - - public static PhoneType forNumber(int value) { - switch (value) { - case 0: return MOBILE; - case 1: return HOME; - case 2: return WORK; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - PhoneType> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public PhoneType findValueByNumber(int number) { - return PhoneType.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return com.example.tutorial.AddressBookProtos.Person.getDescriptor().getEnumTypes().get(0); - } - - private static final PhoneType[] VALUES = values(); - - public static PhoneType valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private PhoneType(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:tutorial.Person.PhoneType) - } - - public interface PhoneNumberOrBuilder extends - // @@protoc_insertion_point(interface_extends:tutorial.Person.PhoneNumber) - com.google.protobuf.MessageOrBuilder { - - /** - * string number = 1; - */ - java.lang.String getNumber(); - /** - * string number = 1; - */ - com.google.protobuf.ByteString - getNumberBytes(); - - /** - * .tutorial.Person.PhoneType type = 2; - */ - int getTypeValue(); - /** - * .tutorial.Person.PhoneType type = 2; - */ - com.example.tutorial.AddressBookProtos.Person.PhoneType getType(); - } - /** - * Protobuf type {@code tutorial.Person.PhoneNumber} - */ - public static final class PhoneNumber extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:tutorial.Person.PhoneNumber) - PhoneNumberOrBuilder { - // Use PhoneNumber.newBuilder() to construct. - private PhoneNumber(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private PhoneNumber() { - number_ = ""; - type_ = 0; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private PhoneNumber( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 10: { - java.lang.String s = input.readStringRequireUtf8(); - - number_ = s; - break; - } - case 16: { - int rawValue = input.readEnum(); - - type_ = rawValue; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_PhoneNumber_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_PhoneNumber_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.example.tutorial.AddressBookProtos.Person.PhoneNumber.class, com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder.class); - } - - public static final int NUMBER_FIELD_NUMBER = 1; - private volatile java.lang.Object number_; - /** - * string number = 1; - */ - public java.lang.String getNumber() { - java.lang.Object ref = number_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - number_ = s; - return s; - } - } - /** - * string number = 1; - */ - public com.google.protobuf.ByteString - getNumberBytes() { - java.lang.Object ref = number_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - number_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int TYPE_FIELD_NUMBER = 2; - private int type_; - /** - * .tutorial.Person.PhoneType type = 2; - */ - public int getTypeValue() { - return type_; - } - /** - * .tutorial.Person.PhoneType type = 2; - */ - public com.example.tutorial.AddressBookProtos.Person.PhoneType getType() { - com.example.tutorial.AddressBookProtos.Person.PhoneType result = com.example.tutorial.AddressBookProtos.Person.PhoneType.valueOf(type_); - return result == null ? com.example.tutorial.AddressBookProtos.Person.PhoneType.UNRECOGNIZED : result; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!getNumberBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, number_); - } - if (type_ != com.example.tutorial.AddressBookProtos.Person.PhoneType.MOBILE.getNumber()) { - output.writeEnum(2, type_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getNumberBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, number_); - } - if (type_ != com.example.tutorial.AddressBookProtos.Person.PhoneType.MOBILE.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(2, type_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.example.tutorial.AddressBookProtos.Person.PhoneNumber)) { - return super.equals(obj); - } - com.example.tutorial.AddressBookProtos.Person.PhoneNumber other = (com.example.tutorial.AddressBookProtos.Person.PhoneNumber) obj; - - boolean result = true; - result = result && getNumber() - .equals(other.getNumber()); - result = result && type_ == other.type_; - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + NUMBER_FIELD_NUMBER; - hash = (53 * hash) + getNumber().hashCode(); - hash = (37 * hash) + TYPE_FIELD_NUMBER; - hash = (53 * hash) + type_; - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.example.tutorial.AddressBookProtos.Person.PhoneNumber prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code tutorial.Person.PhoneNumber} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:tutorial.Person.PhoneNumber) - com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_PhoneNumber_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_PhoneNumber_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.example.tutorial.AddressBookProtos.Person.PhoneNumber.class, com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder.class); - } - - // Construct using com.example.tutorial.AddressBookProtos.Person.PhoneNumber.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - number_ = ""; - - type_ = 0; - - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_PhoneNumber_descriptor; - } - - public com.example.tutorial.AddressBookProtos.Person.PhoneNumber getDefaultInstanceForType() { - return com.example.tutorial.AddressBookProtos.Person.PhoneNumber.getDefaultInstance(); - } - - public com.example.tutorial.AddressBookProtos.Person.PhoneNumber build() { - com.example.tutorial.AddressBookProtos.Person.PhoneNumber result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.example.tutorial.AddressBookProtos.Person.PhoneNumber buildPartial() { - com.example.tutorial.AddressBookProtos.Person.PhoneNumber result = new com.example.tutorial.AddressBookProtos.Person.PhoneNumber(this); - result.number_ = number_; - result.type_ = type_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.example.tutorial.AddressBookProtos.Person.PhoneNumber) { - return mergeFrom((com.example.tutorial.AddressBookProtos.Person.PhoneNumber)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.example.tutorial.AddressBookProtos.Person.PhoneNumber other) { - if (other == com.example.tutorial.AddressBookProtos.Person.PhoneNumber.getDefaultInstance()) return this; - if (!other.getNumber().isEmpty()) { - number_ = other.number_; - onChanged(); - } - if (other.type_ != 0) { - setTypeValue(other.getTypeValue()); - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.example.tutorial.AddressBookProtos.Person.PhoneNumber parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.example.tutorial.AddressBookProtos.Person.PhoneNumber) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private java.lang.Object number_ = ""; - /** - * string number = 1; - */ - public java.lang.String getNumber() { - java.lang.Object ref = number_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - number_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string number = 1; - */ - public com.google.protobuf.ByteString - getNumberBytes() { - java.lang.Object ref = number_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - number_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string number = 1; - */ - public Builder setNumber( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - number_ = value; - onChanged(); - return this; - } - /** - * string number = 1; - */ - public Builder clearNumber() { - - number_ = getDefaultInstance().getNumber(); - onChanged(); - return this; - } - /** - * string number = 1; - */ - public Builder setNumberBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - number_ = value; - onChanged(); - return this; - } - - private int type_ = 0; - /** - * .tutorial.Person.PhoneType type = 2; - */ - public int getTypeValue() { - return type_; - } - /** - * .tutorial.Person.PhoneType type = 2; - */ - public Builder setTypeValue(int value) { - type_ = value; - onChanged(); - return this; - } - /** - * .tutorial.Person.PhoneType type = 2; - */ - public com.example.tutorial.AddressBookProtos.Person.PhoneType getType() { - com.example.tutorial.AddressBookProtos.Person.PhoneType result = com.example.tutorial.AddressBookProtos.Person.PhoneType.valueOf(type_); - return result == null ? com.example.tutorial.AddressBookProtos.Person.PhoneType.UNRECOGNIZED : result; - } - /** - * .tutorial.Person.PhoneType type = 2; - */ - public Builder setType(com.example.tutorial.AddressBookProtos.Person.PhoneType value) { - if (value == null) { - throw new NullPointerException(); - } - - type_ = value.getNumber(); - onChanged(); - return this; - } - /** - * .tutorial.Person.PhoneType type = 2; - */ - public Builder clearType() { - - type_ = 0; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:tutorial.Person.PhoneNumber) - } - - // @@protoc_insertion_point(class_scope:tutorial.Person.PhoneNumber) - private static final com.example.tutorial.AddressBookProtos.Person.PhoneNumber DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.example.tutorial.AddressBookProtos.Person.PhoneNumber(); - } - - public static com.example.tutorial.AddressBookProtos.Person.PhoneNumber getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public PhoneNumber parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new PhoneNumber(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public com.example.tutorial.AddressBookProtos.Person.PhoneNumber getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private int bitField0_; - public static final int NAME_FIELD_NUMBER = 1; - private volatile java.lang.Object name_; - /** - * string name = 1; - */ - public java.lang.String getName() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - name_ = s; - return s; - } - } - /** - * string name = 1; - */ - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int ID_FIELD_NUMBER = 2; - private int id_; - /** - *
-     * Unique ID number for this person.
-     * 
- * - * int32 id = 2; - */ - public int getId() { - return id_; - } - - public static final int EMAIL_FIELD_NUMBER = 3; - private volatile java.lang.Object email_; - /** - * string email = 3; - */ - public java.lang.String getEmail() { - java.lang.Object ref = email_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - email_ = s; - return s; - } - } - /** - * string email = 3; - */ - public com.google.protobuf.ByteString - getEmailBytes() { - java.lang.Object ref = email_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - email_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int PHONES_FIELD_NUMBER = 4; - private java.util.List phones_; - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public java.util.List getPhonesList() { - return phones_; - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public java.util.List - getPhonesOrBuilderList() { - return phones_; - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public int getPhonesCount() { - return phones_.size(); - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public com.example.tutorial.AddressBookProtos.Person.PhoneNumber getPhones(int index) { - return phones_.get(index); - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder getPhonesOrBuilder( - int index) { - return phones_.get(index); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!getNameBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); - } - if (id_ != 0) { - output.writeInt32(2, id_); - } - if (!getEmailBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, email_); - } - for (int i = 0; i < phones_.size(); i++) { - output.writeMessage(4, phones_.get(i)); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getNameBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); - } - if (id_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(2, id_); - } - if (!getEmailBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, email_); - } - for (int i = 0; i < phones_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(4, phones_.get(i)); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.example.tutorial.AddressBookProtos.Person)) { - return super.equals(obj); - } - com.example.tutorial.AddressBookProtos.Person other = (com.example.tutorial.AddressBookProtos.Person) obj; - - boolean result = true; - result = result && getName() - .equals(other.getName()); - result = result && (getId() - == other.getId()); - result = result && getEmail() - .equals(other.getEmail()); - result = result && getPhonesList() - .equals(other.getPhonesList()); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + NAME_FIELD_NUMBER; - hash = (53 * hash) + getName().hashCode(); - hash = (37 * hash) + ID_FIELD_NUMBER; - hash = (53 * hash) + getId(); - hash = (37 * hash) + EMAIL_FIELD_NUMBER; - hash = (53 * hash) + getEmail().hashCode(); - if (getPhonesCount() > 0) { - hash = (37 * hash) + PHONES_FIELD_NUMBER; - hash = (53 * hash) + getPhonesList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.example.tutorial.AddressBookProtos.Person parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.example.tutorial.AddressBookProtos.Person parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.Person parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.example.tutorial.AddressBookProtos.Person parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.Person parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.example.tutorial.AddressBookProtos.Person parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.Person parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.example.tutorial.AddressBookProtos.Person parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.Person parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.example.tutorial.AddressBookProtos.Person parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.example.tutorial.AddressBookProtos.Person prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - *
-     * [START messages]
-     * 
- * - * Protobuf type {@code tutorial.Person} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:tutorial.Person) - com.example.tutorial.AddressBookProtos.PersonOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.example.tutorial.AddressBookProtos.Person.class, com.example.tutorial.AddressBookProtos.Person.Builder.class); - } - - // Construct using com.example.tutorial.AddressBookProtos.Person.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getPhonesFieldBuilder(); - } - } - public Builder clear() { - super.clear(); - name_ = ""; - - id_ = 0; - - email_ = ""; - - if (phonesBuilder_ == null) { - phones_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - } else { - phonesBuilder_.clear(); - } - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_Person_descriptor; - } - - public com.example.tutorial.AddressBookProtos.Person getDefaultInstanceForType() { - return com.example.tutorial.AddressBookProtos.Person.getDefaultInstance(); - } - - public com.example.tutorial.AddressBookProtos.Person build() { - com.example.tutorial.AddressBookProtos.Person result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.example.tutorial.AddressBookProtos.Person buildPartial() { - com.example.tutorial.AddressBookProtos.Person result = new com.example.tutorial.AddressBookProtos.Person(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - result.name_ = name_; - result.id_ = id_; - result.email_ = email_; - if (phonesBuilder_ == null) { - if (((bitField0_ & 0x00000008) == 0x00000008)) { - phones_ = java.util.Collections.unmodifiableList(phones_); - bitField0_ = (bitField0_ & ~0x00000008); - } - result.phones_ = phones_; - } else { - result.phones_ = phonesBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.example.tutorial.AddressBookProtos.Person) { - return mergeFrom((com.example.tutorial.AddressBookProtos.Person)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.example.tutorial.AddressBookProtos.Person other) { - if (other == com.example.tutorial.AddressBookProtos.Person.getDefaultInstance()) return this; - if (!other.getName().isEmpty()) { - name_ = other.name_; - onChanged(); - } - if (other.getId() != 0) { - setId(other.getId()); - } - if (!other.getEmail().isEmpty()) { - email_ = other.email_; - onChanged(); - } - if (phonesBuilder_ == null) { - if (!other.phones_.isEmpty()) { - if (phones_.isEmpty()) { - phones_ = other.phones_; - bitField0_ = (bitField0_ & ~0x00000008); - } else { - ensurePhonesIsMutable(); - phones_.addAll(other.phones_); - } - onChanged(); - } - } else { - if (!other.phones_.isEmpty()) { - if (phonesBuilder_.isEmpty()) { - phonesBuilder_.dispose(); - phonesBuilder_ = null; - phones_ = other.phones_; - bitField0_ = (bitField0_ & ~0x00000008); - phonesBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getPhonesFieldBuilder() : null; - } else { - phonesBuilder_.addAllMessages(other.phones_); - } - } - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.example.tutorial.AddressBookProtos.Person parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.example.tutorial.AddressBookProtos.Person) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private java.lang.Object name_ = ""; - /** - * string name = 1; - */ - public java.lang.String getName() { - java.lang.Object ref = name_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - name_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string name = 1; - */ - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string name = 1; - */ - public Builder setName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - name_ = value; - onChanged(); - return this; - } - /** - * string name = 1; - */ - public Builder clearName() { - - name_ = getDefaultInstance().getName(); - onChanged(); - return this; - } - /** - * string name = 1; - */ - public Builder setNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - name_ = value; - onChanged(); - return this; - } - - private int id_ ; - /** - *
-       * Unique ID number for this person.
-       * 
- * - * int32 id = 2; - */ - public int getId() { - return id_; - } - /** - *
-       * Unique ID number for this person.
-       * 
- * - * int32 id = 2; - */ - public Builder setId(int value) { - - id_ = value; - onChanged(); - return this; - } - /** - *
-       * Unique ID number for this person.
-       * 
- * - * int32 id = 2; - */ - public Builder clearId() { - - id_ = 0; - onChanged(); - return this; - } - - private java.lang.Object email_ = ""; - /** - * string email = 3; - */ - public java.lang.String getEmail() { - java.lang.Object ref = email_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - email_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string email = 3; - */ - public com.google.protobuf.ByteString - getEmailBytes() { - java.lang.Object ref = email_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - email_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string email = 3; - */ - public Builder setEmail( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - email_ = value; - onChanged(); - return this; - } - /** - * string email = 3; - */ - public Builder clearEmail() { - - email_ = getDefaultInstance().getEmail(); - onChanged(); - return this; - } - /** - * string email = 3; - */ - public Builder setEmailBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - email_ = value; - onChanged(); - return this; - } - - private java.util.List phones_ = - java.util.Collections.emptyList(); - private void ensurePhonesIsMutable() { - if (!((bitField0_ & 0x00000008) == 0x00000008)) { - phones_ = new java.util.ArrayList(phones_); - bitField0_ |= 0x00000008; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.example.tutorial.AddressBookProtos.Person.PhoneNumber, com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder, com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder> phonesBuilder_; - - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public java.util.List getPhonesList() { - if (phonesBuilder_ == null) { - return java.util.Collections.unmodifiableList(phones_); - } else { - return phonesBuilder_.getMessageList(); - } - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public int getPhonesCount() { - if (phonesBuilder_ == null) { - return phones_.size(); - } else { - return phonesBuilder_.getCount(); - } - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public com.example.tutorial.AddressBookProtos.Person.PhoneNumber getPhones(int index) { - if (phonesBuilder_ == null) { - return phones_.get(index); - } else { - return phonesBuilder_.getMessage(index); - } - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public Builder setPhones( - int index, com.example.tutorial.AddressBookProtos.Person.PhoneNumber value) { - if (phonesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePhonesIsMutable(); - phones_.set(index, value); - onChanged(); - } else { - phonesBuilder_.setMessage(index, value); - } - return this; - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public Builder setPhones( - int index, com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder builderForValue) { - if (phonesBuilder_ == null) { - ensurePhonesIsMutable(); - phones_.set(index, builderForValue.build()); - onChanged(); - } else { - phonesBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public Builder addPhones(com.example.tutorial.AddressBookProtos.Person.PhoneNumber value) { - if (phonesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePhonesIsMutable(); - phones_.add(value); - onChanged(); - } else { - phonesBuilder_.addMessage(value); - } - return this; - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public Builder addPhones( - int index, com.example.tutorial.AddressBookProtos.Person.PhoneNumber value) { - if (phonesBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePhonesIsMutable(); - phones_.add(index, value); - onChanged(); - } else { - phonesBuilder_.addMessage(index, value); - } - return this; - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public Builder addPhones( - com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder builderForValue) { - if (phonesBuilder_ == null) { - ensurePhonesIsMutable(); - phones_.add(builderForValue.build()); - onChanged(); - } else { - phonesBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public Builder addPhones( - int index, com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder builderForValue) { - if (phonesBuilder_ == null) { - ensurePhonesIsMutable(); - phones_.add(index, builderForValue.build()); - onChanged(); - } else { - phonesBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public Builder addAllPhones( - java.lang.Iterable values) { - if (phonesBuilder_ == null) { - ensurePhonesIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, phones_); - onChanged(); - } else { - phonesBuilder_.addAllMessages(values); - } - return this; - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public Builder clearPhones() { - if (phonesBuilder_ == null) { - phones_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000008); - onChanged(); - } else { - phonesBuilder_.clear(); - } - return this; - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public Builder removePhones(int index) { - if (phonesBuilder_ == null) { - ensurePhonesIsMutable(); - phones_.remove(index); - onChanged(); - } else { - phonesBuilder_.remove(index); - } - return this; - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder getPhonesBuilder( - int index) { - return getPhonesFieldBuilder().getBuilder(index); - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder getPhonesOrBuilder( - int index) { - if (phonesBuilder_ == null) { - return phones_.get(index); } else { - return phonesBuilder_.getMessageOrBuilder(index); - } - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public java.util.List - getPhonesOrBuilderList() { - if (phonesBuilder_ != null) { - return phonesBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(phones_); - } - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder addPhonesBuilder() { - return getPhonesFieldBuilder().addBuilder( - com.example.tutorial.AddressBookProtos.Person.PhoneNumber.getDefaultInstance()); - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder addPhonesBuilder( - int index) { - return getPhonesFieldBuilder().addBuilder( - index, com.example.tutorial.AddressBookProtos.Person.PhoneNumber.getDefaultInstance()); - } - /** - * repeated .tutorial.Person.PhoneNumber phones = 4; - */ - public java.util.List - getPhonesBuilderList() { - return getPhonesFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.example.tutorial.AddressBookProtos.Person.PhoneNumber, com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder, com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder> - getPhonesFieldBuilder() { - if (phonesBuilder_ == null) { - phonesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.example.tutorial.AddressBookProtos.Person.PhoneNumber, com.example.tutorial.AddressBookProtos.Person.PhoneNumber.Builder, com.example.tutorial.AddressBookProtos.Person.PhoneNumberOrBuilder>( - phones_, - ((bitField0_ & 0x00000008) == 0x00000008), - getParentForChildren(), - isClean()); - phones_ = null; - } - return phonesBuilder_; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:tutorial.Person) - } - - // @@protoc_insertion_point(class_scope:tutorial.Person) - private static final com.example.tutorial.AddressBookProtos.Person DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.example.tutorial.AddressBookProtos.Person(); - } - - public static com.example.tutorial.AddressBookProtos.Person getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public Person parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new Person(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public com.example.tutorial.AddressBookProtos.Person getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface AddressBookOrBuilder extends - // @@protoc_insertion_point(interface_extends:tutorial.AddressBook) - com.google.protobuf.MessageOrBuilder { - - /** - * repeated .tutorial.Person people = 1; - */ - java.util.List - getPeopleList(); - /** - * repeated .tutorial.Person people = 1; - */ - com.example.tutorial.AddressBookProtos.Person getPeople(int index); - /** - * repeated .tutorial.Person people = 1; - */ - int getPeopleCount(); - /** - * repeated .tutorial.Person people = 1; - */ - java.util.List - getPeopleOrBuilderList(); - /** - * repeated .tutorial.Person people = 1; - */ - com.example.tutorial.AddressBookProtos.PersonOrBuilder getPeopleOrBuilder( - int index); - } - /** - *
-   * Our address book file is just one of these.
-   * 
- * - * Protobuf type {@code tutorial.AddressBook} - */ - public static final class AddressBook extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:tutorial.AddressBook) - AddressBookOrBuilder { - // Use AddressBook.newBuilder() to construct. - private AddressBook(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private AddressBook() { - people_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private AddressBook( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 10: { - if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) { - people_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00000001; - } - people_.add( - input.readMessage(com.example.tutorial.AddressBookProtos.Person.parser(), extensionRegistry)); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) { - people_ = java.util.Collections.unmodifiableList(people_); - } - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_AddressBook_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_AddressBook_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.example.tutorial.AddressBookProtos.AddressBook.class, com.example.tutorial.AddressBookProtos.AddressBook.Builder.class); - } - - public static final int PEOPLE_FIELD_NUMBER = 1; - private java.util.List people_; - /** - * repeated .tutorial.Person people = 1; - */ - public java.util.List getPeopleList() { - return people_; - } - /** - * repeated .tutorial.Person people = 1; - */ - public java.util.List - getPeopleOrBuilderList() { - return people_; - } - /** - * repeated .tutorial.Person people = 1; - */ - public int getPeopleCount() { - return people_.size(); - } - /** - * repeated .tutorial.Person people = 1; - */ - public com.example.tutorial.AddressBookProtos.Person getPeople(int index) { - return people_.get(index); - } - /** - * repeated .tutorial.Person people = 1; - */ - public com.example.tutorial.AddressBookProtos.PersonOrBuilder getPeopleOrBuilder( - int index) { - return people_.get(index); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - for (int i = 0; i < people_.size(); i++) { - output.writeMessage(1, people_.get(i)); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - for (int i = 0; i < people_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, people_.get(i)); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.example.tutorial.AddressBookProtos.AddressBook)) { - return super.equals(obj); - } - com.example.tutorial.AddressBookProtos.AddressBook other = (com.example.tutorial.AddressBookProtos.AddressBook) obj; - - boolean result = true; - result = result && getPeopleList() - .equals(other.getPeopleList()); - return result; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getPeopleCount() > 0) { - hash = (37 * hash) + PEOPLE_FIELD_NUMBER; - hash = (53 * hash) + getPeopleList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.AddressBook parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static com.example.tutorial.AddressBookProtos.AddressBook parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static com.example.tutorial.AddressBookProtos.AddressBook parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.example.tutorial.AddressBookProtos.AddressBook prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - *
-     * Our address book file is just one of these.
-     * 
- * - * Protobuf type {@code tutorial.AddressBook} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:tutorial.AddressBook) - com.example.tutorial.AddressBookProtos.AddressBookOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_AddressBook_descriptor; - } - - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_AddressBook_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.example.tutorial.AddressBookProtos.AddressBook.class, com.example.tutorial.AddressBookProtos.AddressBook.Builder.class); - } - - // Construct using com.example.tutorial.AddressBookProtos.AddressBook.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getPeopleFieldBuilder(); - } - } - public Builder clear() { - super.clear(); - if (peopleBuilder_ == null) { - people_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - } else { - peopleBuilder_.clear(); - } - return this; - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.example.tutorial.AddressBookProtos.internal_static_tutorial_AddressBook_descriptor; - } - - public com.example.tutorial.AddressBookProtos.AddressBook getDefaultInstanceForType() { - return com.example.tutorial.AddressBookProtos.AddressBook.getDefaultInstance(); - } - - public com.example.tutorial.AddressBookProtos.AddressBook build() { - com.example.tutorial.AddressBookProtos.AddressBook result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - public com.example.tutorial.AddressBookProtos.AddressBook buildPartial() { - com.example.tutorial.AddressBookProtos.AddressBook result = new com.example.tutorial.AddressBookProtos.AddressBook(this); - int from_bitField0_ = bitField0_; - if (peopleBuilder_ == null) { - if (((bitField0_ & 0x00000001) == 0x00000001)) { - people_ = java.util.Collections.unmodifiableList(people_); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.people_ = people_; - } else { - result.people_ = peopleBuilder_.build(); - } - onBuilt(); - return result; - } - - public Builder clone() { - return (Builder) super.clone(); - } - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.setField(field, value); - } - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return (Builder) super.clearField(field); - } - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return (Builder) super.clearOneof(oneof); - } - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, Object value) { - return (Builder) super.setRepeatedField(field, index, value); - } - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - Object value) { - return (Builder) super.addRepeatedField(field, value); - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.example.tutorial.AddressBookProtos.AddressBook) { - return mergeFrom((com.example.tutorial.AddressBookProtos.AddressBook)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.example.tutorial.AddressBookProtos.AddressBook other) { - if (other == com.example.tutorial.AddressBookProtos.AddressBook.getDefaultInstance()) return this; - if (peopleBuilder_ == null) { - if (!other.people_.isEmpty()) { - if (people_.isEmpty()) { - people_ = other.people_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensurePeopleIsMutable(); - people_.addAll(other.people_); - } - onChanged(); - } - } else { - if (!other.people_.isEmpty()) { - if (peopleBuilder_.isEmpty()) { - peopleBuilder_.dispose(); - peopleBuilder_ = null; - people_ = other.people_; - bitField0_ = (bitField0_ & ~0x00000001); - peopleBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getPeopleFieldBuilder() : null; - } else { - peopleBuilder_.addAllMessages(other.people_); - } - } - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.example.tutorial.AddressBookProtos.AddressBook parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.example.tutorial.AddressBookProtos.AddressBook) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private java.util.List people_ = - java.util.Collections.emptyList(); - private void ensurePeopleIsMutable() { - if (!((bitField0_ & 0x00000001) == 0x00000001)) { - people_ = new java.util.ArrayList(people_); - bitField0_ |= 0x00000001; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.example.tutorial.AddressBookProtos.Person, com.example.tutorial.AddressBookProtos.Person.Builder, com.example.tutorial.AddressBookProtos.PersonOrBuilder> peopleBuilder_; - - /** - * repeated .tutorial.Person people = 1; - */ - public java.util.List getPeopleList() { - if (peopleBuilder_ == null) { - return java.util.Collections.unmodifiableList(people_); - } else { - return peopleBuilder_.getMessageList(); - } - } - /** - * repeated .tutorial.Person people = 1; - */ - public int getPeopleCount() { - if (peopleBuilder_ == null) { - return people_.size(); - } else { - return peopleBuilder_.getCount(); - } - } - /** - * repeated .tutorial.Person people = 1; - */ - public com.example.tutorial.AddressBookProtos.Person getPeople(int index) { - if (peopleBuilder_ == null) { - return people_.get(index); - } else { - return peopleBuilder_.getMessage(index); - } - } - /** - * repeated .tutorial.Person people = 1; - */ - public Builder setPeople( - int index, com.example.tutorial.AddressBookProtos.Person value) { - if (peopleBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePeopleIsMutable(); - people_.set(index, value); - onChanged(); - } else { - peopleBuilder_.setMessage(index, value); - } - return this; - } - /** - * repeated .tutorial.Person people = 1; - */ - public Builder setPeople( - int index, com.example.tutorial.AddressBookProtos.Person.Builder builderForValue) { - if (peopleBuilder_ == null) { - ensurePeopleIsMutable(); - people_.set(index, builderForValue.build()); - onChanged(); - } else { - peopleBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .tutorial.Person people = 1; - */ - public Builder addPeople(com.example.tutorial.AddressBookProtos.Person value) { - if (peopleBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePeopleIsMutable(); - people_.add(value); - onChanged(); - } else { - peopleBuilder_.addMessage(value); - } - return this; - } - /** - * repeated .tutorial.Person people = 1; - */ - public Builder addPeople( - int index, com.example.tutorial.AddressBookProtos.Person value) { - if (peopleBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePeopleIsMutable(); - people_.add(index, value); - onChanged(); - } else { - peopleBuilder_.addMessage(index, value); - } - return this; - } - /** - * repeated .tutorial.Person people = 1; - */ - public Builder addPeople( - com.example.tutorial.AddressBookProtos.Person.Builder builderForValue) { - if (peopleBuilder_ == null) { - ensurePeopleIsMutable(); - people_.add(builderForValue.build()); - onChanged(); - } else { - peopleBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * repeated .tutorial.Person people = 1; - */ - public Builder addPeople( - int index, com.example.tutorial.AddressBookProtos.Person.Builder builderForValue) { - if (peopleBuilder_ == null) { - ensurePeopleIsMutable(); - people_.add(index, builderForValue.build()); - onChanged(); - } else { - peopleBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .tutorial.Person people = 1; - */ - public Builder addAllPeople( - java.lang.Iterable values) { - if (peopleBuilder_ == null) { - ensurePeopleIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, people_); - onChanged(); - } else { - peopleBuilder_.addAllMessages(values); - } - return this; - } - /** - * repeated .tutorial.Person people = 1; - */ - public Builder clearPeople() { - if (peopleBuilder_ == null) { - people_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - } else { - peopleBuilder_.clear(); - } - return this; - } - /** - * repeated .tutorial.Person people = 1; - */ - public Builder removePeople(int index) { - if (peopleBuilder_ == null) { - ensurePeopleIsMutable(); - people_.remove(index); - onChanged(); - } else { - peopleBuilder_.remove(index); - } - return this; - } - /** - * repeated .tutorial.Person people = 1; - */ - public com.example.tutorial.AddressBookProtos.Person.Builder getPeopleBuilder( - int index) { - return getPeopleFieldBuilder().getBuilder(index); - } - /** - * repeated .tutorial.Person people = 1; - */ - public com.example.tutorial.AddressBookProtos.PersonOrBuilder getPeopleOrBuilder( - int index) { - if (peopleBuilder_ == null) { - return people_.get(index); } else { - return peopleBuilder_.getMessageOrBuilder(index); - } - } - /** - * repeated .tutorial.Person people = 1; - */ - public java.util.List - getPeopleOrBuilderList() { - if (peopleBuilder_ != null) { - return peopleBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(people_); - } - } - /** - * repeated .tutorial.Person people = 1; - */ - public com.example.tutorial.AddressBookProtos.Person.Builder addPeopleBuilder() { - return getPeopleFieldBuilder().addBuilder( - com.example.tutorial.AddressBookProtos.Person.getDefaultInstance()); - } - /** - * repeated .tutorial.Person people = 1; - */ - public com.example.tutorial.AddressBookProtos.Person.Builder addPeopleBuilder( - int index) { - return getPeopleFieldBuilder().addBuilder( - index, com.example.tutorial.AddressBookProtos.Person.getDefaultInstance()); - } - /** - * repeated .tutorial.Person people = 1; - */ - public java.util.List - getPeopleBuilderList() { - return getPeopleFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - com.example.tutorial.AddressBookProtos.Person, com.example.tutorial.AddressBookProtos.Person.Builder, com.example.tutorial.AddressBookProtos.PersonOrBuilder> - getPeopleFieldBuilder() { - if (peopleBuilder_ == null) { - peopleBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - com.example.tutorial.AddressBookProtos.Person, com.example.tutorial.AddressBookProtos.Person.Builder, com.example.tutorial.AddressBookProtos.PersonOrBuilder>( - people_, - ((bitField0_ & 0x00000001) == 0x00000001), - getParentForChildren(), - isClean()); - people_ = null; - } - return peopleBuilder_; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:tutorial.AddressBook) - } - - // @@protoc_insertion_point(class_scope:tutorial.AddressBook) - private static final com.example.tutorial.AddressBookProtos.AddressBook DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.example.tutorial.AddressBookProtos.AddressBook(); - } - - public static com.example.tutorial.AddressBookProtos.AddressBook getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public AddressBook parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new AddressBook(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public com.example.tutorial.AddressBookProtos.AddressBook getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_tutorial_Person_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_tutorial_Person_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_tutorial_Person_PhoneNumber_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_tutorial_Person_PhoneNumber_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_tutorial_AddressBook_descriptor; - private static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_tutorial_AddressBook_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\021addressbook.proto\022\010tutorial\"\325\001\n\006Person" + - "\022\014\n\004name\030\001 \001(\t\022\n\n\002id\030\002 \001(\005\022\r\n\005email\030\003 \001(" + - "\t\022,\n\006phones\030\004 \003(\0132\034.tutorial.Person.Phon" + - "eNumber\032G\n\013PhoneNumber\022\016\n\006number\030\001 \001(\t\022(" + - "\n\004type\030\002 \001(\0162\032.tutorial.Person.PhoneType" + - "\"+\n\tPhoneType\022\n\n\006MOBILE\020\000\022\010\n\004HOME\020\001\022\010\n\004W" + - "ORK\020\002\"/\n\013AddressBook\022 \n\006people\030\001 \003(\0132\020.t" + - "utorial.PersonBP\n\024com.example.tutorialB\021" + - "AddressBookProtos\252\002$Google.Protobuf.Exam" + - "ples.AddressBookb\006proto3" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - internal_static_tutorial_Person_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_tutorial_Person_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_tutorial_Person_descriptor, - new java.lang.String[] { "Name", "Id", "Email", "Phones", }); - internal_static_tutorial_Person_PhoneNumber_descriptor = - internal_static_tutorial_Person_descriptor.getNestedTypes().get(0); - internal_static_tutorial_Person_PhoneNumber_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_tutorial_Person_PhoneNumber_descriptor, - new java.lang.String[] { "Number", "Type", }); - internal_static_tutorial_AddressBook_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_tutorial_AddressBook_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_tutorial_AddressBook_descriptor, - new java.lang.String[] { "People", }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/aggregates/SetTransientVariableTest.java b/wrangler-core/src/test/java/io/cdap/directives/aggregates/SetTransientVariableTest.java deleted file mode 100644 index bd83225b8..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/aggregates/SetTransientVariableTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.aggregates; - -import io.cdap.cdap.etl.api.Lookup; -import io.cdap.cdap.etl.api.StageMetrics; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.TransientStore; -import io.cdap.wrangler.api.TransientVariableScope; -import io.cdap.wrangler.proto.Contexts; -import org.junit.Assert; -import org.junit.Test; - -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * Tests {@link SetTransientVariable} - */ -public class SetTransientVariableTest { - - @Test - public void testSettingOfVariable() throws Exception { - String[] recipe = new String[]{ - "set-variable test fwd == 0 ? A : test" - }; - - List rows = new ArrayList<>(); - rows.add(new Row("fwd", 0).add("A", 2)); - rows.add(new Row("fwd", 1).add("A", 2)); - - final Map s = new HashMap<>(); - rows = TestingRig.execute(recipe, rows, new ExecutorContext() { - @Override - public Environment getEnvironment() { - return Environment.TESTING; - } - - @Override - public String getNamespace() { - return Contexts.SYSTEM; - } - - @Override - public StageMetrics getMetrics() { - return null; - } - - @Override - public String getContextName() { - return "test"; - } - - @Override - public Map getProperties() { - return new HashMap<>(); - } - - @Override - public URL getService(String applicationId, String serviceId) { - return null; - } - - @Override - public TransientStore getTransientStore() { - return new TransientStore() { - @Override - public void reset(TransientVariableScope scope) { - - } - - @Override - public T get(String name) { - return (T) s.get(name); - } - - @Override - public void set(TransientVariableScope scope, String name, Object value) { - s.put(name, value); - } - - @Override - public void increment(TransientVariableScope scope, String name, long value) { - - } - - @Override - public Set getVariables() { - return s.keySet(); - } - }; - } - - @Override - public Lookup provide(String s, Map map) { - return null; - } - }); - Assert.assertEquals(2, rows.size()); - Assert.assertEquals(2, s.get("test")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/ChangeColCaseNamesTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/ChangeColCaseNamesTest.java deleted file mode 100644 index a9c36549b..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/ChangeColCaseNamesTest.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -/** - * Tests {@link ChangeColCaseNames} - */ -public class ChangeColCaseNamesTest { - - @Test - public void testColumnCaseChanges() throws Exception { - String[] directives = new String[] { - "change-column-case lower", - }; - - List rows = Arrays.asList( - new Row("Url", "1").add("Fname", "2").add("LName", "3").add("ADDRESS", "4") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("url", rows.get(0).getColumn(0)); - } - - @Test - public void testGetOutputSchemaForCaseChangedCols() throws Exception { - String[] directives = new String[] { - "change-column-case lower", - }; - List rows = Collections.singletonList( - new Row("ALL_CAPS", 1).add("MiXeD_CAse", "random").add("all_lower", new BigDecimal("143235.016")) - ); - Schema inputSchema = Schema.recordOf( - "inputSchema", - Schema.Field.of("ALL_CAPS", Schema.of(Schema.Type.INT)), - Schema.Field.of("MiXeD_CAse", Schema.of(Schema.Type.STRING)), - Schema.Field.of("all_lower", Schema.decimalOf(10, 3)) - ); - Schema expectedSchema = Schema.recordOf( - "expectedSchema", - Schema.Field.of("all_caps", Schema.of(Schema.Type.INT)), - Schema.Field.of("mixed_case", Schema.of(Schema.Type.STRING)), - Schema.Field.of("all_lower", Schema.decimalOf(10, 3)) - ); - - Schema outputSchema = TestingRig.executeAndGetSchema(directives, rows, inputSchema); - - Assert.assertEquals(outputSchema.getFields().size(), expectedSchema.getFields().size()); - for (Schema.Field expectedField : expectedSchema.getFields()) { - Assert.assertEquals( - outputSchema.getField(expectedField.getName()).getSchema().getType(), expectedField.getSchema().getType() - ); - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/CleanseColumnNamesTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/CleanseColumnNamesTest.java deleted file mode 100644 index 44d467ee4..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/CleanseColumnNamesTest.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.util.Collections; -import java.util.List; - -/** - * Tests {@link CleanseColumnNames} - */ -public class CleanseColumnNamesTest { - - @Test - public void testColumnCleanse() throws Exception { - String[] directives = new String[] { - "cleanse-column-names", - }; - - List rows = Collections.singletonList( - new Row("COL1", "1").add("col:2", "2").add("Col3", "3").add("COLUMN4", "4").add("col!5", "5") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("col1", rows.get(0).getColumn(0)); - Assert.assertEquals("col_2", rows.get(0).getColumn(1)); - Assert.assertEquals("col3", rows.get(0).getColumn(2)); - Assert.assertEquals("column4", rows.get(0).getColumn(3)); - Assert.assertEquals("col_5", rows.get(0).getColumn(4)); - } - - @Test - public void testGetOutputSchemaForCleansedColumns() throws Exception { - String[] directives = new String[] { - "cleanse-column-names", - }; - List rows = Collections.singletonList( - new Row("COL1", 1).add("col:2", new BigDecimal("143235.016")) - ); - Schema inputSchema = Schema.recordOf( - "inputSchema", - Schema.Field.of("COL1", Schema.of(Schema.Type.INT)), - Schema.Field.of("col:2", Schema.decimalOf(10, 3)) - ); - Schema expectedSchema = Schema.recordOf( - "expectedSchema", - Schema.Field.of("col1", Schema.of(Schema.Type.INT)), - Schema.Field.of("col_2", Schema.decimalOf(10, 3)) - ); - - Schema outputSchema = TestingRig.executeAndGetSchema(directives, rows, inputSchema); - - Assert.assertEquals(outputSchema.getFields().size(), expectedSchema.getFields().size()); - for (Schema.Field expectedField : expectedSchema.getFields()) { - Assert.assertEquals( - outputSchema.getField(expectedField.getName()).getSchema().getType(), expectedField.getSchema().getType() - ); - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/ColumnsReplaceTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/ColumnsReplaceTest.java deleted file mode 100644 index 8a629dd5b..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/ColumnsReplaceTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -/** - * Tests {@link ColumnsReplace} - */ -public class ColumnsReplaceTest { - - @Test - public void testBasicColumnReplace() throws Exception { - String[] directives = new String[] { - "columns-replace s/^data_//g", - }; - - List rows = Arrays.asList( - new Row("data_a", 1).add("data_b", 2).add("data_timestamp", 3).add("data_data_confuse", 4) - .add("no_data", 5).add("whatever", 6) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("a", rows.get(0).getColumn(0)); - Assert.assertEquals("b", rows.get(0).getColumn(1)); - Assert.assertEquals("timestamp", rows.get(0).getColumn(2)); - Assert.assertEquals("data_confuse", rows.get(0).getColumn(3)); - Assert.assertEquals("no_data", rows.get(0).getColumn(4)); - Assert.assertEquals("whatever", rows.get(0).getColumn(5)); - } - - @Test(expected = RecipeException.class) - public void testIncorrectSedExpression() throws Exception { - String[] directives = new String[] { - "columns-replace r/^data_//g", // Incorrect sed expression. - }; - - List rows = Arrays.asList( - new Row("data_a", 1).add("data_b", 2).add("data_timestamp", 3).add("data_data_confuse", 4) - .add("no_data", 5).add("whatever", 6) - ); - - TestingRig.execute(directives, rows); - } - @Test - public void testGetOutputSchemaForReplacedColumnNames() throws Exception { - String[] directives = new String[] { - "columns-replace s/^data_//g", - }; - List rows = Collections.singletonList( - new Row("data_a", 1).add("data_data_confuse", "ABC").add("no_data", null).add("random", new BigDecimal("12.44")) - ); - Schema inputSchema = Schema.recordOf( - "inputSchema", - Schema.Field.of("data_a", Schema.of(Schema.Type.INT)), - Schema.Field.of("data_data_confuse", Schema.of(Schema.Type.STRING)), - Schema.Field.of("no_data", Schema.of(Schema.Type.DOUBLE)), - Schema.Field.of("random", Schema.decimalOf(10, 3)) - ); - Schema expectedSchema = Schema.recordOf( - "expectedSchema", - Schema.Field.of("a", Schema.of(Schema.Type.INT)), - Schema.Field.of("data_confuse", Schema.of(Schema.Type.STRING)), - Schema.Field.of("no_data", Schema.of(Schema.Type.DOUBLE)), - Schema.Field.of("random", Schema.decimalOf(10, 3)) - ); - - Schema outputSchema = TestingRig.executeAndGetSchema(directives, rows, inputSchema); - - Assert.assertEquals(outputSchema.getFields().size(), expectedSchema.getFields().size()); - for (Schema.Field expectedField : expectedSchema.getFields()) { - Assert.assertEquals( - outputSchema.getField(expectedField.getName()).getSchema().getType(), expectedField.getSchema().getType() - ); - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/CopyTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/CopyTest.java deleted file mode 100644 index ff2e36a3b..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/CopyTest.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -/** - * Tests {@link io.cdap.directives.column.Copy} - */ -public class CopyTest { - - @Test - public void testBasicCopy() throws Exception { - String[] directives = new String[] { - "parse-as-csv body ,", - "copy body_1 name" - }; - - List rows = Arrays.asList( - new Row("body", "A,B,1"), - new Row("body", "D,E,2"), - new Row("body", "G,H,3") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 3); - Assert.assertEquals(5, rows.get(0).width()); // should have copied to another column - Assert.assertEquals("A", rows.get(0).getValue("name")); // Should have copy of 'A' - Assert.assertEquals("D", rows.get(1).getValue("name")); // Should have copy of 'D' - Assert.assertEquals("G", rows.get(2).getValue("name")); // Should have copy of 'G' - Assert.assertEquals(rows.get(0).getValue("name"), rows.get(0).getValue("body_1")); - Assert.assertEquals(rows.get(1).getValue("name"), rows.get(1).getValue("body_1")); - Assert.assertEquals(rows.get(2).getValue("name"), rows.get(2).getValue("body_1")); - } - - @Test(expected = RecipeException.class) - public void testCopyToExistingColumn() throws Exception { - String[] directives = new String[] { - "parse-as-csv body ,", - "copy body_1 body_2" - }; - - List rows = Arrays.asList( - new Row("body", "A,B,1"), - new Row("body", "D,E,2"), - new Row("body", "G,H,3") - ); - - rows = TestingRig.execute(directives, rows); - } - - @Test - public void testForceCopy() throws Exception { - String[] directives = new String[] { - "parse-as-csv body ,", - "copy body_1 body_2 true" - }; - - List rows = Arrays.asList( - new Row("body", "A,B,1"), - new Row("body", "D,E,2"), - new Row("body", "G,H,3") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 3); - Assert.assertEquals(4, rows.get(0).width()); // should have copied to another column - Assert.assertEquals("A", rows.get(0).getValue("body_2")); // Should have copy of 'A' - Assert.assertEquals("D", rows.get(1).getValue("body_2")); // Should have copy of 'D' - Assert.assertEquals("G", rows.get(2).getValue("body_2")); // Should have copy of 'G' - Assert.assertEquals(rows.get(0).getValue("body_2"), rows.get(0).getValue("body_1")); - Assert.assertEquals(rows.get(1).getValue("body_2"), rows.get(1).getValue("body_1")); - Assert.assertEquals(rows.get(2).getValue("body_2"), rows.get(2).getValue("body_1")); - } - - @Test - public void testGetOutputSchemaForForceCopiedColumn() throws Exception { - String[] directives = new String[] { - "copy :col_B :col_A true", - "copy :col_B :col_C true", - }; - List rows = Collections.singletonList( - new Row("col_A", 1).add("col_B", new BigDecimal("143235.016")) - ); - Schema inputSchema = Schema.recordOf( - "inputSchema", - Schema.Field.of("col_A", Schema.of(Schema.Type.INT)), - Schema.Field.of("col_B", Schema.decimalOf(10, 3)) - ); - Schema expectedSchema = Schema.recordOf( - "expectedSchema", - Schema.Field.of("col_A", Schema.decimalOf(10, 3)), - Schema.Field.of("col_B", Schema.decimalOf(10, 3)), - Schema.Field.of("col_C", Schema.decimalOf(10, 3)) - ); - - Schema outputSchema = TestingRig.executeAndGetSchema(directives, rows, inputSchema); - - Assert.assertEquals(outputSchema.getFields().size(), expectedSchema.getFields().size()); - for (Schema.Field expectedField : expectedSchema.getFields()) { - Assert.assertEquals( - outputSchema.getField(expectedField.getName()).getSchema().getType(), expectedField.getSchema().getType() - ); - } - } - - @Test - public void testGetOutputSchemaForCopiedColumn() throws Exception { - String[] directives = new String[] { - "copy :col_A :col_B", - }; - List rows = Collections.singletonList( - new Row("col_A", new BigDecimal("143235.016")) - ); - Schema inputSchema = Schema.recordOf( - "inputSchema", - Schema.Field.of("col_A", Schema.decimalOf(10, 3)) - ); - Schema expectedSchema = Schema.recordOf( - "expectedSchema", - Schema.Field.of("col_A", Schema.decimalOf(10, 3)), - Schema.Field.of("col_B", Schema.decimalOf(10, 3)) - ); - - Schema outputSchema = TestingRig.executeAndGetSchema(directives, rows, inputSchema); - - Assert.assertEquals(outputSchema.getFields().size(), expectedSchema.getFields().size()); - for (Schema.Field expectedField : expectedSchema.getFields()) { - Assert.assertEquals( - outputSchema.getField(expectedField.getName()).getSchema().getType(), expectedField.getSchema().getType() - ); - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/CreateRecordTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/CreateRecordTest.java deleted file mode 100644 index dd06cc5f5..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/CreateRecordTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright © 2017-2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link CreateRecord} - */ -public class CreateRecordTest { - - /** - * | col1 | col2 | col3 - * | "A" | "B" | "C" - * - * Directive - * create-record :result, :col1, :col2, :col3 - * - * Result - * - * | col1 | col2 | col3 | result - * | "A" | "B" | "C" | {col1: "A", col2: "B", col3: "C"} - * - * @throws Exception - */ - @Test - public void testBasicCase() throws Exception { - String[] directives = new String[] { - "create-record :result :col1, :col2, :col3", - }; - - Row newObjectRow = new Row("col1", "A") - .add("col2", "B") - .add("col3", "C"); - - - List rows = Arrays.asList( - new Row(newObjectRow) - ); - - rows = TestingRig.execute(directives, rows); - - Row expectedResultRow = new Row(newObjectRow).add("result", newObjectRow); - Assert.assertTrue(expectedResultRow.equals(rows.get(0))); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/FlattenRecordTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/FlattenRecordTest.java deleted file mode 100644 index b3ed54408..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/FlattenRecordTest.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright © 2017-2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link FlattenRecordTest} - */ -public class FlattenRecordTest { - - /** - * struct - * {col1: "A", col2: "B", col3: "C"} - * - * Directive - * explode-record :struct - * - * Result - * - * struct | struct_col1 | struct_col2 | struct_col3 - * {col1: "A", col2: "B", col3: "C"} | "A" | "B" | "C" - * - * @throws Exception - */ - @Test - public void testBasicCase() throws Exception { - String[] directives = new String[] { - "flatten-record :struct", - }; - - Row newObjectRow = new Row("col1", "A") - .add("col2", "B") - .add("col3", "C"); - - - List rows = Arrays.asList( - new Row("struct", newObjectRow) - ); - - rows = TestingRig.execute(directives, rows); - - Row expectedResultRow = new Row("struct", newObjectRow) - .add("struct_col1", "A") - .add("struct_col2", "B") - .add("struct_col3", "C"); - - Assert.assertEquals(expectedResultRow, rows.get(0)); - Assert.assertEquals(rows.size(), 1); - } - - - @Test - public void testBasicCase2() throws Exception { - String[] directives = new String[] { - "flatten-record :struct", - "flatten-record :struct_child1", - }; - - Row childRow = new Row("col1", "A") - .add("col2", "B") - .add("col3", "C"); - - Row newObjectRow = new Row("child1", childRow); - - List rows = Arrays.asList( - new Row("struct", newObjectRow) - ); - - rows = TestingRig.execute(directives, rows); - - Row expectedResultRow = new Row("struct", newObjectRow) - .add("struct_child1", childRow) - .add("struct_child1_col1", "A") - .add("struct_child1_col2", "B") - .add("struct_child1_col3", "C"); - - Assert.assertEquals(expectedResultRow, rows.get(0)); - Assert.assertEquals(rows.size(), 1); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/KeepTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/KeepTest.java deleted file mode 100644 index 709e0a19c..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/KeepTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link Keep} - */ -public class KeepTest { - - @Test - public void testKeep() throws Exception { - String[] directives = new String[] { - "parse-as-csv body ,", - "keep body_1,body_2" - }; - - List rows = Arrays.asList( - new Row("body", "1,2,3,4,5,6,7,8,9,10") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(2, rows.get(0).width()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/MergeTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/MergeTest.java deleted file mode 100644 index 66224f473..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/MergeTest.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link Merge} - */ -public class MergeTest { - - @Test - public void testBasicMergeFunctionality() throws Exception { - String[] directives = new String[] { - "merge A B C ','", - "merge B A D ' '" - }; - - List rows = Arrays.asList( - new Row("A", "Root").add("B", "Joltie") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("Root,Joltie", rows.get(0).getValue("C")); - Assert.assertEquals("Joltie Root", rows.get(0).getValue("D")); - } - - @Ignore - @Test - public void testWithQuoteAsSeparator() throws Exception { - String[] directives = new String[] { - "merge A B C '\''", - }; - - List rows = Arrays.asList( - new Row("A", "Root").add("B", "Joltie") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("Root'Joltie", rows.get(0).getValue("C")); - } - - @Test - public void testWithUTF8Separator() throws Exception { - String[] directives = new String[] { - "merge A B C '\\u000A'", // in actuality you need only one back slash. - }; - - List rows = Arrays.asList( - new Row("A", "Root").add("B", "Joltie") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("Root\nJoltie", rows.get(0).getValue("C")); - } - - @Ignore - @Test - public void testSingleQuoteAtEndOnly() throws Exception { - String[] directives = new String[] { - "merge A B C '\\u000A", // in actuality you need only one back slash. - }; - - List rows = Arrays.asList( - new Row("A", "Root").add("B", "Joltie") - ); - - TestingRig.execute(directives, rows); - } - - @Test - public void testWithMultipleCharactersAsSeparator() throws Exception { - String[] directives = new String[] { - "merge A B C '---'", // in actuality you need only one back slash. - }; - - List rows = Arrays.asList( - new Row("A", "Root").add("B", "Joltie") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("Root---Joltie", rows.get(0).getValue("C")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/RenameTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/RenameTest.java deleted file mode 100644 index 28cc4e565..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/RenameTest.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -/** - * Tests {@link Rename} - */ -public class RenameTest { - - @Test (expected = RecipeException.class) - public void testRenameOfExistingColumns() throws Exception { - String[] directives = new String[] { - "rename C2 C4", - }; - - List rows = Collections.singletonList( - new Row("C1", "A").add("C2", "B").add("C3", "C").add("C4", "D").add("C5", "E") - ); - - TestingRig.execute(directives, rows); - } - - @Test (expected = RecipeException.class) - public void testRenameCaseSensitiveFailure() throws Exception { - String[] directives = new String[] { - "rename C1 c4", - }; - - List rows = Collections.singletonList( - new Row("C1", "A").add("C2", "B").add("C3", "C").add("C4", "D").add("C5", "E") - ); - - TestingRig.execute(directives, rows); - } - - @Test - public void testRenameCaseSensitiveSuccess() throws Exception { - String[] directives = new String[] { - "rename C1 c1", - }; - - List rows = Collections.singletonList( - new Row("C1", "A").add("C2", "B").add("C3", "C").add("C4", "D").add("C5", "E") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Row row = rows.get(0); - // here compare the exact string since row is case insensitive - Assert.assertEquals("c1", row.getFields().get(0).getFirst()); - Assert.assertEquals("A", row.getValue("c1")); - Assert.assertEquals("B", row.getValue("C2")); - Assert.assertEquals("C", row.getValue("C3")); - Assert.assertEquals("D", row.getValue("C4")); - Assert.assertEquals("E", row.getValue("C5")); - } - - @Test - public void testRenameNonExistingCols() throws Exception { - String[] directives = new String[] { - "rename body_10 body_3", - "rename body_3 BODY_3" - }; - - List rows = Arrays.asList( - new Row("body", "A").add("body_1", "B").add("body_2", "C"), - new Row("body", "D").add("body_1", "E").add("body_2", "F").add("body_10", "G"), - new Row("body", "H").add("body_1", "I").add("body_2", "J"), - new Row("body", "K").add("body_1", "L").add("body_2", "M").add("body_10", "N")); - - List result = TestingRig.execute(directives, rows); - - // here create new row and compare individual row since row is not immutable during execution - Assert.assertEquals(4, result.size()); - Assert.assertEquals(new Row("body", "A").add("body_1", "B").add("body_2", "C"), result.get(0)); - Assert.assertEquals(new Row("body", "D").add("body_1", "E").add("body_2", "F").add("BODY_3", "G"), result.get(1)); - Assert.assertEquals(new Row("body", "H").add("body_1", "I").add("body_2", "J"), result.get(2)); - Assert.assertEquals(new Row("body", "K").add("body_1", "L").add("body_2", "M").add("BODY_3", "N"), result.get(3)); - } - - @Test - public void testGetOutputSchemaForRenamedColumns() throws Exception { - String[] directives = new String[] { - "rename :col_B :col_C", - }; - List rows = Collections.singletonList( - new Row("col_A", 1).add("col_B", new BigDecimal("143235.016")) - ); - Schema inputSchema = Schema.recordOf( - "inputSchema", - Schema.Field.of("col_A", Schema.of(Schema.Type.INT)), - Schema.Field.of("col_B", Schema.decimalOf(10, 3)) - ); - Schema expectedSchema = Schema.recordOf( - "expectedSchema", - Schema.Field.of("col_A", Schema.of(Schema.Type.INT)), - Schema.Field.of("col_C", Schema.decimalOf(10, 3)) - ); - - Schema outputSchema = TestingRig.executeAndGetSchema(directives, rows, inputSchema); - - Assert.assertEquals(outputSchema.getFields().size(), expectedSchema.getFields().size()); - for (Schema.Field expectedField : expectedSchema.getFields()) { - Assert.assertEquals( - outputSchema.getField(expectedField.getName()).getSchema().getType(), expectedField.getSchema().getType() - ); - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/SetHeaderTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/SetHeaderTest.java deleted file mode 100644 index ce8b4a115..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/SetHeaderTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * Tests {@link SetHeader} - */ -public class SetHeaderTest { - - @Test(expected = RecipeException.class) - public void testEmptySetColumnsDirectiveAtStart() throws Exception { - String[] directives = { - "set-header ,A,B" - }; - TestingRig.execute(directives, new ArrayList<>()); - } - - @Test(expected = RecipeException.class) - public void testEmptySetColumnsDirectiveInMiddle() throws Exception { - String[] directives = { - "set-header A,B, ,D" - }; - TestingRig.execute(directives, new ArrayList<>()); - } - - @Test(expected = RecipeException.class) - public void testEmptySetColumnsDirectiveAtEnd1() throws Exception { - String[] directives = { - "set-header A,B,D," - }; - TestingRig.execute(directives, new ArrayList<>()); - Assert.assertTrue(true); - } - - @Test(expected = RecipeException.class) - public void testEmptySetColumnsDirectiveAtEnd2() throws Exception { - String[] directives = { - "set-header A,B,D,," - }; - TestingRig.execute(directives, new ArrayList<>()); - Assert.assertTrue(true); - } - - @Test - public void testGetOutputSchemaAfterSettingHeader() throws Exception { - String[] directives = new String[] { - "set-headers :new_A ,:new_B", - }; - List rows = Collections.singletonList( - new Row("col_A", 1).add("col_B", new BigDecimal("123.456")).add("col_c", "hello world") - ); - Schema inputSchema = Schema.recordOf( - "inputSchema", - Schema.Field.of("col_A", Schema.of(Schema.Type.INT)), - Schema.Field.of("col_B", Schema.decimalOf(10, 3)), - Schema.Field.of("col_c", Schema.of(Schema.Type.STRING)) - ); - Schema expectedSchema = Schema.recordOf( - "expectedSchema", - Schema.Field.of("new_A", Schema.of(Schema.Type.INT)), - Schema.Field.of("new_B", Schema.decimalOf(10, 3)), - Schema.Field.of("col_c", Schema.of(Schema.Type.STRING)) - ); - - Schema outputSchema = TestingRig.executeAndGetSchema(directives, rows, inputSchema); - - Assert.assertEquals(expectedSchema.getFields().size(), outputSchema.getFields().size()); - for (Schema.Field expectedField : expectedSchema.getFields()) { - Assert.assertEquals( - outputSchema.getField(expectedField.getName()).getSchema().getType(), expectedField.getSchema().getType() - ); - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/SetTypeTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/SetTypeTest.java deleted file mode 100644 index 92b7f8f9f..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/SetTypeTest.java +++ /dev/null @@ -1,443 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.cdap.api.common.Bytes; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; - -/** - * Tests {@link SetType} - */ -public class SetTypeTest { - - @Test - public void testToInt() throws Exception { - List rows = Collections.singletonList( - new Row("str_col", "10000").add("int_col", 10000).add("double_col", 10000.0d) - .add("short_col", new Short("10000")).add("long_col", 10000L).add("float_col", 10000.0f) - .add("bytes_col", new byte[]{0, 0, 39, 16}).add("decimal_col", new BigDecimal("10000")) - ); - String[] directives = new String[] { - "set-type str_col int", "set-type int_col i64", "set-type double_col integer", "set-type short_col INT", - "set-type long_col I64", "set-type float_col Integer", "set-type bytes_col INTEGER", - "set-type decimal_col INTEGER" - }; - - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - - for (int i = 0; i < row.width(); i++) { - Object object = row.getValue(i); - Assert.assertTrue(object instanceof Integer); - Integer intValue = (Integer) object; - Assert.assertEquals(10000, (int) intValue); - } - } - - @Test - public void testToShort() throws Exception { - List rows = Collections.singletonList( - new Row("str_col", "10000").add("int_col", 10000).add("double_col", 10000.0d) - .add("short_col", new Short("10000")).add("long_col", 10000L).add("float_col", 10000.0f) - .add("bytes_col", new byte[]{39, 16}).add("decimal_col", new BigDecimal("10000")) - ); - String[] directives = new String[] { - "set-type str_col short", "set-type int_col i32", "set-type double_col Short", "set-type short_col I32", - "set-type long_col SHORT", "set-type float_col short", "set-type bytes_col short", "set-type decimal_col SHORT" - }; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - - for (int i = 0; i < row.width(); i++) { - Object object = row.getValue(i); - Assert.assertTrue(object instanceof Short); - Short value = (Short) object; - Assert.assertTrue(value.equals(new Short("10000"))); - } - } - - @Test - public void testToLong() throws Exception { - List rows = Collections.singletonList( - new Row("str_col", "10000").add("int_col", 10000).add("double_col", 10000.0d) - .add("short_col", new Short("10000")).add("long_col", 10000L).add("float_col", 10000.0f) - .add("bytes_col", new byte[]{0, 0, 0, 0 , 0, 0, 39, 16}).add("decimal_col", new BigDecimal("10000")) - ); - String[] directives = new String[] { - "set-type str_col long", "set-type int_col Long", "set-type double_col LONG", "set-type short_col long", - "set-type long_col Long", "set-type float_col LONG", "set-type bytes_col long", "set-type decimal_col long" - }; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - - for (int i = 0; i < row.width(); i++) { - Object object = row.getValue(i); - Assert.assertTrue(object instanceof Long); - Long value = (Long) object; - Assert.assertEquals(10000L, (long) value); - } - } - - @Test - public void testToFloat() throws Exception { - List rows = Collections.singletonList( - new Row("str_col", "10000.00").add("int_col", 10000).add("double_col", 10000.00d) - .add("short_col", new Short("10000")).add("long_col", 10000L).add("float_col", 10000.0f) - .add("bytes_col", new byte[]{70, 28, 64, 0}).add("decimal_col", new BigDecimal("10000")) - ); - String[] directives = new String[] { - "set-type str_col float", "set-type int_col Float", "set-type double_col FLOAT", "set-type short_col float", - "set-type long_col Float", "set-type float_col FLOAT", "set-type bytes_col float", "set-type decimal_col Float" - }; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - - for (int i = 0; i < row.width(); i++) { - Object object = row.getValue(i); - Assert.assertTrue(object instanceof Float); - Float value = (Float) object; - Assert.assertTrue(value.equals(new Float(10000))); - } - } - - @Test - public void testToDouble() throws Exception { - List rows = Collections.singletonList( - new Row("str_col", "10000.00").add("int_col", 10000).add("double_col", 10000.00d) - .add("short_col", new Short("10000")).add("long_col", 10000L).add("float_col", 10000.0f) - .add("bytes_col", new byte[]{64, -61, -120, 0, 0, 0, 0, 0}).add("decimal_col", new BigDecimal("10000")) - ); - String[] directives = new String[] { - "set-type str_col double", "set-type int_col Double", "set-type double_col DOUBLE", "set-type short_col double", - "set-type long_col Double", "set-type float_col DOUBLE", "set-type bytes_col double", - "set-type decimal_col Double" - }; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - - for (int i = 0; i < row.width(); i++) { - Object object = row.getValue(i); - Assert.assertTrue(object instanceof Double); - Double value = (Double) object; - Assert.assertTrue(value.equals(new Double(10000))); - } - } - - @Test - public void testToDecimal() throws Exception { - List rows = Collections.singletonList( - new Row("str_col", "10000").add("int_col", 10000).add("double_col", 10000.00d) - .add("short_col", new Short("10000")).add("long_col", 10000L).add("float_col", 10000.0f) - .add("bytes_col", new byte[] {0, 0, 0, 0, 39, 16}).add("decimal_col", new BigDecimal("10000")) - ); - String[] directives = new String[] { - "set-type str_col decimal", "set-type int_col Decimal", "set-type double_col DECIMAL", - "set-type short_col DECIMAL", "set-type long_col Decimal", "set-type float_col DECIMAL", - "set-type bytes_col decimal", "set-type decimal_col decimal" - }; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - for (int i = 0; i < row.width(); i++) { - Object object = row.getValue(i); - Assert.assertTrue(object instanceof BigDecimal); - BigDecimal value = (BigDecimal) object; - if (i == 2 || i == 5) { - Assert.assertTrue(new BigDecimal("10000.0").equals(value)); - } else { - Assert.assertTrue(new BigDecimal("10000").equals(value)); - } - } - } - - @Test - public void testToDecimalWithRound() throws Exception { - List rows = Collections.singletonList(new Row("scale_1", "122.5").add("scale_3", "456.789")); - String[] directives = new String[] {"set-type scale_1 decimal 0", "set-type scale_3 decimal 0 'FLOOR'"}; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - - Assert.assertTrue(row.getValue(0) instanceof BigDecimal); - Assert.assertEquals(row.getValue(0), new BigDecimal("122")); - - Assert.assertTrue(row.getValue(1) instanceof BigDecimal); - Assert.assertEquals(row.getValue(1), new BigDecimal("456")); - } - - @Test - public void testToDecimalNegativeScale() throws Exception { - List rows = Collections.singletonList(new Row("scale_2", "125.45")); - String[] directives = new String[] {"set-type scale_2 decimal -1 'HALF_UP'"}; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - - Assert.assertTrue(row.getValue(0) instanceof BigDecimal); - Assert.assertEquals(row.getValue(0), new BigDecimal("1.3E+2")); - } - - @Test(expected = RecipeException.class) - public void testToDecimalRoundingRequired() throws Exception { - List rows = Collections.singletonList(new Row("scale_2", "123.45")); - String[] directives = new String[] {"set-type scale_2 decimal 1 'UNNECESSARY'"}; - TestingRig.execute(directives, rows); - } - - @Test(expected = RecipeException.class) - public void testToDecimalInvalidRoundingMode() throws Exception { - List rows = Collections.singletonList(new Row("scale_2", "123.45")); - String[] directives = new String[] {"set-type scale_2 decimal 3 'RANDOM'"}; - TestingRig.execute(directives, rows); - } - - @Test - public void testToDecimalWithScalePrecisionAndRoundingMode() throws Exception { - List rows = Collections.singletonList(new Row("scale_1_precision_4", "122.5") - .add("scale_3_precision_6", "456.789")); - String[] directives = new String[] {"set-type :scale_1_precision_4 decimal 0 'FLOOR' prop:{precision=3}", - "set-type :scale_3_precision_6 decimal 0 prop:{precision=5}"}; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - - Assert.assertTrue(row.getValue(0) instanceof BigDecimal); - Assert.assertEquals(row.getValue(0), new BigDecimal("122")); - - Assert.assertTrue(row.getValue(1) instanceof BigDecimal); - Assert.assertEquals(row.getValue(1), new BigDecimal("457")); - } - - @Test - public void testToDecimalWithPrecision() throws Exception { - List rows = Collections.singletonList(new Row("scale_1_precision_4", "122.5")); - String[] directives = new String[] {"set-type :scale_1_precision_4 decimal 'FLOOR' prop:{precision=3}"}; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - - Assert.assertTrue(row.getValue(0) instanceof BigDecimal); - Assert.assertEquals(row.getValue(0), new BigDecimal("122")); - - } - - @Test(expected = RecipeException.class) - public void testToDecimalWithInvalidPrecision() throws Exception { - List rows = Collections.singletonList(new Row("scale_1_precision_4", "122.5")); - String[] directives = new String[] {"set-type :scale_1_precision_4 decimal 0 'FLOOR' prop:{precision=-1}"}; - TestingRig.execute(directives, rows); - } - - @Test - public void testToDecimalScaleIsNull() throws Exception { - List rows = Collections.singletonList(new Row("scale_2", "125.45")); - String[] directives = new String[] {"set-type scale_2 decimal"}; - Schema inputSchema = Schema.recordOf( - "inputSchema", - Schema.Field.of("scale_2", Schema.nullableOf(Schema.of(Schema.Type.DOUBLE))) - ); - - Schema expectedSchema = Schema.recordOf( - "expectedSchema", - Schema.Field.of("scale_2", Schema.decimalOf(77, 38)) - ); - - List results = TestingRig.execute(directives, rows); - Schema outputSchema = TestingRig.executeAndGetSchema(directives, rows, inputSchema); - Row row = results.get(0); - Schema.Field outputSchemaField = expectedSchema.getFields().get(0); - - Assert.assertTrue(row.getValue(0) instanceof BigDecimal); - Assert.assertEquals(row.getValue(0), new BigDecimal("125.45")); - - Assert.assertEquals(outputSchemaField.getSchema().getType(), - outputSchema.getField(outputSchemaField.getName()).getSchema().getNonNullable().getType()); - Assert.assertEquals(outputSchemaField.getSchema().getPrecision(), - outputSchema.getField(outputSchemaField.getName()).getSchema().getNonNullable().getPrecision()); - Assert.assertEquals(outputSchemaField.getSchema().getScale(), - outputSchema.getField(outputSchemaField.getName()).getSchema().getNonNullable().getScale()); - } - - @Test - public void testToBoolean() throws Exception { - List trueRows = Collections.singletonList( - new Row("str_1", "true").add("str_2", "True").add("str_3", "TRUE") - .add("int_col", 10000).add("double_col", 10000.00d) - .add("short_col", new Short("10000")).add("long_col", 10000L) - .add("float_col", 10000.0f).add("decimal_col", new BigDecimal("10000")) - .add("true_col", true) - ); - List falseRows = Collections.singletonList( - new Row("str_1", "false").add("str_2", "False").add("str_3", "FALSE") - .add("int_col", -10000).add("double_col", -10000.00d) - .add("short_col", new Short("-10000")).add("long_col", -10000L) - .add("float_col", -10000.0f).add("decimal_col", new BigDecimal("10000").negate()) - .add("false_col", false) - ); - String[] directives = new String[] { - "set-type str_1 bool", "set-type str_2 bool", "set-type str_3 bool", "set-type int_col Bool", - "set-type double_col BOOL", "set-type short_col boolean", "set-type long_col Boolean", - "set-type float_col BOOLEAN", "set-type bytes_col bool", "set-type decimal_col Boolean" - }; - - List trueResults = TestingRig.execute(directives, trueRows); - List falseResults = TestingRig.execute(directives, falseRows); - Row trueRow = trueResults.get(0); - Row falseRow = falseResults.get(0); - - for (int i = 0; i < trueRow.width(); i++) { - Object trueObject = trueRow.getValue(i); - Object falseObject = falseRow.getValue(i); - Assert.assertTrue(trueObject instanceof Boolean); - Assert.assertTrue(falseObject instanceof Boolean); - Boolean trueValue = (Boolean) trueObject; - Boolean falseValue = (Boolean) falseObject; - Assert.assertTrue(trueValue); - Assert.assertFalse(falseValue); - } - } - - @Test - public void testToString() throws Exception { - LocalDateTime now = LocalDateTime.now(); - List rows = Collections.singletonList( - new Row("str_col", "10000").add("int_col", 10000).add("double_col", 10000d) - .add("short_col", new Short("10000")).add("long_col", 10000L).add("float_col", 10000f) - .add("bytes_col", new byte[]{49, 48, 48, 48, 48}).add("decimal_col", new BigDecimal("10000")) - .add ("datetime_col", now) - ); - String[] directives = new String[] { - "set-type str_col string", "set-type int_col String", "set-type double_col STRING", "set-type short_col string", - "set-type long_col String", "set-type float_col STRING", "set-type bytes_col string", - "set-type decimal_col STRING", "set-type datetime_col STRING" - }; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - - for (int i = 0; i < row.width(); i++) { - Object object = row.getValue(i); - Assert.assertTrue(object instanceof String); - String value = (String) object; - if (i == 2 || i == 5) { - Assert.assertEquals("10000.0", value); - } else if (i == 8) { - Assert.assertEquals(now.toString(), value); - } else { - Assert.assertEquals("10000", value); - } - } - } - - @Test - public void testTimestampToString() throws Exception { - ZonedDateTime zdt = ZonedDateTime.now(); - List rows = Collections.singletonList( - new Row("timestamp_col", zdt) - ); - String[] directives = new String[] { - "set-type timestamp_col string" - }; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - Object object = row.getValue(0); - Assert.assertTrue(object instanceof String); - Assert.assertEquals(zdt.toString(), object); - } - - @Test - public void testToBytes() throws Exception { - List rows = Collections.singletonList( - new Row("str_col", "10000").add("int_col", 10000).add("double_col", 10000.00d) - .add("short_col", new Short("10000")).add("long_col", 10000L).add("float_col", 10000.0f) - .add("bytes_col", new byte[] {64, -61, -120, 0, 0, 0, 0, 0}).add("decimal_col", new BigDecimal("10000")) - ); - byte[][] bytesResults = new byte[][] { - new byte[] {49, 48, 48, 48, 48}, - new byte[] {0, 0, 39, 16}, - new byte[] {64, -61, -120, 0, 0, 0, 0, 0}, - new byte[] {39, 16}, - new byte[] {0, 0, 0, 0, 0, 0, 39, 16}, - new byte[] {70, 28, 64, 0}, - new byte[] {64, -61, -120, 0, 0, 0, 0, 0}, - new byte[] {0, 0, 0, 0, 39, 16} - }; - String[] directives = new String[] { - "set-type str_col bytes", "set-type int_col Bytes", "set-type double_col BYTES", "set-type short_col bytes", - "set-type long_col Bytes", "set-type float_col BYTES", "set-type bytes_col bytes", "set-type decimal_col bytes" - }; - List results = TestingRig.execute(directives, rows); - Row row = results.get(0); - - for (int i = 0; i < row.width(); i++) { - Object object = row.getValue(i); - Assert.assertTrue(object instanceof byte[]); - byte [] value = (byte[]) object; - Assert.assertEquals(0, Bytes.compareTo(value, bytesResults[i])); - } - } - - @Test - public void testGetOutputSchemaForTypeChangedColumn() throws Exception { - String[] directives = new String[] { - "set-type :A I64", - "set-type :B shoRT", - "set-type :C decimal 5 HALF_UP", - "set-type :D bytes", - "set-type :E string", - "set-type :F BOOLEAN", - "set-type :G double" - }; - List rows = Collections.singletonList( - new Row("A", "1234").add("B", "1").add("C", "143235.016") - .add("D", "random").add("E", 123).add("F", "true").add("G", 12L) - ); - Schema inputSchema = Schema.recordOf( - "inputSchema", - Schema.Field.of("A", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("B", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("C", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("D", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("E", Schema.nullableOf(Schema.of(Schema.Type.INT))), - Schema.Field.of("F", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("G", Schema.nullableOf(Schema.of(Schema.Type.LONG))) - ); - Schema expectedSchema = Schema.recordOf( - "expectedSchema", - Schema.Field.of("A", Schema.of(Schema.Type.INT)), - Schema.Field.of("B", Schema.of(Schema.Type.INT)), - Schema.Field.of("C", Schema.decimalOf(38, 5)), - Schema.Field.of("D", Schema.of(Schema.Type.BYTES)), - Schema.Field.of("E", Schema.of(Schema.Type.STRING)), - Schema.Field.of("F", Schema.of(Schema.Type.BOOLEAN)), - Schema.Field.of("G", Schema.of(Schema.Type.DOUBLE)) - ); - - Schema outputSchema = TestingRig.executeAndGetSchema(directives, rows, inputSchema); - - Assert.assertEquals(outputSchema.getFields().size(), expectedSchema.getFields().size()); - for (Schema.Field expectedField : expectedSchema.getFields()) { - Assert.assertEquals(expectedField.getSchema().getType(), - outputSchema.getField(expectedField.getName()).getSchema().getNonNullable().getType()); - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/column/SplitToColumnsTest.java b/wrangler-core/src/test/java/io/cdap/directives/column/SplitToColumnsTest.java deleted file mode 100644 index 446952443..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/column/SplitToColumnsTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.column; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link SplitToColumns} - */ -public class SplitToColumnsTest { - @Test - public void testSplitToColumns() throws Exception { - String[] directives = new String[] { - "split-to-columns body \\n", - }; - - List rows = Arrays.asList( - new Row("body", "AABBCDE\nEEFFFF") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("AABBCDE", rows.get(0).getValue("body_1")); - Assert.assertEquals("EEFFFF", rows.get(0).getValue("body_2")); - } -} - diff --git a/wrangler-core/src/test/java/io/cdap/directives/currency/FormatAsCurrencyTest.java b/wrangler-core/src/test/java/io/cdap/directives/currency/FormatAsCurrencyTest.java deleted file mode 100644 index 3145cdbcc..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/currency/FormatAsCurrencyTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.currency; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import org.apache.commons.lang3.LocaleUtils; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; -import java.util.Locale; - -/** - * Tests {@link ParseAsCurrency} - */ -public class FormatAsCurrencyTest { - - @Test - public void testDefaultOption() throws Exception { - List rows = Arrays.asList( - new Row("src", "$1.56"), - new Row("src", "$45.56"), - new Row("src", "$6.78"), - new Row("src", "$0.09"), - new Row("src", "1234.56"), - new Row("src", "$8,976.78"), - new Row("src", "$58,976.78"), - new Row("src", "$1,234,678.67") - ); - - String[] directives = new String[] { - "parse-as-currency :src :dst", - "parse-as-currency :src :dst1 'en_US'", - "format-as-currency :dst :fmt1 'en_US'" - }; - - double[] expected = new double[] { - 1.56, - 45.56, - 6.78, - 0.09, - 8976.78, - 58976.78, - 1234678.67 - }; - - Pair, List> result = TestingRig.executeWithErrors(directives, rows); - List results = result.getFirst(); - List errors = result.getSecond(); - - Assert.assertEquals(7, results.size()); - Assert.assertEquals(1, errors.size()); - - int i = 0; - for (Row row : results) { - double val = (double) row.getValue("dst"); - Assert.assertEquals(expected[i], val, 0.001); - ++i; - } - - i = 0; - for (Row row : results) { - double val = (double) row.getValue("dst1"); - Assert.assertEquals(expected[i], val, 0.001); - ++i; - } - - for (Row row : results) { - String src = (String) row.getValue("src"); - String dst = (String) row.getValue("fmt1"); - Assert.assertEquals(src, dst); - } - } - - @Test - public void testUSDToEUR() throws Exception { - List rows = Arrays.asList( - new Row("src", 1.56), - new Row("src", 45.56), - new Row("src", 6.78), - new Row("src", 0.09), - new Row("src", 1234.56), - new Row("src", 8976.78), - new Row("src", 58976.78), - new Row("src", 1234678.67) - ); - - String[] directives = new String[] { - "format-as-currency :src :dst 'en_IE'" - }; - - Pair, List> result = TestingRig.executeWithErrors(directives, rows); - List results = result.getFirst(); - List errors = result.getSecond(); - - Assert.assertEquals(8, results.size()); - Assert.assertEquals(0, errors.size()); - } - - @Test - public void testGetLocale() throws Exception { - List locales = LocaleUtils.availableLocaleList(); - Assert.assertTrue(locales.size() > 0); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/currency/ParseAsCurrencyTest.java b/wrangler-core/src/test/java/io/cdap/directives/currency/ParseAsCurrencyTest.java deleted file mode 100644 index 74384cd1d..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/currency/ParseAsCurrencyTest.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.currency; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link ParseAsCurrency} - */ -public class ParseAsCurrencyTest { - - @Test - public void testDefaultOption() throws Exception { - List rows = Arrays.asList( - new Row("src", "$1.56"), - new Row("src", "$45.56"), - new Row("src", "$6.78"), - new Row("src", "$0.09"), - new Row("src", "1234.56"), - new Row("src", "$8,976.78"), - new Row("src", "$58,976.78"), - new Row("src", "$1,234,678.67") - ); - - String[] directives = new String[] { - "parse-as-currency :src :dst", - "parse-as-currency :src :dst1 'en_US'" - }; - - double[] expected = new double[] { - 1.56, - 45.56, - 6.78, - 0.09, - 8976.78, - 58976.78, - 1234678.67 - }; - - Pair, List> result = TestingRig.executeWithErrors(directives, rows); - List results = result.getFirst(); - List errors = result.getSecond(); - - Assert.assertEquals(7, results.size()); - Assert.assertEquals(1, errors.size()); - - int i = 0; - for (Row row : results) { - double val = (double) row.getValue("dst"); - Assert.assertEquals(expected[i], val, 0.001); - ++i; - } - - i = 0; - for (Row row : results) { - double val = (double) row.getValue("dst1"); - Assert.assertEquals(expected[i], val, 0.001); - ++i; - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/datamodel/DataModelMapColumnTest.java b/wrangler-core/src/test/java/io/cdap/directives/datamodel/DataModelMapColumnTest.java deleted file mode 100644 index 01f29228c..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/datamodel/DataModelMapColumnTest.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.directives.datamodel; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.datamodel.DataModelGlossary; -import io.cdap.wrangler.utils.AvroSchemaGlossary; -import org.apache.avro.Schema; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link DataModelMapColumn} - */ -@RunWith(PowerMockRunner.class) -@PrepareForTest(DataModelGlossary.class) -public class DataModelMapColumnTest { - - private static final String SCHEMA = "{\n" - + " \"type\": \"record\",\n" - + " \"name\": \"TEST_DATA_MODEL\",\n" - + " \"namespace\": \"google.com.datamodels\",\n" - + " \"_revision\": \"1\", \n" - + " \"fields\": [\n" - + " {\n" - + " \"name\": \"TEST_MODEL\",\n" - + " \"type\": [\n" - + " \"null\", {\n" - + " \"type\": \"record\",\n" - + " \"name\": \"TEST_MODEL\",\n" - + " \"namespace\": \"google.com.datamodels.Model\",\n" - + " \"fields\": [\n" - + " {\n" - + " \"name\": \"int_field\",\n" - + " \"type\": [\"int\"]\n" - + " },\n" - + " {\n" - + " \"name\": \"missing_field_type\",\n" - + " \"type\": [\"null\"]\n" - + " }\n" - + " ]}\n" - + " ]\n" - + " }\n" - + " ]\n" - + "}"; - - @Test(expected = RecipeException.class) - public void testInitialize_unknownDataModel_directiveException() throws Exception { - AvroSchemaGlossary mockGlossary = Mockito.mock(AvroSchemaGlossary.class); - Mockito.when(mockGlossary.configure()).thenReturn(true); - Mockito.when(mockGlossary.get(Mockito.anyString(), Mockito.anyLong())).thenReturn(null); - - PowerMockito.mockStatic(DataModelGlossary.class); - PowerMockito.when(DataModelGlossary.initialize(Mockito.anyString())).thenReturn(true); - PowerMockito.when(DataModelGlossary.getGlossary()).thenReturn(mockGlossary); - DataModelMapColumn.setGlossary("http://test-url.com", mockGlossary); - - String[] directives = new String[]{ - "data-model-map-column 'http://test-url.com' 'UNKNOWN_DATA_MODEL' 1 'TEST_MODEL' 'int_field' :dummy_col_1", - }; - - List rows = Arrays.asList( - new Row("dummy_col_1", "1") - .add("dummy_col_2", "2") - .add("dummy_col_3", "3") - .add("dummy_col_4", "4") - .add("dummy_col_5", "5") - ); - - TestingRig.execute(directives, rows); - } - - @Test(expected = RecipeException.class) - public void testInitialize_unknownRevision_directiveException() throws Exception { - AvroSchemaGlossary mockGlossary = Mockito.mock(AvroSchemaGlossary.class); - Mockito.when(mockGlossary.configure()).thenReturn(true); - Mockito.when(mockGlossary.get(Mockito.anyString(), Mockito.anyLong())).thenReturn(null); - - PowerMockito.mockStatic(DataModelGlossary.class); - PowerMockito.when(DataModelGlossary.initialize(Mockito.anyString())).thenReturn(true); - PowerMockito.when(DataModelGlossary.getGlossary()).thenReturn(mockGlossary); - DataModelMapColumn.setGlossary("http://test-url.com", mockGlossary); - - String[] directives = new String[]{ - "data-model-map-column 'http://test-url.com' 'google.com.datamodels.TEST_DATA_MODEL' 0 'TEST_MODEL' " - + "'int_field' :dummy_col_1", - }; - - List rows = Arrays.asList( - new Row("dummy_col_1", "1") - .add("dummy_col_2", "2") - .add("dummy_col_3", "3") - .add("dummy_col_4", "4") - .add("dummy_col_5", "5") - ); - - TestingRig.execute(directives, rows); - } - - @Test(expected = RecipeException.class) - public void testInitialize_unknownModel_directiveException() throws Exception { - Schema.Parser parser = new Schema.Parser().setValidate(false); - AvroSchemaGlossary mockGlossary = Mockito.mock(AvroSchemaGlossary.class); - Mockito.when(mockGlossary.configure()).thenReturn(true); - Mockito.when(mockGlossary.get(Mockito.anyString(), Mockito.anyLong())).thenReturn(parser.parse(SCHEMA)); - - PowerMockito.mockStatic(DataModelGlossary.class); - PowerMockito.when(DataModelGlossary.initialize(Mockito.anyString())).thenReturn(true); - PowerMockito.when(DataModelGlossary.getGlossary()).thenReturn(mockGlossary); - DataModelMapColumn.setGlossary("http://test-url.com", mockGlossary); - - String[] directives = new String[]{ - "data-model-map-column 'http://test-url.com' 'google.com.datamodels.TEST_DATA_MODEL' 1 'UNKNOWN_MODEL' " - + "'int_field' :dummy_col_1", - }; - - List rows = Arrays.asList( - new Row("dummy_col_1", "1") - .add("dummy_col_2", "2") - .add("dummy_col_3", "3") - .add("dummy_col_4", "4") - .add("dummy_col_5", "5") - ); - - TestingRig.execute(directives, rows); - } - - @Test(expected = RecipeException.class) - public void testInitialize_unknownTargetField_directiveException() throws Exception { - Schema.Parser parser = new Schema.Parser().setValidate(false); - AvroSchemaGlossary mockGlossary = Mockito.mock(AvroSchemaGlossary.class); - Mockito.when(mockGlossary.configure()).thenReturn(true); - Mockito.when(mockGlossary.get(Mockito.anyString(), Mockito.anyLong())).thenReturn(parser.parse(SCHEMA)); - - PowerMockito.mockStatic(DataModelGlossary.class); - PowerMockito.when(DataModelGlossary.initialize(Mockito.anyString())).thenReturn(true); - PowerMockito.when(DataModelGlossary.getGlossary()).thenReturn(mockGlossary); - DataModelMapColumn.setGlossary("http://test-url.com", mockGlossary); - - String[] directives = new String[]{ - "data-model-map-column 'http://test-url.com' 'google.com.datamodels.TEST_DATA_MODEL' 1 'TEST_MODEL' " - + "'_unknown_field' :dummy_col_1", - }; - - List rows = Arrays.asList( - new Row("dummy_col_1", "1") - .add("dummy_col_2", "2") - .add("dummy_col_3", "3") - .add("dummy_col_4", "4") - .add("dummy_col_5", "5") - ); - - TestingRig.execute(directives, rows); - } - - @Test(expected = RecipeException.class) - public void testInitialize_targetFieldMissingType_directiveException() throws Exception { - Schema.Parser parser = new Schema.Parser().setValidate(false); - AvroSchemaGlossary mockGlossary = Mockito.mock(AvroSchemaGlossary.class); - Mockito.when(mockGlossary.configure()).thenReturn(true); - Mockito.when(mockGlossary.get(Mockito.anyString(), Mockito.anyLong())).thenReturn(parser.parse(SCHEMA)); - - PowerMockito.mockStatic(DataModelGlossary.class); - PowerMockito.when(DataModelGlossary.initialize(Mockito.anyString())).thenReturn(true); - PowerMockito.when(DataModelGlossary.getGlossary()).thenReturn(mockGlossary); - DataModelMapColumn.setGlossary("http://test-url.com", mockGlossary); - - String[] directives = new String[]{ - "data-model-map-column 'http://test-url.com' 'google.com.datamodels.TEST_DATA_MODEL' 1 'TEST_MODEL' " - + "'missing_field_type' :dummy_col_1", - }; - - List rows = Arrays.asList( - new Row("dummy_col_1", "1") - .add("dummy_col_2", "2") - .add("dummy_col_3", "3") - .add("dummy_col_4", "4") - .add("dummy_col_5", "5") - ); - - TestingRig.execute(directives, rows); - } - - @Test - public void testExecute_row_successful() throws Exception { - Schema.Parser parser = new Schema.Parser().setValidate(false); - AvroSchemaGlossary mockGlossary = Mockito.mock(AvroSchemaGlossary.class); - Mockito.when(mockGlossary.configure()).thenReturn(true); - Mockito.when(mockGlossary.get(Mockito.anyString(), Mockito.anyLong())).thenReturn(parser.parse(SCHEMA)); - - PowerMockito.mockStatic(DataModelGlossary.class); - PowerMockito.when(DataModelGlossary.initialize(Mockito.anyString())).thenReturn(true); - PowerMockito.when(DataModelGlossary.getGlossary()).thenReturn(mockGlossary); - DataModelMapColumn.setGlossary("http://test-url.com", mockGlossary); - - String[] directives = new String[]{ - "data-model-map-column 'http://test-url.com' 'google.com.datamodels.TEST_DATA_MODEL' 1 'TEST_MODEL' " - + "'int_field' :dummy_col_1", - }; - - List rows = Arrays.asList( - new Row("dummy_col_1", "1") - .add("dummy_col_2", "2") - .add("dummy_col_3", "3") - .add("dummy_col_4", "4") - .add("dummy_col_5", "5") - ); - - List results = TestingRig.execute(directives, rows); - Assert.assertEquals(1, results.size()); - int columnIndex = results.get(0).find("int_field"); - Assert.assertNotEquals(-1, columnIndex); - - Object value = results.get(0).getValue(columnIndex); - Assert.assertTrue(value instanceof Integer); - Assert.assertEquals(1, ((Integer) value).intValue()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/datetime/CurrentDateTimeTest.java b/wrangler-core/src/test/java/io/cdap/directives/datetime/CurrentDateTimeTest.java deleted file mode 100644 index 10b4ddb18..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/datetime/CurrentDateTimeTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.directives.datetime; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.time.LocalDateTime; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -public class CurrentDateTimeTest { - - @Test - public void testDefaultZone() throws Exception { - String colName = "col1"; - String[] directives = new String[]{ - String.format("%s :%s", CurrentDateTime.NAME, colName) - }; - Row row1 = new Row(); - row1.add(colName, null); - List result = TestingRig.execute(directives, Collections.singletonList(row1)); - Assert.assertTrue(result.get(0).getValue(colName) instanceof LocalDateTime); - } - - @Test - public void testAddColumn() throws Exception { - String colName = "col1"; - String[] directives = new String[]{ - String.format("%s :%s", CurrentDateTime.NAME, colName) - }; - //Skip column - it should be automatically added - Row row1 = new Row(); - Row row2 = new Row(); - List result = TestingRig.execute(directives, Arrays.asList(row1, row2)); - Row resultRow1 = result.get(0); - Assert.assertEquals(1, resultRow1.width()); - Assert.assertTrue(resultRow1.getValue(colName) instanceof LocalDateTime); - Row resultRow2 = result.get(1); - Assert.assertEquals(1, resultRow2.width()); - Assert.assertTrue(resultRow2.getValue(colName) instanceof LocalDateTime); - } - - @Test(expected = RecipeException.class) - public void testInvalidZone() throws Exception { - String zone = "abcd"; - String colName = "col1"; - String[] directives = new String[]{String.format("%s :%s '%s'", CurrentDateTime.NAME, colName, zone)}; - Row row1 = new Row(); - row1.add(colName, null); - TestingRig.execute(directives, Collections.singletonList(row1)); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/datetime/DateTimeToTimestampTest.java b/wrangler-core/src/test/java/io/cdap/directives/datetime/DateTimeToTimestampTest.java deleted file mode 100644 index 3b0373d79..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/datetime/DateTimeToTimestampTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.directives.datetime; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; - -public class DateTimeToTimestampTest { - - @Test - public void testZones() throws Exception { - String[] testZones = new String[]{"UTC", "GMT", "Australia/Sydney", "America/Los_Angeles"}; - String[] colNames = new String[]{"col1", "col2", "col3", "col4"}; - LocalDateTime localDateTime = LocalDateTime.of(2000, 8, 22, 20, 36, 45, 1234); - String[] directives = new String[testZones.length]; - Row row = new Row(); - for (int i = 0; i < testZones.length; i++) { - directives[i] = String.format("%s :%s \"%s\"", DateTimeToTimeStamp.NAME, colNames[i], testZones[i]); - row.add(colNames[i], localDateTime); - } - List rows = TestingRig.execute(directives, Collections.singletonList(row)); - - Assert.assertEquals(1, rows.size()); - - for (Row resultRow : rows) { - for (int i = 0; i < testZones.length; i++) { - Assert.assertEquals(ZonedDateTime.of(localDateTime, ZoneId.of(testZones[i])), - rows.get(0).getValue(colNames[i])); - } - } - } - - @Test - public void testDefaultZone() throws Exception { - String colName = "col1"; - String[] directives = new String[]{String.format("%s :%s", DateTimeToTimeStamp.NAME, colName)}; - Row row1 = new Row(); - LocalDateTime now = LocalDateTime.now(); - row1.add(colName, now); - List result = TestingRig.execute(directives, Collections.singletonList(row1)); - Assert.assertEquals(ZonedDateTime.of(now, ZoneId.of("UTC")), - result.get(0).getValue(colName)); - } - - @Test(expected = RecipeException.class) - public void testInvalidZone() throws Exception { - String zone = "abcd"; - String colName = "col1"; - String[] directives = new String[]{String.format("%s :%s '%s'", DateTimeToTimeStamp.NAME, colName, zone)}; - Row row1 = new Row(); - row1.add(colName, LocalDateTime.now()); - TestingRig.execute(directives, Collections.singletonList(row1)); - } - - @Test - public void testInvalidObject() throws Exception { - String colName = "col1"; - String[] directives = new String[]{String.format("%s :%s", DateTimeToTimeStamp.NAME, colName)}; - Row row1 = new Row(); - row1.add(colName, LocalDateTime.now().toString()); - final List results = TestingRig.execute(directives, Collections.singletonList(row1)); - //should be error collected - Assert.assertTrue(results.isEmpty()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/datetime/FormatDateTimeTest.java b/wrangler-core/src/test/java/io/cdap/directives/datetime/FormatDateTimeTest.java deleted file mode 100644 index bb129e31d..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/datetime/FormatDateTimeTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.directives.datetime; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.time.LocalDateTime; -import java.util.Collections; -import java.util.List; - -public class FormatDateTimeTest { - - @Test - public void testDateTimeFormats() throws Exception { - String[] testPatterns = new String[]{"MM/dd/yyyy HH:mm", "yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss[xxx]", - "yyyyMMdd h:mm a"}; - String[] colNames = new String[]{"col1", "col2", "col3", "col4", "col5"}; - LocalDateTime localDateTime = LocalDateTime.of(2000, 8, 22, 20, 36, 45, 1234); - String[] dateTimes = new String[]{"08/22/2000 20:36", "2000-08-22T20:36:45", "2000-08-22T20:36:45", - "20000822 8:36 PM"}; - String[] directives = new String[testPatterns.length]; - Row row = new Row(); - for (int i = 0; i < testPatterns.length; i++) { - directives[i] = String.format("%s :%s \"%s\"", FormatDateTime.NAME, colNames[i], testPatterns[i]); - row.add(colNames[i], localDateTime); - } - List rows = TestingRig.execute(directives, Collections.singletonList(row)); - - Assert.assertEquals(1, rows.size()); - for (Row resultRow : rows) { - for (int i = 0; i < testPatterns.length; i++) { - Assert.assertEquals(dateTimes[i], rows.get(0).getValue(colNames[i])); - } - } - } - - @Test(expected = RecipeException.class) - public void testInvalidFormat() throws Exception { - String pattern = "abcd"; - String colName = "col1"; - String[] directives = new String[]{String.format("format-datetime :%s '%s'", colName, pattern)}; - Row row1 = new Row(); - row1.add(colName, LocalDateTime.now()); - TestingRig.execute(directives, Collections.singletonList(row1)); - } - - @Test - public void testInvalidObject() throws Exception { - String pattern = "MM/dd/yyyy HH:mm"; - String colName = "col1"; - String datetime1 = "12/10/2016"; - String[] directives = new String[]{String.format("format-datetime :%s '%s'", colName, pattern)}; - Row row1 = new Row(); - row1.add(colName, datetime1); - - final List results = TestingRig.execute(directives, Collections.singletonList(row1)); - //should be error collected - Assert.assertTrue(results.isEmpty()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/datetime/TimestampToDateTimeTest.java b/wrangler-core/src/test/java/io/cdap/directives/datetime/TimestampToDateTimeTest.java deleted file mode 100644 index 93d76dae7..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/datetime/TimestampToDateTimeTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.directives.datetime; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.time.LocalDateTime; -import java.time.ZonedDateTime; -import java.util.Collections; -import java.util.List; - -public class TimestampToDateTimeTest { - - @Test - public void testConversion() throws Exception { - String colName = "col1"; - ZonedDateTime zonedDateTime = ZonedDateTime.now(); - Row row = new Row(); - String[] directives = new String[]{String.format("%s :%s", TimestampToDateTime.NAME, colName)}; - row.add(colName, zonedDateTime); - List rows = TestingRig.execute(directives, Collections.singletonList(row)); - - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(zonedDateTime.toLocalDateTime(), rows.get(0).getValue(colName)); - } - - @Test - public void testInvalidObject() throws Exception { - String colName = "col1"; - String[] directives = new String[]{String.format("%s :%s", TimestampToDateTime.NAME, colName)}; - Row row1 = new Row(); - row1.add(colName, LocalDateTime.now().toString()); - final List results = TestingRig.execute(directives, Collections.singletonList(row1)); - //should be error collected - Assert.assertTrue(results.isEmpty()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/external/InvokeHttpTest.java b/wrangler-core/src/test/java/io/cdap/directives/external/InvokeHttpTest.java deleted file mode 100644 index 4089c421e..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/external/InvokeHttpTest.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.external; - -import com.google.gson.Gson; -import com.google.gson.JsonParseException; -import com.google.gson.reflect.TypeToken; -import io.cdap.http.HandlerContext; -import io.cdap.http.HttpHandler; -import io.cdap.http.HttpResponder; -import io.cdap.http.NettyHttpService; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.api.Row; -import io.netty.handler.codec.http.FullHttpRequest; -import io.netty.handler.codec.http.HttpResponseStatus; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.Path; - -/** - * Tests {@link InvokeHttp} - */ -public class InvokeHttpTest { - private static final Gson GSON = new Gson(); - private static NettyHttpService httpService; - private static String baseURL; - - @Before - public void startService() throws Exception { - List handlers = new ArrayList<>(); - handlers.add(new ServiceHandler()); - httpService = NettyHttpService.builder("Services") - .setHttpHandlers(handlers) - .build(); - httpService.start(); - int port = httpService.getBindAddress().getPort(); - baseURL = "http://localhost:" + port; - } - - public static class ServiceHandler implements HttpHandler { - @Override - public void init(HandlerContext handlerContext) { - // no-op - } - - @Override - public void destroy(HandlerContext handlerContext) { - // no-op - } - - @POST - @Path("service") - public void append(FullHttpRequest request, HttpResponder responder, - @HeaderParam("C") String headerC) { - Map object = postRequest(request); - Map response = new HashMap<>(); - String c = String.format("%s:%f", object.get("a"), object.get("b")); - response.put("c", c); - response.put("HeaderC", headerC); - responder.sendJson(HttpResponseStatus.OK, GSON.toJson(response)); - } - - private Map postRequest(FullHttpRequest request) throws JsonParseException { - String contentString = request.content().toString(StandardCharsets.UTF_8); - if (contentString.isEmpty()) { - return null; - } - return new Gson().fromJson(contentString, new TypeToken>() { }.getType()); - } - } - - @Test - public void testHttpInvokeWithHeaders() throws Exception { - String[] directives = new String[] { - "invoke-http " + (baseURL + "/service ") + "a,b A=1,B=2,C=3" - }; - - List rows = Arrays.asList( - new Row("a", "1").add("b", 2.0), - new Row("a", "3").add("b", 4.2) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(2, rows.size()); - Assert.assertEquals(4, rows.get(0).width()); - Assert.assertEquals(4, rows.get(1).width()); - Assert.assertEquals("1:2.000000", rows.get(0).getValue("c")); - Assert.assertEquals("3:4.200000", rows.get(1).getValue("c")); - Assert.assertEquals("3", rows.get(0).getValue("HeaderC")); - Assert.assertEquals("3", rows.get(1).getValue("HeaderC")); - } - - @Test - public void testHttpInvokeWithOutHeaders() throws Exception { - String[] directives = new String[] { - "invoke-http " + (baseURL + "/service ") + "a,b" - }; - - List rows = Arrays.asList( - new Row("a", "1").add("b", 2.0), - new Row("a", "3").add("b", 4.2) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(2, rows.size()); - Assert.assertEquals("1:2.000000", rows.get(0).getValue("c")); - Assert.assertEquals("3:4.200000", rows.get(1).getValue("c")); - Assert.assertEquals(3, rows.get(0).width()); - Assert.assertEquals(3, rows.get(1).width()); - } - - @Test - public void testHttpInvokeWithWrongEndPoint() throws Exception { - String[] directives = new String[] { - "invoke-http " + (baseURL + "/wrongserviceendpoint ") + "a,b" - }; - - List rows = Arrays.asList( - new Row("a", "1").add("b", 2.0), - new Row("a", "3").add("b", 4.2) - ); - - - RecipePipeline executor = TestingRig.execute(directives); - rows = executor.execute(rows); - Assert.assertTrue(rows.size() == 0); - Assert.assertTrue(executor.errors().size() == 2); - } - - @After - public void stopService() throws Exception { - httpService.stop(); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/lookup/CatalogLookupTest.java b/wrangler-core/src/test/java/io/cdap/directives/lookup/CatalogLookupTest.java deleted file mode 100644 index 28acc33cf..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/lookup/CatalogLookupTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.lookup; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link CatalogLookup} - */ -public class CatalogLookupTest { - - @Test - public void testICDCodeLookup() throws Exception { - String[] directives = new String[] { - "catalog-lookup icd-10-2016 code", - "catalog-lookup ICD-10-2017 code", - }; - - - List rows = Arrays.asList( - new Row("code", "A0100"), - new Row("code", "A0102"), - new Row("code", "Z9989"), - new Row("code", "Y36521S"), - new Row("code", "ABC"), // Invalid code. - new Row("name", "Root") // Code Column doesn't exit. - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 6); - Assert.assertEquals("code_icd_10_2016_description", rows.get(0).getColumn(1)); - Assert.assertEquals("code_icd_10_2017_description", rows.get(0).getColumn(2)); - for (int i = 0; i < 6; ++i) { - Assert.assertEquals(3, rows.get(i).width()); - } - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/npl/StemmingTest.java b/wrangler-core/src/test/java/io/cdap/directives/npl/StemmingTest.java deleted file mode 100644 index bf6fbb83c..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/npl/StemmingTest.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.npl; - -import io.cdap.directives.nlp.Stemming; -import io.cdap.directives.nlp.internal.PorterStemmer; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link PorterStemmer} and {@link Stemming} - */ -public class StemmingTest { - - @Test - public void testPorterStemming() throws Exception { - PorterStemmer stemmer = new PorterStemmer(); - String[] i = new String[]{ - "How", - "are", - "you", - "doing", - "do", - "you", - "have", - "apples" - }; - List o = stemmer.process(Arrays.asList(i)); - Assert.assertTrue(o.size() > 1); - } - - @Test - public void testStemming() throws Exception { - String[] directives = new String[] { - "stemming words", - }; - - List rows = Arrays.asList( - new Row("words", Arrays.asList("how", "are", "you", "doing", "do", "you", "have", "apples")) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(Arrays.asList("how", "ar", "you", "do", "do", "you", "have", "appl"), - rows.get(0).getValue("words_porter")); - } - - @Test - public void testStringStemming() throws Exception { - String[] directives = new String[] { - "stemming words", - }; - - List rows = Arrays.asList( - new Row("words", "how are you doing ? do you have apples") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(Arrays.asList("how", "ar", "you", "do", "do", "you", "have", "appl"), - rows.get(0).getValue("words_porter")); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/CsvParserTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/CsvParserTest.java deleted file mode 100644 index 976df4eb0..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/CsvParserTest.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link CsvParser} - */ -public class CsvParserTest { - @Test - public void testParseCSV() throws Exception { - String[] directives = new String[] { - "parse-as-csv body , false", - "drop body", - "rename body_1 date", - "parse-as-csv date / false", - "rename date_1 month", - "rename date_2 day", - "rename date_3 year" - }; - - List rows = Arrays.asList( - new Row("body", "07/29/2013,Debt collection,\"Other (i.e. phone, health club, etc.)\",Cont'd attempts collect " + - "debt not owed,Debt is not mine,,,\"NRA Group, LLC\",VA,20147,,N/A,Web,08/07/2013,Closed with non-monetary " + - "relief,Yes,No,467801"), - new Row("body", "07/29/2013,Mortgage,Conventional fixed mortgage,\"Loan servicing, payments, escrow account\",," + - ",,Franklin Credit Management,CT,06106,,N/A,Web,07/30/2013,Closed with explanation,Yes,No,475823") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(2, rows.size()); - Assert.assertEquals("07/29/2013", rows.get(0).getValue("date")); - } - - @Test - public void testHeaders() throws Exception { - String[] directives = new String[] { "parse-as-csv body , true" }; - - List rows = Arrays.asList( - new Row("body", "first name, last \t name"), - new Row("body", "alice,zed") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("alice", rows.get(0).getValue("first_name")); - Assert.assertEquals("zed", rows.get(0).getValue("last_name")); - } - - @Test - public void testTrailingCommas() throws Exception { - String[] directives = new String[] { - "parse-as-csv body , false", - "filter-rows-on regex-match body_1 ^school_id$", - "drop body", - "set columns school_id, student_id, last_name, first_name", - "keep school_id,student_id,last_name,first_name" - }; - - List rows = Arrays.asList( - new Row("body", "school_id, student_id, last_name, first_name,,,"), - new Row("body", "14J456,33445566,Potter,Harry,,,"), - new Row("body", "14J456,44333433,Weasley,Ron,,,"), - new Row("body", "14J456,65765566,Granger,Hermione,,,"), - new Row("body", "14J456,13233121,Diggory,Cedric,,,"), - new Row("body", "14J456,98786868,Weasley,George,,,"), - new Row("body", "14J456,78977876,Weasley,Fred,,,") - ); - - List expected = Arrays.asList( - new Row("school_id", "14J456").add("student_id", "33445566").add("last_name", "Potter") - .add("first_name", "Harry"), - new Row("school_id", "14J456").add("student_id", "44333433").add("last_name", "Weasley") - .add("first_name", "Ron"), - new Row("school_id", "14J456").add("student_id", "65765566").add("last_name", "Granger") - .add("first_name", "Hermione"), - new Row("school_id", "14J456").add("student_id", "13233121").add("last_name", "Diggory") - .add("first_name", "Cedric"), - new Row("school_id", "14J456").add("student_id", "98786868").add("last_name", "Weasley") - .add("first_name", "George"), - new Row("school_id", "14J456").add("student_id", "78977876").add("last_name", "Weasley") - .add("first_name", "Fred") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(6, rows.size()); - for (int i = 0; i < rows.size(); ++i) { - Assert.assertEquals(4, rows.get(i).width()); - for (int j = 0; j < 4; j++) { - Assert.assertEquals(expected.get(i).getValue(j), rows.get(i).getValue(j)); - } - } - } - - @Test - public void testExtraCommasAndLeadingZeros() throws Exception { - String[] directives = new String[] { - "parse-as-csv body , false", - "filter-rows-on regex-match body_1 ^school_id$", - "drop body", - "set columns school_id, student_id, last_name, first_name, body_5", - "set-column :last_name exp:{ this.width() == 5 ? (last_name + ',' + first_name) : last_name}", - "set-column :first_name exp:{ this.width() == 5 ? body_5 : first_name}", - "drop body_5" - }; - - List rows = Arrays.asList( - new Row("body", "school_id, student_id, last_name, first_name"), - new Row("body", "14J456,0033445566,Potter,Jr,Harry"), - new Row("body", "14J456,0044333433,Weasley,Ron") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(2, rows.size()); - Assert.assertEquals(4, rows.get(0).width()); - Assert.assertEquals(4, rows.get(1).width()); - Assert.assertEquals("Potter,Jr", rows.get(0).getValue("last_name")); - Assert.assertEquals("Harry", rows.get(0).getValue("first_name")); - Assert.assertEquals("Weasley", rows.get(1).getValue("last_name")); - Assert.assertEquals("Ron", rows.get(1).getValue("first_name")); - Assert.assertEquals("0033445566", rows.get(0).getValue("student_id")); - Assert.assertEquals("0044333433", rows.get(1).getValue("student_id")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/FixedLengthParserTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/FixedLengthParserTest.java deleted file mode 100644 index 8b3c7212e..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/FixedLengthParserTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link FixedLengthParser} - */ -public class FixedLengthParserTest { - - @Test - public void testMismatchedLength() throws Exception { - String[] directives = new String[] { - "parse-as-fixed-length body 2,2,1,1,3,4", - }; - - List rows = Arrays.asList( - new Row("body", "AABBCDEEEFFF") - ); - - RecipePipeline executor = TestingRig.execute(directives); - rows = executor.execute(rows); - Assert.assertTrue(rows.size() == 0); - Assert.assertEquals(1, executor.errors().size()); - } - - @Test - public void testFixedLengthParser() throws Exception { - String[] directives = new String[] { - "parse-as-fixed-length body 2,2,1,1,3,4", - }; - - List rows = Arrays.asList( - new Row("body", "AABBCDEEEFFFF") - ); - - RecipePipeline executor = TestingRig.execute(directives); - rows = executor.execute(rows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(0, executor.errors().size()); - Assert.assertEquals("AA", rows.get(0).getValue("body_1")); - Assert.assertEquals("BB", rows.get(0).getValue("body_2")); - Assert.assertEquals("C", rows.get(0).getValue("body_3")); - Assert.assertEquals("D", rows.get(0).getValue("body_4")); - Assert.assertEquals("EEE", rows.get(0).getValue("body_5")); - Assert.assertEquals("FFFF", rows.get(0).getValue("body_6")); - } - - @Test(expected = RecipeException.class) - public void testFixedLengthParserBadRangeSpecification() throws Exception { - String[] directives = new String[] { - "parse-as-fixed-length body A-B,C-D,12", - }; - - TestingRig.execute(directives, new ArrayList<>()); - } - - @Test - public void testFixedLengthWidthPadding() throws Exception { - String[] directives = new String[] { - "parse-as-fixed-length :body 4,4,4,4,4,4 '_'" , - }; - - List rows = Arrays.asList( - new Row("body", "AA__BB__C___D___EEE_FFFF") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("AA", rows.get(0).getValue("body_1")); - Assert.assertEquals("BB", rows.get(0).getValue("body_2")); - Assert.assertEquals("C", rows.get(0).getValue("body_3")); - Assert.assertEquals("D", rows.get(0).getValue("body_4")); - Assert.assertEquals("EEE", rows.get(0).getValue("body_5")); - Assert.assertEquals("FFFF", rows.get(0).getValue("body_6")); - } - - @Test - public void testFixedLengthComprehensive() throws Exception { - int[] lengths = new int[] { - 1, 9, 20, 12, 1, 2, 1, 3, 14, 14, 14, 14, 15, 9, 2, 3, 8, 4, 8, 7, 4, 11, 14, 14, 2, 1, 1, 1, 1, 1, 1, 1, 1, 6, - 6, 6, 42, 1 - }; - - List rows = new ArrayList<>(); - StringBuilder sb = new StringBuilder(); - for (int r = 0; r < 20; r++) { - for (int i = 0; i < lengths.length; ++i) { - sb.append(String.format("%1$" + lengths[i] + "s", "x")); - } - } - rows.add(new Row("body", sb.toString())); - - String[] d = new String[] { - "parse-as-fixed-length :body 1,9,20,12,1,2,1,3,14,14,14,14,15,9,2,3,8,4,8,7," - + "4,11,14,14,2,1,1,1,1,1,1,1,1,6,6,6,42,1 ' '", - "drop :body", - "set columns A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,Z,W,X,Y,Z,A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1" - }; - - // Configure and parse directives. - RecipePipeline executor = TestingRig.execute(d); - List results = executor.execute(rows); - List errors = executor.errors(); - - Assert.assertEquals(20, results.size()); - Assert.assertEquals(0, errors.size()); - } - - public static String fixedLengthString(String string, int length) { - return String.format("%1$" + length + "s", string); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/HL7ParserTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/HL7ParserTest.java deleted file mode 100644 index f79d2d4da..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/HL7ParserTest.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link HL7Parser} - */ -public class HL7ParserTest { - - // Admit a patient. - String adtA01 = "MSH|^~\\&|HIS|RIH|EKG|EKG|199904140038||ADT^A01||P|2.2\r" - + "PID|0001|00009874|00001122|A00977|SMITH^JOHN^M|MOM|19581119|F|NOTREAL^LINDA^M|C|" - + "564 SPRING ST^^NEEDHAM^MA^02494^US|0002|(818)565-1551|(425)828-3344|E|S|C|0000444444|252-00-4414||||SA|||SA||||" - + "NONE|V1|0001|I|D.ER^50A^M110^01|ER|P00055|11B^M011^02|070615^BATMAN^GEORGE^L|555888^NOTREAL^BOB^K^DR^MD|" - + "777889^NOTREAL^SAM^T^DR^MD^PHD|ER|D.WT^1A^M010^01|||ER|AMB|02|070615^NOTREAL^BILL^L|ER|000001916994|D|" - + "|||||||||||||||GDD|WA|NORM|02|O|02|E.IN^02D^M090^01|E.IN^01D^M080^01|199904072124|199904101200|199904101200|" - + "|||5555112333|||666097^NOTREAL^MANNY^P\r" - + "NK1|0222555|NOTREAL^JAMES^R|FA|STREET^OTHER STREET^CITY^ST^55566|(222)111-3333|(888)999-0000||||||" - + "|ORGANIZATION\r" - + "PV1|0001|I|D.ER^1F^M950^01|ER|P000998|11B^M011^02|070615^BATMAN^GEORGE^L|555888^OKNEL^BOB^K^DR^MD|" - + "777889^NOTREAL^SAM^T^DR^MD^PHD|ER|D.WT^1A^M010^01|||ER|AMB|02|070615^VOICE^BILL^L|ER|000001916994|D|" - + "|||||||||||||||GDD|WA|NORM|02|O|02|E.IN^02D^M090^01|E.IN^01D^M080^01|199904072124|199904101200|" - + "||||5555112333|||666097^DNOTREAL^MANNY^P\r" - + "PV2|||0112^TESTING|55555^PATIENT IS NORMAL|NONE|||19990225|19990226|1|1|TESTING|555888^NOTREAL^BOB^K^DR^MD|" - + "|||||||||PROD^003^099|02|ER||NONE|19990225|19990223|19990316|NONE\r" - + "AL1||SEV|001^POLLEN\r" - + "GT1||0222PL|NOTREAL^BOB^B||STREET^OTHER STREET^CITY^ST^77787|(444)999-3333|(222)777-5555||||MO|111-33-5555|" - + "|||NOTREAL GILL N|STREET^OTHER STREET^CITY^ST^99999|(111)222-3333\r" - + "IN1||022254P|4558PD|BLUE CROSS|STREET^OTHER STREET^CITY^ST^00990||(333)333-6666||221K|LENIX|||19980515|19990515|" - + "||PATIENT01 TEST D||||||||||||||||||02LL|022LP554"; - - // Update patient info. - String adt08 = "MSH|^~\\&|ADT|CHMC|ProAccess||20230822181701||ADT^A08|MT142756636134091|P|2.3|||AL|NE\r" - + "PID|1|CEUL1984055|100003^^^&2.16.840.1.113883.3.1009&ISO~011806^^^San Luis Valley Reg Med Center&" - + "2.16.840.1.113883.3.930&ISO~300713^^^San Luis Valley Reg Med Center&2.16.840.1.113883.3.930&ISO~CL0001115542^" - + "^^CO Laboratory Services CL&&ISO~5354437^^^University of Colorado Health&2.16.840.1.113883.3.2889&ISO|RM680655|" - + "BRONK^MARIANNA^|^^|19230324|F||2131-1|6999 UNIVERSITY PARK^^FEDERAL BOXES^CA^81125^^^||(408)-278-5231||EN|UNK|" - + "VAR|515-55-4543|515-55-4543||||||||||\r" - + "PD1||||PCPUN^Pcp^Unknown\r" - + "NK1|1|POLASKI^BOBBY^|CHD|^^^^^^^|(408)-534-4829|\r" - + "NK1|2|TYRIE^BLAIR^|CHD|^^^^^^^|(408)-752-1465|\r" - + "PV1|1|I|MC3WEST1^MC3706^1|C|||BUKOAL^Bukowski^Allison^Marie|BUKOAL^Bukowski^Allison^Marie|" - + "GIRAST^Girard^Stephen^Michael|HOSP||||1|||BUKOAL^Bukowski^Allison^Marie|IN||MCR|" - + "||||||||||||||||||MC|||||202308211705\r" - + "GT1|1||BEATO^RAYMOND^||1826 LAUPPE LANE^^CAMERON^NM^81125^^^|(408)-283-1928|||||SLF|828-46-4375|" - + "|||INFORMATION UNAVAILABLE\r" - + "PV2||REG|^SBO\r" - + "AL1|1|MA|0030^.OSA^CODED|||20160822\r" - + "AL1|2|DA|F001000476^Penicillins^CODED|||20160822\r" - + "AL1|3|DA|F006000658^lisinopril^CODED|||20160822\r" - + "AL1|4|DA|F006001550^codeine^CODED|||20160822\r" - + "GT1|2||IFFLAND^JAMIE^||7267 FOREST HILLS DR^^SAN JOSE^CA^81125^^^|(408)-869-3802|||||SLF|390-23-9821|" - + "|||INFORMATION UNAVAILABLE\r" - + "IN1|1||MCR|MEDICARE PART A AND B|PO BOX 3113^^MECHANICSBURG^PA^17055-1828||(408)-913-3814|588-22-7099|NA||" - + "INFORMATION UNAVAILABLE|||||DEMERIS^IRVING^|SLF|19230324|6632 DONEVA AVE^^LACROSSE^WA^81125^^^|" - + "||||||||||||||||523748060A|||||||F||||||523748060A\r" - + "IN2|1|515-55-4543|||||||||||||||||||||||||||||||||||||||||U||||||||||||||||||||(408)-278-5231\r" - + "IN1|2||BCP|BC PPO COLORADO|PO BOX 5747^^DENVER^CO^80217-5747||(408)-905-0350|311-16-3529|MEDICARE SUPPLEMENT|" - + "|INFORMATION UNAVAILABLE|||||MARYOTT^JESSE^|SLF|19230324|4564 WEST RIVER DR^^HONOLULU^HI^81125^^^|" - + "||||||||||||||||PQC109A22034|||||||F||||||PQC109A22034\r" - + "IN2|2|515-55-4543|||||||||||||||||||||||||||||||||||||||||U||||||||||||||||||||(408)-278-5231"; - - // Register a patient. - String adt04 = "MSH|^~\\&|SENDING_APPLICATION|SENDING_FACILITY|RECEIVING_APPLICATION|RECEIVING_FACILITY|" - + "20110613083617||ADT^A04|934576120110613083617|P|2.3||||\r" - + "EVN|A04|20110613083617|||\r" - + "PID|1||135769||MOUSE^MICKEY^||19281118|M|||123 Main St.^^Lake Buena Vista^FL^32830|" - + "|(407)939-1289^^^theMainMouse@disney.com|||||1719|99999999||||||||||||||||||||\r" - + "PV1|1|O|||||7^Disney^Walt^^MD^^^^|||||||||||||||||||||||||||||||||||||||||||||"; - - // Success - String success = "MSH|^~\\&|SENDING_APPLICATION|SENDING_FACILITY|RECEIVING_APPLICATION|RECEIVING_FACILITY|" - + "20110614075841||ACK|1407511|P|2.3||||||\r" - + "MSA|AA|1407511|Success||"; - - // Error - String error = "MSH|^~\\&|SENDING_APPLICATION|SENDING_FACILITY|RECEIVING_APPLICATION|RECEIVING_FACILITY|" - + "20110614075841||ACK|1407511|P|2.3||||||\r" - + "MSA|AE|1407511|Error processing record!||"; - - // Orders - String orders = "MSH|^~\\&|SendingApp|SendingFac|ReceivingApp|ReceivingFac|20120411070545||ORM^O01|59689|P|2.3\r" - + "PID|1|12345|12345^^^MIE&1.2.840.114398.1.100&ISO^MR||MOUSE^MICKEY^S||19281118|M||" - + "|123 Main St.^^Lake Buena Vista^FL^3283|||||||||||||||||||\r" - + "PV1|1||7^Disney^Walt^^MD^^^^||||||||||||||||||||||||||||||||||||||||||||||" - + "|^^^^^1.2.840.114398.1.668.11999116110119971081089799101||\r" - + "IN1|1||1|ABC Insurance Medicaid|P O Box 12345^^Atlanta^GA^30348|Claims^Florida |(555)555-1234^^^^^^|G1234|" - + "||||||G|Mouse^Mickey|SELF|19281118|123 Main St.^^Lake Buena Vista^FL^32830|Y||||||||||||P|" - + "|||ZYX1234589-1|||||||M||||M||\r" - + "ORC|NW|23|||Pending||^^^^^0||20150325170228|26^David^Dave||8^Selenium^Selenium|^^^^OFFICE^^^^^Office|" - + "^^^test@email.com||||||||||\r" - + "OBR|1|23||123^CREATININE|0|||||||||||8^Selenium^Selenium||||||||||||||||||||||||||||||||||\r" - + "DG1|1|ICD|B60.0^BABESIOSIS^I10|BABESIOSIS||||||||||||\r" - + "OBR|2|23||80061^LIPID PROFILE|0|||||||||||8^Selenium^Selenium||||||||||||||||||||||||||||||||||\r" - + "DG1|1|ICD|B60.0^BABESIOSIS^I10|BABESIOSIS||||||||||||"; - - // Results - String results = "MSH|^~\\&|SendingApp|SendingFac|ReceivingApp|ReceivingFac|201607060811||ORU^R03|5209141|D|2.3\r" - + "PID|1|123456|123456||SPARROW^JACK^||19600101|M|||123 BLACK PEARL^^DETROIT^MI^48217|" - + "|3138363978|||||1036557|123456789\r" - + "PV1|||^^\r" - + "ORC|RE||161810162||||00001^ONCE^^^^||201607060811|||00007553^PHYSICIAN^RICHARD^ ^^^||||||||" - + "|BIOTECH CLINICAL LAB INC^^23D0709666^^^CLIA|25775 MEADOWBROOK^^NOVI^MI^48375|^^^^^248^9121700|" - + "OFFICE^1234 MILE ROAD SUITE # 2^ROYAL OAK^MI^48073\r" - + "OBR|8|455648^LA01|1618101622^GROUP951|GROUP951^CHROMOSOMAL ANALYSIS^L|||201606291253|||||||201606291631|" - + "|00007553^PHYSICIAN^RICHARD^ ^^^||||||201607060811|||F||1^^^^^9\r" - + "OBX|1|ED|00008510^INTELLIGENT FLOW PROFILE^L||^^^^JVBERi0xLjQKJeLjz9MKCjEgMCBvYmoKPDwvVHlwZSAvQ2F0YWxvZwov" - + "UGFnZXMgMiAwIFI+PgplbmRvYmoKCjIgMCBvYmoKPDwvVHlwZSAvUGFnZXMKL0tpZHMgWzMgMCBSXQovQ291bnQgMT4+CmVuZG9iagoKMTI" - + "gMCBvYmoKPDwvTGVuZ3RoIDEzIDAgUgovRmlsdGVyIC9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nM1c3ZPUOJJ/569QxMRFMLtgrG+buBfoHmZ6" - + "BxgW+u5iN3hxV7m7feMqF3Y...T0YK||||||C|||201606291631\r" - + "NTE|1|L|Reference Lab: GENOPTIX|L\r" - + "NTE|2|L|2110 ROUTHERFORD RD|L\r" - + "NTE|3|L|CARLSBAD, CA 92008|L"; - - // Notes and comments - String nte = "MSH|^~\\&|SendingApp|SendingFac|ReceivingApp|ReceivingFac|20150323144246||ORU^R01|91734|P|2.3\r" - + "PID|1||6010022||SOFTTEST^HIECLIENT||19650601|F||||||||||60100222016\r" - + "PV1|1|O|1893^^^ZHIE||||4098^Physician^Sheldon|4098^Physician^Sheldon|||||||||4098^Physician^Sheldon|R|" - + "|||||||||||||||||||||||||201503201114\r" - + "ORC|RE|528527425|56083|||||||||4098^Physician^Sheldon^A\r" - + "OBR|1|528527425|CTG150000145|LAB6460^Gene Bone Marrow||201503201114|201503231500|||||||201503231629|" - + "|4098^Physician^Sheldon^^^^MD||||||201503231637||CTG|F||1\r" - + "OBX|1|TX|LAB6460^Gene Bone Marrow||||||||||||RWBH\r" - + "NTE|1||Physician: SHELDON A PHYSICIAN, MD\r" - + "NTE|2|| NPI: 1881654887\r" - + "NTE|3||Location: Oakland Medical Group III\r" - + "NTE|4|| Loc ID: 1893\r" - + "NTE|5\r" - + "NTE|6||Collected: 3/23/2015 3:00 PM Received: 3/23/2015\r" - + "NTE|7|| 4:29 PM Lab 642000066\r" - + "NTE|8||\r" - + "NTE|9|| Order#:\r" - + "NTE|10\r" - + "NTE|11||Clinical History: Testing field shows all data\r" - + "NTE|12|| typed\r" - + "NTE|13||CTG-15-145\r" - + "NTE|14||\r" - + "NTE|15\r" - + "NTE|16||Specimen Type: Bone Marrow No. of\r" - + "NTE|17|| Cells Counted: 20\r" - + "NTE|18||Modal Chromosome Number: 46 No. of\r" - + "NTE|19|| Cells Analyzed: 20\r" - + "NTE|20||No. and/or Type of Cultures: ST\r" - + "NTE|21|| Hypermodal Cells: 0\r" - + "NTE|22||Staining Method: GTL\r" - + "NTE|23|| Hypomodal Cells: 0\r" - + "NTE|24||Band Level: 400-450 No. of\r" - + "NTE|25|| Karyotypes: 3\r" - + "NTE|26\r" - + "NTE|27||KARYOTYPE: 46,XX[20]\r" - + "NTE|28||\r" - + "NTE|29\r" - + "NTE|30||CYTOGENETIC DIAGNOSIS: Normal Female\r" - + "NTE|31|| Chromosome Complement\r" - + "NTE|32\r" - + "NTE|33||INTERPRETATION: Cytogenetic examination of twenty\r" - + "NTE|34|| metaphase cells revealed a\r" - + "NTE|35||normal female diploid karyotype with no\r" - + "NTE|36|| consistent numerical or structural\r" - + "NTE|37||chromosome aberrations observed. This chromosome\r" - + "NTE|38|| study does not eliminate the\r" - + "NTE|39||possibility of single gene defects, chromosomal\r" - + "NTE|40|| mosaicism involving abnormal\r" - + "NTE|41||cell lines of low frequency, small structural\r" - + "NTE|42|| chromosome abnormalities, or\r" - + "NTE|43||failure to sample any malignant clones(s) that\r" - + "NTE|44|| may be present.\r" - + "NTE|45\r" - + "NTE|46||Test Person NODOC\r" - + "NTE|47||\r" - + "NTE|48||Medical Director, Clinical Cytogenomics\r" - + "NTE|49|| Laboratory\r" - + "NTE|50||Board Certified Clinical Cytogeneticist/Clinical\r" - + "NTE|51|| Molecular Geneticist\r" - + "NTE|52||3/23/2015 4:37 PM\r" - + "NTE|53||\r" - + "NTE|54||All results from conventional karyotyping,\r" - + "NTE|55|| molecular cytogenetics (FISH), and\r" - + "NTE|56||chromosome microarray studies, as well as the\r" - + "NTE|57|| final report, have been reviewed\r" - + "NTE|58||by a staff cytogeneticist.\r" - + "NTE|59||"; - - - @Test - public void testBasic() throws Exception { - String[] directives = new String[] { - "parse-as-hl7 body", - "keep body_hl7_MSH", - }; - - List rows = Arrays.asList( - new Row("body", adtA01), - new Row("body", adt08), - new Row("body", adt04), - new Row("body", success), - new Row("body", error), - new Row("body", orders), - new Row("body", results), - new Row("body", nte) - ); - - // The best we can do is check if the message is parsed successfully. - rows = TestingRig.execute(directives, rows); - Assert.assertNotNull(rows); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/JsParserTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/JsParserTest.java deleted file mode 100644 index 001409318..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/JsParserTest.java +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link JsParser} - */ -public class JsParserTest { - - @Test - public void testParseJsonAndJsonPath() throws Exception { - String[] directives = new String[] { - "parse-as-json body", - "parse-as-csv body_deviceReference_screenSize | false", - "drop body_deviceReference_screenSize", - "rename body_deviceReference_screenSize_1 size1", - "rename body_deviceReference_screenSize_2 size2", - "rename body_deviceReference_screenSize_3 size3", - "rename body_deviceReference_screenSize_4 size4", - "json-path body_deviceReference_alerts signal_lost $.[*].['Signal lost']", - "json-path signal_lost signal_lost $.[0]", - "drop body", - "rename body_deviceReference_timestamp timestamp", - "set column timestamp timestamp", - "drop body_deviceReference_alerts" - }; - - List rows = Arrays.asList( - new Row("body", "{ \"deviceReference\": { \"brand\": \"Samsung \", \"type\": \"Gear S3 frontier\", " + - "\"deviceId\": \"SM-R760NDAAXAR\", \"timestamp\": 122121212341231, \"OS\": { \"name\": \"Tizen OS\", " + - "\"version\": \"2.3.1\" }, \"alerts\": [ { \"Signal lost\": true }, { \"Emergency call\": true }, " + - "{ \"Wifi connection lost\": true }, { \"Battery low\": true }, { \"Calories\": 354 } ], \"screenSize\": " + - "\"extra-small|small|medium|large\", \"battery\": \"22%\", \"telephoneNumber\": \"+14099594986\", " + - "\"comments\": \"It is an AT&T samung wearable device.\" } }") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - } - - @Test - public void testArrayOfObjects() throws Exception { - String[] directives = new String[] { - "parse-as-json body" - }; - - List rows = Arrays.asList( - new Row("body", "[ { \"a\" : 1, \"b\" : 2 }, { \"a\" : 3, \"b\" : 3 }, { \"a\" : 4, \"c\" : 5 } ]") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 3); - } - - @Test - public void testArrayOfNumbers() throws Exception { - String[] directives = new String[] { - "parse-as-json body" - }; - - List rows = Arrays.asList( - new Row("body", "[1,2,3,4,5]") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 5); - } - - - @Test - public void testFlattenAllTheWay() throws Exception { - String[] directives = new String[]{ - "parse-as-json body 1", - }; - - List rows = Arrays.asList( - new Row("body", "{ \"deviceReference\": { \"brand\": \"Samsung \", \"type\": \"Gear S3 frontier\", " + - "\"deviceId\": \"SM-R760NDAAXAR\", \"timestamp\": 122121212341231, \"OS\": { \"name\": \"Tizen OS\", " + - "\"version\": \"2.3.1\" }, \"alerts\": [ { \"Signal lost\": true }, { \"Emergency call\": true }, " + - "{ \"Wifi connection lost\": true }, { \"Battery low\": true }, { \"Calories\": 354 } ], \"screenSize\": " + - "\"extra-small|small|medium|large\", \"battery\": \"22%\", \"telephoneNumber\": \"+14099594986\", " + - "\"comments\": \"It is an AT&T samung wearable device.\" } }") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - } - - @Test - public void testFlattenToDepth() throws Exception { - String[] directives = new String[]{ - "parse-as-json body 2" - }; - - List rows = Arrays.asList( - new Row("body", "{\"created_at\":\"Mon Feb 06 21:13:37 +0000 2017\",\"id\":828713281267367937," + - "\"id_str\":\"828713281267367937\",\"text\":\"Youth is counted sweetest by those who are no longer young." + - "\\n#PBBPADALUCKKISSYONG\",\"source\":\"\\u003ca href=\\\"http:\\/\\/twitter.com\\/download\\/iphone\\\" " + - "rel=\\\"nofollow\\\"\\u003eTwitter for iPhone\\u003c\\/a\\u003e\",\"truncated\":false," + - "\"in_reply_to_status_id\"" + - ":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_" + - "reply_to_screen_name\":null,\"user\":{\"id\":520417116,\"id_str\":\"520417116\",\"name\":\"glenda andres\"," + - "\"screen_name\":\"glenda_andres\",\"location\":\"Israel\",\"url\":null," + - "\"description\":\"volleyball,badminton\"," + - "\"protected\":false,\"verified\":false,\"followers_count\":12,\"friends_count\":94,\"listed_count\":1," + - "\"favourites_count\":42,\"statuses_count\":595,\"created_at\":\"Sat Mar 10 13:57:16 +0000 2012\"," + - "\"utc_offset" + - "\":null,\"time_zone\":null,\"geo_enabled\":false,\"lang\":\"en\",\"contributors_enabled\":false," + - "\"is_translator" + - "\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\/\\/" + - "abs.twimg.com\\" + - "/images\\/themes\\/theme1\\/bg.png\",\"profile_background_image_url_https\":\"https:\\/\\/abs.twimg.com\\/" + - "images" + - "\\/themes\\/theme1\\/bg.png\",\"profile_background_tile\":false,\"profile_link_color\":\"1DA1F2\",\"profile_" + - "sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\"," + - "\"profile_text_color\":\"333333\"," + - "\"profile_use_background_image\":true,\"profile_image_url\":\"http:\\/\\/pbs.twimg.com\\/profile_images\\" + - "/680735812972052480\\/hsvuZASG_normal.jpg\",\"profile_image_url_https\":\"https:\\/\\/pbs.twimg.com\\/" + - "profile_" + - "images\\/680735812972052480\\/hsvuZASG_normal.jpg\",\"profile_banner_url\":\"https:\\/\\/pbs.twimg.com\\/" + - "profile_" + - "banners\\/520417116\\/1451511037\",\"default_profile\":true,\"default_profile_image\":false," + - "\"following\":null," + - "\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null," + - "\"contributors\":null,\"is_quote_status\":false,\"retweet_count\":0,\"favorite_count\":0,\"entities\":" + - "{\"hashtags\":[{\"text\":\"PBBPADALUCKKISSYONG\",\"indices\":[60,80]}],\"urls\":[],\"user_mentions\":[]," + - "\"symbols\":[]},\"favorited\":false,\"retweeted\":false,\"filter_level\":\"low\",\"lang\":\"en\"," + - "\"timestamp_ms\":\"1486415617659\"}")); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - } - - @Test - public void testParsingExtraCharacters() throws Exception { - String[] directives = new String[] { - "parse-as-json body" - }; - - List rows = Arrays.asList( - new Row("body", "[1,2,3,4,5] ") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 5); - } - - @Test - public void testDepthParsing() throws Exception { - String[] directives = new String[] { - "parse-as-json body1 1", - "parse-as-json body2 2", - "parse-as-json body3 3", - "parse-as-json body4 1", - "parse-as-json body5 2", - "parse-as-json body6 3", - "parse-as-json body7 4" - }; - - List rows = Arrays.asList( - new Row("body1", "{\n" + - " \"id\": 1,\n" + - " \"name\": {\n" + - " \"first\": \"Root\",\n" + - " \"last\": \"Joltie\"\n" + - " },\n" + - " \"age\": 22,\n" + - " \"weigth\": 184,\n" + - " \"height\": 5.8\n" + - "}").add("body2", "{\n" + - " \"id\": 1,\n" + - " \"name\": {\n" + - " \"first\": \"Root\",\n" + - " \"last\": \"Joltie\"\n" + - " },\n" + - " \"age\": 22,\n" + - " \"weigth\": 184,\n" + - " \"height\": 5.8\n" + - "}").add("body3", "{\n" + - " \"id\": 1,\n" + - " \"name\": {\n" + - " \"first\": \"Root\",\n" + - " \"last\": \"Joltie\"\n" + - " },\n" + - " \"age\": 22,\n" + - " \"weigth\": 184,\n" + - " \"height\": 5.8\n" + - "}").add("body4", "{\n" + - " \"id\": 1,\n" + - " \"name\": {\n" + - " \"first\": {\n" + - " \"n\" : \"Root\",\n" + - " \"m\" : \"Rootie\"\n" + - " },\n" + - " \"last\": \"Joltie\"\n" + - " },\n" + - " \"age\": 22,\n" + - " \"weigth\": 184,\n" + - " \"height\": 5.8\n" + - "}").add("body5", "{\n" + - " \"id\": 1,\n" + - " \"name\": {\n" + - " \"first\": {\n" + - " \"n\" : \"Root\",\n" + - " \"m\" : \"Rootie\"\n" + - " },\n" + - " \"last\": \"Joltie\"\n" + - " },\n" + - " \"age\": 22,\n" + - " \"weigth\": 184,\n" + - " \"height\": 5.8\n" + - "}").add("body6", "{\n" + - " \"id\": 1,\n" + - " \"name\": {\n" + - " \"first\": {\n" + - " \"n\" : \"Root\",\n" + - " \"m\" : \"Rootie\"\n" + - " },\n" + - " \"last\": \"Joltie\"\n" + - " },\n" + - " \"age\": 22,\n" + - " \"weigth\": 184,\n" + - " \"height\": 5.8\n" + - "}").add("body7", "{\n" + - " \"id\": 1,\n" + - " \"name\": {\n" + - " \"first\": {\n" + - " \"n\" : \"Root\",\n" + - " \"m\" : \"Rootie\"\n" + - " },\n" + - " \"last\": \"Joltie\"\n" + - " },\n" + - " \"age\": 22,\n" + - " \"weigth\": 184,\n" + - " \"height\": 5.8\n" + - "}") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertNotEquals(rows.get(0).find("body1_name"), -1); - Assert.assertNotEquals(rows.get(0).find("body2_name_first"), -1); - Assert.assertNotEquals(rows.get(0).find("body2_name_last"), -1); - Assert.assertNotEquals(rows.get(0).find("body3_name_first"), -1); - Assert.assertNotEquals(rows.get(0).find("body6_name_first_n"), -1); - Assert.assertNotEquals(rows.get(0).find("body6_name_first_m"), -1); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/JsPathTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/JsPathTest.java deleted file mode 100644 index 599a5762b..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/JsPathTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link JsPath} - */ -public class JsPathTest { - @Test - public void testJSONFunctions() throws Exception { - List rows = Arrays.asList( - new Row("body", "{\n" + - " \"name\" : {\n" + - " \"Fname\" : \"Joltie\",\n" + - " \"Lname\" : \"Root\",\n" + - " \"mname\" : null\n" + - " },\n" + - " \"coordinates\" : [\n" + - " 12.56,\n" + - " 45.789\n" + - " ],\n" + - " \"numbers\" : [\n" + - " 1,\n" + - " 2.1,\n" + - " 3,\n" + - " null,\n" + - " 4,\n" + - " 5,\n" + - " 6,\n" + - " null\n" + - " ],\n" + - " \"responses\" : [\n" + - " { \"a\" : 1, \"b\" : \"X\", \"c\" : 2.8},\n" + - " { \"a\" : 2, \"b\" : \"Y\", \"c\" : 232342.8},\n" + - " { \"a\" : 3, \"b\" : \"Z\", \"c\" : null},\n" + - " { \"a\" : 4, \"b\" : \"U\"}\n" + - " ],\n" + - " \"integer\" : 1,\n" + - " \"double\" : 2.8,\n" + - " \"float\" : 45.6,\n" + - " \"aliases\" : [\n" + - " \"root\",\n" + - " \"joltie\",\n" + - " \"bunny\",\n" + - " null\n" + - " ]\n" + - "}") - ); - - String[] directives = new String[] { - "set-column body json:Parse(body)", - "set-column s0 json:Select(body, '$.name.fname', '$.name.lname')", - "set-column s1 json:Select(body, '$.name.fname')", - "set-column s11 json:Select(body, '$.numbers')", - "set-column s2 json:Select(body, '$.numbers')", - "set-column s6 json:ArrayLength(json:Select(body, '$.numbers'))" - }; - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(8, rows.get(0).getValue("s6")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseAvroFileTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/ParseAvroFileTest.java deleted file mode 100644 index 7df16ee82..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseAvroFileTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import com.google.common.base.Charsets; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.apache.commons.io.IOUtils; -import org.junit.Assert; -import org.junit.Test; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -/** - * Tests {@link ParseAvroFile} - */ -public class ParseAvroFileTest { - - @Test - public void testParseAsAvroFile() throws Exception { - InputStream stream = ParseAvroFileTest.class.getClassLoader().getResourceAsStream("cdap-log.avro"); - byte[] data = IOUtils.toByteArray(stream); - - String[] directives = new String[] { - "parse-as-avro-file body", - }; - - List rows = new ArrayList<>(); - rows.add(new Row("body", data)); - - List results = TestingRig.execute(directives, rows); - Assert.assertEquals(1689, results.size()); - Assert.assertEquals(15, results.get(0).width()); - Assert.assertEquals(1495172588118L, results.get(0).getValue("timestamp")); - Assert.assertEquals(1495194308245L, results.get(1688).getValue("timestamp")); - } - - @Test(expected = RecipeException.class) - public void testIncorrectType() throws Exception { - String[] directives = new String[] { - "parse-as-avro-file body", - }; - - List rows = new ArrayList<>(); - rows.add(new Row("body", new String("failure").getBytes(Charsets.UTF_8))); - TestingRig.execute(directives, rows); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseAvroTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/ParseAvroTest.java deleted file mode 100644 index 357074b80..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseAvroTest.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.codec.JsonAvroDecoder; -import org.apache.avro.Schema; -import org.apache.avro.generic.GenericData; -import org.apache.avro.generic.GenericDatumReader; -import org.apache.avro.generic.GenericDatumWriter; -import org.apache.avro.generic.GenericRecord; -import org.apache.avro.io.BinaryDecoder; -import org.apache.avro.io.BinaryEncoder; -import org.apache.avro.io.DatumReader; -import org.apache.avro.io.DatumWriter; -import org.apache.avro.io.DecoderFactory; -import org.apache.avro.io.EncoderFactory; -import org.apache.avro.io.JsonDecoder; -import org.apache.avro.io.JsonEncoder; -import org.junit.Assert; -import org.junit.Test; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.EOFException; -import java.util.ArrayList; -import java.util.List; - -/** - * Test {@link ParseAvro} - */ -public class ParseAvroTest { - - private static final String SCHEMA = "{\"namespace\": \"example.avro\",\n" + - " \"type\": \"record\",\n" + - " \"name\": \"User\",\n" + - " \"fields\": [\n" + - " {\"name\": \"name\", \"type\": \"string\"},\n" + - " {\"name\": \"favorite_number\", \"type\": [\"int\", \"null\"]},\n" + - " {\"name\": \"favorite_color\", \"type\": [\"string\", \"null\"]}\n" + - " ]\n" + - "}"; - - @Test - public void testAvroBinaryRecordReadWrite() throws Exception { - // Parse schema and validate fields. - Schema.Parser parser = new Schema.Parser(); - Schema schema = parser.parse(SCHEMA); - Assert.assertTrue(schema != null); - List fields = schema.getFields(); - Assert.assertEquals(3, fields.size()); - - // Create generic records. - GenericRecord user1 = new GenericData.Record(schema); - user1.put("name", "Root"); - user1.put("favorite_number", 8); - user1.put("favorite_color", "blue"); - - GenericRecord user2 = new GenericData.Record(schema); - user2.put("name", "Ben"); - user2.put("favorite_number", 7); - user2.put("favorite_color", "red"); - - // Write records to byte array stream. - DatumWriter datumWriter = new GenericDatumWriter<>(schema); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(out, null); - datumWriter.write(user1, encoder); - datumWriter.write(user2, encoder); - encoder.flush(); - out.close(); - - byte[] serializedBytes = out.toByteArray(); - - // Read from byte array. - DatumReader datumReader = new GenericDatumReader<>(schema); - ByteArrayInputStream in = new ByteArrayInputStream(serializedBytes); - BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(in, null); - List records = new ArrayList<>(); - while (true) { - try { - GenericRecord record = datumReader.read(null, decoder); - records.add(record); - } catch (EOFException e) { - break; - } - } - Assert.assertEquals(2, records.size()); - } - - @Test - public void testAvroJsonRecordReadWrite() throws Exception { - Schema schema = getSchema(); - byte[] bytes = encodeAsJsonGenericRecord(); - JsonAvroDecoder jsonAvroDecoder = new JsonAvroDecoder(schema); - List r = jsonAvroDecoder.decode(bytes); - Assert.assertEquals(2, r.size()); - - // Read from byte array. - DatumReader datumReader = new GenericDatumReader<>(schema); - ByteArrayInputStream in = new ByteArrayInputStream(bytes); - JsonDecoder decoder = DecoderFactory.get().jsonDecoder(schema, in); - List records = new ArrayList<>(); - while (true) { - try { - GenericRecord record = datumReader.read(null, decoder); - records.add(record); - } catch (EOFException e) { - break; - } - } - in.close(); - Assert.assertEquals(2, records.size()); - } - - private Schema getSchema() throws Exception { - // Parse schema and validate fields. - Schema.Parser parser = new Schema.Parser(); - Schema schema = parser.parse(SCHEMA); - Assert.assertTrue(schema != null); - List fields = schema.getFields(); - Assert.assertEquals(3, fields.size()); - return schema; - } - - private byte[] encodeAsJsonGenericRecord() throws Exception { - Schema schema = getSchema(); - - // Create generic records. - GenericRecord user1 = new GenericData.Record(schema); - user1.put("name", "Root"); - user1.put("favorite_number", 8); - - GenericRecord user2 = new GenericData.Record(schema); - user2.put("name", "Ben"); - user2.put("favorite_number", 7); - user2.put("favorite_color", "red"); - - // Write records to byte array stream. - DatumWriter datumWriter = new GenericDatumWriter<>(schema); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - JsonEncoder encoder = EncoderFactory.get().jsonEncoder(schema, out); - datumWriter.write(user1, encoder); - datumWriter.write(user2, encoder); - encoder.flush(); - out.close(); - - return out.toByteArray(); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseDateTimeTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/ParseDateTimeTest.java deleted file mode 100644 index 4c323b6e0..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseDateTimeTest.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.directives.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -public class ParseDateTimeTest { - - @Test - public void testDateTimeFormats() throws Exception { - String[] testPatterns = new String[]{"MM/dd/yyyy HH:mm", "yyyy-MM-dd'T'HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss[xxx]", - "yyyy-MM-dd'T'HH:mm:ss[xxx]'['VV']'", "yyyyMMdd h:mm a"}; - String[] colNames = new String[]{"col1", "col2", "col3", "col4", "col5"}; - String[] dateTimes = new String[]{"03/30/2010 01:05", "2020-01-28T04:50:12", "2011-12-03T10:15:30+01:00", - "2011-12-03T10:15:30+01:00[Europe/Paris]", "19901212 10:12 AM"}; - String[] directives = new String[testPatterns.length]; - Row row = new Row(); - for (int i = 0; i < testPatterns.length; i++) { - directives[i] = String - .format("%s :%s \"%s\"", ParseDateTime.NAME, colNames[i], testPatterns[i]); - row.add(colNames[i], dateTimes[i]); - } - List rows = TestingRig.execute(directives, Collections.singletonList(row)); - - Assert.assertEquals(1, rows.size()); - - for (Row resultRow : rows) { - for (int i = 0; i < testPatterns.length; i++) { - DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(testPatterns[i]); - Assert.assertEquals(LocalDateTime.parse(dateTimes[i], dateTimeFormatter), - rows.get(0).getValue(colNames[i])); - } - } - } - - @Test - public void testDateTimeMultipleRows() throws Exception { - String pattern = "MM/dd/yyyy HH:mm"; - String colName = "col1"; - String datetime1 = "12/10/2016 07:45"; - String datetime2 = "02/01/1990 12:01"; - DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern); - String[] directives = new String[]{ - String.format("%s :%s '%s'", ParseDateTime.NAME, colName, pattern) - }; - Row row1 = new Row(); - row1.add(colName, datetime1); - Row row2 = new Row(); - row2.add(colName, datetime2); - List rows = TestingRig.execute(directives, Arrays.asList(row1, row2)); - - Assert.assertEquals(2, rows.size()); - Assert.assertEquals(LocalDateTime.parse(datetime1, dateTimeFormatter), - rows.get(0).getValue(colName)); - Assert.assertEquals(LocalDateTime.parse(datetime2, dateTimeFormatter), - rows.get(1).getValue(colName)); - } - - @Test(expected = RecipeException.class) - public void testInvalidFormat() throws Exception { - String pattern = "abcd"; - String colName = "col1"; - String datetime1 = "12/10/2016 07:45"; - String[] directives = new String[]{ - String.format("parse-datetime :%s '%s'", colName, pattern) - }; - Row row1 = new Row(); - row1.add(colName, datetime1); - TestingRig.execute(directives, Collections.singletonList(row1)); - } - - @Test - public void testInvalidData() throws Exception { - String pattern = "MM/dd/yyyy HH:mm"; - String colName = "col1"; - String datetime1 = "12/10/2016"; - String[] directives = new String[]{ - String.format("%s :%s '%s'", ParseDateTime.NAME, colName, pattern) - }; - Row row1 = new Row(); - row1.add(colName, datetime1); - final List results = TestingRig.execute(directives, Collections.singletonList(row1)); - //should be error collected - Assert.assertTrue(results.isEmpty()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseExcelTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/ParseExcelTest.java deleted file mode 100644 index addf23eba..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseExcelTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import org.apache.commons.io.IOUtils; -import org.junit.Assert; -import org.junit.Test; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -/** - * Tests {@link ParseExcel} - */ -public class ParseExcelTest { - - @Test - public void testBasicExcel() throws Exception { - try (InputStream stream = ParseAvroFileTest.class.getClassLoader().getResourceAsStream("titanic.xlsx")) { - byte[] data = IOUtils.toByteArray(stream); - - String[] directives = new String[]{ - "parse-as-excel :body '0'", - }; - - List rows = new ArrayList<>(); - rows.add(new Row("body", data)); - - List results = TestingRig.execute(directives, rows); - Assert.assertEquals(892, results.size()); - Assert.assertEquals(0, results.get(0).getValue("fwd")); - Assert.assertEquals(891, results.get(0).getValue("bkd")); - } - } - - @Test - public void testNoSheetName() throws Exception { - try (InputStream stream = ParseAvroFileTest.class.getClassLoader().getResourceAsStream("titanic.xlsx")) { - byte[] data = IOUtils.toByteArray(stream); - - String[] directives = new String[]{ - "parse-as-excel :body 'wrong_error'", - }; - - List rows = new ArrayList<>(); - rows.add(new Row("body", data)); - Pair, List> pipeline = TestingRig.executeWithErrors(directives, rows); - Assert.assertEquals(0, pipeline.getFirst().size()); - Assert.assertEquals(1, pipeline.getSecond().size()); - } - } - - @Test - public void testDateFormatting() throws Exception { - try (InputStream stream = - ParseAvroFileTest.class.getClassLoader().getResourceAsStream("date-formats-test-sheet.xlsx")) { - byte[] data = IOUtils.toByteArray(stream); - - String[] directives = new String[]{ - "parse-as-excel :body '0'", - }; - - List rows = new ArrayList<>(); - rows.add(new Row("body", data)); - List results = TestingRig.execute(directives, rows); - - for (Row result : results) { - Assert.assertEquals(result.getValue("A"), result.getValue("B")); - } - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseLogTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/ParseLogTest.java deleted file mode 100644 index 0f34e824c..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseLogTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link ParseLog} - */ -public class ParseLogTest { - - @Test - public void testLogParsing() throws Exception { - String[] directives = new String[]{ - "parse-as-log body %t %u [%D %h %{True-Client-IP}i %{UNIQUE_ID}e %r] %{Cookie}i %s \"%{User-Agent}i\" " + - "\"%{host}i\" %l %b %{Referer}i", - "drop body" - }; - - List rows = Arrays.asList( - new Row("body", "[02/Dec/2013:14:10:30 -0000] - [52075 10.102.4.254 177.43.52.210 UpyU1gpmBAwAACfd5W0AAAAW " + - "GET /SS14-VTam-ny_019.jpg.rendition.zoomable.jpg HTTP/1.1] hsfirstvisit=http%3A%2F%2Fwww.domain.com%2" + - "Fen-us||1372268254000; _opt_vi_3FNG8DZU=F870DCFD-CBA4-4B6E-BB58-4605A78EE71A; __ptca=145721067.0aDxsZ" + - "lIuM48.1372279055.1379945057.1379950362.9; __ptv_62vY4e=0aDxsZlIuM48; __pti_62vY4e=0aDxsZlIuM48; __pt" + - "cz=145721067.1372279055.1.0.ptmcsr=(direct)|ptmcmd=(none)|ptmccn=(direct); __hstc=145721067.b86362bb7" + - "a1d257bfa2d1fb77e128a85.1372268254968.1379934256743.1379939561848.9; hubspotutk=b86362bb7a1d257bfa2d1f" + - "b77e128a85; USER_GROUP=julinho%3Afalse; has_js=1; WT_FPC=id=177.43.52.210-1491335248.30301337:lv=13859" + - "97780893:ss=1385997780893; dtCookie=1F2E0E1037589799D8D503EB8CFA12A1|_default|1; RM=julinho%3A5248423a" + - "d3fe062f06c54915e6cde5cb45147977; wcid=UpyKsQpmBAwAABURyNoAAAAS%3A35d8227ba1e8a9a9cebaaf8d019a74777c32" + - "b4c8; Carte::KerberosLexicon_getWGSN=82ae3dcd1b956288c3c86bdbed6ebcc0fd040e1e; UserData=Username%3AJUL" + - "INHO%3AHomepage%3A1%3AReReg%3A0%3ATrialist%3A0%3ALanguage%3Aen%3ACcode%3Abr%3AForceReReg%3A0; UserID=13" + - "56673%3A12345%3A1234567890%3A123%3Accode%3Abr; USER_DATA=1356673%3Ajulinho%3AJulio+Jose%3Ada+Silva%3Aju" + - "linho%40tecnoblu.com.br%3A0%3A1%3Aen%3Abr%3A%3AWGSN%3A1385990833.81925%3A82ae3dcd1b956288c3c86bdbed6ebc" + - "c0fd040e1e; MODE=FONTIS; SECTION=%2Fcontent%2Fsection%2Fhome.html; edge_auth=ip%3D177.43.52.210~expires" + - "%3D1385994522~access%3D%2Fapps%2F%2A%21%2Fbin%2F%2A%21%2Fcontent%2F%2A%21%2Fetc%2F%2A%21%2Fhome%2F%2A%21" + - "%2Flibs%2F%2A%21%2Freport%2F%2A%21%2Fsection%2F%2A%21%2Fwgsn%2F%2A~md5%3D90e73ee10161c1afacab12c6ea30b4e" + - "f; __utma=94539802.1793276213.1372268248.1385572390.1385990581.16; __utmb=94539802.52.9.1385991739764; _" + - "_utmc=94539802; __utmz=94539802.1372268248.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); WT_FPC=id=1" + - "77.43.52.210-1491335248.30301337:lv=1386000374581:ss=1386000374581; dtPC=-; NSC_wtfswfs_xfcgbsn40-41=ffff" + - "ffff096e1a1d45525d5f4f58455e445a4a423660; akamai-edge=5ac6e5b3d0bbe2ea771bb2916d8bab34ea222a6a 200 \"Mozil" + - "la/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36\" " + - "\"www.domain.com\" - 463952 http://www.domain.com/content/report/shows/New_York/KSHK/trip/s_s_14_ny_ww/she" + - "ers.html") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(91, rows.get(0).width()); - } - - @Test - public void testCommonLogFormat() throws Exception { - String[] directives = new String[]{ - "parse-as-log body %h %l %u %t \"%r\" %>s %b", - "drop body" - }; - - List rows = Arrays.asList( - new Row("body", "127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb.gif HTTP/1.0\" 200 2326") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseSimpleDateTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/ParseSimpleDateTest.java deleted file mode 100644 index c6c255e33..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/ParseSimpleDateTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.iq80.leveldb.shaded.guava.collect.Streams; -import org.junit.Assert; -import org.junit.Test; - -import java.text.SimpleDateFormat; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.List; -import java.util.TimeZone; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -public class ParseSimpleDateTest { - - @Test - public void testPatterns() throws Exception { - List patterns = Arrays.asList( - "yyyy.MM.dd G 'at' HH:mm:ss z", - "EEE, MMM d, ''yy", - "h:mm a", - "hh 'o''clock' a, zzzz", - "K:mm a, z", - "yyyy.MMMMM.dd GGG hh:mm aaa", - "EEE, d MMM yyyy HH:mm:ss Z", - "yyMMddHHmmssZ", - "yyyy-MM-dd'T'HH:mm:ss.SSSZ", - "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", - "MM/dd/yyyy HH:mm", - "yyyy.MM.dd" - ); - List dates = Arrays.asList( - "2001.07.04 AD at 12:08:56 PDT", - "Wed, Jul 4, '01", - "12:08 PM", - "12 o'clock PM, Pacific Daylight Time", - "0:08 PM, PDT", - "2001.July.04 AD 12:08 PM", - "Wed, 4 Jul 2001 12:08:56 -0700", - "010704120856-0700", - "2001-07-04T12:08:56.235-0700", - "2001-07-04T12:08:56.235-07:00", - "07/04/2001 12:09", - "2001.07.04" - ); - int numValues = patterns.size(); - List columns = IntStream.range(0, numValues).mapToObj(i -> "col" + i).collect(Collectors.toList()); - String[] directives = Streams - .zip( - columns.stream(), - patterns.stream(), - (column, pattern) -> String.format("%s :%s \"%s\"", ParseSimpleDate.NAME, column, pattern) - ).toArray(String[]::new); - Row row = new Row(); - for (int i = 0; i < numValues; i++) { - row.add(columns.get(i), dates.get(i)); - } - - List resultRows = TestingRig.execute(directives, Collections.singletonList(row)); - - Assert.assertEquals(1, resultRows.size()); - for (int i = 0; i < numValues; i++) { - SimpleDateFormat formatter = new SimpleDateFormat(patterns.get(i)); - formatter.setTimeZone(TimeZone.getTimeZone("UTC")); - - ZonedDateTime zonedDateTime = ZonedDateTime.from( - formatter.parse(dates.get(i)).toInstant().atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC)) - ); - Assert.assertEquals(zonedDateTime, resultRows.get(0).getValue(columns.get(i))); - } - } - - @Test - public void testUTCTimeZoneUsedByDefault() throws Exception { - String pattern = "yyyy-MM-dd"; - String column = "col"; - List dates = Arrays.asList("1850-09-09", "1998-09-04", "2018-05-14"); - String[] directives = new String[]{String.format("%s :%s \"%s\"", ParseSimpleDate.NAME, column, pattern)}; - List rows = dates.stream().map(date -> new Row(column, date)).collect(Collectors.toList()); - - List resultRows = TestingRig.execute(directives, rows); - - Assert.assertEquals(dates.size(), resultRows.size()); - SimpleDateFormat formatter = new SimpleDateFormat(pattern); - formatter.setTimeZone(TimeZone.getTimeZone("UTC")); - for (int i = 0; i < dates.size(); i++) { - ZonedDateTime zonedDateTime = ZonedDateTime.from( - formatter.parse(dates.get(i)).toInstant().atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC)) - ); - Assert.assertEquals(zonedDateTime, resultRows.get(i).getValue(column)); - } - } - - @Test - public void testGregorianCutoff() throws Exception { - String pattern = "yyyy-MM-dd HH:mm:ss"; - String column = "col"; - List dates = Arrays.asList( - "0001-01-01 00:00:00", - "1000-01-01 00:00:00", - "1500-01-10 00:00:00", - "1582-10-14 23:59:59", - "1582-10-15 00:00:00", - "1850-09-09 00:00:00", - "1998-09-04 00:00:00", - "2018-05-14 00:00:00" - ); - String[] directives = new String[]{String.format("%s :%s \"%s\"", ParseSimpleDate.NAME, column, pattern)}; - List rows = dates.stream().map(date -> new Row(column, date)).collect(Collectors.toList()); - - List resultRows = TestingRig.execute(directives, rows); - - Assert.assertEquals(dates.size(), resultRows.size()); - - GregorianCalendar gc = new GregorianCalendar(TimeZone.getTimeZone("UTC")); - gc.setGregorianChange(new Date(Long.MIN_VALUE)); - SimpleDateFormat formatter = new SimpleDateFormat(pattern); - formatter.setCalendar(gc); - for (int i = 0; i < dates.size(); i++) { - ZonedDateTime zonedDateTime = ZonedDateTime.from( - formatter.parse(dates.get(i)).toInstant().atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC)) - ); - Assert.assertEquals(zonedDateTime, resultRows.get(i).getValue(column)); - } - // For good measure :) - Assert.assertEquals("0001-01-01T00:00Z[UTC]", resultRows.get(0).getValue(column).toString()); - } - - @Test(expected = RecipeException.class) - public void testInvalidFormatterPatternThrowsRecipeException() throws Exception { - String pattern = "foobar"; - String column = "col"; - String date = "2001-07-04"; - String[] directives = new String[]{String.format("%s :%s \"%s\"", ParseSimpleDate.NAME, column, pattern)}; - Row row = new Row(column, date); - - TestingRig.execute(directives, Collections.singletonList(row)); - } - - @Test - public void testParseExceptionCollectsAsErrorRecord() throws Exception { - String column = "col"; - String date = "2001-07-04"; - String pattern = "yyyy.MM.dd"; - String[] directives = new String[]{String.format("%s :%s \"%s\"", ParseSimpleDate.NAME, column, pattern)}; - Row row = new Row(column, date); - - Pair, List> result = TestingRig.executeWithErrors(directives, Collections.singletonList(row)); - - List resultRows = result.getFirst(); - List errorRows = result.getSecond(); - Assert.assertEquals(0, resultRows.size()); - Assert.assertEquals(1, errorRows.size()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/parser/XmlToJsonTest.java b/wrangler-core/src/test/java/io/cdap/directives/parser/XmlToJsonTest.java deleted file mode 100644 index 2d08228a8..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/parser/XmlToJsonTest.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright © 2024 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.parser; - -import io.cdap.directives.xml.XmlToJson; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link XmlToJson} - */ -public class XmlToJsonTest { - @Test - public void testAutoConversionOfStringField() throws Exception { - String[] directives = new String[] { - "copy body body_1 true", - "copy body body_2 true", - "copy body body_3 true", - "parse-xml-to-json body_1 1", - "parse-xml-to-json body_2 1 false", - "parse-xml-to-json body_3 1 true" - }; - - List rows = Arrays.asList( - new Row("body", - "303246306303E8") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("{\"tagid\":3.03246306303E19}", rows.get(0).getValue("body_1_Data").toString()); - Assert.assertEquals("{\"tagid\":3.03246306303E19}", rows.get(0).getValue("body_2_Data").toString()); - Assert.assertEquals("{\"tagid\":\"303246306303E8\"}", rows.get(0).getValue("body_3_Data").toString()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/row/FailTest.java b/wrangler-core/src/test/java/io/cdap/directives/row/FailTest.java deleted file mode 100644 index eec5a6e49..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/row/FailTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link Fail} - */ -public class FailTest { - - @Test(expected = RecipeException.class) - public void testFailEvaluationToTrue() throws Exception { - String[] directives = new String[] { - "fail count > 0", - }; - - List rows = Arrays.asList( - new Row("count", 1) - ); - - TestingRig.execute(directives, rows); - } - - @Test - public void testFailEvaluationToFalse() throws Exception { - String[] directives = new String[] { - "fail count > 10", - }; - - List rows = Arrays.asList( - new Row("count", 1) - ); - - TestingRig.execute(directives, rows); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/row/FlattenTest.java b/wrangler-core/src/test/java/io/cdap/directives/row/FlattenTest.java deleted file mode 100644 index b46676a4c..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/row/FlattenTest.java +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import com.google.gson.JsonArray; -import com.google.gson.JsonPrimitive; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -/** - * Tests {@link Flatten} - */ -public class FlattenTest { - - @Test - public void testEmptyList() throws Exception { - String[] directives = new String[] { - "flatten x" - }; - - Row row = new Row("x", new ArrayList<>()).add("y", "y"); - List output = TestingRig.execute(directives, Collections.singletonList(row)); - - Assert.assertEquals(1, output.size()); - Assert.assertEquals("y", output.get(0).getValue("y")); - Assert.assertNull(((List) output.get(0).getValue("x"))); - } - - /** - * { col1, col2, col3} - * { col1=A } - * { col1=B } - * { col2=JsonArray{x1,y1}, col3=10} - * { col2=JsonArray{x2,y2}, col3=11} - * - * Generates 10 rows - * - * { A, null, null} - * { B, null, null} - * { null, X1, 10} - * { null, Y1, 10} - * { null, X2, 11} - * { null, Y2, 11} - * - * @throws Exception - */ - @Test - public void testBasicCase1() throws Exception { - String[] directives = new String[] { - "flatten col1,col2,col3", - }; - - JsonArray a1 = new JsonArray(); - a1.add(new JsonPrimitive("x1")); - a1.add(new JsonPrimitive("y1")); - JsonArray a2 = new JsonArray(); - a2.add(new JsonPrimitive("x2")); - a2.add(new JsonPrimitive("y2")); - List b1 = new ArrayList<>(); - b1.add("x1"); - b1.add("y1"); - List b2 = new ArrayList<>(); - b2.add("x2"); - b2.add("y2"); - List rows = Arrays.asList( - new Row("col1", "A"), - new Row("col1", "B"), - new Row("col2", a1).add("col3", 10), - new Row("col2", a2).add("col3", 11), - new Row("col2", b1).add("col3", 10), - new Row("col2", b2).add("col3", 11) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 10); - } - - /** - * { col1, col2, col3} - * { col1=A } - * { col1=B } - * { col2=JSONArray{x1,y1,z1}, col3=10} - * { col2=JSONArray{x2,y2}, col3=11} - * - * Generates 12 rows - * - * { A, null, null} - * { B, null, null} - * { null, X1, 10} - * { null, Y1, 10} - * { null, Z1, 10} - * { null, Y1, 11} - * { null, Y2, 11} - * - * @throws Exception - */ - @Test - public void testBasicCase2() throws Exception { - String[] directives = new String[] { - "flatten col1,col2,col3", - }; - - JsonArray a1 = new JsonArray(); - a1.add(new JsonPrimitive("x1")); - a1.add(new JsonPrimitive("y1")); - a1.add(new JsonPrimitive("z1")); - JsonArray a2 = new JsonArray(); - a2.add(new JsonPrimitive("x2")); - a2.add(new JsonPrimitive("y2")); - List b1 = new ArrayList<>(); - b1.add("x1"); - b1.add("y1"); - b1.add("z1"); - List b2 = new ArrayList<>(); - b2.add("x2"); - b2.add("y2"); - List rows = Arrays.asList( - new Row("col1", "A"), - new Row("col1", "B"), - new Row("col2", a1).add("col3", 10), - new Row("col2", a2).add("col3", 11), - new Row("col2", b1).add("col3", 10), - new Row("col2", b2).add("col3", 11) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 12); - } - - /** - * { col1, col2, col3} - * { col1=A } - * { col1=B } - * { col2=JSONArray{x1,y1,z1}, col3={a1,b1,c1}} - * { col2=JSONArray{x2,y2}, col3={a2,b2}} - * - * Generates 12 rows - * - * { A, null, null} - * { B, null, null} - * { null, X1, a1} - * { null, Y1, b1} - * { null, z1, c1} - * { null, x2, a2} - * { null, y2, b2} - * - * @throws Exception - */ - @Test - public void testBasicCase3() throws Exception { - String[] directives = new String[] { - "flatten col1,col2,col3", - }; - - JsonArray a1 = new JsonArray(); - a1.add(new JsonPrimitive("x1")); - a1.add(new JsonPrimitive("y1")); - a1.add(new JsonPrimitive("z1")); - JsonArray a2 = new JsonArray(); - a2.add(new JsonPrimitive("x2")); - a2.add(new JsonPrimitive("y2")); - JsonArray a3 = new JsonArray(); - a3.add(new JsonPrimitive("a1")); - a3.add(new JsonPrimitive("b1")); - a3.add(new JsonPrimitive("c1")); - JsonArray a4 = new JsonArray(); - a4.add(new JsonPrimitive("a2")); - a4.add(new JsonPrimitive("b2")); - List b1 = new ArrayList<>(); - b1.add("x1"); - b1.add("y1"); - b1.add("z1"); - List b2 = new ArrayList<>(); - b2.add("x2"); - b2.add("y2"); - List b3 = new ArrayList<>(); - b3.add("a1"); - b3.add("b1"); - b3.add("c1"); - List b4 = new ArrayList<>(); - b4.add("a2"); - b4.add("b2"); - List rows = Arrays.asList( - new Row("col1", "A"), - new Row("col1", "B"), - new Row("col2", a1).add("col3", a3), - new Row("col2", a2).add("col3", a4), - new Row("col2", b1).add("col3", b3), - new Row("col2", b2).add("col3", b4) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 12); - } - - /** - * { col1, col2, col3} - * { col1=A } - * { col1=B } - * { col2=JSONArray{x1,y1,z1}, col3={a1,b1}} - * { col2=JSONArray{x2,y2}, col3={a2,b2,c2}} - * - * Generates 14 rows - * - * { A, null, null} - * { B, null, null} - * { null, X1, a1} - * { null, Y1, b1} - * { null, z1, null} - * { null, x2, a2} - * { null, y2, b2} - * { null, null, c2} - * - * @throws Exception - */ - @Test - public void testBasicCase4() throws Exception { - String[] directives = new String[] { - "flatten col1,col2,col3", - }; - - JsonArray a1 = new JsonArray(); - a1.add(new JsonPrimitive("x1")); - a1.add(new JsonPrimitive("y1")); - a1.add(new JsonPrimitive("z1")); - JsonArray a2 = new JsonArray(); - a2.add(new JsonPrimitive("x2")); - a2.add(new JsonPrimitive("y2")); - JsonArray a3 = new JsonArray(); - a3.add(new JsonPrimitive("a1")); - a3.add(new JsonPrimitive("b1")); - JsonArray a4 = new JsonArray(); - a4.add(new JsonPrimitive("a2")); - a4.add(new JsonPrimitive("b2")); - a4.add(new JsonPrimitive("c2")); - List b1 = new ArrayList<>(); - b1.add("x1"); - b1.add("y1"); - b1.add("z1"); - List b2 = new ArrayList<>(); - b2.add("x2"); - b2.add("y2"); - List b3 = new ArrayList<>(); - b3.add("a1"); - b3.add("b1"); - List b4 = new ArrayList<>(); - b4.add("a2"); - b4.add("b2"); - b4.add("c2"); - List rows = Arrays.asList( - new Row("col1", "A"), - new Row("col1", "B"), - new Row("col2", a1).add("col3", a3), - new Row("col2", a2).add("col3", a4), - new Row("col2", b1).add("col3", b3), - new Row("col2", b2).add("col3", b4) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 14); - } - - @Test - public void testFlatteningBasic() throws Exception { - String[] directives = new String[] { - "flatten FirstName", - "flatten LastName" - }; - - JsonArray fname = new JsonArray(); - fname.add(new JsonPrimitive("SADASD")); - fname.add(new JsonPrimitive("ROOT")); - - JsonArray lname = new JsonArray(); - lname.add(new JsonPrimitive("SADASDMR")); - lname.add(new JsonPrimitive("JOLTIE")); - - List rows = Arrays.asList( - new Row("FirstName", fname).add("LastName", lname) - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 4); - } - - @Test(expected = DirectiveParseException.class) - public void testSyntaxFailure1() throws Exception { - String[] directives = new String[] { - "flatten", - }; - - JsonArray fname = new JsonArray(); - fname.add(new JsonPrimitive("SADASD")); - fname.add(new JsonPrimitive("ROOT")); - - JsonArray lname = new JsonArray(); - lname.add(new JsonPrimitive("SADASDMR")); - lname.add(new JsonPrimitive("JOLTIE")); - - List rows = Arrays.asList( - new Row("FirstName", fname).add("LastName", lname) - ); - - TestingRig.execute(directives, rows); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/row/RowConditionFilterTest.java b/wrangler-core/src/test/java/io/cdap/directives/row/RowConditionFilterTest.java deleted file mode 100644 index 18e3c108f..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/row/RowConditionFilterTest.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link RecordConditionFilter} - */ -public class RowConditionFilterTest { - - @Test(expected = RecipeException.class) - public void testRHSLHSTypeDisconnect() throws Exception { - String[] directives = new String[]{ - "parse-as-csv body ,", - "drop body", - "set columns PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked", - "filter-row-if-true Fare < 10" // RHS is double, but it's not converted. Check next test case. - }; - - List rows = Arrays.asList( - new Row("body", "1,0,3,\"Braund, Mr. Owen Harris\",male,22,1,0,A/5 21171,7.25,,S"), - new Row("body", "2,1,1,\"Cumings, Mrs. John Bradley (Florence Briggs Thayer)\",female," + - "38,1,0,PC 17599,71.2833,C85,C") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - } - - @Test - public void testSameRHSAndLHSType() throws Exception { - String[] directives = new String[]{ - "parse-as-csv body ,", - "drop body", - "set columns PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked", - "filter-row-if-true Fare < 10.0" // RHS is changed to double, so LHS will also be changed. - }; - - List rows = Arrays.asList( - new Row("body", "1,0,3,\"Braund, Mr. Owen Harris\",male,22,1,0,A/5 21171,7.25,,S"), - new Row("body", "2,1,1,\"Cumings, Mrs. John Bradley (Florence Briggs Thayer)\",female," + - "38,1,0,PC 17599,71.2833,C85,C") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - } - - @Test - public void testComparingColumns() throws Exception { - String[] directives = new String[] { - "parse-as-csv body ',' false", - "drop body", - "set columns id,fname,lname", - "filter-row exp: { fname == lname} true" - }; - - List rows = Arrays.asList( - new Row("body", "1,root,joltie"), - new Row("body", "1,root,root"), - new Row("body", "1,joltie,joltie") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("root", rows.get(0).getValue("fname")); - Assert.assertEquals("joltie", rows.get(0).getValue("lname")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/row/RowRegexFilterTest.java b/wrangler-core/src/test/java/io/cdap/directives/row/RowRegexFilterTest.java deleted file mode 100644 index e45124e53..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/row/RowRegexFilterTest.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link RecordRegexFilter} - */ -public class RowRegexFilterTest { - - @Test - public void testRowFilterRegex() throws Exception { - String[] directives = new String[] { - "parse-as-csv __col ,", - "drop __col", - "set columns id,first,last,dob,email,age,hrlywage,address,city,state,country,zip", - "filter-by-regex if-matched :email 'NULL'", - "filter-by-regex if-matched :email '.*@joltie.io'", - "filter-row-if-true id > 1092", - "filter-rows-on regex-match last .*(?i)harris.*" - }; - - List rows = Arrays.asList( - new Row("__col", "1098,Root,Joltie,01/26/1956,root@joltie.io,32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1091,Root,Joltie,01/26/1956,root1@joltie.io,32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1092,Root,Joltie,01/26/1956,root@mars.com,32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1093,Root,Joltie,01/26/1956,root@foo.com,32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1094,Super,Joltie,01/26/1956,windy@joltie.io,32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826") - ); - - rows = TestingRig.execute(directives, rows); - - // Filters all the rows that don't match the pattern .*@joltie.io - Assert.assertTrue(rows.size() == 1); - } - - @Test - public void testStarCondition() throws Exception { - String[] directives = new String[] { - "parse-as-csv __col ,", - "drop __col", - "set columns id,first,last,dob,email,age,hrlywage,address,city,state,country,zip", - "filter-by-regex if-matched :email '.*root.*'" - }; - - List rows = Arrays.asList( - new Row("__col", "1098,Root,Joltie,01/26/1956,root@joltie.io,32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1091,Root,Joltie,01/26/1956,root1@joltie.io,32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1092,Root,Joltie,01/26/1956,root@mars.com,32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1093,Root,Joltie,01/26/1956,root@foo.com,32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1094,Super,Joltie,01/26/1956,windy@joltie.io,32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826") - ); - - rows = TestingRig.execute(directives, rows); - - // Filters all the rows that don't match the pattern .*@joltie.io - Assert.assertEquals(1, rows.size()); - } - - @Test - public void testFilterOnNumericValues() throws Exception { - List directives = new ArrayList<>(); - - directives.add("parse-as-csv __col ,"); - directives.add("drop __col"); - directives.add("set columns id,string,int,short,long,float,double"); - directives.add("set-type :int integer"); - directives.add("set-type :short short"); - directives.add("set-type :long long"); - directives.add("set-type :float float"); - directives.add("set-type :double double"); - directives.add("filter-rows-on condition-false int == 5005"); - - List originalRows = Arrays.asList( - new Row("__col", "1,san jose,1001,1,11,22.1,55.1"), - new Row("__col", "2,palo alto,2002,2,22,22.2,55.2"), - new Row("__col", "3,mountain view,3,3003,33,22.3,55.3"), - new Row("__col", "4,saratoga,4004,4,44,22.4,55.4"), - new Row("__col", "5,los altos,5005,5,55,22.5,55.5") - ); - - // test integer support - List rows = TestingRig.execute(directives.toArray(new String[directives.size()]), originalRows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(5005, rows.get(0).getValue(2)); - - // test short support - directives.remove(8); - directives.add("filter-rows-on regex-not-match long .*2.*"); - rows = TestingRig.execute(directives.toArray(new String[directives.size()]), originalRows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(new Short("2"), rows.get(0).getValue(3)); - - // test long support - directives.remove(8); - directives.add("filter-rows-on regex-not-match long .*2.*"); - rows = TestingRig.execute(directives.toArray(new String[directives.size()]), originalRows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(22L, rows.get(0).getValue(4)); - - // test float support - directives.remove(8); - directives.add("filter-rows-on regex-not-match float .*22.4.*"); - rows = TestingRig.execute(directives.toArray(new String[directives.size()]), originalRows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(22.4f, rows.get(0).getValue(5)); - - // test double support - directives.remove(8); - directives.add("filter-rows-on regex-not-match double .*55.1.*"); - rows = TestingRig.execute(directives.toArray(new String[directives.size()]), originalRows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(55.1d, rows.get(0).getValue(6)); - - // test string support - directives.remove(8); - directives.add("filter-rows-on regex-not-match string .*sar.*"); - rows = TestingRig.execute(directives.toArray(new String[directives.size()]), originalRows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("saratoga", rows.get(0).getValue(1)); - } - - @Test - public void testFilterKeepDoesntKeepNullValues() throws Exception { - String[] directives = new String[] { - "parse-as-csv :body ',' false", - "filter-by-regex if-matched :body_3 '.*pot.*'" - }; - - List rows = Arrays.asList( - new Row("body", "1, \"Archil\", , \"SHAH\", 19, \"2017-06-02\""), - new Row("body", "2, \"Sameet\", \"andpotatoes\", \"Sapra\", 19, \"2017-06-02\""), - new Row("body", "3, \"Bob\", , \"Sagett\", 101, \"1970-01-01\"") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 2); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/row/SendToErrorAndContinueTest.java b/wrangler-core/src/test/java/io/cdap/directives/row/SendToErrorAndContinueTest.java deleted file mode 100644 index 718b2f488..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/row/SendToErrorAndContinueTest.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.ErrorRecord; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link SendToErrorAndContinue} - */ -public class SendToErrorAndContinueTest { - - /** - * This tests how to filter records that don't match specified number of columns. - */ - @Test - public void testErrorAndContinueNoofColumns() throws Exception { - String[] directives = new String[] { - "parse-as-csv body , true", - "drop :body", - "send-to-error-and-continue exp:{ this.width() < 4} 'filtering records that dont have 4 columns'" - }; - - List rows = Arrays.asList( - new Row("body", "A,B,C,D"), - new Row("body", "X,Y,1"), // has fewer columns. - new Row("body", "I,J,3"), // has fewer columns. - new Row("body", "U,V,2,3.0") - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - - Assert.assertEquals(2, errors.size()); - Assert.assertEquals(1, results.size()); - Assert.assertEquals("1", errors.get(0).getRow().getValue("C")); - Assert.assertEquals("2", results.get(0).getValue("C")); - } - - @Test - public void testErrorConditionTrueAndContinue() throws Exception { - String[] directives = new String[] { - "parse-as-csv body , true", - "drop body", - "send-to-error-and-continue exp:{C == 1}", - "send-to-error-and-continue exp:{C == 2}", - "send-to-error-and-continue exp:{D == 3.0}", - }; - - List rows = Arrays.asList( - new Row("body", "A,B,C,D"), - new Row("body", "X,Y,1,2.0"), - new Row("body", "U,V,2,3.0") - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - - Assert.assertEquals(2, errors.size()); - Assert.assertEquals(0, results.size()); - } - - @Test - public void testErrorConditionTrueAndContinueWithTransientVariable() throws Exception { - String[] directives = new String[] { - "parse-as-csv body , true", - "drop body", - "send-to-error-and-continue exp:{body_3 == 'xx'} 'invalid value'", - "send-to-error-and-continue exp:{body_4=='1'} 'junk' ", - "send-to-error exp:{dq_failure >= 1} " - }; - - List rows = Arrays.asList( - new Row("body", "1020134.298,,1,2,2 "), - new Row("body", "1020134.298,,xx,1,3"), - new Row("body", "1020134.298,,4,1,4"), - new Row("body", "1020134.298,,4,2,5"), - new Row("body", "1020134.298,,1,2,1") - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - Assert.assertEquals(2, errors.size()); - Assert.assertEquals(3, results.size()); - } - - @Test - public void testErrorConditionFalseAndContinueWithTransientVariable() throws Exception { - String[] directives = new String[] { - "parse-as-csv body , true", - "drop body", - "send-to-error-and-continue exp:{body_3 == 'xyzw'} 'invalid value'", - "send-to-error-and-continue exp:{body_4=='1000'} 'junk' ", - "send-to-error exp:{dq_failure >= 1} " - }; - - List rows = Arrays.asList( - new Row("body", "1020134.298,,1,2,2 "), - new Row("body", "1020134.298,,xx,1,3"), - new Row("body", "1020134.298,,4,1,4"), - new Row("body", "1020134.298,,4,2,5"), - new Row("body", "1020134.298,,1,2,1") - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - Assert.assertEquals(0, errors.size()); - Assert.assertEquals(5, results.size()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/row/SendToErrorTest.java b/wrangler-core/src/test/java/io/cdap/directives/row/SendToErrorTest.java deleted file mode 100644 index a206247e7..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/row/SendToErrorTest.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.ErrorRecord; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link SendToError} - */ -public class SendToErrorTest { - - /** - * This tests how to filter records that don't match specified number of columns. - */ - @Test - public void testErrorBasedOnColumns() throws Exception { - String[] directives = new String[] { - "parse-as-csv body , true", - "drop :body", - "send-to-error exp:{ this.width() < 4} 'filtering records that dont have 4 columns'", - "set-column :env exp:{ ctx.name }", - "set-column :now exp:{ ctx.nano }" - }; - - List rows = Arrays.asList( - new Row("body", "A,B,C,D"), - new Row("body", "X,Y,1"), // has fewer columns. - new Row("body", "U,V,2,3.0") - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(1, results.size()); - Assert.assertEquals("1", errors.get(0).getRow().getValue("C")); - Assert.assertEquals("filtering records that dont have 4 columns (ecode: 1, directive: send-to-error)", - errors.get(0).getMessage()); - Assert.assertEquals("2", results.get(0).getValue("C")); - } - - @Test - public void testErrorConditionTrue() throws Exception { - String[] directives = new String[] { - "parse-as-csv body , true", - "drop body", - "send-to-error C == 1", - }; - - List rows = Arrays.asList( - new Row("body", "A,B,C,D"), - new Row("body", "X,Y,1,2.0"), - new Row("body", "U,V,2,3.0") - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(1, results.size()); - Assert.assertEquals("2.0", errors.get(0).getRow().getValue("D")); - Assert.assertEquals("2", results.get(0).getValue("C")); - } - - @Test - public void testRegexFiltering() throws Exception { - String[] directives = new String[] { - "parse-as-csv body , true", - "drop body", - "send-to-error A =~ \"Was.*\"", - }; - - List rows = Arrays.asList( - new Row("body", "A,B"), - new Row("body", "Washington,Y"), - new Row("body", "Window,V") - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(1, results.size()); - } - - @Test - public void testNullFieldsSkipping() throws Exception { - String[] directives = new String[] { - "parse-as-csv body , true", - "drop body", - "send-to-error exp:{C1 =~ \"Was.*\"};", - }; - - List rows = Arrays.asList( - new Row("body", "A,B,C"), - new Row("body", "Washington,Y"), - new Row("body", "Window,V,XYZ") - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - - Assert.assertEquals(0, errors.size()); - Assert.assertEquals(2, results.size()); - } - - @Test - public void testIntegerField() throws Exception { - String[] directives = new String[] { - "send-to-error field_calories_cnt < 0" - }; - - List rows = Arrays.asList( - new Row("field_calories_cnt", new Integer(10)), - new Row("field_calories_cnt", new Integer(0)), - new Row("field_calories_cnt", new Integer(-10)) - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(2, results.size()); - } - - @Test - public void testMissingVariables() throws Exception { - String[] directives = new String[] { - "send-to-error field_calories_cnt < 0 && field_not_exist == 'test'" - }; - - List rows = Arrays.asList( - new Row("field_calories_cnt", new Integer(10)), - new Row("field_calories_cnt", new Integer(0)), - new Row("field_calories_cnt", new Integer(-10)) - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - - Assert.assertEquals(0, errors.size()); - Assert.assertEquals(3, results.size()); - } - - @Test - public void testSendToErrorWithMessage() throws Exception { - String[] directives = new String[] { - "send-to-error exp:{field_calories_cnt < 0} 'Test Message';" - }; - - List rows = Arrays.asList( - new Row("field_calories_cnt", new Integer(10)), - new Row("field_calories_cnt", new Integer(0)), - new Row("field_calories_cnt", new Integer(-10)) - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - - Assert.assertEquals(1, errors.size()); - Assert.assertEquals("Test Message (ecode: 1, directive: send-to-error)", errors.get(0).getMessage()); - Assert.assertEquals(2, results.size()); - } - - @Test - public void testSendToErrorWithMetricAndMessage() throws Exception { - String[] directives = new String[] { - "send-to-error exp:{field_calories_cnt < 0} test 'Test Message';" - }; - - List rows = Arrays.asList( - new Row("field_calories_cnt", new Integer(10)), - new Row("field_calories_cnt", new Integer(0)), - new Row("field_calories_cnt", new Integer(-10)) - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - - Assert.assertEquals(1, errors.size()); - Assert.assertEquals("Test Message (ecode: 1, directive: send-to-error)", errors.get(0).getMessage()); - Assert.assertEquals(2, results.size()); - } - - @Test - public void testSendToErrorWithMetric() throws Exception { - String[] directives = new String[] { - "send-to-error exp:{field_calories_cnt < 0} test;" - }; - - List rows = Arrays.asList( - new Row("field_calories_cnt", new Integer(10)), - new Row("field_calories_cnt", new Integer(0)), - new Row("field_calories_cnt", new Integer(-10)) - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - - Assert.assertEquals(1, errors.size()); - Assert.assertEquals(2, results.size()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/row/SplitToRowsTest.java b/wrangler-core/src/test/java/io/cdap/directives/row/SplitToRowsTest.java deleted file mode 100644 index 4ead30b97..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/row/SplitToRowsTest.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.row; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link SplitToRows} - */ -public class SplitToRowsTest { - - @Test - public void testSplitToRows() throws Exception { - String[] directives = new String[] { - "split-to-rows body \\n", - }; - - List rows = Arrays.asList( - new Row("body", "AABBCDE\nEEFFFF") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 2); - Assert.assertEquals("AABBCDE", rows.get(0).getValue("body")); - Assert.assertEquals("EEFFFF", rows.get(1).getValue("body")); - } - - @Test - public void testSplitWhenNoPatternMatch() throws Exception { - String[] directives = new String[] { - "split-to-rows body X", - }; - - List rows = Arrays.asList( - new Row("body", "AABBCDE\nEEFFFF") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - } - - @Test - public void testDocExample() throws Exception { - String[] directives = new String[] { - "split-to-rows codes \\|", - }; - - List rows = Arrays.asList( - new Row("id", "1").add("codes", "USD|AUD|AMD|XCD") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 4); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/CharacterCutTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/CharacterCutTest.java deleted file mode 100644 index e3189388c..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/CharacterCutTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link CharacterCut} - */ -public class CharacterCutTest { - - @Test - public void testBasicCharacterCut() throws Exception { - String[] directives = new String[] { - "cut-character body one 1-3", - "cut-character body two 5-7", - "cut-character body three 9-13", - "cut-character body four 15-", - "cut-character body five 1,2,3", - "cut-character body six -3", - "cut-character body seven 1,2,3-5", - }; - - List rows = Arrays.asList( - new Row("body", "one two three four five six seven eight") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(8, rows.get(0).width()); - Assert.assertEquals("one", rows.get(0).getValue("one")); - Assert.assertEquals("two", rows.get(0).getValue("two")); - Assert.assertEquals("three", rows.get(0).getValue("three")); - Assert.assertEquals("four five six seven eight", rows.get(0).getValue("four")); - Assert.assertEquals("one", rows.get(0).getValue("five")); - Assert.assertEquals("one", rows.get(0).getValue("six")); - Assert.assertEquals("one t", rows.get(0).getValue("seven")); - } - - @Test - public void testDollarIncludedInString() throws Exception { - String[] directives = new String[] { - "cut-character body value 2-" - }; - - List rows = Arrays.asList( - new Row("body", "$734.77") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("734.77", rows.get(0).getValue("value")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/EncodeDecodeTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/EncodeDecodeTest.java deleted file mode 100644 index 031bac7e0..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/EncodeDecodeTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link Encode} - */ -public class EncodeDecodeTest { - @Test - public void testEncodeDecode() throws Exception { - String[] directives = new String[] { - "encode base32 col1", - "encode base64 col2", - "encode hex col3" - }; - - List rows = Arrays.asList( - new Row("col1", "Base32 Encoding").add("col2", "Testing Base 64 Encoding").add("col3", "Hex Encoding") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("IJQXGZJTGIQEK3TDN5SGS3TH", rows.get(0).getValue(3)); - Assert.assertEquals("VGVzdGluZyBCYXNlIDY0IEVuY29kaW5n", rows.get(0).getValue(4)); - Assert.assertEquals("48657820456e636f64696e67", rows.get(0).getValue(5)); - - directives = new String[] { - "decode base32 col1_encode_base32", - "decode base64 col2_encode_base64", - "decode hex col3_encode_hex" - }; - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("Base32 Encoding", rows.get(0).getValue(6)); - Assert.assertEquals("Testing Base 64 Encoding", rows.get(0).getValue(7)); - Assert.assertEquals("Hex Encoding", rows.get(0).getValue(8)); - - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/ExtractRegexGroupsTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/ExtractRegexGroupsTest.java deleted file mode 100644 index 1671afcff..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/ExtractRegexGroupsTest.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.LinkedList; -import java.util.List; - -/** - * Tests {@link ExtractRegexGroups} - */ -public class ExtractRegexGroupsTest { - - static { - String dateSeparatorRegex = "(?:(?:[.,]\\s)|[-/.\\s])"; - String dayRegex = "(?:\\d{1,2})"; - String yearRegex = "(?:\\d{4}|\\d{2})"; - String monthRegex = "(?:(?:1[0-2])|" + - "(?:0?\\d)|" + - "(?:[a-zA-Z]{3}))"; - DATE_REGEX = String.format("(?:%s%s%s%s%s)|(?:(?:%s%s%s|%s%s%s)%s%s)", - yearRegex, dateSeparatorRegex, monthRegex, dateSeparatorRegex, dayRegex, - dayRegex, dateSeparatorRegex, monthRegex, - monthRegex, dateSeparatorRegex, dayRegex, - dateSeparatorRegex, yearRegex); - - String hoursMinutes = "(?:(?:2[0-3])|(?:[01]?\\d))[h:\\s][0-5]\\d"; - String seconds = "(?::(?:(?:[0-5]\\d)|(?:60)))?"; - String ampm = "(?:\\s[aApP][mM])?"; - String timezone = "(?:Z|(?:[+-](?:1[0-2])|(?:0?\\d):[0-5]\\d)|(?:\\s[[a-zA-Z]\\s]+))?"; - TIME_REGEX = hoursMinutes + seconds + ampm + timezone; - } - - public static final String DATE_REGEX; - public static final String TIME_REGEX; - - private static class RegexInputOutput { - public final String input; - public final String[] output; - - public RegexInputOutput(String input, String... output) { - this.input = input; - this.output = output; - } - } - - @Test - public void testRegexGroups() throws Exception { - String regex = "[^(]+\\(([0-9]{4})\\).*"; - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("Toy Story (1995)", "1995"), - new RegexInputOutput("Toy Story") - }; - - testRegex(regex, regexInputOutputs); - } - - @Test - public void testEmailRegex() throws Exception { - String regex = "((?:\\S+|\".*?\")+@[a-zA-Z0-9\\.-]+(?:\\.[a-zA-Z]{2,6})?)"; - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("this is not an email"), - new RegexInputOutput("@"), - new RegexInputOutput("test@example.com", "test@example.com"), - new RegexInputOutput("two@emails.com, another@one.com", "two@emails.com", "another@one.com"), - new RegexInputOutput("this.email.is.dotted@dots.com", "this.email.is.dotted@dots.com"), - new RegexInputOutput("this_underscore@email.com", "this_underscore@email.com"), - new RegexInputOutput("gmail+has@plusses.com", "gmail+has@plusses.com"), - new RegexInputOutput("mixed_email.stuff+thing@example.com", "mixed_email.stuff+thing@example.com"), - new RegexInputOutput("MiXeD@case.com", "MiXeD@case.com"), - new RegexInputOutput("thishasn0mbers@example.com", "thishasn0mbers@example.com"), - new RegexInputOutput("tldemail@tld", "tldemail@tld") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testPhoneNumber() throws Exception { - String regex = "((?:\\+\\d{1,3}[\\s-]?)?\\(?\\d{3}\\)?[\\s-]?\\d{3}[\\s-]?\\d{4})"; - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("+12345678901", "+12345678901"), - new RegexInputOutput("+1-234-567-8901", "+1-234-567-8901"), - new RegexInputOutput("+1-(234)-567-8901", "+1-(234)-567-8901"), - new RegexInputOutput("+1 (234)-567-8901", "+1 (234)-567-8901"), - new RegexInputOutput("+1 (234) 567-8901", "+1 (234) 567-8901"), - new RegexInputOutput("+1 (234) 567 8901", "+1 (234) 567 8901"), - new RegexInputOutput("+1 234 567 8901", "+1 234 567 8901"), - new RegexInputOutput("(123)-456-7890", "(123)-456-7890"), - new RegexInputOutput("(123) 456-7890", "(123) 456-7890"), - new RegexInputOutput("(123) 456 7890", "(123) 456 7890"), - new RegexInputOutput("123 456 7890", "123 456 7890"), - new RegexInputOutput("1234567890", "1234567890") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testSSN() throws Exception { - String regex = "(\\d{3}[-\\s]?\\d{2}[-\\s]?\\d{4})"; - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("not an ssn"), - new RegexInputOutput("123-45-6789", "123-45-6789"), - new RegexInputOutput("123 45 6789", "123 45 6789"), - new RegexInputOutput("123456789", "123456789"), - new RegexInputOutput("1234578"), - new RegexInputOutput("123-45-78"), - new RegexInputOutput("123456789 1234578 123 45 6789 abc 123-45-6789 1234-56-789", - "123456789", "123 45 6789", "123-45-6789") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testCreditCard() throws Exception { - String regex = "((?:\\d{4}[-\\s]?){4})"; - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("1234567890123456", "1234567890123456"), - new RegexInputOutput("1234-5678-9012-3456", "1234-5678-9012-3456"), - new RegexInputOutput("1234 5678 9012 3456", "1234 5678 9012 3456"), - new RegexInputOutput("1234 5678 9012 3456, 1234-5678-9012-3456", "1234 5678 9012 3456", "1234-5678-9012-3456"), - new RegexInputOutput("123456789012345"), - new RegexInputOutput("1234-5678-9012-345"), - new RegexInputOutput("123-45678-9012-3456"), - new RegexInputOutput("this is not a credit card number") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testURL() throws Exception { - String regex = "((?:https?://)?[a-zA-Z0-9\\.-]+\\.[a-zA-Z]{2,6}(?:/[\\w\\.-]+)*(?:\\?[\\w\\.&=\\-]+)?)"; - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("cask.co", "cask.co"), - new RegexInputOutput("http://cask.co", "http://cask.co"), - new RegexInputOutput("https://cask.co", "https://cask.co"), - new RegexInputOutput("https://cask.co/test", "https://cask.co/test"), - new RegexInputOutput("https://cask.co/test/anotherone", "https://cask.co/test/anotherone"), - new RegexInputOutput("https://cask.co/test/anotherone?query=1&other=2", - "https://cask.co/test/anotherone?query=1&other=2"), - new RegexInputOutput("this is not a website") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testIPAddress() throws Exception { - String regex = "((?:(?:0|(?:25[0-5])|(?:2[0-4][1-9])|(?:1\\d\\d)|(?:[1-9]\\d?))\\.){3}" + - "(?:(?:0|(?:25[0-5])|(?:2[0-4][1-9])|(?:1\\d\\d)|(?:[1-9]\\d?))))"; - - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("192.168.1.1", "192.168.1.1"), - new RegexInputOutput("0.0.0.0", "0.0.0.0"), - new RegexInputOutput("255.255.255.0", "255.255.255.0"), - new RegexInputOutput("12.34.123.0", "12.34.123.0"), - new RegexInputOutput("255.0.0.0", "255.0.0.0"), - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testMacAddress() throws Exception { - String regex = "((?:\\p{XDigit}{2}[:-]){5}(?:\\p{XDigit}{2}))"; - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("ab:cd:ef:12:34:56", "ab:cd:ef:12:34:56"), - new RegexInputOutput("ab-cd-ef-12-34-56", "ab-cd-ef-12-34-56"), - new RegexInputOutput("abcdef123456"), - new RegexInputOutput("ab:cd:ef:12:34:5g"), - new RegexInputOutput("ab-cd-ef-12-34-5g") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testHTMLTag() throws Exception { - String regex = "<([a-zA-Z]+)(?:\\s+[a-zA-Z]+=\".*?\")*(?:(?:>(.*))|(?:\\s*/?>))"; - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("", "selfclose", null), - new RegexInputOutput("", "selfclose", null), - new RegexInputOutput("", "selfclose", null), - new RegexInputOutput("content", "tag", "content"), - new RegexInputOutput("content", "tag", "content") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testLinkTag() throws Exception { - String regex = "<[aA](?:\\s+[a-zA-Z]+=\".*?\")*\\s+[hH][rR][eE][fF]=\"(.*?)\"(?:\\s+[a-zA-Z]+=\".*?\")*>" + - "(.*)" + - ""; - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("Cask Data", "cask.co", "Cask Data"), - new RegexInputOutput("Cask Data", "http://cask.co/", - "Cask Data"), - new RegexInputOutput("Cask Data", - "http://cask.co/", "Cask Data"), - new RegexInputOutput("Cask Data", - "http://cask.co/", "Cask Data") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testDateRegex() throws Exception { - String regex = String.format("(%s)", DATE_REGEX); - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("2012 Dec 21", "2012 Dec 21"), - new RegexInputOutput("12/25/2017", "12/25/2017"), - new RegexInputOutput("Dec/25/2017", "Dec/25/2017"), - new RegexInputOutput("Dec 25, 2017", "Dec 25, 2017"), - new RegexInputOutput("1997-10-16", "1997-10-16") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testTimeRegex() throws Exception { - String regex = String.format("(%s)", TIME_REGEX); - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("23:59", "23:59"), - new RegexInputOutput("12:59 PM", "12:59 PM"), - new RegexInputOutput("12:59:59 AM", "12:59:59 AM"), - new RegexInputOutput("12:59:60 PM", "12:59:60 PM"), - new RegexInputOutput("12h59", "12h59"), - new RegexInputOutput("12:59:04Z", "12:59:04Z"), - new RegexInputOutput("02:59:04Z", "02:59:04Z"), - new RegexInputOutput("2:59:04Z", "2:59:04Z"), - new RegexInputOutput("2:59:04 PST", "2:59:04 PST"), - new RegexInputOutput("2:59:04 Pacific Standard Time", "2:59:04 Pacific Standard Time") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testDateTimeRegex() throws Exception { - String regex = String.format("((?:%s)[T\\s](?:%s))", DATE_REGEX, TIME_REGEX); - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("Dec 1, 2015 23:59", "Dec 1, 2015 23:59"), - new RegexInputOutput("JUL/05/2010 12:59 PM", "JUL/05/2010 12:59 PM"), - new RegexInputOutput("10/16/97 12:59:59 AM", "10/16/97 12:59:59 AM"), - new RegexInputOutput("10-10-10 12:59:60 PM", "10-10-10 12:59:60 PM"), - new RegexInputOutput("Dec 31, 1997 12h59", "Dec 31, 1997 12h59"), - new RegexInputOutput("2018-03-04T12:59:04Z", "2018-03-04T12:59:04Z"), - new RegexInputOutput("2016-01-10T02:59:04Z", "2016-01-10T02:59:04Z"), - new RegexInputOutput("2016-01-10 2:59:04Z", "2016-01-10 2:59:04Z"), - new RegexInputOutput("2016-01-10 2:59:04 PST", "2016-01-10 2:59:04 PST"), - new RegexInputOutput("2016-01-10 2:59:04 Pacific Standard Time", "2016-01-10 2:59:04 Pacific Standard Time") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testUPSRegex() throws Exception { - String regex = "(1Z\\s?[0-9a-zA-Z]{3}\\s?[0-9a-zA-Z]{3}\\s?[0-9a-zA-Z]{2}\\s?\\d{4}\\s?\\d{4})"; - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("1Z204E380338943508", "1Z204E380338943508"), - new RegexInputOutput("1Z51062E6893884735", "1Z51062E6893884735"), - new RegexInputOutput("1ZXF38300382722839", "1ZXF38300382722839"), - new RegexInputOutput("1ZT675T4YW92275898", "1ZT675T4YW92275898"), - new RegexInputOutput("1ZW6897XYW00098770", "1ZW6897XYW00098770"), - new RegexInputOutput("1Z 999 AA1 01 2345 6784", "1Z 999 AA1 01 2345 6784") - }; - testRegex(regex, regexInputOutputs); - } - - @Test - public void testISBNRegex() throws Exception { - String regex = "((?:97[89]-?)?(?:\\d-?){9}[\\dxX])"; - RegexInputOutput[] regexInputOutputs = { - new RegexInputOutput("ISBN-13: 978-1-56619-909-4", "978-1-56619-909-4"), - new RegexInputOutput("ISBN-10: 1-56619-909-3", "1-56619-909-3"), - new RegexInputOutput("ISBN: 9781566199094", "9781566199094"), - new RegexInputOutput("ISBN-10: 1566199093", "1566199093"), - new RegexInputOutput("ISBN: 978156619909x", "978156619909x"), - new RegexInputOutput("ISBN-10: 156619909X", "156619909X"), - new RegexInputOutput("ISBN 817525766-0", "817525766-0"), - new RegexInputOutput("ISBN 0-936385-405", "0-936385-405") - }; - testRegex(regex, regexInputOutputs); - } - - private void testRegex(String regex, RegexInputOutput[] regexInputOutputs) throws Exception { - final String column = "column"; - - String[] directives = new String[] { - String.format("extract-regex-groups %s %s", column, regex) - }; - - List rows = new LinkedList<>(); - for (RegexInputOutput regexInputOutput : regexInputOutputs) { - rows.add(new Row(column, regexInputOutput.input)); - } - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(regexInputOutputs.length, rows.size()); - for (int i = 0; i < regexInputOutputs.length; i++) { - RegexInputOutput regexInputOutput = regexInputOutputs[i]; - - Assert.assertEquals(regexInputOutput.input, regexInputOutput.output.length, rows.get(i).width() - 1); - for (int j = 0; j < regexInputOutput.output.length; j++) { - Assert.assertEquals(regexInputOutput.output[j], rows.get(i).getValue(j + 1)); - } - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/FillNullOrEmptyTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/FillNullOrEmptyTest.java deleted file mode 100644 index c89bfe298..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/FillNullOrEmptyTest.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link FillNullOrEmpty} - */ -public class FillNullOrEmptyTest { - - @Test - public void testColumnNotPresent() throws Exception { - String[] directives = new String[] { - "fill-null-or-empty null N/A", - }; - - List rows = Arrays.asList( - new Row("value", "has value"), - new Row("value", null), - new Row("value", null) - ); - - TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 3); - } - - @Test - public void testBasicNullCase() throws Exception { - String[] directives = new String[] { - "fill-null-or-empty value N/A", - }; - - List rows = Arrays.asList( - new Row("value", "has value"), - new Row("value", null), - new Row("value", null) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 3); - Assert.assertEquals("has value", rows.get(0).getValue("value")); - Assert.assertEquals("N/A", rows.get(1).getValue("value")); - Assert.assertEquals("N/A", rows.get(2).getValue("value")); - } - - @Test - public void testEmptyStringCase() throws Exception { - String[] directives = new String[] { - "fill-null-or-empty value N/A", - }; - - List rows = Arrays.asList( - new Row("value", ""), - new Row("value", ""), - new Row("value", "Should be fine") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 3); - Assert.assertEquals("N/A", rows.get(0).getValue("value")); - Assert.assertEquals("N/A", rows.get(1).getValue("value")); - Assert.assertEquals("Should be fine", rows.get(2).getValue("value")); - } - - @Test - public void testMixedCases() throws Exception { - String[] directives = new String[] { - "fill-null-or-empty value N/A", - }; - - List rows = Arrays.asList( - new Row("value", null), - new Row("value", ""), - new Row("value", "Should be fine") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 3); - Assert.assertEquals("N/A", rows.get(0).getValue("value")); - Assert.assertEquals("N/A", rows.get(1).getValue("value")); - Assert.assertEquals("Should be fine", rows.get(2).getValue("value")); - } - - @Test - public void testSpace() throws Exception { - String[] directives = new String[] { - "fill-null-or-empty :value 'Not Available'", - }; - - List rows = Arrays.asList( - new Row("value", null), - new Row("value", null), - new Row("value", "Should be fine") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 3); - Assert.assertEquals("Not Available", rows.get(0).getValue("value")); - Assert.assertEquals("Not Available", rows.get(1).getValue("value")); - Assert.assertEquals("Should be fine", rows.get(2).getValue("value")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/FindAndReplaceTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/FindAndReplaceTest.java deleted file mode 100644 index 7fa2aefb3..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/FindAndReplaceTest.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link FindAndReplace} - */ -public class FindAndReplaceTest { - @Test - public void testSedGrep() throws Exception { - String[] directives = new String[] { - "find-and-replace body s/\"//g" - }; - - List rows = Arrays.asList( - new Row("body", "07/29/2013,Debt collection,\"Other (i.e. phone, health club, etc.)\",Cont'd attempts collect " + - "debt not owed,Debt is not mine,,,\"NRA Group, LLC\",VA,20147,,N/A,Web,08/07/2013,Closed with non-monetary " + - "relief,Yes,No,467801"), - new Row("body", "07/29/2013,Mortgage,Conventional fixed mortgage,\"Loan servicing, payments, escrow account\",," + - ",,Franklin Credit Management,CT,06106,,N/A,Web,07/30/2013,Closed with explanation,Yes,No,475823") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 2); - Assert.assertEquals("07/29/2013,Debt collection,Other (i.e. phone, health club, etc.),Cont'd " + - "attempts collect debt not owed,Debt is not mine,,,NRA Group, LLC,VA,20147,,N/A," + - "Web,08/07/2013,Closed with non-monetary relief,Yes,No,467801", - rows.get(0).getValue("body")); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/GenerateUUIDTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/GenerateUUIDTest.java deleted file mode 100644 index 9338bccdd..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/GenerateUUIDTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link GenerateUUID} - */ -public class GenerateUUIDTest { - - @Test - public void testUUIDGeneration() throws Exception { - String[] directives = new String[] { - "generate-uuid uuid", - }; - - List rows = Arrays.asList( - new Row("value", "abc"), - new Row("value", "xyz"), - new Row("value", "Should be fine") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 3); - Assert.assertEquals(2, rows.get(0).width()); - Assert.assertEquals("uuid", rows.get(1).getColumn(1)); - Assert.assertEquals("Should be fine", rows.get(2).getValue("value")); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/LeftTrimTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/LeftTrimTest.java deleted file mode 100644 index 0fb060ee7..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/LeftTrimTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link LeftTrim} - */ -public class LeftTrimTest { - - @Test - public void testSingleWordLeftTrim() throws Exception { - String[] directives = new String[]{ - "ltrim body", - }; - - List rows = Arrays.asList( - new Row("body", "TITLE"), - new Row("body", " TITLE"), - new Row("body", "TITLE "), - new Row("body", " TITLE "), - new Row("body", " TITLE ") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(5, rows.size()); - Assert.assertEquals("TITLE", rows.get(0).getValue("body")); - Assert.assertEquals("TITLE", rows.get(1).getValue("body")); - Assert.assertEquals("TITLE ", rows.get(2).getValue("body")); - Assert.assertEquals("TITLE ", rows.get(3).getValue("body")); - Assert.assertEquals("TITLE ", rows.get(4).getValue("body")); - } - - @Test - public void testSentenceLeftTrim() throws Exception { - String[] directives = new String[]{ - "ltrim body", - }; - - List rows = Arrays.asList( - new Row("body", "TITLE IS TITLE"), - new Row("body", " TITLE IS TITLE"), - new Row("body", "TITLE IS TITLE "), - new Row("body", " TITLE IS TITLE "), - new Row("body", " TITLE IS TITLE ") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(5, rows.size()); - Assert.assertEquals("TITLE IS TITLE", rows.get(0).getValue("body")); - Assert.assertEquals("TITLE IS TITLE", rows.get(1).getValue("body")); - Assert.assertEquals("TITLE IS TITLE ", rows.get(2).getValue("body")); - Assert.assertEquals("TITLE IS TITLE ", rows.get(3).getValue("body")); - Assert.assertEquals("TITLE IS TITLE ", rows.get(4).getValue("body")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/LowerTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/LowerTest.java deleted file mode 100644 index 674fed2a9..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/LowerTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link Lower} - */ -public class LowerTest { - - @Test - public void testSingleWordLowerCasing() throws Exception { - String[] directives = new String[] { - "lowercase body", - }; - - List rows = Arrays.asList( - new Row("body", "TITLE"), - new Row("body", "tiTLE"), - new Row("body", "title"), - new Row("body", "TitlE") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(4, rows.size()); - Assert.assertEquals("title", rows.get(0).getValue("body")); - Assert.assertEquals("title", rows.get(1).getValue("body")); - Assert.assertEquals("title", rows.get(2).getValue("body")); - Assert.assertEquals("title", rows.get(3).getValue("body")); - } - - @Test - public void testSentenceLowercasing() throws Exception { - String[] directives = new String[] { - "lowercase body", - }; - - List rows = Arrays.asList( - new Row("body", "TITLE is TITLE"), - new Row("body", "tiTLE IS tItle"), - new Row("body", "title is title"), - new Row("body", "TitlE Is TiTLE") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(4, rows.size()); - Assert.assertEquals("title is title", rows.get(0).getValue("body")); - Assert.assertEquals("title is title", rows.get(1).getValue("body")); - Assert.assertEquals("title is title", rows.get(2).getValue("body")); - Assert.assertEquals("title is title", rows.get(3).getValue("body")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/MaskNumberTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/MaskNumberTest.java deleted file mode 100644 index 508f6259e..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/MaskNumberTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link MaskNumber} - */ -public class MaskNumberTest { - - @Test - public void testSSNWithDashesExact() throws Exception { - String[] directives = new String[] { - "mask-number body xxx-xx-####" - }; - - List rows = Arrays.asList( - new Row("body", "000-00-1234") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("xxx-xx-1234", rows.get(0).getValue("body")); - } - - @Test - public void testSSNWithDashesExtra() throws Exception { - String[] directives = new String[] { - "mask-number body xxx-xx-#####" - }; - - List rows = Arrays.asList( - new Row("body", "000-00-1234") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("xxx-xx-1234", rows.get(0).getValue("body")); - } - - @Test - public void testComplexMasking() throws Exception { - String[] directives = new String[] { - "mask-number body xxx-##-xx-##-XXXX-9" - }; - - List rows = Arrays.asList( - new Row("body", "0000012349898") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("xxx-00-xx-34-xxxx-9", rows.get(0).getValue("body")); - } - - @Test - public void testIntegerTypeMasking() throws Exception { - String[] directives = new String[] { - "mask-number body xx-xx-#" - }; - - List rows = Arrays.asList( - new Row("body", 12345), - new Row("body", 123), - new Row("body", 123456) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(3, rows.size()); - Assert.assertEquals("xx-xx-5", rows.get(0).getValue("body")); - Assert.assertEquals("xx-xx-", rows.get(1).getValue("body")); - Assert.assertEquals("xx-xx-5", rows.get(2).getValue("body")); - } - - @Test - public void testWithOtherCharacters() throws Exception { - String[] directives = new String[] { - "mask-number body xx-xx-TESTING-#" - }; - - List rows = Arrays.asList( - new Row("body", 12345) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("xx-xx-TESTING-5", rows.get(0).getValue("body")); - } - - @Test - public void testWithLong() throws Exception { - String[] directives = new String[] { - "mask-number body xx-xx-#" - }; - - List rows = Arrays.asList( - new Row("body", 12345L) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("xx-xx-5", rows.get(0).getValue("body")); - } - - @Test - public void testWithFloat() throws Exception { - String[] directives = new String[] { - "mask-number body x#.x#" - }; - - List rows = Arrays.asList( - new Row("body", 12.34) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("x2.x4", rows.get(0).getValue("body")); - } -} - diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/MessageHashTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/MessageHashTest.java deleted file mode 100644 index 078cfac2b..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/MessageHashTest.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link MessageHash} - */ -public class MessageHashTest { - - @Test - public void testHashBasic() throws Exception { - String[] directives = new String[] { - "hash message1 SHA-384 true", - "hash message2 SHA-384 false", - }; - - List rows = Arrays.asList( - new Row("message1", "secret message.") - .add("message2", "This is a very secret message and a digest will be created.") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - } - - @Test(expected = RecipeException.class) - public void testBadAlgorithm() throws Exception { - String[] directives = new String[] { - "hash message1 SHA-385 true", - }; - - List rows = Arrays.asList( - new Row("message1", "This is a very secret message and a digest will be created.") - ); - - TestingRig.execute(directives, rows); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/ParseDateTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/ParseDateTest.java deleted file mode 100644 index a17383ecc..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/ParseDateTest.java +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.directives.parser.ParseDate; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.time.LocalDate; -import java.time.LocalTime; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.TimeUnit; - -/** - * Tests {@link ParseDate} - */ -public class ParseDateTest { - - @Test - public void testSimpleDateParserAndDiff() throws Exception { - String[] directives = new String[] { - "parse-as-simple-date date1 MM/dd/yyyy HH:mm", - "parse-as-simple-date date2 MM/dd/yyyy HH:mm", - "diff-date date1 date2 difference" - }; - - Row row1 = new Row(); - // 1 hour diff - row1.add("date1", "12/10/2016 07:45"); - row1.add("date2", "12/10/2016 06:45"); - - // 1 month and 1 second diff - Row row2 = new Row(); - row2.add("date1", "2/1/1990 12:01"); - row2.add("date2", "1/1/1990 12:00"); - - // no diff - Row row3 = new Row(); - row3.add("date1", "03/03/1998 2:02"); - row3.add("date2", "03/03/1998 2:02"); - - List rows = TestingRig.execute(directives, Arrays.asList(row1, row2, row3)); - - Assert.assertEquals(TimeUnit.HOURS.toMillis(1), rows.get(0).getValue("difference")); - Assert.assertEquals(2678460000L, rows.get(1).getValue("difference")); - Assert.assertEquals(0L, rows.get(2).getValue("difference")); - Assert.assertTrue(rows.size() == 3); - } - - @Test - public void testSimpleDateWithPatterns() throws Exception { - String[] directives = new String[] { - "parse-as-simple-date date1 MM/dd/yyyy", - "parse-as-simple-date date2 dd/MM/yyyy", - "parse-as-simple-date date3 MM-dd-yyyy", - "parse-as-simple-date date4 MM-dd-yy", - "parse-as-simple-date date5 yyyy-MM-dd", - "parse-as-simple-date date6 yyyy-MM-dd HH:mm:ss", - "parse-as-simple-date date7 MM-dd-yyyy 'at' HH:mm:ss z", - "parse-as-simple-date date8 dd/MM/yy HH:mm:ss", - "parse-as-simple-date date9 yyyy,MM.dd'T'HH:mm:ss.SSSZ", - "parse-as-simple-date date10 MM.dd.yyyy HH:mm:ss.SSS", - "parse-as-simple-date date11 EEE, d MMM yyyy HH:mm:ss", - "parse-as-simple-date date12 EEE, MMM d, ''yy", - "parse-as-simple-date date13 h:mm a", - "parse-as-simple-date date14 K:mm a, z", - "parse-as-simple-date date15 yyyy.MM.dd G 'at' HH:mm:ss z", - }; - - Row row1 = new Row(); - // MM/dd/yyyy - row1.add("date1", "12/10/2016"); - // dd/MM/yyyy - row1.add("date2", "10/12/2016"); - // MM-dd-yyyy - row1.add("date3", "12-10-2016"); - // MM-dd-yy - row1.add("date4", "12-10-16"); - // yyyy-MM-dd - row1.add("date5", "2016-12-10"); - // yyyy-MM-dd HH:mm:ss - row1.add("date6", "2016-12-10 06:45:11"); - // MM-dd-yyyy 'at' HH:mm:ss with timezone - row1.add("date7", "12-10-2016 at 06:45:11 PST"); - // dd/MM/yy HH:mm:ss - row1.add("date8", "10/12/2016 06:45:11"); - // yyyy,MM.dd'T'HH:mm:ss.SSS with RFC timezone - row1.add("date9", "2016,12.10T06:45:11.111-0800"); - // MM.dd.yyyy HH:mm:ss.SSS - row1.add("date10", "12.10.2016 06:45:11.111"); - // EEE, d MMM yyyy HH:mm:ss - row1.add("date11", "Sat, 10 Dec 2016 06:45:11"); - // EEE, MMM d, 'yy - row1.add("date12", "Sat, Dec 10, '16"); - // h:mm AM/PM - row1.add("date13", "06:45 PM"); - // H:mm with timezone - row1.add("date14", "06:45 PM, PST"); - // Custom - yyyy.MM.dd G 'at' HH:mm:ss z - row1.add("date15", "2016.12.10 AD at 06:45:11 PST"); - - List rows = TestingRig.execute(directives, Arrays.asList(row1)); - LocalDate localDate = LocalDate.of(2016, 12, 10); - LocalTime zeroTime = LocalTime.of(0, 0); - ZonedDateTime zonedDateZeroTime = ZonedDateTime.of(localDate, zeroTime, ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - - Assert.assertEquals(zonedDateZeroTime, rows.get(0).getValue("date1")); - Assert.assertEquals(zonedDateZeroTime, rows.get(0).getValue("date2")); - Assert.assertEquals(zonedDateZeroTime, rows.get(0).getValue("date3")); - Assert.assertEquals(zonedDateZeroTime, rows.get(0).getValue("date4")); - Assert.assertEquals(zonedDateZeroTime, rows.get(0).getValue("date5")); - - LocalTime localTime = LocalTime.of(6, 45, 11); - ZonedDateTime zonedDateTime = ZonedDateTime.of(localDate, localTime, ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - ZonedDateTime pstDateTime = ZonedDateTime.of(localDate, LocalTime.of(14, 45, 11), - ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - Assert.assertEquals(zonedDateTime, rows.get(0).getValue("date6")); - Assert.assertEquals(pstDateTime, rows.get(0).getValue("date7")); - Assert.assertEquals(zonedDateTime, rows.get(0).getValue("date8")); - Assert.assertEquals(pstDateTime.plusNanos(TimeUnit.SECONDS.toMicros(111)), rows.get(0).getValue("date9")); - Assert.assertEquals(zonedDateTime.plusNanos(TimeUnit.SECONDS.toMicros(111)), rows.get(0).getValue("date10")); - Assert.assertEquals(zonedDateTime, rows.get(0).getValue("date11")); - Assert.assertEquals(zonedDateZeroTime, rows.get(0).getValue("date12")); - Assert.assertEquals(ZonedDateTime.of(LocalDate.of(1970, 1, 1), LocalTime.of(18, 45), - ZoneId.ofOffset("UTC", ZoneOffset.UTC)), - rows.get(0).getValue("date13")); - Assert.assertEquals(ZonedDateTime.of(LocalDate.of(1970, 1, 2), LocalTime.of(2, 45), - ZoneId.ofOffset("UTC", ZoneOffset.UTC)), - rows.get(0).getValue("date14")); - Assert.assertEquals(pstDateTime, rows.get(0).getValue("date15")); - } - - @Test - public void testDateConversionToLong() throws Exception { - String[] directives = new String[] { - "parse-as-simple-date date yyyy-MM-dd'T'HH:mm:ss" - }; - - //2017-02-02T21:06:44Z - List rows = Arrays.asList( - new Row("date", "2017-02-02T21:06:44Z") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - } - - @Test - public void testDateParser() throws Exception { - String[] directives = new String[] { - "parse-as-date date US/Eastern", - "format-date date_1 MM/dd/yyyy HH:mm" - }; - - List rows = Arrays.asList( - new Row("date", "now"), - new Row("date", "today"), - new Row("date", "12/10/2016"), - new Row("date", "12/10/2016 06:45 AM"), - new Row("date", "september 7th 2016"), - new Row("date", "1485800109") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 6); - // TODO CDAP-14243 - add more tests once the issue with parser is fixed - } - - @Test - public void testFormatDate() throws Exception { - String[] directives = new String[] { - "parse-as-simple-date date1 MM/dd/yyyy", - "format-date date1 MM/dd/yyyy", - "parse-as-simple-date date2 dd/MM/yyyy", - "format-date date2 dd/MM/yyyy", - "parse-as-simple-date date3 MM-dd-yyyy", - "format-date date3 MM-dd-yyyy", - "parse-as-simple-date date4 MM-dd-yy", - "format-date date4 MM-dd-yy", - "parse-as-simple-date date5 yyyy-MM-dd", - "format-date date5 yyyy-MM-dd", - "parse-as-simple-date date6 yyyy-MM-dd HH:mm:ss", - "format-date date6 yyyy-MM-dd HH:mm:ss", - "parse-as-simple-date date7 MM-dd-yyyy 'at' HH:mm:ss z", - "format-date date7 MM-dd-yyyy 'at' HH:mm:ss z", - "parse-as-simple-date date8 dd/MM/yy HH:mm:ss", - "format-date date8 dd/MM/yy HH:mm:ss", - "parse-as-simple-date date9 yyyy,MM.dd'T'HH:mm:ss.SSSZ", - "format-date date9 yyyy,MM.dd'T'HH:mm:ss.SSSZ", - "parse-as-simple-date date10 MM.dd.yyyy HH:mm:ss.SSS", - "format-date date10 MM.dd.yyyy HH:mm:ss.SSS", - "parse-as-simple-date date11 EEE, d MMM yyyy HH:mm:ss", - "format-date date11 EEE, d MMM yyyy HH:mm:ss", - "parse-as-simple-date date12 EEE, MMM d, ''yy", - "format-date date12 EEE, MMM d, ''yy", - "parse-as-simple-date date15 yyyy.MM.dd G 'at' HH:mm:ss z", - "format-date date15 yyyy.MM.dd G 'at' HH:mm:ss z" - }; - - Row row1 = new Row(); - // MM/dd/yyyy - row1.add("date1", "12/10/2016"); - // dd/MM/yyyy - row1.add("date2", "10/12/2016"); - // MM-dd-yyyy - row1.add("date3", "12-10-2016"); - // MM-dd-yy - row1.add("date4", "12-10-16"); - // yyyy-MM-dd - row1.add("date5", "2016-12-10"); - // yyyy-MM-dd HH:mm:ss - row1.add("date6", "2016-12-10 06:45:11"); - // MM-dd-yyyy 'at' HH:mm:ss with timezone - row1.add("date7", "12-10-2016 at 06:45:11 PST"); - // dd/MM/yy HH:mm:ss - row1.add("date8", "10/12/2016 06:45:11"); - // yyyy,MM.dd'T'HH:mm:ss.SSS with RFC timezone - row1.add("date9", "2016,12.10T06:45:11.111-0800"); - // MM.dd.yyyy HH:mm:ss.SSS - row1.add("date10", "12.10.2016 06:45:11.111"); - // EEE, d MMM yyyy HH:mm:ss - row1.add("date11", "Sat, 10 Dec 2016 06:45:11"); - // EEE, MMM d, 'yy - row1.add("date12", "Sat, Dec 10, '16"); - // Custom - yyyy.MM.dd G 'at' HH:mm:ss z - row1.add("date15", "2016.12.10 AD at 06:45:11 PST"); - - List rows = TestingRig.execute(directives, Arrays.asList(row1)); - Assert.assertEquals("12/10/2016", rows.get(0).getValue("date1")); - Assert.assertEquals("10/12/2016", rows.get(0).getValue("date2")); - Assert.assertEquals("12-10-2016", rows.get(0).getValue("date3")); - Assert.assertEquals("12-10-16", rows.get(0).getValue("date4")); - Assert.assertEquals("2016-12-10", rows.get(0).getValue("date5")); - - Assert.assertEquals("2016-12-10 06:45:11", rows.get(0).getValue("date6")); - Assert.assertEquals("12-10-2016 at 14:45:11 UTC", rows.get(0).getValue("date7")); - Assert.assertEquals("10/12/16 06:45:11", rows.get(0).getValue("date8")); - Assert.assertEquals("2016,12.10T14:45:11.111+0000", rows.get(0).getValue("date9")); - Assert.assertEquals("12.10.2016 06:45:11.111", rows.get(0).getValue("date10")); - Assert.assertEquals("Sat, 10 Dec 2016 06:45:11", rows.get(0).getValue("date11")); - Assert.assertEquals("Sat, Dec 10, '16", rows.get(0).getValue("date12")); - Assert.assertEquals("2016.12.10 AD at 14:45:11 UTC", rows.get(0).getValue("date15")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/ParseTimestampTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/ParseTimestampTest.java deleted file mode 100644 index 7a8685af5..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/ParseTimestampTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.TimeUnit; - -public class ParseTimestampTest { - @Test - public void testParseTimestamp() throws Exception { - String[] directives = new String[] { - "parse-timestamp :date1", - "parse-timestamp :date2", - "parse-timestamp :date3", - "parse-timestamp :date4 'seconds'", - "parse-timestamp :date5 'milliseconds'", - "parse-timestamp :date6 'microseconds'" - }; - - Row row1 = new Row(); - row1.add("date1", 1536332271894L); - row1.add("date2", null); - row1.add("date3", "1536332271894"); - row1.add("date4", "1536332271"); - row1.add("date5", "1536332271894"); - row1.add("date6", "1536332271894123"); - - List rows = TestingRig.execute(directives, Arrays.asList(row1)); - ZonedDateTime dateTime = ZonedDateTime.of(2018, 9, 7, 14, 57, 51, - Math.toIntExact(TimeUnit.MILLISECONDS.toNanos(894)), - ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - Assert.assertEquals(dateTime, rows.get(0).getValue("date1")); - Assert.assertNull(rows.get(0).getValue("date2")); - Assert.assertEquals(dateTime, rows.get(0).getValue("date3")); - Assert.assertEquals(dateTime.minusNanos(TimeUnit.MILLISECONDS.toNanos(894)), rows.get(0).getValue("date4")); - Assert.assertEquals(dateTime, rows.get(0).getValue("date5")); - Assert.assertEquals(dateTime.plusNanos(TimeUnit.MILLISECONDS.toMicros(123)), rows.get(0).getValue("date6")); - } - - @Test(expected = RecipeException.class) - public void testInvalidTimestamp() throws Exception { - String[] directives = new String[] { - "parse-timestamp :date1 'nanoseconds'" - }; - - Row row1 = new Row(); - row1.add("date1", 1536332271894L); - - List rows = TestingRig.execute(directives, Arrays.asList(row1)); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/QuantizationTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/QuantizationTest.java deleted file mode 100644 index 40d1f26c1..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/QuantizationTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import com.google.common.collect.Range; -import com.google.common.collect.RangeMap; -import com.google.common.collect.TreeRangeMap; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Tests {@link Quantization} - */ -public class QuantizationTest { - @Test - public void testQuanitization() throws Exception { - String[] directives = new String[] { - "parse-as-csv __col ,", - "drop __col", - "set columns id,first,last,dob,email,age,hrlywage,address,city,state,country,zip", - "quantize hrlywage wagerange 0.0:20.0='LOW',21.0:75.0='MEDIUM',75.1:200.0='HIGH'", - "set column wagerange (wagerange == null) ? \"NOT FOUND\" : wagerange" - }; - - List rows = Arrays.asList( - new Row("__col", "1098,Root,Joltie,01/26/1956,root@joltie.io,32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1091,Root,Joltie,01/26/1956,root1@joltie.io,32,129.13,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1092,Root,Joltie,01/26/1956,root@mars.com,32,9.54,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1093,Root,Joltie,01/26/1956,root@foo.com,32,7.89,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1094,Root,Joltie,01/26/1956,windy@joltie.io,32,45.67,150 Mars Ave,Palo Alto,CA,USA,32826"), - new Row("__col", "1094,Root,Joltie,01/26/1956,windy@joltie.io,32,20.7,150 Mars Ave,Palo Alto,CA,USA,32826") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 6); - int low = 0, medium = 0, high = 0, notfound = 0; - for (Row row : rows) { - String v = (String) row.getValue("wagerange"); - if (v.equalsIgnoreCase("NOT FOUND")) { - notfound++; - } else if (v.equals("LOW")) { - low++; - } else if (v.equals("MEDIUM")) { - medium++; - } else if (v.equals("HIGH")) { - high++; - } - } - - Assert.assertEquals(3, low); - Assert.assertEquals(1, medium); - Assert.assertEquals(1, high); - Assert.assertEquals(1, notfound); - } - - @Test - public void testQuantizationRangeAndPattern() throws Exception { - RangeMap rangeMap = TreeRangeMap.create(); - rangeMap.put(Range.closed(0.1, 0.9), "A"); - rangeMap.put(Range.closed(2.0, 3.9), "B"); - rangeMap.put(Range.closed(4.0, 5.9), "C"); - String s = rangeMap.get(2.2); - Assert.assertEquals("B", s); - - Matcher m = Pattern.compile("([+-]?\\d+(?:\\.\\d+)?):([+-]?\\d+(?:\\.\\d+)?)=(.[^,]*)") - .matcher("0.9:2.1=Foo,2.2:3.4=9.2"); - RangeMap rm = TreeRangeMap.create(); - while (m.find()) { - String lower = m.group(1); - String upper = m.group(2); - String value = m.group(3); - rm.put(Range.closed(lower, upper), value); - } - Assert.assertEquals("[[0.9..2.1]=Foo, [2.2..3.4]=9.2]", rm.toString()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/RightTrimTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/RightTrimTest.java deleted file mode 100644 index 749ee3dd1..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/RightTrimTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link RightTrim} - */ -public class RightTrimTest { - - @Test - public void testSingleWordRightTrim() throws Exception { - String[] directives = new String[] { - "rtrim body", - }; - - List rows = Arrays.asList( - new Row("body", "TITLE"), - new Row("body", " TITLE"), - new Row("body", "TITLE "), - new Row("body", " TITLE "), - new Row("body", " TITLE ") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(5, rows.size()); - Assert.assertEquals("TITLE", rows.get(0).getValue("body")); - Assert.assertEquals(" TITLE", rows.get(1).getValue("body")); - Assert.assertEquals("TITLE", rows.get(2).getValue("body")); - Assert.assertEquals(" TITLE", rows.get(3).getValue("body")); - Assert.assertEquals(" TITLE", rows.get(4).getValue("body")); - } - - @Test - public void testSentenceRightTrim() throws Exception { - String[] directives = new String[] { - "rtrim body", - }; - - List rows = Arrays.asList( - new Row("body", "TITLE IS TITLE"), - new Row("body", " TITLE IS TITLE"), - new Row("body", "TITLE IS TITLE "), - new Row("body", " TITLE IS TITLE "), - new Row("body", " TITLE IS TITLE ") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(5, rows.size()); - Assert.assertEquals("TITLE IS TITLE", rows.get(0).getValue("body")); - Assert.assertEquals(" TITLE IS TITLE", rows.get(1).getValue("body")); - Assert.assertEquals("TITLE IS TITLE", rows.get(2).getValue("body")); - Assert.assertEquals(" TITLE IS TITLE", rows.get(3).getValue("body")); - Assert.assertEquals(" TITLE IS TITLE", rows.get(4).getValue("body")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/SplitEmailTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/SplitEmailTest.java deleted file mode 100644 index f3dbd8012..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/SplitEmailTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link SplitEmail} - */ -public class SplitEmailTest { - @Test - public void testSplitEmail() throws Exception { - String[] directives = new String[] { - "split-email email", - }; - - List rows = Arrays.asList( - new Row("email", "root@cask.co"), - new Row("email", "joltie.xxx@gmail.com"), - new Row("email", "joltie_xxx@hotmail.com"), - new Row("email", "joltie.\"@.\"root.\"@\".@yahoo.com"), - new Row("email", "Joltie, Root "), - new Row("email", "Joltie,Root"), - new Row("email", "Joltie,Root rows = Arrays.asList( - new Row("email", new Integer(1)) // Injecting bad type. - ); - - TestingRig.execute(directives, rows); - } - - @Test - public void testBadEmailId() throws Exception { - String[] directives = new String[] { - "split-email email", - }; - - List rows = Arrays.asList( - new Row("email", "root@hotmail@com"), - new Row("email", "root.hotmail.com"), - new Row("email", ""), - new Row("email", null) - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 4); - - Assert.assertNotNull(rows.get(0).getValue("email_account")); - Assert.assertNotNull(rows.get(0).getValue("email_domain")); - Assert.assertNull(rows.get(1).getValue("email_account")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/SplitURLTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/SplitURLTest.java deleted file mode 100644 index 5bffeabfe..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/SplitURLTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Test {@link SplitURL} - */ -public class SplitURLTest { - - @Test - public void testBasicURLWorking() throws Exception { - String[] directives = new String[] { - "split-url url", - }; - - List rows = Arrays.asList( - new Row("url", "http://example.com:80/docs/books/tutorial/index.html?name=networking#DOWNLOADING") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(80, rows.get(0).getValue("url_port")); - Assert.assertEquals("example.com", rows.get(0).getValue("url_host")); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/SwapTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/SwapTest.java deleted file mode 100644 index e7939e2ae..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/SwapTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.directives.column.Swap; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.util.Collections; -import java.util.List; - -/** - * Tests {@link Swap} - */ -public class SwapTest { - - @Test - public void testSwap() throws Exception { - String[] directives = new String[] { - "swap a b", - }; - - List rows = Collections.singletonList( - new Row("a", 1).add("b", "sample string") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(1, rows.get(0).getValue("b")); - Assert.assertEquals("sample string", rows.get(0).getValue("a")); - } - - @Test(expected = RecipeException.class) - public void testSwapFeildNotFound() throws Exception { - String[] directives = new String[] { - "swap a b", - }; - - List rows = Collections.singletonList( - new Row("a", 1).add("c", "sample string") - ); - - TestingRig.execute(directives, rows); - } - - @Test - public void testGetOutputSchemaForSwappedColumns() throws Exception { - String[] directives = new String[] { - "swap :col_A :col_B", - }; - List rows = Collections.singletonList( - new Row("col_A", 1).add("col_B", new BigDecimal("143235.016")) - ); - Schema inputSchema = Schema.recordOf( - "inputSchema", - Schema.Field.of("col_A", Schema.of(Schema.Type.INT)), - Schema.Field.of("col_B", Schema.decimalOf(10, 3)) - ); - Schema expectedSchema = Schema.recordOf( - "expectedSchema", - Schema.Field.of("col_B", Schema.of(Schema.Type.INT)), - Schema.Field.of("col_A", Schema.decimalOf(10, 3)) - ); - - Schema outputSchema = TestingRig.executeAndGetSchema(directives, rows, inputSchema); - - Assert.assertEquals(outputSchema.getFields().size(), expectedSchema.getFields().size()); - for (Schema.Field expectedField : expectedSchema.getFields()) { - Assert.assertEquals( - outputSchema.getField(expectedField.getName()).getSchema().getType(), expectedField.getSchema().getType() - ); - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/TextDistanceMeasureTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/TextDistanceMeasureTest.java deleted file mode 100644 index 778f27dec..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/TextDistanceMeasureTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link TextDistanceMeasure} - */ -public class TextDistanceMeasureTest { - private static final List ROWS = Arrays.asList( - // Correct Row. - new Row("string1", "This is an example for distance measure.").add("string2", "This test is made of works that " + - "are similar. This is an example for distance measure."), - - // Row that has one string empty. - new Row("string1", "This is an example for distance measure.").add("string2", ""), - - // Row that has one string as different type. - new Row("string1", "This is an example for distance measure.").add("string2", 1L), - - // Row that has only one column. - new Row("string1", "This is an example for distance measure.") - ); - - - @Test - public void testTextDistanceMeasure() throws Exception { - String[] directives = new String[] { - "text-distance cosine string1 string2 cosine", - "text-distance euclidean string1 string2 euclidean", - "text-distance block-distance string1 string2 block_distance", - "text-distance identity string1 string2 identity", - "text-distance block string1 string2 block", - "text-distance dice string1 string2 dice", - "text-distance jaro string1 string2 jaro", - "text-distance longest-common-subsequence string1 string2 lcs1", - "text-distance longest-common-substring string1 string2 lcs2", - "text-distance overlap-cofficient string1 string2 oc", - "text-distance damerau-levenshtein string1 string2 dl", - "text-distance simon-white string1 string2 sw", - "text-distance levenshtein string1 string2 levenshtein", - }; - - List results = TestingRig.execute(directives, ROWS); - Assert.assertTrue(results.size() == 4); - Assert.assertEquals(15, results.get(0).width()); - Assert.assertEquals(15, results.get(1).width()); - Assert.assertEquals(15, results.get(2).width()); - Assert.assertEquals(14, results.get(3).width()); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/TextMetricMeasureTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/TextMetricMeasureTest.java deleted file mode 100644 index 4b45bdcf7..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/TextMetricMeasureTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link TextMetricMeasure} - */ -public class TextMetricMeasureTest { - private static final List ROWS = Arrays.asList( - // Correct Row. - new Row("string1", "This is an example for distance measure.").add("string2", "This test is made of works that " + - "are similar. This is an example for distance measure."), - - // Row that has one string empty. - new Row("string1", "This is an example for distance measure.").add("string2", ""), - - // Row that has one string as different type. - new Row("string1", "This is an example for distance measure.").add("string2", 1L), - - // Row that has only one column. - new Row("string1", "This is an example for distance measure.") - ); - - - @Test - public void testTextDistanceMeasure() throws Exception { - String[] directives = new String[] { - "text-metric cosine string1 string2 cosine", - "text-metric euclidean string1 string2 euclidean", - "text-metric block-distance string1 string2 block_distance", - "text-metric identity string1 string2 identity", - "text-metric block string1 string2 block", - "text-metric dice string1 string2 dice", - "text-metric jaro string1 string2 jaro", - "text-metric longest-common-subsequence string1 string2 lcs1", - "text-metric longest-common-substring string1 string2 lcs2", - "text-metric overlap-cofficient string1 string2 oc", - "text-metric damerau-levenshtein string1 string2 dl", - "text-metric simon-white string1 string2 sw", - "text-metric levenshtein string1 string2 levenshtein", - }; - - List results = TestingRig.execute(directives, ROWS); - Assert.assertTrue(results.size() == 4); - Assert.assertEquals(15, results.get(0).width()); - Assert.assertEquals(15, results.get(1).width()); - Assert.assertEquals(15, results.get(2).width()); - Assert.assertEquals(14, results.get(3).width()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/TitleCaseTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/TitleCaseTest.java deleted file mode 100644 index f9e671954..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/TitleCaseTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link TitleCase} - */ -public class TitleCaseTest { - - @Test - public void testSingleWordCasing() throws Exception { - String[] directives = new String[] { - "titlecase body", - }; - - List rows = Arrays.asList( - new Row("body", "TITLE"), - new Row("body", "tiTLE"), - new Row("body", "title"), - new Row("body", "TitlE") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(4, rows.size()); - Assert.assertEquals("Title", rows.get(0).getValue("body")); - Assert.assertEquals("Title", rows.get(1).getValue("body")); - Assert.assertEquals("Title", rows.get(2).getValue("body")); - Assert.assertEquals("Title", rows.get(3).getValue("body")); - } - - @Test - public void testSentencesCasing() throws Exception { - String[] directives = new String[] { - "titlecase body", - }; - - List rows = Arrays.asList( - new Row("body", "TITLE is TITLE"), - new Row("body", "tiTLE IS tItle"), - new Row("body", "title is title"), - new Row("body", "TitlE Is TiTLE") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(4, rows.size()); - Assert.assertEquals("Title Is Title", rows.get(0).getValue("body")); - Assert.assertEquals("Title Is Title", rows.get(1).getValue("body")); - Assert.assertEquals("Title Is Title", rows.get(2).getValue("body")); - Assert.assertEquals("Title Is Title", rows.get(3).getValue("body")); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/TrimTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/TrimTest.java deleted file mode 100644 index 1fddd69ac..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/TrimTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link Trim} - */ -public class TrimTest { - - @Test - public void testSingleWordTrim() throws Exception { - String expected = "TITLE"; - - String[] directives = new String[] { - "trim body", - }; - - List rows = Arrays.asList( - new Row("body", expected), - new Row("body", " " + expected), - new Row("body", expected + " "), - new Row("body", " " + expected + " "), - new Row("body", " " + expected + " "), - new Row("body", "\t\r" + expected + "\r\t") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(rows.size(), rows.size()); - for (int i = 0; i < rows.size(); ++i) { - Assert.assertEquals(expected, rows.get(i).getValue("body")); - } - } - - @Test - public void testSentenceTrim() throws Exception { - String expected = "TITLE IS TITLE"; - - String[] directives = new String[] { - "trim body", - }; - - List rows = Arrays.asList( - new Row("body", "TITLE IS TITLE"), - new Row("body", " TITLE IS TITLE"), - new Row("body", "TITLE IS TITLE "), - new Row("body", " TITLE IS TITLE "), - new Row("body", " TITLE IS TITLE "), - new Row("body", "\t TITLE IS TITLE \t"), - new Row("body", "\t" + expected), - new Row("body", expected + "\t"), - new Row("body", '\u0009' + expected), - new Row("body", "\r" + expected), - new Row("body", expected + "\r"), - new Row("body", '\u2004' + expected), - new Row("body", expected + '\u2004'), - new Row("body", '\u2005' + expected), - new Row("body", expected + '\u2005'), - new Row("body", '\u2006' + expected), - new Row("body", expected + '\u2006'), - new Row("body", '\u3000' + expected), - new Row("body", '\t' + expected + '\u3000' + '\u3000' + '\t' + '\r') - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(rows.size(), rows.size()); - Assert.assertEquals("TITLE IS TITLE", rows.get(0).getValue("body")); - Assert.assertEquals("TITLE IS TITLE", rows.get(1).getValue("body")); - Assert.assertEquals("TITLE IS TITLE", rows.get(2).getValue("body")); - Assert.assertEquals("TITLE IS TITLE", rows.get(3).getValue("body")); - Assert.assertEquals("TITLE IS TITLE", rows.get(4).getValue("body")); - for (int i = 5; i < rows.size(); ++i) { - Assert.assertEquals(expected, rows.get(i).getValue("body")); - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/UpperTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/UpperTest.java deleted file mode 100644 index e531c441c..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/UpperTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link Upper} - */ -public class UpperTest { - - @Test - public void testSingleWordLowerCasing() throws Exception { - String[] directives = new String[] { - "uppercase body", - }; - - List rows = Arrays.asList( - new Row("body", "TITLE"), - new Row("body", "tiTLE"), - new Row("body", "title"), - new Row("body", "TitlE") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals(4, rows.size()); - Assert.assertEquals("TITLE", rows.get(0).getValue("body")); - Assert.assertEquals("TITLE", rows.get(1).getValue("body")); - Assert.assertEquals("TITLE", rows.get(2).getValue("body")); - Assert.assertEquals("TITLE", rows.get(3).getValue("body")); - } - - @Test - public void testSentenceLowercasing() throws Exception { - String[] directives = new String[] { - "uppercase body", - }; - - List rows = Arrays.asList( - new Row("body", "TITLE is TITLE"), - new Row("body", "tiTLE IS tItle"), - new Row("body", "title is title"), - new Row("body", "TitlE Is TiTLE") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(4, rows.size()); - Assert.assertEquals("TITLE IS TITLE", rows.get(0).getValue("body")); - Assert.assertEquals("TITLE IS TITLE", rows.get(1).getValue("body")); - Assert.assertEquals("TITLE IS TITLE", rows.get(2).getValue("body")); - Assert.assertEquals("TITLE IS TITLE", rows.get(3).getValue("body")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/transformation/UrlEncodeTest.java b/wrangler-core/src/test/java/io/cdap/directives/transformation/UrlEncodeTest.java deleted file mode 100644 index 71b340e1b..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/transformation/UrlEncodeTest.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.transformation; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link UrlEncode} - */ -public class UrlEncodeTest { - - @Test - public void testUrlEncoding() throws Exception { - String[] directives = new String[] { - "url-encode url", - }; - - List rows = Arrays.asList( - new Row("url", "http://www.yahoo.com?a=b c&b=ab&xyz=1") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("http%3A%2F%2Fwww.yahoo.com%3Fa%3Db+c%26b%3Dab%26xyz%3D1", rows.get(0).getValue("url")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/validation/ValidateStandardTest.java b/wrangler-core/src/test/java/io/cdap/directives/validation/ValidateStandardTest.java deleted file mode 100644 index fac05025e..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/validation/ValidateStandardTest.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.validation; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.utils.Manifest; -import io.cdap.wrangler.utils.Manifest.Standard; -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.io.IOUtils; -import org.junit.Test; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.file.Paths; -import java.security.CodeSource; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.Arrays; -import java.util.Formatter; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Tests for ValidateStandard and the manifest and schemas in the package. - */ -public class ValidateStandardTest { - - private static Map getSpecsInArchive() - throws IOException, NoSuchAlgorithmException { - Map schemas = new HashMap<>(); - CodeSource src = ValidateStandard.class.getProtectionDomain().getCodeSource(); - if (src != null) { - File schemasRoot = - Paths.get(src.getLocation().getPath(), ValidateStandard.SCHEMAS_RESOURCE_PATH).toFile(); - - if (!schemasRoot.isDirectory()) { - throw new IOException( - String.format("Schemas root %s was not a directory", schemasRoot.getPath())); - } - - for (File f : schemasRoot.listFiles()) { - if (f.toPath().endsWith(ValidateStandard.MANIFEST_PATH)) { - continue; - } - - String hash = calcHash(new FileInputStream(f)); - schemas.put( - FilenameUtils.getBaseName(f.getName()), - new Standard(hash, FilenameUtils.getExtension(f.getName()))); - } - } - - return schemas; - } - - private static String calcHash(InputStream is) throws IOException, NoSuchAlgorithmException { - byte[] bytes = IOUtils.toByteArray(is); - MessageDigest d = MessageDigest.getInstance("SHA-256"); - byte[] hash = d.digest(bytes); - - Formatter f = new Formatter(); - for (byte b : hash) { - f.format("%02x", b); - } - return f.toString(); - } - - private static InputStream readResource(String name) throws IOException { - InputStream resourceStream = ValidateStandard.class.getClassLoader().getResourceAsStream(name); - - if (resourceStream == null) { - throw new IOException(String.format("Can't read/find resource %s", name)); - } - - return resourceStream; - } - - @Test - public void testValidation() throws Exception { - JsonObject badJson = - new Gson() - .fromJson("{\"resourceType\": \"Patient\", \"active\": \"meow\"}", JsonObject.class); - JsonObject goodJson = - new Gson() - .fromJson( - "{\"resourceType\": \"Patient\", \"active\": true, \"gender\": \"female\"}", - JsonObject.class); - - String[] directives = new String[]{ - "validate-standard :col1 hl7-fhir-r4", - }; - - List rows = Arrays.asList( - new Row("col1", badJson), - new Row("col1", goodJson) - ); - - List actual = TestingRig.execute(directives, rows); - - assertEquals(1, actual.size()); - assertEquals(goodJson, actual.get(0).getValue(0)); - } - - /** - * This test verifies that the manifest in the resources matches up with both the actual schemas in the resources as - * well as the implementations provided to handle those schemas. - */ - @Test - public void verifyManifest() throws Exception { - InputStream manifestStream = readResource(ValidateStandard.MANIFEST_PATH); - Manifest manifest = - new Gson().getAdapter(Manifest.class).fromJson(new InputStreamReader(manifestStream)); - - Map declaredSpecs = manifest.getStandards(); - Map actualSpecs = getSpecsInArchive(); - - assertEquals( - "Manifest contains different number of specs than there are in the artifact", - declaredSpecs.size(), - actualSpecs.size()); - - for (String spec : declaredSpecs.keySet()) { - assertTrue( - String.format("Manifest had spec %s but the artifact did not", spec), - actualSpecs.containsKey(spec)); - - Standard declared = declaredSpecs.get(spec); - Standard actual = actualSpecs.get(spec); - - assertEquals( - String.format( - "Declared standard %s did not match actual %s", - declared.toString(), actual.toString()), - declared, - actual); - - assertTrue( - String.format( - "Standard %s does not have a handler/factory registered in %s", - spec, ValidateStandard.class.getName()), - ValidateStandard.FORMAT_TO_FACTORY.containsKey(actual.getFormat())); - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/validation/conformers/JsonConformerTest.java b/wrangler-core/src/test/java/io/cdap/directives/validation/conformers/JsonConformerTest.java deleted file mode 100644 index f3bdca06c..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/validation/conformers/JsonConformerTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.validation.conformers; - -import com.google.common.collect.Lists; -import io.cdap.directives.validation.ConformanceIssue; -import junitparams.JUnitParamsRunner; -import junitparams.Parameters; -import org.everit.json.schema.ValidationException; -import org.json.JSONException; -import org.json.JSONObject; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.Assert.assertArrayEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -/** - * Tests JsonConformer. This does not test the checkConformance method as that simply delgates to the validator library - * which has its own tests. - */ -@RunWith(JUnitParamsRunner.class) -public class JsonConformerTest { - - @Parameters - private static Object[] convertValidationException_producesCorrectIssuesSummary_Parameters() - throws JSONException { - return new Object[]{ - new Object[]{ - "single (trivial) root exception", - newValidationException("#", "#", "Oops"), - Arrays.asList(new ConformanceIssue("#", "#", "{\"details\":\"here\"}")) - }, - new Object[]{ - "single (non-trivial) exception", - newValidationException( - "#", "#", "Root oops", newValidationException("#/child", "#/child", "Child oops")), - Arrays.asList(new ConformanceIssue("#/child", "#/child", "Child oops")) - }, - new Object[]{ - "single (non-trivial) exception, along with root", - newValidationException( - "#", - "#", - "Root oops", - newValidationException("#/child", "#/child", "Child oops"), - newValidationException("#", "#", "Root oops")), - Arrays.asList(new ConformanceIssue("#/child", "#/child", "Child oops")) - }, - new Object[]{ - "multiple (non-trivial) exceptions", - newValidationException( - "#", - "#", - "Root oops", - newValidationException("#/child", "#/child", "Child oops"), - newValidationException("#/kid", "#/kid", "Kid oops"), - newValidationException("#/moo", "#/moo", "Moo oops")), - Arrays.asList( - new ConformanceIssue("#/child", "#/child", "Child oops"), - new ConformanceIssue("#/kid", "#/kid", "Kid oops"), - new ConformanceIssue("#/moo", "#/moo", "Moo oops")) - }, - new Object[]{ - "nested exceptions", - newValidationException( - "#", - "#", - "Root oops", - newValidationException( - "#/a", - "#/a", - "a oops", - newValidationException( - "#/b", - "#/b", - "b oops", - newValidationException("#/c", "#/c", "c oops"), - newValidationException("#/d", "#/d", "d oops")), - newValidationException( - "#/e", - "#/e", - "e oops", - newValidationException("#/f", "#/f", "f oops"), - newValidationException("#/g", "#/g", "g oops"))), - newValidationException("#/h", "#/h", "h oops")), - Arrays.asList( - new ConformanceIssue("#/a -> #/b -> #/c", "#/c", "c oops"), - new ConformanceIssue("#/a -> #/b -> #/d", "#/d", "d oops"), - new ConformanceIssue("#/a -> #/e -> #/f", "#/f", "f oops"), - new ConformanceIssue("#/a -> #/e -> #/g", "#/g", "g oops"), - new ConformanceIssue("#/h", "#/h", "h oops")) - }, - }; - } - - /** - * Utility method for creating ValidationExceptions without access to the proper constructor. - */ - private static ValidationException newValidationException( - String schemaLocation, String dataLocation, String message, ValidationException... causes) - throws JSONException { - ValidationException m = mock(ValidationException.class); - - when(m.getSchemaLocation()).thenReturn(schemaLocation); - when(m.getPointerToViolation()).thenReturn(dataLocation); - when(m.getMessage()).thenReturn(message); - when(m.getCausingExceptions()).thenReturn(Lists.newArrayList(causes)); - when(m.toJSON()).thenReturn(new JSONObject("{\"details\":\"here\"}")); - - return m; - } - - @Test - @Parameters(method = "convertValidationException_producesCorrectIssuesSummary_Parameters") - public void convertValidationException_producesCorrectIssuesSummary( - String name, ValidationException input, List want) { - List got = JsonConformer.convertValidationException(input); - assertArrayEquals(want.toArray(new ConformanceIssue[0]), got.toArray(new ConformanceIssue[0])); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/writer/WriteAsCSVTest.java b/wrangler-core/src/test/java/io/cdap/directives/writer/WriteAsCSVTest.java deleted file mode 100644 index 8443415f6..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/writer/WriteAsCSVTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.writer; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.json.JSONObject; -import org.junit.Assert; -import org.junit.Test; -import org.simmetrics.StringMetric; -import org.simmetrics.metrics.StringMetrics; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link WriteAsCSV} - */ -public class WriteAsCSVTest { - - @Test - public void testWriteAsCSV() throws Exception { - String[] directives = new String[]{ - "write-as-csv test", - }; - - JSONObject o = new JSONObject(); - o.put("a", 1); - o.put("b", "2"); - List rows = Arrays.asList( - new Row("url", "http://www.yahoo.com?a=b c&b=ab&xyz=1") - .add("o", o) - .add("i1", new Integer(1)) - .add("i2", new Double(1.8f)) - ); - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - StringMetric metric = StringMetrics.euclideanDistance(); - - // Due to double, the string comparision might not be appropriate. - float value = metric.compare("http://www.yahoo.com?a=b c&b=ab&xyz=1,\"{\"\"b\"\":\"\"2\"\",\"\"a\"\":1}\"," + - "1,1.7999999523162842", (String) rows.get(0).getValue(4)); - Assert.assertTrue(value > 0.4); - } - - @Test - public void testExample() throws Exception { - String[] directives = new String[]{ - "write-as-csv body", - }; - - List rows = Arrays.asList( - new Row("int", 1).add("string", "this is, string") - ); - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("1,\"this is, string\"", rows.get(0).getValue(2)); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/writer/WriteAsJsonMapTest.java b/wrangler-core/src/test/java/io/cdap/directives/writer/WriteAsJsonMapTest.java deleted file mode 100644 index 4729fa0cb..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/writer/WriteAsJsonMapTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.writer; - -import com.google.common.collect.ImmutableMap; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import io.cdap.cdap.internal.guava.reflect.TypeToken; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.json.JSONObject; -import org.junit.Assert; -import org.junit.Test; - -import java.lang.reflect.Type; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -/** - * Tests {@link WriteAsJsonMap} - */ -public class WriteAsJsonMapTest { - - private static final Gson GSON = new Gson(); - - @Test - public void testWriteToJson() throws Exception { - String[] directives = new String[] { - "write-as-json-map test", - "keep test" - }; - - JSONObject o = new JSONObject(); - o.put("a", 1); - o.put("b", "2"); - String url = "http://www.yahoo.com?a=b c&b=ab&xyz=1"; - List rows = Arrays.asList( - new Row().add("int", 1).add("string", "this is string"), - new Row("url", url) - .add("o", o) - .add("i1", 1) - .add("i2", (double) 1.8f) - ); - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 2); - Type stringStringMapType = new TypeToken>() { }.getType(); - Map map = GSON.fromJson((String) rows.get(0).getValue("test"), stringStringMapType); - Assert.assertEquals(ImmutableMap.of("string", "this is string", "int", "1"), map); - - JsonObject jsonObject = new JsonParser().parse((String) rows.get(1).getValue("test")).getAsJsonObject(); - Assert.assertEquals(1, jsonObject.get("i1").getAsInt()); - - Assert.assertEquals(1.8f, jsonObject.get("i2").getAsFloat(), 0.001); - Assert.assertEquals(url, jsonObject.get("url").getAsString()); - Assert.assertEquals(GSON.toJson(o), jsonObject.get("o").toString()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/directives/writer/WriteAsJsonObjectTest.java b/wrangler-core/src/test/java/io/cdap/directives/writer/WriteAsJsonObjectTest.java deleted file mode 100644 index f6a4182d0..000000000 --- a/wrangler-core/src/test/java/io/cdap/directives/writer/WriteAsJsonObjectTest.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.directives.writer; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link WriteAsJsonObject}. - */ -public class WriteAsJsonObjectTest { - private static final String EVENT = " {\n" + - " \t\"fname\" : \"root\",\n" + - " \t\"lname\" : \"joltie\",\n" + - " \t\"age\" : 28,\n" + - " \t\"height\" : 5.9,\n" + - " \t\"weight\" : 178,\n" + - " \t\"address\" : \"Super Mars, Mars Ave, Mars, 8999\",\n" + - " \t\"latitude\" : -122.43345423,\n" + - " \t\"longitude\" : 37.234424223\n" + - " }"; - - @Test - public void testCreatingJSONObject() throws Exception { - String[] recipe = new String[] { - "parse-as-json event", - "columns-replace s/event_//", - "write-as-json-object coordinates latitude,longitude", - "keep coordinates", - "write-as-json-map location", - "keep location" - }; - - List rows = Arrays.asList( - new Row("event", EVENT) - ); - - rows = TestingRig.execute(recipe, rows); - - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("{\"coordinates\":{\"latitude\":-122.43345423,\"longitude\":37.234424223}}", - rows.get(0).getValue("location")); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/functions/DDLTest.java b/wrangler-core/src/test/java/io/cdap/functions/DDLTest.java deleted file mode 100644 index 8fcab7c32..000000000 --- a/wrangler-core/src/test/java/io/cdap/functions/DDLTest.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Lists; -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.schema.Schema; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Map; - -/** - * Tests {@link DDL} - */ -public class DDLTest { - @Test - public void testGetRecursiveRecord() { - Schema inner2 = Schema.recordOf("inner2", - Schema.Field.of("x", Schema.of(Schema.Type.STRING)), - Schema.Field.of("y", Schema.of(Schema.Type.INT)), - Schema.Field.of("z", Schema.arrayOf(Schema.of(Schema.Type.INT)))); - Schema inner1 = Schema.recordOf("inner1", - Schema.Field.of("rec2", Schema.arrayOf(Schema.nullableOf(inner2))), - Schema.Field.of("s", Schema.of(Schema.Type.STRING)), - Schema.Field.of("l", Schema.of(Schema.Type.LONG)), - Schema.Field.of("m", Schema.mapOf(Schema.of(Schema.Type.STRING), - Schema.of(Schema.Type.INT)))); - Schema nestedSchema = Schema.recordOf( - "nested", - Schema.Field.of("rec1", inner1), - Schema.Field.of("z", Schema.of(Schema.Type.BOOLEAN)), - Schema.Field.of("a", Schema.arrayOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("m", Schema.mapOf(Schema.nullableOf(Schema.of(Schema.Type.STRING)), - Schema.nullableOf(inner2)))); - - StructuredRecord record2 = StructuredRecord.builder(inner2) - .set("x", "str2") - .set("y", 5) - .set("z", ImmutableList.of(0, 1, 2, 3)) - .build(); - StructuredRecord record1 = StructuredRecord.builder(inner1) - .set("s", "str1") - .set("l", 3L) - .set("rec2", Lists.newArrayList(null, record2)) - .set("m", ImmutableMap.of("a", 1, "b", 2)) - .build(); - StructuredRecord nestedRecord = StructuredRecord.builder(nestedSchema) - .set("rec1", record1) - .set("z", true) - .set("a", ImmutableList.of("a", "b", "c")) - .set("m", ImmutableMap.of("rec2", record2)) - .build(); - - Assert.assertEquals(inner1, DDL.select(nestedSchema, "rec1")); - Assert.assertEquals(record1, DDL.select(nestedRecord, "rec1")); - - Assert.assertEquals(Schema.of(Schema.Type.BOOLEAN), DDL.select(nestedSchema, "z")); - Assert.assertTrue((boolean) DDL.select(nestedRecord, "z")); - - Assert.assertEquals(Schema.arrayOf(Schema.of(Schema.Type.STRING)), DDL.select(nestedSchema, "a")); - - Assert.assertEquals(Schema.mapOf(Schema.nullableOf(Schema.of(Schema.Type.STRING)), - Schema.nullableOf(inner2)), - DDL.select(nestedSchema, "m")); - Assert.assertEquals(nestedRecord.>get("m"), DDL.select(nestedRecord, "m")); - Assert.assertEquals(Schema.nullableOf(inner2), DDL.select(nestedSchema, "m[rec2]")); - - Assert.assertEquals(Schema.of(Schema.Type.STRING), DDL.select(nestedSchema, "a[0]")); - Assert.assertEquals("a", DDL.select(nestedRecord, "a[0]")); - Assert.assertEquals("b", DDL.select(nestedRecord, "a[1]")); - Assert.assertEquals("c", DDL.select(nestedRecord, "a[2]")); - - Assert.assertEquals(Schema.of(Schema.Type.STRING), DDL.select(nestedSchema, "rec1.s")); - Assert.assertEquals("str1", DDL.select(nestedRecord, "rec1.s")); - - Assert.assertEquals(Schema.of(Schema.Type.LONG), DDL.select(nestedSchema, "rec1.l")); - Assert.assertEquals(3L, DDL.select(nestedRecord, "rec1.l").longValue()); - - Assert.assertEquals(Schema.arrayOf(Schema.nullableOf(inner2)), DDL.select(nestedSchema, "rec1.rec2")); - - Assert.assertEquals(Schema.mapOf(Schema.of(Schema.Type.STRING), - Schema.of(Schema.Type.INT)), - DDL.select(nestedSchema, "rec1.m")); - Assert.assertEquals(Schema.of(Schema.Type.INT), DDL.select(nestedSchema, "rec1.m[a]")); - Assert.assertEquals(1, DDL.select(nestedRecord, "rec1.m[a]").intValue()); - Assert.assertEquals(2, DDL.select(nestedRecord, "rec1.m[b]").intValue()); - - Assert.assertEquals(Schema.nullableOf(inner2), DDL.select(nestedSchema, "rec1.rec2[0]")); - Assert.assertNull(DDL.select(nestedRecord, "rec1.rec2[0]")); - Assert.assertEquals(record2, DDL.select(nestedRecord, "rec1.rec2[1]")); - Assert.assertEquals(record2, DDL.select(nestedRecord, "m[rec2]")); - - Assert.assertEquals(Schema.of(Schema.Type.STRING), DDL.select(nestedSchema, "rec1.rec2[1].x")); - Assert.assertEquals(Schema.of(Schema.Type.STRING), DDL.select(nestedSchema, "m[rec2].x")); - Assert.assertEquals("str2", DDL.select(nestedRecord, "rec1.rec2[1].x")); - Assert.assertEquals("str2", DDL.select(nestedRecord, "m[rec2].x")); - - Assert.assertEquals(Schema.of(Schema.Type.INT), DDL.select(nestedSchema, "rec1.rec2[1].y")); - Assert.assertEquals(Schema.of(Schema.Type.INT), DDL.select(nestedSchema, "m[rec2].y")); - Assert.assertEquals(5, DDL.select(nestedRecord, "rec1.rec2[1].y").intValue()); - Assert.assertEquals(5, DDL.select(nestedRecord, "m[rec2].y").intValue()); - - Assert.assertEquals(Schema.arrayOf(Schema.of(Schema.Type.INT)), DDL.select(nestedSchema, "rec1.rec2[1].z")); - Assert.assertEquals(Schema.arrayOf(Schema.of(Schema.Type.INT)), DDL.select(nestedSchema, "m[rec2].z")); - - Assert.assertEquals(Schema.of(Schema.Type.INT), DDL.select(nestedSchema, "rec1.rec2[1].z[0]")); - Assert.assertEquals(Schema.of(Schema.Type.INT), DDL.select(nestedSchema, "m[rec2].z[0]")); - Assert.assertEquals(0, DDL.select(nestedRecord, "rec1.rec2[1].z[0]").intValue()); - Assert.assertEquals(1, DDL.select(nestedRecord, "rec1.rec2[1].z[1]").intValue()); - Assert.assertEquals(2, DDL.select(nestedRecord, "rec1.rec2[1].z[2]").intValue()); - Assert.assertEquals(3, DDL.select(nestedRecord, "rec1.rec2[1].z[3]").intValue()); - Assert.assertEquals(0, DDL.select(nestedRecord, "m[rec2].z[0]").intValue()); - Assert.assertEquals(1, DDL.select(nestedRecord, "m[rec2].z[1]").intValue()); - Assert.assertEquals(2, DDL.select(nestedRecord, "m[rec2].z[2]").intValue()); - Assert.assertEquals(3, DDL.select(nestedRecord, "m[rec2].z[3]").intValue()); - - Schema newSchema = DDL.drop(nestedSchema, "rec1.rec2[0].z"); - newSchema = DDL.drop(newSchema, "rec1.rec2[0].x"); - newSchema = DDL.drop(newSchema, "rec1.m"); - newSchema = DDL.drop(newSchema, "rec1.l"); - newSchema = DDL.drop(newSchema, "m"); - newSchema = DDL.drop(newSchema, "a"); - - Schema inner2New = Schema.recordOf("inner2", - Schema.Field.of("y", Schema.of(Schema.Type.INT))); - Schema inner1New = Schema.recordOf("inner1", - Schema.Field.of("rec2", Schema.arrayOf(Schema.nullableOf(inner2New))), - Schema.Field.of("s", Schema.of(Schema.Type.STRING))); - Schema nestedSchemaNew = Schema.recordOf( - "nested", - Schema.Field.of("rec1", inner1New), - Schema.Field.of("z", Schema.of(Schema.Type.BOOLEAN))); - Assert.assertEquals(nestedSchemaNew, newSchema); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/functions/DataQualityTest.java b/wrangler-core/src/test/java/io/cdap/functions/DataQualityTest.java deleted file mode 100644 index 611f5a2cb..000000000 --- a/wrangler-core/src/test/java/io/cdap/functions/DataQualityTest.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests {@link DataQuality} - */ -public class DataQualityTest { - - @Test - public void testRecordLength() throws Exception { - Row row = new Row("a", 1).add("b", 2).add("c", 3); - Assert.assertEquals(3, DataQuality.columns(row)); - row = new Row("a", 1); - Assert.assertEquals(1, DataQuality.columns(row)); - row = new Row(); - Assert.assertEquals(0, DataQuality.columns(row)); - } - - @Test - public void testRecordHasColumn() throws Exception { - Row row = new Row("a", 1); - Assert.assertEquals(true, DataQuality.hascolumn(row, "a")); - Assert.assertEquals(false, DataQuality.hascolumn(row, "b")); - row = new Row(); - Assert.assertEquals(false, DataQuality.hascolumn(row, "a")); - } - - @Test - public void testRange() throws Exception { - Assert.assertEquals(true, DataQuality.inrange(1, 0, 10)); - Assert.assertEquals(false, DataQuality.inrange(0.9, 1, 10)); - Assert.assertEquals(true, DataQuality.inrange(1.1, 1, 10)); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/functions/DateAndTimeTest.java b/wrangler-core/src/test/java/io/cdap/functions/DateAndTimeTest.java deleted file mode 100644 index 69d8a0320..000000000 --- a/wrangler-core/src/test/java/io/cdap/functions/DateAndTimeTest.java +++ /dev/null @@ -1,522 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.util.Arrays; -import java.util.List; - -/** - * A class to test {@link DateAndTime} functions. - */ -public class DateAndTimeTest { - - @Test - public void testCurrentDateTime() throws Exception { - String[] directives = new String[]{ - "set-column CurrentDate datetime:CurrentDate()", - "set-column CurrentTime datetime:CurrentTime()", - "set-column CurrentTimeMS datetime:CurrentTimeMS()", - "set-column CurrentDateTime datetime:CurrentDateTime()", - "set-column CurrentTimestampMS datetime:CurrentTimestampMS()", - "set-column CurrentTimestampMS datetime:CurrentTimestampMS()", - }; - - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertNotNull(rows.get(0).getValue("CurrentDate")); - Assert.assertNotNull(rows.get(0).getValue("CurrentTime")); - Assert.assertNotNull(rows.get(0).getValue("CurrentTimeMS")); - Assert.assertNotNull(rows.get(0).getValue("CurrentDateTime")); - Assert.assertNotNull(rows.get(0).getValue("CurrentTimestampMS")); - Assert.assertNotNull(rows.get(0).getValue("CurrentTimestampMS")); - } - - @Test - public void testDateFromDaysSince() throws Exception { - String[] directives = new String[]{ - "set-column DateFromDaysSince1 datetime:DateFromDaysSince(18250, datetime:GetDate('1958-08-18'))", // 2008-08-05 - "set-column DateFromDaysSince2 datetime:DateFromDaysSince(-1, datetime:GetDate('1958-08-18'))", // 1958-08-17 - }; - - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDate.of(2008, 8, 5), rows.get(0).getValue("DateFromDaysSince1")); - Assert.assertEquals(LocalDate.of(1958, 8, 17), rows.get(0).getValue("DateFromDaysSince2")); - } - - @Test - public void testDateFromComponents() throws Exception { - String[] directives = new String[]{ - "set-column DateFromComponents1 datetime:DateFromComponents(2010, 12, 2)", // 2010-12-02 - "set-column DateFromComponents2 datetime:DateFromComponents(1958, 8, 18)", // 1958-08-17 - "set-column DateFromComponents3 datetime:DateFromComponents(2020, 3, 7)" // 2020-03-07 - }; - - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDate.of(2010, 12, 2), rows.get(0).getValue("DateFromComponents1")); - Assert.assertEquals(LocalDate.of(1958, 8, 18), rows.get(0).getValue("DateFromComponents2")); - Assert.assertEquals(LocalDate.of(2020, 3, 7), rows.get(0).getValue("DateFromComponents3")); - } - - @Test - public void testDateFromJulianDay() throws Exception { - String[] directives = new String[]{ - "set-column DateFromJulianDay datetime:DateFromJulianDay(2454614L)", // 2008–05–27 - }; - - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - LocalDate result = (LocalDate) rows.get(0).getValue("DateFromJulianDay"); - Assert.assertEquals(2008, result.getYear()); - Assert.assertEquals(5, result.getMonthValue()); - Assert.assertEquals(27, result.getDayOfMonth()); - } - - @Test - public void testDateOffsetByComponents() throws Exception { - String[] directives = new String[]{ - "set-column DateOffsetByComponents1 datetime:DateOffsetByComponents(datetime:GetDate('2011-08-18'),2,0,0)", // 2013-08-18 - "set-column DateOffsetByComponents2 datetime:DateOffsetByComponents(datetime:GetDate('2011-08-18'),2,1,-1)", // 2013-09-17 - "set-column DateOffsetByComponents3 datetime:DateOffsetByComponents(datetime:GetDate('2011-08-18'),2,5,-1)", // 2014-01-17 - }; - - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDate.of(2013, 8, 18), rows.get(0).getValue("DateOffsetByComponents1")); - Assert.assertEquals(LocalDate.of(2013, 9, 17), rows.get(0).getValue("DateOffsetByComponents2")); - Assert.assertEquals(LocalDate.of(2014, 1, 17), rows.get(0).getValue("DateOffsetByComponents3")); - } - - @Test - public void testDaysSinceFromDate() throws Exception { - String[] directives = new String[]{ - "set-column DaysSinceFromDate1 datetime:DaysSinceFromDate(datetime:GetDate('2008-08-18')," + - "datetime:GetDate('1958-08-18'))", //-18263 - "set-column DaysSinceFromDate2 datetime:DaysSinceFromDate(datetime:GetDate('1958-08-18')," + - "datetime:GetDate('2008-08-18'))", //18263 - "set-column DaysSinceFromDate3 datetime:DaysSinceFromDate(a,datetime:GetDate('1958-08-18'))", //-18263 - "set-column DaysSinceFromDate4 datetime:DaysSinceFromDate(datetime:GetDate('2008-08-18'),b)", //-18263 - "set-column DaysSinceFromDate5 datetime:DaysSinceFromDate(a,b)", //-18263 - "set-column DaysSinceFromDate6 datetime:DaysSinceFromDate(b,a)", //18263 - }; - - List rows = Arrays.asList(new Row( - "a", LocalDate.of(2008, 8, 18)).add( - "b", LocalDate.of(1958, 8, 18)) - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(-18263L, rows.get(0).getValue("DaysSinceFromDate1")); - Assert.assertEquals(18263L, rows.get(0).getValue("DaysSinceFromDate2")); - Assert.assertEquals(-18263L, rows.get(0).getValue("DaysSinceFromDate3")); - Assert.assertEquals(-18263L, rows.get(0).getValue("DaysSinceFromDate4")); - Assert.assertEquals(-18263L, rows.get(0).getValue("DaysSinceFromDate5")); - Assert.assertEquals(18263L, rows.get(0).getValue("DaysSinceFromDate6")); - } - - @Test - public void testDaysInMonth() throws Exception { - String[] directives = new String[]{ - "set-column DaysInMonth1 datetime:DaysInMonth(datetime:GetDate('1958-08-18'))", //31 - "set-column DaysInMonth2 datetime:DaysInMonth(a)", //31 - }; - - List rows = Arrays.asList(new Row( - "a", LocalDate.of(1958, 8, 18)) - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(31, rows.get(0).getValue("DaysInMonth1")); - Assert.assertEquals(31, rows.get(0).getValue("DaysInMonth2")); - } - - @Test - public void testDaysInYear() throws Exception { - String[] directives = new String[]{ - "set-column DaysInYear1 datetime:DaysInYear(datetime:GetDate('2012-08-18'))", //366 - "set-column DaysInYear2 datetime:DaysInYear(a)", //366 - "set-column DaysInYear3 datetime:DaysInYear(datetime:GetDate('2011-08-18'))", //365 - "set-column DaysInYear4 datetime:DaysInYear(b)", //365 - }; - - List rows = Arrays.asList(new Row( - "a", LocalDate.of(2012, 8, 18)).add("b", LocalDate.of(2011, 8, 18)) - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(366, rows.get(0).getValue("DaysInYear1")); - Assert.assertEquals(366, rows.get(0).getValue("DaysInYear2")); - Assert.assertEquals(365, rows.get(0).getValue("DaysInYear3")); - Assert.assertEquals(365, rows.get(0).getValue("DaysInYear4")); - } - - @Test - public void testDateOffsetByDays() throws Exception { - String[] directives = new String[]{ - "set-column DateOffsetByDays1 datetime:DateOffsetByDays(datetime:GetDate('2011-08-18'), 2)", // 2011-8-20 - "set-column DateOffsetByDays2 datetime:DateOffsetByDays(datetime:GetDate('2011-08-18'), -31)",// 2011-7-18 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDate.of(2011, 8, 20), rows.get(0).getValue("DateOffsetByDays1")); - Assert.assertEquals(LocalDate.of(2011, 7, 18), rows.get(0).getValue("DateOffsetByDays2")); - } - - @Test - public void testHoursFromTime() throws Exception { - String[] directives = new String[]{ - "set-column HoursFromTime1 datetime:HoursFromTime(datetime:GetTime('22:30:00'))", //22 - "set-column HoursFromTime2 datetime:HoursFromTime(datetime:GetTime('22:30:00.4'))", //22 - "set-column HoursFromTime3 datetime:HoursFromTime(datetime:GetTime('22:30:00.43'))", //22 - "set-column HoursFromTime4 datetime:HoursFromTime(datetime:GetTime('22:30:00.434'))", //22 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(22, rows.get(0).getValue("HoursFromTime1")); - Assert.assertEquals(22, rows.get(0).getValue("HoursFromTime2")); - Assert.assertEquals(22, rows.get(0).getValue("HoursFromTime3")); - Assert.assertEquals(22, rows.get(0).getValue("HoursFromTime4")); - } - - @Test - public void testJulianDayFromDate() throws Exception { - String[] directives = new String[]{ - "set-column JulianDayFromDate datetime:JulianDayFromDate(datetime:GetDate('2008-05-27'))", // 2454614 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(2454614L, rows.get(0).getValue("JulianDayFromDate")); - } - - @Test - public void testNanoSecondsFromTime() throws Exception { - String[] directives = new String[]{ - "set-column NanoSecondsFromTime datetime:NanoSecondsFromTime(datetime:GetTime('22:30:00.32'))", // 2454614 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(320000000, rows.get(0).getValue("NanoSecondsFromTime")); - } - - @Test - public void testMicroSecondsFromTime() throws Exception { - String[] directives = new String[]{ - "set-column MicroSecondsFromTime datetime:MicroSecondsFromTime(datetime:GetTime('22:30:00.32'))", // 2454614 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(320000, rows.get(0).getValue("MicroSecondsFromTime")); - } - - @Test - public void testMilliSecondsFromTime() throws Exception { - String[] directives = new String[]{ - "set-column MilliSecondsFromTime datetime:MilliSecondsFromTime(datetime:GetTime('22:30:00.32'))", // 2454614 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(320, rows.get(0).getValue("MilliSecondsFromTime")); - } - - @Test - public void testMidnightSecondsFromTime() throws Exception { - String[] directives = new String[]{ - "set-column MidnightSecondsFromTime datetime:MidnightSecondsFromTime(datetime:GetTime('00:30:52'))", // 1852 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(1852, rows.get(0).getValue("MidnightSecondsFromTime")); - } - - @Test - public void testMinutesFromTime() throws Exception { - String[] directives = new String[]{ - "set-column MinutesFromTime datetime:MinutesFromTime(datetime:GetTime('22:30:52'))", // 30 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(30, rows.get(0).getValue("MinutesFromTime")); - } - - @Test - public void testMonthDayFromDate() throws Exception { - String[] directives = new String[]{ - "set-column MonthDayFromDate datetime:MonthDayFromDate(datetime:GetDate('2008-08-18'))", // 18 - }; - - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(18, rows.get(0).getValue("MonthDayFromDate")); - } - - @Test - public void testMonthFromDate() throws Exception { - String[] directives = new String[]{ - "set-column MonthFromDate datetime:MonthFromDate(datetime:GetDate('2008-08-18'))", // 8 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(8, rows.get(0).getValue("MonthFromDate")); - } - - @Test - public void testNextWeekdayFromDate() throws Exception { - String[] directives = new String[]{ - // 2008-08-21 - "set-column NextWeekdayFromDate1 datetime:NextWeekdayFromDate(datetime:GetDate('2008-08-18'), 'Thursday')", - "set-column NextWeekdayFromDate2 datetime:NextWeekdayFromDate(datetime:GetDate('2008-08-18'), 'Thu')", - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDate.of(2008, 8, 21), rows.get(0).getValue("NextWeekdayFromDate1")); - Assert.assertEquals(LocalDate.of(2008, 8, 21), rows.get(0).getValue("NextWeekdayFromDate2")); - } - - @Test - public void testNthWeekdayFromDate() throws Exception { - String[] directives = new String[]{ - // 2009-08-20 - "set-column NthWeekdayFromDate1 datetime:NthWeekdayFromDate(datetime:GetDate('2009-08-18'), 'Thursday', 1)", - "set-column NthWeekdayFromDate2 datetime:NthWeekdayFromDate(datetime:GetDate('2009-08-18'), 'Thu', 1)", - // 2009-08-06 - "set-column NthWeekdayFromDate3 datetime:NthWeekdayFromDate(datetime:GetDate('2009-08-18'), 'Thursday', -2)", - "set-column NthWeekdayFromDate4 datetime:NthWeekdayFromDate(datetime:GetDate('2009-08-18'), 'Thu', -2)", - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDate.of(2009, 8, 20), rows.get(0).getValue("NthWeekdayFromDate1")); - Assert.assertEquals(LocalDate.of(2009, 8, 20), rows.get(0).getValue("NthWeekdayFromDate2")); - Assert.assertEquals(LocalDate.of(2009, 8, 6), rows.get(0).getValue("NthWeekdayFromDate3")); - Assert.assertEquals(LocalDate.of(2009, 8, 6), rows.get(0).getValue("NthWeekdayFromDate4")); - } - - @Test - public void testPreviousWeekdayFromDate() throws Exception { - String[] directives = new String[]{ - // 2008-08-14 - "set-column PreviousWeekdayFromDate1 datetime:PreviousWeekdayFromDate(datetime:GetDate('2008-08-18'), " + - "'Thursday')", - "set-column PreviousWeekdayFromDate2 datetime:PreviousWeekdayFromDate(datetime:GetDate('2008-08-18'), 'Thu')", - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDate.of(2008, 8, 14), rows.get(0).getValue("PreviousWeekdayFromDate1")); - Assert.assertEquals(LocalDate.of(2008, 8, 14), rows.get(0).getValue("PreviousWeekdayFromDate2")); - } - - @Test - public void testSecondsFromTime() throws Exception { - String[] directives = new String[]{ - "set-column SecondsFromTime datetime:SecondsFromTime(datetime:GetTime('22:30:52'))", // 52 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(52, rows.get(0).getValue("SecondsFromTime")); - } - - @Test - public void testSecondsSinceFromTimestamp() throws Exception { - String[] directives = new String[]{ - "set-column SecondsSinceFromTimestamp1 " + - "datetime:SecondsSinceFromDateTime(datetime:GetDateTime('2008-08-18 22:30:52'), " + - "datetime:GetDateTime('2008-08-19 22:30:52'))", // -86400 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(-86400L, rows.get(0).getValue("SecondsSinceFromTimestamp1")); - } - - @Test - public void testTimeFromComponents() throws Exception { - String[] directives = new String[]{ - "set-column TimeFromComponents datetime:TimeFromComponents(10, 12, 2, 0)", // 10:12:02.0 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalTime.of(10, 12, 2, 0), rows.get(0).getValue("TimeFromComponents")); - } - - @Test - public void testTimeFromMidnightSeconds() throws Exception { - String[] directives = new String[]{ - "set-column TimeFromMidnightSeconds1 datetime:TimeFromMidnightSeconds(240)", // 00:04:00 - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalTime.of(0, 4, 0), rows.get(0).getValue("TimeFromMidnightSeconds1")); - } - - @Test - public void testTimestampFromDateTime() throws Exception { - String[] directives = new String[]{ - "set-column GetDateTime datetime:GetDateTime(datetime:GetDate('2008-08-18'), " + - "datetime:GetTime('22:30:52'))" - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDateTime.of(2008, 8, 18, 22, 30, 52), rows.get(0).getValue("GetDateTime")); - } - - @Test - public void testTimestampFromSecondSince() throws Exception { - String[] directives = new String[]{ - "set-column TimestampFromSecondSince datetime:DateTimeFromSecondsSince(2563, " + - "datetime:GetDateTime('2008-08-18 22:30:52'))" - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDateTime.of(2008, 8, 18, 23, 13, 35), rows.get(0).getValue("TimestampFromSecondSince")); - } - - @Test - public void testTimestampFromTimet() throws Exception { - String[] directives = new String[]{ - "set-column TimestampFromEpoch1 datetime:DateTimeFromEpoch(1234567890L)", - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDateTime.of(2009, 2, 13, 23, 31, 30), rows.get(0).getValue("TimestampFromEpoch1")); - } - - @Test - public void testTimestampFromTime2() throws Exception { - String[] directives = new String[]{ - "set-column DateTimeFromTime datetime:DateTimeFromTime(datetime:GetTime('12:03:22')," + - " datetime:GetDateTime('2008-08-18 22:30:52'))" - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDateTime.of(2008, 8, 18, 12, 3, 22), rows.get(0).getValue("DateTimeFromTime")); - } - - @Test - public void testTimestampOffsetByComponents() throws Exception { - String[] directives = new String[]{ - "set-column a datetime:DateTimeOffsetByComponents(datetime:GetDateTime('2009-08-18 14:05:29'), " + - "0, 2, -4, 2, 0, 20)" - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDateTime.of(2009, 10, 14, 16, 5, 49), rows.get(0).getValue("a")); - } - - @Test - public void testTimestampOffsetBySeconds() throws Exception { - String[] directives = new String[]{ - "set-column a datetime:DateTimeOffsetBySeconds(datetime:GetDateTime('2009-08-18 14:05:29'), 32760)" - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(LocalDateTime.of(2009, 8, 18, 23, 11, 29), rows.get(0).getValue("a")); - } - - @Test - public void testEpochFromTimestamp() throws Exception { - String[] directives = new String[]{ - "set-column epoch datetime:EpochFromDateTime(datetime:GetDateTime('2009-02-13 23:31:30'))" - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(1234567890L, rows.get(0).getValue("epoch")); - } - - @Test - public void testWeekdayFromDate() throws Exception { - String[] directives = new String[]{ - "set-column weekday1 datetime:WeekdayFromDate(datetime:GetDate('2008-08-18'))", - "set-column weekday2 datetime:WeekdayFromDate(datetime:GetDate('2008-08-18'), 'saturday')", - "set-column weekday3 datetime:WeekdayFromDate(datetime:GetDate('2008-08-18'), 'friday')", - "set-column weekday4 datetime:WeekdayFromDate(datetime:GetDate('2008-08-18'), 'thursday')", - "set-column weekday5 datetime:WeekdayFromDate(datetime:GetDate('2008-08-18'), 'wednesday')", - "set-column weekday6 datetime:WeekdayFromDate(datetime:GetDate('2008-08-18'), 'tuesday')", - "set-column weekday7 datetime:WeekdayFromDate(datetime:GetDate('2008-08-18'), 'monday')", - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(1, rows.get(0).getValue("weekday1")); - Assert.assertEquals(2, rows.get(0).getValue("weekday2")); - Assert.assertEquals(3, rows.get(0).getValue("weekday3")); - Assert.assertEquals(4, rows.get(0).getValue("weekday4")); - Assert.assertEquals(5, rows.get(0).getValue("weekday5")); - Assert.assertEquals(6, rows.get(0).getValue("weekday6")); - Assert.assertEquals(7, rows.get(0).getValue("weekday7")); - } - - @Test - public void testYeardayFromDate() throws Exception { - String[] directives = new String[]{ - "set-column year datetime:YeardayFromDate(datetime:GetDate('2008-08-18'))" - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(231, rows.get(0).getValue("year")); - } - - @Test - public void testYearweekFromDate() throws Exception { - String[] directives = new String[]{ - "set-column yearweek datetime:YearweekFromDate(datetime:GetDate('2008-08-18'))" - }; - List rows = Arrays.asList(new Row()); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(33, rows.get(0).getValue("yearweek")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/functions/ExpressionTest.java b/wrangler-core/src/test/java/io/cdap/functions/ExpressionTest.java deleted file mode 100644 index 80d3bd73d..000000000 --- a/wrangler-core/src/test/java/io/cdap/functions/ExpressionTest.java +++ /dev/null @@ -1,277 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import io.cdap.cdap.api.common.Bytes; -import io.cdap.directives.transformation.ColumnExpression; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.nio.charset.StandardCharsets; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link ColumnExpression} - */ -public class ExpressionTest { - - @Test - public void testRowNoOfColumns() throws Exception { - String[] directives = new String[] { - "parse-as-csv body ','", - "set-column :cols exp:{ this.width() }" - }; - - List rows = Arrays.asList(new Row("body", "1098,Root,Joltie,01/26/1956,root@jolite.io,32,11.79," + - "150 Mars Ave,Palo Alto,CA,USA,32826")); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(13, rows.get(0).getValue("cols")); - } - - @Test - public void testApplyExpr() throws Exception { - String[] directives = new String[] { - "parse-as-csv __col ,", - "drop __col", - "set columns id,first,last,dob,email,age,hrlywage,address,city,state,country,zip", - "set column name concat(last, \", \", first)", - "set column isteen age < 15 ? 'yes' : 'no'", - "set column salary hrlywage*40*4", - "drop first", - "drop last", - "set column email string:reverse(email)", - "set column hrlywage var x; x = math:ceil(toFloat(hrlywage)); x + 1", - }; - - // Run through the wrangling steps. - List rows = Arrays.asList(new Row("__col", "1098,Root,Joltie,01/26/1956,root@jolite.io,32,11.79," + - "150 Mars Ave,Palo Alto,CA,USA,32826")); - - // Iterate through steps. - rows = TestingRig.execute(directives, rows); - - Assert.assertEquals("Joltie, Root", rows.get(0).getValue("name")); - Assert.assertEquals(1886.3999999999999, rows.get(0).getValue("salary")); - Assert.assertEquals("no", rows.get(0).getValue("isteen")); - Assert.assertEquals("oi.etiloj@toor", rows.get(0).getValue("email")); - Assert.assertEquals(13.0, rows.get(0).getValue("hrlywage")); - } - - @Test - public void testNegativeConditionApply() throws Exception { - String[] directives = new String[] { - "parse-as-csv __col ,", - "drop __col", - "set columns id,first,last,dob,email,age,hrlywage,address,city,state,country,zip", - "set column email string:reverse(email1)" // email1 not defined in the record. - }; - - List rows = Arrays.asList(new Row("__col", "1098,Root,Joltie,01/26/1956,root@jolite.io," + - "32,11.79,150 Mars Ave,Palo Alto,CA,USA,32826")); - - // Run through the wrangling steps. - TestingRig.execute(directives, rows); - } - - @Test - public void testStringNamespace() throws Exception { - String[] directives = new String[] { - "set column abbreviate string:abbreviate(longtxt, 5)", - "set column center string:center(first, 10)", - "set column eoltxt string:chomp(eoltxt)", - "set column chop string:chop(chop)", - "set column delws string:deleteWhitespace(delws)" - }; - - List rows = Arrays.asList( - new Row("number", "1") - .add("first", "root") - .add("last", "joltie") - .add("longtxt", "This is long transformation") - .add("eoltxt", "This has eol\n") - .add("chop", "Joltie") - .add("delws", "Jolti Root") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("Jolti", rows.get(0).getValue("chop")); - Assert.assertEquals("JoltiRoot", rows.get(0).getValue("delws")); - Assert.assertEquals("This has eol", rows.get(0).getValue("eoltxt")); - Assert.assertEquals("Th...", rows.get(0).getValue("abbreviate")); - } - - @Test - public void testBytesNamespace() throws Exception { - String[] directives = new String[] { - "set column first bytes:toString(first)", - "set column number bytes:toInt(number)" - }; - - List rows = Arrays.asList( - new Row("number", Bytes.toBytes(99)) - .add("first", "root".getBytes(StandardCharsets.UTF_8)) - .add("last", "joltie".getBytes(StandardCharsets.UTF_8)) - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("root", rows.get(0).getValue("first")); - Assert.assertEquals(99, rows.get(0).getValue("number")); - } - - @Test - public void testDateFunctions() throws Exception { - String[] directives = new String[] { - "parse-as-simple-date date yyyy-MM-dd'T'HH:mm:ss", - "parse-as-simple-date other yyyy-MM-dd'T'HH:mm:ss", - "set-column unixtimestamp date:UNIXTIMESTAMP_MILLIS(date)", - "set-column month_no date:MONTH(date)", - "set-column month_short date:MONTH_SHORT(date)", - "set-column month_long date:MONTH_LONG(date)", - "set-column year date:YEAR(date)", - "set-column day_of_year date:DAY_OF_YEAR(date)", - "set-column era_long date:ERA_LONG(date)", - "set-column days date:SECONDS_TO_DAYS(seconds)", - "set-column hours date:SECONDS_TO_HOURS(seconds)", - "set-column diff_days date:DAYS_BETWEEN_NOW(date)", - "set-column diff date:DAYS_BETWEEN(date, other)" - }; - - - //2017-02-02T21:06:44Z - List rows = Arrays.asList( - new Row("date", "2017-02-02T21:06:44Z").add("seconds", 86401).add("other", "2017-02-03T21:06:44Z") - ); - - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - - ZonedDateTime date = ZonedDateTime.of(2017, 2, 2, 21, 6, 44, 0, ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - ZonedDateTime other = ZonedDateTime.of(2017, 2, 3, 21, 6, 44, 0, ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - Assert.assertEquals(date, rows.get(0).getValue("date")); - Assert.assertEquals(other, rows.get(0).getValue("other")); - Assert.assertEquals(1486069604000L, rows.get(0).getValue("unixtimestamp")); - Assert.assertEquals(2, rows.get(0).getValue("month_no")); - Assert.assertEquals("Feb", rows.get(0).getValue("month_short")); - Assert.assertEquals("February", rows.get(0).getValue("month_long")); - Assert.assertEquals(2017, rows.get(0).getValue("year")); - Assert.assertEquals(33, rows.get(0).getValue("day_of_year")); - Assert.assertEquals("AD", rows.get(0).getValue("era_long")); - Assert.assertEquals(1, rows.get(0).getValue("days")); - Assert.assertEquals(24, rows.get(0).getValue("hours")); - Assert.assertEquals(1, rows.get(0).getValue("diff")); - } - - @Test(expected = RecipeException.class) - public void testInvalidDateFunction() throws Exception { - String[] directives = new String[] { - "parse-as-simple-date date yyyy-MM-dd'T'HH:mm:ss", - "parse-as-simple-date other yyyy-MM-dd'T'HH:mm:ss", - "set-column unixtimestamp date:UNIXTIMESTAMP_MILLIS(date)", - "set-column month_no date:MONTH(date)", - "set-column month_short date:MONTH_SHORT(date)", - "set-column month_long date:MONTH_LONG(date)", - "set-column year date:YEAR(date)", - "set-column day_of_year date:DAY_OF_YEAR(date)", - "set-column era_long date:ERA_LONG(date)", - "set-column days date:SECONDS_TO_DAYS(seconds)", - "set-column hours date:SECONDS_TO_HOURS(seconds)", - "set-column diff_days date:DAYS_BETWEEN_NOW(date)", - "set-column diff date:DAYS_BETWEEN(date, other)" - }; - - //2017-02-02T21:06:44Z - List rows = Arrays.asList( - new Row("date", null).add("seconds", 86401).add("other", "2017-02-03T21:06:44Z") - ); - - rows = TestingRig.execute(directives, rows); - } - - @Test - public void testMethodCalls() throws Exception { - String[] directives = new String[] { - "set-column first first.trim()", - "filter-row-if-true first.isEmpty()" - }; - - List rows = Arrays.asList( - new Row("number", Bytes.toBytes(99)) - .add("first", " ") - .add("last", "joltie") - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 0); - } - - @Test - public void testGeoFence() throws Exception { - - String geoJsonFence = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{}," + - "\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-122.05870628356934,37.37943348292772]," + - "[-122.05724716186525,37.374727268782294],[-122.04634666442871,37.37493189292912]," + - "[-122.04608917236328,37.38175237839049],[-122.05870628356934,37.37943348292772]]]}}]}"; - - String[] directives = new String[]{ - "set column result geo:InFence(lat,lon,fences)" - }; - - List rows = Arrays.asList( - new Row("id", 123) - .add("lon", -462.49145507812494) - .add("lat", 43.46089378008257) - .add("fences", geoJsonFence) - ); - rows = TestingRig.execute(directives, rows); - Assert.assertFalse((Boolean) rows.get(0).getValue("result")); - } - - @Test(expected = RecipeException.class) - public void testMalformedGeoFence() throws Exception { - String geoJsonFence = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{}," + - "\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-122.05870628356934,37.37943348292772]," + - "[-122.05724716186525,37.374727268782294],[-122.04634666442871,37.37493189292912]," + - "[-122.04608917236328,37.38175237839049]]]}}]}"; - - String[] directives = new String[]{ - "set column result geo:InFence(lat,lon,fences)" - }; - - List rows = Arrays.asList( - new Row("id", 123) - .add("lon", -462.49145507812494) - .add("lat", 43.46089378008257) - .add("fences", geoJsonFence) - ); - TestingRig.execute(directives, rows); - } -} - diff --git a/wrangler-core/src/test/java/io/cdap/functions/GeoFenceTest.java b/wrangler-core/src/test/java/io/cdap/functions/GeoFenceTest.java deleted file mode 100644 index d7b20012a..000000000 --- a/wrangler-core/src/test/java/io/cdap/functions/GeoFenceTest.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import org.junit.Assert; -import org.junit.Test; - - -/** - * Tests {@link GeoFences} - */ -public class GeoFenceTest { - - @Test - public void testWithMultipleFences() { - - String geoJsonFence = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{}," + - "\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-122.05870628356934,37.37943348292772]," + - "[-122.05724716186525,37.374727268782294],[-122.04634666442871,37.37493189292912]," + - "[-122.04608917236328,37.38175237839049],[-122.05870628356934,37.37943348292772]]]}}," + - "{\"type\":\"Feature\",\"properties\":{},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":" + - "[[[-122.05055236816405,37.36862239166385],[-122.04038143157959,37.36841775030572]," + - "[-122.04141139984132,37.37312436031927],[-122.05055236816405,37.36862239166385]]]}}]}"; - - Assert.assertFalse(GeoFences.InFence(43.46089378008257, -462.49145507812494, geoJsonFence)); - Assert.assertTrue(GeoFences.InFence(37.378990156513105, -122.05076694488525, geoJsonFence)); - } - - @Test - public void testWithSingleFence() { - String geoJsonFence = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{}," + - "\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-122.05870628356934,37.37943348292772]," + - "[-122.05724716186525,37.374727268782294],[-122.04634666442871,37.37493189292912]," + - "[-122.04608917236328,37.38175237839049],[-122.05870628356934,37.37943348292772]]]}}]}"; - - Assert.assertFalse(GeoFences.InFence(43.46089378008257, -462.49145507812494, geoJsonFence)); - Assert.assertTrue(GeoFences.InFence(37.378990156513105, -122.05076694488525, geoJsonFence)); - } - - @Test(expected = IllegalArgumentException.class) - public void testWithOpenPolygon() { - - String geoJsonFence = "{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{},\"geometry\"" + - ":{\"type\":\"Polygon\",\"coordinates\":[[[-122.05870628356934,37.37943348292772]," + - "[-122.05724716186525,37.374727268782294],[-122.04634666442871,37.37493189292912]," + - "[-122.04608917236328,37.38175237839049]]]}}]}"; - - GeoFences.InFence(43.46089378008257, -462.49145507812494, geoJsonFence); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/functions/GlobalTest.java b/wrangler-core/src/test/java/io/cdap/functions/GlobalTest.java deleted file mode 100644 index 1ec172ff1..000000000 --- a/wrangler-core/src/test/java/io/cdap/functions/GlobalTest.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -/** - * Tests {@link Global} - */ -public class GlobalTest { - - @Test - public void testFirstNonNullFound() throws Exception { - String[] directives = new String[] { - "set-column d coalesce(a,b,c)" - }; - - // Run through the wrangling steps. - List rows = Arrays.asList(new Row("a", null).add("b", null).add("c", "c")); - - // Iterate through steps. - rows = TestingRig.execute(directives, rows); - Assert.assertEquals("c", rows.get(0).getValue("d")); - } - - @Test - public void testFirstNonNullNotFound() throws Exception { - String[] directives = new String[] { - "set-column d coalesce(a,b,c)" - }; - - // Run through the wrangling steps. - List rows = Arrays.asList(new Row("a", null).add("b", null).add("c", null)); - - // Iterate through steps. - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(null, rows.get(0).getValue("d")); - } - - @Test - public void testFirstNonNullFoundInBetween() throws Exception { - String[] directives = new String[] { - "set-column d coalesce(a,b,c)" - }; - - // Run through the wrangling steps. - List rows = Arrays.asList(new Row("a", "a").add("b", null).add("c", "c")); - - // Iterate through steps. - rows = TestingRig.execute(directives, rows); - Assert.assertEquals("a", rows.get(0).getValue("d")); - } - - @Test - public void testFirstNonNullFoundAtStart() throws Exception { - String[] directives = new String[] { - "set-column d coalesce(a,b,c)" - }; - - // Run through the wrangling steps. - List rows = Arrays.asList(new Row("a", "a").add("b", null).add("c", null)); - - // Iterate through steps. - rows = TestingRig.execute(directives, rows); - Assert.assertEquals("a", rows.get(0).getValue("d")); - } - - @Test - public void testPrint() throws Exception { - String[] directives = new String[] { - "set-column d format(\"%s-%s-%s\", a,b,c)" - }; - - // Run through the wrangling steps. - List rows = Arrays.asList(new Row("a", "a").add("b", "b").add("c", "c")); - - // Iterate through steps. - rows = TestingRig.execute(directives, rows); - Assert.assertEquals("a-b-c", rows.get(0).getValue("d")); - } - - @Test - public void testIsNotNull() throws Exception { - String[] directives = new String[]{ - "set-column test1 IsNotNull(a) ? a : null", - "set-column test2 IsNotNull(b) ? b : null", - "set-column test3 IsNotNull(c) ? c : null", - "set-column test4 if(IsNotNull(c)){ a } else {b}" - }; - List rows = Collections.singletonList(new Row("a", null) - .add("b", "value") - .add("c", 999L) - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertNull(rows.get(0).getValue("test1")); - Assert.assertEquals("value", rows.get(0).getValue("test2")); - Assert.assertEquals(999L, rows.get(0).getValue("test3")); - Assert.assertNull(rows.get(0).getValue("test4")); - } - - @Test - public void testIsNull() throws Exception { - String[] directives = new String[]{ - "set-column test1 IsNull(a) ? a : null", - "set-column test2 IsNull(b) ? b : null", - "set-column test3 IsNull(c) ? c : null", - "set-column test4 if(IsNull(c)){ a } else {b}" - }; - List rows = Collections.singletonList(new Row("a", null) - .add("b", "value") - .add("c", 999L) - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertNull(rows.get(0).getValue("test1")); - Assert.assertNull(rows.get(0).getValue("test2")); - Assert.assertNull(rows.get(0).getValue("test3")); - Assert.assertEquals("value", rows.get(0).getValue("test4")); - } - - @Test - public void testNullToEmpty() throws Exception { - String[] directives = new String[]{ - "set-column test1 NullToEmpty(a)", - "set-column test2 NullToEmpty(b)", - "set-column test3 NullToEmpty(c)" - }; - List rows = Collections.singletonList(new Row("a", null) - .add("b", "value") - .add("c", 999L) - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals("", rows.get(0).getValue("test1")); - Assert.assertEquals("value", rows.get(0).getValue("test2")); - Assert.assertEquals(999L, rows.get(0).getValue("test3")); - } - - @Test - public void testNullToZero() throws Exception { - String[] directives = new String[]{ - "set-column test1 NullToZero(a)", - "set-column test2 NullToZero(b == 'value' ? a : b)", - "set-column test3 NullToZero(c)" - }; - List rows = Collections.singletonList(new Row("a", null) - .add("b", "value") - .add("c", 999L) - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(0, rows.get(0).getValue("test1")); - Assert.assertEquals(0, rows.get(0).getValue("test2")); - Assert.assertEquals(999L, rows.get(0).getValue("test3")); - } - - @Test - public void testNullToValue() throws Exception { - String[] directives = new String[]{ - "set-column test1 NullToValue(a, 42)", - "set-column test2 NullToValue(b == 'value' ? a : b, 42)", - "set-column test3 NullToValue(c, 42)" - }; - List rows = Collections.singletonList(new Row("a", null) - .add("b", "value") - .add("c", 999L) - ); - - rows = TestingRig.execute(directives, rows); - Assert.assertEquals(1, rows.size()); - Assert.assertEquals(42, rows.get(0).getValue("test1")); - Assert.assertEquals(42, rows.get(0).getValue("test2")); - Assert.assertEquals(999L, rows.get(0).getValue("test3")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/functions/JsonFunctionsTest.java b/wrangler-core/src/test/java/io/cdap/functions/JsonFunctionsTest.java deleted file mode 100644 index e958e0ba9..000000000 --- a/wrangler-core/src/test/java/io/cdap/functions/JsonFunctionsTest.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.utils.JsonTestData; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests for all the Json functions. - */ -public class JsonFunctionsTest { - - private static final String JSON_SELECTION_EG1 = "{\n" + - " \"list\" : [\n" + - " {\n" + - " \"set\" : [\n" + - " { \"a1\" : \"b1\" },\n" + - " { \"x1\" : \"y1\" }\n" + - " ],\n" + - " \"map\" : \"X1\",\n" + - " \"collection\" : \"Y1\"\n" + - " },\n" + - " {\n" + - " \"set\" : [\n" + - " { \"a2\" : \"b2\" },\n" + - " { \"x2\" : \"y2\" }\n" + - " ],\n" + - " \"map\" : \"X2\",\n" + - " \"collection\" : \"Y2\" \n" + - " },\n" + - " {\n" + - " \"set\" : [\n" + - " { \"a3\" : \"b3\" },\n" + - " { \"x3\" : \"y3\" }\n" + - " ],\n" + - " \"map\" : \"X3\",\n" + - " \"collection\" : \"Y3\" \n" + - " }\n" + - " ]\n" + - "}"; - - @Test - public void testJsonSelect() throws Exception { - String[] directives = new String[]{ - "set-column mayo json:Parse(body)", - "drop body", - "set-column entries json:Select(mayo, '$.list[*].set.*')" - }; - List rows = Arrays.asList( - new Row("body", JSON_SELECTION_EG1) - ); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(new JsonParser().parse(JSON_SELECTION_EG1), rows.get(0).getValue("mayo")); - JsonArray expected = new JsonArray(); - addJsonObject(expected, "a1", "b1"); - addJsonObject(expected, "x1", "y1"); - addJsonObject(expected, "a2", "b2"); - addJsonObject(expected, "x2", "y2"); - addJsonObject(expected, "a3", "b3"); - addJsonObject(expected, "x3", "y3"); - Object entries = rows.get(0).getValue("entries"); - Assert.assertEquals(expected, entries); - } - - private void addJsonObject(JsonArray expected, String x1, String y1) { - JsonObject jsonObject = new JsonObject(); - jsonObject.addProperty(x1, y1); - expected.add(jsonObject); - } - - @Test - public void testBasicJson() throws Exception { - String[] directives = new String[]{ - "set-column baddata if(json:IsValid(malformed)) { json:Parse(malformed) } else { 'Invalid Json'}", - "set-column badjson json:IsValid(malformed)", - "set-column goodjson json:IsValid(basic)", - "set-column basicparsed json:Parse(basic)" - }; - - List rows = Arrays.asList( - new Row("malformed", JsonTestData.MALFORMED_BASIC_JSON).add("basic", JsonTestData.BASIC) - ); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals("Invalid Json", rows.get(0).getValue("baddata")); - Assert.assertEquals(false, rows.get(0).getValue("badjson")); - Assert.assertEquals(true, rows.get(0).getValue("goodjson")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/functions/LogicalTest.java b/wrangler-core/src/test/java/io/cdap/functions/LogicalTest.java deleted file mode 100644 index 8dc85c207..000000000 --- a/wrangler-core/src/test/java/io/cdap/functions/LogicalTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -public class LogicalTest { - - @Test - public void testLogicalBitwiseFunctions() throws Exception { - String[] directives = new String[]{ - "set-column and logical:BitAnd(352, 400)", - "set-column or logical:BitOr(352, 400)", - "set-column xor logical:BitXor(352, 400)", - "set-column andL logical:BitAnd(352L, 400L)", - "set-column orL logical:BitOr(352L, 400L)", - "set-column xorL logical:BitXor(352L, 400L)", - "set-column compress logical:BitCompress('0101100000')", - "set-column expand logical:BitExpand(352)", - "set-column not1 logical:Not(5-5)", - "set-column not2 logical:Not(5+5)", - "set-column not3 logical:Not(null)", - "set-column bitset logical:SetBit(356,[2,4,8], 1)", - }; - - List rows = Arrays.asList(new Row("a", 352L).add("b", 400L).add("c","0101100000").add("d", 352)); - rows = TestingRig.execute(directives, rows); - Assert.assertTrue(rows.size() == 1); - - Assert.assertEquals(256, rows.get(0).getValue("and")); - Assert.assertEquals(496, rows.get(0).getValue("or")); - Assert.assertEquals(240, rows.get(0).getValue("xor")); - Assert.assertEquals(256L, rows.get(0).getValue("andL")); - Assert.assertEquals(496L, rows.get(0).getValue("orL")); - Assert.assertEquals(240L, rows.get(0).getValue("xorL")); - Assert.assertEquals(352L, rows.get(0).getValue("compress")); - Assert.assertEquals("101100000", rows.get(0).getValue("expand")); - Assert.assertEquals(1, rows.get(0).getValue("not1")); - Assert.assertEquals(0, rows.get(0).getValue("not2")); - Assert.assertEquals(1, rows.get(0).getValue("not3")); - Assert.assertEquals(494L, rows.get(0).getValue("bitset")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/functions/NumberFunctionsTest.java b/wrangler-core/src/test/java/io/cdap/functions/NumberFunctionsTest.java deleted file mode 100644 index bb4801132..000000000 --- a/wrangler-core/src/test/java/io/cdap/functions/NumberFunctionsTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.functions; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests functionality of {@link NumberFunctions} - */ -public class NumberFunctionsTest { - - @Test - public void testNumbers() throws Exception { - String[] directives = new String[]{ - "set-column double { a = 5.0; number:AsDouble(a/2) }", - "set-column float { a = 2.34; number:AsFloat(a) }", - "set-column int { a = 5.64; number:AsInteger(a) }", - "set-column mantissaInt { a = 5; number:Mantissa(a) }", - "set-column mantissaDouble { a = 43.2534d; number:Mantissa(a) }", - "set-column mantissaLong { a = 214748364721l; number:Mantissa(a) }", - "set-column mantissaFloat { a = 12.0234; number:Mantissa(a) }", - "set-column mantissaBigD { a = 12.00123b; number:Mantissa(a) }", - }; - - List rows = Arrays.asList( - new Row() - ); - rows = TestingRig.execute(directives, rows); - - Assert.assertTrue(rows.size() == 1); - Assert.assertEquals(2.5d, rows.get(0).getValue("double")); - Assert.assertEquals(2.34f, rows.get(0).getValue("float")); - Assert.assertEquals(5, rows.get(0).getValue("int")); - Assert.assertEquals(0d, rows.get(0).getValue("mantissaInt")); - Assert.assertEquals(0.2534d, rows.get(0).getValue("mantissaDouble")); - Assert.assertEquals(0d, rows.get(0).getValue("mantissaLong")); - Assert.assertEquals(0.0234d, rows.get(0).getValue("mantissaFloat")); - Assert.assertEquals(0.00123d, rows.get(0).getValue("mantissaBigD")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/ExperimentTests.java b/wrangler-core/src/test/java/io/cdap/wrangler/ExperimentTests.java deleted file mode 100644 index cf5d36e7a..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/ExperimentTests.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Class description here. - */ -public class ExperimentTests { - - private String getIdFromName(String name) { - name = name.toLowerCase(); - name = name.replaceAll("[_ \t]+", "-"); - name = name.replaceAll("[/$%#@**&()!,~+=?><|}{]+", ""); - return name; - } - - @Test - public void testIdCreationFromName() throws Exception { - String[] names = { - "My Sample Recipe", - "SSGT Transformation Recipe!", - "{SSGT Transformation Recipe!}", - "{SSGT Transformation Recipe!}", - "test>???>>>>window", - "test test1", - "window\t \t window1" - }; - - String[] expected = { - "my-sample-recipe", - "ssgt-transformation-recipe", - "ssgt-transformation-recipe", - "ssgt-transformation-recipesample-file", - "testwindow", - "test-test1", - "window-window1" - }; - - for (int i = 0; i < names.length; ++i) { - String name = names[i]; - String expect = expected[i]; - String id = getIdFromName(name); - Assert.assertEquals(expect, id); - } - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/TestingPipelineContext.java b/wrangler-core/src/test/java/io/cdap/wrangler/TestingPipelineContext.java deleted file mode 100644 index 9409a2616..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/TestingPipelineContext.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import io.cdap.cdap.etl.api.Lookup; -import io.cdap.cdap.etl.api.StageMetrics; -import io.cdap.directives.aggregates.DefaultTransientStore; -import io.cdap.wrangler.api.Executor; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.TransientStore; -import io.cdap.wrangler.proto.Contexts; -import org.mockito.Mockito; - -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -/** - * This class {@link TestingPipelineContext} is a runtime context that is provided for each - * {@link Executor} execution. - */ -public class TestingPipelineContext implements ExecutorContext { - private final StageMetrics metrics; - private final String name; - private final TransientStore store; - private final Map properties; - private boolean schemaManagementEnabled; - - public TestingPipelineContext() { - name = "testing"; - store = new DefaultTransientStore(); - properties = new HashMap<>(); - - metrics = Mockito.mock(StageMetrics.class); - Mockito.doNothing().when(metrics).count(Mockito.anyString(), Mockito.anyInt()); - - schemaManagementEnabled = false; - } - - /** - * @return Environment this context is prepared for. - */ - @Override - public Environment getEnvironment() { - return Environment.TESTING; - } - - @Override - public String getNamespace() { - return Contexts.SYSTEM; - } - - /** - * @return Measurements context. - */ - @Override - public StageMetrics getMetrics() { - return metrics; - } - - /** - * @return Context name. - */ - @Override - public String getContextName() { - return name; - } - - /** - * @return Properties associated with run and pipeline. - */ - @Override - public Map getProperties() { - return properties; - } - - /** - * Returns a valid service url. - * - * @param applicationId id of the application to which a service url. - * @param serviceId id of the service within application. - * @return URL if service exists, else null. - */ - @Override - public URL getService(String applicationId, String serviceId) { - return null; - } - - @Override - public TransientStore getTransientStore() { - return store; - } - - public TestingPipelineContext setSchemaManagementEnabled() { - this.schemaManagementEnabled = true; - return this; - } - - /** - * Provides a handle to dataset for lookup. - * - * @param s name of the dataset. - * @param map properties associated with dataset. - * @return handle to dataset for lookup. - */ - @Override - public Lookup provide(String s, Map map) { - return null; - } - - @Override - public boolean isSchemaManagementEnabled() { - return schemaManagementEnabled; - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/TestingRig.java b/wrangler-core/src/test/java/io/cdap/wrangler/TestingRig.java deleted file mode 100644 index a56d12504..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/TestingRig.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.CompileException; -import io.cdap.wrangler.api.CompileStatus; -import io.cdap.wrangler.api.Compiler; -import io.cdap.wrangler.api.DirectiveLoadException; -import io.cdap.wrangler.api.DirectiveNotFoundException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.GrammarMigrator; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.RecipeParser; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.TransientVariableScope; -import io.cdap.wrangler.api.parser.SyntaxError; -import io.cdap.wrangler.executor.RecipePipelineExecutor; -import io.cdap.wrangler.parser.GrammarBasedParser; -import io.cdap.wrangler.parser.MigrateToV2; -import io.cdap.wrangler.parser.RecipeCompiler; -import io.cdap.wrangler.proto.Contexts; -import io.cdap.wrangler.registry.CompositeDirectiveRegistry; -import io.cdap.wrangler.registry.SystemDirectiveRegistry; -import io.cdap.wrangler.schema.TransientStoreKeys; -import org.junit.Assert; - -import java.util.Iterator; -import java.util.List; - -/** - * Utilities for testing. - */ -public final class TestingRig { - - private TestingRig() { - // Avoid creation of this object. - } - - /** - * - * @param recipe directives to be executed. - * @param rows input data - * @param inputSchema {@link Schema} of the input data - * @return {@link Schema} of output after transformation - */ - public static Schema executeAndGetSchema(String[] recipe, List rows, Schema inputSchema) - throws DirectiveParseException, DirectiveLoadException, RecipeException { - ExecutorContext context = new TestingPipelineContext().setSchemaManagementEnabled(); - context.getTransientStore().set(TransientVariableScope.GLOBAL, TransientStoreKeys.INPUT_SCHEMA, inputSchema); - execute(recipe, rows, context); - return context.getTransientStore().get(TransientStoreKeys.OUTPUT_SCHEMA); - } - - /** - * Executes the directives on the record specified. - * - * @param recipe to be executed. - * @param rows to be executed on directives. - * @return transformed directives. - */ - public static List execute(String[] recipe, List rows) - throws RecipeException, DirectiveParseException, DirectiveLoadException { - return execute(recipe, rows, new TestingPipelineContext()); - } - - public static List execute(String[] recipe, List rows, ExecutorContext context) - throws RecipeException, DirectiveParseException, DirectiveLoadException { - CompositeDirectiveRegistry registry = new CompositeDirectiveRegistry( - SystemDirectiveRegistry.INSTANCE - ); - - String migrate = new MigrateToV2(recipe).migrate(); - RecipeParser parser = new GrammarBasedParser(Contexts.SYSTEM, migrate, registry); - return new RecipePipelineExecutor(parser, context).execute(rows); - } - - /** - * Executes the directives on the record specified and returns the results as well as the errors. - * - * @param recipe to be executed. - * @param rows to be executed on directives. - * @return transformed directives and errors. - */ - public static Pair, List> executeWithErrors(String[] recipe, List rows) - throws RecipeException, DirectiveParseException, DirectiveLoadException, DirectiveNotFoundException { - return executeWithErrors(recipe, rows, new TestingPipelineContext()); - } - - public static Pair, List> executeWithErrors(String[] recipe, List rows, ExecutorContext context) - throws RecipeException, DirectiveParseException { - CompositeDirectiveRegistry registry = new CompositeDirectiveRegistry( - SystemDirectiveRegistry.INSTANCE - ); - - String migrate = new MigrateToV2(recipe).migrate(); - RecipeParser parser = new GrammarBasedParser(Contexts.SYSTEM, migrate, registry); - RecipePipeline pipeline = new RecipePipelineExecutor(parser, context); - List results = pipeline.execute(rows); - List errors = pipeline.errors(); - return new Pair<>(results, errors); - } - - public static RecipePipeline execute(String[] recipe) - throws RecipeException, DirectiveParseException, DirectiveLoadException, DirectiveNotFoundException { - CompositeDirectiveRegistry registry = new CompositeDirectiveRegistry( - SystemDirectiveRegistry.INSTANCE - ); - - String migrate = new MigrateToV2(recipe).migrate(); - RecipeParser parser = new GrammarBasedParser(Contexts.SYSTEM, migrate, registry); - return new RecipePipelineExecutor(parser, new TestingPipelineContext()); - } - - public static RecipeParser parse(String[] recipe) throws DirectiveParseException, DirectiveLoadException { - CompositeDirectiveRegistry registry = new CompositeDirectiveRegistry( - SystemDirectiveRegistry.INSTANCE - ); - - String migrate = new MigrateToV2(recipe).migrate(); - return new GrammarBasedParser(Contexts.SYSTEM, migrate, registry); - } - - public static CompileStatus compile(String[] recipe) throws CompileException, DirectiveParseException { - GrammarMigrator migrator = new MigrateToV2(recipe); - Compiler compiler = new RecipeCompiler(); - return compiler.compile(migrator.migrate()); - } - - public static void compileSuccess(String[] recipe) throws CompileException, DirectiveParseException { - CompileStatus status = compile(recipe); - Assert.assertTrue(status.isSuccess()); - } - - public static void compileFailure(String[] recipe) throws CompileException, DirectiveParseException { - CompileStatus status = compile(recipe); - if (!status.isSuccess()) { - Iterator iterator = status.getErrors(); - while (iterator.hasNext()) { - System.out.println(iterator.next().toString()); - } - } - Assert.assertFalse(status.isSuccess()); - } -} - diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/clients/SchemaRegistryClientTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/clients/SchemaRegistryClientTest.java deleted file mode 100644 index 719796672..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/clients/SchemaRegistryClientTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.clients; - -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import io.cdap.cdap.api.common.Bytes; -import io.cdap.http.HandlerContext; -import io.cdap.http.HttpHandler; -import io.cdap.http.HttpResponder; -import io.cdap.http.NettyHttpService; -import io.netty.handler.codec.http.HttpRequest; -import io.netty.handler.codec.http.HttpResponseStatus; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import java.net.HttpURLConnection; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; - -/** - * Tests {@link SchemaRegistryClient} - * - * NOTE: Due to issues with the Guava inclusion in the core, the {@link io.cdap.cdap.test.TestBase} has - * issue loading class. Hence, this test simulates the service and not actually tests the service. - */ -public class SchemaRegistryClientTest { - private static final Gson GSON = new Gson(); - private static NettyHttpService httpService; - private static String baseURL; - private static SchemaRegistryClient client; - - @Before - public void startService() throws Exception { - List handlers = new ArrayList<>(); - handlers.add(new ServiceHandler()); - httpService = NettyHttpService.builder("SchemaService") - .setHttpHandlers(handlers) - .build(); - httpService.start(); - int port = httpService.getBindAddress().getPort(); - baseURL = "http://localhost:" + port; - client = new SchemaRegistryClient(baseURL); - } - - @After - public void stopService() throws Exception { - httpService.stop(); - } - - public static class OKResponse { - public OKResponse(int status, String message) { - this.status = status; - this.message = message; - } - private String message; - - public int getStatus() { - return status; - } - - private int status; - - public String getMessage() { - return message; - } - } - - public static class ServiceHandler implements HttpHandler { - @Override - public void init(HandlerContext handlerContext) { - // no-op - } - - @Override - public void destroy(HandlerContext handlerContext) { - // no-op - } - - @PUT - @Path("contexts/{context}/schemas") - public void append(HttpRequest request, HttpResponder responder, @PathParam("context") String context) { - OKResponse response = new OKResponse(200, "Successfully created schema entry with id '%s', name '%s'"); - responder.sendJson(HttpResponseStatus.OK, GSON.toJson(response)); - } - - @GET - @Path("contexts/{context}/schemas/foo/versions/1") - public void get(HttpRequest request, HttpResponder responder, @PathParam("context") String context) { - JsonObject response = new JsonObject(); - JsonArray array = new JsonArray(); - JsonObject object = new JsonObject(); - object.addProperty("id", "foo"); - object.addProperty("name", "Foo Name"); - object.addProperty("version", 1); - object.addProperty("description", "Foo Description"); - object.addProperty("type", "avro"); - object.addProperty("current", 1); - object.addProperty("specification", Bytes.toHexString("{\"foo\" : \"test\"}".getBytes(StandardCharsets.UTF_8))); - JsonArray versions = new JsonArray(); - Set vs = new HashSet<>(); - vs.add(2L); - vs.add(3L); - for (Long v : vs) { - versions.add(new JsonPrimitive(v)); - } - object.add("versions", versions); - array.add(object); - response.addProperty("status", HttpURLConnection.HTTP_OK); - response.addProperty("message", "Success"); - response.addProperty("count", array.size()); - response.add("values", array); - responder.sendJson(HttpResponseStatus.OK, GSON.toJson(response)); - } - - @GET - @Path("contexts/{context}/schemas/foo/versions") - public void getVersions(HttpRequest request, HttpResponder responder, @PathParam("context") String context) { - Set versions = new HashSet<>(); - versions.add(1L); - versions.add(2L); - versions.add(3L); - versions.add(4L); - JsonObject response = new JsonObject(); - JsonArray array = new JsonArray(); - for (Long version : versions) { - array.add(new JsonPrimitive(version)); - } - response.addProperty("status", HttpURLConnection.HTTP_OK); - response.addProperty("message", "Success"); - response.addProperty("count", array.size()); - response.add("values", array); - responder.sendJson(HttpResponseStatus.OK, GSON.toJson(response)); - } - } - - @Test - public void testGetSchema() throws Exception { - byte[] bytes = client.getSchema("c0", "foo", 1); - Assert.assertNotNull(bytes); - String str = Bytes.toString(bytes); - Assert.assertEquals("{\"foo\" : \"test\"}", str); - } - - @Test - public void testGetVersions() throws Exception { - List response = client.getVersions("c0", "foo"); - Assert.assertEquals(4, response.size()); - Assert.assertNotNull(response); - } - - @Test (expected = RestClientException.class) - public void testGetWrongSchemaIdVersions() throws Exception { - client.getVersions("c0", "foo1"); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/codec/BinaryAvroDecoderTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/codec/BinaryAvroDecoderTest.java deleted file mode 100644 index ca400da6c..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/codec/BinaryAvroDecoderTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.codec; - -import io.cdap.wrangler.api.Row; -import org.apache.avro.Schema; -import org.apache.avro.generic.GenericData; -import org.apache.avro.generic.GenericDatumWriter; -import org.apache.avro.generic.GenericRecord; -import org.apache.avro.io.BinaryEncoder; -import org.apache.avro.io.DatumWriter; -import org.apache.avro.io.EncoderFactory; -import org.junit.Assert; -import org.junit.Test; - -import java.io.ByteArrayOutputStream; -import java.util.List; - -/** - * Tests {@link BinaryAvroDecoder} - */ -public class BinaryAvroDecoderTest { - - private static final String SCHEMA = "{\"namespace\": \"example.avro\",\n" + - " \"type\": \"record\",\n" + - " \"name\": \"User\",\n" + - " \"fields\": [\n" + - " {\"name\": \"name\", \"type\": \"string\"},\n" + - " {\"name\": \"favorite_number\", \"type\": [\"int\", \"null\"]},\n" + - " {\"name\": \"favorite_color\", \"type\": [\"string\", \"null\"]}\n" + - " ]\n" + - "}"; - - @Test - public void testBasicFunctionality() throws Exception { - // Parse schema and validate fields. - Schema.Parser parser = new Schema.Parser(); - Schema schema = parser.parse(SCHEMA); - Assert.assertTrue(schema != null); - List fields = schema.getFields(); - Assert.assertEquals(3, fields.size()); - - // Create generic rows. - GenericRecord user1 = new GenericData.Record(schema); - user1.put("name", "Root"); - user1.put("favorite_number", 8); - - GenericRecord user2 = new GenericData.Record(schema); - user2.put("name", "Ben"); - user2.put("favorite_number", 7); - user2.put("favorite_color", "red"); - - // Write rows to byte array stream. - DatumWriter datumWriter = new GenericDatumWriter<>(schema); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(out, null); - datumWriter.write(user1, encoder); - datumWriter.write(user2, encoder); - encoder.flush(); - out.close(); - - byte[] bytes = out.toByteArray(); - - BinaryAvroDecoder decoder = new BinaryAvroDecoder(schema); - List rows = decoder.decode(bytes); - Assert.assertEquals(2, rows.size()); - Assert.assertEquals("Root", rows.get(0).getValue("name")); - Assert.assertEquals("Ben", rows.get(1).getValue("name")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/codec/JsonAvroDecoderTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/codec/JsonAvroDecoderTest.java deleted file mode 100644 index c89083fc6..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/codec/JsonAvroDecoderTest.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.codec; - -import io.cdap.wrangler.api.Row; -import org.apache.avro.Schema; -import org.apache.avro.generic.GenericData; -import org.apache.avro.generic.GenericDatumWriter; -import org.apache.avro.generic.GenericRecord; -import org.apache.avro.io.DatumWriter; -import org.apache.avro.io.EncoderFactory; -import org.apache.avro.io.JsonEncoder; -import org.junit.Assert; -import org.junit.Test; - -import java.io.ByteArrayOutputStream; -import java.util.List; - -/** - * Tests {@link JsonAvroDecoder} - */ -public class JsonAvroDecoderTest { - - private static final String SCHEMA = "{\"namespace\": \"example.avro\",\n" + - " \"type\": \"record\",\n" + - " \"name\": \"User\",\n" + - " \"fields\": [\n" + - " {\"name\": \"name\", \"type\": \"string\"},\n" + - " {\"name\": \"favorite_number\", \"type\": [\"int\", \"null\"]},\n" + - " {\"name\": \"favorite_color\", \"type\": [\"string\", \"null\"]}\n" + - " ]\n" + - "}"; - - @Test - public void testBasicFunctionality() throws Exception { - // Parse schema and validate fields. - Schema.Parser parser = new Schema.Parser(); - Schema schema = parser.parse(SCHEMA); - Assert.assertTrue(schema != null); - List fields = schema.getFields(); - Assert.assertEquals(3, fields.size()); - - // Create generic rows. - GenericRecord user1 = new GenericData.Record(schema); - user1.put("name", "Root"); - user1.put("favorite_number", 8); - - GenericRecord user2 = new GenericData.Record(schema); - user2.put("name", "Ben"); - user2.put("favorite_number", 7); - user2.put("favorite_color", "red"); - - // Write rows to byte array stream. - DatumWriter datumWriter = new GenericDatumWriter<>(schema); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - JsonEncoder encoder = EncoderFactory.get().jsonEncoder(schema, out); - datumWriter.write(user1, encoder); - datumWriter.write(user2, encoder); - encoder.flush(); - out.close(); - - byte[] bytes = out.toByteArray(); - - JsonAvroDecoder decoder = new JsonAvroDecoder(schema); - List rows = decoder.decode(bytes); - Assert.assertEquals(2, rows.size()); - Assert.assertEquals("Root", rows.get(0).getValue("name")); - Assert.assertEquals("Ben", rows.get(1).getValue("name")); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/codec/ProtobufDecoderUsingDescriptorTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/codec/ProtobufDecoderUsingDescriptorTest.java deleted file mode 100644 index fbc8a9e75..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/codec/ProtobufDecoderUsingDescriptorTest.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.codec; - -import com.example.tutorial.AddressBookProtos; -import io.cdap.wrangler.api.Row; -import org.apache.commons.io.IOUtils; -import org.junit.Assert; -import org.junit.Test; - -import java.io.InputStream; -import java.util.List; - -/** - * Tests {@link ProtobufDecoderUsingDescriptor} - */ -public class ProtobufDecoderUsingDescriptorTest { - - @Test - public void testBasicConversion() throws Exception { - AddressBookProtos.Person john = AddressBookProtos.Person.newBuilder() - .setId(1234) - .setName("Joltie Root") - .setEmail("joltie.root@example.com") - .addPhones( - AddressBookProtos.Person.PhoneNumber.newBuilder() - .setNumber("555-4321") - .setType(AddressBookProtos.Person.PhoneType.HOME) - ).build(); - - AddressBookProtos.AddressBook book = AddressBookProtos.AddressBook.newBuilder() - .addPeople(john).build(); - - byte[] addressBook = book.toByteArray(); - - InputStream is = null; - try { - is = this.getClass().getClassLoader().getResourceAsStream("addressbook.desc"); - byte[] bytes = IOUtils.toByteArray(is); - Decoder decoder = new ProtobufDecoderUsingDescriptor(bytes, "AddressBook"); - Assert.assertNotNull(decoder); - List rows = decoder.decode(addressBook); - Assert.assertNotNull(rows); - Assert.assertEquals("Joltie Root", rows.get(0).getValue("people_name")); - Assert.assertEquals(1234, rows.get(0).getValue("people_id")); - Assert.assertEquals("joltie.root@example.com", rows.get(0).getValue("people_email")); - Assert.assertEquals("555-4321", rows.get(0).getValue("people_phones_number")); - Assert.assertEquals("HOME", rows.get(0).getValue("people_phones_type")); - } finally { - if (is != null) { - is.close(); - } - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/config/DirectiveConfigTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/config/DirectiveConfigTest.java deleted file mode 100644 index 8d624412d..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/config/DirectiveConfigTest.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.config; - -import com.google.gson.Gson; -import io.cdap.wrangler.api.DirectiveConfig; -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests {@link DirectiveConfig} - * - * @see DirectiveConfig - * @see io.cdap.wrangler.api.DirectiveAlias - * @see io.cdap.wrangler.api.DirectiveEnforcer - */ -public class DirectiveConfigTest { - - private static final String SPECIFICATION = "{\n" + - "\t\"exclusions\" : [\n" + - "\t\t\"parse-as-csv\",\n" + - "\t\t\"parse-as-excel\",\n" + - "\t\t\"set\",\n" + - "\t\t\"invoke-http\"\n" + - "\t],\n" + - "\n" + - "\t\"aliases\" : {\n" + - "\t\t\"json-parser\" : \"parse-as-json\",\n" + - "\t\t\"js-parser\" : \"parse-as-json\"\n" + - "\t}\n" + - "}"; - - private static final String ONLY_EXCLUSIONS = "\n" + - "{\n" + - "\t\"exclusions\" : [\n" + - "\t\t\"parse-as-csv\",\n" + - "\t\t\"parse-as-excel\",\n" + - "\t\t\"set\",\n" + - "\t\t\"invoke-http\"\n" + - "\t]\n" + - "}"; - - private static final String ONLY_ALIASES = "{\n" + - "\t\"aliases\" : {\n" + - "\t\t\"json-parser\" : \"parse-as-json\",\n" + - "\t\t\"js-parser\" : \"parse-as-json\"\n" + - "\t}\n" + - "}"; - - private static final String EMPTY = "{}"; - - @Test - public void testParsingOfConfiguration() { - DirectiveConfig config = new Gson().fromJson(SPECIFICATION, DirectiveConfig.class); - Assert.assertNotNull(config); - Assert.assertTrue(config.isExcluded("parse-as-csv")); - Assert.assertFalse(config.isExcluded("parse-as-json")); - Assert.assertEquals("parse-as-json", config.getAliasName("json-parser")); - } - - @Test - public void testParsingOnlyExclusions() { - DirectiveConfig config = new Gson().fromJson(ONLY_EXCLUSIONS, DirectiveConfig.class); - Assert.assertNotNull(config); - Assert.assertTrue(config.isExcluded("parse-as-csv")); - Assert.assertFalse(config.isExcluded("parse-as-json")); - Assert.assertNull(config.getAliasName("json-parser")); - } - - @Test - public void testParsingOnlyAliases() { - DirectiveConfig config = new Gson().fromJson(ONLY_ALIASES, DirectiveConfig.class); - Assert.assertNotNull(config); - Assert.assertFalse(config.isExcluded("parse-as-csv")); - Assert.assertEquals("parse-as-json", config.getAliasName("json-parser")); - } - - @Test - public void testParsingEmpty() { - DirectiveConfig config = new Gson().fromJson(EMPTY, DirectiveConfig.class); - Assert.assertNotNull(config); - Assert.assertFalse(config.isExcluded("parse-as-csv")); - Assert.assertNull(config.getAliasName("json-parser")); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/datamodel/HTTPSchemaLoaderTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/datamodel/HTTPSchemaLoaderTest.java deleted file mode 100644 index 71744e797..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/datamodel/HTTPSchemaLoaderTest.java +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.datamodel; - -import io.cdap.http.HandlerContext; -import io.cdap.http.HttpHandler; -import io.cdap.http.HttpResponder; -import io.cdap.http.NettyHttpService; -import io.netty.handler.codec.http.HttpRequest; -import io.netty.handler.codec.http.HttpResponseStatus; -import org.apache.avro.Schema; -import org.apache.commons.collections4.SetValuedMap; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; - -/** - * Tests {@link HTTPSchemaLoader} - */ -public class HTTPSchemaLoaderTest { - private static final String DATA_MODEL_NAME = "google.com.datamodels.TEST_DATA_MODEL"; - private static NettyHttpService httpService; - - @Before - public void startService() throws Exception { - List handlers = new ArrayList<>(); - handlers.add(new HTTPSchemaLoaderTest.ServiceHandler()); - httpService = NettyHttpService.builder("datamodel-bucket") - .setHttpHandlers(handlers) - .build(); - httpService.start(); - } - - @After - public void stopService() throws Exception { - httpService.stop(); - } - - public static class ServiceHandler implements HttpHandler { - private static final String MANIFEST_JSON = "" - + "{\n" - + " \"standards\": {\n" - + " \"TEST_DATA_MODEL\": {\n" - + " \"format\": \"avsc\",\n" - + " \"hash\": \"d8c119c43873ba2571c72ecccde8bb8c7b237746b227daf3ba78caf85feaca57\"\n" - + " }\n" - + " }\n" - + "}"; - - private static final String DATA_MODEL_RESOURCE = "{\n" - + " \"type\": \"record\",\n" - + " \"name\": \"TEST_DATA_MODEL\",\n" - + " \"namespace\": \"google.com.datamodels\",\n" - + " \"_revision\": \"1\", \n" - + " \"fields\": [\n" - + " {\n" - + " \"name\": \"TEST_MODEL\",\n" - + " \"type\": [\n" - + " \"null\", {\n" - + " \"type\": \"record\",\n" - + " \"name\": \"TEST_MODEL\",\n" - + " \"namespace\": \"google.com.datamodels.Model\",\n" - + " \"fields\": [\n" - + " {\n" - + " \"name\": \"int_field\",\n" - + " \"type\": [\"int\"]\n" - + " }\n" - + " ]}\n" - + " ]\n" - + " }\n" - + " ]\n" - + "}"; - - @Override - public void init(HandlerContext handlerContext) { - // no-op - } - - @Override - public void destroy(HandlerContext handlerContext) { - // no-op - } - - @GET - @Path("test-bucket/{resource}") - public void get(HttpRequest request, HttpResponder responder, @PathParam("resource") String resource) { - if (resource.equals("manifest.json")) { - responder.sendJson(HttpResponseStatus.OK, MANIFEST_JSON); - } else if (resource.equals("TEST_DATA_MODEL.avsc")) { - responder.sendJson(HttpResponseStatus.OK, DATA_MODEL_RESOURCE); - } - } - - @GET - @Path("errors/{resource}") - public void errors(HttpRequest request, HttpResponder responder, @PathParam("resource") String resource) { - String manifest = null; - String dataModel = null; - switch (resource) { - case "missing_manifest.json": - responder.sendStatus(HttpResponseStatus.NOT_FOUND); - break; - case "empty_manifest.json": - responder.sendJson(HttpResponseStatus.OK, "{}"); - break; - case "manifest_standard_mismatch.json": - manifest = "" - + "{\n" - + " \"standards\": {\n" - + " \"TEST_DATA_MODEL\": {\n" - + " \"format\": \"json\"\n" - + " }\n" - + " }\n" - + "}"; - responder.sendJson(HttpResponseStatus.OK, manifest); - break; - case "manifest_invalid_data_model.json": - manifest = "" - + "{\n" - + " \"standards\": {\n" - + " \"INVALID_TEST_DATA_MODEL\": {\n" - + " \"format\": \"avsc\"\n" - + " }\n" - + " }\n" - + "}"; - responder.sendJson(HttpResponseStatus.OK, manifest); - break; - case "INVALID_TEST_DATA_MODEL.avsc": - dataModel = "{\n" - + " \"type\": \"__INVALID_TYPE__\",\n" - + " \"name\": \"TEST_DATA_MODEL\",\n" - + " \"_revision\": \"1\", \n" - + " \"fields\": []\n" - + "}"; - responder.sendJson(HttpResponseStatus.OK, dataModel); - break; - } - } - } - - @Test - public void testLoad_dataModels_successfulLoad() throws Exception { - String base = String.format("http://localhost:%d/test-bucket", httpService.getBindAddress().getPort()); - HTTPSchemaLoader client = new HTTPSchemaLoader(base, "manifest.json"); - SetValuedMap glossary = client.load(); - - Assert.assertNotNull(glossary); - Assert.assertEquals(1, glossary.size()); - Set dataModels = glossary.get(DATA_MODEL_NAME); - Assert.assertEquals(1, dataModels.size()); - - Schema dataModel = (Schema) dataModels.toArray()[0]; - Assert.assertEquals(DATA_MODEL_NAME, dataModel.getFullName()); - Assert.assertEquals(1, dataModel.getFields().size()); - Assert.assertNotNull(dataModel.getField("TEST_MODEL")); - - Schema model = dataModel.getField("TEST_MODEL").schema(); - Assert.assertNotNull(model); - - Schema modelType = model.getTypes().stream() - .filter(t -> t.getType() == Schema.Type.RECORD) - .findFirst() - .orElse(null); - Assert.assertNotNull(modelType); - Assert.assertEquals("TEST_MODEL", modelType.getName()); - Assert.assertEquals(1, modelType.getFields().size()); - Assert.assertNotNull(modelType.getField("int_field")); - } - - @Test(expected = IOException.class) - public void testLoad_dataModels_manifestNotFound() throws Exception { - String base = String.format("http://localhost:%d/errors", httpService.getBindAddress().getPort()); - HTTPSchemaLoader client = new HTTPSchemaLoader(base, "missing_manifest.json"); - client.load(); - } - - @Test - public void testLoad_dataModels_emptyManifest() throws Exception { - String base = String.format("http://localhost:%d/errors", httpService.getBindAddress().getPort()); - HTTPSchemaLoader client = new HTTPSchemaLoader(base, "empty_manifest.json"); - SetValuedMap glossary = client.load(); - Assert.assertTrue(glossary.isEmpty()); - } - - @Test - public void testLoad_dataModels_emptyStandards() throws Exception { - String base = String.format("http://localhost:%d/errors", httpService.getBindAddress().getPort()); - HTTPSchemaLoader client = new HTTPSchemaLoader(base, "manifest_standard_mismatch.json"); - SetValuedMap glossary = client.load(); - Assert.assertTrue(glossary.isEmpty()); - } - - @Test - public void testLoad_dataModels_parserError() throws Exception { - String base = String.format("http://localhost:%d/errors", httpService.getBindAddress().getPort()); - HTTPSchemaLoader client = new HTTPSchemaLoader(base, "manifest_invalid_data_model.json"); - SetValuedMap glossary = client.load(); - Assert.assertTrue(glossary.isEmpty()); - } -} - diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/dq/ConvertDistancesTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/dq/ConvertDistancesTest.java deleted file mode 100644 index aebf5684e..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/dq/ConvertDistancesTest.java +++ /dev/null @@ -1,817 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.dq; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests {@link ConvertDistances} - */ -public class ConvertDistancesTest { - - private double delta = 1.0E-34; - - @Test - public void testConvertDoubleNan() { - double nan = Double.NaN; - ConvertDistances converter = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(nan, converter.convert(nan), delta); - } - - @Test - public void testConvertZero() { - double zero = 0.0; - ConvertDistances converter = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(zero, converter.convert(zero), delta); - } - - @Test - public void testConvertMaxValue() { - double max = Double.MAX_VALUE; - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(Double.POSITIVE_INFINITY, converter0.convert(max), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(1.900163142869793E289, converter1.convert(max), delta); - } - - @Test - public void testConvertMinValue() { - double min = Double.MIN_VALUE; - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(0.0, converter0.convert(min), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(0.0, converter1.convert(min), delta); - } - - @Test - public void testConvertDefault() { - double mi = 1.0; - double km = 1.609344; - - ConvertDistances converter = new ConvertDistances(); - Assert.assertEquals(km, converter.convert(mi), delta); - } - - @Test - public void testConvertMillimeter() { - double mm = 1.0; - double cm = 0.1; - double dm = 0.01; - double m = 0.001; - double dam = 0.0001; - double hm = 0.00001; - double km = 0.000001; - double in = 0.03937007874015748; - double ft = 0.0032808398950131233; - double yd = 0.0010936132983377078; - double mi = 6.213711922373339E-7; - double nm = 5.399568034557235E-7; - double ly = 1.0570008340246155E-19; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter0.convert(mm), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter1.convert(mm), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter2.convert(mm), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter3.convert(mm), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter4.convert(mm), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(mm), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter6.convert(mm), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter7.convert(mm), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter8.convert(mm), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter9.convert(mm), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter10.convert(mm), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter11.convert(mm), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.MILLIMETER, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(mm), delta); - } - - @Test - public void testConvertCentimeter() { - double cm = 1.0; - double mm = 10.0; - double dm = 0.1; - double m = 0.01; - double dam = 0.001; - double hm = 0.0001; - double km = 0.00001; - double in = 0.3937007874015748; - double ft = 0.032808398950131233; - double yd = 0.010936132983377077; - double mi = 6.213711922373339E-6; - double nm = 5.399568034557236E-6; - double ly = 1.0570008340246153E-18; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter0.convert(cm), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(cm), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter2.convert(cm), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter3.convert(cm), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter4.convert(cm), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(cm), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter6.convert(cm), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter7.convert(cm), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter8.convert(cm), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter9.convert(cm), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter10.convert(cm), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter11.convert(cm), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.CENTIMETER, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(cm), delta); - } - - @Test - public void testConvertDecimeter() { - double dm = 1.0; - double mm = 100.0; - double cm = 10.0; - double m = 0.1; - double dam = 0.01; - double hm = 0.001; - double km = 0.0001; - double in = 3.937007874015748; - double ft = 0.32808398950131233; - double yd = 0.10936132983377078; - double mi = 6.213711922373339E-5; - double nm = 5.399568034557236E-5; - double ly = 1.0570008340246154E-17; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter0.convert(dm), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(dm), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter2.convert(dm), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter3.convert(dm), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter4.convert(dm), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(dm), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter6.convert(dm), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter7.convert(dm), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter8.convert(dm), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter9.convert(dm), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter10.convert(dm), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter11.convert(dm), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.DECIMETER, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(dm), delta); - } - - @Test - public void testConvertMeter() { - double m = 1.0; - double mm = 1000.0; - double cm = 100.0; - double dm = 10.0; - double dam = 0.1; - double hm = 0.01; - double km = 0.001; - double in = 39.37007874015748; - double ft = 3.2808398950131235; - double yd = 1.0936132983377078; - double mi = 6.213711922373339E-4; - double nm = 5.399568034557236E-4; - double ly = 1.0570008340246154E-16; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter0.convert(m), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(m), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter2.convert(m), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter3.convert(m), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter4.convert(m), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(m), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter6.convert(m), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter7.convert(m), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter8.convert(m), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter9.convert(m), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter10.convert(m), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter11.convert(m), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.METER, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(m), delta); - } - - @Test - public void testConvertDekameter() { - double dam = 1.0; - double mm = 10000.0; - double cm = 1000.0; - double dm = 100.0; - double m = 10; - double hm = 0.1; - double km = 0.01; - double in = 393.7007874015748; - double ft = 32.808398950131235; - double yd = 10.936132983377078; - double mi = 0.006213711922373339; - double nm = 0.005399568034557236; - double ly = 1.0570008340246154E-15; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter0.convert(dam), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(dam), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter2.convert(dam), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter3.convert(dam), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter4.convert(dam), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(dam), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter6.convert(dam), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter7.convert(dam), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter8.convert(dam), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter9.convert(dam), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter10.convert(dam), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter11.convert(dam), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.DEKAMETER, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(dam), delta); - } - - @Test - public void testConvertHectometer() { - double hm = 1.0; - double mm = 100000.0; - double cm = 10000.0; - double dm = 1000.0; - double m = 100.0; - double dam = 10.0; - double km = 0.1; - double in = 3937.007874015748; - double ft = 328.0839895013124; - double yd = 109.36132983377078; - double mi = 0.06213711922373339; - double nm = 0.05399568034557236; - double ly = 1.0570008340246154E-14; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter0.convert(hm), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(hm), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter2.convert(hm), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter3.convert(hm), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter4.convert(hm), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter5.convert(hm), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter6.convert(hm), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter7.convert(hm), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter8.convert(hm), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter9.convert(hm), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter10.convert(hm), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter11.convert(hm), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.HECTOMETER, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(hm), delta); - } - - @Test - public void testConvertKilometer() { - double km = 1.0; - double mm = 1000000.0; - double cm = 100000.0; - double dm = 10000.0; - double m = 1000.0; - double dam = 100.0; - double hm = 10.0; - double in = 39370.07874015748; - double ft = 3280.8398950131236; - double yd = 1093.6132983377078; - double mi = 0.6213711922373339; - double nm = 0.5399568034557236; - double ly = 1.0570008340246153E-13; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter0.convert(km), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(km), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter2.convert(km), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter3.convert(km), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter4.convert(km), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(km), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter6.convert(km), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter7.convert(km), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter8.convert(km), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter9.convert(km), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter10.convert(km), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter11.convert(km), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.KILOMETER, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(km), delta); - } - - @Test - public void testConvertInch() { - double in = 1.0; - double mm = 25.4; - double cm = 2.54; - double dm = 0.254; - double m = 0.0254; - double dam = 0.00254; - double hm = 0.000254; - double km = 2.54E-5; - double ft = 0.08333333333333334; - double yd = 0.02777777777777778; - double mi = 1.578282828282828E-5; - double nm = 1.371490280777538E-5; - double ly = 2.684782118422523E-18; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter0.convert(in), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(in), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter2.convert(in), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter3.convert(in), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter4.convert(in), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(in), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter6.convert(in), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter7.convert(in), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter8.convert(in), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter9.convert(in), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter10.convert(in), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter11.convert(in), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.INCH, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(in), delta); - } - - @Test - public void testConvertFoot() { - double ft = 1.0; - double mm = 304.8; - double cm = 30.48; - double dm = 3.048; - double m = 0.3048; - double dam = 0.03048; - double hm = 0.003048; - double km = 3.048E-4; - double in = 12; - double yd = 0.3333333333333333; - double mi = 1.8939393939393937E-4; - double nm = 1.6457883369330455E-4; - double ly = 3.221738542107028E-17; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter0.convert(ft), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(ft), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter2.convert(ft), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter3.convert(ft), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter4.convert(ft), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(ft), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter6.convert(ft), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter7.convert(ft), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter8.convert(ft), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter9.convert(ft), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter10.convert(ft), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter11.convert(ft), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.FOOT, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(ft), delta); - } - - @Test - public void testConvertYard() { - double yd = 1.0; - double mm = 914.4; - double cm = 91.44; - double dm = 9.144; - double m = 0.9144; - double dam = 0.09144; - double hm = 0.009144; - double km = 0.0009144; - double in = 36.0; - double ft = 3.0; - double mi = 5.681818181818182E-4; - double nm = 4.937365010799136E-4; - double ly = 9.665215626321083E-17; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter0.convert(yd), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(yd), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter2.convert(yd), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter3.convert(yd), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter4.convert(yd), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(yd), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter6.convert(yd), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter7.convert(yd), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter8.convert(yd), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter9.convert(yd), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter10.convert(yd), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter11.convert(yd), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.YARD, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(yd), delta); - } - - @Test - public void testConvertMile() { - double mi = 1.0; - double mm = 1609344; - double cm = 160934.4; - double dm = 16093.44; - double m = 1609.344; - double dam = 160.9344; - double hm = 16.09344; - double km = 1.609344; - double in = 63360.0; - double ft = 5280.0; - double yd = 1760.0; - double nm = 0.868976241900648; - double ly = 1.7010779502325107E-13; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter0.convert(mi), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(mi), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter2.convert(mi), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter3.convert(mi), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter4.convert(mi), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(mi), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter6.convert(mi), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter7.convert(mi), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter8.convert(mi), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter9.convert(mi), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter10.convert(mi), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter11.convert(mi), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.MILE, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(mi), delta); - } - - @Test - public void testConvertNauticalMile() { - double nm = 1.0; - double mm = 1852000.0; - double cm = 185200.0; - double dm = 18520.0; - double m = 1852.0; - double dam = 185.2; - double hm = 18.52; - double km = 1.852; - double in = 72913.38582677166; - double ft = 6076.115485564304; - double yd = 2025.3718285214347; - double mi = 1.1507794480235425; - double ly = 1.9575655446135877E-13; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter0.convert(nm), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(nm), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter2.convert(nm), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter3.convert(nm), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter4.convert(nm), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(nm), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter6.convert(nm), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter7.convert(nm), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter8.convert(nm), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter9.convert(nm), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter10.convert(nm), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter11.convert(nm), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.NAUTICAL_MILE, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter12.convert(nm), delta); - } - - @Test - public void testConvertLightYear() { - double ly = 1.0; - double mm = 9.4607304725808E18; - double cm = 9.4607304725808E17; - double dm = 9.4607304725808E16; - double m = 9.4607304725808E15; - double dam = 9.4607304725808E14; - double hm = 9.4607304725808E13; - double km = 9.4607304725808E12; - double in = 3.7246970364491341E17; - double ft = 3.1039141970409452E16; - double yd = 1.034638065680315E16; - double mi = 5.878625373183607E12; - double nm = 5.108385784330886E12; - - ConvertDistances converter0 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.LIGHT_YEAR); - Assert.assertEquals(ly, converter0.convert(ly), delta); - ConvertDistances converter1 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.MILLIMETER); - Assert.assertEquals(mm, converter1.convert(ly), delta); - ConvertDistances converter2 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.CENTIMETER); - Assert.assertEquals(cm, converter2.convert(ly), delta); - ConvertDistances converter3 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.DECIMETER); - Assert.assertEquals(dm, converter3.convert(ly), delta); - ConvertDistances converter4 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.METER); - Assert.assertEquals(m, converter4.convert(ly), delta); - ConvertDistances converter5 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.HECTOMETER); - Assert.assertEquals(hm, converter5.convert(ly), delta); - ConvertDistances converter6 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.DEKAMETER); - Assert.assertEquals(dam, converter6.convert(ly), delta); - ConvertDistances converter7 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.KILOMETER); - Assert.assertEquals(km, converter7.convert(ly), delta); - ConvertDistances converter8 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.INCH); - Assert.assertEquals(in, converter8.convert(ly), delta); - ConvertDistances converter9 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.FOOT); - Assert.assertEquals(ft, converter9.convert(ly), delta); - ConvertDistances converter10 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.YARD); - Assert.assertEquals(yd, converter10.convert(ly), delta); - ConvertDistances converter11 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.MILE); - Assert.assertEquals(mi, converter11.convert(ly), delta); - ConvertDistances converter12 = new ConvertDistances(ConvertDistances.Distance.LIGHT_YEAR, - ConvertDistances.Distance.NAUTICAL_MILE); - Assert.assertEquals(nm, converter12.convert(ly), delta); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/dq/ConvertStringTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/dq/ConvertStringTest.java deleted file mode 100644 index 0add6b3e5..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/dq/ConvertStringTest.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.dq; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Class description here. - */ -public class ConvertStringTest { - private static final String expected = "abc"; - - @Test - public void testRemoveTrailingAndLeading() { - - ConvertString convertString = new ConvertString(); - - // test for default character (whitespace) - Assert.assertEquals(expected, convertString.removeTrailingAndLeading(expected)); - Assert.assertEquals(expected, convertString.removeTrailingAndLeading(" abc")); - Assert.assertEquals(expected, convertString.removeTrailingAndLeading(" abc ")); - Assert.assertEquals(expected, convertString.removeTrailingAndLeading(" abc ")); - Assert.assertEquals(expected, convertString.removeTrailingAndLeading(" abc ")); - Assert.assertEquals(expected, convertString.removeTrailingAndLeading(" abc ")); - //$NON-NLS-2$ - Assert.assertEquals("ab c", convertString.removeTrailingAndLeading(" ab c")); - //$NON-NLS-2$ - Assert.assertEquals("a b c", convertString.removeTrailingAndLeading(" a b c ")); - - // test for other characters - //$NON-NLS-2$ - Assert.assertEquals(expected, convertString.removeTrailingAndLeading("\t" + expected, "\t")); - //$NON-NLS-2$ - Assert.assertEquals(expected, convertString.removeTrailingAndLeading(expected + "\t", "\t")); - Assert.assertEquals(expected, convertString.removeTrailingAndLeading('\u0009' + expected, "\t")); - Assert.assertEquals(expected, convertString.removeTrailingAndLeading('\u0009' + expected, '\u0009' + "")); - Assert.assertEquals(expected, convertString.removeTrailingAndLeading('\u0009' + expected + '\u0009' + '\u0009', - "\t")); - - //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - Assert.assertEquals("abc ", convertString.removeTrailingAndLeading("\t" + "abc ", "\t")); - //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ - Assert.assertEquals("a" + "\t" + "bc", convertString.removeTrailingAndLeading("\t" + "a" + "\t" + "bc", "\t")); - //$NON-NLS-2$ //$NON-NLS-3$ - Assert.assertEquals("\t" + expected, convertString.removeTrailingAndLeading("\t" + "abc ")); - //$NON-NLS-2$ //$NON-NLS-3 - Assert.assertEquals(expected, ("\t" + "abc ").trim()); - - //$NON-NLS-2$ - Assert.assertEquals(expected, convertString.removeTrailingAndLeading("\n" + expected, "\n")); - //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - Assert.assertEquals("abc ", convertString.removeTrailingAndLeading("\n" + "abc ", "\n")); - - Assert.assertEquals(expected, convertString.removeTrailingAndLeading(expected, "\r")); - //$NON-NLS-2$ - Assert.assertEquals(expected, convertString.removeTrailingAndLeading("\r" + expected, "\r")); - //$NON-NLS-2$ //$NON-NLS-3$ - Assert.assertEquals(expected, convertString.removeTrailingAndLeading("\r" + expected + "\r", "\r")); - //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - Assert.assertEquals("abc ", convertString.removeTrailingAndLeading("\r" + "abc ", "\r")); - //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - Assert.assertEquals("abc ", convertString.removeTrailingAndLeading("\r" + "abc " + "\r", "\r")); - - //$NON-NLS-2$ //$NON-NLS-3$ - Assert.assertEquals("bc", convertString.removeTrailingAndLeading(" abc", " a")); - //$NON-NLS-2$ //$NON-NLS-3$ - Assert.assertEquals(" a", convertString.removeTrailingAndLeading(" abc", "bc")); - //$NON-NLS-2$ //$NON-NLS-3$ - Assert.assertEquals("ab", convertString.removeTrailingAndLeading("cabc", "c")); - } - - @Test - public void testRemoveTrailingAndLeadingWhitespaces() { - ConvertString convertString = new ConvertString(); - String inputData = " " + expected; - for (String removechar : convertString.WHITESPACE_CHARS) { - inputData = inputData + removechar; - } - Assert.assertEquals(expected, convertString.removeTrailingAndLeadingWhitespaces(inputData)); - } - - @Test - public void testremoveDuplicate_CR() { - ConvertString convertString = new ConvertString("\r"); - String input = "a\rbccccdeaa\r\r\ry"; - Assert.assertEquals("a\rbccccdeaa\ry", convertString.removeRepeatedChar(input)); - } - - @Test - public void testremoveDuplicate_LF() { - ConvertString convertString = new ConvertString("\n"); - String input = "a\nbccccdeaa\n\n\ny"; - Assert.assertEquals("a\nbccccdeaa\ny", convertString.removeRepeatedChar(input)); - } - - @Test - public void testremoveDuplicate_CRLF() { - ConvertString convertString = new ConvertString("\r\n"); - String input = "a\r\nbccccdeaa\r\n\r\n\r\ny"; - Assert.assertEquals("a\r\nbccccdeaa\r\ny", convertString.removeRepeatedChar(input)); - } - - @Test - public void testremoveDuplicate_TAB() { - ConvertString convertString = new ConvertString("\t"); - String input = "a\tbccccdeaa\t\t\t\t\t\ty"; - Assert.assertEquals("a\tbccccdeaa\ty", convertString.removeRepeatedChar(input)); - } - - @Test - public void testremoveDuplicate_LETTER() { - ConvertString convertString = new ConvertString("c"); - String input = "atbccccdeaaCCtcy"; - Assert.assertEquals("atbcdeaaCCtcy", convertString.removeRepeatedChar(input)); - convertString = new ConvertString("a"); - input = "aaatbccccdeaaCCtcy"; - Assert.assertEquals("atbccccdeaCCtcy", convertString.removeRepeatedChar(input)); - convertString = new ConvertString("ac"); - input = "acacacactbccccdeaCCtaccy"; - Assert.assertEquals("actbccccdeaCCtaccy", convertString.removeRepeatedChar(input)); - - input = "abcdef"; - Assert.assertEquals("abcdef", convertString.removeRepeatedChar(input)); - } - - @Test - public void testremoveDuplicate_NULL1() { - ConvertString convertString = new ConvertString("c"); - String input = null; - Assert.assertEquals(null, convertString.removeRepeatedChar(input)); - input = ""; - Assert.assertEquals("", convertString.removeRepeatedChar(input)); - } - - @Test - public void testremoveDuplicate_NULL2() { - ConvertString convertString = new ConvertString(); - String input = "aaabc"; - Assert.assertEquals(input, convertString.removeRepeatedChar(input)); - convertString = new ConvertString(""); - Assert.assertEquals(input, convertString.removeRepeatedChar(input)); - convertString = new ConvertString(null); - Assert.assertEquals(input, convertString.removeRepeatedChar(input)); - } - - @Test - public void testremoveWhiteSpace() { - ConvertString convertString = new ConvertString(); - String input = "a b\t\t\tc\n\n\nd\r\re\f\ff"; - String cleanStr = convertString.removeRepeatedWhitespaces(input); - Assert.assertEquals("a b\tc\nd\re\ff", cleanStr); - - // \r\n will not be removed - input = "aaab\r\n\r\n\r\nx"; - cleanStr = convertString.removeRepeatedWhitespaces(input); - Assert.assertEquals("aaab\r\n\r\n\r\nx", cleanStr); - - input = "a\u0085\u0085\u0085b\u00A0\u00A0c\u1680\u1680d\u180E\u180Ee\u2000\u2000f\u2001\u2001g" - + "\u2002\u2002h\u2003\u2003i\u2004\u2004"; - cleanStr = convertString.removeRepeatedWhitespaces(input); - Assert.assertEquals("a\u0085b\u00A0c\u1680d\u180Ee\u2000f\u2001g\u2002h\u2003i\u2004", cleanStr); - - input = "a\u2005\u2005\u2005b\u2006\u2006c\u2007\u2007d\u2008\u2008e\u2009\u2009f\u200A\u200Ag" - + "\u2028\u2028h\u2029\u2029i\u202F\u202Fj\u205F\u205Fk\u3000\u3000l"; - cleanStr = convertString.removeRepeatedWhitespaces(input); - Assert.assertEquals("a\u2005b\u2006c\u2007d\u2008e\u2009f\u200Ag\u2028h\u2029i\u202Fj\u205Fk\u3000l", cleanStr); - } - - @Test - public void testremoveWhiteSpaceNull() { - ConvertString convertString = new ConvertString(); - String input = ""; - String cleanStr = convertString.removeRepeatedWhitespaces(input); - Assert.assertEquals("", cleanStr); - input = null; - cleanStr = convertString.removeRepeatedWhitespaces(input); - Assert.assertNull(cleanStr); - } - - @Test - public void testremoveWhiteSpacWithoutSpace() { - ConvertString convertString = new ConvertString(); - String input = "abccdef"; - String cleanStr = convertString.removeRepeatedWhitespaces(input); - Assert.assertEquals("abccdef", cleanStr); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/executor/RecipePipelineExecutorTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/executor/RecipePipelineExecutorTest.java deleted file mode 100644 index 7f4572434..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/executor/RecipePipelineExecutorTest.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright © 2016-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.executor; - -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Collections; - -/** - * Tests {@link RecipePipelineExecutor}. - */ -public class RecipePipelineExecutorTest { - - @Test - public void testPipeline() throws Exception { - - String[] commands = new String[] { - "parse-as-csv __col ,", - "drop __col", - "set columns a,b,c,d,e,f,g", - "rename a first", - "drop b" - }; - // Output schema - Schema schema = Schema.recordOf( - "output", - Schema.Field.of("first", Schema.of(Schema.Type.STRING)), - Schema.Field.of("c", Schema.of(Schema.Type.STRING)), - Schema.Field.of("d", Schema.of(Schema.Type.STRING)), - Schema.Field.of("e", Schema.of(Schema.Type.STRING)), - Schema.Field.of("f", Schema.of(Schema.Type.STRING)), - Schema.Field.of("g", Schema.of(Schema.Type.STRING)) - ); - - RecipePipeline pipeline = TestingRig.execute(commands); - - Row row = new Row("__col", "a,b,c,d,e,f,1.0"); - StructuredRecord record = (StructuredRecord) pipeline.execute(Collections.singletonList(row), schema).get(0); - - // Validate the {@link StructuredRecord} - Assert.assertEquals("a", record.get("first")); - Assert.assertEquals("c", record.get("c")); - Assert.assertEquals("d", record.get("d")); - Assert.assertEquals("e", record.get("e")); - Assert.assertEquals("f", record.get("f")); - Assert.assertEquals("1.0", record.get("g")); - } - - - @Test - public void testPipelineWithMoreSimpleTypes() throws Exception { - - String[] commands = new String[] { - "parse-as-csv __col ,", - "drop __col", - "set columns first,last,email,timestamp,weight" - }; - // Output schema - Schema schema = Schema.recordOf( - "output", - Schema.Field.of("first", Schema.of(Schema.Type.STRING)), - Schema.Field.of("last", Schema.of(Schema.Type.STRING)), - Schema.Field.of("email", Schema.of(Schema.Type.STRING)), - Schema.Field.of("timestamp", Schema.of(Schema.Type.LONG)), - Schema.Field.of("weight", Schema.of(Schema.Type.FLOAT)) - ); - - RecipePipeline pipeline = TestingRig.execute(commands); - Row row = new Row("__col", "Larry,Perez,lperezqt@umn.edu,1481666448,186.66"); - StructuredRecord record = (StructuredRecord) pipeline.execute(Collections.singletonList(row), schema).get(0); - - // Validate the {@link StructuredRecord} - Assert.assertEquals("Larry", record.get("first")); - Assert.assertEquals("Perez", record.get("last")); - Assert.assertEquals("lperezqt@umn.edu", record.get("email")); - Assert.assertEquals(1481666448L, record.get("timestamp").longValue()); - Assert.assertEquals(186.66f, record.get("weight"), 0.0001f); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/executor/SchemaGenerationTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/executor/SchemaGenerationTest.java deleted file mode 100644 index 03c64042c..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/executor/SchemaGenerationTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.executor; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.utils.RowHelper; -import io.cdap.wrangler.utils.SchemaConverter; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class SchemaGenerationTest { - private static final SchemaConverter schemaConverter = new SchemaConverter(); - @Test - public void testOutputSchemaGeneration_enabled() throws Exception { - String[] commands = new String[]{ - "parse-as-csv :body ,", - "drop :body", - "set-headers :decimal_col,:all_nulls,:name,:timestamp,:weight", - "set-type :timestamp double", - }; - Schema inputSchema = Schema.recordOf( - "input", - Schema.Field.of("body", Schema.of(Schema.Type.STRING)), - Schema.Field.of("decimal_col", Schema.decimalOf(10, 2)), - Schema.Field.of("null_col", Schema.of(Schema.Type.STRING)) - ); - Schema expectedSchema = Schema.recordOf( - "expected", - Schema.Field.of("decimal_col", Schema.nullableOf(Schema.decimalOf(10, 2))), // Precision and scale carried over - Schema.Field.of("all_nulls", Schema.nullableOf(Schema.of(Schema.Type.STRING))), // Null column not dropped - Schema.Field.of("name", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("timestamp", Schema.nullableOf(Schema.of(Schema.Type.DOUBLE))), - Schema.Field.of("weight", Schema.nullableOf(Schema.of(Schema.Type.STRING))) - ); - List inputRows = new ArrayList<>(); - inputRows.add(new Row("body", "Larry,1481666448").add("decimal_col", new BigDecimal("3.5")).add("null_col", null)); - inputRows.add(new Row("body", "Barry,,172.3").add("decimal_col", new BigDecimal("23456")).add("null_col", null)); - - Schema outputSchema = TestingRig.executeAndGetSchema(commands, inputRows, inputSchema); - - for (Schema.Field field : expectedSchema.getFields()) { - Assert.assertEquals(field.getName(), outputSchema.getField(field.getName()).getName()); - Assert.assertEquals(field.getSchema(), outputSchema.getField(field.getName()).getSchema()); - } - } - - @Test - public void testOutputSchemaGeneration_disabled() throws Exception { - String[] commands = new String[]{ - "parse-as-csv :body ,", - "drop :body", - "set-headers :decimal_col,:all_nulls,:name,:timestamp,:weight", - "set-type :timestamp double", - }; - Schema inputSchema = Schema.recordOf( - "input", - Schema.Field.of("body", Schema.of(Schema.Type.STRING)), - Schema.Field.of("decimal_col", Schema.decimalOf(10, 2)), - Schema.Field.of("null_col", Schema.of(Schema.Type.STRING)) - ); - Schema expectedSchema = Schema.recordOf( - "expected", - Schema.Field.of("decimal_col", Schema.nullableOf(Schema.decimalOf(38, 1))), // Default precision, scale inferred - // all_nulls column dropped - Schema.Field.of("name", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("timestamp", Schema.nullableOf(Schema.of(Schema.Type.DOUBLE))), - Schema.Field.of("weight", Schema.nullableOf(Schema.of(Schema.Type.STRING))) - ); - List inputRows = new ArrayList<>(); - inputRows.add(new Row("body", "Larry,1481666448").add("decimal_col", new BigDecimal("3.5")).add("null_col", null)); - inputRows.add(new Row("body", "Barry,,172.3").add("decimal_col", new BigDecimal("23456")).add("null_col", null)); - - List result = TestingRig.execute(commands, inputRows); - - Schema outputSchema = result.isEmpty() ? null : - schemaConverter.toSchema("record", RowHelper.createMergedRow(result)); - - for (Schema.Field field : expectedSchema.getFields()) { - Assert.assertEquals(field.getName(), outputSchema.getField(field.getName()).getName()); - Assert.assertEquals(field.getSchema(), outputSchema.getField(field.getName()).getSchema()); - } - } - - @Test - public void testOutputSchemaGeneration_columnOrdering() throws Exception { - Schema inputSchema = Schema.recordOf( - "input", - Schema.Field.of("body", Schema.of(Schema.Type.STRING)), - Schema.Field.of("value", Schema.of(Schema.Type.INT)) - ); - String[] commands = new String[] { - "parse-as-json :body 1", - "set-type :value long" - }; - List expectedFields = Arrays.asList( - Schema.Field.of("value", Schema.nullableOf(Schema.of(Schema.Type.LONG))), - Schema.Field.of("body_A", Schema.nullableOf(Schema.of(Schema.Type.LONG))), - Schema.Field.of("body_B", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("body_C", Schema.nullableOf(Schema.of(Schema.Type.DOUBLE))) - ); - List inputRows = new ArrayList<>(); - inputRows.add(new Row().add("body", "{\"A\":1, \"B\":\"hello\"}").add("value", 10L)); - inputRows.add(new Row().add("body", "{\"C\":1.23, \"A\":1, \"B\":\"world\"}").add("value", 20L)); - - Schema outputSchema = TestingRig.executeAndGetSchema(commands, inputRows, inputSchema); - - List outputFields = outputSchema.getFields(); - - Assert.assertEquals(expectedFields.size(), outputFields.size()); - for (int i = 0; i < expectedFields.size(); i++) { - Assert.assertEquals(expectedFields.get(i).getName(), outputFields.get(i).getName()); - Assert.assertEquals(expectedFields.get(i).getSchema(), outputFields.get(i).getSchema()); - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/expression/ELTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/expression/ELTest.java deleted file mode 100644 index 1f1667c30..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/expression/ELTest.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.expression; - -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Tests {@link EL} - */ -public class ELTest { - - @Test - public void testBasicFunctionality() throws Exception { - EL el = EL.compile("a + b"); - ELResult execute = el.execute(new ELContext().add("a", 1).add("b", 2)); - Assert.assertNotNull(execute); - Assert.assertEquals(new Integer(3), execute.getInteger()); - Assert.assertTrue(el.variables().contains("a")); - Assert.assertFalse(el.variables().contains("c")); - } - - @Test(expected = ELException.class) - public void testUndefinedVariableException() throws Exception { - EL el = EL.compile("a + b + c"); - el.execute(new ELContext().add("a", 1).add("b", 2)); - } - - @Test - public void testArrays() throws Exception { - EL el = EL.compile("runtime['map'] > token['ABC.EDFG']['input'] " + - "&& math:max(toDouble(runtime['map']), toDouble(token['ABC.EDFG']['input'])) > 9"); - - Map runtime = new HashMap<>(); - runtime.put("map", "10"); - ELContext ctx = new ELContext(); - ctx.add("runtime", runtime); - - Map> token = new HashMap<>(); - Map stage1 = new HashMap<>(); - stage1.put("input", "1"); - token.put("ABC.EDFG", stage1); - ctx.add("token", token); - ELResult execute = el.execute(ctx); - Assert.assertEquals(true, execute.getBoolean()); - } - - @Test - public void testDecimalTransform() throws Exception { - BigDecimal bd = new BigDecimal("123456789.123456789"); - int n = 2; - - List directives = new ArrayList<>(); - directives.add("precision"); - directives.add("abs"); - directives.add("scale"); - directives.add("unscaled"); - directives.add("negate"); - directives.add("strip_zero"); - directives.add("sign"); - - List directives2 = new ArrayList<>(); - directives2.add("pow"); - directives2.add("decimal_left"); - directives2.add("decimal_right"); - directives2.add("add"); - directives2.add("subtract"); - directives2.add("multiply"); - directives2.add("divideq"); - directives2.add("divider"); - - for (String directive : directives) { - EL el = EL.compile(String.format("decimal:%s(a)", directive)); - ELResult execute = el.execute(new ELContext().add("a", bd)); - - Assert.assertNotNull(execute); - - switch (directive) { - case "abs": - Assert.assertEquals(bd.abs(), execute.getObject()); - break; - case "scale": - Assert.assertEquals(bd.scale(), execute.getObject()); - break; - case "unscaled": - Assert.assertEquals(bd.unscaledValue(), execute.getObject()); - break; - case "precision": - Assert.assertEquals(bd.precision(), execute.getObject()); - break; - case "negate": - Assert.assertEquals(bd.negate(), execute.getObject()); - break; - case "strip_zero": - Assert.assertEquals(bd.stripTrailingZeros(), execute.getObject()); - break; - case "sign": - Assert.assertEquals(bd.signum(), execute.getObject()); - break; - } - } - - for (String directive : directives2) { - EL el = EL.compile(String.format("decimal:%s(a, b)", directive)); - ELResult execute = el.execute(new ELContext().add("a", bd).add("b", n)); - - Assert.assertNotNull(execute); - - switch (directive) { - case "pow": - Assert.assertEquals(bd.pow(n), execute.getObject()); - break; - case "decimal_left": - Assert.assertEquals(new BigDecimal("1234567.89123456789"), execute.getObject()); - break; - case "decimal_right": - Assert.assertEquals(new BigDecimal("12345678912.3456789"), execute.getObject()); - break; - case "add": - Assert.assertEquals(bd.add(BigDecimal.valueOf(n)), execute.getObject()); - break; - case "subtract": - Assert.assertEquals(bd.subtract(BigDecimal.valueOf(n)), execute.getObject()); - break; - case "multiply": - Assert.assertEquals(bd.multiply(BigDecimal.valueOf(n)), execute.getObject()); - break; - case "divideq": - Assert.assertEquals(bd.divide(BigDecimal.valueOf(n), BigDecimal.ROUND_HALF_EVEN), execute.getObject()); - break; - case "divider": - Assert.assertEquals(bd.remainder(BigDecimal.valueOf(n)), execute.getObject()); - break; - } - } - } - - @Test - public void testArithmeticOperations() throws Exception { - BigDecimal bd1 = new BigDecimal("123.123"); - BigDecimal bd2 = new BigDecimal("456.456"); - Integer i1 = 123; - Integer i2 = 456; - Double d1 = 123.123d; - Double d2 = 456.456d; - Float f1 = 123.123f; - Float f2 = 456.456f; - - EL el = EL.compile("arithmetic:add(a,b)"); - ELResult execute = el.execute(new ELContext().add("a", bd1).add("b", bd2)); - Assert.assertEquals(bd1.add(bd2), execute.getObject()); - el = EL.compile("arithmetic:minus(a,b)"); - execute = el.execute(new ELContext().add("a", f1).add("b", f2)); - Assert.assertEquals(f1 - f2, execute.getObject()); - el = EL.compile("arithmetic:multiply(a,b)"); - execute = el.execute(new ELContext().add("a", d1).add("b", d2)); - Assert.assertEquals(d1 * d2, execute.getObject()); - el = EL.compile("arithmetic:divideq(a,b)"); - execute = el.execute(new ELContext().add("a", bd1).add("b", bd2)); - Assert.assertEquals(bd1.divide(bd2, BigDecimal.ROUND_HALF_EVEN).stripTrailingZeros(), execute.getObject()); - el = EL.compile("arithmetic:divider(a,b)"); - execute = el.execute(new ELContext().add("a", i1).add("b", i2)); - Assert.assertEquals(i1 % i2, execute.getObject()); - el = EL.compile("arithmetic:lcm(a,b)"); - execute = el.execute(new ELContext().add("a", bd1).add("b", bd2)); - Assert.assertEquals(new BigDecimal("18714.696"), execute.getObject()); - el = EL.compile("arithmetic:equal(a,b)"); - execute = el.execute(new ELContext().add("a", i1).add("b", i2)); - Assert.assertEquals(false, execute.getObject()); - el = EL.compile("arithmetic:max(a,b)"); - execute = el.execute(new ELContext().add("a", f1).add("b", f2)); - Assert.assertEquals(f2, execute.getObject()); - el = EL.compile("arithmetic:min(a,b)"); - execute = el.execute(new ELContext().add("a", d1).add("b", d2)); - Assert.assertEquals(d1, execute.getObject()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/i18n/MessagesTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/i18n/MessagesTest.java deleted file mode 100644 index b0c79370f..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/i18n/MessagesTest.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.i18n; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests {@link Messages} - */ -public class MessagesTest { - private static final Messages MSG = MessagesFactory.getMessages("user/test"); - private static String expected = "this is a simple test"; - @Test - public void testMessages() throws Exception { - Assert.assertEquals(expected, MSG.get("test.simple")); - } - - @Test - public void testWithOneParameter() throws Exception { - String value = "this"; - Assert.assertEquals(expected, MSG.get("test.with.1.parameter", value)); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/lineage/LineageOperationsTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/lineage/LineageOperationsTest.java deleted file mode 100644 index bf94f3a00..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/lineage/LineageOperationsTest.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.lineage; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.etl.api.lineage.field.FieldOperation; -import io.cdap.cdap.etl.api.lineage.field.FieldTransformOperation; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.RecipeParser; -import io.cdap.wrangler.parser.GrammarBasedParser; -import io.cdap.wrangler.parser.MigrateToV2; -import io.cdap.wrangler.registry.CompositeDirectiveRegistry; -import io.cdap.wrangler.registry.SystemDirectiveRegistry; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * Test the generation of Lineage defined in {@link LineageOperations} - */ -public class LineageOperationsTest { - private static Schema inputSchema = Schema.recordOf("input", Arrays.asList( - Schema.Field.of("a", Schema.of(Schema.Type.STRING)), - Schema.Field.of("b", Schema.of(Schema.Type.STRING)), - Schema.Field.of("c", Schema.of(Schema.Type.STRING)), - Schema.Field.of("d", Schema.of(Schema.Type.STRING)), - Schema.Field.of("e", Schema.of(Schema.Type.STRING)), - Schema.Field.of("f", Schema.of(Schema.Type.STRING)), - Schema.Field.of("g", Schema.of(Schema.Type.STRING)), - Schema.Field.of("h", Schema.of(Schema.Type.STRING)), - Schema.Field.of("i", Schema.of(Schema.Type.STRING)), - Schema.Field.of("j", Schema.of(Schema.Type.STRING)), - Schema.Field.of("k", Schema.of(Schema.Type.STRING)) - )); - - private static Schema outputSchema = Schema.recordOf("output", Arrays.asList( - Schema.Field.of("n", Schema.of(Schema.Type.STRING)), - Schema.Field.of("o", Schema.of(Schema.Type.STRING)), - Schema.Field.of("p", Schema.of(Schema.Type.STRING)), - Schema.Field.of("q", Schema.of(Schema.Type.STRING)), - Schema.Field.of("r", Schema.of(Schema.Type.STRING)), - Schema.Field.of("s", Schema.of(Schema.Type.STRING)), - Schema.Field.of("t", Schema.of(Schema.Type.STRING)) - )); - - @Test - public void testIdentityLineage() throws Exception { - // Identity - List lineage1 = lineage(inputSchema, inputSchema, Collections.emptyList()); - Assert.assertEquals(11, lineage1.size()); - } - - @Test - public void testNoMapping() throws Exception { - // No mappings specified - List lineage2 = lineage(inputSchema, outputSchema, Collections.emptyList()); - Assert.assertEquals(0, lineage2.size()); - } - - @Test - public void testDropLineage() throws Exception { - List lineage4 = lineage(inputSchema, outputSchema, ImmutableList.of("drop a,b,c,d;", - "set-column :o exp:{h}")); - Assert.assertEquals(3, lineage4.size()); - } - - /* - * a -------------| - * b -------------|---> n - * c -------------| - */ - @Test - public void testColumnExpression() throws Exception { - List lineage3 = lineage(inputSchema, outputSchema, - Collections.singletonList("set-column :n exp:{a + b + c + 1}")); - Assert.assertEquals(4, lineage3.size()); - } - - @Test - public void testCombination() throws Exception { - Schema inputSchema = Schema.recordOf("input", Arrays.asList( - // the parse field - Schema.Field.of("body", Schema.of(Schema.Type.STRING)), - // the identity fields which does not go through any directive - Schema.Field.of("identity1", Schema.of(Schema.Type.STRING)), - Schema.Field.of("identity2", Schema.of(Schema.Type.STRING)), - // drop field - Schema.Field.of("useless", Schema.of(Schema.Type.STRING)), - // standard field that go through non-ALL or GENERATE operations - Schema.Field.of("a", Schema.of(Schema.Type.STRING)), - Schema.Field.of("b", Schema.of(Schema.Type.STRING)), - Schema.Field.of("c", Schema.of(Schema.Type.STRING)) - )); - - Schema outputSchema = Schema.recordOf("output", Arrays.asList( - // the parsed fields from "body" - Schema.Field.of("id", Schema.of(Schema.Type.STRING)), - Schema.Field.of("name", Schema.of(Schema.Type.STRING)), - // the identity fields - Schema.Field.of("identity1", Schema.of(Schema.Type.STRING)), - Schema.Field.of("identity2", Schema.of(Schema.Type.STRING)), - // a,b,c generates sum - Schema.Field.of("a", Schema.of(Schema.Type.STRING)), - Schema.Field.of("b", Schema.of(Schema.Type.STRING)), - Schema.Field.of("c", Schema.of(Schema.Type.STRING)), - Schema.Field.of("sum", Schema.of(Schema.Type.STRING)) - )); - - List recipes = ImmutableList.of( - // parse body to body, body_1, and body_2, drop body and rename other two columns, body_1 and body_2 are actual - // fields that are not in the input or output schema - "parse-as-csv :body ',' false", - "drop body", - "rename body_1 id", - "rename body_2 name", - // regular operations - "drop useless", - "set-column :sum exp:{a + b + c}" - ); - - List operations = lineage(inputSchema, outputSchema, recipes); - - // should generate 11 operations: - // parse body - // drop body - // rename body_1 - // rename body_2 - // drop useless - // 4 operations for set-column, one for each field - // 2 identity transforms, order of identity transforms might not follow the input schema - Assert.assertEquals(11, operations.size()); - - // won't compare directly for the FieldTransformOperation since the output fields are converted from Set, so - // order might not preserve - compareFieldOperation(operations, 0, "Parsed column 'body' as CSV with delimiter ','", - Collections.singleton("body"), - ImmutableSet.of("body_1", "body_2", "id", "name", "sum", "body")); - compareFieldOperation(operations, 1, "Dropped columns [body]", - Collections.singleton("body"), Collections.emptySet()); - compareFieldOperation(operations, 2, "Renamed column 'body_1' to 'id'", - Collections.singleton("body_1"), Collections.singleton("id")); - compareFieldOperation(operations, 3, "Renamed column 'body_2' to 'name'", - Collections.singleton("body_2"), Collections.singleton("name")); - compareFieldOperation(operations, 4, "Dropped columns [useless]", - Collections.singleton("useless"), Collections.emptySet()); - compareFieldOperation(operations, 5, "Mapped result of expression 'a + b + c ' to column 'sum'", - ImmutableSet.of("a", "b", "c"), Collections.singleton("sum")); - compareFieldOperation(operations, 6 , "Mapped result of expression 'a + b + c ' to column 'sum'", - Collections.singleton("a"), Collections.singleton("a")); - compareFieldOperation(operations, 7, "Mapped result of expression 'a + b + c ' to column 'sum'", - Collections.singleton("b"), Collections.singleton("b")); - compareFieldOperation(operations, 8, "Mapped result of expression 'a + b + c ' to column 'sum'", - Collections.singleton("c"), Collections.singleton("c")); - - // rest two are identity transform, but the order we cannot gaurantee, just make sure input and output fields - // are identical - FieldTransformOperation actual = (FieldTransformOperation) operations.get(9); - Assert.assertEquals("operation_9", actual.getName()); - Assert.assertEquals(actual.getInputFields(), actual.getOutputFields()); - - actual = (FieldTransformOperation) operations.get(10); - Assert.assertEquals("operation_10", actual.getName()); - Assert.assertEquals(actual.getInputFields(), actual.getOutputFields()); - } - - private void compareFieldOperation(List operations, int index, String description, - Set expectedInput, Set expectedOutput) { - FieldTransformOperation actual = (FieldTransformOperation) operations.get(index); - Assert.assertEquals("operation_" + index, actual.getName()); - Assert.assertEquals(description, actual.getDescription()); - Assert.assertEquals(expectedInput, new HashSet<>(actual.getInputFields())); - Assert.assertEquals(expectedOutput, new HashSet<>(actual.getOutputFields())); - } - - private List lineage(Schema inputSchema, Schema outputSchema, - List recipes) throws Exception { - RecipeParser parser = getRecipeParser(recipes); - List directives = parser.parse(); - // After input and output schema are validated, it's time to extract - // all the fields from input and output schema. - Set input = inputSchema.getFields().stream() - .map(Schema.Field::getName).collect(Collectors.toSet()); - // After input and output schema are validated, it's time to extract - // all the fields from input and output schema. - Set output = outputSchema.getFields().stream() - .map(Schema.Field::getName).collect(Collectors.toSet()); - LineageOperations lineageOperations = new LineageOperations(input, output, directives); - return lineageOperations.generate(); - } - - private RecipeParser getRecipeParser(List directives) throws DirectiveParseException { - CompositeDirectiveRegistry registry = new CompositeDirectiveRegistry(SystemDirectiveRegistry.INSTANCE); - return new GrammarBasedParser("default", new MigrateToV2(directives).migrate(), registry); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/parser/ConfigDirectiveContextTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/parser/ConfigDirectiveContextTest.java deleted file mode 100644 index f9bafae7c..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/parser/ConfigDirectiveContextTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import com.google.gson.Gson; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveConfig; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.RecipeParser; -import io.cdap.wrangler.proto.Contexts; -import io.cdap.wrangler.registry.CompositeDirectiveRegistry; -import io.cdap.wrangler.registry.SystemDirectiveRegistry; -import org.junit.Assert; -import org.junit.Test; - -import java.util.List; - -/** - * Tests {@link NoOpDirectiveContext} - */ -public class ConfigDirectiveContextTest { - - private static final String CONFIG = "{\n" + - "\t\"exclusions\" : [\n" + - "\t\t\"parse-as-csv\",\n" + - "\t\t\"parse-as-excel\",\n" + - "\t\t\"set\",\n" + - "\t\t\"invoke-http\",\n" + - "\t\t\"js-parser\"\n" + - "\t],\n" + - "\n" + - "\t\"aliases\" : {\n" + - "\t\t\"json-parser\" : \"parse-as-json\",\n" + - "\t\t\"js-parser\" : \"parse-as-json\"\n" + - "\t}\n" + - "}"; - - private static final String EMPTY = "{}"; - - @Test(expected = RecipeException.class) - public void testBasicExclude() throws Exception { - String[] text = new String[] { - "parse-as-csv body , true" - }; - - Gson gson = new Gson(); - DirectiveConfig config = gson.fromJson(CONFIG, DirectiveConfig.class); - - RecipeParser directives = new GrammarBasedParser(Contexts.SYSTEM, text, - new CompositeDirectiveRegistry(SystemDirectiveRegistry.INSTANCE), - new ConfigDirectiveContext(config)); - directives.parse(); - } - - @Test(expected = RecipeException.class) - public void testAliasedAndExcluded() throws Exception { - String[] text = new String[] { - "js-parser body" - }; - - Gson gson = new Gson(); - DirectiveConfig config = gson.fromJson(CONFIG, DirectiveConfig.class); - - RecipeParser directives = new GrammarBasedParser(Contexts.SYSTEM, text, - new CompositeDirectiveRegistry(SystemDirectiveRegistry.INSTANCE), - new ConfigDirectiveContext(config)); - directives.parse(); - } - - @Test - public void testAliasing() throws Exception { - String[] text = new String[] { - "json-parser :body;" - }; - - Gson gson = new Gson(); - DirectiveConfig config = gson.fromJson(CONFIG, DirectiveConfig.class); - - RecipeParser directives = new GrammarBasedParser(Contexts.SYSTEM, text, - new CompositeDirectiveRegistry(SystemDirectiveRegistry.INSTANCE), - new ConfigDirectiveContext(config)); - List steps = directives.parse(); - Assert.assertEquals(1, steps.size()); - } - - @Test(expected = RecipeException.class) - public void testEmptyAliasingShouldFail() throws Exception { - String[] text = new String[] { - "json-parser :body;" - }; - - Gson gson = new Gson(); - DirectiveConfig config = gson.fromJson(EMPTY, DirectiveConfig.class); - - RecipeParser directives = new GrammarBasedParser(Contexts.SYSTEM, text, - new CompositeDirectiveRegistry(SystemDirectiveRegistry.INSTANCE), - new ConfigDirectiveContext(config)); - List steps = directives.parse(); - Assert.assertEquals(1, steps.size()); - } - - @Test - public void testWithNoAliasingNoExclusion() throws Exception { - String[] text = new String[] { - "parse-as-json :body;" - }; - - Gson gson = new Gson(); - DirectiveConfig config = gson.fromJson(EMPTY, DirectiveConfig.class); - - RecipeParser directives = new GrammarBasedParser(Contexts.SYSTEM, text, - new CompositeDirectiveRegistry(SystemDirectiveRegistry.INSTANCE), - new ConfigDirectiveContext(config)); - List steps = directives.parse(); - Assert.assertEquals(1, steps.size()); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/parser/GrammarBasedParserTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/parser/GrammarBasedParserTest.java deleted file mode 100644 index ae038ce26..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/parser/GrammarBasedParserTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.CompileStatus; -import io.cdap.wrangler.api.Compiler; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.RecipeParser; -import org.junit.Assert; -import org.junit.Test; - -import java.util.List; - -/** - * Tests {@link GrammarBasedParser} - */ -public class GrammarBasedParserTest { - - @Test - public void testBasic() throws Exception { - String[] recipe = new String[] { - "#pragma version 2.0;", - "rename :col1 :col2", - "parse-as-csv :body ',' true;", - "#pragma load-directives text-reverse, text-exchange;", - "${macro} ${macro_2}", - "${macro_${test}}" - }; - - RecipeParser parser = TestingRig.parse(recipe); - List directives = parser.parse(); - Assert.assertEquals(2, directives.size()); - } - - @Test - public void testLoadableDirectives() throws Exception { - String[] recipe = new String[] { - "#pragma version 2.0;", - "#pragma load-directives text-reverse, text-exchange;", - "rename col1 col2", - "parse-as-csv body , true", - "text-reverse :body;", - "test prop: { a='b', b=1.0, c=true};", - "#pragma load-directives test-change,text-exchange, test1,test2,test3,test4;" - }; - - Compiler compiler = new RecipeCompiler(); - CompileStatus status = compiler.compile(new MigrateToV2(recipe).migrate()); - Assert.assertEquals(7, status.getSymbols().getLoadableDirectives().size()); - } - - @Test - public void testCommentOnlyRecipe() throws Exception { - String[] recipe = new String[] { - "// test" - }; - - RecipeParser parser = TestingRig.parse(recipe); - List directives = parser.parse(); - Assert.assertEquals(0, directives.size()); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/parser/GrammarMigratorTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/parser/GrammarMigratorTest.java deleted file mode 100644 index db724c663..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/parser/GrammarMigratorTest.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import com.google.common.base.Joiner; -import edu.emory.mathcs.backport.java.util.Arrays; -import io.cdap.wrangler.api.GrammarMigrator; -import org.junit.Assert; -import org.junit.Test; - -import java.util.List; - -/** - * Tests {@link GrammarMigrator}. - */ -public class GrammarMigratorTest { - private static final String[] input = new String[] { - "set column salary salary > 100 ? 100 : salary", - "set columns fname,lname,address,city,state,country,zipcode", - "rename body_fname fname", - "set-type value int", - "drop fname,lname,address,zipcode,city", - "merge fname lname name ,", - "uppercase name", - "lowercase name", - "titlecase name", - "indexsplit department 1 10 zone", - "split name , fname lname", - "filter-row-if-matched address .*?", - "filter-row-if-not-matched address .*?", - "filter-row-if-true age < 10.0", - "filter-row-if-false age < 10.0 && gender == 'm'", - "set-variable test count > 10", - "increment-variable test 1 count > 10", - "mask-number ssn xxx-xx-####", - "mask-shuffle address", - "format-date startdate yyyy-MM-dd", - "format-unix-timestamp timestamp yyyy/MM/dd", - "quantize col1 col2 1:2=test,3:4=test1", - "find-and-replace name s/test//g", - "parse-as-csv body , true", - "parse-as-json body 1", - "parse-as-protobuf body test event 1.0", - "json-path source target a/b/c", - "set-charset body utf-8", - "invoke-http http://a.b/json fname,lname,address a=b,x=y", - "set-record-delim body , 10", - "parse-as-fixed-length body 3,4,5,6,7,8 #", - "split-to-rows body ,", - "split-to-columns body ,", - "parse-xml-to-json body 1", - "parse-as-xml xml", - "xpath name fname /items/item/first_name", - "xpath-array name fname /items/item/first_name", - "flatten a,b,c,d", - "copy source target true", - "fill-null-or-empty value ,", - "cut-character phone areacode 1-3", - "generate-uuid ssn", - "url-encode url", - "url-decode url", - "parse-as-log body %m-%y-%{HOSTNAME}", - "parse-as-date date UTC", - "parse-as-simple-date date yyyy-MM-dd", - "diff-date date1 date2 diffdate", - "keep fname,lname,address,city,zipcode", - "parse-as-hl7 body 1", - "split-email email", - "swap col1 col2", - "hash col SHA1 true", - "write-as-json-map output", - "write-as-json-object output fname,lname,address", - "write-as-csv output", - "parse-as-avro-file body", - "send-to-error Fare < 8.06", - "fail Fare < 8.06", - "text-distance abc col1 col2 output", - "text-metric abc col1 col2 output", - "catalog-lookup ICD-9 value", - "table-lookup value mylookup-table", - "stemming text", - "columns-replace s/body_//g", - "extract-regex-groups body s/body_//g", - "split-url url", - "cleanse-column-names", - "change-column-case upper", - "set-column value output > 10 ? 'test' : 'non-test'", - "encode base64 binary", - "decode base64 binary", - "trim name", - "ltrim name", - "rtrim name" - }; - - private static final String[] output = new String[] { - "set-column :salary exp:{salary > 100 ? 100 : salary};", - "set-headers :fname,:lname,:address,:city,:state,:country,:zipcode;", - "rename :body_fname :fname;", - "set-type :value int null null null;", - "drop :fname,:lname,:address,:zipcode,:city;", - "merge :fname :lname :name ',';", - "uppercase :name;", - "lowercase :name;", - "titlecase :name;", - "indexsplit :department 1 10 :zone;", - "split :name ',' :fname :lname;", - "filter-by-regex if-matched :address '.*?';", - "filter-by-regex if-not-matched :address '.*?';", - "filter-row exp:{age < 10.0} true;", - "filter-row exp:{age < 10.0 && gender == 'm'} false;", - "set-variable test exp:{count > 10};", - "increment-variable test 1 exp:{count > 10};", - "mask-number :ssn 'xxx-xx-####';", - "mask-shuffle :address;", - "format-date :startdate 'yyyy-MM-dd';", - "format-unix-timestamp :timestamp 'yyyy/MM/dd';", - "quantize :col1 :col2 1:2=test,3:4=test1;", - "find-and-replace :name 's/test//g';", - "parse-as-csv :body ',' true;", - "parse-as-json :body 1;", - "parse-as-protobuf :body test 'event' 1.0;", - "json-path :source :target 'a/b/c';", - "set-charset :body utf-8;", - "invoke-http 'http://a.b/json' :fname,:lname,:address 'a=b,x=y';", - "set-record-delim :body ',' 10;", - "parse-as-fixed-length :body 3,4,5,6,7,8 '#';", - "split-to-rows :body ',';", - "split-to-columns :body ',';", - "parse-xml-to-json :body 1;", - "parse-as-xml :xml;", - "xpath :name :fname '/items/item/first_name';", - "xpath-array :name :fname '/items/item/first_name';", - "flatten :a,:b,:c,:d;", - "copy :source :target true;", - "fill-null-or-empty :value ',';", - "cut-character :phone :areacode '1-3';", - "generate-uuid :ssn;", - "url-encode :url;", - "url-decode :url;", - "parse-as-log :body '%m-%y-%{HOSTNAME}';", - "parse-as-date :date 'UTC';", - "parse-as-simple-date :date 'yyyy-MM-dd';", - "diff-date :date1 :date2 :diffdate;", - "keep :fname,:lname,:address,:city,:zipcode;", - "parse-as-hl7 :body 1;", - "split-email :email;", - "swap :col1 :col2;", - "hash :col 'SHA1' true;", - "write-as-json-map :output;", - "write-as-json-object :output :fname,:lname,:address;", - "write-as-csv :output;", - "parse-as-avro-file :body;", - "send-to-error exp:{Fare < 8.06};", - "fail exp:{Fare < 8.06};", - "text-distance 'abc' :col1 :col2 :output;", - "text-metric 'abc' :col1 :col2 :output;", - "catalog-lookup 'ICD-9' :value;", - "table-lookup :value 'mylookup-table';", - "stemming :text;", - "columns-replace 's/body_//g';", - "extract-regex-groups :body 's/body_//g';", - "split-url :url;", - "cleanse-column-names;", - "change-column-case upper;", - "set-column :value exp:{output > 10 ? 'test' : 'non-test'};", - "encode 'base64' :binary;", - "decode 'base64' :binary;", - "trim :name;", - "ltrim :name;", - "rtrim :name;" - }; - - @Test - public void testMigration() throws Exception { - List expected = Arrays.asList(output); - GrammarMigrator migrator = new MigrateToV2(input); - String actual = migrator.migrate(); - Assert.assertEquals(Joiner.on('\n').join(expected), actual); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/parser/MapArgumentsTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/parser/MapArgumentsTest.java deleted file mode 100644 index 231301d81..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/parser/MapArgumentsTest.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.CompileStatus; -import io.cdap.wrangler.api.Compiler; -import io.cdap.wrangler.api.Optional; -import io.cdap.wrangler.api.TokenGroup; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TextList; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Iterator; -import java.util.List; - -/** - * Tests {@link MapArguments}. - */ -public class MapArgumentsTest { - - @Test - public void testWithAllRequiredFields() throws Exception { - Compiler compiler = new RecipeCompiler(); - CompileStatus status = compiler.compile("rename :fname :lname;"); - - UsageDefinition.Builder builder = UsageDefinition.builder("rename"); - builder.define("col1", TokenType.COLUMN_NAME); - builder.define("col2", TokenType.COLUMN_NAME); - - Iterator iterator = status.getSymbols().iterator(); - Arguments arguments = new MapArguments(builder.build(), iterator.next()); - Assert.assertEquals(2, arguments.size()); - Assert.assertEquals(true, arguments.contains("col1")); - Assert.assertEquals(true, arguments.contains("col2")); - } - - @Test - public void testWithOptionalField() throws Exception { - Compiler compiler = new RecipeCompiler(); - CompileStatus status = compiler.compile("rename :fname;"); - - UsageDefinition.Builder builder = UsageDefinition.builder("rename"); - builder.define("col1", TokenType.COLUMN_NAME); - builder.define("col2", TokenType.COLUMN_NAME, Optional.TRUE); - - Iterator iterator = status.getSymbols().iterator(); - Arguments arguments = new MapArguments(builder.build(), iterator.next()); - Assert.assertEquals(1, arguments.size()); - Assert.assertEquals(true, arguments.contains("col1")); - Assert.assertEquals(false, arguments.contains("col2")); - } - - @Test - public void testMultipleArgumentsOptional() throws Exception { - Compiler compiler = new RecipeCompiler(); - CompileStatus status1 = compiler.compile("parse-as-csv :body ' ';"); - CompileStatus status2 = compiler.compile("parse-as-csv :body ' ' true;"); - CompileStatus status3 = compiler.compile("parse-as-csv :body ' ' true exp: { type == '002' };"); - CompileStatus status4 = compiler.compile("parse-as-csv :body exp: { type == '002' };"); - - UsageDefinition.Builder builder = UsageDefinition.builder("rename"); - builder.define("col1", TokenType.COLUMN_NAME); - builder.define("col2", TokenType.TEXT, Optional.TRUE); - builder.define("col3", TokenType.BOOLEAN, Optional.TRUE); - builder.define("col4", TokenType.EXPRESSION, Optional.TRUE); - - Iterator iterator = status1.getSymbols().iterator(); - Arguments arguments = new MapArguments(builder.build(), iterator.next()); - Assert.assertEquals(2, arguments.size()); - Assert.assertEquals(true, arguments.contains("col1")); - Assert.assertEquals(true, arguments.contains("col2")); - Assert.assertEquals(false, arguments.contains("col3")); - - iterator = status2.getSymbols().iterator(); - arguments = new MapArguments(builder.build(), iterator.next()); - Assert.assertEquals(3, arguments.size()); - Assert.assertEquals(true, arguments.contains("col1")); - Assert.assertEquals(true, arguments.contains("col2")); - Assert.assertEquals(true, arguments.contains("col3")); - - iterator = status3.getSymbols().iterator(); - arguments = new MapArguments(builder.build(), iterator.next()); - Assert.assertEquals(4, arguments.size()); - Assert.assertEquals(true, arguments.contains("col1")); - Assert.assertEquals(true, arguments.contains("col2")); - Assert.assertEquals(true, arguments.contains("col3")); - Assert.assertEquals(true, arguments.contains("col4")); - - iterator = status4.getSymbols().iterator(); - arguments = new MapArguments(builder.build(), iterator.next()); - Assert.assertEquals(2, arguments.size()); - Assert.assertEquals(true, arguments.contains("col1")); - Assert.assertEquals(false, arguments.contains("col2")); - Assert.assertEquals(false, arguments.contains("col3")); - Assert.assertEquals(true, arguments.contains("col4")); - } - - @Test - public void testTextLists() throws Exception { - Compiler compiler = new RecipeCompiler(); - CompileStatus status = compiler.compile("remove-sensitive-data :body \"ALL_BASIC\", \"AGE\";"); - - UsageDefinition.Builder builder = UsageDefinition.builder("rename"); - builder.define("body", TokenType.COLUMN_NAME); - builder.define("infoTypes", TokenType.TEXT_LIST); - - Iterator iterator = status.getSymbols().iterator(); - Arguments arguments = new MapArguments(builder.build(), iterator.next()); - Assert.assertEquals(2, arguments.size()); - Assert.assertTrue(arguments.contains("body")); - Assert.assertTrue(arguments.contains("infoTypes")); - ColumnName columnName = arguments.value("body"); - Assert.assertEquals("body", columnName.value()); - List infoTypes = ((TextList) arguments.value("infoTypes")).value(); - Assert.assertEquals(2, infoTypes.size()); - Assert.assertEquals("ALL_BASIC", infoTypes.get(0)); - Assert.assertEquals("AGE", infoTypes.get(1)); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/parser/MigrateToV2Test.java b/wrangler-core/src/test/java/io/cdap/wrangler/parser/MigrateToV2Test.java deleted file mode 100644 index 2e2186025..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/parser/MigrateToV2Test.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.wrangler.api.GrammarMigrator; -import org.junit.Test; - -/** - * Tests {@link MigrateToV2} - */ -public class MigrateToV2Test { - @Test - public void testNullRecipe() throws Exception { - GrammarMigrator migrator = new MigrateToV2((String) null); - // no exception should be thrown. - migrator.migrate(); - } - - @Test - public void testEmptyRecipe() throws Exception { - String recipe = ""; - GrammarMigrator migrator = new MigrateToV2(recipe); - // no exception should be thrown. - migrator.migrate(); - } - - @Test - public void testCommentOnlyRecipe() throws Exception { - String recipe = "// test"; - GrammarMigrator migrator = new MigrateToV2(recipe); - // no exception should be thrown. - migrator.migrate(); - } - - @Test - public void testOldDirectivesWithNewSyntax() throws Exception { - String recipe = "parse-as-csv :body '\t' true; drop :body;"; - GrammarMigrator migrator = new MigrateToV2(recipe); - // no exception should be thrown. - migrator.migrate(); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/parser/NoOpDirectiveContextTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/parser/NoOpDirectiveContextTest.java deleted file mode 100644 index 48c31f56f..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/parser/NoOpDirectiveContextTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.RecipeParser; -import org.junit.Assert; -import org.junit.Test; - -import java.util.List; - -/** - * Tests {@link NoOpDirectiveContext} - */ -public class NoOpDirectiveContextTest { - - @Test - public void testNoFilteringHappening() throws Exception { - String[] recipe = new String[] { - "parse-as-csv body , true", - "drop body", - "drop Cabin", - "drop Embarked", - "fill-null-or-empty Age 0", - "filter-row-if-true Fare < 8.06" - }; - - RecipeParser parse = TestingRig.parse(recipe); - List directives = parse.parse(); - Assert.assertEquals(6, directives.size()); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/parser/RecipeCompilerTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/parser/RecipeCompilerTest.java deleted file mode 100644 index a3dab3b5d..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/parser/RecipeCompilerTest.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.CompileException; -import io.cdap.wrangler.api.CompileStatus; -import io.cdap.wrangler.api.Compiler; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Set; - -/** - * Tests {@link RecipeCompiler} - */ -public class RecipeCompilerTest { - - private static final Compiler compiler = new RecipeCompiler(); - - @Test - public void testSuccessCompilation() throws Exception { - try { - Compiler compiler = new RecipeCompiler(); - CompileStatus status = compiler.compile( - "parse-as-csv :body ' ' true;\n" - + "set-column :abc, :edf;\n" - + "send-to-error exp:{ window < 10 } ;\n" - + "parse-as-simple-date :col 'yyyy-mm-dd' :col 'test' :col2,:col4,:col9 10 exp:{test < 10};\n" - ); - - Assert.assertNotNull(status.getSymbols()); - Assert.assertEquals(4, status.getSymbols().size()); - } catch (CompileException e) { - Assert.assertTrue(false); - } - } - - @Test - public void testMacroSkippingDuringParsing() throws Exception { - String[] recipe = new String[] { - "parse-as-csv :body ',' true;", - "${macro1}", - "${macro${number}}", - "parse-as-csv :body '${delimiter}' true;" - }; - - CompileStatus status = TestingRig.compile(recipe); - Assert.assertEquals(true, status.isSuccess()); - } - - @Test - public void testSingleMacroLikeWranglerPlugin() throws Exception { - String[] recipe = new String[] { - "${directives}" - }; - - CompileStatus status = TestingRig.compile(recipe); - Assert.assertEquals(true, status.isSuccess()); - } - - @Test - public void testSparedPragmaLoadDirectives() throws Exception { - String[] recipe = new String[] { - "#pragma load-directives test1,test2,test3,test4,test5;", - "${directives}", - "#pragma load-directives root1,root2,root3;" - }; - TestingRig.compileSuccess(recipe); - } - - @Test - public void testNestedMacros() throws Exception { - String[] recipe = new String[] { - "#pragma load-directives test1,test2,test3,test4,test5;", - "${directives_${number}}" - }; - TestingRig.compileSuccess(recipe); - } - - @Test - public void testSemiColonMissing() throws Exception { - String[] recipe = new String[] { - "#pragma load-directives test1,test2,test3,test4,test5", - "${directives_${number}}" - }; - TestingRig.compileFailure(recipe); - } - - @Test - public void testMissingOpenBraceOnMacro() throws Exception { - String[] recipe = new String[] { - "#pragma load-directives test1,test2,test3,test4,test5;", - "$directives}" - }; - TestingRig.compileFailure(recipe); - } - - @Test - public void testMissingCloseBraceOnMacro() throws Exception { - String[] recipe = new String[] { - "#pragma load-directives test1,test2,test3,test4,test5;", - "${directives" - }; - TestingRig.compileFailure(recipe); - } - - @Test - public void testMissingBothBraceOnMacro() throws Exception { - String[] recipe = new String[] { - "#pragma load-directives test1,test2,test3,test4,test5;", - "${directives" - }; - TestingRig.compileFailure(recipe); - } - - @Test - public void testMissingPragmaHash() throws Exception { - String[] recipe = new String[] { - "pragma load-directives test1,test2,test3,test4,test5;", - }; - TestingRig.compileFailure(recipe); - } - - @Test - public void testTypograhicalErrorPragmaLoadDirectives() throws Exception { - String[] recipe = new String[] { - "pragma test1,test2,test3,test4,test5;", - }; - TestingRig.compileFailure(recipe); - } - - @Test - public void testWithIfStatement() throws Exception { - String[] recipe = new String[] { - "#pragma load-directives test1,test2;", - "${macro_1}", - "if ((test > 10) && (window < 20)) { parse-as-csv :body ',' true; if (window > 10) " + - "{ send-to-error exp:{test > 10}; } }" - }; - TestingRig.compileSuccess(recipe); - } - - @Test - public void testComplexExpression() throws Exception { - String[] recipe = new String[] { - "parse-as-csv body , true", - "drop body", - "merge body_1 body_2 Full_Name ' '", - "drop body_1,body_2", - "find-and-replace body_4 s/Washington//g", - "send-to-error empty(body_4)", - "send-to-error body_5 =~ \"DC.*\"", - "filter-rows-on regex-match body_5 *as*" - }; - CompileStatus compile = TestingRig.compile(recipe); - Assert.assertTrue(true); - } - - @Test - public void test() throws Exception { - String[] recipe = new String[] { - "parse-as-csv body , true", - "drop body", - "merge body_1 body_2 Full_Name ' '", - "drop body_1,body_2", - "find-and-replace body_4 s/Washington//g", - "send-to-error empty(body_4)", - "send-to-error body_5 =~ \"DC.*\"", - "filter-rows-on regex-match body_5 *as*" - }; - CompileStatus compile = TestingRig.compile(recipe); - Assert.assertTrue(true); - } - - @Test - public void testSingleLineDirectives() throws Exception { - String[] recipe = new String[] { - "parse-as-csv :body '\t' true; drop :body;" - }; - CompileStatus compile = TestingRig.compile(recipe); - Assert.assertTrue(true); - } - - @Test - public void testError() throws Exception { - String[] recipe = new String[] { - "parse-as-abababa-csv :body '\t' true; drop :body;" - }; - CompileStatus compile = TestingRig.compile(recipe); - Assert.assertTrue(true); - } - - @Test - public void testRecipePragmaWithCompiler() throws Exception { - String[] recipe = new String[] { - "#pragma load-directives test1,test2,test3,test4;", - "${directives}" - }; - CompileStatus compile = TestingRig.compile(recipe); - Set loadableDirectives = compile.getSymbols().getLoadableDirectives(); - Assert.assertEquals(4, loadableDirectives.size()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/parser/UsageRegistryTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/parser/UsageRegistryTest.java deleted file mode 100644 index 533011121..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/parser/UsageRegistryTest.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.parser; - -import org.junit.Assert; -import org.junit.Test; - -import java.util.List; - -/** - * Tests {@link UsageRegistry} - */ -public class UsageRegistryTest { - @Test - public void testUsageRegistry() throws Exception { - UsageRegistry registry = new UsageRegistry(); - List usages = registry.getAll(); - Assert.assertTrue(usages.size() > 1); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/registry/CompositeDirectiveRegistryTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/registry/CompositeDirectiveRegistryTest.java deleted file mode 100644 index 62b04ff85..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/registry/CompositeDirectiveRegistryTest.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.registry; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.artifact.ArtifactId; -import io.cdap.cdap.api.artifact.ArtifactScope; -import io.cdap.cdap.api.artifact.ArtifactSummary; -import io.cdap.cdap.api.artifact.ArtifactVersion; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.parser.ColumnName; -import io.cdap.wrangler.api.parser.TokenType; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.proto.Contexts; -import org.junit.Assert; -import org.junit.Test; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; - -/** - * Tests {@link CompositeDirectiveRegistry} - */ -public class CompositeDirectiveRegistryTest { - - @Plugin(type = Directive.TYPE) - @Name("my-test") - @Description("Test") - public static final class MyTest implements Directive { - private String column; - - @Override - public List execute(List row, ExecutorContext context) { - return row; - } - - @Override - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder("my-test"); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - @Override - public void initialize(Arguments args) { - column = ((ColumnName) args.value("column")).value(); - } - - @Override - public void destroy() { - // no-op - } - } - - private class TestDirectiveRegistry implements DirectiveRegistry { - private Map registry = new HashMap<>(); - - public TestDirectiveRegistry() throws InstantiationException, IllegalAccessException { - registry.put("my-test", DirectiveInfo.fromUser(MyTest.class, - new ArtifactId("dummy", new ArtifactVersion("1.0"), - ArtifactScope.USER))); - } - - @Override - public Iterable list(String namespace) { - return registry.values(); - } - - @Nullable - @Override - public DirectiveInfo get(String namespace, String name) { - return registry.get(name); - } - - @Override - public void reload(String namespace) { - // no-op - } - - @Nullable - @Override - public ArtifactSummary getLatestWranglerArtifact() { - return null; - } - - @Override - public void close() { - // no-op - } - } - - @Test - public void testIteratorUsage() throws Exception { - DirectiveRegistry registry = new CompositeDirectiveRegistry( - SystemDirectiveRegistry.INSTANCE, - new TestDirectiveRegistry() - ); - - Iterator iterator = registry.list(Contexts.SYSTEM).iterator(); - int count = 0; - while (iterator.hasNext()) { - iterator.next(); - count++; - } - Assert.assertEquals(85, count); - - registry.reload(""); - - iterator = registry.list(Contexts.SYSTEM).iterator(); - count = 0; - while (iterator.hasNext()) { - iterator.next(); - count++; - } - Assert.assertEquals(85, count); - - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/registry/SystemDirectiveRegistryTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/registry/SystemDirectiveRegistryTest.java deleted file mode 100644 index 7f9e9a37e..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/registry/SystemDirectiveRegistryTest.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.registry; - -import org.junit.Test; - -/** - * Tests {@link SystemDirectiveRegistry} - */ -public class SystemDirectiveRegistryTest { - - @Test - public void testLoadingDefaults() throws Exception { - new SystemDirectiveRegistry(); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/statistics/BasicStatisticsTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/statistics/BasicStatisticsTest.java deleted file mode 100644 index effdc860a..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/statistics/BasicStatisticsTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.statistics; - -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.Row; -import io.dataapps.chlorine.finder.FinderEngine; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link BasicStatistics} - */ -public class BasicStatisticsTest { - - @Test - public void testFinderXMLFormat() throws Exception { - FinderEngine engine = new FinderEngine("wrangler-finder.xml", true, false); - Assert.assertNotNull(engine); - Assert.assertTrue(engine.getFinders().size() > 5); // 5 is minimal. - } - - @Test - public void testMetaBasic() throws Exception { - String[] directives = new String[] { - "parse-as-csv body ,", - "drop body" - }; - - List rows = Arrays.asList( - new Row("body", "1234.45,650-897-3839,111-11-1111,32826,02/29/2000,\"$1234.56\",http://www.yahoo.com"), - new Row("body", "45.56,670-897-3839,111-12-1111,32826,02/01/2011,\"$56,789\",http://mars.io"), - new Row("body", "45.56,670-897-3839,222,32826,9/14/2016,\"\",http://mars.io") - ); - - rows = TestingRig.execute(directives, rows); - - Statistics meta = new BasicStatistics(); - Row summary = meta.aggregate(rows); - - Assert.assertTrue(rows.size() > 1); - - Assert.assertEquals(3, summary.width()); - Assert.assertEquals(3.0, summary.getValue("total")); - - Row stats = (Row) summary.getValue("stats"); - Row types = (Row) summary.getValue("types"); - - Assert.assertEquals(7, stats.width()); - Assert.assertEquals(7, types.width()); - } -} - diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/utils/ArithmeticOperationsTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/utils/ArithmeticOperationsTest.java deleted file mode 100644 index 9f54d5888..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/utils/ArithmeticOperationsTest.java +++ /dev/null @@ -1,498 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import io.cdap.wrangler.api.DirectiveExecutionException; -import org.junit.Assert; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -import java.math.BigDecimal; -import java.math.RoundingMode; - -/** - * Tests {@link ArithmeticOperations} - */ -public class ArithmeticOperationsTest { - @Rule - public ExpectedException expectedEx = ExpectedException.none(); - - private static final double DELTA = 0.0001; - - /** - * Test add operation functionality - * - * @throws Exception - */ - @Test - public void testAdd() throws Exception { - - // Test 1 value - Assert.assertEquals((short) 5, ArithmeticOperations.add((short) 5)); // short - Assert.assertEquals(5, ArithmeticOperations.add(5)); // int - Assert.assertEquals((long) 5, ArithmeticOperations.add((long) 5)); // long - Assert.assertEquals((float) 5, ArithmeticOperations.add((float) 5)); // float - Assert.assertEquals(5.0, ArithmeticOperations.add(5.0)); // double - Assert.assertEquals(BigDecimal.valueOf(5), - ArithmeticOperations.add(BigDecimal.valueOf(5))); // BigDecimal - - // Test 3 values - Assert.assertEquals((short) 4, - ArithmeticOperations.add((short) 1, (short) 3)); // short - Assert.assertEquals(4, ArithmeticOperations.add(1, 3)); // int - Assert.assertEquals((long) 4, - ArithmeticOperations.add((long) 1, (long) 3)); // long - Assert.assertEquals((float) 4, - ArithmeticOperations.add((float) 1, (float) 3)); // float - Assert.assertEquals(4.0, ArithmeticOperations.add(1.0, 3.0)); // double - Assert.assertEquals(BigDecimal.valueOf(4), - ArithmeticOperations.add(BigDecimal.ONE, - BigDecimal.valueOf(3))); // BigDecimal - - // Test all null values - Assert.assertNull(ArithmeticOperations.add(null, null)); - - // Test one null value - Assert.assertNull(ArithmeticOperations.add((short) 2, null, (short) 3)); // short - Assert.assertNull(ArithmeticOperations.add(2, null, 3)); // int - Assert.assertNull(ArithmeticOperations.add((long) 2, null, (long) 3)); // long - Assert.assertNull(ArithmeticOperations.add((float) 2, null, (float) 3)); // float - Assert.assertNull(ArithmeticOperations.add(2.0, null, 3.0)); // double - Assert.assertNull(ArithmeticOperations.add(BigDecimal.valueOf(2), - null, - BigDecimal.valueOf(3))); // BigDecimal - - // Test multiple types (pairs) - Assert.assertEquals(5, - ArithmeticOperations.add((short) 2, 2, (short) 1)); // short + int - Assert.assertEquals((long) 5, - ArithmeticOperations.add(2, (long) 2, 1)); // int + long - Assert.assertEquals((float) 5, - ArithmeticOperations.add((long) 2, (float) 2, (long) 1)); // long + float - Assert.assertEquals((double) 5, - ArithmeticOperations.add((float) 2, 2.0, (float) 1)); // float + double - Assert.assertEquals(BigDecimal.valueOf(5), - ArithmeticOperations.add(2.0, BigDecimal.valueOf(2), 1.0)); // double + BigDecimal - - // Test multiple types (all) - Assert.assertEquals(BigDecimal.valueOf(21), ArithmeticOperations.add((short) 1, - 2, - (long) 3, - (float) 4, - 5.0, - BigDecimal.valueOf(6))); - } - - /** - * Test minus (subtraction) operation functionality - * - * @throws Exception - */ - @Test - public void testMinus() throws Exception { - - // Test same type - Assert.assertEquals((short) 2, ArithmeticOperations.minus((short) 10, (short) 8)); // Short - Assert.assertEquals(2, ArithmeticOperations.minus(10, 8)); // Integer - Assert.assertEquals((long) 2, ArithmeticOperations.minus((long) 10, (long) 8)); // Long - Assert.assertEquals((float) 2.5, (float) ArithmeticOperations.minus((float) 10.7, (float) 8.2), DELTA); // Float - Assert.assertEquals(2.5, (double) ArithmeticOperations.minus(10.7, 8.2), DELTA); // Double - Assert.assertEquals(BigDecimal.valueOf(2.5), ArithmeticOperations.minus(BigDecimal.valueOf(10.7), - BigDecimal.valueOf(8.2))); // BigDecimal - - // Test different types; expected behavior is to output the most "general" type - Assert.assertEquals(2, ArithmeticOperations.minus((short) 10, 8)); // Short + Integer - Assert.assertEquals((long) 2, ArithmeticOperations.minus(10, (long) 8)); // Integer + Long - Assert.assertEquals((float) 2, (float) ArithmeticOperations.minus((long) 10, (float) 8), DELTA); // Long + Float - Assert.assertEquals(2.5, (double) ArithmeticOperations.minus((float) 10.7, 8.2), DELTA); // Float + Double - Assert.assertEquals(BigDecimal.valueOf(2.5), - ArithmeticOperations.minus(10.7, BigDecimal.valueOf(8.2))); // Double + BigDecimal - } - - /** - * Test multiply operation multi-column functionality - * - * @throws Exception - */ - @Test - public void testMultiply() throws Exception { - - // Test 1 value - Assert.assertEquals((short) 5, ArithmeticOperations.multiply((short) 5)); // short - Assert.assertEquals(5, ArithmeticOperations.multiply(5)); // int - Assert.assertEquals((long) 5, ArithmeticOperations.multiply((long) 5)); // long - Assert.assertEquals((float) 5, ArithmeticOperations.multiply((float) 5)); // float - Assert.assertEquals(5.0, ArithmeticOperations.multiply(5.0)); // double - Assert.assertEquals(BigDecimal.valueOf(5), - ArithmeticOperations.multiply(BigDecimal.valueOf(5))); // BigDecimal - - // Test 3 values - Assert.assertEquals((short) 3, - ArithmeticOperations.multiply((short) 1, (short) 3)); // short - Assert.assertEquals(3, ArithmeticOperations.multiply(1, 3)); // int - Assert.assertEquals((long) 3, - ArithmeticOperations.multiply((long) 1, (long) 3)); // long - Assert.assertEquals((float) 3, - ArithmeticOperations.multiply((float) 1, (float) 3)); // float - Assert.assertEquals(3.0, ArithmeticOperations.multiply(1.0, 3.0)); // double - Assert.assertEquals(BigDecimal.valueOf(3), - ArithmeticOperations.multiply(BigDecimal.ONE, - BigDecimal.valueOf(3))); // BigDecimal - - // Test all null values - Assert.assertNull(ArithmeticOperations.multiply(null, null)); - - // Test one null value - Assert.assertNull(ArithmeticOperations.multiply((short) 2, null, (short) 3)); // short - Assert.assertNull(ArithmeticOperations.multiply(2, null, 3)); // int - Assert.assertNull(ArithmeticOperations.multiply((long) 2, null, (long) 3)); // long - Assert.assertNull(ArithmeticOperations.multiply((float) 2, null, (float) 3)); // float - Assert.assertNull(ArithmeticOperations.multiply(2.0, null, 3.0)); // double - Assert.assertNull(ArithmeticOperations.multiply(BigDecimal.valueOf(2), - null, - BigDecimal.valueOf(3))); // BigDecimal - - // Test multiple types (pairs) - Assert.assertEquals(4, - ArithmeticOperations.multiply((short) 2, 2, (short) 1)); // short + int - Assert.assertEquals((long) 4, - ArithmeticOperations.multiply(2, (long) 2, 1)); // int + long - Assert.assertEquals((float) 4, - ArithmeticOperations.multiply((long) 2, (float) 2, (long) 1)); // long + float - Assert.assertEquals((double) 4, - ArithmeticOperations.multiply((float) 2, 2.0, (float) 1)); // float + double - Assert.assertEquals(new BigDecimal("4.00"), - ArithmeticOperations.multiply(2.0, - BigDecimal.valueOf(2), - 1.0)); // double + BigDecimal - - // Test multiple types (all) - Assert.assertEquals(new BigDecimal("720.00"), - ArithmeticOperations.multiply((short) 1, - 2, - (long) 3, - (float) 4, - 5.0, - BigDecimal.valueOf(6))); - } - - /** - * Test divideq (division) operation functionality - * - * @throws Exception - */ - @Test - public void testDivideq() throws Exception { - - // Test same type - // Expected behavior is to output Double, unless any input has type BigDecimal - Assert.assertEquals(2.4, (double) ArithmeticOperations.divideq((short) 12, (short) 5), DELTA); // Short - Assert.assertEquals(2.4, (double) ArithmeticOperations.divideq(12, 5), DELTA); // Integer - Assert.assertEquals(2.4, (double) ArithmeticOperations.divideq((long) 12, (long) 5), DELTA); // Long - Assert.assertEquals(30.25, (double) ArithmeticOperations.divideq((float) 12.1, (float) 0.4), - DELTA); // Float - Assert.assertEquals(30.25, (double) ArithmeticOperations.divideq(12.1, 0.4), DELTA); // Double - Assert.assertEquals(BigDecimal.valueOf(30.3), ArithmeticOperations.divideq(BigDecimal.valueOf(9.09), - BigDecimal.valueOf(0.3))); // BigDecimal - - // Test different types - Assert.assertEquals(2.4, (double) ArithmeticOperations.divideq((short) 12, 5), DELTA); // Short + Integer - Assert.assertEquals(2.4, (double) ArithmeticOperations.divideq(12, (long) 5), DELTA); // Integer + Long - Assert.assertEquals(2.4, (double) ArithmeticOperations.divideq((long) 12, - (float) 5.0), DELTA); // Long + Float - Assert.assertEquals(30.25, (double) ArithmeticOperations.divideq((float) 12.1, 0.4), - DELTA); // Float + Double - Assert.assertEquals(BigDecimal.valueOf(30.3), - ArithmeticOperations.divideq(9.09, BigDecimal.valueOf(0.3))); // Double + BigDecimal - - // Test division by 0 - Assert.assertEquals(null, ArithmeticOperations.divideq(5, 0)); // Integer 0 - Assert.assertEquals(null, ArithmeticOperations.divideq(5, (double) 0)); // Double 0 - Assert.assertEquals(null, ArithmeticOperations.divideq(5, BigDecimal.valueOf(0))); // BigDecimal 0 - } - - /** - * Test divider (modulus) operation functionality - * - * @throws Exception - */ - @Test - public void testDivider() throws Exception { - - // Test same type - Assert.assertEquals(2, ArithmeticOperations.divider((short) 12, (short) 5)); // Short - Assert.assertEquals(2, ArithmeticOperations.divider(12, 5)); // Integer - Assert.assertEquals((long) 2, ArithmeticOperations.divider((long) 12, (long) 5)); // Long - Assert.assertEquals((float) 0.2, (float) ArithmeticOperations.divider((float) 12.2, (float) 0.5), DELTA); // Float - Assert.assertEquals(0.2, (double) ArithmeticOperations.divider(12.2, 0.5), DELTA); // Double - Assert.assertEquals(BigDecimal.valueOf(0.2), ArithmeticOperations.divider(BigDecimal.valueOf(12.2), - BigDecimal.valueOf(0.5))); // BigDecimal - - // Test different types; expected behavior is to output the most "general" type - Assert.assertEquals(2, ArithmeticOperations.divider((short) 12, 5)); // Short + Integer - Assert.assertEquals((long) 2, ArithmeticOperations.divider(12, (long) 5)); // Integer + Long - Assert.assertEquals((float) 2.0, (float) ArithmeticOperations.divider((long) 12, - (float) 5.0), DELTA); // Long + Float - Assert.assertEquals(0.2, (double) ArithmeticOperations.divider((float) 12.2, 0.5), DELTA); // Float + Double - Assert.assertEquals(BigDecimal.valueOf(0.2), - ArithmeticOperations.divider(12.2, BigDecimal.valueOf(0.5))); // Double + BigDecimal - - // Test division by 0 - Assert.assertEquals(null, ArithmeticOperations.divider(5, 0)); // Integer 0 - Assert.assertEquals(null, ArithmeticOperations.divider(5, (double) 0)); // Double 0 - Assert.assertEquals(null, ArithmeticOperations.divider(5, BigDecimal.valueOf(0))); // BigDecimal 0 - } - - /** - * Test LCM operation functionality - * - * @throws Exception - */ - @Test - public void testLCM() throws Exception { - - // Test same type - Assert.assertEquals((short) 36, ArithmeticOperations.lcm((short) 12, (short) 18)); // Short - Assert.assertEquals(36, ArithmeticOperations.lcm(12, 18)); // Integer - Assert.assertEquals((long) 36, ArithmeticOperations.lcm((long) 12, (long) 18)); // Long - Assert.assertEquals((float) 2262.5, ArithmeticOperations.lcm((float) 12.5, (float) 18.1)); // Float - Assert.assertEquals(2262.5, ArithmeticOperations.lcm(12.5, 18.1)); // Double - Assert.assertEquals(BigDecimal.valueOf(2262.5), ArithmeticOperations.lcm(BigDecimal.valueOf(12.5), - BigDecimal.valueOf(18.1))); // BigDecimal - - // Test different types; expected behavior is to output the most "general" type - Assert.assertEquals(36, ArithmeticOperations.lcm((short) 12, 18)); // Short + Integer - Assert.assertEquals((long) 36, ArithmeticOperations.lcm(12, (long) 18)); // Integer + Long - Assert.assertEquals((float) 36.0, ArithmeticOperations.lcm((long) 12, (float) 18.0)); // Long + Float - Assert.assertEquals(2262.5, ArithmeticOperations.lcm((float) 12.5, 18.1)); // Float + Double - Assert.assertEquals(BigDecimal.valueOf(2262.5), - ArithmeticOperations.lcm(12.5, BigDecimal.valueOf(18.1))); // Double + BigDecimal - } - - /** - * Test equal operation functionality - * - * @throws Exception - */ - @Test - public void testEqual() throws Exception { - - // Test 1 value - Assert.assertTrue(ArithmeticOperations.equal(3)); - - // Test 3 of the same value - Assert.assertTrue(ArithmeticOperations.equal(3, 3, 3)); - - // Test different values - Assert.assertFalse(ArithmeticOperations.equal(2, 4)); - - // Test null value - Assert.assertNull(ArithmeticOperations.equal((Integer) null)); - - // Test multiple null values - Assert.assertNull(ArithmeticOperations.equal((Integer) null, null)); - - // Test embedded null value - Assert.assertNull(ArithmeticOperations.equal(3, null, 3)); - - // Test precision - Assert.assertFalse(ArithmeticOperations.equal(BigDecimal.ONE, BigDecimal.valueOf(1.0))); - } - - /** - * Test max operation functionality - * - * @throws DirectiveExecutionException - */ - @Test - public void testMax() throws DirectiveExecutionException { - - // Test 1 value - Assert.assertEquals(2.0, ArithmeticOperations.max(2.0)); - - // Test 3 of the same value - Assert.assertEquals(2.0, ArithmeticOperations.max(2.0, 2.0, 2.0)); - - // Test at beginning - Assert.assertEquals(4.0, ArithmeticOperations.max(4.0, 2.0, 3.5)); - - // Test in middle - Assert.assertEquals(5.0, ArithmeticOperations.max(4.0, 5.0, 3.5)); - - // Test at end - Assert.assertEquals(3.0, ArithmeticOperations.max(2.0, 1.0, 3.0)); - - // Test negative numbers - Assert.assertEquals(-1.0, ArithmeticOperations.max(-5.0, -1.0, -2.0)); - - // Test cross-type - Assert.assertEquals((long) 5, ArithmeticOperations.max(5, (long) 3, 5)); - Assert.assertEquals((float) 4, ArithmeticOperations.max((long) 4, - (float) 2, - (long) 4)); - Assert.assertEquals(3.0, ArithmeticOperations.max((float) 3, 2.0, (float) 3)); - Assert.assertEquals(BigDecimal.valueOf(2.0), ArithmeticOperations.max(2.0, - BigDecimal.valueOf(1.0), - 2.0)); - - // Test overall cross-type - Assert.assertEquals(BigDecimal.valueOf(5), ArithmeticOperations.max(5, - (long) 4, - (float) 3, - 2.0, - BigDecimal.valueOf(1.0))); - } - - /** - * Tests for max operation exception with Byte input - * - * @throws DirectiveExecutionException - */ - @Test - public void testMaxByteException() throws DirectiveExecutionException { - expectedEx.expect(Exception.class); - ArithmeticOperations.max(Byte.valueOf((byte) 0)); - } - - /** - * Test min operation functionality - * - * @throws DirectiveExecutionException - */ - @Test - public void testMin() throws DirectiveExecutionException { - - // Test 1 value - Assert.assertEquals(2.0, ArithmeticOperations.min(2.0)); - - // Test 3 of the same value - Assert.assertEquals(2.0, ArithmeticOperations.min(2.0, 2.0, 2.0)); - - // Test at beginning - Assert.assertEquals(2.0, ArithmeticOperations.min(2.0, 4.0, 3.5)); - - // Test in middle - Assert.assertEquals(3.5, ArithmeticOperations.min(4.0, 3.5, 5.0)); - - // Test at end - Assert.assertEquals(1.0, ArithmeticOperations.min(2.0, 3.0, 1.0)); - - // Test negative numbers - Assert.assertEquals(-5.0, ArithmeticOperations.min(-5.0, -1.0, -2.0)); - - // Test cross-type - Assert.assertEquals((long) 3, ArithmeticOperations.min(3, (long) 5, 3)); - Assert.assertEquals((float) 4, ArithmeticOperations.min((long) 4, - (float) 5, - (long) 4)); - Assert.assertEquals(2.0, ArithmeticOperations.min((float) 2, 3.0, (float) 2)); - Assert.assertEquals(BigDecimal.valueOf(1.0), ArithmeticOperations.min(1.0, - BigDecimal.valueOf(2.0), - 1.0)); - - // Test overall cross-type - Assert.assertEquals(BigDecimal.valueOf(1.0), ArithmeticOperations.min(5, - (long) 4, - (float) 3, - 2.0, - BigDecimal.valueOf(1.0))); - } - - /** - * Tests for min operation exception with Byte input - * - * @throws DirectiveExecutionException - */ - @Test - public void testMinByteException() throws DirectiveExecutionException { - expectedEx.expect(Exception.class); - ArithmeticOperations.min(Byte.valueOf((byte) 0)); - } - - /** - * Test average operation functionality. - * - * @throws Exception - */ - @Test - public void testAverage() throws Exception { - - // Test 1 value - Assert.assertEquals(5.0, ArithmeticOperations.average(5.0)); - - // Test 3 values - Assert.assertEquals(2.0, ArithmeticOperations.average(1.0, 2.0, 3.0)); - - // Test repeating decimal - Assert.assertEquals(1.0 / 3.0, - ArithmeticOperations.average(1.0, 0.0, 0.0).doubleValue(), - 0.0001); - - // Test null value - Assert.assertEquals(2.0, ArithmeticOperations.average(null, 2)); - - // Test all null values - Assert.assertNull(ArithmeticOperations.average(null, null)); - - // Test multiple data types (no BigDecimal) - Assert.assertEquals(3.0, ArithmeticOperations.average(1, - (long) 2, - (short) 3, - (float) 4, - (double) 5)); - - // Test 1 value (BigDecimal) - Assert.assertEquals(BigDecimal.valueOf(5), - ArithmeticOperations.average(BigDecimal.valueOf(5))); - - // Test 3 values (BigDecimal) - Assert.assertEquals(BigDecimal.valueOf(2.0), - ArithmeticOperations.average(BigDecimal.valueOf(1.0), - BigDecimal.valueOf(2.0), - BigDecimal.valueOf(3.0))); - - // Test repeating decimal (BigDecimal) - Assert.assertEquals(BigDecimal.valueOf(1.0).divide(BigDecimal.valueOf(3), RoundingMode.HALF_EVEN), - ArithmeticOperations.average(BigDecimal.valueOf(1.0), - BigDecimal.ZERO, - BigDecimal.ZERO)); - - // Test multiple data types (BigDecimal) - Assert.assertEquals(BigDecimal.valueOf(3.0), - ArithmeticOperations.average(2, - (long) 2, - (short) 2, - (float) 4, - (double) 4, - BigDecimal.valueOf(4))); - } - - /** - * Tests for average operation exception with Byte input - * - * Input: (byte) 0 - * Expected: Exception - * - * @throws Exception - */ - @Test - public void testAverageByteException() throws Exception { - expectedEx.expect(Exception.class); - ArithmeticOperations.average(Byte.valueOf((byte) 0)); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/utils/ArtifactSummaryComparatorTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/utils/ArtifactSummaryComparatorTest.java deleted file mode 100644 index 3a9cebfd4..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/utils/ArtifactSummaryComparatorTest.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.utils; - -import io.cdap.cdap.api.artifact.ArtifactScope; -import io.cdap.cdap.api.artifact.ArtifactSummary; -import org.junit.Assert; -import org.junit.Test; - -public class ArtifactSummaryComparatorTest { - - @Test - public void testArtifactCompare() throws Exception { - ArtifactSummary summary1 = new ArtifactSummary("wrangler-transform", "1.0.0", ArtifactScope.USER); - ArtifactSummary summary2 = new ArtifactSummary("wrangler-transform", "1.0.1", ArtifactScope.SYSTEM); - Assert.assertEquals(summary2, ArtifactSummaryComparator.pickLatest(summary1, summary2)); - - summary2 = new ArtifactSummary("wrangler-transform", "1.0.0", ArtifactScope.SYSTEM); - Assert.assertEquals(summary1, ArtifactSummaryComparator.pickLatest(summary1, summary2)); - - summary1 = new ArtifactSummary("wrangler-transform", "2.0.0", ArtifactScope.SYSTEM); - Assert.assertEquals(summary1, ArtifactSummaryComparator.pickLatest(summary1, summary2)); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/utils/AvroSchemaGlossaryTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/utils/AvroSchemaGlossaryTest.java deleted file mode 100644 index 55df0212b..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/utils/AvroSchemaGlossaryTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.utils; - -import org.apache.avro.Schema; -import org.apache.commons.collections4.SetValuedMap; -import org.apache.commons.collections4.multimap.HashSetValuedHashMap; -import org.junit.Assert; -import org.junit.Test; -import org.mockito.Mockito; - -import java.io.IOException; - - -public class AvroSchemaGlossaryTest { - private static final String AVRO_STR = "{\n" - + " \"type\": \"record\",\n" - + " \"name\": \"TEST_6_0_0\",\n" - + " \"namespace\": \"google.com.datamodels.test\",\n" - + " \"_revision\": \"1\",\n" - + " \"fields\": []\n" - + "}"; - private static final String REVISION_TWO_AVRO_STR = "{\n" - + " \"type\": \"record\",\n" - + " \"name\": \"TEST_6_0_0\",\n" - + " \"namespace\": \"google.com.datamodels.test\",\n" - + " \"_revision\": \"2\",\n" - + " \"fields\": []\n" - + "}"; - private static final String DUMMY_SCHEMA = "{\n" - + " \"type\": \"record\",\n" - + " \"name\": \"TEST_6_0_1\",\n" - + " \"namespace\": \"google.com.datamodels.test\",\n" - + " \"_revision\": \"1\",\n" - + " \"fields\": []\n" - + "}"; - private static final String SCHEMA_NAME = "google.com.datamodels.test.TEST_6_0_0"; - private static final String DUMMY_NAME = "google.com.datamodels.test.TEST_6_0_1"; - - private class StubSchemaLoader implements AvroSchemaLoader { - - StubSchemaLoader(){} - - @Override - public SetValuedMap load() throws IOException { - return new HashSetValuedHashMap<>(); - } - } - - @Test - public void testConfigure_schema_successulLoad() throws IOException { - StubSchemaLoader loader = Mockito.mock(StubSchemaLoader.class); - Mockito.when(loader.load()).thenReturn(new HashSetValuedHashMap<>()); - AvroSchemaGlossary glossary = new AvroSchemaGlossary(loader); - Assert.assertTrue(glossary.configure()); - } - - @Test - public void testConfigure_schema_failureLoading() throws IOException { - StubSchemaLoader loader = Mockito.mock(StubSchemaLoader.class); - Mockito.doThrow(new IOException()).when(loader).load(); - - AvroSchemaGlossary glossary = new AvroSchemaGlossary(loader); - Assert.assertFalse(glossary.configure()); - } - - @Test - public void testGet_schema_successful() throws IOException { - Schema.Parser parser = new Schema.Parser().setValidate(false); - SetValuedMap expected = new HashSetValuedHashMap<>(); - expected.put(SCHEMA_NAME, parser.parse(AVRO_STR)); - - StubSchemaLoader loader = Mockito.mock(StubSchemaLoader.class); - Mockito.when(loader.load()).thenReturn(expected); - - AvroSchemaGlossary glossary = new AvroSchemaGlossary(loader); - Assert.assertTrue(glossary.configure()); - Assert.assertEquals(SCHEMA_NAME, glossary.get(SCHEMA_NAME, 1L).getFullName()); - } - - @Test - public void testGet_schema_notFoundInGlossary() throws IOException { - SetValuedMap expected = new HashSetValuedHashMap<>(); - StubSchemaLoader loader = Mockito.mock(StubSchemaLoader.class); - Mockito.when(loader.load()).thenReturn(expected); - - AvroSchemaGlossary glossary = new AvroSchemaGlossary(loader); - Assert.assertTrue(glossary.configure()); - Assert.assertNull(glossary.get(SCHEMA_NAME, 0L)); - } - - @Test - public void testGet_schema_unknownVersion() throws IOException { - Schema.Parser parser = new Schema.Parser().setValidate(false); - SetValuedMap expected = new HashSetValuedHashMap<>(); - expected.put(SCHEMA_NAME, parser.parse(AVRO_STR)); - - StubSchemaLoader loader = Mockito.mock(StubSchemaLoader.class); - Mockito.when(loader.load()).thenReturn(expected); - - AvroSchemaGlossary glossary = new AvroSchemaGlossary(loader); - Assert.assertTrue(glossary.configure()); - Assert.assertNull(glossary.get(SCHEMA_NAME, 99L)); - } - - @Test - public void testGetAll_schema_populatedCollection() throws IOException { - Schema.Parser parser = new Schema.Parser().setValidate(false); - SetValuedMap expected = new HashSetValuedHashMap<>(); - expected.put(SCHEMA_NAME, parser.parse(AVRO_STR)); - expected.put(SCHEMA_NAME, new Schema.Parser().setValidate(false).parse(REVISION_TWO_AVRO_STR)); - expected.put(DUMMY_NAME, parser.parse(DUMMY_SCHEMA)); - - StubSchemaLoader loader = Mockito.mock(StubSchemaLoader.class); - Mockito.when(loader.load()).thenReturn(expected); - - AvroSchemaGlossary glossary = new AvroSchemaGlossary(loader); - Assert.assertTrue(glossary.configure()); - Assert.assertEquals(3, glossary.getAll().size()); - } - - @Test - public void testGetAll_multipleRevisions_populatedCollection() throws IOException { - SetValuedMap expected = new HashSetValuedHashMap<>(); - expected.put(SCHEMA_NAME, new Schema.Parser().setValidate(false).parse(AVRO_STR)); - expected.put(SCHEMA_NAME, new Schema.Parser().setValidate(false).parse(REVISION_TWO_AVRO_STR)); - - StubSchemaLoader loader = Mockito.mock(StubSchemaLoader.class); - Mockito.when(loader.load()).thenReturn(expected); - - AvroSchemaGlossary glossary = new AvroSchemaGlossary(loader); - Assert.assertTrue(glossary.configure()); - Assert.assertEquals(2, glossary.getAll().size()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/utils/JsonTestData.java b/wrangler-core/src/test/java/io/cdap/wrangler/utils/JsonTestData.java deleted file mode 100644 index b5fa647fc..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/utils/JsonTestData.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -/** - * Class description here. - */ -public final class JsonTestData { - public static final String MALFORMED_BASIC_JSON = "{\n" + - " \"a\" : 1,\n" + - " \"b\" : 2.0,\n" + - " \"c\" : \"test\"\n" + - " \"d\" : true\n" + - "}"; - public static final String BASIC = "{\n" + - " \"a\" : 1,\n" + - " \"b\" : 2.0,\n" + - " \"c\" : \"test\",\n" + - " \"d\" : true\n" + - "}"; - public static final String ARRAY_OF_OBJECTS = "[\n" + - " { \"a\" : 1, \"b\" : 2, \"c\" : \"x\" },\n" + - " { \"a\" : 2, \"b\" : 3, \"c\" : \"y\" },\n" + - " { \"a\" : 3, \"b\" : 4, \"c\" : \"z\" }\n" + - "]"; - public static final String SIMPLE_JSON_OBJECT = "{\n" + - " \"fname\" : \"root\",\n" + - " \"lname\" : \"joltie\",\n" + - " \"age\" : 20,\n" + - " \"weight\" : 182.3,\n" + - " \"location\" : \"New York\",\n" + - " \"address\" : {\n" + - " \"city\" : \"New York\",\n" + - " \"state\" : \"New York\",\n" + - " \"zip\" : 97474,\n" + - " \"gps\" : {\n" + - " \"lat\" : 12.23,\n" + - " \"long\" : 14.54,\n" + - " \"universe\" : {\n" + - " \"galaxy\" : \"milky way\",\n" + - " \"start\" : \"sun\",\n" + - " \"size\" : 24000,\n" + - " \"alive\" : true\n" + - " }\n" + - " }\n" + - " }\n" + - "}"; - public static final String SIMPLE_JSON_OBJECT_CASE_MIX = "{\n" + - " \"FNAME\" : \"root\",\n" + - " \"lname\" : \"joltie\",\n" + - " \"age\" : 20,\n" + - " \"weight\" : 182.3,\n" + - " \"location\" : \"New York\",\n" + - " \"ADDRESS\" : {\n" + - " \"city\" : \"New York\",\n" + - " \"state\" : \"New York\",\n" + - " \"zip\" : 97474,\n" + - " \"GPS\" : {\n" + - " \"lat\" : 12.23,\n" + - " \"long\" : 14.54,\n" + - " \"universe\" : {\n" + - " \"galaxy\" : \"milky way\",\n" + - " \"start\" : \"sun\",\n" + - " \"size\" : 24000,\n" + - " \"ALIVE\" : true\n" + - " }\n" + - " }\n" + - " }\n" + - "}"; - public static final String JSON_ARRAY_WITH_OBJECT = "[\n" + - " {\n" + - " \"fname\" : \"root\",\n" + - " \"lname\" : \"joltie\",\n" + - " \"age\" : 20,\n" + - " \"weight\" : 182.3,\n" + - " \"location\" : \"New York\",\n" + - " \"address\" : {\n" + - " \"city\" : \"New York\",\n" + - " \"state\" : \"New York\",\n" + - " \"zip\" : 97474,\n" + - " \"gps\" : {\n" + - " \"lat\" : 12.23,\n" + - " \"long\" : 14.54,\n" + - " \"universe\" : {\n" + - " \"galaxy\" : \"milky way\",\n" + - " \"start\" : \"sun\",\n" + - " \"size\" : 24000,\n" + - " \"alive\" : true,\n" + - " \"population\" : [ 4,5,6,7,8,9]\n" + - " }\n" + - " }\n" + - " }\n" + - "}\n" + - "]"; - public static final String JSON_ARRAY_WITH_OBJECT_CASE_MIX = "[\n" + - " {\n" + - " \"FName\" : \"root\",\n" + - " \"LNAME\" : \"joltie\",\n" + - " \"age\" : 20,\n" + - " \"weight\" : 182.3,\n" + - " \"LOCATION\" : \"New York\",\n" + - " \"address\" : {\n" + - " \"city\" : \"New York\",\n" + - " \"state\" : \"New York\",\n" + - " \"zip\" : 97474,\n" + - " \"gps\" : {\n" + - " \"lat\" : 12.23,\n" + - " \"long\" : 14.54,\n" + - " \"Universe\" : {\n" + - " \"galaxy\" : \"milky way\",\n" + - " \"start\" : \"sun\",\n" + - " \"size\" : 24000,\n" + - " \"alive\" : true,\n" + - " \"POPULATION\" : [ 4,5,6,7,8,9]\n" + - " }\n" + - " }\n" + - " }\n" + - "}\n" + - "]"; - public static final String COMPLEX_1 = "{\n" + - " \"numbers\" : [ 1,2,3,4,5,6],\n" + - " \"object\" : {\n" + - " \"a\" : 1,\n" + - " \"b\" : 2,\n" + - " \"c\" : [ \"a\", \"b\", \"c\", \"d\" ],\n" + - " \"d\" : [ \n" + - " { \"a\" : 1 },\n" + - " { \"a\" : 2 },\n" + - " { \"a\" : 3 }\n" + - " ]\n" + - " }\n" + - "}"; - public static final String ARRAY_OF_NUMBERS = "[ 1, 2, 3, 4, 5]"; - public static final String ARRAY_OF_STRING = "[ \"A\", \"B\", \"C\"]"; - public static final String COMPLEX_2 = "{\n" + - " \"a\" : [ 1, 2, 3, 4],\n" + - " \"b\" : [ \"A\", \"B\", \"C\"],\n" + - " \"d\" : true,\n" + - " \"e\" : 1,\n" + - " \"f\" : \"string\",\n" + - " \"g\" : {\n" + - " \"g1\" : [ 1, 2, 3, 4],\n" + - " \"g2\" : [\n" + - " { \"g21\" : 1}\n" + - " ]\n" + - " }\n" + - "}"; - public static final String FB_JSON = "{" - + "\"apiVersion\":\"2.0\", " - + "\"data\":{ " - + " \"updated\":\"2010-01-07T19:58:42.949Z\", " - + " \"totalItems\":800, " - + " \"startIndex\":1, " - + " \"itemsPerPage\":1, " - + " \"items\":[ " - + " {\"id\":\"hYB0mn5zh2c\"," - + " \"uploaded\":\"2007-06-05T22:07:03.000Z\"," - + " \"updated\":\"2010-01-07T13:26:50.000Z\"," - + " \"uploader\":\"GoogleDeveloperDay\"," - + " \"category\":\"News\"," - + " \"title\":\"Google Developers Day US - Maps API Introduction\"," - + " \"description\":\"Google Maps API Introduction ...\"," - + " \"tags\":[ \"GDD07\",\"GDD07US\",\"Maps\" ]," - + " \"thumbnail\":{" - + " \"default\":\"http://i.ytimg.com/vi/hYB0mn5zh2c/default.jpg\"," - + " \"hqDefault\":\"http://i.ytimg.com/vi/hYB0mn5zh2c/hqdefault.jpg\" }," - + " \"player\":{ \"default\":\"http://www.youtube.com/watch?vu003dhYB0mn5zh2c\" }," - + " \"content\":{ " - + " \"a\":\"rtsp://v5.cache3.c.youtube.com/CiILENy.../0/0/0/video.3gp\"," - + " \"t\":\"http://www.youtube.com/v/hYB0mn5zh2c?f...\"," - + " \"y\":\"rtsp://v1.cache1.c.youtube.com/CiILENy.../0/0/0/video.3gp\" }," - + " \"duration\":2840, \"aspectRatio\":\"widescreen\", \"rating\":4.63, \"ratingCount\":68," - + " \"viewCount\":220101, \"favoriteCount\":201, \"commentCount\":22, " - + " \"status\":{ \"value\":\"restricted\", \"reason\":\"limitedSyndication\" }," - + " \"accessControl\":{ " - + " \"syndicate\":\"allowed\", \"commentVote\":\"allowed\", \"rate\":\"allowed\", \"list\":\"allowed\"," - + " \"comment\":\"allowed\", \"embed\":\"allowed\", \"videoRespond\":\"moderated\" }" - + " }" - + " ]" - + " }" - + " }"; - public static final String EMPTY_OBJECT = "{ \"dividesplitdetails\":{\"type0\":[]}}"; - public static final String NULL_OBJECT = "{ \"dividesplitdetails\":{\"type0\":null, \"type1\":0}}"; -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/utils/KryoSerializerTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/utils/KryoSerializerTest.java deleted file mode 100644 index 10477465e..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/utils/KryoSerializerTest.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright © 2024 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.utils; - -import com.google.common.collect.Lists; -import com.google.gson.JsonParser; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.api.RemoteDirectiveResponse; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class KryoSerializerTest { - - private static final String[] TESTS = new String[]{ - JsonTestData.BASIC, - JsonTestData.SIMPLE_JSON_OBJECT, - JsonTestData.ARRAY_OF_OBJECTS, - JsonTestData.JSON_ARRAY_WITH_OBJECT, - JsonTestData.COMPLEX_1, - JsonTestData.ARRAY_OF_NUMBERS, - JsonTestData.ARRAY_OF_STRING, - JsonTestData.COMPLEX_2, - JsonTestData.EMPTY_OBJECT, - JsonTestData.NULL_OBJECT, - JsonTestData.FB_JSON - }; - - private static final String[] directives = new String[]{ - "set-column body json:Parse(body)" - }; - - @Test - public void testJsonTypes() throws Exception { - SchemaConverter converter = new SchemaConverter(); - RecordConvertor recordConvertor = new RecordConvertor(); - JsonParser parser = new JsonParser(); - RecipePipeline executor = TestingRig.execute(directives); - for (String test : TESTS) { - Row row = new Row("body", test); - - List expectedRows = executor.execute(Lists.newArrayList(row)); - byte[] serializedRows = new KryoSerializer().fromRemoteDirectiveResponse( - new RemoteDirectiveResponse(expectedRows, null)); - List gotRows = new KryoSerializer().toRemoteDirectiveResponse(serializedRows).getRows(); - Assert.assertArrayEquals(expectedRows.toArray(), gotRows.toArray()); - } - } - - @Test - public void testLogicalTypes() throws Exception { - Row testRow = new Row(); - testRow.add("id", 1); - testRow.add("name", "abc"); - testRow.add("date", LocalDate.of(2018, 11, 11)); - testRow.add("time", LocalTime.of(11, 11, 11)); - testRow.add("timestamp", ZonedDateTime.of(2018, 11, 11, 11, 11, 11, 0, ZoneId.of("UTC"))); - testRow.add("bigdecimal", new BigDecimal(new BigInteger("123456"), 5)); - testRow.add("datetime", LocalDateTime.now()); - List expectedRows = Collections.singletonList(testRow); - byte[] serializedRows = new KryoSerializer().fromRemoteDirectiveResponse( - new RemoteDirectiveResponse(expectedRows, null)); - List gotRows = new KryoSerializer().toRemoteDirectiveResponse(serializedRows).getRows(); - Assert.assertArrayEquals(expectedRows.toArray(), gotRows.toArray()); - } - - @Test - public void testCollectionTypes() throws Exception { - List list = new ArrayList<>(); - list.add(null); - list.add(1); - list.add(2); - Set set = new HashSet<>(); - set.add(null); - set.add(1); - set.add(2); - Map map = new HashMap<>(); - map.put("null", null); - map.put("1", 1); - map.put("2", 2); - - Row testRow = new Row(); - testRow.add("list", list); - testRow.add("set", set); - testRow.add("map", map); - - List expectedRows = Collections.singletonList(testRow); - byte[] serializedRows = new KryoSerializer().fromRemoteDirectiveResponse( - new RemoteDirectiveResponse(expectedRows, null)); - List gotRows = new KryoSerializer().toRemoteDirectiveResponse(serializedRows).getRows(); - Assert.assertArrayEquals(expectedRows.toArray(), gotRows.toArray()); - } - - @Test - public void testWithSchema() throws Exception { - Row testRow = new Row(); - testRow.add("id", 1); - testRow.add("name", "abc"); - testRow.add("date", LocalDate.of(2018, 11, 11)); - testRow.add("time", LocalTime.of(11, 11, 11)); - testRow.add("timestamp", ZonedDateTime.of(2018, 11, 11, 11, 11, 11, 0, ZoneId.of("UTC"))); - testRow.add("bigdecimal", new BigDecimal(new BigInteger("123456"), 5)); - testRow.add("datetime", LocalDateTime.now()); - List expectedRows = Collections.singletonList(testRow); - - SchemaConverter converter = new SchemaConverter(); - Schema expectedSchema = converter.toSchema("myrecord", expectedRows.get(0)); - - byte[] serializedRows = new KryoSerializer().fromRemoteDirectiveResponse( - new RemoteDirectiveResponse(expectedRows, expectedSchema)); - RemoteDirectiveResponse response = new KryoSerializer().toRemoteDirectiveResponse( - serializedRows); - - Assert.assertArrayEquals(expectedRows.toArray(), response.getRows().toArray()); - Assert.assertEquals(expectedSchema, response.getOutputSchema()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/utils/ObjectSerDeTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/utils/ObjectSerDeTest.java deleted file mode 100644 index f297b23e8..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/utils/ObjectSerDeTest.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import com.google.common.base.Charsets; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.RemoteDirectiveResponse; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.time.LocalDate; -import java.time.LocalTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.List; - -/** - * Tests {@link ObjectSerDe} - */ -public class ObjectSerDeTest { - - @Test - public void testSerDe() throws Exception { - ObjectSerDe> objectSerDe = new ObjectSerDe<>(); - List rows = new ArrayList<>(); - rows.add(new Row("bytes", "foo".getBytes(Charsets.UTF_8)).add("a", 1).add("b", 2.0)); - rows.add(new Row("bytes", "boo".getBytes(Charsets.UTF_8)).add("a", 2).add("b", 3.0)); - byte[] bytes = objectSerDe.toByteArray(rows); - List newRows = objectSerDe.toObject(bytes); - Assert.assertEquals(rows.size(), newRows.size()); - Assert.assertEquals(rows.get(0).getColumn(0), newRows.get(0).getColumn(0)); - Assert.assertEquals(rows.get(0).getColumn(1), newRows.get(0).getColumn(1)); - Assert.assertEquals(rows.get(0).getColumn(2), newRows.get(0).getColumn(2)); - } - - @Test - public void testNull() throws Exception { - ObjectSerDe> objectSerDe = new ObjectSerDe<>(); - List rows = new ArrayList<>(); - rows.add(new Row("bytes", null)); - rows.add(new Row("bytes", null)); - byte[] bytes = objectSerDe.toByteArray(rows); - List newRows = objectSerDe.toObject(bytes); - Assert.assertEquals(rows.size(), newRows.size()); - } - - @Test - public void testLogicalTypeSerDe() throws Exception { - ObjectSerDe> objectSerDe = new ObjectSerDe<>(); - List expectedRows = new ArrayList<>(); - - Row firstRow = new Row(); - firstRow.add("id", 1); - firstRow.add("name", "abc"); - firstRow.add("date", LocalDate.of(2018, 11, 11)); - firstRow.add("time", LocalTime.of(11, 11, 11)); - firstRow.add("timestamp", ZonedDateTime.of(2018, 11 , 11 , 11, 11, 11, 0, ZoneId.of("UTC"))); - expectedRows.add(firstRow); - byte[] bytes = objectSerDe.toByteArray(expectedRows); - List actualRows = objectSerDe.toObject(bytes); - Assert.assertEquals(expectedRows.size(), actualRows.size()); - - Row secondRow = new Row(); - secondRow.add("id", 2); - secondRow.add("name", null); - secondRow.add("date", LocalDate.of(2018, 12, 11)); - secondRow.add("time", LocalTime.of(11, 12, 11)); - secondRow.add("timestamp", null); - expectedRows.add(secondRow); - bytes = objectSerDe.toByteArray(expectedRows); - actualRows = objectSerDe.toObject(bytes); - Assert.assertEquals(expectedRows.size(), actualRows.size()); - } - @Test - public void testRemoteDirectiveResponseSerDe() throws Exception { - List expectedRows = new ArrayList<>(); - Row firstRow = new Row(); - firstRow.add("id", 1); - expectedRows.add(firstRow); - Schema expectedSchema = Schema.recordOf(Schema.Field.of("id", Schema.of(Schema.Type.INT))); - RemoteDirectiveResponse expectedResponse = new RemoteDirectiveResponse(expectedRows, expectedSchema); - ObjectSerDe objectSerDe = new ObjectSerDe<>(); - - byte[] bytes = objectSerDe.toByteArray(expectedResponse); - RemoteDirectiveResponse actualResponse = objectSerDe.toObject(bytes); - - Assert.assertEquals(expectedResponse.getRows().size(), actualResponse.getRows().size()); - Assert.assertEquals(expectedResponse.getOutputSchema(), actualResponse.getOutputSchema()); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/utils/RecordConvertorTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/utils/RecordConvertorTest.java deleted file mode 100644 index 7b29020c6..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/utils/RecordConvertorTest.java +++ /dev/null @@ -1,363 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.data.schema.Schema.LogicalType; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.ErrorRecord; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -/** - * Tests {@link RecordConvertor} - */ -public class RecordConvertorTest { - - @Test - public void testComplexNestedStructureConversion() throws Exception { - String[] directives = new String[] { - "parse-as-json body", - }; - - List rows = Arrays.asList( - new Row("body", "{\n" + - " \"name\" : {\n" + - " \"fname\" : \"Joltie\",\n" + - " \"lname\" : \"Root\"\n" + - " },\n" + - " \"boolean\" : true,\n" + - " \"coordinates\" : [\n" + - " 12.56,\n" + - " 45.789\n" + - " ],\n" + - " \"numbers\" : [\n" + - " 2," + - " 2,\n" + - " 3,\n" + - " 4,\n" + - " 5,\n" + - " 6\n" + - " ],\n" + - " \"moves\" : [\n" + - " { \"a\" : 1, \"b\" : \"X\", \"c\" : 2.8},\n" + - " { \"a\" : 2, \"b\" : \"Y\", \"c\" : 232342.8},\n" + - " { \"a\" : 3, \"b\" : \"Z\", \"c\" : null},\n" + - " { \"a\" : 4, \"b\" : \"U\"}\n" + - " ],\n" + - " \"integer\" : 1,\n" + - " \"double\" : 2.8,\n" + - " \"float\" : 45.6,\n" + - " \"aliases\" : [\n" + - " \"root\",\n" + - " \"joltie\",\n" + - " \"bunny\"\n" + - " ]\n" + - "}") - ); - - rows = TestingRig.execute(directives, rows); - Row row = RowHelper.createMergedRow(rows); - - SchemaConverter schemaConvertor = new SchemaConverter(); - RecordConvertor convertor = new RecordConvertor(); - - Schema schema = schemaConvertor.toSchema("superrecord", row); - List outputs = convertor.toStructureRecord(rows, schema); - - Assert.assertEquals(1, outputs.size()); - Assert.assertEquals(6, ((List) outputs.get(0).get("body_numbers")).size()); - } - - @Test - public void testEmptyString() throws Exception { - Schema schema = Schema.recordOf("test", - Schema.Field.of("value", Schema.of(Schema.Type.STRING)) - ); - String[] directives = new String[] { - "parse-as-csv body ','", - "rename body_2 value", - "drop body" - }; - - List rows = Arrays.asList( - new Row().add("body", "a,"), - new Row().add("body", "b,b") - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows, schema); - List errors = pipeline.errors(); - Assert.assertEquals(2, results.size()); - Assert.assertEquals(0, errors.size()); - Assert.assertEquals("", results.get(0).get("value")); - Assert.assertEquals("b", results.get(1).get("value")); - } - - @Test - public void testNullableEmptyField() throws Exception { - Schema schema = Schema.recordOf("test", - Schema.Field.of("value", Schema.nullableOf(Schema.of(Schema.Type.DOUBLE))) - ); - String[] directives = new String[] { - "parse-as-csv body ','", - "rename body_2 value", - "set-type value double", - "drop body" - }; - - List rows = Arrays.asList( - new Row().add("body", "a,1"), - new Row().add("body", "b,2"), - new Row().add("body", "c,"), - new Row().add("body", "d,3"), - new Row().add("body", "e,") - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows, schema); - List errors = pipeline.errors(); - Assert.assertEquals(5, results.size()); - Assert.assertEquals(0, errors.size()); - } - - @Test - public void testNullableEmptyArray() throws Exception { - Schema schema = Schema.recordOf("test", Schema.Field.of("test_id", Schema.of(Schema.Type.STRING)), - Schema.Field.of("values", Schema.nullableOf(Schema.arrayOf(Schema.nullableOf(Schema.of(Schema.Type.INT)))))); - - String[] directives = new String[] {}; - - List rows = Arrays.asList( - new Row().add("test_id", "a").add("values", ImmutableList.of(1)), - new Row().add("test_id", "b").add("values", null), - new Row().add("test_id", "c"), - new Row().add("test_id", "d").add("values", ImmutableList.of()), - new Row().add("test_id", "e").add("values", ImmutableList.of(1, 2, 3)) - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows, schema); - List errors = pipeline.errors(); - Assert.assertEquals(5, results.size()); - Assert.assertEquals(0, errors.size()); - } - - @Test(expected = RecipeException.class) - public void testNonNullableEmptyField() throws Exception { - Schema schema = Schema.recordOf("test", - Schema.Field.of("value", Schema.of(Schema.Type.DOUBLE)) - ); - - String[] directives = new String[] { - "parse-as-csv body ','", - "rename body_2 value", - "set-type value double", - "drop body" - }; - - List rows = Arrays.asList( - new Row().add("body", "a,1"), - new Row().add("body", "b,2"), - new Row().add("body", "c,"), - new Row().add("body", "d,3"), - new Row().add("body", "e,") - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows, schema); - List errors = pipeline.errors(); - Assert.assertEquals(5, results.size()); - Assert.assertEquals(0, errors.size()); - } - - @Test - public void testTypeConversions() throws Exception { - final Schema schema = Schema.recordOf("record", - Schema.Field.of("body_TimeStamp", Schema.of(Schema.Type.LONG)), - Schema.Field.of("i2l", Schema.of(Schema.Type.LONG)), - Schema.Field.of("sh2l", Schema.of(Schema.Type.LONG)), - Schema.Field.of("s2l", Schema.of(Schema.Type.LONG)), - Schema.Field.of("i2f", Schema.of(Schema.Type.FLOAT)), - Schema.Field.of("s2f", Schema.of(Schema.Type.FLOAT)), - Schema.Field.of("l2f", Schema.of(Schema.Type.FLOAT)), - Schema.Field.of("i2d", Schema.of(Schema.Type.DOUBLE)), - Schema.Field.of("s2d", Schema.of(Schema.Type.DOUBLE)), - Schema.Field.of("l2d", Schema.of(Schema.Type.DOUBLE)), - Schema.Field.of("f2d", Schema.of(Schema.Type.DOUBLE)) - ); - - String[] directives = new String[] { - "parse-as-json body", - "drop body" - }; - - List rows = Collections.singletonList( - new Row("body", "{\"DeviceID\":\"xyz-abc\",\"SeqNo\":1000,\"TimeStamp\":123456,\"LastContact\":123456," + - "\"IMEI\":\"345rft567hy65\",\"MSISDN\":\"+19999999999\",\"AuthToken\":\"erdfgg34gtded\",\"Position\":" + - "{\"Lat\":\"20.22\",\"Lon\":\"-130.45\",\"Accuracy\":16,\"Compass\":108.22,\"TimeStamp\":123456}," + - "\"Battery\":50,\"Alert\":{\"Id\":26,\"Type\":\"SOS\",\"TimeStamp\":123456},\"Steps\":100,\"Calories\":15}") - .add("i2l", 2) - .add("sh2l", (short) 1) - .add("s2l", "2") - .add("i2f", 1) - .add("s2f", (short) 2) - .add("l2f", 1L) - .add("i2d", 1) - .add("s2d", (short) 3) - .add("l2d", 2L) - .add("f2d", 2.3f) - ); - - RecipePipeline pipeline = TestingRig.execute(directives); - List results = pipeline.execute(rows, schema); - Assert.assertEquals(1, results.size()); - Assert.assertEquals(123456L, results.get(0).get("body_TimeStamp").longValue()); - Assert.assertEquals(2L, results.get(0).get("i2l").longValue()); - Assert.assertEquals(1L, results.get(0).get("sh2l").longValue()); - Assert.assertEquals(2L, results.get(0).get("s2l").longValue()); - Assert.assertEquals(1.0f, results.get(0).get("i2f"), 0.0001f); - Assert.assertEquals(2.0f, results.get(0).get("s2f"), 0.0001f); - Assert.assertEquals(1.0f, results.get(0).get("l2f"), 0.0001f); - Assert.assertEquals(1.0d, results.get(0).get("i2d"), 0.0001d); - Assert.assertEquals(3.0d, results.get(0).get("s2d"), 0.0001d); - Assert.assertEquals(2.0d, results.get(0).get("l2d"), 0.0001d); - Assert.assertEquals(2.3d, results.get(0).get("f2d"), 0.0001d); - } - - @Test - public void testRowWithLogicalType() throws Exception { - Row testRow = new Row(); - testRow.add("id", 1); - testRow.add("name", "abc"); - testRow.add("date", LocalDate.of(2018, 11, 11)); - testRow.add("time", null); - testRow.add("timestamp", ZonedDateTime.of(2018, 11 , 11 , 11, 11, 11, 0, ZoneId.of("UTC"))); - - Schema schema = Schema.recordOf("expectedRecord", - Schema.Field.of("id", Schema.nullableOf(Schema.of(Schema.Type.INT))), - Schema.Field.of("name", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("date", Schema.nullableOf(Schema.of(Schema.LogicalType.DATE))), - Schema.Field.of("time", Schema.nullableOf( - Schema.of(Schema.LogicalType.TIME_MICROS))), - Schema.Field.of("timestamp", Schema.nullableOf( - Schema.of(Schema.LogicalType.TIMESTAMP_MICROS)))); - - - StructuredRecord expected = StructuredRecord.builder(schema) - .set("id", 1) - .set("name", "abc") - .setDate("date", LocalDate.of(2018, 11, 11)) - .setTime("time", null) - .setTimestamp("timestamp", ZonedDateTime.of(2018, 11 , 11 , 11, 11, 11, 0, ZoneId.of("UTC"))).build(); - - RecordConvertor rc = new RecordConvertor(); - StructuredRecord actual = rc.decodeRecord(testRow, schema); - - Assert.assertEquals(expected, actual); - } - - @Test - public void testArray() throws Exception { - Row testRow = new Row(); - testRow.add("id", 1); - testRow.add("name", "abc"); - testRow.add("date", LocalDate.of(2018, 11, 11)); - testRow.add("time", null); - testRow.add("timestamp", ZonedDateTime.of(2018, 11, 11, 11, 11, 11, 0, ZoneId.of("UTC"))); - testRow.add("array", ImmutableList.of(1, 2, 3)); - - Schema schema = Schema.recordOf("expectedRecord", - Schema.Field.of("id", Schema.nullableOf(Schema.of(Schema.Type.INT))), - Schema.Field.of("name", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("date", Schema.nullableOf(Schema.of(Schema.LogicalType.DATE))), - Schema.Field.of("time", Schema.nullableOf( - Schema.of(Schema.LogicalType.TIME_MICROS))), - Schema.Field.of("timestamp", Schema.nullableOf( - Schema.of(Schema.LogicalType.TIMESTAMP_MICROS))), - Schema.Field.of("array", Schema.nullableOf( - Schema.arrayOf(Schema.nullableOf(Schema.of(Schema.Type.INT)))))); - - StructuredRecord expected = StructuredRecord.builder(schema) - .set("id", 1) - .set("name", "abc") - .setDate("date", LocalDate.of(2018, 11, 11)) - .setTime("time", null) - .setTimestamp("timestamp", ZonedDateTime.of(2018, 11, 11, 11, 11, 11, 0, ZoneId.of("UTC"))) - .set("array", ImmutableList.of(1, 2, 3)).build(); - - RecordConvertor rc = new RecordConvertor(); - StructuredRecord actual = rc.decodeRecord(testRow, schema); - - Assert.assertEquals(expected, actual); - } - - @Test - public void testNestedRecordConversion() throws Exception { - Schema productSchema = Schema.recordOf("product", - Schema.Field.of("id", - Schema.nullableOf(Schema.of(Schema.Type.INT))), - Schema.Field.of("name", - Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("cost", - Schema.nullableOf(Schema.of(Schema.Type.DOUBLE))) - ); - Schema expectedSchema = Schema.recordOf("recordA", - Schema.Field.of("name", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("product", productSchema) - ); - Row row = new Row(); - row.add("name_a", "John"); - row.add("product", StructuredRecord.builder(productSchema) - .set("id", 1) - .set("name", "Shovel") - .set("cost", 5.0) - .build()); - String[] directives = new String[]{ - "rename name_a name", - }; - RecipePipeline pipeline = TestingRig.execute(directives); - List records = Collections.singletonList(row); - List results = pipeline.execute(records, expectedSchema); - Assert.assertEquals(expectedSchema, results.get(0).getSchema()); - } - - @Test - public void testDateTimeConversion() throws RecordConvertorException { - String fieldName = "field"; - LocalDateTime value = LocalDateTime.now(); - Schema schema = Schema.recordOf("test", - Schema.Field.of(fieldName, Schema.nullableOf(Schema.of(LogicalType.DATETIME)))); - Row row = new Row(); - row.add(fieldName, value); - StructuredRecord structuredRecord = new RecordConvertor().decodeRecord(row, schema); - Assert.assertEquals(value, structuredRecord.getDateTime(fieldName)); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/utils/ReferenceNamesTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/utils/ReferenceNamesTest.java deleted file mode 100644 index 516602f69..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/utils/ReferenceNamesTest.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - - -package io.cdap.wrangler.utils; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Test for reference name util - */ -public class ReferenceNamesTest { - - @Test - public void testValidation() { - // valid names - ReferenceNames.validate("111-22-33.csv"); - ReferenceNames.validate("abc$2.txt"); - ReferenceNames.validate("1$-2.random"); - - // invalid names - testInValidReferenceName("111-22-33(1).csv"); - testInValidReferenceName("1*!.csv"); - testInValidReferenceName("!@#$%^&"); - } - - @Test - public void testCleanse() { - // valid names - Assert.assertEquals("111-22-33.csv", ReferenceNames.cleanseReferenceName("111-22-33.csv")); - Assert.assertEquals("abc$2.txt", ReferenceNames.cleanseReferenceName("abc$2.txt")); - Assert.assertEquals("1$-2.random", ReferenceNames.cleanseReferenceName("1$-2.random")); - - // invalid names - Assert.assertEquals("111-22-331.csv", ReferenceNames.cleanseReferenceName("111-22-33(1).csv")); - Assert.assertEquals("1.csv", ReferenceNames.cleanseReferenceName("1*!.csv")); - Assert.assertEquals("$", ReferenceNames.cleanseReferenceName("!@#$%^&")); - - // invalid name with no valid characters - Assert.assertEquals("sample", ReferenceNames.cleanseReferenceName("!@#%^&*()")); - } - - private void testInValidReferenceName(String name) { - try { - ReferenceNames.validate(name); - Assert.fail(); - } catch (IllegalArgumentException e) { - // expected - } - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/utils/SchemaConverterTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/utils/SchemaConverterTest.java deleted file mode 100644 index 883284c15..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/utils/SchemaConverterTest.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.utils; - -import com.google.common.collect.Lists; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.format.StructuredRecordStringConverter; -import io.cdap.wrangler.TestingRig; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Tests {@link SchemaConverter} - */ -public class SchemaConverterTest { - private static final String[] TESTS = new String[] { - JsonTestData.BASIC, - JsonTestData.SIMPLE_JSON_OBJECT, - JsonTestData.ARRAY_OF_OBJECTS, - JsonTestData.JSON_ARRAY_WITH_OBJECT, - JsonTestData.COMPLEX_1, - JsonTestData.ARRAY_OF_NUMBERS, - JsonTestData.ARRAY_OF_STRING, - JsonTestData.COMPLEX_2, - JsonTestData.EMPTY_OBJECT, - JsonTestData.FB_JSON - }; - - private static final String[] directives = new String[] { - "set-column body json:Parse(body)" - }; - - @Test - public void conversionTest() throws Exception { - SchemaConverter converter = new SchemaConverter(); - RecordConvertor recordConvertor = new RecordConvertor(); - JsonParser parser = new JsonParser(); - RecipePipeline executor = TestingRig.execute(directives); - for (String test : TESTS) { - Row row = new Row("body", test); - - List rows = executor.execute(Lists.newArrayList(row)); - Schema schema = converter.toSchema("myrecord", rows.get(0)); - if (schema.getType() != Schema.Type.RECORD) { - schema = Schema.recordOf("array", Schema.Field.of("array", schema)); - } - Assert.assertNotNull(schema); - List structuredRecords = recordConvertor.toStructureRecord(rows, schema); - String decode = StructuredRecordStringConverter.toJsonString(structuredRecords.get(0)); - JsonElement originalObject = parser.parse(test); - JsonElement roundTripObject = parser.parse(decode).getAsJsonObject().get("body"); - Assert.assertEquals(originalObject, roundTripObject); - Assert.assertTrue(structuredRecords.size() > 0); - } - } - - @Test - public void testJsonPathGeneration() throws Exception { - JsonPathGenerator paths = new JsonPathGenerator(); - List path = paths.get(JsonTestData.COMPLEX_1); - Assert.assertEquals(path.size(), 23); - } - - @Test - public void testLogicalType() throws Exception { - Row testRow = new Row(); - testRow.add("id", 1); - testRow.add("name", "abc"); - testRow.add("date", LocalDate.of(2018, 11, 11)); - testRow.add("time", LocalTime.of(11, 11, 11)); - testRow.add("timestamp", ZonedDateTime.of(2018, 11 , 11 , 11, 11, 11, 0, ZoneId.of("UTC"))); - testRow.add("d", new BigDecimal(new BigInteger("123456"), 5)); - testRow.add("datetime", LocalDateTime.now()); - - SchemaConverter schemaConvertor = new SchemaConverter(); - Schema actual = schemaConvertor.toSchema("testRecord", testRow); - - Schema expected = Schema.recordOf("testRecord", - Schema.Field.of("id", Schema.nullableOf(Schema.of(Schema.Type.INT))), - Schema.Field.of("name", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("date", Schema.nullableOf(Schema.of(Schema.LogicalType.DATE))), - Schema.Field.of("time", Schema.nullableOf( - Schema.of(Schema.LogicalType.TIME_MICROS))), - Schema.Field.of("timestamp", Schema.nullableOf( - Schema.of(Schema.LogicalType.TIMESTAMP_MICROS))), - Schema.Field.of("d", Schema.nullableOf(Schema.decimalOf(38, 5))), - Schema.Field - .of("datetime", Schema.nullableOf(Schema.of(Schema.LogicalType.DATETIME)))); - - Assert.assertEquals(expected, actual); - } - - @Test - public void testArrayType() throws Exception { - List list = new ArrayList<>(); - list.add(null); - list.add(null); - list.add(1); - list.add(2); - - Row testRow = new Row(); - testRow.add("id", 1); - testRow.add("name", "abc"); - testRow.add("date", LocalDate.of(2018, 11, 11)); - testRow.add("time", LocalTime.of(11, 11, 11)); - testRow.add("timestamp", ZonedDateTime.of(2018, 11, 11, 11, 11, 11, 0, ZoneId.of("UTC"))); - testRow.add("array", list); - - SchemaConverter schemaConvertor = new SchemaConverter(); - Schema actual = schemaConvertor.toSchema("testRecord", testRow); - - Schema expected = Schema.recordOf("testRecord", - Schema.Field.of("id", Schema.nullableOf(Schema.of(Schema.Type.INT))), - Schema.Field.of("name", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("date", Schema.nullableOf(Schema.of(Schema.LogicalType.DATE))), - Schema.Field.of("time", Schema.nullableOf( - Schema.of(Schema.LogicalType.TIME_MICROS))), - Schema.Field.of("timestamp", Schema.nullableOf( - Schema.of(Schema.LogicalType.TIMESTAMP_MICROS))), - Schema.Field.of("array", Schema.nullableOf( - Schema.arrayOf(Schema.nullableOf(Schema.of(Schema.Type.INT)))))); - Assert.assertEquals(expected, actual); - } - - - @Test - public void testRecordType() throws Exception { - List list = new ArrayList<>(); - list.add(null); - list.add(null); - list.add(1); - list.add(2); - - Row memberRow = new Row(); - memberRow.add("id", 1); - memberRow.add("name", "abc"); - memberRow.add("date", LocalDate.of(2018, 11, 11)); - memberRow.add("time", LocalTime.of(11, 11, 11)); - memberRow.add("timestamp", ZonedDateTime.of(2018, 11, 11, 11, 11, 11, 0, ZoneId.of("UTC"))); - memberRow.add("array", list); - - - String recordTypeName = "struct"; - Row testRow = new Row(recordTypeName, memberRow); - - - String topRecord = "testRecord"; - SchemaConverter schemaConvertor = new SchemaConverter(); - Schema actual = schemaConvertor.toSchema(topRecord, testRow); - - List fields = Arrays.asList( - Schema.Field.of("id", Schema.nullableOf(Schema.of(Schema.Type.INT))), - Schema.Field.of("name", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("date", Schema.nullableOf(Schema.of(Schema.LogicalType.DATE))), - Schema.Field.of("time", Schema.nullableOf( - Schema.of(Schema.LogicalType.TIME_MICROS))), - Schema.Field.of("timestamp", Schema.nullableOf( - Schema.of(Schema.LogicalType.TIMESTAMP_MICROS))), - Schema.Field.of("array", Schema.nullableOf( - Schema.arrayOf(Schema.nullableOf(Schema.of(Schema.Type.INT))))) - ); - - Schema namingSchema = Schema.recordOf(fields); - String newRecordTypeName = recordTypeName + namingSchema.getRecordName(); - Schema memberSchema = Schema.nullableOf(Schema.recordOf(newRecordTypeName, fields)); - - Schema expected = Schema.recordOf("testRecord", Schema.Field.of(recordTypeName, memberSchema)); - Assert.assertEquals(expected, actual); - } - -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/utils/StructuredToRowTransformerTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/utils/StructuredToRowTransformerTest.java deleted file mode 100644 index bab833adf..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/utils/StructuredToRowTransformerTest.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.utils; - -import com.google.common.base.Charsets; -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.nio.ByteBuffer; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Structured to row transform test - */ -public class StructuredToRowTransformerTest { - @Test - public void testStructuredRecordToRow() { - List fields = Arrays.asList( - Schema.Field.of("f1", Schema.of(Schema.Type.INT)), - Schema.Field.of("f2", Schema.of(Schema.Type.STRING)), - Schema.Field.of("f3", Schema.of(Schema.Type.LONG)), - Schema.Field.of("f4", Schema.of(Schema.Type.DOUBLE)), - Schema.Field.of("f5", Schema.of(Schema.Type.BYTES)), - Schema.Field.of("f6", Schema.of(Schema.Type.BOOLEAN)), - Schema.Field.of("f7", Schema.of(Schema.Type.FLOAT)), - Schema.Field.of("f8", Schema.of(Schema.LogicalType.DATE)), - Schema.Field.of("f9", Schema.of(Schema.LogicalType.TIMESTAMP_MICROS)), - Schema.Field.of("f10", Schema.of(Schema.LogicalType.TIMESTAMP_MILLIS)), - Schema.Field.of("f11", Schema.of(Schema.LogicalType.TIME_MICROS)), - Schema.Field.of("f12", Schema.of(Schema.LogicalType.TIME_MILLIS)), - Schema.Field.of("f13", Schema.decimalOf(3, 2)), - Schema.Field.of("f14", Schema.of(Schema.LogicalType.DATETIME)), - Schema.Field.of("f16", Schema.arrayOf(Schema.of(Schema.Type.STRING))) - ); - - Schema memberSchema = Schema.recordOf( - "memberSchema", fields - ); - - List recordFields = new ArrayList<>(fields); - recordFields.add(Schema.Field.of("f15", memberSchema)); - - Schema schema = Schema.recordOf("schema", recordFields); - - StructuredRecord memberRecord = - StructuredRecord.builder(memberSchema) - .set("f1", 1).set("f2", "aaa").set("f3", 1L).set("f4", 0d) - .set("f5", ByteBuffer.wrap("test".getBytes(Charsets.UTF_8))) - .set("f6", true).set("f7", 0f).setDate("f8", LocalDate.now()).setTimestamp("f9", ZonedDateTime.now()) - .setTimestamp("f10", ZonedDateTime.now()).setTime("f11", LocalTime.now()).setTime("f12", LocalTime.now()) - .set("f13", ByteBuffer.wrap(new BigDecimal(new BigInteger("111"), 2).unscaledValue().toByteArray())) - .setDateTime("f14", LocalDateTime.now()).set("f16", Arrays.asList("A", "B", "C")) - .build(); - - StructuredRecord record = StructuredRecord.builder(schema) - .set("f1", 1).set("f2", "aaa").set("f3", 1L).set("f4", 0d) - .set("f5", ByteBuffer.wrap("test".getBytes(Charsets.UTF_8))) - .set("f6", true).set("f7", 0f) - .setDate("f8", memberRecord.getDate("f8")) - .setTimestamp("f9", memberRecord.getTimestamp("f9")) - .setTimestamp("f10", memberRecord.getTimestamp("f10")) - .setTime("f11", memberRecord.getTime("f11")) - .setTime("f12", memberRecord.getTime("f12")) - .set("f13", ByteBuffer.wrap(new BigDecimal(new BigInteger("111"), 2).unscaledValue().toByteArray())) - .setDateTime("f14", memberRecord.getDateTime("f14")) - .set("f15", memberRecord) - .set("f16", Arrays.asList("A", "B", "C")) - .build(); - - Row row = StructuredToRowTransformer.transform(record); - - // assert the byte field is byte array - Assert.assertTrue(row.getValue("f5") instanceof byte[]); - Assert.assertArrayEquals("test".getBytes(Charsets.UTF_8), (byte[]) row.getValue("f5")); - // set it to byte buffer to compare all values - row.addOrSet("f5", ByteBuffer.wrap((byte[]) row.getValue("f5"))); - ((Row) row.getValue("f15")) - .addOrSet("f5", ByteBuffer.wrap((byte[]) ((Row) row.getValue("f15")).getValue("f5"))); - - - Row memberExpected = new Row(); - memberExpected.add("f1", 1); - memberExpected.add("f2", "aaa"); - memberExpected.add("f3", 1L); - memberExpected.add("f4", 0d); - memberExpected.add("f5", ByteBuffer.wrap("test".getBytes(Charsets.UTF_8))); - memberExpected.add("f6", true); - memberExpected.add("f7", 0f); - memberExpected.add("f8", record.getDate("f8")); - memberExpected.add("f9", record.getTimestamp("f9")); - memberExpected.add("f10", record.getTimestamp("f10")); - memberExpected.add("f11", record.getTime("f11")); - memberExpected.add("f12", record.getTime("f12")); - memberExpected.add("f13", record.getDecimal("f13")); - memberExpected.add("f14", record.getDateTime("f14")); - memberExpected.add("f16", Arrays.asList("A", "B", "C")); - Row expected = new Row(memberExpected); - expected.add("f15", memberExpected); - - Assert.assertEquals(expected.getValue("f15"), row.getValue("f15")); - Assert.assertEquals(expected, row); - } -} diff --git a/wrangler-core/src/test/java/io/cdap/wrangler/validator/ColumnNameValidatorTest.java b/wrangler-core/src/test/java/io/cdap/wrangler/validator/ColumnNameValidatorTest.java deleted file mode 100644 index 4ee60167d..000000000 --- a/wrangler-core/src/test/java/io/cdap/wrangler/validator/ColumnNameValidatorTest.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.validator; - -import org.junit.Test; - -/** - * Tests {@link ColumnNameValidator} - */ -public class ColumnNameValidatorTest { - - @Test - public void testGoodColumnNames() throws Exception { - Validator validator = new ColumnNameValidator(); - validator.initialize(); - validator.validate("first_name"); - validator.validate("id"); - validator.validate("last_name"); - validator.validate("emailid"); - validator.validate("address"); - validator.validate("adhara_number"); - } - - @Test(expected = ValidatorException.class) - public void testReservedWord() throws Exception { - Validator validator = new ColumnNameValidator(); - validator.initialize(); - validator.validate("timestamp"); - } - - @Test(expected = ValidatorException.class) - public void testNonAlphaNumeric() throws Exception { - Validator validator = new ColumnNameValidator(); - validator.initialize(); - validator.validate("event.timestamp"); - } - - @Test(expected = ValidatorException.class) - public void testLongColumnName() throws Exception { - Validator validator = new ColumnNameValidator(); - validator.initialize(); - validator.validate("eventsdakjdadkjadkajdadjkadajkdaldjadljadalkjdakldjaldkjasdlajdsakdjalkdjadkljadakjda" + - "asdakdaldkajdlkasjdsalkdjadlkjadlkjadlakjdaldkjaldkjadlkjadakjdadjadlkajdlakjdsakd" + - "asdakldjalkdjadlkjadlakjdlakjdaslkdjadlkjsadlkajdalkdjadlkjadlkajdajdasdjkasda" + - "adlkajdalkdjadlkjadlkjadsajkldjadlkajdlakjdaslkdjalkdjadlkjadlakjdaslkdjsadkljsadjas" + - "asdaksdjaslkdjaslkdjadlkjadlkasjdalkdjaldkjadlajkdlakjdsalkdjadlkjasdlskajdsalkjdsad" + - "aldjadlkajdaslkdjsaldkjasdlkajdlkasjdaljdasldkjadlkasjdalkjdaslkjdaldkjasdlkjadja" + - "adajkdlaksjdalkdjsaldkasdlkasjdaslkjdsalkdjsadlkjasdlaskjdsalkjdasldkjadlkjasdadaljkda"); - } -} diff --git a/wrangler-core/src/test/resources/addressbook.desc b/wrangler-core/src/test/resources/addressbook.desc deleted file mode 100644 index 010ccb557..000000000 Binary files a/wrangler-core/src/test/resources/addressbook.desc and /dev/null differ diff --git a/wrangler-core/src/test/resources/cdap-log.avro b/wrangler-core/src/test/resources/cdap-log.avro deleted file mode 100644 index ab6c6e6f7..000000000 Binary files a/wrangler-core/src/test/resources/cdap-log.avro and /dev/null differ diff --git a/wrangler-core/src/test/resources/date-formats-test-sheet.xlsx b/wrangler-core/src/test/resources/date-formats-test-sheet.xlsx deleted file mode 100644 index 41b826b69..000000000 Binary files a/wrangler-core/src/test/resources/date-formats-test-sheet.xlsx and /dev/null differ diff --git a/wrangler-core/src/test/resources/titanic.xlsx b/wrangler-core/src/test/resources/titanic.xlsx deleted file mode 100644 index 4dae82eb4..000000000 Binary files a/wrangler-core/src/test/resources/titanic.xlsx and /dev/null differ diff --git a/wrangler-core/src/test/resources/user/test_en.properties b/wrangler-core/src/test/resources/user/test_en.properties deleted file mode 100644 index c2aa4b54a..000000000 --- a/wrangler-core/src/test/resources/user/test_en.properties +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright © 2017 Cask Data, Inc. -# -# 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. -# -# - -#-------------------------------------------------------------------------------- -# Column related messages. -#-------------------------------------------------------------------------------- -column.not.found={0} column {1} does not exist in the row. - -#-------------------------------------------------------------------------------- -# Test Messages -#-------------------------------------------------------------------------------- -test.simple=this is a simple test -test.with.1.parameter={0} is a simple test diff --git a/wrangler-demos/parsing-apache-log-files.md b/wrangler-demos/parsing-apache-log-files.md deleted file mode 100644 index 701a269da..000000000 --- a/wrangler-demos/parsing-apache-log-files.md +++ /dev/null @@ -1,48 +0,0 @@ -# Parsing Apache Log Files - -This recipe shows using data prep directives to parse Apache or NGINX logs. - - -## Version - -To paste this receipe as-is requires: - -* Wrangler Service Artifact >= 1.1.0 - - -## Sample Data - -[Sample Apache Log Data](sample/apache-combined-logs.log) can be used with this recipe. - - -## Recipe - -To use this recipe in the Data Prep UI, import the sample data into a workspace. -If necessary, rename the column the data is in (``) to `log` using: - -``` -rename log -``` - -You can now follow the remainder of the recipe: - -``` - // We start by using the parse directive for parsing the log file. Since we know it is a - // combined log format, we specify an alias of 'combined' to describe the pattern: - - parse-as-log log combined - - // As we no longer require the main log line -- we will be working only with the parsed - // fields -- we will specify the fields that we want to project and operate on: - - keep ip_connection_client_host,time_stamp_request_receive_time,http_uri_request_referer,http_useragent_request_user_agent,http_path_request_referer_path,http_protocol_request_referer_protocol,time_date_request_receive_time_date,time_time_request_receive_time_time,bytes_response_body_bytes - - // Date and Time are separated, so merge them together with a hyphen (-): - - merge time_date_request_receive_time_date time_time_request_receive_time_time request_recieved_datetime - - - // Drop the base fields for the time: - - drop time_time_request_receive_time_time,time_time_request_receive_time_time - -``` diff --git a/wrangler-demos/parsing-csv-extracting-column-values.md b/wrangler-demos/parsing-csv-extracting-column-values.md deleted file mode 100644 index 6d1a8d50b..000000000 --- a/wrangler-demos/parsing-csv-extracting-column-values.md +++ /dev/null @@ -1,69 +0,0 @@ -# Parsing CSV Files and Extracting Column Values - -This recipe shows using data prep directives to parse a CSV file and then manipulate -individual fields. - - -## Version - -To paste this receipe as-is requires: - -* Wrangler Service Artifact >= 1.1.0 - - -## Sample Data - -[Movies CSV File](sample/movies.csv) can be used with this recipe. - - -## Recipe - -To use this recipe in the Data Prep UI, import the sample data into a workspace. -If necessary, rename the column the data is in (``) to `log` using: - -``` -rename log -``` - -You can now follow the remainder of the recipe: - -``` - // Parses the file as CSV records: - - parse-as-csv log , - - // Drop the record that has been parsed: - - drop log - - // Set the column names: - - set columns movieId,title,genres - - // Remove the header row: - - filter-row-if-matched title title - - // Split the 'genres' column that is pipe-delimited into separate columns: - - split-to-columns genres \| - - // Drop the column that was split in the previous directive: - - drop genres - - // Extract the year from the "Movie (year)" format of the 'title' column: - - extract-regex-groups title [^(]+\(([0-9]{4})\).* - - // Rename the column to 'year': - - rename title_1_1 year - - // Set a default value of "n/a" for these columns: - - fill-null-or-empty genres_2 n/a - fill-null-or-empty genres_3 n/a - fill-null-or-empty genres_4 n/a - fill-null-or-empty genres_5 n/a -``` diff --git a/wrangler-demos/parsing-hl7-ccda-xml-files.md b/wrangler-demos/parsing-hl7-ccda-xml-files.md deleted file mode 100644 index 5e7318f2d..000000000 --- a/wrangler-demos/parsing-hl7-ccda-xml-files.md +++ /dev/null @@ -1,108 +0,0 @@ -# Parsing HL7 CCDA XML Files - -This recipe shows using data prep directives to parse a HL7 CCDA XML file. - - -## Version - -To paste this receipe as-is requires: - -* Wrangler Service Artifact >= 1.1.0 - - -## Sample Data - -[Sample HL7 CCDA XML Data](sample/CCDA_R2_CCD_HL7.xml) can be used with this recipe. - - -## CDAP Pipeline - -* CDAP Version 4.1.0 - [Parse HL7 CCDA XML Pipeline](pipelines/parse-hl7-ccda-xml.json) - - -## Recipe - -To use this recipe in the Data Prep UI, import the sample data into a workspace. -If necessary, rename the column the data is in (``) to `body` using: - -``` -rename body -``` - -You can now follow the remainder of the recipe: - -``` -// The CCDA XML file is incomplete and needs to be adjusted before it can be parsed as XML. -// This is a very common scenario. - -find-and-replace body s/[\r\n]//g - -// This XML file has multiple root elements. - -split-to-rows body /ClinicalDocument> -set column body body+"/ClinicalDocument>" -extract-regex-groups body () -filter-rows-on empty-or-null-columns body_1_1 -drop body -rename body_1_1 body - -// Now it is ready to be parses as XML: - -parse-as-xml body - -// Use the `xpath` directive to extract only the required elements. -// Alternatively, use the `xpath-array` directive to extract an array of elements. -// Extract Custodian and Patient MRN - -xpath body ASGN_AUTH_NM /ClinicalDocument/custodian/assignedCustodian/representedCustodianOrganization/name -xpath body MRN_ID /ClinicalDocument/PatientMRN - -// Extract Patient information - Part 1 - -xpath body MRN_ID /ClinicalDocument/recordTarget/patientRole/patient/name/given -xpath body PTNT_FIRST_NM /ClinicalDocument/recordTarget/patientRole/patient/name/given -xpath body PTNT_LAST_NM /ClinicalDocument/recordTarget/patientRole/patient/name/family -xpath body PTNT_MIDDLE_NM /ClinicalDocument/recordTarget/patientRole/patient/name/middle -xpath body PTNT_SFX_NM /ClinicalDocument/recordTarget/patientRole/patient/name/suffix -xpath body PTNT_LN1_ADR /ClinicalDocument/recordTarget/patientRole/addr/streetAddressLine -xpath body PTNT_CITY_NM /ClinicalDocument/recordTarget/patientRole/addr/city -xpath body PTNT_ST_CD /ClinicalDocument/recordTarget/patientRole/addr/state -xpath body PTNT_ZIP_PLUS_4_CD /ClinicalDocument/recordTarget/patientRole/addr/postalCode - -// Extract Patient information - Part 2 - -xpath body PTNT_BIRTH_DT_VAL /ClinicalDocument/recordTarget/patientRole/patient/birthTime/@value -xpath body PTNT_FIRST_NM_TP_CD /ClinicalDocument/recordTarget/patientRole/patient/name/given/@qualifier -xpath body PTNT_NM_TP_CD /ClinicalDocument/recordTarget/patientRole/patient/name/@use -xpath body PTNT_ADR_TP_CD /ClinicalDocument/recordTarget/patientRole/addr/@use -xpath body PTNT_GNDR_VAL /ClinicalDocument/recordTarget/patientRole/patient/administrativeGenderCode/@code -xpath body PTNT_GNDR_DSC /ClinicalDocument/recordTarget/patientRole/patient/administrativeGenderCode/@displayName -xpath body PTNT_HO_PHN_NO /ClinicalDocument/recordTarget/patientRole/telecom[@use='HP']/@value -xpath body PTNT_WORK_PHN_NO /ClinicalDocument/recordTarget/patientRole/telecom[@use='WP']/@value -xpath body PTNT_MBL_PHN_NO /ClinicalDocument/recordTarget/patientRole/telecom[@use=' tel']/@value - -// Extract Patient information - Part 3 - -xpath body PTNT_ETHN_ORIG_VAL /ClinicalDocument/recordTarget/patientRole/patient/ethnicGroupCode/@code -xpath body PTNT_ETHN_ORIG_DSC /ClinicalDocument/recordTarget/patientRole/patient/ethnicGroupCode/@displayName -xpath body PTNT_RACE_VAL /ClinicalDocument/recordTarget/patientRole/patient/raceCode/@code -xpath body PTNT_RACE_DSC /ClinicalDocument/recordTarget/patientRole/patient/raceCode/@displayName -xpath body PTNT_PRI_LANG_VAL /ClinicalDocument/recordTarget/patientRole/patient/languageCommunication/languageCode/@code - -// Extract Patient information - Part 4 - -xpath body PTNT_MRTL_STS_VAL /ClinicalDocument/recordTarget/patientRole/patient/maritalStatusCode/@code -xpath body PTNT_MRTL_STS_DSC /ClinicalDocument/recordTarget/patientRole/patient/maritalStatusCode/@displayName -xpath body PTNT_RELIG_VAL /ClinicalDocument/recordTarget/patientRole/patient/religiousAffiliationCode/@code -xpath body PTNT_RELIG_DSC /ClinicalDocument/recordTarget/patientRole/patient/religiousAffiliationCode/@displayName -xpath body PTNT_EMAIL_ADR /ClinicalDocument/recordTarget/patientRole/telecom[@use='HP']/@value - -// Drop the body as it's no longer required: - -drop body - -// Optionally, you can specify the columns to keep: - -keep ASGN_AUTH_NM,MRN_ID,PTNT_FIRST_NM,PTNT_LAST_NM,PTNT_MIDDLE_NM,PTNT_SFX_NM,PTNT_LN1_ADR,PTNT_CITY_NM,PTNT_ST_CD,PTNT_ZIP_PLUS_4_CD,PTNT_BIRTH_DT_VAL,PTNT_FIRST_NM_TP_CD,PTNT_NM_TP_CD,PTNT_ADR_TP_CD,PTNT_GNDR_VAL,PTNT_GNDR_DSC,PTNT_HO_PHN_NO,PTNT_WORK_PHN_NO,PTNT_MBL_PHN_NO,PTNT_ETHN_ORIG_VAL,PTNT_ETHN_ORIG_DSC,PTNT_RACE_VAL,PTNT_RACE_DSC,PTNT_PRI_LANG_VAL,PTNT_MRTL_STS_VAL,PTNT_MRTL_STS_DSC,PTNT_RELIG_VAL,PTNT_RELIG_DSC,PTNT_EMAIL_ADR:0 - -``` diff --git a/wrangler-demos/pipelines/parse-hl7-ccda-xml.json b/wrangler-demos/pipelines/parse-hl7-ccda-xml.json deleted file mode 100644 index 278a4f178..000000000 --- a/wrangler-demos/pipelines/parse-hl7-ccda-xml.json +++ /dev/null @@ -1,241 +0,0 @@ -{ - "name": "ParseHL7XML", - "artifact": { - "name": "cdap-data-pipeline", - "version": "4.1.0", - "scope": "SYSTEM" - }, - "__ui__": { - "nodes": [ - { - "name": "File", - "plugin": { - "name": "File", - "type": "batchsource", - "label": "File", - "artifact": { - "name": "core-plugins", - "version": "1.6.0", - "scope": "SYSTEM" - }, - "properties": { - "ignoreNonExistingFolders": "false", - "recursive": "false", - "referenceName": "hl7_xml_files", - "path": "file://${root-dir}/CCDA_R2_CCD_HL7/*", - "fileSystemProperties": "{\"textinputformat.record.delimiter\":\"`\"}" - } - }, - "outputSchema": "{\"name\":\"etlSchemaBody\",\"type\":\"record\",\"fields\":[{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"body\",\"type\":\"string\"}]}", - "type": "batchsource", - "label": "File", - "icon": "icon-file", - "_uiPosition": { - "top": "329.3333435058594px", - "left": "324.66668701171875px" - }, - "$$hashKey": "object:3918" - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform", - "version": "1.1.0", - "scope": "SYSTEM" - }, - "properties": { - "field": "*", - "directives": "// CCDA XML file is incomplete and needs to be fixed, before it can be parsed as XML\n// This is very common scenario. \n\nfind-and-replace body s/[\\r\\n]//g\n\n// This XML file has multiple root elements. \n\nsplit-to-rows body /ClinicalDocument>\nset column body body+\"/ClinicalDocument>\"\nextract-regex-groups body ()\ndrop body\nfilter-rows-on empty-or-null-columns body_1_1\nrename body_1_1 body\n\n// Now we are ready to parse as XML\n\nparse-as-xml body\n\n// Use XPATH directive to extract only the elements needs. \n// Can also use XPATH-ARRAY to extract array of elements. \n// Extract Custodian and Patient MRN \n\nxpath body ASGN_AUTH_NM /ClinicalDocument/custodian/assignedCustodian/representedCustodianOrganization/name\nxpath body MRN_ID /ClinicalDocument/PatientMRN\n\n// Extract Patient information - Part 1\n\nxpath body MRN_ID /ClinicalDocument/recordTarget/patientRole/patient/name/given\nxpath body PTNT_FIRST_NM /ClinicalDocument/recordTarget/patientRole/patient/name/given\nxpath body PTNT_LAST_NM /ClinicalDocument/recordTarget/patientRole/patient/name/family\nxpath body PTNT_MIDDLE_NM /ClinicalDocument/recordTarget/patientRole/patient/name/middle\nxpath body PTNT_SFX_NM /ClinicalDocument/recordTarget/patientRole/patient/name/suffix\nxpath body PTNT_LN1_ADR /ClinicalDocument/recordTarget/patientRole/addr/streetAddressLine\nxpath body PTNT_CITY_NM /ClinicalDocument/recordTarget/patientRole/addr/city\nxpath body PTNT_ST_CD /ClinicalDocument/recordTarget/patientRole/addr/state\nxpath body PTNT_ZIP_PLUS_4_CD /ClinicalDocument/recordTarget/patientRole/addr/postalCode\n\n// Extract Patient information - Part 2\n\nxpath body PTNT_BIRTH_DT_VAL /ClinicalDocument/recordTarget/patientRole/patient/birthTime/@value\nxpath body PTNT_FIRST_NM_TP_CD /ClinicalDocument/recordTarget/patientRole/patient/name/given/@qualifier\nxpath body PTNT_NM_TP_CD /ClinicalDocument/recordTarget/patientRole/patient/name/@use\nxpath body PTNT_ADR_TP_CD /ClinicalDocument/recordTarget/patientRole/addr/@use\nxpath body PTNT_GNDR_VAL /ClinicalDocument/recordTarget/patientRole/patient/administrativeGenderCode/@code\nxpath body PTNT_GNDR_DSC /ClinicalDocument/recordTarget/patientRole/patient/administrativeGenderCode/@displayName\nxpath body PTNT_HO_PHN_NO /ClinicalDocument/recordTarget/patientRole/telecom[@use='HP']/@value\nxpath body PTNT_WORK_PHN_NO /ClinicalDocument/recordTarget/patientRole/telecom[@use='WP']/@value\nxpath body PTNT_MBL_PHN_NO /ClinicalDocument/recordTarget/patientRole/telecom[@use=' tel']/@value\n\n// Extract Patient information - Part 3\n\nxpath body PTNT_ETHN_ORIG_VAL /ClinicalDocument/recordTarget/patientRole/patient/ethnicGroupCode/@code\nxpath body PTNT_ETHN_ORIG_DSC /ClinicalDocument/recordTarget/patientRole/patient/ethnicGroupCode/@displayName\nxpath body PTNT_RACE_VAL /ClinicalDocument/recordTarget/patientRole/patient/raceCode/@code\nxpath body PTNT_RACE_DSC /ClinicalDocument/recordTarget/patientRole/patient/raceCode/@displayName\nxpath body PTNT_PRI_LANG_VAL /ClinicalDocument/recordTarget/patientRole/patient/languageCommunication/languageCode/@code\n\n// Extract Patient information - Part 4\n\nxpath body PTNT_MRTL_STS_VAL /ClinicalDocument/recordTarget/patientRole/patient/maritalStatusCode/@code\nxpath body PTNT_MRTL_STS_DSC /ClinicalDocument/recordTarget/patientRole/patient/maritalStatusCode/@displayName\nxpath body PTNT_RELIG_VAL /ClinicalDocument/recordTarget/patientRole/patient/religiousAffiliationCode/@code\nxpath body PTNT_RELIG_DSC /ClinicalDocument/recordTarget/patientRole/patient/religiousAffiliationCode/@displayName\nxpath body PTNT_EMAIL_ADR /ClinicalDocument/recordTarget/patientRole/telecom[@use='HP']/@value\n\n// Drop body as it's not needed. \n\ndrop body", - "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ASGN_AUTH_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_FIRST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LAST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LN1_ADR\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_CITY_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ST_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ZIP_PLUS_4_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_BIRTH_DT_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_NM_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ADR_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_HO_PHN_NO\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_PRI_LANG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_EMAIL_ADR\",\"type\":[\"string\",\"null\"]}]}", - "threshold": "0" - } - }, - "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ASGN_AUTH_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_FIRST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LAST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LN1_ADR\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_CITY_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ST_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ZIP_PLUS_4_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_BIRTH_DT_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_NM_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ADR_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_HO_PHN_NO\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_PRI_LANG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_EMAIL_ADR\",\"type\":[\"string\",\"null\"]}]}", - "inputSchema": [ - { - "name": "File", - "schema": "{\"name\":\"etlSchemaBody\",\"type\":\"record\",\"fields\":[{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"body\",\"type\":\"string\"}]}" - } - ], - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataWrangler", - "_uiPosition": { - "top": "329.3333435058594px", - "left": "624.6666870117188px" - }, - "$$hashKey": "object:3919" - }, - { - "name": "TPFSParquet", - "plugin": { - "name": "TPFSParquet", - "type": "batchsink", - "label": "TPFSParquet", - "artifact": { - "name": "core-plugins", - "version": "1.6.0", - "scope": "SYSTEM" - }, - "properties": { - "compressionCodec": "Snappy", - "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ASGN_AUTH_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_FIRST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LAST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LN1_ADR\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_CITY_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ST_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ZIP_PLUS_4_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_BIRTH_DT_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_NM_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ADR_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_HO_PHN_NO\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_PRI_LANG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_EMAIL_ADR\",\"type\":[\"string\",\"null\"]}]}", - "name": "hl7_xml_data" - } - }, - "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ASGN_AUTH_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_FIRST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LAST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LN1_ADR\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_CITY_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ST_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ZIP_PLUS_4_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_BIRTH_DT_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_NM_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ADR_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_HO_PHN_NO\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_PRI_LANG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_EMAIL_ADR\",\"type\":[\"string\",\"null\"]}]}", - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ASGN_AUTH_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_FIRST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LAST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LN1_ADR\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_CITY_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ST_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ZIP_PLUS_4_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_BIRTH_DT_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_NM_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ADR_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_HO_PHN_NO\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_PRI_LANG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_EMAIL_ADR\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "type": "batchsink", - "label": "TPFSParquet", - "icon": "icon-tpfsparquet", - "_uiPosition": { - "top": "329.3333435058594px", - "left": "924.6666870117188px" - }, - "$$hashKey": "object:3920" - } - ], - "connections": [ - { - "from": "File", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "TPFSParquet" - } - ] - }, - "config": { - "batchInterval": "1s", - "resources": { - "memoryMB": 1024, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 1024, - "virtualCores": 1 - }, - "schedule": "0 * * * *", - "connections": [ - { - "from": "File", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "TPFSParquet" - } - ], - "comments": [], - "postActions": [], - "engine": "mapreduce", - "stages": [ - { - "name": "File", - "plugin": { - "name": "File", - "type": "batchsource", - "label": "File", - "artifact": { - "name": "core-plugins", - "version": "1.6.0", - "scope": "SYSTEM" - }, - "properties": { - "ignoreNonExistingFolders": "false", - "recursive": "false", - "referenceName": "hl7_xml_files", - "path": "file://${root-dir}/CCDA_R2_CCD_HL7/*", - "fileSystemProperties": "{\"textinputformat.record.delimiter\":\"`\"}" - } - }, - "outputSchema": "{\"name\":\"etlSchemaBody\",\"type\":\"record\",\"fields\":[{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"body\",\"type\":\"string\"}]}", - "type": "batchsource", - "label": "File", - "icon": "icon-file", - "_uiPosition": { - "top": "329.3333435058594px", - "left": "324.66668701171875px" - }, - "$$hashKey": "object:3918" - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform", - "version": "1.1.0", - "scope": "SYSTEM" - }, - "properties": { - "field": "*", - "directives": "// CCDA XML file is incomplete and needs to be fixed, before it can be parsed as XML\n// This is very common scenario. \n\nfind-and-replace body s/[\\r\\n]//g\n\n// This XML file has multiple root elements. \n\nsplit-to-rows body /ClinicalDocument>\nset column body body+\"/ClinicalDocument>\"\nextract-regex-groups body ()\ndrop body\nfilter-rows-on empty-or-null-columns body_1_1\nrename body_1_1 body\n\n// Now we are ready to parse as XML\n\nparse-as-xml body\n\n// Use XPATH directive to extract only the elements needs. \n// Can also use XPATH-ARRAY to extract array of elements. \n// Extract Custodian and Patient MRN \n\nxpath body ASGN_AUTH_NM /ClinicalDocument/custodian/assignedCustodian/representedCustodianOrganization/name\nxpath body MRN_ID /ClinicalDocument/PatientMRN\n\n// Extract Patient information - Part 1\n\nxpath body MRN_ID /ClinicalDocument/recordTarget/patientRole/patient/name/given\nxpath body PTNT_FIRST_NM /ClinicalDocument/recordTarget/patientRole/patient/name/given\nxpath body PTNT_LAST_NM /ClinicalDocument/recordTarget/patientRole/patient/name/family\nxpath body PTNT_MIDDLE_NM /ClinicalDocument/recordTarget/patientRole/patient/name/middle\nxpath body PTNT_SFX_NM /ClinicalDocument/recordTarget/patientRole/patient/name/suffix\nxpath body PTNT_LN1_ADR /ClinicalDocument/recordTarget/patientRole/addr/streetAddressLine\nxpath body PTNT_CITY_NM /ClinicalDocument/recordTarget/patientRole/addr/city\nxpath body PTNT_ST_CD /ClinicalDocument/recordTarget/patientRole/addr/state\nxpath body PTNT_ZIP_PLUS_4_CD /ClinicalDocument/recordTarget/patientRole/addr/postalCode\n\n// Extract Patient information - Part 2\n\nxpath body PTNT_BIRTH_DT_VAL /ClinicalDocument/recordTarget/patientRole/patient/birthTime/@value\nxpath body PTNT_FIRST_NM_TP_CD /ClinicalDocument/recordTarget/patientRole/patient/name/given/@qualifier\nxpath body PTNT_NM_TP_CD /ClinicalDocument/recordTarget/patientRole/patient/name/@use\nxpath body PTNT_ADR_TP_CD /ClinicalDocument/recordTarget/patientRole/addr/@use\nxpath body PTNT_GNDR_VAL /ClinicalDocument/recordTarget/patientRole/patient/administrativeGenderCode/@code\nxpath body PTNT_GNDR_DSC /ClinicalDocument/recordTarget/patientRole/patient/administrativeGenderCode/@displayName\nxpath body PTNT_HO_PHN_NO /ClinicalDocument/recordTarget/patientRole/telecom[@use='HP']/@value\nxpath body PTNT_WORK_PHN_NO /ClinicalDocument/recordTarget/patientRole/telecom[@use='WP']/@value\nxpath body PTNT_MBL_PHN_NO /ClinicalDocument/recordTarget/patientRole/telecom[@use=' tel']/@value\n\n// Extract Patient information - Part 3\n\nxpath body PTNT_ETHN_ORIG_VAL /ClinicalDocument/recordTarget/patientRole/patient/ethnicGroupCode/@code\nxpath body PTNT_ETHN_ORIG_DSC /ClinicalDocument/recordTarget/patientRole/patient/ethnicGroupCode/@displayName\nxpath body PTNT_RACE_VAL /ClinicalDocument/recordTarget/patientRole/patient/raceCode/@code\nxpath body PTNT_RACE_DSC /ClinicalDocument/recordTarget/patientRole/patient/raceCode/@displayName\nxpath body PTNT_PRI_LANG_VAL /ClinicalDocument/recordTarget/patientRole/patient/languageCommunication/languageCode/@code\n\n// Extract Patient information - Part 4\n\nxpath body PTNT_MRTL_STS_VAL /ClinicalDocument/recordTarget/patientRole/patient/maritalStatusCode/@code\nxpath body PTNT_MRTL_STS_DSC /ClinicalDocument/recordTarget/patientRole/patient/maritalStatusCode/@displayName\nxpath body PTNT_RELIG_VAL /ClinicalDocument/recordTarget/patientRole/patient/religiousAffiliationCode/@code\nxpath body PTNT_RELIG_DSC /ClinicalDocument/recordTarget/patientRole/patient/religiousAffiliationCode/@displayName\nxpath body PTNT_EMAIL_ADR /ClinicalDocument/recordTarget/patientRole/telecom[@use='HP']/@value\n\n// Drop body as it's not needed. \n\ndrop body", - "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ASGN_AUTH_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_FIRST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LAST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LN1_ADR\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_CITY_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ST_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ZIP_PLUS_4_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_BIRTH_DT_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_NM_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ADR_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_HO_PHN_NO\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_PRI_LANG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_EMAIL_ADR\",\"type\":[\"string\",\"null\"]}]}", - "threshold": "0" - } - }, - "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ASGN_AUTH_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_FIRST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LAST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LN1_ADR\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_CITY_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ST_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ZIP_PLUS_4_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_BIRTH_DT_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_NM_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ADR_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_HO_PHN_NO\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_PRI_LANG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_EMAIL_ADR\",\"type\":[\"string\",\"null\"]}]}", - "inputSchema": [ - { - "name": "File", - "schema": "{\"name\":\"etlSchemaBody\",\"type\":\"record\",\"fields\":[{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"body\",\"type\":\"string\"}]}" - } - ], - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataWrangler", - "_uiPosition": { - "top": "329.3333435058594px", - "left": "624.6666870117188px" - }, - "$$hashKey": "object:3919" - }, - { - "name": "TPFSParquet", - "plugin": { - "name": "TPFSParquet", - "type": "batchsink", - "label": "TPFSParquet", - "artifact": { - "name": "core-plugins", - "version": "1.6.0", - "scope": "SYSTEM" - }, - "properties": { - "compressionCodec": "Snappy", - "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ASGN_AUTH_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_FIRST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LAST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LN1_ADR\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_CITY_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ST_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ZIP_PLUS_4_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_BIRTH_DT_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_NM_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ADR_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_HO_PHN_NO\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_PRI_LANG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_EMAIL_ADR\",\"type\":[\"string\",\"null\"]}]}", - "name": "hl7_xml_data" - } - }, - "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ASGN_AUTH_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_FIRST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LAST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LN1_ADR\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_CITY_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ST_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ZIP_PLUS_4_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_BIRTH_DT_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_NM_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ADR_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_HO_PHN_NO\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_PRI_LANG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_EMAIL_ADR\",\"type\":[\"string\",\"null\"]}]}", - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ASGN_AUTH_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_FIRST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LAST_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_LN1_ADR\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_CITY_NM\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ST_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ZIP_PLUS_4_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_BIRTH_DT_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_NM_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ADR_TP_CD\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_GNDR_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_HO_PHN_NO\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_ETHN_ORIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RACE_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_PRI_LANG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_MRTL_STS_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_VAL\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_RELIG_DSC\",\"type\":[\"string\",\"null\"]},{\"name\":\"PTNT_EMAIL_ADR\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "type": "batchsink", - "label": "TPFSParquet", - "icon": "icon-tpfsparquet", - "_uiPosition": { - "top": "329.3333435058594px", - "left": "924.6666870117188px" - }, - "$$hashKey": "object:3920" - } - ] - } -} \ No newline at end of file diff --git a/wrangler-demos/sample/CCDA_R2_CCD_HL7.xml b/wrangler-demos/sample/CCDA_R2_CCD_HL7.xml deleted file mode 100755 index a7c62ac7e..000000000 --- a/wrangler-demos/sample/CCDA_R2_CCD_HL7.xml +++ /dev/null @@ -1,6864 +0,0 @@ - - - - - - - - - - - - - Patient Chart Summary - - - - - - - - - - - - - 2222 Home Street - Beaverton - OR - 97867 - US - - - - - - - - Eve - - Betterhalf - - - - Eve - - Everywoman - - - - - - - - - - - - - - - 2222 Home Street - Beaverton - OR - 97867 - US - - - - - Boris - Bo - Betterhalf - - - - - - - 4444 Home Street - Beaverton - OR - 97867 - US - - - - - - - - - - - - - - - The DoctorsTogether Physician Group - - - 1007 Health Drive - Portland - OR - 99123 - US - - - - - - - - - - - - - 1007 Healthcare Drive - Portland - OR - 99123 - US - - - - - Ellen - Enter - - - - - - - - - - 1007 Healthcare Drive - Portland - OR - 99123 - US - - - - - Harold - Hippocrates - M.D. - - - - The DoctorsApart Physician Group - - - - - - - - 1025 Health Drive - Portland - OR - 99123 - US - - - - - Ramsey - Reaction - M.D. - - - - The DoctorsApart Physician Group - - - - - - - - 1017 Health Drive - Portland - OR - 99123 - US - - - - - William - Bill - Beaker - - - - Good Health Laboratory - - - - - - - - 1016 Health Drive - Portland - OR - 99123 - US - - - - - Susan - Script - Pharm.D. - - - - People's Pharmacy - - - - - - - - 1027 Health Drive - Portland - OR - 99123 - US - - - - - Patrick - Pump - M.D. - - - - The DoctorsApart Physician Group - - - - - - - - - - Boris - Bo - Betterhalf - - - - - - - - - - Good Health HIE - - - 1009 Healthcare Drive - Portland - OR - 99123 - US - - - - - - - - - - Sara - Specialize - M.D. - - - - The DoctorsApart Physician Group - - - - - - - - - - - - - - - - 2222 Home Street - Beaverton - OR - 97867 - US - - - - - Boris - Bo - Betterhalf - - - - - - - - - - 2222 Home Street - Beaverton - OR - 97867 - US - - - - - Boris - Bo - Betterhalf - - - - - - - - - - - - - - - - Primary Care Provider - - - - - - 1004 Healthcare Drive - Portland - OR - 99123 - US - - - - - Patricia - Patty - Primary - M.D. - - - - - The DoctorsTogether Physician Group - - - 1004 Health Drive - Portland - OR - 99123 - US - - - - - - - - - - - -
- - - - ADVANCE DIRECTIVES - -
- - - - - - - - - - - - - - - - -
DirectiveDescriptionVerificationSupporting Document(s)
Resuscitation statusDo not resuscitateDr. Patricia Primary, Feb 19, 2011 - Advance directive -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1004 Health Drive - Portland - OR - 99123 - US - - - - - Dr. - Patricia - Primary - - - - - - - - - - - - - - - - - - - - - -
- - - - ALLERGIES AND ADVERSE REACTIONS - - - - - - - - - - - - - - - - - - -
SubstanceReaction
PenicillinNausea
CodeineWheezing
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - ENCOUNTERS - - - - - - - - - - - - - - - - - - -
EncounterPerformerLocationDate
Checkup Examination Performer NameCommunity Urgent Care CenterSeptember 27, 2012 at 1:00pm
-
- - - - - - - - - - - - - - - - - - - - - - - - - - 1007 Health Drive - Portland - OR - 99123 - US - - - - Good Health Urgent Care - - - - - - - - - - - - - - - - - -
-
- - -
- - - - FAMILY HISTORY - - Father (deceased) - - - - - - - - - - - - - - - - - -
DiagnosisAge At Onset
Myocardial Infarction (cause of death)57
Diabetes40
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
- - - FUNCTIONAL STATUS - - - - - - - - - - - - - - - - - - - - - -
Functional CategoryEffective DatesResults of Evaluation
Functional AssessmentMarch 11, 2013Independent Walking
ADL/IADL: BathingMarch 11,2013Independent
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - IMMUNIZATIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VaccineDateStatusSeries number
- Influenza, seasonal, IM Nov 1999CompletedN/A
- Influenza, seasonal, IM Dec 1998CompletedN/A
- Pneumococcal polysaccharide vaccine, IM Dec 1998CompletedN/A
- Tetanus and diphtheria toxoids, IM 1997RefusedN/A
Hepatitis BAug 1, 2013Completed3rd
-
- - - - - - Influenza, seasonal, IM - - - - - - - - - - - 1 - - - Health LS - Immuno Inc. - - - - - - - - 1007 Health Drive - Portland - OR - 99123 - US - - - - - Harold - Hippocrates - - - - - Good Health Clinic - - - 1007 Health Drive - Portland - OR - 99123 - US - - - - - - - - - - - Possible flu-like symptoms for three days. - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - Health LS - Immuno Inc. - - - - - - - - 1007 Health Drive - Portland - OR - 99123 - US - - - - - Harold - Hippocrates - - - - - Good Health Clinic - - - 1007 Health Drive - Portland - OR - 99123 - US - - - - - - - - - - - Possible flu-like symptoms for three days. - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - Health LS - Immuno Inc. - - - - - - - - 1007 Health Drive - Portland - OR - 99123 - US - - - - - Harold - Hippocrates - - - - - Good Health Clinic - - - 1007 Health Drive - Portland - OR - 99123 - US - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - Health LS - Immuno Inc. - - - - - - - - 1007 Health Drive - Portland - OR - 99123 - US - - - - - Harold - Hippocrates - - - - - Good Health Clinic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - 1007 Health Drive - Portland - OR - 99123 - US - - - - - Harold - Hippocrates - - - - - Good Health Clinic - - - 1007 Health Drive - Portland - OR - 99123 - US - - - - - - - - - - - - - - - - -
-
- - -
- - - - MEDICAL EQUIPMENT - - Medical Equipment - - Implanted Devices: Cardiac PaceMaker July 3, 2013 - Implanted Devices: Upper GI Prosthesis, January 3, 2013 - Cane, February 2, 2003 - - Biliary Stent, May 5, 2013 - - - - - - - - - Implants - - - - - - - - - - - - - - - - - - - - - - - - Cardiac Pacemaker - - - - - Good Health Durable Medical Equipment - - - - - - - - - - - - - - - - - - - - - - - Upper GI Prosthesis - - - - - Good Health Durable Medical Equipment - - - - - - - - - - - - - - - - - - - - - - - - - Upper GI Prosthesis - - - - - Good Health Durable Medical Equipment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1004 Health Care Drive - Ann Arbor - MI - 02368 - US - - - - - Community Health and Hospitals - - - 1003 Health Care Drive - Ann Arbor - MI - 02368 - US - - - - - - -
-
- - -
- - - - MEDICATIONS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MedicationDirectionsStart DateStatusIndicationsFill Instructions
Proventil 0.09 MG/ACTUAT inhalant solution2 puffs q6 hours PRN wheezingJan 3, 2011ActiveAsthmaGeneric Substitition Allowed
Atenolol 25 MG Oral Tablet1 every 12 hours OrallyMar 18, 2012ActiveHypertension-none-
-
- - - - - - - - - - - - - - - - - - - - - - - - - Medication Factory Inc. - - - - - - - - - - - Community Health and Hospitals - - - - - - - - - - - - - Aerosol - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Medication Factory Inc. - - - - - - - - - - - - label in spanish - - - - - - - - - - - - - - - - - - - - - - - - Medication Factory Inc. - - - - - - - - 1016 Health Drive - Portland - OR - 99123 - US - - - - - Susan - Script - Pharm.D. - - - - People's Pharmacy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - INSURANCE PROVIDERS - - - - - - - - - - - - - - - - - - - - -
Payer namePolicy type / Coverage typePolicy IDCovered party IDPolicy Holder
Good Health InsuranceExtended healthcare / FamilyContract Number1138345Patient's Mother
-
- - - - - - - - - - - - - - - - - - - - - - - 9009 Health Drive - Portland - OR - 99123 - US - - - - Good Health Insurance - - - 9009 Health Drive - Portland - OR - 99123 - - - - - - - - - - - - - 2222 Home Street - Beaverton - OR - 97867 - - - - - Boris - Betterhalf - - - - - - - - - - - - - - 2222 Home Street - Beaverton - OR - 97867 - - - - - Boris - Betterhalf - - - - - - - - - - - - 2222 Home Street - Beaverton - OR - 97867 - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - TREATMENT PLAN - - Hand-off Communication: - Nurse Florence, RN to MD to Nancy Nightingale, RN -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
Planned CareStart DatePatient Provider RatingProvider Provider RatingProviderPatient Support/Caregiver
Procedure: ColonoscopyJune 15, 20131st, Medium3rd, Medium - Caregiver: Mother
Medication: Heparin 0.25 ml pre-filled syringeJuly 12, 2013 - First, MediumThird, MediumCaregiver: Mother
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - PROBLEMS - - Active Concerns - - Problem #1 - Pneumonia (onset July 3, 2013; resolution Aug 14, 2013) [authored Aug 14, 2013] - - - Problem #2 - Chest pain (onset Apr 14, 2007) [authored Apr 14, 2007] - Angina (onset Apr 17, 2007) [authored Apr 17, 2007] - - - - Resolved Concerns - - Problem #3 - Pneumonia - Left lower lobe (onset Mar 10, 1998; resolution Mar 16, 1998) [authored Mar 16, - 1998] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - PROCEDURES - - - - - - - - - - - - - - -
ProcedureDate
Colonic polypectomy1998
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - 1001 Village Avenue - Portland - OR - 99123 - US - - - - - Community Health and Hospitals - - - 1001 Village Avenue - Portland - OR - 99123 - US - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1001 Village Avenue - Portland - OR - 99123 - US - - - - - Community Health and Hospitals - - - 1001 Village Avenue - Portland - OR - 99123 - US - - - - - - - - - - - 1009 Health Drive - Portland - OR - 99123 - US - - - - Community Gastroenterology Clinic - - - - - - - - - - - - - - - - - - - - - - - 1001 Village Avenue - Portland - OR - 99123 - US - - - - - Community Health and Hospitals - - - 1001 Village Avenue - Portland - OR - 99123 - US - - - - - - - - - - - 1009 Health Drive - Portland - OR - 99123 - US - - - - Community Gastroenterology Clinic - - - - - -
-
- - -
- - - - RESULTS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Result TypeResult ValueRelevant Reference RangeInterpretationDate
Hemoglobin13.2 g/dLNormal range for women is 12.0 to 15.5 grams per deciliterNormal03/19/2008
Leukocytes6.7 10*9/LNormal white blood cell count range 3.5-10.5 billion cells/LNormal03/19/2008
Platelets123 10*9/LNormal white blood cell count range 3.5-10.5 billion cells/LLow03/19/2008
Hematocrit35.3 %Normal hematocrit range for female: 34.9-44.5 percentNormal03/19/2008
Erythrocytes4.21 10*12/LNormal red blood cell count range 3.90-5.03 trillion cells/LNormal03/19/2008
Urea nitrogen, SerumPendingPendingPendingMarch 20, 2008
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6.7 billion per liter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - SOCIAL HISTORY - - - - - - - - - - - - - - - - - - - - - - - - - - -
Social History ObservationDescriptionDates Observed
Current Smoking StatusFormer smokerSeptember 10, 2012
Tobacco UseModerate cigarette smoker, 10-19/dayFebruary, 2009 - February, 2011
Alcoholic drinks per day12Since February, 2012
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - VITAL SIGNS - - - - - - - - - - - - - - - - - - - - - - - - - - -
Date / Time: Sept 10, 2012Sept 1, 2011
Height177 cm177 cm
Weight86 kg88 kg
Blood Pressure132/88128/80
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - Good Health Health Summary - - - - - - - - - - - - - - 17 Daws Rd. - Blue Bell - MA - 02368 - US - - - - - - - - Mr. - Adam - Frankie - - Everyman - - - - - - - - - - - - 17 Daws Rd. - Blue Bell - MA - 02368 - US - - - - - - Ralph - Relative - - - - - - - MA - 02368 - USA - - - - - - - - - - - - Good Health Clinic - - - 21 North Ave - Burlington - MA - 02368 - USA - - - - - - - - - - - 21 North Ave. - Burlington - MA - 02368 - USA - - - - - Henry - Seven - - - - - - - - - 21 North Ave. - Burlington - MA - 02368 - USA - - - - - Henry - Seven - - - - - - - - - - - Rose - Everyman - - - - - - - - - Good Health Clinic - - - 17 Daws Rd. - Blue Bell - MA - 02368 - USA - - - - - - - - - Henry - Seven - - - - Good Health Clinic - - - - - - - - - - - - - - - - Primary Care Provider - - - - - - - - - - Dr. - Pseudo - Physician-1 - - - - - NIST HL7 Test Laboratory - - - - - - - - Primary Care Provider - - - - - - - - - - Dr. - Pseudo - Physician-3 - - - - - HL7 Test Laboratory - - - - - - - - - - - - - -
- - - - Allergies, Adverse Reactions, Alerts - - - - - - - - - - - - - - - - - - - - - - - - - - -
SubstanceReactionStatus
Penicillin - Hives - Active
Aspirin - Wheezing - Active
Codeine - Nausea - Active
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Penicillin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Aspirin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Aspirin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - Medications - - - - - - - - - - - - - - - - - - - - - - -
MedicationDirectionsStart DateStatusIndicationsFill Instructions
- Proventil 0.09 MG/ACTUAT inhalant solution - 2 puffs QID PRN wheezing2011-03-01ActiveBronchitis (32398004 SNOMED CT)Generic Substitition Allowed
-
- - - - - - - 0.09 MG/ACTUAT inhalant solution, 2 puffs QID PRN wheezing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Good Health Clinic - - - - - - - - - - - - Diethylene Glycol - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - label in spanish - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - Problems - - - Pneumonia: Resolved in March 1998 - ... - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - Procedures - - - - - - - - - - - - - - -
ProcedureDate
- Colonic polypectomy - 1998
-
- - - - - - - - - - - - - - - - - - - - - - - - - - 17 Daws Rd. - Blue Bell - MA - 02368 - US - - - - - Good Health Clinic - - - 17 Daws Rd. - Blue Bell - MA - 02368 - US - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 17 Daws Rd. - Blue Bell - MA - 02368 - US - - - - - Good Health Clinic - - - - - - - - - - - - 17 Daws Rd. - Blue Bell - MA - 02368 - US - - - - Good Health Clinic - - - - - - - - - - - - - - - - - - - - - - 17 Daws Rd. - Blue Bell - MA - 02368 - US - - - - - Good Health Clinic - - - - - - - - - - - - 17 Daws Rd. - Blue Bell - MA - 02368 - US - - - - Good Health Clinic - - - - - -
-
- - -
- - - Results - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LABORATORY INFORMATION
Chemistries and drug levels
- HGB (M 13-18 g/dl; F 12-16 g/dl) - 13.2
- WBC (4.3-10.8 10+3/ul) - 6.7
- PLT (135-145 meq/l) - 123 (L)
Liver Functions and Other Laboratory Values
ALT (SGPT)31.0
AST (SGOT)18.0
GGT28.0 Alk
Phos86.0
Total Bili0.1
Albumin3.2
Blood Count
White Count7.7
Platelets187.0
Hematocrit23.7
Hemoglobin8.1
ELECTROCARDIOGRAM (EKG) INFORMATION
EKGSinus rhythm without acute changes
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - M 13-18 g/dl; F 12-16 g/dl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - Advance Directives - - - - - - - - - - - - - - - - - - -
DirectiveDescriptionVerificationSupporting Document(s)
Resuscitation status - Do not resuscitate - Dr. Robert Dolin, Nov 07, 1999 - Advance directive -
-
- - - - - - - - - - - - - - - - - - - - - - - 21 North Ave. - Burlington - MA - 02368 - USA - - - - - Dr. - Dolin - Robert - - - - - - - - - - - - - - - -
-
- - -
- - - - Encounters - - - - - - - - - - - - - - - - - - -
EncounterPerformerLocationDate
- ExaminationPerformer NameGood Health ClinicApr 07, 2000
-
- - - - - - - - Checkup Examination - - - - - - - - - - - - - - - - - 17 Daws Rd. - Blue Bell - MA - 02368 - US - - - - Good Health Clinic - - - - - - - - - - - - - - -
-
- - -
- - - - Family history - - Father (deceased) - - - - - - - - - - - - - - - - - -
DiagnosisAge At Onset
Myocardial Infarction (cause of death)57
Diabetes40
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - Immunizations - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
VaccineDateStatus
- Influenza virus vaccine, IMNov 1999Completed
- Influenza virus vaccine, IMDec 1998Completed
- Pneumococcal polysaccharide vaccine, IMDec 1998Completed
- Tetanus and diphtheria toxoids, IM1997Refused
-
- - - - - - - - - - - - - - - - - - - Influenza virus vaccine - - - - - - - - - - - Possible flu-like symptoms for three days. - - - - - - - - - - - - - - - - - - - - - - - - Influenza virus vaccine - - - - - - - - - - - Possible flu-like symptoms for three days. - - - - - - - - - - - - - - - - - - - - - - - - Influenza virus vaccine - - - - - - - - - - - Possible flu-like symptoms for three days. - - - - - - - - - - - - - - - - - - - - - - - - Tetanus and diphtheria toxoids - preservative free - - - - - - - - - - - Possible flu-like symptoms for three days. - - - - - - - - - - - - - - -
-
- - -
- - - - Medical Equipment - - - - - - - - - - - - - - - - - - - - - - -
Supply/DeviceDate Supplied
Automatic implantable cardioverter/defibrillatorNov 1999
Total hip replacement prosthesis1998
Wheelchair1999
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - Good Health Prostheses Company - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - -
-
- - -
- - - - Insurance Providers - - - - - - - - - - - - - - - - - - - - -
Payer namePolicy type / Coverage typePolicy IDCovered party IDPolicy Holder
Good Health InsuranceExtended healthcare / FamilyContract Number1138345Patient's Mother
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 17 Daws Rd. - Blue Bell - MA - 02368 - US - - - - - - Mr. - Frank - A. - Everyman - - - - - - - - - 17 Daws Rd. - Blue Bell - MA - 02368 - US - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - - Plan of Care - - - - - - - - - - - - - - -
Planned ActivityPlanned Date
ColonoscopyApril 21, 2000
-
- - - - - - - - -
- - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -
- - - -
-
- - - -
- - - - Social History - - - - - - - - - - - - - - - - - - - - - - - - - - -
Social History ElementDescriptionEffective Dates
- smoking1 pack per day1947 - 1972
- smokingNone1973 -
- Alcohol consumptionNone1973 -
-
- - - - - - - - - - - - - - - - 1 pack per day - - - - - - - - - - - - - - - - - None - - - - - - - - - - - - - - - - - None - - -
-
- - -
- - - Vital Signs - - - - - - - - - - - - - - - - - - - - - - - - - - -
Date / Time: Nov 14, 1999April 7, 2000
Height - 177 cm - - 177 cm -
Weight - 86 kg - - 88 kg -
Blood Pressure - 132/86 mmHg - - 145/88 mmHg -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
-
- - - - - - - Good Health Clinic Consultation Note - - - - - - - - - - - Henry - Levin - the 7th - - - - - - - - - - - - - - - - Good Health Clinic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - History of Present Illness - - Henry Levin, the 7th - is a 67 year old male referred for further asthma management. Onset of asthma in his twenties - teens. He was hospitalized twice last year, and already twice this year. He has not been able to be weaned off steroids for the past several months. - -
-
- - -
- - Past Medical History - - - - Asthma - - - Hypertension (see HTN.cda for details) - - - Osteoarthritis, - right knee - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - Medications - - - Theodur 200mg BID - Proventil inhaler 2puffs QID PRN - Prednisone 20mg qd - HCTZ 25mg qd - - - - - Theodur 200mg BID - - - - - - - - - - - - - - - - - Proventil inhaler 2puffs QID PRN - - - - - - - - - - - - - - - - - - - Prednisone 20mg qd - - - - - - - - - - - - - - - - - HCTZ 25mg qd - - - - - - - - - - - - - -
-
- - -
- - Allergies and Adverse Reactions - - - Penicillin - Hives - Aspirin - Wheezing - Codeine - Itching and nausea - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - Family history - - - Father had fatal MI in his early 50's. - No cancer or diabetes. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - Social History - - - Smoking :: 1 PPD between the ages of 20 and 55, and then he quit. - Alcohol :: rare - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - Physical Examination - - -
- - Vital Signs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Date / TimeApril 7, 2000 14:30April 7, 2000 15:30
Height177 cm (69.7 in)
Weight194.0 lbs (88.0 kg)
BMI28.1 kg/m2
BSA2.05 m2
Temperature36.9 C (98.5 F)36.9 C (98.5 F)
Pulse86 / minute84 / minute
RhythmRegularRegular
Respirations16 / minute, unlabored14 / minute
Systolic132 mmHg135 mmHg
Diastolic86 mmHg88 mmHg
Position / CuffLeft ArmLeft Arm
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - Skin Exam - Erythematous rash, palmar surface, left index finger. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - Lungs - Clear with no wheeze. Good air flow. - - - - - - - - - - - - - - -
-
- - -
- - Cardiac - RRR with no murmur, no S3, no S4. - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - -
- - Labs - - - CXR 02/03/1999: Hyperinflated. Normal cardiac silhouette, clear lungs. - Peak Flow today: 260 l/m - - - - - - - - - - - - - - - - - normal cardiac silhouette - - - - - - - - radiopacities - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - In-office Procedures - - - Suture removal, left forearm. - - - - - - - - - - -
-
- - -
- - Assessment - - - Asthma, with prior smoking history. Difficulty weaning off steroids. Will try gradual taper. - Hypertension, well-controlled. - Contact dermatitis on finger. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
- - - Plan - - - Complete PFTs with lung volumes. - Chem-7 tomorrow. - Teach peak flow rate measurement. - Decrease prednisone to 20qOD alternating with 18qOD. - Hydrocortisone cream to finger BID. - RTC 1 week. - - - - - - - Complete PFTs with lung volumes. - - - - - - - - - - - Chem-7 - - - Chem-7 tomorrow - - - - - - - - - - - - - - - - - prednisone 20qOD alternating with 18qOD. - - - - - - - - - - - - - Hydrocortisone cream to finger BID. - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
diff --git a/wrangler-demos/sample/apache-combined-logs.log b/wrangler-demos/sample/apache-combined-logs.log deleted file mode 100644 index 5a3e20b4e..000000000 --- a/wrangler-demos/sample/apache-combined-logs.log +++ /dev/null @@ -1,500 +0,0 @@ -69.181.160.120 - - [08/Feb/2015:04:36:40 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312519 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:36:47 +0000] "GET /rest/api/latest/server?_=1423341312520 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:36:56 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312521 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:37:11 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312522 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:37:17 +0000] "GET /rest/api/latest/server?_=1423341312523 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:37:27 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312524 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:37:43 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312525 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:37:47 +0000] "GET /rest/api/latest/server?_=1423341312526 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:37:58 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312527 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:38:14 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312528 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:38:17 +0000] "GET /rest/api/latest/server?_=1423341312529 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:38:30 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312530 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:38:45 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312531 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:38:47 +0000] "GET /rest/api/latest/server?_=1423341312532 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:39:01 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312533 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:39:17 +0000] "GET /rest/api/latest/server?_=1423341312535 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:39:17 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312534 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:39:33 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312536 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:39:47 +0000] "GET /rest/api/latest/server?_=1423341312537 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:39:48 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312538 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:40:04 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312539 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:40:17 +0000] "GET /rest/api/latest/server?_=1423341312540 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:40:19 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312541 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:40:35 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312542 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:40:47 +0000] "GET /rest/api/latest/server?_=1423341312543 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:40:51 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312544 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:41:06 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312545 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:41:17 +0000] "GET /rest/api/latest/server?_=1423341312546 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:41:22 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312547 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:41:37 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312548 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:41:47 +0000] "GET /rest/api/latest/server?_=1423341312549 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:41:53 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312550 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:42:09 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312551 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:42:17 +0000] "GET /rest/api/latest/server?_=1423341312552 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:42:25 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312553 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:42:40 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312554 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:42:47 +0000] "GET /rest/api/latest/server?_=1423341312555 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:42:56 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312556 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:43:12 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312557 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:43:17 +0000] "GET /rest/api/latest/server?_=1423341312558 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:43:27 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312559 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:43:43 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312560 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:43:47 +0000] "GET /rest/api/latest/server?_=1423341312561 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:43:59 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312562 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:44:14 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312563 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:44:17 +0000] "GET /rest/api/latest/server?_=1423341312564 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:44:30 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312565 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:44:46 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312566 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:44:47 +0000] "GET /rest/api/latest/server?_=1423341312567 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:45:01 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312568 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:45:17 +0000] "GET /rest/api/latest/server?_=1423341312569 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:45:17 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312570 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:45:33 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312571 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:45:47 +0000] "GET /rest/api/latest/server?_=1423341312572 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:45:49 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312573 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:46:04 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312574 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:46:17 +0000] "GET /rest/api/latest/server?_=1423341312575 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:46:20 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312576 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:46:35 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312577 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:46:47 +0000] "GET /rest/api/latest/server?_=1423341312578 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:46:51 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312579 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:47:06 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312580 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:47:17 +0000] "GET /rest/api/latest/server?_=1423341312581 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:47:23 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312582 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:47:38 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312583 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:47:47 +0000] "GET /rest/api/latest/server?_=1423341312584 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:47:55 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312585 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:48:11 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312586 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:48:17 +0000] "GET /rest/api/latest/server?_=1423341312587 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:48:27 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312588 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:48:43 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312589 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:48:47 +0000] "GET /rest/api/latest/server?_=1423341312590 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:48:59 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312591 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:49:14 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312592 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:49:17 +0000] "GET /rest/api/latest/server?_=1423341312593 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:49:30 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312594 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:49:46 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312595 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:49:47 +0000] "GET /rest/api/latest/server?_=1423341312596 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:50:02 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312597 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:50:18 +0000] "GET /rest/api/latest/server?_=1423341312598 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:50:17 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312599 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:50:41 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312600 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:50:47 +0000] "GET /rest/api/latest/server?_=1423341312601 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:50:57 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312602 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:51:13 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312603 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:51:17 +0000] "GET /rest/api/latest/server?_=1423341312604 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:51:28 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312605 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:51:44 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312606 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:51:47 +0000] "GET /rest/api/latest/server?_=1423341312607 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:52:00 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312608 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:52:15 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312609 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:52:17 +0000] "GET /rest/api/latest/server?_=1423341312610 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:52:31 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312611 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:52:47 +0000] "GET /rest/api/latest/server?_=1423341312613 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:52:47 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312612 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:53:03 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312614 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:53:17 +0000] "GET /rest/api/latest/server?_=1423341312615 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:53:19 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312616 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:53:34 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312617 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:53:47 +0000] "GET /rest/api/latest/server?_=1423341312618 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:53:50 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312619 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:54:05 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312620 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -142.54.173.19 - - [08/Feb/2015:04:54:12 +0000] "GET /browse/CDAP-DUT-50/commit HTTP/1.0" 200 1351680 "http://builds.cask.co/browse/CDAP-DUT-50/commit" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" -142.54.173.19 - - [08/Feb/2015:04:54:14 +0000] "GET /browse/CDAP-DUT-50/commit HTTP/1.0" 200 1343488 "http://builds.cask.co/commit" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" -142.54.173.19 - - [08/Feb/2015:04:54:15 +0000] "GET /browse/CDAP-DUT-50/index.php HTTP/1.0" 404 373 "http://builds.cask.co/index.php" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" -142.54.173.19 - - [08/Feb/2015:04:54:15 +0000] "GET /CDAP-DUT-50/index.php HTTP/1.0" 404 373 "http://builds.cask.co/CDAP-DUT-50/index.php" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" -142.54.173.19 - - [08/Feb/2015:04:54:15 +0000] "GET /browse/CDAP-DUT-50/index.php HTTP/1.0" 404 373 "http://builds.cask.co/index.php" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" -142.54.173.19 - - [08/Feb/2015:04:54:15 +0000] "GET /CDAP-DUT-50/index.php HTTP/1.0" 404 373 "http://builds.cask.co/CDAP-DUT-50/index.php" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" -142.54.173.19 - - [08/Feb/2015:04:54:15 +0000] "GET /browse/CDAP-DUT-50/index.php HTTP/1.0" 404 373 "http://builds.cask.co/index.php" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" -142.54.173.19 - - [08/Feb/2015:04:54:15 +0000] "GET /CDAP-DUT-50/index.php HTTP/1.0" 404 373 "http://builds.cask.co/CDAP-DUT-50/index.php" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0" -69.181.160.120 - - [08/Feb/2015:04:54:17 +0000] "GET /rest/api/latest/server?_=1423341312621 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:54:21 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312622 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:54:37 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312623 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:54:47 +0000] "GET /rest/api/latest/server?_=1423341312624 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:54:52 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312625 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:55:08 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312626 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:55:17 +0000] "GET /rest/api/latest/server?_=1423341312627 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:55:23 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312628 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:55:39 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312629 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:55:47 +0000] "GET /rest/api/latest/server?_=1423341312630 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:55:55 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312631 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:56:10 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312632 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:56:17 +0000] "GET /rest/api/latest/server?_=1423341312633 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:56:26 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312634 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:56:42 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312635 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:56:47 +0000] "GET /rest/api/latest/server?_=1423341312636 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:56:57 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312637 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:57:13 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312638 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:57:17 +0000] "GET /rest/api/latest/server?_=1423341312639 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:57:29 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312640 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:57:45 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312641 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:57:47 +0000] "GET /rest/api/latest/server?_=1423341312642 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:58:00 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312643 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:58:16 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312644 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:58:17 +0000] "GET /rest/api/latest/server?_=1423341312645 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -220.181.108.161 - - [08/Feb/2015:04:58:18 +0000] "GET /download/COOP-DBT-JOB1/build_logs/COOP-DBT-JOB1-18.log HTTP/1.1" 200 36501 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" -69.181.160.120 - - [08/Feb/2015:04:58:32 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312646 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:58:47 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312648 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:58:48 +0000] "GET /rest/api/latest/server?_=1423341312647 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:59:03 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312649 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:59:17 +0000] "GET /rest/api/latest/server?_=1423341312650 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:59:18 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312651 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:59:34 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312652 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:59:47 +0000] "GET /rest/api/latest/server?_=1423341312653 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:04:59:50 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312654 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:00:05 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312655 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:00:17 +0000] "GET /rest/api/latest/server?_=1423341312656 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:00:21 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312657 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:00:37 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312658 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:00:47 +0000] "GET /rest/api/latest/server?_=1423341312659 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:00:54 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312660 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:01:10 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312661 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:01:17 +0000] "GET /rest/api/latest/server?_=1423341312662 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:01:25 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312663 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:01:41 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312664 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:01:47 +0000] "GET /rest/api/latest/server?_=1423341312665 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:01:57 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312666 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:02:13 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312667 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:02:17 +0000] "GET /rest/api/latest/server?_=1423341312668 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:02:28 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312669 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:02:44 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312670 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:02:47 +0000] "GET /rest/api/latest/server?_=1423341312671 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:03:00 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312672 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:03:15 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312673 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:03:17 +0000] "GET /rest/api/latest/server?_=1423341312674 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:03:31 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312675 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:03:47 +0000] "GET /rest/api/latest/server?_=1423341312677 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:03:47 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312676 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:04:03 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312678 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:04:17 +0000] "GET /rest/api/latest/server?_=1423341312679 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:04:19 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312680 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:04:35 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312681 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:04:47 +0000] "GET /rest/api/latest/server?_=1423341312682 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:04:50 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312683 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:05:06 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312684 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:05:17 +0000] "GET /rest/api/latest/server?_=1423341312685 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:05:22 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312686 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:05:37 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312687 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:05:47 +0000] "GET /rest/api/latest/server?_=1423341312688 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:05:53 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312689 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:06:09 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312690 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:06:17 +0000] "GET /rest/api/latest/server?_=1423341312691 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:06:24 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312692 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:06:40 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312693 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:06:47 +0000] "GET /rest/api/latest/server?_=1423341312694 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:06:55 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312695 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:07:11 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312696 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:07:17 +0000] "GET /rest/api/latest/server?_=1423341312697 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:07:27 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312698 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:07:43 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312699 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:07:47 +0000] "GET /rest/api/latest/server?_=1423341312700 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:07:58 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312701 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:08:14 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312702 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:08:17 +0000] "GET /rest/api/latest/server?_=1423341312703 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:08:30 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312704 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:08:45 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312705 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:08:47 +0000] "GET /rest/api/latest/server?_=1423341312706 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:09:01 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312707 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:09:17 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312708 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:09:17 +0000] "GET /rest/api/latest/server?_=1423341312709 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:09:33 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312710 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:09:47 +0000] "GET /rest/api/latest/server?_=1423341312711 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:09:48 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312712 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:10:04 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312713 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:10:17 +0000] "GET /rest/api/latest/server?_=1423341312714 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:10:19 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312715 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:10:35 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312716 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:10:47 +0000] "GET /rest/api/latest/server?_=1423341312717 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:10:50 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312718 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:11:06 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312719 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:11:17 +0000] "GET /rest/api/latest/server?_=1423341312720 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:11:22 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312721 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:11:38 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312722 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:11:47 +0000] "GET /rest/api/latest/server?_=1423341312723 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:11:54 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312724 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:12:09 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312725 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:12:17 +0000] "GET /rest/api/latest/server?_=1423341312726 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:12:25 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312727 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:12:41 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312728 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:12:47 +0000] "GET /rest/api/latest/server?_=1423341312729 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:12:56 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312730 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:13:12 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312731 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:13:17 +0000] "GET /rest/api/latest/server?_=1423341312732 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:13:28 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312733 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:13:43 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312734 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:13:47 +0000] "GET /rest/api/latest/server?_=1423341312735 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:13:59 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312736 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:14:15 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312737 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:14:17 +0000] "GET /rest/api/latest/server?_=1423341312738 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:14:30 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312739 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:14:46 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312740 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:14:47 +0000] "GET /rest/api/latest/server?_=1423341312741 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:15:02 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312742 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:15:17 +0000] "GET /rest/api/latest/server?_=1423341312743 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:15:18 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312744 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:15:33 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312745 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:15:47 +0000] "GET /rest/api/latest/server?_=1423341312746 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:15:49 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312747 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:16:04 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312748 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:16:17 +0000] "GET /rest/api/latest/server?_=1423341312749 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:16:20 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312750 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:16:36 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312751 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:16:47 +0000] "GET /rest/api/latest/server?_=1423341312752 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:16:51 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312753 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:17:07 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312754 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:17:17 +0000] "GET /rest/api/latest/server?_=1423341312755 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:17:22 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312756 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:17:38 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312757 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:17:47 +0000] "GET /rest/api/latest/server?_=1423341312758 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:17:54 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312759 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:18:10 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312760 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:18:17 +0000] "GET /rest/api/latest/server?_=1423341312761 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:18:25 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312762 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:18:41 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312763 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:18:47 +0000] "GET /rest/api/latest/server?_=1423341312764 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:18:57 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312765 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:19:12 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312766 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:19:17 +0000] "GET /rest/api/latest/server?_=1423341312767 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:19:28 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312768 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:19:44 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312769 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:19:47 +0000] "GET /rest/api/latest/server?_=1423341312770 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:19:59 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312771 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:20:15 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312772 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:20:17 +0000] "GET /rest/api/latest/server?_=1423341312773 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:20:31 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312774 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:20:46 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312775 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:20:47 +0000] "GET /rest/api/latest/server?_=1423341312776 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:21:02 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312777 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:21:17 +0000] "GET /rest/api/latest/server?_=1423341312778 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:21:17 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312779 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:21:33 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312780 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:21:47 +0000] "GET /rest/api/latest/server?_=1423341312781 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:21:49 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312782 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:22:04 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312783 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:22:17 +0000] "GET /rest/api/latest/server?_=1423341312784 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:22:20 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312785 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:22:36 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312786 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:22:47 +0000] "GET /rest/api/latest/server?_=1423341312787 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:22:51 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312788 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:23:07 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312789 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:23:17 +0000] "GET /rest/api/latest/server?_=1423341312790 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:23:23 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312791 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:23:39 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312792 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:23:47 +0000] "GET /rest/api/latest/server?_=1423341312793 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:23:54 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312794 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:24:10 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312795 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:24:17 +0000] "GET /rest/api/latest/server?_=1423341312796 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:24:26 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312797 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:24:41 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312798 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:24:47 +0000] "GET /rest/api/latest/server?_=1423341312799 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:24:57 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312800 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:25:12 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312801 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:25:17 +0000] "GET /rest/api/latest/server?_=1423341312802 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:25:28 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312803 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:25:44 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312804 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:25:47 +0000] "GET /rest/api/latest/server?_=1423341312805 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:26:00 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312806 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:26:15 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312807 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:26:17 +0000] "GET /rest/api/latest/server?_=1423341312808 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:26:31 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312809 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:26:47 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312810 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:26:47 +0000] "GET /rest/api/latest/server?_=1423341312811 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:27:03 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312812 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:27:17 +0000] "GET /rest/api/latest/server?_=1423341312813 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:27:18 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312814 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:27:34 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312815 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:27:47 +0000] "GET /rest/api/latest/server?_=1423341312816 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:27:49 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312817 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:28:05 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312818 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:28:17 +0000] "GET /rest/api/latest/server?_=1423341312819 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:28:20 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312820 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:28:36 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312821 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:28:47 +0000] "GET /rest/api/latest/server?_=1423341312822 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:28:52 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312823 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:29:07 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312824 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:29:17 +0000] "GET /rest/api/latest/server?_=1423341312825 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:29:23 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312826 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:29:39 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312827 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:29:47 +0000] "GET /rest/api/latest/server?_=1423341312828 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:29:54 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312829 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:30:10 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312830 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:30:17 +0000] "GET /rest/api/latest/server?_=1423341312831 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -123.125.71.58 - - [08/Feb/2015:05:30:20 +0000] "GET /browse/COOP-DBT-38/commit;jsessionid=C7B58945F68630C7C92B7AA928E0AC4E HTTP/1.1" 200 7166 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" -123.125.71.27 - - [08/Feb/2015:05:30:20 +0000] "GET /s/edc17b4a2d83e91e89e6a342791fc7a8-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/js/atl.general,bamboo.result/batch.js?locale=en-US HTTP/1.1" 200 397963 "http://builds.cask.co/browse/COOP-DBT-38/commit;jsessionid=C7B58945F68630C7C92B7AA928E0AC4E" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" -123.125.71.27 - - [08/Feb/2015:05:30:23 +0000] "GET /rest/pref/latest/user/?expand=preferences.preference HTTP/1.1" 200 189 "http://builds.cask.co/browse/COOP-DBT-38/commit;jsessionid=C7B58945F68630C7C92B7AA928E0AC4E" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" -123.125.71.58 - - [08/Feb/2015:05:30:23 +0000] "GET /rest/menu/latest/appswitcher?_=1423373423317 HTTP/1.1" 200 638 "http://builds.cask.co/browse/COOP-DBT-38/commit;jsessionid=C7B58945F68630C7C92B7AA928E0AC4E" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" -123.125.71.27 - - [08/Feb/2015:05:30:23 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=38&_=1423373423318 HTTP/1.1" 200 424 "http://builds.cask.co/browse/COOP-DBT-38/commit;jsessionid=C7B58945F68630C7C92B7AA928E0AC4E" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" -69.181.160.120 - - [08/Feb/2015:05:30:26 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312832 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:30:41 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312833 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:30:47 +0000] "GET /rest/api/latest/server?_=1423341312834 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:30:57 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312835 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:31:13 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312836 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:31:17 +0000] "GET /rest/api/latest/server?_=1423341312837 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:31:28 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312838 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:31:44 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312839 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:31:47 +0000] "GET /rest/api/latest/server?_=1423341312840 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:32:00 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312841 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:32:15 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312842 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:16 +0000] "GET /browse/CDAP-DUT725-8 HTTP/1.1" 200 7898 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:17 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:base-model/bamboo.web.resources:base-model.js HTTP/1.1" 200 259 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:17 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:model-deployment-version/bamboo.web.resources:model-deployment-version.js HTTP/1.1" 200 591 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:17 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:model-deployment-result/bamboo.web.resources:model-deployment-result.js HTTP/1.1" 200 363 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:32:17 +0000] "GET /rest/api/latest/server?_=1423341312843 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:17 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-T/en_US/4411/1/3.5.7/_/download/batch/com.atlassian.support.stp:stp-license-status-resources/com.atlassian.support.stp:stp-license-status-resources.css HTTP/1.1" 200 383 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:17 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:model-deployment-operations/bamboo.web.resources:model-deployment-operations.js HTTP/1.1" 200 257 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:17 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:model-deployment-environment/bamboo.web.resources:model-deployment-environment.js HTTP/1.1" 200 259 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:17 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:model-deployment-project/bamboo.web.resources:model-deployment-project.js HTTP/1.1" 200 314 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:17 +0000] "GET /s/71095c56c641f2c4a4f189b9dfcd7a38-CDN/en_US/4411/1/5.6.2/_/download/batch/bamboo.deployments:deployment-project-list/bamboo.deployments:deployment-project-list.js?locale=en-US HTTP/1.1" 200 2892 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:17 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css HTTP/1.1" 200 105899 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:17 +0000] "GET /s/71095c56c641f2c4a4f189b9dfcd7a38-T/en_US/4411/1/3.5.7/_/download/batch/com.atlassian.support.stp:stp-license-status-resources/com.atlassian.support.stp:stp-license-status-resources.js?locale=en-US HTTP/1.1" 200 959 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:18 +0000] "GET /images/project-shortcut.png HTTP/1.1" 200 1616 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:17 +0000] "GET /s/edc17b4a2d83e91e89e6a342791fc7a8-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/js/atl.general,bamboo.result/batch.js?locale=en-US HTTP/1.1" 200 397963 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:19 +0000] "GET /rest/pref/latest/user/?expand=preferences.preference HTTP/1.1" 200 409 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:19 +0000] "GET /s/en_US/4411/1/1.0/_/images/iconsv4/icon-build-failed.png HTTP/1.1" 200 225 "http://builds.cask.co/s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:19 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373539645 HTTP/1.1" 200 828 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:19 +0000] "GET /s/en_US/4411/1/1.0/_/images/iconsv4/icon-build-successful.png HTTP/1.1" 200 261 "http://builds.cask.co/s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:19 +0000] "GET /rest/menu/latest/appswitcher?_=1423373539644 HTTP/1.1" 200 638 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:19 +0000] "GET /s/en_US/4411/1/1.0/_/images/iconsv4/icon-build-queued.png HTTP/1.1" 200 225 "http://builds.cask.co/s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:19 +0000] "GET /s/en_US/4411/1/5.4.4/_/download/resources/com.atlassian.auiplugin:aui-experimental-iconfont/atlassian-icons.woff HTTP/1.1" 200 9268 "http://builds.cask.co/s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:20 +0000] "GET /rest/nav-links-analytics-data/1.0/ HTTP/1.1" 200 20 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:20 +0000] "GET /rest/api/latest/server?_=1423373539646 HTTP/1.1" 200 45 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:20 +0000] "GET /rest/stp/1.0/license/status HTTP/1.1" 204 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:20 +0000] "GET /s/en_US/4411/1/1.0/_/images/iconsv4/icon-build-queued-w.png HTTP/1.1" 200 225 "http://builds.cask.co/s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:20 +0000] "GET /s/en_US/4411/1/1.0/_/images/iconsv4/icon-plan-run.png HTTP/1.1" 200 259 "http://builds.cask.co/s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:20 +0000] "GET /rest/api/latest/result/CDAP-DUT725-8?expand=jiraIssues%5B0%3A4%5D&returnUrl=https%3A%2F%2Fbuilds.cask.co%2Fchain%2Fresult%2FviewChainResult.action%3FplanKey%3DCDAP-DUT725%26buildNumber%3D8&_=1423373539647 HTTP/1.1" 200 2560 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:20 +0000] "GET /s/en_US/4411/1/_/images/iconsv4/icon-build-queued.png HTTP/1.1" 200 225 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:24 +0000] "GET /rest/api/latest/server?_=1423373539648 HTTP/1.1" 200 45 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:25 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373539649 HTTP/1.1" 200 828 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:30 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373539650 HTTP/1.1" 200 1321 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:30 +0000] "GET /browse/CDAP-DUT725-8 HTTP/1.1" 200 9194 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:32:31 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312844 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /s/edc17b4a2d83e91e89e6a342791fc7a8-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/js/atl.general,bamboo.result/batch.js?locale=en-US HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-T/en_US/4411/1/3.5.7/_/download/batch/com.atlassian.support.stp:stp-license-status-resources/com.atlassian.support.stp:stp-license-status-resources.css HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:model-deployment-operations/bamboo.web.resources:model-deployment-operations.js HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:base-model/bamboo.web.resources:base-model.js HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:model-deployment-version/bamboo.web.resources:model-deployment-version.js HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:model-deployment-result/bamboo.web.resources:model-deployment-result.js HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:model-deployment-environment/bamboo.web.resources:model-deployment-environment.js HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/1.0/_/download/batch/bamboo.web.resources:model-deployment-project/bamboo.web.resources:model-deployment-project.js HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /s/71095c56c641f2c4a4f189b9dfcd7a38-CDN/en_US/4411/1/5.6.2/_/download/batch/bamboo.deployments:deployment-project-list/bamboo.deployments:deployment-project-list.js?locale=en-US HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /s/71095c56c641f2c4a4f189b9dfcd7a38-T/en_US/4411/1/3.5.7/_/download/batch/com.atlassian.support.stp:stp-license-status-resources/com.atlassian.support.stp:stp-license-status-resources.js?locale=en-US HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /rest/pref/latest/user/?expand=preferences.preference HTTP/1.1" 200 409 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:31 +0000] "GET /images/project-shortcut.png HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /s/en_US/4411/1/5.4.4/_/download/resources/com.atlassian.auiplugin:aui-experimental-iconfont/atlassian-icons.woff HTTP/1.1" 304 - "http://builds.cask.co/s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551774 HTTP/1.1" 200 1322 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /s/en_US/4411/1/1.0/_/images/iconsv4/icon-building-06-blue.gif HTTP/1.1" 200 1557 "http://builds.cask.co/s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /s/en_US/4411/1/1.0/_/images/iconsv4/icon-plan-run.png HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /rest/menu/latest/appswitcher?_=1423373551773 HTTP/1.1" 200 638 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /s/en_US/4411/1/1.0/_/images/iconsv4/icon-building-06.gif HTTP/1.1" 200 1608 "http://builds.cask.co/s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /rest/nav-links-analytics-data/1.0/ HTTP/1.1" 200 20 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /rest/api/latest/server?_=1423373551775 HTTP/1.1" 200 45 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /rest/stp/1.0/license/status HTTP/1.1" 204 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /s/en_US/4411/1/_/flash/clippy.swf HTTP/1.1" 200 4276 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /rest/api/latest/result/CDAP-DUT725-8?expand=jiraIssues%5B0%3A4%5D&returnUrl=https%3A%2F%2Fbuilds.cask.co%2Fchain%2Fresult%2FviewChainResult.action%3FplanKey%3DCDAP-DUT725%26buildNumber%3D8&_=1423373551776 HTTP/1.1" 200 2799 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551777 HTTP/1.1" 200 5741 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /s/en_US/4411/1/1.0/_/images/icons/wait.gif HTTP/1.1" 200 1553 "http://builds.cask.co/s/d41d8cd98f00b204e9800998ecf8427e-CDN/en_US/4411/1/5dddb6ea4dc4fd5569d992cf603f31e5/_/download/contextbatch2/css/atl.general,bamboo.result/batch.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /s/en_US/4411/1/1.0/_/images/iconsv4/icon-build-successful.png HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /s/en_US/4411/1/1.0/_/images/iconsv4/icon-build-failed.png HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /s/en_US/4411/1/_/flash/clippy.swf HTTP/1.1" 304 - "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:32 +0000] "GET /s/en_US/4411/1/_/images/iconsv4/icon-building-static.png HTTP/1.1" 200 628 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:37 +0000] "GET /rest/api/latest/server?_=1423373551778 HTTP/1.1" 200 45 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:38 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551779 HTTP/1.1" 200 1326 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:38 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551780 HTTP/1.1" 200 5744 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:44 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551781 HTTP/1.1" 200 1325 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:44 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551782 HTTP/1.1" 200 5744 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:32:47 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312845 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:32:47 +0000] "GET /rest/api/latest/server?_=1423341312846 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:50 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551783 HTTP/1.1" 200 1325 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:50 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551784 HTTP/1.1" 200 5744 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:56 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551785 HTTP/1.1" 200 1325 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:32:56 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551786 HTTP/1.1" 200 5744 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:02 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551787 HTTP/1.1" 200 1325 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:02 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551788 HTTP/1.1" 200 7379 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:33:02 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312847 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:08 +0000] "GET /rest/api/latest/server?_=1423373551789 HTTP/1.1" 200 45 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:08 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551790 HTTP/1.1" 200 1325 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:08 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551791 HTTP/1.1" 200 7379 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:15 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551792 HTTP/1.1" 200 1325 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:15 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551793 HTTP/1.1" 200 7379 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:33:17 +0000] "GET /rest/api/latest/server?_=1423341312848 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:33:18 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312849 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:22 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551794 HTTP/1.1" 200 1325 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:22 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551795 HTTP/1.1" 200 7379 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:28 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551796 HTTP/1.1" 200 1423 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:28 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551797 HTTP/1.1" 200 17991 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:33:33 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312850 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:34 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551798 HTTP/1.1" 200 1423 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:35 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551799 HTTP/1.1" 200 17992 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:39 +0000] "GET /rest/api/latest/server?_=1423373551800 HTTP/1.1" 200 45 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:40 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551801 HTTP/1.1" 200 1427 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:41 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551802 HTTP/1.1" 200 8732 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:46 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551803 HTTP/1.1" 200 1426 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:47 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551804 HTTP/1.1" 200 9283 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:33:47 +0000] "GET /rest/api/latest/server?_=1423341312851 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:33:49 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312852 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:53 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551805 HTTP/1.1" 200 1425 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:53 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551806 HTTP/1.1" 200 8967 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:59 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551807 HTTP/1.1" 200 1425 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:33:59 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551808 HTTP/1.1" 200 9115 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:34:05 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312853 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:05 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551809 HTTP/1.1" 200 1426 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:05 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551810 HTTP/1.1" 200 8281 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:10 +0000] "GET /rest/api/latest/server?_=1423373551811 HTTP/1.1" 200 45 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:11 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551812 HTTP/1.1" 200 1426 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:11 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551813 HTTP/1.1" 200 8720 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:17 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551814 HTTP/1.1" 200 1426 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:17 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551815 HTTP/1.1" 200 8721 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:34:17 +0000] "GET /rest/api/latest/server?_=1423341312854 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:34:20 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312855 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:23 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551816 HTTP/1.1" 200 1426 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:23 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551817 HTTP/1.1" 200 9762 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:29 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551818 HTTP/1.1" 200 1425 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:29 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551819 HTTP/1.1" 200 9864 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:35 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551820 HTTP/1.1" 200 1424 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:35 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551821 HTTP/1.1" 200 9865 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:34:36 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312856 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:41 +0000] "GET /rest/api/latest/server?_=1423373551822 HTTP/1.1" 200 45 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:42 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551823 HTTP/1.1" 200 1424 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:42 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551824 HTTP/1.1" 200 9961 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:47 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551825 HTTP/1.1" 200 1424 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:34:47 +0000] "GET /rest/api/latest/server?_=1423341312857 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:48 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551826 HTTP/1.1" 200 9891 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:34:51 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312858 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:53 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551827 HTTP/1.1" 200 1423 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:54 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551828 HTTP/1.1" 200 10104 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:34:59 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551829 HTTP/1.1" 200 1425 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:00 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551830 HTTP/1.1" 200 10089 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:05 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551831 HTTP/1.1" 200 1424 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:06 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551832 HTTP/1.1" 200 9738 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:35:07 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312859 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:11 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551833 HTTP/1.1" 200 1423 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:12 +0000] "GET /rest/api/latest/server?_=1423373551834 HTTP/1.1" 200 45 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:12 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551835 HTTP/1.1" 200 9090 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:35:17 +0000] "GET /rest/api/latest/server?_=1423341312860 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:18 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551836 HTTP/1.1" 200 1426 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:18 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551837 HTTP/1.1" 200 9344 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:35:23 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312861 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:25 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551838 HTTP/1.1" 200 1425 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:25 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551839 HTTP/1.1" 200 10820 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:31 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551840 HTTP/1.1" 200 1427 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:31 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551841 HTTP/1.1" 200 9014 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:37 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551842 HTTP/1.1" 200 1426 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:37 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551843 HTTP/1.1" 200 9013 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:35:38 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312862 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:43 +0000] "GET /rest/api/latest/server?_=1423373551844 HTTP/1.1" 200 45 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:43 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551845 HTTP/1.1" 200 1426 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:43 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551846 HTTP/1.1" 200 9014 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:35:47 +0000] "GET /rest/api/latest/server?_=1423341312863 HTTP/1.1" 200 45 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:49 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551847 HTTP/1.1" 200 1427 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:49 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551848 HTTP/1.1" 200 9014 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:35:54 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312864 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:55 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551849 HTTP/1.1" 200 1427 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:35:55 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551850 HTTP/1.1" 200 9014 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:36:01 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551851 HTTP/1.1" 200 1427 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:36:01 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551852 HTTP/1.1" 200 9082 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:36:07 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551853 HTTP/1.1" 200 1426 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:36:07 +0000] "GET /rest/api/latest/result/CDAP-DUT725-JOB1-8?expand=logEntries%5B-25%3A%5D&max-results=25&_=1423373551854 HTTP/1.1" 200 9081 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" -69.181.160.120 - - [08/Feb/2015:05:36:10 +0000] "GET /ajax/planStatusHistoryNeighbouringSummaries.action?planKey=COOP-DBT&buildNumber=284&_=1423341312865 HTTP/1.1" 200 508 "http://builds.cask.co/browse/COOP-DBT-284/log" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36" -108.206.32.124 - - [08/Feb/2015:05:36:13 +0000] "GET /rest/api/latest/result/status/CDAP-DUT725-8?expand=stages.stage.results.result&_=1423373551855 HTTP/1.1" 200 1425 "http://builds.cask.co/browse/CDAP-DUT725-8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" diff --git a/wrangler-demos/sample/movies.csv b/wrangler-demos/sample/movies.csv deleted file mode 100644 index 0e644b2d1..000000000 --- a/wrangler-demos/sample/movies.csv +++ /dev/null @@ -1,1000 +0,0 @@ -movieId,title,genres -1,Toy Story (1995),Adventure|Animation|Children|Comedy|Fantasy -2,Jumanji (1995),Adventure|Children|Fantasy -3,Grumpier Old Men (1995),Comedy|Romance -4,Waiting to Exhale (1995),Comedy|Drama|Romance -5,Father of the Bride Part II (1995),Comedy -6,Heat (1995),Action|Crime|Thriller -7,Sabrina (1995),Comedy|Romance -8,Tom and Huck (1995),Adventure|Children -9,Sudden Death (1995),Action -10,GoldenEye (1995),Action|Adventure|Thriller -11,"American President, The (1995)",Comedy|Drama|Romance -12,Dracula: Dead and Loving It (1995),Comedy|Horror -13,Balto (1995),Adventure|Animation|Children -14,Nixon (1995),Drama -15,Cutthroat Island (1995),Action|Adventure|Romance -16,Casino (1995),Crime|Drama -17,Sense and Sensibility (1995),Drama|Romance -18,Four Rooms (1995),Comedy -19,Ace Ventura: When Nature Calls (1995),Comedy -20,Money Train (1995),Action|Comedy|Crime|Drama|Thriller -21,Get Shorty (1995),Comedy|Crime|Thriller -22,Copycat (1995),Crime|Drama|Horror|Mystery|Thriller -23,Assassins (1995),Action|Crime|Thriller -24,Powder (1995),Drama|Sci-Fi -25,Leaving Las Vegas (1995),Drama|Romance -26,Othello (1995),Drama -27,Now and Then (1995),Children|Drama -28,Persuasion (1995),Drama|Romance -29,"City of Lost Children, The (Cité des enfants perdus, La) (1995)",Adventure|Drama|Fantasy|Mystery|Sci-Fi -30,Shanghai Triad (Yao a yao yao dao waipo qiao) (1995),Crime|Drama -31,Dangerous Minds (1995),Drama -32,Twelve Monkeys (a.k.a. 12 Monkeys) (1995),Mystery|Sci-Fi|Thriller -33,Wings of Courage (1995),Adventure|Romance|IMAX -34,Babe (1995),Children|Drama -35,Carrington (1995),Drama|Romance -36,Dead Man Walking (1995),Crime|Drama -37,Across the Sea of Time (1995),Documentary|IMAX -38,It Takes Two (1995),Children|Comedy -39,Clueless (1995),Comedy|Romance -40,"Cry, the Beloved Country (1995)",Drama -41,Richard III (1995),Drama|War -42,Dead Presidents (1995),Action|Crime|Drama -43,Restoration (1995),Drama -44,Mortal Kombat (1995),Action|Adventure|Fantasy -45,To Die For (1995),Comedy|Drama|Thriller -46,How to Make an American Quilt (1995),Drama|Romance -47,Seven (a.k.a. Se7en) (1995),Mystery|Thriller -48,Pocahontas (1995),Animation|Children|Drama|Musical|Romance -49,When Night Is Falling (1995),Drama|Romance -50,"Usual Suspects, The (1995)",Crime|Mystery|Thriller -51,Guardian Angel (1994),Action|Drama|Thriller -52,Mighty Aphrodite (1995),Comedy|Drama|Romance -53,Lamerica (1994),Adventure|Drama -54,"Big Green, The (1995)",Children|Comedy -55,Georgia (1995),Drama -56,Kids of the Round Table (1995),Adventure|Children|Fantasy -57,Home for the Holidays (1995),Drama -58,"Postman, The (Postino, Il) (1994)",Comedy|Drama|Romance -59,"Confessional, The (Confessionnal, Le) (1995)",Drama|Mystery -60,"Indian in the Cupboard, The (1995)",Adventure|Children|Fantasy -61,Eye for an Eye (1996),Drama|Thriller -62,Mr. Holland's Opus (1995),Drama -63,Don't Be a Menace to South Central While Drinking Your Juice in the Hood (1996),Comedy|Crime -64,Two if by Sea (1996),Comedy|Romance -65,Bio-Dome (1996),Comedy -66,Lawnmower Man 2: Beyond Cyberspace (1996),Action|Sci-Fi|Thriller -67,Two Bits (1995),Drama -68,French Twist (Gazon maudit) (1995),Comedy|Romance -69,Friday (1995),Comedy -70,From Dusk Till Dawn (1996),Action|Comedy|Horror|Thriller -71,Fair Game (1995),Action -72,Kicking and Screaming (1995),Comedy|Drama -73,"Misérables, Les (1995)",Drama|War -74,Bed of Roses (1996),Drama|Romance -75,Big Bully (1996),Comedy|Drama -76,Screamers (1995),Action|Sci-Fi|Thriller -77,Nico Icon (1995),Documentary -78,"Crossing Guard, The (1995)",Action|Crime|Drama|Thriller -79,"Juror, The (1996)",Drama|Thriller -80,"White Balloon, The (Badkonake sefid) (1995)",Children|Drama -81,Things to Do in Denver When You're Dead (1995),Crime|Drama|Romance -82,Antonia's Line (Antonia) (1995),Comedy|Drama -83,Once Upon a Time... When We Were Colored (1995),Drama|Romance -84,Last Summer in the Hamptons (1995),Comedy|Drama -85,Angels and Insects (1995),Drama|Romance -86,White Squall (1996),Action|Adventure|Drama -87,Dunston Checks In (1996),Children|Comedy -88,Black Sheep (1996),Comedy -89,Nick of Time (1995),Action|Thriller -90,"Journey of August King, The (1995)",Drama -92,Mary Reilly (1996),Drama|Horror|Thriller -93,Vampire in Brooklyn (1995),Comedy|Horror|Romance -94,Beautiful Girls (1996),Comedy|Drama|Romance -95,Broken Arrow (1996),Action|Adventure|Thriller -96,In the Bleak Midwinter (1995),Comedy|Drama -97,"Hate (Haine, La) (1995)",Crime|Drama -98,Shopping (1994),Action|Thriller -99,Heidi Fleiss: Hollywood Madam (1995),Documentary -100,City Hall (1996),Drama|Thriller -101,Bottle Rocket (1996),Adventure|Comedy|Crime|Romance -102,Mr. Wrong (1996),Comedy -103,Unforgettable (1996),Mystery|Sci-Fi|Thriller -104,Happy Gilmore (1996),Comedy -105,"Bridges of Madison County, The (1995)",Drama|Romance -106,Nobody Loves Me (Keiner liebt mich) (1994),Comedy|Drama -107,Muppet Treasure Island (1996),Adventure|Children|Comedy|Musical -108,Catwalk (1996),Documentary -109,Headless Body in Topless Bar (1995),Comedy|Drama|Thriller -110,Braveheart (1995),Action|Drama|War -111,Taxi Driver (1976),Crime|Drama|Thriller -112,Rumble in the Bronx (Hont faan kui) (1995),Action|Adventure|Comedy|Crime -113,Before and After (1996),Drama|Mystery -114,Margaret's Museum (1995),Drama -115,"Happiness Is in the Field (Bonheur est dans le pré, Le) (1995)",Comedy -116,Anne Frank Remembered (1995),Documentary -117,"Young Poisoner's Handbook, The (1995)",Crime|Drama -118,If Lucy Fell (1996),Comedy|Romance -119,"Steal Big, Steal Little (1995)",Comedy -120,Race the Sun (1996),Adventure|Comedy|Drama -121,"Boys of St. Vincent, The (1992)",Drama -122,Boomerang (1992),Comedy|Romance -123,Chungking Express (Chung Hing sam lam) (1994),Drama|Mystery|Romance -124,"Star Maker, The (Uomo delle stelle, L') (1995)",Drama -125,Flirting With Disaster (1996),Comedy -126,"NeverEnding Story III, The (1994)",Adventure|Children|Fantasy -127,"Silences of the Palace, The (Saimt el Qusur) (1994)",Drama -128,Jupiter's Wife (1994),Documentary -129,Pie in the Sky (1996),Comedy|Romance -130,Angela (1995),Drama -131,Frankie Starlight (1995),Drama|Romance -132,Jade (1995),Thriller -133,Nueba Yol (1995),Comedy|Drama -134,Sonic Outlaws (1995),Documentary -135,Down Periscope (1996),Comedy -136,From the Journals of Jean Seberg (1995),Documentary -137,Man of the Year (1995),Documentary -138,"Neon Bible, The (1995)",Drama -139,Target (1995),Action|Drama -140,Up Close and Personal (1996),Drama|Romance -141,"Birdcage, The (1996)",Comedy -142,Shadows (Cienie) (1988),Drama -143,Gospa (1995),Drama -144,"Brothers McMullen, The (1995)",Comedy -145,Bad Boys (1995),Action|Comedy|Crime|Drama|Thriller -146,"Amazing Panda Adventure, The (1995)",Adventure|Children -147,"Basketball Diaries, The (1995)",Drama -148,"Awfully Big Adventure, An (1995)",Drama -149,Amateur (1994),Crime|Drama|Thriller -150,Apollo 13 (1995),Adventure|Drama|IMAX -151,Rob Roy (1995),Action|Drama|Romance|War -152,"Addiction, The (1995)",Drama|Horror -153,Batman Forever (1995),Action|Adventure|Comedy|Crime -154,Beauty of the Day (Belle de jour) (1967),Drama -155,Beyond Rangoon (1995),Adventure|Drama|War -156,Blue in the Face (1995),Comedy|Drama -157,Canadian Bacon (1995),Comedy|War -158,Casper (1995),Adventure|Children -159,Clockers (1995),Crime|Drama|Mystery -160,Congo (1995),Action|Adventure|Mystery|Sci-Fi -161,Crimson Tide (1995),Drama|Thriller|War -162,Crumb (1994),Documentary -163,Desperado (1995),Action|Romance|Western -164,Devil in a Blue Dress (1995),Crime|Film-Noir|Mystery|Thriller -165,Die Hard: With a Vengeance (1995),Action|Crime|Thriller -166,"Doom Generation, The (1995)",Comedy|Crime|Drama -167,Feast of July (1995),Drama -168,First Knight (1995),Action|Drama|Romance -169,Free Willy 2: The Adventure Home (1995),Adventure|Children|Drama -170,Hackers (1995),Action|Adventure|Crime|Thriller -171,Jeffrey (1995),Comedy|Drama -172,Johnny Mnemonic (1995),Action|Sci-Fi|Thriller -173,Judge Dredd (1995),Action|Crime|Sci-Fi -174,Jury Duty (1995),Comedy -175,Kids (1995),Drama -176,Living in Oblivion (1995),Comedy -177,Lord of Illusions (1995),Horror -178,Love & Human Remains (1993),Comedy|Drama -179,Mad Love (1995),Drama|Romance -180,Mallrats (1995),Comedy|Romance -181,Mighty Morphin Power Rangers: The Movie (1995),Action|Children -182,Moonlight and Valentino (1995),Drama|Romance -183,Mute Witness (1994),Comedy|Horror|Thriller -184,Nadja (1994),Drama -185,"Net, The (1995)",Action|Crime|Thriller -186,Nine Months (1995),Comedy|Romance -187,Party Girl (1995),Comedy -188,"Prophecy, The (1995)",Fantasy|Horror|Mystery -189,Reckless (1995),Comedy|Fantasy -190,Safe (1995),Thriller -191,"Scarlet Letter, The (1995)",Drama|Romance -192,"Show, The (1995)",Documentary -193,Showgirls (1995),Drama -194,Smoke (1995),Comedy|Drama -195,Something to Talk About (1995),Comedy|Drama|Romance -196,Species (1995),Horror|Sci-Fi -197,"Stars Fell on Henrietta, The (1995)",Drama -198,Strange Days (1995),Action|Crime|Drama|Mystery|Sci-Fi|Thriller -199,"Umbrellas of Cherbourg, The (Parapluies de Cherbourg, Les) (1964)",Drama|Musical|Romance -200,"Tie That Binds, The (1995)",Thriller -201,Three Wishes (1995),Drama|Fantasy -202,Total Eclipse (1995),Drama|Romance -203,"To Wong Foo, Thanks for Everything! Julie Newmar (1995)",Comedy -204,Under Siege 2: Dark Territory (1995),Action -205,Unstrung Heroes (1995),Comedy|Drama -206,Unzipped (1995),Documentary -207,"Walk in the Clouds, A (1995)",Drama|Romance -208,Waterworld (1995),Action|Adventure|Sci-Fi -209,White Man's Burden (1995),Drama -210,Wild Bill (1995),Western -211,"Browning Version, The (1994)",Drama -212,Bushwhacked (1995),Adventure|Comedy|Crime|Mystery -213,Burnt by the Sun (Utomlyonnye solntsem) (1994),Drama -214,Before the Rain (Pred dozhdot) (1994),Drama|War -215,Before Sunrise (1995),Drama|Romance -216,Billy Madison (1995),Comedy -217,"Babysitter, The (1995)",Drama|Thriller -218,Boys on the Side (1995),Comedy|Drama -219,"Cure, The (1995)",Drama -220,Castle Freak (1995),Horror -222,Circle of Friends (1995),Drama|Romance -223,Clerks (1994),Comedy -224,Don Juan DeMarco (1995),Comedy|Drama|Romance -225,Disclosure (1994),Drama|Thriller -226,Dream Man (1995),Thriller -227,Drop Zone (1994),Action|Thriller -228,Destiny Turns on the Radio (1995),Comedy -229,Death and the Maiden (1994),Drama|Thriller -230,Dolores Claiborne (1995),Drama|Thriller -231,Dumb & Dumber (Dumb and Dumber) (1994),Adventure|Comedy -232,Eat Drink Man Woman (Yin shi nan nu) (1994),Comedy|Drama|Romance -233,Exotica (1994),Drama -234,Exit to Eden (1994),Comedy -235,Ed Wood (1994),Comedy|Drama -236,French Kiss (1995),Action|Comedy|Romance -237,Forget Paris (1995),Comedy|Romance -238,Far From Home: The Adventures of Yellow Dog (1995),Adventure|Children -239,"Goofy Movie, A (1995)",Animation|Children|Comedy|Romance -240,Hideaway (1995),Thriller -241,Fluke (1995),Children|Drama -242,Farinelli: il castrato (1994),Drama|Musical -243,Gordy (1995),Children|Comedy|Fantasy -244,Gumby: The Movie (1995),Animation|Children -245,"Glass Shield, The (1994)",Crime|Drama -246,Hoop Dreams (1994),Documentary -247,Heavenly Creatures (1994),Crime|Drama -248,Houseguest (1994),Comedy -249,Immortal Beloved (1994),Drama|Romance -250,Heavyweights (Heavy Weights) (1995),Children|Comedy -251,"Hunted, The (1995)",Action -252,I.Q. (1994),Comedy|Romance -253,Interview with the Vampire: The Vampire Chronicles (1994),Drama|Horror -254,Jefferson in Paris (1995),Drama -255,"Jerky Boys, The (1995)",Comedy -256,Junior (1994),Comedy|Sci-Fi -257,Just Cause (1995),Mystery|Thriller -258,"Kid in King Arthur's Court, A (1995)",Adventure|Children|Comedy|Fantasy|Romance -259,Kiss of Death (1995),Crime|Drama|Thriller -260,Star Wars: Episode IV - A New Hope (1977),Action|Adventure|Sci-Fi -261,Little Women (1994),Drama -262,"Little Princess, A (1995)",Children|Drama -263,Ladybird Ladybird (1994),Drama -264,"Enfer, L' (1994)",Drama -265,Like Water for Chocolate (Como agua para chocolate) (1992),Drama|Fantasy|Romance -266,Legends of the Fall (1994),Drama|Romance|War|Western -267,Major Payne (1995),Comedy -268,Little Odessa (1994),Crime|Drama -269,My Crazy Life (Mi vida loca) (1993),Drama -270,Love Affair (1994),Drama|Romance -271,Losing Isaiah (1995),Drama -272,"Madness of King George, The (1994)",Comedy|Drama -273,Mary Shelley's Frankenstein (Frankenstein) (1994),Drama|Horror|Sci-Fi -274,Man of the House (1995),Comedy -275,Mixed Nuts (1994),Comedy -276,Milk Money (1994),Comedy|Romance -277,Miracle on 34th Street (1994),Drama -278,Miami Rhapsody (1995),Comedy -279,My Family (1995),Drama -280,Murder in the First (1995),Drama|Thriller -281,Nobody's Fool (1994),Comedy|Drama|Romance -282,Nell (1994),Drama -283,New Jersey Drive (1995),Crime|Drama -284,New York Cop (Nyû Yôku no koppu) (1993),Action|Crime -285,Beyond Bedlam (1993),Drama|Horror -286,Nemesis 2: Nebula (1995),Action|Sci-Fi|Thriller -287,Nina Takes a Lover (1994),Comedy|Romance -288,Natural Born Killers (1994),Action|Crime|Thriller -289,Only You (1994),Comedy|Romance -290,Once Were Warriors (1994),Crime|Drama -291,Poison Ivy II (1996),Drama|Thriller -292,Outbreak (1995),Action|Drama|Sci-Fi|Thriller -293,Léon: The Professional (a.k.a. The Professional) (Léon) (1994),Action|Crime|Drama|Thriller -294,"Perez Family, The (1995)",Comedy|Romance -295,"Pyromaniac's Love Story, A (1995)",Comedy|Romance -296,Pulp Fiction (1994),Comedy|Crime|Drama|Thriller -297,Panther (1995),Drama -298,Pushing Hands (Tui shou) (1992),Drama -299,Priest (1994),Drama -300,Quiz Show (1994),Drama -301,Picture Bride (Bijo photo) (1994),Drama|Romance -302,"Queen Margot (Reine Margot, La) (1994)",Drama|Romance -303,"Quick and the Dead, The (1995)",Action|Thriller|Western -304,Roommates (1995),Comedy|Drama -305,Ready to Wear (Pret-A-Porter) (1994),Comedy -306,Three Colors: Red (Trois couleurs: Rouge) (1994),Drama -307,Three Colors: Blue (Trois couleurs: Bleu) (1993),Drama -308,Three Colors: White (Trzy kolory: Bialy) (1994),Comedy|Drama -309,"Red Firecracker, Green Firecracker (Pao Da Shuang Deng) (1994)",Drama -310,Rent-a-Kid (1995),Comedy -311,Relative Fear (1994),Horror|Thriller -312,Stuart Saves His Family (1995),Comedy -313,"Swan Princess, The (1994)",Animation|Children -314,"Secret of Roan Inish, The (1994)",Children|Drama|Fantasy|Mystery -315,"Specialist, The (1994)",Action|Drama|Thriller -316,Stargate (1994),Action|Adventure|Sci-Fi -317,"Santa Clause, The (1994)",Comedy|Drama|Fantasy -318,"Shawshank Redemption, The (1994)",Crime|Drama -319,Shallow Grave (1994),Comedy|Drama|Thriller -320,Suture (1993),Film-Noir|Thriller -321,Strawberry and Chocolate (Fresa y chocolate) (1993),Drama -322,Swimming with Sharks (1995),Comedy|Drama -324,"Sum of Us, The (1994)",Comedy|Drama -325,National Lampoon's Senior Trip (1995),Comedy -326,To Live (Huozhe) (1994),Drama -327,Tank Girl (1995),Action|Comedy|Sci-Fi -328,Tales from the Crypt Presents: Demon Knight (1995),Horror|Thriller -329,Star Trek: Generations (1994),Adventure|Drama|Sci-Fi -330,Tales from the Hood (1995),Action|Crime|Horror -331,Tom & Viv (1994),Drama -332,Village of the Damned (1995),Horror|Sci-Fi -333,Tommy Boy (1995),Comedy -334,Vanya on 42nd Street (1994),Drama -335,Underneath (1995),Mystery|Thriller -336,"Walking Dead, The (1995)",Drama|War -337,What's Eating Gilbert Grape (1993),Drama -338,Virtuosity (1995),Action|Sci-Fi|Thriller -339,While You Were Sleeping (1995),Comedy|Romance -340,"War, The (1994)",Adventure|Drama|War -341,Double Happiness (1994),Drama -342,Muriel's Wedding (1994),Comedy -343,"Baby-Sitters Club, The (1995)",Children -344,Ace Ventura: Pet Detective (1994),Comedy -345,"Adventures of Priscilla, Queen of the Desert, The (1994)",Comedy|Drama -346,Backbeat (1993),Drama|Musical -347,Bitter Moon (1992),Drama|Film-Noir|Romance -348,Bullets Over Broadway (1994),Comedy -349,Clear and Present Danger (1994),Action|Crime|Drama|Thriller -350,"Client, The (1994)",Drama|Mystery|Thriller -351,"Corrina, Corrina (1994)",Comedy|Drama|Romance -352,Crooklyn (1994),Comedy|Drama -353,"Crow, The (1994)",Action|Crime|Fantasy|Thriller -354,Cobb (1994),Drama -355,"Flintstones, The (1994)",Children|Comedy|Fantasy -356,Forrest Gump (1994),Comedy|Drama|Romance|War -357,Four Weddings and a Funeral (1994),Comedy|Romance -358,Higher Learning (1995),Drama -359,I Like It Like That (1994),Comedy|Drama|Romance -360,I Love Trouble (1994),Action|Comedy -361,It Could Happen to You (1994),Comedy|Drama|Romance -362,"Jungle Book, The (1994)",Adventure|Children|Romance -363,"Wonderful, Horrible Life of Leni Riefenstahl, The (Macht der Bilder: Leni Riefenstahl, Die) (1993)",Documentary -364,"Lion King, The (1994)",Adventure|Animation|Children|Drama|Musical|IMAX -365,Little Buddha (1993),Drama -366,"Wes Craven's New Nightmare (Nightmare on Elm Street Part 7: Freddy's Finale, A) (1994)",Drama|Horror|Mystery|Thriller -367,"Mask, The (1994)",Action|Comedy|Crime|Fantasy -368,Maverick (1994),Adventure|Comedy|Western -369,Mrs. Parker and the Vicious Circle (1994),Drama -370,Naked Gun 33 1/3: The Final Insult (1994),Action|Comedy -371,"Paper, The (1994)",Comedy|Drama -372,Reality Bites (1994),Comedy|Drama|Romance -373,Red Rock West (1992),Thriller -374,Richie Rich (1994),Children|Comedy -375,Safe Passage (1994),Drama -376,"River Wild, The (1994)",Action|Thriller -377,Speed (1994),Action|Romance|Thriller -378,Speechless (1994),Comedy|Romance -379,Timecop (1994),Action|Sci-Fi|Thriller -380,True Lies (1994),Action|Adventure|Comedy|Romance|Thriller -381,When a Man Loves a Woman (1994),Drama|Romance -382,Wolf (1994),Drama|Horror|Romance|Thriller -383,Wyatt Earp (1994),Western -384,Bad Company (1995),Action|Crime|Drama -385,"Man of No Importance, A (1994)",Drama -386,S.F.W. (1994),Drama -387,"Low Down Dirty Shame, A (1994)",Action|Comedy -388,Boys Life (1995),Drama -389,"Colonel Chabert, Le (1994)",Drama|Romance|War -390,Faster Pussycat! Kill! Kill! (1965),Action|Crime|Drama -391,Jason's Lyric (1994),Crime|Drama -392,"Secret Adventures of Tom Thumb, The (1993)",Adventure|Animation -393,Street Fighter (1994),Action|Adventure|Fantasy -394,Coldblooded (1995),Comedy -395,Desert Winds (1995),Drama|Fantasy|Romance -396,Fall Time (1995),Drama -397,"Fear, The (1995)",Horror -398,Frank and Ollie (1995),Documentary -399,Girl in the Cadillac (1995),Drama -400,Homage (1995),Drama -401,Mirage (1995),Action|Thriller -402,Open Season (1996),Comedy -403,Two Crimes (Dos crímenes) (1995),Comedy|Crime|Drama -404,Brother Minister: The Assassination of Malcolm X (1994),Documentary -405,Highlander III: The Sorcerer (a.k.a. Highlander: The Final Dimension) (1994),Action|Fantasy -406,Federal Hill (1994),Drama -407,In the Mouth of Madness (1995),Horror|Thriller -408,8 Seconds (1994),Drama -409,Above the Rim (1994),Crime|Drama -410,Addams Family Values (1993),Children|Comedy|Fantasy -411,Martin Lawrence: You So Crazy (1994),Comedy|Documentary -412,"Age of Innocence, The (1993)",Drama -413,Airheads (1994),Comedy -414,"Air Up There, The (1994)",Comedy -415,Another Stakeout (1993),Comedy|Thriller -416,Bad Girls (1994),Western -417,Barcelona (1994),Comedy|Romance -418,Being Human (1993),Drama -419,"Beverly Hillbillies, The (1993)",Comedy -420,Beverly Hills Cop III (1994),Action|Comedy|Crime|Thriller -421,Black Beauty (1994),Adventure|Children|Drama -422,Blink (1994),Thriller -423,Blown Away (1994),Action|Thriller -424,Blue Chips (1994),Drama -425,Blue Sky (1994),Drama|Romance -426,Body Snatchers (1993),Horror|Sci-Fi|Thriller -427,Boxing Helena (1993),Drama|Mystery|Romance|Thriller -428,"Bronx Tale, A (1993)",Drama -429,Cabin Boy (1994),Comedy -430,Calendar Girl (1993),Comedy|Drama -431,Carlito's Way (1993),Crime|Drama -432,City Slickers II: The Legend of Curly's Gold (1994),Adventure|Comedy|Western -433,Clean Slate (1994),Comedy -434,Cliffhanger (1993),Action|Adventure|Thriller -435,Coneheads (1993),Comedy|Sci-Fi -436,Color of Night (1994),Drama|Thriller -437,Cops and Robbersons (1994),Comedy -438,"Cowboy Way, The (1994)",Action|Comedy|Drama -439,Dangerous Game (1993),Drama -440,Dave (1993),Comedy|Romance -441,Dazed and Confused (1993),Comedy -442,Demolition Man (1993),Action|Adventure|Sci-Fi -443,"Endless Summer 2, The (1994)",Adventure|Documentary -444,Even Cowgirls Get the Blues (1993),Comedy|Romance -445,Fatal Instinct (1993),Comedy -446,Farewell My Concubine (Ba wang bie ji) (1993),Drama|Romance -447,"Favor, The (1994)",Comedy|Romance -448,Fearless (1993),Drama -449,Fear of a Black Hat (1994),Comedy -450,With Honors (1994),Comedy|Drama -451,Flesh and Bone (1993),Drama|Mystery|Romance -452,Widows' Peak (1994),Drama -453,For Love or Money (1993),Comedy|Romance -454,"Firm, The (1993)",Drama|Thriller -455,Free Willy (1993),Adventure|Children|Drama -456,Fresh (1994),Crime|Drama|Thriller -457,"Fugitive, The (1993)",Thriller -458,Geronimo: An American Legend (1993),Drama|Western -459,"Getaway, The (1994)",Action|Adventure|Crime|Drama|Romance|Thriller -460,Getting Even with Dad (1994),Comedy -461,Go Fish (1994),Drama|Romance -462,"Good Man in Africa, A (1994)",Action|Adventure -463,Guilty as Sin (1993),Crime|Drama|Thriller -464,Hard Target (1993),Action|Adventure|Crime|Thriller -465,Heaven & Earth (1993),Action|Drama|War -466,Hot Shots! Part Deux (1993),Action|Comedy|War -467,Live Nude Girls (1995),Comedy -468,"Englishman Who Went Up a Hill But Came Down a Mountain, The (1995)",Comedy|Romance -469,"House of the Spirits, The (1993)",Drama|Romance -470,House Party 3 (1994),Comedy -471,"Hudsucker Proxy, The (1994)",Comedy -472,I'll Do Anything (1994),Comedy|Drama -473,In the Army Now (1994),Comedy|War -474,In the Line of Fire (1993),Action|Thriller -475,In the Name of the Father (1993),Drama -476,"Inkwell, The (1994)",Comedy|Drama -477,What's Love Got to Do with It? (1993),Drama|Musical -478,Jimmy Hollywood (1994),Comedy|Crime|Drama -479,Judgment Night (1993),Action|Crime|Thriller -480,Jurassic Park (1993),Action|Adventure|Sci-Fi|Thriller -481,Kalifornia (1993),Drama|Thriller -482,Killing Zoe (1994),Crime|Drama|Thriller -483,King of the Hill (1993),Drama -484,Lassie (1994),Adventure|Children -485,Last Action Hero (1993),Action|Adventure|Comedy|Fantasy -486,Life with Mikey (1993),Comedy -487,Lightning Jack (1994),Comedy|Western -488,M. Butterfly (1993),Drama|Romance -489,Made in America (1993),Comedy -490,Malice (1993),Thriller -491,"Man Without a Face, The (1993)",Drama -492,Manhattan Murder Mystery (1993),Comedy|Mystery -493,Menace II Society (1993),Action|Crime|Drama -494,Executive Decision (1996),Action|Adventure|Thriller -495,In the Realm of the Senses (Ai no corrida) (1976),Drama -496,What Happened Was... (1994),Comedy|Drama|Romance|Thriller -497,Much Ado About Nothing (1993),Comedy|Romance -498,Mr. Jones (1993),Drama|Romance -499,Mr. Wonderful (1993),Comedy|Romance -500,Mrs. Doubtfire (1993),Comedy|Drama -501,Naked (1993),Drama -502,"Next Karate Kid, The (1994)",Action|Children|Romance -503,"New Age, The (1994)",Drama -504,No Escape (1994),Action|Drama|Sci-Fi -505,North (1994),Comedy -506,Orlando (1992),Drama|Fantasy|Romance -507,"Perfect World, A (1993)",Crime|Drama|Thriller -508,Philadelphia (1993),Drama -509,"Piano, The (1993)",Drama|Romance -510,Poetic Justice (1993),Drama -511,"Program, The (1993)",Action|Drama -512,"Puppet Masters, The (1994)",Horror|Sci-Fi -513,Radioland Murders (1994),Comedy|Mystery|Romance -514,"Ref, The (1994)",Comedy -515,"Remains of the Day, The (1993)",Drama|Romance -516,Renaissance Man (1994),Comedy|Drama -517,Rising Sun (1993),Action|Drama|Mystery -518,"Road to Wellville, The (1994)",Comedy -519,RoboCop 3 (1993),Action|Crime|Drama|Sci-Fi|Thriller -520,Robin Hood: Men in Tights (1993),Comedy -521,Romeo Is Bleeding (1993),Crime|Thriller -522,Romper Stomper (1992),Action|Drama -523,Ruby in Paradise (1993),Drama -524,Rudy (1993),Drama -525,"Saint of Fort Washington, The (1993)",Drama -526,"Savage Nights (Nuits fauves, Les) (1992)",Drama -527,Schindler's List (1993),Drama|War -528,"Scout, The (1994)",Comedy|Drama -529,Searching for Bobby Fischer (1993),Drama -530,Second Best (1994),Drama -531,"Secret Garden, The (1993)",Children|Drama -532,Serial Mom (1994),Comedy|Crime|Horror -533,"Shadow, The (1994)",Action|Adventure|Fantasy|Mystery -534,Shadowlands (1993),Drama|Romance -535,Short Cuts (1993),Drama -536,"Simple Twist of Fate, A (1994)",Drama -537,Sirens (1994),Drama -538,Six Degrees of Separation (1993),Drama -539,Sleepless in Seattle (1993),Comedy|Drama|Romance -540,Sliver (1993),Thriller -541,Blade Runner (1982),Action|Sci-Fi|Thriller -542,Son in Law (1993),Comedy|Drama|Romance -543,So I Married an Axe Murderer (1993),Comedy|Romance|Thriller -544,Striking Distance (1993),Action|Crime -545,Harem (1985),Drama -546,Super Mario Bros. (1993),Action|Adventure|Children|Comedy|Fantasy|Sci-Fi -547,Surviving the Game (1994),Action|Adventure|Thriller -548,Terminal Velocity (1994),Action|Mystery|Thriller -549,Thirty-Two Short Films About Glenn Gould (1993),Drama|Musical -550,Threesome (1994),Comedy|Romance -551,"Nightmare Before Christmas, The (1993)",Animation|Children|Fantasy|Musical -552,"Three Musketeers, The (1993)",Action|Adventure|Comedy|Romance -553,Tombstone (1993),Action|Drama|Western -554,Trial by Jury (1994),Crime|Drama|Thriller -555,True Romance (1993),Crime|Thriller -556,"War Room, The (1993)",Documentary -558,"Pagemaster, The (1994)",Action|Adventure|Animation|Children|Fantasy -559,"Paris, France (1993)",Comedy -560,"Beans of Egypt, Maine, The (1994)",Drama -561,Killer (Bulletproof Heart) (1994),Drama|Thriller -562,Welcome to the Dollhouse (1995),Comedy|Drama -563,Germinal (1993),Drama|Romance -564,Chasers (1994),Comedy -565,Cronos (1993),Drama|Horror -566,Naked in New York (1994),Comedy|Romance -567,Kika (1993),Comedy|Drama -568,Bhaji on the Beach (1993),Comedy|Drama -569,Little Big League (1994),Comedy|Drama -570,"Slingshot, The (Kådisbellan) (1993)",Comedy|Drama -571,"Wedding Gift, The (1994)",Drama|Romance -572,Foreign Student (1994),Drama -573,"Ciao, Professore! (Io speriamo che me la cavo) (1992)",Drama -574,Spanking the Monkey (1994),Comedy|Drama -575,"Little Rascals, The (1994)",Children|Comedy -576,Fausto (1993),Comedy -577,Andre (1994),Adventure|Children|Drama -579,"Escort, The (Scorta, La) (1993)",Crime|Thriller -580,Princess Caraboo (1994),Drama -581,"Celluloid Closet, The (1995)",Documentary -582,Métisse (Café au Lait) (1993),Comedy|Drama -583,Dear Diary (Caro Diario) (1994),Comedy|Drama -584,I Don't Want to Talk About It (De eso no se habla) (1993),Drama|Romance -585,"Brady Bunch Movie, The (1995)",Comedy -586,Home Alone (1990),Children|Comedy -587,Ghost (1990),Comedy|Drama|Fantasy|Romance|Thriller -588,Aladdin (1992),Adventure|Animation|Children|Comedy|Musical -589,Terminator 2: Judgment Day (1991),Action|Sci-Fi -590,Dances with Wolves (1990),Adventure|Drama|Western -591,Tough and Deadly (1995),Action|Drama|Thriller -592,Batman (1989),Action|Crime|Thriller -593,"Silence of the Lambs, The (1991)",Crime|Horror|Thriller -594,Snow White and the Seven Dwarfs (1937),Animation|Children|Drama|Fantasy|Musical -595,Beauty and the Beast (1991),Animation|Children|Fantasy|Musical|Romance|IMAX -596,Pinocchio (1940),Animation|Children|Fantasy|Musical -597,Pretty Woman (1990),Comedy|Romance -598,Window to Paris (Okno v Parizh) (1994),Comedy|Fantasy -599,"Wild Bunch, The (1969)",Adventure|Western -600,Love and a .45 (1994),Action|Comedy|Crime -601,"Wooden Man's Bride, The (Yan shen) (1994)",Drama -602,"Great Day in Harlem, A (1994)",Documentary -603,"Bye Bye, Love (1995)",Comedy -604,Criminals (1996),Documentary -605,One Fine Day (1996),Drama|Romance -606,Candyman: Farewell to the Flesh (1995),Fantasy|Horror -607,Century (1993),Drama -608,Fargo (1996),Comedy|Crime|Drama|Thriller -609,Homeward Bound II: Lost in San Francisco (1996),Adventure|Children -610,Heavy Metal (1981),Action|Adventure|Animation|Horror|Sci-Fi -611,Hellraiser: Bloodline (1996),Action|Horror|Sci-Fi -612,"Pallbearer, The (1996)",Comedy -613,Jane Eyre (1996),Drama|Romance -614,Loaded (1994),Drama|Thriller -615,Bread and Chocolate (Pane e cioccolata) (1973),Comedy|Drama -616,"Aristocats, The (1970)",Animation|Children -617,"Flower of My Secret, The (La flor de mi secreto) (1995)",Comedy|Drama -618,Two Much (1995),Comedy|Romance -619,Ed (1996),Comedy -620,Scream of Stone (Cerro Torre: Schrei aus Stein) (1991),Drama -621,My Favorite Season (1993),Drama -623,"Modern Affair, A (1995)",Romance -624,Condition Red (Beyond the Law) (1995),Action|Drama|Thriller -625,Asfour Stah (1990),Drama -626,"Thin Line Between Love and Hate, A (1996)",Comedy -627,"Last Supper, The (1995)",Drama|Thriller -628,Primal Fear (1996),Crime|Drama|Mystery|Thriller -629,Rude (1995),Drama -630,Carried Away (1996),Drama|Romance -631,All Dogs Go to Heaven 2 (1996),Adventure|Animation|Children|Fantasy|Musical|Romance -632,Land and Freedom (Tierra y libertad) (1995),Drama|War -633,Denise Calls Up (1995),Comedy -634,Theodore Rex (1995),Comedy -635,"Family Thing, A (1996)",Comedy|Drama -636,Frisk (1995),Drama -637,Sgt. Bilko (1996),Comedy -638,Jack and Sarah (1995),Romance -639,Girl 6 (1996),Comedy|Drama -640,Diabolique (1996),Drama|Thriller -641,"Little Indian, Big City (Un indien dans la ville) (1994)",Adventure|Children|Comedy -642,Roula (1995),Drama -643,Peanuts - Die Bank zahlt alles (1996),Comedy -644,Happy Weekend (1996),Comedy -645,Nelly & Monsieur Arnaud (1995),Drama -647,Courage Under Fire (1996),Action|Crime|Drama|War -648,Mission: Impossible (1996),Action|Adventure|Mystery|Thriller -649,Cold Fever (Á köldum klaka) (1995),Comedy|Drama -650,Moll Flanders (1996),Drama -651,"Superweib, Das (1996)",Comedy -652,"301, 302 (301/302) (1995)",Horror|Mystery|Thriller -653,Dragonheart (1996),Action|Adventure|Fantasy -654,And Nobody Weeps for Me (Und keiner weint mir nach) (1996),Drama|Romance -655,My Mother's Courage (Mutters Courage) (1995),Comedy -656,Eddie (1996),Comedy -657,Yankee Zulu (1994),Comedy|Drama -658,Billy's Holiday (1995),Drama|Musical -659,Purple Noon (Plein soleil) (1960),Crime|Drama|Thriller -660,August (1996),Drama -661,James and the Giant Peach (1996),Adventure|Animation|Children|Fantasy|Musical -662,Fear (1996),Thriller -663,Kids in the Hall: Brain Candy (1996),Comedy -664,Faithful (1996),Comedy -665,Underground (1995),Comedy|Drama|War -666,All Things Fair (Lust och fägring stor) (1995),Drama|Romance|War -667,Bloodsport 2 (a.k.a. Bloodsport II: The Next Kumite) (1996),Action -668,Song of the Little Road (Pather Panchali) (1955),Drama -670,"World of Apu, The (Apur Sansar) (1959)",Drama -671,Mystery Science Theater 3000: The Movie (1996),Comedy|Sci-Fi -672,Tarantella (1995),Drama -673,Space Jam (1996),Adventure|Animation|Children|Comedy|Fantasy|Sci-Fi -674,Barbarella (1968),Adventure|Comedy|Sci-Fi -675,Hostile Intentions (1994),Action|Drama|Thriller -676,They Bite (1996),Comedy|Horror|Sci-Fi -678,Some Folks Call It a Sling Blade (1993),Drama|Thriller -679,"Run of the Country, The (1995)",Drama -680,"Alphaville (Alphaville, une étrange aventure de Lemmy Caution) (1965)",Drama|Mystery|Romance|Sci-Fi|Thriller -681,Coup de torchon (Clean Slate) (1981),Crime -682,Tigrero: A Film That Was Never Made (1994),Documentary|Drama -683,"Eye of Vichy, The (Oeil de Vichy, L') (1993)",Documentary -684,Windows (1980),Drama -685,It's My Party (1996),Drama -687,Country Life (1994),Drama|Romance -688,Operation Dumbo Drop (1995),Action|Adventure|Comedy|War -690,"Promise, The (Versprechen, Das) (1995)",Drama|Romance -691,Mrs. Winterbourne (1996),Comedy|Romance -692,Solo (1996),Action|Sci-Fi|Thriller -693,Under the Domim Tree (Etz Hadomim Tafus) (1994),Drama -694,"Substitute, The (1996)",Action|Crime|Drama -695,True Crime (1996),Mystery|Thriller -696,Butterfly Kiss (1995),Drama|Thriller -697,Feeling Minnesota (1996),Drama|Romance -698,Delta of Venus (1995),Drama -699,To Cross the Rubicon (1991),Drama -700,Angus (1995),Comedy -701,Daens (1992),Drama -702,Faces (1968),Drama -703,Boys (1996),Drama -704,"Quest, The (1996)",Action|Adventure -705,Cosi (1996),Comedy -706,Sunset Park (1996),Drama -707,Mulholland Falls (1996),Crime|Drama|Thriller -708,"Truth About Cats & Dogs, The (1996)",Comedy|Romance -709,Oliver & Company (1988),Adventure|Animation|Children|Comedy|Musical -710,Celtic Pride (1996),Comedy -711,Flipper (1996),Adventure|Children -712,Captives (1994),Crime|Drama|Romance|Thriller -713,Of Love and Shadows (1994),Drama -714,Dead Man (1995),Drama|Mystery|Western -715,"Horseman on the Roof, The (Hussard sur le toit, Le) (1995)",Drama|Romance -716,Switchblade Sisters (1975),Crime -717,Mouth to Mouth (Boca a boca) (1995),Comedy -718,"Visitors, The (Visiteurs, Les) (1993)",Comedy|Fantasy|Sci-Fi -719,Multiplicity (1996),Comedy -720,Wallace & Gromit: The Best of Aardman Animation (1996),Adventure|Animation|Comedy -721,Halfmoon (Paul Bowles - Halbmond) (1995),Drama -722,"Haunted World of Edward D. Wood Jr., The (1996)",Documentary -723,Two Friends (1986),Drama -724,"Craft, The (1996)",Drama|Fantasy|Horror|Thriller -725,"Great White Hype, The (1996)",Comedy -726,Last Dance (1996),Drama -727,War Stories (1995),Documentary -728,Cold Comfort Farm (1995),Comedy -729,"Institute Benjamenta, or This Dream People Call Human Life (1995)",Drama -730,Low Life (1994),Drama -731,Heaven's Prisoners (1996),Crime|Thriller -732,Original Gangstas (1996),Crime -733,"Rock, The (1996)",Action|Adventure|Thriller -734,Getting Away With Murder (1996),Comedy -735,Cemetery Man (Dellamorte Dellamore) (1994),Horror -736,Twister (1996),Action|Adventure|Romance|Thriller -737,Barb Wire (1996),Action|Sci-Fi -738,"Garçu, Le (1995)",Drama -739,Honey Moon (Honigmond) (1996),Comedy -741,Ghost in the Shell (Kôkaku kidôtai) (1995),Animation|Sci-Fi -742,Thinner (1996),Horror|Thriller -743,Spy Hard (1996),Comedy -744,Brothers in Trouble (1995),Drama -745,Wallace & Gromit: A Close Shave (1995),Animation|Children|Comedy -746,Force of Evil (1948),Film-Noir -747,"Stupids, The (1996)",Comedy -748,"Arrival, The (1996)",Action|Sci-Fi|Thriller -749,"Man from Down Under, The (1943)",Drama -750,Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb (1964),Comedy|War -751,Careful (1992),Comedy|Horror -752,Vermont Is For Lovers (1992),Comedy|Documentary|Romance -753,"Month by the Lake, A (1995)",Comedy|Drama|Romance -754,Gold Diggers: The Secret of Bear Mountain (1995),Adventure|Children -755,Kim (1950),Children|Drama -756,Carmen Miranda: Bananas Is My Business (1994),Documentary -757,Ashes of Time (Dung che sai duk) (1994),Drama -758,"Jar, The (Khomreh) (1992)",Drama -759,Maya Lin: A Strong Clear Vision (1994),Documentary -760,Stalingrad (1993),Drama|War -761,"Phantom, The (1996)",Action|Adventure -762,Striptease (1996),Comedy|Crime -763,"Last of the High Kings, The (a.k.a. Summer Fling) (1996)",Comedy|Drama -764,Heavy (1995),Drama|Romance -765,Jack (1996),Comedy|Drama -766,I Shot Andy Warhol (1996),Drama -767,"Grass Harp, The (1995)",Comedy|Drama -768,Someone Else's America (1995),Drama -769,Marlene Dietrich: Shadow and Light (1996),Documentary -770,Costa Brava (1946),Drama -771,"Life Is Rosy (a.k.a. Life Is Beautiful) (Vie est belle, La) (1987)",Comedy|Drama -772,Quartier Mozart (1992),Comedy -773,Touki Bouki (1973),Drama -774,Wend Kuuni (a.k.a. God's Gift) (1982),Drama -775,Spirits of the Dead (1968),Horror|Mystery -776,Babyfever (1994),Comedy|Drama -777,Pharaoh's Army (1995),War -778,Trainspotting (1996),Comedy|Crime|Drama -779,'Til There Was You (1997),Drama|Romance -780,Independence Day (a.k.a. ID4) (1996),Action|Adventure|Sci-Fi|Thriller -781,Stealing Beauty (1996),Drama -782,"Fan, The (1996)",Drama|Thriller -783,"Hunchback of Notre Dame, The (1996)",Animation|Children|Drama|Musical|Romance -784,"Cable Guy, The (1996)",Comedy|Thriller -785,Kingpin (1996),Comedy -786,Eraser (1996),Action|Drama|Thriller -787,"Gate of Heavenly Peace, The (1995)",Documentary -788,"Nutty Professor, The (1996)",Comedy|Fantasy|Romance|Sci-Fi -789,"I, the Worst of All (Yo, la peor de todas) (1990)",Drama -790,"Unforgettable Summer, An (Un été inoubliable) (1994)",Drama -791,"Last Klezmer: Leopold Kozlowski, His Life and Music, The (1994)",Documentary -792,"Hungarian Fairy Tale, A (Hol volt, hol nem volt) (1987)",Fantasy -793,My Life and Times With Antonin Artaud (En compagnie d'Antonin Artaud) (1993),Drama -794,Midnight Dancers (Sibak) (1994),Comedy|Drama -795,Somebody to Love (1994),Drama -796,"Very Natural Thing, A (1974)",Drama -797,"Old Lady Who Walked in the Sea, The (Vieille qui marchait dans la mer, La) (1991)",Comedy -798,Daylight (1996),Action|Adventure|Drama|Thriller -799,"Frighteners, The (1996)",Comedy|Horror|Thriller -800,Lone Star (1996),Drama|Mystery|Western -801,Harriet the Spy (1996),Children|Comedy -802,Phenomenon (1996),Drama|Romance -803,Walking and Talking (1996),Comedy|Drama|Romance -804,She's the One (1996),Comedy|Romance -805,"Time to Kill, A (1996)",Drama|Thriller -806,American Buffalo (1996),Crime|Drama -807,"Rendezvous in Paris (Rendez-vous de Paris, Les) (1995)",Comedy|Romance -808,Alaska (1996),Adventure|Children -809,Fled (1996),Action|Adventure -810,Kazaam (1996),Children|Comedy|Fantasy -812,Magic Hunter (Büvös vadász) (1994),Drama -813,Larger Than Life (1996),Comedy -814,"Boy Called Hate, A (1995)",Drama -815,Power 98 (1996),Action|Mystery|Thriller -816,Two Deaths (1995),Drama -818,"Very Brady Sequel, A (1996)",Comedy -819,Stefano Quantestorie (1993),Comedy|Drama -820,"Death in the Garden (Mort en ce jardin, La) (1956)",Drama -821,"Crude Oasis, The (1995)",Drama|Romance -822,Hedd Wyn (1992),Drama|Romance|War -823,"Collector, The (La collectionneuse) (1967)",Drama -824,Kaspar Hauser (1993),Drama|Mystery -825,Regular Guys (Echte Kerle) (1996),Comedy|Romance -826,Women Robbers (Diebinnen) (1995),Drama -827,"Convent, The (O Convento) (1995)",Drama -828,"Adventures of Pinocchio, The (1996)",Adventure|Children -829,Joe's Apartment (1996),Comedy|Fantasy|Musical -830,"First Wives Club, The (1996)",Comedy -831,Stonewall (1995),Drama -832,Ransom (1996),Crime|Thriller -833,High School High (1996),Comedy -834,Phat Beach (1996),Comedy -835,Foxfire (1996),Drama -836,Chain Reaction (1996),Action|Adventure|Thriller -837,Matilda (1996),Children|Comedy|Fantasy -838,Emma (1996),Comedy|Drama|Romance -839,"Crow: City of Angels, The (1996)",Action|Thriller -840,House Arrest (1996),Children|Comedy -841,"Eyes Without a Face (Yeux sans visage, Les) (1959)",Horror -842,Tales from the Crypt Presents: Bordello of Blood (1996),Comedy|Horror -843,Lotto Land (1995),Drama -844,"Story of Xinghua, The (Xinghua san yue tian) (1994)",Drama -845,"Day the Sun Turned Cold, The (Tianguo niezi) (1994)",Drama -846,Flirt (1995),Drama -847,"Big Squeeze, The (1996)",Comedy|Drama -848,"Spitfire Grill, The (1996)",Drama -849,Escape from L.A. (1996),Action|Adventure|Sci-Fi|Thriller -850,Cyclo (Xich lo) (1995),Crime|Drama -851,Basquiat (1996),Drama -852,Tin Cup (1996),Comedy|Drama|Romance -853,Dingo (1991),Drama -854,"Ballad of Narayama, The (Narayama Bushiko) (1958)",Drama -855,Every Other Weekend (Un week-end sur deux) (1990),Drama -856,Mille bolle blu (1993),Comedy -857,Crows and Sparrows (Wuya yu maque) (1949),Drama -858,"Godfather, The (1972)",Crime|Drama -859,"Hippie Revolution, The (1996)",Documentary -860,"Maybe, Maybe Not (Bewegte Mann, Der) (1994)",Comedy -861,Supercop (Police Story 3: Supercop) (Jing cha gu shi III: Chao ji jing cha) (1992),Action|Comedy|Crime|Thriller -862,Manny & Lo (1996),Drama -864,"Wife, The (1995)",Comedy|Drama -865,Small Faces (1996),Drama -866,Bound (1996),Crime|Drama|Romance|Thriller -867,Carpool (1996),Comedy|Crime -868,Death in Brunswick (1991),Comedy -869,Kansas City (1996),Crime|Drama|Musical|Thriller -870,Gone Fishin' (1997),Comedy -871,Lover's Knot (1996),Comedy -872,Vive L'Amour (Ai qing wan sui) (1994),Drama -873,Shadow of Angels (Schatten der Engel) (1976),Drama -874,Killer: A Journal of Murder (1995),Crime|Drama -875,Nothing to Lose (1994),Action|Crime|Drama -876,Supercop 2 (Project S) (Chao ji ji hua) (1993),Action|Comedy|Crime|Thriller -877,Girls Town (1996),Comedy|Drama -878,Bye-Bye (1995),Drama -879,"Relic, The (1997)",Horror|Thriller -880,"Island of Dr. Moreau, The (1996)",Sci-Fi|Thriller -881,First Kid (1996),Children|Comedy -882,"Trigger Effect, The (1996)",Drama|Thriller -884,Sweet Nothing (1996),Drama -885,Bogus (1996),Children|Drama|Fantasy -886,Bulletproof (1996),Action|Comedy|Crime -887,Talk of Angels (1998),Drama -888,Land Before Time III: The Time of the Great Giving (1995),Adventure|Animation|Children|Musical -889,1-900 (06) (1994),Drama|Romance -890,Baton Rouge (Bâton rouge) (1988),Thriller -891,Halloween: The Curse of Michael Myers (Halloween 6: The Curse of Michael Myers) (1995),Horror|Thriller -892,Twelfth Night (1996),Comedy|Drama|Romance -893,Mother Night (1996),Drama -894,Liebelei (1933),Romance -895,Venice/Venice (1992),Drama -896,Wild Reeds (Les roseaux sauvages) (1994),Drama -897,For Whom the Bell Tolls (1943),Adventure|Drama|Romance|War -898,"Philadelphia Story, The (1940)",Comedy|Drama|Romance -899,Singin' in the Rain (1952),Comedy|Musical|Romance -900,"American in Paris, An (1951)",Musical|Romance -901,Funny Face (1957),Comedy|Musical -902,Breakfast at Tiffany's (1961),Drama|Romance -903,Vertigo (1958),Drama|Mystery|Romance|Thriller -904,Rear Window (1954),Mystery|Thriller -905,It Happened One Night (1934),Comedy|Romance -906,Gaslight (1944),Drama|Thriller -907,"Gay Divorcee, The (1934)",Comedy|Musical|Romance -908,North by Northwest (1959),Action|Adventure|Mystery|Romance|Thriller -909,"Apartment, The (1960)",Comedy|Drama|Romance -910,Some Like It Hot (1959),Comedy|Crime -911,Charade (1963),Comedy|Crime|Mystery|Romance|Thriller -912,Casablanca (1942),Drama|Romance -913,"Maltese Falcon, The (1941)",Film-Noir|Mystery -914,My Fair Lady (1964),Comedy|Drama|Musical|Romance -915,Sabrina (1954),Comedy|Romance -916,Roman Holiday (1953),Comedy|Drama|Romance -917,"Little Princess, The (1939)",Children|Drama -918,Meet Me in St. Louis (1944),Musical -919,"Wizard of Oz, The (1939)",Adventure|Children|Fantasy|Musical -920,Gone with the Wind (1939),Drama|Romance|War -921,My Favorite Year (1982),Comedy -922,Sunset Blvd. (a.k.a. Sunset Boulevard) (1950),Drama|Film-Noir|Romance -923,Citizen Kane (1941),Drama|Mystery -924,2001: A Space Odyssey (1968),Adventure|Drama|Sci-Fi -925,Golden Earrings (1947),Adventure|Romance|War -926,All About Eve (1950),Drama -927,"Women, The (1939)",Comedy -928,Rebecca (1940),Drama|Mystery|Romance|Thriller -929,Foreign Correspondent (1940),Drama|Film-Noir|Mystery|Thriller -930,Notorious (1946),Film-Noir|Romance|Thriller -931,Spellbound (1945),Mystery|Romance|Thriller -932,"Affair to Remember, An (1957)",Drama|Romance -933,To Catch a Thief (1955),Crime|Mystery|Romance|Thriller -934,Father of the Bride (1950),Comedy -935,"Band Wagon, The (1953)",Comedy|Musical -936,Ninotchka (1939),Comedy|Romance -937,Love in the Afternoon (1957),Comedy|Romance -938,Gigi (1958),Musical -939,"Reluctant Debutante, The (1958)",Comedy|Drama -940,"Adventures of Robin Hood, The (1938)",Action|Adventure|Romance -941,"Mark of Zorro, The (1940)",Adventure -942,Laura (1944),Crime|Film-Noir|Mystery -943,"Ghost and Mrs. Muir, The (1947)",Drama|Fantasy|Romance -944,Lost Horizon (1937),Drama -945,Top Hat (1935),Comedy|Musical|Romance -946,To Be or Not to Be (1942),Comedy|Drama|War -947,My Man Godfrey (1936),Comedy|Romance -948,Giant (1956),Drama|Romance|Western -949,East of Eden (1955),Drama -950,"Thin Man, The (1934)",Comedy|Crime -951,His Girl Friday (1940),Comedy|Romance -952,Around the World in 80 Days (1956),Adventure|Comedy -953,It's a Wonderful Life (1946),Drama|Fantasy|Romance -954,Mr. Smith Goes to Washington (1939),Drama -955,Bringing Up Baby (1938),Comedy|Romance -956,Penny Serenade (1941),Drama|Romance -957,"Scarlet Letter, The (1926)",Drama -958,Lady of Burlesque (1943),Comedy|Mystery -959,Of Human Bondage (1934),Drama -960,Angel on My Shoulder (1946),Crime|Drama -961,Little Lord Fauntleroy (1936),Drama -962,They Made Me a Criminal (I Became a Criminal) (They Made Me a Fugitive) (1939),Crime|Drama -963,"Inspector General, The (1949)",Musical -964,Angel and the Badman (1947),Romance|Western -965,"39 Steps, The (1935)",Drama|Mystery|Thriller -966,"Walk in the Sun, A (1945)",War -967,"Outlaw, The (1943)",Western -968,Night of the Living Dead (1968),Horror|Sci-Fi|Thriller -969,"African Queen, The (1951)",Adventure|Comedy|Romance|War -970,Beat the Devil (1953),Adventure|Comedy|Crime|Drama|Romance -971,Cat on a Hot Tin Roof (1958),Drama -972,"Last Time I Saw Paris, The (1954)",Drama -973,Meet John Doe (1941),Comedy|Drama -974,Algiers (1938),Drama|Romance -975,Something to Sing About (1937),Comedy|Musical -976,"Farewell to Arms, A (1932)",Romance|War -977,Moonlight Murder (1936),Mystery -979,Nothing Personal (1995),Drama|War -980,"Yes, Madam (a.k.a. Police Assassins) (a.k.a. In the Line of Duty 2) (Huang gu shi jie) (1985)",Action -981,Dangerous Ground (1997),Drama -982,Picnic (1955),Drama -983,Madagascar Skin (1995),Romance -984,"Pompatus of Love, The (1996)",Comedy|Drama -985,Small Wonders (1995),Documentary -986,Fly Away Home (1996),Adventure|Children -987,Bliss (1997),Drama|Romance -988,Grace of My Heart (1996),Comedy|Drama -989,Brother of Sleep (Schlafes Bruder) (1995),Drama -990,Maximum Risk (1996),Action|Adventure|Thriller -991,Michael Collins (1996),Drama -992,"Rich Man's Wife, The (1996)",Thriller -993,Infinity (1996),Drama -994,Big Night (1996),Comedy|Drama -996,Last Man Standing (1996),Action|Crime|Drama|Thriller -997,Caught (1996),Drama|Thriller -998,Set It Off (1996),Action|Crime -999,2 Days in the Valley (1996),Crime|Film-Noir -1000,Curdled (1996),Crime -1001,"Associate, The (Associé, L') (1979)",Comedy -1002,Ed's Next Move (1996),Comedy|Romance -1003,Extreme Measures (1996),Drama|Thriller -1004,"Glimmer Man, The (1996)",Action|Thriller -1005,D3: The Mighty Ducks (1996),Children|Comedy -1006,"Chamber, The (1996)",Drama -1007,"Apple Dumpling Gang, The (1975)",Children|Comedy|Western -1008,"Davy Crockett, King of the Wild Frontier (1955)",Adventure|Western -1009,Escape to Witch Mountain (1975),Adventure|Children|Fantasy -1010,"Love Bug, The (1969)",Children|Comedy -1011,Herbie Rides Again (1974),Adventure|Children|Comedy -1012,Old Yeller (1957),Children|Drama -1013,"Parent Trap, The (1961)",Children|Comedy|Romance -1014,Pollyanna (1960),Children|Comedy|Drama -1015,Homeward Bound: The Incredible Journey (1993),Adventure|Children|Drama -1016,"Shaggy Dog, The (1959)",Children|Comedy -1017,Swiss Family Robinson (1960),Adventure|Children diff --git a/wrangler-docs/cheatsheet.md b/wrangler-docs/cheatsheet.md deleted file mode 100644 index f3d6314a2..000000000 --- a/wrangler-docs/cheatsheet.md +++ /dev/null @@ -1,83 +0,0 @@ -# Cheatsheet - -| Name | Usage | Description | -|---------------------------|----------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| SWAP | swap <column1> <column2> | Swaps the column names of two columns. | -| ENCODE | encode <base32 | base64 |hex> <column>|Encodes column values using one of base32, base64, or hex.| -| XPATH | xpath <column> <destination> <xpath> | Extract a single XML element or attribute using XPath. | -| GENERATE-UUID | generate-uuid <column> | Populates a column with a universally unique identifier (UUID) of the record. | -| LOWERCASE | lowercase <column> | Changes the column values to lowercase. | -| WRITE-AS-CSV | write-as-csv <column> | Writes the records files as well-formatted CSV | -| PARSE-AS-PROTOBUF | parse-as-protobuf <column> <schema-id> <record-name> [version] | Parses column as protobuf encoded memory representations. | -| HASH | hash <column> <algorithm> [<encode=true | false>] |Creates a message digest for the column using algorithm, replacing the column value.| -| JSON-PATH | json-path <source> <destination> <json-path-expression> | Parses JSON elements using a DSL (a JSON path expression). | -| MASK-NUMBER | mask-number <column> <pattern> | Masks a column value using the specified masking pattern. | -| TEXT-DISTANCE | text-distance <method> <column1> <column2> <destination> | Calculates a text distance measure between two columns containing string. | -| PARSE-XML-TO-JSON | parse-xml-to-json <column> [<depth>] | Parses a XML document to JSON representation. | -| PARSE-AS-HL7 | parse-as-hl7 <column> [<depth>] | Parses <column> for Health Level 7 Version 2 (HL7 V2) messages; <depth> indicates at which point JSON object enumeration terminates. | -| FIND-AND-REPLACE | find-and-replace <column> <sed-expression> | Finds and replaces text in column values using a sed-format expression. | -| RENAME | rename <old> <new> | Renames an existing column. | -| PARSE-AS-AVRO | parse-as-avro <column> <schema-id> <json | binary> [version] |Parses column as AVRO generic record.| -| FILL-NULL-OR-EMPTY | fill-null-or-empty <column> <fixed-value> | Fills a value of a column with a fixed value if it is either null or empty. | -| SET-TYPE | set-type <column> <type> [<scale> <rounding-mode>] | Converting data type of a column. | -| RTRIM | rtrim <column> | Trimming whitespace from right side of a string. | -| INVOKE-HTTP | invoke-http <url> <column>[,<column>*] <header>[,<header>*] | [EXPERIMENTAL] Invokes an HTTP endpoint, passing columns as a JSON map (potentially slow). | -| COLUMNS-REPLACE | columns-replace <sed-expression> | Modifies column names in bulk using a sed-format expression. | -| SEND-TO-ERROR | send-to-error <condition> | Send records that match condition to the error collector. | -| SET-RECORD-DELIM | set-record-delim <column> <delimiter> [<limit>] | Sets the record delimiter. | -| SET-VARIABLE | set-variable <variable> <expression> | Sets the value for a transient variable for the record being processed. | -| SET-CHARSET | set-charset <column> <charset> | Sets the character set decoding to UTF-8. | -| WRITE-AS-JSON-OBJECT | write-as-json-object <dest-column> [<src-column>[,<src-column>] | Creates a JSON object based on source columns specified. JSON object is written into dest-column. | -| KEEP | keep <column>[,<column>*] | Keeps the specified columns and drops all others. | -| CUT-CHARACTER | cut-character <source> <destination> <type> <range | indexes> |UNIX-like 'cut' directive for splitting text.| -| SPLIT-TO-ROWS | split-to-rows <column> <separator> | Splits a column into multiple rows, copies the rest of the columns. | -| XPATH-ARRAY | xpath-array <column> <destination> <xpath> | Extract XML element or attributes as JSON array using XPath. | -| FAIL | fail <condition> | Fails when the condition is evaluated to true. | -| INCREMENT-VARIABLE | increment-variable <variable> <value> <expression> | Wrangler - A interactive tool for data cleansing and transformation. | -| PARSE-AS-XML | parse-as-xml <column> | Parses a column as XML. | -| PARSE-AS-FIXED-LENGTH | parse-as-fixed-length <column> <width>[,<width>*] [<padding-character>] | Parses fixed-length records using the specified widths and padding-character. | -| CHANGE-COLUMN-CASE | change-column-case lower | upper |Changes the case of column names to either lowercase or uppercase.| -| SPLIT-EMAIL | split-email <column> | Split a email into account and domain. | -| URL-ENCODE | url-encode <column> | URL encode a column value. | -| WRITE-AS-JSON-MAP | write-as-json-map <column> | Writes all record columns as JSON map. | -| MASK-SHUFFLE | mask-shuffle <column> | Masks a column value by shuffling characters while maintaining the same length. | -| DROP | drop <column>[,<column>*] | Drop one or more columns. | -| DECODE | decode <base32 | base64 |hex> <column>|Decodes column values using one of base32, base64, or hex.| -| SPLIT | split <source> <delimiter> <new-column-1> <new-column-2> | [DEPRECATED] Use 'split-to-columns' or 'split-to-rows'. | -| PARSE-AS-SIMPLE-DATE | parse-as-simple-date <column> <format> | Parses a column as date using format. | -| DIFF-DATE | diff-date <column1> <column2> <destination> | Calculates the difference in milliseconds between two Date objects.Positive if <column2> earlier. Must use 'parse-as-date' or 'parse-as-simple-date' first. | -| INDEXSPLIT | indexsplit <source> <start> <end> <destination> | [DEPRECATED] Use the 'split-to-columns' or 'parse-as-fixed-length' directives instead. | -| PARSE-AS-AVRO-FILE | parse-as-avro-file <column> | parse-as-avro-file <column>. | -| FILTER-ROW-IF-TRUE | filter-row-if-true <condition> | [DEPRECATED] Filters rows if condition is evaluated to true. Use 'filter-rows-on' instead. | -| SPLIT-URL | split-url <column> | Split a url into it's components host,protocol,port,etc. | -| FORMAT-DATE | format-date <column> <format> | Formats a column using a date-time format. Use 'parse-as-date` beforehand. | -| QUANTIZE | quantize <source> <destination> <[range1:range2)=value>,[<range1:range2=value>]* | Quanitize the range of numbers into label values. | -| PARSE-AS-EXCEL | parse-as-excel <column> [<sheet number | sheet name>] |Parses column as Excel file.| -| PARSE-AS-DATE | parse-as-date <column> [<timezone>] | Parses column values as dates using natural language processing and automatically identifying the format (expensive in terms of time consumed). | -| TABLE-LOOKUP | table-lookup <column> <table> | Uses the given column as a key to perform a lookup into the specified table. | -| FILTER-ROWS-ON | filter-rows-on empty-or-null-columns <column>[,<column>*] | Filters row that have empty or null columns. | -| TRIM | trim <column> | Trimming whitespace from both sides of a string. | -| URL-DECODE | url-decode <column> | URL decode a column value. | -| FLATTEN | flatten <column>[,<column>*] | Separates array elements of one or more columns into indvidual records, copying the other columns. | -| UPPERCASE | uppercase <column> | Changes the column values to uppercase. | -| CATALOG-LOOKUP | catalog-lookup <catalog> <column> | Looks-up values from pre-loaded (static) catalogs. | -| PARSE-AS-LOG | parse-as-log <column> <format> | Parses Apache HTTPD and NGINX logs. | -| LTRIM | ltrim <column> | Trimming whitespace from left side of a string. | -| EXTRACT-REGEX-GROUPS | extract-regex-groups <column> <regex-with-groups> | Extracts data from a regex group into its own column. | -| PARSE-AS-CSV | parse-as-csv <column> <delimiter> [<header=true | false>] |Parses a column as CSV (comma-separated values).| -| FILTER-ROW-IF-MATCHED | filter-row-if-matched <column> <regex> | [DEPRECATED] Filters rows if the regex is matched. Use 'filter-rows-on' instead. | -| PARSE-AS-JSON | parse-as-json <column> [<depth>] | Parses a column as JSON. | -| SET COLUMN | set column <column> <jexl-expression> | Sets a column by evaluating a JEXL expression. | -| STEMMING | stemming <column> | Apply Porter Stemming on the column value. | -| COPY | copy <source> <destination> [<force=true | false>] |Copies values from a source column into a destination column.| -| SET-COLUMN | set-column <column> <expression> | Sets a column the result of expression execution. | -| SPLIT-TO-COLUMNS | split-to-columns <column> <regex> | Splits a column into one or more columns around matches of the specified regular expression. | -| CLEANSE-COLUMN-NAME | cleanse-column-names | Sanatizes column names: trims, lowercases, and replaces all but [A-Z][a-z][0-9]_.with an underscore '_'. | -| SET COLUMNS | set columns <columm>[,<column>*] | Sets the name of columns, in the order they are specified. | -| TITLECASE | titlecase <column> | Changes the column values to title case. | -| MERGE | merge <column1> <column2> <new-column> <separator> | Merges values from two columns using a separator into a new column. | -| TEXT-METRIC | text-metric <method> <column1> <column2> <destination> | Calculates the metric for comparing two string values. | -| SET FORMAT | set format csv <delimiter> <skip empty lines> | [DEPRECATED] Parses the predefined column as CSV. Use 'parse-as-csv' instead. | -| FORMAT-UNIX-TIMESTAMP | format-unix-timestamp <column> <format> | Formats a UNIX timestamp using the specified format | -| FILTER-ROW-IF-NOT-MATCHED | filter-row-if-not-matched <column> <regex> | Filters rows if the regex does not match | -| FILTER-ROW-IF-FALSE | filter-row-if-false <condition> | Filters rows if the condition evaluates to false | diff --git a/wrangler-docs/concepts.md b/wrangler-docs/concepts.md deleted file mode 100644 index 470c5d15c..000000000 --- a/wrangler-docs/concepts.md +++ /dev/null @@ -1,61 +0,0 @@ -# DataPrep Concepts - -This implementation of Data Prep uses the concepts of _Record_, _Column_, _Directive_, -_Step_, and _Pipeline_. - -### Recipe - -A *Recipe* is a collection of *Directive*. It consists of one or more *Directive*. - -### Directive - -A *Directive* is a single data manipulation instruction, specified to either transform, -filter, or pivot a single record into zero or more records. A directive can generate one -or more *steps* to be executed by a pipeline. - -### Row - -A *Row* is a collection of field names and field values. - -### Column - -A *Column* is a data value of any of the supported Java types, one for each record. - -### Pipeline - -A *Pipeline* is a collection of steps to be applied on a record. The record(s) outputed -from a step are passed to the next step in the pipeline. - -## Notations - -### Directives - -A directive can be represented in text in this format: - -``` - ... -``` - -### Row - -A row in this documentation will be shown as a JSON object with an object key -representing the column names and a value shown by the plain representation of the -the data, without any mention of types. - -For example: - -``` -{ - "id": 1, - "fname": "root", - "lname": "joltie", - "address": { - "housenumber": "678", - "street": "Mars Street", - "city": "Marcity", - "state": "Maregon", - "country": "Mari" - }, - "gender": "M" -} -``` diff --git a/wrangler-docs/custom-directive.md b/wrangler-docs/custom-directive.md deleted file mode 100644 index d2daba1c6..000000000 --- a/wrangler-docs/custom-directive.md +++ /dev/null @@ -1,318 +0,0 @@ -# Introduction - -CDAP provides extensive support for user defined directives (UDDs) as a way to specify custom processing for dataprep. CDAP UDDs can currently be implemented in Java. - -The most extensive support is provided for Java functions. Java functions are also more efficient because they are implemented in the same language as CDAP and DataPrep and because additional interfaces and integrations with other CDAP subsystems are supported. - -User Defined Directives, also known as UDD, allow you to create custom functions to transform records within CDAP DataPrep or a.k.a Wrangler. CDAP comes with a comprehensive library of functions. There are however some omissions, and some specific cases for which UDDs are the solution. - -UDDs, similar to User-defined Functions (UDFs) have a long history of usefulness in SQL-derived languages and other data processing and query systems. While the framework can be rich in their expressiveness, there's just no way they can anticipate all the things a developer wants to do. Thus, the custom UDF has become commonplace in our data manipulation toolbox. In order to support customization or extension, CDAP now has the ability to build your own functions for manipulating data through UDDs. - -Developing CDAP DataPrep UDDs by no means rocket science, and is an effective way of solving problems that could either be downright impossible, or does not meet your requirements or very awkward to solve. - -**U**ser **D**efined **D**irective (UDD) or Custom Directives are easier and simpler way for users to build and integrate custom directives with wrangler. UDD framework allow users to develop, deploy and use data processing directives -within the data preparation tool. - -Building a custom directive involves implementing four simple methods : - * **D** -- `define()` -- Define how the framework should interpret the arguments. - * **I** -- `initialize()` -- Invoked by the framework to initialize the custom directive with arguments parsed. - * **E** -- `execute()` -- Execute and apply your business logic for transforming the `Row`. - * **D** -- `destroy()` -- Invoke by the framework to destroy any resources held by the directive. - -## Steps to Build a directive - - * Clone the [example repository from github](https://github.com/hydrator/example-directive) - - ```javascript - git clone git@github.com:hydrator/example-directive - ``` - - * Implementing three interfaces `define()`, `initialize()` and `execute()`. - * Build a JAR (`mvn clean package`) - * Deploy the JAR as a plugin into CDAP through UI or CLI or REST API - * Use the plugin as follows: - -``` - [1] parse-as-csv :body ',' true - [2] #pragma load-directives text-reverse,text-sanitization; - [3] text-reverse :text - [4] text-sanitization :description -``` - -More description of the above lines. - - * `[2]` Dynamically loads the two UDDs as CDAP Plugins. - * `[3]` Uses the directive. - -## Developing UDD - -There is one simple interface for developing your customized directive. The simple interface `io.cdap.wrangler.api.Directive` can be used for developing user defined directive. - -### Simple API - -Building a UDD with the simpler UDD API involves nothing more than writing a class with four function (evaluate) and few annotations. Here is an example: - -``` -@Plugin(type = UDD.Type) -@Name(SimpleUDD.NAME) -@Categories(categories = {"example", "simple"}) -@Description("My first simple user defined directive") -public SimpleUDD implements Directive { - public static final String NAME = "my-simple-udd"; - - public UsageDefinition define() { - ... - } - - public void initialize(Arguments args) throws DirectiveParseException { - ... - } - - public List execute(List rows, ExecutorContext context) throws RecipeException, ErrorRowException { - ... - } - - public void destroy() { - ... - } -} -``` - -Following is detailed explaination for the above code. - - * `@Plugin` annotation tells the framework the type of plugin this class represents. - * `@Name` annotation provides the name of the plugin. For this type, the directive name and plugin name are the same. - * `@Description` annotation provides a short description of the directive. - * `@Categories` annotation provides the category this directive belongs to. - * `UsageDefition define() { }` Defines the arguments that are expected by the directive. - * `void initialize(Arguments args) { }` Invoked before configuring a directive with arguments parsed by the framework based on the `define()` methods `UsageDefintion`. - * `execute(...) { }` Every `Row` from previous directive execution is passed to this plugin to execute. - -### Testing a simple UDD - -Because the UDD is simple three functions class, you can test it with regular testing tools, like JUnit. - -``` -public class SimpleUDDTest { - - @Test - public void testSimpleUDD() throws Exception { - TestRecipe recipe = new TestRecipe(); - recipe("parse-as-csv :body ',';"); - recipe("drop :body;"); - recipe("rename :body_1 :simpledata;"); - recipe("!my-simple-udd ..."); - - TestRows rows = new TestRows(); - rows.add(new Row("body", "root,joltie,mars avenue")); - RecipePipeline pipeline = TestingRig.pipeline(RowHash.class, recipe); - List actual = pipeline.execute(rows.toList()); - } -} -``` - -### Building a UDD Plugin - -There is nothing much to be done here, this example repository includes a maven POM file that is pre-configured for building the directive JAR. All that a developer does it build the project using the following command. - -``` - mvn clean package -``` - -This would generate two files - - * Artifact - `my-simple-udd-1.0-SNAPSHOT.jar` - * Artifact Configuration `my-simple-udd-1.0-SNAPSHOT.json` - -### Deploying Plugin - -There are multiple ways the custom directive can be deployed to CDAP. The two popular ways are through using CDAP CLI (command line interface) and CDAP UI. - -#### CDAP CLI - -In order to deploy the directive through CLI. Start the CDAP CLI and use the `load artifact` command to load the plugin artifact into CDAP. - -``` -$ $CDAP_HOME/bin/cdap cli -cdap > load artifact my-simple-udd-1.0-SNAPSHOT.jar config-file my-simple-udd-1.0-SNAPSHOT.json -``` - -#### CDAP UI -![alt text](https://github.com/hydrator/example-directive/blob/develop/docs/directive-plugin.gif "Logo Title Text 1") - -## Example - -I am going to walk through the creation of a user defined directive(udd) called `text-reverse` that takes one argument: Column Name -- it's the name of the column in a `Row` that needs to be reversed. The resulting row will have the Column Name specified in the input have reversed string of characters. - -``` - text-reverse :address - text-reverse :id -``` - -Here is the implementation of the above UDD. - -``` -@Plugin(type = UDD.Type) -@Name(TextReverse.NAME) -@Categories(categories = {"text-manipulation"}) -@Description("Reverses the column value") -public final class TextReverse implements UDD { - public static final String NAME = "text-reverse"; - private String column; - - public UsageDefinition define() { - UsageDefinition.Builder builder = UsageDefinition.builder(NAME); - builder.define("column", TokenType.COLUMN_NAME); - return builder.build(); - } - - public void initialize(Arguments args) throws DirectiveParseException { - this.column = ((ColumnName) args.value("column").value(); - } - - public List execute(List rows, ExecutorContext context) throws RecipeException, ErrorRowException { - for(Row row : rows) { - int idx = row.find(column); - if (idx != -1) { - Object object = row.getValue(idx); - if (object instanceof String) { - String value = (String) object; - row.setValue(idx, new StringBuffer(value).reverse().toString()); - } - } - } - return rows; - } - - public void destroy() { - // no-op - } -} -``` - -### Code Walk Through - -#### Annontations - -Following annotations are required for the plugin. If any of these are missing, the plugin or the directive will not be loaded. - -* `@Plugin` defines the type of plugin it is. For all UDDs it's set to `UDD.Type`. -* `@Name` defines the name of the plugin and as well as the directive name. -* `@Categories` defines one or more categories the directive belongs to. -* `@Description` provides a short description for the plugin and as well as for the directive. - -#### Call Pattern - -The call pattern of UDD is the following : - -* **DEFINE** : During configure time either in the CDAP Pipeline Transform or Data Prep Service, the `define()` method is invoked only once to retrieve the information of the usage. The usage defines the specification of the arguments that this directive is going to accept. In our example of `text-reverse`, the directive accepts only one argument and that is of type `TokenType.COLUMN_NAME`. -* **INITIALIZE** : During the initialization just before pumping in `Row`s through the directive, the `initialize()` method is invoked. This method is passed the arguments that are parsed by the system. It also provides the apportunity for the UDD writer to validate and throw exception if the value is not as expected. -* **EXECUTE** : Once the pipeline has been setup, the `Row` is passed into the `execute()` method to transform. - -### Testing - -Following is the JUnit class that couldn't be any simpler. - -``` - @Test - public void testBasicReverse() throws Exception { - TestRecipe recipe = new TestRecipe(); - recipe.add("parse-as-csv :body ',';"); - recipe.add("set-headers :a,:b,:c;"); - recipe.add("text-reverse :b"); - - TestRows rows = new TestRows(); - rows.add(new Row("body", "root,joltie,mars avenue")); - rows.add(new Row("body", "joltie,root,venus blvd")); - - RecipePipeline pipeline = TestingRig.pipeline(TextReverse.class, recipe); - List actual = pipeline.execute(rows.toList()); - - Assert.assertEquals(2, actual.size()); - Assert.assertEquals("eitloj", actual.get(0).getValue("b")); - Assert.assertEquals("toor", actual.get(1).getValue("b")); - } -``` - -## Migrating from Old Syntax to New Syntax - -The recipe containing old syntax of invoking directives will automagically get - transformed into new directives syntax. But, any new directives or custom directives - have to specify and use new syntax. - -### What's different in new syntax - -There are some major difference in new syntax for invoking directives, all - are listed below. - - * Semicolon(`;`) denotes a terminator for a single directive. E.g. Old : `parse-as-csv body , true` New : `parse-as-csv :body ',' true ;` - * Column names are represented with a prefixed-colon. E.g. Old : `body`, New : `:body` - * Text arguments are represented within quotes -- single or double. E.g. Old: `;`, New : `';'` - * Expressions or conditions are now enclosed with a construct `exp: { condition or expression }` - * Optional arguments are truly optional now. - -## Macros and Wrangler Transform - -Macros are be freely specified. One caveat while specifying macros is that the `#pragma load-directives` cannot be part of the macro. They should be specified in the plugin configuration itself. The reason is that we have to register the user defined directives prior to initializing and executing the transform. Macros are dereferenced only at the initialization and execution state. A configuration could look something like this. - -``` -#pragma load-directives my-udd-1, my-udd2; -${macroed_recipe} -#pragma load-directives my-udd3 -${another_recipe} -``` - -## Lifecycle of Directive Methods - -As you seen by now that the `Directive` interface exposes three methods `define()`, `initialize()` and `execute()`. These methods are invoked by the framework at different stages of processing. They also differ by different context in which they run like in `Transform` or in `Service`. So, let's talk about how and when they are called in different context. - -### Transform Context - -A Transform is a CDAP plugin that is part of the pipeline configured and UDD or Custom Directives are embedded within such a transform. Each transform implements a few interfaces like `configurePipeline()`, `initialize()` and `transform()`. - -* When a pipeline is deployed to CDAP, during the deployment process, the `configurePipeline()` method is invoked by the CDAP Framework. In this method the plugin developer can validate the configurations, schema and such. In the case of UDD, the recipe containing the UDD is compiled and all the loadable directives are extracted. At this point none of the methods of UDD are invoked. Only the UDDs defined in the recipe are registered to be used in the pipeline deployed. -* When the pipeline is started, the plugins `initialize()` method is invoked. During this stage of the plugin, all the UDDs are loaded and initialized. At this point all the directives (user and system) are invoked -- at this point the `configure()` is called to get the definition of arguments for each UDD. Each directive within the recipe is parsed and then the respective UDD `initialize()` is invoked with the arguments parsed. These two methods are invoked only once before the start. If there are multiple instances of a directive being used within the recipe, this method is called the same number of times as the instance of directive in the recipe. -* When the pipeline starts processing, each `StructuredRecord` into the transform invokes the UDD's `execute()` method. - -## Precedence of directive loading - -Directives are loaded into the directive registry from the system and also from the user artifacts. So, now there are multiple cases where there might be conflicts, this section will describe how those conflicts are handled and what the users should expect in terms of behavior of the system when there are conflicts. Following are the scenarios when there could be conflict - -* SYSTEM has a directive `x` pre-loaded, but a USER defines the same directive `x`. -* User 1 has a USER directive `y`, and User 2 also has a different version or a completely different directive, but has the same name `y`. -* SYSTEM has two directives with the same name `z`. -* USER directive `k` has two different artifacts. - -## Field-level Lineage - -Field-level lineage allows users to see which directives were applied to a specific column of data in a given timeframe. They can see how a column of data was generated and which other columns were produced from this column as well as how its values were manipulated. - -### Labels - -Every column involved in a directive must have one and only one associated label. These labels are: `{READ, ADD, DROP, RENAME, MODIFY}` -* **READ**: When the values of a column impact one or more other columns it is labeled as a READ column. - * Ex1. `copy `. In this case since the values of the entries of the source column are read in order to produce the destination column, the source column should be labeled as READ. - * Ex2. `filter-row-if-matched `. In this case since the values of the entries of the supplied column are read in order to filter the rows in the dataset, column should be labeled as READ. This is the case even though the supplied column is modified since its values are read. -* **ADD**: When a column is generated by the directive, this column is labeled as an ADD column. - * Ex1. `copy `. In this case since the destination is a new column that is generated by this directive, it should be labeled as ADD. -* **DROP**: When a column is dropped as a result of the directive, this column is labeled as a DROP column. - * Ex1. `drop [,*]`. In this case since all the columns listed are dropped by this directive, all the listed columns should be labled as DROP columns. -* **RENAME**: When the name of a column is changed to another name, both the old and new name are labeled as RENAME columns. Note that neither column is labeled as ADD or DROP since no column is added or dropped, but instead a column's name is being replaced in place. - * Ex1. `rename `. In this case since the name old is being replaced with the name new, both old and new should be labeled as RENAME. This is because one column's name is being changed/renamed from old to new. - * EX2. `swap `. In this case since both the name column1 and the name column2 are simply being replaced with the other, both column1 and column2 should be labeled as RENAME. No records are being added or lost by this directive. -* **MODIFY**: When the values of a column's entries are potentially changed, but not read and impacting other columns, it should be labeled as a MODIFY column. - * Ex1. `lowercase `. In this case since the column doesn't impact any other column, and its values are potentially modified it should be labeled as MODIFY. -* Bonus: Rather then having to label every column if the columns are all READ, ADD, **or** MODIFY columns, the following can be used to replace the column name: `{"all columns", "all columns minus _ _ _ _", "all columns formatted %s_%d"}`. The first represents a case where all columns present in the dataset at the end of the directive can all be labeled the same. The second represents the case where all columns except for a space separated list of columns present in the dataset at the end of the directive can all be labeled the same. The third represents the case where all columns present at the end of the directive which follow the format string, supporting %s and %d, can all be labeled the same. Again this only works for READ, ADD, **or** MODIFY. - * Ex1. `split-to-columns `. In this case since all the newly produced columns will have names formatted `column_%d`, `all columns formatted column_%d` can be labeled ADD, rather than each individual new column. - * Ex2. `parse-as-csv `. In this case since all the columns present at the end of this directive will have been produced by this directive except for column itself, `all columns minus column` can be labeled ADD, rather than each individual new column. - * Ex3. Custom directive: `lowercase-all`. This custom directive changes all the record values to lowercase. In this case all columns present at the end of this directive will have been modified by this directive, so `all columns` can be labeled MODIFY, rather than each individual column. - - - -## Related documentation - - * Information about Grammar [here](grammar/grammar-info.md) - * Custom Directive Implementation Internals [here](udd-internal.md) - * Migrating directives from version 1.0 to version 2.0 [here](directive-migration.md) - * Various `TokenType` supported by system [here](../api/src/main/java/io/cdap/wrangler/api/parser/TokenType.java) - diff --git a/wrangler-docs/directive-migration.md b/wrangler-docs/directive-migration.md deleted file mode 100644 index f3db00dd8..000000000 --- a/wrangler-docs/directive-migration.md +++ /dev/null @@ -1,89 +0,0 @@ -# Directive Migration - -Following is the list of all the directives mapping from version 1.0 to version 2.0. -```Rewriter``` allows you to convert from old format to new. If the recipe doesn't include ```#pragma version 2.0``` -the recipe is treated as version 1.0 and the rewriter is invoked, else new parser is used. - -| Name | Directive - Version 1.0 | Directive - Version 2.0 | -| -----------------------| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| SET | set column salary salary > 100 ? 100 : salary | set-column :salary exp:{salary > 100 ? 100 : salary}; | -| SET | set columns fname,lname,address,city,state,country,zipcode | set-columns :fname,:lname,:address,:city,:state,:country,:zipcode; | -| RENAME | rename body_fname fname | rename :body_fname :fname; | -| SET-TYPE | set-type value int | set-type :value int; | -| DROP | drop fname,lname,address,zipcode,city | drop :fname,:lname,:address,:zipcode,:city; | -| MERGE | merge fname lname name , | merge :fname :lname :name ','; | -| UPPERCASE | uppercase name | uppercase :name; | -| LOWERCASE | lowercase name | lowercase :name; | -| TITLECASE | titlecase name | titlecase :name; | -| INDEXSPLIT | indexsplit department 1 10 zone | indexsplit :department 1 10 :zone; | -| SPLIT | split name , fname lname | split :name ',' :fname :lname; | -| FILTER-ROW-IF-MATCHED | filter-row-if-matched address .*? | filter-row-if-matched :address '.*?'; | -| FILTER-ROW-IF-NOT-MATCHED | filter-row-if-not-matched address .*? | filter-row-if-not-matched :address '.*?'; | -| FILTER-ROW-IF-TRUE | filter-row-if-true age < 10.0 | filter-row-if-true exp:{age < 10.0}; | -| FILTER-ROW-IF-FALSE | filter-row-if-false age < 10.0 && gender == 'm' | filter-row-if-false exp:{age < 10.0 && gender == 'm'}; | -| SET-VARIABLE | set-variable test count > 10 | set-variable test exp:{count > 10}; | -| INCREMENT-VARIABLE | increment-variable test 1 count > 10 | increment-variable test 1 exp:{count > 10}; | -| MASK-NUMBER | mask-number ssn xxx-xx-#### | mask-number :ssn 'xxx-xx-####'; | -| MASK-SHUFFLE | mask-shuffle address | mask-shuffle :address; | -| FORMAT-DATE | format-date startdate yyyy-MM-dd | format-date :startdate 'yyyy-MM-dd'; | -| FORMAT-UNIX-TIMESTAMP | format-unix-timestamp timestamp yyyy/MM/dd | format-unix-timestamp :timestamp 'yyyy/MM/dd'; | -| QUANTIZE | quantize col1 col2 1:2=test,3:4=test1 | quantize :col1 :col2 1:2=test,3:4=test1; | -| FIND-AND-REPLACE | find-and-replace name s/test//g | find-and-replace :name 's/test//g'; | -| PARSE-AS-CSV | parse-as-csv body , true | parse-as-csv :body ',' true; | -| PARSE-AS-JSON | parse-as-json body 1 | parse-as-json :body 1; | -| PARSE-AS-PROTOBUF | parse-as-protobuf body test event 1.0 | parse-as-protobuf :body test 'event' '1.0'; | -| JSON-PATH | json-path source target a/b/c | json-path :source :target 'a/b/c'; | -| SET-CHARSET | set-charset body utf-8 | set-charset :body utf-8; | -| INVOKE-HTTP | invoke-http http://a.b/json fname,lname,address a=b,x=y | invoke-http 'http://a.b/json' :fname,:lname,:address 'a=b,x=y'; | -| SET-RECORD-DELIM | set-record-delim body , 10 | set-record-delim :body ',' 10; | -| PARSE-AS-FIXED-LENGTH | parse-as-fixed-length body 3,4,5,6,7,8 # | parse-as-fixed-length :body 3,4,5,6,7,8 '#'; | -| SPLIT-TO-ROWS | split-to-rows body , | split-to-rows :body ','; | -| SPLIT-TO-COLUMNS | split-to-columns body , | split-to-columns :body ','; | -| PARSE-XML-TO-JSON | parse-xml-to-json body 1 | parse-xml-to-json :body 1; | -| PARSE-AS-XML | parse-as-xml xml | parse-as-xml :xml; | -| PARSE-AS-EXCEL | parse-as-excel body 0 | parse-as-excel :body '0'; | -| XPATH | xpath name fname /items/item/first_name | xpath :name :fname '/items/item/first_name'; | -| XPATH-ARRAY | xpath-array name fname /items/item/first_name | xpath-array :name :fname '/items/item/first_name'; | -| FLATTEN | flatten a,b,c,d | flatten :a,:b,:c,:d; | -| COPY | copy source target true | copy :source :target true; | -| FILL-NULL-OR-EMPTY | fill-null-or-empty value , | fill-null-or-empty :value ','; | -| CUT-CHARACTER | cut-character phone areacode 1-3 | cut-character :phone :areacode '1-3'; | -| GENERATE-UUID | generate-uuid ssn | generate-uuid :ssn; | -| URL-ENCODE | url-encode url | url-encode :url; | -| URL-DECODE | url-decode url | url-decode :url; | -| PARSE-AS-LOG | parse-as-log body %m-%y-%{HOSTNAME} | parse-as-log :body '%m-%y-%{HOSTNAME}'; | -| PARSE-AS-DATE | parse-as-date date UTC | parse-as-date :date 'UTC'; | -| PARSE-AS-SIMPLE-DATE | parse-as-simple-date date yyyy-MM-dd | parse-as-simple-date :date 'yyyy-MM-dd'; | -| DIFF-DATE | diff-date date1 date2 diffdate | diff-date :date1 :date2 :diffdate; | -| KEEP | keep fname,lname,address,city,zipcode | keep :fname,:lname,:address,:city,:zipcode; | -| PARSE-AS-HL7 | parse-as-hl7 body 1 | parse-as-hl7 :body 1; | -| SPLIT-EMAIL | split-email email | split-email :email; | -| SWAP | swap col1 col2 | swap :col1 :col2; | -| HASH | hash col SHA1 true | hash :col 'SHA1' true; | -| WRITE-AS-JSON-MAP | write-as-json-map output | write-as-json-map :output; | -| WRITE-AS-JSON-OBJECT | write-as-json-object output fname,lname,address | write-as-json-object :output :fname,:lname,:address; | -| WRITE-AS-CSV | write-as-csv output | write-as-csv :output; | -| FILTER-ROWS-ON | filter-rows-on condition-false output < 10 | filter-rows-on condition-false exp:{output < 10}; | -| FILTER-ROWS-ON | filter-rows-on condition-true output < 10 | filter-rows-on condition-true exp:{output < 10}; | -| FILTER-ROWS-ON | filter-rows-on empty-or-null-columns fname,lname | filter-rows-on empty-or-null-columns :fname,:lname; | -| FILTER-ROWS-ON | filter-rows-on regex-match col test* | filter-rows-on regex-match :col 'test*'; | -| FILTER-ROWS-ON | filter-rows-on regex-not-match col test* | filter-rows-on regex-not-match :col 'test*'; | -| PARSE-AS-AVRO-FILE | parse-as-avro-file body | parse-as-avro-file :body; | -| SEND-TO-ERROR | send-to-error Fare < 8.06 | send-to-error exp:{Fare < 8.06}; | -| FAIL | fail Fare < 8.06 | fail exp:{Fare < 8.06}; | -| TEXT-DISTANCE | text-distance abc col1 col2 output | text-distance abc :col1 :col2 :output; | -| TEXT-METRIC | text-metric abc col1 col2 output | text-metric abc :col1 :col2 :output; | -| CATALOG-LOOKUP | catalog-lookup ICD-9 value | catalog-lookup 'ICD-9' :value; | -| TABLE-LOOKUP | table-lookup value mylookup-table | table-lookup :value 'mylookup-table'; | -| STEMMING | stemming text | stemming :text; | -| COLUMNS-REPLACE | columns-replace s/body_//g | columns-replace 's/body_//g'; | -| EXTRACT-REGEX-GROUPS | extract-regex-groups body s/body_//g | extract-regex-groups :body 's/body_//g'; | -| SPLIT-URL | split-url url | split-url :url; | -| CLEANSE-COLUMN-NAMES | cleanse-column-names | cleanse-column-names; | -| CHANGE-COLUMN-CASE | change-column-case upper | change-column-case upper; | -| SET-COLUMN | set-column value output > 10 ? 'test' : 'non-test' | set-column :value exp:{output > 10 ? 'test' : 'non-test'}; | -| ENCODE | encode base64 binary | encode base64 :binary; | -| DECODE | decode base64 binary | decode base64 :binary; | -| TRIM | trim name | trim :name; | -| LTRIM | ltrim name | ltrim :name; | -| RTRIM | rtrim name | rtrim :name; | diff --git a/wrangler-docs/directives/catalog-lookup.md b/wrangler-docs/directives/catalog-lookup.md deleted file mode 100644 index 75ec03805..000000000 --- a/wrangler-docs/directives/catalog-lookup.md +++ /dev/null @@ -1,49 +0,0 @@ -# Catalog Lookup - -The CATALOG-LOOKUP directive provides lookups into catalogs that are pre-loaded -(static). Currently, the directive supports looking up health care ICD-9 and -ICD-10-{2016,2017} codes. - - -## Syntax -``` -catalog-lookup -``` - -The `` specifies the dictionary which should be used for looking up the value in -the ``. - -These catalogs are currently supported: - -* ICD-9 -* ICD-10-2016 -* ICD-10-2017 - - -## Usage Notes - -Using this record as an example: a record containing a single field (`code`) that requires -looking up: -``` -{ - "code": "Y36521S" -} -``` - -Applying the CATALOG-LOOKUP directive with the ICD-10-2016 Catalog: -``` -catalog-lookup ICD-10-2016 code -``` - -would result in the record having an additional column `code__description` -containing the result of the lookup. In cases where there is no matching code, a `null` is -stored instead. For this example, in `code_icd_10_2016_description`: -``` -{ - "code": "Y36521S", - "code_icd_10_2016_description": "War operations involving indirect blast effect of nuclear weapon, civilian, sequela" -} -``` - -In cases where the lookup is null or empty for a record, a `null` value is added to the -`column` field. diff --git a/wrangler-docs/directives/change-column-case.md b/wrangler-docs/directives/change-column-case.md deleted file mode 100644 index 078d7a60e..000000000 --- a/wrangler-docs/directives/change-column-case.md +++ /dev/null @@ -1,57 +0,0 @@ -# Change Column Case - -The CHANGE-COLUMN-CASE directive changes column names to either lowercase or uppercase. - - -## Syntax -``` -change-column-case lower|upper -``` - -If the case specified is either incorrect or missing, it defaults to lowercase. - - -## Examples - -Using this record as an example: -``` -{ - "Id": 1, - "Gender": "male", - "FNAME": "Root", - "lname": "JOLTIE", - "Address": "67 MARS AVE, MARSCIty, Marsville, Mars" -} -``` - -Applying this directive: -``` -change-column-case lower -``` - -would result in this record: -``` -{ - "id": 1, - "gender": "MALE", - "fname": "Root", - "lname": "Joltie", - "address": "67 mars ave, marscity, marsville, mars" -} -``` - -Applying this directive: -``` -change-column-case upper -``` - -would result in this record: -``` -{ - "ID": 1, - "GENDER": "MALE", - "FNAME": "Root", - "LNAME": "Joltie", - "ADDRESS": "67 mars ave, marscity, marsville, mars" -} -``` diff --git a/wrangler-docs/directives/changing-case.md b/wrangler-docs/directives/changing-case.md deleted file mode 100644 index 03a3142e8..000000000 --- a/wrangler-docs/directives/changing-case.md +++ /dev/null @@ -1,47 +0,0 @@ -# Changing Case - -The UPPERCASE, LOWERCASE, and TITLECASE directives change the case of column -values they are applied to. - - -## Syntax -``` -lowercase -uppercase -titlecase -``` - -The directive performs an in-place change of case. - - -## Example - -Using this record as an example: -``` -{ - "id": 1, - "gender": "male", - "fname": "Root", - "lname": "JOLTIE", - "address": "67 MARS AVE, MARSCIty, Marsville, Mars" -} -``` - -Applying these directives -``` -uppercase gender -titlecase fname -titlecase lname -lowercase address -``` - -would result in this record: -``` -{ - "id": 1, - "gender": "MALE", - "fname": "Root", - "lname": "Joltie", - "address": "67 mars ave, marscity, marsville, mars" -} -``` diff --git a/wrangler-docs/directives/cleanse-column-names.md b/wrangler-docs/directives/cleanse-column-names.md deleted file mode 100644 index e782677a0..000000000 --- a/wrangler-docs/directives/cleanse-column-names.md +++ /dev/null @@ -1,43 +0,0 @@ -# Cleanse Column Names - -The CLEANSE-COLUMN-NAMES directive sanatizes column names, following these rules: - -* Trim leading and trailing spaces -* Lowercases the column name -* Replaces any character that are not one of `[A-Z][a-z][0-9]` or `_` with an underscore (`_`) - - -## Syntax -``` -cleanse-column-names -``` - - -## Example - -Using this record as an example: -``` -{ - "COL1": 1, - "col:2": 2, - "Col3": 3, - "COLUMN4": 4, - "col!5": 5 -} -``` - -Applying this directive: -``` -cleanse-column-names -``` - -would result in this record: -``` -{ - "col1": 1, - "col_2": 2, - "col3": 3, - "column4": 4, - "col_5": 5 -} -``` diff --git a/wrangler-docs/directives/columns-replace.md b/wrangler-docs/directives/columns-replace.md deleted file mode 100644 index d56949509..000000000 --- a/wrangler-docs/directives/columns-replace.md +++ /dev/null @@ -1,50 +0,0 @@ -# Columns Replace - -The COLUMNS-REPLACE directive alters column names in bulk. - - -## Syntax -``` -columns-replace -``` - -The `` specifies the [sed -expression](https://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html) -syntax, such as `s/data_//g`. - - -## Example - -Using this record as an example, these columns all have `data_` as a prefix in their -column names: -``` -{ - "data_name": "root", - "data_first_name": "mars", - "data_last_name": "joltie", - "data_data_id": 1, - "data_address": "150 Mars Ave, Mars City, Mars, 8899898", - "mars_ssn": "MARS-456282" -} -``` - -Applying this directive: -``` -columns-replace s/^data_//g -``` - -would result in the record having any column names that were prefixed with `data_` -replaced with an empty string: -``` -{ - "name": "root", - "first_name": "mars", - "last_name": "joltie", - "data_id": 1, - "address": "150 Mars Ave, Mars City, Mars, 8899898", - "mars_ssn": "MARS-456282" -} -``` - -**Note:** The field value is untouched during this directive. This operates only on the -column names. diff --git a/wrangler-docs/directives/copy.md b/wrangler-docs/directives/copy.md deleted file mode 100644 index 846144fa7..000000000 --- a/wrangler-docs/directives/copy.md +++ /dev/null @@ -1,66 +0,0 @@ -# Copy - -The COPY directive copies values from a source column into a destination column. - - -## Syntax -``` -copy [] -``` - -The COPY directive copies data from the `` column into the `` column. - -If the `` column already exists, the `` option can be set to `true` to -override any existing data in that column. By default, the `` option is set to -`false`. - - -## Usage Notes - -The COPY directive will copy data from `` if and only if `` column exists. -If the `` doesn't exist in the record, the execution will fail with an error. - -Copying makes a deep copy of the source into the destination. The type of data from the -source in the destination column is maintained as-is. - - -## Example - -Using this record as an example: -``` -{ - "id": 1, - "timestamp": 1234434343, - "measurement": 10.45, - "isvalid": true, - "message": { - "code": 132, - "text": "Failure in the temperature sensor" - } -} -``` - -Applying these directives: -``` -copy timestamp datetime -copy message status -``` - -would result in this record: -``` -{ - "id": 1, - "timestamp": 1234434343, - "datetime": 1234434343, - "measurement": 10.45, - "isvalid": true, - "message": { - "code": 132, - "text": "Failure in the temperature sensor" - }, - "status": { - "code": 132, - "text": "Failure in the temperature sensor" - } -} -``` diff --git a/wrangler-docs/directives/current-datetime.md b/wrangler-docs/directives/current-datetime.md deleted file mode 100644 index 93ee590b7..000000000 --- a/wrangler-docs/directives/current-datetime.md +++ /dev/null @@ -1,21 +0,0 @@ -# Current Datetime - -The CURRENT-DATETIME directive generates the current datetime using the given zone or UTC by default. - - -## Syntax -``` -current-datetime 'timezone' -``` - - -## Usage Notes - -The CURRENT-DATETIME directive generates the current datetime using the given zone or UTC by default. -Zone can be region based string like America/Los_Angeles, Europe/Paris , - simple offsets like +08:00 , or prefix and offset like UTC+01:00, GMT+08:00, UT+04:00 etc - -## Examples -current-datetime :col1 'UTC-08:00' - -current-datetime :col2 'America/Los_Angeles' \ No newline at end of file diff --git a/wrangler-docs/directives/cut-character.md b/wrangler-docs/directives/cut-character.md deleted file mode 100644 index 03464a903..000000000 --- a/wrangler-docs/directives/cut-character.md +++ /dev/null @@ -1,58 +0,0 @@ -# Cut Character - -The CUT-CHARACTER directive selects parts of a string value, accepting standard [cut -options](http://man7.org/linux/man-pages/man1/cut.1.html). - - -## Syntax -``` -cut-character -``` - -The ` ` are the standard [cut options](http://man7.org/linux/man-pages/man1/cut.1.html). - - -## Usage Notes - -The standard options for the CUT-CHARACTER directive include a list of one or more ranges of characters. -Each range is prefaced with a type (`-b` byte, `-c` character, `-f` field) and written as: - -* `N ` The N'th byte, character, or field, counting from 1 -* `N- ` From the N'th byte, character, or field, to the end of the line -* `N-M` From the N'th to M'th (included) byte, character, or field -* `-M ` From the first to M'th (included) byte, character, or field - - -## Example - -Using this record as an example: -``` -{ - "body": "one two three four five six seven eight" -} -``` - -Applying these directives: -``` -cut-character body one -c 1-3 -cut-character body two -c 5-7 -cut-character body three -c 9-13 -cut-character body four -c 15- -cut-character body five -c 1,2,3 -cut-character body six -c -3 -cut-character body seven -c 1,2,3-5 -``` - -would result in this record: -``` -{ - "body": "one two three four five six seven eight", - "one": "one", - "two": "two", - "three": "three", - "four": "four five six seven eight", - "five": "one", - "six": "one", - "seven": "one t" -} -``` diff --git a/wrangler-docs/directives/datetime-to-timestamp.md b/wrangler-docs/directives/datetime-to-timestamp.md deleted file mode 100644 index bf2a28d18..000000000 --- a/wrangler-docs/directives/datetime-to-timestamp.md +++ /dev/null @@ -1,24 +0,0 @@ -# Datetime To Timestamp - -The DATETIME-TO-TIMESTAMP directive converts a datetime value to timestamp with the given zone - - -## Syntax -``` -datetime-to-timestamp 'timezone' -``` - - -## Usage Notes - -The DATETIME-TO-TIMESTAMP directive converts datetime values to -timestamp values using the given time zone (UTC by default). -Zone can be region based string like America/Los_Angeles, Europe/Paris , - simple offsets like +08:00 , or prefix and offset like UTC+01:00, GMT+08:00, UT+04:00 etc - - If the column is `null` applying this directive is a no-op. - -## Examples -datetime-to-timestamp :col1 'UTC-08:00' - -datetime-to-timestamp :col2 'America/Los_Angeles' \ No newline at end of file diff --git a/wrangler-docs/directives/decode.md b/wrangler-docs/directives/decode.md deleted file mode 100644 index 47828cb2f..000000000 --- a/wrangler-docs/directives/decode.md +++ /dev/null @@ -1,62 +0,0 @@ -# Decode - -The DECODE directive decodes a column value as one of `base32`, `base64`, or `hex` -following [RFC-4648](https://tools.ietf.org/html/rfc4648). - - -## Syntax -``` -decode -``` - -The `` is the name of the column to which the decoding is applied. - - -## Usage Notes - -Base decoding of data is used in many situations to store or transfer data in environments -that, for legacy reasons, are restricted to US-ASCII data. Base decoding can be used in -new applications that do not have legacy restrictions because it allows the manipulation -of objects with text editors. - -The DECODE directive generates a new column with a name following the format of -`_decode_`. - -Different column values are handled following these rules: - -* If the column is `null`, the resulting column will also be `null`. -* If the column specified is not found in the record, then the record is skipped as a no-op. -* If the column value is not of either type string or byte array, it fails. - -See also the [ENCODE](encode.md) directive. - - -## Example - -Using this record as an example: -``` -{ - "col1": "IJQXGZJTGIQEK3TDN5SGS3TH", - "col2": "VGVzdGluZyBCYXNlIDY0IEVuY29kaW5n", - "col3": "48657820456e636f64696e67" -} -``` - -Applying these directives: -``` -decode base32 col1 -decode base64 col2 -decode hex col3 -``` - -would result in this record: -``` -{ - "col1": "IJQXGZJTGIQEK3TDN5SGS3TH", - "col2": "VGVzdGluZyBCYXNlIDY0IEVuY29kaW5n", - "col3": "48657820456e636f64696e67", - "col1_decode_base32": "Base32 Encoding", - "col2_decode_base64": "Testing Base 64 Encoding", - "col3_decode_hex": "Hex Encoding", -} -``` diff --git a/wrangler-docs/directives/diff-date.md b/wrangler-docs/directives/diff-date.md deleted file mode 100644 index 985bc9053..000000000 --- a/wrangler-docs/directives/diff-date.md +++ /dev/null @@ -1,53 +0,0 @@ -# Diff Date - -The DIFF-DATE directive calculates the difference between two dates. - - -## Syntax -``` -diff-date -``` - - -## Usage Notes - -The DIFF-DATE directive calculates the difference between two Date objects (`` -minus ``) and puts the difference (in milliseconds) into the destination column. - -This directive can only be applied on two columns whose date strings have already been -parsed, either using the [PARSE-AS-DATE](parse-as-date.md) or -[PARSE-AS-SIMPLE-DATE](parse-as-simple-date.md) directives. - -A negative difference can be returned when the first column is an earlier date than the -second column. - -If one of the dates in the column is `null`, the resulting column will be `null`. - -If any of the columns contains the string `now`, then the current date-time will be -substituted for it. When `now` is encountered, the directive applies the same value for -`now` across all rows. - - -## Example - -Using this record as an example: -``` -{ - "create_date": "02/12/2017", - "update_date": "02/14/2017" -} -``` - -Applying this directive: -``` -diff-date update_date create_date diff_date -``` - -would result in this record: -``` -{ - "create_date": "02/12/2017", - "update_date": "02/14/2017", - "diff_date": 17280000 -} -``` diff --git a/wrangler-docs/directives/drop.md b/wrangler-docs/directives/drop.md deleted file mode 100644 index 23c937b3f..000000000 --- a/wrangler-docs/directives/drop.md +++ /dev/null @@ -1,43 +0,0 @@ -# Drop - -The DROP directive is used to drop a column in a record. - - -## Syntax -``` -drop [,]* -``` - -The `` is the name of the column in the record to be droped. - - -## Usage Notes - -After the DROP directive is applied, the column and its associated value are removed from -the record. Later directives will not be able to reference the dropped column. - - -## Example - -Using this record as an example: -``` -{ - "id": 1, - "timestamp": 1234434343, - "measurement": 10.45, - "isvalid": true -} -``` - -Applying this directive: -``` -drop isvalid,measurement -``` - -would result in a record with no `isvalid` or `measurement` fields: -``` -{ - "id": 1, - "timestamp": 1234434343 -} -``` diff --git a/wrangler-docs/directives/encode.md b/wrangler-docs/directives/encode.md deleted file mode 100644 index ba908539c..000000000 --- a/wrangler-docs/directives/encode.md +++ /dev/null @@ -1,62 +0,0 @@ -# Encode - -The ENCODE directive encodes a column value as one of `base32`, `base64`, or `hex` -following [RFC-4648](https://tools.ietf.org/html/rfc4648). - - -## Syntax -``` -encode -``` - -The `` is the name of the column to which the encoding is applied. - - -## Usage Notes - -Base encoding of data is used in many situations to store or transfer data in environments -that, for legacy reasons, are restricted to US-ASCII data. Base encoding can be used in -new applications that do not have legacy restrictions because it allows the manipulation -of objects with text editors. - -The ENCODE directive generates a new column with a name following the format of -`_encode_`. - -Different column values are handled following these rules: - -* If the column is `null`, the resulting column will also be `null`. -* If the column specified is not found in the record, then the record is skipped as a no-op. -* If the column value is not of either type string or byte array, it fails. - -See also the [DECODE](dedcode.md) directive. - - -## Example - -Using this record as an example: -``` -{ - "col1": "Base32 Encoding", - "col2": "Testing Base 64 Encoding", - "col3": "Hex Encoding" -} -``` - -Applying these directives: -``` -encode base32 col1 -encode base64 col2 -encode hex col3 -``` - -would result in this record: -``` -{ - "col1": "Base32 Encoding", - "col2": "Testing Base 64 Encoding", - "col3": "Hex Encoding", - "col1_encode_base32": "IJQXGZJTGIQEK3TDN5SGS3TH", - "col2_encode_base64": "VGVzdGluZyBCYXNlIDY0IEVuY29kaW5n", - "col3_encode_hex": "48657820456e636f64696e67" -} -``` diff --git a/wrangler-docs/directives/extract-regex-groups.md b/wrangler-docs/directives/extract-regex-groups.md deleted file mode 100644 index 67c83d1ef..000000000 --- a/wrangler-docs/directives/extract-regex-groups.md +++ /dev/null @@ -1,46 +0,0 @@ -# Extract Regex Groups - -The EXTRACT-REGEX-GROUPS directive extracts the data from a regex group into its own -column. - - -## Syntax -``` -extract-regex-groups -``` - -The directive generates additional columns based on the regex in ``. -This ignores the `$0` regex group. - - -## Usage Notes - -If multiple groups are matched, the directive creates multiple columns. - -The base name of the column is appended with the match count and match position the -pattern is matched for: `__`. - - -## Example - -Using this record as an example: -``` -{ - "title": "Toy Story (1995)" -} -``` - -Applying this directive: -``` -extract-regex-groups title [^(]+\(([0-9]{4})\).* -``` - -would result in this record: -``` -{ - "title": "Toy Story (1995)", - "title_1_1: "1995" -} -``` - -The field `title_1_1` follows the format of `__`. diff --git a/wrangler-docs/directives/fail.md b/wrangler-docs/directives/fail.md deleted file mode 100644 index 487f286fd..000000000 --- a/wrangler-docs/directives/fail.md +++ /dev/null @@ -1,33 +0,0 @@ -# Fail on condition - -The FAIL directive will fail processing of pipeline when condition is evaulated -to `true`. - - -## Syntax -``` -fail -``` - -The `` is a JEXL expression specifing the condition that governs if the record -should be sent to the error collector. - - -## Usage Notes - -The most common use of the FAIL directive is to fail further processing of the -pipeline when the condition is met. - -## Example - -Assume a record that has these three fields: - -* Error Name -* Error Count - -These directives will implement these rules; any records that match any of these -conditions will terminate further processing of the pipeline. - -``` -fail ErrorCount > 1 -``` diff --git a/wrangler-docs/directives/fill-null-or-empty.md b/wrangler-docs/directives/fill-null-or-empty.md deleted file mode 100644 index 6969e1196..000000000 --- a/wrangler-docs/directives/fill-null-or-empty.md +++ /dev/null @@ -1,56 +0,0 @@ -# Fill Null or Empty - -The FILL-NULL-OR-EMPTY directive fills column value with a fixed value if it is either -`null` or empty (""). - - -## Syntax - -``` -fill-null-or-empty -``` - -* If the `` does not exist, then the directive will fail. -* The `` can only be of type string. - - -## Usage Notes - -The FILL-NULL-OR-EMPTY directive fills the column value with the `` if the -column value is `null` or empty (an empty string, ""). - -The `` must be a string and cannot be an empty string value. - -When the object in the record is a JSON object and it is `null`, the directive checks that -it is also applied to those records. - - -## Example - -Using this record as an example: -``` -{ - "id": 1, - "fname": "root", - "mname": null, - "lname": "joltie", - "address": "" -} -``` - -Applying these directives: -``` -fill-null-or-empty mname NA -fill-null-or-empty address No address specified -``` - -would result in this record: -``` -{ - "id": 1, - "fname": "root", - "mname": "NA", - "lname": "joltie", - "address": "No address specified" -} -``` diff --git a/wrangler-docs/directives/filter-row-if-matched.md b/wrangler-docs/directives/filter-row-if-matched.md deleted file mode 100644 index d7782bd18..000000000 --- a/wrangler-docs/directives/filter-row-if-matched.md +++ /dev/null @@ -1,49 +0,0 @@ -# Filter Row If Matched - -The FILTER-ROW-IF-MATCHED directive filters records that match a pattern for a column. - - -## Syntax -``` -filter-row-if-matched -``` - -The `` is a valid regular expression that is evaluated on the column value for every record. - - -## Usage Notes - -The FILTER-ROW-IF-MATCHED directive applies the regular expression on a column value for -every record. If the regex matches the column value, the record is omitted, otherwise it -is passed as-is to the input of the next directive. - -If the regex is `null`, the value is compared against all the `null` as well as JSON null values. - - -## Examples - -Using this record as an example: -``` -{ - "id": 1, - "name": "Joltie, Root", - "emailid": "jolti@hotmail.com", - "hrlywage": "12.34", - "gender": "Male", - "country": "US" -} -``` - -Applying this directive: -``` -filter-row-if-matched country !~ US -``` -would result in filtering out records for individuals that are not in the US (where -`country` does not match "US"). - -Applying this directive: -``` -filter-row-if-matched (country !~ US && hrlywage > 12) -``` -would result in filtering out records for individuals that are not in the US (where -`country` does not match "US") and whose hourly wage (`hrlywage`) is greater than 12. diff --git a/wrangler-docs/directives/filter-row-if-true.md b/wrangler-docs/directives/filter-row-if-true.md deleted file mode 100644 index 457825a05..000000000 --- a/wrangler-docs/directives/filter-row-if-true.md +++ /dev/null @@ -1,57 +0,0 @@ -# Filter Row If True - -The FILTER-ROW-IF-TRUE directive filters records that match a condition. - - -## Deprecated - -Use the [FILTER-ROWS-ON](filter-rows-on.md) directive instead. - - -## Syntax -``` -filter-row-if-true -``` - -The `` is a valid boolean expression resulting in either a `true` or `false`. - - -## Usage Notes - -The FILTER-ROW-IF-TRUE directive evaluates the Boolean condition for each record. If the -result of evaluation is `true`, it skips the record, otherwise it is passed as-is to the -input of the next directive. - -The `` is specified in the JEXL expression language with additional utility -libraries are defined in the `math` and `string` namespaces. - -For information on how to write JEXL expressions, see the [commons-jexl -documentation](https://commons.apache.org/proper/commons-jexl/reference/syntax.html). - - -## Examples - -Using this record as an example: -``` -{ - "id": 1, - "name": "Joltie, Root", - "hrlywage": "12.34", - "gender": "Male", - "country": "US" -} -``` - -Applying this directive: -``` -filter-row-if-true country !~ US -``` -would result in filtering out records for individuals that are not in the US (where -`country` does not match "US"). - -Applying this directive: -``` -filter-row-if-true (country !~ US && hrlywage > 12) -``` -would result in filtering out records for individuals that are not in the US (where -`country` does not match "US") and whose hourly wage (`hrlywage`) is greater than 12. diff --git a/wrangler-docs/directives/filter-rows-on.md b/wrangler-docs/directives/filter-rows-on.md deleted file mode 100644 index 75986f545..000000000 --- a/wrangler-docs/directives/filter-rows-on.md +++ /dev/null @@ -1,62 +0,0 @@ -# Filter Rows On - -The FILTER-ROWS-ON directive filters records based on a condition. - - -## Syntax -``` -filter-rows-on -``` - -The `` specifies the type of filter used and the options to be supplied to it. - -Supported filter types and their options: - -``` -condition-false -condition-true -empty-or-null-columns [,]* -regex-match -regex-not-match -``` - - -## Usage Notes - -The FILTER-ROWS-ON directive applies the filter type and a boolean or regular expression -on a column value for each record. If the expression matches or returns `true` for the -column value, then the record is omitted; otherwise, it is passed on as-is to the input of -the next directive. - -Note that it is a combination of the `` and the options. For instance, if -`condition-true` is used and its `` evaluates to `true`, then the row -will be omitted and not passed on. - - -## Examples - -Using this record as an example: -``` -{ - "id": 1, - "name": "Joltie, Root", - "emailid": "jolti@hotmail.com", - "hrlywage": 12.34, - "gender": "Male", - "country": "US" -} -``` - -Applying this directive: -``` -filter-rows-on condition-true country !~ 'US' -``` -would result in filtering out records for individuals that are not in the US (where -`country` does not match "US"). - -Applying this directive: -``` -filter-rows-on condition-true (country !~ 'US' && hrlywage > 12) -``` -would result in filtering out records for individuals that are not in the US (where -`country` does not match "US") and whose hourly wage (`hrlywage`) is greater than 12. diff --git a/wrangler-docs/directives/find-and-replace.md b/wrangler-docs/directives/find-and-replace.md deleted file mode 100644 index 0a63fdd33..000000000 --- a/wrangler-docs/directives/find-and-replace.md +++ /dev/null @@ -1,66 +0,0 @@ -# Find and Replace - -The FIND-AND-REPLACE directive transforms string column values using a "sed"-like -expression to find and replace text. - - -## Syntax -``` -find-and-replace -``` - - -## Usage Notes - -This directive is a column-oriented text processor that operates on a single value in the given column. -The `sed-script` is applied on each text value to transform the data. - -A typical example on how the directive is used: -``` -find-and-replace s/regex/replacement/g -``` - -This directive will replace a value of the column that matches the `regex` -with the `replacement` value. - -The `s` stands for "substitute". The `g` stands for "global", which means that all matching -occurrences in the value would be replaced. - -The regular expression to be matched is placed after the first delimiting symbol (a -forward-slash in this example) and the replacement value follows the second delimiting -symbol. A forward-slash (`/`) is the conventional symbol used as a delimiter, and the -origin of the character for "search". - -For example, to replace all occurrences of `hello` with `world` in the column `message`: -``` -find-and-replace message s/hello/world/g -``` - -If you want to change a pathname that contains a slash (such as `/usr/local/bin` to -`/common/bin`), you can use a backslash to escape any slashes: -``` - find-and-replace column s/\/usr\/local\/bin/\/common\/bin//g -``` - - -## Example - -Using this record as an example: -``` -{ - "body": "one two three four five six seven eight" -} -``` - -Applying these two directives: -``` -find-and-replace body s/one/ONE/g -find-and-replace body s/two/2/g -``` - -would result in this record: -``` -{ - "body": "ONE 2 three four five six seven eight", -} -``` diff --git a/wrangler-docs/directives/flatten.md b/wrangler-docs/directives/flatten.md deleted file mode 100644 index 3de41ba1a..000000000 --- a/wrangler-docs/directives/flatten.md +++ /dev/null @@ -1,124 +0,0 @@ -# Flatten - -The FLATTEN directive separates the elements in a repeated field into individual records. - - -## Syntax -``` -flatten [,]* -``` - -The `` is the name of a column that is a JSON array. - - -## Usage Notes - -The FLATTEN directive is useful for the flexible exploration of repeated data. - -To maintain the association between each flattened value and the other fields in the -record, the FLATTEN directive copies all of the other columns into each new record. - - -## Examples - -### Case 1 - -The array in `col2` is flattened and the values in `col3` are repeated for each value of -`col2`: - -**Input Record** -``` -[ - { "col1": "A" }, - { "col1": "B" }, - { "col2": [x1, y1], "col3": 10 }, - { "col2": [x2, y2], "col3": 11 } -] -``` -**Output Record** -``` -[ - { "col1": "A" }, - { "col1": "B" }, - { "col2": "x1", "col3": 10 }, - { "col2": "y1", "col3": 10 }, - { "col2": "x2", "col3": 11 }, - { "col2": "y2", "col3": 11 } -] -``` - -### Case 2 - -The arrays in `col2` and `col3` are flattened: - -**Input Record** -``` -[ - { "col1": "A" }, - { "col1": "B" }, - { "col2": [ "x1", "y1", "z1" ], "col3": [ "a1", "b1", "c1" ] }, - { "col2": [ "x2", "y2" ], "col3": [ "a2", "b2" ] } -] -``` -**Output Record** -``` -[ - { "col1": "A" }, - { "col1": "B" }, - { "col2": "x1", "col3": "a1" }, - { "col2": "y1", "col3": "b1" }, - { "col2": "z1", "col3": "c1" }, - { "col2": "x2", "col3": "a2" }, - { "col2": "y2", "col3": "b2" } -] -``` - -### Case 3 - -The arrays in `col2` and `col3` are flattened: - -**Input Record** -``` -[ - { "col1": "A" }, - { "col1": "B" }, - { "col2": [ "x1", "y1", "z1" ], "col3": [ "a1", "b1" ] }, - { "col2": [ "x2", "y2" ], "col3": [ "a2", "b2", "c2" ] } -] -``` -**Output Record** -``` -[ - { "col1": "A" }, - { "col1": "B" }, - { "col2": "x1", "col3": "a1" }, - { "col2": "y1", "col3": "b1" }, - { "col2": "z1" }, - { "col2": "x2", "col3": "a2" }, - { "col2": "y2", "col3": "b2" }, - { "col3": "c2" } -] -``` - -### Case 4 - -Using this record as an example: -``` -{ - "x": 5, - "y": "a string", - "z": [ 1,2,3 ] -} -``` - -The directive would result in these three distinct records: - -| x | y | z | -| --- | ---------- | --- | -| 5 | "a string" | 1 | -| 5 | "a string" | 2 | -| 5 | "a string" | 3 | - -The directive takes a single argument, which must be an array (the `z` column in this -example). In this case, using the "all" (`*`) wildcard as the argument to flatten is not -supported and would return an error. diff --git a/wrangler-docs/directives/format-as-currency.md b/wrangler-docs/directives/format-as-currency.md deleted file mode 100644 index d57f0d13c..000000000 --- a/wrangler-docs/directives/format-as-currency.md +++ /dev/null @@ -1,37 +0,0 @@ -# Parse as CSV - -The FORMAT-AS-CURRENCY is a directive for formatting a number as a currency as specified by the locale. - - -## Syntax -``` -format-as-currency [] -``` - -The `` specifies the name of the column that contains number to be converted to currency as specified by locale. -The `` contains the formatted value of currency as `string`. Optional locale specifies the -locale to be used for formatting the number as string representation of currency in the `` column. - - -## Usage Notes - -`FORMAT-AS-CURRENCY` can be used to format a number representing currency into a locale currency. If locale is not -specified in the directive, a default of 'en_US' is assumed. - -When the directive is unable to parse the currency, an error record is generated. - -Following are few examples of parsing currency into number. - -``` -format-as-currency :src :dst -format-as-currency :src :dst 'en_US' -format-as-currency :src :dst 'en_IE' -format-as-currency :src :dst 'pl_PL' -format-as-currency :src :dst 'ca_ES' -format-as-currency :src :dst 'es_ES' -format-as-currency :src :dst 'es_CO' -format-as-currency :src :dst 'de_CH' -format-as-currency :src :dst 'en_ZA' -format-as-currency :src :dst 'en_GB' -format-as-currency :src :dst 'fr_BE' -``` \ No newline at end of file diff --git a/wrangler-docs/directives/format-date.md b/wrangler-docs/directives/format-date.md deleted file mode 100644 index 85a5eef6d..000000000 --- a/wrangler-docs/directives/format-date.md +++ /dev/null @@ -1,70 +0,0 @@ -# Format Date - -The FORMAT-DATE directive allows custom patterns for date-time formatting. - - -## Syntax -``` -format-date -``` - -## Usage Notes - -Date and time formats are specified by date and time pattern strings. Within pattern -strings, unquoted letters from 'A' to 'Z' and from 'a' to 'z' are interpreted as pattern -letters representing the components of a date or time string. Text can be quoted using -single quotes (`'`) to avoid interpretation. Two single quotes `''` represents a single -quote. All other characters are not interpreted; they're simply copied into the output -string during formatting or matched against the input string during parsing. - -These pattern letters are defined (all other characters from 'A' to 'Z' and from 'a' to 'z' are reserved): - -| Letter | Date or Time Component | Presentation | Examples | -| ------ | ------------------------------------------- | ------------------ | ------------------------------------- | -| G | Era designator | Text | AD | -| y | Year | Year | 1996; 96 | -| Y | Week year | Year | 2009; 09 | -| M | Month in year | Month | July; Jul; 07 | -| w | Week in year | Number | 27 | -| W | Week in month | Number | 2 | -| D | Day in year | Number | 189 | -| d | Day in month | Number | 10 | -| F | Day of week in month | Number | 2 | -| E | Day name in week | Text | Tuesday; Tue | -| u | Day number of week (1=Monday,..., 7=Sunday) | Number | 1 | -| a | AM/PM marker | Text | PM | -| H | Hour in day (0-23) | Number | 0 | -| k | Hour in day (1-24) | Number | 24 | -| K | Hour in am/pm (0-11) | Number | 0 | -| h | Hour in am/pm (1-12) | Number | 12 | -| m | Minute in hour | Number | 30 | -| s | Second in minute | Number | 55 | -| S | Millisecond | Number | 978 | -| z | Time zone | General Time Zone | Pacific Standard Time; PST; GMT-08:00 | -| Z | Time zone | RFC 822 Time Zone | -0800 | -| X | Time zone | ISO 8601 Time Zone | -08; -0800; -08:00 | - - -## Examples - -Prior to using these patterns, the directive [PARSE-AS-DATE](parse-as-date.md) should be applied -to correctly create a complete date-time string. - -These examples show how date and time patterns are interpreted in the U.S. locale. If the -given date and time is `2001-07-04 12:08:56`, and is a local time in the U.S. Pacific Time -Zone, then applying different patterns results in these strings: - -| Date and Time Pattern | Date String | -| ------------------------------ | ------------------------------------ | -| `yyyy.MM.dd G 'at' HH:mm:ss z` | 2001.07.04 AD at 12:08:56 PDT | -| `EEE, MMM d, ''yy` | Wed, Jul 4, '01 | -| `h:mm a` | 12:08 PM | -| `hh 'o''clock' a, zzzz` | 12 o'clock PM, Pacific Daylight Time | -| `K:mm a, z` | 0:08 PM, PDT | -| `yyyy.MMMMM.dd GGG hh:mm aaa` | 2001.July.04 AD 12:08 PM | -| `EEE, d MMM yyyy HH:mm:ss Z` | Wed, 4 Jul 2001 12:08:56 -0700 | -| `yyMMddHHmmssZ` | 010704120856-0700 | -| `yyyy-MM-dd'T'HH:mm:ss.SSSZ` | 2001-07-04T12:08:56.235-0700 | -| `yyyy-MM-dd'T'HH:mm:ss.SSSXXX` | 2001-07-04T12:08:56.235-07:00 | -| `MM/dd/yyyy HH:mm` | 07/04/2001 12:09 | -| `yyyy.MM.dd` | 2001-07-04 | diff --git a/wrangler-docs/directives/format-datetime.md b/wrangler-docs/directives/format-datetime.md deleted file mode 100644 index 6b121c630..000000000 --- a/wrangler-docs/directives/format-datetime.md +++ /dev/null @@ -1,23 +0,0 @@ -# Format Datetime - -The FORMAT-DATETIME directive formats CDAP datetime values to custom pattern strings. - - -## Syntax -``` -format-datetime "" -``` - - -## Usage Notes - -The FORMAT-DATETIME directive will format CDAP datetime values to custom pattern strings. -Pattern is the format for the output string. - - -If the column is `null` applying this directive is a no-op. -The column to be formatted should be of type datetime. - - -## Examples -See [FORMAT-DATE](format-date.md) for an explanation and examples the pattern strings. diff --git a/wrangler-docs/directives/format-unix-timestamp.md b/wrangler-docs/directives/format-unix-timestamp.md deleted file mode 100644 index a17f1cd96..000000000 --- a/wrangler-docs/directives/format-unix-timestamp.md +++ /dev/null @@ -1,23 +0,0 @@ -# Format UNIX Timestamp - -The FORMAT-UNIX-TIMESTAMP directive formats a UNIX timestamp as a date. - - -## Syntax -``` -format-unix-timestamp -``` - -* `` is the column to be formatted as a date -* `` is the pattern string to be used in formatting the timestamp - - -## Usage Notes - -The FORMAT-UNIX-TIMESTAMP directive will parse a UNIX timestamp, using a pattern string. -The `` should contain valid UNIX-style timestamps. - - -## Examples - -See [FORMAT-DATE](format-date.md) for an explanation and example of these pattern strings. diff --git a/wrangler-docs/directives/generate-uuid.md b/wrangler-docs/directives/generate-uuid.md deleted file mode 100644 index c04519274..000000000 --- a/wrangler-docs/directives/generate-uuid.md +++ /dev/null @@ -1,43 +0,0 @@ -# Generate UUID - -The GENERATE-UUID directive generates a universally unique identifier (UUID) of the record. -**NOTE**: Recommended to use with Wrangler version 4.4.0 and above due to an important bug fix [CDAP-17732](https://cdap.atlassian.net/browse/CDAP-17732). - -## Syntax -``` -generate-uuid -``` - -The `` is set to the UUID generated for the record. - - -## Usage Notes - -The GENERATE-UUID directive generates a type 4, pseudo-randomly generated UUID. The UUID -is generated using a cryptographically strong pseudo-random number generator. - - -## Example - -Using this record as an example, where you would like to generate a random identifier for -the record to uniquely identify it: -``` -{ - "x": 1, - "y": 2 -} -``` - -Applying this directive: -``` -generate-uuid uuid -``` - -would result in a record similar to this (the value of `uuid` will vary): -``` -{ - "x": 1, - "y": 2, - "uuid": "57126d32-8c91-4c00-9697-8abda450e836" -} -``` diff --git a/wrangler-docs/directives/hash.md b/wrangler-docs/directives/hash.md deleted file mode 100644 index f6c0367a8..000000000 --- a/wrangler-docs/directives/hash.md +++ /dev/null @@ -1,99 +0,0 @@ -# Hash - -The HASH directive generates a message digest. - - -## Syntax -``` -hash [] -``` - -The `` is the name of the column to which the hashing `` is applied. - -If `` is set to `true`, the hashed digest is encoded as `hex` with left-padding -zeroes. By default, `` is set to `true`. To disable `hex` encoding, set `` to -false. - - -## Usage Notes - -The HASH directive, when applied on a ``, will replace the content of the column -with the message hash. No new columns are created with the application of this directive. - -These algorithms are supported by the HASH directive: - -* BLAKE2B-160 -* BLAKE2B-256 -* BLAKE2B-384 -* BLAKE2B-512 -* GOST3411 -* GOST3411-2012-256 -* GOST3411-2012-512 -* KECCAK-224 -* KECCAK-256 -* KECCAK-288 -* KECCAK-384 -* KECCAK-512 -* MD2 -* MD4 -* MD5 -* RIPEMD128 -* RIPEMD160 -* RIPEMD256 -* RIPEMD320 -* SHA -* SHA-1 -* SHA-224 -* SHA-256 -* SHA-384 -* SHA-512 -* SHA-512/224 -* SHA-512/256 -* SHA3-224 -* SHA3-256 -* SHA3-384 -* SHA3-512 -* Skein-1024-1024 -* Skein-1024-384 -* Skein-1024-512 -* Skein-256-128 -* Skein-256-160 -* Skein-256-224 -* Skein-256-256 -* Skein-512-128 -* Skein-512-160 -* Skein-512-224 -* Skein-512-256 -* Skein-512-384 -* Skein-512-512 -* SM3 -* Tiger -* WHIRLPOOL - - -## Example - -Using this record as an example: -``` -{ - "message": "secret message" -} -``` - -Applying this directive: -``` -hash message SHA3-384 -``` - -would generate a message digest and replace the column with it: -``` -{ - "message": "9cc25835d1ef78b4cd8b36a0c4ad636a6094fbb944b1d880f21c7129a645e819d3be987e8ae2f0f8d6cbebb8452419ef" -} -``` - -The column `message` is replaced with the digest created using the SHA3-384 algorithm. The -type of column is a string. - -**Note:** By default, encoding is on. When `` is set to `false`, the output column -type is a byte array. diff --git a/wrangler-docs/directives/increment-variable.md b/wrangler-docs/directives/increment-variable.md deleted file mode 100644 index d80d81c62..000000000 --- a/wrangler-docs/directives/increment-variable.md +++ /dev/null @@ -1,19 +0,0 @@ -# Increment a transient variable - -The INCREMENT-VARIABLE directive increments the value of the variable that is -local to the input record being processed. - -## Syntax -``` -increment-variable -``` - -The `` is incremented by the `` when the `` evaluates to -true. - -## Usage Notes - -This directive is applied only within the scope of the record being processed. -The transient state is reset, once the system starts processing of the new record. - -Internally, this directive increments a `long` value. diff --git a/wrangler-docs/directives/index-split.md b/wrangler-docs/directives/index-split.md deleted file mode 100644 index de52e961e..000000000 --- a/wrangler-docs/directives/index-split.md +++ /dev/null @@ -1,9 +0,0 @@ -# Indexsplit - -The INDEXSPLIT directive splits a string at a given index into two substrings. - - -## Deprecated - -Use the [SPLIT-TO-COLUMNS](split-to-columns.md) or -[PARSE-AS-FIXED-LENGTH](fixed-length-parser.md) directives instead. diff --git a/wrangler-docs/directives/invoke-http.md b/wrangler-docs/directives/invoke-http.md deleted file mode 100644 index a70a818d8..000000000 --- a/wrangler-docs/directives/invoke-http.md +++ /dev/null @@ -1,82 +0,0 @@ -# Invoke HTTP - -The INVOKE-HTTP directive is an experimental directive to trigger an HTTP POST request -with a body composed from specified fields. - - -## Syntax -``` -invoke-http [,*]
[,
*] -``` - -The ``s specify the value to be sent to the service `` in the POST request as -the `body`. - - -## Usage Notes - -The INVOKE-HTTP directive is used to apply a transformation on data using an existing REST -service. This directive passes the specified columns as the POST body in the form of a JSON Object. -The keys in the JSON object are the column names, with the values and their types derived -from the objects stored in the column. - -Upon processing of request by the service, the INVOKE-HTTP directive expects the data to -be written back as a JSON object. The JSON object is then added to the record with its -keys being the column names and the values being the values returned for the keys. The -types are all valid JSON types. - -Currently, the JSON response has to be simple types. Nested JSONs are not currently -supported. - -*Note:* There is a significant cost associated with making an HTTP call and this directive -should not be used in an environment which would use it to process large quantities of -data. - -When an HTTP service requires more than one header to be passed, they can be specified as -key-value pairs. For example: -``` - X-Proxy-Server=0.0.0.0,X-Auth-Type=Basic -``` - -*Note:* The key and value are separated by an equals sign (`=`) and headers are separated -by commas (`,`). - - -## Examples - -Using this record as an example: -``` -{ - "latitude": 24.56, - "longitude": -65.23, - "IMEI": 212332321313, - "location": "Mars City" -} -``` - -Assume that a service to locate a postal code, given a latitude and longitude, is available at -an address such as `http://hostname/v3/api/geo-find`. - -Applying this directive: -``` -invoke-http http://hostname/v3/api/geo-find latitude,longitude -``` - -This would be translated into a `POST` call: -``` -POST v3/api/geo-find -``` - -with a body of: -``` -{ - "latitude": 24.56, - "longitude": -65.23 -} -``` - -Note that only the two fields specified as parameters to the directive are sent to the -service. - -In case of a failure, the input record is passed to the error collector so that it can be -re-processed later. diff --git a/wrangler-docs/directives/json-path.md b/wrangler-docs/directives/json-path.md deleted file mode 100644 index 823fd0063..000000000 --- a/wrangler-docs/directives/json-path.md +++ /dev/null @@ -1,158 +0,0 @@ -# JSON Path - -The JSON-PATH directive uses a DSL for reading JSON records. - - -## Syntax -``` -json-path -``` - -* `` specifies the column in the record that should be considered as the - "root member object" or "$" -* `` is the name of the output column in the record where the results of - the expression will be stored -* `` is a JSON path expression; see _Usage Notes_ below for details - - -## Usage Notes - -An expression always refers to a JSON structure in the same way that an XPath expression -is used in combination with an XML document. The "root member object" is always referred -to as `$` regardless if it is an object or an array. - - -### Notation - -Expressions can use either the "dot–notation": -``` -$.name.first -``` - -or the "bracket–notation": -``` -$['name']['first'] -``` - - -### Operators - -| Operator | Description | -| ------------------------- | ----------------------------------------------------------- | -| `$` | The root element to query; this starts all path expressions | -| `@` | The current node being processed by a filter predicate | -| `*` | Wildcard; available anywhere a name or numeric are required | -| `..` | Deep scan; available anywhere a name is required | -| `.` | Dot-notated child | -| `['' (, '')]` | Bracket-notated child or children | -| `[ (, )]` | Array index or indexes | -| `[start:end]` | Array slice operator | -| `[?()]` | Filter expression; must evaluate to a boolean value | - - -### Functions - -Functions can be invoked at the tail end of a path: the input to a function is the output -of the path expression. The function output is dictated by the function itself. - -| Function | Returns | Output | -| ---------- | --------------------------------------------------- | ------- | -| `min()` | The min value of an array of numbers | Double | -| `max()` | The max value of an array of numbers | Double | -| `avg()` | The average value of an array of numbers | Double | -| `stddev()` | The standard deviation value of an array of numbers | Double | -| `length()` | The length of an array | Integer | - - -### Filter Operators - -Filters are logical expressions used to filter arrays. A typical filter would be: -``` -[?(@.age>18)] -``` - -where `@` represents the current item being processed. - -* More complex filters can be created with the logical operators `&&` and `||` - -* String literals must be enclosed by either single or double quotes, such as in - `[?(@.color=='blue')]` or `[?(@.color=="blue")]` - -| Filter Operator | Description | -| --------------- | ------------------------------------------------------------------------- | -| `==` | Left is equal in type and value to right (note `1` is not equal to `'1'`) | -| `!=` | Left is not equal to right | -| `<` | Left is less than right | -| `<=` | Left is less than or equal to right | -| `>` | Left is greater than right | -| `>=` | Left is greater than or equal to right | -| `=~` | Left matches regular expression `[?(@.name=~/foo.*?/i)]` | -| `in` | Left exists in right `[?(@.size in ['S', 'M'])]` | -| `nin` | Left does not exist in right | -| `size` | Size of left (array or string) matches right | -| `empty` | Left (array or string) is empty | - - -## Examples - -Using this record as an example: -```json -{ - "store": { - "book": [ - { - "category": "reference", - "author": "Nigel Rees", - "title": "Sayings of the Century", - "price": 8.95 - }, - { - "category": "fiction", - "author": "Evelyn Waugh", - "title": "Sword of Honour", - "price": 12.99 - }, - { - "category": "fiction", - "author": "Herman Melville", - "title": "Moby Dick", - "isbn": "0-553-21311-3", - "price": 8.99 - }, - { - "category": "fiction", - "author": "J. R. R. Tolkien", - "title": "The Lord of the Rings", - "isbn": "0-395-19395-8", - "price": 22.99 - } - ], - "bicycle": { - "color": "red", - "price": 19.95 - } - }, - "expensive": 10 -} -``` - - -| JSON Path (click link to test) | Result | -| -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | -| [$.store.book[*].author](http://jsonpath.herokuapp.com/?path=$.store.book[*].author) | The authors of all books | -| [$..author](http://jsonpath.herokuapp.com/?path=$..author) | All authors | -| [$.store.*](http://jsonpath.herokuapp.com/?path=$.store.*) | All things, both books and bicycles | -| [$.store..price](http://jsonpath.herokuapp.com/?path=$.store..price) | The price of everything | -| [$..book[2]](http://jsonpath.herokuapp.com/?path=$..book[2]) | The third book | -| [$..book[0,1]](http://jsonpath.herokuapp.com/?path=$..book[0,1]) | The first two books | -| [$..book[:2]](http://jsonpath.herokuapp.com/?path=$..book[:2]) | All books from index 0 (inclusive) until index 2 (exclusive) | -| [$..book[1:2]](http://jsonpath.herokuapp.com/?path=$..book[1:2]) | All books from index 1 (inclusive) until index 2 (exclusive) | -| [$..book[-2:]](http://jsonpath.herokuapp.com/?path=$..book[-2:]) | Last two books | -| [$..book[2:]](http://jsonpath.herokuapp.com/?path=$..book[2:]) | Book number two from tail | -| [$..book[?(@.isbn)]](http://jsonpath.herokuapp.com/?path=$..book[?(@.isbn)]) | All books with an ISBN number | -| [$..book[?(@.isbn)]](http://jsonpath.herokuapp.com/?path=$..book[?(@.isbn)]) | All books with an ISBN number | -| [$.store.book[?(@.price<10)]](http://jsonpath.herokuapp.com/?path=$.store.book[?(@.price<10)\]) | All books in store cheaper than 10 | -| [$..book[?(@.price<=$['expensive'])]](http://jsonpath.herokuapp.com/?path=$..book[?(@.price<=$['expensive'])]) | All books in store that are not "expensive" | -| [$..book[?(@.author=~/.*REES/i)]](http://jsonpath.herokuapp.com/?path=$..book[?(@.author=~/.*REES/i)]) | All books matching a regex (ignore case) | -| [$..*](http://jsonpath.herokuapp.com/?path=$..*) | All books | -| [$..book.length()](http://jsonpath.herokuapp.com/?path=$..book.length()) | The number of books | diff --git a/wrangler-docs/directives/keep.md b/wrangler-docs/directives/keep.md deleted file mode 100644 index cd23401e9..000000000 --- a/wrangler-docs/directives/keep.md +++ /dev/null @@ -1,44 +0,0 @@ -# Keep - -The KEEP directive is used to keep specified columns from the record. This is the -opposite behavior of the [DROP](drop.md) directive. - - -## Syntax -``` -keep [,] -``` - -`column` is the name of a column in the record to be kept. - - -## Usage Notes - -After the KEEP directive is applied, the column(s) specified in the directive are -preserved, and all other columns are removed from the record. - - -## Example - -Using this record as an example: -``` -{ - "id": 1, - "timestamp": 1234434343, - "measurement": 10.45, - "isvalid": true -} -``` - -Applying this directive: -``` -keep id,measurement -``` - -would result in this record: -``` -{ - "id": 1, - "measurement": 10.45 -} -``` diff --git a/wrangler-docs/directives/mask-number.md b/wrangler-docs/directives/mask-number.md deleted file mode 100644 index 30e7653f5..000000000 --- a/wrangler-docs/directives/mask-number.md +++ /dev/null @@ -1,67 +0,0 @@ -# Mask Number - -The MASK-NUMBER directive applies substitution masking on the column values. - - -## Syntax -``` -mask-number -``` - -* The `` specifies the name of an existing column to be masked -* The `` is a substitution pattern to be used to mask the column values. - - -## Usage Notes - -Substitution masking is generally used for masking credit card or social security numbers. -The MASK-NUMBER applies substitution masking on the column values. This type of masking -is fixed masking, where the pattern is applied on the fixed length string. - -These rules are used for the pattern: - -* Use of `#` will include the digit from the position -* Use `x` or any other character to mask the digit at that position - - -## Examples - -Using this record as an example: -``` -{ - "first": "Root", - "last": "Joltie", - "ssn": "000-00-0000", - "cc": "4929790943424701" -} -``` - -Applying this directive: -``` -mask-number ssn XXX-XX-#### -``` - -would result in this record: -``` -{ - "first": "Root", - "last": "Joltie", - "ssn": "XXX-XX-0000", - "cc": "4929790943424701" -} -``` - -Applying this directive: -``` -mask-number cc XXXXXXXXXXXX#### -``` - -would result in this record: -``` -{ - "first": "Root", - "last": "Joltie", - "ssn": "000-00-0000", - "cc": "XXXXXXXXXXXX4701" -} -``` diff --git a/wrangler-docs/directives/mask-shuffle.md b/wrangler-docs/directives/mask-shuffle.md deleted file mode 100644 index 32ca4f58d..000000000 --- a/wrangler-docs/directives/mask-shuffle.md +++ /dev/null @@ -1,52 +0,0 @@ -# Mask Shuffle - -The MASK-SHUFFLE directive applies shuffle masking on the column values. - - -## Syntax -``` -mask-shuffle -``` - -The `` specifies the name of an existing column to be masked. - - -## Usage Notes - -The MASK-SHUFFLE directive applies shuffle masking on the column values to perform -obfuscation by using random character substitution method. This type of masking is fixed -length masking, where the data is randomly shuffled in the column on the fixed length -string. - -Note that vowels, consonants, and numerics are each shuffled separately and retain their -case. - -## Examples - -Using this record as an example: -``` -{ - "first": "Root", - "last": "Joltie", - "ssn": "000-00-0000", - "cc": "4929790943424701" -} -``` - -Applying these directives: -``` -mask-shuffle first -mask-shuffle last -mask-shuffle ssn -mask-shuffle cc -``` - -would result in this record: -``` -{ - "first": "Buek", - "last": "Bumkyy", - "ssn": "089-75-3119", - "cc": "0897531194773254" -} -``` diff --git a/wrangler-docs/directives/merge.md b/wrangler-docs/directives/merge.md deleted file mode 100644 index 42daa1a24..000000000 --- a/wrangler-docs/directives/merge.md +++ /dev/null @@ -1,84 +0,0 @@ -# Merge - -The MERGE directive merges two columns by inserting a third column into a record. The -values in the third column are merged values from the two columns delimited by a specified -separator. - - -## Syntax -``` - merge '' -``` - -* The `` and `` column values are merged using a separator. The columns to be - merged must both exist and should be of type string for the merge to be successful. - -* The `` is the new column that will be added to the record. If the column already exists, - the contents will be replaced. - -* The `` is the character or string to be used to separate the values in the new - column. It is specified between single quotes. For example, a space character: `' '`. - -* The existing columns are not dropped by this directive. - - -## Usage Notes - -The columns to be merged should both be of type string. - - -## Examples - -Using this record as an example: -``` -{ - "first": "Root", - "last": "Joltie" -} -``` - -Applying these directives: -``` -merge first last fullname ' ' -merge first last fullname ''' -merge first last fullname '\u000A' -merge first last fullname '---' -``` - -would result in these records: - -Separator is a single space character (`' '`): -``` -{ - "first": "Root", - "last": "Joltie", - "fullname": "Root Joltie" -} -``` - -Separator is a single quote character (`'''`): -``` -{ - "fname" : "Joltie", - "lname" : "Root", - "name" : "Joltie'Root" -} -``` - -Separator is the UTF-8 Line Feed character (`'\u000A'`): -``` -{ - "fname" : "Joltie", - "lname" : "Root", - "name" : "Joltie\nRoot" -} -``` - -Separator is multiple characters (`'---'`): -``` -{ - "fname" : "Joltie", - "lname" : "Root", - "name" : "Joltie---Root" -} -``` diff --git a/wrangler-docs/directives/parse-as-avro-file.md b/wrangler-docs/directives/parse-as-avro-file.md deleted file mode 100644 index b62a711ae..000000000 --- a/wrangler-docs/directives/parse-as-avro-file.md +++ /dev/null @@ -1,24 +0,0 @@ -# Parse AVRO File - -The PARSE-AS-AVRO-FILE directive parses AVRO data file. The AVRO data -file stores both the data definition (schema) and the data together in -one file making it easy for programs to dynamically understand the -information stored in an AVRO file. The AVRO schema is in JSON format, -the data is in a binary format making it compact and efficient. - -## Syntax -``` -parse-as-avro-file -``` - -The `` contains the complete content of AVRO data file in -the binary octet stream. - -## Usage Notes - -Parsing the AVRO data file will using this directive will flatten -the structure using the following rules: - -* If data type is simple like INT, FLOAT, DOUBLE, STRING, SHORT, the column name will be the name of the column in AVRO schema. -* If data type is record, then the field name is used as prefix to name the fields within the record. - diff --git a/wrangler-docs/directives/parse-as-avro.md b/wrangler-docs/directives/parse-as-avro.md deleted file mode 100644 index 4a1661605..000000000 --- a/wrangler-docs/directives/parse-as-avro.md +++ /dev/null @@ -1,20 +0,0 @@ -# Parse AVRO Encoded Messages - -The PARSE-AS-AVRO directive parses messages encoded as binary or json AVRO -records or file. This directive requires the registration of schema to be -decoded with [Schema Registry](../service/schema-registry.md) - -## Syntax -``` -parse-as-avro [] -``` - -The `` is the name of the column whoes values will be decoded using -the schema defined in [Schema Registry](../service/schema-registry.md) -registered with id ``. Optionally a specific `` of -registered schema can be specified. - -## Usage Notes - -The PARSE-AS-XML directive efficiently parses and represents an XML document using an -in-memory structure that can then be queried using other directives. diff --git a/wrangler-docs/directives/parse-as-csv.md b/wrangler-docs/directives/parse-as-csv.md deleted file mode 100644 index d1a4b0db5..000000000 --- a/wrangler-docs/directives/parse-as-csv.md +++ /dev/null @@ -1,81 +0,0 @@ -# Parse as CSV - -The PARSE-AS-CSV is a directive for parsing an input record as comma-separated values. - - -## Syntax -``` -parse-as-csv [] -``` - -The `` specifies the column in the record that should be parsed as CSV using -the specified ``. If the values in the first record of the input need to be set as column -headers, set `
` to `true`; by default, it is set to `false`. - - -## Examples - -Consider a single line from a consumer complaint CSV file. Each line of the CSV file is added as a record: -``` -{ - "body": "07/29/2013,Consumer Loan,Vehicle Loan,Managing the loan or lease,,,,Wells Fargo & Company,VA,24540,,N/A,Phone,07/30/2013,Closed with explanation,Yes,No,468882" -} -``` - -Applying this directive: -``` -parse-as-csv body , -``` - -would result in this record: -``` -{ - "body": "07/29/2013,Consumer Loan,Vehicle Loan,Managing the loan or lease,,,Wells Fargo & Company,VA,24540,,N/A,Phone,07/30/2013,Closed with explanation,Yes,No,468882", - "body_1": "07/29/2013", - "body_2": "Consumer Loan", - "body_3": "Vehicle Loan", - "body_4": "Managing the loan or lease", - "body_5": null, - "body_6": null, - "body_7": "Wells Fargo & Company", - "body_8": "VA", - "body_9": "24540", - "body_10": null, - "body_11": "N/A", - "body_12": "Phone", - "body_13": "07/30/2013", - "body_14": "Closed with explanation", - "body_15": "Yes", - "body_16": "No", - "body_17": "468882" -} -``` - -Using this record, with a header as the first record, as an example: -``` -[ - { - "body": "Date,Type,Item,Action,Company" - }, - { - "body": "07/29/2013,Consumer Loan,Vehicle Loan,Managing the loan or lease,Wells Fargo & Company" - } -] -``` - -Applying this directive: -``` -parse-as-csv body , true -``` - -would result in this record: -``` -{ - "body": "07/29/2013,Consumer Loan,Vehicle Loan,Managing the loan or lease,Wells Fargo & Company" - "Date": "07/29/2013", - "Type": "Consumer Loan", - "Item": "Vehicle Loan", - "Action": "Managing the loan or lease", - "Company": "Wells Fargo & Company" -} -``` diff --git a/wrangler-docs/directives/parse-as-currency.md b/wrangler-docs/directives/parse-as-currency.md deleted file mode 100644 index b99a75787..000000000 --- a/wrangler-docs/directives/parse-as-currency.md +++ /dev/null @@ -1,38 +0,0 @@ -# Parse as CSV - -The PARSE-AS-CURRENCY is a directive for parsing a currency value that is a string representation of locale currency -into a number. - - -## Syntax -``` -parse-as-currency [] -``` - -The `` specifies the name of the column that contains string representation of locale currency. -The `` contains the parsed value of currency as `double`. Optional locale specifies the -locale to be used for parsing the string representation of currency in the `` column. - - -## Usage Notes - -`PARSE-AS-CURRENCY` can be used to parse a string representation of currency into a number. If locale is not -specified in the directive, a default of 'en_US' is assumed. - -When the directive is unable to parse the currency, an error record is generated. - -Following are few examples of parsing currency into number. - -``` -parse-as-currency :src :dst -parse-as-currency :src :dst 'en_US' -parse-as-currency :src :dst 'en_IE' -parse-as-currency :src :dst 'pl_PL' -parse-as-currency :src :dst 'ca_ES' -parse-as-currency :src :dst 'es_ES' -parse-as-currency :src :dst 'es_CO' -parse-as-currency :src :dst 'de_CH' -parse-as-currency :src :dst 'en_ZA' -parse-as-currency :src :dst 'en_GB' -parse-as-currency :src :dst 'fr_BE' -``` \ No newline at end of file diff --git a/wrangler-docs/directives/parse-as-date.md b/wrangler-docs/directives/parse-as-date.md deleted file mode 100644 index 572bfa037..000000000 --- a/wrangler-docs/directives/parse-as-date.md +++ /dev/null @@ -1,47 +0,0 @@ -# Parse as Date - -The PARSE-AS-DATE directive is for parsing dates using natural language processing. - - -## Syntax -``` -parse-as-date [] -``` - -## Usage Notes - -The PARSE-AS-DATE directive will apply standard language recognition and translation techniques to produce a list of -corresponding dates with optional parse and syntax information. - -It recognizes dates described in many ways, including formal dates (`02/28/1979`), relaxed dates (`oct 1st`), -relative dates (`the day before next thursday`), and even date alternatives (`next wed or thurs`). - -This directive will also search for date components within a larger block of text, detect their structure, and -create dates. - -It will create a new column using the syntax `_1` containing the results of parsing. - -If `` is not provided, UTC is used as the timezone. - - -## Examples - -Using this record as an example: -``` -{ - "create_date": "now", -} -``` - -Applying this directive: -``` -parse-as-date create_date US/Eastern -``` - -would result in this record (the actual results depending on when this was run): -``` -{ - "create_date": "now", - "create_date_1": "Mon May 01 14:13:35 EDT 2017" -} -``` diff --git a/wrangler-docs/directives/parse-as-datetime.md b/wrangler-docs/directives/parse-as-datetime.md deleted file mode 100644 index d044eb05c..000000000 --- a/wrangler-docs/directives/parse-as-datetime.md +++ /dev/null @@ -1,23 +0,0 @@ -# Parse as Datetime - -The PARSE-AS-DATETIME directive parses strings with datetime values to CDAP datetime type. - - -## Syntax -``` -parse-as-datetime "" -``` - - -## Usage Notes - -The PARSE-AS-DATETIME directive will parse strings with datetime values to CDAP -datetime type. Pattern is the format of the `input` strings. -The input values and pattern should have a date and time component. - -If the column is `null` or is already a datetime field, applying this directive -is ano-op. The column to be parsed as a datetime should be of type string. - - -## Examples -See [FORMAT-DATE](format-date.md) for an explanation and examples of these pattern strings. diff --git a/wrangler-docs/directives/parse-as-excel.md b/wrangler-docs/directives/parse-as-excel.md deleted file mode 100644 index 0d37c4f31..000000000 --- a/wrangler-docs/directives/parse-as-excel.md +++ /dev/null @@ -1,11 +0,0 @@ -# Parse as Excel - -The PARSE-AS-EXCEL is a directive for parsing excel file - XLS, XLSX. - - -## Syntax -``` -parse-as-excel | -``` - -The `` specifies the column in the record that contains excel. The `` or `` specifies the sheet within the excel file that needs to be parsed. diff --git a/wrangler-docs/directives/parse-as-fixed-length.md b/wrangler-docs/directives/parse-as-fixed-length.md deleted file mode 100644 index 4ae6eb24f..000000000 --- a/wrangler-docs/directives/parse-as-fixed-length.md +++ /dev/null @@ -1,48 +0,0 @@ -# Parse as Fixed Length - -The PARSE-AS-FIXED-LENGTH directive parses a column as a fixed length record with widths -for each field specified. - - -## Syntax -``` -parse-as-fixed-length [,]* [] -``` - -## Usage Notes - -Fixed-width text files are special cases of text files where the format is specified by -column widths, pad characters, and left or right alignment. Column widths are measured in -units of characters. - -For example, if you have data in a text file where the first column always has exactly 10 -characters, the second column has exactly 5, the third has exactly 12, and so on; this -would be categorized as a fixed-width text file. - -If not defined, the `` character is assumed to be a space character. - - -## Example - -Using this record as an example: -``` -{ - "body": "12 10 ABCXYZ" -} -``` - -Applying this directive: -``` -parse-as-fixed-length body 2,4,5,3 -``` - -would result in this record: -``` -{ - "body": "12 10 ABCXYZ", - "body_1": "12", - "body_2": " 10", - "body_3": " ABC", - "body_4": "XYZ -} -``` diff --git a/wrangler-docs/directives/parse-as-hl7.md b/wrangler-docs/directives/parse-as-hl7.md deleted file mode 100644 index 114d45634..000000000 --- a/wrangler-docs/directives/parse-as-hl7.md +++ /dev/null @@ -1,87 +0,0 @@ -# Parse as HL7 - -The PARSE-AS-HL7 directive is for parsing Health Level 7 Version 2 (HL7 V2) messages. -[HL7](http://www.hl7.org) is a messaging standard used in the healthcare industry to -exchange data between systems. - - -## Syntax -``` -parse-as-hl7 -``` - -The `` contains HL7 V2 messages, v2.1 through v2.6. - - -## Usage Notes - -This is an example of an [HL7 -V2](http://www.hl7.org/implement/standards/product_brief.cfm?product_id=185) message in a -record: -``` -MSH|^~\&||.|||199908180016||ADT^A04|ADT.1.1698593|P|2.6 -PID|1||000395122||LEVERKUHN^ADRIAN^C||19880517180606|M|||6 66TH AVE NE^^WEIMAR^DL^98052||(157)983-3296|||S||12354768|87654321 -NK1|1|TALLIS^THOMAS^C|GRANDFATHER|12914 SPEM ST^^ALIUM^IN^98052|(157)883-6176 -NK1|2|WEBERN^ANTON|SON|12 STRASSE MUSIK^^VIENNA^AUS^11212|(123)456-7890 -IN1|1|PRE2||LIFE PRUDENT BUYER|PO BOX 23523^WELLINGTON^ON^98111|||19601||||||||THOMAS^JAMES^M|F|||||||||||||||||||ZKA535529776 -``` - -Data in an HL7 V2 message is organized hierarchically as: - -* Message = { Segment, Segment, ... Segment } -* Segment = { Field, Field, ... Field } -* Field = { Component, Component, ... Component } -* Component = { Sub-Component, Sub-Component, ... Sub-Component } - -Each line of an HL7 V2 message is a segment. A segment is a logical grouping of fields. -The first three characters in a segment identify the segment type. In the above message, -there are five segments: the `MSH` (message header); the `PID` (patient identification); -two `NK1` (next-of-kin) segments; and the `IN1` (insurance). - -Each segment consists of fields. A field contains information related to the purpose of -the segment, such as the name of the insurance company in the `IN1` (insurance) segment. -Fields are typically (but not always) delimited by a `|` character. - -Fields can be divided into components. Components are typically indicated by a `^` -character. In the above example, the `PID` (patient identification) segment contains a -patient name field containing `LEVERKUHN^ADRIAN^C` which has three parts: last name -(`LEVERKUHN`); first name (`ADRIAN`); and middle initial (`C`). Components can be divided -into subcomponents. Subcomponents are typically indicated by an `&` character. - -Parsing the above message using the directive will generate a record that has flattened -HL7 V2 components and all **fields converted to JSON**. Further parsing can be achieved -with the [PARSE-AS-JSON](parse-as-json.md) directive. - - -## Example - -Applying this directive to the above message: -``` -parse-as-hl7 body -``` - -would result in a record of this form: -``` -{ - "body": "", - "body_hl7_MSH_": "", - ... - "body_hl7_MSH__": "", - ... - "body_hl7_PID_": "", - ... - "body_hl7_PID__": "", - ... - "body_hl7_NK1_>": "", - ... - "body_hl7_NK1__": "", - ... - "body_hl7_IN1_>": "", - ... - "body_hl7_IN1__": "", - ... -} -``` - -Once each segment has been converted into JSON, you can apply -[PARSE-AS-JSON](parse-as-json.md) or [JSON-PATH](json-path.md) directives on the record. diff --git a/wrangler-docs/directives/parse-as-json.md b/wrangler-docs/directives/parse-as-json.md deleted file mode 100644 index 9ee3bfe65..000000000 --- a/wrangler-docs/directives/parse-as-json.md +++ /dev/null @@ -1,69 +0,0 @@ -# Parse as JSON - -The PARSE-AS-JSON directive is for parsing a JSON object. The directive can operate on -String or JSONObject types. When the directive is applied, the high-level keys of the JSON -are appended to the original column name to create new column names. - - -## Syntax -``` -parse-as-json [] -``` - -* `` is the name of the column in the record that is a JSON object -* `` indicates the depth at which JSON object enumeration terminates - -## Usage Notes - -The PARSE-AS-JSON directive breaks down complex JSON into simpler -understandable and manageable chunks. When first applied on a JSON object, it breaks it -down into keys and values. The value could in itself be a JSON object on which you can -apply the PARSE-AS-JSON directive again to flatten it out further. - -The key names in the event object are appeneded to the column that is being applied JSON -parsing. The column names use dot notation. - -## Examples - -Using this record as an example, in a field `body`: -``` -{ - "id": 1, - "name": { - "first": "Root", - "last": "Joltie" - }, - "age": 22, - "weigth": 184, - "height": 5.8 -} -``` - -Applying this directive: -``` -parse-as-json body -``` - -would result in this record: - -| Field Name | Field Values | Field Type | -| ------------- | --------------------------------------- | ---------- | -| `body` | `{ ... }` | String | -| `body_id` | 1 | Integer | -| `body_name` | `{ "first": "Root", "last": "Joltie" }` | JSONObject | -| `body_age` | 22 | Integer | -| `body_weight` | 184 | Integer | -| `body_height` | 5.8 | Double | - -Applying the same directive, but just on the field `body_name` would result in this record: - -| Field Name | Field Values | Field Type | -| ----------------- | --------------------------------------- | ---------- | -| `body` | `{ ... }` | String | -| `body_id` | 1 | Integer | -| `body_name` | `{ "first": "Root", "last": "Joltie" }` | JSONObject | -| `body_name_first` | Root | String | -| `body_name_last` | Joltie | String | -| `body_age` | 22 | Integer | -| `body_weight` | 184 | Integer | -| `body_height` | 5.8 | Double | diff --git a/wrangler-docs/directives/parse-as-log.md b/wrangler-docs/directives/parse-as-log.md deleted file mode 100644 index fcaf4799d..000000000 --- a/wrangler-docs/directives/parse-as-log.md +++ /dev/null @@ -1,122 +0,0 @@ -# Parser as Log - -The PARSE-AS-LOG directive parses access log files, such as from Apache HTTPD and nginx servers. - - -## Syntax -``` -parse-as-log -``` - -## Usage Notes - -The PARSE-AS-LOG directive provides a generic log parser that you construct by -specifying the `` of the log line or the format in which the file was written. The -format, which specifies the configuration options of the log line, becomes the schema of -the access log lines as written by the service. - -In addition to the config options specified in the Apache HTTPD manual under [Custom Log -Formats](http://httpd.apache.org/docs/current/mod/mod_log_config.html#formats), these -options are recognized: - -* common -* combined -* combinedio -* referer -* agent - -For example: to parse either _combined log format_ or _common log format_, you can use: -``` -parse-as-log body combined -parse-as-log body common -``` - -If you have logs that are in a format that is not supported, you can specify a custom format. -In that case, `format` is a string of tokens specifying the log line format. - -For nginx, the `format` tokens are specified by -[log_format](http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format) and -[embedded variables](http://nginx.org/en/docs/http/ngx_http_core_module.html#variables). - - -## Examples - -The format for common log is: -``` -%h %l %u %t "%r" %>s %b -``` - -and a corresponding log line as a record that needs to be parsed, in that format: -``` -{ - "body": "127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb.gif HTTP/1.0\" 200 2326" -} -``` - -Applying either of these directives: -``` -parse-as-log body %h %l %u %t "%r" %>s %b -parse-as-log body common -``` - -would result in this record: -``` -{ - "ip_connection_client_host": "127.0.0.1", - "ip_connection_client_host.last": "127.0.0.1" - "number_connection_client_logname": null, - "number_connection_client_logname.last": null, - ... - ... - "http_path_request_firstline_uri_path": "/apache_pb.gif", - "http_ref_request_firstline_uri_ref": null -} -``` - -Using the Combined Log Format: -``` -%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\ -``` - -and a corresponding log line: -``` -127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start. -html" "Mozilla/4.08 [en] (Win98; I ;Nav)" -``` - -Complex formats, such as this, can also be parsed: -``` -%t %u [%D %h %{True-Client-IP}i %{UNIQUE_ID}e %r] %{Cookie}i %s \"%{User-Agent}i\" \"%{host}i\" %l %b %{Referer}i -``` - -Example log line for such a format (note: reformatted from a single line): -``` -[03/Dec/2013:10:53:59 +0000] - [32002 10.102.4.254 195.229.241.182 Up24RwpmBAwAAA1LWJsAAAAR GET -/content/dam/Central_Library/Street_Shots/Youth/2012/09sep/LFW/Gallery_03/LFW_SS13_SEPT_12_777.jpg. -image.W0N539E3452S3991w313.original.jpg HTTP/1.1] __utmc=94539802; dtCookie=EFD9D09B6A2E1789F1329FC1 -381A356A|_default|1; dtPC=471217988_141#_load_; Carte::KerberosLexicon_getdomain=6701c1320dd96688b2e -40b92ce748eee7ae99722; UserData=Username%3ALSHARMA%3AHomepage%3A1%3AReReg%3A0%3ATrialist%3A0%3ALangua -ge%3Aen%3ACcode%3Aae%3AForceReReg%3A0; UserID=1375493%3A12345%3A1234567890%3A123%3Accode%3Aae; USER_D -ATA=1375493%3ALSharma%3ALokesh%3ASharma%3Alokesh.sharma%40landmarkgroup.com%3A0%3A1%3Aen%3Aae%3A%3Ado -main%3A1386060868.51392%3A6701c1320dd96688b2e40b92ce748eee7ae99722; MODE=FONTIS; __utma=94539802.9110 -97326.1339390457.1386060848.1386065609.190; __utmz=94539802.1384758205.177.38.utmcsr=google|utmccn=(o -rganic)|utmcmd=organic|utmctr=(not%20provided); __kti=1339390460526,http%3A%2F%2Fwww.domain.com%2F,; -__ktv=28e8-6c4-be3-ce54137d9e48271; WT_FPC=id=2.50.27.157-3067016480.30226245:lv=1386047044279:ss=138 -6046439530; _opt_vi_3FNG8DZU=42880957-D2F1-4DC5-AF16-FEF88891D24E; __hstc=145721067.750d315a49c642681 -92826b3911a4e5a.1351772962050.1381151113005.1381297633204.66; hsfirstvisit=http%3A%2F%2Fwww.domain.co -m%2F|http%3A%2F%2Fwww.google.co.in%2Furl%3Fsa%3Dt%26rct%3Dj%26q%3Ddomain.com%26source%3Dweb%26cd%3D1% -26ved%3D0CB0QFjAA%26url%3Dhttp%3A%2F%2Fwww.domain.com%2F%26ei%3DDmuSULW3AcTLhAfJ24CoDA%26usg%3DAFQjCN -GvPmmyn8Bk67OUv-HwjVU4Ff3q1w|1351772962000; hubspotutk=750d315a49c64268192826b3911a4e5a; __ptca=14572 -1067.jQ7lN5U3C4eN.1351758562.1381136713.1381283233.66; __ptv_62vY4e=jQ7lN5U3C4eN; __pti_62vY4e=jQ7lN5 -U3C4eN; __ptcz=145721067.1351758562.1.0.ptmcsr=google|ptmcmd=organic|ptmccn=(organic)|ptmctr=domain. -com; RM=Lsharma%3Ac163b6097f90d2869e537f95900e1c464daa8fb9; wcid=Up2cRApmBAwAAFOiVhcAAAAH%3Af32e5e5f5 -b593175bfc71af082ab26e4055efeb6; __utmb=94539802.71.9.1386067462709; edge_auth=ip%3D195.229.241.182~ -expires%3D1386069280~access%3D%2Fapps%2F%2A%21%2Fbin%2F%2A%21%2Fcontent%2F%2A%21%2Fetc%2F%2A%21%2Fho -me%2F%2A%21%2Flibs%2F%2A%21%2Freport%2F%2A%21%2Fsection%2F%2A%21%2Fdomain%2F%2A~md5%3D5b47f341723924 -87dcd44c1d837e2e54; has_js=1; SECTION=%2Fcontent%2Fsection%2Finspiration-design%2Fstreet-shots.html; -JSESSIONID=b9377099-7708-45ae-b6e7-c575ffe82187; WT_FPC=id=2.50.27.157-3067016480.30226245:lv=138605 -3618209:ss=1386053618209; USER_GROUP=LSharma%3Afalse; NSC_wtfswfs_xfcgbsn40-41=ffffffff096e1a1d45525 -d5f4f58455e445a4a423660 200 "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)" -"www.domain.com" - 24516 http://www.domain.com/content/report/Street_Shots/Youth/Global_round_up/201 -3/01_Jan/mens_youth_stylingglobalround-up1.html -``` diff --git a/wrangler-docs/directives/parse-as-simple-date.md b/wrangler-docs/directives/parse-as-simple-date.md deleted file mode 100644 index 31b576c50..000000000 --- a/wrangler-docs/directives/parse-as-simple-date.md +++ /dev/null @@ -1,21 +0,0 @@ -# Parse as Simple Date - -The PARSE-AS-SIMPLE-DATE directive parses date strings. - - -## Syntax -``` -parse-as-simple-date -``` - - -## Usage Notes - -The PARSE-AS-SIMPLE-DATE directive will parse a date string, using a pattern string. If -the column is `null` or has already been parsed as a date, applying this directive is a -no-op. The column to be parsed as a date should be of type string. - - -## Examples - -See [FORMAT-DATE](format-date.md) for an explanation and example of these pattern strings. diff --git a/wrangler-docs/directives/parse-timestamp.md b/wrangler-docs/directives/parse-timestamp.md deleted file mode 100644 index 586e8e70b..000000000 --- a/wrangler-docs/directives/parse-timestamp.md +++ /dev/null @@ -1,22 +0,0 @@ -# Parse Timestamp - -The PARSE-TIMESTAMP directive parses column values representing unix timestamp as date. - - -## Syntax -``` -parse-timestamp : '' -``` - - -## Usage Notes - -The PARSE-TIMESTAMP directive will parse a column representing Unix timestamp. The column type can be string or long. - long or string as date objects. The directive also has optional parameter timeunit which can be seconds, milliseconds - or microseconds. The default timeunit is milliseconds. If the column is `null` or has already been parsed as a date, - applying this directive is a no-op. The column to be parsed as a date should be of type string. - - -## Examples -if the column has unix timestamp 1536332271894 or "1536332271894", then after applying this directive, -the column value represents date equivalent of UTC: Friday, September 7, 2018 2:57:51.894 PM. diff --git a/wrangler-docs/directives/parse-xml-to-json.md b/wrangler-docs/directives/parse-xml-to-json.md deleted file mode 100644 index beb136b0c..000000000 --- a/wrangler-docs/directives/parse-xml-to-json.md +++ /dev/null @@ -1,29 +0,0 @@ -# Parse XML to JSON - -The PARSE-XML-TO-JSON directive parses an XML document into a JSON structure. The -directive operates on an input column of type string. Application of this directive -transforms the XML into a JSON document, simplifying further parsing using the -[PARSE-AS-JSON](parse-as-json.md) directive. - - -## Syntax -``` -parse-xml-to-json [] [] -``` - -* `` is the name of the column in the record that is an XML document. -* `` indicates the depth at which the XML document parsing should terminate processing. -* `` An OPTIONAL boolean value that if true, then values will not be coerced into boolean or numeric values and will instead be left as strings. (as per `org.json.XML` rules) - The default value is `false` - - -## Usage Notes - -The PARSE-XML-TO-JSON directive efficiently parses an XML document and presents it as a -JSON object for further transformation. - -The XML document contains elements, attributes, and content text. A sequence of similar -elements is turned into a JSON array, which can then be further parsed using the -[PARSE-AS-JSON](parse-as-json.md) directive. - -During parsing, comments, prologs, DTDs, and `<[[ ]]>` notations are ignored. diff --git a/wrangler-docs/directives/quantize.md b/wrangler-docs/directives/quantize.md deleted file mode 100644 index fbffc2479..000000000 --- a/wrangler-docs/directives/quantize.md +++ /dev/null @@ -1,89 +0,0 @@ -# Quantize - -The QUANTIZE directive quantizes a column based on specified ranges. - - -## Syntax -``` -copy [,*] -``` - -* The `` column is the column to be quantized -* The `` column is the column where the results of the quantization are to be written - -The QUANTIZE directive quantizes based on values of the `` column. - - -## Usage Notes - -The QUANTIZE directive quantizes based on values from the `` column into the -`` column. - -Using the list of ranges specified in the options, it will `` into the -`` column if the source value matches one of the ranges. - -The last range that the source value matches is the one that will be used. - -If a range limit is missing, that range will fail without an error or exception. - -If the `` column already exists, the directive will override any existing -data in that column. - -The values in the `` column must be numeric. - -The `` of the range can be numeric or a string. - - -## Example - -Using these records as an example: -``` -[ - { - "body": 1 - }, - { - "body": 2 - }, - { - "body": 3 - }, - { - "body": 4 - }, - { - "body": 5 - }, -] -``` - -Applying this directives: -``` -quantize body body_q 1:2=20,3:4=40,5:10=max -``` - -would result in these records: -``` -[ - { - "body": 1, - "body_q": 20 - }, - { - "body": 2, - "body_q": 20 - }, - { - "body": 3, - "body_q": 40 - }, - { - "body": 4, - "body_q": 40 - }, - { - "body": 5, - "body_q": "max" - }, -] -``` diff --git a/wrangler-docs/directives/rename.md b/wrangler-docs/directives/rename.md deleted file mode 100644 index b1dd9883f..000000000 --- a/wrangler-docs/directives/rename.md +++ /dev/null @@ -1,55 +0,0 @@ -# Rename - -The RENAME directive renames an existing column in the record. - - -## Syntax -``` -rename -``` - -* `` is the name of an existing column to be renamed -* `` is the new name of the column - - -## Usage Notes - -The RENAME directive will rename the specified column name by replacing it with a new -name. The original column name will no longer be available in the record after this directive -has been applied to the record. - -The RENAME directive will only rename a column that exists. If the column name does not -exist in the record, the operation will be ignored without an error. - - -## Example - -Using this record as an example: -``` -{ - "x": 6.3, - "y": 187, - "codes": { - "a": "code1", - "b": 2 - } -} -``` - -Applying these directives: -``` -rename x height -rename y weight -``` - -would result in this record: -``` -{ - "height": 6.3, - "weight": 187, - "codes": { - "a": "code1", - "b": 2 - } -} -``` diff --git a/wrangler-docs/directives/send-to-error-and-continue.md b/wrangler-docs/directives/send-to-error-and-continue.md deleted file mode 100644 index 276bdb65b..000000000 --- a/wrangler-docs/directives/send-to-error-and-continue.md +++ /dev/null @@ -1,66 +0,0 @@ -# Send to Error and continue processing - -The SEND-TO-ERROR-AND-CONTINUE directive allows the filtering of records and directs the filtered -records that match a given condition to an error collector, but, continues processing with the record. -If the error collector is not connected as the next stage in a pipeline, then the filtered records will be dropped. - - -## Syntax -``` -send-to-error-and-continue [[metric-name] [error-message]] -``` - -The `` is a EL specifing the condition that governs if the record -should be sent to the error collector. Optionally you can specify the metric -name that should be registered everytime a record is sent to error combined -with optional ability to specify a error message that should be recorded. - - -## Usage Notes - -The most common use of the SEND-TO-ERROR-AND-CONTINUE directive is to evaluate data quality of the record. -This is a data cleansing directive to flag records that do not conform to specified rules. - -The record is *NOT* sent to the error collector (if connected) when the condition for the record -evaluates to `true`. But, a internal state is maintained of the checks that record fail. - -## Example - -Assume a record that has these three fields: - -* Name -* Age -* DOB - -As part of a data cleansing process, check that all the records being ingested follow -these rules: - -* `Name` is not empty -* `Age` is not empty and not less than 1 or greater 130 -* `DOB` is a valid date - -These directives will implement these rules; any records that match any of these -conditions will be sent to the error collector for further investigation: - -``` -send-to-error-and-continue exp:{ Name == null } -send-to-error-and-continue exp:{ Age.isEmpty() } -send-to-error-and-continue exp:{ !date:isDate(DOB) } -send-to-error-and-continue exp:{ Age.isEmpty()} age_empty 'Age field is empty' -send-to-error-and-continue exp:{ Name == null} name_null -send-to-error-and-continue exp:{ Age < 1 || Age > 130} 'Age not in range between 1 - 130' -``` -Each invocation of `send-to-error-and-continue` will increment a internal transient variable `dq_total` and `dq_failure` variable when the condition evaluates to `false`. Using the combination of transient variables, one can determine if it's worth proceeding further with processing of record. This can be achieved using the `send-to-error` to compute the percentage and set a threshold to emit the record as error. - -``` -set-column error_rate (dq_failure / dq_total)*100 -send-to-error error_rate > 50.0 -``` - -OR - -``` -send-to-error ((dq_failure / dq_total))*100 > 50.0 -``` - -In this case, for every condition that is matched the input record is emitted on the output. diff --git a/wrangler-docs/directives/send-to-error.md b/wrangler-docs/directives/send-to-error.md deleted file mode 100644 index b5fa97430..000000000 --- a/wrangler-docs/directives/send-to-error.md +++ /dev/null @@ -1,55 +0,0 @@ -# Send to Error - -The SEND-TO-ERROR directive allows the filtering of records and directs the filtered -records that match a given condition to an error collector. If the error collector is not -connected as the next stage in a pipeline, then the filtered records will be dropped. - - -## Syntax -``` -send-to-error [[metric-name] [error-message]] -``` - -The `` is a EL specifing the condition that governs if the record -should be sent to the error collector. Optionally you can specify the metric -name that should be registered everytime a record is sent to error combined -with optional ability to specify a error message that should be recorded. - - -## Usage Notes - -The most common use of the SEND-TO-ERROR directive is to filter out records that are not -part of clean data. This is a data cleansing directive to remove records that do not -conform to specified rules. - -The record is sent to the error collector (if connected) when the condition for the record -evaluates to `true`. If the condition evaluates to `false`, the record is passed on -untouched. - -## Example - -Assume a record that has these three fields: - -* Name -* Age -* DOB - -As part of a data cleansing process, check that all the records being ingested follow -these rules: - -* `Name` is not empty -* `Age` is not empty and not less than 1 or greater 130 -* `DOB` is a valid date - -These directives will implement these rules; any records that match any of these -conditions will be sent to the error collector for further investigation: - -``` -send-to-error Name == null -send-to-error Age.isEmpty() -send-to-error Age < 1 || Age > 130 -send-to-error !date:isDate(DOB) -send-to-error Age.isEmpty age_empty 'Age field is empty' -send-to-error Name == null name_null -send-to-error Age < 1 || Age > 130 'Age not in range between 1 - 130' -``` diff --git a/wrangler-docs/directives/set-charset.md b/wrangler-docs/directives/set-charset.md deleted file mode 100644 index 5755fe9b0..000000000 --- a/wrangler-docs/directives/set-charset.md +++ /dev/null @@ -1,19 +0,0 @@ -# Set Charset - -The SET-CHARSET directive sets the encoding of the current data and then converts it -from that to a UTF-8 string. - - -## Syntax -``` - set-charset -``` - -* `column` is the name of the column to be converted -* `charset` is the charset to be used in converting the column - - -## Usage Notes - -This directive sets the character set of `column` to `charset`. It decodes the column -using that `charset` and converts it to a UTF-8 String. diff --git a/wrangler-docs/directives/set-column.md b/wrangler-docs/directives/set-column.md deleted file mode 100644 index 004ef46d8..000000000 --- a/wrangler-docs/directives/set-column.md +++ /dev/null @@ -1,167 +0,0 @@ -# Set Column - -The SET-COLUMN directive sets the column value to the result of an expression execution. - - -## Syntax -``` -set-column -``` - -* The `` specifies the name of a column. If the column exists already, its value will be overwritten with the result of the specified expression. If the column does not exist, a new column will be created with the result of the specified expression. -* The `` is a valid [Apache Commons JEXL - expression](http://commons.apache.org/proper/commons-jexl/reference/syntax.html) - - -## Usage Notes - -The SET-COLUMN directive sets the column value to the result of the execution of an expression. - -Expressions are written in [Apache Commons -JEXL](http://commons.apache.org/proper/commons-jexl/reference/syntax.html) notation. - -Functions from other namespaces (such as `string` and `math`) can be called by adding the -namespace and a colon before the function, such as `math:ceil` or `string:upperCase`. - - -## Examples - -Using this record as an example: -``` -{ - "first": "Root", - "last": "Joltie", - "age": "32", - "hrlywage": "11.79", -} -``` - -Applying these directives: -``` -set-column name concat(last, ", ", first) -set-column is_adult age > 21 ? 'yes' : 'no' -set-column salary hrlywage*40*50 -set column raised_hrlywage var x; x = math:ceil(FLOAT(hrlywage)); x + 1 -set column salutation string:upperCase(concat(first, ' ', last)) -``` - -would result in this record: -``` -{ - "first": "Root", - "last": "Joltie", - "age": "32", - "hrlywage": "11.79", - "name": "Joltie, Root", - "is_adult": "yes", - "salary": 23580.0, - "raised_hrlywage": 13.0, - "salutation": "ROOT JOLTIE" -} -``` - -## Arithmetic and decimal operations example - -Arithmetic operations can be used in several ways. -- To apply a simple arithmetic operation to a single, non-Decimal column, use mathematical notation; for example, -``` -set-column :output wage1 * 2 -``` -- To apply an operation to a single column of type Decimal, use the `decimal` operations; for example, -``` -set-column :decimal_op_1 decimal:add(wage_1,25) -``` -- To apply operations to multiple columns (of any type), use the `arithmetic` operations, e.g. -``` -set-column :arithmetic_op_1 arithmetic:add(wage_1,wage_2) -``` -For more information on working with numbers in Wrangler, see https://cdap.atlassian.net/wiki/spaces/DOCS/pages/413466692/Working+with+numbers. - -Using this record as an example: -``` -{ - "first": "Root", - "last": "Joltie", - "id": "10097", - "age": "32", - "wage_1": "11.79", - "wage_2": "21151.26" - "wage_3": "1794" - "wage_4": "25000.98", - "wage_5": "2.5", - "wage_6": "5400", - "wage_7": "9820.49", - "wage_8": "520", - "wage_9": "16697.200" -} -``` -Applying these directives: -``` -set-column :arithmetic_op_1 arithmetic:add(wage_1,wage_2) -set-column :arithmetic_op_2 arithmetic:minus(wage_4,wage_3) -set-column :arithmetic_op_3 arithmetic:multiply(wage_3,wage_4) -set-column :arithmetic_op_4 arithmetic:divideq(wage_4,wage_5) -set-column :arithmetic_op_5 arithmetic:divider(wage_5,wage_6) -set-column :arithmetic_op_6 arithmetic:lcm(wage_6,wage_7) -set-column :arithmetic_op_7 arithmetic:equal(wage_7,wage_8) -set-column :arithmetic_op_8 arithmetic:max(wage_7,wage_8) -set-column :arithmetic_op_9 arithmetic:min(wage_7,wage_8) -set-column :decimal_op_1 decimal:add(wage_1,25) -set-column :decimal_op_2 decimal:subtract(wage_2,1000) -set-column :decimal_op_3 decimal:multiply(wage_3,3) -set-column :decimal_op_4 decimal:divideq(wage_4,2) -set-column :decimal_op_5 decimal:divider(wage_5,5) -set-column :decimal_op_6 decimal:abs(wage_6) -set-column :decimal_op_7 decimal:precision(wage_7) -set-column :decimal_op_8 decimal:scale(wage_7) -set-column :decimal_op_9 decimal:unscaled(wage_7) -set-column :decimal_op_10 decimal:decimal_left(wage_7,1) -set-column :decimal_op_11 decimal:decimal_right(wage_7,1) -set-column :decimal_op_12 decimal:pow(wage_8,2) -set-column :decimal_op_13 decimal:negate(wage_8) -set-column :decimal_op_14 decimal:strip_zero(wage_9) -set-column :decimal_op_15 decimal:sign(wage_9) -set-type :wage_2 decimal -``` -would result in this record: -``` -{ - "first": "Root", - "last": "Joltie", - "id": "10097", - "age": "32", - "wage_1": "11.79", - "wage_2": "21151.26" - "wage_3": "1794" - "wage_4": "25000.98", - "wage_5": "2.5", - "wage_6": "5400", - "wage_7": "9820.49", - "wage_8": "520", - "wage_9": "16697.200", - "arithmetic_op_1": "21163.05", - "arithmetic_op_2": "23206.98", - "arithmetic_op_3": "44851758.12", - "arithmetic_op_4": "10000.392", - "arithmetic_op_5": "2.5", - "arithmetic_op_6": "5303064600", - "arithmetic_op_7": "False", - "arithmetic_op_8": "9820.49", - "arithmetic_op_9": "520", - "decimal_op_1": "36.79", - "decimal_op_2": "20151.26", - "decimal_op_3": "5382", - "decimal_op_4": "12500.49", - "decimal_op_5": "2.5", - "decimal_op_6": "5400", - "decimal_op_7": "6", - "decimal_op_8": "2", - "decimal_op_9": "982049", - "decimal_op_10": "982.049", - "decimal_op_11": "98204.9", - "decimal_op_12": "270400", - "decimal_op_13": "-520", - "decimal_op_14": "16697.2", - "decimal_op_15": "1" -} -``` diff --git a/wrangler-docs/directives/set-headers.md b/wrangler-docs/directives/set-headers.md deleted file mode 100644 index cd03040e6..000000000 --- a/wrangler-docs/directives/set-headers.md +++ /dev/null @@ -1,115 +0,0 @@ -# Set Headers - -The SET-HEADERS directive sets the names of columns, in the order they are specified. - - -## Syntax -``` -set-headers [,*] -``` - -The `` specifies the new name of an existing column or columns. - - -## Usage Notes - -The most common use of the SET-HEADERS directive is to set the name of columns when a -CSV file is parsed. The column names will be applied to the record starting from the first -field, in the order that they are specified. - - -## Examples - -Using this record as an example: -``` -{ - "body": "1,2,3,4,5" -} -``` - -If you have parsed this `body` using the [PARSE-AS-CSV](parse-as-csv.md) -directive: -``` -parse-as-csv body , false -``` - -the resulting record would be: -``` -{ - "body": "1,2,3,4,5", - "body_1": "1", - "body_2": "2", - "body_3": "3", - "body_4": "4", - "body_5": "5" -} -``` - -If you then apply the SET COLUMNS directive: -``` -set-headers a,b,c,d,e -``` - -This would generate a record that has these column names: -``` -{ - "a": "1,2,3,4,5", - "b": "1", - "c": "2", - "d": "3", - "e": "4", - "body_5": "5" -} -``` - -Note that the last field (`body_5`) was not assigned the expected name. - -In order to correct this, either rename all the columns using: -``` -parse-as-csv body , false -set-headers body,a,b,c,d,e -``` -resulting in this record: -``` -{ - "body": "1,2,3,4,5", - "a": "1", - "b": "2", - "c": "3", - "d": "4", - "e": "5" -} -``` - -or use a [DROP](drop.md) directive: -``` -parse-as-csv body , false -drop body -set-headers a,b,c,d,e -``` - -The result would then be this record: -``` -{ - "a": "1", - "b": "2", - "c": "3", - "d": "4", - "e": "5" -} -``` - - -## Common Mistakes - -When using the SET-HEADERS directive, the number of fields in the record should be same as -number of column names in the SET-HEADERS directive. If they are not, then this directive -will partially name the record fields. - -The names of the columns are in a single option, separated by commas. Separating by spaces -will set only the name of the first column. - -When this directive is executed in a pipeline and the field "Name of field" to be -transformed is set to `*`, then all fields are added to the record causing issues with the -naming of the columns, as it would also include column names that are coming from the -input. diff --git a/wrangler-docs/directives/set-record-delim.md b/wrangler-docs/directives/set-record-delim.md deleted file mode 100644 index eaa267711..000000000 --- a/wrangler-docs/directives/set-record-delim.md +++ /dev/null @@ -1,15 +0,0 @@ -# Set Record Delim - -The SET-RECORD-DELIM directive sets the record delimiter. - - -## Syntax -``` - set-record-delim [] -``` - -## Usage Notes - -This directive applies the record delimiter (``) to generate additional records -using the ``. Optionally, a limit (``) can be specified to control the number of records -being generated as the delimiter is applied. diff --git a/wrangler-docs/directives/set-type.md b/wrangler-docs/directives/set-type.md deleted file mode 100644 index 055b2a68d..000000000 --- a/wrangler-docs/directives/set-type.md +++ /dev/null @@ -1,15 +0,0 @@ -# Set Type - -Convert data type of a column - -## Syntax -``` -set-type [ prop:{precision=}] -``` -The `` is converted to the type in ``. -Acceptable types are: int, short, long, float, double, decimal, string, bytes, boolean. -When `decimal` type is specified, two optional arguments can be given: -- ``: set the scale of the decimal value. -- ``: Java [rounding-mode](https://docs.oracle.com/javase/7/docs/api/java/math/RoundingMode.html) -to use when decimal value's scale is not equal to the set scale. By default, `HALF_EVEN` is assumed. -- ``: set the precision of the decimal value. \ No newline at end of file diff --git a/wrangler-docs/directives/set-variable.md b/wrangler-docs/directives/set-variable.md deleted file mode 100644 index effb90a43..000000000 --- a/wrangler-docs/directives/set-variable.md +++ /dev/null @@ -1,17 +0,0 @@ -# Set a transient variable - -The SET-VARIABLE directive increments the value of the variable that is -local to the input record being processed. - -## Syntax -``` -set-variable -``` - -The `` is set the result of ``. - -## Usage Notes - -This directive is applied only within the scope of the record being processed. -The transient state is reset, once the system starts processing of the new record. - diff --git a/wrangler-docs/directives/split-by-separator.md b/wrangler-docs/directives/split-by-separator.md deleted file mode 100644 index 5bb319eb3..000000000 --- a/wrangler-docs/directives/split-by-separator.md +++ /dev/null @@ -1,7 +0,0 @@ -# Split By Separator - -The SPLIT-BY-SEPARATOR directive splits a column based on a separator into two columns. - -## Deprecated - -Use the [SPLIT-TO-COLUMNS](split-to-columns.md) directive instead. diff --git a/wrangler-docs/directives/split-email.md b/wrangler-docs/directives/split-email.md deleted file mode 100644 index f2832a88f..000000000 --- a/wrangler-docs/directives/split-email.md +++ /dev/null @@ -1,95 +0,0 @@ -# Split Email - -The SPLIT-EMAIL directive splits an email ID into an account and its domain. - - -## Syntax -``` -split-email -``` - -The `` is a column containing an email address. - - -## Usage Notes - -The SPLIT-EMAIL directive will parse email address into its constituent parts: account -and domain. - -After splitting the email address, the directive will create two new columns, appending to -the original column name: - -* `column_account` -* `column_domain` - -If the email address cannot be parsed correctly, the additional columns will still be -generated, but they would be set to `null` depending on the parts that could not be parsed. - - -## Examples - -Using this record as an example: - -``` -{ - "name": "Root, Joltie", - "email_address": "root@example.com", -} -``` - -Applying this directive: -``` -split-email email_address -``` - -would result in this record: -``` -{ - "name": "Root, Joltie", - "email_address": "root@example.com", - "email_address_account": "root", - "email_address_domain": "example.com" -} -``` - -In case of any errors parsing: when the email address field in the record is `null`: -``` -{ - "email": null -} -``` - -this would result in the record: -``` -{ - "email": null, - "email_account": null, - "email_domain": null -} -``` - -Using these records as an example, with a variety of email IDs: -``` -[ - { "email": "root@example.org" }, - { "email": "joltie.xxx@gmail.com" }, - { "email": "joltie_xxx@hotmail.com" }, - { "email": "joltie.'@.'root.'@'.@yahoo.com" }, - { "email": "Joltie, Root " }, - { "email": "Joltie,Root" }, - { "email": "Joltie,Root", "email_account": "joltie.root", "email_domain": "hotmail.com" }, - { "email": "Joltie,Root", "email_account": "joltie.root", "email_domain": "hotmail.com" }, - { "email": "Joltie,Root -``` - -The `` is split into one or more columns around matches of the specified regular -expression ``. - - -## Usage Notes - -The SPLIT-TO-COLUMNS directive takes a column, applies the regular expression separator, -and then creates multiple columns from the split. The name of the columns are in the -format: -``` -{ - "column": "...", - "column_1": "...", - "column_2": "...", - "column_3": "...", - ... - "column_n": "..." -} -``` - -Regular expressions allows the use of complex search patterns when splitting the data in -the column. It supports standard -[Java regular expression](https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html) -constructs. - -The original column, when it is split into columns, generates new columns for the record. -`column_1`, `column_2`, through to `column_n` are the new columns that contain the `n` -parts of the split generated from applying this directive. - -**Note:** This directive can only operate on columns of type string. - - -## Examples - -If we have a `` pattern of `,` (a comma) over the string: - -`This will be split 1,This will be split 2,This will be split 3,Split 4` - -This will generate four new columns: -``` -{ - "1": "This will be split 1", - "2": "This will be split 2", - "3": "This will be split 3", - "4": "Split 4" -} -``` - -Using this record as an example: -``` -{ - "id": 1, - "codes": "USD|AUD|AMD|XCD" -} -``` - -Applying this directive: -``` -split-to-columns codes \| -``` - -**Note:** A backslash is required to escape the pipe character (`|`) as it is an optional -separator in a regex pattern. - -This would result in four columns being generated, with each split value being assigned to -the column `codes`: -``` -{ - "id": 1, - "codes": "USD|AUD|AMD|XCD", - "codes_1": "USD", - "codes_2": "AUD", - "codes_3": "AMD", - "codes_4": "XCD" -} -``` diff --git a/wrangler-docs/directives/split-to-rows.md b/wrangler-docs/directives/split-to-rows.md deleted file mode 100644 index d637a5018..000000000 --- a/wrangler-docs/directives/split-to-rows.md +++ /dev/null @@ -1,72 +0,0 @@ -# Split to Rows - -The SPLIT-TO-ROWS directive splits a column based on a separator into multiple records, -making a copy of the record for each column value generated by splitting. - - -## Syntax -``` -split-to-rows -``` - -The `` is split based on the ``, which can be defined as a regular -expression (regex). - - -## Usage Notes - -The SPLIT-TO-ROW directive takes a column, applies the regular expression separator, and -then creates multiple rows from the split. - -Regular expressions allows the use of complex search patterns when splitting the data in -the column. It supports standard Java regular expression constructs. - -If the `` regular expression pattern does not match any part of the input string, -then no additional rows are generated. - -Where there is a match, and the match splits the input string into _n_ strings, then _n_ -rows created by copying other columns will be generated. - -**Note:** This directive can only operate on columns of type string. - - -## Examples - -If we have a `` pattern of `\n` (a linefeed) over the string: - -`This will be split 1\nThis will be split 2` - -This will generate two output records with the `column` having these values: -``` -[ - { "column": "This will be split 1" }, - { "column": "This will be split 2" } -] -``` - -Using this record as an example: -``` -{ - "id": 1, - "codes": "USD|AUD|AMD|XCD", -} -``` - -Applying this directive: -``` -split-to-rows codes \| -``` - -**Note:** A backslash is required to escape the pipe character (`|`) as it is an optional -separator in a regex pattern. - -This would result in four records being generated, with each split value being assigned to -the column `codes`: -``` -[ - { "id": 1, "codes": "USD" }, - { "id": 1, "codes": "AUD" }, - { "id": 1, "codes": "AMD" }, - { "id": 1, "codes": "XCD" } -] -``` diff --git a/wrangler-docs/directives/split-url.md b/wrangler-docs/directives/split-url.md deleted file mode 100644 index ff77ef084..000000000 --- a/wrangler-docs/directives/split-url.md +++ /dev/null @@ -1,78 +0,0 @@ -# Split URL - -The SPLIT-URL directive splits a URL into protocol, authority, host, port, path, filename, and query. - - -## Syntax -``` -split-url -``` - -The `` is a column containing the URL. - - -## Usage Notes - -The SPLIT-URL directive will parse the URL into its constituents. Upon splitting the -URL, the directive creates seven new columns by appending to the original column name: - -* `column_protocol` -* `column_authority` -* `column_host` -* `column_port` -* `column_path` -* `column_filename` -* `column_query` - -If the URL cannot be parsed correctly, an exception is throw. If the URL column does not -exist, columns with a `null` value are added to the record. - - -## Examples - -Using this record as an example: -``` -{ - "url": "http://example.com:80/docs/books/tutorial/index.html?name=networking#DOWNLOADING" -} -``` - -Applying this directive: -``` -split-url url -``` - -would result in this record: -``` -{ - "url": "http://example.com:80/docs/books/tutorial/index.html?name=networking#DOWNLOADING", - "url_protocol": "http", - "url_authority": "example.com:80", - "url_host": "example.com", - "url_port": 80, - "url_path": "/docs/books/tutorial/index.html", - "url_filename": "/docs/books/tutorial/index.html?name=networking", - "url_query": "name=networking" -} -``` - -When the URL field in the record is `null`: -``` -{ - "url": null -} -``` - -the directive will generate: -``` -{ - "url": null, - "url_protocol": null, - "url_authority": null, - "url_host": null, - "url_port": null, - "url_path": null, - "url_filename": null, - "url_query": null -} -``` diff --git a/wrangler-docs/directives/stemming.md b/wrangler-docs/directives/stemming.md deleted file mode 100644 index 4f4f4d6a9..000000000 --- a/wrangler-docs/directives/stemming.md +++ /dev/null @@ -1,46 +0,0 @@ -# Stemming - -The STEMMING directive applies the Porter stemmer algorithm for English words. The -Porter stemmer has excellent trade-off between speed, readability, and accuracy. It stems -using a set of rules (transformations) applied in a succession of steps. Generally, it -applies approximately 60 rules in 6 steps. - - -## Syntax - -``` -stemming -``` - -The `` contains a bag of words of type string array or type string list. - - -## Usage Notes - -The STEMMING directive applies the stemmer on a bag of tokenized words. Applying this -directive creates an additional `_porter` column. Depending on the type of the -object the field is holding, it will be transformed appropriately. - - -## Example - -Using this record, a tokenized bag of words as a string array or list of strings, as an -example: -``` -{ - "word" : { "how are you doing ? do you have apples ?" } -} -``` - -Applying this directive: -``` -stemming word -``` - -The result would be this record: -``` -{ - "word": { "how are you doing ? do you have apples ?" }, - "word_porter": { "how", "ar", "you", "do", "do", "you", "have", "appl" } -} -``` diff --git a/wrangler-docs/directives/swap.md b/wrangler-docs/directives/swap.md deleted file mode 100644 index a28c80809..000000000 --- a/wrangler-docs/directives/swap.md +++ /dev/null @@ -1,40 +0,0 @@ -# Swap - -The SWAP directive swaps column names of two columns. - - -## Syntax -``` -swap -``` - -## Usage Notes - -The SWAP directive renames `` to the name of `` and `` to -the name of ``. If the either of the two columns are not present, execution of -the directive fails. - - -## Example - -Using this record as an example: -``` -{ - "a": 1, - "b": "sample string" -} -``` - -Applying either of these directives: -``` -swap a b -swap b a -``` - -would result in this record: -``` -{ - "b": 1, - "a": "sample string" -} -``` diff --git a/wrangler-docs/directives/table-lookup.md b/wrangler-docs/directives/table-lookup.md deleted file mode 100644 index 240c48d82..000000000 --- a/wrangler-docs/directives/table-lookup.md +++ /dev/null @@ -1,53 +0,0 @@ -# Table Lookup - -The TABLE-LOOKUP directive performs lookups into Table datasets. - - -## Syntax -``` -table-lookup -``` - -* `` is an existing column that exists in both the current records and the table -* `
` is a Table Dataset that has a column named by `` - - -## Usage Notes - -The TABLE-LOOKUP directive uses a column as the lookup key into a specified Table -dataset for each record. The column should be of type string. The values in the row of the -Table will be parsed as strings and placed in the record in new columns, the names -constructed from combining the lookup key and the row column name with an underscore. - - -## Example - -This example represents a lookup into the `customerTable` dataset of type Table, where the -record's field name `customerUserId` will be used as the lookup key. - -Suppose that this data is in the Table `customerTable`: - -| CustomerUserId | City | -| ---------------- | ----------------- | -| bobistheman | Palo Alto, CA | -| joe1984 | Los Angeles, CA | -| randomUserqwerty | New York City, NY | - -If the input records to the directive are: - -| CustomerUserId | Product | Quantity | -| -------------- | ------- | -------- | -| bobistheman | Apples | 10 | -| joe1984 | Bicycle | 1 | - -Applying this directive: -``` -table-lookup customerUserId customerTable -``` - -would result in these output records: - -| CustomerUserId | Product | Quantity | CustomerUserId_City | -| -------------- | ------- | -------- | ------------------- | -| bobistheman | Apples | 10 | Palo Alto, CA | -| joe1984 | Bicycle | 1 | Los Angeles, CA | diff --git a/wrangler-docs/directives/text-distance.md b/wrangler-docs/directives/text-distance.md deleted file mode 100644 index f940f163c..000000000 --- a/wrangler-docs/directives/text-distance.md +++ /dev/null @@ -1,64 +0,0 @@ -# Text Distance - -The TEXT-DISTANCE directive measures the difference between two sequences of characters, -using a specified method of measuring the distance between strings. - - -## Syntax -``` -text-distance -``` - -* `` specifies the method to be used to measure the distance between the strings of - `` and `` -* `` is the column the resulting difference will be stored in. If it exists, it - will be overwritten. If it does not exist, it will be created. - -**Note:** If either or both of the two columns do not exist, no error will be returned, -and the destination column will still be created or overwritten. - - -## Usage Notes - -These distance measure methods are supported: - -* `block-distance` -* `block` -* `cosine` -* `damerau-levenshtein` -* `dice` -* `euclidean` -* `generalized-jaccard` -* `identity` -* `jaccard` -* `jaro` -* `levenshtein` -* `longest-common-subsequence` -* `longest-common-substring` -* `overlap-cofficient` -* `simon-white` - - -## Example - -Using this record as an example: -``` -{ - "tweet1": "CheeseBurgers are God tellin us everything's gonna be cool...", - "tweet2": "Forgiveness can open up a whole new perspective on life, Forgiveness is an act of God's grace." -} -``` - -Applying this directive: -``` -text-distance block tweet1 tweet2 distance -``` - -would result in this record: -``` -{ - "tweet1": "CheeseBurgers are God tellin us everything's gonna be cool...", - "tweet2": "Forgiveness can open up a whole new perspective on life, Forgiveness is an act of God's grace." - "destination": 26.0 -} -``` diff --git a/wrangler-docs/directives/text-metric.md b/wrangler-docs/directives/text-metric.md deleted file mode 100644 index 830a43786..000000000 --- a/wrangler-docs/directives/text-metric.md +++ /dev/null @@ -1,67 +0,0 @@ -# Text Metric - -The TEXT-METRIC directive provides a metric (from 0 to 1) measuring the difference -between two sequence of characters, using a specified method of measuring the distance -between strings. - - -## Syntax -``` -text-metric -``` - -* `` specifies the method to be used to measure the distance between the strings of - `` and `` -* `` is the column the resulting difference will be stored in. If it exists, it - will be overwritten. If it does not exist, it will be created. - -**Note:** If either or both of the two columns do not exist, no error will be returned, -and the destination column will still be created or overwritten. - - -## Usage Notes - -The value of the metric is always between 0 and 1. - -These distance measure methods are supported: - -* `block-distance` -* `block` -* `cosine` -* `damerau-levenshtein` -* `dice` -* `euclidean` -* `generalized-jaccard` -* `identity` -* `jaccard` -* `jaro` -* `levenshtein` -* `longest-common-subsequence` -* `longest-common-substring` -* `overlap-cofficient` -* `simon-white` - - -## Example - -Using this record as an example: -``` -{ - "tweet1": "CheeseBurgers are God tellin us everything's gonna be cool...", - "tweet2": "Beer is God's gift to humankind." -} -``` - -Applying this directive: -``` -text-metric longest-common-subsequence tweet1 tweet2 distance -``` - -would result in this record: -``` -{ - "tweet1": "CheeseBurgers are God tellin us everything's gonna be cool...", - "tweet2": "Beer is God's gift to humankind." - "destination": 0.26229507 -} -``` diff --git a/wrangler-docs/directives/timestamp-to-datetime.md b/wrangler-docs/directives/timestamp-to-datetime.md deleted file mode 100644 index 0b394dc6c..000000000 --- a/wrangler-docs/directives/timestamp-to-datetime.md +++ /dev/null @@ -1,20 +0,0 @@ -# Timestamp To Datetime - -The TIMESTAMP-TO-DATETIME directive converts a timestamp value to datetime - - -## Syntax -``` -timestamp-to-datetime -``` - - -## Usage Notes - -The TIMESTAMP-TO-DATETIME directive converts timestamp values to -datetime values . - -If the column is `null` applying this directive is a no-op. - -## Examples -timestamp-to-datetime :col1 \ No newline at end of file diff --git a/wrangler-docs/directives/trim.md b/wrangler-docs/directives/trim.md deleted file mode 100644 index 078ebede4..000000000 --- a/wrangler-docs/directives/trim.md +++ /dev/null @@ -1,81 +0,0 @@ -# Trimming Spaces - -The TRIM, LTRIM, and RTRIM directives trim whitespace from both sides, -left side or right side of a string values they are applied to. - - -## Syntax -``` -trim -ltrim -rtrim -``` - -The directive performs an in-place trimming of space in the value specified -by the `` - -## Usage - -The trim directives honors UNICODE space characters. Following are the -characters that are recognized as spaces by TRIM, LTRIM and RTRIM. - -| Character | Description | -| -------------- | ----------------- | -| \t | Character tabulation | -| \n | Line Feed (LF) | -| \u000B | Line Tabulation | -| \f | Form Feed (FF) | -| \r | Carriage Return (CR) | -| " " | Space | -| \u0085 | Next line (NEL) | -| \u00A0 | No Break Space | -| \u1680 | OGHAM Space Mark | -| \u180E | Mongolian Vowel Separator | -| \u2000 | EN Quad | -| \u2001 | EM Quad | -| \u2002 | EN Space | -| \u2003 | EM Space | -| \u2004 | Three Per EM space | -| \u2005 | Four Per EM space | -| \u2006 | Six Per EM space | -| \u2007 | Figure Space | -| \u2008 | Puncatuation Space | -| \u2009 | Thin Space | -| \u200A | Hair Space | -| \u2028 | Line Separator | -| \u2029 | Paragraph Separator | -| \u202F | Narrow No-Break Space | -| \u205F | Medium Mathematical Space | -| \u3000 | Ideographic Space | - -## Example - -Using this record as an example: -``` -{ - "id": 1, - "gender": " male ", - "fname": " Root ", - "lname": " JOLTIE ", - "address": " 67 MARS AVE, MARSCIty, Marsville, Mars" -} -``` - -Applying these directives -``` -trim gender -ltrim fname -rtrim lname -ltrim address -``` - -would result in this record: -``` -{ - "id": 1, - "gender": "male", - "fname": "Root ", - "lname": " JOLTIE", - "address": "67 MARS AVE, MARSCIty, Marsville, Mars" -} -``` diff --git a/wrangler-docs/directives/url-decode.md b/wrangler-docs/directives/url-decode.md deleted file mode 100644 index 8389ac1c7..000000000 --- a/wrangler-docs/directives/url-decode.md +++ /dev/null @@ -1,38 +0,0 @@ -# URL Decode - -The URL-DECODE directive decodes a string from the `application/x-www-form-urlencoded` -MIME format to a string. - - -## Syntax - -``` -url-decode -``` - -The `` contains an encoded URL to be decoded. - - -## Usage Notes - -The conversion process is the reverse of that used by the [URL-ENCODE](url-encode.md) -directive. It is assumed that all characters in the encoded string are one of the -following: `a` through `z`, `A` through `Z`, `0` through `9`, and `-`, `_`, `.`, and `*`. -The character `%` is allowed but is interpreted as the start of a special escaped sequence. - -See https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1 for details. - -These rules are applied in the conversion: - -* The alphanumeric characters `a` through `z`, `A` through `Z`, and `0` through `9` remain - unchanged -* The special characters `.`, `-`, `*`, and `_` remain unchanged -* The plus sign (`+`) is converted into a space character ` ` -* A sequence of the form `%xy` will be treated as representing a byte where `xy` is the - two-digit hexadecimal representation of the 8-bit byte. Then, all substrings that contain - one or more of these byte sequences consecutively will be replaced by the character(s) - whose encoding would result in those consecutive bytes. The encoding scheme used to decode - these characters may be specified, or if unspecified, the default encoding of the platform - will be used. - -**Note:** Uses UTF-8 as the decoding scheme for the string. diff --git a/wrangler-docs/directives/url-encode.md b/wrangler-docs/directives/url-encode.md deleted file mode 100644 index f7a46f6b5..000000000 --- a/wrangler-docs/directives/url-encode.md +++ /dev/null @@ -1,33 +0,0 @@ -# URL Encode - -The URL-ENCODE directive encodes a string to the `application/x-www-form-urlencoded` -MIME format. - - -## Syntax -``` -url-encode -``` - -The `` contains a URL to be encoded. - - -## Usage Notes - -See https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1 for details of these rules. - -When encoding a string, these rules apply: - -* The alphanumeric characters `a` through `z`, `A` through `Z`, and `0` through `9` remain - unchanged -* The special characters `.`, `-`, `*`, and `_` remain unchanged -* The space character ` ` is converted into a plus sign (`+`) -* All other characters are considered unsafe and are first converted into one or more - bytes using an encoding scheme. Each byte is then represented by a 3-character string - `%xy`, where `xy` is the two-digit hexadecimal representation of the byte. The recommended - encoding scheme to use is UTF-8. However, for compatibility reasons, if an encoding is not - specified, then the default encoding of the platform is used. - -**Note:** Uses UTF-8 as the encoding scheme for the string. - -See also the [URL-DECODE](url-decode.md) directive. diff --git a/wrangler-docs/directives/write-as-csv.md b/wrangler-docs/directives/write-as-csv.md deleted file mode 100644 index 4bdf11f52..000000000 --- a/wrangler-docs/directives/write-as-csv.md +++ /dev/null @@ -1,42 +0,0 @@ -# Write as CSV - -The WRITE-AS-CSV directive converts a record into CSV format. - - -## Syntax -``` -write-as-csv -``` - -The `` will contain the CSV representation of the record. - - -## Usage Notes - -The WRITE-AS-CSV directive converts the entire record into CSV. If the `` already -exists, it will overwrite it. - - -## Example - -Using this record as an example: -``` -{ - "int": 1, - "string": "this, is a string." -} -``` - -Applying this directive: -``` -write-as-csv body -``` - -would result in this record: -``` -{ - "body": "1,\"this, is a string.\", - "int": 1, - "string": "this, is a string." -} -``` diff --git a/wrangler-docs/directives/write-as-json-map.md b/wrangler-docs/directives/write-as-json-map.md deleted file mode 100644 index b3c599c7d..000000000 --- a/wrangler-docs/directives/write-as-json-map.md +++ /dev/null @@ -1,44 +0,0 @@ -# Write as JSON Map - -The WRITE-AS-JSON-MAP directive converts the record into a JSON map. - - -## Syntax -``` -write-as-json-map -``` - -The `` will contain a JSON map of all the fields in the record. - - -## Usage Notes - -The WRITE-AS-JSON-MAP directive converts the entire record into a JSON map. If the -`` already exists, it will overwrite it. - -Depending on the type of object a field is holding, it will be transformed appropriately. - - -## Example - -Using this record as an example: -``` -{ - "int": 1, - "string": "this, is a string." -} -``` - -Applying this directive: -``` -write-as-json-map body -``` - -would result in this record: -``` -{ - "body": { "int":1, "string": "this, is a string." }, - "int": 1, - "string": "this, is a string." -} -``` diff --git a/wrangler-docs/directives/write-as-json-object.md b/wrangler-docs/directives/write-as-json-object.md deleted file mode 100644 index afff39f40..000000000 --- a/wrangler-docs/directives/write-as-json-object.md +++ /dev/null @@ -1,53 +0,0 @@ -# Write as JSON object - -The WRITE-AS-JSON-OBJECT directive composes a JSON object based on the fields specified -and writes it to the destination column. - - -## Syntax -``` -write-as-json-object [,]* -``` - -The `` will contain a JSON object composed of all the fields -specified in the ``. - - -## Usage Notes - -The WRITE-AS-JSON-OBJECT directive composes a JSON Object based on the fields or columns -specified to be added to the object. - -Depending on the type of object a field is holding, it will be transformed appropriately -to the JSON types. NULL are also handled and converted to JsonNull. - - -## Example - -Using this record as an example: -``` -{ - "number": 1, - "text": "this, is a string.", - "height" : 1.5, - "weight" : 1.67, - "address" : null -} -``` - -And applying this directive: -``` -write-as-json-object body number,text,height,address -``` - -would result in this record: -``` -{ - "body": { "number":1, "text": "this, is a string.", "height" : 1.5, "address" : null }, - "number": 1, - "text": "this, is a string.", - "height" : 1.5, - "weight" : 1.67, - "address" : null -} -``` diff --git a/wrangler-docs/exclusion-and-aliasing.md b/wrangler-docs/exclusion-and-aliasing.md deleted file mode 100644 index b864e7589..000000000 --- a/wrangler-docs/exclusion-and-aliasing.md +++ /dev/null @@ -1,91 +0,0 @@ -# Excluding (Restricting) and Aliasing Directives - -When an organization wants to expose the data prep tool to its end users, -they would like to have the ability to restrict (exclude) directives -that are not considered "safe". Safe is a very subjective term and its specification varies from -organization to organization. Also, the "safe"ness of an data operation -could go through an approval process, and later be excluded from the restricted -list. So, in short, the capability to restrict and un-restrict some directives has to be -easily configurable. - -A second common use-case we have seen is that an organization is accustomed -to a organizational jargon and it is hard to adapt by the user. In order to support -continuation of usage of their jargon, Data Prep has added the capability to alias a -directive through a simple configuration. - -## Feature - -There are two configuration supported by Data Prep now - -* Exclusion (a.k.a Restriction) and -* Aliasing - -Exclusion allows administrators to specify a list of directives either -root directive or aliased directive that should be restricted from -invocation and as well as application. - -Aliasing allows one to create a new name for a root directive. - -## Scope - -Both Exclusion and Aliasing are namespace wide - meaning they are applicable -only within the namespace were the configuration has been applied. - -## Configuration - -Configuration is currently specified as a JSON object with main keys -namely - -* `exclusions` -* `aliases` - -Following is a high-level JSON object - -``` -{ - "exclusions" : [ - "root-directive", - ... - "root-directive" - ], - - "aliases" : { - "alias" : "alias-name", - ... - "alias" : "alias-name" - } -} -``` - -### Exclusion - -It's a array of directives that are either loaded by default or could be -loaded as UDD (User Defined Directives) or they can also be aliased directives. - -## Aliases - -Is map of aliased directive and the actual directive name to which it's aliased. - -## Applying Configuration - -A service endpoint exists to apply the configuration. In order to apply -the configuration, use following REST call. - -``` -curl -s -X POST @/ \ - "http://:11015/v3/namespaces//apps/dataprep/services/service/methods/config" -``` - -And example would be - -``` -curl -s -X POST --data-binary @/tmp/wrangler-config.json \ - http://localhost:11015/v3/namespaces/default/apps/dataprep/services/service/methods/config \ - | python -mjson.tool -{ - "message": "Successfully updated configuration.", - "status": 200 -} -``` - - diff --git a/wrangler-docs/functions/date-and-time-functions.md b/wrangler-docs/functions/date-and-time-functions.md deleted file mode 100644 index 4d5fed41b..000000000 --- a/wrangler-docs/functions/date-and-time-functions.md +++ /dev/null @@ -1,1053 +0,0 @@ -# Date and Time -You can use the date and time functions to perform various operations on dates and times in the Wrangler. -Functions that specify `dates`, `times`, or `datetimes` in the arguments use strings with specific formats: - - For a `date`, the format is `%yyyy-%mm-%dd` and is of java type `LocalDate`. - - For a `time`, the format is `%hh:%nn:%ss`. If extended to include microseconds, the format is `%hh:%nn:%ss.x` where - `x` gives the number of decimal places seconds is given to. `time` is of type `LocalTime`. - - For a `datetime`, the format is the date format followed by the time format. `datetime` is of type `LocalDateTime`. - -Functions that have the days of week in the argument take a string that specifies the day of the week. -The day is specified as a three-letter abbreviation, or the full name. For example, the strings "mon" and "monday" -are both valid. - -## GetDate -Returns the `date` represented by the given input. - -#### Namespace -`datetime` - -#### Input -date(`String`) - -#### Output -date (`LocalDate`) - -#### Example -Use this function to convert the String to a date. -``` -set-column date datetime:GetDate('2008-08-18') -``` - -## GetTime -Returns the `time` represented by the given input. - -#### Namespace -`datetime` - -#### Input -time(`String`) - -#### Output -time (`LocalTime`) - -#### Example -Use this function to convert the String to a time. -``` -set-column date datetime:GetTime('22:30:52') -``` - -## GetDateTime -Returns the `datetime` represented by the given input. - -#### Namespace -`datetime` - -#### Input -datetime (`String`) - -#### Output -datetime (`LocalDateTime`) - -#### Example -Use this function to convert the String to a datetime. -``` -set-column date datetime:GetDateTime('2008-08-18 22:30:52') -``` - -## CurrentDate -Returns the `date` when the function is invoked. - -#### Namespace -`datetime` - -#### Input -None - -#### Output -date (`LocalDate`) - -#### Example -Use this function to add the current date to a column. -``` -set-column date datetime:CurrentDate() -``` - -## CurrentTime -Returns `time` when the function in invoked. - -#### Namespace -`datetime` - -#### Input -None - -#### Output -time (`LocalTime`) - -#### Example -Use this function to add the current time to a column. -``` -set-column time datetime:CurrentTime() -``` - -## CurrentTimeMS -Returns `time` in milliseconds when the function in invoked. - -#### Namespace -`datetime` - -#### Input -None - -#### Output -time (`long`) - -#### Example -Use this function to add the current time to a column. -``` -set-column timems datetime:CurrentTimeMS() -``` - -## CurrentDateTime -Returns `datetime` that include `date` and `time` when the function is invoked. - -#### Namespace -`datetime` - -#### Input -None - -#### Output -datetime (`LocalDateTime`) - -#### Example -Use this function to add the current datetime to a column. -``` -set-column datetime datetime:CurrentDateTime() -``` - -## CurrentTimestamp -Returns the current `timestamp` in default timezone when the function is invoked. - -#### Namespace -`datetime` - -#### Input -None - -#### Output -timestamp (`ZonedDateTime`) - -#### Example -Use this function to add the current timestamp to a column. -``` -set-column timestamp datetime:CurrentTimestamp() -``` - -## CurrentTimestampMS -Returns `timestamp` that include `date` and `time`. The `time` component includes milli seconds. - -#### Namespace -`datetime` - -#### Input -None - -#### Output -timestamp (`long`) - -#### Example -Use this function to add the current timestamp including milli seconds to a column. -``` -set-column timestampms datetime:CurrentTimestampMS() -``` - -## CurrentTimestampMicro -Returns `timestamp` that include `date` and `time`. The `time` component includes micro seconds. - -#### Namespace -`datetime` - -#### Input -None - -#### Output -timestamp (`long`) - -#### Example -Use this function to add the current timestamp including micro seconds to a column. -``` -set-column timestampmicro datetime:CurrentTimestampMicro() -``` - -## CurrentTimestampNano -Returns `timestamp` that include `date` and `time`. The `time` component includes nano seconds. - -#### Namespace -`datetime` - -#### Input -None - -#### Output -timestamp (`long`) - -#### Example -Use this function to add the current timestamp including nanoseconds to a column. -``` -set-column timestampnano datetime:CurrentTimestampNano() -``` - -## DateFromDaysSince -Returns a date object by adding an integer to a baseline date. -The integer can be negative to return a date that is earlier than the baseline date. -If baseline date is not provided, the current date will be used. -If the number is null, it will be treated as 0. - -#### Namespace -`datetime` - -#### Input -number (`Integer`), \[baseline date(`LocalDate`)\] - -#### Output -date (`LocalDate`) - -#### Example -If `offset` contains the integer 18250, and `basedate` contains the date `1958–08–18`, -then the following functions are equivalent, and return the date `2008–08–05` - -``` -set-column result datetime:DateFromDaysSince(18250, datetime:GetDate('1958-08-18')) -set-column result datetime:DateFromDaysSince(offset, basedate) -``` - -If `a` contains the integer -1, and `b` contains the date `1958–08–18`, -then the following functions are equivalent, and return the date `1958–08–17`: - -``` -set-column result datetime:DateFromDaysSince(-1, datetime:GetDate('1958-08-18')) -set-column result datetime:DateFromDaysSince(a, b) -``` - -## DateFromComponents -Returns a date from the given years, months, and day of month that is given as three separate values. -If any input is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -years (`Integer`), month(`Integer`), day of month(`Integer`) - -#### Output -date (`LocalDate`) - -#### Example -If `year` contains the value `2010`, `month` contains the value `12`, -and `dayofmonth` contains the value `2`, then the two following functions are equivalent, -and return the date `2010–12–02` - -``` -set-column result datetime:DateFromComponents(2010, 12, 2) -set-column result datetime:DateFromComponents(year, month, dayofmonth) -``` - -## DateFromJulianDay -Returns a date from the given Julian day number. The day number will be treated as 0 if it is null. - -#### Namespace -`datetime` - -#### Input -number (`Long`) - -#### Output -date (`LocalDate`) - -#### Example -If `day` contains the value `2454614`, then the two following functions are equivalent, -and return the date `2008–05–27` - -``` -set-column result datetime:DateFromJulianDay(2454614) -set-column result datetime:DateFromJulianDay(day) -``` - -## DateOffsetByComponents -Returns the given date, with offsets applied from the given year offset, month offset, and day of month offset, -given as three separate values. The offset values can each be positive, zero, or negative. -If baseline is null, null will be returned. If the offset is null, it will be treated as 0. - -#### Namespace -`datetime` - -#### Input -baseline date(`LocalDate`), year offset(`Integer`), month of year offset(`Integer`), day of month offset(`Integer`) - -#### Output -date (`LocalDate`) - -#### Example -If `basedate` contains `2011-08-18` and `yearoffset` contains the value `2`, `monthoffset` contains the value `0`, -and `dayofmonthoffset` contains the value `0`, then the two following functions are equivalent, and -return the date `2013–08–18`. - -``` -set-column result datetime:DateOffsetByComponents(datetime:GetDate('2011-08-18'),2,0,0) -set-column result datetime:DateOffsetByComponents(basedate,yearoffset,monthoffset,dayofmonthoffset) -``` -If `basedate` contains `2011-08-18` and `yearoffset` contains the value `-2`, `monthoffset` contains the value `0`, -and `dayofmonthoffset` contains the value `0`, then the two following functions are equivalent, and -return the date `2009–08–18`. -``` -set-column result datetime:DateOffsetByComponents(datetime:GetDate('2011-08-18'),-2,0,0) -set-column result datetime:DateOffsetByComponents(basedate,yearoffset,monthoffset,dayofmonthoffset) -``` - -## DaysSinceFromDate -Returns the number of days from the source date to the given date. If any date is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -first date(`LocalDate`), second date(`LocalDate`) - -#### Output -days between source and given date (`Long`) - -#### Example -If `sourcedate` contains the date `1958–08–18` and `givendate` contains the date `2008–08–18`, -then the two following functions are equivalent, and return the `long` value `18263` - -``` -set-column result datetime:DaysSinceFromDate(datetime:GetDate('2008-08-18'),datetime:GetDate('1958-08-18')) -set-column result datetime:DaysSinceFromDate(sourcedate,givendate) -``` - -## DaysInMonth -Returns the number of days in the month in the given date. If date is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -date(`LocalDate`) - -#### Output -days in month(`Integer`) - -#### Example -If `basedate` contains the date `1958–08–18`, then the two following functions are equivalent, -and return the integer value `31`. - -``` -set-column result datetime:DaysInMonth(datetime:GetDate('1958-08-18')) -set-column result datetime:DaysInMonth(basedate) -``` - -## DaysInYear -Returns the number of days in the year in the given date. If date is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -date(`LocalDate`) - -#### Output -days in year(`Integer`) - -#### Example -If `basedate` contains the date `2012–08–18`, then the two following functions are equivalent, and -return the `integer` value `366`. -``` -set-column result datetime:DaysInYear(datetime:GetDate('2012-08-18')) -set-column result datetime:DaysInYear(basedate) -``` -If `basedate` contains the date `2011–08–18`, then the two following functions are equivalent, and -return the `integer` value `365`. -``` -set-column result datetime:DaysInYear(datetime:GetDate('2011-08-18')) -set-column result datetime:DaysInYear(basedate) -``` - -## DateOffsetByDays -Returns the given date offset by the given number of days. The offset value can be positive, zero, or negative. -If date is null, null will be returned. If offset is null, it will be treated as 0. - -#### Namespace -`datetime` - -#### Input -base date(`LocalDate`), day offset(`Integer`) - -#### Output -date(`LocalDate`) - -#### Example -If `basedate` contains `2011-08-18` and `daysoffset` contains the value `2`, then the two following functions -are equivalent, and return the date `2011–08–20`. -``` -set-column result datetime:DateOffsetByDays(datetime:GetDate('2011-08-18'), 2) -set-column result datetime:DateOffsetByDays(basedate, daysoffset) -``` -If `basedate` contains `2011-08-18` and `daysoffset` contains the value `-31`, then the two following -functions are equivalent, and return the date `2011–07–18`. -``` -set-column result datetime:DateOffsetByDays(datetime:GetDate('2011-08-18'), -31) -set-column result datetime:DateOffsetByDays(basedate, daysoffset) -``` - -## HoursFromTime -Returns the hours portion of a time. If time is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -time(`LocalTime`) - -#### Output -hours(`Integer`) - -#### Example -If `basetime` contains the time `22:30:00`, then the following two functions are equivalent, -and return the integer value `22`. -``` -set-column result datetime:HoursFromTime(datetime:GetTime('22:30:00')) -set-column result datetime:HoursFromTime(basetime) -``` - -## JulianDayFromDate -Returns a Julian day number from the given date. If date is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -date(`LocalDate`) - -#### Output -Julian day(`Long`) - -#### Example -If `basedate` contains the date `2008–05–27`, then the two following functions are equivalent, -and return the value `2454614`. -``` -set-column result datetime:JulianDayFromDate(datetime:GetDate('2008-05-27')) -set-column result datetime:JulianDayFromDate(basedate) -``` - -## MilliSecondsFromTime -Returns the millisecond portion of a time. If time is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -time(`LocalTime`) - -#### Output -milliseconds(`Integer`) - -#### Example -If `basetime` contains the time `22:30:00.32`, then the following function returns the value `320`: -``` -set-column result datetime:MilliSecondsFromTime(datetime:GetTime('22:30:00.32')) -set-column result datetime:MilliSecondsFromTime(basetime) -``` - -## MicroSecondsFromTime -Returns the microsecond portion of a time. If time is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -time(`LocalTime`) - -#### Output -microseconds(`Integer`) - -#### Example -If `basetime` contains the time `22:30:00.32`, then the following function returns the value `320000`: -``` -set-column result datetime:MicroSecondsFromTime(datetime:GetTime('22:30:00.32')) -set-column result datetime:MicroSecondsFromTime(basetime) -``` - -## NanoSecondsFromTime -Returns the nanosecond portion of a time. If time is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -time(`LocalTime`) - -#### Output -nano seconds(`Integer`) - -#### Example -If `basetime` contains the time `22:30:00.32`, then the following function returns the value `320000000`: -``` -set-column result datetime:NanoSecondsFromTime(datetime:GetTime('22:30:00.32')) -set-column result datetime:NanoSecondsFromTime(basetime) -``` - -## MidnightSecondsFromTime -Returns the number of seconds from midnight to the given time. If time is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -time(`LocalTime`) - -#### Output -seconds(`Integer`) - -#### Example -If `basetime` contains the time `00:30:52`, then the two following functions are equivalent, -and return the value `1852`: -``` -set-column result datetime:MidnightSecondsFromTime(datetime:GetTime('00:30:52')) -set-column result datetime:MidnightSecondsFromTime(basetime) -``` - -## MinutesFromTime -Returns the minutes portion of a time. If time is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -time(`LocalTime`) - -#### Output -minutes(`Integer`) - -#### Example -If `basetime` contains the time `22:30:52`, then the two following functions are equivalent, -and return the value `30`: -``` -set-column result datetime:MinutesFromTime(datetime:GetTime('22:30:52')) -set-column result datetime:MinutesFromTime(basetime) -``` - -## MonthDayFromDate -Returns the day of the month from the given date. If date is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -date(`LocalDate`) - -#### Output -day(`Integer`) - -#### Example -If `basedate` contains the time `2008-08-18`, then the two following functions are equivalent, -and return the value `18`: -``` -set-column result datetime:MonthDayFromDate(datetime:GetDate('2008-08-18')) -set-column result datetime:MonthDayFromDate(basedate) -``` - -## MonthFromDate -Returns the month number from the given date. If date is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -date(`LocalDate`) - -#### Output -month number of year (`Integer`) - -#### Example -If `basedate` contains the time `2008-08-18`, then the two following functions are equivalent, -and return the value `8`: -``` -set-column result datetime:MonthFromDate(datetime:GetDate('2008-08-18')) -set-column result datetime:MonthFromDate(basedate) -``` - -## NextWeekdayFromDate -Returns the date of the specified day of the week soonest after the source date. The day of the week is specified -as the full name, for example, thursday, or a three-letter abbreviation, for example, `mon`. -If source date is null, null will be returned. If the day of the week is null, source will be returned. - -#### Namespace -`datetime` - -#### Input -source date(`LocalDate`), day of the week(`String`) - -#### Output -date(`LocalDate`) - -#### Example -If `sourcedate` contains the time `2008-08-18` and the day of the week that is specified is `Thursday` contained -in `dayofweek`, then the two following functions are equivalent, and return the value `8`: -``` -set-column result datetime:NextWeekdayFromDate(datetime:GetDate('2008-08-18'), 'thursday') -set-column result datetime:NextWeekdayFromDate(datetime:GetDate('2008-08-18'), 'thu') -set-column result datetime:NextWeekdayFromDate(basedate, 'thursday') -set-column result datetime:NextWeekdayFromDate(basedate, dayofweek) -``` - -## NthWeekdayFromDate -Returns the date of the specified day of the week offset by the specified number of weeks from the source date. -The day of the week is specified as the full name, for example, thursday, or a three-letter abbreviation, for example, -thu. The offset values can be positive, negative, or zero. -If source date is null, null will be returned. If day of the week is null, source will be returned. -If offset is null, it will be treated as 0. - -#### Namespace -`datetime` - -#### Input -source date(`LocalDate`), day of the week(`String`), week offset(`Integer`) - -#### Output -date(`LocalDate`) - -#### Example -If `basedate` contains the date `2009-08-18` and `Thursday` is specified with an offset of `1`, then the two following -functions are equivalent, and return the value `2009–08–20`: -``` -set-column result datetime:NthWeekdayFromDate(datetime:GetDate('2009-08-18'), 'thursday', 1) -set-column result datetime:NthWeekdayFromDate(basedate, 'thu', 1) -``` -The first occurrence of Thursday is returned. In the proceeding example, the Thursday occurs in the same week as the -date `2009-08-18`. The date `2009-08-18` is a `Tuesday`. If `basedate` contains the date `2009-08-18` and `Thursday` is -specified with an offset of `-2`, then the two following functions are equivalent, and return the value `2009–08–06`: -``` -set-column result datetime:NthWeekdayFromDate(datetime:GetDate('2009-08-18'), 'thursday', -2) -set-column result datetime:NthWeekdayFromDate(basedate, 'thu', -2) -``` - -## PreviousWeekdayFromDate -Returns the date of the specified day of the week that is the most recent day before the source date. -The day of the week is specified as the full name, for example, thursday, or a three-letter abbreviation, -for example, thu. -If source is null, null will be returned. If the day of the week is null, source will be returned. - -#### Namespace -`datetime` - -#### Input -source date(`LocalDate`), day of the week(`String`) - -#### Output -date(`LocalDate`) - -#### Example -If `basedate` contains the date `2008-08-18` and `Thursday` is specified, then the two following -functions are equivalent, and return the value `2008–08–14`: -``` -set-column result datetime:PreviousWeekdayFromDate(datetime:GetDate('2008-08-18'), 'thursday') -set-column result datetime:PreviousWeekdayFromDate(basedate, 'thu') -``` - -## SecondsFromTime -Returns the seconds portion of a time. If time is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -time(`LocalTime`) - -#### Output -second(`Integer`) - -#### Example -If `basetime` contains the time `22:30:52`, then the two following functions are equivalent, -and return the value `52`: -``` -set-column result datetime:SecondsFromTime(datetime:GetTime('22:30:52')) -set-column result datetime:SecondsFromTime(basetime) -``` - -## SecondsSinceFromDateTime -Returns the number of seconds between two datetime objects. If either datetime is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -datetime(`LocalDateTime`), datetime base(`LocalDateTime`) - -#### Output -second(`Integer`) - -#### Example -If `datetime` contains the datetime `2008–08–18 22:30:52`, and `basedatetime` contains the datetime -`2008–08–19 22:30:52`, then the two following functions are equivalent, and return the value `-86400`: -``` -set-column result datetime:SecondsSinceFromDateTime(datetime:GetDateTime('2008–08–18 22:30:52'), - datetime:GetDateTime('2008–08–19 22:30:52')) -set-column result datetime:SecondsSinceFromDateTime(datetime, basedatetime) -``` - - -## TimeDate -Returns the system time and date as a formatted string. - -#### Namespace -`datetime` - -#### Input -none - -#### Output -current datetime(`LocalDateTime`) - -#### Example -If the job was run at 4.21 pm on June 20th 2008, then the following function returns the string `16:21:48 20 Jun 2008` -``` -set-column result datetime:TimeDate() -``` - -## TimeFromComponents -Returns a time from the given hours, minutes, seconds, and nanoseconds, given as four separate values. -If any input is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -hours(`Integer`),minutes(`Integer`),seconds(`Integer`),nano(`Integer`), - -#### Output -time(`LocalTime`) - -#### Example -If `hour` contains the value `10`, `minutes` contains the value `12`, `seconds` contains the value `2`, -and `microseconds` contains `0`, then the two following functions are equivalent, and return the time `10:12:02.0` -``` -set-column result datetime:TimeFromComponents(10, 12, 2, 0) -set-column result datetime:TimeFromComponents(hour, minutes, seconds, microseconds) -``` - -## TimeFromMidnightSeconds -Returns the time given the number of seconds since midnight. If seconds is null, midnight will be returned. - -#### Namespace -`datetime` - -#### Input -seconds(`int`) - -#### Output -time(`LocalTime`) - -#### Example -If `midnightseconds` contains the value `240`, then the two following functions are equivalent, and return the -value `00:04:00` -``` -set-column result datetime:TimeFromMidnightSeconds(240) -set-column result datetime:TimeFromMidnightSeconds('240') -set-column result datetime:TimeFromMidnightSeconds(midnightseconds) -``` - -## TimeOffsetByComponents -Returns the time, with offsets applied from the base time with hour offset, minute offset, and second offset, -each given as separate values. -If time is null, null will be returned. If the offset is null, it will be treated as 0. - -#### Namespace -`datetime` - -#### Input -time(`LocalTime`), hours offset(`Integer`), minutes offset(`Integer`), seconds offset(`Integer`) - -#### Output -time(`LocalTime`) - -#### Example -If `basetime` contains `14:05:29` and `hoursoffset` contains the value `2`, `minutesoffset` contains the value `0`, -`secondsoffset` contains the value `20`, then the two following functions are equivalent, and return the time `16:05:49` -``` -set-column result datetime:TimeOffsetByComponents(datetime:GetTime('14:05:29'), 2, 0, 20) -set-column result datetime:TimeOffsetByComponents(datetime:GetTime('14:05:29'), 2, 0, 20) -``` - -## GetDateTime -Returns a datetime from the given date and time. If any input is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -date(`LocalDate`), time(`LocalTime`) - -#### Output -datetime(`LocalDateTime`) - -#### Example -If `basedate` contains the date `2008–08–18` and `basetime` contains the time `22:30:52`, then the two following -functions are equivalent, and return the datetime `2008–08–18 22:30:52` -``` -set-column result datetime:GetDateTime(datetime:GetDate('2008–08–18'), datetime:GetTime('22:30:52')) -set-column result datetime:GetDateTime(basedate, basetime) -``` - -## DateTimeFromSecondsSince -Returns a datetime that is derived from the number of seconds from the base datetime object. -If datetime is null, null will be returned. If seconds is null, time will be returned. - -#### Namespace -`datetime` - -#### Input -seconds(`Integer`), base datetime(`LocalDateTime`) - -#### Output -datetime(`LocalDateTime`) - -#### Example -If `seconds` contains the value `2563` and `basedatetime` contains the datetime `2008–08–18 22:30:52`, -then the two following functions are equivalent, and return the datetime `2008–08–18 23:13:35` - -``` -set-column result datetime:DateTimeFromSecondsSince(2563, datetime:GetDateTime('2008–08–18 22:30:52')) -set-column result datetime:DateTimeFromSecondsSince(seconds, basedatetime) -``` - -## DateTimeFromEpoch -Returns a datetime from the given UNIX epoch time specified in seconds. This method assumes the timestamp is in UTC. -If timestamp is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -timestamp(`Long`) - -#### Output -datetime(`LocalDateTime`) - -#### Example -If `timestamp` contains the value `1234567890`, -then the two following functions are equivalent, and return the datetime `2009-02-13 23:31:30` - -``` -set-column result datetime:DateTimeFromEpoch(1234567890) -set-column result datetime:DateTimeFromEpoch(timestamp) -``` - -## DateTimeFromTime -Returns a datetime from the given time and datetime objects. The value in the time object overwrites the -time value in the datetime object so that only the date part is used from the datetime. -If datetime is null, null will be returned. If time is null, datetime will be returned. - -#### Namespace -`datetime` - -#### Input -time(`LocalTime`), datetime(`LocalDateTime`) - -#### Output -datetime(`LocalDateTime`) - -#### Example -If `basetime` contains the time `12:03:22` and `basedatetime` contains the datetime `2008–08–18 22:30:52`, -then the two following functions are equivalent, and return the datetime `2008–08–18 12:03:22` -``` -set-column result datetime:DatetimeFromTime(datetime:GetTime('12:03:22'), datetime:GetDateTime('2008–08–18 22:30:52')) -set-column result datetime:DatetimeFromTime(basetime, basedatetime) -``` - -## DateTimeOffsetByComponents -Returns the datetime, with offsets applied from the base datetime with year offset, month offset, -day offset, hour offset, minute offset, and second offset, each given as separate values. -If datetime is null, null will be returned. If offset is null, it will be treated as 0. - -#### Namespace -`datetime` - -#### Input -base datetime(`LocalDateTime`), year offset(`Integer`), month offset(`Integer`), day offset(`Integer`), -hour offset(`Integer`),minute offset(`Integer`), seconds offset(`Integer`) - -#### Output -datetime(`LocalDateTime`) - -#### Example -If `basedatetime` contains `2009-08-18 14:05:29` and `yearoffset` contains `0`, `monthsoffset` contains the value `2`, -`daysoffset` contains the value `-4`, `hoursoffset` contains the value `2`, `minutessoffset` contains the value `0`, -`secondsoffset` contains the value `20`, then the two following functions are equivalent, and return the -datetime `2009-10-14 16:05:49`. -``` -set-column result datetime:DateTimeOffsetByComponents(datetime:GetDateTime('2009-08-18 14:05:29'), 0, 2, -4, 2, 0, 20) -set-column result datetime:DateTimeOffsetByComponents(basedatetime, yearoffset, monthoffset, dayoffset, - hoursoffset, minutesoffset, secondsoffset) -``` - -## DateTimeOffsetBySeconds -Returns the datetime, with offsets applied from the base datetime with seconds offset. -If datetime is null, null will be returned. If seconds is null, it will be treated as 0. - -#### Namespace -`datetime` - -#### Input -base datetime(`LocalDateTime`), seconds offset(`Integer`) - -#### Output -datetime(`LocalDateTime`) - -#### Example -If `basedatetime` contains `2009-08-18 14:05:29` and `secondsoffset` contains the value `32760`, then the two -following functions are equivalent, and return the datetime `2009-08-18 23:11:29` -``` -set-column result datetime:DateTimeOffsetBySeconds(datetime:GetDateTime('2009-08-18 14:05:29'), 32760) -set-column result datetime:DateTimeOffsetBySeconds(basedatetime, secondsoffset) -``` - -## EpochFromDateTime -Returns a UNIX Epoch time value in seconds from the given datetime in UTC time. -If datetime is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -datetime(`LocalDateTime`) - -#### Output -epoch time(`Long`) - -#### Example -If `basedatetime` contains the value `2009–02–13 23:31:30`, then the two following functions are equivalent, -and return the value `1234567890` -``` -set-column result datetime:EpochFromDateTime(datetime:GetDateTime('2009–02–13 23:31:30')) -set-column result datetime:EpochFromDateTime(basedatetime) -``` - -## EpochFromTimestamp -Returns a UNIX Epoch time value in seconds from the given timestamp in UTC time. -If timestamp is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -timestamp(`ZonedDateTime`) - -#### Output -epoch time(`Long`) - -#### Example -If `basetimestamp` contains the value `2009–02–13 23:31:30`, then the two following functions are equivalent, -and return the value `1234567890` -``` -set-column result datetime:EpochFromDateTime(2009–02–13 23:31:30[UTC])) -set-column result datetime:EpochFromDateTime(basetimestamp) -``` - - -## WeekdayFromDate -Returns the day number of the week from the given date. Base day optionally specifies the day -that is regarded as the first in the week and is Sunday by default. -If date is null, null will be returned. If startOfWeek is null, the date's day number of the week will be returned. - -#### Namespace -`datetime` - -#### Input -date(`LocalDate`), [Base day(`String`)] - -#### Output -day(`Integer`) - -#### Example -If `basedate` contains the date `2008-08-18`, then the two following functions are equivalent, and return the value `1` -``` -set-column result datetime:WeekdayFromDate(datetime:GetDate('2008-08-18')) -set-column result datetime:WeekdayFromDate(basedate) -``` -If `basedate` contains the date `2008-08-18`, and `baseday` contains `saturday`, then the two following -functions are equivalent, and return the value `2` -``` -set-column result datetime:WeekdayFromDate(datetime:GetDate('2008-08-18'), "saturday") -set-column result datetime:WeekdayFromDate(basedate,baseday) -``` - -## YeardayFromDate -Returns the day number in the year from the given date. If date is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -date(`LocalDate`) - -#### Output -day(`Integer`) - -#### Example -If `basedate` contains the date `2008-08-18`, then the two following functions are equivalent, -and return the value `231` -``` -set-column result datetime:YeardayFromDate(datetime:GetDate('2008-08-18')) -set-column result datetime:YeardayFromDate(basedate) -``` - -## YearFromDate -Returns the year from the given date. If date is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -date(`LocalDate`) - -#### Output -day(`Integer`) - -#### Example -If `basedate` contains the date `2008-08-18`, then the two following functions are equivalent, -and return the value `2008` -``` -set-column result datetime:YearFromDate(datetime:GetDate('2008-08-18')) -set-column result datetime:YearFromDate(basedate) -``` - -## YearweekFromDate -Returns the week number in the year from the given date. If date is null, null will be returned. - -#### Namespace -`datetime` - -#### Input -date(`LocalDate`) - -#### Output -week(`Integer`) - -#### Example -If `basedate` contains the date `2008-08-18`, then the two following functions are equivalent, -and return the value `33` -``` -set-column result datetime:YearweekFromDate(datetime:GetDate('2008-08-18')) -set-column result datetime:YearweekFromDate(basedate) -``` \ No newline at end of file diff --git a/wrangler-docs/functions/date-functions.md b/wrangler-docs/functions/date-functions.md deleted file mode 100644 index 03d20f5b8..000000000 --- a/wrangler-docs/functions/date-functions.md +++ /dev/null @@ -1,84 +0,0 @@ -# Date Manipulation Functions - -These are functions for detecting the type of data. These functions can be used in the -directives `filter-row-if-false`, `filter-row-if-true`, `filter-row-on`, or -`send-to-error`. - - -## Pre-requisite - -These can be used only in the `filter-*` or `send-to-error` directives. - - -## Namespace - -All type-related functions are in the namespace `type`. - - -## Example Data - -Upload to the workspace `body` an input record such as: - -``` -{ - "name": { - "fname": "Joltie", - "lname": "Root", - "mname": null - }, - "date": "12/17/2019", - "time": "10:45 PM", - "boolean": "true", - "coordinates": [ - 12.56, - 45.789 - ], - "numbers": [ - 1, - 2.1, - 3, - null, - 4, - 5, - 6, - null - ], - "moves": [ - { "a": 1, "b": "X", "c": 2.8}, - { "a": 2, "b": "Y", "c": 232342.8}, - { "a": 3, "b": "Z", "c": null}, - { "a": 4, "b": "U"} - ], - "integer": "1", - "double": "2.8", - "empty": "", - "float": 45.6, - "aliases": [ - "root", - "joltie", - "bunny", - null - ] -} -``` - -Once such a record is loaded, apply these directives before applying any of the functions -listed here: -``` - parse-as-json body - columns-replace s/body_//g -``` - -## List of Type Functions - -Each function returns `true` if the condition is met, `false` otherwise. - -| Function | Condition | Example | -| ------------------- | ----------------------------------------- | ---------------------------------------- | -| `isDate(string)` | Tests if string value is a date field | `filter-row-if-true type:isDate(date)` | -| `isTime(string)` | Tests if string value is a date time | `filter-row-if-true type:isTime(time)` | -| `isBoolean(string)` | Tests if string value is a booelan field | `send-to-error !type:isBoolean(boolean)` | -| `isNumber(string)` | Tests if string value is a number field | `send-to-error !type:isNumber(integer)` | -| `isEmpty(string)` | Tests if string value is empty | `send-to-error !type:isEmpty(empty)` | -| `isDouble(string)` | Tests if string value is a double field | `send-to-error !type:isDouble(double)` | -| `isInteger(string)` | Tests if string value is an integer field | `send-to-error !type:isInteger(integer)` | diff --git a/wrangler-docs/functions/ddl-functions.md b/wrangler-docs/functions/ddl-functions.md deleted file mode 100644 index 9999eb58a..000000000 --- a/wrangler-docs/functions/ddl-functions.md +++ /dev/null @@ -1,84 +0,0 @@ -# Data Definition Manipulation Functions - -These are functions for detecting the type of data. These functions can be used in the -directives `filter-row-if-false`, `filter-row-if-true`, `filter-row-on`, or -`send-to-error`. - - -## Pre-requisite - -These can be used only in the `filter-*` or `send-to-error` directives. - - -## Namespace - -All type-related functions are in the namespace `type`. - - -## Example Data - -Upload to the workspace `body` an input record such as: - -``` -{ - "name": { - "fname": "Joltie", - "lname": "Root", - "mname": null - }, - "date": "12/17/2019", - "time": "10:45 PM", - "boolean": "true", - "coordinates": [ - 12.56, - 45.789 - ], - "numbers": [ - 1, - 2.1, - 3, - null, - 4, - 5, - 6, - null - ], - "moves": [ - { "a": 1, "b": "X", "c": 2.8}, - { "a": 2, "b": "Y", "c": 232342.8}, - { "a": 3, "b": "Z", "c": null}, - { "a": 4, "b": "U"} - ], - "integer": "1", - "double": "2.8", - "empty": "", - "float": 45.6, - "aliases": [ - "root", - "joltie", - "bunny", - null - ] -} -``` - -Once such a record is loaded, apply these directives before applying any of the functions -listed here: -``` - parse-as-json body - columns-replace s/body_//g -``` - -## List of Type Functions - -Each function returns `true` if the condition is met, `false` otherwise. - -| Function | Condition | Example | -| ------------------- | ----------------------------------------- | ---------------------------------------- | -| `isDate(string)` | Tests if string value is a date field | `filter-row-if-true type:isDate(date)` | -| `isTime(string)` | Tests if string value is a date time | `filter-row-if-true type:isTime(time)` | -| `isBoolean(string)` | Tests if string value is a booelan field | `send-to-error !type:isBoolean(boolean)` | -| `isNumber(string)` | Tests if string value is a number field | `send-to-error !type:isNumber(integer)` | -| `isEmpty(string)` | Tests if string value is empty | `send-to-error !type:isEmpty(empty)` | -| `isDouble(string)` | Tests if string value is a double field | `send-to-error !type:isDouble(double)` | -| `isInteger(string)` | Tests if string value is an integer field | `send-to-error !type:isInteger(integer)` | diff --git a/wrangler-docs/functions/dq-functions.md b/wrangler-docs/functions/dq-functions.md deleted file mode 100644 index 2fa1d9353..000000000 --- a/wrangler-docs/functions/dq-functions.md +++ /dev/null @@ -1,84 +0,0 @@ -# Data Quality Functions - -These are functions for detecting the type of data. These functions can be used in the -directives `filter-row-if-false`, `filter-row-if-true`, `filter-row-on`, or -`send-to-error`. - - -## Pre-requisite - -These can be used only in the `filter-*` or `send-to-error` directives. - - -## Namespace - -All type-related functions are in the namespace `type`. - - -## Example Data - -Upload to the workspace `body` an input record such as: - -``` -{ - "name": { - "fname": "Joltie", - "lname": "Root", - "mname": null - }, - "date": "12/17/2019", - "time": "10:45 PM", - "boolean": "true", - "coordinates": [ - 12.56, - 45.789 - ], - "numbers": [ - 1, - 2.1, - 3, - null, - 4, - 5, - 6, - null - ], - "moves": [ - { "a": 1, "b": "X", "c": 2.8}, - { "a": 2, "b": "Y", "c": 232342.8}, - { "a": 3, "b": "Z", "c": null}, - { "a": 4, "b": "U"} - ], - "integer": "1", - "double": "2.8", - "empty": "", - "float": 45.6, - "aliases": [ - "root", - "joltie", - "bunny", - null - ] -} -``` - -Once such a record is loaded, apply these directives before applying any of the functions -listed here: -``` - parse-as-json body - columns-replace s/body_//g -``` - -## List of Type Functions - -Each function returns `true` if the condition is met, `false` otherwise. - -| Function | Condition | Example | -| ------------------- | ----------------------------------------- | ---------------------------------------- | -| `isDate(string)` | Tests if string value is a date field | `filter-row-if-true type:isDate(date)` | -| `isTime(string)` | Tests if string value is a date time | `filter-row-if-true type:isTime(time)` | -| `isBoolean(string)` | Tests if string value is a booelan field | `send-to-error !type:isBoolean(boolean)` | -| `isNumber(string)` | Tests if string value is a number field | `send-to-error !type:isNumber(integer)` | -| `isEmpty(string)` | Tests if string value is empty | `send-to-error !type:isEmpty(empty)` | -| `isDouble(string)` | Tests if string value is a double field | `send-to-error !type:isDouble(double)` | -| `isInteger(string)` | Tests if string value is an integer field | `send-to-error !type:isInteger(integer)` | diff --git a/wrangler-docs/functions/geo.md b/wrangler-docs/functions/geo.md deleted file mode 100644 index 0d731c4dc..000000000 --- a/wrangler-docs/functions/geo.md +++ /dev/null @@ -1,83 +0,0 @@ -# Geo - -These are functions for detecting if the location point is inside the given set of geofences. -The function can be used in the directive `filter-row-if-false`, `filter-row-if-true`, `filter-row-on`, -`set column`, `set-column` or `send-to-error`. - -## Pre-requisite - -The Geofences should be represented in [geojson](https://geojson.org/) format. The location coordinates should be -represented as Double type values . - -## Example data - -`fence` in the input is defined as json specified below: - -``` -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "properties": {}, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -122.05870628356934, - 37.37943348292772 - ], - [ - -122.05724716186525, - 37.374727268782294 - ], - [ - -122.04634666442871, - 37.37493189292912 - ], - [ - -122.04608917236328, - 37.38175237839049 - ], - [ - -122.05870628356934, - 37.37943348292772 - ] - ] - ] - } - } - ] -} -``` - -## InFence -Checks if the given coordinate is inside any of the given polygonal geofences based on the winding number algorithm. -If any of the inputs is null, this method will return false - -### Namespace -`geo` - -### Input -latitude(`double`), longitude(`double`), json fence (`string`) - -### Output -true/false - -### Example -if `latitude` contains `37.378990156513105` and `longitude` contains `-122.05076694488525` and -`fence` contains the previously mentioned json string, then resulting operation is `true` - -``` - set-column infence geo:InFence(37.378990156513105, -122.05076694488525, fence) - send-to-error !geo:InFence(latitude,longitude,fence) -``` - -When `latitude` contains `43.46089378008257` and `longitude` contains `-462.49145507812494` and -`fence` contains a json `string`, then resulting operation is `false` - -``` - set-column infence geo:InFence(43.46089378008257, -462.49145507812494, fence) - send-to-error !geo:InFence(latitude,longitude,fence) -``` diff --git a/wrangler-docs/functions/json.md b/wrangler-docs/functions/json.md deleted file mode 100644 index 292837eb0..000000000 --- a/wrangler-docs/functions/json.md +++ /dev/null @@ -1,207 +0,0 @@ -# JSON Functions - -These are json functions that can be useful in transforming your json data. - - - `json-string` represents the string version of json. - - `json-element` represents either the -the json object or json array. - - `json-object` and `json-array` represent different collections. - - `json-null` represents a null element of json. - -## Example data - -Upload to the workspace `json` an input record such as: -``` -{ - "name": { - "fname": "Joltie", - "lname": "Root", - "mname": null - }, - "coordinates": [ - 12.56, - 45.789 - ], - "numbers": [ - 1, - 2.1, - 3, - null, - 4, - 5, - 6, - null - ], - "moves": [ - { "a": 1, "b": "X", "c": 2.8}, - { "a": 2, "b": "Y", "c": 232342.8}, - { "a": 3, "b": "Z", "c": null}, - { "a": 4, "b": "U"} - ], - "integer": 1, - "double": 2.8, - "float": 45.6, - "aliases": [ - "root", - "joltie", - "bunny", - null - ] -} -``` - -Below is an example malformed json described as `malformed_json` that is missing a comma. - -``` - { - a : 1, - b : 2.0, - c : test - d : true - } -``` - -## Parse -Parses a json into `json-element`. If there are any issues in parsing, the function returns -`json-null` - -#### Namespace -`json` - -#### Input -json(String) - -#### Output -parsed json(JsonElement) - -#### Example - -If `body` has the input json specified, then the result of the operation returns `json-element` -that contains a parsed json. - -``` - set-column parsedjson json:Parse(body) -``` - -When a malformed json `malformed_json` is parsed, then the result of operation is `json-null` - -``` - set-column malformedjson json:Parse(malformed_json) -``` - -## IsValid -Returns `true` if json is valid, else `false` - -#### Namespace -`json` - -#### Input -json(String) - -#### Output -boolean - -#### Example - -If `body` has the input json specified, then the result of the operation returns `true` - -``` - set-column validjson json:IsValid(body) -``` - -When a malformed json `malformed_json` is parsed, then the result of operation is `false` - -``` - set-column validjson json:IsValid(malformed_json) -``` - -## IsNull -Returns `true` if json is `json-null` object, else `false` - -#### Namespace -`json` - -#### Input -json(JsonElement) - -#### Output -boolean - -#### Example - -If `body` has the input json specified, then the result of the operation returns `false` - -``` - set-column parsedjson json:Parse(body) - set-column notnull json:IsNull(parsedjson) -``` - -When a malformed json `malformed_json` is parsed, then the result of operation is `true` - -``` - set-column parsedjson json:Parse(json) // returns null as json is invalid. - set-column null json:IsNull(parsedjson) -``` - -## IsObject -Returns `true` if json is `json-object` object, else `false` - -#### Namespace -`json` - -#### Input -json(JsonElement) - -#### Output -boolean - -#### Example - -If `body` has the input json specified, then the result of the operation returns `true`. - -``` - set-column parsedjson json:Parse(body) - set-column object json:IsObject(parsedjson) -``` - -## Select -Returns part of json specified by the given JSON Domain-Specific Language. - -#### Namespace -`json` - -#### Input -json(JsonElement), path(String), \[additional paths(String...)\] - -#### Output -selected json(JsonArray) - -#### Example - -If `body` has the json specified above, then the result of the operation returns `[1, 2.1, 3, null, 4, 5, 6, null]` -as the result. - -``` - set-column numbers json:Select(body, $.numbers) -``` - -## ArrayLength -Returns the length of the json array. - -#### Namespace -`json` - -#### Input -array(JsonArray) - -#### Output -number(`int`) - -#### Example - -If `body` has the json specified above, then the result of the operation returns `8` -as the result. - -``` - set-column len json:ArrayLength(json:Select(body, $.numbers)) -``` diff --git a/wrangler-docs/functions/logical.md b/wrangler-docs/functions/logical.md deleted file mode 100644 index 856d63347..000000000 --- a/wrangler-docs/functions/logical.md +++ /dev/null @@ -1,156 +0,0 @@ -# Logical Bitwise - -The logical functions perform bit operations. All the functions described below are in the -`logical` namespace. To use the functions defined in this namespace prefix function invocation with `logical:`. - -## BitAnd -Returns the bitwise `AND` of the two arguments. The inputs must be non-null. - -#### Namespace -`logical` - -#### Input -number1(long), number2(long) or number1(int), number2(int) - -#### Output -number(long if inputs are long, int if inputs are int) - -#### Example -If `a` contains the number `352` and `b` contains the number `400`, -then the following two functions are equivalent, and return the value `256`: -``` -set-column val logical:BitAnd(352, 400) -set-column val logical:BitAnd(a,b) -``` - -## BitOr -Returns the bitwise `OR` of the two arguments. The inputs must be non-null - -#### Namespace -`logical` - -#### Input -number1(long), number2(long) or number1(int), number2(int) - -#### Output -number(long if inputs are long, int if inputs are int) - -#### Example -If `a` contains the number `352` and `b` contains the number `400`, -then the following two functions are equivalent, and return the value `496`. - -``` -set-column val logical:BitOr(352,400) -set-column val logical:BitOr(a,b) -``` - -## BitXor -Returns the bitwise `XOR` of the two arguments. The inputs must be non-null. - -#### Namespace -`logical` - -#### Input -number1(long), number2(long) or number1(int), number2(int) - -#### Output -number(long if inputs are long, int if inputs are int) - -#### Example - -If `a` contains the number `352` and `b` contains the number `400`, -then the following two functions are equivalent, and return the value `240`: - -``` -set-column val logical:BitXOr(352,400) -set-column val logical:BitXOr(a,b) -``` - -## BitCompress -Returns the `long` made from the string argument, -which contains a binary representation of `"1"s` and `"0"s`. - -#### Namespace -`logical` - -#### Input -String - -#### Output -number(long) - -#### Example -If `mynumber` contains the string `"101100000"`, -then the following two functions are equivalent, and return the number `352`. -``` -set-column val logical:BitCompress("101100000") -set-column val logical:BitCompress(mynumber) -``` - -## BitExpand -Returns a `string` containing the binary representation in `"1"s` and `"0"s` -of the given `long`. - -#### Namespace -`logical` - -#### Input -number(long) - -#### Output -String - -#### Example -If `mynumber` contains the number `352`, then the following two functions -are equivalent, and return the string `"101100000"` -``` -set-column val logical:BitExpand(352) -set-column val logical:BitExpand(mynumber) -``` - -## Not -Returns the Not of the logical value of an expression. If the value of expression is `true`, the Not function -returns a value of `false (0)`. If the value of expression is `false`, the `NOT` function returns a value of `true (1)`. -If a numeric expression evaluates to `0`, the method will return `1`. For any other number, the method will return `0`. -If a String is null or empty, the method will return `1`. For any other string, the method will return `0`. - -#### Namespace -`logical` - -#### Input -expression(double, float, int, long, String) - -#### Output -number(int) - -#### Example -If the below example, the first one will return 1, the second one will return 0, the third one will return 0. - -``` -set-column val logical:Not(5-5) -set-column val logical:Not(5+5) -set-column val logical:Not('value') -``` - -## SetBit -Returns a `long` with specific bits set to a specific state, where `'origValue'` is the input value to perform -the action on, `'bitArray'` is a array containing a list bit numbers (starting from 1) to set the state of, -and `'bitState'` is either `1` or `0`, indicating which state to set those bits. - -#### Namespace -`logical` - -#### Input -origValue (long), bitArray (int[]), bitState (1 or 0) - -#### Output -number(long) - -#### Example -If `origValue` contains the number `352`, `bitArray` contains the list `[2,4,8]`, and `bitState` -contains the value `1`, then the following two functions are equivalent, and return the value `494`: - -``` -set-column val logical:SetBit(356, [2,4,8], 1) -set-column val logical:SetBit(origValue, bitArray, bitState) -``` diff --git a/wrangler-docs/functions/null-handling.md b/wrangler-docs/functions/null-handling.md deleted file mode 100644 index e1772f4ff..000000000 --- a/wrangler-docs/functions/null-handling.md +++ /dev/null @@ -1,103 +0,0 @@ -# Null Handling Functions - -The collection of functions for handling nulls in your data. - -## IsNotNull -Returns `true` when an expression does not evaluate to the `null` value. - -#### Namespace -Global. No namespace qualifier required. - -#### Input -any object or expression - -#### Output -boolean (true/false) - -#### Example -In the below example, `col1` will evaluate to `a` if `a` is not null, i.e, `col1` is `999` if `a` is `999`. -If `a` is `null`, `col1` will evaluate to `0`. - -``` -set-column col1 IsNotNull(a) ? a : 0 -``` - -## IsNull -Returns `true` when an expression evaluates to the `null` value. - -#### Namespace -Global. No namespace qualifier required. - -#### Input -any object or expression - -#### Output -boolean (true/false) - -#### Example -In the below example, `col1` will evaluate to `a` if `a` is not null, i.e, `col1` is `999` if `a` is `999`. -If `a` is `null`, `col1` will evaluate to `0`. - -``` -set-column col1 IsNull(a) ? 0 : a -``` - -## NullToEmpty -Returns an `empty string` if the input column is `null`, otherwise returns the input column value. - -#### Namespace -Global. No namespace qualifier required. - -#### Input -any object or expression - -#### Output -input value or string - -#### Example -In the below example, `col1` will evaluate to `a` if `a` is not null, i.e, `col1` is `abc` if `a` is `abc`. -If `a` is `null`, `col1` will evaluate to empty string `''`. - -``` -set-column col1 NullToEmpty(a) -``` - -## NullToZero -Returns zero if the input column is `null`, otherwise returns the input column value. - -#### Namespace -Global. No namespace qualifier required. - -#### Input -column value (object/expression) - -#### Output -column value or zero. - -#### Example -In the below example, `col1` will evaluate to `a` if `a` is not null, i.e, `col1` is `999` if `a` is `999`. -If `a` is `null`, `col1` will evaluate to `0`. - -``` -set-column col1 NullToZero(a) -``` - -## NullToValue -Returns the specified value if the input column is `null`, otherwise returns the input column value. - -#### Namespace -Global. No namespace qualifier required. - -#### Input -column value (object/expression), replaced value (object/expression) - -#### Output -column value or replaced value. - -#### Example -In the below example, `col1` will evaluate to `a` if `a` is not null, i.e, `col1` is `999` if `a` is `999`. -If `a` is `null`, `col1` will evaluate to the replaced value `42`. - -``` -set-column col1 NullToValue(a, 42) -``` \ No newline at end of file diff --git a/wrangler-docs/functions/number.md b/wrangler-docs/functions/number.md deleted file mode 100644 index a043af8a8..000000000 --- a/wrangler-docs/functions/number.md +++ /dev/null @@ -1,87 +0,0 @@ -# Number Functions - -The collection of functions for handling numbers in the data. - -## AsDouble -Returns double value of the given argument. If the input is null, this method will return null. - -#### Namespace -`number` - -#### Input -number - -#### Output -double - -#### Example -If `a` contains the number `5.2` -then the following two functions are equivalent, and return the value `2.6`: - -``` -set-column val number:AsDouble(a/2) -set-column val number:AsDouble(5.2/2) -``` - -## AsFloat -Returns double value of the given argument. If the input is null, this method will return null. - -#### Namespace -`number` - -#### Input -number - -#### Output -float - -#### Example -If `a` contains the number `5.2` -then the following two functions are equivalent, and return the value `2.6`: - -``` -set-column val number:AsFloat(a/2) -set-column val number:AsFloat(5.2/2) -``` - -## AsInteger -Returns integer value of the given argument. If the input is null, this method will return null. - -#### Namespace -`number` - -#### Input -number - -#### Output -integer - -#### Example -If `a` contains the number `5.2` -then the following two functions are equivalent, and return the value `2`: - -``` -set-column val number:AsInteger(a/2) -set-column val number:AsInteger(5.2/2) -``` - -## Mantissa -Returns the mantissa from the given number. If the input is null, the method will return `0.0`. - -#### Namespace -`number` - -#### Input -number(integer, long, double, float or BigDecimal) - -#### Output -double - -#### Example -If `a` contains the number `123.4567` -then the following two functions are equivalent, and return the value `0.4567`: - -``` -set-column val number:Mantissa(a) -set-column val number:Mantissa(123.4567) -``` \ No newline at end of file diff --git a/wrangler-docs/functions/type-functions.md b/wrangler-docs/functions/type-functions.md deleted file mode 100644 index 7ea2e9511..000000000 --- a/wrangler-docs/functions/type-functions.md +++ /dev/null @@ -1,84 +0,0 @@ -# Type Functions - -These are functions for detecting the type of data. These functions can be used in the -directives `filter-row-if-false`, `filter-row-if-true`, `filter-row-on`, or -`send-to-error`. - - -## Pre-requisite - -These can be used only in the `filter-*` or `send-to-error` directives. - - -## Namespace - -All type-related functions are in the namespace `type`. - - -## Example Data - -Upload to the workspace `body` an input record such as: - -``` -{ - "name": { - "fname": "Joltie", - "lname": "Root", - "mname": null - }, - "date": "12/17/2019", - "time": "10:45 PM", - "boolean": "true", - "coordinates": [ - 12.56, - 45.789 - ], - "numbers": [ - 1, - 2.1, - 3, - null, - 4, - 5, - 6, - null - ], - "moves": [ - { "a": 1, "b": "X", "c": 2.8}, - { "a": 2, "b": "Y", "c": 232342.8}, - { "a": 3, "b": "Z", "c": null}, - { "a": 4, "b": "U"} - ], - "integer": "1", - "double": "2.8", - "empty": "", - "float": 45.6, - "aliases": [ - "root", - "joltie", - "bunny", - null - ] -} -``` - -Once such a record is loaded, apply these directives before applying any of the functions -listed here: -``` - parse-as-json body - columns-replace s/body_//g -``` - -## List of Type Functions - -Each function returns `true` if the condition is met, `false` otherwise. - -| Function | Condition | Example | -| ------------------- | ----------------------------------------- | ---------------------------------------- | -| `isDate(string)` | Tests if string value is a date field | `filter-row-if-true type:isDate(date)` | -| `isTime(string)` | Tests if string value is a date time | `filter-row-if-true type:isTime(time)` | -| `isBoolean(string)` | Tests if string value is a booelan field | `send-to-error !type:isBoolean(boolean)` | -| `isNumber(string)` | Tests if string value is a number field | `send-to-error !type:isNumber(integer)` | -| `isEmpty(string)` | Tests if string value is empty | `send-to-error !type:isEmpty(empty)` | -| `isDouble(string)` | Tests if string value is a double field | `send-to-error !type:isDouble(double)` | -| `isInteger(string)` | Tests if string value is an integer field | `send-to-error !type:isInteger(integer)` | diff --git a/wrangler-docs/grammar/grammar-graph.png b/wrangler-docs/grammar/grammar-graph.png deleted file mode 100644 index be49c0fc5..000000000 Binary files a/wrangler-docs/grammar/grammar-graph.png and /dev/null differ diff --git a/wrangler-docs/grammar/grammar-info.md b/wrangler-docs/grammar/grammar-info.md deleted file mode 100644 index d81b3a8b4..000000000 --- a/wrangler-docs/grammar/grammar-info.md +++ /dev/null @@ -1,26 +0,0 @@ -# Directive Grammar - -This page provides more information on the constructs and grammar of dataprep. - -## Recipe - -``` -#pragma version 1.0 -#pragma load-directives test-reverse,test-window -parse-as-csv :body ',' true; -send-to-error exp:{ total < 10}; -!test :body prop:{ a='b', c='d', e=f, e=1.0}; -``` - -## AST -![AST](grammar-graph.png) - -## Building in IDE -Intellij - * Install Plugin - Antlr v4 grammar plugin - version 1.8.4 or higher. -Configure Antlr Plugin - * Output Directory : `${base}/wrangler/wrangler-core/target/generated-sources/antlr4` - * Package : `io.cdap.wrangler.parser` - * Auto generate upon save - ON - * Generate Parse Tree Visitor - ON - * Generate Parse Tree Listener - OFF diff --git a/wrangler-docs/language/sample.md b/wrangler-docs/language/sample.md deleted file mode 100644 index 2285336b9..000000000 --- a/wrangler-docs/language/sample.md +++ /dev/null @@ -1,20 +0,0 @@ -# Language Specification - -``` -set-column :abc, :edf; -set-columns; -send-to-error exp:{ window < 10 } ; -send-to-error exp:{ test < 10 } value; -parse-as-csv :body ' ' true; -change-case upper; -write-as-json-object :col1 :col2,:col3; -!change-case upper; -test-number 10; -test-float 12.4; -test-float 12.5 exp:{test < 10}; -set-column :abc exp:{ dq:isNumber(abc) }; -parse-as-simple-date :col 'yyyy-mm-dd' :col 'test' :col2,:col4:col9 10 exp:{test < 10}; -parse-as-fixed-length :col 3,4,5,6; -quantize :foo 1:2=abc,3:4=efg,5:6='Window'; -#pragma window -``` \ No newline at end of file diff --git a/wrangler-docs/performance.md b/wrangler-docs/performance.md deleted file mode 100644 index aadb46af6..000000000 --- a/wrangler-docs/performance.md +++ /dev/null @@ -1,74 +0,0 @@ -# Performance Evaluation - -## Setup - -Hardware used for measuring the performance: - -* 2.9 GHz Intel Core i5 -* 16 GB 2133 MHz LPDDR3 -* Java 7 - -## Light Data Transformation DMD - -These are the high-level transformations being performed on the data: - -* Parsing of CSV -* Drop columns -* Setting defaults on column -* Changing case -* Masking data -* Filtering rows based on an expression - -## Directives - -``` - parse-as-csv demo , true - drop demo - drop demo_12 - fill-null-or-empty demo_11 N/A - uppercase demo_17 - mask-number demo_18 xxx### - drop demo_6 - drop demo_7 - fill-null-or-empty demo_5 N/A - uppercase demo_3 - filter-row-if-true demo_9 =~ "CA" - mask-number demo_10 xxx## - mask-shuffle demo_4 -``` - -## Experiments - -These two experiments were run: the first with 13M records, and the second with 80M records. - -### Experiment #1 - -* Number of records: 13,499,973 -* Number of bytes: 4,499,534,313 (~ 4GB) -* Number of columns: 18 - -### Performance Numbers - -``` -count = 13,376,053 -mean rate = 64998.50 records/second -1-minute rate = 64921.29 records/second -5-minute rate = 46866.70 records/second -15-minute rate = 36149.86 records/second -``` - -### Experiment #2 - -* Number of records: 80,999,838 (80M) -* Number of bytes: 26,997,205,878 (~ 26GB) -* Number of columns: 18 -* Total time: 1294 seconds (21.5 minutes) - -### Performance Numbers -``` -count = 80,944,061 -mean rate = 62465.93 records/second -1-minute rate = 62706.39 records/second -5-minute rate = 60755.41 records/second -15-minute rate = 56673.32 records/second -``` diff --git a/wrangler-docs/service/admin.md b/wrangler-docs/service/admin.md deleted file mode 100644 index 7c319a891..000000000 --- a/wrangler-docs/service/admin.md +++ /dev/null @@ -1,300 +0,0 @@ -# Administration and Management Services - -* [Creating a Workspace](#creating-a-workspace) -* [Deleting a Workspace](#deleting-a-workspace) -* [Uploading a File to a Workspace](#uploading-a-file-to-a-workspace) -* [Downloading a File from a Workspace](#downloading-a-file-from-a-workspace) - - - -## Creating a Workspace - -This RESTful API call creates a workspace, a scratch pad for temporarily storing the data to be wrangled in the backend. -A workspace is identified by a name containing either alphanumeric or underscore (_) characters. - -* **URL** - - `workspaces/:workspaceid` - -* **Method** - - `PUT` - -* **URL Params** - - _None_ - -* **Data Params** - - _Not Applicable_ - -* **Success Response** - - * **Code** 200 - **Content** - ``` - { - 'status': 200, - 'message': "Successfully created workspace ':workspaceid'" - } - ``` - -* **Error Responses** - - * **Code** 500 Server Error - **Content** - ``` - { - 'status': 500, - 'message': "" - } - ``` - or - - * **Code** 500 Server Error - **Content** - ``` - Unable to route to service - ``` - -* **Sample Call** - - ``` - $.ajax({ - url: "${base-url}/workspaces/${workspace}", - dataType: "json", - type : "PUT", - success : function(r) { - console.log(r); - } - }); - ``` - -* **Notes** - -The API call will fail if the backend service is not started or if the dataset write fails. - - - -## Deleting a Workspace - -This RESTful API call deletes a workspace. This will also delete any data associated with it. - -* **URL** - - `workspaces/:workspaceid` - -* **Method** - - `DELETE` - -* **URL Params** - - _None_ - -* **Data Params** - - _Not Applicable_ - -* **Success Response** - - * **Code** 200 - **Content** - ``` - { - 'status': 200, - 'message': "Successfully deleted workspace ':workspaceid'" - } - ``` - -* **Error Responses** - - * **Code** 500 Server Error - **Content** - ``` - { - 'status': 500, - 'message': "" - } - ``` - or - - * **Code** 500 Server Error - **Content** - ``` - Unable to route to service - ``` - - -* **Sample Call** - - ``` - $.ajax({ - url: "${base-url}/workspaces/${workspace}", - dataType: "json", - type : "DELETE", - success : function(r) { - console.log(r); - } - }); - ``` - -* **Notes** - -The API call will fail if the backend service is not started or if the dataset write fails. - - - -## Uploading a File to a Workspace - -This RESTful API call will upload a file to a workspace. The file is split into lines based on a line delimiter (EOL). - -* **URL** - - `workspaces/:workspaceid/upload` - -* **Method** - - `POST` - -* **URL Params** - - _None_ - -* **Data Params** - - _Not Applicable_ - -* **Success Response** - - * **Code** 200 - **Content** - ``` - { - 'status': 200, - 'message': "Successfully uploaded data to workspace ':workspaceid' (records 1000)" - } - ``` - -* **Error Responses** - - * **Code** 500 Server Error - **Content** - ``` - { - 'status': 500, - 'message': "Body not present, please post the file containing the records to be wrangle." - } - ``` - or - - * **Code** 500 Server Error - **Content** - ``` - Unable to route to service - ``` - - or - - * **Code** 500 Server Error - **Content** - ``` - { - 'status': 500, - 'message': "" - } - ``` - -* **Sample Call** - - ``` - $.ajax({ - url: "${base-url}/workspaces/${workspace}/upload", - type: 'POST', - data: data, - cache: false, - contentType: 'application/octet-stream', - processData: false, // Don't process the files - contentType: false, - success: function(r) { - console.log(r); - }, - error: function(r) { - console.log(r); - } - }); - ``` - - - -## Downloading a File from a Workspace - -This RESTful API will download to a file the data stores in a workspace. - -* **URL** - - `workspaces/:workspaceid/download` - -* **Method** - - `GET` - -* **URL Params** - - _None_ - -* **Data Params** - - _Not Applicable_ - -* **Success Response** - - * **Code** 200 - **Content** - ``` - - ``` - -* **Error Responses** - - * **Code** 500 Server Error - **Content** - ``` - { - 'status': 500, - 'message': "No data exists in the workspace. Please upload the data to this workspace." - } - ``` - or - - * **Code** 500 Server Error - **Content** - ``` - Unable to route to service - ``` - - or - - * **Code** 500 Server Error - **Content** - ``` - { - 'status': 500, - 'message': "" - } - ``` - -* **Sample Call** - - ``` - $.ajax({ - url: "${base-url}/workspaces/${workspace}/download", - type: 'GET', - success: function(r) { - console.log(r); - }, - error: function(r) { - console.log(r); - } - }); - ``` diff --git a/wrangler-docs/service/connection-properties.md b/wrangler-docs/service/connection-properties.md deleted file mode 100644 index 252df1c3b..000000000 --- a/wrangler-docs/service/connection-properties.md +++ /dev/null @@ -1,16 +0,0 @@ -# Connection Properties - -Following are properties for different types of connections. - -| Property | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------- | -| **Database** | | -| username | (String) Username to be used in the connection | -| password | (String) Password to be used along with username. Empty should be double-quoted | -| hostname | (String) Hostname to connect to | -| port | (Integer) Port number | -| ssl | (Boolean) true or false | -| url | (String) JDBC Url | -| **Kafka** | | -| zkqorum | (String) Zookeeper quorum string (host1:2181,host2:2181,host3:2181) | -| brokers | (String) Kafka Broker | diff --git a/wrangler-docs/service/connections.md b/wrangler-docs/service/connections.md deleted file mode 100644 index b55894e3f..000000000 --- a/wrangler-docs/service/connections.md +++ /dev/null @@ -1,243 +0,0 @@ -# Connection Service - -The Connection Service provides RESTful APIs for managing the lifecycle of -connections. All connection information is stored in the connections -store of the dataset. - -These are the lifecycle operations supported by the connection service: - -* Create a new connection (**POST**, ```${base}/connections/create```) -* Update an entire connection (**POST**, ```${base}/connections/{id}/update```) -* Update properties of a connection (**PUT**, ```${base}/connections/{id}/properties?key=&value=```) -* Retrieve all properties of a connection (**GET**, ```${base}/connections/{id}/properties```) -* Delete a connection (**DELETE**, ```${base}/connections/{id}```) -* Clone a connection (**GET**, ```${base}/connections/{id}/clone```) -* Retrieve information about all of the connections (**GET**, ```${base}/connections```) -* Retrieve information about a connection (**GET** ```${base}/connections/{id}```) - -## Base - -This is the base URL for the service: - -``` -http://localhost:11015/v3/namespaces//apps/dataprep/services/service/methods -``` - -> NOTE: All examples below use a 'default' namespace. - -## Request JSON Object for creation and complete update - -These are the fields that can be in the request: - -* name (mandatory) -* description (optional) -* type (mandatory; one of:) - * DATABASE - * KAFKA - * S3 -* properties (optional) - -Here is an example of a JSON Request for creating a connection: - -``` -{ - "name": "MySQL Database", - "description": "MySQL Configuration", - "type": "DATABASE", - "properties": { - "hostaname": "localhost", - "port": "3306" - } -} -``` - -Upon successful creation, the ID of the entry is returned. Here is an -example response when creation is successful: - -``` -{ - "status": 200, - "message": "Success", - "count": 1, - "values": [ - "mysql_database" - ] -} -``` -## Sample Runs - -### Connection JSON - -``` -cat /Users/nitin/Work/Demo/data/mysql.connection.json -{ - "name":"MySQL Database", - "type":"DATABASE", - "description":"MySQL Configuration", - "properties" : { - "hostaname" : "localhost", - "port" : 3306 - } -} -``` - -### Create REST API call. -``` -curl -s --data "@/tmp/mysql.connection.json" 'http://localhost:11015/v3/namespaces/default/apps/dataprep/services/service/methods/connections/create' | python -mjson.tool -{ - "count": 1, - "message": "Success", - "status": 200, - "values": [ - "mysql_database" - ] -} -``` - -### Repeat creation will fail -``` -curl -s --data "@/Users/nitin/Work/Demo/data/mysql.connection.json" 'http://localhost:11015/v3/namespaces/default/apps/dataprep/services/service/methods/connections/create' | python -mjson.tool -{ - "message": "Connection name 'MySQL Database' already exists.", - "status": 500 -} -``` - -### Delete Connection -``` -curl -X DELETE "http://localhost:11015/v3/namespaces/default/apps/dataprep/services/service/methods/connections/mysql_database" | python -mjson.tool -{ - "status":200, - "message":"Success" -} -``` - -### Repeated delete will also be successful or even when the key is not found. -``` -curl -s -X DELETE "http://localhost:11015/v3/namespaces/default/apps/dataprep/services/service/methods/connections/mysql_database" | python -mjson.tool -{ - "message": "Success", - "status": 200 -} -``` - -### Listing All Connections -``` -curl -s "http://localhost:11015/v3/namespaces/default/apps/dataprep/services/service/methods/connections?type=*" | python -mjson.tool -{ - "count": 1, - "message": "Success", - "status": 200, - "values": [ - { - "created": 1494529821, - "description": "MySQL Configuration", - "id": "mysql_database", - "name": "MySQL Database", - "type": "DATABASE", - "updated": 1494529821 - } - ] -} -``` - -### Listing Only connections of type Database -``` -curl -s "http://localhost:11015/v3/namespaces/default/apps/dataprep/services/service/methods/connections?type=database" | python -mjson.tool -{ - "count": 1, - "message": "Success", - "status": 200, - "values": [ - { - "created": 1494529821, - "description": "MySQL Configuration", - "id": "mysql_database", - "name": "MySQL Database", - "type": "DATABASE", - "updated": 1494529821 - } - ] -} -``` - -### Info about connection -``` -curl -s "http://localhost:11015/v3/namespaces/default/apps/dataprep/services/service/methods/connections/mysql_database" | python -mjson.tool -{ - "count": 1, - "message": "Success", - "status": 200, - "values": [ - { - "created": 1494527723, - "description": "MySQL Configuration", - "id": "mysql_database", - "name": "MySQL Database", - "properties": { - "hostaname": "localhost", - "port": 3306.0 - }, - "type": "DATABASE", - "updated": 1494527723 - } - ] -} -``` - -### Cloning connection -``` -curl -s "http://localhost:11015/v3/namespaces/default/apps/dataprep/services/service/methods/connections/mysql_database/clone" | python -mjson.tool -{ - "count": 1, - "message": "Success", - "status": 200, - "values": [ - { - "created": 1494528015, - "description": "MySQL Configuration", - "name": "MySQL Database_Clone", - "properties": { - "hostaname": "localhost", - "port": 3306.0 - }, - "type": "DATABASE", - "updated": 1494528015 - } - ] -} -``` - -### Fetch only properties -``` -curl -s "http://localhost:11015/v3/namespaces/default/apps/dataprep/services/service/methods/connections/mysql_database/properties" | python -mjson.tool -{ - "count": 1, - "message": "Success", - "status": 200, - "values": [ - { - "hostaname": "localhost", - "port": 3306.0 - } - ] -} -``` - -### Adding new property or updating existing property -``` -curl -X PUT -s "http://localhost:11015/v3/namespaces/default/apps/dataprep/services/service/methods/connections/mysql_database/properties?key=ssl&value=true" | python -mjson.tool -{ - "count": 1, - "message": "Success", - "status": 200, - "values": [ - { - "hostaname": "localhost", - "port": 3306.0, - "ssl": "true" - } - ] -} -``` - diff --git a/wrangler-docs/service/execution.md b/wrangler-docs/service/execution.md deleted file mode 100644 index 7a6eafcc1..000000000 --- a/wrangler-docs/service/execution.md +++ /dev/null @@ -1,88 +0,0 @@ -# Directive Execution - -## Executing Directives - -Applies directives on the data in a workspace. - -* **URL** - - `workspaces/:workspaceid/execute` - -* **Method** - - `GET` - -* **URL Params** - - The directives to be executed are passed as query arguments. For multiple directives to - be executed, they are passed as multiple query arguments. - - **Required** - - `directive=[encoded directive]` - - **Optional** - - `limit=[numeric]` - -* **Data Params** - - _Not Applicable_ - -* **Success Response** - - * **Code:** 200 - **Content:** - ``` - { - 'status': 200, - 'message': 'Success', - 'items': , - 'header': [ 'header-1', 'header-2', ..., 'header-n' ], - 'value': { - { processed record - 1}, - { processed record - 2}, - . . . - { processed record - n} - } - } - ``` - -* **Error Responses** - - * **Code:** 500 Server Error - **Content:** - ``` - { - 'status': 500, - 'message': "" - } - ``` - - or - - * **Code:** 500 Server Error - **Content:** - ``` - Unable to route to service - ``` - -* **Sample Call** - - ``` - $.ajax({ - url: "${base-url}/workspaces/${workspace}/execute", - data: { - 'directive': , - 'directive': , - ... - 'directive': - 'limit': - } - cache: false - type : "GET", - success : function(r) { - console.log(r); - } - }); - ``` diff --git a/wrangler-docs/service/request.md b/wrangler-docs/service/request.md deleted file mode 100644 index d7a40372d..000000000 --- a/wrangler-docs/service/request.md +++ /dev/null @@ -1,109 +0,0 @@ -# Request Format Specification - -Currently, the Data Prep front-end makes a `GET` call with all the directives in the query -arguments. This causes issues on some browsers as there are limits as to how much data can -be pushed using this approach. This document describes the format that is used for sending -a request to the back-end. - - -## Specification Version - -This document covers version 1.0 of the request specification and details how this should -be handled on the front- and back-ends. - - -## JSON Request Format -``` - { - "version": 1.0 - "workspace": { - "name": string, - "results": number - }, - "recipe": { - "directives": [ - "string", - "string", - ... - "string" - ], - "save": boolean, - "name": string - }, - "sampling": { - "method": string, - "seed": number, - "limit": number - } - } -``` - -### Version - -Specifies the version of this specification (`1.0`). If there are any additions or -deletions to the specification, this version would be updated. - - -### Workspace - -This section of the specification provides information about the workspace that directives -are being applied in and the number of records (the `results`) that the request should -return when the results are computed. - -| Field | Mandatory | Description | -| :-------- | :-------: | :----------------------------------------------------------------------------------- | -| `name` | Yes | Name of the workspace that Data Prep should operate on | -| `results` | Yes | Number of records that should be returned in response to execution of the directives | - - -### Recipe - -This section of the specification contains all of the directives that are to be applied on -the data in the workspace, with an option to save the directives as a recipe with a name. - -| Field | Mandatory | Description | -| :----------- | :-------: | :----------------------------------------------------------------------------------------------------- | -| `directives` | Yes | List of directives to be applied on the data | -| `save` | No | If `true`, specifies that the directives should be saved. If so, then `name` should also be specified. | -| `name` | No | Name of the recipe. This option is valid only when `save` is set to `true`. | - - -### Sampling - -This section of the specification provides information about how the input data is to be -sampled. - -| Field | Mandatory | Description | -| :------- | :-------: | :------------------------------------------------------------------------------------------ | -| `method` | Yes | Type of sampling to be applied while selecting input data. Currently only supports `first`. | -| `seed` | No | The random seed to be used when sampling data | -| `limit` | Yes | The number of input records to be read from the source when applying directives | - - -## Example - -A simple example: - -``` - { - "version": 1.0, - "workspace": { - "name": "body", - "results": 100 - }, - "recipe": { - "directives": [ - "parse-as-csv body ,", - "drop body", - "set-columns a,b,c,d" - ], - "save": true, - "name": "my-recipe" - }, - "sampling": { - "method": "first", - "seed": 1, - "limit": 1000 - } - } -``` diff --git a/wrangler-docs/service/schema-registry.md b/wrangler-docs/service/schema-registry.md deleted file mode 100644 index e06b2ca11..000000000 --- a/wrangler-docs/service/schema-registry.md +++ /dev/null @@ -1,31 +0,0 @@ -# Schema Registry - -Schema Registry provides a serving layer for all types of metadata. -It provides a RESTful interface for storing and retrieving schemas -(AVRO, Protobuf, etc). It stores a versioned history of all schemas, - - -## Schema Information - -| Field | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------- | -| ID | Id of the schema as provided by the user. | -| Name | Display name for the schema. | -| Description | User facing description about the schema | -| Created Date | Time in seconds about when the schema was created. | -| Updated Date | Time in seconds about when the schema was last updated. | -| Version | Auto-incremented version of schema. This version is incremented everytime the schema is updated. | -| Type | Type of the schmea, currently supports AVRO and Protobuf-desc | -| Specification | Byte array of the specification of schema | - -## RESTful APIs - -| API | Method | Path | Response | Description | -| -------------- | ----------------- | -------------- | -------------- | -------------- | -| Create a schema entry | `PUT` | /schemas | 200 - OK, 500 - Error in backend store | Creates an entry in the schema registry. No schema is registred. | -| Add a schema to schema entry | `POST` | /schemas/{id} | 200 - OK, 500 - Error adding schema to schema registry | Adds a versioned schema to schema registry. POST should use `Content-Type: application/octet-stream` | -| Delete all version of schema | `DELETE` | /schemas/{id} | 200 - OK, 500 - Error deleting schema | Deletes the entire schema entry including all the versions of schema. | -| Delete a sepecific version of schema | `DELETE` | /schemas/{id}/versions/{version} | 200 - OK, 500 - Error deleting a version of schema | Deletes a specific version of schema, if schema is not found then a 404 is returned. | -| GET information about a a version of schema | `GET` | /schemas/{id}/versions/{version} | 200 - OK, 500 - Backend error, 404 - Schema id not found | Information about schema version and schema entry | -| GET information about schema entry | `GET` | /schemas/{id} | 200 - OK, 500 - Error | Information about schema entry | -| List version for schema available | `GET` | /schemas/{id}/versions | 200 - OK, 500 - Error | List the versions of schema. | \ No newline at end of file diff --git a/wrangler-docs/service/services.md b/wrangler-docs/service/services.md deleted file mode 100644 index e7d7fac11..000000000 --- a/wrangler-docs/service/services.md +++ /dev/null @@ -1,23 +0,0 @@ -## Data Prep Service - -Data Prep is integrated as a CDAP Service to support HTTP RESTful-based interactive -wrangling of data. The main objective of this service is to make it simple and easy to -interactively apply the directives required for parsing a given data set. The service is -not intended to replace full-scale big data processing; it is primarily used to -interactively apply directives on a sample of your data. - -The base endpoint is: - -``` -http://:11015/v3/namespaces//apps/dataprep/services/service/methods -``` - -These services are provided: - -* [Administration and Management](docs/service/admin.md) -* [Directive Execution](docs/service/execution.md) -* [Column Type Detection and Statistics](docs/service/statistics.md) -* [Column Name Validation](docs/service/validation.md) - -The [Request Format Specification](docs/service/request.md) describes the format that is used for sending -a request to the back-end. diff --git a/wrangler-docs/udd-internal.md b/wrangler-docs/udd-internal.md deleted file mode 100644 index 22c3a80fd..000000000 --- a/wrangler-docs/udd-internal.md +++ /dev/null @@ -1,59 +0,0 @@ -# UDD Internals - -## Macros and Directives - -There are use-cases where a macro is specified in a pipeline for the directive in a Wrangle transform. In that we wouldn't want to fail for not recognizing it's a macro and as well be able to register the dynamically loadable directives (plugins) during that phase. Failing to register the directives in the configure phase would make the directive unusable during initialize causing the entire pipeline to fail. So, the approach that is being taken is as follows - - * The `RecipeCompiler` recognizes the macros specified and skips them during the `configure` phase of a Wrangler Transform. - * Compilation will generate a list of all loadable directives. These are all the directives that have been specified with `pragma load-directives` statement. - * The dynamic loadable directives are then registered in the pipeline to be used. - * A 64-bit unqiue id is generated for each directive that is loaded dynamically and the information is passed through the plugin properties into `initialize()`. - * In `initialize()` the properties are retrieved and appropriate plugin id for the plugin name in the context of pipeline is extracted. Using that plugin id an instance of the class is created. - -All-in-All **Macros can be freely specified** in the Wrangler Transform plugin for the directive configuration. - -## Extracting Loadable Directives - -Sample code to show how loadable directives can be extracted from the recipe. - -``` - ... - String[] recipe = new String[] { - "#pragma version 2.0;", - "#pragma load-directives text-reverse, text-exchange;", - "rename col1 col2", - "parse-as-csv body , true", - "!text-reverse :text;", - "!test prop: { a='b', b=1.0, c=true};", - "#pragma load-directives test-change,text-exchange, test1,test2,test3,test4;" - }; - - Compiler compiler = new RecipeCompiler(); - CompiledUnit compiled = compiler.compile(new MigrateToV2(recipe).migrate()); - Set loadableDirectives = compiled.getLoadableDirectives(); - ... -``` - -## Parsing Recipe into list of executable directives - -This block of code shows how one can parse recipe into a list of -directives that are executable in the `RecipePipeline`. - -``` - ... - String[] recipe = new String[] { - "#pragma version 2.0;", - "#pragma load-directives text-reverse, text-exchange;", - "rename col1 col2", - "parse-as-csv body , true" - }; - - CompositeDirectiveRegistry registry = new CompositeDirectiveRegistry( - new SystemDirectiveRegistry() - ); - - RecipeParser parser = new GrammarBasedParser(new MigrateToV2(recipe).migrate(), registry); - parser.initialize(null); - List directives = parser.parse(); - ... -``` diff --git a/wrangler-docs/upcoming-features.md b/wrangler-docs/upcoming-features.md deleted file mode 100644 index 62ce7c724..000000000 --- a/wrangler-docs/upcoming-features.md +++ /dev/null @@ -1,46 +0,0 @@ -# Upcoming Features - - * **Conditional Recipe** -- Conditional Recipe allows sub-recipes to be executed based on the condition. -``` -/** - * Recipe for applying directives based on a type of record. - * This also shows examples of how macros defines of CDAP can - * ignored and/or merged with the recipe. - */ - -// Load external directives -#pragma set-property rectype :record_type; -#pragma load-directives encrypt, sentence-detect, invoke-http-get; - -// Parse the input record with first three bytes as rectype -// and rest of them as new body. -parse-as-fixed-length :body 3,197; -rename :body_1 ${rectype}; -rename :body_2 :body; - -// Apply different set of directives based on the 'rectype' -if((${rectype} == '001')) { - drop ${rectype}; - parse-as-csv :body ','; - set-headers :fname,:lname,:address,:city,:ssn,:state,:zip; - // Data validation functions added by the macros - ${macro_rectype_001} - encrypt :ssn; - if(zip == '94306') { - set-column :flagged exp: { 1 }; - } -} else if (${rectype} == '002') { - drop :rectype; - parse-as-csv :body ':'; - set-headers :lat,:lon,:device; - send-to-error exp: { dq:isEmpty(device) }; - invoke-http-get 'http://www.example.org' :lat,:lon; - drop :lat,:lon; - rename :lat_lon_location :location; - // More dq checks - ${macro_rectype_002} -} -``` - - * **Tokenize Text** -- Tokenizes text into Words, Characters, Sentences, Lines and Paragraphs. - * **NGram Token Generation** -- Generates N-Gram tokens, where N is configurable. diff --git a/wrangler-proto/pom.xml b/wrangler-proto/pom.xml deleted file mode 100644 index 8e6bab2f5..000000000 --- a/wrangler-proto/pom.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - wrangler - io.cdap.wrangler - 4.12.0-SNAPSHOT - - 4.0.0 - - wrangler-proto - Wrangler REST Protocol Classes - - - - io.cdap.cdap - cdap-api - ${cdap.version} - - - io.cdap.cdap - cdap-etl-api - ${cdap.version} - - - io.cdap.wrangler - wrangler-api - ${project.version} - - - com.google.code.gson - gson - ${gson.version} - - - com.google.code.findbugs - jsr305 - ${google.findbugs.version} - - - - diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/BadRequestException.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/BadRequestException.java deleted file mode 100644 index 69b0fa4eb..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/BadRequestException.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import java.net.HttpURLConnection; - -/** - * Thrown if user provided input is invalid. - */ -public class BadRequestException extends StatusCodeException { - - public BadRequestException(String message) { - super(message, HttpURLConnection.HTTP_BAD_REQUEST); - } - - public BadRequestException(String message, Throwable cause) { - super(message, cause, HttpURLConnection.HTTP_BAD_REQUEST); - } - -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ConflictException.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ConflictException.java deleted file mode 100644 index 274c5e7df..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ConflictException.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import java.net.HttpURLConnection; - -/** - * Thrown when there is some conflict - */ -public class ConflictException extends StatusCodeException { - - public ConflictException(String message) { - super(message, HttpURLConnection.HTTP_CONFLICT); - } - - public ConflictException(String message, Throwable cause) { - super(message, cause, HttpURLConnection.HTTP_CONFLICT); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ConnectionSample.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ConnectionSample.java deleted file mode 100644 index 97bf4ebdb..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ConnectionSample.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -/** - * Information about a sample taken using a connection. - * - * TODO: (CDAP-14652) check if these fields are all used/needed. - * For example, why are 'connection' (actually connection type) and connection id in this object - * when the client must supply this information in order to get the sample - */ -public class ConnectionSample { - private final String id; - private final String name; - private final String connection; - private final String sampler; - private final String connectionid; - - public ConnectionSample(String id, String name, String connection, String sampler, String connectionid) { - this.id = id; - this.name = name; - this.connection = connection; - this.sampler = sampler; - this.connectionid = connectionid; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Contexts.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Contexts.java deleted file mode 100644 index 174a275c1..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Contexts.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -/** - * Constants related to an endpoint context. - */ -public class Contexts { - public static final String SYSTEM = "system"; - public static final String DEFAULT = "default"; -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ErrorRecordsException.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ErrorRecordsException.java deleted file mode 100644 index cad5c4359..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ErrorRecordsException.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import io.cdap.wrangler.api.ErrorRecordBase; -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; - -/** - * An exception that contains error records. - */ -public class ErrorRecordsException extends RuntimeException { - static final int MAX_NUM_ERRORS_IN_SUMMARY = 10; - static final String ERROR_SUMMARY_ITEM_DELIM = "\n"; - - private final List errorRecords; - - public ErrorRecordsException(List errorRecords) { - super(summarize(errorRecords)); - this.errorRecords = errorRecords; - } - - public List getErrorRecords() { - return errorRecords; - } - - static String summarize(List errorRecords) { - List lines = errorRecords - .stream() - // Group similar conformance issues by hashing them. - .collect(Collectors.groupingBy(ErrorRecordBase::getMessage)) - .entrySet() - .stream() - // Most common issues come first. - .sorted(Comparator.comparingInt(a -> -a.getValue().size())) - // Create one string per unique error. - .map(entry -> String.format("%s - %d rows", entry.getKey(), entry.getValue().size())) - .collect(Collectors.toList()); - - if (lines.size() > MAX_NUM_ERRORS_IN_SUMMARY) { - lines = lines.subList(0, MAX_NUM_ERRORS_IN_SUMMARY - 1); - lines.add("... and other errors hidden for brevity"); - } - - return String.join(ERROR_SUMMARY_ITEM_DELIM, lines); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Namespace.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Namespace.java deleted file mode 100644 index 629bf3a82..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Namespace.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import io.cdap.cdap.api.NamespaceSummary; - -import java.util.Objects; - -/** - * Uniquely identifies a namespace generation. - */ -public class Namespace { - protected final String name; - protected final long generation; - - protected Namespace(Namespace other) { - this(other.name, other.generation); - } - - public Namespace(String name, long generation) { - this.name = name; - this.generation = generation; - } - - public Namespace(NamespaceSummary summary) { - this(summary.getName(), summary.getGeneration()); - } - - public String getName() { - return name; - } - - public long getGeneration() { - return generation; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Namespace that = (Namespace) o; - return generation == that.generation && - Objects.equals(name, that.name); - } - - @Override - public int hashCode() { - return Objects.hash(name, generation); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/NamespacedId.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/NamespacedId.java deleted file mode 100644 index 307303a29..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/NamespacedId.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import java.util.Objects; - -/** - * A unique identifier for an entity within a namespace. - * The 'id' field is not globally unique, but is unique within the context. - * It is named 'id' for backward compatibility reasons. - */ -public class NamespacedId { - protected final Namespace namespace; - protected final String id; - - protected NamespacedId(NamespacedId other) { - this(other.namespace, other.id); - } - - public NamespacedId(Namespace namespace, String id) { - this.namespace = namespace; - this.id = id; - } - - public Namespace getNamespace() { - return namespace; - } - - public String getId() { - return id; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - NamespacedId that = (NamespacedId) o; - return Objects.equals(namespace, that.namespace) && - Objects.equals(id, that.id); - } - - @Override - public int hashCode() { - return Objects.hash(namespace, id); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/NotFoundException.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/NotFoundException.java deleted file mode 100644 index aeefec925..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/NotFoundException.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import java.net.HttpURLConnection; - -/** - * Thrown when some entity could not be found. - */ -public class NotFoundException extends StatusCodeException { - - public NotFoundException(String message) { - super(message, HttpURLConnection.HTTP_NOT_FOUND); - } - - public NotFoundException(String message, Throwable cause) { - super(message, cause, HttpURLConnection.HTTP_NOT_FOUND); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/PluginSpec.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/PluginSpec.java deleted file mode 100644 index 6b0cd66ff..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/PluginSpec.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import java.util.Map; - -/** - * Specification for a plugin to use in a pipeline. - */ -public class PluginSpec { - private final String name; - private final String type; - private final Map properties; - - public PluginSpec(String name, String type, Map properties) { - this.name = name; - this.type = type; - this.properties = properties; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Recipe.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Recipe.java deleted file mode 100644 index dec934f58..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Recipe.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import java.util.List; -import java.util.Objects; - -/** - * Defines the recipe object that is part of the {@link Request} - */ -public class Recipe { - // RecipeParser specified by the user - private final List directives; - - // Ability to save the directives - private final Boolean save; - - // Name of the recipe. - private final String name; - - public Recipe(List directives, Boolean save, String name) { - this.directives = directives; - this.save = save; - this.name = name; - } - - /** - * @return List of directives specified by the user. - */ - public List getDirectives() { - return directives; - } - - /** - * Adds a pragma directive at the front of the recipe. - */ - public void setPragma(String directive) { - if (directive != null) { - String pragma = directives.size() > 0 ? directives.get(0) : null; - if (pragma != null && !pragma.matches("(.*)load-directives(.*)")) { - directives.add(0, directive); - } else { - directives.set(0, directive); - } - } - } - - /** - * @return true if directives need to be saved, else false. - */ - public Boolean getSave() { - return save; - } - - /** - * @return name of the recipe. - */ - public String getName() { - return name; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Recipe recipe = (Recipe) o; - return Objects.equals(directives, recipe.directives) && - Objects.equals(save, recipe.save) && - Objects.equals(name, recipe.name); - } - - @Override - public int hashCode() { - return Objects.hash(directives, save, name); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Request.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Request.java deleted file mode 100644 index a7713e4c9..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Request.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import com.google.gson.JsonObject; - -/** - * Dataprep request body and it's structure. - */ -public interface Request { - /** - * @return Version of specification of request. - */ - int getVersion(); - - /** - * @return Workspace specification associated with the request. - */ - Workspace getWorkspace(); - - /** - * @return Sampling specification associated with the request. - */ - Sampling getSampling(); - - /** - * @return Recipe specification associated with the request. - */ - Recipe getRecipe(); - - /** - * @return Properties associated with the request. - */ - JsonObject getProperties(); -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/RequestV1.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/RequestV1.java deleted file mode 100644 index 7f49e55b0..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/RequestV1.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import com.google.gson.JsonObject; - -import java.util.Objects; - -/** - * Specifies the V1 version of the {@link Request} object. - */ -public final class RequestV1 implements Request { - // Version of request. - private final int version; - - // Workspace information associated with request. - private final Workspace workspace; - - // TestRecipe information associated with request. - private final Recipe recipe; - - // Sampling information associated with request. - private final Sampling sampling; - - // Additional properties that is of type json. - private final JsonObject properties; - - public RequestV1(Workspace workspace, Recipe recipe, Sampling sampling, JsonObject properties) { - this.version = 1; - this.workspace = workspace; - this.recipe = recipe; - this.sampling = sampling; - this.properties = properties; - } - - /** - * @return Version number of request specification. - */ - @Override - public int getVersion() { - return version; - } - - /** - * @return {@link Workspace} information associated with this request. - */ - @Override - public Workspace getWorkspace() { - return workspace; - } - - /** - * @return {@link Sampling} information associated with this request. - */ - @Override - public Sampling getSampling() { - return sampling; - } - - /** - * @return {@link Recipe} information associated with this request. - */ - @Override - public Recipe getRecipe() { - return recipe; - } - - /** - * @return Properties associated with the execution request. - */ - @Override - public JsonObject getProperties() { - return properties; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - RequestV1 requestV1 = (RequestV1) o; - return version == requestV1.version && - Objects.equals(workspace, requestV1.workspace) && - Objects.equals(recipe, requestV1.recipe) && - Objects.equals(sampling, requestV1.sampling) && - Objects.equals(properties, requestV1.properties); - } - - @Override - public int hashCode() { - return Objects.hash(version, workspace, recipe, sampling, properties); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Sampling.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Sampling.java deleted file mode 100644 index 3ccac588b..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Sampling.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import java.util.Objects; - -/** - * Defines the sampling specification of the {@link Request} - */ -public final class Sampling { - // Sampling method. - private final String method; - - // Seeding capability for sampling. - private final Integer seed; - - // Number of records to be read. - private final Integer limit; - - public Sampling(String method, Integer seed, Integer limit) { - this.method = method; - this.seed = seed; - this.limit = limit; - } - - /** - * @return Method for sampling data. - */ - public String getMethod() { - return method; - } - - /** - * @return Sampling seed. - */ - public Integer getSeed() { - if (seed != null) { - return seed; - } else { - return 1; - } - } - - /** - * @return Number of records to be read before applying directives. - */ - public Integer getLimit() { - if (limit != null) { - return limit; - } else { - return 100; - } - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Sampling sampling = (Sampling) o; - return Objects.equals(method, sampling.method) && - Objects.equals(seed, sampling.seed) && - Objects.equals(limit, sampling.limit); - } - - @Override - public int hashCode() { - return Objects.hash(method, seed, limit); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ServiceResponse.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ServiceResponse.java deleted file mode 100644 index b2af27333..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/ServiceResponse.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import java.util.Collection; -import java.util.Collections; - -/** - * Service response. - * - * @param type of value returned by the response - */ -public class ServiceResponse { - private final String message; - private final Integer count; - private final Collection values; - // TODO: (CDAP-14652) see if this is used by UI. It should be a boolean and not a string... - private final String truncated; - - public ServiceResponse(String message) { - this.message = message; - this.count = null; - this.values = Collections.emptyList(); - this.truncated = null; - } - - public ServiceResponse(T value) { - this(Collections.singletonList(value)); - } - - public ServiceResponse(Collection values) { - this(values, false); - } - - public ServiceResponse(Collection values, boolean truncated) { - this(values, truncated, "Success"); - } - - public ServiceResponse(Collection values, boolean truncated, String message) { - this.message = message; - this.count = values.size(); - this.values = values; - this.truncated = Boolean.toString(truncated); - } - - public String getMessage() { - return message; - } - - public Integer getCount() { - return count; - } - - public Collection getValues() { - return values; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/StatusCodeException.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/StatusCodeException.java deleted file mode 100644 index c1aa50dff..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/StatusCodeException.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -/** - * An exception that has an associated status code. - */ -public class StatusCodeException extends RuntimeException { - private final int code; - - public StatusCodeException(String s, int code) { - super(s); - this.code = code; - } - - public StatusCodeException(String s, Throwable throwable, int code) { - super(s, throwable); - this.code = code; - } - - public int getCode() { - return code; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/UnauthorizedException.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/UnauthorizedException.java deleted file mode 100644 index 4ebd9b83c..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/UnauthorizedException.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import java.net.HttpURLConnection; - -/** - * Thrown when an operation is not authorized. - */ -public class UnauthorizedException extends StatusCodeException { - - public UnauthorizedException(String message) { - super(message, HttpURLConnection.HTTP_UNAUTHORIZED); - } - - public UnauthorizedException(String message, Throwable cause) { - super(message, cause, HttpURLConnection.HTTP_UNAUTHORIZED); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Workspace.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Workspace.java deleted file mode 100644 index 10523be36..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/Workspace.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import java.util.Objects; - -/** - * Specification about workspace for the {@link Request} - */ -public final class Workspace { - // Name of the workspace. - private final String name; - - // Number of results to be returned for the workspace. - private final Integer results; - - public Workspace(String name, Integer results) { - this.name = name; - this.results = results; - } - - /** - * @return Name of the workspace. - */ - public String getName() { - return name; - } - - /** - * @return Number of results to return in the API. - */ - public Integer getResults() { - return results; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Workspace workspace = (Workspace) o; - return Objects.equals(name, workspace.name) && - Objects.equals(results, workspace.results); - } - - @Override - public int hashCode() { - return Objects.hash(name, results); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/WorkspaceIdentifier.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/WorkspaceIdentifier.java deleted file mode 100644 index 4e04450df..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/WorkspaceIdentifier.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.proto; - -import java.util.Objects; - -/** - * Workspace identifier information sent as response after reading table data into workspace - */ -public class WorkspaceIdentifier { - private final String id; - private final String name; - - public WorkspaceIdentifier(String id, String name) { - this.id = id; - this.name = name; - } - - public String getId() { - return id; - } - - public String getName() { - return name; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - WorkspaceIdentifier that = (WorkspaceIdentifier) o; - return Objects.equals(id, that.id) && Objects.equals(name, that.name); - } - - @Override - public int hashCode() { - return Objects.hash(id, name); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/adls/ADLSConnectionSample.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/adls/ADLSConnectionSample.java deleted file mode 100644 index 1d4396761..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/adls/ADLSConnectionSample.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.proto.adls; - -import io.cdap.wrangler.proto.ConnectionSample; - -/** - * ADLS connection sample information. - */ -public class ADLSConnectionSample extends ConnectionSample { - private final String fileName; - - public ADLSConnectionSample(String id, String name, String connection, String sampler, String connectionid) { - super(id, name, connection, sampler, connectionid); - this.fileName = name; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/adls/ADLSDirectoryEntryInfo.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/adls/ADLSDirectoryEntryInfo.java deleted file mode 100644 index bd50cbeb2..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/adls/ADLSDirectoryEntryInfo.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.proto.adls; - -import javax.annotation.Nullable; - -/** - * Information about an ADLS directory entry. - */ -public class ADLSDirectoryEntryInfo { - private final String name; - private final String path; - private final long displaySize; - private final String type; - private final String group; - private final String user; - private final String permission; - private final String modifiedTime; - private final Boolean directory; - private final Boolean wrangle; - - private ADLSDirectoryEntryInfo(String name, String type, @Nullable String path, @Nullable String owner, - @Nullable String group, - @Nullable String permission, @Nullable Long displaySize, - @Nullable String modifiedTime, - @Nullable Boolean directory, @Nullable Boolean wrangle) { - this.name = name; - this.path = path; - this.type = type; - this.user = owner; - this.group = group; - this.permission = permission; - this.displaySize = displaySize; - this.modifiedTime = modifiedTime; - this.directory = directory; - this.wrangle = wrangle; - } - - public static Builder builder(String name, String type) { - return new Builder(name, type); - } - - /** - * Builds ADLSDirectoryEntryInfo instances. - */ - public static class Builder { - private final String name; - private final String type; - private String path; - private String user; - private String group; - private Long displaySize; - private String modifiedTime; - private String permission; - private Boolean isDirectory; - private Boolean canWrangle; - - private Builder(String name, String type) { - this.name = name; - this.type = type; - } - - public Builder setPath(String path) { - this.path = path; - return this; - } - - public Builder setUser(String user) { - this.user = user; - return this; - } - - public Builder setGroup(String group) { - this.group = group; - return this; - } - - public Builder setDisplaySize(long displaySize) { - this.displaySize = displaySize; - return this; - } - - public Builder setLastModified(String modifiedTime) { - this.modifiedTime = modifiedTime; - return this; - } - - public Builder setPermission(String permission) { - this.permission = permission; - return this; - } - - public Builder setIsDirectory(boolean isDirectory) { - this.isDirectory = isDirectory; - return this; - } - - public Builder setCanWrangle(boolean canWrangle) { - this.canWrangle = canWrangle; - return this; - } - - public ADLSDirectoryEntryInfo build() { - return new ADLSDirectoryEntryInfo(name, type, path, user, group, permission, displaySize, modifiedTime, - isDirectory, canWrangle); - } - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/adls/FileQueryDetails.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/adls/FileQueryDetails.java deleted file mode 100644 index 903c14f86..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/adls/FileQueryDetails.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.proto.adls; - -/** - * A file utility encapsulating query parameters related to it. - */ -public class FileQueryDetails { - - private String filePath; - private int lines; - private String sampler; - private double fraction; - private String scope; - private String header; - - public FileQueryDetails(String header, String filePath, int lines, String sampler, double fraction, String scope) { - this.filePath = filePath; - this.lines = lines; - this.sampler = sampler; - this.fraction = fraction; - this.scope = scope; - this.header = header; - } - - public String getFilePath() { - return filePath; - } - - public String getHeader() { - return header; - } - - public int getLines() { - return lines; - } - - public String getSampler() { - return sampler; - } - - public double getFraction() { - return fraction; - } - - public String getScope() { - return scope; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/bigquery/BigQuerySpec.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/bigquery/BigQuerySpec.java deleted file mode 100644 index bf356ff6f..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/bigquery/BigQuerySpec.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.bigquery; - -import com.google.gson.annotations.SerializedName; -import io.cdap.wrangler.proto.PluginSpec; - -/** - * Plugin specification for a BigQuery pipeline source. - * - * TODO: (CDAP-14652) clean up this API. There is no reason for this class to exist. - */ -public class BigQuerySpec { - @SerializedName("BigQueryTable") - private final PluginSpec spec; - - public BigQuerySpec(PluginSpec spec) { - this.spec = spec; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/bigquery/DatasetInfo.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/bigquery/DatasetInfo.java deleted file mode 100644 index d7860a9b6..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/bigquery/DatasetInfo.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.bigquery; - -import com.google.gson.annotations.SerializedName; - -/** - * Information about a BigQuery dataset. - */ -public class DatasetInfo { - private final String name; - private final String description; - private final String location; - private final Long created; - @SerializedName("last-modified") - private final Long lastModified; - - public DatasetInfo(String name, String description, String location, Long created, Long lastModified) { - this.name = name; - this.description = description; - this.location = location; - this.created = created; - this.lastModified = lastModified; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/bigquery/TableInfo.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/bigquery/TableInfo.java deleted file mode 100644 index 2c6b2500e..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/bigquery/TableInfo.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.bigquery; - -import com.google.gson.annotations.SerializedName; - -/** - * Information about a BigQuery table. - */ -public class TableInfo { - private final String id; - private final String name; - private final String description; - private final String etag; - private final Long created; - @SerializedName("last-modified") - private final Long lastModified; - @SerializedName("expiration-time") - private final Long expirationTime; - - public TableInfo(String id, String name, String description, String etag, Long created, Long lastModified, - Long expirationTime) { - this.id = id; - this.name = name; - this.description = description; - this.etag = etag; - this.created = created; - this.lastModified = lastModified; - this.expirationTime = expirationTime; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/connection/Connection.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/connection/Connection.java deleted file mode 100644 index e5b69bd6e..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/connection/Connection.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.connection; - -import io.cdap.wrangler.proto.Contexts; -import io.cdap.wrangler.proto.NamespacedId; - -import java.util.Map; -import java.util.Objects; - -/** - * Basic connection object. - */ -public final class Connection extends ConnectionMeta { - private final String context; - private final String id; - // transient so it doesn't show up in REST endpoint responses - private final transient NamespacedId namespacedId; - - // Time in seconds - when it was created. - private final long created; - - // Time in second - when it was last updated. - private final long updated; - - // Determines if the connection is configured automatically - private final boolean preconfigured; - - public Connection(NamespacedId id, ConnectionType type, String name, String description, long created, long updated, - Map properties) { - this(id, type, name, description, created, updated, properties, false); - } - - public Connection(NamespacedId id, ConnectionType type, String name, String description, long created, long updated, - Map properties, boolean preconfigured) { - super(type, name, description, properties); - this.namespacedId = id; - this.context = id.getNamespace().getName(); - this.id = id.getId(); - this.created = created; - this.updated = updated; - this.preconfigured = preconfigured; - } - - public String getNamespace() { - return context == null ? Contexts.DEFAULT : context; - } - - /** - * @return id of the connection. - */ - public String getId() { - return id; - } - - /** - * @return time in second when the connection was created. - */ - public long getCreated() { - return created; - } - - /** - * @return time in second when the connection was last updated. - */ - public long getUpdated() { - return updated; - } - - public boolean isPreconfigured() { - return preconfigured; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - if (!super.equals(o)) { - return false; - } - Connection that = (Connection) o; - return created == that.created && - updated == that.updated && - preconfigured == that.preconfigured && - Objects.equals(id, that.id); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), id, created, updated, preconfigured); - } - - /** - * @return string representation of object. - */ - @Override - public String toString() { - return "Connection{" + - "id='" + id + '\'' + - ", name='" + name + '\'' + - ", type=" + type + - ", description='" + description + '\'' + - ", created=" + created + - ", updated=" + updated + - ", properties=" + properties + - ", preconfigured=" + preconfigured + - '}'; - } - - public static Builder builder(NamespacedId id) { - return new Builder(id); - } - - public static Builder builder(NamespacedId id, ConnectionMeta meta) { - return new Builder(id) - .setName(meta.getName()) - .setType(meta.getType()) - .setDescription(meta.getDescription()) - .setProperties(meta.getProperties()); - } - - /** - * Creates Connections. - */ - public static class Builder extends ConnectionMeta.Builder { - private final NamespacedId id; - private long created = -1L; - private long updated = -1L; - private boolean preconfigured = false; - - public Builder(NamespacedId id) { - this.id = id; - } - - public Builder setCreated(long created) { - this.created = created; - return this; - } - - public Builder setUpdated(long updated) { - this.updated = updated; - return this; - } - - public Builder setPreconfigured(boolean preconfigured) { - this.preconfigured = preconfigured; - return this; - } - - public Connection build() { - if (created < 0) { - throw new IllegalStateException("Created time must be above 0."); - } - if (updated < 0) { - throw new IllegalStateException("Updated time must be above 0."); - } - return new Connection(id, type, name, description, created, updated, properties, preconfigured); - } - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/connection/ConnectionMeta.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/connection/ConnectionMeta.java deleted file mode 100644 index dde1b6563..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/connection/ConnectionMeta.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.connection; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -/** - * Metadata about a connection. - */ -public class ConnectionMeta { - protected final ConnectionType type; - protected final String name; - protected final String description; - protected final Map properties; - - protected ConnectionMeta(ConnectionType type, String name, String description, - Map properties) { - this.type = type; - this.name = name; - this.description = description; - this.properties = Collections.unmodifiableMap(new HashMap<>(properties)); - } - - public ConnectionType getType() { - return type; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description == null ? "" : description; - } - - public Map getProperties() { - return properties == null ? Collections.emptyMap() : properties; - } - - /** - * Should be called if this object is created through deserialization of user input. - * - * @throws IllegalArgumentException if the object is invalid. - */ - public void validate() { - if (name == null || name.isEmpty()) { - throw new IllegalArgumentException("A connection name must be specified."); - } - if (type == null) { - throw new IllegalArgumentException("A connection type must be specified."); - } - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ConnectionMeta that = (ConnectionMeta) o; - return type == that.type && - Objects.equals(name, that.name) && - Objects.equals(description, that.description) && - Objects.equals(properties, that.properties); - } - - @Override - public int hashCode() { - return Objects.hash(type, name, description, properties); - } - - public static Builder builder() { - return new Builder(); - } - - public static Builder builder(T existing) { - return new Builder().setName(existing.getName()) - .setType(existing.getType()) - .setDescription(existing.getDescription()) - .setProperties(existing.getProperties()); - } - - /** - * Creates ConnectionMeta objects. - * - * @param type of builder - */ - public static class Builder { - protected ConnectionType type; - protected String name; - protected String description; - protected Map properties = new HashMap<>(); - - public T setType(ConnectionType type) { - this.type = type; - return (T) this; - } - - public T setName(String name) { - this.name = name; - return (T) this; - } - - public T setDescription(String description) { - this.description = description; - return (T) this; - } - - public T setProperties(Map properties) { - this.properties.clear(); - this.properties.putAll(properties); - return (T) this; - } - - public T putProperty(String key, String val) { - this.properties.put(key, val); - return (T) this; - } - - public ConnectionMeta build() { - ConnectionMeta meta = new ConnectionMeta(type, name, description, properties); - meta.validate(); - return meta; - } - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/connection/ConnectionType.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/connection/ConnectionType.java deleted file mode 100644 index 37d7a6f9f..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/connection/ConnectionType.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.connection; - - -import java.util.EnumSet; -import javax.annotation.Nullable; - -/** - * This class {@link ConnectionType} defines different connections from which the data is extracted. - * - * TODO: (CDAP-14619) make casing consistent. User requests currently must have the type as upper case, - * then the lower case version is stored in several places and returned in several responses. - */ -public enum ConnectionType { - UPLOAD("upload"), - FILE("file"), - DATABASE("database", "Database"), - TABLE("table"), - S3("s3", "S3"), - GCS("gcs", "GCS"), - ADLS("adls"), - BIGQUERY("bigquery", "BigQuery"), - KAFKA("kafka", "Kafka"), - SPANNER("spanner", "Spanner"); - - // file won't be upgraded since file connection type is meant for local file system and not packaged in distributed - // cdap - public static final EnumSet CONN_UPGRADABLE_TYPES = EnumSet.of(DATABASE, S3, GCS, BIGQUERY, KAFKA, SPANNER); - // upload is upgradable and it will get translates to a no-source pipeline in studio - public static final EnumSet WORKSPACE_UPGRADABLE_TYPES = - EnumSet.of(DATABASE, S3, GCS, BIGQUERY, KAFKA, SPANNER, UPLOAD); - - private final String type; - private final String connectorName; - - ConnectionType(String type) { - this(type, null); - } - - ConnectionType(String type, @Nullable String connectorName) { - this.type = type; - this.connectorName = connectorName; - } - - /** - * @return String representation of enum. - */ - public String getType() { - return type; - } - - @Nullable - public String getConnectorName() { - return connectorName; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/db/AllowedDriverInfo.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/db/AllowedDriverInfo.java deleted file mode 100644 index 93be804ac..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/db/AllowedDriverInfo.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.db; - -import com.google.gson.annotations.SerializedName; - -/** - * Information about an allowed JDBC driver plugin. - */ -public class AllowedDriverInfo { - @SerializedName("class") - private final String clazz; - private final String label; - private final String tag; - private final String name; - @SerializedName("default.port") - private final String port; - private final boolean basicAllowed; - - // TODO: CDAP-15132 Check if this class can be reconciled with DriverInfo class - public AllowedDriverInfo(String clazz, String label, String tag, String name, String port, boolean basicAllowed) { - this.clazz = clazz; - this.label = label; - this.tag = tag; - this.name = name; - this.port = port; - this.basicAllowed = basicAllowed; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/db/DBSpec.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/db/DBSpec.java deleted file mode 100644 index bcb395777..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/db/DBSpec.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.db; - -import com.google.gson.annotations.SerializedName; -import io.cdap.wrangler.proto.PluginSpec; - -/** - * Specification for an DB pipeline source plugin. - * - * TODO: (CDAP-14652) clean up this API. There is no reason for this class to exist. - */ -public class DBSpec { - @SerializedName("Database") - private final PluginSpec spec; - - public DBSpec(PluginSpec spec) { - this.spec = spec; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/db/JDBCDriverInfo.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/db/JDBCDriverInfo.java deleted file mode 100644 index 532879b54..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/db/JDBCDriverInfo.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.db; - -import com.google.gson.annotations.SerializedName; - -import java.util.List; -import java.util.Map; - -/** - * Information about a JDBC driver plugin. - */ -public class JDBCDriverInfo { - private final String label; - private final String version; - private final String url; - @SerializedName("default.port") - private final String port; - private final List fields; - private final Map properties; - - public JDBCDriverInfo(String label, String version, String url, String port, List fields, - Map properties) { - this.label = label; - this.version = version; - this.url = url; - this.port = port; - this.fields = fields; - this.properties = properties; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/file/FileConnectionSample.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/file/FileConnectionSample.java deleted file mode 100644 index 902375bfb..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/file/FileConnectionSample.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.file; - -import io.cdap.wrangler.proto.ConnectionSample; - -/** - * Information about a sample taken from a GCS Object. - */ -public class FileConnectionSample extends ConnectionSample { - private final String uri; - private final String path; - private final String file; - - public FileConnectionSample(String id, String name, String connection, String sampler, String connectionid, - String uri, String path, String file) { - super(id, name, connection, sampler, connectionid); - this.uri = uri; - this.path = path; - this.file = file; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/file/FileSpec.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/file/FileSpec.java deleted file mode 100644 index 938916c40..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/file/FileSpec.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.file; - -import com.google.gson.annotations.SerializedName; -import io.cdap.wrangler.proto.PluginSpec; - -/** - * Plugin specification for a File pipeline source. - * - * TODO: (CDAP-14652) clean up this API. There is no reason for this class to exist. - */ -public class FileSpec { - @SerializedName("File") - private final PluginSpec spec; - - public FileSpec(PluginSpec spec) { - this.spec = spec; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSBucketInfo.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSBucketInfo.java deleted file mode 100644 index bbaecd920..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSBucketInfo.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.gcs; - -import com.google.gson.annotations.SerializedName; - -/** - * Information about a GCS bucket. - */ -public class GCSBucketInfo { - private final String name; - private final String type; - private final String owner; - @SerializedName("generated-id") - private final String generatedId; - @SerializedName("meta-generation") - private final long metaGeneration; - private final long created; - private final boolean wrangle; - private final boolean directory; - - public GCSBucketInfo(String name, String type, String owner, long metaGeneration, String generatedId, - long created, boolean wrangle) { - this.name = name; - this.type = type; - this.owner = owner; - this.metaGeneration = metaGeneration; - this.generatedId = generatedId; - this.created = created; - this.wrangle = wrangle; - // this is constant, but is part of the response so must be a field in this class - this.directory = true; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSConnectionSample.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSConnectionSample.java deleted file mode 100644 index a9243bdc4..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSConnectionSample.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.gcs; - -import io.cdap.wrangler.proto.ConnectionSample; - -/** - * Information about a sample taken from a GCS Object. - */ -public class GCSConnectionSample extends ConnectionSample { - private final String uri; - private final String path; - private final String file; - private final String bucket; - - public GCSConnectionSample(String id, String name, String connection, String sampler, String connectionid, - String uri, String path, String file, String bucket) { - super(id, name, connection, sampler, connectionid); - this.uri = uri; - this.path = path; - this.file = file; - this.bucket = bucket; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSObjectInfo.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSObjectInfo.java deleted file mode 100644 index 729290fb4..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSObjectInfo.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.gcs; - -import javax.annotation.Nullable; - -/** - * Information about a GCS object. - */ -public class GCSObjectInfo { - private final String name; - private final String type; - private final String bucket; - private final String path; - private final String blob; - private final Long generation; - private final Long created; - private final Long updated; - private final Long size; - private final boolean directory; - private final Boolean wrangle; - - public GCSObjectInfo(String name, String bucket, String path, String blob, @Nullable Long generation, - boolean directory) { - this(name, bucket, path, blob, generation, directory, null, null, null, null, null); - } - - public GCSObjectInfo(String name, String bucket, String path, String blob, @Nullable Long generation, - boolean directory, - @Nullable String type, @Nullable Long created, @Nullable Long updated, @Nullable Long size, - @Nullable Boolean wrangle) { - this.name = name; - this.type = type; - this.bucket = bucket; - this.path = path; - this.blob = blob; - this.generation = generation; - this.created = created; - this.updated = updated; - this.size = size; - this.directory = directory; - this.wrangle = wrangle; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSSpec.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSSpec.java deleted file mode 100644 index 7d899d719..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/gcs/GCSSpec.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.gcs; - -import com.google.gson.annotations.SerializedName; -import io.cdap.wrangler.proto.PluginSpec; - -/** - * Plugin specification for a GCS pipeline source. - * - * TODO: (CDAP-14652) clean up this API. There is no reason for this class to exist. - */ -public class GCSSpec { - @SerializedName("GCSFile") - private final PluginSpec spec; - - public GCSSpec(PluginSpec spec) { - this.spec = spec; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/kafka/KafkaSpec.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/kafka/KafkaSpec.java deleted file mode 100644 index c99b5b4a3..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/kafka/KafkaSpec.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.kafka; - -import com.google.gson.annotations.SerializedName; -import io.cdap.wrangler.proto.PluginSpec; - -/** - * Plugin specification for a Kafka pipeline source. - * - * TODO: clean up this API. There is no reason for this class to exist. - */ -public class KafkaSpec { - @SerializedName("Kafka") - private final PluginSpec spec; - - public KafkaSpec(PluginSpec spec) { - this.spec = spec; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/Recipe.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/Recipe.java deleted file mode 100644 index d54cdad0f..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/Recipe.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.recipe.v2; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; - -/** - * Metadata information about a Recipe with only fields necessary for API user - */ -public class Recipe { - private final RecipeId recipeId; - private final String recipeName; - private final String description; - private final List directives; - private final long createdTimeMillis; - private final long updatedTimeMillis; - private final int recipeStepsCount; - - private Recipe(RecipeId recipeId, String recipeName, String description, List directives, - long createdTimeMillis, long updatedTimeMillis, int recipeStepsCount) { - this.recipeName = recipeName; - this.recipeId = recipeId; - this.description = description; - this.directives = Collections.unmodifiableList(directives); - this.createdTimeMillis = createdTimeMillis; - this.updatedTimeMillis = updatedTimeMillis; - this.recipeStepsCount = recipeStepsCount; - } - - public String getRecipeName() { - return recipeName; - } - - public RecipeId getRecipeId() { - return recipeId; - } - - public String getDescription() { - return description; - } - - public List getDirectives() { - return directives; - } - - public long getCreatedTimeMillis() { - return createdTimeMillis; - } - - public long getUpdatedTimeMillis() { - return updatedTimeMillis; - } - - public int getRecipeStepsCount() { - return recipeStepsCount; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - Recipe other = (Recipe) o; - return Objects.equals(recipeId, other.recipeId); - } - - @Override - public int hashCode() { - return Objects.hash(recipeName, recipeId, directives); - } - - public static Builder builder(RecipeId recipeId) { - return new Builder(recipeId); - } - - public static Builder builder(Recipe existing) { - return new Builder(existing.getRecipeId()) - .setRecipeName(existing.getRecipeName()) - .setDescription(existing.getDescription()) - .setDirectives(existing.getDirectives()) - .setCreatedTimeMillis(existing.getCreatedTimeMillis()) - .setUpdatedTimeMillis(existing.getUpdatedTimeMillis()) - .setRecipeStepsCount(existing.getRecipeStepsCount()); - } - - /** - * Creates a Recipe meta object - */ - public static class Builder { - private final RecipeId recipeId; - private String recipeName; - private String description; - private List directives; - private long createdTimeMillis; - private long updatedTimeMillis; - private int recipeStepsCount; - - Builder(RecipeId recipeId) { - this.recipeId = recipeId; - this.directives = new ArrayList<>(); - } - - public Builder setRecipeName(String recipeName) { - this.recipeName = recipeName; - return this; - } - - public Builder setDescription(String description) { - this.description = description; - return this; - } - - public Builder setDirectives(List directives) { - this.directives.clear(); - this.directives.addAll(directives); - return this; - } - - public Builder setCreatedTimeMillis(long createdTimeMillis) { - this.createdTimeMillis = createdTimeMillis; - return this; - } - - public Builder setUpdatedTimeMillis(long updatedTimeMillis) { - this.updatedTimeMillis = updatedTimeMillis; - return this; - } - - public Builder setRecipeStepsCount(int recipeStepsCount) { - this.recipeStepsCount = recipeStepsCount; - return this; - } - - public Recipe build() { - return new Recipe(recipeId, recipeName, description, directives, - createdTimeMillis, updatedTimeMillis, recipeStepsCount); - } - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/RecipeCreationRequest.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/RecipeCreationRequest.java deleted file mode 100644 index 5b90547e5..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/RecipeCreationRequest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.recipe.v2; - -import java.util.List; - -/** - * Creation request for a Recipe - */ -public class RecipeCreationRequest { - private final String recipeName; - private final String description; - private final List directives; - - public RecipeCreationRequest(String recipeName, String description, List directives) { - this.recipeName = recipeName; - this.description = description; - this.directives = directives; - } - - public String getRecipeName() { - return recipeName; - } - - public List getDirectives() { - return directives; - } - - public String getDescription() { - return description; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/RecipeId.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/RecipeId.java deleted file mode 100644 index a05b2a85a..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/RecipeId.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.recipe.v2; - -import io.cdap.cdap.api.NamespaceSummary; - -import java.util.Objects; -import java.util.UUID; - -/** - * Recipe id - */ -public class RecipeId { - private final NamespaceSummary namespace; - private final String recipeId; - - private RecipeId(NamespaceSummary namespace, String recipeId) { - this.namespace = namespace; - this.recipeId = recipeId; - } - - public NamespaceSummary getNamespace() { - return namespace; - } - - public String getRecipeId() { - return recipeId; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - RecipeId other = (RecipeId) o; - return Objects.equals(namespace, other.namespace) && - Objects.equals(recipeId, other.recipeId); - } - - @Override - public int hashCode() { - return Objects.hash(namespace, recipeId); - } - - public static Builder builder(NamespaceSummary namespace) { - return new Builder(namespace); - } - - public static Builder builder(RecipeId existing) { - return new Builder(existing.getNamespace()).setRecipeId(existing.getRecipeId()); - } - - /** - * Creates a Recipe id object - */ - public static class Builder { - private final NamespaceSummary namespace; - private String recipeId; - - Builder(NamespaceSummary namespace) { - this.namespace = new NamespaceSummary(namespace.getName(), null, namespace.getGeneration()); - this.recipeId = UUID.randomUUID().toString(); - } - - public Builder setRecipeId(String recipeId) { - this.recipeId = recipeId; - return this; - } - - public RecipeId build() { - return new RecipeId(namespace, recipeId); - } - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/RecipeListResponse.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/RecipeListResponse.java deleted file mode 100644 index 3887323d2..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/recipe/v2/RecipeListResponse.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.recipe.v2; - -import io.cdap.wrangler.proto.ServiceResponse; - -import java.util.List; - -/** - * Represents a paginated list of recipes as a response. - */ -public class RecipeListResponse extends ServiceResponse { - String nextPageToken; - - public RecipeListResponse(List recipes, String nextPageToken) { - super(recipes); - this.nextPageToken = nextPageToken; - } - - public String getNextPageToken() { - return nextPageToken; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/s3/S3ConnectionSample.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/s3/S3ConnectionSample.java deleted file mode 100644 index 4f6742a7d..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/s3/S3ConnectionSample.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.s3; - -import com.google.gson.annotations.SerializedName; -import io.cdap.wrangler.proto.ConnectionSample; - -/** - * S3 connection sample information. - */ -public class S3ConnectionSample extends ConnectionSample { - @SerializedName("bucket-name") - private final String bucketName; - private final String key; - - public S3ConnectionSample(String id, String name, String connection, String sampler, String connectionid, - String bucketName, String key) { - super(id, name, connection, sampler, connectionid); - this.bucketName = bucketName; - this.key = key; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/s3/S3ObjectInfo.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/s3/S3ObjectInfo.java deleted file mode 100644 index 95432a220..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/s3/S3ObjectInfo.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.s3; - -import com.google.gson.annotations.SerializedName; - -import javax.annotation.Nullable; - -/** - * Information about an S3 object. - */ -public class S3ObjectInfo { - private final String name; - private final String type; - private final String path; - private final String owner; - @SerializedName("class") - private final String storageClass; - private final Long created; - @SerializedName("last-modified") - private final Long lastModified; - private final Long size; - private final Boolean directory; - private final Boolean wrangle; - - private S3ObjectInfo(String name, String type, @Nullable String path, @Nullable String owner, - @Nullable String storageClass, @Nullable Long created, @Nullable Long lastModified, - @Nullable Long size, @Nullable Boolean directory, @Nullable Boolean wrangle) { - this.name = name; - this.path = path; - this.type = type; - this.owner = owner; - this.storageClass = storageClass; - this.created = created; - this.lastModified = lastModified; - this.size = size; - this.directory = directory; - this.wrangle = wrangle; - } - - public static Builder builder(String name, String type) { - return new Builder(name, type); - } - - /** - * Builds S3ObjectInfo instances. - */ - public static class Builder { - private final String name; - private final String type; - private String path; - private String owner; - private String storageClass; - private Long created; - private Long lastModified; - private Long size; - private Boolean isDirectory; - private Boolean canWrangle; - - private Builder(String name, String type) { - this.name = name; - this.type = type; - } - - public Builder setPath(String path) { - this.path = path; - return this; - } - - public Builder setOwner(String owner) { - this.owner = owner; - return this; - } - - public Builder setStorageClass(String storageClass) { - this.storageClass = storageClass; - return this; - } - - public Builder setCreated(long created) { - this.created = created; - return this; - } - - public Builder setLastModified(long lastModified) { - this.lastModified = lastModified; - return this; - } - - public Builder setSize(long size) { - this.size = size; - return this; - } - - public Builder setIsDirectory(boolean isDirectory) { - this.isDirectory = isDirectory; - return this; - } - - public Builder setCanWrangle(boolean canWrangle) { - this.canWrangle = canWrangle; - return this; - } - - public S3ObjectInfo build() { - return new S3ObjectInfo(name, type, path, owner, storageClass, created, lastModified, size, - isDirectory, canWrangle); - } - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/s3/S3Spec.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/s3/S3Spec.java deleted file mode 100644 index 0db59cd84..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/s3/S3Spec.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.s3; - -import com.google.gson.annotations.SerializedName; -import io.cdap.wrangler.proto.PluginSpec; - -/** - * Specification for an S3 plugin. - * - * TODO: (CDAP-14652) clean up this API. There is no reason for this class to exist. - */ -public class S3Spec { - @SerializedName("S3") - private final PluginSpec s3; - - public S3Spec(PluginSpec s3) { - this.s3 = s3; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/DataModelSchemaEntry.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/DataModelSchemaEntry.java deleted file mode 100644 index 0a194ca6a..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/DataModelSchemaEntry.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.proto.schema; - -import io.cdap.wrangler.proto.NamespacedId; - -import java.util.Objects; - -/** - * DataModelSchemaEntry represents the meta data of a data model. - */ -public final class DataModelSchemaEntry { - - private final NamespacedId namespacedId; - private final String displayName; - private final String description; - private final Long revision; - - public DataModelSchemaEntry(NamespacedId namespacedId, String displayName, String description, Long revision) { - this.namespacedId = namespacedId; - this.displayName = displayName; - this.description = description; - this.revision = revision; - } - - public NamespacedId getNamespacedId() { - return namespacedId; - } - - public String getDisplayName() { - return displayName; - } - - public String getDescription() { - return description; - } - - public Long getRevision() { - return revision; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - if (!super.equals(o)) { - return false; - } - DataModelSchemaEntry that = (DataModelSchemaEntry) o; - return Objects.equals(namespacedId, that.namespacedId) && - Objects.equals(displayName, that.displayName) && - Objects.equals(description, that.description) && - Objects.equals(revision, that.revision); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/DataModelUrlRequest.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/DataModelUrlRequest.java deleted file mode 100644 index 99862a898..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/DataModelUrlRequest.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright © 2020 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.proto.schema; - -import javax.annotation.Nullable; - -/** - * Request for loading data models - */ -public class DataModelUrlRequest { - - private String url; - - DataModelUrlRequest(String url) { - this.url = url; - } - - @Nullable - public String getUrl() { - return url; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/SchemaDescriptorType.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/SchemaDescriptorType.java deleted file mode 100644 index 5006d7e2c..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/SchemaDescriptorType.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.schema; - -import com.google.gson.annotations.SerializedName; - -/** - * This class {@link SchemaDescriptorType} defines types of Schema supported by the Schema registry - */ -public enum SchemaDescriptorType { - @SerializedName("avro") - // Represents an AVRO schema. - AVRO, - - @SerializedName("protobuf-desc") - // Represents a protobuf descriptor schema. - PROTOBUF_DESC, - - @SerializedName("protobuf-binary") - // Represents schema is of type protobuf-binary which is compiled classes on protobuf. - PROTOBUF_BINARY, - - @SerializedName("copybook") - // Defines copybook for COBOL EBCDIC data. - COPYBOOK; -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/SchemaEntry.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/SchemaEntry.java deleted file mode 100644 index cf5978af8..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/SchemaEntry.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.schema; - -import io.cdap.cdap.api.common.Bytes; -import io.cdap.wrangler.proto.NamespacedId; - -import java.util.Objects; -import java.util.Set; -import javax.annotation.Nullable; - -/** - * Schema Entry. - * - * TODO: (CDAP-14679) Create another SchemaInfo class for the schema itself - * and remove version list and current field from this class. - */ -public final class SchemaEntry extends NamespacedId { - private final String name; - private final String description; - private final SchemaDescriptorType type; - private final Set versions; - private final String specification; - private final Long current; - - public SchemaEntry(NamespacedId id, String name, String description, SchemaDescriptorType type, - Set versions, @Nullable byte[] specification, @Nullable Long current) { - super(id); - this.name = name; - this.description = description; - this.type = type; - this.versions = versions; - this.specification = specification == null ? null : Bytes.toHexString(specification); - this.current = current; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public SchemaDescriptorType getType() { - return type; - } - - public Set getVersions() { - return versions; - } - - @Nullable - public Long getCurrent() { - return current; - } - - @Nullable - public byte[] getSpecification() { - return specification == null ? null : Bytes.fromHexString(specification); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - if (!super.equals(o)) { - return false; - } - SchemaEntry that = (SchemaEntry) o; - return Objects.equals(name, that.name) && - Objects.equals(description, that.description) && - type == that.type && - Objects.equals(versions, that.versions) && - Objects.equals(specification, that.specification) && - Objects.equals(current, that.current); - } - - @Override - public int hashCode() { - return Objects.hash(super.hashCode(), name, description, type, versions, specification, current); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/SchemaEntryVersion.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/SchemaEntryVersion.java deleted file mode 100644 index 417bcf4ab..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/schema/SchemaEntryVersion.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.schema; - -import io.cdap.wrangler.proto.NamespacedId; - -/** - * A schema ID and entry version. - */ -public class SchemaEntryVersion extends NamespacedId { - private final long version; - - public SchemaEntryVersion(NamespacedId id, long version) { - super(id); - this.version = version; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/spanner/SpannerDatabase.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/spanner/SpannerDatabase.java deleted file mode 100644 index 4d6ddaae4..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/spanner/SpannerDatabase.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.spanner; - -/** - * Spanner database information - */ -public class SpannerDatabase { - private final String name; - - public SpannerDatabase(String name) { - this.name = name; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/spanner/SpannerSpec.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/spanner/SpannerSpec.java deleted file mode 100644 index f126a2877..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/spanner/SpannerSpec.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.spanner; - -import com.google.gson.annotations.SerializedName; -import io.cdap.wrangler.proto.PluginSpec; - -/** - * Plugin specification for a spanner pipeline source. - * - * TODO: (CDAP-14652) clean up this API. There is no reason for this class to exist. - */ -public class SpannerSpec { - @SerializedName("Spanner") - private final PluginSpec spec; - - public SpannerSpec(PluginSpec spec) { - this.spec = spec; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/spanner/SpannerTable.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/spanner/SpannerTable.java deleted file mode 100644 index 83f0048d6..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/spanner/SpannerTable.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.spanner; - -/** - * Spanner table information - */ -public class SpannerTable { - private final String name; - - public SpannerTable(String name) { - this.name = name; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/ColumnStatistics.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/ColumnStatistics.java deleted file mode 100644 index 1daff73f1..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/ColumnStatistics.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.workspace; - -import java.util.Map; -import javax.annotation.Nullable; - -/** - * Statistics about the result of executing directives on a workspace. - */ -public class ColumnStatistics { - private final Map general; - private final Map types; - - public ColumnStatistics(@Nullable Map general, @Nullable Map types) { - this.general = general; - this.types = types; - } - - @Nullable - public Map getGeneral() { - return general; - } - - @Nullable - public Map getTypes() { - return types; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/ColumnValidationResult.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/ColumnValidationResult.java deleted file mode 100644 index 841533e0c..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/ColumnValidationResult.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.workspace; - -import javax.annotation.Nullable; - -/** - * Whether a column is valid or not. - */ -public class ColumnValidationResult { - private final boolean valid; - private final String message; - - public ColumnValidationResult(@Nullable String message) { - this.valid = message != null; - this.message = message; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DataModelInfo.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DataModelInfo.java deleted file mode 100644 index b80b5c44d..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DataModelInfo.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.proto.workspace; - - -/** - * The DataModelInfo object contains the properties for adding a DataModel to the workspace. - */ -public final class DataModelInfo { - - public static final Long INVALID_REVISION = -1L; - private final String id; - private final Long revision; - - public DataModelInfo(String id, Long revision) { - this.id = id; - this.revision = revision; - } - - public String getId() { - return this.id; - } - - public Long getRevision() { - return this.revision; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DataModelRequest.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DataModelRequest.java deleted file mode 100644 index 2d57c3822..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DataModelRequest.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.proto.workspace; - -/** - * The DataModelRequest object contains the properties for adding a DataModel to the workspace. - */ -public final class DataModelRequest { - - private final String id; - private final Long revision; - - public DataModelRequest(String id, Long revision) { - this.id = id; - this.revision = revision; - } - - public String getId() { - return this.id; - } - - public Long getRevision() { - return this.revision; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveArtifact.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveArtifact.java deleted file mode 100644 index cb1189588..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveArtifact.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.workspace; - -import io.cdap.cdap.api.artifact.ArtifactInfo; - -import java.util.Map; - -/** - * Information about an artifact that contains a directive. - */ -public class DirectiveArtifact { - private final String name; - private final String version; - private final String scope; - private final Map properties; - - public DirectiveArtifact(ArtifactInfo artifactInfo) { - this.name = artifactInfo.getName(); - this.version = artifactInfo.getVersion(); - this.scope = artifactInfo.getScope().name(); - this.properties = artifactInfo.getProperties(); - } - - public DirectiveArtifact(String name, String version, String scope) { - this.name = name; - this.version = version; - this.scope = scope; - this.properties = null; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveDescriptor.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveDescriptor.java deleted file mode 100644 index efcf7acfb..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveDescriptor.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.workspace; - -import com.google.gson.annotations.SerializedName; -import io.cdap.cdap.api.plugin.PluginClass; - -/** - * Describes a directive. - */ -public class DirectiveDescriptor { - private final String name; - private final String description; - private final String type; - @SerializedName("class") - private final String className; - private final DirectiveArtifact artifact; - - public DirectiveDescriptor(PluginClass pluginClass, DirectiveArtifact artifact) { - this.name = pluginClass.getName(); - this.description = pluginClass.getDescription(); - this.type = pluginClass.getType(); - this.className = pluginClass.getClassName(); - this.artifact = artifact; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveExecutionResponse.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveExecutionResponse.java deleted file mode 100644 index b6aa219c9..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveExecutionResponse.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.workspace; - -import io.cdap.wrangler.proto.ServiceResponse; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * The result of executing directives on a workspace. - */ -public class DirectiveExecutionResponse extends ServiceResponse> { - private final Collection header; - private final Map types; - private final List directives; - - public DirectiveExecutionResponse(Collection> values, Collection header, - Map types, List directives) { - super(values); - this.header = header; - this.types = types; - this.directives = directives; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveUsage.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveUsage.java deleted file mode 100644 index 0694c2fca..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/DirectiveUsage.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.workspace; - -import io.cdap.wrangler.api.parser.UsageDefinition; - -/** - * Information about how to use a directive - */ -public class DirectiveUsage { - private final String directive; - private final String usage; - private final String description; - private final boolean excluded; - private final boolean alias; - private final String scope; - private final UsageDefinition arguments; - private final String[] categories; - - public DirectiveUsage(String directive, String usage, String description, boolean excluded, boolean alias, - String scope, UsageDefinition arguments, String[] categories) { - this.directive = directive; - this.usage = usage; - this.description = description; - this.excluded = excluded; - this.alias = alias; - this.scope = scope; - this.arguments = arguments; - this.categories = categories; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/ModelInfo.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/ModelInfo.java deleted file mode 100644 index 25144cf9b..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/ModelInfo.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.proto.workspace; - -import javax.annotation.Nullable; - -/** - *The ModelInfo - */ -public final class ModelInfo { - private final String id; - - ModelInfo(@Nullable String id) { - this.id = id; - } - - @Nullable - public String getId() { - return id; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/WorkspaceInfo.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/WorkspaceInfo.java deleted file mode 100644 index 55bfe39de..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/WorkspaceInfo.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.workspace; - -import com.google.gson.annotations.SerializedName; - -/** - * Information about a workspace - */ -public class WorkspaceInfo { - private final String id; - private final String name; - private final String delimiter; - private final String charset; - @SerializedName("Content-Type") - private final String contentType; - // this is the connection type - private final String connection; - private final String sampler; - - public WorkspaceInfo(String id, String name, String delimiter, String charset, String contentType, - String connection, String sampler) { - this.id = id; - this.name = name; - this.delimiter = delimiter; - this.charset = charset; - this.contentType = contentType; - this.connection = connection; - this.sampler = sampler; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/WorkspaceSummaryResponse.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/WorkspaceSummaryResponse.java deleted file mode 100644 index d7cb0d454..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/WorkspaceSummaryResponse.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.workspace; - -/** - * Summary of executing directives on a workspace. - */ -public class WorkspaceSummaryResponse { - private final int status; - private final int count; - private final String message; - private final WorkspaceValidationResult values; - - public WorkspaceSummaryResponse(WorkspaceValidationResult values) { - this.status = 200; - this.count = 2; - this.message = "Success"; - this.values = values; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/WorkspaceValidationResult.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/WorkspaceValidationResult.java deleted file mode 100644 index 8457f335b..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/WorkspaceValidationResult.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.workspace; - -import java.util.Map; - -/** - * Result of validating a workspace. - */ -public class WorkspaceValidationResult { - private final Map statistics; - private final Map validation; - - public WorkspaceValidationResult(Map validation, - Map statistics) { - this.validation = validation; - this.statistics = statistics; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/Artifact.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/Artifact.java deleted file mode 100644 index 2d7e5772d..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/Artifact.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import java.util.Objects; -import javax.annotation.Nullable; - -/** - * An artifact. - */ -public class Artifact { - private final String name; - private final String version; - private final String scope; - - public Artifact(String name, String version, String scope) { - this.name = name; - this.version = version; - this.scope = scope; - } - - @Nullable - public String getName() { - return name; - } - - @Nullable - public String getVersion() { - return version; - } - - @Nullable - public String getScope() { - return scope; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - Artifact artifact = (Artifact) o; - return Objects.equals(name, artifact.name) && - Objects.equals(version, artifact.version) && - Objects.equals(scope, artifact.scope); - } - - @Override - public int hashCode() { - return Objects.hash(name, version, scope); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/DirectiveExecutionRequest.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/DirectiveExecutionRequest.java deleted file mode 100644 index a77ce1f5d..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/DirectiveExecutionRequest.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import java.util.Collections; -import java.util.List; - -/** - * Directive execution request for v2 endpoint - */ -public class DirectiveExecutionRequest { - private final List directives; - private final int limit; - - public DirectiveExecutionRequest(List directives, int limit) { - this.directives = directives; - this.limit = limit; - } - - public int getLimit() { - return limit; - } - - public List getDirectives() { - return directives == null ? Collections.emptyList() : directives; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/DirectiveExecutionResponse.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/DirectiveExecutionResponse.java deleted file mode 100644 index 871e649de..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/DirectiveExecutionResponse.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import io.cdap.wrangler.proto.workspace.WorkspaceValidationResult; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * V2 version of execution response - */ -public class DirectiveExecutionResponse extends ServiceResponse> { - private final Set headers; - private final Map types; - private final WorkspaceValidationResult summary; - - public DirectiveExecutionResponse(List> values, Set headers, Map types, - WorkspaceValidationResult summary) { - super(values); - this.headers = headers; - this.types = types; - this.summary = summary; - } - - public Set getHeaders() { - return headers; - } - - public Map getTypes() { - return types; - } - - public WorkspaceValidationResult getSummary() { - return summary; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/DirectiveUsage.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/DirectiveUsage.java deleted file mode 100644 index f34df6325..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/DirectiveUsage.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import io.cdap.wrangler.api.parser.UsageDefinition; - -/** - * V2 version for directives - */ -public class DirectiveUsage { - private final String directive; - private final String usage; - private final String description; - private final String scope; - private final UsageDefinition arguments; - private final String[] categories; - - public DirectiveUsage(String directive, String usage, String description, String scope, - UsageDefinition arguments, String[] categories) { - this.directive = directive; - this.usage = usage; - this.description = description; - this.scope = scope; - this.arguments = arguments; - this.categories = categories; - } - - public String getDirective() { - return directive; - } - - public String getUsage() { - return usage; - } - - public String getDescription() { - return description; - } - - public String getScope() { - return scope; - } - - public UsageDefinition getArguments() { - return arguments; - } - - public String[] getCategories() { - return categories; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/Plugin.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/Plugin.java deleted file mode 100644 index a21b75183..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/Plugin.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import java.util.Map; -import java.util.Objects; - -/** - * Plugin information - */ -public class Plugin { - private final String name; - private final String type; - private final Map properties; - private final Artifact artifact; - - public Plugin(String name, String type, Map properties, Artifact artifact) { - this.name = name; - this.type = type; - this.properties = properties; - this.artifact = artifact; - } - - public String getName() { - return name; - } - - public String getType() { - return type; - } - - public Artifact getArtifact() { - return artifact; - } - - public Map getProperties() { - return properties; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - Plugin that = (Plugin) o; - return Objects.equals(name, that.name) && - Objects.equals(type, that.type) && - Objects.equals(properties, that.properties) && - Objects.equals(artifact, that.artifact); - } - - @Override - public int hashCode() { - return Objects.hash(name, type, properties, artifact); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/RecipeExceptionResponse.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/RecipeExceptionResponse.java deleted file mode 100644 index c6b264c8e..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/RecipeExceptionResponse.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto.workspace.v2; - -/** - * Response returned when a {@link io.cdap.wrangler.api.RecipeException} occurs. Contains information about row index - * in dataset and directive index in recipe that caused the error. - * @param - */ -public class RecipeExceptionResponse extends ServiceResponse { - private final Integer rowIndex; - private final Integer directiveIndex; - public RecipeExceptionResponse(String message, Integer rowIndex, Integer directiveIndex) { - super(message); - this.rowIndex = rowIndex; - this.directiveIndex = directiveIndex; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/SampleSpec.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/SampleSpec.java deleted file mode 100644 index 79cc1a010..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/SampleSpec.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import io.cdap.cdap.etl.api.connector.SampleRequest; -import io.cdap.cdap.etl.api.connector.SampleType; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; -import javax.annotation.Nullable; - -/** - * Spec for the workspace sample - */ -public class SampleSpec { - private final String connectionName; - private final String connectionType; - private final String path; - private final Set relatedPlugins; - // This gives the different methods the current connection supports for sampling - // (e.g. first N rows, randomized, stratified) - private final Set supportedSampleTypes; - // We store the SampleRequest so that the frontend knows the most recent sampling action (if any) - // when it gets passed the SampleSpec - private final SampleRequest sampleRequest; - - public SampleSpec(String connectionName, String connectionType, @Nullable String path, - Set relatedPlugins, Set supportedSampleTypes, SampleRequest sampleRequest) { - this.connectionName = connectionName; - this.connectionType = connectionType; - this.path = path; - this.relatedPlugins = relatedPlugins; - if (supportedSampleTypes != null) { - this.supportedSampleTypes = supportedSampleTypes; - } else { - this.supportedSampleTypes = new HashSet<>(); - } - this.sampleRequest = sampleRequest; - } - - public SampleSpec(String connectionName, String connectionType, @Nullable String path, - Set relatedPlugins) { - this(connectionName, connectionType, path, relatedPlugins, Collections.emptySet(), null); - } - - public String getConnectionName() { - return connectionName; - } - - public String getConnectionType() { - return connectionType; - } - - // path is not there for an upgraded workspace - @Nullable - public String getPath() { - return path; - } - - public Set getRelatedPlugins() { - return relatedPlugins; - } - - public Set getSupportedSampleTypes() { - return supportedSampleTypes; - } - - public SampleRequest getSampleRequest() { - return sampleRequest; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - SampleSpec that = (SampleSpec) o; - return Objects.equals(connectionName, that.connectionName) && - Objects.equals(connectionType, that.connectionType) && - Objects.equals(path, that.path) && - Objects.equals(relatedPlugins, that.relatedPlugins) && - Objects.equals(supportedSampleTypes, that.supportedSampleTypes) && - Objects.equals(sampleRequest, that.sampleRequest); - } - - @Override - public int hashCode() { - return Objects.hash(connectionName, connectionType, path, relatedPlugins, supportedSampleTypes, sampleRequest); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/ServiceResponse.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/ServiceResponse.java deleted file mode 100644 index 2ca02cabb..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/ServiceResponse.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import java.util.Collection; -import java.util.Collections; - -/** - * Service response for v2 endpoints. - * - * @param type of value returned by the response - */ -public class ServiceResponse { - private final String message; - private final Integer count; - private final Collection values; - - public ServiceResponse(String message) { - this.message = message; - this.count = null; - this.values = Collections.emptyList(); - } - - public ServiceResponse(T value) { - this(Collections.singletonList(value)); - } - - public ServiceResponse(Collection values) { - this(values, "Success"); - } - - public ServiceResponse(Collection values, String message) { - this.message = message; - this.count = values.size(); - this.values = values; - } - - public String getMessage() { - return message; - } - - public Integer getCount() { - return count; - } - - public Collection getValues() { - return values; - } -} - diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/StageSpec.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/StageSpec.java deleted file mode 100644 index b5ca8eec3..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/StageSpec.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import io.cdap.cdap.api.data.schema.Schema; - -import java.util.Objects; -import javax.annotation.Nullable; - -/** - * Stage spec for a plugin - */ -public class StageSpec { - private final Schema schema; - private final Plugin plugin; - - public StageSpec(@Nullable Schema schema, Plugin plugin) { - this.schema = schema; - this.plugin = plugin; - } - - @Nullable - public Schema getSchema() { - return schema; - } - - public Plugin getPlugin() { - return plugin; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - StageSpec stageSpec = (StageSpec) o; - return Objects.equals(schema, stageSpec.schema) && - Objects.equals(plugin, stageSpec.plugin); - } - - @Override - public int hashCode() { - return Objects.hash(schema, plugin); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/Workspace.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/Workspace.java deleted file mode 100644 index 16aac68f8..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/Workspace.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import com.google.gson.JsonObject; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import javax.annotation.Nullable; - -/** - * Metadata information about a workspace - */ -public class Workspace { - private final String workspaceName; - private final String workspaceId; - private final List directives; - private final long createdTimeMillis; - private final long updatedTimeMillis; - // this is null when the sample does not have a spec, currently only example is directly upload data to wrangler - private final SampleSpec sampleSpec; - // this is for insights page in UI - private final JsonObject insights; - - private Workspace(String workspaceName, String workspaceId, List directives, - long createdTimeMillis, long updatedTimeMillis, @Nullable SampleSpec sampleSpec, - JsonObject insights) { - this.workspaceName = workspaceName; - this.workspaceId = workspaceId; - this.directives = directives; - this.createdTimeMillis = createdTimeMillis; - this.updatedTimeMillis = updatedTimeMillis; - this.sampleSpec = sampleSpec; - this.insights = insights; - } - - public String getWorkspaceName() { - return workspaceName; - } - - public String getWorkspaceId() { - return workspaceId; - } - - public List getDirectives() { - return directives; - } - - public long getCreatedTimeMillis() { - return createdTimeMillis; - } - - public long getUpdatedTimeMillis() { - return updatedTimeMillis; - } - - @Nullable - public SampleSpec getSampleSpec() { - return sampleSpec; - } - - public JsonObject getInsights() { - return insights; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - Workspace workspace = (Workspace) o; - return Objects.equals(workspaceName, workspace.workspaceName) && - Objects.equals(workspaceId, workspace.workspaceId) && - Objects.equals(directives, workspace.directives) && - Objects.equals(sampleSpec, workspace.sampleSpec); - } - - @Override - public int hashCode() { - return Objects.hash(workspaceName, workspaceId, directives, sampleSpec); - } - - public static Builder builder(String name, String workspaceId) { - return new Builder(name, workspaceId); - } - - public static Builder builder(Workspace existing) { - return new Builder(existing.getWorkspaceName(), existing.getWorkspaceId()) - .setDirectives(existing.getDirectives()) - .setCreatedTimeMillis(existing.getCreatedTimeMillis()) - .setUpdatedTimeMillis(existing.getUpdatedTimeMillis()) - .setSampleSpec(existing.getSampleSpec()) - .setInsights(existing.getInsights()); - } - - /** - * Creates Workspace meta objects. - */ - public static class Builder { - private final String workspaceName; - private final String workspaceId; - private final List directives; - private long createdTimeMillis; - private long updatedTimeMillis; - private SampleSpec sampleSpec; - private JsonObject insights; - - Builder(String name, String workspaceId) { - this.workspaceName = name; - this.workspaceId = workspaceId; - this.directives = new ArrayList<>(); - this.insights = new JsonObject(); - } - - public Builder setDirectives(List directives) { - this.directives.clear(); - this.directives.addAll(directives); - return this; - } - - public Builder setCreatedTimeMillis(long createdTimeMillis) { - this.createdTimeMillis = createdTimeMillis; - return this; - } - - public Builder setUpdatedTimeMillis(long updatedTimeMillis) { - this.updatedTimeMillis = updatedTimeMillis; - return this; - } - - public Builder setSampleSpec(SampleSpec sampleSpec) { - this.sampleSpec = sampleSpec; - return this; - } - - public Builder setInsights(JsonObject insights) { - this.insights = insights; - return this; - } - - public Workspace build() { - return new Workspace(workspaceName, workspaceId, directives, createdTimeMillis, updatedTimeMillis, sampleSpec, - insights); - } - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceCreationRequest.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceCreationRequest.java deleted file mode 100644 index 865bb32b3..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceCreationRequest.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import io.cdap.cdap.etl.api.connector.SampleRequest; - -/** - * Creation request for a workspace - */ -public class WorkspaceCreationRequest { - private final String connection; - private final String connectionType; - private final SampleRequest sampleRequest; - - public WorkspaceCreationRequest(String connection, String connectionType, SampleRequest sampleRequest) { - this.connection = connection; - this.connectionType = connectionType; - this.sampleRequest = sampleRequest; - } - - public String getConnection() { - return connection; - } - - public String getConnectionType() { - return connectionType; - } - - public SampleRequest getSampleRequest() { - return sampleRequest; - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceDetail.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceDetail.java deleted file mode 100644 index c8a8106c2..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceDetail.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import io.cdap.wrangler.api.Row; - -import java.io.ByteArrayOutputStream; -import java.io.ObjectOutput; -import java.io.ObjectOutputStream; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -/** - * Full information about the workspace, including sample data - */ -public class WorkspaceDetail { - private final Workspace workspace; - private final List sample; - private final byte[] sampleAsBytes; - - public WorkspaceDetail(Workspace workspace, List sample) { - this.workspace = workspace; - this.sample = sample; - this.sampleAsBytes = convertToBytes(sample); - } - - private byte[] convertToBytes(List sample) { - try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutput out = new ObjectOutputStream(bos)) { - out.writeObject(sample); - out.flush(); - return bos.toByteArray(); - } catch (Exception e) { - throw new RuntimeException("Error getting bytes from sample", e); - } - } - - public Workspace getWorkspace() { - return workspace; - } - - public List getSample() { - return sample; - } - - public byte[] getSampleAsBytes() { - return sampleAsBytes; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - WorkspaceDetail detail = (WorkspaceDetail) o; - return Objects.equals(workspace, detail.workspace) && - Objects.equals(sample, detail.sample) && - Arrays.equals(sampleAsBytes, detail.sampleAsBytes); - } - - @Override - public int hashCode() { - return Objects.hash(workspace, sample, sampleAsBytes); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceId.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceId.java deleted file mode 100644 index f9be04363..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceId.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import io.cdap.cdap.api.NamespaceSummary; - -import java.util.Objects; -import java.util.UUID; - -/** - * Workspace id - */ -public class WorkspaceId { - private final NamespaceSummary namespace; - private final String workspaceId; - - public WorkspaceId(NamespaceSummary namespace) { - this(namespace, UUID.randomUUID().toString()); - } - - public WorkspaceId(NamespaceSummary namespace, String workspaceId) { - this.namespace = namespace; - this.workspaceId = workspaceId; - } - - public NamespaceSummary getNamespace() { - return namespace; - } - - public String getWorkspaceId() { - return workspaceId; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - WorkspaceId that = (WorkspaceId) o; - return Objects.equals(namespace, that.namespace) && - Objects.equals(workspaceId, that.workspaceId); - } - - @Override - public int hashCode() { - return Objects.hash(namespace, workspaceId); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceSpec.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceSpec.java deleted file mode 100644 index 6a824bef7..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceSpec.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import java.util.Objects; -import java.util.Set; -import javax.annotation.Nullable; - -/** - * Workspace specification - */ -public class WorkspaceSpec { - private final Set sources; - private final StageSpec wrangler; - - public WorkspaceSpec(Set sources, StageSpec wrangler) { - this.sources = sources; - this.wrangler = wrangler; - } - - @Nullable - public Set getSources() { - return sources; - } - - public StageSpec getWrangler() { - return wrangler; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - WorkspaceSpec that = (WorkspaceSpec) o; - return Objects.equals(sources, that.sources) && - Objects.equals(wrangler, that.wrangler); - } - - @Override - public int hashCode() { - return Objects.hash(sources, wrangler); - } -} diff --git a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceUpdateRequest.java b/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceUpdateRequest.java deleted file mode 100644 index c85043eee..000000000 --- a/wrangler-proto/src/main/java/io/cdap/wrangler/proto/workspace/v2/WorkspaceUpdateRequest.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.proto.workspace.v2; - -import com.google.gson.JsonObject; - -import java.util.Collections; -import java.util.List; - -/** - * Workspace update request, can only update directives and insights now - */ -public class WorkspaceUpdateRequest { - private final List directives; - private final JsonObject insights; - - public WorkspaceUpdateRequest(List directives, JsonObject insights) { - this.directives = directives; - this.insights = insights; - } - - public JsonObject getInsights() { - return insights == null ? new JsonObject() : insights; - } - - public List getDirectives() { - return directives == null ? Collections.emptyList() : directives; - } -} diff --git a/wrangler-proto/src/test/java/io/cdap/wrangler/proto/ErrorRecordsExceptionTest.java b/wrangler-proto/src/test/java/io/cdap/wrangler/proto/ErrorRecordsExceptionTest.java deleted file mode 100644 index 4a3021300..000000000 --- a/wrangler-proto/src/test/java/io/cdap/wrangler/proto/ErrorRecordsExceptionTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.proto; - -import io.cdap.wrangler.api.ErrorRecordBase; - -import org.junit.Assert; -import org.junit.Test; - -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -public class ErrorRecordsExceptionTest { - - @Test - public void summarizeLimitsLargeLists() { - List errs = IntStream.range(0, 100) - .boxed() - .map(i -> new ErrorRecordBase(String.format("error # %d", i), i, true)) - .collect(Collectors.toList()); - - String result = ErrorRecordsException.summarize(errs); - - Assert.assertEquals("wrong number of summary entries", - ErrorRecordsException.MAX_NUM_ERRORS_IN_SUMMARY, - result.split(ErrorRecordsException.ERROR_SUMMARY_ITEM_DELIM).length); - Assert.assertTrue(String.format("result had wrong ending: %s", result), - result.endsWith("for brevity")); - } - - @Test - public void summarizeLeavesMaxSizedLists() { - List errs = IntStream - .range(1, ErrorRecordsException.MAX_NUM_ERRORS_IN_SUMMARY + 1) - .boxed() - .map(i -> new ErrorRecordBase(String.format("error # %d", i), i, true)) - .collect(Collectors.toList()); - - String result = ErrorRecordsException.summarize(errs); - - Assert.assertEquals("wrong number of summary entries", - ErrorRecordsException.MAX_NUM_ERRORS_IN_SUMMARY, - result.split(ErrorRecordsException.ERROR_SUMMARY_ITEM_DELIM).length); - } - - @Test - public void summarizeCollapsesRepeatedErrors() { - List errs = IntStream.range(1, 102) - .boxed() - .map(i -> new ErrorRecordBase(String.format("error %s", i % 2 == 0 ? "foo" : "bar"), i, - true)) - .collect(Collectors.toList()); - - String[] results = ErrorRecordsException.summarize(errs) - .split(ErrorRecordsException.ERROR_SUMMARY_ITEM_DELIM); - - Assert.assertArrayEquals(new String[]{"error bar - 51 rows", "error foo - 50 rows"}, results); - } -} diff --git a/wrangler-service/pom.xml b/wrangler-service/pom.xml deleted file mode 100644 index 1e6086299..000000000 --- a/wrangler-service/pom.xml +++ /dev/null @@ -1,300 +0,0 @@ - - - - - wrangler - io.cdap.wrangler - 4.12.0-SNAPSHOT - - 4.0.0 - - wrangler-service - Wrangler Service - - - io.cdap.wrangler.DataPrep - 1.14 - 2.10.2 - 1.51.0 - - - - - com.microsoft.azure - azure-data-lake-store-sdk - 2.3.3 - - - com.google.guava - guava - ${guava.version} - - - io.cdap.wrangler - wrangler-api - ${project.version} - - - io.cdap.wrangler - wrangler-core - ${project.version} - - - io.cdap.wrangler - wrangler-proto - ${project.version} - - - io.cdap.wrangler - wrangler-storage - ${project.version} - - - io.cdap.cdap - cdap-etl-api - ${cdap.version} - - - io.cdap.cdap - cdap-etl-core - ${cdap.version} - - - io.cdap.cdap - cdap-features - ${cdap.version} - - - io.cdap.cdap - cdap-system-app-api - ${cdap.version} - - - org.slf4j - slf4j-api - ${slf4j.version} - - - org.slf4j - jcl-over-slf4j - ${slf4j.version} - - - javax.ws.rs - javax.ws.rs-api - ${javax.ws.rs-api.version} - - - org.eclipse.jetty.orbit - javax.mail.glassfish - 1.4.1.v201005082020 - - - org.apache.kafka - kafka-clients - ${kafka.clients.version} - - - commons-io - commons-io - ${commons-io.version} - - - com.j256.simplemagic - simplemagic - ${simplemagic.version} - - - com.amazonaws - aws-java-sdk-s3 - ${aws.sdk.version} - - - com.google.cloud - google-cloud-storage - ${google.storage.version} - - - com.google.cloud - google-cloud-bigquery - ${google.cloud.bigquery.version} - - - com.google.cloud - google-cloud-spanner - ${google.cloud.spanner.version} - - - com.google.cloud - google-cloud-core - ${google.cloud.core.version} - - - com.googlecode.juniversalchardet - juniversalchardet - ${juniversalchardet.version} - - - org.apache.hadoop - hadoop-mapreduce-client-core - ${hadoop.version} - provided - - - org.slf4j - slf4j-log4j12 - - - com.google.inject.extensions - guice-servlet - - - com.sun.jersey - jersey-core - - - com.sun.jersey - jersey-server - - - com.sun.jersey - jersey-json - - - com.sun.jersey.contribs - jersey-guice - - - javax.servlet - servlet-api - - - com.google.guava - guava - - - - - commons-lang - commons-lang - ${commons-lang.version} - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - io.cdap.cdap - hydrator-test - ${cdap.version} - test - - - org.apache.hive - hive-exec - - - io.cdap.cdap - cdap-explore-jdbc - - - - - io.cdap.cdap - cdap-unit-test - ${cdap.version} - test - - - org.apache.hive - hive-exec - - - io.cdap.cdap - cdap-explore-jdbc - - - log4j - log4j - - - - - org.hsqldb - hsqldb - ${hsql.version} - test - - - io.cdap.http - netty-http - ${netty-http.version} - test - - - - - - - - org.apache.felix - maven-bundle-plugin - 3.3.0 - true - - - - ${app.main.class} - - - - *;inline=false;scope=compile - true - lib - - <_exportcontents>io.cdap.wrangler.api.* - - - - - package - - bundle - - - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.14.1 - - - org.apache.felix - maven-bundle-plugin - 3.3.0 - - - - - - diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/BytesDecoder.java b/wrangler-service/src/main/java/io/cdap/wrangler/BytesDecoder.java deleted file mode 100644 index a0c11b56b..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/BytesDecoder.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import org.mozilla.universalchardet.UniversalDetector; - -import java.io.UnsupportedEncodingException; - -/** - * Class description here. - */ -public final class BytesDecoder { - private static final String DEFAULT_ENCODING = "UTF-8"; - - /** - * This method attempts to detect the encoding type of the byte array - * being passed to it. - * - * @return String representation of the encoding. - */ - public static String guessEncoding(byte[] bytes) { - UniversalDetector detector = new UniversalDetector(null); - detector.handleData(bytes, 0, bytes.length); - detector.dataEnd(); - String encoding = detector.getDetectedCharset(); - detector.reset(); - if (encoding == null) { - encoding = DEFAULT_ENCODING; - } - return encoding; - } - - public static String[] toLines(byte[] bytes) - throws UnsupportedEncodingException { - String data = new String(bytes, guessEncoding(bytes)); - String[] lines = data.split("\r\n|\r|\n"); - return lines; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/DataPrep.java b/wrangler-service/src/main/java/io/cdap/wrangler/DataPrep.java deleted file mode 100644 index 2792dc846..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/DataPrep.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import io.cdap.cdap.api.app.AbstractApplication; -import io.cdap.cdap.api.dataset.lib.FileSet; -import io.cdap.cdap.api.dataset.lib.FileSetProperties; -import io.cdap.wrangler.service.DataPrepService; -import io.cdap.wrangler.service.connections.ConnectionTypeConfig; -import org.apache.hadoop.mapred.TextInputFormat; -import org.apache.hadoop.mapred.TextOutputFormat; - -/** - * Wrangler Application. - */ -public class DataPrep extends AbstractApplication { - - /** - * Override this method to declare and configure the application. - */ - @Override - public void configure() { - setName("dataprep"); - setDescription("DataPrep Backend Service"); - - // Used by the file service. - createDataset("dataprepfs", FileSet.class, FileSetProperties.builder() - .setBasePath("dataprepfs/indexds") - .setInputFormat(TextInputFormat.class) - .setOutputFormat(TextOutputFormat.class) - .setDescription("Store Dataprep Index files") - .build()); - - addService(new DataPrepService(getConfig())); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/PropertyIds.java b/wrangler-service/src/main/java/io/cdap/wrangler/PropertyIds.java deleted file mode 100644 index 5aa264ff2..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/PropertyIds.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -/** - * This class {@link PropertyIds} is a collection of static strings. - */ -public final class PropertyIds { - - // Name of the workspace - public static final String NAME = "name"; - - // Delimiter used to split record. - public static final String DELIMITER = "delimiter"; - - // Charset of the content. - public static final String CHARSET = "charset"; - - // Type of connection. - public static final String CONNECTION_TYPE = "connection"; - - // Name of the file. - public static final String FILE_NAME = "file"; - - // URI of the source. - public static final String URI = "uri"; - - // Path from the URI. - public static final String FILE_PATH = "path"; - - // Type of sampler. - public static final String SAMPLER_TYPE = "sampler"; - - // Content Type of content being stored. - public static final String CONTENT_TYPE = "Content-Type"; - - // Topic. - public static final String TOPIC = "topic"; - - // Plugin type - public static final String PLUGIN_TYPE = "plugin-type"; - - // File format to use when reading data as a pipeline source - public static final String FORMAT = "format"; - public static final String CONNECTION_ID = "connectionid"; - public static final String BROKER = "brokers"; - public static final String KEY_DESERIALIZER = "key.deserializer"; - public static final String VALUE_DESERIALIZER = "value.deserializer"; - - public static final String PLUGIN_SPECIFICATION = "plugin.specification"; -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/RequestExtractor.java b/wrangler-service/src/main/java/io/cdap/wrangler/RequestExtractor.java deleted file mode 100644 index 717cc5abf..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/RequestExtractor.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonParseException; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.wrangler.dataset.workspace.RequestDeserializer; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.Request; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; - -import java.nio.ByteBuffer; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import javax.annotation.Nullable; - -/** - * This class {@link RequestExtractor} provides utility functions for extracting different aspects of the request. - * It provides functionality to extract headers and content. - */ -public final class RequestExtractor { - private static final Gson GSON = new GsonBuilder() - .registerTypeAdapter(Request.class, new RequestDeserializer()) - .create(); - private final HttpServiceRequest request; - public static final String CONTENT_TYPE_HEADER = PropertyIds.CONTENT_TYPE; - public static final String CHARSET_HEADER = PropertyIds.CHARSET; - - public RequestExtractor(HttpServiceRequest request) { - this.request = request; - } - - - /** - * Extracts the HTTP header, if the header is not present, then default value is returned. - * - * @param name of the HTTP header to be extracted. - * @param defaultValue value to returned if header doesn't exist. - * @return value defined for the header. - */ - public String getHeader(String name, String defaultValue) { - String header = request.getHeader(name); - return header == null ? defaultValue : header; - } - - /** - * @return Content as received by the HTTP multipart/form body. - */ - @Nullable - public byte[] getContent() { - ByteBuffer content = request.getContent(); - if (content != null && content.hasRemaining()) { - byte[] bytes = new byte[content.remaining()]; - content.get(bytes); - return bytes; - } - return null; - } - - /** - * Returns the content by converting it to UNICODE from the provided charset. - * - * @param charset of the content being extracted and converted to UNICODE. - * @return UNICODE representation of the content, else null. - */ - @Nullable - public String getContent(Charset charset) { - ByteBuffer content = request.getContent(); - if (content != null && content.hasRemaining()) { - return charset.decode(content).toString(); - } - return null; - } - - @Nullable - public String getContent(String charset) { - return getContent(Charset.forName(charset)); - } - - /** - * Get a ConnectionMeta object from the request body. - * - * @return the connection meta object - * @throws IllegalArgumentException if the body is empty or not a valid ConnectionMeta - */ - public ConnectionMeta getConnectionMeta() { - String bodyStr = getContent(StandardCharsets.UTF_8); - if (bodyStr == null) { - throw new BadRequestException("No connection was found in the request body."); - } - ConnectionMeta connectionMeta; - try { - connectionMeta = GSON.fromJson(bodyStr, ConnectionMeta.class); - } catch (JsonParseException e) { - throw new BadRequestException(e.getMessage(), e); - } - connectionMeta.validate(); - return connectionMeta; - } - - /** - * Get a ConnectionMeta object from the request body. - * - * @return the connection meta object - * @throws IllegalArgumentException if the body is empty or not a valid ConnectionMeta - */ - public ConnectionMeta getConnectionMeta(ConnectionType expectedType) { - ConnectionMeta meta = getConnectionMeta(); - if (expectedType != meta.getType()) { - throw new BadRequestException(String.format("Expected connection of type '%s' but found '%s'.", - expectedType, meta.getType())); - } - return meta; - } - - /** - * Returns the content transformed into a Class defined. - * It first transforms from the charset into unicode and then applies the transformation. - * - * @param charset source charset of the content. - * @param type class to converted to. - * @return instance of type T as defined by the class. - */ - @Nullable - public T getContent(String charset, Class type) { - String data = getContent(charset); - if (data != null) { - return GSON.fromJson(data, type); - } - return null; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/SamplingMethod.java b/wrangler-service/src/main/java/io/cdap/wrangler/SamplingMethod.java deleted file mode 100644 index a2f1cb607..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/SamplingMethod.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import io.cdap.wrangler.api.annotations.PublicEvolving; - -/** - * This class {@link SamplingMethod} defines different types of sampling methods available. - */ -@PublicEvolving -public enum SamplingMethod { - NONE("none"), - FIRST("first"), - POISSON("poisson"), - BERNOULLI("bernoulli"), - RESERVOIR("reservoir"); - - private String method; - - SamplingMethod(String method) { - this.method = method; - } - - /** - * @return String representation of enum. - */ - public String getMethod() { - return method; - } - - /** - * Provided the sampling method as string, determine the enum type of {@link SamplingMethod}. - * - * @param from string for which the {@link SamplingMethod} instance need to be determined. - * @return if there is a string representation of enum, else null. - */ - public static SamplingMethod fromString(String from) { - if (from == null || from.isEmpty()) { - return null; - } - for (SamplingMethod method : SamplingMethod.values()) { - if (method.method.equalsIgnoreCase(from)) { - return method; - } - } - return null; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/ServiceUtils.java b/wrangler-service/src/main/java/io/cdap/wrangler/ServiceUtils.java deleted file mode 100644 index 3a0432510..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/ServiceUtils.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import com.google.common.base.Charsets; -import org.bouncycastle.crypto.digests.MD5Digest; -import org.bouncycastle.util.encoders.Hex; - -/** - * This class provides utility services to the service in this package. - */ -public final class ServiceUtils { - - /** - * Generates a MD5 hash for a given string. - * - * This implementation is based on Bouncycastle. So, you would need to initialize the security - * provider to use {@link org.bouncycastle.jce.provider.BouncyCastleProvider}. - * - * - * Security.addProvider(new BouncyCastleProvider()); - * - * @param value to be converted to MD5. - * @return String representation of MD5. - */ - public static String generateMD5(String value) { - byte[] input = value.getBytes(Charsets.UTF_8); - MD5Digest md5Digest = new MD5Digest(); - md5Digest.update(input, 0, input.length); - byte[] output = new byte[md5Digest.getDigestSize()]; - md5Digest.doFinal(output, 0); - return new String(Hex.encode(output)); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/DataPrepService.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/DataPrepService.java deleted file mode 100644 index 2dbc86bf4..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/DataPrepService.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service; - -import io.cdap.cdap.api.service.AbstractSystemService; -import io.cdap.cdap.api.service.SystemServiceContext; -import io.cdap.wrangler.dataset.connections.ConnectionStore; -import io.cdap.wrangler.dataset.schema.SchemaRegistry; -import io.cdap.wrangler.dataset.workspace.ConfigStore; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.service.adls.ADLSHandler; -import io.cdap.wrangler.service.bigquery.BigQueryHandler; -import io.cdap.wrangler.service.connections.ConnectionHandler; -import io.cdap.wrangler.service.connections.ConnectionTypeConfig; -import io.cdap.wrangler.service.database.DatabaseHandler; -import io.cdap.wrangler.service.directive.ConnectionUpgrader; -import io.cdap.wrangler.service.directive.DirectivesHandler; -import io.cdap.wrangler.service.directive.RecipeHandler; -import io.cdap.wrangler.service.directive.WorkspaceHandler; -import io.cdap.wrangler.service.directive.WorkspaceUpgrader; -import io.cdap.wrangler.service.explorer.FilesystemExplorer; -import io.cdap.wrangler.service.gcs.GCSHandler; -import io.cdap.wrangler.service.kafka.KafkaHandler; -import io.cdap.wrangler.service.s3.S3Handler; -import io.cdap.wrangler.service.schema.DataModelHandler; -import io.cdap.wrangler.service.schema.SchemaRegistryHandler; -import io.cdap.wrangler.service.spanner.SpannerHandler; -import io.cdap.wrangler.store.recipe.RecipeStore; -import io.cdap.wrangler.store.upgrade.UpgradeEntityType; -import io.cdap.wrangler.store.upgrade.UpgradeState; -import io.cdap.wrangler.store.upgrade.UpgradeStore; -import io.cdap.wrangler.store.workspace.WorkspaceStore; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.concurrent.TimeUnit; - -/** - * Data prep service. - */ -public class DataPrepService extends AbstractSystemService { - private static final Logger LOG = LoggerFactory.getLogger(DataPrepService.class); - private static final UpgradeState PRE_UPGRADE = new UpgradeState(0L); - - private final ConnectionTypeConfig config; - - public DataPrepService(ConnectionTypeConfig config) { - this.config = config; - } - - @Override - protected void configure() { - setName("service"); - - createTable(ConfigStore.TABLE_SPEC); - createTable(ConnectionStore.TABLE_SPEC); - createTable(SchemaRegistry.META_TABLE_SPEC); - createTable(SchemaRegistry.ENTRY_TABLE_SPEC); - createTable(WorkspaceDataset.TABLE_SPEC); - createTable(WorkspaceStore.WORKSPACE_TABLE_SPEC); - createTable(UpgradeStore.UPGRADE_TABLE_SPEC); - createTable(RecipeStore.RECIPE_TABLE_SPEC); - - addHandler(new DirectivesHandler()); - addHandler(new SchemaRegistryHandler()); - addHandler(new FilesystemExplorer()); - addHandler(new ConnectionHandler(config)); - addHandler(new KafkaHandler()); - addHandler(new DatabaseHandler()); - addHandler(new S3Handler()); - addHandler(new GCSHandler()); - addHandler(new ADLSHandler()); - addHandler(new BigQueryHandler()); - addHandler(new SpannerHandler()); - addHandler(new DataModelHandler()); - addHandler(new WorkspaceHandler()); - addHandler(new RecipeHandler()); - } - - @Override - public void initialize(SystemServiceContext context) { - // only do the upgrade on first instance to avoid transaction conflict - if (context.getInstanceId() != 0) { - return; - } - - UpgradeStore upgradeStore = new UpgradeStore(context); - WorkspaceStore wsStore = new WorkspaceStore(context); - UpgradeState connState = upgradeStore.getEntityUpgradeState(UpgradeEntityType.CONNECTION); - UpgradeState wsState = upgradeStore.getEntityUpgradeState(UpgradeEntityType.WORKSPACE); - boolean isConnDone = connState != null && connState.getVersion() == 1L; - boolean isWsDone = wsState != null && wsState.getVersion() == 1L; - if (isConnDone && isWsDone) { - return; - } - - long timestampNowMillis = System.currentTimeMillis(); - long upgradeBefore = - upgradeStore.initializeAndRetrieveUpgradeTimestampMillis(UpgradeEntityType.CONNECTION, timestampNowMillis, - PRE_UPGRADE); - upgradeStore.initializeAndRetrieveUpgradeTimestampMillis(UpgradeEntityType.WORKSPACE, timestampNowMillis, - PRE_UPGRADE); - long upgradeBeforeTsSecs = TimeUnit.MILLISECONDS.toSeconds(upgradeBefore); - if (!isConnDone) { - try { - ConnectionUpgrader connectionUpgrader = new ConnectionUpgrader(upgradeStore, context, upgradeBeforeTsSecs); - connectionUpgrader.upgradeConnections(); - } catch (Exception e) { - // check if there is any error upgrading the connections, if true, no point to continue upgrading the workspace - // as most connections won't be able to get the spec. - // also we don't want the service fail to start due to upgrade failure - LOG.error("Failed to upgrade the connections", e); - return; - } - } - - if (!isWsDone) { - try { - WorkspaceUpgrader workspaceUpgrader = - new WorkspaceUpgrader(upgradeStore, context, upgradeBeforeTsSecs, wsStore); - workspaceUpgrader.upgradeWorkspaces(); - } catch (Exception e) { - // don't want the service fail to start due to upgrade failure - LOG.error("Failed to upgrade the workspaces", e); - } - } - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/FileTypeDetector.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/FileTypeDetector.java deleted file mode 100644 index 2387e6687..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/FileTypeDetector.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service; - -import org.apache.commons.io.FilenameUtils; -import org.apache.twill.filesystem.Location; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.Scanner; - -/** - * This class FileTypeDetector is used for detecting file types. - */ -public class FileTypeDetector { - private static final Logger LOG = LoggerFactory.getLogger(FileTypeDetector.class); - public static final String UNKNOWN = "UNKNOWN"; - - // Map of file extensions to MIME names. - private final Map extensions; - - public FileTypeDetector() { - this.extensions = new HashMap<>(); - try (Scanner scanner = new Scanner(getClass().getClassLoader().getResource("file.extensions").openStream(), - "UTF-8")) { - while (scanner.hasNext()) { - String line = scanner.nextLine(); - String[] parts = line.split("\\s+"); - if (parts.length == 2) { - extensions.put(parts[0], parts[1]); - } - } - } catch (IOException e) { - LOG.warn("Unable to load extension map.", e); - } - } - - /** - * This function checks if the type is wrangle-able of not. - * - *

It detects it based on the type, currently we only support - * types that are of MIME type 'text'

- * - * @param type Specifies the MIME type. - * @return true if it's wrangle-able, false otherwise. - */ - public boolean isWrangleable(String type) { - if ("text/plain".equalsIgnoreCase(type) - || "application/json".equalsIgnoreCase(type) - || "application/xml".equalsIgnoreCase(type) - || "application/avro".equalsIgnoreCase(type) - || "application/protobuf".equalsIgnoreCase(type) - || "application/excel".equalsIgnoreCase(type) - || type.contains("image/") - || type.contains("text/") - ) { - return true; - } - return false; - } - - /** - * Attempts to detect the type of the file through extensions and by reading the content of the file. - * - * @param location of the file who's content type need to be detected. - * @return type of the file. - */ - public String detectFileType(Location location) { - return detectFileType(location.getName()); - } - - /** - * Attempts to detect the type of the file through extensions and by reading the content of the file. - * - * @param location of the file who's content type need to be detected. - * @return type of the file. - */ - public String detectFileType(String location) { - // We first attempt to detect the type of file based on extension. - String extension = FilenameUtils.getExtension(location); - extension = extension == null ? null : extension.toLowerCase(); - if (extensions.containsKey(extension)) { - return extensions.get(extension); - } else { - String name = FilenameUtils.getBaseName(location); - if (name.equalsIgnoreCase(location)) { - // CDAP-14397 return text type if there is no extension in the filename. - return extensions.get("txt"); - } - return detectFileType(name); - } - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/adls/ADLSConfiguration.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/adls/ADLSConfiguration.java deleted file mode 100644 index b1c89d551..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/adls/ADLSConfiguration.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.adls; - -import com.google.common.collect.ImmutableList; - -import java.util.List; -import java.util.Map; - -/** - * Credentials of the authorized user connecting to ADLS Gen1 - */ -public class ADLSConfiguration { - private static final List CONFIG_FIELDS = ImmutableList.of("clientID", "clientSecret", - "refreshURL", "accountFQDN"); - private final String clientID; - private final String clientSecret; - private final String refreshURL; - private final String accountFQDN; - - ADLSConfiguration(Map properties) { - - if (properties == null || properties.size() == 0) { - throw new IllegalArgumentException("ADLS properties are not defined. Check connection setting."); - } - - for (String property : CONFIG_FIELDS) { - if (!properties.containsKey(property)) { - throw new IllegalArgumentException("Missing configuration in connection for property " + property); - } - } - - clientID = properties.get("clientID"); - clientSecret = properties.get("clientSecret"); - refreshURL = properties.get("refreshURL"); - accountFQDN = properties.get("accountFQDN"); - } - - - public String getADLSClientID() { - return clientID; - } - - public String getClientKey() { - return clientSecret; - } - - public String getEndpointURL() { - return refreshURL; - } - - public String getAccountFQDN() { - return accountFQDN; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/adls/ADLSHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/adls/ADLSHandler.java deleted file mode 100644 index 4e2319e00..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/adls/ADLSHandler.java +++ /dev/null @@ -1,442 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.adls; - -import com.google.common.base.Charsets; -import com.google.common.base.Strings; -import com.microsoft.azure.datalake.store.ADLException; -import com.microsoft.azure.datalake.store.ADLStoreClient; -import com.microsoft.azure.datalake.store.DirectoryEntry; -import com.microsoft.azure.datalake.store.DirectoryEntryType; -import com.microsoft.azure.datalake.store.oauth2.AccessTokenProvider; -import com.microsoft.azure.datalake.store.oauth2.ClientCredsTokenProvider; -import io.cdap.cdap.api.annotation.ReadWrite; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.PropertyIds; -import io.cdap.wrangler.RequestExtractor; -import io.cdap.wrangler.SamplingMethod; -import io.cdap.wrangler.ServiceUtils; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.dataset.connections.ConnectionStore; -import io.cdap.wrangler.dataset.workspace.DataType; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.dataset.workspace.WorkspaceMeta; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.NotFoundException; -import io.cdap.wrangler.proto.PluginSpec; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.StatusCodeException; -import io.cdap.wrangler.proto.adls.ADLSConnectionSample; -import io.cdap.wrangler.proto.adls.ADLSDirectoryEntryInfo; -import io.cdap.wrangler.proto.adls.FileQueryDetails; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.sampling.Bernoulli; -import io.cdap.wrangler.sampling.Poisson; -import io.cdap.wrangler.sampling.Reservoir; -import io.cdap.wrangler.service.FileTypeDetector; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; -import io.cdap.wrangler.service.common.Format; -import io.cdap.wrangler.service.explorer.BoundedLineInputStream; -import io.cdap.wrangler.utils.ObjectSerDe; -import io.cdap.wrangler.utils.ReferenceNames; - -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - - -/** - * Service to explore ADLS Gen1 filesystem. - */ -@Deprecated -public class ADLSHandler extends AbstractWranglerHandler { - private static final String COLUMN_NAME = "body"; - private static final int FILE_SIZE = 10 * 1024 * 1024; - private static final FileTypeDetector detector = new FileTypeDetector(); - - /** - * Create an ADLS client using connection details from the HTTP request. - * - * @param connection connection details from the HTTP request. - * @return ADLStoreClient - */ - private ADLStoreClient initializeAndGetADLSClient(ConnectionMeta connection) { - ADLSConfiguration configuration = new ADLSConfiguration(connection.getProperties()); - String authTokenEndpoint = configuration.getEndpointURL(); - String clientId = configuration.getADLSClientID(); - String clientKey = configuration.getClientKey(); - String accountFQDN = configuration.getAccountFQDN(); - AccessTokenProvider provider = new ClientCredsTokenProvider(authTokenEndpoint, clientId, clientKey); - return ADLStoreClient.createClient(accountFQDN, provider); - } - - /** - * Tests ADLS Connection. - * - * @param request HTTP Request handler. - * @param responder HTTP Response handler. - */ - @POST - @Path("contexts/{context}/connections/adls/test") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void testADLSConnection(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - // Extract the body of the request and transform it to the Connection object - respond(request, responder, () -> { - RequestExtractor extractor = new RequestExtractor(request); - ConnectionMeta connection = extractor.getConnectionMeta(ConnectionType.ADLS); - ConnectionType connectionType = connection.getType(); - if (connectionType != ConnectionType.ADLS) { - return new ServiceResponse(String.format("Invalid connection type %s set, expected " + - "'ADLS' connection type.", connectionType.getType())); - } - ADLStoreClient client = initializeAndGetADLSClient(connection); - String output = testConnection(client); - return new ServiceResponse(output); - }); - } - - private String testConnection(ADLStoreClient client) throws IOException { - try { - client.enumerateDirectory("/"); - } catch (IOException e) { - throw new IOException("Connection Failed, please check given credentials : " + e.getMessage()); - } - return "Success"; - } - - /** - * Lists ADLS directory's contents for the given prefix path. - * - * @param request HTTP Request handler. - * @param responder HTTP Response handler. - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/adls/explore") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void listADLSDirectory(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId, - @Nullable @QueryParam("path") String path) { - respond(request, responder, namespace, ns -> { - try { - Connection connection = getValidatedConnection(new NamespacedId(ns, connectionId), ConnectionType.ADLS); - String defaultPath = "/"; - ADLStoreClient adlStoreClient = initializeAndGetADLSClient(connection); - List adlsDirectoryEntryInfos; - if (path == null || path.equals("")) { - adlsDirectoryEntryInfos = initClientReturnResponse(adlStoreClient, defaultPath); - } else { - adlsDirectoryEntryInfos = initClientReturnResponse(adlStoreClient, path); - } - return new ServiceResponse<>(adlsDirectoryEntryInfos); - } catch (ADLException e) { - throw new StatusCodeException(e.getMessage(), e, e.httpResponseCode); - } - }); - } - - private List initClientReturnResponse(ADLStoreClient client, String path) - throws IOException { - if (!client.checkExists(path)) { - throw new NotFoundException(String.format("Given path doesn't exist: %s", path)); - } - List list = client.enumerateDirectory(path); - ADLSDirectoryEntryInfo info; - List directoryEntryInfos = new ArrayList<>(); - for (DirectoryEntry entry : list) { - - if (entry.type.equals(DirectoryEntryType.DIRECTORY)) { - info = ADLSDirectoryEntryInfo.builder(entry.name, entry.type.toString()) - .setPath(entry.fullName) - .setDisplaySize(entry.length) - .setGroup(entry.group) - .setUser(entry.user) - .setPermission(entry.permission) - .setLastModified(entry.lastModifiedTime.toString()) - .setIsDirectory(true) - .build(); - } else { - String type = detector.detectFileType(entry.name); - boolean canWrangle = detector.isWrangleable(type); - info = ADLSDirectoryEntryInfo.builder(entry.name, entry.type.toString()) - .setPath(entry.fullName) - .setDisplaySize(entry.length) - .setGroup(entry.group) - .setUser(entry.user) - .setPermission(entry.permission) - .setLastModified(entry.lastModifiedTime.toString()) - .setIsDirectory(false) - .setCanWrangle(canWrangle) - .build(); - } - directoryEntryInfos.add(info); - } - return directoryEntryInfos; - } - - /** - * Reads ADLS file into workspace - * - * @param request HTTP Request handler. - * @param responder HTTP Response handler. - */ - @POST - @ReadWrite - @Path("contexts/{context}/connections/{connection-id}/adls/read") - public void loadADLSFile(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId, - @QueryParam("path") String filePath, @QueryParam("lines") int lines, - @QueryParam("sampler") String sampler, @QueryParam("fraction") double fraction, - @QueryParam("scope") @DefaultValue(WorkspaceDataset.DEFAULT_SCOPE) String scope) { - respond(request, responder, namespace, ns -> { - try { - if (Strings.isNullOrEmpty(connectionId)) { - throw new BadRequestException("Required path param 'connection-id' is missing in the input"); - } - if (lines == 0) { - throw new BadRequestException("The maximum number of sampled lines cannot be zero"); - } - String header = request.getHeader(PropertyIds.CONTENT_TYPE); - NamespacedId namespacedConnId = new NamespacedId(ns, connectionId); - Connection connection = getValidatedConnection(namespacedConnId, ConnectionType.ADLS); - FileQueryDetails fileQueryDetails = new FileQueryDetails(header, filePath, lines, sampler, - fraction, scope); - ADLSConnectionSample sample = fetchFileFromClient(connection, fileQueryDetails, namespacedConnId); - return new ServiceResponse<>(sample); - } catch (ADLException e) { - throw new StatusCodeException(e.getMessage(), e, e.httpResponseCode); - } - }); - } - - /** - * A method to fetch a file from an ADLS client - * - * @param connection Connection object - * @param fileQueryDetails - * @param namespaceID - * @throws IOException - */ - private ADLSConnectionSample fetchFileFromClient(Connection connection, FileQueryDetails fileQueryDetails, - NamespacedId namespaceID) throws IOException { - ADLStoreClient client = initializeAndGetADLSClient(connection); - DirectoryEntry file = getFileFromClient(client, fileQueryDetails.getFilePath()); - try (InputStream inputStream = clientInputStream(client, fileQueryDetails)) { - if ("text/plain".equalsIgnoreCase(fileQueryDetails.getHeader())) { - return loadSamplableFile(namespaceID, fileQueryDetails.getScope(), inputStream, file, - fileQueryDetails.getLines(), fileQueryDetails.getFraction(), fileQueryDetails.getSampler()); - } else { - return loadFile(namespaceID, fileQueryDetails.getScope(), inputStream, file); - } - } catch (ADLException e) { - throw new StatusCodeException(e.getMessage(), e, e.httpResponseCode); - } - } - - private InputStream clientInputStream(ADLStoreClient client, FileQueryDetails fileQueryDetails) - throws IOException { - DirectoryEntry file = client.getDirectoryEntry(fileQueryDetails.getFilePath()); - return client.getReadStream(file.fullName); - } - - private DirectoryEntry getFileFromClient(ADLStoreClient client, String path) throws IOException { - return client.getDirectoryEntry(path); - } - - private ADLSConnectionSample loadSamplableFile(NamespacedId connectionId, - String scope, InputStream inputStream, DirectoryEntry fileEntry, - int lines, double fraction, String sampler) throws IOException { - SamplingMethod samplingMethod = SamplingMethod.fromString(sampler); - - if (sampler == null || sampler.isEmpty() || SamplingMethod.fromString(sampler) == null) { - samplingMethod = SamplingMethod.FIRST; - } - final SamplingMethod samplingMethod1 = samplingMethod; - try (BoundedLineInputStream blis = BoundedLineInputStream.iterator(inputStream, Charsets.UTF_8, lines)) { - String name = fileEntry.name; - String file = String.format("%s:%s", scope, fileEntry.name); - String fileName = fileEntry.fullName; - String identifier = ServiceUtils.generateMD5(file); - // Set all properties and write to workspace. - Map properties = new HashMap<>(); - properties.put(PropertyIds.FILE_PATH, fileEntry.fullName); - properties.put(PropertyIds.NAME, name); - properties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.ADLS.getType()); - properties.put(PropertyIds.SAMPLER_TYPE, samplingMethod.getMethod()); - properties.put(PropertyIds.CONNECTION_ID, connectionId.getId()); - - NamespacedId namespacedWorkspaceId = new NamespacedId(connectionId.getNamespace(), identifier); - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(fileName) - .setScope(scope) - .setProperties(properties) - .build(); - TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - ws.writeWorkspaceMeta(namespacedWorkspaceId, workspaceMeta); - - // Iterate through lines to extract only 'limit' random lines. - // Depending on the type, the sampling of the input is performed. - List rows = new ArrayList<>(); - Iterator it = blis; - if (samplingMethod1 == SamplingMethod.POISSON) { - it = new Poisson(fraction).sample(blis); - } else if (samplingMethod1 == SamplingMethod.BERNOULLI) { - it = new Bernoulli(fraction).sample(blis); - } else if (samplingMethod1 == SamplingMethod.RESERVOIR) { - it = new Reservoir(lines).sample(blis); - } - while (it.hasNext()) { - rows.add(new Row(COLUMN_NAME, it.next())); - } - - // Write rows to workspace. - ObjectSerDe> serDe = new ObjectSerDe<>(); - byte[] data = serDe.toByteArray(rows); - ws.updateWorkspaceData(namespacedWorkspaceId, DataType.RECORDS, data); - }); - - // Preparing return response to include mandatory fields : id and name. - return new ADLSConnectionSample(namespacedWorkspaceId.getId(), name, ConnectionType.ADLS.getType(), - samplingMethod.getMethod(), connectionId.getId()); - } - } - - private ADLSConnectionSample loadFile(NamespacedId connectionId, String scope, InputStream inputStream, - DirectoryEntry fileEntry) throws IOException { - if (fileEntry.length > FILE_SIZE) { - throw new BadRequestException("Files greater than 10MB are not supported."); - } - - // Creates workspace. - String name = fileEntry.name; - - String file = String.format("%s:%s", name, fileEntry.fullName); - String identifier = ServiceUtils.generateMD5(file); - String fileName = fileEntry.fullName; - - byte[] bytes = new byte[(int) fileEntry.length + 1]; - try (BufferedInputStream stream = new BufferedInputStream(inputStream)) { - stream.read(bytes); - } - - // Set all properties and write to workspace. - Map properties = new HashMap<>(); - properties.put(PropertyIds.NAME, name); - properties.put(PropertyIds.FILE_PATH, fileEntry.fullName); - properties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.ADLS.getType()); - properties.put(PropertyIds.SAMPLER_TYPE, SamplingMethod.NONE.getMethod()); - properties.put(PropertyIds.CONNECTION_ID, connectionId.getId()); - DataType dataType = getDataType(name); - Format format = dataType == DataType.BINARY ? Format.BLOB : Format.TEXT; - properties.put(PropertyIds.FORMAT, format.name()); - - NamespacedId namespacedWorkspaceId = new NamespacedId(connectionId.getNamespace(), identifier); - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(fileName) - .setScope(scope) - .setProperties(properties) - .build(); - TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - ws.writeWorkspaceMeta(namespacedWorkspaceId, workspaceMeta); - ws.updateWorkspaceData(namespacedWorkspaceId, getDataType(name), bytes); - }); - - return new ADLSConnectionSample(namespacedWorkspaceId.getId(), name, ConnectionType.ADLS.getType(), - SamplingMethod.NONE.getMethod(), connectionId.getId()); - } - - /** - * Specification for the source. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - */ - @Path("contexts/{context}/connections/{connection-id}/adls/specification") - @GET - public void specification(HttpServiceRequest request, final HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId, - @QueryParam("path") String path, - @QueryParam("wid") String workspaceId) { - respond(request, responder, namespace, ns -> TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - WorkspaceDataset ws = WorkspaceDataset.get(context); - Format format = Format.TEXT; - NamespacedId namespacedWorkspaceId = new NamespacedId(ns, workspaceId); - String refName; - if (workspaceId != null) { - Map config = ws.getWorkspace(namespacedWorkspaceId).getProperties(); - String formatStr = config.getOrDefault(PropertyIds.FORMAT, Format.TEXT.name()); - refName = config.getOrDefault(PropertyIds.NAME, Format.TEXT.name()); - format = Format.valueOf(formatStr); - } else { - refName = "sample"; - } - - Connection conn = getValidatedConnection(store, new NamespacedId(ns, connectionId), ConnectionType.ADLS); - ADLSConfiguration adlsConfiguration = new ADLSConfiguration(conn.getProperties()); - Map properties = new HashMap<>(); - properties.put("format", format.name().toLowerCase()); - String pathURI = "adl://" + adlsConfiguration.getAccountFQDN() + path; - properties.put("path", pathURI); - properties.put("referenceName", ReferenceNames.cleanseReferenceName(refName)); - properties.put("credentials", adlsConfiguration.getClientKey()); - properties.put("clientId", adlsConfiguration.getADLSClientID()); - properties.put("refreshTokenURL", adlsConfiguration.getEndpointURL()); - properties.put("copyHeader", String.valueOf(shouldCopyHeader(ws, namespacedWorkspaceId))); - properties.put("schema", format.getSchema().toString()); - - PluginSpec pluginSpec = new PluginSpec("AzureDataLakeStore", "source", properties); - return new ServiceResponse<>(pluginSpec); - })); - } - - /** - * get data type from the file type. - * - * @param fileName - * @return DataType - * @throws IOException - */ - private DataType getDataType(String fileName) throws IOException { - // detect fileType from fileName - String fileType = detector.detectFileType(fileName); - DataType dataType = DataType.fromString(fileType); - return dataType == null ? DataType.BINARY : dataType; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/bigquery/BigQueryHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/bigquery/BigQueryHandler.java deleted file mode 100644 index f90d2eea4..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/bigquery/BigQueryHandler.java +++ /dev/null @@ -1,559 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.bigquery; - -import com.google.api.gax.paging.Page; -import com.google.cloud.bigquery.BigQuery; -import com.google.cloud.bigquery.BigQueryException; -import com.google.cloud.bigquery.Dataset; -import com.google.cloud.bigquery.DatasetId; -import com.google.cloud.bigquery.Field; -import com.google.cloud.bigquery.FieldList; -import com.google.cloud.bigquery.FieldValue; -import com.google.cloud.bigquery.FieldValueList; -import com.google.cloud.bigquery.Job; -import com.google.cloud.bigquery.JobId; -import com.google.cloud.bigquery.JobInfo; -import com.google.cloud.bigquery.LegacySQLTypeName; -import com.google.cloud.bigquery.QueryJobConfiguration; -import com.google.cloud.bigquery.StandardSQLTypeName; -import com.google.cloud.bigquery.Table; -import com.google.cloud.bigquery.TableDefinition; -import com.google.cloud.bigquery.TableId; -import com.google.cloud.bigquery.TableResult; -import com.google.common.annotations.VisibleForTesting; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.PropertyIds; -import io.cdap.wrangler.RequestExtractor; -import io.cdap.wrangler.SamplingMethod; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.dataset.workspace.DataType; -import io.cdap.wrangler.dataset.workspace.Workspace; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.dataset.workspace.WorkspaceMeta; -import io.cdap.wrangler.proto.ConnectionSample; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.PluginSpec; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.bigquery.BigQuerySpec; -import io.cdap.wrangler.proto.bigquery.DatasetInfo; -import io.cdap.wrangler.proto.bigquery.TableInfo; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; -import io.cdap.wrangler.service.gcp.GCPUtils; -import io.cdap.wrangler.utils.ObjectSerDe; -import io.cdap.wrangler.utils.ReferenceNames; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.math.BigDecimal; -import java.time.Instant; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.StringJoiner; -import java.util.UUID; -import java.util.concurrent.TimeUnit; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - -/** - * Service for testing, browsing, and reading using a BigQuery connection. - */ -@Deprecated -public class BigQueryHandler extends AbstractWranglerHandler { - private static final Logger LOG = LoggerFactory.getLogger(BigQueryHandler.class); - private static final String PATH_FORMAT = "/%s/%s"; - private static final String DATASET_ID = "datasetId"; - private static final String DATASET_PROJECT = "datasetProject"; - private static final String TABLE_ID = "id"; - private static final String SCHEMA = "schema"; - private static final String BUCKET = "bucket"; - private static final String TABLE_TYPE = "tableType"; - - @POST - @Path("/contexts/{context}/connections/bigquery/test") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void testBiqQueryConnection(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, () -> { - // Extract the body of the request and transform it to the Connection object. - RequestExtractor extractor = new RequestExtractor(request); - ConnectionMeta connection = extractor.getConnectionMeta(ConnectionType.BIGQUERY); - GCPUtils.validateProjectCredentials(connection); - - BigQuery bigQuery = GCPUtils.getBigQueryService(connection); - bigQuery.listDatasets(BigQuery.DatasetListOption.pageSize(1)); - return new ServiceResponse("Success"); - }); - } - - @GET - @Path("/contexts/{context}/connections/{connection-id}/bigquery") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void listDatasets(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("connection-id") String connectionId) { - respond(request, responder, namespace, ns -> { - Connection connection = getValidatedConnection(new NamespacedId(ns, connectionId), ConnectionType.BIGQUERY); - - BigQuery bigQuery = GCPUtils.getBigQueryService(connection); - String connectionProject = GCPUtils.getProjectId(connection); - Set datasetWhitelist = getDatasetWhitelist(connection); - List values = new ArrayList<>(); - for (Dataset dataset : getDatasets(bigQuery, datasetWhitelist)) { - String name = dataset.getDatasetId().getDataset(); - String datasetProject = dataset.getDatasetId().getProject(); - // if the dataset is not in the connection's project, add the : to the front of the name - if (!connectionProject.equals(datasetProject)) { - name = new StringJoiner(":").add(datasetProject).add(name).toString(); - } - values.add(new DatasetInfo(name, dataset.getDescription(), dataset.getLocation(), dataset.getCreationTime(), - dataset.getLastModified())); - } - return new ServiceResponse<>(values); - }); - } - - /** - * List all tables in a dataset. - * - * @param request HTTP requests handler. - * @param responder HTTP response handler. - * @param datasetStr the dataset id as a string. It will be of the form [project:]name. - * The project prefix is optional. When not given, the connection project should be used. - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/bigquery/{dataset-id}/tables") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void listTables(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId, - @PathParam("dataset-id") String datasetStr) { - respond(request, responder, namespace, ns -> { - Connection connection = getValidatedConnection(new NamespacedId(ns, connectionId), - ConnectionType.BIGQUERY); - BigQuery bigQuery = GCPUtils.getBigQueryService(connection); - - DatasetId datasetId = getDatasetId(datasetStr, GCPUtils.getProjectId(connection)); - - try { - Page
tablePage = bigQuery.listTables(datasetId); - List values = new ArrayList<>(); - for (Table table : tablePage.iterateAll()) { - values.add(new TableInfo(table.getTableId().getTable(), table.getFriendlyName(), table.getDescription(), - table.getEtag(), table.getCreationTime(), table.getLastModifiedTime(), - table.getExpirationTime())); - } - - return new ServiceResponse<>(values); - } catch (BigQueryException e) { - if (e.getReason() != null) { - // CDAP-14155 - BigQueryException message is too large. Instead just throw reason of the exception - throw new RuntimeException(e.getReason()); - } - throw e; - } - }); - } - - /** - * Read a table. - * - * @param request HTTP requests handler. - * @param responder HTTP response handler. - * @param connectionId Connection Id for BigQuery Service. - * @param datasetStr id of the dataset on BigQuery. - * @param tableId id of the BigQuery table. - * @param scope Group the workspace is created in. - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/bigquery/{dataset-id}/tables/{table-id}/read") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void readTable(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId, - @PathParam("dataset-id") String datasetStr, - @PathParam("table-id") String tableId, - @QueryParam("scope") @DefaultValue(WorkspaceDataset.DEFAULT_SCOPE) String scope) { - respond(request, responder, namespace, ns -> { - Connection connection = getValidatedConnection(new NamespacedId(ns, connectionId), - ConnectionType.BIGQUERY); - - Map connectionProperties = connection.getProperties(); - String connectionProject = GCPUtils.getProjectId(connection); - DatasetId datasetId = getDatasetId(datasetStr, connectionProject); - String path = connectionProperties.get(GCPUtils.SERVICE_ACCOUNT_KEYFILE); - String bucket = connectionProperties.get(BUCKET); - TableId tableIdObject = TableId.of(datasetId.getProject(), datasetId.getDataset(), tableId); - Pair, Schema> tableData = getData(connection, tableIdObject); - TableDefinition.Type tableType = GCPUtils.getBigQueryService(connection).getTable(tableIdObject) - .getDefinition().getType(); - - Map properties = new HashMap<>(); - properties.put(PropertyIds.NAME, tableId); - properties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.BIGQUERY.getType()); - properties.put(PropertyIds.SAMPLER_TYPE, SamplingMethod.NONE.getMethod()); - properties.put(PropertyIds.CONNECTION_ID, connectionId); - properties.put(TABLE_ID, tableId); - properties.put(DATASET_ID, datasetId.getDataset()); - properties.put(DATASET_PROJECT, datasetId.getProject()); - properties.put(GCPUtils.PROJECT_ID, connectionProject); - properties.put(GCPUtils.SERVICE_ACCOUNT_KEYFILE, path); - properties.put(SCHEMA, tableData.getSecond().toString()); - properties.put(BUCKET, bucket); - properties.put(TABLE_TYPE, tableType.toString()); - - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(tableId) - .setScope(scope) - .setProperties(properties) - .build(); - String sampleId = TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - NamespacedId workspaceId = ws.createWorkspace(ns, workspaceMeta); - - ObjectSerDe> serDe = new ObjectSerDe<>(); - byte[] data = serDe.toByteArray(tableData.getFirst()); - ws.updateWorkspaceData(workspaceId, DataType.RECORDS, data); - return workspaceId.getId(); - }); - - ConnectionSample sample = new ConnectionSample(sampleId, tableId, ConnectionType.BIGQUERY.getType(), - SamplingMethod.NONE.getMethod(), connectionId); - return new ServiceResponse<>(sample); - }); - } - - /** - * Specification for the source. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/bigquery/specification") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void specification(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId, - @QueryParam("wid") String workspaceId) { - respond(request, responder, namespace, ns -> { - Map config = getWorkspace(new NamespacedId(ns, workspaceId)).getProperties(); - - boolean isView = TableDefinition.Type.valueOf(config.get(TABLE_TYPE)).equals( - TableDefinition.Type.VIEW); - - Map properties = new HashMap<>(); - String externalDatasetName = - new StringJoiner(".").add(config.get(DATASET_ID)).add(config.get(TABLE_ID)).toString(); - properties.put("referenceName", ReferenceNames.cleanseReferenceName(externalDatasetName)); - properties.put("serviceFilePath", config.get(GCPUtils.SERVICE_ACCOUNT_KEYFILE)); - properties.put("bucket", config.get(BUCKET)); - properties.put("project", config.get(GCPUtils.PROJECT_ID)); - properties.put(DATASET_PROJECT, config.get(DATASET_PROJECT)); - properties.put("dataset", config.get(DATASET_ID)); - properties.put("table", config.get(TABLE_ID)); - properties.put("schema", config.get(SCHEMA)); - properties.put("enableQueryingViews", String.valueOf(isView)); - - PluginSpec pluginSpec = new PluginSpec("BigQueryTable", "source", properties); - BigQuerySpec spec = new BigQuerySpec(pluginSpec); - - return new ServiceResponse<>(spec); - }); - } - - public static Map getConnectorProperties(Map config) { - Map properties = new HashMap<>(); - properties.put("serviceAccountType", "filePath"); - properties.put("serviceFilePath", config.get(GCPUtils.SERVICE_ACCOUNT_KEYFILE)); - properties.put(DATASET_PROJECT, config.get(DATASET_PROJECT)); - properties.put("project", config.get(GCPUtils.PROJECT_ID)); - properties.put("showHiddenDatasets", "true"); - properties.values().removeIf(Objects::isNull); - return properties; - } - - public static String getPath(Workspace workspace) { - Map properties = workspace.getProperties(); - return String.format(PATH_FORMAT, properties.get(DATASET_ID), properties.get(TABLE_ID)); - } - - private Pair, Schema> getData(Connection connection, TableId tableId) - throws IOException, InterruptedException { - List rows = new ArrayList<>(); - BigQuery bigQuery = GCPUtils.getBigQueryService(connection); - String tableIdString = - tableId.getProject() == null ? String.format("%s.%s", tableId.getDataset(), tableId.getTable()) : - String.format("%s.%s.%s", tableId.getProject(), tableId.getDataset(), tableId.getTable()); - String query = String.format("SELECT * FROM `%s` LIMIT 1000", tableIdString); - QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build(); - JobId jobId = JobId.of(UUID.randomUUID().toString()); - Job queryJob = bigQuery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build()); - // Wait for the job to finish - queryJob = queryJob.waitFor(); - - // check for errors - if (queryJob == null) { - throw new RuntimeException("Job no longer exists."); - } else if (queryJob.getStatus().getError() != null) { - throw new RuntimeException(queryJob.getStatus().getError().toString()); - } - - // Get the results - TableResult result = queryJob.getQueryResults(); - com.google.cloud.bigquery.Schema schema = result.getSchema(); - FieldList fields = schema.getFields(); - for (FieldValueList fieldValues : result.iterateAll()) { - Row row = new Row(); - for (Field field : fields) { - String fieldName = field.getName(); - FieldValue fieldValue = fieldValues.get(fieldName); - FieldValue.Attribute attribute = fieldValue.getAttribute(); - LegacySQLTypeName type = field.getType(); - StandardSQLTypeName standardType = type.getStandardType(); - - if (fieldValue.isNull()) { - row.add(fieldName, null); - continue; - } - - if (attribute == FieldValue.Attribute.REPEATED) { - List list = new ArrayList<>(); - for (FieldValue value : fieldValue.getRepeatedValue()) { - list.add(getRowValue(standardType, value)); - } - row.add(fieldName, list); - } else { - row.add(fieldName, getRowValue(standardType, fieldValue)); - } - } - - rows.add(row); - } - - List schemaFields = new ArrayList<>(); - for (Field field : fields) { - LegacySQLTypeName type = field.getType(); - StandardSQLTypeName standardType = type.getStandardType(); - Schema schemaType = null; - switch (standardType) { - case BOOL: - schemaType = Schema.of(Schema.Type.BOOLEAN); - break; - case DATE: - schemaType = Schema.of(Schema.LogicalType.DATE); - break; - case TIME: - schemaType = Schema.of(Schema.LogicalType.TIME_MICROS); - break; - case TIMESTAMP: - schemaType = Schema.of(Schema.LogicalType.TIMESTAMP_MICROS); - break; - case NUMERIC: - schemaType = Schema.decimalOf(38, 9); - break; - case BYTES: - schemaType = Schema.of(Schema.Type.BYTES); - break; - case INT64: - schemaType = Schema.of(Schema.Type.LONG); - break; - case DATETIME: - schemaType = Schema.of(Schema.LogicalType.DATETIME); - break; - case STRING: - schemaType = Schema.of(Schema.Type.STRING); - break; - case FLOAT64: - schemaType = Schema.of(Schema.Type.DOUBLE); - break; - } - - if (schemaType == null) { - continue; - } - - String name = field.getName(); - Schema.Field schemaField; - if (field.getMode() == null || field.getMode() == Field.Mode.NULLABLE) { - Schema fieldSchema = Schema.nullableOf(schemaType); - schemaField = Schema.Field.of(name, fieldSchema); - } else if (field.getMode() == Field.Mode.REPEATED) { - // allow array field types - schemaField = Schema.Field.of(field.getName(), Schema.arrayOf(schemaType)); - } else { - schemaField = Schema.Field.of(name, schemaType); - } - schemaFields.add(schemaField); - } - Schema schemaToReturn = Schema.recordOf("bigquerySchema", schemaFields); - return new Pair<>(rows, schemaToReturn); - } - - private Object getRowValue(StandardSQLTypeName standardType, FieldValue fieldValue) { - switch (standardType) { - case TIME: - return LocalTime.parse(fieldValue.getStringValue()); - case DATE: - return LocalDate.parse(fieldValue.getStringValue()); - case TIMESTAMP: - long tsMicroValue = fieldValue.getTimestampValue(); - return getZonedDateTime(tsMicroValue); - case NUMERIC: - BigDecimal decimal = fieldValue.getNumericValue(); - if (decimal.scale() < 9) { - // scale up the big decimal. this is because structured record expects scale to be exactly same as schema - // Big Query supports maximum unscaled value up to 38 digits. so scaling up should still be <= max - // precision - decimal = decimal.setScale(9); - } - return decimal; - - case DATETIME: - return LocalDateTime.parse(fieldValue.getStringValue()); - case STRING: - return fieldValue.getStringValue(); - case BOOL: - return fieldValue.getBooleanValue(); - case FLOAT64: - return fieldValue.getDoubleValue(); - case INT64: - return fieldValue.getLongValue(); - case BYTES: - return fieldValue.getBytesValue(); - default: - throw new RuntimeException(String.format("BigQuery type %s is not supported.", standardType)); - } - } - - private ZonedDateTime getZonedDateTime(long microTs) { - long tsInSeconds = TimeUnit.MICROSECONDS.toSeconds(microTs); - long mod = TimeUnit.MICROSECONDS.convert(1, TimeUnit.SECONDS); - int fraction = (int) (microTs % mod); - Instant instant = Instant.ofEpochSecond(tsInSeconds, TimeUnit.MICROSECONDS.toNanos(fraction)); - return ZonedDateTime.ofInstant(instant, ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - } - - /** - * Parses the dataset whitelist in the connection properties into a set of DatasetId. - * The whitelist is expected to be a comma separated list of dataset ids, where each dataset id is of the form: - * - * [project:]name - * - * The project is optional. If it is not given, it is assumed that the dataset is in the connection project. - * - * For example, consider the following whitelist: - * - * abc:articles,123:d10,d11 - * - * If the connection is in project 'abc', this will be parsed into 3 dataset ids -- - * [abc,articles], [123,d10], and [abc,d11]. - */ - @VisibleForTesting - static Set getDatasetWhitelist(ConnectionMeta connection) { - String connectionProject = GCPUtils.getProjectId(connection); - String whitelistStr = connection.getProperties().get("datasetWhitelist"); - Set whitelist = new LinkedHashSet<>(); - if (whitelistStr == null) { - return whitelist; - } - for (String whitelistedDataset : whitelistStr.split(",")) { - whitelistedDataset = whitelistedDataset.trim(); - // whitelistedDataset should be of the form :, or just - // if it ends with ':', the admin provided an invalid entry in the whitelist and it should be ignored. - if (whitelistedDataset.endsWith(":")) { - continue; - } - int idx = whitelistedDataset.indexOf(':'); - if (idx > 0) { - String datasetProject = whitelistedDataset.substring(0, idx); - String datasetName = whitelistedDataset.substring(idx + 1); - whitelist.add(DatasetId.of(datasetProject, datasetName)); - } else if (idx == 0) { - // if the value is :, treat it like it's just - whitelist.add(DatasetId.of(connectionProject, whitelistedDataset.substring(1))); - } else { - whitelist.add(DatasetId.of(connectionProject, whitelistedDataset)); - } - } - return whitelist; - } - - private DatasetId getDatasetId(String datasetStr, String connectionProject) { - int idx = datasetStr.indexOf(":"); - if (idx > 0) { - String project = datasetStr.substring(0, idx); - String name = datasetStr.substring(idx + 1); - return DatasetId.of(project, name); - } - return DatasetId.of(connectionProject, datasetStr); - } - - private Collection getDatasets(BigQuery bigQuery, Set datasetWhitelist) { - // this will include datasets that can be listed by the service account, but may not include all datasets - // in the whitelist, if the whitelist contains publicly accessible datasets from other projects. - // do some post-processing to filter out anything not in the whitelist and also try and lookup datasets - // that are in the whitelist but not in the returned list - Page datasets = bigQuery.listDatasets(BigQuery.DatasetListOption.all()); - Set missingDatasets = new HashSet<>(datasetWhitelist); - List output = new ArrayList<>(); - for (Dataset dataset : datasets.iterateAll()) { - missingDatasets.remove(dataset.getDatasetId()); - if (datasetWhitelist.isEmpty() || datasetWhitelist.contains(dataset.getDatasetId())) { - output.add(dataset); - } - } - // this only contains datasets that are in the whitelist but were not returned by the list call - for (DatasetId whitelistDataset : missingDatasets) { - try { - Dataset dataset = bigQuery.getDataset(whitelistDataset); - if (dataset != null) { - output.add(dataset); - } - } catch (BigQueryException e) { - // ignore and move on - LOG.debug("Exception getting dataset {} from the whitelist.", whitelistDataset, e); - } - } - return output; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/common/AbstractWranglerHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/common/AbstractWranglerHandler.java deleted file mode 100644 index d1563d4cc..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/common/AbstractWranglerHandler.java +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.common; - -import com.google.gson.JsonSyntaxException; -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.api.service.http.AbstractSystemHttpServiceHandler; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.api.service.worker.RemoteExecutionException; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.dataset.connections.ConnectionNotFoundException; -import io.cdap.wrangler.dataset.connections.ConnectionStore; -import io.cdap.wrangler.dataset.workspace.Workspace; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.dataset.workspace.WorkspaceNotFoundException; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.Contexts; -import io.cdap.wrangler.proto.ErrorRecordsException; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.Recipe; -import io.cdap.wrangler.proto.Request; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.StatusCodeException; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.proto.workspace.v2.RecipeExceptionResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.net.HttpURLConnection; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.stream.Stream; -import javax.annotation.Nullable; - -/** - * Common functionality for wrangler services. - */ -public class AbstractWranglerHandler extends AbstractSystemHttpServiceHandler { - private static final Logger LOG = LoggerFactory.getLogger(AbstractWranglerHandler.class); - - protected Workspace getWorkspace(NamespacedId workspaceId) { - return TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - return ws.getWorkspace(workspaceId); - }); - } - - /** - * Return whether the header needs to be copied when creating the pipeline source for the specified workspace. - * This just amounts to checking whether parse-as-csv with the first line as a header is used as a directive. - */ - protected boolean shouldCopyHeader(WorkspaceDataset ws, @Nullable NamespacedId workspaceId) throws IOException { - if (workspaceId == null) { - return false; - } - try { - Workspace workspace = ws.getWorkspace(workspaceId); - Request request = workspace.getRequest(); - if (request == null) { - return false; - } - Recipe recipe = request.getRecipe(); - List directives = recipe.getDirectives(); - // yes this is really hacky, but there doesn't seem to be a good way to get the actual directive classes - return directives.stream() - .map(String::trim) - .anyMatch(directive -> directive.startsWith("parse-as-csv") && directive.endsWith("true")); - } catch (WorkspaceNotFoundException e) { - return false; - } - } - - protected Connection getConnection(NamespacedId connectionId) { - return TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - return store.get(connectionId); - }); - } - - protected Connection getValidatedConnection(NamespacedId connectionId, ConnectionType expectedType) { - return TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - return getValidatedConnection(store, connectionId, expectedType); - }); - } - - /** - * Validates that the specified connection exists and is of the expected type. - * Returns null if the connection does not exist or is invalid. Callers should return immediately if - * a null is returned, as a response has already been sent. This method should only be called from endpoints - * that use explicit transaction control. - * - * @param store the connection store to read from - * @param connectionId the id of the connection - * @param expectedType the expected type of the connection - * @return the validated connection - * @throws ConnectionNotFoundException if the connection does not exist - * @throws IOException if there was an error reading from the store - */ - @Nullable - protected Connection getValidatedConnection(ConnectionStore store, NamespacedId connectionId, - ConnectionType expectedType) throws IOException { - Connection connection = store.get(connectionId); - if (connection.getType() == null) { - throw new BadRequestException("Connection type must be specified."); - } - if (expectedType != connection.getType()) { - throw new BadRequestException(String.format("Expected connection type '%s' but found '%s'.", - expectedType, connection.getType())); - } - return connection; - } - - /** - * Utility method for executing an endpoint with common error handling built in. - * A response will always be sent after this method is called so the http responder should not be used after this. - * The endpoint logic should also not use the responder in any way. - * - * If the callable throws a {@link StatusCodeException}, the exception's status code and message will be used - * to create the response. - * If a {@link JsonSyntaxException} is thrown, a 400 response will be sent. - * If anything else if thrown, a 500 response will be sent. - * If nothing is thrown, the result of the callable will be sent as json. - * - * @param request the http request - * @param responder the http responder - * @param callable the endpoint logic to run - */ - protected void respond(HttpServiceRequest request, HttpServiceResponder responder, Callable callable) { - - try { - T results = callable.call(); - responder.sendJson(results); - } catch (StatusCodeException e) { - responder.sendJson(e.getCode(), new ServiceResponse<>(e.getMessage())); - } catch (ErrorRecordsException e) { - responder.sendJson(HttpURLConnection.HTTP_BAD_REQUEST, - new ServiceResponse<>(e.getErrorRecords(), false, e.getMessage())); - } catch (JsonSyntaxException e) { - responder.sendJson(HttpURLConnection.HTTP_BAD_REQUEST, new ServiceResponse(e.getMessage())); - } catch (Throwable t) { - LOG.warn("Error processing {} {}, resulting in a 500 response.", request.getMethod(), request.getRequestURI(), t); - responder.sendJson(HttpURLConnection.HTTP_INTERNAL_ERROR, new ServiceResponse(t.getMessage())); - } - } - - /** - * Utility method for executing an endpoint with common error handling and namespace checks built in. - * - * If the callable throws a {@link StatusCodeException}, the exception's status code and message will be used - * to create the response. - * If a {@link JsonSyntaxException} is thrown, a 400 response will be sent. - * If anything else if thrown, a 500 response will be sent. - * If nothing is thrown, the result of the callable will be sent as json. - * - * @param responder the http responder - * @param namespace the namespace to check for - * @param runnable the endpoint logic to run - */ - protected void respond(HttpServiceResponder responder, String namespace, - NamespacedResponderRunnable runnable) { - // system namespace does not officially exist, so don't check existence for system namespace. - NamespaceSummary namespaceSummary; - if (Contexts.SYSTEM.equals(namespace)) { - namespaceSummary = new NamespaceSummary(Contexts.SYSTEM, "", 0L); - } else { - try { - namespaceSummary = getContext().getAdmin().getNamespaceSummary(namespace); - if (namespaceSummary == null) { - responder.sendJson(HttpURLConnection.HTTP_NOT_FOUND, - new io.cdap.wrangler.proto.workspace.v2.ServiceResponse<>( - String.format("Namespace '%s' does not exist", namespace))); - return; - } - } catch (IOException e) { - responder.sendJson(HttpURLConnection.HTTP_INTERNAL_ERROR, - new io.cdap.wrangler.proto.workspace.v2.ServiceResponse<>(e.getMessage())); - return; - } - } - - try { - runnable.respond(namespaceSummary); - } catch (RecipeException e) { - responder.sendJson(HttpURLConnection.HTTP_BAD_REQUEST, - new RecipeExceptionResponse<>(e.getMessage(), e.getRowIndex(), e.getDirectiveIndex())); - } catch (StatusCodeException e) { - responder.sendJson(e.getCode(), new io.cdap.wrangler.proto.workspace.v2.ServiceResponse<>(e.getMessage())); - } catch (ErrorRecordsException e) { - responder.sendJson(HttpURLConnection.HTTP_BAD_REQUEST, - new io.cdap.wrangler.proto.workspace.v2.ServiceResponse<>(e.getErrorRecords(), - e.getMessage())); - } catch (JsonSyntaxException e) { - responder.sendJson(HttpURLConnection.HTTP_BAD_REQUEST, - new io.cdap.wrangler.proto.workspace.v2.ServiceResponse<>(e.getMessage())); - } catch (RemoteExecutionException e) { - responder.sendJson(getErrorCode(e.getCause().getRemoteExceptionClassName()), - new io.cdap.wrangler.proto.workspace.v2.ServiceResponse<>(e.getMessage())); - } catch (Throwable t) { - responder.sendJson(HttpURLConnection.HTTP_INTERNAL_ERROR, - new io.cdap.wrangler.proto.workspace.v2.ServiceResponse<>((t.getMessage()))); - } - } - - private int getErrorCode(String exceptionName) { - boolean isBadRequest = Stream.of(BadRequestException.class, ErrorRecordsException.class, JsonSyntaxException.class) - .anyMatch(e -> e.getName().equals(exceptionName)); - return isBadRequest ? HttpURLConnection.HTTP_BAD_REQUEST : HttpURLConnection.HTTP_INTERNAL_ERROR; - } - - /** - * Utility method for executing an endpoint with common error handling and namespace checks built in. - * A response will always be sent after this method is called so the http responder should not be used after this. - * The endpoint logic should also not use the responder in any way. - * - * If the callable throws a {@link StatusCodeException}, the exception's status code and message will be used - * to create the response. - * If a {@link JsonSyntaxException} is thrown, a 400 response will be sent. - * If anything else if thrown, a 500 response will be sent. - * If nothing is thrown, the result of the callable will be sent as json. - * - * @param request the http request - * @param responder the http responder - * @param namespace the namespace to check for - * @param callable the endpoint logic to run - */ - protected void respond(HttpServiceRequest request, HttpServiceResponder responder, String namespace, - NamespacedResponder callable) { - // system namespace does not officially exist, so don't check existence for system namespace. - NamespaceSummary namespaceSummary; - if (Contexts.SYSTEM.equals(namespace)) { - namespaceSummary = new NamespaceSummary(Contexts.SYSTEM, "", 0L); - } else { - try { - namespaceSummary = getContext().getAdmin().getNamespaceSummary(namespace); - if (namespaceSummary == null) { - responder.sendJson(HttpURLConnection.HTTP_NOT_FOUND, - new ServiceResponse(String.format("Namespace '%s' does not exist", namespace))); - return; - } - } catch (IOException e) { - responder.sendJson(HttpURLConnection.HTTP_INTERNAL_ERROR, new ServiceResponse(e.getMessage())); - return; - } - } - - try { - T results = callable.respond(new Namespace(namespaceSummary.getName(), namespaceSummary.getGeneration())); - responder.sendJson(results); - } catch (StatusCodeException e) { - responder.sendJson(e.getCode(), new ServiceResponse<>(e.getMessage())); - } catch (ErrorRecordsException e) { - responder.sendJson(HttpURLConnection.HTTP_BAD_REQUEST, - new ServiceResponse<>(e.getErrorRecords(), false, e.getMessage())); - } catch (JsonSyntaxException e) { - responder.sendJson(HttpURLConnection.HTTP_BAD_REQUEST, new ServiceResponse(e.getMessage())); - } catch (Throwable t) { - LOG.warn("Error processing {} {}, resulting in a 500 response.", request.getMethod(), request.getRequestURI(), t); - responder.sendJson(HttpURLConnection.HTTP_INTERNAL_ERROR, new ServiceResponse(t.getMessage())); - } - } - - /** - * Responds to a request within a namespace. - * - * @param type of response object - */ - protected interface NamespacedResponder { - T respond(Namespace namespace) throws Exception; - } - - /** - * Responds to a request within a namespace. - */ - protected interface NamespacedResponderRunnable { - void respond(NamespaceSummary namespace) throws Exception; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/common/Format.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/common/Format.java deleted file mode 100644 index 0a4f9f3c0..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/common/Format.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.common; - -import io.cdap.cdap.api.data.schema.Schema; - -/** - * Different formats for file based sources. - */ -public enum Format { - TEXT(Schema.recordOf("text", Schema.Field.of("body", Schema.of(Schema.Type.STRING)))), - BLOB(Schema.recordOf("blob", Schema.Field.of("body", Schema.of(Schema.Type.BYTES)))); - private final Schema schema; - - Format(Schema schema) { - this.schema = schema; - } - - public Schema getSchema() { - return schema; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionHandler.java deleted file mode 100644 index a0fcd0688..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionHandler.java +++ /dev/null @@ -1,384 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.connections; - -import com.google.gson.Gson; -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.api.service.http.SystemHttpServiceContext; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.RequestExtractor; -import io.cdap.wrangler.dataset.connections.ConnectionStore; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.UnauthorizedException; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import javax.annotation.Nullable; -import javax.ws.rs.DELETE; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - -/** - * This service exposes REST APIs for managing the lifecycle of a connection in the connection store. - */ -@Deprecated -public class ConnectionHandler extends AbstractWranglerHandler { - private static final Logger LOG = LoggerFactory.getLogger(ConnectionHandler.class); - private static final String CONNECTION_TYPE_CONFIG = "connectionTypeConfig"; - private static final Gson GSON = new Gson(); - private static final String ALL_TYPES = "*"; - - private ConnectionTypeConfig connectionTypeConfig; - private List enabledConnectionTypes; - - public ConnectionHandler(ConnectionTypeConfig connectionTypeConfig) { - this.connectionTypeConfig = connectionTypeConfig; - } - - public void configure() { - Map properties = new HashMap<>(); - properties.put(CONNECTION_TYPE_CONFIG, GSON.toJson(connectionTypeConfig)); - setProperties(properties); - } - - /** - * Stores the context so that it can be used later. - * - * @param context the HTTP service runtime context - */ - @Override - public void initialize(SystemHttpServiceContext context) throws Exception { - super.initialize(context); - // initialize available connections - this.enabledConnectionTypes = new ArrayList<>(); - String connectionTypeConfigString = context.getSpecification().getProperty(CONNECTION_TYPE_CONFIG); - connectionTypeConfig = GSON.fromJson(connectionTypeConfigString, ConnectionTypeConfig.class); - Set disabled = connectionTypeConfig.getDisabledTypes(); - for (ConnectionType connectionType : ConnectionType.values()) { - if (!disabled.contains(connectionType)) { - enabledConnectionTypes.add(new ConnectionTypeInfo(connectionType)); - } - } - validateAndCreateDefaultConnections(); - } - - private void validateAndCreateDefaultConnections() throws IOException { - List defaultConnections = connectionTypeConfig.getConnections(); - Map namespaces = new HashMap<>(); - for (Connection defaultConnection : defaultConnections) { - if (defaultConnection.getName() == null) { - LOG.warn("Skipping the default connection without name field"); - continue; - } - if (defaultConnection.getType() == null) { - LOG.warn("Skipping the default connection {}, type is missing or un-recognized", defaultConnection.getName()); - continue; - } - String connNamespace = defaultConnection.getNamespace(); - Namespace namespace; - if (namespaces.containsKey(connNamespace)) { - namespace = namespaces.get(connNamespace); - } else { - NamespaceSummary summary = getContext().getAdmin().getNamespaceSummary(connNamespace); - if (summary == null) { - LOG.warn("Skipping connection '{}' since namespace '{}' does not exist", - defaultConnection.getName(), connNamespace); - continue; - } - namespace = new Namespace(summary.getName(), summary.getGeneration()); - namespaces.put(connNamespace, namespace); - } - - try { - TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - if (!store.connectionExists(namespace, defaultConnection.getName())) { - store.create(namespace, defaultConnection, true); - } - }); - } catch (Exception e) { - // we don't want to disrupt data-prep if we are not able to create a default connection, - // log the error and continue - LOG.warn("Exception while creating default connection ", e); - } - } - } - - /** - * Creates a connection object in the connections store. - * - * Following is the JSON request for setting the connection. - * - * { - * "name" : "MySQL Production DB", - * "description" : "Production DB connection handler", - * "type" : "DATABASE", - * "properties" : { - * "hostname" : "localhost", - * "port" : 3306, - * "username" : "root", - * "password" : "", - * "ssl" : false - * } - * } - * @param request Handler for incoming request. - * @param responder Responder for data going out. - */ - @POST - @Path("contexts/{context}/connections/create") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void create(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - // Extract the body of the request and transform it to the Connection object. - RequestExtractor extractor = new RequestExtractor(request); - ConnectionMeta connection = extractor.getConnectionMeta(); - - // Create an instance of the connection, if the connection id already exists, - // it will throw an exception. - NamespacedId id = TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - return store.create(ns, connection); - }); - // Return the id in the response. - return new ServiceResponse<>(Collections.singletonList(id.getId())); - }); - } - - /** - * Updates the connection within the connections store. - * - * Following is the JSON request for setting the connection. - * - * { - * "id" : "mysql_production_db", - * "name" : "MySQL Production DB", - * "description" : "Production DB connection handler", - * "created" : 123323213, - * "updated" : 123453533, - * "type" : "DATABASE", - * "properties" : { - * "hostname" : "localhost", - * "port" : 3306, - * "username" : "root", - * "password" : "", - * "ssl" : false - * } - * } - * @param request Handler for incoming request. - * @param responder Responder for data going out. - */ - @POST - @Path("contexts/{context}/connections/{id}/update") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void update(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - // Extract the body of the request and transform it to the Connection object. - RequestExtractor extractor = new RequestExtractor(request); - ConnectionMeta connection = extractor.getConnectionMeta(); - - // Create an instance of the connection, if the connection id doesn't exist - // it will throw an exception. - TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - store.update(new NamespacedId(ns, id), connection); - }); - return new ServiceResponse<>(Collections.emptyList()); - }); - } - - /** - * Lists all the connections available in the connection store. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - */ - @GET - @Path("contexts/{context}/connections") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void list(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @DefaultValue(ALL_TYPES) @QueryParam("type") String type) { - respond(request, responder, namespace, ns -> { - List connections = TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - return store.list(ns, input -> { - if (input == null) { - return false; - } - if (connectionTypeConfig.getDisabledTypes().contains(input.getType())) { - return false; - } - return type.equalsIgnoreCase(ALL_TYPES) || input.getType().name().equalsIgnoreCase(type); - }); - }); - return new ConnectionResponse<>(connections, getDefaultConnection(connections, connectionTypeConfig)); - }); - } - - @Nullable - private String getDefaultConnection(List connections, ConnectionTypeConfig connectionTypeConfig) { - String defaultConnection = connectionTypeConfig.getDefaultConnection(); - if (defaultConnection == null) { - return null; - } - Optional connection = - connections.stream().filter(e -> defaultConnection.equals(e.getId())).findFirst(); - return connection.map(Connection::getId).orElse(null); - } - - /** - * Deletes a connection from the connection store. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id of the connection to be deleted. - */ - @DELETE - @Path("contexts/{context}/connections/{id}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void delete(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - List preConfiguredConnections = connectionTypeConfig.getConnections(); - // pre-configured connections provided as part of config only contains name and type of connection - // since connection id is derived from connection name, we get the connection-id for the - // pre-configured connection name and check with the input connection id. - if (preConfiguredConnections.stream().anyMatch(c -> id.equals(ConnectionStore.getConnectionId(c.getName())))) { - throw new UnauthorizedException(String.format("Cannot delete admin controlled connection %s", id)); - } - TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - store.delete(new NamespacedId(ns, id)); - }); - return new ServiceResponse(new ArrayList<>()); - }); - } - - /** - * Given a connection id, returns the complete information about the connection. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id for which all the information is returned from the connection store. - */ - @GET - @Path("contexts/{context}/connections/{id}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void get(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> getConnection(new NamespacedId(ns, id))); - } - - /** - * Returns only the properties of the connection requested. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id of the connection for which all properties need to be returned. - */ - @GET - @Path("contexts/{context}/connections/{id}/properties") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void properties(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> getConnection(new NamespacedId(ns, id)).getProperties()); - } - - /** - * Updates a property of the connection. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id of the connection to be who's property needs to be updated. - */ - @PUT - @Path("contexts/{context}/connections/{id}/properties") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void updateProp(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id, - @QueryParam("key") String key, @QueryParam("value") String value) { - respond(request, responder, namespace, ns -> { - - NamespacedId namespacedId = new NamespacedId(ns, id); - return TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - Connection connection = store.get(namespacedId); - - ConnectionMeta updatedMeta = ConnectionMeta.builder(connection) - .putProperty(key, value) - .build(); - store.update(namespacedId, updatedMeta); - return new ServiceResponse<>(updatedMeta.getProperties()); - }); - }); - } - - /** - * Given a connection id, Clones and returns a new connection. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id of the connection that should be cloned. - */ - @GET - @Path("contexts/{context}/connections/{id}/clone") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void clone(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - Connection connection = getConnection(new NamespacedId(ns, id)); - ConnectionMeta clone = ConnectionMeta.builder(connection) - .setName(connection.getName() + "_Clone") - .build(); - return new ServiceResponse<>(clone); - }); - } - - /** - * Get the list of connection types that are supported - */ - @GET - @Path("connectionTypes") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void getConnectionTypes(HttpServiceRequest request, HttpServiceResponder responder) { - responder.sendJson(enabledConnectionTypes); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionResponse.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionResponse.java deleted file mode 100644 index 4420e3f5e..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionResponse.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.connections; - -import com.google.gson.annotations.SerializedName; -import io.cdap.wrangler.proto.ServiceResponse; - -import java.util.List; -import javax.annotation.Nullable; - -/** - * Response sent by listing connections endpoint - * @param - */ -public class ConnectionResponse extends ServiceResponse { - // default connection to show in DataPrep UI - @SerializedName("default") - String defaultConnection; - - public ConnectionResponse(List values, @Nullable String defaultConnectionId) { - super(values); - this.defaultConnection = defaultConnectionId; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionTypeConfig.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionTypeConfig.java deleted file mode 100644 index 45b215105..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionTypeConfig.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.connections; - -import io.cdap.cdap.api.Config; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionType; - -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import javax.annotation.Nullable; - -/** - * Default connections to create at startup and connection types that needs to be disabled - */ -public class ConnectionTypeConfig extends Config { - private final Set disabledTypes; - private final List connections; - private final String defaultConnection; - - public ConnectionTypeConfig() { - this(Collections.emptySet(), Collections.emptyList(), null); - } - - public ConnectionTypeConfig(Set disabledTypes, List connections, - @Nullable String defaultConnection) { - this.disabledTypes = disabledTypes; - this.connections = connections; - this.defaultConnection = defaultConnection; - } - - /** - * Return the set of disabled connection types - */ - public Set getDisabledTypes() { - return disabledTypes == null ? Collections.emptySet() : disabledTypes; - } - - /** - * Return the list of default connections to be created - */ - public List getConnections() { - return connections == null ? Collections.emptyList() : connections; - } - - /** - * Return the connection configured to be shown as default in dataprep - null if not provided - */ - @Nullable - public String getDefaultConnection() { - return defaultConnection; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - ConnectionTypeConfig that = (ConnectionTypeConfig) o; - - return Objects.equals(disabledTypes, that.disabledTypes) && - Objects.equals(connections, that.connections) && - Objects.equals(defaultConnection, that.defaultConnection); - } - - @Override - public int hashCode() { - return Objects.hash(disabledTypes, connections, defaultConnection); - } - -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionTypeInfo.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionTypeInfo.java deleted file mode 100644 index 021e4fbba..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/connections/ConnectionTypeInfo.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.connections; - -import io.cdap.wrangler.proto.connection.ConnectionType; - -/** - * ConnectionTypeInfo - sent as response in listing connection types - */ -public class ConnectionTypeInfo { - private final ConnectionType type; - - public ConnectionTypeInfo(ConnectionType connectionType) { - this.type = connectionType; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/database/DatabaseHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/database/DatabaseHandler.java deleted file mode 100644 index e55475294..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/database/DatabaseHandler.java +++ /dev/null @@ -1,662 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.database; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.artifact.ArtifactInfo; -import io.cdap.cdap.api.plugin.PluginClass; -import io.cdap.cdap.api.plugin.PluginConfigurer; -import io.cdap.cdap.api.plugin.PluginProperties; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.api.service.http.SystemHttpServiceContext; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.PropertyIds; -import io.cdap.wrangler.RequestExtractor; -import io.cdap.wrangler.SamplingMethod; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.dataset.workspace.DataType; -import io.cdap.wrangler.dataset.workspace.Workspace; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.dataset.workspace.WorkspaceMeta; -import io.cdap.wrangler.proto.ConnectionSample; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.NotFoundException; -import io.cdap.wrangler.proto.PluginSpec; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.proto.db.AllowedDriverInfo; -import io.cdap.wrangler.proto.db.DBSpec; -import io.cdap.wrangler.proto.db.JDBCDriverInfo; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; -import io.cdap.wrangler.service.macro.ServiceMacroEvaluator; -import io.cdap.wrangler.utils.ObjectSerDe; -import io.cdap.wrangler.utils.ReferenceNames; -import org.apache.commons.lang3.text.StrLookup; -import org.apache.commons.lang3.text.StrSubstitutor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.lang.reflect.Field; -import java.sql.DatabaseMetaData; -import java.sql.Date; -import java.sql.Driver; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.Time; -import java.sql.Timestamp; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.atomic.AtomicReference; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - - -/** - * Class description here. - */ -@Deprecated -public class DatabaseHandler extends AbstractWranglerHandler { - private static final Logger LOG = LoggerFactory.getLogger(DatabaseHandler.class); - private static final List MACRO_FIELDS = ImmutableList.of("username", "password"); - private static final String JDBC = "jdbc"; - private final Map macroEvaluators = new HashMap<>(); - - static final class DriverInfo { - private final String jdbcUrlPattern; - private final String className; - private final String name; - private final String tag; - private final String port; - private final boolean basicAllowed; - - DriverInfo(String name, String className, String jdbcUrlPattern, String tag, String port, boolean basicAllowed) { - this.name = name; - this.className = className; - this.jdbcUrlPattern = jdbcUrlPattern; - this.tag = tag; - this.port = port; - this.basicAllowed = basicAllowed; - } - - String getJdbcUrlPattern() { - return jdbcUrlPattern; - } - - String getName() { - return name; - } - - String getTag() { - return tag; - } - - String getPort() { - return port; - } - - } - - /** - * Executes something using a SQL connection. - */ - public interface Executor { - void execute(java.sql.Connection connection) throws Exception; - } - - private final Map drivers = new HashMap<>(); - - @Override - public void initialize(SystemHttpServiceContext context) throws Exception { - super.initialize(context); - drivers.clear(); - InputStream is = DatabaseHandler.class.getClassLoader().getResourceAsStream("drivers.mapping"); - if (is == null) { - // shouldn't happen unless packaging changes - LOG.error("Unable to get JDBC driver mapping."); - return; - } - loadDrivers(is, drivers); - } - - @VisibleForTesting - static void loadDrivers(InputStream is, Map drivers) throws IOException { - try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) { - String line; - while ((line = br.readLine()) != null) { - String[] columns = line.split(","); - if (columns.length == 6) { - DriverInfo info = new DriverInfo(columns[0], columns[1], columns[2], columns[3], columns[4], - Boolean.parseBoolean(columns[5])); - if (drivers.containsKey(info.tag)) { - // this only happens if the drivers.mapping file is invalid - // TODO: (CDAP-15353) wrangler should not assume names are unique - throw new IllegalStateException( - "Wrangler's allowed JDBC plugins has been misconfigured. " - + "Please make sure the driver plugin names in the drivers.mapping file are unique."); - } - drivers.put(info.tag, info); - } - } - } - } - - /** - * Lists all the JDBC drivers installed. - *

- * Following is JSON Response - * { - * "count": 1, - * "message": "Success", - * "status": 200, - * "values": [ - * { - * "label": "MySQL", - * "version": "5.1.39" - * "url": "jdbc:mysql://${hostname}:${port}/${database}?user=${username}&password=${password}" - * "default.port" : "3306", - * "properties": { - * "class": "com.mysql.jdbc.Driver", - * "name": "mysql", - * "type": "jdbc", - * }, - * "required" : [ - * "hostname", - * "port", - * "database", - * "username", - * "password", - * "url" - * ] - * } - * ] - * } - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - */ - @GET - @Path("contexts/{context}/jdbc/drivers") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void listDrivers(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - List values = new ArrayList<>(); - List artifacts = getContext().listArtifacts(namespace); - for (ArtifactInfo artifact : artifacts) { - Set plugins = artifact.getClasses().getPlugins(); - for (PluginClass plugin : plugins) { - String type = plugin.getType(); - if (!JDBC.equalsIgnoreCase(type)) { - continue; - } - // TODO: (CDAP-15353) Wrangler should not assume plugin names are unique - // if info is null, it means it's not an 'allowed' driver from the drivers.mapping file that is returned by - // the jdbc/allowed endpoint. - if (!drivers.containsKey(plugin.getName())) { - continue; - } - DriverInfo info = drivers.get(plugin.getName()); - Map properties = new HashMap<>(); - properties.put("class", plugin.getClassName()); - properties.put("type", plugin.getType()); - properties.put("name", plugin.getName()); - List fields = getMacros(info.getJdbcUrlPattern()); - fields.add("url"); - - JDBCDriverInfo jdbcDriverInfo = - new JDBCDriverInfo(info.getName(), artifact.getVersion(), info.getJdbcUrlPattern(), info.getPort(), - fields, properties); - values.add(jdbcDriverInfo); - } - } - return new ServiceResponse<>(values); - }); - } - - /** - * List all the possible drivers supported. - * - * Following is the sample response - * - * { - * "status" : 200, - * "message" : "Success", - * "count" : 1, - * "values" : [ - * { - * "class" : "com.jdbc.sql.Driver", - * "label" : "mysql", - * "name" : "mysql" - * } - * ] - * } - * - * TODO: figure out why this and the listDrivers() method both exist and why they have different response fields - * @param request HTTP request handler. - * @param responder HTTP response handler. - */ - @GET - @Path("contexts/{context}/jdbc/allowed") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void listAvailableDrivers(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - List values = new ArrayList<>(); - for (DriverInfo driver : drivers.values()) { - values.add(new AllowedDriverInfo(driver.className, driver.name, driver.tag, driver.tag, - driver.port, driver.basicAllowed)); - } - return new ServiceResponse<>(values); - }); - } - - @POST - @Path("contexts/{context}/connections/jdbc/test") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void testConnection(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - // Extract the body of the request and transform it to the Connection object. - RequestExtractor extractor = new RequestExtractor(request); - ConnectionMeta connection = extractor.getConnectionMeta(ConnectionType.DATABASE); - - loadAndExecute(ns, connection, java.sql.Connection::getMetaData, getContext()); - return new ServiceResponse<>("Successfully connected to database."); - }); - } - - /** - * Lists all databases. - * - * @param request HTTP requests handler. - * @param responder HTTP response handler. - */ - @POST - @Path("contexts/{context}/connections/databases") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void listDatabases(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - // Extract the body of the request and transform it to the Connection object. - RequestExtractor extractor = new RequestExtractor(request); - ConnectionMeta conn = extractor.getConnectionMeta(ConnectionType.DATABASE); - - List values = new ArrayList<>(); - loadAndExecute(ns, conn, connection -> { - DatabaseMetaData metaData = connection.getMetaData(); - ResultSet resultSet; - PreparedStatement ps = null; - if ("postgresql".equals(connection.getMetaData().getDatabaseProductName().toLowerCase().trim())) { - ps = connection.prepareStatement( - "SELECT datname AS TABLE_CAT FROM pg_database WHERE datistemplate = false;" - ); - resultSet = ps.executeQuery(); - } else { - resultSet = metaData.getCatalogs(); - } - try { - while (resultSet.next()) { - values.add(resultSet.getString("TABLE_CAT")); - } - } finally { - resultSet.close(); - if (ps != null) { - ps.close(); - } - } - }, getContext()); - return new ServiceResponse<>(values); - }); - } - - /** - * Lists all the tables within a database. - * - * @param request HTTP requests handler. - * @param responder HTTP response handler. - * @param id Connection id for which the tables need to be listed from database. - */ - @GET - @Path("contexts/{context}/connections/{id}/tables") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void listTables(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - List values = new ArrayList<>(); - Connection conn = getConnection(new NamespacedId(ns, id)); - loadAndExecute(ns, conn, connection -> { - String product = connection.getMetaData().getDatabaseProductName().toLowerCase(); - ResultSet resultSet; - if (product.equalsIgnoreCase("oracle")) { - Statement statement = connection.createStatement(); - resultSet = statement.executeQuery("SELECT table_name FROM all_tables"); - } else { - DatabaseMetaData metaData = connection.getMetaData(); - resultSet = metaData.getTables(connection.getCatalog(), connection.getSchema(), "%", null); - } - try { - while (resultSet.next()) { - String name; - if (product.equalsIgnoreCase("oracle")) { - name = resultSet.getString("table_name"); - if (name.contains("$")) { - continue; - } - } else { - name = resultSet.getString(3); - } - values.add(new Name(name)); - } - } finally { - if (resultSet != null) { - resultSet.close(); - } - } - }, getContext()); - return new ServiceResponse<>(values); - }); - } - - /** - * Reads a table into workspace. - * - * @param request HTTP requests handler. - * @param responder HTTP response handler. - * @param id Connection id for which the tables need to be listed from database. - * @param table Name of the database table. - * @param lines No of lines to be read from RDBMS table. - * @param scope Group the workspace should be created in. - */ - @GET - @Path("contexts/{context}/connections/{id}/tables/{table}/read") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void read(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id, @PathParam("table") String table, - @QueryParam("lines") int lines, - @QueryParam("scope") @DefaultValue(WorkspaceDataset.DEFAULT_SCOPE) String scope) { - respond(request, responder, namespace, ns -> { - AtomicReference sampleRef = new AtomicReference<>(); - Connection conn = getConnection(new NamespacedId(ns, id)); - - loadAndExecute(ns, conn, connection -> { - try (Statement statement = connection.createStatement(); - ResultSet result = statement.executeQuery(String.format("select * from %s", table))) { - List rows = getRows(lines, result); - - Map properties = new HashMap<>(); - properties.put(PropertyIds.NAME, table); - properties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.DATABASE.getType()); - properties.put(PropertyIds.SAMPLER_TYPE, SamplingMethod.NONE.getMethod()); - properties.put(PropertyIds.CONNECTION_ID, id); - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(table) - .setScope(scope) - .setProperties(properties) - .build(); - String sampleId = TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - NamespacedId workspaceId = ws.createWorkspace(ns, workspaceMeta); - - ObjectSerDe> serDe = new ObjectSerDe<>(); - byte[] data = serDe.toByteArray(rows); - ws.updateWorkspaceData(workspaceId, DataType.RECORDS, data); - return workspaceId.getId(); - }); - - ConnectionSample sample = new ConnectionSample(sampleId, table, - ConnectionType.DATABASE.getType(), - SamplingMethod.NONE.getMethod(), id); - sampleRef.set(sample); - } - }, getContext()); - return new ServiceResponse<>(sampleRef.get()); - }); - } - - @VisibleForTesting - static List getRows(int lines, ResultSet result) throws SQLException { - List rows = new ArrayList<>(); - ResultSetMetaData meta = result.getMetaData(); - int count = lines; - while (result.next() && count > 0) { - Row row = new Row(); - for (int i = 1; i < meta.getColumnCount() + 1; ++i) { - Object object = result.getObject(i); - if (object != null) { - if (object instanceof Date) { - object = ((Date) object).toLocalDate(); - } else if (object instanceof Time) { - object = ((Time) object).toLocalTime(); - } else if (object instanceof Timestamp) { - object = ((Timestamp) object).toInstant().atZone(ZoneId.ofOffset("UTC", ZoneOffset.UTC)); - } else if (object.getClass().getName().equals("oracle.sql.ROWID")) { - // If the object is Oracle ROWID, then convert it into a string. - object = object.toString(); - } - } - row.add(meta.getColumnName(i), object); - } - rows.add(row); - count--; - } - return rows; - } - - /** - * Specification for the source. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param id of the connection. - * @param table in the database. - */ - @GET - @Path("contexts/{context}/connections/{id}/tables/{table}/specification") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void specification(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id, - @PathParam("table") String table) { - respond(request, responder, namespace, ns -> { - Connection conn = getConnection(new NamespacedId(ns, id)); - - PluginSpec pluginSpec = new PluginSpec(String.format("Database - %s", table), "source", - getSpecification(conn, table)); - DBSpec spec = new DBSpec(pluginSpec); - - return new ServiceResponse<>(spec); - }); - } - - public static Map getSpecification(Connection conn, String table) { - Map properties = new HashMap<>(); - properties.put("connectionString", conn.getProperties().get("url")); - properties.put("referenceName", ReferenceNames.cleanseReferenceName(table)); - properties.put("user", conn.getProperties().get("username")); - properties.put("password", conn.getProperties().get("password")); - properties.put("importQuery", String.format("SELECT * FROM %s WHERE $CONDITIONS", table)); - properties.put("numSplits", "1"); - properties.put("jdbcPluginName", conn.getProperties().get("name")); - properties.put("jdbcPluginType", conn.getProperties().get("type")); - return properties; - } - - public static Map getConnectorProperties(Map config) { - Map properties = new HashMap<>(); - properties.put("connectionString", config.get("url")); - properties.put("user", config.get("username")); - properties.put("password", config.get("password")); - properties.put("jdbcPluginType", config.get("type")); - properties.put("jdbcPluginName", config.get("name")); - return properties; - } - - // TODO: this path will not work with current db connector if the database type supports schema, - // but it should still give back the related source information. Passing a root path so it will not interact with - // the actual database due to messed schema/table name - public static String getPath(Workspace workspace) { - return "/"; - } - - /** - * Extracts all the macros within a string expression. - * - * @param expression specifies the expression. - * @return list of macros present within an expression. - */ - private List getMacros(String expression) { - final List variables = new ArrayList<>(); - StrSubstitutor substitutor = new StrSubstitutor(new StrLookup() { - @Override - public String lookup(String s) { - variables.add(s); - return s; - } - }); - substitutor.replace(expression); - return variables; - } - - /** - * Loads the driver and gets the connection to the database. - * - * @param connection the connection to be connected to. - */ - private void loadAndExecute(Namespace namespace, ConnectionMeta connection, - Executor executor, SystemHttpServiceContext context) throws Exception { - String jdbcPluginName = connection.getProperties().get("name"); - String url = connection.getProperties().get("url"); - - PluginConfigurer pluginConfigurer = context.createPluginConfigurer(namespace.getName()); - Class driverClass = pluginConfigurer.usePluginClass(JDBC, jdbcPluginName, - UUID.randomUUID().toString(), - PluginProperties.builder().build()); - if (driverClass == null) { - throw new NotFoundException("Could not find a JDBC driver plugin named " + jdbcPluginName); - } - - DriverCleanup cleanup = ensureJDBCDriverIsAvailable(driverClass, url); - try { - Map evaluated = evaluateMacros(connection, context, namespace.getName()); - String username = evaluated.get("username"); - String password = evaluated.get("password"); - - java.sql.Connection conn = DriverManager.getConnection(url, username, password); - executor.execute(conn); - } finally { - cleanup.destroy(); - } - } - - /** - * Evaluates all the MACRO_FIELDS. - */ - private Map evaluateMacros(ConnectionMeta connection, SystemHttpServiceContext context, - String namespaceName) { - Map toEvaluate = new HashMap<>(); - for (String field : MACRO_FIELDS) { - toEvaluate.put(field, connection.getProperties().get(field)); - } - - macroEvaluators.putIfAbsent(namespaceName, new ServiceMacroEvaluator(namespaceName, context)); - return context.evaluateMacros(namespaceName, toEvaluate, macroEvaluators.get(namespaceName)); - } - - private static DriverCleanup ensureJDBCDriverIsAvailable(Class classz, String url) - throws IllegalAccessException, InstantiationException, SQLException { - try { - DriverManager.getDriver(url); - return new DriverCleanup(null); - } catch (SQLException e) { - Driver driver = classz.newInstance(); - final JDBCDriverShim shim = new JDBCDriverShim(driver); - try { - deregisterAllDrivers(classz); - } catch (NoSuchFieldException | ClassNotFoundException e1) { - LOG.warn("Unable to deregister JDBC Driver class {}", classz); - } - DriverManager.registerDriver(shim); - return new DriverCleanup(shim); - } - } - - /** - * De-register all SQL drivers that are associated with the class - */ - private static void deregisterAllDrivers(Class classz) - throws NoSuchFieldException, IllegalAccessException, ClassNotFoundException { - Field field = DriverManager.class.getDeclaredField("registeredDrivers"); - field.setAccessible(true); - List list = (List) field.get(null); - for (Object driverInfo : list) { - Class driverInfoClass = DatabaseHandler.class.getClassLoader().loadClass("java.sql.DriverInfo"); - Field driverField = driverInfoClass.getDeclaredField("driver"); - driverField.setAccessible(true); - Driver d = (Driver) driverField.get(driverInfo); - if (d == null) { - LOG.debug("Found null driver object in drivers list. Ignoring."); - continue; - } - ClassLoader registeredDriverClassLoader = d.getClass().getClassLoader(); - if (registeredDriverClassLoader == null) { - continue; - } - // Remove all objects in this list that were created using the classloader of the caller. - if (d.getClass().getClassLoader().equals(classz.getClassLoader())) { - list.remove(driverInfo); - } - } - } - - /** - * Table name object. - */ - @SuppressWarnings({"FieldCanBeLocal", "unused"}) - private static class Name { - private final String name; - private final int count; - - Name(String name) { - this.name = name; - // TODO: check whether this can be removed - this.count = 0; - } - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/database/DriverCleanup.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/database/DriverCleanup.java deleted file mode 100644 index 9e642c02e..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/database/DriverCleanup.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.database; - -import com.google.common.base.Throwables; -import io.cdap.cdap.etl.api.Destroyable; - -import java.sql.DriverManager; -import java.sql.SQLException; -import javax.annotation.Nullable; - -/** - * Cleans up JDBC drivers. - */ -public class DriverCleanup implements Destroyable { - private final JDBCDriverShim driverShim; - - DriverCleanup(@Nullable JDBCDriverShim driverShim) { - this.driverShim = driverShim; - } - - public void destroy() { - if (driverShim != null) { - try { - DriverManager.deregisterDriver(driverShim); - } catch (SQLException e) { - throw Throwables.propagate(e); - } - } - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/database/JDBCDriverShim.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/database/JDBCDriverShim.java deleted file mode 100644 index 1b400fea4..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/database/JDBCDriverShim.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.database; - -import java.sql.Connection; -import java.sql.Driver; -import java.sql.DriverPropertyInfo; -import java.sql.SQLException; -import java.sql.SQLFeatureNotSupportedException; -import java.util.Properties; -import java.util.logging.Logger; - -/** - * JDBC driver shim. Doesn't do anything but delegate. - */ -public class JDBCDriverShim implements Driver { - private final Driver delegate; - - public JDBCDriverShim(Driver delegate) { - this.delegate = delegate; - } - - @Override - public boolean acceptsURL(String url) throws SQLException { - return delegate.acceptsURL(url); - } - - @Override - public Connection connect(String url, Properties info) throws SQLException { - return delegate.connect(url, info); - } - - @Override - public int getMajorVersion() { - return delegate.getMajorVersion(); - } - - @Override - public int getMinorVersion() { - return delegate.getMinorVersion(); - } - - @Override - public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException { - return delegate.getPropertyInfo(url, info); - } - - @Override - public boolean jdbcCompliant() { - return delegate.jdbcCompliant(); - } - - @Override - public Logger getParentLogger() throws SQLFeatureNotSupportedException { - return delegate.getParentLogger(); - } -} - diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/AbstractDirectiveHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/AbstractDirectiveHandler.java deleted file mode 100644 index d7eae7960..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/AbstractDirectiveHandler.java +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.service.directive; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.service.http.SystemHttpServiceContext; -import io.cdap.cdap.features.Feature; -import io.cdap.directives.aggregates.DefaultTransientStore; -import io.cdap.wrangler.api.CompileException; -import io.cdap.wrangler.api.DirectiveConfig; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRecordBase; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.GrammarMigrator; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.RecipeParser; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.TransientStore; -import io.cdap.wrangler.executor.RecipePipelineExecutor; -import io.cdap.wrangler.parser.ConfigDirectiveContext; -import io.cdap.wrangler.parser.GrammarBasedParser; -import io.cdap.wrangler.parser.GrammarWalker; -import io.cdap.wrangler.parser.MigrateToV2; -import io.cdap.wrangler.parser.RecipeCompiler; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.ErrorRecordsException; -import io.cdap.wrangler.proto.workspace.ColumnStatistics; -import io.cdap.wrangler.proto.workspace.ColumnValidationResult; -import io.cdap.wrangler.proto.workspace.WorkspaceValidationResult; -import io.cdap.wrangler.proto.workspace.v2.DirectiveExecutionResponse; -import io.cdap.wrangler.registry.CompositeDirectiveRegistry; -import io.cdap.wrangler.registry.DirectiveRegistry; -import io.cdap.wrangler.registry.SystemDirectiveRegistry; -import io.cdap.wrangler.registry.UserDirectiveRegistry; -import io.cdap.wrangler.schema.TransientStoreKeys; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; -import io.cdap.wrangler.statistics.BasicStatistics; -import io.cdap.wrangler.statistics.Statistics; -import io.cdap.wrangler.utils.SchemaConverter; -import io.cdap.wrangler.validator.ColumnNameValidator; -import io.cdap.wrangler.validator.Validator; -import io.cdap.wrangler.validator.ValidatorException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * Abstract handler which contains common logic for v1 and v2 endpoints - * - * TODO: CDAP-18015 Refactor and add unit test for methods in this class - */ -public class AbstractDirectiveHandler extends AbstractWranglerHandler { - private static final Logger LOG = LoggerFactory.getLogger(AbstractDirectiveHandler.class); - private static final Gson GSON = new GsonBuilder().registerTypeAdapterFactory( - new WranglerDisplaySerializer()).create(); - - private static final String NULL_COLUMN_DISPLAY_TYPE = "NULL"; - protected static final String COLUMN_NAME = "body"; - protected static final String RECORD_DELIMITER_HEADER = "recorddelimiter"; - protected static final String DELIMITER_HEADER = "delimiter"; - protected static final TransientStore TRANSIENT_STORE = new DefaultTransientStore(); - - protected DirectiveRegistry composite; - protected boolean schemaManagementEnabled; - - @Override - public void initialize(SystemHttpServiceContext context) throws Exception { - super.initialize(context); - composite = new CompositeDirectiveRegistry( - SystemDirectiveRegistry.INSTANCE, - new UserDirectiveRegistry(context) - ); - schemaManagementEnabled = Feature.WRANGLER_SCHEMA_MANAGEMENT.isEnabled(context); - } - - /** - * Closes the resources help by the composite registry. - */ - @Override - public void destroy() { - super.destroy(); - try { - composite.close(); - } catch (IOException e) { - // If something bad happens here, you might see a lot of open file handles. - LOG.warn("Unable to close the directive registry. You might see increasing number of open file handle.", e); - } - } - - protected List executeDirectives( - String namespace, - List directives, - List sample, - GrammarWalker.Visitor grammarVisitor) throws DirectiveParseException, E, RecipeException { - - if (directives.isEmpty()) { - return sample; - } - - GrammarMigrator migrator = new MigrateToV2(directives); - String recipe = migrator.migrate(); - - // Parse and call grammar visitor - try { - GrammarWalker walker = new GrammarWalker(new RecipeCompiler(), new ConfigDirectiveContext(DirectiveConfig.EMPTY)); - walker.walk(recipe, grammarVisitor); - } catch (CompileException e) { - throw new BadRequestException(e.getMessage(), e); - } - - RecipeParser parser = new GrammarBasedParser(namespace, recipe, composite, - new ConfigDirectiveContext(DirectiveConfig.EMPTY)); - try (RecipePipelineExecutor executor = new RecipePipelineExecutor(parser, - new ServicePipelineContext( - namespace, ExecutorContext.Environment.SERVICE, - getContext(), TRANSIENT_STORE))) { - List result = executor.execute(sample); - - List errors = executor.errors() - .stream() - .filter(ErrorRecordBase::isShownInWrangler) - .collect(Collectors.toList()); - - if (!errors.isEmpty()) { - throw new ErrorRecordsException(errors); - } - return result; - } - } - - /** - * Transform the rows to response that is user friendly. Also generates the summary from the rows. - */ - protected DirectiveExecutionResponse generateExecutionResponse( - List rows, int limit) throws Exception { - List> values = new ArrayList<>(rows.size()); - Map types = new LinkedHashMap<>(); - SchemaConverter convertor = new SchemaConverter(); - - if (schemaManagementEnabled) { - Schema outputSchema = TRANSIENT_STORE.get(TransientStoreKeys.OUTPUT_SCHEMA) != null ? - TRANSIENT_STORE.get(TransientStoreKeys.OUTPUT_SCHEMA) : TRANSIENT_STORE.get(TransientStoreKeys.INPUT_SCHEMA); - for (Schema.Field field : outputSchema.getFields()) { - types.put(field.getName(), getColumnDisplayType(field.getSchema())); - } - } - - // Iterate through all the new rows. - for (Row row : rows) { - // If output array has more than return result values, we terminate. - if (values.size() >= limit) { - break; - } - - Map value = new HashMap<>(row.width()); - - // Iterate through all the fields of the row. - for (Pair field : row.getFields()) { - String fieldName = field.getFirst(); - Object object = field.getSecond(); - - if (object != null) { - if (!schemaManagementEnabled) { - Schema schema = convertor.getSchema(object, fieldName); - types.put(fieldName, schema != null ? getColumnDisplayType(schema) : object.getClass().getSimpleName()); - } - - if ((object instanceof Iterable) - || (object instanceof Row)) { - value.put(fieldName, GSON.toJson(object)); - } else { - if ((object.getClass().getMethod("toString").getDeclaringClass() != Object.class)) { - value.put(fieldName, object.toString()); - } else { - value.put(fieldName, WranglerDisplaySerializer.NONDISPLAYABLE_STRING); - } - } - } else { - value.put(fieldName, null); - if (!schemaManagementEnabled) { - types.put(fieldName, NULL_COLUMN_DISPLAY_TYPE); - } - } - } - values.add(value); - } - return new DirectiveExecutionResponse(values, types.keySet(), types, getWorkspaceSummary(rows)); - } - - /** - * Get the summary for the workspace rows - */ - protected WorkspaceValidationResult getWorkspaceSummary(List rows) throws Exception { - // Validate Column names. - Validator validator = new ColumnNameValidator(); - validator.initialize(); - - // Iterate through columns to value a set - Set uniqueColumns = new HashSet<>(); - for (Row row : rows) { - for (int i = 0; i < row.width(); ++i) { - uniqueColumns.add(row.getColumn(i)); - } - } - - Map columnValidationResults = new HashMap<>(); - for (String name : uniqueColumns) { - try { - validator.validate(name); - columnValidationResults.put(name, new ColumnValidationResult(null)); - } catch (ValidatorException e) { - columnValidationResults.put(name, new ColumnValidationResult(e.getMessage())); - } - } - - // Generate General and Type related Statistics for each column. - Statistics statsGenerator = new BasicStatistics(); - Row summary = statsGenerator.aggregate(rows); - - Row stats = (Row) summary.getValue("stats"); - Row types = (Row) summary.getValue("types"); - - List> fields = stats.getFields(); - Map statistics = new HashMap<>(); - for (Pair field : fields) { - List> values = (List>) field.getSecond(); - Map generalStats = new HashMap<>(); - for (Pair value : values) { - generalStats.put(value.getFirst(), value.getSecond().floatValue() * 100); - } - ColumnStatistics columnStatistics = new ColumnStatistics(generalStats, null); - statistics.put(field.getFirst(), columnStatistics); - } - - fields = types.getFields(); - for (Pair field : fields) { - List> values = (List>) field.getSecond(); - Map typeStats = new HashMap<>(); - for (Pair value : values) { - typeStats.put(value.getFirst(), value.getSecond().floatValue() * 100); - } - ColumnStatistics existingStats = statistics.get(field.getFirst()); - Map generalStats = existingStats == null ? null : existingStats.getGeneral(); - statistics.put(field.getFirst(), new ColumnStatistics(generalStats, typeStats)); - } - - return new WorkspaceValidationResult(columnValidationResults, statistics); - } - - private String getColumnDisplayType(Schema schema) { - schema = schema.isNullable() ? schema.getNonNullable() : schema; - String type = schema.getLogicalType() == null ? schema.getType().name() : schema.getLogicalType().name(); - // for backward compatibility, make the characters except the first one to lower case - type = type.substring(0, 1).toUpperCase() + type.substring(1).toLowerCase(); - return type; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ConnectionDiscoverer.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ConnectionDiscoverer.java deleted file mode 100644 index 9a1b64d28..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ConnectionDiscoverer.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.service.directive; - -import com.google.common.base.Stopwatch; -import com.google.common.io.ByteStreams; -import com.google.common.io.CharStreams; -import com.google.common.net.UrlEscapers; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import io.cdap.cdap.api.ServiceDiscoverer; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.retry.RetryableException; -import io.cdap.cdap.etl.api.connector.SampleRequest; -import io.cdap.cdap.etl.common.Constants; -import io.cdap.cdap.etl.proto.connection.ConnectionCreationRequest; -import io.cdap.cdap.etl.proto.connection.ConnectorDetail; -import io.cdap.cdap.etl.proto.connection.SampleResponse; -import io.cdap.cdap.etl.proto.connection.SampleResponseCodec; -import io.cdap.cdap.etl.proto.connection.SpecGenerationRequest; -import io.cdap.cdap.internal.io.SchemaTypeAdapter; -import io.cdap.cdap.proto.id.NamespaceId; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.ConflictException; -import io.cdap.wrangler.proto.NotFoundException; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.net.HttpURLConnection; -import java.nio.charset.StandardCharsets; -import java.util.concurrent.TimeUnit; -import javax.annotation.Nullable; - -/** - * Discover for connection related operations - */ -public class ConnectionDiscoverer { - private static final Gson GSON = - new GsonBuilder() - .registerTypeAdapter(Schema.class, new SchemaTypeAdapter()) - .registerTypeAdapter(SampleResponse.class, new SampleResponseCodec()).create(); - - private static final long TIMEOUT_MILLIS = TimeUnit.SECONDS.toMillis(30); - private static final long RETRY_BASE_DELAY_MILLIS = 200L; - private static final long RETRY_MAX_DELAY_MILLIS = TimeUnit.SECONDS.toMillis(5); - private static final double RETRY_DELAY_MULTIPLIER = 1.2d; - private static final double RETRY_RANDOMIZE_FACTOR = 0.1d; - private static final int URL_READ_TIMEOUT_MILLIS = 120000; - - private final ServiceDiscoverer serviceDiscoverer; - - public ConnectionDiscoverer(ServiceDiscoverer serviceDiscoverer) { - this.serviceDiscoverer = serviceDiscoverer; - } - - public void addConnection(String namespace, String connectionName, - ConnectionCreationRequest request) throws IOException, InterruptedException { - String url = String.format("v1/contexts/%s/connections/%s", namespace, connectionName); - execute(namespace, connectionName, url, urlConn -> { - urlConn.setRequestMethod("PUT"); - urlConn.setDoOutput(true); - try (OutputStream os = urlConn.getOutputStream(); - OutputStreamWriter writer = new OutputStreamWriter(os, StandardCharsets.UTF_8)) { - writer.write(GSON.toJson(request)); - writer.flush(); - } - }, null); - } - - public ConnectorDetail getSpecification(String namespace, String connectionName, - SpecGenerationRequest request) throws IOException, InterruptedException { - String url = String.format("v1/contexts/%s/connections/%s/specification", namespace, connectionName); - return execute(namespace, connectionName, url, urlConn -> { - urlConn.setRequestMethod("POST"); - urlConn.setDoOutput(true); - try (OutputStream os = urlConn.getOutputStream(); - OutputStreamWriter writer = new OutputStreamWriter(os, StandardCharsets.UTF_8)) { - writer.write(GSON.toJson(request)); - writer.flush(); - } - }, ConnectorDetail.class); - } - - public SampleResponse retrieveSample(String namespace, String connectionName, - SampleRequest sampleRequest) throws IOException, InterruptedException { - String url = String.format("v1/contexts/%s/connections/%s/sample", namespace, connectionName); - return execute(namespace, connectionName, url, urlConn -> { - urlConn.setRequestMethod("POST"); - urlConn.setDoOutput(true); - try (OutputStream os = urlConn.getOutputStream(); - OutputStreamWriter writer = new OutputStreamWriter(os, StandardCharsets.UTF_8)) { - writer.write(GSON.toJson(sampleRequest)); - writer.flush(); - } - }, SampleResponse.class); - } - - /** - * Execute the url provided, and return the response based on given type. - */ - private T execute(String namespace, String connectionName, String url, - URLConfigurer configurer, @Nullable Class type) throws IOException, InterruptedException { - // Make call with exponential delay on failure retry. - long delay = RETRY_BASE_DELAY_MILLIS; - double minMultiplier = RETRY_DELAY_MULTIPLIER - RETRY_DELAY_MULTIPLIER * RETRY_RANDOMIZE_FACTOR; - double maxMultiplier = RETRY_DELAY_MULTIPLIER + RETRY_DELAY_MULTIPLIER * RETRY_RANDOMIZE_FACTOR; - Stopwatch stopWatch = Stopwatch.createStarted(); - - // remember the latest retryable exception; - RetryableException latest = null; - while (stopWatch.elapsed(TimeUnit.MILLISECONDS) < TIMEOUT_MILLIS) { - try { - HttpURLConnection urlConn = retrieveConnectionUrl(url); - configurer.configure(urlConn); - return retrieveResult(urlConn, type); - } catch (RetryableException e) { - latest = e; - TimeUnit.MILLISECONDS.sleep(delay); - delay = (long) (delay * (minMultiplier + Math.random() * (maxMultiplier - minMultiplier + 1))); - delay = Math.min(delay, RETRY_MAX_DELAY_MILLIS); - } catch (IOException e) { - throw new IOException( - String.format("Failed to retrieve sample for connection '%s' in namespace '%s'. Error: %s", - connectionName, namespace, e.getMessage()), e); - } - } - - if (latest != null) { - throw new IOException(String.format("Timed out when trying to retrieve sample for " + - "connection '%s' in namespace '%s'.", connectionName, namespace), latest); - } - - // should not get here, the call should either already fail with a non retryable failure or timed out because of - // retryable failure - throw new IllegalStateException(String.format("Unable to retrieve sample for " + - "connection '%s' in namespace '%s'.", connectionName, namespace)); - } - - private HttpURLConnection retrieveConnectionUrl(String url) throws IOException { - // encode the url since connection name can contain space, and other special characters - // use guava url escaper since URLEncoder will encode space to plus, which is wrong for the connection name - url = UrlEscapers.urlFragmentEscaper().escape(url); - HttpURLConnection urlConn = serviceDiscoverer.openConnection( - NamespaceId.SYSTEM.getNamespace(), Constants.PIPELINEID, Constants.STUDIO_SERVICE_NAME, url); - - if (urlConn == null) { - throw new RetryableException("Connection service is not available"); - } - urlConn.setReadTimeout(URL_READ_TIMEOUT_MILLIS); - return urlConn; - } - - /** - * Retrieve the result from the url conn. - * - * @param urlConn url connection to get result - * @param type the expected return type for this call - */ - private T retrieveResult(HttpURLConnection urlConn, @Nullable Class type) throws IOException { - int responseCode = urlConn.getResponseCode(); - if (responseCode != HttpURLConnection.HTTP_OK) { - switch (responseCode) { - case HttpURLConnection.HTTP_BAD_GATEWAY: - case HttpURLConnection.HTTP_UNAVAILABLE: - case HttpURLConnection.HTTP_GATEWAY_TIMEOUT: - throw new RetryableException("Connection service is not available with status " + responseCode); - case HttpURLConnection.HTTP_BAD_REQUEST: - throw new BadRequestException(getError(urlConn)); - case HttpURLConnection.HTTP_NOT_FOUND: - throw new NotFoundException(getError(urlConn)); - case HttpURLConnection.HTTP_CONFLICT: - throw new ConflictException(getError(urlConn)); - } - throw new IOException("Failed to call connection service with status " + responseCode + ": " + - getError(urlConn)); - } - - if (type == null) { - urlConn.disconnect(); - return null; - } - try (Reader reader = new InputStreamReader(urlConn.getInputStream(), StandardCharsets.UTF_8)) { - return GSON.fromJson(CharStreams.toString(reader), type); - } finally { - urlConn.disconnect(); - } - } - - /** - * Returns the full content of the error stream for the given {@link HttpURLConnection}. - */ - private String getError(HttpURLConnection urlConn) { - try (InputStream is = urlConn.getErrorStream()) { - if (is == null) { - return "Unknown error"; - } - return new String(ByteStreams.toByteArray(is), StandardCharsets.UTF_8); - } catch (IOException e) { - return "Unknown error due to failure to read from error output: " + e.getMessage(); - } - } - - /** - * Interface for the methods to configure the url conn - */ - private interface URLConfigurer { - void configure(HttpURLConnection urlConn) throws IOException; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ConnectionUpgrader.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ConnectionUpgrader.java deleted file mode 100644 index 5532319e6..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ConnectionUpgrader.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.service.directive; - -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.api.service.SystemServiceContext; -import io.cdap.cdap.etl.proto.connection.ConnectionCreationRequest; -import io.cdap.cdap.etl.proto.connection.PluginInfo; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.dataset.connections.ConnectionStore; -import io.cdap.wrangler.proto.ConflictException; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.store.upgrade.UpgradeEntityType; -import io.cdap.wrangler.store.upgrade.UpgradeState; -import io.cdap.wrangler.store.upgrade.UpgradeStore; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; - -/** - * Upgrader for connections - */ -public class ConnectionUpgrader { - private static final Logger LOG = LoggerFactory.getLogger(ConnectionUpgrader.class); - private static final UpgradeState CONN_COMPLETE_STATE = new UpgradeState(1L); - - private final UpgradeStore upgradeStore; - private final SystemServiceContext context; - private final long upgradeBeforeTsSecs; - private final ConnectorArtifactLoader artifactLoader; - private final ConnectionDiscoverer discoverer; - - public ConnectionUpgrader(UpgradeStore upgradeStore, SystemServiceContext context, long upgradeBeforeTsSecs) { - this.upgradeStore = upgradeStore; - this.context = context; - this.upgradeBeforeTsSecs = upgradeBeforeTsSecs; - this.artifactLoader = new ConnectorArtifactLoader(context); - this.discoverer = new ConnectionDiscoverer(context); - } - - public void upgradeConnections() throws Exception { - List namespaces = context.listNamespaces(); - for (NamespaceSummary ns : namespaces) { - UpgradeState state = upgradeStore.getEntityUpgradeState(ns, UpgradeEntityType.CONNECTION); - if (state == null || state.getVersion() == 0L) { - upgradeConnectionsInNamespace(ns); - } - } - upgradeStore.setEntityUpgradeState(UpgradeEntityType.CONNECTION, CONN_COMPLETE_STATE); - } - - private void upgradeConnectionsInNamespace(NamespaceSummary namespace) { - List connections = TransactionRunners.run(context, ctx -> { - ConnectionStore connStore = ConnectionStore.get(ctx); - return connStore.list(new Namespace(namespace.getName(), namespace.getGeneration()), - connection -> connection.getCreated() < upgradeBeforeTsSecs); - }); - - for (Connection connection : connections) { - // do not upgrade pre configured connection - if (connection.isPreconfigured()) { - continue; - } - - // if it is not upgradable - ConnectionType type = connection.getType(); - if (!ConnectionType.CONN_UPGRADABLE_TYPES.contains(type)) { - continue; - } - - PluginInfo pluginInfo = artifactLoader.getPluginInfo(type.getConnectorName()); - if (pluginInfo == null) { - LOG.warn("Unable to find the connector for connection type {} with connection name {}, " + - "upgrade will not be done for it", type.name().toLowerCase(), connection.getName()); - continue; - } - - PluginInfo info = new PluginInfo( - pluginInfo.getName(), pluginInfo.getType(), pluginInfo.getCategory(), - SpecificationUpgradeUtils.getConnectorProperties(type, connection.getProperties()), - pluginInfo.getArtifact()); - ConnectionCreationRequest request = new ConnectionCreationRequest(connection.getDescription(), info); - try { - discoverer.addConnection(namespace.getName(), connection.getName(), request); - } catch (ConflictException e) { - // if there is a conflict exception, it is quite possible this connection is already upgraded before - LOG.debug("A connection {} already exists, ignoring the upgrade", connection.getName()); - } catch (Exception e) { - LOG.warn("Failed to upgrade connection {}", connection.getName(), e); - } - } - upgradeStore.setEntityUpgradeState(namespace, UpgradeEntityType.CONNECTION, CONN_COMPLETE_STATE); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ConnectorArtifactLoader.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ConnectorArtifactLoader.java deleted file mode 100644 index 509a41029..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ConnectorArtifactLoader.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.service.directive; - -import io.cdap.cdap.api.artifact.ArtifactInfo; -import io.cdap.cdap.api.artifact.ArtifactManager; -import io.cdap.cdap.api.artifact.ArtifactScope; -import io.cdap.cdap.api.artifact.ArtifactSummary; -import io.cdap.cdap.api.plugin.PluginClass; -import io.cdap.cdap.etl.api.connector.Connector; -import io.cdap.cdap.etl.proto.ArtifactSelectorConfig; -import io.cdap.cdap.etl.proto.connection.PluginInfo; -import io.cdap.wrangler.utils.ArtifactSummaryComparator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import javax.annotation.Nullable; - -/** - * Connector artifact loader - */ -public class ConnectorArtifactLoader { - private static final Logger LOG = LoggerFactory.getLogger(ConnectorArtifactLoader.class); - private static final Map CONNECTORS_PLUGINS_MAP; - - static { - Map connectors = new HashMap<>(); - connectors.put("BigQuery", "google-cloud"); - connectors.put("GCS", "google-cloud"); - connectors.put("Spanner", "google-cloud"); - connectors.put("Database", "database-plugins"); - connectors.put("S3", "amazon-s3-plugins"); - connectors.put("Kafka", "kafka-plugins"); - CONNECTORS_PLUGINS_MAP = connectors; - } - - private final ArtifactManager artifactManager; - // map of connector plugin name -> artifact info - private final Map connectors; - - public ConnectorArtifactLoader(ArtifactManager artifactManager) { - this.artifactManager = artifactManager; - this.connectors = new HashMap<>(); - reload(); - } - - @Nullable - public PluginInfo getPluginInfo(String connectorName) { - return connectors.get(connectorName); - } - - public void reload() { - connectors.clear(); - - List artifacts; - try { - artifacts = artifactManager.listArtifacts(); - } catch (IOException e) { - LOG.error("Failed to load connector artifact.", e); - return; - } - - ArtifactSummaryComparator comparator = new ArtifactSummaryComparator(); - Map connectorPlugins = new HashMap<>(); - for (ArtifactInfo artifact : artifacts) { - // for now just support upgrading to system scope artifact to save some logic in finding artifacts in - // each namespace of connections - if (artifact.getScope().equals(ArtifactScope.USER)) { - continue; - } - - Set plugins = artifact.getClasses().getPlugins(); - for (PluginClass plugin : plugins) { - // has to be connector type - if (!Connector.PLUGIN_TYPE.equalsIgnoreCase(plugin.getType())) { - continue; - } - - String name = plugin.getName(); - // has to be one of the migrating connection types - if (!CONNECTORS_PLUGINS_MAP.containsKey(name)) { - continue; - } - - String expectedArtifact = CONNECTORS_PLUGINS_MAP.get(name); - // artifact name has to match - if (!expectedArtifact.equals(artifact.getName())) { - continue; - } - - // if not latest, continue - if (connectorPlugins.containsKey(name) && comparator.compare(connectorPlugins.get(name), artifact) > 0) { - continue; - } - - PluginInfo info = new PluginInfo(name, Connector.PLUGIN_TYPE, plugin.getCategory(), Collections.emptyMap(), - new ArtifactSelectorConfig(artifact.getScope().name().toLowerCase(), - artifact.getName(), artifact.getVersion())); - connectorPlugins.put(name, artifact); - connectors.put(name, info); - } - } - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/DirectivesHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/DirectivesHandler.java deleted file mode 100644 index a73354cb0..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/DirectivesHandler.java +++ /dev/null @@ -1,1101 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.directive; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonParser; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.artifact.ArtifactInfo; -import io.cdap.cdap.api.common.Bytes; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.plugin.PluginClass; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.api.service.http.SystemHttpServiceContext; -import io.cdap.cdap.internal.io.SchemaTypeAdapter; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.PropertyIds; -import io.cdap.wrangler.RequestExtractor; -import io.cdap.wrangler.SamplingMethod; -import io.cdap.wrangler.ServiceUtils; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveConfig; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.datamodel.DataModelGlossary; -import io.cdap.wrangler.dataset.workspace.ConfigStore; -import io.cdap.wrangler.dataset.workspace.DataType; -import io.cdap.wrangler.dataset.workspace.Workspace; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.dataset.workspace.WorkspaceMeta; -import io.cdap.wrangler.parser.GrammarWalker.Visitor; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.ConflictException; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.NotFoundException; -import io.cdap.wrangler.proto.Request; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.WorkspaceIdentifier; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.proto.workspace.DataModelInfo; -import io.cdap.wrangler.proto.workspace.DirectiveArtifact; -import io.cdap.wrangler.proto.workspace.DirectiveDescriptor; -import io.cdap.wrangler.proto.workspace.DirectiveExecutionResponse; -import io.cdap.wrangler.proto.workspace.DirectiveUsage; -import io.cdap.wrangler.proto.workspace.ModelInfo; -import io.cdap.wrangler.proto.workspace.WorkspaceInfo; -import io.cdap.wrangler.proto.workspace.WorkspaceSummaryResponse; -import io.cdap.wrangler.registry.CompositeDirectiveRegistry; -import io.cdap.wrangler.registry.DirectiveInfo; -import io.cdap.wrangler.registry.DirectiveRegistry; -import io.cdap.wrangler.registry.SystemDirectiveRegistry; -import io.cdap.wrangler.registry.UserDirectiveRegistry; -import io.cdap.wrangler.utils.ObjectSerDe; -import io.cdap.wrangler.utils.ProjectInfo; -import io.cdap.wrangler.utils.RowHelper; -import io.cdap.wrangler.utils.SchemaConverter; -import org.apache.commons.lang3.StringEscapeUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.net.HttpURLConnection; -import java.nio.ByteBuffer; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; -import java.util.stream.Collectors; -import javax.ws.rs.DELETE; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - -/** - * Service for managing workspaces and also application of directives on to the workspace. - */ -@Deprecated -public class DirectivesHandler extends AbstractDirectiveHandler { - private static final Logger LOG = LoggerFactory.getLogger(DirectivesHandler.class); - private static final Gson GSON = - new GsonBuilder().registerTypeAdapter(Schema.class, new SchemaTypeAdapter()).create(); - - private static final String DATA_MODEL_PROPERTY = "dataModel"; - private static final String DATA_MODEL_REVISION_PROPERTY = "dataModelRevision"; - private static final String DATA_MODEL_MODEL_PROPERTY = "dataModelModel"; - - private DirectiveRegistry composite; - - @Override - public void initialize(SystemHttpServiceContext context) throws Exception { - super.initialize(context); - composite = new CompositeDirectiveRegistry( - SystemDirectiveRegistry.INSTANCE, - new UserDirectiveRegistry(context) - ); - } - - /** - * Closes the resources help by the composite registry. - */ - @Override - public void destroy() { - super.destroy(); - try { - composite.close(); - } catch (IOException e) { - // If something bad happens here, you might see a a lot of open file handles. - LOG.warn("Unable to close the directive registry. You might see increasing number of open file handle.", e); - } - } - - @GET - @Path("health") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void healthCheck(HttpServiceRequest request, HttpServiceResponder responder) { - responder.sendStatus(HttpURLConnection.HTTP_OK); - } - - /** - * Creates a workspace. - * - * Following is the response - * - * { - * "status" : 200, - * "message" : Successfully created workspace 'test'. - * } - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id of workspace to be created. - * @param name of workspace to be created. - */ - @PUT - @Path("contexts/{context}/workspaces/{id}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void create(HttpServiceRequest request, HttpServiceResponder responder, @PathParam("context") String namespace, - @PathParam("id") String id, @QueryParam("name") String name, - @QueryParam("scope") @DefaultValue(WorkspaceDataset.DEFAULT_SCOPE) String scope) { - respond(request, responder, namespace, ns -> { - String workspaceName = name == null || name.isEmpty() ? id : name; - - Map properties = new HashMap<>(); - properties.put(PropertyIds.NAME, workspaceName); - NamespacedId workspaceId = new NamespacedId(ns, id); - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(workspaceName) - .setScope(scope) - .setProperties(properties) - .build(); - TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - ws.writeWorkspaceMeta(workspaceId, workspaceMeta); - }); - return new ServiceResponse(String.format("Successfully created workspace '%s'", id)); - }); - } - - /** - * Lists all workspaces. - * - * Following is a response returned - * - * { - * "status" : 200, - * "message" : "Success", - * "count" : 4, - * "values" : [ - * { "id" : "ABC", "name" : "body"}, - * { "id" : "XYZ", "name" : "ws"}, - * { "id" : "123", "name" : "test"}, - * { "id" : "UVW", "name" : "foo"} - * ] - * } - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - */ - @GET - @Path("contexts/{context}/workspaces") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void list(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @QueryParam("scope") @DefaultValue("default") String scope) { - respond(request, responder, namespace, ns -> { - List workspaces = TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - return ws.listWorkspaces(ns, scope); - }); - return new ServiceResponse<>(workspaces); - }); - } - - /** - * Deletes the workspace. - * - * Following is the response - * - * { - * "status" : 200, - * "message" : Successfully deleted workspace 'test'. - * } - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id Workspace to deleted. - */ - @DELETE - @Path("contexts/{context}/workspaces/{id}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void delete(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - ws.deleteWorkspace(new NamespacedId(ns, id)); - }); - return new ServiceResponse(String.format("Successfully deleted workspace '%s'", id)); - }); - } - - /** - * Deletes the workspace. - * - * Following is the response - * - * { - * "status" : 200, - * "message" : Successfully deleted workspace 'test'. - * } - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param group Group of workspaces. - */ - @DELETE - @Path("contexts/{context}/workspaces/") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void deleteGroup(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @QueryParam("group") String group) { - respond(request, responder, namespace, ns -> { - TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - ws.deleteScope(ns, group); - }); - return new ServiceResponse(String.format("Successfully deleted workspaces within group '%s'", group)); - }); - } - - /** - * Get information about the workspace. - * - * Following is the response - * - * { - * "status" : 200, - * "message" : "Success", - * "count" : 1, - * "values" : [ - * { - * "workspace" : "data", - * "created" : 1430202202, - * "recipe" : [ - * "parse-as-csv data ,", - * "drop data" - * ], - * "properties" : { - * { "key" : "value"}, - * { "key" : "value"} - * } - * } - * ] - * } - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id Workspace to deleted. - */ - @GET - @Path("contexts/{context}/workspaces/{id}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void get(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - Workspace workspace = getWorkspace(new NamespacedId(ns, id)); - String name = workspace.getName(); - Request workspaceReq = workspace.getRequest(); - JsonObject req = new JsonObject(); - if (workspaceReq != null) { - req = (JsonObject) GSON.toJsonTree(workspaceReq); - } - Map properties = workspace.getProperties(); - JsonObject prop = (JsonObject) GSON.toJsonTree(properties); - - prop.addProperty("name", name); - prop.addProperty("id", name); - req.add("properties", merge(req.getAsJsonObject("properties"), prop)); - return new ServiceResponse<>(req); - }); - } - - /** - * Merges two {@link JsonObject} into a single object. If the keys are - * overlapping, then the second JsonObject keys will overwrite the first. - * - * @param first {@link JsonObject} - * @param second {@link JsonObject} - * @return merged {@link JsonObject} - */ - private JsonObject merge(JsonObject first, JsonObject second) { - JsonObject merged = new JsonObject(); - if (first != null && !first.isJsonNull()) { - for (Map.Entry entry: first.entrySet()) { - merged.add(entry.getKey(), entry.getValue()); - } - } - if (second != null && !second.isJsonNull()) { - for (Map.Entry entry: second.entrySet()) { - merged.add(entry.getKey(), entry.getValue()); - } - } - return merged; - } - - /** - * Upload data to the workspace, the workspace is created automatically on fly. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - */ - @POST - @Path("contexts/{context}/workspaces") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void upload(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - String name = request.getHeader(PropertyIds.FILE_NAME); - if (name == null) { - throw new BadRequestException("Name must be provided in the 'file' header"); - } - NamespacedId id = new NamespacedId(ns, ServiceUtils.generateMD5(name)); - - return TransactionRunners.run(getContext(), context -> { - // if workspace doesn't exist, then we create the workspace before - WorkspaceDataset ws = WorkspaceDataset.get(context); - // adding data to the workspace. - if (!ws.hasWorkspace(id)) { - ws.writeWorkspaceMeta(id, WorkspaceMeta.builder(name).build()); - } - - RequestExtractor handler = new RequestExtractor(request); - - // For back-ward compatibility, we check if there is delimiter specified - // using 'recorddelimiter' or 'delimiter' - String delimiter = handler.getHeader(RECORD_DELIMITER_HEADER, "\\u001A"); - delimiter = handler.getHeader(DELIMITER_HEADER, delimiter); - - // Extract charset, if not specified, default it to UTF-8. - String charset = handler.getHeader(RequestExtractor.CHARSET_HEADER, "UTF-8"); - - // Get content type - application/data-prep, application/octet-stream or text/plain. - String contentType = handler.getHeader(RequestExtractor.CONTENT_TYPE_HEADER, "application/data-prep"); - - // Extract content. - byte[] content = handler.getContent(); - if (content == null) { - throw new BadRequestException("Body not present, please post the file containing the " - + "records to be wrangled."); - } - - // Depending on content type, load data. - DataType type = DataType.fromString(contentType); - if (type == null) { - throw new BadRequestException("Invalid content type. Must be 'text/plain', 'application/octet-stream' " + - "or 'application/data-prep'"); - } - switch (type) { - case TEXT: - // Convert the type into unicode. - String body = Charset.forName(charset).decode(ByteBuffer.wrap(content)).toString(); - ws.updateWorkspaceData(id, DataType.TEXT, Bytes.toBytes(body)); - break; - - case RECORDS: - delimiter = StringEscapeUtils.unescapeJava(delimiter); - body = Charset.forName(charset).decode(ByteBuffer.wrap(content)).toString(); - List rows = new ArrayList<>(); - for (String line : body.split(delimiter)) { - rows.add(new Row(COLUMN_NAME, line)); - } - ObjectSerDe> serDe = new ObjectSerDe<>(); - byte[] bytes = serDe.toByteArray(rows); - ws.updateWorkspaceData(id, DataType.RECORDS, bytes); - break; - - case BINARY: - ws.updateWorkspaceData(id, DataType.BINARY, content); - break; - } - - // Write properties for workspace. - Map properties = new HashMap<>(); - properties.put(PropertyIds.NAME, name); - properties.put(PropertyIds.DELIMITER, delimiter); - properties.put(PropertyIds.CHARSET, charset); - properties.put(PropertyIds.CONTENT_TYPE, contentType); - properties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.UPLOAD.getType()); - ws.updateWorkspaceProperties(id, properties); - - WorkspaceInfo workspaceInfo = new WorkspaceInfo(id.getId(), name, delimiter, charset, contentType, - ConnectionType.UPLOAD.getType(), - SamplingMethod.NONE.getMethod()); - return new ServiceResponse<>(workspaceInfo); - }); - }); - } - - /** - * Upload data to the workspace. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id Upload data to the workspace. - */ - @POST - @Path("contexts/{context}/workspaces/{id}/upload") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void uploadData(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - RequestExtractor handler = new RequestExtractor(request); - - // Extract charset, if not specified, default it to UTF-8. - String charset = handler.getHeader(RequestExtractor.CHARSET_HEADER, "UTF-8"); - - // Get content type - application/data-prep, application/octet-stream or text/plain. - String contentType = handler.getHeader(RequestExtractor.CONTENT_TYPE_HEADER, "application/data-prep"); - - // Extract content. - byte[] content = handler.getContent(); - if (content == null) { - throw new BadRequestException("Body not present, please post the file containing the records to be wrangled."); - } - - // Depending on content type, load data. - DataType type = DataType.fromString(contentType); - if (type == null) { - throw new BadRequestException("Invalid content type. Must be 'text/plain', 'application/octet-stream' " + - "or 'application/data-prep'"); - } - NamespacedId namespaceId = new NamespacedId(ns, id); - - return TransactionRunners.run(getContext(), context -> { - // For back-ward compatibility, we check if there is delimiter specified - // using 'recorddelimiter' or 'delimiter' - String delimiter = handler.getHeader(RECORD_DELIMITER_HEADER, "\\u001A"); - delimiter = handler.getHeader(DELIMITER_HEADER, delimiter); - - WorkspaceDataset ws = WorkspaceDataset.get(context); - switch (type) { - case TEXT: - // Convert the type into unicode. - String body = Charset.forName(charset).decode(ByteBuffer.wrap(content)).toString(); - ws.updateWorkspaceData(namespaceId, DataType.TEXT, Bytes.toBytes(body)); - break; - - case RECORDS: - delimiter = StringEscapeUtils.unescapeJava(delimiter); - body = Charset.forName(charset).decode(ByteBuffer.wrap(content)).toString(); - List rows = new ArrayList<>(); - for (String line : body.split(delimiter)) { - rows.add(new Row(id, line)); - } - ObjectSerDe> serDe = new ObjectSerDe<>(); - byte[] bytes = serDe.toByteArray(rows); - ws.updateWorkspaceData(namespaceId, DataType.RECORDS, bytes); - break; - - case BINARY: - ws.updateWorkspaceData(namespaceId, DataType.BINARY, content); - break; - } - - // Write properties for workspace. - Map properties = new HashMap<>(); - properties.put(PropertyIds.DELIMITER, delimiter); - properties.put(PropertyIds.CHARSET, charset); - properties.put(PropertyIds.CONTENT_TYPE, contentType); - properties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.UPLOAD.getType()); - ws.updateWorkspaceProperties(namespaceId, properties); - - return new ServiceResponse(String.format("Successfully uploaded data to workspace '%s'", id)); - }); - }); - } - - /** - * Executes the directives on the record stored in the workspace. - * - * Following is the response from this request - * { - * "status" : 200, - * "message" : "Success", - * "count" : 2, - * "header" : [ "a", "b", "c", "d" ], - * "value" : [ - * { record 1}, - * { record 2} - * ] - * } - * - * @param request to gather information of the request. - * @param responder to respond to the service request. - * @param id workspace in which the directives are executed. - */ - @POST - @Path("contexts/{context}/workspaces/{id}/execute") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void execute(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - composite.reload(namespace); - try { - RequestExtractor handler = new RequestExtractor(request); - Request directiveRequest = handler.getContent("UTF-8", Request.class); - if (directiveRequest == null) { - throw new BadRequestException("Request body is empty."); - } - List directives = new ArrayList<>(directiveRequest.getRecipe().getDirectives()); - - int limit = directiveRequest.getSampling().getLimit(); - NamespacedId namespacedId = new NamespacedId(ns, id); - UserDirectivesCollector userDirectivesCollector = new UserDirectivesCollector(); - List rows = executeDirectives(namespacedId, directives, records -> { - if (records == null) { - return Collections.emptyList(); - } - int min = Math.min(records.size(), limit); - return records.subList(0, min); - }, userDirectivesCollector); - userDirectivesCollector.addLoadDirectivesPragma(directives); - - io.cdap.wrangler.proto.workspace.v2.DirectiveExecutionResponse response = - generateExecutionResponse(rows, directiveRequest.getWorkspace().getResults()); - - // Save the recipes being executed. - TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - ws.updateWorkspaceRequest(namespacedId, directiveRequest); - }); - - return new DirectiveExecutionResponse(response.getValues(), response.getHeaders(), - response.getTypes(), directives); - } catch (JsonParseException e) { - throw new BadRequestException(e.getMessage(), e); - } - }); - } - - /** - * Summarizes the workspace by running directives. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id Workspace data to be summarized. - */ - @POST - @Path("contexts/{context}/workspaces/{id}/summary") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void summary(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - try { - composite.reload(namespace); - RequestExtractor handler = new RequestExtractor(request); - Request directiveRequest = handler.getContent("UTF-8", Request.class); - if (directiveRequest == null) { - throw new BadRequestException("Request body is empty."); - } - int limit = directiveRequest.getSampling().getLimit(); - List directives = new LinkedList<>(directiveRequest.getRecipe().getDirectives()); - List rows = executeDirectives(new NamespacedId(ns, id), directives, records -> { - if (records == null) { - return Collections.emptyList(); - } - int min = Math.min(records.size(), limit); - return records.subList(0, min); - }); - - return new WorkspaceSummaryResponse(getWorkspaceSummary(rows)); - } catch (JsonParseException | DirectiveParseException e) { - throw new BadRequestException(e.getMessage(), e); - } - }); - } - - @POST - @Path("contexts/{context}/workspaces/{id}/schema") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void schema(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - composite.reload(namespace); - RequestExtractor handler = new RequestExtractor(request); - Request user = handler.getContent("UTF-8", Request.class); - if (user == null) { - throw new BadRequestException("Request body is empty."); - } - int limit = user.getSampling().getLimit(); - List directives = new LinkedList<>(user.getRecipe().getDirectives()); - List rows = executeDirectives(new NamespacedId(ns, id), directives, records -> { - if (records == null) { - return Collections.emptyList(); - } - int min = Math.min(records.size(), limit); - return records.subList(0, min); - }); - - // generate a schema based upon the first record - SchemaConverter schemaConvertor = new SchemaConverter(); - Schema schema = schemaConvertor.toSchema("record", RowHelper.createMergedRow(rows)); - if (schema.getType() != Schema.Type.RECORD) { - schema = Schema.recordOf("array", Schema.Field.of("value", schema)); - } - - String schemaJson = GSON.toJson(schema); - // the current contract with the UI is not to pass the - // entire schema string, but just the fields. - return new JsonParser().parse(schemaJson) - .getAsJsonObject() - .get("fields").getAsJsonArray(); - }); - } - - /** - * Adds a data model to workspace. There is a one-to-one mapping between workspaces and models. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id Workspace to associate a data model. - */ - @POST - @Path("contexts/{context}/workspaces/{id}/datamodels") - public void addDataModel(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - NamespacedId namespacedId = new NamespacedId(ns, id); - Workspace workspace = getWorkspace(namespacedId); - RequestExtractor handler = new RequestExtractor(request); - DataModelInfo dataModelInfo = handler.getContent("UTF-8", DataModelInfo.class); - if (dataModelInfo == null || dataModelInfo.getId() == null || dataModelInfo.getRevision() == null) { - throw new BadRequestException("request body is missing required id and revision fields."); - } - if (DataModelGlossary.getGlossary() == null) { - throw new BadRequestException("There is no data model initialized."); - } - org.apache.avro.Schema schema = DataModelGlossary.getGlossary() - .get(dataModelInfo.getId(), dataModelInfo.getRevision()); - if (schema == null) { - throw new BadRequestException(String.format("Unable to find data model %s revision %d", dataModelInfo.getId(), - dataModelInfo.getRevision())); - } - - Map properties = new HashMap<>(workspace.getProperties()); - if (properties.get(DATA_MODEL_PROPERTY) != null) { - throw new ConflictException("data model property already set"); - } - - properties.put(DATA_MODEL_PROPERTY, dataModelInfo.getId()); - properties.put(DATA_MODEL_REVISION_PROPERTY, Long.toString(dataModelInfo.getRevision())); - - // Save the properties that were added - TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - ws.updateWorkspaceProperties(namespacedId, properties); - }); - - return new ServiceResponse<>(dataModelInfo); - }); - } - - /** - * Removes a data model from a workspace. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id Workspace to disassociate a data model from. - */ - @DELETE - @Path("contexts/{context}/workspaces/{id}/datamodels") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void removeDataModel(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - NamespacedId namespacedId = new NamespacedId(ns, id); - Workspace workspace = getWorkspace(namespacedId); - Map properties = new HashMap<>(workspace.getProperties()); - properties.remove(DATA_MODEL_PROPERTY); - properties.remove(DATA_MODEL_REVISION_PROPERTY); - - // Save the properties that were added - TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - ws.updateWorkspaceProperties(namespacedId, properties); - }); - return new ServiceResponse("successfully removed the data model from the workspace"); - }); - } - - /** - * Adds a model to the workspace. There is a one-to-one mapping between workspace and model. In addition, the model - * must be a member of the data model associated with the workspace. If not, an error will be raised. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - * @param id Workspace to associated a model with. - */ - @POST - @Path("contexts/{context}/workspaces/{id}/models") - public void addModels(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - NamespacedId namespacedId = new NamespacedId(ns, id); - Workspace workspace = getWorkspace(namespacedId); - RequestExtractor handler = new RequestExtractor(request); - ModelInfo model = handler.getContent("UTF-8", ModelInfo.class); - if (model == null || model.getId() == null) { - throw new BadRequestException("request body is empty."); - } - - Map properties = new HashMap<>(workspace.getProperties()); - long revision; - try { - revision = Long.parseLong(properties.get(DATA_MODEL_REVISION_PROPERTY)); - } catch (NumberFormatException e) { - revision = DataModelInfo.INVALID_REVISION; - } - DataModelInfo dataModelInfo = new DataModelInfo(properties.get(DATA_MODEL_PROPERTY), revision); - if (dataModelInfo.getId() == null || dataModelInfo.getRevision().equals(DataModelInfo.INVALID_REVISION)) { - throw new BadRequestException("data model or data model revision properties has not been set."); - } - - if (properties.get(DATA_MODEL_MODEL_PROPERTY) != null) { - throw new ConflictException("model property already set."); - } - - if (DataModelGlossary.getGlossary() == null) { - throw new BadRequestException("There is no data model initialized."); - } - org.apache.avro.Schema schema = DataModelGlossary.getGlossary() - .get(dataModelInfo.getId(), dataModelInfo.getRevision()); - List fieldMatch = schema.getFields().stream() - .filter(field -> field.name().equals(model.getId())) - .collect(Collectors.toList()); - if (fieldMatch.isEmpty()) { - throw new NotFoundException( - String.format("Unable to find model %s in data model %s revision %d.", model.getId(), dataModelInfo.getId(), - dataModelInfo.getRevision())); - } - - properties.put(DATA_MODEL_MODEL_PROPERTY, model.getId()); - - // Save the properties that were added - TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - ws.updateWorkspaceProperties(namespacedId, properties); - }); - - return new ServiceResponse<>(dataModelInfo); - }); - } - - /** - * - */ - @DELETE - @Path("contexts/{context}/workspaces/{id}/models/{modelid}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void removeModels(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id, - @PathParam("modelid") String modelId) { - respond(request, responder, namespace, ns -> { - NamespacedId namespacedId = new NamespacedId(ns, id); - Workspace workspace = getWorkspace(namespacedId); - Map properties = new HashMap<>(workspace.getProperties()); - if (properties.containsKey(DATA_MODEL_MODEL_PROPERTY)) { - if (!modelId.equals(properties.get(DATA_MODEL_MODEL_PROPERTY))) { - throw new NotFoundException(String.format("model %s is not a property of the workspace.", modelId)); - } - properties.remove(DATA_MODEL_MODEL_PROPERTY); - - // Save the properties that were added - TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - ws.updateWorkspaceProperties(namespacedId, properties); - }); - } - return new ServiceResponse("successfully removed the data model from the workspace"); - }); - } - - /** - * Generates the capability matrix, with versions and build number. - * - * @param request Handler for incoming request. - * @param responder Responder for data going out. - */ - @GET - @Path("info") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void capabilities(HttpServiceRequest request, HttpServiceResponder responder) { - respond(request, responder, () -> new ServiceResponse<>(ProjectInfo.getProperties())); - } - - /** - * This REST API returns an array of all the directives, their usage and description. - * - * Following is the response of this call. - * { - * "status": "OK", - * "message": "Success", - * "count" : 10, - * "values" : [ - * { - * "directive" : "parse-as-csv", - * "usage" : "parse-as-csv ", - * "description" : "Parses as CSV ..." - * }, - * ... - * ] - * } - * @param request to gather information of the request. - * @param responder to respond to the service request. - */ - @GET - @Path("contexts/{context}/usage") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void usage(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - // CDAP-15397 - reload must be called before it can be safely used - composite.reload(namespace); - DirectiveConfig config = TransactionRunners.run(getContext(), context -> { - ConfigStore store = ConfigStore.get(context); - return store.getConfig(); - }); - Map> aliases = config.getReverseAlias(); - List values = new ArrayList<>(); - - for (DirectiveInfo directive : composite.list(namespace)) { - DirectiveUsage directiveUsage = new DirectiveUsage(directive.name(), directive.usage(), directive.description(), - config.isExcluded(directive.name()), false, - directive.scope().name(), directive.definition(), - directive.categories()); - values.add(directiveUsage); - - // For this directive we find all aliases and add them to the - // description. - if (aliases.containsKey(directive.name())) { - List list = aliases.get(directive.name()); - for (String alias : list) { - directiveUsage = new DirectiveUsage(alias, directive.usage(), directive.description(), - config.isExcluded(directive.name()), true, - directive.scope().name(), directive.definition(), - directive.categories()); - values.add(directiveUsage); - } - } - } - - return new ServiceResponse<>(values); - }); - } - - /** - * This HTTP endpoint is used to retrieve artifacts that include plugins - * of type Directive.Type (directive). Artifact will be reported - * if it atleast has one plugin that is of type "directive". - */ - @GET - @Path("contexts/{context}/artifacts") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void artifacts(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - List values = new ArrayList<>(); - List artifacts = getContext().listArtifacts(namespace); - for (ArtifactInfo artifact : artifacts) { - Set plugins = artifact.getClasses().getPlugins(); - for (PluginClass plugin : plugins) { - if (Directive.TYPE.equalsIgnoreCase(plugin.getType())) { - values.add(new DirectiveArtifact(artifact)); - break; - } - } - } - return new ServiceResponse<>(values); - }); - } - /** - * This HTTP endpoint is used to retrieve plugins that are - * of type Directive.Type (directive). Artifact will be reported - * if it atleast has one plugin that is of type "directive". - * - * TODO: (CDAP-14694) Doesn't look like this should exist. Why wasn't the CDAP endpoint used? - */ - @GET - @Path("contexts/{context}/directives") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void directives(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - List values = new ArrayList<>(); - List artifacts = getContext().listArtifacts(namespace); - for (ArtifactInfo artifact : artifacts) { - Set plugins = artifact.getClasses().getPlugins(); - DirectiveArtifact directiveArtifact = - new DirectiveArtifact(artifact.getName(), artifact.getVersion(), artifact.getScope().name()); - for (PluginClass plugin : plugins) { - if (Directive.TYPE.equalsIgnoreCase(plugin.getType())) { - values.add(new DirectiveDescriptor(plugin, directiveArtifact)); - } - } - } - return new ServiceResponse<>(values); - }); - } - - /** - * This HTTP endpoint is used to reload the plugins that are - * of type Directive.Type (directive). Artifact will be reported - * if it atleast has one plugin that is of type "directive". - */ - @GET - @Path("contexts/{context}/directives/reload") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void directivesReload(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - composite.reload(namespace); - return new ServiceResponse("Successfully reloaded all user defined directives."); - }); - } - - /** - * Extracts the charsets supported. - * - * @param request to gather information of the request. - * @param responder to respond to the service request. - */ - @GET - @Path("charsets") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void charsets(HttpServiceRequest request, HttpServiceResponder responder) { - respond(request, responder, () -> new ServiceResponse<>(Charset.availableCharsets().keySet())); - } - - /** - * Updates the configuration. - * - * @param request to gather information of the request. - * @param responder to respond to the service request. - */ - @POST - @Path("config") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void uploadConfig(HttpServiceRequest request, HttpServiceResponder responder) { - respond(request, responder, () -> { - // Read the request body - RequestExtractor handler = new RequestExtractor(request); - DirectiveConfig config = handler.getContent("UTF-8", DirectiveConfig.class); - if (config == null) { - throw new BadRequestException("Config is empty. Please check if the request is sent as HTTP POST body."); - } - TransactionRunners.run(getContext(), context -> { - ConfigStore configStore = ConfigStore.get(context); - configStore.updateConfig(config); - }); - return new ServiceResponse("Successfully updated configuration."); - }); - } - - /** - * Updates the configuration. - * - * @param request to gather information of the request. - * @param responder to respond to the service request. - */ - @GET - @Path("config") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void getConfig(HttpServiceRequest request, HttpServiceResponder responder) { - respond(request, responder, () -> TransactionRunners.run(getContext(), context -> { - ConfigStore configStore = ConfigStore.get(context); - return new ServiceResponse<>(configStore.getConfig()); - })); - } - - /** - * Converts the data in workspace into records. - * - * @param workspace the workspace to get records from - * @return list of records. - */ - public static List fromWorkspace(Workspace workspace) throws IOException, ClassNotFoundException { - DataType type = workspace.getType(); - List rows = new ArrayList<>(); - - switch(type) { - case TEXT: { - String data = Bytes.toString(workspace.getData()); - if (data != null) { - rows.add(new Row("body", data)); - } - break; - } - - case BINARY: { - byte[] data = workspace.getData(); - if (data != null) { - rows.add(new Row("body", data)); - } - break; - } - - case RECORDS: { - if (workspace.getData() != null) { - try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(workspace.getData()))) { - rows = (List) ois.readObject(); - } - } - break; - } - } - return rows; - } - - /** - * Executes directives by extracting them from request. - * - * @param id data to be used for executing directives. - * @param directives the list of directives to execute - * @param sample sampling function. - * @return records generated from the directives. - */ - private List executeDirectives(NamespacedId id, List directives, - Function, List> sample) { - return executeDirectives(id, directives, sample, (a, b) -> { }); - } - - /** - * Executes directives by extracting them from request. - * - * @param id data to be used for executing directives. - * @param directives the list of directives to execute - * @param sample sampling function. - * @param grammarVisitor visitor to call while parsing directives - * @return records generated from the directives. - */ - private List executeDirectives(NamespacedId id, List directives, - Function, List> sample, - Visitor grammarVisitor) { - return TransactionRunners.run(getContext(), ctx -> { - WorkspaceDataset ws = WorkspaceDataset.get(ctx); - - Workspace workspace = ws.getWorkspace(id); - // Extract rows from the workspace. - List rows = fromWorkspace(workspace); - return executeDirectives(id.getNamespace().getName(), directives, sample.apply(rows), - grammarVisitor); - }); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/RecipeHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/RecipeHandler.java deleted file mode 100644 index 584e803ab..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/RecipeHandler.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.directive; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.metrics.Metrics; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.api.service.http.SystemHttpServiceContext; -import io.cdap.cdap.internal.io.SchemaTypeAdapter; -import io.cdap.wrangler.dataset.recipe.RecipePageRequest; -import io.cdap.wrangler.dataset.recipe.RecipeRow; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.recipe.v2.Recipe; -import io.cdap.wrangler.proto.recipe.v2.RecipeCreationRequest; -import io.cdap.wrangler.proto.recipe.v2.RecipeId; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; -import io.cdap.wrangler.store.recipe.RecipeStore; - -import java.net.HttpURLConnection; -import java.nio.charset.StandardCharsets; -import java.util.List; -import java.util.regex.Pattern; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - -/** - * v2 endpoints for recipe - */ -public class RecipeHandler extends AbstractWranglerHandler { - private static final Gson GSON = - new GsonBuilder().registerTypeAdapter(Schema.class, new SchemaTypeAdapter()).create(); - private static final Pattern RECIPE_NAME_PATTERN = Pattern.compile("[a-zA-Z0-9 ]*"); - - private RecipeStore recipeStore; - - // Injected by CDAP - @SuppressWarnings("unused") - private Metrics metrics; - - private static final String NUMBER_RECIPE_SAVED_METRIC = "recipe.saved"; - - @Override - public void initialize(SystemHttpServiceContext context) throws Exception { - super.initialize(context); - recipeStore = new RecipeStore(context); - } - - @POST - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/recipes") - public void createRecipe(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(responder, namespace, ns -> { - RecipeId recipeId = RecipeId.builder(ns).build(); - Recipe recipe = buildRecipeFromRequest(request, recipeId); - recipeStore.createRecipe(recipeId, RecipeRow.builder(recipe).build()); - metrics.gauge(NUMBER_RECIPE_SAVED_METRIC, recipe.getDirectives().size()); - responder.sendJson(recipe); - }); - } - - @GET - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/recipes/id/{recipe-id}") - public void getRecipeById(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("recipe-id") String recipeId) { - respond(responder, namespace, ns -> { - RecipeId id = RecipeId.builder(ns).setRecipeId(recipeId).build(); - responder.sendJson(recipeStore.getRecipeById(id)); - }); - } - - @GET - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/recipes/name/{recipe-name}") - public void getRecipeByName(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("recipe-name") String recipeName) { - respond(responder, namespace, ns -> { - responder.sendJson(recipeStore.getRecipeByName(ns, recipeName)); - }); - } - - @GET - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/recipes") - public void listRecipes(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @QueryParam("pageSize") Integer pageSize, - @QueryParam("pageToken") String pageToken, - @QueryParam("sortBy")String sortBy, - @QueryParam("sortOrder") String sortOrder) { - respond(responder, namespace, ns -> { - RecipePageRequest pageRequest = RecipePageRequest.builder(ns) - .setPageSize(pageSize) - .setPageToken(pageToken) - .setSortBy(sortBy) - .setSortOrder(sortOrder) - .build(); - responder.sendJson(recipeStore.listRecipes(pageRequest)); - }); - } - - @DELETE - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/recipes/id/{recipe-id}") - public void deleteRecipe(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("recipe-id") String recipeId) { - respond(responder, namespace, ns-> { - recipeStore.deleteRecipe(RecipeId.builder(ns).setRecipeId(recipeId).build()); - responder.sendStatus(HttpURLConnection.HTTP_OK); - }); - } - - @PUT - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/recipes/id/{recipe-id}") - public void updateRecipe(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("recipe-id") String recipeIdString) { - respond(responder, namespace, ns-> { - RecipeId recipeId = RecipeId.builder(ns).setRecipeId(recipeIdString).build(); - Recipe recipe = buildRecipeFromRequest(request, recipeId); - recipeStore.updateRecipe(recipeId, RecipeRow.builder(recipe).build()); - responder.sendStatus(HttpURLConnection.HTTP_OK); - }); - } - - private void validateRecipeRequest(Recipe recipe) { - if (recipe == null) { - throw new BadRequestException("Request is empty"); - } - if (recipe.getRecipeName() == null) { - throw new BadRequestException("No name was specified for the Recipe"); - } - if (recipe.getDescription() == null) { - throw new BadRequestException("No description was specified for the Recipe"); - } - if (recipe.getDirectives() == null || recipe.getDirectives().size() == 0) { - throw new BadRequestException("No directives were specified for the Recipe"); - } - if (!RECIPE_NAME_PATTERN.matcher(recipe.getRecipeName()).matches()) { - throw new BadRequestException("Recipe name should contain only alphanumeric characters or spaces"); - } - } - - private Recipe buildRecipeFromRequest(HttpServiceRequest request, RecipeId recipeId) { - RecipeCreationRequest creationRequest = GSON.fromJson( - StandardCharsets.UTF_8.decode(request.getContent()).toString(), RecipeCreationRequest.class); - List directives = creationRequest.getDirectives(); - long now = System.currentTimeMillis(); - - Recipe recipe = Recipe.builder(recipeId) - .setRecipeName(creationRequest.getRecipeName()) - .setDescription(creationRequest.getDescription()) - .setCreatedTimeMillis(now) - .setUpdatedTimeMillis(now) - .setDirectives(directives) - .setRecipeStepsCount(directives.size()) - .build(); - validateRecipeRequest(recipe); - return recipe; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/RemoteDirectiveRequest.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/RemoteDirectiveRequest.java deleted file mode 100644 index d3e6d959f..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/RemoteDirectiveRequest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.service.directive; - -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.wrangler.parser.DirectiveClass; - -import java.util.HashMap; -import java.util.Map; - -/** - * Request for remote execution of directives - */ -public class RemoteDirectiveRequest { - - private final String recipe; - private final Map systemDirectives; - private final String pluginNameSpace; - private final byte[] data; - private final Schema inputSchema; - - RemoteDirectiveRequest(String recipe, Map systemDirectives, - String pluginNameSpace, byte[] data, Schema inputSchema) { - this.recipe = recipe; - this.systemDirectives = new HashMap<>(systemDirectives); - this.pluginNameSpace = pluginNameSpace; - this.data = data; - this.inputSchema = inputSchema; - } - - public String getRecipe() { - return recipe; - } - - public Map getSystemDirectives() { - return systemDirectives; - } - - public byte[] getData() { - return data; - } - - public String getPluginNameSpace() { - return pluginNameSpace; - } - - public Schema getInputSchema() { - return inputSchema; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/RemoteExecutionTask.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/RemoteExecutionTask.java deleted file mode 100644 index a8f4e22f7..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/RemoteExecutionTask.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.service.directive; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.service.worker.RunnableTask; -import io.cdap.cdap.api.service.worker.RunnableTaskContext; -import io.cdap.cdap.api.service.worker.SystemAppTaskContext; -import io.cdap.cdap.features.Feature; -import io.cdap.cdap.internal.io.SchemaTypeAdapter; -import io.cdap.directives.aggregates.DefaultTransientStore; -import io.cdap.wrangler.api.Arguments; -import io.cdap.wrangler.api.CompileException; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveConfig; -import io.cdap.wrangler.api.DirectiveLoadException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.ErrorRecordBase; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.RemoteDirectiveResponse; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.TransientStore; -import io.cdap.wrangler.api.TransientVariableScope; -import io.cdap.wrangler.api.parser.UsageDefinition; -import io.cdap.wrangler.executor.RecipePipelineExecutor; -import io.cdap.wrangler.expression.EL; -import io.cdap.wrangler.parser.ConfigDirectiveContext; -import io.cdap.wrangler.parser.DirectiveClass; -import io.cdap.wrangler.parser.GrammarWalker; -import io.cdap.wrangler.parser.MapArguments; -import io.cdap.wrangler.parser.RecipeCompiler; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.ErrorRecordsException; -import io.cdap.wrangler.registry.DirectiveInfo; -import io.cdap.wrangler.registry.UserDirectiveRegistry; -import io.cdap.wrangler.utils.KryoSerializer; -import io.cdap.wrangler.utils.ObjectSerDe; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; - -import static io.cdap.wrangler.schema.TransientStoreKeys.INPUT_SCHEMA; -import static io.cdap.wrangler.schema.TransientStoreKeys.OUTPUT_SCHEMA; - -/** - * Task for remote execution of directives - */ -public class RemoteExecutionTask implements RunnableTask { - - private static final Gson GSON = new GsonBuilder() - .registerTypeAdapter(Schema.class, new SchemaTypeAdapter()) - .create(); - - @Override - public void run(RunnableTaskContext runnableTaskContext) throws Exception { - RemoteDirectiveRequest directiveRequest = GSON.fromJson(runnableTaskContext.getParam(), - RemoteDirectiveRequest.class); - - SystemAppTaskContext systemAppContext = runnableTaskContext.getRunnableTaskSystemAppContext(); - String namespace = directiveRequest.getPluginNameSpace(); - Map systemDirectives = directiveRequest.getSystemDirectives(); - AtomicBoolean hasUDD = new AtomicBoolean(); - - // Collect directives. - try (UserDirectiveRegistry userDirectiveRegistry = new UserDirectiveRegistry(systemAppContext)) { - List directives = new ArrayList<>(); - GrammarWalker walker = new GrammarWalker(new RecipeCompiler(), new ConfigDirectiveContext(DirectiveConfig.EMPTY)); - walker.walk(directiveRequest.getRecipe(), (command, tokenGroup) -> { - DirectiveInfo info; - DirectiveClass directiveClass = systemDirectives.get(command); - if (directiveClass == null) { - info = userDirectiveRegistry.get(namespace, command); - hasUDD.set(true); - } else { - // For system directives, we can load it directly from the classloader. - try { - info = DirectiveInfo.fromSystem((Class) Class.forName(directiveClass.getClassName())); - } catch (ClassNotFoundException e) { - throw new DirectiveLoadException("Failed to load system directive " + directiveClass.getName(), e); - } - } - - Directive directive = info.instance(); - UsageDefinition definition = directive.define(); - Arguments arguments = new MapArguments(definition, tokenGroup); - directive.initialize(arguments); - directives.add(directive); - }); - - // If there is no directives, there is nothing to execute - if (directives.isEmpty()) { - runnableTaskContext.writeResult(directiveRequest.getData()); - return; - } - - ObjectSerDe> objectSerDe = new ObjectSerDe<>(); - List rows = objectSerDe.toObject(directiveRequest.getData()); - - Schema inputSchema = directiveRequest.getInputSchema(); - TransientStore transientStore = new DefaultTransientStore(); - if (inputSchema != null) { - transientStore.set(TransientVariableScope.GLOBAL, INPUT_SCHEMA, inputSchema); - } - - try (RecipePipelineExecutor executor = new RecipePipelineExecutor(() -> directives, - new ServicePipelineContext( - namespace, - ExecutorContext.Environment.SERVICE, - systemAppContext, - transientStore))) { - rows = executor.execute(rows); - List errors = executor.errors().stream() - .filter(ErrorRecordBase::isShownInWrangler) - .collect(Collectors.toList()); - - if (!errors.isEmpty()) { - throw new ErrorRecordsException(errors); - } - } catch (RecipeException e) { - throw new BadRequestException(e.getMessage(), e); - } - - Schema outputSchema = transientStore.get(OUTPUT_SCHEMA); - RemoteDirectiveResponse response = new RemoteDirectiveResponse(rows, outputSchema); - ObjectSerDe responseSerDe = new ObjectSerDe<>(); - - runnableTaskContext.setTerminateOnComplete(hasUDD.get() || EL.isUsed()); - - if (Feature.WRANGLER_KRYO_SERIALIZATION.isEnabled(systemAppContext)) { - runnableTaskContext.writeResult(new KryoSerializer().fromRemoteDirectiveResponse(response)); - } else { - runnableTaskContext.writeResult(responseSerDe.toByteArray(response)); - } - } catch (DirectiveParseException | ClassNotFoundException | CompileException e) { - throw new BadRequestException(e.getMessage(), e); - } - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ServicePipelineContext.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ServicePipelineContext.java deleted file mode 100644 index e76ad6896..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/ServicePipelineContext.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.directive; - -import io.cdap.cdap.api.service.http.HttpServiceContext; -import io.cdap.cdap.api.service.worker.SystemAppTaskContext; -import io.cdap.cdap.etl.api.Lookup; -import io.cdap.cdap.etl.api.StageMetrics; -import io.cdap.cdap.etl.common.DatasetContextLookupProvider; -import io.cdap.cdap.etl.common.NoopMetrics; -import io.cdap.cdap.features.Feature; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.TransientStore; - -import java.net.URL; -import java.util.Collections; -import java.util.Map; -import javax.annotation.Nullable; - -/** - * Implementation of {@PipelineContext}, for use in Service. - */ -class ServicePipelineContext implements ExecutorContext { - // this is different than serviceContext.getNamespace(), as it's the namespace of the workspace, not the namespace - // that we're executing in - private final String namespace; - private final Environment environment; - @Nullable - private final HttpServiceContext serviceContext; - private final DatasetContextLookupProvider lookupProvider; - private final TransientStore store; - @Nullable - private final SystemAppTaskContext systemAppTaskContext; - - ServicePipelineContext(String namespace, Environment environment, HttpServiceContext serviceContext, - TransientStore store) { - this(namespace, environment, serviceContext, null, store); - } - - ServicePipelineContext(String namespace, Environment environment, SystemAppTaskContext systemAppTaskContext, - TransientStore store) { - this(namespace, environment, null, systemAppTaskContext, store); - } - - private ServicePipelineContext(String namespace, Environment environment, - @Nullable HttpServiceContext serviceContext, - @Nullable SystemAppTaskContext systemAppTaskContext, - TransientStore store) { - this.namespace = namespace; - this.environment = environment; - this.serviceContext = serviceContext; - this.systemAppTaskContext = systemAppTaskContext; - this.lookupProvider = new DatasetContextLookupProvider(serviceContext); - this.store = store; - } - - @Override - public String getNamespace() { - return namespace; - } - - /** - * @return Environment this context is prepared for. - */ - @Override - public Environment getEnvironment() { - return environment; - } - - /** - * @return Measurements handler. - */ - @Override - public StageMetrics getMetrics() { - return NoopMetrics.INSTANCE; - } - - /** - * @return Context name. - */ - @Override - public String getContextName() { - if (systemAppTaskContext != null) { - return systemAppTaskContext.getServiceName(); - } - return serviceContext.getSpecification().getName(); - } - - /** - * @return - */ - @Override - public Map getProperties() { - return Collections.emptyMap(); - } - - /** - * Returns a valid service url. - * - * @param applicationId id of the application to which a service url. - * @param serviceId id of the service within application. - * @return URL if service exists, else null. - */ - @Override - public URL getService(String applicationId, String serviceId) { - if (systemAppTaskContext != null) { - return systemAppTaskContext.getServiceURL(applicationId, serviceId); - } - return serviceContext.getServiceURL(applicationId, serviceId); - } - - @Override - public TransientStore getTransientStore() { - return store; - } - - /** - * @return Properties associated with run and pipeline. - */ - @Override - public Lookup provide(String s, Map map) { - return lookupProvider.provide(s, map); - } - - @Override - public boolean isSchemaManagementEnabled() { - if (systemAppTaskContext != null) { - return Feature.WRANGLER_SCHEMA_MANAGEMENT.isEnabled(systemAppTaskContext); - } - return Feature.WRANGLER_SCHEMA_MANAGEMENT.isEnabled(serviceContext); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/SpecificationUpgradeUtils.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/SpecificationUpgradeUtils.java deleted file mode 100644 index e7c707b1e..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/SpecificationUpgradeUtils.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.service.directive; - -import io.cdap.wrangler.dataset.workspace.Workspace; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.service.bigquery.BigQueryHandler; -import io.cdap.wrangler.service.database.DatabaseHandler; -import io.cdap.wrangler.service.gcs.GCSHandler; -import io.cdap.wrangler.service.kafka.KafkaHandler; -import io.cdap.wrangler.service.s3.S3Handler; -import io.cdap.wrangler.service.spanner.SpannerHandler; - -import java.util.Map; -import javax.annotation.Nullable; - -/** - * Specification util specifically needed for upgrade. Can be used to generate the spec that is known by the - * connector/source or generate path. This class is mostly hardcoding and should be removed once we remove the - * deprecated handlers. - */ -public class SpecificationUpgradeUtils { - - private SpecificationUpgradeUtils() { - } - - /** - * Method to retrieve the spec that is known to connector/source, this is needed because the connection type handlers - * sometimes use a different config name for property, need to have this method to generate the connector properties - * in order for the new connection to use. - * - * @param connectionType the connection type to check - * @param properties properties to retrieve connector/source properties - * @return properties that can be used by connector - */ - public static Map getConnectorProperties(ConnectionType connectionType, - Map properties) { - if (!ConnectionType.CONN_UPGRADABLE_TYPES.contains(connectionType)) { - return properties; - } - - switch (connectionType) { - case BIGQUERY: - return BigQueryHandler.getConnectorProperties(properties); - case GCS: - return GCSHandler.getConnectorProperties(properties); - case SPANNER: - return SpannerHandler.getConnectorProperties(properties); - case S3: - return S3Handler.getConnectorProperties(properties); - case DATABASE: - return DatabaseHandler.getConnectorProperties(properties); - case KAFKA: - return KafkaHandler.getConnectorProperties(properties); - default: - return properties; - } - } - - /** - * Get a connector path from the v1 workspace - * - * @param connectionType connectionType of the workspace - * @param workspace the v1 workspace information - * @return a connector path, null if the connection type cannot be upgraded to a new connection - */ - @Nullable - public static String getPath(ConnectionType connectionType, Workspace workspace) { - if (!ConnectionType.CONN_UPGRADABLE_TYPES.contains(connectionType)) { - return null; - } - - switch (connectionType) { - case BIGQUERY: - return BigQueryHandler.getPath(workspace); - case GCS: - return GCSHandler.getPath(workspace); - case SPANNER: - return SpannerHandler.getPath(workspace); - case S3: - return S3Handler.getPath(workspace); - case DATABASE: - return DatabaseHandler.getPath(workspace); - case KAFKA: - return KafkaHandler.getPath(workspace); - default: - return null; - } - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/UserDirectivesCollector.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/UserDirectivesCollector.java deleted file mode 100644 index f202b2c14..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/UserDirectivesCollector.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.service.directive; - -import io.cdap.wrangler.api.TokenGroup; -import io.cdap.wrangler.parser.GrammarWalker; -import io.cdap.wrangler.registry.DirectiveInfo; -import io.cdap.wrangler.registry.SystemDirectiveRegistry; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; - -/** - * This Visitor collects user directives and helps to add #pragma directive to load them to the - * script - */ -public class UserDirectivesCollector implements GrammarWalker.Visitor { - private static final Set userDirectives = new LinkedHashSet<>(); - - @Override - public void visit(String command, TokenGroup tokenGroup) { - DirectiveInfo info = SystemDirectiveRegistry.INSTANCE.get(command); - if (info == null) { - userDirectives.add(command); - } - } - - /** - * If any user directives was found, adds load-directives pragma as the first command. - */ - public void addLoadDirectivesPragma(List directives) { - if (!userDirectives.isEmpty()) { - directives.add(0, "#pragma load-directives " + String.join(",", userDirectives) + ";"); - } - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/WorkspaceHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/WorkspaceHandler.java deleted file mode 100644 index 43ffc3664..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/WorkspaceHandler.java +++ /dev/null @@ -1,655 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.service.directive; - -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableMap; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.JsonParser; -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.artifact.ArtifactSummary; -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.metrics.Metrics; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.api.service.http.SystemHttpServiceContext; -import io.cdap.cdap.api.service.worker.RunnableTaskRequest; -import io.cdap.cdap.etl.api.connector.SampleRequest; -import io.cdap.cdap.etl.common.Constants; -import io.cdap.cdap.etl.proto.ArtifactSelectorConfig; -import io.cdap.cdap.etl.proto.connection.ConnectorDetail; -import io.cdap.cdap.etl.proto.connection.SampleResponse; -import io.cdap.cdap.features.Feature; -import io.cdap.cdap.internal.io.SchemaTypeAdapter; -import io.cdap.cdap.proto.id.NamespaceId; -import io.cdap.wrangler.PropertyIds; -import io.cdap.wrangler.RequestExtractor; -import io.cdap.wrangler.api.DirectiveConfig; -import io.cdap.wrangler.api.DirectiveLoadException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.GrammarMigrator; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.RemoteDirectiveResponse; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.TransientVariableScope; -import io.cdap.wrangler.parser.ConfigDirectiveContext; -import io.cdap.wrangler.parser.DirectiveClass; -import io.cdap.wrangler.parser.GrammarWalker; -import io.cdap.wrangler.parser.MigrateToV2; -import io.cdap.wrangler.parser.RecipeCompiler; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.recipe.v2.Recipe; -import io.cdap.wrangler.proto.recipe.v2.RecipeId; -import io.cdap.wrangler.proto.workspace.v2.Artifact; -import io.cdap.wrangler.proto.workspace.v2.DirectiveExecutionRequest; -import io.cdap.wrangler.proto.workspace.v2.DirectiveExecutionResponse; -import io.cdap.wrangler.proto.workspace.v2.DirectiveUsage; -import io.cdap.wrangler.proto.workspace.v2.Plugin; -import io.cdap.wrangler.proto.workspace.v2.SampleSpec; -import io.cdap.wrangler.proto.workspace.v2.ServiceResponse; -import io.cdap.wrangler.proto.workspace.v2.StageSpec; -import io.cdap.wrangler.proto.workspace.v2.Workspace; -import io.cdap.wrangler.proto.workspace.v2.WorkspaceCreationRequest; -import io.cdap.wrangler.proto.workspace.v2.WorkspaceDetail; -import io.cdap.wrangler.proto.workspace.v2.WorkspaceId; -import io.cdap.wrangler.proto.workspace.v2.WorkspaceSpec; -import io.cdap.wrangler.proto.workspace.v2.WorkspaceUpdateRequest; -import io.cdap.wrangler.registry.DirectiveInfo; -import io.cdap.wrangler.registry.SystemDirectiveRegistry; -import io.cdap.wrangler.schema.TransientStoreKeys; -import io.cdap.wrangler.store.recipe.RecipeStore; -import io.cdap.wrangler.store.workspace.WorkspaceStore; -import io.cdap.wrangler.utils.KryoSerializer; -import io.cdap.wrangler.utils.ObjectSerDe; -import io.cdap.wrangler.utils.RowHelper; -import io.cdap.wrangler.utils.SchemaConverter; -import io.cdap.wrangler.utils.StructuredToRowTransformer; -import org.apache.commons.lang3.StringEscapeUtils; - -import java.net.HttpURLConnection; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import javax.annotation.Nullable; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; - -import static io.cdap.wrangler.schema.TransientStoreKeys.INPUT_SCHEMA; -import static io.cdap.wrangler.schema.TransientStoreKeys.OUTPUT_SCHEMA; - -/** - * V2 endpoints for workspace - */ -public class WorkspaceHandler extends AbstractDirectiveHandler { - - private static final Gson GSON = - new GsonBuilder().registerTypeAdapter(Schema.class, new SchemaTypeAdapter()).create(); - private static final Pattern PRAGMA_PATTERN = Pattern.compile("^\\s*#pragma\\s+load-directives\\s+"); - private static final String UPLOAD_COUNT = "upload.file.count"; - private static final String CONNECTION_TYPE = "upload"; - - private WorkspaceStore wsStore; - private RecipeStore recipeStore; - private ConnectionDiscoverer discoverer; - - // Injected by CDAP - @SuppressWarnings("unused") - private Metrics metrics; - - @Override - public void initialize(SystemHttpServiceContext context) throws Exception { - super.initialize(context); - wsStore = new WorkspaceStore(context); - recipeStore = new RecipeStore(context); - discoverer = new ConnectionDiscoverer(context); - } - - @POST - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/workspaces") - public void createWorkspace(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(responder, namespace, ns -> { - if (ns.getName().equalsIgnoreCase(NamespaceId.SYSTEM.getNamespace())) { - throw new BadRequestException("Creating workspace in system namespace is currently not supported"); - } - - WorkspaceCreationRequest creationRequest = - GSON.fromJson(StandardCharsets.UTF_8.decode(request.getContent()).toString(), WorkspaceCreationRequest.class); - - if (creationRequest.getConnection() == null) { - throw new BadRequestException("Connection name has to be provided to create a workspace"); - } - - SampleRequest sampleRequest = creationRequest.getSampleRequest(); - if (sampleRequest == null) { - throw new BadRequestException("Sample request has to be provided to create a workspace"); - } - - SampleResponse sampleResponse = discoverer.retrieveSample(namespace, creationRequest.getConnection(), - sampleRequest); - List rows = getSample(sampleResponse); - - ConnectorDetail detail = sampleResponse.getDetail(); - SampleSpec spec = new SampleSpec( - creationRequest.getConnection(), creationRequest.getConnectionType(), sampleRequest.getPath(), - detail.getRelatedPlugins().stream().map(plugin -> { - ArtifactSelectorConfig artifact = plugin.getArtifact(); - Plugin pluginSpec = new Plugin( - plugin.getName(), plugin.getType(), plugin.getProperties(), - new Artifact(artifact.getName(), artifact.getVersion(), artifact.getScope())); - return new StageSpec(plugin.getSchema(), pluginSpec); - }).collect(Collectors.toSet()), detail.getSupportedSampleTypes(), sampleRequest); - - WorkspaceId wsId = new WorkspaceId(ns); - long now = System.currentTimeMillis(); - Workspace workspace = Workspace.builder(generateWorkspaceName(wsId, creationRequest.getSampleRequest().getPath()), - wsId.getWorkspaceId()) - .setCreatedTimeMillis(now).setUpdatedTimeMillis(now).setSampleSpec(spec).build(); - wsStore.saveWorkspace(wsId, new WorkspaceDetail(workspace, rows)); - responder.sendJson(wsId.getWorkspaceId()); - }); - } - - @GET - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/workspaces") - public void listWorkspaces(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(responder, namespace, ns -> { - if (ns.getName().equalsIgnoreCase(NamespaceId.SYSTEM.getNamespace())) { - throw new BadRequestException("Listing workspaces in system namespace is currently not supported"); - } - responder.sendString(GSON.toJson(new ServiceResponse<>(wsStore.listWorkspaces(ns)))); - }); - } - - @GET - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/workspaces/{id}") - public void getWorkspace(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("id") String workspaceId) { - respond(responder, namespace, ns -> { - if (ns.getName().equalsIgnoreCase(NamespaceId.SYSTEM.getNamespace())) { - throw new BadRequestException("Getting workspace in system namespace is currently not supported"); - } - responder.sendString(GSON.toJson(wsStore.getWorkspace(new WorkspaceId(ns, workspaceId)))); - }); - } - - /** - * Update the workspace's directives and initiatives - */ - @POST - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/workspaces/{id}") - public void updateWorkspace(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("id") String workspaceId) { - respond(responder, namespace, ns -> { - if (ns.getName().equalsIgnoreCase(NamespaceId.SYSTEM.getNamespace())) { - throw new BadRequestException("Updating workspace in system namespace is currently not supported"); - } - - WorkspaceUpdateRequest updateRequest = - GSON.fromJson(StandardCharsets.UTF_8.decode(request.getContent()).toString(), WorkspaceUpdateRequest.class); - - WorkspaceId wsId = new WorkspaceId(ns, workspaceId); - Workspace newWorkspace = Workspace.builder(wsStore.getWorkspace(wsId)) - .setDirectives(updateRequest.getDirectives()) - .setInsights(updateRequest.getInsights()) - .setUpdatedTimeMillis(System.currentTimeMillis()).build(); - wsStore.updateWorkspace(wsId, newWorkspace); - responder.sendStatus(HttpURLConnection.HTTP_OK); - }); - } - - /** - * Resample the workspace using a new sample request. Keeps all previously-applied directives. - */ - @POST - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/workspaces/{id}/resample") - public void resampleWorkspace(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("id") String workspaceId) { - respond(responder, namespace, ns -> { - if (ns.getName().equalsIgnoreCase(NamespaceId.SYSTEM.getNamespace())) { - throw new BadRequestException("Resampling workspace in system namespace is currently not supported"); - } - - WorkspaceId wsId = new WorkspaceId(ns, workspaceId); - Workspace currentWorkspace = wsStore.getWorkspace(wsId); - - String connectionName = currentWorkspace.getSampleSpec() == null ? null : - currentWorkspace.getSampleSpec().getConnectionName(); - if (connectionName == null) { - throw new BadRequestException("Connection name has to exist to resample a workspace"); - } - - String sampleRequestString = StandardCharsets.UTF_8.decode(request.getContent()).toString(); - // sampleRequestString looks like {"sampleRequest": {...}}, so to parse it into SampleRequest.class - // we first have to extract the inner object - JsonElement sampleRequestJson = - new JsonParser().parse(sampleRequestString).getAsJsonObject().get("sampleRequest"); - SampleRequest sampleRequest = GSON.fromJson(sampleRequestJson, SampleRequest.class); - if (sampleRequest == null) { - throw new BadRequestException("Sample request has to be provided to resample a workspace"); - } - - SampleResponse sampleResponse = discoverer.retrieveSample(namespace, connectionName, - sampleRequest); - List rows = getSample(sampleResponse); - - SampleSpec oldSpec = currentWorkspace.getSampleSpec(); - SampleSpec newSpec = new SampleSpec(oldSpec.getConnectionName(), oldSpec.getConnectionType(), oldSpec.getPath(), - oldSpec.getRelatedPlugins(), oldSpec.getSupportedSampleTypes(), sampleRequest); - - Workspace newWorkspace = Workspace.builder(currentWorkspace) - .setUpdatedTimeMillis(System.currentTimeMillis()) - .setSampleSpec(newSpec).build(); - wsStore.saveWorkspace(wsId, new WorkspaceDetail(newWorkspace, rows)); - responder.sendStatus(HttpURLConnection.HTTP_OK); - }); - } - - @DELETE - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/workspaces/{id}") - public void deleteWorkspace(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("id") String workspaceId) { - respond(responder, namespace, ns -> { - if (ns.getName().equalsIgnoreCase(NamespaceId.SYSTEM.getNamespace())) { - throw new BadRequestException("Deleting workspace in system namespace is currently not supported"); - } - wsStore.deleteWorkspace(new WorkspaceId(ns, workspaceId)); - responder.sendStatus(HttpURLConnection.HTTP_OK); - }); - } - - /** - * Upload data to the workspace, the workspace is created automatically on fly. - */ - @POST - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/workspaces/upload") - public void upload(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(responder, namespace, ns -> { - if (ns.getName().equalsIgnoreCase(NamespaceId.SYSTEM.getNamespace())) { - throw new BadRequestException("Uploading data in system namespace is currently not supported"); - } - - String name = request.getHeader(PropertyIds.FILE_NAME); - if (name == null) { - throw new BadRequestException("Name must be provided in the 'file' header"); - } - - RequestExtractor handler = new RequestExtractor(request); - - // For back-ward compatibility, we check if there is delimiter specified - // using 'recorddelimiter' or 'delimiter' - String delimiter = handler.getHeader(RECORD_DELIMITER_HEADER, "\\u001A"); - delimiter = handler.getHeader(DELIMITER_HEADER, delimiter); - String content = handler.getContent(StandardCharsets.UTF_8); - if (content == null) { - throw new BadRequestException( - "Body not present, please post the file containing the records to create a workspace."); - } - - delimiter = StringEscapeUtils.unescapeJava(delimiter); - List sample = new ArrayList<>(); - for (String line : content.split(delimiter)) { - sample.add(new Row(COLUMN_NAME, line)); - } - - WorkspaceId id = new WorkspaceId(ns); - long now = System.currentTimeMillis(); - Workspace workspace = Workspace.builder(name, id.getWorkspaceId()) - .setCreatedTimeMillis(now).setUpdatedTimeMillis(now).build(); - wsStore.saveWorkspace(id, new WorkspaceDetail(workspace, sample)); - Metrics child = metrics.child(ImmutableMap.of(Constants.Metrics.Tag.APP_ENTITY_TYPE, - Constants.CONNECTION_SERVICE_NAME, - Constants.Metrics.Tag.APP_ENTITY_TYPE_NAME, - CONNECTION_TYPE)); - child.count(UPLOAD_COUNT, 1); - responder.sendJson(id.getWorkspaceId()); - }); - } - - /** - * Executes the directives on the record. - */ - @POST - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/workspaces/{id}/execute") - public void execute(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("id") String workspaceId) { - respond(responder, namespace, ns -> { - validateNamespace(ns, "Executing directives in system namespace is currently not supported"); - - DirectiveExecutionResponse response = execute(ns, request, new WorkspaceId(ns, workspaceId), - null); - responder.sendJson(response); - }); - } - - /** - * Retrieve the directives available in the namespace - */ - @GET - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/directives") - public void getDirectives(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(responder, namespace, ns -> { - // CDAP-15397 - reload must be called before it can be safely used - composite.reload(namespace); - List directives = new ArrayList<>(); - for (DirectiveInfo directive : composite.list(namespace)) { - DirectiveUsage directiveUsage = new DirectiveUsage(directive.name(), directive.usage(), - directive.description(), directive.scope().name(), - directive.definition(), directive.categories()); - directives.add(directiveUsage); - } - responder.sendJson(new ServiceResponse<>(directives)); - }); - } - - /** - * Get the specification for the workspace - */ - @GET - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/workspaces/{id}/specification") - public void specification(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("id") String workspaceId) { - respond(responder, namespace, ns -> { - if (ns.getName().equalsIgnoreCase(NamespaceId.SYSTEM.getNamespace())) { - throw new BadRequestException("Getting specification in system namespace is currently not supported"); - } - // reload to retrieve the wrangler transform - composite.reload(namespace); - - WorkspaceId wsId = new WorkspaceId(ns, workspaceId); - WorkspaceDetail detail = wsStore.getWorkspaceDetail(wsId); - List directives = new ArrayList<>(detail.getWorkspace().getDirectives()); - UserDirectivesCollector userDirectivesCollector = new UserDirectivesCollector(); - List result = executeDirectives(ns.getName(), directives, detail, userDirectivesCollector); - userDirectivesCollector.addLoadDirectivesPragma(directives); - - Schema outputSchema; - if (schemaManagementEnabled) { - outputSchema = TRANSIENT_STORE.get(TransientStoreKeys.OUTPUT_SCHEMA) != null ? - TRANSIENT_STORE.get(TransientStoreKeys.OUTPUT_SCHEMA) : TRANSIENT_STORE.get(TransientStoreKeys.INPUT_SCHEMA); - } else { - SchemaConverter schemaConvertor = new SchemaConverter(); - outputSchema = result.isEmpty() ? null : schemaConvertor.toSchema("record", RowHelper.createMergedRow(result)); - } - - // check if the rows are empty before going to create a record schema, it will result in a 400 if empty fields - // are passed to a record type schema - Map properties = ImmutableMap.of("directives", String.join("\n", directives), - "field", "*", - "precondition", "false", - "workspaceId", workspaceId); - - Set srcSpecs = getSourceSpecs(detail, directives); - - ArtifactSummary wrangler = composite.getLatestWranglerArtifact(); - responder.sendString(GSON.toJson(new WorkspaceSpec( - srcSpecs, new StageSpec(outputSchema, new Plugin("Wrangler", "transform", properties, - wrangler == null ? null : - new Artifact(wrangler.getName(), wrangler.getVersion(), - wrangler.getScope().name().toLowerCase())))))); - }); - } - - @POST - @TransactionPolicy(value = TransactionControl.EXPLICIT) - @Path("v2/contexts/{context}/workspaces/{id}/applyRecipe/{recipe-id}") - public void applyRecipe(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("id") String workspaceId, - @PathParam("recipe-id") String recipeIdString) { - respond(responder, namespace, ns -> { - validateNamespace(ns, "Executing directives in system namespace is currently not supported"); - - RecipeId recipeId = RecipeId.builder(ns).setRecipeId(recipeIdString).build(); - Recipe recipe = recipeStore.getRecipeById(recipeId); - - DirectiveExecutionResponse response = execute(ns, request, new WorkspaceId(ns, workspaceId), - recipe.getDirectives()); - responder.sendJson(response); - }); - } - - private void validateNamespace(NamespaceSummary ns, String errorMessage) { - if (ns.getName().equalsIgnoreCase(NamespaceId.SYSTEM.getNamespace())) { - throw new BadRequestException(errorMessage); - } - } - - private DirectiveExecutionResponse execute(NamespaceSummary ns, HttpServiceRequest request, - WorkspaceId workspaceId, - List recipeDirectives) throws Exception { - DirectiveExecutionRequest executionRequest = - GSON.fromJson(StandardCharsets.UTF_8.decode(request.getContent()).toString(), - DirectiveExecutionRequest.class); - - List directives = new ArrayList<>(executionRequest.getDirectives()); - if (recipeDirectives != null) { - directives.addAll(recipeDirectives); - } - - WorkspaceDetail detail = wsStore.getWorkspaceDetail(workspaceId); - UserDirectivesCollector userDirectivesCollector = new UserDirectivesCollector(); - List result = executeDirectives(ns.getName(), directives, detail, - userDirectivesCollector); - DirectiveExecutionResponse response = generateExecutionResponse(result, - executionRequest.getLimit()); - userDirectivesCollector.addLoadDirectivesPragma(directives); - Workspace newWorkspace = Workspace.builder(detail.getWorkspace()) - .setDirectives(directives) - .setUpdatedTimeMillis(System.currentTimeMillis()).build(); - wsStore.updateWorkspace(workspaceId, newWorkspace); - return response; - } - - /** - * Get source specs, contains some hacky way on dealing with the csv parser - */ - private Set getSourceSpecs(WorkspaceDetail detail, List directives) { - SampleSpec sampleSpec = detail.getWorkspace().getSampleSpec(); - Set srcSpecs = sampleSpec == null ? Collections.emptySet() : sampleSpec.getRelatedPlugins(); - - // really hacky way for the parse-as-csv directive, should get removed once we have support to provide the - // format properties when doing sampling - boolean shouldCopyHeader = - directives.stream() - .map(String::trim) - .anyMatch(directive -> directive.startsWith("parse-as-csv") && directive.endsWith("true")); - if (shouldCopyHeader && !srcSpecs.isEmpty()) { - srcSpecs = srcSpecs.stream().map(stageSpec -> { - Plugin plugin = stageSpec.getPlugin(); - Map srcProperties = new HashMap<>(plugin.getProperties()); - srcProperties.put("copyHeader", "true"); - return new StageSpec(stageSpec.getSchema(), new Plugin(plugin.getName(), plugin.getType(), - srcProperties, plugin.getArtifact())); - }).collect(Collectors.toSet()); - } - return srcSpecs; - } - - /** - * Get the workspace name, the generation rule is like: - * 1. If the path is not null or empty, the name will be last portion of path starting from "/". - * If "/" does not exist, the name will be the path itself. - * 2. If path is null or empty or equal to "/", the name will be the uuid for the workspace - */ - private String generateWorkspaceName(WorkspaceId id, @Nullable String path) { - if (Strings.isNullOrEmpty(path)) { - return id.getWorkspaceId(); - } - - // remove trailing "/" - path = path.replaceAll("/+$", ""); - - int last = path.lastIndexOf('/'); - // if found an "/", take the rest as name - if (last >= 0) { - return path.substring(last + 1); - } - // if not, check if path is empty or not - return path.isEmpty() ? id.getWorkspaceId() : path; - } - - /** - * Executes the given list of directives on the given workspace. - * - * @param namespace the namespace to operate on for finding user defined directives - * @param directives the list of directives to apply. The list provided must be a mutable list for the addition of - * {@code #pragma} directives for loading UDDs. - * @param detail the workspace to operate on - * @param grammarVisitor visitor to call while parsing directives - * @return the resulting rows after applying the directives - */ - private List executeDirectives(String namespace, - List directives, - WorkspaceDetail detail, - GrammarWalker.Visitor grammarVisitor) throws Exception { - // Remove all the #pragma from the existing directives. New ones will be generated. - directives.removeIf(d -> PRAGMA_PATTERN.matcher(d).find()); - - if (schemaManagementEnabled) { - SampleSpec spec = detail.getWorkspace().getSampleSpec(); - // Workaround for uploaded files that don't have the spec set - Schema inputSchema = spec != null ? spec.getRelatedPlugins().iterator().next().getSchema() : - Schema.recordOf("inputSchema", Schema.Field.of("body", Schema.of(Schema.Type.STRING))); - TRANSIENT_STORE.reset(TransientVariableScope.GLOBAL); - TRANSIENT_STORE.set(TransientVariableScope.GLOBAL, TransientStoreKeys.INPUT_SCHEMA, inputSchema); - } - - return getContext().isRemoteTaskEnabled() ? - executeRemotely(namespace, directives, detail, grammarVisitor) : - executeLocally(namespace, directives, detail, grammarVisitor); - } - - /** - * Executes the given list of directives on the given workspace locally in the same JVM. - * - * @param namespace the namespace to operate on for finding user defined directives - * @param directives the list of directives to apply. The list provided must be a mutable list for the addition of - * {@code #pragma} directives for loading UDDs. - * @param detail the workspace to operate on - * @param grammarVisitor visitor to call while parsing directives - * @return the resulting rows after applying the directives - */ - private List executeLocally(String namespace, List directives, - WorkspaceDetail detail, GrammarWalker.Visitor grammarVisitor) - throws DirectiveLoadException, DirectiveParseException, E, RecipeException { - - // load the udd - composite.reload(namespace); - return executeDirectives(namespace, directives, new ArrayList<>(detail.getSample()), - grammarVisitor); - } - - /** - * Executes the given list of directives on the given workspace remotely using the task worker framework. - * - * @param namespace the namespace to operate on for finding user defined directives - * @param directives the list of directives to apply. The list provided must be a mutable list for the addition of - * {@code #pragma} directives for loading UDDs. - * @param detail the workspace to operate on - * @param grammarVisitor visitor to call while parsing directives - * @return the resulting rows after applying the directives - */ - private List executeRemotely(String namespace, List directives, - WorkspaceDetail detail, GrammarWalker.Visitor grammarVisitor) throws Exception { - - GrammarMigrator migrator = new MigrateToV2(directives); - String recipe = migrator.migrate(); - Map systemDirectives = new HashMap<>(); - - // Gather system directives and call additional visitor. - GrammarWalker walker = new GrammarWalker(new RecipeCompiler(), new ConfigDirectiveContext(DirectiveConfig.EMPTY)); - AtomicBoolean hasDirectives = new AtomicBoolean(); - walker.walk(recipe, (command, tokenGroup) -> { - DirectiveInfo info = SystemDirectiveRegistry.INSTANCE.get(command); - if (info != null) { - systemDirectives.put(command, info.getDirectiveClass()); - } - grammarVisitor.visit(command, tokenGroup); - hasDirectives.set(true); - }); - - // If no directives to execute, just return - if (!hasDirectives.get()) { - return detail.getSample(); - } - - RemoteDirectiveRequest directiveRequest = new RemoteDirectiveRequest(recipe, systemDirectives, - namespace, detail.getSampleAsBytes(), - TRANSIENT_STORE.get(INPUT_SCHEMA)); - RunnableTaskRequest runnableTaskRequest = RunnableTaskRequest.getBuilder(RemoteExecutionTask.class.getName()) - .withParam(GSON.toJson(directiveRequest)) - .withNamespace(namespace) - .build(); - byte[] bytes = getContext().runTask(runnableTaskRequest); - RemoteDirectiveResponse response; - if (Feature.WRANGLER_KRYO_SERIALIZATION.isEnabled(getContext())) { - response = new KryoSerializer().toRemoteDirectiveResponse(bytes); - } else { - response = new ObjectSerDe().toObject(bytes); - } - if (response.getOutputSchema() != null) { - TRANSIENT_STORE.set(TransientVariableScope.GLOBAL, OUTPUT_SCHEMA, response.getOutputSchema()); - } - return response.getRows(); - } - - private List getSample(SampleResponse sampleResponse) { - List rows = new ArrayList<>(); - if (!sampleResponse.getSample().isEmpty()) { - for (StructuredRecord record : sampleResponse.getSample()) { - rows.add(StructuredToRowTransformer.transform(record)); - } - } - return rows; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/WorkspaceUpgrader.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/WorkspaceUpgrader.java deleted file mode 100644 index 9731fcc68..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/WorkspaceUpgrader.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.service.directive; - -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.service.SystemServiceContext; -import io.cdap.cdap.etl.proto.ArtifactSelectorConfig; -import io.cdap.cdap.etl.proto.connection.ConnectorDetail; -import io.cdap.cdap.etl.proto.connection.PluginDetail; -import io.cdap.cdap.etl.proto.connection.SpecGenerationRequest; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.PropertyIds; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.dataset.connections.ConnectionStore; -import io.cdap.wrangler.dataset.workspace.Workspace; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.NotFoundException; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.proto.workspace.v2.Artifact; -import io.cdap.wrangler.proto.workspace.v2.Plugin; -import io.cdap.wrangler.proto.workspace.v2.SampleSpec; -import io.cdap.wrangler.proto.workspace.v2.StageSpec; -import io.cdap.wrangler.proto.workspace.v2.WorkspaceDetail; -import io.cdap.wrangler.proto.workspace.v2.WorkspaceId; -import io.cdap.wrangler.service.database.DatabaseHandler; -import io.cdap.wrangler.store.upgrade.UpgradeEntityType; -import io.cdap.wrangler.store.upgrade.UpgradeState; -import io.cdap.wrangler.store.upgrade.UpgradeStore; -import io.cdap.wrangler.store.workspace.WorkspaceStore; -import io.cdap.wrangler.utils.RecordConvertorException; -import io.cdap.wrangler.utils.RowHelper; -import io.cdap.wrangler.utils.SchemaConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * Upgrader for workspaces. This upgrade should be run after the {@link ConnectionUpgrader} - */ -public class WorkspaceUpgrader { - private static final Logger LOG = LoggerFactory.getLogger(WorkspaceUpgrader.class); - private static final UpgradeState WS_COMPLETE_STATE = new UpgradeState(1L); - - private final UpgradeStore upgradeStore; - private final SystemServiceContext context; - private final long upgradeBeforeTsSecs; - private final ConnectionDiscoverer discoverer; - private final WorkspaceStore wsStore; - - public WorkspaceUpgrader(UpgradeStore upgradeStore, SystemServiceContext context, long upgradeBeforeTsSecs, - WorkspaceStore wsStore) { - this.upgradeStore = upgradeStore; - this.context = context; - this.upgradeBeforeTsSecs = upgradeBeforeTsSecs; - this.discoverer = new ConnectionDiscoverer(context); - this.wsStore = wsStore; - } - - public void upgradeWorkspaces() throws Exception { - List namespaces = context.listNamespaces(); - for (NamespaceSummary ns : namespaces) { - UpgradeState state = upgradeStore.getEntityUpgradeState(ns, UpgradeEntityType.WORKSPACE); - if (state == null || state.getVersion() == 0L) { - upgradeWorkspacesInConnections(ns); - } - } - upgradeStore.setEntityUpgradeState(UpgradeEntityType.WORKSPACE, WS_COMPLETE_STATE); - } - - private void upgradeWorkspacesInConnections(NamespaceSummary namespace) { - List workspaces = TransactionRunners.run(context, ctx -> { - WorkspaceDataset wsDataset = WorkspaceDataset.get(ctx); - return wsDataset.listWorkspaces(namespace, upgradeBeforeTsSecs); - }); - - for (Workspace workspace : workspaces) { - List sample = Collections.emptyList(); - try { - sample = DirectivesHandler.fromWorkspace(workspace); - } catch (Exception e) { - // this should not happen, but guard here to avoid failing the entire upgrade process - LOG.warn("Could not decode the sample data for workspace {}. This workspace will not be upgraded", - workspace.getName(), e); - } - List directives = workspace.getRequest() == null ? Collections.emptyList() : - workspace.getRequest().getRecipe().getDirectives(); - WorkspaceId workspaceId = new WorkspaceId(namespace, workspace.getNamespacedId().getId()); - - long now = System.currentTimeMillis(); - io.cdap.wrangler.proto.workspace.v2.Workspace.Builder ws = - io.cdap.wrangler.proto.workspace.v2.Workspace - .builder(workspace.getName(), workspace.getNamespacedId().getId()).setDirectives(directives) - .setCreatedTimeMillis(now).setUpdatedTimeMillis(now); - - ConnectionType connectionType = - ConnectionType.valueOf(workspace.getProperties().get(PropertyIds.CONNECTION_TYPE).toUpperCase()); - // if it is not upgradable workspace types, just ignore and continue, i.e, ADLS - if (!ConnectionType.WORKSPACE_UPGRADABLE_TYPES.contains(connectionType)) { - LOG.debug("Workspace {} of type {} is not upgradable. This workspace will not be upgraded", - workspace.getName(), connectionType); - continue; - } - - // if this type is not related to any connectors, just save it with empty sample sepc, - // so there will be no sources created when converting to pipeline, - // for now the only type like this is UPLOAD - if (!ConnectionType.CONN_UPGRADABLE_TYPES.contains(connectionType)) { - wsStore.saveWorkspace(workspaceId, new WorkspaceDetail(ws.build(), sample)); - continue; - } - - String connectorName = connectionType.getConnectorName(); - String path = SpecificationUpgradeUtils.getPath(connectionType, workspace); - - String connection = workspace.getProperties().get(PropertyIds.CONNECTION_ID); - try { - ConnectorDetail detail = discoverer.getSpecification(namespace.getName(), connection, - new SpecGenerationRequest(path, Collections.emptyMap())); - - // special handle of the database type, the current db connector supports browsing from schema/table depending - // on the database type, here it is safe to just use the old way to generate spec since: - // 1. the old db connection might not contain database in connection string - // 2. it does not support schema, so db type which supports schema can easily get messed up due to the path - // not set up correctly. For example, for mysql, the getspec call will return the source schema since it - // mysql itself does not support schema. But SqlServer will not return source schema because it supports - // schema and the original workspace does not have this information. To make sure, the path does not mess up, - // the above path for db connection will always be "/". - // 3. Using the old properties will ensure the old behavior get reserved for the db connectors - Schema dbSchema = null; - Map dbProperties = Collections.emptyMap(); - if (connectionType.equals(ConnectionType.DATABASE)) { - SchemaConverter schemaConvertor = new SchemaConverter(); - try { - dbSchema = sample.isEmpty() ? null : - schemaConvertor.toSchema("record", RowHelper.createMergedRow(sample)); - } catch (RecordConvertorException e) { - LOG.warn("Unable to get the source schema for workspace {}, the generated spec will not contain schema.", - workspace.getName()); - } - Connection conn = TransactionRunners.run(context, ctx -> { - ConnectionStore connStore = ConnectionStore.get(ctx); - return connStore.get(new NamespacedId(new Namespace(namespace.getName(), namespace.getGeneration()), - connection)); - }); - dbProperties = DatabaseHandler.getSpecification(conn, workspace.getName()); - } - - Set relatedPlugins = new HashSet<>(); - for (PluginDetail plugin : detail.getRelatedPlugins()) { - Schema schema = connectionType.equals(ConnectionType.DATABASE) ? dbSchema : plugin.getSchema(); - Map properties = - connectionType.equals(ConnectionType.DATABASE) ? dbProperties : plugin.getProperties(); - ArtifactSelectorConfig artifact = plugin.getArtifact(); - Plugin pluginSpec = new Plugin( - plugin.getName(), plugin.getType(), properties, - new Artifact(artifact.getName(), artifact.getVersion(), artifact.getScope())); - relatedPlugins.add(new StageSpec(schema, pluginSpec)); - } - SampleSpec spec = new SampleSpec(connection, connectorName, path, relatedPlugins); - wsStore.saveWorkspace(workspaceId, new WorkspaceDetail(ws.setSampleSpec(spec).build(), sample)); - } catch (NotFoundException e) { - LOG.warn("Connection {} related to workspace {} does not exist. " + - "The workspace will be upgraded without that information", connection, workspace.getName()); - wsStore.saveWorkspace(workspaceId, new WorkspaceDetail(ws.build(), sample)); - } catch (Exception e) { - LOG.warn("Unable to get the spec from connection {} for workspace {}. The workspace will not be upgraded.", - connection, workspace.getName()); - } - } - - upgradeStore.setEntityUpgradeState(namespace, UpgradeEntityType.WORKSPACE, WS_COMPLETE_STATE); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/WranglerDisplaySerializer.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/WranglerDisplaySerializer.java deleted file mode 100644 index 892068e80..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/directive/WranglerDisplaySerializer.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.directive; - -import com.google.gson.Gson; -import com.google.gson.TypeAdapter; -import com.google.gson.TypeAdapterFactory; -import com.google.gson.reflect.TypeToken; -import com.google.gson.stream.JsonReader; -import com.google.gson.stream.JsonWriter; -import io.cdap.wrangler.api.Pair; -import io.cdap.wrangler.api.Row; -import org.apache.commons.lang3.ClassUtils; - -import java.io.IOException; - -/** - * Formats Structure and Array records in a "pseudojson" in which it collapses - * complex types by callint toString(). This is done so the complex types are shown - * in a similar way inside and outside the structure records. - */ -public class WranglerDisplaySerializer implements TypeAdapterFactory { - - public static final String NONDISPLAYABLE_STRING = "Non-displayable object"; - - @Override - public TypeAdapter create(Gson gson, TypeToken type) { - // Let GSON Handle primitives and collections - if (ClassUtils.isPrimitiveOrWrapper(type.getRawType()) - || (Iterable.class.isAssignableFrom(type.getRawType()))) { - return null; - } - if (Row.class.isAssignableFrom(type.getRawType())) { - return (TypeAdapter) rowClassAdapter(gson); - } - - return (TypeAdapter) defaultClassAdapter(gson); - } - - private TypeAdapter rowClassAdapter(Gson gson) { - final TypeAdapter elementAdapter = gson.getAdapter(Object.class); - - return new TypeAdapter() { - @Override - public void write(JsonWriter out, Row value) throws IOException { - if (value == null) { - return; - } - out.beginObject(); - for (Pair field : value.getFields()) { - out.name(field.getFirst()); - elementAdapter.write(out, field.getSecond()); - } - out.endObject(); - } - - @Override public - Row read(JsonReader in) throws IOException { - throw new UnsupportedOperationException("Reading Rows from Wrangler display format not supported."); - } - }; - } - - - private TypeAdapter defaultClassAdapter(Gson gson) { - return new TypeAdapter() { - @Override - public void write(JsonWriter out, Object value) throws IOException { - try { - if ((value.getClass().getMethod("toString").getDeclaringClass() != Object.class)) { - out.value(value.toString()); - } else { - out.value(NONDISPLAYABLE_STRING); - } - } catch (NoSuchMethodException e) { - out.value(NONDISPLAYABLE_STRING); - } - } - - @Override public - Object read(JsonReader in) throws IOException { - throw new UnsupportedOperationException("Can't read object from it's string implementation"); - } - }; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/BoundedLineInputStream.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/BoundedLineInputStream.java deleted file mode 100644 index 30b160feb..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/BoundedLineInputStream.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.explorer; - -import org.apache.commons.io.Charsets; -import org.apache.commons.io.IOUtils; - -import java.io.BufferedReader; -import java.io.Closeable; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.nio.charset.Charset; -import java.util.Iterator; -import java.util.NoSuchElementException; - -/** - * This class provides an wrapper over the {@link InputStream} that limits the number of lines being - * read from the file. - * - * Uses a BufferedReader internally to read the data. If the number of lines in file is - * fewer than the lines in file, it will return only the lines that can be possibly read. - */ -public final class BoundedLineInputStream implements Iterator, Closeable { - // The reader that is being read. - private final BufferedReader bufferedReader; - - // The current line. - private String cachedLine; - - // A flag indicating if the iterator has been fully read. - private boolean finished = false; - - // Number of lines to be read. - private int lines; - - /** - * Constructs an iterator of the lines for a Reader. - * - * @param reader the Reader to read from, not null - * @throws IllegalArgumentException if the reader is null - */ - public BoundedLineInputStream(final Reader reader, int lines) throws IllegalArgumentException { - if (reader == null) { - throw new IllegalArgumentException("Reader must not be null"); - } - if (reader instanceof BufferedReader) { - bufferedReader = (BufferedReader) reader; - } else { - bufferedReader = new BufferedReader(reader); - } - this.lines = lines; - } - - /** - * Indicates whether the Reader has more lines. - * If there is an IOException then {@link #close()} will - * be called on this instance. - * - * @return true if the Reader has more lines - * @throws IllegalStateException if an IO exception occurs - */ - public boolean hasNext() { - if (cachedLine != null) { - return true; - } else if (finished) { - return false; - } else { - try { - while (true) { - if (lines == 0) { - finished = true; - return false; - } - String line = bufferedReader.readLine(); - if (line == null) { - finished = true; - return false; - } else if (isValidLine(line)) { - cachedLine = line; - return true; - } - } - } catch (IOException ioe) { - close(); - throw new IllegalStateException(ioe); - } - } - } - - /** - * Overridable method to validate each line that is returned. - * - * @param line the line that is to be validated - * @return true if valid, false to remove from the iterator - */ - protected boolean isValidLine(String line) { - return true; - } - - /** - * Returns the next line in the wrapped Reader. - * - * @return the next line from the input - * @throws NoSuchElementException if there is no line to return - */ - public String next() { - return nextLine(); - } - - /** - * Returns the next line in the wrapped Reader. - * - * @return the next line from the input - * @throws NoSuchElementException if there is no line to return - */ - public String nextLine() { - if (!hasNext()) { - throw new NoSuchElementException("No more lines"); - } - String currentLine = cachedLine; - cachedLine = null; - lines--; - return currentLine; - } - - /** - * Closes the underlying Reader quietly. - * This method is useful if you only want to process the first few - * lines of a larger file. If you do not close the iterator - * then the Reader remains open. - * This method can safely be called multiple times. - */ - public void close() { - finished = true; - IOUtils.closeQuietly(bufferedReader); - cachedLine = null; - } - - /** - * Unsupported. - * - * @throws UnsupportedOperationException always - */ - public void remove() { - throw new UnsupportedOperationException("Remove unsupported on LineIterator"); - } - - /** - * Closes the iterator, handling null and ignoring exceptions. - * - * @param iterator the iterator to close - */ - public static void closeQuietly(BoundedLineInputStream iterator) { - if (iterator != null) { - iterator.close(); - } - } - - /** - * A static method to create instance of BoundedLineInputStream. This method - * creates the instance specifying the character encoding and number of lines to be read. - * - *

The application using this method should ensure that they call BoundedLineInputStream.close() - * once the application has finished reading. When 'lines' is greater than number of the files in the file, it - * will be terminated once the end of the file is reached.

- * - * @param input Input stream. - * @param encoding Type of encoding for the file. - * @param lines number of lines to be read. - * @return Iterator. - * @throws IOException - */ - public static BoundedLineInputStream iterator(InputStream input, Charset encoding, int lines) - throws IOException { - return new BoundedLineInputStream(new InputStreamReader(input, encoding), lines); - } - - public static BoundedLineInputStream iterator(InputStream input, String encoding, int lines) - throws IOException { - return iterator(input, Charsets.toCharset(encoding), lines); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/DatasetProvider.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/DatasetProvider.java deleted file mode 100644 index 19f730bb8..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/DatasetProvider.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.explorer; - -import io.cdap.cdap.api.dataset.Dataset; - -/** - * This class implements the provider pattern for providing dataset at runtime. - * - * @param type of dataset provided - */ -public interface DatasetProvider { - T acquire() throws Exception; - void release(T dataset); -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/Explorer.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/Explorer.java deleted file mode 100644 index 795962587..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/Explorer.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.explorer; - -import com.google.common.collect.HashMultiset; -import com.google.common.collect.Multiset; -import io.cdap.cdap.api.dataset.lib.FileSet; -import io.cdap.wrangler.service.FileTypeDetector; -import org.apache.commons.io.Charsets; -import org.apache.commons.io.IOUtils; -import org.apache.twill.filesystem.Location; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.charset.Charset; -import java.security.AccessControlException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * File system explorer. - */ -public final class Explorer { - private static final Logger LOG = LoggerFactory.getLogger(Explorer.class); - - // Dataset provider interface. - private final DatasetProvider provider; - - // Operating system this service is running on. - private final String operatingSystem; - - // Map of file extensions to MIME names. - private final FileTypeDetector detector; - - // Some constants for unknown or device types. - public static final String DEVICE = "device"; - public static final String UNKNOWN = "UNKNOWN"; - - public Explorer(DatasetProvider provider) { - this.provider = provider; - String os = System.getProperty("os.name"); - if (os == null || os.isEmpty()) { - this.operatingSystem = "unknown"; - } else { - this.operatingSystem = os.toLowerCase(); - } - detector = new FileTypeDetector(); - } - - /** - * Explores the path provided on the filesystem. - * - * @param path to be explored. - * @return Information about all the files/directories in the path. - * @throws ExplorerException thrown when there is issue browsing directory. - */ - public Map browse(String path, boolean hidden) throws ExplorerException { - try { - Map response = new HashMap<>(); - List> values = new ArrayList<>(); - // Trick in getting the location. - Location base = getLocation(path); - // Get the list of all the files. - List locations = base.list(); - // Iterate through each file. - for (Location location : locations) { - // If hidden is true, then hide all the files that start with . (dot) - if (hidden && location.getName().startsWith(".")) { - continue; - } - Map object = locationInfo(location); - // If it's a directory, inspect the contents further attempting to detect the type - String type = guessLocationType(location, 1); - boolean isWrangleable = detector.isWrangleable(type); - object.put("type", type); - object.put("wrangle", isWrangleable); - values.add(object); - } - response.put("status", HttpURLConnection.HTTP_OK); - response.put("message", "Success"); - response.put("count", values.size()); - response.put("values", values); - return response; - } catch (AccessControlException e) { - throw new ExplorerException(String.format( - "Insufficient permission to access path '%s'", path - )); - } catch (IOException e) { - throw new ExplorerException(e.getMessage()); - } - } - - - /** - * This methods provides an efficiently way to read a file from the file system specified by - * the Location.. It uses a bounded line stream that limits the lines being read - * from the {@link java.io.BufferedInputStream}. - * - * @param path Specifies the path to file to be read. Assumes the file exists at the path specified. - * @param encoding Specifies the encoding of the file. - * @param lines Number of lines to be read from the file. - * @return {@link BoundedLineInputStream} - */ - public BoundedLineInputStream read(String path, Charset encoding, int lines) throws ExplorerException, IOException { - Location file = getLocation(path); - if (file.isDirectory()) { - throw new ExplorerException( - String.format("Path '%s' specified is a directory and not a file.", file.toURI().getPath()) - ); - } - return BoundedLineInputStream.iterator(file.getInputStream(), encoding, lines); - } - - public BoundedLineInputStream read(String path, String encoding, int lines) throws ExplorerException, IOException { - return read(path, Charsets.toCharset(encoding), lines); - } - - /** - * Reads the 'size' bytes from the file. - * - * @param path to the file being read. - * @param size specifies the bytes to be read. - * @return bytes read. - */ - public byte[] read(String path, int size) throws ExplorerException, IOException { - Location file = getLocation(path); - if (file.isDirectory()) { - throw new ExplorerException( - String.format("Path '%s' specified is a directory and not a file.", file.toURI().getPath()) - ); - } - - int min = (int) Math.min(file.length(), size); - byte[] buffer = new byte[min + 1]; - IOUtils.read(file.getInputStream(), buffer); - return buffer; - } - - /** - * Inspects the location to detect the type of the file. - * - * @param path of the file or path to be investigated. - * @param lookahead Specifies a look a head parameter. - */ - private String guessLocationType(Location path, int lookahead) { - try { - // If we have gone beyond, we exit immediately. - if (lookahead < 0) { - return UNKNOWN; - } - - if (!path.isDirectory()) { - return detector.detectFileType(path); - } else { - Multiset types = HashMultiset.create(); - List listing = path.list(); - if (listing.size() > 0) { - for (Location location : path.list()) { - String type = guessLocationType(location, lookahead - 1); - types.add(type); - } - String topType = UNKNOWN; - for (Multiset.Entry top : types.entrySet()) { - if (topType.equalsIgnoreCase(UNKNOWN)) { - topType = top.getElement(); - } - } - return topType; - } - } - } catch (IOException e) { - // We might not have permission, so ignore on look-ahead. - } - return UNKNOWN; - } - - /** - * Returns a map of location info collected. - * - * @param location who's information need to be extracted. - * @return an instance of JSON Object. - * @throws IOException thrown in case of issues with listing. - */ - private Map locationInfo(Location location) throws IOException { - Map response = new HashMap<>(); - response.put("directory", location.isDirectory()); - response.put("path", location.toURI().getPath()); - response.put("name", location.getName()); - String group = isWindows() ? "-" : location.getGroup(); - String owner = isWindows() ? "-" : location.getOwner(); - String permissions = isWindows() ? "-" : location.getPermissions(); - response.put("group", group); - response.put("owner", owner); - response.put("permission", permissions); - response.put("size", !location.isDirectory() ? location.length() : 0); // Calculate only when it's not directory. - response.put("last-modified", location.lastModified()); - response.put("uri", location.toURI().toString()); - return response; - } - - private boolean isWindows() { - String os = System.getProperty("os.name").toLowerCase(); - return os.contains("win"); - } - - /** - * Trick, to extract the URI for a location. - * - * @param path to a Dataset. - * @return Location - * @throws URISyntaxException issue constructing the URI. - */ - public Location getLocation(String path) throws ExplorerException { - FileSet fileset = null; - try { - fileset = (FileSet) provider.acquire(); - Location baseLocation = fileset.getBaseLocation(); - provider.release(fileset); - - URI uri = baseLocation.toURI(); - Location location = baseLocation.getLocationFactory().create( - new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), - path, null, null)); - return location; - } catch (Exception e) { - throw new ExplorerException(e); - } - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/ExplorerException.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/ExplorerException.java deleted file mode 100644 index 3bd114980..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/ExplorerException.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.explorer; - -/** - * Exception thrown when there is issue with File System exploration. - */ -public class ExplorerException extends Exception { - public ExplorerException(String message) { - super(message); - } - - public ExplorerException(Exception e) { - super(e); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/FilesystemExplorer.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/FilesystemExplorer.java deleted file mode 100644 index a200a83f3..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/explorer/FilesystemExplorer.java +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.explorer; - -import com.google.common.base.Charsets; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.dataset.Dataset; -import io.cdap.cdap.api.service.http.HttpServiceContext; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.api.service.http.SystemHttpServiceContext; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.PropertyIds; -import io.cdap.wrangler.SamplingMethod; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.dataset.workspace.DataType; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.dataset.workspace.WorkspaceMeta; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.PluginSpec; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.proto.file.FileConnectionSample; -import io.cdap.wrangler.proto.file.FileSpec; -import io.cdap.wrangler.sampling.Bernoulli; -import io.cdap.wrangler.sampling.Poisson; -import io.cdap.wrangler.sampling.Reservoir; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; -import io.cdap.wrangler.service.common.Format; -import io.cdap.wrangler.utils.ObjectSerDe; -import io.cdap.wrangler.utils.ReferenceNames; -import org.apache.twill.filesystem.Location; -import org.bouncycastle.jce.provider.BouncyCastleProvider; - -import java.io.BufferedInputStream; -import java.io.IOException; -import java.security.Security; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - -/** - * A {@link FilesystemExplorer} is a HTTP Service handler for exploring the filesystem. - * It provides capabilities for listing file(s) and directories. It also provides metadata. - */ -@Deprecated -public class FilesystemExplorer extends AbstractWranglerHandler { - private Explorer explorer; - private static final String COLUMN_NAME = "body"; - private static final int FILE_SIZE = 10 * 1024 * 1024; - - /** - * Lists the content of the path specified using the {@link Location}. - * - * @param request HTTP Request Handler - * @param responder HTTP Response Handler - * @param path to the location in the filesystem - */ - @GET - @Path("contexts/{context}/explorer/fs") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void list(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @QueryParam("path") String path, - @QueryParam("hidden") boolean hidden) { - respond(request, responder, namespace, ns -> explorer.browse(path, hidden)); - } - - /** - * Given a path, reads the file into the workspace. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param path to the location in the filesystem. - * @param lines number of lines to extracted from file if it's a text/plain. - * @param sampler sampling method to be used. - */ - @GET - @Path("contexts/{context}/explorer/fs/read") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void read(HttpServiceRequest request, HttpServiceResponder responder, @PathParam("context") String namespace, - @QueryParam("path") String path, @QueryParam("lines") int lines, - @QueryParam("sampler") String sampler, - @QueryParam("fraction") double fraction, - @QueryParam("scope") @DefaultValue(WorkspaceDataset.DEFAULT_SCOPE) String scope) { - respond(request, responder, namespace, ns -> { - String header = request.getHeader(PropertyIds.CONTENT_TYPE); - - if (header == null) { - throw new BadRequestException("Content-Type header not specified."); - } - - FileConnectionSample sample; - if (header.equalsIgnoreCase("text/plain") || header.contains("text/")) { - sample = loadSampleableFile(ns, scope, path, lines, fraction, sampler); - } else if (header.equalsIgnoreCase("application/xml")) { - // using BLOB to read xml file as it needs to read the entire content - sample = loadFile(ns, scope, path, DataType.RECORDS, Format.BLOB); - } else if (header.equalsIgnoreCase("application/json")) { - // using TEXT format here since wrangler uses its own directive to parse json - sample = loadFile(ns, scope, path, DataType.TEXT, Format.TEXT); - } else if (header.equalsIgnoreCase("application/avro") - || header.equalsIgnoreCase("application/protobuf") - || header.equalsIgnoreCase("application/excel") - || header.contains("image/")) { - sample = loadFile(ns, scope, path, DataType.BINARY, Format.BLOB); - } else { - throw new BadRequestException("Currently doesn't support wrangling of this type of file."); - } - return new ServiceResponse<>(sample); - }); - } - - /** - * Specification for the source. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param path to the location in the filesystem. - */ - @GET - @Path("contexts/{context}/explorer/fs/specification") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void specification(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @QueryParam("path") String path, @QueryParam("wid") String workspaceId) { - respond(request, responder, namespace, ns -> { - NamespacedId namespacedId = new NamespacedId(ns, workspaceId); - - PluginSpec pluginSpec = TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - Format format = Format.TEXT; - if (workspaceId != null) { - Map config = ws.getWorkspace(namespacedId).getProperties(); - String formatStr = config.getOrDefault(PropertyIds.FORMAT, Format.TEXT.name()); - format = Format.valueOf(formatStr); - } - Map properties = new HashMap<>(); - properties.put("format", format.name().toLowerCase()); - Location location = explorer.getLocation(path); - properties.put("path", location.toURI().toString()); - properties.put("referenceName", ReferenceNames.cleanseReferenceName(location.getName())); - properties.put("ignoreNonExistingFolders", "false"); - properties.put("recursive", "false"); - properties.put("copyHeader", String.valueOf(shouldCopyHeader(ws, namespacedId))); - properties.put("schema", format.getSchema().toString()); - - return new PluginSpec("File", "source", properties); - }); - FileSpec fileSpec = new FileSpec(pluginSpec); - return new ServiceResponse<>(fileSpec); - }); - } - - private FileConnectionSample loadFile(Namespace namespace, String scope, String path, - DataType type, Format format) throws ExplorerException, IOException { - Location location = explorer.getLocation(path); - if (!location.exists()) { - throw new BadRequestException(String.format("%s (No such file)", path)); - } - - if (location.length() > FILE_SIZE) { - throw new BadRequestException("Files larger than 10MB are currently not supported."); - } - - // Creates workspace. - String name = location.getName(); - Map properties = new HashMap<>(); - properties.put(PropertyIds.FILE_NAME, location.getName()); - properties.put(PropertyIds.URI, location.toURI().toString()); - properties.put(PropertyIds.FILE_PATH, location.toURI().getPath()); - properties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.FILE.getType()); - properties.put(PropertyIds.SAMPLER_TYPE, SamplingMethod.NONE.getMethod()); - properties.put(PropertyIds.FORMAT, format.name()); - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(name) - .setScope(scope) - .setProperties(properties) - .build(); - - String sampleId = TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - NamespacedId workspaceId = ws.createWorkspace(namespace, workspaceMeta); - - byte[] bytes = new byte[(int) location.length() + 1]; - try (BufferedInputStream stream = new BufferedInputStream(location.getInputStream())) { - stream.read(bytes); - } catch (IOException e) { - e.printStackTrace(); - } - - // Write records to workspace. - if (type == DataType.RECORDS) { - List rows = new ArrayList<>(); - rows.add(new Row(COLUMN_NAME, new String(bytes, Charsets.UTF_8))); - ObjectSerDe> serDe = new ObjectSerDe<>(); - byte[] data = serDe.toByteArray(rows); - ws.updateWorkspaceData(workspaceId, DataType.RECORDS, data); - } else if (type == DataType.BINARY || type == DataType.TEXT) { - ws.updateWorkspaceData(workspaceId, type, bytes); - } - return workspaceId.getId(); - }); - - return new FileConnectionSample(sampleId, name, ConnectionType.FILE.getType(), - SamplingMethod.NONE.getMethod(), null, - location.toURI().toString(), location.toURI().getPath(), - location.getName()); - } - - private FileConnectionSample loadSampleableFile(Namespace namespace, String scope, String path, int lines, - double fraction, String sampler) - throws IOException, ExplorerException { - SamplingMethod samplingMethod; - if (sampler == null || sampler.isEmpty() || SamplingMethod.fromString(sampler) == null) { - samplingMethod = SamplingMethod.FIRST; - } else { - samplingMethod = SamplingMethod.fromString(sampler); - } - - Location location = explorer.getLocation(path); - if (!location.exists()) { - throw new BadRequestException(String.format("%s (No such file)", path)); - } - String name = location.getName(); - // Set all properties and write to workspace. - Map properties = new HashMap<>(); - properties.put(PropertyIds.FILE_NAME, location.getName()); - properties.put(PropertyIds.URI, location.toURI().toString()); - properties.put(PropertyIds.FILE_PATH, location.toURI().getPath()); - properties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.FILE.getType()); - properties.put(PropertyIds.SAMPLER_TYPE, samplingMethod.getMethod()); - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(name) - .setScope(scope) - .setProperties(properties) - .build(); - - String sampleId = TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - NamespacedId workspaceId = ws.createWorkspace(namespace, workspaceMeta); - - // Iterate through lines to extract only 'limit' random lines. - // Depending on the type, the sampling of the input is performed. - List rows = new ArrayList<>(); - BoundedLineInputStream blis = BoundedLineInputStream.iterator(location.getInputStream(), Charsets.UTF_8, lines); - Iterator it = blis; - if (samplingMethod == SamplingMethod.POISSON) { - it = new Poisson(fraction).sample(blis); - } else if (samplingMethod == SamplingMethod.BERNOULLI) { - it = new Bernoulli(fraction).sample(blis); - } else if (samplingMethod == SamplingMethod.RESERVOIR) { - it = new Reservoir(lines).sample(blis); - } - while (it.hasNext()) { - rows.add(new Row(COLUMN_NAME, it.next())); - } - - // Write rows to workspace. - ObjectSerDe> serDe = new ObjectSerDe<>(); - byte[] data = serDe.toByteArray(rows); - ws.updateWorkspaceData(workspaceId, DataType.RECORDS, data); - return workspaceId.getId(); - }); - - return new FileConnectionSample(sampleId, name, ConnectionType.FILE.getType(), - samplingMethod.getMethod(), null, - location.toURI().toString(), location.toURI().getPath(), - location.getName()); - } - - @Override - public void initialize(SystemHttpServiceContext context) throws Exception { - super.initialize(context); - final HttpServiceContext ctx = context; - Security.addProvider(new BouncyCastleProvider()); - this.explorer = new Explorer(new DatasetProvider() { - @Override - public Dataset acquire() { - return ctx.getDataset("dataprepfs"); - } - - @Override - public void release(Dataset dataset) { - ctx.discardDataset(dataset); - } - }); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/gcp/GCPUtils.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/gcp/GCPUtils.java deleted file mode 100644 index 37c8e2d67..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/gcp/GCPUtils.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.gcp; - -import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; -import com.google.auth.oauth2.ServiceAccountCredentials; -import com.google.cloud.ServiceOptions; -import com.google.cloud.bigquery.BigQuery; -import com.google.cloud.bigquery.BigQueryOptions; -import com.google.cloud.spanner.Spanner; -import com.google.cloud.spanner.SpannerOptions; -import com.google.cloud.storage.Storage; -import com.google.cloud.storage.StorageOptions; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.connection.ConnectionMeta; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -/** - * Class description here. - */ -public final class GCPUtils { - public static final String PROJECT_ID = "projectId"; - public static final String SERVICE_ACCOUNT_KEYFILE = "service-account-keyfile"; - - public static ServiceAccountCredentials loadLocalFile(String path) throws IOException { - return loadLocalFile(path, Collections.emptyList()); - } - - public static ServiceAccountCredentials loadLocalFile(String path, List scopes) throws IOException { - File credentialsPath = new File(path); - if (!credentialsPath.exists()) { - throw new FileNotFoundException("Service account file " + credentialsPath.getName() + " does not exist."); - } - try (FileInputStream serviceAccountStream = new FileInputStream(credentialsPath)) { - ServiceAccountCredentials serviceAccountCredentials = ServiceAccountCredentials.fromStream(serviceAccountStream); - return (ServiceAccountCredentials) serviceAccountCredentials.createScoped(scopes); - } catch (FileNotFoundException e) { - throw new IOException( - String.format("Unable to find service account file '%s'.", path), e); - } catch (IOException e) { - throw new IOException( - String.format("Issue reading service account file '%s', please check permission of the file", path), e); - } - } - - /** - * Create and return {@link Storage} based on the credentials and project information provided in the connection - */ - public static Storage getStorageService(ConnectionMeta connection) throws IOException { - StorageOptions.Builder storageOptionsBuilder = StorageOptions.newBuilder(); - setProperties(connection, storageOptionsBuilder, Collections.emptyList()); - return storageOptionsBuilder.build().getService(); - } - - /** - * Create and return {@link BigQuery} based on the credentials and project information provided in the connection - */ - public static BigQuery getBigQueryService(ConnectionMeta connection) throws IOException { - BigQueryOptions.Builder bigQueryOptionsBuilder = BigQueryOptions.newBuilder(); - setProperties(connection, bigQueryOptionsBuilder, Arrays.asList("https://www.googleapis.com/auth/drive", - "https://www.googleapis.com/auth/bigquery")); - return bigQueryOptionsBuilder.build().getService(); - } - - /** - * Create and return {@link Spanner} based on the credentials and project information provided in the connection - */ - public static Spanner getSpannerService(ConnectionMeta connection) throws IOException { - SpannerOptions.Builder optionsBuilder = SpannerOptions.newBuilder(); - Map connProperties = connection.getProperties(); - if (connProperties.containsKey(SERVICE_ACCOUNT_KEYFILE)) { - String path = connProperties.get(SERVICE_ACCOUNT_KEYFILE); - optionsBuilder.setCredentials(loadLocalFile(path)); - } - - String projectId = connProperties.containsKey(PROJECT_ID) ? - connProperties.get(PROJECT_ID) : ServiceOptions.getDefaultProjectId(); - if (projectId == null) { - throw new BadRequestException("Could not detect Google Cloud project id from the environment. " + - "Please specify a project id for the connection."); - } - optionsBuilder.setProjectId(projectId); - Spanner spanner = optionsBuilder.build().getService(); - return spanner; - } - - /** - * set credentials and project_id if those are provided in the input connection - */ - private static void setProperties(ConnectionMeta connection, - ServiceOptions.Builder serviceOptions, List scopes) throws IOException { - if (connection.getProperties().containsKey(SERVICE_ACCOUNT_KEYFILE)) { - String path = connection.getProperties().get(SERVICE_ACCOUNT_KEYFILE); - serviceOptions.setCredentials(loadLocalFile(path, scopes)); - } - if (connection.getProperties().containsKey(PROJECT_ID)) { - String projectId = connection.getProperties().get(PROJECT_ID); - serviceOptions.setProjectId(projectId); - } - } - - /** - * Get the project id for the connection - */ - public static String getProjectId(ConnectionMeta connection) { - String projectId = connection.getProperties().get(GCPUtils.PROJECT_ID); - return projectId == null ? ServiceOptions.getDefaultProjectId() : projectId; - } - - /** - * Validates that the project and credentials are either explicitly set in the connection or are available through - * the environment. - * - * @param connection the connection to validate - * @throws IllegalArgumentException if the project or credentials are not available - */ - public static void validateProjectCredentials(ConnectionMeta connection) { - Map connProperties = connection.getProperties(); - if (connection.getProperties().get(PROJECT_ID) == null && ServiceOptions.getDefaultProjectId() == null) { - throw new BadRequestException("Project ID could not be found from the environment. " + - "Please provide the Project ID."); - } - if (connProperties.get(SERVICE_ACCOUNT_KEYFILE) == null) { - try { - GoogleCredential.getApplicationDefault(); - } catch (IOException e) { - throw new BadRequestException("Google credentials could not be found from the environment. " + - "Please provide a service account key."); - } - } - } - - private GCPUtils() { - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/gcs/Buckets.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/gcs/Buckets.java deleted file mode 100644 index 633003a60..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/gcs/Buckets.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.gcs; - -import com.google.cloud.storage.Bucket; - -import java.util.Collection; - -/** - * Holds GCS {@link Bucket} and whether number of buckets added has exceeded the limit. This is a workaround for - * CDAP-14446 and should be removed once pagination is implemented. - */ -public class Buckets { - private Collection buckets; - private boolean limitExceeded; - - public Buckets(Collection buckets, boolean limitExceeded) { - this.buckets = buckets; - this.limitExceeded = limitExceeded; - } - - public Collection getBuckets() { - return buckets; - } - - public boolean isLimitExceeded() { - return limitExceeded; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/gcs/GCSHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/gcs/GCSHandler.java deleted file mode 100644 index 9ed393adb..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/gcs/GCSHandler.java +++ /dev/null @@ -1,478 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.gcs; - -import com.google.api.gax.paging.Page; -import com.google.cloud.ReadChannel; -import com.google.cloud.storage.Acl; -import com.google.cloud.storage.Blob; -import com.google.cloud.storage.BlobId; -import com.google.cloud.storage.Bucket; -import com.google.cloud.storage.Storage; -import com.google.cloud.storage.StorageException; -import com.google.common.base.Splitter; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.api.service.http.SystemHttpServiceContext; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.BytesDecoder; -import io.cdap.wrangler.PropertyIds; -import io.cdap.wrangler.RequestExtractor; -import io.cdap.wrangler.SamplingMethod; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.dataset.connections.ConnectionStore; -import io.cdap.wrangler.dataset.workspace.DataType; -import io.cdap.wrangler.dataset.workspace.Workspace; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.dataset.workspace.WorkspaceMeta; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.PluginSpec; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.proto.gcs.GCSBucketInfo; -import io.cdap.wrangler.proto.gcs.GCSConnectionSample; -import io.cdap.wrangler.proto.gcs.GCSObjectInfo; -import io.cdap.wrangler.proto.gcs.GCSSpec; -import io.cdap.wrangler.service.FileTypeDetector; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; -import io.cdap.wrangler.service.common.Format; -import io.cdap.wrangler.service.gcp.GCPUtils; -import io.cdap.wrangler.utils.ObjectSerDe; -import io.cdap.wrangler.utils.ReferenceNames; -import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.channels.Channels; -import java.nio.channels.WritableByteChannel; -import java.security.Security; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.StringJoiner; -import java.util.regex.Pattern; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - -/** - * Service to explore GCS filesystem - */ -@Deprecated -public class GCSHandler extends AbstractWranglerHandler { - private static final Logger LOG = LoggerFactory.getLogger(GCSHandler.class); - private static final String MAX_SAMPLE_ROWS = "wrangler.gcs.sampling.max.rows"; - static final long FILE_SIZE = 10 * 1024 * 1024; - private FileTypeDetector detector; - private int maxSampleRows; - - @Override - public void initialize(SystemHttpServiceContext context) throws Exception { - super.initialize(context); - Security.addProvider(new BouncyCastleProvider()); - this.detector = new FileTypeDetector(); - this.maxSampleRows = Integer.parseInt(context.getRuntimeArguments().getOrDefault(MAX_SAMPLE_ROWS, "5000")); - } - - @POST - @Path("/contexts/{context}/connections/gcs/test") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void testGCSConnection(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, () -> { - // Extract the body of the request and transform it to the Connection object. - RequestExtractor extractor = new RequestExtractor(request); - ConnectionMeta connection = extractor.getConnectionMeta(ConnectionType.GCS); - GCPUtils.validateProjectCredentials(connection); - - Storage storage = GCPUtils.getStorageService(connection); - storage.list(Storage.BucketListOption.pageSize(1)); - return new ServiceResponse("Success"); - }); - } - - /** - * Lists GCS bucket's contents for the given prefix path. - * @param request HTTP Request handler. - * @param responder HTTP Response handler. - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/gcs/explore") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void exploreGCS(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId, - @QueryParam("path") String path, - @QueryParam("limit") @DefaultValue("1000") int objectLimit) { - respond(request, responder, namespace, ns -> { - String bucketName = ""; - String prefix = null; - - Connection connection = getValidatedConnection(new NamespacedId(ns, connectionId), ConnectionType.GCS); - - int bucketStart = path.indexOf("/"); - if (bucketStart != -1) { - int bucketEnd = path.indexOf("/", bucketStart + 1); - if (bucketEnd != -1) { - bucketName = path.substring(bucketStart + 1, bucketEnd); - if ((bucketEnd + 1) != path.length()) { - prefix = path.substring(bucketEnd + 1); - } - } else { - bucketName = path.substring(bucketStart + 1); - } - } - - Storage storage = GCPUtils.getStorageService(connection); - Set bucketWhitelist = getBucketWhitelist(connection); - - if (bucketName.isEmpty() && prefix == null) { - List values = new ArrayList<>(); - // TODO: Remove objectLimit once CDAP-14446 is fixed. - Buckets buckets = getBuckets(storage, bucketWhitelist, objectLimit); - for (Bucket bucket : buckets.getBuckets()) { - String name = bucket.getName(); - Acl.Entity entity = bucket.getOwner(); - Acl.Entity.Type type = entity == null ? null : entity.getType(); - String owner = "unknown"; - if (type == Acl.Entity.Type.USER) { - owner = ((Acl.User) entity).getEmail(); - } else if (type == Acl.Entity.Type.DOMAIN) { - owner = ((Acl.Domain) entity).getDomain(); - } else if (type == Acl.Entity.Type.PROJECT) { - owner = ((Acl.Project) entity).getProjectId(); - } - String fileType = detector.detectFileType(name.substring(name.lastIndexOf("/") + 1)); - boolean isWrangeable = detector.isWrangleable(fileType); - // TODO: seems like file type and isWrangleable should not be done for buckets... is the UI ignoring these? - GCSBucketInfo bucketInfo = new GCSBucketInfo(name, fileType, owner, bucket.getMetageneration(), - bucket.getGeneratedId(), bucket.getCreateTime() / 1000, - isWrangeable); - values.add(bucketInfo); - } - return new ServiceResponse<>(values, buckets.isLimitExceeded()); - } - - Page list; - if (prefix == null) { - list = storage.list(bucketName, Storage.BlobListOption.currentDirectory()); - } else { - list = storage.list(bucketName, Storage.BlobListOption.currentDirectory(), - Storage.BlobListOption.prefix(prefix)); - } - - Iterator iterator = list.iterateAll().iterator(); - List values = new ArrayList<>(); - boolean limitExceeded = false; - while (iterator.hasNext()) { - Blob blob = iterator.next(); - String p = String.format("/%s/%s", bucketName, blob.getName()); - if (p.equalsIgnoreCase(path)) { - continue; - } - String name = new File(blob.getName()).getName(); - String bucket = blob.getBucket(); - String blobName = blob.getName(); - Long generation = blob.getGeneration(); - - if (blob.isDirectory()) { - values.add(new GCSObjectInfo(name, bucket, p, blobName, generation, true)); - } else { - String fileType = detector.detectFileType(blob.getName()); - boolean isWrangeable = detector.isWrangleable(fileType); - values.add(new GCSObjectInfo(name, bucket, p, blobName, generation, false, fileType, - blob.getCreateTime() / 1000, blob.getUpdateTime() / 1000, blob.getSize(), - isWrangeable)); - } - if (values.size() >= objectLimit) { - limitExceeded = true; - break; - } - } - return new ServiceResponse<>(values, limitExceeded); - }); - } - - private byte[] readGCSFile(Blob blob, int len) throws IOException { - try (ReadChannel reader = blob.reader(); - ByteArrayOutputStream os = new ByteArrayOutputStream(len)) { - reader.setChunkSize(len); - WritableByteChannel writable = Channels.newChannel(os); - ByteBuffer buf = ByteBuffer.wrap(new byte[8192]); - long total = len; - while (reader.read(buf) != -1 && total > 0) { - buf.flip(); - while (buf.hasRemaining()) { - total -= writable.write(buf); - } - buf.clear(); - } - return os.toByteArray(); - } - } - - /** - * Reads GCS object into workspace. - * - * @param request HTTP Request handler. - * @param responder HTTP Response handler. - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/gcs/buckets/{bucket}/read") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void loadObject(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId, - @PathParam("bucket") String bucket, - @QueryParam("blob") String blobPath, - @QueryParam("scope") @DefaultValue(WorkspaceDataset.DEFAULT_SCOPE) String scope) { - respond(request, responder, namespace, ns -> { - String contentType = request.getHeader(PropertyIds.CONTENT_TYPE); - - if (blobPath == null || blobPath.isEmpty()) { - throw new BadRequestException("Required query param 'path' is missing in the input"); - } - - Connection connection = getValidatedConnection(new NamespacedId(ns, connectionId), ConnectionType.GCS); - - Map properties = new HashMap<>(); - Storage storage = GCPUtils.getStorageService(connection); - Blob blob = storage.get(BlobId.of(bucket, blobPath)); - if (blob == null) { - throw new BadRequestException(String.format("Bucket '%s', Path '%s' is not valid.", bucket, blobPath)); - } - - String blobName = blob.getName(); - File file = new File(blobName); - - // Set all properties and write to workspace. - properties.put(PropertyIds.FILE_NAME, file.getCanonicalPath()); - properties.put(PropertyIds.URI, String.format("gs://%s/%s", bucket, blobPath)); - properties.put(PropertyIds.FILE_PATH, blobPath); - properties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.GCS.getType()); - properties.put(PropertyIds.SAMPLER_TYPE, SamplingMethod.NONE.getMethod()); - properties.put(PropertyIds.CONNECTION_ID, connectionId); - properties.put("bucket", bucket); - if (blob.isDirectory()) { - throw new BadRequestException(String.format("Path '%s' is not a file.", blob.getName())); - } - - String sampleId = TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - boolean shouldTruncate = blob.getSize() > FILE_SIZE; - byte[] bytes = readGCSFile(blob, (int) (shouldTruncate ? FILE_SIZE : blob.getSize())); - DataType dataType; - byte[] result = bytes; - - String encoding = BytesDecoder.guessEncoding(bytes); - if (contentType.equalsIgnoreCase("text/plain") - && (encoding.equalsIgnoreCase("utf-8") || encoding.equalsIgnoreCase("ascii"))) { - String data = new String(bytes, encoding); - - Iterator lineIter = Splitter.on(Pattern.compile("\r\n|\r|\n")).split(data).iterator(); - - List rows = new ArrayList<>(); - int numLines = 0; - while (lineIter.hasNext() && numLines < maxSampleRows) { - numLines++; - String line = lineIter.next(); - // CDAP-17029 - ignore the last line if it is empty - if (line.isEmpty() && !lineIter.hasNext()) { - break; - } - rows.add(new Row("body", line)); - } - - // if the content was truncated and we didn't reach the maximum number of sample rows, - // ignore the last line because it's probably not complete. - if (shouldTruncate && !lineIter.hasNext()) { - rows.remove(rows.size() - 1); - } - - if (shouldTruncate && rows.size() == 0) { - throw new BadRequestException("A single line of text file is larger than " - + FILE_SIZE + " bytes, unable to process"); - } - - ObjectSerDe> serDe = new ObjectSerDe<>(); - result = serDe.toByteArray(rows); - dataType = DataType.RECORDS; - properties.put(PropertyIds.FORMAT, Format.TEXT.name()); - } else if (contentType.equalsIgnoreCase("application/json")) { - dataType = DataType.TEXT; - properties.put(PropertyIds.FORMAT, Format.TEXT.name()); - } else if (contentType.equalsIgnoreCase("application/xml")) { - dataType = DataType.TEXT; - properties.put(PropertyIds.FORMAT, Format.BLOB.name()); - } else { - dataType = DataType.BINARY; - properties.put(PropertyIds.FORMAT, Format.BLOB.name()); - } - - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(file.getName()) - .setScope(scope) - .setProperties(properties) - .build(); - NamespacedId workspaceId = ws.createWorkspace(ns, workspaceMeta); - ws.updateWorkspaceData(workspaceId, dataType, result); - return workspaceId.getId(); - }); - - // Preparing return response to include mandatory fields : id and name. - GCSConnectionSample connectionSample = - new GCSConnectionSample(sampleId, file.getName(), ConnectionType.GCS.getType(), SamplingMethod.NONE.getMethod(), - connectionId, String.format("gs://%s/%s", bucket, blobPath), blobPath, blobName, - bucket); - - return new ServiceResponse<>(connectionSample); - }); - } - - /** - * Specification for the source. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/gcs/specification") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void specification(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("connection-id") String connectionId, - @QueryParam("wid") String workspaceId) { - respond(request, responder, namespace, ns -> { - if (workspaceId == null) { - throw new BadRequestException("Workspace ID must be passed as query parameter 'wid'."); - } - - return TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - WorkspaceDataset ws = WorkspaceDataset.get(context); - Connection connection = getValidatedConnection(store, new NamespacedId(ns, connectionId), - ConnectionType.GCS); - - NamespacedId namespacedIdWorkspaceId = new NamespacedId(ns, workspaceId); - Map config = ws.getWorkspace(namespacedIdWorkspaceId).getProperties(); - String formatStr = config.getOrDefault(PropertyIds.FORMAT, Format.TEXT.name()); - Format format = Format.valueOf(formatStr); - String uri = config.get(PropertyIds.URI); - String[] parts = uri.split("/"); - String filename = parts[parts.length - 1]; - String externalFileName = new StringJoiner(".").add(config.get("bucket")).add(filename).toString(); - - Map properties = new HashMap<>(); - properties.put("format", format.name().toLowerCase()); - properties.put("referenceName", ReferenceNames.cleanseReferenceName(externalFileName)); - properties.put("serviceFilePath", connection.getProperties().get(GCPUtils.SERVICE_ACCOUNT_KEYFILE)); - properties.put("project", GCPUtils.getProjectId(connection)); - properties.put("path", uri); - properties.put("recursive", "false"); - properties.put("filenameOnly", "false"); - properties.put("copyHeader", String.valueOf(shouldCopyHeader(ws, namespacedIdWorkspaceId))); - properties.put("schema", format.getSchema().toString()); - PluginSpec pluginSpec = new PluginSpec("GCSFile", "source", properties); - GCSSpec spec = new GCSSpec(pluginSpec); - return new ServiceResponse<>(spec); - }); - - }); - } - - public static Map getConnectorProperties(Map config) { - Map properties = new HashMap<>(); - properties.put("serviceAccountType", "filePath"); - properties.put("serviceFilePath", config.get(GCPUtils.SERVICE_ACCOUNT_KEYFILE)); - properties.put("project", config.get(GCPUtils.PROJECT_ID)); - properties.values().removeIf(Objects::isNull); - return properties; - } - - public static String getPath(Workspace workspace) { - return workspace.getProperties().get(PropertyIds.URI); - } - - private Set getBucketWhitelist(Connection connection) { - String whitelistStr = connection.getProperties().get("bucketWhitelist"); - Set whitelist = new LinkedHashSet<>(); - if (whitelistStr == null) { - return whitelist; - } - for (String bucket : whitelistStr.split(",")) { - whitelist.add(bucket.trim()); - } - return whitelist; - } - - private Buckets getBuckets(Storage storage, Set whitelist, int objectLimit) { - // this will include buckets that can be listed by the service account, but may not include all buckets - // in the whitelist, if the whitelist contains publicly accessible buckets from other projects. - // do some post-processing to filter out anything not in the whitelist and also try and lookup buckets - // that are in the whitelist but not in the returned list - Page list = storage.list(); - List output = new ArrayList<>(); - boolean limitExceeded = false; - Set missingBuckets = new HashSet<>(whitelist); - // use iterateAll to make sure we get all results - for (Bucket bucket : list.iterateAll()) { - String bucketName = bucket.getName(); - missingBuckets.remove(bucketName); - if (whitelist.isEmpty() || whitelist.contains(bucketName)) { - if (output.size() >= objectLimit) { - limitExceeded = true; - break; - } - output.add(bucket); - } - } - // this only contains buckets that are in the whitelist but were not returned by the list call - for (String whitelistBucket : missingBuckets) { - try { - Bucket bucket = storage.get(whitelistBucket); - if (bucket != null) { - if (output.size() >= objectLimit) { - limitExceeded = true; - break; - } - output.add(bucket); - } - } catch (StorageException e) { - // ignore and move on - LOG.debug("Exception getting bucket {} from the whitelist.", whitelistBucket, e); - } - } - - return new Buckets(output, limitExceeded); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/kafka/KafkaConfiguration.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/kafka/KafkaConfiguration.java deleted file mode 100644 index a6c26cbf8..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/kafka/KafkaConfiguration.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.kafka; - -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; -import org.apache.kafka.clients.consumer.ConsumerConfig; -import org.apache.kafka.common.serialization.ByteArrayDeserializer; -import org.apache.kafka.common.serialization.DoubleDeserializer; -import org.apache.kafka.common.serialization.IntegerDeserializer; -import org.apache.kafka.common.serialization.LongDeserializer; -import org.apache.kafka.common.serialization.StringDeserializer; - -import java.util.Map; -import java.util.Properties; -import java.util.UUID; - -/** - * A class for managing configurations of Kafka. - */ -public final class KafkaConfiguration { - private final String connection; - private final Properties props; - - private String keyDeserializer; - private String valueDeserializer; - - public KafkaConfiguration(ConnectionMeta conn) { - keyDeserializer = StringDeserializer.class.getName(); - valueDeserializer = keyDeserializer; - - if (conn.getType() != ConnectionType.KAFKA) { - throw new IllegalArgumentException( - String.format("Connection '%s' is not a Kafka configuration.", conn.getName()) - ); - } - - Map properties = conn.getProperties(); - if (properties == null || properties.size() == 0) { - throw new IllegalArgumentException("Kafka properties are not defined. Check connection setting."); - } - - if (properties.containsKey("brokers")) { - connection = properties.get("brokers"); - } else { - throw new IllegalArgumentException("Kafka Brokers not defined."); - } - - if (properties.containsKey("key.type")) { - keyDeserializer = deserialize(properties.get("key.type")); - } - - if (properties.containsKey("value.type")) { - valueDeserializer = deserialize(properties.get("value.type")); - } - String requestTimeoutMs = properties.get(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG); - // default the request timeout to 15 seconds, to avoid hanging for minutes - if (requestTimeoutMs == null) { - requestTimeoutMs = "15000"; - } - - props = new Properties(); - props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, connection); - props.put(ConsumerConfig.CLIENT_ID_CONFIG, UUID.randomUUID().toString()); - props.put(ConsumerConfig.GROUP_ID_CONFIG, UUID.randomUUID().toString()); - props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); - props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, keyDeserializer); - props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, valueDeserializer); - props.put(ConsumerConfig.EXCLUDE_INTERNAL_TOPICS_CONFIG, "true"); - props.put(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG, requestTimeoutMs); - } - - /** - * @return String representation of key deserializer of kafka topic. - */ - public String getKeyDeserializer() { - return keyDeserializer; - } - - /** - * @return String representation of value deserializer of kafka topic. - */ - public String getValueDeserializer() { - return valueDeserializer; - } - - private String deserialize(String type) { - type = type.toLowerCase(); - switch(type) { - case "string": - return StringDeserializer.class.getName(); - - case "int": - return IntegerDeserializer.class.getName(); - - case "long": - return LongDeserializer.class.getName(); - - case "double": - return DoubleDeserializer.class.getName(); - - case "bytes": - return ByteArrayDeserializer.class.getName(); - - default: - throw new IllegalArgumentException( - String.format("Deserializer '%s' type not supported.", type) - ); - } - } - - /** - * @return connection information of kafka. - */ - public String getConnection() { - return connection; - } - - /** - * @return Kafka connection property. - */ - public Properties get() { - return props; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/kafka/KafkaHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/kafka/KafkaHandler.java deleted file mode 100644 index 298756b09..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/kafka/KafkaHandler.java +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.kafka; - -import com.google.common.collect.Lists; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.PropertyIds; -import io.cdap.wrangler.RequestExtractor; -import io.cdap.wrangler.SamplingMethod; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.dataset.connections.ConnectionStore; -import io.cdap.wrangler.dataset.workspace.DataType; -import io.cdap.wrangler.dataset.workspace.Workspace; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.dataset.workspace.WorkspaceMeta; -import io.cdap.wrangler.proto.ConnectionSample; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.PluginSpec; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.proto.kafka.KafkaSpec; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; -import io.cdap.wrangler.utils.ObjectSerDe; -import io.cdap.wrangler.utils.ReferenceNames; -import org.apache.kafka.clients.consumer.ConsumerRecord; -import org.apache.kafka.clients.consumer.ConsumerRecords; -import org.apache.kafka.clients.consumer.KafkaConsumer; -import org.apache.kafka.common.PartitionInfo; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - -/** - * Service for handling Kafka connections. - */ -@Deprecated -public final class KafkaHandler extends AbstractWranglerHandler { - - @POST - @Path("contexts/{context}/connections/kafka/test") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void test(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, () -> { - // Extract the body of the request and transform it to the Connection object. - RequestExtractor extractor = new RequestExtractor(request); - ConnectionMeta connection = extractor.getConnectionMeta(ConnectionType.KAFKA); - - KafkaConfiguration config = new KafkaConfiguration(connection); - Properties props = config.get(); - - // Checks connection by extracting topics. - try (KafkaConsumer consumer = new KafkaConsumer<>(props)) { - consumer.listTopics(); - } - return new ServiceResponse(String.format("Successfully connected to Kafka at %s", config.getConnection())); - }); - } - - /** - * List all kafka topics. - * - * @param request HTTP requests handler. - * @param responder HTTP response handler. - */ - @POST - @Path("contexts/{context}/connections/kafka") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void list(HttpServiceRequest request, HttpServiceResponder responder, @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - // Extract the body of the request and transform it to the Connection object. - RequestExtractor extractor = new RequestExtractor(request); - ConnectionMeta connection = extractor.getConnectionMeta(ConnectionType.KAFKA); - - KafkaConfiguration config = new KafkaConfiguration(connection); - Properties props = config.get(); - - // Extract topics from Kafka. - try (KafkaConsumer consumer = new KafkaConsumer<>(props)) { - Map> topics = consumer.listTopics(); - return new ServiceResponse<>(topics.keySet()); - } - }); - } - - /** - * Reads a kafka topic into workspace. - * - * @param request HTTP requests handler. - * @param responder HTTP response handler. - * @param id Connection id for which the tables need to be listed from database. - */ - @GET - @Path("contexts/{context}/connections/{id}/kafka/{topic}/read") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void read(HttpServiceRequest request, HttpServiceResponder responder, @PathParam("context") String namespace, - @PathParam("id") String id, @PathParam("topic") String topic, - @QueryParam("lines") int lines, - @QueryParam("scope") @DefaultValue(WorkspaceDataset.DEFAULT_SCOPE) String scope) { - respond(request, responder, namespace, ns -> TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - WorkspaceDataset ws = WorkspaceDataset.get(context); - Connection connection = getValidatedConnection(store, new NamespacedId(ns, id), ConnectionType.KAFKA); - - KafkaConfiguration config = new KafkaConfiguration(connection); - KafkaConsumer consumer = new KafkaConsumer<>(config.get()); - consumer.subscribe(Lists.newArrayList(topic)); - - Map properties = new HashMap<>(); - properties.put(PropertyIds.NAME, topic); - properties.put(PropertyIds.CONNECTION_ID, id); - properties.put(PropertyIds.TOPIC, topic); - properties.put(PropertyIds.BROKER, config.getConnection()); - properties.put(PropertyIds.CONNECTION_TYPE, connection.getType().getType()); - properties.put(PropertyIds.KEY_DESERIALIZER, config.getKeyDeserializer()); - properties.put(PropertyIds.VALUE_DESERIALIZER, config.getValueDeserializer()); - properties.put(PropertyIds.SAMPLER_TYPE, SamplingMethod.FIRST.getMethod()); - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(topic) - .setScope(scope) - .setProperties(properties) - .build(); - NamespacedId workspaceId = ws.createWorkspace(ns, workspaceMeta); - - try { - boolean running = true; - List recs = new ArrayList<>(); - int count = lines; - while (running) { - ConsumerRecords records = consumer.poll(10000); - for (ConsumerRecord record : records) { - Row rec = new Row(); - rec.add("body", record.value()); - recs.add(rec); - if (count < 0) { - break; - } - count--; - } - running = false; - } - - ObjectSerDe> serDe = new ObjectSerDe<>(); - byte[] data = serDe.toByteArray(recs); - ws.updateWorkspaceData(workspaceId, DataType.RECORDS, data); - - ConnectionSample sample = new ConnectionSample(workspaceId.getId(), topic, ConnectionType.KAFKA.getType(), - SamplingMethod.FIRST.getMethod(), id); - return new ServiceResponse<>(sample); - } finally { - consumer.close(); - } - })); - } - - /** - * Specification for the source. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param id of the connection. - * @param topic for which the specification need to be generated. - */ - @GET - @Path("contexts/{context}/connections/{id}/kafka/{topic}/specification") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void specification(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("id") String id, @PathParam("topic") String topic) { - respond(request, responder, namespace, ns -> { - Connection conn = getValidatedConnection(new NamespacedId(ns, id), ConnectionType.KAFKA); - Map connProperties = conn.getProperties(); - - Map properties = new HashMap<>(); - properties.put("topic", topic); - properties.put("referenceName", ReferenceNames.cleanseReferenceName(topic)); - properties.put("brokers", connProperties.get(PropertyIds.BROKER)); - properties.put("kafkaBrokers", connProperties.get(PropertyIds.BROKER)); - properties.put("keyField", connProperties.get(PropertyIds.KEY_DESERIALIZER)); - properties.put("format", "text"); - - PluginSpec pluginSpec = new PluginSpec("Kafka", "source", properties); - KafkaSpec kafkaSpec = new KafkaSpec(pluginSpec); - return new ServiceResponse<>(kafkaSpec); - }); - } - - public static Map getConnectorProperties(Map config) { - Map properties = new HashMap<>(); - properties.put("brokers", config.get(PropertyIds.BROKER)); - properties.put("kafkaBrokers", config.get(PropertyIds.BROKER)); - return properties; - } - - public static String getPath(Workspace workspace) { - return workspace.getProperties().get(PropertyIds.TOPIC); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/macro/ServiceMacroEvaluator.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/macro/ServiceMacroEvaluator.java deleted file mode 100644 index 6370db02b..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/macro/ServiceMacroEvaluator.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.macro; - -import io.cdap.cdap.api.common.Bytes; -import io.cdap.cdap.api.macro.InvalidMacroException; -import io.cdap.cdap.api.macro.MacroEvaluator; -import io.cdap.cdap.api.security.store.SecureStoreData; -import io.cdap.cdap.api.service.http.SystemHttpServiceContext; - -import java.util.Map; - -/** - * Dataprep Service macro evaluator. - */ -public class ServiceMacroEvaluator implements MacroEvaluator { - private static final String SECURE_FUNCTION = "secure"; - private final String namespace; - private final SystemHttpServiceContext context; - private final Map arguments; - - public ServiceMacroEvaluator(String namespace, SystemHttpServiceContext context) { - this.namespace = namespace; - this.context = context; - this.arguments = context.getRuntimeArguments(); - } - - @Override - public String lookup(String property) throws InvalidMacroException { - String val = arguments.get(property); - if (val == null) { - throw new InvalidMacroException(String.format("Argument '%s' is not defined.", property)); - } - return val; - } - - @Override - public String evaluate(String macroFunction, String... arguments) throws InvalidMacroException { - if (!SECURE_FUNCTION.equals(macroFunction)) { - throw new InvalidMacroException(String.format("%s is not a supported macro function.", macroFunction)); - } - if (arguments.length != 1) { - throw new InvalidMacroException("Secure macro function only supports 1 argument."); - } - try { - SecureStoreData secureStoreData = context.get(namespace, arguments[0]); - return Bytes.toString(secureStoreData.get()); - } catch (Exception e) { - throw new InvalidMacroException("Failed to resolve macro '" + macroFunction + "(" + arguments[0] + ")'", e); - } - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/s3/S3Configuration.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/s3/S3Configuration.java deleted file mode 100644 index 71ac03d85..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/s3/S3Configuration.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.s3; - -import com.amazonaws.auth.AWSCredentials; -import com.google.common.collect.ImmutableList; -import io.cdap.wrangler.proto.connection.ConnectionMeta; - -import java.util.List; -import java.util.Map; - -/** - * Credentials of the authorized user connecting to AWS and AWS region connecting to - */ -public class S3Configuration implements AWSCredentials { - private static final List CONFIG_FIELDS = ImmutableList.of("accessKeyId", "accessSecretKey", "region"); - private final String accessKeyId; - private final String accessSecretKey; - private final String region; - - S3Configuration(Map properties) { - if (properties == null || properties.size() == 0) { - throw new IllegalArgumentException("S3 properties are not defined. Check connection setting."); - } - - for (String property : CONFIG_FIELDS) { - if (!properties.containsKey(property)) { - throw new IllegalArgumentException("Missing configuration in connection for property " + property); - } - } - accessKeyId = properties.get("accessKeyId"); - accessSecretKey = properties.get("accessSecretKey"); - region = properties.get("region"); - } - - @Override - public String getAWSAccessKeyId() { - return accessKeyId; - } - - @Override - public String getAWSSecretKey() { - return accessSecretKey; - } - - public String getRegion() { - return region; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/s3/S3Handler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/s3/S3Handler.java deleted file mode 100644 index 8244a9fcf..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/s3/S3Handler.java +++ /dev/null @@ -1,464 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.s3; - -import com.amazonaws.regions.Region; -import com.amazonaws.regions.Regions; -import com.amazonaws.services.s3.AmazonS3; -import com.amazonaws.services.s3.AmazonS3Client; -import com.amazonaws.services.s3.model.AmazonS3Exception; -import com.amazonaws.services.s3.model.Bucket; -import com.amazonaws.services.s3.model.GetObjectRequest; -import com.amazonaws.services.s3.model.ListObjectsRequest; -import com.amazonaws.services.s3.model.ObjectListing; -import com.amazonaws.services.s3.model.S3Object; -import com.amazonaws.services.s3.model.S3ObjectSummary; -import com.google.common.base.Charsets; -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.api.service.http.SystemHttpServiceContext; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.PropertyIds; -import io.cdap.wrangler.RequestExtractor; -import io.cdap.wrangler.SamplingMethod; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.dataset.connections.ConnectionStore; -import io.cdap.wrangler.dataset.workspace.DataType; -import io.cdap.wrangler.dataset.workspace.Workspace; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.dataset.workspace.WorkspaceMeta; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.PluginSpec; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.StatusCodeException; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.proto.s3.S3ConnectionSample; -import io.cdap.wrangler.proto.s3.S3ObjectInfo; -import io.cdap.wrangler.proto.s3.S3Spec; -import io.cdap.wrangler.sampling.Bernoulli; -import io.cdap.wrangler.sampling.Poisson; -import io.cdap.wrangler.sampling.Reservoir; -import io.cdap.wrangler.service.FileTypeDetector; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; -import io.cdap.wrangler.service.common.Format; -import io.cdap.wrangler.service.explorer.BoundedLineInputStream; -import io.cdap.wrangler.service.macro.ServiceMacroEvaluator; -import io.cdap.wrangler.utils.ObjectSerDe; - -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - -/** - * Service to explore S3 filesystem. - */ -@Deprecated -public class S3Handler extends AbstractWranglerHandler { - private static final String PATH_FORMAT = "s3n://%s/%s"; - private static final String BUCKET_NAME = "bucket-name"; - private static final String KEY = "key"; - private static final String COLUMN_NAME = "body"; - private static final int FILE_SIZE = 10 * 1024 * 1024; - private static final List MACRO_FIELDS = ImmutableList.of("accessKeyId", "accessSecretKey"); - private static final FileTypeDetector detector = new FileTypeDetector(); - private final Map macroEvaluators = new HashMap<>(); - - @POST - @Path("/contexts/{context}/connections/s3/test") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void testS3Connection(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, () -> { - // Extract the body of the request and transform it to the Connection object. - RequestExtractor extractor = new RequestExtractor(request); - ConnectionMeta connection = extractor.getConnectionMeta(ConnectionType.S3); - // creating a client doesn't test the connection, we will do list buckets so the connection is tested. - initializeAndGetS3Client(connection, namespace, getContext()).listBuckets(); - return new ServiceResponse("Success"); - }); - } - - // creates s3 client and sets region and returns the initialized client - private AmazonS3 initializeAndGetS3Client(ConnectionMeta connection, String namespace, - SystemHttpServiceContext context) { - Map evaluateMacros = evaluateMacros(connection, context, namespace); - evaluateMacros.put("region", connection.getProperties().get("region")); - S3Configuration s3Configuration = new S3Configuration(evaluateMacros); - AmazonS3 s3 = new AmazonS3Client(s3Configuration); - Region region = Region.getRegion(Regions.fromName(s3Configuration.getRegion())); - s3.setRegion(region); - return s3; - } - - /** - * Lists S3 bucket's contents for the given prefix path. - * @param request HTTP Request handler. - * @param responder HTTP Response handler. - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/s3/explore") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void getS3BucketInfo(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("connection-id") String connectionId, - @QueryParam("path") String path, - @QueryParam("limit") @DefaultValue("1000") int bucketLimit) { - respond(request, responder, namespace, ns -> { - try { - Connection connection = getValidatedConnection(new NamespacedId(ns, connectionId), ConnectionType.S3); - String bucketName = ""; - String prefix = null; - int bucketStart = path.indexOf("/"); - if (bucketStart != -1) { - int bucketEnd = path.indexOf("/", bucketStart + 1); - if (bucketEnd != -1) { - bucketName = path.substring(bucketStart + 1, bucketEnd); - if ((bucketEnd + 1) != path.length()) { - prefix = path.substring(bucketEnd + 1); - } - } else { - bucketName = path.substring(bucketStart + 1); - } - } - - AmazonS3 s3 = initializeAndGetS3Client(connection, namespace, getContext()); - if (bucketName.isEmpty() && prefix == null) { - List buckets = s3.listBuckets(); - List bucketInfo = new ArrayList<>(buckets.size()); - for (Bucket bucket : buckets) { - bucketInfo.add(fromBucket(bucket)); - } - return new ServiceResponse<>(bucketInfo); - } - - ListObjectsRequest listObjectsRequest = new ListObjectsRequest(); - listObjectsRequest.setBucketName(bucketName); - if (prefix != null) { - listObjectsRequest.setPrefix(prefix); - } - listObjectsRequest.setDelimiter("/"); - ObjectListing result; - List objects = new ArrayList<>(); - // TODO: Remove this once CDAP-14446 is fixed. - boolean limitExceeded = false; - do { - if (objects.size() >= bucketLimit) { - limitExceeded = true; - break; - } - result = s3.listObjects(listObjectsRequest); - for (String dir : result.getCommonPrefixes()) { - if (dir.equalsIgnoreCase("/")) { - continue; - } - objects.add(fromDir(dir)); - } - for (S3ObjectSummary summary : result.getObjectSummaries()) { - objects.add(fromObject(summary, detector)); - } - listObjectsRequest.setMarker(result.getMarker()); - } while (result.isTruncated()); - - return new ServiceResponse<>(objects, limitExceeded); - } catch (AmazonS3Exception e) { - throw new StatusCodeException(e.getMessage(), e, e.getStatusCode()); - } - }); - } - - /** - * Reads s3 object into workspace - * @param request HTTP Request handler. - * @param responder HTTP Response handler. - */ - @POST - @Path("contexts/{context}/connections/{connection-id}/s3/buckets/{bucket-name}/read") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void loadObject(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("connection-id") String connectionId, - @PathParam("bucket-name") String bucketName, - @QueryParam("key") String key, @QueryParam("lines") int lines, - @QueryParam("sampler") String sampler, @QueryParam("fraction") double fraction, - @QueryParam("scope") @DefaultValue(WorkspaceDataset.DEFAULT_SCOPE) String scope) { - respond(request, responder, namespace, ns -> { - try { - if (Strings.isNullOrEmpty(key)) { - throw new BadRequestException("Required query param 'key' is missing in the input"); - } - - String header = request.getHeader(PropertyIds.CONTENT_TYPE); - NamespacedId namespacedConnId = new NamespacedId(ns, connectionId); - Connection connection = getValidatedConnection(namespacedConnId, ConnectionType.S3); - AmazonS3 s3 = initializeAndGetS3Client(connection, namespace, getContext()); - S3Object object = s3.getObject(new GetObjectRequest(bucketName, key)); - if (object == null) { - throw new BadRequestException( - String.format("S3 Object with key %s and bucket-name %s is not found", key, bucketName)); - } - - try (InputStream inputStream = object.getObjectContent()) { - S3ConnectionSample sample; - if (header != null && header.equalsIgnoreCase("text/plain")) { - sample = loadSamplableFile(namespacedConnId, scope, inputStream, object, lines, fraction, sampler); - } else { - sample = loadFile(namespacedConnId, scope, inputStream, object); - } - return new ServiceResponse<>(sample); - } - } catch (AmazonS3Exception e) { - throw new StatusCodeException(e.getMessage(), e, e.getStatusCode()); - } - }); - } - - /** - * Specification for the source. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param bucketName S3 object's bucket name - * @param key S3 object's key - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/s3/buckets/{bucket-name}/specification") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void specification(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("connection-id") String connectionId, - @PathParam("bucket-name") String bucketName, @QueryParam("key") String key, - @QueryParam("wid") String workspaceId) { - respond(request, responder, namespace, ns -> TransactionRunners.run(getContext(), context -> { - ConnectionStore store = ConnectionStore.get(context); - WorkspaceDataset ws = WorkspaceDataset.get(context); - Format format = Format.TEXT; - NamespacedId namespacedWorkspaceId = new NamespacedId(ns, workspaceId); - if (workspaceId != null) { - Map config = ws.getWorkspace(namespacedWorkspaceId).getProperties(); - String formatStr = config.getOrDefault(PropertyIds.FORMAT, Format.TEXT.name()); - format = Format.valueOf(formatStr); - } - Connection conn = getValidatedConnection(store, new NamespacedId(ns, connectionId), ConnectionType.S3); - S3Configuration s3Configuration = new S3Configuration(conn.getProperties()); - Map properties = new HashMap<>(); - properties.put("format", format.name().toLowerCase()); - properties.put("accessID", s3Configuration.getAWSAccessKeyId()); - properties.put("accessKey", s3Configuration.getAWSSecretKey()); - properties.put("path", String.format("s3n://%s/%s", bucketName, key)); - properties.put("copyHeader", String.valueOf(shouldCopyHeader(ws, namespacedWorkspaceId))); - properties.put("schema", format.getSchema().toString()); - - PluginSpec pluginSpec = new PluginSpec("S3", "source", properties); - S3Spec spec = new S3Spec(pluginSpec); - return new ServiceResponse<>(spec); - })); - } - - public static Map getConnectorProperties(Map config) { - Map properties = new HashMap<>(); - S3Configuration s3Configuration = new S3Configuration(config); - properties.put("accessID", s3Configuration.getAWSAccessKeyId()); - properties.put("accessKey", s3Configuration.getAWSSecretKey()); - properties.put("authenticationMethod", "Access Credentials"); - properties.put("region", s3Configuration.getRegion()); - return properties; - } - - public static String getPath(Workspace workspace) { - return String.format(PATH_FORMAT, workspace.getProperties().get(BUCKET_NAME), workspace.getProperties().get(KEY)); - } - - private S3ConnectionSample loadSamplableFile(NamespacedId connectionId, String scope, InputStream inputStream, - S3Object s3Object, int lines, double fraction, - String sampler) throws IOException { - SamplingMethod samplingMethod; - if (sampler == null || sampler.isEmpty() || SamplingMethod.fromString(sampler) == null) { - samplingMethod = SamplingMethod.FIRST; - } else { - samplingMethod = SamplingMethod.fromString(sampler); - } - - try (BoundedLineInputStream blis = BoundedLineInputStream.iterator(inputStream, Charsets.UTF_8, lines)) { - String name = s3Object.getKey(); - - String fileName = name.substring(name.lastIndexOf("/") + 1); - Map properties = new HashMap<>(); - properties.put(PropertyIds.NAME, fileName); - properties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.S3.getType()); - properties.put(PropertyIds.SAMPLER_TYPE, samplingMethod.getMethod()); - properties.put(PropertyIds.CONNECTION_ID, connectionId.getId()); - properties.put(BUCKET_NAME, s3Object.getBucketName()); - properties.put(KEY, s3Object.getKey()); - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(fileName) - .setScope(scope) - .setProperties(properties) - .build(); - String sampleId = TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - NamespacedId workspaceId = ws.createWorkspace(connectionId.getNamespace(), workspaceMeta); - - // Iterate through lines to extract only 'limit' random lines. - // Depending on the type, the sampling of the input is performed. - List rows = new ArrayList<>(); - Iterator it = blis; - if (samplingMethod == SamplingMethod.POISSON) { - it = new Poisson(fraction).sample(blis); - } else if (samplingMethod == SamplingMethod.BERNOULLI) { - it = new Bernoulli(fraction).sample(blis); - } else if (samplingMethod == SamplingMethod.RESERVOIR) { - it = new Reservoir(lines).sample(blis); - } - while (it.hasNext()) { - rows.add(new Row(COLUMN_NAME, it.next())); - } - - // Write rows to workspace. - ObjectSerDe> serDe = new ObjectSerDe<>(); - byte[] data = serDe.toByteArray(rows); - ws.updateWorkspaceData(workspaceId, DataType.RECORDS, data); - return workspaceId.getId(); - }); - - // Preparing return response to include mandatory fields : id and name. - return new S3ConnectionSample(sampleId, name, ConnectionType.S3.getType(), - samplingMethod.getMethod(), connectionId.getId(), - s3Object.getBucketName(), s3Object.getKey()); - } - } - - private S3ConnectionSample loadFile(NamespacedId connectionId, String scope, - InputStream inputStream, S3Object s3Object) throws IOException { - if (s3Object.getObjectMetadata().getContentLength() > FILE_SIZE) { - throw new BadRequestException("Files greater than 10MB are not supported."); - } - - // Creates workspace. - String name = s3Object.getKey(); - String fileName = name.substring(name.lastIndexOf("/") + 1); - - byte[] bytes = new byte[(int) s3Object.getObjectMetadata().getContentLength() + 1]; - try (BufferedInputStream stream = new BufferedInputStream(inputStream)) { - stream.read(bytes); - } - - Map properties = new HashMap<>(); - properties.put(PropertyIds.NAME, fileName); - properties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.S3.getType()); - properties.put(PropertyIds.SAMPLER_TYPE, SamplingMethod.NONE.getMethod()); - properties.put(PropertyIds.CONNECTION_ID, connectionId.getId()); - DataType dataType = getDataType(name); - Format format = dataType == DataType.BINARY ? Format.BLOB : Format.TEXT; - properties.put(PropertyIds.FORMAT, format.name()); - - // S3 specific properties. - properties.put(BUCKET_NAME, s3Object.getBucketName()); - properties.put(KEY, s3Object.getKey()); - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(fileName) - .setScope(scope) - .setProperties(properties) - .build(); - String sampleId = TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - NamespacedId workspaceId = ws.createWorkspace(connectionId.getNamespace(), workspaceMeta); - ws.updateWorkspaceData(workspaceId, getDataType(name), bytes); - return workspaceId.getId(); - }); - - // Preparing return response to include mandatory fields : id and name. - return new S3ConnectionSample(sampleId, name, ConnectionType.S3.getType(), - SamplingMethod.NONE.getMethod(), connectionId.getId(), - s3Object.getBucketName(), s3Object.getKey()); - } - - /** - * get data type from the file type. - * - * @param fileName the file name - * @return DataType - */ - private DataType getDataType(String fileName) { - // detect fileType from fileName - String fileType = detector.detectFileType(fileName); - DataType dataType = DataType.fromString(fileType); - return dataType == null ? DataType.BINARY : dataType; - } - - private static S3ObjectInfo fromBucket(Bucket bucket) { - return S3ObjectInfo.builder(bucket.getName(), "bucket") - .setCreated(bucket.getCreationDate().getTime()) - .setOwner(bucket.getOwner().getDisplayName()) - .setIsDirectory(true) - .build(); - } - - public static S3ObjectInfo fromDir(String dir) { - String[] parts = dir.split("/"); - String name = dir; - if (parts.length > 1) { - name = parts[parts.length - 1]; - } - return S3ObjectInfo.builder(name, "directory").setPath(dir).setIsDirectory(true).build(); - } - - public static S3ObjectInfo fromObject(S3ObjectSummary summary, FileTypeDetector detector) { - int idx = summary.getKey().lastIndexOf("/"); - String name = summary.getKey(); - if (idx != -1) { - name = name.substring(idx + 1); - } - String type = detector.detectFileType(name); - boolean canWrangle = detector.isWrangleable(type); - return S3ObjectInfo.builder(name, type) - .setPath(summary.getKey()) - .setOwner(summary.getOwner().getDisplayName()) - .setStorageClass(summary.getStorageClass()) - .setLastModified(summary.getLastModified().getTime()) - .setSize(summary.getSize()) - .setIsDirectory(false) - .setCanWrangle(canWrangle) - .build(); - } - - /** - * Evaluates all the MACRO_FIELDS. - */ - private Map evaluateMacros(ConnectionMeta connection, SystemHttpServiceContext context, - String namespaceName) { - Map toEvaluate = new HashMap<>(); - for (String field : MACRO_FIELDS) { - toEvaluate.put(field, connection.getProperties().get(field)); - } - - macroEvaluators.putIfAbsent(namespaceName, new ServiceMacroEvaluator(namespaceName, context)); - return context.evaluateMacros(namespaceName, toEvaluate, macroEvaluators.get(namespaceName)); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/schema/DataModelHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/schema/DataModelHandler.java deleted file mode 100644 index 1b17c98a8..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/schema/DataModelHandler.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.wrangler.service.schema; - -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.RequestExtractor; -import io.cdap.wrangler.datamodel.DataModelGlossary; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.Contexts; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.NotFoundException; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.schema.DataModelSchemaEntry; -import io.cdap.wrangler.proto.schema.DataModelUrlRequest; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; - -import org.apache.avro.Schema; - -import java.util.ArrayList; -import java.util.List; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; - -/** - * The {@link DataModelHandler} class provides data model schema listings APIs. - */ -public class DataModelHandler extends AbstractWranglerHandler { - - - /** - * Uploads a one or more data model schemas into the internal data model glossary. - * The full name and revision of each data model schema form a unique identify. - * - * Returns: - * 200 - if data model successfully added. - * 400 - if the request is missing a url parameter in the body. - * 400 - if the server was unable to load the data model at the specified url. - * - * @param request the HTTP request handler. - * @param responder the HTTP response handler. - * @param namespace the context of the request. - */ - @POST - @Path("contexts/{context}/datamodels/schemas") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void upload(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> { - RequestExtractor handler = new RequestExtractor(request); - DataModelUrlRequest dataModelUrl = handler.getContent("UTF-8", DataModelUrlRequest.class); - if (dataModelUrl == null || dataModelUrl.getUrl() == null) { - throw new BadRequestException("Request body is missing required url field."); - } - if (!DataModelGlossary.initialize(dataModelUrl.getUrl())) { - throw new BadRequestException("Unable to load data models."); - } - return new ServiceResponse<>(dataModelUrl); - }); - } - - - /** - * Returns a list of all data models available. By default excludes the data model schemas and - * only returns the meta data due to potentially large size of the schemas. - * - * Returns: - * 200 - if successful. - * 404 - if there no data models loaded. - * - * @param request the HTTP request handler. - * @param responder the HTTP response handler. - * @param namespace the context of the request. - */ - @GET - @Path("contexts/{context}/datamodels/schemas") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void listSchemas(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, namespace, ns -> TransactionRunners.run(getContext(), context -> { - if (DataModelGlossary.getGlossary() == null) { - throw new NotFoundException("There is no data model initialized."); - } - Namespace defaultNamespace = new Namespace(Contexts.SYSTEM, 0L); - List results = new ArrayList<>(); - for (Schema schema : DataModelGlossary.getGlossary().getAll()) { - results.add(new DataModelSchemaEntry(new NamespacedId(defaultNamespace, schema.getFullName()), - schema.getName(), - schema.getDoc(), - Long.parseLong(schema.getProp("_revision")) - )); - } - return new ServiceResponse<>(results); - })); - } - - /** - * Retrieves the schema of a specific revision of a data model. - * - * Returns: - * 200 - if the appropriate schema version has been located. - * 404 - if no schema matching the id or version specified exists. - * - * @param request the HTTP request handler. - * @param responder the HTTP response handler. - * @param namespace the context of the request. - * @param id of the data model. - * @param revision of the data model. - */ - @GET - @Path("contexts/{context}/datamodels/schemas/{id}/revisions/{revision}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void listSchema(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("id") String id, @PathParam("revision") long revision) { - respond(request, responder, namespace, ns -> TransactionRunners.run(getContext(), context -> { - if (DataModelGlossary.getGlossary() == null) { - throw new NotFoundException("There is no data model initialized."); - } - Schema schema = DataModelGlossary.getGlossary().get(id, revision); - if (schema == null) { - throw new NotFoundException(String.format("unable to find schema %s revision %d", id, revision)); - } - return new ServiceResponse<>(schema.toString()); - })); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/schema/SchemaRegistryHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/schema/SchemaRegistryHandler.java deleted file mode 100644 index 05c7f8703..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/schema/SchemaRegistryHandler.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.schema; - -import com.google.gson.Gson; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.dataset.schema.SchemaDescriptor; -import io.cdap.wrangler.dataset.schema.SchemaRegistry; -import io.cdap.wrangler.proto.BadRequestException; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.NotFoundException; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.schema.SchemaDescriptorType; -import io.cdap.wrangler.proto.schema.SchemaEntryVersion; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; - -import java.nio.ByteBuffer; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - -/** - * This class {@link SchemaRegistryHandler} provides schema management service. - */ -public class SchemaRegistryHandler extends AbstractWranglerHandler { - private static final Gson GSON = new Gson(); - - /** - * Creates an entry for Schema with id, name, description and type of schema. - * if the 'id' already exists, then it overwrites the data with new information. - * This responds with HTTP - OK (200) or Internal Error (500). - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param id of schema to be created. - * @param name for the schema id being created. - * @param description associated with schema. - * @param type of schema. - */ - @PUT - @Path("contexts/{context}/schemas") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void create(HttpServiceRequest request, HttpServiceResponder responder, @PathParam("context") String namespace, - @QueryParam("id") String id, @QueryParam("name") String name, - @QueryParam("description") String description, @QueryParam("type") String type) { - respond(request, responder, namespace, ns -> { - if (id == null || id.isEmpty()) { - throw new BadRequestException("Schema id must be specified."); - } - if (name == null || name.isEmpty()) { - throw new BadRequestException("Schema name must be specified."); - } - SchemaDescriptorType descriptorType = GSON.fromJson(type, SchemaDescriptorType.class); - if (descriptorType == null) { - throw new BadRequestException(String.format("Schema type '%s' is invalid.", type)); - } - if (description == null || description.isEmpty()) { - throw new BadRequestException("Schema description must be specified."); - } - SchemaDescriptor descriptor = new SchemaDescriptor(new NamespacedId(ns, id), - name, description, descriptorType); - TransactionRunners.run(getContext(), context -> { - SchemaRegistry registry = SchemaRegistry.get(context); - registry.write(descriptor); - }); - return new ServiceResponse(String.format("Successfully created schema entry with id '%s', name '%s'", - id, name)); - }); - } - - /** - * Uploads a schema to be associated with the schema id. - * This API will automatically increment the schema version. Upon adding the schema to associated id in - * schema registry, it returns the version to which the uploaded schema was added to. - * - * Following is the response when it's HTTP OK(200) - * { - * "status" : "OK", - * "message" : "Success", - * "count" : 1, - * "values" : [ - * { - * "id" : - * "version" : - * } - * ] - * } - * - * On any issues, returns error with proper error message and Internal Server error (500). - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param id of the schema being uploaded. - */ - @POST - @Path("contexts/{context}/schemas/{id}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void upload(HttpServiceRequest request, HttpServiceResponder responder, @PathParam("context") String namespace, - @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - byte[] bytes; - ByteBuffer content = request.getContent(); - if (content != null && content.hasRemaining()) { - bytes = new byte[content.remaining()]; - content.get(bytes); - } else { - bytes = null; - } - - if (bytes == null) { - throw new BadRequestException("No schema was provided in the request body"); - } - - NamespacedId namespacedId = new NamespacedId(ns, id); - long version = TransactionRunners.run(getContext(), context -> { - SchemaRegistry registry = SchemaRegistry.get(context); - return registry.add(namespacedId, bytes); - }); - return new ServiceResponse<>(new SchemaEntryVersion(namespacedId, version)); - }); - } - - /** - * Deletes the entire entry from the registry. - * - * Everything related to the schema id is deleted completely. - * All versions of schema are also deleted. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param id of the schema to be deleted. - */ - @DELETE - @Path("contexts/{context}/schemas/{id}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void delete(HttpServiceRequest request, HttpServiceResponder responder, @PathParam("context") String namespace, - @PathParam("id") String id) { - respond(request, responder, namespace, ns -> { - NamespacedId namespacedId = new NamespacedId(ns, id); - TransactionRunners.run(getContext(), context -> { - SchemaRegistry registry = SchemaRegistry.get(context); - if (registry.hasSchema(namespacedId)) { - throw new NotFoundException("Id " + id + " not found."); - } - registry.delete(namespacedId); - }); - return new ServiceResponse("Successfully deleted schema " + id); - }); - } - - /** - * Deletes a version of schema from the registry for a given schema id. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param id of the schema - * @param version version of the schema. - */ - @DELETE - @Path("contexts/{context}/schemas/{id}/versions/{version}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void delete(HttpServiceRequest request, HttpServiceResponder responder, @PathParam("context") String namespace, - @PathParam("id") String id, @PathParam("version") long version) { - respond(request, responder, namespace, ns -> { - TransactionRunners.run(getContext(), context -> { - SchemaRegistry registry = SchemaRegistry.get(context); - registry.remove(new NamespacedId(ns, id), version); - }); - return new ServiceResponse("Successfully deleted version '" + version + "' of schema " + id); - }); - } - - /** - * Returns information of schema, including schema requested along with versions available and other metadata. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param id of the schema. - * @param version of the schema. - */ - @GET - @Path("contexts/{context}/schemas/{id}/versions/{version}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void get(HttpServiceRequest request, HttpServiceResponder responder, @PathParam("context") String namespace, - @PathParam("id") String id, @PathParam("version") long version) { - respond(request, responder, namespace, ns -> TransactionRunners.run(getContext(), context -> { - SchemaRegistry registry = SchemaRegistry.get(context); - return new ServiceResponse<>(registry.getEntry(new NamespacedId(ns, id), version)); - })); - } - - /** - * Returns information of schema, including schema requested along with versions available and other metadata. - * This call will automatically detect the currect active version of schema. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param id of the schema. - */ - @GET - @Path("contexts/{context}/schemas/{id}") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void get(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> TransactionRunners.run(getContext(), context -> { - SchemaRegistry registry = SchemaRegistry.get(context); - return new ServiceResponse<>(registry.getEntry(new NamespacedId(ns, id))); - })); - } - - /** - * Returns list of versions for a give schema id. - * - * @param request HTTP request handler. - * @param responder HTTP response handler. - * @param id of the schema. - */ - @GET - @Path("contexts/{context}/schemas/{id}/versions") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void versions(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("id") String id) { - respond(request, responder, namespace, ns -> TransactionRunners.run(getContext(), context -> { - SchemaRegistry registry = SchemaRegistry.get(context); - return new ServiceResponse<>(registry.getVersions(new NamespacedId(ns, id))); - })); - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/spanner/SpannerHandler.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/spanner/SpannerHandler.java deleted file mode 100644 index b8cbadae1..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/spanner/SpannerHandler.java +++ /dev/null @@ -1,424 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.spanner; - -import com.google.cloud.ByteArray; -import com.google.cloud.Date; -import com.google.cloud.Timestamp; -import com.google.cloud.spanner.DatabaseId; -import com.google.cloud.spanner.KeySet; -import com.google.cloud.spanner.Options; -import com.google.cloud.spanner.ResultSet; -import com.google.cloud.spanner.Spanner; -import com.google.cloud.spanner.Statement; -import com.google.cloud.spanner.Type; -import com.google.gson.Gson; -import io.cdap.cdap.api.annotation.TransactionControl; -import io.cdap.cdap.api.annotation.TransactionPolicy; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.data.schema.UnsupportedTypeException; -import io.cdap.cdap.api.service.http.HttpServiceRequest; -import io.cdap.cdap.api.service.http.HttpServiceResponder; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.PropertyIds; -import io.cdap.wrangler.RequestExtractor; -import io.cdap.wrangler.SamplingMethod; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.dataset.workspace.DataType; -import io.cdap.wrangler.dataset.workspace.Workspace; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.dataset.workspace.WorkspaceMeta; -import io.cdap.wrangler.proto.ConnectionSample; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.PluginSpec; -import io.cdap.wrangler.proto.ServiceResponse; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.proto.spanner.SpannerDatabase; -import io.cdap.wrangler.proto.spanner.SpannerSpec; -import io.cdap.wrangler.proto.spanner.SpannerTable; -import io.cdap.wrangler.service.common.AbstractWranglerHandler; -import io.cdap.wrangler.service.gcp.GCPUtils; -import io.cdap.wrangler.utils.ObjectSerDe; -import io.cdap.wrangler.utils.ReferenceNames; - -import java.time.Instant; -import java.time.LocalDate; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.StringJoiner; -import java.util.stream.Collectors; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; - -/** - * Spanner data prep connection service - */ -@Deprecated -public class SpannerHandler extends AbstractWranglerHandler { - private static final String PATH_FORMAT = "/%s/%s/%s"; - private static final String TABLE_NAME = "TableName"; - // Spanner queries for listing tables and listing schema of table are documented at - // https://cloud.google.com/spanner/docs/information-schema - private static final Statement LIST_TABLES_STATEMENT = - Statement.of("SELECT t.table_name FROM " + - "information_schema.tables AS t WHERE t.table_catalog = '' and t.table_schema = ''"); - - private static final Statement.Builder SCHEMA_STATEMENT_BUILDER = Statement.newBuilder( - String.format("SELECT t.column_name, t.spanner_type, t.is_nullable FROM information_schema.columns AS t WHERE " + - "t.table_catalog = '' AND t.table_schema = '' AND t.table_name = @%s", TABLE_NAME)); - // Default Number of rows read from Spanner table by data-prep - private static final String DEFAULT_ROW_LIMIT = "1000"; - private static final Gson GSON = new Gson(); - - @POST - @Path("/contexts/{context}/connections/spanner/test") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void testSpannerConnection(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace) { - respond(request, responder, () -> { - // Extract the body of the request and transform it to the Connection object. - RequestExtractor extractor = new RequestExtractor(request); - ConnectionMeta connection = extractor.getConnectionMeta(ConnectionType.SPANNER); - GCPUtils.validateProjectCredentials(connection); - getInstances(connection); - return new ServiceResponse("Success"); - }); - } - - /** - * Lists spanner instances in the project - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/spanner/instances") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void getSpannerInstances(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId) { - respond(request, responder, namespace, ns -> { - Connection connection = getValidatedConnection(new NamespacedId(ns, connectionId), ConnectionType.SPANNER); - List instances = getInstances(connection); - return new ServiceResponse<>(instances); - }); - } - - /** - * Lists spanner databases for a spanner instance - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/spanner/instances/{instance-id}/databases") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void getSpannerDatabases(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId, - @PathParam("instance-id") String instanceId) { - respond(request, responder, namespace, ns -> { - Connection connection = getValidatedConnection(new NamespacedId(ns, connectionId), ConnectionType.SPANNER); - List databases = getDatabases(connection, instanceId); - return new ServiceResponse<>(databases); - }); - } - - /** - * Lists spanner tables for a spanner database - * - * @param request HTTP Request handler. - * @param responder HTTP Response handler. - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/spanner/instances/{instance-id}/databases/{database-id}/tables") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void getSpannerTables(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId, - @PathParam("instance-id") String instanceId, - @PathParam("database-id") String databaseId) { - respond(request, responder, namespace, ns -> { - Connection connection = getValidatedConnection(new NamespacedId(ns, connectionId), ConnectionType.SPANNER); - List tables = getTables(connection, instanceId, databaseId); - return new ServiceResponse<>(tables); - }); - } - - /** - * Read spanner table into a workspace and return the workspace identifier - */ - @GET - @Path("contexts/{context}/connections/{connection-id}/spanner/instances/{instance-id}/" - + "databases/{database-id}/tables/{table-id}/read") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void readTable(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, - @PathParam("connection-id") String connectionId, - @PathParam("instance-id") String instanceId, - @PathParam("database-id") String databaseId, - @PathParam("table-id") String tableId, - @QueryParam("scope") @DefaultValue(WorkspaceDataset.DEFAULT_SCOPE) String scope, - @QueryParam("limit") @DefaultValue(DEFAULT_ROW_LIMIT) String limit) { - respond(request, responder, namespace, ns -> { - Connection connection = getValidatedConnection(new NamespacedId(ns, connectionId), ConnectionType.SPANNER); - Schema schema = getTableSchema(connection, instanceId, databaseId, tableId); - List data = getTableData(connection, instanceId, databaseId, tableId, schema, Long.parseLong(limit)); - - Map connectionProperties = connection.getProperties(); - String projectId = connectionProperties.get(GCPUtils.PROJECT_ID); - String path = connectionProperties.get(GCPUtils.SERVICE_ACCOUNT_KEYFILE); - - String externalDsName = new StringJoiner(".").add(instanceId).add(databaseId).add(tableId).toString(); - - SpannerSpecification specification = - new SpannerSpecification(externalDsName, path, projectId, instanceId, databaseId, tableId, schema); - - Map workspaceProperties = new HashMap<>(); - workspaceProperties.put(PropertyIds.NAME, tableId); - workspaceProperties.put(PropertyIds.CONNECTION_TYPE, ConnectionType.SPANNER.getType()); - workspaceProperties.put(PropertyIds.CONNECTION_ID, connectionId); - workspaceProperties.put(PropertyIds.PLUGIN_SPECIFICATION, GSON.toJson(specification)); - WorkspaceMeta workspaceMeta = WorkspaceMeta.builder(tableId) - .setScope(scope) - .setProperties(workspaceProperties) - .build(); - String sampleId = TransactionRunners.run(getContext(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - NamespacedId workspaceId = ws.createWorkspace(ns, workspaceMeta); - - // write data to workspace - ObjectSerDe> serDe = new ObjectSerDe<>(); - byte[] dataBytes = serDe.toByteArray(data); - ws.updateWorkspaceData(workspaceId, DataType.RECORDS, dataBytes); - return workspaceId.getId(); - }); - - ConnectionSample sample = new ConnectionSample(sampleId, tableId, ConnectionType.SPANNER.getType(), - SamplingMethod.NONE.getMethod(), connectionId); - return new ServiceResponse<>(sample); - }); - } - - /** - * Get the specification for the spanner source plugin. - * - */ - @GET - @Path("contexts/{context}/spanner/workspaces/{workspace-id}/specification") - @TransactionPolicy(value = TransactionControl.EXPLICIT) - public void specification(HttpServiceRequest request, HttpServiceResponder responder, - @PathParam("context") String namespace, @PathParam("workspace-id") String workspaceId) { - respond(request, responder, namespace, ns -> { - Map config = getWorkspace(new NamespacedId(ns, workspaceId)).getProperties(); - - // deserialize and send spanner source specification - SpannerSpecification conf = - GSON.fromJson(config.get(PropertyIds.PLUGIN_SPECIFICATION), SpannerSpecification.class); - Map properties = new HashMap<>(); - properties.put("referenceName", ReferenceNames.cleanseReferenceName(conf.getReferenceName())); - properties.put("serviceFilePath", conf.getServiceFilePath()); - properties.put("project", conf.getProject()); - properties.put("instance", conf.getInstance()); - properties.put("database", conf.getDatabase()); - properties.put("table", conf.getTable()); - properties.put("schema", conf.getSchema()); - PluginSpec pluginSpec = new PluginSpec("Spanner", "source", properties); - return new ServiceResponse<>(new SpannerSpec(pluginSpec)); - }); - } - - public static Map getConnectorProperties(Map config) { - Map properties = new HashMap<>(); - properties.put("serviceAccountType", "filePath"); - properties.put("serviceFilePath", config.get(GCPUtils.SERVICE_ACCOUNT_KEYFILE)); - properties.put("project", config.get(GCPUtils.PROJECT_ID)); - properties.values().removeIf(Objects::isNull); - return properties; - } - - public static String getPath(Workspace workspace) { - SpannerSpecification conf = - GSON.fromJson(workspace.getProperties().get(PropertyIds.PLUGIN_SPECIFICATION), SpannerSpecification.class); - return String.format(PATH_FORMAT, conf.getInstance(), conf.getDatabase(), conf.getTable()); - } - - private Schema getTableSchema(Connection connection, - String instanceId, String databaseId, String tableId) throws Exception { - Spanner spanner = GCPUtils.getSpannerService(connection); - try { - String projectId = spanner.getOptions().getProjectId(); - Statement getTableSchemaStatement = SCHEMA_STATEMENT_BUILDER.bind(TABLE_NAME).to(tableId).build(); - try (ResultSet resultSet = spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)). - singleUse().executeQuery(getTableSchemaStatement)) { - List schemaFields = new ArrayList<>(); - while (resultSet.next()) { - String columnName = resultSet.getString("column_name"); - String spannerType = resultSet.getString("spanner_type"); - String nullable = resultSet.getString("is_nullable"); - boolean isNullable = "YES".equals(nullable); - Schema typeSchema = parseSchemaFromSpannerTypeString(spannerType); - Schema fieldSchema = isNullable ? Schema.nullableOf(typeSchema) : typeSchema; - schemaFields.add(Schema.Field.of(columnName, fieldSchema)); - } - return Schema.recordOf("tableSchema", schemaFields); - } - } finally { - spanner.close(); - } - } - - private Schema parseSchemaFromSpannerTypeString(String spannerType) throws UnsupportedTypeException { - if (spannerType.startsWith("STRING")) { - // STRING and BYTES also have size at the end in the format, example : STRING(1024) - return Schema.of(Schema.Type.STRING); - } else if (spannerType.startsWith("BYTES")) { - return Schema.of(Schema.Type.BYTES); - } else { - switch (Type.Code.valueOf(spannerType)) { - case BOOL: - return Schema.of(Schema.Type.BOOLEAN); - case INT64: - return Schema.of(Schema.Type.LONG); - case FLOAT64: - return Schema.of(Schema.Type.DOUBLE); - case DATE: - return Schema.of(Schema.LogicalType.DATE); - case TIMESTAMP: - return Schema.of(Schema.LogicalType.TIMESTAMP_MICROS); - default: - throw new UnsupportedTypeException(String.format("Type : %s is unsupported currently", spannerType)); - } - } - } - - /** - * Execute Spanner select query on table with row limit and - * convert the {@link ResultSet} to {@link Row} and return the list of rows - */ - private List getTableData(Connection connection, String instanceId, - String databaseId, String tableId, Schema schema, long limit) throws Exception { - Spanner spanner = GCPUtils.getSpannerService(connection); - try { - String projectId = spanner.getOptions().getProjectId(); - List columnNames = schema.getFields().stream().map(Schema.Field::getName).collect(Collectors.toList()); - List resultRows = new ArrayList<>(); - try (ResultSet resultSet = spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)).singleUse() - .read(tableId, KeySet.all(), columnNames, Options.limit(limit))) { - while (resultSet.next()) { - resultRows.add(convertResultSetToRow(resultSet)); - } - } - return resultRows; - } finally { - spanner.close(); - } - } - - private Row convertResultSetToRow(ResultSet resultSet) { - List structFields = resultSet.getType().getStructFields(); - Row row = new Row(); - for (Type.StructField field : structFields) { - String fieldName = field.getName(); - Type columnType = resultSet.getColumnType(fieldName); - if (columnType == null || resultSet.isNull(fieldName)) { - row.add(fieldName, null); - continue; - } - switch (columnType.getCode()) { - case BOOL: - row.add(fieldName, resultSet.getBoolean(fieldName)); - break; - case INT64: - row.add(fieldName, resultSet.getLong(fieldName)); - break; - case FLOAT64: - row.add(fieldName, resultSet.getDouble(fieldName)); - break; - case STRING: - row.add(fieldName, resultSet.getString(fieldName)); - break; - case BYTES: - ByteArray byteArray = resultSet.getBytes(fieldName); - row.add(fieldName, byteArray.toByteArray()); - break; - case DATE: - // spanner DATE is a date without time zone. so create LocalDate from spanner DATE - Date spannerDate = resultSet.getDate(fieldName); - LocalDate date = LocalDate.of(spannerDate.getYear(), spannerDate.getMonth(), - spannerDate.getDayOfMonth()); - row.add(fieldName, date); - break; - case TIMESTAMP: - Timestamp spannerTs = resultSet.getTimestamp(fieldName); - // Spanner TIMESTAMP supports nano second level precision, however, cdap schema only supports - // microsecond level precision. - Instant instant = Instant.ofEpochSecond(spannerTs.getSeconds()).plusNanos(spannerTs.getNanos()); - row.add(fieldName, ZonedDateTime.ofInstant(instant, ZoneId.ofOffset("UTC", ZoneOffset.UTC))); - break; - } - } - return row; - } - - private List getInstances(ConnectionMeta connection) throws Exception { - Spanner spanner = GCPUtils.getSpannerService(connection); - try { - List instanceNames = new ArrayList<>(); - spanner.getInstanceAdminClient().listInstances().iterateAll().iterator() - .forEachRemaining(e -> instanceNames.add(new SpannerInstance(e.getId().getInstance()))); - return instanceNames; - } finally { - spanner.close(); - } - } - - private List getDatabases(ConnectionMeta connection, String instanceId) throws Exception { - Spanner spanner = GCPUtils.getSpannerService(connection); - try { - List databases = new ArrayList<>(); - spanner.getDatabaseAdminClient().listDatabases(instanceId).iterateAll().iterator() - .forEachRemaining(e -> databases.add(new SpannerDatabase(e.getId().getDatabase()))); - return databases; - } finally { - spanner.close(); - } - } - - private List getTables(Connection connection, String instanceId, String databaseId) throws Exception { - Spanner spanner = GCPUtils.getSpannerService(connection); - try { - List tables = new ArrayList<>(); - String projectId = spanner.getOptions().getProjectId(); - try (ResultSet resultSet = spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)). - singleUse().executeQuery(LIST_TABLES_STATEMENT)) { - while (resultSet.next()) { - tables.add(new SpannerTable(resultSet.getString("table_name"))); - } - return tables; - } - } finally { - spanner.close(); - } - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/spanner/SpannerInstance.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/spanner/SpannerInstance.java deleted file mode 100644 index 2da8d6414..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/spanner/SpannerInstance.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.spanner; - -/** - * Spanner instance information - */ -public class SpannerInstance { - private final String name; - - SpannerInstance(String name) { - this.name = name; - } -} diff --git a/wrangler-service/src/main/java/io/cdap/wrangler/service/spanner/SpannerSpecification.java b/wrangler-service/src/main/java/io/cdap/wrangler/service/spanner/SpannerSpecification.java deleted file mode 100644 index 885625054..000000000 --- a/wrangler-service/src/main/java/io/cdap/wrangler/service/spanner/SpannerSpecification.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.spanner; - -import io.cdap.cdap.api.data.schema.Schema; - -/** - * Spanner specification properties for spanner source plugin - */ -public class SpannerSpecification { - private final String referenceName; - // gcp properties - private final String serviceFilePath; - private final String project; - // spanner properties - private final String instance; - private final String database; - private final String table; - private final String schema; - - SpannerSpecification(String referenceName, String serviceFilePath, String project, String instance, - String database, String table, Schema schema) { - this.referenceName = referenceName; - this.serviceFilePath = serviceFilePath; - this.project = project; - this.instance = instance; - this.database = database; - this.table = table; - this.schema = schema.toString(); - } - - public String getReferenceName() { - return referenceName; - } - - public String getServiceFilePath() { - return serviceFilePath; - } - - public String getProject() { - return project; - } - - public String getInstance() { - return instance; - } - - public String getDatabase() { - return database; - } - - public String getTable() { - return table; - } - - public String getSchema() { - return schema; - } -} diff --git a/wrangler-service/src/main/resources/drivers.mapping b/wrangler-service/src/main/resources/drivers.mapping deleted file mode 100644 index f2aabdaaf..000000000 --- a/wrangler-service/src/main/resources/drivers.mapping +++ /dev/null @@ -1,12 +0,0 @@ -Oracle Thin,oracle.jdbc.driver.OracleDriver,jdbc:oracle:thin:@${hostname}:${port}:${database},oracle-thin,1521,true -Oracle Database 12c,oracle.jdbc.OracleDriver,jdbc:oracle:thin:${username}/${password}@//${hostname}:${port}/${database},oracle,1521,true -MySQL,com.mysql.jdbc.Driver,jdbc:mysql://${hostname}:${port}/${database},mysql,3306,true -PostgreSQL (v6.5 and earlier),postgresql.Driver,jdbc:postgresql://${hostname}:${port}/${database},postgresql65,5432,true -PostgreSQL (v7.0 and later),org.postgresql.Driver,jdbc:postgresql://${hostname}:${port}/${database},postgresql,5432,true -Hiveserver 2 (Unsecured Binary),org.apache.hive.jdbc.HiveDriver,jdbc:hive2://${hostname}:${port}/${database},hive2binary,10010,true -Hiveserver 2 (Unsecured HTTP),org.apache.hive.jdbc.HiveDriver,jdbc:hive2://${hostname}:${port}/${database};transportMode=http;httpPath=cliservice,hive2http,10010,true -Microsoft SQL Server (v6.2 and later),com.microsoft.sqlserver.jdbc.SQLServerDriver,jdbc:sqlserver://${hostname}:${port};databaseName=${database};user=${username};password=${password};,sqlserver42,1433,true -Amazon Redshift,com.amazon.redshift.jdbc.Driver,jdbc:redshift://${hostname}:${port}/${database},redshift,5439,true -Google Cloud SQL for PostgreSQL,org.postgresql.Driver,jdbc:postgresql://google/${database}?cloudSqlInstance=${instance}&socketFactory=com.google.cloud.sql.postgres.SocketFactory&useSSL=${useSSL},cloudsql-postgresql,5432,false -Google Cloud SQL for MySQL,com.mysql.jdbc.Driver,jdbc:mysql://google/${database}?cloudSqlInstance=${instance}&socketFactory=com.google.cloud.sql.mysql.SocketFactory&useSSL=${useSSL},cloudsql-mysql,3306,false -SAP HANA,com.sap.db.jdbc.Driver,jdbc:sap://${hostname}:${port}/?currentSchema=${schema},sap-hana,30015,false diff --git a/wrangler-service/src/main/resources/file.extensions b/wrangler-service/src/main/resources/file.extensions deleted file mode 100644 index 80460286d..000000000 --- a/wrangler-service/src/main/resources/file.extensions +++ /dev/null @@ -1,478 +0,0 @@ -1st text/plain -3dm x-world/x-3dmf -3dmf x-world/x-3dmf -a application/octet-stream -aab application/x-authorware-bin -aam application/x-authorware-map -aas application/x-authorware-seg -abc text/vndabc -acgi text/html -adoc text/plain -aim text/plain -ans text/plain -apt text/plain -asc text/plain -ascii text/plain -afl video/animaflex -ai application/postscript -aif audio/aiff -aifc audio/aiff -aiff audio/aiff -aim application/x-aim -aip text/x-audiosoft-intra -ani application/x-navi-animation -aos application/x-nokia-9000-communicator-add-on-software -aps application/mime -arc application/octet-stream -arj application/octet-stream -art image/x-jg -asf video/x-ms-asf -asm text/x-asm -asp text/asp -asx application/x-mplayer2 -au audio/basic -avi video/avi -avro application/avro -avs video/avs-video -bcpio application/x-bcpio -bin application/octet-stream -bm image/bmp -bmp image/bmp -boo application/book -book application/book -boz application/x-bzip2 -bsh application/x-bsh -bz application/x-bzip -bz2 application/x-bzip2 -c text/plain -c++ text/plain -cat application/vndms-pkiseccat -cc text/plain -ccad application/clariscad -cco application/x-cocoa -cdf application/cdf -cer application/x-x509-ca-cert -cha application/x-chat -chat application/x-chat -class application/java-byte-code -com application/octet-stream -conf text/plain -cpio application/x-cpio -cpp text/plain -cpt application/x-compactpro -crt application/pkix-cert -crt application/x-x509-ca-cert -csv text/plain -csh text/x-scriptcsh -css text/css -cxx text/plain -dat text/plain -dcr application/x-director -deepv application/x-deepv -def text/plain -der application/x-x509-ca-cert -dif video/x-dv -dir application/x-director -dl video/dl -doc application/msword -docx application/msword -dot application/msword -dp application/commonground -drw application/drafting -dump application/octet-stream -dv video/x-dv -dvi application/x-dvi -dwf drawing/x-dwf (old) -dwf model/vnddwf -dwg image/vnddwg -dxf application/dxf -dxf image/vnddwg -dxr application/x-director -err text/plain -epp text/plain -el text/x-scriptelisp -elc application/x-elc -env application/x-envoy -eps application/postscript -es application/x-esrehber -etx text/x-setext -evy application/envoy -exe application/octet-stream -f text/plain -f text/x-fortran -f77 text/x-fortran -f90 text/plain -f90 text/x-fortran -fdf application/vndfdf -fif image/fif -fli video/fli -flo image/florian -flx text/vndfmiflexstor -fmf video/x-atomic3d-feature -for text/plain -fpx image/vndfpx -frl application/freeloader -funk audio/make -g text/plain -g3 image/g3fax -gif image/gif -gl video/gl -gsd audio/x-gsm -gsm audio/x-gsm -gsp application/x-gsp -gss application/x-gss -gtar application/x-gtar -gz application/x-gzip -gzip application/x-gzip -h text/plain -hase application/hbase -hdf application/x-hdf -help application/x-helpfile -hgl application/vndhp-hpgl -hh text/plain -hlp application/hlp -hpg application/vndhp-hpgl -hpgl application/vndhp-hpgl -hqx application/binhex -hta application/hta -htc text/x-component -htm text/html -html text/html -htmls text/html -htt text/webviewhtml -htx text/html -ice x-conference/x-cooltalk -ico image/x-icon -idc text/plain -ief image/ief -iefs image/ief -iges application/iges -igs application/iges -ima application/x-ima -imap application/x-httpd-imap -inf application/inf -ins application/x-internett-signup -ip application/x-ip2 -isu video/x-isvideo -it audio/it -iv application/x-inventor -ivr i-world/i-vrml -ivy application/x-livescreen -jam audio/x-jam -jav text/plain -jar application/jar -java text/plain -jcm application/x-java-commerce -jfif image/jpeg -jfif-tbnl image/jpeg -jpe image/jpeg -jpeg image/jpeg -jpg image/jpeg -jps image/x-jps -js text/javascript -json application/json -jut image/jutvision -klg text/plain -kar audio/midi -ksh text/x-scriptksh -la audio/nspaudio -lam audio/x-liveaudio -latex application/x-latex -lha application/octet-stream -lhx application/octet-stream -list text/plain -lma audio/nspaudio -log text/plain -lsp application/x-lisp -lst text/plain -lsx text/x-la-asf -ltr text/plain -ltx application/x-latex -lyt text/plain -lyx text/plain -lzh application/x-lzh -lzx application/lzx -m text/plain -m1v video/mpeg -m2a audio/mpeg -m2v video/mpeg -m3u audio/x-mpequrl -man text/plain -map application/x-navimap -mar text/plain -mbd application/mbedlet -mc$ application/x-magic-cap-package-10 -mcd application/mcad -mcf image/vasa -mcf text/mcf -mcp application/netmc -md text/plain -md5 text/plain -me application/x-troff-me -mht message/rfc822 -mhtml message/rfc822 -mid audio/midi -midi audio/midi -mif application/x-mif -mime www/mime -mjf audio/x-vndaudioexplosionmjuicemediafile -mjpg video/x-motion-jpeg -mm application/base64 -mod audio/mod -moov video/quicktime -mov video/quicktime -movie video/x-sgi-movie -mp2 audio/mpeg -mp3 audio/mpeg3 -mpa audio/mpeg -mpc application/x-project -mpe video/mpeg -mpeg video/mpeg -mpg audio/mpeg -mpga audio/mpeg -mpp application/vndms-project -mpt application/x-project -mpv application/x-project -mpx application/x-project -mrc application/marc -ms application/x-troff-ms -msg text/plain -mv video/x-sgi-movie -my audio/make -mzz application/x-vndaudioexplosionmzz -nap image/naplps -naplps image/naplps -nc application/x-netcdf -ncm application/vndnokiaconfiguration-message -nif image/x-niff -niff image/x-niff -nix application/x-mix-transfer -nsc application/x-conference -nvd application/x-navidoc -o application/octet-stream -oda application/oda -omc application/x-omc -omcd application/x-omcdatamaker -omcr application/x-omcregerator -p text/x-pascal -p10 application/pkcs10 -p12 application/pkcs-12 -p7a application/x-pkcs7-signature -p7c application/pkcs7-mime -p7m application/pkcs7-mime -p7r application/x-pkcs7-certreqresp -p7s application/pkcs7-signature -part application/pro_eng -parquet application/parquet -pas text/pascal -pb application/protobuf -pbm image/x-portable-bitmap -pcl application/vndhp-pcl -pct image/x-pict -pcx image/x-pcx -pdb chemical/x-pdb -pdf application/pdf -pfunk audio/make -pgm image/x-portable-graymap -pic image/pict -pict image/pict -pkg application/x-newton-compatible-pkg -pko application/vndms-pkipko -pl text/plain -plx application/x-pixclscript -pm image/x-xpixmap -pm4 application/x-pagemaker -pm5 application/x-pagemaker -png image/png -pnm image/x-portable-anymap -pot application/mspowerpoint -pov model/x-pov -ppa application/vndms-powerpoint -ppm image/x-portable-pixmap -pps application/mspowerpoint -ppt application/powerpoint -ppz application/mspowerpoint -pre application/x-freelance -prt application/pro_eng -ps application/postscript -psd application/octet-stream -pvu paleovu/x-pv -pwz application/vndms-powerpoint -py text/x-scriptphyton -pyc application/x-bytecodepython -qcp audio/vndqcelp -qd3 x-world/x-3dmf -qd3d x-world/x-3dmf -qif image/x-quicktime -qt video/quicktime -qtc video/x-qtc -qti image/x-quicktime -qtif image/x-quicktime -ra audio/x-pn-realaudio -ram audio/x-pn-realaudio -ras image/cmu-raster -rast image/cmu-raster -rexx text/x-scriptrexx -rf image/vndrn-realflash -rgb image/x-rgb -rm audio/x-pn-realaudio -rmi audio/mid -rmm audio/x-pn-realaudio -rmp audio/x-pn-realaudio -rng application/ringing-tones -rnx application/vndrn-realplayer -roff application/x-troff -rp image/vndrn-realpix -rpm audio/x-pn-realaudio-plugin -rt text/richtext -rtf application/rtf -rtx text/richtext -rv video/vndrn-realvideo -s text/x-asm -s3m audio/s3m -saveme application/octet-stream -sbk application/x-tbook -scm text/x-scriptguile -sdml text/plain -sdp application/sdp -sdr application/sounder -sea application/sea -set application/set -sgm text/sgml -sgml text/sgml -sh text/x-scriptsh -shar application/x-shar -shtml text/html -sid audio/x-psid -skd application/x-koan -skm application/x-koan -skp application/x-koan -skt application/x-koan -sl application/x-seelogo -smi application/smil -smil application/smil -snd audio/basic -sol application/solids -spc text/x-speech -spl application/futuresplash -spr application/x-sprite -sprite application/x-sprite -src application/x-wais-source -ssi text/x-server-parsed-html -ssm application/streamingmedia -sst application/vndms-pkicertstore -directive application/directive -stl application/sla -stp application/directive -sv4cpio application/x-sv4cpio -sv4crc application/x-sv4crc -svf image/vnddwg -svr application/x-world -swf application/x-shockwave-flash -t application/x-troff -talk text/x-speech -tar application/x-tar -tbk application/toolbook -tcl text/x-scripttcl -tcsh text/x-scripttcsh -tex application/x-tex -texi application/x-texinfo -texinfo application/x-texinfo -text text/plain -tgz application/gnutar -tif image/tiff -tiff image/tiff -tr application/x-troff -tsi audio/tsp-audio -tsp audio/tsplayer -tsv text/plain -turbot image/florian -txt text/plain -uil text/x-uil -uni text/uri-list -unis text/uri-list -unv application/i-deas -uri text/uri-list -uris text/uri-list -ustar multipart/x-ustar -uu text/x-uuencode -uue text/x-uuencode -vcd application/x-cdlink -vcs text/x-vcalendar -vda application/vda -vdo video/vdo -vew application/groupwise -viv video/vivo -vivo video/vivo -vmd application/vocaltec-media-desc -vmf application/vocaltec-media-file -voc audio/voc -vos video/vosaic -vox audio/voxware -vqe audio/x-twinvq-plugin -vqf audio/x-twinvq -vql audio/x-twinvq-plugin -vrml model/vrml -vrt x-world/x-vrt -vsd application/x-visio -vst application/x-visio -vsw application/x-visio -w60 application/wordperfect60 -w61 application/wordperfect61 -w6w application/msword -wav audio/wav -wav audio/x-wav -wb1 application/x-qpro -wbmp image/vndwapwbmp -web application/vndxara -wiz application/msword -wk1 application/x-123 -wmf windows/metafile -wml text/vndwapwml -wmlc application/vndwapwmlc -wmls text/vndwapwmlscript -wmlsc application/vndwapwmlscriptc -word application/msword -wp application/wordperfect -wp5 application/wordperfect -wp6 application/wordperfect -wpd application/wordperfect -wq1 application/x-lotus -wri application/mswrite -wrl model/vrml -wrz model/vrml -wsc text/scriplet -wsrc application/x-wais-source -wtk application/x-wintalk -xbm image/xbm -xdr video/x-amt-demorun -xgz xgl/drawing -xif image/vndxiff -xl application/excel -xla application/excel -xlb application/excel -xlc application/excel -xld application/excel -xlk application/excel -xll application/excel -xlm application/excel -xls application/excel -xlt application/excel -xlv application/excel -xlw application/excel -xlsx application/excel -xm audio/xm -xml application/xml -xmz xgl/movie -xpix application/x-vndls-xpix -xpm image/xpm -yml text/yaml -yaml text/yaml -x-png image/png -xsr video/x-amt-showrun -xwd image/x-xwd -xyz chemical/x-pdb -z application/x-compressed -zip application/zip -zoo application/octet-stream -zsh text/x-scriptzsh diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/dataset/connections/ConnectionsDatasetTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/dataset/connections/ConnectionsDatasetTest.java deleted file mode 100644 index 889df2f49..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/dataset/connections/ConnectionsDatasetTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.connections; - -import org.junit.Assert; -import org.junit.Test; - -import java.security.Key; -import javax.crypto.Cipher; -import javax.crypto.spec.SecretKeySpec; - -/** - * Class description here. - */ -public class ConnectionsDatasetTest { - - @Test - public void testEncryptionAndDecryption() throws Exception { - String text = "Hello World"; - String key = "Bar12345Bar12345"; // 128 bit key - // Create key and cipher - Key aesKey = new SecretKeySpec(key.getBytes(), "AES"); - Cipher cipher = Cipher.getInstance("AES"); - // encrypt the text - cipher.init(Cipher.ENCRYPT_MODE, aesKey); - byte[] encrypted = cipher.doFinal(text.getBytes()); - // decrypt the text - cipher.init(Cipher.DECRYPT_MODE, aesKey); - String decrypted = new String(cipher.doFinal(encrypted)); - Assert.assertEquals(text, decrypted); - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/FileTypeDetectorTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/FileTypeDetectorTest.java deleted file mode 100644 index f5471885b..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/FileTypeDetectorTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests {@link FileTypeDetector} - */ -public class FileTypeDetectorTest { - - @Test - public void testFileTypeExtensions() throws Exception { - FileTypeDetector detector = new FileTypeDetector(); - - String[] filenames = { - "syslog.dat", - "syslog.dat.1", - "syslog.txt", - "syslog.txt.1", - "titanic.csv", - "titanic.csv.1", - "titanic.csv.1.2", - "noextension" - }; - - for (String filename : filenames) { - String mimeType = detector.detectFileType(filename); - Assert.assertNotEquals("UNKNOWN", mimeType); - Assert.assertEquals("text/plain", mimeType); - } - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/TableLookupTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/TableLookupTest.java deleted file mode 100644 index 6acf8a90e..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/TableLookupTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service; - -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.common.Bytes; -import io.cdap.cdap.api.dataset.table.Table; -import io.cdap.cdap.test.ApplicationManager; -import io.cdap.cdap.test.DataSetManager; -import io.cdap.cdap.test.ServiceManager; -import io.cdap.wrangler.DataPrep; -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; - -import java.net.URL; -import java.util.List; - -/** - * Tests {@link io.cdap.wrangler.steps.transformation.TableLookup}. - */ -@Ignore -public class TableLookupTest extends WranglerServiceTestBase { - - @Test - public void test() throws Exception { - // setup lookup data - addDatasetInstance("table", "lookupTable"); - DataSetManager

lookupTable = getDataset("lookupTable"); - lookupTable.get().put(Bytes.toBytes("bob"), Bytes.toBytes("age"), Bytes.toBytes("21")); - lookupTable.get().put(Bytes.toBytes("bob"), Bytes.toBytes("city"), Bytes.toBytes("Los Angeles, CA")); - lookupTable.get().put(Bytes.toBytes("joe"), Bytes.toBytes("age"), Bytes.toBytes("34")); - lookupTable.get().put(Bytes.toBytes("joe"), Bytes.toBytes("city"), Bytes.toBytes("Palo Alto, CA")); - lookupTable.flush(); - - - ApplicationManager wrangerApp = deployApplication(DataPrep.class); - ServiceManager serviceManager = wrangerApp.getServiceManager("service").start(); - // should throw exception, instead of returning null - URL baseURL = serviceManager.getServiceURL(); - - List uploadContents = ImmutableList.of("bob,anderson", "joe,mchall"); - createAndUploadWorkspace(baseURL, "test_ws", uploadContents); - - String[] directives = new String[]{ - "split-to-columns test_ws ,", - "drop test_ws", - "rename test_ws_1 fname", - "rename test_ws_2 lname", - "table-lookup fname lookupTable" - }; - - ExecuteResponse executeResponse = execute(baseURL, "test_ws", directives); - Assert.assertEquals(uploadContents.size(), executeResponse.value.size()); - Assert.assertEquals("bob", executeResponse.value.get(0).get("fname")); - Assert.assertEquals("21", executeResponse.value.get(0).get("fname_age")); - Assert.assertEquals("Los Angeles, CA", executeResponse.value.get(0).get("fname_city")); - Assert.assertEquals("joe", executeResponse.value.get(1).get("fname")); - Assert.assertEquals("34", executeResponse.value.get(1).get("fname_age")); - Assert.assertEquals("Palo Alto, CA", executeResponse.value.get(1).get("fname_city")); - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/WranglerServiceTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/WranglerServiceTest.java deleted file mode 100644 index b575d4118..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/WranglerServiceTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service; - -import com.google.common.collect.ImmutableList; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.internal.io.SchemaTypeAdapter; -import io.cdap.cdap.test.ApplicationManager; -import io.cdap.cdap.test.ServiceManager; -import io.cdap.common.http.HttpRequest; -import io.cdap.common.http.HttpRequests; -import io.cdap.common.http.HttpResponse; -import io.cdap.wrangler.DataPrep; -import io.cdap.wrangler.service.directive.DirectivesHandler; -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; - -import java.net.URL; -import java.net.URLEncoder; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * Tests for {@link DirectivesHandler}. - */ -@Ignore -public class WranglerServiceTest extends WranglerServiceTestBase { - private static final Gson GSON = - new GsonBuilder().registerTypeAdapter(Schema.class, new SchemaTypeAdapter()).create(); - - @Test - public void test() throws Exception { - ApplicationManager wrangerApp = deployApplication(DataPrep.class); - ServiceManager serviceManager = wrangerApp.getServiceManager("service").start(); - // should throw exception, instead of returning null - URL baseURL = serviceManager.getServiceURL(); - - - List uploadContents = ImmutableList.of("bob,anderson", "joe,mchall"); - createAndUploadWorkspace(baseURL, "test_ws", uploadContents); - - List directives = - ImmutableList.of("split-to-columns test_ws ,", - "drop test_ws", - "rename test_ws_1 fname", - "rename test_ws_2 lname"); - - Schema schema = schema(baseURL, "test_ws", directives); - - Schema expectedSchema = - Schema.recordOf("avroSchema", - Schema.Field.of("fname", Schema.nullableOf(Schema.of(Schema.Type.STRING))), - Schema.Field.of("lname", Schema.nullableOf(Schema.of(Schema.Type.STRING)))); - - Assert.assertEquals(expectedSchema, schema); - serviceManager.stop(); - } - - public Schema schema(URL baseURL, String workspace, List directives) throws Exception { - List> queryParams = new ArrayList<>(); - for (String directive : directives) { - queryParams.add(new AbstractMap.SimpleEntry<>("directive", URLEncoder.encode(directive, "UTF-8"))); - } - - URL url = new URL(baseURL, "workspaces/" + workspace + "/schema" + createQueryParams(queryParams)); - HttpResponse response = HttpRequests.execute(HttpRequest.get(url).build()); - Assert.assertEquals(200, response.getResponseCode()); - - // we have to do this, simply because of how the service REST API returns only the Fields of the Schema - return GSON.fromJson("{ \"name\": \"avroSchema\", \"type\": \"record\", \"fields\":" - + response.getResponseBodyAsString() + " }", Schema.class); - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/WranglerServiceTestBase.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/WranglerServiceTestBase.java deleted file mode 100644 index bd4358137..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/WranglerServiceTestBase.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service; - -import com.google.gson.Gson; -import io.cdap.cdap.test.TestBase; -import io.cdap.common.http.HttpRequest; -import io.cdap.common.http.HttpRequests; -import io.cdap.common.http.HttpResponse; -import io.cdap.wrangler.service.directive.DirectivesHandler; -import org.junit.Assert; -import org.junit.Ignore; - -import java.net.URL; -import java.net.URLEncoder; -import java.util.AbstractMap; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * Base class which exposes utility functions for interacting with {@link DirectivesHandler}. - */ -@Ignore -public class WranglerServiceTestBase extends TestBase { - - protected static final class ExecuteResponse { - public List headers; - public String message; - public int items; - public List> value; - public int status; - } - - protected void createAndUploadWorkspace(URL baseURL, String workspace, List lines) throws Exception { - HttpResponse response = HttpRequests.execute(HttpRequest.put(new URL(baseURL, "workspaces/" + workspace)).build()); - Assert.assertEquals(200, response.getResponseCode()); -// response = HttpRequests.execute( -// HttpRequest.post(new URL(baseURL, "workspaces/" + workspace +"/upload")) -// .withBody(Joiner.on(URLEncoder.encode("\n", "UTF-8")).join(lines)) -// .addHeader("recorddelimiter", URLEncoder.encode("\n", "UTF-8")) -// .build()); - Assert.assertEquals(200, response.getResponseCode()); - } - - protected ExecuteResponse execute(URL baseURL, String workspace, String[] directives) throws Exception { - List> queryParams = new ArrayList<>(); - for (String directive : directives) { - queryParams.add(new AbstractMap.SimpleEntry<>("directive", URLEncoder.encode(directive, "UTF-8"))); - } - queryParams.add(new AbstractMap.SimpleEntry<>("limit", "100")); - - URL url = new URL(baseURL, "workspaces/" + workspace + "/execute" + createQueryParams(queryParams)); - HttpResponse response = HttpRequests.execute(HttpRequest.get(url).build()); - Assert.assertEquals(200, response.getResponseCode()); - return new Gson().fromJson(response.getResponseBodyAsString(), ExecuteResponse.class); - } - - // returns the query params string, including any leading '?' - protected String createQueryParams(List> queryParams) { - if (queryParams.isEmpty()) { - return ""; - } - String params = "?" + queryParams.get(0).getKey() + "=" + queryParams.get(0).getValue(); - for (int i = 1; i < queryParams.size(); i++) { - params += "&" + queryParams.get(i).getKey() + "=" + queryParams.get(i).getValue(); - } - return params; - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/bigquery/BigQueryServiceTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/bigquery/BigQueryServiceTest.java deleted file mode 100644 index ad2a590ed..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/bigquery/BigQueryServiceTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.bigquery; - -import com.google.cloud.bigquery.DatasetId; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; -import io.cdap.wrangler.service.gcp.GCPUtils; -import org.junit.Assert; -import org.junit.Test; - -import java.util.HashSet; -import java.util.Set; - -/** - * Tests for {@link BigQueryHandler}. - */ -public class BigQueryServiceTest { - - @Test - public void testDatasetWhitelistParsing() { - ConnectionMeta connection = ConnectionMeta.builder() - .setName("test") - .setType(ConnectionType.BIGQUERY) - .putProperty(GCPUtils.PROJECT_ID, "pX") - // [p0,d0], [p1,d1], 'p2:' is invalid and should be ignored, [pX,d2], [pX,d3] - .putProperty("datasetWhitelist", "p0:d0 , p1:d1 , p2: , d2 , :d3") - .build(); - - Set expected = new HashSet<>(); - expected.add(DatasetId.of("p0", "d0")); - expected.add(DatasetId.of("p1", "d1")); - expected.add(DatasetId.of("pX", "d2")); - expected.add(DatasetId.of("pX", "d3")); - Set actual = BigQueryHandler.getDatasetWhitelist(connection); - Assert.assertEquals(expected, actual); - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/database/DatabaseHandlerTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/database/DatabaseHandlerTest.java deleted file mode 100644 index 4a0060c0c..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/database/DatabaseHandlerTest.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.database; - -import com.google.common.base.Throwables; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import io.cdap.wrangler.api.Row; -import org.hsqldb.Server; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.ClassRule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; - -import java.io.InputStream; -import java.sql.Connection; -import java.sql.Date; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.Time; -import java.sql.Timestamp; -import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TimeZone; - -/** - * Class description here. - */ -public class DatabaseHandlerTest { - private static HSQLDBServer hsqlDBServer; - private static final long CURRENT_TS = System.currentTimeMillis(); - - @ClassRule - public static TemporaryFolder temporaryFolder = new TemporaryFolder(); - - @BeforeClass - public static void setUp() throws Exception { - String hsqlDBDir = temporaryFolder.newFolder("hsqldb").getAbsolutePath(); - TimeZone.setDefault(TimeZone.getTimeZone("UTC")); - hsqlDBServer = new HSQLDBServer(hsqlDBDir, "testdb"); - hsqlDBServer.start(); - try (Connection conn = hsqlDBServer.getConnection()) { - createTestUser(conn); - createTestTables(conn); - prepareTestData(conn); - } - } - - @AfterClass - public static void tearDownDB() throws SQLException { - try (Connection conn = hsqlDBServer.getConnection(); - Statement stmt = conn.createStatement()) { - stmt.execute("DROP TABLE \"my_table\""); - } - hsqlDBServer.stop(); - } - - - @Test - public void testReadingDriverConfiguration() throws Exception { - Map drivers = new HashMap<>(); - int expectedDrivers = 12; - try (InputStream is = DatabaseHandler.class.getClassLoader().getResourceAsStream("drivers.mapping")) { - DatabaseHandler.loadDrivers(is, drivers); - JsonArray values = new JsonArray(); - Collection> entries = drivers.entrySet(); - for (Map.Entry driver : entries) { - JsonObject object = new JsonObject(); - object.addProperty("class", driver.getKey()); - object.addProperty("label", driver.getValue().getName()); - String shortTag = driver.getValue().getTag(); - object.addProperty("tag", shortTag); - object.addProperty("name", shortTag); - object.addProperty("default.port", driver.getValue().getPort()); - values.add(object); - } - Assert.assertEquals(expectedDrivers, values.size()); - } - Assert.assertEquals(expectedDrivers, drivers.size()); - } - - @Test - public void databaseWithLogicalTypes() throws Exception { - List expected = new ArrayList<>(); - Row row = new Row(); - row.add("ID", 1); - row.add("NAME", "alice"); - row.add("DATE_COL", new Date(CURRENT_TS).toLocalDate()); - row.add("TIME_COL", new Time(CURRENT_TS).toLocalTime()); - row.add("TIMESTAMP_COL", new Timestamp(CURRENT_TS).toInstant().atZone(ZoneId.of("UTC"))); - expected.add(row); - row = new Row(); - row.add("ID", 2); - row.add("NAME", "bob"); - row.add("DATE_COL", new Date(CURRENT_TS).toLocalDate()); - row.add("TIME_COL", null); - row.add("TIMESTAMP_COL", null); - expected.add(row); - - try (Connection conn = getConnection(); - Statement stmt = conn.createStatement()) { - stmt.execute("SELECT * FROM \"my_table\""); - try (ResultSet resultSet = stmt.getResultSet()) { - List actual = DatabaseHandler.getRows(2, resultSet); - Assert.assertEquals(expected.get(0).getValue(0), actual.get(0).getValue(0)); - Assert.assertEquals(expected.get(0).getValue(1), actual.get(0).getValue(1)); - Assert.assertEquals(expected.get(0).getValue(2), actual.get(0).getValue(2)); - Assert.assertEquals(expected.get(0).getValue(3), actual.get(0).getValue(3)); - Assert.assertEquals(expected.get(0).getValue(4), actual.get(0).getValue(4)); - - Assert.assertEquals(expected.get(1).getValue(0), actual.get(1).getValue(0)); - Assert.assertEquals(expected.get(1).getValue(1), actual.get(1).getValue(1)); - Assert.assertEquals(expected.get(1).getValue(2), actual.get(1).getValue(2)); - Assert.assertEquals(expected.get(1).getValue(3), actual.get(1).getValue(3)); - Assert.assertEquals(expected.get(1).getValue(4), actual.get(1).getValue(4)); - } - } - } - - private static void createTestUser(Connection conn) throws SQLException { - try (Statement stmt = conn.createStatement()) { - stmt.execute("CREATE USER \"emptyPwdUser\" PASSWORD '' ADMIN"); - } - } - - private static void createTestTables(Connection conn) throws SQLException { - try (Statement stmt = conn.createStatement()) { - // note that the tables need quotation marks around them; otherwise, hsql creates them in upper case - stmt.execute("CREATE TABLE \"my_table\"" + - "(" + - "ID INT NOT NULL, " + - "NAME VARCHAR(40) NOT NULL, " + - "DATE_COL DATE, " + - "TIME_COL TIME, " + - "TIMESTAMP_COL TIMESTAMP, " + - ")"); - } - } - - private static void prepareTestData(Connection conn) throws SQLException { - try ( - PreparedStatement pStmt1 = - conn.prepareStatement("INSERT INTO \"my_table\" VALUES(?, ?, ?, ?, ?)")) { - pStmt1.setInt(1, 1); - pStmt1.setString(2, "alice"); - pStmt1.setDate(3, new Date(CURRENT_TS)); - pStmt1.setTime(4, new Time(CURRENT_TS)); - pStmt1.setTimestamp(5, new Timestamp(CURRENT_TS)); - pStmt1.executeUpdate(); - - pStmt1.setInt(1, 2); - pStmt1.setString(2, "bob"); - pStmt1.setDate(3, new Date(CURRENT_TS)); - pStmt1.setTime(4, null); - pStmt1.setTimestamp(5, null); - pStmt1.executeUpdate(); - } - } - - private Connection getConnection() { - return hsqlDBServer == null ? null : hsqlDBServer.getConnection(); - } - - private static class HSQLDBServer { - private final String locationUrl; - private final String database; - private final String connectionUrl; - private final Server server; - private final String hsqlDBDriver = "org.hsqldb.jdbcDriver"; - - private HSQLDBServer(String location, String database) { - this.locationUrl = String.format("%s/%s", location, database); - this.database = database; - this.connectionUrl = String.format("jdbc:hsqldb:hsql://localhost/%s", database); - this.server = new Server(); - } - - void start() { - server.setDatabasePath(0, locationUrl); - server.setDatabaseName(0, database); - server.start(); - } - - void stop() { - server.stop(); - } - - Connection getConnection() { - try { - Class.forName(hsqlDBDriver); - return DriverManager.getConnection(connectionUrl); - } catch (Exception e) { - throw Throwables.propagate(e); - } - } - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/directive/RequestTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/directive/RequestTest.java deleted file mode 100644 index 5ce48c988..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/directive/RequestTest.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.directive; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonParseException; -import io.cdap.wrangler.dataset.workspace.RequestDeserializer; -import io.cdap.wrangler.proto.Request; -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests Request Parsing. - */ -public class RequestTest { - - @Test - public void testDeserialization() throws Exception { - String basic = " {\n" + - " \"version\" : 1,\n" + - " \"workspace\" : {\n" + - " \"name\" : \"body\",\n" + - " \"results\" : 100\n" + - " },\n" + - " \"recipe\" : {\n" + - " \"directives\" : [\n" + - " \"parse-as-csv body ,\",\n" + - " \"drop body\",\n" + - " \"set-columns a,b,c,d\"\n" + - " ],\n" + - " \"save\" : true,\n" + - " \"name\" : \"my-recipe\"\n" + - " },\n" + - " \"sampling\" : {\n" + - " \"method\" : \"FIRST\",\n" + - " \"seed\" : 1,\n" + - " \"limit\" : 1000\n" + - " }\n" + - " }"; - GsonBuilder builder = new GsonBuilder(); - builder.registerTypeAdapter(Request.class, new RequestDeserializer()); - Gson gson = builder.create(); - Request request = gson.fromJson(basic, Request.class); - Assert.assertEquals("body", request.getWorkspace().getName()); - Assert.assertEquals(100, (int) request.getWorkspace().getResults()); - } - - @Test(expected = JsonParseException.class) - public void testVersionMissing() throws Exception { - String basic = " {\n" + - " \"workspace\" : {\n" + - " \"name\" : \"body\",\n" + - " \"results\" : 100\n" + - " },\n" + - " \"recipe\" : {\n" + - " \"directives\" : [\n" + - " \"parse-as-csv body ,\",\n" + - " \"drop body\",\n" + - " \"set-columns a,b,c,d\"\n" + - " ],\n" + - " \"save\" : true,\n" + - " \"name\" : \"my-recipe\"\n" + - " },\n" + - " \"sampling\" : {\n" + - " \"method\" : \"FIRST\",\n" + - " \"seed\" : 1,\n" + - " \"limit\" : 1000\n" + - " }\n" + - " }"; - GsonBuilder builder = new GsonBuilder(); - builder.registerTypeAdapter(Request.class, new RequestDeserializer()); - Gson gson = builder.create(); - gson.fromJson(basic, Request.class); - } - - @Test(expected = JsonParseException.class) - public void testWithWrongVersion() throws Exception { - String basic = " {\n" + - " \"version\" : 2,\n" + - " \"workspace\" : {\n" + - " \"name\" : \"body\",\n" + - " \"results\" : 100\n" + - " },\n" + - " \"recipe\" : {\n" + - " \"directives\" : [\n" + - " \"parse-as-csv body ,\",\n" + - " \"drop body\",\n" + - " \"set-columns a,b,c,d\"\n" + - " ],\n" + - " \"save\" : true,\n" + - " \"name\" : \"my-recipe\"\n" + - " },\n" + - " \"sampling\" : {\n" + - " \"method\" : \"FIRST\",\n" + - " \"seed\" : 1,\n" + - " \"limit\" : 1000\n" + - " }\n" + - " }"; - GsonBuilder builder = new GsonBuilder(); - builder.registerTypeAdapter(Request.class, new RequestDeserializer()); - Gson gson = builder.create(); - gson.fromJson(basic, Request.class); - } - - @Test - public void testSaveAndNameNotPresent() throws Exception { - String basic = " {\n" + - " \"version\" : 1,\n" + - " \"workspace\" : {\n" + - " \"name\" : \"body\",\n" + - " \"results\" : 100\n" + - " },\n" + - " \"recipe\" : {\n" + - " \"directives\" : [\n" + - " \"parse-as-csv body ,\",\n" + - " \"drop body\",\n" + - " \"set-columns a,b,c,d\"\n" + - " ]\n" + - " },\n" + - " \"sampling\" : {\n" + - " \"method\" : \"FIRST\",\n" + - " \"seed\" : 1,\n" + - " \"limit\" : 1000\n" + - " }\n" + - " }"; - GsonBuilder builder = new GsonBuilder(); - builder.registerTypeAdapter(Request.class, new RequestDeserializer()); - Gson gson = builder.create(); - Request request = gson.fromJson(basic, Request.class); - Assert.assertNotNull(request); - Assert.assertNull(request.getRecipe().getName()); - Assert.assertNull(request.getRecipe().getSave()); - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/directive/WranglerDisplaySerializerTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/directive/WranglerDisplaySerializerTest.java deleted file mode 100644 index 3abdf54f8..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/directive/WranglerDisplaySerializerTest.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.directive; - -import com.google.common.base.Charsets; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import io.cdap.cdap.api.common.Bytes; -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.nio.ByteBuffer; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZonedDateTime; -import java.util.Arrays; - -public class WranglerDisplaySerializerTest { - - @Test - public void testRowSerialization() { - Gson gson = new GsonBuilder().registerTypeAdapterFactory(new WranglerDisplaySerializer()).create(); - Row subRow = new Row(); - subRow.add("f1", 1); - subRow.add("f2", "aaa"); - subRow.add("f3", 1L); - subRow.add("f4", 0d); - subRow.add("f5", "test".getBytes(Charsets.UTF_8)); - subRow.add("f6", true); - subRow.add("f7", 0f); - subRow.add("f8", LocalDate.now()); - subRow.add("f9", ZonedDateTime.now()); - subRow.add("f10", ZonedDateTime.now()); - subRow.add("f11", LocalTime.now()); - subRow.add("f12", new BigDecimal(new BigInteger("111"), 2)); - subRow.add("f13", LocalDateTime.now()); - subRow.add("f14", Arrays.asList("A", "B", "C")); - Row rowToConvert = new Row(subRow); - rowToConvert.add("f15", subRow); - String serializedOutput = gson.toJson(rowToConvert); - - String f1Str = "1"; - String f2Str = "\"aaa\""; - String f3Str = "1"; - String f4Str = "0.0"; - String f5Str = "\"" + WranglerDisplaySerializer.NONDISPLAYABLE_STRING + "\""; - String f6Str = "true"; - String f7Str = "0.0"; - String f8Str = "\"" + subRow.getValue("f8").toString() + "\""; - String f9Str = "\"" + subRow.getValue("f9").toString() + "\""; - String f10Str = "\"" + subRow.getValue("f10").toString() + "\""; - String f11Str = "\"" + subRow.getValue("f11").toString() + "\""; - String f12Str = "\"1.11\""; - String f13Str = "\"" + subRow.getValue("f13").toString() + "\""; - String f14Str = "[\"A\",\"B\",\"C\"]"; - String f15Str = String.format("{\"f1\":%s,\"f2\":%s,\"f3\":%s,\"f4\":%s,\"f5\":%s,\"f6\":%s,\"f7\":%s,\"f8\":%s," - + "\"f9\":%s,\"f10\":%s,\"f11\":%s,\"f12\":%s,\"f13\":%s,\"f14\":%s}", f1Str, f2Str, f3Str, f4Str, f5Str, f6Str, - f7Str, f8Str, f9Str, f10Str, f11Str, f12Str, f13Str, f14Str); - - String outputTest = String.format("{\"f1\":%s,\"f2\":%s,\"f3\":%s,\"f4\":%s,\"f5\":%s,\"f6\":%s,\"f7\":%s," - + "\"f8\":%s,\"f9\":%s,\"f10\":%s,\"f11\":%s,\"f12\":%s,\"f13\":%s,\"f14\":%s,\"f15\":%s}", f1Str, f2Str, f3Str, - f4Str, f5Str, f6Str, f7Str, f8Str, f9Str, f10Str, f11Str, f12Str, f13Str, f14Str, - f15Str); - Assert.assertEquals(serializedOutput, outputTest); - } - -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/explorer/GCSServiceTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/explorer/GCSServiceTest.java deleted file mode 100644 index a5c203c3b..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/explorer/GCSServiceTest.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.explorer; - -import com.google.api.gax.paging.Page; -import com.google.auth.oauth2.ServiceAccountCredentials; -import com.google.cloud.storage.Blob; -import com.google.cloud.storage.Bucket; -import com.google.cloud.storage.Storage; -import com.google.cloud.storage.StorageOptions; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import io.cdap.wrangler.service.gcp.GCPUtils; -import io.cdap.wrangler.service.gcs.GCSHandler; -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; - -import java.net.HttpURLConnection; -import java.util.Iterator; - -/** - * Tests {@link GCSHandler} - */ -@Ignore -public class GCSServiceTest { - - @Ignore - private JsonObject list(String path) throws Exception { - String key = "/tmp/cask-dev-clusters-729251f6adf7.json"; - ServiceAccountCredentials credentials = GCPUtils.loadLocalFile(key); - - Storage storage = StorageOptions.newBuilder() - .setProjectId("cask-dev-clusters") - .setCredentials(credentials) - .build() - .getService(); - - String bucketName = ""; - String prefix = null; - int bucketStart = path.indexOf("/"); - if (bucketStart != -1) { - int bucketEnd = path.indexOf("/", bucketStart + 1); - if (bucketEnd != -1) { - bucketName = path.substring(bucketStart + 1, bucketEnd); - if ((bucketEnd + 1) != path.length()) { - prefix = path.substring(bucketEnd + 1); - } - } else { - bucketName = path.substring(bucketStart + 1); - } - } - - if (bucketName.isEmpty() && prefix == null) { - Page list = storage.list(); - Iterator iterator = list.getValues().iterator(); - JsonObject response = new JsonObject(); - response.addProperty("status", HttpURLConnection.HTTP_OK); - response.addProperty("message", "OK"); - JsonArray values = new JsonArray(); - while (iterator.hasNext()) { - com.google.cloud.storage.Bucket bucket = iterator.next(); - JsonObject object = new JsonObject(); - object.addProperty("name", bucket.getName()); - object.addProperty("created", bucket.getCreateTime()); - object.addProperty("etag", bucket.getEtag()); - object.addProperty("generated-id", bucket.getGeneratedId()); - object.addProperty("meta-generation", bucket.getMetageneration()); - values.add(object); - } - response.addProperty("count", values.size()); - response.add("values", values); - return response; - } - - Page list = null; - if (prefix == null) { - list = storage.list(bucketName, Storage.BlobListOption.currentDirectory()); - } else { - list = storage.list(bucketName, Storage.BlobListOption.currentDirectory(), - Storage.BlobListOption.prefix(prefix)); - } - - Iterator iterator = list.iterateAll().iterator(); - JsonArray values = new JsonArray(); - while (iterator.hasNext()) { - JsonObject object = new JsonObject(); - Blob blob = iterator.next(); - - object.addProperty("bucket", blob.getBucket()); - object.addProperty("name", blob.getName().replaceFirst(prefix, "")); - object.addProperty("path", blob.getName()); - object.addProperty("generation", blob.getGeneration()); - object.addProperty("created", blob.getCreateTime()); - object.addProperty("md5", blob.getMd5()); - object.addProperty("size", blob.getSize()); - object.addProperty("content-type", blob.getContentType()); - values.add(object); - } - JsonObject response = new JsonObject(); - response.addProperty("status", HttpURLConnection.HTTP_OK); - response.addProperty("message", "OK"); - response.addProperty("count", values.size()); - response.add("values", values); - return response; - } - - @Test - @Ignore - public void testExploreGCS() throws Exception { - list("/cdap/audio/raw"); - Assert.assertTrue(true); - } - -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/filesystem/BoundedLineInputStreamTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/filesystem/BoundedLineInputStreamTest.java deleted file mode 100644 index c5cb52fc4..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/filesystem/BoundedLineInputStreamTest.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.filesystem; - -import io.cdap.wrangler.service.explorer.BoundedLineInputStream; -import io.cdap.wrangler.service.explorer.Explorer; -import org.junit.Assert; -import org.junit.Test; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -/** - * Tests {@link BoundedLineInputStream} - */ -public class BoundedLineInputStreamTest { - - @Test - public void testBasicLineReading() throws Exception { - InputStream stream = Explorer.class.getClassLoader().getResourceAsStream("file.extensions"); - BoundedLineInputStream blis = BoundedLineInputStream.iterator(stream, "utf-8", 10); - int i = 0; - List lines = new ArrayList<>(); - try { - while (blis.hasNext()) { - String line = blis.next(); - lines.add(line); - Assert.assertNotNull(line); - i++; - } - } finally { - blis.close(); - } - Assert.assertTrue(i == 10); - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/filesystem/FilesystemExplorerTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/filesystem/FilesystemExplorerTest.java deleted file mode 100644 index bde3e4eaf..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/filesystem/FilesystemExplorerTest.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.filesystem; - -import io.cdap.cdap.api.dataset.Dataset; -import io.cdap.cdap.api.dataset.lib.FileSet; -import io.cdap.cdap.test.ApplicationManager; -import io.cdap.cdap.test.ServiceManager; -import io.cdap.cdap.test.TestBase; -import io.cdap.wrangler.service.explorer.DatasetProvider; -import io.cdap.wrangler.service.explorer.Explorer; -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; - -import java.util.Map; - -/** - * Class description here. - */ -@Ignore -public class FilesystemExplorerTest extends TestBase { - @Test - public void testExplorer() throws Exception { - ApplicationManager app = deployApplication(TestApp.class); - ServiceManager service = app.getServiceManager("service"); - service.start(); - Explorer explorer = new Explorer(new DatasetProvider() { - @Override - public Dataset acquire() throws Exception { - return (FileSet) getDataset("indexds").get(); - } - - @Override - public void release(Dataset dataset) { - } - }); - Map listing = explorer.browse("/", false); - Assert.assertTrue(listing.size() > 0); - service.stop(); - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/filesystem/TestApp.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/filesystem/TestApp.java deleted file mode 100644 index d1d00f6b1..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/filesystem/TestApp.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.filesystem; - -import io.cdap.cdap.api.app.AbstractApplication; -import io.cdap.cdap.api.dataset.lib.FileSet; -import io.cdap.cdap.api.dataset.lib.FileSetProperties; -import io.cdap.wrangler.service.explorer.FilesystemExplorer; -import org.apache.hadoop.mapred.TextInputFormat; -import org.apache.hadoop.mapred.TextOutputFormat; - -public class TestApp extends AbstractApplication { - /** - * Override this method to declare and configure the application. - */ - @Override - public void configure() { - setName("dataprep"); - setDescription("DataPrep Backend Service"); - // Used by the file service. - createDataset("indexds", FileSet.class, FileSetProperties.builder() - .setBasePath("dataprep/indexds") - .setInputFormat(TextInputFormat.class) - .setOutputFormat(TextOutputFormat.class) - .setDescription("Store Dataset Index files") - .build()); - addService("service", new FilesystemExplorer()); - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/gcs/GCSServiceTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/gcs/GCSServiceTest.java deleted file mode 100644 index 7b5e20ba5..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/gcs/GCSServiceTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.gcs; - -import com.google.auth.oauth2.ServiceAccountCredentials; -import com.google.cloud.ReadChannel; -import com.google.cloud.storage.Blob; -import com.google.cloud.storage.BlobId; -import com.google.cloud.storage.Storage; -import com.google.cloud.storage.StorageOptions; -import io.cdap.wrangler.BytesDecoder; -import io.cdap.wrangler.service.FileTypeDetector; -import io.cdap.wrangler.service.gcp.GCPUtils; -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.Test; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.nio.ByteBuffer; -import java.nio.channels.Channels; -import java.nio.channels.WritableByteChannel; -import java.util.Arrays; - -/** - * Tests parts of {@link GCSHandler} - */ -@Ignore -public class GCSServiceTest { - - @Test - @Ignore - public void testReadingDataFromGCS() throws Exception { - FileTypeDetector detector = new FileTypeDetector(); - Storage storage = getStorage("cask-dev-clusters", "/tmp/cask-dev-clusters-729251f6adf7.json"); - String bucket = "cdap"; - String path = "demo/csv/titanic.csv"; - - Blob blob = storage.get(BlobId.of(bucket, path)); - if (!blob.isDirectory()) { - String blobName = blob.getName(); - File file = new File(blobName); - String fileType = detector.detectFileType(blobName); - - try (ReadChannel reader = blob.reader()) { - int min = (int) Math.min(blob.getSize(), GCSHandler.FILE_SIZE); - reader.setChunkSize(min); - byte[] bytes = new byte[min]; - WritableByteChannel writable = Channels.newChannel(new ByteArrayOutputStream(min)); - ByteBuffer buf = ByteBuffer.wrap(bytes); - long total = min; - while (reader.read(buf) != -1 && total > 0) { - buf.flip(); - while (buf.hasRemaining()) { - total -= writable.write(buf); - } - buf.clear(); - } - String encoding = BytesDecoder.guessEncoding(bytes); - if (fileType.equalsIgnoreCase("text/plain") - && (encoding.equalsIgnoreCase("utf-8") || encoding.equalsIgnoreCase("ascii"))) { - String data = new String(bytes, encoding); - String[] lines = data.split("\r\n|\r|\n"); - if (blob.getSize() > GCSHandler.FILE_SIZE) { - lines = Arrays.copyOf(lines, lines.length - 1); - } - Assert.assertTrue(lines.length == lines.length - 1); - } else { - // write it as binary - Assert.assertTrue(true); - } - } - } - } - - @Test - @Ignore - public void testFileName() throws Exception { - String path = "demo/csv/titanic.csv"; - File file = new File(path); - String name = file.getName(); - Assert.assertEquals("titanic.csv", name); - } - - private Storage getStorage(String projectId, String path) throws Exception { - ServiceAccountCredentials credentials = GCPUtils.loadLocalFile(path); - - Storage storage = StorageOptions.newBuilder() - .setProjectId(projectId) - .setCredentials(credentials) - .build() - .getService(); - - return storage; - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/kafka/KafkaServiceTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/kafka/KafkaServiceTest.java deleted file mode 100644 index 2434d359e..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/kafka/KafkaServiceTest.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.kafka; - -import avro.shaded.com.google.common.collect.Lists; -import org.apache.kafka.clients.consumer.ConsumerConfig; -import org.apache.kafka.clients.consumer.ConsumerRecord; -import org.apache.kafka.clients.consumer.ConsumerRecords; -import org.apache.kafka.clients.consumer.KafkaConsumer; -import org.apache.kafka.common.PartitionInfo; -import org.apache.kafka.common.serialization.StringDeserializer; -import org.junit.Ignore; -import org.junit.Test; - -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.UUID; - -/** - * Class description here. - */ -public class KafkaServiceTest { - - @Ignore - @Test - public void testFoo() throws Exception { - Properties props = new Properties(); - props.put("bootstrap.servers", "localhost:9092"); - props.put(ConsumerConfig.CLIENT_ID_CONFIG, UUID.randomUUID().toString()); - props.put(ConsumerConfig.GROUP_ID_CONFIG, UUID.randomUUID().toString()); - props.put("key.deserializer", StringDeserializer.class.getName()); - props.put("value.deserializer", StringDeserializer.class.getName()); - props.setProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); - KafkaConsumer consumer = new KafkaConsumer<>(props); - Map> stringListMap = consumer.listTopics(); - consumer.subscribe(Lists.newArrayList("test")); - try { - while (true) { - ConsumerRecords records = consumer.poll(1000); - for (ConsumerRecord record : records) { - System.out.println(record.offset() + ": " + record.value()); - } - break; - } - } finally { - consumer.close(); - } - } -} diff --git a/wrangler-service/src/test/java/io/cdap/wrangler/service/schema/SchemaRegistryServiceTest.java b/wrangler-service/src/test/java/io/cdap/wrangler/service/schema/SchemaRegistryServiceTest.java deleted file mode 100644 index 8b12f3741..000000000 --- a/wrangler-service/src/test/java/io/cdap/wrangler/service/schema/SchemaRegistryServiceTest.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.service.schema; - -/** - * Tests {@link SchemaRegistryHandler} - */ -public class SchemaRegistryServiceTest { - // NOTE: Once, we fix the issue with the guava inclusion in TestBase, need to add tests here. -} diff --git a/wrangler-storage/pom.xml b/wrangler-storage/pom.xml deleted file mode 100644 index 4ca17bb90..000000000 --- a/wrangler-storage/pom.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - wrangler - io.cdap.wrangler - 4.12.0-SNAPSHOT - - 4.0.0 - - wrangler-storage - Wrangler Storage - - - - io.cdap.cdap - cdap-api - ${cdap.version} - - - io.cdap.cdap - cdap-system-app-unit-test - ${cdap.version} - test - - - org.apache.hive - hive-exec - - - log4j - log4j - - - - - io.cdap.cdap - cdap-system-app-api - ${cdap.version} - - - io.cdap.wrangler - wrangler-api - ${project.version} - - - io.cdap.wrangler - wrangler-proto - ${project.version} - - - com.google.code.gson - gson - ${gson.version} - - - org.slf4j - slf4j-api - ${slf4j.version} - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.14.1 - - - - - diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/connections/ConnectionAlreadyExistsException.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/connections/ConnectionAlreadyExistsException.java deleted file mode 100644 index 904d73511..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/connections/ConnectionAlreadyExistsException.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.connections; - -import io.cdap.wrangler.proto.ConflictException; - -/** - * Thrown when a connection already exists when none is expected. - */ -public class ConnectionAlreadyExistsException extends ConflictException { - - public ConnectionAlreadyExistsException(String message) { - super(message); - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/connections/ConnectionNotFoundException.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/connections/ConnectionNotFoundException.java deleted file mode 100644 index ba6ef529a..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/connections/ConnectionNotFoundException.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.connections; - -import io.cdap.wrangler.proto.NotFoundException; - -/** - * Thrown when a connection does not exist when one is expected to exist. - */ -public class ConnectionNotFoundException extends NotFoundException { - - public ConnectionNotFoundException(String message) { - super(message); - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/connections/ConnectionStore.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/connections/ConnectionStore.java deleted file mode 100644 index 1a32e7e97..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/connections/ConnectionStore.java +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.connections; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.api.Predicate; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.dataset.lib.CloseableIterator; -import io.cdap.cdap.internal.io.SchemaTypeAdapter; -import io.cdap.cdap.spi.data.StructuredRow; -import io.cdap.cdap.spi.data.StructuredTable; -import io.cdap.cdap.spi.data.StructuredTableContext; -import io.cdap.cdap.spi.data.TableNotFoundException; -import io.cdap.cdap.spi.data.table.StructuredTableId; -import io.cdap.cdap.spi.data.table.StructuredTableSpecification; -import io.cdap.cdap.spi.data.table.field.Field; -import io.cdap.cdap.spi.data.table.field.FieldType; -import io.cdap.cdap.spi.data.table.field.Fields; -import io.cdap.cdap.spi.data.table.field.Range; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.concurrent.TimeUnit; -import javax.annotation.Nullable; - -/** - * This class {@link ConnectionStore} manages all the connections defined. - * It manages the lifecycle of the {@link Connection} including all CRUD operations. - * - * The store is backed by a table with namespace, id, type, name, description, properties, created, and updated columns. - * The primary key is the namespace and id. - */ -@Deprecated -public class ConnectionStore { - private static final Gson GSON = new GsonBuilder() - .registerTypeAdapter(Schema.class, new SchemaTypeAdapter()).create(); - private static final Type MAP_TYPE = new TypeToken>() { }.getType(); - private static final String NAMESPACE_COL = "namespace"; - private static final String GENERATION_COL = "generation"; - private static final String ID_COL = "id"; - private static final String TYPE_COL = "type"; - private static final String NAME_COL = "name"; - private static final String DESC_COL = "description"; - private static final String PROPERTIES_COL = "properties"; - private static final String CREATED_COL = "created"; - private static final String UPDATED_COL = "updated"; - private static final String PRECONFIGURED_COL = "preconfigured"; - private static final StructuredTableId TABLE_ID = new StructuredTableId("connections"); - public static final StructuredTableSpecification TABLE_SPEC = new StructuredTableSpecification.Builder() - .withId(TABLE_ID) - .withFields(new FieldType(NAMESPACE_COL, FieldType.Type.STRING), - new FieldType(GENERATION_COL, FieldType.Type.LONG), - new FieldType(ID_COL, FieldType.Type.STRING), - new FieldType(TYPE_COL, FieldType.Type.STRING), - new FieldType(NAME_COL, FieldType.Type.STRING), - new FieldType(DESC_COL, FieldType.Type.STRING), - new FieldType(PROPERTIES_COL, FieldType.Type.STRING), - new FieldType(CREATED_COL, FieldType.Type.LONG), - new FieldType(UPDATED_COL, FieldType.Type.LONG), - new FieldType(PRECONFIGURED_COL, FieldType.Type.STRING)) - .withPrimaryKeys(NAMESPACE_COL, GENERATION_COL, ID_COL) - .build(); - - private final StructuredTable table; - - private ConnectionStore(StructuredTable table) { - this.table = table; - } - - public static ConnectionStore get(StructuredTableContext context) { - try { - StructuredTable table = context.getTable(TABLE_ID); - return new ConnectionStore(table); - } catch (TableNotFoundException e) { - throw new IllegalStateException(String.format( - "System table '%s' does not exist. Please check your system environment.", TABLE_ID.getName()), e); - } - } - - /** - * Creates an entry in the {@link ConnectionStore} for object {@link Connection}. - * - * This method creates the id and returns if after successfully updating the store. - * - * @param meta the metadata of the connection create - * @return id of the connection stored - * @throws ConnectionAlreadyExistsException if the connection already exists - */ - public NamespacedId create(Namespace namespace, - ConnectionMeta meta) throws ConnectionAlreadyExistsException, IOException { - return create(namespace, meta, false); - } - - public NamespacedId create(Namespace namespace, ConnectionMeta meta, - boolean preconfigured) throws ConnectionAlreadyExistsException, IOException { - NamespacedId id = new NamespacedId(namespace, getConnectionId(meta.getName())); - Connection existing = read(id); - if (existing != null) { - throw new ConnectionAlreadyExistsException( - String.format("Connection named '%s' with id '%s' already exists.", meta.getName(), id.getId())); - } - - long now = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()); - Connection connection = Connection.builder(id, meta) - .setCreated(now) - .setUpdated(now) - .setPreconfigured(preconfigured) - .build(); - table.upsert(toFields(connection, namespace.getGeneration())); - return id; - } - - /** - * Get the specified connection. - * - * @param id the id of the connection - * @return the connection information - * @throws ConnectionNotFoundException if the connection does not exist - */ - public Connection get(NamespacedId id) throws ConnectionNotFoundException, IOException { - Connection existing = read(id); - if (existing == null) { - throw new ConnectionNotFoundException(String.format("Connection '%s' does not exist", id.getId())); - } - return existing; - } - - /** - * Updates an existing connection in the store. - * - * @param id the id of the object to be update - * @param meta metadata to update - * @throws ConnectionNotFoundException if the specified connection does not exist - */ - public void update(NamespacedId id, ConnectionMeta meta) throws ConnectionNotFoundException, IOException { - Connection existing = get(id); - - Connection updated = Connection.builder(id, meta) - .setCreated(existing.getCreated()) - .setUpdated(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) - .build(); - table.upsert(toFields(updated, id.getNamespace().getGeneration())); - } - - /** - * Deletes the specified connection. - * - * @param id the connection to delete - */ - public void delete(NamespacedId id) throws IOException { - table.delete(getKey(id)); - } - - /** - * Returns true if connection identified by connectionName already exists. - */ - public boolean connectionExists(Namespace namespace, String connectionName) throws IOException { - return read(new NamespacedId(namespace, getConnectionId(connectionName))) != null; - } - - /** - * Scans the namespace to list all the keys applying the filter. - * - * @param filter to be applied on the data being returned. - * @return List of connections - */ - public List list(Namespace namespace, Predicate filter) throws IOException { - List> key = new ArrayList<>(2); - key.add(Fields.stringField(NAMESPACE_COL, namespace.getName())); - key.add(Fields.longField(GENERATION_COL, namespace.getGeneration())); - Range range = Range.singleton(key); - try (CloseableIterator rowIter = table.scan(range, Integer.MAX_VALUE)) { - List result = new ArrayList<>(); - while (rowIter.hasNext()) { - StructuredRow row = rowIter.next(); - Connection connection = fromRow(row); - if (filter.apply(connection)) { - result.add(connection); - } - } - return result; - } - } - - /** - * Delete all connection with the namespace and generation id - */ - public void deleteAll(NamespaceSummary namespace) throws IOException { - List> key = new ArrayList<>(2); - key.add(Fields.stringField(NAMESPACE_COL, namespace.getName())); - key.add(Fields.longField(GENERATION_COL, namespace.getGeneration())); - Range range = Range.singleton(key); - table.deleteAll(range); - } - - /** - * Get connection id for the given connection name - * - * @param name name of the connection. - * @return connection id. - */ - public static String getConnectionId(String name) { - name = name.trim(); - // Lower case columns - name = name.toLowerCase(); - // Filtering unwanted characters - name = name.replaceAll("[^a-zA-Z0-9_]", "_"); - return name; - } - - @Nullable - private Connection read(NamespacedId id) throws IOException { - Optional row = table.read(getKey(id)); - return row.map(this::fromRow).orElse(null); - } - - private List> getKey(NamespacedId id) { - List> keyFields = new ArrayList<>(2); - keyFields.add(Fields.stringField(NAMESPACE_COL, id.getNamespace().getName())); - keyFields.add(Fields.longField(GENERATION_COL, id.getNamespace().getGeneration())); - keyFields.add(Fields.stringField(ID_COL, id.getId())); - return keyFields; - } - - private List> toFields(Connection connection, long generation) { - List> fields = new ArrayList<>(8); - fields.add(Fields.stringField(NAMESPACE_COL, connection.getNamespace())); - fields.add(Fields.longField(GENERATION_COL, generation)); - fields.add(Fields.stringField(ID_COL, connection.getId())); - fields.add(Fields.stringField(TYPE_COL, connection.getType().name())); - fields.add(Fields.stringField(NAME_COL, connection.getName())); - fields.add(Fields.stringField(DESC_COL, connection.getDescription())); - fields.add(Fields.stringField(PROPERTIES_COL, GSON.toJson(connection.getProperties()))); - fields.add(Fields.longField(CREATED_COL, connection.getCreated())); - fields.add(Fields.longField(UPDATED_COL, connection.getUpdated())); - fields.add(Fields.stringField(PRECONFIGURED_COL, String.valueOf(connection.isPreconfigured()))); - - return fields; - } - - private Connection fromRow(StructuredRow row) { - Namespace namespace = new Namespace(row.getString(NAMESPACE_COL), row.getLong(GENERATION_COL)); - return Connection.builder(new NamespacedId(namespace, row.getString(ID_COL))) - .setType(ConnectionType.valueOf(row.getString(TYPE_COL))) - .setName(row.getString(NAME_COL)) - .setDescription(row.getString(DESC_COL)) - .setProperties(GSON.fromJson(row.getString(PROPERTIES_COL), MAP_TYPE)) - .setCreated(row.getLong(CREATED_COL)) - .setUpdated(row.getLong(UPDATED_COL)) - .setPreconfigured(Boolean.valueOf(row.getString(PRECONFIGURED_COL))) - .build(); - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipeAlreadyExistsException.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipeAlreadyExistsException.java deleted file mode 100644 index e02ebf3f3..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipeAlreadyExistsException.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.recipe; - -/** - * Thrown when a Recipe with a given recipe name already exists. - */ -public class RecipeAlreadyExistsException extends IllegalArgumentException { - public RecipeAlreadyExistsException(String message) { - super(message); - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipeNotFoundException.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipeNotFoundException.java deleted file mode 100644 index 033d0fd4e..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipeNotFoundException.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.recipe; - -import io.cdap.wrangler.proto.NotFoundException; - -/** - * Thrown when a Recipe is not found when it is expected to exist. - */ -public class RecipeNotFoundException extends NotFoundException { - public RecipeNotFoundException(String message) { - super(message); - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipePageRequest.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipePageRequest.java deleted file mode 100644 index 56219f2d3..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipePageRequest.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.recipe; - -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.spi.data.SortOrder; -import io.cdap.cdap.spi.data.table.field.Field; -import io.cdap.cdap.spi.data.table.field.Fields; -import io.cdap.cdap.spi.data.table.field.Range; -import io.cdap.wrangler.dataset.utils.PageRequest; -import io.cdap.wrangler.proto.recipe.v2.Recipe; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import static io.cdap.cdap.spi.data.table.field.Range.Bound.INCLUSIVE; -import static io.cdap.wrangler.store.recipe.RecipeStore.GENERATION_COL; -import static io.cdap.wrangler.store.recipe.RecipeStore.NAMESPACE_FIELD; -import static io.cdap.wrangler.store.recipe.RecipeStore.RECIPE_NAME_FIELD; -import static io.cdap.wrangler.store.recipe.RecipeStore.UPDATE_TIME_COL; -import static io.cdap.wrangler.store.utils.Stores.getNamespaceKeys; - -/** - * Represents a request to fetch a page of Recipes. - */ -public class RecipePageRequest extends PageRequest { - public static final String SORT_BY_NAME = "name"; - public static final String SORT_BY_UPDATE_TIME = "updated"; - - private static final Map sortByMap = createSortByMap(); - - private final NamespaceSummary namespace; - - protected RecipePageRequest(Integer pageSize, String pageToken, String sortBy, - String sortOrder, NamespaceSummary namespace) { - super(pageSize, pageToken, sortBy, sortOrder); - this.namespace = namespace; - validatePageTokenDataType(this.getPageToken(), this.getSortBy()); - } - - public NamespaceSummary getNamespace() { - return namespace; - } - - @Override - public void validateSortBy(String sortBy) { - if (sortBy != null && !sortByMap.containsKey(sortBy)) { - throw new IllegalArgumentException( - String.format("Invalid sortBy '%s' specified. sortBy must be one of: '%s' or '%s'", - sortBy, SORT_BY_NAME, SORT_BY_UPDATE_TIME)); - } - } - - @Override - protected String getDefaultSortBy() { - return RECIPE_NAME_FIELD; - } - - @Override - protected String getSortByColumnName(String sortBy) { - return sortByMap.get(sortBy); - } - - @Override - public Range getScanRange() { - Collection> begin = getNamespaceKeys(NAMESPACE_FIELD, GENERATION_COL, namespace); - Collection> end = getNamespaceKeys(NAMESPACE_FIELD, GENERATION_COL, namespace); - - // If pageToken has a value, add the respective field (column, value) to the range to filter results - if (getPageToken() != null) { - Field sortByField = getSortByField(); - - if (getSortOrder().equals(SortOrder.ASC)) { - begin.add(sortByField); - } else { - end.add(sortByField); - } - } - - return Range.create(begin, INCLUSIVE, end, INCLUSIVE); - } - - @Override - public String getNextPageToken(Recipe recipe) { - String nextPageToken; - switch (getSortBy()) { - case RECIPE_NAME_FIELD: - nextPageToken = recipe.getRecipeName(); - break; - case UPDATE_TIME_COL: - nextPageToken = String.valueOf(recipe.getUpdatedTimeMillis()); - break; - default: - throw new IllegalArgumentException( - String.format("Invalid sortBy field '%s' is not mapped to any field in Recipe to return as a pageToken.", - getSortBy())); - } - return nextPageToken; - } - - private static Map createSortByMap() { - Map sortByMap = new HashMap<>(); - sortByMap.put(SORT_BY_NAME, RECIPE_NAME_FIELD); - sortByMap.put(SORT_BY_UPDATE_TIME, UPDATE_TIME_COL); - return sortByMap; - } - - private void validatePageTokenDataType(String pageToken, String sortBy) { - if (pageToken != null && sortBy.equals(UPDATE_TIME_COL)) { - try { - Long.parseLong(pageToken); - } catch (NumberFormatException e) { - throw new IllegalArgumentException( - "pageToken value is of invalid data type: expected 'long' value for sortBy 'updated'"); - } - } - } - - private Field getSortByField() { - Field sortByField; - switch (getSortBy()) { - case RECIPE_NAME_FIELD: - sortByField = Fields.stringField(RECIPE_NAME_FIELD, getPageToken()); - break; - case UPDATE_TIME_COL: - sortByField = Fields.longField(UPDATE_TIME_COL, Long.parseLong(Objects.requireNonNull(getPageToken()))); - break; - default: - throw new IllegalArgumentException( - String.format("Invalid sortBy field '%s' is not mapped to any Recipe store column name.", - getSortBy())); - } - return sortByField; - } - - public static Builder builder(NamespaceSummary namespace) { - return new Builder(namespace); - } - - /** - * Creates a {@link RecipePageRequest} object - */ - public static class Builder { - private final NamespaceSummary namespace; - private Integer pageSize; - private String pageToken; - private String sortBy; - private String sortOrder; - - Builder(NamespaceSummary namespace) { - this.namespace = namespace; - } - - public Builder setPageSize(Integer pageSize) { - this.pageSize = pageSize; - return this; - } - - public Builder setPageToken(String pageToken) { - this.pageToken = pageToken; - return this; - } - - public Builder setSortBy(String sortBy) { - this.sortBy = sortBy; - return this; - } - - public Builder setSortOrder(String sortOrder) { - this.sortOrder = sortOrder; - return this; - } - - public RecipePageRequest build() { - return new RecipePageRequest(pageSize, pageToken, sortBy, sortOrder, namespace); - } - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipeRow.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipeRow.java deleted file mode 100644 index 63176ebcb..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/recipe/RecipeRow.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.recipe; - -import io.cdap.wrangler.proto.recipe.v2.Recipe; -import java.util.Objects; - -/** - * Stores information about Recipe, including information that should not be exposed to users. - * {@link Recipe} contains fields that are exposed to users. - */ -public class RecipeRow { - private final Recipe recipe; - - private RecipeRow(Recipe recipe) { - this.recipe = recipe; - } - - public Recipe getRecipe() { - return recipe; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - RecipeRow other = (RecipeRow) o; - return Objects.equals(recipe, other.recipe); - } - - @Override - public int hashCode() { - return Objects.hash(recipe); - } - - public static Builder builder(Recipe recipe) { - return new Builder(recipe); - } - - public static Builder builder(RecipeRow existing) { - return new Builder(existing.getRecipe()); - } - - /** - * Creates a RecipeRow storage object - */ - public static class Builder { - private final Recipe recipe; - - Builder(Recipe recipe) { - this.recipe = recipe; - } - - public RecipeRow build() { - return new RecipeRow(recipe); - } - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaDescriptor.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaDescriptor.java deleted file mode 100644 index 743f99b34..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaDescriptor.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.schema; - -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.schema.SchemaDescriptorType; - -/** - * Describes a schema. - */ -public class SchemaDescriptor { - private final NamespacedId id; - private final String name; - private final String description; - private final SchemaDescriptorType type; - - public SchemaDescriptor(NamespacedId id, String name, String description, SchemaDescriptorType type) { - this.id = id; - this.name = name; - this.description = description; - this.type = type; - } - - public NamespacedId getId() { - return id; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public SchemaDescriptorType getType() { - return type; - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaNotFoundException.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaNotFoundException.java deleted file mode 100644 index c76d106d6..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaNotFoundException.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.schema; - -import io.cdap.wrangler.proto.NotFoundException; - -/** - * Thrown when a schema could not be found. - */ -public class SchemaNotFoundException extends NotFoundException { - public SchemaNotFoundException(String message) { - super(message); - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaRegistry.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaRegistry.java deleted file mode 100644 index 62cea644a..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaRegistry.java +++ /dev/null @@ -1,390 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.schema; - -import io.cdap.cdap.api.dataset.lib.CloseableIterator; -import io.cdap.cdap.spi.data.StructuredRow; -import io.cdap.cdap.spi.data.StructuredTable; -import io.cdap.cdap.spi.data.StructuredTableContext; -import io.cdap.cdap.spi.data.TableNotFoundException; -import io.cdap.cdap.spi.data.table.StructuredTableId; -import io.cdap.cdap.spi.data.table.StructuredTableSpecification; -import io.cdap.cdap.spi.data.table.field.Field; -import io.cdap.cdap.spi.data.table.field.FieldType; -import io.cdap.cdap.spi.data.table.field.Fields; -import io.cdap.cdap.spi.data.table.field.Range; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.schema.SchemaDescriptorType; -import io.cdap.wrangler.proto.schema.SchemaEntry; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import javax.annotation.Nullable; - -/** - * This class {@link SchemaRegistry} is responsible for managing the schema registry store. - * - * A schema is uniquely identified by an ID and contains other metadata about the schema, such as a name, description, - * type, etc. By itself, a schema does not contain an actual schema object. It is more like a group of schema entries. - * - * A schema entry contains the actual schema bytes and is uniquely identified by the schema it belongs to and a - * version number. A schema entry is added to a schema and can also be removed. In addition, each schema keeps track - * of the latest schema entry. - * - * Schema information is stored in two tables, one for the schema metadata and one for the schema entries. - * - * The schema metadata table contains nine columns: - * - * namespace, id, name, description, created, updated, type, auto, current - * - * The namespace and id columns form the primary key for the metadata table. The current column points to the latest - * schema entry version, and the auto column is used for generating version numbers for any new schema entries. - * - * The schema entry table contains four columns: - * - * namespace, id, version, schema - * - * The namespace, id, and version columns form the primary key, while the schema column contains the actual schema. - */ -public final class SchemaRegistry { - private static final String NAMESPACE_COL = "namespace"; - private static final String GENERATION_COL = "generation"; - private static final String ID_COL = "id"; - private final StructuredTable metaTable; - private final StructuredTable entryTable; - - /** - * Columns specific to the meta table - */ - private static class MetaColumn { - private static final String NAME = "name"; - private static final String DESC = "description"; - private static final String CREATED = "created"; - private static final String UPDATED = "updated"; - private static final String TYPE = "type"; - private static final String AUTO_VERSION = "auto"; - private static final String CURRENT_VERSION = "current"; - } - - /** - * Columns specific to the entry table - */ - private static class EntryColumn { - private static final String VERSION = "version"; - private static final String SCHEMA = "schema"; - } - - private static final StructuredTableId META_TABLE_ID = new StructuredTableId("schema_registry_meta"); - private static final StructuredTableId ENTRY_TABLE_ID = new StructuredTableId("schema_registry_entries"); - public static final StructuredTableSpecification META_TABLE_SPEC = new StructuredTableSpecification.Builder() - .withId(META_TABLE_ID) - .withFields(new FieldType(NAMESPACE_COL, FieldType.Type.STRING), - new FieldType(GENERATION_COL, FieldType.Type.LONG), - new FieldType(ID_COL, FieldType.Type.STRING), - new FieldType(MetaColumn.NAME, FieldType.Type.STRING), - new FieldType(MetaColumn.DESC, FieldType.Type.STRING), - new FieldType(MetaColumn.CREATED, FieldType.Type.LONG), - new FieldType(MetaColumn.UPDATED, FieldType.Type.LONG), - new FieldType(MetaColumn.TYPE, FieldType.Type.STRING), - new FieldType(MetaColumn.AUTO_VERSION, FieldType.Type.LONG), - new FieldType(MetaColumn.CURRENT_VERSION, FieldType.Type.LONG)) - .withPrimaryKeys(NAMESPACE_COL, GENERATION_COL, ID_COL) - .build(); - public static final StructuredTableSpecification ENTRY_TABLE_SPEC = new StructuredTableSpecification.Builder() - .withId(ENTRY_TABLE_ID) - .withFields(new FieldType(NAMESPACE_COL, FieldType.Type.STRING), - new FieldType(GENERATION_COL, FieldType.Type.LONG), - new FieldType(ID_COL, FieldType.Type.STRING), - new FieldType(EntryColumn.VERSION, FieldType.Type.LONG), - new FieldType(EntryColumn.SCHEMA, FieldType.Type.BYTES)) - .withPrimaryKeys(NAMESPACE_COL, GENERATION_COL, ID_COL, EntryColumn.VERSION) - .build(); - - public SchemaRegistry(StructuredTable metaTable, StructuredTable entryTable) { - this.metaTable = metaTable; - this.entryTable = entryTable; - } - - public static SchemaRegistry get(StructuredTableContext context) { - try { - StructuredTable metaTable = context.getTable(META_TABLE_ID); - StructuredTable entryTable = context.getTable(ENTRY_TABLE_ID); - return new SchemaRegistry(metaTable, entryTable); - } catch (TableNotFoundException e) { - throw new IllegalStateException(String.format( - "System table '%s' does not exist. Please check your system environment.", e.getId().getName()), e); - } - } - - - /** - * Writes an entry in the schema registry. If the schema already exists, it is overwritten. - * - * @param schemaDescriptor information about the schema to write - * @throws IOException if there was an error reading from or writing to the storage system - */ - public void write(SchemaDescriptor schemaDescriptor) throws IOException { - SchemaRow.Builder builder = SchemaRow.builder(schemaDescriptor); - - long now = System.currentTimeMillis() / 1000; - SchemaRow existing = getSchemaRow(schemaDescriptor.getId()); - if (existing == null) { - builder.setCreated(now) - .setUpdated(now) - .setAutoVersion(0L); - } else { - builder.setCreated(existing.getCreated()) - .setUpdated(now) - .setAutoVersion(existing.getAutoVersion()) - .setCurrentVersion(existing.getCurrentVersion()); - } - - metaTable.upsert(toFields(builder.build())); - } - - /** - * Deletes the schema and all associated entries. - * - * @param id of the schema to delete - * @throws IOException if there was an error reading from or writing to the storage system - */ - public void delete(NamespacedId id) throws IOException { - metaTable.delete(getMetaKey(id)); - Range range = Range.singleton(getMetaKey(id)); - try (CloseableIterator rowIter = entryTable.scan(range, Integer.MAX_VALUE)) { - while (rowIter.hasNext()) { - StructuredRow row = rowIter.next(); - Namespace namespace = new Namespace(row.getString(NAMESPACE_COL), row.getLong(GENERATION_COL)); - NamespacedId entryId = new NamespacedId(namespace, row.getString(ID_COL)); - long entryVersion = row.getLong(EntryColumn.VERSION); - entryTable.delete(getEntryKey(entryId, entryVersion)); - } - } - } - - /** - * Adds a new entry to the schema. - * - * @param id the id of the schema to add - * @param specification the schema to be added - * @throws SchemaNotFoundException if the schema does not exist - * @throws IOException if there was an error reading from or writing to the storage system - */ - public long add(NamespacedId id, byte[] specification) throws IOException { - SchemaRow existing = getSchemaRow(id); - if (existing == null) { - throw new SchemaNotFoundException(String.format("Schema '%s' does not exist.", id.getId())); - } - - long version = existing.getAutoVersion() + 1; - SchemaRow updated = SchemaRow.builder(existing) - .setUpdated(System.currentTimeMillis() / 1000) - .setAutoVersion(version) - .setCurrentVersion(version) - .build(); - - // update schema information - metaTable.upsert(toFields(updated)); - List> fields = getEntryKey(id, version); - fields.add(Fields.bytesField(EntryColumn.SCHEMA, specification)); - entryTable.upsert(fields); - return version; - } - - /** - * Deletes a specified version of the schema. - * - * TODO: (CDAP-14661) update latest version pointer if the latest version was removed - * - * @param id of the schema to be deleted. - * @param version of the schema to be deleted. - * @throws SchemaNotFoundException if the schema does not exist - * @throws IOException if there was an error reading from or writing to the storage system - */ - public void remove(NamespacedId id, long version) throws IOException { - SchemaRow row = getSchemaRow(id); - if (row == null) { - throw new SchemaNotFoundException(String.format("Schema '%s' does not exist.", id.getId())); - } - entryTable.delete(getEntryKey(id, version)); - } - - /** - * Checks if schema id and version combination exists in the registry. - * - * @param id of the schema to be checked - * @param version version of the schema to be checked. - * @return true if id and version matches, else false. - * @throws SchemaNotFoundException if the schema does not exist - * @throws IOException if there was an error reading from or writing to the storage system - */ - public boolean hasSchema(NamespacedId id, long version) throws IOException { - SchemaRow schemaRow = getSchemaRow(id); - if (schemaRow == null) { - throw new SchemaNotFoundException(String.format("Schema '%s' does not exist", id.getId())); - } - Optional row = entryTable.read(getEntryKey(id, version)); - return row.isPresent(); - } - - /** - * Checks if there is a schema entry, its not necessary that there are any version of schema registered. - * - * @param id the id of the schema to check - * @return true if it exists, false otherwise - * @throws IOException if there was an error reading from or writing to the storage system - */ - public boolean hasSchema(NamespacedId id) throws IOException { - Optional row = metaTable.read(getMetaKey(id)); - return row.isPresent(); - } - - /** - * Return all versions of the specified schema. - * - * @param id the schema id - * @return list of schema versions - * @throws SchemaNotFoundException if the schema does not exist - * @throws IOException if there was an error reading from or writing to the storage system - */ - public Set getVersions(NamespacedId id) throws IOException { - if (getSchemaRow(id) == null) { - throw new SchemaNotFoundException(String.format("Schema '%s' does not exist.", id.getId())); - } - Range range = Range.singleton(getMetaKey(id)); - try (CloseableIterator rowIter = entryTable.scan(range, Integer.MAX_VALUE)) { - Set versionSet = new LinkedHashSet<>(); - while (rowIter.hasNext()) { - StructuredRow row = rowIter.next(); - versionSet.add(row.getLong(EntryColumn.VERSION)); - } - return versionSet; - } - } - - /** - * Get a specific version of the specified schema. - * - * @param id the schema id - * @param version the entry version to get - * @return the schema entry - * @throws SchemaNotFoundException if the schema does not exist - * @throws IOException if there was an error reading from or writing to the storage system - */ - public SchemaEntry getEntry(NamespacedId id, long version) throws IOException { - SchemaRow schemaRow = getSchemaRow(id); - if (schemaRow == null) { - throw new SchemaNotFoundException(String.format("Schema '%s' does not exist.", id.getId())); - } - return getEntry(schemaRow, version); - } - - /** - * Get the latest entry of the specified schema if it exists - * - * @param id the schema id - * @return the latest entry of the specified schema - * @throws SchemaNotFoundException if the schema or its latest entry could not be found - * @throws IOException if there was an error reading from or writing to the storage system - */ - public SchemaEntry getEntry(NamespacedId id) throws IOException { - SchemaRow schemaRow = getSchemaRow(id); - if (schemaRow == null) { - throw new SchemaNotFoundException(String.format("Schema '%s' does not exist.", id.getId())); - } - Long version = schemaRow.getCurrentVersion(); - if (version == null) { - return new SchemaEntry(id, schemaRow.getDescriptor().getName(), schemaRow.getDescriptor().getDescription(), - schemaRow.getDescriptor().getType(), Collections.emptySet(), null, null); - } - return getEntry(schemaRow, version); - } - - private SchemaEntry getEntry(SchemaRow schemaRow, long version) throws IOException { - NamespacedId id = schemaRow.getDescriptor().getId(); - Optional row = entryTable.read(getEntryKey(id, version)); - if (!row.isPresent()) { - throw new SchemaNotFoundException(String.format("Schema '%s' version '%d' does not exist.", id.getId(), version)); - } - byte[] specification = row.get().getBytes(EntryColumn.SCHEMA); - Set versions = getVersions(id); - return new SchemaEntry(id, schemaRow.getDescriptor().getName(), schemaRow.getDescriptor().getDescription(), - schemaRow.getDescriptor().getType(), versions, specification, - schemaRow.getCurrentVersion()); - } - - @Nullable - private SchemaRow getSchemaRow(NamespacedId id) throws IOException { - Optional row = metaTable.read(getMetaKey(id)); - return row.map(this::fromRow).orElse(null); - } - - private List> getMetaKey(NamespacedId id) { - List> fields = new ArrayList<>(2); - fields.add(Fields.stringField(NAMESPACE_COL, id.getNamespace().getName())); - fields.add(Fields.longField(GENERATION_COL, id.getNamespace().getGeneration())); - fields.add(Fields.stringField(ID_COL, id.getId())); - return fields; - } - - private List> getEntryKey(NamespacedId schemaId, long version) { - List> fields = new ArrayList<>(3); - fields.add(Fields.stringField(NAMESPACE_COL, schemaId.getNamespace().getName())); - fields.add(Fields.longField(GENERATION_COL, schemaId.getNamespace().getGeneration())); - fields.add(Fields.stringField(ID_COL, schemaId.getId())); - fields.add(Fields.longField(EntryColumn.VERSION, version)); - return fields; - } - - private List> toFields(SchemaRow schemaRow) { - List> fields = new ArrayList<>(9); - fields.add(Fields.stringField(NAMESPACE_COL, schemaRow.getDescriptor().getId().getNamespace().getName())); - fields.add(Fields.longField(GENERATION_COL, schemaRow.getDescriptor().getId().getNamespace().getGeneration())); - fields.add(Fields.stringField(ID_COL, schemaRow.getDescriptor().getId().getId())); - fields.add(Fields.stringField(MetaColumn.NAME, schemaRow.getDescriptor().getName())); - fields.add(Fields.stringField(MetaColumn.DESC, schemaRow.getDescriptor().getDescription())); - fields.add(Fields.stringField(MetaColumn.TYPE, schemaRow.getDescriptor().getType().name())); - fields.add(Fields.longField(MetaColumn.CREATED, schemaRow.getCreated())); - fields.add(Fields.longField(MetaColumn.UPDATED, schemaRow.getUpdated())); - fields.add(Fields.longField(MetaColumn.AUTO_VERSION, schemaRow.getAutoVersion())); - if (schemaRow.getCurrentVersion() != null) { - fields.add(Fields.longField(MetaColumn.CURRENT_VERSION, schemaRow.getCurrentVersion())); - } - return fields; - } - - private SchemaRow fromRow(StructuredRow row) { - Namespace namespace = new Namespace(row.getString(NAMESPACE_COL), row.getLong(GENERATION_COL)); - NamespacedId id = new NamespacedId(namespace, row.getString(ID_COL)); - SchemaDescriptor descriptor = new SchemaDescriptor(id, row.getString(MetaColumn.NAME), - row.getString(MetaColumn.DESC), - SchemaDescriptorType.valueOf(row.getString(MetaColumn.TYPE))); - return SchemaRow.builder(descriptor) - .setCreated(row.getLong(MetaColumn.CREATED)) - .setUpdated(row.getLong(MetaColumn.UPDATED)) - .setAutoVersion(row.getLong(MetaColumn.AUTO_VERSION)) - .setCurrentVersion(row.getLong(MetaColumn.CURRENT_VERSION)) - .build(); - } - -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaRow.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaRow.java deleted file mode 100644 index 906ef688f..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/schema/SchemaRow.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.schema; - -import javax.annotation.Nullable; - -/** - * Contains all the information about a schema that is stored in the same row. - */ -public class SchemaRow { - - private final SchemaDescriptor descriptor; - private final long created; - private final long updated; - private final long autoVersion; - private final Long currentVersion; - - private SchemaRow(SchemaDescriptor descriptor, long created, long updated, long autoVersion, - @Nullable Long currentVersion) { - this.descriptor = descriptor; - this.created = created; - this.updated = updated; - this.autoVersion = autoVersion; - this.currentVersion = currentVersion; - } - - public SchemaDescriptor getDescriptor() { - return descriptor; - } - - public long getCreated() { - return created; - } - - public long getUpdated() { - return updated; - } - - public long getAutoVersion() { - return autoVersion; - } - - @Nullable - public Long getCurrentVersion() { - return currentVersion; - } - - static Builder builder(SchemaRow existing) { - return new Builder(existing.getDescriptor()) - .setUpdated(existing.getUpdated()) - .setAutoVersion(existing.getAutoVersion()) - .setCurrentVersion(existing.getCurrentVersion()); - } - - static Builder builder(SchemaDescriptor descriptor) { - return new Builder(descriptor); - } - - /** - * Builds a SchemaRow. - */ - public static class Builder { - private final SchemaDescriptor descriptor; - private long created; - private long updated; - private long autoVersion; - private Long currentVersion; - - public Builder(SchemaDescriptor descriptor) { - this.descriptor = descriptor; - } - - public Builder setCreated(long created) { - this.created = created; - return this; - } - - public Builder setUpdated(long updated) { - this.updated = updated; - return this; - } - - public Builder setAutoVersion(long autoVersion) { - this.autoVersion = autoVersion; - return this; - } - - public Builder setCurrentVersion(Long currentVersion) { - this.currentVersion = currentVersion; - return this; - } - - public SchemaRow build() { - return new SchemaRow(descriptor, created, updated, autoVersion, currentVersion); - } - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/utils/PageRequest.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/utils/PageRequest.java deleted file mode 100644 index b8b8dfc04..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/utils/PageRequest.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.utils; - -import io.cdap.cdap.spi.data.SortOrder; -import io.cdap.cdap.spi.data.table.field.Range; - -import javax.annotation.Nullable; - -/** - * An interface to implement a page request. Pagination utility class that contains relevant fields and methods - * that describe a page. - * @param Type of resource that the page request is for. - */ -public abstract class PageRequest { - /** - * Maximum number of results to return in a page. - */ - protected final int pageSize; - - /** - * Token to identify the page to retrieve. Either received from a previous page or left empty to fetch the first page. - */ - @Nullable - protected final String pageToken; - - /** - * Indicates the table column name based on which results should be sorted. - */ - protected final String sortBy; - - /** - * Indicates the sorting order (ascending or descending). - */ - protected final SortOrder sortOrder; - - public static final String SORT_ORDER_ASC = "asc"; - public static final String SORT_ORDER_DESC = "desc"; - public static final int PAGE_SIZE_DEFAULT = 10; - - protected PageRequest(Integer pageSize, @Nullable String pageToken, String sortBy, String sortOrder) { - this.pageToken = pageToken; - - validateSortBy(sortBy); - this.sortBy = sortBy == null ? getDefaultSortBy() : getSortByColumnName(sortBy); - - validatePageSize(pageSize); - this.pageSize = pageSize == null ? PAGE_SIZE_DEFAULT : pageSize; - - validateSortOrder(sortOrder); - this.sortOrder = (sortOrder == null || sortOrder.equals(SORT_ORDER_ASC)) ? SortOrder.ASC : SortOrder.DESC; - } - - public int getPageSize() { - return pageSize; - } - - @Nullable - public String getPageToken() { - return pageToken; - } - - public String getSortBy() { - return sortBy; - } - - public SortOrder getSortOrder() { - return sortOrder; - } - - /** - * Checks whether given sortBy value has a respective table column mapping. - * @param sortBy field based on which results should be sorted - * @throws IllegalArgumentException if the value does not have a mapping - */ - protected abstract void validateSortBy(String sortBy) throws IllegalArgumentException; - - /** - * Get the default table column name using which results will be sorted. - */ - protected abstract String getDefaultSortBy(); - - /** - * Get the table column name mapped to given sortBy value. - */ - protected abstract String getSortByColumnName(String sortBy); - - /** - * Constructs the range used to query the storage table. - * @return {@link Range} corresponding to page query parameters. - */ - public abstract Range getScanRange(); - - /** - * Get the nextPageToken returned as part of response to request. - * @param object resource returned by the request - */ - public abstract String getNextPageToken(T object); - - protected void validatePageSize(Integer pageSize) { - if (pageSize != null && pageSize <= 0) { - throw new IllegalArgumentException("pageSize cannot be negative or zero."); - } - } - - protected void validateSortOrder(String sortOrder) { - if (sortOrder != null && !(sortOrder.equals(SORT_ORDER_ASC) || sortOrder.equals(SORT_ORDER_DESC))) { - throw new IllegalArgumentException( - String.format("Invalid sortOrder '%s' specified. sortOrder must be one of: '%s' or '%s'", - sortOrder, SORT_ORDER_ASC, SORT_ORDER_DESC)); - } - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/ConfigStore.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/ConfigStore.java deleted file mode 100644 index e2422032e..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/ConfigStore.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.workspace; - -import com.google.gson.Gson; -import io.cdap.cdap.spi.data.StructuredRow; -import io.cdap.cdap.spi.data.StructuredTable; -import io.cdap.cdap.spi.data.StructuredTableContext; -import io.cdap.cdap.spi.data.TableNotFoundException; -import io.cdap.cdap.spi.data.table.StructuredTableId; -import io.cdap.cdap.spi.data.table.StructuredTableSpecification; -import io.cdap.cdap.spi.data.table.field.Field; -import io.cdap.cdap.spi.data.table.field.FieldType; -import io.cdap.cdap.spi.data.table.field.Fields; -import io.cdap.wrangler.api.DirectiveConfig; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -/** - * Stores the DirectiveConfig and other config settings. - * - * The actual store just has two columns -- key and value. - * Currently the only thing it stores is the serialized DirectiveConfig in the row where key == 'directives'. - * TODO: (CDAP-14619) check if the DirectiveConfig is used by anything/anyone. If so, see if it can be moved to app - * configuration instead of stored in a one row table. - */ -@Deprecated -public class ConfigStore { - private static final Gson GSON = new Gson(); - private static final String KEY_COL = "key"; - private static final String VAL_COL = "value"; - private static final Field keyField = Fields.stringField(KEY_COL, "directives"); - public static final StructuredTableId TABLE_ID = new StructuredTableId("dataprep_config"); - public static final StructuredTableSpecification TABLE_SPEC = new StructuredTableSpecification.Builder() - .withId(TABLE_ID) - .withFields(new FieldType(KEY_COL, FieldType.Type.STRING), new FieldType(VAL_COL, FieldType.Type.STRING)) - .withPrimaryKeys(KEY_COL) - .build(); - private final StructuredTable table; - - public ConfigStore(StructuredTable table) { - this.table = table; - } - - public static ConfigStore get(StructuredTableContext context) { - try { - StructuredTable table = context.getTable(TABLE_ID); - return new ConfigStore(table); - } catch (TableNotFoundException e) { - throw new IllegalStateException(String.format( - "System table '%s' does not exist. Please check your system environment.", TABLE_ID.getName()), e); - } - } - - public void updateConfig(DirectiveConfig config) throws IOException { - List> fields = new ArrayList<>(2); - fields.add(keyField); - fields.add(Fields.stringField(VAL_COL, GSON.toJson(config))); - table.upsert(fields); - } - - public DirectiveConfig getConfig() throws IOException { - Optional row = table.read(Collections.singletonList(keyField)); - String configStr = row.map(r -> r.getString(VAL_COL)).orElse("{}"); - return GSON.fromJson(configStr, DirectiveConfig.class); - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/DataType.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/DataType.java deleted file mode 100644 index 3cc6ab475..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/DataType.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.workspace; - -import javax.annotation.Nullable; - -/** - * This class {@link DataType} defines types of data that can be stored in a workspace. - */ -public enum DataType { - // This type represents any binary data - avro, protobuf or even other charset. - BINARY("application/octet-stream"), - - // This defines the text files. - TEXT("text/plain"), - - // Special format native to Dataprep, this converts the data into records using the delimiter. - RECORDS("application/data-prep"); - - - // Defines the type of data. - String type; - - DataType(String type) { - this.type = type; - } - - /** - * @return Type of content within workspace. - */ - public String getType() { - return type; - } - - /** - * Converts the string representation of type into a {@link DataType}. - * - * @param text representation of the type. - * @return an instance of {@link DataType} based on it's string representation, null if not found. - */ - @Nullable - public static DataType fromString(String text) { - for (DataType b : DataType.values()) { - if (b.type.equalsIgnoreCase(text)) { - return b; - } - } - return null; - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/RequestDeserializer.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/RequestDeserializer.java deleted file mode 100644 index 685fe7253..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/RequestDeserializer.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.workspace; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import io.cdap.wrangler.proto.Recipe; -import io.cdap.wrangler.proto.Request; -import io.cdap.wrangler.proto.RequestV1; -import io.cdap.wrangler.proto.Sampling; -import io.cdap.wrangler.proto.Workspace; - -import java.lang.reflect.Type; - -/** - * Serializes the HTTP Request received by the service. - */ -public class RequestDeserializer implements JsonDeserializer { - @Override - public Request deserialize(JsonElement json, Type type, JsonDeserializationContext context) - throws JsonParseException { - - final JsonObject object = json.getAsJsonObject(); - - // If the version is not specified - if (!object.has("version")) { - throw new JsonParseException( - String.format("Version field is not specified in the request.") - ); - } - - int version = object.get("version").getAsInt(); - - if (version == 1) { - Workspace workspace = context.deserialize(object.get("workspace"), Workspace.class); - Recipe recipe = context.deserialize(object.get("recipe"), Recipe.class); - Sampling sampling = context.deserialize(object.get("sampling"), Sampling.class); - JsonObject properties = context.deserialize(object.get("properties"), JsonObject.class); - return new RequestV1(workspace, recipe, sampling, properties); - } else { - throw new JsonParseException ( - String.format("Unsupported request version %d.", version) - ); - } - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/Workspace.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/Workspace.java deleted file mode 100644 index 8f3846e7f..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/Workspace.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.workspace; - -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.Request; - -import java.util.Arrays; -import java.util.Map; -import java.util.Objects; -import javax.annotation.Nullable; - -/** - * Contains all information about a workspace. - */ -public class Workspace extends WorkspaceMeta { - private final NamespacedId id; - private final long created; - private final long updated; - private final byte[] data; - private final Request request; - - private Workspace(NamespacedId id, String name, String scope, DataType type, Map properties, - long created, long updated, @Nullable byte[] data, @Nullable Request request) { - super(name, scope, type, properties); - this.id = id; - this.created = created; - this.updated = updated; - this.data = data == null ? null : Arrays.copyOf(data, data.length); - this.request = request; - } - - public NamespacedId getNamespacedId() { - return id; - } - - public long getCreated() { - return created; - } - - public long getUpdated() { - return updated; - } - - @Nullable - public byte[] getData() { - return data; - } - - @Nullable - public Request getRequest() { - return request; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - if (!super.equals(o)) { - return false; - } - Workspace workspace = (Workspace) o; - return created == workspace.created && - updated == workspace.updated && - Objects.equals(id, workspace.id) && - Arrays.equals(data, workspace.data) && - Objects.equals(request, workspace.request); - } - - @Override - public int hashCode() { - int result = Objects.hash(super.hashCode(), id, created, updated, request); - result = 31 * result + Arrays.hashCode(data); - return result; - } - - public static Builder builder(NamespacedId id, String name) { - return new Builder(id, name); - } - - public static Builder builder(Workspace existing) { - return new Builder(existing.getNamespacedId(), existing.getName()) - .setType(existing.getType()) - .setScope(existing.getScope()) - .setCreated(existing.getCreated()) - .setUpdated(existing.getUpdated()) - .setProperties(existing.getProperties()) - .setData(existing.getData()) - .setRequest(existing.getRequest()); - } - - /** - * Creates Workspace objects. - */ - public static class Builder extends WorkspaceMeta.Builder { - private final NamespacedId id; - private long created; - private long updated; - private byte[] data; - private Request request; - - Builder(NamespacedId id, String name) { - super(name); - this.id = id; - } - - public Builder setCreated(long created) { - this.created = created; - return this; - } - - public Builder setUpdated(long updated) { - this.updated = updated; - return this; - } - - public Builder setData(byte[] data) { - this.data = data; - return this; - } - - public Builder setRequest(Request request) { - this.request = request; - return this; - } - - public Workspace build() { - return new Workspace(id, name, scope, type, properties, created, updated, data, request); - } - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/WorkspaceDataset.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/WorkspaceDataset.java deleted file mode 100644 index 76d6d0749..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/WorkspaceDataset.java +++ /dev/null @@ -1,379 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.workspace; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.dataset.lib.CloseableIterator; -import io.cdap.cdap.internal.io.SchemaTypeAdapter; -import io.cdap.cdap.spi.data.StructuredRow; -import io.cdap.cdap.spi.data.StructuredTable; -import io.cdap.cdap.spi.data.StructuredTableContext; -import io.cdap.cdap.spi.data.TableNotFoundException; -import io.cdap.cdap.spi.data.table.StructuredTableId; -import io.cdap.cdap.spi.data.table.StructuredTableSpecification; -import io.cdap.cdap.spi.data.table.field.Field; -import io.cdap.cdap.spi.data.table.field.FieldType; -import io.cdap.cdap.spi.data.table.field.Fields; -import io.cdap.cdap.spi.data.table.field.Range; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.Request; -import io.cdap.wrangler.proto.WorkspaceIdentifier; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; -import java.util.concurrent.TimeUnit; -import javax.annotation.Nullable; - -/** - * Workspace store for workspaces and a special row for the DirectiveConfig, which allows admins to configure a - * directive blacklist and to alias directives to other names. - * - * A workspace contains a data sample, metadata about the workspace, and a set of directives that can be used to - * process the data sample. A workspace is tagged with a scope, which can be used to group workspaces together. - * It also stores a map of properties, which are connection specific properties that are used to generate the - * pipeline source configuration when a pipeline is created from a workspace. - * - * The dataset is stored in a single table with columns: - * - * namespace, id, name, type, scope, created, updated, properties, data, and request - */ -@Deprecated -public class WorkspaceDataset { - private static final Type MAP_TYPE = new TypeToken>() { }.getType(); - private static final Gson GSON = new GsonBuilder() - .registerTypeAdapter(Schema.class, new SchemaTypeAdapter()) - .registerTypeAdapter(Request.class, new RequestDeserializer()) - .create(); - private static final String NAMESPACE_COL = "namespace"; - private static final String GENERATION_COL = "generation"; - private static final String ID_COL = "id"; - private static final String NAME_COL = "name"; - private static final String TYPE_COL = "type"; - private static final String SCOPE_COL = "scope"; - private static final String CREATED_COL = "created"; - private static final String UPDATED_COL = "updated"; - private static final String PROPERTIES_COL = "properties"; - private static final String DATA_COL = "data"; - private static final String REQUEST_COL = "request"; - private static final StructuredTableId TABLE_ID = new StructuredTableId("workspaces"); - public static final StructuredTableSpecification TABLE_SPEC = new StructuredTableSpecification.Builder() - .withId(TABLE_ID) - .withFields(new FieldType(NAMESPACE_COL, FieldType.Type.STRING), - new FieldType(GENERATION_COL, FieldType.Type.LONG), - new FieldType(ID_COL, FieldType.Type.STRING), - new FieldType(NAME_COL, FieldType.Type.STRING), - new FieldType(TYPE_COL, FieldType.Type.STRING), - new FieldType(SCOPE_COL, FieldType.Type.STRING), - new FieldType(CREATED_COL, FieldType.Type.LONG), - new FieldType(UPDATED_COL, FieldType.Type.LONG), - new FieldType(PROPERTIES_COL, FieldType.Type.STRING), - new FieldType(DATA_COL, FieldType.Type.BYTES), - new FieldType(REQUEST_COL, FieldType.Type.STRING)) - .withPrimaryKeys(NAMESPACE_COL, GENERATION_COL, ID_COL) - .build(); - public static final String DEFAULT_SCOPE = "default"; - private final StructuredTable table; - - public WorkspaceDataset(StructuredTable table) { - this.table = table; - } - - public static WorkspaceDataset get(StructuredTableContext context) { - try { - StructuredTable table = context.getTable(TABLE_ID); - return new WorkspaceDataset(table); - } catch (TableNotFoundException e) { - throw new IllegalStateException(String.format( - "System table '%s' does not exist. Please check your system environment.", TABLE_ID.getName()), e); - } - } - - /** - * Creates a new workspace - * - * @param namespace the namespace to create the workspace in - * @param meta the workspace metadata - * @return the id of the newly created workspace - */ - public NamespacedId createWorkspace(Namespace namespace, WorkspaceMeta meta) throws IOException { - NamespacedId id = new NamespacedId(namespace, UUID.randomUUID().toString()); - - long now = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()); - Workspace workspace = Workspace.builder(id, meta.getName()) - .setCreated(now) - .setUpdated(now) - .setScope(meta.getScope()) - .setProperties(meta.getProperties()) - .setType(meta.getType()) - .build(); - table.upsert(toFields(workspace)); - return id; - } - - /** - * Creates a workspace if it does not already exist, or update an existing workspace if it does. - * - * @param id the id of the workspace to write - * @param meta the workspace metadata - */ - public void writeWorkspaceMeta(NamespacedId id, WorkspaceMeta meta) throws IOException { - Workspace existing = readWorkspace(id); - long now = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()); - Workspace.Builder updated = Workspace.builder(id, meta.getName()); - if (existing != null) { - updated.setCreated(existing.getCreated()) - .setData(existing.getData()) - .setRequest(existing.getRequest()); - } else { - updated.setCreated(now); - } - updated.setUpdated(now) - .setScope(meta.getScope()) - .setProperties(meta.getProperties()) - .setType(meta.getType()); - table.upsert(toFields(updated.build())); - } - - /** - * Get information about the workspace. - * - * @param id the workspace id - * @return information about the workspace - * @throws WorkspaceNotFoundException if the workspace does not exist - */ - public Workspace getWorkspace(NamespacedId id) throws WorkspaceNotFoundException, IOException { - Workspace workspace = readWorkspace(id); - if (workspace == null) { - throw new WorkspaceNotFoundException(String.format("Workspace '%s' does not exist.", id.getId())); - } - return workspace; - } - - /** - * Checks if a workspace exists. - * - * @param id of the workspace to be checked for. - * @return true if workspace exists, false otherwise. - */ - public boolean hasWorkspace(NamespacedId id) throws IOException { - Optional row = table.read(getKey(id)); - return row.isPresent(); - } - - /** - * Lists all the workspaces registered for a scope. - * - * @return List of workspaces. - */ - public List listWorkspaces(Namespace namespace, String scope) throws IOException { - List values = new ArrayList<>(); - List> namespaceKey = new ArrayList<>(2); - namespaceKey.add(Fields.stringField(NAMESPACE_COL, namespace.getName())); - namespaceKey.add(Fields.longField(GENERATION_COL, namespace.getGeneration())); - Range range = Range.singleton(namespaceKey); - try (CloseableIterator rowIter = table.scan(range, Integer.MAX_VALUE)) { - while (rowIter.hasNext()) { - StructuredRow row = rowIter.next(); - Workspace workspace = readWorkspace(row); - if (scope.equals(workspace.getScope())) { - values.add(new WorkspaceIdentifier(workspace.getNamespacedId().getId(), workspace.getName())); - } - } - } - return values; - } - - /** - * LLists all the workspaces before timestamp. - * - * @return List of workspaces. - */ - public List listWorkspaces(NamespaceSummary namespace, long timestampSeconds) throws IOException { - List values = new ArrayList<>(); - List> namespaceKey = new ArrayList<>(2); - namespaceKey.add(Fields.stringField(NAMESPACE_COL, namespace.getName())); - namespaceKey.add(Fields.longField(GENERATION_COL, namespace.getGeneration())); - Range range = Range.singleton(namespaceKey); - try (CloseableIterator rowIter = table.scan(range, Integer.MAX_VALUE)) { - while (rowIter.hasNext()) { - StructuredRow row = rowIter.next(); - Workspace workspace = readWorkspace(row); - if (workspace.getCreated() < timestampSeconds) { - values.add(workspace); - } - } - } - return values; - } - - /** - * Update the properties of the specified workspace. - * - * @param id the workspace id - * @param properties the properties to update - * @throws WorkspaceNotFoundException if the workspace does not exist - */ - public void updateWorkspaceProperties(NamespacedId id, - Map properties) throws WorkspaceNotFoundException, IOException { - Workspace existing = getWorkspace(id); - Workspace updated = Workspace.builder(existing) - .setProperties(properties) - .setUpdated(TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())) - .build(); - table.upsert(toFields(updated)); - } - - /** - * Update the directive execution request for the specified workspace. - * - * @param id the workspace id - * @param request the directive execution request - * @throws WorkspaceNotFoundException if the workspace does not exist - */ - public void updateWorkspaceRequest(NamespacedId id, Request request) throws WorkspaceNotFoundException, IOException { - Workspace existing = getWorkspace(id); - Workspace updated = Workspace.builder(existing) - .setRequest(request) - .setUpdated(System.currentTimeMillis() / 1000) - .build(); - table.upsert(toFields(updated)); - } - - /** - * Update the sample data for the specified workspace. - * - * @param id the workspace id - * @param data the sample data - * @throws WorkspaceNotFoundException if the workspace does not exist - */ - public void updateWorkspaceData(NamespacedId id, DataType dataType, - byte[] data) throws WorkspaceNotFoundException, IOException { - Workspace existing = getWorkspace(id); - Workspace updated = Workspace.builder(existing) - .setType(dataType) - .setData(data) - .setUpdated(System.currentTimeMillis() / 1000) - .build(); - table.upsert(toFields(updated)); - } - - /** - * Deletes the workspace. - * - * @param id to be deleted. - */ - public void deleteWorkspace(NamespacedId id) throws IOException { - table.delete(getKey(id)); - } - - /** - * Deletes a workspaces that have the specified scope. - * - * TODO: (CDAP-14692) make sure scope is indexed so this doesn't require a full table scan - * - * @param scope to be deleted - * @return number of workspaces deleted - */ - public int deleteScope(Namespace namespace, String scope) throws IOException { - List> key = new ArrayList<>(2); - key.add(Fields.stringField(NAMESPACE_COL, namespace.getName())); - key.add(Fields.longField(GENERATION_COL, namespace.getGeneration())); - Range range = Range.singleton(key); - try (CloseableIterator rowIter = table.scan(range, Integer.MAX_VALUE)) { - int count = 0; - while (rowIter.hasNext()) { - StructuredRow row = rowIter.next(); - Workspace workspace = readWorkspace(row); - if (scope.equals(workspace.getScope())) { - deleteWorkspace(workspace.getNamespacedId()); - count++; - } - } - return count; - } - } - - private List> toFields(Workspace workspace) { - List> fields = new ArrayList<>(11); - fields.add(Fields.stringField(NAMESPACE_COL, workspace.getNamespacedId().getNamespace().getName())); - fields.add(Fields.longField(GENERATION_COL, workspace.getNamespacedId().getNamespace().getGeneration())); - fields.add(Fields.stringField(ID_COL, workspace.getNamespacedId().getId())); - fields.add(Fields.stringField(NAME_COL, workspace.getName())); - fields.add(Fields.stringField(SCOPE_COL, workspace.getScope())); - fields.add(Fields.stringField(TYPE_COL, workspace.getType().name())); - fields.add(Fields.stringField(PROPERTIES_COL, GSON.toJson(workspace.getProperties()))); - fields.add(Fields.longField(CREATED_COL, workspace.getCreated())); - fields.add(Fields.longField(UPDATED_COL, workspace.getUpdated())); - Request request = workspace.getRequest(); - if (request != null) { - fields.add(Fields.stringField(REQUEST_COL, GSON.toJson(request))); - } - byte[] data = workspace.getData(); - if (data != null) { - fields.add(Fields.bytesField(DATA_COL, data)); - } - return fields; - } - - @Nullable - private Workspace readWorkspace(NamespacedId id) throws IOException { - Optional row = table.read(getKey(id)); - return row.map(this::readWorkspace).orElse(null); - } - - private Workspace readWorkspace(StructuredRow row) { - Namespace namespace = new Namespace(row.getString(NAMESPACE_COL), row.getLong(GENERATION_COL)); - NamespacedId id = new NamespacedId(namespace, row.getString(ID_COL)); - - String propertiesStr = row.getString(PROPERTIES_COL); - Map properties = propertiesStr == null || propertiesStr.isEmpty() ? - Collections.emptyMap() : GSON.fromJson(propertiesStr, MAP_TYPE); - String requestStr = row.getString(REQUEST_COL); - Request request = requestStr == null || requestStr.isEmpty() ? - null : GSON.fromJson(requestStr, Request.class); - - return Workspace.builder(id, row.getString(NAME_COL)) - .setCreated(row.getLong(CREATED_COL)) - .setUpdated(row.getLong(UPDATED_COL)) - .setData(row.getBytes(DATA_COL)) - .setRequest(request) - .setScope(row.getString(SCOPE_COL)) - .setType(DataType.valueOf(row.getString(TYPE_COL))) - .setProperties(properties) - .build(); - } - - private List> getKey(NamespacedId id) { - List> keyFields = new ArrayList<>(); - keyFields.add(Fields.stringField(NAMESPACE_COL, id.getNamespace().getName())); - keyFields.add(Fields.longField(GENERATION_COL, id.getNamespace().getGeneration())); - keyFields.add(Fields.stringField(ID_COL, id.getId())); - return keyFields; - } - -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/WorkspaceMeta.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/WorkspaceMeta.java deleted file mode 100644 index 0be5a4a69..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/WorkspaceMeta.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.workspace; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -/** - * Metadata about a workspace. - */ -public class WorkspaceMeta { - private final String name; - private final String scope; - private final DataType type; - private final Map properties; - - protected WorkspaceMeta(String name, String scope, DataType type, Map properties) { - this.name = name; - this.scope = scope; - this.type = type; - this.properties = Collections.unmodifiableMap(new HashMap<>(properties)); - } - - public String getName() { - return name; - } - - public String getScope() { - return scope; - } - - public DataType getType() { - return type; - } - - public Map getProperties() { - return properties; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - WorkspaceMeta that = (WorkspaceMeta) o; - return Objects.equals(name, that.name) && - Objects.equals(scope, that.scope) && - type == that.type && - Objects.equals(properties, that.properties); - } - - @Override - public int hashCode() { - return Objects.hash(name, scope, type, properties); - } - - public static Builder builder(String name) { - return new Builder(name); - } - - /** - * Creates a WorkspaceMeta instance. - * - * @param type of builder - */ - @SuppressWarnings("unchecked") - public static class Builder { - protected final String name; - protected String scope; - protected DataType type; - protected Map properties; - - Builder(String name) { - this.name = name; - this.properties = new HashMap<>(); - this.scope = WorkspaceDataset.DEFAULT_SCOPE; - this.type = DataType.BINARY; - } - - public T setScope(String scope) { - this.scope = scope; - return (T) this; - } - - public T setType(DataType type) { - this.type = type; - return (T) this; - } - - public T setProperties(Map properties) { - this.properties.clear(); - this.properties.putAll(properties); - return (T) this; - } - - public WorkspaceMeta build() { - return new WorkspaceMeta(name, scope, type, properties); - } - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/WorkspaceNotFoundException.java b/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/WorkspaceNotFoundException.java deleted file mode 100644 index 50dd3625c..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/dataset/workspace/WorkspaceNotFoundException.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset.workspace; - - -import io.cdap.wrangler.proto.NotFoundException; - -/** - * Thrown when a workspace is not found when it is expected to exist. - */ -public class WorkspaceNotFoundException extends NotFoundException { - - public WorkspaceNotFoundException(String message) { - super(message); - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/store/recipe/RecipeStore.java b/wrangler-storage/src/main/java/io/cdap/wrangler/store/recipe/RecipeStore.java deleted file mode 100644 index be1d51d36..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/store/recipe/RecipeStore.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.store.recipe; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.dataset.lib.CloseableIterator; -import io.cdap.cdap.internal.io.SchemaTypeAdapter; -import io.cdap.cdap.spi.data.StructuredRow; -import io.cdap.cdap.spi.data.StructuredTable; -import io.cdap.cdap.spi.data.table.StructuredTableId; -import io.cdap.cdap.spi.data.table.StructuredTableSpecification; -import io.cdap.cdap.spi.data.table.field.Field; -import io.cdap.cdap.spi.data.table.field.Fields; -import io.cdap.cdap.spi.data.table.field.Range; -import io.cdap.cdap.spi.data.transaction.TransactionRunner; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.dataset.recipe.RecipeAlreadyExistsException; -import io.cdap.wrangler.dataset.recipe.RecipeNotFoundException; -import io.cdap.wrangler.dataset.recipe.RecipePageRequest; -import io.cdap.wrangler.dataset.recipe.RecipeRow; -import io.cdap.wrangler.proto.recipe.v2.Recipe; -import io.cdap.wrangler.proto.recipe.v2.RecipeId; -import io.cdap.wrangler.proto.recipe.v2.RecipeListResponse; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Optional; - -import static io.cdap.wrangler.store.utils.Stores.getNamespaceKeys; - -/** - * Recipe store for v2 endpoint - */ -public class RecipeStore { - private static final StructuredTableId TABLE_ID = new StructuredTableId("recipes_store"); - public static final String NAMESPACE_FIELD = "namespace"; - public static final String GENERATION_COL = "generation"; - public static final String RECIPE_ID_FIELD = "recipe_id"; - public static final String RECIPE_NAME_FIELD = "recipe_name"; - public static final String CREATE_TIME_COL = "create_time"; - public static final String UPDATE_TIME_COL = "update_time"; - public static final String RECIPE_INFO_COL = "recipe_info"; - - public static final StructuredTableSpecification RECIPE_TABLE_SPEC = - new StructuredTableSpecification.Builder() - .withId(TABLE_ID) - .withFields(Fields.stringType(NAMESPACE_FIELD), - Fields.longType(GENERATION_COL), - Fields.stringType(RECIPE_ID_FIELD), - Fields.stringType(RECIPE_NAME_FIELD), - Fields.longType(CREATE_TIME_COL), - Fields.longType(UPDATE_TIME_COL), - Fields.stringType(RECIPE_INFO_COL)) - .withPrimaryKeys(NAMESPACE_FIELD, GENERATION_COL, RECIPE_ID_FIELD) - .withIndexes(RECIPE_NAME_FIELD, UPDATE_TIME_COL) - .build(); - - private static final Gson GSON = new GsonBuilder() - .registerTypeAdapter(Schema.class, new SchemaTypeAdapter()).create(); - - private final TransactionRunner transactionRunner; - - public RecipeStore(TransactionRunner transactionRunner) { - this.transactionRunner = transactionRunner; - } - - /** - * Create a new recipe - * @param recipeId id of the recipe - * @param recipeRow recipe to create/update - */ - public void createRecipe(RecipeId recipeId, RecipeRow recipeRow) { - TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - - // check if a different recipe with same name exists - String recipeName = recipeRow.getRecipe().getRecipeName(); - RecipeRow oldRecipeWithName = getRecipeByName(table, recipeName, recipeId.getNamespace(), false); - if (oldRecipeWithName != null) { - throw new RecipeAlreadyExistsException(String.format("recipe with name '%s' already exists", recipeName)); - } - saveRecipe(recipeId, recipeRow, false, table); - }); - } - - /** - * Update a recipe - * @param recipeId id of the recipe - * @param recipeRow recipe to create/update - */ - public void updateRecipe(RecipeId recipeId, RecipeRow recipeRow) { - TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - - // check if a different recipe with same name exists - String recipeName = recipeRow.getRecipe().getRecipeName(); - RecipeRow oldRecipeWithName = getRecipeByName(table, recipeName, recipeId.getNamespace(), false); - if (oldRecipeWithName != null - && !oldRecipeWithName.getRecipe().getRecipeId().equals(recipeRow.getRecipe().getRecipeId())) { - throw new RecipeAlreadyExistsException(String.format("recipe with name '%s' already exists", recipeName)); - } - saveRecipe(recipeId, recipeRow, true, table); - }); - } - - // Create or update a recipe - // failIfNotFound should be false for create, and true for update - private void saveRecipe(RecipeId recipeId, RecipeRow recipeRow, boolean failIfNotFound, StructuredTable table) - throws IOException, RecipeAlreadyExistsException { - RecipeRow oldRecipe = getRecipeInternal(table, recipeId, failIfNotFound); - if (oldRecipe != null) { - Recipe updatedRecipe = Recipe.builder(recipeRow.getRecipe()) - .setCreatedTimeMillis(oldRecipe.getRecipe().getCreatedTimeMillis()).build(); - recipeRow = RecipeRow.builder(updatedRecipe).build(); - } - upsertRecipe(recipeId, recipeRow, table); - } - - // Upsert recipeRow to structured table - private void upsertRecipe(RecipeId recipeId, RecipeRow recipeRow, StructuredTable table) throws IOException { - Collection> fields = getRecipeKeys(recipeId); - fields.add(Fields.stringField(RECIPE_NAME_FIELD, recipeRow.getRecipe().getRecipeName())); - fields.add(Fields.longField(CREATE_TIME_COL, recipeRow.getRecipe().getCreatedTimeMillis())); - fields.add(Fields.longField(UPDATE_TIME_COL, recipeRow.getRecipe().getUpdatedTimeMillis())); - fields.add(Fields.stringField(RECIPE_INFO_COL, GSON.toJson(recipeRow))); - - table.upsert(fields); - } - - /** - * Get the Recipe associated with given recipe Id - * @param recipeId id of the recipe to fetch - * @return {@link Recipe} metadata for given recipe id - * @throws RecipeNotFoundException if recipe is not found - */ - public Recipe getRecipeById(RecipeId recipeId) throws RecipeNotFoundException { - return TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - RecipeRow recipeRow = getRecipeInternal(table, recipeId, true); - return recipeRow.getRecipe(); - }, RecipeNotFoundException.class); - } - - /** - * Get the Recipe associated with given recipe name if it exists, else throws {@link RecipeNotFoundException} - * @param namespace - * @param recipeName - * @return {@link Recipe} metadata for given recipe name if exists - * @throws RecipeNotFoundException - */ - public Recipe getRecipeByName(NamespaceSummary namespace, String recipeName) throws RecipeNotFoundException { - return TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - RecipeRow recipeRow = getRecipeByName(table, recipeName, namespace, true); - return recipeRow.getRecipe(); - }, RecipeNotFoundException.class); - } - - /** - * Get a paginated list of recipes in given namespace - * @param request {@link RecipePageRequest} that contains necessary query parameters - * @return {@link RecipeListResponse} that contains a page of results and nextPageToken - */ - public RecipeListResponse listRecipes(RecipePageRequest request) { - return TransactionRunners.run(transactionRunner, context -> { - List recipes = new ArrayList<>(); - StructuredTable table = context.getTable(TABLE_ID); - - Range range = request.getScanRange(); - try (CloseableIterator iterator = table.scan(range, request.getPageSize() + 1, - request.getSortBy(), request.getSortOrder())) { - iterator.forEachRemaining( - structuredRow -> - recipes.add(GSON.fromJson(structuredRow.getString(RECIPE_INFO_COL), RecipeRow.class).getRecipe()) - ); - } - String nextPageToken = recipes.size() > request.getPageSize() ? - request.getNextPageToken(recipes.remove(recipes.size() - 1)) : ""; - - return new RecipeListResponse(recipes, nextPageToken); - }); - } - - /** - * Delete the specified Recipe - * @param recipeId id of the recipe to delete - * @throws RecipeNotFoundException if recipe with given id is not found - */ - public void deleteRecipe(RecipeId recipeId) throws RecipeNotFoundException { - TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - getRecipeInternal(table, recipeId, true); - table.delete(getRecipeKeys(recipeId)); - }, RecipeNotFoundException.class); - } - - private RecipeRow getRecipeInternal(StructuredTable table, RecipeId recipeId, boolean failIfNotFound) - throws RecipeNotFoundException, IOException { - Optional row = table.read(getRecipeKeys(recipeId)); - if (!row.isPresent()) { - if (!failIfNotFound) { - return null; - } - throw new RecipeNotFoundException(String.format("recipe with id '%s' does not exist", recipeId.getRecipeId())); - } - return GSON.fromJson(row.get().getString(RECIPE_INFO_COL), RecipeRow.class); - } - - private RecipeRow getRecipeByName(StructuredTable table, String recipeName, - NamespaceSummary summary, boolean failIfNotFound) throws IOException { - Collection> keys = getNamespaceKeys(NAMESPACE_FIELD, GENERATION_COL, summary); - keys.add(Fields.stringField(RECIPE_NAME_FIELD, recipeName)); - Range range = Range.singleton(keys); - CloseableIterator iterator = table.scan(range, 1); - if (!iterator.hasNext()) { - if (!failIfNotFound) { - return null; - } - throw new RecipeNotFoundException(String.format("recipe with name '%s' does not exist", recipeName)); - } - return GSON.fromJson(iterator.next().getString(RECIPE_INFO_COL), RecipeRow.class); - } - - private Collection> getRecipeKeys(RecipeId recipeId) { - List> keys = new ArrayList<>(getNamespaceKeys( - NAMESPACE_FIELD, GENERATION_COL, recipeId.getNamespace())); - keys.add(Fields.stringField(RECIPE_ID_FIELD, recipeId.getRecipeId())); - return keys; - } - - // Clean up recipes - used only by unit tests - public void clear() { - TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - table.deleteAll(Range.all()); - }); - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/store/upgrade/UpgradeEntityType.java b/wrangler-storage/src/main/java/io/cdap/wrangler/store/upgrade/UpgradeEntityType.java deleted file mode 100644 index 4f6a4e142..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/store/upgrade/UpgradeEntityType.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.store.upgrade; - -/** - * Upgrade entity type - */ -public enum UpgradeEntityType { - WORKSPACE, - CONNECTION -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/store/upgrade/UpgradeState.java b/wrangler-storage/src/main/java/io/cdap/wrangler/store/upgrade/UpgradeState.java deleted file mode 100644 index 1b9e2bf60..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/store/upgrade/UpgradeState.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.store.upgrade; - -import java.util.Objects; - -/** - * Upgrade state to store any upgrade related information. Can be extended to contain more information about the - * upgrade information - */ -public class UpgradeState { - // this version is the storage version, if in the future, we want to upgrade the entity type again, - // we can use this to check what the previous upgraded version is. - private final long version; - - public UpgradeState(long version) { - this.version = version; - } - - public long getVersion() { - return version; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - - if (o == null || getClass() != o.getClass()) { - return false; - } - - UpgradeState that = (UpgradeState) o; - return version == that.version; - } - - @Override - public int hashCode() { - return Objects.hash(version); - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/store/upgrade/UpgradeStore.java b/wrangler-storage/src/main/java/io/cdap/wrangler/store/upgrade/UpgradeStore.java deleted file mode 100644 index f59d9a0c4..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/store/upgrade/UpgradeStore.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.store.upgrade; - -import com.google.gson.Gson; -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.spi.data.StructuredRow; -import io.cdap.cdap.spi.data.StructuredTable; -import io.cdap.cdap.spi.data.StructuredTableContext; -import io.cdap.cdap.spi.data.table.StructuredTableId; -import io.cdap.cdap.spi.data.table.StructuredTableSpecification; -import io.cdap.cdap.spi.data.table.field.Field; -import io.cdap.cdap.spi.data.table.field.Fields; -import io.cdap.cdap.spi.data.table.field.Range; -import io.cdap.cdap.spi.data.transaction.TransactionRunner; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Optional; -import javax.annotation.Nullable; - -/** - * Upgrade store to store upgrade information for each namespace, - * Use system namespace to track the overall upgrade status. - * This upgrade store can be used as a general purpose for app upgrade: - * it has primary key as [namespace][namespace-generation][entity-type] and value [upgrade-ts-millis][upgrade-state] - * upgrade state is a serialized string which represents the overall upgrade information and status - */ -public class UpgradeStore { - private static final NamespaceSummary SYSTEM_NS = new NamespaceSummary("system", "", 0L); - private static final StructuredTableId TABLE_ID = new StructuredTableId("app_upgrade"); - private static final Gson GSON = new Gson(); - - private static final String NAMESPACE_COL = "namespace"; - private static final String GENERATION_COL = "generation"; - private static final String ENTITY_TYPE_COL = "entity_type"; - private static final String UPGRADE_STATE_COL = "upgrade_state"; - private static final String UPGRADE_TIMESTAMP = "upgrade_timestamp"; - - public static final StructuredTableSpecification UPGRADE_TABLE_SPEC = - new StructuredTableSpecification.Builder() - .withId(TABLE_ID) - .withFields(Fields.stringType(NAMESPACE_COL), - Fields.longType(GENERATION_COL), - Fields.stringType(ENTITY_TYPE_COL), - Fields.stringType(UPGRADE_STATE_COL), - Fields.longType(UPGRADE_TIMESTAMP)) - .withPrimaryKeys(NAMESPACE_COL, GENERATION_COL, ENTITY_TYPE_COL) - .build(); - - private final TransactionRunner transactionRunner; - - public UpgradeStore(TransactionRunner transactionRunner) { - this.transactionRunner = transactionRunner; - } - - /** - * Initialize the upgrade timestamp and state for the given upgrade types if not there and - * return the upgrade timestamp. This method should be called before any upgrade starts. - * The upgrade will only operate on entities created before this timestamp. - * - * @param type the upgrade entity type - * @param timestampMillis the upgrade timestamp in millis - * @param preUpgradeState the state before upgrade - * @return the upgrade timestamp - */ - public long initializeAndRetrieveUpgradeTimestampMillis(UpgradeEntityType type, long timestampMillis, - UpgradeState preUpgradeState) { - return TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - Collection> fields = getPrimaryKeys(SYSTEM_NS, type); - Optional row = table.read(fields); - - fields.add(Fields.longField(UPGRADE_TIMESTAMP, timestampMillis)); - fields.add(Fields.stringField(UPGRADE_STATE_COL, GSON.toJson(preUpgradeState))); - - if (!row.isPresent()) { - table.upsert(fields); - return timestampMillis; - } - - // return the upgrade timestamp - return row.get().getLong(UPGRADE_TIMESTAMP); - }); - } - - /** - * Set the upgrade complete status for the entity type - */ - public void setEntityUpgradeState(UpgradeEntityType type, UpgradeState upgradeState) { - TransactionRunners.run(transactionRunner, context -> { - setComplete(SYSTEM_NS, context, type, upgradeState); - }); - } - - /** - * Set the upgrade complete status for the entity type in a namespace - * - * @param namespace namespace that completed upgrade - */ - public void setEntityUpgradeState(NamespaceSummary namespace, UpgradeEntityType type, UpgradeState upgradeState) { - TransactionRunners.run(transactionRunner, context -> { - setComplete(namespace, context, type, upgradeState); - }); - } - - /** - * Get the upgrade state - */ - @Nullable - public UpgradeState getEntityUpgradeState(UpgradeEntityType type) { - return TransactionRunners.run(transactionRunner, context -> { - return getEntityUpgradeState(SYSTEM_NS, context, type); - }); - } - - /** - * Checks whether an entity type is upgrade complete in a namespace - */ - public UpgradeState getEntityUpgradeState(NamespaceSummary namespace, UpgradeEntityType type) { - return TransactionRunners.run(transactionRunner, context -> { - return getEntityUpgradeState(namespace, context, type); - }); - } - - // visible for testing, storage do not have guava dependency so cannot add annotation - void clear() { - TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - table.deleteAll(Range.all()); - }); - } - - private void setComplete(NamespaceSummary namespace, StructuredTableContext context, - UpgradeEntityType type, UpgradeState upgradeState) throws IOException { - StructuredTable table = context.getTable(TABLE_ID); - Collection> fields = getPrimaryKeys(namespace, type); - fields.add(Fields.stringField(UPGRADE_STATE_COL, GSON.toJson(upgradeState))); - table.upsert(fields); - } - - @Nullable - private UpgradeState getEntityUpgradeState(NamespaceSummary namespace, StructuredTableContext context, - UpgradeEntityType type) throws IOException { - StructuredTable table = context.getTable(TABLE_ID); - Collection> fields = getPrimaryKeys(namespace, type); - Optional row = table.read(fields); - if (!row.isPresent() || row.get().getString(UPGRADE_STATE_COL) == null) { - return null; - } - - return GSON.fromJson(row.get().getString(UPGRADE_STATE_COL), UpgradeState.class); - } - - private Collection> getPrimaryKeys(NamespaceSummary namespace, UpgradeEntityType entityType) { - List> keys = new ArrayList<>(getNamespaceKeys(namespace)); - keys.add(Fields.stringField(ENTITY_TYPE_COL, entityType.name())); - return keys; - } - - private Collection> getNamespaceKeys(NamespaceSummary namespace) { - List> keys = new ArrayList<>(); - keys.add(Fields.stringField(NAMESPACE_COL, namespace.getName())); - keys.add(Fields.longField(GENERATION_COL, namespace.getGeneration())); - return keys; - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/store/utils/Stores.java b/wrangler-storage/src/main/java/io/cdap/wrangler/store/utils/Stores.java deleted file mode 100644 index 869251932..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/store/utils/Stores.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.store.utils; - -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.spi.data.table.field.Field; -import io.cdap.cdap.spi.data.table.field.Fields; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -/** - * Utility methods for Stores - */ -public class Stores { - /** - * Constructs a list of {@link Field}s that map table column names to values - * @param namespaceField table column name for storing namespace name - * @param generationField table column name for storing namespace generation - * @param namespace {@link NamespaceSummary} object that contains namespace metadata - * @return list of {@link Field} objects - */ - public static Collection> getNamespaceKeys( - String namespaceField, String generationField, NamespaceSummary namespace) { - List> keys = new ArrayList<>(); - keys.add(Fields.stringField(namespaceField, namespace.getName())); - keys.add(Fields.longField(generationField, namespace.getGeneration())); - return keys; - } -} diff --git a/wrangler-storage/src/main/java/io/cdap/wrangler/store/workspace/WorkspaceStore.java b/wrangler-storage/src/main/java/io/cdap/wrangler/store/workspace/WorkspaceStore.java deleted file mode 100644 index e5e536ea6..000000000 --- a/wrangler-storage/src/main/java/io/cdap/wrangler/store/workspace/WorkspaceStore.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.store.workspace; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.dataset.lib.CloseableIterator; -import io.cdap.cdap.internal.io.SchemaTypeAdapter; -import io.cdap.cdap.spi.data.StructuredRow; -import io.cdap.cdap.spi.data.StructuredTable; -import io.cdap.cdap.spi.data.table.StructuredTableId; -import io.cdap.cdap.spi.data.table.StructuredTableSpecification; -import io.cdap.cdap.spi.data.table.field.Field; -import io.cdap.cdap.spi.data.table.field.Fields; -import io.cdap.cdap.spi.data.table.field.Range; -import io.cdap.cdap.spi.data.transaction.TransactionRunner; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.dataset.workspace.WorkspaceNotFoundException; -import io.cdap.wrangler.proto.workspace.v2.Workspace; -import io.cdap.wrangler.proto.workspace.v2.WorkspaceDetail; -import io.cdap.wrangler.proto.workspace.v2.WorkspaceId; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Optional; -import javax.annotation.Nullable; - -/** - * Workspace store for v2 endpoint - */ -public class WorkspaceStore { - private static final StructuredTableId TABLE_ID = new StructuredTableId("workspaces_store"); - private static final String NAMESPACE_FIELD = "namespace"; - private static final String WORKSPACE_ID_FIELD = "workspace_id"; - // this field is to ensure the workspace information is correctly fetched if a namespace is recreated - private static final String GENERATION_COL = "generation"; - private static final String CREATED_COL = "createdtimemillis"; - private static final String UPDATED_COL = "updatedtimemillis"; - private static final String SAMPLE_COL = "sample"; - private static final String WORKSPACE_INFO_COL = "workspace_info"; - - public static final StructuredTableSpecification WORKSPACE_TABLE_SPEC = - new StructuredTableSpecification.Builder() - .withId(TABLE_ID) - .withFields(Fields.stringType(NAMESPACE_FIELD), - Fields.longType(GENERATION_COL), - Fields.stringType(WORKSPACE_ID_FIELD), - Fields.longType(CREATED_COL), - Fields.longType(UPDATED_COL), - Fields.bytesType(SAMPLE_COL), - Fields.stringType(WORKSPACE_INFO_COL)) - .withPrimaryKeys(NAMESPACE_FIELD, GENERATION_COL, WORKSPACE_ID_FIELD) - .build(); - - private static final Gson GSON = new GsonBuilder() - .registerTypeAdapter(Schema.class, new SchemaTypeAdapter()).create(); - private final TransactionRunner transactionRunner; - - public WorkspaceStore(TransactionRunner transactionRunner) { - this.transactionRunner = transactionRunner; - } - - /** - * Get the workspace about the given workspace id - * - * @param workspaceId the id of the workspace to look up - * @return the workspace metadata about the given workspace id - * @throws WorkspaceNotFoundException if the workspace is not found - */ - public Workspace getWorkspace(WorkspaceId workspaceId) throws WorkspaceNotFoundException { - return TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - return getWorkspaceInternal(table, workspaceId, true); - }, WorkspaceNotFoundException.class); - } - - /** - * Get the workspace detail about the given workspace id - * - * @param workspaceId the id of the workspace to look up - * @return the workspace detail about the given workspace id - * @throws WorkspaceNotFoundException if the workspace is not found - */ - public WorkspaceDetail getWorkspaceDetail(WorkspaceId workspaceId) throws WorkspaceNotFoundException { - return TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - Optional row = table.read(getWorkspaceKeys(workspaceId)); - if (!row.isPresent()) { - throw new WorkspaceNotFoundException( - String.format("Workspace %s does not exist", workspaceId.getWorkspaceId())); - } - - Workspace workspace = GSON.fromJson(row.get().getString(WORKSPACE_INFO_COL), Workspace.class); - List rows = new ArrayList<>(); - byte[] sample = row.get().getBytes(SAMPLE_COL); - if (sample != null) { - try (ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(sample))) { - rows = (List) ois.readObject(); - } - } - - return new WorkspaceDetail(workspace, rows); - }, WorkspaceNotFoundException.class); - } - - /** - * Get all the workspaces in the given namespace - * - * @param namespace the namespace to look up - * @return the list of workspaces in this namespace - */ - public List listWorkspaces(NamespaceSummary namespace) { - return TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - Range range = Range.singleton(getNamespaceKeys(namespace)); - List workspaces = new ArrayList<>(); - try (CloseableIterator rowIter = table.scan(range, Integer.MAX_VALUE)) { - rowIter.forEachRemaining( - structuredRow -> workspaces.add(GSON.fromJson(structuredRow.getString(WORKSPACE_INFO_COL), - Workspace.class))); - } - return workspaces; - }); - } - - /** - * Create/update the workspace from given workspace. - * - * @param workspaceId the id of the workspace - * @param workspace workspace to create/update - */ - public void saveWorkspace(WorkspaceId workspaceId, WorkspaceDetail workspace) { - saveWorkspace(workspaceId, workspace.getWorkspace(), workspace.getSampleAsBytes(), false); - } - - /** - * Save the new workspace metadata - * - * @param workspaceId the workspace id - * @param workspace the new workspace meta to save - */ - public void updateWorkspace(WorkspaceId workspaceId, Workspace workspace) { - saveWorkspace(workspaceId, workspace, null, true); - } - - /** - * Delete the given workspace - * - * @param workspaceId the workspace id to delete - * @throws WorkspaceNotFoundException if the workspace is not found - */ - public void deleteWorkspace(WorkspaceId workspaceId) throws WorkspaceNotFoundException { - TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - getWorkspaceInternal(table, workspaceId, true); - table.delete(getWorkspaceKeys(workspaceId)); - }, WorkspaceNotFoundException.class); - } - - // clean up all workspaces, only usable by tests, do not add @VisibleForTesting to not - // introduce extra guava dependency - void clear() { - TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - table.deleteAll(Range.all()); - }); - } - - private void saveWorkspace(WorkspaceId workspaceId, Workspace workspace, @Nullable byte[] sample, - boolean failIfNotFound) { - TransactionRunners.run(transactionRunner, context -> { - StructuredTable table = context.getTable(TABLE_ID); - Workspace oldWorkspace = getWorkspaceInternal(table, workspaceId, failIfNotFound); - Workspace newWorkspace = workspace; - - if (oldWorkspace != null) { - newWorkspace = - Workspace.builder(newWorkspace).setCreatedTimeMillis(oldWorkspace.getCreatedTimeMillis()).build(); - } - - Collection> fields = getWorkspaceKeys(workspaceId); - fields.add(Fields.longField(CREATED_COL, newWorkspace.getCreatedTimeMillis())); - fields.add(Fields.longField(UPDATED_COL, newWorkspace.getUpdatedTimeMillis())); - fields.add(Fields.stringField(WORKSPACE_INFO_COL, GSON.toJson(newWorkspace))); - - if (sample == null) { - table.upsert(fields); - return; - } - - fields.add(Fields.bytesField(SAMPLE_COL, sample)); - table.upsert(fields); - }); - } - - // internal get method so the save, delete and get operation can all happen in single transaction - @Nullable - private Workspace getWorkspaceInternal( - StructuredTable table, WorkspaceId workspaceId, - boolean failIfNotFound) throws IOException, WorkspaceNotFoundException { - Optional row = table.read(getWorkspaceKeys(workspaceId)); - if (!row.isPresent()) { - if (!failIfNotFound) { - return null; - } - throw new WorkspaceNotFoundException(String.format("Workspace %s does not exist", workspaceId.getWorkspaceId())); - } - - return GSON.fromJson(row.get().getString(WORKSPACE_INFO_COL), Workspace.class); - } - - private Collection> getWorkspaceKeys(WorkspaceId workspace) { - List> keys = new ArrayList<>(getNamespaceKeys(workspace.getNamespace())); - keys.add(Fields.stringField(WORKSPACE_ID_FIELD, workspace.getWorkspaceId())); - return keys; - } - - private Collection> getNamespaceKeys(NamespaceSummary namespace) { - List> keys = new ArrayList<>(); - keys.add(Fields.stringField(NAMESPACE_FIELD, namespace.getName())); - keys.add(Fields.longField(GENERATION_COL, namespace.getGeneration())); - return keys; - } -} diff --git a/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/ConnectionStoreTest.java b/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/ConnectionStoreTest.java deleted file mode 100644 index 96b84d91b..000000000 --- a/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/ConnectionStoreTest.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset; - -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.cdap.test.SystemAppTestBase; -import io.cdap.wrangler.dataset.connections.ConnectionAlreadyExistsException; -import io.cdap.wrangler.dataset.connections.ConnectionNotFoundException; -import io.cdap.wrangler.dataset.connections.ConnectionStore; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.connection.Connection; -import io.cdap.wrangler.proto.connection.ConnectionMeta; -import io.cdap.wrangler.proto.connection.ConnectionType; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import java.util.List; - -/** - * Tests for the {@link ConnectionStore}. - */ -public class ConnectionStoreTest extends SystemAppTestBase { - - @Before - public void setupTest() throws Exception { - getStructuredTableAdmin().create(ConnectionStore.TABLE_SPEC); - } - - @After - public void cleanupTest() throws Exception { - getStructuredTableAdmin().drop(ConnectionStore.TABLE_SPEC.getTableId()); - } - - @Test - public void testNotFoundException() throws Exception { - getTransactionRunner().run(context -> { - ConnectionStore connectionStore = ConnectionStore.get(context); - - NamespacedId id = new NamespacedId(new Namespace("c0", 10L), "id"); - try { - connectionStore.get(id); - Assert.fail("Getting a non-existent connection did not throw an exception."); - } catch (ConnectionNotFoundException e) { - // expected - } - - try { - connectionStore.update(id, ConnectionMeta.builder().setName("name").setType(ConnectionType.FILE).build()); - Assert.fail("Getting a non-existent connection did not throw an exception."); - } catch (ConnectionNotFoundException e) { - // expected - } - }); - } - - @Test - public void testAlreadyExistsException() throws Exception { - getTransactionRunner().run(context -> { - ConnectionStore connectionStore = ConnectionStore.get(context); - - Namespace namespace = new Namespace("c0", 10L); - ConnectionMeta meta = ConnectionMeta.builder().setName("name").setType(ConnectionType.FILE).build(); - connectionStore.create(namespace, meta); - try { - connectionStore.create(namespace, meta); - Assert.fail("Creating a duplicate connection did not throw an exception."); - } catch (ConnectionAlreadyExistsException e) { - // expected - } - }); - } - - @Test - public void testCRUD() { - Namespace ns = new Namespace("n0", 10L); - Assert.assertTrue(run(connectionStore -> connectionStore.list(ns, x -> true)).isEmpty()); - - // test creation - ConnectionMeta expected = ConnectionMeta.builder() - .setName("My Connection") - .setType(ConnectionType.FILE) - .putProperty("k1", "v1") - .build(); - NamespacedId id = run(connectionStore -> connectionStore.create(ns, expected)); - - Connection actual = run(connectionStore -> connectionStore.get(id)); - assertConnectionMetaEquality(expected, actual); - - // test update - ConnectionMeta updated = ConnectionMeta.builder() - .setName(expected.getName()) - .setType(expected.getType()) - .putProperty("k1", "v2") - .build(); - actual = run(connectionStore -> { - connectionStore.update(id, updated); - return connectionStore.get(id); - }); - assertConnectionMetaEquality(updated, actual); - - // test scan with non-matching filter - List filterList = run(connectionStore -> - connectionStore.list(ns, c -> c.getType() == ConnectionType.DATABASE)); - Assert.assertTrue(filterList.isEmpty()); - // text scan - List list = run(connectionStore -> connectionStore.list(ns, x -> true)); - Assert.assertEquals(1, list.size()); - assertConnectionMetaEquality(updated, actual); - - // test delete - run(connectionStore -> { - connectionStore.delete(id); - try { - connectionStore.get(id); - Assert.fail("Connection was not properly deleted."); - } catch (ConnectionNotFoundException e) { - // expected - } - return null; - }); - Assert.assertTrue(run(connectionStore -> connectionStore.list(ns, x -> true)).isEmpty()); - } - - @Test - public void testNamespaceIsolation() { - Namespace ns1 = new Namespace("ns1", 10L); - Namespace ns2 = new Namespace("ns2", 10L); - - // test creation in different namespaces - ConnectionMeta expected1 = ConnectionMeta.builder() - .setName("My Connection") - .setType(ConnectionType.FILE) - .putProperty("k1", "v1") - .build(); - NamespacedId id1 = run(connectionStore -> connectionStore.create(ns1, expected1)); - ConnectionMeta expected2 = ConnectionMeta.builder() - .setName("My Connection") - .setType(ConnectionType.GCS) - .putProperty("k2", "v2") - .build(); - NamespacedId id2 = run(connectionStore -> connectionStore.create(ns2, expected2)); - - Connection actual1 = run(connectionStore -> connectionStore.get(id1)); - assertConnectionMetaEquality(expected1, actual1); - Connection actual2 = run(connectionStore -> connectionStore.get(id2)); - assertConnectionMetaEquality(expected2, actual2); - - List list1 = run(connectionStore -> connectionStore.list(ns1, x -> true)); - Assert.assertEquals(1, list1.size()); - assertConnectionMetaEquality(expected1, list1.iterator().next()); - List list2 = run(connectionStore -> connectionStore.list(ns2, x -> true)); - Assert.assertEquals(1, list2.size()); - assertConnectionMetaEquality(expected2, list2.iterator().next()); - - // test deletion from one namespace - run(connectionStore -> { - connectionStore.delete(id1); - return null; - }); - Assert.assertTrue(run(connectionStore -> connectionStore.list(ns1, x -> true)).isEmpty()); - try { - run(connectionStore -> connectionStore.get(id1)); - Assert.fail("Connection store did not properly delete connection 1"); - } catch (ConnectionNotFoundException e) { - // expected - } - actual2 = run(connectionStore -> connectionStore.get(id2)); - assertConnectionMetaEquality(expected2, actual2); - list2 = run(connectionStore -> connectionStore.list(ns2, x -> true)); - Assert.assertEquals(1, list2.size()); - assertConnectionMetaEquality(expected2, list2.iterator().next()); - } - - @Test - public void testNamespaceGenerations() { - Namespace nsGen1 = new Namespace("ns1", 1L); - Namespace nsGen2 = new Namespace("ns1", 2L); - - - // test creation in different namespaces - ConnectionMeta expected1 = ConnectionMeta.builder() - .setName("My Connection") - .setType(ConnectionType.FILE) - .putProperty("k1", "v1") - .build(); - NamespacedId id1 = run(connectionStore -> connectionStore.create(nsGen1, expected1)); - - // test that fetching with a different generation doesn't include the connection - try { - run(connectionStore -> connectionStore.get(new NamespacedId(nsGen2, id1.getId()))); - Assert.fail("connection with a different generation should not be visible."); - } catch (ConnectionNotFoundException e) { - // expected - } - - // test that listing with a different generation doesn't include the connection - Assert.assertTrue(run(connectionStore -> connectionStore.list(nsGen2, x -> true)).isEmpty()); - } - - @Test - public void testPreconfiguredConnections() { - Namespace nsGen1 = new Namespace("ns1", 1L); - - ConnectionMeta preconfiguredMeta = ConnectionMeta.builder() - .setName("Built-in connection") - .setType(ConnectionType.FILE) - .putProperty("k1", "v1") - .build(); - ConnectionMeta manuallyCreatedMeta = ConnectionMeta.builder() - .setName("Manually created connection") - .setType(ConnectionType.FILE) - .putProperty("k1", "v1") - .build(); - - NamespacedId preconfigured = run(connectionStore -> connectionStore.create(nsGen1, preconfiguredMeta, true)); - NamespacedId manuallyCreated = run(connectionStore -> connectionStore.create(nsGen1, manuallyCreatedMeta)); - - Connection preconfiguredConnection = - run(connectionStore -> connectionStore.get(new NamespacedId(nsGen1, preconfigured.getId()))); - Connection manuallyCreatedConnection = - run(connectionStore -> connectionStore.get(new NamespacedId(nsGen1, manuallyCreated.getId()))); - - // test that built-in connection returns that it is built-in - Assert.assertTrue(preconfiguredConnection.isPreconfigured()); - - // test that a manually created connection returns that it is not built-in - Assert.assertFalse(manuallyCreatedConnection.isPreconfigured()); - } - - private void assertConnectionMetaEquality(ConnectionMeta expected, Connection actual) { - // can't just compare objects since the store sets created, id, and updated fields - Assert.assertEquals(expected.getName(), actual.getName()); - Assert.assertEquals(expected.getType(), actual.getType()); - Assert.assertEquals(expected.getProperties(), actual.getProperties()); - } - - private T run(ConnectionStoreCallable callable) { - return TransactionRunners.run(getTransactionRunner(), context -> { - ConnectionStore connectionStore = ConnectionStore.get(context); - return callable.run(connectionStore); - }, ConnectionNotFoundException.class, ConnectionAlreadyExistsException.class); - } - - private interface ConnectionStoreCallable { - T run(ConnectionStore connectionStore) throws Exception; - } -} diff --git a/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/RecipePageRequestTest.java b/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/RecipePageRequestTest.java deleted file mode 100644 index ea68bcef3..000000000 --- a/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/RecipePageRequestTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset; - -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.spi.data.table.field.Field; -import io.cdap.cdap.spi.data.table.field.Range; -import io.cdap.wrangler.dataset.recipe.RecipePageRequest; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Collection; - -import static io.cdap.cdap.spi.data.table.field.Range.Bound.INCLUSIVE; -import static io.cdap.wrangler.dataset.recipe.RecipePageRequest.SORT_BY_UPDATE_TIME; -import static io.cdap.wrangler.store.recipe.RecipeStore.GENERATION_COL; -import static io.cdap.wrangler.store.recipe.RecipeStore.NAMESPACE_FIELD; -import static io.cdap.wrangler.store.utils.Stores.getNamespaceKeys; - -public class RecipePageRequestTest { - @Test(expected = IllegalArgumentException.class) - public void testInvalidSortBy() { - NamespaceSummary namespace = new NamespaceSummary("n1", "", 10L); - RecipePageRequest.builder(namespace).setSortBy("invalid-sortBy").build(); - } - - @Test(expected = IllegalArgumentException.class) - public void testInvalidSortOrder() { - NamespaceSummary namespace = new NamespaceSummary("n1", "", 10L); - RecipePageRequest.builder(namespace).setSortOrder("invalid-sortOrder").build(); - } - - @Test(expected = IllegalArgumentException.class) - public void testInvalidPageSize() { - NamespaceSummary namespace = new NamespaceSummary("n1", "", 10L); - RecipePageRequest.builder(namespace).setPageSize(0).build(); - } - - @Test(expected = IllegalArgumentException.class) - public void testPageRequestWithInvalidPageToken() { - NamespaceSummary namespace = new NamespaceSummary("n1", "", 10L); - RecipePageRequest.builder(namespace).setSortBy(SORT_BY_UPDATE_TIME).setPageToken("abc123").build(); - } - - @Test - public void testGetRangeForFirstPage() { - NamespaceSummary namespace = new NamespaceSummary("n1", "", 10L); - RecipePageRequest pageRequest = RecipePageRequest.builder(namespace).build(); - Range range = pageRequest.getScanRange(); - Collection> fields = getNamespaceKeys(NAMESPACE_FIELD, GENERATION_COL, namespace); - Assert.assertEquals(range, Range.create(fields, INCLUSIVE, fields, INCLUSIVE)); - } -} diff --git a/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/SchemaRegistryTest.java b/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/SchemaRegistryTest.java deleted file mode 100644 index 85db4761b..000000000 --- a/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/SchemaRegistryTest.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright © 2018-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset; - -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.cdap.test.SystemAppTestBase; -import io.cdap.wrangler.dataset.schema.SchemaDescriptor; -import io.cdap.wrangler.dataset.schema.SchemaNotFoundException; -import io.cdap.wrangler.dataset.schema.SchemaRegistry; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.schema.SchemaDescriptorType; -import io.cdap.wrangler.proto.schema.SchemaEntry; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -/** - * Tests for {@link SchemaRegistry}. - */ -public class SchemaRegistryTest extends SystemAppTestBase { - - @Before - public void setupTest() throws Exception { - getStructuredTableAdmin().create(SchemaRegistry.META_TABLE_SPEC); - getStructuredTableAdmin().create(SchemaRegistry.ENTRY_TABLE_SPEC); - } - - @After - public void cleanupTest() throws Exception { - getStructuredTableAdmin().drop(SchemaRegistry.META_TABLE_SPEC.getTableId()); - getStructuredTableAdmin().drop(SchemaRegistry.ENTRY_TABLE_SPEC.getTableId()); - } - - @Test - public void testNotFoundExceptions() throws Exception { - getTransactionRunner().run(context -> { - SchemaRegistry registry = SchemaRegistry.get(context); - NamespacedId id = new NamespacedId(new Namespace("c0", 10L), "id0"); - try { - registry.remove(id, 0L); - Assert.fail("removing an entry from a non-existent schema did not throw an exception"); - } catch (SchemaNotFoundException e) { - // expected - } - - try { - registry.getEntry(id); - Assert.fail("getting a non-existent schema did not throw an exception"); - } catch (SchemaNotFoundException e) { - // expected - } - - try { - registry.getVersions(id); - Assert.fail("getting versions of a non-existent schema did not throw an exception"); - } catch (SchemaNotFoundException e) { - // expected - } - - SchemaDescriptor descriptor = new SchemaDescriptor(id, "some name", "desc", SchemaDescriptorType.AVRO); - registry.write(descriptor); - - try { - registry.getEntry(id, 1L); - Assert.fail("getting a non-existent schema entry did not throw an exception"); - } catch (SchemaNotFoundException e) { - // expected - } - }); - } - - @Test - public void testCRUD() { - NamespacedId id = new NamespacedId(new Namespace("c0", 10L), "id0"); - Assert.assertFalse(call(registry -> registry.hasSchema(id))); - - // test schema creation - SchemaDescriptor descriptor = new SchemaDescriptor(id, "some name", "desc", SchemaDescriptorType.AVRO); - SchemaEntry expected = new SchemaEntry(id, descriptor.getName(), descriptor.getDescription(), - descriptor.getType(), Collections.emptySet(), null, null); - run(registry -> registry.write(descriptor)); - Assert.assertTrue(call(registry -> registry.hasSchema(id))); - Assert.assertFalse(call(registry -> registry.hasSchema(id, 5L))); - SchemaEntry actual = call(registry -> registry.getEntry(id)); - Assert.assertEquals(expected, actual); - - // test adding a schema entry - byte[] spec1 = new byte[]{0, 1, 2}; - long version1 = call(registry -> registry.add(id, spec1)); - Set expectedVersions = new HashSet<>(); - expectedVersions.add(version1); - expected = new SchemaEntry(id, expected.getName(), expected.getDescription(), expected.getType(), - expectedVersions, spec1, version1); - SchemaEntry v1Actual = call(registry -> registry.getEntry(id)); - Assert.assertTrue(call(registry -> registry.hasSchema(id, version1))); - Assert.assertEquals(expected, v1Actual); - v1Actual = call(registry -> registry.getEntry(id, version1)); - Assert.assertEquals(expected, v1Actual); - Assert.assertEquals(expectedVersions, call(registry -> registry.getVersions(id))); - - // test get versions - byte[] spec2 = new byte[]{3, 4, 5}; - long version2 = call(registry -> registry.add(id, spec2)); - expectedVersions.clear(); - expectedVersions.add(version1); - expectedVersions.add(version2); - expected = new SchemaEntry(id, expected.getName(), expected.getDescription(), expected.getType(), - expectedVersions, spec2, version2); - Assert.assertEquals(expectedVersions, call(registry -> registry.getVersions(id))); - Assert.assertEquals(expected, call(registry -> registry.getEntry(id, version2))); - Assert.assertEquals(expected, call(registry -> registry.getEntry(id))); - - // test version specific deletion - run(registry -> registry.remove(id, version1)); - Assert.assertFalse(call(registry -> registry.hasSchema(id, version1))); - Assert.assertTrue(call(registry -> registry.hasSchema(id, version2))); - Assert.assertEquals(Collections.singleton(version2), call(registry -> registry.getVersions(id))); - - // test deleting all entries still keeps the schema around - run(registry -> registry.remove(id, version2)); - Assert.assertFalse(call(registry -> registry.hasSchema(id, version2))); - Assert.assertTrue(call(registry -> registry.hasSchema(id))); - - // test deleting the schema - run(registry -> registry.add(id, spec2)); - run(registry -> registry.delete(id)); - Assert.assertFalse(call(registry -> registry.hasSchema(id))); - } - - @Test - public void testNamespaceIsolation() { - Namespace ns1 = new Namespace("c1", 10L); - Namespace ns2 = new Namespace("c2", 10L); - - NamespacedId id1 = new NamespacedId(ns1, "id0"); - NamespacedId id2 = new NamespacedId(ns2, id1.getId()); - - SchemaDescriptor descriptor1 = new SchemaDescriptor(id1, "name1", "desc1", SchemaDescriptorType.AVRO); - SchemaEntry expected1 = new SchemaEntry(id1, descriptor1.getName(), descriptor1.getDescription(), - descriptor1.getType(), Collections.emptySet(), null, null); - SchemaDescriptor descriptor2 = new SchemaDescriptor(id2, "name2", "desc2", SchemaDescriptorType.AVRO); - SchemaEntry expected2 = new SchemaEntry(id2, descriptor2.getName(), descriptor2.getDescription(), - descriptor2.getType(), Collections.emptySet(), null, null); - - // test writes don't interfere with each other - run(registry -> registry.write(descriptor1)); - run(registry -> registry.write(descriptor2)); - Assert.assertEquals(expected1, call(registry -> registry.getEntry(id1))); - Assert.assertEquals(expected2, call(registry -> registry.getEntry(id2))); - - // test version lists don't overlap - long v1 = call(registry -> registry.add(id1, new byte[]{1})); - long v2 = call(registry -> registry.add(id2, new byte[]{2})); - Assert.assertEquals(Collections.singleton(v1), call(registry -> registry.getVersions(id1))); - Assert.assertEquals(Collections.singleton(v2), call(registry -> registry.getVersions(id2))); - - // test delete doesn't affect schema in another context - run(registry -> registry.delete(id1)); - try { - run(registry -> registry.getVersions(id1)); - } catch (SchemaNotFoundException e) { - // expected - } - Assert.assertEquals(Collections.singleton(v2), call(registry -> registry.getVersions(id2))); - } - - @Test - public void testNamespaceGenerations() { - Namespace nsGen1 = new Namespace("ns1", 1L); - Namespace nsGen2 = new Namespace("ns1", 2L); - - NamespacedId id = new NamespacedId(nsGen1, "id0"); - SchemaDescriptor descriptor = new SchemaDescriptor(id, "name", "desc", SchemaDescriptorType.AVRO); - run(registry -> registry.write(descriptor)); - long v1 = call(registry -> registry.add(id, new byte[]{1})); - - // test that fetching with a different generation doesn't include the connection - try { - run(registry -> registry.getEntry(new NamespacedId(nsGen2, id.getId()))); - Assert.fail("schema with a different generation should not be visible."); - } catch (SchemaNotFoundException e) { - // expected - } - - try { - run(registry -> registry.getVersions(new NamespacedId(nsGen2, id.getId()))); - Assert.fail("schema entry with a different generation should not be visible."); - } catch (SchemaNotFoundException e) { - // expected - } - } - - private T call(SchemaRegistryCallable callable) { - return TransactionRunners.run(getTransactionRunner(), context -> { - SchemaRegistry registry = SchemaRegistry.get(context); - return callable.run(registry); - }, SchemaNotFoundException.class); - } - - private void run(SchemaRegistryRunnable runnable) { - TransactionRunners.run(getTransactionRunner(), context -> { - SchemaRegistry registry = SchemaRegistry.get(context); - runnable.run(registry); - }, SchemaNotFoundException.class); - } - - private interface SchemaRegistryRunnable { - void run(SchemaRegistry registry) throws Exception; - } - - private interface SchemaRegistryCallable { - T run(SchemaRegistry registry) throws Exception; - } -} diff --git a/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/WorkspaceDatasetTest.java b/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/WorkspaceDatasetTest.java deleted file mode 100644 index 974fa1835..000000000 --- a/wrangler-storage/src/test/java/io/cdap/wrangler/dataset/WorkspaceDatasetTest.java +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright © 2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.dataset; - -import com.google.gson.JsonObject; -import io.cdap.cdap.spi.data.transaction.TransactionRunners; -import io.cdap.cdap.test.SystemAppTestBase; -import io.cdap.wrangler.dataset.workspace.DataType; -import io.cdap.wrangler.dataset.workspace.Workspace; -import io.cdap.wrangler.dataset.workspace.WorkspaceDataset; -import io.cdap.wrangler.dataset.workspace.WorkspaceMeta; -import io.cdap.wrangler.dataset.workspace.WorkspaceNotFoundException; -import io.cdap.wrangler.proto.Namespace; -import io.cdap.wrangler.proto.NamespacedId; -import io.cdap.wrangler.proto.Recipe; -import io.cdap.wrangler.proto.Request; -import io.cdap.wrangler.proto.RequestV1; -import io.cdap.wrangler.proto.Sampling; -import io.cdap.wrangler.proto.WorkspaceIdentifier; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import java.util.Collections; -import java.util.Map; - -/** - * Tests for the workspace dataset. - */ -public class WorkspaceDatasetTest extends SystemAppTestBase { - - @Before - public void setupTest() throws Exception { - getStructuredTableAdmin().create(WorkspaceDataset.TABLE_SPEC); - } - - @After - public void cleanupTest() throws Exception { - getStructuredTableAdmin().drop(WorkspaceDataset.TABLE_SPEC.getTableId()); - } - - @Test - public void testNotFoundExceptions() throws Exception { - getTransactionRunner().run(context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - Namespace namespace = new Namespace("c0", 10L); - try { - ws.updateWorkspaceData(new NamespacedId(namespace, "id"), DataType.TEXT, new byte[]{0}); - Assert.fail("Updating a non-existing workspace should fail."); - } catch (WorkspaceNotFoundException e) { - // expected - } - - try { - ws.updateWorkspaceProperties(new NamespacedId(namespace, "id"), Collections.emptyMap()); - Assert.fail("Updating a non-existing workspace should fail."); - } catch (WorkspaceNotFoundException e) { - // expected - } - - try { - ws.updateWorkspaceRequest(new NamespacedId(namespace, "id"), null); - Assert.fail("Updating a non-existing workspace should fail."); - } catch (WorkspaceNotFoundException e) { - // expected - } - }); - } - - @Test - public void testScopes() { - WorkspaceIdentifier id1 = new WorkspaceIdentifier("id1", "name1"); - WorkspaceIdentifier id2 = new WorkspaceIdentifier("id2", "name2"); - - Namespace namespace = new Namespace("c0", 10L); - - String scope1 = "scope1"; - String scope2 = "scope2"; - WorkspaceMeta meta1 = WorkspaceMeta.builder(id1.getName()) - .setScope(scope1) - .build(); - WorkspaceMeta meta2 = WorkspaceMeta.builder(id2.getName()) - .setScope(scope2) - .build(); - - run(ws -> ws.writeWorkspaceMeta(new NamespacedId(namespace, id1.getId()), meta1)); - run(ws -> ws.writeWorkspaceMeta(new NamespacedId(namespace, id2.getId()), meta2)); - - Assert.assertEquals(Collections.singletonList(id1), call(ws -> ws.listWorkspaces(namespace, scope1))); - Assert.assertEquals(Collections.singletonList(id2), call(ws -> ws.listWorkspaces(namespace, scope2))); - - run(ws -> ws.deleteScope(namespace, scope1)); - - Assert.assertTrue(call(ws -> ws.listWorkspaces(namespace, scope1).isEmpty())); - Assert.assertEquals(Collections.singletonList(id2), call(ws -> ws.listWorkspaces(namespace, scope2))); - - run(ws -> ws.deleteWorkspace(new NamespacedId(namespace, id2.getId()))); - Assert.assertTrue(call(ws -> ws.listWorkspaces(namespace, scope1).isEmpty())); - Assert.assertTrue(call(ws -> ws.listWorkspaces(namespace, scope2).isEmpty())); - } - - @Test - public void testNamespaceIsolation() { - Namespace ns1 = new Namespace("n1", 10L); - Namespace ns2 = new Namespace("n2", 10L); - - // test writes in different namespaces don't conflict with each other - WorkspaceMeta meta1 = WorkspaceMeta.builder("name1") - .setType(DataType.BINARY) - .setProperties(Collections.singletonMap("k1", "v1")) - .build(); - NamespacedId id1 = call(ws -> ws.createWorkspace(ns1, meta1)); - WorkspaceMeta meta2 = WorkspaceMeta.builder("name2") - .setType(DataType.BINARY) - .setProperties(Collections.singletonMap("k2", "v2")) - .build(); - NamespacedId id2 = call(ws -> ws.createWorkspace(ns2, meta2)); - - Workspace actual1 = call(ws -> ws.getWorkspace(id1)); - Workspace expected1 = Workspace.builder(id1, meta1.getName()) - .setCreated(actual1.getCreated()) - .setUpdated(actual1.getUpdated()) - .setScope(meta1.getScope()) - .setType(meta1.getType()) - .setProperties(meta1.getProperties()) - .build(); - Assert.assertEquals(expected1, actual1); - - Workspace actual2 = call(ws -> ws.getWorkspace(id2)); - Workspace expected2 = Workspace.builder(id2, meta2.getName()) - .setCreated(actual2.getCreated()) - .setUpdated(actual2.getUpdated()) - .setScope(meta2.getScope()) - .setType(meta2.getType()) - .setProperties(meta2.getProperties()) - .build(); - Assert.assertEquals(expected2, actual2); - - // test lists don't include from other namespaces - Assert.assertEquals(Collections.singletonList(new WorkspaceIdentifier(id1.getId(), meta1.getName())), - call(ws -> ws.listWorkspaces(id1.getNamespace(), WorkspaceDataset.DEFAULT_SCOPE))); - Assert.assertEquals(Collections.singletonList(new WorkspaceIdentifier(id2.getId(), meta2.getName())), - call(ws -> ws.listWorkspaces(id2.getNamespace(), WorkspaceDataset.DEFAULT_SCOPE))); - - // test delete is within the correct namespace - run(ws -> ws.deleteWorkspace(id2)); - - Assert.assertEquals(Collections.singletonList(new WorkspaceIdentifier(id1.getId(), meta1.getName())), - call(ws -> ws.listWorkspaces(id1.getNamespace(), WorkspaceDataset.DEFAULT_SCOPE))); - Assert.assertTrue(call(ws -> ws.listWorkspaces(id2.getNamespace(), WorkspaceDataset.DEFAULT_SCOPE).isEmpty())); - Assert.assertEquals(expected1, call(ws -> ws.getWorkspace(id1))); - } - - @Test - public void testNamespaceGenerations() { - Namespace nsGen1 = new Namespace("ns1", 1L); - Namespace nsGen2 = new Namespace("ns1", 2L); - - // test creation in different namespaces - WorkspaceMeta meta1 = WorkspaceMeta.builder("name1") - .setType(DataType.BINARY) - .setProperties(Collections.singletonMap("k1", "v1")) - .build(); - NamespacedId id1 = call(ws -> ws.createWorkspace(nsGen1, meta1)); - - // test that fetching with a different generation doesn't include the connection - try { - run(ws -> ws.getWorkspace(new NamespacedId(nsGen2, id1.getId()))); - Assert.fail("workspace with a different generation should not be visible."); - } catch (WorkspaceNotFoundException e) { - // expected - } - - // test that listing with a different generation doesn't include the connection - Assert.assertTrue(call(ws -> ws.listWorkspaces(nsGen2, WorkspaceDataset.DEFAULT_SCOPE)).isEmpty()); - } - - @Test - public void testCRUD() { - Namespace ns = new Namespace("c0", 10L); - Assert.assertTrue(call(ws -> ws.listWorkspaces(ns, "default").isEmpty())); - - // test write and get - WorkspaceMeta meta1 = WorkspaceMeta.builder("name") - .setScope("default") - .setType(DataType.BINARY) - .setProperties(Collections.singletonMap("k1", "v1")) - .build(); - NamespacedId id = call(ws -> ws.createWorkspace(ns, meta1)); - WorkspaceIdentifier workspaceId = new WorkspaceIdentifier(id.getId(), meta1.getName()); - - Workspace actual = call(ws -> ws.getWorkspace(id)); - Workspace expected = Workspace.builder(id, meta1.getName()) - .setCreated(actual.getCreated()) - .setUpdated(actual.getUpdated()) - .setType(meta1.getType()) - .setScope(meta1.getScope()) - .setProperties(meta1.getProperties()) - .build(); - Assert.assertEquals(expected, actual); - Assert.assertEquals(Collections.singletonList(workspaceId), call(ws -> ws.listWorkspaces(ns, "default"))); - - // test updating properties - Map properties = Collections.singletonMap("k2", "v2"); - run(ws -> ws.updateWorkspaceProperties(id, properties)); - actual = call(ws -> ws.getWorkspace(id)); - expected = Workspace.builder(expected) - .setUpdated(actual.getUpdated()) - .setProperties(properties) - .build(); - Assert.assertEquals(expected, actual); - - // test updating request - io.cdap.wrangler.proto.Workspace requestWorkspace = new io.cdap.wrangler.proto.Workspace(meta1.getName(), 10); - Recipe recipe = new Recipe(Collections.singletonList("parse-as-csv body"), true, "recipeName"); - Sampling sampling = new Sampling("random", 0, 10); - Request request = new RequestV1(requestWorkspace, recipe, sampling, new JsonObject()); - run(ws -> ws.updateWorkspaceRequest(id, request)); - actual = call(ws -> ws.getWorkspace(id)); - expected = Workspace.builder(expected) - .setUpdated(actual.getUpdated()) - .setRequest(request) - .build(); - Assert.assertEquals(expected, actual); - - // test updating data - byte[] data = new byte[]{0, 1, 2}; - run(ws -> ws.updateWorkspaceData(id, DataType.RECORDS, data)); - actual = call(ws -> ws.getWorkspace(id)); - expected = Workspace.builder(expected) - .setType(DataType.RECORDS) - .setUpdated(actual.getUpdated()) - .setData(data) - .build(); - Assert.assertEquals(expected, actual); - - // test updating meta - WorkspaceMeta meta2 = WorkspaceMeta.builder(meta1.getName()) - .setType(DataType.TEXT) - .setProperties(Collections.singletonMap("k3", "v3")) - .build(); - run(ws -> ws.writeWorkspaceMeta(id, meta2)); - actual = call(ws -> ws.getWorkspace(id)); - expected = Workspace.builder(expected) - .setUpdated(actual.getUpdated()) - .setProperties(meta2.getProperties()) - .setType(meta2.getType()) - .build(); - Assert.assertEquals(expected, actual); - Assert.assertEquals(Collections.singletonList(workspaceId), call(ws -> ws.listWorkspaces(ns, "default"))); - - // delete workspace - run(ws -> ws.deleteWorkspace(id)); - Assert.assertTrue(call(ws -> ws.listWorkspaces(ns, "default").isEmpty())); - try { - call(ws -> ws.getWorkspace(id)); - Assert.fail("Workspace was not deleted."); - } catch (WorkspaceNotFoundException e) { - // expected - } - } - - private T call(WorkspaceCallable callable) { - return TransactionRunners.run(getTransactionRunner(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - return callable.run(ws); - }, WorkspaceNotFoundException.class); - } - - private void run(WorkspaceRunnable runnable) { - TransactionRunners.run(getTransactionRunner(), context -> { - WorkspaceDataset ws = WorkspaceDataset.get(context); - runnable.run(ws); - }, WorkspaceNotFoundException.class); - } - - private interface WorkspaceRunnable { - void run(WorkspaceDataset ws) throws Exception; - } - - private interface WorkspaceCallable { - T run(WorkspaceDataset ws) throws Exception; - } -} diff --git a/wrangler-storage/src/test/java/io/cdap/wrangler/store/recipe/RecipeStoreTest.java b/wrangler-storage/src/test/java/io/cdap/wrangler/store/recipe/RecipeStoreTest.java deleted file mode 100644 index c20e6fcd0..000000000 --- a/wrangler-storage/src/test/java/io/cdap/wrangler/store/recipe/RecipeStoreTest.java +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Copyright © 2022 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.store.recipe; - -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.test.SystemAppTestBase; -import io.cdap.wrangler.dataset.recipe.RecipeAlreadyExistsException; -import io.cdap.wrangler.dataset.recipe.RecipeNotFoundException; -import io.cdap.wrangler.dataset.recipe.RecipePageRequest; -import io.cdap.wrangler.dataset.recipe.RecipeRow; -import io.cdap.wrangler.proto.recipe.v2.Recipe; -import io.cdap.wrangler.proto.recipe.v2.RecipeId; -import io.cdap.wrangler.proto.recipe.v2.RecipeListResponse; -import org.junit.After; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.util.List; - -import static io.cdap.wrangler.dataset.recipe.RecipePageRequest.SORT_BY_UPDATE_TIME; -import static io.cdap.wrangler.dataset.utils.PageRequest.SORT_ORDER_DESC; -import static io.cdap.wrangler.store.recipe.RecipeStore.RECIPE_TABLE_SPEC; - -public class RecipeStoreTest extends SystemAppTestBase { - private static RecipeStore store; - - @BeforeClass - public static void setupTest() throws Exception { - getStructuredTableAdmin().createOrUpdate(RECIPE_TABLE_SPEC); - store = new RecipeStore(getTransactionRunner()); - } - - @After - public void cleanupTest() { - store.clear(); - } - - @Test - public void testSaveAndGetNewRecipe() { - NamespaceSummary summary = new NamespaceSummary("n1", "", 10L); - RecipeId recipeId = RecipeId.builder(summary).build(); - ImmutableList directives = ImmutableList.of("dir1", "dir2"); - Recipe recipe = Recipe.builder(recipeId) - .setRecipeName("dummy name") - .setDescription("dummy description") - .setCreatedTimeMillis(100L) - .setUpdatedTimeMillis(100L) - .setDirectives(directives) - .build(); - RecipeRow recipeRow = RecipeRow.builder(recipe).build(); - store.createRecipe(recipeId, recipeRow); - - // Testing get recipe by ID - Recipe savedRecipeRow = store.getRecipeById(recipeId); - Assert.assertEquals(recipeRow.getRecipe(), savedRecipeRow); - - // Testing get recipe by name - Recipe savedRecipeRowByName = store.getRecipeByName(summary, "dummy name"); - Assert.assertEquals(recipeRow.getRecipe(), savedRecipeRowByName); - } - - @Test(expected = RecipeAlreadyExistsException.class) - public void testSaveRecipeWithDuplicateName() { - NamespaceSummary summary = new NamespaceSummary("n1", "", 10L); - RecipeId recipeId = RecipeId.builder(summary).build(); - RecipeRow recipeRow = RecipeRow.builder( - Recipe.builder(recipeId).setRecipeName("duplicate name").build()).build(); - store.createRecipe(recipeId, recipeRow); - - RecipeId newRecipeId = RecipeId.builder(summary).build(); - RecipeRow newRecipeRow = RecipeRow.builder( - Recipe.builder(newRecipeId).setRecipeName("duplicate name").build()).build(); - store.createRecipe(newRecipeId, newRecipeRow); - } - - @Test(expected = RecipeNotFoundException.class) - public void testGetRecipeDoesNotExist() { - NamespaceSummary summary = new NamespaceSummary("n100", "", 40L); - RecipeId recipeId = RecipeId.builder(summary).setRecipeId("non-existent-recipe-id").build(); - store.getRecipeById(recipeId); - } - - @Test(expected = RecipeNotFoundException.class) - public void testGetRecipeByNameDoesNotExist() { - NamespaceSummary summary = new NamespaceSummary("n100", "", 40L); - store.getRecipeByName(summary, "non-existent-recipe-name"); - } - - - @Test - public void testListRecipesDefault() { - NamespaceSummary summary = new NamespaceSummary("n1", "", 10L); - RecipeId recipeId1 = RecipeId.builder(summary).build(); - RecipeId recipeId2 = RecipeId.builder(summary).build(); - RecipeRow recipeRow1 = RecipeRow.builder(Recipe.builder(recipeId1).setRecipeName("xyz").build()).build(); - RecipeRow recipeRow2 = RecipeRow.builder(Recipe.builder(recipeId2).setRecipeName("abc").build()).build(); - - store.createRecipe(recipeId1, recipeRow1); - store.createRecipe(recipeId2, recipeRow2); - - // Assuming default values for query parameters - RecipePageRequest pageRequest = RecipePageRequest.builder(summary).build(); - RecipeListResponse response = store.listRecipes(pageRequest); - List values = (List) response.getValues(); - - // Check whether values are sorted in alphabetical order by recipeName - Assert.assertEquals(2, (int) response.getCount()); - Assert.assertEquals(values.get(0), recipeRow2.getRecipe()); - Assert.assertEquals(values.get(1), recipeRow1.getRecipe()); - } - - @Test - public void testListRecipesSortByUpdated() { - NamespaceSummary summary = new NamespaceSummary("n1", "", 10L); - RecipeId recipeId1 = RecipeId.builder(summary).build(); - RecipeId recipeId2 = RecipeId.builder(summary).build(); - RecipeRow recipeRow1 = RecipeRow.builder( - Recipe.builder(recipeId1).setRecipeName("first").setUpdatedTimeMillis(100L).build()).build(); - RecipeRow recipeRow2 = RecipeRow.builder( - Recipe.builder(recipeId2).setRecipeName("second").setUpdatedTimeMillis(200L).build()).build(); - - store.createRecipe(recipeId1, recipeRow1); - store.createRecipe(recipeId2, recipeRow2); - - RecipePageRequest pageRequest = RecipePageRequest.builder(summary) - .setSortBy(SORT_BY_UPDATE_TIME) - .setSortOrder(SORT_ORDER_DESC) - .build(); - RecipeListResponse response = store.listRecipes(pageRequest); - List values = (List) response.getValues(); - - // Check whether values are sorted in descending order by updatedTime - Assert.assertEquals(2, (int) response.getCount()); - Assert.assertEquals(values.get(0), recipeRow2.getRecipe()); - Assert.assertEquals(values.get(1), recipeRow1.getRecipe()); - } - - @Test - public void testListRecipesPagination() { - NamespaceSummary summary = new NamespaceSummary("n1", "", 10L); - RecipeId recipeId1 = RecipeId.builder(summary).build(); - RecipeId recipeId2 = RecipeId.builder(summary).build(); - RecipeId recipeId3 = RecipeId.builder(summary).build(); - RecipeRow recipeRow1 = RecipeRow.builder(Recipe.builder(recipeId1).setRecipeName("recipe 1").build()).build(); - RecipeRow recipeRow2 = RecipeRow.builder(Recipe.builder(recipeId2).setRecipeName("recipe 2").build()).build(); - RecipeRow recipeRow3 = RecipeRow.builder(Recipe.builder(recipeId3).setRecipeName("recipe 3").build()).build(); - - store.createRecipe(recipeId1, recipeRow1); - store.createRecipe(recipeId2, recipeRow2); - store.createRecipe(recipeId3, recipeRow3); - - RecipePageRequest pageRequest1 = RecipePageRequest.builder(summary).setPageSize(2).build(); - RecipeListResponse page1 = store.listRecipes(pageRequest1); - List values = (List) page1.getValues(); - - Assert.assertEquals(2, (int) page1.getCount()); - Assert.assertEquals(values.get(0), recipeRow1.getRecipe()); - Assert.assertEquals(values.get(1), recipeRow2.getRecipe()); - Assert.assertEquals(page1.getNextPageToken(), recipeRow3.getRecipe().getRecipeName()); - - // Fetching the next page - RecipePageRequest pageRequest2 = RecipePageRequest.builder(summary).setPageToken(page1.getNextPageToken()).build(); - RecipeListResponse page2 = store.listRecipes(pageRequest2); - values = (List) page2.getValues(); - - Assert.assertEquals(1, (int) page2.getCount()); - Assert.assertEquals(values.get(0), recipeRow3.getRecipe()); - Assert.assertEquals(page2.getNextPageToken(), ""); - } - - @Test(expected = RecipeNotFoundException.class) - public void testDeleteRecipe() { - NamespaceSummary summary = new NamespaceSummary("n1", "", 10L); - RecipeId recipeId = RecipeId.builder(summary).build(); - RecipeRow recipeRow = RecipeRow.builder(Recipe.builder(recipeId).setRecipeName("deleted").build()).build(); - store.createRecipe(recipeId, recipeRow); - - store.deleteRecipe(recipeId); - store.getRecipeById(recipeId); - } - - @Test(expected = RecipeNotFoundException.class) - public void testDeleteRecipeDoesNotExist() { - NamespaceSummary summary = new NamespaceSummary("n100", "", 40L); - RecipeId recipeId = RecipeId.builder(summary).setRecipeId("non-existent-recipe-id").build(); - store.deleteRecipe(recipeId); - } - - @Test - public void testSaveUpdateRecipe() { - NamespaceSummary summary = new NamespaceSummary("n1", "", 10L); - RecipeId recipeId = RecipeId.builder(summary).build(); - Recipe recipe = Recipe.builder(recipeId) - .setRecipeName("name-before-edit") - .setDescription("description-before-edit") - .setCreatedTimeMillis(100L) - .setUpdatedTimeMillis(100L) - .setDirectives(ImmutableList.of("dir1", "dir2")) - .setRecipeStepsCount(2) - .build(); - store.createRecipe(recipeId, RecipeRow.builder(recipe).build()); - - Recipe updateRecipe = Recipe.builder(recipeId) - .setRecipeName("name-after-edit") - .setDescription("description-after-edit") - .setCreatedTimeMillis(100L) - .setUpdatedTimeMillis(100L) - .setDirectives(ImmutableList.of("dir1", "dir2", "dir3")) - .setRecipeStepsCount(3) - .build(); - store.updateRecipe(recipeId, RecipeRow.builder(updateRecipe).build()); - - Recipe newRecipe = store.getRecipeById(recipeId); - Assert.assertEquals(recipeId, newRecipe.getRecipeId()); - Assert.assertEquals("name-after-edit", newRecipe.getRecipeName()); - Assert.assertEquals("description-after-edit", newRecipe.getDescription()); - Assert.assertEquals(ImmutableList.of("dir1", "dir2", "dir3"), newRecipe.getDirectives()); - Assert.assertEquals(3, newRecipe.getRecipeStepsCount()); - } - - @Test - public void testUpdateWithoutNameChange() { - NamespaceSummary summary = new NamespaceSummary("n1", "", 10L); - RecipeId recipeId = RecipeId.builder(summary).build(); - Recipe recipe = Recipe.builder(recipeId) - .setRecipeName("name-before-edit") - .setDescription("description-before-edit") - .setCreatedTimeMillis(100L) - .setUpdatedTimeMillis(100L) - .setDirectives(ImmutableList.of("dir1", "dir2")) - .setRecipeStepsCount(2) - .build(); - store.createRecipe(recipeId, RecipeRow.builder(recipe).build()); - - Recipe updateRecipe = Recipe.builder(recipeId) - .setRecipeName("name-before-edit") - .setDescription("description-after-edit") - .setCreatedTimeMillis(100L) - .setUpdatedTimeMillis(100L) - .setDirectives(ImmutableList.of("dir1", "dir2", "dir3")) - .setRecipeStepsCount(3) - .build(); - store.updateRecipe(recipeId, RecipeRow.builder(updateRecipe).build()); - - Recipe newRecipe = store.getRecipeById(recipeId); - Assert.assertEquals(recipeId, newRecipe.getRecipeId()); - Assert.assertEquals("name-before-edit", newRecipe.getRecipeName()); - Assert.assertEquals("description-after-edit", newRecipe.getDescription()); - Assert.assertEquals(ImmutableList.of("dir1", "dir2", "dir3"), newRecipe.getDirectives()); - Assert.assertEquals(3, newRecipe.getRecipeStepsCount()); - } - - @Test(expected = RecipeAlreadyExistsException.class) - public void testUpdateNameToExistingRecipeName() { - NamespaceSummary summary = new NamespaceSummary("n1", "", 10L); - RecipeId recipeId = RecipeId.builder(summary).build(); - Recipe recipe = Recipe.builder(recipeId) - .setRecipeName("name-to-edit") - .setDescription("description") - .setCreatedTimeMillis(100L) - .setUpdatedTimeMillis(100L) - .setDirectives(ImmutableList.of("dir1", "dir2")) - .setRecipeStepsCount(2) - .build(); - store.createRecipe(recipeId, RecipeRow.builder(recipe).build()); - - RecipeId existing = RecipeId.builder(summary).build(); - Recipe existingRecipe = Recipe.builder(existing) - .setRecipeName("existing-name") - .setDescription("description") - .setCreatedTimeMillis(100L) - .setUpdatedTimeMillis(100L) - .setDirectives(ImmutableList.of("dir1", "dir2")) - .setRecipeStepsCount(2) - .build(); - store.createRecipe(existing, RecipeRow.builder(existingRecipe).build()); - - Recipe updateRecipe = Recipe.builder(recipeId) - .setRecipeName("existing-name") - .setDescription("description") - .setCreatedTimeMillis(100L) - .setUpdatedTimeMillis(100L) - .setDirectives(ImmutableList.of("dir1", "dir2")) - .setRecipeStepsCount(2) - .build(); - store.updateRecipe(recipeId, RecipeRow.builder(updateRecipe).build()); - } -} diff --git a/wrangler-storage/src/test/java/io/cdap/wrangler/store/upgrade/UpgradeStoreTest.java b/wrangler-storage/src/test/java/io/cdap/wrangler/store/upgrade/UpgradeStoreTest.java deleted file mode 100644 index 69eb31270..000000000 --- a/wrangler-storage/src/test/java/io/cdap/wrangler/store/upgrade/UpgradeStoreTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.store.upgrade; - -import com.google.common.collect.ImmutableList; -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.common.utils.Tasks; -import io.cdap.cdap.test.SystemAppTestBase; -import org.junit.After; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.util.List; -import java.util.concurrent.TimeUnit; - -/** - * Upgrade store test - */ -public class UpgradeStoreTest extends SystemAppTestBase { - private static UpgradeStore store; - - @BeforeClass - public static void setupTest() throws Exception { - getStructuredTableAdmin().create(UpgradeStore.UPGRADE_TABLE_SPEC); - store = new UpgradeStore(getTransactionRunner()); - } - - @After - public void cleanupTest() throws Exception { - store.clear(); - } - - @Test - public void testUpgradeTimestampDoesNotChange() throws Exception { - long tsNow = System.currentTimeMillis(); - long upgradeTs = store.initializeAndRetrieveUpgradeTimestampMillis( - UpgradeEntityType.CONNECTION, tsNow, new UpgradeState(0L)); - Assert.assertTrue(upgradeTs > 0); - // wait for time to pass at least 1 milli second - Tasks.waitFor(true, () -> System.currentTimeMillis() > upgradeTs, 5, TimeUnit.MILLISECONDS); - long actual = store.initializeAndRetrieveUpgradeTimestampMillis( - UpgradeEntityType.CONNECTION, System.currentTimeMillis(), new UpgradeState(1L)); - Assert.assertEquals(upgradeTs, actual); - Assert.assertEquals(new UpgradeState(0L), store.getEntityUpgradeState(UpgradeEntityType.CONNECTION)); - } - - @Test - public void testUpgradeStore() throws Exception { - List namespaces = ImmutableList.of( - new NamespaceSummary("default", "", 0L), - new NamespaceSummary("test1", "", 1L), - new NamespaceSummary("test2", "", 0L), - new NamespaceSummary("test3", "", 5L)); - - Assert.assertNull(store.getEntityUpgradeState(UpgradeEntityType.CONNECTION)); - Assert.assertNull(store.getEntityUpgradeState(UpgradeEntityType.WORKSPACE)); - - UpgradeState preUpgrade = new UpgradeState(0L); - store.initializeAndRetrieveUpgradeTimestampMillis(UpgradeEntityType.CONNECTION, - System.currentTimeMillis(), preUpgrade); - store.initializeAndRetrieveUpgradeTimestampMillis(UpgradeEntityType.WORKSPACE, - System.currentTimeMillis(), preUpgrade); - Assert.assertEquals(preUpgrade, store.getEntityUpgradeState(UpgradeEntityType.CONNECTION)); - Assert.assertEquals(preUpgrade, store.getEntityUpgradeState(UpgradeEntityType.WORKSPACE)); - - UpgradeState upgraded = new UpgradeState(1L); - - // assert connection upgrade completion - namespaces.forEach(ns -> { - store.setEntityUpgradeState(ns, UpgradeEntityType.CONNECTION, upgraded); - Assert.assertEquals(upgraded, store.getEntityUpgradeState(ns, UpgradeEntityType.CONNECTION)); - Assert.assertEquals(preUpgrade, store.getEntityUpgradeState(UpgradeEntityType.CONNECTION)); - Assert.assertEquals(preUpgrade, store.getEntityUpgradeState(UpgradeEntityType.WORKSPACE)); - }); - - // connection upgrade is done - store.setEntityUpgradeState(UpgradeEntityType.CONNECTION, upgraded); - Assert.assertEquals(upgraded, store.getEntityUpgradeState(UpgradeEntityType.CONNECTION)); - Assert.assertEquals(preUpgrade, store.getEntityUpgradeState(UpgradeEntityType.WORKSPACE)); - - // assert workspace upgrade completion - namespaces.forEach(ns -> { - store.setEntityUpgradeState(ns, UpgradeEntityType.WORKSPACE, upgraded); - Assert.assertEquals(upgraded, store.getEntityUpgradeState(ns, UpgradeEntityType.WORKSPACE)); - Assert.assertEquals(preUpgrade, store.getEntityUpgradeState(UpgradeEntityType.WORKSPACE)); - Assert.assertEquals(upgraded, store.getEntityUpgradeState(UpgradeEntityType.CONNECTION)); - }); - - // workspace upgrade is done - store.setEntityUpgradeState(UpgradeEntityType.WORKSPACE, upgraded); - - // upgrade is done - Assert.assertEquals(upgraded, store.getEntityUpgradeState(UpgradeEntityType.CONNECTION)); - Assert.assertEquals(upgraded, store.getEntityUpgradeState(UpgradeEntityType.WORKSPACE)); - } -} diff --git a/wrangler-storage/src/test/java/io/cdap/wrangler/store/workspace/WorkspaceStoreTest.java b/wrangler-storage/src/test/java/io/cdap/wrangler/store/workspace/WorkspaceStoreTest.java deleted file mode 100644 index c3c3aaabc..000000000 --- a/wrangler-storage/src/test/java/io/cdap/wrangler/store/workspace/WorkspaceStoreTest.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright © 2021 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - * - */ - -package io.cdap.wrangler.store.workspace; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; -import io.cdap.cdap.api.NamespaceSummary; -import io.cdap.cdap.test.SystemAppTestBase; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.dataset.workspace.WorkspaceNotFoundException; -import io.cdap.wrangler.proto.workspace.v2.SampleSpec; -import io.cdap.wrangler.proto.workspace.v2.Workspace; -import io.cdap.wrangler.proto.workspace.v2.WorkspaceDetail; -import io.cdap.wrangler.proto.workspace.v2.WorkspaceId; -import org.junit.After; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.io.IOException; -import java.util.Collections; -import java.util.HashSet; - -public class WorkspaceStoreTest extends SystemAppTestBase { - private static WorkspaceStore store; - - @BeforeClass - public static void setupTest() throws Exception { - getStructuredTableAdmin().create(WorkspaceStore.WORKSPACE_TABLE_SPEC); - store = new WorkspaceStore(getTransactionRunner()); - } - - @After - public void cleanupTest() throws Exception { - store.clear(); - } - - @Test - public void testNotFoundExceptions() throws Exception { - WorkspaceId workspace = new WorkspaceId(new NamespaceSummary("default", "", 10L), "workspace"); - try { - store.getWorkspace(workspace); - Assert.fail(); - } catch (WorkspaceNotFoundException e) { - // expected - } - - try { - store.updateWorkspace(workspace, Workspace.builder("dummy", workspace.getWorkspaceId()).build()); - Assert.fail(); - } catch (WorkspaceNotFoundException e) { - // expected - } - - try { - store.deleteWorkspace(workspace); - Assert.fail(); - } catch (WorkspaceNotFoundException e) { - // expected - } - } - - @Test - public void testCRUD() throws IOException { - NamespaceSummary ns1 = new NamespaceSummary("n1", "", 10L); - NamespaceSummary ns2 = new NamespaceSummary("n2", "", 10L); - SampleSpec dummySpec = new SampleSpec("conn", "dummy", "/tmp", ImmutableSet.of()); - - // test writes - WorkspaceId id1 = new WorkspaceId(ns1); - Workspace meta1 = Workspace.builder("name1", id1.getWorkspaceId()) - .setSampleSpec(dummySpec) - .setCreatedTimeMillis(100L) - .setUpdatedTimeMillis(100L) - .build(); - WorkspaceDetail detail1 = new WorkspaceDetail(meta1, - Collections.singletonList(new Row(ImmutableList.of("k1", "k2")))); - store.saveWorkspace(id1, detail1); - - WorkspaceId id2 = new WorkspaceId(ns2); - Workspace meta2 = Workspace.builder("name2", id2.getWorkspaceId()) - .setSampleSpec(dummySpec) - .setCreatedTimeMillis(200L) - .setUpdatedTimeMillis(400L) - .build(); - WorkspaceDetail detail2 = new WorkspaceDetail(meta2, - Collections.singletonList(new Row(ImmutableList.of("k3", "k4")))); - store.saveWorkspace(id2, detail2); - - Assert.assertEquals(meta1, store.getWorkspace(id1)); - Assert.assertEquals(meta2, store.getWorkspace(id2)); - Assert.assertEquals(detail1, store.getWorkspaceDetail(id1)); - Assert.assertEquals(detail2, store.getWorkspaceDetail(id2)); - - // test update - meta1 = Workspace.builder("newname1", id1.getWorkspaceId()) - .setSampleSpec(dummySpec) - .setCreatedTimeMillis(200L) - .setUpdatedTimeMillis(300L) - .setDirectives(ImmutableList.of("d1", "d2", "d3")) - .build(); - detail1 = new WorkspaceDetail(meta1, Collections.singletonList(new Row(ImmutableList.of("k5", "k6")))); - store.saveWorkspace(id1, detail1); - - // creation time should not change - Workspace expected = Workspace.builder(meta1).setCreatedTimeMillis(100L).build(); - Assert.assertEquals(expected, store.getWorkspace(id1)); - Assert.assertEquals(new WorkspaceDetail(expected, detail1.getSample()), store.getWorkspaceDetail(id1)); - - // test update doesn't modify sample - meta1 = Workspace.builder("newname2", id1.getWorkspaceId()) - .setSampleSpec(dummySpec) - .setCreatedTimeMillis(300L) - .setUpdatedTimeMillis(400L) - .setDirectives(ImmutableList.of("d1", "d2", "d3", "d4")) - .build(); - store.updateWorkspace(id1, meta1); - expected = Workspace.builder(meta1).setCreatedTimeMillis(100L).build(); - Assert.assertEquals(expected, store.getWorkspace(id1)); - Assert.assertEquals(detail1.getSample(), store.getWorkspaceDetail(id1).getSample()); - Assert.assertEquals(new WorkspaceDetail(expected, detail1.getSample()), store.getWorkspaceDetail(id1)); - - // test lists don't include from other namespaces - Assert.assertEquals(Collections.singletonList(meta1), store.listWorkspaces(ns1)); - Assert.assertEquals(Collections.singletonList(meta2), store.listWorkspaces(ns2)); - - // add new one to ns1 - WorkspaceId id3 = new WorkspaceId(ns1); - Workspace meta3 = Workspace.builder("name3", id3.getWorkspaceId()) - .setSampleSpec(dummySpec) - .setCreatedTimeMillis(2000L) - .setUpdatedTimeMillis(4000L) - .build(); - WorkspaceDetail detail3 = new WorkspaceDetail(meta3, - Collections.singletonList(new Row(ImmutableList.of("k7", "k8")))); - store.saveWorkspace(id3, detail3); - // order can be different because of different id - Assert.assertEquals(ImmutableSet.of(expected, meta3), new HashSet<>(store.listWorkspaces(ns1))); - - // test delete is within the correct namespace - store.deleteWorkspace(id2); - Assert.assertTrue(store.listWorkspaces(ns2).isEmpty()); - - Assert.assertEquals(ImmutableSet.of(expected, meta3), new HashSet<>(store.listWorkspaces(ns1))); - Assert.assertEquals(meta1, store.getWorkspace(id1)); - Assert.assertEquals(meta3, store.getWorkspace(id3)); - } - - @Test - public void testNamespaceGenerations() { - NamespaceSummary nsGen1 = new NamespaceSummary("ns1", "", 1L); - NamespaceSummary nsGen2 = new NamespaceSummary("ns1", "", 2L); - - WorkspaceId id1 = new WorkspaceId(nsGen1); - WorkspaceId id2 = new WorkspaceId(nsGen2, id1.getWorkspaceId()); - - // test creation in different namespaces - Workspace meta1 = Workspace.builder("name1", id1.getWorkspaceId()) - .setCreatedTimeMillis(0L) - .setUpdatedTimeMillis(0L) - .build(); - store.saveWorkspace(id1, new WorkspaceDetail(meta1, Collections.emptyList())); - - // test that fetching with a different generation doesn't include the workspace - try { - store.getWorkspace(id2); - Assert.fail(); - } catch (WorkspaceNotFoundException e) { - // expected - } - - // test that listing with a different generation doesn't include the workspace - Assert.assertTrue(store.listWorkspaces(nsGen2).isEmpty()); - } -} diff --git a/wrangler-test/pom.xml b/wrangler-test/pom.xml deleted file mode 100644 index 5e4878d86..000000000 --- a/wrangler-test/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - wrangler - io.cdap.wrangler - 4.12.0-SNAPSHOT - - 4.0.0 - - wrangler-test - Wrangler Testing Framework - - - - io.cdap.wrangler - wrangler-core - ${project.version} - - - io.cdap.cdap - cdap-api - ${cdap.version} - provided - - - io.cdap.cdap - cdap-etl-api - ${cdap.version} - provided - - - - - diff --git a/wrangler-test/src/main/java/io/cdap/wrangler/test/TestingRig.java b/wrangler-test/src/main/java/io/cdap/wrangler/test/TestingRig.java deleted file mode 100644 index da108cf1b..000000000 --- a/wrangler-test/src/main/java/io/cdap/wrangler/test/TestingRig.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.test; - -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveLoadException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.RecipeParser; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.executor.RecipePipelineExecutor; -import io.cdap.wrangler.parser.GrammarBasedParser; -import io.cdap.wrangler.parser.MigrateToV2; -import io.cdap.wrangler.proto.Contexts; -import io.cdap.wrangler.registry.CompositeDirectiveRegistry; -import io.cdap.wrangler.registry.SystemDirectiveRegistry; -import io.cdap.wrangler.test.api.TestRecipe; - -import java.util.ArrayList; -import java.util.List; - -/** - * Utilities for testing. - */ -public final class TestingRig { - - private TestingRig() { - // Avoid creation of this object. - } - - public static RecipePipeline pipeline(Class directive, TestRecipe recipe) - throws RecipeException, DirectiveParseException, DirectiveLoadException { - verify(directive); - List packages = new ArrayList<>(); - packages.add(directive.getPackage().getName()); - CompositeDirectiveRegistry registry = new CompositeDirectiveRegistry( - new SystemDirectiveRegistry(packages) - ); - - String migrate = new MigrateToV2(recipe.toArray()).migrate(); - RecipeParser parser = new GrammarBasedParser(Contexts.SYSTEM, migrate, registry); - return new RecipePipelineExecutor(parser, null); - } - - public static RecipeParser parser(Class directive, String[] recipe) - throws DirectiveParseException, DirectiveLoadException { - verify(directive); - List packages = new ArrayList<>(); - packages.add(directive.getCanonicalName()); - CompositeDirectiveRegistry registry = new CompositeDirectiveRegistry( - SystemDirectiveRegistry.INSTANCE - ); - - String migrate = new MigrateToV2(recipe).migrate(); - return new GrammarBasedParser(Contexts.SYSTEM, migrate, registry); - } - - private static void verify(Class directive) { - String classz = directive.getCanonicalName(); - Plugin plugin = directive.getAnnotation(Plugin.class); - if (plugin == null || !plugin.type().equalsIgnoreCase(Directive.TYPE)) { - throw new IllegalArgumentException( - String.format("Class '%s' @Plugin annotation is not of type '%s', Set it as @Plugin(type=UDD.Type)", - classz, Directive.TYPE) - ); - } - - Name name = directive.getAnnotation(Name.class); - if (name == null) { - throw new IllegalArgumentException( - String.format("Class '%s' is missing @Name annotation. E.g. @Name(\"directive-name\")", classz) - ); - } - - Description description = directive.getAnnotation(Description.class); - if (description == null) { - throw new IllegalArgumentException( - String.format("Class '%s' is missing @Description annotation. " + - "E.g. @Description(\"this is what my directive does\")", classz) - ); - } - } - -} diff --git a/wrangler-test/src/main/java/io/cdap/wrangler/test/api/TestRecipe.java b/wrangler-test/src/main/java/io/cdap/wrangler/test/api/TestRecipe.java deleted file mode 100644 index ab5d42698..000000000 --- a/wrangler-test/src/main/java/io/cdap/wrangler/test/api/TestRecipe.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.test.api; - -import java.util.ArrayList; -import java.util.List; - -/** - * Class description here. - */ -public final class TestRecipe { - private final List directives; - - public TestRecipe() { - this.directives = new ArrayList<>(); - } - - public void add(String directive) { - directives.add(directive); - } - - public List toList() { - return directives; - } - - public String[] toArray() { - String[] array = new String[directives.size()]; - array = directives.toArray(array); - return array; - } -} diff --git a/wrangler-test/src/main/java/io/cdap/wrangler/test/api/TestRows.java b/wrangler-test/src/main/java/io/cdap/wrangler/test/api/TestRows.java deleted file mode 100644 index 1a08ff9ab..000000000 --- a/wrangler-test/src/main/java/io/cdap/wrangler/test/api/TestRows.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler.test.api; - -import io.cdap.wrangler.api.Row; - -import java.util.ArrayList; -import java.util.List; - -/** - * A simple class for collecting rows to be used for testing wrangler directives. - */ -public class TestRows { - private final List rows; - - public TestRows() { - this.rows = new ArrayList<>(); - } - - public void add(Row row) { - rows.add(row); - } - - public List toList() { - return rows; - } -} diff --git a/wrangler-transform/docs/Wrangler-transform.md b/wrangler-transform/docs/Wrangler-transform.md deleted file mode 100644 index c34877e46..000000000 --- a/wrangler-transform/docs/Wrangler-transform.md +++ /dev/null @@ -1,54 +0,0 @@ -# Data Prep Transform - -This plugin applies data transformation directives on your data records. The directives -are generated either through an interactive user interface or by manual entry into the -plugin. - -## Plugin Configuration - -| Configuration | Required | Default | Description | -|-----------------------| :------: |:-------:|-----------------------------------------------------------------------| -| Input Field | No | `*` | The name of the input field (or `*` for all fields) | -| Precondition Language | No | `JEXL` | This is a language selector for preconditions (SQL/JEXL) | -| Precondition (JEXL) | No | `false` | A JEXL filter to be applied before a record is passed to data prep | -| Precondition (SQL) | No | `false` | A SQL filter to be applied before a record is passed to data prep | -| Directives | Yes | n/a | The series of data prep directives to be applied on the input records | -| Failure Threshold | No | `1` | Maximum number of errors tolerated before exiting pipeline processing | - -## Directives - -There are numerous directives and variations supported by CDAP, documented at -[http://github.com/hydrator/wrangler](http://github.com/hydrator/wrangler). - -## Usage Notes - -All input record fields are made available to the data prep directives when `*` is used as -the field to be data prepped. They are in the record in the same order as they appear. - -Note that if the transform doesn't operate on all of the input record fields or a field is -not configured as part of the output schema, and you are using the `set columns` -directive, you may see inconsistent behavior. Use the `drop` directive to drop any fields -that are not used in the data prep. - -Precondition language is selected to `JEXL` by default. It can be switched between `SQL` -and `JEXL`. - -If precondition language is selected as `SQL`, the directive and UDD fields throw a -validation error if they are non-empty. - -A precondition filter is useful to apply filtering on records before the records are -delivered for data prep. To filter a record, specify a condition that will result in -boolean state of `true`. - -For example, to filter out all records that are a header record from a CSV file where the -header record is at the start of the file, you could use this filter: - -``` - offset == 0 -``` - -This will filter out records that have an `offset` of zero. - -This plugin uses the `emiterror` capability to emit records that fail parsing into a -separate error stream, allowing the aggregation of all errors. However, if the _Failure -Threshold_ is reached, then the pipeline will fail. diff --git a/wrangler-transform/icons/.keep b/wrangler-transform/icons/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/wrangler-transform/pom.xml b/wrangler-transform/pom.xml deleted file mode 100644 index bf41b342a..000000000 --- a/wrangler-transform/pom.xml +++ /dev/null @@ -1,218 +0,0 @@ - - - - wrangler - io.cdap.wrangler - 4.12.0-SNAPSHOT - - 4.0.0 - - wrangler-transform - Wrangler Transform - - - - io.cdap.wrangler - wrangler-core - ${project.version} - - - io.cdap.cdap - cdap-api - ${cdap.version} - provided - - - io.cdap.cdap - cdap-etl-api - ${cdap.version} - provided - - - io.cdap.cdap - cdap-features - ${cdap.version} - - - com.google.guava - guava - ${guava.version} - - - org.slf4j - slf4j-api - ${slf4j.version} - - - org.slf4j - jcl-over-slf4j - ${slf4j.version} - - - io.cdap.cdap - hydrator-test - ${cdap.version} - test - - - org.apache.hive - hive-exec - - - io.cdap.cdap - cdap-explore-jdbc - - - - - io.cdap.cdap - cdap-unit-test - ${cdap.version} - test - - - org.apache.hive - hive-exec - - - io.cdap.cdap - cdap-explore-jdbc - - - log4j - log4j - - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.14.1 - - - org.apache.felix - maven-bundle-plugin - 3.3.0 - true - - - *;inline=false;scope=compile - true - lib - - <_exportcontents>io.cdap.wrangler.* - - - - - package - - bundle - - - - - - io.cdap - cdap-maven-plugin - 1.1.0 - - - system:cdap-data-pipeline[6.11.0-SNAPSHOT,7.0.0-SNAPSHOT) - system:cdap-data-streams[6.11.0-SNAPSHOT,7.0.0-SNAPSHOT) - - - - - create-artifact-config - prepare-package - - create-plugin-json - - - - - - - - - - - release - - - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - true - - - - attach-sources - package - - jar-no-fork - - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - - http://download.oracle.com/javase/${jee.version}/docs/api/ - - ${project.name} ${project.version} - - CCDAP Licensed under the Apache License, Version 2.0.]]> - - - - - attach-javadoc - package - - jar - - - - - - maven-scm-plugin - 1.9.5 - - ${project.artifactId}-${project.version} - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.5 - - ${gpg.passphrase} - ${gpg.useagent} - - - - - sign - - - - - - - - - diff --git a/wrangler-transform/src/e2e-test/features/Wrangler/DataTypeParsers.feature b/wrangler-transform/src/e2e-test/features/Wrangler/DataTypeParsers.feature deleted file mode 100644 index b16465274..000000000 --- a/wrangler-transform/src/e2e-test/features/Wrangler/DataTypeParsers.feature +++ /dev/null @@ -1,72 +0,0 @@ -# Copyright © 2023 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: datatype parsers - - @BQ_SOURCE_TS_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using parse timestamp directive - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_parse_Timestamp" - Then Navigate to the properties page of plugin: "BigQueryTable" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Replace input plugin property: "table" with value: "bqSourceTable" - Then Click on the Get Schema button - Then Validate "BigQueryTable" plugin properties - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "BigQuery2" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "table" with value: "bqTargetTable" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Validate "BigQuery2" plugin properties - Then Close the Plugin Properties page - Then Rename the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_Timestamp" - - - @BQ_SOURCE_DATETIME_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using parse datetime directive - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_parse_Datetime" - Then Navigate to the properties page of plugin: "BigQueryTable" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Replace input plugin property: "table" with value: "bqSourceTable" - Then Click on the Get Schema button - Then Validate "BigQueryTable" plugin properties - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "BigQuery2" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "table" with value: "bqTargetTable" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Click on the Validate button - Then Validate "BigQuery2" plugin properties - Then Close the Plugin Properties page - Then Rename the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_Datetime" diff --git a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsAvro.feature b/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsAvro.feature deleted file mode 100644 index 1f17583fb..000000000 --- a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsAvro.feature +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright © 2023 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: Wrangler - Run time scenarios for Parse Avro - - @BQ_SOURCE_AVRO_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using parse avro directive - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_parse_avro" - Then Navigate to the properties page of plugin: "BigQueryTable" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Replace input plugin property: "table" with value: "bqSourceTable" - Then Click on the Get Schema button - Then Validate "BigQueryTable" plugin properties - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "BigQuery2" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "table" with value: "bqTargetTable" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Validate "BigQuery2" plugin properties - Then Close the Plugin Properties page - Then Rename the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_avro" diff --git a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsCsv.feature b/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsCsv.feature deleted file mode 100644 index c5e8ca701..000000000 --- a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsCsv.feature +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright © 2023 Cask Data, Inc. -# -# 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. - -@Wrangler_Required -Feature: Wrangler - Run time scenarios for parse csv - - @BQ_SOURCE_CSV_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using parse csv directive - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_parse_csv" - Then Navigate to the properties page of plugin: "BigQueryTable" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Replace input plugin property: "table" with value: "bqSourceTable" - Then Click on the Get Schema button - Then Validate "BigQueryTable" plugin properties - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "BigQuery2" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "table" with value: "bqTargetTable" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Validate "BigQuery2" plugin properties - Then Close the Plugin Properties page - Then Rename the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_csv" diff --git a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsExcel.feature b/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsExcel.feature deleted file mode 100644 index 2a3d21acf..000000000 --- a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsExcel.feature +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright © 2023 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: Parse as excel - - @GCS_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using parse Excel directive - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_parse_excel" - Then Navigate to the properties page of plugin: "GCSFile" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "path" with value: "gcsSourceBucket" - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "BigQuery" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "table" with value: "bqTargetTable" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Validate "BigQuery" plugin properties - Then Close the Plugin Properties page - Then Rename the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_excel" diff --git a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsFixedLength.feature b/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsFixedLength.feature deleted file mode 100644 index cb2929120..000000000 --- a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsFixedLength.feature +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright © 2023 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: parse as fixed length - - @BQ_SOURCE_FXDLEN_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using parse fixedlength directive - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_parse_Fixed_Length" - Then Navigate to the properties page of plugin: "BigQueryTable" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Replace input plugin property: "table" with value: "bqSourceTable" - Then Click on the Get Schema button - Then Validate "BigQueryTable" plugin properties - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "BigQuery2" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "table" with value: "bqTargetTable" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Validate "BigQuery2" plugin properties - Then Close the Plugin Properties page - Then Rename the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_FixedLength" diff --git a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsHl7.feature b/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsHl7.feature deleted file mode 100644 index c85d6cc5a..000000000 --- a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsHl7.feature +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright © 2023 Cask Data, Inc. -# -# 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. - -@Wrangler_Required -Feature: parse as HL7 - - @BQ_SOURCE_HL7_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using parse hl7 directive - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_parse_hl7" - Then Navigate to the properties page of plugin: "BigQueryTable" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Replace input plugin property: "table" with value: "bqSourceTable" - Then Click on the Get Schema button - Then Validate "BigQueryTable" plugin properties - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "BigQuery2" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "table" with value: "bqTargetTable" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Validate "BigQuery2" plugin properties - Then Close the Plugin Properties page - Then Save and Deploy Pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_hl7" diff --git a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsJson.feature b/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsJson.feature deleted file mode 100644 index a7ba8f92d..000000000 --- a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsJson.feature +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright © 2023 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: parse as Json - - @BQ_SOURCE_JSON_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using parse Json directive - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_parse_json" - Then Navigate to the properties page of plugin: "BigQueryTable" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Replace input plugin property: "table" with value: "bqSourceTable" - Then Click on the Get Schema button - Then Validate "BigQueryTable" plugin properties - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "BigQuery2" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "table" with value: "bqTargetTable" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Validate "BigQuery2" plugin properties - Then Close the Plugin Properties page - Then Rename the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_json" diff --git a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsLog.feature b/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsLog.feature deleted file mode 100644 index b9e044ee8..000000000 --- a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsLog.feature +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright © 2023 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: Wrangler - Run time scenarios for Parse Log - - @BQ_SOURCE_LOG_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using parse log directive - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_parse_log" - Then Navigate to the properties page of plugin: "BigQueryTable" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Replace input plugin property: "table" with value: "bqSourceTable" - Then Click on the Get Schema button - Then Validate "BigQueryTable" plugin properties - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "BigQuery2" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "table" with value: "bqTargetTable" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Validate "BigQuery2" plugin properties - Then Close the Plugin Properties page - Then Rename the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_log" diff --git a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsXmlToJson.feature b/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsXmlToJson.feature deleted file mode 100644 index a0f0b5a9a..000000000 --- a/wrangler-transform/src/e2e-test/features/Wrangler/ParseAsXmlToJson.feature +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright © 2023 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: parse as XmlToJson - - @BQ_SOURCE_XML_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using parse XmlToJson directive - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_parse_xml" - Then Navigate to the properties page of plugin: "BigQueryTable" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Replace input plugin property: "table" with value: "bqSourceTable" - Then Click on the Get Schema button - Then Validate "BigQueryTable" plugin properties - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "BigQuery2" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "table" with value: "bqTargetTable" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Validate "BigQuery2" plugin properties - Then Close the Plugin Properties page - Then Rename the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_xml" diff --git a/wrangler-transform/src/e2e-test/features/Wrangler/Runtime.feature b/wrangler-transform/src/e2e-test/features/Wrangler/Runtime.feature deleted file mode 100644 index 0256b7709..000000000 --- a/wrangler-transform/src/e2e-test/features/Wrangler/Runtime.feature +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright © 2023 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: Wrangler - Run time scenarios - - @BQ_SOURCE_GRPBY_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using wrangler and groupBy directive - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_GroupBy" - Then Navigate to the properties page of plugin: "BigQueryTable" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Replace input plugin property: "table" with value: "bqSourceTable" - Then Click on the Get Schema button - Then Validate "BigQueryTable" plugin properties - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "BigQuery2" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "table" with value: "bqTargetTable" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Validate "BigQuery2" plugin properties - Then Close the Plugin Properties page - Then Rename the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_GroupBy" diff --git a/wrangler-transform/src/e2e-test/features/WranglerErrorScenarios.feature b/wrangler-transform/src/e2e-test/features/WranglerErrorScenarios.feature deleted file mode 100644 index c29691a38..000000000 --- a/wrangler-transform/src/e2e-test/features/WranglerErrorScenarios.feature +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright © 2025 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: Wrangler - Verify Wrangler Plugin Error scenarios - - @BQ_SOURCE_CSV_TEST @BQ_SOURCE_TEST @Wrangler_Required - Scenario: Verify Wrangler Plugin error when user selects Precondition Language as SQL - Given Open Datafusion Project to configure pipeline - Then Click on the Plus Green Button to import the pipelines - Then Select the file for importing the pipeline for the plugin "Directive_parse_csv" - Then Navigate to the properties page of plugin: "BigQueryTable" - Then Replace input plugin property: "project" with value: "projectId" - Then Replace input plugin property: "dataset" with value: "dataset" - Then Replace input plugin property: "table" with value: "bqSourceTable" - Then Click on the Get Schema button - Then Validate "BigQueryTable" plugin properties - Then Close the Plugin Properties page - Then Navigate to the properties page of plugin: "Wrangler" - Then Select radio button plugin property: "expressionLanguage" with value: "sql" - Then Click on the Validate button - Then Verify that the Plugin Property: "directives" is displaying an in-line error message: "errorMessageSqlError" - - @BQ_SOURCE_CSV_TEST @BQ_SOURCE_TEST @BQ_CONNECTION @Wrangler_Required - Scenario: Verify Wrangler Plugin error when user provides invalid input field Name - Given Open Wrangler connections page - Then Click plugin property: "addConnection" button - Then Click plugin property: "bqConnectionRow" - Then Enter input plugin property: "name" with value: "bqConnectionName" - Then Replace input plugin property: "projectId" with value: "projectId" - Then Enter input plugin property: "datasetProjectId" with value: "projectId" - Then Override Service account details in Wrangler connection page if set in environment variables - Then Click plugin property: "testConnection" button - Then Verify the test connection is successful - Then Click plugin property: "connectionCreate" button - Then Verify the connection with name: "bqConnectionName" is created successfully - Then Select connection data row with name: "dataset" - Then Select connection data row with name: "bqSourceTable" - Then Verify connection datatable is displayed for the data: "bqSourceTable" - Then Click Create Pipeline button and choose the type of pipeline as: "Batch pipeline" - Then Verify plugin: "BigQueryTable" node is displayed on the canvas with a timeout of 120 seconds - Then Navigate to the properties page of plugin: "Wrangler" - Then Replace input plugin property: "field" with value: "invalid" - Then Click on the Validate button - Then Verify that the Plugin Property: "field" is displaying an in-line error message: "errorMessageInvalidInputFieldName" - Given Open Wrangler connections page - Then Expand connections of type: "BigQuery" - Then Open action menu for connection: "bqConnectionName" of type: "BigQuery" - Then Select action: "Delete" for connection: "bqConnectionName" of type: "BigQuery" - Then Click plugin property: "Delete" button - Then Verify connection: "bqConnectionName" of type: "BigQuery" is deleted successfully diff --git a/wrangler-transform/src/e2e-test/features/WranglerUI/DataTypeParsers.feature b/wrangler-transform/src/e2e-test/features/WranglerUI/DataTypeParsers.feature deleted file mode 100644 index 93e44e08d..000000000 --- a/wrangler-transform/src/e2e-test/features/WranglerUI/DataTypeParsers.feature +++ /dev/null @@ -1,121 +0,0 @@ -# Copyright © 2024 Cask Data, Inc. -# -# 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. - -@Wrangler_Required -Feature: Runtime Scenarios for datatype parsers - - @BQ_SOURCE_TS_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST @BQ_CONNECTION - Scenario: To verify User is able to run a pipeline using parse timestamp directive - Given Open Wrangler connections page - Then Click plugin property: "addConnection" button - Then Click plugin property: "bqConnectionRow" - Then Enter input plugin property: "name" with value: "bqConnectionName" - Then Replace input plugin property: "projectId" with value: "projectId" - Then Enter input plugin property: "datasetProjectId" with value: "projectId" - Then Override Service account details in Wrangler connection page if set in environment variables - Then Click plugin property: "testConnection" button - Then Verify the test connection is successful - Then Click plugin property: "connectionCreate" button - Then Verify the connection with name: "bqConnectionName" is created successfully - Then Select connection data row with name: "dataset" - Then Select connection data row with name: "bqSourceTable" - Then Verify connection datatable is displayed for the data: "bqSourceTable" - Then Expand dropdown column: "update_date" and apply directive: "Parse" as "SIMPLEDATE" with: "yyyy-MM-dd" option - Then Expand dropdown column: "create_date" and apply directive: "Parse" as "SIMPLEDATE" with: "yyyy-MM-dd" option - Then Enter directive from CLI "parse-timestamp :time" - Then Enter directive from CLI "parse-as-currency :price :newprice" - Then Enter directive from CLI "format-as-currency :newprice :format_price" - Then Enter directive from CLI "diff-date :create_date :update_date :diff_date" - Then Enter directive from CLI "timestamp-to-datetime :update_date" - Then Enter directive from CLI "rename :newprice :id" - Then Click Create Pipeline button and choose the type of pipeline as: "Batch pipeline" - Then Verify plugin: "BigQueryTable" node is displayed on the canvas with a timeout of 120 seconds - Then Expand Plugin group in the LHS plugins list: "Sink" - Then Select plugin: "BigQuery" from the plugins list as: "Sink" - Then Navigate to the properties page of plugin: "BigQuery2" - Then Click plugin property: "useConnection" - Then Click on the Browse Connections button - Then Select connection: "bqConnectionName" - Then Enter input plugin property: "referenceName" with value: "BQSinkReferenceName" - Then Enter input plugin property: "dataset" with value: "dataset" - Then Enter input plugin property: "table" with value: "bqTargetTable" - Then Validate "BigQuery" plugin properties - Then Close the Plugin Properties page - Then Connect plugins: "Wrangler" and "BigQuery2" to establish connection - Then Save the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_Timestamp" - Given Open Wrangler connections page - Then Expand connections of type: "BigQuery" - Then Open action menu for connection: "bqConnectionName" of type: "BigQuery" - Then Select action: "Delete" for connection: "bqConnectionName" of type: "BigQuery" - Then Click plugin property: "Delete" button - Then Verify connection: "bqConnectionName" of type: "BigQuery" is deleted successfully - - - @BQ_SOURCE_DATETIME_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST - Scenario: To verify User is able to run a pipeline using parse datetime directive - Given Open Wrangler connections page - Then Click plugin property: "addConnection" button - Then Click plugin property: "bqConnectionRow" - Then Enter input plugin property: "name" with value: "bqConnectionName" - Then Replace input plugin property: "projectId" with value: "projectId" - Then Enter input plugin property: "datasetProjectId" with value: "projectId" - Then Override Service account details in Wrangler connection page if set in environment variables - Then Click plugin property: "testConnection" button - Then Verify the test connection is successful - Then Click plugin property: "connectionCreate" button - Then Verify the connection with name: "bqConnectionName" is created successfully - Then Select connection data row with name: "dataset" - Then Select connection data row with name: "bqSourceTable" - Then Verify connection datatable is displayed for the data: "bqSourceTable" - Then Expand dropdown column: "timestamp" and apply directive: "Parse" with directive type: "DATETIME" and select: "Custom_Format" and enter: "yyyy-MM-dd'T'HH:mm:ssX'['z']'" - Then Enter directive from CLI "current-datetime :create_date" - Then Enter directive from CLI "datetime-to-timestamp :timestamp" - Then Enter directive from CLI "format-datetime :create_date 'y'" - Then Enter directive from CLI "format-date :timestamp yyyy-mm-dd" - Then Enter directive from CLI "rename timestamp timecolumn" - Then Click Create Pipeline button and choose the type of pipeline as: "Batch pipeline" - Then Verify plugin: "BigQueryTable" node is displayed on the canvas with a timeout of 120 seconds - Then Expand Plugin group in the LHS plugins list: "Sink" - Then Select plugin: "BigQuery" from the plugins list as: "Sink" - Then Navigate to the properties page of plugin: "BigQuery2" - Then Click plugin property: "useConnection" - Then Click on the Browse Connections button - Then Select connection: "bqConnectionName" - Then Enter input plugin property: "referenceName" with value: "BQSinkReferenceName" - Then Enter input plugin property: "dataset" with value: "dataset" - Then Enter input plugin property: "table" with value: "bqTargetTable" - Then Validate "BigQuery" plugin properties - Then Close the Plugin Properties page - Then Connect plugins: "Wrangler" and "BigQuery2" to establish connection - Then Save the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_DatetimeNew" - Given Open Wrangler connections page - Then Expand connections of type: "BigQuery" - Then Open action menu for connection: "bqConnectionName" of type: "BigQuery" - Then Select action: "Delete" for connection: "bqConnectionName" of type: "BigQuery" - Then Click plugin property: "Delete" button - Then Verify connection: "bqConnectionName" of type: "BigQuery" is deleted successfully diff --git a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsCsv.feature b/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsCsv.feature deleted file mode 100644 index 59cbe6cbe..000000000 --- a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsCsv.feature +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright © 2024 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: Wrangler - Run time scenarios for parse csv using UI - - @BQ_SOURCE_CSV_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST @BQ_CONNECTION - Scenario: To verify User is able to run a pipeline using parse csv directive - Given Open Wrangler connections page - Then Click plugin property: "addConnection" button - Then Click plugin property: "bqConnectionRow" - Then Enter input plugin property: "name" with value: "bqConnectionName" - Then Replace input plugin property: "projectId" with value: "projectId" - Then Enter input plugin property: "datasetProjectId" with value: "projectId" - Then Override Service account details in Wrangler connection page if set in environment variables - Then Click plugin property: "testConnection" button - Then Verify the test connection is successful - Then Click plugin property: "connectionCreate" button - Then Verify the connection with name: "bqConnectionName" is created successfully - Then Select connection data row with name: "dataset" - Then Select connection data row with name: "bqSourceTable" - Then Verify connection datatable is displayed for the data: "bqSourceTable" - Then Expand dropdown column: "body" and apply directive: "Parse" as "CSV" with: "Comma" option - Then Expand dropdown column: "body_3" and apply directive: "FillNullOrEmptyCells" as "shubh" - Then Enter directive from CLI "rename body_1 new_id" - Then Enter directive from CLI "quantize body_4 body_q 1:2=20,3:4=40" - Then Expand dropdown column: "body_4" and apply directive: "ChangeDataType" as "Integer" - Then Enter directive from CLI "columns-replace s/^new_//g" - Then Enter directive from CLI "set-headers :abc" - Then Enter directive from CLI "change-column-case uppercase" - Then Enter directive from CLI "cleanse-column-names " - Then Enter directive from CLI "split-to-rows :id '#'" - Then Click Create Pipeline button and choose the type of pipeline as: "Batch pipeline" - Then Verify plugin: "BigQueryTable" node is displayed on the canvas with a timeout of 120 seconds - Then Expand Plugin group in the LHS plugins list: "Sink" - Then Select plugin: "BigQuery" from the plugins list as: "Sink" - Then Navigate to the properties page of plugin: "BigQuery2" - Then Click plugin property: "useConnection" - Then Click on the Browse Connections button - Then Select connection: "bqConnectionName" - Then Enter input plugin property: "referenceName" with value: "BQSinkReferenceName" - Then Enter input plugin property: "dataset" with value: "dataset" - Then Enter input plugin property: "table" with value: "bqTargetTable" - Then Validate "BigQuery" plugin properties - Then Close the Plugin Properties page - Then Connect plugins: "Wrangler" and "BigQuery2" to establish connection - Then Save the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_csv" - Given Open Wrangler connections page - Then Expand connections of type: "BigQuery" - Then Open action menu for connection: "bqConnectionName" of type: "BigQuery" - Then Select action: "Delete" for connection: "bqConnectionName" of type: "BigQuery" - Then Click plugin property: "Delete" button - Then Verify connection: "bqConnectionName" of type: "BigQuery" is deleted successfully diff --git a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsExcel.feature b/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsExcel.feature deleted file mode 100644 index 3d4b8a3bb..000000000 --- a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsExcel.feature +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright © 2024 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: Parse as excel - - @BQ_SINK_TEST @BQ_CONNECTION - Scenario: To verify User is able to run a pipeline using parse Excel directive - Given Open Wrangler connections page - Then Click plugin property: "addConnection" button - Then Click plugin property: "bqConnectionRow" - Then Enter input plugin property: "name" with value: "bqConnectionName" - Then Replace input plugin property: "projectId" with value: "projectId" - Then Enter input plugin property: "datasetProjectId" with value: "projectId" - Then Override Service account details in Wrangler connection page if set in environment variables - Then Click plugin property: "testConnection" button - Then Verify the test connection is successful - Then Click plugin property: "connectionCreate" button - Then Verify the connection with name: "bqConnectionName" is created successfully - Then Select connection data row with name: "dataset" - Then Select connection data row with name: "bqSourceTableExcel" - Then Verify connection datatable is displayed for the data: "bqSourceTableExcel" - Then Enter directive from CLI "parse-as-excel :body '0' true" - Then Expand dropdown column: "name" and apply directive: "CopyColumn" as "copiedname" - Then Enter directive from CLI "merge name bkd uniquenum ','" - Then Enter directive from CLI "rename bkd rollno" - Then Expand dropdown column: "fwd" and apply directive: "DeleteColumn" - Then Select checkbox on two columns: "id" and "rollno" - Then Expand dropdown column: "id" and apply directive: "SwapTwoColumnNames" - Then Enter directive from CLI "split-to-rows :name 'o'" - Then Enter directive from CLI "filter-rows-on condition-false rollno !~ '2.0'" - Then Click Create Pipeline button and choose the type of pipeline as: "Batch pipeline" - Then Verify plugin: "BigQueryTable" node is displayed on the canvas with a timeout of 120 seconds - Then Expand Plugin group in the LHS plugins list: "Sink" - Then Select plugin: "BigQuery" from the plugins list as: "Sink" - Then Navigate to the properties page of plugin: "BigQuery2" - Then Click plugin property: "useConnection" - Then Click on the Browse Connections button - Then Select connection: "bqConnectionName" - Then Enter input plugin property: "referenceName" with value: "BQSinkReferenceName" - Then Enter input plugin property: "dataset" with value: "dataset" - Then Enter input plugin property: "table" with value: "bqTargetTable" - Then Validate "BigQuery" plugin properties - Then Close the Plugin Properties page - Then Connect plugins: "Wrangler" and "BigQuery2" to establish connection - Then Save the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_excel" - Given Open Wrangler connections page - Then Expand connections of type: "BigQuery" - Then Open action menu for connection: "bqConnectionName" of type: "BigQuery" - Then Select action: "Delete" for connection: "bqConnectionName" of type: "BigQuery" - Then Click plugin property: "Delete" button - Then Verify connection: "bqConnectionName" of type: "BigQuery" is deleted successfully \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsFixedLength.feature b/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsFixedLength.feature deleted file mode 100644 index 6321c0a35..000000000 --- a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsFixedLength.feature +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright © 2024 Cask Data, Inc. -# -# 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. - -@Wrangler_Required -Feature: parse as fixed length - - @BQ_SOURCE_FXDLEN_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST @BQ_CONNECTION - Scenario: To verify User is able to run a pipeline using parse fixedlength directive - Given Open Wrangler connections page - Then Click plugin property: "addConnection" button - Then Click plugin property: "bqConnectionRow" - Then Enter input plugin property: "name" with value: "bqConnectionName" - Then Replace input plugin property: "projectId" with value: "projectId" - Then Enter input plugin property: "datasetProjectId" with value: "projectId" - Then Override Service account details in Wrangler connection page if set in environment variables - Then Click plugin property: "testConnection" button - Then Verify the test connection is successful - Then Click plugin property: "connectionCreate" button - Then Verify the connection with name: "bqConnectionName" is created successfully - Then Select connection data row with name: "dataset" - Then Select connection data row with name: "bqSourceTable" - Then Verify connection datatable is displayed for the data: "bqSourceTable" - Then Expand dropdown column: "fixedlength" and apply directive: "Parse" as "FIXEDLENGTH" with: "2,4,5,3" option - Then Enter directive from CLI "split-url url" - Then Enter directive from CLI "write-as-csv :url_protocol" - Then Enter directive from CLI "url-encode :url" - Then Enter directive from CLI "url-decode :url" - Then Expand dropdown column: "fixedlength" and apply directive: "Encode" as "Base32" - Then Expand dropdown column: "fixedlength_encode_base32" and apply directive: "Decode" as "Base32" - Then Enter directive from CLI "split-to-columns :url_query '='" - Then Enter directive from CLI "rename fixedlength_2 id" - Then Enter directive from CLI "filter-rows-on condition-true fixedlength_4 !~ 'XYZ'" - Then Click Create Pipeline button and choose the type of pipeline as: "Batch pipeline" - Then Verify plugin: "BigQueryTable" node is displayed on the canvas with a timeout of 120 seconds - Then Expand Plugin group in the LHS plugins list: "Sink" - Then Select plugin: "BigQuery" from the plugins list as: "Sink" - Then Navigate to the properties page of plugin: "BigQuery2" - Then Click plugin property: "useConnection" - Then Click on the Browse Connections button - Then Select connection: "bqConnectionName" - Then Enter input plugin property: "referenceName" with value: "BQSinkReferenceName" - Then Enter input plugin property: "dataset" with value: "dataset" - Then Enter input plugin property: "table" with value: "bqTargetTable" - Then Validate "BigQuery" plugin properties - Then Close the Plugin Properties page - Then Connect plugins: "Wrangler" and "BigQuery2" to establish connection - Then Save the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_FixedLengthnew" - Given Open Wrangler connections page - Then Expand connections of type: "BigQuery" - Then Open action menu for connection: "bqConnectionName" of type: "BigQuery" - Then Select action: "Delete" for connection: "bqConnectionName" of type: "BigQuery" - Then Click plugin property: "Delete" button - Then Verify connection: "bqConnectionName" of type: "BigQuery" is deleted successfully \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsHl7.feature b/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsHl7.feature deleted file mode 100644 index b1836aa4a..000000000 --- a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsHl7.feature +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright © 2024 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: parse as HL7 - - @BQ_SOURCE_HL7_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST @BQ_CONNECTION - Scenario: To verify User is able to run a pipeline using parse hl7 directive - Given Open Wrangler connections page - Then Click plugin property: "addConnection" button - Then Click plugin property: "bqConnectionRow" - Then Enter input plugin property: "name" with value: "bqConnectionName" - Then Replace input plugin property: "projectId" with value: "projectId" - Then Enter input plugin property: "datasetProjectId" with value: "projectId" - Then Override Service account details in Wrangler connection page if set in environment variables - Then Click plugin property: "testConnection" button - Then Verify the test connection is successful - Then Click plugin property: "connectionCreate" button - Then Verify the connection with name: "bqConnectionName" is created successfully - Then Select connection data row with name: "dataset" - Then Select connection data row with name: "bqSourceTable" - Then Verify connection datatable is displayed for the data: "bqSourceTable" - Then Expand dropdown column: "Body" and apply directive: "Parse" as "HL7" - Then Expand dropdown column: "Body" and apply directive: "Hash" as "MD5" - Then Enter directive from CLI "set-type :Body string" - Then Enter directive from CLI "keep address,Body,Body_hl7_MSH_12,Body_hl7_MSH_9_1" - Then Expand dropdown column: "address" and apply directive: "FindAndReplace" and select: "address1" and enter: "test" - Then Expand dropdown column: "Body_hl7_MSH_9_1" and apply directive: "MaskData" as "By_shuffling" - Then Expand dropdown column: "address" and apply directive: "SendToError" as "value_is_empty" - Then Enter directive from CLI "rename :Body_hl7_MSH_12 :id " - Then Click Create Pipeline button and choose the type of pipeline as: "Batch pipeline" - Then Verify plugin: "BigQueryTable" node is displayed on the canvas with a timeout of 120 seconds - Then Expand Plugin group in the LHS plugins list: "Sink" - Then Select plugin: "BigQuery" from the plugins list as: "Sink" - Then Navigate to the properties page of plugin: "BigQuery2" - Then Click plugin property: "useConnection" - Then Click on the Browse Connections button - Then Select connection: "bqConnectionName" - Then Enter input plugin property: "referenceName" with value: "BQSinkReferenceName" - Then Enter input plugin property: "dataset" with value: "dataset" - Then Enter input plugin property: "table" with value: "bqTargetTable" - Then Validate "BigQuery" plugin properties - Then Close the Plugin Properties page - Then Connect plugins: "Wrangler" and "BigQuery2" to establish connection - Then Save the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_hl7_new" - Given Open Wrangler connections page - Then Expand connections of type: "BigQuery" - Then Open action menu for connection: "bqConnectionName" of type: "BigQuery" - Then Select action: "Delete" for connection: "bqConnectionName" of type: "BigQuery" - Then Click plugin property: "Delete" button - Then Verify connection: "bqConnectionName" of type: "BigQuery" is deleted successfully \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsJson.feature b/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsJson.feature deleted file mode 100644 index d46092c54..000000000 --- a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsJson.feature +++ /dev/null @@ -1,72 +0,0 @@ -# Copyright © 2024 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: parse as Json - - @BQ_SOURCE_JSON_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST @BQ_CONNECTION - Scenario: To verify User is able to run a pipeline using parse Json directive - Given Open Wrangler connections page - Then Click plugin property: "addConnection" button - Then Click plugin property: "bqConnectionRow" - Then Enter input plugin property: "name" with value: "bqConnectionName" - Then Replace input plugin property: "projectId" with value: "projectId" - Then Enter input plugin property: "datasetProjectId" with value: "projectId" - Then Override Service account details in Wrangler connection page if set in environment variables - Then Click plugin property: "testConnection" button - Then Verify the test connection is successful - Then Click plugin property: "connectionCreate" button - Then Verify the connection with name: "bqConnectionName" is created successfully - Then Select connection data row with name: "dataset" - Then Select connection data row with name: "bqSourceTable" - Then Verify connection datatable is displayed for the data: "bqSourceTable" - Then Expand dropdown column: "json" and apply directive: "Parse" as "JSON" with: "1" option - Then Expand dropdown column: "body" and apply directive: "Format" as "Trim_leading_whitespace" - Then Enter directive from CLI "set-column :desc concat(json_pet,body)" - Then Expand dropdown column: "json_name" and apply directive: "CopyColumn" as "copied" - Then Select checkbox on two columns: "json_id" and "json_age" - Then Expand dropdown column: "json_id" and apply directive: "SwapTwoColumnNames" - Then Enter directive from CLI "merge :json_id :json_name :json_id_json_name ," - Then Enter directive from CLI "mask-number :json_pet 'testing'" - Then Expand dropdown column: "json_height" and apply directive: "DeleteColumn" - Then Enter directive from CLI "write-as-json-map :json_age" - Then Enter directive from CLI "rename json_id id" - Then Click Create Pipeline button and choose the type of pipeline as: "Batch pipeline" - Then Verify plugin: "BigQueryTable" node is displayed on the canvas with a timeout of 120 seconds - Then Expand Plugin group in the LHS plugins list: "Sink" - Then Select plugin: "BigQuery" from the plugins list as: "Sink" - Then Navigate to the properties page of plugin: "BigQuery2" - Then Click plugin property: "useConnection" - Then Click on the Browse Connections button - Then Select connection: "bqConnectionName" - Then Enter input plugin property: "referenceName" with value: "BQSinkReferenceName" - Then Enter input plugin property: "dataset" with value: "dataset" - Then Enter input plugin property: "table" with value: "bqTargetTable" - Then Validate "BigQuery" plugin properties - Then Close the Plugin Properties page - Then Connect plugins: "Wrangler" and "BigQuery2" to establish connection - Then Save the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_json" - Given Open Wrangler connections page - Then Expand connections of type: "BigQuery" - Then Open action menu for connection: "bqConnectionName" of type: "BigQuery" - Then Select action: "Delete" for connection: "bqConnectionName" of type: "BigQuery" - Then Click plugin property: "Delete" button - Then Verify connection: "bqConnectionName" of type: "BigQuery" is deleted successfully \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsLog.feature b/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsLog.feature deleted file mode 100644 index 3a25ac4ef..000000000 --- a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsLog.feature +++ /dev/null @@ -1,74 +0,0 @@ -# Copyright © 2024 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: Wrangler - Run time scenarios for Parse Log - - @BQ_SOURCE_LOG_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST @BQ_CONNECTION - Scenario: To verify User is able to run a pipeline using parse log directive - Given Open Wrangler connections page - Then Click plugin property: "addConnection" button - Then Click plugin property: "bqConnectionRow" - Then Enter input plugin property: "name" with value: "bqConnectionName" - Then Replace input plugin property: "projectId" with value: "projectId" - Then Enter input plugin property: "datasetProjectId" with value: "projectId" - Then Override Service account details in Wrangler connection page if set in environment variables - Then Click plugin property: "testConnection" button - Then Verify the test connection is successful - Then Click plugin property: "connectionCreate" button - Then Verify the connection with name: "bqConnectionName" is created successfully - Then Select connection data row with name: "dataset" - Then Select connection data row with name: "bqSourceTable" - Then Verify connection datatable is displayed for the data: "bqSourceTable" - Then Expand dropdown column: "body" and apply directive: "Parse" as "LOG" with: "Common" option - Then Expand dropdown column: "number_connection_client_logname_last" and apply directive: "DeleteColumn" - Then Expand dropdown column: "number_connection_client_logname" and apply directive: "DeleteColumn" - Then Expand dropdown column: "http_querystring_request_firstline_uri_query" and apply directive: "DeleteColumn" - Then Expand dropdown column: "http_ref_request_firstline_uri_ref" and apply directive: "FillNullOrEmptyCells" as "no value" - Then Enter directive from CLI "filter-rows-on condition-false ip_connection_client_host =$ '1'" - Then Enter directive from CLI "filter-rows-on regex-match string_connection_client_user_last ^Tryck$" - Then Enter directive from CLI "extract-regex-groups :http_firstline_request_firstline GET*" - Then Enter directive from CLI "split-to-columns :ip_connection_client_host ," - Then Enter directive from CLI "catalog-lookup ICD-9 :Body" - Then Expand dropdown column: "Body_icd_9_description" and apply directive: "FillNullOrEmptyCells" as "Body Post Catalog lookup" - Then Enter directive from CLI "set-variable Pass string_request_status_last == 200 ? string_request_status_last : Pass" - Then Expand dropdown column: "time_day_request_receive_time_last_day" and apply directive: "ChangeDataType" as "Integer" - Then Click Create Pipeline button and choose the type of pipeline as: "Batch pipeline" - Then Verify plugin: "BigQueryTable" node is displayed on the canvas with a timeout of 120 seconds - Then Expand Plugin group in the LHS plugins list: "Sink" - Then Select plugin: "BigQuery" from the plugins list as: "Sink" - Then Navigate to the properties page of plugin: "BigQuery2" - Then Click plugin property: "useConnection" - Then Click on the Browse Connections button - Then Select connection: "bqConnectionName" - Then Enter input plugin property: "referenceName" with value: "BQSinkReferenceName" - Then Enter input plugin property: "dataset" with value: "dataset" - Then Enter input plugin property: "table" with value: "bqTargetTable" - Then Validate "BigQuery" plugin properties - Then Close the Plugin Properties page - Then Connect plugins: "Wrangler" and "BigQuery2" to establish connection - Then Save the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_log" - Given Open Wrangler connections page - Then Expand connections of type: "BigQuery" - Then Open action menu for connection: "bqConnectionName" of type: "BigQuery" - Then Select action: "Delete" for connection: "bqConnectionName" of type: "BigQuery" - Then Click plugin property: "Delete" button - Then Verify connection: "bqConnectionName" of type: "BigQuery" is deleted successfully diff --git a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsXmlToJson.feature b/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsXmlToJson.feature deleted file mode 100644 index c43a5e17d..000000000 --- a/wrangler-transform/src/e2e-test/features/WranglerUI/ParseAsXmlToJson.feature +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright © 2024 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: parse as XmlToJson - - @BQ_SOURCE_XML_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST @BQ_CONNECTION - Scenario: To verify User is able to run a pipeline using parse XmlToJson directive - Given Open Wrangler connections page - Then Click plugin property: "addConnection" button - Then Click plugin property: "bqConnectionRow" - Then Enter input plugin property: "name" with value: "bqConnectionName" - Then Replace input plugin property: "projectId" with value: "projectId" - Then Enter input plugin property: "datasetProjectId" with value: "projectId" - Then Override Service account details in Wrangler connection page if set in environment variables - Then Click plugin property: "testConnection" button - Then Verify the test connection is successful - Then Click plugin property: "connectionCreate" button - Then Verify the connection with name: "bqConnectionName" is created successfully - Then Select connection data row with name: "dataset" - Then Select connection data row with name: "bqSourceTable" - Then Verify connection datatable is displayed for the data: "bqSourceTable" - Then Expand dropdown column: "xmldata" and apply directive: "Parse" as "XMLTOJSON" with: "1" option - Then Enter directive from CLI "split-email :email" - Then Enter directive from CLI "text-distance block email email_account distance" - Then Enter directive from CLI "text-metric longest-common-subsequence email email_account distance2" - Then Enter directive from CLI "write-as-json-object :email_domain distance,email_account" - Then Enter directive from CLI "stemming :email" - Then Enter directive from CLI "split-to-rows :email_account '0'" - Then Enter directive from CLI "rename :email_account id" - Then Click Create Pipeline button and choose the type of pipeline as: "Batch pipeline" - Then Verify plugin: "BigQueryTable" node is displayed on the canvas with a timeout of 120 seconds - Then Expand Plugin group in the LHS plugins list: "Sink" - Then Select plugin: "BigQuery" from the plugins list as: "Sink" - Then Navigate to the properties page of plugin: "BigQuery2" - Then Click plugin property: "useConnection" - Then Click on the Browse Connections button - Then Select connection: "bqConnectionName" - Then Enter input plugin property: "referenceName" with value: "BQSinkReferenceName" - Then Enter input plugin property: "dataset" with value: "dataset" - Then Enter input plugin property: "table" with value: "bqTargetTable" - Then Validate "BigQuery" plugin properties - Then Close the Plugin Properties page - Then Connect plugins: "Wrangler" and "BigQuery2" to establish connection - Then Save the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_xml" - Given Open Wrangler connections page - Then Expand connections of type: "BigQuery" - Then Open action menu for connection: "bqConnectionName" of type: "BigQuery" - Then Select action: "Delete" for connection: "bqConnectionName" of type: "BigQuery" - Then Click plugin property: "Delete" button - Then Verify connection: "bqConnectionName" of type: "BigQuery" is deleted successfully diff --git a/wrangler-transform/src/e2e-test/features/Wrangler_Macro.feature b/wrangler-transform/src/e2e-test/features/Wrangler_Macro.feature deleted file mode 100644 index ab99a081d..000000000 --- a/wrangler-transform/src/e2e-test/features/Wrangler_Macro.feature +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright © 2025 Cask Data, Inc. -# -# 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. - -@Wrangler -Feature: Wrangler - Run time scenarios for wrangler plugin using macro arguments - - @BQ_SOURCE_CSV_TEST @BQ_SOURCE_TEST @BQ_SINK_TEST @BQ_CONNECTION - Scenario: To verify User is able to run a pipeline using macro arguments - Given Open Wrangler connections page - Then Click plugin property: "addConnection" button - Then Click plugin property: "bqConnectionRow" - Then Enter input plugin property: "name" with value: "bqConnectionName" - Then Replace input plugin property: "projectId" with value: "projectId" - Then Enter input plugin property: "datasetProjectId" with value: "projectId" - Then Override Service account details in Wrangler connection page if set in environment variables - Then Click plugin property: "testConnection" button - Then Verify the test connection is successful - Then Click plugin property: "connectionCreate" button - Then Verify the connection with name: "bqConnectionName" is created successfully - Then Select connection data row with name: "dataset" - Then Select connection data row with name: "bqSourceTable" - Then Verify connection datatable is displayed for the data: "bqSourceTable" - Then Expand dropdown column: "body" and apply directive: "Parse" as "CSV" with: "Comma" option - Then Expand dropdown column: "body_3" and apply directive: "FillNullOrEmptyCells" as "shubh" - Then Enter directive from CLI "rename body_1 new_id" - Then Enter directive from CLI "quantize body_4 body_q 1:2=20,3:4=40" - Then Expand dropdown column: "body_4" and apply directive: "ChangeDataType" as "Integer" - Then Enter directive from CLI "columns-replace s/^new_//g" - Then Enter directive from CLI "set-headers :abc" - Then Enter directive from CLI "change-column-case uppercase" - Then Enter directive from CLI "cleanse-column-names " - Then Enter directive from CLI "split-to-rows :id '#'" - Then Click Create Pipeline button and choose the type of pipeline as: "Batch pipeline" - Then Verify plugin: "BigQueryTable" node is displayed on the canvas with a timeout of 120 seconds - Then Navigate to the properties page of plugin: "Wrangler" - Then Click on the Macro button of Property: "field" and set the value to: "fields" - Then Click on the Macro button of Property: "expressionLanguage" and set the value to: "expressionLanguage" - Then Click on the Macro button of Property: "precondition" and set the value to: "precondition" - Then Click on the Macro button of Property: "on-error" and set the value to: "on-error" - Then Validate "Wrangler" plugin properties - Then Close the Plugin Properties page - Then Expand Plugin group in the LHS plugins list: "Sink" - Then Select plugin: "BigQuery" from the plugins list as: "Sink" - Then Navigate to the properties page of plugin: "BigQuery2" - Then Click plugin property: "useConnection" - Then Click on the Browse Connections button - Then Select connection: "bqConnectionName" - Then Enter input plugin property: "referenceName" with value: "BQSinkReferenceName" - Then Enter input plugin property: "dataset" with value: "dataset" - Then Enter input plugin property: "table" with value: "bqTargetTable" - Then Validate "BigQuery" plugin properties - Then Close the Plugin Properties page - Then Connect plugins: "Wrangler" and "BigQuery2" to establish connection - Then Save the pipeline - Then Deploy the pipeline - Then Run the Pipeline in Runtime - Then Enter runtime argument value "expressionLanguage" for key "expressionLanguage" - Then Enter runtime argument value "fields" for key "fields" - Then Enter runtime argument value "precondition" for key "precondition" - Then Enter runtime argument value "onError" for key "on-error" - Then Run the Pipeline in Runtime with runtime arguments - Then Wait till pipeline is in running state - Then Open and capture logs - Then Verify the pipeline status is "Succeeded" - Then Close the pipeline logs - Then Validate The Data From BQ To BQ With Actual And Expected File for: "ExpectedDirective_parse_csv" - Given Open Wrangler connections page - Then Expand connections of type: "BigQuery" - Then Open action menu for connection: "bqConnectionName" of type: "BigQuery" - Then Select action: "Delete" for connection: "bqConnectionName" of type: "BigQuery" - Then Click plugin property: "Delete" button - Then Verify connection: "bqConnectionName" of type: "BigQuery" is deleted successfully diff --git a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/common/stepsdesign/TestSetupHooks.java b/wrangler-transform/src/e2e-test/java/io/cdap/plugin/common/stepsdesign/TestSetupHooks.java deleted file mode 100644 index ad90ef486..000000000 --- a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/common/stepsdesign/TestSetupHooks.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.plugin.common.stepsdesign; - -import com.google.cloud.bigquery.BigQueryException; -import com.google.cloud.storage.Blob; -import com.google.cloud.storage.StorageException; -import io.cdap.e2e.utils.BigQueryClient; -import io.cdap.e2e.utils.PluginPropertyUtils; -import io.cdap.e2e.utils.StorageClient; -import io.cucumber.java.After; -import io.cucumber.java.Before; -import org.apache.commons.lang3.StringUtils; -import org.junit.Assert; -import stepsdesign.BeforeActions; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.NoSuchElementException; -import java.util.UUID; - -/** - * Setup BQ for Wrangler tests. - */ -public class TestSetupHooks { - - public static String gcsSourceBucketName = StringUtils.EMPTY; - - @Before(order = 1, value = "@BQ_SOURCE_CSV_TEST") - public static void createTempSourceBQTable() throws IOException, InterruptedException { - createSourceBQTableWithQueries(PluginPropertyUtils.pluginProp("CreateBQTableQueryFileCsv"), - PluginPropertyUtils.pluginProp("InsertBQDataQueryFileCsv")); - } - - @Before(order = 2, value = "@BQ_SINK_TEST") - public static void setTempTargetBQTableName() { - String bqTargetTableName = "E2E_TARGET_" + UUID.randomUUID().toString().replaceAll("-", "_"); - PluginPropertyUtils.addPluginProp("bqTargetTable", bqTargetTableName); - BeforeActions.scenario.write("BQ Target table name - " + bqTargetTableName); - } - - @After(order = 1, value = "@BQ_SINK_TEST") - public static void deleteTempTargetBQTable() throws IOException, InterruptedException { - String bqTargetTableName = PluginPropertyUtils.pluginProp("bqTargetTable"); - try { - BigQueryClient.dropBqQuery(bqTargetTableName); - BeforeActions.scenario.write( - "BQ Target table - " + bqTargetTableName + " deleted successfully"); - PluginPropertyUtils.removePluginProp("bqTargetTable"); - } catch (BigQueryException e) { - if (e.getMessage().contains("Not found: Table")) { - BeforeActions.scenario.write("BQ Target Table " + bqTargetTableName + " does not exist"); - } else { - Assert.fail(e.getMessage()); - } - } - } - - /** - * Create BigQuery table test. - */ - @Before(order = 1, value = "@BQ_SOURCE_FXDLEN_TEST") - public static void createTempSourceBQTableFxdLen() throws IOException, InterruptedException { - createSourceBQTableWithQueries(PluginPropertyUtils.pluginProp("CreateBQDataQueryFileFxdLen"), - PluginPropertyUtils.pluginProp("InsertBQDataQueryFileFxdLen")); - } - - @Before(order = 1, value = "@BQ_SOURCE_HL7_TEST") - public static void createTempSourceBQTableHl7() throws IOException, InterruptedException { - createSourceBQTableWithQueries(PluginPropertyUtils.pluginProp("CreateBQDataQueryFileHl7"), - PluginPropertyUtils.pluginProp("InsertBQDataQueryFileHl7")); - } - - @Before(order = 1, value = "@BQ_SOURCE_TS_TEST") - public static void createTempSourceBQTableTimestamp() throws IOException, InterruptedException { - createSourceBQTableWithQueries(PluginPropertyUtils.pluginProp("CreateBQDataQueryFileTimestamp"), - PluginPropertyUtils.pluginProp("InsertBQDataQueryFileTimestamp")); - } - - @Before(order = 1, value = "@BQ_SOURCE_DATETIME_TEST") - public static void createTempSourceBQTableDateTime() throws IOException, InterruptedException { - createSourceBQTableWithQueries(PluginPropertyUtils.pluginProp("CreateBQDataQueryFileDatetime"), - PluginPropertyUtils.pluginProp("InsertBQDataQueryFileDatetime")); - } - - @After(order = 2, value = "@BQ_SOURCE_TEST") - public static void deleteTempSourceBQTable() throws IOException, InterruptedException { - String bqSourceTable = PluginPropertyUtils.pluginProp("bqSourceTable"); - BigQueryClient.dropBqQuery(bqSourceTable); - BeforeActions.scenario.write("BQ source Table " + bqSourceTable + " deleted successfully"); - PluginPropertyUtils.removePluginProp("bqSourceTable"); - } - @Before(order = 1, value = "@BQ_SOURCE_AVRO_TEST") - public static void createTempSourceBQTableAvro() throws IOException, InterruptedException { - createSourceBQTableWithQueries(PluginPropertyUtils.pluginProp("CreateBQTableQueryFileAvro"), - PluginPropertyUtils.pluginProp("InsertBQDataQueryFileAvro")); - } - @Before(order = 1, value = "@BQ_SOURCE_LOG_TEST") - public static void createTempSourceBQTableLog() throws IOException, InterruptedException { - createSourceBQTableWithQueries(PluginPropertyUtils.pluginProp("CreateBQTableQueryFileLog"), - PluginPropertyUtils.pluginProp("InsertBQDataQueryFileLog")); - } - - - @Before(order = 1, value = "@BQ_SOURCE_JSON_TEST") - public static void createTempSourceBQTableJson() throws IOException, InterruptedException { - createSourceBQTableWithQueries(PluginPropertyUtils.pluginProp("CreateBQTableQueryFileJson"), - PluginPropertyUtils.pluginProp("InsertBQDataQueryFileJson")); - } - - @Before(order = 1, value = "@BQ_SOURCE_XML_TEST") - public static void createTempSourceBQTableXml() throws IOException, InterruptedException { - createSourceBQTableWithQueries(PluginPropertyUtils.pluginProp("CreateBQDataQueryFileXml"), - PluginPropertyUtils.pluginProp("InsertBQDataQueryFileXml")); - } - - @Before(order = 1, value = "@BQ_SOURCE_GRPBY_TEST") - public static void createTempSourceBQTableGroupBy() throws IOException, InterruptedException { - createSourceBQTableWithQueries(PluginPropertyUtils.pluginProp("CreateBQTableQueryFile"), - PluginPropertyUtils.pluginProp("InsertBQDataQueryFile")); - } - - @Before(order = 1, value = "@GCS_SOURCE_TEST") - public static void createBucketWithEXCELFile() throws IOException, URISyntaxException { - gcsSourceBucketName = createGCSBucketWithFile(PluginPropertyUtils.pluginProp("testFile")); - PluginPropertyUtils.addPluginProp("gcsSourceBucket", "gs://" + gcsSourceBucketName + "/" + - PluginPropertyUtils.pluginProp("testFile")); - BeforeActions.scenario.write("GCS source bucket1 name - " + gcsSourceBucketName); - } - - private static String createGCSBucketWithFile(String filePath) - throws IOException, URISyntaxException { - String bucketName = StorageClient.createBucket("e2e-test-" + UUID.randomUUID()).getName(); - StorageClient.uploadObject(bucketName, filePath, filePath); - return bucketName; - } - - @After(order = 1, value = "@GCS_SOURCE_TEST") - public static void deleteSourceBucketWithFile() { - deleteGCSBucket(gcsSourceBucketName); - gcsSourceBucketName = StringUtils.EMPTY; - } - - private static void deleteGCSBucket(String bucketName) { - try { - for (Blob blob : StorageClient.listObjects(bucketName).iterateAll()) { - StorageClient.deleteObject(bucketName, blob.getName()); - } - StorageClient.deleteBucket(bucketName); - BeforeActions.scenario.write("Deleted GCS Bucket " + bucketName); - } catch (StorageException | IOException e) { - if (e.getMessage().contains("The specified bucket does not exist")) { - BeforeActions.scenario.write("GCS Bucket " + bucketName + " does not exist."); - } else { - Assert.fail(e.getMessage()); - } - } - } - - - private static void createSourceBQTableWithQueries(String bqCreateTableQueryFile, - String bqInsertDataQueryFile) - throws IOException, InterruptedException { - String bqSourceTable = - "E2E_SOURCE_" + UUID.randomUUID().toString().substring(0, 5).replaceAll("-", - "_"); - - String createTableQuery = StringUtils.EMPTY; - try { - createTableQuery = new String(Files.readAllBytes(Paths.get(TestSetupHooks.class.getResource - ("/" + bqCreateTableQueryFile).toURI())) - , StandardCharsets.UTF_8); - createTableQuery = createTableQuery.replace("DATASET", PluginPropertyUtils.pluginProp("dataset")) - .replace("TABLE_NAME", bqSourceTable); - } catch (Exception e) { - BeforeActions.scenario.write("Exception in reading " + bqCreateTableQueryFile + " - " + e.getMessage()); - Assert.fail("Exception in BigQuery testdata prerequisite setup " + - "- error in reading create table query file " + e.getMessage()); - } - - String insertDataQuery = StringUtils.EMPTY; - try { - insertDataQuery = new String(Files.readAllBytes(Paths.get(TestSetupHooks.class.getResource - ("/" + bqInsertDataQueryFile).toURI())) - , StandardCharsets.UTF_8); - insertDataQuery = insertDataQuery.replace("DATASET", - PluginPropertyUtils.pluginProp("dataset")) - .replace("TABLE_NAME", bqSourceTable); - } catch (Exception e) { - BeforeActions.scenario.write( - "Exception in reading " + bqInsertDataQueryFile + " - " + e.getMessage()); - Assert.fail("Exception in BigQuery testdata prerequisite setup " + - "- error in reading insert data query file " + e.getMessage()); - } - BigQueryClient.getSoleQueryResult(createTableQuery); - try { - BigQueryClient.getSoleQueryResult(insertDataQuery); - } catch (NoSuchElementException e) { - // Insert query does not return any record. - // Iterator on TableResult values in getSoleQueryResult method throws NoSuchElementException - } - PluginPropertyUtils.addPluginProp("bqSourceTable", bqSourceTable); - BeforeActions.scenario.write("BQ Source Table " + bqSourceTable + " created successfully"); - } - - @Before(order = 1, value = "@BQ_CONNECTION") - public static void setBQConnectionName() { - PluginPropertyUtils.addPluginProp("bqConnectionName", "BQ-" + UUID.randomUUID()); - } -} diff --git a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/common/stepsdesign/package-info.java b/wrangler-transform/src/e2e-test/java/io/cdap/plugin/common/stepsdesign/package-info.java deleted file mode 100644 index 63f8efabc..000000000 --- a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/common/stepsdesign/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -/** - * Package contains the stepDesign for common features. - */ -package io.cdap.plugin.common.stepsdesign; diff --git a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/actions/ValidationHelper.java b/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/actions/ValidationHelper.java deleted file mode 100644 index f35d6d311..000000000 --- a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/actions/ValidationHelper.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.plugin.wrangler.actions; - -import com.esotericsoftware.minlog.Log; -import com.google.cloud.bigquery.FieldValueList; -import com.google.cloud.bigquery.TableResult; -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import io.cdap.e2e.utils.BigQueryClient; -import io.cdap.e2e.utils.PluginPropertyUtils; -import io.cucumber.core.logging.Logger; -import io.cucumber.core.logging.LoggerFactory; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.Map; - -/** - * Validation Helper. - */ -public class ValidationHelper { - - private static final Logger LOG = LoggerFactory.getLogger(ValidationHelper.class); - static Gson gson = new Gson(); - public static boolean validateActualDataToExpectedData(String table, String fileName) throws IOException, - InterruptedException, URISyntaxException { - Map bigQueryMap = new HashMap<>(); - Map fileMap = new HashMap<>(); - Path importExpectedFile = Paths.get(ValidationHelper.class.getResource("/" + fileName).toURI()); - - getBigQueryTableData(table, bigQueryMap); - getFileData(importExpectedFile.toString(), fileMap); - - boolean isMatched = bigQueryMap.equals(fileMap); - - return isMatched; - } - - public static void getFileData(String fileName, Map fileMap) { - try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { - String line; - while ((line = br.readLine()) != null) { - JsonObject json = gson.fromJson(line, JsonObject.class); - if (json.has("id")) { // Check if the JSON object has the "id" key - JsonElement idElement = json.get("id"); - if (idElement.isJsonPrimitive()) { - String idKey = idElement.getAsString(); - fileMap.put(idKey, json); - } else { - Log.error("ID key not found"); - } - } - } - } catch (IOException e) { - System.err.println("Error reading the file: " + e.getMessage()); - } - } - - private static void getBigQueryTableData(String targetTable, Map bigQueryMap) - throws IOException, InterruptedException { - String dataset = PluginPropertyUtils.pluginProp("dataset"); - String projectId = PluginPropertyUtils.pluginProp("projectId"); - String selectQuery = "SELECT TO_JSON(t) FROM `" + projectId + "." + dataset + "." + targetTable + "` AS t"; - TableResult result = BigQueryClient.getQueryResult(selectQuery); - - for (FieldValueList row : result.iterateAll()) { - JsonObject json = gson.fromJson(row.get(0).getStringValue(), JsonObject.class); - if (json.has("id")) { // Check if the JSON object has the "id" key - JsonElement idElement = json.get("id"); - if (idElement.isJsonPrimitive()) { - String idKey = idElement.getAsString(); - bigQueryMap.put(idKey, json); - } else { - LOG.error("Data Mismatched"); - } - } else { - LOG.error("ID Key not found in JSON object"); - } - } - } -} diff --git a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/actions/package-info.java b/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/actions/package-info.java deleted file mode 100644 index 4d0f2be85..000000000 --- a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/actions/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -/** - * Package contains the actions for Wrangler features. - */ -package io.cdap.plugin.wrangler.actions; diff --git a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/runners/TestRunner.java b/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/runners/TestRunner.java deleted file mode 100644 index a7cf69a0c..000000000 --- a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/runners/TestRunner.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.plugin.wrangler.runners; - -import io.cucumber.junit.Cucumber; -import io.cucumber.junit.CucumberOptions; -import org.junit.runner.RunWith; - -/** - * Test Runner to execute Wrangler plugin test cases. - */ -@RunWith(Cucumber.class) -@CucumberOptions( - features = {"src/e2e-test/features"}, - glue = {"stepsdesign", "io.cdap.plugin.common.stepsdesign", "io.cdap.plugin.wrangler.stepsdesign", - "io.cdap.plugin.wrangler.actions"}, - tags = {"@Wrangler"}, - plugin = {"pretty", "html:target/cucumber-html-report/wrangler-required", - "json:target/cucumber-reports/cucumber-wrangler-required.json", - "junit:target/cucumber-reports/cucumber-wrangler-required.xml"} -) - public class TestRunner { -} diff --git a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/runners/TestRunnerRequired.java b/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/runners/TestRunnerRequired.java deleted file mode 100644 index 868e067ff..000000000 --- a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/runners/TestRunnerRequired.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package io.cdap.plugin.wrangler.runners; - -import io.cucumber.junit.Cucumber; -import io.cucumber.junit.CucumberOptions; -import org.junit.runner.RunWith; - -/** - * Test Runner to execute Wrangler plugin test cases. - */ -@RunWith(Cucumber.class) -@CucumberOptions( - features = {"src/e2e-test/features"}, - glue = {"stepsdesign", "io.cdap.plugin.common.stepsdesign", "io.cdap.plugin.wrangler.stepsdesign"}, - tags = {"@Wrangler_Required"}, - plugin = {"pretty", "html:target/cucumber-html-report/wrangler-required", - "json:target/cucumber-reports/cucumber-wrangler-required.json", - "junit:target/cucumber-reports/cucumber-wrangler-required.xml"} -) -public class TestRunnerRequired { -} diff --git a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/runners/package-info.java b/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/runners/package-info.java deleted file mode 100644 index b90a7504c..000000000 --- a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/runners/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -/** - * Package contains the runners for Wrangler features. - */ -package io.cdap.plugin.wrangler.runners; diff --git a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/stepsdesign/Wrangler.java b/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/stepsdesign/Wrangler.java deleted file mode 100644 index 9d51ea34c..000000000 --- a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/stepsdesign/Wrangler.java +++ /dev/null @@ -1,41 +0,0 @@ -package io.cdap.plugin.wrangler.stepsdesign; -/* - * Copyright © 2023 Cask Data, Inc. - * - * 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. - */ - -import io.cdap.e2e.utils.CdfHelper; -import io.cdap.e2e.utils.PluginPropertyUtils; -import io.cdap.plugin.wrangler.actions.ValidationHelper; -import io.cucumber.java.en.Then; -import org.junit.Assert; - -import java.io.IOException; -import java.net.URISyntaxException; - -/** - * Step Design to execute Wrangler plugin test cases. - */ - -public class Wrangler implements CdfHelper { - - @Then("Validate The Data From BQ To BQ With Actual And Expected File for: {string}") - public void validateTheDataFromBQToBQWithActualAndExpectedFileFor(String expectedFile) throws IOException, - InterruptedException, URISyntaxException { - boolean recordsMatched = ValidationHelper.validateActualDataToExpectedData( - PluginPropertyUtils.pluginProp("bqTargetTable"), - PluginPropertyUtils.pluginProp(expectedFile)); - Assert.assertTrue("Value of records in actual and expected file is equal", recordsMatched); - } -} diff --git a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/stepsdesign/package-info.java b/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/stepsdesign/package-info.java deleted file mode 100644 index 3e212c76c..000000000 --- a/wrangler-transform/src/e2e-test/java/io/cdap/plugin/wrangler/stepsdesign/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright © 2023 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -/** - * Package contains the stepDesign for Wrangler features. - */ -package io.cdap.plugin.wrangler.stepsdesign; diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_DateTime b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_DateTime deleted file mode 100644 index 6c71c6276..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_DateTime +++ /dev/null @@ -1,3 +0,0 @@ -{"create_date":"2025","id":"1","timecolumn":"2006-03-18"} -{"create_date":"2025","id":"2","timecolumn":"2007-03-18"} -{"create_date":"2025","id":"3","timecolumn":"2008-04-19"} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_Timestamp b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_Timestamp deleted file mode 100644 index 5e46afb52..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_Timestamp +++ /dev/null @@ -1,3 +0,0 @@ -{"create_date":"2021-01-21T00:00:00Z","diff_date":594345600000,"format_price":"$1.00","id":1.0,"price":"$1","time":"2018-09-07T14:57:51.892Z","update_date":"2002-03-23T00:00:00"} -{"create_date":"2022-01-22T00:00:00Z","diff_date":562723200000,"format_price":"$2.00","id":2.0,"price":"$2","time":"2018-09-07T14:57:51.896Z","update_date":"2004-03-24T00:00:00"} -{"create_date":"2023-01-23T00:00:00Z","diff_date":652060800000,"format_price":"$3.00","id":3.0,"price":"$3","time":"2018-09-07T14:57:51.898Z","update_date":"2002-05-26T00:00:00"} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_avro b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_avro deleted file mode 100644 index f7ad4b503..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_avro +++ /dev/null @@ -1,3 +0,0 @@ -{"id":1,"name":"ABC","nameNew":"BC","value":1} -{"id":2,"name":"DEF","nameNew":"EF","value":0} -{"id":4,"name":"XYZ","nameNew":"YZ","value":null} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_csv b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_csv deleted file mode 100644 index 048583abb..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_csv +++ /dev/null @@ -1,6 +0,0 @@ -{"abc":"L#89,adam,joy,3","body_2":"adam","body_3":"joy","body_4":3,"body_q":"40","id":"89"} -{"abc":"D#34,aman,,2","body_2":"aman","body_3":"shubh","body_4":2,"body_q":"20","id":"34"} -{"abc":"C#12,ronnie,root,1","body_2":"ronnie","body_3":"root","body_4":1,"body_q":"20","id":"12"} -{"abc":"C#12,ronnie,root,1","body_2":"ronnie","body_3":"root","body_4":1,"body_q":"20","id":"C"} -{"abc":"D#34,aman,,2","body_2":"aman","body_3":"shubh","body_4":2,"body_q":"20","id":"D"} -{"abc":"L#89,adam,joy,3","body_2":"adam","body_3":"joy","body_4":3,"body_q":"40","id":"L"} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_datetimenew b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_datetimenew deleted file mode 100644 index 18f717811..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_datetimenew +++ /dev/null @@ -1,3 +0,0 @@ -{"create_date":"2025","id":1,"timecolumn":"2006-03-18"} -{"create_date":"2025","id":2,"timecolumn":"2007-03-18"} -{"create_date":"2025","id":3,"timecolumn":"2008-04-19"} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_excel b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_excel deleted file mode 100644 index 3c3ae5154..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_excel +++ /dev/null @@ -1,2 +0,0 @@ -{"copiedname":"very","id":0,"name":"very","phone":"8838.0","rollno":"3.0","uniquenum":"very,0"} -{"copiedname":"hello","id":2,"name":"hell","phone":"12345.0","rollno":"1.0","uniquenum":"hello,2"} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_fixedlength b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_fixedlength deleted file mode 100644 index 591e939aa..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_fixedlength +++ /dev/null @@ -1,2 +0,0 @@ -{"fixedlength":"21 10 ABCXYZ","fixedlength_1":"21","fixedlength_3":" ABC","fixedlength_4":"XYZ","fixedlength_encode_base32":"GIYSAIBRGAQCAQKCINMFSWQ=","fixedlength_encode_base32_decode_base32":"21 10 ABCXYZ","id":" 10","url":"http://example.com:80/docs/books/tutorial/index.html?name=networking#DOWNLOADING","url_authority":"example.com:80","url_filename":"/docs/books/tutorial/index.html?name=networking","url_host":"example.com","url_path":"/docs/books/tutorial/index.html","url_port":80,"url_protocol":"http","url_query":"name=networking","url_query_1":"name","url_query_2":"networking"} -{"fixedlength":"19 13 ABCXYZ","fixedlength_1":"19","fixedlength_3":" ABC","fixedlength_4":"XYZ","fixedlength_encode_base32":"GE4SAIBRGMQCAQKCINMFSWQ=","fixedlength_encode_base32_decode_base32":"19 13 ABCXYZ","id":" 13","url":"http://geeks.com:80/docs/chair/tutorial/index.html?name=networking#DOWNLOADING","url_authority":"geeks.com:80","url_filename":"/docs/chair/tutorial/index.html?name=networking","url_host":"geeks.com","url_path":"/docs/chair/tutorial/index.html","url_port":80,"url_protocol":"http","url_query":"name=networking","url_query_1":"name","url_query_2":"networking"} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_fixedlengthnew b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_fixedlengthnew deleted file mode 100644 index 33010a877..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_fixedlengthnew +++ /dev/null @@ -1,2 +0,0 @@ -{"Url":"http://example.com:80/docs/books/tutorial/index.html?name=networking#DOWNLOADING","fixedlength":"21 10 ABCXYZ","fixedlength_1":"21","fixedlength_3":" ABC","fixedlength_4":"XYZ","fixedlength_encode_base32":"GIYSAIBRGAQCAQKCINMFSWQ=","fixedlength_encode_base32_decode_base32":"21 10 ABCXYZ","id":" 10","url_authority":"example.com:80","url_filename":"/docs/books/tutorial/index.html?name=networking","url_host":"example.com","url_path":"/docs/books/tutorial/index.html","url_port":80,"url_protocol":"http","url_query":"name=networking","url_query_1":"name","url_query_2":"networking"} -{"Url":"http://geeks.com:80/docs/chair/tutorial/index.html?name=networking#DOWNLOADING","fixedlength":"19 13 ABCXYZ","fixedlength_1":"19","fixedlength_3":" ABC","fixedlength_4":"XYZ","fixedlength_encode_base32":"GE4SAIBRGMQCAQKCINMFSWQ=","fixedlength_encode_base32_decode_base32":"19 13 ABCXYZ","id":" 13","url_authority":"geeks.com:80","url_filename":"/docs/chair/tutorial/index.html?name=networking","url_host":"geeks.com","url_path":"/docs/chair/tutorial/index.html","url_port":80,"url_protocol":"http","url_query":"name=networking","url_query_1":"name","url_query_2":"networking"} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_hl7 b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_hl7 deleted file mode 100644 index 3d1429529..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_hl7 +++ /dev/null @@ -1,2 +0,0 @@ -{"Body":"s��\u0011y�X��\u0006�H���","Body_hl7_MSH_9_1":"ALM","address":"test","id":"3"} -{"Body":"F<��\u001c����#J��^�:","Body_hl7_MSH_9_1":"BLM","address":"address2","id":"4"} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_hl7new b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_hl7new deleted file mode 100644 index 17724c0aa..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_hl7new +++ /dev/null @@ -1,2 +0,0 @@ -{"Body":"000000000000000000000000000000007382871179b358959d06ed48f27fa3e9","Body_hl7_MSH_9_1":"ALM","address":"test","id":"3"} -{"Body":"00000000000000000000000000000000463cb0c31cb787f0d6234ae8d15e983a","Body_hl7_MSH_9_1":"BLM","address":"address2","id":"4"} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_json b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_json deleted file mode 100644 index 881f21c3c..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_json +++ /dev/null @@ -1,3 +0,0 @@ -{"body":"hello abc","copied":{"first":"Root","last":"joy"},"desc":"nickhello abc","id":22,"json_age":"{\"json_id\":22,\"copied\":{\"first\":\"Root\",\"last\":\"joy\"},\"json_age\":1,\"json_name\":{\"first\":\"Root\",\"last\":\"joy\"},\"json_pet\":\"testing\",\"json_id_json_name\":\"22,{\\\"first\\\":\\\"Root\\\",\\\"last\\\":\\\"joy\\\"}\",\"body\":\"hello abc\",\"desc\":\"nickhello abc\"}","json_id_json_name":"22,{\"first\":\"Root\",\"last\":\"joy\"}","json_name":{"first":"Root","last":"joy"},"json_pet":"testing"} -{"body":"hello def","copied":{"first":"dded","last":"share"},"desc":"hellohello def","id":23,"json_age":"{\"json_id\":23,\"copied\":{\"first\":\"dded\",\"last\":\"share\"},\"json_age\":2,\"json_name\":{\"first\":\"dded\",\"last\":\"share\"},\"json_pet\":\"testing\",\"json_id_json_name\":\"23,{\\\"first\\\":\\\"dded\\\",\\\"last\\\":\\\"share\\\"}\",\"body\":\"hello def\",\"desc\":\"hellohello def\"}","json_id_json_name":"23,{\"first\":\"dded\",\"last\":\"share\"}","json_name":{"first":"dded","last":"share"},"json_pet":"testing"} -{"body":"hello ghi","copied":{"first":"Root","last":"Joltie"},"desc":"domshello ghi","id":24,"json_age":"{\"json_id\":24,\"copied\":{\"first\":\"Root\",\"last\":\"Joltie\"},\"json_age\":3,\"json_name\":{\"first\":\"Root\",\"last\":\"Joltie\"},\"json_pet\":\"testing\",\"json_id_json_name\":\"24,{\\\"first\\\":\\\"Root\\\",\\\"last\\\":\\\"Joltie\\\"}\",\"body\":\"hello ghi\",\"desc\":\"domshello ghi\"}","json_id_json_name":"24,{\"first\":\"Root\",\"last\":\"Joltie\"}","json_name":{"first":"Root","last":"Joltie"},"json_pet":"testing"} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_log b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_log deleted file mode 100644 index eedc04369..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_log +++ /dev/null @@ -1 +0,0 @@ -{"Body_icd_9_description":"Body Post Catalog lookup","body":"127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] \"GET /apache_pb.gif HTTP/1.0\" 200 2326","bytes_response_body_bytes":"2326","bytes_response_body_bytes_last":"2326","http_firstline_request_firstline":"GET /apache_pb.gif HTTP/1.0","http_method_request_firstline_method":"GET","http_path_request_firstline_uri_path":"/apache_pb.gif","http_protocol_request_firstline_protocol":"HTTP","http_protocol_version_request_firstline_protocol":"HTTP/1.0","http_protocol_version_request_firstline_protocol_version":"1.0","http_ref_request_firstline_uri_ref":"no value","http_uri_request_firstline_uri":"/apache_pb.gif","id":1,"ip_connection_client_host":"127.0.0.1","ip_connection_client_host_1":"127.0.0.1","ip_connection_client_host_last":"127.0.0.1","string_connection_client_user":"frank","string_connection_client_user_last":"frank","string_request_status_last":"200","time_date_request_receive_time_date":"2000-10-10","time_date_request_receive_time_date_utc":"2000-10-10","time_date_request_receive_time_last_date":"2000-10-10","time_date_request_receive_time_last_date_utc":"2000-10-10","time_day_request_receive_time_day":"10","time_day_request_receive_time_day_utc":"10","time_day_request_receive_time_last_day":10,"time_day_request_receive_time_last_day_utc":"10","time_epoch_request_receive_time_epoch":"971211336000","time_epoch_request_receive_time_last_epoch":"971211336000","time_hour_request_receive_time_hour":"13","time_hour_request_receive_time_hour_utc":"20","time_hour_request_receive_time_last_hour":"13","time_hour_request_receive_time_last_hour_utc":"20","time_millisecond_request_receive_time_last_millisecond":"0","time_millisecond_request_receive_time_last_millisecond_utc":"0","time_millisecond_request_receive_time_millisecond":"0","time_millisecond_request_receive_time_millisecond_utc":"0","time_minute_request_receive_time_last_minute":"55","time_minute_request_receive_time_last_minute_utc":"55","time_minute_request_receive_time_minute":"55","time_minute_request_receive_time_minute_utc":"55","time_month_request_receive_time_last_month":"10","time_month_request_receive_time_last_month_utc":"10","time_month_request_receive_time_month":"10","time_month_request_receive_time_month_utc":"10","time_monthname_request_receive_time_last_monthname":"October","time_monthname_request_receive_time_last_monthname_utc":"October","time_monthname_request_receive_time_monthname":"October","time_monthname_request_receive_time_monthname_utc":"October","time_second_request_receive_time_last_second":"36","time_second_request_receive_time_last_second_utc":"36","time_second_request_receive_time_second":"36","time_second_request_receive_time_second_utc":"36","time_stamp_request_receive_time":"10/Oct/2000:13:55:36 -0700","time_stamp_request_receive_time_last":"10/Oct/2000:13:55:36 -0700","time_time_request_receive_time_last_time":"13:55:36","time_time_request_receive_time_last_time_utc":"20:55:36","time_time_request_receive_time_time":"13:55:36","time_time_request_receive_time_time_utc":"20:55:36","time_week_request_receive_time_last_weekofweekyear":"41","time_week_request_receive_time_last_weekofweekyear_utc":"41","time_week_request_receive_time_weekofweekyear":"41","time_week_request_receive_time_weekofweekyear_utc":"41","time_year_request_receive_time_last_weekyear":"2000","time_year_request_receive_time_last_weekyear_utc":"2000","time_year_request_receive_time_last_year":"2000","time_year_request_receive_time_last_year_utc":"2000","time_year_request_receive_time_weekyear":"2000","time_year_request_receive_time_weekyear_utc":"2000","time_year_request_receive_time_year":"2000","time_year_request_receive_time_year_utc":"2000"} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_xmltojson b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_xmltojson deleted file mode 100644 index 4a72c0069..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_parse_xmltojson +++ /dev/null @@ -1,6 +0,0 @@ -{"distance":2.0,"distance2":0.3571428656578064,"email":"abc01@mail.com","email_domain":{"distance":2.0,"email_account":"abc01"},"email_porter":["abc","mail","com"],"id":"1","xmldata_note":{"body":"Dont forget me this week!","from":"Tani","heading":"Reminder","to":"Tove"}} -{"distance":2.0,"distance2":0.3571428656578064,"email":"def02@mail.com","email_domain":{"distance":2.0,"email_account":"def02"},"email_porter":["def","mail","com"],"id":"2","xmldata_note":{"body":"Dont forget us this holiday!","from":"joy","heading":"Reminder","to":"Tove"}} -{"distance":2.0,"distance2":0.3571428656578064,"email":"abc01@mail.com","email_domain":{"distance":2.0,"email_account":"abc01"},"email_porter":["abc","mail","com"],"id":"abc","xmldata_note":{"body":"Dont forget me this week!","from":"Tani","heading":"Reminder","to":"Tove"}} -{"distance":2.0,"distance2":0.3571428656578064,"email":"ghi03@mail.com","email_domain":{"distance":2.0,"email_account":"ghi03"},"email_porter":["ghi","mail","com"],"id":"3","xmldata_note":{"body":"Dont forget him this weekend!","from":"shree","heading":"Reminder","to":"Tove"}} -{"distance":2.0,"distance2":0.3571428656578064,"email":"def02@mail.com","email_domain":{"distance":2.0,"email_account":"def02"},"email_porter":["def","mail","com"],"id":"def","xmldata_note":{"body":"Dont forget us this holiday!","from":"joy","heading":"Reminder","to":"Tove"}} -{"distance":2.0,"distance2":0.3571428656578064,"email":"ghi03@mail.com","email_domain":{"distance":2.0,"email_account":"ghi03"},"email_porter":["ghi","mail","com"],"id":"ghi","xmldata_note":{"body":"Dont forget him this weekend!","from":"shree","heading":"Reminder","to":"Tove"}} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_wrangler_GroupBy b/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_wrangler_GroupBy deleted file mode 100644 index d02f42a93..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQValidationExpectedFiles/Directive_wrangler_GroupBy +++ /dev/null @@ -1,5 +0,0 @@ -{"city":"San Jose","cityFirst":"San Jose","firstname":"DOUGLAS","id":"1","lastname":"Williams","state":"CA","zipcode":923564293} -{"city":"Houston","cityFirst":"Houston","firstname":"DAVID","id":"2","lastname":"Johnson","state":"TX","zipcode":1738378970} -{"city":"Manhattan","cityFirst":"Manhattan","firstname":"HUGH","id":"3","lastname":"Jackman","state":"NY","zipcode":-1863622247} -{"city":"San Diego","cityFirst":"San Diego","firstname":"FRANK","id":"5","lastname":"Underwood","state":"CA","zipcode":-1317090526} -{"city":"New York","cityFirst":"New York","firstname":"SARTHAK","id":"7","lastname":"Dash","state":"NY","zipcode":-1949601773} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQuery.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQuery.txt deleted file mode 100644 index 2ad22ced8..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQuery.txt +++ /dev/null @@ -1,2 +0,0 @@ -create table `DATASET.TABLE_NAME` (id STRING, firstname STRING, lastname STRING, streetAddress STRING, -city STRING, state STRING, zipcode BIGINT, phoneNumber BIGINT) \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryAvro.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryAvro.txt deleted file mode 100644 index 1fc92efa6..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryAvro.txt +++ /dev/null @@ -1 +0,0 @@ -create table `DATASET.TABLE_NAME` (id INTEGER, body BYTES) \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryCsv.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryCsv.txt deleted file mode 100644 index dbb47af31..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryCsv.txt +++ /dev/null @@ -1 +0,0 @@ -create table `DATASET.TABLE_NAME` (body STRING) diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryDatetime.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryDatetime.txt deleted file mode 100644 index 026e4eedf..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryDatetime.txt +++ /dev/null @@ -1 +0,0 @@ -create table `DATASET.TABLE_NAME` (id BIGINT, create_date STRING, timestamp STRING) \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryFxdlen.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryFxdlen.txt deleted file mode 100644 index 8e98a195c..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryFxdlen.txt +++ /dev/null @@ -1 +0,0 @@ -create table `DATASET.TABLE_NAME` (Url STRING, fixedlength STRING) \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryLog.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryLog.txt deleted file mode 100644 index 06b7075ec..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryLog.txt +++ /dev/null @@ -1 +0,0 @@ -create table `DATASET.TABLE_NAME` (id INTEGER, body STRING(100)) \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryTimestamp.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryTimestamp.txt deleted file mode 100644 index 852efe2c5..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryTimestamp.txt +++ /dev/null @@ -1 +0,0 @@ -create table `DATASET.TABLE_NAME` (create_date STRING, update_date STRING, time BIGINT, price STRING) \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryXml.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryXml.txt deleted file mode 100644 index a711921e2..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryXml.txt +++ /dev/null @@ -1 +0,0 @@ -create table `DATASET.TABLE_NAME` (email STRING, xmldata STRING) diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryhl7.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryhl7.txt deleted file mode 100644 index 6af1bd254..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryCreateTableQueryhl7.txt +++ /dev/null @@ -1 +0,0 @@ -create table `DATASET.TABLE_NAME` (address STRING, Body STRING) diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQuery.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQuery.txt deleted file mode 100644 index ba7441f97..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQuery.txt +++ /dev/null @@ -1,10 +0,0 @@ -INSERT INTO DATASET.TABLE_NAME (id, firstname, lastname, streetAddress, city, state, zipcode, phoneNumber) -VALUES -('5', 'Frank', 'Underwood', '1609 Far St.', 'San Diego', 'CA', 2977876770, 19061512345), -('1', 'Douglas', 'Williams', '1 Vista Montana', 'San Jose', 'CA', 9513498885, 35834612345), -('4', 'Walter', 'White', '3828 Piermont Dr', 'Orlando', 'FL', 7349864532, 7829812345), -('3', 'Hugh', 'Jackman', '5, Cool Way', 'Manhattan', 'NY', 6726312345, 1695412345), -('7', 'Sarthak', 'Dash', '123 Far St.', 'New York', 'NY', 2345365523, 1324812345), -('6', 'Serena', 'Woods', '123 Far St.', 'Las Vegas', 'NV', 4533456734, 78919612345), -('2', 'David', 'Johnson', '3 Baypointe Parkway', 'Houston', 'TX', 1738378970, 1451412345), -('8', 'Rahul', 'Dash', '22 MG Road.', 'Bangalore', 'KA',NULL, 94864612345); \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryAvro.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryAvro.txt deleted file mode 100644 index c0004e366..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryAvro.txt +++ /dev/null @@ -1,3 +0,0 @@ -INSERT INTO DATASET.TABLE_NAME (body) -VALUES -(FROM_BASE64("T2JqAQQUYXZyby5jb2RlYwhudWxsFmF2cm8uc2NoZW1htgJ7InR5cGUiOiJyZWNvcmQiLCJuYW1lIjoiUmVjb3JkIiwiZmllbGRzIjpbeyJuYW1lIjoiaWQiLCJ0eXBlIjoibG9uZyJ9LHsibmFtZSI6Im5hbWUiLCJ0eXBlIjpbIm51bGwiLCJzdHJpbmciXX0seyJuYW1lIjoidmFsdWUiLCJ0eXBlIjpbIm51bGwiLCJkb3VibGUiXX1dfQDPLTa6WtteXtkAuF/3puB+CGACAgZBQkMCWDm0yHa+8z8EAgZERUYCAAAAAAAAAAAGAAKuR+E6gskyQQgCBlhZWgDPLTa6WtteXtkAuF/3puB+")) \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryCsv.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryCsv.txt deleted file mode 100644 index a4f07c60a..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryCsv.txt +++ /dev/null @@ -1,5 +0,0 @@ -INSERT INTO DATASET.TABLE_NAME (body) -VALUES -('C#12,ronnie,root,1'), -('D#34,aman,,2'), -('L#89,adam,joy,3'); diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryDatetime.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryDatetime.txt deleted file mode 100644 index b3361bc86..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryDatetime.txt +++ /dev/null @@ -1,5 +0,0 @@ -INSERT INTO DATASET.TABLE_NAME (id,create_date,timestamp) -VALUES -(1,'2021-01-21','2006-02-18T05:03:42Z[UTC]'), -(2,'2022-02-22','2007-01-18T04:03:22Z[UTC]'), -(3,'2023-03-23','2008-07-19T08:04:22Z[UTC]'); diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryFxdlen.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryFxdlen.txt deleted file mode 100644 index d1f9353b2..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryFxdlen.txt +++ /dev/null @@ -1,5 +0,0 @@ -INSERT INTO DATASET.TABLE_NAME (Url,fixedlength) -VALUES -('http://example.com:80/docs/books/tutorial/index.html?name=networking#DOWNLOADING','21 10 ABCXYZ'), -('http://geeks.com:80/docs/chair/tutorial/index.html?name=networking#DOWNLOADING','19 13 ABCXYZ'), -('http://amazing.com:80/docs/tables/tutorial/index.html?name=networking#DOWNLOADING','18 14 CDEFGH'); diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryHl7.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryHl7.txt deleted file mode 100644 index 9afa292e3..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryHl7.txt +++ /dev/null @@ -1,5 +0,0 @@ -INSERT INTO DATASET.TABLE_NAME (address,Body) -VALUES -('address1','MSH|^~?2||.|||199908180016||ADT^A04|ADT.1.1698593|P|3'), -('address2','MSH|^~?2||.|||199908180016||BSC^A04|ADT.1.1698593|P|4'), -('','MSH|^~?2||.|||199908180016||JKL^A04|ADT.1.1698593|P|5'); diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryLog.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryLog.txt deleted file mode 100644 index c5d4137f3..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryLog.txt +++ /dev/null @@ -1,3 +0,0 @@ -INSERT INTO DATASET.TABLE_NAME (id,body) -VALUES -(1,'127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326'); diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryTimestamp.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryTimestamp.txt deleted file mode 100644 index d1626f14c..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryTimestamp.txt +++ /dev/null @@ -1,5 +0,0 @@ -INSERT INTO DATASET.TABLE_NAME (create_date,update_date,time,price) -VALUES -('2021-01-21','2002-03-23',1536332271892,'$1'), -('2022-01-22','2004-03-24',1536332271896,'$2'), -('2023-01-23','2002-05-26',1536332271898,'$3'); diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryXml.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryXml.txt deleted file mode 100644 index 0dc9608ce..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryXml.txt +++ /dev/null @@ -1,5 +0,0 @@ -INSERT INTO DATASET.TABLE_NAME (email,xmldata) -VALUES -('abc01@mail.com',' Tove Tani Reminder Dont forget me this week! '), -('def02@mail.com',' Tove joy Reminder Dont forget us this holiday! '), -('ghi03@mail.com',' Tove shree Reminder Dont forget him this weekend! '); diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryparsejson.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryparsejson.txt deleted file mode 100644 index dc9fa7d17..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQueryInsertDataQueryparsejson.txt +++ /dev/null @@ -1,6 +0,0 @@ -INSERT INTO DATASET.TABLE_NAME (body,json) -VALUES -(' hello abc', '{"id": 1, "name": {"first": "Root", "last": "joy"}, "age": 22, "pet": "nick", "height": 5.8}'), -('hello def', '{"id": 2, "name": {"first": "dded", "last": "share"}, "age": 23, "pet": "hello", "height": 6.8}'), -('hello ghi', '{"id": 3, "name": {"first": "Root", "last": "Joltie"}, "age": 24, "pet": "doms", "height": 7.8}'); - diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQuerycreateTableQueryjson.txt b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQuerycreateTableQueryjson.txt deleted file mode 100644 index be6b585ea..000000000 --- a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/BigQuerycreateTableQueryjson.txt +++ /dev/null @@ -1 +0,0 @@ -create table `DATASET.TABLE_NAME` (body STRING, json STRING) \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/test1.xlsx b/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/test1.xlsx deleted file mode 100644 index adaa5291b..000000000 Binary files a/wrangler-transform/src/e2e-test/resources/BQtesdata/BigQuery/test1.xlsx and /dev/null differ diff --git a/wrangler-transform/src/e2e-test/resources/errorMessage.properties b/wrangler-transform/src/e2e-test/resources/errorMessage.properties deleted file mode 100644 index 22b9f5edc..000000000 --- a/wrangler-transform/src/e2e-test/resources/errorMessage.properties +++ /dev/null @@ -1,3 +0,0 @@ -validationSuccessMessage=No errors found. -errorMessageInvalidInputFieldName=Field 'invalid' must be present in input schema. -errorMessageSqlError=Directives are not supported for precondition of type SQL diff --git a/wrangler-transform/src/e2e-test/resources/pluginDataCyAttributes.properties b/wrangler-transform/src/e2e-test/resources/pluginDataCyAttributes.properties deleted file mode 100644 index d3890e916..000000000 --- a/wrangler-transform/src/e2e-test/resources/pluginDataCyAttributes.properties +++ /dev/null @@ -1,47 +0,0 @@ -projectId=project -datasetProjectId=datasetProject -referenceName=referenceName -table=table -tableKey=relationTableKey -clusterOrder=clusteringOrder -dataset=dataset -skipHeader=switch-skipHeader -path=path -name=name -truncateTable=switch-truncateTable -truncateTableMacroInput=truncateTable -updateTableSchema=switch-allowSchemaRelaxation -updateTableSchemaMacroInput=allowSchemaRelaxation -format=select-format -formatMacroInput=format -requirePartitionFilter=switch-requirePartitionField -requirePartitionFilterMacroInput=requirePartitionField -partitioningType=partitioningType -partitionStartDate=partitionFrom -partitionEndDate=partitionTo -filter=filter -instanceId=instance -databaseName=database -tableName=table -sql=sql -jobLocation=location -storeResultsInBigQueryTable=switch-storeResults -rowAsArguments=switch-rowAsArguments -serviceAccountType=serviceAccountType -serviceAccountFilePath=serviceFilePath -serviceAccountJSON=serviceAccountJSON -outputSchemaMacroInput=Output Schema-macro-input -flexibleSchema=switch-allowFlexibleSchema -updateSchema=allowSchemaRelaxation - -## CONNECTION-MANAGEMENT-START -connection=connection -useConnection=switch-useConnection -addConnection=add-connection-button -gcsConnectionRow=connector-GCS -bqConnectionRow=connector-BigQuery -spannerConnectionRow=connector-Spanner -testConnection=connection-test-button -connectionCreate=connection-submit-button -parsingOptionConfirm=parsing-config-confirm -## CONNECTION-MANAGEMENT-END diff --git a/wrangler-transform/src/e2e-test/resources/pluginDataTestIdAttributes.properties b/wrangler-transform/src/e2e-test/resources/pluginDataTestIdAttributes.properties deleted file mode 100644 index fe2cbde25..000000000 --- a/wrangler-transform/src/e2e-test/resources/pluginDataTestIdAttributes.properties +++ /dev/null @@ -1,64 +0,0 @@ -ChangeDataType=changeDataType -SendToError=markAsError -SwapTwoColumnNames=swapColumns -DeleteColumn=dropColumn -Hash=hash -Parse=parse -MaskData=maskData -FindAndReplace=findAndReplace -Format=format -Calculate=calculate -CustomTransform=customTransform -Filter=filter -FillNullOrEmptyCells=fillNullOrEmpty -CopyColumn=copyColumn -KeepColumn=keepColumn -ExtractFields=extractFields -Explode=explode -DefineVariable=defineVariable -SetCounter=setCounter -Concatenate=CONCATENATE -Always=ALWAYS -Integer=integer -Comma=COMMA -Common=COMMON -Tab=TAB -Space=SPACE -Pipe=PIPE -CONTROL_A=^A -CONTROL_D=^D -CSV=csv -Avro=AVRO -EXCEL=excel -JSON=singleField -XMLTOJSON=xmlToJson -LOG=log -SIMPLEDATE=dateFormats -DATETIME=dateFormats -FIXEDLENGTH=singleField -HL7=HL7 -Decimal=decimal -lowercase=LOWERCASE -Trim_Whitespace=TRIM_WHITESPACE -Character_count=CHARCOUNT -Using_patterns=patterns -Using_delimiters=delimiters -Delimited_text=delimited -Array_(by_flattening)=arrayFlattening -Record_(by_flattening)=recordFlattening -Show_last_4_characters_only=last4Chars -Show_last_2_characters_only=last2Chars -Custom_selection=customSelection -By_shuffling=shuffling -value_is_empty=EMPTY -value_is=TEXTEXACTLY -value_contains=TEXTCONTAINS -value_starts_with=TEXTSTARTSWITH -Trim_leading_whitespace=TRIM_LEADING_WHITESPACE -Custom_Format=CUSTOM -yyyy-MM-dd=OPTION5 - - - - - diff --git a/wrangler-transform/src/e2e-test/resources/pluginParameters.properties b/wrangler-transform/src/e2e-test/resources/pluginParameters.properties deleted file mode 100644 index 17ec4b64a..000000000 --- a/wrangler-transform/src/e2e-test/resources/pluginParameters.properties +++ /dev/null @@ -1,67 +0,0 @@ -#json file path -Directive_parse_Fixed_Length=testData/Wrangler/parse_fixedlength_wrangler-cdap-data-pipeline.json -Directive_parse_hl7=testData/Wrangler/parse_HL7_Wrangler-cdap-data-pipeline (1).json -Directive_parse_Timestamp=testData/Wrangler/parse_timestamp_wrangle-cdap-data-pipeline.json -Directive_parse_Datetime=testData/Wrangler/parse_datetime_wrangler-cdap-data-pipeline.json -Directive_parse_json=testData/Wrangler/parse_json_wrangler1-cdap-data-pipeline.json -Directive_parse_xml=testData/Wrangler/parse_xmltojson_wrangler-cdap-data-pipeline (1).json -Directive_parse_excel=testData/Wrangler/parse_excel_wrangler_copy-cdap-data-pipeline.json -Directive_parse_csv=testData/Wrangler\ - /parse_csv_wrangle-cdap-data-pipeline.json -Directive_parse_avro=testData/Wrangler/parseAsAvro-cdap-data-pipeline (1).json -Directive_parse_log=testData/Wrangler/parse_log_wrangler_copy-cdap-data-pipeline.json -Directive_GroupBy=testData/Wrangler/BQ2BQwithWrnglerNGrpby-cdap-data-pipeline (1).json -bqSourceTable=dummy -bqSourceTableExcel=excelTab -bqTargetTable=dummy -sourcePath=example/hello.csv -gcsSourceBucket=dummy -testFile=BQtesdata/BigQuery/test1.xlsx -fields=* -expressionLanguage=JEXL -onError=Fail pipeline -precondition=false -#bq queries file path - -CreateBQDataQueryFileFxdLen=BQtesdata/BigQuery/BigQueryCreateTableQueryFxdlen.txt -InsertBQDataQueryFileFxdLen=BQtesdata/BigQuery/BigQueryInsertDataQueryFxdlen.txt -CreateBQDataQueryFileHl7=BQtesdata/BigQuery/BigQueryCreateTableQueryhl7.txt -InsertBQDataQueryFileHl7=BQtesdata/BigQuery/BigQueryInsertDataQueryHl7.txt -CreateBQDataQueryFileTimestamp=BQtesdata/BigQuery/BigQueryCreateTableQueryTimestamp.txt -InsertBQDataQueryFileTimestamp=BQtesdata/BigQuery/BigQueryInsertDataQueryTimestamp.txt -CreateBQDataQueryFileDatetime=BQtesdata/BigQuery/BigQueryCreateTableQueryDatetime.txt -InsertBQDataQueryFileDatetime=BQtesdata/BigQuery/BigQueryInsertDataQueryDatetime.txt -CreateBQTableQueryFileJson=BQtesdata/BigQuery/BigQuerycreateTableQueryjson.txt -InsertBQDataQueryFileJson=BQtesdata/BigQuery/BigQueryInsertDataQueryparsejson.txt -CreateBQDataQueryFileXml=BQtesdata/BigQuery/BigQueryCreateTableQueryXml.txt -InsertBQDataQueryFileXml=BQtesdata/BigQuery/BigQueryInsertDataQueryXml.txt -CreateBQTableQueryFileCsv=BQtesdata/BigQuery/BigQueryCreateTableQueryCsv.txt -InsertBQDataQueryFileCsv=BQtesdata/BigQuery/BigQueryInsertDataQueryCsv.txt -CreateBQTableQueryFileAvro=BQtesdata/BigQuery/BigQueryCreateTableQueryAvro.txt -InsertBQDataQueryFileAvro=BQtesdata/BigQuery/BigQueryInsertDataQueryAvro.txt -CreateBQTableQueryFileLog=BQtesdata/BigQuery/BigQueryCreateTableQueryLog.txt -InsertBQDataQueryFileLog=BQtesdata/BigQuery/BigQueryInsertDataQueryLog.txt -CreateBQTableQueryFile=BQtesdata/BigQuery/BigQueryCreateTableQuery.txt -InsertBQDataQueryFile=BQtesdata/BigQuery/BigQueryInsertDataQuery.txt - -#bq properties -projectId=cdf-athena -dataset=Wrangler_Test -dataset2=Wrangler -#expectedBQFiles -ExpectedDirective_GroupBy=BQValidationExpectedFiles/Directive_wrangler_GroupBy -filterEmptyProperty=value is empty - -ExpectedDirective_parse_FixedLength=BQValidationExpectedFiles/Directive_parse_fixedlength -ExpectedDirective_parse_hl7=BQValidationExpectedFiles/Directive_parse_hl7 -ExpectedDirective_parse_Datetime=BQValidationExpectedFiles/Directive_parse_DateTime -ExpectedDirective_parse_Timestamp=BQValidationExpectedFiles/Directive_parse_Timestamp -ExpectedDirective_parse_json=BQValidationExpectedFiles/Directive_parse_json -ExpectedDirective_parse_xml=BQValidationExpectedFiles/Directive_parse_xmltojson -ExpectedDirective_parse_excel=BQValidationExpectedFiles/Directive_parse_excel -ExpectedDirective_parse_csv=BQValidationExpectedFiles/Directive_parse_csv -ExpectedDirective_parse_avro=BQValidationExpectedFiles/Directive_parse_avro -ExpectedDirective_parse_log=BQValidationExpectedFiles/Directive_parse_log -ExpectedDirective_parse_hl7_new=BQValidationExpectedFiles/Directive_parse_hl7new -ExpectedDirective_parse_DatetimeNew=BQValidationExpectedFiles/Directive_parse_datetimenew -ExpectedDirective_parse_FixedLengthnew=BQValidationExpectedFiles/Directive_parse_fixedlengthnew diff --git a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/BQ2BQwithWrnglerNGrpby-cdap-data-pipeline (1).json b/wrangler-transform/src/e2e-test/resources/testData/Wrangler/BQ2BQwithWrnglerNGrpby-cdap-data-pipeline (1).json deleted file mode 100644 index af52909d5..000000000 --- a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/BQ2BQwithWrnglerNGrpby-cdap-data-pipeline (1).json +++ /dev/null @@ -1,215 +0,0 @@ -{ - "name": "BQ2BQwithWrnglerNGrpby", - "description": "Data Pipeline Application", - "artifact": { - "name": "cdap-data-pipeline", - "version": "[6.0.0, 7.0.0)", - "scope": "SYSTEM" - }, - "config": { - "resources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "connections": [ - { - "from": "BigQueryTable", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "Group By" - }, - { - "from": "Group By", - "to": "BigQuery2" - } - ], - "postActions": [], - "properties": {}, - "processTimingEnabled": true, - "stageLoggingEnabled": true, - "stages": [ - { - "name": "BigQueryTable", - "plugin": { - "name": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "dataset": "wrangler_ankit", - "table": "joinerTest", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"firstname\",\"type\":[\"string\",\"null\"]},{\"name\":\"lastname\",\"type\":[\"string\",\"null\"]},{\"name\":\"streetAddress\",\"type\":[\"string\",\"null\"]},{\"name\":\"city\",\"type\":[\"string\",\"null\"]},{\"name\":\"state\",\"type\":[\"string\",\"null\"]},{\"name\":\"zipcode\",\"type\":[\"long\",\"null\"]},{\"name\":\"phoneNumber\",\"type\":[\"long\",\"null\"]}]}", - "enableQueryingViews": "false", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"firstname\",\"type\":[\"string\",\"null\"]},{\"name\":\"lastname\",\"type\":[\"string\",\"null\"]},{\"name\":\"streetAddress\",\"type\":[\"string\",\"null\"]},{\"name\":\"city\",\"type\":[\"string\",\"null\"]},{\"name\":\"state\",\"type\":[\"string\",\"null\"]},{\"name\":\"zipcode\",\"type\":[\"long\",\"null\"]},{\"name\":\"phoneNumber\",\"type\":[\"long\",\"null\"]}]}" - } - ], - "id": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "icon": "fa-plug", - "$$hashKey": "object:1585", - "isPluginAvailable": true, - "_uiPosition": { - "left": "346px", - "top": "343px" - } - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform" - }, - "properties": { - "directives": "drop phonenumber\nuppercase :firstname\nset-type :zipcode integer \nfind-and-replace :streetAddress s/St./Street/Ig\nset-column :lastname_count string:length(lastname)\nfilter-rows-on regex-match lastname_count .*5.*\nfilter-rows-on condition-true zipcode == null || zipcode =~ \"^\\W*$\"", - "field": "*", - "precondition": "false", - "workspaceId": "fb521d04-7644-4ec4-b545-837980f402cf", - "schema": "{\"type\":\"record\",\"name\":\"record\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"firstname\",\"type\":[\"string\",\"null\"]},{\"name\":\"lastname\",\"type\":[\"string\",\"null\"]},{\"name\":\"streetAddress\",\"type\":[\"string\",\"null\"]},{\"name\":\"city\",\"type\":[\"string\",\"null\"]},{\"name\":\"state\",\"type\":[\"string\",\"null\"]},{\"name\":\"zipcode\",\"type\":[\"int\",\"null\"]},{\"name\":\"lastname_count\",\"type\":[\"int\",\"null\"]}]}", - "on-error": "fail-pipeline" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"record\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"firstname\",\"type\":[\"string\",\"null\"]},{\"name\":\"lastname\",\"type\":[\"string\",\"null\"]},{\"name\":\"streetAddress\",\"type\":[\"string\",\"null\"]},{\"name\":\"city\",\"type\":[\"string\",\"null\"]},{\"name\":\"state\",\"type\":[\"string\",\"null\"]},{\"name\":\"zipcode\",\"type\":[\"int\",\"null\"]},{\"name\":\"lastname_count\",\"type\":[\"int\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "BigQueryTable", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"firstname\",\"type\":[\"string\",\"null\"]},{\"name\":\"lastname\",\"type\":[\"string\",\"null\"]},{\"name\":\"streetAddress\",\"type\":[\"string\",\"null\"]},{\"name\":\"city\",\"type\":[\"string\",\"null\"]},{\"name\":\"state\",\"type\":[\"string\",\"null\"]},{\"name\":\"zipcode\",\"type\":[\"long\",\"null\"]},{\"name\":\"phoneNumber\",\"type\":[\"long\",\"null\"]}]}" - } - ], - "id": "Wrangler", - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataPreparation", - "$$hashKey": "object:1586", - "isPluginAvailable": true, - "_uiPosition": { - "left": "646px", - "top": "343px" - } - }, - { - "name": "Group By", - "plugin": { - "name": "GroupByAggregate", - "type": "batchaggregator", - "label": "Group By", - "artifact": { - "name": "core-plugins" - }, - "properties": { - "groupByFields": "city,firstname,lastname,state,zipcode,id", - "aggregates": "cityFirst:First(city)" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"record.typeagg\",\"fields\":[{\"name\":\"city\",\"type\":[\"string\",\"null\"]},{\"name\":\"firstname\",\"type\":[\"string\",\"null\"]},{\"name\":\"lastname\",\"type\":[\"string\",\"null\"]},{\"name\":\"state\",\"type\":[\"string\",\"null\"]},{\"name\":\"zipcode\",\"type\":[\"int\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"cityFirst\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"record\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"firstname\",\"type\":[\"string\",\"null\"]},{\"name\":\"lastname\",\"type\":[\"string\",\"null\"]},{\"name\":\"streetAddress\",\"type\":[\"string\",\"null\"]},{\"name\":\"city\",\"type\":[\"string\",\"null\"]},{\"name\":\"state\",\"type\":[\"string\",\"null\"]},{\"name\":\"zipcode\",\"type\":[\"int\",\"null\"]},{\"name\":\"lastname_count\",\"type\":[\"int\",\"null\"]}]}" - } - ], - "id": "Group-By", - "type": "batchaggregator", - "label": "Group By", - "icon": "icon-groupbyaggregate", - "$$hashKey": "object:1587", - "isPluginAvailable": true, - "_uiPosition": { - "left": "946px", - "top": "343px" - } - }, - { - "name": "BigQuery2", - "plugin": { - "name": "BigQueryTable", - "type": "batchsink", - "label": "BigQuery2", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "dataset": "wrangler_ankit", - "table": "joinTestOutput", - "operation": "insert", - "truncateTable": "false", - "allowSchemaRelaxation": "false", - "location": "US", - "createPartitionedTable": "false", - "partitioningType": "TIME", - "partitionFilterRequired": "false", - "schema": "{\"type\":\"record\",\"name\":\"record.typeagg\",\"fields\":[{\"name\":\"city\",\"type\":[\"string\",\"null\"]},{\"name\":\"firstname\",\"type\":[\"string\",\"null\"]},{\"name\":\"lastname\",\"type\":[\"string\",\"null\"]},{\"name\":\"state\",\"type\":[\"string\",\"null\"]},{\"name\":\"zipcode\",\"type\":[\"int\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"cityFirst\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"record.typeagg\",\"fields\":[{\"name\":\"city\",\"type\":[\"string\",\"null\"]},{\"name\":\"firstname\",\"type\":[\"string\",\"null\"]},{\"name\":\"lastname\",\"type\":[\"string\",\"null\"]},{\"name\":\"state\",\"type\":[\"string\",\"null\"]},{\"name\":\"zipcode\",\"type\":[\"int\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"cityFirst\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Group By", - "schema": "{\"type\":\"record\",\"name\":\"record.typeagg\",\"fields\":[{\"name\":\"city\",\"type\":[\"string\",\"null\"]},{\"name\":\"firstname\",\"type\":[\"string\",\"null\"]},{\"name\":\"lastname\",\"type\":[\"string\",\"null\"]},{\"name\":\"state\",\"type\":[\"string\",\"null\"]},{\"name\":\"zipcode\",\"type\":[\"int\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"cityFirst\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQuery2", - "type": "batchsink", - "label": "BigQuery2", - "icon": "fa-plug", - "$$hashKey": "object:1588", - "isPluginAvailable": true, - "_uiPosition": { - "left": "1246px", - "top": "343px" - } - } - ], - "schedule": "0 1 */1 * *", - "engine": "spark", - "numOfRecordsPreview": 100, - "rangeRecordsPreview": { - "min": 1, - "max": "5000" - }, - "description": "Data Pipeline Application", - "maxConcurrentRuns": 1, - "pushdownEnabled": false, - "transformationPushdown": {} - }, - "version": "714034ca-5154-11ee-9b22-000000505066" -} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parseAsAvro-cdap-data-pipeline (1).json b/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parseAsAvro-cdap-data-pipeline (1).json deleted file mode 100644 index 60aedd429..000000000 --- a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parseAsAvro-cdap-data-pipeline (1).json +++ /dev/null @@ -1,704 +0,0 @@ -{ - "name": "parseAsAvro", - "description": "Data Pipeline Application", - "artifact": { - "name": "cdap-data-pipeline", - "version": "[6.0.0, 7.0.0)", - "scope": "SYSTEM" - }, - "config": { - "resources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "connections": [ - { - "from": "BigQueryTable", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "BigQuery2" - } - ], - "postActions": [], - "properties": {}, - "processTimingEnabled": true, - "stageLoggingEnabled": true, - "stages": [ - { - "name": "BigQueryTable", - "plugin": { - "name": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "dataset": "wrangler_ankit", - "table": "avroTable", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"body\",\"type\":[\"bytes\",\"null\"]}]}", - "enableQueryingViews": "false", - "referenceName": "ref", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"body\",\"type\":[\"bytes\",\"null\"]}]}" - } - ], - "id": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "icon": "fa-plug", - "$$hashKey": "object:31", - "isPluginAvailable": true, - "_uiPosition": { - "left": "496px", - "top": "343px" - }, - "_backendProperties": { - "schema": { - "name": "schema", - "description": "The schema of the table to read.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "viewMaterializationDataset": { - "name": "viewMaterializationDataset", - "description": "The dataset in the specified project where the temporary table should be created. Defaults to the same dataset in which the table is located.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "enableQueryingViews": { - "name": "enableQueryingViews", - "description": "Whether to allow querying views. Since BigQuery views are not materialized by default, querying them may have a performance overhead.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceAccountJSON": { - "name": "serviceAccountJSON", - "description": "Content of the service account file.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitionTo": { - "name": "partitionTo", - "description": "It's inclusive partition end date. It should be a String with format \"yyyy-MM-dd\". This value is ignored if the table does not support partitioning.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "cmekKey": { - "name": "cmekKey", - "description": "The GCP customer managed encryption key (CMEK) name used to encrypt data written to any bucket, dataset or table created by the plugin. If the bucket, dataset or table already exists, this is ignored. More information can be found at https://cloud.google.com/data-fusion/docs/how-to/customer-managed-encryption-keys", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "useConnection": { - "name": "useConnection", - "description": "Whether to use an existing connection.", - "type": "boolean", - "required": false, - "macroSupported": false, - "macroEscapingEnabled": false, - "children": [] - }, - "project": { - "name": "project", - "description": "Google Cloud Project ID. It can be found on the Dashboard in the Google Cloud Platform Console.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "viewMaterializationProject": { - "name": "viewMaterializationProject", - "description": "The project name where the temporary table should be created. Defaults to the same project in which the table is located.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "filter": { - "name": "filter", - "description": "The WHERE clause filters out rows by evaluating each row against boolean expression, and discards all rows that do not return TRUE (that is, rows that return FALSE or NULL).", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "bucket": { - "name": "bucket", - "description": "The Google Cloud Storage bucket to store temporary data in. Cloud Storage data will be deleted after it is loaded into BigQuery. If it is not provided, a unique bucket will be automatically created and then deleted after the run finishes. The service account must have permission to create buckets in the configured project.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitionFrom": { - "name": "partitionFrom", - "description": "It's inclusive partition start date. It should be a String with format \"yyyy-MM-dd\". This value is ignored if the table does not support partitioning.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceFilePath": { - "name": "serviceFilePath", - "description": "Path on the local file system of the service account key used for authorization. Can be set to 'auto-detect' when running on a Dataproc cluster. When running on other clusters, the file must be present on every node in the cluster.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceAccountType": { - "name": "serviceAccountType", - "description": "Service account type, file path where the service account is located or the JSON content of the service account.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "connection": { - "name": "connection", - "description": "The existing connection to use.", - "type": "bigqueryconnectorconfig", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [ - "serviceAccountJSON", - "serviceFilePath", - "project", - "serviceAccountType", - "datasetProject" - ] - }, - "datasetProject": { - "name": "datasetProject", - "description": "The project the dataset belongs to. This is only required if the dataset is not in the same project that the BigQuery job will run in. If no value is given, it will default to the configured project ID.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "dataset": { - "name": "dataset", - "description": "The dataset to write to. A dataset is contained within a specific project. Datasets are top-level containers that are used to organize and control access to tables and views.", - "type": "string", - "required": true, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "table": { - "name": "table", - "description": "The table to read from. A table contains individual records organized in rows. Each record is composed of columns (also called fields). Every table is defined by a schema that describes the column names, data types, and other information.", - "type": "string", - "required": true, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "referenceName": { - "name": "referenceName", - "description": "This will be used to uniquely identify this source for lineage, annotating metadata, etc.", - "type": "string", - "required": false, - "macroSupported": false, - "macroEscapingEnabled": false, - "children": [] - } - }, - "description": "This source reads the entire contents of a BigQuery table. BigQuery is Google's serverless, highly scalable, enterprise data warehouse.Data is first written to a temporary location on Google Cloud Storage, then read into the pipeline from there.", - "selected": false - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform" - }, - "properties": { - "directives": "parse-as-avro-file :body\nfilter-rows-on condition-true name == null || name =~ \"^\\W*$\"\ncut-character name nameNew 2-3\nset-type :value integer ", - "field": "*", - "precondition": "false", - "workspaceId": "ceba48f3-ed03-411a-8d71-c92a39b7c250", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"name\",\"type\":[\"string\",\"null\"]},{\"name\":\"value\",\"type\":[\"int\",\"null\"]},{\"name\":\"nameNew\",\"type\":[\"string\",\"null\"]}]}", - "on-error": "fail-pipeline" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"name\",\"type\":[\"string\",\"null\"]},{\"name\":\"value\",\"type\":[\"int\",\"null\"]},{\"name\":\"nameNew\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "BigQueryTable", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"body\",\"type\":[\"bytes\",\"null\"]}]}" - } - ], - "id": "Wrangler", - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataPreparation", - "$$hashKey": "object:32", - "isPluginAvailable": true, - "_uiPosition": { - "left": "796px", - "top": "343px" - }, - "selected": false, - "_backendProperties": { - "schema": { - "name": "schema", - "description": "Specifies the schema that has to be output.", - "type": "string", - "required": true, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "preconditionSQL": { - "name": "preconditionSQL", - "description": "SQL Precondition expression specifying filtering before applying directives (false to filter)", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "udd": { - "name": "udd", - "description": "List of User Defined Directives (UDD) that have to be loaded.", - "type": "string", - "required": false, - "macroSupported": false, - "macroEscapingEnabled": false, - "children": [] - }, - "field": { - "name": "field", - "description": "Name of the input field to be wrangled or '*' to wrangle all the fields.", - "type": "string", - "required": true, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "on-error": { - "name": "on-error", - "description": "How to handle error in record processing", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "directives": { - "name": "directives", - "description": "Recipe for wrangling the input records", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "expressionLanguage": { - "name": "expressionLanguage", - "description": "Toggle to configure precondition language between JEXL and SQL", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "precondition": { - "name": "precondition", - "description": "JEXL Precondition expression specifying filtering before applying directives (true to filter)", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - } - }, - "description": "Wrangler - A interactive tool for data cleansing and transformation." - }, - { - "name": "BigQuery2", - "plugin": { - "name": "BigQueryTable", - "type": "batchsink", - "label": "BigQuery2", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "referenceName": "ref", - "dataset": "wrangler_ankit", - "table": "avroResult", - "operation": "insert", - "truncateTable": "false", - "allowSchemaRelaxation": "false", - "location": "US", - "createPartitionedTable": "false", - "partitioningType": "TIME", - "partitionFilterRequired": "false", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"name\",\"type\":[\"string\",\"null\"]},{\"name\":\"value\",\"type\":[\"int\",\"null\"]},{\"name\":\"nameNew\",\"type\":[\"string\",\"null\"]}]}", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"name\",\"type\":[\"string\",\"null\"]},{\"name\":\"value\",\"type\":[\"int\",\"null\"]},{\"name\":\"nameNew\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"name\",\"type\":[\"string\",\"null\"]},{\"name\":\"value\",\"type\":[\"int\",\"null\"]},{\"name\":\"nameNew\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQuery2", - "type": "batchsink", - "label": "BigQuery2", - "icon": "fa-plug", - "$$hashKey": "object:33", - "isPluginAvailable": true, - "_uiPosition": { - "left": "1096px", - "top": "343px" - }, - "selected": false, - "_backendProperties": { - "schema": { - "name": "schema", - "description": "The schema of the data to write. If provided, must be compatible with the table schema.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitionFilter": { - "name": "partitionFilter", - "description": "Partition filter that can be used for partition elimination during Update or Upsert operations.This value is ignored if operation is not UPDATE or UPSERT.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "rangeStart": { - "name": "rangeStart", - "description": "Start value for range partitioning. The start value is inclusive. Ignored when table already exists", - "type": "long", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceAccountJSON": { - "name": "serviceAccountJSON", - "description": "Content of the service account file.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "useConnection": { - "name": "useConnection", - "description": "Whether to use an existing connection.", - "type": "boolean", - "required": false, - "macroSupported": false, - "macroEscapingEnabled": false, - "children": [] - }, - "project": { - "name": "project", - "description": "Google Cloud Project ID. It can be found on the Dashboard in the Google Cloud Platform Console.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitioningType": { - "name": "partitioningType", - "description": "Specifies the partitioning type. Can either be Integer or Time or None. Ignored when table already exists", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "relationTableKey": { - "name": "relationTableKey", - "description": "List of fields that determines relation between tables during Update and Upsert operations.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "rangeEnd": { - "name": "rangeEnd", - "description": "End value for range partitioning. The end value is exclusive. Ignored when table already exists", - "type": "long", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "clusteringOrder": { - "name": "clusteringOrder", - "description": "List of fields that determines the sort order of the data. Fields must be of type INT, LONG, STRING, DATE, TIMESTAMP, BOOLEAN or DECIMAL. Tables cannot be clustered on more than 4 fields. This value is only used when the BigQuery table is automatically created and ignored if the table already exists.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitionFilterRequired": { - "name": "partitionFilterRequired", - "description": "Whether to create a table that requires a partition filter. This value is ignored if the table already exists.", - "type": "boolean", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceFilePath": { - "name": "serviceFilePath", - "description": "Path on the local file system of the service account key used for authorization. Can be set to 'auto-detect' when running on a Dataproc cluster. When running on other clusters, the file must be present on every node in the cluster.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "truncateTable": { - "name": "truncateTable", - "description": "Whether or not to truncate the table before writing to it. Should only be used with the Insert operation. This could overwrite the table schema", - "type": "boolean", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitionByField": { - "name": "partitionByField", - "description": "Partitioning column for the BigQuery table. This should be left empty if the BigQuery table is an ingestion-time partitioned table.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "connection": { - "name": "connection", - "description": "The existing connection to use.", - "type": "bigqueryconnectorconfig", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [ - "serviceAccountJSON", - "serviceFilePath", - "project", - "serviceAccountType", - "datasetProject" - ] - }, - "table": { - "name": "table", - "description": "The table to write to. A table contains individual records organized in rows. Each record is composed of columns (also called fields). Every table is defined by a schema that describes the column names, data types, and other information.", - "type": "string", - "required": true, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "referenceName": { - "name": "referenceName", - "description": "This will be used to uniquely identify this source/sink for lineage, annotating metadata, etc.", - "type": "string", - "required": false, - "macroSupported": false, - "macroEscapingEnabled": false, - "children": [] - }, - "cmekKey": { - "name": "cmekKey", - "description": "The GCP customer managed encryption key (CMEK) name used to encrypt data written to any bucket, dataset or table created by the plugin. If the bucket, dataset or table already exists, this is ignored. More information can be found at https://cloud.google.com/data-fusion/docs/how-to/customer-managed-encryption-keys", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "createPartitionedTable": { - "name": "createPartitionedTable", - "description": "DEPRECATED!. Whether to create the BigQuery table with time partitioning. This value is ignored if the table already exists. When this is set to false, value of Partitioning type will be used. Use 'Partitioning type' property", - "type": "boolean", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "dedupeBy": { - "name": "dedupeBy", - "description": "Column names and sort order used to choose which input record to update/upsert when there are multiple input records with the same key. For example, if this is set to 'updated_time desc', then if there are multiple input records with the same key, the one with the largest value for 'updated_time' will be applied.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "allowSchemaRelaxation": { - "name": "allowSchemaRelaxation", - "description": "Whether to modify the BigQuery table schema if it differs from the input schema.", - "type": "boolean", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "bucket": { - "name": "bucket", - "description": "The Google Cloud Storage bucket to store temporary data in. Cloud Storage data will be deleted after it is loaded into BigQuery. If it is not provided, a unique bucket will be automatically created and then deleted after the run finishes. The service account must have permission to create buckets in the configured project.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "rangeInterval": { - "name": "rangeInterval", - "description": "Interval value for range partitioning. The interval value must be a positive integer.Ignored when table already exists", - "type": "long", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "gcsChunkSize": { - "name": "gcsChunkSize", - "description": "Optional property to tune chunk size in gcs upload request. The value of this property should be in number of bytes. By default, 8388608 bytes (8MB) will be used as upload request chunk size.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "location": { - "name": "location", - "description": "The location where the big query dataset will get created. This value is ignored if the dataset or temporary bucket already exist.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceAccountType": { - "name": "serviceAccountType", - "description": "Service account type, file path where the service account is located or the JSON content of the service account.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "datasetProject": { - "name": "datasetProject", - "description": "The project the dataset belongs to. This is only required if the dataset is not in the same project that the BigQuery job will run in. If no value is given, it will default to the configured project ID.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "operation": { - "name": "operation", - "description": "Type of write operation to perform. This can be set to Insert, Update or Upsert.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "dataset": { - "name": "dataset", - "description": "The dataset to write to. A dataset is contained within a specific project. Datasets are top-level containers that are used to organize and control access to tables and views.", - "type": "string", - "required": true, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - } - }, - "description": "This sink writes to a BigQuery table. BigQuery is Google's serverless, highly scalable, enterprise data warehouse. Data is first written to a temporary location on Google Cloud Storage, then loaded into BigQuery from there." - } - ], - "schedule": "0 1 */1 * *", - "engine": "spark", - "numOfRecordsPreview": 100, - "rangeRecordsPreview": { - "min": 1, - "max": "5000" - }, - "description": "Data Pipeline Application", - "maxConcurrentRuns": 1, - "pushdownEnabled": false, - "transformationPushdown": {} - }, - "version": "5aeae257-5b78-11ee-9c85-00000078300d" -} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_HL7_Wrangler-cdap-data-pipeline (1).json b/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_HL7_Wrangler-cdap-data-pipeline (1).json deleted file mode 100644 index bb285981d..000000000 --- a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_HL7_Wrangler-cdap-data-pipeline (1).json +++ /dev/null @@ -1,174 +0,0 @@ -{ - "name": "parse_as_HL7", - "description": "Data Pipeline Application", - "artifact": { - "name": "cdap-data-pipeline", - "version": "[6.0.0, 7.0.0)", - "scope": "SYSTEM" - }, - "config": { - "resources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "connections": [ - { - "from": "BigQueryTable", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "BigQuery2" - } - ], - "postActions": [], - "properties": {}, - "processTimingEnabled": true, - "stageLoggingEnabled": true, - "stages": [ - { - "name": "BigQueryTable", - "plugin": { - "name": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "dataset": "Wrangler", - "table": "hl7finalt", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"address\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body\",\"type\":\"string\"}]}", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "enableQueryingViews": "false" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"address\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body\",\"type\":\"string\"}]}" - } - ], - "id": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "icon": "fa-plug", - "$$hashKey": "object:495", - "isPluginAvailable": true, - "_uiPosition": { - "left": "496px", - "top": "343px" - } - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform" - }, - "properties": { - "directives": "parse-as-hl7 :Body\nhash :Body MD5\nset-type :Body string \nkeep address,Body,Body_hl7_MSH_12,Body_hl7_MSH_9_1\nfind-and-replace address s/address1/test/g\nmask-shuffle :Body_hl7_MSH_9_1\nsend-to-error empty(address)\nrename :Body_hl7_MSH_12 :id ", - "field": "*", - "precondition": "false", - "workspaceId": "8317e17e-30ca-491a-8a07-56e124d53603", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"address\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body_hl7_MSH_9_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]}]}", - "on-error": "fail-pipeline" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"address\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body_hl7_MSH_9_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "BigQueryTable", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"address\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body\",\"type\":\"string\"}]}" - } - ], - "id": "Wrangler", - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataPreparation", - "$$hashKey": "object:496", - "isPluginAvailable": true, - "_uiPosition": { - "left": "796px", - "top": "343px" - } - }, - { - "name": "BigQuery2", - "plugin": { - "name": "BigQueryTable", - "type": "batchsink", - "label": "BigQuery2", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "dataset": "Wrangler", - "table": "hlupde", - "operation": "insert", - "truncateTable": "false", - "allowSchemaRelaxation": "false", - "location": "US", - "createPartitionedTable": "false", - "partitioningType": "TIME", - "partitionFilterRequired": "false", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"address\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body_hl7_MSH_9_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"address\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body_hl7_MSH_9_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"address\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body_hl7_MSH_9_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQuery2", - "type": "batchsink", - "label": "BigQuery2", - "icon": "fa-plug", - "$$hashKey": "object:497", - "isPluginAvailable": true, - "_uiPosition": { - "left": "1096px", - "top": "343px" - } - } - ], - "schedule": "0 1 */1 * *", - "engine": "spark", - "numOfRecordsPreview": 100, - "rangeRecordsPreview": { - "min": 1, - "max": "5000" - }, - "description": "Data Pipeline Application", - "maxConcurrentRuns": 1, - "pushdownEnabled": false, - "transformationPushdown": {} - }, - "version": "5cd279f1-4ca0-11ee-b9e7-0000007a8317" -} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_csv_wrangle-cdap-data-pipeline.json b/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_csv_wrangle-cdap-data-pipeline.json deleted file mode 100644 index 29a59718d..000000000 --- a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_csv_wrangle-cdap-data-pipeline.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "name": "parse_csv_wrangle", - "description": "Data Pipeline Application", - "artifact": { - "name": "cdap-data-pipeline", - "version": "[6.0.0, 7.0.0)", - "scope": "SYSTEM" - }, - "config": { - "resources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "connections": [ - { - "from": "BigQueryTable", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "BigQuery2" - } - ], - "postActions": [], - "properties": {}, - "processTimingEnabled": true, - "stageLoggingEnabled": true, - "stages": [ - { - "name": "BigQueryTable", - "plugin": { - "name": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "dataset": "wrangler_ankit", - "table": "table5", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"body\",\"type\":[\"string\",\"null\"]}]}", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "enableQueryingViews": "false" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"body\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "icon": "fa-plug", - "$$hashKey": "object:441", - "isPluginAvailable": true, - "_uiPosition": { - "left": "496px", - "top": "343.5px" - } - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform" - }, - "properties": { - "directives": "parse-as-csv :body ',' false\nrename body_1 new_id\nquantize body_4 body_q 1:2=20,3:4=40\nset-type :body_4 integer \ncolumns-replace s/^new_//g\nfill-null-or-empty :body_3 'shubh'\nset-headers :abc\nchange-column-case uppercase\ncleanse-column-names\nsplit-to-rows :id '#'", - "field": "*", - "precondition": "false", - "workspaceId": "b0564dfc-77db-4d95-b3bc-b04bcdf0f687", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"abc\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_2\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_3\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_4\",\"type\":[\"int\",\"null\"]},{\"name\":\"body_q\",\"type\":[\"string\",\"null\"]}]}", - "on-error": "fail-pipeline" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"abc\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_2\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_3\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_4\",\"type\":[\"int\",\"null\"]},{\"name\":\"body_q\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "BigQueryTable", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"body\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "Wrangler", - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataPreparation", - "$$hashKey": "object:442", - "isPluginAvailable": true, - "_uiPosition": { - "left": "796px", - "top": "343.5px" - } - }, - { - "name": "BigQuery2", - "plugin": { - "name": "BigQueryTable", - "type": "batchsink", - "label": "BigQuery2", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "dataset": "Wrangler", - "table": "uptable", - "operation": "insert", - "truncateTable": "false", - "allowSchemaRelaxation": "false", - "location": "US", - "createPartitionedTable": "false", - "partitioningType": "TIME", - "partitionFilterRequired": "false", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"abc\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_2\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_3\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_4\",\"type\":[\"int\",\"null\"]},{\"name\":\"body_q\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"abc\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_2\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_3\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_4\",\"type\":[\"int\",\"null\"]},{\"name\":\"body_q\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"abc\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_2\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_3\",\"type\":[\"string\",\"null\"]},{\"name\":\"body_4\",\"type\":[\"int\",\"null\"]},{\"name\":\"body_q\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQuery2", - "type": "batchsink", - "label": "BigQuery2", - "icon": "fa-plug", - "$$hashKey": "object:443", - "isPluginAvailable": true, - "_uiPosition": { - "left": "1096px", - "top": "343.5px" - } - } - ], - "schedule": "0 1 */1 * *", - "engine": "spark", - "numOfRecordsPreview": 100, - "rangeRecordsPreview": { - "min": 1, - "max": "5000" - }, - "maxConcurrentRuns": 1, - "pushdownEnabled": false, - "transformationPushdown": {} - }, - "version": "afe60ddd-4b3a-11ee-9107-0000007a4d1b" -} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_datetime_wrangler-cdap-data-pipeline.json b/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_datetime_wrangler-cdap-data-pipeline.json deleted file mode 100644 index 5edcb5577..000000000 --- a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_datetime_wrangler-cdap-data-pipeline.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "name": "parse_datetime_wrangler", - "description": "Data Pipeline Application", - "artifact": { - "name": "cdap-data-pipeline", - "version": "[6.0.0, 7.0.0)", - "scope": "SYSTEM" - }, - "config": { - "resources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "connections": [ - { - "from": "BigQueryTable", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "BigQuery2" - } - ], - "postActions": [], - "properties": {}, - "processTimingEnabled": true, - "stageLoggingEnabled": true, - "stages": [ - { - "name": "BigQueryTable", - "plugin": { - "name": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "dataset": "Wrangler_Test", - "table": "datetimetab", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"create_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"timestamp\",\"type\":[\"string\",\"null\"]}]}", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "enableQueryingViews": "false" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"create_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"timestamp\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "icon": "fa-plug", - "$$hashKey": "object:358", - "isPluginAvailable": true, - "_uiPosition": { - "left": "496px", - "top": "342px" - } - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform" - }, - "properties": { - "directives": "parse-as-datetime :timestamp \"yyyy-MM-dd'T'HH:mm:ssX'['z']'\"\ncurrent-datetime :create_date\ndatetime-to-timestamp :timestamp\nformat-datetime :create_date 'y'\nformat-date :timestamp yyyy-mm-dd\nrename timestamp timecolumn", - "field": "*", - "precondition": "false", - "workspaceId": "b28b92f3-93bb-4a4f-8258-ef5881543ecb", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"create_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"timecolumn\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"create_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"timecolumn\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "Wrangler", - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataPreparation", - "$$hashKey": "object:359", - "isPluginAvailable": true, - "_uiPosition": { - "left": "796px", - "top": "342px" - } - }, - { - "name": "BigQuery2", - "plugin": { - "name": "BigQueryTable", - "type": "batchsink", - "label": "BigQuery2", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "dataset": "Wrangler", - "table": "ddtab", - "operation": "insert", - "truncateTable": "false", - "allowSchemaRelaxation": "false", - "location": "US", - "createPartitionedTable": "false", - "partitioningType": "TIME", - "timePartitioningType": "DAY", - "partitionFilterRequired": "false", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"create_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"timecolumn\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"create_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"timecolumn\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"create_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"timecolumn\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQuery2", - "type": "batchsink", - "label": "BigQuery2", - "icon": "fa-plug", - "$$hashKey": "object:360", - "isPluginAvailable": true, - "_uiPosition": { - "left": "1096px", - "top": "342px" - } - } - ], - "schedule": "0 1 */1 * *", - "engine": "spark", - "numOfRecordsPreview": 100, - "rangeRecordsPreview": { - "min": 1, - "max": "5000" - }, - "maxConcurrentRuns": 1, - "pushdownEnabled": false, - "transformationPushdown": {} - }, - "version": "a397cf5a-af9f-11ee-bad0-0000007dcfa3" -} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_excel_wrangler_copy-cdap-data-pipeline.json b/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_excel_wrangler_copy-cdap-data-pipeline.json deleted file mode 100644 index c16fb39f8..000000000 --- a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_excel_wrangler_copy-cdap-data-pipeline.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "name": "parse_excel_wrangler_copy", - "description": "Data Pipeline Application", - "artifact": { - "name": "cdap-data-pipeline", - "version": "[6.0.0, 7.0.0)", - "scope": "SYSTEM" - }, - "config": { - "resources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "connections": [ - { - "from": "GCSFile", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "BigQuery" - } - ], - "postActions": [], - "properties": {}, - "processTimingEnabled": true, - "stageLoggingEnabled": true, - "stages": [ - { - "name": "GCSFile", - "plugin": { - "name": "GCSFile", - "type": "batchsource", - "label": "GCSFile", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "format": "blob", - "path": "gs://00000000-e2e-0014a44f-81be-4501-8360-0ddca1c39789/test1.xlsx", - "fileEncoding": "UTF-8", - "useConnection": "false", - "referenceName": "test", - "schema": "{\"type\":\"record\",\"name\":\"blob\",\"fields\":[{\"name\":\"body\",\"type\":\"bytes\"}]}", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "sampleSize": "1000", - "filenameOnly": "false", - "recursive": "false", - "ignoreNonExistingFolders": "false", - "encrypted": "false" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"blob\",\"fields\":[{\"name\":\"body\",\"type\":\"bytes\"}]}" - } - ], - "id": "GCSFile", - "type": "batchsource", - "label": "GCSFile", - "icon": "fa-plug", - "$$hashKey": "object:475", - "isPluginAvailable": true, - "_uiPosition": { - "left": "496px", - "top": "343px" - } - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform" - }, - "properties": { - "directives": "parse-as-excel :body '0' true\ncopy name copiedname\nmerge name bkd uniquenum ','\nrename bkd rollno\ndrop fwd\nswap id rollno\nsplit-to-rows :name 'o'\nfilter-rows-on condition-false rollno !~ '2.0'", - "field": "*", - "precondition": "false", - "workspaceId": "667f9e85-6c36-4d38-ad48-ef85db7a04a2", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"int\",\"null\"]},{\"name\":\"rollno\",\"type\":[\"string\",\"null\"]},{\"name\":\"name\",\"type\":[\"string\",\"null\"]},{\"name\":\"phone\",\"type\":[\"string\",\"null\"]},{\"name\":\"copiedname\",\"type\":[\"string\",\"null\"]},{\"name\":\"uniquenum\",\"type\":[\"string\",\"null\"]}]}", - "on-error": "fail-pipeline" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"int\",\"null\"]},{\"name\":\"rollno\",\"type\":[\"string\",\"null\"]},{\"name\":\"name\",\"type\":[\"string\",\"null\"]},{\"name\":\"phone\",\"type\":[\"string\",\"null\"]},{\"name\":\"copiedname\",\"type\":[\"string\",\"null\"]},{\"name\":\"uniquenum\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "GCSFile", - "schema": "{\"type\":\"record\",\"name\":\"blob\",\"fields\":[{\"name\":\"body\",\"type\":\"bytes\"}]}" - } - ], - "id": "Wrangler", - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataPreparation", - "$$hashKey": "object:476", - "isPluginAvailable": true, - "_uiPosition": { - "left": "796px", - "top": "343px" - } - }, - { - "name": "BigQuery", - "plugin": { - "name": "BigQueryTable", - "type": "batchsink", - "label": "BigQuery", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "dataset": "Wrangler", - "table": "extab34", - "operation": "insert", - "truncateTable": "false", - "allowSchemaRelaxation": "false", - "location": "US", - "createPartitionedTable": "false", - "partitioningType": "TIME", - "partitionFilterRequired": "false", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"int\",\"null\"]},{\"name\":\"rollno\",\"type\":[\"string\",\"null\"]},{\"name\":\"name\",\"type\":[\"string\",\"null\"]},{\"name\":\"phone\",\"type\":[\"string\",\"null\"]},{\"name\":\"copiedname\",\"type\":[\"string\",\"null\"]},{\"name\":\"uniquenum\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"int\",\"null\"]},{\"name\":\"rollno\",\"type\":[\"string\",\"null\"]},{\"name\":\"name\",\"type\":[\"string\",\"null\"]},{\"name\":\"phone\",\"type\":[\"string\",\"null\"]},{\"name\":\"copiedname\",\"type\":[\"string\",\"null\"]},{\"name\":\"uniquenum\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"int\",\"null\"]},{\"name\":\"rollno\",\"type\":[\"string\",\"null\"]},{\"name\":\"name\",\"type\":[\"string\",\"null\"]},{\"name\":\"phone\",\"type\":[\"string\",\"null\"]},{\"name\":\"copiedname\",\"type\":[\"string\",\"null\"]},{\"name\":\"uniquenum\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQuery", - "type": "batchsink", - "label": "BigQuery", - "icon": "fa-plug", - "$$hashKey": "object:477", - "isPluginAvailable": true, - "_uiPosition": { - "left": "1096px", - "top": "343px" - } - } - ], - "schedule": "0 1 */1 * *", - "engine": "spark", - "numOfRecordsPreview": 100, - "rangeRecordsPreview": { - "min": 1, - "max": "5000" - }, - "description": "Data Pipeline Application", - "maxConcurrentRuns": 1, - "pushdownEnabled": false, - "transformationPushdown": {} - }, - "version": "2dd12daa-5395-11ee-9dac-000000d0cf32" -} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_fixedlength_wrangler-cdap-data-pipeline.json b/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_fixedlength_wrangler-cdap-data-pipeline.json deleted file mode 100644 index dbaa8e59b..000000000 --- a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_fixedlength_wrangler-cdap-data-pipeline.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "name": "parse_fixedlength_wrangler", - "description": "Data Pipeline Application", - "artifact": { - "name": "cdap-data-pipeline", - "version": "[6.0.0, 7.0.0)", - "scope": "SYSTEM" - }, - "config": { - "resources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "connections": [ - { - "from": "BigQueryTable", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "BigQuery2" - } - ], - "postActions": [], - "properties": {}, - "processTimingEnabled": true, - "stageLoggingEnabled": true, - "stages": [ - { - "name": "BigQueryTable", - "plugin": { - "name": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "dataset": "Wrangler_Test", - "table": "fixedlengthtab", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"url\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength\",\"type\":[\"string\",\"null\"]}]}", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "enableQueryingViews": "false" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"url\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "icon": "fa-plug", - "$$hashKey": "object:31", - "isPluginAvailable": true, - "_uiPosition": { - "left": "496px", - "top": "342px" - } - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform" - }, - "properties": { - "directives": "parse-as-fixed-length :fixedlength 2,4,5,3\nsplit-url url\nwrite-as-csv :url_protocol\nurl-encode :url\nurl-decode :url\nencode base32 fixedlength\ndecode base32 fixedlength_encode_base32\nsplit-to-columns :url_query '='\nrename fixedlength_2 id\nfilter-rows-on condition-true fixedlength_4 !~ 'XYZ'", - "field": "*", - "precondition": "false", - "workspaceId": "6b2760c2-e722-47d3-b5d2-ddefc5bc9ab0", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"url\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_3\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_4\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_authority\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_host\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_port\",\"type\":[\"int\",\"null\"]},{\"name\":\"url_path\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_filename\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_encode_base32\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_encode_base32_decode_base32\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query_2\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"url\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_3\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_4\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_authority\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_host\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_port\",\"type\":[\"int\",\"null\"]},{\"name\":\"url_path\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_filename\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_encode_base32\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_encode_base32_decode_base32\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query_2\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "Wrangler", - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataPreparation", - "$$hashKey": "object:32", - "isPluginAvailable": true, - "_uiPosition": { - "left": "796px", - "top": "342px" - } - }, - { - "name": "BigQuery2", - "plugin": { - "name": "BigQueryTable", - "type": "batchsink", - "label": "BigQuery2", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "dataset": "Wrangler_Test", - "table": "fsdtable", - "operation": "insert", - "truncateTable": "false", - "allowSchemaRelaxation": "false", - "location": "US", - "createPartitionedTable": "false", - "partitioningType": "TIME", - "timePartitioningType": "DAY", - "partitionFilterRequired": "false", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"url\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_3\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_4\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_authority\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_host\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_port\",\"type\":[\"int\",\"null\"]},{\"name\":\"url_path\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_filename\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_encode_base32\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_encode_base32_decode_base32\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query_2\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"url\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_3\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_4\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_authority\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_host\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_port\",\"type\":[\"int\",\"null\"]},{\"name\":\"url_path\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_filename\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_encode_base32\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_encode_base32_decode_base32\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query_2\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"url\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_3\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_4\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_authority\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_host\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_port\",\"type\":[\"int\",\"null\"]},{\"name\":\"url_path\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_filename\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_encode_base32\",\"type\":[\"string\",\"null\"]},{\"name\":\"fixedlength_encode_base32_decode_base32\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"url_query_2\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQuery2", - "type": "batchsink", - "label": "BigQuery2", - "icon": "fa-plug", - "$$hashKey": "object:33", - "isPluginAvailable": true, - "_uiPosition": { - "left": "1096px", - "top": "342px" - } - } - ], - "schedule": "0 1 */1 * *", - "engine": "spark", - "numOfRecordsPreview": 100, - "rangeRecordsPreview": { - "min": 1, - "max": "5000" - }, - "maxConcurrentRuns": 1, - "pushdownEnabled": false, - "transformationPushdown": {} - }, - "version": "7f3d3a08-af99-11ee-a55b-00000031b618" -} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_json_wrangler1-cdap-data-pipeline.json b/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_json_wrangler1-cdap-data-pipeline.json deleted file mode 100644 index bd25287b7..000000000 --- a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_json_wrangler1-cdap-data-pipeline.json +++ /dev/null @@ -1,467 +0,0 @@ -{ - "name": "parse_json_wrangler1", - "description": "Data Pipeline Application", - "artifact": { - "name": "cdap-data-pipeline", - "version": "[6.0.0, 7.0.0)", - "scope": "SYSTEM" - }, - "config": { - "resources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "connections": [ - { - "from": "BigQueryTable", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "BigQuery2" - } - ], - "postActions": [], - "properties": {}, - "processTimingEnabled": true, - "stageLoggingEnabled": true, - "stages": [ - { - "name": "BigQueryTable", - "plugin": { - "name": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "dataset": "Wrangler_Test", - "table": "jsontab", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"json\",\"type\":[\"string\",\"null\"]}]}", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "enableQueryingViews": "false" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"json\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "icon": "fa-plug", - "$$hashKey": "object:443", - "isPluginAvailable": true, - "_uiPosition": { - "left": "496px", - "top": "342px" - }, - "selected": false - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform" - }, - "properties": { - "directives": "parse-as-json :json 1\nltrim :body\nset-column :desc concat(json_pet,body)\ncopy :json_name :copied\nswap :json_id :json_age\nmerge :json_id :json_name :json_id_json_name ,\nmask-number :json_pet 'testing'\ndrop json_height\nwrite-as-json-map :json_age\nrename json_id id", - "field": "*", - "precondition": "false", - "workspaceId": "6e59a102-2268-4328-afce-e81e6eb9228b", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"json_age\",\"type\":[\"string\",\"null\"]},{\"name\":\"json_name\",\"type\":[{\"type\":\"record\",\"name\":\"json_name05F0DF247CD8481657781C26E1595028\",\"fields\":[{\"name\":\"first\",\"type\":[\"string\",\"null\"]},{\"name\":\"last\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"json_pet\",\"type\":[\"string\",\"null\"]},{\"name\":\"desc\",\"type\":[\"string\",\"null\"]},{\"name\":\"copied\",\"type\":[\"json_name05F0DF247CD8481657781C26E1595028\",\"null\"]},{\"name\":\"json_id_json_name\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"json_age\",\"type\":[\"string\",\"null\"]},{\"name\":\"json_name\",\"type\":[{\"type\":\"record\",\"name\":\"json_name05F0DF247CD8481657781C26E1595028\",\"fields\":[{\"name\":\"first\",\"type\":[\"string\",\"null\"]},{\"name\":\"last\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"json_pet\",\"type\":[\"string\",\"null\"]},{\"name\":\"desc\",\"type\":[\"string\",\"null\"]},{\"name\":\"copied\",\"type\":[\"json_name05F0DF247CD8481657781C26E1595028\",\"null\"]},{\"name\":\"json_id_json_name\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "Wrangler", - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataPreparation", - "$$hashKey": "object:444", - "isPluginAvailable": true, - "_uiPosition": { - "left": "796px", - "top": "342px" - }, - "selected": false - }, - { - "name": "BigQuery2", - "plugin": { - "name": "BigQueryTable", - "type": "batchsink", - "label": "BigQuery2", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "dataset": "Wrangler_Test", - "table": "jstabss", - "operation": "insert", - "truncateTable": "false", - "allowSchemaRelaxation": "false", - "location": "US", - "createPartitionedTable": "false", - "partitioningType": "TIME", - "timePartitioningType": "DAY", - "partitionFilterRequired": "false", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"json_age\",\"type\":[\"string\",\"null\"]},{\"name\":\"json_name\",\"type\":[{\"type\":\"record\",\"name\":\"json_name05F0DF247CD8481657781C26E1595028\",\"fields\":[{\"name\":\"first\",\"type\":[\"string\",\"null\"]},{\"name\":\"last\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"json_pet\",\"type\":[\"string\",\"null\"]},{\"name\":\"desc\",\"type\":[\"string\",\"null\"]},{\"name\":\"copied\",\"type\":[\"json_name05F0DF247CD8481657781C26E1595028\",\"null\"]},{\"name\":\"json_id_json_name\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"json_age\",\"type\":[\"string\",\"null\"]},{\"name\":\"json_name\",\"type\":[{\"type\":\"record\",\"name\":\"json_name05F0DF247CD8481657781C26E1595028\",\"fields\":[{\"name\":\"first\",\"type\":[\"string\",\"null\"]},{\"name\":\"last\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"json_pet\",\"type\":[\"string\",\"null\"]},{\"name\":\"desc\",\"type\":[\"string\",\"null\"]},{\"name\":\"copied\",\"type\":[\"json_name05F0DF247CD8481657781C26E1595028\",\"null\"]},{\"name\":\"json_id_json_name\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"json_age\",\"type\":[\"string\",\"null\"]},{\"name\":\"json_name\",\"type\":[{\"type\":\"record\",\"name\":\"json_name05F0DF247CD8481657781C26E1595028\",\"fields\":[{\"name\":\"first\",\"type\":[\"string\",\"null\"]},{\"name\":\"last\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"json_pet\",\"type\":[\"string\",\"null\"]},{\"name\":\"desc\",\"type\":[\"string\",\"null\"]},{\"name\":\"copied\",\"type\":[\"json_name05F0DF247CD8481657781C26E1595028\",\"null\"]},{\"name\":\"json_id_json_name\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQuery2", - "type": "batchsink", - "label": "BigQuery2", - "icon": "fa-plug", - "$$hashKey": "object:445", - "isPluginAvailable": true, - "_uiPosition": { - "left": "1096px", - "top": "342px" - }, - "_backendProperties": { - "schema": { - "name": "schema", - "description": "The schema of the data to write. If provided, must be compatible with the table schema.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitionFilter": { - "name": "partitionFilter", - "description": "Partition filter that can be used for partition elimination during Update or Upsert operations.This value is ignored if operation is not UPDATE or UPSERT.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "rangeStart": { - "name": "rangeStart", - "description": "Start value for range partitioning. The start value is inclusive. Ignored when table already exists", - "type": "long", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceAccountJSON": { - "name": "serviceAccountJSON", - "description": "Content of the service account file.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "useConnection": { - "name": "useConnection", - "description": "Whether to use an existing connection.", - "type": "boolean", - "required": false, - "macroSupported": false, - "macroEscapingEnabled": false, - "children": [] - }, - "jsonStringFields": { - "name": "jsonStringFields", - "description": "Fields in input schema that should be treated as JSON strings. The schema of these fields should be of type STRING.", - "type": "string", - "required": false, - "macroSupported": false, - "macroEscapingEnabled": false, - "children": [] - }, - "project": { - "name": "project", - "description": "Google Cloud Project ID. It can be found on the Dashboard in the Google Cloud Platform Console.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitioningType": { - "name": "partitioningType", - "description": "Specifies the partitioning type. Can either be Integer or Time or None. Ignored when table already exists", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "timePartitioningType": { - "name": "timePartitioningType", - "description": "Specifies the time partitioning type. Can either be Daily or Hourly or Monthly or Yearly. Ignored when table already exists", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "jobLabels": { - "name": "jobLabels", - "description": "Key value pairs to be added as labels to the BigQuery job. Keys must be unique. [job_source, type] are reserved keys and cannot be used as label keys.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "relationTableKey": { - "name": "relationTableKey", - "description": "List of fields that determines relation between tables during Update and Upsert operations.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "rangeEnd": { - "name": "rangeEnd", - "description": "End value for range partitioning. The end value is exclusive. Ignored when table already exists", - "type": "long", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "clusteringOrder": { - "name": "clusteringOrder", - "description": "List of fields that determines the sort order of the data. Fields must be of type INT, LONG, STRING, DATE, TIMESTAMP, BOOLEAN or DECIMAL. Tables cannot be clustered on more than 4 fields. This value is only used when the BigQuery table is automatically created and ignored if the table already exists.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitionFilterRequired": { - "name": "partitionFilterRequired", - "description": "Whether to create a table that requires a partition filter. This value is ignored if the table already exists.", - "type": "boolean", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceFilePath": { - "name": "serviceFilePath", - "description": "Path on the local file system of the service account key used for authorization. Can be set to 'auto-detect' when running on a Dataproc cluster. When running on other clusters, the file must be present on every node in the cluster.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "truncateTable": { - "name": "truncateTable", - "description": "Whether or not to truncate the table before writing to it. Should only be used with the Insert operation. This could overwrite the table schema", - "type": "boolean", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitionByField": { - "name": "partitionByField", - "description": "Partitioning column for the BigQuery table. This should be left empty if the BigQuery table is an ingestion-time partitioned table.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "connection": { - "name": "connection", - "description": "The existing connection to use.", - "type": "bigqueryconnectorconfig", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [ - "serviceAccountJSON", - "serviceFilePath", - "project", - "serviceAccountType", - "datasetProject" - ] - }, - "table": { - "name": "table", - "description": "The table to write to. A table contains individual records organized in rows. Each record is composed of columns (also called fields). Every table is defined by a schema that describes the column names, data types, and other information.", - "type": "string", - "required": true, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "referenceName": { - "name": "referenceName", - "description": "This will be used to uniquely identify this source/sink for lineage, annotating metadata, etc.", - "type": "string", - "required": false, - "macroSupported": false, - "macroEscapingEnabled": false, - "children": [] - }, - "cmekKey": { - "name": "cmekKey", - "description": "The GCP customer managed encryption key (CMEK) name used to encrypt data written to any bucket, dataset or table created by the plugin. If the bucket, dataset or table already exists, this is ignored. More information can be found at https://cloud.google.com/data-fusion/docs/how-to/customer-managed-encryption-keys", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "createPartitionedTable": { - "name": "createPartitionedTable", - "description": "DEPRECATED!. Whether to create the BigQuery table with time partitioning. This value is ignored if the table already exists. When this is set to false, value of Partitioning type will be used. Use 'Partitioning type' property", - "type": "boolean", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "dedupeBy": { - "name": "dedupeBy", - "description": "Column names and sort order used to choose which input record to update/upsert when there are multiple input records with the same key. For example, if this is set to 'updated_time desc', then if there are multiple input records with the same key, the one with the largest value for 'updated_time' will be applied.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "allowSchemaRelaxation": { - "name": "allowSchemaRelaxation", - "description": "Whether to modify the BigQuery table schema if it differs from the input schema.", - "type": "boolean", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "bucket": { - "name": "bucket", - "description": "The Google Cloud Storage bucket to store temporary data in. Cloud Storage data will be deleted after it is loaded into BigQuery. If it is not provided, a unique bucket will be automatically created and then deleted after the run finishes. The service account must have permission to create buckets in the configured project.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "rangeInterval": { - "name": "rangeInterval", - "description": "Interval value for range partitioning. The interval value must be a positive integer.Ignored when table already exists", - "type": "long", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "gcsChunkSize": { - "name": "gcsChunkSize", - "description": "Optional property to tune chunk size in gcs upload request. The value of this property should be in number of bytes. By default, 8388608 bytes (8MB) will be used as upload request chunk size.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "location": { - "name": "location", - "description": "The location where the big query dataset will get created. This value is ignored if the dataset or temporary bucket already exist.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceAccountType": { - "name": "serviceAccountType", - "description": "Service account type, file path where the service account is located or the JSON content of the service account.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "datasetProject": { - "name": "datasetProject", - "description": "The project the dataset belongs to. This is only required if the dataset is not in the same project that the BigQuery job will run in. If no value is given, it will default to the configured project ID.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "operation": { - "name": "operation", - "description": "Type of write operation to perform. This can be set to Insert, Update or Upsert.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "dataset": { - "name": "dataset", - "description": "The dataset to write to. A dataset is contained within a specific project. Datasets are top-level containers that are used to organize and control access to tables and views.", - "type": "string", - "required": true, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - } - }, - "description": "This sink writes to a BigQuery table. BigQuery is Google's serverless, highly scalable, enterprise data warehouse. Data is first written to a temporary location on Google Cloud Storage, then loaded into BigQuery from there.", - "selected": false - } - ], - "schedule": "0 1 */1 * *", - "engine": "spark", - "numOfRecordsPreview": 100, - "rangeRecordsPreview": { - "min": 1, - "max": "5000" - }, - "maxConcurrentRuns": 1, - "pushdownEnabled": false, - "transformationPushdown": {} - }, - "version": "15e6341c-af95-11ee-a080-000000f3bab4" -} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_log_wrangler_copy-cdap-data-pipeline.json b/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_log_wrangler_copy-cdap-data-pipeline.json deleted file mode 100644 index 9c98f5c45..000000000 --- a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_log_wrangler_copy-cdap-data-pipeline.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "name": "parse_log_wrangler_copy", - "description": "Data Pipeline Application", - "artifact": { - "name": "cdap-data-pipeline", - "version": "[6.0.0, 7.0.0)", - "scope": "SYSTEM" - }, - "config": { - "resources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "connections": [ - { - "from": "BigQueryTable", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "BigQuery2" - } - ], - "postActions": [], - "properties": {}, - "processTimingEnabled": true, - "stageLoggingEnabled": true, - "stages": [ - { - "name": "BigQueryTable", - "plugin": { - "name": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "dataset": "Wrangler_Test", - "table": "logTab", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]}]}", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "enableQueryingViews": "false" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "icon": "fa-plug", - "$$hashKey": "object:329", - "isPluginAvailable": true, - "_uiPosition": { - "left": "496px", - "top": "342px" - } - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform" - }, - "properties": { - "directives": "parse-as-log :Body 'common'\ndrop :number_connection_client_logname_last\ndrop :number_connection_client_logname\ndrop :http_querystring_request_firstline_uri_query\nfill-null-or-empty :http_ref_request_firstline_uri_ref 'no value'\nfilter-rows-on condition-false ip_connection_client_host =$ \"1\"\nfilter-rows-on regex-match string_connection_client_user_last ^Tryck$\nextract-regex-groups :http_firstline_request_firstline GET*\nsplit-to-columns :ip_connection_client_host ,\ncatalog-lookup ICD-9 :Body\nfill-null-or-empty :Body_icd_9_description 'Body Post Catalog lookup'\nset-variable Pass string_request_status_last == \"200\" ? string_request_status_last : Pass\nset-type :time_day_request_receive_time_last_day integer ", - "field": "*", - "precondition": "false", - "workspaceId": "c42a0f1b-26e2-4957-80ce-cd0f1a03f0d5", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_connection_client_user\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_connection_client_user_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_stamp_request_receive_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_stamp_request_receive_time_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_firstline_request_firstline\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_request_status_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"bytes_response_body_bytes\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_method_request_firstline_method\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_uri_request_firstline_uri\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_version_request_firstline_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_day\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_monthname\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_month\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_weekofweekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_weekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_year\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_hour\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_minute\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_second\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_millisecond\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_epoch_request_receive_time_epoch\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_day_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_monthname_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_month_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_weekofweekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_weekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_year_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_hour_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_minute_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_second_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_millisecond_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_date_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_time_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"bytes_response_body_bytes_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_last_day\",\"type\":[\"int\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_last_monthname\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_last_month\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_last_weekofweekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_weekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_year\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_last_hour\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_last_minute\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_last_second\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_last_millisecond\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_last_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_last_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_epoch_request_receive_time_last_epoch\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_last_day_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_last_monthname_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_last_month_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_last_weekofweekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_weekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_year_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_last_hour_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_last_minute_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_last_second_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_last_millisecond_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_last_date_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_last_time_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_path_request_firstline_uri_path\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_ref_request_firstline_uri_ref\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_request_firstline_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_version_request_firstline_protocol_version\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body_icd_9_description\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_connection_client_user\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_connection_client_user_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_stamp_request_receive_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_stamp_request_receive_time_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_firstline_request_firstline\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_request_status_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"bytes_response_body_bytes\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_method_request_firstline_method\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_uri_request_firstline_uri\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_version_request_firstline_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_day\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_monthname\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_month\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_weekofweekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_weekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_year\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_hour\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_minute\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_second\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_millisecond\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_epoch_request_receive_time_epoch\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_day_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_monthname_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_month_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_weekofweekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_weekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_year_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_hour_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_minute_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_second_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_millisecond_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_date_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_time_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"bytes_response_body_bytes_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_last_day\",\"type\":[\"int\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_last_monthname\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_last_month\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_last_weekofweekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_weekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_year\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_last_hour\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_last_minute\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_last_second\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_last_millisecond\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_last_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_last_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_epoch_request_receive_time_last_epoch\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_last_day_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_last_monthname_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_last_month_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_last_weekofweekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_weekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_year_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_last_hour_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_last_minute_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_last_second_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_last_millisecond_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_last_date_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_last_time_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_path_request_firstline_uri_path\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_ref_request_firstline_uri_ref\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_request_firstline_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_version_request_firstline_protocol_version\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body_icd_9_description\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "Wrangler", - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataPreparation", - "$$hashKey": "object:330", - "isPluginAvailable": true, - "_uiPosition": { - "left": "796px", - "top": "342px" - } - }, - { - "name": "BigQuery2", - "plugin": { - "name": "BigQueryTable", - "type": "batchsink", - "label": "BigQuery2", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "dataset": "Wrangler", - "table": "logfintabs", - "operation": "insert", - "truncateTable": "false", - "allowSchemaRelaxation": "false", - "location": "US", - "createPartitionedTable": "false", - "partitioningType": "TIME", - "timePartitioningType": "DAY", - "partitionFilterRequired": "false", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_connection_client_user\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_connection_client_user_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_stamp_request_receive_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_stamp_request_receive_time_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_firstline_request_firstline\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_request_status_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"bytes_response_body_bytes\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_method_request_firstline_method\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_uri_request_firstline_uri\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_version_request_firstline_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_day\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_monthname\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_month\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_weekofweekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_weekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_year\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_hour\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_minute\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_second\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_millisecond\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_epoch_request_receive_time_epoch\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_day_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_monthname_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_month_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_weekofweekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_weekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_year_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_hour_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_minute_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_second_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_millisecond_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_date_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_time_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"bytes_response_body_bytes_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_last_day\",\"type\":[\"int\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_last_monthname\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_last_month\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_last_weekofweekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_weekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_year\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_last_hour\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_last_minute\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_last_second\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_last_millisecond\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_last_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_last_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_epoch_request_receive_time_last_epoch\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_last_day_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_last_monthname_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_last_month_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_last_weekofweekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_weekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_year_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_last_hour_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_last_minute_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_last_second_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_last_millisecond_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_last_date_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_last_time_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_path_request_firstline_uri_path\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_ref_request_firstline_uri_ref\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_request_firstline_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_version_request_firstline_protocol_version\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body_icd_9_description\",\"type\":[\"string\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_connection_client_user\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_connection_client_user_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_stamp_request_receive_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_stamp_request_receive_time_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_firstline_request_firstline\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_request_status_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"bytes_response_body_bytes\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_method_request_firstline_method\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_uri_request_firstline_uri\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_version_request_firstline_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_day\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_monthname\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_month\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_weekofweekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_weekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_year\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_hour\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_minute\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_second\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_millisecond\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_epoch_request_receive_time_epoch\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_day_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_monthname_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_month_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_weekofweekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_weekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_year_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_hour_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_minute_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_second_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_millisecond_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_date_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_time_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"bytes_response_body_bytes_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_last_day\",\"type\":[\"int\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_last_monthname\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_last_month\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_last_weekofweekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_weekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_year\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_last_hour\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_last_minute\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_last_second\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_last_millisecond\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_last_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_last_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_epoch_request_receive_time_last_epoch\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_last_day_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_last_monthname_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_last_month_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_last_weekofweekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_weekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_year_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_last_hour_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_last_minute_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_last_second_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_last_millisecond_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_last_date_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_last_time_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_path_request_firstline_uri_path\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_ref_request_firstline_uri_ref\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_request_firstline_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_version_request_firstline_protocol_version\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body_icd_9_description\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"id\",\"type\":[\"long\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_connection_client_user\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_connection_client_user_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_stamp_request_receive_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_stamp_request_receive_time_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_firstline_request_firstline\",\"type\":[\"string\",\"null\"]},{\"name\":\"string_request_status_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"bytes_response_body_bytes\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_method_request_firstline_method\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_uri_request_firstline_uri\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_version_request_firstline_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_day\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_monthname\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_month\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_weekofweekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_weekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_year\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_hour\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_minute\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_second\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_millisecond\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_epoch_request_receive_time_epoch\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_day_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_monthname_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_month_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_weekofweekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_weekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_year_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_hour_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_minute_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_second_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_millisecond_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_date_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_time_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"bytes_response_body_bytes_last\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_last_day\",\"type\":[\"int\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_last_monthname\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_last_month\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_last_weekofweekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_weekyear\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_year\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_last_hour\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_last_minute\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_last_second\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_last_millisecond\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_last_date\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_last_time\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_epoch_request_receive_time_last_epoch\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_day_request_receive_time_last_day_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_monthname_request_receive_time_last_monthname_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_month_request_receive_time_last_month_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_week_request_receive_time_last_weekofweekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_weekyear_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_year_request_receive_time_last_year_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_hour_request_receive_time_last_hour_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_minute_request_receive_time_last_minute_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_second_request_receive_time_last_second_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_millisecond_request_receive_time_last_millisecond_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_date_request_receive_time_last_date_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"time_time_request_receive_time_last_time_utc\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_path_request_firstline_uri_path\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_ref_request_firstline_uri_ref\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_request_firstline_protocol\",\"type\":[\"string\",\"null\"]},{\"name\":\"http_protocol_version_request_firstline_protocol_version\",\"type\":[\"string\",\"null\"]},{\"name\":\"ip_connection_client_host_1\",\"type\":[\"string\",\"null\"]},{\"name\":\"Body_icd_9_description\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQuery2", - "type": "batchsink", - "label": "BigQuery2", - "icon": "fa-plug", - "$$hashKey": "object:331", - "isPluginAvailable": true, - "_uiPosition": { - "left": "1096px", - "top": "342px" - } - } - ], - "schedule": "0 1 */1 * *", - "engine": "spark", - "numOfRecordsPreview": 100, - "rangeRecordsPreview": { - "min": 1, - "max": "5000" - }, - "description": "Data Pipeline Application", - "maxConcurrentRuns": 1, - "pushdownEnabled": false, - "transformationPushdown": {} - }, - "version": "d2fd2cff-afdb-11ee-84cf-000000df2f26" -} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_timestamp_wrangle-cdap-data-pipeline.json b/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_timestamp_wrangle-cdap-data-pipeline.json deleted file mode 100644 index 23bbcfba9..000000000 --- a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_timestamp_wrangle-cdap-data-pipeline.json +++ /dev/null @@ -1,173 +0,0 @@ -{ - "name": "parse_as_timestamp", - "description": "Data Pipeline Application", - "artifact": { - "name": "cdap-data-pipeline", - "version": "[6.0.0, 7.0.0)", - "scope": "SYSTEM" - }, - "config": { - "resources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "connections": [ - { - "from": "BigQueryTable", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "BigQuery2" - } - ], - "postActions": [], - "properties": {}, - "processTimingEnabled": true, - "stageLoggingEnabled": true, - "stages": [ - { - "name": "BigQueryTable", - "plugin": { - "name": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "dataset": "Wrangler", - "table": "timestampupd", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"create_date\",\"type\":\"string\"},{\"name\":\"update_date\",\"type\":\"string\"},{\"name\":\"time\",\"type\":\"long\"},{\"name\":\"price\",\"type\":\"string\"}]}", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "enableQueryingViews": "false" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"create_date\",\"type\":\"string\"},{\"name\":\"update_date\",\"type\":\"string\"},{\"name\":\"time\",\"type\":\"long\"},{\"name\":\"price\",\"type\":\"string\"}]}" - } - ], - "id": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "icon": "fa-plug", - "$$hashKey": "object:509", - "isPluginAvailable": true, - "_uiPosition": { - "left": "496px", - "top": "343px" - } - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform" - }, - "properties": { - "directives": "parse-timestamp :time\nparse-as-currency :price :newprice\nformat-as-currency :newprice :format_price\nparse-as-simple-date :create_date yyyy-MM-dd\nparse-as-simple-date :update_date yyyy-MM-dd\ndiff-date :create_date :update_date :diff_date\ntimestamp-to-datetime :update_date\nrename :newprice :id", - "field": "*", - "precondition": "false", - "workspaceId": "dbb637f2-8334-4d73-b35c-894732e01e49", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"create_date\",\"type\":[{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"},\"null\"]},{\"name\":\"update_date\",\"type\":[{\"type\":\"string\",\"logicalType\":\"datetime\"},\"null\"]},{\"name\":\"time\",\"type\":[{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"},\"null\"]},{\"name\":\"price\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"double\",\"null\"]},{\"name\":\"format_price\",\"type\":[\"string\",\"null\"]},{\"name\":\"diff_date\",\"type\":[\"long\",\"null\"]}]}", - "on-error": "fail-pipeline" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"create_date\",\"type\":[{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"},\"null\"]},{\"name\":\"update_date\",\"type\":[{\"type\":\"string\",\"logicalType\":\"datetime\"},\"null\"]},{\"name\":\"time\",\"type\":[{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"},\"null\"]},{\"name\":\"price\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"double\",\"null\"]},{\"name\":\"format_price\",\"type\":[\"string\",\"null\"]},{\"name\":\"diff_date\",\"type\":[\"long\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "BigQueryTable", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"create_date\",\"type\":\"string\"},{\"name\":\"update_date\",\"type\":\"string\"},{\"name\":\"time\",\"type\":\"long\"},{\"name\":\"price\",\"type\":\"string\"}]}" - } - ], - "id": "Wrangler", - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataPreparation", - "$$hashKey": "object:510", - "isPluginAvailable": true, - "_uiPosition": { - "left": "796px", - "top": "343px" - } - }, - { - "name": "BigQuery2", - "plugin": { - "name": "BigQueryTable", - "type": "batchsink", - "label": "BigQuery2", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "dataset": "Wrangler", - "table": "timeupd", - "operation": "insert", - "truncateTable": "false", - "allowSchemaRelaxation": "false", - "location": "US", - "createPartitionedTable": "false", - "partitioningType": "TIME", - "partitionFilterRequired": "false", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"create_date\",\"type\":[{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"},\"null\"]},{\"name\":\"update_date\",\"type\":[{\"type\":\"string\",\"logicalType\":\"datetime\"},\"null\"]},{\"name\":\"time\",\"type\":[{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"},\"null\"]},{\"name\":\"price\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"double\",\"null\"]},{\"name\":\"format_price\",\"type\":[\"string\",\"null\"]},{\"name\":\"diff_date\",\"type\":[\"long\",\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"create_date\",\"type\":[{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"},\"null\"]},{\"name\":\"update_date\",\"type\":[{\"type\":\"string\",\"logicalType\":\"datetime\"},\"null\"]},{\"name\":\"time\",\"type\":[{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"},\"null\"]},{\"name\":\"price\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"double\",\"null\"]},{\"name\":\"format_price\",\"type\":[\"string\",\"null\"]},{\"name\":\"diff_date\",\"type\":[\"long\",\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"create_date\",\"type\":[{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"},\"null\"]},{\"name\":\"update_date\",\"type\":[{\"type\":\"string\",\"logicalType\":\"datetime\"},\"null\"]},{\"name\":\"time\",\"type\":[{\"type\":\"long\",\"logicalType\":\"timestamp-micros\"},\"null\"]},{\"name\":\"price\",\"type\":[\"string\",\"null\"]},{\"name\":\"id\",\"type\":[\"double\",\"null\"]},{\"name\":\"format_price\",\"type\":[\"string\",\"null\"]},{\"name\":\"diff_date\",\"type\":[\"long\",\"null\"]}]}" - } - ], - "id": "BigQuery2", - "type": "batchsink", - "label": "BigQuery2", - "icon": "fa-plug", - "$$hashKey": "object:511", - "isPluginAvailable": true, - "_uiPosition": { - "left": "1096px", - "top": "343px" - } - } - ], - "schedule": "0 1 */1 * *", - "engine": "spark", - "numOfRecordsPreview": 100, - "rangeRecordsPreview": { - "min": 1, - "max": "5000" - }, - "maxConcurrentRuns": 1, - "pushdownEnabled": false, - "transformationPushdown": {} - }, - "version": "60373737-4e22-11ee-9c01-00000016111e" -} \ No newline at end of file diff --git a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_xmltojson_wrangler-cdap-data-pipeline (1).json b/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_xmltojson_wrangler-cdap-data-pipeline (1).json deleted file mode 100644 index 11985004c..000000000 --- a/wrangler-transform/src/e2e-test/resources/testData/Wrangler/parse_xmltojson_wrangler-cdap-data-pipeline (1).json +++ /dev/null @@ -1,358 +0,0 @@ -{ - "name": "parse_xmltojson_wrangler", - "description": "Data Pipeline Application", - "artifact": { - "name": "cdap-data-pipeline", - "version": "[6.0.0, 7.0.0)", - "scope": "SYSTEM" - }, - "config": { - "resources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "driverResources": { - "memoryMB": 2048, - "virtualCores": 1 - }, - "connections": [ - { - "from": "BigQueryTable", - "to": "Wrangler" - }, - { - "from": "Wrangler", - "to": "BigQuery2" - } - ], - "postActions": [], - "properties": {}, - "processTimingEnabled": true, - "stageLoggingEnabled": true, - "stages": [ - { - "name": "BigQueryTable", - "plugin": { - "name": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "dataset": "Wrangler_Test", - "table": "xmlnews", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"email\",\"type\":[\"string\",\"null\"]},{\"name\":\"xmldata\",\"type\":[\"string\",\"null\"]}]}", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "enableQueryingViews": "false" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"email\",\"type\":[\"string\",\"null\"]},{\"name\":\"xmldata\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "BigQueryTable", - "type": "batchsource", - "label": "BigQueryTable", - "icon": "fa-plug", - "$$hashKey": "object:609", - "isPluginAvailable": true, - "_uiPosition": { - "left": "496px", - "top": "342px" - }, - "_backendProperties": { - "schema": { - "name": "schema", - "description": "The schema of the table to read.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "viewMaterializationDataset": { - "name": "viewMaterializationDataset", - "description": "The dataset in the specified project where the temporary table should be created. Defaults to the same dataset in which the table is located.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "enableQueryingViews": { - "name": "enableQueryingViews", - "description": "Whether to allow querying views. Since BigQuery views are not materialized by default, querying them may have a performance overhead.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceAccountJSON": { - "name": "serviceAccountJSON", - "description": "Content of the service account file.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitionTo": { - "name": "partitionTo", - "description": "It's inclusive partition end date. It should be a String with format \"yyyy-MM-dd\". This value is ignored if the table does not support partitioning.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "cmekKey": { - "name": "cmekKey", - "description": "The GCP customer managed encryption key (CMEK) name used to encrypt data written to any bucket, dataset or table created by the plugin. If the bucket, dataset or table already exists, this is ignored. More information can be found at https://cloud.google.com/data-fusion/docs/how-to/customer-managed-encryption-keys", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "useConnection": { - "name": "useConnection", - "description": "Whether to use an existing connection.", - "type": "boolean", - "required": false, - "macroSupported": false, - "macroEscapingEnabled": false, - "children": [] - }, - "project": { - "name": "project", - "description": "Google Cloud Project ID. It can be found on the Dashboard in the Google Cloud Platform Console.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "viewMaterializationProject": { - "name": "viewMaterializationProject", - "description": "The project name where the temporary table should be created. Defaults to the same project in which the table is located.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "filter": { - "name": "filter", - "description": "The WHERE clause filters out rows by evaluating each row against boolean expression, and discards all rows that do not return TRUE (that is, rows that return FALSE or NULL).", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "bucket": { - "name": "bucket", - "description": "The Google Cloud Storage bucket to store temporary data in. Cloud Storage data will be deleted after it is loaded into BigQuery. If it is not provided, a unique bucket will be automatically created and then deleted after the run finishes. The service account must have permission to create buckets in the configured project.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "partitionFrom": { - "name": "partitionFrom", - "description": "It's inclusive partition start date. It should be a String with format \"yyyy-MM-dd\". This value is ignored if the table does not support partitioning.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceFilePath": { - "name": "serviceFilePath", - "description": "Path on the local file system of the service account key used for authorization. Can be set to 'auto-detect' when running on a Dataproc cluster. When running on other clusters, the file must be present on every node in the cluster.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "serviceAccountType": { - "name": "serviceAccountType", - "description": "Service account type, file path where the service account is located or the JSON content of the service account.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "connection": { - "name": "connection", - "description": "The existing connection to use.", - "type": "bigqueryconnectorconfig", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [ - "serviceAccountJSON", - "serviceFilePath", - "project", - "serviceAccountType", - "datasetProject" - ] - }, - "datasetProject": { - "name": "datasetProject", - "description": "The project the dataset belongs to. This is only required if the dataset is not in the same project that the BigQuery job will run in. If no value is given, it will default to the configured project ID.", - "type": "string", - "required": false, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "dataset": { - "name": "dataset", - "description": "The dataset to write to. A dataset is contained within a specific project. Datasets are top-level containers that are used to organize and control access to tables and views.", - "type": "string", - "required": true, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "table": { - "name": "table", - "description": "The table to read from. A table contains individual records organized in rows. Each record is composed of columns (also called fields). Every table is defined by a schema that describes the column names, data types, and other information.", - "type": "string", - "required": true, - "macroSupported": true, - "macroEscapingEnabled": false, - "children": [] - }, - "referenceName": { - "name": "referenceName", - "description": "This will be used to uniquely identify this source for lineage, annotating metadata, etc.", - "type": "string", - "required": false, - "macroSupported": false, - "macroEscapingEnabled": false, - "children": [] - } - }, - "description": "This source reads the entire contents of a BigQuery table. BigQuery is Google's serverless, highly scalable, enterprise data warehouse.Data is first written to a temporary location on Google Cloud Storage, then read into the pipeline from there.", - "selected": false - }, - { - "name": "Wrangler", - "plugin": { - "name": "Wrangler", - "type": "transform", - "label": "Wrangler", - "artifact": { - "name": "wrangler-transform" - }, - "properties": { - "directives": "parse-xml-to-json :xmldata 1\nsplit-email :email\ntext-distance block email email_account distance\ntext-metric longest-common-subsequence email email_account distance2\nwrite-as-json-object :email_domain distance,email_account\nstemming :email\nsplit-to-rows :email_account '0'\nrename :email_account id", - "field": "*", - "precondition": "false", - "workspaceId": "4c1d141a-66f6-4b4c-bc5f-a92ca41bee42", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"email\",\"type\":[\"string\",\"null\"]},{\"name\":\"xmldata_note\",\"type\":[{\"type\":\"record\",\"name\":\"xmldata_note69A9BFB19CE40D9BB21E66FF1DCB2823\",\"fields\":[{\"name\":\"heading\",\"type\":[\"string\",\"null\"]},{\"name\":\"from\",\"type\":[\"string\",\"null\"]},{\"name\":\"to\",\"type\":[\"string\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"email_domain\",\"type\":[{\"type\":\"record\",\"name\":\"email_domain53E9571E3B0C6D8ACD29805625EDE284\",\"fields\":[{\"name\":\"distance\",\"type\":[\"float\",\"null\"]},{\"name\":\"email_account\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"distance\",\"type\":[\"float\",\"null\"]},{\"name\":\"distance2\",\"type\":[\"float\",\"null\"]},{\"name\":\"email_porter\",\"type\":[{\"type\":\"array\",\"items\":[\"string\",\"null\"]},\"null\"]}]}", - "expressionLanguage": "jexl", - "on-error": "fail-pipeline" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"email\",\"type\":[\"string\",\"null\"]},{\"name\":\"xmldata_note\",\"type\":[{\"type\":\"record\",\"name\":\"xmldata_note69A9BFB19CE40D9BB21E66FF1DCB2823\",\"fields\":[{\"name\":\"heading\",\"type\":[\"string\",\"null\"]},{\"name\":\"from\",\"type\":[\"string\",\"null\"]},{\"name\":\"to\",\"type\":[\"string\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"email_domain\",\"type\":[{\"type\":\"record\",\"name\":\"email_domain53E9571E3B0C6D8ACD29805625EDE284\",\"fields\":[{\"name\":\"distance\",\"type\":[\"float\",\"null\"]},{\"name\":\"email_account\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"distance\",\"type\":[\"float\",\"null\"]},{\"name\":\"distance2\",\"type\":[\"float\",\"null\"]},{\"name\":\"email_porter\",\"type\":[{\"type\":\"array\",\"items\":[\"string\",\"null\"]},\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "BigQueryTable", - "schema": "{\"type\":\"record\",\"name\":\"output\",\"fields\":[{\"name\":\"email\",\"type\":[\"string\",\"null\"]},{\"name\":\"xmldata\",\"type\":[\"string\",\"null\"]}]}" - } - ], - "id": "Wrangler", - "type": "transform", - "label": "Wrangler", - "icon": "icon-DataPreparation", - "$$hashKey": "object:610", - "isPluginAvailable": true, - "_uiPosition": { - "left": "796px", - "top": "342px" - }, - "selected": false - }, - { - "name": "BigQuery2", - "plugin": { - "name": "BigQueryTable", - "type": "batchsink", - "label": "BigQuery2", - "artifact": { - "name": "google-cloud" - }, - "properties": { - "useConnection": "false", - "project": "auto-detect", - "serviceAccountType": "filePath", - "serviceFilePath": "auto-detect", - "dataset": "Wrangler_Test", - "table": "fintab", - "operation": "insert", - "truncateTable": "false", - "allowSchemaRelaxation": "false", - "location": "US", - "createPartitionedTable": "false", - "partitioningType": "TIME", - "timePartitioningType": "DAY", - "partitionFilterRequired": "false", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"email\",\"type\":[\"string\",\"null\"]},{\"name\":\"xmldata_note\",\"type\":[{\"type\":\"record\",\"name\":\"xmldata_note69A9BFB19CE40D9BB21E66FF1DCB2823\",\"fields\":[{\"name\":\"heading\",\"type\":[\"string\",\"null\"]},{\"name\":\"from\",\"type\":[\"string\",\"null\"]},{\"name\":\"to\",\"type\":[\"string\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"email_domain\",\"type\":[{\"type\":\"record\",\"name\":\"email_domain53E9571E3B0C6D8ACD29805625EDE284\",\"fields\":[{\"name\":\"distance\",\"type\":[\"float\",\"null\"]},{\"name\":\"email_account\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"distance\",\"type\":[\"float\",\"null\"]},{\"name\":\"distance2\",\"type\":[\"float\",\"null\"]},{\"name\":\"email_porter\",\"type\":[{\"type\":\"array\",\"items\":[\"string\",\"null\"]},\"null\"]}]}" - } - }, - "outputSchema": [ - { - "name": "etlSchemaBody", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"email\",\"type\":[\"string\",\"null\"]},{\"name\":\"xmldata_note\",\"type\":[{\"type\":\"record\",\"name\":\"xmldata_note69A9BFB19CE40D9BB21E66FF1DCB2823\",\"fields\":[{\"name\":\"heading\",\"type\":[\"string\",\"null\"]},{\"name\":\"from\",\"type\":[\"string\",\"null\"]},{\"name\":\"to\",\"type\":[\"string\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"email_domain\",\"type\":[{\"type\":\"record\",\"name\":\"email_domain53E9571E3B0C6D8ACD29805625EDE284\",\"fields\":[{\"name\":\"distance\",\"type\":[\"float\",\"null\"]},{\"name\":\"email_account\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"distance\",\"type\":[\"float\",\"null\"]},{\"name\":\"distance2\",\"type\":[\"float\",\"null\"]},{\"name\":\"email_porter\",\"type\":[{\"type\":\"array\",\"items\":[\"string\",\"null\"]},\"null\"]}]}" - } - ], - "inputSchema": [ - { - "name": "Wrangler", - "schema": "{\"type\":\"record\",\"name\":\"outputSchema\",\"fields\":[{\"name\":\"email\",\"type\":[\"string\",\"null\"]},{\"name\":\"xmldata_note\",\"type\":[{\"type\":\"record\",\"name\":\"xmldata_note69A9BFB19CE40D9BB21E66FF1DCB2823\",\"fields\":[{\"name\":\"heading\",\"type\":[\"string\",\"null\"]},{\"name\":\"from\",\"type\":[\"string\",\"null\"]},{\"name\":\"to\",\"type\":[\"string\",\"null\"]},{\"name\":\"body\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"id\",\"type\":[\"string\",\"null\"]},{\"name\":\"email_domain\",\"type\":[{\"type\":\"record\",\"name\":\"email_domain53E9571E3B0C6D8ACD29805625EDE284\",\"fields\":[{\"name\":\"distance\",\"type\":[\"float\",\"null\"]},{\"name\":\"email_account\",\"type\":[\"string\",\"null\"]}]},\"null\"]},{\"name\":\"distance\",\"type\":[\"float\",\"null\"]},{\"name\":\"distance2\",\"type\":[\"float\",\"null\"]},{\"name\":\"email_porter\",\"type\":[{\"type\":\"array\",\"items\":[\"string\",\"null\"]},\"null\"]}]}" - } - ], - "id": "BigQuery2", - "type": "batchsink", - "label": "BigQuery2", - "icon": "fa-plug", - "$$hashKey": "object:611", - "isPluginAvailable": true, - "_uiPosition": { - "left": "1096px", - "top": "342px" - }, - "selected": false - } - ], - "schedule": "0 1 */1 * *", - "engine": "spark", - "numOfRecordsPreview": 100, - "rangeRecordsPreview": { - "min": 1, - "max": "5000" - }, - "maxConcurrentRuns": 1, - "pushdownEnabled": false, - "transformationPushdown": {} - }, - "version": "42a96af3-af8e-11ee-8372-00000073831c" -} \ No newline at end of file diff --git a/wrangler-transform/src/main/java/io/cdap/wrangler/Precondition.java b/wrangler-transform/src/main/java/io/cdap/wrangler/Precondition.java deleted file mode 100644 index 6fae9d470..000000000 --- a/wrangler-transform/src/main/java/io/cdap/wrangler/Precondition.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright © 2016-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import io.cdap.wrangler.api.Row; -import org.apache.commons.jexl3.scripting.JexlScriptEngine; - -import javax.script.Bindings; -import javax.script.CompiledScript; -import javax.script.ScriptContext; -import javax.script.ScriptException; -import javax.script.SimpleBindings; -import javax.script.SimpleScriptContext; - -/** - * A precondition expression that filters data into the directives. - */ -public class Precondition { - private final String condition; - private final CompiledScript script; - // SimpleScriptContext is pretty expensive to construct due to all PrintWriter creation, so let's cache it - private final ThreadLocal contextCache = ThreadLocal.withInitial(this::createContext); - - public Precondition(String condition) throws PreconditionException { - this.condition = condition; - JexlScriptEngine engine = new JexlScriptEngine(); - try { - script = engine.compile(condition); - } catch (ScriptException e) { - if (e.getCause() != null) { - throw new PreconditionException(e.getCause().getMessage()); - } else { - throw new PreconditionException(e.getMessage()); - } - } - } - - public ScriptContext createContext() { - ScriptContext parent = script.getEngine().getContext(); - - SimpleScriptContext context = new SimpleScriptContext(); - context.setBindings(parent.getBindings(ScriptContext.GLOBAL_SCOPE), - ScriptContext.GLOBAL_SCOPE); - context.setWriter(parent.getWriter()); - context.setReader(parent.getReader()); - context.setErrorWriter(parent.getErrorWriter()); - return context; - } - - public boolean apply(Row row) throws PreconditionException { - Bindings bindings = new SimpleBindings(); - for (int i = 0; i < row.width(); ++i) { - bindings.put(row.getColumn(i), row.getValue(i)); - } - - try { - ScriptContext scriptContext = contextCache.get(); - scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE); - Object result = script.eval(scriptContext); - if (!(result instanceof Boolean)) { - throw new PreconditionException( - String.format("Precondition '%s' does not result in true or false.", condition) - ); - } - return (Boolean) result; - } catch (ScriptException e) { - // Generally JexlException wraps the original exception, so it's good idea - // to check if there is a inner exception, if there is wrap it in 'DirectiveExecutionException' - // else just print the error message. - if (e.getCause() != null) { - throw new PreconditionException(e.getCause().getMessage()); - } else { - throw new PreconditionException(e.getMessage()); - } - } - } -} diff --git a/wrangler-transform/src/main/java/io/cdap/wrangler/PreconditionException.java b/wrangler-transform/src/main/java/io/cdap/wrangler/PreconditionException.java deleted file mode 100644 index dd580ac34..000000000 --- a/wrangler-transform/src/main/java/io/cdap/wrangler/PreconditionException.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -/** - * Thrown when there are issues with pre-conditions. - */ -public class PreconditionException extends Exception { - public PreconditionException(String message) { - super(message); - } -} diff --git a/wrangler-transform/src/main/java/io/cdap/wrangler/Wrangler.java b/wrangler-transform/src/main/java/io/cdap/wrangler/Wrangler.java deleted file mode 100644 index d4af8590e..000000000 --- a/wrangler-transform/src/main/java/io/cdap/wrangler/Wrangler.java +++ /dev/null @@ -1,803 +0,0 @@ -/* - * Copyright © 2016-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableMap; -import io.cdap.cdap.api.annotation.Description; -import io.cdap.cdap.api.annotation.Macro; -import io.cdap.cdap.api.annotation.Name; -import io.cdap.cdap.api.annotation.Plugin; -import io.cdap.cdap.api.data.format.StructuredRecord; -import io.cdap.cdap.api.data.schema.Schema; -import io.cdap.cdap.api.exception.ErrorCategory; -import io.cdap.cdap.api.exception.ErrorType; -import io.cdap.cdap.api.exception.ErrorUtils; -import io.cdap.cdap.api.metrics.Metrics; -import io.cdap.cdap.api.plugin.PluginConfig; -import io.cdap.cdap.api.plugin.PluginProperties; -import io.cdap.cdap.etl.api.Emitter; -import io.cdap.cdap.etl.api.FailureCollector; -import io.cdap.cdap.etl.api.InvalidEntry; -import io.cdap.cdap.etl.api.PipelineConfigurer; -import io.cdap.cdap.etl.api.StageContext; -import io.cdap.cdap.etl.api.StageSubmitterContext; -import io.cdap.cdap.etl.api.Transform; -import io.cdap.cdap.etl.api.TransformContext; -import io.cdap.cdap.etl.api.relational.Expression; -import io.cdap.cdap.etl.api.relational.ExpressionFactory; -import io.cdap.cdap.etl.api.relational.InvalidRelation; -import io.cdap.cdap.etl.api.relational.LinearRelationalTransform; -import io.cdap.cdap.etl.api.relational.Relation; -import io.cdap.cdap.etl.api.relational.RelationalTranformContext; -import io.cdap.cdap.etl.api.relational.StringExpressionFactoryType; -import io.cdap.cdap.features.Feature; -import io.cdap.directives.aggregates.DefaultTransientStore; -import io.cdap.wrangler.api.CompileException; -import io.cdap.wrangler.api.CompileStatus; -import io.cdap.wrangler.api.Compiler; -import io.cdap.wrangler.api.Directive; -import io.cdap.wrangler.api.DirectiveLoadException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.EntityCountMetric; -import io.cdap.wrangler.api.ErrorRecord; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.api.RecipeParser; -import io.cdap.wrangler.api.RecipePipeline; -import io.cdap.wrangler.api.RecipeSymbol; -import io.cdap.wrangler.api.Row; -import io.cdap.wrangler.api.TokenGroup; -import io.cdap.wrangler.api.TransientStore; -import io.cdap.wrangler.api.TransientVariableScope; -import io.cdap.wrangler.executor.RecipePipelineExecutor; -import io.cdap.wrangler.lineage.LineageOperations; -import io.cdap.wrangler.parser.GrammarBasedParser; -import io.cdap.wrangler.parser.MigrateToV2; -import io.cdap.wrangler.parser.NoOpDirectiveContext; -import io.cdap.wrangler.parser.RecipeCompiler; -import io.cdap.wrangler.proto.Contexts; -import io.cdap.wrangler.registry.CompositeDirectiveRegistry; -import io.cdap.wrangler.registry.DirectiveInfo; -import io.cdap.wrangler.registry.DirectiveRegistry; -import io.cdap.wrangler.registry.SystemDirectiveRegistry; -import io.cdap.wrangler.registry.UserDirectiveRegistry; -import io.cdap.wrangler.utils.StructuredToRowTransformer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.StringJoiner; -import java.util.stream.Collectors; -import javax.annotation.Nullable; - -import static io.cdap.cdap.features.Feature.WRANGLER_FAIL_PIPELINE_FOR_ERROR; -import static io.cdap.wrangler.metrics.Constants.Tags.APP_ENTITY_TYPE; -import static io.cdap.wrangler.metrics.Constants.Tags.APP_ENTITY_TYPE_NAME; - -/** - * Wrangler - A interactive tool for data cleansing and transformation. - * - * This plugin is an implementation of the transformation that are performed in the - * backend for operationalizing all the interactive wrangling that is being performed - * by the user. - */ -@Plugin(type = "transform") -@Name("Wrangler") -@Description("Wrangler - A interactive tool for data cleansing and transformation.") -public class Wrangler extends Transform implements LinearRelationalTransform { - private static final Logger LOG = LoggerFactory.getLogger(Wrangler.class); - - // Configuration specifying the dataprep application and service name. - private static final String APPLICATION_NAME = "dataprep"; - private static final String SERVICE_NAME = "service"; - private static final String CONFIG_METHOD = "config"; - private static final String ON_ERROR_DEFAULT = "fail-pipeline"; - private static final String ON_ERROR_FAIL_PIPELINE = "fail-pipeline"; - private static final String ON_ERROR_PROCEED = "send-to-error-port"; - private static final String ERROR_STRATEGY_DEFAULT = "wrangler.error.strategy.default"; - - // Directive usage metric - public static final String DIRECTIVE_METRIC_NAME = "wrangler.directive.count"; - public static final int DIRECTIVE_METRIC_COUNT = 1; - public static final String DIRECTIVE_ENTITY_TYPE = "directive"; - - // Precondition languages - private static final String PRECONDITION_LANGUAGE_JEXL = "jexl"; - private static final String PRECONDITION_LANGUAGE_SQL = "sql"; - - // Plugin configuration. - private final Config config; - - // Wrangle Execution RecipePipeline - private RecipePipeline pipeline; - - // Output Schema associated with readable output. - private Schema oSchema = null; - - // Error counter. - private long errorCounter; - - // Precondition application - private Precondition condition = null; - - // Transient Store - private TransientStore store; - - // Directive registry. - private DirectiveRegistry registry; - - // on error strategy - private String onErrorStrategy; - - // This is used only for tests, otherwise this is being injected by the ingestion framework. - public Wrangler(Config config) { - this.config = config; - } - - /** - * Configures the plugin during deployment of the pipeline that uses the plugin. - * - *

- *

    - *
  • Parses the directives configured. If there are any issues they will highlighted during deployment
  • - *
  • Input schema is validated.
  • - *
  • Compiles pre-condition expression.
  • - *
- *

- */ - @Override - public void configurePipeline(PipelineConfigurer configurer) { - super.configurePipeline(configurer); - FailureCollector collector = configurer.getStageConfigurer().getFailureCollector(); - - try { - Schema iSchema = configurer.getStageConfigurer().getInputSchema(); - if (!config.containsMacro(Config.NAME_FIELD) && !(config.getField().equals("*") - || config.getField().equals("#"))) { - validateInputSchema(iSchema, collector); - } - - String directives = config.getDirectives(); - if (config.getUDDs() != null && !config.getUDDs().trim().isEmpty()) { - if (config.containsMacro("directives")) { - directives = String.format("#pragma load-directives %s;", config.getUDDs()); - } else { - directives = String.format("#pragma load-directives %s;%s", config.getUDDs(), config.getDirectives()); - } - } - - if (!config.containsMacro(Config.NAME_PRECONDITION_LANGUAGE)) { - if (PRECONDITION_LANGUAGE_SQL.equalsIgnoreCase(config.getPreconditionLanguage())) { - if (!config.containsMacro(Config.NAME_PRECONDITION_SQL)) { - validatePrecondition(config.getPreconditionSQL(), true, collector); - } - validateSQLModeDirectives(collector); - } else { - if (!config.containsMacro(Config.NAME_PRECONDITION)) { - validatePrecondition(config.getPreconditionJEXL(), false, collector); - } - } - } - - // Validate the DSL by compiling the DSL. In case of macros being - // specified, the compilation will them at this phase. - Compiler compiler = new RecipeCompiler(); - try { - // Compile the directive extracting the loadable plugins (a.k.a - // Directives in this context). - CompileStatus status = compiler.compile(new MigrateToV2(directives).migrate()); - RecipeSymbol symbols = status.getSymbols(); - if (symbols != null) { - Set dynamicDirectives = symbols.getLoadableDirectives(); - for (String directive : dynamicDirectives) { - Object directivePlugin = configurer.usePlugin(Directive.TYPE, directive, directive, - PluginProperties.builder().build()); - if (directivePlugin == null) { - collector.addFailure( - String.format("User Defined Directive '%s' is not deployed or is not available.", directive), - "Ensure the directive is deployed.") - .withPluginNotFound(directive, directive, Directive.TYPE) - .withConfigElement(Config.NAME_UDD, directive); - } - } - // If the 'directives' contains macro, then we would not attempt to compile - // it. - if (!config.containsMacro(Config.NAME_DIRECTIVES)) { - // Create the registry that only interacts with system directives. - registry = SystemDirectiveRegistry.INSTANCE; - - Iterator iterator = symbols.iterator(); - while (iterator.hasNext()) { - TokenGroup group = iterator.next(); - if (group != null) { - String directive = (String) group.get(0).value(); - DirectiveInfo directiveInfo = registry.get("", directive); - if (directiveInfo == null && !dynamicDirectives.contains(directive)) { - collector.addFailure( - String.format("Wrangler plugin has a directive '%s' that does not exist in system or " + - "user space.", directive), - "Ensure the directive is loaded or the directive name is correct.") - .withConfigProperty(Config.NAME_DIRECTIVES); - } - } - } - } - } - } catch (CompileException e) { - collector.addFailure( - String.format("Compilation error occurred, %s: %s ", e.getClass().getName(), - e.getMessage()), null); - } catch (DirectiveParseException e) { - collector.addFailure( - String.format("Error parsing directive, %s: %s", e.getClass().getName(), - e.getMessage()), null); - } catch (DirectiveLoadException e) { - collector.addFailure( - String.format("Error loading directive, %s: %s", e.getClass().getName(), - e.getMessage()), null); - } - - // Based on the configuration create output schema. - try { - if (!config.containsMacro(Config.NAME_SCHEMA)) { - oSchema = Schema.parseJson(config.schema); - } - } catch (IOException e) { - collector.addFailure( - String.format("Invalid output schema %s: %s", e.getClass().getName(), e.getMessage()), - null).withConfigProperty(Config.NAME_SCHEMA).withStacktrace(e.getStackTrace()); - } - - // Check if jexl pre-condition is not null or empty and if so compile expression. - if (!config.containsMacro(Config.NAME_PRECONDITION) && !config.containsMacro( - Config.NAME_PRECONDITION_LANGUAGE)) { - if (PRECONDITION_LANGUAGE_JEXL.equalsIgnoreCase(config.getPreconditionLanguage()) - && checkPreconditionNotEmpty(false)) { - try { - new Precondition(config.getPreconditionJEXL()); - } catch (PreconditionException e) { - collector.addFailure(String.format("Error compiling precondition expression, %s: %s", - e.getClass().getName(), e.getMessage()), null) - .withConfigProperty(Config.NAME_PRECONDITION); - } - } - } - - // Set the output schema. - if (oSchema != null) { - configurer.getStageConfigurer().setOutputSchema(oSchema); - } - } catch (Exception e) { - collector.addFailure("Error occurred : " + e.getMessage(), null).withStacktrace(e.getStackTrace()); - } - collector.getOrThrowException(); - } - - /** - * {@code prepareRun} is invoked by the client once before the job is submitted, but after the resolution - * of macros if there are any defined. - * - * @param context a instance {@link StageSubmitterContext} - * @throws Exception thrown if there any issue with prepareRun. - */ - @Override - public void prepareRun(StageSubmitterContext context) throws Exception { - super.prepareRun(context); - - // Validate input schema. If there is no input schema available then there - // is no transformations that can be applied to just return. - Schema inputSchema = context.getInputSchema(); - if (inputSchema == null || inputSchema.getFields() == null || inputSchema.getFields().isEmpty()) { - return; - } - - // After input and output schema are validated, it's time to extract - // all the fields from input and output schema. - Set input = inputSchema.getFields().stream() - .map(Schema.Field::getName).collect(Collectors.toSet()); - - // If there is input schema, but if there is no output schema, there is nothing to apply - // transformations on. So, there is no point in generating field level lineage. - Schema outputSchema = context.getOutputSchema(); - if (outputSchema == null || outputSchema.getFields() == null || outputSchema.getFields().isEmpty()) { - return; - } - - // After input and output schema are validated, it's time to extract - // all the fields from input and output schema. - Set output = outputSchema.getFields().stream() - .map(Schema.Field::getName).collect(Collectors.toSet()); - - // Parse the recipe and extract all the instances of directives - // to be processed for extracting lineage. - RecipeParser recipe = getRecipeParser(context); - List directives; - try { - directives = recipe.parse(); - } catch (Exception e) { - String errorReason = "Unable to parse recipe and extract all instances of directives."; - throw WranglerErrorUtil.getProgramFailureExceptionDetailsFromChain(e, errorReason, null, - ErrorType.USER); - } - emitDirectiveMetrics(directives, context.getMetrics()); - - LineageOperations lineageOperations = new LineageOperations(input, output, directives); - context.record(lineageOperations.generate()); - } - - /** - * Initialize the wrangler by parsing the directives and creating the runtime context. - * - * @param context framework context being passed. - */ - @Override - public void initialize(TransformContext context) throws Exception { - super.initialize(context); - - // Parse DSL and initialize the wrangle pipeline. - store = new DefaultTransientStore(); - RecipeParser recipe = getRecipeParser(context); - - ExecutorContext ctx = new WranglerPipelineContext(ExecutorContext.Environment.TRANSFORM, context, store); - - // Based on the configuration create output schema. - try { - oSchema = Schema.parseJson(config.schema); - } catch (Exception e) { - String errorReason = "Invalid output schema format."; - String errorMessage = String.format( - "Format of output schema specified is invalid. Please check the format. %s: %s", - e.getClass().getName(), e.getMessage()); - throw WranglerErrorUtil.getProgramFailureExceptionDetailsFromChain(e, errorReason, - errorMessage, ErrorType.USER); - } - - // Check if jexl pre-condition is not null or empty and if so compile expression. - if (!config.containsMacro(Config.NAME_PRECONDITION_LANGUAGE)) { - if (PRECONDITION_LANGUAGE_JEXL.equalsIgnoreCase(config.getPreconditionLanguage()) - && checkPreconditionNotEmpty(false)) { - try { - condition = new Precondition(config.getPreconditionJEXL()); - } catch (Exception e) { - String errorReason = "Failed to evaluate precondition due to an invalid JEXL expression."; - throw WranglerErrorUtil.getProgramFailureExceptionDetailsFromChain(e, errorReason, null, - ErrorType.USER); - } - } - } - - try { - // Create the pipeline executor with context being set. - pipeline = new RecipePipelineExecutor(recipe, ctx); - } catch (Exception e) { - String errorReason = "Unable to compile the recipe and execute directives."; - String errorMessage = String.format( - "Error compiling the recipe and executing directives. " + "%s: %s", - e.getClass().getName(), e.getMessage()); - throw WranglerErrorUtil.getProgramFailureExceptionDetailsFromChain(e, errorReason, - errorMessage, ErrorType.USER); - } - - String defaultStrategy = context.getArguments().get(ERROR_STRATEGY_DEFAULT); - onErrorStrategy = (defaultStrategy != null && config.onError == null) ? defaultStrategy : config.getOnError(); - // Initialize the error counter. - errorCounter = 0; - } - - @Override - public void destroy() { - super.destroy(); - pipeline.close(); - try { - registry.close(); - } catch (IOException e) { - LOG.warn("Unable to close the directive registry. You might see increasing number of open file handle.", e); - } - } - - /** - * Transforms the input record by applying directives on the record being passed. - * - * @param input record to be transformed. - * @param emitter to collect all the output of the transformation. - * @throws Exception thrown if there are any issue with the transformation. - */ - @Override - public void transform(StructuredRecord input, Emitter emitter) throws Exception { - long start = 0; - List records; - - try { - // Creates a row as starting point for input to the pipeline. - Row row = new Row(); - if ("*".equalsIgnoreCase(config.getField())) { - row = StructuredToRowTransformer.transform(input); - } else if ("#".equalsIgnoreCase(config.getField())) { - row.add(input.getSchema().getRecordName(), input); - } else { - row.add(config.getField(), StructuredToRowTransformer.getValue(input, config.getField())); - } - - // If pre-condition is set, then evaluate the precondition - if (PRECONDITION_LANGUAGE_JEXL.equalsIgnoreCase(config.getPreconditionLanguage()) - && checkPreconditionNotEmpty(false)) { - boolean skip = condition.apply(row); - if (skip) { - getContext().getMetrics().count("precondition.filtered", 1); - return; // Expression evaluated to true, so we skip the record. - } - } - - // Reset record aggregation store. - store.reset(TransientVariableScope.GLOBAL); - store.reset(TransientVariableScope.LOCAL); - - start = System.nanoTime(); - records = pipeline.execute(Collections.singletonList(row), oSchema); - // We now extract errors from the execution and pass it on to the error emitter. - List errors = pipeline.errors(); - if (errors.size() > 0) { - StringJoiner errorMessages = new StringJoiner(","); - getContext().getMetrics().count("errors", errors.size()); - for (ErrorRecord error : errors) { - emitter.emitError(new InvalidEntry<>(error.getCode(), error.getMessage(), input)); - errorMessages.add(error.getMessage()); - } - if (WRANGLER_FAIL_PIPELINE_FOR_ERROR.isEnabled(getContext()) - && onErrorStrategy.equalsIgnoreCase(ON_ERROR_FAIL_PIPELINE)) { - String errorReason = String.format("Errors in Wrangler Transformation - %s", - errorMessages); - throw ErrorUtils.getProgramFailureException( - new ErrorCategory(ErrorCategory.ErrorCategoryEnum.PLUGIN), errorReason, errorReason, - ErrorType.UNKNOWN, false, null); - } - } - } catch (Exception e) { - getContext().getMetrics().count("failure", 1); - if (onErrorStrategy.equalsIgnoreCase(ON_ERROR_PROCEED)) { - // Emit error record, if the Error flattener or error handlers are not connected, then - // the record is automatically omitted. - emitter.emitError(new InvalidEntry<>(0, e.getMessage(), input)); - return; - } - if (onErrorStrategy.equalsIgnoreCase(ON_ERROR_FAIL_PIPELINE)) { - emitter.emitAlert(ImmutableMap.of( - "stage", getContext().getStageName(), - "code", String.valueOf(1), - "message", String.format("Stopping pipeline stage %s on error %s", - getContext().getStageName(), e.getMessage()), - "value", String.valueOf(errorCounter) - )); - String errorReason = "Error occurred while processing input data, possibly due to invalid " - + "transformation or schema mismatch."; - String errorMessage = String.format("Pipeline failed at stage:%s, %s: %s", - getContext().getStageName(), e.getClass().getName(), e.getMessage()); - throw WranglerErrorUtil.getProgramFailureExceptionDetailsFromChain(e, errorReason, - errorMessage, ErrorType.UNKNOWN); - } - // If it's 'skip-on-error' we continue processing and don't emit any error records. - return; - } finally { - getContext().getMetrics().gauge("process.time", System.nanoTime() - start); - } - - for (StructuredRecord record : records) { - StructuredRecord.Builder builder = StructuredRecord.builder(oSchema); - // Iterate through output schema, if the 'record' doesn't have it, then - // attempt to take if from 'input'. - for (Schema.Field field : oSchema.getFields()) { - Object wObject = record.get(field.getName()); // wrangled records - if (wObject == null) { - builder.set(field.getName(), null); - } else { - if (wObject instanceof String) { - builder.convertAndSet(field.getName(), (String) wObject); - } else { - // No need to use specific methods for fields of logical type - timestamp, date and time. This is because - // the wObject should already have correct values for corresponding primitive types. - builder.set(field.getName(), wObject); - } - } - } - emitter.emit(builder.build()); - } - } - - /** - * Validates input schema. - * - * @param inputSchema configured for the plugin - * @param collector failure collector - */ - private void validateInputSchema(@Nullable Schema inputSchema, FailureCollector collector) { - if (inputSchema != null) { - // Check the existence of field in input schema - Schema.Field inputSchemaField = inputSchema.getField(config.getField()); - if (inputSchemaField == null) { - collector.addFailure(String.format("Field '%s' must be present in input schema.", config.getField()), null) - .withConfigProperty(Config.NAME_FIELD); - } - } - } - - private void validatePrecondition(String precondition, Boolean isConditionSQL, FailureCollector collector) { - String field = Config.NAME_PRECONDITION; - String language = "Precondition (JEXL)"; - - if (isConditionSQL == true) { - field = Config.NAME_PRECONDITION_SQL; - language = "Precondition (SQL)"; - } - if (Strings.isNullOrEmpty(precondition)) { - collector.addFailure(String.format("%s must be present.", language), - null) - .withConfigProperty(field); - } - } - - private void validateSQLModeDirectives(FailureCollector collector) { - if (!Strings.isNullOrEmpty(config.getDirectives())) { - collector.addFailure("Directives are not supported for precondition of type SQL", null) - .withConfigProperty(Config.NAME_DIRECTIVES); - } - - if (!Strings.isNullOrEmpty(config.getUDDs())) { - collector.addFailure("UDDs are not supported for precondition of type SQL", null) - .withConfigProperty(Config.NAME_UDD); - } - } - - private boolean checkPreconditionNotEmpty(Boolean isConditionSQL) { - if (!isConditionSQL && !Strings.isNullOrEmpty(config.getPreconditionJEXL()) - && !config.getPreconditionJEXL().trim().isEmpty()) { - return true; - } - if (isConditionSQL && !Strings.isNullOrEmpty(config.getPreconditionSQL()) - && !config.getPreconditionSQL().trim().isEmpty()) { - return true; - } - return false; - } - - /** - * This method creates a {@link CompositeDirectiveRegistry} and initializes the {@link RecipeParser} - * with {@link NoOpDirectiveContext} - * - * @param context - * @return - * @throws DirectiveLoadException - * @throws DirectiveParseException - */ - private RecipeParser getRecipeParser(StageContext context) { - - registry = new CompositeDirectiveRegistry(SystemDirectiveRegistry.INSTANCE, new UserDirectiveRegistry(context)); - try { - registry.reload(context.getNamespace()); - } catch (Exception e) { - String errorReason = "Unable to load directive from the artifacts."; - throw WranglerErrorUtil.getProgramFailureExceptionDetailsFromChain(e, errorReason, null, - ErrorType.USER); - } - - String directives = config.getDirectives(); - if (config.getUDDs() != null && !config.getUDDs().trim().isEmpty()) { - directives = String.format("#pragma load-directives %s;%s", config.getUDDs(), config.getDirectives()); - } - - try { - return new GrammarBasedParser(context.getNamespace(), new MigrateToV2(directives).migrate(), registry); - } catch (Exception e) { - String errorReason = "Unable to parse the directives."; - throw WranglerErrorUtil.getProgramFailureExceptionDetailsFromChain(e, errorReason, null, - ErrorType.USER); - } - } - - @Override - public Relation transform(RelationalTranformContext relationalTranformContext, Relation relation) { - if (PRECONDITION_LANGUAGE_SQL.equalsIgnoreCase(config.getPreconditionLanguage()) - && checkPreconditionNotEmpty(true)) { - - if (!Feature.WRANGLER_PRECONDITION_SQL.isEnabled(relationalTranformContext)) { - String errorReason = "SQL Precondition feature is not available"; - throw ErrorUtils.getProgramFailureException( - new ErrorCategory(ErrorCategory.ErrorCategoryEnum.PLUGIN), errorReason, errorReason, - ErrorType.SYSTEM, false, null); - } - - Optional> expressionFactory = getExpressionFactory(relationalTranformContext); - if (!expressionFactory.isPresent()) { - return new InvalidRelation("Cannot find an Expression Factory"); - } - - Expression filterExpression = expressionFactory.get().compile(config.getPreconditionSQL()); - return relation.filter(filterExpression); - } - - return new InvalidRelation("Plugin is not configured for relational transformation"); - } - - private Optional> getExpressionFactory(RelationalTranformContext ctx) { - return ctx.getEngine().getExpressionFactory(StringExpressionFactoryType.SQL); - } - - /** - * This method emits all metrics for the given list of directives - * - * @param directives a list of Wrangler directives - * @param metrics CDAP {@link Metrics} object using which metrics can be emitted - */ - private void emitDirectiveMetrics(List directives, Metrics metrics) { - for (Directive directive : directives) { - // skip emitting metrics if the directive is not system directive - try { - if (registry.get(Contexts.SYSTEM, directive.define().getDirectiveName()) == null) { - continue; - } - } catch (Exception e) { - String errorReason = String.format("Unable to load directive %s", - directive.define().getDirectiveName()); - throw WranglerErrorUtil.getProgramFailureExceptionDetailsFromChain(e, errorReason, null, - ErrorType.USER); - } - List countMetrics = new ArrayList<>(); - - // add usage metric - countMetrics.add(getDirectiveUsageMetric(directive.define().getDirectiveName())); - - // add custom directive metrics - if (directive.getCountMetrics() != null) { - countMetrics.addAll(directive.getCountMetrics()); - } - - for (EntityCountMetric countMetric : countMetrics) { - Metrics child = metrics.child(getEntityMetricTags(countMetric)); - child.countLong(countMetric.getName(), countMetric.getCount()); - } - } - } - - private EntityCountMetric getDirectiveUsageMetric(String directiveName) { - return new EntityCountMetric( - DIRECTIVE_METRIC_NAME, DIRECTIVE_ENTITY_TYPE, directiveName, DIRECTIVE_METRIC_COUNT); - } - - private Map getEntityMetricTags(EntityCountMetric metricDef) { - Map tags = new HashMap<>(); - tags.put(APP_ENTITY_TYPE, metricDef.getAppEntityType()); - tags.put(APP_ENTITY_TYPE_NAME, metricDef.getAppEntityTypeName()); - return tags; - } - - /** - * Config for the plugin. - */ - public static class Config extends PluginConfig { - static final String NAME_PRECONDITION = "precondition"; - static final String NAME_PRECONDITION_SQL = "preconditionSQL"; - static final String NAME_PRECONDITION_LANGUAGE = "expressionLanguage"; - static final String NAME_FIELD = "field"; - static final String NAME_DIRECTIVES = "directives"; - static final String NAME_UDD = "udd"; - static final String NAME_SCHEMA = "schema"; - static final String NAME_ON_ERROR = "on-error"; - - @Name(NAME_PRECONDITION_LANGUAGE) - @Description("Toggle to configure precondition language between JEXL and SQL") - @Macro - @Nullable - private String preconditionLanguage; - - @Name(NAME_PRECONDITION) - @Description("JEXL Precondition expression specifying filtering before applying directives (true to filter)") - @Macro - @Nullable - private String precondition; - - - @Name(NAME_PRECONDITION_SQL) - @Description("SQL Precondition expression specifying filtering before applying directives (false to filter)") - @Macro - @Nullable - private String preconditionSQL; - - - @Name(NAME_DIRECTIVES) - @Description("Recipe for wrangling the input records") - @Macro - @Nullable - private String directives; - - @Name(NAME_UDD) - @Description("List of User Defined Directives (UDD) that have to be loaded.") - @Nullable - private String udds; - - @Name(NAME_FIELD) - @Description("Name of the input field to be wrangled or '*' to wrangle all the fields.") - @Macro - private final String field; - - @Name(NAME_SCHEMA) - @Description("Specifies the schema that has to be output.") - @Macro - private final String schema; - - @Name(NAME_ON_ERROR) - @Description("How to handle error in record processing") - @Macro - @Nullable - private final String onError; - - public Config(String preconditionLanguage, String precondition, String directives, String udds, - String field, String schema, String onError) { - this.preconditionLanguage = preconditionLanguage; - this.precondition = precondition; - this.directives = directives; - this.udds = udds; - this.preconditionSQL = precondition; - this.field = field; - this.schema = schema; - this.onError = onError; - } - - /** - * @return if on-error is not specified returns default, else value. - */ - public String getOnError() { - return onError == null ? ON_ERROR_DEFAULT : onError; - } - - public String getPreconditionLanguage() { - if (Strings.isNullOrEmpty(preconditionLanguage)) { - // due to backward compatibility... - return PRECONDITION_LANGUAGE_JEXL; - } - return preconditionLanguage; - } - - public String getPreconditionJEXL() { - return precondition; - } - - public String getPreconditionSQL() { - return preconditionSQL; - } - - public String getField() { - return field; - } - - public String getDirectives() { - return directives; - } - - public String getUDDs() { - return udds; - } - } -} - diff --git a/wrangler-transform/src/main/java/io/cdap/wrangler/WranglerErrorUtil.java b/wrangler-transform/src/main/java/io/cdap/wrangler/WranglerErrorUtil.java deleted file mode 100644 index a80309f85..000000000 --- a/wrangler-transform/src/main/java/io/cdap/wrangler/WranglerErrorUtil.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright © 2025 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import com.google.common.base.Throwables; -import com.google.common.collect.ImmutableMap; -import io.cdap.cdap.api.exception.ErrorCategory; -import io.cdap.cdap.api.exception.ErrorType; -import io.cdap.cdap.api.exception.ErrorUtils; -import io.cdap.cdap.api.exception.ProgramFailureException; -import io.cdap.wrangler.api.DirectiveExecutionException; -import io.cdap.wrangler.api.DirectiveLoadException; -import io.cdap.wrangler.api.DirectiveNotFoundException; -import io.cdap.wrangler.api.DirectiveParseException; -import io.cdap.wrangler.api.RecipeException; -import io.cdap.wrangler.expression.ELException; -import io.cdap.wrangler.utils.RecordConvertorException; -import java.util.List; -import java.util.Map; - -/** - * Error util file to handle exceptions caught in Wrangler plugin - */ -public final class WranglerErrorUtil { - - - private static final Map TERMINAL_EXCEPTIONS = ImmutableMap.builder() - .put(DirectiveParseException.class.getName(), "Parsing-Directive") - .put(PreconditionException.class.getName(), "Precondition") - .put(DirectiveExecutionException.class.getName(), "Executing-Directive") - .put(DirectiveLoadException.class.getName(), "Loading-Directive") - .put(DirectiveNotFoundException.class.getName(), "Directive-Not-Found") - .put(RecordConvertorException.class.getName(), "Record-Conversion") - .put(ELException.class.getName(), "ExpressionLanguage-Parsing").build(); - - private static final Map NON_TERMINAL_EXCEPTIONS = ImmutableMap.builder() - .put(RecipeException.class.getName(), "Executing-Recipe").build(); - - /** - * Private constructor to prevent instantiation of this utility class. - *

- * This class is designed to contain only static utility methods for handling exceptions and - * should not be instantiated. Any attempt to create an instance of this class will result in an - * {@link IllegalStateException}. - */ - private WranglerErrorUtil() { - throw new IllegalStateException("Utility class"); - } - - /** - * Traverses the causal chain of the given Throwable to find specific exceptions. If a terminal - * exception is found, it returns a corresponding ProgramFailureException. If a non-terminal - * exception is found, it is stored as a fallback. Otherwise, a generic ProgramFailureException is - * returned. - * - * @param e the Throwable to analyze - * @param errorReason the error reason to tell the cause of error - * @param errorMessage default error message if no terminal exception is found - * @param errorType the error type to categorize the failure - * @return a ProgramFailureException with specific or generic error details - */ - public static ProgramFailureException getProgramFailureExceptionDetailsFromChain(Throwable e, - String errorReason, String errorMessage, ErrorType errorType) { - List causalChain = Throwables.getCausalChain(e); - Throwable nonTerminalException = null; - for (Throwable t : causalChain) { - if (t instanceof ProgramFailureException) { - return null; // Avoid multiple wrap - } - if (NON_TERMINAL_EXCEPTIONS.containsKey(t.getClass().getName())) { - nonTerminalException = t; // Store non-terminal exception as fallback - continue; - } - String errorSubCategory = TERMINAL_EXCEPTIONS.get(t.getClass().getName()); - if (errorSubCategory != null) { - return getProgramFailureException(t, errorReason, errorSubCategory); - } - } - - if (nonTerminalException != null) { - return getProgramFailureException(nonTerminalException, errorReason, - NON_TERMINAL_EXCEPTIONS.get(nonTerminalException.getClass().getName())); - } - - return ErrorUtils.getProgramFailureException( - new ErrorCategory(ErrorCategory.ErrorCategoryEnum.PLUGIN), errorReason, errorMessage, - errorType, false, e); - } - - /** - * Constructs a ProgramFailureException using the provided exception details. - * - * @param exception the exception to wrap - * @param errorSubCategory specific subcategory of the error - * @return a new ProgramFailureException with the extracted details - */ - private static ProgramFailureException getProgramFailureException(Throwable exception, - String errorReason, String errorSubCategory) { - String errorMessage = exception.getMessage(); - return ErrorUtils.getProgramFailureException( - new ErrorCategory(ErrorCategory.ErrorCategoryEnum.PLUGIN, errorSubCategory), errorReason, - errorMessage, ErrorType.USER, false, exception); - } -} diff --git a/wrangler-transform/src/main/java/io/cdap/wrangler/WranglerPipelineContext.java b/wrangler-transform/src/main/java/io/cdap/wrangler/WranglerPipelineContext.java deleted file mode 100644 index 4f79472a4..000000000 --- a/wrangler-transform/src/main/java/io/cdap/wrangler/WranglerPipelineContext.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import io.cdap.cdap.etl.api.Lookup; -import io.cdap.cdap.etl.api.StageMetrics; -import io.cdap.cdap.etl.api.TransformContext; -import io.cdap.wrangler.api.Executor; -import io.cdap.wrangler.api.ExecutorContext; -import io.cdap.wrangler.api.TransientStore; - -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -/** - * This class {@link WranglerPipelineContext} is a runtime context that is provided for each - * {@link Executor} execution. - */ -class WranglerPipelineContext implements ExecutorContext { - private final Environment environment; - private final TransformContext context; - - private final TransientStore store; - private final StageMetrics metrics; - private final String name; - private final Map properties; - - WranglerPipelineContext(Environment environment, TransformContext context, TransientStore store) { - this.environment = environment; - this.metrics = context.getMetrics(); - this.name = context.getStageName(); - this.properties = new HashMap<>(context.getPluginProperties().getProperties()); - for (Map.Entry next : context.getArguments()) { - this.properties.put(next.getKey(), next.getValue()); - } - this.context = context; - this.store = store; - } - - @Override - public String getNamespace() { - return context.getNamespace(); - } - - /** - * @return Environment this context is prepared for. - */ - @Override - public Environment getEnvironment() { - return environment; - } - - /** - * @return Measurements context. - */ - @Override - public StageMetrics getMetrics() { - return metrics; - } - - /** - * @return Context name. - */ - @Override - public String getContextName() { - return name; - } - - /** - * @return Properties associated with run and pipeline. - */ - @Override - public Map getProperties() { - return properties; - } - - /** - * Returns a valid service url. - * - * @param applicationId id of the application to which a service url. - * @param serviceId id of the service within application. - * @return URL if service exists, else null. - */ - @Override - public URL getService(String applicationId, String serviceId) { - return context.getServiceURL(applicationId, serviceId); - } - - @Override - public TransientStore getTransientStore() { - return store; - } - - /** - * Provides a handle to dataset for lookup. - * - * @param s name of the dataset. - * @param map properties associated with dataset. - * @return handle to dataset for lookup. - */ - @Override - public Lookup provide(String s, Map map) { - return context.provide(s, map); - } -} diff --git a/wrangler-transform/src/test/java/io/cdap/wrangler/PreconditionTest.java b/wrangler-transform/src/test/java/io/cdap/wrangler/PreconditionTest.java deleted file mode 100644 index e492b86f3..000000000 --- a/wrangler-transform/src/test/java/io/cdap/wrangler/PreconditionTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright © 2017-2019 Cask Data, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package io.cdap.wrangler; - -import io.cdap.wrangler.api.Row; -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests {@link Precondition} - */ -public class PreconditionTest { - - @Test - public void testPrecondition() throws Exception { - Row row = new Row("a", 1).add("b", "x").add("c", 2.06); - Assert.assertEquals(true, new Precondition("a == 1 && b == \"x\"").apply(row)); - Assert.assertEquals(true, new Precondition("c > 2.0").apply(row)); - Assert.assertEquals(true, new Precondition("true").apply(row)); - Assert.assertEquals(false, new Precondition("false").apply(row)); - } - - @Test(expected = PreconditionException.class) - public void testBadCondition() throws Exception { - Row row = new Row("a", 1).add("b", "x").add("c", 2.06); - Assert.assertEquals(true, new Precondition("c").apply(row)); - } -} diff --git a/wrangler-transform/widgets/Wrangler-transform.json b/wrangler-transform/widgets/Wrangler-transform.json deleted file mode 100644 index 9f9c7611e..000000000 --- a/wrangler-transform/widgets/Wrangler-transform.json +++ /dev/null @@ -1,171 +0,0 @@ -{ - "metadata": { - "spec-version": "1.6" - }, - "configuration-groups": [ - { - "label" : "Input Selection and Prefilters", - "properties" : [ - { - "widget-type" : "hidden", - "name" : "workspace" - }, - { - "widget-type": "textbox", - "label": "Input field name", - "name": "field", - "widget-attributes" : { - "default": "*" - } - }, - { - "widget-type": "radio-group", - "name": "expressionLanguage", - "label": "Precondition Language", - "widget-attributes": { - "layout": "inline", - "default": "jexl", - "options": [ - { - "id": "jexl", - "label": "JEXL" - }, - { - "id": "sql", - "label": "SQL" - } - ] - } - }, - { - "widget-type": "textbox", - "label": "Precondition (JEXL)", - "name": "precondition", - "widget-attributes" : { - "default" : "false" - } - }, - { - "widget-type": "textbox", - "label": "Precondition (SQL)", - "name": "preconditionSQL", - "widget-attributes" : { - "default" : "false" - } - } - ] - }, - { - "label": "Directives", - "properties": [ - { - "widget-type": "wrangler-directives", - "label": "Recipe", - "name": "directives", - "widget-attributes" : { - "placeholder" : "#pragma load-directives my-directive; my-directive :body;" - } - }, - { - "widget-type": "csv", - "label": "User Defined Directives(UDD)", - "name": "udd" - } - ] - }, - { - "label" : "Error Handling", - "properties" : [ - { - "name": "on-error", - "label": "On Error", - "widget-type": "radio-group", - "widget-attributes": { - "layout": "block", - "default": "fail-pipeline", - "options": [ - { - "id": "skip-error", - "label": "Skip error" - }, - { - "id": "send-to-error-port", - "label": "Send to error port" - }, - { - "id": "fail-pipeline", - "label": "Fail pipeline" - } - ] - } - } - ] - } - ], - "emit-alerts": true, - "emit-errors": true, - "filters": [ - { - "name": "PreconditionValueNotSQL", - "condition": { - "expression": "expressionLanguage != 'sql'" - }, - "show": [ - { - "type": "properties", - "name": "precondition" - } - ] - }, - { - "name": "preconditionValueSQL", - "condition": { - "expression": "expressionLanguage == 'sql'" - }, - "show": [ - { - "type": "properties", - "name": "preconditionSQL" - } - ] - }, - { - "name": "preconditionSQLEnabled", - "condition": { - "expression": "featureFlags['wrangler.precondition.sql.enabled'] == true" - }, - "show": [ - { - "type": "properties", - "name": "expressionLanguage" - } - ] - } - ], - "outputs": [ - { - "name": "schema", - "label": "schema", - "widget-type": "schema", - "widget-attributes": { - "schema-types": [ - "boolean", - "int", - "long", - "float", - "double", - "bytes", - "string", - "timestamp", - "array", - "enum", - "record", - "map", - "union" - ], - "schema-default-type": "string", - "property-watch": "format" - } - } - ] -} \ No newline at end of file